ZGlmZiAtLWdpdCBhLy5naXRhdHRyaWJ1dGVzIGIvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5ODgwNgotLS0gL2Rldi9udWxsCisrKyBiLy5naXRhdHRyaWJ1dGVzCkBAIC0wLDAgKzEsMyBAQAorKiB3aGl0ZXNwYWNlPSFpbmRlbnQsdHJhaWwsc3BhY2UKKyouW2NoXSB3aGl0ZXNwYWNlPWluZGVudCx0cmFpbCxzcGFjZQorKi5zaCB3aGl0ZXNwYWNlPWluZGVudCx0cmFpbCxzcGFjZQpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggZDdlYmNhZi4uMWMyZjgzMiAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3JlCkBAIC0xLDIgKzEsMjUzIEBACi0vR0lULVRDTFRLLVZBUlMKLS9naXRrLXdpc2gKKy9HSVQtQlVJTEQtT1BUSU9OUworL0dJVC1DRkxBR1MKKy9HSVQtTERGTEFHUworL0dJVC1QUkVGSVgKKy9HSVQtUEVSTC1ERUZJTkVTCisvR0lULVBZVEhPTi1WQVJTCisvR0lULVNDUklQVC1ERUZJTkVTCisvR0lULVVTRVItQUdFTlQKKy9HSVQtVkVSU0lPTi1GSUxFCisvYmluLXdyYXBwZXJzLworL2dpdAorL2dpdC1hZGQKKy9naXQtYWRkLS1pbnRlcmFjdGl2ZQorL2dpdC1hbQorL2dpdC1hbm5vdGF0ZQorL2dpdC1hcHBseQorL2dpdC1hcmNoaW1wb3J0CisvZ2l0LWFyY2hpdmUKKy9naXQtYmlzZWN0CisvZ2l0LWJpc2VjdC0taGVscGVyCisvZ2l0LWJsYW1lCisvZ2l0LWJyYW5jaAorL2dpdC1idW5kbGUKKy9naXQtY2F0LWZpbGUKKy9naXQtY2hlY2stYXR0cgorL2dpdC1jaGVjay1pZ25vcmUKKy9naXQtY2hlY2stbWFpbG1hcAorL2dpdC1jaGVjay1yZWYtZm9ybWF0CisvZ2l0LWNoZWNrb3V0CisvZ2l0LWNoZWNrb3V0LWluZGV4CisvZ2l0LWNoZXJyeQorL2dpdC1jaGVycnktcGljaworL2dpdC1jbGVhbgorL2dpdC1jbG9uZQorL2dpdC1jb2x1bW4KKy9naXQtY29tbWl0CisvZ2l0LWNvbW1pdC10cmVlCisvZ2l0LWNvbmZpZworL2dpdC1jb3VudC1vYmplY3RzCisvZ2l0LWNyZWRlbnRpYWwKKy9naXQtY3JlZGVudGlhbC1jYWNoZQorL2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24KKy9naXQtY3JlZGVudGlhbC1zdG9yZQorL2dpdC1jdnNleHBvcnRjb21taXQKKy9naXQtY3ZzaW1wb3J0CisvZ2l0LWN2c3NlcnZlcgorL2dpdC1kYWVtb24KKy9naXQtZGlmZgorL2dpdC1kaWZmLWZpbGVzCisvZ2l0LWRpZmYtaW5kZXgKKy9naXQtZGlmZi10cmVlCisvZ2l0LWRpZmZ0b29sCisvZ2l0LWRpZmZ0b29sLS1oZWxwZXIKKy9naXQtZGVzY3JpYmUKKy9naXQtZmFzdC1leHBvcnQKKy9naXQtZmFzdC1pbXBvcnQKKy9naXQtZmV0Y2gKKy9naXQtZmV0Y2gtcGFjaworL2dpdC1maWx0ZXItYnJhbmNoCisvZ2l0LWZtdC1tZXJnZS1tc2cKKy9naXQtZm9yLWVhY2gtcmVmCisvZ2l0LWZvcm1hdC1wYXRjaAorL2dpdC1mc2NrCisvZ2l0LWZzY2stb2JqZWN0cworL2dpdC1nYworL2dpdC1nZXQtdGFyLWNvbW1pdC1pZAorL2dpdC1ncmVwCisvZ2l0LWhhc2gtb2JqZWN0CisvZ2l0LWhlbHAKKy9naXQtaHR0cC1iYWNrZW5kCisvZ2l0LWh0dHAtZmV0Y2gKKy9naXQtaHR0cC1wdXNoCisvZ2l0LWltYXAtc2VuZAorL2dpdC1pbmRleC1wYWNrCisvZ2l0LWluaXQKKy9naXQtaW5pdC1kYgorL2dpdC1pbnRlcnByZXQtdHJhaWxlcnMKKy9naXQtaW5zdGF3ZWIKKy9naXQtbG9nCisvZ2l0LWxzLWZpbGVzCisvZ2l0LWxzLXJlbW90ZQorL2dpdC1scy10cmVlCisvZ2l0LW1haWxpbmZvCisvZ2l0LW1haWxzcGxpdAorL2dpdC1tZXJnZQorL2dpdC1tZXJnZS1iYXNlCisvZ2l0LW1lcmdlLWluZGV4CisvZ2l0LW1lcmdlLWZpbGUKKy9naXQtbWVyZ2UtdHJlZQorL2dpdC1tZXJnZS1vY3RvcHVzCisvZ2l0LW1lcmdlLW9uZS1maWxlCisvZ2l0LW1lcmdlLW91cnMKKy9naXQtbWVyZ2UtcmVjdXJzaXZlCisvZ2l0LW1lcmdlLXJlc29sdmUKKy9naXQtbWVyZ2Utc3VidHJlZQorL2dpdC1tZXJnZXRvb2wKKy9naXQtbWVyZ2V0b29sLS1saWIKKy9naXQtbWt0YWcKKy9naXQtbWt0cmVlCisvZ2l0LW5hbWUtcmV2CisvZ2l0LW12CisvZ2l0LW5vdGVzCisvZ2l0LXA0CisvZ2l0LXBhY2stcmVkdW5kYW50CisvZ2l0LXBhY2stb2JqZWN0cworL2dpdC1wYWNrLXJlZnMKKy9naXQtcGFyc2UtcmVtb3RlCisvZ2l0LXBhdGNoLWlkCisvZ2l0LXBydW5lCisvZ2l0LXBydW5lLXBhY2tlZAorL2dpdC1wdWxsCisvZ2l0LXB1c2gKKy9naXQtcXVpbHRpbXBvcnQKKy9naXQtcmVhZC10cmVlCisvZ2l0LXJlYmFzZQorL2dpdC1yZWJhc2UtLWFtCisvZ2l0LXJlYmFzZS0taW50ZXJhY3RpdmUKKy9naXQtcmViYXNlLS1tZXJnZQorL2dpdC1yZWNlaXZlLXBhY2sKKy9naXQtcmVmbG9nCisvZ2l0LXJlbGluaworL2dpdC1yZW1vdGUKKy9naXQtcmVtb3RlLWh0dHAKKy9naXQtcmVtb3RlLWh0dHBzCisvZ2l0LXJlbW90ZS1mdHAKKy9naXQtcmVtb3RlLWZ0cHMKKy9naXQtcmVtb3RlLWZkCisvZ2l0LXJlbW90ZS1leHQKKy9naXQtcmVtb3RlLXRlc3RnaXQKKy9naXQtcmVtb3RlLXRlc3RweQorL2dpdC1yZW1vdGUtdGVzdHN2bgorL2dpdC1yZXBhY2sKKy9naXQtcmVwbGFjZQorL2dpdC1yZXF1ZXN0LXB1bGwKKy9naXQtcmVyZXJlCisvZ2l0LXJlc2V0CisvZ2l0LXJldi1saXN0CisvZ2l0LXJldi1wYXJzZQorL2dpdC1yZXZlcnQKKy9naXQtcm0KKy9naXQtc2VuZC1lbWFpbAorL2dpdC1zZW5kLXBhY2sKKy9naXQtc2gtaTE4bgorL2dpdC1zaC1pMThuLS1lbnZzdWJzdAorL2dpdC1zaC1zZXR1cAorL2dpdC1zaC1pMThuCisvZ2l0LXNoZWxsCisvZ2l0LXNob3J0bG9nCisvZ2l0LXNob3cKKy9naXQtc2hvdy1icmFuY2gKKy9naXQtc2hvdy1pbmRleAorL2dpdC1zaG93LXJlZgorL2dpdC1zdGFnZQorL2dpdC1zdGFzaAorL2dpdC1zdGF0dXMKKy9naXQtc3RyaXBzcGFjZQorL2dpdC1zdWJtb2R1bGUKKy9naXQtc3VibW9kdWxlLS1oZWxwZXIKKy9naXQtc3ZuCisvZ2l0LXN5bWJvbGljLXJlZgorL2dpdC10YWcKKy9naXQtdW5wYWNrLWZpbGUKKy9naXQtdW5wYWNrLW9iamVjdHMKKy9naXQtdXBkYXRlLWluZGV4CisvZ2l0LXVwZGF0ZS1yZWYKKy9naXQtdXBkYXRlLXNlcnZlci1pbmZvCisvZ2l0LXVwbG9hZC1hcmNoaXZlCisvZ2l0LXVwbG9hZC1wYWNrCisvZ2l0LXZhcgorL2dpdC12ZXJpZnktY29tbWl0CisvZ2l0LXZlcmlmeS1wYWNrCisvZ2l0LXZlcmlmeS10YWcKKy9naXQtd2ViLS1icm93c2UKKy9naXQtd2hhdGNoYW5nZWQKKy9naXQtd29ya3RyZWUKKy9naXQtd3JpdGUtdHJlZQorL2dpdC1jb3JlLSovPyoKKy9naXR3ZWIvR0lUV0VCLUJVSUxELU9QVElPTlMKKy9naXR3ZWIvZ2l0d2ViLmNnaQorL2dpdHdlYi9zdGF0aWMvZ2l0d2ViLmpzCisvZ2l0d2ViL3N0YXRpYy9naXR3ZWIubWluLioKKy90ZXN0LWNobXRpbWUKKy90ZXN0LWN0eXBlCisvdGVzdC1jb25maWcKKy90ZXN0LWRhdGUKKy90ZXN0LWRlbHRhCisvdGVzdC1kdW1wLWNhY2hlLXRyZWUKKy90ZXN0LWR1bXAtc3BsaXQtaW5kZXgKKy90ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlCisvdGVzdC1zY3JhcC1jYWNoZS10cmVlCisvdGVzdC1nZW5yYW5kb20KKy90ZXN0LWhhc2htYXAKKy90ZXN0LWluZGV4LXZlcnNpb24KKy90ZXN0LWxpbmUtYnVmZmVyCisvdGVzdC1tYXRjaC10cmVlcworL3Rlc3QtbWVyZ2Vzb3J0CisvdGVzdC1ta3RlbXAKKy90ZXN0LXBhcnNlLW9wdGlvbnMKKy90ZXN0LXBhdGgtdXRpbHMKKy90ZXN0LXByaW8tcXVldWUKKy90ZXN0LXJlYWQtY2FjaGUKKy90ZXN0LXJlZ2V4CisvdGVzdC1yZXZpc2lvbi13YWxraW5nCisvdGVzdC1ydW4tY29tbWFuZAorL3Rlc3Qtc2hhMQorL3Rlc3Qtc2hhMS1hcnJheQorL3Rlc3Qtc2lnY2hhaW4KKy90ZXN0LXN0cmluZy1saXN0CisvdGVzdC1zdWJtb2R1bGUtY29uZmlnCisvdGVzdC1zdWJwcm9jZXNzCisvdGVzdC1zdm4tZmUKKy90ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24KKy90ZXN0LXdpbGRtYXRjaAorL2NvbW1vbi1jbWRzLmgKKyoudGFyLmd6CisqLmRzYworKi5kZWIKKy9naXQuc3BlYworKi5leGUKKyouW2Fvc10KKyoucHlbY29dCisuZGVwZW5kLworKi5nY2RhCisqLmdjbm8KKyouZ2NvdgorL2NvdmVyYWdlLXVudGVzdGVkLWZ1bmN0aW9ucworL2NvdmVyX2RiLworL2NvdmVyX2RiX2h0bWwvCisqKworL2NvbmZpZy5tYWsKKy9hdXRvbTR0ZS5jYWNoZQorL2NvbmZpZy5jYWNoZQorL2NvbmZpZy5sb2cKKy9jb25maWcuc3RhdHVzCisvY29uZmlnLm1hay5hdXRvZ2VuCisvY29uZmlnLm1hay5hcHBlbmQKKy9jb25maWd1cmUKKy91bmljb2RlCisvdGFncworL1RBR1MKKy9jc2NvcGUqCisqLm9iagorKi5saWIKKyoucmVzCisqLnNsbgorKi5zdW8KKyoubmNiCisqLnZjcHJvagorKi51c2VyCisqLmlkYgorKi5wZGIKKy9EZWJ1Zy8KKy9SZWxlYXNlLwpkaWZmIC0tZ2l0IGEvLm1haWxtYXAgYi8ubWFpbG1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWI0MTI2Ci0tLSAvZGV2L251bGwKKysrIGIvLm1haWxtYXAKQEAgLTAsMCArMSwyNTQgQEAKKyMKKyMgVGhpcyBsaXN0IGlzIHVzZWQgYnkgZ2l0LXNob3J0bG9nIHRvIGZpeCBhIGZldyBib3RjaGVkIG5hbWUgdHJhbnNsYXRpb25zCisjIGluIHRoZSBnaXQgYXJjaGl2ZSwgZWl0aGVyIGJlY2F1c2UgdGhlIGF1dGhvcidzIGZ1bGwgbmFtZSB3YXMgbWVzc2VkIHVwCisjIGFuZC9vciBub3QgYWx3YXlzIHdyaXR0ZW4gdGhlIHNhbWUgd2F5LCBtYWtpbmcgY29udHJpYnV0aW9ucyBmcm9tIHRoZQorIyBzYW1lIHBlcnNvbiBhcHBlYXJpbmcgbm90IHRvIGJlIHNvLgorIworCis8bmljb0BmbHV4bmljLm5ldD4gPG5pY29AY2FtLm9yZz4KK0FsZWphbmRybyBSLiBTZWRlw7FvIDxhc2VkZW5vQE1JVC5FRFU+IDxhc2VkZW5vQG1pdC5lZHU+CitBbGV4IEJlbm7DqWUgPGtlcm5lbC1oYWNrZXJAYmVubmVlLmNvbT4KK0FsZXggUmllc2VuIDxyYWEubGttbEBnbWFpbC5jb20+IDxmb3JrMEB0LW9ubGluZS5kZT4KK0FsZXggUmllc2VuIDxyYWEubGttbEBnbWFpbC5jb20+IDxyYWFAbGltYm8ubG9jYWxkb21haW4+CitBbGV4IFJpZXNlbiA8cmFhLmxrbWxAZ21haWwuY29tPiA8cmFhQHN0ZWVsLmhvbWU+CitBbGV4IFZhbmRpdmVyIDxhbGV4QGNobXJyLm5ldD4gPGFsZXhtdkBNSVQuRURVPgorQWxleGFuZGVyIEdhdnJpbG92IDxhbmdhdnJpbG92QGdtYWlsLmNvbT4KK0FsZXhhbmRlciBLdWxlc2hvdiA8a3VsZXNob3ZtYWlsQGdtYWlsLmNvbT4KK0FsZXhleSBTaHVta2luIDxhbGV4LmNyZXpvZmZAZ21haWwuY29tPiA8emFwcGVkQG1haWwucnU+CitBbGV4ZXkgU2h1bWtpbiA8YWxleC5jcmV6b2ZmQGdtYWlsLmNvbT4gPEFsZXguQ3Jlem9mZkBnbWFpbC5jb20+CitBbmRlcnMgS2FzZW9yZyA8YW5kZXJza0BNSVQuRURVPiA8YW5kZXJza0Brc3BsaWNlLmNvbT4KK0FuZGVycyBLYXNlb3JnIDxhbmRlcnNrQE1JVC5FRFU+IDxhbmRlcnNrQG1pdC5lZHU+CitBbmVlc2ggS3VtYXIgSy5WIDxhbmVlc2gua3VtYXJAZ21haWwuY29tPgorQW1vcyBXYXRlcmxhbmQgPGFwd0BkZWJpYW4ub3JnPiA8YXB3QHJvc3NieS5tZXRyLm91LmVkdT4KK0Ftb3MgV2F0ZXJsYW5kIDxhcHdAZGViaWFuLm9yZz4gPGFwd0B1cy5pYm0uY29tPgorQmVuIFdhbHRvbiA8YmR3YWx0b25AZ21haWwuY29tPiA8YndhbHRvbkBhcnRzY2kudXRvcm9udG8uY2E+CitCZW5vaXQgU2lnb3VyZSA8dHN1bmFuZXRAZ21haWwuY29tPiA8dHN1bmFAbHJkZS5lcGl0YS5mcj4KK0Jlcm50IEhhbnNlbiA8YmVybnRAbm9yYW5nLmNhPiA8YmVybnRAYWx1bW5pLnV3YXRlcmxvby5jYT4KK0JyYW5kb24gQ2FzZXkgPGRyYWZuZWxAZ21haWwuY29tPiA8Y2FzZXlAbnJsc3NjLm5hdnkubWlsPgorYnJpYW4gbS4gY2FybHNvbiA8c2FuZGFsc0BjcnVzdHl0b290aHBhc3RlLmF0aC5jeD4gQnJpYW4gTS4gQ2FybHNvbiA8c2FuZGFsc0BjcnVzdHl0b290aHBhc3RlLmF0aC5jeD4KK2JyaWFuIG0uIGNhcmxzb24gPHNhbmRhbHNAY3J1c3R5dG9vdGhwYXN0ZS5hdGguY3g+IDxzYW5kYWxzQGNydXN0eXRvb3RocGFzdGUubmV0PgorQnJ5YW4gTGFyc2VuIDxicnlhbkBsYXJzZW4uc3Q+IDxicnlhbi5sYXJzZW5AZ21haWwuY29tPgorQnJ5YW4gTGFyc2VuIDxicnlhbkBsYXJzZW4uc3Q+IDxicnlhbmxhcnNlbkB5YWhvby5jb20+CitDaGVuZyBSZW5xdWFuIDxjcnF1YW5AZ21haWwuY29tPgorQ2hyaXMgU2hvZW1ha2VyIDxjLnNob2VtYWtlckBjb3gubmV0PgorQ2hyaXMgV3JpZ2h0IDxjaHJpc3dAc291cy1zb2wub3JnPiA8Y2hyaXN3QG9zZGwub3JnPgorQ29yZCBTZWVsZSA8Y293b3NlQGdtYWlsLmNvbT4gPGNvd29zZUBnb29nbGVtYWlsLmNvbT4KK0NocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT4gPGNoc0Bja2lzdGUuZ29ldGhlYWxsZWU+CitDc2FiYSBIZW5rIDxjc2FiYUBnbHVzdGVyLmNvbT4gPGNzYWJhQGxvd2xpZmUuaHU+CitEYW4gSm9obnNvbiA8Y29tcHV0ZXJkcnVpZEBnbWFpbC5jb20+CitEYW5hIEwuIEhvdyA8ZGFuYWhvd0BnbWFpbC5jb20+IDxob3dAZGVhdGh2YWxsZXkuY3N3aXRjaC5jb20+CitEYW5hIEwuIEhvdyA8ZGFuYWhvd0BnbWFpbC5jb20+IERhbmEgSG93CitEYW5pZWwgQmFya2Fsb3cgPGJhcmthbG93QGlhYmVydm9uLm9yZz4KK0RhbmllbCBUcnN0ZW5qYWsgPGRhbmllbC50cnN0ZW5qYWtAZ21haWwuY29tPiA8ZGFuaWVsLnRyc3Rlbmpha0BvbmxpbmUuZGU+CitEYW5pZWwgVHJzdGVuamFrIDxkYW5pZWwudHJzdGVuamFrQGdtYWlsLmNvbT4gPHRyc3RlbkBzY2llbmNlLWNvbXB1dGluZy5kZT4KK0RhdmlkIEJyb3duIDxnaXRAZGF2aWRiLm9yZz4gPGRhdmlkYkBxdWljaW5jLmNvbT4KK0RhdmlkIEQuIEtpbHplciA8ZGRraWx6ZXJAa2lsemVyLm5ldD4KK0RhdmlkIEvDpWdlZGFsIDxkYXZpZGtAbHlzYXRvci5saXUuc2U+CitEYXZpZCBSZWlzcyA8ZHJlaXNzQGZhY2Vib29rLmNvbT4gPGRyZWlzc0BkcmVpc3Mtdm13YXJlLihub25lKT4KK0RhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4KK0Rlc2tpbiBNaWxsZXIgPGRlc2tpbm1AdW1pY2guZWR1PgorRGlyayBTw7xzc2Vyb3R0IDxuZXdzbGV0dGVyQGRpcmsubXkxLmNjPgorRXJpYyBCbGFrZSA8ZWJsYWtlQHJlZGhhdC5jb20+IDxlYmI5QGJ5dS5uZXQ+CitFcmljIEhhbmNocm93IDxlcmljLmhhbmNocm93QGdtYWlsLmNvbT4gPG9mZmJ5MUBibGFyZy5uZXQ+CitFcmljIFMuIFJheW1vbmQgPGVzckB0aHlyc3VzLmNvbT4KK0VyaWsgRmF5ZS1MdW5kIDxrdXNtYWJpdGVAZ21haWwuY29tPiA8a3VzbWFiaXRlQGdvb2dsZW1haWwuY29tPgorRXl2aW5kIEJlcm5oYXJkc2VuIDxleXZpbmQuYmVybmhhcmRzZW5AZ21haWwuY29tPiA8ZXl2aW5kLWdpdEBvcmFrZWwubnRudS5ubz4KK0Zsb3JpYW4gQWNobGVpdG5lciA8Zmxvcmlhbi5hY2hsZWl0bmVyLjIuNi4zMUBnbWFpbC5jb20+IDxmbG9yaWFuLmFjaGxlaXRuZXIyLjYuMzFAZ21haWwuY29tPgorRnJhbmNrIEJ1aS1IdXUgPHZhZ2Fib24ueHl6QGdtYWlsLmNvbT4gPGZidWlodXVAZ21haWwuY29tPgorRnJhbmsgTGljaHRlbmhlbGQgPGZyYW5rQGxpY2h0ZW5oZWxkLmRlPiA8ZGpwaWdAZGViaWFuLm9yZz4KK0ZyYW5rIExpY2h0ZW5oZWxkIDxmcmFua0BsaWNodGVuaGVsZC5kZT4gPGZsaWNodGVuaGVsZEBhc3Rhcm8uY29tPgorRnJlZHJpayBLdWl2aW5lbiA8ZnJla3VpQGdtYWlsLmNvbT4gPGZyZWt1MDQ1QHN0dWRlbnQubGl1LnNlPgorRnLDqWTDqXJpYyBIZWl0em1hbm4gPGZyZWRlcmljLmhlaXR6bWFubkBnbWFpbC5jb20+CitHYXJyeSBEb2xsZXkgPGdkb2xsZXlAdWNsYS5lZHU+IDxnZG9sbGV5QGFycG5ldHdvcmtzLmNvbT4KK0dyZWcgUHJpY2UgPHByaWNlQG1pdC5lZHU+IDxwcmljZUBNSVQuRURVPgorR3JlZyBQcmljZSA8cHJpY2VAbWl0LmVkdT4gPHByaWNlQGtzcGxpY2UuY29tPgorSGVpa28gVm9pZ3QgPGh2b2lndEBodm9pZ3QubmV0PiA8Z2l0LWxpc3RAaHZvaWd0Lm5ldD4KK0guIE1lcmlqbiBCcmFuZCA8aC5tLmJyYW5kQHhzNGFsbC5ubD4gSC5NZXJpam4gQnJhbmQgPGgubS5icmFuZEB4czRhbGwubmw+CitILiBQZXRlciBBbnZpbiA8aHBhQHp5dG9yLmNvbT4gPGhwYUBib25kZS5zYy5vcmlvbm11bHRpLmNvbT4KK0guIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPiA8aHBhQHNteXJuby5ob3MuYW52aW4ub3JnPgorSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+IDxocGFAdGF6ZW5kYS5zYy5vcmlvbm11bHRpLmNvbT4KK0guIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPiA8aHBhQHRyYW50b3IuaG9zLmFudmluLm9yZz4KK0hhbi1XZW4gTmllbmh1eXMgPGhhbndlbkBnb29nbGUuY29tPiBIYW4tV2VuIE5pZW5odXlzIDxoYW53ZW5AeHM0YWxsLm5sPgorSG9yc3QgSC4gdm9uIEJyYW5kIDx2b25icmFuZEBpbmYudXRmc20uY2w+CitKLiBCcnVjZSBGaWVsZHMgPGJmaWVsZHNAY2l0aS51bWljaC5lZHU+IDxiZmllbGRzQGZpZWxkc2VzLm9yZz4KK0ouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BjaXRpLnVtaWNoLmVkdT4gPGJmaWVsZHNAcGlnLmxpbnV4ZGV2LnVzLmRlbGwuY29tPgorSi4gQnJ1Y2UgRmllbGRzIDxiZmllbGRzQGNpdGkudW1pY2guZWR1PiA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPgorSmFrdWIgTmFyxJlic2tpIDxqbmFyZWJAZ21haWwuY29tPgorSmFtZXMgWSBLbmlnaHQgPGprbmlnaHRAaXRhc29mdHdhcmUuY29tPiA8Zm9vbUBmdWhtLm5ldD4KKyMgVGhlIDIgZm9sbG93aW5nIGF1dGhvcnMgYXJlIHByb2JhYmx5IHRoZSBzYW1lIHBlcnNvbiwKKyMgYnV0IGJvdGggZW1haWxzIGJvdW5jZS4KK0phc29uIE1jTXVsbGFuIDxqYXNvbi5tY211bGxhbkB0aW1lc3lzLmNvbT4KK0phc29uIE1jTXVsbGFuIDxtY211bGxhbkBuZXRhcHAuY29tPgorSmFzb24gUmllZHkgPGVqckBlZWNzLmJlcmtlbGV5LmVkdT4gPGVqckBFRUNTLkJlcmtlbGV5LkVEVT4KK0phc29uIFJpZWR5IDxlanJAZWVjcy5iZXJrZWxleS5lZHU+IDxlanJAY3MuYmVya2VsZXkuZWR1PgorSmF5IFNvZmZpYW4gPGpheXNvZmZpYW5AZ21haWwuY29tPiA8amF5c29mZmlhbitnaXRAZ21haWwuY29tPgorSmVmZiBLaW5nIDxwZWZmQHBlZmYubmV0PiA8cGVmZkBnaXRodWIuY29tPgorSmVmZiBNdWl6ZWxhYXIgPGptdWl6ZWxhYXJAbW96aWxsYS5jb20+IDxqZWZmQGluZmlkaWdtLm5ldD4KK0plbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4gPGF4Ym9lQHN1c2UuZGU+CitKZW5zIEF4Ym9lIDxheGJvZUBrZXJuZWwuZGs+IDxqZW5zLmF4Ym9lQG9yYWNsZS5jb20+CitKZW5zIExpbmRzdHLDtm0gPGpsQG9wZXJhLmNvbT4gSmVucyBMaW5kc3Ryb20gPGpsQG9wZXJhLmNvbT4KK0ppbSBNZXllcmluZyA8amltQG1leWVyaW5nLm5ldD4gPG1leWVyaW5nQHJlZGhhdC5jb20+CitKb2FjaGltIEJlcmRhbCBIYWdhIDxjamhhZ2FAZnlzLnVpby5ubz4KK0pvaGFubmVzIFNjaGluZGVsaW4gPEpvaGFubmVzLlNjaGluZGVsaW5AZ214LmRlPiA8am9oYW5uZXMuc2NoaW5kZWxpbkBnbXguZGU+CitKb2hhbm5lcyBTaXh0IDxqNnRAa2RiZy5vcmc+IDxKLlNpeHRAZXVkYXB0aWNzLmNvbT4KK0pvaGFubmVzIFNpeHQgPGo2dEBrZGJnLm9yZz4gPGouc2l4dEB2aXNjb3ZlcnkubmV0PgorSm9oYW5uZXMgU2l4dCA8ajZ0QGtkYmcub3JnPiA8am9oYW5uZXMuc2l4dEB0ZWxlY29tLmF0PgorSm9obiAnV2FydGhvZzknIEhhd2xleSA8d2FydGhvZzlAa2VybmVsLm9yZz4gPHdhcnRob2c5QGVhZ2xlc2NyYWcubmV0PgorSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4gPGpkbEBmcmVlc2NhbGUuY29tPgorSm9uIExvZWxpZ2VyIDxqZGxAamRsLmNvbT4gPGpkbEBmcmVlc2NhbGUub3JnPgorSm9uIFNleW1vdXIgPGpvbi5zZXltb3VyQGdtYWlsLmNvbT4gPGpvbkBibGFja2N1YmVzLmR5bmRucy5vcmc+CitKb25hdGhhbiBOaWVkZXIgPGpybmllZGVyQGdtYWlsLmNvbT4gPGpybmllZGVyQHVjaGljYWdvLmVkdT4KK0pvbmF0aGFuIGRlbCBTdHJvdGhlciA8am9uLmRlbFN0cm90aGVyQGJlc3RiZWZvcmUudHY+IDxtYWlsbGlzdEBzdGVlbHNraWVzLmNvbT4KK0pvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4gPGpvc2hAZnJlZWRlc2t0b3Aub3JnPgorSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPiA8am9zaHRAdXMuaWJtLmNvbT4KK0p1bGlhbiBQaGlsbGlwcyA8anVsaWFuQHF1YW50dW1meXJlLmNvLnVrPiA8anAzQHF1YW50dW1meXJlLmNvLnVrPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8Z2l0c3RlckBwb2JveC5jb20+CitKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IDxqdW5pb0BoZXJhLmtlcm5lbC5vcmc+CitKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IDxqdW5pb0BrZXJuZWwub3JnPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVuaW9AcG9ib3guY29tPgorSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPiA8anVuaW9AdHdpbnN1bi5jb20+CitKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IDxqdW5raW9AY294Lm5ldD4KK0p1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gPGp1bmtpb0B0d2luc3VuLmNvbT4KK0thcmwgV2liZXJnIDxraGFAdHJlc2thbC5jb20+IEthcmwgIEhhc3NlbHN0csO2bQorS2FybCBXaWJlcmcgPGtoYUB0cmVza2FsLmNvbT4gPGtoYUB5b2dodXJ0LmhlbW1hLnRyZXNrYWwuY29tPgorS2Fyc3RlbiBCbGVlcyA8YmxlZXNAZGNvbi5kZT4gPGthcnN0ZW4uYmxlZXNAZGNvbi5kZT4KK0thcnN0ZW4gQmxlZXMgPGJsZWVzQGRjb24uZGU+IDxrYXJzdGVuLmJsZWVzQGdtYWlsLmNvbT4KK0theSBTaWV2ZXJzIDxrYXkuc2lldmVyc0B2cmZ5Lm9yZz4gPGtheS5zaWV2ZXJzQHN1c2UuZGU+CitLYXkgU2lldmVycyA8a2F5LnNpZXZlcnNAdnJmeS5vcmc+IDxrYXlAbWFtLihub25lKT4KK0thenVraSBTYWl0b2ggPGtzYWl0b2g1NjBAZ21haWwuY29tPiBrYXp1a2kgc2FpdG9oIDxrc2FpdG9oNTYwQGdtYWlsLmNvbT4KK0tlaXRoIENhc2NpbyA8a2VpdGhAQ1MuVUNMQS5FRFU+IDxrZWl0aEBjcy51Y2xhLmVkdT4KK0tlbnQgRW5nc3Ryb20gPGtlbnRAbHlzYXRvci5saXUuc2U+CitLZXZpbiBMZXVuZyA8a2V2aW5sc2tAZ21haWwuY29tPgorS2lyaWxsIFNtZWxrb3YgPGtpcnJAbmF2eXR1eC5zcGIucnU+IDxraXJyQGxhbmRhdS5waHlzLnNwYnUucnU+CitLaXJpbGwgU21lbGtvdiA8a2lyckBuYXZ5dHV4LnNwYi5ydT4gPGtpcnJAbW5zLnNwYi5ydT4KK0tudXQgRnJhbmtlIDxLbnV0LkZyYW5rZUBnbXguZGU+IDxrLmZyYW5rZUBzY2llbmNlLWNvbXB1dGluZy5kZT4KK0xhcnMgRG9lbGxlIDxsYXJzLmRvZWxsZUBvbi1saW5lICEgZGU+CitMYXJzIERvZWxsZSA8bGFycy5kb2VsbGVAb24tbGluZS5kZT4KK0xhcnMgTm9zY2hpbnNraSA8bGFyc0BwdWJsaWMubm9zY2hpbnNraS5kZT4gPGxhcnMubm9zY2hpbnNraUByd3RoLWFhY2hlbi5kZT4KK0xpIEhvbmcgPGxlZWhvbmdAcGt1LmVkdS5jbj4KK0xpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4gPHRvcnZhbGRzQGV2by5vc2RsLm9yZz4KK0xpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4gPHRvcnZhbGRzQGc1Lm9zZGwub3JnPgorTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPiA8dG9ydmFsZHNAb3NkbC5vcmc+CitMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+IDx0b3J2YWxkc0BwcGM5NzAub3NkbC5vcmcuKG5vbmUpPgorTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPiA8dG9ydmFsZHNAcHBjOTcwLm9zZGwub3JnPgorTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPiA8dG9ydmFsZHNAd29vZHkubGludXgtZm91bmRhdGlvbi5vcmc+CitMdWthcyBTYW5kc3Ryw7ZtIDxsdWtzYW5AZ21haWwuY29tPiA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitNYXJjIEtob3V6YW0gPG1hcmMua2hvdXphbUBlcmljc3Nvbi5jb20+IDxtYXJjLmtob3V6YW1AZ21haWwuY29tPgorTWFyYy1BbmRyw6kgTHVyZWF1IDxtYXJjYW5kcmUubHVyZWF1QGdtYWlsLmNvbT4KK01hcmNvIENvc3RhbGJhIDxtY29zdGFsYmFAZ21haWwuY29tPiA8bWNvc3RhbGJhQHlhaG9vLml0PgorTWFyayBMZXZlZGFobCA8bWRsMTIzQHZlcml6b24ubmV0PiA8bWxldmVkYWhsQGdtYWlsLmNvbT4KK01hcmsgUmFkYSA8bWFyYWRhQHV3YXRlcmxvby5jYT4KK01hcnRpbiBMYW5naG9mZiA8bWFydGluQGxhcHRvcC5vcmc+IDxtYXJ0aW5AY2F0YWx5c3QubmV0Lm56PgorTWFydGluIHZvbiBad2VpZ2JlcmdrIDxtYXJ0aW52b256QGdtYWlsLmNvbT4gPG1hcnRpbi52b24uendlaWdiZXJna0BnbWFpbC5jb20+CitNYXR0IERyYWlzZXkgPG1hdHRAZHJhaXNleS5jYT4gPG1hdHRkcmFpc2V5QHN5bXBhdGljby5jYT4KK01hdHQgS3JhYWkgPGtyYWFpQGZ0YmZzLm9yZz4gPG1hdHQua3JhYWlAYW1vLmFiYm90dC5jb20+CitNYXR0IE1jQ3V0Y2hlbiA8bWF0dEBtYXR0bWNjdXRjaGVuLm5ldD4gPGhhc2hwcm9kdWN0QGdtYWlsLmNvbT4KK01hdHRoaWFzIEtlc3RlbmhvbHogPG1hdHRoaWFzQHNwaW5sb2NrLmNoPiA8bWtAc3BpbmxvY2suY2g+CitNYXR0aGlhcyBVcmxpY2hzIDxtYXR0aGlhc0B1cmxpY2hzLmRlPiA8c211cmZAa2lzdGUuKG5vbmUpPgorTWF0dGhpYXMgVXJsaWNocyA8bWF0dGhpYXNAdXJsaWNocy5kZT4gPHNtdXJmQHNtdXJmLm5vcmlzLmRlPgorTWljaGFlbCBDb2xlbWFuIDx0dXR1ZmFuQGdtYWlsLmNvbT4KK01pY2hhZWwgSiBHcnViZXIgPGdpdEBkcm1pY2hhLndhcnBtYWlsLm5ldD4gPG1pY2hhZWxqZ3J1YmVyK2dtYW5lQGZhc3RtYWlsLmZtPgorTWljaGFlbCBTLiBUc2lya2luIDxtc3RAa2VybmVsLm9yZz4gPG1zdEByZWRoYXQuY29tPgorTWljaGFlbCBTLiBUc2lya2luIDxtc3RAa2VybmVsLm9yZz4gPG1zdEBtZWxsYW5veC5jby5pbD4KK01pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QGtlcm5lbC5vcmc+IDxtc3RAZGV2Lm1lbGxhbm94LmNvLmlsPgorTWljaGFlbCBXLiBPbHNvbiA8bXdvbHNvbkBnbnUub3JnPgorTWljaGFlbCBXaXR0ZW4gPG1md2l0dGVuQGdtYWlsLmNvbT4gPG1md2l0dGVuQE1JVC5FRFU+CitNaWNoYWVsIFdpdHRlbiA8bWZ3aXR0ZW5AZ21haWwuY29tPiA8bWZ3aXR0ZW5AbWl0LmVkdT4KK01pY2hhbCBSb2tvcyA8bWljaGFsLnJva29zQG5leHRzb2Z0LmN6PiA8cm9rb3NAbmV4dHNvZnQuY3o+CitNaWNoZWxlIEJhbGxhYmlvIDxiYXJyYV9jdWRhQGthdGFtYWlsLmNvbT4KK01pa2xvcyBWYWpuYSA8dm1pa2xvc0BmcnVnYWx3YXJlLm9yZz4gPHZtaWtsb3NAc3VzZS5jej4KK05hbWh5dW5nIEtpbSA8bmFtaHl1bmdAZ21haWwuY29tPiA8bmFtaHl1bmcua2ltQGxnZS5jb20+CitOYW1oeXVuZyBLaW0gPG5hbWh5dW5nQGdtYWlsLmNvbT4gPG5hbWh5dW5nQGtlcm5lbC5vcmc+CitOYW5ha28gU2hpcmFpc2hpIDxuYW5ha28zQGxhdmFiaXQuY29tPiA8bmFuYWtvM0BibHVlYm90dGxlLmNvbT4KK05hbmFrbyBTaGlyYWlzaGkgPG5hbmFrbzNAbGF2YWJpdC5jb20+CitOZWxzb24gRWxoYWdlIDxuZWxoYWdlQG1pdC5lZHU+IDxuZWxoYWdlQE1JVC5FRFU+CitOZWxzb24gRWxoYWdlIDxuZWxoYWdlQG1pdC5lZHU+IDxuZWxoYWdlQGtzcGxpY2UuY29tPgorTmd1eeG7hW4gVGjDoWkgTmfhu41jIER1eSA8cGNsb3Vkc0BnbWFpbC5jb20+CitOaWNrIFN0b2tvZSA8bmlja0Bub29kbGVmYWN0b3J5LmNvLnVrPiBOaWNrIFdvb2xsZXkgPG5pY2tAbm9vZGxlZmFjdG9yeS5jby51az4KK05pY2sgU3Rva29lIDxuaWNrQG5vb2RsZWZhY3RvcnkuY28udWs+IE5pY2sgV29vbGxleSA8bmlja3dvb2xsZXlAeWFob28uY28udWs+CitOaWNvbGFzIE1vcmV5LUNoYWlzZW1hcnRpbiA8ZGV2ZWwtZ2l0QG1vcmV5LWNoYWlzZW1hcnRpbi5jb20+IDxuaWNvbGFzLm1vcmV5QGZyZWUuZnI+CitOaWNvbGFzIE1vcmV5LUNoYWlzZW1hcnRpbiA8ZGV2ZWwtZ2l0QG1vcmV5LWNoYWlzZW1hcnRpbi5jb20+IDxubW9yZXlAa2FscmF5LmV1PgorTmljb2xhcyBTZWJyZWNodCA8bmljb2xhcy5zLmRldkBnbXguZnI+IDxuaS5zQGxhcG9zdGUubmV0PgorUGFvbG8gQm9uemluaSA8Ym9uemluaUBnbnUub3JnPiA8cGFvbG8uYm9uemluaUBsdS51bmlzaS5jaD4KK1Bhc2NhbCBPYnJ5IDxwYXNjYWxAb2JyeS5uZXQ+IDxwYXNjYWwub2JyeUBnbWFpbC5jb20+CitQYXNjYWwgT2JyeSA8cGFzY2FsQG9icnkubmV0PiA8cGFzY2FsLm9icnlAd2FuYWRvby5mcj4KK1BhdCBOb3R6IDxwYXRub3R6QGdtYWlsLmNvbT4gPHBrbm90ekBzYW5kaWEuZ292PgorUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+IDxwYXVsdXNAZG9ycmlnby4obm9uZSk+CitQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4gPHBhdWx1c0Bwb2dvLihub25lKT4KK1BldGVyIEJhdW1hbm4gPHdhc3RlLm1hbmFnZXJAZ214LmRlPiA8UGV0ZXIuQi5CYXVtYW5uQHN0dWQuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CitQZXRlciBCYXVtYW5uIDx3YXN0ZS5tYW5hZ2VyQGdteC5kZT4gPHNpcHJiYXVtQHN0dWQuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CitQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT4gPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+CitQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT4gPHBldGVyQHN2YXJ0ZW4uaW50ZXJuLnNvZnR3b2x2ZXMucHAuc2U+CitQZXRyIEJhdWRpcyA8cGFza3lAdWN3LmN6PiA8cGFza3lAc3VzZS5jej4KK1BldHIgQmF1ZGlzIDxwYXNreUB1Y3cuY3o+IDx4cGFza3lAbWFjaGluZT4KK1BoaWwgSG9yZCA8aG9yZHBAY2lzY28uY29tPiA8cGhpbC5ob3JkQGdtYWlsLmNvbT4KK1BoaWxpcCBKw6RnZW5zdGVkdCA8cGhpbGlwQGZvb2xpcC5vcmc+IDxwaGlsaXAuamFnZW5zdGVkdEBnbWFpbC5jb20+CitQaGlsaXBwIEEuIEhhcnRtYW5uIDxwYWhAcW8uY3g+IDxwaEBzb3JnaC5kZT4KK1BoaWxpcHBlIEJydWhhdCA8Ym9va0BjcGFuLm9yZz4KK1JhbGYgVGhpZWxvdyA8cmFsZi50aGllbG93QGdtYWlsLmNvbT4gPHJhbGYudGhpZWxvd0Bnb29nbGVtYWlsLmNvbT4KK1JhbXNheSBKb25lcyA8cmFtc2F5QHJhbXNheWpvbmVzLnBsdXMuY29tPiA8cmFtc2F5QHJhbXNheTEuZGVtb24uY28udWs+CitSZW7DqSBTY2hhcmZlIDxsLnMuckB3ZWIuZGU+IDxyZW5lLnNjaGFyZmVAbHNyZmlyZS5hdGguY3g+CitSb2JlcnQgRml0enNpbW9ucyA8cm9iZml0ekAyNzNrLm5ldD4KK1JvYmVydCBTaGVhcm1hbiA8cm9iZXJ0c2hlYXJtYW5AZ21haWwuY29tPiA8cm9iQGNvZGV3ZWF2ZXJzLmNvbT4KK1JvYmVydCBaZWggPHJvYmVydC5hLnplaEBnbWFpbC5jb20+CitSb2JpbiBSb3NlbmJlcmcgPHJvYmluLnJvc2VuYmVyZ0BkZXdpcmUuY29tPiA8cm9iaW4ucm9zZW5iZXJnLmxpc3RzQGRld2lyZS5jb20+CitSdXRnZXIgTmlqbHVuc2luZyA8cnV0Z2VyLm5pamx1bnNpbmdAZ21haWwuY29tPiA8cnV0Z2VyQG5vc3BhbS5jb20+CitSdXRnZXIgTmlqbHVuc2luZyA8cnV0Z2VyLm5pamx1bnNpbmdAZ21haWwuY29tPiA8Z2l0QHR1eC50bWZ3ZWIubmw+CitSeWFuIEFuZGVyc29uIDxyeWFuQG1pY2hvbmxpbmUuY29tPiA8cmRhQGdvb2dsZS5jb20+CitTYWxpa2ggWmFraXJvdiA8c2FsaWtoLnpha2lyb3ZAZ21haWwuY29tPiA8U2FsaWtoLlpha2lyb3ZASW50ZWwuY29tPgorU2FtIFZpbGFpbiA8c2FtQHZpbGFpbi5uZXQ+IDxzYW0udmlsYWluQGNhdGFseXN0Lm5ldC5uej4KK1NhbSBWaWxhaW4gPHNhbUB2aWxhaW4ubmV0PiBzYW1AdmlsYWluLm5ldAorU2FudGkgQsOpamFyIDxzYW50aUBhZ29saW5hLm5ldD4gPHNiZWphckBnbWFpbC5jb20+CitTZWFuIEVzdGFicm9va3MgPHNlYW5sa21sQHN5bXBhdGljby5jYT4KK1NlYmFzdGlhbiBTY2h1YmVydGggPHNzY2h1YmVydGhAZ21haWwuY29tPiA8c3NjaHViZXJ0aEB2aXNhZ2VpbWFnaW5nLmNvbT4KK1NldGggRmFsY29uIDxzZXRoQHVzZXJwcmltYXJ5Lm5ldD4gPHNmYWxjb25AZmhjcmMub3JnPgorU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPgorU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+IDxzaW1vbkBsc3QuZGU+CitTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4gPHNoYXVzbWFuQHRyb2xsdGVjaC5jb20+CitTdGVmYW4gQmVsbGVyIDxzdGVmYW5iZWxsZXJAZ21haWwuY29tPiA8c3RlZmFuYmVsbGVyQGdvb2dsZW1haWwuY29tPgorU3RlZmFuIEJlbGxlciA8c3RlZmFuYmVsbGVyQGdtYWlsLmNvbT4gPHNiZWxsZXJAZ29vZ2xlLmNvbT4KK1N0ZWZhbiBOYWV3ZSA8c3RlZmFuLm5hZXdlQGdtYWlsLmNvbT4gPHN0ZWZhbi5uYWV3ZUBhdGxhcy1lbGVrdHJvbmlrLmNvbT4KK1N0ZWZhbiBOYWV3ZSA8c3RlZmFuLm5hZXdlQGdtYWlsLmNvbT4gPHN0ZWZhbi5uYWV3ZUBnb29nbGVtYWlsLmNvbT4KK1N0ZWZhbiBTcGVybGluZyA8c3RzcEBlbGVnby5kZT4gPHN0c3BAc3RzcC5uYW1lPgorxaB0xJtww6FuIE7Em21lYyA8c3RlcG5lbUBnbWFpbC5jb20+IDxzdGVwYW4ubmVtZWNAZ21haWwuY29tPgorU3RlcGhlbiBCb3lkIDxiZWJhcmlub0BnbWFpbC5jb20+IDxzYm95ZEBjb2RlYXVyb3JhLm9yZz4KK1N0ZXZlbiBEcmFrZSA8c2RyYWtlQHhuZXQuY28ubno+IDxzZHJha2VAaWh1Zy5jby5uej4KK1N0ZXZlbiBHcmltbSA8a29yZXRoQG1pZHdpbnRlci5jb20+IDxzZ3JpbW1Ac2dyaW1tLW1icC5sb2NhbD4KK1N0ZXZlbiBHcmltbSA8a29yZXRoQG1pZHdpbnRlci5jb20+IGtvcmV0aEBtaWR3aW50ZXIuY29tCitTdGV2ZW4gV2FsdGVyIDxzdGV2ZW5yd2FsdGVyQGdtYWlsLmNvbT4gPHN3YWx0ZXJAbGV4bWFyay5jb20+CitTdGV2ZW4gV2FsdGVyIDxzdGV2ZW5yd2FsdGVyQGdtYWlsLmNvbT4gPHN3YWx0ZXJAbHBkZXYucHJ0ZGV2LmxleG1hcmsuY29tPgorU3ZlbiBWZXJkb29sYWVnZSA8c2tpbW9Aa290bmV0Lm9yZz4gPFN2ZW4uVmVyZG9vbGFlZ2VAY3Mua3VsZXV2ZW4uYWMuYmU+CitTdmVuIFZlcmRvb2xhZWdlIDxza2ltb0Brb3RuZXQub3JnPiA8c2tpbW9AbGlhY3Mubmw+CitUYXkgUmF5IENodWFuIDxyY3RheTg5QGdtYWlsLmNvbT4KK1RlZCBQZXJjaXZhbCA8dGVkQG1pZGczdC5uZXQ+IDx0ZWQucGVyY2l2YWxAcXVlc3QuY29tPgorVGhlb2RvcmUgVHMnbyA8dHl0c29AbWl0LmVkdT4KK1Rob21hcyBBY2tlcm1hbm4gPHRoLmFja2VyQGFyY29yLmRlPiA8dGguYWNrZXI2NkBhcmNvci5kZT4KK1Rob21hcyBSYXN0IDx0ckB0aG9tYXNyYXN0LmNoPiA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorVGhvbWFzIFJhc3QgPHRyQHRob21hc3Jhc3QuY2g+IDx0cmFzdEBpbmYuZXRoei5jaD4KK1Rob21hcyBSYXN0IDx0ckB0aG9tYXNyYXN0LmNoPiA8dHJhc3RAZ29vZ2xlLmNvbT4KK1RpbW8gSGlydm9uZW4gPHRpaGlydm9uQGdtYWlsLmNvbT4gPHRpaGlydm9uQGVlLm91bHUuZmk+CitUb2J5IEFsbHNvcHAgPFRvYnkuQWxsc29wcEBuYXZtYW4uY28ubno+IDx0b2J5LmFsbHNvcHBAbmF2bWFuLmNvLm56PgorVG9tIEdyZW5uYW4gPHRtZ3Jlbm5hbkBnbWFpbC5jb20+IDx0Z3Jlbm5hbkByZWRiYWNrLmNvbT4KK1RvbW1pIFZpcnRhbmVuIDx0dkBkZWJpYW4ub3JnPiA8dHZAZWFnYWluLm5ldD4KK1RvbW1pIFZpcnRhbmVuIDx0dkBkZWJpYW4ub3JnPiA8dHZAaW5vaS5maT4KK1RvbW15IFRob3JuIDx0b21teS1naXRAdGhvcm4ud3M+IDx0dDE3MjlAeWFob28uY29tPgorVG9ueSBMdWNrIDx0b255Lmx1Y2tAaW50ZWwuY29tPgorVG9yIEFybmUgVmVzdGLDuCA8dG9yYXJudkBnbWFpbC5jb20+IDx0YXZlc3Rib0B0cm9sbHRlY2guY29tPgorVHLhuqduIE5n4buNYyBRdcOibiA8dm53aWxkbWFuQGdtYWlsLmNvbT4gVHJhbiBOZ29jIFF1YW4gPHZud2lsZG1hbkBnbWFpbC5jb20+CitUcmVudCBQaWVwaG8gPHRwaWVwaG9AZ21haWwuY29tPiA8dHBpZXBob0BmcmVlc2NhbGUuY29tPgorVHJlbnQgUGllcGhvIDx0cGllcGhvQGdtYWlsLmNvbT4gPHh5enp5QHNwZWFrZWFzeS5vcmc+CitVd2UgS2xlaW5lLUvDtm5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPiA8VXdlLktsZWluZS1Lb2VuaWdAZGlnaS5jb20+CitVd2UgS2xlaW5lLUvDtm5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPiA8dWtsZWluZWtAaW5mb3JtYXRpay51bmktZnJlaWJ1cmcuZGU+CitVd2UgS2xlaW5lLUvDtm5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPiA8dXplaXNiZXJnZXJAaW8uZnNmb3J0aC5kZT4KK1V3ZSBLbGVpbmUtS8O2bmlnIDx1LmtsZWluZS1rb2VuaWdAcGVuZ3V0cm9uaXguZGU+IDx6ZWlzYmVyZ0BpbmZvcm1hdGlrLnVuaS1mcmVpYnVyZy5kZT4KK1ZpbGxlIFNreXR0w6QgPHZpbGxlLnNreXR0YUBpa2kuZmk+IDxzY29wQHhlbWFjcy5vcmc+CitWaXRhbHkgIl9WaSIgU2h1a2VsYSA8cHVibGljX3ZpQHR1dC5ieT4KK1cuIFRyZXZvciBLaW5nIDx3a2luZ0B0cmVtaWx5LnVzPiA8d2tpbmdAZHJleGVsLmVkdT4KK1dpbGxpYW0gUHVyc2VsbCA8YmlsbC5wdXJzZWxsQGdtYWlsLmNvbT4KK1lPTkVUQU5JIFRvbW9rYXp1IDx5MG4zdDRuMUBnbWFpbC5jb20+IDxxaHd0K2dpdEBsZXMuYXRoLmN4PgorWU9ORVRBTkkgVG9tb2thenUgPHkwbjN0NG4xQGdtYWlsLmNvbT4gPHkwbmV0YW4xQGRyYWdvbmZseWJzZC5vcmc+CitZT1NISUZVSkkgSGlkZWFraSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CisjIHRoZSB0d28gYW5vbnltb3VzIGNvbnRyaWJ1dG9ycyBhcmUgZGlmZmVyZW50IHBlcnNvbnM6Cithbm9ueW1vdXMgPGxpbnV4QGhvcml6b24uY29tPgorYW5vbnltb3VzIDxsaW51eEBob3Jpem9uLm5ldD4KK8Swc21haWwgRMO2bm1leiA8aXNtYWlsQHBhcmR1cy5vcmcudHI+CmRpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzZlNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvQ09QWUlORwpAQCAtMCwwICsxLDM2MCBAQAorCisgTm90ZSB0aGF0IHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gb2YgdGhlIEdQTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0CisgaXMgY29uY2VybmVkIGlzIF90aGlzXyBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgKGllIHYyLCBub3QKKyB2Mi4yIG9yIHYzLnggb3Igd2hhdGV2ZXIpLCB1bmxlc3MgZXhwbGljaXRseSBvdGhlcndpc2Ugc3RhdGVkLgorCisgSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCisgYSBnb29kIGlkZWEsIEkgYWxzbyBhc2sgdGhhdCBwZW9wbGUgaW52b2x2ZWQgd2l0aCB0aGUgcHJvamVjdCBtYWtlCisgdGhlaXIgcHJlZmVyZW5jZXMga25vd24uIEluIHBhcnRpY3VsYXIsIGlmIHlvdSB0cnVzdCBtZSB0byBtYWtlIHRoYXQKKyBkZWNpc2lvbiwgeW91IG1pZ2h0IG5vdGUgc28gaW4geW91ciBjb3B5cmlnaHQgbWVzc2FnZSwgaWUgc29tZXRoaW5nCisgbGlrZQorCisJVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIsIG9yIGEgbGF0ZXIgdmVyc2lvbgorCWF0IHRoZSBkaXNjcmV0aW9uIG9mIExpbnVzLgorCisgIG1pZ2h0IGF2b2lkIGlzc3Vlcy4gQnV0IHdlIGNhbiBhbHNvIGp1c3QgZGVjaWRlIHRvIHN5bmNocm9uaXplIGFuZAorICBjb250YWN0IGFsbCBjb3B5cmlnaHQgaG9sZGVycyBvbiByZWNvcmQgaWYvd2hlbiB0aGUgb2NjYXNpb24gYXJpc2VzLgorCisJCQlMaW51cyBUb3J2YWxkcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi8uZ2l0YXR0cmlidXRlcyBiL0RvY3VtZW50YXRpb24vLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiMDMwMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKi50eHQgd2hpdGVzcGFjZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi8uZ2l0aWdub3JlIGIvRG9jdW1lbnRhdGlvbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOGIyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uLy5naXRpZ25vcmUKQEAgLTAsMCArMSwxMyBAQAorKi54bWwKKyouaHRtbAorKi5bMS04XQorKi5tYWRlCisqLnRleGkKKyoucGRmCitnaXQuaW5mbworZ2l0bWFuLmluZm8KK2hvd3RvLWluZGV4LnR4dAorZG9jLmRlcAorY21kcy0qLnR4dAorbWVyZ2V0b29scy0qLnR4dAorbWFucGFnZS1iYXNlLXVybC54c2wKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcyBiL0RvY3VtZW50YXRpb24vQ29kaW5nR3VpZGVsaW5lcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmU1MzZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdHdWlkZWxpbmVzCkBAIC0wLDAgKzEsNTQ0IEBACitMaWtlIG90aGVyIHByb2plY3RzLCB3ZSBhbHNvIGhhdmUgc29tZSBndWlkZWxpbmVzIHRvIGtlZXAgdG8gdGhlCitjb2RlLiAgRm9yIEdpdCBpbiBnZW5lcmFsLCBhIGZldyByb3VnaCBydWxlcyBhcmU6CisKKyAtIE1vc3QgaW1wb3J0YW50bHksIHdlIG5ldmVyIHNheSAiSXQncyBpbiBQT1NJWDsgd2UnbGwgaGFwcGlseQorICAgaWdub3JlIHlvdXIgbmVlZHMgc2hvdWxkIHlvdXIgc3lzdGVtIG5vdCBjb25mb3JtIHRvIGl0LiIKKyAgIFdlIGxpdmUgaW4gdGhlIHJlYWwgd29ybGQuCisKKyAtIEhvd2V2ZXIsIHdlIG9mdGVuIHNheSAiTGV0J3Mgc3RheSBhd2F5IGZyb20gdGhhdCBjb25zdHJ1Y3QsCisgICBpdCdzIG5vdCBldmVuIGluIFBPU0lYIi4KKworIC0gSW4gc3BpdGUgb2YgdGhlIGFib3ZlIHR3byBydWxlcywgd2Ugc29tZXRpbWVzIHNheSAiQWx0aG91Z2gKKyAgIHRoaXMgaXMgbm90IGluIFBPU0lYLCBpdCAoaXMgc28gY29udmVuaWVudCB8IG1ha2VzIHRoZSBjb2RlCisgICBtdWNoIG1vcmUgcmVhZGFibGUgfCBoYXMgb3RoZXIgZ29vZCBjaGFyYWN0ZXJpc3RpY3MpIGFuZAorICAgcHJhY3RpY2FsbHkgYWxsIHRoZSBwbGF0Zm9ybXMgd2UgY2FyZSBhYm91dCBzdXBwb3J0IGl0LCBzbworICAgbGV0J3MgdXNlIGl0Ii4KKworICAgQWdhaW4sIHdlIGxpdmUgaW4gdGhlIHJlYWwgd29ybGQsIGFuZCBpdCBpcyBzb21ldGltZXMgYQorICAganVkZ2VtZW50IGNhbGwsIHRoZSBkZWNpc2lvbiBiYXNlZCBtb3JlIG9uIHJlYWwgd29ybGQKKyAgIGNvbnN0cmFpbnRzIHBlb3BsZSBmYWNlIHRoYW4gd2hhdCB0aGUgcGFwZXIgc3RhbmRhcmQgc2F5cy4KKworIC0gRml4aW5nIHN0eWxlIHZpb2xhdGlvbnMgd2hpbGUgd29ya2luZyBvbiBhIHJlYWwgY2hhbmdlIGFzIGEKKyAgIHByZXBhcmF0b3J5IGNsZWFuLXVwIHN0ZXAgaXMgZ29vZCwgYnV0IG90aGVyd2lzZSBhdm9pZCB1c2VsZXNzIGNvZGUKKyAgIGNodXJuIGZvciB0aGUgc2FrZSBvZiBjb25mb3JtaW5nIHRvIHRoZSBzdHlsZS4KKworICAgIk9uY2UgaXQgX2lzXyBpbiB0aGUgdHJlZSwgaXQncyBub3QgcmVhbGx5IHdvcnRoIHRoZSBwYXRjaCBub2lzZSB0bworICAgZ28gYW5kIGZpeCBpdCB1cC4iCisgICBDZi4gaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmxpbnV4Lmtlcm5lbC85NDMwMjAKKworTWFrZSB5b3VyIGNvZGUgcmVhZGFibGUgYW5kIHNlbnNpYmxlLCBhbmQgZG9uJ3QgdHJ5IHRvIGJlIGNsZXZlci4KKworQXMgZm9yIG1vcmUgY29uY3JldGUgZ3VpZGVsaW5lcywganVzdCBpbWl0YXRlIHRoZSBleGlzdGluZyBjb2RlCisodGhpcyBpcyBhIGdvb2QgZ3VpZGVsaW5lLCBubyBtYXR0ZXIgd2hpY2ggcHJvamVjdCB5b3UgYXJlCitjb250cmlidXRpbmcgdG8pLiBJdCBpcyBhbHdheXMgcHJlZmVyYWJsZSB0byBtYXRjaCB0aGUgX2xvY2FsXworY29udmVudGlvbi4gTmV3IGNvZGUgYWRkZWQgdG8gR2l0IHN1aXRlIGlzIGV4cGVjdGVkIHRvIG1hdGNoCit0aGUgb3ZlcmFsbCBzdHlsZSBvZiBleGlzdGluZyBjb2RlLiBNb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nCitjb2RlIGlzIGV4cGVjdGVkIHRvIG1hdGNoIHRoZSBzdHlsZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbHJlYWR5Cit1c2VzIChldmVuIGlmIGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG92ZXJhbGwgc3R5bGUgb2YgZXhpc3RpbmcgY29kZSkuCisKK0J1dCBpZiB5b3UgbXVzdCBoYXZlIGEgbGlzdCBvZiBydWxlcywgaGVyZSB0aGV5IGFyZS4KKworRm9yIHNoZWxsIHNjcmlwdHMgc3BlY2lmaWNhbGx5IChub3QgZXhoYXVzdGl2ZSk6CisKKyAtIFdlIHVzZSB0YWJzIGZvciBpbmRlbnRhdGlvbi4KKworIC0gQ2FzZSBhcm1zIGFyZSBpbmRlbnRlZCBhdCB0aGUgc2FtZSBkZXB0aCBhcyBjYXNlIGFuZCBlc2FjIGxpbmVzLAorICAgbGlrZSB0aGlzOgorCisJY2FzZSAiJHZhcmlhYmxlIiBpbgorCXBhdHRlcm4xKQorCQlkbyB0aGlzCisJCTs7CisJcGF0dGVybjIpCisJCWRvIHRoYXQKKwkJOzsKKwllc2FjCisKKyAtIFJlZGlyZWN0aW9uIG9wZXJhdG9ycyBzaG91bGQgYmUgd3JpdHRlbiB3aXRoIHNwYWNlIGJlZm9yZSwgYnV0IG5vCisgICBzcGFjZSBhZnRlciB0aGVtLiAgSW4gb3RoZXIgd29yZHMsIHdyaXRlICdlY2hvIHRlc3QgPiIkZmlsZSInCisgICBpbnN0ZWFkIG9mICdlY2hvIHRlc3Q+ICRmaWxlJyBvciAnZWNobyB0ZXN0ID4gJGZpbGUnLiAgTm90ZSB0aGF0CisgICBldmVuIHRob3VnaCBpdCBpcyBub3QgcmVxdWlyZWQgYnkgUE9TSVggdG8gZG91YmxlLXF1b3RlIHRoZQorICAgcmVkaXJlY3Rpb24gdGFyZ2V0IGluIGEgdmFyaWFibGUgKGFzIHNob3duIGFib3ZlKSwgb3VyIGNvZGUgZG9lcyBzbworICAgYmVjYXVzZSBzb21lIHZlcnNpb25zIG9mIGJhc2ggaXNzdWUgYSB3YXJuaW5nIHdpdGhvdXQgdGhlIHF1b3Rlcy4KKworCShpbmNvcnJlY3QpCisJY2F0IGhlbGxvID4gd29ybGQgPCB1bml2ZXJzZQorCWVjaG8gaGVsbG8gPiR3b3JsZAorCisJKGNvcnJlY3QpCisJY2F0IGhlbGxvID53b3JsZCA8dW5pdmVyc2UKKwllY2hvIGhlbGxvID4iJHdvcmxkIgorCisgLSBXZSBwcmVmZXIgJCggLi4uICkgZm9yIGNvbW1hbmQgc3Vic3RpdHV0aW9uOyB1bmxpa2UgYGAsIGl0CisgICBwcm9wZXJseSBuZXN0cy4gIEl0IHNob3VsZCBoYXZlIGJlZW4gdGhlIHdheSBCb3VybmUgc3BlbGxlZAorICAgaXQgZnJvbSBkYXkgb25lLCBidXQgdW5mb3J0dW5hdGVseSBpc24ndC4KKworIC0gSWYgeW91IHdhbnQgdG8gZmluZCBvdXQgaWYgYSBjb21tYW5kIGlzIGF2YWlsYWJsZSBvbiB0aGUgdXNlcidzCisgICAkUEFUSCwgeW91IHNob3VsZCB1c2UgJ3R5cGUgPGNvbW1hbmQ+JywgaW5zdGVhZCBvZiAnd2hpY2ggPGNvbW1hbmQ+Jy4KKyAgIFRoZSBvdXRwdXQgb2YgJ3doaWNoJyBpcyBub3QgbWFjaGluZSBwYXJzZWFibGUgYW5kIGl0cyBleGl0IGNvZGUKKyAgIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgcGxhdGZvcm1zLgorCisgLSBXZSB1c2UgUE9TSVggY29tcGxpYW50IHBhcmFtZXRlciBzdWJzdGl0dXRpb25zIGFuZCBhdm9pZCBiYXNoaXNtczsKKyAgIG5hbWVseToKKworICAgLSBXZSB1c2UgJHtwYXJhbWV0ZXItd29yZH0gYW5kIGl0cyBbLT0/K10gc2libGluZ3MsIGFuZCB0aGVpcgorICAgICBjb2xvbidlZCAidW5zZXQgb3IgbnVsbCIgZm9ybS4KKworICAgLSBXZSB1c2UgJHtwYXJhbWV0ZXIjd29yZH0gYW5kIGl0cyBbIyVdIHNpYmxpbmdzLCBhbmQgdGhlaXIKKyAgICAgZG91YmxlZCAibG9uZ2VzdCBtYXRjaGluZyIgZm9ybS4KKworICAgLSBObyAiU3Vic3RyaW5nIEV4cGFuc2lvbiIgJHtwYXJhbWV0ZXI6b2Zmc2V0Omxlbmd0aH0uCisKKyAgIC0gTm8gc2hlbGwgYXJyYXlzLgorCisgICAtIE5vIHN0cmxlbiAkeyNwYXJhbWV0ZXJ9LgorCisgICAtIE5vIHBhdHRlcm4gcmVwbGFjZW1lbnQgJHtwYXJhbWV0ZXIvcGF0dGVybi9zdHJpbmd9LgorCisgLSBXZSB1c2UgQXJpdGhtZXRpYyBFeHBhbnNpb24gJCgoIC4uLiApKS4KKworIC0gSW5zaWRlIEFyaXRobWV0aWMgRXhwYW5zaW9uLCBzcGVsbCBzaGVsbCB2YXJpYWJsZXMgd2l0aCAkIGluIGZyb250CisgICBvZiB0aGVtLCBhcyBzb21lIHNoZWxscyBkbyBub3QgZ3JvayAkKCh4KSkgd2hpbGUgYWNjZXB0aW5nICQoKCR4KSkKKyAgIGp1c3QgZmluZSAoZS5nLiBkYXNoIG9sZGVyIHRoYW4gMC41LjQpLgorCisgLSBXZSBkbyBub3QgdXNlIFByb2Nlc3MgU3Vic3RpdHV0aW9uIDwobGlzdCkgb3IgPihsaXN0KS4KKworIC0gRG8gbm90IHdyaXRlIGNvbnRyb2wgc3RydWN0dXJlcyBvbiBhIHNpbmdsZSBsaW5lIHdpdGggc2VtaWNvbG9uLgorICAgInRoZW4iIHNob3VsZCBiZSBvbiB0aGUgbmV4dCBsaW5lIGZvciBpZiBzdGF0ZW1lbnRzLCBhbmQgImRvIgorICAgc2hvdWxkIGJlIG9uIHRoZSBuZXh0IGxpbmUgZm9yICJ3aGlsZSIgYW5kICJmb3IiLgorCisJKGluY29ycmVjdCkKKwlpZiB0ZXN0IC1mIGhlbGxvOyB0aGVuCisJCWRvIHRoaXMKKwlmaQorCisJKGNvcnJlY3QpCisJaWYgdGVzdCAtZiBoZWxsbworCXRoZW4KKwkJZG8gdGhpcworCWZpCisKKyAtIFdlIHByZWZlciAidGVzdCIgb3ZlciAiWyAuLi4gXSIuCisKKyAtIFdlIGRvIG5vdCB3cml0ZSB0aGUgbm9pc2V3b3JkICJmdW5jdGlvbiIgaW4gZnJvbnQgb2Ygc2hlbGwKKyAgIGZ1bmN0aW9ucy4KKworIC0gV2UgcHJlZmVyIGEgc3BhY2UgYmV0d2VlbiB0aGUgZnVuY3Rpb24gbmFtZSBhbmQgdGhlIHBhcmVudGhlc2VzLAorICAgYW5kIG5vIHNwYWNlIGluc2lkZSB0aGUgcGFyZW50aGVzZXMuIFRoZSBvcGVuaW5nICJ7IiBzaG91bGQgYWxzbworICAgYmUgb24gdGhlIHNhbWUgbGluZS4KKworCShpbmNvcnJlY3QpCisJbXlfZnVuY3Rpb24oKXsKKwkJLi4uCisKKwkoY29ycmVjdCkKKwlteV9mdW5jdGlvbiAoKSB7CisJCS4uLgorCisgLSBBcyB0byB1c2Ugb2YgZ3JlcCwgc3RpY2sgdG8gYSBzdWJzZXQgb2YgQlJFIChuYW1lbHksIG5vIFx7bSxuXH0sCisgICBbOjpdLCBbPT1dLCBvciBbLi5dKSBmb3IgcG9ydGFiaWxpdHkuCisKKyAgIC0gV2UgZG8gbm90IHVzZSBce20sblx9OworCisgICAtIFdlIGRvIG5vdCB1c2UgLUU7CisKKyAgIC0gV2UgZG8gbm90IHVzZSA/IG9yICsgKHdoaWNoIGFyZSBcezAsMVx9IGFuZCBcezEsXH0KKyAgICAgcmVzcGVjdGl2ZWx5IGluIEJSRSkgYnV0IHRoYXQgZ29lcyB3aXRob3V0IHNheWluZyBhcyB0aGVzZQorICAgICBhcmUgRVJFIGVsZW1lbnRzIG5vdCBCUkUgKG5vdGUgdGhhdCBcPyBhbmQgXCsgYXJlIG5vdCBldmVuIHBhcnQKKyAgICAgb2YgQlJFIC0tIG1ha2luZyB0aGVtIGFjY2Vzc2libGUgZnJvbSBCUkUgaXMgYSBHTlUgZXh0ZW5zaW9uKS4KKworIC0gVXNlIEdpdCdzIGdldHRleHQgd3JhcHBlcnMgaW4gZ2l0LXNoLWkxOG4gdG8gbWFrZSB0aGUgdXNlcgorICAgaW50ZXJmYWNlIHRyYW5zbGF0YWJsZS4gU2VlICJNYXJraW5nIHN0cmluZ3MgZm9yIHRyYW5zbGF0aW9uIiBpbgorICAgcG8vUkVBRE1FLgorCisgLSBXZSBkbyBub3Qgd3JpdGUgb3VyICJ0ZXN0IiBjb21tYW5kIHdpdGggIi1hIiBhbmQgIi1vIiBhbmQgdXNlICImJiIKKyAgIG9yICJ8fCIgdG8gY29uY2F0ZW5hdGUgbXVsdGlwbGUgInRlc3QiIGNvbW1hbmRzIGluc3RlYWQsIGJlY2F1c2UKKyAgIHRoZSB1c2Ugb2YgIi1hLy1vIiBpcyBvZnRlbiBlcnJvci1wcm9uZS4gIEUuZy4KKworICAgICB0ZXN0IC1uICIkeCIgLWEgIiRhIiA9ICIkYiIKKworICAgaXMgYnVnZ3kgYW5kIGJyZWFrcyB3aGVuICR4IGlzICI9IiwgYnV0CisKKyAgICAgdGVzdCAtbiAiJHgiICYmIHRlc3QgIiRhIiA9ICIkYiIKKworICAgZG9lcyBub3QgaGF2ZSBzdWNoIGEgcHJvYmxlbS4KKworCitGb3IgQyBwcm9ncmFtczoKKworIC0gV2UgdXNlIHRhYnMgdG8gaW5kZW50LCBhbmQgaW50ZXJwcmV0IHRhYnMgYXMgdGFraW5nIHVwIHRvCisgICA4IHNwYWNlcy4KKworIC0gV2UgdHJ5IHRvIGtlZXAgdG8gYXQgbW9zdCA4MCBjaGFyYWN0ZXJzIHBlciBsaW5lLgorCisgLSBXZSB0cnkgdG8gc3VwcG9ydCBhIHdpZGUgcmFuZ2Ugb2YgQyBjb21waWxlcnMgdG8gY29tcGlsZSBHaXQgd2l0aCwKKyAgIGluY2x1ZGluZyBvbGQgb25lcy4gVGhhdCBtZWFucyB0aGF0IHlvdSBzaG91bGQgbm90IHVzZSBDOTkKKyAgIGluaXRpYWxpemVycywgZXZlbiBpZiBhIGxvdCBvZiBjb21waWxlcnMgZ3JvayBpdC4KKworIC0gVmFyaWFibGVzIGhhdmUgdG8gYmUgZGVjbGFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYmxvY2suCisKKyAtIE5VTEwgcG9pbnRlcnMgc2hhbGwgYmUgd3JpdHRlbiBhcyBOVUxMLCBub3QgYXMgMC4KKworIC0gV2hlbiBkZWNsYXJpbmcgcG9pbnRlcnMsIHRoZSBzdGFyIHNpZGVzIHdpdGggdGhlIHZhcmlhYmxlCisgICBuYW1lLCBpLmUuICJjaGFyICpzdHJpbmciLCBub3QgImNoYXIqIHN0cmluZyIgb3IKKyAgICJjaGFyICogc3RyaW5nIi4gIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHVuZGVyc3RhbmQgY29kZQorICAgbGlrZSAiY2hhciAqc3RyaW5nLCBjOyIuCisKKyAtIFVzZSB3aGl0ZXNwYWNlIGFyb3VuZCBvcGVyYXRvcnMgYW5kIGtleXdvcmRzLCBidXQgbm90IGluc2lkZQorICAgcGFyZW50aGVzZXMgYW5kIG5vdCBhcm91bmQgZnVuY3Rpb25zLiBTbzoKKworICAgICAgICB3aGlsZSAoY29uZGl0aW9uKQorCQlmdW5jKGJhciArIDEpOworCisgICBhbmQgbm90OgorCisgICAgICAgIHdoaWxlKCBjb25kaXRpb24gKQorCQlmdW5jIChiYXIrMSk7CisKKyAtIFdlIGF2b2lkIHVzaW5nIGJyYWNlcyB1bm5lY2Vzc2FyaWx5LiAgSS5lLgorCisJaWYgKGJsYSkgeworCQl4ID0gMTsKKwl9CisKKyAgIGlzIGZyb3duZWQgdXBvbi4gIEEgZ3JheSBhcmVhIGlzIHdoZW4gdGhlIHN0YXRlbWVudCBleHRlbmRzCisgICBvdmVyIGEgZmV3IGxpbmVzLCBhbmQvb3IgeW91IGhhdmUgYSBsZW5ndGh5IGNvbW1lbnQgYXRvcCBvZgorICAgaXQuICBBbHNvLCBsaWtlIGluIHRoZSBMaW51eCBrZXJuZWwsIGlmIHRoZXJlIGlzIGEgbG9uZyBsaXN0CisgICBvZiAiZWxzZSBpZiIgc3RhdGVtZW50cywgaXQgY2FuIG1ha2Ugc2Vuc2UgdG8gYWRkIGJyYWNlcyB0bworICAgc2luZ2xlIGxpbmUgYmxvY2tzLgorCisgLSBXZSB0cnkgdG8gYXZvaWQgYXNzaWdubWVudHMgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiAiaWYiIHN0YXRlbWVudC4KKworIC0gVHJ5IHRvIG1ha2UgeW91ciBjb2RlIHVuZGVyc3RhbmRhYmxlLiAgWW91IG1heSBwdXQgY29tbWVudHMKKyAgIGluLCBidXQgY29tbWVudHMgaW52YXJpYWJseSB0ZW5kIHRvIHN0YWxlIG91dCB3aGVuIHRoZSBjb2RlCisgICB0aGV5IHdlcmUgZGVzY3JpYmluZyBjaGFuZ2VzLiAgT2Z0ZW4gc3BsaXR0aW5nIGEgZnVuY3Rpb24KKyAgIGludG8gdHdvIG1ha2VzIHRoZSBpbnRlbnRpb24gb2YgdGhlIGNvZGUgbXVjaCBjbGVhcmVyLgorCisgLSBNdWx0aS1saW5lIGNvbW1lbnRzIGluY2x1ZGUgdGhlaXIgZGVsaW1pdGVycyBvbiBzZXBhcmF0ZSBsaW5lcyBmcm9tCisgICB0aGUgdGV4dC4gIEUuZy4KKworCS8qCisJICogQSB2ZXJ5IGxvbmcKKwkgKiBtdWx0aS1saW5lIGNvbW1lbnQuCisJICovCisKKyAgIE5vdGUgaG93ZXZlciB0aGF0IGEgY29tbWVudCB0aGF0IGV4cGxhaW5zIGEgdHJhbnNsYXRhYmxlIHN0cmluZyB0bworICAgdHJhbnNsYXRvcnMgdXNlcyBhIGNvbnZlbnRpb24gb2Ygc3RhcnRpbmcgd2l0aCBhIG1hZ2ljIHRva2VuCisgICAiVFJBTlNMQVRPUlM6ICIgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG9wZW5pbmcgZGVsaW1pdGVyLCBldmVuIHdoZW4KKyAgIGl0IHNwYW5zIG11bHRpcGxlIGxpbmVzLiAgV2UgZG8gbm90IGFkZCBhbiBhc3RlcmlzayBhdCB0aGUgYmVnaW5uaW5nCisgICBvZiBlYWNoIGxpbmUsIGVpdGhlci4gIEUuZy4KKworCS8qIFRSQU5TTEFUT1JTOiBoZXJlIGlzIGEgY29tbWVudCB0aGF0IGV4cGxhaW5zIHRoZSBzdHJpbmcKKwkgICB0byBiZSB0cmFuc2xhdGVkLCB0aGF0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgKi8KKwlfKCJIZXJlIGlzIGEgdHJhbnNsYXRhYmxlIHN0cmluZyBleHBsYWluZWQgYnkgdGhlIGFib3ZlLiIpOworCisgLSBEb3VibGUgbmVnYXRpb24gaXMgb2Z0ZW4gaGFyZGVyIHRvIHVuZGVyc3RhbmQgdGhhbiBubyBuZWdhdGlvbgorICAgYXQgYWxsLgorCisgLSBUaGVyZSBhcmUgdHdvIHNjaG9vbHMgb2YgdGhvdWdodCB3aGVuIGl0IGNvbWVzIHRvIGNvbXBhcmlzb24sCisgICBlc3BlY2lhbGx5IGluc2lkZSBhIGxvb3AuIFNvbWUgcGVvcGxlIHByZWZlciB0byBoYXZlIHRoZSBsZXNzIHN0YWJsZQorICAgdmFsdWUgb24gdGhlIGxlZnQgaGFuZCBzaWRlIGFuZCB0aGUgbW9yZSBzdGFibGUgdmFsdWUgb24gdGhlIHJpZ2h0IGhhbmQKKyAgIHNpZGUsIGUuZy4gaWYgeW91IGhhdmUgYSBsb29wIHRoYXQgY291bnRzIHZhcmlhYmxlIGkgZG93biB0byB0aGUKKyAgIGxvd2VyIGJvdW5kLAorCisJd2hpbGUgKGkgPiBsb3dlcl9ib3VuZCkgeworCQlkbyBzb21ldGhpbmc7CisJCWktLTsKKwl9CisKKyAgIE90aGVyIHBlb3BsZSBwcmVmZXIgdG8gaGF2ZSB0aGUgdGV4dHVhbCBvcmRlciBvZiB2YWx1ZXMgbWF0Y2ggdGhlCisgICBhY3R1YWwgb3JkZXIgb2YgdmFsdWVzIGluIHRoZWlyIGNvbXBhcmlzb24sIHNvIHRoYXQgdGhleSBjYW4KKyAgIG1lbnRhbGx5IGRyYXcgYSBudW1iZXIgbGluZSBmcm9tIGxlZnQgdG8gcmlnaHQgYW5kIHBsYWNlIHRoZXNlCisgICB2YWx1ZXMgaW4gb3JkZXIsIGkuZS4KKworCXdoaWxlIChsb3dlcl9ib3VuZCA8IGkpIHsKKwkJZG8gc29tZXRoaW5nOworCQlpLS07CisJfQorCisgICBCb3RoIGFyZSB2YWxpZCwgYW5kIHdlIHVzZSBib3RoLiAgSG93ZXZlciwgdGhlIG1vcmUgInN0YWJsZSIgdGhlCisgICBzdGFibGUgc2lkZSBiZWNvbWVzLCB0aGUgbW9yZSB3ZSB0ZW5kIHRvIHByZWZlciB0aGUgZm9ybWVyCisgICAoY29tcGFyaXNvbiB3aXRoIGEgY29uc3RhbnQsICJpID4gMCIsIGlzIGFuIGV4dHJlbWUgZXhhbXBsZSkuCisgICBKdXN0IGRvIG5vdCBtaXggc3R5bGVzIGluIHRoZSBzYW1lIHBhcnQgb2YgdGhlIGNvZGUgYW5kIG1pbWljCisgICBleGlzdGluZyBzdHlsZXMgaW4gdGhlIG5laWdoYm91cmhvb2QuCisKKyAtIFRoZXJlIGFyZSB0d28gc2Nob29scyBvZiB0aG91Z2h0IHdoZW4gaXQgY29tZXMgdG8gc3BsaXR0aW5nIGEgbG9uZworICAgbG9naWNhbCBsaW5lIGludG8gbXVsdGlwbGUgbGluZXMuICBTb21lIHBlb3BsZSBwdXNoIHRoZSBzZWNvbmQgYW5kCisgICBzdWJzZXF1ZW50IGxpbmVzIGZhciBlbm91Z2ggdG8gdGhlIHJpZ2h0IHdpdGggdGFicyBhbmQgYWxpZ24gdGhlbToKKworICAgICAgICBpZiAodGhlX2JlZ2lubmluZ19vZl9hX3ZlcnlfbG9uZ19leHByZXNzaW9uX3RoYXRfaGFzX3RvIHx8CisJCXNwYW5fbW9yZV90aGFuX2Ffc2luZ2xlX2xpbmVfb2YgfHwKKwkJdGhlX3NvdXJjZV90ZXh0KSB7CisgICAgICAgICAgICAgICAgLi4uCisKKyAgIHdoaWxlIG90aGVyIHBlb3BsZSBwcmVmZXIgdG8gYWxpZ24gdGhlIHNlY29uZCBhbmQgdGhlIHN1YnNlcXVlbnQKKyAgIGxpbmVzIHdpdGggdGhlIGNvbHVtbiBpbW1lZGlhdGVseSBpbnNpZGUgdGhlIG9wZW5pbmcgcGFyZW50aGVzaXMsCisgICB3aXRoIHRhYnMgYW5kIHNwYWNlcywgZm9sbG93aW5nIG91ciAidGFic3RvcCBpcyBhbHdheXMgYSBtdWx0aXBsZQorICAgb2YgOCIgY29udmVudGlvbjoKKworICAgICAgICBpZiAodGhlX2JlZ2lubmluZ19vZl9hX3ZlcnlfbG9uZ19leHByZXNzaW9uX3RoYXRfaGFzX3RvIHx8CisJICAgIHNwYW5fbW9yZV90aGFuX2Ffc2luZ2xlX2xpbmVfb2YgfHwKKwkgICAgdGhlX3NvdXJjZV90ZXh0KSB7CisgICAgICAgICAgICAgICAgLi4uCisKKyAgIEJvdGggYXJlIHZhbGlkLCBhbmQgd2UgdXNlIGJvdGguICBBZ2FpbiwganVzdCBkbyBub3QgbWl4IHN0eWxlcyBpbgorICAgdGhlIHNhbWUgcGFydCBvZiB0aGUgY29kZSBhbmQgbWltaWMgZXhpc3Rpbmcgc3R5bGVzIGluIHRoZQorICAgbmVpZ2hib3VyaG9vZC4KKworIC0gV2hlbiBzcGxpdHRpbmcgYSBsb25nIGxvZ2ljYWwgbGluZSwgc29tZSBwZW9wbGUgY2hhbmdlIGxpbmUgYmVmb3JlCisgICBhIGJpbmFyeSBvcGVyYXRvciwgc28gdGhhdCB0aGUgcmVzdWx0IGxvb2tzIGxpa2UgYSBwYXJzZSB0cmVlIHdoZW4KKyAgIHlvdSB0dXJuIHlvdXIgaGVhZCA5MC1kZWdyZWVzIGNvdW50ZXJjbG9ja3dpc2U6CisKKyAgICAgICAgaWYgKHRoZV9iZWdpbm5pbmdfb2ZfYV92ZXJ5X2xvbmdfZXhwcmVzc2lvbl90aGF0X2hhc190bworCSAgICB8fCBzcGFuX21vcmVfdGhhbl9hX3NpbmdsZV9saW5lX29mX3RoZV9zb3VyY2VfdGV4dCkgeworCisgICB3aGlsZSBvdGhlciBwZW9wbGUgcHJlZmVyIHRvIGxlYXZlIHRoZSBvcGVyYXRvciBhdCB0aGUgZW5kIG9mIHRoZQorICAgbGluZToKKworICAgICAgICBpZiAodGhlX2JlZ2lubmluZ19vZl9hX3ZlcnlfbG9uZ19leHByZXNzaW9uX3RoYXRfaGFzX3RvIHx8CisJICAgIHNwYW5fbW9yZV90aGFuX2Ffc2luZ2xlX2xpbmVfb2ZfdGhlX3NvdXJjZV90ZXh0KSB7CisKKyAgIEJvdGggYXJlIHZhbGlkLCBidXQgd2UgdGVuZCB0byB1c2UgdGhlIGxhdHRlciBtb3JlLCB1bmxlc3MgdGhlCisgICBleHByZXNzaW9uIGdldHMgZmFpcmx5IGNvbXBsZXgsIGluIHdoaWNoIGNhc2UgdGhlIGZvcm1lciB0ZW5kcyB0bworICAgYmUgZWFzaWVyIHRvIHJlYWQuICBBZ2FpbiwganVzdCBkbyBub3QgbWl4IHN0eWxlcyBpbiB0aGUgc2FtZSBwYXJ0CisgICBvZiB0aGUgY29kZSBhbmQgbWltaWMgZXhpc3Rpbmcgc3R5bGVzIGluIHRoZSBuZWlnaGJvdXJob29kLgorCisgLSBXaGVuIHNwbGl0dGluZyBhIGxvbmcgbG9naWNhbCBsaW5lLCB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSBiZWluZworICAgZXF1YWwsIGl0IGlzIHByZWZlcmFibGUgdG8gc3BsaXQgYWZ0ZXIgdGhlIG9wZXJhdG9yIGF0IGhpZ2hlcgorICAgbGV2ZWwgaW4gdGhlIHBhcnNlIHRyZWUuICBUaGF0IGlzLCB0aGlzIGlzIG1vcmUgcHJlZmVyYWJsZToKKworCWlmIChhX3ZlcnlfbG9uZ192YXJpYWJsZSAqIHRoYXRfaXNfdXNlZF9pbiArCisJICAgIGFfdmVyeV9sb25nX2V4cHJlc3Npb24pIHsKKwkJLi4uCisKKyAgIHRoYW4KKworCWlmIChhX3ZlcnlfbG9uZ192YXJpYWJsZSAqCisJICAgIHRoYXRfaXNfdXNlZF9pbiArIGFfdmVyeV9sb25nX2V4cHJlc3Npb24pIHsKKwkJLi4uCisKKyAtIFNvbWUgY2xldmVyIHRyaWNrcywgbGlrZSB1c2luZyB0aGUgISEgb3BlcmF0b3Igd2l0aCBhcml0aG1ldGljCisgICBjb25zdHJ1Y3RzLCBjYW4gYmUgZXh0cmVtZWx5IGNvbmZ1c2luZyB0byBvdGhlcnMuICBBdm9pZCB0aGVtLAorICAgdW5sZXNzIHRoZXJlIGlzIGEgY29tcGVsbGluZyByZWFzb24gdG8gdXNlIHRoZW0uCisKKyAtIFVzZSB0aGUgQVBJLiAgTm8sIHJlYWxseS4gIFdlIGhhdmUgYSBzdHJidWYgKHZhcmlhYmxlIGxlbmd0aAorICAgc3RyaW5nKSwgc2V2ZXJhbCBhcnJheXMgd2l0aCB0aGUgQUxMT0NfR1JPVygpIG1hY3JvLCBhCisgICBzdHJpbmdfbGlzdCBmb3Igc29ydGVkIHN0cmluZyBsaXN0cywgYSBoYXNoIG1hcCAobWFwcGluZyBzdHJ1Y3QKKyAgIG9iamVjdHMpIG5hbWVkICJzdHJ1Y3QgZGVjb3JhdGUiLCBhbW9uZ3N0IG90aGVyIHRoaW5ncy4KKworIC0gV2hlbiB5b3UgY29tZSB1cCB3aXRoIGFuIEFQSSwgZG9jdW1lbnQgaXQuCisKKyAtIFRoZSBmaXJzdCAjaW5jbHVkZSBpbiBDIGZpbGVzLCBleGNlcHQgaW4gcGxhdGZvcm0gc3BlY2lmaWMgY29tcGF0LworICAgaW1wbGVtZW50YXRpb25zLCBtdXN0IGJlIGVpdGhlciAiZ2l0LWNvbXBhdC11dGlsLmgiLCAiY2FjaGUuaCIgb3IKKyAgICJidWlsdGluLmgiLiAgWW91IGRvIG5vdCBoYXZlIHRvIGluY2x1ZGUgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZS4KKworIC0gQSBDIGZpbGUgbXVzdCBkaXJlY3RseSBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZXMgdGhhdCBkZWNsYXJlIHRoZQorICAgZnVuY3Rpb25zIGFuZCB0aGUgdHlwZXMgaXQgdXNlcywgZXhjZXB0IGZvciB0aGUgZnVuY3Rpb25zIGFuZCB0eXBlcworICAgdGhhdCBhcmUgbWFkZSBhdmFpbGFibGUgdG8gaXQgYnkgaW5jbHVkaW5nIG9uZSBvZiB0aGUgaGVhZGVyIGZpbGVzCisgICBpdCBtdXN0IGluY2x1ZGUgYnkgdGhlIHByZXZpb3VzIHJ1bGUuCisKKyAtIElmIHlvdSBhcmUgcGxhbm5pbmcgYSBuZXcgY29tbWFuZCwgY29uc2lkZXIgd3JpdGluZyBpdCBpbiBzaGVsbAorICAgb3IgcGVybCBmaXJzdCwgc28gdGhhdCBjaGFuZ2VzIGluIHNlbWFudGljcyBjYW4gYmUgZWFzaWx5CisgICBjaGFuZ2VkIGFuZCBkaXNjdXNzZWQuICBNYW55IEdpdCBjb21tYW5kcyBzdGFydGVkIG91dCBsaWtlCisgICB0aGF0LCBhbmQgYSBmZXcgYXJlIHN0aWxsIHNjcmlwdHMuCisKKyAtIEF2b2lkIGludHJvZHVjaW5nIGEgbmV3IGRlcGVuZGVuY3kgaW50byBHaXQuIFRoaXMgbWVhbnMgeW91CisgICB1c3VhbGx5IHNob3VsZCBzdGF5IGF3YXkgZnJvbSBzY3JpcHRpbmcgbGFuZ3VhZ2VzIG5vdCBhbHJlYWR5CisgICB1c2VkIGluIHRoZSBHaXQgY29yZSBjb21tYW5kIHNldCAodW5sZXNzIHlvdXIgY29tbWFuZCBpcyBjbGVhcmx5CisgICBzZXBhcmF0ZSBmcm9tIGl0LCBzdWNoIGFzIGFuIGltcG9ydGVyIHRvIGNvbnZlcnQgcmFuZG9tLXNjbS1YCisgICByZXBvc2l0b3JpZXMgdG8gR2l0KS4KKworIC0gV2hlbiB3ZSBwYXNzIDxzdHJpbmcsIGxlbmd0aD4gcGFpciB0byBmdW5jdGlvbnMsIHdlIHNob3VsZCB0cnkgdG8KKyAgIHBhc3MgdGhlbSBpbiB0aGF0IG9yZGVyLgorCisgLSBVc2UgR2l0J3MgZ2V0dGV4dCB3cmFwcGVycyB0byBtYWtlIHRoZSB1c2VyIGludGVyZmFjZQorICAgdHJhbnNsYXRhYmxlLiBTZWUgIk1hcmtpbmcgc3RyaW5ncyBmb3IgdHJhbnNsYXRpb24iIGluIHBvL1JFQURNRS4KKworRm9yIFBlcmwgcHJvZ3JhbXM6CisKKyAtIE1vc3Qgb2YgdGhlIEMgZ3VpZGVsaW5lcyBhYm92ZSBhcHBseS4KKworIC0gV2UgdHJ5IHRvIHN1cHBvcnQgUGVybCA1LjggYW5kIGxhdGVyICgidXNlIFBlcmwgNS4wMDgiKS4KKworIC0gdXNlIHN0cmljdCBhbmQgdXNlIHdhcm5pbmdzIGFyZSBzdHJvbmdseSBwcmVmZXJyZWQuCisKKyAtIERvbid0IG92ZXJ1c2Ugc3RhdGVtZW50IG1vZGlmaWVycyB1bmxlc3MgdXNpbmcgdGhlbSBtYWtlcyB0aGUKKyAgIHJlc3VsdCBlYXNpZXIgdG8gZm9sbG93LgorCisJLi4uIGRvIHNvbWV0aGluZyAuLi4KKwlkb190aGlzKCkgdW5sZXNzIChjb25kaXRpb24pOworICAgICAgICAuLi4gZG8gc29tZXRoaW5nIGVsc2UgLi4uCisKKyAgIGlzIG1vcmUgcmVhZGFibGUgdGhhbjoKKworCS4uLiBkbyBzb21ldGhpbmcgLi4uCisJdW5sZXNzIChjb25kaXRpb24pIHsKKwkJZG9fdGhpcygpOworCX0KKyAgICAgICAgLi4uIGRvIHNvbWV0aGluZyBlbHNlIC4uLgorCisgICAqb25seSogd2hlbiB0aGUgY29uZGl0aW9uIGlzIHNvIHJhcmUgdGhhdCBkb190aGlzKCkgd2lsbCBiZSBhbG1vc3QKKyAgIGFsd2F5cyBjYWxsZWQuCisKKyAtIFdlIHRyeSB0byBhdm9pZCBhc3NpZ25tZW50cyBpbnNpZGUgImlmICgpIiBjb25kaXRpb25zLgorCisgLSBMZWFybiBhbmQgdXNlIEdpdC5wbSBpZiB5b3UgbmVlZCB0aGF0IGZ1bmN0aW9uYWxpdHkuCisKKyAtIEZvciBFbWFjcywgaXQncyB1c2VmdWwgdG8gcHV0IHRoZSBmb2xsb3dpbmcgaW4KKyAgIEdJVF9DSEVDS09VVC8uZGlyLWxvY2Fscy5lbCwgYXNzdW1pbmcgeW91IHVzZSBjcGVybC1tb2RlOgorCisgICAgOzsgbm90ZSB0aGUgZmlyc3QgcGFydCBpcyB1c2VmdWwgZm9yIEMgZWRpdGluZywgdG9vCisgICAgKChuaWwgLiAoKGluZGVudC10YWJzLW1vZGUgLiB0KQorICAgICAgICAgICAgICAgICAgKHRhYi13aWR0aCAuIDgpCisgICAgICAgICAgICAgICAgICAoZmlsbC1jb2x1bW4gLiA4MCkpKQorICAgICAoY3BlcmwtbW9kZSAuICgoY3BlcmwtaW5kZW50LWxldmVsIC4gOCkKKyAgICAgICAgICAgICAgICAgICAgKGNwZXJsLWV4dHJhLW5ld2xpbmUtYmVmb3JlLWJyYWNlIC4gbmlsKQorICAgICAgICAgICAgICAgICAgICAoY3BlcmwtbWVyZ2UtdHJhaWxpbmctZWxzZSAuIHQpKSkpCisKK0ZvciBQeXRob24gc2NyaXB0czoKKworIC0gV2UgZm9sbG93IFBFUC04IChodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTAwMDgvKS4KKworIC0gQXMgYSBtaW5pbXVtLCB3ZSBhaW0gdG8gYmUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAyLjYgYW5kIDIuNy4KKworIC0gV2hlcmUgcmVxdWlyZWQgbGlicmFyaWVzIGRvIG5vdCByZXN0cmljdCB1cyB0byBQeXRob24gMiwgd2UgdHJ5IHRvCisgICBhbHNvIGJlIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIGFuZCBsYXRlci4KKworIC0gV2hlbiB5b3UgbXVzdCBkaWZmZXJlbnRpYXRlIGJldHdlZW4gVW5pY29kZSBsaXRlcmFscyBhbmQgYnl0ZSBzdHJpbmcKKyAgIGxpdGVyYWxzLCBpdCBpcyBPSyB0byB1c2UgdGhlICdiJyBwcmVmaXguICBFdmVuIHRob3VnaCB0aGUgUHl0aG9uCisgICBkb2N1bWVudGF0aW9uIGZvciB2ZXJzaW9uIDIuNiBkb2VzIG5vdCBtZW50aW9uIHRoaXMgcHJlZml4LCBpdCBoYXMKKyAgIGJlZW4gc3VwcG9ydGVkIHNpbmNlIHZlcnNpb24gMi42LjAuCisKK0Vycm9yIE1lc3NhZ2VzCisKKyAtIERvIG5vdCBlbmQgZXJyb3IgbWVzc2FnZXMgd2l0aCBhIGZ1bGwgc3RvcC4KKworIC0gRG8gbm90IGNhcGl0YWxpemUgKCJ1bmFibGUgdG8gb3BlbiAlcyIsIG5vdCAiVW5hYmxlIHRvIG9wZW4gJXMiKQorCisgLSBTYXkgd2hhdCB0aGUgZXJyb3IgaXMgZmlyc3QgKCJjYW5ub3Qgb3BlbiAlcyIsIG5vdCAiJXM6IGNhbm5vdCBvcGVuIikKKworCitFeHRlcm5hbGx5IFZpc2libGUgTmFtZXMKKworIC0gRm9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMsIGZvbGxvdyB0aGUgZXhpc3RpbmcgY29udmVudGlvbjoKKworICAgLiBUaGUgc2VjdGlvbiBuYW1lIGluZGljYXRlcyB0aGUgYWZmZWN0ZWQgc3Vic3lzdGVtLgorCisgICAuIFRoZSBzdWJzZWN0aW9uIG5hbWUsIGlmIGFueSwgaW5kaWNhdGVzIHdoaWNoIG9mIGFuIHVuYm91bmRlZCBzZXQKKyAgICAgb2YgdGhpbmdzIHRvIHNldCB0aGUgdmFsdWUgZm9yLgorCisgICAuIFRoZSB2YXJpYWJsZSBuYW1lIGRlc2NyaWJlcyB0aGUgZWZmZWN0IG9mIHR3ZWFraW5nIHRoaXMga25vYi4KKworICAgVGhlIHNlY3Rpb24gYW5kIHZhcmlhYmxlIG5hbWVzIHRoYXQgY29uc2lzdCBvZiBtdWx0aXBsZSB3b3JkcyBhcmUKKyAgIGZvcm1lZCBieSBjb25jYXRlbmF0aW5nIHRoZSB3b3JkcyB3aXRob3V0IHB1bmN0dWF0aW9ucyAoZS5nLiBgLWApLAorICAgYW5kIGFyZSBicm9rZW4gdXNpbmcgYnVtcHlDYXBzIGluIGRvY3VtZW50YXRpb24gYXMgYSBoaW50IHRvIHRoZQorICAgcmVhZGVyLgorCisgICBXaGVuIGNob29zaW5nIHRoZSB2YXJpYWJsZSBuYW1lc3BhY2UsIGRvIG5vdCB1c2UgdmFyaWFibGUgbmFtZSBmb3IKKyAgIHNwZWNpZnlpbmcgcG9zc2libHkgdW5ib3VuZGVkIHNldCBvZiB0aGluZ3MsIG1vc3Qgbm90YWJseSBhbnl0aGluZworICAgYW4gZW5kIHVzZXIgY2FuIGZyZWVseSBjb21lIHVwIHdpdGggKGUuZy4gYnJhbmNoIG5hbWVzKS4gIEluc3RlYWQsCisgICB1c2Ugc3Vic2VjdGlvbiBuYW1lcyBvciB2YXJpYWJsZSB2YWx1ZXMsIGxpa2UgdGhlIGV4aXN0aW5nIHZhcmlhYmxlCisgICBicmFuY2guPG5hbWU+LmRlc2NyaXB0aW9uIGRvZXMuCisKKworV3JpdGluZyBEb2N1bWVudGF0aW9uOgorCisgTW9zdCAoaWYgbm90IGFsbCkgb2YgdGhlIGRvY3VtZW50YXRpb24gcGFnZXMgYXJlIHdyaXR0ZW4gaW4gdGhlCisgQXNjaWlEb2MgZm9ybWF0IGluICoudHh0IGZpbGVzIChlLmcuIERvY3VtZW50YXRpb24vZ2l0LnR4dCksIGFuZAorIHByb2Nlc3NlZCBpbnRvIEhUTUwgYW5kIG1hbnBhZ2VzIChlLmcuIGdpdC5odG1sIGFuZCBnaXQuMSBpbiB0aGUKKyBzYW1lIGRpcmVjdG9yeSkuCisKKyBUaGUgZG9jdW1lbnRhdGlvbiBsaWJlcmFsbHkgbWl4ZXMgVVMgYW5kIFVLIEVuZ2xpc2ggKGVuX1VTL1VLKQorIG5vcm1zIGZvciBzcGVsbGluZyBhbmQgZ3JhbW1hciwgd2hpY2ggaXMgc29tZXdoYXQgdW5mb3J0dW5hdGUuCisgSW4gYW4gaWRlYWwgd29ybGQsIGl0IHdvdWxkIGhhdmUgYmVlbiBiZXR0ZXIgaWYgaXQgY29uc2lzdGVudGx5CisgdXNlZCBvbmx5IG9uZSBhbmQgbm90IHRoZSBvdGhlciwgYW5kIHdlIHdvdWxkIGhhdmUgcGlja2VkIGVuX1VTCisgKGlmIHlvdSB3aXNoIHRvIGNvcnJlY3QgdGhlIEVuZ2xpc2ggb2Ygc29tZSBvZiB0aGUgZXhpc3RpbmcKKyBkb2N1bWVudGF0aW9uLCBwbGVhc2Ugc2VlIHRoZSBkb2N1bWVudGF0aW9uLXJlbGF0ZWQgYWR2aWNlIGluIHRoZQorIERvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMgZmlsZSkuCisKKyBFdmVyeSB1c2VyLXZpc2libGUgY2hhbmdlIHNob3VsZCBiZSByZWZsZWN0ZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisgVGhlIHNhbWUgZ2VuZXJhbCBydWxlIGFzIGZvciBjb2RlIGFwcGxpZXMgLS0gaW1pdGF0ZSB0aGUgZXhpc3RpbmcKKyBjb252ZW50aW9ucy4KKworIEEgZmV3IGNvbW1lbnRlZCBleGFtcGxlcyBmb2xsb3cgdG8gcHJvdmlkZSByZWZlcmVuY2Ugd2hlbiB3cml0aW5nIG9yCisgbW9kaWZ5aW5nIGNvbW1hbmQgdXNhZ2Ugc3RyaW5ncyBhbmQgc3lub3BzaXMgc2VjdGlvbnMgaW4gdGhlIG1hbnVhbAorIHBhZ2VzOgorCisgUGxhY2Vob2xkZXJzIGFyZSBzcGVsbGVkIGluIGxvd2VyY2FzZSBhbmQgZW5jbG9zZWQgaW4gYW5nbGUgYnJhY2tldHM6CisgICA8ZmlsZT4KKyAgIC0tc29ydD08a2V5PgorICAgLS1hYmJyZXZbPTxuPl0KKworIElmIGEgcGxhY2Vob2xkZXIgaGFzIG11bHRpcGxlIHdvcmRzLCB0aGV5IGFyZSBzZXBhcmF0ZWQgYnkgZGFzaGVzOgorICAgPG5ldy1icmFuY2gtbmFtZT4KKyAgIC0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT4KKworIFBvc3NpYmlsaXR5IG9mIG11bHRpcGxlIG9jY3VycmVuY2VzIGlzIGluZGljYXRlZCBieSB0aHJlZSBkb3RzOgorICAgPGZpbGU+Li4uCisgICAoT25lIG9yIG1vcmUgb2YgPGZpbGU+LikKKworIE9wdGlvbmFsIHBhcnRzIGFyZSBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHM6CisgICBbPGV4dHJhPl0KKyAgIChaZXJvIG9yIG9uZSA8ZXh0cmE+LikKKworICAgLS1leGVjLXBhdGhbPTxwYXRoPl0KKyAgIChPcHRpb24gd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudC4gIE5vdGUgdGhhdCB0aGUgIj0iIGlzIGluc2lkZSB0aGUKKyAgIGJyYWNrZXRzLikKKworICAgWzxwYXRjaD4uLi5dCisgICAoWmVybyBvciBtb3JlIG9mIDxwYXRjaD4uICBOb3RlIHRoYXQgdGhlIGRvdHMgYXJlIGluc2lkZSwgbm90CisgICBvdXRzaWRlIHRoZSBicmFja2V0cy4pCisKKyBNdWx0aXBsZSBhbHRlcm5hdGl2ZXMgYXJlIGluZGljYXRlZCB3aXRoIHZlcnRpY2FsIGJhcnM6CisgICBbLXEgfCAtLXF1aWV0XQorICAgWy0tdXRmOCB8IC0tbm8tdXRmOF0KKworIFBhcmVudGhlc2VzIGFyZSB1c2VkIGZvciBncm91cGluZzoKKyAgIFsoPHJldj4gfCA8cmFuZ2U+KS4uLl0KKyAgIChBbnkgbnVtYmVyIG9mIGVpdGhlciA8cmV2PiBvciA8cmFuZ2U+LiAgUGFyZW5zIGFyZSBuZWVkZWQgdG8gbWFrZQorICAgaXQgY2xlYXIgdGhhdCAiLi4uIiBwZXJ0YWlucyB0byBib3RoIDxyZXY+IGFuZCA8cmFuZ2U+LikKKworICAgWygtcCA8cGFyZW50PikuLi5dCisgICAoQW55IG51bWJlciBvZiBvcHRpb24gLXAsIGVhY2ggd2l0aCBvbmUgPHBhcmVudD4gYXJndW1lbnQuKQorCisgICBnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtZCB8IDxicmFuY2g+KQorICAgKE9uZSBhbmQgb25seSBvbmUgb2YgIi1hIiwgIi1kIiBvciAiPGJyYW5jaD4iIF9tdXN0XyAobm8gc3F1YXJlCisgICBicmFja2V0cykgYmUgcHJvdmlkZWQuKQorCisgQW5kIGEgc29tZXdoYXQgbW9yZSBjb250cml2ZWQgZXhhbXBsZToKKyAgIC0tZGlmZi1maWx0ZXI9WyhBfEN8RHxNfFJ8VHxVfFh8QikuLi5bKl1dCisgICBIZXJlICI9IiBpcyBvdXRzaWRlIHRoZSBicmFja2V0cywgYmVjYXVzZSAiLS1kaWZmLWZpbHRlcj0iIGlzIGEKKyAgIHZhbGlkIHVzYWdlLiAgIioiIGhhcyBpdHMgb3duIHBhaXIgb2YgYnJhY2tldHMsIGJlY2F1c2UgaXQgY2FuCisgICAob3B0aW9uYWxseSkgYmUgc3BlY2lmaWVkIG9ubHkgd2hlbiBvbmUgb3IgbW9yZSBvZiB0aGUgbGV0dGVycyBpcworICAgYWxzbyBwcm92aWRlZC4KKworICBBIG5vdGUgb24gbm90YXRpb246CisgICBVc2UgJ2dpdCcgKGFsbCBsb3dlcmNhc2UpIHdoZW4gdGFsa2luZyBhYm91dCBjb21tYW5kcyBpLmUuIHNvbWV0aGluZworICAgdGhlIHVzZXIgd291bGQgdHlwZSBpbnRvIGEgc2hlbGwgYW5kIHVzZSAnR2l0JyAodXBwZXJjYXNlIGZpcnN0IGxldHRlcikKKyAgIHdoZW4gdGFsa2luZyBhYm91dCB0aGUgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBhbmQgaXRzIHByb3BlcnRpZXMuCisKKyBBIGZldyBjb21tZW50ZWQgZXhhbXBsZXMgZm9sbG93IHRvIHByb3ZpZGUgcmVmZXJlbmNlIHdoZW4gd3JpdGluZyBvcgorIG1vZGlmeWluZyBwYXJhZ3JhcGhzIG9yIG9wdGlvbi9jb21tYW5kIGV4cGxhbmF0aW9ucyB0aGF0IGNvbnRhaW4gb3B0aW9ucworIG9yIGNvbW1hbmRzOgorCisgTGl0ZXJhbCBleGFtcGxlcyAoZS5nLiB1c2Ugb2YgY29tbWFuZC1saW5lIG9wdGlvbnMsIGNvbW1hbmQgbmFtZXMsIGFuZAorIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzKSBhcmUgdHlwZXNldCBpbiBtb25vc3BhY2UsIGFuZCBpZiB5b3UgY2FuIHVzZQorIGBiYWNrdGlja3MgYXJvdW5kIHdvcmQgcGhyYXNlc2AsIGRvIHNvLgorICAgYC0tcHJldHR5PW9uZWxpbmVgCisgICBgZ2l0IHJldi1saXN0YAorICAgYHJlbW90ZS5wdXNoRGVmYXVsdGAKKworIFdvcmQgcGhyYXNlcyBlbmNsb3NlZCBpbiBgYmFja3RpY2sgY2hhcmFjdGVyc2AgYXJlIHJlbmRlcmVkIGxpdGVyYWxseQorIGFuZCB3aWxsIG5vdCBiZSBmdXJ0aGVyIGV4cGFuZGVkLiBUaGUgdXNlIG9mIGBiYWNrdGlja3NgIHRvIGFjaGlldmUgdGhlCisgcHJldmlvdXMgcnVsZSBtZWFucyB0aGF0IGxpdGVyYWwgZXhhbXBsZXMgc2hvdWxkIG5vdCB1c2UgQXNjaWlEb2MKKyBlc2NhcGVzLgorICAgQ29ycmVjdDoKKyAgICAgIGAtLXByZXR0eT1vbmVsaW5lYAorICAgSW5jb3JyZWN0OgorICAgICAgYFwtLXByZXR0eT1vbmVsaW5lYAorCisgSWYgc29tZSBwbGFjZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBuZWVkcyB0byB0eXBlc2V0IGEgY29tbWFuZCB1c2FnZQorIGV4YW1wbGUgd2l0aCBpbmxpbmUgc3Vic3RpdHV0aW9ucywgaXQgaXMgZmluZSB0byB1c2UgK21vbm9zcGFjZWQgYW5kCisgaW5saW5lIHN1YnN0aXR1dGVkIHRleHQrIGluc3RlYWQgb2YgYG1vbm9zcGFjZWQgbGl0ZXJhbCB0ZXh0YCwgYW5kIHdpdGgKKyB0aGUgZm9ybWVyLCB0aGUgcGFydCB0aGF0IHNob3VsZCBub3QgZ2V0IHN1YnN0aXR1dGVkIG11c3QgYmUKKyBxdW90ZWQvZXNjYXBlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMzllMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCkBAIC0wLDAgKzEsNDMwIEBACisjIEd1YXJkIGFnYWluc3QgZW52aXJvbm1lbnQgdmFyaWFibGVzCitNQU4xX1RYVCA9CitNQU41X1RYVCA9CitNQU43X1RYVCA9CitURUNIX0RPQ1MgPQorQVJUSUNMRVMgPQorU1BfQVJUSUNMRVMgPQorT0JTT0xFVEVfSFRNTCA9CisKK01BTjFfVFhUICs9ICQoZmlsdGVyLW91dCBcCisJCSQoYWRkc3VmZml4IC50eHQsICQoQVJUSUNMRVMpICQoU1BfQVJUSUNMRVMpKSwgXAorCQkkKHdpbGRjYXJkIGdpdC0qLnR4dCkpCitNQU4xX1RYVCArPSBnaXQudHh0CitNQU4xX1RYVCArPSBnaXRrLnR4dAorTUFOMV9UWFQgKz0gZ2l0cmVtb3RlLWhlbHBlcnMudHh0CitNQU4xX1RYVCArPSBnaXR3ZWIudHh0CisKK01BTjVfVFhUICs9IGdpdGF0dHJpYnV0ZXMudHh0CitNQU41X1RYVCArPSBnaXRob29rcy50eHQKK01BTjVfVFhUICs9IGdpdGlnbm9yZS50eHQKK01BTjVfVFhUICs9IGdpdG1vZHVsZXMudHh0CitNQU41X1RYVCArPSBnaXRyZXBvc2l0b3J5LWxheW91dC50eHQKK01BTjVfVFhUICs9IGdpdHdlYi5jb25mLnR4dAorCitNQU43X1RYVCArPSBnaXRjbGkudHh0CitNQU43X1RYVCArPSBnaXRjb3JlLXR1dG9yaWFsLnR4dAorTUFON19UWFQgKz0gZ2l0Y3JlZGVudGlhbHMudHh0CitNQU43X1RYVCArPSBnaXRjdnMtbWlncmF0aW9uLnR4dAorTUFON19UWFQgKz0gZ2l0ZGlmZmNvcmUudHh0CitNQU43X1RYVCArPSBnaXRldmVyeWRheS50eHQKK01BTjdfVFhUICs9IGdpdGdsb3NzYXJ5LnR4dAorTUFON19UWFQgKz0gZ2l0bmFtZXNwYWNlcy50eHQKK01BTjdfVFhUICs9IGdpdHJldmlzaW9ucy50eHQKK01BTjdfVFhUICs9IGdpdHR1dG9yaWFsLTIudHh0CitNQU43X1RYVCArPSBnaXR0dXRvcmlhbC50eHQKK01BTjdfVFhUICs9IGdpdHdvcmtmbG93cy50eHQKKworTUFOX1RYVCA9ICQoTUFOMV9UWFQpICQoTUFONV9UWFQpICQoTUFON19UWFQpCitNQU5fWE1MID0gJChwYXRzdWJzdCAlLnR4dCwlLnhtbCwkKE1BTl9UWFQpKQorTUFOX0hUTUwgPSAkKHBhdHN1YnN0ICUudHh0LCUuaHRtbCwkKE1BTl9UWFQpKQorCitPQlNPTEVURV9IVE1MICs9IGV2ZXJ5ZGF5Lmh0bWwKK09CU09MRVRFX0hUTUwgKz0gZ2l0LXJlbW90ZS1oZWxwZXJzLmh0bWwKK0RPQ19IVE1MID0gJChNQU5fSFRNTCkgJChPQlNPTEVURV9IVE1MKQorCitBUlRJQ0xFUyArPSBob3d0by1pbmRleAorQVJUSUNMRVMgKz0gZ2l0LXRvb2xzCitBUlRJQ0xFUyArPSBnaXQtYmlzZWN0LWxrMjAwOQorIyB3aXRoIHRoZWlyIG93biBmb3JtYXR0aW5nIHJ1bGVzLgorU1BfQVJUSUNMRVMgKz0gdXNlci1tYW51YWwKK1NQX0FSVElDTEVTICs9IGhvd3RvL25ldy1jb21tYW5kCitTUF9BUlRJQ0xFUyArPSBob3d0by9yZXZlcnQtYnJhbmNoLXJlYmFzZQorU1BfQVJUSUNMRVMgKz0gaG93dG8vdXNpbmctbWVyZ2Utc3VidHJlZQorU1BfQVJUSUNMRVMgKz0gaG93dG8vdXNpbmctc2lnbmVkLXRhZy1pbi1wdWxsLXJlcXVlc3QKK1NQX0FSVElDTEVTICs9IGhvd3RvL3VzZS1naXQtZGFlbW9uCitTUF9BUlRJQ0xFUyArPSBob3d0by91cGRhdGUtaG9vay1leGFtcGxlCitTUF9BUlRJQ0xFUyArPSBob3d0by9zZXR1cC1naXQtc2VydmVyLW92ZXItaHR0cAorU1BfQVJUSUNMRVMgKz0gaG93dG8vc2VwYXJhdGluZy10b3BpYy1icmFuY2hlcworU1BfQVJUSUNMRVMgKz0gaG93dG8vcmV2ZXJ0LWEtZmF1bHR5LW1lcmdlCitTUF9BUlRJQ0xFUyArPSBob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1ibG9iLW9iamVjdAorU1BfQVJUSUNMRVMgKz0gaG93dG8vcmVjb3Zlci1jb3JydXB0ZWQtb2JqZWN0LWhhcmRlcgorU1BfQVJUSUNMRVMgKz0gaG93dG8vcmVidWlsZC1mcm9tLXVwZGF0ZS1ob29rCitTUF9BUlRJQ0xFUyArPSBob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gKK1NQX0FSVElDTEVTICs9IGhvd3RvL2tlZXAtY2Fub25pY2FsLWhpc3RvcnktY29ycmVjdAorU1BfQVJUSUNMRVMgKz0gaG93dG8vbWFpbnRhaW4tZ2l0CitBUElfRE9DUyA9ICQocGF0c3Vic3QgJS50eHQsJSwkKGZpbHRlci1vdXQgdGVjaG5pY2FsL2FwaS1pbmRleC1za2VsLnR4dCB0ZWNobmljYWwvYXBpLWluZGV4LnR4dCwgJCh3aWxkY2FyZCB0ZWNobmljYWwvYXBpLSoudHh0KSkpCitTUF9BUlRJQ0xFUyArPSAkKEFQSV9ET0NTKQorCitURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL2h0dHAtcHJvdG9jb2wKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvaW5kZXgtZm9ybWF0CitURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL3BhY2stZm9ybWF0CitURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL3BhY2staGV1cmlzdGljcworVEVDSF9ET0NTICs9IHRlY2huaWNhbC9wYWNrLXByb3RvY29sCitURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL3Byb3RvY29sLWNhcGFiaWxpdGllcworVEVDSF9ET0NTICs9IHRlY2huaWNhbC9wcm90b2NvbC1jb21tb24KK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvcmFjeS1naXQKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvc2VuZC1wYWNrLXBpcGVsaW5lCitURUNIX0RPQ1MgKz0gdGVjaG5pY2FsL3NoYWxsb3cKK1RFQ0hfRE9DUyArPSB0ZWNobmljYWwvdHJpdmlhbC1tZXJnZQorU1BfQVJUSUNMRVMgKz0gJChURUNIX0RPQ1MpCitTUF9BUlRJQ0xFUyArPSB0ZWNobmljYWwvYXBpLWluZGV4CisKK0RPQ19IVE1MICs9ICQocGF0c3Vic3QgJSwlLmh0bWwsJChBUlRJQ0xFUykgJChTUF9BUlRJQ0xFUykpCisKK0RPQ19NQU4xID0gJChwYXRzdWJzdCAlLnR4dCwlLjEsJChNQU4xX1RYVCkpCitET0NfTUFONSA9ICQocGF0c3Vic3QgJS50eHQsJS41LCQoTUFONV9UWFQpKQorRE9DX01BTjcgPSAkKHBhdHN1YnN0ICUudHh0LCUuNywkKE1BTjdfVFhUKSkKKworcHJlZml4ID89ICQoSE9NRSkKK2JpbmRpciA/PSAkKHByZWZpeCkvYmluCitodG1sZGlyID89ICQocHJlZml4KS9zaGFyZS9kb2MvZ2l0LWRvYworaW5mb2RpciA/PSAkKHByZWZpeCkvc2hhcmUvaW5mbworcGRmZGlyID89ICQocHJlZml4KS9zaGFyZS9kb2MvZ2l0LWRvYworbWFuZGlyID89ICQocHJlZml4KS9zaGFyZS9tYW4KK21hbjFkaXIgPSAkKG1hbmRpcikvbWFuMQorbWFuNWRpciA9ICQobWFuZGlyKS9tYW41CittYW43ZGlyID0gJChtYW5kaXIpL21hbjcKKyMgREVTVERJUiA9CisKK0FTQ0lJRE9DID0gYXNjaWlkb2MKK0FTQ0lJRE9DX0VYVFJBID0KK0FTQ0lJRE9DX0hUTUwgPSB4aHRtbDExCitBU0NJSURPQ19ET0NCT09LID0gZG9jYm9vaworQVNDSUlET0NfQ09ORiA9IC1mIGFzY2lpZG9jLmNvbmYKK0FTQ0lJRE9DX0NPTU1PTiA9ICQoQVNDSUlET0MpICQoQVNDSUlET0NfRVhUUkEpICQoQVNDSUlET0NfQ09ORikgXAorCQktYWdpdF92ZXJzaW9uPSQoR0lUX1ZFUlNJT04pCitUWFRfVE9fSFRNTCA9ICQoQVNDSUlET0NfQ09NTU9OKSAtYiAkKEFTQ0lJRE9DX0hUTUwpCitUWFRfVE9fWE1MID0gJChBU0NJSURPQ19DT01NT04pIC1iICQoQVNDSUlET0NfRE9DQk9PSykKK01BTlBBR0VfWFNMID0gbWFucGFnZS1ub3JtYWwueHNsCitYTUxUTyA9IHhtbHRvCitYTUxUT19FWFRSQSA9CitJTlNUQUxMID89IGluc3RhbGwKK1JNID89IHJtIC1mCitNQU5fUkVQTyA9IC4uLy4uL2dpdC1tYW5wYWdlcworSFRNTF9SRVBPID0gLi4vLi4vZ2l0LWh0bWxkb2NzCisKK01BS0VJTkZPID0gbWFrZWluZm8KK0lOU1RBTExfSU5GTyA9IGluc3RhbGwtaW5mbworRE9DQk9PSzJYX1RFWEkgPSBkb2Nib29rMngtdGV4aQorREJMQVRFWCA9IGRibGF0ZXgKK0FTQ0lJRE9DX0RCTEFURVhfRElSID0gL2V0Yy9hc2NpaWRvYy9kYmxhdGV4CitpZm5kZWYgUEVSTF9QQVRICisJUEVSTF9QQVRIID0gL3Vzci9iaW4vcGVybAorZW5kaWYKKworLWluY2x1ZGUgLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi9jb25maWcubWFrCisKKyMKKyMgRm9yIGRvY2Jvb2steHNsIC4uLgorIwktMS42OC4xLAlubyBleHRyYSBzZXR0aW5ncyBhcmUgbmVlZGVkPworIwkxLjY5LjAsCQlzZXQgQVNDSUlET0NfUk9GRj8KKyMJMS42OS4xLTEuNzEuMCwJc2V0IERPQ0JPT0tfU1VQUFJFU1NfU1A/CisjCTEuNzEuMSwJCXNldCBBU0NJSURPQ19ST0ZGPworIwkxLjcyLjAsCQlzZXQgRE9DQk9PS19YU0xfMTcyLgorIwkxLjczLjAtLAlubyBleHRyYSBzZXR0aW5ncyBhcmUgbmVlZGVkCisjCisKK2lmZGVmIERPQ0JPT0tfWFNMXzE3MgorQVNDSUlET0NfRVhUUkEgKz0gLWEgZ2l0LWFzY2lpZG9jLW5vLXJvZmYKK01BTlBBR0VfWFNMID0gbWFucGFnZS0xLjcyLnhzbAorZWxzZQorCWlmbmRlZiBBU0NJSURPQ19ST0ZGCisJIyBkb2Nib29rLXhzbCBhZnRlciAxLjcyIG5lZWRzIHRoZSByZWd1bGFyIFhTTCwgYnV0IHdpbGwgbm90CisJIyBwYXNzLXRocnUgcmF3IHJvZmYgY29kZXMgZnJvbSBhc2NpaWRvYy5jb25mLCBzbyB0dXJuIHRoZW0gb2ZmLgorCUFTQ0lJRE9DX0VYVFJBICs9IC1hIGdpdC1hc2NpaWRvYy1uby1yb2ZmCisJZW5kaWYKK2VuZGlmCitpZmRlZiBNQU5fQk9MRF9MSVRFUkFMCitYTUxUT19FWFRSQSArPSAtbSBtYW5wYWdlLWJvbGQtbGl0ZXJhbC54c2wKK2VuZGlmCitpZmRlZiBET0NCT09LX1NVUFBSRVNTX1NQCitYTUxUT19FWFRSQSArPSAtbSBtYW5wYWdlLXN1cHByZXNzLXNwLnhzbAorZW5kaWYKKworIyBOZXdlciBEb2NCb29rIHN0eWxlc2hlZXQgZW1pdHMgd2FybmluZyBjcnVmdCBpbiB0aGUgb3V0cHV0IHdoZW4KKyMgdGhpcyBpcyBub3Qgc2V0LCBhbmQgaWYgc2V0IGl0IHNob3dzIGFuIGFic29sdXRlIGxpbmsuICBPbGRlcgorIyBzdHlsZXNoZWV0cyBzaW1wbHkgaWdub3JlIHRoaXMgcGFyYW1ldGVyLgorIworIyBEaXN0cm9zIG1heSB3YW50IHRvIHVzZSBNQU5fQkFTRV9VUkw9ZmlsZTovLy9wYXRoL3RvL2dpdC9kb2NzLworIyBvciBzaW1pbGFyLgoraWZuZGVmIE1BTl9CQVNFX1VSTAorTUFOX0JBU0VfVVJMID0gZmlsZTovLyQoaHRtbGRpcikvCitlbmRpZgorWE1MVE9fRVhUUkEgKz0gLW0gbWFucGFnZS1iYXNlLXVybC54c2wKKworIyBJZiB5b3VyIHRhcmdldCBzeXN0ZW0gdXNlcyBHTlUgZ3JvZmYsIGl0IG1heSB0cnkgdG8gcmVuZGVyCisjIGFwb3N0cm9waGVzIGFzIGEgInByZXR0eSIgYXBvc3Ryb3BoZSB1c2luZyB1bmljb2RlLiAgVGhpcyBicmVha3MKKyMgY3V0JnBhc3RlLCBzbyB5b3Ugc2hvdWxkIHNldCBHTlVfUk9GRiB0byBmb3JjZSB0aGVtIHRvIGJlIEFTQ0lJCisjIGFwb3N0cm9waGVzLiAgVW5mb3J0dW5hdGVseSBkb2VzIG5vdCB3b3JrIHdpdGggbm9uLUdOVSByb2ZmLgoraWZkZWYgR05VX1JPRkYKK1hNTFRPX0VYVFJBICs9IC1tIG1hbnBhZ2UtcXVvdGUtYXBvcy54c2wKK2VuZGlmCisKK1NIRUxMX1BBVEggPz0gJChTSEVMTCkKKyMgU2hlbGwgcXVvdGU7CitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKKworaWZkZWYgREVGQVVMVF9QQUdFUgorREVGQVVMVF9QQUdFUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVGQVVMVF9QQUdFUikpCitBU0NJSURPQ19FWFRSQSArPSAtYSAnZ2l0LWRlZmF1bHQtcGFnZXI9JChERUZBVUxUX1BBR0VSX1NRKScKK2VuZGlmCisKK2lmZGVmIERFRkFVTFRfRURJVE9SCitERUZBVUxUX0VESVRPUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVGQVVMVF9FRElUT1IpKQorQVNDSUlET0NfRVhUUkEgKz0gLWEgJ2dpdC1kZWZhdWx0LWVkaXRvcj0kKERFRkFVTFRfRURJVE9SX1NRKScKK2VuZGlmCisKK1FVSUVUX1NVQkRJUjAgID0gKyQoTUFLRSkgLUMgIyBzcGFjZSB0byBzZXBhcmF0ZSAtQyBhbmQgc3ViZGlyCitRVUlFVF9TVUJESVIxICA9CisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHcpLHcpCitQUklOVF9ESVIgPSAtLW5vLXByaW50LWRpcmVjdG9yeQorZWxzZSAjICJtYWtlIC13IgorTk9fU1VCRElSID0gOgorZW5kaWYKKworaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUykscykscykKK2lmbmRlZiBWCisJUVVJRVRfQVNDSUlET0MJPSBAZWNobyAnICAgJyBBU0NJSURPQyAkQDsKKwlRVUlFVF9YTUxUTwk9IEBlY2hvICcgICAnIFhNTFRPICRAOworCVFVSUVUX0RCMlRFWEkJPSBAZWNobyAnICAgJyBEQjJURVhJICRAOworCVFVSUVUX01BS0VJTkZPCT0gQGVjaG8gJyAgICcgTUFLRUlORk8gJEA7CisJUVVJRVRfREJMQVRFWAk9IEBlY2hvICcgICAnIERCTEFURVggJEA7CisJUVVJRVRfWFNMVFBST0MJPSBAZWNobyAnICAgJyBYU0xUUFJPQyAkQDsKKwlRVUlFVF9HRU4JPSBAZWNobyAnICAgJyBHRU4gJEA7CisJUVVJRVRfU1RERVJSCT0gMj4gL2Rldi9udWxsCisJUVVJRVRfU1VCRElSMAk9ICtAc3ViZGlyPQorCVFVSUVUX1NVQkRJUjEJPSA7JChOT19TVUJESVIpIGVjaG8gJyAgICcgU1VCRElSICQkc3ViZGlyOyBcCisJCQkgICQoTUFLRSkgJChQUklOVF9ESVIpIC1DICQkc3ViZGlyCisJZXhwb3J0IFYKK2VuZGlmCitlbmRpZgorCithbGw6IGh0bWwgbWFuCisKK2h0bWw6ICQoRE9DX0hUTUwpCisKK21hbjogbWFuMSBtYW41IG1hbjcKK21hbjE6ICQoRE9DX01BTjEpCittYW41OiAkKERPQ19NQU41KQorbWFuNzogJChET0NfTUFONykKKworaW5mbzogZ2l0LmluZm8gZ2l0bWFuLmluZm8KKworcGRmOiB1c2VyLW1hbnVhbC5wZGYKKworaW5zdGFsbDogaW5zdGFsbC1tYW4KKworaW5zdGFsbC1tYW46IG1hbgorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKG1hbjFkaXIpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQobWFuNWRpcikKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChtYW43ZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0ICQoRE9DX01BTjEpICQoREVTVERJUikkKG1hbjFkaXIpCisJJChJTlNUQUxMKSAtbSA2NDQgJChET0NfTUFONSkgJChERVNURElSKSQobWFuNWRpcikKKwkkKElOU1RBTEwpIC1tIDY0NCAkKERPQ19NQU43KSAkKERFU1RESVIpJChtYW43ZGlyKQorCitpbnN0YWxsLWluZm86IGluZm8KKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChpbmZvZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0IGdpdC5pbmZvIGdpdG1hbi5pbmZvICQoREVTVERJUikkKGluZm9kaXIpCisJaWYgdGVzdCAtciAkKERFU1RESVIpJChpbmZvZGlyKS9kaXI7IHRoZW4gXAorCSAgJChJTlNUQUxMX0lORk8pIC0taW5mby1kaXI9JChERVNURElSKSQoaW5mb2RpcikgZ2l0LmluZm8gO1wKKwkgICQoSU5TVEFMTF9JTkZPKSAtLWluZm8tZGlyPSQoREVTVERJUikkKGluZm9kaXIpIGdpdG1hbi5pbmZvIDtcCisJZWxzZSBcCisJICBlY2hvICJObyBkaXJlY3RvcnkgZm91bmQgaW4gJChERVNURElSKSQoaW5mb2RpcikiID4mMiA7IFwKKwlmaQorCitpbnN0YWxsLXBkZjogcGRmCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQocGRmZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0IHVzZXItbWFudWFsLnBkZiAkKERFU1RESVIpJChwZGZkaXIpCisKK2luc3RhbGwtaHRtbDogaHRtbAorCSckKFNIRUxMX1BBVEhfU1EpJyAuL2luc3RhbGwtd2ViZG9jLnNoICQoREVTVERJUikkKGh0bWxkaXIpCisKKy4uL0dJVC1WRVJTSU9OLUZJTEU6IEZPUkNFCisJJChRVUlFVF9TVUJESVIwKS4uLyAkKFFVSUVUX1NVQkRJUjEpIEdJVC1WRVJTSU9OLUZJTEUKKworLWluY2x1ZGUgLi4vR0lULVZFUlNJT04tRklMRQorCisjCisjIERldGVybWluZSAiaW5jbHVkZTo6IiBmaWxlIHJlZmVyZW5jZXMgaW4gYXNjaWlkb2MgZmlsZXMuCisjCitkb2NkZXBfcHJlcmVxcyA9IFwKKwltZXJnZXRvb2xzLWxpc3QubWFkZSAkKG1lcmdldG9vbHNfdHh0KSBcCisJY21kLWxpc3QubWFkZSAkKGNtZHNfdHh0KQorCitkb2MuZGVwIDogJChkb2NkZXBfcHJlcmVxcykgJCh3aWxkY2FyZCAqLnR4dCkgYnVpbGQtZG9jZGVwLnBlcmwKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCsgJEAgJiYgXAorCSQoUEVSTF9QQVRIKSAuL2J1aWxkLWRvY2RlcC5wZXJsID4kQCsgJChRVUlFVF9TVERFUlIpICYmIFwKKwltdiAkQCsgJEAKKworLWluY2x1ZGUgZG9jLmRlcAorCitjbWRzX3R4dCA9IGNtZHMtYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycy50eHQgXAorCWNtZHMtYW5jaWxsYXJ5bWFuaXB1bGF0b3JzLnR4dCBcCisJY21kcy1tYWlucG9yY2VsYWluLnR4dCBcCisJY21kcy1wbHVtYmluZ2ludGVycm9nYXRvcnMudHh0IFwKKwljbWRzLXBsdW1iaW5nbWFuaXB1bGF0b3JzLnR4dCBcCisJY21kcy1zeW5jaGluZ3JlcG9zaXRvcmllcy50eHQgXAorCWNtZHMtc3luY2hlbHBlcnMudHh0IFwKKwljbWRzLXB1cmVoZWxwZXJzLnR4dCBcCisJY21kcy1mb3JlaWduc2NtaW50ZXJmYWNlLnR4dAorCiskKGNtZHNfdHh0KTogY21kLWxpc3QubWFkZQorCitjbWQtbGlzdC5tYWRlOiBjbWQtbGlzdC5wZXJsIC4uL2NvbW1hbmQtbGlzdC50eHQgJChNQU4xX1RYVCkKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAmJiBcCisJJChQRVJMX1BBVEgpIC4vY21kLWxpc3QucGVybCAuLi9jb21tYW5kLWxpc3QudHh0ICQoUVVJRVRfU1RERVJSKSAmJiBcCisJZGF0ZSA+JEAKKworbWVyZ2V0b29sc190eHQgPSBtZXJnZXRvb2xzLWRpZmYudHh0IG1lcmdldG9vbHMtbWVyZ2UudHh0CisKKyQobWVyZ2V0b29sc190eHQpOiBtZXJnZXRvb2xzLWxpc3QubWFkZQorCittZXJnZXRvb2xzLWxpc3QubWFkZTogLi4vZ2l0LW1lcmdldG9vbC0tbGliLnNoICQod2lsZGNhcmQgLi4vbWVyZ2V0b29scy8qKQorCSQoUVVJRVRfR0VOKSQoUk0pICRAICYmIFwKKwkkKFNIRUxMX1BBVEgpIC1jICdNRVJHRV9UT09MU19ESVI9Li4vbWVyZ2V0b29scyAmJiBcCisJCS4gLi4vZ2l0LW1lcmdldG9vbC0tbGliLnNoICYmIFwKKwkJc2hvd190b29sX25hbWVzIGNhbl9kaWZmICIqICIgfHwgOicgPm1lcmdldG9vbHMtZGlmZi50eHQgJiYgXAorCSQoU0hFTExfUEFUSCkgLWMgJ01FUkdFX1RPT0xTX0RJUj0uLi9tZXJnZXRvb2xzICYmIFwKKwkJLiAuLi9naXQtbWVyZ2V0b29sLS1saWIuc2ggJiYgXAorCQlzaG93X3Rvb2xfbmFtZXMgY2FuX21lcmdlICIqICIgfHwgOicgPm1lcmdldG9vbHMtbWVyZ2UudHh0ICYmIFwKKwlkYXRlID4kQAorCitjbGVhbjoKKwkkKFJNKSAqLnhtbCAqLnhtbCsgKi5odG1sICouaHRtbCsgKi4xICouNSAqLjcKKwkkKFJNKSAqLnRleGkgKi50ZXhpKyAqLnRleGkrKyBnaXQuaW5mbyBnaXRtYW4uaW5mbworCSQoUk0pICoucGRmCisJJChSTSkgaG93dG8taW5kZXgudHh0IGhvd3RvLyouaHRtbCBkb2MuZGVwCisJJChSTSkgdGVjaG5pY2FsLyouaHRtbCB0ZWNobmljYWwvYXBpLWluZGV4LnR4dAorCSQoUk0pICQoY21kc190eHQpICQobWVyZ2V0b29sc190eHQpICoubWFkZQorCSQoUk0pIG1hbnBhZ2UtYmFzZS11cmwueHNsCisKKyQoTUFOX0hUTUwpOiAlLmh0bWwgOiAlLnR4dCBhc2NpaWRvYy5jb25mCisJJChRVUlFVF9BU0NJSURPQykkKFJNKSAkQCsgJEAgJiYgXAorCSQoVFhUX1RPX0hUTUwpIC1kIG1hbnBhZ2UgLW8gJEArICQ8ICYmIFwKKwltdiAkQCsgJEAKKworJChPQlNPTEVURV9IVE1MKTogJS5odG1sIDogJS50eHRvIGFzY2lpZG9jLmNvbmYKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoUk0pICRAKyAkQCAmJiBcCisJJChUWFRfVE9fSFRNTCkgLW8gJEArICQ8ICYmIFwKKwltdiAkQCsgJEAKKworbWFucGFnZS1iYXNlLXVybC54c2w6IG1hbnBhZ2UtYmFzZS11cmwueHNsLmluCisJc2VkICJzfEBATUFOX0JBU0VfVVJMQEB8JChNQU5fQkFTRV9VUkwpfCIgJDwgPiAkQAorCislLjEgJS41ICUuNyA6ICUueG1sIG1hbnBhZ2UtYmFzZS11cmwueHNsCisJJChRVUlFVF9YTUxUTykkKFJNKSAkQCAmJiBcCisJJChYTUxUTykgLW0gJChNQU5QQUdFX1hTTCkgJChYTUxUT19FWFRSQSkgbWFuICQ8CisKKyUueG1sIDogJS50eHQgYXNjaWlkb2MuY29uZgorCSQoUVVJRVRfQVNDSUlET0MpJChSTSkgJEArICRAICYmIFwKKwkkKFRYVF9UT19YTUwpIC1kIG1hbnBhZ2UgLW8gJEArICQ8ICYmIFwKKwltdiAkQCsgJEAKKwordXNlci1tYW51YWwueG1sOiB1c2VyLW1hbnVhbC50eHQgdXNlci1tYW51YWwuY29uZgorCSQoUVVJRVRfQVNDSUlET0MpJChSTSkgJEArICRAICYmIFwKKwkkKFRYVF9UT19YTUwpIC1kIGFydGljbGUgLW8gJEArICQ8ICYmIFwKKwltdiAkQCsgJEAKKwordGVjaG5pY2FsL2FwaS1pbmRleC50eHQ6IHRlY2huaWNhbC9hcGktaW5kZXgtc2tlbC50eHQgXAorCXRlY2huaWNhbC9hcGktaW5kZXguc2ggJChwYXRzdWJzdCAlLCUudHh0LCQoQVBJX0RPQ1MpKQorCSQoUVVJRVRfR0VOKWNkIHRlY2huaWNhbCAmJiAnJChTSEVMTF9QQVRIX1NRKScgLi9hcGktaW5kZXguc2gKKwordGVjaG5pY2FsLyUuaHRtbDogQVNDSUlET0NfRVhUUkEgKz0gLWEgZ2l0LXJlbGF0aXZlLWh0bWwtcHJlZml4PS4uLworJChwYXRzdWJzdCAlLCUuaHRtbCwkKEFQSV9ET0NTKSB0ZWNobmljYWwvYXBpLWluZGV4ICQoVEVDSF9ET0NTKSk6ICUuaHRtbCA6ICUudHh0IGFzY2lpZG9jLmNvbmYKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoVFhUX1RPX0hUTUwpICQqLnR4dAorCitYU0xUID0gZG9jYm9vay54c2wKK1hTTFRPUFRTID0gLS14aW5jbHVkZSAtLXN0cmluZ3BhcmFtIGh0bWwuc3R5bGVzaGVldCBkb2Nib29rLXhzbC5jc3MKKwordXNlci1tYW51YWwuaHRtbDogdXNlci1tYW51YWwueG1sICQoWFNMVCkKKwkkKFFVSUVUX1hTTFRQUk9DKSQoUk0pICRAKyAkQCAmJiBcCisJeHNsdHByb2MgJChYU0xUT1BUUykgLW8gJEArICQoWFNMVCkgJDwgJiYgXAorCW12ICRAKyAkQAorCitnaXQuaW5mbzogdXNlci1tYW51YWwudGV4aQorCSQoUVVJRVRfTUFLRUlORk8pJChNQUtFSU5GTykgLS1uby1zcGxpdCAtbyAkQCB1c2VyLW1hbnVhbC50ZXhpCisKK3VzZXItbWFudWFsLnRleGk6IHVzZXItbWFudWFsLnhtbAorCSQoUVVJRVRfREIyVEVYSSkkKFJNKSAkQCsgJEAgJiYgXAorCSQoRE9DQk9PSzJYX1RFWEkpIHVzZXItbWFudWFsLnhtbCAtLWVuY29kaW5nPVVURi04IC0tdG8tc3Rkb3V0ID4kQCsrICYmIFwKKwkkKFBFUkxfUEFUSCkgZml4LXRleGkucGVybCA8JEArKyA+JEArICYmIFwKKwlybSAkQCsrICYmIFwKKwltdiAkQCsgJEAKKwordXNlci1tYW51YWwucGRmOiB1c2VyLW1hbnVhbC54bWwKKwkkKFFVSUVUX0RCTEFURVgpJChSTSkgJEArICRAICYmIFwKKwkkKERCTEFURVgpIC1vICRAKyAtcCAkKEFTQ0lJRE9DX0RCTEFURVhfRElSKS9hc2NpaWRvYy1kYmxhdGV4LnhzbCAtcyAkKEFTQ0lJRE9DX0RCTEFURVhfRElSKS9hc2NpaWRvYy1kYmxhdGV4LnN0eSAkPCAmJiBcCisJbXYgJEArICRACisKK2dpdG1hbi50ZXhpOiAkKE1BTl9YTUwpIGNhdC10ZXhpLnBlcmwKKwkkKFFVSUVUX0RCMlRFWEkpJChSTSkgJEArICRAICYmIFwKKwkoJChmb3JlYWNoIHhtbCwkKE1BTl9YTUwpLCQoRE9DQk9PSzJYX1RFWEkpIC0tZW5jb2Rpbmc9VVRGLTggXAorCQktLXRvLXN0ZG91dCAkKHhtbCkgJiYpIHRydWUpID4gJEArKyAmJiBcCisJJChQRVJMX1BBVEgpIGNhdC10ZXhpLnBlcmwgJEAgPCRAKysgPiRAKyAmJiBcCisJcm0gJEArKyAmJiBcCisJbXYgJEArICRACisKK2dpdG1hbi5pbmZvOiBnaXRtYW4udGV4aQorCSQoUVVJRVRfTUFLRUlORk8pJChNQUtFSU5GTykgLS1uby1zcGxpdCAtLW5vLXZhbGlkYXRlICQqLnRleGkKKworJChwYXRzdWJzdCAlLnR4dCwlLnRleGksJChNQU5fVFhUKSk6ICUudGV4aSA6ICUueG1sCisJJChRVUlFVF9EQjJURVhJKSQoUk0pICRAKyAkQCAmJiBcCisJJChET0NCT09LMlhfVEVYSSkgLS10by1zdGRvdXQgJCoueG1sID4kQCsgJiYgXAorCW12ICRAKyAkQAorCitob3d0by1pbmRleC50eHQ6IGhvd3RvLWluZGV4LnNoICQod2lsZGNhcmQgaG93dG8vKi50eHQpCisJJChRVUlFVF9HRU4pJChSTSkgJEArICRAICYmIFwKKwknJChTSEVMTF9QQVRIX1NRKScgLi9ob3d0by1pbmRleC5zaCAkKHNvcnQgJCh3aWxkY2FyZCBob3d0by8qLnR4dCkpID4kQCsgJiYgXAorCW12ICRAKyAkQAorCiskKHBhdHN1YnN0ICUsJS5odG1sLCQoQVJUSUNMRVMpKSA6ICUuaHRtbCA6ICUudHh0CisJJChRVUlFVF9BU0NJSURPQykkKFRYVF9UT19IVE1MKSAkKi50eHQKKworV0VCRE9DX0RFU1QgPSAvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcworCitob3d0by8lLmh0bWw6IEFTQ0lJRE9DX0VYVFJBICs9IC1hIGdpdC1yZWxhdGl2ZS1odG1sLXByZWZpeD0uLi8KKyQocGF0c3Vic3QgJS50eHQsJS5odG1sLCQod2lsZGNhcmQgaG93dG8vKi50eHQpKTogJS5odG1sIDogJS50eHQKKwkkKFFVSUVUX0FTQ0lJRE9DKSQoUk0pICRAKyAkQCAmJiBcCisJc2VkIC1lICcxLC9eJCQvZCcgJDwgfCBcCisJJChUWFRfVE9fSFRNTCkgLSA+JEArICYmIFwKKwltdiAkQCsgJEAKKworaW5zdGFsbC13ZWJkb2MgOiBodG1sCisJJyQoU0hFTExfUEFUSF9TUSknIC4vaW5zdGFsbC13ZWJkb2Muc2ggJChXRUJET0NfREVTVCkKKworIyBZb3UgbXVzdCBoYXZlIGEgY2xvbmUgb2YgJ2dpdC1odG1sZG9jcycgYW5kICdnaXQtbWFucGFnZXMnIHJlcG9zaXRvcmllcworIyBuZXh0IHRvIHRoZSAnZ2l0JyByZXBvc2l0b3J5IGl0c2VsZiBmb3IgdGhlIGZvbGxvd2luZyB0byB3b3JrLgorCitxdWljay1pbnN0YWxsOiBxdWljay1pbnN0YWxsLW1hbgorCityZXF1aXJlLW1hbnJlcG86OgorCUBpZiB0ZXN0ICEgLWQgJChNQU5fUkVQTyk7IFwKKwl0aGVuIGVjaG8gImdpdC1tYW5wYWdlcyByZXBvc2l0b3J5IG11c3QgZXhpc3QgYXQgJChNQU5fUkVQTykiOyBleGl0IDE7IGZpCisKK3F1aWNrLWluc3RhbGwtbWFuOiByZXF1aXJlLW1hbnJlcG8KKwknJChTSEVMTF9QQVRIX1NRKScgLi9pbnN0YWxsLWRvYy1xdWljay5zaCAkKE1BTl9SRVBPKSAkKERFU1RESVIpJChtYW5kaXIpCisKK3JlcXVpcmUtaHRtbHJlcG86OgorCUBpZiB0ZXN0ICEgLWQgJChIVE1MX1JFUE8pOyBcCisJdGhlbiBlY2hvICJnaXQtaHRtbGRvY3MgcmVwb3NpdG9yeSBtdXN0IGV4aXN0IGF0ICQoSFRNTF9SRVBPKSI7IGV4aXQgMTsgZmkKKworcXVpY2staW5zdGFsbC1odG1sOiByZXF1aXJlLWh0bWxyZXBvCisJJyQoU0hFTExfUEFUSF9TUSknIC4vaW5zdGFsbC1kb2MtcXVpY2suc2ggJChIVE1MX1JFUE8pICQoREVTVERJUikkKGh0bWxkaXIpCisKK3ByaW50LW1hbjE6CisJQGZvciBpIGluICQoTUFOMV9UWFQpOyBkbyBlY2hvICQkaTsgZG9uZQorCisuUEhPTlk6IEZPUkNFCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWEzZjk5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4xLnR4dApAQCAtMCwwICsxLDQyIEBACitHSVQgdjEuNS4wLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworICAtIENsYXJpZmljYXRpb25zIGFuZCBjb3JyZWN0aW9ucyB0byAxLjUuMCByZWxlYXNlIG5vdGVzLgorCisgIC0gVGhlIG1haW4gZG9jdW1lbnRhdGlvbiBkaWQgbm90IGxpbmsgdG8gZ2l0LXJlbW90ZSBkb2N1bWVudGF0aW9uLgorCisgIC0gQ2xhcmlmaWVkIGludHJvZHVjdG9yeSB0ZXh0IG9mIGdpdC1yZWJhc2UgZG9jdW1lbnRhdGlvbi4KKworICAtIENvbnZlcnRlZCByZW1haW5pbmcgbWVudGlvbnMgb2YgdXBkYXRlLWluZGV4IG9uIFBvcmNlbGFpbgorICAgIGRvY3VtZW50cyB0byBnaXQtYWRkL2dpdC1ybS4KKworICAtIFNvbWUgaTE4bi4qIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHdlcmUgaW5jb3JyZWN0bHkKKyAgICBkZXNjcmliZWQgYXMgY29yZS4qOyBmaXhlZC4KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LWFkZCBhbmQgZ2l0LXVwZGF0ZS1pbmRleCBvbiBhIGZpbGVzeXN0ZW0gb24gd2hpY2gKKyAgICBleGVjdXRhYmxlIGJpdHMgYXJlIHVucmVsaWFibGUgaW5jb3JyZWN0bHkgcmV1c2VkIHN0X21vZGUKKyAgICBiaXRzIGV2ZW4gd2hlbiB0aGUgcGF0aCBjaGFuZ2VkIGJldHdlZW4gc3ltbGluayBhbmQgcmVndWxhcgorICAgIGZpbGUuCisKKyAgLSBnaXQtZGFlbW9uIG1hcmtzIHRoZSBsaXN0ZW5pbmcgc29ja2V0cyB3aXRoIEZEX0NMT0VYRUMgc28KKyAgICB0aGF0IGl0IHdvbid0IGJlIGxlYWtlZCBpbnRvIHRoZSBjaGlsZHJlbi4KKworICAtIHNlZ2ZhdWx0IGZyb20gZ2l0LWJsYW1lIHdoZW4gdGhlIG1hbmRhdG9yeSBwYXRobmFtZQorICAgIHBhcmFtZXRlciB3YXMgbWlzc2luZyB3YXMgZml4ZWQ7IHVzYWdlKCkgbWVzc2FnZSBpcyBnaXZlbgorICAgIGluc3RlYWQuCisKKyAgLSBnaXQtcmV2LWxpc3QgZGlkIG5vdCByZWFkICRHSVRfRElSL2NvbmZpZyBmaWxlLCB3aGljaCBtZWFucworICAgIHRoYXQgZGlkIG5vdCBob25vciBpMThuLmxvZ291dHB1dGVuY29kaW5nIGNvcnJlY3RseS4KKworKiBUd2Vha3MKKworICAtIHNsaWRpbmcgbW1hcCgpIGluZWZmaWNpZW50bHkgbW1hcGVkIHRoZSBzYW1lIHJlZ2lvbiBvZiBhCisgICAgcGFja2ZpbGUgd2l0aCBhbiBhY2Nlc3MgcGF0dGVybiB0aGF0IHVzZWQgb2JqZWN0cyBpbiB0aGUKKyAgICByZXZlcnNlIG9yZGVyLiAgVGhpcyBoYXMgYmVlbiBtYWRlIG1vcmUgZWZmaWNpZW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA2MWU1MAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMi50eHQKQEAgLTAsMCArMSw2NSBAQAorR0lUIHYxLjUuMC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBBdXRvbWF0ZWQgbWVyZ2UgY29uZmxpY3QgaGFuZGxpbmcgd2hlbiBjaGFuZ2VzIHRvIHN5bWJvbGljCisgICAgbGlua3MgY29uZmxpY3RlZCB3ZXJlIGNvbXBsZXRlbHkgYnJva2VuLiAgVGhlIG1lcmdlLXJlc29sdmUKKyAgICBzdHJhdGVneSBjcmVhdGVkIGEgcmVndWxhciBmaWxlIHdpdGggY29uZmxpY3QgbWFya2VycyBpbiBpdAorICAgIGluIHBsYWNlIG9mIHRoZSBzeW1ib2xpYyBsaW5rLiAgVGhlIGRlZmF1bHQgc3RyYXRlZ3ksCisgICAgbWVyZ2UtcmVjdXJzaXZlIHdhcyBldmVuIG1vcmUgYnJva2VuLiAgSXQgcmVtb3ZlZCB0aGUgcGF0aAorICAgIHRoYXQgd2FzIHBvaW50ZWQgYXQgYnkgdGhlIHN5bWJvbGljIGxpbmsuICBCb3RoIG9mIHRoZXNlCisgICAgcHJvYmxlbXMgaGF2ZSBiZWVuIGZpeGVkLgorCisgIC0gJ2dpdCBkaWZmIG1haW50IG1hc3RlciBuZXh0JyBkaWQgbm90IGNvcnJlY3RseSBnaXZlIGNvbWJpbmVkCisgICAgZGlmZiBhY3Jvc3MgdGhyZWUgdHJlZXMuCisKKyAgLSAnZ2l0IGZhc3QtaW1wb3J0JyBwb3J0YWJpbGl0eSBmaXggZm9yIFNvbGFyaXMuCisKKyAgLSAnZ2l0IHNob3ctcmVmIC0tdmVyaWZ5JyB3aXRob3V0IGFyZ3VtZW50cyBkaWQgbm90IGVycm9yIG91dAorICAgIGJ1dCBzZWdmYXVsdGVkLgorCisgIC0gJ2dpdCBkaWZmIDp0cmFja2VkLWZpbGUgYHB3ZGAvYW4tdW50cmFja2VkLWZpbGUnIGdhdmUgYW4gZXh0cmEKKyAgICBzbGFzaGVzIGFmdGVyIGEvIGFuZCBiLy4KKworICAtICdnaXQgZm9ybWF0LXBhdGNoJyBwcm9kdWNlZCB0b28gbG9uZyBmaWxlbmFtZXMgaWYgdGhlIGNvbW1pdAorICAgIG1lc3NhZ2UgaGFkIHRvbyBsb25nIGxpbmUgYXQgdGhlIGJlZ2lubmluZy4KKworICAtIFJ1bm5pbmcgJ21ha2UgYWxsJyBhbmQgdGhlbiB3aXRob3V0IGNoYW5naW5nIGFueXRoaW5nCisgICAgcnVubmluZyAnbWFrZSBpbnN0YWxsJyBzdGlsbCByZWJ1aWx0IHNvbWUgZmlsZXMuICBUaGlzCisgICAgd2FzIGluY29udmVuaWVudCB3aGVuIGJ1aWxkaW5nIGFzIHlvdXJzZWxmIGFuZCB0aGVuCisgICAgaW5zdGFsbGluZyBhcyByb290IChlc3BlY2lhbGx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZQorICAgIGRpcmVjdG9yeSBpcyBvbiBORlMgYW5kIHJvb3QgaXMgbWFwcGVkIHRvIG5vYm9keSkuCisKKyAgLSAnZ2l0LXJlcmVyZScgZmFpbGVkIHRvIGRlYWwgd2l0aCB0d28gdW5jb25mbGljdGVkIHBhdGhzIHRoYXQKKyAgICBzb3J0ZWQgbmV4dCB0byBlYWNoIG90aGVyLgorCisgIC0gJ2dpdC1yZXJlcmUnIGF0dGVtcHRlZCB0byBvcGVuKDIpIGEgc3ltbGluayBhbmQgZmFpbGVkIGlmCisgICAgdGhlcmUgd2FzIGEgY29uZmxpY3QuICBTaW5jZSBhIGNvbmZsaWN0aW5nIGNoYW5nZSB0byBhCisgICAgc3ltbGluayB3b3VsZCBub3QgYmVuZWZpdCBmcm9tIHJlcmVyZSBhbnl3YXksIHRoZSBjb21tYW5kCisgICAgbm93IGlnbm9yZXMgY29uZmxpY3RpbmcgY2hhbmdlcyB0byBzeW1saW5rcy4KKworICAtICdnaXQtcmVwYWNrJyBkaWQgbm90IGxpa2UgdG8gcGFzcyBtb3JlIHRoYW4gNjQgYXJndW1lbnRzCisgICAgaW50ZXJuYWxseSB0byB1bmRlcmx5aW5nICdyZXYtbGlzdCcgbG9naWMsIHdoaWNoIG1hZGUgaXQKKyAgICBpbXBvc3NpYmxlIHRvIHJlcGFjayBhZnRlciBhY2N1bXVsYXRpbmcgbWFueSAoc21hbGwpIHBhY2tzCisgICAgaW4gdGhlIHJlcG9zaXRvcnkuCisKKyAgLSAnZ2l0LWRpZmYnIHRvIHJldmlldyB0aGUgY29tYmluZWQgZGlmZiBkdXJpbmcgYSBjb25mbGljdGVkCisgICAgbWVyZ2Ugd2VyZSBub3QgcmVhZGluZyB0aGUgd29ya2luZyB0cmVlIHZlcnNpb24gY29ycmVjdGx5CisgICAgd2hlbiBjaGFuZ2VzIHRvIGEgc3ltYm9saWMgbGluayBjb25mbGljdGVkLiAgSXQgc2hvdWxkIGhhdmUKKyAgICByZWFkIHRoZSBkYXRhIHVzaW5nIHJlYWRsaW5rKDIpIGJ1dCByZWFkIGZyb20gdGhlIHJlZ3VsYXIKKyAgICBmaWxlIHRoZSBzeW1ib2xpYyBsaW5rIHBvaW50ZWQgYXQuCisKKyAgLSAnZ2l0LXJlbW90ZScgZGlkIG5vdCBsaWtlIHBlcmlvZCBpbiBhIHJlbW90ZSdzIG5hbWUuCisKKyogRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyAgLSBhZGRlZCBhbmQgY2xhcmlmaWVkIGNvcmUuYmFyZSwgY29yZS5sZWdhY3loZWFkZXJzIGNvbmZpZ3VyYXRpb25zLgorCisgIC0gdXBkYXRlZCAiZ2l0LWNsb25lIC0tZGVwdGgiIGRvY3VtZW50YXRpb24uCisKKworKiBBc3NvcnRlZCBnaXQtZ3VpIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1MDBmOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuMy50eHQKQEAgLTAsMCArMSw1OCBAQAorR0lUIHYxLjUuMC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSAnZ2l0LmVsJyBob25vcnMgdGhlIGNvbW1pdCBjb2Rpbmcgc3lzdGVtIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24uCisKKyAgLSAnYmxhbWV2aWV3JyBpbiBjb250cmliLyBjb3JyZWN0bHkgZGlncyBkZWVwZXIgd2hlbiBhIGxpbmUgaXMKKyAgICBjbGlja2VkLgorCisgIC0gJ2h0dHAtcHVzaCcgY29ycmVjdGx5IG1ha2VzIHN1cmUgdGhlIHJlbW90ZSBzaWRlIGhhcyBsZWFkaW5nCisgICAgcGF0aC4gIEVhcmxpZXIgaXQgc3RhcnRlZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwYXRoLCBhbmQKKyAgICBpbmNvcnJlY3RseS4KKworICAtICdnaXQtbWVyZ2UnIGRpZCBub3QgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyB3aGVuIHRoZQorICAgIHdvcmtpbmcgdHJlZSB3YXMgZGlydHkgYW5kIGNhbm5vdCBmYXN0IGZvcndhcmQuICBJdCBkb2VzCisgICAgbm93LgorCisgIC0gJ2N2c2V4cG9ydGNvbW1pdCcgZG9lcyBub3QgbG9zZSB5ZXQtdG8tYmUtdXNlZCBtZXNzYWdlIGZpbGUuCisKKyAgLSBpbnQtdnMtc2l6ZV90IHR5cGVmaXggd2hlbiBydW5uaW5nIGNvbWJpbmVkIGRpZmYgb24gZmlsZXMKKyAgICBvdmVyIDJHQiBsb25nLgorCisgIC0gJ2dpdCBhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAnIHNob3VsZCBub3QgdG91Y2ggdW5tb2RpZmllZAorICAgIGxpbmVzLgorCisgIC0gJ2dpdC1tYWlsaW5mbycgY2hva2Ugd2hlbiBhIGxvZ2ljYWwgaGVhZGVyIGxpbmUgd2FzIHRvbyBsb25nLgorCisgIC0gJ2dpdCBzaG93IEEuLkInIGRpZCBub3QgZXJyb3Igb3V0LiAgTmVnYXRpdmUgcmVmICgibm90IEEiIGluCisgICAgdGhpcyBleGFtcGxlKSBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciB0aGUgcHVycG9zZSBvZiB0aGUKKyAgICBjb21tYW5kLCBzbyBub3cgaXQgZXJyb3JzIG91dC4KKworICAtICdnaXQgZm10LW1lcmdlLW1zZyAtLWZpbGUnIHdpdGhvdXQgZmlsZSBwYXJhbWV0ZXIgZGlkIG5vdAorICAgIGNvcnJlY3RseSBlcnJvciBvdXQuCisKKyAgLSAnZ2l0IGFyY2hpbXBvcnQnIGJhcmZlZCB1cG9uIGVuY291bnRlcmluZyBhIGNvbW1pdCB3aXRob3V0CisgICAgc3VtbWFyeS4KKworICAtICdnaXQgaW5kZXgtcGFjaycgZGlkIG5vdCBwcm90ZWN0IGl0c2VsZiBmcm9tIGdldHRpbmcgYSBzaG9ydAorICAgIHJlYWQgb3V0IG9mIHByZWFkKDIpLgorCisgIC0gJ2dpdCBodHRwLXB1c2gnIGhhZCBhIGZldyBidWZmZXIgb3ZlcnJ1bnMuCisKKyAgLSBCdWlsZCBkZXBlbmRlbmN5IGZpeGVzIHRvIHJlYnVpbGQgZmV0Y2gubyB3aGVuIG90aGVyIGhlYWRlcnMKKyAgICBjaGFuZ2UuCisKKyogRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyAgLSB1c2VyLW1hbnVhbCB1cGRhdGVzLgorCisgIC0gT3B0aW9ucyB0byAnZ2l0IHJlbW90ZSBhZGQnIHdlcmUgZGVzY3JpYmVkIGluc3VmZmljaWVudGx5LgorCisgIC0gQ29uZmlndXJhdGlvbiBmb3JtYXQuc3VmZml4IHdhcyBub3QgZG9jdW1lbnRlZC4KKworICAtIE90aGVyIGZvcm1hdHRpbmcgYW5kIHNwZWxsaW5nIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlZmE1ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNC50eHQKQEAgLTAsMCArMSwyMiBAQAorR0lUIHYxLjUuMC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBnaXQuZWwgZG9lcyBub3QgYWRkIGR1cGxpY2F0ZSBzaWduLW9mZiBsaW5lcy4KKworICAtIGdpdC1jb21taXQgc2hvd3MgdGhlIGZ1bGwgc3RhdCBvZiB0aGUgcmVzdWx0aW5nIGNvbW1pdCwgbm90CisgICAganVzdCBhYm91dCB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGVuIHJ1biBmcm9tCisgICAgYSBzdWJkaXJlY3RvcnkuCisKKyAgLSAiZ2l0LWNoZWNrb3V0IC1tICdAezggaG91cnMgYWdvfSciIGhhZCBhIGZ1bm55IGZhaWx1cmUgZnJvbQorICAgIGV2YWw7IGZpeGVkLgorCisgIC0gZ2l0LWd1aSB1cGRhdGVzLgorCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisqIFVzZXIgbWFudWFsIHVwZGF0ZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZWMzZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjUudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0dJVCB2MS41LjAuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjAuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LW1lcmdlIChoZW5jZSBnaXQtcHVsbCkgZGlkIG5vdCByZWZ1c2UgZmFzdC1mb3J3YXJkaW5nCisgICAgd2hlbiB0aGUgd29ya2luZyB0cmVlIGhhZCBsb2NhbCBjaGFuZ2VzIHRoYXQgd291bGQgaGF2ZQorICAgIGNvbmZsaWN0ZWQgd2l0aCBpdC4KKworICAtIGdpdC5lbCBkb2VzIG5vdCBhZGQgZHVwbGljYXRlIHNpZ24tb2ZmIGxpbmVzLgorCisgIC0gZ2l0LWNvbW1pdCBzaG93cyB0aGUgZnVsbCBzdGF0IG9mIHRoZSByZXN1bHRpbmcgY29tbWl0LCBub3QKKyAgICBqdXN0IGFib3V0IHRoZSBmaWxlcyBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdoZW4gcnVuIGZyb20KKyAgICBhIHN1YmRpcmVjdG9yeS4KKworICAtICJnaXQtY2hlY2tvdXQgLW0gJ0B7OCBob3VycyBhZ299JyIgaGFkIGEgZnVubnkgZmFpbHVyZSBmcm9tCisgICAgZXZhbDsgZml4ZWQuCisKKyAgLSBnaXQtZ3VpIHVwZGF0ZXMuCisKKyogRG9jdW1lbnRhdGlvbiB1cGRhdGVzCisKKyogVXNlciBtYW51YWwgdXBkYXRlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAyMDE1YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNi50eHQKQEAgLTAsMCArMSwyMSBAQAorR0lUIHYxLjUuMC42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMC41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBhIGhhbmRmdWwgc21hbGwgZml4ZXMgdG8gZ2l0d2ViLgorCisgIC0gYnVpbGQgcHJvY2VkdXJlIGZvciB1c2VyLW1hbnVhbCBpcyBmaXhlZCBub3QgdG8gcmVxdWlyZSBsb2NhbGx5CisgICAgaW5zdGFsbGVkIHN0eWxlc2hlZXRzLgorCisgIC0gImdpdCBjb21taXQgJHBhdGhzIiBvbiBwYXRocyB3aG9zZSBlYXJsaWVyIGNvbnRlbnRzIHdlcmUKKyAgICBhbHJlYWR5IHVwZGF0ZWQgaW4gdGhlIGluZGV4IHdlcmUgZmFpbGluZyBvdXQuCisKKyogRG9jdW1lbnRhdGlvbgorCisgIC0gdXNlci1tYW51YWwgaGFzIGJldHRlciBjcm9zcyByZWZlcmVuY2VzLgorCisgIC0gZ2l0d2ViIGluc3RhbGxhdGlvbi9kZXBsb3ltZW50IHByb2NlZHVyZSBpcyBub3cgZG9jdW1lbnRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjAuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MGFkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLjcudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dJVCB2MS41LjAuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjAuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LXVwbG9hZC1wYWNrIGZhaWxlZCB0byBjbG9zZSB1bnVzZWQgcGlwZSBlbmRzLCByZXN1bHRpbmcKKyAgICBpbiBtYW55IHpvbWJpZXMgdG8gaGFuZyBhcm91bmQuCisKKyAgLSBnaXQtcmVyZXJlIHdhcyByZWNvcmRpbmcgdGhlIGNvbnRlbnRzIG9mIGVhcmxpZXIgaHVua3MKKyAgICBkdXBsaWNhdGVkIGluIGxhdGVyIGh1bmtzLiAgVGhpcyBwcmV2ZW50ZWQgcmVzb2x2aW5nIHRoZSBzYW1lCisgICAgY29uZmxpY3Qgd2hlbiBwZXJmb3JtaW5nIHRoZSBzYW1lIG1lcmdlIHRoZSBvdGhlciB3YXkgYXJvdW5kLgorCisqIERvY3VtZW50YXRpb24KKworICAtIGEgZmV3IGRvY3VtZW50YXRpb24gZml4ZXMgZnJvbSBEZWJpYW4gcGFja2FnZSBtYWludGFpbmVyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWY0YmRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMC50eHQKQEAgLTAsMCArMSw0NjkgQEAKK0dJVCB2MS41LjAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK09sZCBuZXdzCistLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gaXMgZm9yIHBlb3BsZSB3aG8gYXJlIHVwZ3JhZGluZyBmcm9tIGFuY2llbnQKK3ZlcnNpb25zIG9mIGdpdC4gIEFsdGhvdWdoIGFsbCBvZiB0aGUgY2hhbmdlcyBpbiB0aGlzIHNlY3Rpb24KK2hhcHBlbmVkIGJlZm9yZSB0aGUgY3VycmVudCB2MS40LjQgcmVsZWFzZSwgdGhleSBhcmUgc3VtbWFyaXplZAoraGVyZSBpbiB0aGUgdjEuNS4wIHJlbGVhc2Ugbm90ZXMgZm9yIHBlb3BsZSB3aG8gc2tpcHBlZCBlYXJsaWVyCit2ZXJzaW9ucy4KKworQXMgb2YgZ2l0IHYxLjUuMCB0aGVyZSBhcmUgc29tZSBvcHRpb25hbCBmZWF0dXJlcyB0aGF0IGNoYW5nZXMKK3RoZSByZXBvc2l0b3J5IHRvIGFsbG93IGRhdGEgdG8gYmUgc3RvcmVkIGFuZCB0cmFuc2ZlcnJlZCBtb3JlCitlZmZpY2llbnRseS4gIFRoZXNlIGZlYXR1cmVzIGFyZSBub3QgZW5hYmxlZCBieSBkZWZhdWx0LCBhcyB0aGV5Cit3aWxsIG1ha2UgdGhlIHJlcG9zaXRvcnkgdW51c2FibGUgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBnaXQuCitTcGVjaWZpY2FsbHksIHRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6CisKKyAtIFRoZXJlIGlzIGEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjb3JlLmxlZ2FjeWhlYWRlcnMgdGhhdAorICAgY2hhbmdlcyB0aGUgZm9ybWF0IG9mIGxvb3NlIG9iamVjdHMgc28gdGhhdCB0aGV5IGFyZSBtb3JlCisgICBlZmZpY2llbnQgdG8gcGFjayBhbmQgdG8gc2VuZCBvdXQgb2YgdGhlIHJlcG9zaXRvcnkgb3ZlciBnaXQKKyAgIG5hdGl2ZSBwcm90b2NvbCwgc2luY2UgdjEuNC4yLiAgSG93ZXZlciwgbG9vc2Ugb2JqZWN0cworICAgd3JpdHRlbiBpbiB0aGUgbmV3IGZvcm1hdCBjYW5ub3QgYmUgcmVhZCBieSBnaXQgb2xkZXIgdGhhbgorICAgdGhhdCB2ZXJzaW9uOyBwZW9wbGUgZmV0Y2hpbmcgZnJvbSB5b3VyIHJlcG9zaXRvcnkgdXNpbmcKKyAgIG9sZGVyIGNsaWVudHMgb3ZlciBkdW1iIHRyYW5zcG9ydHMgKGUuZy4gaHR0cCkgdXNpbmcgb2xkZXIKKyAgIHZlcnNpb25zIG9mIGdpdCB3aWxsIGFsc28gYmUgYWZmZWN0ZWQuCisKKyAgIFRvIGxldCBnaXQgdXNlIHRoZSBuZXcgbG9vc2Ugb2JqZWN0IGZvcm1hdCwgeW91IGhhdmUgdG8KKyAgIHNldCBjb3JlLmxlZ2FjeWhlYWRlcnMgdG8gZmFsc2UuCisKKyAtIFNpbmNlIHYxLjQuMywgY29uZmlndXJhdGlvbiByZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IGFsbG93cworICAgcGFja2ZpbGUgdG8gYmUgY3JlYXRlZCBpbiBtb3JlIHNwYWNlIGVmZmljaWVudCBmb3JtYXQsIHdoaWNoCisgICBjYW5ub3QgYmUgcmVhZCBieSBnaXQgb2xkZXIgdGhhbiB0aGF0IHZlcnNpb24uCisKKyAgIFRvIGxldCBnaXQgdXNlIHRoZSBuZXcgZm9ybWF0IGZvciBwYWNrZmlsZXMsIHlvdSBoYXZlIHRvCisgICBzZXQgcmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCB0byB0cnVlLgorCitUaGUgYWJvdmUgdHdvIG5ldyBmZWF0dXJlcyBhcmUgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgeW91CitoYXZlIHRvIGV4cGxpY2l0bHkgYXNrIGZvciB0aGVtLCBiZWNhdXNlIHRoZXkgbWFrZSByZXBvc2l0b3JpZXMKK3VucmVhZGFibGUgYnkgb2xkZXIgdmVyc2lvbnMgb2YgZ2l0LCBhbmQgaW4gdjEuNS4wIHdlIHN0aWxsIGRvCitub3QgZW5hYmxlIHRoZW0gYnkgZGVmYXVsdCBmb3IgdGhlIHNhbWUgcmVhc29uLiAgV2Ugd2lsbCBjaGFuZ2UKK3RoaXMgZGVmYXVsdCBwcm9iYWJseSAxIHllYXIgYWZ0ZXIgMS40LjIncyByZWxlYXNlLCB3aGVuIGl0IGlzCityZWFzb25hYmxlIHRvIGV4cGVjdCBldmVyeWJvZHkgdG8gaGF2ZSBuZXcgZW5vdWdoIHZlcnNpb24gb2YKK2dpdC4KKworIC0gJ2dpdCBwYWNrLXJlZnMnIGFwcGVhcmVkIGluIHYxLjQuNDsgdGhpcyBjb21tYW5kIGFsbG93cyB0YWdzCisgICB0byBiZSBhY2Nlc3NlZCBtdWNoIG1vcmUgZWZmaWNpZW50bHkgdGhhbiB0aGUgdHJhZGl0aW9uYWwKKyAgICdvbmUtZmlsZS1wZXItdGFnJyBmb3JtYXQuICBPbGRlciBnaXQtbmF0aXZlIGNsaWVudHMgY2FuCisgICBzdGlsbCBmZXRjaCBmcm9tIGEgcmVwb3NpdG9yeSB0aGF0IHBhY2tlZCBhbmQgcHJ1bmVkIHJlZnMKKyAgICh0aGUgc2VydmVyIHNpZGUgbmVlZHMgdG8gcnVuIHRoZSB1cC10by1kYXRlIHZlcnNpb24gb2YgZ2l0KSwKKyAgIGJ1dCBvbGRlciBkdW1iIHRyYW5zcG9ydHMgY2Fubm90LiAgUGFja2luZyBvZiByZWZzIGlzIGRvbmUgYnkKKyAgIGFuIGV4cGxpY2l0IHVzZXIgYWN0aW9uLCBlaXRoZXIgYnkgdXNlIG9mICJnaXQgcGFjay1yZWZzCisgICAtLXBydW5lIiBjb21tYW5kIG9yIGJ5IHVzZSBvZiAiZ2l0IGdjIiBjb21tYW5kLgorCisgLSAnZ2l0IC1wJyB0byBwYWdpbmF0ZSBhbnl0aGluZyAtLSBtYW55IGNvbW1hbmRzIGRvIHBhZ2luYXRpb24KKyAgIGJ5IGRlZmF1bHQgb24gYSB0dHkuICBJbnRyb2R1Y2VkIGJldHdlZW4gdjEuNC4xIGFuZCB2MS40LjI7CisgICB0aGlzIG1heSBzdXJwcmlzZSBvbGQgdGltZXJzLgorCisgLSAnZ2l0IGFyY2hpdmUnIHN1cGVyc2VkZWQgJ2dpdCB0YXItdHJlZScgaW4gdjEuNC4zOworCisgLSAnZ2l0IGN2c3NlcnZlcicgd2FzIG5ldyBpbnZlbnRpb24gaW4gdjEuMy4wOworCisgLSAnZ2l0IHJlcG8tY29uZmlnJywgJ2dpdCBncmVwJywgJ2dpdCByZWJhc2UnIGFuZCAnZ2l0aycgd2VyZQorICAgc2VyaW91c2x5IGVuaGFuY2VkIGR1cmluZyB2MS40LjAgdGltZXBlcmlvZC4KKworIC0gJ2dpdHdlYicgYmVjYW1lIHBhcnQgb2YgZ2l0LmdpdCBkdXJpbmcgdjEuNC4wIHRpbWVwZXJpb2QgYW5kCisgICBzZXJpb3VzbHkgbW9kaWZpZWQgc2luY2UgdGhlbi4KKworIC0gcmVmbG9nIGlzIGFuIHYxLjQuMCBpbnZlbnRpb24uICBUaGlzIGFsbG93cyB5b3UgdG8gbmFtZSBhCisgICByZXZpc2lvbiB0aGF0IGEgYnJhbmNoIHVzZWQgdG8gYmUgYXQgKGUuZy4gImdpdCBkaWZmCisgICBtYXN0ZXJAe3llc3RlcmRheX0gbWFzdGVyIiBhbGxvd3MgeW91IHRvIHNlZSBjaGFuZ2VzIHNpbmNlCisgICB5ZXN0ZXJkYXkncyB0aXAgb2YgdGhlIGJyYW5jaCkuCisKKworVXBkYXRlcyBpbiB2MS41LjAgc2luY2UgdjEuNC40IHNlcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEluZGV4IG1hbmlwdWxhdGlvbgorCisgLSBnaXQtYWRkIGlzIHRvIGFkZCBjb250ZW50cyB0byB0aGUgaW5kZXggKGFrYSAic3RhZ2luZyBhcmVhIgorICAgZm9yIHRoZSBuZXh0IGNvbW1pdCksIHdoZXRoZXIgdGhlIGZpbGUgdGhlIGNvbnRlbnRzIGhhcHBlbiB0bworICAgYmUgaXMgYW4gZXhpc3Rpbmcgb25lIG9yIGEgbmV3bHkgY3JlYXRlZCBvbmUuCisKKyAtIGdpdC1hZGQgd2l0aG91dCBhbnkgYXJndW1lbnQgZG9lcyBub3QgYWRkIGV2ZXJ5dGhpbmcKKyAgIGFueW1vcmUuICBVc2UgJ2dpdC1hZGQgLicgaW5zdGVhZC4gIEFsc28geW91IGNhbiBhZGQKKyAgIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIHdpdGggYW4gLWYgb3B0aW9uLgorCisgLSBnaXQtYWRkIHRyaWVzIHRvIGJlIG1vcmUgZnJpZW5kbHkgdG8gdXNlcnMgYnkgb2ZmZXJpbmcgYW4KKyAgIGludGVyYWN0aXZlIG1vZGUgKCJnaXQtYWRkIC1pIikuCisKKyAtIGdpdC1jb21taXQgPHBhdGg+IHVzZWQgdG8gcmVmdXNlIHRvIGNvbW1pdCBpZiA8cGF0aD4gd2FzCisgICBkaWZmZXJlbnQgYmV0d2VlbiBIRUFEIGFuZCB0aGUgaW5kZXggKGkuZS4gdXBkYXRlLWluZGV4IHdhcworICAgdXNlZCBvbiBpdCBlYXJsaWVyKS4gIFRoaXMgY2hlY2sgd2FzIHJlbW92ZWQuCisKKyAtIGdpdC1ybSBpcyBtdWNoIHNhbmVyIGFuZCBzYWZlci4gIEl0IGlzIHVzZWQgdG8gcmVtb3ZlIHBhdGhzCisgICBmcm9tIGJvdGggdGhlIGluZGV4IGZpbGUgYW5kIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBtYWtlcyBzdXJlCisgICB5b3UgYXJlIG5vdCBsb3NpbmcgYW55IGxvY2FsIG1vZGlmaWNhdGlvbiBiZWZvcmUgZG9pbmcgc28uCisKKyAtIGdpdC1yZXNldCA8dHJlZT4gPHBhdGhzPi4uLiBjYW4gYmUgdXNlZCB0byByZXZlcnQgaW5kZXgKKyAgIGVudHJpZXMgZm9yIHNlbGVjdGVkIHBhdGhzLgorCisgLSBnaXQtdXBkYXRlLWluZGV4IGlzIG11Y2ggbGVzcyB2aXNpYmxlLiAgTWFueSBzdWdnZXN0aW9ucyB0bworICAgdXNlIHRoZSBjb21tYW5kIGluIGdpdCBvdXRwdXQgYW5kIGRvY3VtZW50YXRpb24gaGF2ZSBub3cgYmVlbgorICAgcmVwbGFjZWQgYnkgc2ltcGxlciBjb21tYW5kcyBzdWNoIGFzICJnaXQgYWRkIiBvciAiZ2l0IHJtIi4KKworCisqIFJlcG9zaXRvcnkgbGF5b3V0IGFuZCBvYmplY3RzIHRyYW5zZmVyCisKKyAtIFRoZSBkYXRhIGZvciBvcmlnaW4gcmVwb3NpdG9yeSBpcyBzdG9yZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24KKyAgIGZpbGUgJEdJVF9ESVIvY29uZmlnLCBub3QgaW4gJEdJVF9ESVIvcmVtb3Rlcy8sIGZvciBuZXdseQorICAgY3JlYXRlZCBjbG9uZXMuICBUaGUgbGF0dGVyIGlzIHN0aWxsIHN1cHBvcnRlZCBhbmQgdGhlcmUgaXMKKyAgIG5vIG5lZWQgdG8gY29udmVydCB5b3VyIGV4aXN0aW5nIHJlcG9zaXRvcnkgaWYgeW91IGFyZQorICAgYWxyZWFkeSBjb21mb3J0YWJsZSB3aXRoIHlvdXIgd29ya2Zsb3cgd2l0aCB0aGUgbGF5b3V0LgorCisgLSBnaXQtY2xvbmUgYWx3YXlzIHVzZXMgd2hhdCBpcyBrbm93biBhcyAic2VwYXJhdGUgcmVtb3RlIgorICAgbGF5b3V0IGZvciBhIG5ld2x5IGNyZWF0ZWQgcmVwb3NpdG9yeSB3aXRoIGEgd29ya2luZyB0cmVlLgorCisgICBBIHJlcG9zaXRvcnkgd2l0aCB0aGUgc2VwYXJhdGUgcmVtb3RlIGxheW91dCBzdGFydHMgd2l0aCBvbmx5CisgICBvbmUgZGVmYXVsdCBicmFuY2gsICdtYXN0ZXInLCB0byBiZSB1c2VkIGZvciB5b3VyIG93bgorICAgZGV2ZWxvcG1lbnQuICBVbmxpa2UgdGhlIHRyYWRpdGlvbmFsIGxheW91dCB0aGF0IGNvcGllZCBhbGwKKyAgIHRoZSB1cHN0cmVhbSBicmFuY2hlcyBpbnRvIHlvdXIgYnJhbmNoIG5hbWVzcGFjZSAod2hpbGUKKyAgIHJlbmFtaW5nIHRoZWlyICdtYXN0ZXInIHRvIHlvdXIgJ29yaWdpbicpLCB0aGUgbmV3IGxheW91dAorICAgcHV0cyB1cHN0cmVhbSBicmFuY2hlcyBpbnRvIGxvY2FsICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCisgICB3aXRoIHRoZWlyIG93biBuYW1lc3BhY2UuIFRoZXNlIGNhbiBiZSByZWZlcmVuY2VkIHdpdGggbmFtZXMKKyAgIHN1Y2ggYXMgIm9yaWdpbi8kdXBzdHJlYW1fYnJhbmNoX25hbWUiIGFuZCBhcmUgc3RvcmVkIGluCisgICAuZ2l0L3JlZnMvcmVtb3RlcyByYXRoZXIgdGhhbiAuZ2l0L3JlZnMvaGVhZHMgd2hlcmUgbm9ybWFsCisgICBicmFuY2hlcyBhcmUgc3RvcmVkLgorCisgICBUaGlzIGxheW91dCBrZWVwcyB5b3VyIG93biBicmFuY2ggbmFtZXNwYWNlIGxlc3MgY2x1dHRlcmVkLAorICAgYXZvaWRzIG5hbWUgY29sbGlzaW9uIHdpdGggeW91ciB1cHN0cmVhbSwgbWFrZXMgaXQgcG9zc2libGUKKyAgIHRvIGF1dG9tYXRpY2FsbHkgdHJhY2sgbmV3IGJyYW5jaGVzIGNyZWF0ZWQgYXQgdGhlIHJlbW90ZQorICAgYWZ0ZXIgeW91IGNsb25lIGZyb20gaXQsIGFuZCBtYWtlcyBpdCBlYXNpZXIgdG8gaW50ZXJhY3Qgd2l0aAorICAgbW9yZSB0aGFuIG9uZSByZW1vdGUgcmVwb3NpdG9yeSAoeW91IGNhbiB1c2UgImdpdCByZW1vdGUiIHRvCisgICBhZGQgb3RoZXIgcmVwb3NpdG9yaWVzIHRvIHRyYWNrKS4gIFRoZXJlIG1pZ2h0IGJlIHNvbWUKKyAgIHN1cnByaXNlczoKKworICAgKiAnZ2l0IGJyYW5jaCcgZG9lcyBub3Qgc2hvdyB0aGUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaGVzLgorICAgICBJdCBvbmx5IGxpc3RzIHlvdXIgb3duIGJyYW5jaGVzLiAgVXNlICctcicgb3B0aW9uIHRvIHZpZXcKKyAgICAgdGhlIHRyYWNraW5nIGJyYW5jaGVzLgorCisgICAqIElmIHlvdSBhcmUgZm9ya2luZyBvZmYgb2YgYSBicmFuY2ggb2J0YWluZWQgZnJvbSB0aGUKKyAgICAgdXBzdHJlYW0sIHlvdSB3b3VsZCBoYXZlIGRvbmUgc29tZXRoaW5nIGxpa2UgJ2dpdCBicmFuY2gKKyAgICAgbXktbmV4dCBuZXh0JywgYmVjYXVzZSB0cmFkaXRpb25hbCBsYXlvdXQgZHJvcHBlZCB0aGUKKyAgICAgdHJhY2tpbmcgYnJhbmNoICduZXh0JyBpbnRvIHlvdXIgb3duIGJyYW5jaCBuYW1lc3BhY2UuCisgICAgIFdpdGggdGhlIHNlcGFyYXRlIHJlbW90ZSBsYXlvdXQsIHlvdSBzYXkgJ2dpdCBicmFuY2ggbmV4dAorICAgICBvcmlnaW4vbmV4dCcsIHdoaWNoIGFsbG93cyB5b3UgdG8gdXNlIHRoZSBtYXRjaGluZyBuYW1lCisgICAgICduZXh0JyBmb3IgeW91ciBvd24gYnJhbmNoLiAgSXQgYWxzbyBhbGxvd3MgeW91IHRvIHRyYWNrIGEKKyAgICAgcmVtb3RlIG90aGVyIHRoYW4gJ29yaWdpbicgKGkuZS4gd2hlcmUgeW91IGluaXRpYWxseSBjbG9uZWQKKyAgICAgZnJvbSkgYW5kIGZvcmsgb2ZmIG9mIGEgYnJhbmNoIGZyb20gdGhlcmUgdGhlIHNhbWUgd2F5CisgICAgIChlLmcuICJnaXQgYnJhbmNoIG1pbmd3IGo2dC9tYXN0ZXIiKS4KKworICAgUmVwb3NpdG9yaWVzIGluaXRpYWxpemVkIHdpdGggdGhlIHRyYWRpdGlvbmFsIGxheW91dCBjb250aW51ZQorICAgdG8gd29yay4KKworIC0gTmV3IGJyYW5jaGVzIHRoYXQgYXBwZWFyIG9uIHRoZSBvcmlnaW4gc2lkZSBhZnRlciBhIGNsb25lIGlzCisgICBtYWRlIGFyZSBhbHNvIHRyYWNrZWQgYXV0b21hdGljYWxseS4gIFRoaXMgaXMgZG9uZSB3aXRoIGFuCisgICB3aWxkY2FyZCByZWZzcGVjICJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiwgd2hpY2gKKyAgIG9sZGVyIGdpdCBkb2VzIG5vdCB1bmRlcnN0YW5kLCBzbyBpZiB5b3UgY2xvbmUgd2l0aCAxLjUuMCwKKyAgIHlvdSB3b3VsZCBuZWVkIHRvIGRvd25ncmFkZSByZW1vdGUuKi5mZXRjaCBpbiB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBzcGVjaWZ5IGVhY2ggYnJhbmNoIHlvdSBhcmUgaW50ZXJlc3RlZAorICAgaW4gaW5kaXZpZHVhbGx5IGlmIHlvdSBwbGFuIHRvIGZldGNoIGludG8gdGhlIHJlcG9zaXRvcnkgd2l0aAorICAgb2xkZXIgdmVyc2lvbnMgb2YgZ2l0IChidXQgd2h5IHdvdWxkIHlvdT8pLgorCisgLSBTaW1pbGFybHksIHdpbGRjYXJkIHJlZnNwZWMgInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbWUvKiIKKyAgIGNhbiBiZSBnaXZlbiB0byAiZ2l0LXB1c2giIGNvbW1hbmQgdG8gdXBkYXRlIHRoZSB0cmFja2luZworICAgYnJhbmNoZXMgdGhhdCBpcyB1c2VkIHRvIHRyYWNrIHRoZSByZXBvc2l0b3J5IHlvdSBhcmUgcHVzaGluZworICAgZnJvbSBvbiB0aGUgcmVtb3RlIHNpZGUuCisKKyAtIGdpdC1icmFuY2ggYW5kIGdpdC1zaG93LWJyYW5jaCBrbm93IHJlbW90ZSB0cmFja2luZyBicmFuY2hlcworICAgKHVzZSB0aGUgY29tbWFuZCBsaW5lIHN3aXRjaCAiLXIiIHRvIGxpc3Qgb25seSB0cmFja2VkIGJyYW5jaGVzKS4KKworIC0gZ2l0LXB1c2ggY2FuIG5vdyBiZSB1c2VkIHRvIGRlbGV0ZSBhIHJlbW90ZSBicmFuY2ggb3IgYSB0YWcuCisgICBUaGlzIHJlcXVpcmVzIHRoZSB1cGRhdGVkIGdpdCBvbiB0aGUgcmVtb3RlIHNpZGUgKHVzZSAiZ2l0CisgICBwdXNoIDxyZW1vdGU+IDpyZWZzL2hlYWRzLzxicmFuY2g+IiB0byBkZWxldGUgImJyYW5jaCIpLgorCisgLSBnaXQtcHVzaCBtb3JlIGFnZ3Jlc3NpdmVseSBrZWVwcyB0aGUgdHJhbnNmZXJyZWQgb2JqZWN0cworICAgcGFja2VkLiAgRWFybGllciB3ZSByZWNvbW1lbmRlZCB0byBtb25pdG9yIGFtb3VudCBvZiBsb29zZQorICAgb2JqZWN0cyBhbmQgcmVwYWNrIHJlZ3VsYXJseSwgYnV0IHlvdSBzaG91bGQgcmVwYWNrIHdoZW4geW91CisgICBhY2N1bXVsYXRlZCB0b28gbWFueSBzbWFsbCBwYWNrcyB0aGlzIHdheSBhcyB3ZWxsLiAgVXBkYXRlZAorICAgZ2l0LWNvdW50LW9iamVjdHMgaGVscHMgeW91IHdpdGggdGhpcy4KKworIC0gZ2l0LWZldGNoIGFsc28gbW9yZSBhZ2dyZXNzaXZlbHkga2VlcHMgdGhlIHRyYW5zZmVycmVkIG9iamVjdHMKKyAgIHBhY2tlZC4gIFRoaXMgYmVoYXZpb3Igb2YgZ2l0LXB1c2ggYW5kIGdpdC1mZXRjaCBjYW4gYmUKKyAgIHR3ZWFrZWQgd2l0aCBhIHNpbmdsZSBjb25maWd1cmF0aW9uIHRyYW5zZmVyLnVucGFja2xpbWl0IChidXQKKyAgIHVzdWFsbHkgdGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgbmVlZCBmb3IgYSB1c2VyIHRvIHR3ZWFrIGl0KS4KKworIC0gQSBuZXcgY29tbWFuZCwgZ2l0LXJlbW90ZSwgY2FuIGhlbHAgeW91IG1hbmFnZSB5b3VyIHJlbW90ZQorICAgdHJhY2tpbmcgYnJhbmNoIGRlZmluaXRpb25zLgorCisgLSBZb3UgbWF5IG5lZWQgdG8gc3BlY2lmeSBleHBsaWNpdCBwYXRocyBmb3IgdXBsb2FkLXBhY2sgYW5kL29yCisgICByZWNlaXZlLXBhY2sgZHVlIHRvIHlvdXIgc3NoIGRhZW1vbiBjb25maWd1cmF0aW9uIG9uIHRoZQorICAgb3RoZXIgZW5kLiAgVGhpcyBjYW4gbm93IGJlIGRvbmUgdmlhIHJlbW90ZS4qLnVwbG9hZHBhY2sgYW5kCisgICByZW1vdGUuKi5yZWNlaXZlcGFjayBjb25maWd1cmF0aW9uLgorCisKKyogQmFyZSByZXBvc2l0b3JpZXMKKworIC0gQ2VydGFpbiBjb21tYW5kcyBjaGFuZ2UgdGhlaXIgYmVoYXZpb3IgaW4gYSBiYXJlIHJlcG9zaXRvcnkKKyAgIChpLmUuIGEgcmVwb3NpdG9yeSB3aXRob3V0IGFzc29jaWF0ZWQgd29ya2luZyB0cmVlKS4gIFdlIHVzZQorICAgYSBmYWlybHkgY29uc2VydmF0aXZlIGhldXJpc3RpYyAoaWYgJEdJVF9ESVIgaXMgIi5naXQiLCBvcgorICAgZW5kcyB3aXRoICIvLmdpdCIsIHRoZSByZXBvc2l0b3J5IGlzIG5vdCBiYXJlKSB0byBkZWNpZGUgaWYgYQorICAgcmVwb3NpdG9yeSBpcyBiYXJlLCBidXQgImNvcmUuYmFyZSIgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICAgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGhldXJpc3RpYyB3aGVuIGl0IG1pc2lkZW50aWZpZXMKKyAgIHlvdXIgcmVwb3NpdG9yeS4KKworIC0gZ2l0LWZldGNoIHVzZWQgdG8gY29tcGxhaW4gdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGJ1dAorICAgdGhpcyBpcyBub3cgYWxsb3dlZCBmb3IgYSBiYXJlIHJlcG9zaXRvcnkuICBTbyBpcyB0aGUgdXNlIG9mCisgICAnZ2l0LWJyYW5jaCAtZicgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4KKworIC0gUG9yY2VsYWluLWlzaCBjb21tYW5kcyB0aGF0IHJlcXVpcmUgYSB3b3JraW5nIHRyZWUgcmVmdXNlcyB0bworICAgd29yayBpbiBhIGJhcmUgcmVwb3NpdG9yeS4KKworCisqIFJlZmxvZworCisgLSBSZWZsb2cgcmVjb3JkcyB0aGUgaGlzdG9yeSBmcm9tIHRoZSB2aWV3IHBvaW50IG9mIHRoZSBsb2NhbAorICAgcmVwb3NpdG9yeS4gSW4gb3RoZXIgd29yZHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlYWwgaGlzdG9yeSwKKyAgIHRoZSByZWZsb2cgc2hvd3MgdGhlIGhpc3RvcnkgYXMgc2VlbiBieSBvbmUgcGFydGljdWxhcgorICAgcmVwb3NpdG9yeSAodGhpcyBlbmFibGVzIHlvdSB0byBhc2sgIndoYXQgd2FzIHRoZSBjdXJyZW50CisgICByZXZpc2lvbiBpbiBfdGhpc18gcmVwb3NpdG9yeSwgeWVzdGVyZGF5IGF0IDFwbT8iKS4gIFRoaXMKKyAgIGZhY2lsaXR5IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgcmVwb3NpdG9yaWVzIHdpdGggd29ya2luZworICAgdHJlZXMsIGFuZCBjYW4gYmUgYWNjZXNzZWQgd2l0aCB0aGUgImJyYW5jaEB7dGltZX0iIGFuZAorICAgImJyYW5jaEB7TnRofSIgbm90YXRpb24uCisKKyAtICJnaXQgc2hvdy1icmFuY2giIGxlYXJuZWQgc2hvd2luZyB0aGUgcmVmbG9nIGRhdGEgd2l0aCB0aGUKKyAgIG5ldyAtZyBvcHRpb24uICAiZ2l0IGxvZyIgaGFzIC1nIG9wdGlvbiB0byB2aWV3IHJlZmxvZworICAgZW50cmllcyBpbiBhIG1vcmUgdmVyYm9zZSBtYW5uZXIuCisKKyAtIGdpdC1icmFuY2gga25vd3MgaG93IHRvIHJlbmFtZSBicmFuY2hlcyBhbmQgbW92ZXMgZXhpc3RpbmcKKyAgIHJlZmxvZyBkYXRhIGZyb20gdGhlIG9sZCBicmFuY2ggdG8gdGhlIG5ldyBvbmUuCisKKyAtIEluIGFkZGl0aW9uIHRvIHRoZSByZWZsb2cgc3VwcG9ydCBpbiB2MS40LjQgc2VyaWVzLCBIRUFECisgICByZWZlcmVuY2UgbWFpbnRhaW5zIGl0cyBvd24gbG9nLiAgIkhFQURAezUubWludXRlcy5hZ299IgorICAgbWVhbnMgdGhlIGNvbW1pdCB5b3Ugd2VyZSBhdCA1IG1pbnV0ZXMgYWdvLCB3aGljaCB0YWtlcworICAgYnJhbmNoIHN3aXRjaGluZyBpbnRvIGFjY291bnQuICBJZiB5b3Ugd2FudCB0byBrbm93IHdoZXJlIHRoZQorICAgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggd2FzIGF0IDUgbWludXRlcyBhZ28sIHlvdSBuZWVkIHRvCisgICBleHBsaWNpdGx5IHNheSBpdHMgbmFtZSAoZS5nLiAibWFzdGVyQHs1Lm1pbnV0ZXMuYWdvfSIpIG9yCisgICBvbWl0IHRoZSByZWZuYW1lIGFsdG9nZXRoZXIgaS5lLiAiQHs1Lm1pbnV0ZXMuYWdvfSIuCisKKyAtIFRoZSBjb21taXRzIHJlZmVycmVkIHRvIGJ5IHJlZmxvZyBlbnRyaWVzIGFyZSBub3cgcHJvdGVjdGVkCisgICBhZ2FpbnN0IHBydW5pbmcuICBUaGUgbmV3IGNvbW1hbmQgImdpdCByZWZsb2cgZXhwaXJlIiBjYW4gYmUKKyAgIHVzZWQgdG8gdHJ1bmNhdGUgb2xkZXIgcmVmbG9nIGVudHJpZXMgYW5kIGVudHJpZXMgdGhhdCByZWZlcgorICAgdG8gY29tbWl0cyB0aGF0IGhhdmUgYmVlbiBwcnVuZWQgYXdheSBwcmV2aW91c2x5IHdpdGggb2xkZXIKKyAgIHZlcnNpb25zIG9mIGdpdC4KKworICAgRXhpc3RpbmcgcmVwb3NpdG9yaWVzIHRoYXQgaGF2ZSBiZWVuIHVzaW5nIHJlZmxvZyBtYXkgZ2V0CisgICBjb21wbGFpbnRzIGZyb20gZnNjay1vYmplY3RzIGFuZCBtYXkgbm90IGJlIGFibGUgdG8gcnVuCisgICBnaXQtcmVwYWNrLCBpZiB5b3UgaGFkIHJ1biBnaXQtcHJ1bmUgZnJvbSBvbGRlciBnaXQ7IHBsZWFzZQorICAgcnVuICJnaXQgcmVmbG9nIGV4cGlyZSAtLXN0YWxlLWZpeCAtLWFsbCIgZmlyc3QgdG8gcmVtb3ZlCisgICByZWZsb2cgZW50cmllcyB0aGF0IHJlZmVyIHRvIGNvbW1pdHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluCisgICB0aGUgcmVwb3NpdG9yeSB3aGVuIHRoYXQgaGFwcGVucy4KKworCisqIENydWZ0cyByZW1vdmFsCisKKyAtIFdlIHVzZWQgdG8gc2F5ICJvbGQgY29tbWl0cyBhcmUgcmV0cmlldmFibGUgdXNpbmcgcmVmbG9nIGFuZAorICAgJ21hc3RlckB7eWVzdGVyZGF5fScgc3ludGF4IGFzIGxvbmcgYXMgeW91IGhhdmVuJ3QgcnVuCisgICBnaXQtcHJ1bmUiLiAgV2Ugbm8gbG9uZ2VyIGhhdmUgdG8gc2F5IHRoZSBsYXR0ZXIgaGFsZiBvZiB0aGUKKyAgIGFib3ZlIHNlbnRlbmNlLCBhcyBnaXQtcHJ1bmUgZG9lcyBub3QgcmVtb3ZlIHRoaW5ncyByZWFjaGFibGUKKyAgIGZyb20gcmVmbG9nIGVudHJpZXMuCisKKyAtIFRoZXJlIGlzIGEgdG9wbGV2ZWwgZ2FyYmFnZSBjb2xsZWN0b3Igc2NyaXB0LCAnZ2l0LWdjJywgdGhhdAorICAgcnVucyBwZXJpb2RpYyBjbGVhbnVwIGZ1bmN0aW9ucywgaW5jbHVkaW5nICdnaXQtcmVwYWNrIC1hIC1kJywKKyAgICdnaXQtcmVmbG9nIGV4cGlyZScsICdnaXQtcGFjay1yZWZzIC0tcHJ1bmUnLCBhbmQgJ2dpdC1yZXJlcmUKKyAgIGdjJy4KKworIC0gVGhlIG91dHB1dCBmcm9tIGZzY2sgKCJmc2NrLW9iamVjdHMiIGlzIGNhbGxlZCBqdXN0ICJmc2NrIgorICAgbm93LCBidXQgdGhlIG9sZCBuYW1lIGNvbnRpbnVlcyB0byB3b3JrKSB3YXMgbmVlZGxlc3NseQorICAgYWxhcm1pbmcgaW4gdGhhdCBpdCB3YXJuZWQgbWlzc2luZyBvYmplY3RzIHRoYXQgYXJlIHJlYWNoYWJsZQorICAgb25seSBmcm9tIGRhbmdsaW5nIG9iamVjdHMuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCBhbmQgdGhlCisgICBvdXRwdXQgaXMgbXVjaCBtb3JlIHVzZWZ1bC4KKworCisqIERldGFjaGVkIEhFQUQKKworIC0gWW91IGNhbiB1c2UgJ2dpdC1jaGVja291dCcgdG8gY2hlY2sgb3V0IGFuIGFyYml0cmFyeSByZXZpc2lvbgorICAgb3IgYSB0YWcgYXMgd2VsbCwgaW5zdGVhZCBvZiBuYW1lZCBicmFuY2hlcy4gIFRoaXMgd2lsbAorICAgZGlzc29jaWF0ZSB5b3VyIEhFQUQgZnJvbSB0aGUgYnJhbmNoIHlvdSBhcmUgY3VycmVudGx5IG9uLgorCisgICBBIHR5cGljYWwgdXNlIG9mIHRoaXMgZmVhdHVyZSBpcyB0byAibG9vayBhcm91bmQiLiAgRS5nLgorCisJJCBnaXQgY2hlY2tvdXQgdjIuNi4xNgorCS4uLiBjb21waWxlLCB0ZXN0LCBldGMuCisJJCBnaXQgY2hlY2tvdXQgdjIuNi4xNworCS4uLiBjb21waWxlLCB0ZXN0LCBldGMuCisKKyAtIEFmdGVyIGRldGFjaGluZyB5b3VyIEhFQUQsIHlvdSBjYW4gZ28gYmFjayB0byBhbiBleGlzdGluZworICAgYnJhbmNoIHdpdGggdXN1YWwgImdpdCBjaGVja291dCAkYnJhbmNoIi4gIEFsc28geW91IGNhbgorICAgc3RhcnQgYSBuZXcgYnJhbmNoIHVzaW5nICJnaXQgY2hlY2tvdXQgLWIgJG5ld2JyYW5jaCIgdG8KKyAgIHN0YXJ0IGEgbmV3IGJyYW5jaCBhdCB0aGF0IGNvbW1pdC4KKworIC0gWW91IGNhbiBldmVuIHB1bGwgZnJvbSBvdGhlciByZXBvc2l0b3JpZXMsIG1ha2UgbWVyZ2VzIGFuZAorICAgY29tbWl0cyB3aGlsZSB5b3VyIEhFQUQgaXMgZGV0YWNoZWQuICBBbHNvIHlvdSBjYW4gdXNlICJnaXQKKyAgIHJlc2V0IiB0byBqdW1wIHRvIGFyYml0cmFyeSBjb21taXQsIHdoaWxlIHN0aWxsIGtlZXBpbmcgeW91cgorICAgSEVBRCBkZXRhY2hlZC4KKworICAgUmVtZW1iZXIgdGhhdCBhIGRldGFjaGVkIHN0YXRlIGlzIHZvbGF0aWxlLCBpLmUuIGl0IHdpbGwgYmUgZm9yZ290dGVuCisgICBhcyBzb29uIGFzIHlvdSBtb3ZlIGF3YXkgZnJvbSBpdCB3aXRoIHRoZSBjaGVja291dCBvciByZXNldCBjb21tYW5kLAorICAgdW5sZXNzIGEgYnJhbmNoIGlzIGNyZWF0ZWQgZnJvbSBpdCBhcyBtZW50aW9uZWQgYWJvdmUuICBJdCBpcyBhbHNvCisgICBwb3NzaWJsZSB0byByZXNjdWUgYSBsb3N0IGRldGFjaGVkIHN0YXRlIGZyb20gdGhlIEhFQUQgcmVmbG9nLgorCisKKyogUGFja2VkIHJlZnMKKworIC0gUmVwb3NpdG9yaWVzIHdpdGggaHVuZHJlZHMgb2YgdGFncyBoYXZlIGJlZW4gcGF5aW5nIGxhcmdlCisgICBvdmVyaGVhZCwgYm90aCBpbiBzdG9yYWdlIGFuZCBpbiBydW50aW1lLCBkdWUgdG8gdGhlCisgICB0cmFkaXRpb25hbCBvbmUtcmVmLXBlci1maWxlIGZvcm1hdC4gIEEgbmV3IGNvbW1hbmQsCisgICBnaXQtcGFjay1yZWZzLCBjYW4gYmUgdXNlZCB0byAicGFjayIgdGhlbSBpbiBtb3JlIGVmZmljaWVudAorICAgcmVwcmVzZW50YXRpb24gKHlvdSBjYW4gbGV0IGdpdC1nYyBkbyB0aGlzIGZvciB5b3UpLgorCisgLSBDbG9uZXMgYW5kIGZldGNoZXMgb3ZlciBkdW1iIHRyYW5zcG9ydHMgYXJlIG5vdyBhd2FyZSBvZgorICAgcGFja2VkIHJlZnMgYW5kIGNhbiBkb3dubG9hZCBmcm9tIHJlcG9zaXRvcmllcyB0aGF0IHVzZQorICAgdGhlbS4KKworCisqIENvbmZpZ3VyYXRpb24KKworIC0gY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGNvbG9yIHNldHRpbmcgYXJlIGNvbnNvbGlkYXRlZCB1bmRlcgorICAgY29sb3IuKiBuYW1lc3BhY2UgKG9sZGVyIGRpZmYuY29sb3IuKiwgc3RhdHVzLmNvbG9yLiogYXJlCisgICBzdGlsbCBzdXBwb3J0ZWQpLgorCisgLSAnZ2l0LXJlcG8tY29uZmlnJyBjb21tYW5kIGlzIGFjY2Vzc2libGUgYXMgJ2dpdC1jb25maWcnIG5vdy4KKworCisqIFVwZGF0ZWQgZmVhdHVyZXMKKworIC0gZ2l0LWRlc2NyaWJlIHVzZXMgYmV0dGVyIGNyaXRlcmlhIHRvIHBpY2sgYSBiYXNlIHJlZi4gIEl0CisgICB1c2VkIHRvIHBpY2sgdGhlIG9uZSB3aXRoIHRoZSBuZXdlc3QgdGltZXN0YW1wLCBidXQgbm93IGl0CisgICBwaWNrcyB0aGUgb25lIHRoYXQgaXMgdG9wb2xvZ2ljYWxseSB0aGUgY2xvc2VzdCAodGhhdCBpcywKKyAgIGFtb25nIGFuY2VzdG9ycyBvZiBjb21taXQgQywgdGhlIHJlZiBUIHRoYXQgaGFzIHRoZSBzaG9ydGVzdAorICAgb3V0cHV0IGZyb20gImdpdC1yZXYtbGlzdCBULi5DIiBpcyBjaG9zZW4pLgorCisgLSBnaXQtZGVzY3JpYmUgZ2l2ZXMgdGhlIG51bWJlciBvZiBjb21taXRzIHNpbmNlIHRoZSBiYXNlIHJlZgorICAgYmV0d2VlbiB0aGUgcmVmbmFtZSBhbmQgdGhlIGhhc2ggc3VmZml4LiAgRS5nLiB0aGUgY29tbWl0IG9uZQorICAgYmVmb3JlIHYyLjYuMjAtcmM2IGluIHRoZSBrZXJuZWwgcmVwb3NpdG9yeSBpczoKKworCXYyLjYuMjAtcmM1LTMwNi1nYTIxYjA2OQorCisgICB3aGljaCB0ZWxscyB5b3UgdGhhdCBpdHMgb2JqZWN0IG5hbWUgYmVnaW5zIHdpdGggYTIxYjA2OSwKKyAgIHYyLjYuMjAtcmM1IGlzIGFuIGFuY2VzdG9yIG9mIGl0IChtZWFuaW5nLCB0aGUgY29tbWl0CisgICBjb250YWlucyBldmVyeXRoaW5nIC1yYzUgaGFzKSwgYW5kIHRoZXJlIGFyZSAzMDYgY29tbWl0cworICAgc2luY2UgdjIuNi4yMC1yYzUuCisKKyAtIGdpdC1kZXNjcmliZSB3aXRoIC0tYWJicmV2PTAgY2FuIGJlIHVzZWQgdG8gc2hvdyBvbmx5IHRoZQorICAgbmFtZSBvZiB0aGUgYmFzZSByZWYuCisKKyAtIGdpdC1ibGFtZSBsZWFybmVkIGEgbmV3IG9wdGlvbiwgLS1pbmNyZW1lbnRhbCwgdGhhdCB0ZWxscyBpdAorICAgdG8gb3V0cHV0IHRoZSBibGFtZXMgYXMgdGhleSBhcmUgYXNzaWduZWQuICBBIHNhbXBsZSBzY3JpcHQKKyAgIHRvIHVzZSBpdCBpcyBhbHNvIGluY2x1ZGVkIGFzIGNvbnRyaWIvYmxhbWV2aWV3LgorCisgLSBnaXQtYmxhbWUgc3RhcnRzIGFubm90YXRpbmcgZnJvbSB0aGUgd29ya2luZyB0cmVlIGJ5IGRlZmF1bHQuCisKKworKiBMZXNzIGV4dGVybmFsIGRlcGVuZGVuY3kKKworIC0gV2Ugbm8gbG9uZ2VyIHJlcXVpcmUgdGhlICJtZXJnZSIgcHJvZ3JhbSBmcm9tIHRoZSBSQ1Mgc3VpdGUuCisgICBBbGwgMy13YXkgZmlsZS1sZXZlbCBtZXJnZXMgYXJlIG5vdyBkb25lIGludGVybmFsbHkuCisKKyAtIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBnaXQtbWVyZ2UtcmVjdXJzaXZlIHdoaWNoIHdhcworICAgaW4gUHl0aG9uIGhhcyBiZWVuIHJlbW92ZWQ7IHdlIGhhdmUgYSBDIGltcGxlbWVudGF0aW9uIG9mIGl0CisgICBub3cuCisKKyAtIGdpdC1zaG9ydGxvZyBpcyBubyBsb25nZXIgYSBQZXJsIHNjcmlwdC4gIEl0IG5vIGxvbmdlcgorICAgcmVxdWlyZXMgb3V0cHV0IHBpcGVkIGZyb20gZ2l0LWxvZzsgaXQgY2FuIGFjY2VwdCByZXZpc2lvbgorICAgcGFyYW1ldGVycyBkaXJlY3RseSBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisKKyogSTE4bgorCisgLSBXZSBoYXZlIGFsd2F5cyBlbmNvdXJhZ2VkIHRoZSBjb21taXQgbWVzc2FnZSB0byBiZSBlbmNvZGVkIGluCisgICBVVEYtOCwgYnV0IHRoZSB1c2VycyBhcmUgYWxsb3dlZCB0byB1c2UgbGVnYWN5IGVuY29kaW5nIGFzCisgICBhcHByb3ByaWF0ZSBmb3IgdGhlaXIgcHJvamVjdHMuICBUaGlzIHdpbGwgY29udGludWUgdG8gYmUgdGhlCisgICBjYXNlLiAgSG93ZXZlciwgYSBub24gVVRGLTggY29tbWl0IGVuY29kaW5nIF9tdXN0XyBiZQorICAgZXhwbGljaXRseSBzZXQgd2l0aCBpMThuLmNvbW1pdGVuY29kaW5nIGluIHRoZSByZXBvc2l0b3J5CisgICB3aGVyZSBhIGNvbW1pdCBpcyBtYWRlOyBvdGhlcndpc2UgZ2l0LWNvbW1pdC10cmVlIHdpbGwKKyAgIGNvbXBsYWluIGlmIHRoZSBsb2cgbWVzc2FnZSBkb2VzIG5vdCBsb29rIGxpa2UgYSB2YWxpZCBVVEYtOAorICAgc3RyaW5nLgorCisgLSBUaGUgdmFsdWUgb2YgaTE4bi5jb21taXRlbmNvZGluZyBpbiB0aGUgb3JpZ2luYXRpbmcKKyAgIHJlcG9zaXRvcnkgaXMgcmVjb3JkZWQgaW4gdGhlIGNvbW1pdCBvYmplY3Qgb24gdGhlICJlbmNvZGluZyIKKyAgIGhlYWRlciwgaWYgaXQgaXMgbm90IFVURi04LiAgZ2l0LWxvZyBhbmQgZnJpZW5kcyBub3RpY2UgdGhpcywKKyAgIGFuZCByZWVuY29kZXMgdGhlIG1lc3NhZ2UgdG8gdGhlIGxvZyBvdXRwdXQgZW5jb2Rpbmcgd2hlbgorICAgZGlzcGxheWluZywgaWYgdGhleSBhcmUgZGlmZmVyZW50LiAgVGhlIGxvZyBvdXRwdXQgZW5jb2RpbmcKKyAgIGlzIGRldGVybWluZWQgYnkgImdpdCBsb2cgLS1lbmNvZGluZz08ZW5jb2Rpbmc+IiwKKyAgIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgY29uZmlndXJhdGlvbiwgb3IgaTE4bi5jb21taXRlbmNvZGluZworICAgY29uZmlndXJhdGlvbiwgaW4gdGhlIGRlY3JlYXNpbmcgb3JkZXIgb2YgcHJlZmVyZW5jZSwgYW5kCisgICBkZWZhdWx0cyB0byBVVEYtOC4KKworIC0gVG9vbHMgZm9yIGUtbWFpbGVkIHBhdGNoIGFwcGxpY2F0aW9uIG5vdyBkZWZhdWx0IHRvIC11CisgICBiZWhhdmlvcjsgaS5lLiBpdCBhbHdheXMgcmUtY29kZXMgZnJvbSB0aGUgZS1tYWlsZWQgZW5jb2RpbmcKKyAgIHRvIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgd2l0aCBpMThuLmNvbW1pdGVuY29kaW5nLiAgVGhpcworICAgdW5mb3J0dW5hdGVseSBmb3JjZXMgcHJvamVjdHMgdGhhdCBoYXZlIGhhcHBpbHkgYmVlbiB1c2luZyBhCisgICBsZWdhY3kgZW5jb2Rpbmcgd2l0aG91dCBzZXR0aW5nIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gc2V0CisgICB0aGUgY29uZmlndXJhdGlvbiwgYnV0IHRha2VuIHdpdGggb3RoZXIgaW1wcm92ZW1lbnQsIHBsZWFzZQorICAgZXhjdXNlIHVzIGZvciB0aGlzIHZlcnkgbWlub3Igb25lLXRpbWUgaW5jb252ZW5pZW5jZS4KKworCisqIGUtbWFpbGVkIHBhdGNoZXMKKworIC0gU2VlIHRoZSBhYm92ZSBJMThuIHNlY3Rpb24uCisKKyAtIGdpdC1mb3JtYXQtcGF0Y2ggbm93IGVuYWJsZXMgLS1iaW5hcnkgd2l0aG91dCBiZWluZyBhc2tlZC4KKyAgIGdpdC1hbSBkb2VzIF9ub3RfIGRlZmF1bHQgdG8gaXQsIGFzIHNlbmRpbmcgYmluYXJ5IHBhdGNoIHZpYQorICAgZS1tYWlsIGlzIHVudXN1YWwgYW5kIGlzIGhhcmRlciB0byByZXZpZXcgdGhhbiB0ZXh0dWFsCisgICBwYXRjaGVzIGFuZCBpdCBpcyBwcnVkZW50IHRvIHJlcXVpcmUgdGhlIHBlcnNvbiB3aG8gaXMKKyAgIGFwcGx5aW5nIHRoZSBwYXRjaCB0byBleHBsaWNpdGx5IGFzayBmb3IgaXQuCisKKyAtIFRoZSBkZWZhdWx0IHN1ZmZpeCBmb3IgZ2l0LWZvcm1hdC1wYXRjaCBvdXRwdXQgaXMgbm93ICIucGF0Y2giLAorICAgbm90ICIudHh0Ii4gIFRoaXMgY2FuIGJlIGNoYW5nZWQgd2l0aCAtLXN1ZmZpeD0udHh0IG9wdGlvbiwKKyAgIG9yIHNldHRpbmcgdGhlIGNvbmZpZyB2YXJpYWJsZSAiZm9ybWF0LnN1ZmZpeCIgdG8gIi50eHQiLgorCisKKyogRm9yZWlnbiBTQ00gaW50ZXJmYWNlcworCisgLSBnaXQtc3ZuIG5vdyByZXF1aXJlcyB0aGUgUGVybCBTVk46OiBsaWJyYXJpZXMsIHRoZQorICAgY29tbWFuZC1saW5lIGJhY2tlbmQgd2FzIHRvbyBzbG93IGFuZCBsaW1pdGVkLgorCisgLSB0aGUgJ2NvbW1pdCcgc3ViY29tbWFuZCBvZiBnaXQtc3ZuIGhhcyBiZWVuIHJlbmFtZWQgdG8KKyAgICdzZXQtdHJlZScsIGFuZCAnZGNvbW1pdCcgaXMgdGhlIHJlY29tbWVuZGVkIHJlcGxhY2VtZW50IGZvcgorICAgZGF5LXRvLWRheSB3b3JrLgorCisgLSBnaXQgZmFzdC1pbXBvcnQgYmFja2VuZC4KKworCisqIFVzZXIgc3VwcG9ydAorCisgLSBRdWl0ZSBhIGxvdCBvZiBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKyAtIEJhc2ggY29tcGxldGlvbiBzY3JpcHRzIGhhdmUgYmVlbiB1cGRhdGVkIGhlYXZpbHkuCisKKyAtIEJldHRlciBlcnJvciBtZXNzYWdlcyBmb3Igb2Z0ZW4gdXNlZCBQb3JjZWxhaW5pc2ggY29tbWFuZHMuCisKKyAtIEdpdCBHVUkuICBUaGlzIGlzIGEgc2ltcGxlIFRrIGJhc2VkIGdyYXBoaWNhbCBpbnRlcmZhY2UgZm9yCisgICBjb21tb24gR2l0IG9wZXJhdGlvbnMuCisKKworKiBTbGlkaW5nIG1tYXAKKworIC0gV2UgdXNlZCB0byBhc3N1bWUgdGhhdCB3ZSBjYW4gbW1hcCB0aGUgd2hvbGUgcGFja2ZpbGUgd2hpbGUKKyAgIGluIHVzZSwgYnV0IHdpdGggYSBsYXJnZSBwcm9qZWN0IHRoaXMgY29uc3VtZXMgaHVnZSB2aXJ0dWFsCisgICBtZW1vcnkgc3BhY2UgYW5kIHRydWx5IGh1Z2Ugb25lcyB3b3VsZCBub3QgZml0IGluIHRoZQorICAgdXNlcmxhbmQgYWRkcmVzcyBzcGFjZSBvbiAzMi1iaXQgcGxhdGZvcm1zLiAgV2Ugbm93IG1tYXAgaHVnZQorICAgcGFja2ZpbGUgaW4gcGllY2VzIHRvIGF2b2lkIHRoaXMgcHJvYmxlbS4KKworCisqIFNoYWxsb3cgY2xvbmVzCisKKyAtIFRoZXJlIGlzIGEgcGFydGlhbCBzdXBwb3J0IGZvciAnc2hhbGxvdycgcmVwb3NpdG9yaWVzIHRoYXQKKyAgIGtlZXBzIG9ubHkgcmVjZW50IGhpc3RvcnkuICBBICdzaGFsbG93IGNsb25lJyBpcyBjcmVhdGVkIGJ5CisgICBzcGVjaWZ5aW5nIGhvdyBkZWVwIHRoYXQgdHJ1bmNhdGVkIGhpc3Rvcnkgc2hvdWxkIGJlCisgICAoZS5nLiAiZ2l0IGNsb25lIC0tZGVwdGggNSBnaXQ6Ly9zb21lLndoZXJlL3JlcG8uZ2l0IikuCisKKyAgIEN1cnJlbnRseSBhIHNoYWxsb3cgcmVwb3NpdG9yeSBoYXMgbnVtYmVyIG9mIGxpbWl0YXRpb25zOgorCisgICAtIENsb25pbmcgYW5kIGZldGNoaW5nIF9mcm9tXyBhIHNoYWxsb3cgY2xvbmUgYXJlIG5vdAorICAgICBzdXBwb3J0ZWQgKG5vciB0ZXN0ZWQgLS0gc28gdGhleSBtaWdodCB3b3JrIGJ5IGFjY2lkZW50IGJ1dAorICAgICB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgdG8pLgorCisgICAtIFB1c2hpbmcgZnJvbSBub3IgaW50byBhIHNoYWxsb3cgY2xvbmUgYXJlIG5vdCBleHBlY3RlZCB0bworICAgICB3b3JrLgorCisgICAtIE1lcmdpbmcgaW5zaWRlIGEgc2hhbGxvdyByZXBvc2l0b3J5IHdvdWxkIHdvcmsgYXMgbG9uZyBhcyBhCisgICAgIG1lcmdlIGJhc2UgaXMgZm91bmQgaW4gdGhlIHJlY2VudCBoaXN0b3J5LCBidXQgb3RoZXJ3aXNlIGl0CisgICAgIHdpbGwgYmUgbGlrZSBtZXJnaW5nIHVucmVsYXRlZCBoaXN0b3JpZXMgYW5kIG1heSByZXN1bHQgaW4KKyAgICAgaHVnZSBjb25mbGljdHMuCisKKyAgIGJ1dCB0aGlzIHdvdWxkIGJlIG1vcmUgdGhhbiBhZGVxdWF0ZSBmb3IgcGVvcGxlIHdobyB3YW50IHRvCisgICBsb29rIGF0IG5lYXIgdGhlIHRpcCBvZiBhIGJpZyBwcm9qZWN0IHdpdGggYSBkZWVwIGhpc3RvcnkgYW5kCisgICBzZW5kIHBhdGNoZXMgaW4gZS1tYWlsIGZvcm1hdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNDcxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjEudHh0CkBAIC0wLDAgKzEsNjUgQEAKK0dJVCB2MS41LjEuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisgIC0gVGhlIC0tbGVmdC1yaWdodCBvcHRpb24gb2YgcmV2LWxpc3QgYW5kIGZyaWVuZHMgaXMgZG9jdW1lbnRlZC4KKworICAtIFRoZSBkb2N1bWVudGF0aW9uIGZvciBjdnNpbXBvcnQgaGFzIGJlZW4gbWFqb3JseSBpbXByb3ZlZC4KKworICAtICJnaXQtc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nIiB3YXMgZG9jdW1lbnRlZC4KKworKiBCdWdmaXhlcworCisgIC0gVGhlIGltcGxlbWVudGF0aW9uIG9mIC1wIG9wdGlvbiBpbiAiZ2l0IGN2c2V4cG9ydGNvbW1pdCIgaGFkCisgICAgdGhlIG1lYW5pbmcgb2YgLUMgKGNvbnRleHQgcmVkdWN0aW9uKSBvcHRpb24gd3JvbmcsIGFuZAorICAgIGxvb3NlbmVkIHRoZSBjb250ZXh0IHJlcXVpcmVtZW50cyB3aGVuIGl0IHdhcyB0b2xkIHRvIGJlCisgICAgc3RyaWN0LgorCisgIC0gImdpdCBjdnNzZXJ2ZXIiIGRpZCBub3QgYmVoYXZlIGxpa2UgdGhlIHJlYWwgY3Zzc2VydmVyIHdoZW4KKyAgICBjbGllbnQgc2lkZSByZW1vdmVkIGEgZmlsZSBmcm9tIHRoZSB3b3JraW5nIHRyZWUgd2l0aG91dAorICAgIGRvaW5nIGFueXRoaW5nIGVsc2Ugb24gdGhlIHBhdGguICBJbiBzdWNoIGEgY2FzZSwgaXQgc2hvdWxkCisgICAgcmVzdG9yZSBpdCBmcm9tIHRoZSBjaGVja2VkIG91dCByZXZpc2lvbi4KKworICAtICJnaXQgZnNjayIgaXNzdWVkIGFuIGFsYXJtaW5nIGVycm9yIG1lc3NhZ2Ugb24gZGV0YWNoZWQKKyAgICBIRUFELiAgSXQgaXMgbm90IGFuIGVycm9yIHNpbmNlIGF0IGxlYXN0IDEuNS4wLgorCisgIC0gImdpdCBzZW5kLWVtYWlsIiBwcm9kdWNlZCBvZiBSZWZlcmVuY2VzIGhlYWRlciBvZiB1bmJvdW5kZWQgbGVuZ3RoOworICAgIGZpeGVkIHRoaXMgd2l0aCBsaW5lLWZvbGRpbmcuCisKKyAgLSAiZ2l0IGFyY2hpdmUiIHRvIGRvd25sb2FkIGZyb20gcmVtb3RlIHNpdGUgc2hvdWxkIG5vdAorICAgIHJlcXVpcmUgeW91IHRvIGJlIGluIGEgZ2l0IHJlcG9zaXRvcnksIGJ1dCBpdCBpbmNvcnJlY3RseQorICAgIGRpZC4KKworICAtICJnaXQgYXBwbHkiIGlnbm9yZWQgLXA8bj4gZm9yICJkaWZmIC0tZ2l0IiBmb3JtYXR0ZWQKKyAgICBwYXRjaGVzLgorCisgIC0gImdpdCByZXJlcmUiIHJlY29yZGVkIGEgY29uZmxpY3QgdGhhdCBoYWQgb25lIHNpZGUgZW1wdHkKKyAgICAodGhlIG90aGVyIHNpZGUgYWRkcykgaW5jb3JyZWN0bHk7IHRoaXMgbWFkZSBtZXJnaW5nIGluIHRoZQorICAgIG90aGVyIGRpcmVjdGlvbiBmYWlsIHRvIHVzZSBwcmV2aW91c2x5IHJlY29yZGVkIHJlc29sdXRpb24uCisKKyAgLSB0NDIwMCB0ZXN0IHdhcyBicm9rZW4gd2hlcmUgIndjIC1sIiBwYWRzIGl0cyBvdXRwdXQgd2l0aAorICAgIHNwYWNlcy4KKworICAtICJnaXQgYnJhbmNoIC1tIG9sZCBuZXciIHRvIHJlbmFtZSBicmFuY2ggZGlkIG5vdCB3b3JrCisgICAgd2l0aG91dCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiAiLmdpdC9jb25maWciLgorCisgIC0gVGhlIHNhbXBsZSBob29rIGZvciBub3RpZmljYXRpb24gZS1tYWlsIHdhcyBtaXNuYW1lZC4KKworICAtIGdpdHdlYiBkaWQgbm90IHNob3cgdHlwZS1jaGFuZ2luZyBwYXRjaCBjb3JyZWN0bHkgaW4gdGhlCisgICAgYmxvYmRpZmYgdmlldy4KKworICAtIGdpdC1zdm4gZGlkIG5vdCBlcnJvciBvdXQgd2l0aCBpbmNvcnJlY3QgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKKyAgLSBnaXQtc3ZuIGZlbGwgaW50byBhbiBpbmZpbml0ZSBsb29wIHdoZW4gaW5zYW5lbHkgbG9uZyBjb21taXQKKyAgICBtZXNzYWdlIHdhcyBmb3VuZC4KKworICAtIGdpdC1zdm4gZGNvbW1pdCBhbmQgcmViYXNlIHdhcyBjb25mdXNlZCBieSBwYXRjaGVzIHRoYXQgd2VyZQorICAgIG1lcmdlZCBmcm9tIGFub3RoZXIgYnJhbmNoIHRoYXQgaXMgbWFuYWdlZCBieSBnaXQtc3ZuLgorCisgIC0gZ2l0LXN2biB1c2VkIHRvIGdldCBjb25mdXNlZCB3aGVuIGdsb2JiaW5nIHJlbW90ZSBicmFuY2gvdGFnCisgICAgc3BlYyAoZS5nLiAiYnJhbmNoZXMgPSBwcm9qL2JyYW5jaGVzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikKKyAgICBpcyB1c2VkIGFuZCB0aGVyZSB3YXMgYSBwbGFpbiBmaWxlIHRoYXQgbWF0Y2hlZCB0aGUgZ2xvYi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODQ1NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjIudHh0CkBAIC0wLDAgKzEsNTAgQEAKK0dJVCB2MS41LjEuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjEuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gImdpdCBjbG9uZSIgb3ZlciBodHRwIGZyb20gYSByZXBvc2l0b3J5IHRoYXQgaGFzIGxvc3QgdGhlCisgICAgbG9vc2UgcmVmcyBieSBydW5uaW5nICJnaXQgcGFjay1yZWZzIiB3ZXJlIGJyb2tlbiAoYSBjb2RlIHRvCisgICAgZGVhbCB3aXRoIHRoaXMgd2FzIGFkZGVkIHRvICJnaXQgZmV0Y2giIGluIHYxLjUuMCwgYnV0IGl0CisgICAgd2FzIG1pc3NpbmcgZnJvbSAiZ2l0IGNsb25lIikuCisKKyAgLSAiZ2l0IGRpZmYgYS8gYi8iIGluY29ycmVjdGx5IGZlbGwgaW4gImRpZmYgYmV0d2VlbiB0d28KKyAgICBmaWxlc3lzdGVtIG9iamVjdHMiIGNvZGVwYXRoLCB3aGVuIHRoZSB1c2VyIG1vc3QgbGlrZWx5CisgICAgd2FudGVkIHRvIGxpbWl0IHRoZSBleHRlbnQgb2Ygb3V0cHV0IHRvIHR3byB0cmFja2VkCisgICAgZGlyZWN0b3JpZXMuCisKKyAgLSBnaXQtcXVpbHRpbXBvcnQgaGFkIHRoZSBzYW1lIGJ1ZyBhcyB3ZSBmaXhlZCBmb3IKKyAgICBnaXQtYXBwbHltYm94IGluIHYxLjUuMS4xIC0tIGl0IGdhdmUgYW4gYWxhcm1pbmcgImRpZCBub3QKKyAgICBoYXZlIGFueSBwYXRjaCIgbWVzc2FnZSAoYnV0IGRpZCBub3QgYWN0dWFsbHkgZmFpbCBhbmQgd2FzCisgICAgaGFybWxlc3MpLgorCisgIC0gdmFyaW91cyBnaXQtc3ZuIGZpeGVzLgorCisgIC0gU2FtcGxlIHVwZGF0ZSBob29rIGluY29ycmVjdGx5IGFsd2F5cyByZWZ1c2VkIHJlcXVlc3RzIHRvCisgICAgZGVsZXRlIGJyYW5jaGVzIHRocm91Z2ggcHVzaC4KKworICAtIGdpdC1ibGFtZSBvbiBhIHZlcnkgbG9uZyB3b3JraW5nIHRyZWUgcGF0aCBoYWQgYnVmZmVyCisgICAgb3ZlcnJ1biBwcm9ibGVtLgorCisgIC0gZ2l0LWFwcGx5IGRpZCBub3QgbGlrZSB0byBiZSBmZWQgdHdvIHBhdGNoZXMgaW4gYSByb3cgdGhhdCBjcmVhdGVkCisgICAgYW5kIHRoZW4gbW9kaWZpZWQgdGhlIHNhbWUgZmlsZS4KKworICAtIGdpdC1zdm4gd2FzIGNvbmZ1c2VkIHdoZW4gYSBub24tcHJvamVjdCB3YXMgc3RvcmVkIGRpcmVjdGx5IHVuZGVyCisgICAgdHJ1bmsvLCBicmFuY2hlcy8gYW5kIHRhZ3MvLgorCisgIC0gZ2l0LXN2biB3YW50cyB0aGUgRXJyb3IucG0gbW9kdWxlIHRoYXQgd2FzIGF0IGxlYXN0IGFzIG5ldworICAgIGFzIHdoYXQgd2Ugc2hpcCBhcyBwYXJ0IG9mIGdpdDsgaW5zdGFsbCBvdXJzIGluIG91ciBwcml2YXRlCisgICAgaW5zdGFsbGF0aW9uIGxvY2F0aW9uIGlmIHRoZSBvbmUgb24gdGhlIHN5c3RlbSBpcyBvbGRlci4KKworICAtIEFuIGVhcmxpZXIgdXBkYXRlIHRvIGNvbW1hbmQgbGluZSBpbnRlZ2VyIHBhcmFtZXRlciBwYXJzZXIgd2FzCisgICAgYm90Y2hlZCBhbmQgbWFkZSAndXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvJyBjb21wbGV0ZWx5IHVzZWxlc3MuCisKKworKiBEb2N1bWVudGF0aW9uIHVwZGF0ZXMKKworICAtIFZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGZyb20gSi4gQnJ1Y2UgRmllbGRzLCBGcmFuaworICAgIExpY2h0ZW5oZWxkLCBBbGV4IFJpZXNlbiBhbmQgb3RoZXJzLiAgQW5kcmV3IFJ1ZGVyIHN0YXJ0ZWQgYQorICAgIHdhciBvbiB1bmRvY3VtZW50ZWQgb3B0aW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NjQwOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjMudHh0CkBAIC0wLDAgKzEsNDUgQEAKK0dJVCB2MS41LjEuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjEuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LWFkZCB0cmllZCB0byBvcHRpbWl6ZSBieSBmaW5kaW5nIGNvbW1vbiBsZWFkaW5nCisgICAgZGlyZWN0b3JpZXMgYWNyb3NzIGl0cyBhcmd1bWVudHMgYnV0IGJvdGNoZWQsIGNhdXNpbmcgdmVyeQorICAgIGNvbmZ1c2VkIGJlaGF2aW91ci4KKworICAtIHVub2ZmaWNpYWwgcnBtLnNwZWMgZmlsZSBzaGlwcGVkIHdpdGggZ2l0IHdhcyBsZXR0aW5nCisgICAgRVRDX0dJVENPTkZJRyBzZXQgdG8gL3Vzci9ldGMvZ2l0Y29uZmlnLiAgVHdlYWsgdGhlIG9mZmljaWFsCisgICAgTWFrZWZpbGUgdG8gbWFrZSBpdCBoYXJkZXIgZm9yIGRpc3RybyBwZW9wbGUgdG8gbWFrZSB0aGUKKyAgICBzYW1lIG1pc3Rha2UsIGJ5IHNldHRpbmcgdGhlIHZhcmlhYmxlIHRvIC9ldGMvZ2l0Y29uZmlnIGlmCisgICAgcHJlZml4IGlzIHNldCB0byAvdXNyLgorCisgIC0gZ2l0LXN2biBpbmNvbnNpc3RlbnRseSBzdHJpcHBlZCBhd2F5IHVzZXJuYW1lIGZyb20gdGhlIFVSTAorICAgIG9ubHkgd2hlbiBzdm5zeW5jX3Byb3BzIHdhcyBpbiB1c2UuCisKKyAgLSBnaXQtc3ZuIGdvdCBjb25mdXNlZCB3aGVuIGhhbmRsaW5nIHN5bWxpbmtzIG9uIE1hYyBPUy4KKworICAtIGdpdC1zZW5kLWVtYWlsIHdhcyBub3QgcXVvdGluZyByZWNpcGllbnQgbmFtZXMgdGhhdCBoYXZlCisgICAgcGVyaW9kICcuJyBpbiB0aGVtLiAgQWxzbyBpdCBkaWQgbm90IGFsbG93IG92ZXJyaWRpbmcKKyAgICBlbnZlbG9wZSBzZW5kZXIsIHdoaWNoIG1hZGUgaXQgaW1wb3NzaWJsZSB0byBzZW5kIHBhdGNoZXMgdG8KKyAgICBjZXJ0YWluIHN1YnNjcmliZXItb25seSBsaXN0cy4KKworICAtIGJ1aWx0LWluIHdyaXRlX3RyZWUoKSByb3V0aW5lIGhhZCBhIHNlcXVlbmNlIHRoYXQgcmVuYW1lZCBhCisgICAgZmlsZSB0aGF0IGlzIHN0aWxsIG9wZW4sIHdoaWNoIHNvbWUgc3lzdGVtcyBkaWQgbm90IGxpa2UuCisKKyAgLSB3aGVuIG1lbW9yeSBpcyB2ZXJ5IHRpZ2h0LCBzbGlkaW5nIG1tYXAgY29kZSB0byByZWFkCisgICAgcGFja2ZpbGVzIGluY29ycmVjdGx5IGNsb3NlZCB0aGUgZmQgdGhhdCB3YXMgc3RpbGwgYmVpbmcKKyAgICB1c2VkIHRvIHJlYWQgdGhlIHBhY2suCisKKyAgLSBpbXBvcnQtdGFycyBjb250cmlidXRlZCBmcm9udC1lbmQgZm9yIGZhc3RpbXBvcnQgd2FzIHBhc3NpbmcKKyAgICB3cm9uZyBkaXJlY3RvcnkgbW9kZXMgd2l0aG91dCBjaGVja2luZy4KKworICAtIGdpdC1mYXN0aW1wb3J0IHRydXN0ZWQgaXRzIGlucHV0IHRvbyBtdWNoIGFuZCBhbGxvd2VkIHRvCisgICAgY3JlYXRlIGNvcnJ1cHQgdHJlZSBvYmplY3RzIHdpdGggZW50cmllcyB3aXRob3V0IGEgbmFtZS4KKworICAtIGdpdC1mZXRjaCBuZWVkbGVzc2x5IGJhcmZlZCB3aGVuIHRvbyBsb25nIHJlZmxvZyBhY3Rpb24KKyAgICBkZXNjcmlwdGlvbiB3YXMgZ2l2ZW4gYnkgdGhlIGNhbGxlci4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMmY2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjQudHh0CkBAIC0wLDAgKzEsMzAgQEAKK0dJVCB2MS41LjEuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjEuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gImdpdC1odHRwLWZldGNoIiBkaWQgbm90IHdvcmsgYXJvdW5kIGEgYnVnIGluIGxpYmN1cmwKKyAgICBlYXJsaWVyIHRoYW4gNy4xNiAoY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKCkgd2FzIGJyb2tlbikuCisKKyAgLSAiZ2l0IGN2c3NlcnZlciIgaGFuZGxlcyBhIGZpbGUgdGhhdCB3YXMgb25jZSByZW1vdmVkIGFuZAorICAgIHRoZW4gYWRkZWQgYWdhaW4gY29ycmVjdGx5LgorCisgIC0gaW1wb3J0LXRhcnMgc2NyaXB0IChpbiBjb250cmliLykgaGFuZGxlcyBHTlUgdGFyIGFyY2hpdmVzCisgICAgdGhhdCBjb250YWluIHBhdGhuYW1lcyBsb25nZXIgdGhhbiAxMDAgYnl0ZXMgKGxvbmctbGluaworICAgIGV4dGVuc2lvbikgY29ycmVjdGx5LgorCisgIC0geGRlbHRhIHRlc3QgcHJvZ3JhbSBkaWQgbm90IGJ1aWxkIGNvcnJlY3RseS4KKworICAtIGdpdHdlYiBzb21ldGltZXMgdHJpZWQgaW5jb3JyZWN0bHkgdG8gYXBwbHkgZnVuY3Rpb24gdG8KKyAgICBkZWNvZGUgdXRmOCB0d2ljZSwgcmVzdWx0aW5nIGluIGNvcnJ1cHQgb3V0cHV0LgorCisgIC0gImdpdCBibGFtZSAtQyIgbWlzaGFuZGxlZCB0ZXh0IGF0IHRoZSBlbmQgb2YgYSBncm91cCBvZgorICAgIGxpbmVzLgorCisgIC0gImdpdCBsb2cvcmV2LWxpc3QgLS1ib3VuZGFyeSIgZGlkIG5vdCBwcm9kdWNlIG91dHB1dAorICAgIGNvcnJlY3RseSB3aXRob3V0IC0tbGVmdC1yaWdodCBvcHRpb24uCisKKyAgLSBNYW55IGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYWI4ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4xLjUudHh0CkBAIC0wLDAgKzEsNDIgQEAKK0dJVCB2MS41LjEuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjEuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gZ2l0LXNlbmQtZW1haWwgZGlkIG5vdCB1bmRlcnN0YW5kIGFsaWFzZXMgZmlsZSBmb3IgbXV0dCwgd2hpY2gKKyAgICBhbGxvd3MgbGVhZGluZyB3aGl0ZXNwYWNlcy4KKworICAtIGdpdC1mb3JtYXQtcGF0Y2ggZW1pdHRlZCBDb250ZW50LVR5cGUgYW5kIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcKKyAgICBoZWFkZXJzIGZvciBub24gQVNDSUkgY29udGVudHMsIGJ1dCBmYWlsZWQgdG8gYWRkIE1JTUUtVmVyc2lvbi4KKworICAtIGdpdC1uYW1lLXJldiBoYWQgYSBidWZmZXIgb3ZlcnJ1biB3aXRoIGEgZGVlcCBoaXN0b3J5LgorCisgIC0gY29udHJpYnV0ZWQgc2NyaXB0IGltcG9ydC10YXJzIGRpZCBub3QgZ2V0IHRoZSBkaXJlY3RvcnkgaW4KKyAgICB0YXIgYXJjaGl2ZXMgaW50ZXJwcmV0ZWQgY29ycmVjdGx5LgorCisgIC0gZ2l0LXN2biB3YXMgcmVwb3J0ZWQgdG8gc2VnZmF1bHQgZm9yIG1hbnkgcGVvcGxlIG9uIGxpc3QgYW5kCisgICAgI2dpdDsgaG9wZWZ1bGx5IHRoaXMgaGFzIGJlZW4gZml4ZWQuCisKKyAgLSAiZ2l0LXN2biBjbG9uZSIgZG9lcyBub3QgdHJ5IHRvIG1pbmltaXplIHRoZSBVUkwKKyAgICAoaS5lLiBjb25uZWN0IHRvIGhpZ2hlciBsZXZlbCBoaWVyYXJjaHkpIGJ5IGRlZmF1bHQsIGFzIHRoaXMKKyAgICBjYW4gcHJldmVudCBjbG9uZSB0byBmYWlsIGlmIG9ubHkgcGFydCBvZiB0aGUgcmVwb3NpdG9yeQorICAgIChlLmcuICd0cnVuaycpIGlzIG9wZW4gdG8gcHVibGljLgorCisgIC0gImdpdCBjaGVja291dCBicmFuY2heMCIgZGlkIG5vdCBkZXRhY2ggdGhlIGhlYWQgd2hlbiB5b3UgYXJlCisgICAgYWxyZWFkeSBvbiAnYnJhbmNoJzsgYmFja3BvcnRlZCB0aGUgZml4IGZyb20gdGhlICdtYXN0ZXInLgorCisgIC0gImdpdC1jb25maWcgc2VjdGlvbi52YXIiIGRpZCBub3QgY29ycmVjdGx5IHdvcmsgd2hlbgorICAgIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZSBoYWQgYm90aCBbc2VjdGlvbl0gYW5kIFtzZWN0aW9uICJuYW1lIl0KKyAgICBuZXh0IHRvIGVhY2ggb3RoZXIuCisKKyAgLSAiZ2l0IGNsb25lIC4uL290aGVyLWRpcmVjdG9yeSIgd2FzIGZvb2xlZCBpZiB0aGUgY3VycmVudAorICAgIGRpcmVjdG9yeSAkUFdEIHBvaW50cyBhdCBpcyBhIHN5bWJvbGljIGxpbmsuCisKKyAgLSAoYnVpbGQpIHRyZWVfZW50cnlfZXh0cmFjdCgpIGZ1bmN0aW9uIHdhcyBib3RoIHN0YXRpYyBpbmxpbmUKKyAgICBhbmQgZXh0ZXJuLCB3aGljaCBjYXVzZWQgdHJvdWJsZSBjb21waWxpbmcgd2l0aCBGb3J0ZTEyCisgICAgY29tcGlsZXJzIG9uIFN1bi4KKworICAtIE1hbnkgbWFueSBkb2N1bWVudGF0aW9uIGZpeGVzIGFuZCB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmM2FjMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEuNi50eHQKQEAgLTAsMCArMSw0NSBAQAorR0lUIHYxLjUuMS42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMS40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEJ1Z2ZpeGVzCisKKyAgLSBnaXQtc2VuZC1lbWFpbCBkaWQgbm90IHVuZGVyc3RhbmQgYWxpYXNlcyBmaWxlIGZvciBtdXR0LCB3aGljaAorICAgIGFsbG93cyBsZWFkaW5nIHdoaXRlc3BhY2VzLgorCisgIC0gZ2l0LWZvcm1hdC1wYXRjaCBlbWl0dGVkIENvbnRlbnQtVHlwZSBhbmQgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZworICAgIGhlYWRlcnMgZm9yIG5vbiBBU0NJSSBjb250ZW50cywgYnV0IGZhaWxlZCB0byBhZGQgTUlNRS1WZXJzaW9uLgorCisgIC0gZ2l0LW5hbWUtcmV2IGhhZCBhIGJ1ZmZlciBvdmVycnVuIHdpdGggYSBkZWVwIGhpc3RvcnkuCisKKyAgLSBjb250cmlidXRlZCBzY3JpcHQgaW1wb3J0LXRhcnMgZGlkIG5vdCBnZXQgdGhlIGRpcmVjdG9yeSBpbgorICAgIHRhciBhcmNoaXZlcyBpbnRlcnByZXRlZCBjb3JyZWN0bHkuCisKKyAgLSBnaXQtc3ZuIHdhcyByZXBvcnRlZCB0byBzZWdmYXVsdCBmb3IgbWFueSBwZW9wbGUgb24gbGlzdCBhbmQKKyAgICAjZ2l0OyBob3BlZnVsbHkgdGhpcyBoYXMgYmVlbiBmaXhlZC4KKworICAtIGdpdC1zdm4gYWxzbyBoYWQgYSBidWcgdG8gY3Jhc2ggc3Zuc2VydmUgYnkgc2VuZGluZyBhIGJhZAorICAgIHNlcXVlbmNlIG9mIHJlcXVlc3RzLgorCisgIC0gImdpdC1zdm4gY2xvbmUiIGRvZXMgbm90IHRyeSB0byBtaW5pbWl6ZSB0aGUgVVJMCisgICAgKGkuZS4gY29ubmVjdCB0byBoaWdoZXIgbGV2ZWwgaGllcmFyY2h5KSBieSBkZWZhdWx0LCBhcyB0aGlzCisgICAgY2FuIHByZXZlbnQgY2xvbmUgdG8gZmFpbCBpZiBvbmx5IHBhcnQgb2YgdGhlIHJlcG9zaXRvcnkKKyAgICAoZS5nLiAndHJ1bmsnKSBpcyBvcGVuIHRvIHB1YmxpYy4KKworICAtICJnaXQgY2hlY2tvdXQgYnJhbmNoXjAiIGRpZCBub3QgZGV0YWNoIHRoZSBoZWFkIHdoZW4geW91IGFyZQorICAgIGFscmVhZHkgb24gJ2JyYW5jaCc7IGJhY2twb3J0ZWQgdGhlIGZpeCBmcm9tIHRoZSAnbWFzdGVyJy4KKworICAtICJnaXQtY29uZmlnIHNlY3Rpb24udmFyIiBkaWQgbm90IGNvcnJlY3RseSB3b3JrIHdoZW4KKyAgICBleGlzdGluZyBjb25maWd1cmF0aW9uIGZpbGUgaGFkIGJvdGggW3NlY3Rpb25dIGFuZCBbc2VjdGlvbiAibmFtZSJdCisgICAgbmV4dCB0byBlYWNoIG90aGVyLgorCisgIC0gImdpdCBjbG9uZSAuLi9vdGhlci1kaXJlY3RvcnkiIHdhcyBmb29sZWQgaWYgdGhlIGN1cnJlbnQKKyAgICBkaXJlY3RvcnkgJFBXRCBwb2ludHMgYXQgaXMgYSBzeW1ib2xpYyBsaW5rLgorCisgIC0gKGJ1aWxkKSB0cmVlX2VudHJ5X2V4dHJhY3QoKSBmdW5jdGlvbiB3YXMgYm90aCBzdGF0aWMgaW5saW5lCisgICAgYW5kIGV4dGVybiwgd2hpY2ggY2F1c2VkIHRyb3VibGUgY29tcGlsaW5nIHdpdGggRm9ydGUxMgorICAgIGNvbXBpbGVycyBvbiBTdW4uCisKKyAgLSBNYW55IG1hbnkgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFlZDM2NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjEudHh0CkBAIC0wLDAgKzEsMzcxIEBACitHSVQgdjEuNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjUuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBEZXByZWNhdGVkIGNvbW1hbmRzIGFuZCBvcHRpb25zLgorCisgIC0gZ2l0LWRpZmYtc3RhZ2VzIGFuZCBnaXQtcmVzb2x2ZSBoYXZlIGJlZW4gcmVtb3ZlZC4KKworKiBOZXcgY29tbWFuZHMgYW5kIG9wdGlvbnMuCisKKyAgLSAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgdGFrZSAtLXJldmVyc2UsIHdoaWNoIGluc3RydWN0cyB0aGVtCisgICAgdG8gZ2l2ZSB0aGVpciBvdXRwdXQgaW4gdGhlIG9yZGVyIG9wcG9zaXRlIGZyb20gdGhlaXIgdXN1YWwuCisgICAgVGhleSB0eXBpY2FsbHkgb3V0cHV0IGZyb20gbmV3IHRvIG9sZCwgYnV0IHdpdGggdGhpcyBvcHRpb24KKyAgICB0aGVpciBvdXRwdXQgd291bGQgcmVhZCBmcm9tIG9sZCB0byBuZXcuICAiZ2l0IHNob3J0bG9nIgorICAgIHVzdWFsbHkgbGlzdHMgb2xkZXIgY29tbWl0cyBmaXJzdCwgYnV0IHdpdGggdGhpcyBvcHRpb24sCisgICAgdGhleSBhcmUgc2hvd24gZnJvbSBuZXcgdG8gb2xkLgorCisgIC0gImdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OjxzdHJpbmc+IiB0byBhbGxvdyBtb3JlIGZsZXhpYmxlCisgICAgY3VzdG9tIGxvZyBvdXRwdXQuCisKKyAgLSAiZ2l0IGRpZmYiIGxlYXJuZWQgLS1pZ25vcmUtc3BhY2UtYXQtZW9sLiAgVGhpcyBpcyBhIHdlYWtlcgorICAgIGZvcm0gb2YgLS1pZ25vcmUtc3BhY2UtY2hhbmdlLgorCisgIC0gImdpdCBkaWZmIC0tbm8taW5kZXggcGF0aEEgcGF0aEIiIGNhbiBiZSB1c2VkIGFzIGRpZmYKKyAgICByZXBsYWNlbWVudCB3aXRoIGdpdCBzcGVjaWZpYyBlbmhhbmNlbWVudHMuCisKKyAgLSAiZ2l0IGRpZmYgLS1uby1pbmRleCIgY2FuIHJlYWQgZnJvbSAnLScgKHN0YW5kYXJkIGlucHV0KS4KKworICAtICJnaXQgZGlmZiIgYWxzbyBsZWFybmVkIC0tZXhpdC1jb2RlIHRvIGV4aXQgd2l0aCBub24temVybworICAgIHN0YXR1cyB3aGVuIGl0IGZvdW5kIGRpZmZlcmVuY2VzLiAgSW4gdGhlIGZ1dHVyZSB3ZSBtaWdodAorICAgIHdhbnQgdG8gbWFrZSB0aGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGF0IHdvdWxkIGJlIGEgcmF0aGVyIGJpZworICAgIGJhY2t3YXJkIGluY29tcGF0aWJsZSBjaGFuZ2U7IGl0IHdpbGwgc3RheSBhcyBhbiBvcHRpb24gZm9yCisgICAgbm93LgorCisgIC0gImdpdCBkaWZmIC0tcXVpZXQiIGlzIC0tZXhpdC1jb2RlIHdpdGggb3V0cHV0IHR1cm5lZCBvZmYsCisgICAgbWVhbnQgZm9yIHNjcmlwdGVkIHVzZSB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBpcyBhbnkKKyAgICB0cmVlLWxldmVsIGRpZmZlcmVuY2UuCisKKyAgLSBUZXh0dWFsIHBhdGNoIGdlbmVyYXRpb24gd2l0aCAiZ2l0IGRpZmYiIHdpdGhvdXQgLXcvLWIKKyAgICBvcHRpb24gaGFzIGJlZW4gc2lnbmlmaWNhbnRseSBvcHRpbWl6ZWQuICAiZ2l0IGJsYW1lIiBnb3QKKyAgICBmYXN0ZXIgYmVjYXVzZSBvZiB0aGUgc2FtZSBjaGFuZ2UuCisKKyAgLSAiZ2l0IGxvZyIgYW5kICJnaXQgcmV2LWxpc3QiIGhhcyBiZWVuIG9wdGltaXplZAorICAgIHNpZ25pZmljYW50bHkgd2hlbiB0aGV5IGFyZSB1c2VkIHdpdGggcGF0aHNwZWNzLgorCisgIC0gImdpdCBicmFuY2ggLS10cmFjayIgY2FuIGJlIHVzZWQgdG8gc2V0IHVwIGNvbmZpZ3VyYXRpb24KKyAgICB2YXJpYWJsZXMgdG8gaGVscCBpdCBlYXNpZXIgdG8gYmFzZSB5b3VyIHdvcmsgb24gYnJhbmNoZXMKKyAgICB5b3UgdHJhY2sgZnJvbSBhIHJlbW90ZSBzaXRlLgorCisgIC0gImdpdCBmb3JtYXQtcGF0Y2ggLS1hdHRhY2giIG5vdyBlbWl0cyBhdHRhY2htZW50cy4gIFVzZQorICAgIC0taW5saW5lIHRvIGdldCBhbiBpbmxpbmVkIG11bHRpcGFydC9taXhlZC4KKworICAtICJnaXQgbmFtZS1yZXYiIGxlYXJuZWQgLS1yZWZzPTxwYXR0ZXJuPiwgdG8gbGltaXQgdGhlIHRhZ3MKKyAgICB1c2VkIGZvciBuYW1pbmcgdGhlIGdpdmVuIHJldmlzaW9ucyBvbmx5IHRvIHRoZSBvbmVzCisgICAgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm4uCisKKyAgLSAiZ2l0IHJlbW90ZSB1cGRhdGUiIGlzIHRvIHJ1biAiZ2l0IGZldGNoIiBmb3IgZGVmaW5lZCByZW1vdGVzCisgICAgdG8gdXBkYXRlIHRyYWNraW5nIGJyYW5jaGVzLgorCisgIC0gImdpdCBjdnNpbXBvcnQiIGNhbiBub3cgdGFrZSAnLWQnIHRvIHRhbGsgd2l0aCBhIENWUworICAgIHJlcG9zaXRvcnkgZGlmZmVyZW50IGZyb20gd2hhdCBhcmUgcmVjb3JkZWQgaW4gQ1ZTL1Jvb3QKKyAgICAob3ZlcnJpZGluZyBpdCB3aXRoIGVudmlyb25tZW50IENWU1JPT1QgZG9lcyBub3Qgd29yaykuCisKKyAgLSAiZ2l0IGJ1bmRsZSIgY2FuIGhlbHAgc25lYWtlci1uZXR0aW5nIHlvdXIgY2hhbmdlcyBiZXR3ZWVuCisgICAgcmVwb3NpdG9yaWVzLgorCisgIC0gImdpdCBtZXJnZXRvb2wiIGNhbiBoZWxwIDMtd2F5IGZpbGUtbGV2ZWwgY29uZmxpY3QKKyAgICByZXNvbHV0aW9uIHdpdGggeW91ciBmYXZvcml0ZSBncmFwaGljYWwgbWVyZ2UgdG9vbHMuCisKKyAgLSBBIG5ldyBjb25maWd1cmF0aW9uICJjb3JlLnN5bWxpbmtzIiBjYW4gYmUgdXNlZCB0byBkaXNhYmxlCisgICAgc3ltbGlua3Mgb24gZmlsZXN5c3RlbXMgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGVtOyB0aGV5IGFyZQorICAgIGNoZWNrZWQgb3V0IGFzIHJlZ3VsYXIgZmlsZXMgaW5zdGVhZC4KKworICAtIFlvdSBjYW4gbmFtZSBhIGNvbW1pdCBvYmplY3Qgd2l0aCBpdHMgZmlyc3QgbGluZSBvZiB0aGUKKyAgICBtZXNzYWdlLiAgVGhlIHN5bnRheCB0byB1c2UgaXMgJzovbWVzc2FnZSB0ZXh0Jy4gIEUuZy4KKworICAgICQgZ2l0IHNob3cgIjovb2JqZWN0IG5hbWU6IGludHJvZHVjZSAnOi88b25lbGluZSBwcmVmaXg+JyBub3RhdGlvbiIKKworICAgIG1lYW5zIHRoZSBzYW1lIHRoaW5nIGFzOgorCisgICAgJCBnaXQgc2hvdyAyOGE0ZDk0MDQ0MzgwNjQxMmVmZmEyNDZlY2M3NzY4YTIxNTUzZWM3CisKKyAgLSAiZ2l0IGJpc2VjdCIgbGVhcm5lZCBhIG5ldyBjb21tYW5kICJydW4iIHRoYXQgdGFrZXMgYSBzY3JpcHQKKyAgICB0byBydW4gYWZ0ZXIgZWFjaCByZXZpc2lvbiBpcyBjaGVja2VkIG91dCB0byBkZXRlcm1pbmUgaWYgaXQKKyAgICBpcyBnb29kIG9yIGJhZCwgdG8gYXV0b21hdGUgdGhlIGJpc2VjdGlvbiBwcm9jZXNzLgorCisgIC0gImdpdCBsb2ciIGZhbWlseSBsZWFybmVkIGEgbmV3IHRyYXZlcnNhbCBvcHRpb24gLS1maXJzdC1wYXJlbnQsCisgICAgd2hpY2ggZG9lcyB3aGF0IHRoZSBuYW1lIHN1Z2dlc3RzLgorCisKKyogVXBkYXRlZCBiZWhhdmlvciBvZiBleGlzdGluZyBjb21tYW5kcy4KKworICAtICJnaXQtbWVyZ2UtcmVjdXJzaXZlIiB1c2VkIHRvIGJhcmYgd2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuCisgICAgb25lIGNvbW1vbiBhbmNlc3RvcnMgZm9yIHRoZSBtZXJnZSwgYW5kIG1lcmdpbmcgdGhlbSBoYWQgYQorICAgIHJlbmFtZS9yZW5hbWUgY29uZmxpY3QuICBUaGlzIGhhcyBiZWVuIGZpeGVkLgorCisgIC0gImdpdCBmc2NrIiBkb2VzIG5vdCBiYXJmIG9uIGNvcnJ1cHQgbG9vc2Ugb2JqZWN0cy4KKworICAtICJnaXQgcm0iIGRvZXMgbm90IHJlbW92ZSBuZXdseSBhZGRlZCBmaWxlcyB3aXRob3V0IC1mLgorCisgIC0gImdpdCBhcmNoaW1wb3J0IiBhbGxvd3MgcmVtYXBwaW5nIHdoZW4gY29taW5nIHVwIHdpdGggZ2l0CisgICAgYnJhbmNoIG5hbWVzIGZyb20gYXJjaCBuYW1lcy4KKworICAtIGdpdC1zdm4gZ290IGFsbW9zdCBhIHJld3JpdGUuCisKKyAgLSBjb3JlLmF1dG9jcmxmIGNvbmZpZ3VyYXRpb24sIHdoZW4gc2V0IHRvICd0cnVlJywgbWFrZXMgZ2l0CisgICAgdG8gY29udmVydCBDUkxGIGF0IHRoZSBlbmQgb2YgbGluZXMgaW4gdGV4dCBmaWxlcyB0byBMRiB3aGVuCisgICAgcmVhZGluZyBmcm9tIHRoZSBmaWxlc3lzdGVtLCBhbmQgY29udmVydCBpbiByZXZlcnNlIHdoZW4KKyAgICB3cml0aW5nIHRvIHRoZSBmaWxlc3lzdGVtLiAgVGhlIHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8KKyAgICAnaW5wdXQnLCBpbiB3aGljaCBjYXNlIHRoZSBjb252ZXJzaW9uIGhhcHBlbnMgb25seSB3aGlsZQorICAgIHJlYWRpbmcgZnJvbSB0aGUgZmlsZXN5c3RlbSBidXQgZmlsZXMgYXJlIHdyaXR0ZW4gb3V0IHdpdGgKKyAgICBMRiBhdCB0aGUgZW5kIG9mIGxpbmVzLiAgQ3VycmVudGx5LCB3aGljaCBwYXRocyB0byBjb25zaWRlcgorICAgICd0ZXh0JyAoaS5lLiBiZSBzdWJqZWN0ZWQgdG8gdGhlIGF1dG9jcmxmIG1lY2hhbmlzbSkgaXMKKyAgICBkZWNpZGVkIHB1cmVseSBiYXNlZCBvbiB0aGUgY29udGVudHMsIGJ1dCB0aGUgcGxhbiBpcyB0bworICAgIGFsbG93IHVzZXJzIHRvIGV4cGxpY2l0bHkgb3ZlcnJpZGUgdGhpcyBoZXVyaXN0aWMgYmFzZWQgb24KKyAgICBwYXRocy4KKworICAtIFRoZSBiZWhhdmlvciBvZiAnZ2l0LWFwcGx5Jywgd2hlbiBydW4gaW4gYSBzdWJkaXJlY3RvcnksCisgICAgd2l0aG91dCAtLWluZGV4IG5vciAtLWNhY2hlZCB3ZXJlIGluY29uc2lzdGVudCB3aXRoIHRoYXQgb2YKKyAgICB0aGUgY29tbWFuZCB3aXRoIHRoZXNlIG9wdGlvbnMuICBUaGlzIHdhcyBmaXhlZCB0byBtYXRjaCB0aGUKKyAgICBiZWhhdmlvciB3aXRoIC0taW5kZXguICBBIHBhdGNoIHRoYXQgaXMgbWVhbnQgdG8gYmUgYXBwbGllZAorICAgIHdpdGggLXAxIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSBwcm9qZWN0IHRyZWUgY2FuIGJlCisgICAgYXBwbGllZCB3aXRoIGFueSBjdXN0b20gLXA8bj4gb3B0aW9uLiAgQSBwYXRjaCB0aGF0IGlzIG5vdAorICAgIHJlbGF0aXZlIHRvIHRoZSB0b3BsZXZlbCBuZWVkcyB0byBiZSBhcHBsaWVkIHdpdGggLXA8bj4KKyAgICBvcHRpb24gd2l0aCBvciB3aXRob3V0IC0taW5kZXggKG9yIC0tY2FjaGVkKS4KKworICAtICJnaXQgZGlmZiIgb3V0cHV0cyBhIHRyYWlsaW5nIEhUIHdoZW4gcGF0aG5hbWVzIGhhdmUgZW1iZWRkZWQKKyAgICBTUCBvbiArKysvLS0tIGhlYWRlciBsaW5lcywgaW4gb3JkZXIgdG8gaGVscCAiR05VIHBhdGNoIiB0bworICAgIHBhcnNlIGl0cyBvdXRwdXQuICAiZ2l0IGFwcGx5IiB3YXMgYWxyZWFkeSB1cGRhdGVkIHRvIGFjY2VwdAorICAgIHRoaXMgbW9kaWZpZWQgb3V0cHV0IGZvcm1hdCBzaW5jZSBjZTc0NjE4ZCAoU2VwIDIyLCAyMDA2KS4KKworICAtICJnaXQgY3Zzc2VydmVyIiBydW5zIGhvb2tzL3VwZGF0ZSBhbmQgaG9ub3JzIGl0cyBleGl0IHN0YXR1cy4KKworICAtICJnaXQgY3Zzc2VydmVyIiBjYW4gYmUgdG9sZCB0byBzZW5kIGV2ZXJ5dGhpbmcgd2l0aCAta2IuCisKKyAgLSAiZ2l0IGRpZmYgLS1jaGVjayIgYWxzbyBob25vcnMgdGhlIC0tY29sb3Igb3V0cHV0IG9wdGlvbi4KKworICAtICJnaXQgbmFtZS1yZXYiIHVzZWQgdG8gc3RyZXNzIHRoZSBmYWN0IHRoYXQgYSByZWYgaXMgYSB0YWcgdG9vCisgICAgbXVjaCwgYnkgc2F5aW5nIHNvbWV0aGluZyBsaWtlICJ2MS4yLjNeMH4yMiIuICBJdCBub3cgc2F5cworICAgICJ2MS4yLjN+MjIiIGluIHN1Y2ggYSBjYXNlIChpdCBzdGlsbCBzYXlzICJ2MS4yLjNeMCIgaWYgaXQgZG9lcworICAgIG5vdCB0YWxrIGFib3V0IGFuIGFuY2VzdG9yIG9mIHRoZSBjb21taXQgdGhhdCBpcyB0YWdnZWQsIHdoaWNoCisgICAgbWFrZXMgc2Vuc2UpLgorCisgIC0gImdpdCByZXYtbGlzdCAtLWJvdW5kYXJ5IiBub3cgc2hvd3MgYm91bmRhcnkgbWFya2VycyBmb3IgdGhlCisgICAgY29tbWl0cyBvbWl0dGVkIGJ5IC0tbWF4LWFnZSBhbmQgLS1tYXgtY291bnQgY29uZGl0aW9uLgorCisgIC0gVGhlIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtIG5vdyByZWFkcyAkKHByZWZpeCkvZXRjL2dpdGNvbmZpZy4KKworICAtICJnaXQgYXBwbHkgLS12ZXJib3NlIiBzaG93cyB3aGF0IHByZWltYWdlIGxpbmVzIHdlcmUgd2FudGVkCisgICAgd2hlbiBpdCBjb3VsZG4ndCBmaW5kIHRoZW0uCisKKyAgLSAiZ2l0IHN0YXR1cyIgaW4gYSByZWFkLW9ubHkgcmVwb3NpdG9yeSBnb3QgYSBiaXQgc2FuZXIuCisKKyAgLSAiZ2l0IGZldGNoIiAoaGVuY2UgImdpdCBjbG9uZSIgYW5kICJnaXQgcHVsbCIpIGFyZSBsZXNzCisgICAgbm9pc3kgd2hlbiB0aGUgb3V0cHV0IGRvZXMgbm90IGdvIHRvIHR0eS4KKworICAtICJnaXQgZmV0Y2giIGJldHdlZW4gcmVwb3NpdG9yaWVzIHdpdGggbWFueSByZWZzIHdlcmUgc2xvdworICAgIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbm90IG1hbnkgY2hhbmdlcyB0aGF0IG5lZWRlZAorICAgIHRyYW5zZmVycmluZy4gIFRoaXMgaGFzIGJlZW4gc3BlZCB1cCBieSBwYXJ0aWFsbHkgcmV3cml0aW5nCisgICAgdGhlIGhlYXZpZXN0IHBhcnRzIGluIEMuCisKKyAgLSAiZ2l0IG1haWxpbmZvIiB3aGljaCBzcGxpdHMgYW4gZS1tYWlsIGludG8gYSBwYXRjaCBhbmQgdGhlCisgICAgbWV0YS1pbmZvcm1hdGlvbiB3YXMgcmV3cml0dGVuLCB0aGFua3MgdG8gRG9uIFppY2t1cy4gIEl0CisgICAgaGFuZGxlcyBuZXN0ZWQgbXVsdGlwYXJ0IGJldHRlci4gIFRoZSBjb21tYW5kIHdhcyBicm9rZW4gZm9yCisgICAgYSBicmllZiBwZXJpb2Qgb24gJ21hc3RlcicgYnJhbmNoIHNpbmNlIDEuNS4wIGJ1dCB0aGUKKyAgICBicmVha2FnZSBpcyBmaXhlZCBub3cuCisKKyAgLSBzZW5kLWVtYWlsIGxlYXJuZWQgY29uZmlndXJhYmxlIGJjYyBhbmQgY2hhaW4tcmVwbHktdG8uCisKKyAgLSAiZ2l0IHJlbW90ZSBzaG93ICRyZW1vdGUiIGFsc28gdGFsa3MgYWJvdXQgYnJhbmNoZXMgdGhhdAorICAgIHdvdWxkIGJlIHB1c2hlZCBpZiB5b3UgcnVuICJnaXQgcHVzaCByZW1vdGUiLgorCisgIC0gVXNpbmcgb2JqZWN0cyBmcm9tIHBhY2tzIGlzIG5vdyBzZXJpb3VzbHkgb3B0aW1pemVkIGJ5IGNsZXZlcgorICAgIHVzZSBvZiBhIGNhY2hlLiAgVGhpcyBzaG91bGQgYmUgbW9zdCBub3RpY2VhYmxlIGluIGdpdC1sb2cKKyAgICBmYW1pbHkgb2YgY29tbWFuZHMgdGhhdCBpbnZvbHZlIHJlYWRpbmcgbWFueSB0cmVlIG9iamVjdHMuCisgICAgSW4gYWRkaXRpb24sIHRyYXZlcnNpbmcgcmV2aXNpb25zIHdoaWxlIGZpbHRlcmluZyBjaGFuZ2VzCisgICAgd2l0aCBwYXRoc3BlY3MgaXMgbWFkZSBmYXN0ZXIgYnkgdGVybWluYXRpbmcgdGhlIGNvbXBhcmlzb24KKyAgICBiZXR3ZWVuIHRoZSB0cmVlcyBhcyBlYXJseSBhcyBwb3NzaWJsZS4KKworCisqIEhvb2tzCisKKyAgLSBUaGUgcGFydCB0byBzZW5kIG91dCBub3RpZmljYXRpb24gZS1tYWlscyB3YXMgcmVtb3ZlZCBmcm9tCisgICAgdGhlIHNhbXBsZSB1cGRhdGUgaG9vaywgYXMgaXQgd2FzIG5vdCBhbiBhcHByb3ByaWF0ZSBwbGFjZQorICAgIHRvIGRvIHNvLiAgVGhlIHByb3BlciBwbGFjZSB0byBkbyB0aGlzIGlzIHRoZSBuZXcgcG9zdC1yZWNlaXZlCisgICAgaG9vay4gIEFuIGV4YW1wbGUgaG9vayBoYXMgYmVlbiBhZGRlZCB0byBjb250cmliL2hvb2tzLy4KKworCisqIE90aGVycworCisgIC0gZ2l0LXJldmVydCwgZ2l0LWdjIGFuZCBnaXQtY2hlcnJ5LXBpY2sgYXJlIG5vdyBidWlsdC1pbnMuCisKK0ZpeGVzIHNpbmNlIHYxLjUuMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGFyZSBhbGwgaW4gdjEuNS4wLnggc2VyaWVzLgorCisqIERvY3VtZW50YXRpb24gdXBkYXRlcworCisgIC0gQ2xhcmlmaWNhdGlvbnMgYW5kIGNvcnJlY3Rpb25zIHRvIDEuNS4wIHJlbGVhc2Ugbm90ZXMuCisKKyAgLSBUaGUgbWFpbiBkb2N1bWVudGF0aW9uIGRpZCBub3QgbGluayB0byBnaXQtcmVtb3RlIGRvY3VtZW50YXRpb24uCisKKyAgLSBDbGFyaWZpZWQgaW50cm9kdWN0b3J5IHRleHQgb2YgZ2l0LXJlYmFzZSBkb2N1bWVudGF0aW9uLgorCisgIC0gQ29udmVydGVkIHJlbWFpbmluZyBtZW50aW9ucyBvZiB1cGRhdGUtaW5kZXggb24gUG9yY2VsYWluCisgICAgZG9jdW1lbnRzIHRvIGdpdC1hZGQvZ2l0LXJtLgorCisgIC0gU29tZSBpMThuLiogY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2VyZSBpbmNvcnJlY3RseQorICAgIGRlc2NyaWJlZCBhcyBjb3JlLio7IGZpeGVkLgorCisgIC0gYWRkZWQgYW5kIGNsYXJpZmllZCBjb3JlLmJhcmUsIGNvcmUubGVnYWN5aGVhZGVycyBjb25maWd1cmF0aW9ucy4KKworICAtIHVwZGF0ZWQgImdpdC1jbG9uZSAtLWRlcHRoIiBkb2N1bWVudGF0aW9uLgorCisgIC0gdXNlci1tYW51YWwgdXBkYXRlcy4KKworICAtIE9wdGlvbnMgdG8gJ2dpdCByZW1vdGUgYWRkJyB3ZXJlIGRlc2NyaWJlZCBpbnN1ZmZpY2llbnRseS4KKworICAtIENvbmZpZ3VyYXRpb24gZm9ybWF0LnN1ZmZpeCB3YXMgbm90IGRvY3VtZW50ZWQuCisKKyAgLSBPdGhlciBmb3JtYXR0aW5nIGFuZCBzcGVsbGluZyBmaXhlcy4KKworICAtIHVzZXItbWFudWFsIGhhcyBiZXR0ZXIgY3Jvc3MgcmVmZXJlbmNlcy4KKworICAtIGdpdHdlYiBpbnN0YWxsYXRpb24vZGVwbG95bWVudCBwcm9jZWR1cmUgaXMgbm93IGRvY3VtZW50ZWQuCisKKworKiBCdWdmaXhlcworCisgIC0gZ2l0LXVwbG9hZC1wYWNrIGNsb3NlcyB1bnVzZWQgcGlwZSBlbmRzOyBlYXJsaWVyIHRoaXMgY2F1c2VkCisgICAgbWFueSB6b21iaWVzIHRvIGhhbmcgYXJvdW5kLgorCisgIC0gZ2l0LXJlcmVyZSB3YXMgcmVjb3JkaW5nIHRoZSBjb250ZW50cyBvZiBlYXJsaWVyIGh1bmtzCisgICAgZHVwbGljYXRlZCBpbiBsYXRlciBodW5rcy4gIFRoaXMgcHJldmVudGVkIHJlc29sdmluZyB0aGUgc2FtZQorICAgIGNvbmZsaWN0IHdoZW4gcGVyZm9ybWluZyB0aGUgc2FtZSBtZXJnZSB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKworICAtIGdpdC1hZGQgYW5kIGdpdC11cGRhdGUtaW5kZXggb24gYSBmaWxlc3lzdGVtIG9uIHdoaWNoCisgICAgZXhlY3V0YWJsZSBiaXRzIGFyZSB1bnJlbGlhYmxlIGluY29ycmVjdGx5IHJldXNlZCBzdF9tb2RlCisgICAgYml0cyBldmVuIHdoZW4gdGhlIHBhdGggY2hhbmdlZCBiZXR3ZWVuIHN5bWxpbmsgYW5kIHJlZ3VsYXIKKyAgICBmaWxlLgorCisgIC0gZ2l0LWRhZW1vbiBtYXJrcyB0aGUgbGlzdGVuaW5nIHNvY2tldHMgd2l0aCBGRF9DTE9FWEVDIHNvCisgICAgdGhhdCBpdCB3b24ndCBiZSBsZWFrZWQgaW50byB0aGUgY2hpbGRyZW4uCisKKyAgLSBzZWdmYXVsdCBmcm9tIGdpdC1ibGFtZSB3aGVuIHRoZSBtYW5kYXRvcnkgcGF0aG5hbWUKKyAgICBwYXJhbWV0ZXIgd2FzIG1pc3Npbmcgd2FzIGZpeGVkOyB1c2FnZSgpIG1lc3NhZ2UgaXMgZ2l2ZW4KKyAgICBpbnN0ZWFkLgorCisgIC0gZ2l0LXJldi1saXN0IGRpZCBub3QgcmVhZCAkR0lUX0RJUi9jb25maWcgZmlsZSwgd2hpY2ggbWVhbnMKKyAgICB0aGF0IGRpZCBub3QgaG9ub3IgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBjb3JyZWN0bHkuCisKKyAgLSBBdXRvbWF0ZWQgbWVyZ2UgY29uZmxpY3QgaGFuZGxpbmcgd2hlbiBjaGFuZ2VzIHRvIHN5bWJvbGljCisgICAgbGlua3MgY29uZmxpY3RlZCB3ZXJlIGNvbXBsZXRlbHkgYnJva2VuLiAgVGhlIG1lcmdlLXJlc29sdmUKKyAgICBzdHJhdGVneSBjcmVhdGVkIGEgcmVndWxhciBmaWxlIHdpdGggY29uZmxpY3QgbWFya2VycyBpbiBpdAorICAgIGluIHBsYWNlIG9mIHRoZSBzeW1ib2xpYyBsaW5rLiAgVGhlIGRlZmF1bHQgc3RyYXRlZ3ksCisgICAgbWVyZ2UtcmVjdXJzaXZlIHdhcyBldmVuIG1vcmUgYnJva2VuLiAgSXQgcmVtb3ZlZCB0aGUgcGF0aAorICAgIHRoYXQgd2FzIHBvaW50ZWQgYXQgYnkgdGhlIHN5bWJvbGljIGxpbmsuICBCb3RoIG9mIHRoZXNlCisgICAgcHJvYmxlbXMgaGF2ZSBiZWVuIGZpeGVkLgorCisgIC0gJ2dpdCBkaWZmIG1haW50IG1hc3RlciBuZXh0JyBkaWQgbm90IGNvcnJlY3RseSBnaXZlIGNvbWJpbmVkCisgICAgZGlmZiBhY3Jvc3MgdGhyZWUgdHJlZXMuCisKKyAgLSAnZ2l0IGZhc3QtaW1wb3J0JyBwb3J0YWJpbGl0eSBmaXggZm9yIFNvbGFyaXMuCisKKyAgLSAnZ2l0IHNob3ctcmVmIC0tdmVyaWZ5JyB3aXRob3V0IGFyZ3VtZW50cyBkaWQgbm90IGVycm9yIG91dAorICAgIGJ1dCBzZWdmYXVsdGVkLgorCisgIC0gJ2dpdCBkaWZmIDp0cmFja2VkLWZpbGUgYHB3ZGAvYW4tdW50cmFja2VkLWZpbGUnIGdhdmUgYW4gZXh0cmEKKyAgICBzbGFzaGVzIGFmdGVyIGEvIGFuZCBiLy4KKworICAtICdnaXQgZm9ybWF0LXBhdGNoJyBwcm9kdWNlZCB0b28gbG9uZyBmaWxlbmFtZXMgaWYgdGhlIGNvbW1pdAorICAgIG1lc3NhZ2UgaGFkIHRvbyBsb25nIGxpbmUgYXQgdGhlIGJlZ2lubmluZy4KKworICAtIFJ1bm5pbmcgJ21ha2UgYWxsJyBhbmQgdGhlbiB3aXRob3V0IGNoYW5naW5nIGFueXRoaW5nCisgICAgcnVubmluZyAnbWFrZSBpbnN0YWxsJyBzdGlsbCByZWJ1aWx0IHNvbWUgZmlsZXMuICBUaGlzCisgICAgd2FzIGluY29udmVuaWVudCB3aGVuIGJ1aWxkaW5nIGFzIHlvdXJzZWxmIGFuZCB0aGVuCisgICAgaW5zdGFsbGluZyBhcyByb290IChlc3BlY2lhbGx5IHByb2JsZW1hdGljIHdoZW4gdGhlIHNvdXJjZQorICAgIGRpcmVjdG9yeSBpcyBvbiBORlMgYW5kIHJvb3QgaXMgbWFwcGVkIHRvIG5vYm9keSkuCisKKyAgLSAnZ2l0LXJlcmVyZScgZmFpbGVkIHRvIGRlYWwgd2l0aCB0d28gdW5jb25mbGljdGVkIHBhdGhzIHRoYXQKKyAgICBzb3J0ZWQgbmV4dCB0byBlYWNoIG90aGVyLgorCisgIC0gJ2dpdC1yZXJlcmUnIGF0dGVtcHRlZCB0byBvcGVuKDIpIGEgc3ltbGluayBhbmQgZmFpbGVkIGlmCisgICAgdGhlcmUgd2FzIGEgY29uZmxpY3QuICBTaW5jZSBhIGNvbmZsaWN0aW5nIGNoYW5nZSB0byBhCisgICAgc3ltbGluayB3b3VsZCBub3QgYmVuZWZpdCBmcm9tIHJlcmVyZSBhbnl3YXksIHRoZSBjb21tYW5kCisgICAgbm93IGlnbm9yZXMgY29uZmxpY3RpbmcgY2hhbmdlcyB0byBzeW1saW5rcy4KKworICAtICdnaXQtcmVwYWNrJyBkaWQgbm90IGxpa2UgdG8gcGFzcyBtb3JlIHRoYW4gNjQgYXJndW1lbnRzCisgICAgaW50ZXJuYWxseSB0byB1bmRlcmx5aW5nICdyZXYtbGlzdCcgbG9naWMsIHdoaWNoIG1hZGUgaXQKKyAgICBpbXBvc3NpYmxlIHRvIHJlcGFjayBhZnRlciBhY2N1bXVsYXRpbmcgbWFueSAoc21hbGwpIHBhY2tzCisgICAgaW4gdGhlIHJlcG9zaXRvcnkuCisKKyAgLSAnZ2l0LWRpZmYnIHRvIHJldmlldyB0aGUgY29tYmluZWQgZGlmZiBkdXJpbmcgYSBjb25mbGljdGVkCisgICAgbWVyZ2Ugd2VyZSBub3QgcmVhZGluZyB0aGUgd29ya2luZyB0cmVlIHZlcnNpb24gY29ycmVjdGx5CisgICAgd2hlbiBjaGFuZ2VzIHRvIGEgc3ltYm9saWMgbGluayBjb25mbGljdGVkLiAgSXQgc2hvdWxkIGhhdmUKKyAgICByZWFkIHRoZSBkYXRhIHVzaW5nIHJlYWRsaW5rKDIpIGJ1dCByZWFkIGZyb20gdGhlIHJlZ3VsYXIKKyAgICBmaWxlIHRoZSBzeW1ib2xpYyBsaW5rIHBvaW50ZWQgYXQuCisKKyAgLSAnZ2l0LXJlbW90ZScgZGlkIG5vdCBsaWtlIHBlcmlvZCBpbiBhIHJlbW90ZSdzIG5hbWUuCisKKyAgLSAnZ2l0LmVsJyBob25vcnMgdGhlIGNvbW1pdCBjb2Rpbmcgc3lzdGVtIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24uCisKKyAgLSAnYmxhbWV2aWV3JyBpbiBjb250cmliLyBjb3JyZWN0bHkgZGlncyBkZWVwZXIgd2hlbiBhIGxpbmUgaXMKKyAgICBjbGlja2VkLgorCisgIC0gJ2h0dHAtcHVzaCcgY29ycmVjdGx5IG1ha2VzIHN1cmUgdGhlIHJlbW90ZSBzaWRlIGhhcyBsZWFkaW5nCisgICAgcGF0aC4gIEVhcmxpZXIgaXQgc3RhcnRlZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwYXRoLCBhbmQKKyAgICBpbmNvcnJlY3RseS4KKworICAtICdnaXQtbWVyZ2UnIGRpZCBub3QgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyB3aGVuIHRoZQorICAgIHdvcmtpbmcgdHJlZSB3YXMgZGlydHkgYW5kIGNhbm5vdCBmYXN0IGZvcndhcmQuICBJdCBkb2VzCisgICAgbm93LgorCisgIC0gJ2N2c2V4cG9ydGNvbW1pdCcgZG9lcyBub3QgbG9zZSB5ZXQtdG8tYmUtdXNlZCBtZXNzYWdlIGZpbGUuCisKKyAgLSBpbnQtdnMtc2l6ZV90IHR5cGVmaXggd2hlbiBydW5uaW5nIGNvbWJpbmVkIGRpZmYgb24gZmlsZXMKKyAgICBvdmVyIDJHQiBsb25nLgorCisgIC0gJ2dpdCBhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAnIHNob3VsZCBub3QgdG91Y2ggdW5tb2RpZmllZAorICAgIGxpbmVzLgorCisgIC0gJ2dpdC1tYWlsaW5mbycgY2hva2Ugd2hlbiBhIGxvZ2ljYWwgaGVhZGVyIGxpbmUgd2FzIHRvbyBsb25nLgorCisgIC0gJ2dpdCBzaG93IEEuLkInIGRpZCBub3QgZXJyb3Igb3V0LiAgTmVnYXRpdmUgcmVmICgibm90IEEiIGluCisgICAgdGhpcyBleGFtcGxlKSBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciB0aGUgcHVycG9zZSBvZiB0aGUKKyAgICBjb21tYW5kLCBzbyBub3cgaXQgZXJyb3JzIG91dC4KKworICAtICdnaXQgZm10LW1lcmdlLW1zZyAtLWZpbGUnIHdpdGhvdXQgZmlsZSBwYXJhbWV0ZXIgZGlkIG5vdAorICAgIGNvcnJlY3RseSBlcnJvciBvdXQuCisKKyAgLSAnZ2l0IGFyY2hpbXBvcnQnIGJhcmZlZCB1cG9uIGVuY291bnRlcmluZyBhIGNvbW1pdCB3aXRob3V0CisgICAgc3VtbWFyeS4KKworICAtICdnaXQgaW5kZXgtcGFjaycgZGlkIG5vdCBwcm90ZWN0IGl0c2VsZiBmcm9tIGdldHRpbmcgYSBzaG9ydAorICAgIHJlYWQgb3V0IG9mIHByZWFkKDIpLgorCisgIC0gJ2dpdCBodHRwLXB1c2gnIGhhZCBhIGZldyBidWZmZXIgb3ZlcnJ1bnMuCisKKyAgLSBCdWlsZCBkZXBlbmRlbmN5IGZpeGVzIHRvIHJlYnVpbGQgZmV0Y2gubyB3aGVuIG90aGVyIGhlYWRlcnMKKyAgICBjaGFuZ2UuCisKKyAgLSBnaXQuZWwgZG9lcyBub3QgYWRkIGR1cGxpY2F0ZSBzaWduLW9mZiBsaW5lcy4KKworICAtIGdpdC1jb21taXQgc2hvd3MgdGhlIGZ1bGwgc3RhdCBvZiB0aGUgcmVzdWx0aW5nIGNvbW1pdCwgbm90CisgICAganVzdCBhYm91dCB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGVuIHJ1biBmcm9tCisgICAgYSBzdWJkaXJlY3RvcnkuCisKKyAgLSAiZ2l0LWNoZWNrb3V0IC1tICdAezggaG91cnMgYWdvfSciIGhhZCBhIGZ1bm55IGZhaWx1cmUgZnJvbQorICAgIGV2YWw7IGZpeGVkLgorCisgIC0gZ2l0LW1lcmdlIChoZW5jZSBnaXQtcHVsbCkgZGlkIG5vdCByZWZ1c2UgZmFzdC1mb3J3YXJkaW5nCisgICAgd2hlbiB0aGUgd29ya2luZyB0cmVlIGhhZCBsb2NhbCBjaGFuZ2VzIHRoYXQgd291bGQgaGF2ZQorICAgIGNvbmZsaWN0ZWQgd2l0aCBpdC4KKworICAtIGEgaGFuZGZ1bCBzbWFsbCBmaXhlcyB0byBnaXR3ZWIuCisKKyAgLSBidWlsZCBwcm9jZWR1cmUgZm9yIHVzZXItbWFudWFsIGlzIGZpeGVkIG5vdCB0byByZXF1aXJlIGxvY2FsbHkKKyAgICBpbnN0YWxsZWQgc3R5bGVzaGVldHMuCisKKyAgLSAiZ2l0IGNvbW1pdCAkcGF0aHMiIG9uIHBhdGhzIHdob3NlIGVhcmxpZXIgY29udGVudHMgd2VyZQorICAgIGFscmVhZHkgdXBkYXRlZCBpbiB0aGUgaW5kZXggd2VyZSBmYWlsaW5nIG91dC4KKworCisqIFR3ZWFrcworCisgIC0gc2xpZGluZyBtbWFwKCkgaW5lZmZpY2llbnRseSBtbWFwZWQgdGhlIHNhbWUgcmVnaW9uIG9mIGEKKyAgICBwYWNrZmlsZSB3aXRoIGFuIGFjY2VzcyBwYXR0ZXJuIHRoYXQgdXNlZCBvYmplY3RzIGluIHRoZQorICAgIHJldmVyc2Ugb3JkZXIuICBUaGlzIGhhcyBiZWVuIG1hZGUgbW9yZSBlZmZpY2llbnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDE5ODRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4xLnR4dApAQCAtMCwwICsxLDQ3IEBACitHSVQgdjEuNS4yLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiBCdWdmaXhlcworCisgIC0gVGVtcG9yYXJ5IGZpbGVzIHRoYXQgYXJlIHVzZWQgd2hlbiBpbnZva2luZyBleHRlcm5hbCBkaWZmCisgICAgcHJvZ3JhbXMgZGlkIG5vdCB0b2xlcmF0ZSBhIGxvbmcgVE1QRElSLgorCisgIC0gZ2l0LWRhZW1vbiBkaWQgbm90IG5vdGljZSB3aGVuIGl0IGNvdWxkIG5vdCB3cml0ZSBpbnRvIGl0cworICAgIHBpZCBmaWxlLgorCisgIC0gZ2l0LXN0YXR1cyBkaWQgbm90IGhvbm9yIGNvcmUuZXhjbHVkZXNGaWxlIGNvbmZpZ3VyYXRpb24gbGlrZQorICAgIGdpdC1hZGQgZGlkLgorCisgIC0gZ2l0LWFubm90YXRlIGRpZCBub3Qgd29yayBmcm9tIGEgc3ViZGlyZWN0b3J5IHdoaWxlCisgICAgZ2l0LWJsYW1lIGRpZC4KKworICAtIGdpdC1jdnNzZXJ2ZXIgc2hvdWxkIGhhdmUgZGlzYWJsZWQgYWNjZXNzIHRvIGEgcmVwb3NpdG9yeQorICAgIHdpdGggImdpdGN2cy5wc2VydmVyLmVuYWJsZWQgPSBmYWxzZSIgc2V0IGV2ZW4gd2hlbgorICAgICJnaXRjdnMuZW5hYmxlZCA9IHRydWUiIHdhcyBzZXQgYXQgdGhlIHNhbWUgdGltZS4gIEl0CisgICAgZGlkbid0LgorCisgIC0gZ2l0LWN2c2ltcG9ydCBkaWQgbm90IHdvcmsgY29ycmVjdGx5IGluIGEgcmVwb3NpdG9yeSB3aXRoCisgICAgaXRzIGJyYW5jaCBoZWFkcyB3ZXJlIHBhY2tlZCB3aXRoIHBhY2stcmVmcy4KKworICAtIGlkZW50IHVuZXhwYW5zaW9uIHRvIHNxdWFzaCAiJElkOiB4eHggJCIgdGhhdCBpcyBpbiB0aGUKKyAgICByZXBvc2l0b3J5IGNvcHkgcmVtb3ZlZCBpbmNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzLgorCisgIC0gZ2l0LXN2biBtaXNiZWhhdmVkIHdoZW4gdGhlIHN1YnZlcnNpb24gcmVwb3NpdG9yeSBkaWQgbm90CisgICAgcHJvdmlkZSBNRDUgY2hlY2tzdW1zIGZvciBmaWxlcy4KKworICAtIGdpdCByZWJhc2UgKGFuZCBnaXQgYW0pIG1pc2JlaGF2ZWQgb24gY29tbWl0cyB0aGF0IGhhdmUgJ1xuJworICAgIChsaXRlcmFsbHkgYmFja3NsYXNoIGFuZCBlbiwgbm90IGEgbGluZWZlZWQpIGluIHRoZSB0aXRsZS4KKworICAtIGNvZGUgdG8gZGVjb2RlIGJhc2U4NSB1c2VkIGluIGJpbmFyeSBwYXRjaGVzIGhhZCBvbmUgZXJyb3IKKyAgICByZXR1cm4gY29kZXBhdGggd3JvbmcuCisKKyAgLSBSRkMyMDQ3IFEgZW5jb2Rpbmcgb3V0cHV0IGJ5IGdpdC1mb3JtYXQtcGF0Y2ggdXNlZCAnXycgZm9yIGEKKyAgICBzcGFjZSwgd2hpY2ggaXMgbm90IHVuZGVyc3Rvb2QgYnkgc29tZSBwcm9ncmFtcy4gIEl0IHVzZXMgPTIwCisgICAgd2hpY2ggaXMgc2FmZXIuCisKKyAgLSBnaXQtZmFzdGltcG9ydCAtLWltcG9ydC1tYXJrcyB3YXMgYnJva2VuOyBmaXhlZC4KKworICAtIEEgbG90IG9mIGRvY3VtZW50YXRpb24gdXBkYXRlcywgY2xhcmlmaWNhdGlvbnMgYW5kIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JmYTM0MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuMi50eHQKQEAgLTAsMCArMSw2MSBAQAorR0lUIHYxLjUuMi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFVzYWJpbGl0eSBmaXgKKworICAtIGdpdC1ndWkgaXMgc2hpcHBlZCB3aXRoIGl0cyB1cGRhdGVkIGJsYW1lIGludGVyZmFjZS4gIEl0IGlzCisgICAgcnVtb3JlZCB0aGF0IHRoZSBvbGRlciBvbmUgd2FzIG5vdCBqdXN0IHVudXNhYmxlIGJ1dCB3YXMKKyAgICBhY3RpdmUgaGVhbHRoIGhhemFyZCwgYnV0IHRoaXMgb25lIGlzIGFjdHVhbGx5IHByZXR0eS4KKyAgICBQbGVhc2Ugc2VlIGZvciB5b3Vyc2VsZi4KKworKiBCdWdmaXhlcworCisgIC0gImdpdCBjaGVja291dCBmdWJhciIgd2FzIHV0dGVybHkgY29uZnVzZWQgd2hlbiB0aGVyZSBpcyBhCisgICAgYnJhbmNoIGZ1YmFyIGFuZCBhIHRhZyBmdWJhciBhdCB0aGUgc2FtZSB0aW1lLiAgSXQgY29ycmVjdGx5CisgICAgY2hlY2tzIG91dCB0aGUgYnJhbmNoIGZ1YmFyIG5vdy4KKworICAtICJnaXQgY2xvbmUgL3BhdGgvZm9vIiB0byBjbG9uZSBhIGxvY2FsIC9wYXRoL2Zvby5naXQKKyAgICByZXBvc2l0b3J5IGxlZnQgYW4gaW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24uCisKKyAgLSAiZ2l0IHNlbmQtZW1haWwiIGNvcnJlY3RseSB1bnF1b3RlcyBSRkMgMjA0NyBxdW90ZWQgbmFtZXMgaW4KKyAgICB0aGUgcGF0Y2gtZW1haWwgYmVmb3JlIHVzaW5nIHRoZWlyIHZhbHVlcy4KKworICAtIFdlIGRpZCBub3QgYWNjZXB0IG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIGVwb2NoIG9sZGVyIHRoYW4KKyAgICB5ZWFyIDIwMDAgYXMgYSB2YWxpZCB0aW1lc3RhbXAuICBXZSBub3cgaW50ZXJwcmV0IHBvc2l0aXZlCisgICAgaW50ZWdlcnMgbW9yZSB0aGFuIDggZGlnaXRzIGFzIHN1Y2gsIHdoaWNoIGFsbG93cyB1cyB0bworICAgIGV4cHJlc3MgdGltZXN0YW1wcyBtb3JlIHJlY2VudCB0aGFuIE1hcmNoIDE5NzMuCisKKyAgLSBnaXQtY3ZzaW1wb3J0IGRpZCBub3Qgd29yayB3aGVuIHlvdSBoYXZlIEdJVF9ESVIgdG8gcG9pbnQKKyAgICB5b3VyIHJlcG9zaXRvcnkgYXQgYSBub25zdGFuZGFyZCBsb2NhdGlvbi4KKworICAtIFNvbWUgc3lzdGVtcyAobm90YWJseSwgU29sYXJpcykgbGFjayBoc3RyZXJyb3IoKSB0byBtYWtlCisgICAgaF9lcnJubyBodW1hbiByZWFkYWJsZTsgcHJlcGFyZSBhIHJlcGxhY2VtZW50CisgICAgaW1wbGVtZW50YXRpb24uCisKKyAgLSAuZ2l0aWdub3JlIGZpbGUgbGlzdGVkIGdpdC1jb3JlLnNwZWMgYnV0IHdoYXQgd2UgZ2VuZXJhdGUgaXMKKyAgICBnaXQuc3BlYywgYW5kIG5vYm9keSBub3RpY2VkIGZvciBhIGxvbmcgdGltZS4KKworICAtICJnaXQtbWVyZ2UtcmVjdXJzaXZlIiBkb2VzIG5vdCB0cnkgdG8gcnVuIGZpbGUgbGV2ZWwgbWVyZ2UKKyAgICBvbiBiaW5hcnkgZmlsZXMuCisKKyAgLSAiZ2l0LWJyYW5jaCAtLXRyYWNrIiBkaWQgbm90IGNyZWF0ZSB0cmFja2luZyBjb25maWd1cmF0aW9uCisgICAgY29ycmVjdGx5IHdoZW4gdGhlIGJyYW5jaCBuYW1lIGhhZCBzbGFzaCBpbiBpdC4KKworICAtIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHNwZWNpZmllZCB3aXRoIHVzZXIuZW1haWwKKyAgICBjb25maWd1cmF0aW9uIHdhcyBvdmVycmlkZGVuIGJ5IEVNQUlMIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgIC0gVGhlIHRyZWUgcGFyc2VyIGRpZCBub3Qgd2FybiBhYm91dCB0cmVlIGVudHJpZXMgd2l0aAorICAgIG5vbnNlbnNlIGZpbGUgbW9kZXMsIGFuZCBhc3N1bWVkIHRoZXkgbXVzdCBiZSBibG9icy4KKworICAtICJnaXQgbG9nIC16IiB3aXRob3V0IGFueSBvdGhlciByZXF1ZXN0IHRvIGdlbmVyYXRlIGRpZmYgc3RpbGwKKyAgICBpbnZva2VkIHRoZSBkaWZmIG1hY2hpbmVyeSwgd2FzdGluZyBjeWNsZXMuCisKKyogRG9jdW1lbnRhdGlvbgorCisgIC0gTWFueSB1cGRhdGVzIHRvIGZpeCBzdGFsZSBvciBtaXNzaW5nIGRvY3VtZW50YXRpb24uCisKKyAgLSBBbHRob3VnaCBvdXIgZG9jdW1lbnRhdGlvbiB3YXMgcHJpbWFyaWx5IG1lYW50IHRvIGJlIGZvcm1hdHRlZAorICAgIHdpdGggQXNjaWlEb2M3LCBmb3JtYXR0aW5nIHdpdGggQXNjaWlEb2M4IGlzIHN1cHBvcnRlZCBiZXR0ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGRiMjI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi4zLnR4dApAQCAtMCwwICsxLDI3IEBACitHSVQgdjEuNS4yLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4yLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEJ1Z2ZpeGVzCisKKyAgIC0gVmVyc2lvbiAyIHBhY2sgaW5kZXggZm9ybWF0IHdhcyBpbnRyb2R1Y2VkIGluIHZlcnNpb24gMS41LjIKKyAgICAgdG8gc3VwcG9ydCBwYWNrIGZpbGVzIHRoYXQgaGFzIG9mZnNldCB0aGF0IGNhbm5vdCBiZQorICAgICByZXByZXNlbnRlZCBpbiAzMi1iaXQuICBUaGUgcnVudGltZSBjb2RlIHRvIHZhbGlkYXRlIHN1Y2gKKyAgICAgYW4gaW5kZXggbWlzaGFuZGxlZCBzdWNoIGFuIGluZGV4IGZvciBhbiBlbXB0eSBwYWNrLgorCisgICAtIENvbW1pdCB3YWxrZXJzIChtb3N0IG5vdGFibHksIGZldGNoIG92ZXIgaHR0cCBwcm90b2NvbCkKKyAgICAgdHJpZWQgdG8gdHJhdmVyc2UgY29tbWl0IG9iamVjdHMgY29udGFpbmVkIGluIHRyZWVzIChha2EKKyAgICAgc3VicHJvamVjdCk7IHRoZXkgc2hvdWxkbid0LgorCisgICAtIEEgYnVpbGQgb3B0aW9uIE5PX1JfVE9fR0NDX0xJTktFUiB3YXMgbm90IGV4cGxhaW5lZCBpbiBNYWtlZmlsZQorICAgICBjb21tZW50IGNvcnJlY3RseS4KKworICogRG9jdW1lbnRhdGlvbiBGaXhlcyBhbmQgVXBkYXRlcworCisgICAtIGdpdC1jb25maWcgLS1yZWdleHAgd2FzIG5vdCBkb2N1bWVudGVkIHByb3Blcmx5LgorCisgICAtIGdpdC1yZXBhY2sgLWEgd2FzIG5vdCBkb2N1bWVudGVkIHByb3Blcmx5LgorCisgICAtIGdpdC1yZW1vdGUgLW4gd2FzIG5vdCBkb2N1bWVudGVkIHByb3Blcmx5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjZmY0NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjIuNC50eHQKQEAgLTAsMCArMSwyOCBAQAorR0lUIHYxLjUuMi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCdWdmaXhlcworCisgICAtICJnaXQtZ3VpIiBidWdmaXhlcywgaW5jbHVkaW5nIGEgaGFuZGZ1bCBmaXhlcyB0byBydW4gaXQKKyAgICAgYmV0dGVyIG9uIEN5Z3dpbi9NU1lTLgorCisgICAtICJnaXQgY2hlY2tvdXQiIGZhaWxlZCB0byBzd2l0Y2ggYmFjayBhbmQgZm9ydGggYmV0d2VlbgorICAgICBicmFuY2hlcywgb25lIG9mIHdoaWNoIGhhcyAiZnJvdHogLT4geHl6enkiIHN5bWxpbmsgYW5kCisgICAgIGZpbGUgInh5enp5L2ZpbGZyZSIsIHdoaWxlIHRoZSBvdGhlciBvbmUgaGFzIGEgZmlsZQorICAgICAiZnJvdHovZmlsZnJlIi4KKworICAgLSAiZ2l0IHBydW5lIiB1c2VkIHRvIHNlZ2ZhdWx0IHVwb24gc2VlaW5nIGEgY29tbWl0IHRoYXQgaXMKKyAgICAgcmVmZXJyZWQgdG8gYnkgYSB0cmVlIG9iamVjdCAoYWthICJzdWJwcm9qZWN0IikuCisKKyAgIC0gImdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgLS1uby1pbmRleCIgbWlzaGFuZGxlZCBhbiBhZGRlZCBmaWxlLgorCisgICAtICJnaXQgYXBwbHkgLS1yZXZlcnNlIC0td2hpdGVzcGFjZT13YXJuIiBzdGlsbCBjb21wbGFpbmVkCisgICAgIGFib3V0IHdoaXRlc3BhY2VzIHRoYXQgYSBmb3J3YXJkIGFwcGxpY2F0aW9uIHdvdWxkIGhhdmUKKyAgICAgaW50cm9kdWNlZC4KKworICogRG9jdW1lbnRhdGlvbiBGaXhlcyBhbmQgVXBkYXRlcworCisgICAtIEEgaGFuZGZ1bCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODI4MWM3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi41LnR4dApAQCAtMCwwICsxLDMwIEBACitHSVQgdjEuNS4yLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4yLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEJ1Z2ZpeGVzCisKKyAgIC0gImdpdCBhZGQgLXUiIGhhZCBhIHNlcmlvdXMgZGF0YSBjb3JydXB0aW9uIHByb2JsZW0gaW4gb25lCisgICAgIHNwZWNpYWwgY2FzZSAod2hlbiB0aGUgY2hhbmdlcyB0byBhIHN1YmRpcmVjdG9yeSdzIGZpbGVzCisgICAgIGNvbnNpc3Qgb25seSBkZWxldGlvbiBvZiBmaWxlcykuCisKKyAgIC0gImdpdCBhZGQgLXUgPHBhdGg+IiBkaWQgbm90IHdvcmsgZnJvbSBhIHN1YmRpcmVjdG9yeS4KKworICAgLSAiZ2l0IGFwcGx5IiBsZWZ0IGFuIGVtcHR5IGRpcmVjdG9yeSBhZnRlciBhbGwgaXRzIGZpbGVzIGFyZQorICAgICByZW5hbWVkIGF3YXkuCisKKyAgIC0gImdpdCAkYW55Y21kIGZvby9iYXIiLCB3aGVuIHRoZXJlIGlzIGEgZmlsZSAnZm9vJyBpbiB0aGUKKyAgICAgd29ya2luZyB0cmVlLCBjb21wbGFpbmVkIHRoYXQgImdpdCAkYW55Y21kIGZvby9iYXIgLS0iIGZvcm0KKyAgICAgc2hvdWxkIGJlIHVzZWQgdG8gZGlzYW1iaWd1YXRlIGJldHdlZW4gcmV2cyBhbmQgZmlsZXMsCisgICAgIHdoaWNoIHdhcyBjb21wbGV0ZWx5IGJvZ3VzLgorCisgICAtICJnaXQgY2hlY2tvdXQtaW5kZXgiIGFuZCBvdGhlciBjb21tYW5kcyB0aGF0IGNoZWNrcyBvdXQKKyAgICAgZmlsZXMgdG8gdGhlIHdvcmsgdHJlZSB0cmllZCB1bmxpbmsoMikgb24gZGlyZWN0b3JpZXMsCisgICAgIHdoaWNoIGlzIGEgc2FuZSB0aGluZyB0byBkbyBvbiBzYW5lIHN5c3RlbXMsIGJ1dCBub3Qgb24KKyAgICAgU29sYXJpcyB3aGVuIHlvdSBhcmUgcm9vdC4KKworICogRG9jdW1lbnRhdGlvbiBGaXhlcyBhbmQgVXBkYXRlcworCisgICAtIEEgaGFuZGZ1bCBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODMyOGQwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMi50eHQKQEAgLTAsMCArMSwxOTcgQEAKK0dJVCB2MS41LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFBsdW1iaW5nIGxldmVsIHN1cGVycHJvamVjdCBzdXBwb3J0LgorCisgIFlvdSBjYW4gaW5jbHVkZSBhIHN1YmRpcmVjdG9yeSB0aGF0IGhhcyBhbiBpbmRlcGVuZGVudCBnaXQKKyAgcmVwb3NpdG9yeSBpbiB5b3VyIGluZGV4IGFuZCB0cmVlIG9iamVjdHMgb2YgeW91ciBwcm9qZWN0CisgICgic3VwZXJwcm9qZWN0IikuICBUaGlzIHBsdW1iaW5nIChpLmUuICJjb3JlIikgbGV2ZWwKKyAgc3VwZXJwcm9qZWN0IHN1cHBvcnQgZXhwbGljaXRseSBleGNsdWRlcyByZWN1cnNpdmUgYmVoYXZpb3VyLgorCisgIFRoZSAic3VicHJvamVjdCIgZW50cmllcyBpbiB0aGUgaW5kZXggYW5kIHRyZWVzIG9mIGEgc3VwZXJwcm9qZWN0CisgIGFyZSBpbmNvbXBhdGlibGUgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBnaXQuICBFeHBlcmltZW50aW5nIHdpdGgKKyAgdGhlIHBsdW1iaW5nIGxldmVsIHN1cHBvcnQgaXMgZW5jb3VyYWdlZCwgYnV0IGJlIHdhcm5lZCB0aGF0CisgIHVubGVzcyBldmVyeWJvZHkgaW4geW91ciBwcm9qZWN0IHVwZGF0ZXMgdG8gdGhpcyByZWxlYXNlIG9yCisgIGxhdGVyLCB1c2luZyB0aGlzIGZlYXR1cmUgd291bGQgbWFrZSB5b3VyIHByb2plY3QKKyAgaW5hY2Nlc3NpYmxlIGJ5IHBlb3BsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIGdpdC4KKworKiBQbHVtYmluZyBsZXZlbCBnaXRhdHRyaWJ1dGVzIHN1cHBvcnQuCisKKyAgVGhlIGdpdGF0dHJpYnV0ZXMgbWVjaGFuaXNtIGFsbG93cyB5b3UgdG8gYWRkICdhdHRyaWJ1dGVzJyB0bworICBwYXRocyBpbiB5b3VyIHByb2plY3QsIGFuZCBhZmZlY3QgdGhlIHdheSBjZXJ0YWluIGdpdAorICBvcGVyYXRpb25zIHdvcmsuICBDdXJyZW50bHkgeW91IGNhbiBpbmZsdWVuY2UgaWYgYSBwYXRoIGlzCisgIGNvbnNpZGVyZWQgYSBiaW5hcnkgb3IgdGV4dCAodGhlIGZvcm1lciB3b3VsZCBiZSB0cmVhdGVkIGJ5CisgICdnaXQgZGlmZicgbm90IHRvIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQ7IHRoZSBsYXR0ZXIgY2FuIGdvCisgIHRocm91Z2ggdGhlIGxpbmUgZW5kaW5ncyBjb252ZXJzaW9uIHByb2Nlc3MgaW4gcmVwb3NpdG9yaWVzCisgIHdpdGggY29yZS5hdXRvY3JsZiBzZXQpLCBleHBhbmQgYW5kIHVuZXhwYW5kICckSWQkJyBrZXl3b3JkCisgIHdpdGggYmxvYiBvYmplY3QgbmFtZSwgc3BlY2lmeSBhIGN1c3RvbSAzLXdheSBtZXJnZSBkcml2ZXIsCisgIGFuZCBzcGVjaWZ5IGEgY3VzdG9tIGRpZmYgZHJpdmVyLiAgWW91IGNhbiBhbHNvIGFwcGx5CisgIGFyYml0cmFyeSBmaWx0ZXIgdG8gY29udGVudHMgb24gY2hlY2staW4vY2hlY2stb3V0IGNvZGVwYXRoCisgIGJ1dCB0aGlzIGZlYXR1cmUgaXMgYW4gZXh0cmVtZWx5IHNoYXJwLWVkZ2VkIHJhem9yIGFuZCBuZWVkcworICB0byBiZSBoYW5kbGVkIHdpdGggY2F1dGlvbiAoZG8gbm90IHVzZSBpdCB1bmxlc3MgeW91CisgIHVuZGVyc3RhbmQgdGhlIGVhcmxpZXIgbWFpbGluZyBsaXN0IGRpc2N1c3Npb24gb24ga2V5d29yZAorICBleHBhbnNpb24pLiAgVGhlc2UgY29udmVyc2lvbnMgYXBwbHkgd2hlbiBjaGVja2luZyBmaWxlcyBpbgorICBvciBvdXQsIGFuZCBleHBvcnRpbmcgdmlhIGdpdC1hcmNoaXZlLgorCisqIFRoZSBwYWNrZmlsZSBmb3JtYXQgbm93IG9wdGlvbmFsbHkgc3VwcG9ydHMgNjQtYml0IGluZGV4LgorCisgIFRoaXMgcmVsZWFzZSBzdXBwb3J0cyB0aGUgInZlcnNpb24gMiIgZm9ybWF0IG9mIHRoZSAuaWR4CisgIGZpbGUuICBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIGEgaHVnZSBwYWNrZmlsZQorICBuZWVkcyBtb3JlIHRoYW4gMzItYml0IHRvIGV4cHJlc3Mgb2Zmc2V0cyBvZiBvYmplY3RzIGluIHRoZQorICBwYWNrLgorCisqIENvbWVzIHdpdGggYW4gdXBkYXRlZCBnaXQtZ3VpIDAuNy4xCisKKyogVXBkYXRlZCBnaXR3ZWI6CisKKyAgLSBjYW4gc2hvdyBjb21iaW5lZCBkaWZmIGZvciBtZXJnZXM7CisgIC0gdXNlcyBmb250IHNpemUgb2YgdXNlcidzIHByZWZlcmVuY2UsIG5vdCBoYXJkY29kZWQgaW4gcGl4ZWxzOworICAtIGNhbiBub3cgJ2dyZXAnOworCisqIE5ldyBjb21tYW5kcyBhbmQgb3B0aW9ucy4KKworICAtICJnaXQgYmlzZWN0IHN0YXJ0IiBjYW4gb3B0aW9uYWxseSB0YWtlIGEgc2luZ2xlIGJhZCBjb21taXQgYW5kCisgICAgemVybyBvciBtb3JlIGdvb2QgY29tbWl0cyBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgIC0gImdpdCBzaG9ydGxvZyIgY2FuIG9wdGlvbmFsbHkgYmUgdG9sZCB0byB3cmFwIGl0cyBvdXRwdXQuCisKKyAgLSAic3VidHJlZSIgbWVyZ2Ugc3RyYXRlZ3kgYWxsb3dzIGFub3RoZXIgcHJvamVjdCB0byBiZSBtZXJnZWQgaW4gYXMKKyAgICB5b3VyIHN1YmRpcmVjdG9yeS4KKworICAtICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIGEgbmV3IC0tc3ViamVjdC1wcmVmaXg9PHN0cmluZz4KKyAgICBvcHRpb24sIHRvIG92ZXJyaWRlIHRoZSBidWlsdC1pbiAiW1BBVENIXSIuCisKKyAgLSAiZ2l0IGFkZCAtdSIgaXMgYSBxdWljayB3YXkgdG8gZG8gdGhlIGZpcnN0IHN0YWdlIG9mICJnaXQKKyAgICBjb21taXQgLWEiIChpLmUuIHVwZGF0ZSB0aGUgaW5kZXggdG8gbWF0Y2ggdGhlIHdvcmtpbmcKKyAgICB0cmVlKTsgaXQgb2J2aW91c2x5IGRvZXMgbm90IG1ha2UgYSBjb21taXQuCisKKyAgLSAiZ2l0IGNsZWFuIiBob25vcnMgYSBuZXcgY29uZmlndXJhdGlvbiwgImNsZWFuLnJlcXVpcmVmb3JjZSIuICBXaGVuCisgICAgc2V0IHRvIHRydWUsIHRoaXMgbWFrZXMgImdpdCBjbGVhbiIgYSBuby1vcCwgcHJldmVudGluZyB5b3UKKyAgICBmcm9tIGxvc2luZyBmaWxlcyBieSB0eXBpbmcgImdpdCBjbGVhbiIgd2hlbiB5b3UgbWVhbnQgdG8KKyAgICBzYXkgIm1ha2UgY2xlYW4iLiAgWW91IGNhbiBzdGlsbCBzYXkgImdpdCBjbGVhbiAtZiIgdG8KKyAgICBvdmVycmlkZSB0aGlzLgorCisgIC0gImdpdCBsb2ciIGZhbWlseSBvZiBjb21tYW5kcyBsZWFybmVkIC0tZGF0ZT17bG9jYWwscmVsYXRpdmUsZGVmYXVsdH0KKyAgICBvcHRpb24uICAtLWRhdGU9cmVsYXRpdmUgaXMgc3lub255bSB0byB0aGUgLS1yZWxhdGl2ZS1kYXRlLgorICAgIC0tZGF0ZT1sb2NhbCBnaXZlcyB0aGUgdGltZXN0YW1wIGluIGxvY2FsIHRpbWV6b25lLgorCisqIFVwZGF0ZWQgYmVoYXZpb3Igb2YgZXhpc3RpbmcgY29tbWFuZHMuCisKKyAgLSBXaGVuICRHSVRfQ09NTUlUVEVSX0VNQUlMIG9yICRHSVRfQVVUSE9SX0VNQUlMIGlzIG5vdCBzZXQKKyAgICBidXQgJEVNQUlMIGlzIHNldCwgdGhlIGxhdHRlciBpcyB1c2VkIGFzIGEgc3Vic3RpdHV0ZS4KKworICAtICJnaXQgZGlmZiAtLXN0YXQiIHNob3dzIHNpemUgb2YgcHJlaW1hZ2UgYW5kIHBvc3RpbWFnZSBibG9icworICAgIGZvciBiaW5hcnkgY29udGVudHMuICBFYXJsaWVyIGl0IG9ubHkgc2FpZCAiQmluIi4KKworICAtICJnaXQgbG9zdC1mb3VuZCIgc2hvd3Mgc3R1ZmYgdGhhdCBhcmUgdW5yZWFjaGFibGUgZXhjZXB0CisgICAgZnJvbSByZWZsb2dzLgorCisgIC0gImdpdCBjaGVja291dCBicmFuY2heMCIgbm93IGRldGFjaGVzIEhFQUQgYXQgdGhlIHRpcCBjb21taXQKKyAgICBvbiB0aGUgbmFtZWQgYnJhbmNoLCBpbnN0ZWFkIG9mIGp1c3Qgc3dpdGNoaW5nIHRvIHRoZQorICAgIGJyYW5jaCAodXNlICJnaXQgY2hlY2tvdXQgYnJhbmNoIiB0byBzd2l0Y2ggdG8gdGhlIGJyYW5jaCwKKyAgICBhcyBiZWZvcmUpLgorCisgIC0gImdpdCBiaXNlY3QgbmV4dCIgY2FuIGJlIHVzZWQgYWZ0ZXIgZ2l2aW5nIG9ubHkgYSBiYWQgY29tbWl0CisgICAgd2l0aG91dCBnaXZpbmcgYSBnb29kIG9uZSAodGhpcyBzdGFydHMgYmlzZWN0aW9uIGhhbGYtd2F5IHRvCisgICAgdGhlIHJvb3QgY29tbWl0KS4gIFdlIHVzZWQgdG8gcmVmdXNlIHRvIG9wZXJhdGUgd2l0aG91dCBhCisgICAgZ29vZCBhbmQgYSBiYWQgY29tbWl0LgorCisgIC0gImdpdCBwdXNoIiwgd2hlbiBwdXNoaW5nIGludG8gbW9yZSB0aGFuIG9uZSByZXBvc2l0b3J5LCBkb2VzCisgICAgbm90IHN0b3AgYXQgdGhlIGZpcnN0IGVycm9yLgorCisgIC0gImdpdCBhcmNoaXZlIiBkb2VzIG5vdCBpbnNpc3QgeW91IHRvIGdpdmUgLS1mb3JtYXQgcGFyYW1ldGVyCisgICAgYW55bW9yZTsgaXQgZGVmYXVsdHMgdG8gInRhciIuCisKKyAgLSAiZ2l0IGN2c3NlcnZlciIgY2FuIHVzZSBiYWNrZW5kcyBvdGhlciB0aGFuIHNxbGl0ZS4KKworICAtICJnaXR2aWV3IiAoaW4gY29udHJpYi8gc2VjdGlvbikgbGVhcm5lZCB0byBiZXR0ZXIgc3VwcG9ydAorICAgICJnaXQtYW5ub3RhdGUiLgorCisgIC0gImdpdCBkaWZmICRjb21taXQxOiRwYXRoMiAkY29tbWl0MjokcGF0aDIiIGNhbiBub3cgcmVwb3J0CisgICAgbW9kZSBjaGFuZ2VzIGJldHdlZW4gdGhlIHR3byBibG9icy4KKworICAtIExvY2FsICJnaXQgZmV0Y2giIGZyb20gYSByZXBvc2l0b3J5IHdob3NlIG9iamVjdCBzdG9yZSBpcworICAgIG9uZSBvZiB0aGUgYWx0ZXJuYXRlcyAoZS5nLiBmZXRjaGluZyBmcm9tIHRoZSBvcmlnaW4gaW4gYQorICAgIHJlcG9zaXRvcnkgY3JlYXRlZCB3aXRoICJnaXQgY2xvbmUgLWwgLXMiKSBhdm9pZHMKKyAgICBkb3dubG9hZGluZyBvYmplY3RzIHVubmVjZXNzYXJpbHkuCisKKyAgLSAiZ2l0IGJsYW1lIiB1c2VzIC5tYWlsbWFwIHRvIGNhbm9uaWNhbGl6ZSB0aGUgYXV0aG9yIG5hbWUKKyAgICBqdXN0IGxpa2UgImdpdCBzaG9ydGxvZyIgZG9lcy4KKworICAtICJnaXQgcGFjay1vYmplY3RzIiBwYXlzIGF0dGVudGlvbiB0byBwYWNrLmRlcHRoCisgICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICAtICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIgZG9lcyBub3QgdXNlIC5tc2cgZmlsZSBpbgorICAgIHRoZSB3b3JraW5nIHRyZWUgdG8gcHJlcGFyZSBjb21taXQgbWVzc2FnZTsgaW5zdGVhZCBpdCB1c2VzCisgICAgJEdJVF9ESVIvTUVSR0VfTVNHIGFzIG90aGVyIGNvbW1hbmRzIGRvLgorCisqIEJ1aWxkcworCisgIC0gZ2l0LXA0aW1wb3J0IGhhcyBuZXZlciBiZWVuIGluc3RhbGxlZDsgbm93IHRoZXJlIGlzIGFuCisgICAgaW5zdGFsbGF0aW9uIG9wdGlvbiB0byBkbyBzby4KKworICAtIGdpdGsgYW5kIGdpdC1ndWkgY2FuIGJlIGNvbmZpZ3VyZWQgb3V0LgorCisgIC0gR2VuZXJhdGVkIGRvY3VtZW50YXRpb24gcGFnZXMgYXV0b21hdGljYWxseSBnZXQgdmVyc2lvbgorICAgIGluZm9ybWF0aW9uIGZyb20gR0lUX1ZFUlNJT04uCisKKyAgLSBQYXJhbGxlbCBidWlsZCB3aXRoICJtYWtlIC1qIiBkZXNjZW5kaW5nIGludG8gc3ViZGlyZWN0b3J5CisgICAgd2FzIGZpeGVkLgorCisqIFBlcmZvcm1hbmNlIFR3ZWFrcworCisgIC0gT3B0aW1pemVkICJnaXQtcmV2LWxpc3QgLS1iaXNlY3QiIChoZW5jZSAiZ2l0LWJpc2VjdCIpLgorCisgIC0gT3B0aW1pemVkICJnaXQtYWRkICRwYXRoIiBpbiBhIGxhcmdlIGRpcmVjdG9yeSwgbW9zdCBvZgorICAgIHdob3NlIGNvbnRlbnRzIGFyZSBpZ25vcmVkLgorCisgIC0gT3B0aW1pemVkICJnaXQtZGlmZi10cmVlIiBmb3IgcmVkdWNlZCBtZW1vcnkgZm9vdHByaW50LgorCisgIC0gVGhlIHJlY3Vyc2l2ZSBtZXJnZSBzdHJhdGVneSB1cGRhdGVkIGEgd29ya3RyZWUgZmlsZSB0aGF0CisgICAgd2FzIGNoYW5nZWQgaWRlbnRpY2FsbHkgaW4gdHdvIGJyYW5jaGVzLCB3aGVuIG9uZSBvZiB0aGVtCisgICAgcmVuYW1lZCBpdC4gIFdlIGRvIG5vdCBkbyB0aGF0IHdoZW4gdGhlcmUgaXMgbm8gcmVuYW1lLCBzbworICAgIG1hdGNoIHRoYXQgYmVoYXZpb3VyLiAgVGhpcyBhdm9pZHMgZXhjZXNzaXZlIHJlYnVpbGRzLgorCisgIC0gVGhlIGRlZmF1bHQgcGFjayBkZXB0aCBoYXMgYmVlbiBpbmNyZWFzZWQgdG8gNTAsIGFzIHRoZQorICAgIHJlY2VudCBhZGRpdGlvbiBvZiBkZWx0YV9iYXNlX2NhY2hlIG1ha2VzIGRlZXBlciBkZWx0YSBjaGFpbnMKKyAgICBtdWNoIGxlc3MgZXhwZW5zaXZlIHRvIGFjY2Vzcy4gIERlcGVuZGluZyBvbiB0aGUgcHJvamVjdCwgaXQgd2FzCisgICAgcmVwb3J0ZWQgdGhhdCB0aGlzIHJlZHVjZXMgdGhlIHJlc3VsdGluZyBwYWNrIGZpbGUgYnkgMTAlCisgICAgb3Igc28uCisKKworRml4ZXMgc2luY2UgdjEuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS41LjEgbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbgordGhpcyByZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisqIEJ1Z2ZpeGVzCisKKyAgLSBTd2l0Y2hpbmcgYnJhbmNoZXMgd2l0aCAiZ2l0IGNoZWNrb3V0IiByZWZ1c2VkIHRvIHdvcmsgd2hlbgorICAgIGEgcGF0aCBjaGFuZ2VzIGZyb20gYSBmaWxlIHRvIGEgZGlyZWN0b3J5IGJldHdlZW4gdGhlCisgICAgY3VycmVudCBicmFuY2ggYW5kIHRoZSBuZXcgYnJhbmNoLCBpbiBvcmRlciBub3QgdG8gbG9zZQorICAgIHBvc3NpYmxlIGxvY2FsIGNoYW5nZXMgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IGlzIGJlaW5nIHR1cm5lZAorICAgIGludG8gYSBmaWxlIHdpdGggdGhlIHN3aXRjaC4gIFdlIG5vdyBhbGxvdyBzdWNoIGEgYnJhbmNoCisgICAgc3dpdGNoIGFmdGVyIG1ha2luZyBzdXJlIHRoYXQgdGhlcmUgaXMgbm8gbG9jYWxseSBtb2RpZmllZAorICAgIGZpbGUgbm9yIHVuLWlnbm9yZWQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LiAgVGhpcyBoYXMgbm90CisgICAgYmVlbiBiYWNrcG9ydGVkIHRvIDEuNS4xLnggc2VyaWVzLCBhcyBpdCBpcyByYXRoZXIgYW4KKyAgICBpbnRydXNpdmUgY2hhbmdlLgorCisgIC0gTWVyZ2luZyBicmFuY2hlcyB0aGF0IGhhdmUgYSBmaWxlIGluIG9uZSBhbmQgYSBkaXJlY3RvcnkgaW4KKyAgICBhbm90aGVyIGF0IHRoZSBzYW1lIHBhdGggdXNlZCB0byBnZXQgcXVpdGUgY29uZnVzZWQuICBXZQorICAgIGhhbmRsZSBzdWNoIGEgY2FzZSBhIGJpdCBtb3JlIGNhcmVmdWxseSwgZXZlbiB0aG91Z2ggdGhhdCBpcworICAgIHN0aWxsIGxlZnQgYXMgYSBjb25mbGljdCBmb3IgdGhlIHVzZXIgdG8gc29ydCBvdXQuICBUaGlzCisgICAgd2lsbCBub3QgYmUgYmFja3BvcnRlZCB0byAxLjUuMS54IHNlcmllcywgYXMgaXQgaXMgcmF0aGVyIGFuCisgICAgaW50cnVzaXZlIGNoYW5nZS4KKworICAtIGdpdC1mZXRjaCBoYWQgdHJvdWJsZSB3aXRoIGEgcmVtb3RlIHdpdGggaW5zYW5lbHkgbGFyZ2UgbnVtYmVyCisgICAgb2YgcmVmcy4KKworICAtICJnaXQgY2xlYW4gLWQgLVgiIG5vdyBkb2VzIG5vdCByZW1vdmUgbm9uLWV4Y2x1ZGVkIGRpcmVjdG9yaWVzLgorCisgIC0gcmViYXNpbmcgKHdpdGhvdXQgLW0pIGEgc2VyaWVzIHRoYXQgY2hhbmdlcyBhIHN5bWxpbmsgdG8gYSBkaXJlY3RvcnkKKyAgICBpbiB0aGUgbWlkZGxlIG9mIGEgcGF0aCBjb25mdXNlZCBnaXQtYXBwbHkgZ3JlYXRseSBhbmQgcmVmdXNlZCB0bworICAgIG9wZXJhdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmY1NDZjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4xLnR4dApAQCAtMCwwICsxLDEwIEBACitHSVQgdjEuNS4zLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBzb2xlbHkgdG8gZml4IHRoZSBnZW5lcmF0ZWQgUlBNJ3MgZGVwZW5kZW5jaWVzLiAgV2UgdXNlZAordG8gaGF2ZSBnaXQtcDQgcGFja2FnZSBidXQgd2UgZG8gbm90IGFueW1vcmUuICBBcyBzdWdnZXN0ZWQgb24KK3RoZSBtYWlsaW5nIGxpc3QsIHRoaXMgcmVsZWFzZSBtYWtlcyBnaXQtY29yZSAiT2Jzb2xldGUiIGdpdC1wNCwKK3NvIHRoYXQgeXVtIHVwZGF0ZSB3b3VsZCBub3QgY29tcGxhaW4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmJkZTNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4yLnR4dApAQCAtMCwwICsxLDU4IEBACitHSVQgdjEuNS4zLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdC1wdXNoIHNlbnQgdGhpbiBwYWNrcyBieSBkZWZhdWx0LCB3aGljaCB3YXMgbm90IGdvb2QgZm9yCisgICB0aGUgcHVibGljIGRpc3RyaWJ1dGlvbiBzZXJ2ZXIgKG5vIHBvaW50IGluIHNhdmluZyB0cmFuc2ZlcgorICAgd2hpbGUgcHVzaGluZzsgbm8gcG9pbnQgaW4gbWFraW5nIHRoZSByZXN1bHRpbmcgcGFjayBsZXNzCisgICBvcHRpbXVtKS4KKworICogZ2l0LXN2biBzb21ldGltZXMgdGVybWluYXRlZCB3aXRoICJNYWxmb3JtZWQgbmV0d29yayBkYXRhIiB3aGVuCisgICB0YWxraW5nIG92ZXIgc3ZuOi8vIHByb3RvY29sLgorCisgKiBnaXQtc2VuZC1lbWFpbCByZS1pc3N1ZWQgdGhlIHNhbWUgbWVzc2FnZS1pZCBhYm91dCAxMCUgb2YgdGhlCisgICB0aW1lIGlmIHlvdSBmaXJlZCBvZmYgMzAgbWVzc2FnZXMgd2l0aGluIGEgc2luZ2xlIHNlY29uZC4KKworICogZ2l0LXN0YXNoIHdhcyBub3QgdGVybWluYXRpbmcgdGhlIGxvZyBtZXNzYWdlIG9mIGNvbW1pdHMgaXQKKyAgIGludGVybmFsbHkgY3JlYXRlcyB3aXRoIExGLgorCisgKiBnaXQtYXBwbHkgZmFpbGVkIHRvIGNoZWNrIHRoZSBzaXplIG9mIHRoZSBwYXRjaCBodW5rIHdoZW4gaXRzCisgICBiZWdpbm5pbmcgcGFydCBtYXRjaGVkIHRoZSByZW1haW5kZXIgb2YgdGhlIHByZWltYWdlIGV4YWN0bHksCisgICBldmVuIHRob3VnaCB0aGUgcHJlaW1hZ2UgcmVjb3JkZWQgaW4gdGhlIGh1bmsgd2FzIG11Y2ggbGFyZ2VyCisgICAodGhlcmVmb3JlIHRoZSBwYXRjaCBzaG91bGQgbm90IGhhdmUgYXBwbGllZCksIGxlYWRpbmcgdG8gYQorICAgc2VnZmF1bHQuCisKKyAqICJnaXQgcm0gZm9vICYmIGdpdCBjb21taXQgZm9vIiBjb21wbGFpbmVkIHRoYXQgJ2ZvbycgbmVlZHMgdG8KKyAgIGJlIGFkZGVkIGZpcnN0LCBpbnN0ZWFkIG9mIGNvbW1pdHRpbmcgdGhlIHJlbW92YWwsIHdoaWNoIHdhcyBhCisgICBub25zZW5zZS4KKworICogZ2l0IGdyZXAgLWMgc2FpZCAiL2Rldi9udWxsOiAwIi4KKworICogZ2l0LWFkZCAtdSBmYWlsZWQgdG8gcmVjb2duaXplIGEgYmxvYiB3aG9zZSB0eXBlIGNoYW5nZWQKKyAgIGJldHdlZW4gdGhlIGluZGV4IGFuZCB0aGUgd29yayB0cmVlLgorCisgKiBUaGUgbGltaXQgdG8gcmVuYW1lIGRldGVjdGlvbiBoYXMgYmVlbiB0aWdodGVuZWQgYSBsb3QgdG8KKyAgIHJlZHVjZSBwZXJmb3JtYW5jZSBwcm9ibGVtcyB3aXRoIGEgaHVnZSBjaGFuZ2UuCisKKyAqIGN2c2ltcG9ydCBhbmQgc3ZuaW1wb3J0IGJhcmZlZCB3aGVuIHRoZSBpbnB1dCB0cmllZCB0byBtb3ZlCisgICBhIHRhZy4KKworICogImdpdCBhcHBseSAtcE4iIGRpZCBub3QgY2hvcCB0aGUgcmlnaHQgbnVtYmVyIG9mIGRpcmVjdG9yaWVzLgorCisgKiAiZ2l0IHN2bmltcG9ydCIgZGlkIG5vdCBsaWtlIFNWTiB0YWdzIHdpdGggZnVubnkgY2hhcmFjdGVycyBpbiB0aGVtLgorCisgKiBnaXQtZ3VpIDAuOC4zLCB3aXRoIGFzc29ydGVkIGZpeGVzLCBpbmNsdWRpbmc6CisKKyAgIC0gZm9udC1jaG9vc2VyIG9uIFgxMSB3YXMgdW51c2FibGUgd2l0aCBsYXJnZSBudW1iZXIgb2YgZm9udHM7CisgICAtIGEgZGlmZiB0aGF0IGNvbnRhaW5lZCBhIGRlbGV0ZWQgc3ltbGluayBtYWRlIGl0IGJhcmY7CisgICAtIGFuIHVudHJhY2tlZCBzeW1ib2xpYyBsaW5rIHRvIGEgZGlyZWN0b3J5IG1hZGUgaXQgZmFydDsKKyAgIC0gYSBmaWxlIHdpdGggJSBpbiBpdHMgbmFtZSBtYWRlIGl0IHZvbWl0OworCisKK0RvY3VtZW50YXRpb24gdXBkYXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzZXIgbWFudWFsIGhhcyBiZWVuIHNvbWV3aGF0IHJlc3RydWN0dXJlZC4gIEkgdGhpbmsgdGhlIG5ldworb3JnYW5pemF0aW9uIGlzIG11Y2ggZWFzaWVyIHRvIHJlYWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjEzODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy4zLnR4dApAQCAtMCwwICsxLDMxIEBACitHSVQgdjEuNS4zLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdC1xdWlsdGltcG9ydCBkaWQgbm90IGxpa2UgaXQgd2hlbiBhIHBhdGNoIGRlc2NyaWJlZCBpbiB0aGUKKyAgIHNlcmllcyBmaWxlIGRvZXMgbm90IGV4aXN0LgorCisgKiBwNCBpbXBvcnRlciBtaXNzZWQgZXhlY3V0YWJsZSBiaXQgaW4gc29tZSBjYXNlcy4KKworICogVGhlIGRlZmF1bHQgc2hlbGwgb24gc29tZSBGcmVlQlNEIGRpZCBub3QgZXhlY3V0ZSB0aGUKKyAgIGFyZ3VtZW50IHBhcnNpbmcgY29kZSBjb3JyZWN0bHkgYW5kIG1hZGUgZ2l0IHVudXNhYmxlLgorCisgKiBnaXQtc3ZuIGluY29ycmVjdGx5IHNwYXduZWQgcGFnZXIgZXZlbiB3aGVuIHRoZSB1c2VyCisgICBleHBsaWNpdGx5IGFza2VkIG5vdCB0by4KKworICogc2FtcGxlIHBvc3QtcmVjZWl2ZSBob29rIG92ZXJxdW90ZWQgdGhlIGVudmVsb3BlIHNlbmRlcgorICAgdmFsdWUuCisKKyAqIGdpdC1hbSBnb3QgY29uZnVzZWQgd2hlbiB0aGUgcGF0Y2ggY29udGFpbmVkIGEgY2hhbmdlIHRoYXQgaXMKKyAgIG9ubHkgYWJvdXQgdHlwZSBhbmQgbm90IGNvbnRlbnRzLgorCisgKiBnaXQtbWVyZ2V0b29sIGRpZCBub3Qgc2hvdyBvdXIgYW5kIHRoZWlyIHZlcnNpb24gb2YgdGhlCisgICBjb25mbGljdGVkIGZpbGUgd2hlbiBzdGFydGVkIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICBwcm9qZWN0LgorCisgKiBnaXQtbWVyZ2V0b29sIGRpZCBub3QgcGFzcyBjb3JyZWN0IG9wdGlvbnMgd2hlbiBpbnZva2luZyBkaWZmMy4KKworICogZ2l0LWxvZyBzb21ldGltZXMgaW52b2tlZCB1bmRlcmx5aW5nICJkaWZmIiBtYWNoaW5lcnkKKyAgIHVubmVjZXNzYXJpbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDRiM2E0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy40LnR4dApAQCAtMCwwICsxLDM1IEBACitHSVQgdjEuNS4zLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENoYW5nZSB0byAiZ2l0LWxzLWZpbGVzIiBpbiB2MS41LjMuMyB0aGF0IHdhcyBpbnRyb2R1Y2VkIHRvIHN1cHBvcnQKKyAgIHBhcnRpYWwgY29tbWl0IG9mIHJlbW92YWwgYmV0dGVyIGhhZCBhIHNlZ2ZhdWx0aW5nIGJ1Zywgd2hpY2ggd2FzCisgICBkaWFnbm9zZWQgYW5kIGZpeGVkIGJ5IEtlaXRoIGFuZCBDYXJsLgorCisgKiBQZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgZm9yIHJlbmFtZSBkZXRlY3Rpb24gaGFzIGJlZW4gYmFja3BvcnRlZAorICAgZnJvbSB0aGUgJ21hc3RlcicgYnJhbmNoLgorCisgKiAiZ2l0LWZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShudW1wYXJlbnQpJyIgd2FzIG5vdCB3b3JraW5nCisgICBjb3JyZWN0bHkgYXQgYWxsLCBhbmQgLS1mb3JtYXQ9JyUocGFyZW50KScgd2FzIG5vdCB3b3JraW5nIGZvcgorICAgbWVyZ2UgY29tbWl0cy4KKworICogU2FtcGxlICJwb3N0LXJlY2VpdmUtaG9vayIgaW5jb3JyZWN0bHkgc2VudCBvdXQgcHVzaAorICAgbm90aWZpY2F0aW9uIGUtbWFpbHMgbWFya2VkIGFzICJGcm9tOiAiIHRoZSBjb21taXR0ZXIgb2YgdGhlCisgICBjb21taXQgdGhhdCBoYXBwZW5lZCB0byBiZSBhdCB0aGUgdGlwIG9mIHRoZSBicmFuY2ggdGhhdCB3YXMKKyAgIHB1c2hlZCwgbm90IGZyb20gdGhlIHBlcnNvbiB3aG8gcHVzaGVkLgorCisgKiAiZ2l0LXJlbW90ZSIgZGlkIG5vdCBleGl0IG5vbi16ZXJvIHN0YXR1cyB1cG9uIGVycm9yLgorCisgKiAiZ2l0LWFkZCAtaSIgZGlkIG5vdCByZXNwb25kIHZlcnkgd2VsbCB0byBFT0YgZnJvbSB0dHkgbm9yCisgICBib2d1cyBpbnB1dC4KKworICogImdpdC1yZWJhc2UgLWkiIHNxdWFzaCBzdWJjb21tYW5kIGluY29ycmVjdGx5IG1hZGUgdGhlCisgICBhdXRob3Igb2YgbGF0ZXIgY29tbWl0IHRoZSBhdXRob3Igb2YgcmVzdWx0aW5nIGNvbW1pdCwKKyAgIGluc3RlYWQgb2YgdGFraW5nIGZyb20gdGhlIGZpcnN0IG9uZSBpbiB0aGUgc3F1YXNoZWQgc2VyaWVzLgorCisgKiAiZ2l0LXN0YXNoIGFwcGx5IC0taW5kZXgiIHdhcyBub3QgZG9jdW1lbnRlZC4KKworICogYXV0b2NvbmZpZ3VyYXRpb24gbGVhcm5lZCB0aGF0ICJhciIgY29tbWFuZCBpcyBmb3VuZCBhcyAiZ2FzIiBvbgorICAgc29tZSBzeXN0ZW1zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmMWQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNS50eHQKQEAgLTAsMCArMSw5NCBAQAorR0lUIHYxLjUuMy41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMy40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDb21lcyB3aXRoIGdpdC1ndWkgMC44LjQuCisKKyAqICJnaXQtY29uZmlnIiBzaWxlbnRseSBpZ25vcmVkIG9wdGlvbnMgYWZ0ZXIgLS1saXN0OyBub3cgaXQgd2lsbAorICAgZXJyb3Igb3V0IHdpdGggYSB1c2FnZSBtZXNzYWdlLgorCisgKiAiZ2l0LWNvbmZpZyAtLWZpbGUiIGZhaWxlZCBpZiB0aGUgYXJndW1lbnQgdXNlZCBhIHJlbGF0aXZlIHBhdGgKKyAgIGFzIGl0IGNoYW5nZWQgZGlyZWN0b3JpZXMgYmVmb3JlIG9wZW5pbmcgdGhlIGZpbGUuCisKKyAqICJnaXQtY29uZmlnIC0tZmlsZSIgbm93IGRpc3BsYXlzIGEgcHJvcGVyIGVycm9yIG1lc3NhZ2UgaWYgaXQKKyAgIGNhbm5vdCByZWFkIHRoZSBmaWxlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgKiAiZ2l0LWNvbmZpZyIsICJnaXQtZGlmZiIsICJnaXQtYXBwbHkiIGZhaWxlZCBpZiBydW4gZnJvbSBhCisgICBzdWJkaXJlY3Rvcnkgd2l0aCByZWxhdGl2ZSBHSVRfRElSIGFuZCBHSVRfV09SS19UUkVFIHNldC4KKworICogImdpdC1ibGFtZSIgY3Jhc2hlZCBpZiBydW4gZHVyaW5nIGEgbWVyZ2UgY29uZmxpY3QuCisKKyAqICJnaXQtYWRkIC1pIiBkaWQgbm90IGhhbmRsZSBzaW5nbGUgbGluZSBodW5rcyBjb3JyZWN0bHkuCisKKyAqICJnaXQtcmViYXNlIC1pIiBhbmQgImdpdC1zdGFzaCBhcHBseSIgZmFpbGVkIGlmIGV4dGVybmFsIGRpZmYKKyAgIGRyaXZlcnMgd2VyZSB1c2VkIGZvciBvbmUgb3IgbW9yZSBmaWxlcyBpbiBhIGNvbW1pdC4gIFRoZXkgbm93CisgICBhdm9pZCBjYWxsaW5nIHRoZSBleHRlcm5hbCBkaWZmIGRyaXZlcnMuCisKKyAqICJnaXQtbG9nIC0tZm9sbG93IiBkaWQgbm90IHdvcmsgdW5sZXNzIGRpZmYgZ2VuZXJhdGlvbiAoZS5nLiAtcCkKKyAgIHdhcyBhbHNvIHJlcXVlc3RlZC4KKworICogImdpdC1sb2cgLS1mb2xsb3cgLUIiIGRpZCBub3Qgd29yayBhdCBhbGwuICBGaXhlZC4KKworICogImdpdC1sb2cgLU0gLUIiIGRpZCBub3QgY29ycmVjdGx5IGhhbmRsZSBjYXNlcyBvZiB2ZXJ5IGxhcmdlIGZpbGVzCisgICBiZWluZyByZW5hbWVkIGFuZCByZXBsYWNlZCBieSB2ZXJ5IHNtYWxsIGZpbGVzIGluIHRoZSBzYW1lIGNvbW1pdC4KKworICogImdpdC1sb2ciIHByaW50ZWQgZXh0cmEgbmV3bGluZXMgYmV0d2VlbiBjb21taXRzIHdoZW4gYSBkaWZmCisgICB3YXMgZ2VuZXJhdGVkIGludGVybmFsbHkgKGUuZy4gLVMgb3IgLS1mb2xsb3cpIGJ1dCBub3QgZGlzcGxheWVkLgorCisgKiAiZ2l0LXB1c2giIGVycm9yIG1lc3NhZ2UgaXMgbW9yZSBoZWxwZnVsIHdoZW4gcHVzaGluZyB0byBhCisgICByZXBvc2l0b3J5IHdpdGggbm8gbWF0Y2hpbmcgcmVmcyBhbmQgbm9uZSBzcGVjaWZpZWQuCisKKyAqICJnaXQtcHVzaCIgbm93IHJlc3BlY3RzICsgKGZvcmNlIHB1c2gpIG9uIHdpbGRjYXJkIHJlZnNwZWNzLAorICAgbWF0Y2hpbmcgdGhlIGJlaGF2aW9yIG9mIGdpdC1mZXRjaC4KKworICogImdpdC1maWx0ZXItYnJhbmNoIiBub3cgdXBkYXRlcyB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBpdAorICAgaGFzIGZpbmlzaGVkIGZpbHRlcmluZyB0aGUgY3VycmVudCBicmFuY2guCisKKyAqICJnaXQtaW5zdGF3ZWIiIG5vIGxvbmdlciBmYWlscyBvbiBNYWMgT1MgWC4KKworICogImdpdC1jdnNleHBvcnRjb21taXQiIGRpZG4ndCBhbHdheXMgY3JlYXRlIG5ldyBwYXJlbnQgZGlyZWN0b3JpZXMKKyAgIGJlZm9yZSB0cnlpbmcgdG8gY3JlYXRlIG5ldyBjaGlsZCBkaXJlY3Rvcmllcy4gIEZpeGVkLgorCisgKiAiZ2l0LWZldGNoIiBwcmludGVkIGEgc2NhcnkgKGJ1dCBib2d1cykgZXJyb3IgbWVzc2FnZSB3aGlsZQorICAgZmV0Y2hpbmcgYSB0YWcgdGhhdCBwb2ludGVkIHRvIGEgdHJlZSBvciBibG9iLiAgVGhlIGVycm9yIGRpZAorICAgbm90IGltcGFjdCBjb3JyZWN0bmVzcywgb25seSB1c2VyIHBlcmNlcHRpb24uICBUaGUgYm9ndXMgZXJyb3IKKyAgIGlzIG5vIGxvbmdlciBwcmludGVkLgorCisgKiAiZ2l0LWxzLWZpbGVzIC0taWdub3JlZCIgZGlkIG5vdCBwcm9wZXJseSBkZXNjZW5kIGludG8gbm9uLWlnbm9yZWQKKyAgIGRpcmVjdG9yaWVzIHRoYXQgdGhlbXNlbHZlcyBjb250YWluZWQgaWdub3JlZCBmaWxlcyBpZiBkX3R5cGUKKyAgIHdhcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBmaWxlc3lzdGVtLiAgVGhpcyBidWcgaW1wYWN0ZWQgc3lzdGVtcworICAgc3VjaCBhcyBBRlMuICBGaXhlZC4KKworICogR2l0IHNlZ2ZhdWx0ZWQgd2hlbiByZWFkaW5nIGFuIGludmFsaWQgLmdpdGF0dHJpYnV0ZXMgZmlsZS4gIEZpeGVkLgorCisgKiBwb3N0LXJlY2VpdmUtZW1haWwgZXhhbXBsZSBob29rIHdhcyBmaXhlZCBmb3Igbm9uLWZhc3QtZm9yd2FyZAorICAgdXBkYXRlcy4KKworICogRG9jdW1lbnRhdGlvbiB1cGRhdGVzIGZvciBzdXBwb3J0ZWQgKGJ1dCBwcmV2aW91c2x5IHVuZG9jdW1lbnRlZCkKKyAgIG9wdGlvbnMgb2YgImdpdC1hcmNoaXZlIiBhbmQgImdpdC1yZWZsb2ciLgorCisgKiAibWFrZSBjbGVhbiIgbm8gbG9uZ2VyIGRlbGV0ZXMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdGhhdCBzaGlwcworICAgd2l0aCB0aGUgZ2l0IHRhcmJhbGwsIG1ha2luZyBtdWx0aXBsZSBhcmNoaXRlY3R1cmUgYnVpbGRzIGVhc2llci4KKworICogImdpdC1yZW1vdGUgc2hvdyBvcmlnaW4iIHNwZXdlZCBhIHdhcm5pbmcgbWVzc2FnZSBmcm9tIFBlcmwKKyAgIHdoZW4gbm8gcmVtb3RlIGlzIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCB2aWEKKyAgIGJyYW5jaC48bmFtZT4ucmVtb3RlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKKyAqIEJ1aWxkaW5nIHdpdGggTk9fUEVSTF9NQUtFTUFLRVIgZXhjZXNzaXZlbHkgcmVidWlsdCBjb250ZW50cworICAgb2YgcGVybC8gc3ViZGlyZWN0b3J5IGJ5IHJld3JpdGluZyBwZXJsLm1hay4KKworICogaHR0cC5zc2xWZXJpZnkgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB3ZXJlIG5vdCB1c2VkIGluIHNjcmlwdGVkCisgICBQb3JjZWxhaW5zLgorCisgKiAiZ2l0LWFkZCIgbGVha2VkIGEgYml0IG9mIG1lbW9yeSB3aGlsZSBzY2FubmluZyBmb3IgZmlsZXMgdG8gYWRkLgorCisgKiBBIGZldyB3b3JrYXJvdW5kcyB0byBzcXVlbGNoIGZhbHNlIHdhcm5pbmdzIGZyb20gcmVjZW50IGdjYyBoYXZlCisgICBiZWVuIGFkZGVkLgorCisgKiAiZ2l0LXNlbmQtcGFjayAkcmVtb3RlIGZyb3R6IiBzZWdmYXVsdGVkIHdoZW4gdGhlcmUgaXMgbm90aGluZworICAgbmFtZWQgJ2Zyb3R6JyBvbiB0aGUgbG9jYWwgZW5kLgorCisgKiAiZ2l0LXJlYmFzZSAtLWludGVyYWN0aXZlIiBkaWQgbm90IGhhbmRsZSBpdHMgIi0tc3RyYXRlZ3kiIG9wdGlvbgorICAgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS4zLjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjlhMmIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy42LnR4dApAQCAtMCwwICsxLDQ4IEBACitHSVQgdjEuNS4zLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS4zLjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdC1jdnNleHBvcnRjb21taXQgaGFuZGxlcyByb290IGNvbW1pdHMgYmV0dGVyLgorCisgKiBnaXQtc3ZuIGRjb21taXQgdXNlZCB0byBjbG9iYmVyIHdoZW4gc2VuZGluZyBhIHNlcmllcyBvZgorICAgcGF0Y2hlcy4KKworICogZ2l0LXN2biBkY29tbWl0IGZhaWxlZCBhZnRlciBhdHRlbXB0aW5nIHRvIHJlYmFzZSB3aGVuCisgICBzdGFydGVkIHdpdGggYSBkaXJ0eSBpbmRleDsgbm93IGl0IHN0b3BzIHVwZnJvbnQuCisKKyAqIGdpdC1ncmVwIHNvbWV0aW1lcyByZWZ1c2VkIHRvIHdvcmsgd2hlbiB5b3VyIGluZGV4IHdhcworICAgdW5tZXJnZWQuCisKKyAqICJnaXQtZ3JlcCAtQTEgLUIyIiBhY3RlZCBhcyBpZiBpdCB3YXMgdG9sZCB0byBydW4gImdpdCAtQTEgLUIyMSIuCisKKyAqIGdpdC1oYXNoLW9iamVjdCBkaWQgbm90IGhvbm9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCBzdWNoIGFzCisgICBjb3JlLmNvbXByZXNzaW9uLgorCisgKiBnaXQtaW5kZXgtcGFjayBjaG9rZWQgb24gYSBodWdlIHBhY2sgb24gMzItYml0IG1hY2hpbmVzLCBldmVuIHdoZW4KKyAgIGxhcmdlIGZpbGUgb2Zmc2V0cyBhcmUgc3VwcG9ydGVkLgorCisgKiBhdG9tIGZlZWRzIGZyb20gZ2l0LXdlYiBzYWlkICIxMCIgZm9yIHRoZSBtb250aCBvZiBOb3ZlbWJlci4KKworICogYSBtZW1vcnkgbGVhayBpbiBjb21taXQgd2Fsa2VyIHdhcyBwbHVnZ2VkLgorCisgKiBXaGVuIGdpdC1zZW5kLWVtYWlsIGluc2VydGVkIHRoZSBvcmlnaW5hbCBhdXRob3IncyBGcm9tOgorICAgYWRkcmVzcyBpbiBib2R5LCBpdCBkaWQgbm90IG1hcmsgdGhlIG1lc3NhZ2Ugd2l0aAorICAgQ29udGVudC10eXBlOiBhcyBuZWVkZWQuCisKKyAqIGdpdC1yZXZlcnQgYW5kIGdpdC1jaGVycnktcGljayBpbmNvcnJlY3RseSByZWZ1c2VkIHRvIHN0YXJ0CisgICB3aGVuIHRoZSB3b3JrIHRyZWUgd2FzIGRpcnR5LgorCisgKiBnaXQtY2xlYW4gZGlkIG5vdCBob25vciBjb3JlLmV4Y2x1ZGVzZmlsZSBjb25maWd1cmF0aW9uLgorCisgKiBnaXQtYWRkIG1pc2hhbmRsZWQgIi5naXRpZ25vcmUiIGZpbGVzIHdoZW4gYXBwbHlpbmcgdGhlbSB0bworICAgc3ViZGlyZWN0b3JpZXMuCisKKyAqIFdoaWxlIGltcG9ydGluZyBhIHRvbyBicmFuY2h5IGhpc3RvcnksIGdpdC1mYXN0aW1wb3J0IGRpZCBub3QKKyAgIGhvbm9yIGRlbHRhIGRlcHRoIGxpbWl0IHByb3Blcmx5LgorCisgKiBTdXBwb3J0IGZvciB6bGliIGltcGxlbWVudGF0aW9ucyB0aGF0IGxhY2sgWkxJQl9WRVJOVU0gYW5kIGRlZmluaXRpb24KKyAgIG9mIGRlZmxhdGVCb3VuZCgpIGhhcyBiZWVuIGFkZGVkLgorCisgKiBRdWl0ZSBhIGxvdCBvZiBkb2N1bWVudGF0aW9uIGNsYXJpZmljYXRpb25zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy43LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY2OTA2MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuNy50eHQKQEAgLTAsMCArMSw0NSBAQAorR0lUIHYxLjUuMy43IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMy42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBnaXQtc2VuZC1lbWFpbCBhZGRlZCA4LWJpdCBjb250ZW50cyB0byB0aGUgcGF5bG9hZCB3aXRob3V0CisgICBtYXJraW5nIGl0IGFzIDgtYml0IGluIGEgQ1RFIGhlYWRlci4KKworICogImdpdC1idW5kbGUgY3JlYXRlIGEuYm5kbCBIRUFEIiBkZXJlZmVyZW5jZWQgdGhlIHN5bXJlZiBhbmQKKyAgIGRpZCBub3QgcmVjb3JkIHRoZSByZWYgYXMgJ0hFQUQnOyB0aGlzIHByZXZlbnRlZCBhIGJ1bmRsZQorICAgZnJvbSBiZWluZyB1c2VkIGFzIGEgbm9ybWFsIHNvdXJjZSBvZiBnaXQtY2xvbmUuCisKKyAqIFRoZSBjb2RlIHRvIHJlamVjdCBub25zZW5zZSBjb21tYW5kIGxpbmUgb2YgdGhlIGZvcm0KKyAgICJnaXQtY29tbWl0IC1hIHBhdGhzLi4uIiBhbmQgImdpdC1jb21taXQgLS1pbnRlcmFjdGl2ZQorICAgcGF0aHMuLi4iIHdlcmUgYnJva2VuLgorCisgKiBBZGRpbmcgYSBzaWduYXR1cmUgdGhhdCBpcyBub3QgQVNDSUktb25seSB0byBhbiBvcmlnaW5hbAorICAgY29tbWl0IHRoYXQgaXMgQVNDSUktb25seSB3b3VsZCBtYWtlIHRoZSByZXN1bHQgbm9uLUFTQ0lJLgorICAgImdpdC1mb3JtYXQtcGF0Y2ggLXMiIGRpZCBub3QgbWFyayBzdWNoIGEgbWVzc2FnZSBjb3JyZWN0bHkKKyAgIHdpdGggTUlNRSBlbmNvZGluZyBoZWFkZXIuCisKKyAqIGdpdC1hZGQgc29tZXRpbWVzIGRpZCBub3QgbWFyayB0aGUgcmVzdWx0aW5nIGluZGV4IGVudHJ5CisgICBzdGF0LWNsZWFuLiAgVGhpcyBhZmZlY3RlZCBvbmx5IGNhc2VzIHdoZW4gYWRkaW5nIHRoZQorICAgY29udGVudHMgd2l0aCB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHByZXZpb3VzbHkgc3RhZ2VkCisgICBjb250ZW50cywgYW5kIHRoZSBwcmV2aW91cyBzdGFnaW5nIG1hZGUgdGhlIGluZGV4IGVudHJ5CisgICAicmFjaWx5IGNsZWFuIi4KKworICogZ2l0LWNvbW1pdCBkaWQgbm90IGhvbm9yIEdJVF9JTkRFWF9GSUxFIHRoZSB1c2VyIGhhZCBpbiB0aGUKKyAgIGVudmlyb25tZW50LgorCisgKiBXaGVuIGNoZWNraW5nIG91dCBhIHJldmlzaW9uLCBnaXQtY2hlY2tvdXQgZGlkIG5vdCByZXBvcnQgd2hlcmUgdGhlCisgICB1cGRhdGVkIEhFQUQgaXMgaWYgeW91IGhhcHBlbmVkIHRvIGhhdmUgYSBmaWxlIGNhbGxlZCBIRUFEIGluIHRoZQorICAgd29yayB0cmVlLgorCisgKiAiZ2l0LXJldi1saXN0IC0tb2JqZWN0cyIgbWlzaGFuZGxlZCBhIHRyZWUgdGhhdCBwb2ludHMgYXQgYQorICAgc3VibW9kdWxlLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgd2FzIG5vdCByZWFkeSBmb3IgcGFja2VkIHJlZnMgdGhhdCAiZ2l0IGdjIiBjYW4KKyAgIHByb2R1Y2UgYW5kIGdhdmUgaW5jb3JyZWN0IHJlc3VsdHMuCisKKyAqIE1hbnkgc2NyaXB0ZWQgUG9yY2VsYWlucyB3ZXJlIGNvbmZ1c2VkIHdoZW4geW91IGhhcHBlbmVkIHRvIGhhdmUgYQorICAgZmlsZSBjYWxsZWQgIkhFQUQiIGluIHlvdXIgd29yayB0cmVlLgorCitBbHNvIGl0IGNvbnRhaW5zIHVwZGF0ZXMgdG8gdGhlIHVzZXIgbWFudWFsIGFuZCBkb2N1bWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy44LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzZmY1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMuOC50eHQKQEAgLTAsMCArMSwyNSBAQAorR0lUIHYxLjUuMy44IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuMy43CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBTb21lIGRvY3VtZW50YXRpb24gdXNlZCAiZW1haWwuY29tIiBhcyBhbiBleGFtcGxlIGRvbWFpbi4KKworICogZ2l0LXN2biBmaXggdG8gaGFuZGxlIGZ1bmt5IGJyYW5jaCBhbmQgcHJvamVjdCBuYW1lcyBnb2luZyBvdmVyCisgICBodHRwL2h0dHBzIGNvcnJlY3RseS4KKworICogZ2l0LXN2biBmaXggdG8gdG9uZSBkb3duIGEgbmVlZGxlc3NseSBhbGFybWluZyB3YXJuaW5nIG1lc3NhZ2UuCisKKyAqIGdpdC1jbG9uZSBkaWQgbm90IGNvcnJlY3RseSByZXBvcnQgZXJyb3JzIHdoaWxlIGZldGNoaW5nIG92ZXIgaHR0cC4KKworICogZ2l0LXNlbmQtZW1haWwgYWRkZWQgcmVkdW5kYW50IE1lc3NhZ2UtSWQ6IGhlYWRlciB0byB0aGUgb3V0Z29pbmcKKyAgIGUtbWFpbCB3aGVuIHRoZSBwYXRjaCB0ZXh0IGFscmVhZHkgaGFkIG9uZS4KKworICogYSByZWFkLWJleW9uZC1lbmQtb2YtYnVmZmVyIGJ1ZyBpbiBjb25maWd1cmF0aW9uIGZpbGUgdXBkYXRlciB3YXMgZml4ZWQuCisKKyAqIGdpdC1ncmVwIHVzZWQgdG8gc2hvdyB0aGUgc2FtZSBoaXQgcmVwZWF0ZWRseSBmb3IgdW5tZXJnZWQgcGF0aHMuCisKKyAqIEFmdGVyIGFtZW5kaW5nIHRoZSBwYXRjaCB0aXRsZSBpbiAiZ2l0LWFtIC1pIiwgdGhlIGNvbW1hbmQgZGlkIG5vdAorICAgcmVwb3J0IHRoZSBwYXRjaCBpdCBhcHBsaWVkIHdpdGggdGhlIHVwZGF0ZWQgdGl0bGUuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY2OGQzYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjMudHh0CkBAIC0wLDAgKzEsMzY2IEBACitHSVQgdjEuNS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgY29tbWl0IHdhbGtlcnMgb3RoZXIgdGhhbiBodHRwIGFyZSBvZmZpY2lhbGx5IGRlcHJlY2F0ZWQsCisgIGJ1dCBzdGlsbCBzdXBwb3J0ZWQgZm9yIG5vdy4KKworKiBUaGUgc3VibW9kdWxlIHN1cHBvcnQgaGFzIFBvcmNlbGFpbiBsYXllci4KKworICBOb3RlIHRoYXQgdGhlIGN1cnJlbnQgc3VibW9kdWxlIHN1cHBvcnQgaXMgbWluaW1hbCBhbmQgdGhpcyBpcworICBkZWxpYmVyYXRlbHkgc28uICBBIGRlc2lnbiBkZWNpc2lvbiB3ZSBtYWRlIGlzIHRoYXQgb3BlcmF0aW9ucworICBhdCB0aGUgc3VwZXJtb2R1bGUgbGV2ZWwgZG8gbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIGJ5CisgIGRlZmF1bHQuICBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCBsYXRlciB3ZSB3b3VsZCBhZGQgYQorICBtZWNoYW5pc20gdG8gdGVsbCBnaXQgd2hpY2ggc3VibW9kdWxlcyB0aGUgdXNlciBpcyBpbnRlcmVzdGVkCisgIGluLCBhbmQgdGhpcyBpbmZvcm1hdGlvbiBtaWdodCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUKKyAgcmVjdXJzaXZlIGJlaGF2aW91ciBvZiBjZXJ0YWluIGNvbW1hbmRzIChlLmcuICJnaXQgY2hlY2tvdXQiCisgIGFuZCAiZ2l0IGRpZmYiKSwgYnV0IGN1cnJlbnRseSB3ZSBoYXZlbid0IGFncmVlZCBvbiB3aGF0IHRoYXQKKyAgbWVjaGFuaXNtIHNob3VsZCBsb29rIGxpa2UuICBUaGVyZWZvcmUsIGlmIHlvdSB1c2Ugc3VibW9kdWxlcywKKyAgeW91IHdvdWxkIHByb2JhYmx5IG5lZWQgImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBvbiB0aGUKKyAgc3VibW9kdWxlcyB5b3UgY2FyZSBhYm91dCBhZnRlciBydW5uaW5nIGEgImdpdCBjaGVja291dCIgYXQKKyAgdGhlIHN1cGVybW9kdWxlIGxldmVsLgorCisqIFRoZXJlIGFyZSBhIGhhbmRmdWwgcGFjay1vYmplY3RzIGNoYW5nZXMgdG8gaGVscCB5b3UgY29wZSBiZXR0ZXIKKyAgd2l0aCByZXBvc2l0b3JpZXMgd2l0aCBwYXRob2xvZ2ljYWxseSBsYXJnZSBibG9icyBpbiB0aGVtLgorCisqIEZvciBwZW9wbGUgd2hvIG5lZWQgdG8gaW1wb3J0IGZyb20gUGVyZm9yY2UsIGEgZnJvbnQtZW5kIGZvcgorICBmYXN0LWltcG9ydCBpcyBpbiBjb250cmliL2Zhc3QtaW1wb3J0Ly4KKworKiBDb21lcyB3aXRoIGdpdC1ndWkgMC44LjIuCisKKyogQ29tZXMgd2l0aCB1cGRhdGVkIGdpdGsuCisKKyogTmV3IGNvbW1hbmRzIGFuZCBvcHRpb25zLgorCisgIC0gImdpdCBsb2cgLS1kYXRlPTxmb3JtYXQ+IiBjYW4gdXNlIG1vcmUgZm9ybWF0czogaXNvODYwMSwgcmZjMjgyMi4KKworICAtIFRoZSBodW5rIGhlYWRlciBvdXRwdXQgZnJvbSAiZ2l0IGRpZmYiIGZhbWlseSBjYW4gYmUgY3VzdG9taXplZAorICAgIHdpdGggdGhlIGF0dHJpYnV0ZXMgbWVjaGFuaXNtLiAgU2VlIGdpdGF0dHJpYnV0ZXMoNSkgZm9yIGRldGFpbHMuCisKKyAgLSAiZ2l0IHN0YXNoIiBhbGxvd3MgeW91IHRvIHF1aWNrbHkgc2F2ZSBhd2F5IHlvdXIgd29yayBpbgorICAgIHByb2dyZXNzIGFuZCByZXBsYXkgaXQgbGF0ZXIgb24gYW4gdXBkYXRlZCBzdGF0ZS4KKworICAtICJnaXQgcmViYXNlIiBsZWFybmVkIGFuICJpbnRlcmFjdGl2ZSIgbW9kZSB0aGF0IGxldCB5b3UKKyAgICBwaWNrIGFuZCByZW9yZGVyIHdoaWNoIGNvbW1pdHMgdG8gcmVidWlsZC4KKworICAtICJnaXQgZnNjayIgY2FuIHNhdmUgaXRzIGZpbmRpbmdzIGluICRHSVRfRElSL2xvc3QtZm91bmQsIHdpdGhvdXQgYQorICAgIHNlcGFyYXRlIGludm9jYXRpb24gb2YgImdpdCBsb3N0LWZvdW5kIiBjb21tYW5kLiAgVGhlIGJsb2JzIHN0b3JlZCBieQorICAgIGxvc3QtZm91bmQgYXJlIHN0b3JlZCBpbiBwbGFpbiBmb3JtYXQgdG8gYWxsb3cgeW91IHRvIGdyZXAgaW4gdGhlbS4KKworICAtICRHSVRfV09SS19UUkVFIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKKyAgICAkR0lUX0RJUiB0byB3b3JrIGluIGEgc3ViZGlyZWN0b3J5IG9mIGEgd29ya2luZyB0cmVlIHRoYXQgaXMKKyAgICBub3QgbG9jYXRlZCBhdCAiJEdJVF9ESVIvLi4iLgorCisgIC0gR2l2aW5nICItLWZpbGU9PGZpbGU+IiBvcHRpb24gdG8gImdpdCBjb25maWciIGlzIHRoZSBzYW1lIGFzCisgICAgcnVubmluZyB0aGUgY29tbWFuZCB3aXRoIEdJVF9DT05GSUc9PGZpbGU+IGVudmlyb25tZW50LgorCisgIC0gImdpdCBsb2ciIGxlYXJuZWQgYSBuZXcgb3B0aW9uICItLWZvbGxvdyIsIHRvIGZvbGxvdworICAgIHJlbmFtaW5nIGhpc3Rvcnkgb2YgYSBzaW5nbGUgZmlsZS4KKworICAtICJnaXQgZmlsdGVyLWJyYW5jaCIgbGV0cyB5b3UgcmV3cml0ZSB0aGUgcmV2aXNpb24gaGlzdG9yeSBvZgorICAgIHNwZWNpZmllZCBicmFuY2hlcy4gWW91IGNhbiBzcGVjaWZ5IGEgbnVtYmVyIG9mIGZpbHRlcnMgdG8KKyAgICBtb2RpZnkgdGhlIGNvbW1pdHMsIGZpbGVzIGFuZCB0cmVlcy4KKworICAtICJnaXQgY3Zzc2VydmVyIiBsZWFybmVkIG5ldyBvcHRpb25zICgtLWJhc2UtcGF0aCwgLS1leHBvcnQtYWxsLAorICAgIC0tc3RyaWN0LXBhdGhzKSBpbnNwaXJlZCBieSAiZ2l0IGRhZW1vbiIuCisKKyAgLSAiZ2l0IGRhZW1vbiAtLWJhc2UtcGF0aC1yZWxheGVkIiBjYW4gaGVscCBtaWdyYXRpbmcgYSByZXBvc2l0b3J5IFVSTAorICAgIHRoYXQgZGlkIG5vdCB1c2UgdG8gdXNlIC0tYmFzZS1wYXRoIHRvIHVzZSAtLWJhc2UtcGF0aC4KKworICAtICJnaXQgY29tbWl0IiBjYW4gdXNlICItdCB0ZW1wbGF0ZWZpbGUiIG9wdGlvbiBhbmQgY29tbWl0LnRlbXBsYXRlCisgICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBwcmltZSB0aGUgY29tbWl0IG1lc3NhZ2UgZ2l2ZW4gdG8geW91IGluIHRoZQorICAgIGVkaXRvci4KKworICAtICJnaXQgc3VibW9kdWxlIiBjb21tYW5kIGhlbHBzIHlvdSBtYW5hZ2UgdGhlIHByb2plY3RzIGZyb20KKyAgICB0aGUgc3VwZXJwcm9qZWN0IHRoYXQgY29udGFpbiB0aGVtLgorCisgIC0gSW4gYWRkaXRpb24gdG8gY29yZS5jb21wcmVzc2lvbiBjb25maWd1cmF0aW9uIG9wdGlvbiwKKyAgICBjb3JlLmxvb3NlY29tcHJlc3Npb24gYW5kIHBhY2suY29tcHJlc3Npb24gb3B0aW9ucyBjYW4KKyAgICBpbmRlcGVuZGVudGx5IHR3ZWFrIHpsaWIgY29tcHJlc3Npb24gbGV2ZWxzIHVzZWQgZm9yIGxvb3NlCisgICAgYW5kIHBhY2tlZCBvYmplY3RzLgorCisgIC0gImdpdCBscy10cmVlIC1sIiBzaG93cyBzaXplIG9mIGJsb2JzIHBvaW50ZWQgYXQgYnkgdGhlCisgICAgdHJlZSBlbnRyaWVzLCBzaW1pbGFyIHRvICIvYmluL2xzIC1sIi4KKworICAtICJnaXQgcmV2LWxpc3QiIGxlYXJuZWQgLS1yZWdleHAtaWdub3JlLWNhc2UgYW5kCisgICAgLS1leHRlbmRlZC1yZWdleHAgb3B0aW9ucyB0byB0d2VhayBpdHMgbWF0Y2hpbmcgbG9naWMgdXNlZAorICAgIGZvciAtLWdyZXAgZmlsdGVyaW5nLgorCisgIC0gImdpdCBkZXNjcmliZSAtLWNvbnRhaW5zIiBpcyBhIGhhbmRpZXIgd2F5IHRvIGNhbGwgbW9yZQorICAgIG9ic2N1cmUgY29tbWFuZCAiZ2l0IG5hbWUtcmV2IC0tdGFncyIuCisKKyAgLSAiZ2l0IGdjIC0tYWdncmVzc2l2ZSIgdGVsbHMgdGhlIGNvbW1hbmQgdG8gc3BlbmQgbW9yZSBjeWNsZXMKKyAgICB0byBvcHRpbWl6ZSB0aGUgcmVwb3NpdG9yeSBoYXJkZXIuCisKKyAgLSAiZ2l0IHJlcGFjayIgbGVhcm5lZCBhICJ3aW5kb3ctbWVtb3J5IiBsaW1pdCB3aGljaAorICAgIGR5bmFtaWNhbGx5IHJlZHVjZXMgdGhlIHdpbmRvdyBzaXplIHRvIHN0YXkgd2l0aGluIHRoZQorICAgIHNwZWNpZmllZCBtZW1vcnkgdXNhZ2UuCisKKyAgLSAiZ2l0IHJlcGFjayIgY2FuIGJlIHRvbGQgdG8gc3BsaXQgcmVzdWx0aW5nIHBhY2tzIHRvIGF2b2lkCisgICAgZXhjZWVkaW5nIGxpbWl0IHNwZWNpZmllZCB3aXRoICItLW1heC1wYWNrLXNpemUiLgorCisgIC0gImdpdCBmc2NrIiBnYWluZWQgLS12ZXJib3NlIG9wdGlvbi4gIFRoaXMgaXMgcmVhbGx5IHJlYWxseQorICAgIHZlcmJvc2UgYnV0IGl0IG1pZ2h0IGhlbHAgeW91IGlkZW50aWZ5IGV4YWN0IGNvbW1pdCB0aGF0IGlzCisgICAgY29ycnVwdCBpbiB5b3VyIHJlcG9zaXRvcnkuCisKKyAgLSAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCAtLW51bWJlcmVkLWZpbGVzIG9wdGlvbi4gIFRoaXMKKyAgICBtYXkgYmUgdXNlZnVsIGZvciBNSCB1c2Vycy4KKworICAtICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIGZvcm1hdC5zdWJqZWN0cHJlZml4IGNvbmZpZ3VyYXRpb24KKyAgICB2YXJpYWJsZSwgd2hpY2ggc2VydmVzIHRoZSBzYW1lIHB1cnBvc2UgYXMgIi0tc3ViamVjdC1wcmVmaXgiCisgICAgb3B0aW9uLgorCisgIC0gImdpdCB0YWcgLW4gLWwiIHNob3dzIHRhZyBhbm5vdGF0aW9ucyB3aGlsZSBsaXN0aW5nIHRhZ3MuCisKKyAgLSAiZ2l0IGN2c2ltcG9ydCIgY2FuIG9wdGlvbmFsbHkgdXNlIHRoZSBzZXBhcmF0ZS1yZW1vdGUgbGF5b3V0LgorCisgIC0gImdpdCBibGFtZSIgY2FuIGJlIHRvbGQgdG8gc2VlIHRocm91Z2ggY29tbWl0cyB0aGF0IGNoYW5nZQorICAgIHdoaXRlc3BhY2VzIGFuZCBpbmRlbnRhdGlvbiBsZXZlbHMgd2l0aCAiLXciIG9wdGlvbi4KKworICAtICJnaXQgc2VuZC1lbWFpbCIgY2FuIGJlIHRvbGQgbm90IHRvIHRocmVhZCB0aGUgbWVzc2FnZXMgd2hlbgorICAgIHNlbmRpbmcgb3V0IG1vcmUgdGhhbiBvbmUgcGF0Y2hlcy4KKworICAtICJnaXQgc2VuZC1lbWFpbCIgY2FuIGFsc28gYmUgdG9sZCBob3cgdG8gZmluZCB3aG9tIHRvIGNjIHRoZQorICAgIG1lc3NhZ2UgdG8gZm9yIGVhY2ggbWVzc2FnZSB2aWEgLS1jYy1jbWQuCisKKyAgLSAiZ2l0IGNvbmZpZyIgbGVhcm5lZCBOVUwgdGVybWluYXRlZCBvdXRwdXQgZm9ybWF0IHZpYSAteiB0bworICAgIGhlbHAgc2NyaXB0cy4KKworICAtICJnaXQgYWRkIiBsZWFybmVkICItLXJlZnJlc2ggPHBhdGhzPi4uLiIgb3B0aW9uIHRvIHNlbGVjdGl2ZWx5IHJlZnJlc2gKKyAgICB0aGUgY2FjaGVkIHN0YXQgaW5mb3JtYXRpb24uCisKKyAgLSAiZ2l0IGluaXQgLXEiIG1ha2VzIHRoZSBjb21tYW5kIHF1aWV0ZXIuCisKKyAgLSAiZ2l0IC1wIGNvbW1hbmQiIG5vdyBoYXMgYSBjb3VzaW4gb2Ygb3Bwb3NpdGUgc2V4LCAiZ2l0IC0tbm8tcGFnZXIKKyAgICBjb21tYW5kIi4KKworKiBVcGRhdGVkIGJlaGF2aW9yIG9mIGV4aXN0aW5nIGNvbW1hbmRzLgorCisgIC0gImdpdHdlYiIgY2FuIG9mZmVyIG11bHRpcGxlIHNuYXBzaG90IGZvcm1hdHMuCisKKyAgICAqKipOT1RFKioqIFVuZm9ydHVuYXRlbHksIHRoaXMgY2hhbmdlcyB0aGUgZm9ybWF0IG9mIHRoZQorICAgICRmZWF0dXJle3NuYXBzaG90fXtkZWZhdWx0fSBlbnRyeSBpbiB0aGUgcGVyLXNpdGUKKyAgICBjb25maWd1cmF0aW9uIGZpbGUgJ2dpdHdlYl9jb25maWcucGVybCcuICBJdCB1c2VkIHRvIGJlIGEKKyAgICB0aHJlZS1lbGVtZW50IHR1cGxlIHRoYXQgZGVzY3JpYmUgYSBzaW5nbGUgZm9ybWF0OyB3aXRoIHRoZQorICAgIG5ldyBjb25maWd1cmF0aW9uIGl0ZW0gZm9ybWF0LCB5b3Ugb25seSBoYXZlIHRvIHNheSB0aGUgbmFtZQorICAgIG9mIHRoZSBmb3JtYXQgKCd0Z3onLCAndGJ6Micgb3IgJ3ppcCcpLiAgUGxlYXNlIHVwZGF0ZSB0aGUKKyAgICB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBhY2NvcmRpbmdseS4KKworICAtICJnaXQgY2xvbmUiIHVzZXMgLWwgKGhhcmRsaW5rIGZpbGVzIHVuZGVyIC5naXQpIGJ5IGRlZmF1bHQgd2hlbgorICAgIGNsb25pbmcgbG9jYWxseS4KKworICAtIFVSTCB1c2VkIGZvciAiZ2l0IGNsb25lIiBhbmQgZnJpZW5kcyBjYW4gc3BlY2lmeSBub25zdGFuZGFyZCBTU0ggcG9ydAorICAgIGJ5IHVzaW5nIHNzaDovL2hvc3Q6cG9ydC9wYXRoL3RvL3JlcG8gc3ludGF4LgorCisgIC0gImdpdCBidW5kbGUgY3JlYXRlIiBjYW4gbm93IGNyZWF0ZSBhIGJ1bmRsZSB3aXRob3V0IG5lZ2F0aXZlIHJlZnMsCisgICAgaS5lLiAiZXZlcnl0aGluZyBzaW5jZSB0aGUgYmVnaW5uaW5nIHVwIHRvIGNlcnRhaW4gcG9pbnRzIi4KKworICAtICJnaXQgZGlmZiIgKGJ1dCBub3QgdGhlIHBsdW1iaW5nIGxldmVsICJnaXQgZGlmZi10cmVlIikgbm93CisgICAgcmVjdXJzaXZlbHkgZGVzY2VuZHMgaW50byB0cmVlcyBieSBkZWZhdWx0LgorCisgIC0gImdpdCBkaWZmIiBkb2VzIG5vdCBzaG93IGRpZmZlcmVuY2VzIHRoYXQgY29tZSBvbmx5IGZyb20KKyAgICBzdGF0LWRpcnRpbmVzcyBpbiB0aGUgZm9ybSBvZiAiZGlmZiAtLWdpdCIgaGVhZGVyIGFueW1vcmUuCisgICAgSXQgcnVucyAidXBkYXRlLWluZGV4IC0tcmVmcmVzaCIgc2lsZW50bHkgYXMgbmVlZGVkLgorCisgIC0gImdpdCB0YWcgLWwiIHVzZWQgdG8gbWF0Y2ggdGFncyBieSBnbG9iYmluZyBpdHMgcGFyYW1ldGVyIGFzIGlmIGl0CisgICAgaGFzIHdpbGRjYXJkICcqJyBvbiBib3RoIGVuZHMsIHdoaWNoIG1hZGUgImdpdCB0YWcgLWwgZ3VpIiB0byBtYXRjaAorICAgIHRhZyAnZ2l0Z3VpLTAuNy4wJzsgdGhpcyB3YXMgdmVyeSBhbm5veWluZy4gIFlvdSBub3cgaGF2ZSB0byBhZGQKKyAgICBhc3RlcmlzayBvbiB0aGUgc2lkZXMgeW91IHdhbnQgdG8gd2lsZGNhcmQgeW91cnNlbGYuCisKKyAgLSBUaGUgZWRpdG9yIHRvIHVzZSB3aXRoIG1hbnkgaW50ZXJhY3RpdmUgY29tbWFuZHMgY2FuIGJlCisgICAgb3ZlcnJpZGRlbiB3aXRoIEdJVF9FRElUT1IgZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIGlmIGl0CisgICAgZG9lcyBub3QgZXhpc3QsIHdpdGggY29yZS5lZGl0b3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIEFzCisgICAgYmVmb3JlLCBpZiB5b3UgaGF2ZSBuZWl0aGVyLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgVklTVUFMCisgICAgYW5kIEVESVRPUiBhcmUgY29uc3VsdGVkIGluIHRoaXMgb3JkZXIsIGFuZCB0aGVuIGZpbmFsbHkgd2UKKyAgICBmYWxsIGJhY2sgb24gInZpIi4KKworICAtICJnaXQgcm0gLS1jYWNoZWQiIGRvZXMgbm90IGNvbXBsYWluIHdoZW4gcmVtb3ZpbmcgYSBuZXdseQorICAgIGFkZGVkIGZpbGUgZnJvbSB0aGUgaW5kZXggYW55bW9yZS4KKworICAtIE9wdGlvbnMgdG8gImdpdCBsb2ciIHRvIGFmZmVjdCBob3cgLS1ncmVwLy0tYXV0aG9yIG9wdGlvbnMgbG9vayBmb3IKKyAgICBnaXZlbiBzdHJpbmdzIG5vdyBoYXZlIHNob3J0ZXIgYWJicmV2aWF0aW9ucy4gIC1pIGlzIGZvciBpZ25vcmUgY2FzZSwKKyAgICBhbmQgLUUgaXMgZm9yIGV4dGVuZGVkIHJlZ2V4cC4KKworICAtICJnaXQgbG9nIiBsZWFybmVkIC0tbG9nLXNpemUgdG8gc2hvdyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluCisgICAgdGhlIGxvZyBtZXNzYWdlIHBhcnQgb2YgdGhlIG91dHB1dCB0byBoZWxwIHFnaXQuCisKKyAgLSAiZ2l0IGxvZyAtLW5hbWUtc3RhdHVzIiBkb2VzIG5vdCByZXF1aXJlIHlvdSB0byBnaXZlICItciIgYW55bW9yZS4KKyAgICBBcyBhIGdlbmVyYWwgcnVsZSwgUG9yY2VsYWluIGNvbW1hbmRzIHNob3VsZCByZWN1cnNlIHdoZW4gc2hvd2luZworICAgIGRpZmYuCisKKyAgLSAiZ2l0IGZvcm1hdC1wYXRjaCAtLXJvb3QgQSIgY2FuIGJlIHVzZWQgdG8gZm9ybWF0IGV2ZXJ5dGhpbmcKKyAgICBzaW5jZSB0aGUgYmVnaW5uaW5nIHVwIHRvIEEuICBUaGlzIHdhcyBzdXBwb3J0ZWQgd2l0aAorICAgICJnaXQgZm9ybWF0LXBhdGNoIC0tcm9vdCBBIEEiIGZvciBhIGxvbmcgdGltZSwgYnV0IHdhcyBub3QKKyAgICBwcm9wZXJseSBkb2N1bWVudGVkLgorCisgIC0gImdpdCBzdm4gZGNvbW1pdCIgcmV0YWlucyBsb2NhbCBtZXJnZSBpbmZvcm1hdGlvbi4KKworICAtICJnaXQgc3ZuaW1wb3J0IiBhbGxvd3MgYW4gZW1wdHkgc3RyaW5nIHRvIGJlIHNwZWNpZmllZCBhcyB0aGUKKyAgICB0cnVuay8gZGlyZWN0b3J5LiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gc3VjayBkYXRhIGZyb20gYSBTVk4KKyAgICByZXBvc2l0b3J5IHRoYXQgZG9lIG5vdCBoYXZlIHRydW5rLyBicmFuY2hlcy8gYW5kIHRhZ3MvIG9yZ2FuaXphdGlvbgorICAgIGF0IGFsbC4KKworICAtICJnaXQgY29uZmlnIiB0byBzZXQgdmFsdWVzIGFsc28gaG9ub3JzIHR5cGUgZmxhZ3MgbGlrZSAtLWJvb2wKKyAgICBhbmQgLS1pbnQuCisKKyAgLSBjb3JlLnF1b3RlcGF0aCBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkIHRvIG1ha2UgdGV4dHVhbCBnaXQKKyAgICBvdXRwdXQgdG8gZW1pdCBtb3N0IG9mIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBwYXRoIGxpdGVyYWxseS4KKworICAtICJnaXQgbWVyZ2V0b29sIiBjaG9vc2VzIGl0cyBiYWNrZW5kIG1vcmUgd2lzZWx5LCB0YWtpbmcKKyAgICBub3RpY2Ugb2YgaXRzIGVudmlyb25tZW50IHN1Y2ggYXMgdXNlIG9mIFgsIEdub21lL0tERSwgZXRjLgorCisgIC0gImdpdHdlYiIgc2hvd3MgbWVyZ2UgY29tbWl0cyBhIGxvdCBuaWNlciB0aGFuIGJlZm9yZS4gIFRoZQorICAgIGRlZmF1bHQgdmlldyB1c2VzIG1vcmUgY29tcGFjdCAtLWNjIGZvcm1hdCwgd2hpbGUgdGhlIFVJCisgICAgYWxsb3dzIHRvIGNob29zZSBub3JtYWwgZGlmZiB3aXRoIGFueSBwYXJlbnQuCisKKyAgLSBzbmFwc2hvdCBmaWxlcyAiZ2l0d2ViIiBjcmVhdGVzIGZyb20gYSByZXBvc2l0b3J5IGF0CisgICAgJHBhdGgvJHByb2plY3QvLmdpdCBhcmUgbW9yZSB1c2VmdWwuICBXZSB1c2UgJHByb2plY3QgcGFydAorICAgIGluIHRoZSBmaWxlbmFtZSwgd2hpY2ggd2UgdXNlZCB0byBkaXNjYXJkLgorCisgIC0gImdpdCBjdnNpbXBvcnQiIGNyZWF0ZXMgbGlnaHR3ZWlnaHQgdGFnczsgdGhlcmUgaXMgbm8KKyAgICBpbnRlcmVzdGluZyBpbmZvcm1hdGlvbiB3ZSBjYW4gcmVjb3JkIGluIGFuIGFubm90YXRlZCB0YWcsCisgICAgYW5kIHRoZSBoYW5kY3JhZnRlZCBvbmVzIHRoZSBvbGQgY29kZSBjcmVhdGVkIHdhcyBub3QKKyAgICBwcm9wZXJseSBmb3JtZWQgYW55d2F5LgorCisgIC0gImdpdCBwdXNoIiBwcmV0ZW5kcyB0aGF0IHlvdSBpbW1lZGlhdGVseSBmZXRjaGVkIGJhY2sgZnJvbQorICAgIHRoZSByZW1vdGUgYnkgdXBkYXRpbmcgY29ycmVzcG9uZGluZyByZW1vdGUgdHJhY2tpbmcKKyAgICBicmFuY2hlcyBpZiB5b3UgaGF2ZSBhbnkuCisKKyAgLSBUaGUgZGlmZnN0YXQgZ2l2ZW4gYWZ0ZXIgYSBtZXJnZSAob3IgYSBwdWxsKSBob25vcnMgdGhlCisgICAgY29sb3IuZGlmZiBjb25maWd1cmF0aW9uLgorCisgIC0gImdpdCBjb21taXQgLS1hbWVuZCIgaXMgbm93IGNvbXBhdGlibGUgd2l0aCB2YXJpb3VzIG1lc3NhZ2Ugc291cmNlCisgICAgb3B0aW9ucyBzdWNoIGFzIC1tLy1DLy1jLy1GLgorCisgIC0gImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAiIHJlbW92ZXMgYmxhbmsgbGluZXMgYWRkZWQgYXQKKyAgICB0aGUgZW5kIG9mIHRoZSBmaWxlLgorCisgIC0gImdpdCBmZXRjaCIgb3ZlciBnaXQgbmF0aXZlIHByb3RvY29scyB3aXRoICItdiIgb3B0aW9uIHNob3dzCisgICAgY29ubmVjdGlvbiBzdGF0dXMsIGFuZCB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgb3RoZXIgZW5kLCB0bworICAgIGhlbHAgZGlhZ25vc2luZyBwcm9ibGVtcy4KKworICAtIFdlIHVzZWQgdG8gaGF2ZSBjb3JlLmxlZ2FjeWhlYWRlcnMgY29uZmlndXJhdGlvbiwgd2hlbgorICAgIHNldCB0byBmYWxzZSwgYWxsb3dlZCBnaXQgdG8gd3JpdGUgbG9vc2Ugb2JqZWN0cyBpbiBhIGZvcm1hdAorICAgIHRoYXQgbWltaWNzIHRoZSBmb3JtYXQgdXNlZCBieSBvYmplY3RzIHN0b3JlZCBpbiBwYWNrcy4gIEl0CisgICAgdHVybnMgb3V0IHRoYXQgdGhpcyB3YXMgbm90IHNvIHVzZWZ1bC4gIEFsdGhvdWdoIHdlIHdpbGwKKyAgICBjb250aW51ZSB0byByZWFkIG9iamVjdHMgd3JpdHRlbiBpbiB0aGF0IGZvcm1hdCwgd2UgZG8gbm90CisgICAgaG9ub3IgdGhhdCBjb25maWd1cmF0aW9uIGFueW1vcmUgYW5kIGNyZWF0ZSBsb29zZSBvYmplY3RzIGluCisgICAgdGhlIGxlZ2FjeS90cmFkaXRpb25hbCBmb3JtYXQuCisKKyAgLSAiLS1maW5kLWNvcGllcy1oYXJkZXIiIG9wdGlvbiB0byBkaWZmIGZhbWlseSBjYW4gbm93IGJlCisgICAgc3BlbGxlZCBhcyAiLUMgLUMiIGZvciBicmV2aXR5LgorCisgIC0gImdpdCBtYWlsc3BsaXQiIChoZW5jZSAiZ2l0IGFtIikgY2FuIHJlYWQgZnJvbSBNYWlsZGlyCisgICAgZm9ybWF0dGVkIG1haWxib3hlcy4KKworICAtICJnaXQgY3Zzc2VydmVyIiBkb2VzIG5vdCBiYXJmIHVwb24gc2VlaW5nICJjdnMgbG9naW4iCisgICAgcmVxdWVzdC4KKworICAtICJwYWNrLW9iamVjdHMiIGhvbm9ycyAiZGVsdGEiIGF0dHJpYnV0ZSBzZXQgaW4KKyAgICAuZ2l0YXR0cmlidXRlcy4gIEl0IGRvZXMgbm90IGF0dGVtcHQgdG8gZGVsdGlmeSBibG9icyB0aGF0CisgICAgY29tZSBmcm9tIHBhdGhzIHdpdGggZGVsdGEgYXR0cmlidXRlIHNldCB0byBmYWxzZS4KKworICAtICJuZXctd29ya2RpciIgc2NyaXB0IChpbiBjb250cmliKSBjYW4gbm93IGJlIHVzZWQgd2l0aCBhCisgICAgYmFyZSByZXBvc2l0b3J5LgorCisgIC0gImdpdCBtZXJnZXRvb2wiIGxlYXJuZWQgdG8gdXNlIGd2aW1kaWZmLgorCisgIC0gImdpdHZpZXciIChpbiBjb250cmliKSBoYXMgYSBiZXR0ZXIgYmxhbWUgaW50ZXJmYWNlLgorCisgIC0gImdpdCBsb2ciIGFuZCBmcmllbmRzIGRpZCBub3QgaGFuZGxlIGEgY29tbWl0IGxvZyBtZXNzYWdlCisgICAgdGhhdCBpcyBsYXJnZXIgdGhhbiAxNmtCOyB0aGV5IGRvIG5vdy4KKworICAtICItLXByZXR0eT1vbmVsaW5lIiBvdXRwdXQgZm9ybWF0IGZvciAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMKKyAgICBkZWFscyB3aXRoICJtYWxmb3JtZWQiIGNvbW1pdCBsb2cgbWVzc2FnZXMgdGhhdCBoYXZlIG1vcmUKKyAgICB0aGFuIG9uZSBsaW5lcyBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIGJldHRlci4gIFdlIHVzZWQgdG8KKyAgICBzaG93IHRoZSBmaXJzdCBsaW5lLCBjdXR0aW5nIHRoZSB0aXRsZSBhdCBtaWQtc2VudGVuY2U7IHdlCisgICAgY29uY2F0ZW5hdGUgdGhlbSBpbnRvIGEgc2luZ2xlIGxpbmUgYW5kIHRyZWF0IHRoZSByZXN1bHQgYXMKKyAgICAib25lbGluZSIuCisKKyAgLSAiZ2l0IHA0aW1wb3J0IiBoYXMgYmVlbiBkZW1vdGVkIHRvIGNvbnRyaWIgc3RhdHVzLiAgRm9yCisgICAgYSBzdXBlcmlvciBvcHRpb24sIGNoZWNrb3V0IHRoZSAiZ2l0IHA0IiBmcm9udCBlbmQgdG8KKyAgICAiZ2l0IGZhc3QtaW1wb3J0IiAoYWxzbyBpbiBjb250cmliKS4gIFRoZSBtYW4gcGFnZSBhbmQgcDQKKyAgICBycG0gaGF2ZSBiZWVuIHJlbW92ZWQgYXMgd2VsbC4KKworICAtICJnaXQgbWFpbGluZm8iIChoZW5jZSAiYW0iKSBub3cgdHJpZXMgdG8gc2VlIGlmIHRoZSBtZXNzYWdlCisgICAgaXMgaW4gdXRmLTggZmlyc3QsIGluc3RlYWQgb2YgYXNzdW1pbmcgaXNvLTg4NTktMSwgaWYKKyAgICBpbmNvbWluZyBlLW1haWwgZG9lcyBub3Qgc2F5IHdoYXQgZW5jb2RpbmcgaXQgaXMgaW4uCisKKyogQnVpbGRzCisKKyAgLSBvbGQtc3R5bGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKG1vc3Qgbm90YWJseSwgYSBmdW5jdGlvbgorICAgIHdpdGhvdXQgcGFyYW1ldGVyIGRlZmluZWQgd2l0aCAiZnVuYygpIiwgbm90ICJmdW5jKHZvaWQpIikKKyAgICBoYXZlIGJlZW4gZXJhZGljYXRlZC4KKworICAtICJnaXQgdGFnIiBhbmQgImdpdCB2ZXJpZnktdGFnIiBoYXZlIGJlZW4gcmV3cml0dGVuIGluIEMuCisKKyogUGVyZm9ybWFuY2UgVHdlYWtzCisKKyAgLSAiZ2l0IHBhY2stb2JqZWN0cyIgYXZvaWRzIHJlLWRlbHRpZmljYXRpb24gY29zdCBieSBjYWNoaW5nCisgICAgc21hbGwgZW5vdWdoIGRlbHRhIHJlc3VsdHMgaXQgY3JlYXRlcyB3aGlsZSBsb29raW5nIGZvciB0aGUKKyAgICBiZXN0IGRlbHRhIGNhbmRpZGF0ZXMuCisKKyAgLSAiZ2l0IHBhY2stb2JqZWN0cyIgbGVhcm5lZCBhIG5ldyBoZXVyaXN0aWMgdG8gcHJlZmVyIGRlbHRhCisgICAgdGhhdCBpcyBzaGFsbG93ZXIgaW4gZGVwdGggb3ZlciB0aGUgc21hbGxlc3QgZGVsdGEKKyAgICBwb3NzaWJsZS4gIFRoaXMgaW1wcm92ZXMgYm90aCBvdmVyYWxsIHBhY2tmaWxlIGFjY2VzcworICAgIHBlcmZvcm1hbmNlIGFuZCBwYWNrZmlsZSBkZW5zaXR5LgorCisgIC0gZGlmZi1kZWx0YSBjb2RlIHRoYXQgaXMgdXNlZCBmb3IgcGFja2luZyBoYXMgYmVlbiBpbXByb3ZlZAorICAgIHRvIHdvcmsgYmV0dGVyIG9uIGJpZyBmaWxlcy4KKworICAtIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgcGFjayBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSwKKyAgICB0aGUgcnVudGltZSB1c2VkIHRvIHRyeSBmaW5kaW5nIGFuIG9iamVjdCBhbHdheXMgZnJvbSB0aGUKKyAgICBuZXdlc3QgcGFja2ZpbGU7IGl0IG5vdyB0cmllcyB0aGUgc2FtZSBwYWNrZmlsZSBhcyB3ZSBmb3VuZAorICAgIHRoZSBvYmplY3QgcmVxdWVzdGVkIHRoZSBsYXN0IHRpbWUsIHdoaWNoIGV4cGxvaXRzIHRoZQorICAgIGxvY2FsaXR5IG9mIHJlZmVyZW5jZXMuCisKKyAgLSB2ZXJpZnlpbmcgcGFjayBjb250ZW50cyBkb25lIGJ5ICJnaXQgZnNjayAtLWZ1bGwiIGdvdCBib29zdAorICAgIGJ5IGNhcmVmdWxseSBjaG9vc2luZyB0aGUgb3JkZXIgdG8gdmVyaWZ5IG9iamVjdHMgaW4gdGhlbS4KKworICAtICJnaXQgcmVhZC10cmVlIC1tIiB0byByZWFkIGludG8gYW4gYWxyZWFkeSBwb3B1bGF0ZWQgaW5kZXgKKyAgICBoYXMgYmVlbiBvcHRpbWl6ZWQgdmFzdGx5LiAgVGhlIGVmZmVjdCBvZiB0aGlzIGNhbiBiZSBzZWVuCisgICAgd2hlbiBzd2l0Y2hpbmcgYnJhbmNoZXMgdGhhdCBoYXZlIGRpZmZlcmVuY2VzIGluIG9ubHkgYQorICAgIGhhbmRmdWwgcGF0aHMuCisKKyAgLSAiZ2l0IGFkZCBwYXRocy4uLiIgYW5kICJnaXQgY29tbWl0IHBhdGhzLi4uIiBoYXMgYWxzbyBiZWVuCisgICAgaGVhdmlseSBvcHRpbWl6ZWQuCisKK0ZpeGVzIHNpbmNlIHYxLjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNS4yIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4KK3RoaXMgcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworKiBCdWdmaXhlcworCisgIC0gImdpdHdlYiIgaGFkIHRyb3VibGUgaGFuZGxpbmcgbm9uIFVURi04IHRleHQgd2l0aCBvbGRlcgorICAgIEVuY29kZS5wbSBQZXJsIG1vZHVsZS4KKworICAtICJnaXQgc3ZuIiBtaXNwYXJzZWQgdGhlIGRhdGEgZnJvbSB0aGUgY29tbWl0cyBpbiB0aGUgcmVwb3NpdG9yeSB3aGVuCisgICAgdGhlIHVzZXIgaGFkICJjb2xvci5kaWZmID0gdHJ1ZSIgaW4gdGhlIGNvbmZpZ3VyYXRpb24uICBUaGlzIGhhcyBiZWVuCisgICAgZml4ZWQuCisKKyAgLSBUaGVyZSB3YXMgYSBjYXNlIHdoZXJlICJnaXQgc3ZuIGRjb21taXQiIGNsb2JiZXJlZCBjaGFuZ2VzIG1hZGUgb24gdGhlCisgICAgU1ZOIHNpZGUgd2hpbGUgY29tbWl0dGluZyBtdWx0aXBsZSBjaGFuZ2VzLgorCisgIC0gImdpdC13cml0ZS10cmVlIiBoYWQgYSBiYWQgaW50ZXJhY3Rpb24gd2l0aCByYWN5LWdpdCBhdm9pZGFuY2UgYW5kCisgICAgZ2l0YXR0cmlidXRlcyBtZWNoYW5pc21zLgorCisgIC0gImdpdCAtLWJhcmUgY29tbWFuZCIgb3ZlcnJvZGUgZXhpc3RpbmcgR0lUX0RJUiBzZXR0aW5nIGFuZCBhbHdheXMKKyAgICBtYWRlIGl0IHRyZWF0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFzIEdJVF9ESVIuCisKKyAgLSAiZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCIgZG9lcyBub3QgY29tcGxhaW4gaWYgeW91IGdpdmUgdGhlCisgICAgc2FtZSBwYXRoIHBhdHRlcm4gdHdpY2UgYnkgbWlzdGFrZS4KKworICAtICJnaXQgaW5pdCIgYXV0b2RldGVjdGVkIGNvcmUuZmlsZW1vZGUgYnV0IG5vdCBjb3JlLnN5bWxpbmtzLCB3aGljaAorICAgIG1hZGUgYSBuZXcgZGlyZWN0b3J5IGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSAiZ2l0IGNsb25lIiBjdW1iZXJzb21lCisgICAgdG8gdXNlIG9uIGZpbGVzeXN0ZW1zIHRoYXQgcmVxdWlyZSB0aGVzZSBjb25maWd1cmF0aW9ucyB0byBiZSBzZXQuCisKKyAgLSAiZ2l0IGxvZyIgZmFtaWx5IG9mIGNvbW1hbmRzIGJlaGF2ZWQgZGlmZmVyZW50bHkgd2hlbiBydW4gYXMgImdpdAorICAgIGxvZyIgKG5vIHBhdGhzcGVjKSBhbmQgYXMgImdpdCBsb2cgLS0iIChhZ2Fpbiwgbm8gcGF0aHNwZWMpLiAgVGhpcworICAgIGluY29uc2lzdGVuY3kgd2FzIGludHJvZHVjZWQgc29tZXdoZXJlIGluIHYxLjMuMCBzZXJpZXMgYnV0IG5vdyBoYXMKKyAgICBiZWVuIGNvcnJlY3RlZC4KKworICAtICJnaXQgcmViYXNlIC1tIiBpbmNvcnJlY3RseSBkaXNwbGF5ZWQgY29tbWl0cyB0aGF0IHdlcmUgc2tpcHBlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZTQ0YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjEudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0dJVCB2MS41LjQuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0LWNvbW1pdCAtQyAkdGFnIiB1c2VkIHRvIHdvcmsgYnV0IHJld3JpdGUgaW4gQyBkb25lIGluCisgICAxLjUuNCBicm9rZSBpdC4KKworICogQW4gZW50cnkgaW4gdGhlIC5naXRhdHRyaWJ1dGVzIGZpbGUgdGhhdCBuYW1lcyBhIHBhdHRlcm4gaW4gYQorICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnkgaXQgaXMgaW4gZGlkIG5vdCBtYXRjaAorICAgY29ycmVjdGx5IChlLmcuIHBhdHRlcm4gImIvKi5jIiBpbiAiYS8uZ2l0YXR0cmlidXRlcyIgc2hvdWxkCisgICBtYXRjaCAiYS9iL2Zvby5jIiBidXQgaXQgZGlkbid0KS4KKworICogQ3VzdG9taXplZCBjb2xvciBzcGVjaWZpY2F0aW9uIHdhcyBwYXJzZWQgaW5jb3JyZWN0bHkgd2hlbgorICAgbnVtZXJpYyBjb2xvciB2YWx1ZXMgYXJlIHVzZWQuICBUaGlzIHdhcyBmaXhlZCBpbiAxLjUuNC4xLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWQwZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4yLnR4dApAQCAtMCwwICsxLDQzIEBACitHSVQgdjEuNS40LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGNvbmZpZ3VyYXRpb24gcGFyc2VyIHdhcyBub3QgcHJlcGFyZWQgdG8gc2VlIHN0cmluZworICAgdmFsdWVkIHZhcmlhYmxlcyBtaXNzcGVsbGVkIGFzIGJvb2xlYW4gYW5kIHNlZ2ZhdWx0ZWQuCisKKyAqIFRlbXBvcmFyeSBmaWxlcyBsZWZ0IGJlaGluZCBkdWUgdG8gaW50ZXJydXB0ZWQgb2JqZWN0CisgICB0cmFuc2ZlcnMgd2VyZSBub3QgY2xlYW5lZCB1cCB3aXRoICJnaXQgcHJ1bmUiLgorCisgKiAiZ2l0IGNvbmZpZyAtLXVuc2V0IiB3YXMgY29uZnVzZWQgd2hlbiB0aGUgdW5zZXQgdmFyaWFibGVzCisgICB3ZXJlIHNwZWxsZWQgd2l0aCBjb250aW51YXRpb24gbGluZXMgaW4gdGhlIGNvbmZpZyBmaWxlLgorCisgKiBUaGUgbWVyZ2UgbWVzc2FnZSBkZXRlY3Rpb24gaW4gImdpdCBjdnNpbXBvcnQiIGRpZCBub3QgY2F0Y2gKKyAgIGEgbWVzc2FnZSB0aGF0IGJlZ2FuIHdpdGggIk1lcmdlLi4uIi4KKworICogImdpdCBzdGF0dXMiIHN1Z2dlc3RzICJnaXQgcm0gLS1jYWNoZWQiIGZvciB1bnN0YWdpbmcgdGhlCisgICBlYXJsaWVyICJnaXQgYWRkIiBiZWZvcmUgdGhlIGluaXRpYWwgY29tbWl0LgorCisgKiAiZ2l0IHN0YXR1cyIgb3V0cHV0IHdhcyBpbmNvcnJlY3QgZHVyaW5nIGEgcGFydGlhbCBjb21taXQuCisKKyAqICJnaXQgYmlzZWN0IiByZWZ1c2VkIHRvIHN0YXJ0IHdoZW4gdGhlIEhFQUQgd2FzIGRldGFjaGVkLgorCisgKiAiZ2l0IGJpc2VjdCIgYWxsb3dlZCBhIHdpbGRjYXJkIGNoYXJhY3RlciBpbiB0aGUgY29tbWl0CisgICBtZXNzYWdlIGV4cGFuZGVkIHdoaWxlIHdyaXRpbmcgaXRzIGxvZyBmaWxlLgorCisgKiBNYW51YWwgcGFnZXMgd2VyZSBub3QgZm9ybWF0dGVkIGNvcnJlY3RseSB3aXRoIGRvY2Jvb2sgeHNsCisgICAxLjcyOyBhZGRlZCBhIHdvcmthcm91bmQuCisKKyAqICJnaXQtY29tbWl0IC1DICR0YWciIHVzZWQgdG8gd29yayBidXQgcmV3cml0ZSBpbiBDIGRvbmUgaW4KKyAgIDEuNS40IGJyb2tlIGl0LiAgVGhpcyB3YXMgZml4ZWQgaW4gMS41LjQuMS4KKworICogQW4gZW50cnkgaW4gdGhlIC5naXRhdHRyaWJ1dGVzIGZpbGUgdGhhdCBuYW1lcyBhIHBhdHRlcm4gaW4gYQorICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBkaXJlY3RvcnkgaXQgaXMgaW4gZGlkIG5vdCBtYXRjaAorICAgY29ycmVjdGx5IChlLmcuIHBhdHRlcm4gImIvKi5jIiBpbiAiYS8uZ2l0YXR0cmlidXRlcyIgc2hvdWxkCisgICBtYXRjaCAiYS9iL2Zvby5jIiBidXQgaXQgZGlkbid0KS4gIFRoaXMgd2FzIGZpeGVkIGluIDEuNS40LjEuCisKKyAqIEN1c3RvbWl6ZWQgY29sb3Igc3BlY2lmaWNhdGlvbiB3YXMgcGFyc2VkIGluY29ycmVjdGx5IHdoZW4KKyAgIG51bWVyaWMgY29sb3IgdmFsdWVzIGFyZSB1c2VkLiAgVGhpcyB3YXMgZml4ZWQgaW4gMS41LjQuMS4KKworICogaHR0cCB0cmFuc3BvcnQgbWlzYmVoYXZlZCB3aGVuIGxpbmtlZCB3aXRoIGN1cmwtZ251dGxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmYzY3ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuMy50eHQKQEAgLTAsMCArMSwyNyBAQAorR0lUIHYxLjUuNC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBSUE0gc3BlYyB1c2VkIHRvIHB1bGwgaW4gZXZlcnl0aGluZyB3aXRoICdnaXQnLiAgVGhpcyBoYXMgYmVlbgorICAgY2hhbmdlZCBzbyB0aGF0ICdnaXQnIHBhY2thZ2UgY29udGFpbnMganVzdCB0aGUgY29yZSBwYXJ0cywKKyAgIGFuZCB3ZSBub3cgc3VwcGx5ICdnaXQtYWxsJyBtZXRhcGFja2FnZSB0byBzbHVycCBpbiBldmVyeXRoaW5nLgorICAgVGhpcyBzaG91bGQgbWF0Y2ggZW5kIHVzZXIncyBleHBlY3RhdGlvbiBiZXR0ZXIuCisKKyAqIFdoZW4gc29tZSByZWZzIGZhaWxlZCB0byB1cGRhdGUsIGdpdC1wdXNoIHJlcG9ydGVkICJmYWlsdXJlIgorICAgd2hpY2ggd2FzIHVuY2xlYXIgaWYgc29tZSBvdGhlciByZWZzIHdlcmUgdXBkYXRlZCBvciBhbGwgb2YKKyAgIHRoZW0gZmFpbGVkIGF0b21pY2FsbHkgKHRoZSBhbnN3ZXIgaXMgdGhlIGZvcm1lcikuICBSZXdvcmRlZAorICAgdGhlIG1lc3NhZ2UgdG8gY2xhcmlmeSB0aGlzLgorCisgKiAiZ2l0IGNsb25lIiBmcm9tIGEgcmVwb3NpdG9yeSB3aG9zZSBIRUFEIHdhcyBtaXNjb25maWd1cmVkCisgICBkaWQgbm90IHNldCB1cCB0aGUgcmVtb3RlIHByb3Blcmx5LiAgTm93IGl0IHRyaWVzIHRvIGRvCisgICBiZXR0ZXIuCisKKyAqIFVwZGF0ZWQgZ2l0LXB1c2ggZG9jdW1lbnRhdGlvbiB0byBjbGFyaWZ5IHdoYXQgIm1hdGNoaW5nIgorICAgbWVhbnMsIGluIG9yZGVyIHRvIHJlZHVjZSB1c2VyIGNvbmZ1c2lvbi4KKworICogVXBkYXRlZCBnaXQtYWRkIGRvY3VtZW50YXRpb24gdG8gY2xhcmlmeSAiYWRkIC11IiBvcGVyYXRlcyBpbgorICAgdGhlIGN1cnJlbnQgc3ViZGlyZWN0b3J5IHlvdSBhcmUgaW4sIGp1c3QgbGlrZSBvdGhlciBjb21tYW5kcy4KKworICogZ2l0LWd1aSB1cGRhdGVzIHRvIHdvcmsgb24gT1NYIGFuZCBXaW5kb3dzIGJldHRlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyM2MxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjQudHh0CkBAIC0wLDAgKzEsNjYgQEAKK0dJVCB2MS41LjQuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjQuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgd2l0aCBhbiBvdmVydGlnaHQgdW1hc2sgc3VjaCBhcyAwNzcgbWFkZQorICAgaW5zdGFsbGVkIHRlbXBsYXRlcyB1bnJlYWRhYmxlIGJ5IG90aGVycywgd2hpbGUgdGhlIHJlc3Qgb2YgdGhlIGluc3RhbGwKKyAgIGFyZSBkb25lIGluIGEgd2F5IHRoYXQgaXMgZnJpZW5kbHkgdG8gdW1hc2sgMDIyLgorCisgKiAiZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdyAkY3ZzZGlyIiBtaXNiZWhhdmVkIHdoZW4gR0lUX0RJUiBpcyBzZXQgdG8gYQorICAgcmVsYXRpdmUgZGlyZWN0b3J5LgorCisgKiAiZ2l0IGh0dHAtcHVzaCIgaGFkIGFuIGludmFsaWQgbWVtb3J5IGFjY2VzcyB0aGF0IGNvdWxkIGxlYWQgaXQgdG8KKyAgIHNlZ2ZhdWx0LgorCisgKiBXaGVuICJnaXQgcmViYXNlIC1pIiBnYXZlIGNvbnRyb2wgYmFjayB0byB0aGUgdXNlciBmb3IgYSBjb21taXQgdGhhdCBpcworICAgbWFya2VkIHRvIGJlIGVkaXRlZCwgaXQganVzdCBzYWlkICJtb2RpZnkgaXQgd2l0aCBjb21taXQgLS1hbWVuZCIsCisgICB3aXRob3V0IHNheWluZyB3aGF0IHRvIGRvIHRvIGNvbnRpbnVlIGFmdGVyIG1vZGlmeWluZyBpdC4gIEdpdmUgYW4KKyAgIGV4cGxpY2l0IGluc3RydWN0aW9uIHRvIHJ1biAicmViYXNlIC0tY29udGludWUiIHRvIGJlIG1vcmUgaGVscGZ1bC4KKworICogImdpdCBzZW5kLWVtYWlsIiBpbiAxLjUuNC4zIGlzc3VlZCBhIGJvZ3VzIGVtcHR5IEluLVJlcGx5LVRvOiBoZWFkZXIuCisKKyAqICJnaXQgYmlzZWN0IiBzaG93ZWQgbXlzdGVyaW91cyAid29uJ3QgYmlzZWN0IG9uIHNlZWtlZCB0cmVlIiBlcnJvciBtZXNzYWdlLgorICAgVGhpcyB3YXMgbGVmdG92ZXIgZnJvbSBDb2dpdG8gZGF5cyB0byBwcmV2ZW50ICJiaXNlY3QiIHN0YXJ0aW5nIGZyb20gYQorICAgY2ctc2Vla2VkIHN0YXRlLiAgV2Ugc3RpbGwga2VlcCB0aGUgQ29naXRvIHNhZmV0eSwgYnV0IHJ1bm5pbmcgImdpdCBiaXNlY3QKKyAgIHN0YXJ0IiB3aGVuIGFub3RoZXIgYmlzZWN0IHdhcyBpbiBlZmZlY3Qgd2lsbCBjbGVhbiB1cCBhbmQgc3RhcnQgb3Zlci4KKworICogImdpdCBwdXNoIiB3aXRoIGFuIGV4cGxpY2l0IFBBVEggdG8gcmVjZWl2ZS1wYWNrIGRpZCBub3QgcXVpdGUgd29yayBpZgorICAgcmVjZWl2ZS1wYWNrIHdhcyBub3Qgb24gdXN1YWwgUEFUSC4gIFdlIGVhcmxpZXIgZml4ZWQgdGhlIHNhbWUgaXNzdWUKKyAgIHdpdGggImdpdCBmZXRjaCIgYW5kIHVwbG9hZC1wYWNrLCBidXQgc29tZWhvdyBmb3Jnb3QgdG8gZG8gc28gaW4gdGhlCisgICBvdGhlciBkaXJlY3Rpb24uCisKKyAqIGdpdC1ndWkncyBpbmZvIGRpYWxvZyB3YXMgbm90IGRpc3BsYXllZCBjb3JyZWN0bHkgd2hlbiB0aGUgdXNlciB0cmllcworICAgdG8gY29tbWl0IG5vdGhpbmcgKGkuZS4gd2l0aG91dCBzdGFnaW5nIGFueXRoaW5nKS4KKworICogImdpdCByZXZlcnQiIGRpZCBub3QgcHJvcGVybHkgZmFpbCB3aGVuIGF0dGVtcHRpbmcgdG8gcnVuIHdpdGggYQorICAgZGlydHkgaW5kZXguCisKKyAqICJnaXQgbWVyZ2UgLS1uby1jb21taXQgLS1uby1mZiA8b3RoZXI+IiBpbmNvcnJlY3RseSBtYWRlIGNvbW1pdHMuCisKKyAqICJnaXQgbWVyZ2UgLS1zcXVhc2ggLS1uby1mZiA8b3RoZXI+Iiwgd2hpY2ggaXMgYSBub25zZW5zZSBjb21iaW5hdGlvbgorICAgb2Ygb3B0aW9ucywgd2FzIG5vdCByZWplY3RlZC4KKworICogImdpdCBscy1yZW1vdGUiIGFuZCAiZ2l0IHJlbW90ZSBzaG93IiBhZ2FpbnN0IGFuIGVtcHR5IHJlcG9zaXRvcnkKKyAgIGZhaWxlZCwgaW5zdGVhZCBvZiBqdXN0IGdpdmluZyBhbiBlbXB0eSByZXN1bHQgKHJlZ3Jlc3Npb24pLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBkaWQgbm90IGhhbmRsZSBhIHJlbmFtZWQgcGF0aCB3aG9zZSBuYW1lIG5lZWRzIHRvIGJlCisgICBxdW90ZWQsIGR1ZSB0byBhIGJ1ZyBpbiB1bnF1b3RlX2Nfc3R5bGUoKSBmdW5jdGlvbi4KKworICogImdpdCBjdnNleHBvcnRjb21taXQiIHdhcyBjb25mdXNlZCB3aGVuIG11bHRpcGxlIGZpbGVzIHdpdGggdGhlIHNhbWUKKyAgIGJhc2VuYW1lIG5lZWRlZCB0byBiZSBwdXNoZWQgb3V0IGluIHRoZSBzYW1lIGNvbW1pdC4KKworICogImdpdCBkYWVtb24iIGRpZCBub3Qgc2VuZCBlYXJseSBlcnJvcnMgdG8gc3lzbG9nLgorCisgKiAiZ2l0IGxvZyAtLW1lcmdlIiBkaWQgbm90IHdvcmsgd2VsbCB3aXRoIC0tbGVmdC1yaWdodCBvcHRpb24uCisKKyAqICJnaXQgc3ZuIiBwcm9tcHRlZCBmb3IgY2xpZW50IGNlcnQgcGFzc3dvcmQgZXZlcnkgdGltZSBpdCBhY2Nlc3NlZCB0aGUKKyAgIHNlcnZlci4KKworICogVGhlIHJlc2V0IGNvbW1hbmQgaW4gImdpdCBmYXN0LWltcG9ydCIgZGF0YSBzdHJlYW0gd2FzIGRvY3VtZW50ZWQgdG8KKyAgIGVuZCB3aXRoIGFuIG9wdGlvbmFsIExGLCBidXQgaXQgYWN0dWFsbHkgcmVxdWlyZWQgb25lLgorCisgKiAiZ2l0IHN2biBkY29tbWl0L3JlYmFzZSIgZGlkIG5vdCBob25vciAtLXJld3JpdGUtcm9vdCBvcHRpb24uCisKK0Fsc28gaW5jbHVkZWQgYXJlIGEgaGFuZGZ1bCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmQxMzBlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC41LnR4dApAQCAtMCwwICsxLDU2IEBACitHSVQgdjEuNS40LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS40LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZmV0Y2ggdGhlcmUiIHdoZW4gdGhlIFVSTCBpbmZvcm1hdGlvbiBjYW1lIGZyb20gdGhlIENvZ2l0byBzdHlsZQorICAgYnJhbmNoZXMvdGhlcmUgZmlsZSBkaWQgbm90IHVwZGF0ZSByZWZzL2hlYWRzL3RoZXJlIChyZWdyZXNzaW9uIGluCisgICAxLjUuNCkuCisKKyAqIEJvZ3VzIHJlZnNwZWMgY29uZmlndXJhdGlvbiBzdWNoIGFzICJyZW1vdGUudGhlcmUuZmV0Y2ggPSA9IiB3ZXJlIG5vdAorICAgZGV0ZWN0ZWQgYXMgZXJyb3JzIChyZWdyZXNzaW9uIGluIDEuNS40KS4KKworICogWW91IGNvdWxkbid0IHNwZWNpZnkgYSBjdXN0b20gZWRpdG9yIHdob3NlIHBhdGggY29udGFpbnMgYSB3aGl0ZXNwYWNlCisgICB2aWEgR0lUX0VESVRPUiAoYW5kIGNvcmUuZWRpdG9yKS4KKworICogVGhlIHN1YmRpcmVjdG9yeSBmaWx0ZXIgdG8gImdpdCBmaWx0ZXItYnJhbmNoIiBtaXNoYW5kbGVkIGEgaGlzdG9yeQorICAgd2hlcmUgdGhlIHN1YmRpcmVjdG9yeSBiZWNvbWVzIGVtcHR5IGFuZCB0aGVuIGxhdGVyIGJlY29tZXMgbm9uLWVtcHR5LgorCisgKiAiZ2l0IHNob3J0bG9nIiBnYXZlIGFuIGVtcHR5IGxpbmUgaWYgdGhlIG9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlIHdhcworICAgbWFsZm9ybWVkIChlLmcuIGEgYm90Y2hlZCBpbXBvcnQgZnJvbSBmb3JlaWduIFNDTSkuICBOb3cgaXQgZmluZHMgdGhlCisgICBmaXJzdCBub24tZW1wdHkgbGluZSBhbmQgdXNlcyBpdCBmb3IgYmV0dGVyIGluZm9ybWF0aW9uLgorCisgKiBXaGVuIHRoZSB1c2VyIGZhaWxzIHRvIGdpdmUgYSByZXZpc2lvbiBwYXJhbWV0ZXIgdG8gImdpdCBzdm4iLCBhbiBlcnJvcgorICAgZnJvbSB0aGUgUGVybCBpbnRlcnByZXRlciB3YXMgaXNzdWVkIGJlY2F1c2UgdGhlIHNjcmlwdCBsYWNrZWQgcHJvcGVyCisgICBlcnJvciBjaGVja2luZy4KKworICogQWZ0ZXIgImdpdCByZWJhc2UiIHN0b3BwZWQgZHVlIHRvIGNvbmZsaWN0cywgaWYgdGhlIHVzZXIgcGxheWVkIHdpdGgKKyAgICJnaXQgcmVzZXQiIGFuZCBmcmllbmRzLCAiZ2l0IHJlYmFzZSAtLWFib3J0IiBmYWlsZWQgdG8gZ28gYmFjayB0byB0aGUKKyAgIGNvcnJlY3QgY29tbWl0LgorCisgKiBBZGRpdGlvbmFsIHdvcmsgdHJlZXMgcHJlcGFyZWQgd2l0aCBnaXQtbmV3LXdvcmtkaXIgKGluIGNvbnRyaWIvKSBkaWQKKyAgIG5vdCBzaGFyZSBnaXQtc3ZuIG1ldGFkYXRhIGRpcmVjdG9yeSAuZ2l0L3N2biB3aXRoIHRoZSBvcmlnaW5hbC4KKworICogImdpdC1tZXJnZS1yZWN1cnNpdmUiIGRpZCBub3QgbWFyayBhZGRpdGlvbiBvZiB0aGUgc2FtZSBwYXRoIHdpdGgKKyAgIGRpZmZlcmVudCBmaWxlbW9kZXMgY29ycmVjdGx5IGFzIGEgY29uZmxpY3QuCisKKyAqICJnaXR3ZWIiIGdhdmUgbWFsZm9ybWVkIFVSTCB3aGVuIHBhdGhpbmZvIHN0eXBlIHBhdGhzIGFyZSBpbiB1c2UuCisKKyAqICItbiIgc3RhbmRzIGZvciAiLS1uby10YWdzIiBhZ2FpbiBmb3IgImdpdCBmZXRjaCIuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBkaWQgbm90IGRldGVjdCB0aGUgbmVlZCB0byBhZGQgOC1iaXQgTUlNRSBoZWFkZXIKKyAgIHdoZW4gdGhlIHVzZXIgdXNlZCBmb3JtYXQuaGVhZGVyIGNvbmZpZ3VyYXRpb24uCisKKyAqICJyZXZ+IiByZXZpc2lvbiBzcGVjaWZpZXIgdXNlZCB0byBtZWFuICJyZXYiLCB3aGljaCB3YXMgaW5jb25zaXN0ZW50CisgICB3aXRoIGhvdyAicmV2XiIgd29ya2VkLiAgTm93ICJyZXZ+IiBpcyB0aGUgc2FtZSBhcyAicmV2fjEiIChoZW5jZSBpdAorICAgYWxzbyBpcyB0aGUgc2FtZSBhcyAicmV2XjEiKSwgYW5kICJyZXZ+MCIgaXMgdGhlIHNhbWUgYXMgInJldl4wIgorICAgKGkuZS4gaXQgaGFzIHRvIGJlIGEgY29tbWl0KS4KKworICogImdpdCBxdWlsdGltcG9ydCIgZGlkIG5vdCBncm9rIGVtcHR5IGxpbmVzLCBsaW5lcyBpbiAiZmlsZSAtcE5OTiIKKyAgIGZvcm1hdCB0byBzcGVjaWZ5IHRoZSBwcmVmaXggbGV2ZWxzIGFuZCBsaW5lcyB3aXRoIHRyYWlsaW5nIGNvbW1lbnRzLgorCisgKiAiZ2l0IHJlYmFzZSAtbSIgdHJpZ2dlcmVkIHByZS1jb21taXQgdmVyaWZpY2F0aW9uLCB3aGljaCBtYWRlCisgICAicmViYXNlIC0tY29udGludWUiIGltcG9zc2libGUuCisKK0FzIHVzdWFsLCBpdCBhbHNvIGNvbWVzIHdpdGggbWFueSBkb2N1bWVudGF0aW9uIGZpeGVzIGFuZCBjbGFyaWZpY2F0aW9ucy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjQuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlM2MzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjYudHh0CkBAIC0wLDAgKzEsNDMgQEAKK0dJVCB2MS41LjQuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJIHBlcnNvbmFsbHkgZG8gbm90IHRoaW5rIHRoZXJlIGlzIGFueSByZWFzb24gYW55Ym9keSBzaG91bGQgd2FudCB0bworcnVuIHYxLjUuNC5YIHNlcmllcyB0aGVzZSBkYXlzLCBiZWNhdXNlICdtYXN0ZXInIHZlcnNpb24gaXMgYWx3YXlzCittb3JlIHN0YWJsZSB0aGFuIGFueSB0YWdnZWQgcmVsZWFzZWQgdmVyc2lvbiBvZiBnaXQuCisKK1RoaXMgaXMgcHJpbWFyaWx5IHRvIGZ1dHVyZXByb29mICJnaXQtc2hlbGwiIHRvIGFjY2VwdCByZXF1ZXN0cword2l0aG91dCBhIGRhc2ggYmV0d2VlbiAiZ2l0IiBhbmQgc3ViY29tbWFuZCBuYW1lIChlLmcuICJnaXQKK3VwbG9hZC1wYWNrIikgd2hpY2ggdGhlIG5ld2VyIGNsaWVudCB3aWxsIHN0YXJ0IHRvIG1ha2Ugc29tZXRpbWUgaW4KK3RoZSBmdXR1cmUuCisKK0ZpeGVzIHNpbmNlIHYxLjUuNC41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDb21tYW5kIGxpbmUgb3B0aW9uICItbiIgdG8gImdpdC1yZXBhY2siIHdhcyBub3QgY29ycmVjdGx5IHBhcnNlZC4KKworICogRXJyb3IgbWVzc2FnZXMgZnJvbSAiZ2l0LWFwcGx5IiB3aGVuIHRoZSBwYXRjaGZpbGUgY2Fubm90IGJlIG9wZW5lZAorICAgaGF2ZSBiZWVuIGltcHJvdmVkLgorCisgKiBFcnJvciBtZXNzYWdlcyBmcm9tICJnaXQtYmlzZWN0IiB3aGVuIGdpdmVuIG5vbnNlbnNlIHJldmlzaW9ucyBoYXZlCisgICBiZWVuIGltcHJvdmVkLgorCisgKiByZWZsb2cgc3ludGF4IHRoYXQgdXNlcyB0aW1lIGUuZy4gIkhFQURAezEwIHNlY29uZHMgYWdvfTpwYXRoIiBkaWQgbm90CisgICBzdG9wIHBhcnNpbmcgYXQgdGhlIGNsb3NpbmcgIn0iLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBebWFzdGVyXjIiIHByaW50ZWQgc29saXRhcnkgIl4iLAorICAgYnV0IGl0IHNob3VsZCBwcmludCBub3RoaW5nLgorCisgKiAiZ2l0IGFwcGx5IiBkaWQgbm90IGVuZm9yY2UgIm1hdGNoIGF0IHRoZSBiZWdpbm5pbmciIGNvcnJlY3RseS4KKworICogYSBwYXRoIHNwZWNpZmljYXRpb24gImEvYiIgaW4gLmdpdGF0dHJpYnV0ZXMgZmlsZSBzaG91bGQgbm90IG1hdGNoCisgICAic3ViL2EvYiIsIGJ1dCBpdCBkaWQuCisKKyAqICJnaXQgbG9nIC0tZGF0ZS1vcmRlciAtLXRvcG8tb3JkZXIiIGRpZCBub3Qgb3ZlcnJpZGUgdGhlIGVhcmxpZXIKKyAgIGRhdGUtb3JkZXIgd2l0aCB0b3BvLW9yZGVyIGFzIGV4cGVjdGVkLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBkaWQgbm90IGV4cG9ydCBvY3RvcHVzIG1lcmdlcyBjb3JyZWN0bHkuCisKKyAqICJnaXQgYXJjaGl2ZSAtLXByZWZpeD0kcGF0aC8iIG1pc2hhbmRsZWQgZ2l0YXR0cmlidXRlcy4KKworQXMgdXN1YWwsIGl0IGFsc28gY29tZXMgd2l0aCBtYW55IGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIGNsYXJpZmljYXRpb25zLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY1YTBlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC43LnR4dApAQCAtMCwwICsxLDEwIEBACitHSVQgdjEuNS40LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgMS41LjQuNworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBSZW1vdmVkIHN1cHBvcnQgZm9yIGFuIG9ic29sZXRlIGdpdHdlYiByZXF1ZXN0IFVSSSwgd2hvc2UKKyAgIGltcGxlbWVudGF0aW9uIHJhbiAiZ2l0IGRpZmYiIFBvcmNlbGFpbiwgaW5zdGVhZCBvZiB1c2luZyBwbHVtYmluZywKKyAgIHdoaWNoIHdvdWxkIGhhdmUgcnVuIGFuIGV4dGVybmFsIGRpZmYgY29tbWFuZCBzcGVjaWZpZWQgaW4gdGhlCisgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gYXMgdGhlIGdpdHdlYiB1c2VyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTMyM2I2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNC50eHQKQEAgLTAsMCArMSwzNzcgQEAKK0dJVCB2MS41LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbW92YWwKKy0tLS0tLS0KKworICogImdpdCBzdm5pbXBvcnQiIHdhcyByZW1vdmVkIGluIGZhdm9yIG9mICJnaXQgc3ZuIi4gIEl0IGlzIHN0aWxsIHRoZXJlCisgICBpbiB0aGUgc291cmNlIHRyZWUgKGNvbnRyaWIvZXhhbXBsZXMpIGJ1dCB1bnN1cHBvcnRlZC4KKworICogQXMgZ2l0LWNvbW1pdCBhbmQgZ2l0LXN0YXR1cyBoYXZlIGJlZW4gcmV3cml0dGVuLCAiZ2l0IHJ1bnN0YXR1cyIKKyAgIGhlbHBlciBzY3JpcHQgbG9zdCBhbGwgaXRzIHVzZXJzIGFuZCBoYXMgYmVlbiByZW1vdmVkLgorCisKK1RlbXBvcmFyaWx5IGRpc2FibGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGh0dHAtcHVzaCIgaXMga25vd24gbm90IHRvIHdvcmsgd2VsbCB3aXRoIGNVUkwgbGlicmFyeSBvbGRlcgorICAgdGhhbiA3LjE2LCBhbmQgd2UgaGFkIHJlcG9ydHMgb2YgcmVwb3NpdG9yeSBjb3JydXB0aW9uLiAgSXQgaXMKKyAgIGRpc2FibGVkIG9uIHN1Y2ggcGxhdGZvcm1zIGZvciBub3cuICBVbmZvcnR1bmF0ZWx5LCAxLjUuMy44IHNoYXJlcworICAgdGhlIHNhbWUgaXNzdWUuICBJbiBvdGhlciB3b3JkcywgdGhpcyBkb2VzIG5vdCBtZWFuIHlvdSB3aWxsIGJlCisgICBmaW5lIGlmIHlvdSBzdGljayB0byBhbiBvbGRlciBnaXQgcmVsZWFzZS4gIEZvciBub3csIHBsZWFzZSBkbyBub3QKKyAgIHVzZSBodHRwLXB1c2ggZnJvbSBvbGRlciBnaXQgd2l0aCBjVVJMIG9sZGVyIHRoYW4gNy4xNiBpZiB5b3UKKyAgIHZhbHVlIHlvdXIgZGF0YS4gQSBwcm9wZXIgZml4IHdpbGwgaG9wZWZ1bGx5IG1hdGVyaWFsaXplIGluCisgICBsYXRlciB2ZXJzaW9ucy4KKworCitEZXByZWNhdGlvbiBub3RpY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEZyb20gdjEuNi4wLCBnaXQgd2lsbCBieSBkZWZhdWx0IGluc3RhbGwgZGFzaGVkIGZvcm0gb2YgY29tbWFuZHMKKyAgIChlLmcuICJnaXQtY29tbWl0Iikgb3V0c2lkZSBvZiB1c2Vycycgbm9ybWFsICRQQVRILCBhbmQgd2lsbCBpbnN0YWxsCisgICBvbmx5IHNlbGVjdGVkIGNvbW1hbmRzICgiZ2l0IiBpdHNlbGYsIGFuZCAiZ2l0ayIpIGluICRQQVRILiAgVGhpcworICAgaW1wbGllczoKKworICAgLSBVc2luZyBkYXNoZWQgZm9ybXMgb2YgZ2l0IGNvbW1hbmRzIChlLmcuICJnaXQtY29tbWl0IikgZnJvbSB0aGUKKyAgICAgY29tbWFuZCBsaW5lIGhhcyBiZWVuIGluZm9ybWFsbHkgZGVwcmVjYXRlZCBzaW5jZSBlYXJseSAyMDA2LCBidXQKKyAgICAgbm93IGl0IG9mZmljaWFsbHkgaXMsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gIFVzZQorICAgICBkYXNoLWxlc3MgZm9ybXMgKGUuZy4gImdpdCBjb21taXQiKSBpbnN0ZWFkLgorCisgICAtIFVzaW5nIGRhc2hlZCBmb3JtcyBmcm9tIHlvdXIgc2NyaXB0cywgd2l0aG91dCBmaXJzdCBwcmVwZW5kaW5nIHRoZQorICAgICByZXR1cm4gdmFsdWUgZnJvbSAiZ2l0IC0tZXhlYy1wYXRoIiB0byB0aGUgc2NyaXB0cycgUEFUSCwgaGFzIGJlZW4KKyAgICAgaW5mb3JtYWxseSBkZXByZWNhdGVkIHNpbmNlIGVhcmx5IDIwMDYsIGJ1dCBub3cgaXQgb2ZmaWNpYWxseSBpcy4KKworICAgLSBVc2Ugb2YgZGFzaGVkIGZvcm1zIHdpdGggIlBBVEg9JChnaXQgLS1leGVjLXBhdGgpOiRQQVRIOyBleHBvcnQKKyAgICAgUEFUSCIgZWFybHkgaW4geW91ciBzY3JpcHQgaXMgbm90IGRlcHJlY2F0ZWQgd2l0aCB0aGlzIGNoYW5nZS4KKworICAgVXNlcnMgYXJlIHN0cm9uZ2x5IGVuY291cmFnZWQgdG8gYWRqdXN0IHRoZWlyIGhhYml0cyBhbmQgc2NyaXB0cyBub3cKKyAgIHRvIHByZXBhcmUgZm9yIHRoaXMgY2hhbmdlLgorCisgKiBUaGUgcG9zdC1yZWNlaXZlIGhvb2sgd2FzIGludHJvZHVjZWQgaW4gTWFyY2ggMjAwNyB0byBzdXBlcnNlZGUKKyAgIHRoZSBwb3N0LXVwZGF0ZSBob29rLCBwcmltYXJpbHkgdG8gb3ZlcmNvbWUgdGhlIGNvbW1hbmQgbGluZSBsZW5ndGgKKyAgIGxpbWl0YXRpb24gb2YgdGhlIGxhdHRlci4gIFVzZSBvZiBwb3N0LXVwZGF0ZSBob29rIHdpbGwgYmUgZGVwcmVjYXRlZAorICAgaW4gZnV0dXJlIHZlcnNpb25zIG9mIGdpdCwgc3RhcnRpbmcgZnJvbSB2MS42LjAuCisKKyAqICJnaXQgbG9zdC1mb3VuZCIgd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgImdpdCBmc2NrIidzIC0tbG9zdC1mb3VuZAorICAgb3B0aW9uLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuCisKKyAqICJnaXQgcGVlay1yZW1vdGUiIGlzIGRlcHJlY2F0ZWQsIGFzICJnaXQgbHMtcmVtb3RlIiB3YXMgd3JpdHRlbiBpbiBDCisgICBhbmQgd29ya3MgZm9yIGFsbCB0cmFuc3BvcnRzOyAiZ2l0IHBlZWstcmVtb3RlIiB3aWxsIGJlIHJlbW92ZWQgaW4KKyAgIHRoZSBmdXR1cmUuCisKKyAqICJnaXQgcmVwby1jb25maWciIHdoaWNoIHdhcyBhbiBvbGQgbmFtZSBmb3IgImdpdCBjb25maWciIGNvbW1hbmQKKyAgIGhhcyBiZWVuIHN1cHBvcnRlZCB3aXRob3V0IGJlaW5nIGFkdmVydGlzZWQgZm9yIGEgbG9uZyB0aW1lLiAgVGhlCisgICBuZXh0IGZlYXR1cmUgcmVsZWFzZSB3aWxsIHJlbW92ZSBpdC4KKworICogRnJvbSB2MS42LjAsIHRoZSByZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IGNvbmZpZyBvcHRpb24gd2lsbCBkZWZhdWx0CisgICB0byB0cnVlLCB3aGljaCB3aWxsIGdpdmUgZGVuc2VyIHBhY2tmaWxlcyAoaS5lLiBtb3JlIGVmZmljaWVudCBzdG9yYWdlKS4KKyAgIFRoZSBkb3duc2lkZSBpcyB0aGF0IGdpdCBvbGRlciB0aGFuIHZlcnNpb24gMS40LjQgd2lsbCBub3QgYmUgYWJsZQorICAgdG8gZGlyZWN0bHkgdXNlIGEgcmVwb3NpdG9yeSBwYWNrZWQgdXNpbmcgdGhpcyBzZXR0aW5nLgorCisgKiBGcm9tIHYxLjYuMCwgdGhlIHBhY2suaW5kZXh2ZXJzaW9uIGNvbmZpZyBvcHRpb24gd2lsbCBkZWZhdWx0IHRvIDIsCisgICB3aGljaCBpcyBzbGlnaHRseSBtb3JlIGVmZmljaWVudCwgYW5kIG1ha2VzIHJlcGFja2luZyBtb3JlIGltbXVuZSB0bworICAgZGF0YSBjb3JydXB0aW9ucy4gIEdpdCBvbGRlciB0aGFuIHZlcnNpb24gMS41LjIgbWF5IHJldmVydCB0byB2ZXJzaW9uIDEKKyAgIG9mIHRoZSBwYWNrIGluZGV4IHdpdGggYSBtYW51YWwgImdpdCBpbmRleC1wYWNrIiB0byBiZSBhYmxlIHRvIGRpcmVjdGx5CisgICBhY2Nlc3MgY29ycmVzcG9uZGluZyBwYWNrIGZpbGVzLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDb21lcyB3aXRoIG11Y2ggaW1wcm92ZWQgZ2l0aywgd2l0aCBpMThuLgorCisgKiBDb21lcyB3aXRoIGdpdC1ndWkgMC45LjIgd2l0aCBpMThuLgorCisgKiBnaXRrIGlzIG5vdyBtZXJnZWQgYXMgYSBzdWJkaXJlY3Rvcnkgb2YgZ2l0LmdpdCBwcm9qZWN0LCBpbgorICAgcHJlcGFyYXRpb24gZm9yIGl0cyBpMThuLgorCisgKiBwcm9ncmVzcyBkaXNwbGF5cyBmcm9tIG1hbnkgY29tbWFuZHMgYXJlIGEgbG90IG5pY2VyIHRvIHRoZSBleWUuCisgICBUcmFuc2ZlciBjb21tYW5kcyBzaG93IHRocm91Z2hwdXQgZGF0YS4KKworICogbWFueSBjb21tYW5kcyB0aGF0IHBheSBhdHRlbnRpb24gdG8gcGVyLWRpcmVjdG9yeSAuZ2l0aWdub3JlIG5vdyBkbworICAgc28gbGF6aWx5LCB3aGljaCBtYWtlcyB0aGUgdXN1YWwgY2FzZSBnbyBtdWNoIGZhc3Rlci4KKworICogT3V0cHV0IHByb2Nlc3NpbmcgZm9yICctLXByZXR0eT1mb3JtYXQ6PHVzZXIgZm9ybWF0PicgaGFzIGJlZW4KKyAgIG9wdGltaXplZC4KKworICogUmVuYW1lIGRldGVjdGlvbiBvZiBkaWZmIGZhbWlseSB3aGlsZSBkZXRlY3RpbmcgZXhhY3QgbWF0Y2hlcyBoYXMKKyAgIGJlZW4gZ3JlYXRseSBvcHRpbWl6ZWQuCisKKyAqIFJlbmFtZSBkZXRlY3Rpb24gb2YgZGlmZiBmYW1pbHkgdHJpZXMgdG8gbWFrZSBtb3JlIG5hdHVyYWwgbG9va2luZworICAgcGFpcmluZy4gIEVhcmxpZXIsIGlmIG11bHRpcGxlIGlkZW50aWNhbCByZW5hbWUgc291cmNlcyB3ZXJlCisgICBmb3VuZCBpbiB0aGUgcHJlaW1hZ2UsIHRoZSBzb3VyY2UgdXNlZCB3YXMgcGlja2VkIHByZXR0eSBtdWNoIGF0IHJhbmRvbS4KKworICogVmFsdWUgInRydWUiIGZvciBjb2xvci5kaWZmIGFuZCBjb2xvci5zdGF0dXMgY29uZmlndXJhdGlvbiB1c2VkIHRvCisgICBtZWFuICJhbHdheXMiIChldmVuIHdoZW4gdGhlIG91dHB1dCBpcyBub3QgZ29pbmcgdG8gYSB0ZXJtaW5hbCkuCisgICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCB0byBtZWFuIHRoZSBzYW1lIHRoaW5nIGFzICJhdXRvIi4KKworICogImdpdCBkaWZmIiBQb3JjZWxhaW4gbm93IHJlc3BlY3RzIGRpZmYuZXh0ZXJuYWwgY29uZmlndXJhdGlvbiwgd2hpY2gKKyAgIGlzIGFub3RoZXIgd2F5IHRvIHNwZWNpZnkgR0lUX0VYVEVSTkFMX0RJRkYuCisKKyAqICJnaXQgZGlmZiIgY2FuIGJlIHRvbGQgdG8gdXNlIGRpZmZlcmVudCBwcmVmaXhlcyBvdGhlciB0aGFuCisgICAiYS8iIGFuZCAiYi8iIGUuZy4gImdpdCBkaWZmIC0tc3JjLXByZWZpeD1sLyAtLWRzdC1wcmVmaXg9ay8iLgorCisgKiAiZ2l0IGRpZmYiIHNvbWV0aW1lcyBkaWQgbm90IHF1b3RlIHBhdGhzIHdpdGggZnVubnkKKyAgIGNoYXJhY3RlcnMgcHJvcGVybHkuCisKKyAqICJnaXQgbG9nIiAoYW5kIGFueSByZXZpc2lvbiB0cmF2ZXJzYWwgY29tbWFuZHMpIG1pc2JlaGF2ZWQKKyAgIHdoZW4gLS1kaWZmLWZpbHRlciBpcyBnaXZlbiBidXQgd2FzIG5vdCBhc2tlZCB0byBhY3R1YWxseQorICAgcHJvZHVjZSBkaWZmLgorCisgKiBIVFRQIHByb3h5IGNhbiBiZSBzcGVjaWZpZWQgcGVyIHJlbW90ZSByZXBvc2l0b3J5IHVzaW5nCisgICByZW1vdGUuKi5odHRwcHJveHkgY29uZmlndXJhdGlvbiwgb3IgZ2xvYmFsIGh0dHAucHJveHkgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUuCisKKyAqIFZhcmlvdXMgUGVyZm9yY2UgaW1wb3J0ZXIgdXBkYXRlcy4KKworICogRXhhbXBsZSB1cGRhdGUgYW5kIHBvc3QtcmVjZWl2ZSBob29rcyBoYXZlIGJlZW4gaW1wcm92ZWQuCisKKyAqIEFueSBjb21tYW5kIHRoYXQgd2FudHMgdG8gdGFrZSBhIGNvbW1pdCBvYmplY3QgbmFtZSBjYW4gbm93IHVzZQorICAgIjovc3RyaW5nIiBzeW50YXggdG8gbmFtZSBhIGNvbW1pdC4KKworICogImdpdCByZXNldCIgaXMgbm93IGJ1aWx0LWluIGFuZCBpdHMgb3V0cHV0IGNhbiBiZSBzcXVlbGNoZWQgd2l0aCAtcS4KKworICogImdpdCByZXNldCAtLWhhcmQiIGRvZXMgbm90IG1ha2UgYW55IHNlbnNlIGluIGEgYmFyZQorICAgcmVwb3NpdG9yeSwgYnV0IGRpZCBub3QgZXJyb3Igb3V0OyBmaXhlZC4KKworICogImdpdCBzZW5kLWVtYWlsIiBjYW4gb3B0aW9uYWxseSB0YWxrIG92ZXIgc3NtdHAgYW5kIHVzZSBTTVRQLUFVVEguCisKKyAqICJnaXQgcmViYXNlIiBsZWFybmVkIC0td2hpdGVzcGFjZSBvcHRpb24uCisKKyAqIEluICJnaXQgcmViYXNlIiwgd2hlbiB5b3UgZGVjaWRlIG5vdCB0byByZXBsYXkgYSBwYXJ0aWN1bGFyIGNoYW5nZQorICAgYWZ0ZXIgdGhlIGNvbW1hbmQgc3RvcHBlZCB3aXRoIGEgY29uZmxpY3QsIHlvdSBjYW4gc2F5ICJnaXQgcmViYXNlCisgICAtLXNraXAiIHdpdGhvdXQgZmlyc3QgcnVubmluZyAiZ2l0IHJlc2V0IC0taGFyZCIsIGFzIHRoZSBjb21tYW5kIG5vdworICAgcnVucyBpdCBmb3IgeW91LgorCisgKiAiZ2l0IHJlYmFzZSAtLWludGVyYWN0aXZlIiBtb2RlIGNhbiBub3cgd29yayBvbiBkZXRhY2hlZCBIRUFELgorCisgKiBPdGhlciBtaW5vciB0byBzZXJpb3VzIGJ1Z3MgaW4gImdpdCByZWJhc2UgLWkiIGhhdmUgYmVlbiBmaXhlZC4KKworICogImdpdCByZWJhc2UiIG5vdyBkZXRhY2hlcyBoZWFkIGR1cmluZyBpdHMgb3BlcmF0aW9uLCBzbyBhZnRlciBhCisgICBzdWNjZXNzZnVsICJnaXQgcmViYXNlIiBvcGVyYXRpb24sIHRoZSByZWZsb2cgZW50cnkgYnJhbmNoQHsxfSBmb3IKKyAgIHRoZSBjdXJyZW50IGJyYW5jaCBwb2ludHMgYXQgdGhlIGNvbW1pdCBiZWZvcmUgdGhlIHJlYmFzZSB3YXMKKyAgIHN0YXJ0ZWQuCisKKyAqICJnaXQgcmViYXNlIC1pIiBhbHNvIHRyaWdnZXJzIHJlcmVyZSB0byBoZWxwIHlvdXIgcmVwZWF0ZWQgbWVyZ2VzLgorCisgKiAiZ2l0IG1lcmdlIiBjYW4gY2FsbCB0aGUgInBvc3QtbWVyZ2UiIGhvb2suCisKKyAqICJnaXQgcGFjay1vYmplY3RzIiBjYW4gb3B0aW9uYWxseSBydW4gZGVsdGlmaWNhdGlvbiB3aXRoIG11bHRpcGxlCisgICB0aHJlYWRzLgorCisgKiAiZ2l0IGFyY2hpdmUiIGNhbiBvcHRpb25hbGx5IHN1YnN0aXR1dGUga2V5d29yZHMgaW4gZmlsZXMgbWFya2VkIHdpdGgKKyAgIGV4cG9ydC1zdWJzdCBhdHRyaWJ1dGUuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIG1hZGUgYSBtaXNndWlkZWQgYXR0ZW1wdCB0byByZXBlYXQgdGhlIG9yaWdpbmFsCisgICBjb21tYW5kIGxpbmUgaW4gdGhlIGdlbmVyYXRlZCBsb2cgbWVzc2FnZSwgd2hlbiB0b2xkIHRvIGNoZXJyeS1waWNrIGEKKyAgIGNvbW1pdCBieSBuYW1pbmcgYSB0YWcgdGhhdCBwb2ludHMgYXQgaXQuICBJdCBkb2VzIG5vdCBhbnltb3JlLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgbGVhcm5lZCAlKHh4eGRhdGU6PGRhdGUtZm9ybWF0Pikgc3ludGF4IHRvIHNob3cgdGhlCisgICB2YXJpb3VzIGRhdGUgZmllbGRzIGluIGRpZmZlcmVudCBmb3JtYXRzLgorCisgKiAiZ2l0IGdjIC0tYXV0byIgaXMgYSBsb3ctaW1wYWN0IHdheSB0byBhdXRvbWF0aWNhbGx5IHJ1biBhIHZhcmlhbnQgb2YKKyAgICJnaXQgcmVwYWNrIiB0aGF0IGRvZXMgbm90IGxvc2UgdW5yZWZlcmVuY2VkIG9iamVjdHMgKHJlYWQ6IHNhZmVyCisgICB0aGFuIHRoZSB1c3VhbCBvbmUpIGFmdGVyIHRoZSB1c2VyIGFjY3VtdWxhdGVzIHRvbyBtYW55IGxvb3NlCisgICBvYmplY3RzLgorCisgKiAiZ2l0IGNsZWFuIiBoYXMgYmVlbiByZXdyaXR0ZW4gaW4gQy4KKworICogWW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgY2xlYW4ucmVxdWlyZUZvcmNlIHRvICJmYWxzZSIgdG8gYWxsb3cKKyAgICJnaXQgY2xlYW4iIHdpdGhvdXQgLWYgdG8gZG8gYW55IGRhbWFnZSAobGFjayBvZiB0aGUgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgdXNlZCB0byBtZWFuICJkbyBub3QgcmVxdWlyZSAtZiBvcHRpb24gdG8gbG9zZSB1bnRyYWNrZWQKKyAgIGZpbGVzIiwgYnV0IHdlIG5vdyB1c2UgdGhlIHNhZmVyIGRlZmF1bHQpLgorCisgKiBUaGUga2luZHMgb2Ygd2hpdGVzcGFjZSBlcnJvcnMgImdpdCBkaWZmIiBhbmQgImdpdCBhcHBseSIgbm90aWNlIChhbmQKKyAgIGZpeCkgY2FuIGJlIGNvbnRyb2xsZWQgdmlhICdjb3JlLndoaXRlc3BhY2UnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAgIGFuZCAnd2hpdGVzcGFjZScgYXR0cmlidXRlIGluIC5naXRhdHRyaWJ1dGVzIGZpbGUuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCAtLWRyeS1ydW4gb3B0aW9uIHRvIHNob3cgd2hhdCB3b3VsZCBoYXBwZW4gaWYgYQorICAgcHVzaCBpcyBydW4uCisKKyAqICJnaXQgcHVzaCIgZG9lcyBub3QgdXBkYXRlIGEgdHJhY2tpbmcgcmVmIG9uIHRoZSBsb2NhbCBzaWRlIHdoZW4gdGhlCisgICByZW1vdGUgcmVmdXNlZCB0byB1cGRhdGUgdGhlIGNvcnJlc3BvbmRpbmcgcmVmLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgLS1taXJyb3Igb3B0aW9uLiAgVGhpcyBpcyB0byBwdXNoIHRoZSBsb2NhbCByZWZzCisgICBvbmUtdG8tb25lIHRvIHRoZSByZW1vdGUsIGFuZCBkZWxldGVzIHJlZnMgZnJvbSB0aGUgcmVtb3RlIHRoYXQgZG8KKyAgIG5vdCBleGlzdCBhbnltb3JlIGluIHRoZSByZXBvc2l0b3J5IG9uIHRoZSBwdXNoaW5nIHNpZGUuCisKKyAqICJnaXQgcHVzaCIgY2FuIHJlbW92ZSBhIGNvcnJ1cHQgcmVmIGF0IHRoZSByZW1vdGUgc2l0ZSB3aXRoIHRoZSB1c3VhbAorICAgIjpyZWYiIHJlZnNwZWMuCisKKyAqICJnaXQgcmVtb3RlIiBrbm93cyAtLW1pcnJvciBtb2RlLiAgVGhpcyBpcyB0byBzZXQgdXAgY29uZmlndXJhdGlvbiB0bworICAgcHVzaCBpbnRvIGEgcmVtb3RlIHJlcG9zaXRvcnkgdG8gc3RvcmUgbG9jYWwgYnJhbmNoIGhlYWRzIHRvIHRoZSBzYW1lCisgICBicmFuY2ggb24gdGhlIHJlbW90ZSBzaWRlLCBhbmQgcmVtb3ZlIGJyYW5jaCBoZWFkcyBsb2NhbGx5IHJlbW92ZWQKKyAgIGZyb20gbG9jYWwgcmVwb3NpdG9yeSBhdCB0aGUgc2FtZSB0aW1lLiAgU3VpdGFibGUgZm9yIHB1c2hpbmcgaW50byBhCisgICBiYWNrLXVwIHJlcG9zaXRvcnkuCisKKyAqICJnaXQgcmVtb3RlIiBsZWFybmVkICJybSIgc3ViY29tbWFuZC4KKworICogImdpdCBjdnNzZXJ2ZXIiIGNhbiBiZSBydW4gdmlhICJnaXQgc2hlbGwiLiAgQWxzbywgImN2cyIgaXMKKyAgIHJlY29nbml6ZWQgYXMgYSBzeW5vbnltIGZvciAiZ2l0IGN2c3NlcnZlciIsIHNvIHRoYXQgQ1ZTIHVzZXJzCisgICBjYW4gYmUgc3dpdGNoZWQgdG8gZ2l0IGp1c3QgYnkgY2hhbmdpbmcgdGhlaXIgbG9naW4gc2hlbGwuCisKKyAqICJnaXQgY3Zzc2VydmVyIiBhY3RzIG1vcmUgbGlrZSByZWNlaXZlLXBhY2sgYnkgcnVubmluZyBwb3N0LXJlY2VpdmUKKyAgIGFuZCBwb3N0LXVwZGF0ZSBob29rcy4KKworICogImdpdCBhbSIgYW5kICJnaXQgcmViYXNlIiBhcmUgZmFyIGxlc3MgdmVyYm9zZS4KKworICogImdpdCBwdWxsIiBsZWFybmVkIHRvIHBhc3MgLS1bbm8tXWZmIG9wdGlvbiB0byB1bmRlcmx5aW5nICJnaXQKKyAgIG1lcmdlIi4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBpcyBhIGRpZmZlcmVudCB3YXkgdG8gaW50ZWdyYXRlIHdoYXQgeW91IGZldGNoZWQKKyAgIGludG8geW91ciBjdXJyZW50IGJyYW5jaC4KKworICogImdpdCBmYXN0LWV4cG9ydCIgcHJvZHVjZXMgZGF0YS1zdHJlYW0gdGhhdCBjYW4gYmUgZmVkIHRvIGZhc3QtaW1wb3J0CisgICB0byByZXByb2R1Y2UgdGhlIGhpc3RvcnkgcmVjb3JkZWQgaW4gYSBnaXQgcmVwb3NpdG9yeS4KKworICogImdpdCBhZGQgLWkiIHRha2VzIHBhdGhzcGVjcyB0byBsaW1pdCB0aGUgc2V0IG9mIGZpbGVzIHRvIHdvcmsgb24uCisKKyAqICJnaXQgYWRkIC1wIiBpcyBhIHNob3J0LWhhbmQgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIHNlbGVjdGl2ZSBwYXRjaAorICAgc3ViY29tbWFuZCBpbiB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZCBsb29wIGFuZCB0byBleGl0IHdoZW4gZG9uZS4KKworICogImdpdCBhZGQgLWkiIFVJIGhhcyBiZWVuIGNvbG9yaXplZC4gIFRoZSBpbnRlcmFjdGl2ZSBwcm9tcHQKKyAgIGFuZCBtZW51IGNhbiBiZSBjb2xvcmVkIGJ5IHNldHRpbmcgY29sb3IuaW50ZXJhY3RpdmUKKyAgIGNvbmZpZ3VyYXRpb24uICBUaGUgZGlmZiBvdXRwdXQgKGluY2x1ZGluZyB0aGUgaHVuayBwaWNrZXIpCisgICBhcmUgY29sb3JlZCB3aXRoIGNvbG9yLmRpZmYgY29uZmlndXJhdGlvbi4KKworICogImdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSIgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBzaW5nbGUtcGFyZW50CisgICBjb21taXQgdGhhdCByZWNvcmRzIHRoZSBzYW1lIHRyZWUgYXMgaXRzIHBhcmVudCwgb3ZlcnJpZGluZyB0aGUgdXN1YWwKKyAgIHNhZmV0eSB2YWx2ZS4KKworICogImdpdCBjb21taXQgLS1hbWVuZCIgY2FuIGFtZW5kIGEgbWVyZ2UgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIHRyZWUKKyAgIGZyb20gaXRzIGZpcnN0IHBhcmVudC4KKworICogImdpdCBjb21taXQiIHVzZWQgdG8gdW5jb25kaXRpb25hbGx5IHN0cmlwIGNvbW1lbnQgbGluZXMgdGhhdAorICAgYmVnYW4gd2l0aCAnIycgYW5kIHJlbW92ZWQgZXhjZXNzIGJsYW5rIGxpbmVzLiAgVGhpcyBiZWhhdmlvciBoYXMKKyAgIGJlZW4gbWFkZSBjb25maWd1cmFibGUuCisKKyAqICJnaXQgY29tbWl0IiBoYXMgYmVlbiByZXdyaXR0ZW4gaW4gQy4KKworICogImdpdCBzdGFzaCByYW5kb20tdGV4dCIgZG9lcyBub3QgY3JlYXRlIGEgbmV3IHN0YXNoIGFueW1vcmUuICBJdCB3YXMKKyAgIGEgVUkgbWlzdGFrZS4gIFVzZSAiZ2l0IHN0YXNoIHNhdmUgcmFuZG9tLXRleHQiLCBvciAiZ2l0IHN0YXNoIgorICAgKHdpdGhvdXQgZXh0cmEgYXJncykgZm9yIHRoYXQuCisKKyAqICJnaXQgc3Rhc2ggY2xlYXIgZXh0cmEtdGV4dCIgZG9lcyBub3QgY2xlYXIgdGhlIHdob2xlIHN0YXNoCisgICBhbnltb3JlLiAgSXQgaXMgdGVtcHRpbmcgdG8gZXhwZWN0ICJnaXQgc3Rhc2ggY2xlYXIgc3Rhc2hAezJ9IgorICAgdG8gZHJvcCBvbmx5IGEgc2luZ2xlIG5hbWVkIHN0YXNoIGVudHJ5LCBhbmQgaXQgaXMgcnVkZSB0bworICAgZGlzY2FyZCBldmVyeXRoaW5nIHdoZW4gdGhhdCBpcyBhc2tlZCAoYnV0IG5vdCBwcm92aWRlZCkuCisKKyAqICJnaXQgcHJ1bmUgLS1leHBpcmUgPHRpbWU+IiBjYW4gZXhlbXB0IHlvdW5nIGxvb3NlIG9iamVjdHMgZnJvbQorICAgZ2V0dGluZyBwcnVuZWQuCisKKyAqICJnaXQgYnJhbmNoIC0tY29udGFpbnMgPGNvbW1pdD4iIGNhbiBsaXN0IGJyYW5jaGVzIHRoYXQgYXJlCisgICBkZXNjZW5kYW50cyBvZiBhIGdpdmVuIGNvbW1pdC4KKworICogImdpdCBsb2ciIGxlYXJuZWQgLS1lYXJseS1vdXRwdXQgb3B0aW9uIHRvIGhlbHAgaW50ZXJhY3RpdmUgR1VJCisgICBpbXBsZW1lbnRhdGlvbnMuCisKKyAqICJnaXQgYmlzZWN0IiBsZWFybmVkICJza2lwIiBhY3Rpb24gdG8gbWFyayB1bnRlc3RhYmxlIGNvbW1pdHMuCisKKyAqICJnaXQgYmlzZWN0IHZpc3VhbGl6ZSIgbGVhcm5lZCBhIHNob3J0ZXIgc3lub255bSAiZ2l0IGJpc2VjdCB2aWV3Ii4KKworICogImdpdCBiaXNlY3QgdmlzdWFsaXplIiBydW5zICJnaXQgbG9nIiBpbiBhIG5vbi13aW5kb3dlZAorICAgZW52aXJvbm1lbnRzLiAgSXQgYWxzbyBjYW4gYmUgdG9sZCB3aGF0IGNvbW1hbmQgdG8gcnVuIChlLmcuICJnaXQKKyAgIGJpc2VjdCB2aXN1YWxpemUgdGlnIikuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkICJmb3JtYXQubnVtYmVyZWQiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyAgIHRvIGF1dG9tYXRpY2FsbHkgdHVybiAtLW51bWJlcmVkIG9wdGlvbiBvbiB3aGVuIG1vcmUgdGhhbiBvbmUgY29tbWl0cworICAgYXJlIGZvcm1hdHRlZC4KKworICogImdpdCBscy1maWxlcyIgbGVhcm5lZCAiLS1leGNsdWRlLXN0YW5kYXJkIiB0byB1c2UgdGhlIGNhbm5lZCBzZXQgb2YKKyAgIGV4Y2x1ZGUgZmlsZXMuCisKKyAqICJnaXQgdGFnIC1hIC1mIGV4aXN0aW5nIiBiZWdpbnMgdGhlIGVkaXRvciBzZXNzaW9uIHVzaW5nIHRoZSBleGlzdGluZworICAgYW5ub3RhdGlvbiBtZXNzYWdlLgorCisgKiAiZ2l0IHRhZyAtbSBvbmUgLW0gYmFyIiAobXVsdGlwbGUgLW0gb3B0aW9ucykgYmVoYXZlcyBzaW1pbGFybHkgdG8KKyAgICJnaXQgY29tbWl0IjsgdGhlIHBhcmFtZXRlcnMgdG8gLW0gb3B0aW9ucyBhcmUgZm9ybWF0dGVkIGFzIHNlcGFyYXRlCisgICBwYXJhZ3JhcGhzLgorCisgKiBUaGUgZm9ybWF0ICJnaXQgc2hvdyIgb3V0cHV0cyBhbiBhbm5vdGF0ZWQgdGFnIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIGluY2x1ZGUgIlRhZ2dlcjogIiBhbmQgIkRhdGU6ICIgbGluZXMgZnJvbSB0aGUgdGFnIGl0c2VsZi4gIFN0cmljdGx5CisgICBzcGVha2luZyB0aGlzIGlzIGEgYmFja3dhcmQgaW5jb21wYXRpYmxlIGNoYW5nZSwgYnV0IHRoaXMgaXMgYQorICAgcmVhc29uYWJsZSB1c2FiaWxpdHkgZml4IGFuZCBwZW9wbGUncyBzY3JpcHRzIHNob3VsZG4ndCBoYXZlIGJlZW4KKyAgIHJlbHlpbmcgb24gdGhlIGV4YWN0IG91dHB1dCBmcm9tICJnaXQgc2hvdyIgUG9yY2VsYWluIGFueXdheS4KKworICogImdpdCBjdnNpbXBvcnQiIGRpZCBub3Qgbm90aWNlIGVycm9ycyBmcm9tIHVuZGVybHlpbmcgImN2c3BzIgorICAgYW5kIHByb2R1Y2VkIGEgY29ycnVwdCBpbXBvcnQgc2lsZW50bHkuCisKKyAqICJnaXQgY3ZzZXhwb3J0Y29tbWl0IiBsZWFybmVkIC13IG9wdGlvbiB0byBzcGVjaWZ5IGFuZCBzd2l0Y2ggdG8gdGhlCisgICBDVlMgd29ya2luZyBkaXJlY3RvcnkuCisKKyAqICJnaXQgY2hlY2tvdXQiIGZyb20gYSBzdWJkaXJlY3RvcnkgbGVhcm5lZCB0byB1c2UgIi4uL3BhdGgiIHRvIGFsbG93CisgICBjaGVja2luZyBvdXQgYSBwYXRoIG91dHNpZGUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpdGhvdXQgY2QnaW5nIHVwLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBmcm9tIGFuZCB0byBkZXRhY2hlZCBIRUFEIGxlYXZlcyBhIGJpdCBtb3JlCisgICBpbmZvcm1hdGlvbiBpbiB0aGUgcmVmbG9nLgorCisgKiAiZ2l0IHNlbmQtZW1haWwgLS1kcnktcnVuIiBzaG93cyBmdWxsIGhlYWRlcnMgZm9yIGVhc2llciBkaWFnbm9zaXMuCisKKyAqICJnaXQgbWVyZ2Utb3VycyIgaXMgbm93IGJ1aWx0LWluLgorCisgKiAiZ2l0IHN2biIgbGVhcm5lZCAiaW5mbyIgYW5kICJzaG93LWV4dGVybmFscyIgc3ViY29tbWFuZHMuCisKKyAqICJnaXQgc3ZuIiBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSBmYWlsZWQgdG8gcmVhZCBzZXR0aW5ncyBmcm9tIHRoZQorICAgLmdpdC9jb25maWcuCisKKyAqICJnaXQgc3ZuIiBsZWFybmVkIC0tdXNlLWxvZy1hdXRob3Igb3B0aW9uLCB3aGljaCBwaWNrcyB1cCBtb3JlCisgICBkZXNjcmlwdGl2ZSBuYW1lIGZyb20gRnJvbTogYW5kIFNpZ25lZC1vZmYtYnk6IGxpbmVzIGluIHRoZSBjb21taXQKKyAgIG1lc3NhZ2UuCisKKyAqICJnaXQgc3ZuIiB3YXN0ZWQgd2F5IHRvbyBtdWNoIGRpc2sgdG8gcmVjb3JkIHJldmlzaW9uIG1hcHBpbmdzCisgICBiZXR3ZWVuIHN2biBhbmQgZ2l0OyBhIG5ldyByZXByZXNlbnRhdGlvbiB0aGF0IGlzIG11Y2ggbW9yZSBjb21wYWN0CisgICBmb3IgdGhpcyBpbmZvcm1hdGlvbiBoYXMgYmVlbiBpbnRyb2R1Y2VkIHRvIGNvcnJlY3QgdGhpcy4KKworICogImdpdCBzdm4iIGxlZnQgdGVtcG9yYXJ5IGluZGV4IGZpbGVzIGl0IHVzZWQgd2l0aG91dCBjbGVhbmluZyB0aGVtCisgICB1cDsgdGhpcyB3YXMgY29ycmVjdGVkLgorCisgKiAiZ2l0IHN0YXR1cyIgZnJvbSBhIHN1YmRpcmVjdG9yeSBub3cgc2hvd3MgcmVsYXRpdmUgcGF0aHMsIHdoaWNoCisgICBtYWtlcyBjb3B5LWFuZC1wYXN0aW5nIGZvciBnaXQtY2hlY2tvdXQvZ2l0LWFkZC9naXQtcm0gZWFzaWVyLiAgVGhlCisgICB0cmFkaXRpb25hbCBiZWhhdmlvciB0byBzaG93IHRoZSBmdWxsIHBhdGggcmVsYXRpdmUgdG8gdGhlIHRvcCBvZgorICAgdGhlIHdvcmsgdHJlZSBjYW4gYmUgaGFkIGJ5IHNldHRpbmcgc3RhdHVzLnJlbGF0aXZlcGF0aHMKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZmFsc2UuCisKKyAqICJnaXQgYmxhbWUiIGtlcHQgdGV4dCBmb3IgZWFjaCBhbm5vdGF0ZWQgcmV2aXNpb24gaW4gY29yZSBuZWVkbGVzc2x5OworICAgdGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgc2hvcnRsb2ciIGxlYXJuZWQgdG8gZGVmYXVsdCB0byBIRUFEIHdoZW4gdGhlIHN0YW5kYXJkIGlucHV0IGlzCisgICBhIHRlcm1pbmFsIGFuZCB0aGUgdXNlciBkaWQgbm90IGdpdmUgYW55IHJldmlzaW9uIHBhcmFtZXRlci4KKworICogImdpdCBzaG9ydGxvZyIgbGVhcm5lZCAiLWUiIG9wdGlvbiB0byBzaG93IGUtbWFpbCBhZGRyZXNzZXMgYXMgd2VsbCBhcworICAgYXV0aG9ycycgbmFtZXMuCisKKyAqICJnaXQgaGVscCIgbGVhcm5lZCAiLXciIG9wdGlvbiB0byBzaG93IGRvY3VtZW50YXRpb24gaW4gYnJvd3NlcnMuCisKKyAqIEluIGFkZGl0aW9uIHRoZXJlIGFyZSBxdWl0ZSBhIGZldyBpbnRlcm5hbCBjbGVhbi11cHMuIE5vdGFibHk6CisKKyAgIC0gbWFueSBmb3JrL2V4ZWMgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggcnVuLWNvbW1hbmQgQVBJLAorICAgICBicm91Z2h0IGZyb20gdGhlIG1zeXNnaXQgZWZmb3J0LgorCisgICAtIGludHJvZHVjdGlvbiBhbmQgbW9yZSB1c2Ugb2YgdGhlIG9wdGlvbiBwYXJzZXIgQVBJLgorCisgICAtIGVuaGFuY2VtZW50IGFuZCBtb3JlIHVzZSBvZiB0aGUgc3RyYnVmIEFQSS4KKworICogTWFrZWZpbGUgdHdlYWtzIHRvIHN1cHBvcnQgSFAtVVggaXMgaW4uCisKK0ZpeGVzIHNpbmNlIHYxLjUuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNS4zIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4KK3RoaXMgcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworVGhlc2UgZml4ZXMgYXJlIG9ubHkgaW4gdjEuNS40IGFuZCBub3QgYmFja3BvcnRlZCB0byB2MS41LjMgbWFpbnRlbmFuY2UKK3Nlcmllcy4KKworICogVGhlIHdheSAiZ2l0IGRpZmYgLS1jaGVjayIgYmVoYXZlcyBpcyBtdWNoIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkKKyAgICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXdhcm4iIHdvcmtzLgorCisgKiAiZ2l0IHN2biIgdGFsa2luZyB3aXRoIHRoZSBTVk4gb3ZlciBIVFRQIHdpbGwgY29ycmVjdGx5IHF1b3RlIGJyYW5jaAorICAgYW5kIHByb2plY3QgbmFtZXMuCisKKyAqICJnaXQgY29uZmlnIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5IG9uIHBsYXRmb3JtcyB0aGF0IGRlZmluZQorICAgUkVHX05PTUFUQ0ggdG8gYW4gZXZlbiBudW1iZXIuCisKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiBBc2NpaURvYyA4IGhhcyBhIGNoYW5nZSB0byBicmVhayBvdXIKKyAgIGRvY3VtZW50YXRpb247IGEgd29ya2Fyb3VuZCBoYXMgYmVlbiBpbXBsZW1lbnRlZC4KKworICogImdpdCBkaWZmIC0tY29sb3Itd29yZHMiIGNvbG9yZWQgY29udGV4dCBsaW5lcyBpbiBhIHdyb25nIGNvbG9yLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlNDE5NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMS50eHQKQEAgLTAsMCArMSw0NCBAQAorR0lUIHYxLjUuNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgYXJjaGl2ZSAtLXByZWZpeD0kcGF0aC8iIG1pc2hhbmRsZWQgZ2l0YXR0cmlidXRlcy4KKworICogImdpdCBmZXRjaCAtdiIgdGhhdCBmZXRjaGVzIGludG8gRkVUQ0hfSEVBRCBkaWQgbm90IHJlcG9ydCB0aGUgc3VtbWFyeQorICAgdGhlIHNhbWUgd2F5IGFzIGRvbmUgZm9yIHVwZGF0aW5nIHRoZSB0cmFja2luZyByZWZzLgorCisgKiAiZ2l0IHN2biIgbWlzYmVoYXZlZCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgY3VzdG9taXplZCB0aGUgImdpdAorICAgbG9nIiBvdXRwdXQgZm9ybWF0IHVzaW5nIGZvcm1hdC5wcmV0dHkuCisKKyAqICJnaXQgc3VibW9kdWxlIHN0YXR1cyIgbGVha2VkIGFuIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2UuCisKKyAqICJnaXQgbG9nIC0tZGF0ZS1vcmRlciAtLXRvcG8tb3JkZXIiIGRpZCBub3Qgb3ZlcnJpZGUgdGhlIGVhcmxpZXIKKyAgIGRhdGUtb3JkZXIgd2l0aCB0b3BvLW9yZGVyIGFzIGV4cGVjdGVkLgorCisgKiAiZ2l0IGJpc2VjdCBnb29kICR0aGlzIiBkaWQgbm90IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgcmV2aXNpb24KKyAgIGdpdmVuIHByb3Blcmx5LgorCisgKiAidXJsLjx0aGVyZT4uaW5zdGVhZE9mIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNsZWFuIiByYW4gaW5zaWRlIHN1YmRpcmVjdG9yeSBiZWhhdmVkIGFzIGlmIHRoZSBkaXJlY3Rvcnkgd2FzCisgICBleHBsaWNpdGx5IHNwZWNpZmllZCBmb3IgcmVtb3ZhbCBieSB0aGUgZW5kIHVzZXIgZnJvbSB0aGUgdG9wIGxldmVsLgorCisgKiAiZ2l0IGJpc2VjdCIgZnJvbSBhIGRldGFjaGVkIGhlYWQgbGVha2VkIGFuIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2UuCisKKyAqICJnaXQgYmlzZWN0IGdvb2QgJGEgJGIiIHdoZW4gJGEgaXMgT2sgYnV0ICRiIGlzIGJvZ3VzIHNob3VsZCBoYXZlCisgICBhdG9taWNhbGx5IGZhaWxlZCBiZWZvcmUgbWFya2luZyAkYSBhcyBnb29kLgorCisgKiAiZ2l0IGZtdC1tZXJnZS1tc2ciIGRpZCBub3QgY2xlYW4gdXAgbGVhZGluZyBlbXB0eSBsaW5lcyBmcm9tIGNvbW1pdAorICAgbG9nIG1lc3NhZ2VzIGxpa2UgImdpdCBsb2ciIGZhbWlseSBkb2VzLgorCisgKiAiZ2l0IGFtIiByZWNvcmRlZCBhIGNvbW1pdCB3aXRoIGVtcHR5IFN1YmplY3Q6IGxpbmUgd2l0aG91dAorICAgY29tcGxhaW5pbmcuCisKKyAqIHdoZW4gZ2l2ZW4gYSBjb21taXQgbG9nIG1lc3NhZ2Ugd2hvc2UgZmlyc3QgcGFyYWdyYXBoIGNvbnNpc3RzIG9mCisgICBtdWx0aXBsZSBsaW5lcywgImdpdCByZWJhc2UiIHNxdWFzaGVkIGl0IGludG8gYSBzaW5nbGUgbGluZS4KKworICogImdpdCByZW1vdGUgYWRkICRib2d1c19uYW1lICR1cmwiIGRpZCBub3QgY29tcGxhaW4gcHJvcGVybHkuCisKK0Fsc28gY29tZXMgd2l0aCB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MWE3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjIudHh0CkBAIC0wLDAgKzEsMjcgQEAKK0dJVCB2MS41LjUuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjUuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCByZXBhY2sgLW4iIHdhcyBtaXN0YWtlbmx5IG1hZGUgbm8tb3AgZWFybGllci4KKworICogImdpdCBpbWFwLXNlbmQiIHdhbnRlZCB0byBhbHdheXMgaGF2ZSBpbWFwLmhvc3QgZXZlbiB3aGVuIHVzZSBvZgorICAgaW1hcC50dW5uZWwgbWFkZSBpdCB1bm5lY2Vzc2FyeS4KKworICogcmVmbG9nIHN5bnRheCB0aGF0IHVzZXMgdGltZSBlLmcuICJIRUFEQHsxMCBzZWNvbmRzIGFnb306cGF0aCIgZGlkIG5vdAorICAgc3RvcCBwYXJzaW5nIGF0IHRoZSBjbG9zaW5nICJ9Ii4KKworICogImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgXm1hc3Rlcl4yIiBwcmludGVkIHNvbGl0YXJ5ICJeIiwKKyAgIGJ1dCBpdCBzaG91bGQgcHJpbnQgbm90aGluZy4KKworICogImdpdCBjb21taXQiIGRpZCBub3QgZGV0ZWN0IHdoZW4gaXQgZmFpbGVkIHRvIHdyaXRlIHRyZWUgb2JqZWN0cy4KKworICogImdpdCBmZXRjaCIgc29tZXRpbWVzIHRyYW5zZmVycmVkIHRvbyBtYW55IG9iamVjdHMgdW5uZWNlc3NhcmlseS4KKworICogYSBwYXRoIHNwZWNpZmljYXRpb24gImEvYiIgaW4gLmdpdGF0dHJpYnV0ZXMgZmlsZSBzaG91bGQgbm90IG1hdGNoCisgICAic3ViL2EvYiIuCisKKyAqIHZhcmlvdXMgZ2l0d2ViIGZpeGVzLgorCitBbHNvIGNvbWVzIHdpdGggdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjJmOThiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS4zLnR4dApAQCAtMCwwICsxLDEyIEBACitHSVQgdjEuNS41LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS41LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgc2VuZC1lbWFpbCAtLWNvbXBvc2UiIGRpZCBub3Qgbm90aWNlIHRoYXQgbm9uLWFzY2lpIGNvbnRlbnRzCisgICBuZWVkZWQgc29tZSBNSU1FIG1hZ2ljLgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBkaWQgbm90IGV4cG9ydCBvY3RvcHVzIG1lcmdlcyBjb3JyZWN0bHkuCisKK0Fsc28gY29tZXMgd2l0aCB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMDI3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjQudHh0CkBAIC0wLDAgKzEsNyBAQAorR0lUIHYxLjUuNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNS40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IG5hbWUtcmV2IC0tYWxsIiB1c2VkIHRvIHNlZ2ZhdWx0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNS41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBmYTM2MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNS50eHQKQEAgLTAsMCArMSwxMSBAQAorR0lUIHYxLjUuNS41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0kgcGVyc29uYWxseSBkbyBub3QgdGhpbmsgdGhlcmUgaXMgYW55IHJlYXNvbiBhbnlib2R5IHNob3VsZCB3YW50IHRvCitydW4gdjEuNS41Llggc2VyaWVzIHRoZXNlIGRheXMsIGJlY2F1c2UgJ21hc3RlcicgdmVyc2lvbiBpcyBhbHdheXMKK21vcmUgc3RhYmxlIHRoYW4gYW55IHRhZ2dlZCByZWxlYXNlZCB2ZXJzaW9uIG9mIGdpdC4KKworVGhpcyBpcyBwcmltYXJpbHkgdG8gZnV0dXJlcHJvb2YgImdpdC1zaGVsbCIgdG8gYWNjZXB0IHJlcXVlc3RzCit3aXRob3V0IGEgZGFzaCBiZXR3ZWVuICJnaXQiIGFuZCBzdWJjb21tYW5kIG5hbWUgKGUuZy4gImdpdAordXBsb2FkLXBhY2siKSB3aGljaCB0aGUgbmV3ZXIgY2xpZW50IHdpbGwgc3RhcnQgdG8gbWFrZSBzb21ldGltZSBpbgordGhlIGZ1dHVyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZTg1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LjYudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0dJVCB2MS41LjUuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSAxLjUuNS41CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFJlbW92ZWQgc3VwcG9ydCBmb3IgYW4gb2Jzb2xldGUgZ2l0d2ViIHJlcXVlc3QgVVJJLCB3aG9zZQorICAgaW1wbGVtZW50YXRpb24gcmFuICJnaXQgZGlmZiIgUG9yY2VsYWluLCBpbnN0ZWFkIG9mIHVzaW5nIHBsdW1iaW5nLAorICAgd2hpY2ggd291bGQgaGF2ZSBydW4gYW4gZXh0ZXJuYWwgZGlmZiBjb21tYW5kIHNwZWNpZmllZCBpbiB0aGUKKyAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhcyB0aGUgZ2l0d2ViIHVzZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MzIyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS41LnR4dApAQCAtMCwwICsxLDIwNyBAQAorR0lUIHYxLjUuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisgKiBDb21lcyB3aXRoIGdpdC1ndWkgMC4xMC4xCisKKyhwb3J0YWJpbGl0eSkKKworICogV2Ugc2hvdWxkbid0IGFzayBmb3IgQlNEIGdyb3VwIG93bmVyc2hpcCBzZW1hbnRpY3MgYnkgc2V0dGluZyBnK3MgYml0CisgICBvbiBkaXJlY3RvcmllcyBvbiBvbGRlciBCU0Qgc3lzdGVtcyB0aGF0IHJlZnVzZXMgY2htb2QoKSBieSBub24gcm9vdAorICAgdXNlcnMuICBCU0Qgc2VtYW50aWNzIGlzIHRoZSBkZWZhdWx0IHRoZXJlIGFueXdheS4KKworICogQnVuY2ggb2YgcG9ydGFiaWxpdHkgaW1wcm92ZW1lbnQgcGF0Y2hlcyBjb21pbmcgZnJvbSBhbiBlZmZvcnQgdG8gcG9ydAorICAgdG8gU29sYXJpcyBoYXMgYmVlbiBhcHBsaWVkLgorCisocGVyZm9ybWFuY2UpCisKKyAqIE9uIHBsYXRmb3JtcyB3aXRoIHN1Ym9wdGltYWwgcXNvcnQoMykgaW1wbGVtZW50YXRpb24sIHRoZXJlCisgICBpcyBhbiBvcHRpb24gdG8gdXNlIG1vcmUgcmVhc29uYWJsZSBzdWJzdGl0dXRlIHdlIHNoaXAgd2l0aAorICAgb3VyIHNvZnR3YXJlLgorCisgKiBOZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAicGFjay5wYWNrc2l6ZWxpbWl0IiBjYW4gYmUgdXNlZAorICAgaW4gcGxhY2Ugb2YgY29tbWFuZCBsaW5lIG9wdGlvbiAtLW1heC1wYWNrLXNpemUuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgdGhlIG5hdGl2ZSBnaXQgcHJvdG9jb2wgdXNlZCB0byBtYWtlIGEKKyAgIGNvbm5lY3Rpb24gdG8gZmluZCBvdXQgdGhlIHNldCBvZiBjdXJyZW50IHJlbW90ZSByZWZzIGFuZAorICAgYW5vdGhlciB0byBhY3R1YWxseSBkb3dubG9hZCB0aGUgcGFjayBkYXRhLiAgV2Ugbm93IHVzZSBvbmx5CisgICBvbmUgY29ubmVjdGlvbiBmb3IgdGhlc2UgdGFza3MuCisKKyAqICJnaXQgY29tbWl0IiBkb2VzIG5vdCBydW4gbHN0YXQoMikgbW9yZSB0aGFuIG5lY2Vzc2FyeQorICAgYW55bW9yZS4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiBCYXNoIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliKSBhcmUgYXdhcmUgb2YgbW9yZSBjb21tYW5kcyBhbmQKKyAgIG9wdGlvbnMuCisKKyAqIFlvdSBjYW4gYmUgd2FybmVkIHdoZW4gY29yZS5hdXRvY3JsZiBjb252ZXJzaW9uIGlzIGFwcGxpZWQgaW4KKyAgIHN1Y2ggYSB3YXkgdGhhdCByZXN1bHRzIGluIGFuIGlycmV2ZXJzaWJsZSBjb252ZXJzaW9uLgorCisgKiBBIGNhdGNoLWFsbCAiY29sb3IudWkiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8KKyAgIGVuYWJsZSBjb2xvcmluZyBvZiBhbGwgY29sb3ItY2FwYWJsZSBjb21tYW5kcywgaW5zdGVhZCBvZgorICAgaW5kaXZpZHVhbCBvbmVzIHN1Y2ggYXMgImNvbG9yLnN0YXR1cyIgYW5kICJjb2xvci5icmFuY2giLgorCisgKiBUaGUgY29tbWFuZHMgcmVmdXNlZCB0byB0YWtlIGFic29sdXRlIHBhdGhuYW1lcyB3aGVyZSB0aGV5CisgICByZXF1aXJlIHBhdGhuYW1lcyByZWxhdGl2ZSB0byB0aGUgd29yayB0cmVlIG9yIHRoZSBjdXJyZW50CisgICBzdWJkaXJlY3RvcnkuICBUaGV5IG5vdyBjYW4gdGFrZSBhYnNvbHV0ZSBwYXRobmFtZXMgaW4gc3VjaCBhCisgICBjYXNlIGFzIGxvbmcgYXMgdGhlIHBhdGhuYW1lcyBkbyBub3QgcmVmZXIgb3V0c2lkZSBvZiB0aGUKKyAgIHdvcmsgdHJlZS4gIEUuZy4gImdpdCBhZGQgJChwd2QpL2ZvbyIgbm93IHdvcmtzLgorCisgKiBFcnJvciBtZXNzYWdlcyB1c2VkIHRvIGJlIHNlbnQgdG8gc3RkZXJyLCBvbmx5IHRvIGdldCBoaWRkZW4sCisgICB3aGVuICRQQUdFUiB3YXMgaW4gdXNlLiAgVGhleSBub3cgYXJlIHNlbnQgdG8gc3Rkb3V0IGFsb25nCisgICB3aXRoIHRoZSBjb21tYW5kIG91dHB1dCB0byBiZSBzaG93biBpbiB0aGUgJFBBR0VSLgorCisgKiBBIHBhdHRlcm4gImZvby8iIGluIC5naXRpZ25vcmUgZmlsZSBub3cgbWF0Y2hlcyBhIGRpcmVjdG9yeQorICAgImZvbyIuICBQYXR0ZXJuICJmb28iIGFsc28gbWF0Y2hlcyBhcyBiZWZvcmUuCisKKyAqIGJhc2ggY29tcGxldGlvbidzIHByb21wdCBoZWxwZXIgZnVuY3Rpb24gY2FuIHRhbGsgYWJvdXQKKyAgIG9wZXJhdGlvbiBpbi1wcm9ncmVzcyAoZS5nLiBtZXJnZSwgcmViYXNlLCBldGMuKS4KKworICogQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMgInVybC48dXNldGhpcz4uaW5zdGVhZG9mID0gPG90aGVydXJsPiIgY2FuIGJlCisgICB1c2VkIHRvIHRlbGwgImdpdC1mZXRjaCIgYW5kICJnaXQtcHVzaCIgdG8gdXNlIGRpZmZlcmVudCBVUkwgdGhhbiB3aGF0CisgICBpcyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisKKyAqICJnaXQgYWRkIC1pIiBiZWhhdmVzIGJldHRlciBldmVuIGJlZm9yZSB5b3UgbWFrZSBhbiBpbml0aWFsIGNvbW1pdC4KKworICogImdpdCBhbSIgcmVmdXNlZCB0byBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSB3aXRob3V0IGEgZ29vZCByZWFzb24uCisKKyAqIEFmdGVyICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgZml4ZXMgd2hpdGVzcGFjZSBlcnJvcnMgaW4gYSBwYXRjaCwKKyAgIGEgbGluZSBiZWZvcmUgdGhlIGZpeCBjYW4gYXBwZWFyIGFzIGEgY29udGV4dCBvciBwcmVpbWFnZSBsaW5lIGluIGEKKyAgIGxhdGVyIHBhdGNoLCBjYXVzaW5nIHRoZSBwYXRjaCBub3QgdG8gYXBwbHkuICBUaGUgY29tbWFuZCBub3cga25vd3MgdG8KKyAgIHNlZSB0aHJvdWdoIHdoaXRlc3BhY2UgZml4ZXMgZG9uZSB0byBjb250ZXh0IGxpbmVzIHRvIHN1Y2Nlc3NmdWxseQorICAgYXBwbHkgc3VjaCBhIHBhdGNoIHNlcmllcy4KKworICogImdpdCBicmFuY2giIChhbmQgImdpdCBjaGVja291dCAtYiIpIHRvIGJyYW5jaCBmcm9tIGEgbG9jYWwgYnJhbmNoIGNhbgorICAgb3B0aW9uYWxseSBzZXQgImJyYW5jaC48bmFtZT4ubWVyZ2UiIHRvIG1hcmsgdGhlIG5ldyBicmFuY2ggdG8gYnVpbGQgb24KKyAgIHRoZSBvdGhlciBsb2NhbCBicmFuY2gsIHdoZW4gImJyYW5jaC5hdXRvc2V0dXBtZXJnZSIgaXMgc2V0IHRvCisgICAiYWx3YXlzIiwgb3Igd2hlbiBwYXNzaW5nIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9uICItLXRyYWNrIiAodGhpcyBvcHRpb24KKyAgIHdhcyBpZ25vcmVkIHdoZW4gYnJhbmNoaW5nIGZyb20gbG9jYWwgYnJhbmNoZXMpLiAgQnkgZGVmYXVsdCwgdGhpcyBkb2VzCisgICBub3QgaGFwcGVuIHdoZW4gYnJhbmNoaW5nIGZyb20gYSBsb2NhbCBicmFuY2guCisKKyAqICJnaXQgY2hlY2tvdXQiIHRvIHN3aXRjaCB0byBhIGJyYW5jaCB0aGF0IGhhcyAiYnJhbmNoLjxuYW1lPi5tZXJnZSIgc2V0CisgICAoaS5lLiBtYXJrZWQgdG8gYnVpbGQgb24gYW5vdGhlciBicmFuY2gpIHJlcG9ydHMgaG93IG11Y2ggdGhlIGJyYW5jaAorICAgYW5kIHRoZSBvdGhlciBicmFuY2ggZGl2ZXJnZWQuCisKKyAqIFdoZW4gImdpdCBjaGVja291dCIgaGFzIHRvIHVwZGF0ZSBhIGxvdCBvZiBwYXRocywgaXQgdXNlZCB0byBiZSBzaWxlbnQKKyAgIGZvciA0IHNlY29uZHMgYmVmb3JlIGl0IHNob3dlZCBhbnkgcHJvZ3Jlc3MgcmVwb3J0LiAgSXQgaXMgbm93IGEgYml0CisgICBtb3JlIGltcGF0aWVudCBhbmQgc3RhcnRzIHNob3dpbmcgcHJvZ3Jlc3MgcmVwb3J0IGVhcmx5LgorCisgKiAiZ2l0IGNvbW1pdCIgbGVhcm5lZCBhIG5ldyBob29rICJwcmVwYXJlLWNvbW1pdC1tc2ciIHRoYXQgY2FuCisgICBpbnNwZWN0IHdoYXQgaXMgZ29pbmcgdG8gYmUgY29tbWl0dGVkIGFuZCBwcmVwYXJlIHRoZSBjb21taXQKKyAgIGxvZyBtZXNzYWdlIHRlbXBsYXRlIHRvIGJlIGVkaXRlZC4KKworICogImdpdCBjdnNpbXBvcnQiIGNhbiBub3cgdGFrZSBtb3JlIHRoYW4gb25lIC1NIG9wdGlvbnMuCisKKyAqICJnaXQgZGVzY3JpYmUiIGxlYXJuZWQgdG8gbGltaXQgdGhlIHRhZ3MgdG8gYmUgdXNlZCBmb3IKKyAgIG5hbWluZyB3aXRoIC0tbWF0Y2ggb3B0aW9uLgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMiIG5vdyBiYXJmcyB3aGVuIHRoZSBuYW1lZCBjb21taXQKKyAgIGNhbm5vdCBiZSBkZXNjcmliZWQuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1leGFjdC1tYXRjaCIgZGVzY3JpYmVzIG9ubHkgY29tbWl0cyB0aGF0IGFyZSB0YWdnZWQuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1sb25nIiBkZXNjcmliZXMgYSB0YWdnZWQgY29tbWl0IGFzICR0YWctMC0kc2hhMSwKKyAgIGluc3RlYWQgb2YganVzdCBzaG93aW5nIHRoZSBleGFjdCB0YWduYW1lLgorCisgKiAiZ2l0IGRlc2NyaWJlIiB3YXJucyB3aGVuIHVzaW5nIGEgdGFnIHdob3NlIG5hbWUgYW5kIHBhdGggY29udHJhZGljdAorICAgd2l0aCBlYWNoIG90aGVyLgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgIi0tcmVsYXRpdmUiIG9wdGlvbiB0byBsaW1pdCBhbmQgb3V0cHV0IHBhdGhzCisgICByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hlbiB3b3JraW5nIGluIGEgc3ViZGlyZWN0b3J5LgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgIi0tZGlyc3RhdCIgb3B0aW9uIHRvIHNob3cgYmlyZHMtZXllLXN1bW1hcnkgb2YKKyAgIGNoYW5nZXMgbW9yZSBjb25jaXNlbHkgdGhhbiAiLS1kaWZmc3RhdCIuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIC0tY292ZXItbGV0dGVyIG9wdGlvbiB0byBnZW5lcmF0ZSBhIGNvdmVyCisgICBsZXR0ZXIgdGVtcGxhdGUuCisKKyAqICJnaXQgZ2MiIGxlYXJuZWQgLS1xdWlldCBvcHRpb24uCisKKyAqICJnaXQgZ2MiIG5vdyBhdXRvbWF0aWNhbGx5IHBydW5lcyB1bnJlYWNoYWJsZSBvYmplY3RzIHRoYXQgYXJlIHR3bworICAgd2Vla3Mgb2xkIG9yIG9sZGVyLgorCisgKiAiZ2l0IGdjIC0tYXV0byIgY2FuIGJlIGRpc2FibGVkIG1vcmUgZWFzaWx5IGJ5IGp1c3Qgc2V0dGluZyBnYy5hdXRvCisgICB0byB6ZXJvLiAgSXQgYWxzbyB0b2xlcmF0ZXMgbW9yZSBwYWNrZmlsZXMgYnkgZGVmYXVsdC4KKworICogImdpdCBncmVwIiBub3cga25vd3MgIi0tbmFtZS1vbmx5IiBpcyBhIHN5bm9ueW0gZm9yIHRoZSAiLWwiIG9wdGlvbi4KKworICogImdpdCBoZWxwIDxhbGlhcz4iIG5vdyByZXBvcnRzICInZ2l0IDxhbGlhcz4nIGlzIGFsaWFzIHRvIDx3aGF0PiIsCisgICBpbnN0ZWFkIG9mIHNheWluZyAiTm8gbWFudWFsIGVudHJ5IGZvciBnaXQtPGFsaWFzPiIuCisKKyAqICJnaXQgaGVscCIgY2FuIHVzZSBkaWZmZXJlbnQgYmFja2VuZHMgdG8gc2hvdyBtYW51YWwgcGFnZXMgYW5kIHRoaXMgY2FuCisgICBiZSBjb25maWd1cmVkIHVzaW5nICJtYW4udmlld2VyIiBjb25maWd1cmF0aW9uLgorCisgKiAiZ2l0ayIgZG9lcyBub3QgcmVzdG9yZSB3aW5kb3cgcG9zaXRpb24gZnJvbSAkSE9NRS8uZ2l0ayBhbnltb3JlIChpdAorICAgc3RpbGwgcmVzdG9yZXMgdGhlIHNpemUpLgorCisgKiAiZ2l0IGxvZyAtLWdyZXA9PHdoYXQ+IiBsZWFybmVkICItLWZpeGVkLXN0cmluZ3MiIG9wdGlvbiB0byBsb29rIGZvcgorICAgPHdoYXQ+IHdpdGhvdXQgdHJlYXRpbmcgaXQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24uCisKKyAqICJnaXQgZ3VpIiBsZWFybmVkIGFuIGF1dG8tc3BlbGwgY2hlY2tpbmcuCisKKyAqICJnaXQgcHVzaCA8c29tZXdoZXJlPiBIRUFEIiBhbmQgImdpdCBwdXNoIDxzb21ld2hlcmU+ICtIRUFEIiB3b3JrcyBhcworICAgZXhwZWN0ZWQ7IHRoZXkgcHVzaCB0aGUgY3VycmVudCBicmFuY2ggKGFuZCBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaCkuCisgICBJbiBhZGRpdGlvbiwgSEVBRCBjYW4gYmUgd3JpdHRlbiBhcyB0aGUgdmFsdWUgb2YgInJlbW90ZS48dGhlcmU+LnB1c2giCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiBXaGVuIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwYWNrLnRocmVhZHMiIGlzIHNldCB0byAwLCAiZ2l0CisgICByZXBhY2siIGF1dG8gZGV0ZWN0cyB0aGUgbnVtYmVyIG9mIENQVXMgYW5kIHVzZXMgdGhhdCBtYW55IHRocmVhZHMuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCB0byBwcm9tcHQgZm9yIHBhc3N3b3JkcworICAgaW50ZXJhY3RpdmVseS4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkIGFuIGVhc2llciB3YXkgdG8gc3VwcHJlc3MgQ0MKKyAgIHJlY2lwaWVudHMuCisKKyAqICJnaXQgc3Rhc2giIGxlYXJuZWQgInBvcCIgY29tbWFuZCwgdGhhdCBhcHBsaWVzIHRoZSBsYXRlc3Qgc3Rhc2ggYW5kCisgICByZW1vdmVzIGl0IGZyb20gdGhlIHN0YXNoLCBhbmQgImRyb3AiIGNvbW1hbmQgdG8gZGlzY2FyZCB0aGUgbmFtZWQKKyAgIHN0YXNoIGVudHJ5LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCBhIG5ldyBzdWJjb21tYW5kICJzdW1tYXJ5IiB0byBzaG93IHRoZQorICAgc3ltbWV0cmljIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgSEVBRCB2ZXJzaW9uIGFuZCB0aGUgd29yayB0cmVlIHZlcnNpb24KKyAgIG9mIHRoZSBzdWJtb2R1bGUgY29tbWl0cy4KKworICogVmFyaW91cyAiZ2l0IGN2c2ltcG9ydCIsICJnaXQgY3ZzZXhwb3J0Y29tbWl0IiwgImdpdCBjdnNzZXJ2ZXIiLAorICAgImdpdCBzdm4iIGFuZCAiZ2l0IHA0IiBpbXByb3ZlbWVudHMuCisKKyhpbnRlcm5hbCkKKworICogRHVwbGljYXRlZCBjb2RlIGJldHdlZW4gZ2l0LWhlbHAgYW5kIGdpdC1pbnN0YXdlYiB0aGF0CisgICBsYXVuY2hlcyB1c2VyJ3MgcHJlZmVycmVkIGJyb3dzZXIgaGFzIGJlZW4gcmVmYWN0b3JlZC4KKworICogSXQgaXMgbm93IGVhc2llciB0byB3cml0ZSB0ZXN0IHNjcmlwdHMgdGhhdCByZWNvcmRzIGtub3duCisgICBicmVha2FnZXMuCisKKyAqICJnaXQgY2hlY2tvdXQiIGlzIHJld3JpdHRlbiBpbiBDLgorCisgKiAiZ2l0IHJlbW90ZSIgaXMgcmV3cml0dGVuIGluIEMuCisKKyAqIFR3byBjb25mbGljdCBodW5rcyB0aGF0IGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ5IHNob3J0IHNwYW4gb2YgY29tbW9uCisgICBsaW5lcyBhcmUgbm93IGNvYWxlc2NlZCBpbnRvIG9uZSBsYXJnZXIgaHVuaywgdG8gbWFrZSB0aGUgcmVzdWx0IGVhc2llcgorICAgdG8gcmVhZC4KKworICogUnVuLWNvbW1hbmQgQVBJJ3MgdXNlIG9mIGZpbGUgZGVzY3JpcHRvcnMgaXMgZG9jdW1lbnRlZCBjbGVhcmVyIGFuZAorICAgaXMgbW9yZSBjb25zaXN0ZW50IG5vdy4KKworICogZGlmZiBvdXRwdXQgY2FuIGJlIHNlbnQgdG8gRklMRSAqIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gc3Rkb3V0LiAgVGhpcworICAgd2lsbCBoZWxwIHJlaW1wbGVtZW50aW5nIG1vcmUgdGhpbmdzIGluIEMuCisKK0ZpeGVzIHNpbmNlIHYxLjUuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNS40IG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4KK3RoaXMgcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogImdpdC1odHRwLXB1c2giIGRpZCBub3QgYWxsb3cgZGVsZXRpb24gb2YgcmVtb3RlIHJlZiB3aXRoIHRoZSB1c3VhbAorICAgInB1c2ggPHJlbW90ZT4gOjxicmFuY2g+IiBzeW50YXguCisKKyAqICJnaXQtcmViYXNlIC0tYWJvcnQiIGRpZCBub3QgZ28gYmFjayB0byB0aGUgcmlnaHQgbG9jYXRpb24gaWYKKyAgICJnaXQtcmVzZXQiIHdhcyBydW4gZHVyaW5nIHRoZSAiZ2l0LXJlYmFzZSIgc2Vzc2lvbi4KKworICogImdpdCBpbWFwLXNlbmQiIHdpdGhvdXQgc2V0dGluZyBpbWFwLmhvc3QgZGlkIG5vdCBlcnJvciBvdXQgYnV0CisgICBzZWdmYXVsdGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2NGIxNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuMS50eHQKQEAgLTAsMCArMSwyOCBAQAorR0lUIHYxLjUuNi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjUuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogTGFzdCBtaW51dGUgY2hhbmdlIGJyb2tlIGxvb3NlIG9iamVjdCBjcmVhdGlvbiBvbiBBSVguCisKKyogKHBlcmZvcm1hbmNlIGZpeCkgV2UgdXNlZCB0byBtYWtlICRHSVRfRElSIGFic29sdXRlIHBhdGggZWFybHkgaW4gdGhlCisgIHByb2dyYW1zIGJ1dCBrZWVwaW5nIGl0IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpbnRlcm5hbGx5CisgIGdpdmVzIDEtMyBwZXItY2VudCBwZXJmb3JtYW5jZSBib29zdC4KKworKiBiYXNoIGNvbXBsZXRpb24ga25vd3MgdGhlIG5ldyAtLWdyYXBoIG9wdGlvbiB0byBnaXQtbG9nIGZhbWlseS4KKworCisqIGdpdC1kaWZmIC1jLy0tY2Mgc2hvd2VkIHVubmVjZXNzYXJ5ICJkZWxldGlvbiIgbGluZXMgYXQgdGhlIGNvbnRleHQKKyAgYm91bmRhcnkuCisKKyogZ2l0LWZvci1lYWNoLXJlZiBpZ25vcmVkICUob2JqZWN0KSBhbmQgJSh0eXBlKSByZXF1ZXN0cyBmb3IgdGFnCisgIG9iamVjdHMuCisKKyogZ2l0LW1lcmdlIHVzYWdlIGhhZCBhIHR5cG8uCisKKyogUmVidWlsZGluZyBvZiBnaXQtc3ZuIG1ldGFpbmZvIGRhdGFiYXNlIGRpZCBub3QgdGFrZSByZXdyaXRlUm9vdAorICBvcHRpb24gaW50byBhY2NvdW50LgorCisqIFJ1bm5pbmcgImdpdC1yZWJhc2UgLS1jb250aW51ZS8tLXNraXAvLS1hYm9ydCIgYmVmb3JlIHN0YXJ0aW5nIGEKKyAgcmViYXNlIGdhdmUgbm9uc2Vuc2UgZXJyb3IgbWVzc2FnZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTAyYTg1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4yLnR4dApAQCAtMCwwICsxLDQwIEBACitHSVQgdjEuNS42LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRnV0dXJlcHJvb2YKKy0tLS0tLS0tLS0tCisKKyAqICJnaXQtc2hlbGwiIGFjY2VwdHMgcmVxdWVzdHMgd2l0aG91dCBhIGRhc2ggYmV0d2VlbiAiZ2l0IiBhbmQKKyAgIHN1YmNvbW1hbmQgbmFtZSAoZS5nLiAiZ2l0IHVwbG9hZC1wYWNrIikgd2hpY2ggdGhlIG5ld2VyIGNsaWVudCB3aWxsCisgICBzdGFydCB0byBtYWtlIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUuCisKK0ZpeGVzIHNpbmNlIHYxLjUuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgY2xvbmUiIGZyb20gYSByZW1vdGUgdGhhdCBpcyBuYW1lZCB3aXRoIHVybC5pbnN0ZWFkT2Ygc2V0dGluZyBpbgorICAkSE9NRS8uZ2l0Y29uZmlnIGRpZCBub3Qgd29yayB3ZWxsLgorCisqICJnaXQgZGVzY3JpYmUgLS1sb25nIC0tdGFncyIgc2VnZmF1bHRlZCB3aGVuIHRoZSBkZXNjcmliZWQgcmV2aXNpb24gd2FzCisgIHRhZ2dlZCB3aXRoIGEgbGlnaHR3ZWlnaHQgdGFnLgorCisqICJnaXQgZGlmZiAtLWNoZWNrIiBkaWQgbm90IHJlcG9ydCB0aGUgcmVzdWx0IHZpYSBpdHMgZXhpdCBzdGF0dXMKKyAgcmVsaWFibHkuCisKKyogV2hlbiByZW1vdGUgc2lkZSB1c2VkIHRvIGhhdmUgYnJhbmNoICdmb28nIGFuZCBnaXQtZmV0Y2ggZmluZHMgdGhhdCBub3cKKyAgaXQgaGFzIGJyYW5jaCAnZm9vL2JhcicsIGl0IHJlZnVzZXMgdG8gbG9zZSB0aGUgZXhpc3RpbmcgcmVtb3RlIHRyYWNraW5nCisgIGJyYW5jaCBhbmQgaXRzIHJlZmxvZy4gIFRoZSBlcnJvciBtZXNzYWdlIGhhcyBiZWVuIGltcHJvdmVkIHRvIHN1Z2dlc3QKKyAgcHJ1bmluZyB0aGUgcmVtb3RlIGlmIHRoZSB1c2VyIHdhbnRzIHRvIHByb2NlZWQgYW5kIGdldCB0aGUgbGF0ZXN0IHNldAorICBvZiBicmFuY2hlcyBmcm9tIHRoZSByZW1vdGUsIGluY2x1ZGluZyBzdWNoICdmb28vYmFyJy4KKworKiAiZ2l0IHJlc2V0IGZpbGUiIHNob3VsZCBtZWFuIHRoZSBzYW1lIHRoaW5nIGFzICJnaXQgcmVzZXQgSEVBRCBmaWxlIiwKKyAgYnV0IHdlIHJlcXVpcmVkIGRpc2FtYmlndWF0aW5nIC0tIGV2ZW4gd2hlbiAiZmlsZSIgaXMgbm90IGFtYmlndW91cy4KKworKiAiZ2l0IHNob3ciIHNlZ2ZhdWx0ZWQgd2hlbiBhbiBhbm5vdGF0ZWQgdGFnIHRoYXQgcG9pbnRzIGF0IGFub3RoZXIKKyAgYW5ub3RhdGVkIHRhZyB3YXMgZ2l2ZW4gdG8gaXQuCisKKyogT3B0aW1pemF0aW9uIGZvciBhIGxhcmdlIGltcG9ydCB2aWEgImdpdC1zdm4iIGludHJvZHVjZWQgaW4gdjEuNS42IGhhZCBhCisgIHNlcmlvdXMgbWVtb3J5IGFuZCB0ZW1wb3JhcnkgZmlsZSBsZWFrLCB3aGljaCBtYWRlIGl0IHVudXNhYmxlIGZvcgorICBtb2RlcmF0ZWx5IGxhcmdlIGltcG9ydC4KKworKiAiZ2l0LXN2biIgbWFuZ2xlZCByZW1vdGUgbmlja25hbWUgdXNlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlCisgIHVubmVjZXNzYXJpbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjFkZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi4zLnR4dApAQCAtMCwwICsxLDUyIEBACitHSVQgdjEuNS42LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNS42LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogU2V0dGluZyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkgdG8gdHJhZGl0aW9uYWwgInRydWUiIHZhbHVlIHdhcyBzdXBwb3NlZCB0byBtYWtlCisgIHRoZSByZXBvc2l0b3J5IGdyb3VwIHdyaXRhYmxlIGJ1dCBzaG91bGQgbm90IGFmZmVjdCBwZXJtaXNzaW9uIGZvciBvdGhlcnMuCisgIEhvd2V2ZXIsIHNpbmNlIDEuNS42LCBpdCB3YXMgYnJva2VuIHRvIGRyb3AgcGVybWlzc2lvbiBmb3Igb3RoZXJzIHdoZW4gdW1hc2sgaXMKKyAgMDIyLCBtYWtpbmcgdGhlIHJlcG9zaXRvcnkgdW5yZWFkYWJsZSBieSBvdGhlcnMuCisKKyogU2V0dGluZyBHSVRfVFJBQ0Ugd2lsbCByZXBvcnQgc3Bhd25pbmcgb2YgZXh0ZXJuYWwgcHJvY2VzcyB2aWEgcnVuX2NvbW1hbmQoKS4KKworKiBVc2luZyBhbiBvYmplY3Qgd2l0aCB2ZXJ5IGRlZXAgZGVsdGEgY2hhaW4gcGlubmVkIG1lbW9yeSBuZWVkZWQgZm9yIGV4dHJhY3RpbmcKKyAgaW50ZXJtZWRpYXRlIGJhc2Ugb2JqZWN0cyB1bm5lY2Vzc2FyaWx5IGxvbmcsIGxlYWRpbmcgdG8gZXhjZXNzIG1lbW9yeSB1c2FnZS4KKworKiBCYXNoIGNvbXBsZXRpb24gc2NyaXB0IGRpZCBub3Qgbm90aWNlICctLScgbWFya2VyIG9uIHRoZSBjb21tYW5kCisgIGxpbmUgYW5kIHRyaWVkIHRoZSByZWxhdGl2ZWx5IHNsb3cgInJlZiBjb21wbGV0aW9uIiBldmVuIHdoZW4KKyAgY29tcGxldGluZyBhcmd1bWVudHMgYWZ0ZXIgb25lLgorCisqIFJlZ2lzdGVyaW5nIGEgbm9uLWVtcHR5IGJsb2IgcmFjaWx5IGFuZCB0aGVuIHRydW5jYXRpbmcgdGhlIHdvcmtpbmcKKyAgdHJlZSBmaWxlIGZvciBpdCBjb25mdXNlZCAicmFjeS1naXQgYXZvaWRhbmNlIiBsb2dpYyBpbnRvIHRoaW5raW5nCisgIHRoYXQgdGhlIHBhdGggaXMgbm93IHVuY2hhbmdlZC4KKworKiBUaGUgc2VjdGlvbiB0aGF0IGRlc2NyaWJlcyBhdHRyaWJ1dGVzIHJlbGF0ZWQgdG8gZ2l0LWFyY2hpdmUgd2VyZSBwbGFjZWQKKyAgaW4gYSB3cm9uZyBwbGFjZSBpbiB0aGUgZ2l0YXR0cmlidXRlcyg1KSBtYW51YWwgcGFnZS4KKworKiAiZ2l0IGFtIiB3YXMgbm90IGhlbHBmdWwgdG8gdGhlIHVzZXJzIHdoZW4gaXQgZGV0ZWN0ZWQgdGhhdCB0aGUgY29tbWl0dGVyCisgIGluZm9ybWF0aW9uIGlzIG5vdCBzZXQgdXAgcHJvcGVybHkgeWV0LgorCisqICJnaXQgY2xvbmUiIGhhZCBhIGxlZnRvdmVyIGRlYnVnZ2luZyBmcHJpbnRmKCkuCisKKyogImdpdCBjbG9uZSAtcSIgd2FzIG5vdCBxdWlldCBlbm91Z2ggYXMgaXQgdXNlZCB0byBhbmQgZ2F2ZSBvYmplY3QgY291bnQKKyAgYW5kIHByb2dyZXNzIHJlcG9ydHMuCisKKyogImdpdCBjbG9uZSIgbWFya2VkIGRvd25sb2FkZWQgcGFja2ZpbGUgd2l0aCAua2VlcDsgdGhpcyBjb3VsZCBiZSBhCisgIGdvb2QgdGhpbmcgaWYgdGhlIHJlbW90ZSBzaWRlIGlzIHdlbGwgcGFja2VkIGJ1dCBvdGhlcndpc2Ugbm90LAorICBlc3BlY2lhbGx5IGZvciBhIHByb2plY3QgdGhhdCBpcyBub3QgcmVhbGx5IGJpZy4KKworKiAiZ2l0IGRhZW1vbiIgdXNlZCB0byBjYWxsIHN5c2xvZygpIGZyb20gYSBzaWduYWwgaGFuZGxlciwgd2hpY2gKKyAgY291bGQgcmFpc2Ugc2lnbmFscyBvZiBpdHMgb3duIGJ1dCBnZW5lcmFsbHkgaXMgbm90IHJlZW50cmFudC4gIFRoaXMKKyAgd2FzIGZpeGVkIGJ5IHJlc3RydWN0dXJpbmcgdGhlIGNvZGUgdG8gcmVwb3J0IHN5c2xvZygpIGFmdGVyIHRoZSBoYW5kbGVyCisgIHJldHVybnMuCisKKyogV2hlbiAiZ2l0IHB1c2giIHRyaWVzIHRvIHJlbW92ZSBhIHJlbW90ZSByZWYsIGFuZCBjb3JyZXNwb25kaW5nCisgIHRyYWNraW5nIHJlZiBpcyBtaXNzaW5nLCB3ZSB1c2VkIHRvIHJlcG9ydCBlcnJvciAoaS5lLiBmYWlsdXJlIHRvCisgIHJlbW92ZSBzb21ldGhpbmcgdGhhdCBkb2VzIG5vdCBleGlzdCkuCisKKyogImdpdCBtYWlsaW5mbyIgKGhlbmNlICJnaXQgYW0iKSBkaWQgbm90IGhhbmRsZSBjb21taXQgbG9nIG1lc3NhZ2VzIGluIGEKKyAgTUlNRSBtdWx0aXBhcnQgbWFpbCBjb3JyZWN0bHkuCisKK0NvbnRhaW5zIG90aGVyIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4OTY4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjQudHh0CkBAIC0wLDAgKzEsNDcgQEAKK0dJVCB2MS41LjYuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjYuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBWYXJpb3VzIGNvbW1hbmRzIGNvdWxkIG92ZXJmbG93IGl0cyBpbnRlcm5hbCBidWZmZXIgb24gYSBwbGF0Zm9ybQorICB3aXRoIHNtYWxsIFBBVEhfTUFYIHZhbHVlIGluIGEgcmVwb3NpdG9yeSB0aGF0IGhhcyBjb250ZW50cyB3aXRoCisgIGxvbmcgcGF0aG5hbWVzLgorCisqIFRoZXJlIHdhc24ndCBhIHdheSB0byBtYWtlIC0tcHJldHR5PWZvcm1hdDolPD4gc3BlY2lmaWVycyB0byBob25vcgorICAubWFpbG1hcCBuYW1lIHJld3JpdGluZyBmb3IgYXV0aG9ycyBhbmQgY29tbWl0dGVycy4gIE5vdyB5b3UgY2FuIHdpdGgKKyAgJWFOIGFuZCAlY04uCisKKyogQmFzaCBjb21wbGV0aW9uIHdhc3RlZCB0b28gbWFueSBjeWNsZXM7IHRoaXMgaGFzIGJlZW4gb3B0aW1pemVkIHRvIGJlCisgIHVzYWJsZSBhZ2Fpbi4KKworKiBCYXNoIGNvbXBsZXRpb24gbG9zdCByZWYgcGFydCB3aGVuIGNvbXBsZXRpbmcgc29tZXRoaW5nIGxpa2UgImdpdCBzaG93CisgIHB1Ok1ha2VmaWxlIi4KKworKiAiZ2l0LWN2c3NlcnZlciIgZGlkIG5vdCBjbGVhbiB1cCBpdHMgdGVtcG9yYXJ5IHdvcmtpbmcgYXJlYSBhZnRlciBhbm5vdGF0ZQorICByZXF1ZXN0LgorCisqICJnaXQtZGFlbW9uIiBjYWxsZWQgc3lzbG9nKCkgZnJvbSBpdHMgc2lnbmFsIGhhbmRsZXIsIHdoaWNoIHdhcyBhCisgIG5vLW5vLgorCisqICJnaXQtZmV0Y2giIGludG8gYW4gZW1wdHkgcmVwb3NpdG9yeSB1c2VkIHRvIHJlbWluZCB0aGF0IHRoZSBmZXRjaCB3aWxsCisgICBiZSBodWdlIGJ5IHNheWluZyAibm8gY29tbW9uIGNvbW1pdHMiLCBidXQgdGhpcyB3YXMgYW4gdW5uZWNlc3NhcnkKKyAgIG5vaXNlOyBpdCBpcyBhbHJlYWR5IGtub3duIGJ5IHRoZSB1c2VyIGFueXdheS4KKworKiAiZ2l0LWh0dHAtZmV0Y2giIHdvdWxkIGhhdmUgc2VnZmF1bHRlZCB3aGVuIHBhY2sgaWR4IGZpbGUgcmV0cmlldmVkCisgIGZyb20gdGhlIG90aGVyIHNpZGUgd2FzIGNvcnJ1cHQuCisKKyogImdpdC1pbmRleC1wYWNrIiB1c2VkIHRvbyBtdWNoIG1lbW9yeSB3aGVuIGRlYWxpbmcgd2l0aCBhIGRlZXAgZGVsdGEgY2hhaW4uCisKKyogImdpdC1tYWlsaW5mbyIgKGhlbmNlICJnaXQtYW0iKSBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgaW4tYm9keSBbUEFUQ0hdCisgIGxpbmUgdG8gb3ZlcnJpZGUgdGhlIGNvbW1pdCB0aXRsZSB0YWtlbiBmcm9tIHRoZSBtYWlsIFN1YmplY3QgaGVhZGVyLgorCisqICJnaXQtcmViYXNlIC1pIC1wIiBsb3N0IHBhcmVudHMgdGhhdCBhcmUgbm90IGludm9sdmVkIGluIHRoZSBoaXN0b3J5CisgIGJlaW5nIHJld3JpdHRlbi4KKworKiAiZ2l0LXJtIiBsb3N0IHRyYWNrIG9mIHdoZXJlIHRoZSBpbmRleCBmaWxlIHdhcyB3aGVuIEdJVF9ESVIgd2FzCisgIHNwZWNpZmllZCBhcyBhIHJlbGF0aXZlIHBhdGguCisKKyogImdpdC1yZXYtbGlzdCAtLXF1aWV0IiB3YXMgbm90IHF1aWV0IGFzIGFkdmVydGlzZWQuCisKK0NvbnRhaW5zIG90aGVyIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3Y2ExNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNS42LjUudHh0CkBAIC0wLDAgKzEsMjkgQEAKK0dJVCB2MS41LjYuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS41LjYuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGN2c2ltcG9ydCIgdXNlZCB0byBzcGl0IG91dCAiVU5LTk9XTiBMSU5FLi4uIiBkaWFnbm9zdGljcyB0byBzdGRvdXQuCisKKyogImdpdCBjb21taXQgLUYgZmlsZW5hbWUiIGFuZCAiZ2l0IHRhZyAtRiBmaWxlbmFtZSIgcnVuIGZyb20gc3ViZGlyZWN0b3JpZXMKKyAgZGlkIG5vdCByZWFkIHRoZSByaWdodCBmaWxlLgorCisqICJnaXQgaW5pdCAtLXRlbXBsYXRlPSIgd2l0aCBibGFuayAidGVtcGxhdGUiIHBhcmFtZXRlciBsaW5rZWQgZmlsZXMKKyAgdW5kZXIgcm9vdCBkaXJlY3RvcmllcyB0byAuZ2l0LCB3aGljaCB3YXMgYSB0b3RhbCBub25zZW5zZS4gIEluc3RlYWQsIGl0CisgIG1lYW5zICJJIGRvIG5vdCB3YW50IHRvIHVzZSBhbnl0aGluZyBmcm9tIHRoZSB0ZW1wbGF0ZSBkaXJlY3RvcnkiLgorCisqICJnaXQgZGlmZi10cmVlIiBhbmQgb3RoZXIgZGlmZiBwbHVtYmluZyBpZ25vcmVkIGRpZmYucmVuYW1lbGltaXQgY29uZmlndXJhdGlvbgorICB2YXJpYWJsZSB3aGVuIHRoZSB1c2VyIGV4cGxpY2l0bHkgYXNrZWQgZm9yIHJlbmFtZSBkZXRlY3Rpb24uCisKKyogImdpdCBuYW1lLXJldiAtLW5hbWUtb25seSIgZGlkIG5vdCB3b3JrIHdoZW4gIi0tc3RkaW4iIG9wdGlvbiB3YXMgaW4gZWZmZWN0LgorCisqICJnaXQgc2hvdy1icmFuY2giIG1pc2hhbmRsZWQgaXRzIDh0aCBicmFuY2guCisKKyogQWRkaXRpb24gb2YgImdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtc3VibW9kdWxlcyIgdGhhdCBoYXBwZW5lZCBkdXJpbmcKKyAgMS41LjYgY3ljbGUgYnJva2UgImdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyIuCisKKyogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IHBhcnNlIGNoYXJzZXQgZnJvbSBhbiBleGlzdGluZyBDb250ZW50LXR5cGU6CisgIGhlYWRlciBwcm9wZXJseS4KKworQ29udGFpbnMgb3RoZXIgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlkYTIzZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYuNi50eHQKQEAgLTAsMCArMSwxMCBAQAorR0lUIHYxLjUuNi42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIDEuNS42LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogUmVtb3ZlZCBzdXBwb3J0IGZvciBhbiBvYnNvbGV0ZSBnaXR3ZWIgcmVxdWVzdCBVUkksIHdob3NlCisgICBpbXBsZW1lbnRhdGlvbiByYW4gImdpdCBkaWZmIiBQb3JjZWxhaW4sIGluc3RlYWQgb2YgdXNpbmcgcGx1bWJpbmcsCisgICB3aGljaCB3b3VsZCBoYXZlIHJ1biBhbiBleHRlcm5hbCBkaWZmIGNvbW1hbmQgc3BlY2lmaWVkIGluIHRoZQorICAgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGFzIHRoZSBnaXR3ZWIgdXNlci4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjUuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0M2Q4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS41LjYudHh0CkBAIC0wLDAgKzEsMTE1IEBACitHSVQgdjEuNS42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyogQ29tZXMgd2l0aCB1cGRhdGVkIGdpdGsgYW5kIGdpdC1ndWkuCisKKyhwb3J0YWJpbGl0eSkKKworKiBnaXQgd2lsbCBidWlsZCBvbiBBSVggYmV0dGVyIHRoYW4gYmVmb3JlIG5vdy4KKworKiBjb3JlLmlnbm9yZWNhc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byB3b3JrIGJldHRlciBvbgorICBmaWxlc3lzdGVtcyB0aGF0IGFyZSBub3QgY2FzZSBzZW5zaXRpdmUuCisKKyogImdpdCBpbml0IiBub3cgYXV0b2RldGVjdHMgdGhlIGNhc2Ugc2Vuc2l0aXZpdHkgb2YgdGhlIGZpbGVzeXN0ZW0gYW5kCisgIHNldHMgY29yZS5pZ25vcmVjYXNlIGFjY29yZGluZ2x5LgorCisqIGNwaW8gaXMgbm8gbG9uZ2VyIHVzZWQ7IG5laXRoZXIgImN1cmwiIGJpbmFyeSAobGliY3VybCBpcyBzdGlsbCB1c2VkKS4KKworKGRvY3VtZW50YXRpb24pCisKKyogTWFueSBmcmVlc3RhbmRpbmcgZG9jdW1lbnRhdGlvbiBwYWdlcyBoYXZlIGJlZW4gY29udmVydGVkIGFuZCBtYWRlCisgIGF2YWlsYWJsZSB0byAiZ2l0IGhlbHAiIChha2EgIm1hbiBnaXQ8c29tZXRoaW5nPiIpIGFzIHNlY3Rpb24gNyBvZgorICB0aGUgbWFudWFsIHBhZ2VzLiBUaGlzIG1lYW5zIGJvb2ttYXJrcyB0byBzb21lIEhUTUwgZG9jdW1lbnRhdGlvbgorICBmaWxlcyBtYXkgbmVlZCB0byBiZSB1cGRhdGVkIChlZyAidHV0b3JpYWwuaHRtbCIgYmVjYW1lCisgICJnaXR0dXRvcmlhbC5odG1sIikuCisKKyhwZXJmb3JtYW5jZSkKKworKiAiZ2l0IGNsb25lIiB3YXMgcmV3cml0dGVuIGluIEMuICBUaGlzIHdpbGwgaG9wZWZ1bGx5IGhlbHAgY2xvbmluZyBhCisgIHJlcG9zaXRvcnkgd2l0aCBpbnNhbmUgbnVtYmVyIG9mIHJlZnMuCisKKyogImdpdCByZWJhc2UgLS1vbnRvICR0aGVyZSAkZnJvbSAkYnJhbmNoIiB1c2VkIHRvIHN3aXRjaCB0byB0aGUgdGlwIG9mCisgICRicmFuY2ggb25seSB0byBpbW1lZGlhdGVseSByZXNldCBiYWNrIHRvICRmcm9tLCBzbXVkZ2luZyB3b3JrIHRyZWUKKyAgZmlsZXMgdW5uZWNlc3NhcmlseS4gIFRoaXMgaGFzIGJlZW4gb3B0aW1pemVkLgorCisqIE9iamVjdCBjcmVhdGlvbiBjb2RlcGF0aCBpbiAiZ2l0LXN2biIgaGFzIGJlZW4gb3B0aW1pemVkIGJ5IGVuaGFuY2luZworICBwbHVtYmluZyBjb21tYW5kcyBnaXQtY2F0LWZpbGUgYW5kIGdpdC1oYXNoLW9iamVjdC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisqICJnaXQgYWRkIC1wIiAoYW5kIHRoZSAicGF0Y2giIHN1YmNvbW1hbmQgb2YgImdpdCBhZGQgLWkiKSBjYW4gY2hvb3NlIHRvCisgIGFwcGx5IChvciBub3QgYXBwbHkpIG1vZGUgY2hhbmdlcyBpbmRlcGVuZGVudGx5IGZyb20gY29udGVudHMgY2hhbmdlcy4KKworKiAiZ2l0IGJpc2VjdCBoZWxwIiBnaXZlcyBsb25nZXIgYW5kIG1vcmUgaGVscGZ1bCB1c2FnZSBpbmZvcm1hdGlvbi4KKworKiAiZ2l0IGJpc2VjdCIgZG9lcyBub3QgdXNlIGEgc3BlY2lhbCBicmFuY2ggImJpc2VjdCIgYW55bW9yZTsgaW5zdGVhZCwgaXQKKyAgZG9lcyBpdHMgd29yayBvbiBhIGRldGFjaGVkIEhFQUQuCisKKyogImdpdCBicmFuY2giIChhbmQgImdpdCBjaGVja291dCAtYiIpIGNhbiBiZSB0b2xkIHRvIHNldCB1cAorICBicmFuY2guPG5hbWU+LnJlYmFzZSBhdXRvbWF0aWNhbGx5LCBzbyB0aGF0IGxhdGVyIHlvdSBjYW4gc2F5ICJnaXQgcHVsbCIKKyAgYW5kIG1hZ2ljYWxseSBjYXVzZSAiZ2l0IHB1bGwgLS1yZWJhc2UiIHRvIGhhcHBlbi4KKworKiAiZ2l0IGJyYW5jaCAtLW1lcmdlZCIgYW5kICJnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkIiBjYW4gYmUgdXNlZCB0byBsaXN0CisgIGJyYW5jaGVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbWVyZ2VkIChvciBub3QgeWV0IG1lcmdlZCkgdG8gdGhlCisgIGN1cnJlbnQgYnJhbmNoLgorCisqICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIgY2FuIGFkZCBhIHNpZ24tb2ZmLgorCisqICJnaXQgY29tbWl0IiBtZW50aW9ucyB0aGUgYXV0aG9yIGlkZW50aXR5IHdoZW4geW91IGFyZSBjb21taXR0aW5nCisgIHNvbWVib2R5IGVsc2UncyBjaGFuZ2VzLgorCisqICJnaXQgZGlmZi9sb2cgLS1kaXJzdGF0IiBvdXRwdXQgaXMgY29uc2lzdGVudCBiZXR3ZWVuIGJpbmFyeSBhbmQgdGV4dHVhbAorICBjaGFuZ2VzLgorCisqICJnaXQgZmlsdGVyLWJyYW5jaCIgcmV3cml0ZXMgc2lnbmVkIHRhZ3MgYnkgZGVtb3RpbmcgdGhlbSB0byBhbm5vdGF0ZWQuCisKKyogImdpdCBmb3JtYXQtcGF0Y2ggLS1uby1iaW5hcnkiIGNhbiBwcm9kdWNlIGEgcGF0Y2ggdGhhdCBsYWNrIGJpbmFyeQorICBjaGFuZ2VzIChpLmUuIGNhbm5vdCBiZSB1c2VkIHRvIHByb3BhZ2F0ZSB0aGUgd2hvbGUgY2hhbmdlcykgbWVhbnQgb25seQorICBmb3IgcmV2aWV3aW5nLgorCisqICJnaXQgaW5pdCAtLWJhcmUiIGlzIGEgc3lub255bSBmb3IgImdpdCAtLWJhcmUgaW5pdCIgbm93LgorCisqICJnaXQgZ2MgLS1hdXRvIiBob25vcnMgYSBuZXcgcHJlLWF1dG8tZ2MgaG9vayB0byB0ZW1wb3JhcmlseSBkaXNhYmxlIGl0LgorCisqICJnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6PGN1c3RvbSBmb3JtYXQ+IiBnaXZlcyBhIExGIGFmdGVyIGVhY2ggZW50cnksCisgIGluc3RlYWQgb2YgZ2l2aW5nIGEgTEYgYmV0d2VlbiBlYWNoIHBhaXIgb2YgZW50cmllcyB3aGljaCBpcyBob3cKKyAgImdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OjxjdXN0b20gZm9ybWF0PiIgd29ya3MuCisKKyogImdpdCBsb2ciIGFuZCBmcmllbmRzIGxlYXJuZWQgdGhlICItLWdyYXBoIiBvcHRpb24gdG8gc2hvdyB0aGUgYW5jZXN0cnkKKyAgZ3JhcGggYXQgdGhlIGxlZnQgbWFyZ2luIG9mIHRoZSBvdXRwdXQuCisKKyogImdpdCBsb2ciIGFuZCBmcmllbmRzIGNhbiBiZSB0b2xkIHRvIHVzZSBkYXRlIGZvcm1hdCB0aGF0IGlzIGRpZmZlcmVudAorICBmcm9tIHRoZSBkZWZhdWx0IHZpYSAnbG9nLmRhdGUnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyogImdpdCBzZW5kLWVtYWlsIiBub3cgY2FuIHNlbmQgb3V0IG1lc3NhZ2VzIG91dHNpZGUgYSBnaXQgcmVwb3NpdG9yeS4KKworKiAiZ2l0IHNlbmQtZW1haWwgLS1jb21wb3NlIiB3YXMgbWFkZSBhd2FyZSBvZiByZmMyMDQ3IHF1b3RpbmcuCisKKyogImdpdCBzdGF0dXMiIGNhbiBvcHRpb25hbGx5IGluY2x1ZGUgb3V0cHV0IGZyb20gImdpdCBzdWJtb2R1bGUKKyAgc3VtbWFyeSIuCisKKyogImdpdCBzdm4iIGxlYXJuZWQgLS1hZGQtYXV0aG9yLWZyb20gb3B0aW9uIHRvIHByb3BhZ2F0ZSB0aGUgYXV0aG9yc2hpcAorICBieSBtdW5naW5nIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuCisKKyogbmV3IG9iamVjdCBjcmVhdGlvbiBhbmQgbG9va2luZyB1cCBpbiAiZ2l0IHN2biIgaGFzIGJlZW4gb3B0aW1pemVkLgorCisqICJnaXR3ZWIiIGNhbiByZWFkIGZyb20gYSBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuCisKKyhpbnRlcm5hbCkKKworKiAiZ2l0IHVucGFjay1vYmplY3RzIiBhbmQgImdpdCByZWNlaXZlLXBhY2siIGlzIG5vdyBtb3JlIHN0cmljdCBhYm91dAorICBkZXRlY3RpbmcgYnJlYWthZ2UgaW4gdGhlIG9iamVjdHMgdGhleSByZWNlaXZlIG92ZXIgdGhlIHdpcmUuCisKKworRml4ZXMgc2luY2UgdjEuNS41CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS41LjUgbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbgordGhpcyByZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitBbmQgdGhlcmUgYXJlIHRvbyBudW1lcm91cyBzbWFsbCBmaXhlcyB0byBvdGhlcndpc2Ugbm90ZSBoZXJlIDstKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlkN2ExYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMS50eHQKQEAgLTAsMCArMSwzNiBAQAorR0lUIHYxLjYuMC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBkaWZmIC0tY2MiIGRpZCBub3QgaG9ub3IgY29udGVudCBtYW5nbGluZyBzcGVjaWZpZWQgYnkKKyAgZ2l0YXR0cmlidXRlcyBhbmQgY29yZS5hdXRvY3JsZiB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgd29yayB0cmVlLgorCisqICJnaXQgZGlmZiAtLWNoZWNrIiBpbmNvcnJlY3RseSBkZXRlY3RlZCBuZXcgdHJhaWxpbmcgYmxhbmsgbGluZXMgd2hlbgorICB3aGl0ZXNwYWNlIGNoZWNrIHdhcyBpbiBlZmZlY3QuCisKKyogImdpdCBmb3ItZWFjaC1yZWYiIHRyaWVkIHRvIGRlcmVmZXJlbmNlIE5VTEwgd2hlbiBhc2tlZCBmb3IgJyUoYm9keSkiIG9uCisgIGEgdGFnIHdpdGggYSBzaW5nbGUgaW5jb21wbGV0ZSBsaW5lIGFzIGl0cyBwYXlsb2FkLgorCisqICJnaXQgZm9ybWF0LXBhdGNoIiBwZWVrZWQgYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcgd2hlbgorICAiZm9ybWF0LmhlYWRlcnMiIHZhcmlhYmxlIGlzIGVtcHR5IChhIG1pc2NvbmZpZ3VyYXRpb24pLgorCisqICJnaXQgaGVscCBoZWxwIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5LgorCisqICJnaXQgbWFpbGluZm8iIChoZW5jZSAiZ2l0IGFtIikgd2FzIHVuaGFwcHkgd2hlbiBNSU1FIG11bHRpcGFydCBtZXNzYWdlCisgIGNvbnRhaW5lZCBnYXJiYWdlIGFmdGVyIHRoZSBmaW5pc2hpbmcgYm91bmRhcnkuCisKKyogImdpdCBtYWlsaW5mbyIgYWxzbyB3YXMgdW5oYXBweSB3aGVuIHRoZSAiRnJvbTogIiBsaW5lIG9ubHkgaGFkIGEgYmFyZQorICBlLW1haWwgYWRkcmVzcy4KKworKiAiZ2l0IG1lcmdlIiBkaWQgbm90IHJlZnJlc2ggdGhlIGluZGV4IGNvcnJlY3RseSB3aGVuIGEgbWVyZ2UgcmVzdWx0ZWQgaW4KKyAgYSBmYXN0LWZvcndhcmQuCisKKyogImdpdCBtZXJnZSIgZGlkIG5vdCByZXNvbHZlIGEgdHJ1bHkgdHJpdmlhbCBtZXJnZXMgdGhhdCBjYW4gYmUgZG9uZQorICB3aXRob3V0IGNvbnRlbnQgbGV2ZWwgbWVyZ2VzLgorCisqICJnaXQgc3ZuIGRjb21taXQiIHRvIGEgcmVwb3NpdG9yeSB3aXRoIFVSTCB0aGF0IGhhcyBlbWJlZGRlZCB1c2VybmFtZXMKKyAgZGlkIG5vdCB3b3JrIGNvcnJlY3RseS4KKworQ29udGFpbnMgb3RoZXIgdmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4ZmI4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuMi50eHQKQEAgLTAsMCArMSw4MSBAQAorR0lUIHYxLjYuMC4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEluc3RhbGxhdGlvbiBvbiBwbGF0Zm9ybXMgdGhhdCBuZWVkcyAuZXhlIHN1ZmZpeCB0byBnaXQtKiBwcm9ncmFtcyB3ZXJlCisgIGJyb2tlbiBpbiAxLjYuMC4xLgorCisqIEluc3RhbGxhdGlvbiBvbiBmaWxlc3lzdGVtcyB3aXRob3V0IHN5bWJvbGljIGxpbmtzIHN1cHBvcnQgZGlkIG5vdAorICB3b3JrIHdlbGwuCisKKyogSW4tdHJlZSBkb2N1bWVudGF0aW9ucyBhbmQgdGVzdCBzY3JpcHRzIG5vdyB1c2UgImdpdCBmb28iIGZvcm0gdG8gc2V0IGEKKyAgYmV0dGVyIGV4YW1wbGUsIGluc3RlYWQgb2YgdGhlICJnaXQtZm9vIiBmb3JtICh3aGljaCBpcyBhbiBhY2NlcHRhYmxlCisgIGZvcm0gaWYgeW91IGhhdmUgIlBBVEg9JChnaXQgLS1leGVjLXBhdGgpOiRQQVRIIiBpbiB5b3VyIHNjcmlwdCkKKworKiBNYW55IGNvbW1hbmRzIGRpZCBub3QgdXNlIHRoZSBjb3JyZWN0IHdvcmtpbmcgdHJlZSBsb2NhdGlvbiB3aGVuIHVzZWQKKyAgd2l0aCBHSVRfV09SS19UUkVFIGVudmlyb25tZW50IHNldHRpbmdzLgorCisqIFNvbWUgc3lzdGVtcyBuZWVkIHRvIHVzZSBjb21wYXRpYmlsaXR5IGZubWF0Y2ggYW5kIHJlZ2V4IGxpYnJhcmllcworICBpbmRlcGVuZGVudCBmcm9tIGVhY2ggb3RoZXI7IHRoZSBjb21wYXQvIGFyZWEgaGFzIGJlZW4gcmVvcmdhbml6ZWQgdG8KKyAgYWxsb3cgdGhpcy4KKworCisqICJnaXQgYXBwbHkgLS11bmlkaWZmLXplcm8iIGluY29ycmVjdGx5IGFwcGxpZWQgYSAtVTAgcGF0Y2ggdGhhdCBpbnNlcnRzCisgIGEgbmV3IGxpbmUgYmVmb3JlIHRoZSBzZWNvbmQgbGluZS4KKworKiAiZ2l0IGJsYW1lIC1jIiBkaWQgbm90IGV4YWN0bHkgd29yayBsaWtlICJnaXQgYW5ub3RhdGUiIHdoZW4gcmFuZ2UKKyAgYm91bmRhcmllcyBhcmUgaW52b2x2ZWQuCisKKyogImdpdCBjaGVja291dCBmaWxlIiB3aGVuIGZpbGUgaXMgc3RpbGwgdW5tZXJnZWQgY2hlY2tlZCBvdXQgY29udGVudHMgZnJvbQorICBhIHJhbmRvbSBoaWdoIG9yZGVyIHN0YWdlLCB3aGljaCB3YXMgY29uZnVzaW5nLgorCisqICJnaXQgY2xvbmUgJHRoZXJlICRoZXJlLyIgd2l0aCBleHRyYSB0cmFpbGluZyBzbGFzaGVzIGFmdGVyIGV4cGxpY2l0CisgIGxvY2FsIGRpcmVjdG9yeSBuYW1lICRoZXJlIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC4KKworKiAiZ2l0IGRpZmYiIG9uIHRyYWNrZWQgY29udGVudHMgd2l0aCBDUkxGIGxpbmUgZW5kaW5ncyBkaWQgbm90IGRyaXZlICJsZXNzIgorICBpbnRlbGxpZ2VudGx5IHdoZW4gc2hvd2luZyBhZGRlZCBvciByZW1vdmVkIGxpbmVzLgorCisqICJnaXQgZGlmZiAtLWRpcnN0YXQgLU0iIGRpZCBub3QgYWRkIGNoYW5nZXMgaW4gc3ViZGlyZWN0b3JpZXMgdXAKKyAgY29ycmVjdGx5IGZvciByZW5hbWVkIHBhdGhzLgorCisqICJnaXQgZGlmZiAtLWN1bXVsYXRpdmUiIGRpZCBub3QgaW1wbHkgIi0tZGlyc3RhdCIuCisKKyogImdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8iIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZC4KKworKiAiZ2l0IGd1aSIgYWxsb3dlZCB1c2VycyB0byBmZWVkIHBhdGNoIHdpdGhvdXQgYW55IGNvbnRleHQgdG8gYmUgYXBwbGllZC4KKworKiAiZ2l0IGd1aSIgYm90Y2hlZCBwYXJzaW5nICJkaWZmIiBvdXRwdXQgd2hlbiBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCB0d28KKyAgZGFzaGVzIGFuZCBhIHNwYWNlIGdldHMgcmVtb3ZlZCBvciBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCB0d28gcGx1c2VzCisgIGFuZCBhIHNwYWNlIGdldHMgYWRkZWQuCisKKyogImdpdCBndWkiIHRyYW5zbGF0aW9uIHVwZGF0ZXMgYW5kIGkxOG4gZml4ZXMuCisKKyogImdpdCBpbmRleC1wYWNrIiBpcyBtb3JlIGNhcmVmdWwgYWdhaW5zdCBkaXNrIGNvcnJ1cHRpb24gd2hpbGUgY29tcGxldGluZworICBhIHRoaW4gcGFjay4KKworKiAiZ2l0IGxvZyAtaSAtLWdyZXA9cGF0dGVybiIgZGlkIG5vdCBpZ25vcmUgY2FzZTsgbmVpdGhlciAiZ2l0IGxvZyAtRQorICAtLWdyZXA9cGF0dGVybiIgdHJpZ2dlcmVkIGV4dGVuZGVkIHJlZ2V4cC4KKworKiAiZ2l0IGxvZyAtLXByZXR0eT0iJWFkIiAtLWRhdGU9c2hvcnQiIGRpZCBub3QgdXNlIHNob3J0IGZvcm1hdCB3aGVuCisgIHNob3dpbmcgdGhlIHRpbWVzdGFtcC4KKworKiAiZ2l0IGxvZyAtLWF1dGhvcj1hdXRob3IiIG1hdGNoIGluY29ycmVjdGx5IG1hdGNoZWQgd2l0aCB0aGUKKyAgdGltZXN0YW1wIHBhcnQgb2YgImF1dGhvciAiIGxpbmUgaW4gY29tbWl0IG9iamVjdHMuCisKKyogImdpdCBsb2cgLUYgLS1hdXRob3I9YXV0aG9yIiBkaWQgbm90IHdvcmsgYXQgYWxsLgorCisqIEJ1aWxkIHByb2NlZHVyZSBmb3IgImdpdCBzaGVsbCIgdGhhdCB1c2VkIHN0dWIgdmVyc2lvbnMgb2Ygc29tZQorICBmdW5jdGlvbnMgYW5kIGdsb2JhbHMgd2FzIG5vdCB1bmRlcnN0b29kIGJ5IGxpbmtlcnMgb24gc29tZSBwbGF0Zm9ybXMuCisKKyogImdpdCBzdGFzaCIgd2FzIGZvb2xlZCBieSBhIHN0YXQtZGlydHkgYnV0IG90aGVyd2lzZSB1bm1vZGlmaWVkIHBhdGhzCisgIGFuZCByZWZ1c2VkIHRvIHdvcmsgdW50aWwgdGhlIHVzZXIgcmVmcmVzaGVkIHRoZSBpbmRleC4KKworKiAiZ2l0IHN2biIgd2FzIGJyb2tlbiBvbiBQZXJsIGJlZm9yZSA1Ljggd2l0aCByZWNlbnQgZml4ZXMgdG8gcmVkdWNlCisgIHVzZSBvZiB0ZW1wb3JhcnkgZmlsZXMuCisKKyogImdpdCB2ZXJpZnktcGFjayAtdiIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIGdpdmVuIG1vcmUgdGhhbiBvbmUKKyAgcGFja2ZpbGUuCisKK0Fsc28gY29udGFpbnMgbWFueSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTA1Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC4zLnR4dApAQCAtMCwwICsxLDExNyBAQAorR0lUIHYxLjYuMC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAiIGRpZCBub3QgaG9ub3IgY29yZS5hdXRvY3JsZiB3aGlsZQorICAtLWZvcm1hdD10YXIgZGlkLgorCisqIENvbnRpbnVpbmcgImdpdCByZWJhc2UgLWkiIHdhcyB2ZXJ5IGNvbmZ1c2VkIHdoZW4gdGhlIHVzZXIgbGVmdCBtb2RpZmllZAorICBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHdoaWxlIHJlc29sdmluZyBjb25mbGljdHMuCisKKyogQ29udGludWluZyAiZ2l0IHJlYmFzZSAtaSIgd2FzIGFsc28gdmVyeSBjb25mdXNlZCB3aGVuIHRoZSB1c2VyIGxlZnQKKyAgc29tZSBzdGFnZWQgY2hhbmdlcyBpbiB0aGUgaW5kZXggYWZ0ZXIgImVkaXQiLgorCisqICJnaXQgcmViYXNlIC1pIiBub3cgaG9ub3JzIHRoZSBwcmUtcmViYXNlIGhvb2ssIGp1c3QgbGlrZSB0aGUKKyAgb3RoZXIgcmViYXNlIGltcGxlbWVudGF0aW9ucyAiZ2l0IHJlYmFzZSIgYW5kICJnaXQgcmViYXNlIC1tIi4KKworKiAiZ2l0IHJlYmFzZSAtaSIgaW5jb3JyZWN0bHkgYWJvcnRlZCB3aGVuIHRoZXJlIGlzIG5vIGNvbW1pdCB0byByZXBsYXkuCisKKyogQmVoYXZpb3VyIG9mICJnaXQgZGlmZiAtLXF1aWV0IiB3YXMgaW5jb25zaXN0ZW50IHdpdGggImRpZmYgLS1leGl0LWNvZGUiCisgIHdpdGggdGhlIG91dHB1dCByZWRpcmVjdGVkIHRvIC9kZXYvbnVsbC4KKworKiAiZ2l0IGRpZmYgLS1uby1pbmRleCIgb24gYmluYXJ5IGZpbGVzIG5vIGxvbmdlciBvdXRwdXRzIGEgYm9ndXMKKyAgImRpZmYgLS1naXQiIGhlYWRlciBsaW5lLgorCisqICJnaXQgZGlmZiIgaHVuayBoZWFkZXIgcGF0dGVybnMgd2l0aCBtdWx0aXBsZSBlbGVtZW50cyBzZXBhcmF0ZWQgYnkgTEYKKyAgd2VyZSBub3QgdXNlZCBjb3JyZWN0bHkuCisKKyogSHVuayBoZWFkZXJzIGluICJnaXQgZGlmZiIgZGVmYXVsdCB0byB1c2luZyBleHRlbmRlZCByZWd1bGFyCisgIGV4cHJlc3Npb25zLCBmaXhpbmcgc29tZSBvZiB0aGUgaW50ZXJuYWwgcGF0dGVybnMgb24gbm9uLUdOVQorICBwbGF0Zm9ybXMuCisKKyogTmV3IGNvbmZpZyAiZGlmZi4qLnhmdW5jbmFtZSIgZXhwb3NlcyBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb25zCisgIGZvciB1c2VyIHNwZWNpZmllZCBodW5rIGhlYWRlciBwYXR0ZXJucy4KKworKiAiZ2l0IGdjIiB3aGVuIGVqZWN0aW5nIG90aGVyd2lzZSB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gcGFja2ZpbGVzIGludG8KKyAgbG9vc2UgZm9ybSBsZWFrZWQgbWVtb3J5LgorCisqICJnaXQgaW5kZXgtcGFjayIgd2FzIHJlY2VudGx5IGJyb2tlbiBhbmQgbWlzaGFuZGxlZCBvYmplY3RzIGFkZGVkIGJ5CisgIHRoaW4tcGFjayBjb21wbGV0aW9uIHByb2Nlc3NpbmcgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgorCisqICJnaXQgaW5kZXgtcGFjayIgd2FzIHJlY2VudGx5IGJyb2tlbiBhbmQgbWlzYmVoYXZlZCB3aGVuIHJ1biBmcm9tIGluc2lkZQorICAuZ2l0L29iamVjdHMvcGFjay8gZGlyZWN0b3J5LgorCisqICJnaXQgc3Rhc2ggYXBwbHkgc2FzaEB7MX0iIHdhcyBmaXhlZCB0byBlcnJvciBvdXQuICBQcmlvciB2ZXJzaW9ucworICB3b3VsZCBoYXZlIGFwcGxpZWQgc3Rhc2hAezB9IGluY29ycmVjdGx5LgorCisqICJnaXQgc3Rhc2ggYXBwbHkiIG5vdyBvZmZlcnMgYSBiZXR0ZXIgc3VnZ2VzdGlvbiBvbiBob3cgdG8gY29udGludWUKKyAgaWYgdGhlIHdvcmtpbmcgdHJlZSBpcyBjdXJyZW50bHkgZGlydHkuCisKKyogImdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JShzdWJqZWN0KSIgZml4ZWQgZm9yIGNvbW1pdHMgd2l0aCBubworICBubyBuZXdsaW5lIGluIHRoZSBtZXNzYWdlIGJvZHkuCisKKyogImdpdCByZW1vdGUiIGZpeGVkIHRvIHByb3RlY3QgcHJpbnRmIGZyb20gdXNlciBpbnB1dC4KKworKiAiZ2l0IHJlbW90ZSBzaG93IC12IiBub3cgZGlzcGxheXMgYWxsIFVSTHMgb2YgYSByZW1vdGUuCisKKyogImdpdCBjaGVja291dCAtYiBicmFuY2giIHdhcyBjb25mdXNlZCB3aGVuIGJyYW5jaCBhbHJlYWR5IGV4aXN0ZWQuCisKKyogImdpdCBjaGVja291dCAtcSIgb25jZSBhZ2FpbiBzdXBwcmVzc2VzIHRoZSBsb2NhbGx5IG1vZGlmaWVkIGZpbGUgbGlzdC4KKworKiAiZ2l0IGNsb25lIC1xIiwgImdpdCBmZXRjaCAtcSIgYXNrcyByZW1vdGUgc2lkZSB0byBub3Qgc2VuZAorICBwcm9ncmVzcyBtZXNzYWdlcywgYWN0dWFsbHkgbWFraW5nIHRoZWlyIG91dHB1dCBxdWlldC4KKworKiBDcm9zcy1kaXJlY3RvcnkgcmVuYW1lcyBhcmUgbm8gbG9uZ2VyIHVzZWQgd2hlbiBjcmVhdGluZyBwYWNrcy4gIFRoaXMKKyAgYWxsb3dzIG1vcmUgZ3JhY2VmdWwgYmVoYXZpb3Igb24gZmlsZXN5c3RlbXMgbGlrZSBzc2hmcy4KKworKiBTdGFsZSB0ZW1wb3JhcnkgZmlsZXMgdW5kZXIgJEdJVF9ESVIvb2JqZWN0cy9wYWNrIGFyZSBub3cgY2xlYW5lZCB1cAorICBhdXRvbWF0aWNhbGx5IGJ5ICJnaXQgcHJ1bmUiLgorCisqICJnaXQgbWVyZ2UiIG9uY2UgYWdhaW4gcmVtb3ZlcyBkaXJlY3RvcmllcyBhZnRlciB0aGUgbGFzdCBmaWxlIGhhcworICBiZWVuIHJlbW92ZWQgZnJvbSBpdCBkdXJpbmcgdGhlIG1lcmdlLgorCisqICJnaXQgbWVyZ2UiIGRpZCBub3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBmb3IgdGhlIHN0cnVjdHVyZSBpdHNlbGYgd2hlbgorICBlbnVtZXJhdGluZyB0aGUgcGFyZW50cyBvZiB0aGUgcmVzdWx0aW5nIGNvbW1pdC4KKworKiAiZ2l0IGJsYW1lIC1DIC1DIiBubyBsb25nZXIgc2VnZmF1bHRzIHdoaWxlIHRyeWluZyB0byBwYXNzIGJsYW1lIGlmCisgICBpdCBlbmNvdW50ZXJzIGEgc3VibW9kdWxlIHJlZmVyZW5jZS4KKworKiAiZ2l0IHJtIiBpbmNvcnJlY3RseSBjbGFpbWVkIHRoYXQgeW91IGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9ucyB3aGVuIGEKKyAgcGF0aCB3YXMgbWVyZWx5IHN0YXQtZGlydHkuCisKKyogImdpdCBzdm4iIGZpeGVkIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSB3aGVuICdzZXQtdHJlZScgZmFpbGVkLAorICAgaW5zdGVhZCBvZiBhIFBlcmwgY29tcGlsZSBlcnJvci4KKworKiAiZ2l0IHN1Ym1vZHVsZSIgZml4ZWQgdG8gaGFuZGxlIGNoZWNraW5nIG91dCBhIGRpZmZlcmVudCBjb21taXQKKyAgdGhhbiBIRUFEIGFmdGVyIGluaXRpYWxpemluZyB0aGUgc3VibW9kdWxlLgorCisqIFRoZSAiZ2l0IGNvbW1pdCIgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZXJlIGFyZSBzdGlsbCB1bm1lcmdlZAorICBmaWxlcyBwcmVzZW50IHdhcyBjbGFyaWZpZWQgdG8gbWF0Y2ggImdpdCB3cml0ZS10cmVlIi4KKworKiAiZ2l0IGluaXQiIHdhcyBjb25mdXNlZCB3aGVuIGNvcmUuYmFyZSBvciBjb3JlLnNoYXJlZFJlcG9zaXRvcnkgYXJlIHNldAorICBpbiBzeXN0ZW0gb3IgdXNlciBnbG9iYWwgY29uZmlndXJhdGlvbiBmaWxlIGJ5IG1pc3Rha2UuICBXaGVuIC0tYmFyZSBvcgorICAtLXNoYXJlZCBpcyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoZXNlIG5vdyBvdmVycmlkZSBzdWNoCisgIHNldHRpbmdzIG1hZGUgb3V0c2lkZSB0aGUgcmVwb3NpdG9yaWVzLgorCisqIFNvbWUgc2VnZmF1bHRzIGR1ZSB0byB1bmNhdWdodCBOVUxMIHBvaW50ZXJzIHdlcmUgZml4ZWQgaW4gbXVsdGlwbGUKKyAgdG9vbHMgc3VjaCBhcyBhcHBseSwgcmVzZXQsIHVwZGF0ZS1pbmRleC4KKworKiBTb2xhcmlzIGJ1aWxkcyBub3cgZGVmYXVsdCB0byBPTERfSUNPTlY9MSB0byBhdm9pZCBjb21waWxlIHdhcm5pbmdzOworICBTb2xhcmlzIDggZG9lcyBub3QgZGVmaW5lIE5FRURTX0xJQklDT05WIGJ5IGRlZmF1bHQuCisKKyogIkdpdC5wbSIgdGVzdHMgcmVsaWVkIG9uIHVubmVjZXNzYXJpbHkgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiBQZXJsLgorCisqICJnaXR3ZWIiIHRyaWdnZXJlZCB1bmRlZiB3YXJuaW5nIG9uIGNvbW1pdHMgd2l0aG91dCBsb2cgbWVzc2FnZXMuCisKKyogImdpdHdlYiIgdHJpZ2dlcmVkIHVuZGVmIHdhcm5pbmdzIG9uIG1pc3NpbmcgdHJlZXMuCisKKyogImdpdHdlYiIgbm93IHJlbW92ZXMgUEFUSF9JTkZPIGZyb20gaXRzIFVSTHMgc28gdXNlcnMgZG9uJ3QgaGF2ZQorICB0byBtYW51YWxseSBzZXQgdGhlIFVSTCBpbiB0aGUgZ2l0d2ViIGNvbmZpZ3VyYXRpb24uCisKKyogQmFzaCBjb21wbGV0aW9uIHJlbW92ZWQgc3VwcG9ydCBmb3IgbGVnYWN5ICJnaXQtZmV0Y2giLCAiZ2l0LXB1c2giCisgIGFuZCAiZ2l0LXB1bGwiIGFzIHRoZXNlIGFyZSBubyBsb25nZXIgaW5zdGFsbGVkLiAgRGFzaGxlc3MgZm9ybQorICAoImdpdCBmZXRjaCIpIGlzIHN0aWxsIGhvd2V2ZXIgc3VwcG9ydGVkLgorCitNYW55IG90aGVyIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjI2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjQudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0dJVCB2MS42LjAuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjAuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAnZ2l0IGFkZCAtcCcgc2FpZCAiTm8gY2hhbmdlcyIgd2hlbiBvbmx5IGJpbmFyeSBmaWxlcyB3ZXJlIGNoYW5nZWQuCisKKyogJ2dpdCBhcmNoaXZlJyBkaWQgbm90IHdvcmsgY29ycmVjdGx5IGluIGJhcmUgcmVwb3NpdG9yaWVzLgorCisqICdnaXQgY2hlY2tvdXQgLXQgLWIgbmV3YnJhbmNoJyB3aGVuIHlvdSBhcmUgb24gZGV0YWNoZWQgSEVBRCB3YXMgYnJva2VuLgorCisqIHdoZW4gd2UgcmVmdXNlIHRvIGRldGVjdCByZW5hbWVzIGJlY2F1c2UgdGhlcmUgYXJlIHRvbyBtYW55IG5ldyBvcgorICBkZWxldGVkIGZpbGVzLCAnZ2l0IGRpZmYnIGRpZCBub3Qgc2F5IGhvdyBtYW55IHRoZXJlIGFyZS4KKworKiAnZ2l0IHB1c2ggLS1taXJyb3InIHRyaWVkIGFuZCBmYWlsZWQgdG8gcHVzaCB0aGUgc3Rhc2g7IHRoZXJlIGlzIG5vCisgIHBvaW50IGluIHNlbmRpbmcgaXQgdG8gYmVnaW4gd2l0aC4KKworKiAnZ2l0IHB1c2gnIGRpZCBub3QgdXBkYXRlIHRoZSByZW1vdGUgdHJhY2tpbmcgcmVmZXJlbmNlIGlmIHRoZSBjb3JyZXNwb25kaW5nCisgIHJlZiBvbiB0aGUgcmVtb3RlIGVuZCBoYXBwZW5lZCB0byBiZSBhbHJlYWR5IHVwIHRvIGRhdGUuCisKKyogJ2dpdCBwdWxsICR0aGVyZSAkYnJhbmNoOiRjdXJyZW50X2JyYW5jaCcgZGlkIG5vdCB3b3JrIHdoZW4geW91IHdlcmUgb24KKyAgYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4uCisKKyogd2hlbiBnaXZpbmcgdXAgcmVzb2x2aW5nIGEgY29uZmxpY3RlZCBtZXJnZSwgJ2dpdCByZXNldCAtLWhhcmQnIGZhaWxlZAorICB0byByZW1vdmUgbmV3IHBhdGhzIGZyb20gdGhlIHdvcmtpbmcgdHJlZS4KKworKiAnZ2l0IHNlbmQtZW1haWwnIGhhZCBhIHNtYWxsIGZkIGxlYWsgd2hpbGUgc2Nhbm5pbmcgZGlyZWN0b3J5LgorCisqICdnaXQgc3RhdHVzJyBpbmNvcnJlY3RseSByZXBvcnRlZCBhIHN1Ym1vZHVsZSBkaXJlY3RvcnkgYXMgYW4gdW50cmFja2VkCisgIGRpcmVjdG9yeS4KKworKiAnZ2l0IHN2bicgdXNlZCBkZXByZWNhdGVkICdnaXQtZm9vJyBmb3JtIG9mIHN1YmNvbW1hbmQgaW52b2NhdGlvbi4KKworKiAnZ2l0IHVwZGF0ZS1yZWYgLWQnIHRvIHJlbW92ZSBhIHJlZmVyZW5jZSBkaWQgbm90IGhvbm9yIC0tbm8tZGVyZWYgb3B0aW9uLgorCisqIFBsdWdnZWQgc21hbGwgbWVtbGVha3MgaGVyZSBhbmQgdGhlcmUuCisKKyogQWxzbyBjb250YWlucyBtYW55IGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOGJiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjUudHh0CkBAIC0wLDAgKzEsNTYgQEAKK0dJVCB2MS42LjAuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjAuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiAiZ2l0IGNoZWNrb3V0IiB1c2VkIHRvIGNyYXNoIHdoZW4geW91ciBIRUFEIHdhcyBwb2ludGluZyBhdCBhIGRlbGV0ZWQKKyAgYnJhbmNoLgorCisqICJnaXQgY2hlY2tvdXQiIGZyb20gYW4gdW4tY2hlY2tlZC1vdXQgc3RhdGUgZGlkIG5vdCBhbGxvdyBzd2l0Y2hpbmcgb3V0CisgIG9mIHRoZSBjdXJyZW50IGJyYW5jaC4KKworKiAiZ2l0IGRpZmYiIGFsd2F5cyBhbGxvd2VkIEdJVF9FWFRFUk5BTF9ESUZGIGFuZCAtLW5vLWV4dC1kaWZmIHdhcyBuby1vcCBmb3IKKyAgdGhlIGNvbW1hbmQuCisKKyogR2l2aW5nIDMgb3IgbW9yZSB0cmVlLWlzaCB0byAiZ2l0IGRpZmYiIGlzIHN1cHBvc2VkIHRvIHNob3cgdGhlIGNvbWJpbmVkCisgIGRpZmYgZnJvbSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgdHJlZXMgdG8gdGhlIGZpcnN0IG9uZSwgYnV0IHRoZSBvcmRlciB3YXMKKyAgc2NyZXdlZCB1cC4KKworKiAiZ2l0IGZhc3QtZXhwb3J0IiBkaWQgbm90IGV4cG9ydCBhbGwgdGFncy4KKworKiAiZ2l0IGxzLWZpbGVzIC0td2l0aC10cmVlPTx0cmVlPiIgZGlkIG5vdCB3b3JrIHdpdGggb3B0aW9ucyBvdGhlcgorICB0aGFuIC1jLCBtb3N0IG5vdGFibHkgd2l0aCAtbS4KKworKiAiZ2l0IHBhY2stb2JqZWN0cyIgZGlkIG5vdCBtYWtlIGl0cyBiZXN0IGVmZm9ydCB0byBob25vciAtLW1heC1wYWNrLXNpemUKKyAgb3B0aW9uIHdoZW4gYSBzaW5nbGUgZmlyc3Qgb2JqZWN0IGFscmVhZHkgYnVzdGVkIHRoZSBnaXZlbiBsaW1pdCBhbmQKKyAgcGxhY2VkIG1hbnkgb2JqZWN0cyBpbiBhIHNpbmdsZSBwYWNrLgorCisqICJnaXQtcDQiIGZhc3QgaW1wb3J0IGZyb250ZW5kIHdhcyB0b28gZWFnZXIgdG8gdHJpZ2dlciBpdHMga2V5d29yZCBleHBhbnNpb24KKyAgbG9naWMsIGV2ZW4gb24gYSBrZXl3b3JkLWxvb2tpbmcgc3RyaW5nIHRoYXQgZG9lcyBub3QgaGF2ZSBjbG9zaW5nICckJyBvbiB0aGUKKyAgc2FtZSBsaW5lLgorCisqICJnaXQgcHVzaCAkdGhlcmUiIHdoZW4gdGhlIHJlbW90ZSAkdGhlcmUgaXMgZGVmaW5lZCBpbiAkR0lUX0RJUi9icmFuY2hlcy8kdGhlcmUKKyAgYmVoYXZlcyBtb3JlIGxpa2Ugd2hhdCBjZy1wdXNoIGZyb20gQ29naXRvIHVzZWQgdG8gd29yay4KKworKiB3aGVuIGdpdmluZyB1cCByZXNvbHZpbmcgYSBjb25mbGljdGVkIG1lcmdlLCAiZ2l0IHJlc2V0IC0taGFyZCIgZmFpbGVkCisgIHRvIHJlbW92ZSBuZXcgcGF0aHMgZnJvbSB0aGUgd29ya2luZyB0cmVlLgorCisqICJnaXQgdGFnIiBkaWQgbm90IGNvbXBsYWluIHdoZW4gZ2l2ZW4gbXV0dWFsbHkgaW5jb21wYXRpYmxlIHNldCBvZiBvcHRpb25zLgorCisqIFRoZSBtZXNzYWdlIGNvbnN0cnVjdGVkIGluIHRoZSBpbnRlcm5hbCBlZGl0b3Igd2FzIGRpc2NhcmRlZCB3aGVuICJnaXQKKyAgdGFnIC1zIiBmYWlsZWQgdG8gc2lnbiB0aGUgbWVzc2FnZSwgd2hpY2ggd2FzIG9mdGVuIGNhdXNlZCBieSB0aGUgdXNlcgorICBub3QgY29uZmlndXJpbmcgR1BHIGNvcnJlY3RseS4KKworKiAibWFrZSBjaGVjayIgY2Fubm90IGJlIHJ1biB3aXRob3V0IHNwYXJzZTsgcGVvcGxlIG1heSBoYXZlIG1lYW50IHRvIHNheQorICAibWFrZSB0ZXN0IiBpbnN0ZWFkLCBzbyBzdWdnZXN0IHRoYXQuCisKKyogSW50ZXJuYWwgZGlmZiBtYWNoaW5lcnkgaGFkIGEgY29ybmVyIGNhc2UgcGVyZm9ybWFuY2UgYnVnIHRoYXQgY2hva2VkIG9uCisgIGEgbGFyZ2UgZmlsZSB3aXRoIG1hbnkgcmVwZWF0ZWQgY29udGVudHMuCisKKyogImdpdCByZXBhY2siIHVzZWQgdG8gZ3JhYiBvYmplY3RzIG91dCBvZiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcAorICBpbnRvIGEgbmV3IHBhY2suCisKKyogTWFueSB1bnNhZmUgY2FsbCB0byBzcHJpbnRmKCkgc3R5bGUgdmFyYXJncyBmdW5jdGlvbnMgYXJlIGNvcnJlY3RlZC4KKworKiBBbHNvIGNvbnRhaW5zIHF1aXRlIGEgZmV3IGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjAuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZWNlMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLjYudHh0CkBAIC0wLDAgKzEsMzMgQEAKK0dJVCB2MS42LjAuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSAxLjYuMC41CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZnNjayIgaGFkIGEgZGVlcCByZWN1cnNpb24gdGhhdCB3YXN0ZWQgc3RhY2sgc3BhY2UuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGFuZCAiZ2l0IGZhc3QtaW1wb3J0IiBjaG9rZWQgb24gYW4gb2xkIHN0eWxlCisgICBhbm5vdGF0ZWQgdGFnIHRoYXQgbGFjayB0aGUgdGFnZ2VyIGluZm9ybWF0aW9uLgorCisgKiAiZ2l0IG1lcmdldG9vbCAtLSBmaWxlIiBkaWQgbm90IGNvcnJlY3RseSBza2lwICItLSIgbWFya2VyIHRoYXQKKyAgIHNpZ25hbHMgdGhlIGVuZCBvZiBvcHRpb25zIGxpc3QuCisKKyAqICJnaXQgc2hvdyAkdGFnIiBzZWdmYXVsdGVkIHdoZW4gYW4gYW5ub3RhdGVkICR0YWcgcG9pbnRlZCBhdCBhCisgICBub25leGlzdGVudCBvYmplY3QuCisKKyAqICJnaXQgc2hvdyAyPmVycm9yIiB3aGVuIHRoZSBzdGFuZGFyZCBvdXRwdXQgaXMgYXV0b21hdGljYWxseSByZWRpcmVjdGVkCisgICB0byB0aGUgcGFnZXIgcmVkaXJlY3RlZCB0aGUgc3RhbmRhcmQgZXJyb3IgdG8gdGhlIHBhZ2VyIGFzIHdlbGw7IHRoZXJlCisgICB3YXMgbm8gbmVlZCB0by4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgbGlzdCBvZiBhZGRyZXNzZXMgd2hlbgorICAgdGhleSBoYWQgcXVvdGVkIGNvbW1hIChlLmcuICJMYXN0bmFtZSwgR2l2ZW5uYW1lIiA8bWFpbEBhZGRyZS5zcz4pLgorCisgKiBMb2dpYyB0byBkaXNjb3ZlciBicmFuY2ggYW5jZXN0cnkgaW4gImdpdCBzdm4iIHdhcyB1bnJlbGlhYmxlIHdoZW4KKyAgIHRoZSBwcm9jZXNzIHRvIGZldGNoIGhpc3Rvcnkgd2FzIGludGVycnVwdGVkLgorCisgKiBSZW1vdmVkIHN1cHBvcnQgZm9yIGFuIG9ic29sZXRlIGdpdHdlYiByZXF1ZXN0IFVSSSwgd2hvc2UKKyAgIGltcGxlbWVudGF0aW9uIHJhbiAiZ2l0IGRpZmYiIFBvcmNlbGFpbiwgaW5zdGVhZCBvZiB1c2luZyBwbHVtYmluZywKKyAgIHdoaWNoIHdvdWxkIGhhdmUgcnVuIGFuIGV4dGVybmFsIGRpZmYgY29tbWFuZCBzcGVjaWZpZWQgaW4gdGhlCisgICByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gYXMgdGhlIGdpdHdlYiB1c2VyLgorCitBbHNvIGNvbnRhaW5zIG51bWVyb3VzIGRvY3VtZW50YXRpb24gdHlwb2ZpeGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTdlZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMC50eHQKQEAgLTAsMCArMSwyNTggQEAKK0dJVCB2MS42LjAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VzZXIgdmlzaWJsZSBjaGFuZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIHRoZSBkZWZhdWx0IE1ha2VmaWxlIHNldHRpbmdzLCBtb3N0IG9mIHRoZSBwcm9ncmFtcyBhcmUgbm93CitpbnN0YWxsZWQgb3V0c2lkZSB5b3VyICRQQVRILCBleGNlcHQgZm9yICJnaXQiLCAiZ2l0ayIgYW5kCitzb21lIHNlcnZlciBzaWRlIHByb2dyYW1zIHRoYXQgbmVlZCB0byBiZSBhY2Nlc3NpYmxlIGZvciB0ZWNobmljYWwKK3JlYXNvbnMuICBJbnZva2luZyBhIGdpdCBzdWJjb21tYW5kIGFzICJnaXQteHl6enkiIGZyb20gdGhlIGNvbW1hbmQKK2xpbmUgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSBlYXJseSAyMDA2IChhbmQgb2ZmaWNpYWxseSBhbm5vdW5jZWQgaW4KKzEuNS40IHJlbGVhc2Ugbm90ZXMpOyB1c2Ugb2YgdGhlbSBmcm9tIHlvdXIgc2NyaXB0cyBhZnRlciBhZGRpbmcKK291dHB1dCBmcm9tICJnaXQgLS1leGVjLXBhdGgiIHRvIHRoZSAkUEFUSCBpcyBzdGlsbCBzdXBwb3J0ZWQgaW4gdGhpcworcmVsZWFzZSwgYnV0IHVzZXJzIGFyZSBhZ2FpbiBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIGFkanVzdCB0aGVpcgorc2NyaXB0cyB0byB1c2UgImdpdCB4eXp6eSIgZm9ybSwgYXMgd2Ugd2lsbCBzdG9wIGluc3RhbGxpbmcKKyJnaXQteHl6enkiIGhhcmRsaW5rcyBmb3IgYnVpbHQtaW4gY29tbWFuZHMgaW4gbGF0ZXIgcmVsZWFzZXMuCisKK0FuIGVhcmxpZXIgY2hhbmdlIHRvIHBhZ2UgImdpdCBzdGF0dXMiIG91dHB1dCB3YXMgb3ZlcndoZWxtaW5nbHkgdW5wb3B1bGFyCithbmQgaGFzIGJlZW4gcmV2ZXJ0ZWQuCisKK1NvdXJjZSBjaGFuZ2VzIG5lZWRlZCBmb3IgcG9ydGluZyB0byBNaW5HVyBlbnZpcm9ubWVudCBhcmUgbm93IGFsbCBpbiB0aGUKK21haW4gZ2l0LmdpdCBjb2RlYmFzZS4KKworQnkgZGVmYXVsdCwgcGFja2ZpbGVzIGNyZWF0ZWQgd2l0aCB0aGlzIHZlcnNpb24gdXNlcyBkZWx0YS1iYXNlLW9mZnNldAorZW5jb2RpbmcgaW50cm9kdWNlZCBpbiB2MS40LjQuICBQYWNrIGlkeCBmaWxlcyBhcmUgdXNpbmcgdmVyc2lvbiAyIHRoYXQKK2FsbG93cyBsYXJnZXIgcGFja3MgYW5kIGFkZGVkIHJvYnVzdG5lc3MgdGhhbmtzIHRvIGl0cyBDUkMgY2hlY2tpbmcsCitpbnRyb2R1Y2VkIGluIHYxLjUuMiBhbmQgdjEuNC40LjUuICBJZiB5b3Ugd2FudCB0byBrZWVwIHlvdXIgcmVwb3NpdG9yaWVzCitiYWNrd2FyZHMgY29tcGF0aWJsZSBwYXN0IHRoZXNlIHZlcnNpb25zLCBzZXQgcmVwYWNrLnVzZURlbHRhQmFzZU9mZnNldAordG8gZmFsc2Ugb3IgcGFjay5pbmRleFZlcnNpb24gdG8gMSwgcmVzcGVjdGl2ZWx5LgorCitXZSB1c2VkIHRvIHByZXZlbnQgc2FtcGxlIGhvb2sgc2NyaXB0cyBzaGlwcGVkIGluIHRlbXBsYXRlcy8gZnJvbQordHJpZ2dlcmluZyBieSBkZWZhdWx0IGJ5IHJlbHlpbmcgb24gdGhlIGZhY3QgdGhhdCB3ZSBpbnN0YWxsIHRoZW0gYXMKK3VuZXhlY3V0YWJsZSwgYnV0IG9uIHNvbWUgZmlsZXN5c3RlbXMsIHRoaXMgYXBwcm9hY2ggZG9lcyBub3Qgd29yay4KK1RoZXkgYXJlIG5vdyBzaGlwcGVkIHdpdGggIi5zYW1wbGUiIHN1ZmZpeC4gIElmIHlvdSB3YW50IHRvIGFjdGl2YXRlCithbnkgb2YgdGhlc2Ugc2FtcGxlcyBhcy1pcywgcmVuYW1lIHRoZW0gdG8gZHJvcCB0aGUgIi5zYW1wbGUiIHN1ZmZpeCwKK2luc3RlYWQgb2YgcnVubmluZyAiY2htb2QgK3giIG9uIHRoZW0uICBGb3IgZXhhbXBsZSwgeW91IGNhbiByZW5hbWUKK2hvb2tzL3Bvc3QtdXBkYXRlLnNhbXBsZSB0byBob29rcy9wb3N0LXVwZGF0ZSB0byBlbmFibGUgdGhlIHNhbXBsZQoraG9vayB0aGF0IHJ1bnMgdXBkYXRlLXNlcnZlci1pbmZvLCBpbiBvcmRlciB0byBtYWtlIHJlcG9zaXRvcmllcworZnJpZW5kbHkgdG8gZHVtYiBwcm90b2NvbHMgKGkuZS4gSFRUUCkuCisKK0dJVF9DT05GSUcsIHdoaWNoIHdhcyBvbmx5IGRvY3VtZW50ZWQgYXMgYWZmZWN0aW5nICJnaXQgY29uZmlnIiwgYnV0CithY3R1YWxseSBhZmZlY3RlZCBhbGwgZ2l0IGNvbW1hbmRzLCBub3cgb25seSBhZmZlY3RzICJnaXQgY29uZmlnIi4KK0dJVF9MT0NBTF9DT05GSUcsIGFsc28gb25seSBkb2N1bWVudGVkIGFzIGFmZmVjdGluZyAiZ2l0IGNvbmZpZyIgYW5kCitub3QgZGlmZmVyZW50IGZyb20gR0lUX0NPTkZJRyBpbiBhIHVzZWZ1bCB3YXksIGlzIHJlbW92ZWQuCisKK1RoZSAiLmRvdGVzdCIgdGVtcG9yYXJ5IGFyZWEgImdpdCBhbSIgYW5kICJnaXQgcmViYXNlIiB1c2UgaXMgbm93IG1vdmVkCitpbnNpZGUgdGhlICRHSVRfRElSLCB0byBhdm9pZCBtaXN0YWtlcyBvZiBhZGRpbmcgaXQgdG8gdGhlIHByb2plY3QgYnkKK2FjY2lkZW50LgorCitBbiBhbmNpZW50IG1lcmdlIHN0cmF0ZWd5ICJzdHVwaWQiIGhhcyBiZWVuIHJlbW92ZWQuCisKKworVXBkYXRlcyBzaW5jZSB2MS41LjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisqIGdpdC1wNCBpbiBjb250cmliIGxlYXJuZWQgImFsbG93U3VibWl0IiBjb25maWd1cmF0aW9uIHRvIGNvbnRyb2wgb24KKyAgd2hpY2ggYnJhbmNoIHRvIGFsbG93ICJzdWJtaXQiIHN1YmNvbW1hbmQuCisKKyogZ2l0LWd1aSBsZWFybmVkIHRvIHN0YWdlIGNoYW5nZXMgcGVyLWxpbmUuCisKKyhwb3J0YWJpbGl0eSkKKworKiBDaGFuZ2VzIGZvciBNaW5HVyBwb3J0IGhhdmUgYmVlbiBtZXJnZWQsIHRoYW5rcyB0byBKb2hhbm5lcyBTaXh0IGFuZAorICBnYW5ncy4KKworKiBTYW1wbGUgaG9vayBzY3JpcHRzIHNoaXBwZWQgaW4gdGVtcGxhdGVzLyBhcmUgbm93IHN1ZmZpeGVkIHdpdGgKKyAgKi5zYW1wbGUuCisKKyogcGVybCdzIGluLXBsYWNlIGVkaXQgKC1pKSBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aG91dCBiYWNrdXAgZmlsZXMgb24gV2luZG93czsKKyAgc29tZSB0ZXN0cyBhcmUgcmV3cml0dGVuIHRvIGNvcGUgd2l0aCB0aGlzLgorCisoZG9jdW1lbnRhdGlvbikKKworKiBVcGRhdGVkIGhvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUKKworKiBHb3QgcmlkIG9mIHVzYWdlIG9mICJnaXQtZm9vIiBmcm9tIHRoZSB0dXRvcmlhbCBhbmQgbWFkZSB0eXBvZ3JhcGh5CisgIG1vcmUgY29uc2lzdGVudC4KKworKiBEaXNhbWJpZ3VhdGluZyAiLS0iIGJldHdlZW4gcmV2cyBhbmQgcGF0aHMgaXMgZmluYWxseSBkb2N1bWVudGVkLgorCisocGVyZm9ybWFuY2UsIHJvYnVzdG5lc3MsIHNhbml0eSBldGMuKQorCisqIGluZGV4LXBhY2sgdXNlZCB0b28gbXVjaCBtZW1vcnkgd2hlbiBkZWFsaW5nIHdpdGggYSBkZWVwIGRlbHRhIGNoYWluLgorICBUaGlzIGhhcyBiZWVuIG9wdGltaXplZC4KKworKiByZWR1Y2VkIGV4Y2Vzc2l2ZSBpbmxpbmluZyB0byBzaHJpbmsgc2l6ZSBvZiB0aGUgImdpdCIgYmluYXJ5LgorCisqIHZlcmlmeS1wYWNrIGNoZWNrcyB0aGUgb2JqZWN0IENSQyB3aGVuIHVzaW5nIHZlcnNpb24gMiBpZHggZmlsZXMuCisKKyogV2hlbiBhbiBvYmplY3QgaXMgY29ycnVwdCBpbiBhIHBhY2ssIHRoZSBvYmplY3QgYmVjYW1lIHVudXNhYmxlIGV2ZW4KKyAgd2hlbiB0aGUgc2FtZSBvYmplY3QgaXMgYXZhaWxhYmxlIGluIGEgbG9vc2UgZm9ybSwgIFdlIG5vdyB0cnkgaGFyZGVyIHRvCisgIGZhbGwgYmFjayB0byB0aGVzZSByZWR1bmRhbnQgb2JqZWN0cyB3aGVuIGFibGUuICBJbiBwYXJ0aWN1bGFyLCAiZ2l0CisgIHJlcGFjayAtYSAtZiIgY2FuIGJlIHVzZWQgdG8gZml4IHN1Y2ggYSBjb3JydXB0aW9uIGFzIGxvbmcgYXMgbmVjZXNzYXJ5CisgIG9iamVjdHMgYXJlIGF2YWlsYWJsZS4KKworKiBQZXJmb3JtYW5jZSBvZiAiZ2l0LWJsYW1lIC1DIC1DIiBvcGVyYXRpb24gaXMgdmFzdGx5IGltcHJvdmVkLgorCisqIGdpdC1jbG9uZSBkb2VzIG5vdCBjcmVhdGUgcmVmcyBpbiBsb29zZSBmb3JtIGFueW1vcmUgKGl0IGJlaGF2ZXMgYXMKKyAgaWYgeW91IGltbWVkaWF0ZWx5IHJhbiBnaXQtcGFjay1yZWZzIGFmdGVyIGNsb25pbmcpLiAgVGhpcyB3aWxsIGhlbHAKKyAgcmVwb3NpdG9yaWVzIHdpdGggaW5zYW5lbHkgbGFyZ2UgbnVtYmVyIG9mIHJlZnMuCisKKyogY29yZS5mc3luY29iamVjdGZpbGVzIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGxvb3NlCisgIG9iamVjdHMgY3JlYXRlZCB3aWxsIGJlIGZzeW5jJ2VkICh0aGlzIGlzIG9ubHkgdXNlZnVsIG9uIGZpbGVzeXN0ZW1zCisgIHRoYXQgZG9lcyBub3Qgb3JkZXIgZGF0YSB3cml0ZXMgcHJvcGVybHkpLgorCisqICJnaXQgY29tbWl0LXRyZWUiIHBsdW1iaW5nIGNhbiBtYWtlIE9jdG9wdXMgd2l0aCBtb3JlIHRoYW4gMTYgcGFyZW50cy4KKyAgImdpdCBjb21taXQiIGhhcyBiZWVuIGNhcGFibGUgb2YgdGhpcyBmb3IgcXVpdGUgc29tZSB0aW1lLgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyogZXZlbiBtb3JlIGRvY3VtZW50YXRpb24gcGFnZXMgYXJlIG5vdyBhY2Nlc3NpYmxlIHZpYSAibWFuIiBhbmQgImdpdCBoZWxwIi4KKworKiBBIG5ldyBlbnZpcm9ubWVudCB2YXJpYWJsZSBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyBjYW4gYmUgdXNlZCB0byBzdG9wCisgIHRoZSBkaXNjb3ZlcnkgcHJvY2VzcyBvZiB0aGUgdG9wbGV2ZWwgb2Ygd29ya2luZyB0cmVlOyB0aGlzIG1heSBiZSB1c2VmdWwKKyAgd2hlbiB5b3UgYXJlIHdvcmtpbmcgaW4gYSBzbG93IG5ldHdvcmsgZGlzayBhbmQgYXJlIG91dHNpZGUgYW55IHdvcmtpbmcgdHJlZSwKKyAgYXMgYmFzaC1jb21wbGV0aW9uIGFuZCAiZ2l0IGhlbHAiIG1heSBzdGlsbCBuZWVkIHRvIHJ1biBpbiB0aGVzZSBwbGFjZXMuCisKKyogQnkgZGVmYXVsdCwgc3Rhc2ggZW50cmllcyBuZXZlciBleHBpcmUuICBTZXQgcmVmbG9nZXhwaXJlIGluIFtnYworICAicmVmcy9zdGFzaCJdIHRvIGEgcmVhc29uYWJsZSB2YWx1ZSB0byBnZXQgdHJhZGl0aW9uYWwgYXV0by1leHBpcmF0aW9uCisgIGJlaGF2aW91ciBiYWNrCisKKyogTG9uZ3N0YW5kaW5nIGxhdGVuY3kgaXNzdWUgd2l0aCBiYXNoIGNvbXBsZXRpb24gc2NyaXB0IGhhcyBiZWVuCisgIGFkZHJlc3NlZC4gIFRoaXMgd2lsbCBuZWVkIHRvIGJlIGJhY2ttZXJnZWQgdG8gJ21haW50JyBsYXRlci4KKworKiBwYWdlci48Y21kPiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIHRoZQorICBkZWZhdWx0IHBhZ2luZyBiZWhhdmlvdXIgcGVyIGNvbW1hbmQuCisKKyogImdpdC1hZGQgLWkiIGhhcyBhIG5ldyBhY3Rpb24gJ2UvZGl0JyB0byBhbGxvdyB5b3UgZWRpdCB0aGUgcGF0Y2ggaHVuaworICBtYW51YWxseS4KKworKiBnaXQtYW0gcmVjb3JkcyB0aGUgb3JpZ2luYWwgdGlwIG9mIHRoZSBicmFuY2ggaW4gT1JJR19IRUFEIGJlZm9yZSBpdAorICBzdGFydHMgYXBwbHlpbmcgcGF0Y2hlcy4KKworKiBnaXQtYXBwbHkgY2FuIGhhbmRsZSBhIHBhdGNoIHRoYXQgdG91Y2hlcyB0aGUgc2FtZSBwYXRoIG1vcmUgdGhhbiBvbmNlCisgIG11Y2ggYmV0dGVyIHRoYW4gYmVmb3JlLgorCisqIGdpdC1hcHBseSBjYW4gYmUgdG9sZCBub3QgdG8gdHJ1c3QgdGhlIGxpbmUgY291bnRzIHJlY29yZGVkIGluIHRoZSBpbnB1dAorICBwYXRjaCBidXQgcmVjb3VudCwgd2l0aCB0aGUgbmV3IC0tcmVjb3VudCBvcHRpb24uCisKKyogZ2l0LWFwcGx5IGNhbiBiZSB0b2xkIHRvIGFwcGx5IGEgcGF0Y2ggdG8gYSBwYXRoIGRlZXBlciB0aGFuIHdoYXQgdGhlCisgIHBhdGNoIHJlY29yZHMgd2l0aCAtLWRpcmVjdG9yeSBvcHRpb24uCisKKyogZ2l0LWFyY2hpdmUgY2FuIGJlIHRvbGQgdG8gb21pdCBjZXJ0YWluIHBhdGhzIGZyb20gaXRzIG91dHB1dCB1c2luZworICBleHBvcnQtaWdub3JlIGF0dHJpYnV0ZXMuCisKKyogZ2l0LWFyY2hpdmUgdXNlcyB0aGUgemxpYiBkZWZhdWx0IGNvbXByZXNzaW9uIGxldmVsIHdoZW4gY3JlYXRpbmcKKyAgemlwIGFyY2hpdmUuCisKKyogZ2l0LWFyY2hpdmUncyBjb21tYW5kIGxpbmUgb3B0aW9ucyAtLWV4ZWMgYW5kIC0tcmVtb3RlIGNhbiB0YWtlIHRoZWlyCisgIHBhcmFtZXRlcnMgYXMgc2VwYXJhdGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cywgc2ltaWxhciB0byBvdGhlciBjb21tYW5kcy4KKyAgSU9XLCBib3RoICItLWV4ZWM9cGF0aCIgYW5kICItLWV4ZWMgcGF0aCIgYXJlIG5vdyBzdXBwb3J0ZWQuCisKKyogV2l0aCAtdiBvcHRpb24sIGdpdC1icmFuY2ggZGVzY3JpYmVzIHRoZSByZW1vdGUgdHJhY2tpbmcgc3RhdGlzdGljcworICBzaW1pbGFyIHRvIHRoZSB3YXkgZ2l0LWNoZWNrb3V0IHJlcG9ydHMgYnkgaG93IG1hbnkgY29tbWl0cyB5b3VyIGJyYW5jaAorICBpcyBhaGVhZC9iZWhpbmQuCisKKyogZ2l0LWJyYW5jaCdzIC0tY29udGFpbnMgb3B0aW9uIHVzZWQgdG8gYWx3YXlzIHJlcXVpcmUgYSBjb21taXQgcGFyYW1ldGVyCisgIHRvIGxpbWl0IHRoZSBicmFuY2hlcyB3aXRoOyBpdCBub3cgZGVmYXVsdHMgdG8gbGlzdCBicmFuY2hlcyB0aGF0CisgIGNvbnRhaW5zIEhFQUQgaWYgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZC4KKworKiBnaXQtYnJhbmNoJ3MgLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbiB1c2VkIHRvIGFsd2F5cyBsaW1pdCB0aGUKKyAgYnJhbmNoZXMgcmVsYXRpdmUgdG8gdGhlIEhFQUQsIGJ1dCB0aGV5IGNhbiBub3cgdGFrZSBhbiBvcHRpb25hbCBjb21taXQKKyAgYXJndW1lbnQgdGhhdCBpcyB1c2VkIGluIHBsYWNlIG9mIEhFQUQuCisKKyogZ2l0LWJ1bmRsZSBjYW4gcmVhZCB0aGUgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCisqIGdpdC1jaGVycnktcGljayBjYW4gcmVwbGF5IGEgcm9vdCBjb21taXQgbm93LgorCisqIGdpdC1jbG9uZSBjYW4gY2xvbmUgZnJvbSBhIHJlbW90ZSB3aG9zZSBVUkwgd291bGQgYmUgcmV3cml0dGVuIGJ5CisgIGNvbmZpZ3VyYXRpb24gc3RvcmVkIGluICRIT01FLy5naXRjb25maWcgbm93LgorCisqICJnaXQtY2xvbmUgLS1taXJyb3IiIGlzIGEgaGFuZHkgd2F5IHRvIHNldCB1cCBhIGJhcmUgbWlycm9yIHJlcG9zaXRvcnkuCisKKyogZ2l0LWN2c3NlcnZlciBsZWFybmVkIHRvIHJlc3BvbmQgdG8gImN2cyBjbyAtYyIuCisKKyogZ2l0LWRpZmYgLS1jaGVjayBub3cgY2hlY2tzIGxlZnRvdmVyIG1lcmdlIGNvbmZsaWN0IG1hcmtlcnMuCisKKyogImdpdC1kaWZmIC1wIiBsZWFybmVkIHRvIGdyYWIgYSBiZXR0ZXIgaHVuayBoZWFkZXIgbGluZXMgaW4KKyAgQmliVGV4LCBQYXNjYWwvRGVscGhpLCBhbmQgUnVieSBmaWxlcyBhbmQgYWxzbyBwYXlzIGF0dGVudGlvbiB0bworICBjaGFwdGVyIGFuZCBwYXJ0IGJvdW5kYXJ5IGluIFRlWCBkb2N1bWVudHMuCisKKyogV2hlbiByZW1vdGUgc2lkZSB1c2VkIHRvIGhhdmUgYnJhbmNoICdmb28nIGFuZCBnaXQtZmV0Y2ggZmluZHMgdGhhdCBub3cKKyAgaXQgaGFzIGJyYW5jaCAnZm9vL2JhcicsIGl0IHJlZnVzZXMgdG8gbG9zZSB0aGUgZXhpc3RpbmcgcmVtb3RlIHRyYWNraW5nCisgIGJyYW5jaCBhbmQgaXRzIHJlZmxvZy4gIFRoZSBlcnJvciBtZXNzYWdlIGhhcyBiZWVuIGltcHJvdmVkIHRvIHN1Z2dlc3QKKyAgcHJ1bmluZyB0aGUgcmVtb3RlIGlmIHRoZSB1c2VyIHdhbnRzIHRvIHByb2NlZWQgYW5kIGdldCB0aGUgbGF0ZXN0IHNldAorICBvZiBicmFuY2hlcyBmcm9tIHRoZSByZW1vdGUsIGluY2x1ZGluZyBzdWNoICdmb28vYmFyJy4KKworKiBmYXN0LWV4cG9ydCBsZWFybmVkIHRvIGV4cG9ydCBhbmQgaW1wb3J0IG1hcmtzIGZpbGU7IHRoaXMgY2FuIGJlIHVzZWQgdG8KKyAgaW50ZXJmYWNlIHdpdGggZmFzdC1pbXBvcnQgaW5jcmVtZW50YWxseS4KKworKiBmYXN0LWltcG9ydCBhbmQgZmFzdC1leHBvcnQgbGVhcm5lZCB0byBleHBvcnQgYW5kIGltcG9ydCBnaXRsaW5rcy4KKworKiAiZ2l0ayIgbGVmdCBiYWNrZ3JvdW5kIHByb2Nlc3MgYmVoaW5kIGFmdGVyIGJlaW5nIGFza2VkIHRvIGRpZyB2ZXJ5IGRlZXAKKyAgaGlzdG9yeSBhbmQgdGhlIHVzZXIga2lsbGVkIHRoZSBVSTsgdGhlIHByb2Nlc3MgaXMga2lsbGVkIHdoZW4gdGhlIFVJIGdvZXMKKyAgYXdheSBub3cuCisKKyogZ2l0LXJlYmFzZSByZWNvcmRzIHRoZSBvcmlnaW5hbCB0aXAgb2YgYnJhbmNoIGluIE9SSUdfSEVBRCBiZWZvcmUgaXQgaXMKKyAgcmV3b3VuZC4KKworKiAiZ2l0IHJlcmVyZSIgY2FuIGJlIHRvbGQgdG8gdXBkYXRlIHRoZSBpbmRleCB3aXRoIGF1dG8tcmV1c2VkIHJlc29sdXRpb24KKyAgd2l0aCByZXJlcmUuYXV0b3VwZGF0ZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisqIGdpdC1yZXYtcGFyc2UgbGVhcm5lZCAkY29tbWl0XiEgYW5kICRjb21taXReQCBub3RhdGlvbnMgdXNlZCBpbiAibG9nIgorICBmYW1pbHkuICBUaGVzZSBub3RhdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiBnaXRrIGFzIHdlbGwsIGJlY2F1c2UgdGhlIGdpdGsKKyAgY29tbWFuZCBpbnRlcm5hbGx5IHVzZXMgcmV2LXBhcnNlIHRvIGludGVycHJldCBpdHMgYXJndW1lbnRzLgorCisqIGdpdC1yZXYtbGlzdCBsZWFybmVkIC0tY2hpbGRyZW4gb3B0aW9uIHRvIHNob3cgY2hpbGQgY29tbWl0cyBpdAorICBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIHRyYXZlcnNhbCwgaW5zdGVhZCBvZiBzaG93aW5nIHBhcmVudCBjb21taXRzLgorCisqIGdpdC1zZW5kLW1haWwgY2FuIHRhbGsgbm90IGp1c3Qgb3ZlciBTU0wgYnV0IG92ZXIgVExTIG5vdy4KKworKiBnaXQtc2hvcnRsb2cgaG9ub3JzIGN1c3RvbSBvdXRwdXQgZm9ybWF0IHNwZWNpZmllZCB3aXRoICItLXByZXR0eT1mb3JtYXQ6Ii4KKworKiAiZ2l0LXN0YXNoIHNhdmUiIGxlYXJuZWQgLS1rZWVwLWluZGV4IG9wdGlvbi4gIFRoaXMgbGV0cyB5b3Ugc3Rhc2ggYXdheSB0aGUKKyAgbG9jYWwgY2hhbmdlcyBhbmQgYnJpbmcgdGhlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleCB0byB5b3VyIHdvcmtpbmcKKyAgdHJlZSBmb3IgZXhhbWluYXRpb24gYW5kIHRlc3RpbmcuCisKKyogZ2l0LXN0YXNoIGFsc28gbGVhcm5lZCBicmFuY2ggc3ViY29tbWFuZCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIG91dCBvZgorICBzdGFzaGVkIGNoYW5nZXMuCisKKyogZ2l0LXN0YXR1cyBnaXZlcyB0aGUgcmVtb3RlIHRyYWNraW5nIHN0YXRpc3RpY3Mgc2ltaWxhciB0byB0aGUgd2F5CisgIGdpdC1jaGVja291dCByZXBvcnRzIGJ5IGhvdyBtYW55IGNvbW1pdHMgeW91ciBicmFuY2ggaXMgYWhlYWQvYmVoaW5kLgorCisqICJnaXQtc3ZuIGRjb21taXQiIGlzIG5vdyBhd2FyZSBvZiBhdXRvLXByb3BzIHNldHRpbmcgdGhlIHN1YnZlcnNpb24gdXNlcgorICBoYXMuCisKKyogWW91IGNhbiB0ZWxsICJnaXQgc3RhdHVzIC11IiB0byBldmVuIG1vcmUgYWdncmVzc2l2ZWx5IG9taXQgY2hlY2tpbmcKKyAgdW50cmFja2VkIGZpbGVzIHdpdGggLS11bnRyYWNrZWQtZmlsZXM9bm8uCisKKyogT3JpZ2luYWwgU0hBLTEgdmFsdWUgZm9yICJ1cGRhdGUtcmVmIC1kIiBpcyBvcHRpb25hbCBub3cuCisKKyogRXJyb3IgY29kZXMgZnJvbSBnaXR3ZWIgYXJlIG1hZGUgbW9yZSBkZXNjcmlwdGl2ZSB3aGVyZSBwb3NzaWJsZSwgcmF0aGVyCisgIHRoYW4gIjQwMyBmb3JiaWRkZW4iIGFzIHdlIHVzZWQgdG8gaXNzdWUgZXZlcnl3aGVyZS4KKworKGludGVybmFsKQorCisqIGdpdC1tZXJnZSBoYXMgYmVlbiByZWltcGxlbWVudGVkIGluIEMuCisKKworRml4ZXMgc2luY2UgdjEuNS42CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS41LjYgbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbgordGhpcyByZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisgKiBnaXQtY2xvbmUgaWdub3JlZCBpdHMgLXUgb3B0aW9uOyB0aGUgZml4IG5lZWRzIHRvIGJlIGJhY2twb3J0ZWQgdG8KKyAgICdtYWludCc7CisKKyAqIGdpdC1tdiB1c2VkIHRvIGxvc2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gY2hhbmdlcyB0aGF0IGFyZSBzdGFnZWQKKyAgIGFuZCB0aGF0IGFyZSBvbmx5IGluIHRoZSB3b3JraW5nIHRyZWUsIGJ5IHN0YWdpbmcgYm90aCBpbiB0aGUgaW5kZXgKKyAgIGFmdGVyIG1vdmluZyBzdWNoIGEgcGF0aC4KKworICogImdpdC1yZWJhc2UgLWkgLXAiIHJld3JvdGUgdGhlIHBhcmVudHMgdG8gd3Jvbmcgb25lcyB3aGVuIGFtZW5kaW5nCisgICAoZWl0aGVyIGVkaXQgb3Igc3F1YXNoKSB3YXMgaW52b2x2ZWQsIGFuZCBkaWQgbm90IHdvcmsgY29ycmVjdGx5CisgICB3aGVuIGZhc3QgZm9yd2FyZGluZy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1OTRiYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMS50eHQKQEAgLTAsMCArMSw1OSBAQAorR0lUIHYxLjYuMS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBhZGQgZnJvdHovbml0Zm9sIiB3aGVuICJmcm90eiIgaXMgYSBzdWJtb2R1bGUgc2hvdWxkIGhhdmUgZXJyb3JlZAorICBvdXQsIGJ1dCBpdCBkaWRuJ3QuCisKKyogImdpdCBhcHBseSIgdG9vayBmaWxlIG1vZGVzIGZyb20gdGhlIHBhdGNoIHRleHQgYW5kIHVwZGF0ZWQgdGhlIG1vZGUKKyAgYml0cyBvZiB0aGUgdGFyZ2V0IHRyZWUgZXZlbiB3aGVuIHRoZSBwYXRjaCB3YXMgbm90IGFib3V0IG1vZGUgY2hhbmdlcy4KKworKiAiZ2l0IGJpc2VjdCB2aWV3IiBvbiBDeWd3aW4gZGlkIG5vdCBsYXVuY2ggZ2l0aworCisqICJnaXQgY2hlY2tvdXQgJHRyZWUiIGRpZCBub3QgdHJpZ2dlciBhbiBlcnJvci4KKworKiAiZ2l0IGNvbW1pdCIgdHJpZWQgdG8gcmVtb3ZlIENPTU1JVF9FRElUTVNHIGZyb20gdGhlIHdvcmsgdHJlZSBieSBtaXN0YWtlLgorCisqICJnaXQgZGVzY3JpYmUgLS1hbGwiIGNvbXBsYWluZWQgd2hlbiBhIGNvbW1pdCBpcyBkZXNjcmliZWQgd2l0aCBhIHRhZywKKyAgd2hpY2ggd2FzIG5vbnNlbnNlLgorCisqICJnaXQgZGlmZiAtLW5vLWluZGV4IC0tIiBkaWQgbm90IHRyaWdnZXIgbm8taW5kZXggKGFrYSAidXNlIGdpdC1kaWZmIGFzCisgIGEgcmVwbGFjZW1lbnQgb2YgZGlmZiBvbiB1bnRyYWNrZWQgZmlsZXMiKSBiZWhhdmlvdXIuCisKKyogImdpdCBmb3JtYXQtcGF0Y2ggLTEgSEVBRCIgb24gYSByb290IGNvbW1pdCBmYWlsZWQgdG8gcHJvZHVjZSBwYXRjaAorICB0ZXh0LgorCisqICJnaXQgZnNjayBicmFuY2giIGRpZCBub3Qgd29yayBhcyBhZHZlcnRpc2VkOyBpbnN0ZWFkIGl0IGJlaGF2ZWQgdGhlIHNhbWUKKyAgd2F5IGFzICJnaXQgZnNjayIuCisKKyogImdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVzIiBkaWQgbm90IGhhbmRsZSBhIG11bHRpLWxpbmUgc3ViamVjdCB0aGUKKyAgc2FtZSB3YXkgYXMgYnVpbHQtaW4gbG9nIGxpc3RlcnMgKGkuZS4gc2hvcnRsb2csIC0tcHJldHR5PW9uZWxpbmUsIGV0Yy4pCisKKyogImdpdCBkYWVtb24iLCBhbmQgImdpdCBtZXJnZS1maWxlIiBhcmUgbW9yZSBjYXJlZnVsIHdoZW4gZnJlb3BlbiBmYWlscworICBhbmQgYmFyZiwgaW5zdGVhZCBvZiBnb2luZyBvbiBhbmQgd3JpdGluZyB0byB1bm9wZW5lZCBmaWxlaGFuZGxlLgorCisqICJnaXQgaHR0cC1wdXNoIiBkaWQgbm90IGxpa2Ugc29tZSBSRkMgNDkxOCBjb21wbGlhbnQgREFWIHNlcnZlcgorICByZXNwb25zZXMuCisKKyogImdpdCBtZXJnZSAtcyByZWN1cnNpdmUiIG1pc3Rha2VubHkgb3ZlcndyaXR0ZW4gYW4gdW50cmFja2VkIGZpbGUgaW4gdGhlCisgIHdvcmsgdHJlZSB1cG9uIGRlbGV0ZS9tb2RpZnkgY29uZmxpY3QuCisKKyogImdpdCBtZXJnZSAtcyByZWN1cnNpdmUiIGRpZG4ndCBsZWF2ZSB0aGUgaW5kZXggdW5tZXJnZWQgZm9yIGVudHJpZXMgd2l0aAorICByZW5hbWUvZGVsZXRlIGNvbmZsaWN0cy4KKworKiAiZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSIgY2xvYmJlcmVkIHVudHJhY2tlZCBmaWxlcyBpbiB0aGUgd29yayB0cmVlLgorCisqICJnaXQgbXYgLWsiIHdpdGggbW9yZSB0aGFuIG9uZSBlcnJvbmVvdXMgcGF0aHMgbWlzYmVoYXZlZC4KKworKiAiZ2l0IHJlYWQtdHJlZSAtbSAtdSIgaGVuY2UgYnJhbmNoIHN3aXRjaGluZyBpbmNvcnJlY3RseSBsb3N0IGEKKyAgc3ViZGlyZWN0b3J5IGluIHJhcmUgY2FzZXMuCisKKyogImdpdCByZWJhc2UgLWkiIGlzc3VlZCBhbiB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlIHVwb24gYSB1c2VyIGVycm9yIG9mCisgIG1hcmtpbmcgdGhlIGZpcnN0IGNvbW1pdCB0byBiZSAic3F1YXNoImVkLgorCisqICJnaXQgc2hvcnRsb2ciIGRpZCBub3QgZm9ybWF0IGEgY29tbWl0IG1lc3NhZ2Ugd2l0aCBtdWx0aS1saW5lCisgIHN1YmplY3QgY29ycmVjdGx5LgorCitNYW55IGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzdjYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjIudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0dJVCB2MS42LjEuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjEuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgbG9naWMgZm9yIHJlbmFtZSBkZXRlY3Rpb24gaW4gaW50ZXJuYWwgZGlmZiB1c2VkIGJ5IGNvbW1hbmRzIGxpa2UKKyAgImdpdCBkaWZmIiBhbmQgImdpdCBibGFtZSIgaGFzIGJlZW4gb3B0aW1pemVkIHRvIGF2b2lkIGxvYWRpbmcgdGhlIHNhbWUKKyAgYmxvYiByZXBlYXRlZGx5LgorCisqIFdlIGRpZCBub3QgYWxsb3cgd3JpdGluZyBvdXQgYSBibG9iIHRoYXQgaXMgbGFyZ2VyIHRoYW4gMkdCIGZvciBubyBnb29kCisgIHJlYXNvbi4KKworKiAiZ2l0IGZvcm1hdC1wYXRjaCAtbyAkZGlyIiwgd2hlbiAkZGlyIGlzIGEgcmVsYXRpdmUgZGlyZWN0b3J5LCB1c2VkIGl0CisgIGFzIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSB3b3JrIHRyZWUsIG5vdCByZWxhdGl2ZSB0byB0aGUgY3VycmVudAorICBkaXJlY3RvcnkuCisKKyogdjEuNi4xIGludHJvZHVjZWQgYW4gb3B0aW1pemF0aW9uIGZvciAiZ2l0IHB1c2giIGludG8gYSByZXBvc2l0b3J5IChBKQorICB0aGF0IGJvcnJvd3MgaXRzIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkgKEIpIHRvIGF2b2lkIHNlbmRpbmcKKyAgb2JqZWN0cyB0aGF0IGFyZSBhdmFpbGFibGUgaW4gcmVwb3NpdG9yeSBCLCB3aGVuIHRoZXkgYXJlIG5vdCB5ZXQgdXNlZAorICBieSByZXBvc2l0b3J5IEEuICBIb3dldmVyIHRoZSBjb2RlIG9uIHRoZSAiZ2l0IHB1c2giIHNlbmRlciBzaWRlIHdhcworICBidWdneSBhbmQgZGlkIG5vdCB3b3JrIHdoZW4gcmVwb3NpdG9yeSBCIGhhZCBuZXcgb2JqZWN0cyB0aGF0IGFyZSBub3QKKyAga25vd24gYnkgdGhlIHNlbmRlci4gIFRoaXMgY2F1c2VkIHB1c2hpbmcgaW50byBhICJmb3JrZWQiIHJlcG9zaXRvcnkKKyAgc2VydmVkIGJ5IHYxLjYuMSBzb2Z0d2FyZSB1c2luZyAiZ2l0IHB1c2giIGZyb20gdjEuNi4xIHNvbWV0aW1lcyBkaWQgbm90CisgIHdvcmsuICBUaGUgYnVnIHdhcyBwdXJlbHkgb24gdGhlICJnaXQgcHVzaCIgc2VuZGVyIHNpZGUsIGFuZCBoYXMgYmVlbgorICBjb3JyZWN0ZWQuCisKKyogImdpdCBzdGF0dXMgLXYiIGRpZCBub3QgcGFpbnQgaXRzIGRpZmYgb3V0cHV0IGluIGNvbG91ciBldmVuIHdoZW4KKyAgY29sb3IudWkgY29uZmlndXJhdGlvbiB3YXMgc2V0LgorCisqICJnaXQgbHMtdHJlZSIgbGVhcm5lZCAtLWZ1bGwtdHJlZSBvcHRpb24gdG8gaGVscCBQb3JjZWxhaW4gc2NyaXB0cyB0aGF0CisgIHdhbnQgdG8gYWx3YXlzIHNlZSB0aGUgZnVsbCBwYXRoIHJlZ2FyZGxlc3Mgb2YgdGhlIGN1cnJlbnQgd29ya2luZworICBkaXJlY3RvcnkuCisKKyogImdpdCBncmVwIiBpbmNvcnJlY3RseSBzZWFyY2hlZCBpbiB3b3JrIHRyZWUgcGF0aHMgZXZlbiB3aGVuIHRoZXkgYXJlCisgIG1hcmtlZCBhcyBhc3N1bWUtdW5jaGFuZ2VkLiAgSXQgbm93IHNlYXJjaGVzIGluIHRoZSBpbmRleCBlbnRyaWVzLgorCisqICJnaXQgZ2MiIHdpdGggbm8gZ3JhY2UgcGVyaW9kIG5lZWRsZXNzbHkgZWplY3RlZCBwYWNrZWQgYnV0IHVucmVhY2hhYmxlCisgIG9iamVjdHMgaW4gdGhlaXIgbG9vc2UgZm9ybSwgb25seSB0byBkZWxldGUgdGhlbSByaWdodCBhd2F5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QwOGQ4MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEuMy50eHQKQEAgLTAsMCArMSwyOCBAQAorR0lUIHYxLjYuMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgZGlmZiAtLWJpbmFyeSB8IGdpdCBhcHBseSIgcGlwZWxpbmUgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbgorICBhIGJpbmFyeSBibG9iIGlzIGNoYW5nZWQgdG8gYSBzeW1ib2xpYyBsaW5rLgorCisqIFNvbWUgY29tYmluYXRpb25zIG9mIC1iLy13Ly0taWdub3JlLXNwYWNlLWF0LWVvbCB0byAiZ2l0IGRpZmYiIGRpZAorICBub3Qgd29yayBhcyBleHBlY3RlZC4KKworKiAiZ2l0IGdyZXAiIGRpZCBub3QgcGFzcyB0aGUgLUkgKGlnbm9yZSBiaW5hcnkpIG9wdGlvbiB3aGVuCisgIGNhbGxpbmcgb3V0IGFuIGV4dGVybmFsIGdyZXAgcHJvZ3JhbS4KKworKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgaW5jbHVkZSBIRUFEIHRvIHRoZSBzZXQgb2Ygc3RhcnRpbmcgcG9pbnRzCisgIHdoZW4gLS1hbGwgaXMgZ2l2ZW4uICBUaGlzIG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuIHlvdSBhcmUgbm90CisgIG9uIGFueSBicmFuY2guCisKKyogImdpdCBtdiIgdG8gbW92ZSBhbiB1bnRyYWNrZWQgZmlsZSB0byBvdmVyd3JpdGUgYSB0cmFja2VkCisgIGNvbnRlbnRzIG1pc2JlaGF2ZWQuCisKKyogImdpdCBtZXJnZSAtcyBvY3RvcHVzIiB3aXRoIG1hbnkgcG90ZW50aWFsIG1lcmdlIGJhc2VzIGRpZCBub3QKKyAgd29yayBjb3JyZWN0bHkuCisKKyogUlBNIGJpbmFyeSBwYWNrYWdlIGluc3RhbGxlZCB0aGUgaHRtbCBtYW5wYWdlcyBpbiBhIHdyb25nIHBsYWNlLgorCitBbHNvIGluY2x1ZGVzIG1pbm9yIGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4xLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2JhZDc5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS40LnR4dApAQCAtMCwwICsxLDQxIEBACitHSVQgdjEuNi4xLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4xLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogLmdpdGlnbm9yZSBsZWFybmVkIHRvIGhhbmRsZSBiYWNrc2xhc2ggYXMgYSBxdW90aW5nIG1lY2hhbmlzbSBmb3IKKyAgY29tbWVudCBpbnRyb2R1Y3Rpb24gY2hhcmFjdGVyICIjIi4KKyAgVGhpcyBmaXggd2FzIGZpcnN0IG1lcmdlZCB0byAxLjYuMi4xLgorCisqICJnaXQgZmFzdC1leHBvcnQiIHByb2R1Y2VkIHdyb25nIG91dHB1dCB3aXRoIHNvbWUgcGFyZW50cyBtaXNzaW5nIGZyb20KKyAgY29tbWl0cywgd2hlbiB0aGUgaGlzdG9yeSBpcyBjbG9jay1za2V3ZWQuCisKKyogImdpdCBmYXN0LWltcG9ydCIgc29tZXRpbWVzIGZhaWxlZCB0byByZWFkIGJhY2sgb2JqZWN0cyBpdCBqdXN0IHdyb3RlCisgIG91dCBhbmQgYWJvcnRlZCwgYmVjYXVzZSBpdCBmYWlsZWQgdG8gZmx1c2ggc3RhbGUgY2FjaGVkIGRhdGEuCisKKyogImdpdC1scy10cmVlIiBhbmQgImdpdC1kaWZmLXRyZWUiIHVzZWQgYSBwYXRoc3BlYyBjb3JyZWN0bHkgd2hlbgorICBkZWNpZGluZyB0byBkZXNjZW5kIGludG8gYSBzdWJkaXJlY3RvcnkgYnV0IHRoZXkgZGlkIG5vdCBtYXRjaCB0aGUKKyAgaW5kaXZpZHVhbCBwYXRocyBjb3JyZWN0bHkuICBUaGlzIGNhdXNlZCBwYXRoc3BlY3MgImFiYy9kIGFiIiB0byBtYXRjaAorICAiYWJjLzAiICgiYWJjL2QiIG1hZGUgdGhlbSBkZWNpZGUgdG8gZGVzY2VuZCBpbnRvIHRoZSBkaXJlY3RvcnkgImFiYy8iLAorICBhbmQgdGhlbiAiYWIiIGluY29ycmVjdGx5IG1hdGNoZWQgImFiYy8wIiB3aGVuIGl0IHNob3VsZG4ndCkuCisgIFRoaXMgZml4IHdhcyBmaXJzdCBtZXJnZWQgdG8gMS42LjIuMy4KKworKiBpbXBvcnQtemlwcyBzY3JpcHQgKGluIGNvbnRyaWIpIGRpZCBub3QgY29tcHV0ZSB0aGUgY29tbW9uIGRpcmVjdG9yeQorICBwcmVmaXggY29ycmVjdGx5LgorICBUaGlzIGZpeCB3YXMgZmlyc3QgbWVyZ2VkIHRvIDEuNi4yLjIuCisKKyogImdpdCBpbml0IiBzZWdmYXVsdGVkIHdoZW4gZ2l2ZW4gYW4gb3ZlcmxvbmcgdGVtcGxhdGUgbG9jYXRpb24gdmlhCisgIHRoZSAtLXRlbXBsYXRlPSBvcHRpb24uCisgIFRoaXMgZml4IHdhcyBmaXJzdCBtZXJnZWQgdG8gMS42LjIuNC4KKworKiAiZ2l0IHJlcGFjayIgZGlkIG5vdCBlcnJvciBvdXQgd2hlbiBuZWNlc3Nhcnkgb2JqZWN0IHdhcyBtaXNzaW5nIGluIHRoZQorICByZXBvc2l0b3J5LgorCisqIGdpdC1yZXBhY2sgKGludm9rZWQgZnJvbSBnaXQtZ2MpIGRpZCBub3Qgd29yayBhcyBuaWNlbHkgYXMgaXQgc2hvdWxkIGluCisgIGEgcmVwb3NpdG9yeSB0aGF0IGJvcnJvd3Mgb2JqZWN0cyBmcm9tIG5laWdoYm91cnMgdmlhIGFsdGVybmF0ZXMKKyAgbWVjaGFuaXNtIGVzcGVjaWFsbHkgd2hlbiBzb21lIHBhY2tzIGFyZSBtYXJrZWQgd2l0aCB0aGUgIi5rZWVwIiBmbGFnCisgIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIHJlcGFja2VkLgorICBUaGlzIGZpeCB3YXMgZmlyc3QgbWVyZ2VkIHRvIDEuNi4yLjMuCisKK0Fsc28gaW5jbHVkZXMgbWlub3IgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxNTJhNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjEudHh0CkBAIC0wLDAgKzEsMjgwIEBACitHSVQgdjEuNi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjYuMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBzb21lIGNvbW1hbmRzIChlLmcuICJnaXQgbG9nIiwgImdpdCBkaWZmIikgc3Bhd24gcGFnZXIgaW50ZXJuYWxseSwgd2UKK3VzZWQgdG8gbWFrZSB0aGUgcGFnZXIgdGhlIHBhcmVudCBwcm9jZXNzIG9mIHRoZSBnaXQgY29tbWFuZCB0aGF0IHByb2R1Y2VzCitvdXRwdXQuICBUaGlzIG1lYW50IHRoYXQgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSB3aG9sZSB0aGluZyBjb21lcyBmcm9tIHRoZQorcGFnZXIsIG5vdCB0aGUgdW5kZXJseWluZyBnaXQgY29tbWFuZC4gIFdlIHN3YXBwZWQgdGhlIG9yZGVyIG9mIHRoZQorcHJvY2Vzc2VzIGFyb3VuZCBhbmQgeW91IHdpbGwgc2VlIHRoZSBleGl0IGNvZGUgZnJvbSB0aGUgY29tbWFuZCBmcm9tIG5vdworb24uCisKKyhzdWJzeXN0ZW1zKQorCisqIGdpdGsgY2FuIGNhbGwgb3V0IHRvIGdpdC1ndWkgdG8gdmlldyAiZ2l0IGJsYW1lIiBvdXRwdXQ7IGdpdC1ndWkgaW4gdHVybgorICBjYW4gcnVuIGdpdGsgZnJvbSBpdHMgYmxhbWUgdmlldy4KKworKiBWYXJpb3VzIGdpdC1ndWkgdXBkYXRlcyBpbmNsdWRpbmcgdXBkYXRlZCB0cmFuc2xhdGlvbnMuCisKKyogVmFyaW91cyBnaXR3ZWIgdXBkYXRlcyBmcm9tIHJlcG8ub3IuY3ogaW5zdGFsbGF0aW9uLgorCisqIFVwZGF0ZXMgdG8gZW1hY3MgYmluZGluZ3MuCisKKyhwb3J0YWJpbGl0eSkKKworKiBBIGZldyB0ZXN0IHNjcmlwdHMgdXNlZCBub25wb3J0YWJsZSAiZ3JlcCIgdGhhdCBkaWQgbm90IHdvcmsgd2VsbCBvbgorICBzb21lIHBsYXRmb3JtcywgZS5nLiBTb2xhcmlzLgorCisqIFNhbXBsZSBwcmUtYXV0by1nYyBzY3JpcHQgaGFzIE9TIFggc3VwcG9ydC4KKworKiBNYWtlZmlsZSBoYXMgc3VwcG9ydCBmb3IgKGFuY2llbnQpIEZyZWVCU0QgNC45LgorCisocGVyZm9ybWFuY2UpCisKKyogTWFueSBvcGVyYXRpb25zIHRoYXQgYXJlIGxzdGF0KDMpIGhlYXZ5IGNhbiBiZSB0b2xkIHRvIHByZS1leGVjdXRlCisgIG5lY2Vzc2FyeSBsc3RhdCgzKSBpbiBwYXJhbGxlbCBiZWZvcmUgdGhlaXIgbWFpbiBvcGVyYXRpb25zLCB3aGljaAorICBwb3RlbnRpYWxseSBnaXZlcyBtdWNoIGltcHJvdmVkIHBlcmZvcm1hbmNlIGZvciBjb2xkLWNhY2hlIGNhc2VzIG9yIGluCisgIGVudmlyb25tZW50cyB3aXRoIHdlYWsgbWV0YWRhdGEgY2FjaGluZyAoZS5nLiBORlMpLgorCisqIFRoZSB1bmRlcmx5aW5nIGRpZmYgbWFjaGluZXJ5IHRvIHByb2R1Y2UgdGV4dHVhbCBvdXRwdXQgaGFzIGJlZW4KKyAgb3B0aW1pemVkLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gZmFzdGVyICJnaXQgYmxhbWUiIHByb2Nlc3NpbmcuCisKKyogTW9zdCBvZiB0aGUgdGVzdCBzY3JpcHRzIChidXQgbm90IHRoZSBvbmVzIHRoYXQgdHJ5IHRvIHJ1biBzZXJ2ZXJzKQorICBjYW4gYmUgcnVuIGluIHBhcmFsbGVsLgorCisqIEJhc2ggY29tcGxldGlvbiBvZiByZWZuYW1lcyBpbiBhIHJlcG9zaXRvcnkgd2l0aCBtYXNzaXZlIG51bWJlciBvZgorICByZWZzIGhhcyBiZWVuIG9wdGltaXplZC4KKworKiBDeWd3aW4gcG9ydCB1c2VzIG5hdGl2ZSBzdGF0L2xzdGF0IGltcGxlbWVudGF0aW9ucyB3aGVuIGFwcGxpY2FibGUsCisgIHdoaWNoIGxlYWRzIHRvIGltcHJvdmVkIHBlcmZvcm1hbmNlLgorCisqICJnaXQgcHVzaCIgcGF5cyBhdHRlbnRpb24gdG8gYWx0ZXJuYXRlIHJlcG9zaXRvcmllcyB0byBhdm9pZCBzZW5kaW5nCisgIHVubmVjZXNzYXJ5IG9iamVjdHMuCisKKyogImdpdCBzdm4iIGNhbiByZWJ1aWxkIGFuIG91dC1vZi1kYXRlIHJldl9tYXAgZmlsZS4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisqIFdoZW4geW91IG1pc3R5cGUgYSBjb21tYW5kIG5hbWUsIGdpdCBoZWxwZnVsbHkgc3VnZ2VzdHMgd2hhdCBpdCBndWVzc2VzCisgIHlvdSBtaWdodCBoYXZlIG1lYW50IHRvIHNheS4gIGhlbHAuYXV0b2NvcnJlY3QgY29uZmlndXJhdGlvbiBjYW4gYmUgc2V0CisgIHRvIGEgbm9uLXplcm8gdmFsdWUgdG8gYWNjZXB0IHRoZSBzdWdnZXN0aW9uIHdoZW4gZ2l0IGNhbiB1bmlxdWVseQorICBndWVzcy4KKworKiBUaGUgcGFja2ZpbGUgbWFjaGluZXJ5IGhvcGVmdWxseSBpcyBtb3JlIHJvYnVzdCB3aGVuIGRlYWxpbmcgd2l0aAorICBjb3JydXB0IHBhY2tzIGlmIHJlZHVuZGFudCBvYmplY3RzIGludm9sdmVkIGluIHRoZSBjb3JydXB0aW9uIGFyZQorICBhdmFpbGFibGUgZWxzZXdoZXJlLgorCisqICJnaXQgYWRkIC1OIHBhdGguLi4iIGFkZHMgdGhlIG5hbWVkIHBhdGhzIGFzIGFuIGVtcHR5IGJsb2IsIHNvIHRoYXQKKyAgc3Vic2VxdWVudCAiZ2l0IGRpZmYiIHdpbGwgc2hvdyBhIGRpZmYgYXMgaWYgdGhleSBhcmUgY3JlYXRpb24gZXZlbnRzLgorCisqICJnaXQgYWRkIiBnYWluZWQgYSBidWlsdC1pbiBzeW5vbnltIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8gc2F5ICJzdGFnZQorICBjaGFuZ2VzIiBpbnN0ZWFkIG9mICJhZGQgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYSIgd2hpY2ggYW1vdW50cworICB0byB0aGUgc2FtZSB0aGluZy4KKworKiAiZ2l0IGFwcGx5IiBsZWFybmVkIC0taW5jbHVkZT1wYXRocyBvcHRpb24sIHNpbWlsYXIgdG8gdGhlIGV4aXN0aW5nCisgIC0tZXhjbHVkZT1wYXRocyBvcHRpb24uCisKKyogImdpdCBiaXNlY3QiIGlzIGNhcmVmdWwgYWJvdXQgYSB1c2VyIG1pc3Rha2UgYW5kIHN1Z2dlc3RzIHRlc3Rpbmcgb2YKKyAgbWVyZ2UgYmFzZSBmaXJzdCB3aGVuIGdvb2QgaXMgbm90IGEgc3RyaWN0IGFuY2VzdG9yIG9mIGJhZC4KKworKiAiZ2l0IGJpc2VjdCBza2lwIiBjYW4gdGFrZSBhIHJhbmdlIG9mIGNvbW1pdHMuCisKKyogImdpdCBibGFtZSIgcmUtZW5jb2RlcyB0aGUgY29tbWl0IG1ldGFpbmZvIHRvIFVURi04IGZyb20gaTE4bi5jb21taXRFbmNvZGluZworICBieSBkZWZhdWx0LgorCisqICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIiBjYW4gY2hlY2sgYXR0cmlidXRlcyBmb3IgbXVsdGlwbGUgcGF0aHMuCisKKyogImdpdCBjaGVja291dCAtLXRyYWNrIG9yaWdpbi9oYWNrIiB1c2VkIHRvIGJlIGEgc3ludGF4IGVycm9yLiAgSXQgbm93CisgIERXSU1zIHRvIGNyZWF0ZSBhIGNvcnJlc3BvbmRpbmcgbG9jYWwgYnJhbmNoICJoYWNrIiwgaS5lLiBhY3RzIGFzIGlmIHlvdQorICBzYWlkICJnaXQgY2hlY2tvdXQgLS10cmFjayAtYiBoYWNrIG9yaWdpbi9oYWNrIi4KKworKiAiZ2l0IGNoZWNrb3V0IC0tb3Vycy8tLXRoZWlycyIgY2FuIGJlIHVzZWQgdG8gY2hlY2sgb3V0IG9uZSBzaWRlIG9mIGEKKyAgY29uZmxpY3RpbmcgbWVyZ2UgZHVyaW5nIGNvbmZsaWN0IHJlc29sdXRpb24uCisKKyogImdpdCBjaGVja291dCAtbSIgY2FuIGJlIHVzZWQgdG8gcmVjcmVhdGUgdGhlIGluaXRpYWwgY29uZmxpY3RlZCBzdGF0ZQorICBkdXJpbmcgY29uZmxpY3QgcmVzb2x1dGlvbi4KKworKiAiZ2l0IGNoZXJyeS1waWNrIiBjYW4gYWxzbyB1dGlsaXplIHJlcmVyZSBmb3IgY29uZmxpY3QgcmVzb2x1dGlvbi4KKworKiAiZ2l0IGNsb25lIiBsZWFybmVkIHRvIGJlIHZlcmJvc2Ugd2l0aCAtdgorCisqICJnaXQgY29tbWl0IC0tYXV0aG9yPSRuYW1lIiBjYW4gbG9vayB1cCBhdXRob3IgbmFtZSBmcm9tIGV4aXN0aW5nCisgIGNvbW1pdHMuCisKKyogb3V0cHV0IGZyb20gImdpdCBjb21taXQiIGhhcyBiZWVuIHJld29yZGVkIGluIGEgbW9yZSBjb25jaXNlIGFuZCB5ZXQKKyAgbW9yZSBpbmZvcm1hdGl2ZSB3YXkuCisKKyogImdpdCBjb3VudC1vYmplY3RzIiByZXBvcnRzIHRoZSBvbi1kaXNrIGZvb3RwcmludCBmb3IgcGFja2ZpbGVzIGFuZAorICB0aGVpciBjb3JyZXNwb25kaW5nIGlkeCBmaWxlcy4KKworKiAiZ2l0IGRhZW1vbiIgbGVhcm5lZCAtLW1heC1jb25uZWN0aW9ucz08Y291bnQ+IG9wdGlvbi4KKworKiAiZ2l0IGRhZW1vbiIgZXhwb3J0cyBSRU1PVEVfQUREUiB0byByZWNvcmQgY2xpZW50IGFkZHJlc3MsIHNvIHRoYXQKKyAgc3Bhd25lZCBwcm9ncmFtcyBjYW4gYWN0IGRpZmZlcmVudGx5IG9uIGl0LgorCisqICJnaXQgZGVzY3JpYmUgLS10YWdzIiBmYXZvdXJzIGNsb3NlciBsaWdodHdlaWdodCB0YWdzIHRoYW4gZmFydGhlcgorICBhbm5vdGF0ZWQgdGFncyBub3cuCisKKyogImdpdCBkaWZmIiBsZWFybmVkIHRvIG1pbWljIC0tc3VwcHJlc3MtYmxhbmstZW1wdHkgZnJvbSBHTlUgZGlmZiB2aWEgYQorICBjb25maWd1cmF0aW9uIG9wdGlvbi4KKworKiAiZ2l0IGRpZmYiIGxlYXJuZWQgdG8gcHV0IG1vcmUgc2Vuc2libGUgaHVuayBoZWFkZXJzIGZvciBQeXRob24sCisgIEhUTUwgYW5kIE9iakMgY29udGVudHMuCisKKyogImdpdCBkaWZmIiBsZWFybmVkIHRvIHZhcnkgdGhlIGEvIHZzIGIvIHByZWZpeCBkZXBlbmRpbmcgb24gd2hhdCBhcmUKKyAgYmVpbmcgY29tcGFyZWQsIGNvbnRyb2xsZWQgYnkgZGlmZi5tbmVtb25pY3ByZWZpeCBjb25maWd1cmF0aW9uLgorCisqICJnaXQgZGlmZiIgbGVhcm5lZCAtLWRpcnN0YXQtYnktZmlsZSB0byBjb3VudCBjaGFuZ2VkIGZpbGVzLCBub3QgbnVtYmVyCisgIG9mIGxpbmVzLCB3aGVuIHN1bW1hcml6aW5nIHRoZSBnbG9iYWwgcGljdHVyZS4KKworKiAiZ2l0IGRpZmYiIGxlYXJuZWQgInRleHRjb252IiBmaWx0ZXJzIC0tLSBhIGJpbmFyeSBvciBoYXJkLXRvLXJlYWQKKyAgY29udGVudHMgY2FuIGJlIG11bmdlZCBpbnRvIGh1bWFuIHJlYWRhYmxlIGZvcm0gYW5kIHRoZSBkaWZmZXJlbmNlCisgIGJldHdlZW4gdGhlIHJlc3VsdHMgb2YgdGhlIGNvbnZlcnNpb24gY2FuIGJlIHZpZXdlZCAob2J2aW91c2x5IHRoaXMKKyAgY2Fubm90IHByb2R1Y2UgYSBwYXRjaCB0aGF0IGNhbiBiZSBhcHBsaWVkLCBzbyB0aGlzIGlzIGRpc2FibGVkIGluCisgIGZvcm1hdC1wYXRjaCBhbW9uZyBvdGhlciB0aGluZ3MpLgorCisqICItLWNhY2hlZCIgb3B0aW9uIHRvICJnaXQgZGlmZiBoYXMgYW4gZWFzaWVyIHRvIHJlbWVtYmVyIHN5bm9ueW0gIi0tc3RhZ2VkIiwKKyAgdG8gYXNrICJ3aGF0IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGdpdmVuIGNvbW1pdCBhbmQgdGhlCisgIGNvbnRlbnRzIHN0YWdlZCBpbiB0aGUgaW5kZXg/IgorCisqICJnaXQgZm9yLWVhY2gtcmVmIiBsZWFybmVkICJyZWZuYW1lOnNob3J0IiB0b2tlbiB0aGF0IGdpdmVzIGFuCisgIHVuYW1iaWd1b3VzbHkgYWJicmV2aWF0ZWQgcmVmbmFtZS4KKworKiBBdXRvLW51bWJlcmluZyBvZiB0aGUgc3ViamVjdCBsaW5lcyBpcyB0aGUgZGVmYXVsdCBmb3IgImdpdAorICBmb3JtYXQtcGF0Y2giIG5vdy4KKworKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdG8gYWNjZXB0IC16IHNpbWlsYXIgdG8gR05VIGdyZXAuCisKKyogImdpdCBoZWxwIiBsZWFybmVkIHRvIHVzZSBHSVRfTUFOX1ZJRVdFUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBiZWZvcmUKKyAgdXNpbmcgIm1hbiIgcHJvZ3JhbS4KKworKiAiZ2l0IGltYXAtc2VuZCIgY2FuIG9wdGlvbmFsbHkgdGFsayBTU0wuCisKKyogImdpdCBpbmRleC1wYWNrIiBpcyBtb3JlIGNhcmVmdWwgYWdhaW5zdCBkaXNrIGNvcnJ1cHRpb24gd2hpbGUKKyAgY29tcGxldGluZyBhIHRoaW4gcGFjay4KKworKiAiZ2l0IGxvZyAtLWNoZWNrIiBhbmQgImdpdCBsb2cgLS1leGl0LWNvZGUiIHBhc3NlcyB0aGVpciB1bmRlcmx5aW5nIGRpZmYKKyAgc3RhdHVzIHdpdGggdGhlaXIgZXhpdCBzdGF0dXMgY29kZS4KKworKiAiZ2l0IGxvZyIgbGVhcm5lZCAtLXNpbXBsaWZ5LW1lcmdlcywgYSBtaWxkZXIgdmFyaWFudCBvZiAtLWZ1bGwtaGlzdG9yeTsKKyAgImdpdGsgLS1zaW1wbGlmeS1tZXJnZXMiIGlzIGVhc2llciB0byB2aWV3IHRoYW4gd2l0aCAtLWZ1bGwtaGlzdG9yeS4KKworKiAiZ2l0IGxvZyIgbGVhcm5lZCAiLS1zb3VyY2UiIHRvIHNob3cgd2hhdCByZWYgZWFjaCBjb21taXQgd2FzIHJlYWNoZWQKKyAgZnJvbS4KKworKiAiZ2l0IGxvZyIgYWxzbyBsZWFybmVkICItLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24iIHRvIHNob3cgdGhlCisgIGJpcmRzLWV5ZS12aWV3IG9mIHRoZSB0b3BvbG9neSBvZiB0aGUgaGlzdG9yeS4KKworKiAiZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6IiBsZWFybmVkICIlZCIgZm9ybWF0IGVsZW1lbnQgdGhhdCBpbnNlcnRzCisgIG5hbWVzIG9mIHRhZ3MgdGhhdCBwb2ludCBhdCB0aGUgY29tbWl0LgorCisqICJnaXQgbWVyZ2UgLS1zcXVhc2giIGFuZCAiZ2l0IG1lcmdlIC0tbm8tZmYiIGludG8gYW4gdW5ib3JuIGJyYW5jaCBhcmUKKyAgbm90aWNlZCBhcyB1c2VyIGVycm9ycy4KKworKiAiZ2l0IG1lcmdlIC1zICRzdHJhdGVneSIgY2FuIHVzZSBhIGN1c3RvbSBidWlsdCBzdHJhdGVneSBpZiB5b3UgaGF2ZSBhCisgIGNvbW1hbmQgImdpdC1tZXJnZS0kc3RyYXRlZ3kiIG9uIHlvdXIgJFBBVEguCisKKyogImdpdCBwdWxsIiAoYW5kICJnaXQgZmV0Y2giKSBjYW4gYmUgdG9sZCB0byBvcGVyYXRlICItdiJlcmJvc2VseSBvcgorICAiLXEidWlldGx5LgorCisqICJnaXQgcHVzaCIgY2FuIGJlIHRvbGQgdG8gcmVqZWN0IGRlbGV0aW9uIG9mIHJlZnMgd2l0aCByZWNlaXZlLmRlbnlEZWxldGVzCisgIGNvbmZpZ3VyYXRpb24uCisKKyogImdpdCByZWJhc2UiIGhvbm91cnMgcHJlLXJlYmFzZSBob29rOyB1c2UgLS1uby12ZXJpZnkgdG8gYnlwYXNzIGl0LgorCisqICJnaXQgcmViYXNlIC1wIiB1c2VzIGludGVyYWN0aXZlIHJlYmFzZSBtYWNoaW5lcnkgbm93IHRvIHByZXNlcnZlIHRoZSBtZXJnZXMuCisKKyogImdpdCByZWZsb2cgZXhwaXJlIGJyYW5jaCIgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgImdpdCByZWZsb2cgZXhwaXJlCisgIHJlZnMvaGVhZHMvYnJhbmNoIi4KKworKiAiZ2l0IHJlbW90ZSBzaG93ICRyZW1vdGUiIGxpc3RzIHJlbW90ZSBicmFuY2hlcyBvbmUtcGVyLWxpbmUgbm93LgorCisqICJnaXQgc2VuZC1lbWFpbCIgY2FuIGJlIGdpdmVuIHJldmlzaW9uIHJhbmdlIGluc3RlYWQgb2YgZmlsZXMgYW5kCisgIG1haWxkaXJzIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBhdXRvbWF0aWNhbGx5IHJ1bnMgZm9ybWF0LXBhdGNoIHRvCisgIGdlbmVyYXRlIHBhdGNoZXMgZm9yIHRoZSBnaXZlbiByZXZpc2lvbiByYW5nZS4KKworKiAiZ2l0IHN1Ym1vZHVsZSBmb3JlYWNoIiBzdWJjb21tYW5kIGFsbG93cyB5b3UgdG8gaXRlcmF0ZSBvdmVyIGNoZWNrZWQKKyAgb3V0IHN1Ym1vZHVsZXMuCisKKyogImdpdCBzdWJtb2R1bGUgc3luYyIgc3ViY29tbWFuZHMgYWxsb3dzIHlvdSB0byB1cGRhdGUgdGhlIG9yaWdpbiBVUkwKKyAgcmVjb3JkZWQgaW4gc3VibW9kdWxlIGRpcmVjdG9yaWVzIGZyb20gdGhlIHRvcGxldmVsIC5naXRtb2R1bGVzIGZpbGUuCisKKyogImdpdCBzdm4gYnJhbmNoIiBjYW4gY3JlYXRlIG5ldyBicmFuY2hlcyBvbiB0aGUgb3RoZXIgZW5kLgorCisqICJnaXR3ZWIiIGNhbiB1c2UgbW9yZSBzYW5lciBQQVRIX0lORk8gYmFzZWQgVVJMLgorCisoaW50ZXJuYWwpCisKKyogImdpdCBoYXNoLW9iamVjdCIgbGVhcm5lZCB0byBsaWUgYWJvdXQgdGhlIHBhdGggYmVpbmcgaGFzaGVkLCBzbyB0aGF0CisgIGNvcnJlY3QgZ2l0YXR0cmlidXRlcyBwcm9jZXNzaW5nIGNhbiBiZSBkb25lIHdoaWxlIGhhc2hpbmcgY29udGVudHMKKyAgc3RvcmVkIGluIGEgdGVtcG9yYXJ5IGZpbGUuCisKKyogdmFyaW91cyBjYWxsZXJzIG9mIGdpdC1tZXJnZS1yZWN1cnNpdmUgYXZvaWQgZm9ya2luZyBpdCBhcyBhbiBleHRlcm5hbAorICBwcm9jZXNzLgorCisqIEdpdCBjbGFzcyBkZWZpbmVkIGluICJHaXQucG0iIGNhbiBiZSBzdWJjbGFzc2VzIGEgYml0IG1vcmUgZWFzaWx5LgorCisqIFdlIHVzZWQgdG8gbGluayBHTlUgcmVnZXggbGlicmFyeSBhcyBhIGNvbXBhdGliaWxpdHkgbGF5ZXIgZm9yIHNvbWUKKyAgcGxhdGZvcm1zLCBidXQgaXQgdHVybnMgb3V0IGl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gbW9zdCBvZiB0aGVtLgorCisqIFNvbWUgcGF0aCBoYW5kbGluZyByb3V0aW5lcyB1c2VkIGZpeGVkIG51bWJlciBvZiBidWZmZXJzIHVzZWQgYWx0ZXJuYXRlbHkKKyAgYnV0IGRlcGVuZGluZyBvbiB0aGUgY2FsbCBkZXB0aCwgdGhpcyBhcnJhbmdlbWVudCBsZWQgdG8gaGFyZCB0byB0cmFjaworICBidWdzLiAgVGhpcyBpc3N1ZSBpcyBiZWluZyBhZGRyZXNzZWQuCisKKworRml4ZXMgc2luY2UgdjEuNi4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjAuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyogUG9yY2VsYWlucyBpbXBsZW1lbnRlZCBhcyBzaGVsbCBzY3JpcHRzIHdlcmUgdXR0ZXJseSBjb25mdXNlZCB3aGVuIHlvdQorICBlbnRlcmVkIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGEgd29yayB0cmVlIGZyb20gc2lkZXdheXMsIGZvbGxvd2luZyBhCisgIHN5bWJvbGljIGxpbmsgKHRoaXMgbWF5IG5lZWQgdG8gYmUgYmFja3BvcnRlZCB0byBvbGRlciByZWxlYXNlcyBsYXRlcikuCisKKyogVHJhY2tpbmcgc3ltYm9saWMgbGlua3Mgd291bGQgd29yayBiZXR0ZXIgb24gZmlsZXN5c3RlbXMgd2hvc2UgbHN0YXQoKQorICByZXR1cm5zIGluY29ycmVjdCBzdF9zaXplIHZhbHVlIGZvciB0aGVtLgorCisqICJnaXQgYWRkIiBhbmQgImdpdCB1cGRhdGUtaW5kZXgiIGluY29ycmVjdGx5IGFsbG93ZWQgYWRkaW5nIFMvRiB3aGVuIFMKKyAgaXMgYSB0cmFja2VkIHN5bWxpbmsgdGhhdCBwb2ludHMgYXQgYSBkaXJlY3RvcnkgRCB0aGF0IGhhcyBhIHBhdGggRiBpbgorICBpdCAod2Ugc3RpbGwgbmVlZCB0byBmaXggYSBzaW1pbGFyIG5vbnNlbnNlIHdoZW4gUyBpcyBhIHN1Ym1vZHVsZSBhbmQgRgorICBpcyBhIHBhdGggaW4gaXQpLgorCisqICJnaXQgYW0iIGFmdGVyIHN0b3BwaW5nIGF0IGEgYnJva2VuIHBhdGNoIGxvc3QgLS13aGl0ZXNwYWNlLCAtQywgLXAgYW5kCisgIC0tM3dheSBvcHRpb25zIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSBpbml0aWFsbHkuCisKKyogImdpdCBkaWZmIC0tc3RkaW4iIHVzZWQgdG8gdGFrZSB0d28gdHJlZXMgb24gYSBsaW5lIGFuZCBjb21wYXJlZCB0aGVtLAorICBidXQgd2UgZHJvcHBlZCBzdXBwb3J0IGZvciBzdWNoIGEgdXNlIGNhc2UgbG9uZyB0aW1lIGFnby4gIFRoaXMgaGFzCisgIGJlZW4gcmVzdXJyZWN0ZWQuCisKKyogImdpdCBmaWx0ZXItYnJhbmNoIiBmYWlsZWQgdG8gcmV3cml0ZSBhIHRhZyBuYW1lIHdpdGggc2xhc2hlcyBpbiBpdC4KKworKiAiZ2l0IGh0dHAtcHVzaCIgZGlkIG5vdCB1bmRlcnN0YW5kIFVSSSBzY2hlbWUgb3RoZXIgdGhhbiBvcGFxdWVsb2NrdG9rZW4KKyAgd2hlbiBhY3F1aXJpbmcgYSBsb2NrIGZyb20gdGhlIHNlcnZlciAodGhpcyBtYXkgbmVlZCB0byBiZSBiYWNrcG9ydGVkIHRvCisgIG9sZGVyIHJlbGVhc2VzIGxhdGVyKS4KKworKiBBZnRlciAiZ2l0IHJlYmFzZSAtcCIgc3RvcHBlZCB3aXRoIGNvbmZsaWN0cyB3aGlsZSByZXBsYXlpbmcgYSBtZXJnZSwKKyAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBkaWQgbm90IHdvcmsgKG1heSBuZWVkIHRvIGJlIGJhY2twb3J0ZWQgdG8gb2xkZXIKKyAgcmVsZWFzZXMpLgorCisqICJnaXQgcmV2ZXJ0IiByZWNvcmRzIHJlbGF0aXZlIHRvIHdoaWNoIHBhcmVudCBhIHJldmVydCB3YXMgbWFkZSB3aGVuCisgIHJldmVydGluZyBhIG1lcmdlLiAgVG9nZXRoZXIgd2l0aCBuZXcgZG9jdW1lbnRhdGlvbiB0aGF0IGV4cGxhaW5zIGlzc3VlcworICBhcm91bmQgcmV2ZXJ0aW5nIGEgbWVyZ2UgYW5kIG1lcmdpbmcgZnJvbSB0aGUgdXBkYXRlZCBicmFuY2ggbGF0ZXIsIHRoaXMKKyAgaG9wZWZ1bGx5IHdpbGwgcmVkdWNlIHVzZXIgY29uZnVzaW9uICh0aGlzIG1heSBuZWVkIHRvIGJlIGJhY2twb3J0ZWQgdG8KKyAgb2xkZXIgcmVsZWFzZXMgbGF0ZXIpLgorCisqICJnaXQgcm0gLS1jYWNoZWQiIHVzZWQgdG8gYWxsb3cgYW4gZW1wdHkgYmxvYiB0aGF0IHdhcyBhZGRlZCBlYXJsaWVyIHRvCisgIGJlIHJlbW92ZWQgd2l0aG91dCAtLWZvcmNlLCBldmVuIHdoZW4gdGhlIGZpbGUgaW4gdGhlIHdvcmsgdHJlZSBoYXMKKyAgc2luY2UgYmVlbiBtb2RpZmllZC4KKworKiAiZ2l0IHB1c2ggLS10YWdzIC0tYWxsICR0aGVyZSIgZmFpbGVkIHdpdGggZ2VuZXJpYyB1c2FnZSBtZXNzYWdlIHdpdGhvdXQKKyAgdGVsbGluZyBzYXlpbmcgdGhlc2UgdHdvIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4KKworKiAiZ2l0IGxvZyAtLWF1dGhvci8tLWNvbW1pdHRlciIgbWF0Y2ggdXNlZCB0byBwb3RlbnRpYWxseSBtYXRjaCB0aGUKKyAgdGltZXN0YW1wIHBhcnQsIGV4cG9zaW5nIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbC4gIEFsc28gdGhlc2UgZGlkCisgIG5vdCB3b3JrIHdpdGggLS1maXhlZC1zdHJpbmdzIG1hdGNoIGF0IGFsbC4KKworKiAiZ2l0d2ViIiBkaWQgbm90IG1hcmsgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW1wb3J0ZWQgZnJvbSBleHRlcm5hbCBIVE1MIGZyYWdtZW50cworICBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmEzNjQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4xLnR4dApAQCAtMCwwICsxLDE5IEBACitHSVQgdjEuNi4yLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworKiAuZ2l0aWdub3JlIGxlYXJuZWQgdG8gaGFuZGxlIGJhY2tzbGFzaCBhcyBhIHF1b3RpbmcgbWVjaGFuaXNtIGZvcgorICBjb21tZW50IGludHJvZHVjdGlvbiBjaGFyYWN0ZXIgIiMiLgorCisqIHRpbWVzdGFtcCBvdXRwdXQgaW4gLS1kYXRlPXJlbGF0aXZlIG1vZGUgdXNlZCB0byBkaXNwbGF5IHRpbWVzdGFtcHMgdGhhdAorICBhcmUgbG9uZyB0aW1lIGFnbyBpbiB0aGUgZGVmYXVsdCBtb2RlOyBpdCBub3cgdXNlcyAiTiB5ZWFycyBNIG1vbnRocworICBhZ28iLCBhbmQgIk4geWVhcnMgYWdvIi4KKworKiBnaXQtYWRkIC1pLy1wIG5vdyB3b3JrcyB3aXRoIG5vbi1BU0NJSSBwYXRobmFtZXMuCisKKyogImdpdCBoYXNoLW9iamVjdCAtdyIgZGlkIG5vdCByZWFkIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmcm9tIHRoZQorICBjb3JyZWN0IC5naXQgZGlyZWN0b3J5LgorCisqIGdpdC1zZW5kLWVtYWlsIGxlYXJuZWQgdG8gY29ycmVjdGx5IGhhbmRsZSBtdWx0aXBsZSBDYzogYWRkcmVzc2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmYTk5OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuMi50eHQKQEAgLTAsMCArMSw0NSBAQAorR0lUIHYxLjYuMi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIEEgbG9uZ3N0YW5kaW5nIGNvbmZ1c2luZyBkZXNjcmlwdGlvbiBvZiB3aGF0IC0tcGlja2F4ZSBvcHRpb24gb2YKKyAgZ2l0LWRpZmYgZG9lcyBoYXMgYmVlbiBjbGFyaWZpZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKyogImdpdC1ibGFtZSAtUyIgZGlkIG5vdCBxdWl0ZSB3b3JrIG5lYXIgdGhlIGNvbW1pdHMgdGhhdCB3ZXJlIGdpdmVuCisgIG9uIHRoZSBjb21tYW5kIGxpbmUgY29ycmVjdGx5LgorCisqICJnaXQgZGlmZiAtLXBpY2theGUtcmVnZXhwIiBkaWQgbm90IGNvdW50IG92ZXJsYXBwaW5nIG1hdGNoZXMKKyAgY29ycmVjdGx5LgorCisqICJnaXQgZGlmZiIgZGlkIG5vdCBmZWVkIGZpbGVzIGluIHdvcmstdHJlZSByZXByZXNlbnRhdGlvbiB0byBleHRlcm5hbAorICBkaWZmIGFuZCB0ZXh0Y29udi4KKworKiAiZ2l0LWZldGNoIiBpbiBhIHJlcG9zaXRvcnkgdGhhdCB3YXMgbm90IGNsb25lZCBmcm9tIGFueXdoZXJlIHNhaWQKKyAgaXQgY2Fubm90IGZpbmQgJ29yaWdpbicsIHdoaWNoIHdhcyBoYXJkIHRvIHVuZGVyc3RhbmQgZm9yIG5ldyBwZW9wbGUuCisKKyogImdpdC1mb3JtYXQtcGF0Y2ggLS1udW1iZXJlZC1maWxlcyAtLXN0ZG91dCIgZGlkIG5vdCBoYXZlIHRvIGRpZSBvZgorICBpbmNvbXBhdGlibGUgb3B0aW9uczsgaXQgbm93IHNpbXBseSBpZ25vcmVzIC0tbnVtYmVyZWQtZmlsZXMgYXMgbm8gZmlsZXMKKyAgYXJlIHByb2R1Y2VkIGFueXdheS4KKworKiAiZ2l0LWxzLWZpbGVzIC0tZGVsZXRlZCIgZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCBHSVRfRElSJkdJVF9XT1JLX1RSRUUuCisKKyogImdpdC1yZWFkLXRyZWUgQSBCIEMuLi4iIHdpdGhvdXQgLW0gb3B0aW9uIGhhcyBiZWVuIGJyb2tlbiBmb3IgYSBsb25nCisgIHRpbWUuCisKKyogZ2l0LXNlbmQtZW1haWwgaWdub3JlZCAtLWluLXJlcGx5LXRvIHdoZW4gLS1uby10aHJlYWQgd2FzIGdpdmVuLgorCisqICdnaXQtc3VibW9kdWxlIGFkZCcgZGlkIG5vdCB0b2xlcmF0ZSBleHRyYSBzbGFzaGVzIGFuZCAuLyBpbiB0aGUgcGF0aCBpdAorICBhY2NlcHRlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmU7IGl0IG5vdyBpcyBtb3JlIGxlbmllbnQuCisKKyogZ2l0LXN2biBtaXNiZWhhdmVkIHdoZW4gdGhlIHByb2plY3QgY29udGFpbmVkIGEgcGF0aCB0aGF0IGJlZ2FuIHdpdGgKKyAgdHdvIGRhc2hlcy4KKworKiBpbXBvcnQtemlwcyBzY3JpcHQgKGluIGNvbnRyaWIpIGRpZCBub3QgY29tcHV0ZSB0aGUgY29tbW9uIGRpcmVjdG9yeQorICBwcmVmaXggY29ycmVjdGx5LgorCisqIG1pc2NvbXBpbGF0aW9uIG9mIG5lZ2F0ZWQgZW51bSBjb25zdGFudHMgYnkgb2xkIGdjYyAoMi45KSBhZmZlY3RlZCB0aGUKKyAgY29kZXBhdGhzIHRvIHNwYXduIHN1YnByb2Nlc3Nlcy4KKworTWFueSBzbWFsbCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkIGFzIHdlbGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDNjMWFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi4zLnR4dApAQCAtMCwwICsxLDIyIEBACitHSVQgdjEuNi4yLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4yLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogU2V0dGluZyBhbiBvY3RhbCBtb2RlIHZhbHVlIHRvIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIHRvCisgIHJlc3RyaWN0IGFjY2VzcyB0byB0aGUgcmVwb3NpdG9yeSB0byBncm91cCBtZW1iZXJzIGRpZCBub3Qgd29yayBhcworICBhZHZlcnRpc2VkLgorCisqIEEgZmFpcmx5IGxhcmdlIGFuZCB0cml2aWFsIG1lbW9yeSBsZWFrIHdoaWxlIHJldi1saXN0IHNob3dzIGxpc3Qgb2YKKyAgcmVhY2hhYmxlIG9iamVjdHMgaGFzIGJlZW4gaWRlbnRpZmllZCBhbmQgcGx1Z2dlZC4KKworKiAiZ2l0LWNvbW1pdCAtLWludGVyYWN0aXZlIiBkaWQgbm90IGFib3J0IHdoZW4gdW5kZXJseWluZyAiZ2l0LWFkZCAtaSIKKyAgc2lnbmFsZWQgYSBmYWlsdXJlLgorCisqIGdpdC1yZXBhY2sgKGludm9rZWQgZnJvbSBnaXQtZ2MpIGRpZCBub3Qgd29yayBhcyBuaWNlbHkgYXMgaXQgc2hvdWxkIGluCisgIGEgcmVwb3NpdG9yeSB0aGF0IGJvcnJvd3Mgb2JqZWN0cyBmcm9tIG5laWdoYm91cnMgdmlhIGFsdGVybmF0ZXMKKyAgbWVjaGFuaXNtIGVzcGVjaWFsbHkgd2hlbiBzb21lIHBhY2tzIGFyZSBtYXJrZWQgd2l0aCB0aGUgIi5rZWVwIiBmbGFnCisgIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIHJlcGFja2VkLgorCitNYW55IHNtYWxsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQgYXMgd2VsbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjIuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YmYxZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjQudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0dJVCB2MS42LjIuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjIuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgY29uZmlndXJhdGlvbiBwYXJzZXIgaGFkIGEgYnVmZmVyIG92ZXJmbG93IHdoaWxlIHBhcnNpbmcgYW4gb3ZlcmxvbmcKKyAgdmFsdWUuCisKKyogcHJ1bmluZyByZWZsb2cgZW50cmllcyB0aGF0IGFyZSB1bnJlYWNoYWJsZSBmcm9tIHRoZSB0aXAgb2YgdGhlIHJlZgorICBkdXJpbmcgImdpdCByZWZsb2cgcHJ1bmUiIChoZW5jZSAiZ2l0IGdjIikgd2FzIHZlcnkgaW5lZmZpY2llbnQuCisKKyogImdpdC1hZGQgLXAiIGxhY2tlZCBhIHdheSB0byBzYXkgInEidWl0IHRvIHJlZnVzZSBzdGFnaW5nIGFueSBodW5rcyBmb3IKKyAgdGhlIHJlbWFpbmluZyBwYXRocy4gIFlvdSBoYWQgdG8gc2F5ICJkIiBhbmQgdGhlbiBeQy4KKworKiAiZ2l0LWNoZWNrb3V0IDx0cmVlLWlzaD4gPHN1Ym1vZHVsZT4iIGRpZCBub3QgdXBkYXRlIHRoZSBpbmRleCBlbnRyeSBhdAorICB0aGUgbmFtZWQgcGF0aDsgaXQgbm93IGRvZXMuCisKKyogImdpdC1mYXN0LWV4cG9ydCIgY2hva2VkIHdoZW4gc2VlaW5nIGEgdGFnIHRoYXQgZG9lcyBub3QgcG9pbnQgYXQgY29tbWl0LgorCisqICJnaXQgaW5pdCIgc2VnZmF1bHRlZCB3aGVuIGdpdmVuIGFuIG92ZXJsb25nIHRlbXBsYXRlIGxvY2F0aW9uIHZpYQorICB0aGUgLS10ZW1wbGF0ZT0gb3B0aW9uLgorCisqICJnaXQtbHMtdHJlZSIgYW5kICJnaXQtZGlmZi10cmVlIiB1c2VkIGEgcGF0aHNwZWMgY29ycmVjdGx5IHdoZW4KKyAgZGVjaWRpbmcgdG8gZGVzY2VuZCBpbnRvIGEgc3ViZGlyZWN0b3J5IGJ1dCB0aGV5IGRpZCBub3QgbWF0Y2ggdGhlCisgIGluZGl2aWR1YWwgcGF0aHMgY29ycmVjdGx5LiAgVGhpcyBjYXVzZWQgcGF0aHNwZWNzICJhYmMvZCBhYiIgdG8gbWF0Y2gKKyAgImFiYy8wIiAoImFiYy9kIiBtYWRlIHRoZW0gZGVjaWRlIHRvIGRlc2NlbmQgaW50byB0aGUgZGlyZWN0b3J5ICJhYmMvIiwKKyAgYW5kIHRoZW4gImFiIiBpbmNvcnJlY3RseSBtYXRjaGVkICJhYmMvMCIgd2hlbiBpdCBzaG91bGRuJ3QpLgorCisqICJnaXQtbWVyZ2UtcmVjdXJzaXZlIiB3YXMgYnJva2VuIHdoZW4gYSBzdWJtb2R1bGUgZW50cnkgd2FzIGludm9sdmVkIGluCisgIGEgY3Jpc3MtY3Jvc3MgbWVyZ2Ugc2l0dWF0aW9uLgorCitNYW55IHNtYWxsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQgYXMgd2VsbC4KKworLS0tCitleGVjID4vdmFyL3RtcC8xCitlY2hvIE89JChnaXQgZGVzY3JpYmUgbWFpbnQpCitPPXYxLjYuMi4zLTM4LWczMThiODQ3CitnaXQgc2hvcnRsb2cgLS1uby1tZXJnZXMgJE8uLm1haW50CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjNmOWU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi41LnR4dApAQCAtMCwwICsxLDIxIEBACitHSVQgdjEuNi4yLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4yLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBhcHBseSIgbWlzaGFuZGxlZCBpZiB5b3UgZmVkIGEgZ2l0IGdlbmVyYXRlZCBwYXRjaCB0aGF0IHJlbmFtZXMKKyAgZmlsZSBBIHRvIEIgYW5kIGZpbGUgQiB0byBBIGF0IHRoZSBzYW1lIHRpbWUuCisKKyogImdpdCBkaWZmIC1jIC1wIiAoYW5kICJkaWZmIC0tY2MiKSBkaWQgbm90IGV4cGVjdCB0byBzZWUgc3VibW9kdWxlCisgIGRpZmZlcmVuY2VzIGFuZCBpbnN0ZWFkIHJlZnVzZWQgdG8gd29yay4KKworKiAiZ2l0IGdyZXAgLWUgJygnIiBzZWdmYXVsdGVkLCBpbnN0ZWFkIG9mIGRpYWdub3NpbmcgYSBtaXNtYXRjaGVkCisgIHBhcmVudGhlc2VzIGVycm9yLgorCisqICJnaXQgZmV0Y2giIGdlbmVyYXRlZCBwYWNrcyB3aXRoIG9mZnNldC1kZWx0YSBlbmNvZGluZyB3aGVuIGJvdGggZW5kcyBvZgorICB0aGUgY29ubmVjdGlvbiBhcmUgY2FwYWJsZSBvZiBwcm9kdWNpbmcgb25lOyB0aGlzIGNhbm5vdCBiZSByZWFkIGJ5CisgIGFuY2llbnQgZ2l0IGFuZCB0aGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXNhYmxlIHRoaXMgYnkgc2V0dGluZworICByZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IGNvbmZpZ3VyYXRpb24gdG8gZmFsc2UuCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDA2MGY0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMi50eHQKQEAgLTAsMCArMSwxNjQgQEAKK0dJVCB2MS42LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1dpdGggdGhlIG5leHQgbWFqb3IgcmVsZWFzZSwgImdpdCBwdXNoIiBpbnRvIGEgYnJhbmNoIHRoYXQgaXMKK2N1cnJlbnRseSBjaGVja2VkIG91dCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4gIFlvdSBjYW4gY2hvb3NlCit3aGF0IHNob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeS4KKworVG8gZWFzZSB0aGUgdHJhbnNpdGlvbiBwbGFuLCB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgb2Ygc3VjaCBhCitwdXNoIHJ1bm5pbmcgdGhpcyByZWxlYXNlIHdpbGwgaXNzdWUgYSBiaWcgd2FybmluZyB3aGVuIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBtaXNzaW5nLiAgUGxlYXNlIHJlZmVyIHRvOgorCisgIGh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9HaXRGYXEjbm9uLWJhcmUKKyAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzEwNzc1OC9mb2N1cz0xMDgwMDcKKworZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQordHJhbnNpdGlvbiBwbGFuLgorCitGb3IgYSBzaW1pbGFyIHJlYXNvbiwgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2gKKyRraWxsZWQgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSAkdGhlcmUsIGlmICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50CiticmFuY2ggcG9pbnRlZCBhdCBieSBpdHMgSEVBRCwgZ2V0cyBhIGxhcmdlIHdhcm5pbmcuICBZb3UgY2FuIGNob29zZSB3aGF0CitzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKKworVXBkYXRlcyBzaW5jZSB2MS42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisqIGdpdC1zdm4gdXBkYXRlcy4KKworKiBnaXR3ZWIgdXBkYXRlcywgaW5jbHVkaW5nIGEgbmV3IHBhdGNoIHZpZXcgYW5kIFJTUy9BdG9tIGZlZWQKKyAgaW1wcm92ZW1lbnRzLgorCisqIChjb250cmliL2VtYWNzKSBnaXQuZWwgbm93IGhhcyBjb21tYW5kcyBmb3IgY2hlY2tpbmcgb3V0IGEgYnJhbmNoLAorICBjcmVhdGluZyBhIGJyYW5jaCwgY2hlcnJ5LXBpY2tpbmcgYW5kIHJldmVydGluZyBjb21taXRzOyB2Yy1naXQuZWwKKyAgaXMgbm90IHNoaXBwZWQgd2l0aCBnaXQgYW55bW9yZSAoaXQgaXMgcGFydCBvZiBvZmZpY2lhbCBFbWFjcykuCisKKyhwZXJmb3JtYW5jZSkKKworKiBwYWNrLW9iamVjdHMgYXV0b2RldGVjdHMgdGhlIG51bWJlciBvZiBDUFVzIGF2YWlsYWJsZSBhbmQgdXNlcyB0aHJlYWRlZAorICB2ZXJzaW9uLgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyogYXV0b21hdGljIHR5cG8gY29ycmVjdGlvbiB3b3JrcyBvbiBhbGlhc2VzIGFzIHdlbGwKKworKiBAey0xfSBpcyBhIHdheSB0byByZWZlciB0byB0aGUgbGFzdCBicmFuY2ggeW91IHdlcmUgb24uICBUaGlzIGlzCisgIGFjY2VwdGVkIG5vdCBvbmx5IHdoZXJlIGFuIG9iamVjdCBuYW1lIGlzIGV4cGVjdGVkLCBidXQgYW55d2hlcmUKKyAgYSBicmFuY2ggbmFtZSBpcyBleHBlY3RlZCBhbmQgYWN0cyBhcyBpZiB5b3UgdHlwZWQgdGhlIGJyYW5jaCBuYW1lLgorICBFLmcuICJnaXQgYnJhbmNoIC0tdHJhY2sgbXlicmFuY2ggQHstMX0iLCAiZ2l0IG1lcmdlIEB7LTF9IiwgYW5kCisgICJnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEB7LTF9IiB3b3VsZCB3b3JrIGFzIGV4cGVjdGVkLgorCisqIFdoZW4gcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIHBvaW50cyBhdCBhIHJlbW90ZSB0cmFja2luZyBicmFuY2ggdGhhdAorICBoYXMgYmVlbiBwcnVuZWQgYXdheSwgbWFueSBnaXQgb3BlcmF0aW9ucyBpc3N1ZWQgd2FybmluZyB3aGVuIHRoZXkKKyAgaW50ZXJuYWxseSBlbnVtZXJhdGVkIHRoZSByZWZzLiAgV2Ugbm93IHdhcm4gb25seSB3aGVuIHlvdSBzYXkgIm9yaWdpbiIKKyAgdG8gcmVmZXIgdG8gdGhhdCBwcnVuZWQgYnJhbmNoLgorCisqIFRoZSBsb2NhdGlvbiBvZiAubWFpbG1hcCBmaWxlIGNhbiBiZSBjb25maWd1cmVkLCBhbmQgaXRzIGZpbGUgZm9ybWF0IHdhcworICBlbmhhbmNlZCB0byBhbGxvdyBtYXBwaW5nIGFuIGluY29ycmVjdCBlLW1haWwgZmllbGQgYXMgd2VsbC4KKworKiAiZ2l0IGFkZCAtcCIgbGVhcm5lZCAnZydvdG8gYWN0aW9uIHRvIGp1bXAgZGlyZWN0bHkgdG8gYSBodW5rLgorCisqICJnaXQgYWRkIC1wIiBsZWFybmVkIHRvIGZpbmQgYSBodW5rIHdpdGggZ2l2ZW4gdGV4dCB3aXRoICcvJy4KKworKiAiZ2l0IGFkZCAtcCIgb3B0aW9uYWxseSBjYW4gYmUgdG9sZCB0byB3b3JrIHdpdGgganVzdCB0aGUgY29tbWFuZCBsZXR0ZXIKKyAgd2l0aG91dCBFbnRlci4KKworKiB3aGVuICJnaXQgYW0iIHN0b3BzIHVwb24gYSBwYXRjaCB0aGF0IGRvZXMgbm90IGFwcGx5LCBpdCBzaG93cyB0aGUKKyAgdGl0bGUgb2YgdGhlIG9mZmVuZGluZyBwYXRjaC4KKworKiAiZ2l0IGFtIC0tZGlyZWN0b3J5PTxkaXI+IiBhbmQgImdpdCBhbSAtLXJlamVjdCIgcGFzc2VzIHRoZXNlIG9wdGlvbnMKKyAgdG8gdW5kZXJseWluZyAiZ2l0IGFwcGx5Ii4KKworKiAiZ2l0IGFtIiBsZWFybmVkIC0taWdub3JlLWRhdGUgb3B0aW9uLgorCisqICJnaXQgYmxhbWUiIGFsaWducyBhdXRob3IgbmFtZXMgYmV0dGVyIHdoZW4gdGhleSBhcmUgc3BlbGxlZCBpbgorICBub24gVVMtQVNDSUkgZW5jb2RpbmcuCisKKyogImdpdCBjbG9uZSIgbm93IG1ha2VzIGl0cyBiZXN0IGVmZm9ydCB3aGVuIGNsb25pbmcgZnJvbSBhbiBlbXB0eQorICByZXBvc2l0b3J5IHRvIHNldCB1cCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0byByZWZlciB0byB0aGUgcmVtb3RlCisgIHJlcG9zaXRvcnkuCisKKyogImdpdCBjaGVja291dCAtIiBpcyBhIHNob3J0aGFuZCBmb3IgImdpdCBjaGVja291dCBAey0xfSIuCisKKyogImdpdCBjaGVycnkiIGRlZmF1bHRzIHRvIHdoYXRldmVyIHRoZSBjdXJyZW50IGJyYW5jaCBpcyB0cmFja2luZyAoaWYKKyAgZXhpc3RzKSB3aGVuIHRoZSA8dXBzdHJlYW0+IGFyZ3VtZW50IGlzIG5vdCBnaXZlbi4KKworKiAiZ2l0IGN2c3NlcnZlciIgY2FuIGJlIHRvbGQgbm90IHRvIGFkZCBleHRyYSAidmlhIGdpdC1DVlMgZW11bGF0b3IiIHRvCisgIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgaXQgc2VydmVzIHZpYSBnaXRjdnMuY29tbWl0bXNnYW5ub3RhdGlvbgorICBjb25maWd1cmF0aW9uLgorCisqICJnaXQgY3Zzc2VydmVyIiBsZWFybmVkIHRvIGhhbmRsZSAnbm9vcCcgY29tbWFuZCBzb21lIENWUyBjbGllbnRzIHNlZW0KKyAgdG8gZXhwZWN0IHRvIHdvcmsuCisKKyogImdpdCBkaWZmIiBsZWFybmVkIGEgbmV3IG9wdGlvbiAtLWludGVyLWh1bmstY29udGV4dCB0byBjb2FsZXNjZSBjbG9zZQorICBodW5rcyB0b2dldGhlciBhbmQgc2hvdyBjb250ZXh0IGJldHdlZW4gdGhlbS4KKworKiBUaGUgZGVmaW5pdGlvbiBvZiB3aGF0IGNvbnN0aXR1dGVzIGEgd29yZCBmb3IgImdpdCBkaWZmIC0tY29sb3Itd29yZHMiCisgIGNhbiBiZSBjdXN0b21pemVkIHZpYSBnaXRhdHRyaWJ1dGVzLCBjb21tYW5kIGxpbmUgb3IgYSBjb25maWd1cmF0aW9uLgorCisqICJnaXQgZGlmZiIgbGVhcm5lZCAtLXBhdGllbmNlIHRvIHJ1biAicGF0aWVuY2UgZGlmZiIgYWxnb3JpdGhtLgorCisqICJnaXQgZmlsdGVyLWJyYW5jaCIgbGVhcm5lZCAtLXBydW5lLWVtcHR5IG9wdGlvbiB0aGF0IGRpc2NhcmRzIGNvbW1pdHMKKyAgdGhhdCBkbyBub3QgY2hhbmdlIHRoZSBjb250ZW50cy4KKworKiAiZ2l0IGZzY2siIG5vdyBjaGVja3MgbG9vc2Ugb2JqZWN0cyBpbiBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlcywgaW5zdGVhZAorICBvZiBtaXNyZXBvcnRpbmcgdGhlbSBhcyBtaXNzaW5nLgorCisqICJnaXQgZ2MgLS1wcnVuZSIgd2FzIHJlc3VycmVjdGVkIHRvIGFsbG93ICJnaXQgZ2MgLS1uby1wcnVuZSIgYW5kCisgIGdpdmluZyBub24tZGVmYXVsdCBleHBpcmF0aW9uIHBlcmlvZCBlLmcuICJnaXQgZ2MgLS1wcnVuZT1ub3ciLgorCisqICJnaXQgZ3JlcCAtdyIgYW5kICJnaXQgZ3JlcCIgZm9yIGZpeGVkIHN0cmluZ3MgaGF2ZSBiZWVuIG9wdGltaXplZC4KKworKiAiZ2l0IG1lcmdldG9vbCIgbGVhcm5lZCAteSgtLW5vLXByb21wdCkgb3B0aW9uIHRvIGRpc2FibGUgcHJvbXB0aW5nLgorCisqICJnaXQgcmViYXNlIC1pIiBjYW4gdHJhbnNwbGFudCBhIGhpc3RvcnkgZG93biB0byByb290IHRvIGVsc2V3aGVyZQorICB3aXRoIC0tcm9vdCBvcHRpb24uCisKKyogImdpdCByZXNldCAtLW1lcmdlIiBpcyBhIG5ldyBtb2RlIHRoYXQgd29ya3Mgc2ltaWxhciB0byB0aGUgd2F5CisgICJnaXQgY2hlY2tvdXQiIHN3aXRjaGVzIGJyYW5jaGVzLCB0YWtpbmcgdGhlIGxvY2FsIGNoYW5nZXMgd2hpbGUKKyAgc3dpdGNoaW5nIHRvIGFub3RoZXIgY29tbWl0LgorCisqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgbGVhcm5lZCAtLW5vLWZldGNoIG9wdGlvbi4KKworKiAiZ2l0IHRhZyIgbGVhcm5lZCAtLWNvbnRhaW5zIHRoYXQgd29ya3MgdGhlIHNhbWUgd2F5IGFzIHRoZSBzYW1lIG9wdGlvbgorICBmcm9tICJnaXQgYnJhbmNoIi4KKworCitGaXhlcyBzaW5jZSB2MS42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjYuMS5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworSGVyZSBhcmUgZml4ZXMgdGhhdCB0aGlzIHJlbGVhc2UgaGFzLCBidXQgaGF2ZSBub3QgYmVlbiBiYWNrcG9ydGVkIHRvCit2MS42LjEuWCBzZXJpZXMuCisKKyogImdpdC1hZGQgc3ViL2ZpbGUiIHdoZW4gc3ViIGlzIGEgc3VibW9kdWxlIGluY29ycmVjdGx5IGFkZGVkIHRoZSBwYXRoIHRvCisgIHRoZSBzdXBlcnByb2plY3QuCisKKyogImdpdCBidW5kbGUiIGRpZCBub3QgZXhjbHVkZSBhbm5vdGF0ZWQgdGFncyBldmVuIHdoZW4gYSByYW5nZSBnaXZlbgorICBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2FudGVkIHRvLgorCisqICJnaXQgZmlsdGVyLWJyYW5jaCIgdW5uZWNlc3NhcmlseSByZWZ1c2VkIHRvIHdvcmsgd2hlbiB5b3UgaGFkCisgIGNoZWNrZWQgb3V0IGEgZGlmZmVyZW50IGNvbW1pdCBmcm9tIHdoYXQgaXMgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdAorICBpbmRleCBpbiBhIHN1Ym1vZHVsZS4KKworKiAiZ2l0IGZpbHRlci1icmFuY2giIGluY29ycmVjdGx5IHRyaWVkIHRvIHVwZGF0ZSBhIG5vbmV4aXN0ZW50IHdvcmsgdHJlZQorICBhdCB0aGUgZW5kIHdoZW4gaXQgaXMgcnVuIGluIGEgYmFyZSByZXBvc2l0b3J5LgorCisqICJnaXQgZ2MiIGRpZCBub3Qgd29yayBpZiB5b3VyIHJlcG9zaXRvcnkgd2FzIGNyZWF0ZWQgd2l0aCBhbiBhbmNpZW50IGdpdAorICBhbmQgbmV2ZXIgaGFkIGFueSBwYWNrIGZpbGVzIGluIGl0IGJlZm9yZS4KKworKiAiZ2l0IG1lcmdldG9vbCIgdXNlZCB0byBpZ25vcmUgYXV0b2NybGYgYW5kIG90aGVyIGF0dHJpYnV0ZXMKKyAgYmFzZWQgY29udGVudCByZXdyaXRpbmcuCisKKyogYnJhbmNoIHN3aXRjaGluZyBhbmQgbWVyZ2VzIGhhZCBhIHNpbGx5IGJ1ZyB0aGF0IGRpZCBub3QgdmFsaWRhdGUKKyAgdGhlIGNvcnJlY3QgZGlyZWN0b3J5IHdoZW4gbWFraW5nIHN1cmUgYW4gZXhpc3Rpbmcgc3ViZGlyZWN0b3J5IGlzCisgIGNsZWFuLgorCisqICJnaXQgLXAgY21kIiB3aGVuIGNtZCBpcyBub3QgYSBidWlsdC1pbiBvbmUgbGVmdCB0aGUgZGlzcGxheSBpbiBmdW5ueSBzdGF0ZQorICB3aGVuIGtpbGxlZCBpbiB0aGUgbWlkZGxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQwMGI3MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuMS50eHQKQEAgLTAsMCArMSwxMCBAQAorR0lUIHYxLjYuMy4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBjaGVja291dCAtYiBuZXctYnJhbmNoIiB3aXRoIGEgc3RhZ2VkIGNoYW5nZSBpbiB0aGUgaW5kZXgKKyAgaW5jb3JyZWN0bHkgcHJpbWVkIHRoZSBpbi1pbmRleCBjYWNoZS10cmVlLCByZXN1bHRpbmcgYSB3cm9uZyB0cmVlCisgIG9iamVjdCB0byBiZSB3cml0dGVuIG91dCBvZiB0aGUgaW5kZXguICBUaGlzIGlzIGEgZ3JhdmUgcmVncmVzc2lvbgorICBzaW5jZSB0aGUgbGFzdCAxLjYuMi5YIG1haW50ZW5hbmNlIHJlbGVhc2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmYzZjAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4yLnR4dApAQCAtMCwwICsxLDYxIEBACitHSVQgdjEuNi4zLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi4zLjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgZmV3IGNvZGVwYXRocyBwaWNrZWQgdXAgdGhlIGZpcnN0IGZldyBieXRlcyBmcm9tIGFuIHNoYTFbXSBieQorICAgY2FzdGluZyB0aGUgKGNoYXIgKikgcG9pbnRlciB0byAoaW50ICopOyBHQ0MgNC40IGRpZCBub3QgbGlrZSB0aGlzLAorICAgYW5kIGFib3J0ZWQgY29tcGlsYXRpb24uCisKKyAqIFNvbWUgdW5saW5rKDIpIGZhaWx1cmVzIHdlbnQgdW5kaWFnbm9zZWQuCisKKyAqIFRoZSAicmVjdXJzaXZlIiBtZXJnZSBzdHJhdGVneSBtaXNiZWhhdmVkIHdoZW4gZmFjZWQgcmVuYW1lL2RlbGV0ZQorICAgY29uZmxpY3RzIHdoaWxlIGNvbWluZyB1cCB3aXRoIGFuIGludGVybWVkaWF0ZSBtZXJnZSBiYXNlLgorCisgKiBUaGUgbG93LWxldmVsIG1lcmdlIGFsZ29yaXRobSBkaWQgbm90IGhhbmRsZSBhIGRlZ2VuZXJhdGUgY2FzZSBvZgorICAgbWVyZ2luZyBhIGZpbGUgd2l0aCBpdHNlbGYgdXNpbmcgaXRzZWxmIGFzIHRoZSBjb21tb24gYW5jZXN0b3IKKyAgIGdyYWNlZnVsbHkuICBJdCBzaG91bGQgcHJvZHVjZSB0aGUgZmlsZSBpdHNlbGYsIGJ1dCBpbnN0ZWFkCisgICBwcm9kdWNlZCBhbiBlbXB0eSByZXN1bHQuCisKKyAqIEdJVF9UUkFDRSBtZWNoYW5pc20gc2VnZmF1bHRlZCB3aGVuIHRyYWNpbmcgYSBzaGVsbC1xdW90ZWQgYWxpYXNlcy4KKworICogT3BlbkJTRCBhbHNvIHVzZXMgc3RfY3RpbXNwZWMgaW4gInN0cnVjdCBzdGF0IiwgaW5zdGVhZCBvZiAic3RfY3RpbSIuCisKKyAqIFdpdGggTk9fQ1JPU1NfRElSRUNUT1JZX0hBUkRMSU5LUywgIm1ha2UgaW5zdGFsbCIgY2FuIGJlIHRvbGQgbm90IHRvCisgICBjcmVhdGUgaGFyZGxpbmtzIGJldHdlZW4gJChnaXRleGVjZGlyKS9naXQtJGJ1aWx0aW5fY29tbWFuZHMgYW5kCisgICAkKGJpbmRpcikvZ2l0LgorCisgKiBjb21tYW5kIGNvbXBsZXRpb24gY29kZSBpbiBiYXNoIGRpZCBub3QgcmVsaWFibHkgZGV0ZWN0IHRoYXQgd2UgYXJlCisgICBpbiBhIGJhcmUgcmVwb3NpdG9yeS4KKworICogImdpdCBhZGQgLiIgaW4gYW4gZW1wdHkgZGlyZWN0b3J5IGNvbXBsYWluZWQgdGhhdCBwYXRoc3BlYyAiLiIgZGlkIG5vdAorICAgbWF0Y2ggYW55dGhpbmcsIHdoaWNoIG1heSBiZSB0ZWNobmljYWxseSBjb3JyZWN0LCBidXQgbm90IHVzZWZ1bC4gIFdlCisgICBzaWxlbnRseSBtYWtlIGl0IGEgbm8tb3Agbm93LgorCisgKiAiZ2l0IGFkZCAtcCIgKGFuZCAicGF0Y2giIGFjdGlvbiBpbiAiZ2l0IGFkZCAtaSIpIHdhcyBicm9rZW4gd2hlbgorICAgdGhlIGZpcnN0IGh1bmsgdGhhdCBhZGRzIGEgbGluZSBhdCB0aGUgdG9wIHdhcyBzcGxpdCBpbnRvIHR3byBhbmQKKyAgIGJvdGggaGFsdmVzIGFyZSBtYXJrZWQgdG8gYmUgdXNlZC4KKworICogImdpdCBibGFtZSBwYXRoIiBtaXNiZWhhdmVkIGF0IHRoZSBjb21taXQgd2hlcmUgcGF0aCBiZWNhbWUgZmlsZQorICAgZnJvbSBhIGRpcmVjdG9yeSB3aXRoIHNvbWUgZmlsZXMgaW4gaXQuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiBoYWQgYSBzZWdmYXVsdGluZyBidWcgd2hlbiBkZWFsaW5nIHdpdGggYSB0YWcgb2JqZWN0CisgICBjcmVhdGVkIGJ5IGFuIGFuY2llbnQgZ2l0LgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCAtayIgc3RpbGwgYWRkZWQgcGF0Y2ggbnVtYmVycyBpZiBmb3JtYXQubnVtYmVyZWQKKyAgIGNvbmZpZ3VyYXRpb24gd2FzIHNldC4KKworICogImdpdCBncmVwIC0tY29sb3IgJyciIGRpZCBub3QgdGVybWluYXRlLiAgVGhlIGNvbW1hbmQgYWxzbyBoYWQKKyAgIHN1YnRsZSBidWdzIHdpdGggaXRzIC13IG9wdGlvbi4KKworICogaHR0cC1wdXNoIGhhZCBhIHNtYWxsIHVzZS1hZnRlci1mcmVlIGJ1Zy4KKworICogImdpdCBwdXNoIiB3YXMgY29udmVydGluZyBPRlNfREVMVEEgcGFjayByZXByZXNlbnRhdGlvbiBpbnRvIGxlc3MKKyAgIGVmZmljaWVudCBSRUZfREVMVEEgcmVwcmVzZW50YXRpb24gdW5jb25kaXRpb25hbGx5IHVwb24gdHJhbnNmZXIsCisgICBtYWtpbmcgdGhlIHRyYW5zZmVycmVkIGRhdGEgdW5uZWNlc3NhcmlseSBsYXJnZXIuCisKKyAqICJnaXQgcmVtb3RlIHNob3cgb3JpZ2luIiBzZWdmYXVsdGVkIHdoZW4gb3JpZ2luIHdhcyBzdGlsbCBlbXB0eS4KKworTWFueSBvdGhlciBnZW5lcmFsIHVzYWJpbGl0eSB1cGRhdGVzIGFyb3VuZCBoZWxwIHRleHQsIGRpYWdub3N0aWMgbWVzc2FnZXMKK2FuZCBkb2N1bWVudGF0aW9uIGFyZSBpbmNsdWRlZCBhcyB3ZWxsLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyODM5OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuMy50eHQKQEAgLTAsMCArMSwzOCBAQAorR0lUIHYxLjYuMy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuMy4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFyY2hpdmUiIHJ1bm5pbmcgb24gQ3lnd2luIGNhbiBnZXQgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcC4KKworICogImdpdCBkYWVtb24iIGRpZCBub3QgY29ycmVjdGx5IHBhcnNlIHRoZSBpbml0aWFsIGxpbmUgdGhhdCBjYXJyaWVzCisgICB2aXJ0dWFsIGhvc3QgcmVxdWVzdCBpbmZvcm1hdGlvbi4KKworICogImdpdCBkaWZmIC0tdGV4dGNvbnYiIGxlYWtlZCBtZW1vcnkgYmFkbHkgd2hlbiB0aGUgdGV4dGNvbnYgZmlsdGVyCisgICBlcnJvcmVkIG91dC4KKworICogVGhlIGJ1aWx0LWluIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gcGljayBmdW5jdGlvbiBuYW1lcyB0byBwdXQgb24KKyAgIGh1bmsgaGVhZGVyIGxpbmVzIGZvciBqYXZhIGFuZCBvYmpjIHdlcmUgdmVyeSBpbmVmZmljaWVudGx5IHdyaXR0ZW4uCisKKyAqIGluIGNlcnRhaW4gZXJyb3Igc2l0dWF0aW9ucyBnaXQtZmV0Y2ggKGFuZCBnaXQtY2xvbmUpIG9uIFdpbmRvd3MgZGlkbid0CisgICBkZXRlY3QgY29ubmVjdGlvbiBhYm9ydCBhbmQgZW5kZWQgdXAgd2FpdGluZyBpbmRlZmluaXRlbHkuCisKKyAqIGltcG9ydC10YXJzIHNjcmlwdCAoaW4gY29udHJpYikgZGlkIG5vdCBpbXBvcnQgc3ltYm9saWMgbGlua3MgY29ycmVjdGx5LgorCisgKiBodHRwLmMgdXNlZCBDVVJMT1BUX1NTTEtFWSBldmVuIG9uIGxpYmNVUkwgdmVyc2lvbiA3LjkuMiwgZXZlbiB0aG91Z2gKKyAgIGl0IHdhcyBvbmx5IGF2YWlsYWJsZSBzdGFydGluZyA3LjkuMy4KKworICogbG93LWxldmVsIGZpbGVsZXZlbCBtZXJnZSBkcml2ZXIgdXNlZCByZXR1cm4gdmFsdWUgZnJvbSBzdHJkdXAoKQorICAgd2l0aG91dCBjaGVja2luZyBpZiB3ZSByYW4gb3V0IG9mIG1lbW9yeS4KKworICogImdpdCByZWJhc2UgLWkiIGxlZnQgc3RyYXkgY2xvc2luZyBwYXJlbnRoZXNpcyBpbiBpdHMgcmVmbG9nIG1lc3NhZ2UuCisKKyAqICJnaXQgcmVtb3RlIHNob3ciIGRpZCBub3Qgc2hvdyBhbGwgdGhlIFVSTHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBuYW1lZAorICAgcmVtb3RlLCBldmVuIHRob3VnaCAiZ2l0IHJlbW90ZSAtdiIgZGlkLiAgTWFkZSB0aGVtIGNvbnNpc3RlbnQgYnkKKyAgIG1ha2luZyB0aGUgZm9ybWVyIHNob3cgYWxsIFVSTHMuCisKKyAqICJ3aGl0ZXNwYWNlIiBhdHRyaWJ1dGUgdGhhdCBpcyBzZXQgd2FzIG1lYW50IHRvIGRldGVjdCBhbGwgZXJyb3JzIGtub3duCisgICB0byBnaXQsIGJ1dCBpdCB0b2xkIGdpdCB0byBpZ25vcmUgdHJhaWxpbmcgY2FycmlhZ2UtcmV0dXJucy4KKworSW5jbHVkZXMgb3RoZXIgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDQ2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi4zLjQudHh0CkBAIC0wLDAgKzEsMzYgQEAKK0dJVCB2MS42LjMuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjMuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhZGQgLS1uby1pZ25vcmUtZXJyb3JzIiBkaWQgbm90IG92ZXJyaWRlIGNvbmZpZ3VyZWQKKyAgIGFkZC5pZ25vcmUtZXJyb3JzIGNvbmZpZ3VyYXRpb24uCisKKyAqICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgZGlkIG5vdCBmaXggdHJhaWxpbmcgd2hpdGVzcGFjZSBvbiBhbgorICAgaW5jb21wbGV0ZSBsaW5lLgorCisgKiAiZ2l0IGJyYW5jaCIgb3BlbmVkIHRvbyBtYW55IGNvbW1pdCBvYmplY3RzIHVubmVjZXNzYXJpbHkuCisKKyAqICJnaXQgY2hlY2tvdXQgLWYgJGNvbW1pdCIgd2l0aCBhIHBhdGggdGhhdCBpcyBhIGZpbGUgKG9yIGEgc3ltbGluaykgaW4KKyAgIHRoZSB3b3JrIHRyZWUgdG8gYSBjb21taXQgdGhhdCBoYXMgYSBkaXJlY3RvcnkgYXQgdGhlIHBhdGggaXNzdWVkIGFuCisgICB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlLgorCisgKiAiZ2l0IGRpZmYgLWMvLS1jYyIgd2FzIHZlcnkgaW5lZmZpY2llbnQgaW4gY29hbGVzY2luZyB0aGUgcmVtb3ZlZCBsaW5lcworICAgc2hhcmVkIGJldHdlZW4gcGFyZW50cy4KKworICogImdpdCBkaWZmIC1jLy0tY2MiIHNob3dlZCByZW1vdmVkIGxpbmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBmaWxlCisgICBpbmNvcnJlY3RseS4KKworICogImdpdCByZW1vdGUgc2hvdyBuaWNrbmFtZSIgZGlkIG5vdCBob25vciBjb25maWd1cmVkCisgICByZW1vdGUubmlja25hbWUudXBsb2FkcGFjayB3aGVuIGluc3BlY3RpbmcgdGhlIGJyYW5jaGVzIGF0IHRoZSByZW1vdGUuCisKKyAqICJnaXQgcmVxdWVzdC1wdWxsIiB3aGVuIHRhbGtpbmcgdG8gdGhlIHRlcm1pbmFsIGZvciBhIHByZXZpZXcKKyAgIHNob3dlZCBzb21lIG9mIHRoZSBvdXRwdXQgaW4gdGhlIHBhZ2VyLgorCisgKiAiZ2l0IHJlcXVlc3QtcHVsbCBzdGFydCBuaWNrbmFtZSBbZW5kXSIgZGlkIG5vdCBob25vciBjb25maWd1cmVkCisgICByZW1vdGUubmlja25hbWUudXBsb2FkcGFjayB3aGVuIGl0IHJhbiBnaXQtbHMtcmVtb3RlIGFnYWluc3QgdGhlIHJlbW90ZQorICAgcmVwb3NpdG9yeSB0byBsZWFybiB0aGUgY3VycmVudCB0aXAgb2YgYnJhbmNoZXMuCisKK0luY2x1ZGVzIG90aGVyIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgbWlub3IgZml4ZXMuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4YzY4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjMudHh0CkBAIC0wLDAgKzEsMTgyIEBACitHSVQgdjEuNi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitXaXRoIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UsICJnaXQgcHVzaCIgaW50byBhIGJyYW5jaCB0aGF0IGlzCitjdXJyZW50bHkgY2hlY2tlZCBvdXQgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuICBZb3UgY2FuIGNob29zZQord2hhdCBzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKK1RvIGVhc2UgdGhlIHRyYW5zaXRpb24gcGxhbiwgdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5IG9mIHN1Y2ggYQorcHVzaCBydW5uaW5nIHRoaXMgcmVsZWFzZSB3aWxsIGlzc3VlIGEgYmlnIHdhcm5pbmcgd2hlbiB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgbWlzc2luZy4gIFBsZWFzZSByZWZlciB0bzoKKworICBodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvR2l0RmFxI25vbi1iYXJlCisgIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8xMDc3NTgvZm9jdXM9MTA4MDA3CisKK2ZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlYXNvbiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCB0aGUKK3RyYW5zaXRpb24gcGxhbi4KKworRm9yIGEgc2ltaWxhciByZWFzb24sICJnaXQgcHVzaCAkdGhlcmUgOiRraWxsZWQiIHRvIGRlbGV0ZSB0aGUgYnJhbmNoCiska2lsbGVkIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkgJHRoZXJlLCBpZiAka2lsbGVkIGJyYW5jaCBpcyB0aGUgY3VycmVudAorYnJhbmNoIHBvaW50ZWQgYXQgYnkgaXRzIEhFQUQsIGdldHMgYSBsYXJnZSB3YXJuaW5nLiAgWW91IGNhbiBjaG9vc2Ugd2hhdAorc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKK3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5LgorCitXaGVuIHRoZSB1c2VyIGRvZXMgbm90IHRlbGwgImdpdCBwdXNoIiB3aGF0IHRvIHB1c2gsIGl0IGhhcyBhbHdheXMKK3B1c2hlZCBtYXRjaGluZyByZWZzLiAgRm9yIHNvbWUgcGVvcGxlIGl0IGlzIHVuZXhwZWN0ZWQsIGFuZCBhIG5ldworY29uZmlndXJhdGlvbiB2YXJpYWJsZSBwdXNoLmRlZmF1bHQgaGFzIGJlZW4gaW50cm9kdWNlZCB0byBhbGxvdworY2hhbmdpbmcgYSBkaWZmZXJlbnQgZGVmYXVsdCBiZWhhdmlvdXIuICBUbyBhZHZlcnRpc2UgdGhlIG5ldyBmZWF0dXJlLAorYSBiaWcgd2FybmluZyBpcyBpc3N1ZWQgaWYgdGhpcyBpcyBub3QgY29uZmlndXJlZCBhbmQgYSBnaXQgcHVzaCB3aXRob3V0Cithcmd1bWVudHMgaXMgYXR0ZW1wdGVkLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuNi4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworKiB2YXJpb3VzIGdpdC1zdm4gdXBkYXRlcy4KKworKiBnaXQtZ3VpIHVwZGF0ZXMsIGluY2x1ZGluZyBhbiB1cGRhdGUgdG8gUnVzc2lhbiB0cmFuc2xhdGlvbiwgYW5kIGEKKyAgZml4IHRvIGFuIGluZmluaXRlIGxvb3Agd2hlbiBzaG93aW5nIGFuIGVtcHR5IGRpZmYuCisKKyogZ2l0ayB1cGRhdGVzLCBpbmNsdWRpbmcgYW4gdXBkYXRlIHRvIFJ1c3NpYW4gdHJhbnNsYXRpb24gYW5kIGltcHJvdmVkIFdpbmRvd3MKKyAgc3VwcG9ydC4KKworKHBlcmZvcm1hbmNlKQorCisqIG1hbnkgdXNlcyBvZiBsc3RhdCgyKSBpbiB0aGUgY29kZXBhdGggZm9yICJnaXQgY2hlY2tvdXQiIGhhdmUgYmVlbgorICBvcHRpbWl6ZWQgb3V0LgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyogQm9vbGVhbiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHllcy9ubyBjYW4gYmUgd3JpdHRlbiBhcyBvbi9vZmYuCisKKyogcnN5bmM6L3BhdGgvdG8vcmVwbyBjYW4gYmUgdXNlZCB0byBydW4gZ2l0IG92ZXIgcnN5bmMgZm9yIGxvY2FsCisgIHJlcG9zaXRvcmllcy4gIEl0IG1heSBub3QgYmUgdXNlZnVsIGluIHByYWN0aWNlOyBtZWFudCBwcmltYXJpbHkgZm9yCisgIHRlc3RpbmcuCisKKyogaHR0cCB0cmFuc3BvcnQgbGVhcm5lZCB0byBwcm9tcHQgYW5kIHVzZSBwYXNzd29yZCB3aGVuIGZldGNoaW5nIGZyb20gb3IKKyAgcHVzaGluZyB0byBodHRwOi8vdXNlckBob3N0Lnh6LyBVUkwuCisKKyogKG1zeXNnaXQpIHByb2dyZXNzIG91dHB1dCB0aGF0IGlzIHNlbnQgb3ZlciB0aGUgc2lkZWJhbmQgcHJvdG9jb2wgY2FuCisgIGJlIGhhbmRsZWQgYXBwcm9wcmlhdGVseSBpbiBXaW5kb3dzIGNvbnNvbGUuCisKKyogIi0tcHJldHR5PTxzdHlsZT4iIG9wdGlvbiB0byB0aGUgbG9nIGZhbWlseSBvZiBjb21tYW5kcyBjYW4gbm93IGJlCisgIHNwZWxsZWQgYXMgIi0tZm9ybWF0PTxzdHlsZT4iLiAgSW4gYWRkaXRpb24sIC0tZm9ybWF0PSVmb3JtYXRzdHJpbmcKKyAgaXMgYSBzaG9ydC1oYW5kIGZvciAtLXByZXR0eT10Zm9ybWF0OiVmb3JtYXRzdHJpbmcuCisKKyogIi0tb25lbGluZSIgaXMgYSBzeW5vbnltIGZvciAiLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQiLgorCisqICItLWdyYXBoIiB0byB0aGUgImdpdCBsb2ciIGZhbWlseSBjYW4gZHJhdyB0aGUgY29tbWl0IGFuY2VzdHJ5IGdyYXBoCisgIGluIGNvbG9ycy4KKworKiBJZiB5b3UgcmVhbGl6ZSB0aGF0IHlvdSBib3RjaGVkIHRoZSBwYXRjaCB3aGVuIHlvdSBhcmUgZWRpdGluZyBodW5rcworICB3aXRoIHRoZSAnZWRpdCcgYWN0aW9uIGluIGdpdC1hZGQgLWkvLXAsIHlvdSBjYW4gYWJvcnQgdGhlIGVkaXRvciB0bworICB0ZWxsIGdpdCBub3QgdG8gYXBwbHkgaXQuCisKKyogQHstMX0gaXMgYSBuZXcgd2F5IHRvIHJlZmVyIHRvIHRoZSBsYXN0IGJyYW5jaCB5b3Ugd2VyZSBvbiBpbnRyb2R1Y2VkIGluCisgIDEuNi4yLCBidXQgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gZGlkIG5vdCB0ZWFjaCB0aGlzIHRvIGEgZmV3CisgIGNvbW1hbmRzLiAgTm93IHRoZSBzeW50YXggd29ya3Mgd2l0aCAiYnJhbmNoIC1tIEB7LTF9IG5ld25hbWUiLgorCisqIGdpdC1hcmNoaXZlIGxlYXJuZWQgLS1vdXRwdXQ9PGZpbGU+IG9wdGlvbi4KKworKiBnaXQtYXJjaGl2ZSB0YWtlcyBhdHRyaWJ1dGVzIGZyb20gdGhlIHRyZWUgYmVpbmcgYXJjaGl2ZWQ7IHN0cmljdGx5CisgIHNwZWFraW5nLCB0aGlzIGlzIGFuIGluY29tcGF0aWJsZSBiZWhhdmlvdXIgY2hhbmdlLCBidXQgaXMgYSBnb29kIG9uZS4KKyAgVXNlIC0td29ya3RyZWUtYXR0cmlidXRlcyBvcHRpb24gdG8gYWxsb3cgaXQgdG8gcmVhZCBhdHRyaWJ1dGVzIGZyb20KKyAgdGhlIHdvcmsgdHJlZSBhcyBiZWZvcmUgKGRlcHJlY2F0ZWQgZ2l0LXRhciB0cmVlIGNvbW1hbmQgYWx3YXlzIHJlYWRzCisgIGF0dHJpYnV0ZXMgZnJvbSB0aGUgd29yayB0cmVlKS4KKworKiBnaXQtYmlzZWN0IHNob3dzIG5vdCBqdXN0IHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGNvbW1pdHMgd2hvc2UgZ29vZG5lc3MKKyAgaXMgdW5rbm93biwgYnV0IGFsc28gc2hvd3MgdGhlIGVzdGltYXRlZCBudW1iZXIgb2YgcmVtYWluaW5nIHJvdW5kcy4KKworKiBZb3UgY2FuIGdpdmUgLS1kYXRlPTxmb3JtYXQ+IG9wdGlvbiB0byBnaXQtYmxhbWUuCisKKyogImdpdC1icmFuY2ggLXIiIHNob3dzIEhFQUQgc3ltcmVmIHRoYXQgcG9pbnRzIGF0IGEgcmVtb3RlIGJyYW5jaCBpbgorICBpbnRlcmVzdCBvZiBlYWNoIHRyYWNrZWQgcmVtb3RlIHJlcG9zaXRvcnkuCisKKyogImdpdC1icmFuY2ggLXYgLXYiIGlzIGEgbmV3IHdheSB0byBnZXQgbGlzdCBvZiBuYW1lcyBmb3IgYnJhbmNoZXMgYW5kIHRoZQorICAidXBzdHJlYW0iIGJyYW5jaCBmb3IgdGhlbS4KKworKiBnaXQtY29uZmlnIGxlYXJuZWQgLWUgb3B0aW9uIHRvIG9wZW4gYW4gZWRpdG9yIHRvIGVkaXQgdGhlIGNvbmZpZyBmaWxlCisgIGRpcmVjdGx5LgorCisqIGdpdC1jbG9uZSBydW5zIHBvc3QtY2hlY2tvdXQgaG9vayB3aGVuIHJ1biB3aXRob3V0IC0tbm8tY2hlY2tvdXQuCisKKyogZ2l0LWRpZmZ0b29sIGlzIG5vdyBwYXJ0IG9mIHRoZSBvZmZpY2lhbGx5IHN1cHBvcnRlZCBjb21tYW5kLCBwcmltYXJpbHkKKyAgbWFpbnRhaW5lZCBieSBEYXZpZCBBZ3VpbGFyLgorCisqIGdpdC1mb3ItZWFjaC1yZWYgbGVhcm5lZCBhIG5ldyAidXBzdHJlYW0iIHRva2VuLgorCisqIGdpdC1mb3JtYXQtcGF0Y2ggY2FuIGJlIHRvbGQgdG8gdXNlIGF0dGFjaG1lbnQgd2l0aCBhIG5ldyBjb25maWd1cmF0aW9uLAorICBmb3JtYXQuYXR0YWNoLgorCisqIGdpdC1mb3JtYXQtcGF0Y2ggY2FuIGJlIHRvbGQgdG8gcHJvZHVjZSBkZWVwIG9yIHNoYWxsb3cgbWVzc2FnZSB0aHJlYWRzLgorCisqIGdpdC1mb3JtYXQtcGF0Y2ggY2FuIGJlIHRvbGQgdG8gYWx3YXlzIGFkZCBzaWduLW9mZiB3aXRoIGEgY29uZmlndXJhdGlvbgorICB2YXJpYWJsZS4KKworKiBnaXQtZm9ybWF0LXBhdGNoIGxlYXJuZWQgZm9ybWF0LmhlYWRlcnMgY29uZmlndXJhdGlvbiB0byBhZGQgZXh0cmEKKyAgaGVhZGVyIGZpZWxkcyB0byB0aGUgb3V0cHV0LiAgVGhpcyBiZWhhdmlvdXIgaXMgc2ltaWxhciB0byB0aGUgZXhpc3RpbmcKKyAgLS1hZGQtaGVhZGVyPTxoZWFkZXI+IG9wdGlvbiBvZiB0aGUgY29tbWFuZC4KKworKiBnaXQtZm9ybWF0LXBhdGNoIGdpdmVzIGh1bWFuIHJlYWRhYmxlIG5hbWVzIHRvIHRoZSBhdHRhY2hlZCBmaWxlcywgd2hlbgorICB0b2xkIHRvIHNlbmQgcGF0Y2hlcyBhcyBhdHRhY2htZW50cy4KKworKiBnaXQtZ3JlcCBsZWFybmVkIHRvIGhpZ2hsaWdodCB0aGUgZm91bmQgc3Vic3RyaW5ncyBpbiBjb2xvci4KKworKiBnaXQtaW1hcC1zZW5kIGxlYXJuZWQgdG8gd29yayBhcm91bmQgVGh1bmRlcmJpcmQncyBpbmFiaWxpdHkgdG8gZWFzaWx5CisgIGRpc2FibGUgZm9ybWF0PWZsb3dlZCB3aXRoIGEgbmV3IGNvbmZpZ3VyYXRpb24sIGltYXAucHJlZm9ybWF0dGVkSFRNTC4KKworKiBnaXQtcmViYXNlIGNhbiBiZSB0b2xkIHRvIHJlYmFzZSB0aGUgc2VyaWVzIGV2ZW4gaWYgeW91ciBicmFuY2ggaXMgYQorICBkZXNjZW5kYW50IG9mIHRoZSBjb21taXQgeW91IGFyZSByZWJhc2luZyBvbnRvIHdpdGggLS1mb3JjZS1yZWJhc2UKKyAgb3B0aW9uLgorCisqIGdpdC1yZWJhc2UgY2FuIGJlIHRvbGQgdG8gcmVwb3J0IGRpZmZzdGF0IHdpdGggdGhlIC0tc3RhdCBvcHRpb24uCisKKyogT3V0cHV0IGZyb20gZ2l0LXJlbW90ZSBjb21tYW5kIGhhcyBiZWVuIHZhc3RseSBpbXByb3ZlZC4KKworKiAiZ2l0IHJlbW90ZSB1cGRhdGUgLS1wcnVuZSAkcmVtb3RlIiB1cGRhdGVzIGZyb20gdGhlIG5hbWVkIHJlbW90ZSBhbmQKKyAgdGhlbiBwcnVuZXMgc3RhbGUgdHJhY2tpbmcgYnJhbmNoZXMuCisKKyogZ2l0LXNlbmQtZW1haWwgbGVhcm5lZCAtLWNvbmZpcm0gb3B0aW9uIHRvIHJldmlldyB0aGUgQ2M6IGxpc3QgYmVmb3JlCisgIHNlbmRpbmcgdGhlIG1lc3NhZ2VzIG91dC4KKworKGRldmVsb3BlcnMpCisKKyogVGVzdCBzY3JpcHRzIGNhbiBiZSBydW4gdW5kZXIgdmFsZ3JpbmQuCisKKyogVGVzdCBzY3JpcHRzIGNhbiBiZSBydW4gd2l0aCBpbnN0YWxsZWQgZ2l0LgorCisqIE1ha2VmaWxlIGxlYXJuZWQgJ2NvdmVyYWdlJyBvcHRpb24gdG8gcnVuIHRoZSB0ZXN0IHN1aXRlcyB3aXRoCisgIGNvdmVyYWdlIHRyYWNraW5nIGVuYWJsZWQuCisKKyogQnVpbGRpbmcgdGhlIG1hbnBhZ2VzIHdpdGggZG9jYm9vay14c2wgYmV0d2VlbiAxLjY5LjEgYW5kIDEuNzEuMSBub3cKKyAgcmVxdWlyZXMgc2V0dGluZyBET0NCT09LX1NVUFBSRVNTX1NQIHRvIHdvcmsgYXJvdW5kIGEgZG9jYm9vay14c2wgYnVnLgorICBUaGlzIHdvcmthcm91bmQgdXNlZCB0byBiZSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBjYXVzZXMgcHJvYmxlbXMKKyAgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBkb2Nib29rLXhzbC4gIEluIGFkZGl0aW9uLCB0aGVyZSBhcmUgYSBmZXcgbW9yZQorICBrbm9icyB5b3UgY2FuIHR3ZWFrIHRvIHdvcmsgYXJvdW5kIGlzc3VlcyB3aXRoIHZhcmlvdXMgdmVyc2lvbnMgb2YgdGhlCisgIGRvY2Jvb2steHNsIHBhY2thZ2UuICBTZWUgY29tbWVudHMgaW4gRG9jdW1lbnRhdGlvbi9NYWtlZmlsZSBmb3IgZGV0YWlscy4KKworKiBTdXBwb3J0IGZvciBidWlsZGluZyBhbmQgdGVzdGluZyBhIHN1YnNldCBvZiBnaXQgb24gYSBzeXN0ZW0gd2l0aG91dCBhCisgIHdvcmtpbmcgcGVybCBoYXMgYmVlbiBpbXByb3ZlZC4KKworCitGaXhlcyBzaW5jZSB2MS42LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjYuMi5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworSGVyZSBhcmUgZml4ZXMgdGhhdCB0aGlzIHJlbGVhc2UgaGFzLCBidXQgaGF2ZSBub3QgYmVlbiBiYWNrcG9ydGVkIHRvCit2MS42LjIuWCBzZXJpZXMuCisKKyogImdpdC1hcHBseSIgcmVqZWN0ZWQgYSBwYXRjaCB0aGF0IHN3YXBzIHR3byBmaWxlcyAoaS5lLiByZW5hbWVzIEEgdG8gQgorICBhbmQgQiB0byBBIGF0IHRoZSBzYW1lIHRpbWUpLiAgTWF5IG5lZWQgdG8gYmUgYmFja3BvcnRlZCBieSBjaGVycnkKKyAgcGlja2luZyBkOGM4MWRmIGFuZCB0aGVuIDdmYWMwZWUpLgorCisqIFRoZSBpbml0aWFsIGNoZWNrb3V0IGRpZCBub3QgcmVhZCB0aGUgYXR0cmlidXRlcyBmcm9tIHRoZSAuZ2l0YXR0cmlidXRlCisgIGZpbGUgdGhhdCBpcyBiZWluZyBjaGVja2VkIG91dC4KKworKiBnaXQtZ2Mgc3BlbnQgZXhjZXNzaXZlIGFtb3VudCBvZiB0aW1lIHRvIGRlY2lkZSBpZiBhbiBvYmplY3QgYXBwZWFycworICBpbiBhIGxvY2FsbHkgZXhpc3RpbmcgcGFjayAoaWYgbmVlZGVkLCBiYWNrcG9ydCBieSBtZXJnaW5nIDY5ZTAyMGEpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQzOWU0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuMS50eHQKQEAgLTAsMCArMSw0NiBAQAorR0lUIHYxLjYuNC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFuIHVucXVvdGVkIHZhbHVlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIHdoZW4gaXQgY29udGFpbnMgbW9yZSB0aGFuCisgICBvbmUgd2hpdGVzcGFjZXMgaW4gYSByb3csIGdvdCB0aGVtIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUgc3BhY2UuCisKKyAqICJnaXQgYW0iIHVzZWQgdG8gYWNjZXB0IGEgc2luZ2xlIHBpZWNlIG9mIGUtbWFpbCBwZXIgZmlsZSAobm90IGEgbWJveCkKKyAgIGFzIGl0cyBpbnB1dCwgYnV0IG11bHRpcGxlIGlucHV0IGZvcm1hdCBzdXBwb3J0IGluIHYxLjYuNCBicm9rZSBpdC4KKyAgIEFwcGFyZW50bHkgbWFueSBwZW9wbGUgaGF2ZSBiZWVuIGRlcGVuZGluZyBvbiB0aGlzIGZlYXR1cmUuCisKKyAqIFRoZSBzaG9ydCBoZWxwIHRleHQgZm9yICJnaXQgZmlsdGVyLWJyYW5jaCIgY29tbWFuZCB3YXMgYSBzaW5nbGUgbG9uZworICAgbGluZSwgd3JhcHBlZCBieSB0ZXJtaW5hbHMsIGFuZCB3YXMgaGFyZCB0byByZWFkLgorCisgKiBUaGUgInJlY3Vyc2l2ZSIgc3RyYXRlZ3kgb2YgImdpdCBtZXJnZSIgc2VnZmF1bHRlZCB3aGVuIGEgbWVyZ2UgaGFzCisgICBtb3JlIHRoYW4gb25lIG1lcmdlLWJhc2VzLCBhbmQgbWVyZ2luZyBvZiB0aGVzZSBtZXJnZS1iYXNlcyBpbnZvbHZlcworICAgYSByZW5hbWUvcmVuYW1lIG9yIGEgcmVuYW1lL2FkZCBjb25mbGljdC4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBkaWQgbm90IHVzZSB0aGUgcmlnaHQgZm9yayBwb2ludCB3aGVuIHRoZQorICAgcmVwb3NpdG9yeSBoYXMgYWxyZWFkeSBmZXRjaGVkIGZyb20gdGhlIHVwc3RyZWFtIHRoYXQgcmV3aW5kcyB0aGUKKyAgIGJyYW5jaCBpdCBpcyBiYXNlZCBvbiBpbiBhbiBlYXJsaWVyIGZldGNoLgorCisgKiBFeHBsYWluIHRoZSBjb25jZXB0IG9mIGZhc3QtZm9yd2FyZCBtb3JlIGZ1bGx5IGluICJnaXQgcHVzaCIKKyAgIGRvY3VtZW50YXRpb24sIGFuZCBoaW50IHRvIHJlZmVyIHRvIGl0IGZyb20gYW4gZXJyb3IgbWVzc2FnZSB3aGVuIHRoZQorICAgY29tbWFuZCByZWZ1c2VzIGFuIHVwZGF0ZSB0byBwcm90ZWN0IHRoZSB1c2VyLgorCisgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgcGFjay5kZWx0YWNhY2hlc2l6ZSwgdXNlZCBieSAiZ2l0IHJlcGFjayIsIGlzIG5vdworICAgMjU2TSwgaW5zdGVhZCBvZiB1bmJvdW5kZWQuICBPdGhlcndpc2UgYSByZXBhY2sgb2YgYSBtb2RlcmF0ZWx5IHNpemVkCisgICByZXBvc2l0b3J5IHdvdWxkIG5lZWRsZXNzbHkgZWF0IGludG8gc3dhcC4KKworICogRG9jdW1lbnQgaG93ICJnaXQgcmVwYWNrIiAoaGVuY2UgImdpdCBnYyIpIGludGVyYWN0cyB3aXRoIGEgcmVwb3NpdG9yeQorICAgdGhhdCBib3Jyb3dzIGl0cyBvYmplY3RzIGZyb20gb3RoZXIgcmVwb3NpdG9yaWVzIChlLmcuIG9uZXMgY3JlYXRlZCBieQorICAgImdpdCBjbG9uZSAtcyIpLgorCisgKiAiZ2l0IHNob3ciIG9uIGFuIGFubm90YXRlZCB0YWcgbGFja2VkIGEgZGVsaW1pdGluZyBibGFuayBsaW5lIGJldHdlZW4KKyAgIHRoZSB0YWcgaXRzZWxmIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIG9iamVjdCBpdCB0YWdzLgorCisgKiAiZ2l0IHZlcmlmeS1wYWNrIC12IiBlcnJvbmVvdXNseSByZXBvcnRlZCBudW1iZXIgb2Ygb2JqZWN0cyB3aXRoIHRvbworICAgZGVlcCBkZWx0YSBkZXB0aHMgYXMgImNoYWluIGxlbmd0aCAwIiBvYmplY3RzLgorCisgKiBMb25nIG5hbWVzIG9mIGF1dGhvcnMgYW5kIGNvbW1pdHRlcnMgb3V0c2lkZSBVUy1BU0NJSSB3ZXJlIHNvbWV0aW1lcworICAgaW5jb3JyZWN0bHkgc2hvd24gaW4gImdpdHdlYiIuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFlYzAxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC4yLnR4dApAQCAtMCwwICsxLDMyIEBACitHSVQgdjEuNi40LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi40LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogLS1kYXRlPXJlbGF0aXZlIG91dHB1dCBiZXR3ZWVuIDEgYW5kIDUgeWVhcnMgYWdvIHJvdW5kZWQgdGhlIG51bWJlciBvZgorICAgIHllYXJzIHdoZW4gc2F5aW5nIFggeWVhcnMgWSBtb250aHMgYWdvLCBpbnN0ZWFkIG9mIHJvdW5kaW5nIGl0IGRvd24uCisKKyogImdpdCBhZGQgLXAiIGRpZCBub3QgaGFuZGxlIGNoYW5nZXMgaW4gZXhlY3V0YWJsZSBiaXRzIGNvcnJlY3RseQorICAoYSByZWdyZXNzaW9uIGFyb3VuZCAxLjYuMykuCisKKyogImdpdCBhcHBseSIgZGlkIG5vdCBob25vciBHTlUgZGlmZidzIGNvbnZlbnRpb24gdG8gbWFyayB0aGUgY3JlYXRpb24vZGVsZXRpb24KKyAgZXZlbnQgd2l0aCBVTklYIGVwb2NoIHRpbWVzdGFtcCBvbiBtaXNzaW5nIHNpZGUuCisKKyogImdpdCBjaGVja291dCIgaW5jb3JyZWN0bHkgcmVtb3ZlZCBmaWxlcyBpbiBhIGRpcmVjdG9yeSBwb2ludGVkIGJ5IGEKKyAgc3ltYm9saWMgbGluayBkdXJpbmcgYSBicmFuY2ggc3dpdGNoIHRoYXQgcmVwbGFjZXMgYSBkaXJlY3Rvcnkgd2l0aAorICBhIHN5bWJvbGljIGxpbmsuCisKKyogImdpdCBjbGVhbiAtZCAtZiIgaGFwcGlseSBkZXNjZW5kZWQgaW50byBhIHN1YmRpcmVjdG9yeSB0aGF0IGlzIG1hbmFnZWQgYnkgYQorICBzZXBhcmF0ZSBnaXQgcmVwb3NpdG9yeS4gIEl0IG5vdyByZXF1aXJlcyB0d28gLWYgb3B0aW9ucyBmb3Igc2FmZXR5LgorCisqICJnaXQgZmV0Y2gvcHVzaCIgb3ZlciBodHRwIHRyYW5zcG9ydHMgaGFkIHR3byByYXRoZXIgZ3JhdmUgYnVncy4KKworKiAiZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciIgZGlkIG5vdCBwcmVwYXJlIHRoZSBjb3ZlciBsZXR0ZXIgZmlsZQorICBmb3IgdXNlIHdpdGggbm9uLUFTQ0lJIHN0cmluZ3Mgd2hlbiB0aGVyZSBhcmUgdGhlIHNlcmllcyBjb250cmlidXRvcnMgd2l0aAorICBub24tQVNDSUkgbmFtZXMuCisKKyogImdpdCBwdWxsIG9yaWdpbiBicmFuY2giIGFuZCAiZ2l0IGZldGNoIG9yaWdpbiAmJiBnaXQgbWVyZ2Ugb3JpZ2luL2JyYW5jaCIKKyAgbGVmdCBkaWZmZXJlbnQgbWVyZ2UgbWVzc2FnZXMgaW4gdGhlIHJlc3VsdGluZyBjb21taXQuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjQzZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC4zLnR4dApAQCAtMCwwICsxLDI5IEBACitHSVQgdjEuNi40LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi40LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogImdpdCBjbG9uZSIgZnJvbSBhbiBlbXB0eSByZXBvc2l0b3J5IGdhdmUgdW5uZWNlc3NhcnkgZXJyb3IgbWVzc2FnZSwKKyAgZXZlbiB0aG91Z2ggaXQgZGlkIGV2ZXJ5dGhpbmcgZWxzZSBjb3JyZWN0bHkuCisKKyogImdpdCBjdnNzZXJ2ZXIiIGludm9rZWQgZ2l0IGNvbW1hbmRzIHZpYSAiZ2l0LWZvbyIgc3R5bGUsIHdoaWNoIGhhcyBsb25nCisgIGJlZW4gZGVwcmVjYXRlZC4KKworKiAiZ2l0IGZldGNoIiBhbmQgImdpdCBjbG9uZSIgaGFkIGFuIGV4dHJhIHNhbml0eSBjaGVjayB0byB2ZXJpZnkgdGhlCisgIHByZXNlbmNlIG9mIHRoZSBjb3JyZXNwb25kaW5nICoucGFjayBmaWxlIGJlZm9yZSBkb3dubG9hZGluZyAqLmlkeAorICBmaWxlIGJ5IGlzc3VpbmcgYSBIRUFEIHJlcXVlc3QuICBHaXRodWIgc2VydmVyIGhvd2V2ZXIgc29tZXRpbWVzCisgIGdhdmUgNTAwIChJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IpIHJlc3BvbnNlIHRvIEhFQUQgZXZlbiBpZiBhIEdFVAorICByZXF1ZXN0IGZvciAqLnBhY2sgZmlsZSB0byB0aGUgc2FtZSBVUkwgd291bGQgaGF2ZSBzdWNjZWVkZWQsIGFuZCBicm9rZQorICBjbG9uZSBvdmVyIEhUVFAgZnJvbSBzb21lIG9mIHRoZWlyIHJlcG9zaXRvcmllcy4gIEFzIGEgd29ya2Fyb3VuZCwgdGhpcworICB2ZXJpZmljYXRpb24gaGFzIGJlZW4gcmVtb3ZlZCAoYXMgaXQgaXMgbm90IGFic29sdXRlbHkgbmVjZXNzYXJ5KS4KKworKiAiZ2l0IGdyZXAiIGRpZCBub3QgbGlrZSByZWxhdGl2ZSBwYXRobmFtZSB0byByZWZlciBvdXRzaWRlIHRoZSBjdXJyZW50CisgIGRpcmVjdG9yeSB3aGVuIHJ1biBmcm9tIGEgc3ViZGlyZWN0b3J5LgorCisqIGFuIGVycm9yIG1lc3NhZ2UgZnJvbSAiZ2l0IHB1c2giIHdhcyBmb3JtYXR0ZWQgaW4gYSB2ZXJ5IHVnbHkgd2F5LgorCisqICJnaXQgc3ZuIiBkaWQgbm90IHF1b3RlIHRoZSBzdWJ2ZXJzaW9uIHVzZXIgbmFtZSBjb3JyZWN0bHkgd2hlbgorICBydW5uaW5nIGl0cyBhdXRob3ItcHJvZyBoZWxwZXIgcHJvZ3JhbS4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjQuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYWQ0NWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjQudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0dJVCB2MS42LjQuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjQuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgd29ya2Fyb3VuZCBmb3IgR2l0aHViIHNlcnZlciB0aGF0IHNvbWV0aW1lcyBnYXZlIDUwMCAoSW50ZXJuYWwgc2VydmVyCisgIGVycm9yKSByZXNwb25zZSB0byBIRUFEIHJlcXVlc3RzIGluIDEuNi40LjMgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24gdGhhdAorICBjYXVzZWQgcmUtZmV0Y2hpbmcgcHJvamVjdHMgb3ZlciBodHRwIHRvIHNlZ2ZhdWx0IGluIGNlcnRhaW4gY2FzZXMgZHVlCisgIHRvIHVuaW5pdGlhbGl6ZWQgcG9pbnRlciBiZWluZyBmcmVlZC4KKworKiAiZ2l0IHB1bGwiIG9uIGFuIHVuYm9ybiBicmFuY2ggdXNlZCB0byBjb25zaWRlciBhbnl0aGluZyBpbiB0aGUgd29yaworICB0cmVlIGFuZCB0aGUgaW5kZXggZGlzY2FyZGFibGUuCisKKyogImdpdCBkaWZmIC1iL3ciIGRpZCBub3Qgd29yayB3ZWxsIG9uIHRoZSBpbmNvbXBsZXRlIGxpbmUgYXQgdGhlIGVuZCBvZgorICB0aGUgZmlsZSwgZHVlIHRvIGFuIGluY29ycmVjdCBoYXNoaW5nIG9mIGxpbmVzIGluIHRoZSBsb3ctbGV2ZWwgeGRpZmYKKyAgcm91dGluZXMuCisKKyogImdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD0kc29tZXdoZXJlIiB1c2VkIHRvIHdvcmsgd2hlbiAkc29tZXdoZXJlIGlzCisgIGEgc3ltYm9saWMgbGluayB0byBhIGRpcmVjdG9yeSBlbHNld2hlcmUsIGJ1dCB2MS42LjQuMiBicm9rZSBpdC4KKworKiAiZ2l0IHVucGFjay1vYmplY3RzIC0tc3RyaWN0IiwgaW52b2tlZCB3aGVuIHJlY2VpdmUuZnNja29iamVjdHMKKyAgY29uZmlndXJhdGlvbiBpcyBzZXQgaW4gdGhlIHJlY2VpdmluZyByZXBvc2l0b3J5IG9mICJnaXQgcHVzaCIsIGRpZCBub3QKKyAgcHJvcGVybHkgY2hlY2sgdGhlIG9iamVjdHMsIGVzcGVjaWFsbHkgdGhlIHN1Ym1vZHVsZSBsaW5rcywgaXQgcmVjZWl2ZWQuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjYzMDdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC41LnR4dApAQCAtMCwwICsxLDIwIEBACitHaXQgdjEuNi40LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi40LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFNpbXBsaWZpZWQgYmFzZTg1IGltcGxlbWVudGF0aW9uLgorCisgKiBBbiBvdmVybG9uZyBsaW5lIGFmdGVyICIuZ2l0ZGlyOiAiIGluIGEgZ2l0IGZpbGUgY2F1c2VkIG91dCBvZiBib3VuZHMKKyAgIGFjY2VzcyB0byBhbiBhcnJheSBvbiB0aGUgc3RhY2suCisKKyAqICJnaXQgY291bnQtb2JqZWN0cyIgZGlkIG5vdCBoYW5kbGUgcGFja3MgbGFyZ2VyIHRoYW4gNEcuCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1zdG9wLWF0LW5vbi1vcHRpb24iIGRpZCBub3Qgc3RvcCBhdCBub24gb3B0aW9uCisgICB3aGVuIC0ta2VlcC1kYXNoZGFzaCB3YXMgaW4gZWZmZWN0LgorCisgKiAiZ2l0d2ViIiBjYW4gc29tZXRpbWVzIGJlIHRyaWNrZWQgaW50byBwYXJyb3R0aW5nIGEgZmlsZW5hbWUgYXJndW1lbnQKKyAgIGdpdmVuIGluIGEgcmVxdWVzdCB3aXRob3V0IHByb3Blcmx5IHF1b3RpbmcuCisKK090aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTkwNDQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNC50eHQKQEAgLTAsMCArMSwxNDcgQEAKK0dJVCB2MS42LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1dpdGggdGhlIG5leHQgbWFqb3IgcmVsZWFzZSwgImdpdCBwdXNoIiBpbnRvIGEgYnJhbmNoIHRoYXQgaXMKK2N1cnJlbnRseSBjaGVja2VkIG91dCB3aWxsIGJlIHJlZnVzZWQgYnkgZGVmYXVsdC4gIFlvdSBjYW4gY2hvb3NlCit3aGF0IHNob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeS4KKworVG8gZWFzZSB0aGUgdHJhbnNpdGlvbiBwbGFuLCB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgb2Ygc3VjaCBhCitwdXNoIHJ1bm5pbmcgdGhpcyByZWxlYXNlIHdpbGwgaXNzdWUgYSBiaWcgd2FybmluZyB3aGVuIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBtaXNzaW5nLiAgUGxlYXNlIHJlZmVyIHRvOgorCisgIGh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9HaXRGYXEjbm9uLWJhcmUKKyAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzEwNzc1OC9mb2N1cz0xMDgwMDcKKworZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQordHJhbnNpdGlvbiBwbGFuLgorCitGb3IgYSBzaW1pbGFyIHJlYXNvbiwgImdpdCBwdXNoICR0aGVyZSA6JGtpbGxlZCIgdG8gZGVsZXRlIHRoZSBicmFuY2gKKyRraWxsZWQgaW4gYSByZW1vdGUgcmVwb3NpdG9yeSAkdGhlcmUsIGlmICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50CiticmFuY2ggcG9pbnRlZCBhdCBieSBpdHMgSEVBRCwgZ2V0cyBhIGxhcmdlIHdhcm5pbmcuICBZb3UgY2FuIGNob29zZSB3aGF0CitzaG91bGQgaGFwcGVuIHVwb24gc3VjaCBhIHB1c2ggYnkgc2V0dGluZyB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkuCisKKworVXBkYXRlcyBzaW5jZSB2MS42LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhzdWJzeXN0ZW1zKQorCisgKiBnaXR3ZWIgUGVybCBzdHlsZSBjbGVhbi11cC4KKworICogZ2l0LXN2biB1cGRhdGVzLCBpbmNsdWRpbmcgYSBuZXcgLS1hdXRob3JzLXByb2cgb3B0aW9uIHRvIG1hcCBhdXRob3IKKyAgIG5hbWVzIGJ5IGludm9raW5nIGFuIGV4dGVybmFsIHByb2dyYW0sICdnaXQgc3ZuIHJlc2V0JyB0byB1bndpbmQKKyAgICdnaXQgc3ZuIGZldGNoJywgc3VwcG9ydCBmb3IgbW9yZSB0aGFuIG9uZSBicmFuY2hlcywgZG9jdW1lbnRpbmcKKyAgIG9mIHRoZSB1c2VmdWwgLS1taW5pbWl6ZS11cmwgZmVhdHVyZSwgbmV3ICJnaXQgc3ZuIGdjIiBjb21tYW5kLCBldGMuCisKKyhwb3J0YWJpbGl0eSkKKworICogV2UgZmVlZCBpY29udiB3aXRoICJVVEYtOCIgaW5zdGVhZCBvZiAidXRmOCI7IHRoZSBmb3JtZXIgaXMKKyAgIHVuZGVyc3Rvb2QgbW9yZSB3aWRlbHkuICBTaW1pbGFybHkgdXBkYXRlZCB0ZXN0IHNjcmlwdHMgdG8gdXNlCisgICBlbmNvZGluZyBuYW1lcyBtb3JlIHdpZGVseSB1bmRlcnN0b29kIChlLmcuIHVzZSAiSVNPODg1OS0xIiBpbnN0ZWFkCisgICBvZiAiSVNPLTg4NTktMSIpLgorCisgKiBWYXJpb3VzIHBvcnRhYmlsaXR5IGZpeGVzL3dvcmthcm91bmRzIGZvciBkaWZmZXJlbnQgdmludGFnZXMgb2YKKyAgIFN1bk9TLCBJUklYLCBhbmQgV2luZG93cy4KKworICogR2l0LW92ZXItc3NoIHRyYW5zcG9ydCBvbiBXaW5kb3dzIHN1cHBvcnRzIFB1VFRZIHBsaW5rIGFuZCBUb3J0b2lzZVBsaW5rLgorCisocGVyZm9ybWFuY2UpCisKKyAqIE1hbnkgcmVwZWF0ZWQgdXNlIG9mIGxzdGF0KCkgYXJlIG9wdGltaXplZCBvdXQgaW4gImNoZWNrb3V0IiBjb2RlcGF0aC4KKworICogZ2l0LXN0YXR1cyAoYW5kIHVuZGVybHlpbmcgZ2l0LWRpZmYtaW5kZXggLS1jYWNoZWQpIGFyZSBvcHRpbWl6ZWQKKyAgIHRvIHRha2UgYWR2YW50YWdlIG9mIGNhY2hlLXRyZWUgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4LgorCisodXNhYmlsaXR5LCBiZWxscyBhbmQgd2hpc3RsZXMpCisKKyAqICJnaXQgYWRkIC0tZWRpdCIgbGV0cyB1c2VycyBlZGl0IHRoZSB3aG9sZSBwYXRjaCB0ZXh0IHRvIGZpbmUtdHVuZSB3aGF0CisgICBpcyBhZGRlZCB0byB0aGUgaW5kZXguCisKKyAqICJnaXQgYW0iIGFjY2VwdHMgU3RHSVQgc2VyaWVzIGZpbGUgYXMgaXRzIGlucHV0LgorCisgKiAiZ2l0IGJpc2VjdCBza2lwIiBza2lwcyB0byBhIG1vcmUgcmFuZG9tbHkgY2hvc2VuIHBsYWNlIGluIHRoZSBob3BlCisgICB0byBhdm9pZCB0ZXN0aW5nIGEgY29tbWl0IHRoYXQgaXMgdG9vIGNsb3NlIHRvIGEgY29tbWl0IHRoYXQgaXMKKyAgIGFscmVhZHkga25vd24gdG8gYmUgdW50ZXN0YWJsZS4KKworICogImdpdCBjdnNleHBvcnRjb21taXQiIGxlYXJuZWQgLWsgb3B0aW9uIHRvIHN0b3AgQ1ZTIGtleXdvcmRzIGV4cGFuc2lvbgorCisgKiAiZ2l0IGZhc3QtZXhwb3J0IiBsZWFybmVkIHRvIGhhbmRsZSBoaXN0b3J5IHNpbXBsaWZpY2F0aW9uIG1vcmUKKyAgIGdyYWNlZnVsbHkuCisKKyAqICJnaXQgZmFzdC1leHBvcnQiIGxlYXJuZWQgYW4gb3B0aW9uIC0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdCB0byBoYW5kbGUKKyAgIGRhbmdsaW5nIHRhZ3MgcmVzdWx0aW5nIGZyb20gaGlzdG9yeSBzaW1wbGlmaWNhdGlvbiBtb3JlIHVzZWZ1bGx5LgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgLXAgb3B0aW9uIHRvIHNob3cgdGhlIGxvY2F0aW9uIG9mIHRoZSBtYXRjaCB1c2luZyB0aGUKKyAgIHNhbWUgY29udGV4dCBodW5rIG1hcmtlciAiZ2l0IGRpZmYiIHVzZXMuCisKKyAqIGh0dHBzIHRyYW5zcG9ydCBjYW4gb3B0aW9uYWxseSBiZSB0b2xkIHRoYXQgdGhlIHVzZWQgY2xpZW50CisgICBjZXJ0aWZpY2F0ZSBpcyBwYXNzd29yZCBwcm90ZWN0ZWQsIGluIHdoaWNoIGNhc2UgaXQgYXNrcyB0aGUKKyAgIHBhc3N3b3JkIG9ubHkgb25jZS4KKworICogImdpdCBpbWFwLXNlbmQiIGlzIElQdjYgYXdhcmUuCisKKyAqICJnaXQgbG9nIC0tZ3JhcGgiIGRyYXdzIGdyYXBocyBtb3JlIGNvbXBhY3RseSBieSB1c2luZyBob3Jpem9udGFsIGxpbmVzCisgICB3aGVuIGFibGUuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIHNob3dzIHNob3J0ZXIgcmVmbmFtZXMgYnkgc3RyaXBwaW5nIHdlbGwta25vd24KKyAgIHJlZnMvKiBwcmVmaXguCisKKyAqICJnaXQgcHVzaCAkbmFtZSIgaG9ub3JzIHJlbW90ZS4kbmFtZS5wdXNodXJsIGlmIHByZXNlbnQgYmVmb3JlCisgICB1c2luZyByZW1vdGUuJG5hbWUudXJsLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBVUkwgdXNlZCBmb3IgZmV0Y2hpbmcKKyAgIGFuZCBwdXNoaW5nIGNhbiBiZSBkaWZmZXJlbnQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgdW5kZXJzdGFuZHMgcXVvdGVkIGFsaWFzZXMgaW4gLm1haWxyYyBmaWxlcyAobWlnaHQKKyAgIGhhdmUgdG8gYmUgYmFja3BvcnRlZCB0byAxLjYuMy5YKS4KKworICogImdpdCBzZW5kLWVtYWlsIiBjYW4gZmV0Y2ggdGhlIHNlbmRlciBhZGRyZXNzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlICJzZW5kbWFpbC5mcm9tIiAoYW5kICJzZW5kbWFpbC48aWRlbnRpdHk+LmZyb20iKS4KKworICogImdpdCBzaG93LWJyYW5jaCIgY2FuIGNvbG9yIGl0cyBvdXRwdXQuCisKKyAqICJhZGQiIGFuZCAidXBkYXRlIiBzdWJjb21tYW5kcyB0byAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCAtLXJlZmVyZW5jZQorICAgb3B0aW9uIHRvIHVzZSBsb2NhbCBjbG9uZSB3aXRoIHJlZmVyZW5jZXMuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgbGVhcm5lZCAtLXJlYmFzZSBvcHRpb24gdG8gdXBkYXRlIGNoZWNrZWQKKyAgIG91dCBzdWJtb2R1bGVzIGJ5IHJlYmFzaW5nIHRoZSBsb2NhbCBjaGFuZ2VzLgorCisgKiAiZ2l0d2ViIiBjYW4gb3B0aW9uYWxseSB1c2UgZ3JhdmF0YXIgdG8gYWRvcm4gYXV0aG9yL2NvbW1pdHRlciBuYW1lcy4KKworKGRldmVsb3BlcnMpCisKKyAqIEEgbWFqb3IgcGFydCBvZiB0aGUgImdpdCBiaXNlY3QiIHdyYXBwZXIgaGFzIG1vdmVkIHRvIEMuCisKKyAqIEZvcm1hdHRpbmcgd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgQXNjaWlEb2MgOC40LjEgaXMgbm93IHN1cHBvcnRlZC4KKworRml4ZXMgc2luY2UgdjEuNi4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjMuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKK0hlcmUgYXJlIGZpeGVzIHRoYXQgdGhpcyByZWxlYXNlIGhhcywgYnV0IGhhdmUgbm90IGJlZW4gYmFja3BvcnRlZCB0bwordjEuNi4zLlggc2VyaWVzLgorCisgKiAiZ2l0IGRpZmYtdHJlZSAtciAtdCIgdXNlZCB0byBvbWl0IG5ldyBvciByZW1vdmVkIGRpcmVjdG9yaWVzIGZyb20KKyAgIHRoZSBvdXRwdXQuICBkZjUzM2YzIChkaWZmLXRyZWUgLXIgLXQ6IGluY2x1ZGUgYWRkZWQvcmVtb3ZlZAorICAgZGlyZWN0b3JpZXMgaW4gdGhlIG91dHB1dCwgMjAwOS0wNi0xMykgbWF5IG5lZWQgdG8gYmUgY2hlcnJ5LXBpY2tlZAorICAgdG8gYmFja3BvcnQgdGhpcyBmaXguCisKKyAqIFRoZSB3YXkgR2l0LnBtIHNldHMgdXAgYSBSZXBvc2l0b3J5IG9iamVjdCB3YXMgbm90IGZyaWVuZGx5IHRvIGNhbGxlcnMKKyAgIHRoYXQgY2hkaXIgYXJvdW5kLiAgSXQgbm93IGludGVybmFsbHkgcmVjb3JkcyB0aGUgcmVwb3NpdG9yeSBsb2NhdGlvbgorICAgYXMgYW4gYWJzb2x1dGUgcGF0aCB3aGVuIGF1dG9kZXRlY3RlZC4KKworICogUmVtb3ZpbmcgYSBzZWN0aW9uIHdpdGggImdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiIsIHdoZW4gaXRzCisgICBzZWN0aW9uIGhlYWRlciBoYXMgYSB2YXJpYWJsZSBkZWZpbml0aW9uIG9uIHRoZSBzYW1lIGxpbmUsIGxvc3QKKyAgIHRoYXQgdmFyaWFibGUgZGVmaW5pdGlvbi4KKworICogImdpdCByZWJhc2UgLXAgLS1vbnRvIiB1c2VkIHRvIGFsd2F5cyBsZWF2ZSBzaWRlIGJyYW5jaGVzIG9mIGEgbWVyZ2UKKyAgIGludGFjdCwgZXZlbiB3aGVuIGJvdGggYnJhbmNoZXMgYXJlIHN1YmplY3QgdG8gcmV3cml0aW5nLgorCisgKiAiZ2l0IHJlcGFjayIgdXNlZCB0byBmYWl0aGZ1bGx5IGZvbGxvdyBncmFmdHMgYW5kIGNvbnNpZGVyZWQgdHJ1ZQorICAgcGFyZW50cyByZWNvcmRlZCBpbiB0aGUgY29tbWl0IG9iamVjdCB1bnJlYWNoYWJsZSBmcm9tIHRoZSBjb21taXQuCisgICBBZnRlciBzdWNoIGEgcmVwYWNraW5nLCB5b3UgY2Fubm90IHJlbW92ZSBncmFmdHMgd2l0aG91dCBjb3JydXB0aW5nCisgICB0aGUgcmVwb3NpdG9yeS4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IGRldGVjdCBlcnJvbmVvdXMgbG9vcHMgaW4gYWxpYXMgZXhwYW5zaW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA5YmExOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuMS50eHQKQEAgLTAsMCArMSwyMCBAQAorR0lUIHYxLjYuNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFuIGNvcnJ1cHQgcGFjayBjb3VsZCBtYWtlIGNvZGVwYXRoIHRvIHJlYWQgb2JqZWN0cyBpbnRvIGFuCisgICBpbmZpbml0ZSBsb29wLgorCisgKiBEb3dubG9hZCB0aHJvdWdocHV0IGRpc3BsYXkgd2FzIGFsd2F5cyBzaG93biBpbiBLaUIvcyBidXQgb24gZmFzdCBsaW5rcworICAgaXQgaXMgbW9yZSBhcHByb3ByaWF0ZSB0byBzaG93IGl0IGluIE1pQi9zLgorCisgKiAiZ2l0IGdyZXAgLWYgZmlsZW5hbWUiIHVzZWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBhbmQgc2VnZmF1bHRlZC4KKworICogImdpdCBjbG9uZSAtYiBicmFuY2giIGdhdmUgYSB3cm9uZyBjb21taXQgb2JqZWN0IG5hbWUgdG8gcG9zdC1jaGVja291dAorICAgaG9vay4KKworICogImdpdCBwdWxsIiBvdmVyIGh0dHAgZGlkIG5vdCB3b3JrIG9uIG1zeXMuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTdjY2NlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4yLnR4dApAQCAtMCwwICsxLDE5IEBACitHSVQgdjEuNi41LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEluc3RhbGxhdGlvbiBvZiB0ZW1wbGF0ZXMgdHJpZ2dlcmVkIGEgYnVnIGluIGJ1c3lib3ggd2hlbiB1c2luZyB0YXIKKyAgIGltcGxlbWVudGF0aW9uIGZyb20gaXQuCisKKyAqICJnaXQgYWRkIC1pIiBpbmNvcnJlY3RseSBpZ25vcmVkIHBhdGhzIHRoYXQgYXJlIGFscmVhZHkgaW4gdGhlIGluZGV4CisgICBpZiB0aGV5IG1hdGNoZWQgLmdpdGlnbm9yZSBwYXR0ZXJucy4KKworICogImdpdCBkZXNjcmliZSAtLWFsd2F5cyIgc2hvdWxkIGhhdmUgcHJvZHVjZWQgc29tZSBvdXRwdXQgZXZlbiB0aGVyZQorICAgd2VyZSBubyB0YWdzIGluIHRoZSByZXBvc2l0b3J5LCBidXQgaXQgZGlkbid0LgorCisgKiAiZ2l0IGxzLWZpbGVzIiB3aGVuIHNob3dpbmcgdHJhY2tlZCBmaWxlcyBpbmNvcnJlY3RseSBwYWlkIGF0dGVudGlvbgorICAgdG8gdGhlIGV4Y2x1ZGUgcGF0dGVybnMuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmZhZDFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS4zLnR4dApAQCAtMCwwICsxLDYzIEBACitHaXQgdjEuNi41LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGluZm8vZ3JhZnRzIGZpbGUgZGlkbid0IGlnbm9yZSB0cmFpbGluZyBDUiBhdCB0aGUgZW5kIG9mIGxpbmVzLgorCisgKiBQYWNrYWdlcyBnZW5lcmF0ZWQgb24gbmV3ZXIgRkMgd2VyZSB1bnJlYWRhYmxlIGJ5IG9sZGVyIHZlcnNpb25zIG9mCisgICBSUE0gYXMgdGhlIG5ldyBkZWZhdWx0IGlzIHRvIHVzZSBzdHJvbmdlciBoYXNoLgorCisgKiBvdXRwdXQgZnJvbSAiZ2l0IGJsYW1lIiB3YXMgdW5yZWFkYWJsZSB3aGVuIHRoZSBmaWxlIGVuZGVkIGluIGFuCisgICBpbmNvbXBsZXRlIGxpbmUuCisKKyAqICJnaXQgYWRkIC1pLy1wIiBkaWRuJ3QgaGFuZGxlIGRlbGV0aW9uIG9mIGVtcHR5IGZpbGVzIGNvcnJlY3RseS4KKworICogImdpdCBjbG9uZSIgdGFrZXMgdXAgdG8gdHdvIHBhcmFtZXRlcnMsIGJ1dCBkaWQgbm90IGNvbXBsYWluIHdoZW4KKyAgIGdpdmVuIG1vcmUgYXJndW1lbnRzIHRoYW4gbmVjZXNzYXJ5IGFuZCBzaWxlbnRseSBpZ25vcmVkIHRoZW0uCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBkaWQgbm90IHJlYWQgZmlsZXMgZ2l2ZW4gYXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworICAgY29ycmVjdGx5IHdoZW4gaXQgaXMgcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyAqICJnaXQgZGlmZiAtLWNvbG9yLXdvcmRzIC1VMCIgZGlkbid0IHdvcmsgY29ycmVjdGx5LgorCisgKiBUaGUgaGFuZGxpbmcgb2YgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiBmaWxlIGJ5ICJnaXQgZGlmZi9hcHBseQorICAgLS13aGl0ZXNwYWNlIiB3YXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIG90aGVyIGtpbmRzIG9mIGVycm9ycy4KKyAgIFRoZXkgYXJlIG5vdyBjb2xvcmVkLCB3YXJuZWQgYWdhaW5zdCwgYW5kIGZpeGVkIHRoZSBzYW1lIHdheSBhcyBvdGhlcnMuCisKKyAqIFRoZXJlIHdhcyBubyB3YXkgdG8gYWxsb3cgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiBmaWxlIHdpdGhvdXQKKyAgIGFsbG93aW5nIGV4dHJhIGJsYW5rcyBhdCB0aGUgZW5kIG9mIGxpbmVzLiAgWW91IGNhbiB1c2UgYmxhbmstYXQtZW9mCisgICBhbmQgYmxhbmstYXQtZW9sIHdoaXRlc3BhY2UgZXJyb3IgY2xhc3MgdG8gc3BlY2lmeSB0aGVtIHNlcGFyYXRlbHkuCisgICBUaGUgb2xkIHRyYWlsaW5nLXNwYWNlIGVycm9yIGNsYXNzIGlzIG5vdyBhIHNob3J0LWhhbmQgdG8gc2V0IGJvdGguCisKKyAqICItcCIgb3B0aW9uIHRvICJnaXQgZm9ybWF0LXBhdGNoIiB3YXMgc3VwcG9zZWQgdG8gc3VwcHJlc3MgZGlmZnN0YXQKKyAgIGdlbmVyYXRpb24sIGJ1dCBpdCB3YXMgYnJva2VuIHNpbmNlIDEuNi4xLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgZGlkIG5vdCBjb21waWxlIGNsZWFubHkgd2l0aCBuZXdlciBPcGVuU1NMLgorCisgKiAiZ2l0IGhlbHAgLWEiIG91dHNpZGUgb2YgYSBnaXQgcmVwb3NpdG9yeSB3YXMgYnJva2VuLgorCisgKiAiZ2l0IGxzLWZpbGVzIC1pIiB3YXMgc3VwcG9zZWQgdG8gYmUgaW52ZXJzZSBvZiAiZ2l0IGxzLWZpbGVzIiB3aXRob3V0IC1pCisgICB3aXRoIHJlc3BlY3QgdG8gZXhjbHVkZSBwYXR0ZXJucywgYnV0IGl0IHdhcyBicm9rZW4gc2luY2UgMS42LjUuMi4KKworICogImdpdCBscy1yZW1vdGUiIG91dHNpZGUgb2YgYSBnaXQgcmVwb3NpdG9yeSBvdmVyIGh0dHAgd2FzIGJyb2tlbi4KKworICogImdpdCByZWJhc2UgLWkiIGdhdmUgYm9ndXMgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBjb21tYW5kIHdvcmQgd2FzCisgICBtaXNzcGVsbGVkLgorCisgKiAiZ2l0IHJlY2VpdmUtcGFjayIgdGhhdCBpcyBydW4gaW4gcmVzcG9uc2UgdG8gImdpdCBwdXNoIiBkaWQgbm90IHJ1bgorICAgZ2FyYmFnZSBjb2xsZWN0aW9uIG5vciB1cGRhdGUtc2VydmVyLWluZm8sIGJ1dCBpbiBsYXJnZXIgaG9zdGluZyBzaXRlcywKKyAgIHRoZXNlIGFsbW9zdCBhbHdheXMgbmVlZCB0byBiZSBydW4uICBUbyBoZWxwIHNpdGUgYWRtaW5pc3RyYXRvcnMsIHRoZQorICAgY29tbWFuZCBub3cgcnVucyAiZ2MgLS1hdXRvIiBhbmQgInUtcy1pIiBieSBzZXR0aW5nIHJlY2VpdmUuYXV0b2djCisgICBhbmQgcmVjZWl2ZS51cGRhdGVzZXJ2ZXJpbmZvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLCByZXNwZWN0aXZlbHkuCisKKyAqIFJlbGVhc2Ugbm90ZXMgc3BlbGxlZCB0aGUgcGFja2FnZSBuYW1lIHdpdGggaW5jb3JyZWN0IGNhcGl0YWxpemF0aW9uLgorCisgKiAiZ2l0d2ViIiBkaWQgbm90IGVzY2FwZSBub24tYXNjaWkgY2hhcmFjdGVycyBjb3JyZWN0bHkgaW4gdGhlIFVSTC4KKworICogImdpdHdlYiIgc2hvd2VkICJwYXRjaCIgbGluayBldmVuIGZvciBtZXJnZSBjb21taXRzLgorCisgKiAiZ2l0d2ViIiBzaG93ZWQgaW5jb3JyZWN0IGxpbmtzIGZvciBibG9iIGxpbmUgbnVtYmVycyBpbiBwYXRoaW5mbyBtb2RlLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhMmEzZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNC50eHQKQEAgLTAsMCArMSwzMiBAQAorR2l0IHYxLjYuNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGhlbHAiICh3aXRob3V0IGFyZ3VtZW50KSB1c2VkIHRvIGNoZWNrIGlmIHlvdSBhcmUgaW4gYSBkaXJlY3RvcnkKKyAgIHVuZGVyIGdpdCBjb250cm9sLiBUaGVyZSB3YXMgbm8gYnJlYWthZ2UgaW4gYmVoYXZpb3VyIHBlci1zZSwgYnV0IHRoaXMKKyAgIHdhcyB1bm5lY2Vzc2FyeS4KKworICogImdpdCBwcnVuZS1wYWNrZWQiIGdhdmUgcHJvZ3Jlc3Mgb3V0cHV0IGV2ZW4gd2hlbiBpdHMgc3RhbmRhcmQgZXJyb3IgaXMKKyAgIG5vdCBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbDsgdGhpcyBjYXVzZWQgY3JvbiBqb2JzIHRoYXQgcnVuIGl0IHRvCisgICBwcm9kdWNlIGNydWZ0cy4KKworICogImdpdCBwYWNrLW9iamVjdHMgLS1hbGwtcHJvZ3Jlc3MiIGlzIGFuIG9wdGlvbiB0byBhc2sgcHJvZ3Jlc3Mgb3V0cHV0CisgICBmcm9tIHdyaXRlLW9iamVjdCBwaGFzZSBfaWZfIHByb2dyZXNzIG91dHB1dCB3ZXJlIHRvIGJlIHByb2R1Y2VkLCBhbmQKKyAgIHNob3VsZG4ndCBoYXZlIGZvcmNlZCB0aGUgcHJvZ3Jlc3Mgb3V0cHV0LgorCisgKiAiZ2l0IGFwcGx5IC1wPG4+IC0tZGlyZWN0b3J5PTxlbHNld2hlcmU+IiBkaWQgbm90IHdvcmsgd2VsbCBmb3IgYQorICAgbm9uLWRlZmF1bHQgdmFsdWUgb2Ygbi4KKworICogImdpdCBtZXJnZSBmb28gSEVBRCIgd2FzIG1pc3BhcnNlZCBhcyBhbiBvbGQtc3R5bGUgaW52b2NhdGlvbiBvZiB0aGUKKyAgIGNvbW1hbmQgYW5kIHByb2R1Y2VkIGEgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2UuICBBcyBpdCBkb2VzIG5vdCBzcGVjaWZ5CisgICBhbnkgb3RoZXIgYnJhbmNoIHRvIG1lcmdlLCBpdCBzaG91bGRuJ3QgYmUgbWlzdGFrZW4gYXMgc3VjaC4gIFdlIHdpbGwKKyAgIHJlbW92ZSB0aGUgb2xkIHN0eWxlICJnaXQgbWVyZ2UgPG1lc3NhZ2U+IEhFQUQgPGNvbW1pdD4uLi4iICBzeW50YXggaW4KKyAgIGZ1dHVyZSB2ZXJzaW9ucywgYnV0IG5vdCBpbiB0aGlzIHJlbGVhc2UsCisKKyAqICJnaXQgbWVyZ2UgLW0gPG1lc3NhZ2U+IDxicmFuY2g+Li4uIiBhZGRlZCB0aGUgc3RhbmRhcmQgbWVyZ2UgbWVzc2FnZQorICAgb24gaXRzIG93biBhZnRlciB1c2VyLXN1cHBsaWVkIG1lc3NhZ2UsIHdoaWNoIHNob3VsZCBoYXZlIG92ZXJyaWRkZW4gdGhlCisgICBzdGFuZGFyZCBvbmUuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZjNTdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS41LnR4dApAQCAtMCwwICsxLDQ5IEBACitHaXQgdjEuNi41LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE1hbnVhbCBwYWdlcyBjYW4gYmUgZm9ybWF0dGVkIHdpdGggb2xkZXIgeG1sdG8gYWdhaW4uCisKKyAqIEdSRVBfT1BUSU9OUyBleHBvcnRlZCBmcm9tIHVzZXIncyBlbnZpcm9ubWVudCBjb3VsZCBoYXZlIGJyb2tlbgorICAgb3VyIHNjcmlwdGVkIGNvbW1hbmRzLgorCisgKiBJbiBjb25maWd1cmF0aW9uIGZpbGVzLCBhIGZldyB2YXJpYWJsZXMgdGhhdCBuYW1lIHBhdGhzIGNhbiBiZWdpbiB3aXRoCisgICB+LyBhbmQgfnVzZXJuYW1lLyBhbmQgdGhleSBhcmUgZXhwYW5kZWQgYXMgZXhwZWN0ZWQuICBUaGlzIGlzIG5vdCBhCisgICBidWdmaXggYnV0IDEuNi42IHdpbGwgaGF2ZSB0aGlzIGFuZCB3aXRob3V0IGJhY2twb3J0aW5nIHVzZXJzIGNhbm5vdAorICAgZWFzaWx5IHVzZSB0aGUgc2FtZSB+Ly5naXRjb25maWcgYWNyb3NzIHZlcnNpb25zLgorCisgKiAiZ2l0IGRpZmYgLUIgLU0iIGRpZCB0aGUgc2FtZSBjb21wdXRhdGlvbiB0byBoYXNoIGxpbmVzIG9mIGNvbnRlbnRzCisgICB0d2ljZSwgYW5kIGhlbGQgb250byBtZW1vcnkgYWZ0ZXIgaXQgaGFzIHVzZWQgdGhlIGRhdGEgaW4gaXQKKyAgIHVubmVjZXNzYXJpbHkgYmVmb3JlIGl0IGZyZWVkLgorCisgKiAiZ2l0IGRpZmYgLUIiIGFuZCAiZ2l0IGRpZmYgLS1kaXJzdGF0IiB3YXMgbm90IGNvdW50aW5nIG5ld2x5IGFkZGVkCisgICBjb250ZW50cyBjb3JyZWN0bHkuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIHJldmlzaW9ucy4uLiAtLSBwYXRoIiBpc3N1ZWQgYW4gaW5jb3JyZWN0IGVycm9yCisgICBtZXNzYWdlIHRoYXQgc3VnZ2VzdGVkIHRvIHVzZSAiLS0iIG9uIHRoZSBjb21tYW5kIGxpbmUgd2hlbiBwYXRoCisgICBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCB3b3JrIHRyZWUgKGl0IGlzIGEgc2VwYXJhdGUgbWF0dGVyIGlmCisgICBpdCBtYWtlcyBzZW5zZSB0byBsaW1pdCBmb3JtYXQtcGF0Y2ggd2l0aCBwYXRoc3BlY3MgbGlrZSB0aGF0CisgICB3aXRob3V0IHVzaW5nIHRoZSAtLWZ1bGwtZGlmZiBvcHRpb24pLgorCisgKiAiZ2l0IGdyZXAgLUYgLWkgU3RSaU5nIiBkaWQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuCisKKyAqIEVudW1lcmF0aW9uIG9mIGF2YWlsYWJsZSBtZXJnZSBzdHJhdGVnaWVzIGl0ZXJhdGVkIG92ZXIgdGhlIGxpc3Qgb2YKKyAgIGNvbW1hbmRzIGluIGEgd3Jvbmcgd2F5LCBzb21ldGltZXMgcHJvZHVjaW5nIGFuIGluY29ycmVjdCByZXN1bHQuCisKKyAqICJnaXQgc2hvcnRsb2ciIGRpZCBub3QgaG9ub3IgdGhlICJlbmNvZGluZyIgaGVhZGVyIGVtYmVkZGVkIGluIHRoZQorICAgY29tbWl0IG9iamVjdCBsaWtlICJnaXQgbG9nIiBkaWQuCisKKyAqIFJlYWRpbmcgcHJvZ3Jlc3MgbWVzc2FnZXMgdGhhdCBjb21lIGZyb20gdGhlIHJlbW90ZSBzaWRlIHdoaWxlIHJ1bm5pbmcKKyAgICJnaXQgcHVsbCIgaXMgZ2l2ZW4gcHJlY2VkZW5jZSBvdmVyIHJlYWRpbmcgdGhlIGFjdHVhbCBwYWNrIGRhdGEgdG8KKyAgIHByZXZlbnQgZ2FyYmxlZCBwcm9ncmVzcyBtZXNzYWdlIG9uIHRoZSB1c2VyJ3MgdGVybWluYWwuCisKKyAqICJnaXQgcmViYXNlIiBnb3QgY29uZnVzZWQgd2hlbiB0aGUgbG9nIG1lc3NhZ2UgYmVnYW4gd2l0aCBjZXJ0YWluCisgICBzdHJpbmdzIHRoYXQgbG9va2VkIGxpa2UgU3ViamVjdDosIERhdGU6IG9yIEZyb206IGhlYWRlci4KKworICogImdpdCByZXNldCIgYWNjaWRlbnRhbGx5IHJ1biBpbiAuZ2l0LyBkaXJlY3RvcnkgY2hlY2tlZCBvdXQgdGhlCisgICB3b3JrIHRyZWUgY29udGVudHMgaW4gdGhlcmUuCisKKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZWFmNzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjYudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0dpdCB2MS42LjUuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhZGQgLXAiIGhhZCBhIHJlZ3Jlc3Npb24gc2luY2UgdjEuNi41LjMgdGhhdCBicm9rZSBkZWxldGlvbiBvZgorICAgbm9uLWVtcHR5IGZpbGVzLgorCisgKiAiZ2l0IGFyY2hpdmUgLW8gby56aXAgLS0gTWFrZWZpbGUiIHByb2R1Y2VkIGFuIGFyY2hpdmUgaW4gby56aXAKKyAgIGJ1dCBpbiBQT1NJWCB0YXIgZm9ybWF0LgorCisgKiBFcnJvciBtZXNzYWdlIGdpdmVuIHRvICJnaXQgcHVsbCAtLXJlYmFzZSIgd2hlbiB0aGUgdXNlciBkaWRuJ3QgZ2l2ZQorICAgZW5vdWdoIGNsdWUgYXMgdG8gd2hhdCBicmFuY2ggdG8gaW50ZWdyYXRlIHdpdGggc3RpbGwgdGFsa2VkIGFib3V0CisgICAibWVyZ2luZyB3aXRoIiB0aGUgYnJhbmNoLgorCisgKiBFcnJvciBtZXNzYWdlcyBnaXZlbiBieSAiZ2l0IG1lcmdlIiB3aGVuIHRoZSBtZXJnZSByZXN1bHRlZCBpbiBhCisgICBmYXN0LWZvcndhcmQgc3RpbGwgd2VyZSBpbiBwbHVtYmluZyBsaW5nbywgZXZlbiB0aG91Z2ggaW4gdjEuNi41CisgICB3ZSByZXdvcmRlZCBtZXNzYWdlcyBpbiBvdGhlciBjYXNlcy4KKworICogVGhlIHBvc3QtdXBsb2FkLWhvb2sgcnVuIGJ5IHVwbG9hZC1wYWNrIGluIHJlc3BvbnNlIHRvICJnaXQgZmV0Y2giIGhhcworICAgYmVlbiByZW1vdmVkLCBkdWUgdG8gc2VjdXJpdHkgY29uY2VybnMgKHRoZSBob29rIGZpcnN0IGFwcGVhcmVkIGluCisgICAxLjYuNSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzUzMDJjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS43LnR4dApAQCAtMCwwICsxLDE5IEBACitHaXQgdjEuNi41LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi41LjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogSWYgYSB1c2VyIHNwZWNpZmllcyBhIGNvbG9yIGZvciBhIDxzbG90PiAoaS5lLiBhIGNsYXNzIG9mIHRoaW5ncyB0byBzaG93CisgIGluIGEgcGFydGljdWxhciBjb2xvcikgdGhhdCBpcyBrbm93biBvbmx5IGJ5IG5ld2VyIHZlcnNpb25zIG9mIGdpdAorICAoZS5nLiAiY29sb3IuZGlmZi5mdW5jIiB3YXMgcmVjZW50bHkgYWRkZWQgZm9yIHVwY29taW5nIDEuNi42IHJlbGVhc2UpLAorICBhbiBvbGRlciB2ZXJzaW9uIG9mIGdpdCBzaG91bGQganVzdCBpZ25vcmUgdGhlbS4gIEluc3RlYWQgd2UgZGlhZ25vc2VkCisgIGl0IGFzIGFuIGVycm9yLgorCisqIFdpdGggaGVscC5hdXRvY29ycmVjdCBzZXQgdG8gbm9uLXplcm8gdmFsdWUsIHRoZSBsb2dpYyB0byBndWVzcyB0eXBvcworICBpbiB0aGUgc3ViY29tbWFuZCBuYW1lIG1pc2ZpcmVkIGFuZCByYW4gYSByYW5kb20gbm9uc2Vuc2UgY29tbWFuZC4KKworKiBJZiBhIGNvbW1hbmQgaXMgcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCBhcyBhIHBhdGhzcGVjIGluc2lkZSBhIGJhcmUKKyAgcmVwb3NpdG9yeSwgZS5nLiAicmV2LWxpc3QgSEVBRCAtLSAvaG9tZSIsIHRoZSBjb2RlIHRyaWVkIHRvIHJ1bgorICBzdHJsZW4oKSBvbiBOVUxMLCB3aGljaCBpcyB0aGUgcmVzdWx0IG9mIGdldF9naXRfd29ya190cmVlKCksIGFuZAorICBzZWdmYXVsdGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS44LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyNGJlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuOC50eHQKQEAgLTAsMCArMSwyOCBAQAorR2l0IHYxLjYuNS44IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNS43CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqICJnaXQgY291bnQtb2JqZWN0cyIgZGlkIG5vdCBoYW5kbGUgcGFja2ZpbGVzIHRoYXQgYXJlIGJpZ2dlciB0aGFuIDRHIG9uCisgIHBsYXRmb3JtcyB3aXRoIDMyLWJpdCBvZmZfdC4KKworKiAiZ2l0IHJlYmFzZSAtaSIgZGlkIG5vdCBhYm9ydCBjbGVhbmx5IGlmIGl0IGZhaWxlZCB0byBsYXVuY2ggdGhlIGVkaXRvci4KKworKiAiZ2l0IGJsYW1lIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGNvbW1pdCBsYWNrZWQgdGhlIGF1dGhvciBuYW1lLgorCisqICJnaXQgZmFzdC1pbXBvcnQiIGNob2tlZCB3aGVuIGhhbmRsaW5nIGEgdGFnIHRoYXQgcG9pbnRzIGF0IGFuIG9iamVjdAorICB0aGF0IGlzIG5vdCBhIGNvbW1pdC4KKworKiAiZ2l0IHJlc2V0IC0taGFyZCIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIEdJVF9XT1JLX1RSRUUgZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgaXMgdXNlZCB0byBwb2ludCBhdCB0aGUgcm9vdCBvZiB0aGUgdHJ1ZSB3b3JrIHRyZWUuCisKKyogImdpdCBncmVwIiBmZWQgYSBidWZmZXIgdGhhdCBpcyBub3QgTlVMLXRlcm1pbmF0ZWQgdG8gdW5kZXJseWluZworICByZWdleGVjKCkuCisKKyogImdpdCBjaGVja291dCAtbSBvdGhlciIgd2hpbGUgb24gYSBicmFuY2ggdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBjb21taXQKKyAgc2VnZmF1bHRlZCwgaW5zdGVhZCBvZiBmYWlsaW5nLgorCisqICJnaXQgYnJhbmNoIC1hIG90aGVyIiBzaG91bGQgaGF2ZSBkaWFnbm9zZWQgdGhlIGNvbW1hbmQgYXMgYW4gZXJyb3IuCisKK090aGVyIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgYWxzbyBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjUuOS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDY5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LjkudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2MS42LjUuOSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjUuOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gb3ZlcmxvbmcgbGluZSBhZnRlciAiLmdpdGRpcjogIiBpbiBhIGdpdCBmaWxlIGNhdXNlZCBvdXQgb2YgYm91bmRzCisgICBhY2Nlc3MgdG8gYW4gYXJyYXkgb24gdGhlIHN0YWNrLgorCisgKiAiZ2l0IGJsYW1lIC1MICRzdGFydCwkZW5kIiBzZWdmYXVsdGVkIHdoZW4gdG9vIGxhcmdlICRzdGFydCB3YXMgZ2l2ZW4uCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1zdG9wLWF0LW5vbi1vcHRpb24iIGRpZCBub3Qgc3RvcCBhdCBub24gb3B0aW9uCisgICB3aGVuIC0ta2VlcC1kYXNoZGFzaCB3YXMgaW4gZWZmZWN0LgorCisgKiAiZ2l0d2ViIiBjYW4gc29tZXRpbWVzIGJlIHRyaWNrZWQgaW50byBwYXJyb3R0aW5nIGEgZmlsZW5hbWUgYXJndW1lbnQKKyAgIGdpdmVuIGluIGEgcmVxdWVzdCB3aXRob3V0IHByb3Blcmx5IHF1b3RpbmcuCisKK090aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTE0MWMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNS50eHQKQEAgLTAsMCArMSwxNjkgQEAKK0dJVCB2MS42LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIGdpdCAxLjcuMCwgd2hpY2ggd2FzIHBsYW5uZWQgdG8gYmUgdGhlIHJlbGVhc2UgYWZ0ZXIgMS42LjUsICJnaXQKK3B1c2giIGludG8gYSBicmFuY2ggdGhhdCBpcyBjdXJyZW50bHkgY2hlY2tlZCBvdXQgd2lsbCBiZSByZWZ1c2VkIGJ5CitkZWZhdWx0LgorCitZb3UgY2FuIGNob29zZSB3aGF0IHNob3VsZCBoYXBwZW4gdXBvbiBzdWNoIGEgcHVzaCBieSBzZXR0aW5nIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGluIHRoZSByZWNlaXZpbmcKK3JlcG9zaXRvcnkuCisKK0Fsc28sICJnaXQgcHVzaCAkdGhlcmUgOiRraWxsZWQiIHRvIGRlbGV0ZSB0aGUgYnJhbmNoICRraWxsZWQgaW4gYSByZW1vdGUKK3JlcG9zaXRvcnkgJHRoZXJlLCB3aGVuICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50IGJyYW5jaCBwb2ludGVkIGF0IGJ5CitpdHMgSEVBRCwgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuCisKK1lvdSBjYW4gY2hvb3NlIHdoYXQgc2hvdWxkIGhhcHBlbiB1cG9uIHN1Y2ggYSBwdXNoIGJ5IHNldHRpbmcgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIHJlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgaW4gdGhlIHJlY2VpdmluZworcmVwb3NpdG9yeS4KKworVG8gZWFzZSB0aGUgdHJhbnNpdGlvbiBwbGFuLCB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgb2Ygc3VjaCBhCitwdXNoIHJ1bm5pbmcgdGhpcyByZWxlYXNlIHdpbGwgaXNzdWUgYSBiaWcgd2FybmluZyB3aGVuIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBtaXNzaW5nLiAgUGxlYXNlIHJlZmVyIHRvOgorCisgIGh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9HaXRGYXEjbm9uLWJhcmUKKyAgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzEwNzc1OC9mb2N1cz0xMDgwMDcKKworZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcmVhc29uIHdoeSB0aGlzIGNoYW5nZSBpcyBuZWVkZWQgYW5kIHRoZQordHJhbnNpdGlvbiBwbGFuLgorCitVcGRhdGVzIHNpbmNlIHYxLjYuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyAqIHZhcmlvdXMgdXBkYXRlcyB0byBnaXRrLCBnaXQtc3ZuIGFuZCBnaXR3ZWIuCisKKyhwb3J0YWJpbGl0eSkKKworICogbW9yZSBpbXByb3ZlbWVudHMgb24gbWluZ3cgcG9ydC4KKworICogbWluZ3cgd2lsbCBhbHNvIGdpdmUgRlJTWCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIExFU1MKKyAgIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gdGhlIHVzZXIgZG9lcyBub3QgaGF2ZSBvbmUuCisKKyAqIGluaXRpYWwgc3VwcG9ydCB0byBjb21waWxlIGdpdCBvbiBXaW5kb3dzIHdpdGggTVNWQy4KKworKHBlcmZvcm1hbmNlKQorCisgKiBPbiBtYWpvciBwbGF0Zm9ybXMsIHRoZSBzeXN0ZW0gY2FuIGJlIGNvbXBpbGVkIHRvIHVzZSB3aXRoIExpbnVzJ3MKKyAgIGJsb2NrLXNoYTEgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNIQS0xIGhhc2ggYWxnb3JpdGhtLCB3aGljaAorICAgb3V0cGVyZm9ybXMgdGhlIGRlZmF1bHQgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gd2UgYm9ycm93ZWQgZnJvbQorICAgTW96aWxsYS4KKworICogVW5uZWNlc3NhcnkgaW5lZmZpY2llbmN5IGluIGRlZXBlbmluZyBvZiBhIHNoYWxsb3cgcmVwb3NpdG9yeSBoYXMKKyAgIGJlZW4gcmVtb3ZlZC4KKworICogImdpdCBjbG9uZSIgZG9lcyBub3QgZ3JhYiBvYmplY3RzIHRoYXQgaXQgZG9lcyBub3QgbmVlZCAoaS5lLgorICAgcmVmZXJlbmNlZCBvbmx5IGZyb20gcmVmcyBvdXRzaWRlIHJlZnMvaGVhZHMgYW5kIHJlZnMvdGFncworICAgaGllcmFyY2h5KSBhbnltb3JlLgorCisgKiBUaGUgImdpdCIgbWFpbiBiaW5hcnkgdXNlZCB0byBsaW5rIHdpdGggbGliY3VybCwgd2hpY2ggdGhlbiBkcmFnZ2VkCisgICBpbiBhIGxhcmdlIG51bWJlciBvZiBleHRlcm5hbCBsaWJyYXJpZXMuICBXaGVuIHVzaW5nIGJhc2ljIHBsdW1iaW5nCisgICBjb21tYW5kcyBpbiBzY3JpcHRzLCB0aGlzIHVubmVjZXNzYXJpbHkgc2xvd2VkIHRoaW5ncyBkb3duLiAgV2Ugbm93CisgICBpbXBsZW1lbnQgaHR0cC9odHRwcy9mdHAgdHJhbnNmZXIgYXMgYSBzZXBhcmF0ZSBleGVjdXRhYmxlIGFzIHdlCisgICB1c2VkIHRvLgorCisgKiAiZ2l0IGNsb25lIiBydW4gbG9jYWxseSBoYXJkbGlua3Mgb3IgY29waWVzIHRoZSBmaWxlcyBpbiAuZ2l0LyB0bworICAgbmV3bHkgY3JlYXRlZCByZXBvc2l0b3J5LiAgSXQgdXNlZCB0byBnaXZlIG5ldyBtdGltZSB0byBjb3BpZWQgZmlsZXMsCisgICBidXQgdGhpcyBkZWxheWVkIGdhcmJhZ2UgY29sbGVjdGlvbiB0byB0cmlnZ2VyIHVubmVjZXNzYXJpbHkgaW4gdGhlCisgICBjbG9uZWQgcmVwb3NpdG9yeS4gIFdlIG5vdyBwcmVzZXJ2ZSBtdGltZSBmb3IgdGhlc2UgZmlsZXMgdG8gYXZvaWQKKyAgIHRoaXMgaXNzdWUuCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworICogSHVtYW4gd3JpdGFibGUgZGF0ZSBmb3JtYXQgdG8gdmFyaW91cyBvcHRpb25zLCBlLmcuIC0tc2luY2U9eWVzdGVyZGF5LAorICAgbWFzdGVyQHsyMDAwLjA5LjE3fSwgYXJlIHRhdWdodCB0byBpbmZlciBzb21lIG9taXR0ZWQgaW5wdXQgcHJvcGVybHkuCisKKyAqIEEgZmV3IHByb2dyYW1zIGdhdmUgdmVyYm9zZSAiYWR2aWNlIiBtZXNzYWdlcyB0byBoZWxwIHVuaW5pdGlhdGVkCisgICBwZW9wbGUgd2hlbiBpc3N1aW5nIGVycm9yIG1lc3NhZ2VzLiAgQW4gaW5mcmFzdHJ1Y3R1cmUgdG8gYWxsb3cKKyAgIHVzZXJzIHRvIHNxdWVsY2ggdGhlbSBoYXMgYmVlbiBpbnRyb2R1Y2VkLCBhbmQgYSBmZXcgc3VjaCBtZXNzYWdlcworICAgY2FuIGJlIHNpbGVuY2VkIG5vdy4KKworICogcmVmcy9yZXBsYWNlLyBoaWVyYXJjaHkgaXMgZGVzaWduZWQgdG8gYmUgdXNhYmxlIGFzIGEgcmVwbGFjZW1lbnQKKyAgIG9mIHRoZSAiZ3JhZnRzIiBtZWNoYW5pc20sIHdpdGggdGhlIGFkZGVkIGFkdmFudGFnZSB0aGF0IGl0IGNhbiBiZQorICAgdHJhbnNmZXJyZWQgYWNyb3NzIHJlcG9zaXRvcmllcy4KKworICogImdpdCBhbSIgbGVhcm5lZCB0byBvcHRpb25hbGx5IGlnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzLgorCisgKiAiZ2l0IGFtIiBoYW5kbGVzIGlucHV0IGUtbWFpbCBmaWxlcyB0aGF0IGhhcyBDUkxGIGxpbmUgZW5kaW5ncyBzZW5zaWJseS4KKworICogImdpdCBhbSIgbGVhcm5lZCAiLS1zY2lzc29ycyIgb3B0aW9uIHRvIGFsbG93IHlvdSB0byBkaXNjYXJkIGVhcmx5IHBhcnQKKyAgIG9mIGFuIGluY29taW5nIGUtbWFpbC4KKworICogImdpdCBhcmNoaXZlIC1vIG91dHB1dC56aXAiIHdvcmtzIHdpdGhvdXQgYmVpbmcgdG9sZCB3aGF0IGZvcm1hdCB0bworICAgdXNlIHdpdGggYW4gZXhwbGljaXQgIi0tZm9ybWF0PXppcCIub3B0aW9uLgorCisgKiAiZ2l0IGNoZWNrb3V0IiwgImdpdCByZXNldCIgYW5kICJnaXQgc3Rhc2giIGxlYXJuZWQgdG8gcGljayBhbmQKKyAgIGNob29zZSB0byB1c2Ugc2VsZWN0ZWQgY2hhbmdlcyB5b3UgbWFkZSwgc2ltaWxhciB0byAiZ2l0IGFkZCAtcCIuCisKKyAqICJnaXQgY2xvbmUiIGxlYXJuZWQgYSAiLWIiIG9wdGlvbiB0byBwaWNrIGEgSEVBRCB0byBjaGVjayBvdXQKKyAgIGRpZmZlcmVudCBmcm9tIHRoZSByZW1vdGUncyBkZWZhdWx0IGJyYW5jaC4KKworICogImdpdCBjbG9uZSIgbGVhcm5lZCAtLXJlY3Vyc2l2ZSBvcHRpb24uCisKKyAqICJnaXQgY2xvbmUiIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IG9uIGEgZGlmZmVyZW50IGZpbGVzeXN0ZW0gdXNlZCB0bworICAgY29weSBpbmRpdmlkdWFsIG9iamVjdCBmaWxlcyB3aXRob3V0IHByZXNlcnZpbmcgdGhlIG9sZCB0aW1lc3RhbXAsIGdpdmluZworICAgdGhlbSBleHRyYSBsaWZldGltZSBpbiB0aGUgbmV3IHJlcG9zaXRvcnkgdW50aWwgdGhleSBnYydlZC4KKworICogImdpdCBjb21taXQgLS1kcnktcnVuICRhcmdzIiBpcyBhIG5ldyByZWNvbW1lbmRlZCB3YXkgdG8gYXNrICJ3aGF0IHdvdWxkCisgICBoYXBwZW4gaWYgSSB0cnkgdG8gY29tbWl0IHdpdGggdGhlc2UgYXJndW1lbnRzLiIKKworICogImdpdCBjb21taXQgLS1kcnktcnVuIiBhbmQgImdpdCBzdGF0dXMiIHNob3dzIGNvbmZsaWN0ZWQgcGF0aHMgaW4gYQorICAgc2VwYXJhdGUgc2VjdGlvbiB0byBtYWtlIHRoZW0gZWFzaWVyIHRvIHNwb3QgZHVyaW5nIGEgbWVyZ2UuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBub3cgc3VwcG9ydHMgcGFzc3dvcmQtcHJvdGVjdGVkIHBzZXJ2ZXIgYWNjZXNzIGV2ZW4KKyAgIHdoZW4gdGhlIHBhc3N3b3JkIGlzIG5vdCB0YWtlbiBmcm9tIH4vLmN2c3Bhc3MgZmlsZS4KKworICogImdpdCBmYXN0LWV4cG9ydCIgbGVhcm5lZCAtLW5vLWRhdGEgb3B0aW9uIHRoYXQgY2FuIGJlIHVzZWZ1bCB3aGVuCisgICByZW9yZGVyaW5nIGNvbW1pdHMgYW5kIHRyZWVzIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGNvbnRlbnRzIG9mCisgICBibG9icy4KKworICogImdpdCBmYXN0LWltcG9ydCIgaGFzIGEgcGFpciBvZiBuZXcgZnJvbnQtZW5kIGluIGNvbnRyaWIvIGFyZWEuCisKKyAqICJnaXQgaW5pdCIgbGVhcm5lZCB0byBta2Rpci9jaGRpciBpbnRvIGEgZGlyZWN0b3J5IHdoZW4gZ2l2ZW4gYW4KKyAgIGV4dHJhIGFyZ3VtZW50IChpLmUuICJnaXQgaW5pdCB0aGlzIikuCisKKyAqICJnaXQgaW5zdGF3ZWIiIG9wdGlvbmFsbHkgY2FuIHVzZSBtb25nb29zZSBhcyB0aGUgd2ViIHNlcnZlci4KKworICogImdpdCBsb2cgLS1kZWNvcmF0ZSIgY2FuIG9wdGlvbmFsbHkgYmUgdG9sZCB3aXRoIC0tZGVjb3JhdGU9ZnVsbCB0bworICAgZ2l2ZSB0aGUgcmVmZXJlbmNlIG5hbWUgaW4gZnVsbC4KKworICogImdpdCBtZXJnZSIgaXNzdWVkIGFuIHVubmVjZXNzYXJpbHkgc2NhcnkgbWVzc2FnZSB3aGVuIGl0IGRldGVjdGVkCisgICB0aGF0IHRoZSBtZXJnZSBtYXkgaGF2ZSB0byB0b3VjaCB0aGUgcGF0aCB0aGF0IHRoZSB1c2VyIGhhcyBsb2NhbAorICAgdW5jb21taXR0ZWQgY2hhbmdlcyB0by4gVGhlIG1lc3NhZ2UgaGFzIGJlZW4gcmV3b3JkZWQgdG8gbWFrZSBpdAorICAgY2xlYXIgdGhhdCB0aGUgY29tbWFuZCBhYm9ydGVkLCB3aXRob3V0IGRvaW5nIGFueSBoYXJtLgorCisgKiAiZ2l0IHB1c2giIGNhbiBiZSB0b2xkIHRvIGJlIC0tcXVpZXQuCisKKyAqICJnaXQgcHVzaCIgcGF5cyBhdHRlbnRpb24gdG8gdXJsLiRiYXNlLnB1c2hJbnN0ZWFkT2YgYW5kIHVzZXMgYSBVUkwKKyAgIHRoYXQgaXMgZGVyaXZlZCBmcm9tIHRoZSBVUkwgdXNlZCBmb3IgZmV0Y2hpbmcuCisKKyAqIGluZm9ybWF0aW9uYWwgb3V0cHV0IGZyb20gImdpdCByZXNldCIgdGhhdCBsaXN0cyB0aGUgbG9jYWxseSBtb2RpZmllZAorICAgcGF0aHMgaXMgbWFkZSBjb25zaXN0ZW50IHdpdGggdGhhdCBvZiAiZ2l0IGNoZWNrb3V0ICRhbm90aGVyX2JyYW5jaCIuCisKKyAqICJnaXQgc3VibW9kdWxlIiBsZWFybmVkIHRvIGdpdmUgc3VibW9kdWxlIG5hbWUgdG8gc2NyaXB0cyBydW4gd2l0aAorICAgImZvcmVhY2giIHN1YmNvbW1hbmQuCisKKyAqIHZhcmlvdXMgc3ViY29tbWFuZHMgdG8gImdpdCBzdWJtb2R1bGUiIGxlYXJuZWQgLS1yZWN1cnNpdmUgb3B0aW9uLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IiBsZWFybmVkIC0tZmlsZXMgb3B0aW9uIHRvIGNvbXBhcmUgdGhlIHdvcmsKKyAgIHRyZWUgdnMgdGhlIGNvbW1pdCBib3VuZCBhdCBzdWJtb2R1bGUgcGF0aCwgaW5zdGVhZCBvZiBjb21wYXJpbmcKKyAgIHRoZSBpbmRleC4KKworICogImdpdCB1cGxvYWQtcGFjayIsIHdoaWNoIGlzIHRoZSBzZXJ2ZXIgc2lkZSBzdXBwb3J0IGZvciAiZ2l0IGNsb25lIiBhbmQKKyAgICJnaXQgZmV0Y2giLCBjYW4gY2FsbCBhIG5ldyBwb3N0LXVwbG9hZC1wYWNrIGhvb2sgZm9yIHN0YXRpc3RpY3MgcHVycG9zZXMuCisKKyhkZXZlbG9wZXJzKQorCisgKiBXaXRoIEdJVF9URVNUX09QVFM9Ii0tcm9vdD0vcC9hL3QvaCIsIHRlc3RzIGNhbiBiZSBydW4gb3V0c2lkZSB0aGUKKyAgIHNvdXJjZSBkaXJlY3Rvcnk7IHVzaW5nIHRtcGZzIG1heSBnaXZlIGZhc3RlciB0dXJuYXJvdW5kLgorCisgKiBXaXRoIE5PX1BFUkxfTUFLRU1BS0VSIHNldCwgREVTVERJUj0gaXMgbm93IGhvbm91cmVkLCBzbyB5b3UgY2FuCisgICBidWlsZCBmb3Igb25lIGxvY2F0aW9uLCBhbmQgaW5zdGFsbCBpbnRvIGFub3RoZXIgbG9jYXRpb24gdG8gdGFyIGl0CisgICB1cC4KKworRml4ZXMgc2luY2UgdjEuNi40CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjQuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWQwYTRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4xLnR4dApAQCAtMCwwICsxLDM3IEBACitHaXQgdjEuNi42LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNi42CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBibGFtZSIgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbiBjb21taXQgbGFja2VkIHRoZSBhdXRob3IgbmFtZS4KKworICogImdpdCBicmFuY2ggLWEgbmFtZSIgd2Fzbid0IGRpYWdub3NlZCBhcyBhbiBlcnJvci4KKworICogImdpdCBjb3VudC1vYmplY3RzIiBkaWQgbm90IGhhbmRsZSBwYWNrZmlsZXMgdGhhdCBhcmUgYmlnZ2VyIHRoYW4gNEcgb24KKyAgIHBsYXRmb3JtcyB3aXRoIDMyLWJpdCBvZmZfdC4KKworICogImdpdCBjaGVja291dCAtbSBvdGhlciIgd2hpbGUgb24gYSBicmFuY2ggdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBjb21taXQKKyAgIHNlZ2ZhdWx0ZWQsIGluc3RlYWQgb2YgZmFpbGluZy4KKworICogImdpdCBmYXN0LWltcG9ydCIgY2hva2VkIHdoZW4gZmVkIGEgdGFnIHRoYXQgZG8gbm90IHBvaW50IGF0IGEKKyAgIGNvbW1pdC4KKworICogImdpdCBncmVwIiBmaW5kaW5nIGZyb20gd29yayB0cmVlIGZpbGVzIGNvdWxkIGhhdmUgZmVkIGdhcmJhZ2UgdG8KKyAgIHRoZSB1bmRlcmx5aW5nIHJlZ2V4ZWMoMykuCisKKyAqICJnaXQgZ3JlcCAtTCIgZGlkbid0IHNob3cgZW1wdHkgZmlsZXMgKHRoZXkgc2hvdWxkIG5ldmVyIG1hdGNoLCBhbmQKKyAgIHRoZXkgc2hvdWxkIGFsd2F5cyBhcHBlYXIgaW4gLUwgb3V0cHV0IGFzIHVubWF0Y2hpbmcpLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgZGlkIG5vdCBhYm9ydCBjbGVhbmx5IGlmIGl0IGZhaWxlZCB0byBsYXVuY2ggdGhlIGVkaXRvci4KKworICogImdpdCByZXNldCAtLWhhcmQiIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgd2hlbiBHSVRfV09SS19UUkVFIGVudmlyb25tZW50CisgICB2YXJpYWJsZSBpcyB1c2VkIHRvIHBvaW50IGF0IHRoZSByb290IG9mIHRoZSB0cnVlIHdvcmsgdHJlZS4KKworICogaHR0cC1iYWNrZW5kIHdhcyBub3QgbGlzdGVkIGluIHRoZSBjb21tYW5kIGxpc3QgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKyAqIEJ1aWxkaW5nIG9uIEZyZWVCU0QgKGJvdGggNyBhbmQgOCkgbmVlZHMgT0xEX0lDT05WIHNldCBpbiB0aGUgTWFrZWZpbGUKKworICogImdpdCBjaGVja291dCAtbSBzb21lLWJyYW5jaCIgd2hpbGUgb24gYW4gdW5ib3JuIGJyYW5jaCBjcmFzaGVkLgorCitPdGhlciBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVhZGRjMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMi50eHQKQEAgLTAsMCArMSw0NiBAQAorR2l0IHYxLjYuNi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjYuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiByZWN1cnNpdmUgbWVyZ2UgZGlkbid0IGNvcnJlY3RseSBkaWFnbm9zZSBpdHMgb3duIHByb2dyYW1taW5nIGVycm9ycywKKyAgIGFuZCBpbnN0ZWFkIGNhdXNlZCB0aGUgY2FsbGVyIHRvIHNlZ2ZhdWx0LgorCisgKiBUaGUgbmV3ICJzbWFydCBodHRwIiBhd2FyZSBjbGllbnRzIHByb2JlZCB0aGUgd2ViIHNlcnZlcnMgdG8gc2VlIGlmCisgICB0aGV5IHN1cHBvcnQgc21hcnQgaHR0cCwgYnV0IGRpZCBub3QgZmFsbCBiYWNrIHRvIGR1bWIgaHR0cCB0cmFuc3BvcnQKKyAgIGNvcnJlY3RseSB3aXRoIHNvbWUgc2VydmVycy4KKworICogVGltZSBiYXNlZCByZWZsb2cgc3ludGF4IGUuZy4gIkB7eWVzdGVyZGF5fSIgZGlkbid0IGRpYWdub3NlIGEgbWlzc3BlbGxlZAorICAgdGltZSBzcGVjaWZpY2F0aW9uIGFuZCBpbnN0ZWFkIGFzc3VtZWQgIkB7bm93fSIuCisKKyAqICJnaXQgYXJjaGl2ZSBIRUFEIC0tIG5vLXN1Y2gtZGlyZWN0b3J5IiBwcm9kdWNlZCBhbiBlbXB0eSBhcmNoaXZlCisgICB3aXRob3V0IGNvbXBsYWluaW5nLgorCisgKiAiZ2l0IGJsYW1lIC1MIHN0YXJ0LGVuZCAtLSBmaWxlIiBtaXNiZWhhdmVkIHdoZW4gZ2l2ZW4gYSBzdGFydCB0aGF0IGlzCisgICBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBmaWxlLgorCisgKiAiZ2l0IGNoZWNrb3V0IC1tIiBkaWRuJ3QgY29ycmVjdGx5IGNhbGwgY3VzdG9tIG1lcmdlIGJhY2tlbmQgc3VwcGxpZWQKKyAgIGJ5IHRoZSBlbmQgdXNlci4KKworICogImdpdCBjb25maWcgLWYgPGZpbGU+IiBtaXNiZWhhdmVkIHdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyAqICJnaXQgY3Zzc2VydmVyIiBkaWRuJ3QgbGlrZSBoYXZpbmcgcmVnZXggbWV0YWNoYXJhY3RlcnMgKGUuZy4gJysnKSBpbgorICAgQ1ZTUk9PVCBlbnZpcm9ubWVudC4KKworICogImdpdCBmYXN0LWltcG9ydCIgZGlkIG5vdCBjb3JyZWN0bHkgaGFuZGxlIGxhcmdlIGJsb2JzIHRoYXQgbWF5CisgICBidXN0IHRoZSBwYWNrIHNpemUgbGltaXQuCisKKyAqICJnaXQgZ3VpIiBpcyBzdXBwb3NlZCB0byB3b3JrIGV2ZW4gd2hlbiBsYXVuY2hlZCBmcm9tIGluc2lkZSBhIC5naXQKKyAgIGRpcmVjdG9yeS4KKworICogImdpdCBndWkiIG1pc2JlaGF2ZWQgd2hlbiBhcHBseWluZyBhIGh1bmsgdGhhdCBlbmRzIHdpdGggZGVsZXRpb24uCisKKyAqICJnaXQgaW1hcC1zZW5kIiBkaWQgbm90IGhvbm9yIGltYXAucHJlZm9ybWF0dGVkSFRNTCBhcyBkb2N1bWVudGVkLgorCisgKiAiZ2l0IGxvZyIgZmFtaWx5IGluY29ycmVjdGx5IHNob3dlZCB0aGUgY29tbWl0IG5vdGVzIHVuY29uZGl0aW9uYWxseSBieQorICAgbWlzdGFrZSwgd2hpY2ggd2FzIGVzcGVjaWFsbHkgaXJyaXRhdGluZyB3aGVuIHJ1bm5pbmcgImdpdCBsb2cgLS1vbmVsaW5lIi4KKworICogImdpdCBzdGF0dXMiIHNob3VsZG4ndCByZXF1aXJlIGFuIHdyaXRlIGFjY2VzcyB0byB0aGUgcmVwb3NpdG9yeS4KKworT3RoZXIgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExNDgzYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNi42LjMudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0dpdCB2MS42LjYuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS42LjYuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gb3ZlcmxvbmcgbGluZSBhZnRlciAiLmdpdGRpcjogIiBpbiBhIGdpdCBmaWxlIGNhdXNlZCBvdXQgb2YgYm91bmRzCisgICBhY2Nlc3MgdG8gYW4gYXJyYXkgb24gdGhlIHN0YWNrLgorCisgKiAiZ2l0IGJpc2VjdCAkcGF0aCIgZGlkIG5vdCBjb3JyZWN0bHkgZGlhZ25vc2UgYW4gZXJyb3Igd2hlbiBnaXZlbiBhCisgICBub24tZXhpc3RlbnQgcGF0aC4KKworICogImdpdCBibGFtZSAtTCAkc3RhcnQsJGVuZCIgc2VnZmF1bHRlZCB3aGVuIHRvbyBsYXJnZSAkc3RhcnQgd2FzIGdpdmVuLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgZGlkIG5vdCB3cml0ZSBkcmFmdCBib3ggd2l0aCBDUkxGIGxpbmUgZW5kaW5ncyBwZXIgUkZDLgorCisgKiAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tc3RvcC1hdC1ub24tb3B0aW9uIiBkaWQgbm90IHN0b3AgYXQgbm9uIG9wdGlvbgorICAgd2hlbiAtLWtlZXAtZGFzaGRhc2ggd2FzIGluIGVmZmVjdC4KKworICogImdpdHdlYiIgY2FuIHNvbWV0aW1lcyBiZSB0cmlja2VkIGludG8gcGFycm90dGluZyBhIGZpbGVuYW1lIGFyZ3VtZW50CisgICBnaXZlbiBpbiBhIHJlcXVlc3Qgd2l0aG91dCBwcm9wZXJseSBxdW90aW5nLgorCitPdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbmNsdWRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjYuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwYjU5YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS42LjYudHh0CkBAIC0wLDAgKzEsMjI0IEBACitHaXQgdjEuNi42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitOb3RlcyBvbiBiZWhhdmlvdXIgY2hhbmdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEluIHRoaXMgcmVsZWFzZSwgImdpdCBmc2NrIiBkZWZhdWx0cyB0byAiZ2l0IGZzY2sgLS1mdWxsIiBhbmQKKyAgIGNoZWNrcyBwYWNrZmlsZXMsIGFuZCBiZWNhdXNlIG9mIHRoaXMgaXQgd2lsbCB0YWtlIG11Y2ggbG9uZ2VyIHRvCisgICBjb21wbGV0ZSB0aGFuIGJlZm9yZS4gIElmIHlvdSBwcmVmZXIgYSBxdWlja2VyIGNoZWNrIG9ubHkgb24gbG9vc2UKKyAgIG9iamVjdHMgKHRoZSBvbGQgZGVmYXVsdCksIHlvdSBjYW4gc2F5ICJnaXQgZnNjayAtLW5vLWZ1bGwiLiAgVGhpcworICAgaGFzIGJlZW4gc3VwcG9ydGVkIGJ5IDEuNS40IGFuZCBuZXdlciB2ZXJzaW9ucyBvZiBnaXQsIHNvIGl0IGlzCisgICBzYWZlIHRvIHdyaXRlIGl0IGluIHlvdXIgc2NyaXB0IGV2ZW4gaWYgeW91IHVzZSBzbGlnaHRseSBvbGRlciBnaXQKKyAgIG9uIHNvbWUgb2YgeW91ciBtYWNoaW5lcy4KKworUHJlcGFyaW5nIHlvdXJzZWx2ZXMgZm9yIGNvbXBhdGliaWxpdHkgaXNzdWVzIGluIDEuNy4wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gZ2l0IDEuNy4wLCB3aGljaCBpcyBwbGFubmVkIHRvIGJlIHRoZSByZWxlYXNlIGFmdGVyIDEuNi42LCB0aGVyZSB3aWxsCitiZSBhIGhhbmRmdWwgb2YgYmVoYXZpb3VyIGNoYW5nZXMgdGhhdCB3aWxsIGJyZWFrIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKK1RoZXNlIGNoYW5nZXMgd2VyZSBkaXNjdXNzZWQgbG9uZyB0aW1lIGFnbyBhbmQgZXhpc3RpbmcgYmVoYXZpb3VycyBoYXZlCitiZWVuIGlkZW50aWZpZWQgYXMgbW9yZSBwcm9ibGVtYXRpYyB0byB0aGUgdXNlcmJhc2UgdGhhbiBrZWVwaW5nIHRoZW0gZm9yCit0aGUgc2FrZSBvZiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCitXaGVuIG5lY2Vzc2FyeSwgYSB0cmFuc2l0aW9uIHN0cmF0ZWd5IGZvciBleGlzdGluZyB1c2VycyBoYXMgYmVlbiBkZXNpZ25lZAorbm90IHRvIGZvcmNlIHRoZW0gcnVubmluZyBhcm91bmQgc2V0dGluZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhbmQKK3VwZGF0aW5nIHRoZWlyIHNjcmlwdHMgaW4gb3JkZXIgdG8gZWl0aGVyIGtlZXAgdGhlIHRyYWRpdGlvbmFsIGJlaGF2aW91cgorb3IgYWRqdXN0IHRvIHRoZSBuZXcgYmVoYXZpb3VyLCBvbiB0aGUgZGF5IHRoZWlyIHN5c2FkbWluIGRlY2lkZXMgdG8gaW5zdGFsbAordGhlIG5ldyB2ZXJzaW9uIG9mIGdpdC4gIFdoZW4gd2Ugc3dpdGNoZWQgZnJvbSAiZ2l0LWZvbyIgdG8gImdpdCBmb28iIGluCisxLjYuMCwgZXZlbiB0aG91Z2ggdGhlIGNoYW5nZSBoYWQgYmVlbiBhZHZlcnRpc2VkIGFuZCB0aGUgdHJhbnNpdGlvbgorZ3VpZGUgaGFkIGJlZW4gcHJvdmlkZWQgZm9yIGEgdmVyeSBsb25nIHRpbWUsIHRoZSB1c2VycyBwcm9jcmFzdGluYXRlZAorZHVyaW5nIHRoZSBlbnRpcmUgdHJhbnNpdGlvbiBwZXJpb2QsIGFuZCBlbmRlZCB1cCBwYW5pY2tpbmcgb24gdGhlIGRheQordGhlaXIgc3lzYWRtaW5zIHVwZGF0ZWQgdGhlaXIgZ2l0IGluc3RhbGxhdGlvbi4gIFdlIGFyZSB0cnlpbmcgdG8gYXZvaWQKK3JlcGVhdGluZyB0aGF0IHVucGxlYXNhbnRuZXNzIGluIHRoZSAxLjcuMCByZWxlYXNlLgorCitGb3IgY2hhbmdlcyBkZWNpZGVkIHRvIGJlIGluIDEuNy4wLCBjb21tYW5kcyB0aGF0IHdpbGwgYmUgYWZmZWN0ZWQKK2hhdmUgYmVlbiBtdWNoIGxvdWRlciB0byBzdHJvbmdseSBkaXNjb3VyYWdlIHN1Y2ggcHJvY3Jhc3RpbmF0aW9uLCBhbmQKK3RoZXkgY29udGludWUgdG8gYmUgaW4gdGhpcyByZWxlYXNlLiAgSWYgeW91IGhhdmUgYmVlbiB1c2luZyByZWNlbnQKK3ZlcnNpb25zIG9mIGdpdCwgeW91IHdvdWxkIGhhdmUgc2VlbiB3YXJuaW5ncyBpc3N1ZWQgd2hlbiB5b3UgdXNlZAorZmVhdHVyZXMgd2hvc2UgYmVoYXZpb3VyIHdpbGwgY2hhbmdlLCB3aXRoIGEgY2xlYXIgaW5zdHJ1Y3Rpb24gb24gaG93Cit0byBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIgaWYgeW91IHdhbnQgdG8uICBZb3UgaG9wZWZ1bGx5IGFyZQorYWxyZWFkeSB3ZWxsIHByZXBhcmVkLgorCitPZiBjb3Vyc2UsIHdlIGhhdmUgYWxzbyBiZWVuIGdpdmluZyAidGhpcyBhbmQgdGhhdCB3aWxsIGNoYW5nZSBpbgorMS43LjA7IHByZXBhcmUgeW91cnNlbHZlcyIgd2FybmluZ3MgaW4gdGhlIHJlbGVhc2Ugbm90ZXMgYW5kCithbm5vdW5jZW1lbnQgbWVzc2FnZXMgZm9yIHRoZSBwYXN0IGZldyByZWxlYXNlcy4gIExldCdzIHNlZSBob3cgd2VsbAordXNlcnMgd2lsbCBmYXJlIHRoaXMgdGltZS4KKworICogImdpdCBwdXNoIiBpbnRvIGEgYnJhbmNoIHRoYXQgaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0IChpLmUuIHBvaW50ZWQgYnkKKyAgIEhFQUQgaW4gYSByZXBvc2l0b3J5IHRoYXQgaXMgbm90IGJhcmUpIHdpbGwgYmUgcmVmdXNlZCBieSBkZWZhdWx0LgorCisgICBTaW1pbGFybHksICJnaXQgcHVzaCAkdGhlcmUgOiRraWxsZWQiIHRvIGRlbGV0ZSB0aGUgYnJhbmNoICRraWxsZWQKKyAgIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkgJHRoZXJlLCB3aGVuICRraWxsZWQgYnJhbmNoIGlzIHRoZSBjdXJyZW50CisgICBicmFuY2ggcG9pbnRlZCBhdCBieSBpdHMgSEVBRCwgd2lsbCBiZSByZWZ1c2VkIGJ5IGRlZmF1bHQuCisKKyAgIFNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggYW5kCisgICByZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50IHRvICdpZ25vcmUnIGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeQorICAgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlc2Ugc2FmZXR5IGZlYXR1cmVzLiAgVmVyc2lvbnMgb2YgZ2l0CisgICBzaW5jZSAxLjYuMiBoYXZlIGlzc3VlZCBhIGxvdWQgd2FybmluZyB3aGVuIHlvdSB0cmllZCB0byBkbyB0aGVzZQorICAgb3BlcmF0aW9ucyB3aXRob3V0IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIHNvIHJlcG9zaXRvcmllcyBvZgorICAgcGVvcGxlIHdobyBzdGlsbCBuZWVkIHRvIGJlIGFibGUgdG8gcGVyZm9ybSBzdWNoIGEgcHVzaCBzaG91bGQKKyAgIGFscmVhZHkgaGF2ZSBiZWVuIGZ1dHVyZSBwcm9vZmVkLgorCisgICBQbGVhc2UgcmVmZXIgdG86CisKKyAgIGh0dHA6Ly9naXQub3IuY3ovZ2l0d2lraS9HaXRGYXEjbm9uLWJhcmUKKyAgIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8xMDc3NTgvZm9jdXM9MTA4MDA3CisKKyAgIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIHJlYXNvbiB3aHkgdGhpcyBjaGFuZ2UgaXMgbmVlZGVkIGFuZCB0aGUKKyAgIHRyYW5zaXRpb24gcHJvY2VzcyB0aGF0IGFscmVhZHkgdG9vayBwbGFjZSBzbyBmYXIuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgd2lsbCBub3QgbWFrZSBkZWVwIHRocmVhZHMgYnkgZGVmYXVsdCB3aGVuIHNlbmRpbmcgYQorICAgcGF0Y2ggc2VyaWVzIHdpdGggbW9yZSB0aGFuIHR3byBtZXNzYWdlcy4gIEFsbCBtZXNzYWdlcyB3aWxsIGJlIHNlbnQKKyAgIGFzIGEgcmVwbHkgdG8gdGhlIGZpcnN0IG1lc3NhZ2UsIGkuZS4gY292ZXIgbGV0dGVyLiAgR2l0IDEuNi42ICh0aGlzCisgICByZWxlYXNlKSB3aWxsIGlzc3VlIGEgd2FybmluZyBhYm91dCB0aGUgdXBjb21pbmcgZGVmYXVsdCBjaGFuZ2UsIHdoZW4KKyAgIGl0IHVzZXMgdGhlIHRyYWRpdGlvbmFsICJkZWVwIHRocmVhZGluZyIgYmVoYXZpb3VyIGFzIHRoZSBidWlsdC1pbgorICAgZGVmYXVsdC4gIFRvIHNxdWVsY2ggdGhlIHdhcm5pbmcgYnV0IHN0aWxsIHVzZSB0aGUgImRlZXAgdGhyZWFkaW5nIgorICAgYmVoYXZpb3VyLCBnaXZlIC0tY2hhaW4tcmVwbHktdG8gb3B0aW9uIG9yIHNldCBzZW5kZW1haWwuY2hhaW5yZXBseXRvCisgICB0byB0cnVlLgorCisgICBJdCBoYXMgYmVlbiBwb3NzaWJsZSB0byBjb25maWd1cmUgc2VuZC1lbWFpbCB0byBzZW5kICJzaGFsbG93IHRocmVhZCIKKyAgIGJ5IHNldHRpbmcgc2VuZGVtYWlsLmNoYWlucmVwbHl0byBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGZhbHNlLgorICAgVGhlIG9ubHkgdGhpbmcgMS43LjAgcmVsZWFzZSB3aWxsIGRvIGlzIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB3aGVuCisgICB5b3UgaGF2ZW4ndCBjb25maWd1cmVkIHRoYXQgdmFyaWFibGUuCisKKyAqICJnaXQgc3RhdHVzIiB3aWxsIG5vdCBiZSAiZ2l0IGNvbW1pdCAtLWRyeS1ydW4iLiAgVGhpcyBjaGFuZ2UgZG9lcyBub3QKKyAgIGFmZmVjdCB5b3UgaWYgeW91IHJ1biB0aGUgY29tbWFuZCB3aXRob3V0IHBhdGhzcGVjLgorCisgICBOb2JvZHkgc2FuZSBmb3VuZCB0aGUgY3VycmVudCBiZWhhdmlvdXIgb2YgImdpdCBzdGF0dXMgTWFrZWZpbGUiIHVzZWZ1bAorICAgbm9yIG1lYW5pbmdmdWwsIGFuZCBpdCBjb25mdXNlZCB1c2Vycy4gICJnaXQgY29tbWl0IC0tZHJ5LXJ1biIgaGFzIGJlZW4KKyAgIHByb3ZpZGVkIGFzIGEgd2F5IHRvIGdldCB0aGUgY3VycmVudCBiZWhhdmlvdXIgb2YgdGhpcyBjb21tYW5kIHNpbmNlCisgICAxLjYuNS4KKworICogImdpdCBkaWZmIiB0cmFkaXRpb25hbGx5IHRyZWF0ZWQgdmFyaW91cyAiaWdub3JlIHdoaXRlc3BhY2UiIG9wdGlvbnMKKyAgIG9ubHkgYXMgYSB3YXkgdG8gZmlsdGVyIHRoZSBwYXRjaCBvdXRwdXQuICAiZ2l0IGRpZmYgLS1leGl0LWNvZGUgLWIiCisgICBleGl0ZWQgd2l0aCBub24temVybyBzdGF0dXMgZXZlbiBpZiBhbGwgY2hhbmdlcyB3ZXJlIGFib3V0IGNoYW5naW5nIHRoZQorICAgYW1vdW50IG9mIHdoaXRlc3BhY2UgYW5kIG5vdGhpbmcgZWxzZS4gIGFuZCAiZ2l0IGRpZmYgLWIiIHNob3dlZCB0aGUKKyAgICJkaWZmIC0tZ2l0IiBoZWFkZXIgbGluZSBmb3Igc3VjaCBhIGNoYW5nZSB3aXRob3V0IHBhdGNoIHRleHQuCisKKyAgIEluIDEuNy4wLCB0aGUgImlnbm9yZSB3aGl0ZXNwYWNlcyIgd2lsbCBhZmZlY3QgdGhlIHNlbWFudGljcyBvZiB0aGUKKyAgIGRpZmYgb3BlcmF0aW9uIGl0c2VsZi4gIEEgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWZmZWN0IGFueXRoaW5nIGJ1dAorICAgd2hpdGVzcGFjZXMgd2lsbCBiZSByZXBvcnRlZCB3aXRoIHplcm8gZXhpdCBzdGF0dXMgd2hlbiBydW4gd2l0aAorICAgLS1leGl0LWNvZGUsIGFuZCB0aGVyZSB3aWxsIG5vdCBiZSAiZGlmZiAtLWdpdCIgaGVhZGVyIGZvciBzdWNoIGEKKyAgIGNoYW5nZS4KKworCitVcGRhdGVzIHNpbmNlIHYxLjYuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKHN1YnN5c3RlbXMpCisKKyAqIHZhcmlvdXMgZ2l0ayB1cGRhdGVzIGluY2x1ZGluZyB1c2Ugb2YgdGhlbWVkIHdpZGdldHMgdW5kZXIgVGsgOC41LAorICAgSmFwYW5lc2UgdHJhbnNsYXRpb24sIGEgZml4IHRvIGEgYnVnIHdoZW4gcnVubmluZyAiZ3VpIGJsYW1lIiBmcm9tCisgICBhIHN1YmRpcmVjdG9yeSwgZXRjLgorCisgKiB2YXJpb3VzIGdpdC1ndWkgdXBkYXRlcyBpbmNsdWRpbmcgbmV3IHRyYW5zbGF0aW9ucywgd20gc3RhdGVzIGZpeGVzLAorICAgVGsgYnVnIHdvcmthcm91bmQgYWZ0ZXIgcXVpdHRpbmcsIGltcHJvdmVkIGhldXJpc3RpY3MgdG8gdHJpZ2dlciBnYywKKyAgIGV0Yy4KKworICogdmFyaW91cyBnaXQtc3ZuIHVwZGF0ZXMuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgaHR0cCBsZWFybmVkIGEgbmV3IG1vZGUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUKKyAgIHRyYWRpdGlvbmFsICJkdW1iIGNvbW1pdCB3YWxrZXIiLgorCisocG9ydGFiaWxpdHkpCisKKyAqIGltYXAtc2VuZCBjYW4gYmUgYnVpbHQgb24gbWluZ3cgcG9ydC4KKworKHBlcmZvcm1hbmNlKQorCisgKiAiZ2l0IGRpZmYgLUIiIGhhcyBzbWFsbGVyIG1lbW9yeSBmb290cHJpbnQuCisKKyh1c2FiaWxpdHksIGJlbGxzIGFuZCB3aGlzdGxlcykKKworICogVGhlIG9iamVjdCByZXBsYWNlIG1lY2hhbmlzbSBjYW4gYmUgYnlwYXNzZWQgd2l0aCAtLW5vLXJlcGxhY2Utb2JqZWN0cworICAgZ2xvYmFsIG9wdGlvbiBnaXZlbiB0byB0aGUgImdpdCIgcHJvZ3JhbS4KKworICogSW4gY29uZmlndXJhdGlvbiBmaWxlcywgYSBmZXcgdmFyaWFibGVzIHRoYXQgbmFtZSBwYXRocyBjYW4gYmVnaW4gd2l0aCB+LworICAgYW5kIH51c2VybmFtZS8gYW5kIHRoZXkgYXJlIGV4cGFuZGVkIGFzIGV4cGVjdGVkLgorCisgKiAiZ2l0IHN1YmNtZCAtaCIgbm93IHNob3dzIHNob3J0IHVzYWdlIGhlbHAgZm9yIG1hbnkgbW9yZSBzdWJjb21tYW5kcy4KKworICogImdpdCBiaXNlY3QgcmVzZXQiIGNhbiByZXNldCB0byBhbiBhcmJpdHJhcnkgY29tbWl0LgorCisgKiAiZ2l0IGNoZWNrb3V0IGZyb3R6IiB3aGVuIHRoZXJlIGlzIG5vIGxvY2FsIGJyYW5jaCAiZnJvdHoiIGJ1dCB0aGVyZQorICAgaXMgb25seSBvbmUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCAiZnJvdHoiIGlzIHRha2VuIGFzIGEgcmVxdWVzdCB0bworICAgc3RhcnQgdGhlIG5hbWVkIGJyYW5jaCBhdCB0aGUgY29ycmVzcG9uZGluZyByZW1vdGUgdHJhY2tpbmcgYnJhbmNoLgorCisgKiAiZ2l0IGNvbW1pdCAtYy8tQy8tLWFtZW5kIiBjYW4gYmUgdG9sZCB3aXRoIGEgbmV3ICItLXJlc2V0LWF1dGhvciIgb3B0aW9uCisgICB0byBpZ25vcmUgYXV0aG9yc2hpcCBpbmZvcm1hdGlvbiBpbiB0aGUgY29tbWl0IGl0IGlzIHRha2luZyB0aGUgbWVzc2FnZQorICAgZnJvbS4KKworICogImdpdCBkZXNjcmliZSIgY2FuIGJlIHRvbGQgdG8gYWRkICItZGlydHkiIHN1ZmZpeCB3aXRoICItLWRpcnR5IiBvcHRpb24uCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCAtLXN1Ym1vZHVsZSBvcHRpb24gdG8gc2hvdyBhIGxpc3Qgb2Ygb25lLWxpbmUgbG9ncworICAgaW5zdGVhZCBvZiBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBjb21taXQgb2JqZWN0IG5hbWVzLgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgdG8gaG9ub3IgZGlmZi5jb2xvci5mdW5jIGNvbmZpZ3VyYXRpb24gdG8gcGFpbnQKKyAgIGZ1bmN0aW9uIG5hbWUgaGludCBwcmludGVkIG9uIHRoZSBodW5rIGhlYWRlciAiQEAgLWosayArbCxtIEBAIiBsaW5lCisgICBpbiB0aGUgc3BlY2lmaWVkIGNvbG9yLgorCisgKiAiZ2l0IGZldGNoIiBsZWFybmVkIC0tYWxsIGFuZCAtLW11bHRpcGxlIG9wdGlvbnMsIHRvIHJ1biBmZXRjaCBmcm9tCisgICBtYW55IHJlcG9zaXRvcmllcywgYW5kIC0tcHJ1bmUgb3B0aW9uIHRvIHJlbW92ZSByZW1vdGUgdHJhY2tpbmcKKyAgIGJyYW5jaGVzIHRoYXQgd2VudCBzdGFsZS4gIFRoZXNlIG1ha2UgImdpdCByZW1vdGUgdXBkYXRlIiBhbmQgImdpdAorICAgcmVtb3RlIHBydW5lIiBsZXNzIG5lY2Vzc2FyeSAodGhlcmUgaXMgbm8gcGxhbiB0byByZW1vdmUgInJlbW90ZQorICAgdXBkYXRlIiBub3IgInJlbW90ZSBwcnVuZSIsIHRob3VnaCkuCisKKyAqICJnaXQgZnNjayIgYnkgZGVmYXVsdCBjaGVja3MgdGhlIHBhY2tmaWxlcyAoaS5lLiAiLS1mdWxsIiBpcyB0aGUKKyAgIGRlZmF1bHQpOyB5b3UgY2FuIHR1cm4gaXQgb2ZmIHdpdGggImdpdCBmc2NrIC0tbm8tZnVsbCIuCisKKyAqICJnaXQgZ3JlcCIgY2FuIHVzZSAtRiAoZml4ZWQgc3RyaW5ncykgYW5kIC1pIChpZ25vcmUgY2FzZSkgdG9nZXRoZXIuCisKKyAqIGltcG9ydC10YXJzIGNvbnRyaWJ1dGVkIGZhc3QtaW1wb3J0IGZyb250ZW5kIGxlYXJuZWQgbW9yZSB0eXBlcyBvZgorICAgY29tcHJlc3NlZCB0YXJiYWxscy4KKworICogImdpdCBpbnN0YXdlYiIga25vd3MgaG93IHRvIHRhbGsgd2l0aCBtb2RfY2dpZCB0byBhcGFjaGUyLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBzaG93cyB0aGUgbG9jYXRpb24gb2YgSEVBRCBhcyB3ZWxsLgorCisgKiAiZ2l0IGxvZyIgYW5kICJnaXQgcmV2LWxpc3QiIGxlYXJuZWQgdG8gdGFrZSByZXZzIGFuZCBwYXRoc3BlY3MgZnJvbQorICAgdGhlIHN0YW5kYXJkIGlucHV0IHdpdGggdGhlIG5ldyAiLS1zdGRpbiIgb3B0aW9uLgorCisgKiAiLS1wcmV0dHk9Zm9ybWF0IiBvcHRpb24gdG8gImxvZyIgZmFtaWx5IG9mIGNvbW1hbmRzIGxlYXJuZWQ6CisKKyAgIC4gdG8gd3JhcCB0ZXh0IHdpdGggdGhlICIldygpIiBzcGVjaWZpZXIuCisgICAuIHRvIHNob3cgcmVmbG9nIGluZm9ybWF0aW9uIHdpdGggIiVnW3NkRF0iIHNwZWNpZmllci4KKworICogImdpdCBub3RlcyIgY29tbWFuZCB0byBhbm5vdGF0ZSBleGlzdGluZyBjb21taXRzLgorCisgKiAiZ2l0IG1lcmdlIiAoYW5kICJnaXQgcHVsbCIpIGxlYXJuZWQgLS1mZi1vbmx5IG9wdGlvbiB0byBtYWtlIGl0IGZhaWwKKyAgIGlmIHRoZSBtZXJnZSBkb2VzIG5vdCByZXN1bHQgaW4gYSBmYXN0LWZvcndhcmQuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIHRvIHVzZSBwNG1lcmdlLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgbGVhcm5lZCAicmV3b3JkIiB0aGF0IGFjdHMgbGlrZSAiZWRpdCIgYnV0IGltbWVkaWF0ZWx5CisgICBzdGFydHMgYW4gZWRpdG9yIHRvIHR3ZWFrIHRoZSBsb2cgbWVzc2FnZSB3aXRob3V0IHJldHVybmluZyBjb250cm9sIHRvCisgICB0aGUgc2hlbGwsIHdoaWNoIGlzIGRvbmUgYnkgImVkaXQiIHRvIGdpdmUgYW4gb3Bwb3J0dW5pdHkgdG8gdHdlYWsgdGhlCisgICBjb250ZW50cy4KKworICogImdpdCBzZW5kLWVtYWlsIiBjYW4gYmUgdG9sZCB3aXRoICItLWVudmVsb3BlLXNlbmRlcj1hdXRvIiB0byB1c2UgdGhlCisgICBzYW1lIGFkZHJlc3MgYXMgIkZyb206IiBhZGRyZXNzIGFzIHRoZSBlbnZlbG9wZSBzZW5kZXIgYWRkcmVzcy4KKworICogImdpdCBzZW5kLWVtYWlsIiB3aWxsIGlzc3VlIGEgd2FybmluZyB3aGVuIGl0IGRlZmF1bHRzIHRvIHRoZQorICAgLS1jaGFpbi1yZXBseS10byBiZWhhdmlvdXIgd2l0aG91dCBiZWluZyB0b2xkIGJ5IHRoZSB1c2VyIGFuZAorICAgaW5zdHJ1Y3RzIHRvIHByZXBhcmUgZm9yIHRoZSBjaGFuZ2Ugb2YgdGhlIGRlZmF1bHQgaW4gMS43LjAgcmVsZWFzZS4KKworICogSW4gImdpdCBzdWJtb2R1bGUgYWRkIDxyZXBvc2l0b3J5PiA8cGF0aD4iLCA8cGF0aD4gaXMgbm93IG9wdGlvbmFsIGFuZAorICAgaW5mZXJyZWQgZnJvbSA8cmVwb3NpdG9yeT4gdGhlIHNhbWUgd2F5ICJnaXQgY2xvbmUgPHJlcG9zaXRvcnk+IiBkb2VzLgorCisgKiAiZ2l0IHN2biIgbGVhcm5lZCB0byByZWFkIFNWTiAxLjUrIGFuZCBTVksgbWVyZ2UgdGlja2V0cy4KKworICogImdpdCBzdm4iIGxlYXJuZWQgdG8gcmVjcmVhdGUgZW1wdHkgZGlyZWN0b3JpZXMgdHJhY2tlZCBvbmx5IGJ5IFNWTi4KKworICogImdpdHdlYiIgY2FuIG9wdGlvbmFsbHkgcmVuZGVyIGl0cyAiYmxhbWUiIG91dHB1dCBpbmNyZW1lbnRhbGx5ICh0aGlzCisgICByZXF1aXJlcyBKYXZhU2NyaXB0IG9uIHRoZSBjbGllbnQgc2lkZSkuCisKKyAqIEF1dGhvciBuYW1lcyBzaG93biBpbiBnaXR3ZWIgb3V0cHV0IGFyZSBsaW5rcyB0byBzZWFyY2ggY29tbWl0cyBieSB0aGUKKyAgIGF1dGhvci4KKworRml4ZXMgc2luY2UgdjEuNi41CistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS42LjUuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmY1YmNhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4xLnR4dApAQCAtMCwwICsxLDM1IEBACitHaXQgdjEuNy4wLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogSW4gYSBmcmVzaGx5IGNyZWF0ZWQgcmVwb3NpdG9yeSAicmV2LXBhcnNlIEhFQUReMCIgY29tcGxhaW5lZCB0aGF0CisgICBpdCBpcyBkYW5nbGluZyBzeW1yZWYsIGV2ZW4gdGhvdWdoICJyZXYtcGFyc2UgSEVBRCIgZGlkbid0LgorCisgKiAiZ2l0IHNob3cgOm5vLXN1Y2gtbmFtZSIgdHJpZWQgdG8gYWNjZXNzIHRoZSBpbmRleCB3aXRob3V0IGJvdW5kcworICAgY2hlY2ssIGxlYWRpbmcgdG8gYSBwb3RlbnRpYWwgc2VnZmF1bHQuCisKKyAqIE1lc3NhZ2UgZnJvbSAiZ2l0IGNoZXJyeS1waWNrIiB3YXMgaGFyZGVyIHRvIHJlYWQgYW5kIHVzZSB0aGFuIG5lY2Vzc2FyeQorICAgd2hlbiBpdCBzdG9wcGVkIGR1ZSB0byBjb25mbGljdGluZyBjaGFuZ2VzLgorCisgKiBXZSByZWZlcnJlZCB0byAiLmdpdC9yZWZzLyIgdGhyb3VnaG91dCB0aGUgZG9jdW1lbnRhdGlvbiB3aGVuIHdlCisgICBtZWFudCB0byB0YWxrIGFib3V0IGFic3RyYWN0IG5vdGlvbiBvZiAicmVmIG5hbWVzcGFjZSIuICBCZWNhdXNlCisgICBwZW9wbGUncyByZXBvc2l0b3JpZXMgb2Z0ZW4gaGF2ZSBwYWNrZWQgcmVmcyB0aGVzZSBkYXlzLCB0aGlzIHdhcworICAgY29uZnVzaW5nLgorCisgKiAiZ2l0IGRpZmYgLS1vdXRwdXQ9L3BhdGgvdGhhdC9jYW5ub3QvYmUvd3JpdHRlbiIgZGlkIG5vdCBjb3JyZWN0bHkKKyAgIGVycm9yIG91dC4KKworICogImdpdCBncmVwIC1lIC1wYXR0ZXJuLXRoYXQtYmVnaW4td2l0aC1kYXNoIHBhdGhzLi4uIiBjb3VsZCBub3QgYmUKKyAgIHNwZWxsZWQgYXMgImdpdCBncmVwIC0tIC1wYXR0ZXJuLXRoYXQtYmVnaW4td2l0aC1kYXNoIHBhdGhzLi4uIiB3aGljaAorICAgd291bGQgYmUgYSBHTlUgd2F5IHRvIHVzZSAiLS0iIGFzICJlbmQgb2Ygb3B0aW9ucyIuCisKKyAqICJnaXQgZ3JlcCIgY29tcGlsZWQgd2l0aCB0aHJlYWRpbmcgc3VwcG9ydCB0cmllZCB0byBhY2Nlc3MgYW4KKyAgIHVuaW5pdGlhbGl6ZWQgbXV0ZXggb24gYm94ZXMgd2l0aCBhIHNpbmdsZSBDUFUuCisKKyAqICJnaXQgc3Rhc2ggcG9wIC1xIC0taW5kZXgiIGZhaWxlZCBiZWNhdXNlIHRoZSB1bm5lY2Vzc2FyeSAtLWluZGV4CisgICBvcHRpb24gd2FzIHByb3BhZ2F0ZWQgdG8gImdpdCBzdGFzaCBkcm9wIiB0aGF0IGlzIGludGVybmFsbHkgcnVuIGF0IHRoZQorICAgZW5kLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYjQ2Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjIudHh0CkBAIC0wLDAgKzEsNDAgQEAKK0dpdCB2MS43LjAuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogR0lUX1BBR0VSIHdhcyBub3QgaG9ub3JlZCBjb25zaXN0ZW50bHkgYnkgc29tZSBzY3JpcHRlZCBQb3JjZWxhaW5zLCBtb3N0CisgICBub3RhYmx5ICJnaXQgYW0iLgorCisgKiB1cGRhdGluZyB3b3JraW5nIHRyZWUgZmlsZXMgYWZ0ZXIgdGVsbGluZyBnaXQgdG8gYWRkIHRoZW0gdG8gdGhlCisgICBpbmRleCBhbmQgd2hpbGUgaXQgaXMgc3RpbGwgd29ya2luZyBjcmVhdGVkIGdhcmJhZ2Ugb2JqZWN0IGZpbGVzIGluCisgICB0aGUgcmVwb3NpdG9yeSB3aXRob3V0IGRpYWdub3NpbmcgaXQgYXMgYW4gZXJyb3IuCisKKyAqICJnaXQgYmlzZWN0IC0tIHBhdGhzcGVjLi4uIiBkaWQgbm90IGRpYWdub3NlIGFuIGVycm9yIGNvbmRpdGlvbiBwcm9wZXJseSB3aGVuCisgICB0aGUgc2ltcGxpZmljYXRpb24gd2l0aCBnaXZlbiBwYXRoc3BlYyBtYWRlIHRoZSBoaXN0b3J5IGVtcHR5LgorCisgKiAiZ2l0IHJldi1saXN0IC0tY2hlcnJ5LXBpY2sgQS4uLkIiIG5vdyBoYXMgYW4gb2J2aW91cyBvcHRpbWl6YXRpb24gd2hlbiB0aGUKKyAgIGhpc3RvcmllcyBoYXZlbid0IGRpdmVyZ2VkIChpLmUuIHdoZW4gb25lIGVuZCBpcyBhbiBhbmNlc3RvciBvZiB0aGUgb3RoZXIpLgorCisgKiAiZ2l0IGRpZmYgLS1xdWlldCAtdyIgZGlkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBkaWRuJ3Qgd29yayB3aXRoIGEgbGFyZ2UgaW5wdXQsIGFzIGl0IGxhY2tlZCBzdXBwb3J0CisgICBmb3IgcHJvZHVjaW5nIHRoZSBwYWNrIGluZGV4IGluIHYyIGZvcm1hdC4KKworICogImdpdCBpbWFwLXNlbmQiIGRpZG4ndCB1c2UgQ1JMRiBsaW5lIGVuZGluZ3Mgb3ZlciB0aGUgaW1hcCBwcm90b2NvbAorICAgd2hlbiBzdG9yaW5nIGl0cyBwYXlsb2FkIHRvIHRoZSBkcmFmdCBib3gsIHZpb2xhdGluZyBSRkMgMzUwMS4KKworICogImdpdCBsb2cgLS1mb3JtYXQ9JyV3KHgseSx6KSViJyIgYW5kIGZyaWVuZHMgdGhhdCByZXdyYXAgbWVzc2FnZQorICAgaGFzIGJlZW4gb3B0aW1pemVkIGZvciB1dGYtOCBwYXlsb2FkLgorCisgKiBFcnJvciBtZXNzYWdlcyBnZW5lcmF0ZWQgb24gdGhlIHJlY2VpdmluZyBlbmQgZGlkIG5vdCBjb21lIGJhY2sgdG8gImdpdAorICAgcHVzaCIuCisKKyAqICJnaXQgc3RhdHVzIiBpbiAxLjcuMCBsYWNrZWQgdGhlIG9wdGltaXphdGlvbiB3ZSB1c2VkIHRvIGhhdmUgaW4gMS42Llggc2VyaWVzCisgICB0byBzcGVlZCB1cCBzY2FubmluZyBvZiBsYXJnZSB3b3JraW5nIHRyZWUuCisKKyAqICJnaXR3ZWIiIGRpZCBub3QgZGlhZ25vc2UgcGFyc2luZyBlcnJvcnMgcHJvcGVybHkgd2hpbGUgcmVhZGluZyB0aXMgY29uZmlndXJhdGlvbgorICAgZmlsZS4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjM1NTczCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC4zLnR4dApAQCAtMCwwICsxLDM0IEBACitHaXQgdjEuNy4wLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE9iamVjdCBmaWxlcyBhcmUgY3JlYXRlZCBpbiBhIG1vcmUgQUNMIGZyaWVuZGx5IHdheSBpbiByZXBvc2l0b3JpZXMKKyAgIHdoZXJlIGdyb3VwIHBlcm1pc3Npb24gaXMgQUNMIGNvbnRyb2xsZWQuCisKKyAqICJnaXQgYWRkIC1pIiBkaWRuJ3QgaGFuZGxlIGEgZGVsZXRlZCBwYXRoIHZlcnkgd2VsbC4KKworICogImdpdCBibGFtZSIgcGFkZGVkIGxpbmUgbnVtYmVycyB3aXRoIG9uZSBleHRyYSBTUCB3aGVuIHRoZSB0b3RhbCBudW1iZXIKKyAgIG9mIGxpbmVzIHdhcyBvbmUgbGVzcyB0aGFuIG11bHRpcGxlIG9mIHRlbiBkdWUgdG8gYW4gb2ZmLWJ5LW9uZSBlcnJvci4KKworICogImdpdCBmZXRjaCAtLWFsbC8tLW11bHRpIiB1c2VkIHRvIGRpc2NhcmQgaW5mb3JtYXRpb24gZm9yIHJlbW90ZXMgdGhhdAorICAgYXJlIGZldGNoZWQgZWFybGllci4KKworICogImdpdCBsb2cgLS1hdXRob3I9bWUgLS1ncmVwPWl0IiB0cmllZCB0byBmaW5kIGNvbW1pdHMgdGhhdCBoYXZlICJpdCIKKyAgIG9yIGFyZSB3cml0dGVuIGJ5ICJtZSIsIGluc3RlYWQgb2YgdGhlIG9uZXMgdGhhdCBoYXZlICJpdCIgX2FuZF8gYXJlCisgICB3cml0dGVuIGJ5ICJtZSIuCisKKyAqICJnaXQgbG9nIC1nIGJyYW5jaCIgbWlzYmVoYXZlZCB3aGVuIHRoZXJlIHdhcyBubyBlbnRyaWVzIGluIHRoZSByZWZsb2cKKyAgIGZvciB0aGUgbmFtZWQgYnJhbmNoLgorCisgKiAiZ2l0IG1haWxpbmZvIiAoaGVuY2UgImdpdCBhbSIpIGluY29ycmVjdGx5IHJlbW92ZWQgaW5pdGlhbCBpbmRlbnQgZnJvbQorICAgcGFyYWdyYXBocy4KKworICogImdpdCBwcnVuZSIgYW5kICJnaXQgcmVmbG9nIiAoaGVuY2UgImdpdCBnYyIgYXMgd2VsbCkgZGlkbid0IGhvbm9yCisgICBhbiBpbnN0cnVjdGlvbiBuZXZlciB0byBleHBpcmUgYnkgc2V0dGluZyBnYy5yZWZsb2dleHBpcmUgdG8gbmV2ZXIuCisKKyAqICJnaXQgcHVzaCIgbWlzYmVoYXZlZCB3aGVuIGJyYW5jaC48bmFtZT4ubWVyZ2Ugd2FzIGNvbmZpZ3VyZWQgd2l0aG91dAorICAgbWF0Y2hpbmcgYnJhbmNoLjxuYW1lPi5yZW1vdGUuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3ZjYwZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNC50eHQKQEAgLTAsMCArMSwyNyBAQAorR2l0IHYxLjcuMC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBPcHRpbWl6ZWQgbnRvaGwvaHRvbmwgb24gYmlnLWVuZGlhbiBtYWNoaW5lcyB3ZXJlIGJyb2tlbi4KKworICogQ29sb3IgdmFsdWVzIGdpdmVuIHRvICJjb2xvci48Y21kPi48c2xvdD4iIGNvbmZpZ3VyYXRpb24gY2FuIG5vdyBoYXZlCisgICBtb3JlIHRoYW4gb25lIGF0dHJpYnV0ZXMgKGUuZy4gImJvbGQgdWwiKS4KKworICogImdpdCBhZGQgLXUgbm9uZXhpc3RlbnQtcGF0aCIgZGlkIG5vdCBjb21wbGFpbi4KKworICogImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiBkaWRuJ3Qgd29yayB3ZWxsIHdoZW4gYW4gZWFybHkgcGF0Y2ggaW4KKyAgIGEgcGF0Y2ggc2VyaWVzIGFkZHMgdHJhaWxpbmcgYmxhbmsgbGluZXMgYW5kIGEgbGF0ZXIgb25lIGRlcGVuZGVkIG9uCisgICBzdWNoIGEgYmxvY2sgb2YgYmxhbmsgbGluZXMgYXQgdGhlIGVuZC4KKworICogImdpdCBmYXN0LWV4cG9ydCIgZGlkbid0IGNoZWNrIGVycm9yIHN0YXR1cyBhbmQgc3RvcCB3aGVuIG1hcmtzIGZpbGUKKyAgIGNhbm5vdCBiZSBvcGVuZWQuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIiBnYXZlIHVud2FycmFudGVkIGVycm9ycworICAgd2hlbiB0aGUgcmFuZ2Ugd2FzIGVtcHR5LCBpbnN0ZWFkIG9mIHNpbGVudGx5IGZpbmlzaGluZy4KKworICogImdpdCByZW1vdGUgcHJ1bmUiIGRpZCBub3QgZGV0ZWN0IHJlbW90ZSB0cmFja2luZyByZWZzIHRoYXQgYmVjYW1lCisgICBkYW5nbGluZyBjb3JyZWN0bHkuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE0OWM5MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjAuNS50eHQKQEAgLTAsMCArMSwyNiBAQAorR2l0IHYxLjcuMC41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMC40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGRhZW1vbiIgZmFpbGVkIHRvIGNvbXBpbGUgb24gcGxhdGZvcm1zIHdpdGhvdXQgc29ja2FkZHJfc3RvcmFnZSB0eXBlLgorCisgKiBPdXRwdXQgZnJvbSAiZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUiIHdhcyB1bnBhcnNhYmxlIHdoZW4gYQorICAgY29tbWl0IGRpZCBub3QgaGF2ZSBhbnkgbWVzc2FnZSwgd2hpY2ggaXMgYWJub3JtYWwgYnV0IHBvc3NpYmxlIGluIGEKKyAgIHJlcG9zaXRvcnkgY29udmVydGVkIGZyb20gZm9yZWlnbiBzY20uCisKKyAqICJnaXQgc3Rhc2ggc2hvdyA8Y29tbWl0LXRoYXQtaXMtbm90LWEtc3Rhc2g+IiBnYXZlIGFuIGVycm9yIG1lc3NhZ2UKKyAgIHRoYXQgd2FzIG5vdCBzbyB1c2VmdWwuICBSZXdvcmRlZCB0aGUgbWVzc2FnZSB0byAiPGl0PiBpcyBub3QgYQorICAgc3Rhc2giLgorCisgKiBQeXRob24gc2NyaXB0cyBpbiBjb250cmliLyBhcmVhIG5vdyBzdGFydCB3aXRoICIjIS91c3IvYmluL2VudiBweXRob24iCisgICB0byBob25vciB1c2VyJ3MgUEFUSC4KKworICogImdpdCBpbWFwLXNlbmQiIHVzZWQgdG8gbWlzdGFrZSBhbnkgbGluZSB0aGF0IGJlZ2lucyB3aXRoICJGcm9tICIgYXMgYQorICAgbWVzc2FnZSBzZXBhcmF0b3IgaW4gZm9ybWF0LXBhdGNoIG91dHB1dC4KKworICogU21hcnQgaHR0cCBzZXJ2ZXIgYmFja2VuZCBmYWlsZWQgdG8gcmVwb3J0IGFuIGludGVybmFsIHNlcnZlciBlcnJvciBhbmQKKyAgIGluZmluaXRlbHkgbG9vcGVkIGluc3RlYWQgYWZ0ZXIgb3V0cHV0IHBpcGUgd2FzIGNsb3NlZC4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjg1MmI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC42LnR4dApAQCAtMCwwICsxLDEzIEBACitHaXQgdjEuNy4wLjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wLjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZGlmZiAtLXN0YXQiIHVzZWQgImludCIgdG8gY291bnQgdGhlIHNpemUgb2YgZGlmZmVyZW5jZXMsCisgICB3aGljaCBjb3VsZCByZXN1bHQgaW4gb3ZlcmZsb3dpbmcuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1hYmJyZXYtY29tbWl0IiBkZWZhdWx0ZWQgdG8gNDAtYnl0ZSBhYmJyZXZpYXRpb25zLCB1bmxpa2UKKyAgIG5ld2VyIHRvb2xzIGluIHRoZSBnaXQgdG9vbHNldC4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGNiN2NhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC43LnR4dApAQCAtMCwwICsxLDE2IEBACitHaXQgdjEuNy4wLjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4wLjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJtYWtlIE5PX0NVUkw9Tm9UaGFua3MgaW5zdGFsbCIgd2FzIGJyb2tlbi4KKworICogQW4gb3ZlcmxvbmcgbGluZSBhZnRlciAiLmdpdGRpcjogIiBpbiBhIGdpdCBmaWxlIGNhdXNlZCBvdXQgb2YgYm91bmRzCisgICBhY2Nlc3MgdG8gYW4gYXJyYXkgb24gdGhlIHN0YWNrLgorCisgKiAiZ2l0IGNvbmZpZyAtLXBhdGggY29uZi52YXIiIHRvIGF0dGVtcHQgdG8gZXhwYW5kIGEgdmFyaWFibGUgY29uZi52YXIKKyAgIHRoYXQgdXNlcyAifi8iIHNob3J0LWhhbmQgc2VnZmF1bHRlZCB3aGVuICRIT01FIGVudmlyb25tZW50IHZhcmlhYmxlCisgICB3YXMgbm90IHNldC4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjgudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC44LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjA1YjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC44LnR4dApAQCAtMCwwICsxLDEwIEBACitHaXQgdjEuNy4wLjggUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBwcmltYXJpbHkgdG8gYmFja3BvcnQgc3VwcG9ydCBmb3IgdGhlIG5ldyAiYWRkLmlnbm9yZUVycm9ycyIKK25hbWUgZ2l2ZW4gdG8gdGhlIGV4aXN0aW5nICJhZGQuaWdub3JlLWVycm9ycyIgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworVGhlIG5leHQgdmVyc2lvbiwgR2l0IDEuNy40LCBhbmQgZnV0dXJlIHZlcnNpb25zLCB3aWxsIHN1cHBvcnQgYm90aAorb2xkIGFuZCBpbmNvcnJlY3QgbmFtZSBhbmQgdGhlIG5ldyBjb3JyZWN0ZWQgbmFtZSwgYnV0IHdpdGhvdXQgdGhpcworYmFja3BvcnQsIHVzZXJzIHdobyB3YW50IHRvIHVzZSB0aGUgbmV3IG5hbWUgImFkZC5pZ25vcmVFcnJvcnMiIGluCit0aGVpciByZXBvc2l0b3JpZXMgY2Fubm90IHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLjkudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC45LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmIzMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC45LnR4dApAQCAtMCwwICsxLDggQEAKK0dpdCB2MS43LjAuOSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjAuOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdHdlYiIgY2FuIHNvbWV0aW1lcyBiZSB0cmlja2VkIGludG8gcGFycm90dGluZyBhIGZpbGVuYW1lIGFyZ3VtZW50CisgICBnaXZlbiBpbiBhIHJlcXVlc3Qgd2l0aG91dCBwcm9wZXJseSBxdW90aW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmI4YzBiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMC50eHQKQEAgLTAsMCArMSwyMTQgQEAKK0dpdCB2MS43LjAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK05vdGVzIG9uIGJlaGF2aW91ciBjaGFuZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBwdXNoIiBpbnRvIGEgYnJhbmNoIHRoYXQgaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0IChpLmUuIHBvaW50ZWQgYXQgYnkKKyAgIEhFQUQgaW4gYSByZXBvc2l0b3J5IHRoYXQgaXMgbm90IGJhcmUpIGlzIHJlZnVzZWQgYnkgZGVmYXVsdC4KKworICAgU2ltaWxhcmx5LCAiZ2l0IHB1c2ggJHRoZXJlIDoka2lsbGVkIiB0byBkZWxldGUgdGhlIGJyYW5jaCAka2lsbGVkCisgICBpbiBhIHJlbW90ZSByZXBvc2l0b3J5ICR0aGVyZSwgd2hlbiAka2lsbGVkIGJyYW5jaCBpcyB0aGUgY3VycmVudAorICAgYnJhbmNoIHBvaW50ZWQgYXQgYnkgaXRzIEhFQUQsIHdpbGwgYmUgcmVmdXNlZCBieSBkZWZhdWx0LgorCisgICBTZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIGFuZAorICAgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudCB0byAnaWdub3JlJyBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkKKyAgIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZXNlIHNhZmV0eSBmZWF0dXJlcy4KKworICogImdpdCBzZW5kLWVtYWlsIiBkb2VzIG5vdCBtYWtlIGRlZXAgdGhyZWFkcyBieSBkZWZhdWx0IHdoZW4gc2VuZGluZyBhCisgICBwYXRjaCBzZXJpZXMgd2l0aCBtb3JlIHRoYW4gdHdvIG1lc3NhZ2VzLiAgQWxsIG1lc3NhZ2VzIHdpbGwgYmUgc2VudAorICAgYXMgYSByZXBseSB0byB0aGUgZmlyc3QgbWVzc2FnZSwgaS5lLiBjb3ZlciBsZXR0ZXIuCisKKyAgIEl0IGhhcyBiZWVuIHBvc3NpYmxlIGFscmVhZHkgdG8gY29uZmlndXJlIHNlbmQtZW1haWwgdG8gc2VuZCAic2hhbGxvdyB0aHJlYWQiCisgICBieSBzZXR0aW5nIHNlbmRlbWFpbC5jaGFpbnJlcGx5dG8gY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBmYWxzZS4gIFRoZQorICAgb25seSB0aGluZyB0aGlzIHJlbGVhc2UgZG9lcyBpcyB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgd2hlbiB5b3UgaGF2ZW4ndAorICAgY29uZmlndXJlZCB0aGF0IHZhcmlhYmxlLgorCisgKiAiZ2l0IHN0YXR1cyIgaXMgbm90ICJnaXQgY29tbWl0IC0tZHJ5LXJ1biIgYW55bW9yZS4gIFRoaXMgY2hhbmdlIGRvZXMKKyAgIG5vdCBhZmZlY3QgeW91IGlmIHlvdSBydW4gdGhlIGNvbW1hbmQgd2l0aG91dCBhcmd1bWVudC4KKworICogImdpdCBkaWZmIiB0cmFkaXRpb25hbGx5IHRyZWF0ZWQgdmFyaW91cyAiaWdub3JlIHdoaXRlc3BhY2UiIG9wdGlvbnMKKyAgIG9ubHkgYXMgYSB3YXkgdG8gZmlsdGVyIHRoZSBwYXRjaCBvdXRwdXQuICAiZ2l0IGRpZmYgLS1leGl0LWNvZGUgLWIiCisgICBleGl0ZWQgd2l0aCBub24temVybyBzdGF0dXMgZXZlbiBpZiBhbGwgY2hhbmdlcyB3ZXJlIGFib3V0IGNoYW5naW5nIHRoZQorICAgYW1vdW50IG9mIHdoaXRlc3BhY2UgYW5kIG5vdGhpbmcgZWxzZTsgIGFuZCAiZ2l0IGRpZmYgLWIiIHNob3dlZCB0aGUKKyAgICJkaWZmIC0tZ2l0IiBoZWFkZXIgbGluZSBmb3Igc3VjaCBhIGNoYW5nZSB3aXRob3V0IHBhdGNoIHRleHQuCisKKyAgIEluIHRoaXMgcmVsZWFzZSwgdGhlICJpZ25vcmUgd2hpdGVzcGFjZXMiIG9wdGlvbnMgYWZmZWN0IHRoZSBzZW1hbnRpY3MKKyAgIG9mIHRoZSBkaWZmIG9wZXJhdGlvbi4gIEEgY2hhbmdlIHRoYXQgZG9lcyBub3QgYWZmZWN0IGFueXRoaW5nIGJ1dAorICAgd2hpdGVzcGFjZXMgaXMgcmVwb3J0ZWQgd2l0aCB6ZXJvIGV4aXQgc3RhdHVzIHdoZW4gcnVuIHdpdGgKKyAgIC0tZXhpdC1jb2RlLCBhbmQgdGhlcmUgaXMgbm8gImRpZmYgLS1naXQiIGhlYWRlciBmb3Igc3VjaCBhIGNoYW5nZS4KKworICogRXh0ZXJuYWwgZGlmZiBhbmQgdGV4dGNvbnYgaGVscGVycyBhcmUgbm93IGV4ZWN1dGVkIHVzaW5nIHRoZSBzaGVsbC4KKyAgIFRoaXMgbWFrZXMgdGhlbSBjb25zaXN0ZW50IHdpdGggb3RoZXIgcHJvZ3JhbXMgZXhlY3V0ZWQgYnkgZ2l0LCBhbmQKKyAgIGFsbG93cyB5b3UgdG8gcGFzcyBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyB0byB0aGUgaGVscGVycy4gQW55IGhlbHBlcgorICAgcGF0aHMgY29udGFpbmluZyBzcGFjZXMgb3Igb3RoZXIgbWV0YWNoYXJhY3RlcnMgbm93IG5lZWQgdG8gYmUKKyAgIHNoZWxsLXF1b3RlZC4gIFRoZSBhZmZlY3RlZCBoZWxwZXJzIGFyZSBHSVRfRVhURVJOQUxfRElGRiBpbiB0aGUKKyAgIGVudmlyb25tZW50LCBhbmQgZGlmZi4qLmNvbW1hbmQgYW5kIGRpZmYuKi50ZXh0Y29udiBpbiB0aGUgY29uZmlnCisgICBmaWxlLgorCisgKiBUaGUgLS1tYXgtcGFjay1zaXplIGFyZ3VtZW50IHRvICdnaXQgcmVwYWNrJywgJ2dpdCBwYWNrLW9iamVjdHMnLCBhbmQKKyAgICdnaXQgZmFzdC1pbXBvcnQnIHdhcyBhc3N1bWluZyB0aGUgcHJvdmlkZWQgc2l6ZSB0byBiZSBleHByZXNzZWQgaW4gTWlCLAorICAgdW5saWtlIHRoZSBjb3JyZXNwb25kaW5nIGNvbmZpZyB2YXJpYWJsZSBhbmQgb3RoZXIgc2ltaWxhciBvcHRpb25zIGFjY2VwdGluZworICAgYSBzaXplIHZhbHVlLiAgSXQgaXMgbm93IGV4cGVjdGluZyBhIHNpemUgZXhwcmVzc2VkIGluIGJ5dGVzLCB3aXRoIGEgcG9zc2libGUKKyAgIHVuaXQgc3VmZml4IG9mICdrJywgJ20nLCBvciAnZycuCisKK1VwZGF0ZXMgc2luY2UgdjEuNi42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoc3Vic3lzdGVtcykKKworICogImdpdCBmYXN0LWltcG9ydCIgdXBkYXRlczsgYWRkcyAib3B0aW9uIiBhbmQgImZlYXR1cmUiIHRvIGRldGVjdCB0aGUKKyAgIG1pc21hdGNoIGJldHdlZW4gZmFzdC1pbXBvcnQgYW5kIHRoZSBmcm9udGVuZHMgdGhhdCBwcm9kdWNlIHRoZSBpbnB1dAorICAgc3RyZWFtLgorCisgKiAiZ2l0IHN2biIgc3VwcG9ydCBvZiBzdWJ2ZXJzaW9uICJtZXJnZSB0aWNrZXRzIiBhbmQgbWlzY2VsbGFuZW91cyBmaXhlcy4KKworICogImdpdGsiIGFuZCAiZ2l0IGd1aSIgdHJhbnNsYXRpb24gdXBkYXRlcy4KKworICogImdpdHdlYiIgdXBkYXRlcyAoY29kZSBjbGVhbi11cCwgbG9hZCBjaGVja2luZyBldGMuKQorCisocG9ydGFiaWxpdHkpCisKKyAqIFNvbWUgbW9yZSBNU1ZDIHBvcnRhYmlsaXR5IHBhdGNoZXMgZm9yIG1zeXNnaXQgcG9ydC4KKworICogTWluaW11bSBQdGhyZWFkcyBlbXVsYXRpb24gZm9yIG1zeXNnaXQgcG9ydC4KKworKHBlcmZvcm1hbmNlKQorCisgKiBNb3JlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IHBhdGNoZXMgZm9yIG1zeXNnaXQgcG9ydC4KKworKHVzYWJpbGl0eSwgYmVsbHMgYW5kIHdoaXN0bGVzKQorCisgKiBNb3JlIGNvbW1hbmRzIGxlYXJuZWQgIi0tcXVpZXQiIGFuZCAiLS1bbm8tXXByb2dyZXNzIiBvcHRpb25zLgorCisgKiBWYXJpb3VzIGNvbW1hbmRzIGdpdmVuIGJ5IHRoZSBlbmQgdXNlciAoZS5nLiBkaWZmLnR5cGUudGV4dGNvbnYsCisgICBhbmQgR0lUX0VESVRPUikgY2FuIGJlIHNwZWNpZmllZCB3aXRoIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuICBFLmcuIGl0CisgICBpcyBub3cgcG9zc2libGUgdG8gc2F5ICJbZGlmZiAidXRmOGRvYyJdIHRleHRjb252ID0gbmtmIC13Ii4KKworICogInNwYXJzZSBjaGVja291dCIgZmVhdHVyZSBhbGxvd3Mgb25seSBwYXJ0IG9mIHRoZSB3b3JrIHRyZWUgdG8gYmUKKyAgIGNoZWNrZWQgb3V0LgorCisgKiBIVFRQIHRyYW5zZmVyIGNhbiB1c2UgYXV0aGVudGljYXRpb24gc2NoZW1lIG90aGVyIHRoYW4gYmFzaWMKKyAgIChpLmUuL2UuZy4gZGlnZXN0KS4KKworICogU3dpdGNoaW5nIGZyb20gYSB2ZXJzaW9uIG9mIHN1cGVycHJvamVjdCB0aGF0IHVzZWQgdG8gaGF2ZSBhIHN1Ym1vZHVsZQorICAgdG8gYW5vdGhlciB2ZXJzaW9uIG9mIHN1cGVycHJvamVjdCB0aGF0IG5vIGxvbmdlciBoYXMgaXQgZGlkIG5vdCByZW1vdmUKKyAgIHRoZSBzdWJtb2R1bGUgZGlyZWN0b3J5IHdoZW4gaXQgc2hvdWxkIChuYW1lbHksIHdoZW4geW91IGFyZSBub3QKKyAgIGludGVyZXN0ZWQgaW4gdGhlIHN1Ym1vZHVsZSBhdCBhbGwgYW5kIGRpZG4ndCBjbG9uZS9jaGVja291dCkuCisKKyAqIEEgbmV3IGF0dHJpYnV0ZSBjb25mbGljdC1tYXJrZXItc2l6ZSBjYW4gYmUgdXNlZCB0byBjaGFuZ2UgdGhlIHNpemUgb2YKKyAgIHRoZSBjb25mbGljdCBtYXJrZXJzIGZyb20gdGhlIGRlZmF1bHQgNzsgdGhpcyBpcyB1c2VmdWwgd2hlbiB0cmFja2VkCisgICBjb250ZW50cyAoZS5nLiBnaXQtbWVyZ2UgZG9jdW1lbnRhdGlvbikgaGF2ZSBzdHJpbmdzIHRoYXQgcmVzZW1ibGUgdGhlCisgICBjb25mbGljdCBtYXJrZXJzLgorCisgKiBBIG5ldyBzeW50YXggIjxicmFuY2g+QHt1cHN0cmVhbX0iIGNhbiBiZSB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgdG8KKyAgIHN1YnN0aXR1dGUgdGhlIG5hbWUgb2YgdGhlICJ1cHN0cmVhbSIgb2YgdGhlIGJyYW5jaC4gIE1pc3NpbmcgYnJhbmNoCisgICBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2gsIHNvICJnaXQgZmV0Y2ggJiYgZ2l0IG1lcmdlIEB7dXBzdHJlYW19IgorICAgd2lsbCBiZSBlcXVpdmFsZW50IHRvICJnaXQgcHVsbCIuCisKKyAqICJnaXQgYW0gLS1yZXNvbHZlZCIgaGFzIGEgc3lub255bSAiZ2l0IGFtIC0tY29udGludWUiLgorCisgKiAiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbSIgY2FuIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSAoc3VycHJpc2UhKSB1cHN0cmVhbSwKKyAgIGkuZS4gd2hlcmUgdGhlIGJyYW5jaCBpcyBzdXBwb3NlZCB0byBwdWxsIGFuZCBtZXJnZSBmcm9tIChvciByZWJhc2Ugb250bykuCisKKyAqICJnaXQgY2hlY2tvdXQgQS4uLkIiIGlzIGEgd2F5IHRvIGRldGFjaCBIRUFEIGF0IHRoZSBtZXJnZSBiYXNlIGJldHdlZW4KKyAgIEEgYW5kIEIuCisKKyAqICJnaXQgY2hlY2tvdXQgLW0gcGF0aCIgdG8gcmVzZXQgdGhlIHdvcmsgdHJlZSBmaWxlIGJhY2sgaW50byB0aGUKKyAgIGNvbmZsaWN0ZWQgc3RhdGUgd29ya3MgZXZlbiB3aGVuIHlvdSBhbHJlYWR5IHJhbiAiZ2l0IGFkZCBwYXRoIiBhbmQKKyAgIHJlc29sdmVkIHRoZSBjb25mbGljdHMuCisKKyAqICJnaXQgY29tbWl0IC0tZGF0ZT0nPGRhdGU+JyIgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGF1dGhvciBkYXRlCisgICBqdXN0IGxpa2UgImdpdCBjb21taXQgLS1hdXRob3I9JzxuYW1lPiA8ZW1haWw+JyIgY2FuIGJlIHVzZWQgdG8KKyAgIG92ZXJyaWRlIHRoZSBhdXRob3IgaWRlbnRpdHkuCisKKyAqICJnaXQgY29tbWl0IC0tbm8tc3RhdHVzIiBjYW4gYmUgdXNlZCB0byBvbWl0IHRoZSBsaXN0aW5nIG9mIHRoZSBpbmRleAorICAgYW5kIHRoZSB3b3JrIHRyZWUgc3RhdHVzIGluIHRoZSBlZGl0b3IgdXNlZCB0byBwcmVwYXJlIHRoZSBsb2cgbWVzc2FnZS4KKworICogImdpdCBjb21taXQiIHdhcm5zIGEgYml0IG1vcmUgYWdncmVzc2l2ZWx5IHVudGlsIHlvdSBjb25maWd1cmUgdXNlci5lbWFpbCwKKyAgIHdob3NlIGRlZmF1bHQgdmFsdWUgYWxtb3N0IGFsd2F5cyBpcyBub3QgKGFuZCBmdW5kYW1lbnRhbGx5IGNhbm5vdCBiZSkKKyAgIHdoYXQgeW91IHdhbnQuCisKKyAqICJnaXQgZGlmZnRvb2wiIGhhcyBiZWVuIGV4dGVuZGVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGludGVncmF0ZSBpdAorICAgd2l0aCBnaXRrLgorCisgKiAiZ2l0IGZldGNoIC0tYWxsIiBjYW4gbm93IGJlIHVzZWQgaW4gcGxhY2Ugb2YgImdpdCByZW1vdGUgdXBkYXRlIi4KKworICogImdpdCBncmVwIiBkb2VzIG5vdCByZWx5IG9uIGV4dGVybmFsIGdyZXAgYW55bW9yZS4gIEl0IGNhbiB1c2UgbW9yZSB0aGFuCisgICBvbmUgdGhyZWFkIHRvIGFjY2VsZXJhdGUgdGhlIG9wZXJhdGlvbi4KKworICogImdpdCBncmVwIiBsZWFybmVkICItLXF1aWV0IiBvcHRpb24uCisKKyAqICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBsZWFybmVkICItLWdsb2I9aGVhZHMvKiIgc3ludGF4IHRoYXQgaXMgYSBtb3JlCisgICBmbGV4aWJsZSB3YXkgdG8gY29tcGxlbWVudCAiLS1icmFuY2hlcy8tLXRhZ3MvLS1yZW1vdGVzIi4KKworICogImdpdCBtZXJnZSIgbGVhcm5lZCB0byBwYXNzIG9wdGlvbnMgc3BlY2lmaWMgdG8gc3RyYXRlZ3ktYmFja2VuZHMuICBFLmcuCisKKyAgICAtICJnaXQgbWVyZ2UgLVhzdWJ0cmVlPXBhdGgvdG8vZGlyZWN0b3J5IiBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZSBzdWJ0cmVlCisgICAgICBzdHJhdGVneSBob3cgbXVjaCB0byBzaGlmdCB0aGUgdHJlZXMgZXhwbGljaXRseS4KKworICAgIC0gImdpdCBtZXJnZSAtWHRoZWlycyIgY2FuIGJlIHVzZWQgdG8gYXV0by1tZXJnZSBhcyBtdWNoIGFzIHBvc3NpYmxlLAorICAgICAgd2hpbGUgZGlzY2FyZGluZyB5b3VyIG93biBjaGFuZ2VzIGFuZCB0YWtpbmcgbWVyZ2VkIHZlcnNpb24gaW4KKyAgICAgIGNvbmZsaWN0ZWQgcmVnaW9ucy4KKworICogImdpdCBwdXNoIiBsZWFybmVkICJnaXQgcHVzaCBvcmlnaW4gLS1kZWxldGUgYnJhbmNoIiwgYSBzeW50YWN0aWMgc3VnYXIKKyAgIGZvciAiZ2l0IHB1c2ggb3JpZ2luIDpicmFuY2giLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgImdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtIG9yaWdpbiBmb3JrZXI6Zm9ya2VlIiB0aGF0CisgICBsZXRzIHlvdSBjb25maWd1cmUgeW91ciAiZm9ya2VyIiBicmFuY2ggdG8gbGF0ZXIgcHVsbCBmcm9tICJmb3JrZWUiCisgICBicmFuY2ggYXQgIm9yaWdpbiIuCisKKyAqICJnaXQgcmViYXNlIC0tb250byBBLi4uQiIgbWVhbnMgdGhlIGhpc3RvcnkgaXMgcmVwbGF5ZWQgb24gdG9wIG9mIHRoZQorICAgbWVyZ2UgYmFzZSBiZXR3ZWVuIEEgYW5kIEIuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkIG5ldyBhY3Rpb24gImZpeHVwIiB0aGF0IHNxdWFzaGVzIHRoZSBjaGFuZ2UKKyAgIGJ1dCBkb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgbG9nIG1lc3NhZ2UuCisKKyAqICJnaXQgcmViYXNlIC1pIiBhbHNvIGxlYXJuZWQgLS1hdXRvc3F1YXNoIG9wdGlvbiB0aGF0IGlzIHVzZWZ1bAorICAgdG9nZXRoZXIgd2l0aCB0aGUgbmV3ICJmaXh1cCIgYWN0aW9uLgorCisgKiAiZ2l0IHJlbW90ZSIgbGVhcm5lZCBzZXQtdXJsIHN1YmNvbW1hbmQgdGhhdCB1cGRhdGVzIChzdXJwcmlzZSEpIHVybAorICAgZm9yIGFuIGV4aXN0aW5nIHJlbW90ZSBuaWNrbmFtZS4KKworICogImdpdCByZXJlcmUiIGxlYXJuZWQgImZvcmdldCBwYXRoIiBzdWJjb21tYW5kLiAgVG9nZXRoZXIgd2l0aCAiZ2l0CisgICBjaGVja291dCAtbSBwYXRoIiBpdCB3aWxsIGJlIHVzZWZ1bCB3aGVuIHlvdSByZWNvcmRlZCBhIHdyb25nCisgICByZXNvbHV0aW9uLgorCisgKiBVc2Ugb2YgImdpdCByZXNldCAtLW1lcmdlIiBoYXMgYmVjb21lIGVhc2llciB3aGVuIHJlc2V0dGluZyBhd2F5IGEKKyAgIGNvbmZsaWN0ZWQgbWVzcyBsZWZ0IGluIHRoZSB3b3JrIHRyZWUuCisKKyAqICJnaXQgcmVyZXJlIiBoYWQgcmVyZXJlLmF1dG91cGRhdGUgY29uZmlndXJhdGlvbiBidXQgdGhlcmUgd2FzIG5vIHdheQorICAgdG8gY291bnRlcm1hbmQgaXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lOyAtLW5vLXJlcmVyZS1hdXRvdXBkYXRlIG9wdGlvbgorICAgZ2l2ZW4gdG8gIm1lcmdlIiwgInJldmVydCIsIGV0Yy4gZml4ZXMgdGhpcy4KKworICogImdpdCBzdGF0dXMiIGxlYXJuZWQgIi1zKGhvcnQpIiBvdXRwdXQgZm9ybWF0LgorCisoZGV2ZWxvcGVycykKKworICogVGhlIGluZnJhc3RydWN0dXJlIHRvIGJ1aWxkIGZvcmVpZ24gU0NNIGludGVyZmFjZSBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBNYW55IG1vcmUgY29tbWFuZHMgYXJlIG5vdyBidWlsdC1pbi4KKworICogVEhSRUFERURfREVMVEFfU0VBUkNIIGlzIG5vIG1vcmUuICBJZiB5b3UgYnVpbGQgd2l0aCB0aHJlYWRzLCBkZWx0YQorICAgY29tcHJlc3Npb24gd2lsbCBhbHdheXMgdGFrZSBhZHZhbnRhZ2Ugb2YgaXQuCisKK0ZpeGVzIHNpbmNlIHYxLjYuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdjEuNi42LlggbWFpbnRlbmFuY2Ugc2VyaWVzIGFyZSBpbmNsdWRlZCBpbiB0aGlzCityZWxlYXNlLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCisgKiAiZ2l0IGJyYW5jaCAtZCBicmFuY2giIHVzZWQgdG8gcmVmdXNlIGRlbGV0aW5nIHRoZSBicmFuY2ggZXZlbiB3aGVuCisgICB0aGUgYnJhbmNoIGlzIGZ1bGx5IG1lcmdlZCB0byBpdHMgdXBzdHJlYW0gYnJhbmNoIGlmIGl0IGlzIG5vdCBtZXJnZWQKKyAgIHRvIHRoZSBjdXJyZW50IGJyYW5jaC4gIEl0IG5vdyBkZWxldGVzIGl0IGluIHN1Y2ggYSBjYXNlLgorCisgKiAiZmlsdGVyLWJyYW5jaCIgY29tbWFuZCBpbmNvcnJlY3RseSBzYWlkIC0tcHJ1bmUtZW1wdHkgYW5kIC0tZmlsdGVyLWNvbW1pdAorICAgd2VyZSBpbmNvbXBhdGlibGU7IHRoZSBsYXR0ZXIgc2hvdWxkIGJlIHJlYWQgYXMgLS1jb21taXQtZmlsdGVyLgorCisgKiBXaGVuIHVzaW5nICJnaXQgc3RhdHVzIiBvciBhc2tpbmcgImdpdCBkaWZmIiB0byBjb21wYXJlIHRoZSB3b3JrIHRyZWUKKyAgIHdpdGggc29tZXRoaW5nLCB0aGV5IHVzZWQgdG8gY29uc2lkZXIgdGhhdCBhIGNoZWNrZWQtb3V0IHN1Ym1vZHVsZSB3aXRoCisgICB1bmNvbW1pdHRlZCBjaGFuZ2VzIGlzIG5vdCBtb2RpZmllZDsgdGhpcyBjb3VsZCBjYXVzZSBwZW9wbGUgdG8gZm9yZ2V0CisgICBjb21taXR0aW5nIHRoZXNlIGNoYW5nZXMgaW4gdGhlIHN1Ym1vZHVsZSBiZWZvcmUgY29tbWl0dGluZyBpbiB0aGUKKyAgIHN1cGVycHJvamVjdC4gVGhleSBub3cgY29uc2lkZXIgc3VjaCBhIGNoYW5nZSBhcyBhIG1vZGlmaWNhdGlvbiBhbmQKKyAgICJnaXQgZGlmZiIgd2lsbCBhcHBlbmQgYSAiLWRpcnR5IiB0byB0aGUgd29yayB0cmVlIHNpZGUgd2hlbiBnZW5lcmF0aW5nCisgICBwYXRjaCBvdXRwdXQgb3Igd2hlbiB1c2VkIHdpdGggdGhlIC0tc3VibW9kdWxlIG9wdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNmIzMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjEudHh0CkBAIC0wLDAgKzEsOTYgQEAKK0dpdCB2MS43LjEuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBdXRoZW50aWNhdGlvbiBvdmVyIGh0dHAgdHJhbnNwb3J0IGNhbiBub3cgYmUgbWFkZSBsYXppbHksIGluIHRoYXQgdGhlCisgICByZXF1ZXN0IGNhbiBmaXJzdCBnbyB0byBhIFVSTCB3aXRob3V0IHVzZXJuYW1lLCBnZXQgYSA0MDEgcmVzcG9uc2UgYW5kCisgICB0aGVuIHRoZSBjbGllbnQgd2lsbCBhc2sgZm9yIHRoZSB1c2VybmFtZSB0byB1c2UuCisKKyAqIFdlIHVzZWQgdG8gbWlzdGFrZW5seSB0aGluayAiLi4vd29yayIgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQKKyAgIGRpcmVjdG9yeSB3aGVuIHdlIGFyZSBpbiAiLi4vd29yay14eXoiLgorCisgKiBUaGUgYXR0cmlidXRlIG1lY2hhbmlzbSBub3cgYWxsb3dzIGFuIGVudHJ5IHRoYXQgdXNlcyBhbiBhdHRyaWJ1dGUKKyAgIG1hY3JvIHRoYXQgc2V0L3Vuc2V0IG9uZSBhdHRyaWJ1dGUsIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGFuCisgICBvdmVycmlkaW5nIHNldHRpbmc7IHRoaXMgbWFrZXMgYXR0cmlidXRlIG1hY3JvcyBtdWNoIGVhc2llciB0byB1c2UuCisKKyAqIFdlIGRpZG4ndCByZWNvZ25pemUgdGltZXpvbmUgIloiIGFzIGEgc3lub255bSBmb3IgIlVUQyIgKDc1YjM3ZTcwKS4KKworICogSW4gMS43LjAsIHJlYWQtdHJlZSBhbmQgdXNlciBjb21tYW5kcyB0aGF0IHVzZSB0aGUgbWVjaGFuaXNtIHN1Y2ggYXMKKyAgIGNoZWNrb3V0IGFuZCBtZXJnZSB3ZXJlIGZpeGVkIHRvIGhhbmRsZSBzd2l0Y2hpbmcgYmV0d2VlbiBicmFuY2hlcyBvbmUKKyAgIG9mIHdoaWNoIGhhcyBhIGZpbGUgd2hpbGUgdGhlIG90aGVyIGhhcyBhIGRpcmVjdG9yeSBhdCB0aGUgc2FtZSBwYXRoCisgICBjb3JyZWN0bHkgZXZlbiB3aGVuIHRoZXJlIGFyZSBzb21lICJjb25mdXNpbmciIHBhdGhuYW1lcyBpbiB0aGVtLiAgQnV0CisgICB0aGUgYWxnb3JpdGhtIHVzZWQgZm9yIHRoaXMgZml4IHdhcyBzdWJvcHRpbWFsIGFuZCBoYWQgYSB0ZXJyaWJsZQorICAgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gZXNwZWNpYWxseSBpbiBsYXJnZXIgdHJlZXMuCisKKyAqICJnaXQgYW0gLTMiIGRpZCBub3Qgc2hvdyBkaWFnbm9zaXMgd2hlbiB0aGUgcGF0Y2ggaW4gdGhlIG1lc3NhZ2Ugd2FzIGNvcnJ1cHQuCisKKyAqIEFmdGVyICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgcmVtb3ZlZCB0cmFpbGluZyBibGFuayBsaW5lcyBpbiBhbgorICAgcGF0Y2ggaW4gYSBwYXRjaCBzZXJpZXMsIGl0IGZhaWxlZCB0byBhcHBseSBsYXRlciBwYXRjaGVzIHRoYXQgZGVwZW5kCisgICBvbiB0aGUgcHJlc2VuY2Ugb2Ygc3VjaCBibGFuayBsaW5lcy4KKworICogImdpdCBidW5kbGUgLS1zdGRpbiIgc2VnZmF1bHRlZC4KKworICogImdpdCBjaGVja291dCIgYW5kICJnaXQgcmViYXNlIiBvdmVyd3JvdGUgcGF0aHMgdGhhdCBhcmUgbWFya2VkICJhc3N1bWUKKyAgIHVuY2hhbmdlZCIuCisKKyAqICJnaXQgY29tbWl0IC0tYW1lbmQiIG9uIGEgY29tbWl0IHdpdGggYW4gaW52YWxpZCBhdXRob3ItbmFtZSBsaW5lIHRoYXQKKyAgIGxhY2tzIHRoZSBkaXNwbGF5IG5hbWUgZGlkbid0IHdvcmsuCisKKyAqICJnaXQgZGVzY3JpYmUiIGRpZCBub3QgdGllLWJyZWFrIHRhZ3MgdGhhdCBwb2ludCBhdCB0aGUgc2FtZSBjb21taXQKKyAgIGNvcnJlY3RseTsgbmV3ZXIgb25lcyBhcmUgcHJlZmVycmVkIGJ5IHBheWluZyBhdHRlbnRpb24gdG8gdGhlCisgICB0YWdnZXIgZGF0ZSBub3cuCisKKyAqICJnaXQgZGlmZiIgdXNlZCB0byB0ZWxsIHVuZGVybHlpbmcgeGRpZmYgbWFjaGluZXJ5IHRvIHdvcmsgdmVyeSBoYXJkIHRvCisgICBtaW5pbWl6ZSB0aGUgb3V0cHV0LCBidXQgdGhpcyBvZnRlbiB3YXMgc3BlbmRpbmcgdG9vIG1hbnkgZXh0cmEgY3ljbGVzCisgICBmb3IgdmVyeSBsaXR0bGUgZ2Fpbi4KKworICogImdpdCBkaWZmIC0tY29sb3IiIGRpZCBub3QgcGFpbnQgZXh0ZW5kZWQgZGlmZiBoZWFkZXJzIHBlciBsaW5lCisgICAoaS5lLiB0aGUgY29sb3JpbmcgZXNjYXBlIHNlcXVlbmNlIGRpZG4ndCBlbmQgYXQgdGhlIGVuZCBvZiBsaW5lKSwKKyAgIHdoaWNoIGNvbmZ1c2VkICJsZXNzIC1SIi4KKworICogImdpdCBmZXRjaCIgb3ZlciBIVFRQIHZlcmlmaWVzIHRoZSBkb3dubG9hZGVkIHBhY2tmaWxlcyBtb3JlIHJvYnVzdGx5LgorCisgKiBUaGUgbWVtb3J5IHVzYWdlIGJ5ICJnaXQgaW5kZXgtcGFjayIgKHJ1biBkdXJpbmcgImdpdCBmZXRjaCIgYW5kICJnaXQKKyAgIHB1c2giKSBnb3QgbGVhbmVyLgorCisgKiAiR0lUX0RJUj1mb28uZ2l0IGdpdCBpbml0IC0tYmFyZSBiYXIuZ2l0IiBjcmVhdGVkIGZvby5naXQgaW5zdGVhZCBvZiBiYXIuZ2l0LgorCisgKiAiZ2l0IGxvZyAtLWFiYnJldj0kbnVtIC0tZm9ybWF0PSclaCcgaWdub3JlZCAtLWFiYnJldj0kbnVtLgorCisgKiAiZ2l0IGxzLWZpbGVzIC4uL291dC9zaWRlL2N3ZCIgcmVmdXNlZCB0byB3b3JrLgorCisgKiAiZ2l0IG1lcmdlIC0tbG9nIiB1c2VkIHRvIHJlcGxhY2UgdGhlIGN1c3RvbSBtZXNzYWdlIGdpdmVuIGJ5ICItbSIgd2l0aAorICAgdGhlIHNob3J0bG9nLCBpbnN0ZWFkIG9mIGFwcGVuZGluZyB0byBpdC4KKworICogImdpdCBub3RlcyBjb3B5IiB3aXRob3V0IGFueSBvdGhlciBhcmd1bWVudCBzZWdmYXVsdGVkLgorCisgKiAiZ2l0IHB1bGwiIGFjY2VwdGVkICItLWRyeS1ydW4iLCBnYXZlIGl0IHRvIHVuZGVybHlpbmcgImdpdCBmZXRjaCIgYnV0CisgICBpZ25vcmVkIHRoZSBvcHRpb24gaXRzZWxmLCByZXN1bHRpbmcgaW4gYSBib2d1cyBhdHRlbXB0IHRvIG1lcmdlCisgICB1bnJlbGF0ZWQgY29tbWl0LgorCisgKiAiZ2l0IHJlYmFzZSIgZGlkIG5vdCBmYWl0aGZ1bGx5IHJlcHJvZHVjZSBhIG1hbGZvcm1lZCBhdXRob3IgaWRlbnQsIHRoYXQKKyAgIGlzIG9mdGVuIHNlZW4gaW4gYSByZXBvc2l0b3J5IGNvbnZlcnRlZCBmcm9tIGZvcmVpZ24gU0NNcy4KKworICogImdpdCByZXNldCAtLWhhcmQiIHN0YXJ0ZWQgZnJvbSBhIHdyb25nIGRpcmVjdG9yeSBhbmQgYSB3b3JraW5nIHRyZWUgaW4KKyAgIGEgbm9uc3RhbmRhcmQgbG9jYXRpb24gaXMgaW4gdXNlIGdvdCBjb25mdXNlZC4KKworICogImdpdCBzZW5kLWVtYWlsIiBsYWNrZWQgYSB3YXkgdG8gc3BlY2lmeSB0aGUgZG9tYWlubmFtZSB1c2VkIGluIHRoZQorICAgRUhMTy9IRUxPIGV4Y2hhbmdlLCBjYXVzaW5nIHJlamVjdGVkIGNvbm5lY3Rpb24gZnJvbSBwaWNreSBzZXJ2ZXJzLgorICAgSXQgbGVhcm5lZCAtLXNtdHAtZG9tYWluIG9wdGlvbiB0byBzb2x2ZSB0aGlzIGlzc3VlLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgZGVjbGFyZSBhIGNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcgYW5kCisgICBjb250ZW50LXR5cGUgZXZlbiB3aGVuIGl0cyBwYXlsb2FkIG5lZWRzIHRvIGJlIHNlbnQgaW4gOC1iaXQuCisKKyAqICJnaXQgc2hvdyAtQyAtQyIgYW5kIG90aGVyIGNvcm5lciBjYXNlcyBsb3N0IGRpZmYgbWV0YWluZm8gb3V0cHV0CisgICBpbiAxLjcuMC4KKworICogImdpdCBzdGFzaCIgaW5jb3JyZWN0bHkgbG9zdCBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgd2VyZQorICAgcHJldmlvdXNseSByZW1vdmVkIGZyb20gdGhlIGluZGV4LgorCisgKiAiZ2l0IHN0YXR1cyIgc3RvcHBlZCByZWZyZXNoaW5nIHRoZSBpbmRleCBieSBtaXN0YWtlIGluIDEuNy4xLgorCisgKiAiZ2l0IHN0YXR1cyIgc2hvd2VkIGV4Y2VzcyAiaGludHMiIGV2ZW4gd2hlbiBhZHZpY2Uuc3RhdHVzSGludHMgaXMgc2V0IHRvIGZhbHNlLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYmExNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xLjIudHh0CkBAIC0wLDAgKzEsMjggQEAKK0dpdCB2MS43LjEuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBjb21taXQiIGRpZCBub3QgaG9ub3IgR0lUX1JFRkxPR19BQ1RJT04gZW52aXJvbm1lbnQgdmFyaWFibGUsIHJlc3VsdGluZworICAgcmVmbG9nIG1lc3NhZ2VzIGZvciBjaGVycnktcGljayBhbmQgcmV2ZXJ0IGFjdGlvbnMgdG8gYmUgcmVjb3JkZWQgYXMgImNvbW1pdCIuCisKKyAqICJnaXQgY2xvbmUvZmV0Y2gvcHVsbCIgaXNzdWVkIGFuIGluY29ycmVjdCBlcnJvciBtZXNzYWdlIHdoZW4gYSByZWYgYW5kCisgICBhIHN5bXJlZiB0aGF0IHBvaW50cyB0byB0aGUgcmVmIHdlcmUgdXBkYXRlZCBhdCB0aGUgc2FtZSB0aW1lLiAgVGhpcworICAgb2J2aW91c2x5IHdvdWxkIHVwZGF0ZSB0aGVtIHRvIHRoZSBzYW1lIHZhbHVlLCBhbmQgc2hvdWxkIG5vdCByZXN1bHQgaW4KKyAgIGFuIGVycm9yIGNvbmRpdGlvbi4KKworICogImdpdCBkaWZmIiBpbnNpZGUgYSB0cmVlIHdpdGggbWFueSBwYXRobmFtZXMgdGhhdCBoYXZlIGNlcnRhaW4KKyAgIGNoYXJhY3RlcnMgaGFzIGJlY29tZSB2ZXJ5IHNsb3cgaW4gMS43LjAgYnkgbWlzdGFrZS4KKworICogImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0b3AtYXQtbm9uLW9wdGlvbiIgZGlkIG5vdCBzdG9wIGF0IG5vbiBvcHRpb24KKyAgIHdoZW4gLS1rZWVwLWRhc2hkYXNoIHdhcyBpbiBlZmZlY3QuCisKKyAqIEFuIG92ZXJsb25nIGxpbmUgYWZ0ZXIgIi5naXRkaXI6ICIgaW4gYSBnaXQgZmlsZSBjYXVzZWQgb3V0IG9mIGJvdW5kcworICAgYWNjZXNzIHRvIGFuIGFycmF5IG9uIHRoZSBzdGFjay4KKworICogImdpdCBjb25maWcgLS1wYXRoIGNvbmYudmFyIiB0byBhdHRlbXB0IHRvIGV4cGFuZCBhIHZhcmlhYmxlIGNvbmYudmFyCisgICB0aGF0IHVzZXMgIn4vIiBzaG9ydC1oYW5kIHNlZ2ZhdWx0ZWQgd2hlbiAkSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgd2FzIG5vdCBzZXQuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxODUxOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuMy50eHQKQEAgLTAsMCArMSwxMCBAQAorR2l0IHYxLjcuMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgcHJpbWFyaWx5IHRvIGJhY2twb3J0IHN1cHBvcnQgZm9yIHRoZSBuZXcgImFkZC5pZ25vcmVFcnJvcnMiCituYW1lIGdpdmVuIHRvIHRoZSBleGlzdGluZyAiYWRkLmlnbm9yZS1lcnJvcnMiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK1RoZSBuZXh0IHZlcnNpb24sIEdpdCAxLjcuNCwgYW5kIGZ1dHVyZSB2ZXJzaW9ucywgd2lsbCBzdXBwb3J0IGJvdGgKK29sZCBhbmQgaW5jb3JyZWN0IG5hbWUgYW5kIHRoZSBuZXcgY29ycmVjdGVkIG5hbWUsIGJ1dCB3aXRob3V0IHRoaXMKK2JhY2twb3J0LCB1c2VycyB3aG8gd2FudCB0byB1c2UgdGhlIG5ldyBuYW1lICJhZGQuaWdub3JlRXJyb3JzIiBpbgordGhlaXIgcmVwb3NpdG9yaWVzIGNhbm5vdCB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3MzRiNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEuNC50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjEuNy4xLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXR3ZWIiIGNhbiBzb21ldGltZXMgYmUgdHJpY2tlZCBpbnRvIHBhcnJvdHRpbmcgYSBmaWxlbmFtZSBhcmd1bWVudAorICAgZ2l2ZW4gaW4gYSByZXF1ZXN0IHdpdGhvdXQgcHJvcGVybHkgcXVvdGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ4OWZlZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEudHh0CkBAIC0wLDAgKzEsODkgQEAKK0dpdCB2MS43LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNy4wCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBFcmljIFJheW1vbmQgaXMgdGhlIG1haW50YWluZXIgb2YgdXBkYXRlZCBDSUFib3Qgc2NyaXB0cywgaW4gY29udHJpYi8uCisKKyAqIGdpdGsgdXBkYXRlcy4KKworICogU29tZSBjb21tYW5kcyAoZS5nLiBzdm4gYW5kIGh0dHAgaW50ZXJmYWNlcykgdGhhdCBpbnRlcmFjdGl2ZWx5IGFzaworICAgZm9yIGEgcGFzc3dvcmQgY2FuIGJlIHRvbGQgdG8gdXNlIGFuIGV4dGVybmFsIHByb2dyYW0gZ2l2ZW4gdmlhCisgICBHSVRfQVNLUEFTUy4KKworICogQ29uZmxpY3QgbWFya2VycyB0aGF0IGxlYWQgdGhlIGNvbW1vbiBhbmNlc3RvciBpbiBkaWZmMy1zdHlsZSBvdXRwdXQKKyAgIG5vdyBoYXZlIGEgbGFiZWwsIHdoaWNoIGhvcGVmdWxseSB3b3VsZCBoZWxwIHRoaXJkLXBhcnR5IHRvb2xzIHRoYXQKKyAgIGV4cGVjdCBvbmUuCisKKyAqIENvbWVzIHdpdGggYW4gdXBkYXRlZCBiYXNoLWNvbXBsZXRpb24gc2NyaXB0LgorCisgKiAiZ2l0IGFtIiBsZWFybmVkICItLWtlZXAtY3IiIG9wdGlvbiB0byBoYW5kbGUgaW5wdXRzIHRoYXQgYXJlCisgICBhIG1peHR1cmUgb2YgY2hhbmdlcyB0byBmaWxlcyB3aXRoIGFuZCB3aXRob3V0IENSTEYgbGluZSBlbmRpbmdzLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgbGVhcm5lZCAtUiBvcHRpb24gdG8gbGVhdmUgcmV2aXNpb24gbWFwcGluZyBiZXR3ZWVuCisgICBDVlMgcmV2aXNpb25zIGFuZCByZXN1bHRpbmcgZ2l0IGNvbW1pdHMuCisKKyAqICJnaXQgZGlmZiAtLXN1Ym1vZHVsZSIgbm90aWNlcyBhbmQgZGVzY3JpYmVzIGRpcnR5IHN1Ym1vZHVsZXMuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiBsZWFybmVkICUoc3ltcmVmKSwgJShzeW1yZWY6c2hvcnQpIGFuZCAlKGZsYWcpCisgICB0b2tlbnMuCisKKyAqICJnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyIgY2FuIHRha2UgIi0tbm8tZmlsdGVycyIgb3B0aW9uIG5vdy4KKworICogImdpdCBpbml0IiBjYW4gYmUgdG9sZCB0byBsb29rIGF0IGluaXQudGVtcGxhdGVkaXIgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgKG9idmlvdXNseSB0aGF0IGhhcyB0byBjb21lIGZyb20gZWl0aGVyIC9ldGMvZ2l0Y29uZmlnIG9yCisgICAkSE9NRS8uZ2l0Y29uZmlnKS4KKworICogImdpdCBncmVwIiBsZWFybmVkICItLW5vLWluZGV4IiBvcHRpb24sIHRvIHNlYXJjaCBpbnNpZGUgY29udGVudHMgdGhhdAorICAgYXJlIG5vdCBtYW5hZ2VkIGJ5IGdpdC4KKworICogImdpdCBncmVwIiBsZWFybmVkIC0tY29sb3I9YXV0by9hbHdheXMvbmV2ZXIuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCB0byBwYWludCBmaWxlbmFtZSBhbmQgbGluZS1udW1iZXIgaW4gY29sb3JzLgorCisgKiAiZ2l0IGxvZyAtcCAtLWZpcnN0LXBhcmVudCAtbSIgc2hvd3Mgb25lLXBhcmVudCBkaWZmIGZvciBtZXJnZQorICAgY29tbWl0cywgaW5zdGVhZCBvZiBzaG93aW5nIGNvbWJpbmVkIGRpZmYuCisKKyAqICJnaXQgbWVyZ2UtZmlsZSIgbGVhcm5lZCB0byB1c2UgY3VzdG9tIGNvbmZsaWN0IG1hcmtlciBzaXplIGFuZCBhbHNvCisgICB0byB1c2UgdGhlICJ1bmlvbiBtZXJnZSIgYmVoYXZpb3VyLgorCisgKiAiZ2l0IG5vdGVzIiBjb21tYW5kIGhhcyBiZWVuIHJld3JpdHRlbiBpbiBDIGFuZCBsZWFybmVkIG1hbnkgY29tbWFuZHMKKyAgIGFuZCBmZWF0dXJlcyB0byBoZWxwIHlvdSBjYXJyeSBub3RlcyBmb3J3YXJkIGFjcm9zcyByZWJhc2VzIGFuZCBhbWVuZHMuCisKKyAqICJnaXQgcmVxdWVzdC1wdWxsIiBpZGVudGlmaWVzIHRoZSBjb21taXQgdGhlIHJlcXVlc3QgaXMgcmVsYXRpdmUgdG8gaW4KKyAgIGEgbW9yZSByZWFkYWJsZSB3YXkuCisKKyAqICJnaXQgcmVzZXQiIGxlYXJuZWQgIi0ta2VlcCIgb3B0aW9uIHRoYXQgbGV0cyB5b3UgZGlzY2FyZCBjb21taXRzCisgICBuZWFyIHRoZSB0aXAgd2hpbGUgcHJlc2VydmluZyB5b3VyIGxvY2FsIGNoYW5nZXMgaW4gYSB3YXkgc2ltaWxhcgorICAgdG8gaG93ICJnaXQgY2hlY2tvdXQgYnJhbmNoIiBkb2VzLgorCisgKiAiZ2l0IHN0YXR1cyIgbm90aWNlcyBhbmQgZGVzY3JpYmVzIGRpcnR5IHN1Ym1vZHVsZXMuCisKKyAqICJnaXQgc3ZuIiBzaG91bGQgd29yayBiZXR0ZXIgd2hlbiBpbnRlcmFjdGluZyB3aXRoIHJlcG9zaXRvcmllcworICAgd2l0aCBDUkxGIGxpbmUgZW5kaW5ncy4KKworICogImdpdCBpbWFwLXNlbmQiIGxlYXJuZWQgdG8gc3VwcG9ydCBDUkFNLU1ENSBhdXRoZW50aWNhdGlvbi4KKworICogImdpdHdlYiIgaW5zdGFsbGF0aW9uIHByb2NlZHVyZSBjYW4gdXNlICJtaW5pZmllZCIganMvY3NzIGZpbGVzCisgICBiZXR0ZXIuCisKKyAqIFZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCitGaXhlcyBzaW5jZSB2MS43LjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjcuMC5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogImdpdCBhZGQgZnJvdHovbml0Zm9sIiBkaWQgbm90IGNvbXBsYWluIHdoZW4gdGhlIGVudGlyZSBmcm90ei8gZGlyZWN0b3J5CisgICB3YXMgaWdub3JlZC4KKworICogImdpdCBkaWZmIC0tc3RhdCIgdXNlZCAiaW50IiB0byBjb3VudCB0aGUgc2l6ZSBvZiBkaWZmZXJlbmNlcywKKyAgIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBvdmVyZmxvd2luZy4KKworICogImdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIiBkaWRuJ3QgdGVybWluYXRlIGEgcmVjb3JkIHdpdGggTEYgZm9yCisgICBjb21taXRzIHdpdGhvdXQgYW55IG1lc3NhZ2UuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1hYmJyZXYtY29tbWl0IiBkZWZhdWx0ZWQgdG8gNDAtYnl0ZSBhYmJyZXZpYXRpb25zLCB1bmxpa2UKKyAgIG5ld2VyIHRvb2xzIGluIHRoZSBnaXQgdG9vbHNldC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU2ODUyNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjEudHh0CkBAIC0wLDAgKzEsNzggQEAKK0dpdCB2MS43LjEwLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0FkZGl0aW9ucyBzaW5jZSB2MS43LjEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitMb2NhbGl6YXRpb24gbWVzc2FnZSBmaWxlcyBmb3IgRGFuaXNoIGFuZCBHZXJtYW4gaGF2ZSBiZWVuIGFkZGVkLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuMTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhZGQgLXAiIGlzIG5vdCBkZXNpZ25lZCB0byBkZWFsIHdpdGggdW5tZXJnZWQgcGF0aHMgYnV0IGRpZAorICAgbm90IGV4Y2x1ZGUgdGhlbSBhbmQgdHJpZWQgdG8gYXBwbHkgZnVubnkgcGF0Y2hlcyBvbmx5IHRvIGZhaWwuCisKKyAqICJnaXQgYmxhbWUiIHN0YXJ0ZWQgbWlzc2luZyBxdWl0ZSBhIGZldyBjaGFuZ2VzIGZyb20gdGhlIG9yaWdpbgorICAgc2luY2Ugd2Ugc3RvcHBlZCB1c2luZyB0aGUgZGlmZiBtaW5pbWl6YXRpb24gYnkgZGVmYXVsdCBpbiB2MS43LjIKKyAgIGVyYS4KKworICogV2hlbiBQQVRIIGNvbnRhaW5zIGFuIHVucmVhZGFibGUgZGlyZWN0b3J5LCBhbGlhcyBleHBhbnNpb24gY29kZQorICAgZGlkIG5vdCBraWNrIGluLCBhbmQgZmFpbGVkIHdpdGggYW4gZXJyb3IgdGhhdCBzYWlkICJnaXQtc3ViY21kIgorICAgd2FzIG5vdCBmb3VuZC4KKworICogImdpdCBjbGVhbiAtZCAtZiIgKG5vdCAiLWQgLWYgLWYiKSBpcyBzdXBwb3NlZCB0byBwcm90ZWN0IG5lc3RlZAorICAgd29ya2luZyB0cmVlcyBvZiBpbmRlcGVuZGVudCBnaXQgcmVwb3NpdG9yaWVzIHRoYXQgZXhpc3QgaW4gdGhlCisgICBjdXJyZW50IHByb2plY3Qgd29ya2luZyB0cmVlIGZyb20gZ2V0dGluZyByZW1vdmVkLCBidXQgdGhlCisgICBwcm90ZWN0aW9uIGFwcGxpZWQgb25seSB0byBzdWNoIHdvcmtpbmcgdHJlZXMgdGhhdCBhcmUgYXQgdGhlCisgICB0b3AtbGV2ZWwgb2YgdGhlIGN1cnJlbnQgcHJvamVjdCBieSBtaXN0YWtlLgorCisgKiAiZ2l0IGNvbW1pdCAtLWF1dGhvcj0kbmFtZSIgZGlkIG5vdCB0ZWxsIHRoZSBuYW1lIHRoYXQgd2FzIGJlaW5nCisgICByZWNvcmRlZCBpbiB0aGUgcmVzdWx0aW5nIGNvbW1pdCB0byBob29rcywgZXZlbiB0aG91Z2ggaXQgZG9lcyBkbworICAgc28gd2hlbiB0aGUgZW5kIHVzZXIgb3ZlcnJvZGUgdGhlIGF1dGhvcnNoaXAgdmlhIHRoZQorICAgIkdJVF9BVVRIT1JfTkFNRSIgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKyAqIFdoZW4gImdpdCBjb21taXQgLS10ZW1wbGF0ZSBGIiBlcnJvcnMgb3V0IGJlY2F1c2UgdGhlIHVzZXIgZGlkIG5vdAorICAgdG91Y2ggdGhlIG1lc3NhZ2UsIGl0IGNsYWltZWQgdGhhdCBpdCBhYm9ydHMgZHVlIHRvICJlbXB0eQorICAgbWVzc2FnZSIsIHdoaWNoIHdhcyB1dHRlcmx5IHdyb25nLgorCisgKiBUaGUgcmVnZXhwIGNvbmZpZ3VyZWQgd2l0aCBkaWZmLndvcmRyZWdleCB3YXMgaW5jb3JyZWN0bHkgcmV1c2VkCisgICBhY3Jvc3MgZmlsZXMuCisKKyAqIEFuIGFnZS1vbGQgY29ybmVyIGNhc2UgYnVnIGluIGNvbWJpbmUgZGlmZiAob25seSB0cmlnZ2VyZWQgd2l0aCAtVTAKKyAgIGFuZCB0aGUgaHVuayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIG5lZWRzIHRvIGJlIHNob3duKSBoYXMKKyAgIGJlZW4gZml4ZWQuCisKKyAqIFJlbmFtZSBkZXRlY3Rpb24gbG9naWMgdXNlZCB0byBtYXRjaCB0d28gZW1wdHkgZmlsZXMgYXMgcmVuYW1lcworICAgZHVyaW5nIG1lcmdlLXJlY3Vyc2l2ZSwgbGVhZGluZyB0byB1bm5hdHVyYWwgbWlzbWVyZ2VzLgorCisgKiBUaGUgcGFyc2VyIGluICJmYXN0LWltcG9ydCIgZGlkIG5vdCBkaWFnbm9zZSAiOjkiIHN0eWxlIHJlZmVyZW5jZXMKKyAgIHRoYXQgaXMgbm90IGZvbGxvd2VkIGJ5IHJlcXVpcmVkIFNQL0xGIGFzIGFuIGVycm9yLgorCisgKiBXaGVuICJnaXQgZmV0Y2giIGVuY291bnRlcnMgcmVwb3NpdG9yaWVzIHdpdGggdG9vIG1hbnkgcmVmZXJlbmNlcywKKyAgIHRoZSBjb21tYW5kIGxpbmUgb2YgImZldGNoLXBhY2siIHRoYXQgaXMgcnVuIGJ5IGEgaGVscGVyCisgICBlLmcuIHJlbW90ZS1jdXJsLCBtYXkgZmFpbCB0byBob2xkIGFsbCBvZiB0aGVtLiBOb3cgc3VjaCBhbgorICAgaW50ZXJuYWwgaW52b2NhdGlvbiBjYW4gZmVlZCB0aGUgcmVmZXJlbmNlcyB0aHJvdWdoIHRoZSBzdGFuZGFyZAorICAgaW5wdXQgb2YgImZldGNoLXBhY2siLgorCisgKiAiZ2l0IGZldGNoIiB0aGF0IHJlY3Vyc2VzIGludG8gc3VibW9kdWxlcyBvbiBkZW1hbmQgZGlkIG5vdCBjaGVjaworICAgaWYgaXQgbmVlZHMgdG8gZ28gaW50byBzdWJtb2R1bGVzIHdoZW4gbm9uIGJyYW5jaGVzIChtb3N0IG5vdGFibHksCisgICB0YWdzKSBhcmUgZmV0Y2hlZC4KKworICogImxvZyAtcCAtLWdyYXBoIiB1c2VkIHdpdGggIi0tc3RhdCIgaGFkIGEgZmV3IGZvcm1hdHRpbmcgZXJyb3IuCisKKyAqIFJ1bm5pbmcgIm5vdGVzIG1lcmdlIC0tY29tbWl0IiBmYWlsZWQgdG8gcGVyZm9ybSBjb3JyZWN0bHkgd2hlbiBydW4KKyAgIGZyb20gYW55IGRpcmVjdG9yeSBpbnNpZGUgJEdJVF9ESVIvLiAgV2hlbiAibm90ZXMgbWVyZ2UiIHN0b3BzIHdpdGgKKyAgIGNvbmZsaWN0cywgJEdJVF9ESVIvTk9URVNfTUVSR0VfV09SS1RSRUUgaXMgdGhlIHBsYWNlIGEgdXNlciBlZGl0cworICAgdG8gcmVzb2x2ZSBpdC4KKworICogVGhlICdwdXNoIHRvIHVwc3RyZWFtJyBpbXBsZW1lbnRhdGlvbiB3YXMgYnJva2VuIGluIHNvbWUgY29ybmVyCisgICBjYXNlcy4gImdpdCBwdXNoICR0aGVyZSIgd2l0aG91dCByZWZzcGVjLCB3aGVuIHRoZSBjdXJyZW50IGJyYW5jaAorICAgaXMgc2V0IHRvIHB1c2ggdG8gYSByZW1vdGUgZGlmZmVyZW50IGZyb20gJHRoZXJlLCB1c2VkIHRvIHB1c2ggdG8KKyAgICR0aGVyZSB1c2luZyB0aGUgdXBzdHJlYW0gaW5mb3JtYXRpb24gdG8gYSByZW1vdGUgdW5yZWxlYXRlZCB0bworICAgJHRoZXJlLgorCisgKiBHaXZpbmcgIi0tY29udGludWUiIHRvIGEgY29uZmxpY3RlZCAicmViYXNlIC1pIiBzZXNzaW9uIHNraXBwZWQgYQorICAgY29tbWl0IHRoYXQgb25seSByZXN1bHRzIGluIGNoYW5nZXMgdG8gc3VibW9kdWxlcy4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTdlOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuMi50eHQKQEAgLTAsMCArMSw4NSBAQAorR2l0IHYxLjcuMTAuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMC4xCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIHRlc3Qgc2NhZmZvbGRpbmcgZm9yIGdpdC1kYWVtb24gd2FzIGZsYWt5LgorCisgKiBUaGUgdGVzdCBzY2FmZm9sZGluZyBmb3IgZmFzdC1pbXBvcnQgd2FzIGZsYWt5LgorCisgKiBUaGUgZmlsZXN5c3RlbSBib3VuZGFyeSB3YXMgbm90IGNvcnJlY3RseSByZXBvcnRlZCB3aGVuIC5naXQgZGlyZWN0b3J5CisgICBkaXNjb3Zlcnkgc3RvcHBlZCBhdCBhIG1vdW50IHBvaW50LgorCisgKiBIVFRQIHRyYW5zcG9ydCB0aGF0IHJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgd2hlbgorICAgbXVsdGlwbGUgY29ubmVjdGlvbnMgYXJlIHVzZWQgc2ltdWx0YW5lb3VzbHkuCisKKyAqIE1pbm9yIG1lbW9yeSBsZWFrIGR1cmluZyB1bnBhY2tfdHJlZXMgKGhlbmNlICJtZXJnZSIgYW5kICJjaGVja291dCIKKyAgIHRvIGNoZWNrIG91dCBhbm90aGVyIGJyYW5jaCkgaGFzIGJlZW4gcGx1Z2dlZC4KKworICogSW4gdGhlIG9sZGVyIGRheXMsIHRoZSBoZWFkZXIgIkNvbmZsaWN0czoiIGluICJjaGVycnktcGljayIgYW5kICJtZXJnZSIKKyAgIHdhcyBzZXBhcmF0ZWQgYnkgYSBibGFuayBsaW5lIGZyb20gdGhlIGxpc3Qgb2YgcGF0aHMgdGhhdCBmb2xsb3cgZm9yCisgICByZWFkYWJpbGl0eSwgYnV0IHdoZW4gIm1lcmdlIiB3YXMgcmV3cml0dGVuIGluIEMsIHdlIGxvc3QgaXQgYnkKKyAgIG1pc3Rha2UuIFJlbW92ZSB0aGUgbmV3bGluZSBmcm9tICJjaGVycnktcGljayIgdG8gbWFrZSB0aGVtIG1hdGNoCisgICBhZ2Fpbi4KKworICogVGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgY2hva2VkICJnaXQgY2hlcnJ5LXBpY2sgJG5hbWUiIHdoZW4gJG5hbWUgY2FuCisgICBiZSBib3RoIHJldmlzaW9uIG5hbWUgYW5kIGEgcGF0aG5hbWUsIGV2ZW4gdGhvdWdoICRuYW1lIGNhbiBuZXZlciBiZSBhCisgICBwYXRoIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjb21tYW5kLgorCisgKiBUaGUgImluY2x1ZGUucGF0aCIgZmFjaWxpdHkgaW4gdGhlIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtIGFkZGVkIGluCisgICAxLjcuMTAgZm9yZ290IHRvIGludGVycHJldCAifi9wYXRoIiBhbmQgIn51c2VyL3BhdGgiIGFzIGl0IHNob3VsZC4KKworICogImdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiIgdG8gcmVuYW1lIGFuIGV4aXN0aW5nIHNlY3Rpb24gaW50byBhCisgICBib2d1cyBvbmUgZGlkIG5vdCBjaGVjayB0aGUgbmV3IG5hbWUuCisKKyAqIFRoZSAiZGlmZiAtLW5vLWluZGV4IiBjb2RlcGF0aCB1c2VkIGxpbWl0ZWQtbGVuZ3RoIGJ1ZmZlcnMsIHJpc2tpbmcKKyAgIHBhdGhuYW1lcyBnZXR0aW5nIHRydW5jYXRlZC4gIFVwZGF0ZSBpdCB0byB1c2UgdGhlIHN0cmJ1ZiBBUEkuCisKKyAqIFRoZSByZXBvcnQgZnJvbSAiZ2l0IGZldGNoIiBzYWlkICJuZXcgYnJhbmNoIiBldmVuIGZvciBhIG5vbiBicmFuY2gKKyAgIHJlZi4KKworICogVGhlIGh0dHAtYmFja2VuZCAodGhlIHNlcnZlciBzaWRlIG9mIHRoZSBzbWFydCBodHRwIHRyYW5zZmVyKSB1c2VkCisgICB0byBvdmVyd3JpdGUgR0lUX0NPTU1JVFRFUl9OQU1FIGFuZCBHSVRfQ09NTUlUVEVSX0VNQUlMIHdpdGggdGhlCisgICB2YWx1ZSBvYnRhaW5lZCBmcm9tIFJFTU9URV9VU0VSIHVuY29uZGl0aW9uYWxseSwgbWFraW5nIGl0CisgICBpbXBvc3NpYmxlIGZvciB0aGUgc2VydmVyIHNpZGUgc2l0ZS1zcGVjaWZpYyBjdXN0b21pemF0aW9uIHRvIHVzZQorICAgZGlmZmVyZW50IGlkZW50aXR5IHNvdXJjZXMgdG8gYWZmZWN0IHRoZSBuYW1lcyBsb2dnZWQuIEl0IG5vdyB1c2VzCisgICBSRU1PVEVfVVNFUiBvbmx5IGFzIGEgZmFsbGJhY2sgdmFsdWUuCisKKyAqICJsb2cgLS1ncmFwaCIgd2FzIG5vdCB2ZXJ5IGZyaWVuZGx5IHdpdGggIi0tc3RhdCIgb3B0aW9uIGFuZCBpdHMKKyAgIG91dHB1dCBoYWQgbGluZSBicmVha3MgYXQgd3JvbmcgcGxhY2VzLgorCisgKiBPY3RvcHVzIG1lcmdlIHN0cmF0ZWd5IGRpZCBub3QgcmVkdWNlIGhlYWRzIHRoYXQgYXJlIHJlY29yZGVkIGluIHRoZQorICAgZmluYWwgY29tbWl0IGNvcnJlY3RseS4KKworICogImdpdCBwdXNoIiBvdmVyIHNtYXJ0LWh0dHAgbG9zdCBwcm9ncmVzcyBvdXRwdXQgYSBmZXcgcmVsZWFzZXMgYWdvOworICAgdGhpcyByZWxlYXNlIHJlc3VycmVjdHMgaXQuCisKKyAqIFRoZSBlcnJvciBhbmQgYWR2aWNlIG1lc3NhZ2VzIGdpdmVuIGJ5ICJnaXQgcHVzaCIgd2hlbiBpdCBmYWlscyBkdWUKKyAgIHRvIG5vbi1mZiB3ZXJlIG5vdCB2ZXJ5IGhlbHBmdWwgdG8gbmV3IHVzZXJzOyBpdCBoYXMgYmVlbiBicm9rZW4KKyAgIGludG8gdGhyZWUgY2FzZXMsIGFuZCBlYWNoIGlzIGdpdmVuIGEgc2VwYXJhdGUgYWR2aWNlIG1lc3NhZ2UuCisKKyAqIFRoZSBpbnNuIHNoZWV0IGdpdmVuIGJ5ICJyZWJhc2UgLWkiIGRpZCBub3QgbWFrZSBpdCBjbGVhciB0aGF0IHRoZQorICAgaW5zbiBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZCB0byBhZmZlY3QgdGhlIG9yZGVyIG9mIHRoZSBjb21taXRzIGluCisgICB0aGUgcmVzdWx0aW5nIGhpc3RvcnkuCisKKyAqICJnaXQgcmVwYWNrIiB1c2VkIHRvIHdyaXRlIG91dCB1bnJlYWNoYWJsZSBvYmplY3RzIGFzIGxvb3NlIG9iamVjdHMKKyAgIHdoZW4gcmVwYWNraW5nLCBldmVuIGlmIHN1Y2ggbG9vc2Ugb2JqZWN0cyB3aWxsIGltbWVkaWF0ZWx5IHBydW5lZAorICAgZHVlIHRvIGl0cyBhZ2UuCisKKyAqIEEgY29udHJpYiBzY3JpcHQgInJlcmVyZS10cmFpbiIgZGlkIG5vdCB3b3JrIG91dCBvZiB0aGUgYm94IHVubGVzcworICAgdXNlciBmdXR6ZWQgd2l0aCBoZXIgJFBBVEguCisKKyAqICJnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgiIHVzZWQgdG8gZW1pdCBub3RoaW5nIHdoZW4gcnVuIGF0IHRoZQorICAgdG9wLWxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUsIGJ1dCBub3cgaXQgZ2l2ZXMgYSBibGFuayBsaW5lLgorCisgKiBUaGUgaTE4biBvZiBlcnJvciBtZXNzYWdlICJnaXQgc3Rhc2ggc2F2ZSIgd2FzIG5vdCBwcm9wZXJseSBkb25lLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgdXNlZCBhIHNlZCBzY3JpcHQgdGhhdCBzb21lIHBsYXRmb3JtcyBtaXNoYW5kbGVkLgorCisgKiBXaGVuIHVzaW5nIGEgUGVybCBzY3JpcHQgb24gYSBzeXN0ZW0gd2hlcmUgInBlcmwiIGZvdW5kIG9uIHVzZXIncworICAgJFBBVEggY291bGQgYmUgYW5jaWVudCBvciBvdGhlcndpc2UgYnJva2VuLCB3ZSBhbGxvdyBidWlsZGVycyB0bworICAgc3BlY2lmeSB0aGUgcGF0aCB0byBhIGdvb2QgY29weSBvZiBQZXJsIHdpdGggJFBFUkxfUEFUSC4gIFRoZQorICAgZ2l0d2ViIHRlc3QgZm9yZ290IHRvIHVzZSB0aGF0IFBlcmwgd2hlbiBydW5uaW5nIGl0cyB0ZXN0LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwM2ZiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC4zLnR4dApAQCAtMCwwICsxLDQzIEBACitHaXQgdjEuNy4xMC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEwLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgbWVzc2FnZSBmaWxlIGZvciBHZXJtYW4gdHJhbnNsYXRpb24gaGFzIGJlZW4gdXBkYXRlZCBhIGJpdC4KKworICogUnVubmluZyAiZ2l0IGNoZWNrb3V0IiBvbiBhbiB1bmJvcm4gYnJhbmNoIHVzZWQgdG8gY29ycnVwdCBIRUFELgorCisgKiBXaGVuIGNoZWNraW5nIG91dCBhbm90aGVyIGNvbW1pdCBmcm9tIGFuIGFscmVhZHkgZGV0YWNoZWQgc3RhdGUsIHdlCisgICB1c2VkIHRvIHJlcG9ydCBhbGwgY29tbWl0cyB0aGF0IGFyZSBub3QgcmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZQorICAgcmVmcyBhcyBsb3NzYWdlLCBidXQgc29tZSBvZiB0aGVtIG1pZ2h0IGJlIHJlYWNoYWJsZSBmcm9tIHRoZSBuZXcKKyAgIEhFQUQsIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIHdhcm4gYWJvdXQgdGhlbS4KKworICogU29tZSB0aW1lIGFnbywgImdpdCBjbG9uZSIgbG9zdCB0aGUgcHJvZ3Jlc3Mgb3V0cHV0IGZvciBpdHMKKyAgICJjaGVja291dCIgcGhhc2U7IHdoZW4gcnVuIHdpdGhvdXQgYW55ICItLXF1aWV0IiBvcHRpb24sIGl0IHNob3VsZAorICAgZ2l2ZSBwcm9ncmVzcyB0byB0aGUgbGVuZ3RoeSBvcGVyYXRpb24uCisKKyAqIFRoZSBkaXJlY3RvcnkgcGF0aCB1c2VkIGluICJnaXQgZGlmZiAtLW5vLWluZGV4Iiwgd2hlbiBpdCByZWN1cnNlcworICAgZG93biwgd2FzIGJyb2tlbiB3aXRoIGEgcmVjZW50IHVwZGF0ZSBhZnRlciB2MS43LjEwLjEgcmVsZWFzZS4KKworICogImxvZyAteiAtLXByZXR0eT10Zm9ybWF0Oi4uLiIgZGlkIG5vdCB0ZXJtaW5hdGUgZWFjaCByZWNvcmQgd2l0aAorICAgTlVMLiAgVGhlIGZpeCBpcyBub3QgZW50aXJlbHkgY29ycmVjdCB3aGVuIHRoZSBvdXRwdXQgYWxzbyBhc2tzIGZvcgorICAgLS1wYXRjaCBhbmQvb3IgLS1zdGF0LCB0aG91Z2guCisKKyAqIFRoZSBEV0lNIGJlaGF2aW91ciBmb3IgImxvZyAtLXByZXR0eT1mb3JtYXQ6JWdkIC1nIiB3YXMgc29tZXdoYXQKKyAgIGJyb2tlbiBhbmQgZ2F2ZSB1bmR1ZSBwcmVjZWRlbmNlIHRvIGNvbmZpZ3VyZWQgbG9nLmRhdGUsIGNhdXNpbmcKKyAgICJnaXQgc3Rhc2ggbGlzdCIgdG8gc2hvdyAic3Rhc2hAe3RpbWUgc3RhbXAgc3RyaW5nfSIuCisKKyAqICJnaXQgc3RhdHVzIC0tcG9yY2VsYWluIiBpZ25vcmVkICItLWJyYW5jaCIgb3B0aW9uIGJ5IG1pc3Rha2UuICBUaGUKKyAgIG91dHB1dCBmb3IgImdpdCBzdGF0dXMgLS1icmFuY2ggLXoiIHdhcyBhbHNvIGluY29ycmVjdCBhbmQgZGlkIG5vdAorICAgdGVybWluYXRlIHRoZSByZWNvcmQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCBuYW1lIHdpdGggTlVMIGFzIGFza2VkLgorCisgKiBXaGVuIGEgc3VibW9kdWxlIHJlcG9zaXRvcnkgdXNlcyBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIG1lY2hhbmlzbSwKKyAgIHNvbWUgY29tbWFuZHMgdGhhdCB3ZXJlIHN0YXJ0ZWQgZnJvbSB0aGUgc3VwZXJwcm9qZWN0IGRpZCBub3QKKyAgIG5vdGljZSBpdCBhbmQgZmFpbGVkIHdpdGggIk5vIHN1Y2ggb2JqZWN0IiBlcnJvcnMuICBUaGUgc3ViY29tbWFuZHMKKyAgIG9mICJnaXQgc3VibW9kdWxlIiBjb21tYW5kIHRoYXQgcmVjdXJzZWQgaW50byB0aGUgc3VibW9kdWxlIGluIGEKKyAgIHNlcGFyYXRlIHByb2Nlc3Mgd2VyZSBPSzsgb25seSB0aGUgb25lcyB0aGF0IGNoZWF0ZWQgYW5kIHBlZWtlZAorICAgZGlyZWN0bHkgaW50byB0aGUgc3VibW9kdWxlJ3MgcmVwb3NpdG9yeSBmcm9tIHRoZSBwcmltYXJ5IHByb2Nlc3MKKyAgIHdlcmUgYWZmZWN0ZWQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2NjcwZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLjQudHh0CkBAIC0wLDAgKzEsMjkgQEAKK0dpdCB2MS43LjEwLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTAuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBtZXNzYWdlIGZpbGUgZm9yIFN3ZWRpc2ggdHJhbnNsYXRpb24gaGFzIGJlZW4gdXBkYXRlZCBhIGJpdC4KKworICogQSBuYW1lIHRha2VuIGZyb20gbWFpbG1hcCB3YXMgY29waWVkIGludG8gYW4gaW50ZXJuYWwgYnVmZmVyCisgICBpbmNvcnJlY3RseSBhbmQgY291bGQgb3ZlcnVuIHRoZSBidWZmZXIgaWYgaXQgaXMgdG9vIGxvbmcuCisKKyAqIEEgbWFsZm9ybWVkIGNvbW1pdCBvYmplY3QgdGhhdCBoYXMgYSBoZWFkZXIgbGluZSBjaG9tcGVkIGluIHRoZQorICAgbWlkZGxlIGNvdWxkIGtpbGwgZ2l0IHdpdGggYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UuCisKKyAqIEFuIGF1dGhvci9jb21taXR0ZXIgbmFtZSB0aGF0IGlzIGEgc2luZ2xlIGNoYXJhY3RlciB3YXMgbWlzaGFuZGxlZAorICAgYXMgYW4gaW52YWxpZCBuYW1lIGJ5IG1pc3Rha2UuCisKKyAqIFRoZSBwcm9ncmVzcyBpbmRpY2F0b3IgZm9yIGEgbGFyZ2UgImdpdCBjaGVja291dCIgd2FzIHNlbnQgdG8KKyAgIHN0ZGVyciBldmVuIGlmIGl0IGlzIG5vdCBhIHRlcm1pbmFsLgorCisgKiAiZ2l0IGdyZXAgLWUgJyRwYXR0ZXJuJyIsIHVubGlrZSB0aGUgY2FzZSB3aGVyZSB0aGUgcGF0dGVybnMgYXJlCisgICByZWFkIGZyb20gYSBmaWxlLCBkaWQgbm90IHRyZWF0IGluZGl2aWR1YWwgbGluZXMgaW4gdGhlIGdpdmVuCisgICBwYXR0ZXJuIGFyZ3VtZW50IGFzIHNlcGFyYXRlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXMgaXQgc2hvdWxkLgorCisgKiBXaGVuICJnaXQgcmViYXNlIiB3YXMgZ2l2ZW4gYSBiYWQgY29tbWl0IHRvIHJlcGxheSB0aGUgaGlzdG9yeSBvbiwKKyAgIGl0cyBlcnJvciBtZXNzYWdlIGRpZCBub3QgY29ycmVjdGx5IGdpdmUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudAorICAgaXQgaGFkIHRyb3VibGUgcGFyc2luZy4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGIxNzcwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAuNS50eHQKQEAgLTAsMCArMSwxMiBAQAorR2l0IHYxLjcuMTAuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMC40CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBmYXN0LWV4cG9ydCIgZGlkIG5vdCBnaXZlIGEgcmVhZGFibGUgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZQorICAgc2FtZSBtYXJrIGVycm9uZW91c2x5IGFwcGVhcmVkIHR3aWNlIGluIHRoZSAtLWltcG9ydC1tYXJrcyBpbnB1dC4KKworICogImdpdCByZWJhc2UgLXAiIHVzZWQgdG8gcGF5IGF0dGVudGlvbiB0byByZWJhc2UuYXV0b3NxdWFzaCB3aGljaAorICAgIHdhcyB3cm9uZy4gICJnaXQgcmViYXNlIC1wIC1pIiBzaG91bGQsIGJ1dCAiZ2l0IHJlYmFzZSAtcCIgYnkKKyAgICBpdHNlbGYgc2hvdWxkIG5vdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODEwMGJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTAudHh0CkBAIC0wLDAgKzEsMjE5IEBACitHaXQgdjEuNy4xMCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbXBhdGliaWxpdHkgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogRnJvbSB0aGlzIHJlbGVhc2Ugb24sIHRoZSAiZ2l0IG1lcmdlIiBjb21tYW5kIGluIGFuIGludGVyYWN0aXZlCisgICBzZXNzaW9uIHdpbGwgc3RhcnQgYW4gZWRpdG9yIHdoZW4gaXQgYXV0b21hdGljYWxseSByZXNvbHZlcyB0aGUKKyAgIG1lcmdlIGZvciB0aGUgdXNlciB0byBleHBsYWluIHRoZSByZXN1bHRpbmcgY29tbWl0LCBqdXN0IGxpa2UgdGhlCisgICAiZ2l0IGNvbW1pdCIgY29tbWFuZCBkb2VzIHdoZW4gaXQgd2Fzbid0IGdpdmVuIGEgY29tbWl0IG1lc3NhZ2UuCisKKyAgIElmIHlvdSBoYXZlIGEgc2NyaXB0IHRoYXQgcnVucyAiZ2l0IG1lcmdlIiBhbmQga2VlcHMgaXRzIHN0YW5kYXJkCisgICBpbnB1dCBhbmQgb3V0cHV0IGF0dGFjaGVkIHRvIHRoZSB1c2VyJ3MgdGVybWluYWwsIGFuZCBpZiB5b3UgZG8gbm90CisgICB3YW50IHRoZSB1c2VyIHRvIGV4cGxhaW4gdGhlIHJlc3VsdGluZyBtZXJnZSBjb21taXRzLCB5b3UgY2FuCisgICBleHBvcnQgR0lUX01FUkdFX0FVVE9FRElUIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCB0byAibm8iLCBsaWtlCisgICB0aGlzOgorCisJIyEvYmluL3NoCisJR0lUX01FUkdFX0FVVE9FRElUPW5vCisJZXhwb3J0IEdJVF9NRVJHRV9BVVRPRURJVAorCisgICB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IgKGlmIHlvdSB3YW50IHlvdXIgdXNlcnMgdG8gZXhwbGFpbiB0aGVpcgorICAgbWVyZ2UgY29tbWl0cywgeW91IGRvIG5vdCBoYXZlIHRvIGRvIGFueXRoaW5nKS4gIEFsdGVybmF0aXZlbHksIHlvdQorICAgY2FuIGdpdmUgdGhlICItLW5vLWVkaXQiIG9wdGlvbiB0byBpbmRpdmlkdWFsIGludm9jYXRpb25zIG9mIHRoZQorICAgImdpdCBtZXJnZSIgY29tbWFuZCBpZiB5b3Uga25vdyBldmVyeWJvZHkgd2hvIHVzZXMgeW91ciBzY3JpcHQgaGFzCisgICBHaXQgdjEuNy44IG9yIG5ld2VyLgorCisgKiBUaGUgIi0tYmluYXJ5Ly1iIiBvcHRpb25zIHRvICJnaXQgYW0iIGhhdmUgYmVlbiBhIG5vLW9wIGZvciBxdWl0ZSBhCisgICB3aGlsZSBhbmQgd2VyZSBkZXByZWNhdGVkIGluIG1pZCAyMDA4ICh2MS42LjApLiAgV2hlbiB5b3UgZ2l2ZSB0aGVzZQorICAgb3B0aW9ucyB0byAiZ2l0IGFtIiwgaXQgd2lsbCBub3cgd2FybiBhbmQgYXNrIHlvdSBub3QgdG8gdXNlIHRoZW0uCisKKyAqIFdoZW4geW91IGRvIG5vdCB0ZWxsIHdoaWNoIGJyYW5jaGVzIGFuZCB0YWdzIHRvIHB1c2ggdG8gdGhlICJnaXQKKyAgIHB1c2giIGNvbW1hbmQgaW4gYW55IHdheSwgdGhlIGNvbW1hbmQgdXNlZCAibWF0Y2hpbmcgcmVmcyIgcnVsZSB0bworICAgdXBkYXRlIHJlbW90ZSBicmFuY2hlcyBhbmQgdGFncyB3aXRoIGJyYW5jaGVzIGFuZCB0YWdzIHdpdGggdGhlCisgICBzYW1lIG5hbWUgeW91IGxvY2FsbHkgaGF2ZS4gIEluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBHaXQsIHRoaXMgd2lsbAorICAgY2hhbmdlIHRvIHB1c2ggb3V0IG9ubHkgeW91ciBjdXJyZW50IGJyYW5jaCBhY2NvcmRpbmcgdG8gZWl0aGVyIHRoZQorICAgInVwc3RyZWFtIiBvciB0aGUgImN1cnJlbnQiIHJ1bGUuICBBbHRob3VnaCAidXBzdHJlYW0iIG1heSBiZSBtb3JlCisgICBwb3dlcmZ1bCBvbmNlIHRoZSB1c2VyIHVuZGVyc3RhbmRzIEdpdCBiZXR0ZXIsIHRoZSBzZW1hbnRpY3MKKyAgICJjdXJyZW50IiBnaXZlcyBpcyBzaW1wbGVyIGFuZCBlYXNpZXIgdG8gdW5kZXJzdGFuZCBmb3IgYmVnaW5uZXJzCisgICBhbmQgbWF5IGJlIGEgc2FmZXIgYW5kIGJldHRlciBkZWZhdWx0IG9wdGlvbi4gIFdlIGhhdmVuJ3QgZGVjaWRlZAorICAgeWV0IHdoaWNoIG9uZSB0byBzd2l0Y2ggdG8uCisKKworVXBkYXRlcyBzaW5jZSB2MS43LjkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiB2YXJpb3VzICJnaXRrIiB1cGRhdGVzLgorICAgLSBzaG93IHRoZSBwYXRoIHRvIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IGluIHRoZSB3aW5kb3cgdGl0bGUKKyAgIC0gdXBkYXRlIHByZWZlcmVuY2UgZWRpdCBkaWFsb2cKKyAgIC0gZGlzcGxheSBmaWxlIGxpc3QgY29ycmVjdGx5IHdoZW4gZGlyZWN0b3JpZXMgYXJlIGdpdmVuIG9uIGNvbW1hbmQgbGluZQorICAgLSBtYWtlICJnaXQtZGVzY3JpYmUiIG91dHB1dCBpbiB0aGUgbG9nIG1lc3NhZ2UgaW50byBhIGNsaWNrYWJsZSBsaW5rCisgICAtIGF2b2lkIG1hdGNoaW5nIHRoZSBVTklYIHRpbWVzdGFtcCBwYXJ0IHdoZW4gc2VhcmNoaW5nIGFsbCBmaWVsZHMKKyAgIC0gZ2l2ZSBwcmVmZXJlbmNlIHRvIHN5bWJvbGljIGZvbnQgbmFtZXMgbGlrZSBzYW5zICYgbW9ub3NwYWNlCisgICAtIGFsbG93IGNvbXBhcmluZyB0d28gY29tbWl0cyB1c2luZyBhIG1hcmsKKyAgIC0gImdpdGsiIGhvbm9ycyBsb2cuc2hvd3Jvb3QgY29uZmlndXJhdGlvbi4KKworICogVGVhbXMgZm9yIGxvY2FsaXppbmcgdGhlIG1lc3NhZ2VzIGZyb20gdGhlIFBvcmNlbGFpbiBsYXllciBvZgorICAgY29tbWFuZHMgYXJlIHN0YXJ0aW5nIHRvIGZvcm0sIHRoYW5rcyB0byBKaWFuZyBYaW4gd2hvIHZvbHVudGVlcmVkCisgICB0byBiZSB0aGUgbG9jYWxpemF0aW9uIGNvb3JkaW5hdG9yLiAgVHJhbnNsYXRlZCBtZXNzYWdlcyBmb3IKKyAgIHNpbXBsaWZpZWQgQ2hpbmVzZSwgU3dlZGlzaCBhbmQgUG9ydHVndWVzZSBhcmUgYXZhaWxhYmxlLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiBtZWNoYW5pc20gbGVhcm5lZCBhbiAiaW5jbHVkZSIgZmFjaWxpdHk7IGFuCisgICBhc3NpZ25tZW50IHRvIHRoZSBpbmNsdWRlLnBhdGggcHNldWRvLXZhcmlhYmxlIGNhdXNlcyB0aGUgbmFtZWQKKyAgIGZpbGUgdG8gYmUgaW5jbHVkZWQgaW4tcGxhY2Ugd2hlbiBHaXQgbG9va3MgdXAgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGVzLgorCisgKiBBIGNvbnRlbnQgZmlsdGVyIChjbGVhbi9zbXVkZ2UpIHVzZWQgdG8gYmUganVzdCBhIHdheSB0byBtYWtlIHRoZQorICAgcmVjb3JkZWQgY29udGVudHMgIm1vcmUgdXNlZnVsIiwgYW5kIGFsbG93ZWQgdG8gZmFpbDsgYSBmaWx0ZXIgY2FuCisgICBub3cgb3B0aW9uYWxseSBiZSBtYXJrZWQgYXMgInJlcXVpcmVkIi4KKworICogT3B0aW9ucyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoICItLW5vLSIgKGUuZy4gdGhlICItLW5vLXZlcmlmeSIKKyAgIG9wdGlvbiBvZiB0aGUgImdpdCBjb21taXQiIGNvbW1hbmQpIGNhbiBiZSBuZWdhdGVkIGJ5IG9taXR0aW5nCisgICAibm8tIiBmcm9tIGl0cyBuYW1lLCBlLmcuICJnaXQgY29tbWl0IC0tdmVyaWZ5Ii4KKworICogImdpdCBhbSIgbGVhcm5lZCB0byBwYXNzICItYiIgb3B0aW9uIHRvIHVuZGVybHlpbmcgImdpdCBtYWlsaW5mbyIsIHNvCisgICB0aGF0IGEgYnJhY2tldGVkIHN0cmluZyBvdGhlciB0aGFuICJQQVRDSCIgYXQgdGhlIGJlZ2lubmluZyBjYW4gYmUga2VwdC4KKworICogImdpdCBjbG9uZSIgbGVhcm5lZCAiLS1zaW5nbGUtYnJhbmNoIiBvcHRpb24gdG8gbGltaXQgY2xvbmluZyB0byBhCisgICBzaW5nbGUgYnJhbmNoIChzdXJwcmlzZSEpOyB0YWdzIHRoYXQgZG8gbm90IHBvaW50IGludG8gdGhlIGhpc3RvcnkKKyAgIG9mIHRoZSBicmFuY2ggYXJlIG5vdCBmZXRjaGVkLgorCisgKiAiZ2l0IGNsb25lIiBsZWFybmVkIHRvIGRldGFjaCB0aGUgSEVBRCBpbiB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkKKyAgIHdoZW4gdGhlIHVzZXIgc3BlY2lmaWVzIGEgdGFnIHdpdGggIi0tYnJhbmNoIiAoZS5nLiwgIi0tYnJhbmNoPXYxLjAiKS4KKyAgIENsb25lIGFsc28gbGVhcm5lZCB0byBwcmludCB0aGUgdXN1YWwgImRldGFjaGVkIEhFQUQiIGFkdmljZSBpbiBzdWNoCisgICBhIGNhc2UsIHNpbWlsYXIgdG8gImdpdCBjaGVja291dCB2MS4wIi4KKworICogV2hlbiBzaG93aW5nIGEgcGF0Y2ggd2hpbGUgaWdub3Jpbmcgd2hpdGVzcGFjZSBjaGFuZ2VzLCB0aGUgY29udGV4dAorICAgbGluZXMgYXJlIHRha2VuIGZyb20gdGhlIHBvc3RpbWFnZSwgaW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgdG8KKyAgIHZpZXcgdGhlIG91dHB1dC4KKworICogImdpdCBkaWZmIC0tc3RhdCIgbGVhcm5lZCB0byBhZGp1c3QgdGhlIHdpZHRoIG9mIHRoZSBvdXRwdXQgb24KKyAgIHdpZGVyIHRlcm1pbmFscywgYW5kIGdpdmUgbW9yZSBjb2x1bW5zIHRvIHBhdGhuYW1lcyBhcyBuZWVkZWQuCisKKyAqICJkaWZmLWhpZ2hsaWdodCIgZmlsdGVyIChpbiBjb250cmliLykgd2FzIHVwZGF0ZWQgdG8gcHJvZHVjZSBtb3JlCisgICBhZXN0aGV0aWNhbGx5IHBsZWFzaW5nIG91dHB1dC4KKworICogImZzY2siIGxlYXJuZWQgIi0tbm8tZGFuZ2xpbmciIG9wdGlvbiB0byBvbWl0IGRhbmdsaW5nIG9iamVjdAorICAgaW5mb3JtYXRpb24uCisKKyAqICJnaXQgbG9nIC1HIiBhbmQgImdpdCBsb2cgLVMiIGxlYXJuZWQgdG8gcGF5IGF0dGVudGlvbiB0byB0aGUgIi1pIgorICAgb3B0aW9uLiAgV2l0aCAiLWkiLCAibG9nIC1HIiBpZ25vcmVzIHRoZSBjYXNlIHdoZW4gZmluZGluZyBwYXRjaAorICAgaHVua3MgdGhhdCBpbnRyb2R1Y2Ugb3IgcmVtb3ZlIGEgc3RyaW5nIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4KKyAgIHBhdHRlcm4uICBTaW1pbGFybHkgd2l0aCAiLWkiLCAibG9nIC1TIiBpZ25vcmVzIHRoZSBjYXNlIHdoZW4KKyAgIGZpbmRpbmcgdGhlIGNvbW1pdCB0aGUgZ2l2ZW4gYmxvY2sgb2YgdGV4dCBhcHBlYXJzIG9yIGRpc2FwcGVhcnMKKyAgIGZyb20gdGhlIGZpbGUuCisKKyAqICJnaXQgbWVyZ2UiIGluIGFuIGludGVyYWN0aXZlIHNlc3Npb24gbGVhcm5lZCB0byBzcGF3biB0aGUgZWRpdG9yCisgICBieSBkZWZhdWx0IHRvIGxldCB0aGUgdXNlciBlZGl0IHRoZSBhdXRvLWdlbmVyYXRlZCBtZXJnZSBtZXNzYWdlLAorICAgdG8gZW5jb3VyYWdlIHBlb3BsZSB0byBleHBsYWluIHRoZWlyIG1lcmdlcyBiZXR0ZXIuIExlZ2FjeSBzY3JpcHRzCisgICBjYW4gZXhwb3J0IEdJVF9NRVJHRV9BVVRPRURJVD1ubyB0byByZXRhaW4gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3IuCisgICBCb3RoICJnaXQgbWVyZ2UiIGFuZCAiZ2l0IHB1bGwiIGNhbiBiZSBnaXZlbiAtLW5vLWVkaXQgZnJvbSB0aGUKKyAgIGNvbW1hbmQgbGluZSB0byBhY2NlcHQgdGhlIGF1dG8tZ2VuZXJhdGVkIG1lcmdlIG1lc3NhZ2UuCisKKyAqIFRoZSBhZHZpY2UgbWVzc2FnZSBnaXZlbiB3aGVuIHRoZSB1c2VyIGRpZG4ndCBnaXZlIGVub3VnaCBjbHVlIG9uCisgICB3aGF0IHRvIG1lcmdlIHRvICJnaXQgcHVsbCIgYW5kICJnaXQgbWVyZ2UiIGhhcyBiZWVuIHVwZGF0ZWQgdG8KKyAgIGJlIG1vcmUgY29uY2lzZSBhbmQgZWFzaWVyIHRvIHVuZGVyc3RhbmQuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCB0aGUgIi0tcHJ1bmUiIG9wdGlvbiwgc2ltaWxhciB0byAiZ2l0IGZldGNoIi4KKworICogVGhlIHdob2xlIGRpcmVjdG9yeSB0aGF0IGhvdXNlcyBhIHRvcC1sZXZlbCBzdXBlcnByb2plY3QgbWFuYWdlZCBieQorICAgImdpdCBzdWJtb2R1bGUiIGNhbiBiZSBtb3ZlZCB0byBhbm90aGVyIHBsYWNlLgorCisgKiAiZ2l0IHN5bWJvbGljLXJlZiIgbGVhcm5lZCB0aGUgIi0tc2hvcnQiIG9wdGlvbiB0byBhYmJyZXZpYXRlIHRoZQorICAgcmVmbmFtZSBpdCBzaG93cyB1bmFtYmlndW91c2x5LgorCisgKiAiZ2l0IHRhZyAtLWxpc3QiIGNhbiBiZSBnaXZlbiAiLS1wb2ludHMtYXQgPG9iamVjdD4iIHRvIGxpbWl0IGl0cworICAgb3V0cHV0IHRvIHRob3NlIHRoYXQgcG9pbnQgYXQgdGhlIGdpdmVuIG9iamVjdC4KKworICogImdpdHdlYiIgYWxsb3dzIGludGVybWVkaWF0ZSBlbnRyaWVzIGluIHRoZSBkaXJlY3RvcnkgaGllcmFyY2h5CisgICB0aGF0IGxlYWRzIHRvIGEgcHJvamVjdCB0byBiZSBjbGlja2VkLCB3aGljaCBpbiB0dXJuIHNob3dzIHRoZQorICAgbGlzdCBvZiBwcm9qZWN0cyBpbnNpZGUgdGhhdCBkaXJlY3RvcnkuCisKKyAqICJnaXR3ZWIiIGxlYXJuZWQgdG8gcmVhZCB2YXJpb3VzIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBmb3IgdGhlCisgICByZXBvc2l0b3JpZXMgbGF6aWx5LCBpbnN0ZWFkIG9mIHJlYWRpbmcgZXZlcnl0aGluZyB0aGF0IGNvdWxkIGJlCisgICBuZWVkZWQgKGluY2x1ZGluZyB0aGUgb25lcyB0aGF0IGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhIHNwZWNpZmljCisgICB0YXNrKS4KKworICogUHJvamVjdCBzZWFyY2ggaW4gImdpdHdlYiIgc2hvd3MgdGhlIHN1YnN0cmluZyB0aGF0IG1hdGNoZWQgaW4gdGhlCisgICBwcm9qZWN0IG5hbWUgYW5kIGRlc2NyaXB0aW9uIGhpZ2hsaWdodGVkLgorCisgKiBIVFRQIHRyYW5zcG9ydCBsZWFybmVkIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIGEgcHJveHkgaWYgbmVlZGVkLgorCisgKiBBIG5ldyBzY3JpcHQgImRpZmZhbGwiIGlzIGFkZGVkIHRvIGNvbnRyaWIvOyBpdCBkcml2ZXMgYW4KKyAgIGV4dGVybmFsIHRvb2wgdG8gcGVyZm9ybSBhIGRpcmVjdG9yeSBkaWZmIG9mIHR3byBHaXQgcmV2aXNpb25zCisgICBpbiBvbmUgZ28sIHVubGlrZSAiZGlmZnRvb2wiIHRoYXQgY29tcGFyZXMgb25lIGZpbGUgYXQgYSB0aW1lLgorCitGb3JlaWduIEludGVyZmFjZQorCisgKiBJbXByb3ZlZCBoYW5kbGluZyBvZiB2aWV3cywgbGFiZWxzIGFuZCBicmFuY2hlcyBpbiAiZ2l0LXA0IiAoaW4gY29udHJpYikuCisKKyAqICJnaXQtcDQiIChpbiBjb250cmliKSBzdWZmZXJlZCBmcm9tIHVubmVjZXNzYXJ5IG1lcmdlIGNvbmZsaWN0cyB3aGVuCisgICBwNCBleHBhbmRlZCB0aGUgZW1iZWRkZWQgJFJDUyQtbGlrZSBrZXl3b3JkczsgaXQgY2FuIGJlIG5vdyB0b2xkIHRvCisgICB1bmV4cGFuZCB0aGVtLgorCisgKiBTb21lICJnaXQtc3ZuIiB1cGRhdGVzLgorCisgKiAidmNzLXN2biIvInN2bi1mZSIgbGVhcm5lZCB0byByZWFkIGR1bXBzIHdpdGggc3ZuLWRlbHRhcyBhbmQKKyAgIHN1cHBvcnQgaW5jcmVtZW50YWwgaW1wb3J0cy4KKworICogImdpdCBkaWZmdG9vbC9tZXJnZXRvb2wiIGxlYXJuZWQgdG8gZHJpdmUgRGVsdGFXYWxrZXIuCisKK1BlcmZvcm1hbmNlCisKKyAqIFVubmVjZXNzYXJ5IGNhbGxzIHRvIHBhcnNlX29iamVjdCgpICJnaXQgdXBsb2FkLXBhY2siIG1ha2VzIGluCisgICByZXNwb25zZSB0byAiZ2l0IGZldGNoIiwgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQsIHRvIGhlbHAgcGVyZm9ybWFuY2UKKyAgIGluIHJlcG9zaXRvcmllcyB3aXRoIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgcmVmcy4KKworSW50ZXJuYWwgSW1wbGVtZW50YXRpb24gKHBsZWFzZSByZXBvcnQgcG9zc2libGUgcmVncmVzc2lvbnMpCisKKyAqIFJlY3Vyc2l2ZSBjYWxsIGNoYWlucyBpbiAiZ2l0IGluZGV4LXBhY2siIHRvIGRlYWwgd2l0aCBsb25nIGRlbHRhCisgICBjaGFpbnMgaGF2ZSBiZWVuIGZsYXR0ZW5lZCwgdG8gcmVkdWNlIHRoZSBzdGFjayBmb290cHJpbnQuCisKKyAqIFVzZSBvZiBhZGRfZXh0cmFfcmVmKCkgQVBJIGlzIG5vdyBnb25lLCB0byBtYWtlIGl0IHBvc3NpYmxlIHRvCisgICBjbGVhbmx5IHJlc3RydWN0dXJlIHRoZSBvdmVyYWxsIHJlZnMgQVBJLgorCisgKiBUaGUgY29tbWFuZCBsaW5lIHBhcnNlciBvZiAiZ2l0IHBhY2stb2JqZWN0cyIgbm93IHVzZXMgcGFyc2Utb3B0aW9ucworICAgQVBJLgorCisgKiBUaGUgdGVzdCBzdWl0ZSBzdXBwb3J0cyB0aGUgbmV3ICJ0ZXN0X3BhdXNlIiBoZWxwZXIgZnVuY3Rpb24uCisKKyAqIFBhcmFsbGVsIHRvIHRoZSB0ZXN0IHN1aXRlLCB0aGVyZSBpcyBhIGJlZ2lubmluZyBvZiBwZXJmb3JtYW5jZQorICAgYmVuY2htYXJraW5nIGZyYW1ld29yay4KKworICogdC9NYWtlZmlsZSBpcyBhZGp1c3RlZCB0byBwcmV2ZW50IG5ld2VyIHZlcnNpb25zIG9mIEdOVSBtYWtlIGZyb20KKyAgIHJ1bm5pbmcgdGVzdHMgaW4gc2VlbWluZ2x5IHJhbmRvbSBvcmRlci4KKworICogVGhlIGNvZGUgdG8gY2hlY2sgaWYgYSBwYXRoIHBvaW50cyBhdCBhIGZpbGUgYmV5b25kIGEgc3ltYm9saWMgbGluaworICAgaGFzIGJlZW4gcmVzdHJ1Y3R1cmVkIHRvIGJlIHRocmVhZC1zYWZlLgorCisgKiBXaGVuIHBydW5pbmcgZGlyZWN0b3JpZXMgdGhhdCBoYXMgYmVjb21lIGVtcHR5IGR1cmluZyAiZ2l0IHBydW5lIgorICAgYW5kICJnaXQgcHJ1bmUtcGFja2VkIiwgY2FsbCBjbG9zZWRpcigpIHRoYXQgaXRlcmF0ZXMgb3ZlciBhCisgICBkaXJlY3RvcnkgYmVmb3JlIHJtZGlyKCkgaXQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjkKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjcuOSBpbiB0aGUgbWFpbnRlbmFuY2UKK3JlbGVhc2VzIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgcmVsZWFzZSBub3RlcyB0byB0aGVtIGZvcgorZGV0YWlscykuCisKKyAqIEJ1aWxkIHdpdGggTk9fUEVSTF9NQUtFTUFLRVIgd2FzIGJyb2tlbiBhbmQgR2l0OjpJMThOIGRpZCBub3Qgd29yaworICAgd2l0aCB2ZXJzaW9ucyBvZiBQZXJsIG9sZGVyIHRoYW4gNS44LjMuCisgICAobWVyZ2UgNWViNjYwZSBhYi9wZXJsLWkxOG4gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHRhZyAtcyIgaG9ub3JlZCAiZ3BnLnByb2dyYW0iIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgc2luY2UKKyAgIDEuNy45LCBidXQgImdpdCB0YWcgLXYiIGFuZCAiZ2l0IHZlcmlmeS10YWciIGRpZG4ndC4KKyAgIChtZXJnZSBhMmMyNTA2IGF6L3ZlcmlmeS10YWctdXNlLWdwZy1jb25maWcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiY29uZmlndXJlIiBzY3JpcHQgbGVhcm5lZCB0byB0YWtlICItLXdpdGgtc2FuZS10b29sLXBhdGgiIGZyb20gdGhlCisgICBjb21tYW5kIGxpbmUgdG8gcmVjb3JkIFNBTkVfVE9PTF9QQVRIICh1c2VkIHRvIGF2b2lkIGJyb2tlbiBwbGF0Zm9ybQorICAgdG9vbHMgaW4gL3Vzci9iaW4pIGluIGNvbmZpZy5tYWsuYXV0b2dlbi4gIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3IKKyAgIHBlb3BsZSBvbiBTb2xhcmlzIHdobyBoYXZlIHNhbmVyIHRvb2xzIG91dHNpZGUgL3Vzci94cGdbNDZdL2Jpbi4KKworICogenNoIHBvcnQgb2YgYmFzaCBjb21wbGV0aW9uIHNjcmlwdCBuZWVkZWQgYW5vdGhlciB3b3JrYXJvdW5kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzdlY2NhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuMS50eHQKQEAgLTAsMCArMSw5IEBACitHaXQgdjEuNy4xMS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjcm9zcyBsaW5rcyBpbiB0aGUgSFRNTCB2ZXJzaW9uIG9mIG1hbnVhbCBwYWdlcyB3ZXJlIGJyb2tlbi4KKworQWxzbyBjb250YWlucyBtaW5vciB0eXBvZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjZmQwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjIudHh0CkBAIC0wLDAgKzEsNTMgQEAKK0dpdCB2MS43LjExLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTEuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE9uIEN5Z3dpbiwgdGhlIHBsYXRmb3JtIHByZWFkKDIpIGlzIG5vdCB0aHJlYWQgc2FmZSwganVzdCBsaWtlIG91cgorICAgb3duIGNvbXBhdC8gZW11bGF0aW9uLCBhbmQgY2Fubm90IGJlIHVzZWQgaW4gdGhlIGluZGV4LXBhY2sKKyAgIHByb2dyYW0uICBNYWtlZmlsZSB2YXJpYWJsZSBOT19USFJFQURfU0FGRV9QUkVBRCBjYW4gYmUgZGVmaW5lZCB0bworICAgYXZvaWQgdXNlIG9mIHRoaXMgZnVuY3Rpb24gaW4gYSB0aHJlYWRlZCBwcm9ncmFtLgorCisgKiAiZ2l0IGFkZCIgYWxsb3dzIGFkZGluZyBhIHJlZ3VsYXIgZmlsZSB0byB0aGUgcGF0aCB3aGVyZSBhCisgICBzdWJtb2R1bGUgdXNlZCB0byBleGlzdCwgYnV0ICJnaXQgdXBkYXRlLWluZGV4IiBkb2VzIG5vdCBhbGxvdyBhbgorICAgZXF1aXZhbGVudCBvcGVyYXRpb24gdG8gUG9yY2VsYWluIHdyaXRlcnMuCisKKyAqICJnaXQgYXJjaGl2ZSIgaW5jb3JyZWN0bHkgY29tcHV0ZWQgdGhlIGhlYWRlciBjaGVja3N1bTsgdGhlIHN5bXB0b20KKyAgIHdhcyBvYnNlcnZlZCBvbmx5IHdoZW4gdXNpbmcgcGF0aG5hbWVzIHdpdGggaGktYml0IHNldC4KKworICogImdpdCBibGFtZSIgZGlkIG5vdCB0cnkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGFiYnJldmlhdGVkIGNvbW1pdAorICAgb2JqZWN0IG5hbWVzIGluIGl0cyBvdXRwdXQgYXJlIHVuaXF1ZS4KKworICogUnVubmluZyAiZ2l0IGJ1bmRsZSB2ZXJpZnkiIG9uIGEgYnVuZGxlIHRoYXQgcmVjb3JkcyBhIGNvbXBsZXRlCisgICBoaXN0b3J5IHNhaWQgIml0IHJlcXVpcmVzIHRoZXNlIDAgY29tbWl0cyIuCisKKyAqICJnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIiB0byBjbG9uZSBhIHNpbmdsZSBicmFuY2ggZGlkIG5vdCBsaW1pdAorICAgdGhlIGNsb25pbmcgdG8gdGhlIHNwZWNpZmllZCBicmFuY2guCisKKyAqICJnaXQgZGlmZiAtLW5vLWluZGV4IiBkaWQgbm90IGNvcnJlY3RseSBoYW5kbGUgcmVsYXRpdmUgcGF0aHMgYW5kCisgICBkaWQgbm90IGNvcnJlY3RseSBnaXZlIGV4aXQgY29kZXMgd2hlbiBydW4gdW5kZXIgIi0tcXVpZXQiIG9wdGlvbi4KKworICogImdpdCBkaWZmIC0tbm8taW5kZXgiIGRpZCBub3Qgd29yayB3aXRoIHBhZ2VycyBjb3JyZWN0bHkuCisKKyAqICJnaXQgZGlmZiBDT1BZSU5HIEhFQUQ6Q09QWUlORyIgZ2F2ZSBhIG5vbnNlbnNlIGVycm9yIG1lc3NhZ2UgdGhhdAorICAgY2xhaW1lZCB0aGF0IHRoZSB0cmVlLWlzaCBIRUFEIGRpZCBub3QgaGF2ZSBDT1BZSU5HIGluIGl0LgorCisgKiBXaGVuICJnaXQgbG9nIiBnZXRzICItLXNpbXBsaWZ5LW1lcmdlcy9ieS1kZWNvcmF0aW9uIiB0b2dldGhlciB3aXRoCisgICAiLS1maXJzdC1wYXJlbnQiLCB0aGUgY29tYmluYXRpb24gb2YgdGhlc2Ugb3B0aW9ucyBtYWtlcyB0aGUKKyAgIHNpbXBsaWZpY2F0aW9uIGxvZ2ljIHRvIHVzZSBpbi1jb3JlIGNvbW1pdCBvYmplY3RzIHRoYXQgaGF2ZW4ndAorICAgYmVlbiBleGFtaW5lZCBmb3IgcmVsZXZhbmNlLCBlaXRoZXIgcHJvZHVjaW5nIGluY29ycmVjdCByZXN1bHQgb3IKKyAgIHRha2luZyB0b28gbG9uZyB0byBwcm9kdWNlIGFueSBvdXRwdXQuICBUZWFjaCB0aGUgc2ltcGxpZmljYXRpb24KKyAgIGxvZ2ljIHRvIGlnbm9yZSBjb21taXRzIHRoYXQgdGhlIGZpcnN0LXBhcmVudCB0cmF2ZXJzYWwgbG9naWMKKyAgIGlnbm9yZWQgd2hlbiBib3RoIGFyZSBpbiBlZmZlY3QgdG8gd29yayBhcm91bmQgdGhlIGlzc3VlLgorCisgKiAiZ2l0IGxzLWZpbGVzIC0tZXhjbHVkZT10IC1pIiBkaWQgbm90IGNvbnNpZGVyIGFueXRoaW5nIHVuZGVyIHQvIGFzCisgICBleGNsdWRlZCwgYXMgaXQgZGlkIG5vdCBwYXkgYXR0ZW50aW9uIHRvIGV4Y2x1c2lvbiBvZiBsZWFkaW5nIHBhdGhzCisgICB3aGlsZSB3YWxraW5nIHRoZSBpbmRleC4gIE90aGVyIHR3byB1c2VycyBvZiBleGNsdWRlZCgpIGFyZSBhbHNvCisgICB1cGRhdGVkLgorCisgKiAiZ2l0IHJlcXVlc3QtcHVsbCAkdXJsIGRldiIgd2hlbiB0aGUgdGlwIG9mICJkZXYiIGJyYW5jaCB3YXMgdGFnZ2VkCisgICB3aXRoICJleHQ0LWZvci1saW51cyIgdXNlZCB0aGUgY29udGVudHMgZnJvbSB0aGUgdGFnIGluIHRoZSBvdXRwdXQKKyAgIGJ1dCBzdGlsbCBhc2tlZCB0aGUgImRldiIgYnJhbmNoIHRvIGJlIHB1bGxlZCwgbm90IHRoZSB0YWcuCisKK0Fsc28gY29udGFpbnMgbWlub3IgdHlwb2ZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NDk0ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS4zLnR4dApAQCAtMCwwICsxLDUzIEBACitHaXQgdjEuNy4xMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgcHVzaCAkdGhlcmUgOmJvZ28iIChhbmQgaXRzIGVxdWl2YWxlbnQKKyAgICJnaXQgcHVzaCAkdGhlcmUgLS1kZWxldGUgYm9nbyIpIG1lbnRpb25lZCB0aGF0IHdlIHRyaWVkIGFuZCBmYWlsZWQKKyAgIHRvIGd1ZXNzIHdoYXQgcmVmIGlzIGJlaW5nIGRlbGV0ZWQgYmFzZWQgb24gdGhlIExIUyBvZiB0aGUgcmVmc3BlYywKKyAgIHdoaWNoIHdlIGRvbid0LgorCisgKiBBIGhhbmRmdWwgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdlIGNyZWF0ZSBoYWQgdGlnaHRlciB0aGFuCisgICBuZWNlc3NhcnkgcGVybWlzc2lvbiBiaXRzIHdoZW4gdGhlIHVzZXIgd2FudGVkIHRvIGhhdmUgZ3JvdXAKKyAgIHdyaXRhYmlsaXR5IChlLmcuIGJ5IHNldHRpbmcgInVtYXNrIDAwMiIpLgorCisgKiAiY29tbWl0IC0tYW1lbmQiIHVzZWQgdG8gcmVmdXNlIGFtZW5kaW5nIGEgY29tbWl0IHdpdGggYW4gZW1wdHkgbG9nCisgICBtZXNzYWdlLCB3aXRoIG9yIHdpdGhvdXQgIi0tYWxsb3ctZW1wdHktbWVzc2FnZSIuCisKKyAqICJnaXQgY29tbWl0IC0tYW1lbmQgLS1vbmx5IC0tIiB3YXMgbWVhbnQgdG8gYWxsb3cgIkNsZXZlciIgcGVvcGxlIHRvCisgICByZXdyaXRlIHRoZSBjb21taXQgbWVzc2FnZSB3aXRob3V0IG1ha2luZyBhbnkgY2hhbmdlIGV2ZW4gd2hlbiB0aGV5CisgICBoYXZlIGFscmVhZHkgY2hhbmdlcyBmb3IgdGhlIG5leHQgY29tbWl0IGFkZGVkIHRvIHRoZWlyIGluZGV4LCBidXQKKyAgIGl0IG5ldmVyIHdvcmtlZCBhcyBhZHZlcnRpc2VkIHNpbmNlIGl0IHdhcyBpbnRyb2R1Y2VkIGluIDEuMy4wIGVyYS4KKworICogRXZlbiB0aG91Z2ggdGhlIGluZGV4IGNhbiByZWNvcmQgcGF0aG5hbWVzIGxvbmdlciB0aGFuIDE8PDEyIGJ5dGVzLAorICAgaW4gc29tZSBwbGFjZXMgd2Ugd2VyZSBub3QgY29tcGFyaW5nIHRoZW0gaW4gZnVsbCwgcG90ZW50aWFsbHkKKyAgIHJlcGxhY2luZyBpbmRleCBlbnRyaWVzIGluc3RlYWQgb2YgYWRkaW5nLgorCisgKiAiZ2l0IHNob3ciJ3MgYXV0by13YWxraW5nIGJlaGF2aW91ciB3YXMgYW4gdW5yZWxpYWJsZSBhbmQKKyAgIHVucHJlZGljdGFibGUgaGFjazsgaXQgbm93IGJlaGF2ZXMganVzdCBsaWtlICJnaXQgbG9nIiBkb2VzIHdoZW4gaXQKKyAgIHdhbGtzLgorCisgKiAiZ2l0IGRpZmYiLCAiZ2l0IHN0YXR1cyIgYW5kIGFueXRoaW5nIHRoYXQgaW50ZXJuYWxseSB1c2VzIHRoZQorICAgY29tcGFyaXNvbiBtYWNoaW5lcnkgd2FzIHV0dGVybHkgYnJva2VuIHdoZW4gdGhlIGRpZmZlcmVuY2UKKyAgIGludm9sdmVkIGEgZmlsZSB3aXRoICItIiBhcyBpdHMgbmFtZS4gIFRoaXMgd2FzIGR1ZSB0byB0aGUgd2F5ICJnaXQKKyAgIGRpZmYgLS1uby1pbmRleCIgd2FzIGluY29ycmVjdGx5IGJvbHRlZCBvbiB0byB0aGUgc3lzdGVtLCBtYWtpbmcKKyAgIGFueSBjb21wYXJpc29uIHRoYXQgaW52b2x2ZXMgYSBmaWxlICItIiBhdCB0aGUgcm9vdCBsZXZlbAorICAgaW5jb3JyZWN0bHkgcmVhZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKworICogV2UgZGlkIG5vdCBoYXZlIHRlc3QgdG8gbWFrZSBzdXJlICJnaXQgcmViYXNlIiB3aXRob3V0IGV4dHJhIG9wdGlvbnMKKyAgIGZpbHRlcnMgb3V0IGFuIGVtcHR5IGNvbW1pdCBpbiB0aGUgb3JpZ2luYWwgaGlzdG9yeS4KKworICogImdpdCBmYXN0LWV4cG9ydCIgcHJvZHVjZWQgYW4gaW5wdXQgc3RyZWFtIGZvciBmYXN0LWltcG9ydCB3aXRob3V0CisgICBwcm9wZXJseSBxdW90aW5nIHBhdGhuYW1lcyB3aGVuIHRoZXkgY29udGFpbiBTUHMgaW4gdGhlbS4KKworICogImdpdCBjaGVja291dCAtLWRldGFjaCIsIHdoZW4geW91IGFyZSBzdGlsbCBvbiBhbiB1bmJvcm4gYnJhbmNoLAorICAgc2hvdWxkIGJlIGZvcmJpZGRlbiwgYnV0IGl0IHdhc24ndC4KKworICogU29tZSBpbXBsZW1lbnRhdGlvbnMgb2YgUGVybCB0ZXJtaW5hdGVzICJsaW5lcyIgd2l0aCBDUkxGIGV2ZW4gd2hlbgorICAgdGhlIHNjcmlwdCBpcyBvcGVyYXRpbmcgb24ganVzdCBhIHNlcXVlbmNlIG9mIGJ5dGVzLiAgTWFrZSBzdXJlIHRvCisgICB1c2UgIiRQRVJMX1BBVEgiLCB0aGUgdmVyc2lvbiBvZiBQZXJsIHRoZSB1c2VyIHRvbGQgR2l0IHRvIHVzZSwgaW4KKyAgIG91ciB0ZXN0cyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBicmVha2FnZXMgaW4gdGVzdHMuCisKK0Fsc28gY29udGFpbnMgbWlub3IgdHlwb2ZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNjQwYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS40LnR4dApAQCAtMCwwICsxLDMxIEBACitHaXQgdjEuNy4xMS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjExLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiJEdJVF9ESVIvQ09NTUlUX0VESVRNU0ciIGZpbGUgdGhhdCBpcyB1c2VkIHRvIGhvbGQgdGhlIGNvbW1pdCBsb2cKKyAgIG1lc3NhZ2UgdXNlciBlZGl0cyB3YXMgbm90IGRvY3VtZW50ZWQuCisKKyAqIFRoZSBhZHZpc2UoKSBmdW5jdGlvbiBkaWQgbm90IHVzZSB2YXJhcmdzIGNvcnJlY3RseSB0byBmb3JtYXQKKyAgIGl0cyBtZXNzYWdlLgorCisgKiBXaGVuICJnaXQgYW0iIGZhaWxlZCwgb2xkIHRpbWVycyBrbmV3IHRvIGNoZWNrIC5naXQvcmViYXNlLWFwcGx5L3BhdGNoCisgICB0byBzZWUgd2hhdCB3ZW50IHdyb25nLCBidXQgd2UgbmV2ZXIgdG9sZCB0aGUgdXNlcnMgYWJvdXQgaXQuCisKKyAqICJnaXQgY29tbWl0LXRyZWUiIGxlYXJuZWQgYSBtb3JlIG5hdHVyYWwgIi1wIDxwYXJlbnQ+IDx0cmVlPiIgb3JkZXIKKyAgIG9mIGFyZ3VtZW50cyBsb25nIHRpbWUgYWdvLCBidXQgcmVjZW50bHkgZm9yZ290IGl0IGJ5IG1pc3Rha2UuCisKKyAqICJnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIiBkaWQgbm90IG91dHB1dCBhbnl0aGluZyBmb3IgYSB0eXBlY2hhbmdlCisgICBmaWxlcGFpciB3aGVuIEdJVF9FWFRFUk5BTF9ESUZGIGlzIGluIGVmZmVjdC4KKworICogSW4gMS43LjkgZXJhLCB3ZSB0YXVnaHQgImdpdCByZWJhc2UiIGFib3V0IHRoZSByYXcgdGltZXN0YW1wIGZvcm1hdAorICAgYnV0IHdlIGRpZCBub3QgdGVhY2ggdGhlIHNhbWUgdHJpY2sgdG8gImZpbHRlci1icmFuY2giLCB3aGljaCByb2xsZWQKKyAgIGEgc2ltaWxhciBsb2dpYyBvbiBpdHMgb3duLgorCisgKiBXaGVuICJnaXQgc3VibW9kdWxlIGFkZCIgY2xvbmVzIGEgc3VibW9kdWxlIHJlcG9zaXRvcnksIGl0IGNhbiBnZXQKKyAgIGNvbmZ1c2VkIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRpbmcgc3VibW9kdWxlIHJlcG9zaXRvcnkgaW4gdGhlCisgICBzdXBlcnByb2plY3QncyAuZ2l0LyBkaXJlY3Rvcnkgd2hlbiB0aGVyZSBpcyBhIHN5bWJvbGljIGxpbmsgaW4gdGhlCisgICBwYXRoIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworQWxzbyBjb250YWlucyBtaW5vciB0eXBvZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEyZWQ4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjUudHh0CkBAIC0wLDAgKzEsMzYgQEAKK0dpdCB2MS43LjExLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTEuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBNYWtlZmlsZSBydWxlIHRvIGNyZWF0ZSBhc3NlbWJseSBvdXRwdXQgKHByaW1hcmlseSBmb3IKKyAgIGRlYnVnZ2luZyBwdXJwb3NlcykgZGlkIG5vdCBjcmVhdGUgaXQgbmV4dCB0byB0aGUgc291cmNlLgorCisgKiBUaGUgY29kZSB0byBhdm9pZCBtaXN0YWtlbiBhdHRlbXB0IHRvIGFkZCB0aGUgb2JqZWN0IGRpcmVjdG9yeQorICAgaXRzZWxmIGFzIGl0cyBvd24gYWx0ZXJuYXRlIGNvdWxkIHJlYWQgYmV5b25kIGVuZCBvZiBhIHN0cmluZyB3aGlsZQorICAgY29tcGFyaXNvbi4KKworICogT24gc29tZSBhcmNoaXRlY3R1cmVzLCAiYmxvY2stc2hhMSIgZGlkIG5vdCBjb21waWxlIGNvcnJlY3RseQorICAgd2hlbiBjb21waWxlcnMgaW5mZXJyZWQgYWxpZ25tZW50IGd1YXJhbnRlZXMgZnJvbSBvdXIgc291cmNlIHdlCisgICBkaWQgbm90IGludGVuZCB0byBtYWtlLgorCisgKiBXaGVuIHRhbGtpbmcgdG8gYSByZW1vdGUgcnVubmluZyBzc2ggb24gSVB2NiBlbmFibGVkIGhvc3QsIHdob3NlCisgICBhZGRyZXNzIGlzIHNwZWxsZWQgYXMgIltIT1NUXTpQT1JUIiwgd2UgZGlkIG5vdCBwYXJzZSB0aGUgYWRkcmVzcworICAgY29ycmVjdGx5IGFuZCBmYWlsZWQgdG8gY29ubmVjdC4KKworICogZ2l0LWJsYW1lLmVsIChpbiBjb21wYXQvKSBoYXZlIGJlZW4gdXBkYXRlZCB0byB1c2UgRWxpc3AgbW9yZQorICAgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNoZWNrb3V0IDxicmFuY2huYW1lPiIgdG8gY29tZSBiYWNrIGZyb20gYSBkZXRhY2hlZCBIRUFEIHN0YXRlCisgICBpbmNvcnJlY3RseSBjb21wdXRlZCByZWFjaGFiaWxpdHkgb2YgdGhlIGRldGFjaGVkIEhFQUQsIHJlc3VsdGluZworICAgaW4gdW5uZWNlc3Nhcnkgd2FybmluZ3MuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBkaWQgbm90IHN1cHBvcnQgLS10b29sLWhlbHAgb3B0aW9uIHRvIGdpdmUgdGhlIGxpc3QKKyAgIG9mIHN1cHBvcnRlZCBiYWNrZW5kcywgbGlrZSAiZ2l0IGRpZmZ0b29sIiBkb2VzLgorCisgKiAiZ2l0IGdyZXAiIHN0b3BwZWQgc3Bhd25pbmcgYW4gZXh0ZXJuYWwgImdyZXAiIGxvbmcgdGltZSBhZ28sIGJ1dCBhCisgICBkdXBsaWNhdGVkIHRlc3QgdG8gY2hlY2sgaW50ZXJuYWwgYW5kIGV4dGVybmFsICJncmVwIiB3YXMgbGVmdAorICAgYmVoaW5kLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIHR5cG9maXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTdkM2MzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNi50eHQKQEAgLTAsMCArMSw4NCBAQAorR2l0IHYxLjcuMTEuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4xMS41CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImNpYWJvdCIgc2NyaXB0IChpbiBjb250cmliLykgaGFzIGJlZW4gdXBkYXRlZCB3aXRoIGV4dGVuc2l2ZQorICAgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBmb28iIGVycm9yZWQgb3V0IHdpdGggIk5vdCBhIGRpcmVjdG9yeSIgd2hlbiB0aGUgdXNlciBoYWQgYQorICAgbm9uLWRpcmVjdG9yeSBvbiAkUEFUSCwgYW5kIHdvcnNlIHlldCBpdCBtYXNrZWQgYW4gYWxpYXMgImZvbyIgZnJvbQorICAgcnVubmluZy4KKworICogV2hlbiB0aGUgdXNlciBleHBvcnRzIGEgbm9uLWRlZmF1bHQgSUZTIHdpdGhvdXQgSFQsIHNjcmlwdHMgdGhhdAorICAgcmVseSBvbiBiZWluZyBhYmxlIHRvIHBhcnNlICJscy1maWxlcyAtcyB8IHdoaWxlIHJlYWQgYSBiIGMuLi4iCisgICBzdGFydGVkIHRvIGZhaWwuICBQcm90ZWN0IHRoZW0gZnJvbSBzdWNoIGEgbWlzY29uZmlndXJhdGlvbi4KKworICogV2hlbiB0aGUgdXNlciBnaXZlcyBhbiBhcmd1bWVudCB0aGF0IGNhbiBiZSB0YWtlbiBhcyBib3RoIGEKKyAgIHJldmlzaW9uIG5hbWUgYW5kIGEgcGF0aG5hbWUgd2l0aG91dCBkaXNhbWJpZ3VhdGluZyB3aXRoICItLSIsIHdlCisgICB1c2VkIHRvIGdpdmUgYSBoZWxwIG1lc3NhZ2UgIlVzZSAnLS0nIHRvIHNlcGFyYXRlIi4gIFRoZSBtZXNzYWdlCisgICBoYXMgYmVlbiBjbGFyaWZpZWQgdG8gc2hvdyB3aGVyZSB0aGF0ICctLScgZ29lcyBvbiB0aGUgY29tbWFuZAorICAgbGluZS4KKworICogRG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXQgaGFkIGEgY29uZnVzaW5nCisgICBleGFtcGxlLgorCisgKiBPbGRlciBwYXJ0cyBvZiB0aGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliZWQgYXMgaWYgaGF2aW5nIGEgcmVndWxhcgorICAgZmlsZSBpbiAuZ2l0L3JlZnMvIGhpZXJhcmNoeSB3ZXJlIHRoZSBvbmx5IHdheSB0byBoYXZlIGJyYW5jaGVzIGFuZAorICAgdGFncywgd2hpY2ggaXMgbm90IHRydWUgZm9yIHF1aXRlIHNvbWUgdGltZS4KKworICogSXQgd2FzIGdlbmVyYWxseSB1bmRlcnN0b29kIHRoYXQgIi0tbG9uZy1vcHRpb24icyB0byBtYW55IG9mIG91cgorICAgc3ViY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIHRoZSB1bmlxdWUgcHJlZml4LCBidXQgaXQgd2FzIG5vdAorICAgZWFzeSB0byBmaW5kIGl0IGRlc2NyaWJlZCBmb3IgbmV3IHJlYWRlcnMgb2YgdGhlIGRvY3VtZW50YXRpb24gc2V0LgorCisgKiBUaGUgIi0tdG9wby1vcmRlciIsICItLWRhdGUtb3JkZXIiIChhbmQgdGhlIGxhY2sgb2YgZWl0aGVyIG1lYW5zCisgICB0aGUgZGVmYXVsdCBvcmRlcikgb3B0aW9ucyB0byAicmV2LWxpc3QiIGFuZCAibG9nIiBmYW1pbHkgb2YKKyAgIGNvbW1hbmRzIHdlcmUgcG9vcmx5IGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBjb21taXQgLS1hbWVuZCIgbGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxvZyBtZXNzYWdlIGFuZCB0aGVuCisgICBkaWVkIHdoZW4gdGhlIGh1bWFuLXJlYWRhYmxlIGNvbW1pdHRlciBuYW1lIHdhcyBnaXZlbgorICAgaW5zdWZmaWNpZW50bHkgYnkgZ2V0cHdlbnQoMykuCisKKyAqIFRoZSBleGl0IHN0YXR1cyBjb2RlIGZyb20gImdpdCBjb25maWciIHdhcyB3YXkgb3ZlcnNwZWNpZmllZCB3aGlsZQorICAgYmVpbmcgaW5jb3JyZWN0LiAgVGhlIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgdG8gZ2l2ZSB0aGUKKyAgIGRvY3VtZW50ZWQgc3RhdHVzIGZvciBhIGNhc2UgdGhhdCB3YXMgZG9jdW1lbnRlZCwgYW5kIGludHJvZHVjZSBhCisgICBuZXcgY29kZSBmb3IgImFsbCBvdGhlciBlcnJvcnMiLgorCisgKiBUaGUgb3V0cHV0IGZyb20gImdpdCBkaWZmIC1CIiBmb3IgYSBmaWxlIHRoYXQgZW5kcyB3aXRoIGFuCisgICBpbmNvbXBsZXRlIGxpbmUgZGlkIG5vdCBwdXQgIlwgTm8gbmV3bGluZS4uLiIgb24gYSBsaW5lIG9mIGl0cyBvd24uCisKKyAqICJnaXQgZGlmZiIgaGFkIGEgY29uZnVzaW9uIGJldHdlZW4gdGFraW5nIGRhdGEgZnJvbSBhIHBhdGggaW4gdGhlCisgICB3b3JraW5nIHRyZWUgYW5kIHRha2luZyBkYXRhIGZyb20gYW4gb2JqZWN0IHRoYXQgaGFwcGVucyB0byBoYXZlCisgICBuYW1lIDB7NDB9IHJlY29yZGVkIGluIGEgdHJlZS4KKworICogVGhlICItLXJlYmFzZSIgb3B0aW9uIHRvICJnaXQgcHVsbCIgY2FuIGJlIGFiYnJldmlhdGVkIHRvICItciIsCisgICBidXQgd2UgZGlkbid0IGRvY3VtZW50IGl0LgorCisgKiBXaGVuICJnaXQgcHVzaCIgdHJpZ2dlcmVkIHRoZSBhdXRvbWF0aWMgZ2Mgb24gdGhlIHJlY2VpdmluZyBlbmQsIGEKKyAgIG1lc3NhZ2UgZnJvbSAiZ2l0IHBydW5lIiB0aGF0IHNhaWQgaXQgd2FzIHJlbW92aW5nIGNydWZ0IGxlYWtlZCB0bworICAgdGhlIHN0YW5kYXJkIG91dHB1dCwgYnJlYWtpbmcgdGhlIGNvbW11bmljYXRpb24gcHJvdG9jb2wuCisKKyAqIFRoZSByZWZsb2cgZW50cmllcyBsZWZ0IGJ5ICJnaXQgcmViYXNlIiBhbmQgImdpdCByZWJhc2UgLWkiIHdlcmUKKyAgIGluY29uc2lzdGVudCAodGhlIGludGVyYWN0aXZlIG9uZSBnYXZlIGFuIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lKS4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IHVucXVvdGUgZW5jb2RlZCB3b3JkcyB0aGF0IGFwcGVhciBvbiB0aGUKKyAgIGhlYWRlciBjb3JyZWN0bHksIGFuZCBsb3N0ICJfIiBmcm9tIHN0cmluZ3MuCisKKyAqICJnaXQgc3Rhc2ggYXBwbHkvcG9wIiBkaWQgbm90IHRyaWdnZXIgInJlcmVyZSIgdXBvbiBjb25mbGljdHMKKyAgIHVubGlrZSBvdGhlciBtZXJneSBvcGVyYXRpb25zLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSA8Y21kPiBwYXRoIiBkaWQgbm90IGVycm9yIG91dCB3aGVuIHRoZSBwYXRoIHRvIHRoZQorICAgc3VibW9kdWxlIHdhcyBtaXNzcGVsdC4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIC1mIiBkaWQgbm90IHVwZGF0ZSBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlCisgICB0aGF0IGhhcyBsb2NhbCBjaGFuZ2VzLgorICAgKG1lcmdlIDAxZDQ3MjEgc3ovc3VibW9kdWxlLWZvcmNlLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXR3ZWIiIHdoZW4gdXNlZCB3aXRoIFBBVEhfSU5GTyBmYWlsZWQgdG8gbm90aWNlIGRpcmVjdG9yaWVzIHdpdGgKKyAgIFNQIChhbmQgb3RoZXIgY2hhcmFjdGVycyB0aGF0IG5lZWQgVVJMLXN0eWxlIHF1b3RpbmcpIGluIHRoZW0uCisKKyAqIEZhbGxiYWNrICdnZXRwYXNzJyBpbXBsZW1lbnRhdGlvbiBtYWRlIHVucG9ydGFibGUgdXNlIG9mIHN0ZGlvIEFQSS4KKworICogQSB1dGlsaXR5IHNoZWxsIGZ1bmN0aW9uIHRlc3Rfc2VxIGhhcyBiZWVuIGFkZGVkIGFzIGEgcmVwbGFjZW1lbnQKKyAgIGZvciB0aGUgJ3NlcScgdXRpbGl0eSBmb3VuZCBvbiBzb21lIHBsYXRmb3Jtcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTEuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlNzlkOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLjcudHh0CkBAIC0wLDAgKzEsNDYgQEAKK0dpdCB2MS43LjExLjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTEuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBzeW5vcHNpcyBzYWlkICJjaGVja291dCBbLUIgYnJhbmNoXSIgdG8gbWFrZSBpdCBjbGVhciB0aGUKKyAgIGJyYW5jaCBuYW1lIGlzIGEgcGFyYW1ldGVyIHRvIHRoZSBvcHRpb24sIGJ1dCB0aGUgaGVhZGluZyBmb3IgdGhlCisgICBvcHRpb24gZGVzY3JpcHRpb24gd2FzICItQjo6Iiwgbm90ICItQiBicmFuY2g6OiIsIG1ha2luZyB0aGUKKyAgIGRvY3VtZW50YXRpb24gbWlzbGVhZGluZy4KKworICogR2l0IHNoaXBzIHdpdGggYSBmYWxsLWJhY2sgcmVnZXhwIGltcGxlbWVudGF0aW9uIGZvciBwbGF0Zm9ybXMgd2l0aAorICAgYnVnZ3kgcmVnZXhwIGxpYnJhcnksIGJ1dCBpdCB3YXMgZWFzeSBmb3IgcGVvcGxlIHRvIGtlZXAgdXNpbmcgdGhlaXIKKyAgIHBsYXRmb3JtIHJlZ2V4cC4gIEEgbmV3IHRlc3QgaGFzIGJlZW4gYWRkZWQgdG8gY2hlY2sgdGhpcy4KKworICogImdpdCBhcHBseSAtcDAiIGRpZCBub3QgcGFyc2UgcGF0aG5hbWVzIG9uICJkaWZmIC0tZ2l0IiBsaW5lCisgICBjb3JyZWN0bHkuICBUaGlzIGNhdXNlZCBwYXRjaGVzIHRoYXQgaGFkIHBhdGhuYW1lcyBpbiBubyBvdGhlcgorICAgcGxhY2VzIHRvIGJlIG1pc3Rha2VubHkgcmVqZWN0ZWQgKG1vc3Qgbm90YWJseSwgYmluYXJ5IHBhdGNoIHRoYXQKKyAgIGRvZXMgbm90IHJlbmFtZSBub3IgY2hhbmdlIG1vZGUpLiAgVGV4dHVhbCBwYXRjaGVzLCByZW5hbWVzIG9yIG1vZGUKKyAgIGNoYW5nZXMgaGF2ZSBwcmVpbWFnZSBhbmQgcG9zdGltYWdlIHBhdGhuYW1lcyBpbiBkaWZmZXJlbnQgcGxhY2VzCisgICBpbiBhIGZvcm0gdGhhdCBjYW4gYmUgcGFyc2VkIHVuYW1iaWd1b3VzbHkgYW5kIGRpZCBub3Qgc3VmZmVyIGZyb20KKyAgIHRoaXMgcHJvYmxlbS4KKworICogQWZ0ZXIgImdpdGsiIHNob3dlZCB0aGUgY29udGVudHMgb2YgYSB0YWcsIG5laXRoZXIgIlJlcmVhZAorICAgcmVmZXJlbmNlcyIgbm9yICJSZWxvYWQiIGRpZCBub3QgdXBkYXRlIHdoYXQgaXMgc2hvd24gYXMgdGhlCisgICBjb250ZW50cyBvZiBpdCwgd2hlbiB0aGUgdXNlciBvdmVyd3JvdGUgdGhlIHRhZyB3aXRoICJnaXQgdGFnIC1mIi4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGRpZCBub3QgY3VycmVjdGx5IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSAtLXNvcnQKKyAgIG9wdGlvbi4KKworICogImdpdCBsb2cgLi4iIGVycm9yZWQgb3V0IHNheWluZyBpdCBpcyBib3RoIHJldiByYW5nZSBhbmQgYSBwYXRoCisgICB3aGVuIHRoZXJlIGlzIG5vIGRpc2FtYmlndWF0aW5nICItLSIgaXMgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgIFVwZGF0ZSB0aGUgY29tbWFuZCBsaW5lIHBhcnNlciB0byBpbnRlcnByZXQgIi4uIiBhcyBhIHBhdGggaW4gc3VjaAorICAgYSBjYXNlLgorCisgKiBQdXNoaW5nIHRvIHNtYXJ0IEhUVFAgc2VydmVyIHdpdGggcmVjZW50IEdpdCBmYWlscyB3aXRob3V0IGhhdmluZworICAgdGhlIHVzZXJuYW1lIGluIHRoZSBVUkwgdG8gZm9yY2UgYXV0aGVudGljYXRpb24sIGlmIHRoZSBzZXJ2ZXIgaXMKKyAgIGNvbmZpZ3VyZWQgdG8gYWxsb3cgR0VUIGFub255bW91c2x5LCB3aGlsZSByZXF1aXJpbmcgYXV0aGVudGljYXRpb24KKyAgIGZvciBQT1NULgorCisgKiAiZ2l0IHNob3cgLS1mb3JtYXQ9JyVjaSciIGRpZCBub3QgZ2l2ZSB0aW1lc3RhbXAgY29ycmVjdGx5IGZvcgorICAgY29tbWl0cyBjcmVhdGVkIHdpdGhvdXQgaHVtYW4gcmVhZGFibGUgbmFtZSBvbiAiY29tbWl0dGVyIiBsaW5lLgorICAgKG1lcmdlIGUyN2RkYjYgamMvbWFpbnQtaWRlbnQtbWlzc2luZy1odW1hbi1uYW1lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzaG93IC0tcXVpZXQiIG91Z2h0IHRvIGJlIGEgc3lub255bSBmb3IgImdpdCBzaG93IC1zIiwgYnV0CisgICB3YXNuJ3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViOTU0YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjExLnR4dApAQCAtMCwwICsxLDEzOSBAQAorR2l0IHYxLjcuMTEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogQSBuZXcgbW9kZSBmb3IgcHVzaCwgInNpbXBsZSIsIHdoaWNoIGlzIGEgY3Jvc3MgYmV0d2VlbiAiY3VycmVudCIKKyAgIGFuZCAidXBzdHJlYW0iLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiAiZ2l0IHB1c2giIHdpdGhvdXQgYW55IHJlZnNwZWMKKyAgIHdpbGwgcHVzaCB0aGUgY3VycmVudCBicmFuY2ggb3V0IHRvIHRoZSBzYW1lIG5hbWUgYXQgdGhlIHJlbW90ZQorICAgcmVwb3NpdG9yeSBvbmx5IHdoZW4gaXQgaXMgc2V0IHRvIHRyYWNrIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZQorICAgbmFtZSBvdmVyIHRoZXJlLiAgVGhlIHBsYW4gaXMgdG8gbWFrZSB0aGlzIG1vZGUgdGhlIG5ldyBkZWZhdWx0CisgICB2YWx1ZSB3aGVuIHB1c2guZGVmYXVsdCBpcyBub3QgY29uZmlndXJlZC4KKworICogQSBjb3VwbGUgb2YgY29tbWFuZHMgbGVhcm5lZCB0aGUgIi0tY29sdW1uIiBvcHRpb24gdG8gcHJvZHVjZQorICAgY29sdW1uYXIgb3V0cHV0LgorCisgKiBBIHRoaXJkLXBhcnR5IHRvb2wgImdpdCBzdWJ0cmVlIiBpcyBkaXN0cmlidXRlZCBpbiBjb250cmliLworCisgKiBBIHJlbW90ZSBoZWxwZXIgdGhhdCBhY3RzIGFzIGEgcHJveHkgYW5kIGNhY2hlcyBzc2wgc2Vzc2lvbiBmb3IgdGhlCisgICBodHRwczovLyB0cmFuc3BvcnQgaXMgYWRkZWQgdG8gdGhlIGNvbnRyaWIvIGFyZWEuCisKKyAqIEVycm9yIG1lc3NhZ2VzIGdpdmVuIHdoZW4gQHt1fSBpcyB1c2VkIGZvciBhIGJyYW5jaCB3aXRob3V0IGl0cworICAgdXBzdHJlYW0gY29uZmlndXJlZCBoYXZlIGJlZW4gY2xhcmlmaWVkLgorCisgKiBFdmVuIHdpdGggdGhlICItcSJ1aWV0IG9wdGlvbiwgImNoZWNrb3V0IiB1c2VkIHRvIHJlcG9ydCBzZXR0aW5nIHVwCisgICB0cmFja2luZy4gIEFsc28gImJyYW5jaCIgbGVhcm5lZCB0aGUgIi1xInVpZXQgb3B0aW9uIHRvIHNxdWVsY2gKKyAgIGluZm9ybWF0aW9uYWwgbWVzc2FnZS4KKworICogWW91ciBidWlsZCBwbGF0Zm9ybSBtYXkgc3VwcG9ydCBoYXJkbGlua3MgYnV0IHlvdSBtYXkgcHJlZmVyIG5vdCB0bworICAgdXNlIHRoZW0sIGUuZy4gd2hlbiBpbnN0YWxsaW5nIHRvIERFU1RESVIgdG8gbWFrZSBhIHRhcmJhbGwgYW5kCisgICB1bnRhcnJpbmcgb24gYSBmaWxlc3lzdGVtIHRoYXQgaGFzIHBvb3Igc3VwcG9ydCBmb3IgaGFyZGxpbmtzLgorICAgVGhlcmUgaXMgYSBNYWtlZmlsZSBvcHRpb24gTk9fSU5TVEFMTF9IQVJETElOS1MgZm9yIHlvdS4KKworICogVGhlIHNtYXJ0LWh0dHAgYmFja2VuZCB1c2VkIHRvIGFsd2F5cyBvdmVycmlkZSBHSVRfQ09NTUlUVEVSXyoKKyAgIHZhcmlhYmxlcyB3aXRoIFJFTU9URV9VU0VSIGFuZCBSRU1PVEVfQUREUiwgYnV0IHRoZXNlIHZhcmlhYmxlcyBhcmUKKyAgIG5vdyBwcmVzZXJ2ZWQgd2hlbiBzZXQuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgdGhlICItLWluY2x1ZGUiIG9wdGlvbiwgd2hpY2ggaXMgYW4gb3Bwb3NpdGUgb2YKKyAgIGV4aXN0aW5nIHRoZSAiLS1leGNsdWRlIiBvcHRpb24uCisKKyAqIFdoZW4gImdpdCBhbSAtMyIgbmVlZHMgdG8gZmFsbCBiYWNrIHRvIGFuIGFwcGxpY2F0aW9uIG9mIHRoZSBwYXRjaAorICAgdG8gYSBzeW50aGVzaXplZCBwcmVpbWFnZSBmb2xsb3dlZCBieSBhIDMtd2F5IG1lcmdlLCB0aGUgcGF0aHMgdGhhdAorICAgbmVlZGVkIHN1Y2ggdHJlYXRtZW50IGFyZSBub3cgcmVwb3J0ZWQgdG8gdGhlIGVuZCB1c2VyLCBzbyB0aGF0IHRoZQorICAgcmVzdWx0IGluIHRoZW0gY2FuIGJlIGV5ZWJhbGxlZCB3aXRoIGV4dHJhIGNhcmUuCisKKyAqIFRoZSBvdXRwdXQgZnJvbSAiZGlmZi9sb2cgLS1zdGF0IiB1c2VkIHRvIGFsd2F5cyBhbGxvY2F0ZSA0IGNvbHVtbnMKKyAgIHRvIHNob3cgdGhlIG51bWJlciBvZiBtb2RpZmllZCBsaW5lcywgYnV0IG5vdCBhbnltb3JlLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBsZWFybmVkIHRoZSAiLS1kaXItZGlmZiIgb3B0aW9uIHRvIHNwYXduIGV4dGVybmFsCisgICBkaWZmIHRvb2xzIHRoYXQgY2FuIGNvbXBhcmUgdHdvIGRpcmVjdG9yeSBoaWVyYXJjaGllcyBhdCBhIHRpbWUKKyAgIGFmdGVyIHBvcHVsYXRpbmcgdHdvIHRlbXBvcmFyeSBkaXJlY3RvcmllcywgaW5zdGVhZCBvZiBydW5uaW5nIGFuCisgICBpbnN0YW5jZSBvZiB0aGUgZXh0ZXJuYWwgdG9vbCBvbmNlIHBlciBhIGZpbGUgcGFpci4KKworICogVGhlICJmbXQtbWVyZ2UtbXNnIiBjb21tYW5kIGxlYXJuZWQgdG8gbGlzdCB0aGUgcHJpbWFyeSBjb250cmlidXRvcnMKKyAgIGludm9sdmVkIGluIHRoZSBzaWRlIHRvcGljIHlvdSBhcmUgbWVyZ2luZyBpbiBhIGNvbW1lbnQgaW4gdGhlIG1lcmdlCisgICBjb21taXQgdGVtcGxhdGUuCisKKyAqICJnaXQgcmViYXNlIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkga2VlcCBjb21taXRzIHRoYXQgZG8gbm90CisgICBpbnRyb2R1Y2UgYW55IGNoYW5nZSBpbiB0aGUgb3JpZ2luYWwgaGlzdG9yeS4KKworICogImdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzIiBsZWFybmVkIHRvIG9wdGlvbmFsbHkgbG9vayBpbnRvIHRoZQorICAgaGlzdG9yaWVzIG9mIHN1Ym1vZHVsZXMgYm91bmQgdG8gdGhlIHN1cGVycHJvamVjdCBhbmQgcHVzaCB0aGVtCisgICBvdXQuCisKKyAqIEEgJ3NuYXBzaG90JyByZXF1ZXN0IHRvICJnaXR3ZWIiIGhvbm9ycyBJZi1Nb2RpZmllZC1TaW5jZTogaGVhZGVyLAorICAgYmFzZWQgb24gdGhlIGNvbW1pdCBkYXRlLgorCisgKiAiZ2l0d2ViIiBsZWFybmVkIHRvIGhpZ2hsaWdodCB0aGUgcGF0Y2ggaXQgb3V0cHV0cyBldmVuIG1vcmUuCisKK0ZvcmVpZ24gSW50ZXJmYWNlCisKKyAqICJnaXQgc3ZuIiB1c2VkIHRvIGRpZSB3aXRoIHVud2FudGVkIFNJR1BJUEUgd2hlbiB0YWxraW5nIHdpdGggYW4gSFRUUAorICAgc2VydmVyIHRoYXQgdXNlcyBrZWVwLWFsaXZlLgorCisgKiAiZ2l0IHN2biIgbGVhcm5lZCB0byB1c2UgcGxhdGZvcm0gc3BlY2lmaWMgYXV0aGVudGljYXRpb24KKyAgIHByb3ZpZGVycywgZS5nLiBnbm9tZS1rZXlyaW5nLCBrd2FsbGV0LCBldGMuCisKKyAqICJnaXQgcDQiIGhhcyBiZWVuIG1vdmVkIG91dCBvZiB0aGUgY29udHJpYi8gYXJlYSBhbmQgaGFzIHNlZW4gbW9yZQorICAgd29yayBvbiBpbXBvcnRpbmcgbGFiZWxzIGFzIHRhZ3MgZnJvbSAoYW5kIGV4cG9ydGluZyB0YWdzIGFzIGxhYmVscworICAgdG8pIHA0LgorCitQZXJmb3JtYW5jZSBhbmQgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24gKHBsZWFzZSByZXBvcnQgcG9zc2libGUgcmVncmVzc2lvbnMpCisKKyAqIEJhc2ggY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBoYXZlIGJlZW4gY2xlYW5lZCB1cCB0byBtYWtlCisgICBmdXR1cmUgd29yayBvbiBpdCBzaW1wbGVyLgorCisgKiBBbiBleHBlcmltZW50YWwgInZlcnNpb24gNCIgZm9ybWF0IG9mIHRoZSBpbmRleCBmaWxlIGhhcyBiZWVuCisgICBpbnRyb2R1Y2VkIHRvIHJlZHVjZSBvbi1kaXNrIGZvb3RwcmludCBhbmQgSS9PIG92ZXJoZWFkLgorCisgKiAiZ2l0IGFyY2hpdmUiIGxlYXJuZWQgdG8gcHJvZHVjZSBpdHMgb3V0cHV0IHdpdGhvdXQgcmVhZGluZyB0aGUKKyAgIGJsb2Igb2JqZWN0IGl0IHdyaXRlcyBvdXQgaW4gbWVtb3J5IGluIGl0cyBlbnRpcmV0eS4KKworICogImdpdCBpbmRleC1wYWNrIiB0aGF0IHJ1bnMgd2hlbiBmZXRjaGluZyBvciBwdXNoaW5nIG9iamVjdHMgdG8KKyAgIGNvbXBsZXRlIHRoZSBwYWNrZmlsZSBvbiB0aGUgcmVjZWl2aW5nIGVuZCBsZWFybmVkIHRvIHVzZSBtdWx0aXBsZQorICAgdGhyZWFkcyB0byBkbyBpdHMgam9iIHdoZW4gYXZhaWxhYmxlLgorCisgKiBUaGUgY29kZSB0byBjb21wdXRlIGhhc2ggdmFsdWVzIGZvciBsaW5lcyB1c2VkIGJ5IHRoZSBpbnRlcm5hbCBkaWZmCisgICBlbmdpbmUgd2FzIG9wdGltaXplZCBvbiBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzLCB1c2luZyB0aGUgc2FtZQorICAgdHJpY2sgdGhlIGtlcm5lbCBmb2xrcyBjYW1lIHVwIHdpdGguCisKKyAqICJnaXQgYXBwbHkiIGhhZCBzb21lIG1lbW9yeSBsZWFrcyBwbHVnZ2VkLgorCisgKiBTZXR0aW5nIHVwIGEgcmV2aXNpb24gdHJhdmVyc2FsIHdpdGggbWFueSBzdGFydGluZyBwb2ludHMgd2FzCisgICBpbmVmZmljaWVudCBhcyB0aGVzZSB3ZXJlIHBsYWNlZCBpbiBhIGRhdGUtb3JkZXIgcHJpb3JpdHkgcXVldWUKKyAgIG9uZS1ieS1vbmUuICBOb3cgdGhleSBhcmUgY29sbGVjdGVkIGluIHRoZSBxdWV1ZSB1bm9yZGVyZWQgZmlyc3QsCisgICBhbmQgc29ydGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBnZXR0aW5nIHVzZWQuCisKKyAqIE1vcmUgbG93ZXItbGV2ZWwgY29tbWFuZHMgbGVhcm5lZCB0byB1c2UgdGhlIHN0cmVhbWluZyBBUEkgdG8gcmVhZAorICAgZnJvbSB0aGUgb2JqZWN0IHN0b3JlIHdpdGhvdXQga2VlcGluZyBldmVyeXRoaW5nIGluIGNvcmUuCisKKyAqIFRoZSB3ZWlnaHRpbmcgcGFyYW1ldGVycyB0byBzdWdnZXN0aW9uIGNvbW1hbmQgbmFtZSB0eXBvIGhhdmUgYmVlbgorICAgdHdlYWtlZCwgc28gdGhhdCAiZ2l0IHRhZ3MiIHdpbGwgc3VnZ2VzdCAidGFnPyIgYW5kIG5vdCAic3RhZ2U/Ii4KKworICogQmVjYXVzZSAic2giIG9uIHRoZSB1c2VyJ3MgUEFUSCBtYXkgYmUgdXR0ZXJseSBicm9rZW4gb24gc29tZQorICAgc3lzdGVtcywgcnVuLWNvbW1hbmQgQVBJIG5vdyB1c2VzIFNIRUxMX1BBVEgsIG5vdCAvYmluL3NoLCB3aGVuCisgICBzcGF3bmluZyBhbiBleHRlcm5hbCBjb21tYW5kIChub3QgYXBwbGljYWJsZSB0byBXaW5kb3dzIHBvcnQpLgorCisgKiBUaGUgQVBJIHRvIGl0ZXJhdGUgb3ZlciB0aGUgcmVmcy8gaGllcmFyY2h5IGhhcyBiZWVuIHR3ZWFrZWQgdG8KKyAgIGFsbG93IHdhbGtpbmcgb25seSBhIHN1YnNldCBvZiBpdCBtb3JlIGVmZmljaWVudGx5LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy4xMAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjcuMTAgaW4gdGhlIG1haW50ZW5hbmNlCityZWxlYXNlcyBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBpbml0IiB1c2VkIHRvIHJlcG9ydCAicmVnaXN0ZXJlZCBmb3IgcGF0aCAuLi4iCisgICBldmVuIGZvciBzdWJtb2R1bGVzIHRoYXQgd2VyZSByZWdpc3RlcmVkIGVhcmxpZXIuCisgICAoY2hlcnJ5LXBpY2sgYzFjMjU5ZSBqbC9zdWJtb2R1bGUtcmVwb3J0LW5ldy1wYXRoLW9uY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1zdGF0IiB1c2VkIHRvIGZ1bGx5IGNvdW50IGEgYmluYXJ5IGZpbGUgd2l0aCBtb2RpZmllZAorICAgZXhlY3V0aW9uIGJpdHMgd2hvc2UgY29udGVudHMgaXMgdW5tb2RpZmllZCwgd2hpY2ggd2FzIG5vdCBxdWl0ZQorICAgcmlnaHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZjA0YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4xLnR4dApAQCAtMCwwICsxLDEzNCBAQAorR2l0IDEuNy4xMi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcHBseSAtcDAiIGRpZCBub3QgcGFyc2UgcGF0aG5hbWVzIG9uICJkaWZmIC0tZ2l0IiBsaW5lCisgICBjb3JyZWN0bHkuICBUaGlzIGNhdXNlZCBwYXRjaGVzIHRoYXQgaGFkIHBhdGhuYW1lcyBpbiBubyBvdGhlcgorICAgcGxhY2VzIHRvIGJlIG1pc3Rha2VubHkgcmVqZWN0ZWQgKG1vc3Qgbm90YWJseSwgYmluYXJ5IHBhdGNoIHRoYXQKKyAgIGRvZXMgbm90IHJlbmFtZSBub3IgY2hhbmdlIG1vZGUpLiAgVGV4dHVhbCBwYXRjaGVzLCByZW5hbWVzIG9yIG1vZGUKKyAgIGNoYW5nZXMgaGF2ZSBwcmVpbWFnZSBhbmQgcG9zdGltYWdlIHBhdGhuYW1lcyBpbiBkaWZmZXJlbnQgcGxhY2VzCisgICBpbiBhIGZvcm0gdGhhdCBjYW4gYmUgcGFyc2VkIHVuYW1iaWd1b3VzbHkgYW5kIGRpZCBub3Qgc3VmZmVyIGZyb20KKyAgIHRoaXMgcHJvYmxlbS4KKworICogImdpdCBjaGVycnktcGljayBBIEMgQiIgdXNlZCB0byByZXBsYXkgY2hhbmdlcyBpbiBBIGFuZCB0aGVuIEIgYW5kCisgICB0aGVuIEMgaWYgdGhlc2UgdGhyZWUgY29tbWl0cyBoYWQgY29tbWl0dGVyIHRpbWVzdGFtcHMgaW4gdGhhdAorICAgb3JkZXIsIHdoaWNoIGlzIG5vdCB3aGF0IHRoZSB1c2VyIHdobyBzYWlkICJBIEMgQiIgbmF0dXJhbGx5CisgICBleHBlY3RzLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIiBsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbG9nIG1lc3NhZ2UgYW5kIHRoZW4KKyAgIGRpZWQgd2hlbiB0aGUgaHVtYW4tcmVhZGFibGUgY29tbWl0dGVyIG5hbWUgd2FzIGdpdmVuCisgICBpbnN1ZmZpY2llbnRseSBieSBnZXRwd2VudCgzKS4KKworICogU29tZSBjYXBhYmlsaXRpZXMgd2VyZSBhc2tlZCBieSBmZXRjaC1wYWNrIGV2ZW4gd2hlbiB1cGxvYWQtcGFjaworICAgZGlkIG5vdCBhZHZlcnRpc2UgdGhhdCB0aGV5IGFyZSBhdmFpbGFibGUuICBmZXRjaC1wYWNrIGhhcyBiZWVuCisgICBmaXhlZCBub3QgdG8gZG8gc28uCisKKyAqICJnaXQgZGlmZiIgaGFkIGEgY29uZnVzaW9uIGJldHdlZW4gdGFraW5nIGRhdGEgZnJvbSBhIHBhdGggaW4gdGhlCisgICB3b3JraW5nIHRyZWUgYW5kIHRha2luZyBkYXRhIGZyb20gYW4gb2JqZWN0IHRoYXQgaGFwcGVucyB0byBoYXZlCisgICBuYW1lIDB7NDB9IHJlY29yZGVkIGluIGEgdHJlZS4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGRpZCBub3QgY29ycmVjdGx5IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSAtLXNvcnQKKyAgIG9wdGlvbi4KKworICogImdpdCBsb2cgLi4iIGVycm9yZWQgb3V0IHNheWluZyBpdCBpcyBib3RoIHJldiByYW5nZSBhbmQgYSBwYXRoCisgICB3aGVuIHRoZXJlIGlzIG5vIGRpc2FtYmlndWF0aW5nICItLSIgaXMgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAgIFVwZGF0ZSB0aGUgY29tbWFuZCBsaW5lIHBhcnNlciB0byBpbnRlcnByZXQgIi4uIiBhcyBhIHBhdGggaW4gc3VjaAorICAgYSBjYXNlLgorCisgKiBUaGUgIi0tdG9wby1vcmRlciIsICItLWRhdGUtb3JkZXIiIChhbmQgdGhlIGxhY2sgb2YgZWl0aGVyIG1lYW5zCisgICB0aGUgZGVmYXVsdCBvcmRlcikgb3B0aW9ucyB0byAicmV2LWxpc3QiIGFuZCAibG9nIiBmYW1pbHkgb2YKKyAgIGNvbW1hbmRzIHdlcmUgcG9vcmx5IGRlc2NyaWJlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBwcnVuZSIgd2l0aG91dCAiLXYiIHVzZWQgdG8gd2FybiBhYm91dCBsZWZ0b3ZlciB0ZW1wb3JhcnkKKyAgIGZpbGVzICh3aGljaCBpcyBhbiBpbmRpY2F0aW9uIG9mIGFuIGVhcmxpZXIgYWJvcnRlZCBvcGVyYXRpb24pLgorCisgKiBQdXNoaW5nIHRvIHNtYXJ0IEhUVFAgc2VydmVyIHdpdGggcmVjZW50IEdpdCBmYWlscyB3aXRob3V0IGhhdmluZworICAgdGhlIHVzZXJuYW1lIGluIHRoZSBVUkwgdG8gZm9yY2UgYXV0aGVudGljYXRpb24sIGlmIHRoZSBzZXJ2ZXIgaXMKKyAgIGNvbmZpZ3VyZWQgdG8gYWxsb3cgR0VUIGFub255bW91c2x5LCB3aGlsZSByZXF1aXJpbmcgYXV0aGVudGljYXRpb24KKyAgIGZvciBQT1NULgorCisgKiBUaGUgcmVmbG9nIGVudHJpZXMgbGVmdCBieSAiZ2l0IHJlYmFzZSIgYW5kICJnaXQgcmViYXNlIC1pIiB3ZXJlCisgICBpbmNvbnNpc3RlbnQgKHRoZSBpbnRlcmFjdGl2ZSBvbmUgZ2F2ZSBhbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSkuCisKKyAqIFdoZW4gImdpdCBwdXNoIiB0cmlnZ2VyZWQgdGhlIGF1dG9tYXRpYyBnYyBvbiB0aGUgcmVjZWl2aW5nIGVuZCwgYQorICAgbWVzc2FnZSBmcm9tICJnaXQgcHJ1bmUiIHRoYXQgc2FpZCBpdCB3YXMgcmVtb3ZpbmcgY3J1ZnQgbGVha2VkIHRvCisgICB0aGUgc3RhbmRhcmQgb3V0cHV0LCBicmVha2luZyB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbC4KKworICogImdpdCBzaG93IC0tcXVpZXQiIG91Z2h0IHRvIGJlIGEgc3lub255bSBmb3IgImdpdCBzaG93IC1zIiwgYnV0CisgICB3YXNuJ3QuCisKKyAqICJnaXQgc2hvdyAtLWZvcm1hdD0nJWNpJyIgZGlkIG5vdCBnaXZlIHRpbWVzdGFtcCBjb3JyZWN0bHkgZm9yCisgICBjb21taXRzIGNyZWF0ZWQgd2l0aG91dCBodW1hbiByZWFkYWJsZSBuYW1lIG9uICJjb21taXR0ZXIiIGxpbmUuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCB1bnF1b3RlIGVuY29kZWQgd29yZHMgdGhhdCBhcHBlYXIgb24gdGhlCisgICBoZWFkZXIgY29ycmVjdGx5LCBhbmQgbG9zdCAiXyIgZnJvbSBzdHJpbmdzLgorCisgKiBUaGUgaW50ZXJhY3RpdmUgcHJvbXB0ICJnaXQgc2VuZC1lbWFpbCIgZ2l2ZXMgd2FzIGVycm9yIHByb25lLiBJdAorICAgYXNrZWQgIldoYXQgZS1tYWlsIGFkZHJlc3MgZG8geW91IHdhbnQgdG8gdXNlPyIgd2l0aCB0aGUgYWRkcmVzcyBpdAorICAgZ3Vlc3NlZCAoY29ycmVjdGx5KSB0aGUgdXNlciB3b3VsZCB3YW50IHRvIHVzZSBpbiBpdHMgcHJvbXB0LAorICAgdGVtcHRpbmcgdGhlIHVzZXIgdG8gc2F5ICJ5Ii4gQnV0IHRoZSByZXNwb25zZSB3YXMgdGFrZW4gYXMgIk5vLAorICAgcGxlYXNlIHVzZSAneScgYXMgdGhlIGUtbWFpbCBhZGRyZXNzIGluc3RlYWQiLCB3aGljaCBpcyBtb3N0CisgICBjZXJ0YWlubHkgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQuCisKKyAqICJnaXR3ZWIiIHdoZW4gdXNlZCB3aXRoIFBBVEhfSU5GTyBmYWlsZWQgdG8gbm90aWNlIGRpcmVjdG9yaWVzIHdpdGgKKyAgIFNQIChhbmQgb3RoZXIgY2hhcmFjdGVycyB0aGF0IG5lZWQgVVJMLXN0eWxlIHF1b3RpbmcpIGluIHRoZW0uCisKKyAqIFdoZW4gdGhlIHVzZXIgZ2l2ZXMgYW4gYXJndW1lbnQgdGhhdCBjYW4gYmUgdGFrZW4gYXMgYm90aCBhCisgICByZXZpc2lvbiBuYW1lIGFuZCBhIHBhdGhuYW1lIHdpdGhvdXQgZGlzYW1iaWd1YXRpbmcgd2l0aCAiLS0iLCB3ZQorICAgdXNlZCB0byBnaXZlIGEgaGVscCBtZXNzYWdlICJVc2UgJy0tJyB0byBzZXBhcmF0ZSIuICBUaGUgbWVzc2FnZQorICAgaGFzIGJlZW4gY2xhcmlmaWVkIHRvIHNob3cgd2hlcmUgdGhhdCAnLS0nIGdvZXMgb24gdGhlIGNvbW1hbmQKKyAgIGxpbmUuCisKKyAqIFdoZW4gdGhlIHVzZXIgZXhwb3J0cyBhIG5vbi1kZWZhdWx0IElGUyB3aXRob3V0IEhULCBzY3JpcHRzIHRoYXQKKyAgIHJlbHkgb24gYmVpbmcgYWJsZSB0byBwYXJzZSAibHMtZmlsZXMgLXMgfCB3aGlsZSByZWFkIGEgYiBjLi4uIgorICAgc3RhcnRlZCB0byBmYWlsLiAgUHJvdGVjdCB0aGVtIGZyb20gc3VjaCBhIG1pc2NvbmZpZ3VyYXRpb24uCisKKyAqIFRoZSBhdHRyaWJ1dGUgc3lzdGVtIG1heSBiZSBhc2tlZCBmb3IgYSBwYXRoIHRoYXQgaXRzZWxmIG9yIGl0cworICAgbGVhZGluZyBkaXJlY3RvcmllcyBubyBsb25nZXIgZXhpc3RzIGluIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBpdCBpcworICAgZmluZSBpZiB3ZSBjYW5ub3Qgb3BlbiAuZ2l0YXR0cmlidXRlIGZpbGUgaW4gc3VjaCBhIGNhc2UuICBGYWlsdXJlCisgICB0byBvcGVuIHBlci1kaXJlY3RvcnkgLmdpdGF0dHJpYnV0ZXMgd2l0aCBlcnJvciBzdGF0dXMgb3RoZXIgdGhhbgorICAgRU5PRU5UIGFuZCBFTk9URElSIHNob3VsZCBiZSBkaWFnbm9zZWQsIGJ1dCBpdCB3YXNuJ3QuCisKKyAqIEFmdGVyICJnaXRrIiBzaG93ZWQgdGhlIGNvbnRlbnRzIG9mIGEgdGFnLCBuZWl0aGVyICJSZXJlYWQKKyAgIHJlZmVyZW5jZXMiIG5vciAiUmVsb2FkIiBkaWQgbm90IHVwZGF0ZSB3aGF0IGlzIHNob3duIGFzIHRoZQorICAgY29udGVudHMgb2YgaXQsIHdoZW4gdGhlIHVzZXIgb3Zlcndyb3RlIHRoZSB0YWcgd2l0aCAiZ2l0IHRhZyAtZiIuCisKKyAqICJjaWFib3QiIHNjcmlwdCAoaW4gY29udHJpYi8pIGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCBleHRlbnNpdmUKKyAgIGRvY3VtZW50YXRpb24uCisKKyAqICJnaXQtanVtcCIgc2NyaXB0IChpbiBjb250cmliLykgZGlkIG5vdCB3b3JrIHdlbGwgd2hlbgorICAgZGlmZi5ub3ByZWZpeCBvciBkaWZmLm1uZW1vbmljcHJlZml4IGlzIGluIGVmZmVjdC4KKworICogT2xkZXIgcGFydHMgb2YgdGhlIGRvY3VtZW50YXRpb24gZGVzY3JpYmVkIGFzIGlmIGhhdmluZyBhIHJlZ3VsYXIKKyAgIGZpbGUgaW4gLmdpdC9yZWZzLyBoaWVyYXJjaHkgd2VyZSB0aGUgb25seSB3YXkgdG8gaGF2ZSBicmFuY2hlcyBhbmQKKyAgIHRhZ3MsIHdoaWNoIGlzIG5vdCB0cnVlIGZvciBxdWl0ZSBzb21lIHRpbWUuCisKKyAqIEEgdXRpbGl0eSBzaGVsbCBmdW5jdGlvbiB0ZXN0X3NlcSBoYXMgYmVlbiBhZGRlZCBhcyBhIHJlcGxhY2VtZW50CisgICBmb3IgdGhlICdzZXEnIHV0aWxpdHkgZm91bmQgb24gc29tZSBwbGF0Zm9ybXMuCisKKyAqIENvbXBhdGliaWxpdHkgd3JhcHBlciB0byBsZWFybiB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmlsZQorICAgZGVzY3JpcHRvcnMgd2UgY2FuIG9wZW4gYXJvdW5kIHN5c2NvbmYoX1NDX09QRU5fTUFYKSBhbmQKKyAgIGdldHJsaW1pdChSTElNSVRfTk9fRklMRSkgaGFzIGJlZW4gaW50cm9kdWNlZCBmb3IgcG9ydGFiaWxpdHkuCisKKyAqIFdlIHVzZWQgY3VybF9lYXN5X3N0cmVycm9yKCkgd2l0aG91dCBjaGVja2luZyB2ZXJzaW9uIG9mIGNVUkwsCisgICBicmVha2luZyB0aGUgYnVpbGQgZm9yIHZlcnNpb25zIGJlZm9yZSBjdXJsIDcuMTIuMC4KKworICogQ29kZSB0byB3b3JrIGFyb3VuZCBNYWNPUyBYIFVURi04IGdvdGNoYSBoYXMgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBGYWxsYmFjayAnZ2V0cGFzcycgaW1wbGVtZW50YXRpb24gbWFkZSB1bnBvcnRhYmxlIHVzZSBvZiBzdGRpbyBBUEkuCisKKyAqIFRoZSAiLS1yZWJhc2UiIG9wdGlvbiB0byAiZ2l0IHB1bGwiIGNhbiBiZSBhYmJyZXZpYXRlZCB0byAiLXIiLAorICAgYnV0IHdlIGRpZG4ndCBkb2N1bWVudCBpdC4KKworICogSXQgd2FzIGdlbmVyYWxseSB1bmRlcnN0b29kIHRoYXQgIi0tbG9uZy1vcHRpb24icyB0byBtYW55IG9mIG91cgorICAgc3ViY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIHRoZSB1bmlxdWUgcHJlZml4LCBidXQgaXQgd2FzIG5vdAorICAgZWFzeSB0byBmaW5kIGl0IGRlc2NyaWJlZCBmb3IgbmV3IHJlYWRlcnMgb2YgdGhlIGRvY3VtZW50YXRpb24gc2V0LgorCisgKiBUaGUgc3lub3BzaXMgc2FpZCAiY2hlY2tvdXQgWy1CIGJyYW5jaF0iIHRvIG1ha2UgaXQgY2xlYXIgdGhlCisgICBicmFuY2ggbmFtZSBpcyBhIHBhcmFtZXRlciB0byB0aGUgb3B0aW9uLCBidXQgdGhlIGhlYWRpbmcgZm9yIHRoZQorICAgb3B0aW9uIGRlc2NyaXB0aW9uIHdhcyAiLUI6OiIsIG5vdCAiLUIgYnJhbmNoOjoiLCBtYWtpbmcgdGhlCisgICBkb2N1bWVudGF0aW9uIG1pc2xlYWRpbmcuCisKK0Fsc28gY29udGFpbnMgbnVtZXJvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTI1NTc0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMi50eHQKQEAgLTAsMCArMSw0MCBAQAorR2l0IDEuNy4xMi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTIuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdoZW4gImdpdCBhbSIgaXMgZmVkIGFuIGlucHV0IHRoYXQgaGFzIG11bHRpcGxlICJDb250ZW50LXR5cGU6IC4uLiIKKyAgIGhlYWRlciwgaXQgZGlkIG5vdCBncm9rIGNoYXJzZXQ9IGF0dHJpYnV0ZSBjb3JyZWN0bHkuCisKKyAqIEV2ZW4gZHVyaW5nIGEgY29uZmxpY3RlZCBtZXJnZSwgImdpdCBibGFtZSAkcGF0aCIgYWx3YXlzIG1lYW50IHRvCisgICBibGFtZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIHRoZSAid29ya2luZyB0cmVlIiB2ZXJzaW9uOyBtYWtlIGl0CisgICBtb3JlIHVzZWZ1bCBieSBzaG93aW5nIGNsZWFubHkgbWVyZ2VkIHBhcnRzIGFzIGNvbWluZyBmcm9tIHRoZSBvdGhlcgorICAgYnJhbmNoIHRoYXQgaXMgYmVpbmcgbWVyZ2VkLgorCisgKiAiZ2l0IGJsYW1lIE1BS0VGSUxFIiBydW4gaW4gYSBoaXN0b3J5IHRoYXQgaGFzICJNYWtlZmlsZSIgYnV0IG5vdAorICAgIk1BS0VGSUxFIiBzaG91bGQgc2F5ICJObyBzdWNoIGZpbGUgTUFLRUZJTEUgaW4gSEVBRCIsIGJ1dCBnb3QKKyAgIGNvbmZ1c2VkIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIGFuZCBmYWlsZWQgdG8gZG8gc28uCisKKyAqICJnaXQgZmV0Y2ggLS1hbGwiLCB3aGVuIHBhc3NlZCAiLS1uby10YWdzIiwgZGlkIG5vdCBob25vciB0aGUKKyAgICItLW5vLXRhZ3MiIG9wdGlvbiB3aGlsZSBmZXRjaGluZyBmcm9tIGluZGl2aWR1YWwgcmVtb3RlcyAodGhlIHNhbWUKKyAgIGlzc3VlIGV4aXN0ZWQgd2l0aCAiLS10YWdzIiwgYnV0IGNvbWJpbmF0aW9uICItLWFsbCAtLXRhZ3MiIG1ha2VzCisgICBtdWNoIGxlc3Mgc2Vuc2UgdGhhbiAiLS1hbGwgLS1uby10YWdzIikuCisKKyAqICJnaXQgbG9nL2RpZmYvZm9ybWF0LXBhdGNoIC0tc3RhdCIgc2hvd2VkIHRoZSAiTiBsaW5lKHMpIGFkZGVkIgorICAgY29tbWVudCBpbiB1c2VyJ3MgbG9jYWxlIGFuZCBjYXVzZWQgY2FyZWxlc3Mgc3VibWl0dGVycyB0byBzZW5kCisgICBwYXRjaGVzIHdpdGggc3VjaCBhIGxpbmUgaW4gdGhlbSB0byBwcm9qZWN0cyB3aG9zZSBwcm9qZWN0IGxhbmd1YWdlCisgICBpcyBub3QgdGhlaXIgbGFuZ3VhZ2UsIG1pbGRseSBpcnJpdGF0aW5nIG90aGVycy4gTG9jYWxpemF0aW9uIHRvCisgICB0aGUgbGluZSBoYXMgYmVlbiBkaXNhYmxlZCBmb3Igbm93LgorCisgKiAiZ2l0IGxvZyAtLWFsbC1tYXRjaCAtLWdyZXA9QSAtLWdyZXA9QiIgb3VnaHQgdG8gc2hvdyBjb21taXRzIHRoYXQKKyAgIG1lbnRpb24gYm90aCBBIGFuZCBCLCBidXQgd2hlbiB0aGVzZSB0aHJlZSBvcHRpb25zIGFyZSB1c2VkIHdpdGgKKyAgIC0tYXV0aG9yIG9yIC0tY29tbWl0dGVyLCBpdCBzaG93ZWQgY29tbWl0cyB0aGF0IG1lbnRpb24gZWl0aGVyIEEgb3IKKyAgIEIgKG9yIGJvdGgpIGluc3RlYWQuCisKKyAqIFRoZSBzdWJjb21tYW5kIHRvIHJlbW92ZSB0aGUgZGVmaW5pdGlvbiBvZiBhIHJlbW90ZSBpbiAiZ2l0IHJlbW90ZSIKKyAgIHdhcyBuYW1lZCAicm0iIGV2ZW4gdGhvdWdoIGFsbCBvdGhlciBzdWJjb21tYW5kcyB3ZXJlIHNwZWxsZWQgb3V0LgorICAgSW50cm9kdWNlICJnaXQgcmVtb3RlIHJlbW92ZSIgdG8gcmVtb3ZlIGNvbmZ1c2lvbiwgYW5kIGtlZXAgInJtIiBhcworICAgYSBiYWNrd2FyZCBjb21wYXRpYmxlIHN5bm9ueW0uCisKK0Fsc28gY29udGFpbnMgYSBoYW5kZnVsIG9mIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkYTQyNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjEyLjMudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0dpdCAxLjcuMTIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjEyLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFtIiBtaXNoYW5kbGVkIGEgcGF0Y2ggYXR0YWNoZWQgYXMgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCisgICAoZS5nLiBub3QgdGV4dC8qKTsgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyAoZS5nLiBiYXNlNjQpIHdhcyBub3QKKyAgIGhvbm9yZWQgY29ycmVjdGx5LgorCisgKiBJdCB3YXMgdW5jbGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgImdpdCBibGFtZSIgdGhhdCBpdCBpcworICAgdW5uZWNlc3NhcnkgZm9yIHVzZXJzIHRvIHVzZSB0aGUgIi0tZm9sbG93IiBvcHRpb24uCisKKyAqIEEgcmVwb3NpdG9yeSBjcmVhdGVkIHdpdGggImdpdCBjbG9uZSAtLXNpbmdsZSIgaGFkIGl0cyBmZXRjaAorICAgcmVmc3BlY3Mgc2V0IHVwIGp1c3QgbGlrZSBhIGNsb25lIHdpdGhvdXQgIi0tc2luZ2xlIiwgbGVhZGluZyB0aGUKKyAgIHN1YnNlcXVlbnQgImdpdCBmZXRjaCIgdG8gc2x1cnAgYWxsIHRoZSBvdGhlciBicmFuY2hlcywgZGVmZWF0aW5nCisgICB0aGUgd2hvbGUgcG9pbnQgb2Ygc3BlY2lmeWluZyAib25seSB0aGlzIGJyYW5jaCIuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgaHR0cCBoYWQgYW4gb2xkIHdvcmthcm91bmQgZm9yIGFuIHVubGlrZWx5IHNlcnZlcgorICAgbWlzY29uZmlndXJhdGlvbjsgaXQgdHVybnMgb3V0IHRoYXQgdGhpcyBodXJ0cyBkZWJ1Z2dhYmlsaXR5IG9mIHRoZQorICAgY29uZmlndXJhdGlvbiBpbiBnZW5lcmFsLCBhbmQgaGFzIGJlZW4gcmV2ZXJ0ZWQuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgaHR0cCBhZHZlcnRpc2VkIHRoYXQgaXQgc3VwcG9ydHMgImRlZmxhdGUiLCB3aGljaAorICAgaXMgbXVjaCBsZXNzIGNvbW1vbiwgYW5kIGRpZCBub3QgYWR2ZXJ0aXNlIHRoZSBtb3JlIGNvbW1vbiAiZ3ppcCIgb24KKyAgIGl0cyBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyLgorCisgKiAiZ2l0IHJlY2VpdmUtcGFjayIgKHRoZSBjb3VudGVycGFydCB0byAiZ2l0IHB1c2giKSBkaWQgbm90IGdpdmUKKyAgIHByb2dyZXNzIG91dHB1dCB3aGlsZSBwcm9jZXNzaW5nIG9iamVjdHMgaXQgcmVjZWl2ZWQgdG8gdGhlIHB1c2VyCisgICB3aGVuIHJ1biBvdmVyIHRoZSBzbWFydC1odHRwIHByb3RvY29sLgorCisgKiAiZ2l0IHN0YXR1cyIgaG9ub3JlZCB0aGUgaWdub3JlPWRpcnR5IHNldHRpbmdzIGluIC5naXRtb2R1bGVzIGJ1dAorICAgImdpdCBjb21taXQiIGRpZG4ndC4KKworQWxzbyBjb250YWlucyBhIGhhbmRmdWwgb2YgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmRhM2NjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIuNC50eHQKQEAgLTAsMCArMSwyMyBAQAorR2l0IDEuNy4xMi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuMTIuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgdGhlIGR1bWItaHR0cCByZXZpc2lvbiB3YWxrZXIgY291bGQgc2VnZmF1bHQgd2hlbgorICAgY3VybCdzIG11bHRpIGludGVyZmFjZSB3YXMgdXNlZC4KKworICogSXQgd2FzIHBvc3NpYmxlIHRvIGdpdmUgc3BlY2lmaWMgcGF0aHMgZm9yICJhc2NpaWRvYyIgYW5kIG90aGVyCisgICB0b29scyBpbiB0aGUgZG9jdW1lbnRhdGlvbiB0b29sY2hhaW4sIGJ1dCBub3QgZm9yICJ4bWx0byIuCisKKyAqICJnaXR3ZWIiIGRpZCBub3QgZ2l2ZSB0aGUgY29ycmVjdCBjb21taXR0ZXIgdGltZXpvbmUgaW4gaXRzIGZlZWQKKyAgIG91dHB1dCBkdWUgdG8gYSB0eXBvLgorCisgKiBUaGUgIi1Yb3VycyIgKGFuZCBzaW1pbGFybHkgLVh0aGVpcnMpIGJhY2tlbmQgb3B0aW9uIHRvICJnaXQKKyAgIG1lcmdlIC1zIHJlY3Vyc2l2ZSIgd2FzIGlnbm9yZWQgZm9yIGJpbmFyeSBmaWxlcy4gIE5vdyBpdCBpcworICAgaG9ub3JlZC4KKworICogVGhlICJiaW5hcnkiIHN5bnRoZXRpYyBhdHRyaWJ1dGUgbWFkZSAiZGlmZiIgdG8gdHJlYXQgdGhlIHBhdGggYXMKKyAgIGJpbmFyeSwgYnV0IG5vdCAibWVyZ2UiLgorCitBbHNvIGNvbnRhaW5zIG1hbnkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMTIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMGQ4YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4xMi50eHQKQEAgLTAsMCArMSwxMzYgQEAKK0dpdCB2MS43LjEyIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjExCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEdpdCBjYW4gYmUgdG9sZCB0byBub3JtYWxpemUgcGF0aG5hbWVzIGl0IHJlYWQgZnJvbSByZWFkZGlyKDMpIGFuZAorICAgYWxsIGFyZ3VtZW50cyBpdCBnb3QgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGludG8gcHJlY29tcG9zZWQgVVRGLTgKKyAgIChhc3N1bWluZyB0aGF0IHRoZXkgY29tZSBhcyBkZWNvbXBvc2VkIFVURi04KSwgaW4gb3JkZXIgdG8gd29yaworICAgYXJvdW5kIGlzc3VlcyBvbiBNYWMgT1MuCisKKyAgIEkgdGhpbmsgdGhlcmUgc3RpbGwgYXJlIG90aGVyIHBsYWNlcyB0aGF0IG5lZWQgY29udmVyc2lvbgorICAgKGUuZy4gcGF0aHMgdGhhdCBhcmUgcmVhZCBmcm9tIHN0ZGluIGZvciBzb21lIGNvbW1hbmRzKSwgYnV0IHRoaXMKKyAgIHNob3VsZCBiZSBhIGdvb2QgZmlyc3Qgc3RlcCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgorCisgKiBQZXItdXNlciAkSE9NRS8uZ2l0Y29uZmlnIGZpbGUgY2FuIG9wdGlvbmFsbHkgYmUgc3RvcmVkIGluCisgICAkSE9NRS8uY29uZmlnL2dpdC9jb25maWcgaW5zdGVhZCwgd2hpY2ggaXMgaW4gbGluZSB3aXRoIFhERy4KKworICogVGhlIHZhbHVlIG9mIGNvcmUuYXR0cmlidXRlc2ZpbGUgYW5kIGNvcmUuZXhjbHVkZXNmaWxlIGRlZmF1bHQgdG8KKyAgICRIT01FLy5jb25maWcvZ2l0L2F0dHJpYnV0ZXMgYW5kICRIT01FLy5jb25maWcvZ2l0L2lnbm9yZSByZXNwZWN0aXZlbHkKKyAgIHdoZW4gdGhlc2UgZmlsZXMgZXhpc3QuCisKKyAqIExvZ2ljIHRvIGRpc2FtYmlndWF0ZSBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZXMgaGF2ZSBiZWVuIHRhdWdodCB0bworICAgdGFrZSBhZHZhbnRhZ2Ugb2Ygb2JqZWN0IHR5cGVzIHRoYXQgYXJlIGV4cGVjdGVkIGluIHRoZSBjb250ZXh0LAorICAgZS5nLiBYWFhYWFggaW4gdGhlICJnaXQgZGVzY3JpYmUiIG91dHB1dCB2MS4yLjMtZ1hYWFhYWCBtdXN0IGJlIGEKKyAgIGNvbW1pdCBvYmplY3QsIG5vdCBhIGJsb2Igbm9yIGEgdHJlZS4gIFRoaXMgd2lsbCBoZWxwIHVzIHByb2xvbmcKKyAgIHRoZSBsaWZldGltZSBvZiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZXMuCisKKyAqICJnaXQgYXBwbHkiIGxlYXJuZWQgdG8gd2lnZ2xlIHRoZSBiYXNlIHZlcnNpb24gYW5kIHBlcmZvcm0gdGhyZWUtd2F5CisgICBtZXJnZSB3aGVuIGEgcGF0Y2ggZG9lcyBub3QgZXhhY3RseSBhcHBseSB0byB0aGUgdmVyc2lvbiB5b3UgaGF2ZS4KKworICogU2NyaXB0ZWQgUG9yY2VsYWluIHdyaXRlcnMgbm93IGhhdmUgYWNjZXNzIHRvIHRoZSBjcmVkZW50aWFsIEFQSSB2aWEKKyAgIHRoZSAiZ2l0IGNyZWRlbnRpYWwiIHBsdW1iaW5nIGNvbW1hbmQuCisKKyAqICJnaXQgaGVscCIgdXNlZCB0byBhbHdheXMgZGVmYXVsdCB0byAibWFuIiBmb3JtYXQgZXZlbiBvbiBwbGF0Zm9ybXMKKyAgIHdoZXJlICJtYW4iIHZpZXdlciBpcyBub3Qgd2lkZWx5IGF2YWlsYWJsZS4KKworICogImdpdCBjbG9uZSAtLWxvY2FsICRwYXRoIiBzdGFydGVkIGl0cyBsaWZlIGFzIGFuIGV4cGVyaW1lbnQgdG8KKyAgIG9wdGlvbmFsbHkgdXNlIGxpbmsvY29weSB3aGVuIGNsb25pbmcgYSByZXBvc2l0b3J5IG9uIHRoZSBkaXNrLCBidXQKKyAgIHdlIGRpZG4ndCBkZXByZWNhdGUgaXQgYWZ0ZXIgd2UgbWFkZSB0aGUgb3B0aW9uIGEgbm8tb3AgdG8gYWx3YXlzCisgICB1c2UgdGhlIG9wdGltaXphdGlvbi4gIFRoZSBjb21tYW5kIGxlYXJuZWQgIi0tbm8tbG9jYWwiIG9wdGlvbiB0bworICAgdHVybiB0aGlzIG9mZiwgYXMgYSBtb3JlIGV4cGxpY2l0IGFsdGVybmF0aXZlIG92ZXIgdXNlIG9mIGZpbGU6Ly8KKyAgIFVSTC4KKworICogImdpdCBmZXRjaCIgYW5kIGZyaWVuZHMgdXNlZCB0byBzYXkgInJlbW90ZSBzaWRlIGh1bmcgdXAKKyAgIHVuZXhwZWN0ZWRseSIgd2hlbiB0aGV5IGZhaWxlZCB0byBnZXQgcmVzcG9uc2UgdGhleSBleHBlY3QgZnJvbSB0aGUKKyAgIG90aGVyIHNpZGUsIGJ1dCBvbmUgY29tbW9uIHJlYXNvbiB3aHkgdGhleSBkb24ndCBnZXQgZXhwZWN0ZWQKKyAgIHJlc3BvbnNlIGlzIHRoYXQgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGRvZXMgbm90IGV4aXN0IG9yIGNhbm5vdCBiZQorICAgcmVhZC4gVGhlIGVycm9yIG1lc3NhZ2UgaW4gdGhpcyBjYXNlIHdhcyB1cGRhdGVkIHRvIGdpdmUgYmV0dGVyCisgICBoaW50cyB0byB0aGUgdXNlci4KKworICogImdpdCBoZWxwIC13ICRjbWQiIGNhbiBzaG93IEhUTUwgdmVyc2lvbiBvZiBkb2N1bWVudGF0aW9uIGZvcgorICAgImdpdC0kY21kIiBieSBzZXR0aW5nIGhlbHAuaHRtbHBhdGggdG8gc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlCisgICBkZWZhdWx0IGxvY2F0aW9uIHdoZXJlIHRoZSBidWlsZCBwcm9jZWR1cmUgaW5zdGFsbHMgdGhlbSBsb2NhbGx5OworICAgdGhlIHZhcmlhYmxlIGNhbiBldmVuIHBvaW50IGF0IGEgaHR0cDovLyBVUkwuCisKKyAqICJnaXQgcmViYXNlIFstaV0gLS1yb290ICR0aXAiIGNhbiBub3cgYmUgdXNlZCB0byByZXdyaXRlIGFsbCB0aGUKKyAgIGhpc3RvcnkgbGVhZGluZyB0byAiJHRpcCIgZG93biB0byB0aGUgcm9vdCBjb21taXQuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkICIteCA8Y21kPiIgdG8gaW5zZXJ0ICJleGVjIDxjbWQ+IiBhZnRlcgorICAgZWFjaCBjb21taXQgaW4gdGhlIHJlc3VsdGluZyBoaXN0b3J5LgorCisgKiAiZ2l0IHN0YXR1cyIgZ2l2ZXMgZmluZXIgY2xhc3NpZmljYXRpb24gdG8gdmFyaW91cyBzdGF0ZXMgb2YgcGF0aHMKKyAgIGluIGNvbmZsaWN0ZWQgc3RhdGUgYW5kIG9mZmVyIGFkdmljZSBtZXNzYWdlcyBpbiBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgbGVhcm5lZCB0byBkZWFsIHdpdGggbmVzdGVkIHN1Ym1vZHVsZSBzdHJ1Y3R1cmUKKyAgIHdoZXJlIGEgbW9kdWxlIGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBtb2R1bGUgd2hvc2Ugb3JpZ2luIGlzCisgICBzcGVjaWZpZWQgYXMgYSByZWxhdGl2ZSBVUkwgdG8gaXRzIHN1cGVycHJvamVjdCdzIG9yaWdpbi4KKworICogQSByYXRoZXIgaGVhdnktaXNoICJnaXQgY29tcGxldGlvbiIgc2NyaXB0IGhhcyBiZWVuIHNwbGl0IHRvIGNyZWF0ZQorICAgYSBzZXBhcmF0ZSAiZ2l0IHByb21wdGluZyIgc2NyaXB0LCB0byBoZWxwIGxhenktYXV0b2xvYWRpbmcgb2YgdGhlCisgICBjb21wbGV0aW9uIHBhcnQgd2hpbGUgbWFraW5nIHByb21wdGluZyBwYXJ0IGFsd2F5cyBhdmFpbGFibGUuCisKKyAqICJnaXR3ZWIiIHBheXMgYXR0ZW50aW9uIHRvIHZhcmlvdXMgZm9ybXMgb2YgY3JlZGl0cyB0aGF0IGFyZQorICAgc2ltaWxhciB0byAiU2lnbmVkLW9mZi1ieToiIGxpbmVzIGluIHRoZSBjb21taXQgb2JqZWN0cyBhbmQKKyAgIGhpZ2hsaWdodHMgdGhlbSBhY2NvcmRpbmdseS4KKworCitGb3JlaWduIEludGVyZmFjZQorCisgKiAibWVkaWF3aWtpIiByZW1vdGUgaGVscGVyIChpbiBjb250cmliLykgbGVhcm5lZCB0byBoYW5kbGUgZmlsZQorICAgYXR0YWNobWVudHMuCisKKyAqICJnaXQgcDQiIG5vdyB1c2VzICJKb2JzOiIgYW5kICJwNCBtb3ZlIiB3aGVuIGFwcHJvcHJpYXRlLgorCisgKiB2Y3Mtc3ZuIGhhcyBiZWVuIHVwZGF0ZWQgdG8gY2xlYW4tdXAgY29tcGlsYXRpb24sIGxpZnQgMzItYml0CisgICBsaW1pdGF0aW9ucywgZXRjLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLiAocGxlYXNlIHJlcG9ydCBwb3NzaWJsZSByZWdyZXNzaW9ucykKKworICogU29tZSB0ZXN0cyBzaG93ZWQgZmFsc2UgZmFpbHVyZXMgY2F1c2VkIGJ5IGEgYnVnIGluIGVjcnlwdG9mcy4KKworICogV2Ugbm8gbG9uZ2VyIHVzZSBBc2NpaURvYzcgc3ludGF4IGluIG91ciBkb2N1bWVudGF0aW9uIGFuZCBmYXZvciBhCisgICBtb3JlIG1vZGVybiBzdHlsZS4KKworICogImdpdCBhbSAtLXJlYmFzaW5nIiBjb2RlcGF0aCB3YXMgdGF1Z2h0IHRvIGdyYWIgYXV0aG9yc2hpcCwgbG9nCisgICBtZXNzYWdlIGFuZCB0aGUgcGF0Y2ggdGV4dCBkaXJlY3RseSBvdXQgb2YgZXhpc3RpbmcgY29tbWl0cy4gIFRoaXMKKyAgIHdpbGwgaGVscCByZWJhc2luZyBjb21taXRzIHRoYXQgaGF2ZSBjb25mdXNpbmcgImRpZmYiIG91dHB1dCBpbgorICAgdGhlaXIgbG9nIG1lc3NhZ2VzLgorCisgKiAiZ2l0IGluZGV4LXBhY2siIGFuZCAiZ2l0IHBhY2stb2JqZWN0cyIgdXNlIHN0cmVhbWluZyBBUEkgdG8gcmVhZAorICAgZnJvbSB0aGUgb2JqZWN0IHN0b3JlIHRvIGF2b2lkIGhhdmluZyB0byBob2xkIGEgbGFyZ2UgYmxvYiBvYmplY3QKKyAgIGluLWNvcmUgd2hpbGUgdGhleSBhcmUgZG9pbmcgdGhlaXIgdGhpbmcuCisKKyAqIENvZGUgdG8gbWF0Y2ggcGF0aHMgd2l0aCBleGNsdWRlIHBhdHRlcm5zIGxlYXJuZWQgdG8gYXZvaWQgY2FsbGluZworICAgZm5tYXRjaCgpIGJ5IGNvbXBhcmluZyBmaXhlZCBsZWFkaW5nIHN1YnN0cmluZyBsaXRlcmFsbHkgd2hlbgorICAgcG9zc2libGUuCisKKyAqICJnaXQgbG9nIC1uIDEgLS0gcmFyZWx5LXRvdWNoZWQtcGF0aCIgd2FzIHNwZW5kaW5nIHVubmVjZXNzYXJ5CisgICBjeWNsZXMgYWZ0ZXIgc2hvd2luZyB0aGUgZmlyc3QgY2hhbmdlIHRvIGZpbmQgdGhlIG5leHQgb25lLCBvbmx5IHRvCisgICBkaXNjYXJkIGl0LgorCisgKiAiZ2l0IHN2biIgZ290IGEgbGFyZ2UtbG9va2luZyBjb2RlIHJlb3JnYW5pemF0aW9uIGF0IHRoZSBsYXN0CisgICBtaW51dGUgYmVmb3JlIHRoZSBjb2RlIGZyZWV6ZS4KKworCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy4xMQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjcuMTEgaW4gdGhlIG1haW50ZW5hbmNlCityZWxlYXNlcyBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBhZGQiIHdhcyBjb25mdXNlZCB3aGVuIHRoZSBzdXBlcnByb2plY3QgZGlkIG5vdCBoYXZlCisgICBpdHMgcmVwb3NpdG9yeSBpbiBpdHMgdXN1YWwgcGxhY2UgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgR0lUX0RJUgorICAgYW5kIEdJVF9XT1JLX1RSRUUgd2FzIHVzZWQgdG8gYWNjZXNzIGl0LgorCisgKiAiZ2l0IGNvbW1pdCAtLWFtZW5kIiBsZXQgdGhlIHVzZXIgZWRpdCB0aGUgbG9nIG1lc3NhZ2UgYW5kIHRoZW4gZGllZAorICAgd2hlbiB0aGUgaHVtYW4tcmVhZGFibGUgY29tbWl0dGVyIG5hbWUgd2FzIGdpdmVuIGluc3VmZmljaWVudGx5IGJ5CisgICBnZXRwd2VudCgzKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMDNjNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjEudHh0CkBAIC0wLDAgKzEsMjUgQEAKK0dpdCB2MS43LjIuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGluc3Rhd2ViIiB3YXNuJ3QgdXNlZnVsIHdoZW4geW91ciBBcGFjaGUgd2FzIGluc3RhbGxlZCB1bmRlciBhCisgICBuYW1lIG90aGVyIHRoYW4gYXBhY2hlMiAoZS5nLiAiaHR0cGQiKS4KKworICogU2ltaWxhcmx5LCAiZ2l0IHdlYi0tYnJvd3NlIiAoaW52b2tlZCBieSAiZ2l0IGhlbHAgLXciKSBsZWFybmVkIHRoYXQKKyAgIGNocm9tZSBicm93c2VyIGlzIHNvbWV0aW1lcyBjYWxsZWQgZ29vZ2xlLWNocm9tZS4KKworICogQW4gb3ZlcmxvbmcgbGluZSBhZnRlciAiLmdpdGRpcjogIiBpbiBhIGdpdCBmaWxlIGNhdXNlZCBvdXQgb2YgYm91bmRzCisgICBhY2Nlc3MgdG8gYW4gYXJyYXkgb24gdGhlIHN0YWNrLgorCisgKiAiZ2l0IGNvbmZpZyAtLXBhdGggY29uZi52YXIiIHRvIGF0dGVtcHQgdG8gZXhwYW5kIGEgdmFyaWFibGUgY29uZi52YXIKKyAgIHRoYXQgdXNlcyAifi8iIHNob3J0LWhhbmQgc2VnZmF1bHRlZCB3aGVuICRIT01FIGVudmlyb25tZW50IHZhcmlhYmxlCisgICB3YXMgbm90IHNldC4KKworICogRG9jdW1lbnRhdGlvbiBvbiBDeWd3aW4gZmFpbGVkIHRvIGJ1aWxkLgorCisgKiBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgcHVsbCBibGFyZyIgd2hlbiAnYmxhcmcnIGlzIGFuIHVua25vd24KKyAgIHJlbW90ZSBuYW1lIGhhcyBiZWVuIGltcHJvdmVkLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZWI2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjIudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0dpdCB2MS43LjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjIuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogT2JqZWN0IHRyYW5zZmVyIG92ZXIgc21hcnQgaHR0cCB0cmFuc3BvcnQgZGVhZGxvY2tlZCB0aGUgY2xpZW50IHdoZW4KKyAgIHRoZSByZW1vdGUgSFRUUCBzZXJ2ZXIgcmV0dXJuZWQgYSBmYWlsdXJlLCBpbnN0ZWFkIG9mIGVycm9yaW5nIGl0IG91dC4KKworICogZ2l0LWd1aSBob25vcnMgY3VzdG9tIHRleHRjb252IGZpbHRlcnMgd2hlbiBzaG93aW5nIGRpZmYgYW5kIGJsYW1lOworCisgKiBnaXQgZGlmZiAtLXJlbGF0aXZlPXN1YmRpciAod2l0aG91dCB0aGUgbmVjZXNzYXJ5IHRyYWlsaW5nIC8pIGRpZCBub3QKKyAgIHdvcmsgd2VsbDsKKworICogImdpdCBkaWZmLWZpbGVzIC1wIC0tc3VibW9kdWxlIiB3YXMgcmVjZW50bHkgYnJva2VuOworCisgKiAiZ2l0IGNoZWNrb3V0IC1iIG4gJzovdG9rZW4nIiBkaWQgbm90IHdvcms7CisKKyAqICJnaXQgaW5kZXgtcGFjayIgKGhlbmNlICJnaXQgZmV0Y2gvY2xvbmUvcHVsbC9wdXNoIikgZW5hYmxlZCB0aGUgb2JqZWN0CisgICByZXBsYWNlbWVudCBtYWNoaW5lcnkgYnkgbWlzdGFrZSAoaXQgbmV2ZXIgc2hvdWxkIGhhdmUpOworCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMDk2MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4yLjMudHh0CkBAIC0wLDAgKzEsMzkgQEAKK0dpdCB2MS43LjIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjIuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogV2hlbiBwZW9wbGUgdHJ5IGluc2FuZSB0aGluZ3Mgc3VjaCBhcyBkZWx0YS1jb21wcmVzc2luZyA0R2lCIGZpbGVzLCB3ZQorICAgdGhyZXcgYW4gYXNzZXJ0aW9uIGZhaWx1cmUuCisKKyAqICJnaXQgYXJjaGl2ZSIgZ2F2ZSB0aGUgZnVsbCBjb21taXQgSUQgZm9yICIkRm9ybWF0OiVoJCIuCisKKyAqICJnaXQgZmV0Y2ggLS10YWdzIiBkaWQgbm90IGZldGNoIHRhZ3Mgd2hlbiByZW1vdGUuPG5pY2s+LnRhZ29wdCB3YXMgc2V0CisgICB0byAtLW5vLXRhZ3MuICBUaGUgY29tbWFuZCBsaW5lIG9wdGlvbiBub3cgb3ZlcnJpZGVzIHRoZSBjb25maWd1cmF0aW9uCisgICBzZXR0aW5nLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nJShvYmplY3RuYW1lOnNob3J0KSciIGhhcyBiZWVuIGNvbXBsZXRlbHkKKyAgIGJyb2tlbiBmb3IgYSBsb25nIHRpbWUuCisKKyAqICJnaXQgZ2MiIGluY29ycmVjdGx5IHBydW5lZCBhIHJlcmVyZSByZWNvcmQgdGhhdCB3YXMgY3JlYXRlZCBsb25nCisgICB0aW1lIGFnbyBidXQgc3RpbGwgaXMgYWN0aXZlbHkgYW5kIHJlcGVhdGVkbHkgdXNlZC4KKworICogImdpdCBsb2cgLS1mb2xsb3cgLU0gLXAiIHdhcyBzZXJpb3VzbHkgYnJva2VuIGluIDEuNy4yLCByZXBvcnRpbmcKKyAgIGFzc2VydGlvbiBmYWlsdXJlLgorCisgKiBSdW5uaW5nICJnaXQgbG9nIiB3aXRoIGFuIGluY29ycmVjdCBvcHRpb24gc3RhcnRlZCBwYWdlciBuZXZlcnRoZWxlc3MsCisgICBmb3JjaW5nIHRoZSB1c2VyIHRvIGRpc21pc3MgaXQuCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIHRoZSB1c2VyIGhhcyBkaWZmLnJlbmFtZXMKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgc2V0LgorCisgKiBBbiBlYXJsaWVyIChhbmQgcmF0aGVyIG9sZCkgZml4IHRvICJnaXQgcmViYXNlIiBhZ2FpbnN0IGEgcmViYXNlZAorICAgdXBzdHJlYW0gYnJva2UgYSBtb3JlIG5vcm1hbCwgbm9uIHJlYmFzZWQgdXBzdHJlYW0gY2FzZSByYXRoZXIgYmFkbHksCisgICBhdHRlbXB0aW5nIHRvIHJlLWFwcGx5IHBhdGNoZXMgdGhhdCBhcmUgYWxyZWFkeSBhY2NlcHRlZCB1cHN0cmVhbS4KKworICogImdpdCBzdWJtb2R1bGUgc3luYyIgZm9yZ290IHRvIHVwZGF0ZSB0aGUgc3VwZXJwcm9qZWN0J3MgY29uZmlnIGZpbGUKKyAgIHdoZW4gc3VibW9kdWxlIFVSTCBjaGFuZ2VkLgorCisgKiAiZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lIiBkaWQgbm90IHJlbW92ZSBhIGRpcmVjdG9yeSB0aGF0IGhhcworICAgYmVjb21lIGVtcHR5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5NTBhNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNC50eHQKQEAgLTAsMCArMSwxMCBAQAorR2l0IHYxLjcuMi40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgcHJpbWFyaWx5IHRvIGJhY2twb3J0IHN1cHBvcnQgZm9yIHRoZSBuZXcgImFkZC5pZ25vcmVFcnJvcnMiCituYW1lIGdpdmVuIHRvIHRoZSBleGlzdGluZyAiYWRkLmlnbm9yZS1lcnJvcnMiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK1RoZSBuZXh0IHZlcnNpb24sIEdpdCAxLjcuNCwgYW5kIGZ1dHVyZSB2ZXJzaW9ucywgd2lsbCBzdXBwb3J0IGJvdGgKK29sZCBhbmQgaW5jb3JyZWN0IG5hbWUgYW5kIHRoZSBuZXcgY29ycmVjdGVkIG5hbWUsIGJ1dCB3aXRob3V0IHRoaXMKK2JhY2twb3J0LCB1c2VycyB3aG8gd2FudCB0byB1c2UgdGhlIG5ldyBuYW1lICJhZGQuaWdub3JlRXJyb3JzIiBpbgordGhlaXIgcmVwb3NpdG9yaWVzIGNhbm5vdCB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY5NzZjNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIuNS50eHQKQEAgLTAsMCArMSw4IEBACitHaXQgdjEuNy4yLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4yLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXR3ZWIiIGNhbiBzb21ldGltZXMgYmUgdHJpY2tlZCBpbnRvIHBhcnJvdHRpbmcgYSBmaWxlbmFtZSBhcmd1bWVudAorICAgZ2l2ZW4gaW4gYSByZXF1ZXN0IHdpdGhvdXQgcHJvcGVybHkgcXVvdGluZy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVjZjAxMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjIudHh0CkBAIC0wLDAgKzEsMTUxIEBACitHaXQgdjEuNy4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogY29yZS5lb2wgY29uZmlndXJhdGlvbiBhbmQgdGV4dC9lb2wgYXR0cmlidXRlcyBhcmUgdGhlIG5ldyB3YXkgdG8gY29udHJvbAorICAgdGhlIGVuZCBvZiBsaW5lIGNvbnZlbnRpb25zIGZvciBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLgorCisgKiBjb3JlLmF1dG9jcmxmIGhhcyBiZWVuIG1hZGUgc2FmZXIgLSBpdCB3aWxsIG5vdyBvbmx5IGhhbmRsZSBsaW5lCisgICBlbmRpbmdzIGZvciBuZXcgZmlsZXMgYW5kIGZpbGVzIHRoYXQgYXJlIExGLW9ubHkgaW4gdGhlCisgICByZXBvc2l0b3J5LiBUbyBub3JtYWxpemUgY29udGVudCB0aGF0IGhhcyBiZWVuIGNoZWNrZWQgaW4gd2l0aAorICAgQ1JMRiwgdXNlIHRoZSBuZXcgZW9sL3RleHQgYXR0cmlidXRlcy4KKworICogVGhlIHdoaXRlc3BhY2UgcnVsZXMgdXNlZCBpbiAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZSIgYW5kICJnaXQgZGlmZiIKKyAgIGdhaW5lZCBhIG5ldyBtZW1iZXIgaW4gdGhlIGZhbWlseSAodGFiLWluLWluZGVudCkgdG8gaGVscCBwcm9qZWN0cyB3aXRoCisgICBwb2xpY3kgdG8gaW5kZW50IG9ubHkgd2l0aCBzcGFjZXMuCisKKyAqIFdoZW4gd29ya2luZyBmcm9tIGEgc3ViZGlyZWN0b3J5LCBieSBkZWZhdWx0LCBnaXQgZG9lcyBub3QgbG9vayBmb3IgaXRzCisgICBtZXRhZGlyZWN0b3J5ICIuZ2l0IiBhY3Jvc3MgZmlsZXN5c3RlbXMsIHByaW1hcmlseSB0byBoZWxwIHBlb3BsZSB3aG8KKyAgIGhhdmUgaW52b2NhdGlvbnMgb2YgZ2l0IGluIHRoZWlyIGN1c3RvbSBQUzEgcHJvbXB0cywgYXMgYmVpbmcgb3V0c2lkZQorICAgb2YgYSBnaXQgcmVwb3NpdG9yeSB3b3VsZCBsb29rIGZvciAiLmdpdCIgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIHJvb3QKKyAgIGRpcmVjdG9yeSwgYW5kIE5GUyBtb3VudHMgYXJlIG9mdGVuIHNsb3cuICBESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0KKyAgIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHRlbGwgZ2l0IG5vdCB0byBzdG9wIGF0IGEKKyAgIGZpbGVzeXN0ZW0gYm91bmRhcnkuCisKKyAqIFVzYWdlIGhlbHAgbWVzc2FnZXMgZ2VuZXJhdGVkIGJ5IHBhcnNlLW9wdGlvbnMgbGlicmFyeSAoaS5lLiBtb3N0CisgICBvZiB0aGUgUG9yY2VsYWluIGNvbW1hbmRzKSBhcmUgc2VudCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IG5vdy4KKworICogJzovPHN0cmluZz4nIG5vdGF0aW9uIHRvIGxvb2sgZm9yIGEgY29tbWl0IG5vdyB0YWtlcyByZWd1bGFyIGV4cHJlc3Npb24KKyAgIGFuZCBpdCBpcyBub3QgYW5jaG9yZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tbWl0IGxvZyBtZXNzYWdlCisgICBhbnltb3JlICh0aGlzIGlzIGEgYmFja3dhcmQgaW5jb21wYXRpYmxlIGNoYW5nZSkuCisKKyAqICJnaXQiIHdyYXBwZXIgbGVhcm5lZCAiLWMgbmFtZT12YWx1ZSIgb3B0aW9uIHRvIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworICogSW1wcm92ZWQgcG9ydGFiaWxpdHkgZm9yIHZhcmlvdXMgcGxhdGZvcm1zIGluY2x1ZGluZyBvbGRlciBTdW5PUywKKyAgIEhQLVVYIDEwLzExLCBBSVgsIFRydTY0LCBldGMuIGFuZCBwbGF0Zm9ybXMgd2l0aCBQeXRob24gMi40LgorCisgKiBUaGUgbWVzc2FnZSBmcm9tICJnaXQgYW0gLTMiIGhhcyBiZWVuIGltcHJvdmVkIHdoZW4gY29uZmxpY3QKKyAgIHJlc29sdXRpb24gZW5kZWQgdXAgbWFraW5nIHRoZSBwYXRjaCBhIG5vLW9wLgorCisgKiAiZ2l0IGJsYW1lIiBhcHBsaWVzIHRoZSB0ZXh0Y29udiBmaWx0ZXIgdG8gdGhlIGNvbnRlbnRzIGl0IHdvcmtzCisgICBvbiwgd2hlbiBhdmFpbGFibGUuCisKKyAqICJnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbmV3YnJhbmNoIiBpcyBzaW1pbGFyIHRvICItYiBuZXdicmFuY2giIGJ1dAorICAgcHJlcGFyZXMgdG8gY3JlYXRlIGEgcm9vdCBjb21taXQgdGhhdCBpcyBub3QgY29ubmVjdGVkIHRvIGFueSBleGlzdGluZworICAgY29tbWl0LgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBsZWFybmVkIHRvIHBpY2sgYSByYW5nZSBvZiBjb21taXRzCisgICAoZS5nLiAiY2hlcnJ5LXBpY2sgQS4uQiIgYW5kICJjaGVycnktcGljayAtLXN0ZGluIiksIHNvIGRpZCAiZ2l0CisgICByZXZlcnQiOyB0aGVzZSBkbyBub3Qgc3VwcG9ydCB0aGUgbmljZXIgc2VxdWVuY2luZyBjb250cm9sICJyZWJhc2UKKyAgIFstaV0iIGhhcywgdGhvdWdoLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBhbmQgImdpdCByZXZlcnQiIGxlYXJuZWQgLS1zdHJhdGVneSBvcHRpb24gdG8gc3BlY2lmeQorICAgdGhlIG1lcmdlIHN0cmF0ZWd5IHRvIGJlIHVzZWQgd2hlbiBwZXJmb3JtaW5nIHRocmVlLXdheSBtZXJnZXMuCisKKyAqICJnaXQgY3Zzc2VydmVyIiBjYW4gYmUgdG9sZCB0byB1c2UgcHNlcnZlcjsgaXRzIHBhc3N3b3JkIGZpbGUgY2FuIGJlCisgICBzdG9yZWQgb3V0c2lkZSB0aGUgcmVwb3NpdG9yeS4KKworICogVGhlIG91dHB1dCBmcm9tIHRoZSB0ZXh0Y29udiBmaWx0ZXIgdXNlZCBieSAiZ2l0IGRpZmYiIGNhbiBiZSBjYWNoZWQgdG8KKyAgIHNwZWVkIHVwIHRoZWlyIHJldXNlLgorCisgKiAiZ2l0IGRpZmYgLS13b3JkLWRpZmY9PG1vZGU+IiBleHRlbmRzIHRoZSBleGlzdGluZyAiLS1jb2xvci13b3JkcyIKKyAgIG9wdGlvbiwgbWFraW5nIGl0IG1vcmUgdXNlZnVsIGluIGNvbG9yLWNoYWxsZW5nZWQgZW52aXJvbm1lbnRzLgorCisgKiBUaGUgcmVnZXhwIHRvIGRldGVjdCBmdW5jdGlvbiBoZWFkZXJzIHVzZWQgYnkgImdpdCBkaWZmIiBmb3IgUEhQIGhhcworICAgYmVlbiBlbmhhbmNlZCBmb3IgdmlzaWJpbGl0eSBtb2RpZmllcnMgKHB1YmxpYywgcHJvdGVjdGVkLCBldGMuKSB0bworICAgYmV0dGVyIHN1cHBvcnQgUEhQNS4KKworICogImRpZmYubm9wcmVmaXgiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gaW1wbGljaXRseQorICAgYXNrIGZvciAiZGlmZiAtLW5vLXByZWZpeCIgYmVoYXZpb3VyLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgbGVhcm5lZCAiJShvYmplY3RuYW1lOnNob3J0KSIgdGhhdCBnaXZlcyB0aGUgb2JqZWN0CisgICBuYW1lIGFiYnJldmlhdGVkLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCAtLXNpZ25hdHVyZSBvcHRpb24gYW5kIGZvcm1hdC5zaWduYXR1cmUKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gY3VzdG9taXplIHRoZSBlLW1haWwgc2lnbmF0dXJlIHVzZWQgaW4gdGhlCisgICBvdXRwdXQuCisKKyAqIFZhcmlvdXMgb3B0aW9ucyB0byAiZ2l0IGdyZXAiIChlLmcuIC0tY291bnQsIC0tbmFtZS1vbmx5KSB3b3JrIGJldHRlcgorICAgd2l0aCBiaW5hcnkgZmlsZXMuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCAiLU92aSIgdG8gb3BlbiB0aGUgZmlsZXMgd2l0aCBoaXRzIGluIHlvdXIgZWRpdG9yLgorCisgKiAiZ2l0IGhlbHAgLXciIGxlYXJuZWQgImNocm9tZSIgYW5kICJjaHJvbWl1bSIgYnJvd3NlcnMuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIHNob3dzIGNvbW1pdCBkZWNvcmF0aW9ucyBpbiB2YXJpb3VzIGNvbG91cnMuCisKKyAqICJnaXQgbG9nIC0tZm9sbG93IDxwYXRoPiIgZm9sbG93cyBhY3Jvc3MgY29waWVzIChpdCB1c2VkIHRvIG9ubHkgZm9sbG93CisgICByZW5hbWVzKS4gIFRoaXMgbWF5IG1ha2UgdGhlIHByb2Nlc3NpbmcgbW9yZSBleHBlbnNpdmUuCisKKyAqICJnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDo8dGVtcGxhdGU+IiBzcGVjaWZpZXIgbGVhcm5lZCAiJSA8c29tZXRoaW5nPiIKKyAgIG1hZ2ljIHRoYXQgaW5zZXJ0cyBhIHNwYWNlIG9ubHkgd2hlbiAlPHNvbWV0aGluZz4gZXhwYW5kcyB0byBhCisgICBub24tZW1wdHkgc3RyaW5nOyB0aGlzIGlzIHNpbWlsYXIgdG8gIiUrPHNvbWV0aGluZz4iIG1hZ2ljLCBidXQgaXMKKyAgIHVzZWZ1bCBpbiBhIGNvbnRleHQgdG8gZ2VuZXJhdGUgYSBzaW5nbGUgbGluZSBvdXRwdXQuCisKKyAqICJnaXQgbm90ZXMgcHJ1bmUiIGxlYXJuZWQgIi1uIiAoZHJ5LXJ1bikgYW5kICItdiIgb3B0aW9ucywgc2ltaWxhciB0bworICAgd2hhdCAiZ2l0IHBydW5lIiBoYXMuCisKKyAqICJnaXQgcGF0Y2gtaWQiIGNhbiBiZSBmZWQgYSBtYm94IHdpdGhvdXQgZ2V0dGluZyBjb25mdXNlZCBieSB0aGUKKyAgIHNpZ25hdHVyZSBsaW5lIGluIHRoZSBmb3JtYXQtcGF0Y2ggb3V0cHV0LgorCisgKiAiZ2l0IHJlbW90ZSIgbGVhcm5lZCAic2V0LWJyYW5jaGVzIiBzdWJjb21tYW5kLgorCisgKiAiZ2l0IHJldi1saXN0IEEuLkIiIGxlYXJuZWQgLS1hbmNlc3RyeS1wYXRoIG9wdGlvbiB0byBmdXJ0aGVyIGxpbWl0CisgICB0aGUgcmVzdWx0IHRvIHRoZSBjb21taXRzIHRoYXQgYXJlIG9uIHRoZSBhbmNlc3RyeSBjaGFpbiBiZXR3ZWVuIEEgYW5kCisgICBCIChpLmUuIGNvbW1pdHMgdGhhdCBhcmUgbm90IGRlc2NlbmRhbnRzIG9mIEEgYXJlIGV4Y2x1ZGVkKS4KKworICogImdpdCBzaG93IC01IiBpcyBlcXVpdmFsZW50IHRvICJnaXQgc2hvdyAtLWRvLXdhbGsgNSI7IHRoaXMgaXMgc2ltaWxhcgorICAgdG8gdGhlIHVwZGF0ZSB0byBtYWtlICJnaXQgc2hvdyBtYXN0ZXIuLm5leHQiIHdhbGsgdGhlIGhpc3RvcnksCisgICBpbnRyb2R1Y2VkIGluIDEuNi40LgorCisgKiAiZ2l0IHN0YXR1cyBbLXNdIC0taWdub3JlZCIgY2FuIGJlIHVzZWQgdG8gbGlzdCBpZ25vcmVkIHBhdGhzLgorCisgKiAiZ2l0IHN0YXR1cyAtcyAtYiIgc2hvd3MgdGhlIGN1cnJlbnQgYnJhbmNoIGluIHRoZSBvdXRwdXQuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkICItLWlnbm9yZS1zdWJtb2R1bGVzIiBvcHRpb24uCisKKyAqIFZhcmlvdXMgImdpdHdlYiIgZW5oYW5jZW1lbnRzIGFuZCBjbGVhbi11cHMsIGluY2x1ZGluZyBzeW50YXgKKyAgIGhpZ2hsaWdodGluZywgInBsYWNrdXAiIHN1cHBvcnQgZm9yIGluc3Rhd2ViLCAuZmNnaSBzdWZmaXggdG8gcnVuCisgICBpdCBhcyBGYXN0Q0dJIHNjcmlwdCwgZXRjLgorCisgKiBUaGUgdGVzdCBoYXJuZXNzIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcHJvZHVjZSBUQVAtZnJpZW5kbHkgb3V0cHV0LgorCisgKiBNYW55IGRvY3VtZW50YXRpb24gaW1wcm92ZW1lbnQgcGF0Y2hlcyBhcmUgYWxzbyBpbmNsdWRlZC4KKworCitGaXhlcyBzaW5jZSB2MS43LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2YgdGhlIGZpeGVzIGluIHYxLjcuMS5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogV2UgZGlkbid0IFVSTCBkZWNvZGUgImZpbGU6Ly8vcGF0aC90by9yZXBvIiBjb3JyZWN0bHkgd2hlbiBwYXRoL3RvL3JlcG8KKyAgIGhhZCBwZXJjZW50LWVuY29kZWQgY2hhcmFjdGVycyAoNjM4Nzk0YywgOWQyZTk0MiwgY2U4M2VkYSwgM2M3M2ExZCkuCisKKyAqICJnaXQgY2xvbmUiIGRpZCBub3QgY29uZmlndXJlIHJlbW90ZS5vcmlnaW4udXJsIGNvcnJlY3RseSBmb3IgYmFyZQorICAgY2xvbmVzIChkZjYxYzg4OSkuCisKKyAqICJnaXQgZGlmZiAtLWdyYXBoIiB3b3JrcyBiZXR0ZXIgd2l0aCAiLS1jb2xvci13b3JkcyIgYW5kIG90aGVyIG9wdGlvbnMKKyAgICg4MWZhMDI0Li40Mjk3YzBhKS4KKworICogImdpdCBkaWZmIiBjb3VsZCBzaG93IGFtYmlndW91cyBhYmJyZXZpYXRpb24gb2YgYmxvYiBvYmplY3QgbmFtZXMgb24KKyAgIGl0cyAiaW5kZXgiIGxpbmUgKDNlNWExODgpLgorCisgKiAiZ2l0IHJlc2V0IC0taGFyZCIgc3RhcnRlZCBmcm9tIGEgd3JvbmcgZGlyZWN0b3J5IGFuZCBhIHdvcmtpbmcgdHJlZSBpbgorICAgYSBub25zdGFuZGFyZCBsb2NhdGlvbiBpcyBpbiB1c2UgZ290IGNvbmZ1c2VkICg1NjBmYjZhMSkuCisKKyAqICJnaXQgcmVhZC10cmVlIC1tIEEgQiIgdXNlZCB0byBzd2l0Y2ggdG8gYnJhbmNoIEIgd2hpbGUgcmV0YWluaW5nCisgICBsb2NhbCBjaGFuZ2VzIGFkZGVkIGFuIGluY29ycmVjdCBjYWNoZS10cmVlIGluZm9ybWF0aW9uIChiMWY0NzUxNCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDJjOTNiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4xLnR4dApAQCAtMCwwICsxLDE0IEBACitHaXQgdjEuNy4zLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBzdGFzaCBzaG93IHN0YXNoQHskbn0iIHdhcyBhY2NpZGVudGFsbHkgYnJva2VuIGluIDEuNy4zICgiZ2l0CisgICBzdGFzaCBzaG93IiB3aXRob3V0IGFueSBhcmd1bWVudCBzdGlsbCB3b3JrZWQsIHRob3VnaCkuCisKKyAqICJnaXQgc3Rhc2ggYnJhbmNoICRicmFuY2ggc3Rhc2hAeyRufSIgd2FzIGFjY2lkZW50YWxseSBicm9rZW4gaW4KKyAgIDEuNy4zIGFuZCBzdGFydGVkIGRyb3BwaW5nIHRoZSBuYW1lZCBzdGFzaCBldmVuIHdoZW4gYnJhbmNoIGNyZWF0aW9uCisgICBmYWlsZWQuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM5M2I4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMi50eHQKQEAgLTAsMCArMSw1IEBACitHaXQgdjEuNy4zLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBwcmltYXJpbHkgdG8gcHVzaCBvdXQgbWFueSBkb2N1bWVudGF0aW9uIGZpeGVzIGFjY3VtdWxhdGVkIHNpbmNlCit0aGUgMS43LjMuMSByZWxlYXNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyYjI0NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuMy50eHQKQEAgLTAsMCArMSw1NCBAQAorR2l0IHYxLjcuMy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIGFkZGl0aW9uIHRvIHRoZSB1c3VhbCBmaXhlcywgdGhpcyByZWxlYXNlIGFsc28gaW5jbHVkZXMgc3VwcG9ydCBmb3IKK3RoZSBuZXcgImFkZC5pZ25vcmVFcnJvcnMiIG5hbWUgZ2l2ZW4gdG8gdGhlIGV4aXN0aW5nICJhZGQuaWdub3JlLWVycm9ycyIKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKK1RoZSBuZXh0IHZlcnNpb24sIEdpdCAxLjcuNCwgYW5kIGZ1dHVyZSB2ZXJzaW9ucywgd2lsbCBzdXBwb3J0IGJvdGgKK29sZCBhbmQgaW5jb3JyZWN0IG5hbWUgYW5kIHRoZSBuZXcgY29ycmVjdGVkIG5hbWUsIGJ1dCB3aXRob3V0IHRoaXMKK2JhY2twb3J0LCB1c2VycyB3aG8gd2FudCB0byB1c2UgdGhlIG5ldyBuYW1lICJhZGQuaWdub3JlRXJyb3JzIiBpbgordGhlaXIgcmVwb3NpdG9yaWVzIGNhbm5vdCB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgorCitGaXhlcyBzaW5jZSB2MS43LjMuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcHBseSIgc2VnZmF1bHRlZCB3aGVuIGEgYm9ndXMgaW5wdXQgaXMgZmVkIHRvIGl0LgorCisgKiBSdW5uaW5nICJnaXQgY2hlcnJ5LXBpY2sgLS1mZiIgb24gYSByb290IGNvbW1pdCBzZWdmYXVsdGVkLgorCisgKiAiZGlmZiIsICJibGFtZSIgYW5kIGZyaWVuZHMgaW5jb3JyZWN0bHkgYXBwbGllZCB0ZXh0Y29udiBmaWx0ZXJzIHRvCisgICBzeW1saW5rcy4KKworICogSGlnaGxpZ2h0aW5nIG9mIHdoaXRlc3BhY2UgYnJlYWthZ2UgaW4gImRpZmYiIG91dHB1dCB3YXMgc2hvd2luZworICAgaW5jb3JyZWN0IGFtb3VudCBvZiB3aGl0ZXNwYWNlcyB3aGVuIGJsYW5rLWF0LWVvbCBpcyBzZXQgYW5kIHRoZSBsaW5lCisgICBjb25zaXN0ZWQgb25seSBvZiB3aGl0ZXNwYWNlcyBhbmQgYSBUQUIuCisKKyAqICJkaWZmIiB3YXMgb3Zlcmx5IGluZWZmaWNpZW50IHdoZW4gdHJ5aW5nIHRvIGZpbmQgdGhlIGxpbmUgdG8gdXNlIGZvcgorICAgdGhlIGZ1bmN0aW9uIGhlYWRlciAoaS5lLiBlcXVpdmFsZW50IHRvIC0tc2hvdy1jLWZ1bmN0aW9uIG9mIEdOVSBkaWZmKS4KKworICogImdpdCBpbWFwLXNlbmQiIGRlcGVuZHMgb24gbGliY3J5cHRvIGJ1dCBvdXIgYnVpbGQgcnVsZSByZWxpZWQgb24gdGhlCisgICBsaW5rZXIgdG8gaW1wbGljaXRseSBsaW5rIGl0IHZpYSBsaWJzc2wsIHdoaWNoIHdhcyB3cm9uZy4KKworICogImdpdCBtZXJnZS1maWxlIiBjYW4gYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgc3ViZGlyZWN0b3J5IG5vdy4KKworICogImdpdCByZXBhY2sgLWYiIGV4cGFuZGVkIGFuZCByZWNvbXByZXNzZWQgbm9uLWRlbHRhIG9iamVjdHMgaW4gdGhlCisgICBleGlzdGluZyBwYWNrLCB3aGljaCB3YXMgd2FzdGVmdWwuICBVc2UgbmV3ICItRiIgb3B0aW9uIGlmIHlvdSByZWFsbHkKKyAgIHdhbnQgdG8gKGUuZy4gd2hlbiBjaGFuZ2luZyB0aGUgcGFjay5jb21wcmVzc2lvbiBsZXZlbCkuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1mb3JtYXQ9Ii4uLiV4MDAuLi4iIGluY29ycmVjdGx5IGNob3BwZWQgaXRzIG91dHB1dAorICAgYXQgTlVMLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgY29ycmVjdGx5IHJlbW92ZSBkdXBsaWNhdGUgbWFpbCBhZGRyZXNzZXMgZnJvbQorICAgdGhlIENjOiBoZWFkZXIgdGhhdCBhcHBlYXIgb24gdGhlIFRvOiBoZWFkZXIuCisKKyAqIFRoZSBjb21wbGV0aW9uIHNjcmlwdCAoaW4gY29udHJpYi9jb21wbGV0aW9uKSBpZ25vcmVkIGxpZ2h0d2VpZ2h0IHRhZ3MKKyAgIGluIF9fZ2l0X3BzMSgpLgorCisgKiAiZ2l0LWJsYW1lIiBtb2RlIChpbiBjb250cmliL2VtYWNzKSBkaWRuJ3Qgc2F5IChyZXF1aXJlICdmb3JtYXQtc3BlYykKKyAgIGV2ZW4gdGhvdWdoIGl0IGRlcGVuZHMgb24gaXQ7IGl0IGRpZG4ndCB3b3JrIHdpdGggRW1hY3MgMjIgb3Igb2xkZXIKKyAgIHVubGVzcyBHbnVzIGlzIHVzZWQuCisKKyAqICJnaXQtcDQiIChpbiBjb250cmliLykgZGlkIG5vdCBjb3JyZWN0bHkgaGFuZGxlIGRlbGV0ZWQgZmlsZXMuCisKK090aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYXJlIGFsc28gaW5jbHVkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTdmN2MxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy40LnR4dApAQCAtMCwwICsxLDQ1IEBACitHaXQgdjEuNy4zLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy4zLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFNtYXJ0IEhUVFAgdHJhbnNwb3J0IHVzZWQgdG8gaW5jb3JyZWN0bHkgcmV0cnkgcmVkaXJlY3RlZCBQT1NUCisgICByZXF1ZXN0IHdpdGggR0VUIHJlcXVlc3QuCisKKyAqICJnaXQgYXBwbHkiIGRpZCBub3QgY29ycmVjdGx5IGhhbmRsZSBwYXRjaGVzIHRoYXQgb25seSBjaGFuZ2UgbW9kZXMKKyAgIGlmIHRvbGQgdG8gYXBwbHkgd2hpbGUgc3RyaXBwaW5nIGxlYWRpbmcgcGF0aHMgd2l0aCAtcCBvcHRpb24uCisKKyAqICJnaXQgYXBwbHkiIGNhbiBkZWFsIHdpdGggcGF0Y2hlcyB3aXRoIHRpbWV6b25lIGZvcm1hdHRlZCB3aXRoIGEKKyAgIGNvbG9uIGJldHdlZW4gdGhlIGhvdXJzIGFuZCBtaW51dGVzIHBhcnQgKGUuZy4gIi0wODowMCIgaW5zdGVhZCBvZgorICAgIi0wODAwIikuCisKKyAqICJnaXQgY2hlY2tvdXQiIHJlbW92ZWQgYW4gdW50cmFja2VkIGZpbGUgImZvbyIgZnJvbSB0aGUgd29ya2luZworICAgdHJlZSB3aGVuIHN3aXRjaGluZyB0byBhIGJyYW5jaCB0aGF0IGNvbnRhaW5zIGEgdHJhY2tlZCBwYXRoCisgICAiZm9vL2JhciIuICBQcmV2ZW50IHRoaXMsIGp1c3QgbGlrZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29uZmxpY3RpbmcKKyAgIHBhdGggd2VyZSAiZm9vIiAoYzc1MmU3Zi4uNzk4MDg3MmQpLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBvciAiZ2l0IHJldmVydCIgcmVmdXNlZCB0byB3b3JrIHdoZW4gYSBwYXRoIHRoYXQKKyAgIHdvdWxkIGJlIG1vZGlmaWVkIGJ5IHRoZSBvcGVyYXRpb24gd2FzIHN0YXQtZGlydHkgd2l0aG91dCBhIHJlYWwKKyAgIGRpZmZlcmVuY2UgaW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgorCisgKiAiZ2l0IGRpZmYgLS1jaGVjayIgcmVwb3J0ZWQgYW4gaW5jb3JyZWN0IGxpbmUgbnVtYmVyIGZvciBhZGRlZAorICAgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiBmaWxlLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgZmFpbGVkIHRvIGJ1aWxkIHVuZGVyIE5PX09QRU5TU0wuCisKKyAqIFNldHRpbmcgbG9nLmRlY29yYXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gIjAiIG9yICIxIiB0byBtZWFuCisgICAiZmFsc2UiIG9yICJ0cnVlIiBkaWQgbm90IHdvcmsuCisKKyAqICJnaXQgcHVzaCIgb3ZlciBkdW1iIEhUVFAgcHJvdG9jb2wgZGlkIG5vdCB3b3JrIGFnYWluc3QgV2ViREFWCisgICBzZXJ2ZXJzIHRoYXQgZGlkIG5vdCB0ZXJtaW5hdGUgYSBjb2xsZWN0aW9uIG5hbWUgd2l0aCBhIHNsYXNoLgorCisgKiAiZ2l0IHRhZyAtdiIgZGlkIG5vdCB3b3JrIHdpdGggR1BHIHNpZ25hdHVyZXMgaW4gcmZjMTk5MSBtb2RlLgorCisgKiBUaGUgcG9zdC1yZWNlaXZlLWVtYWlsIHNhbXBsZSBob29rIHdhcyBhY2NpZGVudGFsbHkgYnJva2VuIGluIDEuNy4zLjMKKyAgIHVwZGF0ZS4KKworICogImdpdHdlYiIgY2FuIHNvbWV0aW1lcyBiZSB0cmlja2VkIGludG8gcGFycm90dGluZyBhIGZpbGVuYW1lIGFyZ3VtZW50CisgICBnaXZlbiBpbiBhIHJlcXVlc3Qgd2l0aG91dCBwcm9wZXJseSBxdW90aW5nLgorCitPdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBhbHNvIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBmM2JhNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjMuNS50eHQKQEAgLTAsMCArMSwzNCBAQAorR2l0IDEuNy4zLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisgKiBUaGUgeGZ1bmNuYW1lIHBhdHRlcm4gdXNlZCBieSAiZ2l0IGRpZmYiIGFuZCAiZ2l0IGdyZXAiIHRvIHNob3cgdGhlCisgICBsYXN0IG5vdGFibGUgbGluZSBpbiBjb250ZXh0IHdlcmUgYnJva2VuIGZvciBweXRob24gYW5kIHJ1YnkgZm9yIGEgbG9uZworICAgdGltZS4KKworICogImdpdCBtZXJnZSIgaW50byBhbiB1bmJvcm4gYnJhbmNoIHJlbW92ZWQgYW4gdW50cmFja2VkIGZpbGUgImZvbyIgZnJvbQorICAgdGhlIHdvcmtpbmcgdHJlZSB3aGVuIG1lcmdlZCBicmFuY2ggaGFkICJmb28iICh0aGlzIGZpeCB3YXMgYWxyZWFkeSBpbgorICAgMS43LjMuMyBidXQgd2FzIG9taXR0ZWQgZnJvbSB0aGUgcmVsZWFzZSBub3RlcyBieSBtaXN0YWtlKS4KKworICogImdpdCBzdGF0dXMgLXMiIGRpZCBub3QgcXVvdGUgdW5wcmludGFibGUgY2hhcmFjdGVycyBpbiBwYXRocyBhcworICAgZG9jdW1lbnRlZC4KKworICogImdpdCBhbSAtLWFib3J0IiB1c2VkIHRvIGFsd2F5cyByZXNldCB0byB0aGUgY29tbWl0IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgIHRoZSBsYXN0ICJhbSIgaW52b2NhdGlvbiB0aGF0IGhhcyBzdG9wcGVkLCBsb3NpbmcgYW55IHVucmVsYXRlZCBjb21taXRzCisgICB0aGF0IG1heSBoYXZlIGJlZW4gbWFkZSBzaW5jZSB0aGVuLiAgTm93IGl0IHJlZnJhaW5zIGZyb20gZG9pbmcgc28gYW5kCisgICBpbnN0ZWFkIGlzc3VlcyBhIHdhcm5pbmcuCisKKyAqICJnaXQgYmxhbWUiIGluY29ycmVjdGx5IHJldXNlZCBib2d1c2x5IGNhY2hlZCByZXN1bHQgb2YgdGV4dGNvbnYKKyAgIGZpbHRlciBmb3IgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlLgorCisgKiAiZ2l0IGNvbW1pdCIgdXNlZCB0byBhYm9ydCBhZnRlciB0aGUgdXNlciBlZGl0ZWQgdGhlIGxvZyBtZXNzYWdlCisgICB3aGVuIHRoZSBjb21taXR0ZXIgaW5mb3JtYXRpb24gd2FzIG5vdCBjb3JyZWN0bHkgc2V0IHVwLiAgSXQgbm93CisgICBhYm9ydHMgYmVmb3JlIHN0YXJ0aW5nIHRoZSBlZGl0b3IuCisKKyAqICJnaXQgY29tbWl0IC0tZGF0ZT1pbnZhbGlkIiB1c2VkIHRvIHNpbGVudGx5IGlnbm9yZSB0aGUgaW5jb3JyZWN0bHkKKyAgIHNwZWNpZmllZCBkYXRlOyBpdCBpcyBub3cgZGlhZ25vc2VkIGFzIGFuIGVycm9yLgorCisgKiAiZ2l0IHJlYmFzZSAtLXNraXAiIHRvIHNraXAgdGhlIGxhc3QgY29tbWl0IGluIGEgc2VyaWVzIHVzZWQgdG8gZmFpbAorICAgdG8gcnVuIHBvc3QtcmV3cml0ZSBob29rIGFuZCB0byBjb3B5IG5vdGVzIGZyb20gb2xkIGNvbW1pdHMgdGhhdCBoYXZlCisgICBzdWNjZXNzZnVsbHkgYmVlbiByZWJhc2VkIHNvIGZhci4gIE5vdyBpdCBkbyAoYmFja21lcmdlIGVmODhhZDIpLgorCisgKiAiZ2l0d2ViIiB0cmllZCB0byBzaG93IGEgd3JvbmcgZmVlZCBsb2dvIHdoZW4gbm9uZSB3YXMgc3BlY2lmaWVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDljMzMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuMy50eHQKQEAgLTAsMCArMSw3NiBAQAorR2l0IHYxLjcuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdC1ndWksIG5vdyBhdCB2ZXJzaW9uIDAuMTMuMCwgZ290IHZhcmlvdXMgdXBkYXRlcyBhbmQgYSBuZXcKKyAgIG1haW50YWluZXIsIFBhdCBUaG95dHMuCisKKyAqIEdpdHdlYiBhbGxvd3MgaXRzIGNvbmZpZ3VyYXRpb24gdG8gY2hhbmdlIHBlciBlYWNoIHJlcXVlc3Q7IGl0IHVzZWQgdG8KKyAgIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gb25jZSB1cG9uIHN0YXJ0dXAuCisKKyAqIFdoZW4gZ2l0IGZpbmRzIGEgY29ycnVwdCBvYmplY3QsIGl0IG5vdyByZXBvcnRzIHRoZSBmaWxlIHRoYXQgY29udGFpbnMKKyAgIGl0LgorCisgKiAiZ2l0IGNoZWNrb3V0IC1CIDxpdD4iIGlzIGEgc2hvcnRlciB3YXkgdG8gc2F5ICJnaXQgYnJhbmNoIC1mIDxpdD4iCisgICBmb2xsb3dlZCBieSAiZ2l0IGNoZWNrb3V0IDxpdD4iLgorCisgKiBXaGVuICJnaXQgY2hlY2tvdXQiIG9yICJnaXQgbWVyZ2UiIHJlZnVzZSB0byBwcm9jZWVkIGluIG9yZGVyIHRvCisgICBwcm90ZWN0IGxvY2FsIG1vZGlmaWNhdGlvbiB0byB5b3VyIHdvcmtpbmcgdHJlZSwgdGhleSB1c2VkIHRvIHN0b3AKKyAgIGFmdGVyIHNob3dpbmcganVzdCBvbmUgcGF0aCB0aGF0IG1pZ2h0IGJlIGxvc3QuICBUaGV5IG5vdyBzaG93IGFsbCwKKyAgIGluIGEgZm9ybWF0IHRoYXQgaXMgZWFzaWVyIHRvIHJlYWQuCisKKyAqICJnaXQgY2xlYW4iIGxlYXJuZWQgIi1lIiAoIi0tZXhjbHVkZSIpIG9wdGlvbi4KKworICogSHVuayBoZWFkZXJzIHByb2R1Y2VkIGZvciBDIyBmaWxlcyBieSAiZ2l0IGRpZmYiIGFuZCBmcmllbmRzIHNob3cgbW9yZQorICAgcmVsZXZhbnQgY29udGV4dCB0aGFuIGJlZm9yZS4KKworICogZGlmZi5pZ25vcmVzdWJtb2R1bGVzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gc3F1ZWxjaCB0aGUKKyAgIGRpZmZlcmVuY2VzIGluIHN1Ym1vZHVsZXMgcmVwb3J0ZWQgd2hlbiBydW5uaW5nIGNvbW1hbmRzIChlLmcuICJkaWZmIiwKKyAgICJzdGF0dXMiLCBldGMuKSBhdCB0aGUgc3VwZXJwcm9qZWN0IGxldmVsLgorCisgKiBodHRwLnVzZXJhZ2VudCBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkIHRvIGxpZSB3aG8geW91IGFyZSB0byB5b3VyCisgICByZXN0cmljdGl2ZSBmaXJld2FsbC4KKworICogImdpdCByZWJhc2UgLS1zdHJhdGVneSA8cz4iIGxlYXJuZWQgIi1YIiBvcHRpb24gdG8gcGFzcyBleHRyYSBvcHRpb25zCisgICB0aGF0IGFyZSB1bmRlcnN0b29kIGJ5IHRoZSBjaG9zZW4gbWVyZ2Ugc3RyYXRlZ3kuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkICJleGVjIiB0aGF0IHlvdSBjYW4gaW5zZXJ0IGludG8gdGhlIGluc24gc2hlZXQKKyAgIHRvIHJ1biBhIGNvbW1hbmQgYmV0d2VlbiBpdHMgc3RlcHMuCisKKyAqICJnaXQgcmViYXNlIiBiZXR3ZWVuIGJyYW5jaGVzIHRoYXQgaGF2ZSBtYW55IGJpbmFyeSBjaGFuZ2VzIHRoYXQgZG8KKyAgIG5vdCBjb25mbGljdCBzaG91bGQgYmUgZmFzdGVyLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgcGVla3MgaW50byByZWJhc2UuYXV0b3NxdWFzaCBjb25maWd1cmF0aW9uIGFuZCBhY3RzIGFzCisgICBpZiB5b3UgZ2F2ZSAtLWF1dG9zcXVhc2ggZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKworRml4ZXMgc2luY2UgdjEuNy4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBmaXhlcyBpbiB2MS43LjIuWCBtYWludGVuYW5jZSBzZXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMKK3JlbGVhc2UsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuCisKKyAqICJnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIiAod2hpY2ggaXMgdGhlIGRlZmF1bHQpIGRpZCBub3QgaGFuZGxlIGNhc2VzCisgICB3aGVyZSBhIGRpcmVjdG9yeSBiZWNvbWVzIGEgZmlsZSAob3IgdmljZSB2ZXJzYSkgdmVyeSB3ZWxsLgorCisgKiAiZ2l0IGZldGNoIiBhbmQgZnJpZW5kcyB3ZXJlIGFjY2lkZW50YWxseSBicm9rZW4gZm9yIHVybCB3aXRoICIrIiBpbgorICAgaXRzIHBhdGgsIGUuZy4gImdpdDovL2dpdC5nbm9tZS5vcmcvZ3RrKyIuCisKKyAqICJnaXQgZmV0Y2ggJHVybCIgKGkuZS4gd2l0aG91dCByZWZzcGVjcykgd2FzIGJyb2tlbiBmb3IgcXVpdGUgc29tZQorICAgdGltZSwgaWYgdGhlIGN1cnJlbnQgYnJhbmNoIGhhcHBlbiB0byBiZSB0cmFja2luZyBzb21lIHJlbW90ZS4KKworICogImdpdCBscy10cmVlIGRpciBkaXJnYXJiYWdlIiwgd2hlbiAiZGlyIiB3YXMgYSBkaXJlY3RvcnksCisgICBpbmNvcnJlY3RseSByZWN1cnNlZCBpbnRvICJkaXIiLgorCisgKiAiZ2l0IG5vdGUgcmVtb3ZlIiBjcmVhdGVkIHVubmVjZXNzYXJ5IGV4dHJhIGNvbW1pdCB3aGVuIG5hbWVkIG9iamVjdAorICAgZGlkIG5vdCBoYXZlIGFueSBub3RlIHRvIGJlZ2luIHdpdGguCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IHdvcmsgd2VsbCBpZiB5b3UgaGFkIGRpZmYubm9wcmVmaXggY29uZmlndXJlZC4KKworICogImdpdCAtYyBmb289YmFyIHN1YmNtZCIgZGlkIG5vdCB3b3JrIHdlbGwgZm9yIHN1YmNtZCB0aGF0IGlzIG5vdAorICAgaW1wbGVtZW50ZWQgYXMgYSBidWlsdC1pbiBjb21tYW5kLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5MjNhNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMS50eHQKQEAgLTAsMCArMSwyNyBAQAorR2l0IHYxLjcuNC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE9uIFdpbmRvd3MgcGxhdGZvcm0sIHRoZSBjb2RlcGF0aCB0byBzcGF3biBhIG5ldyBjaGlsZCBwcm9jZXNzIGZvcmdvdAorICAgdG8gZmlyc3QgZmx1c2ggdGhlIG91dHB1dCBidWZmZXIuCisKKyAqICJnaXQgYnVuZGxlIiBkaWQgbm90IHVzZSBPRlNfREVMVEEgZW5jb2RpbmcsIG1ha2luZyBpdHMgb3V0cHV0IGEgZmV3CisgICBwZXItY2VudCBsYXJnZXIgdGhhbiBuZWNlc3NhcmlseS4KKworICogVGhlIG9wdGlvbiB0byB0ZWxsICJnaXQgY2xvbmUiIHRvIHJlY3Vyc2UgaW50byB0aGUgc3VibW9kdWxlcyB3YXMKKyAgIG1pc3NwZWxsZWQgd2l0aCBhbiB1bmRlcnNjb3JlICItLXJlY3Vyc2Vfc3VibW9kdWxlcyIuCisKKyAqICJnaXQgZGlmZiAtLWNhY2hlZCBIRUFEIiBiZWZvcmUgdGhlIGZpcnN0IGNvbW1pdCBkb2VzIHdoYXQgYW4gZW5kIHVzZXIKKyAgIHdvdWxkIGV4cGVjdCAobmFtZWx5LCBzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIHdpdGhvdXQgZnVydGhlciAiZ2l0CisgICBhZGQiKS4KKworICogImdpdCBmYXN0LWltcG9ydCIgZGlkbid0IGFjY2VwdCB0aGUgY29tbWFuZCB0byBhc2sgZm9yICJub3RlcyIgZmVhdHVyZQorICAgdG8gYmUgcHJlc2VudCBpbiBpdHMgaW5wdXQgc3RyZWFtLCBldmVuIHRob3VnaCBpdCB3YXMgY2FwYWJsZSBvZiB0aGUKKyAgIGZlYXR1cmUuCisKKyAqICJnaXQgZnNjayIgZ2F2ZSB1cCBzY2FubmluZyBsb29zZSBvYmplY3QgZmlsZXMgaW4gZGlyZWN0b3JpZXMgd2l0aAorICAgZ2FyYmFnZSBmaWxlcy4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjRjZTFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC4yLnR4dApAQCAtMCwwICsxLDU4IEBACitHaXQgdjEuNy40LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy40LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIE1hbnkgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIHRvIG1hdGNoICJnaXQgY21kIC1oIiBvdXRwdXQgYW5kIHRoZQorICAgZ2l0LWNtZCBtYW51YWwgcGFnZS4KKworICogV2UgdXNlZCB0byBrZWVwIG9uZSBmaWxlIGRlc2NyaXB0b3Igb3BlbiBmb3IgZWFjaCBhbmQgZXZlcnkgcGFja2ZpbGUKKyAgIHRoYXQgd2UgaGF2ZSBhIG1tYXAgd2luZG93IG9uIGl0IChyZWFkOiAiaW4gdXNlIiksIGV2ZW4gd2hlbiBmb3IgdmVyeQorICAgdGlueSBwYWNrZmlsZXMuICBXZSBub3cgY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBlYXJseSB3aGVuIHRoZSBlbnRpcmUKKyAgIHBhY2tmaWxlIGZpdHMgaW5zaWRlIG9uZSBtbWFwIHdpbmRvdy4KKworICogImdpdCBiaXNlY3QgdmlzdWFsaXplIiB0cmllZCB0byBydW4gImdpdGsiIGluIHdpbmRvd2luZworICAgZW52aXJvbm1lbnRzIGV2ZW4gd2hlbiAiZ2l0ayIgaXMgbm90IGluc3RhbGxlZCwgcmVzdWx0aW5nIGluIGEKKyAgIHN0cmFuZ2UgZXJyb3IgbWVzc2FnZS4KKworICogImdpdCBjbG9uZSAvbm8vc3VjaC9wYXRoIiBkaWQgbm90IGZhaWwgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNvbW1pdCIgZGlkIG5vdCBjb3JyZWN0bHkgZXJyb3Igb3V0IHdoZW4gdGhlIHVzZXIgYXNrZWQgdG8gdXNlIGEKKyAgIG5vbiBleGlzdGVudCBmaWxlIGFzIHRoZSBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZS4KKworICogImdpdCBkaWZmIC0tc3RhdCAtQiIgcmFuIG9uIGJpbmFyeSBmaWxlcyBjb3VudGVkIHRoZSBjaGFuZ2VzIGluIGxpbmVzLAorICAgd2hpY2ggd2FzIG5vbnNlbnNpY2FsLgorCisgKiAiZ2l0IGRpZmYgLU0iIG9wcG9ydHVuaXN0aWNhbGx5IGRldGVjdGVkIGNvcGllcywgd2hpY2ggd2FzIG5vdAorICAgbmVjZXNzYXJpbHkgYSBnb29kIHRoaW5nLCBlc3BlY2lhbGx5IHdoZW4gaXQgaXMgaW50ZXJuYWxseSBydW4gYnkKKyAgIHJlY3Vyc2l2ZSBtZXJnZS4KKworICogImdpdCBkaWZmdG9vbCIgZGlkbid0IHRlbGwgKGcpdmltZGlmZiB0aGF0IHRoZSBmaWxlcyBpdCBpcyByZWFkaW5nIGFyZQorICAgdG8gYmUgb3BlbmVkIHJlYWQtb25seS4KKworICogImdpdCBtZXJnZSIgZGlkbid0IHBheSBhdHRlbnRpb24gdG8gcHJlcGFyZS1jb21taXQtbXNnIGhvb2ssIGV2ZW4KKyAgIHRob3VnaCBpZiBhIG1lcmdlIGlzIGNvbmZsaWN0ZWQgYW5kIG1hbnVhbGx5IHJlc29sdmVkLCB0aGUgc3Vic2VxdWVudAorICAgImdpdCBjb21taXQiIHdvdWxkIGhhdmUgdHJpZ2dlcmVkIHRoZSBob29rLCB3aGljaCB3YXMgaW5jb25zaXN0ZW50LgorCisgKiAiZ2l0IHBhdGNoLWlkIiAoYW5kIGNvbW1hbmRzIGxpa2UgImZvcm1hdC1wYXRjaCAtLWlnbm9yZS1pbi11cHN0cmVhbSIKKyAgIHRoYXQgdXNlIGl0IGFzIHRoZWlyIGludGVybmFsIGxvZ2ljKSBoYW5kbGVkIGNoYW5nZXMgdG8gZmlsZXMgdGhhdCBlbmQKKyAgIHdpdGggaW5jb21wbGV0ZSBsaW5lcyBpbmNvcnJlY3RseS4KKworICogVGhlIG9mZmljaWFsIHZhbHVlIHRvIHRlbGwgImdpdCBwdXNoIiB0byBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBiYWNrCisgICB0byB1cGRhdGUgdGhlIHVwc3RyZWFtIGJyYW5jaCBpdCBmb3JrZWQgZnJvbSBpcyBub3cgY2FsbGVkICJ1cHN0cmVhbSIuCisgICBUaGUgb2xkIG5hbWUgInRyYWNraW5nIiBpcyBhbmQgd2lsbCBiZSBzdXBwb3J0ZWQuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgdXNlZCB0byBob25vciB0aGUgLS1tZXJnZS8tLXJlYmFzZSBvcHRpb24gKG9yCisgICBjb3JyZXNwb25kaW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzKSBldmVuIGZvciBhIG5ld2x5IGNsb25lZAorICAgc3VicHJvamVjdCwgd2hpY2ggbWFkZSBubyBzZW5zZSAoc28vc3VibW9kdWxlLW5vLXVwZGF0ZS1maXJzdC10aW1lKS4KKworICogZ2l0d2ViJ3MgImhpZ2hsaWdodCIgaW50ZXJmYWNlIG1pc2hhbmRsZWQgdGFicy4KKworICogZ2l0d2ViIGRpZG4ndCB1bmRlcnN0YW5kIHRpbWV6b25lcyB3aXRoIEdNVCBvZmZzZXQgdGhhdCBpcyBub3QKKyAgIG11bHRpcGxlIG9mIGEgd2hvbGUgaG91ci4KKworICogZ2l0d2ViIGhhZCBhIGZldyBmb3J3YXJkLWluY29tcGF0aWJsZSBzeW50YWN0aWMgY29uc3RydWN0cyBhbmQKKyAgIGFsc28gdXNlZCBpbmNvcnJlY3QgdmFyaWFibGUgd2hlbiBzaG93aW5nIHRoZSBmaWxlIG1vZGUgaW4gYSBkaWZmLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYTNkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy40LjMudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2MS43LjQuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjQuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBhcHBseSIgdXNlZCB0byBjb25mdXNlIGxpbmVzIHVwZGF0ZWQgYnkgcHJldmlvdXMgaHVua3MgYXMgbGluZXMKKyAgIHRoYXQgZXhpc3RlZCBiZWZvcmUgd2hlbiBhcHBseWluZyBhIGh1bmssIGNvbnRyaWJ1dGluZyBtaXNhcHBsaWNhdGlvbgorICAgb2YgcGF0Y2hlcyB3aXRoIG9mZnNldHMuCisKKyAqICJnaXQgYnJhbmNoIC0tdHJhY2siIChhbmQgImdpdCBjaGVja291dCAtLXRyYWNrIC0tYnJhbmNoIikgdXNlZCB0bworICAgYWxsb3cgc2V0dGluZyB1cCBhIHJhbmRvbSBub24tYnJhbmNoIHRoYXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBmb2xsb3cKKyAgIGFzIHRoZSAidXBzdHJlYW0iLiAgVGhlIGNvbW1hbmQgY29ycmVjdGx5IGRpYWdub3NlcyBpdCBhcyBhbiBlcnJvci4KKworICogImdpdCBjaGVja291dCAkb3RoZXJfYnJhbmNoIiBzaWxlbnRseSByZW1vdmVkIHVudHJhY2tlZCBzeW1ib2xpYyBsaW5rcworICAgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0IGFyZSBpbiB0aGUgd2F5IGluIG9yZGVyIHRvIGNoZWNrIG91dCBwYXRocworICAgdW5kZXIgaXQgZnJvbSB0aGUgbmFtZWQgYnJhbmNoLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgZGlkIG5vdCBiYWlsIG91dCBpbW1lZGlhdGVseSB3aGVuIHRoZSBjdnMgc2VydmVyIGNhbm5vdAorICAgYmUgcmVhY2hlZCwgc3Bld2luZyB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcyB0aGF0IGNvbXBsYWluIGFib3V0IHRoZQorICAgc2VydmVyIHJlc3BvbnNlIHRoYXQgaXQgbmV2ZXIgZ290LgorCisgKiAiZ2l0IGRpZmYgLS1xdWlldCIgZGlkIG5vdCB3b3JrIHZlcnkgd2VsbCB3aXRoIHRoZSAiLS1kaWZmLWZpbHRlciIKKyAgIG9wdGlvbi4KKworICogImdpdCBncmVwIC1uIiBsYWNrZWQgYSBsb25nLWhhbmQgc3lub255bSAtLWxpbmUtbnVtYmVyLgorCisgKiAiZ2l0IHN0YXNoIGFwcGx5IiByZXBvcnRlZCB0aGUgcmVzdWx0IG9mIGl0cyBvcGVyYXRpb24gYnkgcnVubmluZworICAgImdpdCBzdGF0dXMiIGZyb20gdGhlIHRvcC1sZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlOyBpdCBzaG91bGQgKGFuZAorICAgbm93IGRvZXMpIHJ1biBpdCBmcm9tIHRoZSB1c2VyJ3Mgd29ya2luZyBkaXJlY3RvcnkuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYwNmUwNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNC50eHQKQEAgLTAsMCArMSwzNSBAQAorR2l0IHYxLjcuNC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDb21waWxhdGlvbiBvZiBzaGExX2ZpbGUuYyBvbiBCU0QgcGxhdGZvcm1zIHdlcmUgYnJva2VuIGR1ZSB0byBvdXIKKyAgIHJlY2VudCB1c2Ugb2YgZ2V0cmxpbWl0KCkgd2l0aG91dCBpbmNsdWRpbmcgPHN5cy9yZXNvdXJjZS5oPi4KKworICogImdpdCBjb25maWciIGRpZCBub3QgZGlhZ25vc2UgaW5jb3JyZWN0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBkaWQgbm90IHdyYXAgYSBsb25nIHN1YmplY3QgbGluZSB0aGF0IHJlc3VsdGVkIGZyb20KKyAgIHJmYzIwNDcgZW5jb2RpbmcuCisKKyAqICJnaXQgaW5zdGF3ZWIiIHNob3VsZCB3b3JrIGJldHRlciBhZ2FpbiB3aXRoIHBsYWNrdXAuCisKKyAqICJnaXQgbG9nIC0tbWF4LWNvdW50PTQgLVNmb29iYXIiIG5vdyBzaG93cyA0IGNvbW1pdHMgdGhhdCBjaGFuZ2VzIHRoZQorICAgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHN0cmluZyAiZm9vYmFyIjsgaXQgdXNlZCB0byBzY2FuIG9ubHkgZm9yIDQKKyAgIGNvbW1pdHMgYW5kIHRoZW4gZW1pdHRlZCBvbmx5IG1hdGNoaW5nIG9uZXMuCisKKyAqICJnaXQgbG9nIC0tZmlyc3QtcGFyZW50IC0tYm91bmRhcnkgJGNeLi4kYyIgc2VnZmF1bHRlZCBvbiBhIG1lcmdlLgorCisgKiAiZ2l0IHB1bGwiIGludG8gYW4gZW1wdHkgYnJhbmNoIHNob3VsZCBoYXZlIGJlaGF2ZWQgYXMgaWYKKyAgIGZhc3QtZm9yd2FyZGluZyBmcm9tIGVtcHRpbmVzcyB0byB0aGUgdmVyc2lvbiBiZWluZyBwdWxsZWQsIHdpdGgKKyAgIHRoZSB1c3VhbCBwcm90ZWN0aW9uIGFnYWluc3Qgb3ZlcndyaXRpbmcgdW50cmFja2VkIGZpbGVzLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgdGhhdCBpcyBydW4gd2hpbGUgYSBtZXJnZSBpbiB0aGUgc3VwZXJwcm9qZWN0IGlzIGluCisgICBjb25mbGljdGVkIHN0YXRlIHRyaWVkIHRvIHByb2Nlc3MgZWFjaCBjb25mbGljdGVkIHN1Ym1vZHVsZSB1cCB0bworICAgdGhyZWUgdGltZXMuCisKKyAqICJnaXQgc3RhdHVzIiBzcGVudCBhbGwgdGhlIGVmZm9ydCB0byBub3RpY2UgcmFjaWx5LWNsZWFuIGluZGV4IGVudHJpZXMKKyAgIGJ1dCBkaWRuJ3QgdXBkYXRlIHRoZSBpbmRleCBmaWxlIHRvIGhlbHAgbGF0ZXIgb3BlcmF0aW9ucyBnbyBmYXN0ZXIgaW4KKyAgIHNvbWUgY2FzZXMuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdhMGVlYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQuNS50eHQKQEAgLTAsMCArMSw0IEBACitHaXQgdjEuNy40LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBjb250YWlucyBvbmx5IG1pbm9yIGRvY3VtZW50YXRpb24gZml4ZXMgYWNjdW11bGF0ZWQgc2luY2UgMS43LjQuNC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDViY2E3MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjQudHh0CkBAIC0wLDAgKzEsMTU2IEBACitHaXQgdjEuNy40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGRvY3VtZW50YXRpb24gTWFrZWZpbGUgbm93IGFzc3VtZXMgYnkgZGVmYXVsdCBhc2NpaWRvYyA4IGFuZAorICAgZG9jYm9vay14c2wgPj0gMS43My4gSWYgeW91IGhhdmUgb2xkZXIgdmVyc2lvbnMsIHlvdSBjYW4gc2V0CisgICBBU0NJSURPQzcgYW5kIEFTQ0lJRE9DX1JPRkYsIHJlc3BlY3RpdmVseS4KKworICogVGhlIG9wdGlvbiBwYXJzZXJzIG9mIHZhcmlvdXMgY29tbWFuZHMgdGhhdCBjcmVhdGUgbmV3IGJyYW5jaGVzIChvcgorICAgcmVuYW1lIGV4aXN0aW5nIG9uZXMgdG8gYSBuZXcgbmFtZSkgd2VyZSB0b28gbG9vc2UgYW5kIHVzZXJzIHdlcmUKKyAgIGFsbG93ZWQgdG8gZ2l2ZSBhIGJyYW5jaCBhIG5hbWUgdGhhdCBiZWdpbnMgd2l0aCBhIGRhc2ggYnkgY3JlYXRpdmUKKyAgIGFidXNlIG9mIHRoZWlyIGNvbW1hbmQgbGluZSBvcHRpb25zLCB3aGljaCBvbmx5IGxlZCB0byBidXJuaW5nCisgICB0aGVtc2VsdmVzLiAgVGhlIG5hbWUgb2YgYSBicmFuY2ggY2Fubm90IGJlZ2luIHdpdGggYSBkYXNoIG5vdy4KKworICogU3lzdGVtLXdpZGUgZmFsbGJhY2sgZGVmYXVsdCBhdHRyaWJ1dGVzIGNhbiBiZSBzdG9yZWQgaW4KKyAgIC9ldGMvZ2l0YXR0cmlidXRlczsgdGhlIGNvcmUuYXR0cmlidXRlc2ZpbGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4KKyAgIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoZSBwYXRoIHRvIHRoaXMgZmlsZS4KKworICogVGhlIHRocmVhZCBzdHJ1Y3R1cmUgZ2VuZXJhdGVkIGJ5ICJnaXQgc2VuZC1lbWFpbCIgaGFzIGNoYW5nZWQKKyAgIHNsaWdodGx5LiAgU2V0dGluZyB0aGUgY292ZXIgbGV0dGVyIG9mIHRoZSBsYXRlc3Qgc2VyaWVzIGFzIGEgcmVwbHkKKyAgIHRvIHRoZSBjb3ZlciBsZXR0ZXIgb2YgdGhlIHByZXZpb3VzIHNlcmllcyB3aXRoIC0taW4tcmVwbHktdG8gdXNlZAorICAgdG8gbWFrZSB0aGUgbmV3IGNvdmVyIGxldHRlciBhbmQgYWxsIHRoZSBwYXRjaGVzIHJlcGxpZXMgdG8gdGhlCisgICBjb3ZlciBsZXR0ZXIgb2YgdGhlIHByZXZpb3VzIHNlcmllczsgdGhpcyBoYXMgYmVlbiBjaGFuZ2VkIHRvIG1ha2UKKyAgIHRoZSBwYXRjaGVzIGluIHRoZSBuZXcgc2VyaWVzIHJlcGxpZXMgdG8gdGhlIG5ldyBjb3ZlciBsZXR0ZXIuCisKKyAqIFRoZSBCYXNoIGNvbXBsZXRpb24gc2NyaXB0IGluIGNvbnRyaWIvIGhhcyBiZWVuIGFkanVzdGVkIHRvIGJlIHVzYWJsZSB3aXRoCisgICBCYXNoIDQgKG9wdGlvbnMgd2l0aCAnPXZhbHVlJyBkaWRuJ3QgY29tcGxldGUpLiAgSXQgaGFzIGJlZW4gYWxzbyBtYWRlCisgICB1c2FibGUgd2l0aCB6c2guCisKKyAqIERpZmZlcmVudCBwYWdlcnMgY2FuIGJlIGNob3NlbiBkZXBlbmRpbmcgb24gd2hpY2ggc3ViY29tbWFuZCBpcworICAgYmVpbmcgcnVuIHVuZGVyIHRoZSBwYWdlciwgdXNpbmcgdGhlICJwYWdlci48c3ViY29tbWFuZD4iIHZhcmlhYmxlLgorCisgKiBUaGUgaGFyZGNvZGVkIHRhYi13aWR0aCBvZiA4IHRoYXQgaXMgdXNlZCBpbiB3aGl0ZXNwYWNlIGJyZWFrYWdlIGNoZWNrcyBpcyBub3cKKyAgIGNvbmZpZ3VyYWJsZSB2aWEgdGhlIGF0dHJpYnV0ZXMgbWVjaGFuaXNtLgorCisgKiBTdXBwb3J0IG9mIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMgKGkuZS4gImNvcmUuaWdub3JlY2FzZSIpIGhhcworICAgYmVlbiBpbXByb3ZlZC4gIEZvciBleGFtcGxlLCB0aGUgZ2l0aWdub3JlIG1lY2hhbmlzbSBkaWRuJ3QgcGF5IGF0dGVudGlvbgorICAgdG8gY2FzZSBpbnNlbnNpdGl2aXR5LgorCisgKiBUaGUgPHRyZWU+OjxwYXRoPiBzeW50YXggZm9yIG5hbWluZyBhIGJsb2IgaW4gYSB0cmVlLCBhbmQgdGhlIDo8cGF0aD4KKyAgIHN5bnRheCBmb3IgbmFtaW5nIGEgYmxvYiBpbiB0aGUgaW5kZXggKGUuZy4gIm1hc3RlcjpNYWtlZmlsZSIsCisgICAiOmhlbGxvLmMiKSBoYXZlIGJlZW4gZXh0ZW5kZWQuICBZb3UgY2FuIHN0YXJ0IDxwYXRoPiB3aXRoICIuLyIgdG8KKyAgIGltcGxpY2l0bHkgaGF2ZSB0aGUgKHN1YilkaXJlY3RvcnkgeW91IGFyZSBpbiBwcmVmaXhlZCB0byB0aGUKKyAgIGxvb2t1cC4gIFNpbWlsYXJseSwgIjouLi9NYWtlZmlsZSIgZnJvbSBhIHN1YmRpcmVjdG9yeSB3b3VsZCBtZWFuCisgICAidGhlIE1ha2VmaWxlIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGluIHRoZSBpbmRleCIuCisKKyAqICJnaXQgYmxhbWUiIGxlYXJuZWQgdGhlIC0tc2hvdy1lbWFpbCBvcHRpb24gdG8gZGlzcGxheSB0aGUgZS1tYWlsCisgICBhZGRyZXNzZXMgaW5zdGVhZCBvZiB0aGUgbmFtZXMgb2YgYXV0aG9ycy4KKworICogImdpdCBjb21taXQiIGxlYXJuZWQgdGhlIC0tZml4dXAgYW5kIC0tc3F1YXNoIG9wdGlvbnMgdG8gaGVscCBsYXRlciBpbnZvY2F0aW9uCisgICBvZiBpbnRlcmFjdGl2ZSByZWJhc2UuCisKKyAqIENvbW1hbmQgbGluZSBvcHRpb25zIHRvICJnaXQgY3ZzaW1wb3J0IiB3aG9zZSBuYW1lcyBhcmUgaW4gY2FwaXRhbAorICAgbGV0dGVycyAoLUEsIC1NLCAtUiBhbmQgLVMpIGNhbiBub3cgYmUgc3BlY2lmaWVkIGFzIHRoZSBkZWZhdWx0IGluCisgICB0aGUgLmdpdC9jb25maWcgZmlsZSBieSB0aGVpciBsb25nZXIgbmFtZXMgKGN2c2ltcG9ydC5hdXRob3JzRmlsZSwKKyAgIGN2c2ltcG9ydC5tZXJnZVJlZ2V4LCBjdnNpbXBvcnQudHJhY2tSZXZpc2lvbnMsIGN2c2ltcG9ydC5pZ25vcmVQYXRocykuCisKKyAqICJnaXQgZGFlbW9uIiBjYW4gYmUgYnVpbHQgaW4gdGhlIE1pbkdXIGVudmlyb25tZW50LgorCisgKiAiZ2l0IGRhZW1vbiIgY2FuIHRha2UgbW9yZSB0aGFuIG9uZSAtLWxpc3RlbiBvcHRpb24gdG8gbGlzdGVuIHRvCisgICBtdWx0aXBsZSBhZGRyZXNzZXMuCisKKyAqICJnaXQgZGVzY3JpYmUgLS1leGFjdC1tYXRjaCIgd2FzIG9wdGltaXplZCBub3QgdG8gcmVhZCBjb21taXQKKyAgIG9iamVjdHMgdW5uZWNlc3NhcmlseS4KKworICogImdpdCBkaWZmIiBhbmQgImdpdCBncmVwIiBsZWFybmVkIHdoYXQgZnVuY3Rpb25zIGFuZCBzdWJyb3V0aW5lcworICAgaW4gRm9ydHJhbiwgUGFzY2FsIGFuZCBQZXJsIGxvb2sgbGlrZS4KKworICogImdpdCBmZXRjaCIgbGVhcm5lZCB0aGUgIi0tcmVjdXJzZS1zdWJtb2R1bGVzIiBvcHRpb24uCisKKyAqICJnaXQgbWVyZ2V0b29sIiB0ZWxscyB2aW0vZ3ZpbSB0byBzaG93IGEgdGhyZWUtd2F5IGRpZmYgYnkgZGVmYXVsdAorICAgKHVzZSB2aW1kaWZmMi9ndmltZGlmZjIgYXMgdGhlIHRvb2wgbmFtZSBmb3Igb2xkIGJlaGF2aW9yKS4KKworICogImdpdCBsb2cgLUc8cGF0dGVybj4iIGxpbWl0cyB0aGUgb3V0cHV0IHRvIGNvbW1pdHMgd2hvc2UgY2hhbmdlIGhhcworICAgYWRkZWQgb3IgZGVsZXRlZCBsaW5lcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJuLgorCisgKiAiZ2l0IHJlYWQtdHJlZSIgd2l0aCBubyBhcmd1bWVudCBhcyBhIHdheSB0byBlbXB0eSB0aGUgaW5kZXggaXMKKyAgIGRlcHJlY2F0ZWQ7IHdlIG1pZ2h0IHdhbnQgdG8gcmVtb3ZlIGl0IGluIHRoZSBmdXR1cmUuICBVc2VycyBjYW4KKyAgIHVzZSB0aGUgbmV3IC0tZW1wdHkgb3B0aW9uIHRvIGJlIG1vcmUgZXhwbGljaXQgaW5zdGVhZC4KKworICogImdpdCByZXBhY2sgLWYiIGRvZXMgbm90IHNwZW5kIGN5Y2xlcyB0byByZWNvbXByZXNzIG9iamVjdHMgaW4gdGhlCisgICBub24tZGVsdGEgcmVwcmVzZW50YXRpb24gYW55bW9yZSAodXNlIC1GIGlmIHlvdSByZWFsbHkgbWVhbiBpdAorICAgZS5nLiBhZnRlciB5b3UgY2hhbmdlZCB0aGUgY29yZS5jb21wcmVzc2lvbiB2YXJpYWJsZSBzZXR0aW5nKS4KKworICogImdpdCBtZXJnZSAtLWxvZyIgdXNlZCB0byBsaW1pdCB0aGUgcmVzdWx0aW5nIG1lcmdlIGxvZyB0byAyMAorICAgZW50cmllczsgdGhpcyBpcyBub3cgY3VzdG9taXphYmxlIGJ5IGdpdmluZyBlLmcuICItLWxvZz00NyIuCisKKyAqICJnaXQgbWVyZ2UiIG1heSB3b3JrIGJldHRlciB3aGVuIGFsbCBmaWxlcyB3ZXJlIG1vdmVkIG91dCBvZiBhCisgICBkaXJlY3RvcnkgaW4gb25lIGJyYW5jaCB3aGlsZSBhIG5ldyBmaWxlIGlzIGNyZWF0ZWQgaW4gcGxhY2Ugb2YgdGhhdAorICAgZGlyZWN0b3J5IGluIHRoZSBvdGhlciBicmFuY2guCisKKyAqICJnaXQgbWVyZ2UiIGxlYXJuZWQgdGhlICItLWFib3J0IiBvcHRpb24sIHN5bm9ueW1vdXMgdG8KKyAgICJnaXQgcmVzZXQgLS1tZXJnZSIgd2hlbiBhIG1lcmdlIGlzIGluIHByb2dyZXNzLgorCisgKiAiZ2l0IG5vdGVzIiBsZWFybmVkIHRoZSAibWVyZ2UiIHN1YmNvbW1hbmQgdG8gbWVyZ2Ugbm90ZXMgcmVmcy4KKyAgIEluIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG1hbnVhbCBjb25mbGljdCByZXNvbHV0aW9uLCB0aGVyZSBhcmUKKyAgIGFsc28gc2V2ZXJhbCBub3RlcyBtZXJnZSBzdHJhdGVnaWVzIGZvciBhdXRvbWF0aWNhbGx5IHJlc29sdmluZworICAgbm90ZXMgbWVyZ2UgY29uZmxpY3RzLgorCisgKiAiZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2giIGNhbiB1c2UgU0hBLTEgb2JqZWN0IG5hbWVzIHRvIG5hbWUgdGhlCisgICBjb21taXQgd2hpY2ggaXMgdG8gYmUgZml4ZWQgdXAgKGUuZy4gImZpeHVwISBlODNjNTE2MyIpLgorCisgKiBUaGUgZGVmYXVsdCAicmVjdXJzaXZlIiBtZXJnZSBzdHJhdGVneSBsZWFybmVkIHRoZSAtLXJlbmFtZS10aHJlc2hvbGQKKyAgIG9wdGlvbiB0byBpbmZsdWVuY2UgdGhlIHJlbmFtZSBkZXRlY3Rpb24sIHNpbWlsYXIgdG8gdGhlIC1NIG9wdGlvbgorICAgb2YgImdpdCBkaWZmIi4gIEZyb20gdGhlICJnaXQgbWVyZ2UiIGZyb250ZW5kLCB0aGUgIi1YPHN0cmF0ZWd5IG9wdGlvbj4iCisgICBpbnRlcmZhY2UsIGUuZy4gImdpdCBtZXJnZSAtWHJlbmFtZS10aHJlc2hvbGQ9NTAlIC4uLiIsIGNhbiBiZSB1c2VkCisgICB0byB0cmlnZ2VyIHRoaXMuCisKKyAqIFRoZSAicmVjdXJzaXZlIiBzdHJhdGVneSBhbHNvIGxlYXJuZWQgdG8gaWdub3JlIHZhcmlvdXMgd2hpdGVzcGFjZQorICAgY2hhbmdlczsgdGhlIG1vc3Qgbm90YWJsZSBpcyAtWGlnbm9yZS1zcGFjZS1hdC1lb2wuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCAiLS10by1jbWQiLCBzaW1pbGFyIHRvICItLWNjLWNtZCIsIHRvIHJlYWQKKyAgIHRoZSByZWNpcGllbnQgbGlzdCBmcm9tIGEgY29tbWFuZCBvdXRwdXQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCB0byByZWFkIGFuZCB1c2UgIlRvOiIgZnJvbSBpdHMgaW5wdXQgZmlsZXMuCisKKyAqIHlvdSBjYW4gZXh0ZW5kICJnaXQgc2hlbGwiLCB3aGljaCBpcyBvZnRlbiB1c2VkIG9uIGJveGVzIHRoYXQgYWxsb3cKKyAgIGdpdC1vbmx5IGxvZ2luIG92ZXIgc3NoIGFzIGxvZ2luIHNoZWxsLCB3aXRoIGEgY3VzdG9tIHNldCBvZgorICAgY29tbWFuZHMuCisKKyAqIFRoZSBjdXJyZW50IGJyYW5jaCBuYW1lIGluICJnaXQgc3RhdHVzIiBvdXRwdXQgY2FuIGJlIGNvbG9yZWQgZGlmZmVyZW50bHkKKyAgIGZyb20gdGhlIGdlbmVyaWMgaGVhZGVyIGNvbG9yIGJ5IHNldHRpbmcgdGhlICJjb2xvci5zdGF0dXMuYnJhbmNoIiB2YXJpYWJsZS4KKworICogImdpdCBzdWJtb2R1bGUgc3luYyIgdXBkYXRlcyBtZXRhaW5mb3JtYXRpb24gZm9yIGFsbCBzdWJtb2R1bGVzLAorICAgbm90IGp1c3QgdGhlIG9uZXMgdGhhdCBoYXZlIGJlZW4gY2hlY2tlZCBvdXQuCisKKyAqIGdpdHdlYiBjYW4gdXNlIGEgY3VzdG9tICdoaWdobGlnaHQnIGNvbW1hbmQgd2l0aCBpdHMgY29uZmlndXJhdGlvbiBmaWxlLgorCisgKiBvdGhlciBnaXR3ZWIgdXBkYXRlcy4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdGhlIHYxLjcuMy5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogImdpdCBsb2cgLS1hdXRob3I9bWUgLS1hdXRob3I9aGVyIiBkaWQgbm90IGZpbmQgY29tbWl0cyB3cml0dGVuIGJ5CisgICBtZSBvciBieSBoZXI7IGluc3RlYWQgaXQgbG9va2VkIGZvciBjb21taXRzIHdyaXR0ZW4gYnkgbWUgYW5kIGJ5CisgICBoZXIsIHdoaWNoIGlzIGltcG9zc2libGUuCisKKyAqICJnaXQgcHVzaCAtLXByb2dyZXNzIiBzaG93cyBwcm9ncmVzcyBpbmRpY2F0b3JzIG5vdy4KKworICogImdpdCByZWJhc2UgLWkiIHNob3dlZCBhIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlIHdoZW4gZ2l2ZW4gYQorICAgYnJhbmNoIG5hbWUgdGhhdCBkb2VzIG5vdCBleGlzdC4KKworICogImdpdCByZXBhY2siIHBsYWNlcyBpdHMgdGVtcG9yYXJ5IHBhY2tzIHVuZGVyICRHSVRfT0JKRUNUX0RJUkVDVE9SWS9wYWNrCisgICBpbnN0ZWFkIG9mICRHSVRfT0JKRUNUX0RJUkVDVE9SWS8gdG8gYXZvaWQgY3Jvc3MgZGlyZWN0b3J5IHJlbmFtZXMuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAtLW90aGVyLWZsYWdzIiBwYXNzZXMgZmxhZ3MgZG93bgorICAgdG8gaXRzIHN1Ymludm9jYXRpb25zLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZlYmQ3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMS50eHQKQEAgLTAsMCArMSw0NyBAQAorR2l0IHYxLjcuNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdoZW4gYW4gb2JqZWN0ICIkdHJlZTokcGF0aCIgZG9lcyBub3QgZXhpc3QsIGlmICRwYXRoIGRvZXMgZXhpc3QgaW4gdGhlCisgICBzdWJ0cmVlIG9mICR0cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHN1YmRpcmVjdG9yeSB0aGUgdXNlciBpcyBpbiwKKyAgIGdpdCBub3cgc3VnZ2VzdHMgdXNpbmcgIiR0cmVlOi4vJHBhdGgiIGluIGFkZGl0aW9uIHRvIHRoZSBhZHZpY2UgdG8gdXNlCisgICB0aGUgZnVsbCBwYXRoIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZS4KKworICogVGhlICItLWRhdGU9cmVsYXRpdmUiIG91dHB1dCBmb3JtYXQgdXNlZCB0byBzYXkgIlggeWVhcnMsIDEyIG1vbnRocyIKKyAgIHdoZW4gaXQgc2hvdWxkIGhhdmUgc2FpZCAiWCsxIHllYXJzIi4KKworICogVGhlIHNtYXJ0LUhUVFAgdHJhbnNmZXIgd2FzIGJyb2tlbiBpbiAxLjcuNSB3aGVuIHRoZSBjbGllbnQgbmVlZHMKKyAgIHRvIGlzc3VlIGEgc21hbGwgUE9TVCAod2hpY2ggdXNlcyBjb250ZW50LWxlbmd0aCkgYW5kIHRoZW4gYSBsYXJnZQorICAgUE9TVCAod2hpY2ggdXNlcyBjaHVua2VkKSBiYWNrIHRvIGJhY2suCisKKyAqICJnaXQgY2xlYW4iIHVzZWQgdG8gZmFpbCBvbiBhbiBlbXB0eSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgcmVhZGFibGUsCisgICBldmVuIHRob3VnaCBybWRpcigyKSBjb3VsZCByZW1vdmUgc3VjaCBhIGRpcmVjdG9yeS4gIE5vdyB3ZSBhdHRlbXB0IGl0CisgICBhcyB0aGUgbGFzdCByZXNvcnQuCisKKyAqIFRoZSAiLS1kaXJzdGF0IiBvcHRpb24gb2YgImRpZmYiIGZhbWlseSBvZiBjb21tYW5kcyB1c2VkIHRvIHRvdGFsbHkKKyAgIGlnbm9yZSBhIGNoYW5nZSB0aGF0IG9ubHkgcmVhcnJhbmdlZCBsaW5lcyB3aXRoaW4gYSBmaWxlLiAgU3VjaCBhCisgICBjaGFuZ2Ugbm93IGNvdW50cyBhcyBhdCBsZWFzdCBhIG1pbmltdW0gYnV0IG5vbiB6ZXJvIGNoYW5nZS4KKworICogVGhlICItLWRpcnN0YXQiIG9wdGlvbiBvZiAiZGlmZiIgZmFtaWx5IG9mIGNvbW1hbmRzIHVzZWQgdG8gdXNlIHRoZQorICAgcGF0aG5hbWUgaW4gdGhlIG9yaWdpbmFsLCBpbnN0ZWFkIG9mIHRoZSBwYXRobmFtZSBpbiB0aGUgcmVzdWx0LAorICAgd2hlbiByZW5hbWVzIGFyZSBpbnZvbHZlZC4KKworICogImdpdCBwYWNrLW9iamVjdCIgZGlkIG5vdCB0YWtlIGNvcmUuYmlnZmlsZXRocmVhc2hvbGQgaW50byBhY2NvdW50CisgICAodW5saWtlIGZhc3QtaW1wb3J0KTsgbm93IGl0IGRvZXMuCisKKyAqICJnaXQgcmVmbG9nIiBpZ25vcmVkIG9wdGlvbnMgbGlrZSAiLS1mb3JtYXQ9Li4iIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyAqICJnaXQgc3Rhc2ggYXBwbHkiIHVzZWQgdG8gcmVmdXNlIHRvIHdvcmsgaWYgdGhlcmUgd2FzIGFueSBjaGFuZ2UgaW4KKyAgIHRoZSB3b3JraW5nIHRyZWUsIGV2ZW4gd2hlbiB0aGUgY2hhbmdlIGRpZCBub3Qgb3ZlcmxhcCB3aXRoIHRoZSBjaGFuZ2UKKyAgIHRoZSBzdGFzaCByZWNvcmRlZC4KKworICogImdpdCBzdGFzaCBhcHBseSBAezk5OTk5fSIgd2FzIG5vdCBkaWFnbm9zZWQgYXMgYW4gZXJyb3IsIGV2ZW4gd2hlbiB5b3UKKyAgIGRpZCBub3QgaGF2ZSB0aGF0IG1hbnkgc3Rhc2ggZW50cmllcy4KKworICogQW4gZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgc2VuZC1lbWFpbCIgdG8gZGlhZ25vc2UgYSBicm9rZW4gU01UUAorICAgY29ubmVjdGlvbiBjb25maWd1cmF0aW9uIGxhY2tlZCBhIHNwYWNlIGJldHdlZW4gImhlbGxvPTxzbXRwLWRvbWFpbj4iCisgICBhbmQgInBvcnQ9PHNtdHAtc2VydmVyLXBvcnQ+Ii4KKworQW5kIG90aGVyIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTFlYjdjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS4yLnR4dApAQCAtMCwwICsxLDU3IEBACitHaXQgdjEuNy41LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHJlbGVhc2Ugbm90ZXMgdG8gMS43LjUuMSBmb3Jnb3QgdG8gbWVudGlvbjoKKworICogImdpdCBzdGFzaCAtcCAtLW5vLWtlZXAtaW5kZXgiIGFuZCAiZ2l0IHN0YXNoIC0tbm8ta2VlcC1pbmRleCAtcCIgbm93CisgICBtZWFuIHRoZSBzYW1lIHRoaW5nLgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiAoaGVuY2UgImdpdCBwdXNoIiBvdmVyIGdpdCBuYXRpdmUgcHJvdG9jb2wpIGhhZCBhCisgICBzdWJ0bGUgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2suCisKK0ZpeGVzIHNpbmNlIHYxLjcuNS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGFkZCAtcCIgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIGEgaHVuayBpcyBzcGxpdCBhbmQgdGhlbgorICAgb25lIG9mIHRoZW0gd2FzIGdpdmVuIHRvIHRoZSBlZGl0b3IuCisKKyAqICJnaXQgYWRkIC11IiBkaWQgbm90IHJlc29sdmUgYSBjb25mbGljdCB3aGVyZSBvdXIgaGlzdG9yeSBkZWxldGVkIGFuZAorICAgdGhlaXIgaGlzdG9yeSBtb2RpZmllZCB0aGUgc2FtZSBmaWxlLCBhbmQgdGhlIHdvcmtpbmcgdHJlZSByZXNvbHZlZCB0bworICAga2VlcCBhIGZpbGUuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBkaWQgbm90IGtub3cgdGhhdCBDVlNOVCBzdG9yZXMgaXRzIHBhc3N3b3JkIGZpbGUgaW4gYQorICAgbG9jYXRpb24gZGlmZmVyZW50IGZyb20gdGhlIHRyYWRpdGlvbmFsIENWUy4KKworICogImdpdCBkaWZmLWZpbGVzIiBkaWQgbm90IHNob3cgdGhlIG1vZGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgd29ya2luZworICAgdHJlZSBzaWRlIG9mIGFuIHVubWVyZ2VkIHBhdGggY29ycmVjdGx5LgorCisgKiAiZ2l0IGRpZmYgLU0gLS1jYWNoZWQiIHVzZWQgdG8gdXNlIHVubWVyZ2VkIHBhdGggYXMgYSBwb3NzaWJsZSByZW5hbWUKKyAgIHNvdXJjZSBjYW5kaWRhdGUsIHdoaWNoIG1hZGUgbm8gc2Vuc2UuCisKKyAqIFRoZSBvcHRpb24gbmFtZSBwYXJzZXIgaW4gImdpdCBmYXN0LWltcG9ydCIgdXNlZCBwcmVmaXggbWF0Y2hlcyBmb3IKKyAgIHNvbWUgb3B0aW9ucyB3aGVyZSBpdCBzaG91bGRuJ3QsIGFuZCBhY2NlcHRlZCBub24tZXhpc3RlbnQgb3B0aW9ucywKKyAgIGUuZy4gIi0tcmVsYXRpdmUtbWFya3NtaXRoIiBvciAiLS1mb3JjZXBzIi4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGRpZCBub3QgcXVvdGUgUkZDODIyIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUKKyAgIGVtYWlsIGFkZHJlc3MgKGUuZyBGcm9tOiBKdW5pbyBDLiBIYW1hbm8gPGpjaEBleGFtcGxlLmNvbT4sIG5vdAorICAgRnJvbTogIkp1bmlvIEMuIEhhbWFubyIgPGpjaEBleGFtcGxlLmNvbT4pLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgd2hlbiBydW4gd2l0aCAiLS1xdWlldCIgb3B0aW9uIHVzZWQgdG8gcHJvZHVjZSBhCisgICBub25zZW5zZSByZXN1bHQgdGhhdCBjb25zaXN0cyBvZiBhbHRlcm5hdGluZyBlbXB0eSBvdXRwdXQuCisKKyAqIEluICJnaXQgbWVyZ2UiLCBwZXItYnJhbmNoIGJyYW5jaC48bmFtZT4ubWVyZ2VvcHRpb25zIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlcyBkaWQgbm90IG92ZXJyaWRlIHRoZSBmYWxsYmFjayBkZWZhdWx0IG1lcmdlLjxvcHRpb24+CisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBzdWNoIGFzIG1lcmdlLmZmLCBtZXJnZS5sb2csIGV0Yy4KKworICogImdpdCBtZXJnZS1vbmUtZmlsZSIgZGlkIG5vdCBob25vciBHSVRfV09SS19UUkVFIHNldHRpbmdzIHdoZW4KKyAgIGhhbmRsaW5nIGEgImJvdGggc2lkZXMgYWRkZWQsIGRpZmZlcmVudGx5IiBjb25mbGljdC4KKworICogImdpdCBtZXJnZXRvb2wiIGRpZCBub3QgaGFuZGxlIGNvbmZsaWN0ZWQgc3VibW91ZHVsZXMgZ3JhY2VmdWxseS4KKworICogImdpdC1wNCIgKGluIGNvbnRyaWIpIHVzZWQgYSB3cm9uZyBiYXNlIGltYWdlIHdoaWxlIG1lcmdlIGEgZmlsZSB0aGF0CisgICB3YXMgYWRkZWQgb24gYm90aCBicmFuY2hlcyBkaWZmZXJlbnRseS4KKworICogImdpdCByZWJhc2UgLWkgLXAiIGZhaWxlZCB0byBwcmVzZXJ2ZSB0aGUgaGlzdG9yeSB3aGVuIHRoZXJlIGlzIGEKKyAgIHJlZHVuZGFudCBtZXJnZSBjcmVhdGVkIHdpdGggdGhlIC0tbm8tZmYgb3B0aW9uLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMDMzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy41LjMudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2MS43LjUuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGJhc2ggY29tcGxldGlvbiBzY3JpcHRzIHNob3VsZCBjb3JyZWN0bHkgd29yayB1c2luZyB6c2gncyBiYXNoCisgICBjb21wbGV0aW9uIGVtdWxhdGlvbiBsYXllciBub3cuCisKKyAqIFNldHRpbmcgJChwcmVmaXgpIGluIGNvbmZpZy5tYWsgZGlkIG5vdCBhZmZlY3Qgd2hlcmUgZXRjL2dpdGNvbmZpZworICAgZmlsZSBpcyByZWFkIGZyb20sIGV2ZW4gdGhvdWdoIHBhc3NpbmcgaXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIG9mCisgICAkKE1BS0UpIGRpZC4KKworICogVGhlIGxvZ2ljIHRvIGhhbmRsZSAiJiIgKGV4cGFuZCB0byBVTklYIHVzZXJuYW1lKSBpbiBHRUNPUyBmaWVsZAorICAgbWlzY291bnRlZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGl0IGZvcm1hdHRlZC4KKworICogImdpdCBjaGVycnktcGljayAtcyByZXNvbHZlIiBmYWlsZWQgdG8gY2hlcnJ5LXBpY2sgYSByb290IGNvbW1pdC4KKworICogImdpdCBkaWZmIC0td29yZC1kaWZmIiBtaXNiZWhhdmVkIHdoZW4gZGlmZi5zdXBwcmVzcy1ibGFuay1lbXB0eSB3YXMKKyAgIGluIGVmZmVjdC4KKworICogImdpdCBsb2cgLS1zdGRpbiBwYXRoIiB3aXRoIGFuIGlucHV0IHRoYXQgaGFzIGFkZGl0aW9uYWwgcGF0aHNwZWMKKyAgIHVzZWQgdG8gY29ycnVwdCBtZW1vcnkuCisKKyAqICJnaXQgc2VuZC1wYWNrIiAoaGVuY2UgImdpdCBwdXNoIikgb3ZlciBzbWFsdC1IVFRQIHByb3RvY29sIGNvdWxkCisgICBkZWFkbG9jayB3aGVuIHRoZSBjbGllbnQgc2lkZSBwYWNrLW9iamVjdCBkaWVkIGVhcmx5LgorCisgKiBDb21wcmVzc2VkIHRhcmJhbGwgZ2l0d2ViIGdlbmVyYXRlcyB1c2VkIHRvIGJlIG1hZGUgd2l0aCB0aGUgdGltZXN0YW1wCisgICBvZiB0aGUgdGFyYmFsbCBnZW5lcmF0aW9uOyB0aGlzIHdhcyBiYWQgYmVjYXVzZSBzbmFwc2hvdCBmcm9tIHRoZSBzYW1lCisgICB0cmVlIHNob3VsZCByZXN1bHQgaW4gYSBzYW1lIHRhcmJhbGwuCisKK0FuZCBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc5NmRmMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUuNC50eHQKQEAgLTAsMCArMSwyMSBAQAorR2l0IHYxLjcuNS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgc2luZ2xlLWtleSBtb2RlIG9mICJnaXQgYWRkIC1wIiB3YXMgZWFzaWx5IGZvb2xlZCBpbnRvIHRoaW5raW5nCisgICB0aGF0IGl0IHdhcyB0b2xkIHRvIGFkZCBldmVyeXRoaW5nICgnYScpIHdoZW4gdXAtYXJyb3cgd2FzIHByZXNzZWQgYnkKKyAgIG1pc3Rha2UuCisKKyAqIFNldHRpbmcgYSBnaXQgY29tbWFuZCB0aGF0IHVzZXMgY3VzdG9tIGNvbmZpZ3VyYXRpb24gdmlhICItYyB2YXI9dmFsIgorICAgYXMgYW4gYWxpYXMgY2F1c2VkIGEgY3Jhc2ggZHVlIHRvIGEgcmVhbGxvYygzKSBmYWlsdXJlLgorCisgKiAiZ2l0IGRpZmYgLUMgLUMiIHVzZWQgdG8gZGlzYWJsZSB0aGUgcmVuYW1lIGRldGVjdGlvbiBlbnRpcmVseSB3aGVuCisgICB0aGVyZSBhcmUgdG9vIG1hbnkgY29weSBjYW5kaWRhdGUgcGF0aHMgaW4gdGhlIHRyZWU7IG5vdyBpdCBmYWxscworICAgYmFjayB0byAiLUMiIHdoZW4gZG9pbmcgc28gd291bGQga2VlcCB0aGUgY29weSBjYW5kaWRhdGUgcGF0aHMKKyAgIHVuZGVyIHRoZSByZW5hbWUgZGV0ZWN0aW9uIGxpbWl0LgorCisgKiAiZ2l0IHJlcmVyZSIgZGlkIG5vdCBkaWFnbm9zZSBhIGNvcnJ1cHQgTUVSR0VfUlIgZmlsZSBpbiBzb21lIGNhc2VzLgorCitBbmQgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3OTE5YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjUudHh0CkBAIC0wLDAgKzEsMTMyIEBACitHaXQgdjEuNy41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitVcGRhdGVzIHNpbmNlIHYxLjcuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVmFyaW91cyBNaW5HVyBwb3J0YWJpbGl0eSBmaXhlcy4KKworICogVmFyaW91cyBnaXQtcDQgZW5oYW5jZW1lbnRzIChpbiBjb250cmliKS4KKworICogVmFyaW91cyB2Y3Mtc3ZuLCBnaXQtc3ZuIGFuZCBnaXRrIGVuaGFuY2VtZW50cyBhbmQgZml4ZXMuCisKKyAqIFZhcmlvdXMgZ2l0LWd1aSB1cGRhdGVzICgwLjE0LjApLgorCisgKiBVcGRhdGUgdG8gbW9yZSBtb2Rlcm4gSFAtVVggcG9ydC4KKworICogVGhlIGNvZGViYXNlIGlzIGdldHRpbmcgcHJlcGFyZWQgZm9yIGkxOG4vbDEwbjsgbm8gdHJhbnNsYXRlZAorICAgc3RyaW5ncyBub3IgdHJhbnNsYXRpb24gbWVjaGFuaXNtIGluIHRoZSBjb2RlIHlldCwgYnV0IHRoZSBzdHJpbmdzCisgICBhcmUgYmVpbmcgbWFya2VkIGZvciBsMTBuLgorCisgKiBUaGUgYmFzaCBjb21wbGV0aW9uIHNjcmlwdCBjYW4gbm93IGNvbXBsZXRlIHN5bW1ldHJpYyBkaWZmZXJlbmNlCisgICBmb3IgImdpdCBkaWZmIiBjb21tYW5kLCBlLmcuICJnaXQgZGlmZiAuLi5icmE8VEFCPiIuCisKKyAqIFRoZSBkZWZhdWx0IG1pbmltdW0gbGVuZ3RoIG9mIGFiYnJldmlhdGVkIGFuZCB1bmlxdWUgb2JqZWN0IG5hbWVzCisgICBjYW4gbm93IGJlIGNvbmZpZ3VyZWQgYnkgc2V0dGluZyB0aGUgY29yZS5hYmJyZXYgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUuCisKKyAqICJnaXQgYXBwbHkgLXYiIHJlcG9ydHMgb2Zmc2V0IGxpbmVzIHdoZW4gdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGF0CisgICB0aGUgZXhhY3QgbG9jYXRpb24gcmVjb3JkZWQgaW4gdGhlIGRpZmYgb3V0cHV0LgorCisgKiAiZ2l0IGNvbmZpZyIgdXNlZCB0byBiZSBhbHNvIGtub3duIGFzICJnaXQgcmVwby1jb25maWciLCBidXQgdGhlIG9sZAorICAgbmFtZSBpcyBub3cgb2ZmaWNpYWxseSBkZXByZWNhdGVkLgorCisgKiAiZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIDxjb21taXQ+IiBpcyBhIG1vcmUgdXNlciBmcmllbmRseSBzeW5vbnltIGZvcgorICAgImdpdCBjaGVja291dCA8Y29tbWl0Pl4wIi4KKworICogImdpdCBjaGVja291dCIgcGVyZm9ybWVkIG9uIGRldGFjaGVkIEhFQUQgZ2l2ZXMgYSB3YXJuaW5nIGFuZAorICAgYWR2aWNlIHdoZW4gdGhlIGNvbW1pdCBiZWluZyBsZWZ0IGJlaGluZCB3aWxsIGJlY29tZSB1bnJlYWNoYWJsZSBmcm9tCisgICBhbnkgYnJhbmNoIG9yIHRhZy4KKworICogImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IiBjYW4gYmUgdG9sZCB0byB1c2UgYSBjdXN0b20gbWVyZ2UKKyAgIHN0cmF0ZWd5LCBzaW1pbGFyIHRvICJnaXQgcmViYXNlIi4KKworICogImdpdCBjaGVycnktcGljayIgcmVtZW1iZXJzIHdoaWNoIGNvbW1pdCBmYWlsZWQgdG8gYXBwbHkgd2hlbiBpdCBpcworICAgc3RvcHBlZCBieSBjb25mbGljdHMsIG1ha2luZyBpdCB1bm5lY2Vzc2FyeSB0byB1c2UgImNvbW1pdCAtYyAkY29tbWl0IgorICAgdG8gY29uY2x1ZGUgaXQuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBiYWlscyBvdXQgaW1tZWRpYXRlbHkgd2hlbiB0aGUgY3ZzIHNlcnZlciBjYW5ub3QgYmUKKyAgIHJlYWNoZWQsIHdpdGhvdXQgc3Bld2luZyB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcyB0aGF0IGNvbXBsYWluIGFib3V0CisgICB0aGUgc2VydmVyIHJlc3BvbnNlIGl0IG5ldmVyIGdvdC4KKworICogImdpdCBmZXRjaCIgdnMgImdpdCB1cGxvYWQtcGFjayIgdHJhbnNmZXIgbGVhcm5lZCAnbm8tZG9uZScKKyAgIHByb3RvY29sIGV4dGVuc2lvbiB0byBzYXZlIG9uZSByb3VuZC10cmlwIGFmdGVyIHRoZSBjb250ZW50CisgICBuZWdvdGlhdGlvbiBpcyBkb25lLiBUaGlzIHNhdmVzIG9uZSBIVFRQIFJQQywgcmVkdWNpbmcgdGhlIG92ZXJhbGwKKyAgIGxhdGVuY3kgZm9yIGEgdHJpdmlhbCBmZXRjaC4KKworICogImdpdCBmZXRjaCIgY2FuIGJlIHRvbGQgdG8gcmVjdXJzaXZlbHkgZmV0Y2ggc3VibW9kdWxlcyBvbi1kZW1hbmQuCisKKyAqICJnaXQgZ3JlcCAtZiA8ZmlsZW5hbWU+IiBsZWFybmVkIHRvIHRyZWF0ICItIiBhcyAicmVhZCBmcm9tIHRoZQorICAgc3RhbmRhcmQgaW5wdXQgc3RyZWFtIi4KKworICogImdpdCBncmVwIC0tbm8taW5kZXgiIGRpZCBub3QgaG9ub3IgcGF0aHNwZWNzIGNvcnJlY3RseSwgcmV0dXJuaW5nCisgICBwYXRocyBvdXRzaWRlIHRoZSBzcGVjaWZpZWQgYXJlYS4KKworICogImdpdCBpbml0IiBsZWFybmVkIHRoZSAtLXNlcGFyYXRlLWdpdC1kaXIgb3B0aW9uIHRvIGFsbG93IHRoZSBnaXQKKyAgIGRpcmVjdG9yeSBmb3IgYSBuZXcgcmVwb3NpdG9yeSBjcmVhdGVkIGVsc2V3aGVyZSBhbmQgbGlua2VkIHZpYSB0aGUKKyAgIGdpdGRpciBtZWNoYW5pc20uIFRoaXMgaXMgcHJpbWFyaWx5IHRvIGhlbHAgc3VibW9kdWxlIHN1cHBvcnQgbGF0ZXIKKyAgIHRvIHN3aXRjaCBiZXR3ZWVuIGEgYnJhbmNoIG9mIHN1cGVycHJvamVjdCB0aGF0IGhhcyB0aGUgc3VibW9kdWxlCisgICBhbmQgYW5vdGhlciB0aGF0IGRvZXMgbm90LgorCisgKiAiZ2l0IGxvZyIgdHlwZSBjb21tYW5kcyBub3cgdW5kZXJzdGFuZCBnbG9iYmluZyBwYXRoc3BlY3MuICBZb3UKKyAgIGNhbiBzYXkgImdpdCBsb2cgLS0gJyoudHh0JyIgZm9yIGV4YW1wbGUuCisKKyAqICJnaXQgbG9nIiBmYW1pbHkgb2YgY29tbWFuZHMgbGVhcm5lZCAtLWNoZXJyeSBhbmQgLS1jaGVycnktbWFyaworICAgb3B0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIHZpZXcgdHdvIGRpdmVyZ2VkIGJyYW5jaGVzIHdoaWxlIG9taXR0aW5nCisgICBvciBoaWdobGlnaHRpbmcgZXF1aXZhbGVudCBjaGFuZ2VzIHRoYXQgYXBwZWFyIG9uIGJvdGggc2lkZXMgb2YgYQorICAgc3ltbWV0cmljIGRpZmZlcmVuY2UgKGUuZy4gImxvZyAtLWNoZXJyeSBBLi4uQiIpLgorCisgKiBBIGxhenkgImdpdCBtZXJnZSIgdGhhdCBkaWRuJ3Qgc2F5IHdoYXQgdG8gbWVyZ2UgdXNlZCB0byBiZSBhbiBlcnJvci4KKyAgIFdoZW4gcnVuIG9uIGEgYnJhbmNoIHRoYXQgaGFzIGFuIHVwc3RyZWFtIGRlZmluZWQsIGhvd2V2ZXIsIHRoZSBjb21tYW5kCisgICBub3cgbWVyZ2VzIGZyb20gdGhlIGNvbmZpZ3VyZWQgdXBzdHJlYW0uCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIGhvdyB0byBkcml2ZSAiYmV5b25kIGNvbXBhcmUgMyIgYXMgd2VsbC4KKworICogImdpdCByZXJlcmUgZm9yZ2V0IiB3aXRob3V0IHBhdGhzcGVjIHVzZWQgdG8gZm9yZ2V0IGFsbCB0aGUgc2F2ZWQKKyAgIGNvbmZsaWN0cyB0aGF0IHJlbGF0ZSB0byB0aGUgY3VycmVudCBtZXJnZTsgaXQgbm93IHJlcXVpcmVzIHlvdSB0bworICAgZ2l2ZSBpdCBwYXRoc3BlY3MuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRyZXZzIC0tICRwYXRoc3BlYyIgbm93IGxpbWl0cyB0aGUgb2JqZWN0cyBsaXN0ZWQKKyAgIGluIGl0cyBvdXRwdXQgcHJvcGVybHkgd2l0aCB0aGUgcGF0aHNwZWMsIGluIHByZXBhcmF0aW9uIGZvciBuYXJyb3cKKyAgIGNsb25lcy4KKworICogImdpdCBwdXNoIiB3aXRoIG5vIHBhcmFtZXRlcnMgZ2l2ZXMgYmV0dGVyIGFkdmljZSBtZXNzYWdlcyB3aGVuCisgICAidHJhY2tpbmciIGlzIHVzZWQgYXMgdGhlIHB1c2guZGVmYXVsdCBzZW1hbnRpY3Mgb3IgdGhlcmUgaXMgbm8gcmVtb3RlCisgICBjb25maWd1cmVkIHlldC4KKworICogQSBwb3NzaWJsZSB2YWx1ZSB0byB0aGUgInB1c2guZGVmYXVsdCIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwKKyAgICd0cmFja2luZycsIGdhaW5lZCBhIHN5bm9ueW0gdGhhdCBtb3JlIG5hdHVyYWxseSBkZXNjcmliZXMgd2hhdCBpdAorICAgZG9lcywgJ3Vwc3RyZWFtJy4KKworICogImdpdCByZXJlcmUiIGxlYXJuZWQgYSBuZXcgc3ViY29tbWFuZCAicmVtYWluaW5nIiB0aGF0IGlzIHNpbWlsYXIgdG8KKyAgICJzdGF0dXMiIGFuZCBsaXN0cyB0aGUgcGF0aHMgdGhhdCBoYWQgY29uZmxpY3RzIHdoaWNoIGFyZSBrbm93biB0bworICAgcmVyZXJlLCBidXQgZXhjbHVkZXMgdGhlIHBhdGhzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbWFya2VkIGFzCisgICByZXNvbHZlZCBpbiB0aGUgaW5kZXggZnJvbSBpdHMgb3V0cHV0LiAgImdpdCBtZXJnZXRvb2wiIGhhcyBiZWVuCisgICB1cGRhdGVkIHRvIHVzZSB0aGlzIGZhY2lsaXR5LgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjcuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBvZiB0aGUgZml4ZXMgaW4gdGhlIHYxLjcuNC5YIG1haW50ZW5hbmNlIHNlcmllcyBhcmUgaW5jbHVkZWQgaW4gdGhpcworcmVsZWFzZSwgdW5sZXNzIG90aGVyd2lzZSBub3RlZC4KKworICogImdpdCBmZXRjaCIgZnJvbSBhIGNsaWVudCB0aGF0IGlzIG1vc3RseSBmb2xsb3dpbmcgdGhlIHJlbW90ZQorICAgbmVlZGxlc3NseSB0b2xkIGFsbCBvZiBpdHMgcmVmcyB0byB0aGUgc2VydmVyIGZvciBib3RoIHNpZGVzIHRvCisgICBjb21wdXRlIHRoZSBzZXQgb2Ygb2JqZWN0cyB0aGF0IG5lZWQgdG8gYmUgdHJhbnNmZXJyZWQgZWZmaWNpZW50bHksCisgICBpbnN0ZWFkIG9mIHN0b3BwaW5nIHdoZW4gdGhlIHNlcnZlciBoZWFyZCBlbm91Z2guIEluIGEgcHJvamVjdCB3aXRoCisgICBtYW55IHRhZ3MsIHRoaXMgdHVybnMgb3V0IHRvIGJlIGV4dHJlbWVseSB3YXN0ZWZ1bCwgZXNwZWNpYWxseSBvdmVyCisgICB0aGUgc21hcnQgSFRUUCB0cmFuc3BvcnQgKHNwL21haW50LXt1cGxvYWQsZmV0Y2h9LXBhY2stc3RvcC1lYXJseX4xKS4KKworICogImdpdCBmZXRjaCIgcnVuIGZyb20gYSByZXBvc2l0b3J5IHRoYXQgdXNlcyB0aGUgc2FtZSByZXBvc2l0b3J5IGFzCisgICBpdHMgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSBhcyB0aGUgcmVwb3NpdG9yeSBpdCBpcyBmZXRjaGluZyBmcm9tCisgICBkaWQgbm90IHRlbGwgdGhlIHNlcnZlciB0aGF0IGl0IGFscmVhZHkgaGFzIGFjY2VzcyB0byBvYmplY3RzCisgICByZWFjaGFibGUgZnJvbSB0aGUgcmVmcyBpbiB0aGVpciBjb21tb24gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSwKKyAgIGNhdXNpbmcgaXQgdG8gZmV0Y2ggdW5uZWNlc3Nhcnkgb2JqZWN0cyAoamMvbWFpbnQtZmV0Y2gtYWx0KS4KKworICogImdpdCByZW1vdGUgYWRkIC0tbWlycm9yIiBjcmVhdGVkIGEgY29uZmlndXJhdGlvbiB0aGF0IGlzIHN1aXRhYmxlIGZvcgorICAgZG9pbmcgYm90aCBhIG1pcnJvciBmZXRjaCBhbmQgYSBtaXJyb3IgcHVzaCBhdCB0aGUgc2FtZSB0aW1lLCB3aGljaAorICAgbWFkZSBsaXR0bGUgc2Vuc2UuICBXZSBub3cgd2FybiBhbmQgcmVxdWlyZSB0aGUgY29tbWFuZCBsaW5lIHRvIHNwZWNpZnkKKyAgIGVpdGhlciAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJlNDZhYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMS50eHQKQEAgLTAsMCArMSw2MyBAQAorR2l0IHYxLjcuNi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFZhcmlvdXMgY29kZXBhdGhzIHRoYXQgaW52b2tlZCB6bGliIGRlZmxhdGUvaW5mbGF0ZSBhc3N1bWVkIHRoYXQgdGhlc2UKKyAgIGZ1bmN0aW9ucyBjYW4gY29tcHJlc3Mgb3IgdW5jb21wcmVzcyBtb3JlIHRoYW4gNEdCIGRhdGEgaW4gb25lIGNhbGwgb24KKyAgIHBsYXRmb3JtcyB3aXRoIDY0LWJpdCBsb25nLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgdW5leGVjdXRhYmxlIiByZXBvcnRlZCB0aGF0ICJ1bmV4ZWN1dGFibGUiIHdhcyBub3QgZm91bmQsIGV2ZW4KKyAgIHRob3VnaCB0aGUgYWN0dWFsIGVycm9yIHdhcyB0aGF0ICJ1bmV4ZWN1dGFibGUiIHdhcyBmb3VuZCBidXQgZGlkCisgICBub3QgaGF2ZSBhIHByb3BlciBzaGUtYmFuZyBsaW5lIHRvIGJlIGV4ZWN1dGVkLgorCisgKiBFcnJvciBleGl0cyBmcm9tICRQQUdFUiB3ZXJlIHNpbGVudGx5IGlnbm9yZWQuCisKKyAqICJnaXQgY2hlY2tvdXQgLWIgPGJyYW5jaD4iIHdhcyBjb25mdXNlZCB3aGVuIGF0dGVtcHRpbmcgdG8gY3JlYXRlIGEKKyAgIGJyYW5jaCB3aG9zZSBuYW1lIGVuZHMgd2l0aCAiLWciIGZvbGxvd2VkIGJ5IGhleGFkZWNpbWFsIGRpZ2l0cywKKyAgIGFuZCByZWZ1c2VkIHRvIHdvcmsuCisKKyAqICJnaXQgY2hlY2tvdXQgLWIgPGJyYW5jaD4iIHNvbWV0aW1lcyB3cm90ZSBhIGJvZ3VzIHJlZmxvZyBlbnRyeSwKKyAgIGNhdXNpbmcgbGF0ZXIgImdpdCBjaGVja291dCAtIiB0byBmYWlsLgorCisgKiAiZ2l0IGRpZmYgLS1jYyIgbGVhcm5lZCB0byBjb3JyZWN0bHkgaWdub3JlIGJpbmFyeSBmaWxlcy4KKworICogImdpdCBkaWZmIC1jLy0tY2MiIG1pc2hhbmRsZWQgYSBkZWxldGlvbiB0aGF0IHJlc29sdmVzIGEgY29uZmxpY3QsIGFuZAorICAgbG9va2VkIGluIHRoZSB3b3JraW5nIHRyZWUgaW5zdGVhZC4KKworICogImdpdCBmYXN0LWV4cG9ydCIgZm9yZ290IHRvIHF1b3RlIHBhdGhuYW1lcyB3aXRoIHVuc2FmZSBjaGFyYWN0ZXJzCisgICBpbiBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IGZldGNoIiBvdmVyIHNtYXJ0LWh0dHAgdHJhbnNwb3J0IHVzZWQgdG8gYWJvcnQgd2hlbiB0aGUKKyAgIHJlcG9zaXRvcnkgd2FzIHVwZGF0ZWQgYmV0d2VlbiB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIGFuZCB0aGUKKyAgIHN1YnNlcXVlbnQgb2JqZWN0IHRyYW5zZmVyLgorCisgKiAiZ2l0IGZldGNoIiBkaWQgbm90IHJlY3Vyc2UgaW50byBzdWJtb2R1bGVzIGluIHN1YmRpcmVjdG9yaWVzLgorCisgKiAiZ2l0IGxzLXRyZWUiIGRpZCBub3QgZXJyb3Igb3V0IHdoZW4gYXNrZWQgdG8gc2hvdyBhIGNvcnJ1cHQgdHJlZS4KKworICogImdpdCBwdWxsIiB3aXRob3V0IGFueSBhcmd1bWVudCBsZWZ0IGFuIGV4dHJhIHdoaXRlc3BhY2UgYWZ0ZXIgdGhlCisgICBjb21tYW5kIG5hbWUgaW4gaXRzIHJlZmxvZy4KKworICogImdpdCBwdXNoIC0tcXVpZXQiIHdhcyBub3QgcmVhbGx5IHF1aWV0LgorCisgKiAiZ2l0IHJlYmFzZSAtaSAtcCIgaW5jb3JyZWN0bHkgZHJvcHBlZCBjb21taXRzIGZyb20gc2lkZSBicmFuY2hlcy4KKworICogImdpdCByZXNldCBbPGNvbW1pdD5dIHBhdGhzLi4uIiBkaWQgbm90IHJlc2V0IHRoZSBpbmRleCBlbnRyeSBjb3JyZWN0bHkKKyAgIGZvciB1bm1lcmdlZCBwYXRocy4KKworICogImdpdCBzdWJtb2R1bGUgYWRkIiBkaWQgbm90IGFsbG93IGEgcmVsYXRpdmUgcmVwb3NpdG9yeSBwYXRoIHdoZW4KKyAgIHRoZSBzdXBlcnByb2plY3QgZGlkIG5vdCBoYXZlIGFueSBkZWZhdWx0IHJlbW90ZSB1cmwuCisKKyAqICJnaXQgc3VibW9kdWxlIGZvcmVhY2giIGZhaWxlZCB0byBjb3JyZWN0bHkgZ2l2ZSB0aGUgc3RhbmRhcmQgaW5wdXQgdG8KKyAgIHRoZSB1c2VyLXN1cHBsaWVkIGNvbW1hbmQgaXQgaW52b2tlZC4KKworICogc3VibW9kdWxlcyB0aGF0IHRoZSB1c2VyIGhhcyBuZXZlciBzaG93ZWQgaW50ZXJlc3QgaW4gYnkgcnVubmluZworICAgImdpdCBzdWJtb2R1bGUgaW5pdCIgd2FzIGluY29ycmVjdGx5IG1hcmtlZCBhcyBpbnRlcmVzdGluZyBieSAiZ2l0CisgICBzdWJtb2R1bGUgc3luYyIuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXF1aWV0IiB3YXMgbm90IHJlYWxseSBxdWlldC4KKworICAqICJnaXQgdGFnIC1sIDxnbG9iPi4uLiIgZGlkIG5vdCB0YWtlIG11bHRpcGxlIGdsb2IgcGF0dGVybnMgZnJvbSB0aGUKKyAgIGNvbW1hbmQgbGluZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YWU0MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjIudHh0CkBAIC0wLDAgKzEsOCBAQAorR2l0IHYxLjcuNi4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiB2MS43LjYuMSBicm9rZSAiZ2l0IHB1c2ggLS1xdWlldCI7IGl0IHVzZWQgdG8gYmUgYSBuby1vcCBhZ2FpbnN0IGFuIG9sZAorICAgdmVyc2lvbiBvZiBHaXQgcnVubmluZyBvbiB0aGUgb3RoZXIgZW5kLCBidXQgdjEuNy42LjEgbWFkZSBpdCBhYm9ydC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1OTcxODMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjMudHh0CkBAIC0wLDAgKzEsMjQgQEAKK0dpdCB2MS43LjYuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjYuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCAtYyB2YXI9dmFsdWUgc3ViY21kIiBtaXNwYXJzZWQgdGhlIGN1c3RvbSBjb25maWd1cmF0aW9uIHdoZW4KKyAgIHZhbHVlIGNvbnRhaW5lZCBhbiBlcXVhbCBzaWduLgorCisgKiAiZ2l0IGZldGNoIiBoYWQgYSBtYWpvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9uLCB3YXN0aW5nIG1hbnkKKyAgIG5lZWRsZXNzIGN5Y2xlcyBpbiBhIHJlcG9zaXRvcnkgd2hlcmUgdGhlcmUgaXMgbm8gc3VibW9kdWxlcworICAgcHJlc2VudC4gVGhpcyB3YXMgZXNwZWNpYWxseSBiYWQsIHdoZW4gdGhlcmUgd2VyZSBtYW55IHJlZnMuCisKKyAqICJnaXQgcmVmbG9nICRyZWZuYW1lIiBkaWQgbm90IGRlZmF1bHQgdG8gdGhlICJzaG93IiBzdWJjb21tYW5kIGFzCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhZHZlcnRpc2VkIHRoZSBjb21tYW5kIHRvIGRvLgorCisgKiAiZ2l0IHJlc2V0IiBkaWQgbm90IGxlYXZlIG1lYW5pbmdmdWwgbG9nIG1lc3NhZ2UgaW4gdGhlIHJlZmxvZy4KKworICogImdpdCBzdGF0dXMgLS1pZ25vcmVkIiBkaWQgbm90IHNob3cgaWdub3JlZCBpdGVtcyB3aGVuIHRoZXJlIGlzIG5vCisgICB1bnRyYWNrZWQgaXRlbXMuCisKKyAqICJnaXQgdGFnIC0tY29udGFpbnMgJGNvbW1pdCIgd2FzIHVubmVjZXNzYXJpbHkgaW5lZmZpY2llbnQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxOWFjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjQudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2MS43LjYuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjYuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGVycm9yIHJlcG9ydGluZyBsb2dpYyBvZiAiZ2l0IGFtIiB3aGVuIHRoZSBjb21tYW5kIGlzIGZlZCBhIGZpbGUKKyAgIHdob3NlIG1haWwtc3RvcmFnZSBmb3JtYXQgaXMgdW5rbm93biB3YXMgZml4ZWQuCisKKyAqICJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIEB7LTF9IGZvbyIgZGlkIG5vdCBleHBhbmQgQHstMX0gY29ycmVjdGx5LgorCisgKiAiZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1wcmludCIgdXNlZCB0byBwYXJyb3QgYSBjYW5kaWRhdGUgc3RyaW5nIHRoYXQKKyAgIGJlZ2FuIHdpdGggYSBzbGFzaCAoZS5nLiAvcmVmcy9oZWFkcy9tYXN0ZXIpIHdpdGhvdXQgc3RyaXBwaW5nIGl0LCB0byBtYWtlCisgICB0aGUgcmVzdWx0IGEgc3VpdGFibHkgbm9ybWFsaXplZCBzdHJpbmcgdGhlIGNhbGxlciBjYW4gYXBwZW5kIHRvICIkR0lUX0RJUi8iLgorCisgKiAiZ2l0IGNsb25lIiBmYWlsZWQgdG8gY2xvbmUgbG9jYWxseSBmcm9tIGEgIi5naXQiIGZpbGUgdGhhdCBpdHNlbGYKKyAgIGlzIG5vdCBhIGRpcmVjdG9yeSBidXQgaXMgYSBwb2ludGVyIHRvIG9uZS4KKworICogImdpdCBjbG9uZSIgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkgdGhhdCBib3Jyb3dzIGZyb20gYW5vdGhlcgorICAgb2JqZWN0IHN0b3JlIHVzaW5nIGEgcmVsYXRpdmUgcGF0aCBpbiBpdHMgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKyAgIGZpbGUgZGlkIG5vdCBhZGp1c3QgdGhlIGFsdGVybmF0ZXMgaW4gdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5LgorCisgKiAiZ2l0IGRlc2NyaWJlIC0tZGlydHkiIGRpZCBub3QgcmVmcmVzaCB0aGUgaW5kZXggYmVmb3JlIGNoZWNraW5nIHRoZQorICAgc3RhdGUgb2YgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcy4KKworICogImdpdCBscy1maWxlcyAuLi8kcGF0aCIgdGhhdCBpcyBydW4gZnJvbSBhIHN1YmRpcmVjdG9yeSByZXBvcnRlZCBlcnJvcnMKKyAgIGluY29ycmVjdGx5IHdoZW4gdGhlcmUgaXMgbm8gc3VjaCBwYXRoIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0aHNwZWMuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBjb3VsZCBsb29wIGZvcmV2ZXIgcHJvbXB0aW5nIHdoZW4gbm90aGluZyBjYW4gYmUgcmVhZAorICAgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MTMxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LjUudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0dpdCB2MS43LjYuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjYuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGRhdGUgcGFyc2VyIGRpZCBub3QgYWNjZXB0IHRpbWV6b25lIGRlc2lnbmF0b3JzIHRoYXQgbGFjayBtaW51dGVzCisgICBwYXJ0IGFuZCBhbHNvIGhhcyBhIGNvbG9uIGJldHdlZW4gImhoOm1tIi4KKworICogQWZ0ZXIgZmV0Y2hpbmcgZnJvbSBhIHJlbW90ZSB0aGF0IGhhcyB2ZXJ5IGxvbmcgcmVmbmFtZSwgdGhlIHJlcG9ydGluZworICAgb3V0cHV0IGNvdWxkIGhhdmUgY29ycnVwdGVkIGJ5IG92ZXJydW5uaW5nIGEgc3RhdGljIGJ1ZmZlci4KKworICogImdpdCBtZXJnZXRvb2wiIGRpZCBub3QgdXNlIGl0cyBhcmd1bWVudHMgYXMgcGF0aHNwZWMsIGJ1dCBhcyBhIHBhdGggdG8KKyAgIHRoZSBmaWxlIHRoYXQgbWF5IG5vdCBldmVuIGhhdmUgYW55IGNvbmZsaWN0LgorCisgKiAiZ2l0IG5hbWUtcmV2IC0tYWxsIiB0cmllZCB0byBuYW1lIGFsbCBfb2JqZWN0c18sIG5hdHVyYWxseSBmYWlsaW5nIHRvCisgICBkZXNjcmliZSBtYW55IGJsb2JzIGFuZCB0cmVlcywgaW5zdGVhZCBvZiBzaG93aW5nIG9ubHkgY29tbWl0cyBhcworICAgYWR2ZXJ0aXNlZCBpbiBpdHMgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCByZW1vdGUgcmVuYW1lICRhICRiIiB3ZXJlIG5vdCBjYXJlZnVsIHRvIG1hdGNoIHRoZSByZW1vdGUgbmFtZQorICAgYWdhaW5zdCAkYSAoaS5lLiBzb3VyY2Ugc2lkZSBvZiB0aGUgcmVtb3RlIG5pY2tuYW1lKS4KKworICogImdpdHdlYiIgdXNlZCB0byBwcm9kdWNlIGEgbm9uLXdvcmtpbmcgbGluayB3aGlsZSBzaG93aW5nIHRoZSBjb250ZW50cworICAgb2YgYSBibG9iLCB3aGVuIEphdmFTY3JpcHQgYWN0aW9ucyBhcmUgZW5hYmxlZC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM0M2UwMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjYuNi50eHQKQEAgLTAsMCArMSwxNiBAQAorR2l0IHYxLjcuNi42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNi41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgY29kZSB0byBsb29rIHVwIGF0dHJpYnV0ZXMgZm9yIHBhdGhzIHJldXNlZCBlbnRyaWVzIGZyb20gYSB3cm9uZworICAgZGlyZWN0b3J5IHdoZW4gdHdvIHBhdGhzIGluIHF1ZXN0aW9uIGFyZSBpbiBhZGphY2VudCBkaXJlY3RvcmllcyBhbmQKKyAgIHRoZSBuYW1lIG9mIHRoZSBvbmUgZGlyZWN0b3J5IGlzIGEgcHJlZml4IG9mIHRoZSBvdGhlci4KKworICogV2hlbiBwcm9kdWNpbmcgYSAidGhpbiBwYWNrIiAocHJpbWFyaWx5IHVzZWQgaW4gYnVuZGxlcyBhbmQgc21hcnQKKyAgIEhUVFAgdHJhbnNmZXJzKSBvdXQgb2YgYSBmdWxseSBwYWNrZWQgcmVwb3NpdG9yeSwgd2UgdW5uZWNlc3NhcmlseQorICAgYXZvaWRlZCBzZW5kaW5nIHJlY2VudCBvYmplY3RzIGFzIGEgZGVsdGEgYWdhaW5zdCBvYmplY3RzIHdlIGtub3cKKyAgIHRoZSBvdGhlciBzaWRlIGhhcy4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWM0OThlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNi50eHQKQEAgLTAsMCArMSwxMzYgQEAKK0dpdCB2MS43LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNy41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBWYXJpb3VzIGdpdC1zdm4gdXBkYXRlcy4KKworICogVXBkYXRlcyB0aGUgd2F5IGNvbnRlbnQgdGFncyBhcmUgaGFuZGxlZCBpbiBnaXR3ZWIuICBBbHNvIGFkZHMKKyAgIGEgVUkgdG8gY2hvb3NlIGNvbW1vbiB0aW1lem9uZSBmb3IgZGlzcGxheWluZyB0aGUgZGF0ZXMuCisKKyAqIFNpbWlsYXIgdG8gYnJhbmNoIG5hbWVzLCB0YWduYW1lcyB0aGF0IGJlZ2luIHdpdGggIi0iIGFyZSBub3cKKyAgIGRpc2FsbG93ZWQuCisKKyAqIENsZWFuLXVwIG9mIHRoZSBDIHBhcnQgb2YgaTE4biAoYnV0IG5vdCBsMTBuLS0tcGxlYXNlIHdhaXQpCisgICBjb250aW51ZXMuCisKKyAqIFRoZSBzY3JpcHRpbmcgcGFydCBvZiB0aGUgY29kZWJhc2UgaXMgZ2V0dGluZyBwcmVwYXJlZCBmb3IgaTE4bi9sMTBuLgorCisgKiBQdXNoaW5nIGFuZCBwdWxsaW5nIGZyb20gYSByZXBvc2l0b3J5IHdpdGggbGFyZ2UgbnVtYmVyIG9mIHJlZnMgdGhhdAorICAgcG9pbnQgdG8gaWRlbnRpY2FsIGNvbW1pdHMgYXJlIG9wdGltaXplZCBieSBub3QgbGlzdGluZyB0aGUgc2FtZSBjb21taXQKKyAgIGR1cmluZyB0aGUgY29tbW9uIGFuY2VzdG9yIG5lZ290aWF0aW9uIGV4Y2hhbmdlIHdpdGggdGhlIG90aGVyIHNpZGUuCisKKyAqIEFkZGluZyBhIGZpbGUgbGFyZ2VyIHRoYW4gY29yZS5iaWdmaWxldGhyZXNob2xkIChkZWZhdWx0cyB0byAxLzIgR2lnKQorICAgdXNpbmcgImdpdCBhZGQiIHdpbGwgc2VuZCB0aGUgY29udGVudHMgc3RyYWlnaHQgdG8gYSBwYWNrZmlsZSB3aXRob3V0CisgICBoYXZpbmcgdG8gaG9sZCBpdCBhbmQgaXRzIGNvbXByZXNzZWQgcmVwcmVzZW50YXRpb24gYm90aCBhdCB0aGUgc2FtZQorICAgdGltZSBpbiBtZW1vcnkuCisKKyAqIFByb2Nlc3NlcyBzcGF3bmVkIGJ5ICJbYWxpYXNdIDxuYW1lPiA9ICFwcm9jZXNzIiBpbiB0aGUgY29uZmlndXJhdGlvbgorICAgY2FuIGluc3BlY3QgR0lUX1BSRUZJWCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBsZWFybiB3aGVyZSBpbiB0aGUKKyAgIHdvcmtpbmcgdHJlZSB0aGUgb3JpZ2luYWwgY29tbWFuZCB3YXMgaW52b2tlZC4KKworICogQSBtYWdpYyBwYXRoc3BlYyAiOi8iIHRlbGxzIGEgY29tbWFuZCB0aGF0IGxpbWl0cyBpdHMgb3BlcmF0aW9uIHRvCisgICB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hlbiByYW4gZnJvbSBhIHN1YmRpcmVjdG9yeSB0byB3b3JrIG9uIHRoZQorICAgZW50aXJlIHdvcmtpbmcgdHJlZS4gSW4gZ2VuZXJhbCwgIjovcGF0aC90by9maWxlIiB3b3VsZCBiZSByZWxhdGl2ZQorICAgdG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZSBoaWVyYXJjaHkuCisKKyAgIEFmdGVyICJnaXQgcmVzZXQgLS1oYXJkOyBlZGl0IE1ha2VmaWxlOyBjZCB0LyIsICJnaXQgYWRkIC11IiB3b3VsZAorICAgYmUgYSBuby1vcCwgYnV0ICJnaXQgYWRkIC11IDovIiB3b3VsZCBhZGQgdGhlIHVwZGF0ZWQgY29udGVudHMgb2YKKyAgIHRoZSBNYWtlZmlsZSBhdCB0aGUgdG9wIGxldmVsLiBJZiB5b3Ugd2FudCB0byBuYW1lIGEgcGF0aCBpbiB0aGUKKyAgIGN1cnJlbnQgc3ViZGlyZWN0b3J5IHdob3NlIHVudXN1YWwgbmFtZSBiZWdpbnMgd2l0aCAiOi8iLCB5b3UgY2FuCisgICBuYW1lIGl0IGJ5ICIuLzovdGhhdC9wYXRoIiBvciBieSAiXDovdGhhdC9wYXRoIi4KKworICogImdpdCBibGFtZSIgbGVhcm5lZCAiLS1hYmJyZXZbPTxuPl0iIG9wdGlvbiB0byBjb250cm9sIHRoZSBtaW5pbXVtCisgICBudW1iZXIgb2YgaGV4ZGlnaXRzIHNob3duIGZvciBjb21taXQgb2JqZWN0IG5hbWVzLgorCisgKiAiZ2l0IGJsYW1lIiBsZWFybmVkICItLWxpbmUtcG9yY2VsYWluIiB0aGF0IGlzIGxlc3MgZWZmaWNpZW50IGJ1dCBpcworICAgZWFzaWVyIHRvIHBhcnNlLgorCisgKiBBYm9ydGluZyAiZ2l0IGNvbW1pdCAtLWludGVyYWN0aXZlIiBkaXNjYXJkcyB1cGRhdGVzIHRvIHRoZSBpbmRleAorICAgbWFkZSBkdXJpbmcgdGhlIGludGVyYWN0aXZlIHNlc3Npb24uCisKKyAqICJnaXQgY29tbWl0IiBsZWFybmVkIGEgIi0tcGF0Y2giIG9wdGlvbiB0byBkaXJlY3RseSBqdW1wIHRvIHRoZQorICAgcGVyLWh1bmsgc2VsZWN0aW9uIFVJIG9mIHRoZSBpbnRlcmFjdGl2ZSBtb2RlLgorCisgKiAiZ2l0IGRpZmYiIGFuZCBpdHMgZmFtaWx5IG9mIGNvbW1hbmRzIGxlYXJuZWQgLS1kaXJzdGF0PTAgdG8gc2hvdworICAgZGlyZWN0b3JpZXMgdGhhdCBjb250cmlidXRlIGxlc3MgdGhhbiAwLjElIG9mIGNoYW5nZXMuCisKKyAqICJnaXQgZGlmZiIgYW5kIGl0cyBmYW1pbHkgb2YgY29tbWFuZHMgbGVhcm5lZCAtLWRpcnN0YXQ9bGluZXMgbW9kZSB0bworICAgYXNzZXNzIGRhbWFnZSB0byB0aGUgZGlyZWN0b3J5IGJhc2VkIG9uIG51bWJlciBvZiBsaW5lcyBpbiB0aGUgcGF0Y2gKKyAgIG91dHB1dCwgbm90IGJhc2VkIG9uIHRoZSBzaW1pbGFyaXR5IG51bWJlcnMuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkICItLXF1aWV0IiBvcHRpb24gdG8gc3VwcHJlc3MgdGhlIG91dHB1dCBvZgorICAgdGhlIG5hbWVzIG9mIGdlbmVyYXRlZCBmaWxlcy4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIHF1b3RlcyBwZW9wbGUncyBuYW1lcyB3aGVuIGl0IGhhcyBSRkM4MjIgc3BlY2lhbAorICAgY2hhcmFjdGVycyBpbiBpdCwgZS5nLiAiSnVuaW8gQy4gSGFtYW5vIiA8amNoQGV4YW1wbGUuY29tPi4gIEVhcmxpZXIKKyAgIGl0IHdhcyB1cCB0byB0aGUgdXNlciB0byBkbyB0aGlzIHdoZW4gdXNpbmcgaXRzIG91dHB1dC4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGNhbiB0YWtlIGFuIGVtcHR5IC0tc3ViamVjdC1wcmVmaXggbm93LgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdGhlICItUCIgb3B0aW9uIHRvIHRha2UgcGNyZSByZWd1bGFyIGV4cHJlc3Npb25zLgorCisgKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgbGVhcm5lZCBhIG5ldyAiLS1ub3RlcyIgb3B0aW9uIHRvIHJlcGxhY2UgdGhlCisgICAiLS1zaG93LW5vdGVzIiBvcHRpb24uICBVbmxpa2UgIi0tc2hvdy1ub3RlcyIsICItLW5vdGVzPTxyZWY+IiBkb2VzCisgICBub3QgaW1wbHkgc2hvd2luZyB0aGUgZGVmYXVsdCBub3Rlcy4KKworICogVGhleSBhbHNvIGxlYXJuZWQgYSBsb2cuYWJicmV2Q29tbWl0IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gYXVnbWVudAorICAgdGhlIC0tYWJicmV2LWNvbW1pdCBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisgKiAiZ2l0IGxzLXJlbW90ZSIgbGVhcm5lZCAiLS1leGl0LWNvZGUiIG9wdGlvbiB0byBjb25zaWRlciBpdCBhCisgICBkaWZmZXJlbnQga2luZCBvZiBlcnJvciB3aGVuIG5vIHJlbW90ZSByZWYgdG8gYmUgc2hvd24uCisKKyAqICJnaXQgbWVyZ2UiIGxlYXJuZWQgIi0iIGFzIGEgc2hvcnQtaGFuZCBmb3IgInRoZSBwcmV2aW91cyBicmFuY2giLCBqdXN0CisgICBsaWtlIHRoZSB3YXkgImdpdCBjaGVja291dCAtIiB3b3Jrcy4KKworICogImdpdCBtZXJnZSIgdXNlcyAibWVyZ2UuZmYiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZGVjaWRlIHRvIGFsd2F5cworICAgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IChpLmUuIC0tbm8tZmYsIGFrYSBtZXJnZS5mZj1ubyksIHJlZnVzZSB0byBjcmVhdGUKKyAgIGEgbWVyZ2UgY29tbWl0IChpLmUuIC0tZmYtb25seSwgYWthIG1lcmdlLmZmPW9ubHkpLiBTZXR0aW5nIG1lcmdlLmZmPXllcworICAgKG9yIG5vdCBzZXR0aW5nIGl0IGF0IGFsbCkgcmVzdG9yZXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIG9mIGFsbG93aW5nCisgICBmYXN0LWZvcndhcmQgdG8gaGFwcGVuIHdoZW4gcG9zc2libGUuCisKKyAqIHA0LWltcG9ydCAoZnJvbSBjb250cmliKSBsZWFybmVkIGEgbmV3IG9wdGlvbiAtLXByZXNlcnZlLXVzZXIuCisKKyAqICJnaXQgcmVhZC10cmVlIC1tIiBsZWFybmVkICItLWRyeS1ydW4iIG9wdGlvbiB0aGF0IHJlcG9ydHMgaWYgYSBtZXJnZQorICAgd291bGQgZmFpbCB3aXRob3V0IHRvdWNoaW5nIHRoZSBpbmRleCBub3IgdGhlIHdvcmtpbmcgdHJlZS4KKworICogImdpdCByZWJhc2UiIHRoYXQgZG9lcyBub3Qgc3BlY2lmeSBvbiB0b3Agb2Ygd2hpY2ggYnJhbmNoIHRvIHJlYmFzZQorICAgdGhlIGN1cnJlbnQgYnJhbmNoIG5vdyB1c2VzIEB7dXBzdHJlYW19IG9mIHRoZSBjdXJyZW50IGJyYW5jaC4KKworICogImdpdCByZWJhc2UiIGZpbmlzaGVkIGVpdGhlciBub3JtYWxseSBvciB3aXRoIC0tYWJvcnQgZGlkIG5vdAorICAgdXBkYXRlIHRoZSByZWZsb2cgZm9yIEhFQUQgdG8gcmVjb3JkIHRoZSBldmVudCB0byBjb21lIGJhY2sgdG8KKyAgIHdoZXJlIGl0IHN0YXJ0ZWQgZnJvbS4KKworICogImdpdCByZW1vdGUgYWRkIC10IG9ubHktdGhpcy1icmFuY2ggLS1taXJyb3I9ZmV0Y2giIGlzIG5vdyBhbGxvd2VkLiBFYXJsaWVyCisgICBhIGZldGNoLW1vZGUgbWlycm9yIG1lYW50IG1pcnJvciBldmVyeXRoaW5nLCBidXQgbm93IGl0IG9ubHkgbWVhbnMgcmVmcyBhcmUKKyAgIG5vdCByZW5hbWVkLgorCisgKiAiZ2l0IHJldi1saXN0IC0tY291bnQiIHVzZWQgd2l0aCAiLS1jaGVycnktbWFyayIgY291bnRzIHRoZSBjaGVycnktcGlja2VkCisgICBjb21taXRzIHNlcGFyYXRlbHksIHByb2R1Y2luZyBtb3JlIGEgdXNlZnVsIG91dHB1dC4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBsZWFybmVkICItLWZvcmNlIiBvcHRpb24gdG8gZ2V0IHJpZCBvZiBsb2NhbAorICAgY2hhbmdlcyBpbiBzdWJtb2R1bGVzIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgdXAtdG8tZGF0ZSB2ZXJzaW9uLgorCisgKiAiZ2l0IHN0YXR1cyIgYW5kIGZyaWVuZHMgaWdub3JlIC5naXRtb2R1bGVzIGZpbGUgd2hpbGUgdGhlIGZpbGUgaXMKKyAgIHN0aWxsIGluIGEgY29uZmxpY3RlZCBzdGF0ZSBkdXJpbmcgYSBtZXJnZSwgdG8gYXZvaWQgdXNpbmcgaW5mb3JtYXRpb24KKyAgIHRoYXQgaXMgbm90IGZpbmFsIGFuZCBwb3NzaWJseSBjb3JydXB0IHdpdGggY29uZmxpY3QgbWFya2Vycy4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgbWlub3IgbWlzY2VsbGFuZW91cworY2hhbmdlcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIGluIDEuNy41LlggbWFpbnRlbmFuY2UgdHJhY2sgYXJlCitpbmNsdWRlZCBpbiB0aGlzIHJlbGVhc2UuCisKKyAqICJnaXQgY29uZmlnIiB1c2VkIHRvIGNob2tlIHdpdGggYW4gaW5zYW5lbHkgbG9uZyBsaW5lLgorICAgKG1lcmdlIGVmL21haW50LXN0cmJ1Zi1pbml0IGxhdGVyKQorCisgKiAiZ2l0IGRpZmYgLS1xdWlldCIgZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCAtLWRpZmYtZmlsdGVyLgorICAgKG1lcmdlIGprL2RpZmYtbm90LXNvLXF1aWNrIGxhdGVyKQorCisgKiAiZ2l0IHN0YXR1cyAteiIgZGlkIG5vdCBkZWZhdWx0IHRvIC0tcG9yY2VsYWluIG91dHB1dCBmb3JtYXQuCisgICAobWVyZ2UgYmMvbWFpbnQtc3RhdHVzLXotdG8tdXNlLXBvcmNlbGFpbiBsYXRlcikKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOWI4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjEudHh0CkBAIC0wLDAgKzEsNjAgQEAKK0dpdCB2MS43LjcuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjcKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBPbiBzb21lIEJTRCBzeXN0ZW1zLCBhZGRpbmcgK3MgYml0IG9uIGRpcmVjdG9yaWVzIGlzIGRldHJpbWVudGFsCisgICAoaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBCU0QgdG8gYmVnaW4gd2l0aCkuICJnaXQgaW5pdCAtLXNoYXJlZCIKKyAgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGlzIGludG8gYWNjb3VudCB3aXRob3V0IGV4dHJhIG1ha2VmaWxlCisgICBzZXR0aW5ncyBvbiBwbGF0Zm9ybXMgdGhlIE1ha2VmaWxlIGtub3dzIGFib3V0LgorCisgKiBBZnRlciBpbmNvcnJlY3RseSB3cml0dGVuIHRoaXJkLXBhcnR5IHRvb2xzIHN0b3JlIGEgdGFnIG9iamVjdCBpbgorICAgSEVBRCwgZ2l0IGRpYWdub3NlZCBpdCBhcyBhIHJlcG9zaXRvcnkgY29ycnVwdGlvbiBhbmQgcmVmdXNlZCB0bworICAgcHJvY2VlZCBpbiBvcmRlciB0byBhdm9pZCBzcHJlYWRpbmcgdGhlIGRhbWFnZS4gV2Ugbm93IGdyYWNlZnVsbHkKKyAgIHJlY292ZXIgZnJvbSBzdWNoIGEgc2l0dWF0aW9uIGJ5IHByZXRlbmRpbmcgYXMgaWYgdGhlIGNvbW1pdCB0aGF0CisgICBpcyBwb2ludGVkIGF0IGJ5IHRoZSB0YWcgd2VyZSBpbiBIRUFELgorCisgKiAiZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1lcnJvciIgZGlkIG5vdCBib3RoZXIgdG8gcmVwb3J0IHRoZSBleGFjdAorICAgbGluZSBudW1iZXIgaW4gdGhlIHBhdGNoIHRoYXQgaW50cm9kdWNlZCBuZXcgYmxhbmsgbGluZXMgYXQgdGhlIGVuZAorICAgb2YgdGhlIGZpbGUuCisKKyAqICJnaXQgYXBwbHkgLS1pbmRleCIgZGlkIG5vdCBjaGVjayBjb3JydXB0ZWQgcGF0Y2guCisKKyAqICJnaXQgY2hlY2tvdXQgJHRyZWUgJGRpcmVjdG9yeS8iIHJlc3VycmVjdGVkIHBhdGhzIGxvY2FsbHkgcmVtb3ZlZCBvcgorICAgbW9kaWZpZWQgb25seSBpbiB0aGUgd29ya2luZyB0cmVlIGluICRkaXJlY3RvcnkvIHRoYXQgZGlkIG5vdCBhcHBlYXIKKyAgIGluICRkaXJlY3Rvcnkgb2YgdGhlIGdpdmVuICR0cmVlLiBUaGV5IHNob3VsZCBoYXZlIGJlZW4ga2VwdCBpbnRhY3QuCisKKyAqICJnaXQgZGlmZiAkdHJlZSAkcGF0aCIgdXNlZCB0byBhcHBseSB0aGUgcGF0aHNwZWMgYXQgdGhlIG91dHB1dCBzdGFnZSwKKyAgIHJlYWRpbmcgdGhlIHdob2xlIHRyZWUsIHdhc3RpbmcgcmVzb3VyY2VzLgorCisgKiBUaGUgY29kZSB0byBjaGVjayBmb3IgdXBkYXRlZCBzdWJtb2R1bGVzIGR1cmluZyBhICJnaXQgZmV0Y2giIG9mIHRoZQorICAgc3VwZXJwcm9qZWN0IGhhZCBhbiB1bm5lY2Vzc2FyeSBxdWFkcmF0aWMgbG9vcC4KKworICogImdpdCBmZXRjaCIgZnJvbSBhIGxhcmdlIGJ1bmRsZSBkaWQgbm90IGVuYWJsZSB0aGUgcHJvZ3Jlc3Mgb3V0cHV0LgorCisgKiBXaGVuICJnaXQgZnNjayAtLWxvc3QtYW5kLWZvdW5kIiBmb3VuZCB0aGF0IGFuIGVtcHR5IGJsb2Igb2JqZWN0IGluIHRoZQorICAgb2JqZWN0IHN0b3JlIGlzIHVucmVhY2hhYmxlLCBpdCBpbmNvcnJlY3RseSByZXBvcnRlZCBhbiBlcnJvciBhZnRlcgorICAgd3JpdGluZyB0aGUgbG9zdCBibG9iIG91dCBzdWNjZXNzZnVsbHkuCisKKyAqICJnaXQgZmlsdGVyLWJyYW5jaCIgZGlkIG5vdCByZWZyZXNoIHRoZSBpbmRleCBiZWZvcmUgY2hlY2tpbmcgdGhhdCB0aGUKKyAgIHdvcmtpbmcgdHJlZSB3YXMgY2xlYW4uCisKKyAqICJnaXQgZ3JlcCAkdHJlZSIgd2hlbiBydW4gd2l0aCBtdWx0aXBsZSB0aHJlYWRzIGhhZCBhbiB1bnNhZmUgYWNjZXNzIHRvCisgICB0aGUgb2JqZWN0IGRhdGFiYXNlIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBwcm90ZWN0ZWQgd2l0aCBtdXRleC4KKworICogVGhlICItLWFuY2VzdHJ5LXBhdGgiIG9wdGlvbiB0byAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgbWlzYmVoYXZlZCBpbiBhCisgICBoaXN0b3J5IHdpdGggY29tcGxleCBjcmlzcy1jcm9zcyBtZXJnZXMgYW5kIHNob3dlZCBhbiB1bmludGVyZXN0aW5nCisgICBzaWRlIGhpc3RvcnkgYXMgd2VsbC4KKworICogVGVzdCB0MTMwNCBhc3N1bWVkIExPR05BTUUgaXMgYWx3YXlzIHNldCwgd2hpY2ggbWF5IG5vdCBiZSB0cnVlIG9uCisgICBzb21lIHN5c3RlbXMuCisKKyAqIFRlc3RzIHdpdGggLS12YWxncmluZCBmYWlsZWQgdG8gZmluZCAibWVyZ2V0b29sIiBzY3JpcHRsZXRzLgorCisgKiAiZ2l0IHBhdGNoLWlkIiBtaXNjb21wdXRlZCB0aGUgcGF0Y2gtaWQgaW4gYSBwYXRjaCB0aGF0IGhhcyBhIGxpbmUgbG9uZ2VyCisgICB0aGFuIDFrQi4KKworICogV2hlbiBhbiAiZXhlYyIgaW5zbiBmYWlsZWQgYWZ0ZXIgbW9kaWZ5aW5nIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcKKyAgIHRyZWUgZHVyaW5nICJyZWJhc2UgLWkiLCB3ZSBub3cgY2hlY2sgYW5kIHdhcm4gdGhhdCB0aGUgY2hhbmdlcyBuZWVkIHRvCisgICBiZSBjbGVhbmVkIHVwLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiYmVmMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMi50eHQKQEAgLTAsMCArMSw0NCBAQAorR2l0IHYxLjcuNy4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXZSB1c2VkIHRvIGRyb3AgZXJyb3IgbWVzc2FnZXMgZnJvbSBsaWJjdXJsIG9uIGNlcnRhaW4ga2luZHMgb2YKKyAgIGVycm9ycy4KKworICogRXJyb3IgcmVwb3J0IGZyb20gc21hcnQgSFRUUCB0cmFuc3BvcnQsIHdoZW4gdGhlIGNvbm5lY3Rpb24gd2FzCisgICBicm9rZW4gaW4gdGhlIG1pZGRsZSBvZiBhIHRyYW5zZmVyLCBzaG93ZWQgYSB1c2VsZXNzIG1lc3NhZ2Ugb24KKyAgIGEgY29ycnVwdCBwYWNrZXQuCisKKyAqICJnaXQgZmV0Y2ggLS1wcnVuZSIgd2FzIHVuc2FmZSB3aGVuIHVzZWQgd2l0aCByZWZzcGVjcyBmcm9tIHRoZQorICAgY29tbWFuZCBsaW5lLgorCisgKiBUaGUgYXR0cmlidXRlIG1lY2hhbmlzbSBkaWQgbm90IHVzZSBjYXNlIGluc2Vuc2l0aXZlIG1hdGNoIHdoZW4KKyAgIGNvcmUuaWdub3JlY2FzZSB3YXMgc2V0LgorCisgKiAiZ2l0IGJpc2VjdCIgZGlkIG5vdCBub3RpY2Ugd2hlbiBpdCBmYWlsZWQgdG8gdXBkYXRlIHRoZSB3b3JraW5nIHRyZWUKKyAgIHRvIHRoZSBuZXh0IGNvbW1pdCB0byBiZSB0ZXN0ZWQuCisKKyAqICJnaXQgY29uZmlnIC0tYm9vbCAtLWdldC1yZWdleHAiIGZhaWxlZCB0byBzZXBhcmF0ZSB0aGUgdmFyaWFibGUgbmFtZQorICAgYW5kIGl0cyB2YWx1ZSAidHJ1ZSIgd2hlbiB0aGUgdmFyaWFibGUgaXMgZGVmaW5lZCB3aXRob3V0ICI9IHRydWUiLgorCisgKiAiZ2l0IHJlbW90ZSByZW5hbWUgJGEgJGIiIHdlcmUgbm90IGNhcmVmdWwgdG8gbWF0Y2ggdGhlIHJlbW90ZSBuYW1lCisgICBhZ2FpbnN0ICRhIChpLmUuIHNvdXJjZSBzaWRlIG9mIHRoZSByZW1vdGUgbmlja25hbWUpLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgZGlkIG5vdCB1c2UgaXRzIGFyZ3VtZW50cyBhcyBwYXRoc3BlYywgYnV0IGFzIGEgcGF0aCB0bworICAgdGhlIGZpbGUgdGhhdCBtYXkgbm90IGV2ZW4gaGF2ZSBhbnkgY29uZmxpY3QuCisKKyAqICJnaXQgZGlmZiAtLVtudW1dc3RhdCIgdXNlZCB0byB1c2UgdGhlIG51bWJlciBvZiBsaW5lcyBvZiBjb250ZXh0CisgICBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCwgcG90ZW50aWFsbHkgZ2l2aW5nIGRpZmZlcmVudCByZXN1bHRzIGZyb20KKyAgICJnaXQgZGlmZiB8IGRpZmZzdGF0IiBhbmQgY29uZnVzaW5nIHRoZSB1c2Vycy4KKworICogImdpdCBwdWxsIiBhbmQgImdpdCByZWJhc2UiIGRpZCBub3Qgd29yayB3ZWxsIGV2ZW4gd2hlbiBHSVRfV09SS19UUkVFIGlzCisgICBzZXQgY29ycmVjdGx5IHdpdGggR0lUX0RJUiBpZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgb3V0c2lkZSB0aGUgd29ya2luZworICAgdHJlZS4KKworICogImdpdCBzZW5kLWVtYWlsIiBkaWQgbm90IGhvbm9yIHRoZSBjb25maWd1cmVkIGhvc3RuYW1lIHdoZW4gcmVzdGFydGluZworICAgdGhlIEhFTE8vRUhMTyBleGNoYW5nZSBhZnRlciBzd2l0Y2hpbmcgVExTIG9uLgorCisgKiAiZ2l0d2ViIiB1c2VkIHRvIHByb2R1Y2UgYSBub24td29ya2luZyBsaW5rIHdoaWxlIHNob3dpbmcgdGhlIGNvbnRlbnRzCisgICBvZiBhIGJsb2IsIHdoZW4gSmF2YVNjcmlwdCBhY3Rpb25zIGFyZSBlbmFibGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzMDFmMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuMy50eHQKQEAgLTAsMCArMSwxOSBAQAorR2l0IHYxLjcuNy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBZGp1c3QgdGhlICJxdWljay1pbnN0YWxsLWRvYyIgcHJvY2VkdXJlcyBhcyBwcmVmb3JtYXR0ZWQKKyAgIGh0bWwvbWFucGFnZSBhcmUgbm8gbG9uZ2VyIGluIHRoZSBzb3VyY2UgcmVwb3NpdG9yeS4KKworICogVGhlIGxvZ2ljIHRvIG9wdGltaXplIHRoZSBsb2NhbGl0eSBvZiB0aGUgZGF0YSBpbiBhIHBhY2sgaW50cm9kdWNlZCBpbgorICAgMS43Ljcgd2FzIGdyb3NzbHkgaW5lZmZpY2llbnQuCisKKyAqIFRoZSBsb2dpYyB0byBmaWx0ZXIgb3V0IGZvcmtlZCBwcm9qZWN0cyBpbiB0aGUgcHJvamVjdCBsaXN0IGluCisgICAiZ2l0d2ViIiB3YXMgYnJva2VuIGZvciBzb21lIHRpbWUuCisKKyAqICJnaXQgYnJhbmNoIC1tLy1NIiBhZHZlcnRpc2VkIHRvIHVwZGF0ZSBSRU5BTUVfUkVGIHJlZiBpbiB0aGUKKyAgIGNvbW1pdCBsb2cgbWVzc2FnZSB0aGF0IGludHJvZHVjZWQgdGhlIGZlYXR1cmUgYnV0IG5vdCBhbnl3aGVyZSBpbgorICAgdGhlIGRvY3VtZW50YXRpb24sIGFuZCBuZXZlciBkaWQgdXBkYXRlIHN1Y2ggYSByZWYgYW55d2F5LiBUaGlzCisgICB1bmRvY3VtZW50ZWQgbWlzZmVhdHVyZSB0aGF0IGRpZCBub3QgZXhpc3QgaGFzIGJlZW4gZXhjaXNlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MjM0NDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjQudHh0CkBAIC0wLDAgKzEsMTQgQEAKK0dpdCB2MS43LjcuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjcuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQSBmZXcgaGVhZGVyIGRlcGVuZGVuY2llcyB3ZXJlIG1pc3NpbmcgZnJvbSB0aGUgTWFrZWZpbGUuCisKKyAqIFNvbWUgbmV3ZXIgcGFydHMgb2YgdGhlIGNvZGUgdXNlZCBDOTkgX19WQV9BUkdTX18gd2hpbGUgd2Ugc3RpbGwKKyAgIHRyeSB0byBjYXRlciB0byBvbGRlciBjb21waWxlcnMuCisKKyAqICJnaXQgbmFtZS1yZXYgLS1hbGwiIHRyaWVkIHRvIG5hbWUgYWxsIF9vYmplY3RzXywgbmF0dXJhbGx5IGZhaWxpbmcgdG8KKyAgIGRlc2NyaWJlIG1hbnkgYmxvYnMgYW5kIHRyZWVzLCBpbnN0ZWFkIG9mIHNob3dpbmcgb25seSBjb21taXRzIGFzCisgICBhZHZlcnRpc2VkIGluIGl0cyBkb2N1bWVudGF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwOTMxOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNS50eHQKQEAgLTAsMCArMSwxNCBAQAorR2l0IHYxLjcuNy41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBZnRlciBmZXRjaGluZyBmcm9tIGEgcmVtb3RlIHRoYXQgaGFzIHZlcnkgbG9uZyByZWZuYW1lLCB0aGUgcmVwb3J0aW5nCisgICBvdXRwdXQgY291bGQgaGF2ZSBjb3JydXB0ZWQgYnkgb3ZlcnJ1bm5pbmcgYSBzdGF0aWMgYnVmZmVyLgorCisgKiAiZ2l0IGNoZWNrb3V0IiBhbmQgImdpdCBtZXJnZSIgdHJlYXRlZCBpbi10cmVlIC5naXRpZ25vcmUgYW5kIGV4Y2x1ZGUKKyAgIGZpbGUgaW4gJEdJVF9ESVIvaW5mby8gZGlyZWN0b3J5IGluY29uc2lzdGVudGx5IHdoZW4gZGVjaWRpbmcgd2hpY2gKKyAgIHVudHJhY2tlZCBmaWxlcyBhcmUgaWdub3JlZCBhbmQgZXhwZW5kYWJsZS4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRmNjA2ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNi50eHQKQEAgLTAsMCArMSwyMCBAQAorR2l0IHYxLjcuNy42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuNy41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgY29kZSB0byBsb29rIHVwIGF0dHJpYnV0ZXMgZm9yIHBhdGhzIHJldXNlZCBlbnRyaWVzIGZyb20gYSB3cm9uZworICAgZGlyZWN0b3J5IHdoZW4gdHdvIHBhdGhzIGluIHF1ZXN0aW9uIGFyZSBpbiBhZGphY2VudCBkaXJlY3RvcmllcyBhbmQKKyAgIHRoZSBuYW1lIG9mIHRoZSBvbmUgZGlyZWN0b3J5IGlzIGEgcHJlZml4IG9mIHRoZSBvdGhlci4KKworICogQSB3aWxkY2FyZCB0aGF0IG1hdGNoZXMgZGVlcGVyIGhpZXJhcmNoeSBnaXZlbiB0byB0aGUgImRpZmYtaW5kZXgiIGNvbW1hbmQsCisgICBlLmcuICJnaXQgZGlmZi1pbmRleCBIRUFEIC0tICcqLnR4dCciLCBpbmNvcnJlY3RseSByZXBvcnRlZCBhZGRpdGlvbnMgb2YKKyAgIG1hdGNoaW5nIGZpbGVzIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2UuCisKKyAqIFdoZW4gcHJvZHVjaW5nIGEgInRoaW4gcGFjayIgKHByaW1hcmlseSB1c2VkIGluIGJ1bmRsZXMgYW5kIHNtYXJ0CisgICBIVFRQIHRyYW5zZmVycykgb3V0IG9mIGEgZnVsbHkgcGFja2VkIHJlcG9zaXRvcnksIHdlIHVubmVjZXNzYXJpbHkKKyAgIGF2b2lkZWQgc2VuZGluZyByZWNlbnQgb2JqZWN0cyBhcyBhIGRlbHRhIGFnYWluc3Qgb2JqZWN0cyB3ZSBrbm93CisgICB0aGUgb3RoZXIgc2lkZSBoYXMuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjcuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTExOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LjcudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0dpdCB2MS43LjcuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjcuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gZXJyb3IgbWVzc2FnZSBmcm9tICdnaXQgYnVuZGxlJyBoYWQgYW4gdW5tYXRjaGVkIHNpbmdsZSBxdW90ZSBwYWlyIGluIGl0LgorCisgKiAnZ2l0IGRpZmYgLS1oaXN0b2dyYW0nIG9wdGlvbiB3YXMgbm90IGRlc2NyaWJlZC4KKworICogJ2dpdCBpbWFwLXNlbmQnIGNhcnJpZWQgYW4gdW51c2VkIGRlYWQgY29kZS4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWZmMTI4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuNy50eHQKQEAgLTAsMCArMSwxMzQgQEAKK0dpdCB2MS43LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjEuNy42CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgc2NyaXB0aW5nIHBhcnQgb2YgdGhlIGNvZGViYXNlIGlzIGdldHRpbmcgcHJlcGFyZWQgZm9yIGkxOG4vbDEwbi4KKworICogSW50ZXJpeCwgQ3lnd2luIGFuZCBNaW5peCBwb3J0cyBnb3QgdXBkYXRlZC4KKworICogVmFyaW91cyB1cGRhdGVzIHRvIGdpdC1wNCAoaW4gY29udHJpYi8pLCBmYXN0LWltcG9ydCwgYW5kIGdpdC1zdm4uCisKKyAqIEdpdHdlYiBsZWFybmVkIHRvIHJlYWQgZnJvbSAvZXRjL2dpdHdlYi1jb21tb24uY29uZiB3aGVuIGl0IGV4aXN0cywKKyAgIGJlZm9yZSByZWFkaW5nIGZyb20gZ2l0d2ViX2NvbmZpZy5wZXJsIG9yIGZyb20gL2V0Yy9naXR3ZWIuY29uZgorICAgKHRoaXMgbGFzdCBvbmUgaXMgcmVhZCBvbmx5IHdoZW4gcGVyLXJlcG9zaXRvcnkgZ2l0d2ViX2NvbmZpZy5wZXJsCisgICBkb2VzIG5vdCBleGlzdCkuCisKKyAqIFZhcmlvdXMgY29kZXBhdGhzIHRoYXQgaW52b2tlZCB6bGliIGRlZmxhdGUvaW5mbGF0ZSBhc3N1bWVkIHRoYXQgdGhlc2UKKyAgIGZ1bmN0aW9ucyBjYW4gY29tcHJlc3Mgb3IgdW5jb21wcmVzcyBtb3JlIHRoYW4gNEdCIGRhdGEgaW4gb25lIGNhbGwgb24KKyAgIHBsYXRmb3JtcyB3aXRoIDY0LWJpdCBsb25nLCB3aGljaCBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIEdpdCBub3cgcmVjb2duaXplcyBsb29zZSBvYmplY3RzIHdyaXR0ZW4gYnkgb3RoZXIgaW1wbGVtZW50YXRpb25zIHRoYXQKKyAgIHVzZSBhIG5vbi1zdGFuZGFyZCB3aW5kb3cgc2l6ZSBmb3IgemxpYiBkZWZsYXRpb24gKGUuZy4gQWdpdCBydW5uaW5nIG9uCisgICBBbmRyb2lkIHdpdGggNGtiIHdpbmRvdykuIFdlIHVzZWQgdG8gcmVqZWN0IGFueXRoaW5nIHRoYXQgd2FzIG5vdAorICAgZGVmbGF0ZWQgd2l0aCAzMmtiIHdpbmRvdy4KKworICogSW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgdXNlIG9mIHBhZ2VyIGFuZCBjb2xvcmluZyBvZiB0aGUgb3V0cHV0IGhhcworICAgYmVlbiBpbXByb3ZlZCwgZXNwZWNpYWxseSB3aGVuIGEgY29tbWFuZCB0aGF0IGlzIG5vdCBidWlsdC1pbiB3YXMKKyAgIGludm9sdmVkLgorCisgKiAiZ2l0IGFtIiBsZWFybmVkIHRvIHBhc3MgdGhlICItLWV4Y2x1ZGU9PHBhdGg+IiBvcHRpb24gdGhyb3VnaCB0byB1bmRlcmx5aW5nCisgICAiZ2l0IGFwcGx5Ii4KKworICogWW91IGNhbiBub3cgZmVlZCBtYW55IGVtcHR5IGxpbmVzIGJlZm9yZSBmZWVkaW5nIGFuIG1ib3ggZmlsZSB0bworICAgImdpdCBhbSIuCisKKyAqICJnaXQgYXJjaGl2ZSIgY2FuIGJlIHRvbGQgdG8gcGFzcyB0aGUgb3V0cHV0IHRvIGd6aXAgY29tcHJlc3Npb24gYW5kCisgICBwcm9kdWNlICJhcmNoaXZlLnRhci5neiIuCisKKyAqICJnaXQgYmlzZWN0IiBjYW4gYmUgdXNlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSAocHJvdmlkZWQgdGhhdCB0aGUgdGVzdAorICAgeW91IHBlcmZvcm0gcGVyIGVhY2ggaXRlcmF0aW9uIGRvZXMgbm90IG5lZWQgYSB3b3JraW5nIHRyZWUsIG9mCisgICBjb3Vyc2UpLgorCisgKiBUaGUgbGVuZ3RoIG9mIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lcyBpbiAiZ2l0IGJyYW5jaCAtdiIgb3V0cHV0CisgICBub3cgaG9ub3JzIHRoZSBjb3JlLmFiYnJldiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IGNoZWNrLWF0dHIiIGNhbiB0YWtlIHJlbGF0aXZlIHBhdGhzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworICogImdpdCBjaGVjay1hdHRyIiBsZWFybmVkIGFuICItLWFsbCIgb3B0aW9uIHRvIGxpc3QgdGhlIGF0dHJpYnV0ZXMgZm9yIGEKKyAgIGdpdmVuIHBhdGguCisKKyAqICJnaXQgY2hlY2tvdXQiIChib3RoIHRoZSBjb2RlIHRvIHVwZGF0ZSB0aGUgZmlsZXMgdXBvbiBjaGVja2luZyBvdXQgYQorICAgZGlmZmVyZW50IGJyYW5jaCBhbmQgdGhlIGNvZGUgdG8gY2hlY2tvdXQgYSBzcGVjaWZpYyBzZXQgb2YgZmlsZXMpIGxlYXJuZWQKKyAgIHRvIHN0cmVhbSB0aGUgZGF0YSBmcm9tIG9iamVjdCBzdG9yZSB3aGVuIHBvc3NpYmxlLCB3aXRob3V0IGhhdmluZyB0bworICAgcmVhZCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIGEgZmlsZSBpbnRvIG1lbW9yeSBmaXJzdC4gQW4gZWFybGllciByb3VuZAorICAgb2YgdGhpcyBjb2RlIHRoYXQgaXMgbm90IGluIGFueSByZWxlYXNlZCB2ZXJzaW9uIGhhZCBhIGxhcmdlIGxlYWsgYnV0CisgICBub3cgaXQgaGFzIGJlZW4gcGx1Z2dlZC4KKworICogImdpdCBjbG9uZSIgY2FuIG5vdyB0YWtlIGEgIi0tY29uZmlnIGtleT12YWx1ZSIgb3B0aW9uIHRvIHNldCB0aGUKKyAgIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBpbml0aWFsIGNoZWNrb3V0LgorCisgKiAiZ2l0IGNvbW1pdCA8cGF0aHM+Li4uIiBub3cgbGV0cyB5b3UgZmVlZCByZWxhdGl2ZSBwYXRoc3BlY3MgdGhhdAorICAgcmVmZXIgdG8gb3V0c2lkZSB5b3VyIGN1cnJlbnQgc3ViZGlyZWN0b3J5LgorCisgKiAiZ2l0IGRpZmYgLS1zdGF0IiBsZWFybmVkIGEgLS1zdGF0LWNvdW50IG9wdGlvbiB0byBsaW1pdCB0aGUgb3V0cHV0IG9mCisgICBhIGRpZmZzdGF0IHJlcG9ydC4KKworICogImdpdCBkaWZmIiBsZWFybmVkIGEgIi0taGlzdG9ncmFtIiBvcHRpb24gdG8gdXNlIGEgZGlmZmVyZW50IGRpZmYKKyAgIGdlbmVyYXRpb24gbWFjaGluZXJ5IHN0b2xlbiBmcm9tIGpnaXQsIHdoaWNoIG1pZ2h0IGdpdmUgYmV0dGVyCisgICBwZXJmb3JtYW5jZS4KKworICogImdpdCBkaWZmIiBoYWQgYSB3ZWlyZCB3b3JzdCBjYXNlIGJlaGF2aW91ciB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQKKyAgIHdoZW4gY29tcGFyaW5nIGZpbGVzIHdpdGggcG90ZW50aWFsbHkgbWFueSBwbGFjZXMgdGhhdCBjb3VsZCBtYXRjaC4KKworICogImdpdCBmZXRjaCIsICJnaXQgcHVzaCIgYW5kIGZyaWVuZHMgbm8gbG9uZ2VyIHNob3cgY29ubmVjdGlvbgorICAgZXJyb3JzIGZvciBhZGRyZXNzZXMgdGhhdCBjb3VsZG4ndCBiZSBjb25uZWN0ZWQgdG8gd2hlbiBhdCBsZWFzdCBvbmUKKyAgIGFkZHJlc3Mgc3VjY2VlZHMgKHRoaXMgaXMgYXJndWFibHkgYSByZWdyZXNzaW9uIGJ1dCBhIGRlbGliZXJhdGUKKyAgIG9uZSkuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCAiLS1icmVhayIgYW5kICItLWhlYWRpbmciIG9wdGlvbnMsIHRvIGxldCB1c2VycyBtaW1pYworICAgdGhlIG91dHB1dCBmb3JtYXQgb2YgImFjayIuCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCBhICItVyIgb3B0aW9uIHRoYXQgc2hvd3Mgd2lkZXIgY29udGV4dCB1c2luZyB0aGUgc2FtZQorICAgbG9naWMgdXNlZCBieSAiZ2l0IGRpZmYiIHRvIGRldGVybWluZSB0aGUgaHVuayBoZWFkZXIuCisKKyAqIEludm9raW5nIHRoZSBsb3ctbGV2ZWwgImdpdCBodHRwLWZldGNoIiB3aXRob3V0ICItYSIgb3B0aW9uICh3aGljaAorICAgZ2l0IGl0c2VsZiBuZXZlciBkaWQtLW5vcm1hbCB1c2VycyBzaG91bGQgbm90IGhhdmUgdG8gd29ycnkgYWJvdXQKKyAgIHRoaXMpIGlzIG5vdyBkZXByZWNhdGVkLgorCisgKiBUaGUgIi0tZGVjb3JhdGUiIG9wdGlvbiB0byAiZ2l0IGxvZyIgYW5kIGl0cyBmYW1pbHkgbGVhcm5lZCB0bworICAgaGlnaGxpZ2h0IGdyYWZ0ZWQgYW5kIHJlcGxhY2VkIGNvbW1pdHMuCisKKyAqICJnaXQgcmViYXNlIG1hc3RlciB0b3BjaSIgbm8gbG9uZ2VyIHNwZXdzIHVzYWdlIGhpbnRzIGFmdGVyIGdpdmluZworICAgdGhlICJmYXRhbDogbm8gc3VjaCBicmFuY2g6IHRvcGNpIiBlcnJvciBtZXNzYWdlLgorCisgKiBUaGUgcmVjdXJzaXZlIG1lcmdlIHN0cmF0ZWd5IGltcGxlbWVudGF0aW9uIGdvdCBhIGZhaXJseSBsYXJnZQorICAgZml4IGZvciBtYW55IGNvcm5lciBjYXNlcyB0aGF0IG1heSByYXJlbHkgaGFwcGVuIGluIHJlYWwgd29ybGQKKyAgIHByb2plY3RzIChpdCBoYXMgYmVlbiB2ZXJpZmllZCB0aGF0IG5vbmUgb2YgdGhlIDE2MDAwKyBtZXJnZXMgaW4KKyAgIHRoZSBMaW51eCBrZXJuZWwgaGlzdG9yeSBiYWNrIHRvIHYyLjYuMTIgaXMgYWZmZWN0ZWQgd2l0aCB0aGUKKyAgIGNvcm5lciBjYXNlIGJ1Z3MgdGhpcyB1cGRhdGUgZml4ZXMpLgorCisgKiAiZ2l0IHN0YXNoIiBsZWFybmVkIGFuICItLWluY2x1ZGUtdW50cmFja2VkIG9wdGlvbiIuCisKKyAqICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIgdXNlZCB0byBzdG9wIGF0IHRoZSBmaXJzdCBlcnJvciB1cGRhdGluZyBhCisgICBzdWJtb2R1bGU7IGl0IG5vdyBnb2VzIG9uIHRvIHVwZGF0ZSBvdGhlciBzdWJtb2R1bGVzIHRoYXQgY2FuIGJlCisgICB1cGRhdGVkLCBhbmQgcmVwb3J0cyB0aGUgb25lcyB3aXRoIGVycm9ycyBhdCB0aGUgZW5kLgorCisgKiAiZ2l0IHB1c2giIGNhbiBiZSB0b2xkIHdpdGggdGhlICItLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVjayIgb3B0aW9uIHRvCisgICByZWZ1c2UgcHVzaGluZyBvZiB0aGUgc3VwZXJtb2R1bGUsIGlmIGFueSBvZiBpdHMgc3VibW9kdWxlcycKKyAgIGNvbW1pdHMgaGFzbid0IGJlZW4gcHVzaGVkIG91dCB0byB0aGVpciByZW1vdGVzLgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiBhbmQgImdpdCByZWNlaXZlLXBhY2siIGxlYXJuZWQgdG8gcHJldGVuZCB0aGF0IG9ubHkgYQorICAgc3Vic2V0IG9mIHRoZSByZWZzIGV4aXN0IGluIGEgcmVwb3NpdG9yeS4gVGhpcyBtYXkgaGVscCBhIHNpdGUgdG8KKyAgIHB1dCBtYW55IHRpbnkgcmVwb3NpdG9yaWVzIGludG8gb25lIHJlcG9zaXRvcnkgKHRoaXMgd291bGQgbm90IGJlCisgICB1c2VmdWwgZm9yIGxhcmdlciByZXBvc2l0b3JpZXMgYXMgcmVwYWNraW5nIHdvdWxkIGJlIHByb2JsZW1hdGljKS4KKworICogImdpdCB2ZXJpZnktcGFjayIgaGFzIGJlZW4gcmV3cml0dGVuIHRvIHVzZSB0aGUgImluZGV4LXBhY2siIG1hY2hpbmVyeQorICAgdGhhdCBpcyBtb3JlIGVmZmljaWVudCBpbiByZWFkaW5nIG9iamVjdHMgaW4gcGFja2ZpbGVzLgorCisgKiB0ZXN0IHNjcmlwdHMgZm9yIGdpdHdlYiB0cmllZCB0byBydW4gZXZlbiB3aGVuIENHSS1yZWxhdGVkIHBlcmwgbW9kdWxlcworICAgYXJlIG5vdCBpbnN0YWxsZWQ7IHRoZXkgbm93IGV4aXQgZWFybHkgd2hlbiB0aGUgbGF0dGVyIGFyZSB1bmF2YWlsYWJsZS4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgbWlub3IgbWlzY2VsbGFuZW91cworY2hhbmdlcy4KKworCitGaXhlcyBzaW5jZSB2MS43LjYKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgZml4ZXMgaW4gdGhlIDEuNy42LlggbWFpbnRlbmFuY2UgdHJhY2sgYXJlCitpbmNsdWRlZCBpbiB0aGlzIHJlbGVhc2UuCisKKyAqICJnaXQgYnJhbmNoIC1tIiBhbmQgImdpdCBjaGVja291dCAtYiIgaW5jb3JyZWN0bHkgYWxsb3dlZCB0aGUgdGlwCisgICBvZiB0aGUgYnJhbmNoIHRoYXQgaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0IHVwZGF0ZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2RjOTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4xLnR4dApAQCAtMCwwICsxLDM4IEBACitHaXQgdjEuNy44LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy44CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogSW4gc29tZSBjb2RlcGF0aHMgKG5vdGFibHksIGNoZWNrb3V0IGFuZCBtZXJnZSksIHRoZSBpZ25vcmUgcGF0dGVybnMKKyAgIHJlY29yZGVkIGluICRHSVRfRElSL2luZm8vZXhjbHVkZSB3ZXJlIG5vdCBob25vcmVkLiBUaGV5IG5vdyBhcmUuCisKKyAqICJnaXQgYXBwbHkgLS1jaGVjayIgZGlkIG5vdCBlcnJvciBvdXQgd2hlbiBnaXZlbiBhbiBlbXB0eSBpbnB1dAorICAgd2l0aG91dCBhbnkgcGF0Y2guCisKKyAqICJnaXQgYXJjaGl2ZSIgbWlzdGFrZW5seSBhbGxvd2VkIHJlbW90ZSBjbGllbnRzIHRvIGFzayBmb3IgY29tbWl0cworICAgdGhhdCBhcmUgbm90IGF0IHRoZSB0aXAgb2YgYW55IHJlZi4KKworICogImdpdCBjaGVja291dCIgYW5kICJnaXQgbWVyZ2UiIHRyZWF0ZWQgaW4tdHJlZSAuZ2l0aWdub3JlIGFuZCBleGNsdWRlCisgICBmaWxlIGluICRHSVRfRElSL2luZm8vIGRpcmVjdG9yeSBpbmNvbnNpc3RlbnRseSB3aGVuIGRlY2lkaW5nIHdoaWNoCisgICB1bnRyYWNrZWQgZmlsZXMgYXJlIGlnbm9yZWQgYW5kIGV4cGVuZGFibGUuCisKKyAqIExGLXRvLUNSTEYgc3RyZWFtaW5nIGZpbHRlciB1c2VkIHdoZW4gY2hlY2tpbmcgb3V0IGEgbGFyZ2UtaXNoIGJsb2IKKyAgIGZlbGwgaW50byBhbiBpbmZpbml0ZSBsb29wIHdpdGggYSByYXJlIGlucHV0LgorCisgKiBUaGUgZnVuY3Rpb24gaGVhZGVyIHBhdHRlcm4gZm9yIGZpbGVzIHdpdGggImRpZmY9Y3BwIiBhdHRyaWJ1dGUgZGlkCisgICBub3QgY29uc2lkZXIgInR5cGUgKmZ1bmNuYW1lKHR5cGUgcGFyYW0xLC4uLiIgYXMgdGhlIGJlZ2lubmluZyBvZiBhCisgICBmdW5jdGlvbi4KKworICogVGhlIGVycm9yIG1lc3NhZ2UgZnJvbSAiZ2l0IGRpZmYiIGFuZCAiZ2l0IHN0YXR1cyIgd2hlbiB0aGV5IGZhaWwKKyAgIHRvIGluc3BlY3QgY2hhbmdlcyBpbiBzdWJtb2R1bGVzIGRpZCBub3QgcmVwb3J0IHdoaWNoIHN1Ym1vZHVsZSB0aGV5CisgICBoYWQgdHJvdWJsZSB3aXRoLgorCisgKiBBZnRlciBmZXRjaGluZyBmcm9tIGEgcmVtb3RlIHRoYXQgaGFzIHZlcnkgbG9uZyByZWZuYW1lLCB0aGUgcmVwb3J0aW5nCisgICBvdXRwdXQgY291bGQgaGF2ZSBjb3JydXB0ZWQgYnkgb3ZlcnJ1bm5pbmcgYSBzdGF0aWMgYnVmZmVyLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgYXZvaWRzIGNyZWF0aW5nIGN5Y2xpYyBkZXBlbmRlbmNpZXMgYW1vbmcgZGVsdGFzCisgICB3aGVuIHNlZWluZyBhIGJyb2tlbiBwYWNrZmlsZSB0aGF0IHJlY29yZHMgdGhlIHNhbWUgb2JqZWN0IGluIGJvdGgKKyAgIHRoZSBkZWZsYXRlZCBmb3JtIGFuZCBhcyBhIGRlbHRhLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWM2NmFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC4yLnR4dApAQCAtMCwwICsxLDcxIEBACitHaXQgdjEuNy44LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy44LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFBvcmNlbGFpbiBjb21tYW5kcyBsaWtlICJnaXQgcmVzZXQiIGRpZCBub3QgZGlzdGluZ3Vpc2ggZGVsZXRpb25zCisgICBhbmQgdHlwZS1jaGFuZ2VzIGZyb20gb3JkaW5hcnkgbW9kaWZpY2F0aW9uLCBhbmQgcmVwb3J0ZWQgdGhlbSB3aXRoCisgICB0aGUgc2FtZSAnTScgbW9uaWtlci4gVGhleSBub3cgdXNlICdEJyAoZm9yIGRlbGV0aW9uKSBhbmQgJ1QnIChmb3IKKyAgIHR5cGUtY2hhbmdlKSB0byBtYXRjaCAiZ2l0IHN0YXR1cyAtcyIgYW5kICJnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIi4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXJzZXIgdXNlZCBmb3Igc2l6ZXMgKGUuZy4gYmlnRmlsZVRocmVzaG9sZCkKKyAgIGRpZCBub3QgY29ycmVjdGx5IGludGVycHJldCAnZycgc3VmZml4LgorCisgKiBUaGUgcmVwbGFjZW1lbnQgaW1wbGVtZW50YXRpb24gZm9yIHNucHJpbnRmIHVzZWQgb24gcGxhdGZvcm1zIHdpdGgKKyAgIG5hdGl2ZSBzbnByaW50ZiB0aGF0IGlzIGJyb2tlbiBkaWQgbm90IHVzZSB2YV9jb3B5IGNvcnJlY3RseS4KKworICogTEYtdG8tQ1JMRiBzdHJlYW1pbmcgZmlsdGVyIHJlcGxhY2VkIGFsbCBMRiB3aXRoIENSTEYsIHdoaWNoIG1pZ2h0CisgICBiZSB0ZWNobmljYWxseSBjb3JyZWN0IGJ1dCBub3QgZnJpZW5kbHkgdG8gcGVvcGxlIHdobyBhcmUgdHJ5aW5nCisgICB0byByZWNvdmVyIGZyb20gZWFybGllciBtaXN0YWtlcyBvZiB1c2luZyBDUkxGIGluIHRoZSByZXBvc2l0b3J5CisgICBkYXRhIGluIHRoZSBmaXJzdCBwbGFjZS4gSXQgbm93IHJlZnJhaW5zIGZyb20gZG9pbmcgc28gZm9yIExGIHRoYXQKKyAgIGZvbGxvd3MgYSBDUi4KKworICogZ2l0IG5hdGl2ZSBjb25uZWN0aW9uIGdvaW5nIG92ZXIgVENQIChub3Qgb3ZlciBTU0gpIGRpZCBub3Qgc2V0CisgICBTT19LRUVQQUxJVkUgb3B0aW9uIHdoaWNoIGZhaWxlZCB0byByZWNlaXZlIGxpbmsgbGF5ZXIgZXJyb3JzLgorCisgKiAiZ2l0IGJyYW5jaCAtbSA8Y3VycmVudCBicmFuY2g+IEhFQUQiIGlzIGFuIG9idmlvdXMgbm8tb3AgYnV0IHdhcyBub3QKKyAgIGFsbG93ZWQuCisKKyAqICJnaXQgY2hlY2tvdXQgLW0iIGRpZCBub3QgcmVjcmVhdGUgdGhlIGNvbmZsaWN0ZWQgc3RhdGUgaW4gYSAiYm90aAorICAgc2lkZXMgYWRkZWQsIHdpdGhvdXQgYW55IGNvbW1vbiBhbmNlc3RvciB2ZXJzaW9uIiBjb25mbGljdAorICAgc2l0dWF0aW9uLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrICRjb21taXQiIChub3QgYSByYW5nZSkgY3JlYXRlZCBhbiB1bm5lY2Vzc2FyeQorICAgc2VxdWVuY2VyIHN0YXRlIGFuZCBpbnRlcmZlcmVkIHdpdGggdmFsaWQgd29ya2Zsb3cgdG8gdXNlIHRoZQorICAgY29tbWFuZCBkdXJpbmcgYSBzZXNzaW9uIHRvIGNoZXJyeS1waWNrIG11bHRpcGxlIGNvbW1pdHMuCisKKyAqIFlvdSBjb3VsZCBtYWtlICJnaXQgY29tbWl0IiBzZWdmYXVsdCBieSBnaXZpbmcgdGhlICItLW5vLW1lc3NhZ2UiCisgICBvcHRpb24uCisKKyAqICJmYXN0LWltcG9ydCIgZGlkIG5vdCBjb3JyZWN0bHkgdXBkYXRlIGFuIGV4aXN0aW5nIG5vdGVzIHRyZWUsCisgICBwb3NzaWJseSBjb3JydXB0aW5nIHRoZSBmYW4tb3V0LgorCisgKiAiZ2l0IGZldGNoLXBhY2siIGFjY2VwdGVkIHVucXVhbGlmaWVkIHJlZnMgdGhhdCBkbyBub3QgYmVnaW4gd2l0aAorICAgcmVmcy8gYnkgbWlzdGFrZSBhbmQgY29tcGVuc2F0ZWQgaXQgYnkgbWF0Y2hpbmcgdGhlIHJlZnNwZWMgd2l0aAorICAgdGFpbC1tYXRjaCwgd2hpY2ggd2FzIGRvdWJseSB3cm9uZy4gVGhpcyBicm9rZSBmZXRjaGluZyBmcm9tIGEKKyAgIHJlcG9zaXRvcnkgd2l0aCBhIGZ1bm55IG5hbWVkIHJlZiAicmVmcy9mb28vcmVmcy9oZWFkcy9tYXN0ZXIiIGFuZCBhCisgICAnbWFzdGVyJyBicmFuY2ggd2l0aCAiZ2l0IGZldGNoLXBhY2sgcmVmcy9oZWFkcy9tYXN0ZXIiLCBhcyB0aGUKKyAgIGNvbW1hbmQgaW5jb3JyZWN0bHkgY29uc2lkZXJlZCB0aGUgZm9ybWVyIGEgIm1hdGNoIi4KKworICogImdpdCBsb2cgLS1mb2xsb3ciIGRpZCBub3QgaG9ub3IgdGhlIHJlbmFtZSB0aHJlc2hvbGQgc2NvcmUgZ2l2ZW4KKyAgIHdpdGggdGhlIC1NIG9wdGlvbiAoZS5nLiAiLU01MCUiKS4KKworICogImdpdCBtdiIgZ2F2ZSBzdWJvcHRpbWFsIGVycm9yL3dhcm5pbmcgbWVzc2FnZXMgd2hlbiBpdCBvdmVyd3JpdGVzCisgICB0YXJnZXQgZmlsZXMuIEl0IGFsc28gZGlkIG5vdCBwYXkgYXR0ZW50aW9uIHRvICItdiIgb3B0aW9uLgorCisgKiBBdXRoZW50aWNhdGVkICJnaXQgcHVzaCIgb3ZlciBkdW1iIEhUVFAgd2VyZSBicm9rZW4gd2l0aCBhIHJlY2VudAorICAgY2hhbmdlIGFuZCBmYWlsZWQgd2l0aG91dCBhc2tpbmcgZm9yIHBhc3N3b3JkIHdoZW4gdXNlcm5hbWUgaXMKKyAgIGdpdmVuLgorCisgKiAiZ2l0IHB1c2giIHRvIGFuIGVtcHR5IHJlcG9zaXRvcnkgb3ZlciBIVFRQIHdlcmUgYnJva2VuIHdpdGggYQorICAgcmVjZW50IGNoYW5nZSB0byB0aGUgcmVmIGhhbmRsaW5nLgorCisgKiAiZ2l0IHB1c2ggLXYiIGZvcmdvdCBob3cgdG8gYmUgdmVyYm9zZSBieSBtaXN0YWtlLiBJdCBub3cgcHJvcGVybHkKKyAgIGJlY29tZXMgdmVyYm9zZSB3aGVuIGFza2VkIHRvLgorCisgKiBXaGVuIGEgInJld29yZCIgYWN0aW9uIGluICJnaXQgcmViYXNlIC1pIiBmYWlsZWQgdG8gcnVuICJjb21taXQgLS1hbWVuZCIsCisgICB3ZSBkaWQgbm90IGdpdmUgdGhlIGNvbnRyb2wgYmFjayB0byB0aGUgdXNlciB0byByZXNvbHZlIHRoZSBzaXR1YXRpb24sIGFuZAorICAgaW5zdGVhZCBrZXB0IHRoZSBvcmlnaW5hbCBjb21taXQgbG9nIG1lc3NhZ2UuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MjcxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjMudHh0CkBAIC0wLDAgKzEsMTYgQEAKK0dpdCB2MS43LjguMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjguMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQXR0ZW1wdCB0byBmZXRjaCBmcm9tIGFuIGVtcHR5IGZpbGUgcHJldGVuZGluZyBpdCB0byBiZSBhIGJ1bmRsZSBkaWQKKyAgIG5vdCBlcnJvciBvdXQgY29ycmVjdGx5LgorCisgKiBnaXR3ZWIgZGlkIG5vdCBjb3JyZWN0bHkgZmFsbCBiYWNrIHRvIGNvbmZpZ3VyZWQgJGZhbGxiYWNrX2VuY29kaW5nCisgICB0aGF0IGlzIG5vdCAnbGF0aW4xJy4KKworICogImdpdCBjbG9uZSAtLWRlcHRoICRuIiBkaWQgbm90IGNhdGNoIGEgbm9uLW51bWJlciBnaXZlbiBhcyAkbiBhcyBhbgorICAgZXJyb3IuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZWJkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjQudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0dpdCB2MS43LjguNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjguMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIGNvZGUgdG8gbG9vayB1cCBhdHRyaWJ1dGVzIGZvciBwYXRocyByZXVzZWQgZW50cmllcyBmcm9tIGEgd3JvbmcKKyAgIGRpcmVjdG9yeSB3aGVuIHR3byBwYXRocyBpbiBxdWVzdGlvbiBhcmUgaW4gYWRqYWNlbnQgZGlyZWN0b3JpZXMgYW5kCisgICB0aGUgbmFtZSBvZiB0aGUgb25lIGRpcmVjdG9yeSBpcyBhIHByZWZpeCBvZiB0aGUgb3RoZXIuCisKKyAqIEEgd2lsZGNhcmQgdGhhdCBtYXRjaGVzIGRlZXBlciBoaWVyYXJjaHkgZ2l2ZW4gdG8gdGhlICJkaWZmLWluZGV4IiBjb21tYW5kLAorICAgZS5nLiAiZ2l0IGRpZmYtaW5kZXggSEVBRCAtLSAnKi50eHQnIiwgaW5jb3JyZWN0bHkgcmVwb3J0ZWQgYWRkaXRpb25zIG9mCisgICBtYXRjaGluZyBmaWxlcyBldmVuIHdoZW4gdGhlcmUgaXMgbm8gY2hhbmdlLgorCisgKiBXaGVuIHByb2R1Y2luZyBhICJ0aGluIHBhY2siIChwcmltYXJpbHkgdXNlZCBpbiBidW5kbGVzIGFuZCBzbWFydAorICAgSFRUUCB0cmFuc2ZlcnMpIG91dCBvZiBhIGZ1bGx5IHBhY2tlZCByZXBvc2l0b3J5LCB3ZSB1bm5lY2Vzc2FyaWx5CisgICBhdm9pZGVkIHNlbmRpbmcgcmVjZW50IG9iamVjdHMgYXMgYSBkZWx0YSBhZ2FpbnN0IG9iamVjdHMgd2Uga25vdworICAgdGhlIG90aGVyIHNpZGUgaGFzLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgcHJvcGVybHkgdHJlYXQgc2VuZGVtYWlsLm11bHRpZWRpdCBhcyBhCisgICBib29sZWFuIChlLmcuIHNldHRpbmcgaXQgdG8gImZhbHNlIiBkaWQgbm90IHR1cm4gaXQgb2ZmKS4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOC41LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExZmQyYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNS50eHQKQEAgLTAsMCArMSwxOSBAQAorR2l0IHYxLjcuOC41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOC40CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBEZXBlbmRlbmN5IG9uIG91ciB0aHJlYWQtdXRpbHMuaCBoZWFkZXIgZmlsZSB3YXMgbWlzc2luZyBmb3IKKyAgIG9iamVjdHMgdGhhdCBkZXBlbmQgb24gaXQgaW4gdGhlIE1ha2VmaWxlLgorCisgKiAiZ2l0IGFtIiB3aGVuIGZlZCBhbiBlbXB0eSBmaWxlIGRpZCBub3QgY29ycmVjdGx5IGZpbmlzaCByZWFkaW5nIGl0CisgICB3aGVuIGl0IGF0dGVtcHRzIHRvIGd1ZXNzIHRoZSBpbnB1dCBmb3JtYXQuCisKKyAqICJnaXQgZ3JlcCAtUCIgKHdoZW4gUENSRSBpcyBlbmFibGVkIGluIHRoZSBidWlsZCkgZGlkIG5vdCBtYXRjaCB0aGUKKyAgIGJlZ2lubmluZyBhbmQgdGhlIGVuZCBvZiB0aGUgbGluZSBjb3JyZWN0bHkgd2l0aCBeIGFuZCAkLgorCisgKiAiZ2l0IHJlYmFzZSAtbSIgdHJpZWQgdG8gcnVuICJnaXQgbm90ZXMgY29weSIgbmVlZGxlc3NseSB3aGVuCisgICBub3RoaW5nIHdhcyByZXdyaXR0ZW4uCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjguNi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YmYyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LjYudHh0CkBAIC0wLDAgKzEsMjIgQEAKK0dpdCB2MS43LjguNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjguNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gZXJyb3IgbWVzc2FnZSBmcm9tICdnaXQgYnVuZGxlJyBoYWQgYW4gdW5tYXRjaGVkIHNpbmdsZSBxdW90ZSBwYWlyIGluIGl0LgorCisgKiAnZ2l0IGRpZmYgLS1oaXN0b2dyYW0nIG9wdGlvbiB3YXMgbm90IGRlc2NyaWJlZC4KKworICogRG9jdW1lbnRhdGlvbiBmb3IgJ2dpdCByZXYtbGlzdCcgaGFkIG1pbm9yIGZvcm1hdHRpbmcgZXJyb3JzLgorCisgKiAnZ2l0IGltYXAtc2VuZCcgY2FycmllZCBhbiB1bnVzZWQgZGVhZCBjb2RlLgorCisgKiBUaGUgd2F5ICdnaXQgZmV0Y2gnIGltcGxlbWVudGVkIGl0cyBjb25uZWN0aXZpdHkgY2hlY2sgb3ZlcgorICAgcmVjZWl2ZWQgb2JqZWN0cyB3YXMgb3Zlcmx5IHBlc3NpbWlzdGljLCBhbmQgd2FzdGVkIGEgbG90IG9mCisgICBjeWNsZXMuCisKKyAqIFZhcmlvdXMgbWlub3IgYmFja3BvcnRzIG9mIGZpeGVzIGZyb20gdGhlICdtYXN0ZXInIGFuZCB0aGUgJ21haW50JworICAgYnJhbmNoLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OTMxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy44LnR4dApAQCAtMCwwICsxLDE2MSBAQAorR2l0IHYxLjcuOCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFNvbWUgZ2l0LXN2biwgZ2l0LWd1aSwgZ2l0LXA0IChpbiBjb250cmliKSBhbmQgbXN5c2dpdCB1cGRhdGVzLgorCisgKiBVcGRhdGVzIHRvIGJhc2ggY29tcGxldGlvbiBzY3JpcHRzLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIGhhcyBiZWVuIHRhdWdodCB0byB0YWtlIGFkdmFudGFnZSBvZiBjb21wdXRlZAorICAgZGVwZW5kZW5jeSBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGl0LgorCisgKiBUaGUgZGF0ZSBwYXJzZXIgbm93IGFjY2VwdHMgdGltZXpvbmUgZGVzaWduYXRvcnMgdGhhdCBsYWNrIG1pbnV0ZXMKKyAgIHBhcnQgYW5kIGFsc28gaGFzIGEgY29sb24gYmV0d2VlbiAiaGg6bW0iLgorCisgKiBUaGUgY29udGVudHMgb2YgdGhlIC9ldGMvbWFpbG5hbWUgZmlsZSwgaWYgZXhpc3RzLCBpcyB1c2VkIGFzIHRoZQorICAgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgaG9zdG5hbWUgcGFydCBvZiB0aGUgY29tbWl0dGVyL2F1dGhvciBlLW1haWwuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgaG93IHRvIHJlYWQgZnJvbSBwYXRjaGVzIGdlbmVyYXRlZCBieSBIZy4KKworICogImdpdCBhcmNoaXZlIiB0YWxraW5nIHdpdGggYSByZW1vdGUgcmVwb3NpdG9yeSBjYW4gcmVwb3J0IGVycm9ycworICAgZnJvbSB0aGUgcmVtb3RlIHNpZGUgaW4gYSBtb3JlIGluZm9ybWF0aXZlIHdheS4KKworICogImdpdCBicmFuY2giIGxlYXJuZWQgYW4gZXhwbGljaXQgLS1saXN0IG9wdGlvbiB0byBhc2sgZm9yIGJyYW5jaGVzCisgICBsaXN0ZWQsIG9wdGlvbmFsbHkgd2l0aCBhIGdsb2IgbWF0Y2hpbmcgcGF0dGVybiB0byBsaW1pdCBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IGNoZWNrLWF0dHIiIGxlYXJuZWQgIi0tY2FjaGVkIiBvcHRpb24gdG8gbG9vayBhdCAuZ2l0YXR0cmlidXRlcworICAgZmlsZXMgZnJvbSB0aGUgaW5kZXgsIG5vdCBmcm9tIHRoZSB3b3JraW5nIHRyZWUuCisKKyAqIFZhcmlhbnRzIG9mICJnaXQgY2hlcnJ5LXBpY2siIGFuZCAiZ2l0IHJldmVydCIgdGhhdCB0YWtlIG11bHRpcGxlCisgICBjb21taXRzIGxlYXJuZWQgdG8gIi0tY29udGludWUiIGFuZCAiLS1hYm9ydCIuCisKKyAqICJnaXQgZGFlbW9uIiBnaXZlcyBtb3JlIGh1bWFuIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2VzIHRvIGNsaWVudHMKKyAgIHVzaW5nIEVSUiBwYWNrZXRzIHdoZW4gYXBwcm9wcmlhdGUuCisKKyAqIEVycm9ycyBhdCB0aGUgbmV0d29yayBsYXllciBpcyBsb2dnZWQgYnkgImdpdCBkYWVtb24iLgorCisgKiAiZ2l0IGRpZmYiIGxlYXJuZWQgIi0tbWluaW1hbCIgb3B0aW9uIHRvIHNwZW5kIGV4dHJhIGN5Y2xlcyB0byBjb21lCisgICB1cCB3aXRoIGEgbWluaW1hbCBwYXRjaCBvdXRwdXQuCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCAiLS1mdW5jdGlvbi1jb250ZXh0IiBvcHRpb24gdG8gc2hvdyB0aGUgd2hvbGUKKyAgIGZ1bmN0aW9uIGFzIGNvbnRleHQgdGhhdCB3YXMgYWZmZWN0ZWQgYnkgYSBjaGFuZ2UuCisKKyAqICJnaXQgZGlmZnRvb2wiIGNhbiBiZSB0b2xkIHRvIHNraXAgbGF1bmNoaW5nIHRoZSB0b29sIGZvciBhIHBhdGggYnkKKyAgIGFuc3dlcmluZyAnbicgdG8gaXRzIHByb21wdC4KKworICogImdpdCBmZXRjaCIgbGVhcm5lZCB0byBob25vciB0cmFuc2Zlci5mc2Nrb2JqZWN0cyBjb25maWd1cmF0aW9uIHRvCisgICB2YWxpZGF0ZSB0aGUgb2JqZWN0cyB0aGF0IHdlcmUgcmVjZWl2ZWQgZnJvbSB0aGUgb3RoZXIgZW5kLCBqdXN0IGxpa2UKKyAgICJnaXQgcmVjZWl2ZS1wYWNrIiAodGhlIHJlY2VpdmluZyBlbmQgb2YgImdpdCBwdXNoIikgZG9lcy4KKworICogImdpdCBmZXRjaCIgbWFrZXMgc3VyZSB0aGF0IHRoZSBzZXQgb2Ygb2JqZWN0cyBpdCByZWNlaXZlZCBmcm9tIHRoZQorICAgb3RoZXIgZW5kIGFjdHVhbGx5IGNvbXBsZXRlcyB0aGUgaGlzdG9yeSBiZWZvcmUgdXBkYXRpbmcgdGhlIHJlZnMuCisgICAiZ2l0IHJlY2VpdmUtcGFjayIgKHRoZSByZWNlaXZpbmcgZW5kIG9mICJnaXQgcHVzaCIpIGxlYXJuZWQgdG8gZG8gdGhlCisgICBzYW1lLgorCisgKiAiZ2l0IGZldGNoIiBsZWFybmVkIHRoYXQgZmV0Y2hpbmcvY2xvbmluZyBmcm9tIGEgcmVndWxhciBmaWxlIG9uIHRoZQorICAgZmlsZXN5c3RlbSBpcyBub3QgbmVjZXNzYXJpbHkgYSByZXF1ZXN0IHRvIHVucGFjayBhIGJ1bmRsZSBmaWxlOyB0aGUKKyAgIGZpbGUgY291bGQgYmUgIi5naXQiIHdpdGggImdpdGRpcjogPHBhdGg+IiBpbiBpdC4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIGxlYXJuZWQgIiUoY29udGVudHM6c3ViamVjdCkiLCAiJShjb250ZW50czpib2R5KSIKKyAgIGFuZCAiJShjb250ZW50czpzaWduYXR1cmUpIi4gVGhlIGxhc3Qgb25lIGlzIHVzZWZ1bCBmb3Igc2lnbmVkIHRhZ3MuCisKKyAqICJnaXQgZ3JlcCIgdXNlZCB0byBpbmNvcnJlY3RseSBwYXkgYXR0ZW50aW9uIHRvIC5naXRpZ25vcmUgZmlsZXMKKyAgIHNjYXR0ZXJlZCBpbiB0aGUgZGlyZWN0b3J5IGl0IHdhcyB3b3JraW5nIGluIGV2ZW4gd2hlbiAiLS1uby1pbmRleCIKKyAgIG9wdGlvbiB3YXMgdXNlZC4gSXQgbm8gbG9uZ2VyIGRvZXMgdGhpcy4gVGhlICItLWV4Y2x1ZGUtc3RhbmRhcmQiCisgICBvcHRpb24gbmVlZHMgdG8gYmUgZ2l2ZW4gdG8gZXhwbGljaXRseSBhY3RpdmF0ZSB0aGUgaWdub3JlCisgICBtZWNoYW5pc20uCisKKyAqICJnaXQgZ3JlcCIgbGVhcm5lZCAiLS11bnRyYWNrZWQiIG9wdGlvbiwgd2hlcmUgZ2l2ZW4gcGF0dGVybnMgYXJlCisgICAgc2VhcmNoZWQgaW4gdW50cmFja2VkIChidXQgbm90IGlnbm9yZWQpIGZpbGVzIGFzIHdlbGwgYXMgdHJhY2tlZAorICAgIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsIHNvIHRoYXQgbWF0Y2hlcyBpbiBuZXcgYnV0IG5vdCB5ZXQKKyAgICBhZGRlZCBmaWxlcyBkbyBub3QgZ2V0IG1pc3NlZC4KKworICogVGhlIHJlY3Vyc2l2ZSBtZXJnZSBiYWNrZW5kIG5vIGxvbmdlciBsb29rcyBmb3IgbWVhbmluZ2xlc3MKKyAgIGV4aXN0aW5nIG1lcmdlcyBpbiBzdWJtb2R1bGVzIHVubGVzcyBpbiB0aGUgb3V0ZXJtb3N0IG1lcmdlLgorCisgKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgbGVhcm5lZCAiLS1jaGlsZHJlbiIgb3B0aW9uLgorCisgKiAiZ2l0IGxzLXJlbW90ZSIgbGVhcm5lZCB0byByZXNwb25kIHRvICItaCIoZWxwKSByZXF1ZXN0cy4KKworICogIm1lZGlhd2lraSIgcmVtb3RlIGhlbHBlciBjYW4gaW50ZXJhY3Qgd2l0aCAoc3VycHJpc2UhKSBNZWRpYVdpa2kKKyAgIHdpdGggImdpdCBmZXRjaCIgJiAiZ2l0IHB1c2giLgorCisgKiAiZ2l0IG1lcmdlIiBsZWFybmVkIHRoZSAiLS1lZGl0IiBvcHRpb24gdG8gYWxsb3cgdXNlcnMgdG8gZWRpdCB0aGUKKyAgIG1lcmdlIGNvbW1pdCBsb2cgbWVzc2FnZS4KKworICogImdpdCByZWJhc2UgLWkiIGNhbiBiZSB0b2xkIHRvIHVzZSBzcGVjaWFsIHB1cnBvc2UgZWRpdG9yIHN1aXRhYmxlCisgICBvbmx5IGZvciBpdHMgaW5zbiBzaGVldCB2aWEgc2VxdWVuY2UuZWRpdG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCB0byByZXNwb25kIHRvICItaCIoZWxwKSByZXF1ZXN0cy4KKworICogImdpdCBzZW5kLWVtYWlsIiBhbGxvd3MgdGhlIHZhbHVlIGdpdmVuIHRvIHNlbmRlbWFpbC5hbGlhc2ZpbGUgdG8gYmVnaW4KKyAgIHdpdGggIn4vIiB0byByZWZlciB0byB0aGUgJEhPTUUgZGlyZWN0b3J5LgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGZvcmNlcyB1c2Ugb2YgQXV0aGVuOjpTQVNMOjpQZXJsIHRvIHdvcmsgYXJvdW5kCisgICBpc3N1ZXMgYmV0d2VlbiBBdXRoZW46OlNBU0w6OkN5cnVzIGFuZCBBVVRIIFBMQUlOL0xPR0lOLgorCisgKiAiZ2l0IHN0YXNoIiBsZWFybmVkICItLWluY2x1ZGUtdW50cmFja2VkIiBvcHRpb24gdG8gc3Rhc2ggYXdheQorICAgdW50cmFja2VkL2lnbm9yZWQgY3J1ZnQgZnJvbSB0aGUgd29ya2luZyB0cmVlLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBjbG9uZSIgZG9lcyBub3QgbGVhayBhbiBlcnJvciBtZXNzYWdlIHRvIHRoZSBVSQorICAgbGV2ZWwgdW5uZWNlc3NhcmlseSBhbnltb3JlLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiIGxlYXJuZWQgdG8gaG9ub3IgIm5vbmUiIGFzIHRoZSB2YWx1ZSBmb3IKKyAgIHN1Ym1vZHVsZS48bmFtZT4udXBkYXRlIHRvIHNwZWNpZnkgdGhhdCB0aGUgbmFtZWQgc3VibW9kdWxlIHNob3VsZAorICAgbm90IGJlIGNoZWNrZWQgb3V0IGJ5IGRlZmF1bHQuCisKKyAqIFdoZW4gcG9wdWxhdGluZyBhIG5ldyBzdWJtb2R1bGUgZGlyZWN0b3J5IHdpdGggImdpdCBzdWJtb2R1bGUgaW5pdCIsCisgICB0aGUgJEdJVF9ESVIgbWV0YWluZm9ybWF0aW9uIGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlcyBpcyBjcmVhdGVkIGluc2lkZQorICAgJEdJVF9ESVIvbW9kdWxlcy88bmFtZT4vIGRpcmVjdG9yeSBvZiB0aGUgc3VwZXJwcm9qZWN0IGFuZCByZWZlcmVuY2VkCisgICB2aWEgdGhlIGdpdGZpbGUgbWVjaGFuaXNtLiBUaGlzIGlzIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gc3dpdGNoCisgICBiZXR3ZWVuIGNvbW1pdHMgaW4gdGhlIHN1cGVycHJvamVjdCB0aGF0IGhhcyBhbmQgZG9lcyBub3QgaGF2ZSB0aGUKKyAgIHN1Ym1vZHVsZSBpbiB0aGUgdHJlZSB3aXRob3V0IHJlLWNsb25pbmcuCisKKyAqICJnaXR3ZWIiIGxlYWtlZCB1bmVzY2FwZWQgY29udHJvbCBjaGFyYWN0ZXJzIGZyb20gc3ludGF4IGhpbGl0ZXIKKyAgIG91dHB1dHMuCisKKyAqICJnaXR3ZWIiIGNhbiBiZSB0b2xkIHRvIGdpdmUgY3VzdG9tIHN0cmluZyBhdCB0aGUgZW5kIG9mIHRoZSBIVE1MCisgICBIRUFEIGVsZW1lbnQuCisKKyAqICJnaXR3ZWIiIG5vdyBoYXMgaXRzIG93biBtYW51YWwgcGFnZXMuCisKKworQWxzbyBjb250YWlucyBvdGhlciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIG1pbm9yIGNvZGUgY2xlYW51cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy43CistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIGZpeGVzIGluIHRoZSAxLjcuNy5YIG1haW50ZW5hbmNlIHRyYWNrIGFyZQoraW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlLgorCisgKiBIVFRQIHRyYW5zcG9ydCBkaWQgbm90IHVzZSBwdXNodXJsIGNvcnJlY3RseSwgYW5kIGFsc28gZGlkIG5vdCB0ZWxsCisgICB3aGF0IGhvc3QgaXQgaXMgdHJ5aW5nIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIHdoZW4gYXNraW5nIGZvcgorICAgY3JlZGVudGlhbHMuCisgICAobWVyZ2UgZGViYTQ5MyBqay9odHRwLWF1dGggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJsYW1lIiB3YXMgYWJvcnRlZCBpZiBzdGFydGVkIGZyb20gYW4gdW5jb21taXR0ZWQgY29udGVudCBhbmQKKyAgIHRoZSBwYXRoIGhhZCB0aGUgdGV4dGNvbnYgZmlsdGVyIGluIGVmZmVjdC4KKyAgIChtZXJnZSA4NTE4MDg4IHNzL2JsYW1lLXRleHRjb252LWZha2Utd29ya2luZy10cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogQWRkaW5nIG1hbnkgcmVmcyB0byB0aGUgbG9jYWwgcmVwb3NpdG9yeSBpbiBvbmUgZ28gKGUuZy4gImdpdCBmZXRjaCIKKyAgIHRoYXQgZmV0Y2hlcyBtYW55IHRhZ3MpIGFuZCBsb29raW5nIHVwIGEgcmVmIGJ5IG5hbWUgaW4gYSByZXBvc2l0b3J5CisgICB3aXRoIHRvbyBtYW55IHJlZnMgd2VyZSB1bm5lY2Vzc2FyaWx5IHNsb3cuCisgICAobWVyZ2UgMTdkNjhhNTRkIGpwL2dldC1yZWYtZGlyLXVuc29ydGVkIGxhdGVyIHRvIG1haW50KS4KKworICogUmVwb3J0IGZyb20gImdpdCBjb21taXQiIG9uIHVudHJhY2tlZCBmaWxlcyB3YXMgY29uZnVzZWQgdW5kZXIKKyAgIGNvcmUuaWdub3JlY2FzZSBvcHRpb24uCisgICAobWVyZ2UgMzk1YzczNTYgamsvbmFtZS1oYXNoLWRpcmVudCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UiIGRpZCBub3QgdW5kZXJzdGFuZCAiOi88cGF0dGVybj4iIGFzIGEgd2F5IHRvIG5hbWUgYSBjb21taXQuCisKKyAiICJnaXQgcHVzaCIgb24gdGhlIHJlY2VpdmluZyBlbmQgdXNlZCB0byBjYWxsIHBvc3QtcmVjZWl2ZSBhbmQgcG9zdC11cGRhdGUKKyAgIGhvb2tzIGZvciBhdHRlbXB0ZWQgcmVtb3ZhbCBvZiBub24tZXhpc3RpbmcgcmVmcy4KKyAgIChtZXJnZSAxNjBiODFlZCBwaC9wdXNoLXRvLWRlbGV0ZS1ub3RoaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogSGVscCB0ZXh0IGZvciAiZ2l0IHJlbW90ZSBzZXQtdXJsIiBhbmQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIgorICAgd2VyZSBtaXNzcGVsbGVkLgorICAgKG1lcmdlIGM0OTkwNGUgZmMvcmVtb3RlLXNldHVybC11c2FnZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDY1NmNkZjAgamMvcmVtb3RlLXNldGJyYW5jaGVzLXVzYWdlLWZpeCBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTU3MTgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4xLnR4dApAQCAtMCwwICsxLDYzIEBACitHaXQgdjEuNy45LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy45CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIG1ha2VmaWxlIGFsbG93ZWQgZW52aXJvbm1lbnQgdmFyaWFibGUgWCBzZWVwIGludG8gaXQgcmVzdWx0IGluCisgICBjb21tYW5kIG5hbWVzIHN1ZmZpeGVkIHdpdGggdW5uZWNlc3Nhcnkgc3RyaW5ncy4KKworICogVGhlIHNldCBvZiBpbmNsdWRlZCBoZWFkZXIgZmlsZXMgaW4gY29tcGF0L2luZXQte250b3AscHRvbn0KKyAgIHdyYXBwZXJzIHdhcyB1cGRhdGVkIGZvciBXaW5kb3dzIHNvbWUgdGltZSBhZ28sIGJ1dCBpbiBhIHdheSB0aGF0CisgICBicm9rZSBTb2xhcmlzIGJ1aWxkLgorCisgKiBycG1idWlsZCBub3RpY2VkIGFuIHVucGFja2FnZWQgYnV0IGluc3RhbGxlZCAqLm1vIGZpbGUgYW5kIGZhaWxlZC4KKworICogU3VicHJvY2Vzc2VzIHNwYXduZWQgZnJvbSB2YXJpb3VzIGdpdCBwcm9ncmFtcyB3ZXJlIG9mdGVuIGxlZnQgcnVubmluZworICAgdG8gY29tcGxldGlvbiBldmVuIHdoZW4gdGhlIHRvcC1sZXZlbCBwcm9jZXNzIHdhcyBraWxsZWQuCisKKyAqICJnaXQgYWRkIC1lIiBsZWFybmVkIG5vdCB0byBzaG93IGEgZGlmZiBmb3IgYW4gb3RoZXJ3aXNlIHVubW9kaWZpZWQKKyAgIHN1Ym1vZHVsZSB0aGF0IG9ubHkgaGFzIHVuY29tbWl0dGVkIGxvY2FsIGNoYW5nZXMgaW4gdGhlIHBhdGNoCisgICBwcmVwYXJlZCBieSBmb3IgdGhlIHVzZXIgdG8gZWRpdC4KKworICogVHlwbyBpbiAiZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24gbXktdHBvaWMiIHdhcyBub3QgZGlhZ25vc2VkLgorCisgKiBVc2luZyAiZ2l0IGdyZXAgLWwvLUwiIHRvZ2V0aGVyIHdpdGggb3B0aW9ucyAtVyBvciAtLWJyZWFrIG1heSBub3QKKyAgIG1ha2UgbXVjaCBzZW5zZSBhcyB0aGUgb3V0cHV0IGlzIHRvIG9ubHkgY291bnQgdGhlIG51bWJlciBvZiBoaXRzCisgICBhbmQgdGhlcmUgaXMgbm8gcGxhY2UgZm9yIGZpbGUgYnJlYWtzLCBidXQgdGhlIGxhdHRlciBvcHRpb25zIG1hZGUKKyAgICItbC8tTCIgdG8gbWlzY291bnQgdGhlIGhpdHMuCisKKyAqICJnaXQgbG9nIC0tZmlyc3QtcGFyZW50ICRwYXRoc3BlYyIgZGlkIG5vdCBzdGF5IG9uIHRoZSBmaXJzdCBwYXJlbnQKKyAgIGNoYWluIGFuZCB2ZWVyZWQgaW50byBzaWRlIGJyYW5jaCBmcm9tIHdoaWNoIHRoZSB3aG9sZSBjaGFuZ2UgdG8gdGhlCisgICBzcGVjaWZpZWQgcGF0aHMgY2FtZS4KKworICogImdpdCBtZXJnZSAtLW5vLWVkaXQgJHRhZyIgZmFpbGVkIHRvIGhvbm9yIHRoZSAtLW5vLWVkaXQgb3B0aW9uLgorCisgKiAiZ2l0IG1lcmdlIC0tZmYtb25seSAkdGFnIiBmYWlsZWQgYmVjYXVzZSBpdCBjYW5ub3QgcmVjb3JkIHRoZQorICAgcmVxdWlyZWQgbWVyZ2V0YWcgd2l0aG91dCBjcmVhdGluZyBhIG1lcmdlLCBidXQgdGhpcyBpcyBzbyBjb21tb24KKyAgIG9wZXJhdGlvbiBmb3IgYnJhbmNoIHRoYXQgaXMgdXNlZCBfb25seV8gdG8gZm9sbG93IHRoZSB1cHN0cmVhbSwgc28KKyAgIGl0IHdhcyBjaGFuZ2VkIHRvIGFsbG93IGZhc3QtZm9yd2FyZGluZyB3aXRob3V0IHJlY29yZGluZyB0aGUgbWVyZ2V0YWcuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBub3cgZ2l2ZXMgYW4gZW1wdHkgZmlsZSBhcyB0aGUgY29tbW9uIGJhc2UgdmVyc2lvbgorICAgdG8gdGhlIGJhY2tlbmQgd2hlbiBkZWFsaW5nIHdpdGggdGhlICJib3RoIHNpZGVzIGFkZGVkLCBkaWZmZXJlbnRseSIKKyAgIGNhc2UuCisKKyAqICJnaXQgcHVzaCAtcSIgd2FzIG5vdCBzdWZmaWNpZW50bHkgcXVpZXQuCisKKyAqIFdoZW4gImdpdCBwdXNoIiBmYWlscyB0byB1cGRhdGUgYW55IHJlZnMsIHRoZSBjbGllbnQgc2lkZSBkaWQgbm90CisgICByZXBvcnQgYW4gZXJyb3IgY29ycmVjdGx5IHRvIHRoZSBlbmQgdXNlci4KKworICogInJlYmFzZSIgYW5kICJjb21taXQgLS1hbWVuZCIgZmFpbGVkIHRvIHdvcmsgb24gY29tbWl0cyB3aXRoIGFuY2llbnQKKyAgIHRpbWVzdGFtcHMgbmVhciB5ZWFyIDE5NzAuCisKKyAqIFdoZW4gYXNraW5nIGZvciBhIHRhZyB0byBiZSBwdWxsZWQsICJyZXF1ZXN0LXB1bGwiIGRpZCBub3Qgc2hvdyB0aGUKKyAgIG5hbWUgb2YgdGhlIHRhZyBwcmVmaXhlZCB3aXRoICJ0YWdzLyIsIHdoaWNoIHdvdWxkIGhhdmUgaGVscGVkIG9sZGVyCisgICBjbGllbnRzLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBhZGQgJHBhdGgiIGZvcmdvdCB0byByZWNvbXB1dGUgdGhlIG5hbWUgdG8gYmUgc3RvcmVkCisgICBpbiAuZ2l0bW9kdWxlcyB3aGVuIHRoZSBzdWJtb2R1bGUgYXQgJHBhdGggd2FzIG9uY2UgYWRkZWQgdG8gdGhlCisgICBzdXBlcnByb2plY3QgYW5kIGFscmVhZHkgaW5pdGlhbGl6ZWQuCisKKyAqIE1hbnkgc21hbGwgY29ybmVyIGNhc2UgYnVncyBvbiAiZ2l0IHRhZyAtbiIgd2FzIGNvcnJlY3RlZC4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwMGRhNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMi50eHQKQEAgLTAsMCArMSw2OSBAQAorR2l0IHYxLjcuOS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOS4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBCYXNoIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgZGlkIG5vdCBsaWtlIGEgcGF0dGVybiB0aGF0CisgICBiZWdpbnMgd2l0aCBhIGRhc2ggdG8gYmUgcGFzc2VkIHRvIF9fZ2l0X3BzMSBoZWxwZXIgZnVuY3Rpb24uCisKKyAqIEFkYXB0YXRpb24gb2YgdGhlIGJhc2ggY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBmb3IgenNoCisgICBpbmNvcnJlY3RseSBsaXN0ZWQgYWxsIHN1YmNvbW1hbmRzIHdoZW4gImdpdCA8VEFCPjxUQUI+IiB3YXMgZ2l2ZW4KKyAgIHRvIGFzayBmb3IgbGlzdCBvZiBwb3JjZWxhaW4gc3ViY29tbWFuZHMuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgZm9yIHByb2ZpbGUtZGlyZWN0ZWQgb3B0aW1pemVkIGJpbmFyeSB3YXMgbm90CisgICB3b3JraW5nIHZlcnkgd2VsbC4KKworICogU29tZSBzeXN0ZW1zIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIC1sY2hhcnNldCB0byBnZXQgbG9jYWxlX2NoYXJzZXQoKS4KKworICogdDU1NDEgaWdub3JlZCB1c2VyLXN1cHBsaWVkIHBvcnQgbnVtYmVyIHVzZWQgZm9yIEhUVFAgc2VydmVyIHRlc3RpbmcuCisKKyAqIFRoZSBlcnJvciBtZXNzYWdlIGVtaXR0ZWQgd2hlbiB3ZSBzZWUgYW4gZW1wdHkgbG9vc2Ugb2JqZWN0IHdhcworICAgbm90IHBocmFzZWQgY29ycmVjdGx5LgorCisgKiBUaGUgY29kZSB0byBhc2sgZm9yIHBhc3N3b3JkIGRpZCBub3QgZmFsbCBiYWNrIHRvIHRoZSB0ZXJtaW5hbAorICAgaW5wdXQgd2hlbiBHSVRfQVNLUEFTUyBpcyBzZXQgYnV0IGRvZXMgbm90IHdvcmsgKGUuZy4gbGFjayBvZiBYCisgICB3aXRoIEdVSSBhc2twYXNzIGhlbHBlcikuCisKKyAqIFdlIGZhaWxlZCB0byBnaXZlIHRoZSB0cnVlIHRlcm1pbmFsIHdpZHRoIHRvIGFueSBzdWJjb21tYW5kIHdoZW4KKyAgIHRoZXkgYXJlIGludm9rZWQgd2l0aCB0aGUgcGFnZXIsIGkuZS4gImdpdCAtcCBjbWQiLgorCisgKiBtYXBfdXNlcigpIHdhcyBub3QgcmV3cml0aW5nIGl0cyBvdXRwdXQgY29ycmVjdGx5LCB3aGljaCByZXN1bHRlZAorICAgaW4gdGhlIHVzZXIgdmlzaWJsZSBzeW1wdG9tIHRoYXQgImdpdCBibGFtZSAtZSIgc29tZXRpbWVzIHNob3dlZAorICAgZXhjZXNzICc+JyBhdCB0aGUgZW5kIG9mIGVtYWlsIGFkZHJlc3Nlcy4KKworICogImdpdCBjaGVja291dCAtYiIgZGlkIG5vdCBhbGxvdyBzd2l0Y2hpbmcgb3V0IG9mIGFuIHVuYm9ybiBicmFuY2guCisKKyAqIFdoZW4geW91IGhhdmUgYm90aCAuLi4vZm9vIGFuZCAuLi4vZm9vLmdpdCwgImdpdCBjbG9uZSAuLi4vZm9vIiBkaWQgbm90CisgICBmYXZvciB0aGUgZm9ybWVyIGJ1dCB0aGUgbGF0dGVyLgorCisgKiAiZ2l0IGNvbW1pdCIgcmVmdXNlZCB0byBjcmVhdGUgYSBjb21taXQgd2hlbiBlbnRyaWVzIGFkZGVkIHdpdGgKKyAgICJhZGQgLU4iIHJlbWFpbmVkIGluIHRoZSBpbmRleCwgd2l0aG91dCB0ZWxsaW5nIEdpdCB3aGF0IHRoZWlyIGNvbnRlbnQKKyAgIGluIHRoZSBuZXh0IGNvbW1pdCBzaG91bGQgYmUuIFdlIHNob3VsZCBoYXZlIGNyZWF0ZWQgdGhlIGNvbW1pdCB3aXRob3V0CisgICB0aGVzZSBwYXRocy4KKworICogImdpdCBkaWZmIC0tc3RhdCIgc2FpZCAiZmlsZXMiLCAiaW5zZXJ0aW9ucyIsIGFuZCAiZGVsZXRpb25zIiBldmVuCisgICB3aGVuIGl0IGlzIHNob3dpbmcgb25lICJmaWxlIiwgb25lICJpbnNlcnRpb24iIG9yIG9uZSAiZGVsZXRpb24iLgorCisgKiBUaGUgb3V0cHV0IGZyb20gImdpdCBkaWZmIC0tc3RhdCIgZm9yIHR3byBwYXRocyB0aGF0IGhhdmUgdGhlIHNhbWUKKyAgIGFtb3VudCBvZiBjaGFuZ2VzIHNob3dlZCBncmFwaCBiYXJzIG9mIGRpZmZlcmVudCBsZW5ndGggZHVlIHRvIHRoZQorICAgd2F5IHdlIGhhbmRsZWQgcm91bmRpbmcgZXJyb3JzLgorCisgKiAiZ2l0IGdyZXAiIGRpZCBub3QgcGF5IGF0dGVudGlvbiB0byAtZGlmZiAoaGVuY2UgLWJpbmFyeSkgYXR0cmlidXRlLgorCisgKiBUaGUgdHJhbnNwb3J0IHByb2dyYW1zIChmZXRjaCwgcHVzaCwgY2xvbmUpaWdub3JlZCAtLW5vLXByb2dyZXNzCisgICBhbmQgc2hvd2VkIHByb2dyZXNzIHdoZW4gc2VuZGluZyB0aGVpciBvdXRwdXQgdG8gYSB0ZXJtaW5hbC4KKworICogU29tZXRpbWVzIGVycm9yIHN0YXR1cyBkZXRlY3RlZCBieSBhIGNoZWNrIGluIGFuIGVhcmxpZXIgcGhhc2Ugb2YKKyAgICJnaXQgcmVjZWl2ZS1wYWNrIiAodGhlIG90aGVyIGVuZCBvZiAiZ2l0IHB1c2giKSB3YXMgbG9zdCBieSBsYXRlcgorICAgY2hlY2tzLCByZXN1bHRpbmcgaW4gZmFsc2UgaW5kaWNhdGlvbiBvZiBzdWNjZXNzLgorCisgKiAiZ2l0IHJldi1saXN0IC0tdmVyaWZ5IiBzb21ldGltZXMgc2tpcHBlZCB2ZXJpZmljYXRpb24gZGVwZW5kaW5nIG9uCisgICB0aGUgcGhhc2Ugb2YgdGhlIG1vb24sIHdoaWNoIGRhdGVzIGJhY2sgdG8gMS43LjgueCBzZXJpZXMuCisKKyAqIFNlYXJjaCBib3ggaW4gImdpdHdlYiIgZGlkIG5vdCBhY2NlcHQgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgY29ycmVjdGx5LgorCisgKiBTZWFyY2ggaW50ZXJmYWNlIG9mICJnaXR3ZWIiIGRpZCBub3Qgc2hvdyBtdWx0aXBsZSBtYXRjaGVzIGluIHRoZSBzYW1lIGZpbGUKKyAgIGNvcnJlY3RseS4KKworQWxzbyBjb250YWlucyBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjNjUwMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuMy50eHQKQEAgLTAsMCArMSw1MSBAQAorR2l0IHYxLjcuOS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjcuOS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHA0IiAoaW4gY29udHJpYi8pIHN1Ym1pdCB0aGUgY2hhbmdlcyB0byBhIHdyb25nIHBsYWNlIHdoZW4gdGhlCisgICAiLS11c2UtY2xpZW50LXNwZWMiIG9wdGlvbiBpcyBzZXQuCisKKyAqIFRoZSBjb25maWcubWFrLmF1dG9nZW4gZ2VuZXJhdGVkIGJ5IG9wdGlvbmFsIGF1dG9jb25mIHN1cHBvcnQgdHJpZWQKKyAgIHRvIGxpbmsgdGhlIGJpbmFyeSB3aXRoIC1saW50bCBldmVuIHdoZW4gbGliaW50bC5oIGlzIG1pc3NpbmcgZnJvbQorICAgdGhlIHN5c3RlbS4KKworICogV2hlbiB0aGUgZmlsdGVyIGRyaXZlciBleGl0cyBiZWZvcmUgcmVhZGluZyB0aGUgY29udGVudCBiZWZvcmUgdGhlCisgICBtYWluIGdpdCBwcm9jZXNzIHdyaXRlcyB0aGUgY29udGVudHMgdG8gYmUgZmlsdGVyZWQgdG8gdGhlIHBpcGUgdG8KKyAgIGl0LCB0aGUgbGF0dGVyIGNvdWxkIGJlIGtpbGxlZCB3aXRoIFNJR1BJUEUgaW5zdGVhZCBvZiBpZ25vcmluZworICAgc3VjaCBhbiBldmVudCBhcyBhbiBlcnJvci4KKworICogImdpdCBhZGQgLS1yZWZyZXNoIDxwYXRoc3BlYz4iIHVzZWQgdG8gd2FybiBhYm91dCB1bm1lcmdlZCBwYXRocworICAgb3V0c2lkZSB0aGUgZ2l2ZW4gcGF0aHNwZWMuCisKKyAqIFRoZSBidWxrIGNoZWNrLWluIGNvZGVwYXRoIGluICJnaXQgYWRkIiBzdHJlYW1lZCBjb250ZW50cyB0aGF0CisgICBuZWVkcyBzbXVkZ2UvY2xlYW4gZmlsdGVycyB3aXRob3V0IHJ1bm5pbmcgdGhlbSwgaW5zdGVhZCBvZiBwdW50aW5nCisgICBhbmQgZGVsZWdhdGluZyB0byB0aGUgY29kZXBhdGggdG8gcnVuIGZpbHRlcnMgYWZ0ZXIgc2x1cnBpbmcKKyAgIGV2ZXJ5dGhpbmcgdG8gY29yZS4KKworICogImdpdCBicmFuY2ggLS13aXRoICR0aGF0IiBhc3N1bWVkIGluY29ycmVjdGx5IHRoYXQgdGhlIHVzZXIgd2lsbCBuZXZlcgorICAgYXNrIHRoZSBxdWVzdGlvbiB3aXRoIG5vbnNlbnNlIHZhbHVlIGluICR0aGF0LgorCisgKiAiZ2l0IGJ1bmRsZSBjcmVhdGUiIHByb2R1Y2VkIGEgY29ycnVwdCBidW5kbGUgZmlsZSB1cG9uIHNlZWluZworICAgY29tbWl0cyB3aXRoIGV4Y2Vzc2l2ZWx5IGxvbmcgc3ViamVjdCBsaW5lLgorCisgKiBXaGVuIGEgcmVtb3RlIGhlbHBlciBleGl0cyBiZWZvcmUgcmVhZGluZyB0aGUgYmxhbmsgbGluZSBmcm9tIHRoZQorICAgbWFpbiBnaXQgcHJvY2VzcyB0byBzaWduYWwgdGhlIGVuZCBvZiBjb21tYW5kcywgdGhlIGxhdHRlciBjb3VsZCBiZQorICAga2lsbGVkIHdpdGggU0lHUElQRS4gSW5zdGVhZCB3ZSBzaG91bGQgaWdub3JlIHN1Y2ggZXZlbnQgYXMgYQorICAgbm9uLWVycm9yLgorCisgKiBUaGUgY29tbWl0IGxvZyB0ZW1wbGF0ZSBnaXZlbiB3aXRoICJnaXQgbWVyZ2UgLS1lZGl0IiBkaWQgbm90IGhhdmUKKyAgIGEgc2hvcnQgaW5zdHJ1Y3RpdmUgdGV4dCBsaWtlIHdoYXQgImdpdCBjb21taXQiIGdpdmVzLgorCisgKiAiZ2l0IHJldi1saXN0IC0tdmVyaWZ5LW9iamVjdHMgLXEiIG9taXR0ZWQgdGhlIGV4dHJhIHZlcmlmaWNhdGlvbgorICAgaXQgbmVlZHMgdG8gZG8gb3ZlciAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtcSIgYnkgbWlzdGFrZS4KKworICogImdpdHdlYiIgdXNlZCB0byBkcm9wIHdhcm5pbmdzIGluIHRoZSBsb2cgZmlsZSB3aGVuICJoZWFkcyIgdmlldyBpcworICAgYWNjZXNzZWQgaW4gYSByZXBvc2l0b3J5IHdob3NlIEhFQUQgZG9lcyBub3QgcG9pbnQgYXQgYSB2YWxpZAorICAgYnJhbmNoLgorCisgKiBBbiBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIGdpdmVuIGJ5IGFuIGVuZCB1c2VyIG1hZGUKKyAgICJnaXR3ZWIiIHRvIHJldHVybiBnYXJibGVkIHJlc3BvbnNlLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTIxN2ExCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS40LnR4dApAQCAtMCwwICsxLDI0IEBACitHaXQgdjEuNy45LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy45LjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjb2RlIHRvIHN5bnRoZXNpemUgdGhlIGZha2UgYW5jZXN0b3IgdHJlZSB1c2VkIGJ5IDMtd2F5IG1lcmdlCisgICBmYWxsYmFjayBpbiAiZ2l0IGFtIiB3YXMgbm90IHByZXBhcmVkIHRvIHJlYWQgYSBwYXRjaCBjcmVhdGVkIHdpdGgKKyAgIGEgbm9uLXN0YW5kYXJkIC1wPG51bT4gdmFsdWUuCisKKyAqICJnaXQgYnVuZGxlIiBkaWQgbm90IHJlY29yZCBib3VuZGFyeSBjb21taXRzIGNvcnJlY3RseSB3aGVuIHRoZXJlCisgICBhcmUgbWFueSBvZiB0aGVtLgorCisgKiAiZ2l0IGRpZmYtaW5kZXgiIGFuZCBpdHMgZnJpZW5kcyBhdCB0aGUgcGx1bWJpbmcgbGV2ZWwgc2hvd2VkIHRoZQorICAgImRpZmYgLS1naXQiIGhlYWRlciBhbmQgbm90aGluZyBlbHNlIGZvciBhIHBhdGggd2hvc2UgY2FjaGVkIHN0YXQKKyAgIGluZm8gaXMgZGlydHkgd2l0aG91dCBhY3R1YWwgZGlmZmVyZW5jZSB3aGVuIGFza2VkIHRvIHByb2R1Y2UgYQorICAgcGF0Y2guIFRoaXMgd2FzIGEgbG9uZ3N0YW5kaW5nIGJ1ZyB0aGF0IHdlIGNvdWxkIGhhdmUgZml4ZWQgbG9uZworICAgdGltZSBhZ28uCisKKyAqICJnaXR3ZWIiIGRpZCB1c2UgcXVvdGVtZXRhKCkgdG8gcHJlcGFyZSBzZWFyY2ggc3RyaW5nIHdoZW4gYXNrZWQgdG8KKyAgIGRvIGEgZml4ZWQtc3RyaW5nIHByb2plY3Qgc2VhcmNoLCBidXQgZGlkIG5vdCB1c2UgaXQgYnkgbWlzdGFrZSBhbmQKKyAgIHVzZWQgdGhlIHVzZXItc3VwcGxpZWQgc3RyaW5nIGluc3RlYWQuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Y2MyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjUudHh0CkBAIC0wLDAgKzEsMjMgQEAKK0dpdCB2MS43LjkuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS43LjkuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogV2hlbiAiZ2l0IGNvbmZpZyIgZGlhZ25vc2VzIGFuIGVycm9yIGluIGEgY29uZmlndXJhdGlvbiBmaWxlIGFuZAorICAgc2hvd3MgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGUgb2ZmZW5kaW5nIGxpbmUsIGl0IG1pc2NvdW50ZWQgaWYgdGhlCisgICBlcnJvciB3YXMgYXQgdGhlIGVuZCBvZiBsaW5lLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiBhY2NlcHRlZCAibHMiIGNvbW1hbmQgd2l0aCBhbiBlbXB0eSBwYXRoIGJ5CisgICBtaXN0YWtlLgorCisgKiBWYXJpb3VzIG5ldy1pc2ggb3V0cHV0IGRlY29yYXRpb24gbW9kZXMgb2YgImdpdCBncmVwIiB3ZXJlIG5vdAorICAgZG9jdW1lbnRlZCBpbiB0aGUgbWFudWFsJ3Mgc3lub3BzaXMgc2VjdGlvbi4KKworICogVGhlICJyZW1haW5pbmciIHN1YmNvbW1hbmQgdG8gImdpdCByZXJlcmUiIHdhcyBub3QgZG9jdW1lbnRlZC4KKworICogImdpdHdlYiIgdXNlZCB0byBkcm9wIHdhcm5pbmdzIGluIHRoZSBsb2cgZmlsZSB3aGVuICJoZWFkcyIgdmlldyBpcworICAgYWNjZXNzZWQgaW4gYSByZXBvc2l0b3J5IHdob3NlIEhFQUQgZG9lcyBub3QgcG9pbnQgYXQgYSB2YWxpZAorICAgYnJhbmNoLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGJmODgyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS42LnR4dApAQCAtMCwwICsxLDEyIEBACitHaXQgdjEuNy45LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy45LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgbWVyZ2UgJHRhZyIgdG8gbWVyZ2UgYW4gYW5ub3RhdGVkIHRhZyBhbHdheXMgb3BlbnMgdGhlIGVkaXRvcgorICAgZHVyaW5nIGFuIGludGVyYWN0aXZlIGVkaXQgc2Vzc2lvbi4gdjEuNy4xMCBzZXJpZXMgaW50cm9kdWNlZCBhbgorICAgZW52aXJvbm1lbnQgdmFyaWFibGUgR0lUX01FUkdFX0FVVE9FRElUIHRvIGhlbHAgb2xkZXIgc2NyaXB0cyBkZWNsaW5lCisgICB0aGlzIGJlaGF2aW91ciwgYnV0IHRoZSBtYWludGVuYW5jZSB0cmFjayBzaG91bGQgYWxzbyBzdXBwb3J0IGl0LgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS43LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTY2N2QwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjcuOS43LnR4dApAQCAtMCwwICsxLDEzIEBACitHaXQgdjEuNy45LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuNy45LjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFuIGVycm9yIG1lc3NhZ2UgZnJvbSAnZ2l0IGJ1bmRsZScgaGFkIGFuIHVubWF0Y2hlZCBzaW5nbGUgcXVvdGUgcGFpciBpbiBpdC4KKworICogVGhlIHdheSAnZ2l0IGZldGNoJyBpbXBsZW1lbnRlZCBpdHMgY29ubmVjdGl2aXR5IGNoZWNrIG92ZXIKKyAgIHJlY2VpdmVkIG9iamVjdHMgd2FzIG92ZXJseSBwZXNzaW1pc3RpYywgYW5kIHdhc3RlZCBhIGxvdCBvZgorICAgY3ljbGVzLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGZpeGVzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS43LjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MzIwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuNy45LnR4dApAQCAtMCwwICsxLDExMiBAQAorR2l0IHYxLjcuOSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2MS43LjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGdpdGsgdXBkYXRlcyBhY2N1bXVsYXRlZCBzaW5jZSBlYXJseSAyMDExLgorCisgKiBnaXQtZ3VpIHVwZGF0ZWQgdG8gMC4xNi4wLgorCisgKiBnaXQtcDQgKGluIGNvbnRyaWIvKSB1cGRhdGVzLgorCisgKiBHaXQgdXNlcyBnZXR0ZXh0IHRvIHRyYW5zbGF0ZSBpdHMgbW9zdCBjb21tb24gaW50ZXJmYWNlIG1lc3NhZ2VzCisgICBpbnRvIHRoZSB1c2VyJ3MgbGFuZ3VhZ2UgaWYgdHJhbnNsYXRpb25zIGFyZSBhdmFpbGFibGUgYW5kIHRoZQorICAgbG9jYWxlIGlzIGFwcHJvcHJpYXRlbHkgc2V0LiBEaXN0cmlidXRvcnMgY2FuIGRyb3AgbmV3IFBPIGZpbGVzCisgICBpbiBwby8gdG8gYWRkIG5ldyB0cmFuc2xhdGlvbnMuCisKKyAqIFRoZSBjb2RlIHRvIGhhbmRsZSB1c2VybmFtZS9wYXNzd29yZCBmb3IgSFRUUCB0cmFuc2FjdGlvbnMgdXNlZCBpbgorICAgImdpdCBwdXNoIiAmICJnaXQgZmV0Y2giIGxlYXJuZWQgdG8gdGFsayAiY3JlZGVudGlhbCBBUEkiIHRvCisgICBleHRlcm5hbCBwcm9ncmFtcyB0byBjYWNoZSBvciBzdG9yZSB0aGVtLCB0byBhbGxvdyBpbnRlZ3JhdGlvbiB3aXRoCisgICBwbGF0Zm9ybSBuYXRpdmUga2V5Y2hhaW4gbWVjaGFuaXNtcy4KKworICogVGhlIGlucHV0IHByb21wdHMgaW4gdGhlIHRlcm1pbmFsIHVzZSBvdXIgb3duIGdldHBhc3MoKSByZXBsYWNlbWVudAorICAgd2hlbiBwb3NzaWJsZS4gSFRUUCB0cmFuc2FjdGlvbnMgdXNlZCB0byBhc2sgZm9yIHRoZSB1c2VybmFtZSB3aXRob3V0CisgICBlY2hvaW5nIGJhY2sgd2hhdCB3YXMgdHlwZWQsIGJ1dCB3aXRoIHRoaXMgY2hhbmdlIHlvdSB3aWxsIHNlZSBpdCBhcworICAgeW91IHR5cGUuCisKKyAqIFRoZSBpbnRlcm5hbHMgb2YgInJldmVydC9jaGVycnktcGljayIgaGF2ZSBiZWVuIHR3ZWFrZWQgdG8gcHJlcGFyZQorICAgYnVpbGRpbmcgbW9yZSBnZW5lcmljICJzZXF1ZW5jZXIiIG9uIHRvcCBvZiB0aGUgaW1wbGVtZW50YXRpb24gdGhhdAorICAgZHJpdmVzIHRoZW0uCisKKyAqICJnaXQgcmV2LXBhcnNlIEZFVENIX0hFQUQiIGFmdGVyICJnaXQgZmV0Y2giIHdpdGhvdXQgc3BlY2lmeWluZworICAgd2hhdCB0byBmZXRjaCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgd2lsbCBub3cgc2hvdyB0aGUgY29tbWl0IHRoYXQKKyAgIHdvdWxkIGJlIG1lcmdlZCBpZiB0aGUgY29tbWFuZCB3ZXJlICJnaXQgcHVsbCIuCisKKyAqICJnaXQgYWRkIiBsZWFybmVkIHRvIHN0cmVhbSBsYXJnZSBmaWxlcyBkaXJlY3RseSBpbnRvIGEgcGFja2ZpbGUKKyAgIGluc3RlYWQgb2Ygd3JpdGluZyB0aGVtIGludG8gaW5kaXZpZHVhbCBsb29zZSBvYmplY3QgZmlsZXMuCisKKyAqICJnaXQgY2hlY2tvdXQgLUIgPGN1cnJlbnQgYnJhbmNoPiA8ZWxzZXdoZXJlPiIgaXMgYSBtb3JlIGludHVpdGl2ZQorICAgd2F5IHRvIHNwZWxsICJnaXQgcmVzZXQgLS1rZWVwIDxlbHNld2hlcmU+Ii4KKworICogImdpdCBjaGVja291dCIgYW5kICJnaXQgbWVyZ2UiIGxlYXJuZWQgIi0tbm8tb3ZlcndyaXRlLWlnbm9yZSIgb3B0aW9uCisgICB0byB0ZWxsIEdpdCB0aGF0IHVudHJhY2tlZCBhbmQgaWdub3JlZCBmaWxlcyBhcmUgbm90IGV4cGVuZGFibGUuCisKKyAqICJnaXQgY29tbWl0IC0tYW1lbmQiIGxlYXJuZWQgIi0tbm8tZWRpdCIgb3B0aW9uIHRvIHNheSB0aGF0IHRoZQorICAgdXNlciBpcyBhbWVuZGluZyB0aGUgdHJlZSBiZWluZyByZWNvcmRlZCwgd2l0aG91dCB1cGRhdGluZyB0aGUKKyAgIGNvbW1pdCBsb2cgbWVzc2FnZS4KKworICogImdpdCBjb21taXQiIGFuZCAiZ2l0IHJlc2V0IiByZS1sZWFybmVkIHRoZSBvcHRpbWl6YXRpb24gdG8gcHJpbWUKKyAgIHRoZSBjYWNoZS10cmVlIGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCwgd2hpY2ggbWFrZXMgaXQgZmFzdGVyIHRvCisgICB3cml0ZSBhIHRyZWUgb2JqZWN0IG91dCBhZnRlciB0aGUgaW5kZXggZW50cmllcyBhcmUgdXBkYXRlZC4KKworICogImdpdCBjb21taXQiIGRldGVjdHMgYW5kIHJlamVjdHMgYW4gYXR0ZW1wdCB0byBzdHVmZiBOVUwgYnl0ZSBpbgorICAgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZS4KKworICogImdpdCBjb21taXQiIGxlYXJuZWQgIi1TIiB0byBHUEctc2lnbiB0aGUgY29tbWl0OyB0aGlzIGNhbiBiZSBzaG93bgorICAgd2l0aCB0aGUgIi0tc2hvdy1zaWduYXR1cmUiIG9wdGlvbiB0byAiZ2l0IGxvZyIuCisKKyAqIGZzY2sgYW5kIHBydW5lIGFyZSByZWxhdGl2ZWx5IGxlbmd0aHkgb3BlcmF0aW9ucyB0aGF0IHN0aWxsIGdvCisgICBzaWxlbnQgd2hpbGUgbWFraW5nIHRoZSBlbmQtdXNlciB3YWl0LiBUaGV5IGxlYXJuZWQgdG8gZ2l2ZSBwcm9ncmVzcworICAgb3V0cHV0IGxpa2Ugb3RoZXIgc2xvdyBvcGVyYXRpb25zLgorCisgKiBUaGUgc2V0IG9mIGJ1aWx0LWluIGZ1bmN0aW9uLWhlYWRlciBwYXR0ZXJucyBmb3IgdmFyaW91cyBsYW5ndWFnZXMKKyAgIGtub3dzIE1BVExBQi4KKworICogImdpdCBsb2cgLS1mb3JtYXQ9Jzxmb3JtYXQ+JyIgbGVhcm5lZCBuZXcgJWdbbk5lRV0gc3BlY2lmaWVycyB0bworICAgc2hvdyBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZWZsb2cgZW50cmllcyB3aGVuIHdhbGtpbmcgdGhlIHJlZmxvZworICAgKGkuZS4gd2l0aCAiLWciKS4KKworICogImdpdCBwdWxsIiBjYW4gYmUgdXNlZCB0byBmZXRjaCBhbmQgbWVyZ2UgYW4gYW5ub3RhdGVkL3NpZ25lZCB0YWcsCisgICBpbnN0ZWFkIG9mIHRoZSB0aXAgb2YgYSB0b3BpYyBicmFuY2guIFRoZSBHUEcgc2lnbmF0dXJlIGZyb20gdGhlCisgICBzaWduZWQgdGFnIGlzIHJlY29yZGVkIGluIHRoZSByZXN1bHRpbmcgbWVyZ2UgY29tbWl0IGZvciBsYXRlcgorICAgYXVkaXRpbmcuCisKKyAqICJnaXQgbG9nIiBsZWFybmVkICItLXNob3ctc2lnbmF0dXJlIiBvcHRpb24gdG8gc2hvdyB0aGUgc2lnbmVkIHRhZworICAgdGhhdCB3YXMgbWVyZ2VkIHRoYXQgaXMgZW1iZWRkZWQgaW4gdGhlIG1lcmdlIGNvbW1pdC4gSXQgYWxzbyBjYW4KKyAgIHNob3cgdGhlIHNpZ25hdHVyZSBtYWRlIG9uIHRoZSBjb21taXQgd2l0aCAiZ2l0IGNvbW1pdCAtUyIuCisKKyAqICJnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiIgY2FuIGJlIHVzZWQgdG8gYWRkIGRlc2NyaXB0aXZlIHRleHQKKyAgIHRvIGV4cGxhaW4gd2hhdCBhIHRvcGljIGJyYW5jaCBpcyBhYm91dC4KKworICogImdpdCBmbXQtbWVyZ2UtbXNnIiBsZWFybmVkIHRvIHRha2UgdGhlIGJyYW5jaCBkZXNjcmlwdGlvbiBpbnRvCisgICBhY2NvdW50IHdoZW4gcHJlcGFyaW5nIGEgbWVyZ2Ugc3VtbWFyeSB0aGF0ICJnaXQgbWVyZ2UiIHJlY29yZHMKKyAgIHdoZW4gbWVyZ2luZyBhIGxvY2FsIGJyYW5jaC4KKworICogImdpdCByZXF1ZXN0LXB1bGwiIGhhcyBiZWVuIHVwZGF0ZWQgdG8gY29udmV5IG1vcmUgaW5mb3JtYXRpb24KKyAgIHVzZWZ1bCBmb3IgaW50ZWdyYXRvcnMgdG8gZGVjaWRlIGlmIGEgdG9waWMgaXMgd29ydGggbWVyZ2luZyBhbmQKKyAgIHdoYXQgaXMgcHVsbGVkIGlzIGluZGVlZCB3aGF0IHRoZSByZXF1ZXN0b3IgYXNrZWQgdG8gcHVsbCwKKyAgIGluY2x1ZGluZzoKKworICAgLSB0aGUgdGlwIG9mIHRoZSBicmFuY2ggYmVpbmcgcmVxdWVzdGVkIHRvIGJlIG1lcmdlZDsKKyAgIC0gdGhlIGJyYW5jaCBkZXNjcmlwdGlvbiBkZXNjcmliaW5nIHdoYXQgdGhlIHRvcGljIGlzIGFib3V0OworICAgLSB0aGUgY29udGVudHMgb2YgdGhlIGFubm90YXRlZCB0YWcsIHdoZW4gcmVxdWVzdGluZyB0byBwdWxsIGEgdGFnLgorCisgKiAiZ2l0IHB1bGwiIGxlYXJuZWQgdG8gbm90aWNlICdwdWxsLnJlYmFzZScgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwKKyAgIHdoaWNoIHNlcnZlcyBhcyBhIGdsb2JhbCBmYWxsYmFjayBmb3Igc2V0dGluZyAnYnJhbmNoLjxuYW1lPi5yZWJhc2UnCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHBlciBicmFuY2guCisKKyAqICJnaXQgdGFnIiBsZWFybmVkICItLWNsZWFudXAiIG9wdGlvbiB0byBjb250cm9sIGhvdyB0aGUgd2hpdGVzcGFjZXMKKyAgIGFuZCBlbXB0eSBsaW5lcyBpbiB0YWcgbWVzc2FnZSBhcmUgY2xlYW5lZCB1cC4KKworICogImdpdHdlYiIgbGVhcm5lZCB0byBzaG93IHNpZGUtYnktc2lkZSBkaWZmLgorCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy44CistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS43LjggaW4gdGhlIG1haW50ZW5hbmNlCityZWxlYXNlcyBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMgdG8gdGhlbSBmb3IKK2RldGFpbHMpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzNzJmYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMS50eHQKQEAgLTAsMCArMSw2NCBAQAorR2l0IHYxLjguMC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHBhcnNlciBoYWQgYW4gdW5uZWNlc3NhcnkgaGFyZGNvZGVkIGxpbWl0IG9uCisgICB2YXJpYWJsZSBuYW1lcyB0aGF0IHdhcyBub3QgY2hlY2tlZCBjb25zaXN0ZW50bHkuCisKKyAqIFRoZSAic2F5IiBmdW5jdGlvbiBpbiB0aGUgdGVzdCBzY2FmZm9sZGluZyBpbmNvcnJlY3RseSBhbGxvd2VkCisgICAiZWNobyIgdG8gaW50ZXJwcmV0ICJcYSIgYXMgaWYgaXQgd2VyZSBhIEMtc3RyaW5nIGFza2luZyBmb3IgYQorICAgQkVMIG91dHB1dC4KKworICogImdpdCBtZXJnZXRvb2wiIGZlZWRzIC9kZXYvbnVsbCBhcyBhIGNvbW1vbiBhbmNlc3RvciB3aGVuIGRlYWxpbmcKKyAgIHdpdGggYW4gYWRkL2FkZCBjb25mbGljdCwgYnV0IHA0bWVyZ2UgYmFja2VuZCBjYW5ub3QgaGFuZGxlCisgICBpdC4gV29yayBpdCBhcm91bmQgYnkgcGFzc2luZyBhIHRlbXBvcmFyeSBlbXB0eSBmaWxlLgorCisgKiAiZ2l0IGxvZyAtRiAtRSAtLWdyZXA9JzxlcmU+JyIgZmFpbGVkIHRvIHVzZSB0aGUgZ2l2ZW4gPGVyZT4KKyAgIHBhdHRlcm4gYXMgZXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uLCBhbmQgaW5zdGVhZCBsb29rZWQgZm9yIHRoZQorICAgc3RyaW5nIGxpdGVyYWxseS4KKworICogImdpdCBncmVwIC1lIHBhdHRlcm4gPHRyZWU+IiBhc2tlZCB0aGUgYXR0cmlidXRlIHN5c3RlbSB0byByZWFkCisgICAiPHRyZWU+Oi5naXRhdHRyaWJ1dGVzIiBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUsIHdoaWNoIHdhcworICAgbm9uc2Vuc2UuCisKKyAqIEEgc3ltYm9saWMgcmVmIHJlZnMvaGVhZHMvU1lNIHdhcyBub3QgY29ycmVjdGx5IHJlbW92ZWQgd2l0aCAiZ2l0CisgICBicmFuY2ggLWQgU1lNIjsgdGhlIGNvbW1hbmQgcmVtb3ZlZCB0aGUgcmVmIHBvaW50ZWQgYnkgU1lNCisgICBpbnN0ZWFkLgorCisgKiBFYXJsaWVyIHdlIGZpeGVkIGRvY3VtZW50YXRpb24gdG8gaHlwaGVuYXRlICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorICAgdG8gY2xhcmlmeSB0aGF0IHRoZXNlIGFyZSBub3QgYSByZW1vdGUgZW50aXR5LCBidXQgdW5oeXBoZW5hdGVkCisgICBzcGVsbGluZyBzbnVjayBpbiB0byBhIGZldyBwbGFjZXMgc2luY2UgdGhlbi4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBydW4gd2hpbGUgdGhlIEhFQUQgaXMgZGV0YWNoZWQgdHJpZWQgdG8gZmluZAorICAgdGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB0aGUgZGV0YWNoZWQgSEVBRCAod2hpY2ggYnkgZGVmaW5pdGlvbgorICAgZG9lcyBub3QgZXhpc3QpIGFuZCBlbWl0dGVkIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2VzLgorCisgKiBUaGUgcmVmcy9yZXBsYWNlIGhpZXJhcmNoeSB3YXMgbm90IG1lbnRpb25lZCBpbiB0aGUKKyAgIHJlcG9zaXRvcnktbGF5b3V0IGRvY3MuCisKKyAqIFNvbWV0aW1lcyBjdXJsX211bHRpX3RpbWVvdXQoKSBmdW5jdGlvbiBzdWdnZXN0ZWQgYSB3cm9uZyB0aW1lb3V0CisgICB2YWx1ZSB3aGVuIHRoZXJlIGlzIG5vIGZpbGUgZGVzY3JpcHRvcnMgdG8gd2FpdCBvbiBhbmQgdGhlIGh0dHAKKyAgIHRyYW5zcG9ydCBlbmRlZCB1cCBzbGVlcGluZyBmb3IgbWludXRlcyBpbiBzZWxlY3QoMikgc3lzdGVtIGNhbGwuCisgICBBIHdvcmthcm91bmQgaGFzIGJlZW4gYWRkZWQgZm9yIHRoaXMuCisKKyAqIFZhcmlvdXMgcmZjMjA0NyBxdW90aW5nIGlzc3VlcyBhcm91bmQgYSBub24tQVNDSUkgbmFtZSBvbiB0aGUKKyAgIEZyb206IGxpbmUgaW4gdGhlIG91dHB1dCBmcm9tIGZvcm1hdC1wYXRjaCBoYXZlIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGRpZmYgLUc8cGF0dGVybj4iIGRpZCBub3QgaG9ub3IgdGV4dGNvbnYgZmlsdGVyIHdoZW4gbG9va2luZworICAgZm9yIGNoYW5nZXMuCisKKyAqIEJhc2ggY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvKSBkaWQgbm90IGNvcnJlY3RseSBjb21wbGV0ZSBhCisgICBsYXp5ICJnaXQgY2hlY2tvdXQgJG5hbWVfb2ZfcmVtb3RlX3RyYWNraW5nX2JyYW5jaF90aGF0X2lzX3VuaXF1ZSIKKyAgIGNvbW1hbmQgbGluZS4KKworICogUlNTIGZlZWQgZnJvbSAiZ2l0d2ViIiBoYWQgYSB4c3MgaG9sZSBpbiBpdHMgdGl0bGUgb3V0cHV0LgorCisgKiAiZ2l0IGNvbmZpZyAtLXBhdGggJGtleSIgc2VnZmF1bHRlZCBvbiAiW3NlY3Rpb25dIGtleSIgKGEgYm9vbGVhbgorICAgInRydWUiIHNwZWxsZWQgd2l0aG91dCAiPSIsIG5vdCAiW3NlY3Rpb25dIGtleSA9IHRydWUiKS4KKworICogImdpdCBjaGVja291dCAtYiBmb28iIHdoaWxlIG9uIGFuIHVuYm9ybiBicmFuY2ggZGlkIG5vdCBzYXkKKyAgICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJ2ZvbyciIGxpa2Ugb3RoZXIgY2FzZXMuCisKK0Fsc28gY29udGFpbnMgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OTdlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLjIudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0dpdCB2MS44LjAuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjAuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogVmFyaW91cyBjb2RlcGF0aHMgaGF2ZSB3b3JrYXJvdW5kIGZvciBhIGNvbW1vbiBtaXNjb25maWd1cmF0aW9uIHRvCisgICBzcGVsbCAiVVRGLTgiIGFzICJ1dGY4IiwgYnV0IGl0IHdhcyBub3QgdXNlZCB1bmlmb3JtbHkuICBNb3N0CisgICBub3RhYmx5LCBtYWlsaW5mbyAod2hpY2ggaXMgdXNlZCBieSAiZ2l0IGFtIikgbGFja2VkIHRoaXMgc3VwcG9ydC4KKworICogV2UgZmFpbGVkIHRvIG1lbnRpb24gYSBmaWxlIHdpdGhvdXQgYW55IGNvbnRlbnQgY2hhbmdlIGJ1dCB3aG9zZQorICAgcGVybWlzc2lvbiBiaXQgd2FzIG1vZGlmaWVkLCBvciAod29yc2UgeWV0KSBhIG5ldyBmaWxlIHdpdGhvdXQgYW55CisgICBjb250ZW50IGluIHRoZSAiZ2l0IGRpZmYgLS1zdGF0IiBvdXRwdXQuCisKKyAqIFdoZW4gIi0tc3RhdC1jb3VudCIgaGlkZXMgYSBkaWZmc3RhdCBmb3IgYmluYXJ5IGNvbnRlbnRzLCB0aGUgdG90YWwKKyAgIG51bWJlciBvZiBhZGRlZCBhbmQgcmVtb3ZlZCBsaW5lcyBhdCB0aGUgYm90dG9tIHdhcyBjb21wdXRlZAorICAgaW5jb3JyZWN0bHkuCisKKyAqIFdoZW4gIi0tc3RhdC1jb3VudCIgaGlkZXMgYSBkaWZmc3RhdCBmb3IgdW5tZXJnZWQgcGF0aHMsIHRoZSB0b3RhbAorICAgbnVtYmVyIG9mIGFmZmVjdGVkIGZpbGVzIGF0IHRoZSBib3R0b20gb2YgdGhlICJkaWZmIC0tc3RhdCIgb3V0cHV0CisgICB3YXMgY29tcHV0ZWQgaW5jb3JyZWN0bHkuCisKKyAqICJkaWZmIC0tc2hvcnRzdGF0IiBtaXNjb3VudGVkIHRoZSB0b3RhbCBudW1iZXIgb2YgYWZmZWN0ZWQgZmlsZXMKKyAgIHdoZW4gdGhlcmUgd2VyZSB1bm1lcmdlZCBwYXRocy4KKworICogImdpdCBwNCIgdXNlZCB0byB0cnkgZXhwYW5kaW5nIG1hbGZvcm1lZCAiJGtleXdvcmQkIiB0aGF0IHNwYW5zCisgICBhY3Jvc3MgbXVsdGlwbGUgbGluZXMuCisKKyAqICJnaXQgdXBkYXRlLXJlZiAtZCAtLWRlcmVmIFNZTSIgdG8gZGVsZXRlIGEgcmVmIHRocm91Z2ggYSBzeW1ib2xpYworICAgcmVmIHRoYXQgcG9pbnRzIHRvIGl0IGRpZCBub3QgcmVtb3ZlIGl0IGNvcnJlY3RseS4KKworICogU3ludGF4IGhpZ2hsaWdodGluZyBpbiAiZ2l0d2ViIiB3YXMgbm90IHF1aXRlIHdvcmtpbmcuCisKK0Fsc28gY29udGFpbnMgb3RoZXIgbWlub3IgZml4ZXMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjFlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4wLjMudHh0CkBAIC0wLDAgKzEsMTQgQEAKK0dpdCB2MS44LjAuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjAuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBsb2cgLXAgLVM8c3RyaW5nPiIgZGlkIG5vdCBhcHBseSB0aGUgdGV4dGNvbnYgZmlsdGVyIHdoaWxlCisgICBsb29raW5nIGZvciB0aGUgPHN0cmluZz4uCisKKyAqIEluIHRoZSBkb2N1bWVudGF0aW9uLCBzb21lIGludmFsaWQgZXhhbXBsZSBlLW1haWwgYWRkcmVzc2VzIHdlcmUKKyAgIGZvcm1hdHRlZCBpbnRvIG1haWx0bzogbGlua3MuCisKK0Fsc28gY29udGFpbnMgbWFueSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYmFja3BvcnRlZCBmcm9tIHRoZSAnbWFzdGVyJworYnJhbmNoIHRoYXQgaXMgcHJlcGFyaW5nIGZvciB0aGUgdXBjb21pbmcgMS44LjEgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4ODNjMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjAudHh0CkBAIC0wLDAgKzEsMjY3IEBACitHaXQgdjEuOC4wIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UgKG5vdCAqdGhpcyogb25lKSwgd2Ugd2lsbCBjaGFuZ2UgdGhlCitiZWhhdmlvciBvZiB0aGUgImdpdCBwdXNoIiBjb21tYW5kLgorCitXaGVuICJnaXQgcHVzaCBbJHRoZXJlXSIgZG9lcyBub3Qgc2F5IHdoYXQgdG8gcHVzaCwgd2UgaGF2ZSB1c2VkIHRoZQordHJhZGl0aW9uYWwgIm1hdGNoaW5nIiBzZW1hbnRpY3Mgc28gZmFyIChhbGwgeW91ciBicmFuY2hlcyB3ZXJlIHNlbnQKK3RvIHRoZSByZW1vdGUgYXMgbG9uZyBhcyB0aGVyZSBhbHJlYWR5IGFyZSBicmFuY2hlcyBvZiB0aGUgc2FtZSBuYW1lCitvdmVyIHRoZXJlKS4gIFdlIHdpbGwgdXNlIHRoZSAic2ltcGxlIiBzZW1hbnRpY3MgdGhhdCBwdXNoZXMgdGhlCitjdXJyZW50IGJyYW5jaCB0byB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUgbmFtZSwgb25seSB3aGVuIHRoZSBjdXJyZW50CiticmFuY2ggaXMgc2V0IHRvIGludGVncmF0ZSB3aXRoIHRoYXQgcmVtb3RlIGJyYW5jaC4gIFRoZXJlIGlzIGEgdXNlcgorcHJlZmVyZW5jZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwdXNoLmRlZmF1bHQiIHRvIGNoYW5nZSB0aGlzLCBhbmQKKyJnaXQgcHVzaCIgd2lsbCB3YXJuIGFib3V0IHRoZSB1cGNvbWluZyBjaGFuZ2UgdW50aWwgeW91IHNldCB0aGlzCit2YXJpYWJsZSBpbiB0aGlzIHJlbGVhc2UuCisKKyJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIiBpcyBkZXByZWNhdGVkIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiBhCityZWxhdGl2ZWx5IGRpc3RhbnQgZnV0dXJlLiAgImdpdCBicmFuY2ggWy11fC0tc2V0LXVwc3RyZWFtLXRvXSIgaGFzCitiZWVuIGludHJvZHVjZWQgd2l0aCBhIHNhbmVyIG9yZGVyIG9mIGFyZ3VtZW50cy4KKworCitVcGRhdGVzIHNpbmNlIHYxLjcuMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogQSBjcmVkZW50aWFsIGhlbHBlciBmb3IgV2luMzIgdG8gYWxsb3cgYWNjZXNzIHRvIHRoZSBrZXljaGFpbiBvZgorICAgdGhlIGxvZ2dlZC1pbiB1c2VyIGhhcyBiZWVuIGFkZGVkLgorCisgKiBBbiBpbml0aWFsIHBvcnQgdG8gSFAgTm9uU3RvcC4KKworICogQSBjcmVkZW50aWFsIGhlbHBlciB0byBhbGxvdyBhY2Nlc3MgdG8gdGhlIEdub21lIGtleXJpbmcgaGFzIGJlZW4KKyAgIGFkZGVkLgorCisgKiBXaGVuICJnaXQgYW0iIHNhbml0aXplcyB0aGUgIlN1YmplY3Q6IiBsaW5lLCB3ZSBzdHJpcCB0aGUgcHJlZml4IGZyb20KKyAgICJSZTogc3ViamVjdCIgYW5kIGFsc28gZnJvbSBhIGxlc3MgY29tbW9uICJyZTogc3ViamVjdCIsIGJ1dCBsZWZ0CisgICB0aGUgZXZlbiBsZXNzIGNvbW1vbiAiUkU6IHN1YmplY3QiIGludGFjdC4gIE5vdyB3ZSBzdHJpcCB0aGF0IHRvby4KKworICogSXQgd2FzIHRlbXB0aW5nIHRvIHNheSAiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbSBvcmlnaW4vbWFzdGVyIiwKKyAgIGJ1dCB0aGF0IHRlbGxzIEdpdCB0byBhcnJhbmdlIHRoZSBsb2NhbCBicmFuY2ggIm9yaWdpbi9tYXN0ZXIiIHRvCisgICBpbnRlZ3JhdGUgd2l0aCB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaCwgd2hpY2ggaXMgaGlnaGx5CisgICB1bmxpa2VseSB3aGF0IHRoZSB1c2VyIG1lYW50LiAgVGhlIG9wdGlvbiBpcyBkZXByZWNhdGVkOyB1c2UgdGhlCisgICBuZXcgIi0tc2V0LXVwc3RyZWFtLXRvIiAod2l0aCBhIHNob3J0LWFuZC1zd2VldCAiLXUiKSBvcHRpb24KKyAgIGluc3RlYWQuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2siIGxlYXJuZWQgdGhlICItLWFsbG93LWVtcHR5LW1lc3NhZ2UiIG9wdGlvbiB0bworICAgYWxsb3cgaXQgdG8gcmVwbGF5IGEgY29tbWl0IHdpdGhvdXQgYW55IGxvZyBtZXNzYWdlLgorCisgKiBBZnRlciAiZ2l0IGNoZXJyeS1waWNrIC1zIiBnYXZlIGNvbnRyb2wgYmFjayB0byB0aGUgdXNlciBhc2tpbmcKKyAgIGhlbHAgdG8gcmVzb2x2ZSBjb25mbGljdHMsIGNvbmNsdWRpbmcgImdpdCBjb21taXQiIHVzZWQgdG8gbmVlZCB0bworICAgYmUgcnVuIHdpdGggIi1zIiBpZiB0aGUgdXNlciB3YW50cyB0byBzaWduIGl0IG9mZjsgbm93IHRoZSBjb21tYW5kCisgICBsZWF2ZXMgdGhlIHNpZ24tb2ZmIGxpbmUgaW4gdGhlIGxvZyB0ZW1wbGF0ZS4KKworICogImdpdCBkYWVtb24iIGxlYXJuZWQgdGhlICItLWFjY2Vzcy1ob29rIiBvcHRpb24gdG8gYWxsb3cgYW4KKyAgIGV4dGVybmFsIGNvbW1hbmQgdG8gZGVjbGluZSBzZXJ2aWNlIGJhc2VkIG9uIHRoZSBjbGllbnQgYWRkcmVzcywKKyAgIHJlcG9zaXRvcnkgcGF0aCwgZXRjLgorCisgKiAiZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYiIGxlYXJuZWQgdG8gdXNlIHN5bWJvbGljIGxpbmtzIHRvIHByZXBhcmUKKyAgIGEgdGVtcG9yYXJ5IGNvcHkgb2YgdGhlIHdvcmtpbmcgdHJlZSB3aGVuIGF2YWlsYWJsZS4KKworICogImdpdCBncmVwIiBsZWFybmVkIHRvIHVzZSBhIG5vbi1zdGFuZGFyZCBwYXR0ZXJuIHR5cGUgYnkgZGVmYXVsdCBpZgorICAgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRlbGxzIGl0IHRvLgorCisgKiBBY2N1bXVsYXRlZCB1cGRhdGVzIHRvICJnaXQgZ3VpIiBoYXMgYmVlbiBtZXJnZWQuCisKKyAqICJnaXQgbG9nIC1nIiBsZWFybmVkIHRoZSAiLS1ncmVwLXJlZmxvZz08cGF0dGVybj4iIG9wdGlvbiB0byBsaW1pdAorICAgaXRzIG91dHB1dCB0byBjb21taXRzIHdpdGggYSByZWZsb2cgbWVzc2FnZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuCisgICBwYXR0ZXJuLgorCisgKiAiZ2l0IG1lcmdlLWJhc2UiIGxlYXJuZWQgdGhlICItLWlzLWFuY2VzdG9yIEEgQiIgb3B0aW9uIHRvIHRlbGwgaWYgQSBpcworICAgYW4gYW5jZXN0b3Igb2YgQi4gIFRoZSByZXN1bHQgaXMgaW5kaWNhdGVkIGJ5IGl0cyBleGl0IHN0YXR1cyBjb2RlLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgbm93IGFsbG93cyB1c2VycyB0byBvdmVycmlkZSB0aGUgYWN0dWFsIGNvbW1hbmQgdXNlZAorICAgd2l0aCB0aGUgbWVyZ2V0b29sLiRuYW1lLmNtZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGV2ZW4gZm9yIGJ1aWx0LWluCisgICBtZXJnZXRvb2wgYmFja2VuZHMuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkIHRoZSAiLS1lZGl0LXRvZG8iIG9wdGlvbiB0byBvcGVuIGFuIGVkaXRvcgorICAgdG8gZWRpdCB0aGUgaW5zdHJ1Y3Rpb24gc2hlZXQuCisKKworRm9yZWlnbiBJbnRlcmZhY2UKKworICogImdpdCBzdm4iIGhhcyBiZWVuIHVwZGF0ZWQgdG8gd29yayB3aXRoIFNWTiAxLjcuCisKKyAqICJnaXQgcDQiIGxlYXJuZWQgdGhlICItLWNvbmZsaWN0cyIgb3B0aW9uIHRvIHNwZWNpZnkgd2hhdCB0byBkbyB3aGVuCisgICBlbmNvdW50ZXJpbmcgYSBjb25mbGljdCBkdXJpbmcgInA0IHN1Ym1pdCIuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBldGMuCisKKyAqIEdpdCBzaGlwcyB3aXRoIGEgZmFsbC1iYWNrIHJlZ2V4cCBpbXBsZW1lbnRhdGlvbiBmb3IgcGxhdGZvcm1zIHdpdGgKKyAgIGJ1Z2d5IHJlZ2V4cCBsaWJyYXJ5LCBidXQgaXQgd2FzIGVhc3kgZm9yIHBlb3BsZSB0byBrZWVwIHVzaW5nIHRoZWlyCisgICBwbGF0Zm9ybSByZWdleHAgYnkgbWlzdGFrZS4gIEEgbmV3IHRlc3QgaGFzIGJlZW4gYWRkZWQgdG8gY2hlY2sgdGhpcy4KKworICogVGhlICJjaGVjay1kb2NzIiBidWlsZCB0YXJnZXQgaGFzIGJlZW4gdXBkYXRlZCBhbmQgZ3JlYXRseQorICAgc2ltcGxpZmllZC4KKworICogVGhlIHRlc3Qgc3VpdGUgaXMgcnVuIHVuZGVyIE1BTExPQ19DSEVDS18gd2hlbiBydW5uaW5nIHdpdGggYSBnbGliYworICAgdGhhdCBzdXBwb3J0cyB0aGUgZmVhdHVyZS4KKworICogVGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIFRlWGluZm8gZm9ybWF0IHdhcyB1c2luZyBpbmRlbnRlZCBvdXRwdXQKKyAgIGZvciBtYXRlcmlhbHMgbWVhbnQgdG8gYmUgZXhhbXBsZXMgdGhhdCBhcmUgYmV0dGVyIHR5cGVzZXQgaW4KKyAgIG1vbm9zcGFjZS4KKworICogQ29tcGF0aWJpbGl0eSB3cmFwcGVyIGFyb3VuZCBzb21lIG1rZGlyKDIpIGltcGxlbWVudGF0aW9ucyB0aGF0CisgICByZWplY3QgcGFyYW1ldGVycyB3aXRoIHRyYWlsaW5nIHNsYXNoIGhhcyBiZWVuIGludHJvZHVjZWQuCisKKyAqIENvbXBhdGliaWxpdHkgd3JhcHBlciBmb3Igc3lzdGVtcyB0aGF0IGxhY2sgdXNhYmxlIHNldGl0aW1lcigpIGhhcworICAgYmVlbiBhZGRlZC4KKworICogVGhlIG9wdGlvbiBwYXJzaW5nIG9mICJnaXQgY2hlY2tvdXQiIGhhZCBlcnJvciBjaGVja2luZywgZHdpbSBhbmQKKyAgIGRlZmF1bHRpbmcgbWlzc2luZyBvcHRpb25zLCBhbGwgbWl4ZWQgaW4gdGhlIGNvZGUsIGFuZCBpc3N1aW5nIGFuCisgICBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIHdpdGggdXNlZnVsIGNvbnRleHQgd2FzIGdldHRpbmcgaGFyZGVyLgorICAgVGhlIGNvZGUgaGFzIGJlZW4gcmVvcmdhbml6ZWQgdG8gYWxsb3cgZ2l2aW5nIGEgcHJvcGVyIGRpYWdub3NpcworICAgd2hlbiB0aGUgdXNlciBzYXlzICJnaXQgY2hlY2tvdXQgLWIgLXQgZm9vIGJhciIgKGUuZy4gIi10IiBpcyBub3QgYQorICAgZ29vZCBuYW1lIGZvciBhIGJyYW5jaCkuCisKKyAqIE1hbnkgaW50ZXJuYWwgdXNlcyBvZiBhICJnaXQgbWVyZ2UtYmFzZSIgZXF1aXZhbGVudCB3ZXJlIG9ubHkgdG8gc2VlCisgICBpZiBvbmUgY29tbWl0IGZhc3QtZm9yd2FyZHMgdG8gdGhlIG90aGVyLCB3aGljaCBkaWQgbm90IG5lZWQgdGhlCisgICBmdWxsIHNldCBvZiBtZXJnZSBiYXNlcyB0byBiZSBjb21wdXRlZC4gVGhleSBoYXZlIGJlZW4gdXBkYXRlZCB0bworICAgdXNlIGxlc3MgZXhwZW5zaXZlIGNoZWNrcy4KKworICogVGhlIGhldXJpc3RpY3MgdG8gZGV0ZWN0IGFuZCBzaWxlbnRseSBjb252ZXJ0IGxhdGluMSB0byB1dGY4IHdoZW4KKyAgIHdlIHdlcmUgdG9sZCB0byB1c2UgdXRmLTggaW4gdGhlIGxvZyBtZXNzYWdlIGhhcyBiZWVuIHRyYW5zcGxhbnRlZAorICAgZnJvbSAibWFpbGluZm8iIHRvICJjb21taXQiIGFuZCAiY29tbWl0LXRyZWUiLgorCisgKiBNZXNzYWdlcyBnaXZlbiBieSAiZ2l0IDxzdWJjb21tYW5kPiAtaCIgZnJvbSBtYW55IHN1YmNvbW1hbmRzIGhhdmUKKyAgIGJlZW4gbWFya2VkIGZvciB0cmFuc2xhdGlvbi4KKworCitBbHNvIGNvbnRhaW5zIG1pbm9yIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuNy4xMgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjcuMTIgaW4gdGhlCittYWludGVuYW5jZSB0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHJlbGVhc2Ugbm90ZXMKK3RvIHRoZW0gZm9yIGRldGFpbHMpLgorCisgKiBUaGUgYXR0cmlidXRlIHN5c3RlbSBtYXkgYmUgYXNrZWQgZm9yIGEgcGF0aCB0aGF0IGl0c2VsZiBvciBpdHMKKyAgIGxlYWRpbmcgZGlyZWN0b3JpZXMgbm8gbG9uZ2VyIGV4aXN0cyBpbiB0aGUgd29ya2luZyB0cmVlLCBhbmQgaXQgaXMKKyAgIGZpbmUgaWYgd2UgY2Fubm90IG9wZW4gLmdpdGF0dHJpYnV0ZSBmaWxlIGluIHN1Y2ggYSBjYXNlLiAgRmFpbHVyZQorICAgdG8gb3BlbiBwZXItZGlyZWN0b3J5IC5naXRhdHRyaWJ1dGVzIHdpdGggZXJyb3Igc3RhdHVzIG90aGVyIHRoYW4KKyAgIEVOT0VOVCBhbmQgRU5PVERJUiBzaG91bGQgYmUgZGlhZ25vc2VkLCBidXQgaXQgd2Fzbid0LgorCisgKiBXaGVuIGxvb2tpbmcgZm9yICRIT01FLy5naXRjb25maWcgZXRjLiwgaXQgaXMgT0sgaWYgd2UgY2Fubm90IHJlYWQKKyAgIHRoZW0gYmVjYXVzZSB0aGV5IGRvIG5vdCBleGlzdCwgYnV0IHdlIGRpZCBub3QgZGlhZ25vc2UgZXhpc3RpbmcKKyAgIGZpbGVzIHRoYXQgd2UgY2Fubm90IHJlYWQuCisKKyAqIFdoZW4gImdpdCBhbSIgaXMgZmVkIGFuIGlucHV0IHRoYXQgaGFzIG11bHRpcGxlICJDb250ZW50LXR5cGU6IC4uLiIKKyAgIGhlYWRlciwgaXQgZGlkIG5vdCBncm9rIGNoYXJzZXQ9IGF0dHJpYnV0ZSBjb3JyZWN0bHkuCisKKyAqICJnaXQgYW0iIG1pc2hhbmRsZWQgYSBwYXRjaCBhdHRhY2hlZCBhcyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KKyAgIChlLmcuIG5vdCB0ZXh0LyopOyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIChlLmcuIGJhc2U2NCkgd2FzIG5vdAorICAgaG9ub3JlZCBjb3JyZWN0bHkuCisKKyAqICJnaXQgYmxhbWUgTUFLRUZJTEUiIHJ1biBpbiBhIGhpc3RvcnkgdGhhdCBoYXMgIk1ha2VmaWxlIiBidXQgbm90CisgICAiTUFLRUZJTEUiIHNob3VsZCBzYXkgIk5vIHN1Y2ggZmlsZSBNQUtFRklMRSBpbiBIRUFEIiwgYnV0IGdvdAorICAgY29uZnVzZWQgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gYW5kIGZhaWxlZCB0byBkbyBzby4KKworICogRXZlbiBkdXJpbmcgYSBjb25mbGljdGVkIG1lcmdlLCAiZ2l0IGJsYW1lICRwYXRoIiBhbHdheXMgbWVhbnQgdG8KKyAgIGJsYW1lIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gdGhlICJ3b3JraW5nIHRyZWUiIHZlcnNpb247IG1ha2UgaXQKKyAgIG1vcmUgdXNlZnVsIGJ5IHNob3dpbmcgY2xlYW5seSBtZXJnZWQgcGFydHMgYXMgY29taW5nIGZyb20gdGhlIG90aGVyCisgICBicmFuY2ggdGhhdCBpcyBiZWluZyBtZXJnZWQuCisKKyAqIEl0IHdhcyB1bmNsZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciAiZ2l0IGJsYW1lIiB0aGF0IGl0IGlzCisgICB1bm5lY2Vzc2FyeSBmb3IgdXNlcnMgdG8gdXNlIHRoZSAiLS1mb2xsb3ciIG9wdGlvbi4KKworICogT3V0cHV0IGZyb20gImdpdCBicmFuY2ggLXYiIGNvbnRhaW5zICIobm8gYnJhbmNoKSIgdGhhdCBjb3VsZCBiZQorICAgbG9jYWxpemVkLCBidXQgdGhlIGNvZGUgdG8gYWxpZ24gaXQgYWxvbmcgd2l0aCB0aGUgbmFtZXMgb2YKKyAgIGJyYW5jaGVzIHdhcyBjb3VudGluZyBpbiBieXRlcywgbm90IGluIGRpc3BsYXkgY29sdW1ucy4KKworICogImdpdCBjaGVycnktcGljayBBIEMgQiIgdXNlZCB0byByZXBsYXkgY2hhbmdlcyBpbiBBIGFuZCB0aGVuIEIgYW5kCisgICB0aGVuIEMgaWYgdGhlc2UgdGhyZWUgY29tbWl0cyBoYWQgY29tbWl0dGVyIHRpbWVzdGFtcHMgaW4gdGhhdAorICAgb3JkZXIsIHdoaWNoIGlzIG5vdCB3aGF0IHRoZSB1c2VyIHdobyBzYWlkICJBIEMgQiIgbmF0dXJhbGx5CisgICBleHBlY3RzLgorCisgKiBBIHJlcG9zaXRvcnkgY3JlYXRlZCB3aXRoICJnaXQgY2xvbmUgLS1zaW5nbGUiIGhhZCBpdHMgZmV0Y2gKKyAgIHJlZnNwZWNzIHNldCB1cCBqdXN0IGxpa2UgYSBjbG9uZSB3aXRob3V0ICItLXNpbmdsZSIsIGxlYWRpbmcgdGhlCisgICBzdWJzZXF1ZW50ICJnaXQgZmV0Y2giIHRvIHNsdXJwIGFsbCB0aGUgb3RoZXIgYnJhbmNoZXMsIGRlZmVhdGluZworICAgdGhlIHdob2xlIHBvaW50IG9mIHNwZWNpZnlpbmcgIm9ubHkgdGhpcyBicmFuY2giLgorCisgKiBEb2N1bWVudGF0aW9uIHRhbGtlZCBhYm91dCAiZmlyc3QgbGluZSBvZiBjb21taXQgbG9nIiB3aGVuIGl0IG1lYW50CisgICB0aGUgdGl0bGUgb2YgdGhlIGNvbW1pdC4gIFRoZSBkZXNjcmlwdGlvbiB3YXMgY2xhcmlmaWVkIGJ5IGRlZmluaW5nCisgICBob3cgdGhlIHRpdGxlIGlzIGRlY2lkZWQgYW5kIHJld29yZGluZyB0aGUgY2FzdWFsIG1lbnRpb24gb2YgImZpcnN0CisgICBsaW5lIiB0byAidGl0bGUiLgorCisgKiAiZ2l0IGN2c2ltcG9ydCIgZGlkIG5vdCB0aG9yb3VnaGx5IGNsZWFuc2UgdGFnIG5hbWVzIHRoYXQgaXQKKyAgIGluZmVycmVkIGZyb20gdGhlIG5hbWVzIG9mIHRoZSB0YWdzIGl0IG9idGFpbmVkIGZyb20gQ1ZTLCB3aGljaAorICAgY2F1c2VkICJnaXQgdGFnIiB0byBiYXJmIGFuZCBzdG9wIHRoZSBpbXBvcnQgaW4gdGhlIG1pZGRsZS4KKworICogRWFybGllciB3ZSBtYWRlIHRoZSBkaWZmc3RhdCBzdW1tYXJ5IGxpbmUgdGhhdCBzaG93cyB0aGUgbnVtYmVyIG9mCisgICBsaW5lcyBhZGRlZC9kZWxldGVkIGxvY2FsaXphYmxlLCBidXQgaXQgd2FzIGZvdW5kIGlycml0YXRpbmcgaGF2aW5nCisgICB0byBzZWUgdGhlbSBpbiB2YXJpb3VzIGxhbmd1YWdlcyBvbiBhIGxpc3Qgd2hvc2UgZGlzY3Vzc2lvbiBsYW5ndWFnZQorICAgaXMgRW5nbGlzaCwgYW5kIHRoaXMgY2hhbmdlIGhhcyBiZWVuIHJldmVydGVkLgorCisgKiAiZ2l0IGZldGNoIC0tYWxsIiwgd2hlbiBwYXNzZWQgIi0tbm8tdGFncyIsIGRpZCBub3QgaG9ub3IgdGhlCisgICAiLS1uby10YWdzIiBvcHRpb24gd2hpbGUgZmV0Y2hpbmcgZnJvbSBpbmRpdmlkdWFsIHJlbW90ZXMgKHRoZSBzYW1lCisgICBpc3N1ZSBleGlzdGVkIHdpdGggIi0tdGFncyIsIGJ1dCB0aGUgY29tYmluYXRpb24gIi0tYWxsIC0tdGFncyIgbWFrZXMKKyAgIG11Y2ggbGVzcyBzZW5zZSB0aGFuICItLWFsbCAtLW5vLXRhZ3MiKS4KKworICogImdpdCBmZXRjaCIgb3ZlciBodHRwIGhhZCBhbiBvbGQgd29ya2Fyb3VuZCBmb3IgYW4gdW5saWtlbHkgc2VydmVyCisgICBtaXNjb25maWd1cmF0aW9uOyBpdCB0dXJucyBvdXQgdGhhdCB0aGlzIGh1cnRzIGRlYnVnZ2FiaWxpdHkgb2YgdGhlCisgICBjb25maWd1cmF0aW9uIGluIGdlbmVyYWwsIGFuZCBoYXMgYmVlbiByZXZlcnRlZC4KKworICogImdpdCBmZXRjaCIgb3ZlciBodHRwIGFkdmVydGlzZWQgdGhhdCBpdCBzdXBwb3J0cyAiZGVmbGF0ZSIsIHdoaWNoCisgICBpcyBtdWNoIGxlc3MgY29tbW9uLCBhbmQgZGlkIG5vdCBhZHZlcnRpc2UgdGhlIG1vcmUgY29tbW9uICJnemlwIiBvbgorICAgaXRzIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgdGhlIGR1bWItaHR0cCByZXZpc2lvbiB3YWxrZXIgY291bGQgc2VnZmF1bHQgd2hlbgorICAgY3VybCdzIG11bHRpIGludGVyZmFjZSB3YXMgdXNlZC4KKworICogImdpdCBnYyAtLWF1dG8iIG5vdGlmaWVkIHRoZSB1c2VyIHRoYXQgYXV0by1wYWNraW5nIGhhcyB0cmlnZ2VyZWQKKyAgICBldmVuIHVuZGVyIHRoZSAiLS1xdWlldCIgb3B0aW9uLgorCisgKiBBZnRlciAiZ2l0ayIgc2hvd2VkIHRoZSBjb250ZW50cyBvZiBhIHRhZywgbmVpdGhlciAiUmVyZWFkCisgICByZWZlcmVuY2VzIiBub3IgIlJlbG9hZCIgdXBkYXRlZCB3aGF0IGlzIHNob3duIGFzIHRoZQorICAgY29udGVudHMgb2YgaXQgd2hlbiB0aGUgdXNlciBvdmVyd3JvdGUgdGhlIHRhZyB3aXRoICJnaXQgdGFnIC1mIi4KKworICogImdpdCBsb2cgLS1hbGwtbWF0Y2ggLS1ncmVwPUEgLS1ncmVwPUIiIG91Z2h0IHRvIHNob3cgY29tbWl0cyB0aGF0CisgICBtZW50aW9uIGJvdGggQSBhbmQgQiwgYnV0IHdoZW4gdGhlc2UgdGhyZWUgb3B0aW9ucyBhcmUgdXNlZCB3aXRoCisgICAtLWF1dGhvciBvciAtLWNvbW1pdHRlciwgaXQgc2hvd2VkIGNvbW1pdHMgdGhhdCBtZW50aW9uIGVpdGhlciBBIG9yCisgICBCIChvciBib3RoKSBpbnN0ZWFkLgorCisgKiBUaGUgIi1Yb3VycyIgYmFja2VuZCBvcHRpb24gdG8gImdpdCBtZXJnZSAtcyByZWN1cnNpdmUiIHdhcyBpZ25vcmVkCisgICBmb3IgYmluYXJ5IGZpbGVzLgorCisgKiAiZ2l0IHA0Iiwgd2hlbiAiLS11c2UtY2xpZW50LXNwZWMiIGFuZCAiLS1kZXRlY3QtYnJhbmNoZXMiIGFyZSB1c2VkCisgICB0b2dldGhlciwgbWlzZGV0ZWN0ZWQgYnJhbmNoZXMuCisKKyAqICJnaXQgcmVjZWl2ZS1wYWNrIiAodGhlIGNvdW50ZXJwYXJ0IHRvICJnaXQgcHVzaCIpIGRpZCBub3QgZ2l2ZQorICAgcHJvZ3Jlc3Mgb3V0cHV0IHdoaWxlIHByb2Nlc3Npbmcgb2JqZWN0cyBpdCByZWNlaXZlZCB0byB0aGUgcHVzZXIKKyAgIHdoZW4gcnVuIG92ZXIgdGhlIHNtYXJ0LWh0dHAgcHJvdG9jb2wuCisKKyAqIFdoZW4geW91IG1pc3NwZWxsIHRoZSBjb21tYW5kIG5hbWUgeW91IGdpdmUgdG8gdGhlICJleGVjIiBhY3Rpb24gaW4KKyAgIHRoZSAiZ2l0IHJlYmFzZSAtaSIgaW5zdHJ1Y3Rpb24gc2hlZXQgeW91IHdlcmUgdG9sZCB0aGF0ICdyZWJhc2UnIGlzIG5vdCBhCisgICBnaXQgc3ViY29tbWFuZCBmcm9tICJnaXQgcmViYXNlIC0tY29udGludWUiLgorCisgKiBUaGUgc3ViY29tbWFuZCBpbiAiZ2l0IHJlbW90ZSIgdG8gcmVtb3ZlIGEgZGVmaW5lZCByZW1vdGUgd2FzCisgICAicm0iIGFuZCB0aGUgY29tbWFuZCBkaWQgbm90IHRha2UgYSBmdWxseS1zcGVsbGVkICJyZW1vdmUiLgorCisgKiBUaGUgaW50ZXJhY3RpdmUgcHJvbXB0IHRoYXQgImdpdCBzZW5kLWVtYWlsIiBnaXZlcyB3YXMgZXJyb3IgcHJvbmUuIEl0CisgICBhc2tlZCAiV2hhdCBlLW1haWwgYWRkcmVzcyBkbyB5b3Ugd2FudCB0byB1c2U/IiB3aXRoIHRoZSBhZGRyZXNzIGl0CisgICBndWVzc2VkIChjb3JyZWN0bHkpIHRoZSB1c2VyIHdvdWxkIHdhbnQgdG8gdXNlIGluIGl0cyBwcm9tcHQsCisgICB0ZW1wdGluZyB0aGUgdXNlciB0byBzYXkgInkiLiBCdXQgdGhlIHJlc3BvbnNlIHdhcyB0YWtlbiBhcyAiTm8sCisgICBwbGVhc2UgdXNlICd5JyBhcyB0aGUgZS1tYWlsIGFkZHJlc3MgaW5zdGVhZCIsIHdoaWNoIGlzIG1vc3QKKyAgIGNlcnRhaW5seSBub3Qgd2hhdCB0aGUgdXNlciBtZWFudC4KKworICogImdpdCBzaG93IC0tZm9ybWF0PSclY2knIiBkaWQgbm90IGdpdmUgdGhlIHRpbWVzdGFtcCBjb3JyZWN0bHkgZm9yCisgICBjb21taXRzIGNyZWF0ZWQgd2l0aG91dCBodW1hbiByZWFkYWJsZSBuYW1lIG9uIHRoZSAiY29tbWl0dGVyIiBsaW5lLgorCisgKiAiZ2l0IHNob3cgLS1xdWlldCIgb3VnaHQgdG8gYmUgYSBzeW5vbnltIGZvciAiZ2l0IHNob3cgLXMiLCBidXQKKyAgIHdhc24ndC4KKworICogImdpdCBzdWJtb2R1bGUgZnJvdHoiIHdhcyBub3QgZGlhZ25vc2VkIGFzICJmcm90eiIgYmVpbmcgYW4gdW5rbm93bgorICAgc3ViY29tbWFuZCB0byAiZ2l0IHN1Ym1vZHVsZSI7IHRoZSB1c2VyIGluc3RlYWQgZ290IGEgY29tcGxhaW50CisgICB0aGF0ICJnaXQgc3VibW9kdWxlIHN0YXR1cyIgd2FzIHJ1biB3aXRoIGFuIHVua25vd24gcGF0aCAiZnJvdHoiLgorCisgKiAiZ2l0IHN0YXR1cyIgaG9ub3JlZCB0aGUgaWdub3JlPWRpcnR5IHNldHRpbmdzIGluIC5naXRtb2R1bGVzIGJ1dAorICAgImdpdCBjb21taXQiIGRpZG4ndC4KKworICogImdpdHdlYiIgZGlkIG5vdCBnaXZlIHRoZSBjb3JyZWN0IGNvbW1pdHRlciB0aW1lem9uZSBpbiBpdHMgZmVlZAorICAgb3V0cHV0IGR1ZSB0byBhIHR5cG8uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2RlMDdiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS4xLnR4dApAQCAtMCwwICsxLDg3IEBACitHaXQgMS44LjEuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBhdHRyaWJ1dGUgbWVjaGFuaXNtIGRpZG4ndCBhbGxvdyBsaW1pdGluZyBhdHRyaWJ1dGVzIHRvIGJlCisgICBhcHBsaWVkIHRvIG9ubHkgYSBzaW5nbGUgZGlyZWN0b3J5IGl0c2VsZiB3aXRoICJwYXRoLyIgbGlrZSB0aGUKKyAgIGV4Y2x1ZGUgbWVjaGFuaXNtIGRvZXMuCisKKyAqIFdoZW4gYXR0ZW1wdGluZyB0byByZWFkIHRoZSBYREctc3R5bGUgJEhPTUUvLmNvbmZpZy9naXQvY29uZmlnIGFuZAorICAgZmluZGluZyB0aGF0ICRIT01FLy5jb25maWcvZ2l0IGlzIGEgZmlsZSwgd2UgZ2F2ZSBhIHdyb25nIGVycm9yCisgICBtZXNzYWdlLCBpbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBjYXNlIGFzICJhIGN1c3RvbSBjb25maWcgZmlsZSBkb2VzCisgICBub3QgZXhpc3QgdGhlcmUiIGFuZCBtb3Zpbmcgb24uCisKKyAqIEFmdGVyIGZhaWxpbmcgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUgdXNpbmcgbWtzdGVtcCgpLCBmYWlsaW5nCisgICBwYXRobmFtZSB3YXMgbm90IHJlcG9ydGVkIGNvcnJlY3RseSBvbiBzb21lIHBsYXRmb3Jtcy4KKworICogaHR0cCB0cmFuc3BvcnQgd2FzIHdyb25nIHRvIGFzayBmb3IgdGhlIHVzZXJuYW1lIHdoZW4gdGhlCisgICBhdXRoZW50aWNhdGlvbiBpcyBkb25lIGJ5IGNlcnRpZmljYXRlIGlkZW50aXR5LgorCisgKiBUaGUgYmVoYXZpb3VyIHZpc2libGUgdG8gdGhlIGVuZCB1c2VycyB3YXMgY29uZnVzaW5nLCB3aGVuIHRoZXkKKyAgIGF0dGVtcHQgdG8ga2lsbCBhIHByb2Nlc3Mgc3Bhd25lZCBpbiB0aGUgZWRpdG9yIHRoYXQgd2FzIGluIHR1cm4KKyAgIGxhdW5jaGVkIGJ5IEdpdCB3aXRoIFNJR0lOVCAob3IgU0lHUVVJVCksIGFzIEdpdCB3b3VsZCBjYXRjaCB0aGF0CisgICBzaWduYWwgYW5kIGRpZS4gIFdlIGlnbm9yZSB0aGVzZSBzaWduYWxzIG5vdy4KKworICogQSBjaGlsZCBwcm9jZXNzIHRoYXQgd2FzIGtpbGxlZCBieSBhIHNpZ25hbCAoZS5nLiBTSUdJTlQpIHdhcworICAgcmVwb3J0ZWQgaW4gYW4gaW5jb25zaXN0ZW50IHdheSBkZXBlbmRpbmcgb24gaG93IHRoZSBwcm9jZXNzIHdhcworICAgc3Bhd25lZCBieSB1cywgd2l0aCBvciB3aXRob3V0IGEgc2hlbGwgaW4gYmV0d2Vlbi4KKworICogQWZ0ZXIgImdpdCBhZGQgLU4iIGFuZCB0aGVuIHdyaXRpbmcgYSB0cmVlIG9iamVjdCBvdXQgb2YgdGhlCisgICBpbmRleCwgdGhlIGNhY2hlLXRyZWUgZGF0YSBzdHJ1Y3R1cmUgZ290IGNvcnJ1cHRlZC4KKworICogImdpdCBhcHBseSIgbWlzYmVoYXZlZCB3aGVuIGZpeGluZyB3aGl0ZXNwYWNlIGJyZWFrYWdlcyBieSByZW1vdmluZworICAgZXhjZXNzIHRyYWlsaW5nIGJsYW5rIGxpbmVzIGluIHNvbWUgY29ybmVyIGNhc2VzLgorCisgKiBBIHRhciBhcmNoaXZlIGNyZWF0ZWQgYnkgImdpdCBhcmNoaXZlIiByZWNvcmRlZCBhIGRpcmVjdG9yeSBpbiBhCisgICB3YXkgdGhhdCBtYWRlIE5ldEJTRCdzIGltcGxlbWVudGF0aW9uIG9mICJ0YXIiIHNvbWV0aW1lcyB1bmhhcHB5LgorCisgKiBXaGVuICJnaXQgY2xvbmUgLS1zZXBhcmF0ZS1naXQtZGlyPSRvdmVyX3RoZXJlIiBpcyBpbnRlcnJ1cHRlZCwgaXQKKyAgIGZhaWxlZCB0byByZW1vdmUgdGhlIHJlYWwgbG9jYXRpb24gb2YgdGhlICRHSVRfRElSIGl0IGNyZWF0ZWQuCisgICBUaGlzIHdhcyBtb3N0IHZpc2libGUgd2hlbiBpbnRlcnJ1cHRpbmcgYSBzdWJtb2R1bGUgdXBkYXRlLgorCisgKiAiZ2l0IGZldGNoIC0tbWlycm9yIiBhbmQgZmV0Y2ggdGhhdCB1c2VzIG90aGVyIGZvcm1zIG9mIHJlZnNwZWMKKyAgIHdpdGggd2lsZGNhcmQgdXNlZCB0byBhdHRlbXB0IHRvIHVwZGF0ZSBhIHN5bWJvbGljIHJlZiB0aGF0IG1hdGNoCisgICB0aGUgd2lsZGNhcmQgb24gdGhlIHJlY2VpdmluZyBlbmQsIHdoaWNoIG1hZGUgbGl0dGxlIHNlbnNlICh0aGUKKyAgIHJlYWwgcmVmIHRoYXQgaXMgcG9pbnRlZCBhdCBieSB0aGUgc3ltYm9saWMgcmVmIHdvdWxkIGJlIHVwZGF0ZWQKKyAgIGFueXdheSkuICBTeW1ib2xpYyByZWZzIG5vIGxvbmdlciBhcmUgYWZmZWN0ZWQgYnkgc3VjaCBhIGZldGNoLgorCisgKiBUaGUgImxvZyAtLWdyYXBoIiBjb2RlcGF0aCBmZWxsIGludG8gaW5maW5pdGUgbG9vcCBpbiBzb21lCisgICBjb3JuZXIgY2FzZXMuCisKKyAqICJnaXQgbWVyZ2UiIHN0YXJ0ZWQgY2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vayBsaWtlICJnaXQKKyAgIGNvbW1pdCIgZG9lcyBzb21lIHRpbWUgYWdvLCBidXQgZm9yZ290IHRvIHBheSBhdHRlbnRpb24gdG8gdGhlIGV4aXQKKyAgIHN0YXR1cyBvZiB0aGUgaG9vay4KKworICogImdpdCBwYWNrLXJlZnMiIHRoYXQgcmFuIGluIHBhcmFsbGVsIHRvIGFub3RoZXIgcHJvY2VzcyB0aGF0CisgICBjcmVhdGVkIG5ldyByZWZzIGhhZCBhIHJhY2UgdGhhdCBjYW4gbG9zZSBuZXcgb25lcy4KKworICogV2hlbiBhIGxpbmUgdG8gYmUgd3JhcHBlZCBoYXMgYSBzb2xpZCBydW4gb2Ygbm9uIHNwYWNlIGNoYXJhY3RlcnMKKyAgIHdob3NlIGxlbmd0aCBleGFjdGx5IGlzIHRoZSB3cmFwIHdpZHRoLCAiZ2l0IHNob3J0bG9nIC13IiBmYWlsZWQKKyAgIHRvIGFkZCBhIG5ld2xpbmUgYWZ0ZXIgc3VjaCBhIGxpbmUuCisKKyAqIFRoZSB3YXkgImdpdCBzdm4iIGFza2VkIGZvciBwYXNzd29yZCB1c2luZyBTU0hfQVNLUEFTUyBhbmQKKyAgIEdJVF9BU0tQQVNTIHdhcyBub3QgaW4gbGluZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uCisKKyAqICJnaXR3ZWIiLCB3aGVuIHNvcnRpbmcgYnkgYWdlIHRvIHNob3cgcmVwb3NpdG9yaWVzIHdpdGggbmV3CisgICBhY3Rpdml0aWVzIGZpcnN0LCB1c2VkIHRvIHNvcnQgcmVwb3NpdG9yaWVzIHdpdGggYWJzb2x1dGVseQorICAgbm90aGluZyBpbiBpdCBlYXJseSwgd2hpY2ggd2FzIG5vdCB2ZXJ5IHVzZWZ1bC4KKworICogImdpdHdlYiIsIHdoZW4gc29ydGluZyBieSBhZ2UgdG8gc2hvdyByZXBvc2l0b3JpZXMgd2l0aCBuZXcKKyAgIGFjdGl2aXRpZXMgZmlyc3QsIHVzZWQgdG8gc29ydCByZXBvc2l0b3JpZXMgd2l0aCBhYnNvbHV0ZWx5CisgICBub3RoaW5nIGluIGl0IGVhcmx5LCB3aGljaCB3YXMgbm90IHZlcnkgdXNlZnVsLgorCisgKiBXaGVuIGF1dG9jb25mIGlzIHVzZWQsIGFueSBidWlsZCBvbiBhIGRpZmZlcmVudCBjb21taXQgYWx3YXlzIHJhbgorICAgImNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrIiBldmVuIHdoZW4gdW5uZWNlc3NhcnkuCisKKyAqIFNvbWUgc2NyaXB0ZWQgcHJvZ3JhbXMgd3JpdHRlbiBpbiBQeXRob24gZGlkIG5vdCBnZXQgdXBkYXRlZCB3aGVuCisgICBQWVRIT05fUEFUSCBjaGFuZ2VkLgorCisgKiBXZSBoYXZlIGJlZW4gY2FycnlpbmcgYSB0cmFuc2xhdGVkIGFuZCBsb25nLXVubWFpbnRhaW5lZCBjb3B5IG9mIGFuCisgICBvbGQgdmVyc2lvbiBvZiB0aGUgdHV0b3JpYWw7IHJlbW92ZWQuCisKKyAqIFBvcnRhYmlsaXR5IGlzc3VlcyBpbiBtYW55IHNlbGYtdGVzdCBzY3JpcHRzIGhhdmUgYmVlbiBhZGRyZXNzZWQuCisKKworQWxzbyBjb250YWlucyBvdGhlciBtaW5vciBmaXhlcyBhbmQgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFiN2IxOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuMi50eHQKQEAgLTAsMCArMSwyNSBAQAorR2l0IDEuOC4xLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjEuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gZWxlbWVudCBvbiBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyBsaXN0IHRoYXQgZG9lcyBub3QgbmFtZSB0aGUKKyAgIHJlYWwgcGF0aCB0byBhIGRpcmVjdG9yeSAoaS5lLiBhIHN5bWJvbGljIGxpbmspIGNvdWxkIGhhdmUgY2F1c2VkCisgICB0aGUgR0lUX0RJUiBkaXNjb3ZlcnkgbG9naWMgdG8gZXNjYXBlIHRoZSBjZWlsaW5nLgorCisgKiBDb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgInRjc2giIGVtaXR0ZWQgYW4gdW53YW50ZWQgc3BhY2UKKyAgIGFmdGVyIGNvbXBsZXRpbmcgYSBzaW5nbGUgZGlyZWN0b3J5IG5hbWUuCisKKyAqIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIGxlYWtlZCBhbiB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlIHdoaWxlCisgICBsb29raW5nIGZvciBwb3NzaWJsZSBtYXRjaGVzIHdpdGggcGF0aHMgaW4gPHRyZWUtaXNoPi4KKworICogImdpdCBhcmNoaXZlIiBkaWQgbm90IHJlY29yZCB1bmNvbXByZXNzZWQgc2l6ZSBpbiB0aGUgaGVhZGVyIHdoZW4KKyAgIHN0cmVhbWluZyBhIHppcCBhcmNoaXZlLCB3aGljaCBjb25mdXNlZCBzb21lIGltcGxlbWVudGF0aW9ucyBvZiB1bnppcC4KKworICogV2hlbiB1c2VycyBzcGVsbGVkICJjYzoiIGluIGxvd2VyY2FzZSBpbiB0aGUgZmFrZSAiaGVhZGVyIiBpbiB0aGUKKyAgIHRyYWlsZXIgcGFydCwgImdpdCBzZW5kLWVtYWlsIiBmYWlsZWQgdG8gcGljayB1cCB0aGUgYWRkcmVzc2VzIGZyb20KKyAgIHRoZXJlLiBBcyBlLW1haWwgaGVhZGVycyBmaWVsZCBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgdGhpcworICAgc2NyaXB0IHNob3VsZCBmb2xsb3cgc3VpdCBhbmQgdHJlYXQgImNjOiIgYW5kICJDYzoiIHRoZSBzYW1lIHdheS4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODFjYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS4zLnR4dApAQCAtMCwwICsxLDQ3IEBACitHaXQgMS44LjEuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgYXR0cmlidXRlIG1lY2hhbmlzbSBkaWRuJ3QgYWxsb3cgbGltaXRpbmcgYXR0cmlidXRlcyB0byBiZQorICAgYXBwbGllZCB0byBvbmx5IGEgc2luZ2xlIGRpcmVjdG9yeSBpdHNlbGYgd2l0aCAicGF0aC8iIGxpa2UgdGhlCisgICBleGNsdWRlIG1lY2hhbmlzbSBkb2VzLiAgVGhlIGZpeCBmb3IgdGhpcyBpbiAxLjguMS4yIGhhZAorICAgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25zLgorCisgKiBDb21tYW5kIGxpbmUgY29tcGxldGlvbiBjb2RlIHdhcyBpbmFkdmVydGVudGx5IG1hZGUgaW5jb21wYXRpYmxlIHdpdGgKKyAgIG9sZGVyIHZlcnNpb25zIG9mIGJhc2ggYnkgdXNpbmcgYSBuZXdlciBhcnJheSBub3RhdGlvbi4KKworICogU2NyaXB0cyB0byB0ZXN0IGJhc2ggY29tcGxldGlvbiB3YXMgaW5oZXJlbnRseSBmbGFreSBhcyBpdCB3YXMKKyAgIGFmZmVjdGVkIGJ5IHdoYXRldmVyIHJhbmRvbSB0aGluZ3MgdGhlIHVzZXIgbWF5IGhhdmUgb24gJFBBVEguCisKKyAqIEEgZml4IHdhcyBhZGRlZCB0byB0aGUgYnVpbGQgcHJvY2VkdXJlIHRvIHdvcmsgYXJvdW5kIGJ1Z2d5CisgICB2ZXJzaW9ucyBvZiBjY2FjaGUgYnJva2UgdGhlIGF1dG8tZ2VuZXJhdGlvbiBvZiBkZXBlbmRlbmNpZXMsIHdoaWNoCisgICB1bmZvcnR1bmF0ZWx5IGlzIHN0aWxsIHJlbGV2YW50IGJlY2F1c2Ugc29tZSBwZW9wbGUgdXNlIGFuY2llbnQKKyAgIGRpc3Ryb3MuCisKKyAqIFdlIHVzZWQgdG8gc3R1ZmYgInVzZXJAIiBhbmQgdGhlbiBhcHBlbmQgd2hhdCB3ZSByZWFkIGZyb20KKyAgIC9ldGMvbWFpbG5hbWUgdG8gY29tZSB1cCB3aXRoIGEgZGVmYXVsdCBlLW1haWwgaWRlbnQsIGJ1dCBhIGJ1ZworICAgbG9zdCB0aGUgInVzZXJAIiBwYXJ0LgorCisgKiAiZ2l0IGFtIiBkaWQgbm90IHBhcnNlIGRhdGVzdGFtcCBjb3JyZWN0bHkgZnJvbSBIZyBnZW5lcmF0ZWQgcGF0Y2gsCisgICB3aGVuIGl0IGlzIHJ1biBpbiBhIGxvY2FsZSBvdXRzaWRlIEMgKG9yIGVuKS4KKworICogQXR0ZW1wdCB0byAiYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiIgYW4gZXhpc3RpbmcgYnJhbmNoLCB3aGlsZQorICAgYmVpbmcgb24gYSBkZXRhY2hlZCBIRUFELCBlcnJvcmVkIG91dC4KKworICogImdpdCBjaGVycnktcGljayIgZGlkIG5vdCByZXBsYXkgYSByb290IGNvbW1pdCB0byBhbiB1bmJvcm4gYnJhbmNoLgorCisgKiBXZSBmb3Jnb3QgdG8gY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciByZWFkaW5nIGZyb20gImdwZyIgb3V0cHV0LAorICAga2lsbGluZyAiZ2l0IGxvZyAtLXNob3ctc2lnbmF0dXJlIiBvbiBhIGxvbmcgaGlzdG9yeS4KKworICogImdpdCByZWJhc2UgLS1wcmVzZXJ2ZS1tZXJnZXMiIGxvc3QgZW1wdHkgbWVyZ2VzIGluIHJlY2VudCB2ZXJzaW9ucworICAgb2YgR2l0LgorCisgKiBSZWJhc2luZyB0aGUgaGlzdG9yeSBvZiBzdXBlcnByb2plY3Qgd2l0aCBjaGFuZ2UgaW4gdGhlIHN1Ym1vZHVsZQorICAgaGFzIGJlZW4gYnJva2VuIHNpbmNlIHYxLjcuMTIuCisKKyAqIEEgZmFpbHVyZSB0byBwdXNoIGR1ZSB0byBub24tZmYgd2hpbGUgb24gYW4gdW5ib3JuIGJyYW5jaAorICAgZGVyZWZlcmVuY2VkIGEgTlVMTCBwb2ludGVyIHdoZW4gc2hvd2luZyBhbiBlcnJvciBtZXNzYWdlLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYWYxZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK0dpdCAxLjguMS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4xLjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgaW1hcC1zZW5kIiB0YWxraW5nIG92ZXIgaW1hcHM6Ly8gZGlkIG1ha2Ugc3VyZSBpdCByZWNlaXZlZCBhCisgICB2YWxpZCBjZXJ0aWZpY2F0ZSBmcm9tIHRoZSBvdGhlciBlbmQsIGJ1dCBkaWQgbm90IGNoZWNrIGlmIHRoZQorICAgY2VydGlmaWNhdGUgbWF0Y2hlZCB0aGUgaG9zdCBpdCB0aG91Z2h0IGl0IHdhcyB0YWxraW5nIHRvLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiBmaXhlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYTY4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjUudHh0CkBAIC0wLDAgKzEsNDcgQEAKK0dpdCAxLjguMS41IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4xLjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEdpdmVuIGEgc3RyaW5nIHdpdGggYSBtdWx0aS1ieXRlIGNoYXJhY3RlciB0aGF0IGJlZ2lucyB3aXRoICctJyBvbgorICAgdGhlIGNvbW1hbmQgbGluZSB3aGVyZSBhbiBvcHRpb24gaXMgZXhwZWN0ZWQsIHRoZSBvcHRpb24gcGFyc2VyCisgICB1c2VkIGp1c3Qgb25lIGJ5dGUgb2YgdGhlIHVua25vd24gbGV0dGVyIHdoZW4gcmVwb3J0aW5nIGFuIGVycm9yLgorCisgKiBJbiB2MS44LjEsIHRoZSBhdHRyaWJ1dGUgcGFyc2VyIHdhcyB0aWdodGVuZWQgdG9vIHJlc3RyaWN0aXZlIHRvCisgICBlcnJvciBvdXQgdXBvbiBzZWVpbmcgYW4gZW50cnkgdGhhdCBiZWdpbnMgd2l0aCBhbiAhIChleGNsYW1hdGlvbiksCisgICB3aGljaCBtYXkgY29uZnVzZSB1c2VycyB0byBleHBlY3QgYSAibmVnYXRpdmUgbWF0Y2giLCB3aGljaCBkb2VzCisgICBub3QgZXhpc3QuICBUaGlzIGhhcyBiZWVuIGRlbW90ZWQgdG8gYSB3YXJuaW5nOyBzdWNoIGFuIGVudHJ5IGlzCisgICBzdGlsbCBpZ25vcmVkLgorCisgKiAiZ2l0IGFwcGx5IC0tc3VtbWFyeSIgaGFzIGJlZW4gdGF1Z2h0IHRvIG1ha2Ugc3VyZSB0aGUgc2ltaWxhcml0eQorICAgdmFsdWUgc2hvd24gaW4gaXRzIG91dHB1dCBpcyBzZW5zaWJsZSwgZXZlbiB3aGVuIHRoZSBpbnB1dCBoYWQgYQorICAgYm9ndXMgdmFsdWUuCisKKyAqICJnaXQgY2xlYW4iIHNob3dlZCB3aGF0IGl0IHdhcyBnb2luZyB0byBkbywgYnV0IHNvbWV0aW1lcyBlbmRlZAorICAgdXAgZmluZGluZyB0aGF0IGl0IHdhcyBub3QgYWxsb3dlZCB0byBkbyBzbywgd2hpY2ggcmVzdWx0ZWQgaW4gYQorICAgY29uZnVzaW5nIG91dHB1dCAoZS5nLiBhZnRlciBzYXlpbmcgdGhhdCBpdCB3aWxsIHJlbW92ZSBhbgorICAgdW50cmFja2VkIGRpcmVjdG9yeSwgaXQgZm91bmQgYW4gZW1iZWRkZWQgZ2l0IHJlcG9zaXRvcnkgdGhlcmUKKyAgIHdoaWNoIGl0IGlzIG5vdCBhbGxvd2VkIHRvIHJlbW92ZSkuICBJdCBub3cgcGVyZm9ybXMgdGhlIGFjdGlvbnMKKyAgIGFuZCB0aGVuIHJlcG9ydHMgdGhlIG91dGNvbWUgbW9yZSBmYWl0aGZ1bGx5LgorCisgKiAiZ2l0IGNsb25lIiB1c2VkIHRvIGFsbG93IC0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyPSR0aGVyZQorICAgb3B0aW9ucyBhdCB0aGUgc2FtZSB0aW1lLCB3aGljaCB3YXMgbm9uc2Vuc2ljYWwuCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBtaXNoYW5kbGVkIHRpbWVzdGFtcHMgYXQgRFNUIGJvdW5kYXJ5LgorCisgKiBXZSB1c2VkIHRvIGhhdmUgYW4gYXJiaXRyYXJ5IDMyIGxpbWl0IGZvciBjb21iaW5lZCBkaWZmIGlucHV0LAorICAgcmVzdWx0aW5nIGluIGluY29ycmVjdCBudW1iZXIgb2YgbGVhZGluZyBjb2xvbnMgc2hvd24gd2hlbiBzaG93aW5nCisgICB0aGUgIi0tcmF3IC0tY2MiIG91dHB1dC4KKworICogVGhlIHNtYXJ0IEhUVFAgY2xpZW50cyBmb3Jnb3QgdG8gdmVyaWZ5IHRoZSBjb250ZW50LXR5cGUgdGhhdCBjb21lcworICAgYmFjayBmcm9tIHRoZSBzZXJ2ZXIgc2lkZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWVzdCBpcyBiZWluZworICAgaGFuZGxlZCBwcm9wZXJseS4KKworICogImdpdCBoZWxwIHJlbW90ZS1oZWxwZXJzIiBmYWlsZWQgdG8gZmluZCB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogImdpdHdlYiIgcGFnZXMgc2VydmVkIG92ZXIgSFRUUFMsIHdoZW4gY29uZmlndXJlZCB0byBzaG93IHBpY29uIG9yCisgICBncmF2YXRhciwgcmVmZXJyZWQgdG8gdGhlc2UgZXh0ZXJuYWwgcmVzb3VyY2VzIHRvIGJlIGZldGNoZWQgdmlhCisgICBIVFRQLCByZXN1bHRpbmcgaW4gbWl4ZWQgY29udGVudHMgd2FybmluZyBpbiBicm93c2Vycy4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVjZjJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMS42LnR4dApAQCAtMCwwICsxLDM5IEBACitHaXQgMS44LjEuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMS41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBbiBlYXJsaWVyIGNoYW5nZSB0byB0aGUgYXR0cmlidXRlIHN5c3RlbSBpbnRyb2R1Y2VkIGF0IHYxLjguMS4yIGJ5CisgICBtaXN0YWtlIHN0b3BwZWQgYSBwYXR0ZXJuICJkaXIiICh3aXRob3V0IHRyYWlsaW5nIHNsYXNoKSBmcm9tCisgICBtYXRjaGluZyBhIGRpcmVjdG9yeSAiZGlyIiAoaXQgb25seSB3YW50ZWQgdG8gYWxsb3cgcGF0dGVybiAiZGlyLyIKKyAgIHRvIGFsc28gbWF0Y2gpLgorCisgKiBUaGUgY29kZSB0byBrZWVwIHRyYWNrIG9mIHdoYXQgZGlyZWN0b3J5IG5hbWVzIGFyZSBrbm93biB0byBHaXQgb24KKyAgIHBsYXRmb3JtcyB3aXRoIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMgY2FuIGdldCBjb25mdXNlZCB1cG9uIGEKKyAgIGhhc2ggY29sbGlzaW9uIGJldHdlZW4gdGhlc2UgcGF0aG5hbWVzIGFuZCBsb29wZWQgZm9yZXZlci4KKworICogV2hlbiB0aGUgIi0tcHJlZml4IiBvcHRpb24gaXMgdXNlZCB0byAiY2hlY2tvdXQtaW5kZXgiLCB0aGUgY29kZQorICAgZGlkIG5vdCBwaWNrIHRoZSBjb3JyZWN0IG91dHB1dCBmaWx0ZXIgYmFzZWQgb24gdGhlIGF0dHJpYnV0ZQorICAgc2V0dGluZy4KKworICogQW5ub3RhdGVkIHRhZ3Mgb3V0c2lkZSByZWZzL3RhZ3MvIGhpZXJhcmNoeSB3ZXJlIG5vdCBhZHZlcnRpc2VkCisgICBjb3JyZWN0bHkgdG8gdGhlIGxzLXJlbW90ZSBhbmQgZmV0Y2ggd2l0aCByZWNlbnQgdmVyc2lvbiBvZiBHaXQuCisKKyAqIFRoZSBsb2dpYyB1c2VkIGJ5ICJnaXQgZGlmZiAtTSAtLXN0YXQiIHRvIHNob3J0ZW4gdGhlIG5hbWVzIG9mCisgICBmaWxlcyBiZWZvcmUgYW5kIGFmdGVyIGEgcmVuYW1lIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgd2hlbiB0aGUKKyAgIGNvbW1vbiBwcmVmaXggYW5kIHN1ZmZpeCBiZXR3ZWVuIHRoZSB0d28gZmlsZW5hbWVzIG92ZXJsYXBwZWQuCisKKyAqICJnaXQgdXBkYXRlLWluZGV4IC1oIiBkaWQgbm90IGRvIHRoZSB1c3VhbCAiLWgoZWxwKSIgdGhpbmcuCisKKyAqIHBlcmwvR2l0LnBtOjpjYXRfYmxvYiBzbHVycGVkIGV2ZXJ5dGhpbmcgaW4gY29yZSBvbmx5IHRvIHdyaXRlIGl0CisgICBvdXQgdG8gYSBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIHdhcyBub3QgYSB2ZXJ5IHNtYXJ0IHRoaW5nIHRvIGRvLgorCisgKiBUaGUgU1NMIHBlZXIgdmVyaWZpY2F0aW9uIGRvbmUgYnkgImdpdCBpbWFwLXNlbmQiIGRpZCBub3QgYXNrIGZvcgorICAgU2VydmVyIE5hbWUgSW5kaWNhdGlvbiAoUkZDIDQzNjYpLCBmYWlsaW5nIHRvIGNvbm5lY3QgU1NML1RMUworICAgc2l0ZXMgdGhhdCBzZXJ2ZSBtdWx0aXBsZSBob3N0bmFtZXMgb24gYSBzaW5nbGUgSVAuCisKKyAqICJnaXQgYnVuZGxlIHZlcmlmeSIgZGlkIG5vdCBzYXkgInJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5IiBmb3IgYQorICAgYnVuZGxlIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgcHJlcmVxdWlzaXRlcy4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gZml4ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Zjk1NTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4xLnR4dApAQCAtMCwwICsxLDI0MSBAQAorR2l0IHYxLjguMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlIChub3QgKnRoaXMqIG9uZSksIHdlIHdpbGwgY2hhbmdlIHRoZQorYmVoYXZpb3Igb2YgdGhlICJnaXQgcHVzaCIgY29tbWFuZC4KKworV2hlbiAiZ2l0IHB1c2ggWyR0aGVyZV0iIGRvZXMgbm90IHNheSB3aGF0IHRvIHB1c2gsIHdlIGhhdmUgdXNlZCB0aGUKK3RyYWRpdGlvbmFsICJtYXRjaGluZyIgc2VtYW50aWNzIHNvIGZhciAoYWxsIHlvdXIgYnJhbmNoZXMgd2VyZSBzZW50Cit0byB0aGUgcmVtb3RlIGFzIGxvbmcgYXMgdGhlcmUgYWxyZWFkeSBhcmUgYnJhbmNoZXMgb2YgdGhlIHNhbWUgbmFtZQorb3ZlciB0aGVyZSkuICBXZSB3aWxsIHVzZSB0aGUgInNpbXBsZSIgc2VtYW50aWNzIHRoYXQgcHVzaGVzIHRoZQorY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUsIG9ubHkgd2hlbiB0aGUgY3VycmVudAorYnJhbmNoIGlzIHNldCB0byBpbnRlZ3JhdGUgd2l0aCB0aGF0IHJlbW90ZSBicmFuY2guICBUaGVyZSBpcyBhIHVzZXIKK3ByZWZlcmVuY2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAicHVzaC5kZWZhdWx0IiB0byBjaGFuZ2UgdGhpcywgYW5kCisiZ2l0IHB1c2giIHdpbGwgd2FybiBhYm91dCB0aGUgdXBjb21pbmcgY2hhbmdlIHVudGlsIHlvdSBzZXQgdGhpcwordmFyaWFibGUgaW4gdGhpcyByZWxlYXNlLgorCisiZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbSIgaXMgZGVwcmVjYXRlZCBhbmQgbWF5IGJlIHJlbW92ZWQgaW4gYQorcmVsYXRpdmVseSBkaXN0YW50IGZ1dHVyZS4gICJnaXQgYnJhbmNoIFstdXwtLXNldC11cHN0cmVhbS10b10iIGhhcworYmVlbiBpbnRyb2R1Y2VkIHdpdGggYSBzYW5lciBvcmRlciBvZiBhcmd1bWVudHMgdG8gcmVwbGFjZSBpdC4KKworCitVcGRhdGVzIHNpbmNlIHYxLjguMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIENvbW1hbmQtbGluZSBjb21wbGV0aW9uIHNjcmlwdHMgZm9yIHRjc2ggYW5kIHpzaCBoYXZlIGJlZW4gYWRkZWQuCisKKyAqICJnaXQtcHJvbXB0IiBzY3JpcHRsZXQgKGluIGNvbnRyaWIvY29tcGxldGlvbikgY2FuIGJlIHRvbGQgdG8gcGFpbnQKKyAgIHBpZWNlcyBvZiB0aGUgaGludHMgaW4gdGhlIHByb21wdCBzdHJpbmcgaW4gY29sb3JzLgorCisgKiBTb21lIGRvY3VtZW50YXRpb24gcGFnZXMgdGhhdCB1c2VkIHRvIHNoaXAgb25seSBpbiB0aGUgcGxhaW4gdGV4dAorICAgZm9ybWF0IGFyZSBub3cgZm9ybWF0dGVkIGluIEhUTUwgYXMgd2VsbC4KKworICogV2UgdXNlZCB0byBoYXZlIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gYW5jaWVudCAibGVzcyIgdGhhdAorICAgY2F1c2VzIGl0IHRvIGV4aXQgd2l0aG91dCBhbnkgb3V0cHV0IHdoZW4gdGhlIHRlcm1pbmFsIGlzIHJlc2l6ZWQuCisgICBUaGUgYnVnIGhhcyBiZWVuIGZpeGVkIGluICJsZXNzIiB2ZXJzaW9uIDQwNiAoSnVuZSAyMDA3KSwgYW5kIHRoZQorICAgd29ya2Fyb3VuZCBoYXMgYmVlbiByZW1vdmVkIGluIHRoaXMgcmVsZWFzZS4KKworICogV2hlbiAiZ2l0IGNoZWNrb3V0IiBjaGVja3Mgb3V0IGEgYnJhbmNoLCBpdCB0ZWxscyB0aGUgdXNlciBob3cgZmFyCisgICBiZWhpbmQgKG9yIGFoZWFkKSB0aGUgbmV3IGJyYW5jaCBpcyByZWxhdGl2ZSB0byB0aGUgcmVtb3RlIHRyYWNraW5nCisgICBicmFuY2ggaXQgYnVpbGRzIHVwb24uICBUaGUgbWVzc2FnZSBub3cgYWxzbyBhZHZpc2VzIGhvdyB0byBzeW5jCisgICB0aGVtIHVwIGJ5IHB1c2hpbmcgb3IgcHVsbGluZy4gIFRoaXMgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlCisgICBhZHZpY2Uuc3RhdHVzSGludHMgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICogImdpdCBjb25maWcgLS1nZXQiIHVzZWQgdG8gZGlhZ25vc2UgcHJlc2VuY2Ugb2YgbXVsdGlwbGUKKyAgIGRlZmluaXRpb25zIG9mIHRoZSBzYW1lIHZhcmlhYmxlIGluIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gZmlsZSBhcworICAgYW4gZXJyb3IsIGJ1dCBpdCBub3cgYXBwbGllcyB0aGUgImxhc3Qgb25lIHdpbnMiIHJ1bGUgdXNlZCBieSB0aGUKKyAgIGludGVybmFsIGNvbmZpZ3VyYXRpb24gbG9naWMuICBTdHJpY3RseSBzcGVha2luZywgdGhpcyBtYXkgYmUgYW4KKyAgIEFQSSByZWdyZXNzaW9uIGJ1dCBpdCBpcyBleHBlY3RlZCB0aGF0IG5vYm9keSB3aWxsIG5vdGljZSBpdCBpbgorICAgcHJhY3RpY2UuCisKKyAqIEEgbmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgImRpZmYuY29udGV4dCIgY2FuIGJlIHVzZWQgdG8KKyAgIGdpdmUgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgaW4gdGhlIHBhdGNoIG91dHB1dCwgdG8KKyAgIG92ZXJyaWRlIHRoZSBoYXJkY29kZWQgZGVmYXVsdCBvZiAzIGxpbmVzLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCB0aGUgIi0tbm90ZXM9PHJlZj4iIG9wdGlvbiB0byBnaXZlCisgICBub3RlcyBmb3IgdGhlIGNvbW1pdCBhZnRlciB0aGUgdGhyZWUtZGFzaCBsaW5lcyBpbiBpdHMgb3V0cHV0LgorCisgKiAiZ2l0IGxvZyAtcCAtUzxzdHJpbmc+IiBub3cgbG9va3MgZm9yIHRoZSA8c3RyaW5nPiBhZnRlciBhcHBseWluZworICAgdGhlIHRleHRjb252IGZpbHRlciAoaWYgZGVmaW5lZCk7IGVhcmxpZXIgaXQgaW5zcGVjdGVkIHRoZSBjb250ZW50cworICAgb2YgdGhlIGJsb2JzIHdpdGhvdXQgZmlsdGVyaW5nLgorCisgKiAiZ2l0IGxvZyAtLWdyZXA9PHBjcmU+IiBsZWFybmVkIHRvIGhvbm9yIHRoZSAiZ3JlcC5wYXR0ZXJudHlwZSIKKyAgIGNvbmZpZ3VyYXRpb24gc2V0IHRvICJwZXJsIi4KKworICogImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+IiBub3cgaW50ZXJwcmV0cyA8b2JqZWN0PiBhcyBhbiBleHRlbmRlZAorICAgU0hBLTEgKGUuZy4gSEVBRH40IGlzIGFsbG93ZWQpLCBpbnN0ZWFkIG9mIG9ubHkgYWNjZXB0aW5nIGZ1bGwgaGV4CisgICBvYmplY3QgbmFtZS4KKworICogImdpdCBybSAkc3VibW9kdWxlIiB1c2VkIHRvIHB1bnQgb24gcmVtb3ZpbmcgYSBzdWJtb2R1bGUgd29ya2luZworICAgdHJlZSB0byBhdm9pZCBsb3NpbmcgdGhlIHJlcG9zaXRvcnkgZW1iZWRkZWQgaW4gaXQuICBCZWNhdXNlCisgICByZWNlbnQgZ2l0IHVzZXMgYSBtZWNoYW5pc20gdG8gc2VwYXJhdGUgdGhlIHN1Ym1vZHVsZSByZXBvc2l0b3J5CisgICBmcm9tIHRoZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlLCAiZ2l0IHJtIiBsZWFybmVkIHRvIGRldGVjdCB0aGlzCisgICBjYXNlIGFuZCByZW1vdmVzIHRoZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlIHdoZW4gaXQgaXMgc2FmZSB0byBkbyBzby4KKworICogImdpdCBzZW5kLWVtYWlsIiB1c2VkIHRvIHByb21wdCBmb3IgdGhlIHNlbmRlciBhZGRyZXNzLCBldmVuIHdoZW4KKyAgIHRoZSBjb21taXR0ZXIgaWRlbnRpdHkgaXMgd2VsbCBzcGVjaWZpZWQgKGUuZy4gdmlhIHVzZXIubmFtZSBhbmQKKyAgIHVzZXIuZW1haWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMpLiAgVGhlIGNvbW1hbmQgbm8gbG9uZ2VyIGdpdmVzCisgICB0aGlzIHByb21wdCB3aGVuIG5vdCBuZWNlc3NhcnkuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgZGlkIG5vdCBhbGxvdyBub24tYWRkcmVzcyBnYXJiYWdlIHN0cmluZ3MgdG8KKyAgIGFwcGVhciBhZnRlciBhZGRyZXNzZXMgb24gQ2M6IGxpbmVzIGluIHRoZSBwYXRjaCBmaWxlcyAoYW5kIHdoZW4KKyAgIHRvbGQgdG8gcGljayB0aGVtIHVwIHRvIGZpbmQgbW9yZSByZWNpcGllbnRzKSwgZS5nLgorCisgICAgIENjOiBTdGFibGUgS2VybmVsIDxzdGFibGVAay5vcmc+ICMgZm9yIHYzLjIgYW5kIHVwCisKKyAgIFRoZSBjb21tYW5kIG5vdyBzdHJpcHMgIiAjIGZvciB2My4yIGFuZCB1cCIgcGFydCBiZWZvcmUgYWRkaW5nIHRoZQorICAgcmVtYWluZGVyIG9mIHRoaXMgbGluZSB0byB0aGUgbGlzdCBvZiByZWNpcGllbnRzLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBhZGQiIGxlYXJuZWQgdG8gYWRkIGEgbmV3IHN1Ym1vZHVsZSBhdCB0aGUgc2FtZQorICAgcGF0aCBhcyB0aGUgcGF0aCB3aGVyZSBhbiB1bnJlbGF0ZWQgc3VibW9kdWxlIHdhcyBib3VuZCB0byBpbiBhbgorICAgZXhpc3RpbmcgcmV2aXNpb24gdmlhIHRoZSAiLS1uYW1lIiBvcHRpb24uCisKKyAqICJnaXQgc3VibW9kdWxlIHN5bmMiIGxlYXJuZWQgdGhlICItLXJlY3Vyc2l2ZSIgb3B0aW9uLgorCisgKiAiZGlmZi5zdWJtb2R1bGUiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gZ2l2ZSBjdXN0b20KKyAgIGRlZmF1bHQgdmFsdWUgdG8gdGhlICJnaXQgZGlmZiAtLXN1Ym1vZHVsZSIgb3B0aW9uLgorCisgKiAiZ2l0IHN5bWJvbGljLXJlZiIgbGVhcm5lZCB0aGUgIi1kICRzeW1yZWYiIG9wdGlvbiB0byBkZWxldGUgdGhlCisgICBuYW1lZCBzeW1ib2xpYyByZWYsIHdoaWNoIGlzIG1vcmUgaW50dWl0aXZlIHdheSB0byBzcGVsbCBpdCB0aGFuCisgICAidXBkYXRlLXJlZiAtZCAtLW5vLWRlcmVmICRzeW1yZWYiLgorCisKK0ZvcmVpZ24gSW50ZXJmYWNlCisKKyAqICJnaXQgY3ZzaW1wb3J0IiBjYW4gYmUgdG9sZCB0byByZWNvcmQgdGltZXpvbmVzIChvdGhlciB0aGFuIEdNVCkKKyAgIHBlci1hdXRob3IgdmlhIGl0cyBhdXRob3IgaW5mbyBmaWxlLgorCisgKiBUaGUgcmVtb3RlIGhlbHBlciBpbnRlcmZhY2UgdG8gaW50ZXJhY3Qgd2l0aCBzdWJ2ZXJzaW9uCisgICByZXBvc2l0b3JpZXMgKG9uZSBvZiB0aGUgR1NvQyAyMDEyIHByb2plY3RzKSBoYXMgYmVlbiBtZXJnZWQuCisKKyAqIEEgbmV3IHJlbW90ZS1oZWxwZXIgaW50ZXJmYWNlIGZvciBNZXJjdXJpYWwgaGFzIGJlZW4gYWRkZWQgdG8KKyAgIGNvbnRyaWIvcmVtb3RlLWhlbHBlcnMuCisKKyAqIFRoZSBkb2N1bWVudGF0aW9uIGZvciBnaXQoMSkgd2FzIHBvaW50aW5nIGF0IGEgcGFnZSBhdCBhbiBleHRlcm5hbAorICAgc2l0ZSBmb3IgdGhlIGxpc3Qgb2YgYXV0aG9ycyB0aGF0IG5vIGxvbmdlciBleGlzdGVkLiAgVGhlIGxpbmsgaGFzCisgICBiZWVuIHVwZGF0ZWQgdG8gcG9pbnQgYXQgYW4gYWx0ZXJuYXRpdmUgc2l0ZS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIGV0Yy4KKworICogQ29tcGlsYXRpb24gb24gQ3lnd2luIHdpdGggbmV3ZXIgaGVhZGVyIGZpbGVzIGFyZSBzdXBwb3J0ZWQgbm93LgorCisgKiBBIGNvdXBsZSBvZiBsb3ctbGV2ZWwgaW1wbGVtZW50YXRpb24gdXBkYXRlcyBvbiBNaW5HVy4KKworICogVGhlIGxvZ2ljIHRvIGdlbmVyYXRlIHRoZSBpbml0aWFsIGFkdmVydGlzZW1lbnQgZnJvbSAidXBsb2FkLXBhY2siCisgICAoaS5lLiB3aGF0IGlzIGludm9rZWQgYnkgImdpdCBmZXRjaCIgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlCisgICBjb25uZWN0aW9uKSB0byBsaXN0IHdoYXQgcmVmcyBhcmUgYXZhaWxhYmxlIGluIHRoZSByZXBvc2l0b3J5IGhhcworICAgYmVlbiBvcHRpbWl6ZWQuCisKKyAqIFRoZSBsb2dpYyB0byBmaW5kIHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgbWF0Y2ggYSBnaXZlbiBwYXRoIGhhcworICAgYmVlbiBvcHRpbWl6ZWQuCisKKyAqIFVzZSBwcmVsb2FkaW5kZXggaW4gImdpdCBkaWZmLWluZGV4IiBhbmQgImdpdCB1cGRhdGUtaW5kZXgiLCB3aGljaAorICAgaGFzIGEgbmljZSBzcGVlZHVwIG9uIHN5c3RlbXMgd2l0aCBzbG93IHN0YXQgY2FsbHMgKGFuZCBldmVuIG9uCisgICBMaW51eCkuCisKKworQWxzbyBjb250YWlucyBtaW5vciBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYxLjguMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjEuOC4wIGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSByZWxlYXNlIG5vdGVzIHRvIHRoZW0gZm9yCitkZXRhaWxzKS4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gcGFyc2VyIGhhZCBhbiB1bm5lY2Vzc2FyeSBoYXJkY29kZWQgbGltaXQgb24KKyAgIHZhcmlhYmxlIG5hbWVzIHRoYXQgd2FzIG5vdCBjaGVja2VkIGNvbnNpc3RlbnRseS4KKworICogVGhlICJzYXkiIGZ1bmN0aW9uIGluIHRoZSB0ZXN0IHNjYWZmb2xkaW5nIGluY29ycmVjdGx5IGFsbG93ZWQKKyAgICJlY2hvIiB0byBpbnRlcnByZXQgIlxhIiBhcyBpZiBpdCB3ZXJlIGEgQy1zdHJpbmcgYXNraW5nIGZvciBhCisgICBCRUwgb3V0cHV0LgorCisgKiAiZ2l0IG1lcmdldG9vbCIgZmVlZHMgL2Rldi9udWxsIGFzIGEgY29tbW9uIGFuY2VzdG9yIHdoZW4gZGVhbGluZworICAgd2l0aCBhbiBhZGQvYWRkIGNvbmZsaWN0LCBidXQgcDRtZXJnZSBiYWNrZW5kIGNhbm5vdCBoYW5kbGUKKyAgIGl0LiBXb3JrIGl0IGFyb3VuZCBieSBwYXNzaW5nIGEgdGVtcG9yYXJ5IGVtcHR5IGZpbGUuCisKKyAqICJnaXQgbG9nIC1GIC1FIC0tZ3JlcD0nPGVyZT4nIiBmYWlsZWQgdG8gdXNlIHRoZSBnaXZlbiA8ZXJlPgorICAgcGF0dGVybiBhcyBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24sIGFuZCBpbnN0ZWFkIGxvb2tlZCBmb3IgdGhlCisgICBzdHJpbmcgbGl0ZXJhbGx5LgorCisgKiAiZ2l0IGdyZXAgLWUgcGF0dGVybiA8dHJlZT4iIGFza2VkIHRoZSBhdHRyaWJ1dGUgc3lzdGVtIHRvIHJlYWQKKyAgICI8dHJlZT46LmdpdGF0dHJpYnV0ZXMiIGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZSwgd2hpY2ggd2FzCisgICBub25zZW5zZS4KKworICogQSBzeW1ib2xpYyByZWYgcmVmcy9oZWFkcy9TWU0gd2FzIG5vdCBjb3JyZWN0bHkgcmVtb3ZlZCB3aXRoICJnaXQKKyAgIGJyYW5jaCAtZCBTWU0iOyB0aGUgY29tbWFuZCByZW1vdmVkIHRoZSByZWYgcG9pbnRlZCBieSBTWU0KKyAgIGluc3RlYWQuCisKKyAqIFVwZGF0ZSAicmVtb3RlIHRyYWNraW5nIGJyYW5jaCIgaW4gdGhlIGRvY3VtZW50YXRpb24gdG8KKyAgICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoIi4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBydW4gd2hpbGUgdGhlIEhFQUQgaXMgZGV0YWNoZWQgdHJpZWQgdG8gZmluZAorICAgdGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB0aGUgZGV0YWNoZWQgSEVBRCAod2hpY2ggYnkgZGVmaW5pdGlvbgorICAgZG9lcyBub3QgZXhpc3QpIGFuZCBlbWl0dGVkIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2VzLgorCisgKiBUaGUgcmVmcy9yZXBsYWNlIGhpZXJhcmNoeSB3YXMgbm90IG1lbnRpb25lZCBpbiB0aGUKKyAgIHJlcG9zaXRvcnktbGF5b3V0IGRvY3MuCisKKyAqIFZhcmlvdXMgcmZjMjA0NyBxdW90aW5nIGlzc3VlcyBhcm91bmQgYSBub24tQVNDSUkgbmFtZSBvbiB0aGUKKyAgIEZyb206IGxpbmUgaW4gdGhlIG91dHB1dCBmcm9tIGZvcm1hdC1wYXRjaCBoYXZlIGJlZW4gY29ycmVjdGVkLgorCisgKiBTb21ldGltZXMgY3VybF9tdWx0aV90aW1lb3V0KCkgZnVuY3Rpb24gc3VnZ2VzdGVkIGEgd3JvbmcgdGltZW91dAorICAgdmFsdWUgd2hlbiB0aGVyZSBpcyBubyBmaWxlIGRlc2NyaXB0b3IgdG8gd2FpdCBvbiBhbmQgdGhlIGh0dHAKKyAgIHRyYW5zcG9ydCBlbmRlZCB1cCBzbGVlcGluZyBmb3IgbWludXRlcyBpbiBzZWxlY3QoMikgc3lzdGVtIGNhbGwuCisgICBBIHdvcmthcm91bmQgaGFzIGJlZW4gYWRkZWQgZm9yIHRoaXMuCisKKyAqIEZvciBhIGZldGNoIHJlZnNwZWMgKG9yIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgd2lsZGNhcmQgb24gb25lKSwKKyAgIHdlIGFsd2F5cyB3YW50IHRoZSBSSFMgdG8gbWFwIHRvIHNvbWV0aGluZyBpbnNpZGUgInJlZnMvIgorICAgaGllcmFyY2h5LCBidXQgdGhlIGxvZ2ljIHRvIGNoZWNrIGl0IHdhcyBub3QgZXhhY3RseSByaWdodC4KKyAgIChtZXJnZSA1YzA4YzFmIGpjL21haW50LWZldGNoLXRpZ2h0ZW4tcmVmbmFtZS1jaGVjayBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZiAtRzxwYXR0ZXJuPiIgZGlkIG5vdCBob25vciB0ZXh0Y29udiBmaWx0ZXIgd2hlbiBsb29raW5nCisgICBmb3IgY2hhbmdlcy4KKworICogU29tZSBIVFRQIHNlcnZlcnMgYXNrIGZvciBhdXRoIG9ubHkgZHVyaW5nIHRoZSBhY3R1YWwgcGFja2luZyBwaGFzZQorICAgKG5vdCBpbiBscy1yZW1vdGUgcGhhc2UpOyB0aGlzIGlzIG5vdCByZWFsbHkgYSByZWNvbW1lbmRlZAorICAgY29uZmlndXJhdGlvbiwgYnV0IHRoZSBjbGllbnRzIHVzZWQgdG8gZmFpbCB0byBhdXRoZW50aWNhdGUgd2l0aAorICAgc3VjaCBzZXJ2ZXJzLgorICAgKG1lcmdlIDJlNzM2ZmQgamsvbWFpbnQtaHR0cC1oYWxmLWF1dGgtZmV0Y2ggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHA0IiB1c2VkIHRvIHRyeSBleHBhbmRpbmcgbWFsZm9ybWVkICIka2V5d29yZCQiIHRoYXQgc3BhbnMKKyAgIGFjcm9zcyBtdWx0aXBsZSBsaW5lcy4KKworICogU3ludGF4IGhpZ2hsaWdodGluZyBpbiAiZ2l0d2ViIiB3YXMgbm90IHF1aXRlIHdvcmtpbmcuCisKKyAqIFJTUyBmZWVkIGZyb20gImdpdHdlYiIgaGFkIGEgeHNzIGhvbGUgaW4gaXRzIHRpdGxlIG91dHB1dC4KKworICogImdpdCBjb25maWcgLS1wYXRoICRrZXkiIHNlZ2ZhdWx0ZWQgb24gIltzZWN0aW9uXSBrZXkiIChhIGJvb2xlYW4KKyAgICJ0cnVlIiBzcGVsbGVkIHdpdGhvdXQgIj0iLCBub3QgIltzZWN0aW9uXSBrZXkgPSB0cnVlIikuCisKKyAqICJnaXQgY2hlY2tvdXQgLWIgZm9vIiB3aGlsZSBvbiBhbiB1bmJvcm4gYnJhbmNoIGRpZCBub3Qgc2F5CisgICAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICdmb28nIiBsaWtlIG90aGVyIGNhc2VzLgorCisgKiBWYXJpb3VzIGNvZGVwYXRocyBoYXZlIHdvcmthcm91bmQgZm9yIGEgY29tbW9uIG1pc2NvbmZpZ3VyYXRpb24gdG8KKyAgIHNwZWxsICJVVEYtOCIgYXMgInV0ZjgiLCBidXQgaXQgd2FzIG5vdCB1c2VkIHVuaWZvcm1seS4gIE1vc3QKKyAgIG5vdGFibHksIG1haWxpbmZvICh3aGljaCBpcyB1c2VkIGJ5ICJnaXQgYW0iKSBsYWNrZWQgdGhpcyBzdXBwb3J0LgorCisgKiBXZSBmYWlsZWQgdG8gbWVudGlvbiBhIGZpbGUgd2l0aG91dCBhbnkgY29udGVudCBjaGFuZ2UgYnV0IHdob3NlCisgICBwZXJtaXNzaW9uIGJpdCB3YXMgbW9kaWZpZWQsIG9yICh3b3JzZSB5ZXQpIGEgbmV3IGZpbGUgd2l0aG91dCBhbnkKKyAgIGNvbnRlbnQgaW4gdGhlICJnaXQgZGlmZiAtLXN0YXQiIG91dHB1dC4KKworICogV2hlbiAiLS1zdGF0LWNvdW50IiBoaWRlcyBhIGRpZmZzdGF0IGZvciBiaW5hcnkgY29udGVudHMsIHRoZSB0b3RhbAorICAgbnVtYmVyIG9mIGFkZGVkIGFuZCByZW1vdmVkIGxpbmVzIGF0IHRoZSBib3R0b20gd2FzIGNvbXB1dGVkCisgICBpbmNvcnJlY3RseS4KKworICogV2hlbiAiLS1zdGF0LWNvdW50IiBoaWRlcyBhIGRpZmZzdGF0IGZvciB1bm1lcmdlZCBwYXRocywgdGhlIHRvdGFsCisgICBudW1iZXIgb2YgYWZmZWN0ZWQgZmlsZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgImRpZmYgLS1zdGF0IiBvdXRwdXQKKyAgIHdhcyBjb21wdXRlZCBpbmNvcnJlY3RseS4KKworICogImRpZmYgLS1zaG9ydHN0YXQiIG1pc2NvdW50ZWQgdGhlIHRvdGFsIG51bWJlciBvZiBhZmZlY3RlZCBmaWxlcworICAgd2hlbiB0aGVyZSB3ZXJlIHVubWVyZ2VkIHBhdGhzLgorCisgKiAidXBkYXRlLXJlZiAtZCAtLWRlcmVmIFNZTSIgdG8gZGVsZXRlIGEgcmVmIHRocm91Z2ggYSBzeW1ib2xpYyByZWYKKyAgIHRoYXQgcG9pbnRzIHRvIGl0IGRpZCBub3QgcmVtb3ZlIGl0IGNvcnJlY3RseS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2OWE2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjEudHh0CkBAIC0wLDAgKzEsMTE1IEBACitHaXQgdjEuOC4yLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQW4gZWFybGllciBjaGFuZ2UgdG8gdGhlIGF0dHJpYnV0ZSBzeXN0ZW0gaW50cm9kdWNlZCBhdCB2MS44LjEuMiBieQorICAgbWlzdGFrZSBzdG9wcGVkIGEgcGF0dGVybiAiZGlyIiAod2l0aG91dCB0cmFpbGluZyBzbGFzaCkgZnJvbQorICAgbWF0Y2hpbmcgYSBkaXJlY3RvcnkgImRpciIgKGl0IG9ubHkgd2FudGVkIHRvIGFsbG93IHBhdHRlcm4gImRpci8iCisgICB0byBhbHNvIG1hdGNoKS4KKworICogVmVyaWZpY2F0aW9uIG9mIHNpZ25lZCB0YWdzIHdlcmUgbm90IGRvbmUgY29ycmVjdGx5IHdoZW4gbm90IGluIEMKKyAgIG9yIGVuL1VTIGxvY2FsZS4KKworICogJ2dpdCBjb21taXQgLW0gIiRtc2ciJyB1c2VkIHRvIGFkZCBhbiBleHRyYSBuZXdsaW5lIGV2ZW4gd2hlbgorICAgJG1zZyBhbHJlYWR5IGVuZGVkIHdpdGggb25lLgorCisgKiBUaGUgIi0tbWF0Y2g9PHBhdHRlcm4+IiBvcHRpb24gb2YgImdpdCBkZXNjcmliZSIsIHdoZW4gdXNlZCB3aXRoCisgICAiLS1hbGwiIHRvIGFsbG93IHJlZnMgdGhhdCBhcmUgbm90IGFubm90YXRlZCB0YWdzIHRvIGJlIHVzZWQgYXMgYQorICAgYmFzZSBvZiBkZXNjcmlwdGlvbiwgZGlkIG5vdCByZXN0cmljdCB0aGUgb3V0cHV0IGZyb20gdGhlIGNvbW1hbmQKKyAgIHRvIHRob3NlIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhdHRlcm4uCisKKyAqIEFuIGFsaWFzZWQgY29tbWFuZCBzcGF3bmVkIGZyb20gYSBiYXJlIHJlcG9zaXRvcnkgdGhhdCBkb2VzIG5vdCBzYXkKKyAgIGl0IGlzIGJhcmUgd2l0aCAiY29yZS5iYXJlID0geWVzIiBpcyB0cmVhdGVkIGFzIG5vbi1iYXJlIGJ5IG1pc3Rha2UuCisKKyAqIFdoZW4gImZvcm1hdC1wYXRjaCIgcXVvdGVkIGEgbm9uLWFzY2lpIHN0cmluZ3Mgb24gdGhlIGhlYWRlciBmaWxlcywKKyAgIGl0IGluY29ycmVjdGx5IGFwcGxpZWQgcmZjMjA0NyBhbmQgY2hvcHBlZCBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4KKyAgIHRoZSBtaWRkbGUgb2YgaXQuCisKKyAqICJnaXQgYXJjaGl2ZSIgcmVwb3J0cyBhIGZhaWx1cmUgd2hlbiBhc2tlZCB0byBjcmVhdGUgYW4gYXJjaGl2ZSBvdXQKKyAgIG9mIGFuIGVtcHR5IHRyZWUuICBJdCB3b3VsZCBiZSBtb3JlIGludHVpdGl2ZSB0byBnaXZlIGFuIGVtcHR5CisgICBhcmNoaXZlIGJhY2sgaW4gc3VjaCBhIGNhc2UuCisKKyAqICJnaXQgdGFnIC1mIDx0YWc+IiBhbHdheXMgc2FpZCAiVXBkYXRlZCB0YWcgJzx0YWc+JyIgZXZlbiB3aGVuCisgICBjcmVhdGluZyBhIG5ldyB0YWcgKGkuZS4gbm90IG92ZXJ3cml0aW5nIG5vciB1cGRhdGluZykuCisKKyAqICJnaXQgY21kIC0tICc6KHRvcCciIHdhcyBub3QgZGlhZ25vc2VkIGFzIGFuIGludmFsaWQgc3ludGF4LCBhbmQKKyAgIGluc3RlYWQgdGhlIHBhcnNlciBrZXB0IHJlYWRpbmcgYmV5b25kIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KKworICogQW5ub3RhdGVkIHRhZ3Mgb3V0c2lkZSByZWZzL3RhZ3MvIGhpZXJhcmNoeSB3ZXJlIG5vdCBhZHZlcnRpc2VkCisgICBjb3JyZWN0bHkgdG8gdGhlIGxzLXJlbW90ZSBhbmQgZmV0Y2ggd2l0aCByZWNlbnQgdmVyc2lvbiBvZiBHaXQuCisKKyAqIFRoZSBjb2RlIHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCBkaXJlY3RvcnkgbmFtZXMgYXJlIGtub3duIHRvIEdpdCBvbgorICAgcGxhdGZvcm1zIHdpdGggY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcyBjYW4gZ2V0IGNvbmZ1c2VkIHVwb24gYQorICAgaGFzaCBjb2xsaXNpb24gYmV0d2VlbiB0aGVzZSBwYXRobmFtZXMgYW5kIGxvb3BlZCBmb3JldmVyLgorCisgKiBUaGUgbG9naWMgdXNlZCBieSAiZ2l0IGRpZmYgLU0gLS1zdGF0IiB0byBzaG9ydGVuIHRoZSBuYW1lcyBvZgorICAgZmlsZXMgYmVmb3JlIGFuZCBhZnRlciBhIHJlbmFtZSBkaWQgbm90IHdvcmsgY29ycmVjdGx5IHdoZW4gdGhlCisgICBjb21tb24gcHJlZml4IGFuZCBzdWZmaXggYmV0d2VlbiB0aGUgdHdvIGZpbGVuYW1lcyBvdmVybGFwcGVkLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUiLCB3aGVuIHJlY3Vyc2VkIGludG8gc3ViLXN1Ym1vZHVsZXMsIGRpZCBub3QKKyAgIGFjY3VtdWxhdGUgdGhlIHByZWZpeCBwYXRocy4KKworICogImdpdCBhbSAkbWFpbGRpci8iIGFwcGxpZWQgbWVzc2FnZXMgaW4gYW4gdW5leHBlY3RlZCBvcmRlcjsgc29ydAorICAgZmlsZW5hbWVzIHJlYWQgZnJvbSB0aGUgbWFpbGRpci8gaW4gYSB3YXkgdGhhdCBpcyBtb3JlIGxpa2VseSB0bworICAgc29ydCBtZXNzYWdlcyBpbiB0aGUgb3JkZXIgdGhlIHdyaXRpbmcgTVVBIG1lYW50IHRvLCBieSBzb3J0aW5nCisgICBudW1lcmljIHNlZ21lbnQgaW4gbnVtZXJpYyBvcmRlciBhbmQgbm9uLW51bWVyaWMgc2VnbWVudCBpbgorICAgYWxwaGFiZXRpY2FsIG9yZGVyLgorCisgKiBXaGVuIGV4cG9ydC1zdWJzdCBpcyB1c2VkLCAiemlwIiBvdXRwdXQgcmVjb3JkZWQgaW5jb3JyZWN0CisgICBzaXplIG9mIHRoZSBmaWxlLgorCisgKiBTb21lIHBsYXRmb3JtcyBhbmQgdXNlcnMgc3BlbGwgVVRGLTggZGlmZmVyZW50bHk7IHJldHJ5IHdpdGggdGhlCisgICBtb3N0IG9mZmljaWFsICJVVEYtOCIgd2hlbiB0aGUgc3lzdGVtIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlCisgICB1c2VyLXN1cHBsaWVkIGVuY29kaW5nIG5hbWUgdGhhdCBhcmUgdGhlIGNvbW1vbiBhbHRlcm5hdGl2ZQorICAgc3BlbGxpbmdzIG9mIFVURi04LgorCisgKiAiZ2l0IGJyYW5jaCIgZGlkIG5vdCBib3RoZXIgdG8gY2hlY2sgbm9uc2Vuc2UgY29tbWFuZCBsaW5lCisgICBwYXJhbWV0ZXJzIGFuZCBpc3N1ZSBlcnJvcnMgaW4gbWFueSBjYXNlcy4KKworICogImdpdCB1cGRhdGUtaW5kZXggLWgiIGRpZCBub3QgZG8gdGhlIHVzdWFsICItaChlbHApIiB0aGluZy4KKworICogcGVybC9HaXQucG06OmNhdF9ibG9iIHNsdXJwZWQgZXZlcnl0aGluZyBpbiBjb3JlIG9ubHkgdG8gd3JpdGUgaXQKKyAgIG91dCB0byBhIGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggd2FzIG5vdCBhIHZlcnkgc21hcnQgdGhpbmcgdG8gZG8uCisKKyAqIFRoZSBTU0wgcGVlciB2ZXJpZmljYXRpb24gZG9uZSBieSAiZ2l0IGltYXAtc2VuZCIgZGlkIG5vdCBhc2sgZm9yCisgICBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChSRkMgNDM2NiksIGZhaWxpbmcgdG8gY29ubmVjdCBTU0wvVExTCisgICBzaXRlcyB0aGF0IHNlcnZlIG11bHRpcGxlIGhvc3RuYW1lcyBvbiBhIHNpbmdsZSBJUC4KKworICogImdpdCBpbmRleC1wYWNrIiBoYWQgYSBidWZmZXItb3ZlcmZsb3cgd2hpbGUgcHJlcGFyaW5nIGFuCisgICBpbmZvcm1hdGlvbmFsIG1lc3NhZ2Ugd2hlbiB0aGUgdHJhbnNsYXRlZCB2ZXJzaW9uIG9mIGl0IHdhcyB0b28KKyAgIGxvbmcuCisKKyAqIENsYXJpZnkgaW4gdGhlIGRvY3VtZW50YXRpb24gIndoYXQiIGdldHMgcHVzaGVkIHRvICJ3aGVyZSIgd2hlbiB0aGUKKyAgIGNvbW1hbmQgbGluZSB0byAiZ2l0IHB1c2giIGRvZXMgbm90IHNheSB0aGVzZSBleHBsaWNpdGx5LgorCisgKiBJbiAiZ2l0IHJlZmxvZyBleHBpcmUiLCBSRUFDSEFCTEUgYml0IHdhcyBub3QgY2xlYXJlZCBmcm9tIHRoZQorICAgY29ycmVjdCBvYmplY3RzLgorCisgKiBUaGUgIi0tY29sb3I9PHdoZW4+IiBhcmd1bWVudCB0byB0aGUgY29tbWFuZHMgaW4gdGhlIGRpZmYgZmFtaWx5CisgICB3YXMgZGVzY3JpYmVkIHBvb3JseS4KKworICogVGhlIGFyZ3VtZW50cyBnaXZlbiB0byBwcmUtcmViYXNlIGhvb2sgd2VyZSBub3QgZG9jdW1lbnRlZC4KKworICogVGhlIHY0IGluZGV4IGZvcm1hdCB3YXMgbm90IGRvY3VtZW50ZWQuCisKKyAqIFRoZSAiLS1tYXRjaD08cGF0dGVybj4iIGFyZ3VtZW50ICJnaXQgZGVzY3JpYmUiIHRha2VzIHVzZXMgZ2xvYgorICAgcGF0dGVybiBidXQgaXQgd2Fzbid0IG9idmlvdXMgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbi4KKworICogU29tZSBzb3VyY2VzIGZhaWxlZCB0byBjb21waWxlIG9uIHN5c3RlbXMgdGhhdCBsYWNrIE5JX01BWEhPU1QgaW4KKyAgIHRoZWlyIHN5c3RlbSBoZWFkZXIgKGUuZy4gei9PUykuCisKKyAqIEFkZCBhbiBleGFtcGxlIHVzZSBvZiAiLS1lbnYtZmlsdGVyIiBpbiAiZmlsdGVyLWJyYW5jaCIKKyAgIGRvY3VtZW50YXRpb24uCisKKyAqICJnaXQgYnVuZGxlIHZlcmlmeSIgZGlkIG5vdCBzYXkgInJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5IiBmb3IgYQorICAgYnVuZGxlIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgcHJlcmVxdWlzaXRlcy4KKworICogSW4gdGhlIHYxLjguMCBlcmEsIHdlIGNoYW5nZWQgc3ltYm9scyB0aGF0IGRvIG5vdCBoYXZlIHRvIGJlIGdsb2JhbAorICAgdG8gZmlsZSBzY29wZSBzdGF0aWMsIGJ1dCBhIGZldyBmdW5jdGlvbnMgaW4gZ3JhcGguYyB3ZXJlIHVzZWQgYnkKKyAgIENHaXQgZnJvbSBzaWRld2F5cyBieXBhc3NpbmcgdGhlIGVudHJ5IHBvaW50cyBvZiB0aGUgQVBJIHRoZQorICAgaW4tdHJlZSB1c2VycyB1c2UuCisKKyAqICJnaXQgbWVyZ2UtdHJlZSIgaGFkIGEgdHlwbyBpbiB0aGUgbG9naWMgdG8gZGV0ZWN0IGQvZiBjb25mbGljdHMsCisgICB3aGljaCBjYXVzZWQgaXQgdG8gc2VnZmF1bHQgaW4gc29tZSBjYXNlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOGRmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjIudHh0CkBAIC0wLDAgKzEsNjEgQEAKK0dpdCB2MS44LjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjIuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogWnNoIGNvbXBsZXRpb24gZm9yZ290IHRoYXQgJyUnIGNoYXJhY3RlciB1c2VkIHRvIHNpZ25hbCB1bnRyYWNrZWQKKyAgIGZpbGVzIG5lZWRzIHRvIGJlIGVzY2FwZWQgd2l0aCBhbm90aGVyICclJy4KKworICogQSBjb21taXQgb2JqZWN0IHdob3NlIGF1dGhvciBvciBjb21taXR0ZXIgaWRlbnQgYXJlIG1hbGZvcm1lZAorICAgY3Jhc2hlZCBzb21lIGNvZGUgdGhhdCB0cnVzdGVkIHRoYXQgYSBuYW1lLCBhbiBlbWFpbCBhbmQgYW4KKyAgIHRpbWVzdGFtcCBjYW4gYWx3YXlzIGJlIGZvdW5kIGluIGl0LgorCisgKiBUaGUgbmV3IGNvcmUuY29tbWVudGNoYXIgY29uZmlndXJhdGlvbiB3YXMgbm90IGFwcGxpZWQgdG8gYSBmZXcKKyAgIHBsYWNlcy4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBkaWQgbm90IHBhc3MgIi12Ly1xIiBvcHRpb25zIHRvIHVuZGVybHlpbmcKKyAgICJnaXQgcmViYXNlIi4KKworICogV2hlbiByZWNlaXZlLXBhY2sgZGV0ZWN0cyBlcnJvciBpbiB0aGUgcGFjayBoZWFkZXIgaXQgcmVjZWl2ZWQgaW4KKyAgIG9yZGVyIHRvIGRlY2lkZSB3aGljaCBvZiB1bnBhY2stb2JqZWN0cyBvciBpbmRleC1wYWNrIHRvIHJ1biwgaXQKKyAgIHJldHVybmVkIHdpdGhvdXQgY2xvc2luZyB0aGUgZXJyb3Igc3RyZWFtLCB3aGljaCBsZWQgdG8gYSBoYW5nCisgICBzaWRlYmFuZCB0aHJlYWQuCisKKyAqICJnaXQgZGlmZiAtLWRpZmYtYWxnb3JpdGhtPWFsZ28iIHdhcyB1bmRlcnN0b29kIGJ5IHRoZSBjb21tYW5kIGxpbmUKKyAgIHBhcnNlciwgYnV0ICJnaXQgZGlmZiAtLWRpZmYtYWxnb3JpdGhtIGFsZ28iIHdhcyBub3QuCisKKyAqICJnaXQgbG9nIC1TLy1HIiBzdGFydGVkIHBheWluZyBhdHRlbnRpb24gdG8gdGV4dGNvbnYgZmlsdGVyLCBidXQKKyAgIHRoZXJlIHdhcyBubyB3YXkgdG8gZGlzYWJsZSB0aGlzLiAgTWFrZSBpdCBob25vciAtLW5vLXRleHRjb252CisgICBvcHRpb24uCisKKyAqICJnaXQgbWVyZ2UgJChnaXQgcmV2LXBhcnNlIHYxLjguMikiIGJlaGF2ZWQgcXVpdGUgZGlmZmVyZW50bHkgZnJvbQorICAgImdpdCBtZXJnZSB2MS44LjIiLCBhcyBpZiB2MS44LjIgd2VyZSB3cml0dGVuIGFzIHYxLjguMl4wIGFuZCBkaWQKKyAgIG5vdCBwYXkgbXVjaCBhdHRlbnRpb24gdG8gdGhlIGFubm90YXRlZCB0YWcgcGF5bG9hZC4gIE1ha2UgdGhlIGNvZGUKKyAgIG5vdGljZSB0aGUgdHlwZSBvZiB0aGUgdGFnIG9iamVjdCwgaW4gYWRkaXRpb24gdG8gdGhlIGR3aW1fcmVmKCkKKyAgIGJhc2VkIGNsYXNzaWZpY2F0aW9uIHRoZSBjdXJyZW50IGNvZGUgdXNlcyAoaS5lLiB0aGUgbmFtZSBhcHBlYXJzCisgICBpbiByZWZzL3RhZ3MvKSB0byBkZWNpZGUgd2hlbiB0byBzcGVjaWFsIGNhc2UgbWVyZ2luZyBvZiB0YWdzLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiBhbmQgImdpdCByZXZlcnQiIGNhbiB0YWtlIG1vcmUgdGhhbiBvbmUgY29tbWl0CisgICBvbiB0aGUgY29tbWFuZCBsaW5lIHRoZXNlIGRheXMsIGJ1dCBpdCB3YXMgbm90IG1lbnRpb25lZCBvbiB0aGUgdXNhZ2UKKyAgIHRleHQuCisKKyAqIFBlcmwgc2NyaXB0cyBsaWtlICJnaXQtc3ZuIiBjbG9zZWQgKG5vdCByZWRpcmVjdGluZyB0byAvZGV2L251bGwpCisgICB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLCB3aGljaCBpcyBub3QgYSB2ZXJ5IHNtYXJ0IHRoaW5nIHRvIGRvLgorICAgTGF0ZXIgb3BlbiBtYXkgcmV0dXJuIGZpbGUgZGVzY3JpcHRvciAjMiBmb3IgdW5yZWxhdGVkIHB1cnBvc2UsIGFuZAorICAgZXJyb3IgcmVwb3J0aW5nIGNvZGUgbWF5IHdyaXRlIGludG8gdGhlbS4KKworICogImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiB3YXMgbm90IHByZXBhcmVkIHRvIHNlZSBhIGxpbmUgZ2V0dGluZworICAgbG9uZ2VyIGFmdGVyIGZpeGluZyB3aGl0ZXNwYWNlcyAoZS5nLiB0YWItaW4taW5kZW50IGFrYSBQeXRob24pLgorCisgKiAiZ2l0IGRpZmYvbG9nIC0tY2MiIGRpZCBub3Qgd29yayB3ZWxsIHdpdGggb3B0aW9ucyB0aGF0IGlnbm9yZQorICAgd2hpdGVzcGFjZSBjaGFuZ2VzLgorCisgKiBEb2N1bWVudGF0aW9uIG9uIHNldHRpbmcgdXAgYSBodHRwIHNlcnZlciB0aGF0IHJlcXVpcmVzCisgICBhdXRoZW50aWNhdGlvbiBvbmx5IG9uIHRoZSBwdXNoIGJ1dCBub3QgZmV0Y2ggaGFzIGJlZW4gY2xhcmlmaWVkLgorCisgKiBBIGZldyBidWdmaXhlcyB0byAiZ2l0IHJlcmVyZSIgd29ya2luZyBvbiBjb3JuZXIgY2FzZSBtZXJnZQorICAgY29uZmxpY3RzIGhhdmUgYmVlbiBhcHBsaWVkLgorCisgKiAiZ2l0IGJ1bmRsZSIgZGlkIG5vdCBsaWtlIGEgYnVuZGxlIGNyZWF0ZWQgdXNpbmcgYSBjb21taXQgd2l0aG91dAorICAgYW55IG1lc3NhZ2UgYXMgaXRzIG9uZSBvZiB0aGUgcHJlcmVxdWlzaXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMzk0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLjMudHh0CkBAIC0wLDAgKzEsMTkgQEAKK0dpdCB2MS44LjIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjIuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogInJldi1saXN0IC0tc3RkaW4iIGFuZCBmcmllbmRzIGtlcHQgYm9ndXMgcG9pbnRlcnMgaW50byB0aGUgaW5wdXQKKyAgIGJ1ZmZlciBhcm91bmQgYXMgaHVtYW4gcmVhZGFibGUgb2JqZWN0IG5hbWVzLiAgVGhpcyB3YXMgbm90IGEKKyAgIGh1Z2UgcHJvYmxlbSBidXQgd2FzIGV4cG9zZWQgYnkgYSBuZXcgY2hhbmdlIHRoYXQgdXNlcyB0aGVzZQorICAgbmFtZXMgaW4gZXJyb3Igb3V0cHV0LgorCisgKiBXaGVuICJnaXQgZGlmZnRvb2wiIGRyb3ZlICJrZGlmZjMiLCBpdCBtaXN0YWtlbmx5IHBhc3NlZCAtLWF1dG8KKyAgIG9wdGlvbiB0aGF0IHdhcyBtZWFudCB3aGlsZSByZXNvbHZpbmcgbWVyZ2UgY29uZmxpY3RzLgorCisgKiAiZ2l0IHJlbW90ZSBhZGQiIGNvbW1hbmQgZGlkIG5vdCBkaWFnbm9zZSBleHRyYSBjb21tYW5kIGxpbmUKKyAgIGFyZ3VtZW50cyBhcyBhbiBlcnJvciBhbmQgc2lsZW50bHkgaWdub3JlZCB0aGVtLgorCitBbHNvIGNvbnRhaW5zIGEgaGFuZGZ1bCBvZiB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLCBkb2N1bWVudGF0aW9uCit1cGRhdGVzLCB1cGRhdGVzIHRvIHRoZSB0ZXN0IHN1aXRlLCBldGMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNjA2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4yLnR4dApAQCAtMCwwICsxLDQ5NSBAQAorR2l0IHYxLjguMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcyAodGhpcyByZWxlYXNlKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiZ2l0IHB1c2ggJHRoZXJlIHRhZyB2MS4yLjMiIHVzZWQgdG8gYWxsb3cgcmVwbGFjaW5nIGEgdGFnIHYxLjIuMwordGhhdCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVwb3NpdG9yeSAkdGhlcmUsIGlmIHRoZSByZXdyaXR0ZW4gdGFnCit5b3UgYXJlIHB1c2hpbmcgcG9pbnRzIGF0IGEgY29tbWl0IHRoYXQgaXMgYSBkZXNjZW5kYW50IG9mIGEgY29tbWl0Cit0aGF0IHRoZSBvbGQgdGFnIHYxLjIuMyBwb2ludHMgYXQuICBUaGlzIHdhcyBmb3VuZCB0byBiZSBlcnJvciBwcm9uZQorYW5kIHN0YXJ0aW5nIHdpdGggdGhpcyByZWxlYXNlLCBhbnkgYXR0ZW1wdCB0byB1cGRhdGUgYW4gZXhpc3RpbmcKK3JlZiB1bmRlciByZWZzL3RhZ3MvIGhpZXJhcmNoeSB3aWxsIGZhaWwsIHdpdGhvdXQgIi0tZm9yY2UiLgorCitXaGVuICJnaXQgYWRkIC11IiBhbmQgImdpdCBhZGQgLUEiIHRoYXQgZG9lcyBub3Qgc3BlY2lmeSB3aGF0IHBhdGhzCit0byBhZGQgb24gdGhlIGNvbW1hbmQgbGluZSBpcyBydW4gZnJvbSBpbnNpZGUgYSBzdWJkaXJlY3RvcnksIHRoZQorc2NvcGUgb2YgdGhlIG9wZXJhdGlvbiBoYXMgYWx3YXlzIGJlZW4gbGltaXRlZCB0byB0aGUgc3ViZGlyZWN0b3J5LgorTWFueSB1c2VycyBmb3VuZCB0aGlzIGNvdW50ZXItaW50dWl0aXZlLCBnaXZlbiB0aGF0ICJnaXQgY29tbWl0IC1hIgorYW5kIG90aGVyIGNvbW1hbmRzIG9wZXJhdGUgb24gdGhlIGVudGlyZSB0cmVlIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgeW91CithcmUuICBJbiB0aGlzIHJlbGVhc2UsIHRoZXNlIGNvbW1hbmRzIGdpdmUgYSB3YXJuaW5nIG1lc3NhZ2UgdGhhdAorc3VnZ2VzdHMgdGhlIHVzZXJzIHRvIHVzZSAiZ2l0IGFkZCAtdS8tQSAuIiB3aGVuIHRoZXkgd2FudCB0byBsaW1pdAordGhlIHNjb3BlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeTsgZG9pbmcgc28gd2lsbCBzcXVlbGNoIHRoZSBtZXNzYWdlLAord2hpbGUgdHJhaW5pbmcgdGhlaXIgZmluZ2Vycy4KKworCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzIChmb3IgR2l0IDIuMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuICJnaXQgcHVzaCBbJHRoZXJlXSIgZG9lcyBub3Qgc2F5IHdoYXQgdG8gcHVzaCwgd2UgaGF2ZSB1c2VkIHRoZQordHJhZGl0aW9uYWwgIm1hdGNoaW5nIiBzZW1hbnRpY3Mgc28gZmFyIChhbGwgeW91ciBicmFuY2hlcyB3ZXJlIHNlbnQKK3RvIHRoZSByZW1vdGUgYXMgbG9uZyBhcyB0aGVyZSBhbHJlYWR5IGFyZSBicmFuY2hlcyBvZiB0aGUgc2FtZSBuYW1lCitvdmVyIHRoZXJlKS4gIEluIEdpdCAyLjAsIHRoZSBkZWZhdWx0IHdpbGwgY2hhbmdlIHRvIHRoZSAic2ltcGxlIgorc2VtYW50aWNzIHRoYXQgcHVzaGVzIHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgYnJhbmNoIHdpdGggdGhlIHNhbWUKK25hbWUsIG9ubHkgd2hlbiB0aGUgY3VycmVudCBicmFuY2ggaXMgc2V0IHRvIGludGVncmF0ZSB3aXRoIHRoYXQKK3JlbW90ZSBicmFuY2guICBUaGVyZSBpcyBhIHVzZXIgcHJlZmVyZW5jZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisicHVzaC5kZWZhdWx0IiB0byBjaGFuZ2UgdGhpcy4gIElmIHlvdSBhcmUgYW4gb2xkLXRpbWVyIHdobyBpcyB1c2VkCit0byB0aGUgIm1hdGNoaW5nIiBzZW1hbnRpY3MsIHlvdSBjYW4gc2V0IGl0IHRvICJtYXRjaGluZyIgdG8ga2VlcCB0aGUKK3RyYWRpdGlvbmFsIGJlaGF2aW91ci4gIElmIHlvdSB3YW50IHRvIGxpdmUgaW4gdGhlIGZ1dHVyZSBlYXJseSwKK3lvdSBjYW4gc2V0IGl0IHRvICJzaW1wbGUiIHRvZGF5IHdpdGhvdXQgd2FpdGluZyBmb3IgR2l0IDIuMC4KKworV2hlbiAiZ2l0IGFkZCAtdSIgYW5kICJnaXQgYWRkIC1BIiwgdGhhdCBkb2VzIG5vdCBzcGVjaWZ5IHdoYXQgcGF0aHMKK3RvIGFkZCBvbiB0aGUgY29tbWFuZCBsaW5lIGlzIHJ1biBmcm9tIGluc2lkZSBhIHN1YmRpcmVjdG9yeSwgdGhlc2UKK2NvbW1hbmRzIHdpbGwgb3BlcmF0ZSBvbiB0aGUgZW50aXJlIHRyZWUgaW4gR2l0IDIuMCBmb3IgY29uc2lzdGVuY3kKK3dpdGggImdpdCBjb21taXQgLWEiIGFuZCBvdGhlciBjb21tYW5kcy4gQmVjYXVzZSB0aGVyZSB3aWxsIGJlIG5vCittZWNoYW5pc20gdG8gbWFrZSAiZ2l0IGFkZCAtdSIgYmVoYXZlIGFzIGlmICJnaXQgYWRkIC11IC4iLCBpdCBpcworaW1wb3J0YW50IGZvciB0aG9zZSB3aG8gYXJlIHVzZWQgdG8gImdpdCBhZGQgLXUiICh3aXRob3V0IHBhdGhzcGVjKQordXBkYXRpbmcgdGhlIGluZGV4IG9ubHkgZm9yIHBhdGhzIGluIHRoZSBjdXJyZW50IHN1YmRpcmVjdG9yeSB0byBzdGFydAordHJhaW5pbmcgdGhlaXIgZmluZ2VycyB0byBleHBsaWNpdGx5IHNheSAiZ2l0IGFkZCAtdSAuIiB3aGVuIHRoZXkgbWVhbgoraXQgYmVmb3JlIEdpdCAyLjAgY29tZXMuCisKKworVXBkYXRlcyBzaW5jZSB2MS44LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBJbml0aWFsIHBvcnRzIHRvIFFOWCBhbmQgei9PUyBVTklYIFN5c3RlbSBTZXJ2aWNlcyBoYXZlIHN0YXJ0ZWQuCisKKyAqIE91dHB1dCBmcm9tIHRoZSB0ZXN0cyBpcyBjb2xvdXJlZCB1c2luZyAiZ3JlZW4gaXMgb2theSwgeWVsbG93IGlzCisgICBxdWVzdGlvbmFibGUsIHJlZCBpcyBiYWQgYW5kIGJsdWUgaXMgaW5mb3JtYXRpdmUiIHNjaGVtZS4KKworICogTWVudGlvbiBvZiAiR0lUL0dpdC9naXQiIGluIHRoZSBkb2N1bWVudGF0aW9uIGhhdmUgYmVlbiB1cGRhdGVkIHRvCisgICBiZSBtb3JlIHVuaWZvcm0gYW5kIGNvbnNpc3RlbnQuICBUaGUgbmFtZSBvZiB0aGUgc3lzdGVtIGFuZCB0aGUKKyAgIGNvbmNlcHQgaXQgZW1ib2RpZXMgaXMgIkdpdCI7IHRoZSBjb21tYW5kIHRoZSB1c2VycyB0eXBlIGlzICJnaXQiLgorICAgQWxsLWNhcHMgIkdJVCIgd2FzIG1lcmVseSBhIHdheSB0byBpbWl0YXRlICJHaXQiIHR5cGVzZXQgaW4gc21hbGwKKyAgIGNhcHMgaW4gb3VyIEFTQ0lJIHRleHQgb25seSBkb2N1bWVudGF0aW9uIGFuZCB0byBiZSBhdm9pZGVkLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgKGluIGNvbnRyaWIvY29tcGxldGlvbikgdXNlZCB0byBsZXQgdGhlCisgICBkZWZhdWx0IGNvbXBsZXRlciB0byBzdWdnZXN0IHBhdGhuYW1lcywgd2hpY2ggZ2F2ZSB0b28gbWFueQorICAgaXJyZWxldmFudCBjaG9pY2VzIChlLmcuICJnaXQgYWRkIiB3b3VsZCBub3Qgd2FudCB0byBhZGQgYW4KKyAgIHVubW9kaWZpZWQgcGF0aCkuICBJdCBsZWFybnQgdG8gdXNlIGEgbW9yZSBnaXQtYXdhcmUgbG9naWMgdG8KKyAgIGVudW1lcmF0ZSBvbmx5IHJlbGV2YW50IG9uZXMuCisKKyAqIEluIGJhcmUgcmVwb3NpdG9yaWVzLCAiZ2l0IHNob3J0bG9nIiBhbmQgb3RoZXIgY29tbWFuZHMgbm93IHJlYWQKKyAgIG1haWxtYXAgZmlsZXMgZnJvbSB0aGUgdGlwIG9mIHRoZSBoaXN0b3J5LCB0byBoZWxwIHJ1bm5pbmcgdGhlc2UKKyAgIHRvb2xzIGluIHNlcnZlciBzZXR0aW5ncy4KKworICogQ29sb3Igc3BlY2lmaWVycywgZS5nLiAiJUMoYmx1ZSlIZWxsbyVDKHJlc2V0KSIsIHVzZWQgaW4gdGhlCisgICAiLS1mb3JtYXQ9IiBvcHRpb24gb2YgImdpdCBsb2ciIGFuZCBmcmllbmRzIGNhbiBiZSBkaXNhYmxlZCB3aGVuCisgICB0aGUgb3V0cHV0IGlzIG5vdCBzZW50IHRvIGEgdGVybWluYWwgYnkgcHJlZml4aW5nIHRoZW0gd2l0aAorICAgImF1dG8sIiwgZS5nLiAiJUMoYXV0byxibHVlKUhlbGxvJUMoYXV0byxyZXNldCkiLgorCisgKiBTY3JpcHRzIGNhbiBhc2sgR2l0IHRoYXQgd2lsZGNhcmQgcGF0dGVybnMgaW4gcGF0aHNwZWNzIHRoZXkgZ2l2ZSBkbworICAgbm90IGhhdmUgYW55IHNpZ25pZmljYW5jZSwgaS5lLiB0YWtlIHRoZW0gYXMgbGl0ZXJhbCBzdHJpbmdzLgorCisgKiBUaGUgcGF0dGVybnMgaW4gLmdpdGlnbm9yZSBhbmQgLmdpdGF0dHJpYnV0ZXMgZmlsZXMgY2FuIGhhdmUgKiovLAorICAgYXMgYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyAwIG9yIG1vcmUgbGV2ZWxzIG9mIHN1YmRpcmVjdG9yeS4KKyAgIEUuZy4gImZvby8qKi9iYXIiIG1hdGNoZXMgImJhciIgaW4gImZvbyIgaXRzZWxmIG9yIGluIGEKKyAgIHN1YmRpcmVjdG9yeSBvZiAiZm9vIi4KKworICogV2hlbiBnaXZpbmcgYXJndW1lbnRzIHdpdGhvdXQgIi0tIiBkaXNhbWJpZ3VhdGlvbiwgb2JqZWN0IG5hbWVzCisgICB0aGF0IGNvbWUgZWFybGllciBvbiB0aGUgY29tbWFuZCBsaW5lIG11c3Qgbm90IGJlIGludGVycHJldGFibGUgYXMKKyAgIHBhdGhzcGVjcyBhbmQgcGF0aHNwZWNzIHRoYXQgY29tZSBsYXRlciBvbiB0aGUgY29tbWFuZCBsaW5lIG11c3QKKyAgIG5vdCBiZSBpbnRlcnByZXRhYmxlIGFzIG9iamVjdCBuYW1lcy4gIFRoaXMgZGlzYW1iaWd1YXRpb24gcnVsZSBoYXMKKyAgIGJlZW4gdHdlYWtlZCBzbyB0aGF0ICI6LyIgKG5vIG90aGVyIHN0cmluZyBiZWZvcmUgb3IgYWZ0ZXIpIGlzCisgICBhbHdheXMgaW50ZXJwcmV0ZWQgYXMgYSBwYXRoc3BlYzsgImdpdCBjbWQgLS0gOi8iIGlzIG5vIGxvbmdlcgorICAgbmVlZGVkLCB5b3UgY2FuIGp1c3Qgc2F5ICJnaXQgY21kIDovIi4KKworICogVmFyaW91cyAiaGludCIgbGluZXMgR2l0IGdpdmVzIHdoZW4gaXQgYXNrcyB0aGUgdXNlciB0byBlZGl0CisgICBtZXNzYWdlcyBpbiB0aGUgZWRpdG9yIGFyZSBjb21tZW50ZWQgb3V0IHdpdGggJyMnIGJ5IGRlZmF1bHQuIFRoZQorICAgY29yZS5jb21tZW50Y2hhciBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIGN1c3RvbWl6ZQorICAgdGhpcyAnIycgdG8gYSBkaWZmZXJlbnQgY2hhcmFjdGVyLgorCisgKiAiZ2l0IGFkZCAtdSIgYW5kICJnaXQgYWRkIC1BIiB3aXRob3V0IHBhdGhzcGVjIGlzc3VlcyB3YXJuaW5nIHRvCisgICBtYWtlIHVzZXJzIGF3YXJlIHRoYXQgdGhleSBhcmUgb25seSBvcGVyYXRpbmcgb24gcGF0aHMgaW5zaWRlIHRoZQorICAgc3ViZGlyZWN0b3J5IHRoZXkgYXJlIGluLiAgVXNlICI6LyIgKGV2ZXJ5dGhpbmcgZnJvbSB0aGUgdG9wKSBvcgorICAgIi4iIChldmVyeXRoaW5nIGZyb20gdGhlICRjd2QpIHRvIGRpc2FtYmlndWF0ZS4KKworICogImdpdCBibGFtZSIgKGFuZCAiZ2l0IGRpZmYiKSBsZWFybmVkIHRoZSAiLS1uby1mb2xsb3ciIG9wdGlvbi4KKworICogImdpdCBicmFuY2giIG5vdyByZWplY3RzIHNvbWUgbm9uc2Vuc2UgY29tYmluYXRpb25zIG9mIGNvbW1hbmQgbGluZQorICAgYXJndW1lbnRzIChlLmcuIGdpdmluZyBtb3JlIHRoYW4gb25lIGJyYW5jaCBuYW1lIHRvIHJlbmFtZSkgd2l0aAorICAgbW9yZSBjYXNlLXNwZWNpZmljIGVycm9yIG1lc3NhZ2VzLgorCisgKiAiZ2l0IGNoZWNrLWlnbm9yZSIgY29tbWFuZCB0byBoZWxwIGRlYnVnZ2luZyAuZ2l0aWdub3JlIGZpbGVzIGhhcworICAgYmVlbiBhZGRlZC4KKworICogImdpdCBjaGVycnktcGljayIgY2FuIGJlIHVzZWQgdG8gcmVwbGF5IGEgcm9vdCBjb21taXQgdG8gYW4gdW5ib3JuCisgICBicmFuY2guCisKKyAqICJnaXQgY29tbWl0IiBjYW4gYmUgdG9sZCB0byB1c2UgLS1jbGVhbnVwPXdoaXRlc3BhY2UgYnkgc2V0dGluZyB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29tbWl0LmNsZWFudXAgdG8gJ3doaXRlc3BhY2UnLgorCisgKiAiZ2l0IGRpZmYiIGFuZCBvdGhlciBQb3JjZWxhaW4gY29tbWFuZHMgY2FuIGJlIHRvbGQgdG8gdXNlIGEKKyAgIG5vbi1zdGFuZGFyZCBhbGdvcml0aG0gYnkgc2V0dGluZyBkaWZmLmFsZ29yaXRobSBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZS4KKworICogImdpdCBmZXRjaCAtLW1pcnJvciIgYW5kIGZldGNoIHRoYXQgdXNlcyBvdGhlciBmb3JtcyBvZiByZWZzcGVjCisgICB3aXRoIHdpbGRjYXJkIHVzZWQgdG8gYXR0ZW1wdCB0byB1cGRhdGUgYSBzeW1ib2xpYyByZWYgdGhhdCBtYXRjaAorICAgdGhlIHdpbGRjYXJkIG9uIHRoZSByZWNlaXZpbmcgZW5kLCB3aGljaCBtYWRlIGxpdHRsZSBzZW5zZSAodGhlCisgICByZWFsIHJlZiB0aGF0IGlzIHBvaW50ZWQgYXQgYnkgdGhlIHN5bWJvbGljIHJlZiB3b3VsZCBiZSB1cGRhdGVkCisgICBhbnl3YXkpLiAgU3ltYm9saWMgcmVmcyBubyBsb25nZXIgYXJlIGFmZmVjdGVkIGJ5IHN1Y2ggYSBmZXRjaC4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIG5vdyBkZXRlY3RzIG1vcmUgY2FzZXMgaW4gd2hpY2ggYSB3aG9sZSBicmFuY2gKKyAgIGlzIGJlaW5nIGV4cG9ydGVkLCBhbmQgdXNlcyB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2gsIHdoZW4KKyAgIGFza2VkIHRvIHdyaXRlIGEgY292ZXIgbGV0dGVyIGZvciB0aGUgc2VyaWVzLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCAiLXYgJGNvdW50IiBvcHRpb24sIGFuZCBwcmVwZW5kcyBhCisgICBzdHJpbmcgInYkY291bnQtIiB0byB0aGUgbmFtZXMgb2YgaXRzIG91dHB1dCBmaWxlcywgYW5kIGFsc28KKyAgIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGUgc3ViamVjdCBwcmVmaXggdG8gIlBBVENIIHYkY291bnQiLiBUaGlzCisgICBhbGxvd3MgcGF0Y2hlcyBmcm9tIHJlcm9sbGVkIHNlcmllcyB0byBiZSBzdG9yZWQgdW5kZXIgZGlmZmVyZW50CisgICBuYW1lcyBhbmQgbWFrZXMgaXQgZWFzaWVyIHRvIHJldXNlIGNvdmVyIGxldHRlciBtZXNzYWdlcy4KKworICogImdpdCBsb2ciIGFuZCBmcmllbmRzIGNhbiBiZSB0b2xkIHdpdGggLS11c2UtbWFpbG1hcCBvcHRpb24gdG8KKyAgIHJld3JpdGUgdGhlIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgb2YgcGVvcGxlIHVzaW5nIHRoZSBtYWlsbWFwCisgICBtZWNoYW5pc20uCisKKyAqICJnaXQgbG9nIC0tY2MgLS1ncmFwaCIgbm93IHNob3dzIHRoZSBjb21iaW5lZCBkaWZmIG91dHB1dCB3aXRoIHRoZQorICAgYW5jZXN0cnkgZ3JhcGguCisKKyAqICJnaXQgbG9nIC0tZ3JlcD08cGF0dGVybj4iIGhvbm9ycyBpMThuLmxvZ291dHB1dGVuY29kaW5nIHRvIGxvb2sKKyAgIGZvciB0aGUgcGF0dGVybiBhZnRlciBmaXhpbmcgdGhlIGxvZyBtZXNzYWdlIHRvIHRoZSBzcGVjaWZpZWQKKyAgIGVuY29kaW5nLgorCisgKiAiZ2l0IG1lcmdldG9vbCIgYW5kICJnaXQgZGlmZnRvb2wiIGxlYXJuZWQgdG8gbGlzdCB0aGUgYXZhaWxhYmxlCisgICB0b29sIGJhY2tlbmRzIGluIGEgbW9yZSBjb25zaXN0ZW50IG1hbm5lci4KKworICogImdpdCBtZXJnZXRvb2wiIGlzIGF3YXJlIG9mIFRvcnRvaXNlR2l0TWVyZ2Ugbm93IGFuZCB1c2VzIGl0IG92ZXIKKyAgIFRvcnRvaXNlTWVyZ2Ugd2hlbiBhdmFpbGFibGUuCisKKyAqICJnaXQgcHVzaCIgbm93IHJlcXVpcmVzICItZiIgdG8gdXBkYXRlIGEgdGFnLCBldmVuIGlmIGl0IGlzIGEKKyAgIGZhc3QtZm9yd2FyZCwgYXMgdGFncyBhcmUgbWVhbnQgdG8gYmUgZml4ZWQgcG9pbnRzLgorCisgKiBFcnJvciBtZXNzYWdlcyBmcm9tICJnaXQgcHVzaCIgd2hlbiBpdCBzdG9wcyB0byBwcmV2ZW50IHJlbW90ZSByZWZzCisgICBmcm9tIGdldHRpbmcgb3ZlcndyaXR0ZW4gYnkgbWlzdGFrZSBoYXZlIGJlZW4gaW1wcm92ZWQgdG8gZXhwbGFpbgorICAgdmFyaW91cyBzaXR1YXRpb25zIHNlcGFyYXRlbHkuCisKKyAqICJnaXQgcHVzaCIgd2lsbCBzdG9wIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcgaWYgdGhlIG5ldyAicHJlLXB1c2giCisgICBob29rIGV4aXN0cyBhbmQgZXhpdHMgd2l0aCBhIGZhaWx1cmUuCisKKyAqIFdoZW4gImdpdCByZWJhc2UiIGZhaWxzIHRvIGdlbmVyYXRlIHBhdGNoZXMgdG8gYmUgYXBwbGllZCAoZS5nLiBkdWUKKyAgIHRvIG9vbSksIGl0IGZhaWxlZCB0byBkZXRlY3QgdGhlIGZhaWx1cmUgYW5kIGluc3RlYWQgYmVoYXZlZCBhcyBpZgorICAgdGhlcmUgd2VyZSBub3RoaW5nIHRvIGRvLiAgQSB3b3JrYXJvdW5kIHRvIHVzZSBhIHRlbXBvcmFyeSBmaWxlIGhhcworICAgYmVlbiBhcHBsaWVkLCBidXQgd2UgcHJvYmFibHkgd291bGQgd2FudCB0byByZXZpc2l0IHRoaXMgbGF0ZXIsIGFzCisgICBpdCBodXJ0cyB0aGUgY29tbW9uIGNhc2Ugb2Ygbm90IGZhaWxpbmcgYXQgYWxsLgorCisgKiBJbnB1dCBhbmQgcHJlY29uZGl0aW9ucyB0byAiZ2l0IHJlc2V0IiBoYXMgYmVlbiBsb29zZW5lZCB3aGVyZQorICAgYXBwcm9wcmlhdGUuICAiZ2l0IHJlc2V0ICRmcm9tdHJlZSBNYWtlZmlsZSIgcmVxdWlyZXMgJGZyb210cmVlIHRvCisgICBiZSBhbnkgdHJlZSAoaXQgdXNlZCB0byByZXF1aXJlIGl0IHRvIGJlIGEgY29tbWl0KSwgZm9yIGV4YW1wbGUuCisgICAiZ2l0IHJlc2V0IiAod2l0aG91dCBvcHRpb25zIG9yIHBhcmFtZXRlcnMpIHVzZWQgdG8gZXJyb3Igb3V0IHdoZW4KKyAgIHlvdSBkbyBub3QgaGF2ZSBhbnkgY29tbWl0cyBpbiB5b3VyIGhpc3RvcnksIGJ1dCBpdCBub3cgZ2l2ZXMgeW91CisgICBhbiBlbXB0eSBpbmRleCAodG8gbWF0Y2ggbm9uLWV4aXN0ZW50IGNvbW1pdCB5b3UgYXJlIG5vdCBldmVuIG9uKS4KKworICogImdpdCBzdGF0dXMiIHNheXMgd2hhdCBicmFuY2ggaXMgYmVpbmcgYmlzZWN0ZWQgb3IgcmViYXNlZCB3aGVuCisgICBhYmxlLCBub3QganVzdCAiYmlzZWN0aW5nIiBvciAicmViYXNpbmciLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSIgc3RhcnRlZCBsZWFybmluZyBhIG5ldyBtb2RlIHRvIGludGVncmF0ZSB3aXRoIHRoZQorICAgdGlwIG9mIHRoZSByZW1vdGUgYnJhbmNoIChhcyBvcHBvc2VkIHRvIGludGVncmF0aW5nIHdpdGggdGhlIGNvbW1pdAorICAgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCdzIGdpdGxpbmspLgorCisgKiAiZ2l0IHVwbG9hZC1wYWNrIiB3aGljaCBpbXBsZW1lbnRzIHRoZSBzZXJ2aWNlICJscy1yZW1vdGUiIGFuZAorICAgImZldGNoIiB0YWxrIHRvIGNhbiBiZSB0b2xkIHRvIGhpZGUgcmVmIGhpZXJhcmNoaWVzIHRoZSBzZXJ2ZXIKKyAgIHNpZGUgaW50ZXJuYWxseSB1c2VzIChhbmQgdGhhdCBjbGllbnRzIGhhdmUgbm8gYnVzaW5lc3MgbGVhcm5pbmcKKyAgIGFib3V0KSB3aXRoIHRyYW5zZmVyLmhpZGVyZWZzIGNvbmZpZ3VyYXRpb24uCisKKworRm9yZWlnbiBJbnRlcmZhY2UKKworICogImdpdCBmYXN0LWV4cG9ydCIgaGFzIGJlZW4gdXBkYXRlZCBmb3IgaXRzIHVzZSBpbiB0aGUgY29udGV4dCBvZgorICAgdGhlIHJlbW90ZSBoZWxwZXIgaW50ZXJmYWNlLgorCisgKiBBIG5ldyByZW1vdGUgaGVscGVyIHRvIGludGVyYWN0IHdpdGggYnpyIGhhcyBiZWVuIGFkZGVkIHRvIGNvbnRyaWIvLgorCisgKiAiZ2l0IHA0IiBnb3QgdmFyaW91cyBidWdmaXhlcyBhcm91bmQgaXRzIGJyYW5jaCBoYW5kbGluZy4gIEl0IGlzCisgICBhbHNvIG1hZGUgdXNhYmxlIHdpdGggUHl0aG9uIDIuNC8yLjUuICBJbiBhZGRpdGlvbiwgaXRzIHZhcmlvdXMKKyAgIHBvcnRhYmlsaXR5IGlzc3VlcyBmb3IgQ3lnd2luIGhhdmUgYmVlbiBhZGRyZXNzZWQuCisKKyAqIFRoZSByZW1vdGUgaGVscGVyIHRvIGludGVyYWN0IHdpdGggSGcgaW4gY29udHJpYi8gaGFzIHNlZW4gYSBmZXcKKyAgIGZpeGVzLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLgorCisgKiAiZ2l0IGZzY2siIGhhcyBiZWVuIHRhdWdodCB0byBiZSBwaWNraWVyIGFib3V0IGVudHJpZXMgaW4gdHJlZQorICAgb2JqZWN0cyB0aGF0IHNob3VsZCBub3QgYmUgdGhlcmUsIGUuZy4gIi4iLCAiLmdpdCIsIGFuZCAiLi4iLgorCisgKiBNYXRjaGluZyBwYXRocyB3aXRoIGNvbW1vbiBmb3JtcyBvZiBwYXRoc3BlY3MgdGhhdCBjb250YWluIHdpbGRjYXJkCisgICBjaGFyYWN0ZXJzIGhhcyBiZWVuIG9wdGltaXplZCBmdXJ0aGVyLgorCisgKiBXZSBzdG9wcGVkIHBheWluZyBhdHRlbnRpb24gdG8gJEdJVF9DT05GSUcgZW52aXJvbm1lbnQgdGhhdCBwb2ludHMKKyAgIGF0IGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gZmlsZSBmcm9tIGFueSBjb21tYW5kIG90aGVyIHRoYW4gImdpdCBjb25maWciCisgICBxdWl0ZSBhIHdoaWxlIGFnbywgYnV0ICJnaXQgY2xvbmUiIGludGVybmFsbHkgc2V0LCBleHBvcnRlZCwgYW5kCisgICB0aGVuIHVuZXhwb3J0ZWQgdGhlIHZhcmlhYmxlIGR1cmluZyBpdHMgb3BlcmF0aW9uIHVubmVjZXNzYXJpbHkuCisKKyAqICJnaXQgcmVzZXQiIGludGVybmFscyBoYXMgYmVlbiByZXdvcmtlZCBhbmQgc2hvdWxkIGJlIGZhc3RlciBpbgorICAgZ2VuZXJhbC4gV2UgdHJpZWQgdG8gYmUgY2FyZWZ1bCBub3QgdG8gYnJlYWsgYW55IGJlaGF2aW91ciBidXQKKyAgIHRoZXJlIGNvdWxkIGJlIGNvcm5lciBjYXNlcywgZXNwZWNpYWxseSB3aGVuIHJ1bm5pbmcgdGhlIGNvbW1hbmQKKyAgIGZyb20gYSBjb25mbGljdGVkIHN0YXRlLCB0aGF0IHdlIG1heSBoYXZlIG1pc3NlZC4KKworICogVGhlIGltcGxlbWVudGF0aW9uIG9mICJpbWFwLXNlbmQiIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmV1c2UgeG1sCisgICBxdW90aW5nIGNvZGUgZnJvbSBodHRwLXB1c2ggY29kZXBhdGgsIGFuZCBsb3N0IGEgbG90IG9mIHVudXNlZAorICAgY29kZS4KKworICogVGhlcmUgaXMgYSBzaW1wbGUtbWluZGVkIGNoZWNrZXIgZm9yIHRoZSB0ZXN0IHNjcmlwdHMgaW4gdC8KKyAgIGRpcmVjdG9yeSB0byBjYXRjaCBtb3N0IGNvbW1vbiBtaXN0YWtlcyAoaXQgaXMgbm90IGVuYWJsZWQgYnkKKyAgIGRlZmF1bHQpLgorCisgKiBZb3UgY2FuIGJ1aWxkIHdpdGggVVNFX1dJTERNQVRDSD1ZZXNQbGVhc2UgdG8gdXNlIGEgcmVwbGFjZW1lbnQKKyAgIGltcGxlbWVudGF0aW9uIG9mIHBhdHRlcm4gbWF0Y2hpbmcgbG9naWMgdXNlZCBmb3IgcGF0aG5hbWUtbGlrZQorICAgdGhpbmdzLCBlLmcuIHJlZm5hbWVzIGFuZCBwYXRocyBpbiB0aGUgcmVwb3NpdG9yeS4gIFRoaXMgbmV3CisgICBpbXBsZW1lbnRhdGlvbiBpcyBub3QgZXhwZWN0ZWQgY2hhbmdlIHRoZSBleGlzdGluZyBiZWhhdmlvdXIgb2YgR2l0CisgICBpbiB0aGlzIHJlbGVhc2UsIGV4Y2VwdCBmb3IgImdpdCBmb3ItZWFjaC1yZWYiIHdoZXJlIHlvdSBjYW4gbm93CisgICBzYXkgInJlZnMvKiovbWFzdGVyIiBhbmQgbWF0Y2ggd2l0aCBib3RoIHJlZnMvaGVhZHMvbWFzdGVyIGFuZAorICAgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIuICBXZSBwbGFuIHRvIHVzZSB0aGlzIG5ldyBpbXBsZW1lbnRhdGlvbgorICAgaW4gd2lkZXIgcGxhY2VzIChlLmcuICJnaXQgbHMtZmlsZXMgJyoqL01ha2VmaWxlJyBtYXkgZmluZCBNYWtlZmlsZQorICAgYXQgdGhlIHRvcC1sZXZlbCwgYW5kICJnaXQgbG9nICcqKi90Ki5zaCciIG1heSBmaW5kIGNvbW1pdHMgdGhhdAorICAgdG91Y2ggYSBzaGVsbCBzY3JpcHQgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCAidCIgYXQgYW55IGxldmVsKSBpbgorICAgZnV0dXJlIHZlcnNpb25zIG9mIEdpdCwgYnV0IHdlIGFyZSBub3QgdGhlcmUgeWV0LiAgQnkgYnVpbGRpbmcgd2l0aAorICAgVVNFX1dJTERNQVRDSCwgdXNpbmcgdGhlIHJlc3VsdGluZyBHaXQgZGFpbHkgYW5kIHJlcG9ydGluZyB3aGVuIHlvdQorICAgZmluZCBicmVha2FnZXMsIHlvdSBjYW4gaGVscCB1cyBnZXQgY2xvc2VyIHRvIHRoYXQgZ29hbC4KKworICogU29tZSByZWltcGxlbWVudGF0aW9ucyBvZiBHaXQgZG8gbm90IHdyaXRlIGFsbCB0aGUgc3RhdCBpbmZvIGJhY2sKKyAgIHRvIHRoZSBpbmRleCBkdWUgdG8gdGhlaXIgaW1wbGVtZW50YXRpb24gbGltaXRhdGlvbnMgKGUuZy4gamdpdCkuCisgICBBIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbiB0ZWxsIEdpdCB0byBpZ25vcmUgY2hhbmdlcyB0byBtb3N0IG9mCisgICB0aGUgc3RhdCBmaWVsZHMgYW5kIG9ubHkgcGF5IGF0dGVudGlvbiB0byBtdGltZSBhbmQgc2l6ZSwgd2hpY2gKKyAgIHRoZXNlIGltcGxlbWVudGF0aW9ucyBjYW4gcmVsaWFibHkgdXBkYXRlLiAgVGhpcyBjYW4gYmUgdXNlZCB0bworICAgYXZvaWQgZXhjZXNzaXZlIHJldmFsaWRhdGlvbiBvZiBjb250ZW50cy4KKworICogU29tZSBwbGF0Zm9ybXMgc2hpcCB3aXRoIG9sZCB2ZXJzaW9uIG9mIGV4cGF0IHdoZXJlIHhtbHBhcnNlLmgKKyAgIG5lZWRzIHRvIGJlIGluY2x1ZGVkIGluc3RlYWQgb2YgZXhwYXQuaDsgdGhlIGJ1aWxkIHByb2NlZHVyZSBoYXMKKyAgIGJlZW4gdGF1Z2h0IGFib3V0IHRoaXMuCisKKyAqICJtYWtlIGNsZWFuIiBvbiBwbGF0Zm9ybXMgdGhhdCBjYW5ub3QgY29tcHV0ZSBoZWFkZXIgZGVwZW5kZW5jaWVzCisgICBvbiB0aGUgZmx5IGRpZCBub3Qgd29yayB3aXRoIGltcGxlbWVudGF0aW9ucyBvZiAicm0iIHRoYXQgZG8gbm90CisgICBsaWtlIGFuIGVtcHR5IGFyZ3VtZW50IGxpc3QuCisKK0Fsc28gY29udGFpbnMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS44LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjguMSBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgcmVsZWFzZSBub3RlcyB0byB0aGVtIGZvcgorZGV0YWlscykuCisKKyAqIEFuIGVsZW1lbnQgb24gR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgbGlzdCB0aGF0IGRvZXMgbm90IG5hbWUgdGhlCisgICByZWFsIHBhdGggdG8gYSBkaXJlY3RvcnkgKGkuZS4gYSBzeW1ib2xpYyBsaW5rKSBjb3VsZCBoYXZlIGNhdXNlZAorICAgdGhlIEdJVF9ESVIgZGlzY292ZXJ5IGxvZ2ljIHRvIGVzY2FwZSB0aGUgY2VpbGluZy4KKworICogV2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFhERy1zdHlsZSAkSE9NRS8uY29uZmlnL2dpdC9jb25maWcgYW5kCisgICBmaW5kaW5nIHRoYXQgJEhPTUUvLmNvbmZpZy9naXQgaXMgYSBmaWxlLCB3ZSBnYXZlIGEgd3JvbmcgZXJyb3IKKyAgIG1lc3NhZ2UsIGluc3RlYWQgb2YgdHJlYXRpbmcgdGhlIGNhc2UgYXMgImEgY3VzdG9tIGNvbmZpZyBmaWxlIGRvZXMKKyAgIG5vdCBleGlzdCB0aGVyZSIgYW5kIG1vdmluZyBvbi4KKworICogVGhlIGJlaGF2aW91ciB2aXNpYmxlIHRvIHRoZSBlbmQgdXNlcnMgd2FzIGNvbmZ1c2luZywgd2hlbiB0aGV5CisgICBhdHRlbXB0IHRvIGtpbGwgYSBwcm9jZXNzIHNwYXduZWQgaW4gdGhlIGVkaXRvciB0aGF0IHdhcyBpbiB0dXJuCisgICBsYXVuY2hlZCBieSBHaXQgd2l0aCBTSUdJTlQgKG9yIFNJR1FVSVQpLCBhcyBHaXQgd291bGQgY2F0Y2ggdGhhdAorICAgc2lnbmFsIGFuZCBkaWUuICBXZSBpZ25vcmUgdGhlc2Ugc2lnbmFscyBub3cuCisgICAobWVyZ2UgMDM5OGZjMzQgcGYvZWRpdG9yLWlnbm9yZS1zaWdpbnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIGNoaWxkIHByb2Nlc3MgdGhhdCB3YXMga2lsbGVkIGJ5IGEgc2lnbmFsIChlLmcuIFNJR0lOVCkgd2FzCisgICByZXBvcnRlZCBpbiBhbiBpbmNvbnNpc3RlbnQgd2F5IGRlcGVuZGluZyBvbiBob3cgdGhlIHByb2Nlc3Mgd2FzCisgICBzcGF3bmVkIGJ5IHVzLCB3aXRoIG9yIHdpdGhvdXQgYSBzaGVsbCBpbiBiZXR3ZWVuLgorCisgKiBBZnRlciBmYWlsaW5nIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHVzaW5nIG1rc3RlbXAoKSwgZmFpbGluZworICAgcGF0aG5hbWUgd2FzIG5vdCByZXBvcnRlZCBjb3JyZWN0bHkgb24gc29tZSBwbGF0Zm9ybXMuCisKKyAqIFdlIHVzZWQgdG8gc3R1ZmYgInVzZXJAIiBhbmQgdGhlbiBhcHBlbmQgd2hhdCB3ZSByZWFkIGZyb20KKyAgIC9ldGMvbWFpbG5hbWUgdG8gY29tZSB1cCB3aXRoIGEgZGVmYXVsdCBlLW1haWwgaWRlbnQsIGJ1dCBhIGJ1ZworICAgbG9zdCB0aGUgInVzZXJAIiBwYXJ0LgorCisgKiBUaGUgYXR0cmlidXRlIG1lY2hhbmlzbSBkaWRuJ3QgYWxsb3cgbGltaXRpbmcgYXR0cmlidXRlcyB0byBiZQorICAgYXBwbGllZCB0byBvbmx5IGEgc2luZ2xlIGRpcmVjdG9yeSBpdHNlbGYgd2l0aCAicGF0aC8iIGxpa2UgdGhlCisgICBleGNsdWRlIG1lY2hhbmlzbSBkb2VzLiAgVGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyB0aGF0CisgICB3YXMgbWVyZ2VkIHRvICdtYWludCcgYW5kIDEuOC4xLjIgd2FzIHdpdGggYSBzZXZlcmUgcGVyZm9ybWFuY2UKKyAgIGRlZ3JhZGF0aW9ucyBhbmQgbmVlZHMgdG8gbWVyZ2UgYSBmaXgtdXAgdG9waWMuCisKKyAqIFRoZSBzbWFydCBIVFRQIGNsaWVudHMgZm9yZ290IHRvIHZlcmlmeSB0aGUgY29udGVudC10eXBlIHRoYXQgY29tZXMKKyAgIGJhY2sgZnJvbSB0aGUgc2VydmVyIHNpZGUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlcXVlc3QgaXMgYmVpbmcKKyAgIGhhbmRsZWQgcHJvcGVybHkuCisKKyAqICJnaXQgYW0iIGRpZCBub3QgcGFyc2UgZGF0ZXN0YW1wIGNvcnJlY3RseSBmcm9tIEhnIGdlbmVyYXRlZCBwYXRjaCwKKyAgIHdoZW4gaXQgaXMgcnVuIGluIGEgbG9jYWxlIG91dHNpZGUgQyAob3IgZW4pLgorCisgKiAiZ2l0IGFwcGx5IiBtaXNiZWhhdmVkIHdoZW4gZml4aW5nIHdoaXRlc3BhY2UgYnJlYWthZ2VzIGJ5IHJlbW92aW5nCisgICBleGNlc3MgdHJhaWxpbmcgYmxhbmsgbGluZXMuCisKKyAqICJnaXQgYXBwbHkgLS1zdW1tYXJ5IiBoYXMgYmVlbiB0YXVnaHQgdG8gbWFrZSBzdXJlIHRoZSBzaW1pbGFyaXR5CisgICB2YWx1ZSBzaG93biBpbiBpdHMgb3V0cHV0IGlzIHNlbnNpYmxlLCBldmVuIHdoZW4gdGhlIGlucHV0IGhhZCBhCisgICBib2d1cyB2YWx1ZS4KKworICogQSB0YXIgYXJjaGl2ZSBjcmVhdGVkIGJ5ICJnaXQgYXJjaGl2ZSIgcmVjb3JkZWQgYSBkaXJlY3RvcnkgaW4gYQorICAgd2F5IHRoYXQgbWFkZSBOZXRCU0QncyBpbXBsZW1lbnRhdGlvbiBvZiAidGFyIiBzb21ldGltZXMgdW5oYXBweS4KKworICogImdpdCBhcmNoaXZlIiBkaWQgbm90IHJlY29yZCB1bmNvbXByZXNzZWQgc2l6ZSBpbiB0aGUgaGVhZGVyIHdoZW4KKyAgIHN0cmVhbWluZyBhIHppcCBhcmNoaXZlLCB3aGljaCBjb25mdXNlZCBzb21lIGltcGxlbWVudGF0aW9ucyBvZiB1bnppcC4KKworICogImdpdCBhcmNoaXZlIiBkaWQgbm90IHBhcnNlIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGluIHRhci4qIG5hbWVzcGFjZQorICAgY29ycmVjdGx5LgorICAgKG1lcmdlIGIzODczYzMgamsvY29uZmlnLXBhcnNpbmctY2xlYW51cCBsYXRlciB0byBtYWludCkuCisKKyAqIEF0dGVtcHQgdG8gImJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24iIGFuIGV4aXN0aW5nIGJyYW5jaCwgd2hpbGUKKyAgIGJlaW5nIG9uIGEgZGV0YWNoZWQgSEVBRCwgZXJyb3JlZCBvdXQuCisKKyAqICJnaXQgY2xlYW4iIHNob3dlZCB3aGF0IGl0IHdhcyBnb2luZyB0byBkbywgYnV0IHNvbWV0aW1lcyBlbmQgdXAKKyAgIGZpbmRpbmcgdGhhdCBpdCB3YXMgbm90IGFsbG93ZWQgdG8gZG8gc28sIHdoaWNoIHJlc3VsdGVkIGluIGEKKyAgIGNvbmZ1c2luZyBvdXRwdXQgKGUuZy4gYWZ0ZXIgc2F5aW5nIHRoYXQgaXQgd2lsbCByZW1vdmUgYW4KKyAgIHVudHJhY2tlZCBkaXJlY3RvcnksIGl0IGZvdW5kIGFuIGVtYmVkZGVkIGdpdCByZXBvc2l0b3J5IHRoZXJlCisgICB3aGljaCBpdCBpcyBub3QgYWxsb3dlZCB0byByZW1vdmUpLiAgSXQgbm93IHBlcmZvcm1zIHRoZSBhY3Rpb25zCisgICBhbmQgdGhlbiByZXBvcnRzIHRoZSBvdXRjb21lIG1vcmUgZmFpdGhmdWxseS4KKworICogV2hlbiAiZ2l0IGNsb25lIC0tc2VwYXJhdGUtZ2l0LWRpcj0kb3Zlcl90aGVyZSIgaXMgaW50ZXJydXB0ZWQsIGl0CisgICBmYWlsZWQgdG8gcmVtb3ZlIHRoZSByZWFsIGxvY2F0aW9uIG9mIHRoZSAkR0lUX0RJUiBpdCBjcmVhdGVkLgorICAgVGhpcyB3YXMgbW9zdCB2aXNpYmxlIHdoZW4gaW50ZXJydXB0aW5nIGEgc3VibW9kdWxlIHVwZGF0ZS4KKworICogImdpdCBjdnNpbXBvcnQiIG1pc2hhbmRsZWQgdGltZXN0YW1wcyBhdCBEU1QgYm91bmRhcnkuCisKKyAqIFdlIHVzZWQgdG8gaGF2ZSBhbiBhcmJpdHJhcnkgMzIgbGltaXQgZm9yIGNvbWJpbmVkIGRpZmYgaW5wdXQsCisgICByZXN1bHRpbmcgaW4gaW5jb3JyZWN0IG51bWJlciBvZiBsZWFkaW5nIGNvbG9ucyBzaG93biB3aGVuIHNob3dpbmcKKyAgIHRoZSAiLS1yYXcgLS1jYyIgb3V0cHV0LgorCisgKiAiZ2l0IGZldGNoIC0tZGVwdGgiIHdhcyBicm9rZW4gaW4gYXQgbGVhc3QgdGhyZWUgd2F5cy4gIFRoZQorICAgcmVzdWx0aW5nIGhpc3Rvcnkgd2FzIGRlZXBlciB0aGFuIHNwZWNpZmllZCBieSBvbmUgY29tbWl0LCBpdCB3YXMKKyAgIHVuY2xlYXIgaG93IHRvIHdpcGUgdGhlIHNoYWxsb3duZXNzIG9mIHRoZSByZXBvc2l0b3J5IHdpdGggdGhlCisgICBjb21tYW5kLCBhbmQgZG9jdW1lbnRhdGlvbiB3YXMgbWlzbGVhZGluZy4KKyAgIChtZXJnZSBjZmI3MGUxIG5kL2ZldGNoLWRlcHRoLWlzLWJyb2tlbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC0tYWxsIC1wIiB0aGF0IHdhbGtlZCByZWZzL25vdGVzL3RleHRjb252LyByZWYgY2FuIGxhdGVyCisgICB0cnkgdG8gdXNlIHRoZSB0ZXh0Y29udiBkYXRhIGluY29ycmVjdGx5IGFmdGVyIGl0IGdldHMgZnJlZWQuCisKKyAqIFdlIGZvcmdvdCB0byBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIHJlYWRpbmcgZnJvbSAiZ3BnIiBvdXRwdXQsCisgICBraWxsaW5nICJnaXQgbG9nIC0tc2hvdy1zaWduYXR1cmUiIG9uIGEgbG9uZyBoaXN0b3J5LgorCisgKiBUaGUgd2F5ICJnaXQgc3ZuIiBhc2tlZCBmb3IgcGFzc3dvcmQgdXNpbmcgU1NIX0FTS1BBU1MgYW5kCisgICBHSVRfQVNLUEFTUyB3YXMgbm90IGluIGxpbmUgd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLgorCisgKiBUaGUgLS1ncmFwaCBjb2RlIGZlbGwgaW50byBpbmZpbml0ZSBsb29wIHdoZW4gYXNrZWQgdG8gZG8gd2hhdCB0aGUKKyAgIGNvZGUgZGlkIG5vdCBleHBlY3QuCisKKyAqIGh0dHAgdHJhbnNwb3J0IHdhcyB3cm9uZyB0byBhc2sgZm9yIHRoZSB1c2VybmFtZSB3aGVuIHRoZQorICAgYXV0aGVudGljYXRpb24gaXMgZG9uZSBieSBjZXJ0aWZpY2F0ZSBpZGVudGl0eS4KKworICogImdpdCBwYWNrLXJlZnMiIHRoYXQgcmFuIGluIHBhcmFsbGVsIHRvIGFub3RoZXIgcHJvY2VzcyB0aGF0CisgICBjcmVhdGVkIG5ldyByZWZzIGhhZCBhIG5hc3R5IHJhY2UuCisKKyAqIFJlYmFzaW5nIHRoZSBoaXN0b3J5IG9mIHN1cGVycHJvamVjdCB3aXRoIGNoYW5nZSBpbiB0aGUgc3VibW9kdWxlCisgICBoYXMgYmVlbiBicm9rZW4gc2luY2UgdjEuNy4xMi4KKworICogQWZ0ZXIgImdpdCBhZGQgLU4iIGFuZCB0aGVuIHdyaXRpbmcgYSB0cmVlIG9iamVjdCBvdXQgb2YgdGhlCisgICBpbmRleCwgdGhlIGNhY2hlLXRyZWUgZGF0YSBzdHJ1Y3R1cmUgZ290IGNvcnJ1cHRlZC4KKworICogImdpdCBjbG9uZSIgdXNlZCB0byBhbGxvdyAtLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpcj0kdGhlcmUKKyAgIG9wdGlvbnMgYXQgdGhlIHNhbWUgdGltZSwgd2hpY2ggd2FzIG5vbnNlbnNpY2FsLgorCisgKiAiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyIgbG9zdCBlbXB0eSBtZXJnZXMgaW4gcmVjZW50IHZlcnNpb25zCisgICBvZiBHaXQuCisKKyAqICJnaXQgbWVyZ2UgLS1uby1lZGl0IiBjb21wdXRlZCB3aG8gd2VyZSBpbnZvbHZlZCBpbiB0aGUgd29yayBkb25lCisgICBvbiB0aGUgc2lkZSBicmFuY2gsIGV2ZW4gdGhvdWdoIHRoYXQgaW5mb3JtYXRpb24gaXMgdG8gYmUgZGlzY2FyZGVkCisgICB3aXRob3V0IGdldHRpbmcgc2VlbiBpbiB0aGUgZWRpdG9yLgorCisgKiAiZ2l0IG1lcmdlIiBzdGFydGVkIGNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2sgbGlrZSAiZ2l0CisgICBjb21taXQiIGRvZXMgc29tZSB0aW1lIGFnbywgYnV0IGZvcmdvdCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoZSBleGl0CisgICBzdGF0dXMgb2YgdGhlIGhvb2suCisKKyAqIEEgZmFpbHVyZSB0byBwdXNoIGR1ZSB0byBub24tZmYgd2hpbGUgb24gYW4gdW5ib3JuIGJyYW5jaAorICAgZGVyZWZlcmVuY2VkIGEgTlVMTCBwb2ludGVyIHdoZW4gc2hvd2luZyBhbiBlcnJvciBtZXNzYWdlLgorCisgKiBXaGVuIHVzZXJzIHNwZWxsICJjYzoiIGluIGxvd2VyY2FzZSBpbiB0aGUgZmFrZSAiaGVhZGVyIiBpbiB0aGUKKyAgIHRyYWlsZXIgcGFydCwgImdpdCBzZW5kLWVtYWlsIiBmYWlsZWQgdG8gcGljayB1cCB0aGUgYWRkcmVzc2VzIGZyb20KKyAgIHRoZXJlLiBBcyBlLW1haWwgaGVhZGVycyBmaWVsZCBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSwgdGhpcworICAgc2NyaXB0IHNob3VsZCBmb2xsb3cgc3VpdCBhbmQgdHJlYXQgImNjOiIgYW5kICJDYzoiIHRoZSBzYW1lIHdheS4KKworICogT3V0cHV0IGZyb20gImdpdCBzdGF0dXMgLS1pZ25vcmVkIiBzaG93ZWQgYW4gdW5leHBlY3RlZCBpbnRlcmFjdGlvbgorICAgd2l0aCAiLS11bnRyYWNrZWQiLgorCisgKiAiZ2l0d2ViIiwgd2hlbiBzb3J0aW5nIGJ5IGFnZSB0byBzaG93IHJlcG9zaXRvcmllcyB3aXRoIG5ldworICAgYWN0aXZpdGllcyBmaXJzdCwgdXNlZCB0byBzb3J0IHJlcG9zaXRvcmllcyB3aXRoIGFic29sdXRlbHkKKyAgIG5vdGhpbmcgaW4gaXQgZWFybHksIHdoaWNoIHdhcyBub3QgdmVyeSB1c2VmdWwuCisKKyAqICJnaXR3ZWIiJ3MgY29kZSB0byBzYW5pdGl6ZSBjb250cm9sIGNoYXJhY3RlcnMgYmVmb3JlIHBhc3NpbmcgaXQgdG8KKyAgICJoaWdobGlnaHQiIGZpbHRlciBsb3N0IGtub3duLXRvLWJlLXNhZmUgY29udHJvbCBjaGFyYWN0ZXJzIGJ5CisgICBtaXN0YWtlLgorCisgKiAiZ2l0d2ViIiBwYWdlcyBzZXJ2ZWQgb3ZlciBIVFRQUywgd2hlbiBjb25maWd1cmVkIHRvIHNob3cgcGljb24gb3IKKyAgIGdyYXZhdGFyLCByZWZlcnJlZCB0byB0aGVzZSBleHRlcm5hbCByZXNvdXJjZXMgdG8gYmUgZmV0Y2hlZCB2aWEKKyAgIEhUVFAsIHJlc3VsdGluZyBpbiBtaXhlZCBjb250ZW50cyB3YXJuaW5nIGluIGJyb3dzZXJzLgorCisgKiBXaGVuIGEgbGluZSB0byBiZSB3cmFwcGVkIGhhcyBhIHNvbGlkIHJ1biBvZiBub24gc3BhY2UgY2hhcmFjdGVycworICAgd2hvc2UgbGVuZ3RoIGV4YWN0bHkgaXMgdGhlIHdyYXAgd2lkdGgsICJnaXQgc2hvcnRsb2cgLXciIGZhaWxlZAorICAgdG8gYWRkIGEgbmV3bGluZSBhZnRlciBzdWNoIGEgbGluZS4KKworICogQ29tbWFuZCBsaW5lIGNvbXBsZXRpb24gbGVha2VkIGFuIHVubmVjZXNzYXJ5IGVycm9yIG1lc3NhZ2Ugd2hpbGUKKyAgIGxvb2tpbmcgZm9yIHBvc3NpYmxlIG1hdGNoZXMgd2l0aCBwYXRocyBpbiA8dHJlZS1pc2g+LgorCisgKiBDb21tYW5kIGxpbmUgY29tcGxldGlvbiBmb3IgInRjc2giIGVtaXR0ZWQgYW4gdW53YW50ZWQgc3BhY2UKKyAgIGFmdGVyIGNvbXBsZXRpbmcgYSBzaW5nbGUgZGlyZWN0b3J5IG5hbWUuCisKKyAqIENvbW1hbmQgbGluZSBjb21wbGV0aW9uIGNvZGUgd2FzIGluYWR2ZXJ0ZW50bHkgbWFkZSBpbmNvbXBhdGlibGUgd2l0aAorICAgb2xkZXIgdmVyc2lvbnMgb2YgYmFzaCBieSB1c2luZyBhIG5ld2VyIGFycmF5IG5vdGF0aW9uLgorCisgKiAiZ2l0IHB1c2giIHdhcyB0YXVnaHQgdG8gcmVmdXNlIHVwZGF0aW5nIHRoZSBicmFuY2ggdGhhdCBpcworICAgY3VycmVudGx5IGNoZWNrZWQgb3V0IGxvbmcgdGltZSBhZ28sIGJ1dCB0aGUgdXNlciBtYW51YWwgd2FzIGxlZnQKKyAgIHN0YWxlLgorICAgKG1lcmdlIDUwOTk1ZWQgd2svbWFuLWRlbnktY3VycmVudC1icmFuY2gtaXMtZGVmYXVsdC10aGVzZS1kYXlzIGxhdGVyIHRvIG1haW50KS4KKworICogU29tZSBzaGVsbHMgZG8gbm90IGJlaGF2ZSBjb3JyZWN0bHkgd2hlbiBJRlMgaXMgdW5zZXQ7IHdvcmsgaXQKKyAgIGFyb3VuZCBieSBleHBsaWNpdGx5IHNldHRpbmcgaXQgdG8gdGhlIGRlZmF1bHQgdmFsdWUuCisKKyAqIFNvbWUgc2NyaXB0ZWQgcHJvZ3JhbXMgd3JpdHRlbiBpbiBQeXRob24gZGlkIG5vdCBnZXQgdXBkYXRlZCB3aGVuCisgICBQWVRIT05fUEFUSCBjaGFuZ2VkLgorICAgKGNoZXJyeS1waWNrIDk2YTQ2NDdmY2E1NDAzMTk3NGNkNmFkMSBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gYXV0b2NvbmYgaXMgdXNlZCwgYW55IGJ1aWxkIG9uIGEgZGlmZmVyZW50IGNvbW1pdCBhbHdheXMgcmFuCisgICAiY29uZmlnLnN0YXR1cyAtLXJlY2hlY2siIGV2ZW4gd2hlbiB1bm5lY2Vzc2FyeS4KKworICogQSBmaXggd2FzIGFkZGVkIHRvIHRoZSBidWlsZCBwcm9jZWR1cmUgdG8gd29yayBhcm91bmQgYnVnZ3kKKyAgIHZlcnNpb25zIG9mIGNjYWNoZSBicm9rZSB0aGUgYXV0by1nZW5lcmF0aW9uIG9mIGRlcGVuZGVuY2llcywgd2hpY2gKKyAgIHVuZm9ydHVuYXRlbHkgaXMgc3RpbGwgcmVsZXZhbnQgYmVjYXVzZSBzb21lIHBlb3BsZSB1c2UgYW5jaWVudAorICAgZGlzdHJvcy4KKworICogVGhlIGF1dG9jb25mIHN1YnN5c3RlbSBwYXNzZWQgLS1tYW5kaXIgZG93biB0byBnZW5lcmF0ZWQKKyAgIGNvbmZpZy5tYWsuYXV0b2dlbiBidXQgZm9yZ290IHRvIGRvIHRoZSBzYW1lIGZvciAtLWh0bWxkaXIuCisgICAobWVyZ2UgNTVkOWJmMCBjdC9hdXRvY29uZi1odG1sZGlyIGxhdGVyIHRvIG1haW50KS4KKworICogQSBjaGFuZ2UgbWFkZSBvbiB2MS44LjEueCBtYWludGVuYW5jZSB0cmFjayBoYWQgYSBuYXN0eSByZWdyZXNzaW9uCisgICB0byBicmVhayB0aGUgYnVpbGQgd2hlbiBhdXRvY29uZiBpcyB1c2VkLgorICAgKG1lcmdlIDdmMWI2OTcgam4vbGVzcy1yZWNvbmZpZ3VyZSBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIGhhdmUgYmVlbiBjYXJyeWluZyBhIHRyYW5zbGF0ZWQgYW5kIGxvbmctdW5tYWludGFpbmVkIGNvcHkgb2YgYW4KKyAgIG9sZCB2ZXJzaW9uIG9mIHRoZSB0dXRvcmlhbDsgcmVtb3ZlZC4KKworICogdDAwNTAgaGFkIHRlc3RzIGV4cGVjdGluZyBmYWlsdXJlcyBmcm9tIGEgYnVnIHRoYXQgd2FzIGZpeGVkIHNvbWUKKyAgIHRpbWUgYWdvLgorCisgKiB0NDAxNCwgdDk1MDIgYW5kIHQwMjAwIHRlc3RzIGhhZCB2YXJpb3VzIHBvcnRhYmlsaXR5IGlzc3VlcyB0aGF0CisgICBicm9rZSBvbiBPcGVuQlNELgorCisgKiB0OTAyMCBhbmQgdDM2MDAgdGVzdHMgaGFkIHZhcmlvdXMgcG9ydGFiaWxpdHkgaXNzdWVzLgorCisgKiB0OTIwMCBydW5zICJjdnMgaW5pdCIgb24gYSBkaXJlY3RvcnkgdGhhdCBhbHJlYWR5IGV4aXN0cywgYnV0IGEKKyAgIHBsYXRmb3JtIGNhbiBjb25maWd1cmUgdGhpcyBmYWlsIGZvciB0aGUgY3VycmVudCB1c2VyIChlLmcuIHlvdQorICAgbmVlZCB0byBiZSBpbiB0aGUgY3ZzYWRtaW4gZ3JvdXAgb24gTmV0QlNEIDYuMCkuCisKKyAqIHQ5MDIwIGFuZCB0OTgxMCBoYWQgYSBmZXcgbm9uLXBvcnRhYmxlIHNoZWxsIHNjcmlwdCBjb25zdHJ1Y3QuCisKKyAqIFNjcmlwdHMgdG8gdGVzdCBiYXNoIGNvbXBsZXRpb24gd2FzIGluaGVyZW50bHkgZmxha3kgYXMgaXQgd2FzCisgICBhZmZlY3RlZCBieSB3aGF0ZXZlciByYW5kb20gdGhpbmdzIHRoZSB1c2VyIG1heSBoYXZlIG9uICRQQVRILgorCisgKiBBbiBlbGVtZW50IG9uIEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTIGNvdWxkIGJlIGEgImxvZ2ljYWwiIHBhdGhuYW1lCisgICB0aGF0IHVzZXMgYSBzeW1ib2xpYyBsaW5rIHRvIHBvaW50IGF0IHNvbWV3aGVyZSBlbHNlIChlLmcuIC9ob21lL21lCisgICB0aGF0IHBvaW50cyBhdCAvbmV0L2hvc3QvZXhwb3J0L2hvbWUvbWUsIGFuZCB0aGUgbGF0dGVyIGRpcmVjdG9yeQorICAgaXMgYXV0b21vdW50ZWQpLiBFYXJsaWVyIHdoZW4gR2l0IHNhdyBzdWNoIGEgcGF0aG5hbWUgZS5nLiAvaG9tZS9tZQorICAgb24gdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlICJjZWlsaW5nIiBtZWNoYW5pc20gZGlkIG5vdCB0YWtlCisgICBlZmZlY3QuIFdpdGggdGhpcyByZWxlYXNlICh0aGUgZml4IGhhcyBhbHNvIGJlZW4gbWVyZ2VkIHRvIHRoZQorICAgdjEuOC4xLnggbWFpbnRlbmFuY2Ugc2VyaWVzKSwgZWxlbWVudHMgb24gR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMKKyAgIGFyZSBieSBkZWZhdWx0IGNoZWNrZWQgZm9yIHN1Y2ggYWxpYXNpbmcgY29taW5nIGZyb20gc3ltYm9saWMKKyAgIGxpbmtzLiBBcyB0aGlzIG5lZWRzIHRvIGFjdHVhbGx5IHJlc29sdmUgc3ltYm9saWMgbGlua3MgZm9yIGVhY2gKKyAgIGVsZW1lbnQgb24gdGhlIEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTLCB5b3UgY2FuIGRpc2FibGUgdGhpcworICAgbWVjaGFuaXNtIGZvciBzb21lIGVsZW1lbnRzIGJ5IGxpc3RpbmcgdGhlbSBhZnRlciBhbiBlbXB0eSBlbGVtZW50CisgICBvbiB0aGUgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMuIGUuZy4gU2V0dGluZyAvaG9tZS9tZTo6L2hvbWUvaGltIHRvCisgICBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyBtYWtlcyBHaXQgcmVzb2x2ZSBzeW1ib2xpYyBsaW5rcyBpbgorICAgL2hvbWUvbWUgd2hlbiBjaGVja2luZyBpZiB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgdW5kZXIgL2hvbWUvbWUsCisgICBidXQgZG9lcyBub3QgZG8gc28gZm9yIC9ob21lL2hpbS4KKyAgIChtZXJnZSA3ZWMzMGFhIG1oL21haW50LWNlaWwtYWJzb2x1dGUgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg2NjM3YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMS50eHQKQEAgLTAsMCArMSwxNCBAQAorR2l0IHYxLjguMy4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdoZW4gJEhPTUUgaXMgbWlzY29uZmlndXJlZCB0byBwb2ludCBhdCBhbiB1bnJlYWRhYmxlIGRpcmVjdG9yeSwgd2UKKyAgIHVzZWQgdG8gY29tcGxhaW4gYW5kIGRpZS4gVGhlIGNoZWNrIGhhcyBiZWVuIGxvb3NlbmVkLgorCisgKiBIYW5kbGluZyBvZiBuZWdhdGl2ZSBleGNsdWRlIHBhdHRlcm4gZm9yIGRpcmVjdG9yaWVzICIhZGlyIiB3YXMKKyAgIGJyb2tlbiBpbiB0aGUgdXBkYXRlIHRvIHYxLjguMy4KKworQWxzbyBjb250YWlucyBhIGhhbmRmdWwgb2YgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcywgZG9jdW1lbnRhdGlvbgordXBkYXRlcywgdXBkYXRlcyB0byB0aGUgdGVzdCBzdWl0ZSwgZXRjLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhZTE0MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuMi50eHQKQEAgLTAsMCArMSw1OSBAQAorR2l0IHYxLjguMy4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguMy4xCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBDbG9uaW5nIHdpdGggImdpdCBjbG9uZSAtLWRlcHRoIE4iIHdoaWxlIGZldGNoLmZzY2tvYmplY3RzIChvcgorICAgdHJhbnNmZXIuZnNja29iamVjdHMpIGlzIHNldCB0byB0cnVlIGRpZCBub3QgdGVsbCB0aGUgY3V0LW9mZgorICAgcG9pbnRzIG9mIHRoZSBzaGFsbG93IGhpc3RvcnkgdG8gdGhlIHByb2Nlc3MgdGhhdCB2YWxpZGF0ZXMgdGhlCisgICBvYmplY3RzIGFuZCB0aGUgaGlzdG9yeSByZWNlaXZlZCwgY2F1c2luZyB0aGUgdmFsaWRhdGlvbiB0byBmYWlsLgorCisgKiAiZ2l0IGNoZWNrb3V0IGZvbyIgRFdJTXMgdGhlIGludGVuZGVkICJ1cHN0cmVhbSIgYW5kIHR1cm5zIGl0IGludG8KKyAgICJnaXQgY2hlY2tvdXQgLXQgLWIgZm9vIHJlbW90ZXMvb3JpZ2luL2ZvbyIuIFRoaXMgY29kZXBhdGggaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gY29ycmVjdGx5IHRha2UgZXhpc3RpbmcgcmVtb3RlIGRlZmluaXRpb25zIGludG8gYWNjb3VudC4KKworICogImdpdCBmZXRjaCIgaW50byBhIHNoYWxsb3cgcmVwb3NpdG9yeSBmcm9tIGEgcmVwb3NpdG9yeSB0aGF0IGRvZXMKKyAgIG5vdCBrbm93IGFib3V0IHRoZSBzaGFsbG93IGJvdW5kYXJ5IGNvbW1pdHMgKGUuZy4gYSBkaWZmZXJlbnQgZm9yaworICAgZnJvbSB0aGUgcmVwb3NpdG9yeSB0aGUgY3VycmVudCBzaGFsbG93IHJlcG9zaXRvcnkgd2FzIGNsb25lZCBmcm9tKQorICAgZGlkIG5vdCB3b3JrIGNvcnJlY3RseS4KKworICogImdpdCBzdWJ0cmVlIiAoaW4gY29udHJpYi8pIGhhZCBvbmUgY29kZXBhdGggd2l0aCBsb29zZSBlcnJvcgorICAgY2hlY2tzIHRvIGxvc2UgZGF0YSBhdCB0aGUgcmVtb3RlIHNpZGUuCisKKyAqICJnaXQgbG9nIC0tYW5jZXN0cnktcGF0aCBBLi4uQiIgZGlkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLCBhcyBpdCBkaWQKKyAgIG5vdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBmYWN0IHRoYXQgdGhlIG1lcmdlIGJhc2UgYmV0d2VlbiBBIGFuZCBCCisgICB3YXMgdGhlIGJvdHRvbSBvZiB0aGUgcmFuZ2UgYmVpbmcgc3BlY2lmaWVkLgorCisgKiAiZ2l0IGRpZmYgLWMgLXAiIHdhcyBub3Qgc2hvd2luZyBhIGRlbGV0ZWQgbGluZSBmcm9tIGEgaHVuayB3aGVuCisgICBhbm90aGVyIGh1bmsgaW1tZWRpYXRlbHkgYmVnaW5zIHdoZXJlIHRoZSBlYXJsaWVyIG9uZSBlbmRzLgorCisgKiAiZ2l0IG1lcmdlIEB7LTF9fjIyIiB3YXMgcmV3cml0dGVuIHRvICJnaXQgbWVyZ2UgZnJvdHpAezF9fjIyIgorICAgaW5jb3JyZWN0bHkgd2hlbiB5b3VyIHByZXZpb3VzIGJyYW5jaCB3YXMgImZyb3R6IiAoaXQgc2hvdWxkIGJlCisgICByZXdyaXR0ZW4gdG8gImdpdCBtZXJnZSBmcm90en4yMiIgaW5zdGVhZCkuCisKKyAqICJnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtbSAnJyIgc2hvdWxkIG5vdCBzdGFydCBhbgorICAgZWRpdG9yLgorCisgKiAiZ2l0IHB1c2ggLS1bbm8tXXZlcmlmeSIgd2FzIG5vdCBkb2N1bWVudGVkLgorCisgKiBBbiBlbnRyeSBmb3IgImZpbGU6Ly8iIHNjaGVtZSBpbiB0aGUgZW51bWVyYXRpb24gb2YgVVJMIHR5cGVzIEdpdAorICAgY2FuIHRha2UgaW4gdGhlIEhUTUwgZG9jdW1lbnRhdGlvbiB3YXMgbWFkZSBpbnRvIGEgY2xpY2thYmxlIGxpbmsKKyAgIGJ5IG1pc3Rha2UuCisKKyAqIHpzaCBwcm9tcHQgc2NyaXB0IHRoYXQgYm9ycm93ZWQgZnJvbSBiYXNoIHByb21wdCBzY3JpcHQgZGlkIG5vdAorICAgd29yayBkdWUgdG8gc2xpZ2h0IGRpZmZlcmVuY2VzIGluIGFycmF5IHZhcmlhYmxlIG5vdGF0aW9uIGJldHdlZW4KKyAgIHRoZXNlIHR3byBzaGVsbHMuCisKKyAqIFRoZSBiYXNoIHByb21wdCBjb2RlIChpbiBjb250cmliLykgZGlzcGxheWVkIHRoZSBuYW1lIG9mIHRoZSBicmFuY2gKKyAgIGJlaW5nIHJlYmFzZWQgd2hlbiAicmViYXNlIC1pLy1tLy1wIiBtb2RlcyBhcmUgaW4gdXNlLCBidXQgbm90IHRoZQorICAgcGxhaW4gdmFuaWxsYSAicmViYXNlIi4KKworICogImdpdCBwdXNoICR0aGVyZSBIRUFEOmJyYW5jaCIgZGlkIG5vdCByZXNvbHZlIEhFQUQgZWFybHkgZW5vdWdoLCBzbworICAgaXQgd2FzIGVhc3kgdG8gZmxpcCBpdCBhcm91bmQgd2hpbGUgcHVzaCBpcyBzdGlsbCBnb2luZyBvbiBhbmQgcHVzaAorICAgb3V0IGEgYnJhbmNoIHRoYXQgdGhlIHVzZXIgZGlkIG5vdCBvcmlnaW5hbGx5IGludGVuZGVkIHdoZW4gdGhlCisgICBjb21tYW5kIHdhcyBzdGFydGVkLgorCisgKiAiZGlmZnRvb2wgLS1kaXItZGlmZiIgZGlkIG5vdCBjb3B5IGJhY2sgY2hhbmdlcyBtYWRlIGJ5IHRoZQorICAgZW5kLXVzZXIgaW4gdGhlIGRpZmYgdG9vbCBiYWNrZW5kIHRvIHRoZSB3b3JraW5nIHRyZWUgaW4gc29tZQorICAgY2FzZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmE0ZjRkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy4zLnR4dApAQCAtMCwwICsxLDQ3IEBACitHaXQgdjEuOC4zLjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC4zLjIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgYXBwbHkiIHBhcnNlZCBwYXRjaGVzIHRoYXQgYWRkIG5ldyBmaWxlcywgZ2VuZXJhdGVkIGJ5IHByb2dyYW1zCisgICBvdGhlciB0aGFuIEdpdCwgaW5jb3JyZWN0bHkuICBUaGlzIGlzIGFuIG9sZCBicmVha2FnZSBpbiB2MS43LjExLgorCisgKiBPbGRlciBjVVJMIHdhbnRlZCBwaWVjZSBvZiBtZW1vcnkgd2UgY2FsbCBpdCB3aXRoIHRvIGJlIHN0YWJsZSwgYnV0CisgICB3ZSB1cGRhdGVkIHRoZSBhdXRoIG1hdGVyaWFsIGFmdGVyIGhhbmRpbmcgaXQgdG8gYSBjYWxsLgorCisgKiAiZ2l0IHB1bGwiIGludG8gbm90aGluZyB0cmFzaGVkICJsb2NhbCBjaGFuZ2VzIiB0aGF0IHdlcmUgaW4gdGhlCisgICBpbmRleC4KKworICogTWFueSAiZ2l0IHN1Ym1vZHVsZSIgb3BlcmF0aW9ucyBkaWQgbm90IHdvcmsgb24gYSBzdWJtb2R1bGUgYXQgYQorICAgcGF0aCB3aG9zZSBuYW1lIGlzIG5vdCBpbiBBU0NJSS4KKworICogImNoZXJyeS1waWNrIiBoYWQgYSBzbWFsbCBsZWFrIGluIGl0cyBlcnJvciBjb2RlcGF0aC4KKworICogTG9naWMgdXNlZCBieSBnaXQtc2VuZC1lbWFpbCB0byBzdXBwcmVzcyBjYyBtaXNoYW5kbGVkIG5hbWVzIGxpa2UKKyAgICJBIFUuIFRob3IiIDxhdXRob3JAZXhhbXBsZS54ej4sIHdoZXJlIHRoZSBodW1hbiByZWFkYWJsZSBwYXJ0CisgICBuZWVkcyB0byBiZSBxdW90ZWQgKHRoZSB1c2VyIGlucHV0IG1heSBub3QgaGF2ZSB0aGUgZG91YmxlIHF1b3RlcworICAgYXJvdW5kIHRoZSBuYW1lLCBhbmQgY29tcGFyaXNvbiB3YXMgZG9uZSBiZXR3ZWVuIHF1b3RlZCBhbmQKKyAgIHVucXVvdGVkIHN0cmluZ3MpLiAgSXQgYWxzbyBtaXNoYW5kbGVkIG5hbWVzIHRoYXQgbmVlZCBSRkMyMDQ3CisgICBxdW90aW5nLgorCisgKiAiZ2l0d2ViIiBmb3Jnb3QgdG8gY2xlYXIgYSBnbG9iYWwgdmFyaWFibGUgJHNlYXJjaF9yZWdleHAgdXBvbiBlYWNoCisgICByZXF1ZXN0LCBtaXN0YWtlbmx5IGNhcnJ5aW5nIG92ZXIgdGhlIHByZXZpb3VzIHNlYXJjaCB0byBhIG5ldyBvbmUKKyAgIHdoZW4gdXNlZCBhcyBhIHBlcnNpc3RlbnQgQ0dJLgorCisgKiBUaGUgd2lsZG1hdGNoIGVuZ2luZSBkaWQgbm90IGhvbm9yIFdNX0NBU0VGT0xEIG9wdGlvbiBjb3JyZWN0bHkuCisKKyAqICJnaXQgbG9nIC1jIC0tZm9sbG93ICRwYXRoIiBzZWdmYXVsdGVkIHVwb24gaGl0dGluZyB0aGUgY29tbWl0IHRoYXQKKyAgIHJlbmFtZWQgdGhlICRwYXRoIGJlaW5nIGZvbGxvd2VkLgorCisgKiBXaGVuIGEgcmVmbG9nIG5vdGF0aW9uIGlzIHVzZWQgZm9yIGltcGxpY2l0ICJjdXJyZW50IGJyYW5jaCIsCisgICBlLmcuICJnaXQgbG9nIEB7dX0iLCB3ZSBkaWQgbm90IHNheSB3aGljaCBicmFuY2ggYW5kIHdvcnNlIHNhaWQKKyAgICJicmFuY2ggJyciIGluIHRoZSBlcnJvciBtZXNzYWdlcy4KKworICogTWFjIE9TIFggZG9lcyBub3QgbGlrZSB0byB3cml0ZSgyKSBtb3JlIHRoYW4gSU5UX01BWCBudW1iZXIgb2YKKyAgIGJ5dGVzOyB3b3JrIGl0IGFyb3VuZCBieSBjaG9wcGluZyB3cml0ZSgyKSBpbnRvIHNtYWxsZXIgcGllY2VzLgorCisgKiBOZXdlciBNYWNPUyBYIGVuY291cmFnZXMgdGhlIHByb2dyYW1zIHRvIGNvbXBpbGUgYW5kIGxpbmsgd2l0aAorICAgdGhlaXIgQ29tbW9uQ3J5cHRvLCBub3Qgd2l0aCBPcGVuU1NMLgorCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgbWlub3IgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmMTA2ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjMuNC50eHQKQEAgLTAsMCArMSwyMCBAQAorR2l0IHYxLjguMy40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgdXBkYXRlIGlzIG1vc3RseSB0byBwcm9wYWdhdGUgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgdGVzdAordXBkYXRlcyBmcm9tIHRoZSBtYXN0ZXIgZnJvbnQgYmFjayB0byB0aGUgbWFpbnRlbmFuY2UgdHJhY2suCisKK0ZpeGVzIHNpbmNlIHYxLjguMy4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgYmlzZWN0IGxvZyBsaXN0ZWQgaW5jb3JyZWN0IGNvbW1pdHMgd2hlbiBiaXNlY3Rpb24gZW5kcyB3aXRoCisgICBvbmx5IHNraXBwZWQgb25lcy4KKworICogVGhlIHRlc3QgY292ZXJhZ2UgZnJhbWV3b3JrIHdhcyBsZWZ0IGJyb2tlbiBmb3Igc29tZSB0aW1lLgorCisgKiBUaGUgdGVzdCBzdWl0ZSBmb3IgSFRUUCB0cmFuc3BvcnQgZGlkIG5vdCBydW4gd2l0aCBBcGFjaGUgMi40LgorCisgKiAiZ2l0IGRpZmYiIHVzZWQgdG8gZmFpbCB3aGVuIGNvcmUuc2FmZWNybGYgaXMgc2V0IGFuZCB0aGUgd29ya2luZworICAgdHJlZSBjb250ZW50cyBoYWQgbWl4ZWQgQ1JMRi9MRiBsaW5lIGVuZGluZ3MuIENvbW1pdHRpbmcgc3VjaCBhCisgICBjb250ZW50IG11c3QgYmUgcHJvaGliaXRlZCwgYnV0ICJnaXQgZGlmZiIgc2hvdWxkIGhlbHAgdGhlIHVzZXIgdG8KKyAgIGxvY2F0ZSBhbmQgZml4IHN1Y2ggcHJvYmxlbXMgd2l0aG91dCBmYWlsaW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWQ1NjhlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguMy50eHQKQEAgLTAsMCArMSw0MzYgQEAKK0dpdCB2MS44LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMgKGZvciBHaXQgMi4wKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gImdpdCBwdXNoIFskdGhlcmVdIiBkb2VzIG5vdCBzYXkgd2hhdCB0byBwdXNoLCB3ZSBoYXZlIHVzZWQgdGhlCit0cmFkaXRpb25hbCAibWF0Y2hpbmciIHNlbWFudGljcyBzbyBmYXIgKGFsbCB5b3VyIGJyYW5jaGVzIHdlcmUgc2VudAordG8gdGhlIHJlbW90ZSBhcyBsb25nIGFzIHRoZXJlIGFscmVhZHkgYXJlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIG5hbWUKK292ZXIgdGhlcmUpLiAgSW4gR2l0IDIuMCwgdGhlIGRlZmF1bHQgd2lsbCBjaGFuZ2UgdG8gdGhlICJzaW1wbGUiCitzZW1hbnRpY3MgdGhhdCBwdXNoZXMgb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lCituYW1lLCBhbmQgb25seSB3aGVuIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBzZXQgdG8gaW50ZWdyYXRlIHdpdGggdGhhdAorcmVtb3RlIGJyYW5jaC4gIFVzZSB0aGUgdXNlciBwcmVmZXJlbmNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUKKyJwdXNoLmRlZmF1bHQiIHRvIGNoYW5nZSB0aGlzLiAgSWYgeW91IGFyZSBhbiBvbGQtdGltZXIgd2hvIGlzIHVzZWQKK3RvIHRoZSAibWF0Y2hpbmciIHNlbWFudGljcywgeW91IGNhbiBzZXQgdGhlIHZhcmlhYmxlIHRvICJtYXRjaGluZyIKK3RvIGtlZXAgdGhlIHRyYWRpdGlvbmFsIGJlaGF2aW91ci4gIElmIHlvdSB3YW50IHRvIGxpdmUgaW4gdGhlIGZ1dHVyZQorZWFybHksIHlvdSBjYW4gc2V0IGl0IHRvICJzaW1wbGUiIHRvZGF5IHdpdGhvdXQgd2FpdGluZyBmb3IgR2l0IDIuMC4KKworV2hlbiAiZ2l0IGFkZCAtdSIgKGFuZCAiZ2l0IGFkZCAtQSIpIGlzIHJ1biBpbnNpZGUgYSBzdWJkaXJlY3RvcnkgYW5kCitkb2VzIG5vdCBzcGVjaWZ5IHdoaWNoIHBhdGhzIHRvIGFkZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdAord2lsbCBvcGVyYXRlIG9uIHRoZSBlbnRpcmUgdHJlZSBpbiBHaXQgMi4wIGZvciBjb25zaXN0ZW5jeQord2l0aCAiZ2l0IGNvbW1pdCAtYSIgYW5kIG90aGVyIGNvbW1hbmRzLiAgVGhlcmUgd2lsbCBiZSBubworbWVjaGFuaXNtIHRvIG1ha2UgcGxhaW4gImdpdCBhZGQgLXUiIGJlaGF2ZSBsaWtlICJnaXQgYWRkIC11IC4iLgorQ3VycmVudCB1c2VycyBvZiAiZ2l0IGFkZCAtdSIgKHdpdGhvdXQgYSBwYXRoc3BlYykgc2hvdWxkIHN0YXJ0Cit0cmFpbmluZyB0aGVpciBmaW5nZXJzIHRvIGV4cGxpY2l0bHkgc2F5ICJnaXQgYWRkIC11IC4iCitiZWZvcmUgR2l0IDIuMCBjb21lcy4gIEEgd2FybmluZyBpcyBpc3N1ZWQgd2hlbiB0aGVzZSBjb21tYW5kcyBhcmUKK3J1biB3aXRob3V0IGEgcGF0aHNwZWMgYW5kIHdoZW4geW91IGhhdmUgbG9jYWwgY2hhbmdlcyBvdXRzaWRlIHRoZQorY3VycmVudCBkaXJlY3RvcnksIGJlY2F1c2UgdGhlIGJlaGF2aW91ciBpbiBHaXQgMi4wIHdpbGwgYmUgZGlmZmVyZW50Citmcm9tIHRvZGF5J3MgdmVyc2lvbiBpbiBzdWNoIGEgc2l0dWF0aW9uLgorCitJbiBHaXQgMi4wLCAiZ2l0IGFkZCA8cGF0aD4iIHdpbGwgYmVoYXZlIGFzICJnaXQgYWRkIC1BIDxwYXRoPiIsIHNvCit0aGF0ICJnaXQgYWRkIGRpci8iIHdpbGwgbm90aWNlIHBhdGhzIHlvdSByZW1vdmVkIGZyb20gdGhlIGRpcmVjdG9yeQorYW5kIHJlY29yZCB0aGUgcmVtb3ZhbC4gIFZlcnNpb25zIGJlZm9yZSBHaXQgMi4wLCBpbmNsdWRpbmcgdGhpcworcmVsZWFzZSwgd2lsbCBrZWVwIGlnbm9yaW5nIHJlbW92YWxzLCBidXQgdGhlIHVzZXJzIHdobyByZWx5IG9uIHRoaXMKK2JlaGF2aW91ciBhcmUgZW5jb3VyYWdlZCB0byBzdGFydCB1c2luZyAiZ2l0IGFkZCAtLWlnbm9yZS1yZW1vdmFsIDxwYXRoPiIKK25vdyBiZWZvcmUgMi4wIGlzIHJlbGVhc2VkLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuOC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3JlaWduIGludGVyZmFjZQorCisgKiByZW1vdGUtaGcgYW5kIHJlbW90ZS1ienIgaGVscGVycyAoaW4gY29udHJpYi8gc2luY2UgdjEuOC4yKSBoYXZlCisgICBiZWVuIHVwZGF0ZWQ7IGVzcGVjaWFsbHksIHRoZSBsYXR0ZXIgaGFzIGJlZW4gZG9uZSBpbiBhbgorICAgYWNjZWxlcmF0ZWQgc2NoZWR1bGUgKHJlYWQ6IHdlIG1heSBub3QgaGF2ZSBtZXJnZWQgdG8gdGhpcyByZWxlYXNlCisgICBpZiB3ZSB3ZXJlIGZvbGxvd2luZyB0aGUgdXN1YWwgImNvb2sgc3VmZmljaWVudGx5IGluIG5leHQgYmVmb3JlCisgICB1bmxlYXNoaW5nIGl0IHRvIHRoZSB3b3JsZCIgd29ya2Zsb3cpIGluIG9yZGVyIHRvIGhlbHAgRW1hY3MgZm9sa3MsCisgICB3aG9zZSBwcmltYXJ5IFNDTSBzZWVtcyB0byBiZSBzdGFnbmF0aW5nLgorCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBBIGhhbmRmdWwgb2YgdXBkYXRlcyBhcHBsaWVkIHRvIGdpdGssIGluY2x1ZGluZyBhbiBhZGRpdGlvbiBvZgorICAgInJldmVydCIgYWN0aW9uLCBzaG93aW5nIGRhdGVzIGluIHRhZ3MgaW4gYSBuaWNlciB3YXksIG1ha2luZworICAgY29sb3JzIGNvbmZpZ3VyYWJsZSwgYW5kIHN1cHBvcnQgZm9yIC1HJ3BpY2theGUnIHNlYXJjaC4KKworICogVGhlIHByb21wdCBzdHJpbmcgZ2VuZXJhdG9yIChpbiBjb250cmliL2NvbXBsZXRpb24vKSBsZWFybmVkIHRvCisgICBzaG93IGhvdyBtYW55IGNoYW5nZXMgdGhlcmUgYXJlIGluIHRvdGFsIGFuZCBob3cgbWFueSBoYXZlIGJlZW4KKyAgIHJlcGxheWVkIGR1cmluZyBhICJnaXQgcmViYXNlIiBzZXNzaW9uLgorCisgKiAiZ2l0IGJyYW5jaCAtLXZ2IiBsZWFybmVkIHRvIHBhaW50IHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggaXQKKyAgIGludGVncmF0ZXMgd2l0aCBpbiBhIGRpZmZlcmVudCBjb2xvciAoY29sb3IuYnJhbmNoLnVwc3RyZWFtLAorICAgd2hpY2ggZGVmYXVsdHMgdG8gYmx1ZSkuCisKKyAqIEluIGEgc3BhcnNlbHkgcG9wdWxhdGVkIHdvcmtpbmcgdHJlZSwgImdpdCBjaGVja291dCA8cGF0aHNwZWM+IiBubworICAgbG9uZ2VyIHVubWFya3MgcGF0aHMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0aHNwZWMgdGhhdCB3ZXJlCisgICBvcmlnaW5hbGx5IGlnbm9yZWQgd2l0aCAiLS1zcGFyc2UiICh1c2UgLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzCisgICBvcHRpb24gdG8gcmVzdXJyZWN0IHRoZXNlIHBhdGhzIG91dCBvZiB0aGUgaW5kZXggaWYgeW91IHJlYWxseSB3YW50CisgICB0bykuCisKKyAqICJnaXQgbG9nIC0tZm9ybWF0IiBzcGVjaWZpZXIgbGVhcm5lZCAlQyhhdXRvKSB0b2tlbiB0aGF0IHRlbGxzIEdpdAorICAgdG8gdXNlIGNvbG9yIHdoZW4gaW50ZXJwb2xhdGluZyAlZCAoZGVjb3JhdGlvbiksICVoIChzaG9ydCBjb21taXQKKyAgIG9iamVjdCBuYW1lKSwgZXRjLiBmb3IgdGVybWluYWwgb3V0cHV0LgorCisgKiAiZ2l0IGJpc2VjdCIgbGVhdmVzIHRoZSBmaW5hbCBvdXRjb21lIGFzIGEgY29tbWVudCBpbiBpdHMgYmlzZWN0CisgICBsb2cgZmlsZS4KKworICogImdpdCBjbG9uZSAtLXJlZmVyZW5jZSIgY2FuIG5vdyByZWZlciB0byBhIGdpdGZpbGUgInRleHR1YWwgc3ltbGluayIKKyAgIHRoYXQgcG9pbnRzIGF0IHRoZSByZWFsIGxvY2F0aW9uIG9mIHRoZSByZXBvc2l0b3J5LgorCisgKiAiZ2l0IGNvdW50LW9iamVjdHMiIGxlYXJuZWQgIi0taHVtYW4tcmVhZGFibGUiIGFrYSAiLUgiIG9wdGlvbiB0bworICAgc2hvdyB2YXJpb3VzIGxhcmdlIG51bWJlcnMgaW4gS2kvTWkvR2lCIHNjYWxlZCBhcyBuZWNlc3NhcnkuCisKKyAqICJnaXQgY2hlcnJ5LXBpY2sgJGJsb2IiIGFuZCAiZ2l0IGNoZXJyeS1waWNrICR0cmVlIiBhcmUgbm9uc2Vuc2UsCisgICBhbmQgYSBtb3JlIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2UgZS5nLiAiY2FuJ3QgY2hlcnJ5LXBpY2sgYSB0cmVlIgorICAgaXMgZ2l2ZW4gKHdlIHVzZWQgdG8gc2F5ICJleHBlY3RlZCBleGFjdGx5IG9uZSBjb21taXQiKS4KKworICogVGhlICItLWFubm90YXRlIiBvcHRpb24gdG8gImdpdCBzZW5kLWVtYWlsIiBjYW4gYmUgdHVybmVkIG9uIChvcgorICAgb2ZmKSBieSBkZWZhdWx0IHdpdGggc2VuZGVtYWlsLmFubm90YXRlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKHlvdQorICAgY2FuIHVzZSAtLW5vLWFubm90YXRlIGZyb20gdGhlIGNvbW1hbmQgbGluZSB0byBvdmVycmlkZSBpdCkuCisKKyAqIFRoZSAiLS1jb3Zlci1sZXR0ZXIiIG9wdGlvbiB0byAiZ2l0IGZvcm1hdC1wYXRjaCIgY2FuIGJlIHR1cm5lZCBvbgorICAgKG9yIG9mZikgYnkgZGVmYXVsdCB3aXRoIGZvcm1hdC5jb3ZlckxldHRlciBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZS4gQnkgc2V0dGluZyBpdCB0byAnYXV0bycsIHlvdSBjYW4gdHVybiBpdCBvbiBvbmx5IGZvciBhCisgICBzZXJpZXMgd2l0aCB0d28gb3IgbW9yZSBwYXRjaGVzLgorCisgKiBUaGUgYmFzaCBjb21wbGV0aW9uIHN1cHBvcnQgKGluIGNvbnRyaWIvKSBsZWFybmVkIHRoYXQgY2hlcnJ5LXBpY2sKKyAgIHRha2VzIGEgZmV3IG1vcmUgb3B0aW9ucyB0aGFuIGl0IGFscmVhZHkga25ldyBhYm91dC4KKworICogImdpdCBoZWxwIiBsZWFybmVkICItZyIgb3B0aW9uIHRvIHNob3cgdGhlIGxpc3Qgb2YgZ3VpZGVzIGp1c3QgbGlrZQorICAgbGlzdCBvZiBjb21tYW5kcyBhcmUgZ2l2ZW4gd2l0aCAiLWEiLgorCisgKiBBIHRyaWFuZ3VsYXIgInB1bGwgZnJvbSBvbmUgcGxhY2UsIHB1c2ggdG8gYW5vdGhlciBwbGFjZSIgd29ya2Zsb3cKKyAgIGlzIHN1cHBvcnRlZCBiZXR0ZXIgYnkgbmV3IHJlbW90ZS5wdXNoZGVmYXVsdCAob3ZlcnJpZGVzIHRoZQorICAgIm9yaWdpbiIgdGhpbmcpIGFuZCBicmFuY2guKi5wdXNocmVtb3RlIChvdmVycmlkZXMgdGhlCisgICBicmFuY2guKi5yZW1vdGUpIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorCisgKiAiZ2l0IHN0YXR1cyIgbGVhcm5lZCB0byByZXBvcnQgdGhhdCB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYQorICAgcmV2ZXJ0IHNlc3Npb24sIGp1c3QgbGlrZSBpdCBkb2VzIGZvciBhIGNoZXJyeS1waWNrIGFuZCBhIGJpc2VjdAorICAgc2Vzc2lvbi4KKworICogVGhlIGhhbmRsaW5nIGJ5ICJnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIiBhZ2FpbnN0IHZhcmlvdXMgZm9ybXMKKyAgIG9mIGVycm9uZW91cyBpbnB1dHMgd2FzIHN1Ym9wdGltYWwgYW5kIGhhcyBiZWVuIGltcHJvdmVkLgorCisgKiBXaGVuIHRoZSBpbnRlcmFjdGl2ZSBhY2Nlc3MgdG8gZ2l0LXNoZWxsIGlzIG5vdCBlbmFibGVkLCBpdCBpc3N1ZXMKKyAgIGEgbWVzc2FnZSBtZWFudCB0byBoZWxwIHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvciB0byBlbmFibGUgaXQuICBBbgorICAgZXhwbGljaXQgd2F5IGhhcyBiZWVuIGFkZGVkIHRvIGlzc3VlIGN1c3RvbSBtZXNzYWdlcyB0byByZWZ1c2UgYW4KKyAgIGFjY2VzcyBvdmVyIHRoZSBuZXR3b3JrIHRvIGhlbHAgdGhlIGVuZCB1c2VycyB3aG8gY29ubmVjdCB0byB0aGUKKyAgIHNlcnZpY2UgZXhwZWN0aW5nIGFuIGludGVyYWN0aXZlIHNoZWxsLgorCisgKiBJbiBhZGRpdGlvbiB0byB0aGUgY2FzZSB3aGVyZSB0aGUgdXNlciBlZGl0cyB0aGUgbG9nIG1lc3NhZ2Ugd2l0aAorICAgdGhlICJlKWRpdCIgb3B0aW9uIG9mICJhbSAtaSIsIHJlcGxhY2UgdGhlICJBcHBseWluZzogdGhpcyBwYXRjaCIKKyAgIG1lc3NhZ2Ugd2l0aCB0aGUgZmluYWwgbG9nIG1lc3NhZ2UgY29udGVudHMgYWZ0ZXIgYXBwbHltc2cgaG9vaworICAgbXVuZ2VzIGl0LgorCisgKiAiZ2l0IHN0YXR1cyIgc3VnZ2VzdHMgdXNlcnMgdG8gbG9vayBpbnRvIHVzaW5nIC0tdW50cmFja2VkPW5vIG9wdGlvbgorICAgd2hlbiBpdCB0YWtlcyB0b28gbG9uZy4KKworICogImdpdCBzdGF0dXMiIHNob3dzIGEgYml0IG1vcmUgaW5mb3JtYXRpb24gZHVyaW5nIGEgcmViYXNlL2Jpc2VjdAorICAgc2Vzc2lvbi4KKworICogImdpdCBmZXRjaCIgbGVhcm5lZCB0byBmZXRjaCBhIGNvbW1pdCBhdCB0aGUgdGlwIG9mIGFuIHVuYWR2ZXJ0aXNlZAorICAgcmVmIGJ5IHNwZWNpZnlpbmcgYSByYXcgb2JqZWN0IG5hbWUgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHdoZW4gdGhlCisgICBzZXJ2ZXIgc2lkZSBzdXBwb3J0cyB0aGlzIGZlYXR1cmUuCisKKyAqIE91dHB1dCBmcm9tICJnaXQgbG9nIC0tZ3JhcGgiIHdvcmtzIGJldHRlciB3aXRoIHN1Ym1vZHVsZSBsb2cKKyAgIG91dHB1dCBub3cuCisKKyAqICJnaXQgY291bnQtb2JqZWN0cyAtdiIgbGVhcm5lZCB0byByZXBvcnQgbGVmdG92ZXIgdGVtcG9yYXJ5CisgICBwYWNrZmlsZXMgYW5kIG90aGVyIGdhcmJhZ2UgaW4gdGhlIG9iamVjdCBzdG9yZS4KKworICogQSBuZXcgcmVhZC1vbmx5IGNyZWRlbnRpYWwgaGVscGVyIChpbiBjb250cmliLykgdG8gaW50ZXJhY3Qgd2l0aAorICAgdGhlIC5uZXRyYy8uYXV0aGluZm8gZmlsZXMgaGFzIGJlZW4gYWRkZWQuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgY2FuIGJlIHVzZWQgd2l0aCB0aGUgY3JlZGVudGlhbCBoZWxwZXIgc3lzdGVtLgorCisgKiBUaGVyZSB3YXMgbm8gUG9yY2VsYWluIHdheSB0byBzYXkgIkkgbm8gbG9uZ2VyIGFtIGludGVyZXN0ZWQgaW4KKyAgIHRoaXMgc3VibW9kdWxlIiwgb25jZSB5b3UgZXhwcmVzcyB5b3VyIGludGVyZXN0IGluIGEgc3VibW9kdWxlIHdpdGgKKyAgICJzdWJtb2R1bGUgaW5pdCIuICAic3VibW9kdWxlIGRlaW5pdCIgaXMgdGhlIHdheSB0byBkbyBzby4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBsZWFybmVkIHRvIHBhc3MgIi12Ly1xIiBvcHRpb25zIHRvIHVuZGVybHlpbmcKKyAgICJnaXQgcmViYXNlIi4KKworICogVGhlIG5ldyAiLS1mb2xsb3ctdGFncyIgb3B0aW9uIHRlbGxzICJnaXQgcHVzaCIgdG8gcHVzaCByZWxldmFudAorICAgYW5ub3RhdGVkIHRhZ3Mgd2hlbiBwdXNoaW5nIGJyYW5jaGVzIG91dC4KKworICogImdpdCBtZXJnZSIgYW5kICJnaXQgcHVsbCIgY2FuIG9wdGlvbmFsbHkgYmUgdG9sZCB0byBpbnNwZWN0IGFuZAorICAgcmVqZWN0IHdoZW4gbWVyZ2luZyBhIGNvbW1pdCB0aGF0IGRvZXMgbm90IGNhcnJ5IGEgdHJ1c3RlZCBHUEcKKyAgIHNpZ25hdHVyZS4KKworICogImdpdCBtZXJnZXRvb2wiIG5vdyBmZWVkcyBmaWxlcyB0byB0aGUgInA0bWVyZ2UiIGJhY2tlbmQgaW4gdGhlCisgICBvcmRlciB0aGF0IG1hdGNoZXMgdGhlIHA0IGNvbnZlbnRpb24sIHdoZXJlICJ0aGVpcnMiIGlzIHVzdWFsbHkKKyAgIHNob3duIG9uIHRoZSBsZWZ0IHNpZGUsIHdoaWNoIGlzIHRoZSBvcHBvc2l0ZSBmcm9tIHdoYXQgb3RoZXIgYmFja2VuZHMKKyAgIGV4cGVjdC4KKworICogInNob3cvbG9nIiBub3cgaG9ub3JzIGdwZy5wcm9ncmFtIGNvbmZpZ3VyYXRpb24ganVzdCBsaWtlIG90aGVyCisgICBwYXJ0cyBvZiB0aGUgY29kZSB0aGF0IHVzZSBHbnVQRy4KKworICogImdpdCBsb2ciIHRoYXQgc2hvd3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgcGFyZW50IGFuZCB0aGUKKyAgIGNoaWxkIGhhcyBiZWVuIG9wdGltaXplZCBzb21ld2hhdC4KKworICogImdpdCBkaWZmdG9vbCIgYWxsb3dzIHRoZSB1c2VyIHRvIHdyaXRlIGludG8gdGhlIHRlbXBvcmFyeSBmaWxlcworICAgYmVpbmcgc2hvd247IGlmIHRoZSB1c2VyIG1ha2VzIGNoYW5nZXMgdG8gdGhlIHdvcmtpbmcgdHJlZSBhdCB0aGUKKyAgIHNhbWUgdGltZSwgaXQgbm93IHJlZnJhaW5zIGZyb20gb3ZlcndyaXRpbmcgdGhlIGNvcHkgaW4gdGhlIHdvcmtpbmcKKyAgIHRyZWUgYW5kIGxlYXZlcyB0aGUgdGVtcG9yYXJ5IGZpbGUgc28gdGhhdCBjaGFuZ2VzIGNhbiBiZSBtZXJnZWQKKyAgIG1hbnVhbGx5LgorCisgKiBUaGVyZSB3YXMgbm8gZ29vZCB3YXkgdG8gYXNrICJJIGhhdmUgYSByYW5kb20gc3RyaW5nIHRoYXQgY2FtZSBmcm9tCisgICBvdXRzaWRlIHdvcmxkLiBJIHdhbnQgdG8gdHVybiBpdCBpbnRvIGEgNDAtaGV4IG9iamVjdCBuYW1lIHdoaWxlCisgICBtYWtpbmcgc3VyZSBzdWNoIGFuIG9iamVjdCBleGlzdHMiLiAgQSBuZXcgcGVlbGluZyBzdWZmaXggXntvYmplY3R9CisgICBjYW4gYmUgdXNlZCBmb3IgdGhhdCBwdXJwb3NlLCB0b2dldGhlciB3aXRoICJyZXYtcGFyc2UgLS12ZXJpZnkiLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLgorCisgKiBVcGRhdGVzIGZvciBidWlsZGluZyB1bmRlciBtc3ZjLgorCisgKiBBIGhhbmRmdWwgb2YgaXNzdWVzIGluIHRoZSBjb2RlIHRoYXQgdHJhdmVyc2VzIHRoZSB3b3JraW5nIHRyZWUgdG8gZmluZAorICAgdW50cmFja2VkIGFuZC9vciBpZ25vcmVkIGZpbGVzIGhhdmUgYmVlbiBmaXhlZCwgYW5kIHRoZSBnZW5lcmFsCisgICBjb2RlcGF0aCBpbnZvbHZlZCBpbiAic3RhdHVzIC11IiBhbmQgImNsZWFuIiBoYXZlIGJlZW4gY2xlYW5lZCB1cAorICAgYW5kIG9wdGltaXplZC4KKworICogVGhlIHN0YWNrIGZvb3RwcmludCBvZiBzb21lIGNvZGVwYXRocyB0aGF0IGFjY2VzcyBhbiBvYmplY3QgZnJvbSBhCisgICBwYWNrIGhhcyBiZWVuIHNocnVuay4KKworICogVGhlIGxvZ2ljIHRvIGNvYWxlc2NlIHRoZSBzYW1lIGxpbmVzIHJlbW92ZWQgZnJvbSB0aGUgcGFyZW50cyBpbgorICAgdGhlIG91dHB1dCBmcm9tICJkaWZmIC1jLy0tY2MiIGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB3aXRoIE8obl4yKQorICAgY29tcGxleGl0eSwgc28gdGhpcyBtaWdodCB0dXJuIG91dCB0byBiZSB1bmRlc2lyYWJsZS4KKworICogVGhlIGNvZGUgdG8gZW5mb3JjZSBwZXJtaXNzaW9uIGJpdHMgb24gZmlsZXMgaW4gJEdJVF9ESVIvIGZvcgorICAgc2hhcmVkIHJlcG9zaXRvcmllcyBoYXMgYmVlbiBzaW1wbGlmaWVkLgorCisgKiBBIGZldyBjb2RlcGF0aHMga25vdyBob3cgbXVjaCBkYXRhIHRoZXkgbmVlZCB0byBwdXQgaW4gdGhlCisgICBoYXNodGFibGVzIHRoZXkgdXNlIHdoZW4gdGhleSBzdGFydCwgYnV0IHN0aWxsIGJlZ2FuIHdpdGggc21hbGwgdGFibGVzCisgICBhbmQgcmVwZWF0ZWRseSBncmV3IGFuZCByZWhhc2hlZCB0aGVtLgorCisgKiBUaGUgQVBJIHRvIHdhbGsgcmVmbG9nIGVudHJpZXMgZnJvbSB0aGUgbGF0ZXN0IHRvIG9sZGVyLCB3aGljaCB3YXMKKyAgIG5lY2Vzc2FyeSBmb3Igb3BlcmF0aW9ucyBzdWNoIGFzICJnaXQgY2hlY2tvdXQgLSIsIHdhcyBjdW1iZXJzb21lCisgICB0byB1c2UgY29ycmVjdGx5IGFuZCBhbHNvIGluZWZmaWNpZW50LgorCisgKiBDb2RlcGF0aHMgdGhhdCBpbnNwZWN0IGxvZy1tZXNzYWdlLXRvLWJlIGFuZCBkZWNpZGUgd2hlbiB0byBhZGQgYQorICAgbmV3IFNpZ25lZC1vZmYtYnkgbGluZSBpbiB2YXJpb3VzIGNvbW1hbmRzIGhhdmUgYmVlbiBjb25zb2xpZGF0ZWQuCisKKyAqIFRoZSBwa3QtbGluZSBBUEksIGltcGxlbWVudGF0aW9uIGFuZCBpdHMgY2FsbGVycyBoYXZlIGJlZW4gY2xlYW5lZAorICAgdXAgdG8gbWFrZSB0aGVtIG1vcmUgcm9idXN0LgorCisgKiBUaGUgQ3lnd2luIHBvcnQgaGFzIGEgZmFzdGVyLWJ1dC1seWluZyBsc3RhdCgyKSBlbXVsYXRpb24gd2hvc2UKKyAgIGluY29ycmVjdG5lc3MgZG9lcyBub3QgbWF0dGVyIGluIHByYWN0aWNlIGV4Y2VwdCBmb3IgYSBmZXcKKyAgIGNvZGVwYXRocywgYW5kIHNldHRpbmcgcGVybWlzc2lvbiBiaXRzIG9uIGRpcmVjdG9yaWVzIGlzIGEgY29kZXBhdGgKKyAgIHRoYXQgbmVlZHMgdG8gdXNlIGEgbW9yZSBjb3JyZWN0IG9uZS4KKworICogImdpdCBjaGVja291dCIgaGFkIHJlcGVhdGVkIHBhdGhzcGVjIG1hdGNoZXMgb24gdGhlIHNhbWUgcGF0aHMsCisgICB3aGljaCBoYXZlIGJlZW4gY29uc29saWRhdGVkLiAgQWxzbyBhIGJ1ZyBpbiAiZ2l0IGNoZWNrb3V0IGRpci8iCisgICB0aGF0IGlzIHN0YXJ0ZWQgZnJvbSBhbiB1bm1lcmdlZCBpbmRleCBoYXMgYmVlbiBmaXhlZC4KKworICogQSBmZXcgYnVnZml4ZXMgdG8gImdpdCByZXJlcmUiIHdvcmtpbmcgb24gY29ybmVyIGNhc2UgbWVyZ2UKKyAgIGNvbmZsaWN0cyBoYXZlIGJlZW4gYXBwbGllZC4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS44LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjguMiBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgcmVsZWFzZSBub3RlcyB0byB0aGVtIGZvcgorZGV0YWlscykuCisKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiBGaWxlOjpUZW1wICh1c2VkIGJ5ICJnaXQgc3ZuIikgc3RhcnRlZCBibG93aW5nCisgICB1cCB3aGVuIGl0cyB0ZW1wZmlsZSBzdWIgaXMgY2FsbGVkIGFzIGEgY2xhc3MgbWV0aG9kOyB1cGRhdGVkIHRoZQorICAgY2FsbHNpdGUgdG8gY2FsbCBpdCBhcyBhIHBsYWluIHZhbmlsbGEgZnVuY3Rpb24gdG8gZml4IGl0LgorICAgKG1lcmdlIGVhZmMyZGQgaGIvZ2l0LXBtLXRlbXBmaWxlIGxhdGVyIHRvIG1haW50KS4KKworICogVmFyaW91cyBzdWJjb21tYW5kcyBvZiAiZ2l0IHJlbW90ZSIgc2ltcGx5IGlnbm9yZWQgZXh0cmFuZW91cworICAgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGRpYWdub3NpbmcgdGhlbSBhcyBlcnJvcnMuCisKKyAqIFdoZW4gcmVjZWl2ZS1wYWNrIGRldGVjdHMgYW4gZXJyb3IgaW4gdGhlIHBhY2sgaGVhZGVyIGl0IHJlY2VpdmVkIGluCisgICBvcmRlciB0byBkZWNpZGUgd2hpY2ggb2YgdW5wYWNrLW9iamVjdHMgb3IgaW5kZXgtcGFjayB0byBydW4sIGl0CisgICByZXR1cm5lZCB3aXRob3V0IGNsb3NpbmcgdGhlIGVycm9yIHN0cmVhbSwgd2hpY2ggbGVkIHRvIGEgaHVuZworICAgc2lkZWJhbmQgdGhyZWFkLgorCisgKiBac2ggY29tcGxldGlvbiBmb3Jnb3QgdGhhdCB0aGUgJyUnIGNoYXJhY3RlciB1c2VkIHRvIHNpZ25hbCB1bnRyYWNrZWQKKyAgIGZpbGVzIG5lZWRzIHRvIGJlIGVzY2FwZWQgd2l0aCBhbm90aGVyICclJy4KKworICogQSBjb21taXQgb2JqZWN0IHdob3NlIGF1dGhvciBvciBjb21taXR0ZXIgaWRlbnQgYXJlIG1hbGZvcm1lZAorICAgY3Jhc2hlZCBzb21lIGNvZGUgdGhhdCB0cnVzdGVkIHRoYXQgYSBuYW1lLCBhbiBlbWFpbCBhbmQgYQorICAgdGltZXN0YW1wIGNhbiBhbHdheXMgYmUgZm91bmQgaW4gaXQuCisKKyAqIFdoZW4gInVwbG9hZC1wYWNrIiBmYWlscyB3aGlsZSBnZW5lcmF0aW5nIGEgcGFjayBpbiByZXNwb25zZSB0bworICAgImdpdCBmZXRjaCIgKG9yICJnaXQgY2xvbmUiKSwgdGhlIHJlY2VpdmluZyBzaWRlIGhhZAorICAgYSBwcm9ncmFtbWluZyBlcnJvciB0aGF0IHRyaWdnZXJlZCB0aGUgZGllIGhhbmRsZXIKKyAgIHJlY3Vyc2l2ZWx5LgorCisgKiAicmV2LWxpc3QgLS1zdGRpbiIgYW5kIGZyaWVuZHMga2VwdCBib2d1cyBwb2ludGVycyBpbnRvIHRoZSBpbnB1dAorICAgYnVmZmVyIGFyb3VuZCBhcyBodW1hbiByZWFkYWJsZSBvYmplY3QgbmFtZXMuICBUaGlzIHdhcyBub3QgYSBodWdlCisgICBwcm9ibGVtIGJ1dCB3YXMgZXhwb3NlZCBieSBhIG5ldyBjaGFuZ2UgdGhhdCB1c2VzIHRoZXNlIG5hbWVzIGluCisgICBlcnJvciBvdXRwdXQuCisKKyAqIFNtYXJ0LWNhcGFibGUgSFRUUCBzZXJ2ZXJzIHdlcmUgbm90IHJlc3RyaWN0ZWQgdmlhIHRoZQorICAgR0lUX05BTUVTUEFDRSBtZWNoYW5pc20gd2hlbiB0YWxraW5nIHdpdGggY29tbWl0LXdhbGtpbmcgY2xpZW50cywKKyAgIGxpa2UgdGhleSBhcmUgd2hlbiB0YWxraW5nIHdpdGggc21hcnQgSFRUUCBjbGllbnRzLgorICAgKG1lcmdlIDYxMzBmODYgamsvaHR0cC1kdW1iLW5hbWVzcGFjZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG1lcmdlLXRyZWUiIGRpZCBub3Qgb21pdCBhIG1lcmdlIHJlc3VsdCB0aGF0IGlzIGlkZW50aWNhbCB0bworICAgdGhlICJvdXIiIHNpZGUgaW4gY2VydGFpbiBjYXNlcy4KKyAgIChtZXJnZSBhYWNlY2MzIGprL21lcmdlLXRyZWUtYWRkZWQtaWRlbnRpY2FsbHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBQZXJsIHNjcmlwdHMgbGlrZSAiZ2l0LXN2biIgY2xvc2VkIChpbnN0ZWFkIG9mIHJlZGlyZWN0aW5nIHRvIC9kZXYvbnVsbCkKKyAgIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0sIHdoaWNoIGlzIG5vdCBhIHZlcnkgc21hcnQgdGhpbmcgdG8gZG8uCisgICBBIGxhdGVyIG9wZW4gbWF5IHJldHVybiBmaWxlIGRlc2NyaXB0b3IgIzIgZm9yIGFuIHVucmVsYXRlZCBwdXJwb3NlLCBhbmQKKyAgIGVycm9yIHJlcG9ydGluZyBjb2RlIG1heSB3cml0ZSBpbnRvIGl0LgorCisgKiAiZ2l0IHNob3ctYnJhbmNoIiB3YXMgbm90IHByZXBhcmVkIHRvIHNob3cgYSB2ZXJ5IGxvbmcgcnVuIG9mCisgICBhbmNlc3RvciBvcGVyYXRvcnMgZS5nLiBmb29iYXJeMn4yXjJeMl4yLi4uXjJ+NCBjb3JyZWN0bHkuCisKKyAqICJnaXQgZGlmZiAtLWRpZmYtYWxnb3JpdGhtIGFsZ28iIGlzIGFsc28gdW5kZXJzdG9vZCBhcyAiZ2l0IGRpZmYKKyAgIC0tZGlmZi1hbGdvcml0aG09YWxnbyIuCisKKyAqIFRoZSBuZXcgY29yZS5jb21tZW50Y2hhciBjb25maWd1cmF0aW9uIHdhcyBub3QgYXBwbGllZCBpbiBhIGZldworICAgcGxhY2VzLgorCisgKiAiZ2l0IGJ1bmRsZSIgZXJyb25lb3VzbHkgYmFpbGVkIG91dCB3aGVuIHBhcnNpbmcgYSB2YWxpZCBidW5kbGUKKyAgIGNvbnRhaW5pbmcgYSBwcmVyZXF1aXNpdGUgY29tbWl0IHdpdGhvdXQgYSBjb21taXQgbWVzc2FnZS4KKworICogImdpdCBsb2cgLVMvLUciIHN0YXJ0ZWQgcGF5aW5nIGF0dGVudGlvbiB0byB0ZXh0Y29udiBmaWx0ZXIsIGJ1dAorICAgdGhlcmUgd2FzIG5vIHdheSB0byBkaXNhYmxlIHRoaXMuICBNYWtlIGl0IGhvbm9yIHRoZSAtLW5vLXRleHRjb252CisgICBvcHRpb24uCisKKyAqIFdoZW4gdXNlZCB3aXRoIHRoZSAiLWQgdGVtcG9yYXJ5LWRpcmVjdG9yeSIgb3B0aW9uLCAiZ2l0IGZpbHRlci1icmFuY2giCisgICBmYWlsZWQgdG8gY29tZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCB3b3JraW5nIHRyZWUgdG8gcGVyZm9ybSB0aGUKKyAgIGZpbmFsIGNsZWFuLXVwIHByb2NlZHVyZS4KKworICogImdpdCBtZXJnZSAkKGdpdCByZXYtcGFyc2UgdjEuOC4yKSIgYmVoYXZlZCBxdWl0ZSBkaWZmZXJlbnRseSBmcm9tCisgICAiZ2l0IG1lcmdlIHYxLjguMiIsIGFzIGlmIHYxLjguMiB3ZXJlIHdyaXR0ZW4gYXMgdjEuOC4yXjAgYW5kIGRpZAorICAgbm90IHBheSBtdWNoIGF0dGVudGlvbiB0byB0aGUgYW5ub3RhdGVkIHRhZyBwYXlsb2FkLiAgTWFrZSB0aGUgY29kZQorICAgbm90aWNlIHRoZSB0eXBlIG9mIHRoZSB0YWcgb2JqZWN0LCBpbiBhZGRpdGlvbiB0byB0aGUgZHdpbV9yZWYoKQorICAgYmFzZWQgY2xhc3NpZmljYXRpb24gdGhlIGN1cnJlbnQgY29kZSB1c2VzIChpLmUuIHRoZSBuYW1lIGFwcGVhcnMKKyAgIGluIHJlZnMvdGFncy8pIHRvIGRlY2lkZSB3aGVuIHRvIHNwZWNpYWwtY2FzZSB0YWcgbWVyZ2luZy4KKworICogRml4IGEgMS44LjEueCByZWdyZXNzaW9uIHRoYXQgc3RvcHBlZCBtYXRjaGluZyAiZGlyIiAod2l0aG91dCBhCisgICB0cmFpbGluZyBzbGFzaCkgdG8gYSBkaXJlY3RvcnkgImRpciIuCisKKyAqICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgd2FzIG5vdCBwcmVwYXJlZCB0byBzZWUgYSBsaW5lIGdldHRpbmcKKyAgIGxvbmdlciBhZnRlciBmaXhpbmcgd2hpdGVzcGFjZXMgKGUuZy4gdGFiLWluLWluZGVudCBha2EgUHl0aG9uKS4KKworICogVGhlIHByb21wdCBzdHJpbmcgZ2VuZXJhdG9yIChpbiBjb250cmliL2NvbXBsZXRpb24vKSBkaWQgbm90IG5vdGljZQorICAgd2hlbiB3ZSBhcmUgaW4gYSBtaWRkbGUgb2YgYSAiZ2l0IHJldmVydCIgc2Vzc2lvbi4KKworICogInN1Ym1vZHVsZSBzdW1tYXJ5IC0tc3VtbWFyeS1saW1pdCIgb3B0aW9uIGRpZCBub3Qgc3VwcG9ydCB0aGUKKyAgICItLW9wdGlvbj12YWx1ZSIgZm9ybS4KKworICogImluZGV4LXBhY2sgLS1maXgtdGhpbiIgdXNlZCBhbiB1bmluaXRpYWxpemVkIHZhbHVlIHRvIGNvbXB1dGUKKyAgIHRoZSBkZWx0YSBkZXB0aHMgb2Ygb2JqZWN0cyBpdCBhcHBlbmRzIHRvIHRoZSByZXN1bHRpbmcgcGFjay4KKworICogImluZGV4LXBhY2sgLS12ZXJpZnktc3RhdCIgdXNlZCBhIGZldyBjb3VudGVycyBvdXRzaWRlIHRoZSBwcm90ZWN0aW9uCisgICBvZiBhIG11dGV4LCBwb3NzaWJseSBzaG93aW5nIGluY29ycmVjdCBudW1iZXJzLgorCisgKiBUaGUgY29kZSB0byBrZWVwIHRyYWNrIG9mIHdoYXQgZGlyZWN0b3J5IG5hbWVzIGFyZSBrbm93biB0byBHaXQgb24KKyAgIHBsYXRmb3JtcyB3aXRoIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMgY291bGQgZ2V0IGNvbmZ1c2VkIHVwb24gYQorICAgaGFzaCBjb2xsaXNpb24gYmV0d2VlbiB0aGVzZSBwYXRobmFtZXMgYW5kIHdvdWxkIGxvb3AgZm9yZXZlci4KKworICogQW5ub3RhdGVkIHRhZ3Mgb3V0c2lkZSB0aGUgcmVmcy90YWdzLyBoaWVyYXJjaHkgd2VyZSBub3QgYWR2ZXJ0aXNlZAorICAgY29ycmVjdGx5IHRvIGxzLXJlbW90ZSBhbmQgZmV0Y2ggd2l0aCByZWNlbnQgdmVyc2lvbnMgb2YgR2l0LgorCisgKiBSZWNlbnQgb3B0aW1pemF0aW9ucyBicm9rZSBzaGFsbG93IGNsb25lcy4KKworICogImdpdCBjbWQgLS0gJzoodG9wJyIgd2FzIG5vdCBkaWFnbm9zZWQgYXMgYW4gaW52YWxpZCBzeW50YXgsIGFuZAorICAgaW5zdGVhZCB0aGUgcGFyc2VyIGtlcHQgcmVhZGluZyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorCisgKiAiZ2l0IHRhZyAtZiA8dGFnPiIgYWx3YXlzIHNhaWQgIlVwZGF0ZWQgdGFnICc8dGFnPiciIGV2ZW4gd2hlbgorICAgY3JlYXRpbmcgYSBuZXcgdGFnIChpLmUuIG5laXRoZXIgb3ZlcndyaXRpbmcgbm9yIHVwZGF0aW5nKS4KKworICogImdpdCBwNCIgZGlkIG5vdCBiZWhhdmUgd2VsbCB3aGVuIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBQNAorICAgY2xpZW50IHdhcyBub3QgaXRzIHJlYWwgcGF0aC4KKyAgIChtZXJnZSBiYmQ4NDg2IHB3L3A0LXN5bWxpbmtlZC1yb290IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBhcmNoaXZlIiByZXBvcnRlZCBhIGZhaWx1cmUgd2hlbiBhc2tlZCB0byBjcmVhdGUgYW4gYXJjaGl2ZSBvdXQKKyAgIG9mIGFuIGVtcHR5IHRyZWUuICBJdCBpcyBtb3JlIGludHVpdGl2ZSB0byBnaXZlIGFuIGVtcHR5CisgICBhcmNoaXZlIGJhY2sgaW4gc3VjaCBhIGNhc2UuCisKKyAqIFdoZW4gImZvcm1hdC1wYXRjaCIgcXVvdGVkIGEgbm9uLWFzY2lpIHN0cmluZyBpbiBoZWFkZXIgZmlsZXMsCisgICBpdCBpbmNvcnJlY3RseSBhcHBsaWVkIHJmYzIwNDcgYW5kIGNob3BwZWQgYSBzaW5nbGUgY2hhcmFjdGVyIGluCisgICB0aGUgbWlkZGxlIG9mIHRoZSBzdHJpbmcuCisKKyAqIEFuIGFsaWFzZWQgY29tbWFuZCBzcGF3bmVkIGZyb20gYSBiYXJlIHJlcG9zaXRvcnkgdGhhdCBkb2VzIG5vdCBzYXkKKyAgIGl0IGlzIGJhcmUgd2l0aCAiY29yZS5iYXJlID0geWVzIiB3YXMgdHJlYXRlZCBhcyBub24tYmFyZSBieSBtaXN0YWtlLgorCisgKiBJbiAiZ2l0IHJlZmxvZyBleHBpcmUiLCB0aGUgUkVBQ0hBQkxFIGJpdCB3YXMgbm90IGNsZWFyZWQgZnJvbSB0aGUKKyAgIGNvcnJlY3Qgb2JqZWN0cy4KKworICogVGhlIGxvZ2ljIHVzZWQgYnkgImdpdCBkaWZmIC1NIC0tc3RhdCIgdG8gc2hvcnRlbiB0aGUgbmFtZXMgb2YKKyAgIGZpbGVzIGJlZm9yZSBhbmQgYWZ0ZXIgYSByZW5hbWUgZGlkIG5vdCB3b3JrIGNvcnJlY3RseSB3aGVuIHRoZQorICAgY29tbW9uIHByZWZpeCBhbmQgc3VmZml4IGJldHdlZW4gdGhlIHR3byBmaWxlbmFtZXMgb3ZlcmxhcHBlZC4KKworICogVGhlICItLW1hdGNoPTxwYXR0ZXJuPiIgb3B0aW9uIG9mICJnaXQgZGVzY3JpYmUiLCB3aGVuIHVzZWQgd2l0aAorICAgIi0tYWxsIiB0byBhbGxvdyByZWZzIHRoYXQgYXJlIG5vdCBhbm5vdGF0ZWQgdGFncyB0byBiZSBhCisgICBiYXNlIG9mIGRlc2NyaXB0aW9uLCBkaWQgbm90IHJlc3RyaWN0IHRoZSBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZAorICAgdG8gdGhvc2UgcmVmcyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJuLgorCisgKiBDbGFyaWZ5IGluIHRoZSBkb2N1bWVudGF0aW9uICJ3aGF0IiBnZXRzIHB1c2hlZCB0byAid2hlcmUiIHdoZW4gdGhlCisgICBjb21tYW5kIGxpbmUgdG8gImdpdCBwdXNoIiBkb2VzIG5vdCBzYXkgdGhlc2UgZXhwbGljaXRseS4KKworICogVGhlICItLWNvbG9yPTx3aGVuPiIgYXJndW1lbnQgdG8gdGhlIGNvbW1hbmRzIGluIHRoZSBkaWZmIGZhbWlseQorICAgd2FzIGRlc2NyaWJlZCBwb29ybHkuCisKKyAqIFRoZSBhcmd1bWVudHMgZ2l2ZW4gdG8gdGhlIHByZS1yZWJhc2UgaG9vayB3ZXJlIG5vdCBkb2N1bWVudGVkLgorCisgKiBUaGUgdjQgaW5kZXggZm9ybWF0IHdhcyBub3QgZG9jdW1lbnRlZC4KKworICogVGhlICItLW1hdGNoPTxwYXR0ZXJuPiIgYXJndW1lbnQgImdpdCBkZXNjcmliZSIgdGFrZXMgdXNlcyBnbG9iCisgICBwYXR0ZXJuIGJ1dCBpdCB3YXNuJ3Qgb2J2aW91cyBmcm9tIHRoZSBkb2N1bWVudGF0aW9uLgorCisgKiBTb21lIHNvdXJjZXMgZmFpbGVkIHRvIGNvbXBpbGUgb24gc3lzdGVtcyB0aGF0IGxhY2sgTklfTUFYSE9TVCBpbgorICAgdGhlaXIgc3lzdGVtIGhlYWRlciAoZS5nLiB6L09TKS4KKworICogQWRkIGFuIGV4YW1wbGUgdXNlIG9mICItLWVudi1maWx0ZXIiIGluICJmaWx0ZXItYnJhbmNoIgorICAgZG9jdW1lbnRhdGlvbi4KKworICogImdpdCBidW5kbGUgdmVyaWZ5IiBkaWQgbm90IHNheSAicmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkiIGZvciBhCisgICBidW5kbGUgdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBwcmVyZXF1aXNpdGVzLgorCisgKiBJbiB0aGUgdjEuOC4wIGVyYSwgd2UgY2hhbmdlZCBzeW1ib2xzIHRoYXQgZG8gbm90IGhhdmUgdG8gYmUgZ2xvYmFsCisgICB0byBmaWxlIHNjb3BlIHN0YXRpYywgYnV0IGEgZmV3IGZ1bmN0aW9ucyBpbiBncmFwaC5jIHdlcmUgdXNlZCBieQorICAgQ0dpdCBzaWRld2F5cywgYnlwYXNzaW5nIHRoZSBlbnRyeSBwb2ludHMgb2YgdGhlIEFQSSB0aGUKKyAgIGluLXRyZWUgdXNlcnMgdXNlLgorCisgKiAiZ2l0IHVwZGF0ZS1pbmRleCAtaCIgZGlkIG5vdCBkbyB0aGUgdXN1YWwgIi1oKGVscCkiIHRoaW5nLgorCisgKiAiZ2l0IGluZGV4LXBhY2siIGhhZCBhIGJ1ZmZlci1vdmVyZmxvdyB3aGlsZSBwcmVwYXJpbmcgYW4KKyAgIGluZm9ybWF0aW9uYWwgbWVzc2FnZSB3aGVuIHRoZSB0cmFuc2xhdGVkIHZlcnNpb24gb2YgaXQgd2FzIHRvbworICAgbG9uZy4KKworICogJ2dpdCBjb21taXQgLW0gIiRtc2ciJyB1c2VkIHRvIGFkZCBhbiBleHRyYSBuZXdsaW5lIGV2ZW4gd2hlbgorICAgJG1zZyBhbHJlYWR5IGVuZGVkIHdpdGggb25lLgorCisgKiBUaGUgU1NMIHBlZXIgdmVyaWZpY2F0aW9uIGRvbmUgYnkgImdpdCBpbWFwLXNlbmQiIGRpZCBub3QgYXNrIGZvcgorICAgU2VydmVyIE5hbWUgSW5kaWNhdGlvbiAoUkZDIDQzNjYpLCBmYWlsaW5nIHRvIGNvbm5lY3QgdG8gU1NML1RMUworICAgc2l0ZXMgdGhhdCBzZXJ2ZSBtdWx0aXBsZSBob3N0bmFtZXMgb24gYSBzaW5nbGUgSVAuCisKKyAqIHBlcmwvR2l0LnBtOjpjYXRfYmxvYiBzbHVycGVkIGV2ZXJ5dGhpbmcgaW4gY29yZSBvbmx5IHRvIHdyaXRlIGl0CisgICBvdXQgdG8gYSBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIHdhcyBub3QgYSB2ZXJ5IHNtYXJ0IHRoaW5nIHRvIGRvLgorCisgKiAiZ2l0IGJyYW5jaCIgZGlkIG5vdCBib3RoZXIgdG8gY2hlY2sgbm9uc2Vuc2UgY29tbWFuZCBsaW5lCisgICBwYXJhbWV0ZXJzLiAgSXQgbm93IGlzc3VlcyBlcnJvcnMgaW4gbWFueSBjYXNlcy4KKworICogVmVyaWZpY2F0aW9uIG9mIHNpZ25lZCB0YWdzIHdhcyBub3QgZG9uZSBjb3JyZWN0bHkgd2hlbiBub3QgaW4gQworICAgb3IgZW4vVVMgbG9jYWxlLgorCisgKiBTb21lIHBsYXRmb3JtcyBhbmQgdXNlcnMgc3BlbGwgVVRGLTggZGlmZmVyZW50bHk7IHJldHJ5IHdpdGggdGhlCisgICBtb3N0IG9mZmljaWFsICJVVEYtOCIgd2hlbiB0aGUgc3lzdGVtIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlCisgICB1c2VyLXN1cHBsaWVkIGVuY29kaW5nIG5hbWUgdGhhdCBpcyBhIGNvbW1vbiBhbHRlcm5hdGl2ZQorICAgc3BlbGxpbmcgb2YgVVRGLTguCisKKyAqIFdoZW4gZXhwb3J0LXN1YnN0IGlzIHVzZWQsICJ6aXAiIG91dHB1dCByZWNvcmRlZCBhbiBpbmNvcnJlY3QKKyAgIHNpemUgb2YgdGhlIGZpbGUuCisKKyAqICJnaXQgYW0gJG1haWxkaXIvIiBhcHBsaWVkIG1lc3NhZ2VzIGluIGFuIHVuZXhwZWN0ZWQgb3JkZXI7IHNvcnQKKyAgIGZpbGVuYW1lcyByZWFkIGZyb20gdGhlIG1haWxkaXIvIGluIGEgd2F5IHRoYXQgaXMgbW9yZSBsaWtlbHkgdG8KKyAgIHNvcnQgdGhlIG1lc3NhZ2VzIGluIHRoZSBvcmRlciB0aGUgd3JpdGluZyBNVUEgbWVhbnQgdG8sIGJ5IHNvcnRpbmcKKyAgIG51bWVyaWMgc2VnbWVudHMgaW4gbnVtZXJpYyBvcmRlciBhbmQgbm9uLW51bWVyaWMgc2VnbWVudHMgaW4KKyAgIGFscGhhYmV0aWNhbCBvcmRlci4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiwgd2hlbiByZWN1cnNlZCBpbnRvIHN1Yi1zdWJtb2R1bGVzLCBkaWQgbm90CisgICBhY2N1bXVsYXRlIHRoZSBwcmVmaXggcGF0aHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjA5MGVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4xLnR4dApAQCAtMCwwICsxLDcxIEBACitHaXQgdjEuOC40LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogU29tZSBvbGQgdmVyc2lvbnMgb2YgYmFzaCBkbyBub3QgZ3JvayBzb21lIGNvbnN0cnVjdHMgbGlrZQorICAgJ3ByaW50ZiAtdiB2YXJuYW1lJyB3aGljaCB0aGUgcHJvbXB0IGFuZCBjb21wbGV0aW9uIGNvZGUgc3RhcnRlZAorICAgdG8gdXNlIHJlY2VudGx5LiAgVGhlIGNvbXBsZXRpb24gYW5kIHByb21wdCBzY3JpcHRzIGhhdmUgYmVlbgorICAgYWRqdXN0ZWQgdG8gd29yayBiZXR0ZXIgd2l0aCB0aGVzZSBvbGQgdmVyc2lvbnMgb2YgYmFzaC4KKworICogSW4gRnJlZUJTRCdzIGFuZCBOZXRCU0QncyAic2giLCBhIHJldHVybiBpbiBhIGRvdCBzY3JpcHQgaW4gYQorICAgZnVuY3Rpb24gcmV0dXJucyBmcm9tIHRoZSBmdW5jdGlvbiwgbm90IG9ubHkgaW4gdGhlIGRvdCBzY3JpcHQsCisgICBicmVha2luZyAiZ2l0IHJlYmFzZSIgb24gdGhlc2UgcGxhdGZvcm1zIChyZWdyZXNzaW9uIGludHJvZHVjZWQKKyAgIGluIDEuOC40LXJjMSkuCisKKyAqICJnaXQgcmViYXNlIC1pIiBhbmQgb3RoZXIgc2NyaXB0ZWQgY29tbWFuZHMgd2VyZSBmZWVkaW5nIGEKKyAgIHJhbmRvbSwgZGF0YSBkZXBlbmRhbnQgZXJyb3IgbWVzc2FnZSB0byAnZWNobycgYW5kIGV4cGVjdGluZyBpdAorICAgdG8gY29tZSBvdXQgbGl0ZXJhbGx5LgorCisgKiBTZXR0aW5nIHRoZSAic3VibW9kdWxlLjxuYW1lPi5wYXRoIiB2YXJpYWJsZSB0byB0aGUgZW1wdHkKKyAgICJ0cnVlIiBjYXVzZWQgdGhlIGNvbmZpZ3VyYXRpb24gcGFyc2VyIHRvIHNlZ2ZhdWx0LgorCisgKiBPdXRwdXQgZnJvbSAiZ2l0IGxvZyAtLWZ1bGwtZGlmZiAtLSA8cGF0aHNwZWM+IiBsb29rZWQgc3RyYW5nZQorICAgYmVjYXVzZSBjb21wYXJpc29uIHdhcyBkb25lIHdpdGggdGhlIHByZXZpb3VzIGFuY2VzdG9yIHRoYXQKKyAgIHRvdWNoZWQgdGhlIHNwZWNpZmllZCA8cGF0aHNwZWM+LCBjYXVzaW5nIHRoZSBwYXRjaGVzIGZvciBwYXRocworICAgb3V0c2lkZSB0aGUgcGF0aHNwZWMgdG8gc2hvdyBtb3JlIHRoYW4gdGhlIHNpbmdsZSBjb21taXQgaGFzCisgICBjaGFuZ2VkLgorCisgKiBUaGUgYXV0by10YWctZm9sbG93aW5nIGNvZGUgaW4gImdpdCBmZXRjaCIgdHJpZXMgdG8gcmV1c2UgdGhlCisgICBzYW1lIHRyYW5zcG9ydCB0d2ljZSB3aGVuIHRoZSBzZXJ2aW5nIGVuZCBkb2VzIG5vdCBjb29wZXJhdGUgYW5kCisgICBkb2VzIG5vdCBnaXZlIHRhZ3MgdGhhdCBwb2ludCB0byBjb21taXRzIHRoYXQgYXJlIGFza2VkIGZvciBhcworICAgcGFydCBvZiB0aGUgcHJpbWFyeSB0cmFuc2Zlci4gIFVuZm9ydHVuYXRlbHksIEdpdC1hd2FyZSB0cmFuc3BvcnQKKyAgIGhlbHBlciBpbnRlcmZhY2UgaXMgbm90IGRlc2lnbmVkIHRvIGJlIHVzZWQgbW9yZSB0aGFuIG9uY2UsIGhlbmNlCisgICB0aGlzIGRpZCBub3Qgd29yayBvdmVyIHNtYXJ0LWh0dHAgdHJhbnNmZXIuICBGaXhlZC4KKworICogU2VuZCBhIGxhcmdlIHJlcXVlc3QgdG8gcmVhZCgyKS93cml0ZSgyKSBhcyBhIHNtYWxsZXIgYnV0IHN0aWxsCisgICByZWFzb25hYmx5IGxhcmdlIGNodW5rcywgd2hpY2ggd291bGQgaW1wcm92ZSB0aGUgbGF0ZW5jeSB3aGVuIHRoZQorICAgb3BlcmF0aW9uIG5lZWRzIHRvIGJlIGtpbGxlZCBhbmQgaW5jaWRlbnRhbGx5IHdvcmtzIGFyb3VuZCBicm9rZW4KKyAgIDY0LWJpdCBzeXN0ZW1zIHRoYXQgY2Fubm90IHRha2UgYSAyR0Igd3JpdGUgb3IgcmVhZCBpbiBvbmUgZ28uCisKKyAqIEEgIi5tYWlsbWFwIiBmaWxlIHRoYXQgZW5kcyB3aXRoIGFuIGluY29tcGxldGUgbGluZSwgd2hlbiByZWFkCisgICBmcm9tIGEgYmxvYiwgd2FzIG5vdCBoYW5kbGVkIHByb3Blcmx5LgorCisgKiBUaGUgcmVjZW50ICJzaG9ydC1jdXQgY2xvbmUgY29ubmVjdGl2aXR5IGNoZWNrIiB0b3BpYyBicm9rZSBhCisgICBzaGFsbG93IHJlcG9zaXRvcnkgd2hlbiBhIGZldGNoIG9wZXJhdGlvbiB0cmllcyB0byBhdXRvLWZvbGxvdworICAgdGFncy4KKworICogV2hlbiBzZW5kLWVtYWlsIGNvbWVzIHVwIHdpdGggYW4gZXJyb3IgbWVzc2FnZSB0byBkaWUgd2l0aCB1cG9uCisgICBmYWlsdXJlIHRvIHN0YXJ0IGFuIFNTTCBzZXNzaW9uLCBpdCB0cmllZCB0byByZWFkIHRoZSBlcnJvcgorICAgc3RyaW5nIGZyb20gYSB3cm9uZyBwbGFjZS4KKworICogQSBjYWxsIHRvIHhyZWFkKCkgd2FzIHVzZWQgd2l0aG91dCBhIGxvb3AgdG8gY29wZSB3aXRoIHNob3J0CisgICByZWFkIGluIHRoZSBjb2RlcGF0aCB0byBzdHJlYW0gbGFyZ2UgYmxvYnMgdG8gYSBwYWNrLgorCisgKiBPbiBwbGF0Zm9ybXMgd2l0aCBmZ2V0YygpIGFuZCBmcmllbmRzIGRlZmluZWQgYXMgbWFjcm9zLCB0aGUKKyAgIGNvbmZpZ3VyYXRpb24gcGFyc2VyIGRpZCBub3QgY29tcGlsZS4KKworICogTmV3IHZlcnNpb25zIG9mIE1lZGlhV2lraSBpbnRyb2R1Y2VkIGEgbmV3IEFQSSBmb3IgcmV0dXJuaW5nCisgICBtb3JlIHRoYW4gNTAwIHJlc3VsdHMgaW4gcmVzcG9uc2UgdG8gYSBxdWVyeSwgd2hpY2ggd291bGQgY2F1c2UKKyAgIHRoZSBNZWRpYVdpa2kgcmVtb3RlIGhlbHBlciB0byBnbyBpbnRvIGFuIGluZmluaXRlIGxvb3AuCisKKyAqIFN1YnZlcnNpb24ncyBzZXJmIGFjY2VzcyBtZXRob2QgKHRoZSBvbmx5IG9uZSBhdmFpbGFibGUgaW4KKyAgIFN1YnZlcnNpb24gMS44KSBmb3IgaHR0cCBhbmQgaHR0cHMgVVJMcyBpbiBza2VsdGEgbW9kZSB0ZWxscyBpdHMKKyAgIGNhbGxlciB0byBvcGVuIG11bHRpcGxlIGZpbGVzIGF0IGEgdGltZSwgd2hpY2ggbWFkZSAiZ2l0IHN2bgorICAgZmV0Y2giIGNvbXBsYWluIHRoYXQgIlRlbXAgZmlsZSB3aXRoIG1vbmlrZXIgJ3N2bl9kZWx0YScgYWxyZWFkeQorICAgaW4gdXNlIiBpbnN0ZWFkIG9mIGZldGNoaW5nLgorCisKK0Fsc28gY29udGFpbnMgYSBoYW5kZnVsIG9mIHRyaXZpYWwgY29kZSBjbGVhbi11cHMsIGRvY3VtZW50YXRpb24KK3VwZGF0ZXMsIHVwZGF0ZXMgdG8gdGhlIHRlc3Qgc3VpdGUsIGV0Yy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNmZiMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjIudHh0CkBAIC0wLDAgKzEsNzcgQEAKK0dpdCB2MS44LjQuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjQuMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBjbG9uZSIgZ2F2ZSBzb21lIHByb2dyZXNzIG1lc3NhZ2VzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQsIG5vdAorICAgdG8gdGhlIHN0YW5kYXJkIGVycm9yLCBhbmQgZGlkIG5vdCBhbGxvdyBzdXBwcmVzc2luZyB0aGVtIHdpdGggdGhlCisgICAiLS1uby1wcm9ncmVzcyIgb3B0aW9uLgorCisgKiAiZm9ybWF0LXBhdGNoIC0tZnJvbT08d2hvbT4iIGZvcmdvdCB0byBvbWl0IHVubmVjZXNzYXJ5IGluLWJvZHkKKyAgIGZyb20gbGluZSwgaS5lLiB3aGVuIDx3aG9tPiBpcyB0aGUgc2FtZSBhcyB0aGUgcmVhbCBhdXRob3IuCisKKyAqICJnaXQgc2hvcnRsb2ciIHVzZWQgdG8gY2hva2UgYW5kIGRpZSB3aGVuIHRoZXJlIGlzIGEgbWFsZm9ybWVkCisgICBjb21taXQgKGUuZy4gbWlzc2luZyBhdXRob3JzKTsgaXQgbm93IHNpbXBseSBpZ25vcmUgc3VjaCBhIGNvbW1pdAorICAgYW5kIGtlZXBzIGdvaW5nLgorCisgKiAiZ2l0IG1lcmdlLXJlY3Vyc2l2ZSIgZGlkIG5vdCBwYXJzZSBpdHMgIi0tZGlmZi1hbGdvcml0aG09IiBjb21tYW5kCisgICBsaW5lIG9wdGlvbiBjb3JyZWN0bHkuCisKKyAqICJnaXQgYnJhbmNoIC0tdHJhY2siIGhhZCBhIG1pbm9yIHJlZ3Jlc3Npb24gaW4gdjEuOC4zLjIgYW5kIGxhdGVyCisgICB0aGF0IG1hZGUgaXQgaW1wb3NzaWJsZSB0byBiYXNlIHlvdXIgbG9jYWwgd29yayBvbiBhbnl0aGluZyBidXQgYQorICAgbG9jYWwgYnJhbmNoIG9mIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5IHlvdSBhcmUgdHJhY2tpbmcgZnJvbS4KKworICogImdpdCBscy1maWxlcyAtayIgbmVlZHMgdG8gY3Jhd2wgb25seSB0aGUgcGFydCBvZiB0aGUgd29ya2luZyB0cmVlCisgICB0aGF0IG1heSBvdmVybGFwIHRoZSBwYXRocyBpbiB0aGUgaW5kZXggdG8gZmluZCBraWxsZWQgZmlsZXMsIGJ1dAorICAgc2hhcmVkIGNvZGUgd2l0aCB0aGUgbG9naWMgdG8gZmluZCBhbGwgdGhlIHVudHJhY2tlZCBmaWxlcywgd2hpY2gKKyAgIG1hZGUgaXQgdW5uZWNlc3NhcmlseSBpbmVmZmljaWVudC4KKworICogV2hlbiB0aGVyZSBpcyBubyBzdWZmaWNpZW50IG92ZXJsYXAgYmV0d2VlbiBvbGQgYW5kIG5ldyBoaXN0b3J5CisgICBkdXJpbmcgYSAiZ2l0IGZldGNoIiBpbnRvIGEgc2hhbGxvdyByZXBvc2l0b3J5LCBvYmplY3RzIHRoYXQgdGhlCisgICBzZW5kaW5nIHNpZGUga25vd3MgdGhlIHJlY2VpdmluZyBlbmQgaGFzIHdlcmUgdW5uZWNlc3NhcmlseSBzZW50LgorCisgKiBXaGVuIHJ1bm5pbmcgImZldGNoIC1xIiwgYSBsb25nIHNpbGVuY2Ugd2hpbGUgdGhlIHNlbmRlciBzaWRlCisgICBjb21wdXRlcyB0aGUgc2V0IG9mIG9iamVjdHMgdG8gc2VuZCBjYW4gYmUgbWlzdGFrZW4gYnkgcHJveGllcyBhcworICAgZHJvcHBlZCBjb25uZWN0aW9uLiAgVGhlIHNlcnZlciBzaWRlIGhhcyBiZWVuIHRhdWdodCB0byBzZW5kIGEKKyAgIHNtYWxsIGVtcHR5IG1lc3NhZ2VzIHRvIGtlZXAgdGhlIGNvbm5lY3Rpb24gYWxpdmUuCisKKyAqIFdoZW4gdGhlIHdlYnNlcnZlciByZXNwb25kcyB3aXRoICI0MDUgTWV0aG9kIE5vdCBBbGxvd2VkIiwgImdpdAorICAgaHR0cC1iYWNrZW5kIiBzaG91bGQgdGVsbCB0aGUgY2xpZW50IHdoYXQgbWV0aG9kcyBhcmUgYWxsb3dlZCB3aXRoCisgICB0aGUgIkFsbG93IiBoZWFkZXIuCisKKyAqICJnaXQgY3Zzc2VydmVyIiBjb21wdXRlZCB0aGUgcGVybWlzc2lvbiBtb2RlIGJpdHMgaW5jb3JyZWN0bHkgZm9yCisgICBleGVjdXRhYmxlIGZpbGVzLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgImFkZCAtaSIgaGFzIGEgY3JpcHBsaW5nIGNvZGUgdG8gd29yayBhcm91bmQKKyAgIEFjdGl2ZVN0YXRlIFBlcmwgbGltaXRhdGlvbiBidXQgaXQgYnkgbWlzdGFrZSBhbHNvIHRyaWdnZXJlZCBvbiBHaXQKKyAgIGZvciBXaW5kb3dzIHdoZXJlIE1TWVMgcGVybCBpcyB1c2VkLgorCisgKiBXZSBtYWRlIHN1cmUgdGhhdCB3ZSBub3RpY2UgdGhlIHVzZXItc3VwcGxpZWQgR0lUX0RJUiBpcyBhY3R1YWxseSBhCisgICBnaXRmaWxlLCBidXQgZGlkIG5vdCBkbyB0aGUgc2FtZSB3aGVuIHRoZSBkZWZhdWx0ICIuZ2l0IiBpcyBhCisgICBnaXRmaWxlLgorCisgKiBXaGVuIGFuIG9iamVjdCBpcyBub3QgZm91bmQgYWZ0ZXIgY2hlY2tpbmcgdGhlIHBhY2tmaWxlcyBhbmQgdGhlbgorICAgbG9vc2Ugb2JqZWN0IGRpcmVjdG9yeSwgcmVhZF9zaGExX2ZpbGUoKSByZS1jaGVja3MgdGhlIHBhY2tmaWxlcyB0bworICAgcHJldmVudCByYWNpbmcgd2l0aCBhIGNvbmN1cnJlbnQgcmVwYWNrZXI7IHRlYWNoIHRoZSBzYW1lIGxvZ2ljIHRvCisgICBoYXNfc2hhMV9maWxlKCkuCisKKyAqICJnaXQgY29tbWl0IC0tYXV0aG9yPSRuYW1lIiwgd2hlbiAkbmFtZSBpcyBub3QgaW4gdGhlIGNhbm9uaWNhbAorICAgIkEuIFUuIFRob3IgPGF1LnRob3JAZXhhbXBsZS54ej4iIGZvcm1hdCwgbG9va3MgZm9yIGEgbWF0Y2hpbmcgbmFtZQorICAgZnJvbSBleGlzdGluZyBoaXN0b3J5LCBidXQgZGlkIG5vdCBjb25zdWx0IG1haWxtYXAgdG8gZ3JhYiB0aGUKKyAgIHByZWZlcnJlZCBhdXRob3IgbmFtZS4KKworICogVGhlIGNvbW1pdCBvYmplY3QgbmFtZXMgaW4gdGhlIGluc24gc2hlZXQgdGhhdCB3YXMgcHJlcGFyZWQgYXQgdGhlCisgICBiZWdpbm5pbmcgb2YgInJlYmFzZSAtaSIgc2Vzc2lvbiBjYW4gYmVjb21lIGFtYmlndW91cyBhcyB0aGUKKyAgIHJlYmFzaW5nIHByb2dyZXNzZXMgYW5kIHRoZSByZXBvc2l0b3J5IGdhaW5zIG1vcmUgY29tbWl0cy4gTWFrZQorICAgc3VyZSB0aGUgaW50ZXJuYWwgcmVjb3JkIGlzIGtlcHQgd2l0aCBmdWxsIDQwLWhleCBvYmplY3QgbmFtZXMuCisKKyAqICJnaXQgcmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIiBpbnRlcm5hbGx5IHVzZWQgdGhlIG1lcmdlIG1hY2hpbmVyeQorICAgYW5kIGFzIGEgc2lkZSBlZmZlY3QsIGxlZnQgbWVyZ2Ugc3VtbWFyeSBtZXNzYWdlIGluIHRoZSBsb2csIGJ1dAorICAgd2hlbiByZWJhc2luZywgdGhlcmUgc2hvdWxkIG5vdCBiZSBhIG5lZWQgZm9yIG1lcmdlIHN1bW1hcnkuCisKKyAqICJnaXQgcmViYXNlIC1pIiBmb3Jnb3QgdGhhdCB0aGUgY29tbWVudCBjaGFyYWN0ZXIgY2FuIGJlCisgICBjb25maWd1cmFibGUgd2hpbGUgcmVhZGluZyBpdHMgaW5zbiBzaGVldC4KKworQWxzbyBjb250YWlucyBhIGhhbmRmdWwgb2YgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcywgZG9jdW1lbnRhdGlvbgordXBkYXRlcywgdXBkYXRlcyB0byB0aGUgdGVzdCBzdWl0ZSwgZXRjLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3YTFiMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuMy50eHQKQEAgLTAsMCArMSw1NCBAQAorR2l0IHYxLjguNC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguNC4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB1c2Ugb2YgUGVybCBpbiBvdXIgdGVzdCBzdWl0ZSBhbmQgTk9fUEVSTAorICAgaGFzIGJlZW4gY2xhcmlmaWVkIGEgYml0LgorCisgKiBBIGZhc3QtaW1wb3J0IHN0cmVhbSBleHByZXNzZXMgYSBwYXRobmFtZSB3aXRoIGZ1bm55IGNoYXJhY3RlcnMgYnkKKyAgIHF1b3RpbmcgdGhlbSBpbiBDIHN0eWxlOyByZW1vdGUtaGcgcmVtb3RlIGhlbHBlciAoaW4gY29udHJpYi8pCisgICBmb3Jnb3QgdG8gdW5xdW90ZSBzdWNoIGEgcGF0aC4KKworICogT25lIGxvbmctc3RhbmRpbmcgZmxhdyBpbiB0aGUgcGFjayB0cmFuc2ZlciBwcm90b2NvbCB1c2VkIGJ5ICJnaXQKKyAgIGNsb25lIiB3YXMgdGhhdCB0aGVyZSB3YXMgbm8gd2F5IHRvIHRlbGwgdGhlIG90aGVyIGVuZCB3aGljaCBicmFuY2gKKyAgICJIRUFEIiBwb2ludHMgYXQsIGFuZCB0aGUgcmVjZWl2aW5nIGVuZCBuZWVkZWQgdG8gZ3Vlc3MuICBBIG5ldworICAgY2FwYWJpbGl0eSBoYXMgYmVlbiBkZWZpbmVkIGluIHRoZSBwYWNrIHByb3RvY29sIHRvIGNvbnZleSB0aGlzCisgICBpbmZvcm1hdGlvbiBzbyB0aGF0IGNsb25pbmcgZnJvbSBhIHJlcG9zaXRvcnkgd2l0aCBtb3JlIHRoYW4gb25lCisgICBicmFuY2hlcyBwb2ludGluZyBhdCB0aGUgc2FtZSBjb21taXQgd2hlcmUgdGhlIEhFQUQgaXMgYXQgbm93CisgICByZWxpYWJseSBzZXRzIHRoZSBpbml0aWFsIGJyYW5jaCBpbiB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkuCisKKyAqIFdlIGRpZCBub3QgaGFuZGxlIGNhc2VzIHdoZXJlIGh0dHAgdHJhbnNwb3J0IGdldHMgcmVkaXJlY3RlZCBkdXJpbmcKKyAgIHRoZSBhdXRob3JpemF0aW9uIHJlcXVlc3QgKGUuZy4gZnJvbSBodHRwOi8vIHRvIGh0dHBzOi8vKS4KKworICogImdpdCByZXYtbGlzdCAtLW9iamVjdHMgXnYxLjBeIHYxLjAiIGdhdmUgdjEuMCB0YWcgaXRzZWxmIGluIHRoZQorICAgb3V0cHV0LCBidXQgImdpdCByZXYtbGlzdCAtLW9iamVjdHMgdjEuMF4uLnYxLjAiIGRpZCBub3QuCisKKyAqIFRoZSBmYWxsLWJhY2sgcGFyc2luZyBvZiBjb21taXQgb2JqZWN0cyB3aXRoIGJyb2tlbiBhdXRob3Igb3IKKyAgIGNvbW1pdHRlciBsaW5lcyB3ZXJlIGxlc3Mgcm9idXN0IHRoYW4gaWRlYWwgaW4gcGlja2luZyB1cCB0aGUKKyAgIHRpbWVzdGFtcHMuCisKKyAqIEJhc2ggcHJvbXB0aW5nIGNvZGUgdG8gZGVhbCB3aXRoIGFuIFNWTiByZW1vdGUgYXMgYW4gdXBzdHJlYW0KKyAgIHdlcmUgY29kZWQgaW4gYSB3YXkgbm90IHN1cHBvcnRlZCBieSBvbGRlciBCYXNoIHZlcnNpb25zICgzLngpLgorCisgKiAiZ2l0IGNoZWNrb3V0IHRvcGljIiwgd2hlbiB0aGVyZSBpcyBub3QgeWV0IGEgbG9jYWwgInRvcGljIiBicmFuY2gKKyAgIGJ1dCB0aGVyZSBpcyBhIHVuaXF1ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciBhIHJlbW90ZSAidG9waWMiCisgICBicmFuY2gsIHByZXRlbmRlZCBhcyBpZiAiZ2l0IGNoZWNrb3V0IC10IC1iIHRvcGljIHJlbW90ZS8kci90b3BpYyIKKyAgIChmb3IgdGhhdCB1bmlxdWUgcmVtb3RlICRyKSB3YXMgcnVuLiBUaGlzIGhhY2sgaG93ZXZlciB3YXMgbm90CisgICBpbXBsZW1lbnRlZCBmb3IgImdpdCBjaGVja291dCB0b3BpYyAtLSIuCisKKyAqIENvbG9yaW5nIGFyb3VuZCBvY3RvcHVzIG1lcmdlcyBpbiAibG9nIC0tZ3JhcGgiIG91dHB1dCB3YXMgc2NyZXd5LgorCisgKiBXZSBkaWQgbm90IGdlbmVyYXRlIEhUTUwgdmVyc2lvbiBvZiBkb2N1bWVudGF0aW9uIHRvICJnaXQgc3VidHJlZSIKKyAgIGluIGNvbnRyaWIvLgorCisgKiBUaGUgc3lub3BzaXMgc2VjdGlvbiBvZiAiZ2l0IHVucGFjay1vYmplY3RzIiBkb2N1bWVudGF0aW9uIGhhcyBiZWVuCisgICBjbGFyaWZpZWQgYSBiaXQuCisKKyAqIEFuIGFuY2llbnQgSG93LVRvIG9uIHNlcnZpbmcgR2l0IHJlcG9zaXRvcmllcyBvbiBhbiBIVFRQIHNlcnZlcgorICAgbGFja2VkIGEgd2FybmluZyB0aGF0IGl0IGhhcyBiZWVuIG1vc3RseSBzdXBlcnNlZGVkIHdpdGggbW9yZQorICAgbW9kZXJuIHdheS4KKworQWxzbyBjb250YWlucyBhIGhhbmRmdWwgb2YgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcywgZG9jdW1lbnRhdGlvbgordXBkYXRlcywgdXBkYXRlcyB0byB0aGUgdGVzdCBzdWl0ZSwgZXRjLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjMWNlMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuNC50eHQKQEAgLTAsMCArMSwxMCBAQAorR2l0IHYxLjguNC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguNC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZml4IGluIHYxLjguNC4zIHRvIHRoZSBwYWNrIHRyYW5zZmVyIHByb3RvY29sIHRvIHByb3BhZ2F0ZQorICAgdGhlIHRhcmdldCBvZiBzeW1ib2xpYyByZWZzIGJyb2tlICJnaXQgY2xvbmUvZ2l0IGZldGNoIiBmcm9tIGEKKyAgIHJlcG9zaXRvcnkgd2l0aCB0b28gbWFueSBzeW1ib2xpYyByZWZzLiBBcyBhIGhvdGZpeC93b3JrYXJvdW5kLAorICAgd2UgdHJhbnNmZXIgb25seSB0aGUgaW5mb3JtYXRpb24gb24gSEVBRC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjQuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNWJkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LjUudHh0CkBAIC0wLDAgKzEsMTMgQEAKK0dpdCB2MS44LjQuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjQuNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogUmVjZW50IHVwZGF0ZSB0byByZW1vdGUtaGcgdGhhdCBhdHRlbXB0ZWQgdG8gbWFrZSBpdCB3b3JrIGJldHRlcgorICAgd2l0aCBub24gQVNDSUkgcGF0aG5hbWVzIGZlZCBVbmljb2RlIHN0cmluZ3MgdG8gdGhlIHVuZGVybHlpbmcgSGcKKyAgIEFQSSwgd2hpY2ggd2FzIHdyb25nLgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBpbml0IiBjb3BpZWQgInN1Ym1vZHVsZS4kbmFtZS51cGRhdGUiIHNldHRpbmdzIGZyb20KKyAgIC5naXRtb2R1bGVzIHRvIC5naXQvY29uZmlnIHdpdGhvdXQgbWFraW5nIHN1cmUgaWYgdGhlIHN1Z2dlc3RlZAorICAgdmFsdWUgd2FzIHNlbnNpYmxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmY2ODFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNC50eHQKQEAgLTAsMCArMSw0ODYgQEAKK0dpdCB2MS44LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMgKGZvciBHaXQgMi4wKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gImdpdCBwdXNoIFskdGhlcmVdIiBkb2VzIG5vdCBzYXkgd2hhdCB0byBwdXNoLCB3ZSBoYXZlIHVzZWQgdGhlCit0cmFkaXRpb25hbCAibWF0Y2hpbmciIHNlbWFudGljcyBzbyBmYXIgKGFsbCB5b3VyIGJyYW5jaGVzIHdlcmUgc2VudAordG8gdGhlIHJlbW90ZSBhcyBsb25nIGFzIHRoZXJlIGFscmVhZHkgYXJlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIG5hbWUKK292ZXIgdGhlcmUpLiAgSW4gR2l0IDIuMCwgdGhlIGRlZmF1bHQgd2lsbCBjaGFuZ2UgdG8gdGhlICJzaW1wbGUiCitzZW1hbnRpY3MgdGhhdCBwdXNoZXM6CisKKyAtIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBhbmQgb25seQorICAgd2hlbiB0aGUgY3VycmVudCBicmFuY2ggaXMgc2V0IHRvIGludGVncmF0ZSB3aXRoIHRoYXQgcmVtb3RlCisgICBicmFuY2gsIGlmIHlvdSBhcmUgcHVzaGluZyB0byB0aGUgc2FtZSByZW1vdGUgYXMgeW91IGZldGNoIGZyb207IG9yCisKKyAtIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBpZiB5b3UKKyAgIGFyZSBwdXNoaW5nIHRvIGEgcmVtb3RlIHRoYXQgaXMgbm90IHdoZXJlIHlvdSB1c3VhbGx5IGZldGNoIGZyb20uCisKK1VzZSB0aGUgdXNlciBwcmVmZXJlbmNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgInB1c2guZGVmYXVsdCIgdG8KK2NoYW5nZSB0aGlzLiAgSWYgeW91IGFyZSBhbiBvbGQtdGltZXIgd2hvIGlzIHVzZWQgdG8gdGhlICJtYXRjaGluZyIKK3NlbWFudGljcywgeW91IGNhbiBzZXQgdGhlIHZhcmlhYmxlIHRvICJtYXRjaGluZyIgdG8ga2VlcCB0aGUKK3RyYWRpdGlvbmFsIGJlaGF2aW91ci4gIElmIHlvdSB3YW50IHRvIGxpdmUgaW4gdGhlIGZ1dHVyZSBlYXJseSwgeW91CitjYW4gc2V0IGl0IHRvICJzaW1wbGUiIHRvZGF5IHdpdGhvdXQgd2FpdGluZyBmb3IgR2l0IDIuMC4KKworV2hlbiAiZ2l0IGFkZCAtdSIgKGFuZCAiZ2l0IGFkZCAtQSIpIGlzIHJ1biBpbnNpZGUgYSBzdWJkaXJlY3RvcnkgYW5kCitkb2VzIG5vdCBzcGVjaWZ5IHdoaWNoIHBhdGhzIHRvIGFkZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdAord2lsbCBvcGVyYXRlIG9uIHRoZSBlbnRpcmUgdHJlZSBpbiBHaXQgMi4wIGZvciBjb25zaXN0ZW5jeQord2l0aCAiZ2l0IGNvbW1pdCAtYSIgYW5kIG90aGVyIGNvbW1hbmRzLiAgVGhlcmUgd2lsbCBiZSBubworbWVjaGFuaXNtIHRvIG1ha2UgcGxhaW4gImdpdCBhZGQgLXUiIGJlaGF2ZSBsaWtlICJnaXQgYWRkIC11IC4iLgorQ3VycmVudCB1c2VycyBvZiAiZ2l0IGFkZCAtdSIgKHdpdGhvdXQgYSBwYXRoc3BlYykgc2hvdWxkIHN0YXJ0Cit0cmFpbmluZyB0aGVpciBmaW5nZXJzIHRvIGV4cGxpY2l0bHkgc2F5ICJnaXQgYWRkIC11IC4iCitiZWZvcmUgR2l0IDIuMCBjb21lcy4gIEEgd2FybmluZyBpcyBpc3N1ZWQgd2hlbiB0aGVzZSBjb21tYW5kcyBhcmUKK3J1biB3aXRob3V0IGEgcGF0aHNwZWMgYW5kIHdoZW4geW91IGhhdmUgbG9jYWwgY2hhbmdlcyBvdXRzaWRlIHRoZQorY3VycmVudCBkaXJlY3RvcnksIGJlY2F1c2UgdGhlIGJlaGF2aW91ciBpbiBHaXQgMi4wIHdpbGwgYmUgZGlmZmVyZW50Citmcm9tIHRvZGF5J3MgdmVyc2lvbiBpbiBzdWNoIGEgc2l0dWF0aW9uLgorCitJbiBHaXQgMi4wLCAiZ2l0IGFkZCA8cGF0aD4iIHdpbGwgYmVoYXZlIGFzICJnaXQgYWRkIC1BIDxwYXRoPiIsIHNvCit0aGF0ICJnaXQgYWRkIGRpci8iIHdpbGwgbm90aWNlIHBhdGhzIHlvdSByZW1vdmVkIGZyb20gdGhlIGRpcmVjdG9yeQorYW5kIHJlY29yZCB0aGUgcmVtb3ZhbC4gIFZlcnNpb25zIGJlZm9yZSBHaXQgMi4wLCBpbmNsdWRpbmcgdGhpcworcmVsZWFzZSwgd2lsbCBrZWVwIGlnbm9yaW5nIHJlbW92YWxzLCBidXQgdGhlIHVzZXJzIHdobyByZWx5IG9uIHRoaXMKK2JlaGF2aW91ciBhcmUgZW5jb3VyYWdlZCB0byBzdGFydCB1c2luZyAiZ2l0IGFkZCAtLWlnbm9yZS1yZW1vdmFsIDxwYXRoPiIKK25vdyBiZWZvcmUgMi4wIGlzIHJlbGVhc2VkLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuOC4zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3JlaWduIGludGVyZmFjZXMsIHN1YnN5c3RlbXMgYW5kIHBvcnRzLgorCisgKiBDeWd3aW4gcG9ydCBoYXMgYmVlbiB1cGRhdGVkIGZvciBtb3JlIHJlY2VudCBDeWd3aW4gMS43LgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgbm93IGhvbm9ycyAtLXN0cmF0ZWd5IGFuZCAtWCBvcHRpb25zLgorCisgKiBHaXQtZ3VpIGhhcyBiZWVuIHVwZGF0ZWQgdG8gaXRzIDAuMTguMCB2ZXJzaW9uLgorCisgKiBNZWRpYVdpa2kgcmVtb3RlIGhlbHBlciAoaW4gY29udHJpYi8pIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZQorICAgY3JlZGVudGlhbCBoZWxwZXIgaW50ZXJmYWNlIGZyb20gR2l0LnBtLgorCisgKiBVcGRhdGUgYnVpbGQgZm9yIEN5Z3dpbiAxLls1N10uICBUb3JzdGVuIELDtmdlcnNoYXVzZW4gcmVwb3J0cyB0aGF0CisgICB0aGlzIGlzIGZpbmUgd2l0aCBDeWd3aW4gMS43ICgkZ21hbmUvMjI1ODI0KSBzbyBsZXQncyB0cnkgbW92aW5nIGl0CisgICBhaGVhZC4KKworICogVGhlIGNyZWRlbnRpYWwgaGVscGVyIHRvIHRhbGsgdG8ga2V5Y2hhaW4gb24gT1MgWCAoaW4gY29udHJpYi8pIGhhcworICAgYmVlbiB1cGRhdGVkIHRvIGtpY2sgaW4gbm90IGp1c3Qgd2hlbiB0YWxraW5nIGh0dHAvaHR0cHMgYnV0IGFsc28KKyAgIGltYXAocykgYW5kIHNtdHAuCisKKyAqIFJlbW90ZSB0cmFuc3BvcnQgaGVscGVyIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmVwb3J0IGVycm9ycyBhbmQKKyAgIG1haW50YWluIHJlZiBoaWVyYXJjaHkgdXNlZCB0byBrZWVwIHRyYWNrIG9mIGl0cyBvd24gc3RhdGUgYmV0dGVyLgorCisgKiBXaXRoICJleHBvcnQiIHJlbW90ZS1oZWxwZXIgcHJvdG9jb2wsICgxKSBhIHB1c2ggdGhhdCB0cmllcyB0bworICAgdXBkYXRlIGEgcmVtb3RlIHJlZiB3aG9zZSBuYW1lIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwdXNoaW5nIHNpZGUKKyAgIGRvZXMgbm90IHdvcmsgeWV0LCBhbmQgKDIpIHRoZSBoZWxwZXIgbWF5IG5vdCBrbm93IGhvdyB0byBkbworICAgLS1kcnktcnVuOyB0aGVzZSBwcm9ibGVtYXRpYyBjYXNlcyBhcmUgZGlzYWJsZWQgZm9yIG5vdy4KKworICogZ2l0LXJlbW90ZS1oZy9ienIgKGluIGNvbnRyaWIvKSB1cGRhdGVzLgorCisgKiBnaXQtcmVtb3RlLW13IChpbiBjb250cmliLykgaGludHMgdXNlcnMgdG8gY2hlY2sgdGhlIGNlcnRpZmljYXRlLAorICAgd2hlbiBodHRwczovLyBjb25uZWN0aW9uIGZhaWxlZC4KKworICogZ2l0LXJlbW90ZS1tdyAoaW4gY29udHJpYi8pIGFkZHMgYSBjb21tYW5kIHRvIGFsbG93IHByZXZpZXdpbmcgdGhlCisgICBjb250ZW50cyBsb2NhbGx5IGJlZm9yZSBwdXNoaW5nIGl0IG91dCwgd2hlbiB3b3JraW5nIHdpdGggYQorICAgTWVkaWFXaWtpIHJlbW90ZS4KKworCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogU2FtcGxlICJwb3N0LXJlY2VpdmUtZW1haWwiIGhvb2sgc2NyaXB0IGdvdCBhbiBlbmhhbmNlZCByZXBsYWNlbWVudAorICAgIm11bHRpbWFpbCIgKGluIGNvbnRyaWIvKS4KKworICogQWxzbyBpbiBjb250cmliLyBpcyBhIG5ldyAiY29udGFjdHMiIHNjcmlwdCB0aGF0IHJ1bnMgImdpdCBibGFtZSIKKyAgIHRvIGZpbmQgb3V0IHRoZSBwZW9wbGUgd2hvIG1heSBiZSBpbnRlcmVzdGVkIGluIGEgc2V0IG9mIGNoYW5nZXMuCisKKyAqICJnaXQgY2xlYW4iIGNvbW1hbmQgbGVhcm5lZCBhbiBpbnRlcmFjdGl2ZSBtb2RlLgorCisgKiBUaGUgIi0taGVhZCIgb3B0aW9uIHRvICJnaXQgc2hvdy1yZWYiIHdhcyBvbmx5IHRvIGFkZCAiSEVBRCIgdG8gdGhlCisgICBsaXN0IG9mIGNhbmRpZGF0ZSByZWZzIHRvIGJlIGZpbHRlcmVkIGJ5IHRoZSB1c3VhbCBydWxlcworICAgKGUuZy4gIi0taGVhZHMiIHRoYXQgb25seSBzaG93IHJlZnMgdW5kZXIgcmVmcy9oZWFkcykuICBUaGUgbWVhbmluZworICAgb2YgdGhlIG9wdGlvbiBoYXMgYmVlbiBjaGFuZ2VkIHRvIGFsd2F5cyBzaG93ICJIRUFEIiByZWdhcmRsZXNzIG9mCisgICB3aGF0IGZpbHRlcmluZyB3aWxsIGJlIGFwcGxpZWQgdG8gYW55IG90aGVyIHJlZi4KKworICAgVGhpcyBpcyBhIGJhY2t3YXJkIGluY29tcGF0aWJsZSBjaGFuZ2UgYW5kIG1pZ2h0IGNhdXNlIGJyZWFrYWdlcyB0bworICAgcGVvcGxlJ3MgZXhpc3Rpbmcgc2NyaXB0cy4KKworICogImdpdCBzaG93IC1zIiB3YXMgbGVzcyBkaXNjb3ZlcmFibGUgdGhhbiBpdCBzaG91bGQgaGF2ZSBiZWVuLiAgSXQKKyAgIG5vdyBoYXMgYSBuYXR1cmFsIHN5bm9ueW0gImdpdCBzaG93IC0tbm8tcGF0Y2giLgorCisgKiAiZ2l0IGNoZWNrLW1haWxtYXAiIGlzIGEgbmV3IGNvbW1hbmQgdGhhdCBsZXRzIHlvdSBtYXAgdXNlcm5hbWVzCisgICBhbmQgZS1tYWlsIGFkZHJlc3NlcyB0aHJvdWdoIHRoZSBtYWlsbWFwIG1lY2hhbmlzbSwganVzdCBsaWtlIG1hbnkKKyAgIGJ1aWx0LWluIGNvbW1hbmRzIGRvLgorCisgKiAiZ2l0IG5hbWUtcmV2IiBsZWFybmVkIHRvIG5hbWUgYW4gYW5ub3RhdGVkIHRhZyBvYmplY3QgYmFjayB0byBpdHMKKyAgIHRhZ25hbWU7ICJnaXQgbmFtZS1yZXYgJChnaXQgcmV2LXBhcnNlIHYxLjAuMCkiIGdpdmVzICJ0YWdzL3YxLjAuMCIsCisgICBmb3IgZXhhbXBsZS4KKworICogImdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPTxmb3JtYXQ+IiBpcyBhZGRlZCwgcHJpbWFyaWx5IHRvIGFsbG93CisgICBvbi1kaXNrIGZvb3RwcmludCBvZiBvYmplY3RzIGluIHBhY2tmaWxlcyAob2Z0ZW4gdGhleSBhcmUgYSBsb3QKKyAgIHNtYWxsZXIgdGhhbiB0aGVpciB0cnVlIHNpemUsIHdoZW4gZXhwcmVzc2VkIGFzIGRlbHRhcykgdG8gYmUKKyAgIHJlcG9ydGVkLgorCisgKiAiZ2l0IHJlYmFzZSBbLWldIiB1c2VkIHRvIGxlYXZlIGp1c3QgInJlYmFzZSIgYXMgaXRzIHJlZmxvZyBtZXNzYWdlcworICAgZm9yIHNvbWUgb3BlcmF0aW9ucy4gVGhleSBoYXZlIGJlZW4gcmV3b3JkZWQgdG8gYmUgbW9yZSBpbmZvcm1hdGl2ZS4KKworICogSW4gYWRkaXRpb24gdG8gdGhlIGNob2ljZSBmcm9tICJyZWJhc2UsIG1lcmdlLCBvciBjaGVja291dC1kZXRhY2giLAorICAgInN1Ym1vZHVsZSB1cGRhdGUiIGNhbiBhbGxvdyBhIGN1c3RvbSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gdG8KKyAgIHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIG9mIHN1Ym1vZHVsZXMgdmlhIHRoZSAic3VibW9kdWxlLioudXBkYXRlIgorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICogImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBjYW4gb3B0aW9uYWxseSBjbG9uZSB0aGUgc3VibW9kdWxlCisgICByZXBvc2l0b3JpZXMgc2hhbGxvd2x5LgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCIgbGVhcm5lZCAiLS1mcm9tWz13aG9tXSIgb3B0aW9uLCB3aGljaCBzZXRzIHRoZQorICAgIkZyb206ICIgaGVhZGVyIHRvIHRoZSBzcGVjaWZpZWQgcGVyc29uIChvciB0aGUgcGVyc29uIHdobyBydW5zIHRoZQorICAgY29tbWFuZCwgaWYgIj13aG9tIiBwYXJ0IGlzIG1pc3NpbmcpIGFuZCBtb3ZlIHRoZSBvcmlnaW5hbCBhdXRob3IKKyAgIGluZm9ybWF0aW9uIHRvIGFuIGluLWJvZHkgRnJvbTogaGVhZGVyIGFzIG5lY2Vzc2FyeS4KKworICogVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgIm1lcmdlLmZmIiB3YXMgY2xlYXJ5IGEgdHJpLXN0YXRlIHRvCisgICBjaG9vc2Ugb25lIGZyb20gImZhdm9yIGZhc3QtZm9yd2FyZCB3aGVuIHBvc3NpYmxlIiwgImFsd2F5cyBjcmVhdGUKKyAgIGEgbWVyZ2UgZXZlbiB3aGVuIHRoZSBoaXN0b3J5IGNvdWxkIGZhc3QtZm9yd2FyZCIgYW5kICJkbyBub3QKKyAgIGNyZWF0ZSBhbnkgbWVyZ2UsIG9ubHkgdXBkYXRlIHdoZW4gdGhlIGhpc3RvcnkgZmFzdC1mb3J3YXJkcyIsIGJ1dAorICAgdGhlIGNvbW1hbmQgbGluZSBwYXJzZXIgZGlkIG5vdCBpbXBsZW1lbnQgdGhlIHVzdWFsIGNvbnZlbnRpb24gb2YKKyAgICJsYXN0IG9uZSB3aW5zLCBhbmQgY29tbWFuZCBsaW5lIG92ZXJyaWRlcyB0aGUgY29uZmlndXJhdGlvbiIKKyAgIGNvcnJlY3RseS4KKworICogImdpdHdlYiIgbGVhcm5lZCB0byBvcHRpb25hbGx5IHBsYWNlIGV4dHJhIGxpbmtzIHRoYXQgcG9pbnQgYXQgdGhlCisgICBsZXZlbHMgaGlnaGVyIHRoYW4gdGhlIEdpdHdlYiBwYWdlcyB0aGVtc2VsdmVzIGluIHRoZSBicmVhZGNydW1icywKKyAgIHNvIHRoYXQgaXQgY2FuIGJlIHVzZWQgYXMgcGFydCBvZiBhIGxhcmdlciBpbnN0YWxsYXRpb24uCisKKyAqICJnaXQgbG9nIC0tZm9ybWF0PSIgbm93IGhvbm9ycyBpMThuLmxvZ291dHB1dGVuY29kaW5nIGNvbmZpZ3VyYXRpb24KKyAgIHZhcmlhYmxlLgorCisgKiBUaGUgInB1c2guZGVmYXVsdD1zaW1wbGUiIG1vZGUgb2YgImdpdCBwdXNoIiBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBiZWhhdmUgbGlrZSAiY3VycmVudCIgd2l0aG91dCByZXF1aXJpbmcgYSByZW1vdGUgdHJhY2tpbmcKKyAgIGluZm9ybWF0aW9uLCB3aGVuIHlvdSBwdXNoIHRvIGEgcmVtb3RlIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gd2hlcmUKKyAgIHlvdSBmZXRjaCBmcm9tIChpLmUuIGEgdHJpYW5ndWxhciB3b3JrZmxvdykuCisKKyAqIEhhdmluZyBtdWx0aXBsZSAiZml4dXAhIiBvbiBhIGxpbmUgaW4gdGhlIHJlYmFzZSBpbnN0cnVjdGlvbiBzaGVldAorICAgZGlkIG5vdCB3b3JrIHZlcnkgd2VsbCB3aXRoICJnaXQgcmViYXNlIC1pIC0tYXV0b3NxdWFzaCIuCisKKyAqICJnaXQgbG9nIiBsZWFybmVkIHRoZSAiLS1hdXRob3ItZGF0ZS1vcmRlciIgb3B0aW9uLCB3aXRoIHdoaWNoIHRoZQorICAgb3V0cHV0IGlzIHRvcG9sb2dpY2FsbHkgc29ydGVkIGFuZCBjb21taXRzIGluIHBhcmFsbGVsIGhpc3RvcmllcworICAgYXJlIHNob3duIGludGVybWl4ZWQgdG9nZXRoZXIgYmFzZWQgb24gdGhlIGF1dGhvciB0aW1lc3RhbXAuCisKKyAqIFZhcmlvdXMgc3ViY29tbWFuZHMgb2YgImdpdCBzdWJtb2R1bGUiIHJlZnVzZWQgdG8gcnVuIGZyb20gYW55d2hlcmUKKyAgIG90aGVyIHRoYW4gdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlIG9mIHRoZSBzdXBlcnByb2plY3QsIGJ1dAorICAgdGhleSBoYXZlIGJlZW4gdGF1Z2h0IHRvIGxldCB5b3UgcnVuIGZyb20gYSBzdWJkaXJlY3RvcnkuCisKKyAqICJnaXQgZGlmZiIgbGVhcm5lZCBhIG1vZGUgdGhhdCBpZ25vcmVzIGh1bmtzIHdob3NlIGNoYW5nZSBjb25zaXN0cworICAgb25seSBvZiBhZGRpdGlvbnMgYW5kIHJlbW92YWxzIG9mIGJsYW5rIGxpbmVzLCB3aGljaCBpcyB0aGUgc2FtZSBhcworICAgImRpZmYgLUIiIChpZ25vcmUgYmxhbmsgbGluZXMpIG9mIEdOVSBkaWZmLgorCisgKiAiZ2l0IHJtIiBnaXZlcyBhIHNpbmdsZSBtZXNzYWdlIGZvbGxvd2VkIGJ5IGxpc3Qgb2YgcGF0aHMgdG8gcmVwb3J0CisgICBtdWx0aXBsZSBwYXRocyB0aGF0IGNhbm5vdCBiZSByZW1vdmVkLgorCisgKiAiZ2l0IHJlYmFzZSIgY2FuIGJlIHRvbGQgd2l0aCAiOi9sb29rIGZvciB0aGlzIHN0cmluZyIgc3ludGF4IGNvbW1pdHMKKyAgIHRvIHJlcGxheSB0aGUgY2hhbmdlcyBvbnRvIGFuZCB3aGVyZSB0aGUgd29yayB0byBiZSByZXBsYXllZCBiZWdpbnMuCisKKyAqIE1hbnkgdHV0b3JpYWxzIHRlYWNoIHVzZXJzIHRvIHNldCAiY29sb3IudWkiIHRvICJhdXRvIiBhcyB0aGUgZmlyc3QKKyAgIHRoaW5nIGFmdGVyIHlvdSBzZXQgInVzZXIubmFtZS9lbWFpbCIgdG8gaW50cm9kdWNlIHlvdXJzZWx2ZXMgdG8KKyAgIEdpdC4gIE5vdyB0aGUgdmFyaWFibGUgZGVmYXVsdHMgdG8gImF1dG8iLgorCisgKiBPbiBDeWd3aW4sICJjeWdzdGFydCIgaXMgbm93IHJlY29nbmlzZWQgYXMgYSBwb3NzaWJsZSB3YXkgdG8gc3RhcnQKKyAgIGEgd2ViIGJyb3dzZXIgKHVzZWQgaW4gImhlbHAgLXciIGFuZCAiaW5zdGF3ZWIiIGFtb25nIG90aGVycykuCisKKyAqICJnaXQgc3RhdHVzIiBsZWFybmVkIHN0YXR1cy5icmFuY2ggYW5kIHN0YXR1cy5zaG9ydCBjb25maWd1cmF0aW9uCisgICB2YXJpYWJsZXMgdG8gdXNlIC0tYnJhbmNoIGFuZCAtLXNob3J0IG9wdGlvbnMgYnkgZGVmYXVsdCAob3ZlcnJpZGUKKyAgIHdpdGggLS1uby1icmFuY2ggYW5kIC0tbm8tc2hvcnQgb3B0aW9ucyBmcm9tIHRoZSBjb21tYW5kIGxpbmUpLgorCisgKiAiZ2l0IGNtZCA8bmFtZT4iLCB3aGVuIDxuYW1lPiBoYXBwZW5zIHRvIGJlIGEgNDAtaGV4IHN0cmluZywKKyAgIGRpcmVjdGx5IHVzZXMgdGhlIDQwLWhleCBzdHJpbmcgYXMgYW4gb2JqZWN0IG5hbWUsIGV2ZW4gaWYgYSByZWYKKyAgICJyZWZzLzxzb21lIGhpZXJhcmNoeT4vPG5hbWU+IiBleGlzdHMuICBUaGlzIGRpc2FtYmlndWF0aW9uIG9yZGVyCisgICBpcyB1bmxpa2VseSB0byBjaGFuZ2UsIGJ1dCB3ZSBzaG91bGQgd2FybiBhYm91dCB0aGUgYW1iaWd1aXR5IGp1c3QKKyAgIGxpa2Ugd2Ugd2FybiB3aGVuIG1vcmUgdGhhbiBvbmUgcmVmcy8gaGllcmFyY2hpZXMgc2hhcmUgdGhlIHNhbWUKKyAgIG5hbWUuCisKKyAqICJnaXQgcmViYXNlIiBsZWFybmVkICItLVtuby1dYXV0b3N0YXNoIiBvcHRpb24gdG8gc2F2ZSBsb2NhbAorICAgY2hhbmdlcyBpbnN0ZWFkIG9mIHJlZnVzaW5nIHRvIHJ1biAodG8gd2hpY2ggcGVvcGxlJ3Mgbm9ybWFsCisgICByZXNwb25zZSB3YXMgdG8gc3Rhc2ggdGhlbSBhbmQgcmUtcnVuKS4gIFRoaXMgaW50cm9kdWNlZCBhIGNvcm5lcgorICAgY2FzZSBicmVha2FnZSB0byAiZ2l0IGFtIC0tYWJvcnQiIGJ1dCBpdCBoYXMgYmVlbiBmaXhlZC4KKworICogImNoZWNrLWlnbm9yZSIgKG5ldyBmZWF0dXJlIHNpbmNlIDEuOC4yKSBoYXMgYmVlbiB1cGRhdGVkIHRvIHdvcmsKKyAgIG1vcmUgbGlrZSAiY2hlY2stYXR0ciIgb3ZlciBiaWRpLXBpcGVzLgorCisgKiAiZ2l0IGRlc2NyaWJlIiBsZWFybmVkICItLWZpcnN0LXBhcmVudCIgb3B0aW9uIHRvIGxpbWl0IGl0cyBjbG9zZXN0CisgICB0YWdnZWQgY29tbWl0IHNlYXJjaCB0byB0aGUgZmlyc3QtcGFyZW50IGNoYWluLgorCisgKiAiZ2l0IG1lcmdlIGZvbyIgdGhhdCBtaWdodCBoYXZlIG1lYW50ICJnaXQgbWVyZ2Ugb3JpZ2luL2ZvbyIgaXMKKyAgIGRpYWdub3NlZCB3aXRoIGEgbW9yZSBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlLgorCisgKiAiZ2l0IGxvZyAtTDxsaW5lPiw8cmFuZ2U+OjxmaWxlbmFtZT4iIGhhcyBiZWVuIGFkZGVkLiAgVGhpcyBtYXkKKyAgIHN0aWxsIGhhdmUgbGVha3MgYW5kIHJvdWdoIGVkZ2VzLCB0aG91Z2guCisKKyAqIFdlIHVzZWQgdGhlIGFwcHJveGlkYXRlKCkgcGFyc2VyIGZvciAiLS1leHBpcmU9PHRpbWVzdGFtcD4iIG9wdGlvbnMKKyAgIG9mIHZhcmlvdXMgY29tbWFuZHMsIGJ1dCBpdCBpcyBiZXR0ZXIgdG8gdHJlYXQgLS1leHBpcmU9YWxsIGFuZAorICAgLS1leHBpcmU9bm93IGEgYml0IG1vcmUgc3BlY2lhbGx5IHRoYW4gdXNpbmcgdGhlIGN1cnJlbnQgdGltZXN0YW1wLgorICAgImdpdCBnYyIgYW5kICJnaXQgcmVmbG9nIiBoYXZlIGJlZW4gdXBkYXRlZCB3aXRoIGEgbmV3IHBhcnNpbmcKKyAgIGZ1bmN0aW9uIGZvciBleHBpcnkgZGF0ZXMuCisKKyAqIFVwZGF0ZXMgdG8gY29tcGxldGlvbiAoYm90aCBiYXNoIGFuZCB6c2gpIGhlbHBlcnMuCisKKyAqIFRoZSBiZWhhdmlvdXIgb2YgdGhlICItLWNoYWluLXJlcGx5LXRvIiBvcHRpb24gb2YgImdpdCBzZW5kLWVtYWlsIgorICAgaGF2ZSBjaGFuZ2VkIGF0IDEuNy4wLCBhbmQgd2UgYWRkZWQgYSB3YXJuaW5nL2FkdmljZSBtZXNzYWdlIHRvCisgICBoZWxwIHVzZXJzIGFkanVzdCB0byB0aGUgbmV3IGJlaGF2aW91ciBiYWNrIHRoZW4sIGJ1dCB3ZSBrZXB0IGl0CisgICBhcm91bmQgZm9yIHRvbyBsb25nLiAgVGhlIG1lc3NhZ2UgaGFzIGZpbmFsbHkgYmVlbiByZW1vdmVkLgorCisgKiAiZ2l0IGZldGNoIG9yaWdpbiBtYXN0ZXIiIHVubGlrZSAiZ2l0IGZldGNoIG9yaWdpbiIgb3IgImdpdCBmZXRjaCIKKyAgIGRpZCBub3QgdXBkYXRlICJyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciI7IHRoaXMgd2FzIGFuIGVhcmx5CisgICBkZXNpZ24gZGVjaXNpb24gdG8ga2VlcCB0aGUgdXBkYXRlIG9mIHJlbW90ZSB0cmFja2luZyBicmFuY2hlcworICAgcHJlZGljdGFibGUsIGJ1dCBpbiBwcmFjdGljZSBpdCB0dXJucyBvdXQgdGhhdCBwZW9wbGUgZmluZCBpdCBtb3JlCisgICBjb252ZW5pZW50IHRvIG9wcG9ydHVuaXN0aWNhbGx5IHVwZGF0ZSB0aGVtIHdoZW5ldmVyIHdlIGhhdmUgYQorICAgY2hhbmNlLCBhbmQgd2UgaGF2ZSBiZWVuIHVwZGF0aW5nIHRoZW0gd2hlbiB3ZSBydW4gImdpdCBwdXNoIiB3aGljaAorICAgYWxyZWFkeSBicmVha3MgdGhlIG9yaWdpbmFsICJwcmVkaWN0YWJpbGl0eSIgYW55d2F5LgorCisgKiBUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjb3JlLmNoZWNrc3RhdCB3YXMgYWR2ZXJ0aXNlZCBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYnV0IHRoZSBjb2RlIGV4cGVjdGVkIGNvcmUuc3RhdGluZm8gaW5zdGVhZC4KKyAgIEZvciBub3csIHdlIGFjY2VwdCBib3RoIGNvcmUuY2hlY2tzdGF0IGFuZCBjb3JlLnN0YXRpbmZvLCBidXQgdGhlCisgICBsYXR0ZXIgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBsb25nZXIgdGVybS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIGV0Yy4KKworICogT24gQ3lnd2luLCB3ZSB1c2VkIHRvIHVzZSBvdXIgb3duIGxzdGF0KDIpIGVtdWxhdGlvbiB0aGF0IGlzCisgICBhbGxlZ2VkbHkgZmFzdGVyIHRoYW4gdGhlIHBsYXRmb3JtIG9uZSBpbiBjb2RlcGF0aHMgd2hlcmUgc29tZSBvZgorICAgdGhlIGluZm9ybWF0aW9uIGl0IHJldHVybnMgZGlkIG5vdCBtYXR0ZXIsIGJ1dCBpdCBzdGFydGVkIHRvIGJpdGUKKyAgIHVzIGluIGEgZmV3IGNvZGVwYXRocyB3aGVyZSB0aGUgdHJpY2sgaXQgdXNlcyB0byBjaGVhdCBkb2VzIHNob3cKKyAgIGJyZWFrYWdlcy4gVGhpcyBlbXVsYXRpb24gaGFzIGJlZW4gcmVtb3ZlZCBhbmQgd2UgdXNlIHRoZSBuYXRpdmUKKyAgIGxzdGF0KDIpIGVtdWxhdGlvbiBzdXBwbGllZCBieSBDeWd3aW4gbm93LgorCisgKiBUaGUgZnVuY3Rpb24gYXR0cmlidXRlcyBleHRlbnNpb25zIGFyZSB1c2VkIHRvIGNhdGNoIG1pc3Rha2VzIGluCisgICB1c2Ugb2Ygb3VyIG93biB2YXJpYWRpYyBmdW5jdGlvbnMgdGhhdCB1c2UgTlVMTCBzZW50aW5lbCBhdCB0aGUgZW5kCisgICAoaS5lLiBsaWtlIGV4ZWNsKDMpKSBhbmQgZm9ybWF0IHN0cmluZ3MgKGkuZS4gbGlrZSBwcmludGYoMykpLgorCisgKiBUaGUgY29kZSB0byBhbGxvdyBjb25maWd1cmF0aW9uIGRhdGEgdG8gYmUgcmVhZCBmcm9tIGluLXRyZWUgYmxvYgorICAgb2JqZWN0cyBpcyBpbi4gIFRoaXMgbWF5IGhlbHAgd29ya2luZyBpbiBhIGJhcmUgcmVwb3NpdG9yeSBhbmQKKyAgIHN1Ym1vZHVsZSB1cGRhdGVzLgorCisgKiBGZXRjaGluZyBiZXR3ZWVuIHJlcG9zaXRvcmllcyB3aXRoIG1hbnkgcmVmcyBlbXBsb3llZCBPKG5eMikKKyAgIGFsZ29yaXRobSB0byBtYXRjaCB1cCB0aGUgY29tbW9uIG9iamVjdHMsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworICogVGhlIG9yaWdpbmFsIHdheSB0byBzcGVjaWZ5IHJlbW90ZSByZXBvc2l0b3J5IHVzaW5nIC5naXQvYnJhbmNoZXMvCisgICB1c2VkIHRvIGhhdmUgYSBuaWZ0eSBmZWF0dXJlLiAgVGhlIGNvZGUgdG8gc3VwcG9ydCB0aGUgZmVhdHVyZSB3YXMKKyAgIHN0aWxsIGluIGEgZnVuY3Rpb24gYnV0IHRoZSBjYWxsZXIgd2FzIGNoYW5nZWQgbm90IHRvIGNhbGwgaXQgNQorICAgeWVhcnMgYWdvLCBicmVha2luZyB0aGF0IGZlYXR1cmUgYW5kIGxlYXZpbmcgdGhlIHN1cHBvcnRpbmcgY29kZQorICAgdW5yZWFjaGFibGUuICBUaGUgZGVhZCBjb2RlIGhhcyBiZWVuIHJlbW92ZWQuCisKKyAqICJnaXQgcGFjay1yZWZzIiB0aGF0IHJhY2VzIHdpdGggbmV3IHJlZiBjcmVhdGlvbiBvciBkZWxldGlvbiBoYXZlCisgICBiZWVuIHN1c2NlcHRpYmxlIHRvIGxvc3NhZ2Ugb2YgcmVmcyB1bmRlciByaWdodCBjb25kaXRpb25zLCB3aGljaAorICAgaGFzIGJlZW4gdGlnaHRlbmVkIHVwLgorCisgKiBXZSByZWFkIGxvb3NlIGFuZCBwYWNrZWQgcmVmZXJlbmNlcyBpbiB0d28gc3RlcHMsIGJ1dCBhZnRlcgorICAgZGVjaWRpbmcgdG8gcmVhZCBhIGxvb3NlIHJlZiBidXQgYmVmb3JlIGFjdHVhbGx5IG9wZW5pbmcgaXQgdG8gcmVhZAorICAgaXQsIGFub3RoZXIgcHJvY2VzcyByYWNpbmcgd2l0aCB1cyBjYW4gdW5saW5rIGl0LCB3aGljaCB3b3VsZCBjYXVzZQorICAgdXMgdG8gYmFyZi4gIFRoZSBjb2RlcGF0aCBoYXMgYmVlbiB1cGRhdGVkIHRvIHJldHJ5IHdoZW4gc3VjaCBhCisgICByYWNlIGlzIGRldGVjdGVkLCBpbnN0ZWFkIG9mIG91dHJpZ2h0IGZhaWxpbmcuCisKKyAqIFVzZXMgb2YgdGhlIHBsYXRmb3JtIGZubWF0Y2goMykgZnVuY3Rpb24gKG1hbnkgcGxhY2VzIGluIHRoZSBjb2RlLAorICAgbWF0Y2hpbmcgcGF0aHNwZWMsIC5naXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzIHRvIG5hbWUgYSBmZXcpCisgICBoYXZlIGJlZW4gcmVwbGFjZWQgd2l0aCB3aWxkbWF0Y2gsIGFsbG93aW5nICJmb28vKiovYmFyIiB0aGF0IHdvdWxkCisgICBtYXRjaCBmb28vYmFyLCBmb28vYS9iYXIsIGZvby9hL2IvYmFyLCBldGMuCisKKyAqIE1lbW9yeSBvd25lcnNoaXAgYW5kIGxpZmV0aW1lIHJ1bGVzIGZvciB3aGF0IGZvci1lYWNoLXJlZiBmZWVkcyB0bworICAgaXRzIGNhbGxiYWNrcyBoYXZlIGJlZW4gY2xhcmlmaWVkIChpbiBzaG9ydCwgInlvdSBkbyBub3Qgb3duIGl0LCBzbworICAgbWFrZSBhIGNvcHkgaWYgeW91IHdhbnQgdG8ga2VlcCBpdCIpLgorCisgKiBUaGUgcmV2aXNpb24gdHJhdmVyc2FsIGxvZ2ljIHRvIGltcHJvdmUgY3VsbGluZyBvZiBpcnJlbGV2YW50CisgICBwYXJlbnRzIHdoaWxlIHRyYXZlcnNpbmcgYSBtZXJneSBoaXN0b3J5IGhhcyBiZWVuIHVwZGF0ZWQuCisKKyAqIFNvbWUgbGVha3MgaW4gdW5wYWNrLXRyZWVzICh1c2VkIGluIG1lcmdlLCBjaGVycnktcGljayBhbmQgb3RoZXIKKyAgIGNvZGVwYXRocykgaGF2ZSBiZWVuIHBsdWdnZWQuCisKKyAqIFRoZSBjb2RlcGF0aCB0byByZWFkIGZyb20gbWFya3MgZmlsZXMgaW4gZmFzdC1pbXBvcnQvZXhwb3J0IGRpZCBub3QKKyAgIGhhdmUgdG8gYWNjZXB0IGFueXRoaW5nIGJ1dCA0MC1oZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdAorICAgbmFtZS4gIEZ1cnRoZXIsIGZhc3QtZXhwb3J0IGRpZCBub3QgbmVlZCBmdWxsIGluLWNvcmUgb2JqZWN0CisgICByZXByZXNlbnRhdGlvbiB0byBoYXZlIHBhcnNlZCB3ZW4gcmVhZGluZyBmcm9tIHRoZW0uICBUaGVzZQorICAgY29kZXBhdGhzIGhhdmUgYmVlbiBvcHRpbWl6ZWQgYnkgdGFraW5nIGFkdmFudGFnZSBvZiB0aGVzZSBhY2Nlc3MKKyAgIHBhdHRlcm5zLgorCisgKiBPYmplY3QgbG9va3VwIGxvZ2ljLCB3aGVuIHRoZSBvYmplY3QgaGFzaHRhYmxlIHN0YXJ0cyB0byBiZWNvbWUKKyAgIGNyb3dkZWQsIGhhcyBiZWVuIG9wdGltaXplZC4KKworICogV2hlbiBURVNUX09VVFBVVF9ESVJFQ1RPUlkgc2V0dGluZyBpcyB1c2VkLCBpdCB3YXMgaGFuZGxlZCBzb21ld2hhdAorICAgaW5jb25zaXN0ZW50bHkgYmV0d2VlbiB0aGUgdGVzdCBmcmFtZXdvcmsgYW5kIHQvTWFrZWZpbGUsIGFuZCBsb2dpYworICAgdG8gc3VtbWFyaXplIHRoZSByZXN1bHRzIGxvb2tlZCBhdCBhIHdyb25nIHBsYWNlLgorCisgKiAiZ2l0IGNsb25lIiB1c2VzIGEgbGlnaHRlci13ZWlnaHQgaW1wbGVtZW50YXRpb24gd2hlbiBtYWtpbmcgc3VyZQorICAgdGhhdCB0aGUgaGlzdG9yeSBiZWhpbmQgcmVmcyBhcmUgY29tcGxldGUuCisKKyAqIE1hbnkgd2FybmluZ3MgZnJvbSBzcGFyc2Ugc291cmNlIGNoZWNrZXIgaW4gY29tcGF0LyBhcmVhIGhhcyBiZWVuCisgICBzcXVlbGNoZWQuCisKKyAqIFRoZSBjb2RlIHRvIHJlYWRpbmcgYW5kIHVwZGF0aW5nIHBhY2tlZC1yZWZzIGZpbGUgaGFzIGJlZW4gdXBkYXRlZCwKKyAgIGNvcnJlY3RpbmcgY29ybmVyIGNhc2UgYnVncy4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2MS44LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYxLjguMyBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgcmVsZWFzZSBub3RlcyB0byB0aGVtIGZvcgorZGV0YWlscykuCisKKyAqIE5ld2VyIE5ldDo6U01UUDo6U1NMIG1vZHVsZSBkb2VzIG5vdCB3YW50IHRoZSB1c2VyIHByb2dyYW1zIHRvIHVzZQorICAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIHRvIGxldCBzZXJ2ZXIgY2VydGlmaWNhdGUgZ28gd2l0aG91dAorICAgdmVyaWZpY2F0aW9uLCBzbyBieSBkZWZhdWx0IGVuYWJsZSB0aGUgdmVyaWZpY2F0aW9uIHdpdGggYQorICAgbWVjaGFuaXNtIHRvIHR1cm4gaXQgb2ZmIGlmIG5lZWRlZC4KKyAgIChtZXJnZSAzNTAzNWJiIHJyL3NlbmQtZW1haWwtc3NsLXZlcmlmeSBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gImdpdCIgaXMgc3Bhd25lZCBpbiBzdWNoIGEgd2F5IHRoYXQgYW55IG9mIHRoZSBsb3cgMyBmaWxlCisgICBkZXNjcmlwdG9ycyBpcyBjbG9zZWQsIG91ciBmaXJzdCBvcGVuKCkgbWF5IHlpZWxkIGZpbGUgZGVzY3JpcHRvciAyLAorICAgYW5kIHdyaXRpbmcgZXJyb3IgbWVzc2FnZSB0byBpdCB3b3VsZCBzY3JldyB0aGluZ3MgdXAgaW4gYSBiaWcgd2F5LgorICAgKG1lcmdlIGExMWMzOTYgdHIvcHJvdGVjdC1sb3ctMy1mZHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbWFpbG1hcCBtZWNoYW5pc20gdW5uZWNlc3NhcmlseSBkb3duY2FzZWQgdGhlIGUtbWFpbCBhZGRyZXNzZXMKKyAgIGluIHRoZSBvdXRwdXQsIGFuZCBhbHNvIGlnbm9yZWQgdGhlIGh1bWFuIG5hbWUgd2hlbiBpdCBpcyBhIHNpbmdsZQorICAgY2hhcmFjdGVyIG5hbWUuCisgICAobWVyZ2UgYmQyMzc5NCBqYy9tYWlsbWFwLWNhc2UtaW5zZW5zaXRpdml0eSBsYXRlciB0byBtYWludCkuCisKKyAqIEluIHR3byBwbGFjZXMgd2UgZGlkIG5vdCBjaGVjayByZXR1cm4gdmFsdWUgKGV4cGVjdGVkIHRvIGJlIGEgZmlsZQorICAgZGVzY3JpcHRvcikgY29ycmVjdGx5LgorICAgKG1lcmdlIGE3N2YxMDYgdHIvZmQtZ290Y2hhLWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogTG9naWMgdG8gYXV0by1kZXRlY3QgY2hhcmFjdGVyIGVuY29kaW5ncyBpbiB0aGUgY29tbWl0IGxvZyBtZXNzYWdlCisgICBkaWQgbm90IHJlamVjdCBvdmVybG9uZyBhbmQgaW52YWxpZCBVVEYtOCBjaGFyYWN0ZXJzLgorICAgKG1lcmdlIDgxMDUwYWMgYmMvY29tbWl0LWludmFsaWQtdXRmOCBsYXRlciB0byBtYWludCkuCisKKyAqIFBhc3MgcG9ydCBudW1iZXIgYXMgYSBzZXBhcmF0ZSBhcmd1bWVudCB3aGVuICJzZW5kLWVtYWlsIiBpbml0aWFsaXplcworICAgTmV0OjpTTVRQLCBpbnN0ZWFkIG9mIGFzIGEgcGFydCBvZiB0aGUgaG9zdG5hbWUsIGkuZS4gaG9zdDpwb3J0LgorICAgVGhpcyBhbGxvd3MgR1NTQVBJIGNvZGVwYXRoIHRvIG1hdGNoIHdpdGggdGhlIGhvc3RuYW1lIGdpdmVuLgorICAgKG1lcmdlIDFhNzQxYmYgYmMvc2VuZC1lbWFpbC11c2UtcG9ydC1hcy1zZXBhcmF0ZS1wYXJhbSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZiIgcmVmdXNlZCB0byBldmVuIHNob3cgZGlmZmVyZW5jZSB3aGVuIGNvcmUuc2FmZWNybGYgaXMKKyAgIHNldCB0byB0cnVlIChpLmUuIGVycm9yIG91dCkgYW5kIHRoZXJlIGFyZSBvZmZlbmRpbmcgbGluZXMgaW4gdGhlCisgICB3b3JraW5nIHRyZWUgZmlsZXMuCisgICAobWVyZ2UgNTQzMGJiMiBqYy9tYWludC1kaWZmLWNvcmUtc2FmZWNybGYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIHRlc3QgdGhhdCBzaG91bGQgaGF2ZSBmYWlsZWQgYnV0IGRpZG4ndCByZXZlYWxlZCBhIGJ1ZyB0aGF0IG5lZWRzCisgICB0byBiZSBjb3JyZWN0ZWQuCisgICAobWVyZ2UgOTRkNzVkMSBqYy90MTUxMi1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBvdmVybG9uZyBwYXRoIHRvIGEgLmdpdCBkaXJlY3RvcnkgbWF5IGhhdmUgb3ZlcmZsb3duIHRoZQorICAgdGVtcG9yYXJ5IHBhdGggYnVmZmVyIHVzZWQgdG8gY3JlYXRlIGEgbmFtZSBmb3IgbG9ja2ZpbGVzLgorICAgKG1lcmdlIDJmYmQ0ZjkgbWgvbWFpbnQtbG9ja2ZpbGUtb3ZlcmZsb3cgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBJbnZvY2F0aW9ucyBvZiAiZ2l0IGNoZWNrb3V0IiB1c2VkIGludGVybmFsbHkgYnkgImdpdCByZWJhc2UiIHdlcmUKKyAgIGNvdW50ZWQgYXMgImNoZWNrb3V0IiwgYW5kIGFmZmVjdGVkIGxhdGVyICJnaXQgY2hlY2tvdXQgLSIgdG8gdGhlCisgICB0aGUgdXNlciB0byBhbiB1bmV4cGVjdGVkIHBsYWNlLgorICAgKG1lcmdlIDNiZWQyOTEgcnIvcmViYXNlLWNoZWNrb3V0LXJlZmxvZyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvbHVtbi51aSB3YXMgcG9vcmx5IGRvY3VtZW50ZWQuCisgICAobWVyZ2UgNWU2MmNjMSByci9jb2x1bW4tZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBuYW1lLXJldiAtLXJlZnM9dGFncy92KiIgd2VyZSBmb3JiaWRkZW4sIHdoaWNoIHdhcyBhIGJpdAorICAgaW5jb252ZW5pZW50ICh5b3UgaGFkIHRvIGdpdmUgYSBwYXR0ZXJuIHRvIG1hdGNoIHJlZnMgZnVsbHksIGxpa2UKKyAgIC0tcmVmcz1yZWZzL3RhZ3MvdiopLgorICAgKG1lcmdlIDk4YzVjNGEgbmsvbmFtZS1yZXYtYWJicmV2aWF0ZWQtcmVmcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYXBwbHkiIHBhcnNlZCBwYXRjaGVzIHRoYXQgYWRkIG5ldyBmaWxlcywgZ2VuZXJhdGVkIGJ5CisgICBwcm9ncmFtcyBvdGhlciB0aGFuIEdpdCwgaW5jb3JyZWN0bHkuICBUaGlzIGlzIGFuIG9sZCBicmVha2FnZSBpbgorICAgdjEuNy4xMSBhbmQgd2lsbCBuZWVkIHRvIGJlIG1lcmdlZCBkb3duIHRvIHRoZSBtYWludGVuYW5jZSB0cmFja3MuCisKKyAqIE9sZGVyIGNVUkwgd2FudGVkIHBpZWNlIG9mIG1lbW9yeSB3ZSBjYWxsIGl0IHdpdGggdG8gYmUgc3RhYmxlLCBidXQKKyAgIHdlIHVwZGF0ZWQgdGhlIGF1dGggbWF0ZXJpYWwgYWZ0ZXIgaGFuZGluZyBpdCB0byBhIGNhbGwuCisKKyAqICJnaXQgcHVsbCIgaW50byBub3RoaW5nIHRyYXNoZWQgImxvY2FsIGNoYW5nZXMiIHRoYXQgd2VyZSBpbiB0aGUKKyAgIGluZGV4LCBhbmQgdGhpcyBhdm9pZHMgaXQuCisKKyAqIE1hbnkgImdpdCBzdWJtb2R1bGUiIG9wZXJhdGlvbnMgZG8gbm90IHdvcmsgb24gYSBzdWJtb2R1bGUgYXQgYQorICAgcGF0aCB3aG9zZSBuYW1lIGlzIG5vdCBpbiBBU0NJSS4KKworICogImNoZXJyeS1waWNrIiBoYWQgYSBzbWFsbCBsZWFrIGluIGFuIGVycm9yIGNvZGVwYXRoLgorCisgKiBMb2dpYyB1c2VkIGJ5IGdpdC1zZW5kLWVtYWlsIHRvIHN1cHByZXNzIGNjIG1pc2hhbmRsZWQgbmFtZXMgbGlrZQorICAgIkEgVS4gVGhvciIgPGF1dGhvckBleGFtcGxlLnh6Piwgd2hlcmUgdGhlIGh1bWFuIHJlYWRhYmxlIHBhcnQKKyAgIG5lZWRzIHRvIGJlIHF1b3RlZCAodGhlIHVzZXIgaW5wdXQgbWF5IG5vdCBoYXZlIHRoZSBkb3VibGUgcXVvdGVzCisgICBhcm91bmQgdGhlIG5hbWUsIGFuZCBjb21wYXJpc29uIHdhcyBkb25lIGJldHdlZW4gcXVvdGVkIGFuZAorICAgdW5xdW90ZWQgc3RyaW5ncykuICBJdCBhbHNvIG1pc2hhbmRsZWQgbmFtZXMgdGhhdCBuZWVkIFJGQzIwNDcKKyAgIHF1b3RpbmcuCisKKyAqIENhbGwgdG8gZGlzY2FyZF9jYWNoZS9kaXNjYXJkX2luZGV4ICh1c2VkIHdoZW4gd2UgdXNlIGRpZmZlcmVudAorICAgY29udGVudHMgb2YgdGhlIGluZGV4IGluLWNvcmUsIGluIG1hbnkgb3BlcmF0aW9ucyBsaWtlIGNvbW1pdCwKKyAgIGFwcGx5LCBhbmQgbWVyZ2UpIHVzZWQgdG8gbGVhayBtZW1vcnkgdGhhdCBoZWxkIHRoZSBhcnJheSBvZiBpbmRleAorICAgZW50cmllcywgd2hpY2ggaGFzIGJlZW4gcGx1Z2dlZC4KKyAgIChtZXJnZSBhMGZjNGRiIHJzL2Rpc2NhcmQtaW5kZXgtZGlzY2FyZC1hcnJheSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXR3ZWIiIGZvcmdvdCB0byBjbGVhciBhIGdsb2JhbCB2YXJpYWJsZSAkc2VhcmNoX3JlZ2V4cCB1cG9uIGVhY2gKKyAgIHJlcXVlc3QsIG1pc3Rha2VubHkgY2Fycnlpbmcgb3ZlciB0aGUgcHJldmlvdXMgc2VhcmNoIHRvIGEgbmV3IG9uZQorICAgd2hlbiB1c2VkIGFzIGEgcGVyc2lzdGVudCBDR0kuCisKKyAqIFRoZSB3aWxkbWF0Y2ggZW5naW5lIGRpZCBub3QgaG9ub3IgV01fQ0FTRUZPTEQgb3B0aW9uIGNvcnJlY3RseS4KKworICogImdpdCBsb2cgLWMgLS1mb2xsb3cgJHBhdGgiIHNlZ2ZhdWx0ZWQgdXBvbiBoaXR0aW5nIHRoZSBjb21taXQgdGhhdAorICAgcmVuYW1lZCB0aGUgJHBhdGggYmVpbmcgZm9sbG93ZWQuCisKKyAqIFdoZW4gYSByZWZsb2cgbm90YXRpb24gaXMgdXNlZCBmb3IgaW1wbGljaXQgImN1cnJlbnQgYnJhbmNoIiwgd2UKKyAgIGRpZCBub3Qgc2F5IHdoaWNoIGJyYW5jaCBhbmQgd29yc2Ugc2FpZCAiYnJhbmNoICcnIi4KKworICogImRpZmZ0b29sIC0tZGlyLWRpZmYiIGRpZCBub3QgY29weSBiYWNrIGNoYW5nZXMgbWFkZSBieSB0aGUKKyAgIGVuZC11c2VyIGluIHRoZSBkaWZmIHRvb2wgYmFja2VuZCB0byB0aGUgd29ya2luZyB0cmVlIGluIHNvbWUKKyAgIGNhc2VzLgorCisgKiAiZ2l0IHB1c2ggJHRoZXJlIEhFQUQ6YnJhbmNoIiBkaWQgbm90IHJlc29sdmUgSEVBRCBlYXJseSBlbm91Z2gsIHNvCisgICBpdCB3YXMgZWFzeSB0byBmbGlwIGl0IGFyb3VuZCB3aGlsZSBwdXNoIGlzIHN0aWxsIGdvaW5nIG9uIGFuZCBwdXNoCisgICBvdXQgYSBicmFuY2ggdGhhdCB0aGUgdXNlciBkaWQgbm90IG9yaWdpbmFsbHkgaW50ZW5kZWQgd2hlbiB0aGUKKyAgIGNvbW1hbmQgd2FzIHN0YXJ0ZWQuCisKKyAqIFRoZSBiYXNoIHByb21wdCBjb2RlIChpbiBjb250cmliLykgZGlzcGxheWVkIHRoZSBuYW1lIG9mIHRoZSBicmFuY2gKKyAgIGJlaW5nIHJlYmFzZWQgd2hlbiAicmViYXNlIC1pLy1tLy1wIiBtb2RlcyBhcmUgaW4gdXNlLCBidXQgbm90IHRoZQorICAgcGxhaW4gdmFuaWxsYSAicmViYXNlIi4KKworICogSGFuZGxpbmcgb2YgbmVnYXRpdmUgZXhjbHVkZSBwYXR0ZXJuIGZvciBkaXJlY3RvcmllcyAiIWRpciIgd2FzCisgICBicm9rZW4gaW4gdGhlIHVwZGF0ZSB0byB2MS44LjMuCisKKyAqIHpzaCBwcm9tcHQgc2NyaXB0IHRoYXQgYm9ycm93ZWQgZnJvbSBiYXNoIHByb21wdCBzY3JpcHQgZGlkIG5vdAorICAgd29yayBkdWUgdG8gc2xpZ2h0IGRpZmZlcmVuY2VzIGluIGFycmF5IHZhcmlhYmxlIG5vdGF0aW9uIGJldHdlZW4KKyAgIHRoZXNlIHR3byBzaGVsbHMuCisKKyAqIEFuIGVudHJ5IGZvciAiZmlsZTovLyIgc2NoZW1lIGluIHRoZSBlbnVtZXJhdGlvbiBvZiBVUkwgdHlwZXMgR2l0CisgICBjYW4gdGFrZSBpbiB0aGUgSFRNTCBkb2N1bWVudGF0aW9uIHdhcyBtYWRlIGludG8gYSBjbGlja2FibGUgbGluaworICAgYnkgbWlzdGFrZS4KKworICogImdpdCBwdXNoIC0tW25vLV12ZXJpZnkiIHdhcyBub3QgZG9jdW1lbnRlZC4KKworICogU3RvcCBpbnN0YWxsaW5nIHRoZSBnaXQtcmVtb3RlLXRlc3RweSBzY3JpcHQgdGhhdCBpcyBvbmx5IHVzZWQgZm9yCisgICB0ZXN0aW5nLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0gJyciIHNob3VsZCBub3Qgc3RhcnQgYW4KKyAgIGVkaXRvci4KKworICogImdpdCBtZXJnZSBAey0xfX4yMiIgd2FzIHJld3JpdHRlbiB0byAiZ2l0IG1lcmdlIGZyb3R6QHsxfX4yMiIKKyAgIGluY29ycmVjdGx5IHdoZW4geW91ciBwcmV2aW91cyBicmFuY2ggd2FzICJmcm90eiIgKGl0IHNob3VsZCBiZQorICAgcmV3cml0dGVuIHRvICJnaXQgbWVyZ2UgZnJvdHp+MjIiIGluc3RlYWQpLgorCisgKiAiZ2l0IGRpZmYgLWMgLXAiIHdhcyBub3Qgc2hvd2luZyBhIGRlbGV0ZWQgbGluZSBmcm9tIGEgaHVuayB3aGVuCisgICBhbm90aGVyIGh1bmsgaW1tZWRpYXRlbHkgYmVnaW5zIHdoZXJlIHRoZSBlYXJsaWVyIG9uZSBlbmRzLgorCisgKiAiZ2l0IGxvZyAtLWFuY2VzdHJ5LXBhdGggQS4uLkIiIGRpZCBub3Qgd29yayBhcyBleHBlY3RlZCwgYXMgaXQgZGlkCisgICBub3QgcGF5IGF0dGVudGlvbiB0byB0aGUgZmFjdCB0aGF0IHRoZSBtZXJnZSBiYXNlIGJldHdlZW4gQSBhbmQgQgorICAgd2FzIHRoZSBib3R0b20gb2YgdGhlIHJhbmdlIGJlaW5nIHNwZWNpZmllZC4KKworICogTWFjIE9TIFggZG9lcyBub3QgbGlrZSB0byB3cml0ZSgyKSBtb3JlIHRoYW4gSU5UX01BWCBudW1iZXIgb2YKKyAgIGJ5dGVzOyB3b3JrIGl0IGFyb3VuZCBieSBjaG9wcGluZyB3cml0ZSgyKSBpbnRvIHNtYWxsZXIgcGllY2VzLgorCisgKiBOZXdlciBNYWNPUyBYIGVuY291cmFnZXMgdGhlIHByb2dyYW1zIHRvIGNvbXBpbGUgYW5kIGxpbmsgd2l0aAorICAgdGhlaXIgQ29tbW9uQ3J5cHRvLCBub3Qgd2l0aCBPcGVuU1NMLgorCisgKiAiZ2l0IGNsb25lIGZvby9iYXI6YmF6IiBjYW5ub3QgYmUgYSByZXF1ZXN0IHRvIGNsb25lIGZyb20gYSByZW1vdGUKKyAgIG92ZXIgZ2l0LW92ZXItc3NoIHNwZWNpZmllZCBpbiB0aGUgc2NwIHN0eWxlLiAgVGhpcyBjYXNlIGlzIG5vdworICAgZGV0ZWN0ZWQgYW5kIGNsb25lcyBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSBhdCAiZm9vL2JhcjpiYXoiLgorCisgKiBXaGVuICRIT01FIGlzIG1pc2NvbmZpZ3VyZWQgdG8gcG9pbnQgYXQgYW4gdW5yZWFkYWJsZSBkaXJlY3RvcnksIHdlCisgICB1c2VkIHRvIGNvbXBsYWluIGFuZCBkaWUuIExvb3NlbiB0aGUgY2hlY2suCisKKyAqICJnaXQgc3VidHJlZSIgKGluIGNvbnRyaWIvKSBoYWQgb25lIGNvZGVwYXRoIHdpdGggbG9vc2UgZXJyb3IKKyAgIGNoZWNrcyB0byBsb3NlIGRhdGEgYXQgdGhlIHJlbW90ZSBzaWRlLgorCisgKiAiZ2l0IGZldGNoIiBpbnRvIGEgc2hhbGxvdyByZXBvc2l0b3J5IGZyb20gYSByZXBvc2l0b3J5IHRoYXQgZG9lcworICAgbm90IGtub3cgYWJvdXQgdGhlIHNoYWxsb3cgYm91bmRhcnkgY29tbWl0cyAoZS5nLiBhIGRpZmZlcmVudCBmb3JrCisgICBmcm9tIHRoZSByZXBvc2l0b3J5IHRoZSBjdXJyZW50IHNoYWxsb3cgcmVwb3NpdG9yeSB3YXMgY2xvbmVkIGZyb20pCisgICBkaWQgbm90IHdvcmsgY29ycmVjdGx5LgorCisgKiAiZ2l0IGNoZWNrb3V0IGZvbyIgRFdJTXMgdGhlIGludGVuZGVkICJ1cHN0cmVhbSIgYW5kIHR1cm5zIGl0IGludG8KKyAgICJnaXQgY2hlY2tvdXQgLXQgLWIgZm9vIHJlbW90ZXMvb3JpZ2luL2ZvbyIuIFRoaXMgY29kZXBhdGggaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gY29ycmVjdGx5IHRha2UgZXhpc3RpbmcgcmVtb3RlIGRlZmluaXRpb25zIGludG8gYWNjb3VudC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzZhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjEudHh0CkBAIC0wLDAgKzEsOSBAQAorR2l0IHYxLjguNS4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguNQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgc3VibW9kdWxlIGluaXQiIGNvcGllZCAic3VibW9kdWxlLiRuYW1lLnVwZGF0ZSIgc2V0dGluZ3MgZnJvbQorICAgLmdpdG1vZHVsZXMgdG8gLmdpdC9jb25maWcgd2l0aG91dCBtYWtpbmcgc3VyZSBpZiB0aGUgc3VnZ2VzdGVkCisgICB2YWx1ZSB3YXMgc2Vuc2libGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWM0OTg0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS4yLnR4dApAQCAtMCwwICsxLDIwIEBACitHaXQgdjEuOC41LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgZGlmZiAtLSAnOihpY2FzZSltYWtlZmlsZSciIHdhcyB1bm5lY2Vzc2FyaWx5IHJlamVjdGVkIGF0IHRoZQorICAgY29tbWFuZCBsaW5lIHBhcnNlci4KKworICogImdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPW9rIiBkaWQgbm90IGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YKKyAgIHRoZSBuYW1lZCBvYmplY3QuCisKKyAqICJnaXQgYW0gLS1hYm9ydCIgc29tZXRpbWVzIGNvbXBsYWluZWQgYWJvdXQgbm90IGJlaW5nIGFibGUgdG8gd3JpdGUKKyAgIGEgdHJlZSB3aXRoIGFuIDB7NDB9IG9iamVjdCBpbiBpdC4KKworICogVHdvIHByb2Nlc3NlcyBjcmVhdGluZyBsb29zZSBvYmplY3RzIGF0IHRoZSBzYW1lIHRpbWUgY291bGQgaGF2ZQorICAgZmFpbGVkIHVubmVjZXNzYXJpbHkgd2hlbiB0aGUgbmFtZSBvZiB0aGVpciBuZXcgb2JqZWN0cyBzdGFydGVkCisgICB3aXRoIHRoZSBzYW1lIGJ5dGUgdmFsdWUsIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlMmRkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuMy50eHQKQEAgLTAsMCArMSwyNyBAQAorR2l0IHYxLjguNS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjguNS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgIi0tW25vLV1pbmZvcm1hdGl2ZS1lcnJvcnMiIG9wdGlvbnMgdG8gImdpdCBkYWVtb24iIHdlcmUgcGFyc2VkCisgICBhIGJpdCB0b28gbG9vc2VseSwgYWxsb3dpbmcgYW55IG90aGVyIHN0cmluZyBhZnRlciB0aGVzZSBvcHRpb24KKyAgIG5hbWVzLgorCisgKiBBICJnYyIgcHJvY2VzcyBydW5uaW5nIGFzIGEgZGlmZmVyZW50IHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gc3RvcCBhCisgICBuZXcgImdjIiBwcm9jZXNzIGZyb20gc3RhcnRpbmcuCisKKyAqIEFuIGVhcmxpZXIgImNsZWFuLXVwIiBpbnRyb2R1Y2VkIGFuIHVubmVjZXNzYXJ5IG1lbW9yeSBsZWFrIHRvIHRoZQorICAgY3JlZGVudGlhbCBzdWJzeXN0ZW0uCisKKyAqICJnaXQgbXYgQSBCLyIsIHdoZW4gQiBkb2VzIG5vdCBleGlzdCBhcyBhIGRpcmVjdG9yeSwgc2hvdWxkIGVycm9yCisgICBvdXQsIGJ1dCBpdCBkaWRuJ3QuCisKKyAqICJnaXQgcmV2LXBhcnNlIDxyZXZzPiAtLSA8cGF0aHM+IiBkaWQgbm90IGltcGxlbWVudCB0aGUgdXN1YWwKKyAgIGRpc2FtYmlndWF0aW9uIHJ1bGVzIHRoZSBjb21tYW5kcyBpbiB0aGUgImdpdCBsb2ciIGZhbWlseSB1c2VkIGluCisgICB0aGUgc2FtZSB3YXkuCisKKyAqICJnaXQgY2F0LWZpbGUgLS1iYXRjaD0iLCBhbiBhZG1pdHRlZGx5IHVzZWxlc3MgY29tbWFuZCwgZGlkIG5vdAorICAgYmVoYXZlIHZlcnkgd2VsbC4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS44LjUuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOGM0MDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjQudHh0CkBAIC0wLDAgKzEsNDggQEAKK0dpdCB2MS44LjUuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS44LjUuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBmZXRjaCAtLWRlcHRoPTAiIHdhcyBhIG5vLW9wLCBhbmQgd2FzIHNpbGVudGx5IGlnbm9yZWQuCisgICBEaWFnbm9zZSBpdCBhcyBhbiBlcnJvci4KKworICogUmVtb3RlIHJlcG9zaXRvcnkgVVJMIGV4cHJlc3NlZCBpbiBzY3Atc3R5bGUgaG9zdDpwYXRoIG5vdGF0aW9uIGFyZQorICAgcGFyc2VkIG1vcmUgY2FyZWZ1bGx5IChlLmcuICJmb28vYmFyOmJheiIgaXMgbG9jYWwsICJbOjoxXTovfnVzZXIiIGFza3MKKyAgIHRvIGNvbm5lY3QgdG8gdXNlcidzIGhvbWUgZGlyZWN0b3J5IG9uIGhvc3QgYXQgYWRkcmVzcyA6OjEuCisKKyAqIFNTTC1yZWxhdGVkIG9wdGlvbnMgd2VyZSBub3QgcGFzc2VkIGNvcnJlY3RseSB0byB1bmRlcmx5aW5nIHNvY2tldAorICAgbGF5ZXIgaW4gImdpdCBzZW5kLWVtYWlsIi4KKworICogImdpdCBjb21taXQgLXYiIGFwcGVuZHMgdGhlIHBhdGNoIHRvIHRoZSBsb2cgbWVzc2FnZSBiZWZvcmUKKyAgIGVkaXRpbmcsIGFuZCB0aGVuIHJlbW92ZXMgdGhlIHBhdGNoIHdoZW4gdGhlIGVkaXRvciByZXR1cm5lZAorICAgY29udHJvbC4gSG93ZXZlciwgdGhlIHBhdGNoIHdhcyBub3Qgc3RyaXBwZWQgY29ycmVjdGx5IHdoZW4gdGhlCisgICBmaXJzdCBtb2RpZmllZCBwYXRoIHdhcyBhIHN1Ym1vZHVsZS4KKworICogImdpdCBtdiBBIEIvIiwgd2hlbiBCIGRvZXMgbm90IGV4aXN0IGFzIGEgZGlyZWN0b3J5LCBzaG91bGQgZXJyb3IKKyAgIG91dCwgYnV0IGl0IGRpZG4ndC4KKworICogV2hlbiB3ZSBmaWd1cmUgb3V0IGhvdyBtYW55IGZpbGUgZGVzY3JpcHRvcnMgdG8gYWxsb2NhdGUgZm9yCisgICBrZWVwaW5nIHBhY2tmaWxlcyBvcGVuLCBhIHN5c3RlbSB3aXRoIG5vbi13b3JraW5nIGdldHJsaW1pdCgpIGNvdWxkCisgICBjYXVzZSB1cyB0byBkaWUoKSwgYnV0IGJlY2F1c2Ugd2UgbWFrZSB0aGlzIGNhbGwgb25seSB0byBnZXQgYQorICAgcm91Z2ggZXN0aW1hdGUgb2YgaG93IG1hbnkgaXMgYXZhaWxhYmxlIGFuZCB3ZSBkbyBub3QgZXZlbiBhdHRlbXB0CisgICB0byB1c2UgdXAgYWxsIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlIG91cnNlbHZlcywgaXQgaXMgbmljZXIgdG8KKyAgIGZhbGwgYmFjayB0byBhIHJlYXNvbmFibGUgbG93IHZhbHVlIHJhdGhlciB0aGFuIGR5aW5nLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBkaWQgbm90IGhhbmRsZSBhIHRhZyBwb2ludGVkIGJ5IGFub3RoZXIgdGFnCisgICBuaWNlbHkuCisKKyAqICJnaXQgYWRkIC1BIiAobm8gb3RoZXIgYXJndW1lbnRzKSBpbiBhIHRvdGFsbHkgZW1wdHkgd29ya2luZyB0cmVlCisgICB1c2VkIHRvIGVtaXQgYW4gZXJyb3IuCisKKyAqIFRoZXJlIGlzIG5vIHJlYXNvbiB0byBoYXZlIGEgaGFyZGNvZGVkIHVwcGVyIGxpbWl0IG9mIHRoZSBudW1iZXIgb2YKKyAgIHBhcmVudHMgZm9yIGFuIG9jdG9wdXMgbWVyZ2UsIGNyZWF0ZWQgdmlhIHRoZSBncmFmdCBtZWNoYW5pc20sIGJ1dAorICAgdGhlcmUgd2FzLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgJ2dpdCBzdGFzaCAkY21kICJzdGFzaEB7Li4ufSInIGRpZCBub3QgcXVvdGUKKyAgIHRoZSBzdGFzaCBhcmd1bWVudCBwcm9wZXJseSBhbmQgbGVmdCBpdCBzcGxpdCBhdCBJRlMgd2hpdGVzcGFjZS4KKworICogVGhlIGRvY3VtZW50YXRpb24gdG8gImdpdCBwdWxsIiBoaW50ZWQgdGhlcmUgaXMgYW4gIi1tIiBvcHRpb24KKyAgIGJlY2F1c2UgaXQgaW5jb3JyZWN0bHkgc2hhcmVkIHRoZSBkb2N1bWVudGF0aW9uIHdpdGggImdpdCBtZXJnZSIuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTkxY2U5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS41LnR4dApAQCAtMCwwICsxLDM3IEBACitHaXQgdjEuOC41LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC41LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBwYXRoc3BlYyBtYXRjaGluZyBjb2RlLCB3aGlsZSBjb21wYXJpbmcgdHdvIHRyZWVzIChlLmcuICJnaXQKKyAgIGRpZmYgQSBCIC0tIHBhdGgxIHBhdGgyIikgd2FzIHRvbyBhZ2dyZXNzaXZlIGFuZCBmYWlsZWQgdG8gbWF0Y2gKKyAgIHNvbWUgcGF0aHMgd2hlbiBtdWx0aXBsZSBwYXRoc3BlY3Mgd2VyZSBpbnZvbHZlZC4KKworICogImdpdCByZXBhY2sgLS1tYXgtcGFjay1zaXplPThnIiBzdG9wcGVkIGJlaW5nIHBhcnNlZCBjb3JyZWN0bHkgd2hlbgorICAgdGhlIGNvbW1hbmQgd2FzIHJlaW1wbGVtZW50ZWQgaW4gQy4KKworICogQSByZWNlbnQgdXBkYXRlIHRvICJnaXQgc2VuZC1lbWFpbCIgYnJva2UgcGxhdGZvcm1zIHdoZXJlCisgICAvZXRjL3NzbC9jZXJ0cy8gZGlyZWN0b3J5IGV4aXN0cyBidXQgY2Fubm90IGJlIHVzZWQgYXMgU1NMX2NhX3BhdGgKKyAgIChlLmcuIEZlZG9yYSByYXdoaWRlKS4KKworICogQSBoYW5kZnVsIG9mIGJ1Z3MgYXJvdW5kIGludGVycHJldGluZyAkYnJhbmNoQHt1cHN0cmVhbX0gbm90YXRpb24KKyAgIGFuZCBpdHMgbG9va2FsaWtlLCB3aGVuICRicmFuY2ggcGFydCBoYXMgaW50ZXJlc3RpbmcgY2hhcmFjdGVycywKKyAgIGUuZy4gIkAiLCBhbmQgIjoiLCBoYXZlIGJlZW4gZml4ZWQuCisKKyAqICJnaXQgY2xvbmUiIHdvdWxkIGZhaWwgdG8gY2xvbmUgZnJvbSBhIHJlcG9zaXRvcnkgdGhhdCBoYXMgYSByZWYKKyAgIGRpcmVjdGx5IHVuZGVyICJyZWZzLyIsIGUuZy4gInJlZnMvc3Rhc2giLCBiZWNhdXNlIGRpZmZlcmVudAorICAgdmFsaWRhdGlvbiBwYXRocyBkbyBkaWZmZXJlbnQgdGhpbmdzIG9uIHN1Y2ggYSByZWZuYW1lLiAgTG9vc2VuIHRoZQorICAgY2xpZW50IHNpZGUncyB2YWxpZGF0aW9uIHRvIGFsbG93IHN1Y2ggYSByZWYuCisKKyAqICJnaXQgbG9nIC0tbGVmdC1yaWdodCBBLi4uQiIgbG9zdCB0aGUgImxlZnRuZXNzIiBvZiBjb21taXRzCisgICByZWFjaGFibGUgZnJvbSBBIHdoZW4gQSBpcyBhIHRhZyBhcyBhIHNpZGUgZWZmZWN0IG9mIGEgcmVjZW50CisgICBidWdmaXguICBUaGlzIGlzIGEgcmVncmVzc2lvbiBpbiAxLjguNC54IHNlcmllcy4KKworICogImdpdCBtZXJnZS1iYXNlIC0tb2N0b3B1cyIgdXNlZCB0byBsZWF2ZSBjbGVhbmluZyB1cCBzdWJvcHRpbWFsCisgICByZXN1bHQgdG8gdGhlIGNhbGxlciwgYnV0IG5vdyBpdCBkb2VzIHRoZSBjbGVhbi11cCBpdHNlbGYuCisKKyAqICJnaXQgbXYgQSBCLyIsIHdoZW4gQiBkb2VzIG5vdCBleGlzdCBhcyBhIGRpcmVjdG9yeSwgc2hvdWxkIGVycm9yCisgICBvdXQsIGJ1dCBpdCBkaWRuJ3QuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LjYudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS42LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmZmOTJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS42LnR4dApAQCAtMCwwICsxLDM0IEBACitHaXQgdjEuOC41LjYgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOC41LjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdlIHVzZWQgdG8gYWxsb3cgY29tbWl0dGluZyBhIHBhdGggIi5HaXQvY29uZmlnIiB3aXRoIEdpdCB0aGF0IGlzCisgICBydW5uaW5nIG9uIGEgY2FzZSBzZW5zaXRpdmUgZmlsZXN5c3RlbSwgYnV0IGFuIGF0dGVtcHQgdG8gY2hlY2sgb3V0CisgICBzdWNoIGEgcGF0aCB3aXRoIEdpdCB0aGF0IHJ1bnMgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0KKyAgIHdvdWxkIGhhdmUgY2xvYmJlcmVkICIuZ2l0L2NvbmZpZyIsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IHdoYXQKKyAgIHRoZSB1c2VyIHdvdWxkIGhhdmUgZXhwZWN0ZWQuICBHaXQgbm93IHByZXZlbnRzIHlvdSBmcm9tIHRyYWNraW5nCisgICBhIHBhdGggd2l0aCAiLkdpdCIgKGluIGFueSBjYXNlIGNvbWJpbmF0aW9uKSBhcyBhIHBhdGggY29tcG9uZW50LgorCisgKiBPbiBXaW5kb3dzLCBjZXJ0YWluIHBhdGggY29tcG9uZW50cyB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSAiLmdpdCIKKyAgIGFyZSBtYXBwZWQgdG8gIi5naXQiLCBlLmcuICJnaXR+MS9jb25maWciIGlzIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZQorICAgIi5naXQvY29uZmlnIi4gIEhGUysgaGFzIGEgc2ltaWxhciBpc3N1ZSwgd2hlcmUgY2VydGFpbiB1bmljb2RlCisgICBjb2RlcG9pbnRzIGFyZSBpZ25vcmVkLCBlLmcuICIuZ1x1MjAwY2l0L2NvbmZpZyIgaXMgdHJlYXRlZCBhcyBpZgorICAgaXQgd2VyZSAiLmdpdC9jb25maWciLiAgUGF0aG5hbWVzIHdpdGggdGhlc2UgcG90ZW50aWFsIGlzc3VlcyBhcmUKKyAgIHJlamVjdGVkIG9uIHRoZSBhZmZlY3RlZCBzeXN0ZW1zLiAgR2l0IG9uIHN5c3RlbXMgdGhhdCBhcmUgbm90CisgICBhZmZlY3RlZCBieSB0aGlzIGlzc3VlIChlLmcuIExpbnV4KSBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHRvCisgICByZWplY3QgdGhlbSB0byBlbnN1cmUgY3Jvc3MgcGxhdGZvcm0gaW50ZXJvcGVyYWJpbGl0eSBvZiB0aGUgaG9zdGVkCisgICBwcm9qZWN0cy4KKworICogImdpdCBmc2NrIiBub3RpY2VzIGEgdHJlZSBvYmplY3QgdGhhdCByZWNvcmRzIHN1Y2ggYSBwYXRoIHRoYXQgY2FuCisgICBiZSBjb25mdXNlZCB3aXRoICIuZ2l0IiwgYW5kIHdpdGggcmVjZWl2ZS5mc2NrT2JqZWN0cyBjb25maWd1cmF0aW9uCisgICBzZXQgdG8gdHJ1ZSwgYW4gYXR0ZW1wdCB0byAiZ2l0IHB1c2giIHN1Y2ggYSB0cmVlIG9iamVjdCB3aWxsIGJlCisgICByZWplY3RlZC4gIFN1Y2ggYSBwYXRoIG1heSBub3QgYmUgYSBwcm9ibGVtIG9uIGEgd2VsbCBiZWhhdmluZworICAgZmlsZXN5c3RlbSBidXQgaW4gb3JkZXIgdG8gcHJvdGVjdCB0aG9zZSBvbiBIRlMrIGFuZCBvbiBjYXNlCisgICBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcywgdGhpcyBjaGVjayBpcyBlbmFibGVkIG9uIGFsbCBwbGF0Zm9ybXMuCisKK0EgYmlnICJ0aGFua3MhIiBmb3IgYnJpbmdpbmcgdGhpcyBpc3N1ZSB0byB1cyBnb2VzIHRvIG91ciBmcmllbmRzIGluCit0aGUgTWVyY3VyaWFsIGxhbmQsIG5hbWVseSwgTWF0dCBNYWNrYWxsIGFuZCBBdWdpZSBGYWNrbGVyLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDJkZjBjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjguNS50eHQKQEAgLTAsMCArMSw0NTYgQEAKK0dpdCB2MS44LjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMgKGZvciBHaXQgMi4wKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gImdpdCBwdXNoIFskdGhlcmVdIiBkb2VzIG5vdCBzYXkgd2hhdCB0byBwdXNoLCB3ZSBoYXZlIHVzZWQgdGhlCit0cmFkaXRpb25hbCAibWF0Y2hpbmciIHNlbWFudGljcyBzbyBmYXIgKGFsbCB5b3VyIGJyYW5jaGVzIHdlcmUgc2VudAordG8gdGhlIHJlbW90ZSBhcyBsb25nIGFzIHRoZXJlIGFscmVhZHkgYXJlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIG5hbWUKK292ZXIgdGhlcmUpLiAgSW4gR2l0IDIuMCwgdGhlIGRlZmF1bHQgd2lsbCBjaGFuZ2UgdG8gdGhlICJzaW1wbGUiCitzZW1hbnRpY3MsIHdoaWNoIHB1c2hlczoKKworIC0gb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUsIGFuZCBvbmx5CisgICB3aGVuIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBzZXQgdG8gaW50ZWdyYXRlIHdpdGggdGhhdCByZW1vdGUKKyAgIGJyYW5jaCwgaWYgeW91IGFyZSBwdXNoaW5nIHRvIHRoZSBzYW1lIHJlbW90ZSBhcyB5b3UgZmV0Y2ggZnJvbTsgb3IKKworIC0gb25seSB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUsIGlmIHlvdQorICAgYXJlIHB1c2hpbmcgdG8gYSByZW1vdGUgdGhhdCBpcyBub3Qgd2hlcmUgeW91IHVzdWFsbHkgZmV0Y2ggZnJvbS4KKworVXNlIHRoZSB1c2VyIHByZWZlcmVuY2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAicHVzaC5kZWZhdWx0IiB0bworY2hhbmdlIHRoaXMuICBJZiB5b3UgYXJlIGFuIG9sZC10aW1lciB3aG8gaXMgdXNlZCB0byB0aGUgIm1hdGNoaW5nIgorc2VtYW50aWNzLCB5b3UgY2FuIHNldCB0aGUgdmFyaWFibGUgdG8gIm1hdGNoaW5nIiB0byBrZWVwIHRoZQordHJhZGl0aW9uYWwgYmVoYXZpb3VyLiAgSWYgeW91IHdhbnQgdG8gbGl2ZSBpbiB0aGUgZnV0dXJlIGVhcmx5LCB5b3UKK2NhbiBzZXQgaXQgdG8gInNpbXBsZSIgdG9kYXkgd2l0aG91dCB3YWl0aW5nIGZvciBHaXQgMi4wLgorCitXaGVuICJnaXQgYWRkIC11IiAoYW5kICJnaXQgYWRkIC1BIikgaXMgcnVuIGluc2lkZSBhIHN1YmRpcmVjdG9yeSBhbmQKK2RvZXMgbm90IHNwZWNpZnkgd2hpY2ggcGF0aHMgdG8gYWRkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGl0Cit3aWxsIG9wZXJhdGUgb24gdGhlIGVudGlyZSB0cmVlIGluIEdpdCAyLjAgZm9yIGNvbnNpc3RlbmN5Cit3aXRoICJnaXQgY29tbWl0IC1hIiBhbmQgb3RoZXIgY29tbWFuZHMuICBUaGVyZSB3aWxsIGJlIG5vCittZWNoYW5pc20gdG8gbWFrZSBwbGFpbiAiZ2l0IGFkZCAtdSIgYmVoYXZlIGxpa2UgImdpdCBhZGQgLXUgLiIuCitDdXJyZW50IHVzZXJzIG9mICJnaXQgYWRkIC11IiAod2l0aG91dCBhIHBhdGhzcGVjKSBzaG91bGQgc3RhcnQKK3RyYWluaW5nIHRoZWlyIGZpbmdlcnMgdG8gZXhwbGljaXRseSBzYXkgImdpdCBhZGQgLXUgLiIKK2JlZm9yZSBHaXQgMi4wIGNvbWVzLiAgQSB3YXJuaW5nIGlzIGlzc3VlZCB3aGVuIHRoZXNlIGNvbW1hbmRzIGFyZQorcnVuIHdpdGhvdXQgYSBwYXRoc3BlYyBhbmQgd2hlbiB5b3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIG91dHNpZGUgdGhlCitjdXJyZW50IGRpcmVjdG9yeSwgYmVjYXVzZSB0aGUgYmVoYXZpb3VyIGluIEdpdCAyLjAgd2lsbCBiZSBkaWZmZXJlbnQKK2Zyb20gdG9kYXkncyB2ZXJzaW9uIGluIHN1Y2ggYSBzaXR1YXRpb24uCisKK0luIEdpdCAyLjAsICJnaXQgYWRkIDxwYXRoPiIgd2lsbCBiZWhhdmUgYXMgImdpdCBhZGQgLUEgPHBhdGg+Iiwgc28KK3RoYXQgImdpdCBhZGQgZGlyLyIgd2lsbCBub3RpY2UgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB0aGUgZGlyZWN0b3J5CithbmQgcmVjb3JkIHRoZSByZW1vdmFsLiAgVmVyc2lvbnMgYmVmb3JlIEdpdCAyLjAsIGluY2x1ZGluZyB0aGlzCityZWxlYXNlLCB3aWxsIGtlZXAgaWdub3JpbmcgcmVtb3ZhbHMsIGJ1dCB0aGUgdXNlcnMgd2hvIHJlbHkgb24gdGhpcworYmVoYXZpb3VyIGFyZSBlbmNvdXJhZ2VkIHRvIHN0YXJ0IHVzaW5nICJnaXQgYWRkIC0taWdub3JlLXJlbW92YWwgPHBhdGg+Igorbm93IGJlZm9yZSAyLjAgaXMgcmVsZWFzZWQuCisKK1RoZSBkZWZhdWx0IHByZWZpeCBmb3IgImdpdCBzdm4iIHdpbGwgY2hhbmdlIGluIEdpdCAyLjAuICBGb3IgYSBsb25nCit0aW1lLCAiZ2l0IHN2biIgY3JlYXRlZCBpdHMgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGRpcmVjdGx5IHVuZGVyCityZWZzL3JlbW90ZXMsIGJ1dCBpdCB3aWxsIHBsYWNlIHRoZW0gdW5kZXIgcmVmcy9yZW1vdGVzL29yaWdpbi8gdW5sZXNzCitpdCBpcyB0b2xkIG90aGVyd2lzZSB3aXRoIGl0cyAtLXByZWZpeCBvcHRpb24uCisKKworVXBkYXRlcyBzaW5jZSB2MS44LjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvcmVpZ24gaW50ZXJmYWNlcywgc3Vic3lzdGVtcyBhbmQgcG9ydHMuCisKKyAqICJnaXQtc3ZuIiBoYXMgYmVlbiB0YXVnaHQgdG8gdXNlIHRoZSBzZXJmIGxpYnJhcnksIHdoaWNoIGlzIHRoZQorICAgb25seSBvcHRpb24gU1ZOIDEuOC4wIG9mZmVycyB1cyB3aGVuIHRhbGtpbmcgdGhlIEhUVFAgcHJvdG9jb2wuCisKKyAqICJnaXQtc3ZuIiB0YWxraW5nIG92ZXIgYW4gaHR0cHM6Ly8gY29ubmVjdGlvbiB1c2luZyB0aGUgc2VyZiBsaWJyYXJ5CisgICBkdW1wZWQgY29yZSBkdWUgdG8gYSBidWcgaW4gdGhlIHNlcmYgbGlicmFyeSB0aGF0IFNWTiB1c2VzLiAgV29yaworICAgYXJvdW5kIGl0IG9uIG91ciBzaWRlLCBldmVuIHRob3VnaCB0aGUgU1ZOIHNpZGUgaXMgYmVpbmcgZml4ZWQuCisKKyAqIE9uIE1hY09TIFgsIHdlIGRldGVjdGVkIGlmIHRoZSBmaWxlc3lzdGVtIG5lZWRzIHRoZSAicHJlLWNvbXBvc2VkCisgICB1bmljb2RlIHN0cmluZ3MiIHdvcmthcm91bmQsIGJ1dCBkaWQgbm90IGF1dG9tYXRpY2FsbHkgZW5hYmxlIGl0LgorICAgTm93IHdlIGRvLgorCisgKiByZW1vdGUtaGcgcmVtb3RlIGhlbHBlciBtaXNiZWhhdmVkIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBhIGxvY2FsIEhnCisgICByZXBvc2l0b3J5IHJlbGF0aXZlIHRvIHRoZSBob21lIGRpcmVjdG9yeSwgZS5nLiAiY2xvbmUgaGc6On4vdGhlcmUiLgorCisgKiBpbWFwLXNlbmQgcG9ydGVkIHRvIE9TIFggdXNlcyBBcHBsZSdzIHNlY3VyaXR5IGZyYW1ld29yayBpbnN0ZWFkIG9mCisgICBPcGVuU1NMJ3MuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIHRyZWF0cyBhbiBlbXB0eSBwYXRoIGdpdmVuIHRvICJscyIgYXMgdGhlIHJvb3Qgb2YKKyAgIHRoZSB0cmVlLgorCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiB4ZGctb3BlbiBjYW4gYmUgdXNlZCBhcyBhIGJyb3dzZXIgYmFja2VuZCBmb3IgImdpdCB3ZWItYnJvd3NlIgorICAgKGhlbmNlIHRvIHNob3cgImdpdCBoZWxwIC13IiBvdXRwdXQpLCB3aGVuIGF2YWlsYWJsZS4KKworICogImdpdCBncmVwIiBhbmQgImdpdCBzaG93IiBwYXkgYXR0ZW50aW9uIHRvIHRoZSAiLS10ZXh0Y29udiIgb3B0aW9uCisgICB3aGVuIHRoZXNlIGNvbW1hbmRzIGFyZSB0b2xkIHRvIG9wZXJhdGUgb24gYmxvYiBvYmplY3RzIChlLmcuICJnaXQKKyAgIGdyZXAgLWUgcGF0dGVybiAtLXRleHRjb252IEhFQUQ6TWFrZWZpbGUiKS4KKworICogImdpdCByZXBsYWNlIiBoZWxwZXIgbm8gbG9uZ2VyIGFsbG93cyBhbiBvYmplY3QgdG8gYmUgcmVwbGFjZWQgd2l0aAorICAgYW5vdGhlciBvYmplY3Qgb2YgYSBkaWZmZXJlbnQgdHlwZSB0byBhdm9pZCBjb25mdXNpb24gKHlvdSBjYW4KKyAgIHN0aWxsIG1hbnVhbGx5IGNyYWZ0IHN1Y2ggYSByZXBsYWNlbWVudCB1c2luZyAiZ2l0IHVwZGF0ZS1yZWYiLCBhcyBhbgorICAgZXNjYXBlIGhhdGNoKS4KKworICogImdpdCBzdGF0dXMiIG5vIGxvbmdlciBwcmludHMgdGhlIGRpcnR5IHN0YXR1cyBpbmZvcm1hdGlvbiBvZgorICAgc3VibW9kdWxlcyBmb3Igd2hpY2ggc3VibW9kdWxlLiRuYW1lLmlnbm9yZSBpcyBzZXQgdG8gImFsbCIuCisKKyAqICJnaXQgcmViYXNlIC1pIiBob25vdXJzIGNvcmUuYWJicmV2IHdoZW4gcHJlcGFyaW5nIHRoZSBpbnNuIHNoZWV0CisgICBmb3IgZWRpdGluZy4KKworICogImdpdCBzdGF0dXMiIGR1cmluZyBhIGNoZXJyeS1waWNrIHNob3dzIHdoaWNoIG9yaWdpbmFsIGNvbW1pdCBpcworICAgYmVpbmcgcGlja2VkLgorCisgKiBJbnN0ZWFkIG9mIHR5cGluZyBmb3VyIGNhcGl0YWwgbGV0dGVycyAiSEVBRCIsIHlvdSBjYW4gc2F5ICJAIiBub3csCisgICBlLmcuICJnaXQgbG9nIEAiLgorCisgKiAiZ2l0IGNoZWNrLWlnbm9yZSIgZm9sbG93cyB0aGUgc2FtZSBydWxlIGFzICJnaXQgYWRkIiBhbmQgImdpdAorICAgc3RhdHVzIiBpbiB0aGF0IHRoZSBpZ25vcmUvZXhjbHVkZSBtZWNoYW5pc20gZG9lcyBub3QgdGFrZSBlZmZlY3QKKyAgIG9uIHBhdGhzIHRoYXQgYXJlIGFscmVhZHkgdHJhY2tlZC4gIFdpdGggdGhlICItLW5vLWluZGV4IiBvcHRpb24sIGl0CisgICBjYW4gYmUgdXNlZCB0byBkaWFnbm9zZSB3aGljaCBwYXRocyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gaWdub3JlZAorICAgaGF2ZSBiZWVuIG1pc3Rha2VubHkgYWRkZWQgdG8gdGhlIGluZGV4LgorCisgKiBTb21lIGlycmVsZXZhbnQgImFkdmljZSIgbWVzc2FnZXMgdGhhdCBhcmUgc2hhcmVkIHdpdGggImdpdCBzdGF0dXMiCisgICBvdXRwdXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29tbWl0IGxvZyB0ZW1wbGF0ZS4KKworICogInVwZGF0ZS1yZWZzIiBsZWFybmVkIGEgIi0tc3RkaW4iIG9wdGlvbiB0byByZWFkIG11bHRpcGxlIHVwZGF0ZQorICAgcmVxdWVzdHMgYW5kIHBlcmZvcm0gdGhlbSBpbiBhbiBhbGwtb3Itbm9uZSBmYXNoaW9uLgorCisgKiBKdXN0IGxpa2UgIm1ha2UgLUMgPGRpcmVjdG9yeT4iLCAiZ2l0IC1DIDxkaXJlY3Rvcnk+IC4uLiIgdGVsbHMgR2l0CisgICB0byBnbyB0aGVyZSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZS4KKworICogSnVzdCBsaWtlICJnaXQgY2hlY2tvdXQgLSIga25vd3MgdG8gY2hlY2sgb3V0LCBhbmQgImdpdCBtZXJnZSAtIgorICAga25vd3MgdG8gbWVyZ2UsIHRoZSBicmFuY2ggeW91IHdlcmUgcHJldmlvdXNseSBvbiwgImdpdCBjaGVycnktcGljayIKKyAgIG5vdyB1bmRlcnN0YW5kcyAiZ2l0IGNoZXJyeS1waWNrIC0iIHRvIHBpY2sgZnJvbSB0aGUgcHJldmlvdXMKKyAgIGJyYW5jaC4KKworICogImdpdCBzdGF0dXMiIG5vdyBvbWl0cyB0aGUgcHJlZml4IHRvIG1ha2UgaXRzIG91dHB1dCBhIGNvbW1lbnQgaW4gYQorICAgY29tbWl0IGxvZyBlZGl0b3IsIHdoaWNoIGlzIG5vdCBuZWNlc3NhcnkgZm9yIGh1bWFuIGNvbnN1bXB0aW9uLgorICAgU2NyaXB0cyB0aGF0IHBhcnNlIHRoZSBvdXRwdXQgb2YgImdpdCBzdGF0dXMiIGFyZSBhZHZpc2VkIHRvIHVzZQorICAgImdpdCBzdGF0dXMgLS1wb3JjZWxhaW4iIGluc3RlYWQsIGFzIGl0cyBmb3JtYXQgaXMgc3RhYmxlIGFuZCBlYXNpZXIKKyAgIHRvIHBhcnNlLgorCisgKiBUaGUgcmVmIHN5bnRheCAiZm9vXnt0YWd9IiAod2l0aCB0aGUgbGl0ZXJhbCBzdHJpbmcgInt0YWd9IikgcGVlbHMgYQorICAgdGFnIHJlZiB0byBpdHNlbGYsIGkuZS4gaXQncyBhIG5vLW9wLiwgYW5kIGZhaWxzIGlmCisgICAiZm9vIiBpcyBub3QgYSB0YWcuICAiZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB2MS4wXnt0YWd9IiBpcworICAgYSBtb3JlIGNvbnZlbmllbnQgd2F5IHRoYW4gInRlc3QgJChnaXQgY2F0LWZpbGUgLXQgdjEuMCkgPSB0YWciIHRvCisgICBjaGVjayBpZiB2MS4wIGlzIGEgdGFnLgorCisgKiAiZ2l0IGJyYW5jaCAtdiAtdiIgKGFuZCAiZ2l0IHN0YXR1cyIpIGRpZCBub3QgZGlzdGluZ3Vpc2ggYW1vbmcgYQorICAgYnJhbmNoIHRoYXQgaXMgbm90IGJhc2VkIG9uIGFueSBvdGhlciBicmFuY2gsIGEgYnJhbmNoIHRoYXQgaXMgaW4KKyAgIHN5bmMgd2l0aCBpdHMgdXBzdHJlYW0gYnJhbmNoLCBhbmQgYSBicmFuY2ggdGhhdCBpcyBjb25maWd1cmVkIHdpdGggYW4KKyAgIHVwc3RyZWFtIGJyYW5jaCB0aGF0IG5vIGxvbmdlciBleGlzdHMuCisKKyAqIEVhcmxpZXIgd2Ugc3RhcnRlZCByZWplY3RpbmcgYW55IGF0dGVtcHQgdG8gYWRkIHRoZSAwezQwfSBvYmplY3QgbmFtZSB0bworICAgdGhlIGluZGV4IGFuZCB0byB0cmVlIG9iamVjdHMsIGJ1dCBpdCBzb21ldGltZXMgaXMgbmVjZXNzYXJ5IHRvCisgICBhbGxvdyB0aGlzIHRvIGJlIGFibGUgdG8gdXNlIHRvb2xzIGxpa2UgZmlsdGVyLWJyYW5jaCB0byBjb3JyZWN0IHN1Y2gKKyAgIGJyb2tlbiB0cmVlIG9iamVjdHMuICAiZmlsdGVyLWJyYW5jaCIgY2FuIGFnYWluIGJlIHVzZWQgdG8gZG8gdGhpcy4KKworICogImdpdCBjb25maWciIGRpZCBub3QgcHJvdmlkZSBhIHdheSB0byBzZXQgb3IgYWNjZXNzIG51bWJlcnMgbGFyZ2VyCisgICB0aGFuIGEgbmF0aXZlICJpbnQiIG9uIHRoZSBwbGF0Zm9ybTsgaXQgbm93IHByb3ZpZGVzIDY0LWJpdCBzaWduZWQKKyAgIGludGVnZXJzIG9uIGFsbCBwbGF0Zm9ybXMuCisKKyAqICJnaXQgcHVsbCAtLXJlYmFzZSIgYWx3YXlzIGNob3NlIHRvIGRvIHRoZSBib2ctc3RhbmRhcmQgZmxhdHRlbmluZworICAgcmViYXNlLiAgWW91IGNhbiB0ZWxsIGl0IHRvIHJ1biAicmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIiB3aXRoCisgICAiZ2l0IHB1bGwgLS1yZWJhc2U9cHJlc2VydmUiIG9yIGJ5CisgICBzZXR0aW5nICJwdWxsLnJlYmFzZSIgY29uZmlndXJhdGlvbiB0byAicHJlc2VydmUiLgorCisgKiAiZ2l0IHB1c2ggLS1uby10aGluIiBhY3R1YWxseSBkaXNhYmxlcyB0aGUgInRoaW4gcGFjayB0cmFuc2ZlciIKKyAgIG9wdGltaXphdGlvbi4KKworICogTWFnaWMgcGF0aHNwZWNzIGxpa2UgIjooaWNhc2UpbWFrZWZpbGUiIChtYXRjaGVzIGJvdGggTWFrZWZpbGUKKyAgIGFuZCBtYWtlZmlsZSkgYW5kICI6KGdsb2IpZm9vLyoqL2JhciIgKG1hdGNoZXMgImJhciIgaW4gImZvbyIKKyAgIGFuZCBhbnkgc3ViZGlyZWN0b3J5IG9mICJmb28iKSBjYW4gYmUgdXNlZCBpbiBtb3JlIHBsYWNlcy4KKworICogVGhlICJodHRwLioiIHZhcmlhYmxlcyBjYW4gbm93IGJlIHNwZWNpZmllZCBmb3IgaW5kaXZpZHVhbCBVUkxzLgorICAgRm9yIGV4YW1wbGUsCisKKyAgIFtodHRwXQorICAgICAgIHNzbFZlcmlmeSA9IHRydWUKKyAgIFtodHRwICJodHRwczovL3dlYWsuZXhhbXBsZS5jb20vIl0KKyAgICAgICBzc2xWZXJpZnkgPSBmYWxzZQorCisgICB3b3VsZCBmbGlwIGh0dHAuc3NsVmVyaWZ5IG9mZiBvbmx5IHdoZW4gdGFsa2luZyB0byB0aGF0IHNwZWNpZmljCisgICBzaXRlLgorCisgKiAiZ2l0IG12IEEgQiIgd2hlbiBtb3ZpbmcgYSBzdWJtb2R1bGUgaGFzIGJlZW4gdGF1Z2h0IHRvCisgICByZWxvY2F0ZSB0aGUgc3VibW9kdWxlJ3Mgd29ya2luZyB0cmVlIGFuZCB0byBhZGp1c3QgdGhlIHBhdGhzIGluIHRoZQorICAgLmdpdG1vZHVsZXMgZmlsZS4KKworICogImdpdCBibGFtZSIgY2FuIG5vdyB0YWtlIG1vcmUgdGhhbiBvbmUgLUwgb3B0aW9uIHRvIGRpc2NvdmVyIHRoZQorICAgb3JpZ2luIG9mIG11bHRpcGxlIGJsb2NrcyBvZiBsaW5lcy4KKworICogVGhlIGh0dHAgdHJhbnNwb3J0IGNsaWVudHMgY2FuIG9wdGlvbmFsbHkgYXNrIHRvIHNhdmUgY29va2llcworICAgd2l0aCB0aGUgaHR0cC5zYXZlY29va2llcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IHB1c2giIGxlYXJuZWQgYSBtb3JlIGZpbmUgZ3JhaW5lZCBjb250cm9sIG92ZXIgYSBibHVudAorICAgIi0tZm9yY2UiIHdoZW4gcmVxdWVzdGluZyBhIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlIHdpdGggdGhlCisgICAiLS1mb3JjZS13aXRoLWxlYXNlPTxyZWZuYW1lPjo8ZXhwZWN0ZWQgb2JqZWN0IG5hbWU+IiBvcHRpb24uCisKKyAqICJnaXQgZGlmZiAtLWRpZmYtZmlsdGVyPTxjbGFzc2VzIG9mIGNoYW5nZXM+IiBjYW4gbm93IHRha2UKKyAgIGxvd2VyY2FzZSBsZXR0ZXJzIChlLmcuICItLWRpZmYtZmlsdGVyPWQiKSB0byBtZWFuICJzaG93CisgICBldmVyeXRoaW5nIGJ1dCB0aGVzZSBjbGFzc2VzIi4gICJnaXQgZGlmZi1maWxlcyAtcSIgaXMgbm93IGEKKyAgIGRlcHJlY2F0ZWQgc3lub255bSBmb3IgImdpdCBkaWZmLWZpbGVzIC0tZGlmZi1maWx0ZXI9ZCIuCisKKyAqICJnaXQgZmV0Y2giIChoZW5jZSAiZ2l0IHB1bGwiIGFzIHdlbGwpIGxlYXJuZWQgdG8gY2hlY2sKKyAgICJmZXRjaC5wcnVuZSIgYW5kICJyZW1vdGUuKi5wcnVuZSIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYW5kCisgICB0byBiZWhhdmUgYXMgaWYgdGhlICItLXBydW5lIiBjb21tYW5kIGxpbmUgb3B0aW9uIHdhcyBnaXZlbi4KKworICogImdpdCBjaGVjay1pZ25vcmUgLXoiIGFwcGxpZWQgdGhlIE5VTCB0ZXJtaW5hdGlvbiB0byBib3RoIGl0cyBpbnB1dAorICAgKHdpdGggLS1zdGRpbikgYW5kIGl0cyBvdXRwdXQsIGJ1dCAiZ2l0IGNoZWNrLWF0dHIgLXoiIGlnbm9yZWQgdGhlCisgICBvcHRpb24gb24gdGhlIG91dHB1dCBzaWRlLiBNYWtlIGJvdGggaG9ub3IgLXogb24gdGhlIGlucHV0IGFuZAorICAgb3V0cHV0IHNpZGUgdGhlIHNhbWUgd2F5LgorCisgKiAiZ2l0IHdoYXRjaGFuZ2VkIiBtYXkgc3RpbGwgYmUgdXNlZCBieSBvbGQgdGltZXJzLCBidXQgbWVudGlvbiBvZgorICAgaXQgaW4gZG9jdW1lbnRzIG1lYW50IGZvciBuZXcgdXNlcnMgd2lsbCBvbmx5IHdhc3RlIHJlYWRlcnMnIHRpbWUKKyAgIHdvbmRlcmluZyB3aGF0IHRoZSBkaWZmZXJlbmNlIGlzIGJldHdlZW4gaXQgYW5kICJnaXQgbG9nIi4gIE1ha2UgaXQKKyAgIGxlc3MgcHJvbWluZW50IGluIHRoZSBnZW5lcmFsIHBhcnQgb2YgdGhlIGRvY3VtZW50YXRpb24gYW5kIGV4cGxhaW4KKyAgIHRoYXQgaXQgaXMgbWVyZWx5IGEgImdpdCBsb2ciIHdpdGggZGlmZmVyZW50IGRlZmF1bHQgYmVoYXZpb3VyIGluCisgICBpdHMgb3duIGRvY3VtZW50LgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLgorCisgKiAiZ2l0IGZvci1lYWNoLXJlZiIgd2hlbiBhc2tpbmcgZm9yIG1lcmVseSB0aGUgb2JqZWN0IG5hbWUgZG9lcyBub3QKKyAgIGhhdmUgdG8gcGFyc2UgdGhlIG9iamVjdCBwb2ludGVkIGF0IGJ5IHRoZSByZWZzOyB0aGUgY29kZXBhdGggaGFzCisgICBiZWVuIG9wdGltaXplZC4KKworICogVGhlIEhUVFAgdHJhbnNwb3J0IHdpbGwgdHJ5IHRvIHVzZSBUQ1Aga2VlcGFsaXZlIHdoZW4gYWJsZS4KKworICogImdpdCByZXBhY2siIGlzIG5vdyB3cml0dGVuIGluIEMuCisKKyAqIEJ1aWxkIHByb2NlZHVyZSBmb3IgTVNWQyBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBJZiBhIGJ1aWxkLXRpbWUgZmFsbGJhY2sgaXMgc2V0IHRvICJjYXQiIGluc3RlYWQgb2YgImxlc3MiLCB3ZQorICAgc2hvdWxkIGFwcGx5IHRoZSBzYW1lICJubyBzdWJwcm9jZXNzIG9yIHBpcGUiIG9wdGltaXphdGlvbiBhcyB3ZQorICAgYXBwbHkgdG8gdXNlci1zdXBwbGllZCBHSVRfUEFHRVI9Y2F0LgorCisgKiBNYW55IGNvbW1hbmRzIHVzZSBhIC0tZGFzaGVkLW9wdGlvbiBhcyBhbiBvcGVyYXRpb24gbW9kZSBzZWxlY3RvcgorICAgKGUuZy4gImdpdCB0YWcgLS1kZWxldGUiKSB0aGF0IGV4Y2x1ZGVzIG90aGVyIG9wZXJhdGlvbiBtb2RlcworICAgKGUuZy4gImdpdCB0YWcgLS1kZWxldGUgLS12ZXJpZnkiIGlzIG5vbnNlbnNlKSBhbmQgdGhhdCBjYW5ub3QgYmUKKyAgIG5lZ2F0ZWQgKGUuZy4gImdpdCB0YWcgLS1uby1kZWxldGUiIGlzIG5vbnNlbnNlKS4gIFRoZSBwYXJzZS1vcHRpb25zCisgICBBUEkgbGVhcm5lZCBhIG5ldyBPUFRfQ01ETU9ERSBtYWNybyB0byBtYWtlIGl0IGVhc2llciB0byBpbXBsZW1lbnQKKyAgIHN1Y2ggYSBzZXQgb2Ygb3B0aW9ucy4KKworICogT1BUX0JPT0xFQU4oKSBpbiB0aGUgcGFyc2Utb3B0aW9ucyBBUEkgd2FzIG1pc2Rlc2lnbmVkIHRvIGJlICJjb3VudGluZworICAgdXAiIGJ1dCBtYW55IHN1YmNvbW1hbmRzIGV4cGVjdCBpdCB0byBiZWhhdmUgYXMgIm9uL29mZiIuIFVwZGF0ZQorICAgdGhlbSB0byB1c2UgT1BUX0JPT0woKSB3aGljaCBpcyBhIHByb3BlciBib29sZWFuLgorCisgKiAiZ2l0IGdjIiBleGl0cyBlYXJseSB3aXRob3V0IGRvaW5nIGFueSB3b3JrIHdoZW4gaXQgZGV0ZWN0cworICAgdGhhdCBhbm90aGVyIGluc3RhbmNlIG9mIGl0c2VsZiBpcyBhbHJlYWR5IHJ1bm5pbmcuCisKKyAqIFVuZGVyIG1lbW9yeSBwcmVzc3VyZSBhbmQvb3IgZmlsZSBkZXNjcmlwdG9yIHByZXNzdXJlLCB3ZSB1c2VkIHRvCisgICBjbG9zZSBwYWNrIHdpbmRvd3MgdGhhdCBhcmUgbm90IHVzZWQgYW5kIGFsc28gY2xvc2VkIGZpbGVoYW5kbGVzIHRvCisgICBvcGVuIGJ1dCB1bnVzZWQgcGFja2ZpbGVzLiBUaGVzZSBhcmUgbm93IGNvbnRyb2xsZWQgc2VwYXJhdGVseQorICAgdG8gYmV0dGVyIGNvcGUgd2l0aCB0aGUgbG9hZC4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuOC40CistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS44LjQgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycgbm90ZXMgZm9yCitkZXRhaWxzKS4KKworICogQW4gYW5jaWVudCBIb3ctVG8gb24gc2VydmluZyBHaXQgcmVwb3NpdG9yaWVzIG9uIGFuIEhUVFAgc2VydmVyCisgICBsYWNrZWQgYSB3YXJuaW5nIHRoYXQgaXQgaGFzIGJlZW4gbW9zdGx5IHN1cGVyc2VkZWQgd2l0aCBhIG1vcmUKKyAgIG1vZGVybiB3YXkuCisgICAobWVyZ2UgNmQ1MmJjMyBzYy9kb2MtaG93dG8tZHVtYi1odHRwIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHVzZSBvZiBQZXJsIGluIG91ciB0ZXN0IHN1aXRlIGFuZCBOT19QRVJMCisgICBoYXMgYmVlbiBjbGFyaWZpZWQgYSBiaXQuCisgICAobWVyZ2UgZjhmYzBlZSBqbi90ZXN0LXByZXJlcS1wZXJsLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzeW5vcHNpcyBzZWN0aW9uIG9mIHRoZSAiZ2l0IHVucGFjay1vYmplY3RzIiBkb2N1bWVudGF0aW9uIGhhcyBiZWVuCisgICBjbGFyaWZpZWQgYSBiaXQuCisgICAobWVyZ2UgNjFlMmUyMiB2ZC9kb2MtdW5wYWNrLW9iamVjdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBkaWQgbm90IGdlbmVyYXRlIHRoZSBIVE1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50YXRpb24gdG8gImdpdCBzdWJ0cmVlIgorICAgaW4gY29udHJpYi8uCisgICAobWVyZ2UgOTVjNjJmYiBqay9zdWJ0cmVlLWluc3RhbGwtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQSBmYXN0LWltcG9ydCBzdHJlYW0gZXhwcmVzc2VzIGEgcGF0aG5hbWUgd2l0aCBmdW5ueSBjaGFyYWN0ZXJzIGJ5CisgICBxdW90aW5nIHRoZW0gaW4gQyBzdHlsZTsgdGhlIHJlbW90ZS1oZyByZW1vdGUgaGVscGVyIGZvcmdvdCB0byB1bnF1b3RlCisgICBzdWNoIGEgcGF0aC4KKyAgIChtZXJnZSAxMTM2MjY1IGFwL3JlbW90ZS1oZy11bnF1b3RlLWNxdW90ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmVzZXQgLXAgSEVBRCIgaGFzIGEgY29kZXBhdGggdG8gc3BlY2lhbC1jYXNlIGl0IHRvIGJlaGF2ZQorICAgZGlmZmVyZW50bHkgZnJvbSByZXNldHRpbmcgdG8gY29udGVudHMgb2Ygb3RoZXIgY29tbWl0cywgYnV0IGEKKyAgIHJlY2VudCBjaGFuZ2UgYnJva2UgaXQuCisKKyAqIENvbG9yaW5nIGFyb3VuZCBvY3RvcHVzIG1lcmdlcyBpbiAibG9nIC0tZ3JhcGgiIG91dHB1dCB3YXMgc2NyZXd5LgorICAgKG1lcmdlIDMzOWMxN2IgaG4vbG9nLWdyYXBoLWNvbG9yLW9jdG9wdXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZWNrb3V0IHRvcGljIiwgd2hlbiB0aGVyZSBpcyBub3QgeWV0IGEgbG9jYWwgInRvcGljIiBicmFuY2gKKyAgIGJ1dCB0aGVyZSBpcyBhIHVuaXF1ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciBhIHJlbW90ZSAidG9waWMiCisgICBicmFuY2gsIHByZXRlbmRlZCBhcyBpZiAiZ2l0IGNoZWNrb3V0IC10IC1iIHRvcGljIHJlbW90ZS8kci90b3BpYyIKKyAgIChmb3IgdGhhdCB1bmlxdWUgcmVtb3RlICRyKSB3YXMgcnVuLiBUaGlzIGhhY2sgaG93ZXZlciB3YXMgbm90CisgICBpbXBsZW1lbnRlZCBmb3IgImdpdCBjaGVja291dCB0b3BpYyAtLSIuCisgICAobWVyZ2UgYmNhMzk2OSBtbS9jaGVja291dC1hdXRvLXRyYWNrLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIE9uZSBsb25nLXN0YW5kaW5nIGZsYXcgaW4gdGhlIHBhY2sgdHJhbnNmZXIgcHJvdG9jb2wgdXNlZCBieSAiZ2l0CisgICBjbG9uZSIgd2FzIHRoYXQgdGhlcmUgd2FzIG5vIHdheSB0byB0ZWxsIHRoZSBvdGhlciBlbmQgd2hpY2ggYnJhbmNoCisgICAiSEVBRCIgcG9pbnRzIGF0LCBhbmQgdGhlIHJlY2VpdmluZyBlbmQgbmVlZGVkIHRvIGd1ZXNzLiAgQSBuZXcKKyAgIGNhcGFiaWxpdHkgaGFzIGJlZW4gZGVmaW5lZCBpbiB0aGUgcGFjayBwcm90b2NvbCB0byBjb252ZXkgdGhpcworICAgaW5mb3JtYXRpb24gc28gdGhhdCBjbG9uaW5nIGZyb20gYSByZXBvc2l0b3J5IHdpdGggbW9yZSB0aGFuIG9uZQorICAgYnJhbmNoIHBvaW50aW5nIGF0IHRoZSBzYW1lIGNvbW1pdCB3aGVyZSB0aGUgSEVBRCBpcyBhdCBub3cKKyAgIHJlbGlhYmx5IHNldHMgdGhlIGluaXRpYWwgYnJhbmNoIGluIHRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeS4KKyAgIChtZXJnZSAzNjBhMzI2IGpjL3VwbG9hZC1wYWNrLXNlbmQtc3ltcmVmIGxhdGVyIHRvIG1haW50KS4KKworICogV2UgZGlkIG5vdCBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGh0dHAgdHJhbnNwb3J0IGdldHMgcmVkaXJlY3RlZCBkdXJpbmcKKyAgIHRoZSBhdXRob3JpemF0aW9uIHJlcXVlc3QgKGUuZy4gZnJvbSBodHRwOi8vIHRvIGh0dHBzOi8vKS4KKyAgIChtZXJnZSA3MDkwMGVkIGprL2h0dHAtYXV0aC1yZWRpcmVjdHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBCYXNoIHByb21wdGluZyBjb2RlIHRvIGRlYWwgd2l0aCBhbiBTVk4gcmVtb3RlIGFzIGFuIHVwc3RyZWFtCisgICB3YXMgY29kZWQgaW4gYSB3YXkgdW5zdXBwb3J0ZWQgYnkgb2xkZXIgQmFzaCB2ZXJzaW9ucyAoMy54KS4KKyAgIChtZXJnZSA1MmVjODg5IHNnL3Byb21wdC1zdm4tcmVtb3RlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBmYWxsLWJhY2sgcGFyc2luZyBvZiBjb21taXQgb2JqZWN0cyB3aXRoIGJyb2tlbiBhdXRob3Igb3IKKyAgIGNvbW1pdHRlciBsaW5lcyB3YXMgbGVzcyByb2J1c3QgdGhhbiBpZGVhbCBpbiBwaWNraW5nIHVwIHRoZQorICAgdGltZXN0YW1wcy4KKyAgIChtZXJnZSAwMzgxOGE0IGprL3NwbGl0LWJyb2tlbi1pZGVudCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzIF52MS4wXiB2MS4wIiBnYXZlIHRoZSB2MS4wIHRhZyBpdHNlbGYgaW4gdGhlCisgICBvdXRwdXQsIGJ1dCAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyB2MS4wXi4udjEuMCIgZGlkIG5vdC4KKyAgIChtZXJnZSA4OTVjNWJhIGpjL3JldmlzaW9uLXJhbmdlLXVucGVlbCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2xvbmUiIHdyb3RlIHNvbWUgcHJvZ3Jlc3MgbWVzc2FnZXMgdG8gc3RhbmRhcmQgb3V0cHV0LCBub3QKKyAgIHRvIHN0YW5kYXJkIGVycm9yLCBhbmQgZGlkIG5vdCBzdXBwcmVzcyB0aGVtIHdpdGggdGhlCisgICAtLW5vLXByb2dyZXNzIG9wdGlvbi4KKyAgIChtZXJnZSA2NDNmOTE4IGprL2Nsb25lLXByb2dyZXNzLXRvLXN0ZGVyciBsYXRlciB0byBtYWludCkuCisKKyAqICJmb3JtYXQtcGF0Y2ggLS1mcm9tPTx3aG9tPiIgZm9yZ290IHRvIG9taXQgYW4gdW5uZWNlc3NhcnkgaW4tYm9keQorICAgZnJvbSBsaW5lLCBpLmUuIHdoZW4gPHdob20+IGlzIHRoZSBzYW1lIGFzIHRoZSByZWFsIGF1dGhvci4KKyAgIChtZXJnZSA2NjJjYzMwIGprL2Zvcm1hdC1wYXRjaC1mcm9tIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzaG9ydGxvZyIgdXNlZCB0byBjaG9rZSBhbmQgZGllIHdoZW4gdGhlcmUgaXMgYSBtYWxmb3JtZWQKKyAgIGNvbW1pdCAoZS5nLiBtaXNzaW5nIGF1dGhvcnMpOyBpdCBub3cgc2ltcGx5IGlnbm9yZXMgc3VjaCBhIGNvbW1pdAorICAgYW5kIGtlZXBzIGdvaW5nLgorICAgKG1lcmdlIGNkNGYwOWUgamsvc2hvcnRsb2ctdG9sZXJhdGUtYnJva2VuLWNvbW1pdCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UtcmVjdXJzaXZlIiBkaWQgbm90IHBhcnNlIGl0cyAiLS1kaWZmLWFsZ29yaXRobT0iIGNvbW1hbmQKKyAgIGxpbmUgb3B0aW9uIGNvcnJlY3RseS4KKyAgIChtZXJnZSA2NTYyOTI4IGprL2RpZmYtYWxnbyBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gcnVubmluZyAiZmV0Y2ggLXEiLCBhIGxvbmcgc2lsZW5jZSB3aGlsZSB0aGUgc2VuZGVyIHNpZGUKKyAgIGNvbXB1dGVzIHRoZSBzZXQgb2Ygb2JqZWN0cyB0byBzZW5kIGNhbiBiZSBtaXN0YWtlbiBieSBwcm94aWVzIGFzCisgICBkcm9wcGVkIGNvbm5lY3Rpb24uICBUaGUgc2VydmVyIHNpZGUgaGFzIGJlZW4gdGF1Z2h0IHRvIHNlbmQgYQorICAgc21hbGwgZW1wdHkgbWVzc2FnZXMgdG8ga2VlcCB0aGUgY29ubmVjdGlvbiBhbGl2ZS4KKyAgIChtZXJnZSAxMTVkZWRkIGprL3VwbG9hZC1wYWNrLWtlZXBhbGl2ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIiBoYWQgYSBwb3J0YWJpbGl0eSByZWdyZXNzaW9uIGluIHYxLjguNCB0aGF0IHRyaWdnZXJlZCBhCisgICBidWcgaW4gc29tZSBCU0Qgc2hlbGwgaW1wbGVtZW50YXRpb25zLgorICAgKG1lcmdlIDk5ODU1ZGQgbW0vcmViYXNlLWNvbnRpbnVlLWZyZWVic2QtV0IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJyYW5jaCAtLXRyYWNrIiBoYWQgYSBtaW5vciByZWdyZXNzaW9uIGluIHYxLjguMy4yIGFuZCBsYXRlcgorICAgdGhhdCBtYWRlIGl0IGltcG9zc2libGUgdG8gYmFzZSB5b3VyIGxvY2FsIHdvcmsgb24gYW55dGhpbmcgYnV0IGEKKyAgIGxvY2FsIGJyYW5jaCBvZiB0aGUgdXBzdHJlYW0gcmVwb3NpdG9yeSB5b3UgYXJlIHRyYWNraW5nLgorICAgKG1lcmdlIGIwZjQ5ZmYgamgvY2hlY2tvdXQtYXV0by10cmFja2luZyBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gdGhlIHdlYiBzZXJ2ZXIgcmVzcG9uZHMgd2l0aCAiNDA1IE1ldGhvZCBOb3QgQWxsb3dlZCIsICJnaXQKKyAgIGh0dHAtYmFja2VuZCIgc2hvdWxkIHRlbGwgdGhlIGNsaWVudCB3aGF0IG1ldGhvZHMgYXJlIGFsbG93ZWQgd2l0aAorICAgdGhlICJBbGxvdyIgaGVhZGVyLgorICAgKG1lcmdlIDkyNDdiZTAgYmMvaHR0cC1iYWNrZW5kLWFsbG93LTQwNSBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gdGhlcmUgaXMgbm8gc3VmZmljaWVudCBvdmVybGFwIGJldHdlZW4gb2xkIGFuZCBuZXcgaGlzdG9yeQorICAgZHVyaW5nIGEgImdpdCBmZXRjaCIgaW50byBhIHNoYWxsb3cgcmVwb3NpdG9yeSwgb2JqZWN0cyB0aGF0IHRoZQorICAgc2VuZGluZyBzaWRlIGtub3dzIHRoZSByZWNlaXZpbmcgZW5kIGhhcyB3ZXJlIHVubmVjZXNzYXJpbHkgc2VudC4KKyAgIChtZXJnZSBmMjFkMmE3IG5kL2ZldGNoLWludG8tc2hhbGxvdyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY3Zzc2VydmVyIiBjb21wdXRlZCB0aGUgcGVybWlzc2lvbiBtb2RlIGJpdHMgaW5jb3JyZWN0bHkgZm9yCisgICBleGVjdXRhYmxlIGZpbGVzLgorICAgKG1lcmdlIDFiNDhkNTYgamMvY3Zzc2VydmVyLXBlcm0tYml0LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gc2VuZC1lbWFpbCBvYnRhaW5zIGFuIGVycm9yIG1lc3NhZ2UgdG8gZGllIHdpdGggdXBvbgorICAgZmFpbHVyZSB0byBzdGFydCBhbiBTU0wgc2Vzc2lvbiwgaXQgdHJpZWQgdG8gcmVhZCB0aGUgZXJyb3Igc3RyaW5nCisgICBmcm9tIGEgd3JvbmcgcGxhY2UuCisgICAobWVyZ2UgNmNiMGM4OCBiYy9zZW5kLWVtYWlsLXNzbC1kaWUtbWVzc2FnZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW1wbGVtZW50YXRpb24gb2YgImFkZCAtaSIgaGFzIHNvbWUgY3JpcHBsaW5nIGNvZGUgdG8gd29yayBhcm91bmQgYW4KKyAgIEFjdGl2ZVN0YXRlIFBlcmwgbGltaXRhdGlvbiBidXQgaXQgYnkgbWlzdGFrZSBhbHNvIHRyaWdnZXJlZCBvbiBHaXQKKyAgIGZvciBXaW5kb3dzIHdoZXJlIE1TWVMgcGVybCBpcyB1c2VkLgorICAgKG1lcmdlIGRmMTdlNzcganMvYWRkLWktbWluZ3cgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBtYWRlIHN1cmUgdGhhdCB3ZSBub3RpY2Ugd2hlbiB0aGUgdXNlci1zdXBwbGllZCBHSVRfRElSIGlzIGFjdHVhbGx5IGEKKyAgIGdpdGZpbGUsIGJ1dCBkaWQgbm90IGRvIHRoZSBzYW1lIHdoZW4gdGhlIGRlZmF1bHQgIi5naXQiIGlzIGEKKyAgIGdpdGZpbGUuCisgICAobWVyZ2UgNDg3YTJiNyBuZC9naXQtZGlyLXBvaW50aW5nLWF0LWdpdGZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIGFuIG9iamVjdCBpcyBub3QgZm91bmQgYWZ0ZXIgY2hlY2tpbmcgdGhlIHBhY2tmaWxlcyBhbmQgdGhlCisgICBsb29zZSBvYmplY3QgZGlyZWN0b3J5LCByZWFkX3NoYTFfZmlsZSgpIHJlLWNoZWNrcyB0aGUgcGFja2ZpbGVzIHRvCisgICBwcmV2ZW50IHJhY2luZyB3aXRoIGEgY29uY3VycmVudCByZXBhY2tlcjsgdGVhY2ggdGhlIHNhbWUgbG9naWMgdG8KKyAgIGhhc19zaGExX2ZpbGUoKS4KKyAgIChtZXJnZSA0NWU4YTc0IGprL2hhcy1zaGExLWZpbGUtcmV0cnktcGFja2VkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb21taXQgLS1hdXRob3I9JG5hbWUiLCB3aGVuICRuYW1lIGlzIG5vdCBpbiB0aGUgY2Fub25pY2FsCisgICAiQS4gVS4gVGhvciA8YXUudGhvckBleGFtcGxlLnh6PiIgZm9ybWF0LCBsb29rcyBmb3IgYSBtYXRjaGluZyBuYW1lCisgICBmcm9tIGV4aXN0aW5nIGhpc3RvcnksIGJ1dCBkaWQgbm90IGNvbnN1bHQgbWFpbG1hcCB0byBncmFiIHRoZQorICAgcHJlZmVycmVkIGF1dGhvciBuYW1lLgorICAgKG1lcmdlIGVhMTY3OTQgYXAvY29tbWl0LWF1dGhvci1tYWlsbWFwIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBscy1maWxlcyAtayIgbmVlZHMgdG8gY3Jhd2wgb25seSB0aGUgcGFydCBvZiB0aGUgd29ya2luZyB0cmVlCisgICB0aGF0IG1heSBvdmVybGFwIHRoZSBwYXRocyBpbiB0aGUgaW5kZXggdG8gZmluZCBraWxsZWQgZmlsZXMsIGJ1dAorICAgc2hhcmVkIGNvZGUgd2l0aCB0aGUgbG9naWMgdG8gZmluZCBhbGwgdGhlIHVudHJhY2tlZCBmaWxlcywgd2hpY2gKKyAgIG1hZGUgaXQgdW5uZWNlc3NhcmlseSBpbmVmZmljaWVudC4KKyAgIChtZXJnZSA2ODBiZTA0IGpjL2xzLWZpbGVzLWtpbGxlZC1vcHRpbSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzaG9ydGVuZWQgY29tbWl0IG9iamVjdCBuYW1lcyBpbiB0aGUgaW5zbiBzaGVldCB0aGF0IGlzIHByZXBhcmVkIGF0IHRoZQorICAgYmVnaW5uaW5nIG9mIGEgInJlYmFzZSAtaSIgc2Vzc2lvbiBjYW4gYmVjb21lIGFtYmlndW91cyBhcyB0aGUKKyAgIHJlYmFzaW5nIHByb2dyZXNzZXMgYW5kIHRoZSByZXBvc2l0b3J5IGdhaW5zIG1vcmUgY29tbWl0cy4gTWFrZQorICAgc3VyZSB0aGUgaW50ZXJuYWwgcmVjb3JkIGlzIGtlcHQgd2l0aCBmdWxsIDQwLWhleCBvYmplY3QgbmFtZXMuCisgICAobWVyZ2UgNzVjNjk3NiBlcy9yZWJhc2UtaS1uby1hYmJyZXYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtLXByZXNlcnZlLW1lcmdlcyIgaW50ZXJuYWxseSB1c2VkIHRoZSBtZXJnZSBtYWNoaW5lcnkKKyAgIGFuZCBhcyBhIHNpZGUgZWZmZWN0IGxlZnQgdGhlIG1lcmdlIHN1bW1hcnkgbWVzc2FnZSBpbiB0aGUgbG9nLCBidXQKKyAgIHdoZW4gcmViYXNpbmcgdGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhlIG1lcmdlIHN1bW1hcnkuCisgICAobWVyZ2UgYTlmNzM5YyBydC9yZWJhc2UtcC1uby1tZXJnZS1zdW1tYXJ5IGxhdGVyIHRvIG1haW50KS4KKworICogQSBjYWxsIHRvIHhyZWFkKCkgd2FzIHVzZWQgd2l0aG91dCBhIGxvb3AgYXJvdW5kIGl0IHRvIGNvcGUgd2l0aCBzaG9ydAorICAgcmVhZHMgaW4gdGhlIGNvZGVwYXRoIHRvIHN0cmVhbSBuZXcgY29udGVudHMgdG8gYSBwYWNrLgorICAgKG1lcmdlIGU5MjUyN2MganMveHJlYWQtaW4tZnVsbCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiBmb3Jnb3QgdGhhdCB0aGUgY29tbWVudCBjaGFyYWN0ZXIgaXMKKyAgIGNvbmZpZ3VyYWJsZSB3aGlsZSByZWFkaW5nIGl0cyBpbnNuIHNoZWV0LgorICAgKG1lcmdlIDdiY2E3YWYgZXMvcmViYXNlLWktcmVzcGVjdC1jb3JlLWNvbW1lbnRjaGFyIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG1haWxtYXAgc3VwcG9ydCBjb2RlIHJlYWQgcGFzdCB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB3aGVuIHRoZQorICAgbWFpbG1hcCBmaWxlIGVuZGVkIHdpdGggYW4gaW5jb21wbGV0ZSBsaW5lLgorICAgKG1lcmdlIGY5NzJhMTYgamsvbWFpbG1hcC1pbmNvbXBsZXRlLWxpbmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSB1c2VkIHRvIHNlbmQgYSBsYXJnZSByZXF1ZXN0IHRvIHJlYWQoMikvd3JpdGUoMikgYXMgYSBzaW5nbGUKKyAgIHN5c3RlbSBjYWxsLCB3aGljaCB3YXMgYmFkIGZyb20gdGhlIGxhdGVuY3kgcG9pbnQgb2YgdmlldyB3aGVuCisgICB0aGUgb3BlcmF0aW9uIG5lZWRzIHRvIGJlIGtpbGxlZCwgYW5kIGFsc28gdHJpZ2dlcmVkIGFuIGVycm9yIG9uCisgICBicm9rZW4gNjQtYml0IHN5c3RlbXMgdGhhdCByZWZ1c2UgdG8gcmVhZCBvciB3cml0ZSBtb3JlIHRoYW4gMkdCCisgICBpbiBvbmUgZ28uCisgICAobWVyZ2UgYTQ4NzkxNiBzcC9jbGlwLXJlYWQtd3JpdGUtdG8tOG1iIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCIgdGhhdCBhdXRvLWZvbGxvd2VkIHRhZ3MgaW5jb3JyZWN0bHkgcmV1c2VkIHRoZQorICAgY29ubmVjdGlvbiB3aXRoIEdpdC1hd2FyZSB0cmFuc3BvcnQgaGVscGVyIChsaWtlIHRoZSBzYW1wbGUgImV4dDo6IgorICAgaGVscGVyIHNoaXBwZWQgd2l0aCBHaXQpLgorICAgKG1lcmdlIDBmNzNmOGIgamMvdHJhbnNwb3J0LWRvLW5vdC11c2UtY29ubmVjdC10d2ljZS1pbi1mZXRjaCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC0tZnVsbC1kaWZmIC0tIDxwYXRoc3BlYz4iIHNob3dlZCBhIGh1Z2UgZGlmZiBmb3IgcGF0aHMKKyAgIG91dHNpZGUgdGhlIGdpdmVuIDxwYXRoc3BlYz4gZm9yIGVhY2ggY29tbWl0LCBpbnN0ZWFkIG9mIHNob3dpbmcKKyAgIHRoZSBjaGFuZ2UgcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBvZiB0aGUgY29tbWl0LiAgImdpdCByZWZsb2cgLXAiCisgICBoYWQgYSBzaW1pbGFyIHByb2JsZW0uCisgICAobWVyZ2UgODM4ZjlhMSB0ci9sb2ctZnVsbC1kaWZmLWtlZXAtdHJ1ZS1wYXJlbnRzIGxhdGVyIHRvIG1haW50KS4KKworICogU2V0dGluZyBhIHN1Ym1vZHVsZS4qLnBhdGggY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byB0cnVlICh3aXRob3V0CisgICBnaXZpbmcgIj0gdmFsdWUiKSBjYXVzZWQgR2l0IHRvIHNlZ2ZhdWx0LgorICAgKG1lcmdlIDRiMDU0NDAgamwvc29tZS1zdWJtb2R1bGUtY29uZmlnLWFyZS1ub3QtYm9vbGVhbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiAodGhlcmUgY291bGQgYmUgb3RoZXJzLCBhcyB0aGUgcm9vdCBjYXVzZSBpcyBwcmV0dHkKKyAgIGdlbmVyaWMpIGZlZCBhIHJhbmRvbSwgZGF0YSBkZXBlbmRlbnQgc3RyaW5nIHRvICdlY2hvJyBhbmQKKyAgIGV4cGVjdGVkIGl0IHRvIGNvbWUgb3V0IGxpdGVyYWxseSwgY29ycnVwdGluZyBpdHMgZXJyb3IgbWVzc2FnZS4KKyAgIChtZXJnZSA4OWIwMjMwIG1tL25vLXNoZWxsLWVzY2FwZS1pbi1kaWUtbWVzc2FnZSBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgcGVvcGxlIHN0aWxsIHVzZSByYXRoZXIgb2xkIHZlcnNpb25zIG9mIGJhc2gsIHdoaWNoIGNhbm5vdAorICAgZ3JvayBzb21lIGNvbnN0cnVjdHMgbGlrZSAncHJpbnRmIC12IHZhcm5hbWUnIHdoaWNoIHRoZSBwcm9tcHQgYW5kCisgICBjb21wbGV0aW9uIGNvZGUgc3RhcnRlZCB0byB1c2UgcmVjZW50bHkuCisgICAobWVyZ2UgYTQ0YWE2OSBiYy9jb21wbGV0aW9uLWZvci1iYXNoLTMuMCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgdG8gcmVhZCBjb25maWd1cmF0aW9uIGZyb20gYSBibG9iIG9iamVjdCBkaWQgbm90IGNvbXBpbGUgb24KKyAgIHBsYXRmb3JtcyB3aXRoIGZnZXRjKCkgZXRjLiBpbXBsZW1lbnRlZCBhcyBtYWNyb3MuCisgICAobWVyZ2UgNDlkNmNmYSBodi9jb25maWctZnJvbS1ibG9iIGxhdGVyIHRvIG1haW50LTEuOC4zKS4KKworICogVGhlIHJlY2VudCAic2hvcnQtY3V0IGNsb25lIGNvbm5lY3Rpdml0eSBjaGVjayIgdG9waWMgYnJva2UgYQorICAgc2hhbGxvdyByZXBvc2l0b3J5IHdoZW4gYSBmZXRjaCBvcGVyYXRpb24gdHJpZXMgdG8gYXV0by1mb2xsb3cgdGFncy4KKyAgIChtZXJnZSA2ZGE4YmRjIG5kL2ZldGNoLXBhY2stc2hhbGxvdy1maXggbGF0ZXIgdG8gbWFpbnQtMS44LjMpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTRiODhhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuMC50eHQKQEAgLTAsMCArMSwzNDUgQEAKK0dpdCB2MS45LjAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworImdpdCBzdWJtb2R1bGUgZm9yZWFjaCAkY21kICRhcmdzIiB1c2VkIHRvIHRyZWF0ICIkY21kICRhcmdzIiB0aGUgc2FtZQord2F5ICJzc2giIGRpZCwgY29uY2F0ZW5hdGluZyB0aGVtIGludG8gYSBzaW5nbGUgc3RyaW5nIGFuZCBsZXR0aW5nIHRoZQorc2hlbGwgdW5xdW90ZS4gQ2FyZWxlc3MgdXNlcnMgd2hvIGZvcmdldCB0byBzdWZmaWNpZW50bHkgcXVvdGUgJGFyZ3MKK2dldCB0aGVpciBhcmd1bWVudCBzcGxpdCBhdCAkSUZTIHdoaXRlc3BhY2VzIGJ5IHRoZSBzaGVsbCwgYW5kIGdvdAordW5leHBlY3RlZCByZXN1bHRzIGR1ZSB0byB0aGlzLiBTdGFydGluZyBmcm9tIHRoaXMgcmVsZWFzZSwgdGhlCitjb21tYW5kIGxpbmUgaXMgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBzaGVsbCwgaWYgaXQgaGFzIGFuIGFyZ3VtZW50LgorCitSZWFkLW9ubHkgc3VwcG9ydCBmb3IgZXhwZXJpbWVudGFsIGxvb3NlLW9iamVjdCBmb3JtYXQsIGluIHdoaWNoIHVzZXJzCitjb3VsZCBvcHRpb25hbGx5IGNob29zZSB0byB3cml0ZSB0aGVpciBsb29zZSBvYmplY3RzIGZvciBhIHNob3J0Cit3aGlsZSBiZXR3ZWVuIHYxLjQuMyBhbmQgdjEuNS4zIGVyYSwgaGFzIGJlZW4gZHJvcHBlZC4KKworVGhlIG1lYW5pbmdzIG9mIHRoZSAiLS10YWdzIiBvcHRpb24gdG8gImdpdCBmZXRjaCIgaGFzIGNoYW5nZWQ7IHRoZQorY29tbWFuZCBmZXRjaGVzIHRhZ3MgX2luIGFkZGl0aW9uIHRvXyB3aGF0IGlzIGZldGNoZWQgYnkgdGhlIHNhbWUKK2NvbW1hbmQgbGluZSB3aXRob3V0IHRoZSBvcHRpb24uCisKK1RoZSB3YXkgImdpdCBwdXNoICR0aGVyZSAkd2hhdCIgaW50ZXJwcmV0cyB0aGUgJHdoYXQgcGFydCBnaXZlbiBvbiB0aGUKK2NvbW1hbmQgbGluZSwgd2hlbiBpdCBkb2VzIG5vdCBoYXZlIGEgY29sb24gdGhhdCBleHBsaWNpdGx5IHRlbGxzIHVzCit3aGF0IHJlZiBhdCB0aGUgJHRoZXJlIHJlcG9zaXRvcnkgaXMgdG8gYmUgdXBkYXRlZCwgaGFzIGJlZW4gZW5oYW5jZWQuCisKK0EgaGFuZGZ1bCBvZiBhbmNpZW50IGNvbW1hbmRzIHRoYXQgaGF2ZSBsb25nIGJlZW4gZGVwcmVjYXRlZCBhcmUKK2ZpbmFsbHkgZ29uZSAocmVwby1jb25maWcsIHRhci10cmVlLCBsb3N0LWZvdW5kLCBhbmQgcGVlay1yZW1vdGUpLgorCisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgbm90ZXMgKGZvciBHaXQgMi4wLjApCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuICJnaXQgcHVzaCBbJHRoZXJlXSIgZG9lcyBub3Qgc2F5IHdoYXQgdG8gcHVzaCwgd2UgaGF2ZSB1c2VkIHRoZQordHJhZGl0aW9uYWwgIm1hdGNoaW5nIiBzZW1hbnRpY3Mgc28gZmFyIChhbGwgeW91ciBicmFuY2hlcyB3ZXJlIHNlbnQKK3RvIHRoZSByZW1vdGUgYXMgbG9uZyBhcyB0aGVyZSBhbHJlYWR5IGFyZSBicmFuY2hlcyBvZiB0aGUgc2FtZSBuYW1lCitvdmVyIHRoZXJlKS4gIEluIEdpdCAyLjAsIHRoZSBkZWZhdWx0IHdpbGwgY2hhbmdlIHRvIHRoZSAic2ltcGxlIgorc2VtYW50aWNzLCB3aGljaCBwdXNoZXM6CisKKyAtIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBhbmQgb25seQorICAgd2hlbiB0aGUgY3VycmVudCBicmFuY2ggaXMgc2V0IHRvIGludGVncmF0ZSB3aXRoIHRoYXQgcmVtb3RlCisgICBicmFuY2gsIGlmIHlvdSBhcmUgcHVzaGluZyB0byB0aGUgc2FtZSByZW1vdGUgYXMgeW91IGZldGNoIGZyb207IG9yCisKKyAtIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBpZiB5b3UKKyAgIGFyZSBwdXNoaW5nIHRvIGEgcmVtb3RlIHRoYXQgaXMgbm90IHdoZXJlIHlvdSB1c3VhbGx5IGZldGNoIGZyb20uCisKK1VzZSB0aGUgdXNlciBwcmVmZXJlbmNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgInB1c2guZGVmYXVsdCIgdG8KK2NoYW5nZSB0aGlzLiAgSWYgeW91IGFyZSBhbiBvbGQtdGltZXIgd2hvIGlzIHVzZWQgdG8gdGhlICJtYXRjaGluZyIKK3NlbWFudGljcywgeW91IGNhbiBzZXQgdGhlIHZhcmlhYmxlIHRvICJtYXRjaGluZyIgdG8ga2VlcCB0aGUKK3RyYWRpdGlvbmFsIGJlaGF2aW91ci4gIElmIHlvdSB3YW50IHRvIGxpdmUgaW4gdGhlIGZ1dHVyZSBlYXJseSwgeW91CitjYW4gc2V0IGl0IHRvICJzaW1wbGUiIHRvZGF5IHdpdGhvdXQgd2FpdGluZyBmb3IgR2l0IDIuMC4KKworV2hlbiAiZ2l0IGFkZCAtdSIgKGFuZCAiZ2l0IGFkZCAtQSIpIGlzIHJ1biBpbnNpZGUgYSBzdWJkaXJlY3RvcnkgYW5kCitkb2VzIG5vdCBzcGVjaWZ5IHdoaWNoIHBhdGhzIHRvIGFkZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBpdAord2lsbCBvcGVyYXRlIG9uIHRoZSBlbnRpcmUgdHJlZSBpbiBHaXQgMi4wIGZvciBjb25zaXN0ZW5jeQord2l0aCAiZ2l0IGNvbW1pdCAtYSIgYW5kIG90aGVyIGNvbW1hbmRzLiAgVGhlcmUgd2lsbCBiZSBubworbWVjaGFuaXNtIHRvIG1ha2UgcGxhaW4gImdpdCBhZGQgLXUiIGJlaGF2ZSBsaWtlICJnaXQgYWRkIC11IC4iLgorQ3VycmVudCB1c2VycyBvZiAiZ2l0IGFkZCAtdSIgKHdpdGhvdXQgYSBwYXRoc3BlYykgc2hvdWxkIHN0YXJ0Cit0cmFpbmluZyB0aGVpciBmaW5nZXJzIHRvIGV4cGxpY2l0bHkgc2F5ICJnaXQgYWRkIC11IC4iCitiZWZvcmUgR2l0IDIuMCBjb21lcy4gIEEgd2FybmluZyBpcyBpc3N1ZWQgd2hlbiB0aGVzZSBjb21tYW5kcyBhcmUKK3J1biB3aXRob3V0IGEgcGF0aHNwZWMgYW5kIHdoZW4geW91IGhhdmUgbG9jYWwgY2hhbmdlcyBvdXRzaWRlIHRoZQorY3VycmVudCBkaXJlY3RvcnksIGJlY2F1c2UgdGhlIGJlaGF2aW91ciBpbiBHaXQgMi4wIHdpbGwgYmUgZGlmZmVyZW50Citmcm9tIHRvZGF5J3MgdmVyc2lvbiBpbiBzdWNoIGEgc2l0dWF0aW9uLgorCitJbiBHaXQgMi4wLCAiZ2l0IGFkZCA8cGF0aD4iIHdpbGwgYmVoYXZlIGFzICJnaXQgYWRkIC1BIDxwYXRoPiIsIHNvCit0aGF0ICJnaXQgYWRkIGRpci8iIHdpbGwgbm90aWNlIHBhdGhzIHlvdSByZW1vdmVkIGZyb20gdGhlIGRpcmVjdG9yeQorYW5kIHJlY29yZCB0aGUgcmVtb3ZhbC4gIFZlcnNpb25zIGJlZm9yZSBHaXQgMi4wLCBpbmNsdWRpbmcgdGhpcworcmVsZWFzZSwgd2lsbCBrZWVwIGlnbm9yaW5nIHJlbW92YWxzLCBidXQgdGhlIHVzZXJzIHdobyByZWx5IG9uIHRoaXMKK2JlaGF2aW91ciBhcmUgZW5jb3VyYWdlZCB0byBzdGFydCB1c2luZyAiZ2l0IGFkZCAtLWlnbm9yZS1yZW1vdmFsIDxwYXRoPiIKK25vdyBiZWZvcmUgMi4wIGlzIHJlbGVhc2VkLgorCitUaGUgZGVmYXVsdCBwcmVmaXggZm9yICJnaXQgc3ZuIiB3aWxsIGNoYW5nZSBpbiBHaXQgMi4wLiAgRm9yIGEgbG9uZwordGltZSwgImdpdCBzdm4iIGNyZWF0ZWQgaXRzIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBkaXJlY3RseSB1bmRlcgorcmVmcy9yZW1vdGVzLCBidXQgaXQgd2lsbCBwbGFjZSB0aGVtIHVuZGVyIHJlZnMvcmVtb3Rlcy9vcmlnaW4vIHVubGVzcworaXQgaXMgdG9sZCBvdGhlcndpc2Ugd2l0aCBpdHMgLS1wcmVmaXggb3B0aW9uLgorCisKK1VwZGF0ZXMgc2luY2UgdjEuOC41CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3JlaWduIGludGVyZmFjZXMsIHN1YnN5c3RlbXMgYW5kIHBvcnRzLgorCisgKiBUaGUgSFRUUCB0cmFuc3BvcnQsIHdoZW4gdGFsa2luZyBHU1MtTmVnb3RpYXRlLCB1c2VzICIxMDAKKyAgIENvbnRpbnVlIiByZXNwb25zZSB0byBhdm9pZCBoYXZpbmcgdG8gcmV3aW5kIGFuZCByZXNlbmQgYSBsYXJnZQorICAgcGF5bG9hZCwgd2hpY2ggbWF5IG5vdCBiZSBhbHdheXMgZG9hYmxlLgorCisgKiBWYXJpb3VzIGJ1Z2ZpeGVzIHRvIHJlbW90ZS1ienIgYW5kIHJlbW90ZS1oZyAoaW4gY29udHJpYi8pLgorCisgKiBUaGUgYnVpbGQgcHJvY2VkdXJlIGlzIGF3YXJlIG9mIE1pckJTRCBub3cuCisKKyAqIFZhcmlvdXMgImdpdCBwNCIsICJnaXQgc3ZuIiBhbmQgImdpdGsiIHVwZGF0ZXMuCisKKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEZldGNoaW5nIGZyb20gYSBzaGFsbG93bHktY2xvbmVkIHJlcG9zaXRvcnkgdXNlZCB0byBiZSBmb3JiaWRkZW4sCisgICBwcmltYXJpbHkgYmVjYXVzZSB0aGUgY29kZXBhdGhzIGludm9sdmVkIHdlcmUgbm90IGNhcmVmdWxseSB2ZXR0ZWQKKyAgIGFuZCB3ZSBkaWQgbm90IGJvdGhlciBzdXBwb3J0aW5nIHN1Y2ggdXNhZ2UuIFRoaXMgcmVsZWFzZSBhdHRlbXB0cworICAgdG8gYWxsb3cgb2JqZWN0IHRyYW5zZmVyIG91dCBvZiBhIHNoYWxsb3dseS1jbG9uZWQgcmVwb3NpdG9yeSBpbiBhCisgICBtb3JlIGNvbnRyb2xsZWQgd2F5IChpLmUuIHRoZSByZWNlaXZlciBiZWNvbWVzIGEgc2hhbGxvdyByZXBvc2l0b3J5CisgICB3aXRoIGEgdHJ1bmNhdGVkIGhpc3RvcnkpLgorCisgKiBKdXN0IGxpa2Ugd2UgZ2l2ZSBhIHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgImxlc3MiIHZpYSB0aGUgTEVTUworICAgZW52aXJvbm1lbnQgdmFyaWFibGUsIHdlIG5vdyBzcGVjaWZ5IGEgcmVhc29uYWJsZSBkZWZhdWx0IGZvciAibHYiCisgICB2aWEgdGhlICJMViIgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBzcGF3bmluZyB0aGUgcGFnZXIuCisKKyAqIFR3by1sZXZlbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIGluICJicmFuY2guKiIgYW5kICJyZW1vdGUuKiIKKyAgIGhpZXJhcmNoaWVzLCB3aG9zZSB2YXJpYWJsZXMgYXJlIHByZWRvbWluYW50bHkgdGhyZWUtbGV2ZWwsIHdlcmUKKyAgIG5vdCBjb21wbGV0ZWQgYnkgaGl0dGluZyBhIDxUQUI+IGluIGJhc2ggYW5kIHpzaCBjb21wbGV0aW9ucy4KKworICogRmV0Y2hpbmcgYSAnZnJvdHonIGJyYW5jaCB3aXRoICJnaXQgZmV0Y2giLCB3aGlsZSBhICdmcm90ei9uaXRmb2wnCisgICByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZyb20gYW4gZWFybGllciBmZXRjaCB3YXMgc3RpbGwgdGhlcmUsIHdvdWxkCisgICBlcnJvciBvdXQsIHByaW1hcmlseSBiZWNhdXNlIHRoZSBjb21tYW5kIHdhcyBub3QgdG9sZCB0aGF0IGl0IGlzCisgICBhbGxvd2VkIHRvIGxvc2UgYW55IGluZm9ybWF0aW9uIG9uIG91ciBzaWRlLiAgImdpdCBmZXRjaCAtLXBydW5lIgorICAgbm93IGNhbiBiZSB1c2VkIHRvIHJlbW92ZSAnZnJvdHovbml0Zm9sJyB0byBtYWtlIHJvb20gZm9yIGZldGNoaW5nIGFuZAorICAgc3RvcmluZyB0aGUgJ2Zyb3R6JyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLgorCisgKiAiZGlmZi5vcmRlcmZpbGU9PGZpbGU+IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvCisgICBwcmV0ZW5kIGFzIGlmIHRoZSAiLU88ZmlsZT4iIG9wdGlvbiB3ZXJlIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQKKyAgIGxpbmUgb2YgImdpdCBkaWZmIiwgZXRjLgorCisgKiBUaGUgbmVnYXRpdmUgcGF0aHNwZWMgc3ludGF4IGFsbG93cyAiZ2l0IGxvZyAtLSAuICc6IWRpciciIHRvIHRlbGwKKyAgIHVzICJJIGFtIGludGVyZXN0ZWQgaW4gZXZlcnl0aGluZyBidXQgJ2RpcicgZGlyZWN0b3J5Ii4KKworICogImdpdCBkaWZmdG9vbCIgc2hvd3MgaG93IG1hbnkgZGlmZmVyZW50IHBhdGhzIHRoZXJlIGFyZSBpbiB0b3RhbCwKKyAgIGFuZCBob3cgbWFueSBvZiB0aGVtIGhhdmUgYmVlbiBzaG93biBzbyBmYXIsIHRvIGluZGljYXRlIHByb2dyZXNzLgorCisgKiAiZ2l0IHB1c2ggb3JpZ2luIG1hc3RlciIgdXNlZCB0byBwdXNoIG91ciAnbWFzdGVyJyBicmFuY2ggdG8gdXBkYXRlCisgICB0aGUgJ21hc3RlcicgYnJhbmNoIGF0IHRoZSAnb3JpZ2luJyByZXBvc2l0b3J5LiAgVGhpcyBoYXMgYmVlbgorICAgZW5oYW5jZWQgdG8gdXNlIHRoZSBzYW1lIHJlZiBtYXBwaW5nICJnaXQgcHVzaCBvcmlnaW4iIHdvdWxkIHVzZSB0bworICAgZGV0ZXJtaW5lIHdoYXQgcmVmIGF0IHRoZSAnb3JpZ2luJyB0byBiZSB1cGRhdGVkIHdpdGggb3VyICdtYXN0ZXInLgorICAgRm9yIGV4YW1wbGUsIHdpdGggdGhpcyBjb25maWd1cmF0aW9uCisKKyAgIFtyZW1vdGUgIm9yaWdpbiJdCisgICAgICBwdXNoID0gcmVmcy9oZWFkcy8qOnJlZnMvcmV2aWV3LyoKKworICAgdGhhdCB3b3VsZCBjYXVzZSAiZ2l0IHB1c2ggb3JpZ2luIiB0byBwdXNoIG91dCBvdXIgbG9jYWwgYnJhbmNoZXMKKyAgIHRvIGNvcnJlc3BvbmRpbmcgcmVmcyB1bmRlciByZWZzL3Jldmlldy8gaGllcmFyY2h5IGF0ICdvcmlnaW4nLAorICAgImdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIiIHdvdWxkIHVwZGF0ZSAncmVmcy9yZXZpZXcvbWFzdGVyJyBvdmVyCisgICB0aGVyZS4gIEFsdGVybmF0aXZlbHksIGlmIHB1c2guZGVmYXVsdCBpcyBzZXQgdG8gJ3Vwc3RyZWFtJyBhbmQgb3VyCisgICAnbWFzdGVyJyBpcyBzZXQgdG8gaW50ZWdyYXRlIHdpdGggJ3RvcGljJyBmcm9tIHRoZSAnb3JpZ2luJyBicmFuY2gsCisgICBydW5uaW5nICJnaXQgcHVzaCBvcmlnaW4iIHdoaWxlIG9uIG91ciAnbWFzdGVyJyB3b3VsZCB1cGRhdGUgdGhlaXIKKyAgICd0b3BpYycgYnJhbmNoLCBhbmQgcnVubmluZyAiZ2l0IHB1c2ggb3JpZ2luIG1hc3RlciIgd2hpbGUgb24gYW55CisgICBvZiBvdXIgYnJhbmNoZXMgZG9lcyB0aGUgc2FtZS4KKworICogImdpdHdlYiIgbGVhcm5lZCB0byB0cmVhdCByZWYgaGllcmFyY2hpZXMgb3RoZXIgdGhhbiByZWZzL2hlYWRzIGFzCisgICBpZiB0aGV5IGFyZSBhZGRpdGlvbmFsIGJyYW5jaCBuYW1lc3BhY2VzIChlLmcuIHJlZnMvY2hhbmdlcy8gaW4KKyAgIEdlcnJpdCkuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PS4uLiIgbGVhcm5lZCBhIGZldyBmb3JtYXR0aW5nIGRpcmVjdGl2ZXM7CisgICBlLmcuICIlKGNvbG9yOnJlZCklKEhFQUQpJShjb2xvcjpyZXNldCkgJShyZWZuYW1lOnNob3J0KSAlKHN1YmplY3QpIi4KKworICogVGhlIGNvbW1hbmQgc3RyaW5nIGdpdmVuIHRvICJnaXQgc3VibW9kdWxlIGZvcmVhY2giIGlzIHBhc3NlZAorICAgZGlyZWN0bHkgdG8gdGhlIHNoZWxsLCB3aXRob3V0IGJlaW5nIGV2YWwnZWQuICBUaGlzIGlzIGEgYmFja3dhcmQKKyAgIGluY29tcGF0aWJsZSBjaGFuZ2UgdGhhdCBtYXkgYnJlYWsgZXhpc3RpbmcgdXNlcnMuCisKKyAqICJnaXQgbG9nIiBhbmQgZnJpZW5kcyBsZWFybmVkIHRoZSAiLS1leGNsdWRlPTxnbG9iPiIgb3B0aW9uLCB0bworICAgYWxsb3cgcGVvcGxlIHRvIHNheSAibGlzdCBoaXN0b3J5IG9mIGFsbCBicmFuY2hlcyBleGNlcHQgdGhvc2UgdGhhdAorICAgbWF0Y2ggdGhpcyBwYXR0ZXJuIiB3aXRoICJnaXQgbG9nIC0tZXhjbHVkZT0nKi8qJyAtLWJyYW5jaGVzIi4KKworICogImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCIgbGVhcm5lZCBhIG5ldyAiLS1zdHVjay1sb25nIiBvcHRpb24gdG8KKyAgIGhlbHAgc2NyaXB0cyBwYXJzZSBvcHRpb25zIHdpdGggYW4gb3B0aW9uYWwgcGFyYW1ldGVyLgorCisgKiBUaGUgIi0tdGFncyIgb3B0aW9uIHRvICJnaXQgZmV0Y2giIG5vIGxvbmdlciB0ZWxscyB0aGUgY29tbWFuZCB0bworICAgZmV0Y2ggX29ubHlfIHRoZSB0YWdzLiBJdCBpbnN0ZWFkIGZldGNoZXMgdGFncyBfaW4gYWRkaXRpb24gdG9fCisgICB3aGF0IGFyZSBmZXRjaGVkIGJ5IHRoZSBzYW1lIGNvbW1hbmQgbGluZSB3aXRob3V0IHRoZSBvcHRpb24uCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBldGMuCisKKyAqIFdoZW4gcGFyc2luZyBhIDQwLWhleCBzdHJpbmcgaW50byB0aGUgb2JqZWN0IG5hbWUsIHRoZSBzdHJpbmcgaXMKKyAgIGNoZWNrZWQgdG8gc2VlIGlmIGl0IGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhIHJlZiBzbyB0aGF0IGEgd2FybmluZworICAgY2FuIGJlIGdpdmVuIGZvciBhbWJpZ3VpdHkuIFRoZSBjb2RlIGtpY2tlZCBpbiBldmVuIHdoZW4gdGhlCisgICBjb3JlLndhcm5hbWJpZ3VvdXNyZWZzIGlzIHNldCB0byBmYWxzZSB0byBzcXVlbGNoIHRoaXMgd2FybmluZywgaW4KKyAgIHdoaWNoIGNhc2UgdGhlIGN5Y2xlcyBzcGVudCB0byBsb29rIGF0IHRoZSByZWYgbmFtZXNwYWNlIHdlcmUgYW4KKyAgIGV4cGVuc2l2ZSBuby1vcCwgYXMgdGhlIHJlc3VsdCB3YXMgZGlzY2FyZGVkIHdpdGhvdXQgYmVpbmcgdXNlZC4KKworICogVGhlIG5hbWluZyBjb252ZW50aW9uIG9mIHRoZSBwYWNrZmlsZXMgaGFzIGJlZW4gdXBkYXRlZDsgaXQgdXNlZCB0bworICAgYmUgYmFzZWQgb24gdGhlIGVudW1lcmF0aW9uIG9mIG5hbWVzIG9mIHRoZSBvYmplY3RzIHRoYXQgYXJlCisgICBjb250YWluZWQgaW4gdGhlIHBhY2ssIGJ1dCBub3cgaXQgYWxzbyBkZXBlbmRzIG9uIGhvdyB0aGUgcGFja2VkCisgICByZXN1bHQgaXMgcmVwcmVzZW50ZWQtLXBhY2tpbmcgdGhlIHNhbWUgc2V0IG9mIG9iamVjdHMgdXNpbmcKKyAgIGRpZmZlcmVudCBzZXR0aW5ncyAob3IgZGVsdGEgb3JkZXIpIHdvdWxkIHByb2R1Y2UgYSBwYWNrIHdpdGgKKyAgIGRpZmZlcmVudCBuYW1lLgorCisgKiAiZ2l0IGRpZmYgLS1uby1pbmRleCIgbW9kZSB1c2VkIHRvIHVubmVjZXNzYXJpbHkgYXR0ZW1wdCB0byByZWFkCisgICB0aGUgaW5kZXggd2hlbiB0aGVyZSBpcyBvbmUuCisKKyAqIFRoZSBkZXByZWNhdGVkIHBhcnNlLW9wdGlvbnMgbWFjcm8gT1BUX0JPT0xFQU4gaGFzIGJlZW4gcmVtb3ZlZDsKKyAgIHVzZSBPUFRfQk9PTCBvciBPUFRfQ09VTlRVUCBpbiBuZXcgY29kZS4KKworICogQSBmZXcgZHVwbGljYXRlIGltcGxlbWVudGF0aW9ucyBvZiBwcmVmaXgvc3VmZml4IHN0cmluZyBjb21wYXJpc29uCisgICBmdW5jdGlvbnMgaGF2ZSBiZWVuIHVuaWZpZWQgdG8gc3RhcnRzX3dpdGgoKSBhbmQgZW5kc193aXRoKCkuCisKKyAqIFRoZSBuZXcgUEVSTExJQl9FWFRSQSBtYWtlZmlsZSB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5CisgICBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIFBlcmwgbW9kdWxlcyAoZS5nLiB0aGUgb25lcyBuZWNlc3NhcnkgdG8gcnVuCisgICBnaXQtc3ZuKSBhcmUgaW5zdGFsbGVkIG9uIHRoZSBwbGF0Zm9ybSB3aGVuIGJ1aWxkaW5nLgorCisgKiAiZ2l0IG1lcmdlLWJhc2UiIGxlYXJuZWQgdGhlICItLWZvcmstcG9pbnQiIG1vZGUsIHRoYXQgaW1wbGVtZW50cworICAgdGhlIHNhbWUgbG9naWMgdXNlZCBpbiAiZ2l0IHB1bGwgLS1yZWJhc2UiIHRvIGZpbmQgYSBzdWl0YWJsZSBmb3JrCisgICBwb2ludCBvdXQgb2YgdGhlIHJlZmxvZyBlbnRyaWVzIGZvciB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCB0aGUKKyAgIHdvcmsgaGFzIGJlZW4gYmFzZWQgb24uICAiZ2l0IHJlYmFzZSIgaGFzIHRoZSBzYW1lIGxvZ2ljIHRoYXQgY2FuIGJlCisgICB0cmlnZ2VyZWQgd2l0aCB0aGUgIi0tZm9yay1wb2ludCIgb3B0aW9uLgorCisgKiBBIHRoaXJkLXBhcnR5ICJyZWNlaXZlLXBhY2siICh0aGUgcmVzcG9uZGVyIHRvICJnaXQgcHVzaCIpIGNhbgorICAgYWR2ZXJ0aXNlIHRoZSAibm8tdGhpbiIgY2FwYWJpbGl0eSB0byB0ZWxsICJnaXQgcHVzaCIgbm90IHRvIHVzZQorICAgdGhlIHRoaW4tcGFjayBvcHRpbWl6YXRpb24uIE91ciByZWNlaXZlLXBhY2sgaGFzIGFsd2F5cyBiZWVuCisgICBjYXBhYmxlIG9mIGFjY2VwdGluZyBhbmQgZmF0dGVuaW5nIGEgdGhpbi1wYWNrLCBhbmQgd2lsbCBjb250aW51ZQorICAgbm90IHRvIGFzayAiZ2l0IHB1c2giIHRvIHVzZSBhIG5vbi10aGluIHBhY2suCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjEuOC41CistLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS44LjUgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycgbm90ZXMKK2ZvciBkZXRhaWxzKS4KKworICogVGhlIHBhdGhzcGVjIG1hdGNoaW5nIGNvZGUsIHdoaWxlIGNvbXBhcmluZyB0d28gdHJlZXMgKGUuZy4gImdpdAorICAgZGlmZiBBIEIgLS0gcGF0aDEgcGF0aDIiKSB3YXMgdG9vIGFnZ3Jlc3NpdmUgYW5kIGZhaWxlZCB0byBtYXRjaAorICAgc29tZSBwYXRocyB3aGVuIG11bHRpcGxlIHBhdGhzcGVjcyB3ZXJlIGludm9sdmVkLgorCisgKiAiZ2l0IHJlcGFjayAtLW1heC1wYWNrLXNpemU9OGciIHN0b3BwZWQgYmVpbmcgcGFyc2VkIGNvcnJlY3RseSB3aGVuCisgICB0aGUgY29tbWFuZCB3YXMgcmVpbXBsZW1lbnRlZCBpbiBDLgorCisgKiBBbiBlYXJsaWVyIHVwZGF0ZSBpbiB2MS44LjQueCB0byAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyIgd2l0aAorICAgbmVnYXRpdmUgcmVmIGhhZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24uCisgICAobWVyZ2UgMjAwYWJlNyBqay9tYXJrLWVkZ2VzLXVuaW50ZXJlc3RpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIHJlY2VudCB1cGRhdGUgdG8gImdpdCBzZW5kLWVtYWlsIiBicm9rZSBwbGF0Zm9ybXMgd2hlcmUKKyAgIC9ldGMvc3NsL2NlcnRzLyBkaXJlY3RvcnkgZXhpc3RzIGJ1dCBjYW5ub3QgYmUgdXNlZCBhcyBTU0xfY2FfcGF0aAorICAgKGUuZy4gRmVkb3JhIHJhd2hpZGUpLgorCisgKiBBIGhhbmRmdWwgb2YgYnVncyBhcm91bmQgaW50ZXJwcmV0aW5nICRicmFuY2hAe3Vwc3RyZWFtfSBub3RhdGlvbgorICAgYW5kIGl0cyBsb29rYWxpa2UsIHdoZW4gJGJyYW5jaCBwYXJ0IGhhcyBpbnRlcmVzdGluZyBjaGFyYWN0ZXJzLAorICAgZS5nLiAiQCIsIGFuZCAiOiIsIGhhdmUgYmVlbiBmaXhlZC4KKworICogImdpdCBjbG9uZSIgd291bGQgZmFpbCB0byBjbG9uZSBmcm9tIGEgcmVwb3NpdG9yeSB0aGF0IGhhcyBhIHJlZgorICAgZGlyZWN0bHkgdW5kZXIgInJlZnMvIiwgZS5nLiAicmVmcy9zdGFzaCIsIGJlY2F1c2UgZGlmZmVyZW50CisgICB2YWxpZGF0aW9uIHBhdGhzIGRvIGRpZmZlcmVudCB0aGluZ3Mgb24gc3VjaCBhIHJlZm5hbWUuICBMb29zZW4gdGhlCisgICBjbGllbnQgc2lkZSdzIHZhbGlkYXRpb24gdG8gYWxsb3cgc3VjaCBhIHJlZi4KKworICogImdpdCBsb2cgLS1sZWZ0LXJpZ2h0IEEuLi5CIiBsb3N0IHRoZSAibGVmdG5lc3MiIG9mIGNvbW1pdHMKKyAgIHJlYWNoYWJsZSBmcm9tIEEgd2hlbiBBIGlzIGEgdGFnIGFzIGEgc2lkZSBlZmZlY3Qgb2YgYSByZWNlbnQKKyAgIGJ1Z2ZpeC4gIFRoaXMgaXMgYSByZWdyZXNzaW9uIGluIDEuOC40Lnggc2VyaWVzLgorCisgKiBkb2N1bWVudGF0aW9ucyB0byAiZ2l0IHB1bGwiIGhpbnRlZCB0aGVyZSBpcyBhbiAiLW0iIG9wdGlvbiBiZWNhdXNlCisgICBpdCBpbmNvcnJlY3RseSBzaGFyZWQgdGhlIGRvY3VtZW50YXRpb24gd2l0aCAiZ2l0IG1lcmdlIi4KKworICogImdpdCBkaWZmIEEgQiBzdWJtb2QiIGFuZCAiZ2l0IGRpZmYgQSBCIHN1Ym1vZC8iIG91Z2h0IHRvIGhhdmUgZG9uZQorICAgdGhlIHNhbWUgZm9yIGEgc3VibW9kdWxlICJzdWJtb2QiLCBidXQgZGlkbid0LgorCisgKiAiZ2l0IGNsb25lICRvcmlnaW4gZm9vXGJhclxiYXoiIG9uIFdpbmRvd3MgZmFpbGVkIHRvIGNyZWF0ZSB0aGUKKyAgIGxlYWRpbmcgZGlyZWN0b3JpZXMgKGkuZS4gYSBtb3JhbC1lcXVpdmFsZW50IG9mICJta2RpciAtcCIpLgorCisgKiAic3VibW9kdWxlLioudXBkYXRlPWNoZWNrb3V0Iiwgd2hlbiBwcm9wYWdhdGVkIGZyb20gLmdpdG1vZHVsZXMgdG8KKyAgIC5naXQvY29uZmlnLCB0dXJuZWQgaW50byBhICJzdWJtb2R1bGUuKi51cGRhdGU9bm9uZSIsIHdoaWNoIGRpZCBub3QKKyAgIG1ha2UgbXVjaCBzZW5zZS4KKyAgIChtZXJnZSBlZmE4ZmQ3IGZwL3N1Ym1vZHVsZS1jaGVja291dC1tb2RlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGltcGxlbWVudGF0aW9uIG9mICdnaXQgc3Rhc2ggJGNtZCAic3Rhc2hAey4uLn0iJyBkaWQgbm90IHF1b3RlCisgICB0aGUgc3Rhc2ggYXJndW1lbnQgcHJvcGVybHkgYW5kIGxlZnQgaXQgc3BsaXQgYXQgSUZTIHdoaXRlc3BhY2UuCisKKyAqIFRoZSAiLS1bbm8tXWluZm9ybWF0aXZlLWVycm9ycyIgb3B0aW9ucyB0byAiZ2l0IGRhZW1vbiIgd2VyZSBwYXJzZWQKKyAgIGEgYml0IHRvbyBsb29zZWx5LCBhbGxvd2luZyBhbnkgb3RoZXIgc3RyaW5nIGFmdGVyIHRoZXNlIG9wdGlvbgorICAgbmFtZXMuCisKKyAqIFRoZXJlIGlzIG5vIHJlYXNvbiB0byBoYXZlIGEgaGFyZGNvZGVkIHVwcGVyIGxpbWl0IGZvciB0aGUgbnVtYmVyIG9mCisgICBwYXJlbnRzIG9mIGFuIG9jdG9wdXMgbWVyZ2UsIGNyZWF0ZWQgdmlhIHRoZSBncmFmdCBtZWNoYW5pc20sIGJ1dAorICAgdGhlcmUgd2FzLgorCisgKiBUaGUgYmFzaWMgdGVzdCB1c2VkIHRvIGxlYXZlIHVubmVjZXNzYXJ5IHRyYXNoIGRpcmVjdG9yaWVzIGluIHRoZQorICAgdC8gZGlyZWN0b3J5LgorICAgKG1lcmdlIDczOGE4YmUgamsvdGVzdC1mcmFtZXdvcmstdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbWVyZ2UtYmFzZSAtLW9jdG9wdXMiIHVzZWQgdG8gbGVhdmUgY2xlYW5pbmcgdXAgc3Vib3B0aW1hbAorICAgcmVzdWx0IHRvIHRoZSBjYWxsZXIsIGJ1dCBub3cgaXQgZG9lcyB0aGUgY2xlYW4tdXAgaXRzZWxmLgorCisgKiBBICJnYyIgcHJvY2VzcyBydW5uaW5nIGFzIGEgZGlmZmVyZW50IHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gc3RvcCBhCisgICBuZXcgImdjIiBwcm9jZXNzIGZyb20gc3RhcnRpbmcsIGJ1dCBpdCBkaWRuJ3QuCisKKyAqIEFuIGVhcmxpZXIgImNsZWFuLXVwIiBpbnRyb2R1Y2VkIGFuIHVubmVjZXNzYXJ5IG1lbW9yeSBsZWFrLgorCisgKiAiZ2l0IGFkZCAtQSIgKG5vIG90aGVyIGFyZ3VtZW50cykgaW4gYSB0b3RhbGx5IGVtcHR5IHdvcmtpbmcgdHJlZQorICAgdXNlZCB0byBlbWl0IGFuIGVycm9yLgorCisgKiAiZ2l0IGxvZyAtLWRlY29yYXRlIiBkaWQgbm90IGhhbmRsZSBhIHRhZyBwb2ludGVkIGJ5IGFub3RoZXIgdGFnCisgICBuaWNlbHkuCisKKyAqIFdoZW4gd2UgZmlndXJlIG91dCBob3cgbWFueSBmaWxlIGRlc2NyaXB0b3JzIHRvIGFsbG9jYXRlIGZvcgorICAga2VlcGluZyBwYWNrZmlsZXMgb3BlbiwgYSBzeXN0ZW0gd2l0aCBub24td29ya2luZyBnZXRybGltaXQoKSBjb3VsZAorICAgY2F1c2UgdXMgdG8gZGllKCksIGJ1dCBiZWNhdXNlIHdlIG1ha2UgdGhpcyBjYWxsIG9ubHkgdG8gZ2V0IGEKKyAgIHJvdWdoIGVzdGltYXRlIG9mIGhvdyBtYW55IGFyZSBhdmFpbGFibGUgYW5kIHdlIGRvIG5vdCBldmVuIGF0dGVtcHQKKyAgIHRvIHVzZSB1cCBhbGwgYXZhaWxhYmxlIGZpbGUgZGVzY3JpcHRvcnMgb3Vyc2VsdmVzLCBpdCBpcyBuaWNlciB0bworICAgZmFsbCBiYWNrIHRvIGEgcmVhc29uYWJsZSBsb3cgdmFsdWUgcmF0aGVyIHRoYW4gZHlpbmcuCisKKyAqIHJlYWRfc2hhMV9maWxlKCksIHRoYXQgaXMgdGhlIHdvcmtob3JzZSB0byByZWFkIHRoZSBjb250ZW50cyBnaXZlbgorICAgYW4gb2JqZWN0IG5hbWUsIGhvbm91cmVkIG9iamVjdCByZXBsYWNlbWVudHMsIGJ1dCB0aGVyZSB3YXMgbm8KKyAgIGNvcnJlc3BvbmRpbmcgbWVjaGFuaXNtIHRvIHNoYTFfb2JqZWN0X2luZm8oKSB0aGF0IHdhcyB1c2VkIHRvCisgICBvYnRhaW4gdGhlIG1ldGFpbmZvIChlLmcuIHR5cGUgJiBzaXplKSBhYm91dCB0aGUgb2JqZWN0LiAgVGhpcyBsZWQKKyAgIGNhbGxlcnMgdG8gd2VpcmQgaW5jb25zaXN0ZW5jaWVzLgorICAgKG1lcmdlIDY2M2E4NTYgY2MvcmVwbGFjZS1vYmplY3QtaW5mbyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2F0LWZpbGUgLS1iYXRjaD0iLCBhbiBhZG1pdHRlZGx5IHVzZWxlc3MgY29tbWFuZCwgZGlkIG5vdAorICAgYmVoYXZlIHZlcnkgd2VsbC4KKworICogImdpdCByZXYtcGFyc2UgPHJldnM+IC0tIDxwYXRocz4iIGRpZCBub3QgaW1wbGVtZW50IHRoZSB1c3VhbAorICAgZGlzYW1iaWd1YXRpb24gcnVsZXMgdGhlIGNvbW1hbmRzIGluIHRoZSAiZ2l0IGxvZyIgZmFtaWx5IHVzZWQgaW4KKyAgIHRoZSBzYW1lIHdheS4KKworICogImdpdCBtdiBBIEIvIiwgd2hlbiBCIGRvZXMgbm90IGV4aXN0IGFzIGEgZGlyZWN0b3J5LCBzaG91bGQgZXJyb3IKKyAgIG91dCwgYnV0IGl0IGRpZG4ndC4KKworICogQSB3b3JrYXJvdW5kIHRvIGFuIG9sZCBidWcgaW4gZ2xpYmMgcHJpb3IgdG8gZ2xpYmMgMi4xNyBoYXMgYmVlbgorICAgcmV0aXJlZDsgdGhpcyB3b3VsZCByZW1vdmUgYSBzaWRlIGVmZmVjdCBvZiB0aGUgd29ya2Fyb3VuZCB0aGF0CisgICBjb3JydXB0cyBzeXN0ZW0gZXJyb3IgbWVzc2FnZXMgaW4gbm9uLUMgbG9jYWxlcy4KKworICogU1NMLXJlbGF0ZWQgb3B0aW9ucyB3ZXJlIG5vdCBwYXNzZWQgY29ycmVjdGx5IHRvIHVuZGVybHlpbmcgc29ja2V0CisgICBsYXllciBpbiAiZ2l0IHNlbmQtZW1haWwiLgorCisgKiAiZ2l0IGNvbW1pdCAtdiIgYXBwZW5kcyB0aGUgcGF0Y2ggdG8gdGhlIGxvZyBtZXNzYWdlIGJlZm9yZQorICAgZWRpdGluZywgYW5kIHRoZW4gcmVtb3ZlcyB0aGUgcGF0Y2ggd2hlbiB0aGUgZWRpdG9yIHJldHVybmVkCisgICBjb250cm9sLiBIb3dldmVyLCB0aGUgcGF0Y2ggd2FzIG5vdCBzdHJpcHBlZCBjb3JyZWN0bHkgd2hlbiB0aGUKKyAgIGZpcnN0IG1vZGlmaWVkIHBhdGggd2FzIGEgc3VibW9kdWxlLgorCisgKiAiZ2l0IGZldGNoIC0tZGVwdGg9MCIgd2FzIGEgbm8tb3AsIGFuZCB3YXMgc2lsZW50bHkgaWdub3JlZC4KKyAgIERpYWdub3NlIGl0IGFzIGFuIGVycm9yLgorCisgKiBSZW1vdGUgcmVwb3NpdG9yeSBVUkxzIGV4cHJlc3NlZCBpbiBzY3Atc3R5bGUgaG9zdDpwYXRoIG5vdGF0aW9uIGFyZQorICAgcGFyc2VkIG1vcmUgY2FyZWZ1bGx5IChlLmcuICJmb28vYmFyOmJheiIgaXMgbG9jYWwsICJbOjoxXTovfnVzZXIiIGFza3MKKyAgIHRvIGNvbm5lY3QgdG8gdXNlcidzIGhvbWUgZGlyZWN0b3J5IG9uIGhvc3QgYXQgYWRkcmVzcyA6OjEuCisKKyAqICJnaXQgZGlmZiAtLSAnOihpY2FzZSltYWtlZmlsZSciIHdhcyB1bm5lY2Vzc2FyaWx5IHJlamVjdGVkIGF0IHRoZQorICAgY29tbWFuZCBsaW5lIHBhcnNlci4KKworICogImdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrPW9rIiBkaWQgbm90IGNoZWNrIHRoZSBleGlzdGVuY2Ugb2YKKyAgIHRoZSBuYW1lZCBvYmplY3QuCisKKyAqICJnaXQgYW0gLS1hYm9ydCIgc29tZXRpbWVzIGNvbXBsYWluZWQgYWJvdXQgbm90IGJlaW5nIGFibGUgdG8gd3JpdGUKKyAgIGEgdHJlZSB3aXRoIGFuIDB7NDB9IG9iamVjdCBpbiBpdC4KKworICogVHdvIHByb2Nlc3NlcyBjcmVhdGluZyBsb29zZSBvYmplY3RzIGF0IHRoZSBzYW1lIHRpbWUgY291bGQgaGF2ZQorICAgZmFpbGVkIHVubmVjZXNzYXJpbHkgd2hlbiB0aGUgbmFtZSBvZiB0aGVpciBuZXcgb2JqZWN0cyBzdGFydGVkCisgICB3aXRoIHRoZSBzYW1lIGJ5dGUgdmFsdWUsIGR1ZSB0byBhIHJhY2UgY29uZGl0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjA2MDIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuMS50eHQKQEAgLTAsMCArMSw1OSBAQAorR2l0IHYxLjkuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOS4wCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogImdpdCBjbGVhbiAtZCBwYXRoc3BlYyIgZGlkIG5vdCB1c2UgdGhlIGdpdmVuIHBhdGhzcGVjIGNvcnJlY3RseQorICAgYW5kIGVuZGVkIHVwIGNsZWFuaW5nIHRvbyBtdWNoLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBtaXNiZWhhdmVkIHdoZW4gdGhlIHJlcG9zaXRvcnkgaXMgYm91bmQgdG8gdGhlCisgICB3b3JraW5nIHRyZWUgd2l0aCB0aGUgIi5naXQgZmlsZSIgbWVjaGFuaXNtLCB3aGVyZSBhIHRleHR1YWwgZmlsZQorICAgIi5naXQiIHRlbGxzIHVzIHdoZXJlIGl0IGlzLgorCisgKiAiZ2l0IHB1c2giIGRpZCBub3QgcGF5IGF0dGVudGlvbiB0byBicmFuY2guKi5wdXNocmVtb3RlIGlmIGl0IGlzCisgICBkZWZpbmVkIGVhcmxpZXIgdGhhbiByZW1vdGUucHVzaGRlZmF1bHQ7IHRoZSBvcmRlciBvZiB0aGVzZSB0d28KKyAgIHZhcmlhYmxlcyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHNob3VsZCBub3QgbWF0dGVyLCBidXQgaXQgZGlkCisgICBieSBtaXN0YWtlLgorCisgKiBDb2RlcGF0aHMgdGhhdCBwYXJzZSB0aW1lc3RhbXBzIGluIGNvbW1pdCBvYmplY3RzIGhhdmUgYmVlbgorICAgdGlnaHRlbmVkLgorCisgKiAiZ2l0IGRpZmYgLS1leHRlcm5hbC1kaWZmIiBpbmNvcnJlY3RseSBmZWQgdGhlIHN1Ym1vZHVsZSBkaXJlY3RvcnkKKyAgIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gdGhlIGV4dGVybmFsIGRpZmYgZHJpdmVyIHdoZW4gaXQga25ldyBpdCBpcworICAgdGhlIHNhbWUgYXMgb25lIG9mIHRoZSB2ZXJzaW9ucyBiZWluZyBjb21wYXJlZC4KKworICogImdpdCByZXNldCIgbmVlZHMgdG8gcmVmcmVzaCB0aGUgaW5kZXggd2hlbiB3b3JraW5nIGluIGEgd29ya2luZworICAgdHJlZSAoaXQgY2FuIGFsc28gYmUgdXNlZCB0byBtYXRjaCB0aGUgaW5kZXggdG8gdGhlIEhFQUQgaW4gYW4KKyAgIG90aGVyd2lzZSBiYXJlIHJlcG9zaXRvcnkpLCBidXQgaXQgZmFpbGVkIHRvIHNldCB1cCB0aGUgd29ya2luZworICAgdHJlZSBwcm9wZXJseSwgY2F1c2luZyBHSVRfV09SS19UUkVFIHRvIGJlIGlnbm9yZWQuCisKKyAqICJnaXQgY2hlY2stYXR0ciIgd2hlbiB3b3JraW5nIG9uIGEgcmVwb3NpdG9yeSB3aXRoIGEgd29ya2luZyB0cmVlCisgICBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIHRoZSB3b3JraW5nIHRyZWUgd2FzIHNwZWNpZmllZCB2aWEgdGhlCisgICAtLXdvcmstdHJlZSAoYW5kIG9idmlvdXNseSB3aXRoIC0tZ2l0LWRpcikgb3B0aW9uLgorCisgKiAibWVyZ2UtcmVjdXJzaXZlIiB3YXMgYnJva2VuIGluIDEuNy43IGVyYSBhbmQgc3RvcHBlZCB3b3JraW5nIGluCisgICBhbiBlbXB0eSAodGVtcG9yYXJ5KSB3b3JraW5nIHRyZWUsIHdoZW4gdGhlcmUgYXJlIHJlbmFtZXMKKyAgIGludm9sdmVkLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgcmV2LXBhcnNlIiB3YXMgbG9vc2UgaW4gcmVqZWN0aW5nIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyAgIHRoYXQgZG8gbm90IG1ha2Ugc2Vuc2UsIGUuZy4gIi0tZGVmYXVsdCIgd2l0aG91dCB0aGUgcmVxdWlyZWQKKyAgIHZhbHVlIGZvciB0aGF0IG9wdGlvbi4KKworICogaW5jbHVkZS5wYXRoIHZhcmlhYmxlIChvciBhbnkgdmFyaWFibGUgdGhhdCBleHBlY3RzIGEgcGF0aCB0aGF0CisgICBjYW4gdXNlIH51c2VybmFtZSBleHBhbnNpb24pIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgbm90IGEKKyAgIGJvb2xlYW4sIGJ1dCB0aGUgY29kZSBmYWlsZWQgdG8gY2hlY2sgaXQuCisKKyAqICJnaXQgZGlmZiAtLXF1aWV0IC0tIHBhdGhzcGVjMSBwYXRoc3BlYzIiIHNvbWV0aW1lcyBkaWQgbm90IHJldHVybgorICAgY29ycmVjdCBzdGF0dXMgdmFsdWUuCisKKyAqIEF0dGVtcHRpbmcgdG8gZGVlcGVuIGEgc2hhbGxvdyByZXBvc2l0b3J5IGJ5IGZldGNoaW5nIG92ZXIgc21hcnQKKyAgIEhUVFAgdHJhbnNwb3J0IGZhaWxlZCBpbiB0aGUgcHJvdG9jb2wgZXhjaGFuZ2UsIHdoZW4gbm8tZG9uZQorICAgZXh0ZW5zaW9uIHdhcyB1c2VkLiAgVGhlIGZldGNoaW5nIHNpZGUgd2FpdGVkIGZvciB0aGUgbGlzdCBvZgorICAgc2hhbGxvdyBib3VuZGFyeSBjb21taXRzIGFmdGVyIHRoZSBzZW5kaW5nIGVuZCBzdG9wcGVkIHRhbGtpbmcgdG8KKyAgIGl0LgorCisgKiBBbGxvdyAiZ2l0IGNtZCBwYXRoLyIsIHdoZW4gdGhlICdwYXRoJyBpcyB3aGVyZSBhIHN1Ym1vZHVsZSBpcworICAgYm91bmQgdG8gdGhlIHRvcC1sZXZlbCB3b3JraW5nIHRyZWUsIHRvIG1hdGNoICdwYXRoJywgZGVzcGl0ZSB0aGUKKyAgIGV4dHJhIGFuZCB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaCAoc3VjaCBhIHNsYXNoIGlzIG9mdGVuCisgICBnaXZlbiBieSBjb21tYW5kIGxpbmUgY29tcGxldGlvbikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTM0Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4yLnR4dApAQCAtMCwwICsxLDY3IEBACitHaXQgdjEuOS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS45LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBEb2N1bWVudGF0aW9uIGFuZCBpbi1jb2RlIGNvbW1lbnRzIGhhZCBtYW55IGluc3RhbmNlcyBvZiBtaXN0YWtlbgorICAgdXNlIG9mICJub3IiLCB3aGljaCBoYXZlIGJlZW4gY29ycmVjdGVkLgorCisgKiAiZ2l0IGZldGNoIC0tcHJ1bmUiLCB3aGVuIHRoZSByaWdodC1oYW5kLXNpZGUgb2YgbXVsdGlwbGUgZmV0Y2gKKyAgIHJlZnNwZWNzIG92ZXJsYXAgKGUuZy4gc3RvcmluZyAicmVmcy9oZWFkcy8qIiB0bworICAgInJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIsIHdoaWxlIHN0b3JpbmcgInJlZnMvZnJvdHovKiIgdG8KKyAgICJyZWZzL3JlbW90ZXMvb3JpZ2luL2ZyLyoiKSwgYWdncmVzc2l2ZWx5IHRob3VnaHQgdGhhdCBsYWNrIG9mCisgICAicmVmcy9oZWFkcy9mci9vdHoiIG9uIHRoZSBvcmlnaW4gc2l0ZSBtZWFudCB3ZSBzaG91bGQgcmVtb3ZlCisgICAicmVmcy9yZW1vdGVzL29yaWdpbi9mci9vdHoiIGZyb20gdXMsIHdpdGhvdXQgY2hlY2tpbmcgdGhlaXIKKyAgICJyZWZzL2Zyb3R6L290eiIgZmlyc3QuCisKKyAgIE5vdGUgdGhhdCBzdWNoIGEgY29uZmlndXJhdGlvbiBpcyBpbmhlcmVudGx5IHVuc2FmZSAodGhpbmsgd2hhdAorICAgc2hvdWxkIGhhcHBlbiB3aGVuICJyZWZzL2hlYWRzL2ZyL290eiIgZG9lcyBhcHBlYXIgb24gdGhlIG9yaWdpbgorICAgc2l0ZSksIGJ1dCB0aGF0IGlzIG5vdCBhIHJlYXNvbiBub3QgdG8gYmUgZXh0cmEgY2FyZWZ1bC4KKworICogImdpdCB1cGRhdGUtcmVmIC0tc3RkaW4iIGRpZCBub3QgZmFpbCBhIHJlcXVlc3QgdG8gY3JlYXRlIGEgcmVmCisgICB3aGVuIHRoZSByZWYgYWxyZWFkeSBleGlzdGVkLgorCisgKiAiZ2l0IGRpZmYgLS1uby1pbmRleCAtTXEgYSBiIiBmZWxsIGludG8gYW4gaW5maW5pdGUgbG9vcC4KKworICogV2hlbiBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGVkaXQgYSBjb21taXQgbG9nIG1lc3NhZ2UgKGUuZy4gImdpdAorICAgY29tbWl0IC1tIiBpcyBnaXZlbiBhIG1lc3NhZ2Ugd2l0aG91dCBzcGVjaWZ5aW5nICItZSIpLCB3ZSB1c2VkIHRvCisgICBkaXNhYmxlIHRoZSBzcGF3bmluZyBvZiB0aGUgZWRpdG9yIGJ5IG92ZXJyaWRpbmcgR0lUX0VESVRPUiwgYnV0CisgICB0aGlzIG1lYW5zIGFsbCB0aGUgdXNlcyBvZiB0aGUgZWRpdG9yLCBvdGhlciB0aGFuIHRvIGVkaXQgdGhlCisgICBjb21taXQgbG9nIG1lc3NhZ2UsIGFyZSBhbHNvIGFmZmVjdGVkLgorCisgKiAiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWJyYW5jaCIgc2hvd2VkIGl0cyBvdXRwdXQgd2l0aCBsYWJlbHMKKyAgICJhaGVhZC9iZWhpbmQvZ29uZSIgdHJhbnNsYXRlZCB0byB0aGUgdXNlcidzIGxvY2FsZS4KKworICogImdpdCBtdiIgdGhhdCBtb3ZlcyBhIHN1Ym1vZHVsZSBmb3Jnb3QgdG8gYWRqdXN0IHRoZSBhcnJheSB0aGF0CisgICB1c2VzIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggc3VibW9kdWxlcyB3ZXJlIHRvIGJlIG1vdmVkIHRvIHVwZGF0ZQorICAgaXRzIGNvbmZpZ3VyYXRpb24uCisKKyAqIExlbmd0aCBsaW1pdCBmb3IgdGhlIHBhdGhuYW1lIHVzZWQgd2hlbiByZW1vdmluZyBhIHBhdGggaW4gYSBkZWVwCisgICBzdWJkaXJlY3RvcnkgaGFzIGJlZW4gcmVtb3ZlZCB0byBhdm9pZCBidWZmZXIgb3ZlcmZsb3dzLgorCisgKiBUaGUgdGVzdCBoZWxwZXIgbGliLXRlcm1pbmFsIGFsd2F5cyBydW4gYW4gYWN0dWFsIHRlc3RfZXhwZWN0XyoKKyAgIHdoZW4gaW5jbHVkZWQsIHdoaWNoIHNjcmV3ZWQgdXAgd2l0aCB0aGUgdXNlIG9mIHNraWwtYWxsIHRoYXQgbWF5CisgICBoYXZlIHRvIGJlIGRvbmUgbGF0ZXIuCisKKyAqICJnaXQgaW5kZXgtcGFjayIgdXNlZCBhIHdyb25nIHZhcmlhYmxlIHRvIG5hbWUgdGhlIGtlZXAtZmlsZSBpbiBhbgorICAgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBmaWxlIGNhbm5vdCBiZSB3cml0dGVuIG9yIGNsb3NlZC4KKworICogInJlYmFzZSAtaSIgcHJvZHVjZWQgYSBicm9rZW4gaW5zbiBzaGVldCB3aGVuIHRoZSB0aXRsZSBvZiBhIGNvbW1pdAorICAgaGFwcGVuZWQgdG8gY29udGFpbiAnXG4nIChvciBlbmRlZCB3aXRoICdcYycpIGR1ZSB0byBhIGNhcmVsZXNzIHVzZQorICAgb2YgJ2VjaG8nLgorCisgKiBUaGVyZSB3ZXJlIGEgZmV3IGluc3RhbmNlcyBvZiAnZ2l0LWZvbycgcmVtYWluaW5nIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc3BlbGxlZCAnZ2l0IGZvbycuCisKKyAqIFNlcnZpbmcgb2JqZWN0cyBmcm9tIGEgc2hhbGxvdyByZXBvc2l0b3J5IG5lZWRzIHRvIHdyaXRlIGEKKyAgIG5ldyBmaWxlIHRvIGhvbGQgdGhlIHRlbXBvcmFyeSBzaGFsbG93IGJvdW5kYXJpZXMgYnV0IGl0IHdhcyBub3QKKyAgIGNsZWFuZWQgd2hlbiB3ZSBleGl0IGR1ZSB0byBkaWUoKSBvciBhIHNpZ25hbC4KKworICogV2hlbiAiZ2l0IHN0YXNoIHBvcCIgc3RvcHMgYWZ0ZXIgZmFpbGluZyB0byBhcHBseSB0aGUgc3Rhc2gKKyAgIChlLmcuIGR1ZSB0byBjb25mbGljdGluZyBjaGFuZ2VzKSwgdGhlIHN0YXNoIGlzIG5vdCBkcm9wcGVkLiBTdGF0ZQorICAgdGhhdCBleHBsaWNpdGx5IGluIHRoZSBvdXRwdXQgdG8gbGV0IHRoZSB1c2VycyBrbm93LgorCisgKiBUaGUgbGFiZWxzIGluICJnaXQgc3RhdHVzIiBvdXRwdXQgdGhhdCBkZXNjcmliZSB0aGUgbmF0dXJlIG9mCisgICBjb25mbGljdHMgKGUuZy4gImJvdGggZGVsZXRlZCIpIHdlcmUgbGltaXRlZCB0byAyMCBieXRlcywgd2hpY2ggd2FzCisgICB0b28gc2hvcnQgZm9yIHNvbWUgbDEwbiAoZS5nLiBmcikuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YjA1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS4zLnR4dApAQCAtMCwwICsxLDIxIEBACitHaXQgdjEuOS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2MS45LjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IHA0IiBkZWFsaW5nIHdpdGggY2hhbmdlcyBpbiBiaW5hcnkgZmlsZXMgd2VyZSBicm9rZW4gYnkgYQorICAgY2hhbmdlIGluIDEuOSByZWxlYXNlLgorCisgKiBUaGUgc2hlbGwgcHJvbXB0IHNjcmlwdCAoaW4gY29udHJpYi8pLCB3aGVuIHVzaW5nIHRoZSBQUk9NUFRfQ09NTUFORAorICAgaW50ZXJmYWNlLCB1c2VkIGFuIHVuc2FmZSBjb25zdHJ1Y3Qgd2hlbiBzaG93aW5nIHRoZSBicmFuY2ggbmFtZSBpbgorICAgJFBTMS4KKworICogImdpdCByZWJhc2UiIHVzZWQgYSBQT1NJWCBzaGVsbCBjb25zdHJ1Y3QgRnJlZUJTRCAvYmluL3NoIGRvZXMgbm90CisgICB3b3JrIHdlbGwgd2l0aC4KKworICogU29tZSBtb3JlIFVuaWNvZGUgY29kZXBvaW50cyBkZWZpbmVkIGluIFVuaWNvZGUgNi4zIGFzIGhhdmluZworICAgemVybyB3aWR0aCBoYXZlIGJlZW4gdGF1Z2h0IHRvIG91ciBkaXNwbGF5IGNvbHVtbiBjb3VudGluZyBsb2dpYy4KKworICogU29tZSB0ZXN0cyB1c2VkIHNoZWxsIGNvbnN0cnVjdHMgdGhhdCBkaWQgbm90IHdvcmsgd2VsbCBvbgorICAgRnJlZUJTRC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkMTgzNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMS45LjQudHh0CkBAIC0wLDAgKzEsMTYgQEAKK0dpdCB2MS45LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYxLjkuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIENvbW1hbmRzIHRoYXQgdGFrZSBwYXRoc3BlY3Mgb24gdGhlIGNvbW1hbmQgbGluZSBtaXNiZWhhdmVkIHdoZW4KKyAgIHRoZSBwYXRoc3BlYyBpcyBnaXZlbiBhcyBhbiBhYnNvbHV0ZSBwYXRobmFtZSAod2hpY2ggaXMgYQorICAgcHJhY3RpY2Ugbm90IHBhcnRpY3VsYXJseSBlbmNvdXJhZ2VkKSB0aGF0IHBvaW50cyBhdCBhIHN5bWJvbGljCisgICBsaW5rIGluIHRoZSB3b3JraW5nIHRyZWUuCisKKyAqIEFuIGVhcmxpZXIgZml4IHRvIHRoZSBzaGVsbCBwcm9tcHQgc2NyaXB0IChpbiBjb250cmliLykgZm9yIHVzaW5nCisgICB0aGUgUFJPTVBUX0NPTU1BTkQgaW50ZXJmYWNlIGRpZCBub3QgY29ycmVjdGx5IGNoZWNrIGlmIHRoZSBleHRyYQorICAgY29kZSBwYXRoIG5lZWRzIHRvIHRyaWdnZXIsIGNhdXNpbmcgdGhlIGJyYW5jaCBuYW1lIG5vdCB0byBhcHBlYXIKKyAgIHdoZW4gJ3Byb21wdHZhcnMnIG9wdGlvbiBpcyBkaXNhYmxlZCBpbiBiYXNoIG9yIFBST01QVF9TVUJTVCBpcworICAgdW5zZXQgaW4genNoLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzEuOS41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDZhYzBjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8xLjkuNS50eHQKQEAgLTAsMCArMSwzNCBAQAorR2l0IHYxLjkuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjEuOS40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogV2UgdXNlZCB0byBhbGxvdyBjb21taXR0aW5nIGEgcGF0aCAiLkdpdC9jb25maWciIHdpdGggR2l0IHRoYXQgaXMKKyAgIHJ1bm5pbmcgb24gYSBjYXNlIHNlbnNpdGl2ZSBmaWxlc3lzdGVtLCBidXQgYW4gYXR0ZW1wdCB0byBjaGVjayBvdXQKKyAgIHN1Y2ggYSBwYXRoIHdpdGggR2l0IHRoYXQgcnVucyBvbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbQorICAgd291bGQgaGF2ZSBjbG9iYmVyZWQgIi5naXQvY29uZmlnIiwgd2hpY2ggaXMgZGVmaW5pdGVseSBub3Qgd2hhdAorICAgdGhlIHVzZXIgd291bGQgaGF2ZSBleHBlY3RlZC4gIEdpdCBub3cgcHJldmVudHMgeW91IGZyb20gdHJhY2tpbmcKKyAgIGEgcGF0aCB3aXRoICIuR2l0IiAoaW4gYW55IGNhc2UgY29tYmluYXRpb24pIGFzIGEgcGF0aCBjb21wb25lbnQuCisKKyAqIE9uIFdpbmRvd3MsIGNlcnRhaW4gcGF0aCBjb21wb25lbnRzIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tICIuZ2l0IgorICAgYXJlIG1hcHBlZCB0byAiLmdpdCIsIGUuZy4gImdpdH4xL2NvbmZpZyIgaXMgdHJlYXRlZCBhcyBpZiBpdCB3ZXJlCisgICAiLmdpdC9jb25maWciLiAgSEZTKyBoYXMgYSBzaW1pbGFyIGlzc3VlLCB3aGVyZSBjZXJ0YWluIHVuaWNvZGUKKyAgIGNvZGVwb2ludHMgYXJlIGlnbm9yZWQsIGUuZy4gIi5nXHUyMDBjaXQvY29uZmlnIiBpcyB0cmVhdGVkIGFzIGlmCisgICBpdCB3ZXJlICIuZ2l0L2NvbmZpZyIuICBQYXRobmFtZXMgd2l0aCB0aGVzZSBwb3RlbnRpYWwgaXNzdWVzIGFyZQorICAgcmVqZWN0ZWQgb24gdGhlIGFmZmVjdGVkIHN5c3RlbXMuICBHaXQgb24gc3lzdGVtcyB0aGF0IGFyZSBub3QKKyAgIGFmZmVjdGVkIGJ5IHRoaXMgaXNzdWUgKGUuZy4gTGludXgpIGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8KKyAgIHJlamVjdCB0aGVtIHRvIGVuc3VyZSBjcm9zcyBwbGF0Zm9ybSBpbnRlcm9wZXJhYmlsaXR5IG9mIHRoZSBob3N0ZWQKKyAgIHByb2plY3RzLgorCisgKiAiZ2l0IGZzY2siIG5vdGljZXMgYSB0cmVlIG9iamVjdCB0aGF0IHJlY29yZHMgc3VjaCBhIHBhdGggdGhhdCBjYW4KKyAgIGJlIGNvbmZ1c2VkIHdpdGggIi5naXQiLCBhbmQgd2l0aCByZWNlaXZlLmZzY2tPYmplY3RzIGNvbmZpZ3VyYXRpb24KKyAgIHNldCB0byB0cnVlLCBhbiBhdHRlbXB0IHRvICJnaXQgcHVzaCIgc3VjaCBhIHRyZWUgb2JqZWN0IHdpbGwgYmUKKyAgIHJlamVjdGVkLiAgU3VjaCBhIHBhdGggbWF5IG5vdCBiZSBhIHByb2JsZW0gb24gYSB3ZWxsIGJlaGF2aW5nCisgICBmaWxlc3lzdGVtIGJ1dCBpbiBvcmRlciB0byBwcm90ZWN0IHRob3NlIG9uIEhGUysgYW5kIG9uIGNhc2UKKyAgIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zLCB0aGlzIGNoZWNrIGlzIGVuYWJsZWQgb24gYWxsIHBsYXRmb3Jtcy4KKworQSBiaWcgInRoYW5rcyEiIGZvciBicmluZ2luZyB0aGlzIGlzc3VlIHRvIHVzIGdvZXMgdG8gb3VyIGZyaWVuZHMgaW4KK3RoZSBNZXJjdXJpYWwgbGFuZCwgbmFtZWx5LCBNYXR0IE1hY2thbGwgYW5kIEF1Z2llIEZhY2tsZXIuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MTczNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4wLnR4dApAQCAtMCwwICsxLDM2NCBAQAorR2l0IHYyLjAgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PQorCitCYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5vdGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gImdpdCBwdXNoIFskdGhlcmVdIiBkb2VzIG5vdCBzYXkgd2hhdCB0byBwdXNoLCB3ZSBoYXZlIHVzZWQgdGhlCit0cmFkaXRpb25hbCAibWF0Y2hpbmciIHNlbWFudGljcyBzbyBmYXIgKGFsbCB5b3VyIGJyYW5jaGVzIHdlcmUgc2VudAordG8gdGhlIHJlbW90ZSBhcyBsb25nIGFzIHRoZXJlIGFscmVhZHkgYXJlIGJyYW5jaGVzIG9mIHRoZSBzYW1lIG5hbWUKK292ZXIgdGhlcmUpLiAgSW4gR2l0IDIuMCwgdGhlIGRlZmF1bHQgaXMgbm93IHRoZSAic2ltcGxlIiBzZW1hbnRpY3MsCit3aGljaCBwdXNoZXM6CisKKyAtIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBhbmQgb25seQorICAgd2hlbiB0aGUgY3VycmVudCBicmFuY2ggaXMgc2V0IHRvIGludGVncmF0ZSB3aXRoIHRoYXQgcmVtb3RlCisgICBicmFuY2gsIGlmIHlvdSBhcmUgcHVzaGluZyB0byB0aGUgc2FtZSByZW1vdGUgYXMgeW91IGZldGNoIGZyb207IG9yCisKKyAtIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLCBpZiB5b3UKKyAgIGFyZSBwdXNoaW5nIHRvIGEgcmVtb3RlIHRoYXQgaXMgbm90IHdoZXJlIHlvdSB1c3VhbGx5IGZldGNoIGZyb20uCisKK1lvdSBjYW4gdXNlIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICJwdXNoLmRlZmF1bHQiIHRvIGNoYW5nZQordGhpcy4gIElmIHlvdSBhcmUgYW4gb2xkLXRpbWVyIHdobyB3YW50cyB0byBrZWVwIHVzaW5nIHRoZQorIm1hdGNoaW5nIiBzZW1hbnRpY3MsIHlvdSBjYW4gc2V0IHRoZSB2YXJpYWJsZSB0byAibWF0Y2hpbmciLCBmb3IKK2V4YW1wbGUuICBSZWFkIHRoZSBkb2N1bWVudGF0aW9uIGZvciBvdGhlciBwb3NzaWJpbGl0aWVzLgorCitXaGVuICJnaXQgYWRkIC11IiBhbmQgImdpdCBhZGQgLUEiIGFyZSBydW4gaW5zaWRlIGEgc3ViZGlyZWN0b3J5Cit3aXRob3V0IHNwZWNpZnlpbmcgd2hpY2ggcGF0aHMgdG8gYWRkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZXkKK29wZXJhdGUgb24gdGhlIGVudGlyZSB0cmVlIGZvciBjb25zaXN0ZW5jeSB3aXRoICJnaXQgY29tbWl0IC1hIiBhbmQKK290aGVyIGNvbW1hbmRzICh0aGVzZSBjb21tYW5kcyB1c2VkIHRvIG9wZXJhdGUgb25seSBvbiB0aGUgY3VycmVudAorc3ViZGlyZWN0b3J5KS4gIFNheSAiZ2l0IGFkZCAtdSAuIiBvciAiZ2l0IGFkZCAtQSAuIiBpZiB5b3Ugd2FudCB0bworbGltaXQgdGhlIG9wZXJhdGlvbiB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyJnaXQgYWRkIDxwYXRoPiIgaXMgdGhlIHNhbWUgYXMgImdpdCBhZGQgLUEgPHBhdGg+IiBub3csIHNvIHRoYXQKKyJnaXQgYWRkIGRpci8iIHdpbGwgbm90aWNlIHBhdGhzIHlvdSByZW1vdmVkIGZyb20gdGhlIGRpcmVjdG9yeSBhbmQKK3JlY29yZCB0aGUgcmVtb3ZhbC4gIEluIG9sZGVyIHZlcnNpb25zIG9mIEdpdCwgImdpdCBhZGQgPHBhdGg+IiB1c2VkCit0byBpZ25vcmUgcmVtb3ZhbHMuICBZb3UgY2FuIHNheSAiZ2l0IGFkZCAtLWlnbm9yZS1yZW1vdmFsIDxwYXRoPiIgdG8KK2FkZCBvbmx5IGFkZGVkIG9yIG1vZGlmaWVkIHBhdGhzIGluIDxwYXRoPiwgaWYgeW91IHJlYWxseSB3YW50IHRvLgorCitUaGUgIi1xIiBvcHRpb24gdG8gImdpdCBkaWZmLWZpbGVzIiwgd2hpY2ggZG9lcyAqTk9UKiBtZWFuICJxdWlldCIsCitoYXMgYmVlbiByZW1vdmVkIChpdCB0b2xkIEdpdCB0byBpZ25vcmUgZGVsZXRpb24sIHdoaWNoIHlvdSBjYW4gZG8KK3dpdGggImdpdCBkaWZmLWZpbGVzIC0tZGlmZi1maWx0ZXI9ZCIpLgorCisiZ2l0IHJlcXVlc3QtcHVsbCIgbG9zdCBhIGZldyAiaGV1cmlzdGljcyIgdGhhdCBvZnRlbiBsZWQgdG8gbWlzdGFrZXMuCisKK1RoZSBkZWZhdWx0IHByZWZpeCBmb3IgImdpdCBzdm4iIGhhcyBjaGFuZ2VkIGluIEdpdCAyLjAuICBGb3IgYSBsb25nCit0aW1lLCAiZ2l0IHN2biIgY3JlYXRlZCBpdHMgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGRpcmVjdGx5IHVuZGVyCityZWZzL3JlbW90ZXMsIGJ1dCBpdCBub3cgcGxhY2VzIHRoZW0gdW5kZXIgcmVmcy9yZW1vdGVzL29yaWdpbi8gdW5sZXNzCitpdCBpcyB0b2xkIG90aGVyd2lzZSB3aXRoIGl0cyAiLS1wcmVmaXgiIG9wdGlvbi4KKworCitVcGRhdGVzIHNpbmNlIHYxLjkgc2VyaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBUaGUgIm11bHRpLW1haWwiIHBvc3QtcmVjZWl2ZSBob29rIChpbiBjb250cmliLykgaGFzIGJlZW4gdXBkYXRlZAorICAgdG8gYSBtb3JlIHJlY2VudCB2ZXJzaW9uIGZyb20gdXBzdHJlYW0uCisKKyAqIFRoZSAicmVtb3RlLWhnL2J6ciIgcmVtb3RlLWhlbHBlciBpbnRlcmZhY2VzICh1c2VkIHRvIGJlIGluCisgICBjb250cmliLykgYXJlIG5vIG1vcmUuICBUaGV5IGFyZSBub3cgbWFpbnRhaW5lZCBzZXBhcmF0ZWx5IGFzCisgICB0aGlyZC1wYXJ0eSBwbHVnLWlucyBpbiB0aGVpciBvd24gcmVwb3NpdG9yaWVzLgorCisgKiAiZ2l0IGdjIC0tYWdncmVzc2l2ZSIgbGVhcm5lZCAiLS1kZXB0aCIgb3B0aW9uIGFuZAorICAgImdjLmFnZ3Jlc3NpdmVEZXB0aCIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBhbGxvdyB1c2Ugb2YgYSBsZXNzCisgICBpbnNhbmUgZGVwdGggdGhhbiB0aGUgYnVpbHQtaW4gZGVmYXVsdCB2YWx1ZSBvZiAyNTAuCisKKyAqICJnaXQgbG9nIiBsZWFybmVkIHRoZSAiLS1zaG93LWxpbmVhci1icmVhayIgb3B0aW9uIHRvIHNob3cgd2hlcmUgYQorICAgc2luZ2xlIHN0cmFuZC1vZi1wZWFybHMgaXMgYnJva2VuIGluIGl0cyBvdXRwdXQuCisKKyAqIFRoZSAicmV2LXBhcnNlIC0tcGFyc2VvcHQiIG1lY2hhbmlzbSB1c2VkIGJ5IHNjcmlwdGVkIFBvcmNlbGFpbnMgdG8KKyAgIHBhcnNlIGNvbW1hbmQtbGluZSBvcHRpb25zIGFuZCB0byBnaXZlIGhlbHAgdGV4dCBsZWFybmVkIHRvIHRha2UKKyAgIHRoZSBhcmd2LWhlbHAgKHRoZSBwbGFjZWhvbGRlciBzdHJpbmcgZm9yIGFuIG9wdGlvbiBwYXJhbWV0ZXIsCisgICBlLmcuICJrZXktaWQiIGluICItLWdwZy1zaWduPTxrZXktaWQ+IikuCisKKyAqIFRoZSBwYXR0ZXJuIHRvIGZpbmQgd2hlcmUgdGhlIGZ1bmN0aW9uIGJlZ2lucyBpbiBDL0MrKyB1c2VkIGluCisgICAiZGlmZiIgYW5kICJncmVwIC1wIiBoYXMgYmVlbiB1cGRhdGVkIHRvIGltcHJvdmUgdmlld2luZyBDKysKKyAgIHNvdXJjZXMuCisKKyAqICJnaXQgcmViYXNlIiBsZWFybmVkIHRvIGludGVycHJldCBhIGxvbmUgIi0iIGFzICJAey0xfSIsIHRoZQorICAgYnJhbmNoIHRoYXQgd2Ugd2VyZSBwcmV2aW91c2x5IG9uLgorCisgKiAiZ2l0IGNvbW1pdCAtLWNsZWFudXA9PG1vZGU+IiBsZWFybmVkIGEgbmV3IG1vZGUsIHNjaXNzb3JzLgorCisgKiAiZ2l0IHRhZyAtLWxpc3QiIG91dHB1dCBjYW4gYmUgc29ydGVkIHVzaW5nICJ2ZXJzaW9uIHNvcnQiIHdpdGgKKyAgICItLXNvcnQ9dmVyc2lvbjpyZWZuYW1lIi4KKworICogRGlzY2FyZCB0aGUgYWNjdW11bGF0ZWQgImhldXJpc3RpY3MiIHRvIGd1ZXNzIGZyb20gd2hpY2ggYnJhbmNoIHRoZQorICAgcmVzdWx0IHdhbnRzIHRvIGJlIHB1bGxlZCBmcm9tIGFuZCBtYWtlIHN1cmUgdGhhdCB3aGF0IHRoZSBlbmQgdXNlcgorICAgc3BlY2lmaWVkIGlzIG5vdCBzZWNvbmQtZ3Vlc3NlZCBieSAiZ2l0IHJlcXVlc3QtcHVsbCIsIHRvIGF2b2lkCisgICBtaXN0YWtlcy4gIFdoZW4geW91IHB1c2hlZCBvdXQgeW91ciAnbWFzdGVyJyBicmFuY2ggdG8geW91ciBwdWJsaWMKKyAgIHJlcG9zaXRvcnkgYXMgJ2Zvci1saW51cycsIHVzZSB0aGUgbmV3ICJtYXN0ZXI6Zm9yLWxpbnVzIiBzeW50YXggdG8KKyAgIGRlbm90ZSB0aGUgYnJhbmNoIHRvIGJlIHB1bGxlZC4KKworICogImdpdCBncmVwIiBsZWFybmVkIHRvIGJlaGF2ZSBpbiBhIHdheSBzaW1pbGFyIHRvIG5hdGl2ZSBncmVwIHdoZW4KKyAgICItaCIgKG5vIGhlYWRlcikgYW5kICItYyIgKGNvdW50KSBvcHRpb25zIGFyZSBnaXZlbi4KKworICogImdpdCBwdXNoIiB2aWEgdHJhbnNwb3J0LWhlbHBlciBpbnRlcmZhY2UgaGFzIGJlZW4gdXBkYXRlZCB0bworICAgYWxsb3cgZm9yY2VkIHJlZiB1cGRhdGVzIGluIGEgd2F5IHNpbWlsYXIgdG8gdGhlIG5hdGl2ZWx5CisgICBzdXBwb3J0ZWQgdHJhbnNwb3J0cy4KKworICogVGhlICJzaW1wbGUiIG1vZGUgaXMgdGhlIGRlZmF1bHQgZm9yICJnaXQgcHVzaCIuCisKKyAqICJnaXQgYWRkIC11IiBhbmQgImdpdCBhZGQgLUEiLCB3aGVuIHJ1biB3aXRob3V0IGFueSBwYXRoc3BlYywgaXMgYQorICAgdHJlZS13aWRlIG9wZXJhdGlvbiBldmVuIHdoZW4gcnVuIGluc2lkZSBhIHN1YmRpcmVjdG9yeSBvZiBhCisgICB3b3JraW5nIHRyZWUuCisKKyAqICJnaXQgYWRkIDxwYXRoPiIgaXMgdGhlIHNhbWUgYXMgImdpdCBhZGQgLUEgPHBhdGg+IiBub3cuCisKKyAqICJjb3JlLnN0YXRpbmZvIiBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3aGljaCBpcyBhCisgICBuZXZlci1hZHZlcnRpc2VkIHN5bm9ueW0gdG8gImNvcmUuY2hlY2tzdGF0IiwgaGFzIGJlZW4gcmVtb3ZlZC4KKworICogVGhlICItcSIgb3B0aW9uIHRvICJnaXQgZGlmZi1maWxlcyIsIHdoaWNoIGRvZXMgKk5PVCogbWVhbgorICAgInF1aWV0IiwgaGFzIGJlZW4gcmVtb3ZlZCAoaXQgdG9sZCBHaXQgdG8gaWdub3JlIGRlbGV0aW9uLCB3aGljaAorICAgeW91IGNhbiBkbyB3aXRoICJnaXQgZGlmZi1maWxlcyAtLWRpZmYtZmlsdGVyPWQiKS4KKworICogU2VydmVyIG9wZXJhdG9ycyBjYW4gbG9vc2VuIHRoZSAidGlwcyBvZiByZWZzIG9ubHkiIHJlc3RyaWN0aW9uIGZvcgorICAgdGhlIHJlbW90ZSBhcmNoaXZlIHNlcnZpY2Ugd2l0aCB0aGUgdXBsb2FkYXJjaGl2ZS5hbGxvd1VucmVhY2hhYmxlCisgICBjb25maWd1cmF0aW9uIG9wdGlvbi4KKworICogVGhlIHByb2dyZXNzIGluZGljYXRvcnMgZnJvbSB2YXJpb3VzIHRpbWUtY29uc3VtaW5nIGNvbW1hbmRzIGhhdmUKKyAgIGJlZW4gbWFya2VkIGZvciBpMThuL2wxMG4uCisKKyAqICJnaXQgbm90ZXMgLUMgPGJsb2I+IiBkaWFnbm9zZXMgYXMgYW4gZXJyb3IgYW4gYXR0ZW1wdCB0byB1c2UgYW4KKyAgIG9iamVjdCB0aGF0IGlzIG5vdCBhIGJsb2IuCisKKyAqICJnaXQgY29uZmlnIiBsZWFybmVkIHRvIHJlYWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgd2hlbiAiLSIgaXMKKyAgIGdpdmVuIGFzIHRoZSB2YWx1ZSB0byBpdHMgIi0tZmlsZSIgcGFyYW1ldGVyIChhdHRlbXB0aW5nIGFuCisgICBvcGVyYXRpb24gdG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIGluIHRoZSBzdGFuZGFyZCBpbnB1dCBpcworICAgcmVqZWN0ZWQsIG9mIGNvdXJzZSkuCisKKyAqIFRyYWlsaW5nIHdoaXRlc3BhY2VzIGluIC5naXRpZ25vcmUgZmlsZXMsIHVubGVzcyB0aGV5IGFyZSBxdW90ZWQKKyAgIGZvciBmbm1hdGNoKDMpLCBlLmcuICJwYXRoXCAiLCBhcmUgd2FybmVkIGFuZCBpZ25vcmVkLiAgU3RyaWN0bHkKKyAgIHNwZWFraW5nLCB0aGlzIGlzIGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIGNoYW5nZSwgYnV0IHZlcnkgdW5saWtlbHkKKyAgIHRvIGJpdGUgYW55IHNhbmUgdXNlciBhbmQgYWRqdXN0aW5nIHNob3VsZCBiZSBvYnZpb3VzIGFuZCBlYXN5LgorCisgKiBNYW55IGNvbW1hbmRzIHRoYXQgY3JlYXRlIGNvbW1pdHMsIGUuZy4gInB1bGwiIGFuZCAicmViYXNlIiwKKyAgIGxlYXJuZWQgdG8gdGFrZSB0aGUgIi0tZ3BnLXNpZ24iIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgKiAiZ2l0IGNvbW1pdCIgY2FuIGJlIHRvbGQgdG8gYWx3YXlzIEdQRyBzaWduIHRoZSByZXN1bHRpbmcgY29tbWl0CisgICBieSBzZXR0aW5nIHRoZSAiY29tbWl0LmdwZ3NpZ24iIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gInRydWUiCisgICAodGhlIGNvbW1hbmQtbGluZSBvcHRpb24gIi0tbm8tZ3BnLXNpZ24iIHNob3VsZCBvdmVycmlkZSBpdCkuCisKKyAqICJnaXQgcHVsbCIgY2FuIGJlIHRvbGQgdG8gb25seSBhY2NlcHQgZmFzdC1mb3J3YXJkIGJ5IHNldHRpbmcgdGhlCisgICBuZXcgInB1bGwuZmYiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgcmVzZXQiIGxlYXJuZWQgdGhlICItTiIgb3B0aW9uLCB3aGljaCBkb2VzIG5vdCByZXNldCB0aGUgaW5kZXgKKyAgIGZ1bGx5IGZvciBwYXRocyB0aGUgaW5kZXgga25vd3MgYWJvdXQgYnV0IHRoZSB0cmVlLWlzaCB0aGUgY29tbWFuZAorICAgcmVzZXRzIHRvIGRvZXMgbm90ICh0aGVzZSBwYXRocyBhcmUga2VwdCBhcyBpbnRlbmQtdG8tYWRkIGVudHJpZXMpLgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgZXRjLgorCisgKiBUaGUgY29tcGlsYXRpb24gb3B0aW9ucyB0byBwb3J0IHRvIEFJWCBhbmQgdG8gTVNWQyBoYXZlIGJlZW4KKyAgIHVwZGF0ZWQuCisKKyAqIFdlIHN0YXJ0ZWQgdXNpbmcgd2lsZG1hdGNoKCkgaW4gcGxhY2Ugb2YgZm5tYXRjaCgzKSBhIGZldyByZWxlYXNlcworICAgYWdvOyBjb21wbGV0ZSB0aGUgcHJvY2VzcyBhbmQgc3RvcCB1c2luZyBmbm1hdGNoKDMpLgorCisgKiBVc2VzIG9mIGN1cmwncyAibXVsdGkiIGludGVyZmFjZSBhbmQgImVhc3kiIGludGVyZmFjZSBkbyBub3QgbWl4CisgICB3ZWxsIHdoZW4gd2UgYXR0ZW1wdCB0byByZXVzZSBvdXRnb2luZyBjb25uZWN0aW9ucy4gIFRlYWNoIHRoZSBSUEMKKyAgIG92ZXIgSFRUUCBjb2RlLCB1c2VkIGluIHRoZSBzbWFydCBIVFRQIHRyYW5zcG9ydCwgbm90IHRvIHVzZSB0aGUKKyAgICJlYXN5IiBpbnRlcmZhY2UuCisKKyAqIFRoZSBiaXRtYXAtaW5kZXggZmVhdHVyZSBmcm9tIEpHaXQgaGFzIGJlZW4gcG9ydGVkLCB3aGljaCBzaG91bGQKKyAgIHNpZ25pZmljYW50bHkgaW1wcm92ZSBwZXJmb3JtYW5jZSB3aGVuIHNlcnZpbmcgb2JqZWN0cyBmcm9tIGEKKyAgIHJlcG9zaXRvcnkgdGhhdCB1c2VzIGl0LgorCisgKiBUaGUgd2F5ICJnaXQgbG9nIC0tY2MiIHNob3dzIGEgY29tYmluZWQgZGlmZiBhZ2FpbnN0IG11bHRpcGxlCisgICBwYXJlbnRzIGhhcyBiZWVuIG9wdGltaXplZC4KKworICogVGhlIHByZWZpeGNtcCgpIGFuZCBzdWZmaXhjbXAoKSBmdW5jdGlvbnMgYXJlIGdvbmUuICBVc2UKKyAgIHN0YXJ0c193aXRoKCkgYW5kIGVuZHNfd2l0aCgpLCBhbmQgYWxzbyBjb25zaWRlciBpZiBza2lwX3ByZWZpeCgpCisgICBzdWl0cyB5b3VyIG5lZWRzIGJldHRlciB3aGVuIHVzaW5nIHRoZSBmb3JtZXIuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuICBNYW55CitvZiB0aGVtIGNhbWUgZnJvbSBmbHVycnkgb2YgYWN0aXZpdGllcyBhcyBHU29DIGNhbmRpZGF0ZSBtaWNyb3Byb2plY3QKK2V4ZXJjaXNlcy4KKworCitGaXhlcyBzaW5jZSB2MS45IHNlcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2MS45IGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqICJnaXQgcDQiIHdhcyBicm9rZW4gaW4gMS45IHJlbGVhc2UgdG8gZGVhbCB3aXRoIGNoYW5nZXMgaW4gYmluYXJ5CisgICBmaWxlcy4KKyAgIChtZXJnZSA3NDliNjY4IGNsL3A0LXVzZS1kaWZmLXRyZWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgc2hlbGwgcHJvbXB0IHNjcmlwdCAoaW4gY29udHJpYi8pLCB3aGVuIHVzaW5nIHRoZSBQUk9NUFRfQ09NTUFORAorICAgaW50ZXJmYWNlLCB1c2VkIGFuIHVuc2FmZSBjb25zdHJ1Y3Qgd2hlbiBzaG93aW5nIHRoZSBicmFuY2ggbmFtZSBpbgorICAgJFBTMS4KKyAgIChtZXJnZSAxZTQxMTljOCByaC9wcm9tcHQtcGNtb2RlLWF2b2lkLWV2YWwtb24tcmVmbmFtZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIiB1c2VkIGEgUE9TSVggc2hlbGwgY29uc3RydWN0IEZyZWVCU0QncyAvYmluL3NoIGRvZXMgbm90CisgICB3b3JrIHdlbGwgd2l0aC4KKyAgIChtZXJnZSA4Y2Q2NTk2IGttL2F2b2lkLW5vbi1mdW5jdGlvbi1yZXR1cm4taW4tcmViYXNlIGxhdGVyIHRvIG1haW50KS4KKworICogenNoIHByb21wdCAoaW4gY29udHJpYi8pIGxlYWtlZCB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcy4KKworICogQmFzaCBjb21wbGV0aW9uIChpbiBjb250cmliLykgZGlkIG5vdCBjb21wbGV0ZSB0aGUgcmVmcyBhbmQgcmVtb3RlcworICAgY29ycmVjdGx5IGdpdmVuICJnaXQgcHU8VEFCPiIgd2hlbiAicHUiIGlzIGFsaWFzZWQgdG8gInB1c2giLgorCisgKiBTb21lIG1vcmUgVW5pY29kZSBjb2RlIHBvaW50cywgZGVmaW5lZCBpbiBVbmljb2RlIDYuMyBhcyBoYXZpbmcgemVybworICAgd2lkdGgsIGhhdmUgYmVlbiB0YXVnaHQgdG8gb3VyIGRpc3BsYXkgY29sdW1uIGNvdW50aW5nIGxvZ2ljLgorICAgKG1lcmdlIGQ4MTNhYjkgdGIvdW5pY29kZS02LjMtemVyby13aWR0aCBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgdGVzdHMgdXNlZCBzaGVsbCBjb25zdHJ1Y3RzIHRoYXQgZGlkIG5vdCB3b3JrIHdlbGwgb24gRnJlZUJTRAorICAgKG1lcmdlIGZmN2ExYzYga20vYXZvaWQtYnMtaW4tc2hlbGwtZ2xvYiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDA3NjRjYSBrbS9hdm9pZC1jcC1hIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCB1cGRhdGUtcmVmIC0tc3RkaW4iIGRpZCBub3QgZmFpbCBhIHJlcXVlc3QgdG8gY3JlYXRlIGEgcmVmCisgICB3aGVuIHRoZSByZWYgYWxyZWFkeSBleGlzdGVkLgorICAgKG1lcmdlIGI5ZDU2YjUgbWgvdXBkYXRlLXJlZi1iYXRjaC1jcmVhdGUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC0tbm8taW5kZXggLU1xIGEgYiIgZmVsbCBpbnRvIGFuIGluZmluaXRlIGxvb3AuCisgICAobWVyZ2UgYWQxYzNmYiBqYy9maXgtZGlmZi1uby1pbmRleC1kaWZmLW9wdC1wYXJzZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2ggLS1wcnVuZSIsIHdoZW4gdGhlIHJpZ2h0LWhhbmQgc2lkZSBvZiBtdWx0aXBsZSBmZXRjaAorICAgcmVmc3BlY3Mgb3ZlcmxhcCAoZS5nLiBzdG9yaW5nICJyZWZzL2hlYWRzLyoiIHRvCisgICAicmVmcy9yZW1vdGVzL29yaWdpbi8qIiwgd2hpbGUgc3RvcmluZyAicmVmcy9mcm90ei8qIiB0bworICAgInJlZnMvcmVtb3Rlcy9vcmlnaW4vZnIvKiIpLCBhZ2dyZXNzaXZlbHkgdGhvdWdodCB0aGF0IGxhY2sgb2YKKyAgICJyZWZzL2hlYWRzL2ZyL290eiIgb24gdGhlIG9yaWdpbiBzaXRlIG1lYW50IHdlIHNob3VsZCByZW1vdmUKKyAgICJyZWZzL3JlbW90ZXMvb3JpZ2luL2ZyL290eiIgZnJvbSB1cywgd2l0aG91dCBjaGVja2luZyB0aGVpcgorICAgInJlZnMvZnJvdHovb3R6IiBmaXJzdC4KKworICAgTm90ZSB0aGF0IHN1Y2ggYSBjb25maWd1cmF0aW9uIGlzIGluaGVyZW50bHkgdW5zYWZlICh0aGluayB3aGF0CisgICBzaG91bGQgaGFwcGVuIHdoZW4gInJlZnMvaGVhZHMvZnIvb3R6IiBkb2VzIGFwcGVhciBvbiB0aGUgb3JpZ2luCisgICBzaXRlKSwgYnV0IHRoYXQgaXMgbm90IGEgcmVhc29uIG5vdCB0byBiZSBleHRyYSBjYXJlZnVsLgorICAgKG1lcmdlIGU2ZjYzNzEgY24vZmV0Y2gtcHJ1bmUtb3ZlcmxhcHBpbmctZGVzdGluYXRpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWJyYW5jaCIgc2hvd2VkIGl0cyBvdXRwdXQgd2l0aCBsYWJlbHMKKyAgICJhaGVhZC9iZWhpbmQvZ29uZSIgdHJhbnNsYXRlZCB0byB0aGUgdXNlcidzIGxvY2FsZS4KKyAgIChtZXJnZSA3YTc2YzI4IG1tL3N0YXR1cy1wb3JjZWxhaW4tZm9ybWF0LWkxOG4tZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQSBzdHJheSBlbnZpcm9ubWVudCB2YXJpYWJsZSAkcHJlZml4IGNvdWxkIGhhdmUgbGVha2VkIGludG8gYW5kCisgICBhZmZlY3RlZCB0aGUgYmVoYXZpb3VyIG9mIHRoZSAic3VidHJlZSIgc2NyaXB0IChpbiBjb250cmliLykuCisKKyAqIFdoZW4gaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBlZGl0IGEgY29tbWl0IGxvZyBtZXNzYWdlIChlLmcuICJnaXQKKyAgIGNvbW1pdCAtbSIgaXMgZ2l2ZW4gYSBtZXNzYWdlIHdpdGhvdXQgc3BlY2lmeWluZyAiLWUiKSwgd2UgdXNlZCB0bworICAgZGlzYWJsZSB0aGUgc3Bhd25pbmcgb2YgdGhlIGVkaXRvciBieSBvdmVycmlkaW5nIEdJVF9FRElUT1IsIGJ1dAorICAgdGhpcyBtZWFucyBhbGwgdGhlIHVzZXMgb2YgdGhlIGVkaXRvciwgb3RoZXIgdGhhbiB0byBlZGl0IHRoZQorICAgY29tbWl0IGxvZyBtZXNzYWdlLCBhcmUgYWxzbyBhZmZlY3RlZC4KKyAgIChtZXJnZSBiNTQ5YmUwIGJwL2NvbW1pdC1wLWVkaXRvciBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbXYiIHRoYXQgbW92ZXMgYSBzdWJtb2R1bGUgZm9yZ290IHRvIGFkanVzdCB0aGUgYXJyYXkgdGhhdAorICAgdXNlcyB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIHN1Ym1vZHVsZXMgd2VyZSB0byBiZSBtb3ZlZCB0byB1cGRhdGUKKyAgIGl0cyBjb25maWd1cmF0aW9uLgorICAgKG1lcmdlIGZiOGE0ZTggamsvbXYtc3VibW9kdWxlcy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBMZW5ndGggbGltaXQgZm9yIHRoZSBwYXRobmFtZSB1c2VkIHdoZW4gcmVtb3ZpbmcgYSBwYXRoIGluIGEgZGVlcAorICAgc3ViZGlyZWN0b3J5IGhhcyBiZWVuIHJlbW92ZWQgdG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93cy4KKyAgIChtZXJnZSAyZjI5ZTBjIG1oL3JlbW92ZS1zdWJ0cmVlLWxvbmctcGF0aG5hbWUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRlc3QgaGVscGVyIGxpYi10ZXJtaW5hbCBhbHdheXMgcnVuIGFuIGFjdHVhbCB0ZXN0X2V4cGVjdF8qCisgICB3aGVuIGluY2x1ZGVkLCB3aGljaCBzY3Jld2VkIHVwIHdpdGggdGhlIHVzZSBvZiBza2lsLWFsbCB0aGF0IG1heQorICAgaGF2ZSB0byBiZSBkb25lIGxhdGVyLgorICAgKG1lcmdlIDdlMjcxNzMgamsvbGliLXRlcm1pbmFsLWxhenkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGluZGV4LXBhY2siIHVzZWQgYSB3cm9uZyB2YXJpYWJsZSB0byBuYW1lIHRoZSBrZWVwLWZpbGUgaW4gYW4KKyAgIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgZmlsZSBjYW5ub3QgYmUgd3JpdHRlbiBvciBjbG9zZWQuCisgICAobWVyZ2UgZGU5ODNhMCBuZC9pbmRleC1wYWNrLWVycm9yLW1lc3NhZ2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAicmViYXNlIC1pIiBwcm9kdWNlZCBhIGJyb2tlbiBpbnNuIHNoZWV0IHdoZW4gdGhlIHRpdGxlIG9mIGEgY29tbWl0CisgICBoYXBwZW5lZCB0byBjb250YWluICdcbicgKG9yIGVuZGVkIHdpdGggJ1xjJykgZHVlIHRvIGEgY2FyZWxlc3MgdXNlCisgICBvZiAnZWNobycuCisgICAobWVyZ2UgY2IxYWVmZCB1cy9wcmludGYtbm90LWVjaG8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGVyZSB3ZXJlIGEgZmV3IGluc3RhbmNlcyBvZiAnZ2l0LWZvbycgcmVtYWluaW5nIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc3BlbGxlZCAnZ2l0IGZvbycuCisgICAobWVyZ2UgM2MzZTZmNSByci9kb2MtbWVyZ2Utc3RyYXRlZ2llcyBsYXRlciB0byBtYWludCkuCisKKyAqIFNlcnZpbmcgb2JqZWN0cyBmcm9tIGEgc2hhbGxvdyByZXBvc2l0b3J5IG5lZWRzIHRvIHdyaXRlIGEKKyAgIG5ldyBmaWxlIHRvIGhvbGQgdGhlIHRlbXBvcmFyeSBzaGFsbG93IGJvdW5kYXJpZXMsIGJ1dCBpdCB3YXMgbm90CisgICBjbGVhbmVkIHdoZW4gd2UgZXhpdCBkdWUgdG8gZGllKCkgb3IgYSBzaWduYWwuCisgICAobWVyZ2UgNzgzOTYzMiBqay9zaGFsbG93LXVwZGF0ZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuICJnaXQgc3Rhc2ggcG9wIiBzdG9wcyBhZnRlciBmYWlsaW5nIHRvIGFwcGx5IHRoZSBzdGFzaAorICAgKGUuZy4gZHVlIHRvIGNvbmZsaWN0aW5nIGNoYW5nZXMpLCB0aGUgc3Rhc2ggaXMgbm90IGRyb3BwZWQuIFN0YXRlCisgICB0aGF0IGV4cGxpY2l0bHkgaW4gdGhlIG91dHB1dCB0byBsZXQgdGhlIHVzZXJzIGtub3cuCisgICAobWVyZ2UgMmQ0Yzk5MyBqYy9zdGFzaC1wb3Atbm90LXBvcHBlZCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBsYWJlbHMgaW4gImdpdCBzdGF0dXMiIG91dHB1dCB0aGF0IGRlc2NyaWJlIHRoZSBuYXR1cmUgb2YKKyAgIGNvbmZsaWN0cyAoZS5nLiAiYm90aCBkZWxldGVkIikgd2VyZSBsaW1pdGVkIHRvIDIwIGJ5dGVzLCB3aGljaCB3YXMKKyAgIHRvbyBzaG9ydCBmb3Igc29tZSBsMTBuIChlLmcuIGZyKS4KKyAgIChtZXJnZSBjN2NiMzMzIGpuL3d0LXN0YXR1cyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2xlYW4gLWQgcGF0aHNwZWMiIGRpZCBub3QgdXNlIHRoZSBnaXZlbiBwYXRoc3BlYyBjb3JyZWN0bHkKKyAgIGFuZCBlbmRlZCB1cCBjbGVhbmluZyB0b28gbXVjaC4KKyAgIChtZXJnZSAxZjJlMTA4IGprL2NsZWFuLWQtcGF0aHNwZWMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmZ0b29sIiBtaXNiZWhhdmVkIHdoZW4gdGhlIHJlcG9zaXRvcnkgaXMgYm91bmQgdG8gdGhlCisgICB3b3JraW5nIHRyZWUgd2l0aCB0aGUgIi5naXQgZmlsZSIgbWVjaGFuaXNtLCB3aGVyZSBhIHRleHR1YWwgZmlsZQorICAgIi5naXQiIHRlbGxzIHVzIHdoZXJlIGl0IGlzLgorICAgKG1lcmdlIGZjZmVjOGIgZGEvZGlmZnRvb2wtZ2l0LWZpbGVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdXNoIiBkaWQgbm90IHBheSBhdHRlbnRpb24gdG8gImJyYW5jaC4qLnB1c2hyZW1vdGUiIGlmIGl0IGlzCisgICBkZWZpbmVkIGVhcmxpZXIgdGhhbiAicmVtb3RlLnB1c2hkZWZhdWx0IjsgdGhlIG9yZGVyIG9mIHRoZXNlIHR3bworICAgdmFyaWFibGVzIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgc2hvdWxkIG5vdCBtYXR0ZXIsIGJ1dCBpdCBkaWQKKyAgIGJ5IG1pc3Rha2UuCisgICAobWVyZ2UgOThiNDA2ZiBqay9yZW1vdGUtcHVzaHJlbW90ZS1jb25maWctcmVhZGluZyBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgcGF0aHMgdGhhdCBwYXJzZSB0aW1lc3RhbXBzIGluIGNvbW1pdCBvYmplY3RzIGhhdmUgYmVlbgorICAgdGlnaHRlbmVkLgorICAgKG1lcmdlIGY4MGQxZjkgamsvY29tbWl0LWRhdGVzLXBhcnNpbmctZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC0tZXh0ZXJuYWwtZGlmZiIgaW5jb3JyZWN0bHkgZmVkIHRoZSBzdWJtb2R1bGUgZGlyZWN0b3J5CisgICBpbiB0aGUgd29ya2luZyB0cmVlIHRvIHRoZSBleHRlcm5hbCBkaWZmIGRyaXZlciB3aGVuIGl0IGtuZXcgdGhhdCBpdAorICAgaXMgdGhlIHNhbWUgYXMgb25lIG9mIHRoZSB2ZXJzaW9ucyBiZWluZyBjb21wYXJlZC4KKyAgIChtZXJnZSBhYmE0NzI3IHRyL2RpZmYtc3VibW9kdWxlLW5vLXJldXNlLXdvcmt0cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXNldCIgbmVlZHMgdG8gcmVmcmVzaCB0aGUgaW5kZXggd2hlbiB3b3JraW5nIGluIGEgd29ya2luZworICAgdHJlZSAoaXQgY2FuIGFsc28gYmUgdXNlZCB0byBtYXRjaCB0aGUgaW5kZXggdG8gdGhlIEhFQUQgaW4gYW4KKyAgIG90aGVyd2lzZSBiYXJlIHJlcG9zaXRvcnkpLCBidXQgaXQgZmFpbGVkIHRvIHNldCB1cCB0aGUgd29ya2luZworICAgdHJlZSBwcm9wZXJseSwgY2F1c2luZyBHSVRfV09SS19UUkVFIHRvIGJlIGlnbm9yZWQuCisgICAobWVyZ2UgYjc3NTZkNCBuZC9yZXNldC1zZXR1cC13b3JrdHJlZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2hlY2stYXR0ciIgd2hlbiB3b3JraW5nIG9uIGEgcmVwb3NpdG9yeSB3aXRoIGEgd29ya2luZyB0cmVlCisgICBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIHRoZSB3b3JraW5nIHRyZWUgd2FzIHNwZWNpZmllZCB2aWEgdGhlCisgICAiLS13b3JrLXRyZWUiIChhbmQgb2J2aW91c2x5IHdpdGggIi0tZ2l0LWRpciIpIG9wdGlvbi4KKyAgIChtZXJnZSBjZGJmNjIzIGpjL2NoZWNrLWF0dHItaG9ub3Itd29ya2luZy10cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogIm1lcmdlLXJlY3Vyc2l2ZSIgd2FzIGJyb2tlbiBpbiAxLjcuNyBlcmEgYW5kIHN0b3BwZWQgd29ya2luZyBpbgorICAgYW4gZW1wdHkgKHRlbXBvcmFyeSkgd29ya2luZyB0cmVlLCB3aGVuIHRoZXJlIGFyZSByZW5hbWVzCisgICBpbnZvbHZlZC4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorICAgKG1lcmdlIDZlMjA2OGEgYmsvcmVmcmVzaC1taXNzaW5nLW9rLWluLW1lcmdlLXJlY3Vyc2l2ZSBsYXRlciB0byBtYWludC4pCisKKyAqICJnaXQgcmV2LXBhcnNlIiB3YXMgbG9vc2UgaW4gcmVqZWN0aW5nIGNvbW1hbmQtbGluZSBhcmd1bWVudHMKKyAgIHRoYXQgZG8gbm90IG1ha2Ugc2Vuc2UsIGUuZy4gIi0tZGVmYXVsdCIgd2l0aG91dCB0aGUgcmVxdWlyZWQKKyAgIHZhbHVlIGZvciB0aGF0IG9wdGlvbi4KKyAgIChtZXJnZSBhNDMyMTlmIGRzL3Jldi1wYXJzZS1yZXF1aXJlZC1hcmdzIGxhdGVyIHRvIG1haW50LikKKworICogImluY2x1ZGUucGF0aCIgdmFyaWFibGUgKG9yIGFueSB2YXJpYWJsZSB0aGF0IGV4cGVjdHMgYSBwYXRoIHRoYXQKKyAgIGNhbiB1c2UgfnVzZXJuYW1lIGV4cGFuc2lvbikgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBub3QgYQorICAgYm9vbGVhbiwgYnV0IHRoZSBjb2RlIGZhaWxlZCB0byBjaGVjayBpdC4KKyAgIChtZXJnZSA2N2JlYjYwIGprL2NvbmZpZy1wYXRoLWluY2x1ZGUtZml4IGxhdGVyIHRvIG1haW50LikKKworICogQ29tbWFuZHMgdGhhdCB0YWtlIHBhdGhzcGVjcyBvbiB0aGUgY29tbWFuZCBsaW5lIG1pc2JlaGF2ZWQgd2hlbgorICAgdGhlIHBhdGhzcGVjIGlzIGdpdmVuIGFzIGFuIGFic29sdXRlIHBhdGhuYW1lICh3aGljaCBpcyBhCisgICBwcmFjdGljZSBub3QgcGFydGljdWxhcmx5IGVuY291cmFnZWQpIHRoYXQgcG9pbnRzIGF0IGEgc3ltYm9saWMKKyAgIGxpbmsgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKyAgIChtZXJnZSA2MTI3ZmY2IG13L3N5bWxpbmtzIGxhdGVyIHRvIG1haW50LikKKworICogImdpdCBkaWZmIC0tcXVpZXQgLS0gcGF0aHNwZWMxIHBhdGhzcGVjMiIgc29tZXRpbWVzIGRpZCBub3QgcmV0dXJuCisgICB0aGUgY29ycmVjdCBzdGF0dXMgdmFsdWUuCisgICAobWVyZ2UgZjM0YjIwNSBuZC9kaWZmLXF1aWV0LXN0YXQtZGlydHkgbGF0ZXIgdG8gbWFpbnQuKQorCisgKiBBdHRlbXB0aW5nIHRvIGRlZXBlbiBhIHNoYWxsb3cgcmVwb3NpdG9yeSBieSBmZXRjaGluZyBvdmVyIHNtYXJ0CisgICBIVFRQIHRyYW5zcG9ydCBmYWlsZWQgaW4gdGhlIHByb3RvY29sIGV4Y2hhbmdlLCB3aGVuIHRoZSBuby1kb25lCisgICBleHRlbnNpb24gd2FzIHVzZWQuICBUaGUgZmV0Y2hpbmcgc2lkZSB3YWl0ZWQgZm9yIHRoZSBsaXN0IG9mCisgICBzaGFsbG93IGJvdW5kYXJ5IGNvbW1pdHMgYWZ0ZXIgdGhlIHNlbmRpbmcgc2lkZSBzdG9wcGVkIHRhbGtpbmcgdG8KKyAgIGl0LgorICAgKG1lcmdlIDAyMzI4NTIgbmQvaHR0cC1mZXRjaC1zaGFsbG93LWZpeCBsYXRlciB0byBtYWludC4pCisKKyAqIEFsbG93ICJnaXQgY21kIHBhdGgvIiwgd2hlbiB0aGUgJ3BhdGgnIGlzIHdoZXJlIGEgc3VibW9kdWxlIGlzCisgICBib3VuZCB0byB0aGUgdG9wLWxldmVsIHdvcmtpbmcgdHJlZSwgdG8gbWF0Y2ggJ3BhdGgnLCBkZXNwaXRlIHRoZQorICAgZXh0cmEgYW5kIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoIChzdWNoIGEgc2xhc2ggaXMgb2Z0ZW4KKyAgIGdpdmVuIGJ5IGNvbW1hbmQtbGluZSBjb21wbGV0aW9uKS4KKyAgIChtZXJnZSAyZTcwYzAxIG5kL3N1Ym1vZHVsZS1wYXRoc3BlYy1lbmRpbmctd2l0aC1zbGFzaCBsYXRlciB0byBtYWludC4pCisKKyAqIERvY3VtZW50YXRpb24gYW5kIGluLWNvZGUgY29tbWVudHMgaGFkIG1hbnkgaW5zdGFuY2VzIG9mIG1pc3Rha2VuCisgICB1c2Ugb2YgIm5vciIsIHdoaWNoIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisgICAobWVyZ2UgMjM1ZThkNSBqbC9ub3Itb3ItbmFuZC1hbmQgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTU1NzlkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMS50eHQKQEAgLTAsMCArMSwxMTUgQEAKK0dpdCB2Mi4wLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIFdlIHVzZWQgdG8gdW5jb25kaXRpb25hbGx5IGRpc2FibGUgdGhlIHBhZ2VyIGluIHRoZSBwYWdlciBwcm9jZXNzCisgICB3ZSBzcGF3biB0byBmZWVkIG91dCBvdXRwdXQsIGJ1dCB0aGF0IHByZXZlbnRlZCBwZW9wbGUgd2hvIHdhbnQgdG8KKyAgIHJ1biAibGVzcyIgd2l0aGluICJsZXNzIiBmcm9tIGRvaW5nIHNvLgorCisgKiBUb29scyB0aGF0IHJlYWQgZGlhZ25vc3RpYyBvdXRwdXQgaW4gb3VyIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBkbworICAgbm90IHdhbnQgdG8gc2VlIHRlcm1pbmFsIGNvbnRyb2wgc2VxdWVuY2UgKGUuZy4gZXJhc2UtdG8tZW9sKS4KKyAgIERldGVjdCB0aGVtIGJ5IGNoZWNraW5nIGlmIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0gaXMgY29ubmVjdGVkCisgICB0byBhIHR0eS4KKyAqIFJld29yZGVkIHRoZSBlcnJvciBtZXNzYWdlIGdpdmVuIHVwb24gYSBmYWlsdXJlIHRvIG9wZW4gYW4gZXhpc3RpbmcKKyAgIGxvb3NlIG9iamVjdCBmaWxlIGR1ZSB0byBlLmcuIHBlcm1pc3Npb24gaXNzdWVzOyBpdCB3YXMgcmVwb3J0ZWQgYXMKKyAgIHRoZSBvYmplY3QgYmVpbmcgY29ycnVwdCwgYnV0IHRoYXQgaXMgbm90IHF1aXRlIHRydWUuCisKKyAqICJnaXQgbG9nIC0ybWFzdGVyIiBpcyBhIGNvbW1vbiB0eXBvIHRoYXQgc2hvd3MgdHdvIGNvbW1pdHMgc3RhcnRpbmcKKyAgIGZyb20gd2hpY2hldmVyIHJhbmRvbSBicmFuY2ggdGhhdCBpcyBub3QgJ21hc3RlcicgdGhhdCBoYXBwZW5zIHRvCisgICBiZSBjaGVja2VkIG91dCBjdXJyZW50bHkuCisKKyAqIFRoZSAiJTwoMTAsdHJ1bmMpJXMiIHByZXR0eSBmb3JtYXQgc3BlY2lmaWVyIGluIHRoZSBsb2cgZmFtaWx5IG9mCisgICBjb21tYW5kcyBpcyB1c2VkIHRvIHRydW5jYXRlIHRoZSBzdHJpbmcgdG8gYSBnaXZlbiBsZW5ndGggKGUuZy4gMTAKKyAgIGluIHRoZSBleGFtcGxlKSB3aXRoIHBhZGRpbmcgdG8gY29sdW1uLWFsaWduIHRoZSBvdXRwdXQsIGJ1dCBkaWQKKyAgIG5vdCB0YWtlIGludG8gYWNjb3VudCB0aGF0IG51bWJlciBvZiBieXRlcyBhbmQgbnVtYmVyIG9mIGRpc3BsYXkKKyAgIGNvbHVtbnMgYXJlIGRpZmZlcmVudC4KKworICogVGhlICJtYWlsbWFwLmZpbGUiIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRpZCBub3Qgc3VwcG9ydCB0aGUgdGlsZGUKKyAgIGV4cGFuc2lvbiAoaS5lLiB+dXNlci9wYXRoIGFuZCB+L3BhdGgpLgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHRzIChpbiBjb250cmliLykgZGlkIG5vdCBrbm93IGFib3V0IHF1aXRlIGEgZmV3CisgICBvcHRpb25zIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuICJnaXQgbWVyZ2UiIGFuZCAiZ2l0IHB1bGwiLCBhbmQgYQorICAgY291cGxlIG9mIG9wdGlvbnMgdW5pcXVlIHRvICJnaXQgbWVyZ2UiLgorCisgKiAiLS1pZ25vcmUtc3BhY2UtY2hhbmdlIiBvcHRpb24gb2YgImdpdCBhcHBseSIgaWdub3JlZCB0aGUgc3BhY2VzCisgICBhdCB0aGUgYmVnaW5uaW5nIG9mIGxpbmUgdG9vIGFnZ3Jlc3NpdmVseSwgd2hpY2ggaXMgaW5jb25zaXN0ZW50CisgICB3aXRoIHRoZSBvcHRpb24gb2YgdGhlIHNhbWUgbmFtZSAiZGlmZiIgYW5kICJnaXQgZGlmZiIgaGF2ZS4KKworICogImdpdCBibGFtZSIgbWlzY291bnRlZCBudW1iZXIgb2YgY29sdW1ucyBuZWVkZWQgdG8gc2hvdyBsb2NhbGl6ZWQKKyAgIHRpbWVzdGFtcHMsIHJlc3VsdGluZyBpbiBqYWdneSBsZWZ0LXNpZGUtZWRnZSBvZiB0aGUgc291cmNlIGNvZGUKKyAgIGxpbmVzIGluIGl0cyBvdXRwdXQuCisKKyAqICJnaXQgYmxhbWUiIGFzc2lnbmVkIHRoZSBibGFtZSB0byB0aGUgY29weSBpbiB0aGUgd29ya2luZy10cmVlIGlmCisgICB0aGUgcmVwb3NpdG9yeSBpcyBzZXQgdG8gY29yZS5hdXRvY3JsZj1pbnB1dCBhbmQgdGhlIGZpbGUgdXNlZCBDUkxGCisgICBsaW5lIGVuZGluZ3MuCisKKyAqICJnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAtQyAkY29tbWl0IiBkaWQgbm90IHdvcmsgd2hlbiB0aGUKKyAgIGNvbW1pdCBkaWQgbm90IGhhdmUgYW55IGxvZyBtZXNzYWdlLgorCisgKiAiZ2l0IGRpZmYgLS1maW5kLWNvcGllcy1oYXJkZXIiIHNvbWV0aW1lcyBwcmV0ZW5kZWQgYXMgaWYgdGhlIG1vZGUKKyAgIGJpdHMgaGF2ZSBjaGFuZ2VkIGZvciBwYXRocyB0aGF0IGFyZSBtYXJrZWQgd2l0aCBhc3N1bWUtdW5jaGFuZ2VkCisgICBiaXQuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBkaWQgbm90IGVuZm9yY2UgdGhlIHJ1bGUgdGhhdCB0aGUgIi0tZm9sbG93IgorICAgb3B0aW9uIGZyb20gdGhlIGxvZy9kaWZmIGZhbWlseSBvZiBjb21tYW5kcyBtdXN0IGJlIHVzZWQgd2l0aAorICAgZXhhY3RseSBvbmUgcGF0aHNwZWMuCisKKyAqICJnaXQgZ2MgLS1hdXRvIiB3YXMgcmVjZW50bHkgY2hhbmdlZCB0byBydW4gaW4gdGhlIGJhY2tncm91bmQgdG8KKyAgIGdpdmUgY29udHJvbCBiYWNrIGVhcmx5IHRvIHRoZSBlbmQtdXNlciBzaXR0aW5nIGluIGZyb250IG9mIHRoZQorICAgdGVybWluYWwsIGJ1dCBpdCBmb3Jnb3QgdGhhdCBob3VzZWtlZXBpbmcgaW52b2x2aW5nIHJlZmxvZ3Mgc2hvdWxkCisgICBiZSBkb25lIHdpdGhvdXQgb3RoZXIgcHJvY2Vzc2VzIGNvbXBldGluZyBmb3IgYWNjZXNzZXMgdG8gdGhlIHJlZnMuCisKKyAqICJnaXQgZ3JlcCAtTyIgdG8gc2hvdyB0aGUgbGluZXMgdGhhdCBoaXQgaW4gdGhlIHBhZ2VyIGRpZCBub3Qgd29yaworICAgd2VsbCB3aXRoIGNhc2UgaW5zZW5zaXRpdmUgc2VhcmNoLiAgV2Ugbm93IHNwYXduICJsZXNzIiB3aXRoIGl0cworICAgIi1JIiBvcHRpb24gd2hlbiBpdCBpcyB1c2VkIGFzIHRoZSBwYWdlciAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLgorCisgKiBXZSB1c2VkIHRvIGRpc2FibGUgdGhyZWFkZWQgImdpdCBpbmRleC1wYWNrIiBvbiBwbGF0Zm9ybXMgd2l0aG91dAorICAgdGhyZWFkLXNhZmUgcHJlYWQoKTsgdXNlIGEgZGlmZmVyZW50IHdvcmthcm91bmQgZm9yIHN1Y2gKKyAgIHBsYXRmb3JtcyB0byBhbGxvdyB0aHJlYWRlZCAiZ2l0IGluZGV4LXBhY2siLgorCisgKiBUaGUgZXJyb3IgcmVwb3J0aW5nIGZyb20gImdpdCBpbmRleC1wYWNrIiBoYXMgYmVlbiBpbXByb3ZlZCB0bworICAgZGlzdGluZ3Vpc2ggbWlzc2luZyBvYmplY3RzIGZyb20gdHlwZSBlcnJvcnMuCisKKyAqICJnaXQgbWFpbGluZm8iIHVzZWQgdG8gcmVhZCBiZXlvbmQgdGhlIGVuZCBvZiBoZWFkZXIgc3RyaW5nIHdoaWxlCisgICBwYXJzaW5nIGFuIGluY29taW5nIGUtbWFpbCBtZXNzYWdlIHRvIGV4dHJhY3QgdGhlIHBhdGNoLgorCisgKiBPbiBhIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSwgbWVyZ2UtcmVjdXJzaXZlIGluY29ycmVjdGx5CisgICBkZWxldGVkIHRoZSBmaWxlIHRoYXQgaXMgdG8gYmUgcmVuYW1lZCB0byBhIG5hbWUgdGhhdCBpcyB0aGUgc2FtZQorICAgZXhjZXB0IGZvciBjYXNlIGRpZmZlcmVuY2VzLgorCisgKiAiZ2l0IHBhY2stb2JqZWN0cyIgdW5uZWNlc3NhcmlseSBjb3BpZWQgdGhlIHByZXZpb3VzIGNvbnRlbnRzIHdoZW4KKyAgIGV4dGVuZGluZyB0aGUgaGFzaHRhYmxlLCBldmVuIHRob3VnaCBpdCB3aWxsIHBvcHVsYXRlIHRoZSB0YWJsZQorICAgZnJvbSBzY3JhdGNoIGFueXdheS4KKworICogImdpdCByZXJlcmUgZm9yZ2V0IiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIG1lcmdlLmNvbmZsaWN0c3R5bGUKKyAgIHdhcyBzZXQgdG8gYSBub24tZGVmYXVsdCB2YWx1ZS4KKworICogImdpdCByZW1vdGUgcm0iIGFuZCAiZ2l0IHJlbW90ZSBwcnVuZSIgY2FuIGludm9sdmUgcmVtb3ZpbmcgbWFueQorICAgcmVmcyBhdCBvbmNlLCB3aGljaCBpcyBub3QgYSB2ZXJ5IGVmZmljaWVudCB0aGluZyB0byBkbyB3aGVuIHZlcnkKKyAgIG1hbnkgcmVmcyBleGlzdCBpbiB0aGUgcGFja2VkLXJlZnMgZmlsZS4KKworICogImdpdCBsb2cgLS1leGNsdWRlPTxnbG9iPiAtLWFsbCB8IGdpdCBzaG9ydGxvZyIgd29ya2VkIGFzIGV4cGVjdGVkLAorICAgYnV0ICJnaXQgc2hvcnRsb2cgLS1leGNsdWRlPTxnbG9iPiAtLWFsbCIsIHdoaWNoIGlzIHN1cHBvc2VkIHRvIGJlCisgICBpZGVudGljYWwgdG8gdGhlIGFib3ZlIHBpcGVsaW5lLCB3YXMgbm90IGFjY2VwdGVkIGF0IHRoZSBjb21tYW5kCisgICBsaW5lIGFyZ3VtZW50IHBhcnNlciBsZXZlbC4KKworICogVGhlIGF1dG9zdGFzaCBtb2RlIG9mICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IHJlc3RvcmUgdGhlIGRpcnR5CisgICB3b3JraW5nIHRyZWUgc3RhdGUgaWYgdGhlIHVzZXIgYWJvcnRlZCB0aGUgaW50ZXJhY3RpdmUgcmViYXNlIGJ5CisgICBlbXB0eWluZyB0aGUgaW5zbiBzaGVldC4KKworICogImdpdCBzaG93IC1zIiAoaS5lLiBzaG93IGxvZyBtZXNzYWdlIG9ubHkpIHVzZWQgdG8gaW5jb3JyZWN0bHkgZW1pdAorICAgYW4gZXh0cmEgYmxhbmsgbGluZSBhZnRlciBhIG1lcmdlIGNvbW1pdC4KKworICogImdpdCBzdGF0dXMiLCBldmVuIHRob3VnaCBpdCBpcyBhIHJlYWQtb25seSBvcGVyYXRpb24sIHRyaWVzIHRvCisgICB1cGRhdGUgdGhlIGluZGV4IHdpdGggcmVmcmVzaGVkIGxzdGF0KDIpIGluZm8gdG8gb3B0aW1pemUgZnV0dXJlCisgICBhY2Nlc3NlcyB0byB0aGUgd29ya2luZyB0cmVlIG9wcG9ydHVuaXN0aWNhbGx5LCBidXQgdGhpcyBjb3VsZAorICAgcmFjZSB3aXRoIGEgInJlYWQtd3JpdGUiIG9wZXJhdGlvbiB0aGF0IG1vZGlmeSB0aGUgaW5kZXggd2hpbGUgaXQKKyAgIGlzIHJ1bm5pbmcuICBEZXRlY3Qgc3VjaCBhIHJhY2UgYW5kIGF2b2lkIG92ZXJ3cml0aW5nIHRoZSBpbmRleC4KKworICogImdpdCBzdGF0dXMiIChhbmQgImdpdCBjb21taXQiKSBiZWhhdmVkIGFzIGlmIGNoYW5nZXMgaW4gYSBtb2RpZmllZAorICAgc3VibW9kdWxlIGFyZSBub3QgdGhlcmUgaWYgc3VibW9kdWxlLiouaWdub3JlIGNvbmZpZ3VyYXRpb24gaXMgc2V0LAorICAgd2hpY2ggd2FzIG1pc2xlYWRpbmcuICBUaGUgY29uZmlndXJhdGlvbiBpcyBvbmx5IHRvIHVuY2x1dHRlciBkaWZmCisgICBvdXRwdXQgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgZGV2ZWxvcG1lbnQsIGFuZCBzaG91bGQgbm90IHRvIGhpZGUKKyAgIGNoYW5nZXMgaW4gdGhlICJzdGF0dXMiIG91dHB1dCB0byBjYXVzZSB0aGUgdXNlcnMgZm9yZ2V0IHRvIGNvbW1pdAorICAgdGhlbS4KKworICogVGhlIG1vZGUgdG8gcnVuIHRlc3RzIHdpdGggSFRUUCBzZXJ2ZXIgdGVzdHMgZGlzYWJsZWQgd2FzIGJyb2tlbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU4MzIxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjIudHh0CkBAIC0wLDAgKzEsMzIgQEAKK0dpdCB2Mi4wLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIERvY3VtZW50YXRpb24gZm9yICJnaXQgc3VibW9kdWxlIHN5bmMiIGZvcmdvdCB0byBzYXkgdGhhdCB0aGUgc3ViY29tbWFuZAorICAgY2FuIHRha2UgdGhlICItLXJlY3Vyc2l2ZSIgb3B0aW9uLgorCisgKiBNaXNoYW5kbGluZyBvZiBwYXR0ZXJucyBpbiAuZ2l0aWdub3JlIHRoYXQgaGFzIHRyYWlsaW5nIFNQcyBxdW90ZWQKKyAgIHdpdGggYmFja3NsYXNoZXMgKGUuZy4gb25lcyB0aGF0IGVuZCB3aXRoICJcICIpIGhhdmUgYmVlbgorICAgY29ycmVjdGVkLgorCisgKiBSZWNlbnQgdXBkYXRlcyB0byAiZ2l0IHJlcGFjayIgc3RhcnRlZCB0byBkdXBsaWNhdGUgb2JqZWN0cyB0aGF0CisgICBhcmUgaW4gcGFja2ZpbGVzIG1hcmtlZCB3aXRoIC5rZWVwIGZsYWcgaW50byB0aGUgbmV3IHBhY2tmaWxlIGJ5CisgICBtaXN0YWtlLgorCisgKiAiZ2l0IGNsb25lIC1iIGJyZWZzL3RhZ3MvYmFyIiB3b3VsZCBoYXZlIG1pc3Rha2VubHkgdGhvdWdodCB3ZSB3ZXJlCisgICBmb2xsb3dpbmcgYSBzaW5nbGUgdGFnLCBldmVuIHRob3VnaCBpdCB3YXMgYSBuYW1lIG9mIHRoZSBicmFuY2gsCisgICBiZWNhdXNlIGl0IGluY29ycmVjdGx5IHVzZWQgc3Ryc3RyKCkuCisKKyAqICIlRyIgKG5vdGhpbmcgYWZ0ZXIgRykgaXMgYW4gaW52YWxpZCBwcmV0dHkgZm9ybWF0IHNwZWNpZmllciwgYnV0CisgICB0aGUgcGFyc2VyIGRpZCBub3Qgbm90aWNlIGl0IGFzIGdhcmJhZ2UuCisKKyAqIENvZGUgdG8gYXZvaWQgYWRkaW5nIHRoZSBzYW1lIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUgdHdpY2Ugd2FzCisgICBzdWJ0bHkgYnJva2VuIGZvciBhIGxvbmcgdGltZSwgYnV0IG5vYm9keSBzZWVtcyB0byBoYXZlIG5vdGljZWQuCisKKyAqIEEgaGFuZGZ1bCBvZiBjb2RlIHBhdGhzIGhhZCB0byByZWFkIHRoZSBjb21taXQgb2JqZWN0IG1vcmUgdGhhbgorICAgb25jZSB3aGVuIHNob3dpbmcgaGVhZGVyIGZpZWxkcyB0aGF0IGFyZSB1c3VhbGx5IG5vdCBwYXJzZWQuICBUaGUKKyAgIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21taXQKKyAgIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkIHRvIHJlZHVjZSB0aGUgbmVlZCBmb3IgdGhpcyBkb3VibGUtcmVhZGluZywKKyAgIGFuZCB0byBhbGxvdyB0aGUgY2FsbGVyIGZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LgorCisgKiBEdXJpbmcgImdpdCByZWJhc2UgLS1tZXJnZSIsIGEgY29uZmxpY3RlZCBwYXRjaCBjb3VsZCBub3QgYmUKKyAgIHNraXBwZWQgd2l0aCAiLS1za2lwIiBpZiB0aGUgbmV4dCBvbmUgYWxzbyBjb25mbGljdGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDQ3YjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuMy50eHQKQEAgLTAsMCArMSwxNyBAQAorR2l0IHYyLjAuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworICogQW4gYW5jaWVudCByZXdyaXRlIHBhc3NlZCBhIHdyb25nIHBvaW50ZXIgdG8gYSBjdXJsIGxpYnJhcnkKKyAgIGZ1bmN0aW9uIGluIGEgcmFyZWx5IHVzZWQgY29kZSBwYXRoLgorCisgKiAiZmlsdGVyLWJyYW5jaCIgbGVmdCBhbiBlbXB0eSBzaW5nbGUtcGFyZW50IGNvbW1pdCB0aGF0IHJlc3VsdHMgd2hlbgorICAgYWxsIHBhcmVudHMgb2YgYSBtZXJnZSBjb21taXQgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgY29tbWl0LCBldmVuCisgICB1bmRlciAiLS1wcnVuZS1lbXB0eSIuCisKKyAqICJsb2cgLS1zaG93LXNpZ25hdHVyZSIgaW5jb3JyZWN0bHkgZGVjaWRlZCB0aGUgY29sb3IgdG8gcGFpbnQgYQorICAgbWVyZ2V0YWcgdGhhdCB3YXMgYW5kIHdhcyBub3QgY29ycmVjdGx5IHZhbGlkYXRlZC4KKworICogImxvZyAtLXNob3ctc2lnbmF0dXJlIiBkaWQgbm90IHBheSBhdHRlbnRpb24gdG8gIi0tZ3JhcGgiIG9wdGlvbi4KKworQWxzbyBhIGxvdCBvZiBmaXhlcyB0byB0aGUgdGVzdHMgYW5kIHNvbWUgdXBkYXRlcyB0byB0aGUgZG9jcyBhcmUKK2luY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMC40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTM0MDkyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuNC50eHQKQEAgLTAsMCArMSw1IEBACitHaXQgdjIuMC40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCisgKiBBbiBlYXJsaWVyIHVwZGF0ZSB0byB2Mi4wLjIgYnJva2VuIG91dHB1dCBmcm9tICJnaXQgZGlmZi10cmVlIiwKKyAgIHdoaWNoIGlzIGZpeGVkIGluIHRoaXMgcmVsZWFzZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjUudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjAuNS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ExNmY2OQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4wLjUudHh0CkBAIC0wLDAgKzEsMzQgQEAKK0dpdCB2Mi4wLjUgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjAuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFdlIHVzZWQgdG8gYWxsb3cgY29tbWl0dGluZyBhIHBhdGggIi5HaXQvY29uZmlnIiB3aXRoIEdpdCB0aGF0IGlzCisgICBydW5uaW5nIG9uIGEgY2FzZSBzZW5zaXRpdmUgZmlsZXN5c3RlbSwgYnV0IGFuIGF0dGVtcHQgdG8gY2hlY2sgb3V0CisgICBzdWNoIGEgcGF0aCB3aXRoIEdpdCB0aGF0IHJ1bnMgb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0KKyAgIHdvdWxkIGhhdmUgY2xvYmJlcmVkICIuZ2l0L2NvbmZpZyIsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IHdoYXQKKyAgIHRoZSB1c2VyIHdvdWxkIGhhdmUgZXhwZWN0ZWQuICBHaXQgbm93IHByZXZlbnRzIHlvdSBmcm9tIHRyYWNraW5nCisgICBhIHBhdGggd2l0aCAiLkdpdCIgKGluIGFueSBjYXNlIGNvbWJpbmF0aW9uKSBhcyBhIHBhdGggY29tcG9uZW50LgorCisgKiBPbiBXaW5kb3dzLCBjZXJ0YWluIHBhdGggY29tcG9uZW50cyB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSAiLmdpdCIKKyAgIGFyZSBtYXBwZWQgdG8gIi5naXQiLCBlLmcuICJnaXR+MS9jb25maWciIGlzIHRyZWF0ZWQgYXMgaWYgaXQgd2VyZQorICAgIi5naXQvY29uZmlnIi4gIEhGUysgaGFzIGEgc2ltaWxhciBpc3N1ZSwgd2hlcmUgY2VydGFpbiB1bmljb2RlCisgICBjb2RlcG9pbnRzIGFyZSBpZ25vcmVkLCBlLmcuICIuZ1x1MjAwY2l0L2NvbmZpZyIgaXMgdHJlYXRlZCBhcyBpZgorICAgaXQgd2VyZSAiLmdpdC9jb25maWciLiAgUGF0aG5hbWVzIHdpdGggdGhlc2UgcG90ZW50aWFsIGlzc3VlcyBhcmUKKyAgIHJlamVjdGVkIG9uIHRoZSBhZmZlY3RlZCBzeXN0ZW1zLiAgR2l0IG9uIHN5c3RlbXMgdGhhdCBhcmUgbm90CisgICBhZmZlY3RlZCBieSB0aGlzIGlzc3VlIChlLmcuIExpbnV4KSBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHRvCisgICByZWplY3QgdGhlbSB0byBlbnN1cmUgY3Jvc3MgcGxhdGZvcm0gaW50ZXJvcGVyYWJpbGl0eSBvZiB0aGUgaG9zdGVkCisgICBwcm9qZWN0cy4KKworICogImdpdCBmc2NrIiBub3RpY2VzIGEgdHJlZSBvYmplY3QgdGhhdCByZWNvcmRzIHN1Y2ggYSBwYXRoIHRoYXQgY2FuCisgICBiZSBjb25mdXNlZCB3aXRoICIuZ2l0IiwgYW5kIHdpdGggcmVjZWl2ZS5mc2NrT2JqZWN0cyBjb25maWd1cmF0aW9uCisgICBzZXQgdG8gdHJ1ZSwgYW4gYXR0ZW1wdCB0byAiZ2l0IHB1c2giIHN1Y2ggYSB0cmVlIG9iamVjdCB3aWxsIGJlCisgICByZWplY3RlZC4gIFN1Y2ggYSBwYXRoIG1heSBub3QgYmUgYSBwcm9ibGVtIG9uIGEgd2VsbCBiZWhhdmluZworICAgZmlsZXN5c3RlbSBidXQgaW4gb3JkZXIgdG8gcHJvdGVjdCB0aG9zZSBvbiBIRlMrIGFuZCBvbiBjYXNlCisgICBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcywgdGhpcyBjaGVjayBpcyBlbmFibGVkIG9uIGFsbCBwbGF0Zm9ybXMuCisKK0EgYmlnICJ0aGFua3MhIiBmb3IgYnJpbmdpbmcgdGhpcyBpc3N1ZSB0byB1cyBnb2VzIHRvIG91ciBmcmllbmRzIGluCit0aGUgTWVyY3VyaWFsIGxhbmQsIG5hbWVseSwgTWF0dCBNYWNrYWxsIGFuZCBBdWdpZSBGYWNrbGVyLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTQ3NTM3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMC50eHQKQEAgLTAsMCArMSwzOTEgQEAKK0dpdCB2Mi4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT0KKworQmFja3dhcmQgY29tcGF0aWJpbGl0eSBub3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgZGVmYXVsdCB2YWx1ZSB3ZSBnaXZlIHRvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMRVNTIGhhcyBiZWVuCisgICBjaGFuZ2VkIGZyb20gIkZSU1giIHRvICJGUlgiLCBsb3NpbmcgIlMiIChjaG9wIGxvbmcgbGluZXMgaW5zdGVhZAorICAgb2Ygd3JhcHBpbmcpLiAgRXhpc3RpbmcgdXNlcnMgd2hvIHByZWZlciBub3QgdG8gc2VlIGxpbmUtd3JhcHBlZAorICAgb3V0cHV0IG1heSB3YW50IHRvIHNldAorCisgICAgICQgZ2l0IGNvbmZpZyBjb3JlLnBhZ2VyICJsZXNzIC1TIgorCisgICB0byByZXN0b3JlIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvdXIuICBJdCBpcyBleHBlY3RlZCB0aGF0IHBlb3BsZQorICAgZmluZCBvdXRwdXQgZnJvbSBtb3N0IHN1YmNvbW1hbmRzIGVhc2llciB0byByZWFkIHdpdGggdGhlIG5ldworICAgZGVmYXVsdCwgZXhjZXB0IGZvciAiYmxhbWUiIHdoaWNoIHRlbmRzIHRvIHByb2R1Y2UgcmVhbGx5IGxvbmcKKyAgIGxpbmVzLiAgVG8gb3ZlcnJpZGUgdGhlIG5ldyBkZWZhdWx0IG9ubHkgZm9yICJnaXQgYmxhbWUiLCB5b3UgY2FuCisgICBkbyB0aGlzOgorCisgICAgICQgZ2l0IGNvbmZpZyBwYWdlci5ibGFtZSAibGVzcyAtUyIKKworICogQSBmZXcgZGlzdXNlZCBkaXJlY3RvcmllcyBpbiBjb250cmliLyBoYXZlIGJlZW4gcmV0aXJlZC4KKworCitVcGRhdGVzIHNpbmNlIHYyLjAKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogU2luY2UgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIEdpdCwgd2UgZ2F2ZSB0aGUgTEVTUyBlbnZpcm9ubWVudCBhCisgICBkZWZhdWx0IHZhbHVlICJGUlNYIiB3aGVuIHdlIHNwYXduICJsZXNzIiBhcyB0aGUgcGFnZXIuICAiUyIgKGNob3AKKyAgIGxvbmcgbGluZXMgaW5zdGVhZCBvZiB3cmFwcGluZykgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoaXMgZGVmYXVsdAorICAgc2V0IG9mIG9wdGlvbnMsIGJlY2F1c2UgaXQgaXMgbW9yZSBvciBsZXNzIGEgcGVyc29uYWwgdGFzdGUgdGhpbmcsCisgICBhcyBvcHBvc2VkIHRvIHRoZSBvdGhlcnMgdGhhdCBoYXZlIGdvb2QganVzdGlmaWNhdGlvbnMgKGkuZS4gIlIiIGlzCisgICB2ZXJ5IG11Y2gganVzdGlmaWVkIGJlY2F1c2UgbWFueSBraW5kcyBvZiBvdXRwdXQgd2UgcHJvZHVjZSBhcmUKKyAgIGNvbG9yZWQgYW5kICJGWCIgaXMganVzdGlmaWVkIGJlY2F1c2Ugb3V0cHV0IHdlIHByb2R1Y2UgaXMgb2Z0ZW4KKyAgIHNob3J0ZXIgdGhhbiBhIHBhZ2UpLgorCisgKiBUaGUgbG9naWMgYW5kIGRhdGEgdXNlZCB0byBjb21wdXRlIHRoZSBkaXNwbGF5IHdpZHRoIG5lZWRlZCBmb3IKKyAgIFVURi04IHN0cmluZ3MgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gbWF0Y2ggVW5pY29kZSA3LjAgYmV0dGVyLgorCisgKiBIVFRQLWJhc2VkIHRyYW5zcG9ydHMgbGVhcm5lZCB0byBiZXR0ZXIgcHJvcGFnYXRlIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tCisgICB0aGUgd2Vic2VydmVyIHRvIHRoZSBjbGllbnQgY29taW5nIG92ZXIgdGhlIEhUVFAgdHJhbnNwb3J0LgorCisgKiBUaGUgY29tcGxldGlvbiBzY3JpcHQgZm9yIGJhc2ggKGluIGNvbnRyaWIvKSBoYXMgYmVlbiB1cGRhdGVkIHRvCisgICBiZXR0ZXIgaGFuZGxlIGFsaWFzZXMgdGhhdCBkZWZpbmUgYSBjb21wbGV4IHNlcXVlbmNlIG9mIGNvbW1hbmRzLgorCisgKiBUaGUgImNvcmUucHJlbG9hZGluZGV4IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwKKyAgIGFsbG93aW5nIG1vZGVybiBwbGF0Zm9ybXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlaXIKKyAgIG11bHRpcGxlIGNvcmVzLgorCisgKiAiZ2l0IGNsb25lIiBhcHBsaWVzIHRoZSAiaWYgY2xvbmluZyBmcm9tIGEgbG9jYWwgZGlzaywgcGh5c2ljYWxseQorICAgY29weSB0aGUgcmVwb3NpdG9yeSB1c2luZyBoYXJkbGlua3MsIHVubGVzcyBvdGhlcndpc2UgdG9sZCBub3QgdG8gd2l0aAorICAgLS1uby1sb2NhbCIgb3B0aW1pemF0aW9uIHdoZW4gdGhlIHVybC4qLmluc3RlYWRPZiBtZWNoYW5pc20gcmV3cml0ZXMgYQorICAgcmVtb3RlLXJlcG9zaXRvcnkgImdpdCBjbG9uZSAkVVJMIiBpbnRvIGEKKyAgIGNsb25lIGZyb20gYSBsb2NhbCBkaXNrLgorCisgKiAiZ2l0IGNvbW1pdCAtLWRhdGU9PGRhdGU+IiBvcHRpb24gbGVhcm5lZCBtb3JlCisgICB0aW1lc3RhbXAgZm9ybWF0cywgaW5jbHVkaW5nICItLWRhdGU9bm93Ii4KKworICogVGhlIGBjb3JlLmNvbW1lbnRDaGFyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHVzZWQgdG8gc3BlY2lmeSBhCisgICBjdXN0b20gY29tbWVudCBjaGFyYWN0ZXIgKG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgIiMiKSBmb3IKKyAgIHRoZSBjb21taXQgbWVzc2FnZSBlZGl0b3IuICBUaGlzIGNhbiBiZSBzZXQgdG8gYGF1dG9gIHRvIGF0dGVtcHQgdG8KKyAgIGNob29zZSBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgdGhhdCBkb2VzIG5vdCBjb25mbGljdCB3aXRoIGFueSB0aGF0CisgICBhbHJlYWR5IHN0YXJ0cyBhIGxpbmUgaW4gdGhlIG1lc3NhZ2UgYmVpbmcgZWRpdGVkLCBmb3IgY2FzZXMgbGlrZQorICAgImdpdCBjb21taXQgLS1hbWVuZCIuCisKKyAqICJnaXQgZm9ybWF0LXBhdGNoIiBsZWFybmVkIC0tc2lnbmF0dXJlLWZpbGU9PGZpbGU+IHRvIGFkZCB0aGUgY29udGVudHMKKyAgIG9mIGEgZmlsZSBhcyBhIHNpZ25hdHVyZSB0byB0aGUgbWFpbCBtZXNzYWdlIGl0IHByb2R1Y2VzLgorCisgKiAiZ2l0IGdyZXAiIGxlYXJuZWQgdGhlIGdyZXAuZnVsbG5hbWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBmb3JjZQorICAgIi0tZnVsbC1uYW1lIiB0byBiZSB0aGUgZGVmYXVsdC4gIFRoaXMgbWF5IGNhdXNlIHJlZ3Jlc3Npb25zIGZvcgorICAgc2NyaXB0ZWQgdXNlcnMgd2hvIGRvIG5vdCBleHBlY3QgdGhpcyBuZXcgYmVoYXZpb3VyLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgbGVhcm5lZCB0byBhc2sgdGhlIGNyZWRlbnRpYWwgaGVscGVyIGZvciBhdXRoCisgICBtYXRlcmlhbC4KKworICogImdpdCBsb2ciIGFuZCBmcmllbmRzIG5vdyB1bmRlcnN0YW5kIHRoZSB2YWx1ZSAiYXV0byIgZm9yIHRoZQorICAgImxvZy5kZWNvcmF0ZSIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byBlbmFibGUgdGhlICItLWRlY29yYXRlIgorICAgb3B0aW9uIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgb3V0cHV0IGlzIHNlbnQgdG8gdHR5LgorCisgKiAiZ2l0IG1lcmdlIiB3aXRob3V0IGFuIGFyZ3VtZW50LCBldmVuIHdoZW4gdGhlcmUgaXMgYW4gdXBzdHJlYW0KKyAgIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCwgcmVmdXNlZCB0byBydW4gdW50aWwKKyAgIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIGlzIHNldCB0byB0cnVlLiAgRmxpcCB0aGUgZGVmYXVsdCBvZiB0aGF0CisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIHRydWUuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIHRvIGRyaXZlIHRoZSB2aW1kaWZmMyBiYWNrZW5kLgorCisgKiBtZXJnZXRvb2wucHJvbXB0IHVzZWQgdG8gZGVmYXVsdCB0byAndHJ1ZScsIGFsd2F5cyBhc2tpbmcgImRvIHlvdQorICAgcmVhbGx5IHdhbnQgdG8gcnVuIHRoZSB0b29sIG9uIHRoaXMgcGF0aD8iLiAgVGhlIGRlZmF1bHQgaGFzIGJlZW4KKyAgIGNoYW5nZWQgdG8gJ2ZhbHNlJy4gIEhvd2V2ZXIsIHRoZSBwcm9tcHQgd2lsbCBzdGlsbCBhcHBlYXIgaWYKKyAgIG1lcmdldG9vbCB1c2VkIGl0cyBhdXRvZGV0ZWN0aW9uIHN5c3RlbSB0byBndWVzcyB3aGljaCB0b29sIHRvIHVzZS4KKyAgIFVzZXJzIHdobyBleHBsaWNpdGx5IHNwZWNpZnkgb3IgY29uZmlndXJlIGEgdG9vbCB3aWxsIG5vIGxvbmdlciBzZWUKKyAgIHRoZSBwcm9tcHQgYnkgZGVmYXVsdC4KKworICAgU3RyaWN0bHkgc3BlYWtpbmcsIHRoaXMgaXMgYSBiYWNrd2FyZCBpbmNvbXBhdGlibGUgY2hhbmdlIGFuZAorICAgdXNlcnMgbmVlZCB0byBleHBsaWNpdGx5IHNldCB0aGUgdmFyaWFibGUgdG8gJ3RydWUnIGlmIHRoZXkgd2FudAorICAgdG8gYmUgcHJvbXB0ZWQgdG8gY29uZmlybSBydW5uaW5nIHRoZSB0b29sIG9uIGVhY2ggcGF0aC4KKworICogImdpdCByZXBsYWNlIiBsZWFybmVkIHRoZSAiLS1lZGl0IiBzdWJjb21tYW5kIHRvIGNyZWF0ZSBhCisgICByZXBsYWNlbWVudCBieSBlZGl0aW5nIGFuIGV4aXN0aW5nIG9iamVjdC4KKworICogImdpdCByZXBsYWNlIiBsZWFybmVkIGEgIi0tZ3JhZnQiIG9wdGlvbiB0byByZXdyaXRlIHRoZSBwYXJlbnRzIG9mIGEKKyAgIGNvbW1pdC4KKworICogImdpdCBzZW5kLWVtYWlsIiBsZWFybmVkICItLXRvLWNvdmVyIiBhbmQgIi0tY2MtY292ZXIiIG9wdGlvbnMsIHRvCisgICB0ZWxsIGl0IHRvIGNvcHkgVG86IGFuZCBDYzogaGVhZGVycyBmb3VuZCBpbiB0aGUgZmlyc3QgaW5wdXQgZmlsZQorICAgd2hlbiBlbWl0dGluZyBsYXRlciBpbnB1dCBmaWxlcy4KKworICogImdpdCBzdm4iIGxlYXJuZWQgdG8gY29wZSB3aXRoIG1hbGZvcm1lZCB0aW1lc3RhbXBzIHdpdGggb25seSBvbmUKKyAgIGRpZ2l0IGluIHRoZSBob3VyIHBhcnQsIGUuZy4gMjAxNC0wMS0wN1Q1OjAxOjAyLjA0ODE3NlosIGVtaXR0ZWQKKyAgIGJ5IHNvbWUgYnJva2VuIHN1YnZlcnNpb24gc2VydmVyIGltcGxlbWVudGF0aW9ucy4KKworICogImdpdCB0YWciIHdoZW4gZWRpdGluZyB0aGUgdGFnIG1lc3NhZ2Ugc2hvd3MgdGhlIG5hbWUgb2YgdGhlIHRhZworICAgYmVpbmcgZWRpdGVkIGFzIGEgY29tbWVudCBpbiB0aGUgZWRpdG9yLgorCisgKiAiZ2l0IHRhZyIgbGVhcm5lZCB0byBwYXkgYXR0ZW50aW9uIHRvICJ0YWcuc29ydCIgY29uZmlndXJhdGlvbiwgdG8KKyAgIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgc29ydCBvcmRlciB3aGVuIG5vIC0tc29ydD08dmFsdWU+IG9wdGlvbgorICAgaXMgZ2l2ZW4uCisKKyAqIEEgbmV3ICJnaXQgdmVyaWZ5LWNvbW1pdCIgY29tbWFuZCwgdG8gY2hlY2sgR1BHIHNpZ25hdHVyZXMgaW4gc2lnbmVkCisgICBjb21taXRzLCBpbiBhIHdheSBzaW1pbGFyIHRvICJnaXQgdmVyaWZ5LXRhZyIgaXMgdXNlZCB0byBjaGVjaworICAgc2lnbmVkIHRhZ3MsIHdhcyBhZGRlZC4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIGV0Yy4KKworICogQnVpbGQgcHJvY2VkdXJlIGZvciAnc3VidHJlZScgKGluIGNvbnRyaWIvKSBoYXMgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBTdXBwb3J0IGZvciB0aGUgcHJvZmlsZS1mZWVkYmFjayBidWlsZCwgd2hpY2ggaGFzCisgICBiaXQtcm90dGVkIGZvciBxdWl0ZSBhIHdoaWxlLCBoYXMgYmVlbiB1cGRhdGVkLgorCisgKiBBbiBleHBlcmltZW50YWwgZm9ybWF0IHRvIHVzZSB0d28gZmlsZXMgKHRoZSBiYXNlIGZpbGUgYW5kCisgICBpbmNyZW1lbnRhbCBjaGFuZ2VzIHJlbGF0aXZlIHRvIGl0KSB0byByZXByZXNlbnQgdGhlIGluZGV4IGhhcyBiZWVuCisgICBpbnRyb2R1Y2VkOyB0aGlzIG1heSByZWR1Y2UgSS9PIGNvc3Qgb2YgcmV3cml0aW5nIGEgbGFyZ2UgaW5kZXgKKyAgIHdoZW4gb25seSBzbWFsbCBwYXJ0IG9mIHRoZSB3b3JraW5nIHRyZWUgY2hhbmdlcy4KKworICogRWZmb3J0IHRvIHNocmluayB0aGUgc2l6ZSBvZiBwYXRjaGVzIFdpbmRvd3MgZm9sa3MgbWFpbnRhaW4gb24gdG9wCisgICBieSB1cHN0cmVhbWluZyB0aGVtIGNvbnRpbnVlcy4gIE1vcmUgdGVzdHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUKKyAgIHRvIHRoZSBXaW5kb3dzIGVudmlyb25tZW50IGFyZSBpZGVudGlmaWVkIGFuZCBlaXRoZXIgc2tpcHBlZCBvcgorICAgbWFkZSBtb3JlIHBvcnRhYmxlLgorCisgKiBFcmFkaWNhdGlvbiBvZiAidGVzdCAkY29uZGl0aW9uIC1hICRjb25kaXRpb24iIGZyb20gb3VyIHNjcmlwdHMKKyAgIGNvbnRpbnVlcy4KKworICogVGhlIGBjb3JlLmRlbHRhYmFzZWNhY2hlbGltaXRgIHVzZWQgdG8gZGVmYXVsdCB0byAxNiBNaUIgLCBidXQgdGhpcworICAgcHJvdmVkIHRvIGJlIHRvbyBzbWFsbCwgYW5kIGhhcyBiZWVuIGJ1bXBlZCB0byA5NiBNaUIuCisKKyAqICJnaXQgYmxhbWUiIGhhcyBiZWVuIG9wdGltaXplZCBncmVhdGx5IGJ5IHJlb3JnYW5pc2luZyB0aGUgZGF0YQorICAgc3RydWN0dXJlIHRoYXQgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSB3b3JrIHRvIGJlIGRvbmUuCisKKyAqICJnaXQgZGlmZiIgdGhhdCBjb21wYXJlcyAzLW9yLW1vcmUgdHJlZXMgKGUuZy4gcGFyZW50cyBhbmQgdGhlCisgICByZXN1bHQgb2YgYSBtZXJnZSkgaGFzIGJlZW4gb3B0aW1pemVkLgorCisgKiBUaGUgQVBJIHRvIHVwZGF0ZS9kZWxldGUgcmVmZXJlbmNlcyBhcmUgYmVpbmcgY29udmVydGVkIHRvIGhhbmRsZQorICAgdXBkYXRlcyB0byBtdWx0aXBsZSByZWZlcmVuY2VzIGluIGEgdHJhbnNhY3Rpb25hbCB3YXkuICBBcyBhbgorICAgZXhhbXBsZSwgInVwZGF0ZS1yZWYgLS1zdGRpbiBbLXpdIiBoYXMgYmVlbiB1cGRhdGVkIHRvIHVzZSB0aGlzCisgICBBUEkuCisKKyAqIHNraXBfcHJlZml4KCkgYW5kIHN0cmlwX3N1ZmZpeCgpIEFQSSBmdW5jdGlvbnMgYXJlIHVzZWQgYSBsb3QgbW9yZQorICAgd2lkZWx5IHRocm91Z2hvdXQgdGhlIGNvZGViYXNlIG5vdy4KKworICogUGFydHMgb2YgdGhlIHRlc3Qgc2NyaXB0cyBjYW4gYmUgc2tpcHBlZCBieSB1c2luZyBhIHJhbmdlIG5vdGF0aW9uLAorICAgZS5nLiAic2ggdDEyMzQtdGVzdC5zaCAtLXJ1bj0nMS00IDYgOC0nIiB0byBvbWl0IHRlc3QgcGllY2UgNSBhbmQgNworICAgYW5kIHJ1biBldmVyeXRoaW5nIGVsc2UuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuMAorLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjAgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogV2UgdXNlZCB0byB1bmNvbmRpdGlvbmFsbHkgZGlzYWJsZSB0aGUgcGFnZXIgaW4gdGhlIHBhZ2VyIHByb2Nlc3MKKyAgIHdlIHNwYXduIHRvIGZlZWQgb3V0IG91dHB1dCwgYnV0IHRoYXQgcHJldmVudGVkIHBlb3BsZSB3aG8gd2FudCB0bworICAgcnVuICJsZXNzIiB3aXRoaW4gImxlc3MiIGZyb20gZG9pbmcgc28uCisgICAobWVyZ2UgYzA0NTljYSBqZS9wYWdlci1kby1ub3QtcmVjdXJzZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRvb2xzIHRoYXQgcmVhZCBkaWFnbm9zdGljIG91dHB1dCBpbiBvdXIgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGRvCisgICBub3Qgd2FudCB0byBzZWUgdGVybWluYWwgY29udHJvbCBzZXF1ZW5jZSAoZS5nLiBlcmFzZS10by1lb2wpLgorICAgRGV0ZWN0IHRoZW0gYnkgY2hlY2tpbmcgaWYgdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBjb25uZWN0ZWQKKyAgIHRvIGEgdHR5LgorICAgKG1lcmdlIDM4ZGUxNTYgbW4vc2lkZWJhbmQtbm8tYW5zaSBsYXRlciB0byBtYWludCkuCisKKyAqIE1pc2hhbmRsaW5nIG9mIHBhdHRlcm5zIGluIC5naXRpZ25vcmUgdGhhdCBoYXZlIHRyYWlsaW5nIFNQcyBxdW90ZWQKKyAgIHdpdGggYmFja3NsYXNoZXMgKGUuZy4gb25lcyB0aGF0IGVuZCB3aXRoICJcICIpIGhhcyBiZWVuCisgICBjb3JyZWN0ZWQuCisgICAobWVyZ2UgOTdjMTM2NGJlNmIgcGIvdHJpbS10cmFpbGluZy1zcGFjZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZXdvcmRlZCB0aGUgZXJyb3IgbWVzc2FnZSBnaXZlbiB1cG9uIGEgZmFpbHVyZSB0byBvcGVuIGFuIGV4aXN0aW5nCisgICBsb29zZSBvYmplY3QgZmlsZSBkdWUgdG8gZS5nLiBwZXJtaXNzaW9uIGlzc3VlczsgaXQgd2FzIHJlcG9ydGVkIGFzCisgICB0aGUgb2JqZWN0IGJlaW5nIGNvcnJ1cHQsIGJ1dCB0aGF0IGlzIG5vdCBxdWl0ZSB0cnVlLgorICAgKG1lcmdlIGQ2YzhhMDUgamsvcmVwb3J0LWZhaWwtdG8tcmVhZC1vYmplY3RzLWJldHRlciBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC0ybWFzdGVyIiBpcyBhIGNvbW1vbiB0eXBvIHRoYXQgc2hvd3MgdHdvIGNvbW1pdHMgc3RhcnRpbmcKKyAgIGZyb20gd2hpY2hldmVyIHJhbmRvbSBicmFuY2ggdGhhdCBpcyBub3QgJ21hc3RlcicgdGhhdCBoYXBwZW5zIHRvCisgICBiZSBjaGVja2VkIG91dCBjdXJyZW50bHkuCisgICAobWVyZ2UgZTNmYTU2OCBqYy9yZXZpc2lvbi1kYXNoLWNvdW50LXBhcnNpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIHRvIGF2b2lkIGFkZGluZyB0aGUgc2FtZSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIHR3aWNlIHdhcworICAgc3VidGx5IGJyb2tlbiBmb3IgYSBsb25nIHRpbWUsIGJ1dCBub2JvZHkgc2VlbXMgdG8gaGF2ZSBub3RpY2VkLgorICAgKG1lcmdlIDgwYjQ3ODUgcnMvZml4LWFsdC1vZGItcGF0aC1jb21wYXJpc29uIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1MzllNzUwIGVrL2FsdC1vZGItZW50cnktZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICIlPCgxMCx0cnVuYyklcyIgcHJldHR5IGZvcm1hdCBzcGVjaWZpZXIgaW4gdGhlIGxvZyBmYW1pbHkgb2YKKyAgIGNvbW1hbmRzIGlzIHVzZWQgdG8gdHJ1bmNhdGUgdGhlIHN0cmluZyB0byBhIGdpdmVuIGxlbmd0aCAoZS5nLiAxMAorICAgaW4gdGhlIGV4YW1wbGUpIHdpdGggcGFkZGluZyB0byBjb2x1bW4tYWxpZ24gdGhlIG91dHB1dCwgYnV0IGRpZAorICAgbm90IHRha2UgaW50byBhY2NvdW50IHRoYXQgbnVtYmVyIG9mIGJ5dGVzIGFuZCBudW1iZXIgb2YgZGlzcGxheQorICAgY29sdW1ucyBhcmUgZGlmZmVyZW50LgorICAgKG1lcmdlIDdkNTA5ODcgYXMvcHJldHR5LXRydW5jYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogIiVHIiAobm90aGluZyBhZnRlciBHKSBpcyBhbiBpbnZhbGlkIHByZXR0eSBmb3JtYXQgc3BlY2lmaWVyLCBidXQKKyAgIHRoZSBwYXJzZXIgZGlkIG5vdCBub3RpY2UgaXQgYXMgZ2FyYmFnZS4KKyAgIChtZXJnZSA5NThiMmViIGprL3ByZXR0eS1HLWZvcm1hdC1maXhlcyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgaGFuZGZ1bCBvZiBjb2RlIHBhdGhzIGhhZCB0byByZWFkIHRoZSBjb21taXQgb2JqZWN0IG1vcmUgdGhhbgorICAgb25jZSB3aGVuIHNob3dpbmcgaGVhZGVyIGZpZWxkcyB0aGF0IGFyZSB1c3VhbGx5IG5vdCBwYXJzZWQuICBUaGUKKyAgIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21taXQKKyAgIG9iamVjdCBoYXMgYmVlbiB1cGRhdGVkIHRvIHJlZHVjZSB0aGUgbmVlZCBmb3IgdGhpcyBkb3VibGUtcmVhZGluZywKKyAgIGFuZCB0byBhbGxvdyB0aGUgY2FsbGVyIGZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LgorICAgKG1lcmdlIDIxOGFhM2EgamsvY29tbWl0LWJ1ZmZlci1sZW5ndGggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgIm1haWxtYXAuZmlsZSIgY29uZmlndXJhdGlvbiBvcHRpb24gZGlkIG5vdCBzdXBwb3J0IHRpbGRlCisgICBleHBhbnNpb24gKGkuZS4gfnVzZXIvcGF0aCBhbmQgfi9wYXRoKS4KKyAgIChtZXJnZSA5MzUyZmQ1IG93L2NvbmZpZy1tYWlsbWFwLXBhdGhuYW1lIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0cyAoaW4gY29udHJpYi8pIGRpZCBub3Qga25vdyBhYm91dCBxdWl0ZSBhIGZldworICAgb3B0aW9ucyB0aGF0IGFyZSBjb21tb24gYmV0d2VlbiAiZ2l0IG1lcmdlIiBhbmQgImdpdCBwdWxsIiwgYW5kIGEKKyAgIGNvdXBsZSBvZiBvcHRpb25zIHVuaXF1ZSB0byAiZ2l0IG1lcmdlIi4KKyAgIChtZXJnZSA4ZmVlODcyIGprL2NvbXBsZXRlLW1lcmdlLXB1bGwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdW5peC1kb21haW4gc29ja2V0IHVzZWQgYnkgdGhlIHNhbXBsZSBjcmVkZW50aWFsIGNhY2hlIGRhZW1vbgorICAgdHJpZWQgdG8gdW5saW5rIGFuIGV4aXN0aW5nIHN0YWxlIG9uZSBhdCBhIHdyb25nIHBhdGgsIGlmIHRoZSBwYXRoCisgICB0byB0aGUgc29ja2V0IHdhcyBnaXZlbiBhcyBhbiBvdmVybG9uZyBwYXRoIHRoYXQgZG9lcyBub3QgZml0IGluCisgICB0aGUgc3VuX3BhdGggbWVtYmVyIG9mIHRoZSBzb2NrYWRkcl91biBzdHJ1Y3R1cmUuCisgICAobWVyZ2UgMjg2OWIzZSBycy9maXgtdW5saW5rLXVuaXgtc29ja2V0IGxhdGVyIHRvIG1haW50KS4KKworICogQW4gYW5jaWVudCByZXdyaXRlIHBhc3NlZCBhIHdyb25nIHBvaW50ZXIgdG8gYSBjdXJsIGxpYnJhcnkKKyAgIGZ1bmN0aW9uIGluIGEgcmFyZWx5IHVzZWQgY29kZSBwYXRoLgorICAgKG1lcmdlIDQ3OWVhYTggYWgvZml4LWh0dHAtcHVzaCBsYXRlciB0byBtYWludCkuCisKKyAqICItLWlnbm9yZS1zcGFjZS1jaGFuZ2UiIG9wdGlvbiBvZiAiZ2l0IGFwcGx5IiBpZ25vcmVkIHRoZSBzcGFjZXMKKyAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgbGluZXMgdG9vIGFnZ3Jlc3NpdmVseSwgd2hpY2ggaXMgaW5jb25zaXN0ZW50CisgICB3aXRoIHRoZSBvcHRpb24gb2YgdGhlIHNhbWUgbmFtZSB0aGF0ICJkaWZmIiBhbmQgImdpdCBkaWZmIiBoYXZlLgorICAgKG1lcmdlIDE0ZDNiYjQgamMvYXBwbHktaWdub3JlLXdoaXRlc3BhY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJsYW1lIiBtaXNjb3VudGVkIHRoZSBudW1iZXIgb2YgY29sdW1ucyBuZWVkZWQgdG8gc2hvdyBsb2NhbGl6ZWQKKyAgIHRpbWVzdGFtcHMsIHJlc3VsdGluZyBpbiBhIGphZ2d5IGxlZnQtc2lkZS1lZGdlIGZvciB0aGUgc291cmNlIGNvZGUKKyAgIGxpbmVzIGluIGl0cyBvdXRwdXQuCisgICAobWVyZ2UgZGQ3NTU1MyBqeC9ibGFtZS1hbGlnbi1yZWxhdGl2ZS10aW1lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBibGFtZSIgYXNzaWduZWQgdGhlIGJsYW1lIHRvIHRoZSBjb3B5IGluIHRoZSB3b3JraW5nLXRyZWUgaWYKKyAgIHRoZSByZXBvc2l0b3J5IGlzIHNldCB0byBjb3JlLmF1dG9jcmxmPWlucHV0IGFuZCB0aGUgZmlsZSB1c2VkIENSTEYKKyAgIGxpbmUgZW5kaW5ncy4KKyAgIChtZXJnZSA0ZDQ4MTNhIGJjL2JsYW1lLWNybGYtdGVzdCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2xvbmUgLWIgYnJlZnMvdGFncy9iYXIiIHdvdWxkIGhhdmUgbWlzdGFrZW5seSB0aG91Z2h0IHdlIHdlcmUKKyAgIGZvbGxvd2luZyBhIHNpbmdsZSB0YWcsIGV2ZW4gdGhvdWdoIGl0IHdhcyBhIG5hbWUgb2YgdGhlIGJyYW5jaCwKKyAgIGJlY2F1c2UgaXQgaW5jb3JyZWN0bHkgdXNlZCBzdHJzdHIoKS4KKyAgIChtZXJnZSA2MGE1ZjVmIGpjL2ZpeC1jbG9uZS1zaW5nbGUtc3RhcnRpbmctYXQtYS10YWcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLUMgJGNvbW1pdCIgZGlkIG5vdCB3b3JrIHdoZW4gdGhlCisgICBjb21taXQgZGlkIG5vdCBoYXZlIGFueSBsb2cgbWVzc2FnZS4KKyAgIChtZXJnZSAwNzZjYmQ2IGprL2NvbW1pdC1DLXBpY2stZW1wdHkgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRpZmYgLS1maW5kLWNvcGllcy1oYXJkZXIiIHNvbWV0aW1lcyBwcmV0ZW5kZWQgYXMgaWYgdGhlIG1vZGUKKyAgIGJpdHMgaGF2ZSBjaGFuZ2VkIGZvciBwYXRocyB0aGF0IGFyZSBtYXJrZWQgd2l0aCB0aGUgYXNzdW1lLXVuY2hhbmdlZAorICAgYml0LgorICAgKG1lcmdlIDUzMDQ4MTAgamsvZGlmZi1maWxlcy1hc3N1bWUtdW5jaGFuZ2VkIGxhdGVyIHRvIG1haW50KS4KKworICogImZpbHRlci1icmFuY2giIGxlZnQgYW4gZW1wdHkgc2luZ2xlLXBhcmVudCBjb21taXQgdGhhdCByZXN1bHRzIHdoZW4KKyAgIGFsbCBwYXJlbnRzIG9mIGEgbWVyZ2UgY29tbWl0IGdldCBtYXBwZWQgdG8gdGhlIHNhbWUgY29tbWl0LCBldmVuCisgICB1bmRlciAiLS1wcnVuZS1lbXB0eSIuCisgICAobWVyZ2UgNzliYzRlZiBjYi9maWx0ZXItYnJhbmNoLXBydW5lLWVtcHR5LWRlZ2VuZXJhdGUtbWVyZ2VzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmb3JtYXQtcGF0Y2giIGRpZCBub3QgZW5mb3JjZSB0aGUgcnVsZSB0aGF0IHRoZSAiLS1mb2xsb3ciCisgICBvcHRpb24gZnJvbSB0aGUgbG9nL2RpZmYgZmFtaWx5IG9mIGNvbW1hbmRzIG11c3QgYmUgdXNlZCB3aXRoCisgICBleGFjdGx5IG9uZSBwYXRoc3BlYy4KKyAgIChtZXJnZSBkZDYzZjE2IGprL2RpZmYtZm9sbG93LW11c3QtdGFrZS1vbmUtcGF0aHNwZWMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGdjIC0tYXV0byIgd2FzIHJlY2VudGx5IGNoYW5nZWQgdG8gcnVuIGluIHRoZSBiYWNrZ3JvdW5kIHRvCisgICBnaXZlIGNvbnRyb2wgYmFjayBlYXJseSB0byB0aGUgZW5kLXVzZXIgc2l0dGluZyBpbiBmcm9udCBvZiB0aGUKKyAgIHRlcm1pbmFsLCBidXQgaXQgZm9yZ290IHRoYXQgaG91c2VrZWVwaW5nIGludm9sdmluZyByZWZsb2dzIHNob3VsZAorICAgYmUgZG9uZSB3aXRob3V0IG90aGVyIHByb2Nlc3NlcyBjb21wZXRpbmcgZm9yIGFjY2Vzc2VzIHRvIHRoZSByZWZzLgorICAgKG1lcmdlIDYyYWFkMTggbmQvZGFlbW9uaXplLWdjIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBncmVwIC1PIiB0byBzaG93IHRoZSBsaW5lcyB0aGF0IGhpdCBpbiB0aGUgcGFnZXIgZGlkIG5vdCB3b3JrCisgICB3ZWxsIHdpdGggY2FzZSBpbnNlbnNpdGl2ZSBzZWFyY2guICBXZSBub3cgc3Bhd24gImxlc3MiIHdpdGggaXRzCisgICAiLUkiIG9wdGlvbiB3aGVuIGl0IGlzIHVzZWQgYXMgdGhlIHBhZ2VyICh3aGljaCBpcyB0aGUgZGVmYXVsdCkuCisgICAobWVyZ2UgZjdmZWJiZSBzay9zcGF3bi1sZXNzLWNhc2UtaW5zZW5zaXRpdmVseS1mcm9tLWdyZXAtTy1pIGxhdGVyIHRvIG1haW50KS4KKworICogV2UgdXNlZCB0byBkaXNhYmxlIHRocmVhZGVkICJnaXQgaW5kZXgtcGFjayIgb24gcGxhdGZvcm1zIHdpdGhvdXQKKyAgIHRocmVhZC1zYWZlIHByZWFkKCk7IHVzZSBhIGRpZmZlcmVudCB3b3JrYXJvdW5kIGZvciBzdWNoCisgICBwbGF0Zm9ybXMgdG8gYWxsb3cgdGhyZWFkZWQgImdpdCBpbmRleC1wYWNrIi4KKyAgIChtZXJnZSAzOTUzOTQ5IG5kL2luZGV4LXBhY2stb25lLWZkLXBlci10aHJlYWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgZXJyb3IgcmVwb3J0aW5nIGZyb20gImdpdCBpbmRleC1wYWNrIiBoYXMgYmVlbiBpbXByb3ZlZCB0bworICAgZGlzdGluZ3Vpc2ggbWlzc2luZyBvYmplY3RzIGZyb20gdHlwZSBlcnJvcnMuCisgICAobWVyZ2UgNzc1ODNlNyBqay9pbmRleC1wYWNrLXJlcG9ydC1taXNzaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogImxvZyAtLXNob3ctc2lnbmF0dXJlIiBpbmNvcnJlY3RseSBkZWNpZGVkIHRoZSBjb2xvciB0byBwYWludCBhCisgICBtZXJnZXRhZyB0aGF0IHdhcyBhbmQgd2FzIG5vdCBjb3JyZWN0bHkgdmFsaWRhdGVkLgorICAgKG1lcmdlIDQyYzU1Y2UgbWcvZml4LWxvZy1tZXJnZXRhZy1jb2xvciBsYXRlciB0byBtYWludCkuCisKKyAqICJsb2cgLS1zaG93LXNpZ25hdHVyZSIgZGlkIG5vdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSAiLS1ncmFwaCIgb3B0aW9uLgorICAgKG1lcmdlIGNmMzk4M2QgemsvbG9nLWdyYXBoLXNob3dzaWcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG1haWxpbmZvIiB1c2VkIHRvIHJlYWQgYmV5b25kIHRoZSBlbmRzIG9mIGhlYWRlciBzdHJpbmdzIHdoaWxlCisgICBwYXJzaW5nIGFuIGluY29taW5nIGUtbWFpbCBtZXNzYWdlIHRvIGV4dHJhY3QgdGhlIHBhdGNoLgorICAgKG1lcmdlIGIxYTAxM2QgcnMvbWFpbGluZm8taGVhZGVyLWNtcCBsYXRlciB0byBtYWludCkuCisKKyAqIE9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtLCBtZXJnZS1yZWN1cnNpdmUgaW5jb3JyZWN0bHkKKyAgIGRlbGV0ZWQgdGhlIGZpbGUgdGhhdCBpcyB0byBiZSByZW5hbWVkIHRvIGEgbmFtZSB0aGF0IGlzIHRoZSBzYW1lCisgICBleGNlcHQgZm9yIGNhc2UgZGlmZmVyZW5jZXMuCisgICAobWVyZ2UgYmFhMzdiZiBkdC9tZXJnZS1yZWN1cnNpdmUtY2FzZS1pbnNlbnNpdGl2ZSBsYXRlciB0byBtYWludCkuCisKKyAqIE1lcmdpbmcgY2hhbmdlcyBpbnRvIGEgZmlsZSB0aGF0IGVuZHMgaW4gYW4gaW5jb21wbGV0ZSBsaW5lIG1hZGUgdGhlCisgICBsYXN0IGxpbmUgaW50byBhIGNvbXBsZXRlIG9uZSwgZXZlbiB3aGVuIHRoZSBvdGhlciBicmFuY2ggZGlkIG5vdAorICAgY2hhbmdlIGFueXRoaW5nIGFyb3VuZCB0aGUgZW5kIG9mIGZpbGUuCisgICAobWVyZ2UgYmEzMTE4MCBtay9tZXJnZS1pbmNvbXBsZXRlLWZpbGVzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwYWNrLW9iamVjdHMiIHVubmVjZXNzYXJpbHkgY29waWVkIHRoZSBwcmV2aW91cyBjb250ZW50cyB3aGVuCisgICBleHRlbmRpbmcgdGhlIGhhc2h0YWJsZSwgZXZlbiB0aG91Z2ggaXQgd2lsbCBwb3B1bGF0ZSB0aGUgdGFibGUKKyAgIGZyb20gc2NyYXRjaCBhbnl3YXkuCisgICAobWVyZ2UgZmI3OTk0NyBycy9wYWNrLW9iamVjdHMtbm8tdW5uZWNlc3NhcnktcmVhbGxvYyBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudCB1cGRhdGVzIHRvICJnaXQgcmVwYWNrIiBzdGFydGVkIHRvIGR1cGxpY2F0ZSBvYmplY3RzIHRoYXQKKyAgIGFyZSBpbiBwYWNrZmlsZXMgbWFya2VkIHdpdGggdGhlIC5rZWVwIGZsYWcgaW50byB0aGUgbmV3IHBhY2tmaWxlIGJ5CisgICBtaXN0YWtlLgorICAgKG1lcmdlIGQwNzhkODUgamsvcmVwYWNrLXBhY2sta2VlcC1vYmplY3RzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXJlcmUgZm9yZ2V0IiBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIG1lcmdlLmNvbmZsaWN0c3R5bGUKKyAgIHdhcyBzZXQgdG8gYSBub24tZGVmYXVsdCB2YWx1ZS4KKyAgIChtZXJnZSBkZTNkOGJiIGZjL3JlcmVyZS1jb25mbGljdC1zdHlsZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmVtb3RlIHJtIiBhbmQgImdpdCByZW1vdGUgcHJ1bmUiIGNhbiBpbnZvbHZlIHJlbW92aW5nIG1hbnkKKyAgIHJlZnMgYXQgb25jZSwgd2hpY2ggaXMgbm90IGEgdmVyeSBlZmZpY2llbnQgdGhpbmcgdG8gZG8gd2hlbiB2ZXJ5CisgICBtYW55IHJlZnMgZXhpc3QgaW4gdGhlIHBhY2tlZC1yZWZzIGZpbGUuCisgICAobWVyZ2UgZTZiZWE2NiBqbC9yZW1vdGUtcm0tcHJ1bmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGxvZyAtLWV4Y2x1ZGU9PGdsb2I+IC0tYWxsIHwgZ2l0IHNob3J0bG9nIiB3b3JrZWQgYXMgZXhwZWN0ZWQsCisgICBidXQgImdpdCBzaG9ydGxvZyAtLWV4Y2x1ZGU9PGdsb2I+IC0tYWxsIiwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gYmUKKyAgIGlkZW50aWNhbCB0byB0aGUgYWJvdmUgcGlwZWxpbmUsIHdhcyBub3QgYWNjZXB0ZWQgYXQgdGhlIGNvbW1hbmQKKyAgIGxpbmUgYXJndW1lbnQgcGFyc2VyIGxldmVsLgorICAgKG1lcmdlIGViMDc3NzQgamMvc2hvcnRsb2ctcmVmLWV4Y2x1ZGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgYXV0b3N0YXNoIG1vZGUgb2YgImdpdCByZWJhc2UgLWkiIGRpZCBub3QgcmVzdG9yZSB0aGUgZGlydHkKKyAgIHdvcmtpbmcgdHJlZSBzdGF0ZSBpZiB0aGUgdXNlciBhYm9ydGVkIHRoZSBpbnRlcmFjdGl2ZSByZWJhc2UgYnkKKyAgIGVtcHR5aW5nIHRoZSBpbnNuIHNoZWV0LgorICAgKG1lcmdlIGRkYjU0MzIgcnIvcmViYXNlLWF1dG9zdGFzaC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlYmFzZSAtLWZvcmstcG9pbnQiIGRpZCBub3QgZmlsdGVyIG91dCBwYXRjaC1pZGVudGljYWwKKyAgIGNvbW1pdHMgY29ycmVjdGx5LgorCisgKiBEdXJpbmcgImdpdCByZWJhc2UgLS1tZXJnZSIsIGEgY29uZmxpY3RlZCBwYXRjaCBjb3VsZCBub3QgYmUKKyAgIHNraXBwZWQgd2l0aCAiLS1za2lwIiBpZiB0aGUgbmV4dCBvbmUgYWxzbyBjb25mbGljdGVkLgorICAgKG1lcmdlIDk1MTA0YzcgYmMvZml4LXJlYmFzZS1tZXJnZS1za2lwIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzaG93IC1zIiAoaS5lLiBzaG93IGxvZyBtZXNzYWdlIG9ubHkpIHVzZWQgdG8gaW5jb3JyZWN0bHkgZW1pdAorICAgYW4gZXh0cmEgYmxhbmsgbGluZSBhZnRlciBhIG1lcmdlIGNvbW1pdC4KKyAgIChtZXJnZSBhZDJmNzI1IG1rL3Nob3ctcy1uby1leHRyYS1ibGFuay1saW5lLWZvci1tZXJnZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN0YXR1cyIsIGV2ZW4gdGhvdWdoIGl0IGlzIGEgcmVhZC1vbmx5IG9wZXJhdGlvbiwgdHJpZXMgdG8KKyAgIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZWZyZXNoZWQgbHN0YXQoMikgaW5mbyB0byBvcHRpbWl6ZSBmdXR1cmUKKyAgIGFjY2Vzc2VzIHRvIHRoZSB3b3JraW5nIHRyZWUgb3Bwb3J0dW5pc3RpY2FsbHksIGJ1dCB0aGlzIGNvdWxkCisgICByYWNlIHdpdGggYSAicmVhZC13cml0ZSIgb3BlcmF0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGluZGV4IHdoaWxlIGl0CisgICBpcyBydW5uaW5nLiAgRGV0ZWN0IHN1Y2ggYSByYWNlIGFuZCBhdm9pZCBvdmVyd3JpdGluZyB0aGUgaW5kZXguCisgICAobWVyZ2UgNDI2ZGRlZSB5bS9maXgtb3Bwb3J0dW5pc3RpYy1pbmRleC11cGRhdGUtcmFjZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgc3RhdHVzIiAoYW5kICJnaXQgY29tbWl0IikgYmVoYXZlZCBhcyBpZiBjaGFuZ2VzIGluIGEgbW9kaWZpZWQKKyAgIHN1Ym1vZHVsZSBhcmUgbm90IHRoZXJlIGlmIHN1Ym1vZHVsZS4qLmlnbm9yZSBjb25maWd1cmF0aW9uIGlzIHNldCwKKyAgIHdoaWNoIHdhcyBtaXNsZWFkaW5nLiAgVGhlIGNvbmZpZ3VyYXRpb24gaXMgb25seSB0byB1bmNsdXR0ZXIgZGlmZgorICAgb3V0cHV0IGR1cmluZyB0aGUgY291cnNlIG9mIGRldmVsb3BtZW50LCBhbmQgbm90IHRvIGhpZGUKKyAgIGNoYW5nZXMgaW4gdGhlICJzdGF0dXMiIG91dHB1dCB0byBjYXVzZSB0aGUgdXNlcnMgZm9yZ2V0IHRvIGNvbW1pdAorICAgdGhlbS4KKyAgIChtZXJnZSBjMjE1ZDNkIGpsL3N0YXR1cy1hZGRlZC1zdWJtb2R1bGUtaXMtbmV2ZXItaWdub3JlZCBsYXRlciB0byBtYWludCkuCisKKyAqIERvY3VtZW50YXRpb24gZm9yICJnaXQgc3VibW9kdWxlIHN5bmMiIGZvcmdvdCB0byBzYXkgdGhhdCB0aGUgc3ViY29tbWFuZAorICAgY2FuIHRha2UgdGhlICItLXJlY3Vyc2l2ZSIgb3B0aW9uLgorICAgKG1lcmdlIDkzOTNhZTcgbWMvZG9jLXN1Ym1vZHVsZS1zeW5jLXJlY3Vyc2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyIgaW4gMi4wIHJlbGVhc2UgY3Jhc2hlZCBvbiBhCisgICBtYWxmb3JtZWQgY29tbWFuZCBsaW5lLgorICAgKG1lcmdlIGM4ZTFlZTQgamMvcmV2LXBhcnNlLWFyZ2gtZGFzaGVkLW11bHRpLXdvcmRzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIG1vZGUgdG8gcnVuIHRlc3RzIHdpdGggSFRUUCBzZXJ2ZXIgdGVzdHMgZGlzYWJsZWQgd2FzIGJyb2tlbi4KKyAgIChtZXJnZSBhZmE1M2ZlIG5hL25vLWh0dHAtdGVzdC1pbi10aGUtbWlkZGxlIGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMwZmMzYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjEudHh0CkBAIC0wLDAgKzEsNDQgQEAKK0dpdCB2Mi4xLjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKKyAqIEdpdCAyLjAgaGFkIGEgcmVncmVzc2lvbiB3aGVyZSAiZ2l0IGZldGNoIiBpbnRvIGEgc2hhbGxvd2x5CisgICBjbG9uZWQgcmVwb3NpdG9yeSBmcm9tIGEgcmVwb3NpdG9yeSB3aXRoIGJpdG1hcCBvYmplY3QgaW5kZXgKKyAgIGVuYWJsZWQgZGlkIG5vdCB3b3JrIGNvcnJlY3RseS4gIFRoaXMgaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBHaXQgMi4wIGhhZCBhIHJlZ3Jlc3Npb24gd2hpY2ggYnJva2UgKHJhcmVseSB1c2VkKSAiZ2l0IGRpZmYtdHJlZQorICAgLXQiLiAgVGhpcyBoYXMgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgbG9nIC0tcHJldHR5L2Zvcm1hdD0iIHdpdGggYW4gZW1wdHkgZm9ybWF0IHN0cmluZyBkaWQgbm90CisgICBtZWFuIHRoZSBtb3JlIG9idmlvdXMgIk5vIG91dHB1dCB3aGF0c29ldmVyIiBidXQgIlVzZSBkZWZhdWx0CisgICBmb3JtYXQiLCB3aGljaCB3YXMgY291bnRlcmludHVpdGl2ZS4gIE5vdyBpdCBtZWFucyAibm90aGluZyBzaG93bgorICAgZm9yIHRoZSBsb2cgbWVzc2FnZSBwYXJ0Ii4KKworICogImdpdCAtYyBzZWN0aW9uLnZhciBjb21tYW5kIiBhbmQgImdpdCAtYyBzZWN0aW9uLnZhcj0gY29tbWFuZCIKKyAgIHNob3VsZCBwYXNzIHRoZSBjb25maWd1cmF0aW9uIGRpZmZlcmVudGx5ICh0aGUgZm9ybWVyIHNob3VsZCBiZSBhCisgICBib29sZWFuIHRydWUsIHRoZSBsYXR0ZXIgc2hvdWxkIGJlIGFuIGVtcHR5IHN0cmluZyksIGJ1dCB0aGV5CisgICBkaWRuJ3Qgd29yayB0aGF0IHdheS4gIE5vdyBpdCBkb2VzLgorCisgKiBBcHBseWluZyBhIHBhdGNoIG5vdCBnZW5lcmF0ZWQgYnkgR2l0IGluIGEgc3ViZGlyZWN0b3J5IHVzZWQgdG8KKyAgIGNoZWNrIHRoZSB3aGl0ZXNwYWNlIGJyZWFrYWdlIHVzaW5nIHRoZSBhdHRyaWJ1dGVzIGZvciBpbmNvcnJlY3QKKyAgIHBhdGhzLiBBbHNvIHdoaXRlc3BhY2UgY2hlY2tzIHdlcmUgcGVyZm9ybWVkIGV2ZW4gZm9yIHBhdGhzCisgICBleGNsdWRlZCB2aWEgImdpdCBhcHBseSAtLWV4Y2x1ZGU9PHBhdGg+IiBtZWNoYW5pc20uCisKKyAqICJnaXQgYnVuZGxlIGNyZWF0ZSIgd2l0aCBkYXRlLXJhbmdlIHNwZWNpZmljYXRpb24gd2VyZSBtZWFudCB0bworICAgZXhjbHVkZSB0YWdzIG91dHNpZGUgdGhlIHJhbmdlLCBidXQgaXQgZGlkIG5vdCB3b3JrIGNvcnJlY3RseS4KKworICogImdpdCBhZGQgeCIgd2hlcmUgeCB0aGF0IHVzZWQgdG8gYmUgYSBkaXJlY3RvcnkgaGFzIGJlY29tZSBhCisgICBzeW1ib2xpYyBsaW5rIHRvIGEgZGlyZWN0b3J5IG1pc2JlaGF2ZWQuCisKKyAqIFRoZSBwcm9tcHQgc2NyaXB0IGNoZWNrZWQgJEdJVF9ESVIvcmVmL3N0YXNoIGZpbGUgdG8gc2VlIGlmIHRoZXJlCisgICBpcyBhIHN0YXNoLCB3aGljaCB3YXMgYSBuby1uby4KKworICogImdpdCBjaGVja291dCAtbSIgZGlkIG5vdCBzd2l0Y2ggdG8gYW5vdGhlciBicmFuY2ggd2hpbGUgY2FycnlpbmcKKyAgIHRoZSBsb2NhbCBjaGFuZ2VzIGZvcndhcmQgd2hlbiBhIHBhdGggd2FzIGRlbGV0ZWQgZnJvbSB0aGUgaW5kZXguCisKKyAqIFdpdGggc3VmZmljaWVudGx5IGxvbmcgcmVmbmFtZXMsIGZhc3QtaW1wb3J0IGNvdWxkIGhhdmUgb3ZlcmZsb3duCisgICBhbiBvbi1zdGFjayBidWZmZXIuCisKKyAqIEFmdGVyICJwYWNrLXJlZnMgLS1wcnVuZSIgcGFja2VkIHJlZnMgYXQgdGhlIHRvcC1sZXZlbCwgaXQgZmFpbGVkCisgICB0byBwcnVuZSB0aGVtLgorCisgKiAiZ2l0IGdjIC0tYXV0byIgdHJpZ2dlcmVkIGZyb20gImdpdCBmZXRjaCAtLXF1aWV0IiB3YXMgbm90IHF1aWV0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMi50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmMzYjg5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjEuMi50eHQKQEAgLTAsMCArMSwyMCBAQAorR2l0IHYyLjEuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworICogImdpdCBwdXNoIiBvdmVyIEhUVFAgdHJhbnNwb3J0IGhhZCBhbiBhcnRpZmljaWFsIGxpbWl0IG9uIG51bWJlciBvZgorICAgcmVmcyB0aGF0IGNhbiBiZSBwdXNoZWQgaW1wb3NlZCBieSB0aGUgY29tbWFuZCBsaW5lIGxlbmd0aC4KKworICogV2hlbiByZWNlaXZpbmcgYW4gaW52YWxpZCBwYWNrIHN0cmVhbSB0aGF0IHJlY29yZHMgdGhlIHNhbWUgb2JqZWN0CisgICB0d2ljZSwgbXVsdGlwbGUgdGhyZWFkcyBnb3QgY29uZnVzZWQgZHVlIHRvIGEgcmFjZS4KKworICogQW4gYXR0ZW1wdCB0byByZW1vdmUgdGhlIGVudGlyZSB0cmVlIGluIHRoZSAiZ2l0IGZhc3QtaW1wb3J0IiBpbnB1dAorICAgc3RyZWFtIGNhdXNlZCBpdCB0byBtaXNiZWhhdmUuCisKKyAqIFJlYWNoYWJpbGl0eSBjaGVjayAodXNlZCBpbiAiZ2l0IHBydW5lIiBhbmQgZnJpZW5kcykgZGlkIG5vdCBhZGQgYQorICAgZGV0YWNoZWQgSEVBRCBhcyBhIHN0YXJ0aW5nIHBvaW50IHRvIHRyYXZlcnNlIG9iamVjdHMgc3RpbGwgaW4gdXNlLgorCisgKiAiZ2l0IGNvbmZpZyAtLWFkZCBzZWN0aW9uLnZhciB2YWwiIHVzZWQgdG8gbG9zZSBleGlzdGluZworICAgc2VjdGlvbi52YXIgd2hvc2UgdmFsdWUgd2FzIGFuIGVtcHR5IHN0cmluZy4KKworICogImdpdCBmc2NrIiBmYWlsZWQgdG8gcmVwb3J0IHRoYXQgaXQgZm91bmQgY29ycnVwdCBvYmplY3RzIHZpYSBpdHMKKyAgIGV4aXQgc3RhdHVzIGluIHNvbWUgY2FzZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjYzllYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS4zLnR4dApAQCAtMCwwICsxLDI2IEBACitHaXQgdjIuMS4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCisgKiBTb21lIE1VQXMgbWFuZ2xlZCBhIGxpbmUgaW4gYSBtZXNzYWdlIHRoYXQgYmVnaW5zIHdpdGggIkZyb20gIiB0bworICAgIj5Gcm9tICIgd2hlbiB3cml0aW5nIHRvIGEgbWFpbGJveCBmaWxlIGFuZCBmZWVkaW5nIHN1Y2ggYW4gaW5wdXQgdG8KKyAgICJnaXQgYW0iIHVzZWQgdG8gbG9zZSBzdWNoIGEgbGluZS4KKworICogImdpdCBkYWVtb24iICh3aXRoIE5PX0lQVjYgYnVpbGQgY29uZmlndXJhdGlvbikgdXNlZCB0byBpbmNvcnJlY3RseQorICAgdXNlIHRoZSBob3N0bmFtZSBldmVuIHdoZW4gZ2V0aG9zdGJ5bmFtZSgpIHJlcG9ydGVkIHRoYXQgdGhlIGdpdmVuCisgICBob3N0bmFtZSBpcyBub3QgZm91bmQuCisKKyAqIE5ld2VyIHZlcnNpb25zIG9mICdtZWxkJyBicmVha3MgdGhlIGF1dG8tZGV0ZWN0aW9uIHdlIHVzZSB0byBzZWUgaWYKKyAgIHRoZXkgYXJlIG5ldyBlbm91Z2ggdG8gc3VwcG9ydCB0aGUgYC0tb3V0cHV0YCBvcHRpb24uCisKKyAqICJnaXQgcGFjay1vYmplY3RzIiBmb3Jnb3QgdG8gZGlzYWJsZSB0aGUgY29kZXBhdGggdG8gZ2VuZXJhdGUKKyAgIG9iamVjdCByZWNoZWFiaWxpdHkgYml0bWFwIHdoZW4gaXQgbmVlZHMgdG8gc3BsaXQgdGhlIHJlc3VsdGluZworICAgcGFjay4KKworICogImdpdHdlYiIgdXNlZCBkZXByZWNhdGVkIENHSTo6c3RhcnRmcm9tLCB3aGljaCB3YXMgcmVtb3ZlZCBmcm9tCisgICBDR0kucG0gYXMgb2YgNC4wNDsgdXNlIENHSTo6c3RhcnRfZnJvbSBpbnN0ZWFkLgorCisgKiAiZ2l0IGxvZyIgZG9jdW1lbnRhdGlvbiBoYWQgYW4gZXhhbXBsZSBzZWN0aW9uIG1hcmtlZCB1cCBub3QKKyAgIHF1aXRlIGNvcnJlY3RseSwgd2hpY2ggcGFzc2VkIEFzY2lpRG9jIGJ1dCBmYWlsZWQgd2l0aAorICAgQXNjaWlEb2N0b3IuCisKK0Fsc28gY29udGFpbnMgc29tZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS40LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4xLjQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmU1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMS40LnR4dApAQCAtMCwwICsxLDM0IEBACitHaXQgdjIuMS40IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4xLjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXZSB1c2VkIHRvIGFsbG93IGNvbW1pdHRpbmcgYSBwYXRoICIuR2l0L2NvbmZpZyIgd2l0aCBHaXQgdGhhdCBpcworICAgcnVubmluZyBvbiBhIGNhc2Ugc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIGJ1dCBhbiBhdHRlbXB0IHRvIGNoZWNrIG91dAorICAgc3VjaCBhIHBhdGggd2l0aCBHaXQgdGhhdCBydW5zIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtCisgICB3b3VsZCBoYXZlIGNsb2JiZXJlZCAiLmdpdC9jb25maWciLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCB3aGF0CisgICB0aGUgdXNlciB3b3VsZCBoYXZlIGV4cGVjdGVkLiAgR2l0IG5vdyBwcmV2ZW50cyB5b3UgZnJvbSB0cmFja2luZworICAgYSBwYXRoIHdpdGggIi5HaXQiIChpbiBhbnkgY2FzZSBjb21iaW5hdGlvbikgYXMgYSBwYXRoIGNvbXBvbmVudC4KKworICogT24gV2luZG93cywgY2VydGFpbiBwYXRoIGNvbXBvbmVudHMgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gIi5naXQiCisgICBhcmUgbWFwcGVkIHRvICIuZ2l0IiwgZS5nLiAiZ2l0fjEvY29uZmlnIiBpcyB0cmVhdGVkIGFzIGlmIGl0IHdlcmUKKyAgICIuZ2l0L2NvbmZpZyIuICBIRlMrIGhhcyBhIHNpbWlsYXIgaXNzdWUsIHdoZXJlIGNlcnRhaW4gdW5pY29kZQorICAgY29kZXBvaW50cyBhcmUgaWdub3JlZCwgZS5nLiAiLmdcdTIwMGNpdC9jb25maWciIGlzIHRyZWF0ZWQgYXMgaWYKKyAgIGl0IHdlcmUgIi5naXQvY29uZmlnIi4gIFBhdGhuYW1lcyB3aXRoIHRoZXNlIHBvdGVudGlhbCBpc3N1ZXMgYXJlCisgICByZWplY3RlZCBvbiB0aGUgYWZmZWN0ZWQgc3lzdGVtcy4gIEdpdCBvbiBzeXN0ZW1zIHRoYXQgYXJlIG5vdAorICAgYWZmZWN0ZWQgYnkgdGhpcyBpc3N1ZSAoZS5nLiBMaW51eCkgY2FuIGFsc28gYmUgY29uZmlndXJlZCB0bworICAgcmVqZWN0IHRoZW0gdG8gZW5zdXJlIGNyb3NzIHBsYXRmb3JtIGludGVyb3BlcmFiaWxpdHkgb2YgdGhlIGhvc3RlZAorICAgcHJvamVjdHMuCisKKyAqICJnaXQgZnNjayIgbm90aWNlcyBhIHRyZWUgb2JqZWN0IHRoYXQgcmVjb3JkcyBzdWNoIGEgcGF0aCB0aGF0IGNhbgorICAgYmUgY29uZnVzZWQgd2l0aCAiLmdpdCIsIGFuZCB3aXRoIHJlY2VpdmUuZnNja09iamVjdHMgY29uZmlndXJhdGlvbgorICAgc2V0IHRvIHRydWUsIGFuIGF0dGVtcHQgdG8gImdpdCBwdXNoIiBzdWNoIGEgdHJlZSBvYmplY3Qgd2lsbCBiZQorICAgcmVqZWN0ZWQuICBTdWNoIGEgcGF0aCBtYXkgbm90IGJlIGEgcHJvYmxlbSBvbiBhIHdlbGwgYmVoYXZpbmcKKyAgIGZpbGVzeXN0ZW0gYnV0IGluIG9yZGVyIHRvIHByb3RlY3QgdGhvc2Ugb24gSEZTKyBhbmQgb24gY2FzZQorICAgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMsIHRoaXMgY2hlY2sgaXMgZW5hYmxlZCBvbiBhbGwgcGxhdGZvcm1zLgorCitBIGJpZyAidGhhbmtzISIgZm9yIGJyaW5naW5nIHRoaXMgaXNzdWUgdG8gdXMgZ29lcyB0byBvdXIgZnJpZW5kcyBpbgordGhlIE1lcmN1cmlhbCBsYW5kLCBuYW1lbHksIE1hdHQgTWFja2FsbCBhbmQgQXVnaWUgRmFja2xlci4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk4ZWNiYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yLjAudHh0CkBAIC0wLDAgKzEsMzEzIEBACitHaXQgdjIuMiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1VwZGF0ZXMgc2luY2UgdjIuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BvcnRzCisKKyAqIEJ1aWxkaW5nIG9uIG9sZGVyIE1hY09TIFggc3lzdGVtcyBhdXRvbWF0aWNhbGx5IHNldHMKKyAgIHRoZSBuZWNlc3NhcnkgTk9fQVBQTEVfQ09NTU9OX0NSWVBUTyBidWlsZC10aW1lIG9wdGlvbi4KKworICogQnVpbGRpbmcgd2l0aCBOT19QVEhSRUFEUyBoYXMgYmVlbiByZXN1cnJlY3RlZC4KKworICogQ29tcGlsYXRpb24gb3B0aW9ucyBoYXZlIGJlZW4gdXBkYXRlZCBhIGJpdCB0byBiZXR0ZXIgc3VwcG9ydCB0aGUKKyAgIHovT1MgcG9ydC4KKworCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogImdpdCBhcmNoaXZlIiBsZWFybmVkIHRvIGZpbHRlciB3aGF0IGdldHMgYXJjaGl2ZWQgd2l0aCBhIHBhdGhzcGVjLgorCisgKiAiZ2l0IGNvbmZpZyAtLWVkaXQgLS1nbG9iYWwiIHN0YXJ0cyBmcm9tIGEgc2tlbGV0YWwgcGVyLXVzZXIKKyAgIGNvbmZpZ3VyYXRpb24gZmlsZSBjb250ZW50cywgaW5zdGVhZCBvZiBhIHRvdGFsIGJsYW5rLCB3aGVuIHRoZQorICAgdXNlciBkb2VzIG5vdCBhbHJlYWR5IGhhdmUgYW55IGdsb2JhbCBjb25maWcuICBUaGlzIGltbWVkaWF0ZWx5CisgICByZWR1Y2VzIHRoZSBuZWVkIHRvIGxhdGVyIGFzayAiSGF2ZSB5b3UgZm9yZ290dGVuIHRvIHNldAorICAgY29yZS51c2VyPyIsIGFuZCB3ZSBjYW4gYWRkIG1vcmUgdG8gdGhlIHRlbXBsYXRlIGFzIHdlIGdhaW4KKyAgIG1vcmUgZXhwZXJpZW5jZS4KKworICogImdpdCBzdGFzaCBsaXN0IC1wIiB1c2VkIHRvIGJlIGFsbW9zdCBhbHdheXMgYSBuby1vcCBiZWNhdXNlIGVhY2gKKyAgIHN0YXNoIGVudHJ5IGlzIHJlcHJlc2VudGVkIGFzIGEgbWVyZ2UgY29tbWl0LiAgSXQgbGVhcm5lZCB0byBzaG93CisgICB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBiYXNlIGNvbW1pdCB2ZXJzaW9uIGFuZCB0aGUgd29ya2luZyB0cmVlCisgICB2ZXJzaW9uLCB3aGljaCBpcyBpbiBsaW5lIHdpdGggd2hhdCAiZ2l0IHN0YXNoIHNob3ciIGdpdmVzLgorCisgKiBTb21ldGltZXMgdXNlcnMgd2FudCB0byByZXBvcnQgYSBidWcgdGhleSBleHBlcmllbmNlIG9uIHRoZWlyCisgICByZXBvc2l0b3J5LCBidXQgdGhleSBhcmUgbm90IGF0IGxpYmVydHkgdG8gc2hhcmUgdGhlIGNvbnRlbnRzIG9mCisgICB0aGUgcmVwb3NpdG9yeS4gICJmYXN0LWV4cG9ydCIgd2FzIHRhdWdodCBhbiAiLS1hbm9ueW1pemUiIG9wdGlvbgorICAgdG8gcmVwbGFjZSBibG9iIGNvbnRlbnRzLCBuYW1lcyBvZiBwZW9wbGUsIHBhdGhzIGFuZCBsb2cKKyAgIG1lc3NhZ2VzIHdpdGggYmxhbmQgYW5kIHNpbXBsZSBzdHJpbmdzIHRvIGhlbHAgdGhlbS4KKworICogImdpdCBkaWZmdG9vbCIgbGVhcm5lZCBhbiBvcHRpb24gdG8gc3RvcCBmZWVkaW5nIHBhdGhzIHRvIHRoZQorICAgZGlmZiBiYWNrZW5kIHdoZW4gaXQgZXhpdHMgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cy4KKworICogImdpdCBncmVwIiBsZWFybmVkIHRvIHBhaW50IChvciBub3QgcGFpbnQpIHBhcnRpYWwgbWF0Y2hlcyBvbgorICAgY29udGV4dCBsaW5lcyB3aGVuIHNob3dpbmcgImdyZXAgLUM8bnVtPiIgb3V0cHV0IGluIGNvbG9yLgorCisgKiAibG9nIC0tZGF0ZT1pc28iIHVzZXMgYSBzbGlnaHQgdmFyaWFudCBvZiB0aGUgSVNPIDg2MDEgZm9ybWF0IHRoYXQgaXMKKyAgIG1vcmUgaHVtYW4gcmVhZGFibGUuICBBIG5ldyAiLS1kYXRlPWlzby1zdHJpY3QiIG9wdGlvbiBnaXZlcworICAgZGF0ZXRpbWUgb3V0cHV0IHRoYXQgY29uZm9ybXMgbW9yZSBzdHJpY3RseS4KKworICogVGhlIGxvZ2ljICJnaXQgcHJ1bmUiIHVzZXMgaXMgbW9yZSByZXNpbGllbnQgYWdhaW5zdCB2YXJpb3VzIGNvcm5lcgorICAgY2FzZXMuCisKKyAqIEEgYnJva2VuIHJlaW1wbGVtZW50YXRpb24gb2YgR2l0IGNvdWxkIHdyaXRlIGFuIGludmFsaWQgaW5kZXggdGhhdAorICAgcmVjb3JkcyBib3RoIHN0YWdlICMwIGFuZCBoaWdoZXItc3RhZ2UgZW50cmllcyBmb3IgdGhlIHNhbWUgcGF0aC4KKyAgIFdlIG5vdyBub3RpY2UgYW5kIHJlamVjdCBzdWNoIGFuIGluZGV4LCBhcyB0aGVyZSBpcyBubyBzZW5zaWJsZQorICAgZmFsbGJhY2sgKHdlIGRvIG5vdCBrbm93IGlmIHRoZSBicm9rZW4gdG9vbCB3YW50ZWQgdG8gcmVzb2x2ZSBhbmQKKyAgIGZvcmdvdCB0byByZW1vdmUgdGhlIGhpZ2hlci1zdGFnZSBlbnRyaWVzLCBvciBpZiBpdCB3YW50ZWQgdG8gdW5yZXNvbHZlCisgICBhbmQgZm9yZ290IHRvIHJlbW92ZSB0aGUgc3RhZ2UgIzAgZW50cnkpLgorCisgKiBUaGUgdGVtcG9yYXJ5IGZpbGVzICJnaXQgbWVyZ2V0b29sIiB1c2VzIGFyZSByZW5hbWVkIHRvIGF2b2lkIHRvbworICAgbWFueSBkb3RzIGluIHRoZW0gKGUuZy4gYSB0ZW1wb3JhcnkgZmlsZSBmb3IgImhlbGxvLmMiIHVzZWQgdG8gYmUKKyAgIG5hbWVkIGUuZy4gImhlbGxvLkJBU0UuNDMyMS5jIiBidXQgbm93IHVzZXMgdW5kZXJzY29yZSBpbnN0ZWFkLAorICAgZS5nLiAiaGVsbG9fQkFTRV80MzIxLmMiLCB0byBhbGxvdyB1cyB0byBoYXZlIG11bHRpcGxlIHZhcmlhbnRzKS4KKworICogVGhlIHRlbXBvcmFyeSBmaWxlcyAiZ2l0IG1lcmdldG9vbCIgdXNlcyBjYW4gYmUgcGxhY2VkIGluIGEgbmV3bHkKKyAgIGNyZWF0ZWQgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgaW5zdGVhZCBvZiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGJ5CisgICBzZXR0aW5nIHRoZSBtZXJnZXRvb2wud3JpdGVUb1RlbXAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworICogImdpdCBtZXJnZXRvb2wiIHVuZGVyc3RhbmRzICItLXRvb2wgYmMiIG5vdywgYXMgdmVyc2lvbiA0IG9mCisgICBCZXlvbmRDb21wYXJlIGNhbiBiZSBkcml2ZW4gdGhlIHNhbWUgd2F5IGFzIGl0cyB2ZXJzaW9uIDMgYW5kIGl0CisgICBmZWVscyBhd2t3YXJkIHRvIHNheSAiLS10b29sIGJjMyIgdG8gcnVuIHZlcnNpb24gNC4KKworICogVGhlICJwcmUtcmVjZWl2ZSIgYW5kICJwb3N0LXJlY2VpdmUiIGhvb2tzIGFyZSBubyBsb25nZXIgcmVxdWlyZWQKKyAgIHRvIGNvbnN1bWUgdGhlaXIgaW5wdXQgZnVsbHkgKG5vdCBmb2xsb3dpbmcgdGhpcyByZXF1aXJlbWVudCB1c2VkCisgICB0byByZXN1bHQgaW4gaW50ZXJtaXR0ZW50IGVycm9ycyBpbiAiZ2l0IHB1c2giKS4KKworICogVGhlIHByZXR0eS1mb3JtYXQgc3BlY2lmaWVyICIlZCIsIHdoaWNoIGV4cGFuZHMgdG8gIiAodGFnbmFtZSkiCisgICBmb3IgYSB0YWdnZWQgY29tbWl0LCBnYWluZWQgYSBjb3VzaW4gIiVEIiB0aGF0IGp1c3QgZ2l2ZXMgdGhlCisgICAidGFnbmFtZSIgd2l0aG91dCBmcmlsbHMuCisKKyAqICJnaXQgcHVzaCIgbGVhcm5lZCAiLS1zaWduZWQiIHB1c2gsIHRoYXQgYWxsb3dzIGEgcHVzaCAoaS5lLgorICAgcmVxdWVzdCB0byB1cGRhdGUgdGhlIHJlZnMgb24gdGhlIG90aGVyIHNpZGUgdG8gcG9pbnQgYXQgYSBuZXcKKyAgIGhpc3RvcnksIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zbWlzc2lvbiBvZiBuZWNlc3Nhcnkgb2JqZWN0cykgdG8gYmUKKyAgIHNpZ25lZCwgc28gdGhhdCBpdCBjYW4gYmUgdmVyaWZpZWQgYW5kIGF1ZGl0ZWQsIHVzaW5nIHRoZSBHUEcKKyAgIHNpZ25hdHVyZSBvZiB0aGUgcGVyc29uIHdobyBwdXNoZWQsIHRoYXQgdGhlIHRpcHMgb2YgYnJhbmNoZXMgYXQgYQorICAgcHVibGljIHJlcG9zaXRvcnkgcmVhbGx5IHBvaW50IHRoZSBjb21taXRzIHRoZSBwdXNoZXIgd2FudGVkIHRvLAorICAgd2l0aG91dCBoYXZpbmcgdG8gInRydXN0IiB0aGUgc2VydmVyLgorCisgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIgaXMgYSBuZXcgZmlsdGVyIHRvIHByb2dyYW1tYXRpY2FsbHkgZWRpdAorICAgdGhlIHRhaWwgZW5kIG9mIHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzLCBlLmcuICJTaWduZWQtb2ZmLWJ5OiIuCisKKyAqICJnaXQgaGVscCBldmVyeWRheSIgc2hvd3MgdGhlICJFdmVyeWRheSBHaXQgaW4gMjAgY29tbWFuZHMgb3Igc28iCisgICBkb2N1bWVudCwgd2hvc2UgY29udGVudHMgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gbWF0Y2ggbW9yZSBtb2Rlcm4KKyAgIEdpdCBwcmFjdGljZS4KKworICogT24gdGhlICJnaXQgc3ZuIiBmcm9udCwgd29yayBwcm9ncmVzc2VzIHRvIHJlZHVjZSBtZW1vcnkgY29uc3VtcHRpb24gYW5kCisgICB0byBpbXByb3ZlIGhhbmRsaW5nIG9mIG1lcmdlaW5mby4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBUaGUgQVBJIHRvIG1hbmlwdWxhdGUgdGhlICJyZWZzIiBoYXMgYmVlbiByZXN0cnVjdHVyZWQgdG8gbWFrZSBpdAorICAgbW9yZSB0cmFuc2FjdGlvbmFsLCB3aXRoIHRoZSBldmVudHVhbCBnb2FsIHRvIGFsbG93IGFsbC1vci1ub25lCisgICBhdG9taWMgdXBkYXRlcyBhbmQgbWlncmF0aW5nIHRoZSBzdG9yYWdlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuCisgICB0aGUgdHJhZGl0aW9uYWwgZmlsZXN5c3RlbSBiYXNlZCBvbmUgKGUuZy4gZGF0YWJhc2VzKS4KKworICogVGhlIGxvY2tmaWxlIEFQSSBhbmQgaXRzIHVzZXJzIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgorCisgKiBXZSBubyBsb25nZXIgYXR0ZW1wdCB0byBrZWVwIHRyYWNrIG9mIGluZGl2aWR1YWwgZGVwZW5kZW5jaWVzIHRvCisgICB0aGUgaGVhZGVyIGZpbGVzIGluIHRoZSBidWlsZCBwcm9jZWR1cmUsIHJlbHlpbmcgaW5zdGVhZCBvbiBhdXRvbWF0ZWQKKyAgIGRlcGVuZGVuY3kgZ2VuZXJhdGlvbiBzdXBwb3J0IGZyb20gbW9kZXJuIGNvbXBpbGVycy4KKworICogSW4gdGVzdHMsIHdlIGhhdmUgYmVlbiB1c2luZyBOT1Rfe01JTkdXLENZR1dJTn0gdGVzdCBwcmVyZXF1aXNpdGVzCisgICBsb25nIGJlZm9yZSBuZWdhdGVkIHByZXJlcXVpc2l0ZXMgZS5nLiAhTUlOR1cgd2VyZSBpbnZlbnRlZC4KKyAgIFRoZSBmb3JtZXIgaGFzIGJlZW4gY29udmVydGVkIHRvIHRoZSBsYXR0ZXIgdG8gYXZvaWQgY29uZnVzaW9uLgorCisgKiBPcHRpbWl6ZWQgbG9va2luZyB1cCBhIHJlbW90ZSdzIGNvbmZpZ3VyYXRpb24gaW4gYSByZXBvc2l0b3J5IHdpdGggdmVyeSBtYW55CisgICByZW1vdGVzIGRlZmluZWQuCisKKyAqIFRoZXJlIGFyZSBjYXNlcyB3aGVyZSB5b3UgbG9jayBhbmQgb3BlbiB0byB3cml0ZSBhIGZpbGUsIGNsb3NlIGl0CisgICB0byBzaG93IHRoZSB1cGRhdGVkIGNvbnRlbnRzIHRvIGFuIGV4dGVybmFsIHByb2Nlc3NlcywgYW5kIHRoZW4gaGF2ZQorICAgdG8gdXBkYXRlIHRoZSBmaWxlIGFnYWluIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGxvY2s7IG5vdyB0aGUKKyAgIGxvY2tmaWxlIEFQSSBoYXMgc3VwcG9ydCBmb3Igc3VjaCBhbiBhY2Nlc3MgcGF0dGVybi4KKworICogVGhlIEFQSSB0byBhbGxvY2F0ZSB0aGUgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sgb2YgY29tbWl0CisgICBkZWNvcmF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgdG8gbWFrZSBpdCBsZXNzIGN1bWJlcnNvbWUgdG8gdXNlLgorCisgKiBBbiBpbi1jb3JlIGNhY2hpbmcgbGF5ZXIgdG8gbGV0IHVzIGF2b2lkIHJlYWRpbmcgdGhlIHNhbWUKKyAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2V2ZXJhbCB0aW1lcyBoYXMgYmVlbiBhZGRlZC4gIEEgZmV3IGNvbW1hbmRzCisgICBoYXZlIGJlZW4gY29udmVydGVkIHRvIHVzZSB0aGlzIHN1YnN5c3RlbS4KKworICogVmFyaW91cyBjb2RlIHBhdGhzIGhhdmUgYmVlbiBjbGVhbmVkIHVwIGFuZCBzaW1wbGlmaWVkIGJ5IHVzaW5nCisgICB0aGUgInN0cmJ1ZiIsICJzdGFydHNfd2l0aCgpIiwgYW5kICJza2lwX3ByZWZpeCgpIiBBUElzIG1vcmUuCisKKyAqIEEgZmV3IGNvZGVwYXRocyB0aGF0IGRpZWQgd2hlbiBsYXJnZSBibG9icyB0aGF0IHdvdWxkIG5vdCBmaXQgaW4KKyAgIGNvcmUgYXJlIGludm9sdmVkIGluIHRoZWlyIG9wZXJhdGlvbiBoYXZlIGJlZW4gdGF1Z2h0IHRvIHB1bnQKKyAgIGluc3RlYWQsIGJ5IGUuZy4gbWFya2luZyBhIHRvby1sYXJnZSBibG9iIGFzIG5vdCB0byBiZSBkaWZmZWQuCisKKyAqIEEgZmV3IG1vcmUgY29kZSBwYXRocyBpbiAiY29tbWl0IiBhbmQgImNoZWNrb3V0IiBoYXZlIGJlZW4gdGF1Z2h0CisgICB0byByZXBvcHVsYXRlIHRoZSBjYWNoZS10cmVlIGluIHRoZSBpbmRleCwgdG8gaGVscCBzcGVlZCB1cCBsYXRlcgorICAgIndyaXRlLXRyZWUiICh1c2VkIGluICJjb21taXQiKSBhbmQgImRpZmYtaW5kZXggLS1jYWNoZWQiICh1c2VkIGluCisgICAic3RhdHVzIikuCisKKyAqIEEgY29tbW9uIHByb2dyYW1taW5nIG1pc3Rha2UgdG8gYXNzaWduIHRoZSBzYW1lIHNob3J0IG9wdGlvbiBuYW1lCisgICB0byB0d28gc2VwYXJhdGUgb3B0aW9ucyBpcyBkZXRlY3RlZCBieSB0aGUgcGFyc2Vfb3B0aW9ucygpIEFQSSB0byBoZWxwCisgICBkZXZlbG9wZXJzLgorCisgKiBUaGUgY29kZSBwYXRoIHRvIHdyaXRlIG91dCB0aGUgcGFja2VkLXJlZnMgZmlsZSBoYXMgYmVlbiBvcHRpbWl6ZWQsCisgICB3aGljaCBlc3BlY2lhbGx5IG1hdHRlcnMgaW4gYSByZXBvc2l0b3J5IHdpdGggYSBsYXJnZSBudW1iZXIgb2YKKyAgIHJlZnMuCisKKyAqIFRoZSBjaGVjayB0byBzZWUgaWYgYSByZWYgJEYgY2FuIGJlIGNyZWF0ZWQgYnkgbWFraW5nIHN1cmUgbm8KKyAgIGV4aXN0aW5nIHJlZiBoYXMgJEYvIGFzIGl0cyBwcmVmaXggaGFzIGJlZW4gb3B0aW1pemVkLCB3aGljaAorICAgZXNwZWNpYWxseSBtYXR0ZXJzIGluIGEgcmVwb3NpdG9yeSB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIGV4aXN0aW5nCisgICByZWZzLgorCisgKiAiZ2l0IGZzY2siIHdhcyB0YXVnaHQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHRhZyBvYmplY3RzIGEgYml0IG1vcmUuCisKKyAqICJnaXQgaGFzaC1vYmplY3QiIHdhcyB0YXVnaHQgYSAiLS1saXRlcmFsbHkiIG9wdGlvbiB0byBoZWxwCisgICBkZWJ1Z2dpbmcuCisKKyAqIFdoZW4gcnVubmluZyBhIHJlcXVpcmVkIGNsZWFuIGZpbHRlciwgd2UgZG8gbm90IGhhdmUgdG8gbW1hcCB0aGUKKyAgIG9yaWdpbmFsIGJlZm9yZSBmZWVkaW5nIHRoZSBmaWx0ZXIuICBJbnN0ZWFkLCBzdHJlYW0gdGhlIGZpbGUKKyAgIGNvbnRlbnRzIGRpcmVjdGx5IHRvIHRoZSBmaWx0ZXIgYW5kIHByb2Nlc3MgaXRzIG91dHB1dC4KKworICogVGhlIHNjcmlwdHMgaW4gdGhlIHRlc3Qgc3VpdGUgY2FuIGJlIHJ1biB3aXRoIHRoZSAiLXgiIG9wdGlvbiB0byBzaG93CisgICBhIHNoZWxsLXRyYWNlIG9mIGVhY2ggY29tbWFuZCB0aGV5IHJ1bi4KKworICogVGhlICJydW4tY29tbWFuZCIgQVBJIGxlYXJuZWQgdG8gbWFuYWdlIHRoZSBhcmd2IGFuZCBlbnZpcm9ubWVudAorICAgYXJyYXlzIGZvciBjaGlsZCBwcm9jZXNzLCBhbGxldmlhdGluZyB0aGUgbmVlZCBmb3IgdGhlIGNhbGxlcnMgdG8KKyAgIGFsbG9jYXRlIGFuZCBkZWFsbG9jYXRlIHRoZW0uCisKKyAqIFNvbWUgcGVvcGxlIHVzZSBBc2NpaURvY3RvciwgaW5zdGVhZCBvZiBBc2NpaURvYywgdG8gZm9ybWF0IG91cgorICAgZG9jdW1lbnRhdGlvbiBzZXQ7IHRoZSBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIGFkanVzdGVkIHRvIGJlIHVzYWJsZQorICAgYnkgYm90aCwgYXMgQXNjaWlEb2N0b3IgaXMgcGlja2llciB0aGFuIEFzY2lpRG9jIGFib3V0IGl0cyBpbnB1dAorICAgbWFyay11cC4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4xCistLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjIuMSBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiAiZ2l0IGxvZyAtLXByZXR0eS9mb3JtYXQ9IiB3aXRoIGFuIGVtcHR5IGZvcm1hdCBzdHJpbmcgZGlkIG5vdAorICAgbWVhbiB0aGUgbW9yZSBvYnZpb3VzICJObyBvdXRwdXQgd2hhdHNvZXZlciIgYnV0ICJVc2UgZGVmYXVsdAorICAgZm9ybWF0Iiwgd2hpY2ggd2FzIGNvdW50ZXJpbnR1aXRpdmUuCisKKyAqICJnaXQgLWMgc2VjdGlvbi52YXIgY29tbWFuZCIgYW5kICJnaXQgLWMgc2VjdGlvbi52YXI9IGNvbW1hbmQiCisgICBzaG91bGQgcGFzcyB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZSBkaWZmZXJlbnRseSAodGhlIGZvcm1lciBzaG91bGQgYmUgYQorICAgYm9vbGVhbiB0cnVlLCB0aGUgbGF0dGVyIHNob3VsZCBiZSBhbiBlbXB0eSBzdHJpbmcpLgorCisgKiBBcHBseWluZyBhIHBhdGNoIG5vdCBnZW5lcmF0ZWQgYnkgR2l0IGluIGEgc3ViZGlyZWN0b3J5IHVzZWQgdG8KKyAgIGNoZWNrIGZvciB3aGl0ZXNwYWNlIGJyZWFrYWdlIHVzaW5nIHRoZSBhdHRyaWJ1dGVzIG9mIGluY29ycmVjdAorICAgcGF0aHMuIEFsc28gd2hpdGVzcGFjZSBjaGVja3Mgd2VyZSBwZXJmb3JtZWQgZXZlbiBmb3IgcGF0aHMKKyAgIGV4Y2x1ZGVkIHZpYSB0aGUgImdpdCBhcHBseSAtLWV4Y2x1ZGU9PHBhdGg+IiBtZWNoYW5pc20uCisKKyAqICJnaXQgYnVuZGxlIGNyZWF0ZSIgd2l0aCBhIGRhdGUtcmFuZ2Ugc3BlY2lmaWNhdGlvbiB3YXMgbWVhbnQgdG8KKyAgIGV4Y2x1ZGUgdGFncyBvdXRzaWRlIHRoZSByYW5nZSwgYnV0IGl0IGRpZG4ndC4KKworICogImdpdCBhZGQgeCIgd2hlcmUgeCB1c2VkIHRvIGJlIGEgZGlyZWN0b3J5IGFuZCBpcyBub3cgYQorICAgc3ltYm9saWMgbGluayB0byBhIGRpcmVjdG9yeSBtaXNiZWhhdmVkLgorCisgKiBUaGUgcHJvbXB0IHNjcmlwdCBjaGVja2VkIHRoZSAkR0lUX0RJUi9yZWYvc3Rhc2ggZmlsZSB0byBzZWUgaWYgdGhlcmUKKyAgIGlzIGEgc3Rhc2gsIHdoaWNoIHdhcyBhIG5vLW5vLgorCisgKiBQYWNrLXByb3RvY29sIGRvY3VtZW50YXRpb24gaGFkIGEgbWlub3IgdHlwby4KKworICogImdpdCBjaGVja291dCAtbSIgZGlkIG5vdCBzd2l0Y2ggdG8gYW5vdGhlciBicmFuY2ggd2hpbGUgY2FycnlpbmcKKyAgIHRoZSBsb2NhbCBjaGFuZ2VzIGZvcndhcmQgd2hlbiBhIHBhdGggd2FzIGRlbGV0ZWQgZnJvbSB0aGUgaW5kZXguCisKKyAqICJnaXQgZGFlbW9uIiAod2l0aCBOT19JUFY2IGJ1aWxkIGNvbmZpZ3VyYXRpb24pIHVzZWQgdG8gaW5jb3JyZWN0bHkKKyAgIHVzZSB0aGUgaG9zdG5hbWUgZXZlbiB3aGVuIGdldGhvc3RieW5hbWUoKSByZXBvcnRlZCB0aGF0IHRoZSBnaXZlbgorICAgaG9zdG5hbWUgaXMgbm90IGZvdW5kLgorICAgKG1lcmdlIDEwN2VmYmUgcnMvZGFlbW9uLWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogV2l0aCBzdWZmaWNpZW50bHkgbG9uZyByZWZuYW1lcywgImdpdCBmYXN0LWltcG9ydCIgY291bGQgaGF2ZQorICAgb3ZlcmZsb3dlZCBhbiBvbi1zdGFjayBidWZmZXIuCisKKyAqIEFmdGVyICJwYWNrLXJlZnMgLS1wcnVuZSIgcGFja2VkIHJlZnMgYXQgdGhlIHRvcC1sZXZlbCwgaXQgZmFpbGVkCisgICB0byBwcnVuZSB0aGVtLgorCisgKiBQcm9ncmVzcyBvdXRwdXQgZnJvbSAiZ2l0IGdjIC0tYXV0byIgd2FzIHZpc2libGUgaW4gImdpdCBmZXRjaCAtcSIuCisKKyAqIFdlIHVzZWQgdG8gcGFzcyAtMTAwMCB0byBwb2xsKDIpLCBleHBlY3RpbmcgaXQgdG8gYWxzbyBtZWFuICJubworICAgdGltZW91dCIsIHdoaWNoIHNob3VsZCBiZSBzcGVsbGVkIGFzIC0xLgorCisgKiAiZ2l0IHJlYmFzZSIgZG9jdW1lbnRhdGlvbiB3YXMgdW5jbGVhciB0aGF0IGl0IGlzIHJlcXVpcmVkIHRvCisgICBzcGVjaWZ5IG9uIHdoYXQgPHVwc3RyZWFtPiB0aGUgcmViYXNlIGlzIHRvIGJlIGRvbmUgd2hlbiB0ZWxsaW5nIGl0CisgICB0byBmaXJzdCBjaGVjayBvdXQgPGJyYW5jaD4uCisgICAobWVyZ2UgOTVjNjgyNiBzby9yZWJhc2UtZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdXNoIiBvdmVyIEhUVFAgdHJhbnNwb3J0IGhhZCBhbiBhcnRpZmljaWFsIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YKKyAgIHJlZnMgdGhhdCBjYW4gYmUgcHVzaGVkLCBpbXBvc2VkIGJ5IHRoZSBjb21tYW5kIGxpbmUgbGVuZ3RoLgorICAgKG1lcmdlIDI2YmUxOWIgamsvc2VuZC1wYWNrLW1hbnktcmVmc3BlY3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIHJlY2VpdmluZyBhbiBpbnZhbGlkIHBhY2sgc3RyZWFtIHRoYXQgcmVjb3JkcyB0aGUgc2FtZSBvYmplY3QKKyAgIHR3aWNlLCBtdWx0aXBsZSB0aHJlYWRzIGdvdCBjb25mdXNlZCBkdWUgdG8gYSByYWNlLgorICAgKG1lcmdlIGFiNzkxZGQgamsvaW5kZXgtcGFjay10aHJlYWRpbmctcmFjZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBhdHRlbXB0IHRvIHJlbW92ZSB0aGUgZW50aXJlIHRyZWUgaW4gdGhlICJnaXQgZmFzdC1pbXBvcnQiIGlucHV0CisgICBzdHJlYW0gY2F1c2VkIGl0IHRvIG1pc2JlaGF2ZS4KKyAgIChtZXJnZSAyNjY4ZDY5IG1iL2Zhc3QtaW1wb3J0LWRlbGV0ZS1yb290IGxhdGVyIHRvIG1haW50KS4KKworICogUmVhY2hhYmlsaXR5IGNoZWNrICh1c2VkIGluICJnaXQgcHJ1bmUiIGFuZCBmcmllbmRzKSBkaWQgbm90IGFkZCBhCisgICBkZXRhY2hlZCBIRUFEIGFzIGEgc3RhcnRpbmcgcG9pbnQgdG8gdHJhdmVyc2Ugb2JqZWN0cyBzdGlsbCBpbiB1c2UuCisgICAobWVyZ2UgYzQwZmRkMCBtay9yZWFjaGFibGUtcHJvdGVjdC1kZXRhY2hlZC1oZWFkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb25maWcgLS1hZGQgc2VjdGlvbi52YXIgdmFsIiB3aGVuIHNlY3Rpb24udmFyIGFscmVhZHkgaGFzIGFuCisgICBlbXB0eS1zdHJpbmcgdmFsdWUgdXNlZCB0byBsb3NlIHRoZSBlbXB0eS1zdHJpbmcgdmFsdWUuCisgICAobWVyZ2UgYzEwNjNiZSB0YS9jb25maWctYWRkLXRvLWVtcHR5LW9yLXRydWUtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmc2NrIiBmYWlsZWQgdG8gcmVwb3J0IHRoYXQgaXQgZm91bmQgY29ycnVwdCBvYmplY3RzIHZpYSBpdHMKKyAgIGV4aXQgc3RhdHVzIGluIHNvbWUgY2FzZXMuCisgICAobWVyZ2UgMzBkMTAzOCBqay9mc2NrLWV4aXQtY29kZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBVc2Ugb2YgdGhlICItLXZlcmJvc2UiIG9wdGlvbiB1c2VkIHRvIGJyZWFrICJnaXQgYnJhbmNoIC0tbWVyZ2VkIi4KKyAgIChtZXJnZSAxMjk5NGRkIGprL21haW50LWJyYW5jaC12ZXJib3NlLW1lcmdlZCBsYXRlciB0byBtYWludCkuCisKKyAqIFNvbWUgTVVBcyBtYW5nbGUgYSBsaW5lIGluIGEgbWVzc2FnZSB0aGF0IGJlZ2lucyB3aXRoICJGcm9tICIgdG8KKyAgICI+RnJvbSAiIHdoZW4gd3JpdGluZyB0byBhIG1haWxib3ggZmlsZSwgYW5kIGZlZWRpbmcgc3VjaCBhbiBpbnB1dAorICAgdG8gImdpdCBhbSIgdXNlZCB0byBsb3NlIHN1Y2ggYSBsaW5lLgorICAgKG1lcmdlIDg1ZGU4NmEgamsvbWJveC1mcm9tLWxpbmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAicmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgJG5hbWUiIGlzIG1lYW50IHRvIHF1aWV0bHkgZXhpdCB3aXRoIGEKKyAgIG5vbi16ZXJvIHN0YXR1cyB3aGVuICRuYW1lIGlzIG5vdCBhIHZhbGlkIG9iamVjdCBuYW1lLCBidXQgc3RpbGwKKyAgIGdhdmUgZXJyb3IgbWVzc2FnZXMgaW4gc29tZSBjYXNlcy4KKworICogQSBoYW5kZnVsIG9mIEMgc291cmNlIGZpbGVzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGluY2x1ZGUKKyAgICJnaXQtY29tcGF0LXV0aWwuaCIgYXMgdGhlIGZpcnN0IHRoaW5nLCB0byBjb25mb3JtIGJldHRlciB0byBvdXIKKyAgIGNvZGluZyBndWlkZWxpbmVzLgorICAgKG1lcmdlIDFjNGI2NjAgZGEvaW5jbHVkZS1jb21wYXQtdXRpbC1maXJzdC1pbi1jIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHQ3MDA0IHRlc3QsIHdoaWNoIHRyaWVkIHRvIHJ1biBHaXQgd2l0aCBzbWFsbCBzdGFjayBzcGFjZSwgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gdXNlIGEgYml0IGxhcmdlciBzdGFjayB0byBhdm9pZCBmYWxzZSBicmVha2FnZSBvbiBzb21lCisgICBwbGF0Zm9ybXMuCisgICAobWVyZ2UgYjlhMTkwNyBzay90YWctY29udGFpbnMtd28tcmVjdXJzaW9uIGxhdGVyIHRvIG1haW50KS4KKworICogQSBmZXcgZG9jdW1lbnRhdGlvbiBwYWdlcyBoYWQgZXhhbXBsZSBzZWN0aW9ucyBtYXJrZWQgdXAgbm90IHF1aXRlCisgICBjb3JyZWN0bHksIHdoaWNoIHBhc3NlZCBBc2NpaURvYyBidXQgZmFpbGVkIHdpdGggQXNjaWlEb2N0b3IuCisgICAobWVyZ2UgYzMwYzQzYyBiYy9hc2NpaWRvYy1wcmV0dHktZm9ybWF0cy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGY4YTQ4YWYgYmMvYXNjaWlkb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0d2ViIiB1c2VkIGRlcHJlY2F0ZWQgQ0dJOjpzdGFydGZyb20sIHdoaWNoIHdhcyByZW1vdmVkIGZyb20KKyAgIENHSS5wbSBhcyBvZiA0LjA0OyB1c2UgQ0dJOjpzdGFydF9mcm9tIGluc3RlYWQuCisgICAobWVyZ2UgNDc1MGY0YiBybS9naXR3ZWItc3RhcnQtZm9ybSBsYXRlciB0byBtYWludCkuCisKKyAqIE5ld2VyIHZlcnNpb25zIG9mICdtZWxkJyBicmVhayB0aGUgYXV0by1kZXRlY3Rpb24gd2UgdXNlIHRvIHNlZSBpZgorICAgdGhleSBhcmUgbmV3IGVub3VnaCB0byBzdXBwb3J0IHRoZSBgLS1vdXRwdXRgIG9wdGlvbi4KKyAgIChtZXJnZSBiMTJkMDQ1IGRhL21lcmdldG9vbC1tZWxkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwYWNrLW9iamVjdHMiIGZvcmdvdCB0byBkaXNhYmxlIHRoZSBjb2RlcGF0aCB0byBnZW5lcmF0ZSB0aGUKKyAgIG9iamVjdCByZWFjaGFiaWxpdHkgYml0bWFwIHdoZW4gaXQgbmVlZHMgdG8gc3BsaXQgdGhlIHJlc3VsdGluZworICAgcGFjay4KKyAgIChtZXJnZSAyMTEzNDcxIGprL3BhY2stb2JqZWN0cy1uby1iaXRtYXAtd2hlbi1zcGxpdHRpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0byB1c2UgY2FjaGUtdHJlZSB0cnVzdGVkIHRoZSBvbi1kaXNrIGRhdGEgdG9vIG11Y2ggYW5kCisgICBmZWxsIGludG8gYW4gaW5maW5pdGUgbG9vcCB1cG9uIHNlZWluZyBhbiBpbmNvcnJlY3RseSByZWNvcmRlZAorICAgaW5kZXggZmlsZS4KKyAgIChtZXJnZSA3MjlkYmJkIGprL2NhY2hlLXRyZWUtcHJvdGVjdC1mcm9tLWJyb2tlbi1saWJnaXQyIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmZXRjaCIgaW50byBhIHJlcG9zaXRvcnkgd2hlcmUgYnJhbmNoIEIgd2FzIGRlbGV0ZWQgZWFybGllciwKKyAgIGJhY2sgd2hlbiBpdCBoYWQgcmVmbG9nIGVuYWJsZWQsIGFuZCB0aGVuIGJyYW5jaCBCL0MgaXMgZmV0Y2hlZAorICAgaW50byBpdCB3aXRob3V0IHJlZmxvZyBlbmFibGVkLCB3aGljaCBpcyBhcmd1YWJseSBhbiB1bmxpa2VseQorICAgY29ybmVyIGNhc2UsIHVubmVjZXNzYXJpbHkgZmFpbGVkLgorICAgKG1lcmdlIGFhZTgyOGIgamsvZmV0Y2gtcmVmbG9nLWRmLWNvbmZsaWN0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBsb2cgLS1maXJzdC1wYXJlbnQgLUwuLi4iIHVzZWQgdG8gY3Jhc2guCisgICAobWVyZ2UgYTg3ODdjNSB0bS9saW5lLWxvZy1maXJzdC1wYXJlbnQgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMi4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNWEzY2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMS50eHQKQEAgLTAsMCArMSwzNCBAQAorR2l0IHYyLjIuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMgorLS0tLS0tLS0tLS0tLS0tLQorCisgKiBXZSB1c2VkIHRvIGFsbG93IGNvbW1pdHRpbmcgYSBwYXRoICIuR2l0L2NvbmZpZyIgd2l0aCBHaXQgdGhhdCBpcworICAgcnVubmluZyBvbiBhIGNhc2Ugc2Vuc2l0aXZlIGZpbGVzeXN0ZW0sIGJ1dCBhbiBhdHRlbXB0IHRvIGNoZWNrIG91dAorICAgc3VjaCBhIHBhdGggd2l0aCBHaXQgdGhhdCBydW5zIG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtCisgICB3b3VsZCBoYXZlIGNsb2JiZXJlZCAiLmdpdC9jb25maWciLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCB3aGF0CisgICB0aGUgdXNlciB3b3VsZCBoYXZlIGV4cGVjdGVkLiAgR2l0IG5vdyBwcmV2ZW50cyB5b3UgZnJvbSB0cmFja2luZworICAgYSBwYXRoIHdpdGggIi5HaXQiIChpbiBhbnkgY2FzZSBjb21iaW5hdGlvbikgYXMgYSBwYXRoIGNvbXBvbmVudC4KKworICogT24gV2luZG93cywgY2VydGFpbiBwYXRoIGNvbXBvbmVudHMgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gIi5naXQiCisgICBhcmUgbWFwcGVkIHRvICIuZ2l0IiwgZS5nLiAiZ2l0fjEvY29uZmlnIiBpcyB0cmVhdGVkIGFzIGlmIGl0IHdlcmUKKyAgICIuZ2l0L2NvbmZpZyIuICBIRlMrIGhhcyBhIHNpbWlsYXIgaXNzdWUsIHdoZXJlIGNlcnRhaW4gdW5pY29kZQorICAgY29kZXBvaW50cyBhcmUgaWdub3JlZCwgZS5nLiAiLmdcdTIwMGNpdC9jb25maWciIGlzIHRyZWF0ZWQgYXMgaWYKKyAgIGl0IHdlcmUgIi5naXQvY29uZmlnIi4gIFBhdGhuYW1lcyB3aXRoIHRoZXNlIHBvdGVudGlhbCBpc3N1ZXMgYXJlCisgICByZWplY3RlZCBvbiB0aGUgYWZmZWN0ZWQgc3lzdGVtcy4gIEdpdCBvbiBzeXN0ZW1zIHRoYXQgYXJlIG5vdAorICAgYWZmZWN0ZWQgYnkgdGhpcyBpc3N1ZSAoZS5nLiBMaW51eCkgY2FuIGFsc28gYmUgY29uZmlndXJlZCB0bworICAgcmVqZWN0IHRoZW0gdG8gZW5zdXJlIGNyb3NzIHBsYXRmb3JtIGludGVyb3BlcmFiaWxpdHkgb2YgdGhlIGhvc3RlZAorICAgcHJvamVjdHMuCisKKyAqICJnaXQgZnNjayIgbm90aWNlcyBhIHRyZWUgb2JqZWN0IHRoYXQgcmVjb3JkcyBzdWNoIGEgcGF0aCB0aGF0IGNhbgorICAgYmUgY29uZnVzZWQgd2l0aCAiLmdpdCIsIGFuZCB3aXRoIHJlY2VpdmUuZnNja09iamVjdHMgY29uZmlndXJhdGlvbgorICAgc2V0IHRvIHRydWUsIGFuIGF0dGVtcHQgdG8gImdpdCBwdXNoIiBzdWNoIGEgdHJlZSBvYmplY3Qgd2lsbCBiZQorICAgcmVqZWN0ZWQuICBTdWNoIGEgcGF0aCBtYXkgbm90IGJlIGEgcHJvYmxlbSBvbiBhIHdlbGwgYmVoYXZpbmcKKyAgIGZpbGVzeXN0ZW0gYnV0IGluIG9yZGVyIHRvIHByb3RlY3QgdGhvc2Ugb24gSEZTKyBhbmQgb24gY2FzZQorICAgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMsIHRoaXMgY2hlY2sgaXMgZW5hYmxlZCBvbiBhbGwgcGxhdGZvcm1zLgorCitBIGJpZyAidGhhbmtzISIgZm9yIGJyaW5naW5nIHRoaXMgaXNzdWUgdG8gdXMgZ29lcyB0byBvdXIgZnJpZW5kcyBpbgordGhlIE1lcmN1cmlhbCBsYW5kLCBuYW1lbHksIE1hdHQgTWFja2FsbCBhbmQgQXVnaWUgRmFja2xlci4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5YTM1ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4yLjIudHh0CkBAIC0wLDAgKzEsNjMgQEAKK0dpdCB2Mi4yLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjIuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgY2hlY2tvdXQgJHRyZWVpc2ggJHBhdGgiLCB3aGVuICRwYXRoIGluIHRoZSBpbmRleCBhbmQgdGhlCisgICB3b3JraW5nIHRyZWUgYWxyZWFkeSBtYXRjaGVkIHdoYXQgaXMgaW4gJHRyZWVpc2ggYXQgdGhlICRwYXRoLAorICAgc3RpbGwgb3Zlcndyb3RlIHRoZSAkcGF0aCB1bm5lY2Vzc2FyaWx5LgorCisgKiAiZ2l0IGNvbmZpZyAtLWdldC1jb2xvciIgZGlkIG5vdCBwYXJzZSBpdHMgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworICAgY2FyZWZ1bGx5LgorCisgKiBvcGVuKCkgZW11bGF0ZWQgb24gV2luZG93cyBwbGF0Zm9ybXMgZGlkIG5vdCBnaXZlIEVJU0RJUiB1cG9uCisgICBhbiBhdHRlbXB0IHRvIG9wZW4gYSBkaXJlY3RvcnkgZm9yIHdyaXRpbmcuCisKKyAqIEEgZmV3IGNvZGUgcGF0aHMgdXNlZCBhYnMoKSB3aGVuIHRoZXkgc2hvdWxkIGhhdmUgdXNlZCBsYWJzKCkgb24KKyAgIGxvbmcgaW50ZWdlcnMuCisKKyAqICJnaXR3ZWIiIHVzZWQgdG8gZGVwZW5kIG9uIGEgYmVoYXZpb3VyIHJlY2VudCBDR0kucG0gZGVwcmVjYXRlZC4KKworICogImdpdCBpbml0IiAoaGVuY2UgImdpdCBjbG9uZSIpIGluaXRpYWxpemVkIHRoZSBwZXItcmVwb3NpdG9yeQorICAgY29uZmlndXJhdGlvbiBmaWxlIC5naXQvY29uZmlnIHdpdGggeC1iaXQgYnkgbWlzdGFrZS4KKworICogR2l0IDIuMCB3YXMgc3VwcG9zZWQgdG8gbWFrZSB0aGUgInNpbXBsZSIgbW9kZSBmb3IgdGhlIGRlZmF1bHQgb2YKKyAgICJnaXQgcHVzaCIsIGJ1dCBpdCBkaWRuJ3QuCisKKyAqICJFdmVyeWRheSIgZG9jdW1lbnQgaGFkIGEgYnJva2VuIGxpbmsuCisKKyAqIFRoZSBidWlsZCBwcm9jZWR1cmUgZGlkIG5vdCBib3RoZXIgZml4aW5nIHBlcmwgYW5kIHB5dGhvbiBzY3JpcHRzCisgICB3aGVuIE5PX1BFUkwgYW5kIE5PX1BZVEhPTiBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gY2hhbmdlZC4KKworICogVGhlIGNvZGUgdGhhdCByZWFkcyB0aGUgcmVmbG9nIGZyb20gdGhlIG5ld2VyIHRvIHRoZSBvbGRlciBlbnRyaWVzCisgICBkaWQgbm90IGhhbmRsZSBhbiBlbnRyeSB0aGF0IGNyb3NzZXMgYSBib3VuZGFyeSBvZiBibG9jayBpdCB1c2VzIHRvCisgICByZWFkIHRoZW0gY29ycmVjdGx5LgorCisgKiAiZ2l0IGFwcGx5IiB3YXMgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIHRvIHRha2UgLS1pZ25vcmUtZGF0ZQorICAgb3B0aW9uLCB3aGljaCBpdCBkb2VzIG5vdC4KKworICogVHJhZGl0aW9uYWxseSB3ZSB0cmllZCB0byBhdm9pZCBpbnRlcnByZXRpbmcgZGF0ZSBzdHJpbmdzIGdpdmVuIGJ5CisgICB0aGUgdXNlciBhcyBmdXR1cmUgZGF0ZXMsIGUuZy4gR0lUX0NPTU1JVFRFUl9EQVRFPTIwMTQtMTItMTAgd2hlbgorICAgdXNlZCBlYXJseSBOb3ZlbWJlciAyMDE0IHdhcyB0YWtlbiBhcyAiT2N0b2JlciAxMiwgMjAxNCIgYmVjYXVzZSBpdAorICAgaXMgbGlrZWx5IHRoYXQgYSBkYXRlIGluIHRoZSBmdXR1cmUsIERlY2VtYmVyIDEwLCBpcyBhIG1pc3Rha2UuCisgICBUaGlzIGhldXJpc3RpY3MgaGFzIGJlZW4gbG9vc2VuZWQgdG8gYWxsb3cgcGVvcGxlIHRvIGV4cHJlc3MgZnV0dXJlCisgICBkYXRlcyAobW9zdCBub3RhYmx5LCAtLXVudGlsPTxkYXRlPiBtYXkgd2FudCB0byBiZSBmYXIgaW4gdGhlCisgICBmdXR1cmUpIGFuZCB3ZSBubyBsb25nZXIgdGllYnJlYWsgYnkgZnV0dXJlLW5lc3Mgb2YgdGhlIGRhdGUgd2hlbgorCisgICAgKDEpIElTTy1saWtlIGZvcm1hdCBpcyB1c2VkLCBhbmQKKyAgICAoMikgdGhlIHN0cmluZyBjYW4gbWFrZSBzZW5zZSBpbnRlcnByZXRlZCBhcyBib3RoIHktbS1kIGFuZCB5LWQtbS4KKworICAgR2l0IG1heSBzdGlsbCBoYXZlIHRvIHVzZSB0aGUgaGV1cmlzdGljcyB0byB0aWVicmVhayBiZXR3ZWVuIGRkL21tL3l5CisgICBhbmQgbW0vZGQveXksIHRob3VnaC4KKworICogVGhlIGNvZGUgdG8gYWJicmV2aWF0ZSBhbiBvYmplY3QgbmFtZSB0byBpdHMgc2hvcnQgdW5pcXVlIHByZWZpeAorICAgaGFzIGJlZW4gb3B0aW1pemVkIHdoZW4gbm8gYWJicmV2aWF0aW9uIHdhcyByZXF1ZXN0ZWQuCisKKyAqICJnaXQgYWRkIC0taWdub3JlLWVycm9ycyAuLi4iIGRpZCBub3QgaWdub3JlIGFuIGVycm9yIHRvCisgICBnaXZlIGEgZmlsZSB0aGF0IGRpZCBub3QgZXhpc3QuCisKKyAqIEdpdCBkaWQgbm90IGNvcnJlY3RseSByZWFkIGFuIG92ZXJsb25nIHJlZm5hbWUgZnJvbSBhIHBhY2tlZCByZWZzCisgICBmaWxlLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMy50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMi4zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmZmZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjIuMy50eHQKQEAgLTAsMCArMSw5IEBACitHaXQgdjIuMi4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4yLjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGhhbmRmdWwgb2YgY29kZXBhdGhzIHRoYXQgdXNlZCB0byB1c2UgZml4ZWQtc2l6ZWQgYXJyYXlzIHRvIGhvbGQKKyAgIHBhdGhuYW1lcyBoYXZlIGJlZW4gY29ycmVjdGVkIHRvIHVzZSBzdHJidWYgYW5kIG90aGVyIG1lY2hhbmlzbXMgdG8KKyAgIGFsbG93IGxvbmdlciBwYXRobmFtZXMgd2l0aG91dCBmZWFyaW5nIG92ZXJmbG93cy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjAudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNjNjM5YwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjAudHh0CkBAIC0wLDAgKzEsMzAwIEBACitHaXQgdjIuMyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgb25lIGVuZGVkIHVwIHRvIGJlIGEgcmVsZWFzZSB3aXRoIGxvdHMgb2Ygc21hbGwgY29ycmVjdGlvbnMgYW5kCitpbXByb3ZlbWVudHMgd2l0aG91dCBiaWcgdW5jb21mb3J0YWJseSBleGNpdGluZyBmZWF0dXJlcy4gIFRoZSByZWNlbnQKK3NlY3VyaXR5IGZpeCB0aGF0IHdlbnQgdG8gMi4yLjEgYW5kIG9sZGVyIG1haW50ZW5hbmNlIHRyYWNrcyBpcyBhbHNvCitjb250YWluZWQgaW4gdGhpcyB1cGRhdGUuCisKKworVXBkYXRlcyBzaW5jZSB2Mi4yCistLS0tLS0tLS0tLS0tLS0tLS0KKworUG9ydHMKKworICogUmVjZW50IGdjYyB0b29sY2hhaW4gb24gQ3lnd2luIHN0YXJ0ZWQgdGhyb3dpbmcgY29tcGlsYXRpb24gd2FybmluZywKKyAgIHdoaWNoIGhhcyBiZWVuIHNxdWVsY2hlZC4KKworICogQSBmZXcgdXBkYXRlcyB0byBidWlsZCBvbiBwbGF0Zm9ybXMgdGhhdCBsYWNrIHR2X25zZWMsCisgICBjbG9ja19nZXR0aW1lLCBDTE9DS19NT05PVE9OSUMgYW5kIEhNQUNfQ1RYX2NsZWFudXAgKGUuZy4gb2xkZXIKKyAgIFJIRUwpIGhhdmUgYmVlbiBhZGRlZC4KKworCitVSSwgV29ya2Zsb3dzICYgRmVhdHVyZXMKKworICogSXQgd2FzIGN1bWJlcnNvbWUgdG8gdXNlICJHSVRfU1NIIiBtZWNoYW5pc20gd2hlbiB0aGUgdXNlciB3YW50ZWQKKyAgIHRvIHBhc3MgYW4gZXh0cmEgc2V0IG9mIGFyZ3VtZW50cyB0byB0aGUgdW5kZXJseWluZyBzc2guICBBIG5ldworICAgZW52aXJvbm1lbnQgdmFyaWFibGUgR0lUX1NTSF9DT01NQU5EIGNhbiBiZSB1c2VkIGZvciB0aGlzLgorCisgKiBBIHJlcXVlc3QgdG8gc3RvcmUgYW4gZW1wdHkgbm90ZSB2aWEgImdpdCBub3RlcyIgbWVhbnQgdG8gcmVtb3ZlCisgICBub3RlIGZyb20gdGhlIG9iamVjdCBidXQgd2l0aCAtLWFsbG93LWVtcHR5IHdlIHdpbGwgc3RvcmUgYQorICAgKHN1cnByaXNlISkgIG5vdGUgdGhhdCBpcyBlbXB0eS4KKworICogImdpdCBpbnRlcnByZXQtdHJhaWxlcnMiIGxlYXJuZWQgdG8gcHJvcGVybHkgaGFuZGxlIHRoZQorICAgIkNvbmZsaWN0czoiIGJsb2NrIGF0IHRoZSBlbmQuCisKKyAqICJnaXQgYW0iIGxlYXJuZWQgIi0tbWVzc2FnZS1pZCIgb3B0aW9uIHRvIGNvcHkgdGhlIG1lc3NhZ2UgSUQgb2YKKyAgIHRoZSBpbmNvbWluZyBlLW1haWwgdG8gdGhlIGxvZyBtZXNzYWdlIG9mIHJlc3VsdGluZyBjb21taXQuCisKKyAqICJnaXQgY2xvbmUgLS1yZWZlcmVuY2U9PG92ZXIgdGhlcmU+IiBsZWFybmVkIHRoZSAiLS1kaXNzb2NpYXRlIgorICAgb3B0aW9uIHRvIGdvIHdpdGggaXQ7IGl0IGJvcnJvd3Mgb2JqZWN0cyBmcm9tIHRoZSByZWZlcmVuY2Ugb2JqZWN0CisgICBzdG9yZSB3aGlsZSBjbG9uaW5nIG9ubHkgdG8gcmVkdWNlIG5ldHdvcmsgdHJhZmZpYyBhbmQgdGhlbgorICAgZGlzc29jaWF0ZXMgdGhlIHJlc3VsdGluZyBjbG9uZSBmcm9tIHRoZSByZWZlcmVuY2UgYnkgcGVyZm9ybWluZworICAgbG9jYWwgY29waWVzIG9mIGJvcnJvd2VkIG9iamVjdHMuCisKKyAqICJnaXQgc2VuZC1lbWFpbCIgbGVhcm5lZCAiLS10cmFuc2Zlci1lbmNvZGluZyIgb3B0aW9uIHRvIGZvcmNlIGEKKyAgIG5vbi1mYXVsdCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nIGhlYWRlciAoZS5nLiBiYXNlNjQpLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIG5vcm1hbGx5IGlkZW50aWZpZXMgaXRzZWxmIHZpYSBYLU1haWxlcjogaGVhZGVyIGluCisgICB0aGUgbWVzc2FnZSBpdCBzZW5kcyBvdXQuICBBIG5ldyBjb21tYW5kIGxpbmUgZmxhZyAtLW5vLXhtYWlsZXIKKyAgIGFsbG93cyB0aGUgdXNlciB0byBzcXVlbGNoIHRoZSBoZWFkZXIuCisKKyAqICJnaXQgcHVzaCIgaW50byBhIHJlcG9zaXRvcnkgd2l0aCBhIHdvcmtpbmcgdHJlZSBub3JtYWxseSByZWZ1c2VzCisgICB0byBtb2RpZnkgdGhlIGJyYW5jaCB0aGF0IGlzIGNoZWNrZWQgb3V0LiAgVGhlIGNvbW1hbmQgbGVhcm5lZCB0bworICAgb3B0aW9uYWxseSBkbyBhbiBlcXVpdmFsZW50IG9mICJnaXQgcmVzZXQgLS1oYXJkIiBvbmx5IHdoZW4gdGhlcmUKKyAgIGlzIG5vIGNoYW5nZSB0byB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXggaW5zdGVhZCwgd2hpY2ggd291bGQKKyAgIGJlIHVzZWZ1bCB0byAiZGVwbG95IiBieSBwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5LgorCisgKiAiZ2l0IG5ldy13b3JrZGlyIiAoaW4gY29udHJpYi8pIGNhbiBiZSB1c2VkIHRvIHBvcHVsYXRlIGFuIGVtcHR5CisgICBhbmQgZXhpc3RpbmcgZGlyZWN0b3J5IG5vdy4KKworICogQ3JlZGVudGlhbCBoZWxwZXJzIGFyZSBhc2tlZCBpbiB0dXJuIHVudGlsIG9uZSBvZiB0aGVtIGdpdmUKKyAgIHBvc2l0aXZlIHJlc3BvbnNlLCB3aGljaCBpcyBjdW1iZXJzb21lIHRvIHR1cm4gb2ZmIHdoZW4geW91IG5lZWQgdG8KKyAgIHJ1biBHaXQgaW4gYW4gYXV0b21hdGVkIHNldHRpbmcuICBUaGUgY3JlZGVudGlhbCBoZWxwZXIgaW50ZXJmYWNlCisgICBsZWFybmVkIHRvIGFsbG93IGEgaGVscGVyIHRvIHNheSAic3RvcCwgZG9uJ3QgYXNrIG90aGVyIGhlbHBlcnMuIgorICAgQWxzbyBHSVRfVEVSTUlOQUxfUFJPTVBUIGVudmlyb25tZW50IGNhbiBiZSBzZXQgdG8gZmFsc2UgdG8gZGlzYWJsZQorICAgb3VyIGJ1aWx0LWluIHByb21wdCBtZWNoYW5pc20gZm9yIHBhc3N3b3Jkcy4KKworICogImdpdCBicmFuY2ggLWQiIChkZWxldGUpIGFuZCAiZ2l0IGJyYW5jaCAtbSIgKG1vdmUpIGxlYXJuZWQgdG8KKyAgIGhvbm9yICItZiIgKGZvcmNlKSBmbGFnOyB1bmxpa2UgbWFueSBvdGhlciBzdWJjb21tYW5kcywgdGhlIHdheSB0bworICAgZm9yY2UgdGhlc2UgaGF2ZSBiZWVuIHdpdGggc2VwYXJhdGUgIi1ELy1NIiBvcHRpb25zLCB3aGljaCB3YXMKKyAgIGluY29uc2lzdGVudC4KKworICogImRpZmYtaGlnaGxpZ2h0IiBmaWx0ZXIgKGluIGNvbnRyaWIvKSBhbGxvd3MgaXRzIGNvbG9yIG91dHB1dCB0byBiZQorICAgY3VzdG9taXplZCB2aWEgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBsZWFybmVkIHRvIHRha2UgIi12IiAodmVyYm9zZSkgYW5kICItcSIgKHF1aWV0KQorICAgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKKyAqICJnaXQgcmVtb3RlIGFkZCAkbmFtZSAkVVJMIiBpcyBub3cgYWxsb3dlZCB3aGVuICJ1cmwuJFVSTC5pbnN0ZWFkT2YiCisgICBpcyBhbHJlYWR5IGRlZmluZWQuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBub3cgY2FuIGJlIGJ1aWx0IHRvIHVzZSBjVVJMIGxpYnJhcnkgdG8gdGFsayB0bworICAgSU1BUCBzZXJ2ZXJzIChpZiB0aGUgbGlicmFyeSBpcyByZWNlbnQgZW5vdWdoLCBvZiBjb3Vyc2UpLgorICAgVGhpcyBhbGxvd3MgeW91IHRvIHVzZSBhdXRoZW50aWNhdGUgbWV0aG9kIG90aGVyIHRoYW4gQ1JBTS1NRDUsCisgICBhbW9uZyBvdGhlciB0aGluZ3MuCisKKyAqICJnaXQgaW1hcC1zZW5kIiBub3cgYWxsb3dzIEdJVF9DVVJMX1ZFUkJPU0UgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KKyAgIGNvbnRyb2wgdGhlIHZlcmJvc2l0eSB3aGVuIHRhbGtpbmcgdmlhIHRoZSBjVVJMIGxpYnJhcnkuCisKKyAqIFRoZSBwcm9tcHQgc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCB0byBvcHRpb25hbGx5IGhpZGUgcHJvbXB0CisgICB3aGVuIGluIGFuIGlnbm9yZWQgZGlyZWN0b3J5IGJ5IHNldHRpbmcgR0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVECisgICBzaGVsbCB2YXJpYWJsZS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBFYXJsaWVyIHdlIG1hZGUgInJldi1saXN0IC0tb2JqZWN0LWVkZ2UiIG1vcmUgYWdncmVzc2l2ZWx5IGxpc3QgdGhlCisgICBvYmplY3RzIGF0IHRoZSBlZGdlIGNvbW1pdHMsIGluIG9yZGVyIHRvIHJlZHVjZSBudW1iZXIgb2Ygb2JqZWN0c+OAgAorICAgZmV0Y2hlZCBpbnRvIGEgc2hhbGxvdyByZXBvc2l0b3J5LCBidXQgdGhlIGNoYW5nZSBhZmZlY3RlZCBjYXNlcworICAgb3RoZXIgdGhhbiAiZmV0Y2hpbmcgaW50byBhIHNoYWxsb3cgcmVwb3NpdG9yeSIgYW5kIG1hZGUgaXQKKyAgIHVudXNhYmx5IHNsb3cgKGUuZy4gZmV0Y2hpbmcgaW50byBhIG5vcm1hbCByZXBvc2l0b3J5IHNob3VsZCBub3QKKyAgIGhhdmUgdG8gc3VmZmVyIHRoZSBvdmVyaGVhZCBmcm9tIGV4dHJhIHByb2Nlc3NpbmcpLiAgTGltaXQgaXQgdG8gYQorICAgbW9yZSBzcGVjaWZpYyBjYXNlIGJ5IGludHJvZHVjaW5nIC0tb2JqZWN0cy1lZGdlLWFnZ3Jlc3NpdmUsIGEgbmV3CisgICBvcHRpb24gdG8gcmV2LWxpc3QuCisKKyAqIFNxdWVsY2hlZCB1c2VsZXNzIGNvbXBpbGVyIHdhcm5pbmdzIG9uIE1hYyBPUyBYIHJlZ2FyZGluZyB0aGUKKyAgIGNyeXB0byBBUEkuCisKKyAqIFRoZSBwcm9jZWR1cmUgdG8gZ2VuZXJhdGUgdW5pY29kZSB0YWJsZSBoYXMgYmVlbiBzaW1wbGlmaWVkLgorCisgKiBTb21lIGZpbGVzeXN0ZW1zIGFzc2lnbiBmaWxlbW9kZXMgaW4gYSBzdHJhbmdlIHdheSwgZm9vbGluZyB0aGVuCisgICBhdXRvbWF0aWMgImZpbGVtb2RlIHRydXN0YWJpbGl0eSIgY2hlY2sgZG9uZSBkdXJpbmcgYSBuZXcKKyAgIHJlcG9zaXRvcnkgY3JlYXRpb24uICBUaGUgaW5pdGlhbGl6YXRpb24gY29kZXBhdGggaGFzIGJlZW4gaGFyZGVuZWQKKyAgIGFnYWluc3QgdGhpcyBpc3N1ZS4KKworICogVGhlIGNvZGVwYXRoIGluICJnaXQgcmVtb3RlIHVwZGF0ZSAtLXBydW5lIiB0byBkcm9wIG1hbnkgcmVmcyBoYXMKKyAgIGJlZW4gb3B0aW1pemVkLgorCisgKiBUaGUgQVBJIGludG8gZ2V0X21lcmdlX2Jhc2VzKigpIGZhbWlseSBvZiBmdW5jdGlvbnMgd2FzIGVhc3kgdG8KKyAgIG1pc3VzZSwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkIHRvIG1ha2UgaXQgaGFyZGVyIHRvIGRvIHNvLgorCisgKiBMb25nIG92ZXJkdWUgZGVwYXJ0dXJlIGZyb20gdGhlIGFzc3VtcHRpb24gdGhhdCBTX0lGTVQgaXMgc2hhcmVkIGJ5CisgICBldmVyeWJvZHkgbWFkZSBpbiAyMDA1LCB3aGljaCB3YXMgbmVjZXNzYXJ5IHRvIHBvcnQgdG8gei9PUy4KKworICogImdpdCBwdXNoIiBhbmQgImdpdCBmZXRjaCIgZGlkIG5vdCBjb21tdW5pY2F0ZSBhbiBvdmVybG9uZyByZWZuYW1lCisgICBjb3JyZWN0bHkuICBOb3cgaXQgdXNlcyA2NGtCIHNpZGViYW5kIHRvIGFjY29tbW9kYXRlIGxvbmdlciBvbmVzLgorCisgKiBSZWNlbnQgR1BHIGNoYW5nZXMgdGhlIGtleXJpbmcgZm9ybWF0IGFuZCBkcm9wcyBzdXBwb3J0IGZvciBSRkMxOTkxCisgICBmb3JtYXR0ZWQgc2lnbmF0dXJlcywgYnJlYWtpbmcgb3VyIGV4aXN0aW5nIHRlc3RzLgorCisgKiAiZ2l0LXByb21wdCIgKGluIGNvbnRyaWIvKSB1c2VkIGEgdmFyaWFibGUgZnJvbSB0aGUgZ2xvYmFsIHNjb3BlLAorICAgcG9zc2libHkgY29udGFtaW5hdGluZyBlbmQtdXNlcidzIG5hbWVzcGFjZS4KKworCitBbHNvIGNvbnRhaW5zIHZhcmlvdXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCBjb2RlIGNsZWFuLXVwcy4KKworCitGaXhlcyBzaW5jZSB2Mi4yCistLS0tLS0tLS0tLS0tLS0tCisKK1VubGVzcyBvdGhlcndpc2Ugbm90ZWQsIGFsbCB0aGUgZml4ZXMgc2luY2UgdjIuMiBpbiB0aGUgbWFpbnRlbmFuY2UKK3RyYWNrIGFyZSBjb250YWluZWQgaW4gdGhpcyByZWxlYXNlIChzZWUgdGhlIG1haW50ZW5hbmNlIHJlbGVhc2VzJworbm90ZXMgZm9yIGRldGFpbHMpLgorCisgKiAiZ2l0IGh0dHAtcHVzaCIgb3ZlciBXZWJEQVYgKGFrYSBkdW1iIGh0dHAtcHVzaCkgd2FzIGJyb2tlbiBpbgorICAgdjIuMi4yIHdoZW4gcGFyc2luZyBhIHN5bWJvbGljIHJlZiwgcmVzdWx0aW5nIGluIGEgYm9ndXMgcmVxdWVzdAorICAgdGhhdCBnZXRzIHJlamVjdGVkIGJ5IHJlY2VudCB2ZXJzaW9ucyBvZiBjVVJMIGxpYnJhcnkuCisgICAobWVyZ2UgZjY3ODZjOCBqay9odHRwLXB1c2gtc3ltcmVmLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBsb2dpYyBpbiAiZ2l0IGJpc2VjdCBiYWQgSEVBRCIgZXRjLiB0byBhdm9pZCBmb3JjaW5nIHRoZSB0ZXN0CisgICBvZiB0aGUgY29tbW9uIGFuY2VzdG9yIG9mIGJhZCBhbmQgZ29vZCBjb21taXRzIHdhcyBicm9rZW4uCisgICAobWVyZ2UgMDc5MTNkNSBjYy9iaXNlY3QtcmV2LXBhcnNpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNoZWNrb3V0LWluZGV4IC0tdGVtcD0kdGFyZ2V0ICRwYXRoIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5CisgICBmb3IgcGF0aHMgb3V0c2lkZSB0aGUgY3VycmVudCBzdWJkaXJlY3RvcnkgaW4gdGhlIHByb2plY3QuCisgICAobWVyZ2UgNzRjNGRlNSBlcy9jaGVja291dC1pbmRleC10ZW1wIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHJlcG9ydCBmcm9tICJnaXQgY2hlY2tvdXQiIG9uIGEgYnJhbmNoIHRoYXQgYnVpbGRzIG9uIGFub3RoZXIKKyAgIGxvY2FsIGJyYW5jaCBieSBzZXR0aW5nIGl0cyBicmFuY2guKi5tZXJnZSB0byBicmFuY2ggbmFtZSAobm90IGEKKyAgIGZ1bGwgcmVmbmFtZSkgaW5jb3JyZWN0bHkgc2FpZCB0aGF0IHRoZSB1cHN0cmVhbSBpcyBnb25lLgorICAgKG1lcmdlIDA1ZTczNjggamMvY2hlY2tvdXQtbG9jYWwtdHJhY2stcmVwb3J0IGxhdGVyIHRvIG1haW50KS4KKworICogV2l0aCBUaGUgZ2l0LXByb21wdCBzdXBwb3J0IChpbiBjb250cmliLyksIHVzaW5nIHRoZSBleGl0IHN0YXR1cyBvZgorICAgdGhlIGxhc3QgY29tbWFuZCBpbiB0aGUgcHJvbXB0LCBlLmcuICBQUzE9JyQoX19naXRfcHMxKSAkPyAnLCBkaWQKKyAgIG5vdCB3b3JrIHdlbGwsIGJlY2F1c2UgdGhlIGhlbHBlciBmdW5jdGlvbiBzdG9tcGVkIG9uIHRoZSBleGl0CisgICBzdGF0dXMuCisgICAobWVyZ2UgNmJhYmU3NiB0Zi9wcm9tcHQtcHJlc2VydmUtZXhpdC1zdGF0dXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZWNlbnQgdXBkYXRlIHRvICJnaXQgY29tbWl0IiBicm9rZSBhbWVuZGluZyBhbiBleGlzdGluZyBjb21taXQKKyAgIHdpdGggYm9ndXMgYXV0aG9yL2NvbW1pdHRlciBsaW5lcyB3aXRob3V0IGEgdmFsaWQgZS1tYWlsIGFkZHJlc3MuCisgICAobWVyZ2UgYzgzYTUwOSBqay9jb21taXQtZGF0ZS1hcHByb3hpZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBsb2NrZmlsZSBBUEkgdXNlZCB0byBnZXQgY29uZnVzZWQgd2hpY2ggZmlsZSB0byBjbGVhbiB1cCB3aGVuCisgICB0aGUgcHJvY2VzcyBtb3ZlZCB0aGUgJGN3ZCBhZnRlciBjcmVhdGluZyBhIGxvY2tmaWxlLgorICAgKG1lcmdlIGZhMTM3ZjYgbmQvbG9ja2ZpbGUtYWJzb2x1dGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUcmFkaXRpb25hbGx5IHdlIHRyaWVkIHRvIGF2b2lkIGludGVycHJldGluZyBkYXRlIHN0cmluZ3MgZ2l2ZW4gYnkKKyAgIHRoZSB1c2VyIGFzIGZ1dHVyZSBkYXRlcywgZS5nLiBHSVRfQ09NTUlUVEVSX0RBVEU9MjAxNC0xMi0xMCB3aGVuCisgICB1c2VkIGVhcmx5IE5vdmVtYmVyIDIwMTQgd2FzIHRha2VuIGFzICJPY3RvYmVyIDEyLCAyMDE0IiBiZWNhdXNlIGl0CisgICBpcyBsaWtlbHkgdGhhdCBhIGRhdGUgaW4gdGhlIGZ1dHVyZSwgRGVjZW1iZXIgMTAsIGlzIGEgbWlzdGFrZS4KKyAgIFRoaXMgaGV1cmlzdGljcyBoYXMgYmVlbiBsb29zZW5lZCB0byBhbGxvdyBwZW9wbGUgdG8gZXhwcmVzcyBmdXR1cmUKKyAgIGRhdGVzIChtb3N0IG5vdGFibHksIC0tdW50aWw9PGRhdGU+IG1heSB3YW50IHRvIGJlIGZhciBpbiB0aGUKKyAgIGZ1dHVyZSkgYW5kIHdlIG5vIGxvbmdlciB0aWVicmVhayBieSBmdXR1cmUtbmVzcyBvZiB0aGUgZGF0ZSB3aGVuCisKKyAgICAoMSkgSVNPLWxpa2UgZm9ybWF0IGlzIHVzZWQsIGFuZAorICAgICgyKSB0aGUgc3RyaW5nIGNhbiBtYWtlIHNlbnNlIGludGVycHJldGVkIGFzIGJvdGggeS1tLWQgYW5kIHktZC1tLgorCisgICBHaXQgbWF5IHN0aWxsIGhhdmUgdG8gdXNlIHRoZSBoZXVyaXN0aWNzIHRvIHRpZWJyZWFrIGJldHdlZW4gZGQvbW0veXkKKyAgIGFuZCBtbS9kZC95eSwgdGhvdWdoLgorICAgKG1lcmdlIGQzNzIzOTUgamsvYXBwcm94aWRhdGUtYXZvaWQteS1kLW0tb3Zlci1mdXR1cmUtZGF0ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBHaXQgZGlkIG5vdCBjb3JyZWN0bHkgcmVhZCBhbiBvdmVybG9uZyByZWZuYW1lIGZyb20gYSBwYWNrZWQgcmVmcworICAgZmlsZS4KKyAgIChtZXJnZSBlYTQxNzgzIGprL3JlYWQtcGFja2VkLXJlZnMtd2l0aG91dC1wYXRoLW1heCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYXBwbHkiIHdhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gdG8gdGFrZSAtLWlnbm9yZS1kYXRlCisgICBvcHRpb24sIHdoaWNoIGl0IGRvZXMgbm90LgorICAgKG1lcmdlIDBjZWY0ZTcgcncvYXBwbHktZG9lcy1ub3QtdGFrZS1pZ25vcmUtZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYWRkIC1pIiBkaWQgbm90IG5vdGljZSB3aGVuIHRoZSBpbnRlcmFjdGl2ZSBjb21tYW5kIGlucHV0CisgICBzdHJlYW0gd2VudCBhd2F5IGFuZCBrZXB0IGFza2luZyB0aGUgc2FtZSBxdWVzdGlvbi4KKyAgIChtZXJnZSBhOGJlYzdhIGprL2FkZC1pLXJlYWQtZXJyb3IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGRpZCBub3QgaGFuZGxlIFJGQyAyMDQ3IGVuY29kZWQgaGVhZGVycyBxdWl0ZQorICAgcmlnaHQuCisgICAobWVyZ2UgYWI0N2UyYSByZC9zZW5kLWVtYWlsLTIwNDctZml4IGxhdGVyIHRvIG1haW50KS4KKworICogTmV3IHRhZyBvYmplY3QgZm9ybWF0IHZhbGlkYXRpb24gYWRkZWQgaW4gMi4yIHNob3dlZCBnYXJiYWdlIGFmdGVyCisgICBhIHRhZ25hbWUgaXQgcmVwb3J0ZWQgaW4gaXRzIGVycm9yIG1lc3NhZ2UuCisgICAobWVyZ2UgYTFlOTIwYSBqcy9mc2NrLXRhZy12YWxpZGF0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvZGUgdGhhdCByZWFkcyB0aGUgcmVmbG9nIGZyb20gdGhlIG5ld2VyIHRvIHRoZSBvbGRlciBlbnRyaWVzCisgICBkaWQgbm90IGhhbmRsZSBhbiBlbnRyeSB0aGF0IGNyb3NzZXMgYSBib3VuZGFyeSBvZiBibG9jayBpdCB1c2VzIHRvCisgICByZWFkIHRoZW0gY29ycmVjdGx5LgorICAgKG1lcmdlIDY5MjE2YmYgamsvZm9yLWVhY2gtcmVmbG9nLWVudC1yZXZlcnNlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkaWZmIC1CIC1NIiBhZnRlciBtYWtpbmcgYSBuZXcgY29weSBCIG91dCBvZiBhbiBleGlzdGluZyBmaWxlCisgICBBIGFuZCB0aGVuIGVkaXRpbmcgQSBleHRlbnNpdmVseSBvdWdodCB0byByZXBvcnQgdGhhdCBCIHdhcyBjcmVhdGVkCisgICBieSBjb3B5aW5nIEEgYW5kIEEgd2FzIG1vZGlmaWVkLCB3aGljaCBpcyB3aGF0ICJnaXQgZGlmZiAtQyIKKyAgIHJlcG9ydHMsIGJ1dCBpdCBpbnN0ZWFkIHNhaWQgQSB3YXMgcmVuYW1lZCB0byBCIGFuZCBBIHdhcyBlZGl0ZWQKKyAgIGhlYXZpbHkgaW4gcGxhY2UuICBUaGlzIHdhcyBub3QganVzdCBpbmNvaGVyZW50IGJ1dCBhbHNvIGZhaWxlZCB0bworICAgYXBwbHkgd2l0aCAiZ2l0IGFwcGx5Ii4gIFRoZSByZXBvcnQgaGFzIGJlZW4gY29ycmVjdGVkIHRvIG1hdGNoIHdoYXQKKyAgICJnaXQgZGlmZiAtQyIgcHJvZHVjZXMgZm9yIHRoaXMgY2FzZS4KKyAgIChtZXJnZSA2OTM2YjU4IGpjL2RpZmYtYi1tIGxhdGVyIHRvIG1haW50KS4KKworICogSW4gZmlsZXMgd2UgcHJlLXBvcHVsYXRlIGZvciB0aGUgdXNlciB0byBlZGl0IHdpdGggY29tbWVudGVkIGhpbnRzLAorICAgYSBsaW5lIG9mIGhpbnQgdGhhdCBpcyBpbmRlbnRlZCB3aXRoIGEgdGFiIHVzZWQgdG8gc2hvdyBhcyAnIycgKG9yCisgICBhbnkgY29tbWVudCBjaGFyKSwgJyAnIChzcGFjZSksIGFuZCB0aGVuIHRoZSBoaW50IHRleHQgdGhhdCBiZWdhbgorICAgd2l0aCB0aGUgdGFiLCB3aGljaCBzb21lIGVkaXRvcnMgZmxhZyBhcyBhbiBpbmRlbnRhdGlvbiBlcnJvciAodGFiCisgICBmb2xsb3dpbmcgc3BhY2UpLiAgV2Ugbm93IG9taXQgdGhlIHNwYWNlIGFmdGVyIHRoZSBjb21tZW50IGNoYXIgaW4KKyAgIHN1Y2ggYSBjYXNlLgorICAgKG1lcmdlIGQ1NWFlYjcgamMvc3RyYnVmLWFkZC1saW5lcy1hdm9pZC1zcC1odC1zZXF1ZW5jZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbHMtdHJlZSIgZG9lcyBub3Qgc3VwcG9ydCBwYXRoIHNlbGVjdGlvbiBiYXNlZCBvbiBuZWdhdGl2ZQorICAgcGF0aHNwZWNzLCBidXQgZGlkIG5vdCBlcnJvciBvdXQgd2hlbiBuZWdhdGl2ZSBwYXRoc3BlY3MgYXJlIGdpdmVuLgorICAgKG1lcmdlIGYxZjYyMjQgbmQvbHMtdHJlZS1wYXRoc3BlYyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBmdW5jdGlvbiBzb21ldGltZXMgcmV0dXJuZWQgYSBub24tZnJlZWFibGUgbWVtb3J5IGFuZCBzb21lCisgICBvdGhlciB0aW1lcyByZXR1cm5lZCBhIHBpZWNlIG9mIG1lbW9yeSB0aGF0IG11c3QgYmUgZnJlZWQsIGxlYWRpbmcKKyAgIHRvIGluZXZpdGFibGUgbGVha3MuCisgICAobWVyZ2UgNTkzNjJlNSBqYy9leGVjLWNtZC1zeXN0ZW0tcGF0aC1sZWFrLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIHRvIGFiYnJldmlhdGUgYW4gb2JqZWN0IG5hbWUgdG8gaXRzIHNob3J0IHVuaXF1ZSBwcmVmaXgKKyAgIGhhcyBiZWVuIG9wdGltaXplZCB3aGVuIG5vIGFiYnJldmlhdGlvbiB3YXMgcmVxdWVzdGVkLgorICAgKG1lcmdlIDYxZTcwNGUgbWgvZmluZC11bmlxLWFiYnJldiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYWRkIC0taWdub3JlLWVycm9ycyAuLi4iIGRpZCBub3QgaWdub3JlIGFuIGVycm9yIHRvCisgICBnaXZlIGEgZmlsZSB0aGF0IGRpZCBub3QgZXhpc3QuCisgICAobWVyZ2UgMWQzMWU1YSBtZy9hZGQtaWdub3JlLWVycm9ycyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2hlY2tvdXQgJHRyZWVpc2ggJHBhdGgiLCB3aGVuICRwYXRoIGluIHRoZSBpbmRleCBhbmQgdGhlCisgICB3b3JraW5nIHRyZWUgYWxyZWFkeSBtYXRjaGVkIHdoYXQgaXMgaW4gJHRyZWVpc2ggYXQgdGhlICRwYXRoLAorICAgc3RpbGwgb3Zlcndyb3RlIHRoZSAkcGF0aCB1bm5lY2Vzc2FyaWx5LgorICAgKG1lcmdlIGM1MzI2YmQgamsvY2hlY2tvdXQtZnJvbS10cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb25maWcgLS1nZXQtY29sb3IiIGRpZCBub3QgcGFyc2UgaXRzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKKyAgIGNhcmVmdWxseS4KKyAgIChtZXJnZSBjYjM1NzIyIGprL2NvbG9ycy1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBvcGVuKCkgZW11bGF0ZWQgb24gV2luZG93cyBwbGF0Zm9ybXMgZGlkIG5vdCBnaXZlIEVJU0RJUiB1cG9uCisgICBhbiBhdHRlbXB0IHRvIG9wZW4gYSBkaXJlY3RvcnkgZm9yIHdyaXRpbmcuCisgICAobWVyZ2UgYmE2ZmFkMCBqcy93aW5kb3dzLW9wZW4tZWlzZGlyLWVycm9yIGxhdGVyIHRvIG1haW50KS4KKworICogQSBmZXcgY29kZSBwYXRocyB1c2VkIGFicygpIHdoZW4gdGhleSBzaG91bGQgaGF2ZSB1c2VkIGxhYnMoKSBvbgorICAgbG9uZyBpbnRlZ2Vycy4KKyAgIChtZXJnZSA4MzkxNWJhIHJzL21haW50LWNvbmZpZy11c2UtbGFicyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzFhOGFhMSBycy9yZWNlaXZlLXBhY2stdXNlLWxhYnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0d2ViIiB1c2VkIHRvIGRlcGVuZCBvbiBhIGJlaGF2aW91ciByZWNlbnQgQ0dJLnBtIGRlcHJlY2F0ZWQuCisgICAobWVyZ2UgMTNkYmY0NiBqay9naXR3ZWItd2l0aC1uZXdlci1jZ2ktbXVsdGktcGFyYW0gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGluaXQiIChoZW5jZSAiZ2l0IGNsb25lIikgaW5pdGlhbGl6ZWQgdGhlIHBlci1yZXBvc2l0b3J5CisgICBjb25maWd1cmF0aW9uIGZpbGUgLmdpdC9jb25maWcgd2l0aCB4LWJpdCBieSBtaXN0YWtlLgorICAgKG1lcmdlIDFmMzJlY2YgbWgvY29uZmlnLWZsaXAteGJpdC1iYWNrLWFmdGVyLWNoZWNraW5nIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IHVwZGF0ZSBpbiBHaXQgMi4yIHN0YXJ0ZWQgY3JlYXRpbmcgb2JqZWN0cy9pbmZvL3BhY2tzIGFuZAorICAgaW5mby9yZWZzIGZpbGVzIHdpdGggcGVybWlzc2lvbiBiaXRzIHRpZ2h0ZXIgdGhhbiB1c2VyJ3MgdW1hc2suCisgICAobWVyZ2UgZDkxMTc1YiBqay9wcnVuZS1wYWNrZWQtc2VydmVyLWluZm8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBHaXQgMi4wIHdhcyBzdXBwb3NlZCB0byBtYWtlIHRoZSAic2ltcGxlIiBtb2RlIGZvciB0aGUgZGVmYXVsdCBvZgorICAgImdpdCBwdXNoIiwgYnV0IGl0IGRpZG4ndC4KKyAgIChtZXJnZSAwMGE2ZmEwIGprL3B1c2gtc2ltcGxlIGxhdGVyIHRvIG1haW50KS4KKworICogIkV2ZXJ5ZGF5IiBkb2N1bWVudCBoYWQgYSBicm9rZW4gbGluay4KKyAgIChtZXJnZSAzNjZjOGQ0IHBvL2V2ZXJ5ZGF5LWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgZmV3IHRlc3QgZml4ZXMuCisgICAobWVyZ2UgODgwZWY1OCBqay9uby1wZXJsLXRlc3RzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGJ1aWxkIHByb2NlZHVyZSBkaWQgbm90IGJvdGhlciBmaXhpbmcgcGVybCBhbmQgcHl0aG9uIHNjcmlwdHMKKyAgIHdoZW4gTk9fUEVSTCBhbmQgTk9fUFlUSE9OIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBjaGFuZ2VkLgorICAgKG1lcmdlIGNhMjA1MWQgamsvcmVidWlsZC1wZXJsLXNjcmlwdHMtd2l0aC1uby1wZXJsLXNldGluZy1jaGFuZ2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdXNhZ2Ugc3RyaW5nIG9mICJnaXQgbG9nIiBjb21tYW5kIHdhcyBtYXJrZWQgaW5jb3JyZWN0bHkgZm9yCisgICBsMTBuLgorICAgKG1lcmdlIGU2NmRjMGMga20vbG9nLXVzYWdlLXN0cmluZy1pMThuIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIG1pc2hhbmRsZWQgLS1mb3JtYXQ9IiUodXBzdHJlYW06dHJhY2spIiB3aGVuIGEKKyAgIGJyYW5jaCBpcyBtYXJrZWQgdG8gaGF2ZSBmb3JrZWQgZnJvbSBhIG5vbi1leGlzdGluZyBicmFuY2guCisgICAobWVyZ2UgYjYxNjBkOSByYy9mb3ItZWFjaC1yZWYtdHJhY2tpbmcgbGF0ZXIgdG8gbWFpbnQpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjk2MTg2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMS50eHQKQEAgLTAsMCArMSw1MiBAQAorR2l0IHYyLjMuMSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMworLS0tLS0tLS0tLS0tLS0tLQorCisgKiBUaGUgaW50ZXJhY3RpdmUgInNob3cgYSBsaXN0IGFuZCBsZXQgdGhlIHVzZXIgY2hvb3NlIGZyb20gaXQiCisgICBpbnRlcmZhY2UgImFkZCAtaSIgdXNlZCBzaG93ZWQgYW5kIHByb21wdGVkIHRvIHRoZSB1c2VyIGV2ZW4gd2hlbgorICAgdGhlIGNhbmRpZGF0ZSBsaXN0IHdhcyBlbXB0eSwgYWdhaW5zdCB3aGljaCB0aGUgb25seSAiY2hvaWNlIiB0aGUKKyAgIHVzZXIgY291bGQgaGF2ZSBtYWRlIHdhcyB0byBjaG9vc2Ugbm90aGluZy4KKworICogImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiB1c2VkIHRvIHVuZGVyLWFsbG9jYXRlIHRoZSBtZW1vcnkKKyAgIHdoZW4gdGhlIGZpeCByZXN1bHRlZCBpbiBhIGxvbmdlciB0ZXh0IHRoYW4gdGhlIG9yaWdpbmFsIHBhdGNoLgorCisgKiAiZ2l0IGxvZyAtLWhlbHAiIHVzZWQgdG8gc2hvdyByZXYtbGlzdCBvcHRpb25zIHRoYXQgYXJlIGlycmVsZXZhbnQKKyAgIHRvIHRoZSAibG9nIiBjb21tYW5kLgorCisgKiBUaGUgZXJyb3IgbWVzc2FnZSBmcm9tICJnaXQgY29tbWl0Iiwgd2hlbiBhIG5vbi1leGlzdGluZyBhdXRob3IKKyAgIG5hbWUgd2FzIGdpdmVuIGFzIHZhbHVlIHRvIHRoZSAiLS1hdXRob3I9IiBwYXJhbWV0ZXIsIGhhcyBiZWVuCisgICByZXdvcmRlZCB0byBhdm9pZCBtaXN1bmRlcnN0YW5kaW5nLgorCisgKiBBIGJyb2tlbiBwYWNrIC5pZHggZmlsZSBpbiB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgcHJldmVudGVkIHRoZQorICAgZHVtYiBodHRwIHRyYW5zcG9ydCBmcm9tIGZldGNoaW5nIGEgZ29vZCBjb3B5IG9mIGl0IGZyb20gdGhlIG90aGVyCisgICBzaWRlLgorCisgKiBUaGUgZG9jdW1lbnRhdGlvbiBpbmNvcnJlY3RseSBzYWlkIHRoYXQgQyhvcHkpIGFuZCBSKGVuYW1lKSBhcmUgdGhlCisgICBvbmx5IG9uZXMgdGhhdCBjYW4gYmUgZm9sbG93ZWQgYnkgdGhlIHNjb3JlIG51bWJlciBpbiB0aGUgb3V0cHV0IGluCisgICB0aGUgLS1yYXcgZm9ybWF0LgorCisgKiBGaXggYSBtaXNzcGVsbGVkIGNvbmRpdGlvbmFsIHRoYXQgaXMgYWx3YXlzIHRydWUuCisKKyAqIENvZGUgdG8gcmVhZCBicmFuY2ggbmFtZSBmcm9tIHZhcmlvdXMgZmlsZXMgaW4gLmdpdC8gZGlyZWN0b3J5CisgICB3b3VsZCBoYXZlIG1pc2JlaGF2ZWQgaWYgdGhlIGNvZGUgdG8gd3JpdGUgdGhlbSBsZWZ0IGFuIGVtcHR5IGZpbGUuCisKKyAqIFRoZSAiZ2l0IHB1c2giIGRvY3VtZW50YXRpb24gbWFkZSB0aGUgIi0tcmVwbz08dGhlcmU+IiBvcHRpb24KKyAgIGVhc2lseSBtaXN1bmRlcnN0b29kLgorCisgKiBBZnRlciBhdHRlbXB0aW5nIGFuZCBmYWlsaW5nIGEgcGFzc3dvcmQtbGVzcyBhdXRoZW50aWNhdGlvbgorICAgKGUuZy4ga2VyYmVyb3MpLCBsaWJjVVJMIHJlZnVzZXMgdG8gZmFsbCBiYWNrIHRvIHBhc3N3b3JkIGJhc2VkCisgICBCYXNpYyBhdXRoZW50aWNhdGlvbiB3aXRob3V0IGEgYml0IG9mIGhlbHAvZW5jb3VyYWdlbWVudC4KKworICogU2V0dGluZyBkaWZmLnN1Ym1vZHVsZSB0byAnbG9nJyBtYWRlICJnaXQgZm9ybWF0LXBhdGNoIiBwcm9kdWNlCisgICBicm9rZW4gcGF0Y2hlcy4KKworICogImdpdCByZXJlcmUiIChpbnZva2VkIGludGVybmFsbHkgZnJvbSBtYW55IG1lcmd5IG9wZXJhdGlvbnMpIGRpZAorICAgbm90IGNvcnJlY3RseSBzaWduYWwgZXJyb3JzIHdoZW4gdG9sZCB0byB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZQorICAgZmlsZXMgYW5kIGZhaWxlZCB0byBkbyBzbyBmb3Igd2hhdGV2ZXIgcmVhc29uLgorCisgKiAiZ2l0IGJsYW1lIEhFQUQgLS0gbWlzc2luZyIgZmFpbGVkIHRvIGNvcnJlY3RseSBzYXkgIkhFQUQiIHdoZW4gaXQKKyAgIHRyaWVkIHRvIHNheSAiTm8gc3VjaCBwYXRoICdtaXNzaW5nJyBpbiBIRUFEIi4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlIGNsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjEwLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDQyNWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMTAudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2Mi4zLjEwIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMy45CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogeGRpZmYgY29kZSB3ZSB1c2UgdG8gZ2VuZXJhdGUgZGlmZnMgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorICAgZXh0cmVtZWx5IGxhcmdlIGZpbGVzLiAgSXQgdXNlcyAiaW50IiBpbiBtYW55IHBsYWNlcywgd2hpY2ggY2FuCisgICBvdmVyZmxvdyBpZiB3ZSBoYXZlIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgbGluZXMgb3IgZXZlbiBieXRlcyBpbgorICAgb3VyIGlucHV0IGZpbGVzLCBmb3IgZXhhbXBsZS4gIENhcCB0aGUgaW5wdXQgc2l6ZSB0byBzb2Vtd2hlcmUKKyAgIGFyb3VuZCAxR0IgZm9yIG5vdy4KKworICogU29tZSBwcm90b2NvbHMgKGxpa2UgZ2l0LXJlbW90ZS1leHQpIGNhbiBleGVjdXRlIGFyYml0cmFyeSBjb2RlCisgICBmb3VuZCBpbiB0aGUgVVJMLiAgVGhlIFVSTHMgdGhhdCBzdWJtb2R1bGVzIHVzZSBtYXkgY29tZSBmcm9tCisgICBhcmJpdHJhcnkgc291cmNlcyAoZS5nLiwgLmdpdG1vZHVsZXMgZmlsZXMgaW4gYSByZW1vdGUKKyAgIHJlcG9zaXRvcnkpLCBhbmQgY2FuIGh1cnQgdGhvc2Ugd2hvIGJsaW5kbHkgZW5hYmxlIHJlY3Vyc2l2ZQorICAgZmV0Y2guICBSZXN0cmljdCB0aGUgYWxsb3dlZCBwcm90b2NvbHMgdG8gd2VsbCBrbm93biBhbmQgc2FmZQorICAgb25lcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0NjJlNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjIudHh0CkBAIC0wLDAgKzEsNzkgQEAKK0dpdCB2Mi4zLjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjMuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJ1cGRhdGUtaW5kZXggLS1yZWZyZXNoIiB1c2VkIHRvIGxlYWsgd2hlbiBhbiBlbnRyeSBjYW5ub3QgYmUKKyAgIHJlZnJlc2hlZCBmb3Igd2hhdGV2ZXIgcmVhc29uLgorCisgKiAiZ2l0IGZhc3QtaW1wb3J0IiB1c2VkIHRvIGNyYXNoIHdoZW4gaXQgY291bGQgbm90IGNsb3NlIGFuZAorICAgY29uY2x1ZGUgdGhlIHJlc3VsdGluZyBwYWNrZmlsZSBjbGVhbmx5LgorCisgKiAiZ2l0IGJsYW1lIiBkaWVkLCB0cnlpbmcgdG8gZnJlZSBhbiB1bmluaXRpYWxpemVkIHBpZWNlIG9mIG1lbW9yeS4KKworICogImdpdCBtZXJnZS1maWxlIiBkaWQgbm90IHdvcmsgY29ycmVjdGx5IGluIGEgc3ViZGlyZWN0b3J5LgorCisgKiAiZ2l0IHN1Ym1vZHVsZSBhZGQiIGZhaWxlZCB0byBzcXVhc2ggInBhdGgvdG8vLi8uL3N1Ym1vZHVsZSIgdG8KKyAgICJwYXRoL3RvL3N1Ym1vZHVsZSIuCisKKyAqIEluIHYyLjIuMCwgd2UgYnJva2UgImdpdCBwcnVuZSIgdGhhdCBydW5zIGluIGEgcmVwb3NpdG9yeSB0aGF0CisgICBib3Jyb3dzIGZyb20gYW4gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZS4KKworICogQ2VydGFpbiBvbGRlciB2aW50YWdlcyBvZiBjVVJMIGdpdmUgaXJyZWd1bGFyIG91dHB1dCBmcm9tCisgICAiY3VybC1jb25maWcgLS12ZXJudW0iLCB3aGljaCBjb25mdXNlZCBvdXIgYnVpbGQgc3lzdGVtLgorCisgKiBBbiBlYXJsaWVyIHdvcmthcm91bmQgdG8gc3F1ZWxjaCB1bmhlbHBmdWwgZGVwcmVjYXRpb24gd2FybmluZ3MKKyAgIGZyb20gdGhlIGNvbXBpbGVyIG9uIE1hYyBPU1ggdW5uZWNlc3NhcmlseSBzZXQgbWluaW11bSByZXF1aXJlZAorICAgdmVyc2lvbiBvZiB0aGUgT1MsIHdoaWNoIHRoZSB1c2VyIG1pZ2h0IHdhbnQgdG8gcmFpc2UgKG9yIGxvd2VyKQorICAgZm9yIG90aGVyIHJlYXNvbnMuCisKKyAqIExvbmdzdGFuZGluZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWluZyBydWxlcyBoYXMgYmVlbiBhZGRlZCB0bworICAgdGhlIGRvY3VtZW50YXRpb24uCisKKyAqIFRoZSBjcmVkZW50aWFsIGhlbHBlciBmb3IgV2luZG93cyAoaW4gY29udHJpYi8pIHVzZWQgdG8gbWlzaGFuZGxlCisgICBhIHVzZXIgbmFtZSB3aXRoIGFuIGF0LXNpZ24gaW4gaXQuCisKKyAqIE9sZGVyIEdudVBHIGltcGxlbWVudGF0aW9ucyBtYXkgbm90IGNvcnJlY3RseSBpbXBvcnQgdGhlIGtleXJpbmcKKyAgIG1hdGVyaWFsIHdlIHByZXBhcmUgZm9yIHRoZSB0ZXN0cyB0byB1c2UuCisKKyAqIENsYXJpZnkgaW4gdGhlIGRvY3VtZW50YXRpb24gdGhhdCAicmVtb3RlLjxuaWNrPi5wdXNoVVJMIiBhbmQKKyAgICJyZW1vdGUuPG5pY2s+LlVSTCIgYXJlIHRoZXJlIHRvIG5hbWUgdGhlIHNhbWUgcmVwb3NpdG9yeSBhY2Nlc3NlZAorICAgdmlhIGRpZmZlcmVudCB0cmFuc3BvcnRzLCBub3QgdHdvIHNlcGFyYXRlIHJlcG9zaXRvcmllcy4KKworICogVGhlIHBhY2sgYml0bWFwIHN1cHBvcnQgZGlkIG5vdCBidWlsZCB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIEdDQy4KKworICogUmVhZGluZyBjb25maWd1cmF0aW9uIGZyb20gYSBibG9iIG9iamVjdCwgd2hlbiBpdCBlbmRzIHdpdGggYSBsb25lCisgICBDUiwgdXNlIHRvIGNvbmZ1c2UgdGhlIGNvbmZpZ3VyYXRpb24gcGFyc2VyLgorCisgKiBXZSBkaWRuJ3QgZm9ybWF0IGFuIGludGVnZXIgdGhhdCB3b3VsZG4ndCBmaXQgaW4gImludCIgYnV0IGluCisgICAidWludG1heF90IiBjb3JyZWN0bHkuCisKKyAqICJnaXQgcHVzaCAtLXNpZ25lZCIgZ2F2ZSBhbiBpbmNvcnJlY3RseSB3b3JkZWQgZXJyb3IgbWVzc2FnZSB3aGVuCisgICB0aGUgb3RoZXIgc2lkZSBkaWQgbm90IHN1cHBvcnQgdGhlIGNhcGFiaWxpdHkuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgYSByZW1vdGUtaGVscGVyIHRoYXQgY2Fubm90IHJlc3BvbmQgdG8gImxpc3QiCisgICBjb21tYW5kIGNvdWxkIG5vdCBmZXRjaCBmcm9tIGEgc3ltYm9saWMgcmVmZXJlbmNlIGUuZy4gSEVBRC4KKworICogVGhlIGluc24gc2hlZXQgImdpdCByZWJhc2UgLWkiIGNyZWF0ZXMgZGlkIG5vdCBmdWxseSBob25vcgorICAgY29yZS5hYmJyZXYgc2V0dGluZ3MuCisKKyAqIFRoZSB0ZXN0cyB0aGF0IHdhbnRlZCB0byBzZWUgdGhhdCBmaWxlIGJlY29tZXMgdW5yZWFkYWJsZSBhZnRlcgorICAgcnVubmluZyAiY2htb2QgYS1yIGZpbGUiLCBhbmQgdGhlIHRlc3RzIHRoYXQgd2FudGVkIHRvIG1ha2Ugc3VyZSBpdAorICAgaXMgbm90IHJ1biBhcyByb290LCB3ZSB1c2VkICJjYW4gd2Ugd3JpdGUgaW50byB0aGUgLyBkaXJlY3Rvcnk/IiBhcworICAgYSBjaGVhcCBzdWJzdGl0dXRlLCBidXQgb24gc29tZSBwbGF0Zm9ybXMgdGhhdCBpcyBub3QgYSBnb29kCisgICBoZXVyaXN0aWNzLiAgVGhlIHRlc3RzIGFuZCB0aGVpciBwcmVyZXF1aXNpdGVzIGhhdmUgYmVlbiB1cGRhdGVkIHRvCisgICBjaGVjayB3aGF0IHRoZXkgcmVhbGx5IHJlcXVpcmUuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdtYWlsaW5mby5zY2lzc29ycycgd2FzIGhhcmQgdG8KKyAgIGRpc2NvdmVyIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCisgKiBDb3JyZWN0IGEgYnJlYWthZ2UgdG8gZ2l0LXN2biBhcm91bmQgdjIuMiBlcmEgdGhhdCB0cmlnZ2VycworICAgcHJlbWF0dXJlIGNsb3Npbmcgb2YgRmlsZUhhbmRsZS4KKworICogRXZlbiB0aG91Z2ggd2Ugb2ZmaWNpYWxseSBoYXZlbid0IGRyb3BwZWQgUGVybCA1Ljggc3VwcG9ydCwgdGhlCisgICBHZXRvcHQ6OkxvbmcgcGFja2FnZSB0aGF0IGNhbWUgd2l0aCBpdCBkb2VzIG5vdCBzdXBwb3J0ICItLW5vLSIKKyAgIHByZWZpeCB0byBuZWdhdGUgYSBib29sZWFuIG9wdGlvbjsgbWFudWFsbHkgYWRkIHN1cHBvcnQgdG8gaGVscAorICAgcGVvcGxlIHdpdGggb2xkZXIgR2V0b3B0OjpMb25nIHBhY2thZ2UuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZjEyNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy4zLnR4dApAQCAtMCwwICsxLDM5IEBACitHaXQgdjIuMy4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4zLjIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBIGNvcnJ1cHQgaW5wdXQgdG8gImdpdCBkaWZmIC1NIiB1c2VkIGNhdXNlIHVzIHRvIHNlZ2ZhdWx0LgorCisgKiBUaGUgYm9ycm93ZWQgY29kZSBpbiBrd3NldCBBUEkgZGlkIG5vdCBmb2xsb3cgb3VyIHVzdWFsIGNvbnZlbnRpb24KKyAgIHRvIHVzZSAidW5zaWduZWQgY2hhciIgdG8gc3RvcmUgdmFsdWVzIHRoYXQgcmFuZ2UgZnJvbSAwLTI1NS4KKworICogRGVzY3JpcHRpb24gZ2l2ZW4gYnkgImdyZXAgLWgiIGZvciBpdHMgLS1leGNsdWRlLXN0YW5kYXJkIG9wdGlvbgorICAgd2FzIHBocmFzZWQgcG9vcmx5LgorCisgKiBEb2N1bWVudGF0b24gZm9yICJnaXQgcmVtb3RlIGFkZCIgbWVudGlvbmVkICItLXRhZ3MiIGFuZAorICAgIi0tbm8tdGFncyIgYW5kIGl0IHdhcyBub3QgY2xlYXIgdGhhdCBmZXRjaCBmcm9tIHRoZSByZW1vdGUgaW4KKyAgIHRoZSBmdXR1cmUgd2lsbCB1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIHdoZW4gbmVpdGhlciBpcyBnaXZlbgorICAgdG8gb3ZlcnJpZGUgaXQuCisKKyAqICJnaXQgZGlmZiAtLXNob3J0c3RhdCAtLWRpcnN0YXQ9Y2hhbmdlcyIgc2hvd2VkIGEgZGlyc3RhdCBiYXNlZCBvbgorICAgbGluZXMgdGhhdCB3YXMgbmV2ZXIgYXNrZWQgYnkgdGhlIGVuZCB1c2VyIGluIGFkZGl0aW9uIHRvIHRoZQorICAgZGlyc3RhdCB0aGF0IHRoZSB1c2VyIGFza2VkIGZvci4KKworICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBhbmQgdGhlCisgICBzdWJtb2R1bGUuKi51cGRhdGUgY29uZmlndXJhdGlvbiB3YXMgbm90IGNsZWFybHkgZG9jdW1lbnRlZC4KKworICogImdpdCBhcHBseSIgd2FzIG5vdCB2ZXJ5IGNhcmVmdWwgYWJvdXQgcmVhZGluZyBmcm9tLCByZW1vdmluZywKKyAgIHVwZGF0aW5nIGFuZCBjcmVhdGluZyBwYXRocyBvdXRzaWRlIHRoZSB3b3JraW5nIHRyZWUgKHVuZGVyCisgICAtLWluZGV4Ly0tY2FjaGVkKSBvciB0aGUgY3VycmVudCBkaXJlY3RvcnkgKHdoZW4gdXNlZCBhcyBhCisgICByZXBsYWNlbWVudCBmb3IgR05VIHBhdGNoKS4KKworICogImdpdCBkYWVtb24iIGxvb2tlZCB1cCB0aGUgaG9zdG5hbWUgZXZlbiB3aGVuICIlQ0giIGFuZCAiJUlQIgorICAgaW50ZXJwb2xhdGlvbnMgYXJlIG5vdCByZXF1ZXN0ZWQsIHdoaWNoIHdhcyB1bm5lY2Vzc2FyeS4KKworICogVGhlICJpbnRlcnBvbGF0ZWQtcGF0aCIgb3B0aW9uIG9mICJnaXQgZGFlbW9uIiBpbnNlcnRlZCBhbnkgc3RyaW5nCisgICBjbGllbnQgZGVjbGFyZWQgb24gdGhlICJob3N0PSIgY2FwYWJpbGl0eSByZXF1ZXN0IHdpdGhvdXQgY2hlY2tpbmcuCisgICBTYW5pdGl6ZSBhbmQgbGltaXQgJUggYW5kICVDSCB0byBhIHNhbmVyIGFuZCBhIHZhbGlkIEROUyBuYW1lLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy40LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTRjN2I4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNC50eHQKQEAgLTAsMCArMSwzMiBAQAorR2l0IHYyLjMuNCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMy4zCistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlICdjb2xvci5zdGF0dXMudW5tZXJnZWQnIGNvbmZpZ3VyYXRpb24gd2FzIG5vdCBkZXNjcmliZWQuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIGRpZCBub3QgcmVzZXQgY29sb3JzIGNvcnJlY3RseSBhcm91bmQgdGhlCisgICBicmFuY2ggbmFtZXMuCisKKyAqICJnaXQgLUMgJycgc3ViY21kIiByZWZ1c2VkIHRvIHdvcmsgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB1bmxpa2UKKyAgICJjZCAnJyIgd2hpY2ggc2lsZW50bHkgYmVoYXZlcyBhcyBhIG5vLW9wLgorCisgKiAiZ2l0IGltYXAtc2VuZCIgbGVhcm5lZCB0byBvcHRpb25hbGx5IHRhbGsgd2l0aCBhbiBJTUFQIHNlcnZlciB2aWEKKyAgIGxpYmNVUkw7IGJlY2F1c2UgdGhlcmUgaXMgbm8gb3RoZXIgb3B0aW9uIHdoZW4gR2l0IGlzIGJ1aWx0IHdpdGgKKyAgIE5PX09QRU5TU0wgb3B0aW9uLCB1c2UgdGhhdCBjb2RlcGF0aCBieSBkZWZhdWx0IHVuZGVyIHN1Y2gKKyAgIGNvbmZpZ3VyYXRpb24uCisKKyAqIEEgd29ya2Fyb3VuZCBmb3IgY2VydGFpbiBidWlsZCBvZiBHUEcgdGhhdCB0cmlnZ2VyZWQgZmFsc2UgYnJlYWthZ2UKKyAgIGluIGEgdGVzdCBoYXMgYmVlbiBhZGRlZC4KKworICogImdpdCByZWJhc2UgLWkiIHJlY2VudGx5IHN0YXJ0ZWQgdG8gaW5jbHVkZSB0aGUgbnVtYmVyIG9mCisgICBjb21taXRzIGluIHRoZSBpbnNuIHNoZWV0IHRvIGJlIHByb2Nlc3NlZCwgYnV0IG9uIGEgcGxhdGZvcm0KKyAgIHRoYXQgcHJlcGVuZHMgbGVhZGluZyB3aGl0ZXNwYWNlcyB0byAid2MgLWwiIG91dHB1dCwgdGhlIG51bWJlcnMKKyAgIGFyZSBzaG93biB3aXRoIGV4dHJhIHdoaXRlc3BhY2VzIHRoYXQgYXJlbid0IG5lY2Vzc2FyeS4KKworICogV2UgZGlkIG5vdCBwYXJzZSB1c2VybmFtZSBmb2xsb3dlZCBieSBsaXRlcmFsIElQdjYgYWRkcmVzcyBpbiBTU0gKKyAgIHRyYW5zcG9ydCBVUkxzLCBlLmcuIHNzaDovL3VzZXJAWzIwMDE6ZGI4OjoxXToyMi9yZXBvLmdpdAorICAgY29ycmVjdGx5LgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUgY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjMwOWRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNS50eHQKQEAgLTAsMCArMSw0NCBAQAorR2l0IHYyLjMuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMy40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIHByb21wdCBzY3JpcHQgKGluIGNvbnRyaWIvKSBkaWQgbm90IHNob3cgdGhlIHVudHJhY2tlZCBzaWduCisgICB3aGVuIHdvcmtpbmcgaW4gYSBzdWJkaXJlY3Rvcnkgd2l0aG91dCBhbnkgdW50cmFja2VkIGZpbGVzLgorCisgKiBFdmVuIHRob3VnaCAiZ2l0IGdyZXAgLS1xdWlldCIgaXMgcnVuIG1lcmVseSB0byBhc2sgZm9yIHRoZSBleGl0CisgICBzdGF0dXMsIHdlIHNwYXduZWQgdGhlIHBhZ2VyIHJlZ2FyZGxlc3MuICBTdG9wIGRvaW5nIHRoYXQuCisKKyAqIFJlY29tbWVuZCBmb3JtYXQtcGF0Y2ggYW5kIHNlbmQtZW1haWwgZm9yIHRob3NlIHdobyB3YW50IHRvIHN1Ym1pdAorICAgcGF0Y2hlcyB0byB0aGlzIHByb2plY3QuCisKKyAqIEFuIGZhaWx1cmUgZWFybHkgaW4gdGhlICJnaXQgY2xvbmUiIHRoYXQgc3RhcnRlZCBjcmVhdGluZyB0aGUKKyAgIHdvcmtpbmcgdHJlZSBhbmQgcmVwb3NpdG9yeSBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIHNvbWUgZGlyZWN0b3JpZXMKKyAgIGFuZCBmaWxlcyBsZWZ0IHdpdGhvdXQgZ2V0dGluZyBjbGVhbmVkIHVwLgorCisgKiAiZ2l0IGZldGNoIiB0aGF0IGZldGNoZXMgYSBjb21taXQgdXNpbmcgdGhlIGFsbG93LXRpcC1zaGExLWluLXdhbnQKKyAgIGV4dGVuc2lvbiBjb3VsZCBoYXZlIGZhaWxlZCB0byBmZXRjaCBhbGwgdGhlIHJlcXVlc3RlZCByZWZzLgorCisgKiBUaGUgc3BsaXQtaW5kZXggbW9kZSBpbnRyb2R1Y2VkIGF0IHYyLjMuMC1yYzB+NDEgd2FzIGJyb2tlbiBpbiB0aGUKKyAgIGNvZGVwYXRoIHRvIHByb3RlY3QgdXMgYWdhaW5zdCBhIGJyb2tlbiByZWltcGxlbWVudGF0aW9uIG9mIEdpdAorICAgdGhhdCB3cml0ZXMgYW4gaW52YWxpZCBpbmRleCB3aXRoIGR1cGxpY2F0ZWQgaW5kZXggZW50cmllcywgZXRjLgorCisgKiAiZ2l0IHBydW5lIiB1c2VkIHRvIGxhcmdlbHkgaWdub3JlIGJyb2tlbiByZWZzIHdoZW4gZGVjaWRpbmcgd2hpY2gKKyAgIG9iamVjdHMgYXJlIHN0aWxsIGJlaW5nIHVzZWQsIHdoaWNoIGNvdWxkIHNwcmVhZCBhbiBleGlzdGluZyBzbWFsbAorICAgZGFtYWdlIGFuZCBtYWtlIGl0IGEgbGFyZ2VyIG9uZS4KKworICogImdpdCB0YWcgLWgiIHVzZWQgdG8gc2hvdyB0aGUgIi0tY29sdW1uIiBhbmQgIi0tc29ydCIgb3B0aW9ucworICAgdGhhdCBhcmUgYWJvdXQgbGlzdGluZyBpbiBhIHdyb25nIHNlY3Rpb24uCisKKyAqIFRoZSB0cmFuc2Zlci5oaWRlcmVmcyBzdXBwb3J0IGRpZCBub3QgcXVpdGUgd29yayBmb3Igc21hcnQtaHR0cAorICAgdHJhbnNwb3J0LgorCisgKiBUaGUgY29kZSB0aGF0IHJlYWRzIGZyb20gdGhlIGN0YWdzIGZpbGUgaW4gdGhlIGNvbXBsZXRpb24gc2NyaXB0CisgICAoaW4gY29udHJpYi8pIGRpZCBub3Qgc3BlbGwgJHtwYXJhbS9wYXR0ZXJuL3N0cmluZ30gc3Vic3RpdHV0aW9uCisgICBjb3JyZWN0bHksIHdoaWNoIGhhcHBlbmVkIHRvIHdvcmsgd2l0aCBiYXNoIGJ1dCBub3Qgd2l0aCB6c2guCisKKyAqIFRoZSBleHBsYW5hdGlvbiBvbiAicmViYXNlIC0tcHJlc2VydmUtbWVyZ2VzIiwgInB1bGwgLS1yZWJhc2U9cHJlc2VydmUiLAorICAgYW5kICJwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZSIgaW4gdGhlIGRvY3VtZW50YXRpb24gd2FzIHVuY2xlYXIuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZSBjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMmY3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy42LnR4dApAQCAtMCwwICsxLDEzIEBACitHaXQgdjIuMy42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi4zLjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZGlmZi1oaWdobGlnaHQiIChpbiBjb250cmliLykgdXNlZCB0byBzaG93IGJ5dGUtYnktYnl0ZQorICAgZGlmZmVyZW5jZXMsIHdoaWNoIG1lYW50IHRoYXQgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIGNhbiBiZSBjaG9wcGVkCisgICBpbiB0aGUgbWlkZGxlLiAgSXQgbGVhcm5lZCB0byBwYXkgYXR0ZW50aW9uIHRvIGNoYXJhY3RlciBib3VuZGFyaWVzCisgICAoYXNzdW1pbmcgdGhlIFVURi04IHBheWxvYWQpLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM5NTgxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjcudHh0CkBAIC0wLDAgKzEsMjEgQEAKK0dpdCB2Mi4zLjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjMuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEFuIGVhcmxpZXIgdXBkYXRlIHRvIHRoZSBwYXJzZXIgdGhhdCBkaXNlY3RzIGEgVVJMIGJyb2tlIGFuCisgICBhZGRyZXNzLCBmb2xsb3dlZCBieSBhIGNvbG9uLCBmb2xsb3dlZCBieSBhbiBlbXB0eSBzdHJpbmcgKGluc3RlYWQKKyAgIG9mIHRoZSBwb3J0IG51bWJlciksIGUuZy4gc3NoOi8vZXhhbXBsZS5jb206L3BhdGgvdG8vcmVwby4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgY29udGFtaW5hdGVkIGdsb2JhbCBuYW1lc3BhY2UKKyAgIGFuZCBjbG9iYmVyZWQgb24gYSBzaGVsbCB2YXJpYWJsZSAkeC4KKworICogVGhlICJnaXQgcHVzaCAtLXNpZ25lZCIgcHJvdG9jb2wgZXh0ZW5zaW9uIGRpZCBub3QgbGltaXQgd2hhdCB0aGUKKyAgICJub25jZSIgdGhhdCBpcyBhIHNlcnZlci1jaG9zZW4gc3RyaW5nIGNhbiBjb250YWluIG9yIGhvdyBsb25nIGl0CisgICBjYW4gYmUsIHdoaWNoIHdhcyB1bm5lY2Vzc2FyaWx5IGxheC4gIExpbWl0IGJvdGggdGhlIGxlbmd0aCBhbmQgdGhlCisgICBhbHBoYWJldCB0byBhIHJlYXNvbmFibHkgc21hbGwgc3BhY2UgdGhhdCBjYW4gc3RpbGwgaGF2ZSBlbm91Z2gKKyAgIGVudHJvcHkuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuOC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy44LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjY3MjY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjMuOC50eHQKQEAgLTAsMCArMSwyMiBAQAorR2l0IHYyLjMuOCBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuMy43CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIHVzdWFsICJnaXQgZGlmZiIgd2hlbiBzZWVpbmcgYSBmaWxlIHR1cm5pbmcgaW50byBhIGRpcmVjdG9yeQorICAgc2hvd2VkIGEgcGF0Y2hzZXQgdG8gcmVtb3ZlIHRoZSBmaWxlIGFuZCBjcmVhdGUgYWxsIGZpbGVzIGluIHRoZQorICAgZGlyZWN0b3J5LCBidXQgImdpdCBkaWZmIC0tbm8taW5kZXgiIHNpbXBseSByZWZ1c2VkIHRvIHdvcmsuICBBbHNvLAorICAgd2hlbiBhc2tlZCB0byBjb21wYXJlIGEgZmlsZSBhbmQgYSBkaXJlY3RvcnksIGltaXRhdGUgUE9TSVggImRpZmYiCisgICBhbmQgY29tcGFyZSB0aGUgZmlsZSB3aXRoIHRoZSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpbiB0aGUKKyAgIGRpcmVjdG9yeSwgaW5zdGVhZCBvZiByZWZ1c2luZyB0byBydW4uCisKKyAqIFRoZSBkZWZhdWx0ICRIT01FLy5naXRjb25maWcgZmlsZSBjcmVhdGVkIHVwb24gImdpdCBjb25maWcgLS1nbG9iYWwiCisgICB0aGF0IGVkaXRzIGl0IGhhZCBpbmNvcnJlY3RseSBzcGVsbGVkIHVzZXIubmFtZSBhbmQgdXNlci5lbWFpbAorICAgZW50cmllcyBpbiBpdC4KKworICogImdpdCBjb21taXQgLS1kYXRlPW5vdyIgb3IgYW55dGhpbmcgdGhhdCByZWxpZXMgb24gYXBwcm94aWRhdGUgbG9zdAorICAgdGhlIGRheWxpZ2h0LXNhdmluZy10aW1lIG9mZnNldC4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy45LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi4zLjkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMmFkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuMy45LnR4dApAQCAtMCwwICsxLDkgQEAKK0dpdCB2Mi4zLjkgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjMuOAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgaGFuZGZ1bCBvZiBjb2RlcGF0aHMgdGhhdCB1c2VkIHRvIHVzZSBmaXhlZC1zaXplZCBhcnJheXMgdG8gaG9sZAorICAgcGF0aG5hbWVzIGhhdmUgYmVlbiBjb3JyZWN0ZWQgdG8gdXNlIHN0cmJ1ZiBhbmQgb3RoZXIgbWVjaGFuaXNtcyB0bworICAgYWxsb3cgbG9uZ2VyIHBhdGhuYW1lcyB3aXRob3V0IGZlYXJpbmcgb3ZlcmZsb3dzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMC50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4wLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGU2NGJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMC50eHQKQEAgLTAsMCArMSw1MTQgQEAKK0dpdCAyLjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09CisKK0JhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2FybmluZyhzKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcmVsZWFzZSBoYXMgYSBmZXcgY2hhbmdlcyBpbiB0aGUgdXNlci12aXNpYmxlIG91dHB1dCBmcm9tCitQb3JjZWxhaW4gY29tbWFuZHMuIFRoZXNlIGFyZSBub3QgbWVhbnQgdG8gYmUgcGFyc2VkIGJ5IHNjcmlwdHMsIGJ1dAordXNlcnMgc3RpbGwgbWF5IHdhbnQgdG8gYmUgYXdhcmUgb2YgdGhlIGNoYW5nZXM6CisKKyAqIFRoZSBvdXRwdXQgZnJvbSAiZ2l0IGxvZyAtLWRlY29yYXRlIiAoYW5kLCBtb3JlIGdlbmVyYWxseSwgdGhlICIlZCIKKyAgIGZvcm1hdCBzcGVjaWZpZXIgdXNlZCBpbiB0aGUgIi0tZm9ybWF0PTxzdHJpbmc+IiBwYXJhbWV0ZXIgdG8gdGhlCisgICAiZ2l0IGxvZyIgZmFtaWx5IG9mIGNvbW1hbmRzKSBoYXMgY2hhbmdlZC4gSXQgdXNlZCB0byBsaXN0ICJIRUFEIgorICAganVzdCBsaWtlIG90aGVyIGJyYW5jaGVzOyBlLmcuLAorCisgICAgICQgZ2l0IGxvZyAtLWRlY29yYXRlIC0xIG1hc3RlcgorICAgICBjb21taXQgYmRiMGY2Nzg4ZmE1ZTNjYWNjNDMxNWU5ZmYzMThhMjdiMjY3NmZmNCAoSEVBRCwgbWFzdGVyKQorICAgICAuLi4KKworICAgVGhpcyByZWxlYXNlIGNoYW5nZXMgdGhlIG91dHB1dCBzbGlnaHRseSB3aGVuIEhFQUQgcmVmZXJzIHRvIGEKKyAgIGJyYW5jaCB3aG9zZSBuYW1lIGlzIGFsc28gc2hvd24gaW4gdGhlIG91dHB1dC4gVGhlIGFib3ZlIGlzIG5vdworICAgc2hvd24gYXM6CisKKyAgICAgJCBnaXQgbG9nIC0tZGVjb3JhdGUgLTEgbWFzdGVyCisgICAgIGNvbW1pdCBiZGIwZjY3ODhmYTVlM2NhY2M0MzE1ZTlmZjMxOGEyN2IyNjc2ZmY0IChIRUFEIC0+IG1hc3RlcikKKyAgICAgLi4uCisKKyAqIFRoZSBwaHJhc2luZyAiZ2l0IGJyYW5jaCIgdXNlcyB0byBkZXNjcmliZSBhIGRldGFjaGVkIEhFQUQgaGFzIGJlZW4KKyAgIHVwZGF0ZWQgdG8gYWdyZWUgd2l0aCB0aGUgcGhyYXNpbmcgdXNlZCBieSAiZ2l0IHN0YXR1cyI6CisKKyAgICAtIFdoZW4gSEVBRCBpcyBhdCB0aGUgc2FtZSBjb21taXQgYXMgd2hlbiBpdCB3YXMgb3JpZ2luYWxseQorICAgICAgZGV0YWNoZWQsIHRoZXkgbm93IGJvdGggc2hvdyAiZGV0YWNoZWQgYXQgPGNvbW1pdCBvYmplY3QgbmFtZT4iLgorCisgICAgLSBXaGVuIEhFQUQgaGFzIG1vdmVkIHNpbmNlIGl0IHdhcyBvcmlnaW5hbGx5IGRldGFjaGVkLCB0aGV5IG5vdworICAgICAgYm90aCBzaG93ICJkZXRhY2hlZCBmcm9tIDxjb21taXQgb2JqZWN0IG5hbWU+Ii4KKworICAgUHJldmlvdXNseSwgImdpdCBicmFuY2giIGFsd2F5cyB1c2VkICJmcm9tIi4KKworCitVcGRhdGVzIHNpbmNlIHYyLjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitQb3J0cworCisgKiBPdXIgZGVmYXVsdCBJL08gc2l6ZSAoOCBNaUIpIGZvciBsYXJnZSBmaWxlcyB3YXMgdG9vIGxhcmdlIGZvciBzb21lCisgICBwbGF0Zm9ybXMgd2l0aCBzbWFsbGVyIFNTSVpFX01BWCwgbGVhZGluZyB0byByZWFkKDIpL3dyaXRlKDIpCisgICBmYWlsdXJlcy4KKworICogV2UgZGlkIG5vdCBjaGVjayB0aGUgY3VybCBsaWJyYXJ5IHZlcnNpb24gYmVmb3JlIHVzaW5nIHRoZQorICAgQ1VSTE9QVF9QUk9YWUFVVEggZmVhdHVyZSwgd2hpY2ggZGlkIG5vdCBleGlzdCBpbiBvbGRlciB2ZXJzaW9ucyBvZgorICAgdGhlIGxpYnJhcnkuCisKKyAqIFdlIG5vdyBkZXRlY3QgbnVtYmVyIG9mIENQVXMgb24gb2xkZXIgQlNELWRlcml2ZWQgc3lzdGVtcy4KKworICogUG9ydGFiaWxpdHkgZml4ZXMgYW5kIHdvcmthcm91bmRzIGZvciBzaGVsbCBzY3JpcHRzIGhhdmUgYmVlbiBhZGRlZAorICAgdG8gaGVscCBCU0QtZGVyaXZlZCBzeXN0ZW1zLgorCisKK1VJLCBXb3JrZmxvd3MgJiBGZWF0dXJlcworCisgKiBUaGUgY29tbWFuZCB1c2FnZSBpbmZvIHN0cmluZ3MgZ2l2ZW4gYnkgImdpdCBjbWQgLWgiIGFuZCBpbgorICAgZG9jdW1lbnRhdGlvbiBoYXZlIGJlZW4gdHdlYWtlZCBmb3IgY29uc2lzdGVuY3kuCisKKyAqIFRoZSAic3luYyIgc3ViY29tbWFuZCBvZiAiZ2l0IHA0IiBub3cgYWxsb3dzIHVzZXJzIHRvIGV4Y2x1ZGUKKyAgIHN1YmRpcmVjdG9yaWVzIGxpa2UgaXRzICJjbG9uZSIgc3ViY29tbWFuZCBkb2VzLgorCisgKiAiZ2l0IGxvZyAtLWludmVydC1ncmVwIC0tZ3JlcD1XSVAiIHdpbGwgc2hvdyBvbmx5IGNvbW1pdHMgdGhhdCBkbworICAgbm90IGhhdmUgdGhlIHN0cmluZyAiV0lQIiBpbiB0aGVpciBtZXNzYWdlcy4KKworICogImdpdCBwdXNoIiBoYXMgYmVlbiB0YXVnaHQgYW4gIi0tYXRvbWljIiBvcHRpb24gdGhhdCBtYWtlcyBhIHB1c2gKKyAgIHRoYXQgdXBkYXRlcyBtb3JlIHRoYW4gb25lIHJlZiBhbiAiYWxsLW9yLW5vbmUiIGFmZmFpci4KKworICogRXh0ZW5kaW5nIHRoZSAicHVzaCB0byBkZXBsb3kiIGZlYXR1cmUgdGhhdCB3YXMgYWRkZWQgaW4gMi4zLCB0aGUKKyAgIGJlaGF2aW91ciBvZiAiZ2l0IHB1c2giIHdoZW4gdXBkYXRpbmcgdGhlIGJyYW5jaCB0aGF0IGlzIGNoZWNrZWQKKyAgIG91dCBjYW4gbm93IGJlIHR3ZWFrZWQgYnkgYSAicHVzaC10by1jaGVja291dCIgaG9vay4KKworICogSFRUUC1iYXNlZCB0cmFuc3BvcnRzIG5vdyBzZW5kIEFjY2VwdC1MYW5ndWFnZSB3aGVuIG1ha2luZworICAgcmVxdWVzdHMuIFRoZSBsYW5ndWFnZXMgdG8gYWNjZXB0IGFyZSBpbmZlcnJlZCBmcm9tIGVudmlyb25tZW50CisgICB2YXJpYWJsZXMgb24gdGhlIGNsaWVudCBzaWRlIChMQU5HVUFHRSwgZXRjKS4KKworICogImdpdCBzZW5kLWVtYWlsIiB1c2VkIHRvIGFjY2VwdCBhIG1pc3Rha2VuICJ5IiAob3IgInllcyIpIGFzIGFuCisgICBhbnN3ZXIgdG8gIldoYXQgZW5jb2RpbmcgZG8geW91IHdhbnQgdG8gdXNlIFtVVEYtOF0/IiB3aXRob3V0CisgICBxdWVzdGlvbmluZy4gTm93IGl0IGFza3MgZm9yIGNvbmZpcm1hdGlvbiB3aGVuIHRoZSBhbnN3ZXIgbG9va3MgdG9vCisgICBzaG9ydCB0byBiZSBhIHZhbGlkIGVuY29kaW5nIG5hbWUuCisKKyAqIFdoZW4gImdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IiBmaXhlZCB3aGl0ZXNwYWNlIGVycm9ycyBpbiB0aGUKKyAgIGNvbW1vbiBjb250ZXh0IGxpbmVzLCB0aGUgY29tbWFuZCByZXBvcnRzIHRoYXQgaXQgZGlkIHNvLgorCisgKiAiZ2l0IHN0YXR1cyIgbm93IGFsbG93cyB0aGUgIi12IiBvcHRpb24gdG8gYmUgZ2l2ZW4gdHdpY2UsIGluIHdoaWNoCisgICBjYXNlIGl0IGFsc28gc2hvd3MgdGhlIGRpZmZlcmVuY2VzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCBhcmUgbm90CisgICBzdGFnZWQgdG8gYmUgY29tbWl0dGVkLgorCisgKiAiZ2l0IGNoZXJyeS1waWNrIiB1c2VkIHRvIGNsZWFuIHVwIHRoZSBsb2cgbWVzc2FnZSBldmVuIHdoZW4gaXQgaXMKKyAgIG1lcmVseSByZXBsYXlpbmcgYW4gZXhpc3RpbmcgY29tbWl0LiBJdCBub3cgcmVwbGF5cyB0aGUgbWVzc2FnZQorICAgdmVyYmF0aW0gdW5sZXNzIHlvdSBhcmUgZWRpdGluZyB0aGUgbWVzc2FnZSBvZiB0aGUgcmVzdWx0aW5nCisgICBjb21taXQuCisKKyAqICJnaXQgYXJjaGl2ZSIgY2FuIG5vdyBiZSB0b2xkIHRvIHNldCB0aGUgJ3RleHQnIGF0dHJpYnV0ZSBpbiB0aGUKKyAgIHJlc3VsdGluZyB6aXAgYXJjaGl2ZS4KKworICogT3V0cHV0IGZyb20gImdpdCBsb2cgLS1kZWNvcmF0ZSIgbm93IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBhCisgICBkZXRhY2hlZCBIRUFEIHZzLiBhIEhFQUQgdGhhdCBwb2ludHMgYXQgYSBicmFuY2guCisKKyAgIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgY2hhbmdlOyBzZWUgYWJvdmUgZm9yCisgICBtb3JlIGluZm9ybWF0aW9uLgorCisgKiBXaGVuIEhFQUQgd2FzIGRldGFjaGVkIHdoZW4gYXQgY29tbWl0IHh5eiBhbmQgaGFzbid0IGJlZW4gbW92ZWQKKyAgIHNpbmNlIGl0IHdhcyBkZXRhY2hlZCwgImdpdCBzdGF0dXMiIHdvdWxkIHJlcG9ydCAiZGV0YWNoZWQgYXQgeHl6IgorICAgd2hlcmVhcyAiZ2l0IGJyYW5jaCIgd291bGQgcmVwb3J0ICJkZXRhY2hlZCBmcm9tIHh5eiIuIE5vdyB0aGUKKyAgIG91dHB1dCBvZiAiZ2l0IGJyYW5jaCIgYWdyZWVzIHdpdGggdGhhdCBvZiAiZ2l0IHN0YXR1cyIuCisKKyAgIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgY2hhbmdlOyBzZWUgYWJvdmUgZm9yCisgICBtb3JlIGluZm9ybWF0aW9uLgorCisgKiAiZ2l0IC1DICcnIHN1YmNtZCIgbm93IHdvcmtzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAoYW5hbG9nb3VzbHkKKyAgIHRvICJjZCAnJyIpIHJhdGhlciB0aGFuIGR5aW5nIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4KKyAgIChtZXJnZSA2YTUzNmUyIGtuL2dpdC1jZC10by1lbXB0eSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQKKyAgIHRvIHNwZWNpZnkgdGhhdCwgZm9yIGV4YW1wbGUsIHYxLjAtcHJlMSBjb21lcyBiZWZvcmUgdjEuMC4KKworICogQSBuZXcgInB1c2guZm9sbG93VGFncyIgY29uZmlndXJhdGlvbiB0dXJucyB0aGUgIi0tZm9sbG93LXRhZ3MiCisgICBvcHRpb24gb24gYnkgZGVmYXVsdCBmb3IgdGhlICJnaXQgcHVzaCIgY29tbWFuZC4KKworICogImdpdCBsb2cgLS1ncmFwaCAtLW5vLXdhbGsgQSBCLi4uIiBpcyBhIG5vbnNlbnNpY2FsIGNvbWJpbmF0aW9uIG9mCisgICBvcHRpb25zOiAiLS1uby13YWxrIiByZXF1ZXN0cyBkaXNjcmV0ZSBwb2ludHMgaW4gdGhlIGhpc3RvcnksIHdoaWxlCisgICAiLS1ncmFwaCIgYXNrcyB0byBkcmF3IGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlc2UgZGlzY3JldGUgcG9pbnRzLgorICAgRm9yYmlkIHRoZSB1c2Ugb2YgdGhlc2Ugb3B0aW9ucyB0b2dldGhlci4KKworICogImdpdCByZXYtbGlzdCAtLWJpc2VjdCAtLWZpcnN0LXBhcmVudCIgZG9lcyBub3Qgd29yayAoeWV0KSBhbmQgY2FuCisgICBldmVuIGNhdXNlIFNFR1Y7IGZvcmJpZCBpdC4gImdpdCBsb2cgLS1iaXNlY3QgLS1maXJzdC1wYXJlbnQiIHdvdWxkCisgICBub3QgYmUgdXNlZnVsIHVudGlsICJnaXQgYmlzZWN0IC0tZmlyc3QtcGFyZW50IiBtYXRlcmlhbGl6ZXMsIHNvCisgICBhbHNvIGZvcmJpZCBpdCBmb3Igbm93LgorCisKK1BlcmZvcm1hbmNlLCBJbnRlcm5hbCBJbXBsZW1lbnRhdGlvbiwgRGV2ZWxvcG1lbnQgU3VwcG9ydCBldGMuCisKKyAqIFNsaWdodGx5IGNoYW5nZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE5fKCkgbWFjcm8gdG8gaGVscCB1cworICAgZGV0ZWN0IG1pc3Rha2VzLgorCisgKiBSZXN0cnVjdHVyZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgInJlZmxvZyBleHBpcmUiIHRvIGZpdCBiZXR0ZXIKKyAgIHdpdGggdGhlIHJlY2VudGx5IHVwZGF0ZWQgcmVmZXJlbmNlIEFQSS4KKworICogVGhlIHRyYW5zcG9ydC1oZWxwZXIgZGlkIG5vdCBwYXNzIHRyYW5zcG9ydCBvcHRpb25zIHN1Y2ggYXMKKyAgIHZlcmJvc2l0eSwgcHJvZ3Jlc3MsIGNsb25pbmcsIGV0Yy4gdG8gaW1wb3J0IGFuZCBleHBvcnQgYmFzZWQKKyAgIGhlbHBlcnMsIGxpa2UgaXQgZGlkIGZvciBmZXRjaCBhbmQgcHVzaCBiYXNlZCBoZWxwZXJzLCByb2JiaW5nIHRoZW0KKyAgIG9mIHRoZSBjaGFuY2UgdG8gaG9ub3IgdGhlIHdpc2ggb2YgdGhlIGVuZC11c2VycyBiZXR0ZXIuCisKKyAqIFRoZSB0ZXN0cyB0aGF0IHdhbnRlZCB0byBzZWUgdGhhdCBhIGZpbGUgYmVjb21lcyB1bnJlYWRhYmxlIGFmdGVyCisgICBydW5uaW5nICJjaG1vZCBhLXIgZmlsZSIsIGFuZCB0aGUgdGVzdHMgdGhhdCB3YW50ZWQgdG8gbWFrZSBzdXJlCisgICB0aGF0IHRoZXkgYXJlIG5vdCBydW4gYXMgcm9vdCwgdXNlZCAiY2FuIHdlIHdyaXRlIGludG8gdGhlIC8KKyAgIGRpcmVjdG9yeT8iIGFzIGEgY2hlYXAgc3Vic3RpdHV0ZS4gQnV0IG9uIHNvbWUgcGxhdGZvcm1zIHRoYXQgaXMKKyAgIG5vdCBhIGdvb2QgaGV1cmlzdGljLiBUaGUgdGVzdHMgYW5kIHRoZWlyIHByZXJlcXVpc2l0ZXMgaGF2ZSBiZWVuCisgICB1cGRhdGVkIHRvIGNoZWNrIHdoYXQgdGhleSByZWFsbHkgcmVxdWlyZS4KKyAgIChtZXJnZSBmNDAwZTUxIGprL3Nhbml0eSBsYXRlciB0byBtYWludCkuCisKKyAqIFZhcmlvdXMgaXNzdWVzIGFyb3VuZCAicmVmbG9nIGV4cGlyZSIsIGUuZy4gdXNpbmcgLS11cGRhdGVyZWYgd2hlbgorICAgZXhwaXJpbmcgYSByZWZsb2cgZm9yIGEgc3ltYm9saWMgcmVmZXJlbmNlLCBoYXZlIGJlZW4gY29ycmVjdGVkCisgICBhbmQvb3IgbWFkZSBzYW5lci4KKworICogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBzdHJidWYgQVBJIGhhZCBiZWVuIHNwbGl0IGJldHdlZW4gdGhlIEFQSQorICAgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIGhlYWRlciBmaWxlLiBDb25zb2xpZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBpbgorICAgc3RyYnVmLmguCisKKyAqIFRoZSBlcnJvciBoYW5kbGluZyBmdW5jdGlvbnMgYW5kIGNvbnZlbnRpb25zIGFyZSBub3cgZG9jdW1lbnRlZCBpbgorICAgdGhlIEFQSSBtYW51YWwgKGluIGFwaS1lcnJvci1oYW5kbGluZy50eHQpLgorCisgKiBPcHRpbWl6ZSBnaXRhdHRyaWJ1dGUgbG9vay11cCwgbW9zdGx5IHVzZWZ1bCBpbiAiZ2l0IGdyZXAiIG9uIGEKKyAgIHByb2plY3QgdGhhdCBkb2VzIG5vdCB1c2UgbWFueSBhdHRyaWJ1dGVzLCBieSBhdm9pZGluZyBpdCB3aGVuIHdlCisgICAoc2hvdWxkKSBrbm93IHRoYXQgdGhlIGF0dHJpYnV0ZXMgYXJlIG5vdCBkZWZpbmVkIGluIHRoZSBmaXJzdAorICAgcGxhY2UuCisKKyAqIFR5cG9maXggaW4gY29tbWVudHMuCisgICAobWVyZ2UgZWYyOTU2YSBhay9naXQtcG0tdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgY2xlYW4tdXAuCisgICAobWVyZ2UgMGI4NjhmMCBzYi9oZXgtb2JqZWN0LW5hbWUtaXMtYXQtbW9zdC00MS1ieXRlcy1sb25nIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1ZDMwODUxIGRwL3JlbW92ZS1kdXBsaWNhdGVkLWhlYWRlci1pbmNsdXNpb24gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTaW1wbGlmeSB0aGUgcmVmIHRyYW5zYWN0aW9uIEFQSSBmb3IgdmVyaWZ5aW5nIHRoYXQgInRoZSByZWYgc2hvdWxkCisgICBiZSBwb2ludGluZyBhdCB0aGlzIG9iamVjdCIuCisKKyAqIFNpbXBsaWZ5IHRoZSBjb2RlIGluICJnaXQgZGFlbW9uIiB0aGF0IHBhcnNlcyBvdXQgYW5kIGhvbGRzCisgICBob3N0bmFtZXMgdXNlZCBpbiByZXF1ZXN0IGludGVycG9sYXRpb24uCisKKyAqIFJlc3RydWN0dXJlIHRoZSAiZ2l0IHB1c2giIGNvZGVwYXRoIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGFkZCBuZXcKKyAgIGNvbmZpZ3VyYXRpb24gYml0cy4KKworICogVGhlIHJ1bi1jb21tYW5kIGludGVyZmFjZSBtYWRlIGl0IGVhc3kgdG8gbWFrZSBhIHBpcGUgZm9yIHVzIHRvCisgICByZWFkIGZyb20gYSBwcm9jZXNzLCB3YWl0IGZvciB0aGUgcHJvY2VzcyB0byBmaW5pc2gsIGFuZCB0aGVuCisgICBhdHRlbXB0IHRvIHJlYWQgaXRzIG91dHB1dC4gQnV0IHRoaXMgcGF0dGVybiBjYW4gbGVhZCB0byBkZWFkbG9jay4KKyAgIFNvIGludHJvZHVjZSBhIGhlbHBlciB0byBkbyB0aGlzIGNvcnJlY3RseSAoaS5lLiwgZmlyc3QgcmVhZCwgYW5kCisgICB0aGVuIHdhaXQgdGhlIHByb2Nlc3MgdG8gZmluaXNoKSBhbmQgYWxzbyBhZGQgY29kZSB0byBwcmV2ZW50IHN1Y2gKKyAgIGFidXNlIGluIHRoZSBydW4tY29tbWFuZCBoZWxwZXIuCisKKyAqIFBlb3BsZSBvZnRlbiBmb3JnZXQgdG8gY2hhaW4gdGhlIGNvbW1hbmRzIGluIHRoZWlyIHRlc3QgdG9nZXRoZXIKKyAgIHdpdGggJiYsIGxldHRpbmcgYSBmYWlsdXJlIGZyb20gYW4gZWFybGllciBjb21tYW5kIGluIHRoZSB0ZXN0IGdvCisgICB1bm5vdGljZWQuIFRoZSBuZXcgR0lUX1RFU1RfQ0hBSU5fTElOVCBtZWNoYW5pc20gYWxsb3dzIHlvdSB0bworICAgY2F0Y2ggc3VjaCBhIG1pc3Rha2UgbW9yZSBlYXNpbHkuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuMworLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjMgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogImdpdCBibGFtZSBIRUFEIC0tIG1pc3NpbmciIGZhaWxlZCB0byBjb3JyZWN0bHkgc2F5ICJIRUFEIiB3aGVuIGl0CisgICB0cmllZCB0byBzYXkgIk5vIHN1Y2ggcGF0aCAnbWlzc2luZycgaW4gSEVBRCIuCisgICAobWVyZ2UgYTQ2NDQyZiBqay9ibGFtZS1jb21taXQtbGFiZWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJlcmVyZSIgKGludm9rZWQgaW50ZXJuYWxseSBmcm9tIG1hbnkgbWVyZ3kgb3BlcmF0aW9ucykgZGlkCisgICBub3QgY29ycmVjdGx5IHNpZ25hbCBlcnJvcnMgd2hlbiBpdCBhdHRlbXB0ZWQgdG8gdXBkYXRlIHRoZSB3b3JraW5nCisgICB0cmVlIGZpbGVzIGJ1dCBmYWlsZWQgZm9yIHdoYXRldmVyIHJlYXNvbi4KKyAgIChtZXJnZSA4OWVhOTAzIGpuL3JlcmVyZS1mYWlsLW9uLWF1dG8tdXBkYXRlLWZhaWx1cmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTZXR0aW5nIGRpZmYuc3VibW9kdWxlIHRvICdsb2cnIG1hZGUgImdpdCBmb3JtYXQtcGF0Y2giIHByb2R1Y2UKKyAgIGJyb2tlbiBwYXRjaGVzLgorICAgKG1lcmdlIDMzOWRlNTAgZGsvZm9ybWF0LXBhdGNoLWlnbm9yZS1kaWZmLXN1Ym1vZHVsZSBsYXRlciB0byBtYWludCkuCisKKyAqIEFmdGVyIGF0dGVtcHRpbmcgYW5kIGZhaWxpbmcgYSBwYXNzd29yZC1sZXNzIGF1dGhlbnRpY2F0aW9uIChlLmcuLAorICAgS2VyYmVyb3MpLCBsaWJjVVJMIHJlZnVzZXMgdG8gZmFsbCBiYWNrIHRvIHBhc3N3b3JkLWJhc2VkIEJhc2ljCisgICBhdXRoZW50aWNhdGlvbiB3aXRob3V0IGEgYml0IG9mIGhlbHAvZW5jb3VyYWdlbWVudC4KKyAgIChtZXJnZSA0ZGJlNjY0IGJjL2h0dHAtZmFsbGJhY2stdG8tcGFzc3dvcmQtYWZ0ZXIta3JiLWZhaWxzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJnaXQgcHVzaCIgZG9jdW1lbnRhdGlvbiBmb3IgdGhlICItLXJlcG89PHRoZXJlPiIgb3B0aW9uIHdhcworICAgZWFzaWx5IG1pc3VuZGVyc3Rvb2QuCisgICAobWVyZ2UgNTdiOTJhNyBtZy9wdXNoLXJlcG8tb3B0aW9uLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgdG8gcmVhZCBhIGJyYW5jaCBuYW1lIGZyb20gdmFyaW91cyBmaWxlcyBpbiB0aGUgLmdpdC8KKyAgIGRpcmVjdG9yeSB3b3VsZCBoYXZlIG92ZXJydW4gYXJyYXkgbGltaXRzIGlmIGFza2VkIHRvIHJlYWQgYW4gZW1wdHkKKyAgIGZpbGUuCisgICAobWVyZ2UgNjZlYzkwNCBqay9zdGF0dXMtcmVhZC1icmFuY2gtbmFtZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBSZW1vdmUgYSBzdXBlcmZsdW91cyBjb25kaXRpb25hbCB0aGF0IGlzIGFsd2F5cyB0cnVlLgorICAgKG1lcmdlIDk0ZWU4ZTIgamsvcmVtb3RlLWN1cmwtYW4tYXJyYXktaW4tc3RydWN0LWNhbm5vdC1iZS1udWxsIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJnaXQgZGlmZiAtLXJhdyIgZG9jdW1lbnRhdGlvbiBpbmNvcnJlY3RseSBpbXBsaWVkIHRoYXQgQyhvcHkpCisgICBhbmQgUihlbmFtZSkgYXJlIHRoZSBvbmx5IHN0YXR1c2VzIHRoYXQgY2FuIGJlIGZvbGxvd2VkIGJ5IGEgc2NvcmUKKyAgIG51bWJlci4KKyAgIChtZXJnZSBhYzFjMmQ5IGpjL2RpZmYtZm9ybWF0LWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIEEgYnJva2VuIHBhY2sgLmlkeCBmaWxlIGluIHRoZSByZWNlaXZpbmcgcmVwb3NpdG9yeSBwcmV2ZW50ZWQgdGhlCisgICBkdW1iIGh0dHAgdHJhbnNwb3J0IGZyb20gZmV0Y2hpbmcgYSBnb29kIGNvcHkgb2YgaXQgZnJvbSB0aGUgb3RoZXIKKyAgIHNpZGUuCisgICAobWVyZ2UgOGI5YzJkZCBqay9kdW1iLWh0dHAtaWR4LWZldGNoLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBlcnJvciBtZXNzYWdlIGZyb20gImdpdCBjb21taXQiLCB3aGVuIGEgbm9uLWV4aXN0aW5nIGF1dGhvcgorICAgbmFtZSB3YXMgZ2l2ZW4gYXMgdmFsdWUgdG8gdGhlICItLWF1dGhvcj0iIHBhcmFtZXRlciwgaGFzIGJlZW4KKyAgIHJld29yZGVkIHRvIGF2b2lkIG1pc3VuZGVyc3RhbmRpbmcuCisgICAobWVyZ2UgMTA0NGIxZiBtZy9jb21taXQtYXV0aG9yLW5vLW1hdGNoLW1hbGZvcm1lZC1tZXNzYWdlIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBsb2cgLS1oZWxwIiB1c2VkIHRvIHNob3cgcmV2LWxpc3Qgb3B0aW9ucyB0aGF0IGFyZSBpcnJlbGV2YW50CisgICB0byB0aGUgImxvZyIgY29tbWFuZC4KKyAgIChtZXJnZSAzY2FiMDJkIGpjL2RvYy1sb2ctcmV2LWxpc3Qtb3B0aW9ucyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCIgdXNlZCB0byB1bmRlci1hbGxvY2F0ZSBtZW1vcnkgd2hlbiB0aGUKKyAgIGZpeCByZXN1bHRlZCBpbiBhIGxvbmdlciB0ZXh0IHRoYW4gdGhlIG9yaWdpbmFsIHBhdGNoLgorICAgKG1lcmdlIDQwN2E3OTIgamMvYXBwbHktd3MtZml4LWV4cGFuZHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgaW50ZXJhY3RpdmUgInNob3cgYSBsaXN0IGFuZCBsZXQgdGhlIHVzZXIgY2hvb3NlIGZyb20gaXQiCisgICBpbnRlcmZhY2UgdXNlZCBieSAiZ2l0IGFkZCAtaSIgdW5uZWNlc3NhcmlseSBwcm9tcHRlZCB0aGUgdXNlciBldmVuCisgICB3aGVuIHRoZSBjYW5kaWRhdGUgbGlzdCB3YXMgZW1wdHksIGFnYWluc3Qgd2hpY2ggdGhlIG9ubHkgImNob2ljZSIKKyAgIHRoZSB1c2VyIGNvdWxkIGhhdmUgbWFkZSB3YXMgdG8gY2hvb3NlIG5vdGhpbmcuCisgICAobWVyZ2UgYTljNDY0MSBhay9hZGQtaS1lbXB0eS1jYW5kaWRhdGVzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHRvZG8gbGlzdCBjcmVhdGVkIGJ5ICJnaXQgcmViYXNlIC1pIiBkaWQgbm90IGZ1bGx5IGhvbm9yCisgICBjb3JlLmFiYnJldiBzZXR0aW5ncy4KKyAgIChtZXJnZSBlZGI3MmQ1IGtzL3JlYmFzZS1pLWFiYnJldiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2giIG92ZXIgYSByZW1vdGUtaGVscGVyIHRoYXQgY2Fubm90IHJlc3BvbmQgdG8gdGhlICJsaXN0IgorICAgY29tbWFuZCBjb3VsZCBub3QgZmV0Y2ggZnJvbSBhIHN5bWJvbGljIHJlZmVyZW5jZSAoZS5nLiwgSEVBRCkuCisgICAobWVyZ2UgMzNjYWU1NCBtaC9kZXJlZi1zeW1yZWYtb3Zlci1oZWxwZXItdHJhbnNwb3J0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdXNoIC0tc2lnbmVkIiBnYXZlIGFuIGluY29ycmVjdGx5IHdvcmRlZCBlcnJvciBtZXNzYWdlIHdoZW4KKyAgIHRoZSBvdGhlciBzaWRlIGRpZCBub3Qgc3VwcG9ydCB0aGUgY2FwYWJpbGl0eS4KKworICogVGhlICJnaXQgcHVzaCAtLXNpZ25lZCIgcHJvdG9jb2wgZXh0ZW5zaW9uIGRpZCBub3QgbGltaXQgd2hhdCB0aGUKKyAgICJub25jZSIgKGEgc2VydmVyLWNob3NlbiBzdHJpbmcpIGNvdWxkIGNvbnRhaW4gbm9yIGhvdyBsb25nIGl0CisgICBjb3VsZCBiZSwgd2hpY2ggd2FzIHVubmVjZXNzYXJpbHkgbGF4LiBMaW1pdCBib3RoIHRoZSBsZW5ndGggYW5kCisgICB0aGUgYWxwaGFiZXQgdG8gYSByZWFzb25hYmx5IHNtYWxsIHNwYWNlIHRoYXQgY2FuIHN0aWxsIGhhdmUgZW5vdWdoCisgICBlbnRyb3B5LgorICAgKG1lcmdlIGFmY2I2ZWUgamMvcHVzaC1jZXJ0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgY2xvYmJlcmVkIHRoZSBzaGVsbCB2YXJpYWJsZSAkeAorICAgaW4gdGhlIGdsb2JhbCBzaGVsbCBuYW1lc3BhY2UuCisgICAobWVyZ2UgODUyZmYxYyBtYS9iYXNoLWNvbXBsZXRpb24tbGVha2luZy14IGxhdGVyIHRvIG1haW50KS4KKworICogV2UgaW5jb3JyZWN0bHkgZm9ybWF0dGVkIGEgInVpbnRtYXhfdCIgaW50ZWdlciB0aGF0IGRvZXNuJ3QgZml0IGluCisgICAiaW50Ii4KKyAgIChtZXJnZSBkMzA2ZjNkIGprL2RlY2ltYWwtd2lkdGgtZm9yLXVpbnRtYXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiBwYXJzZXIgdXNlZCB0byBiZSBjb25mdXNlZCB3aGVuIHJlYWRpbmcKKyAgIGNvbmZpZ3VyYXRpb24gZnJvbSBhIGJsb2Igb2JqZWN0IHRoYXQgZW5kcyB3aXRoIGEgbG9uZSBDUi4KKyAgIChtZXJnZSAxZDA2NTVjIGprL2NvbmZpZy1uby11bmdldGMtZW9mIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHBhY2sgYml0bWFwIHN1cHBvcnQgZGlkIG5vdCBidWlsZCB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIEdDQy4KKyAgIChtZXJnZSBiZDRlODgyIGprL3BhY2stYml0bWFwIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGRvY3VtZW50YXRpb24gd2Fzbid0IGNsZWFyIHRoYXQgInJlbW90ZS48bmljaz4ucHVzaFVSTCIgYW5kCisgICAicmVtb3RlLjxuaWNrPi5VUkwiIGFyZSB0aGVyZSB0byBuYW1lIHRoZSBzYW1lIHJlcG9zaXRvcnkgYWNjZXNzZWQKKyAgIHZpYSBkaWZmZXJlbnQgdHJhbnNwb3J0cywgbm90IHR3byBzZXBhcmF0ZSByZXBvc2l0b3JpZXMuCisgICAobWVyZ2UgNjk3ZjY1MiBqYy9yZW1vdGUtc2V0LXVybC1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPbGRlciBHbnVQRyBpbXBsZW1lbnRhdGlvbnMgbWF5IG5vdCBjb3JyZWN0bHkgaW1wb3J0IHRoZSBrZXlyaW5nCisgICBtYXRlcmlhbCB3ZSBwcmVwYXJlIGZvciB0aGUgdGVzdHMgdG8gdXNlLgorICAgKG1lcmdlIDFmOTg1ZDYgY2gvbmV3LWdwZy1kcm9wcy1yZmMtMTk5MSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjcmVkZW50aWFsIGhlbHBlciBmb3IgV2luZG93cyAoaW4gY29udHJpYi8pIHVzZWQgdG8gbWlzaGFuZGxlCisgICB1c2VyIG5hbWVzIHRoYXQgY29udGFpbiBhbiBhdC1zaWduLgorICAgKG1lcmdlIDEzZDI2MWUgYXYvd2luY3JlZC13aXRoLWF0LWluLXVzZXJuYW1lLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJkaWZmLWhpZ2hsaWdodCIgKGluIGNvbnRyaWIvKSB1c2VkIHRvIHNob3cgYnl0ZS1ieS1ieXRlCisgICBkaWZmZXJlbmNlcywgd2hpY2ggY291bGQgY2F1c2UgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHRvIGJlIGNob3BwZWQKKyAgIGluIHRoZSBtaWRkbGUuIEl0IGxlYXJuZWQgdG8gcGF5IGF0dGVudGlvbiB0byBjaGFyYWN0ZXIgYm91bmRhcmllcworICAgKGFzc3VtaW5nIFVURi04KS4KKyAgIChtZXJnZSA4ZDAwNjYyIGprL2NvbG9ycyBsYXRlciB0byBtYWludCkuCisKKyAqIERvY3VtZW50IGxvbmdzdGFuZGluZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWluZyBydWxlcyBpbgorICAgQ29kaW5nR3VpZGVsaW5lcy4KKyAgIChtZXJnZSAzNTg0MGEzIGpjL2NvbmYtdmFyLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIGVhcmxpZXIgd29ya2Fyb3VuZCB0byBzcXVlbGNoIHVuaGVscGZ1bCBkZXByZWNhdGlvbiB3YXJuaW5ncworICAgZnJvbSB0aGUgY29tcGlsZXIgb24gT1MgWCB1bm5lY2Vzc2FyaWx5IHNldCBhIG1pbmltdW0gcmVxdWlyZWQKKyAgIHZlcnNpb24gb2YgdGhlIE9TLCB3aGljaCB0aGUgdXNlciBtaWdodCB3YW50IHRvIHJhaXNlIChvciBsb3dlcikKKyAgIGZvciBvdGhlciByZWFzb25zLgorICAgKG1lcmdlIDg4YzAzZWIgZXMvc3F1ZWxjaC1vcGVuc3NsLXdhcm5pbmdzLW9uLW1hY29zeCBsYXRlciB0byBtYWludCkuCisKKyAqIENlcnRhaW4gb2xkZXIgdmludGFnZXMgb2YgY1VSTCBnaXZlIGlycmVndWxhciBvdXRwdXQgZnJvbQorICAgImN1cmwtY29uZmlnIC0tdmVybnVtIiwgd2hpY2ggY29uZnVzZWQgb3VyIGJ1aWxkIHN5c3RlbS4KKyAgIChtZXJnZSAzYWY2NzkyIHRjL2N1cmwtdmVybnVtLW91dHB1dC1icm9rZW4taW4tNy4xMSBsYXRlciB0byBtYWludCkuCisKKyAqIEluIHYyLjIuMCwgd2UgYnJva2UgImdpdCBwcnVuZSIgdGhhdCBydW5zIGluIGEgcmVwb3NpdG9yeSB0aGF0CisgICBib3Jyb3dzIGZyb20gYW4gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZS4KKyAgIChtZXJnZSBiMGE0MjY0IGprL3BydW5lLW10aW1lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBzdWJtb2R1bGUgYWRkIiBmYWlsZWQgdG8gc3F1YXNoICJwYXRoL3RvLy4vLi9zdWJtb2R1bGUiIHRvCisgICAicGF0aC90by9zdWJtb2R1bGUiLgorICAgKG1lcmdlIDgxOTZlNzIgcHMvc3VibW9kdWxlLXNhbml0aXplLXBhdGgtdXBvbi1hZGQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IG1lcmdlLWZpbGUiIGRpZCBub3Qgd29yayBjb3JyZWN0bHkgd2hlbiBpbnZva2VkIGluIGEKKyAgIHN1YmRpcmVjdG9yeS4KKyAgIChtZXJnZSAyMDRhOGZmIGFiL21lcmdlLWZpbGUtcHJlZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBibGFtZSIgY291bGQgZGllIHRyeWluZyB0byBmcmVlIGFuIHVuaW5pdGlhbGl6ZWQgcGllY2Ugb2YKKyAgIG1lbW9yeS4KKyAgIChtZXJnZSBlNjAwNTkyIGVzL2JsYW1lLWNvbW1pdC1pbmZvLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIHVzZWQgdG8gY3Jhc2ggd2hlbiBpdCBjb3VsZCBub3QgY2xvc2UgYW5kCisgICBmaW5hbGl6ZSB0aGUgcmVzdWx0aW5nIHBhY2tmaWxlIGNsZWFubHkuCisgICAobWVyZ2UgNWU5MTVmMyBqay9mYXN0LWltcG9ydC1kaWUtbmljZWx5LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJ1cGRhdGUtaW5kZXggLS1yZWZyZXNoIiB1c2VkIHRvIGxlYWsgbWVtb3J5IHdoZW4gYW4gZW50cnkgY291bGQKKyAgIG5vdCBiZSByZWZyZXNoZWQgZm9yIHdoYXRldmVyIHJlYXNvbi4KKyAgIChtZXJnZSBiYzFjMmNhIHNiL3BsdWctbGVhay1pbi1tYWtlLWNhY2hlLWVudHJ5IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlICJpbnRlcnBvbGF0ZWQtcGF0aCIgb3B0aW9uIG9mICJnaXQgZGFlbW9uIiBpbnNlcnRlZCBhbnkgc3RyaW5nCisgICB0aGUgY2xpZW50IGRlY2xhcmVkIG9uIHRoZSAiaG9zdD0iIGNhcGFiaWxpdHkgcmVxdWVzdCB3aXRob3V0CisgICBjaGVja2luZy4gU2FuaXRpemUgYW5kIGxpbWl0ICVIIGFuZCAlQ0ggdG8gYSBzYW5lciBhbmQgYSB2YWxpZCBETlMKKyAgIG5hbWUuCisgICAobWVyZ2UgYjQ4NTM3MyBqay9kYWVtb24taW50ZXJwb2xhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGRhZW1vbiIgdW5uZWNlc3NhcmlseSBsb29rZWQgdXAgdGhlIGhvc3RuYW1lIGV2ZW4gd2hlbiAiJUNIIgorICAgYW5kICIlSVAiIGludGVycG9sYXRpb25zIHdlcmUgbm90IHJlcXVlc3RlZC4KKyAgIChtZXJnZSBkYzhlZGM4IHJzL2RhZW1vbi1pbnRlcnBvbGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIHJlbGllZCBvbiAiLS1uby0iIHByZWZpeCBoYW5kbGluZyBpbiBQZXJsJ3MgR2V0b3B0OjpMb25nCisgICBwYWNrYWdlLCBldmVuIHRob3VnaCB0aGF0IHN1cHBvcnQgZGlkbid0IGV4aXN0IGluIFBlcmwgNS44ICh3aGljaAorICAgd2Ugc3RpbGwgc3VwcG9ydCkuIE1hbnVhbGx5IGFkZCBzdXBwb3J0IHRvIGhlbHAgcGVvcGxlIHdpdGggb2xkZXIKKyAgIEdldG9wdDo6TG9uZyBwYWNrYWdlcy4KKyAgIChtZXJnZSBmNDcxNDk0IGttL3NlbmQtZW1haWwtZ2V0b3B0LWxvbmctd29ya2Fyb3VuZHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFwcGx5IiB3YXMgbm90IHZlcnkgY2FyZWZ1bCBhYm91dCByZWFkaW5nIGZyb20sIHJlbW92aW5nLAorICAgdXBkYXRpbmcgYW5kIGNyZWF0aW5nIHBhdGhzIG91dHNpZGUgdGhlIHdvcmtpbmcgdHJlZSAodW5kZXIKKyAgIC0taW5kZXgvLS1jYWNoZWQpIG9yIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAod2hlbiB1c2VkIGFzIGEKKyAgIHJlcGxhY2VtZW50IGZvciBHTlUgcGF0Y2gpLgorICAgKG1lcmdlIGUwZDIwMWIgamMvYXBwbHktYmV5b25kLXN5bWxpbmsgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb3JyZWN0IGEgYnJlYWthZ2UgaW4gZ2l0LXN2biwgaW50cm9kdWNlZCBhcm91bmQgdGhlIHYyLjIgZXJhLCB0aGF0CisgICBjYW4gY2F1c2UgRmlsZUhhbmRsZXMgdG8gYmUgY2xvc2VkIHByZW1hdHVyZWx5LgorICAgKG1lcmdlIGU0MjYzMTEgZXcvc3ZuLW1haW50LWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKworICogV2UgZGlkIG5vdCBwYXJzZSB1c2VybmFtZXMgZm9sbG93ZWQgYnkgbGl0ZXJhbCBJUHY2IGFkZHJlc3NlcworICAgY29ycmVjdGx5IGluIFNTSCB0cmFuc3BvcnQgVVJMczsgZS5nLiwKKyAgIHNzaDovL3VzZXJAWzIwMDE6ZGI4OjoxXToyMi9yZXBvLmdpdC4KKyAgIChtZXJnZSA2YjZjNWY3IHRiL2Nvbm5lY3QtaXB2Ni1wYXJzZS1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnbWFpbGluZm8uc2Npc3NvcnMnIHdhcyBoYXJkIHRvCisgICBkaXNjb3ZlciBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyAgIChtZXJnZSBhZmI1ZGU3IG1tL2FtLWMtZG9jIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBhbmQgdGhlCisgICBzdWJtb2R1bGUuKi51cGRhdGUgY29uZmlndXJhdGlvbiB3YXMgbm90IGNsZWFybHkgZG9jdW1lbnRlZC4KKyAgIChtZXJnZSA1YzMxYWNmIG1zL3N1Ym1vZHVsZS11cGRhdGUtY29uZmlnLWRvYyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZGlmZiAtLXNob3J0c3RhdCIgdXNlZCB0b2dldGhlciB3aXRoICItLWRpcnN0YXQ9Y2hhbmdlcyIgb3IKKyAgICItLWRpcnN0YXQ9ZmlsZXMiIGluY29ycmVjdGx5IG91dHB1dCBkaXJzdGF0IGluZm9ybWF0aW9uIHR3aWNlLgorICAgKG1lcmdlIGFiMjczODkgbWsvZGlmZi1zaG9ydHN0YXQtZGlyc3RhdC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbWFucGFnZSBmb3IgImdpdCByZW1vdGUgYWRkIiBtZW50aW9uZWQgIi0tdGFncyIgYW5kICItLW5vLXRhZ3MiCisgICBidXQgZGlkIG5vdCBleHBsYWluIHdoYXQgaGFwcGVucyBpZiBuZWl0aGVyIG9wdGlvbiBpcyBwcm92aWRlZC4KKyAgIChtZXJnZSBhYWJhMGFiIG1nL2RvYy1yZW1vdGUtdGFncy1vci1ub3QgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgZGVzY3JpcHRpb24gb2YgIi0tZXhjbHVkZS1zdGFuZGFyZCBvcHRpb24iIGluIHRoZSBvdXRwdXQgb2YKKyAgICJnaXQgZ3JlcCAtaCIgd2FzIHBocmFzZWQgcG9vcmx5LgorICAgKG1lcmdlIDc3ZmRiOGEgbmQvZ3JlcC1leGNsdWRlLXN0YW5kYXJkLWhlbHAtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLWkiIHJlY2VudGx5IHN0YXJ0ZWQgdG8gaW5jbHVkZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMKKyAgIGluIHRoZSB0b2RvIGxpc3QsIGJ1dCB0aGF0IG91dHB1dCBpbmNsdWRlZCBleHRyYW5lb3VzIHdoaXRlc3BhY2Ugb24KKyAgIGEgcGxhdGZvcm0gdGhhdCBwcmVwZW5kcyBsZWFkaW5nIHdoaXRlc3BhY2VzIHRvIGl0cyAid2MgLWwiIG91dHB1dC4KKyAgIChtZXJnZSAyMTg1ZDNiIGVzL3JlYmFzZS1pLWNvdW50LXRvZG8gbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgYm9ycm93ZWQgY29kZSBpbiB0aGUga3dzZXQgQVBJIGRpZCBub3QgZm9sbG93IG91ciB1c3VhbAorICAgY29udmVudGlvbiB0byB1c2UgInVuc2lnbmVkIGNoYXIiIHRvIHN0b3JlIHZhbHVlcyB0aGF0IHJhbmdlIGZyb20KKyAgIDAtMjU1LgorICAgKG1lcmdlIDE4OWM4NjAgYncva3dzZXQtdXNlLXVuc2lnbmVkIGxhdGVyIHRvIG1haW50KS4KKworICogQSBjb3JydXB0IGlucHV0IHRvICJnaXQgZGlmZiAtTSIgdXNlZCB0byBjYXVzZSBpdCB0byBzZWdmYXVsdC4KKyAgIChtZXJnZSA0ZDZiZTAzIGprL2RpZmZjb3JlLXJlbmFtZS1kdXBsaWNhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDZXJ0YWluIGJ1aWxkcyBvZiBHUEcgdHJpZ2dlcmVkIGZhbHNlIGJyZWFrYWdlcyBpbiBhIHRlc3QuCisgICAobWVyZ2UgM2Y4OGMxYiBtZy92ZXJpZnktY29tbWl0IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBpbWFwLXNlbmQiIGxlYXJuZWQgdG8gb3B0aW9uYWxseSB0YWxrIHdpdGggYW4gSU1BUCBzZXJ2ZXIgdmlhCisgICBsaWJjVVJMLiBCZWNhdXNlIHRoZXJlIGlzIG5vIG90aGVyIG9wdGlvbiB3aGVuIEdpdCBpcyBidWlsdCB3aXRoCisgICB0aGUgTk9fT1BFTlNTTCBvcHRpb24sIHVzZSBsaWJjVVJMIGJ5IGRlZmF1bHQgaW4gdGhhdCBjYXNlLgorICAgKG1lcmdlIGRjZDAxZWEga20vaW1hcC1zZW5kLWxpYmN1cmwtb3B0aW9ucyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgbG9nIC0tZGVjb3JhdGUiIGRpZCBub3QgcmVzZXQgY29sb3JzIGNvcnJlY3RseSBhcm91bmQgdGhlCisgICBicmFuY2ggbmFtZXMuCisgICAobWVyZ2UgNWVlODc1OCBqYy9kZWNvcmF0ZS1sZWFreS1zZXBhcmF0b3ItY29sb3IgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0aGF0IHJlYWRzIGZyb20gdGhlIGN0YWdzIGZpbGUgaW4gdGhlIGNvbXBsZXRpb24gc2NyaXB0CisgICAoaW4gY29udHJpYi8pIGRpZCBub3Qgc3BlbGwgJHtwYXJhbS9wYXR0ZXJuL3N0cmluZ30gc3Vic3RpdHV0aW9uCisgICBjb3JyZWN0bHksIHdoaWNoIGhhcHBlbmVkIHRvIHdvcmsgd2l0aCBiYXNoIGJ1dCBub3Qgd2l0aCB6c2guCisgICAobWVyZ2UgZGI4ZDc1MCBqcy9jb21wbGV0aW9uLWN0YWdzLXBhdHRlcm4tc3Vic3RpdHV0aW9uLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB0cmFuc2Zlci5oaWRlcmVmcyBzdXBwb3J0IGRpZCBub3QgcXVpdGUgd29yayBmb3Igc21hcnQtaHR0cAorICAgdHJhbnNwb3J0LgorICAgKG1lcmdlIDhkZGYzY2Egamsvc21hcnQtaHR0cC1oaWRlLXJlZnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBJbiB0aGUgImdpdCB0YWcgLWgiIG91dHB1dCwgbW92ZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlCisgICAiLS1jb2x1bW4iIGFuZCAiLS1zb3J0IiBvcHRpb25zIHRvIHRoZSAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKKyAgIHNlY3Rpb24uCisgICAobWVyZ2UgZGQwNTljNiBqay90YWctaC1jb2x1bW4taXMtYS1saXN0aW5nLW9wdGlvbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcHJ1bmUiIHVzZWQgdG8gbGFyZ2VseSBpZ25vcmUgYnJva2VuIHJlZnMgd2hlbiBkZWNpZGluZyB3aGljaAorICAgb2JqZWN0cyBhcmUgc3RpbGwgYmVpbmcgdXNlZCwgd2hpY2ggY291bGQgY2F1c2UgcmVmZXJlbmNlCisgICBjb3JydXB0aW9uIHRvIGxlYWQgdG8gb2JqZWN0IGxvc3MuCisgICAobWVyZ2UgZWE1NmM0ZSBqay9wcnVuZS13aXRoLWNvcnJ1cHQtcmVmcyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzcGxpdC1pbmRleCBtb2RlIGludHJvZHVjZWQgaW4gdjIuMy4wLXJjMH40MSB3YXMgYnJva2VuIGluIHRoZQorICAgY29kZXBhdGggdG8gcHJvdGVjdCB1cyBhZ2FpbnN0IGEgYnJva2VuIHJlaW1wbGVtZW50YXRpb24gb2YgR2l0CisgICB0aGF0IHdyaXRlcyBhbiBpbnZhbGlkIGluZGV4IHdpdGggZHVwbGljYXRlZCBpbmRleCBlbnRyaWVzLCBldGMuCisgICAobWVyZ2UgMDNmMTVhNyB0Zy9maXgtY2hlY2stb3JkZXItd2l0aC1zcGxpdC1pbmRleCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2giLCB3aGVuIGZldGNoaW5nIGEgY29tbWl0IHVzaW5nIHRoZQorICAgYWxsb3ctdGlwLXNoYTEtaW4td2FudCBleHRlbnNpb24sIGNvdWxkIGhhdmUgZmFpbGVkIHRvIGZldGNoIGFsbCBvZgorICAgdGhlIHJlcXVlc3RlZCByZWZzLgorICAgKG1lcmdlIDMyZDA0NjIgamsvZmV0Y2gtcGFjayBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIGZhaWx1cmUgZWFybHkgaW4gdGhlICJnaXQgY2xvbmUiIHRoYXQgc3RhcnRlZCBjcmVhdGluZyB0aGUKKyAgIHdvcmtpbmcgdHJlZSBhbmQgcmVwb3NpdG9yeSBjb3VsZCBoYXZlIHJlc3VsdGVkIGluIHRoZSBmYWlsdXJlIHRvCisgICBjbGVhbiB1cCBzb21lIGRpcmVjdG9yaWVzIGFuZCBmaWxlcy4KKyAgIChtZXJnZSAxNmVmZjZjIGprL2NsZWFudXAtZmFpbGVkLWNsb25lIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjb21tZW5kIGZvcm1hdC1wYXRjaCBhbmQgc2VuZC1lbWFpbCBmb3IgdGhvc2Ugd2hvIHdhbnQgdG8gc3VibWl0CisgICBwYXRjaGVzIHRvIHRoaXMgcHJvamVjdC4KKyAgIChtZXJnZSBiMjVjNDY5IGpjL3N1Ym1pdHRpbmctcGF0Y2hlcy1tZW50aW9uLXNlbmQtZW1haWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBEbyBub3Qgc3Bhd24gdGhlIHBhZ2VyIHdoZW4gImdpdCBncmVwIiBpcyBydW4gd2l0aCAiLS1xdWlldCIuCisgICAobWVyZ2UgYzIwNDhmMCB3cy9ncmVwLXF1aWV0LW5vLXBhZ2VyIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHByb21wdCBzY3JpcHQgKGluIGNvbnRyaWIvKSBkaWQgbm90IHNob3cgdGhlIHVudHJhY2tlZCBzaWduCisgICB3aGVuIHdvcmtpbmcgaW4gYSBzdWJkaXJlY3Rvcnkgd2l0aG91dCBhbnkgdW50cmFja2VkIGZpbGVzLgorICAgKG1lcmdlIDliZGM1MTcgY3QvcHJvbXB0LXVudHJhY2tlZC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBlYXJsaWVyIHVwZGF0ZSB0byB0aGUgVVJMIHBhcnNlciBicm9rZSBhbiBhZGRyZXNzIHRoYXQgY29udGFpbnMKKyAgIGEgY29sb24gYnV0IGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIHBvcnQgbnVtYmVyLCBsaWtlCisgICBzc2g6Ly9leGFtcGxlLmNvbTovcGF0aC90by9yZXBvLgorICAgKG1lcmdlIDZiNmM1ZjcgdGIvY29ubmVjdC1pcHY2LXBhcnNlLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgY2xlYW51cHMgYW5kIGRvY3VtZW50YXRpb24gdXBkYXRlcy4KKyAgIChtZXJnZSAyY2U2M2U5IHJzL3NpbXBsZS1jbGVhbnVwcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzNiYWE2OSByai9uby14b3Blbi1zb3VyY2UtZm9yLWN5Z3dpbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgODE3ZDAzZSBqYy9kaWZmLXRlc3QtdXBkYXRlcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZWIzMmM2NiBhay90NTUxNi10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiY2Q1N2NiIG1yL2RvYy1jbGVhbi1mLWYgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDBkNmFjY2MgbWcvZG9jLXN0YXR1cy1jb2xvci1zbG90IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1M2U1M2M3IHNnL2NvbXBsZXRpb24tcmVtb3RlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4ZmE3OTc1IGFrL2dpdC1kb25lLWhlbHAtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOWE2ZjEyOCBycy9kZWZsYXRlLWluaXQtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNmY3NWQ0NSBycy91c2UtaXN4ZGlnaXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM3NmU0YjMgamsvdGVzdC1hbm5veWFuY2VzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3MDMyMDU0IG5kL2RvYy1naXQtaW5kZXgtdmVyc2lvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTg2OWM1ZSB0Zy90ZXN0LWluZGV4LXY0IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1OTlkMjIzIGprL3NpbXBsaWZ5LWNzdW0tZmlsZS1zaGExZmQtY2hlY2sgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDI2MGQ1ODUgc2cvY29tcGxldGlvbi1naXRjb21wLW5sLWZvci1yZWZzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3NzdjNTVhIGpjL3JlcG9ydC1wYXRoLWVycm9yLXRvLWRpciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZmRkZmFmOCBwaC9wdXNoLWRvYy1jYXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQ1MGQzMWUgc3MvcHVsbC1yZWJhc2UtcHJlc2VydmUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGM4YzNmMWQgcHQvZW50ZXItcmVwby1jb21tZW50LWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDdiZmI5ZSBqei9naXR3ZWItY29uZi1kb2MtZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBmOTA3MjgyIGprL2NoZXJyeS1waWNrLWRvY2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDNjMDgxMSBpdS9maXgtcGFyc2Utb3B0aW9ucy1oLWNvbW1lbnQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDZjM2IyYWYgamcvY2d1aWRlLXdlLWNhbm5vdC1jb3VudCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMmI4YmQ0NCBqay9wYWNrLWNvcnJ1cHRpb24tcG9zdC1tb3J0ZW0gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDk1ODVjYjggam4vZG9jLWZhc3QtaW1wb3J0LW5vLTE2LW9jdG9wdXMtbGltaXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDVkY2QxYjEgcHMvZ3JlcC1oZWxwLWFsbC1jYWxsYmFjay1hcmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGYxZjRjODQgdmEvZml4LWdpdC1wNC10ZXN0cyBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4xLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NWE2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4xLnR4dApAQCAtMCwwICsxLDQwIEBACitHaXQgdjIuNC4xIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40CistLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSB1c3VhbCAiZ2l0IGRpZmYiIHdoZW4gc2VlaW5nIGEgZmlsZSB0dXJuaW5nIGludG8gYSBkaXJlY3RvcnkKKyAgIHNob3dlZCBhIHBhdGNoc2V0IHRvIHJlbW92ZSB0aGUgZmlsZSBhbmQgY3JlYXRlIGFsbCBmaWxlcyBpbiB0aGUKKyAgIGRpcmVjdG9yeSwgYnV0ICJnaXQgZGlmZiAtLW5vLWluZGV4IiBzaW1wbHkgcmVmdXNlZCB0byB3b3JrLiAgQWxzbywKKyAgIHdoZW4gYXNrZWQgdG8gY29tcGFyZSBhIGZpbGUgYW5kIGEgZGlyZWN0b3J5LCBpbWl0YXRlIFBPU0lYICJkaWZmIgorICAgYW5kIGNvbXBhcmUgdGhlIGZpbGUgd2l0aCB0aGUgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gdGhlCisgICBkaXJlY3RvcnksIGluc3RlYWQgb2YgcmVmdXNpbmcgdG8gcnVuLgorCisgKiBUaGUgZGVmYXVsdCAkSE9NRS8uZ2l0Y29uZmlnIGZpbGUgY3JlYXRlZCB1cG9uICJnaXQgY29uZmlnIC0tZ2xvYmFsIgorICAgdGhhdCBlZGl0cyBpdCBoYWQgaW5jb3JyZWN0bHkgc3BlbGxlZCB1c2VyLm5hbWUgYW5kIHVzZXIuZW1haWwKKyAgIGVudHJpZXMgaW4gaXQuCisKKyAqICJnaXQgY29tbWl0IC0tZGF0ZT1ub3ciIG9yIGFueXRoaW5nIHRoYXQgcmVsaWVzIG9uIGFwcHJveGlkYXRlIGxvc3QKKyAgIHRoZSBkYXlsaWdodC1zYXZpbmctdGltZSBvZmZzZXQuCisKKyAqICJnaXQgY2F0LWZpbGUgYmwgJGJsb2IiIGZhaWxlZCB0byBiYXJmIGV2ZW4gdGhvdWdoIHRoZXJlIGlzIG5vCisgICBvYmplY3QgdHlwZSB0aGF0IGlzICJibCIuCisKKyAqIFRlYWNoIHRoZSBjb2RlcGF0aHMgdGhhdCByZWFkIC5naXRpZ25vcmUgYW5kIC5naXRhdHRyaWJ1dGVzIGZpbGVzCisgICB0aGF0IHRoZXNlIGZpbGVzIGVuY29kZWQgaW4gVVRGLTggbWF5IGhhdmUgVVRGLTggQk9NIG1hcmtlciBhdCB0aGUKKyAgIGJlZ2lubmluZzsgdGhpcyBtYWtlcyBpdCBpbiBsaW5lIHdpdGggd2hhdCB3ZSBkbyBmb3IgY29uZmlndXJhdGlvbgorICAgZmlsZXMgYWxyZWFkeS4KKworICogQWNjZXNzIHRvIG9iamVjdHMgaW4gcmVwb3NpdG9yaWVzIHRoYXQgYm9ycm93IGZyb20gYW5vdGhlciBvbmUgb24gYQorICAgc2xvdyBORlMgc2VydmVyIHVubmVjZXNzYXJpbHkgZ290IG1vcmUgZXhwZW5zaXZlIGR1ZSB0byByZWNlbnQgY29kZQorICAgYmVjb21pbmcgbW9yZSBjYXV0aW91cyBpbiBhIG5haXZlIHdheSBub3QgdG8gbG9zZSBvYmplY3RzIHRvIHBydW5pbmcuCisKKyAqIFdlIGF2b2lkIHNldHRpbmcgY29yZS53b3JrdHJlZSB3aGVuIHRoZSByZXBvc2l0b3J5IGxvY2F0aW9uIGlzIHRoZQorICAgIi5naXQiIGRpcmVjdG9yeSBkaXJlY3RseSBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUsIGJ1dAorICAgdGhlIGNvZGUgbWlzZGV0ZWN0ZWQgdGhlIGNhc2UgaW4gd2hpY2ggdGhlIHdvcmtpbmcgdHJlZSBpcyBhdCB0aGUKKyAgIHJvb3QgbGV2ZWwgb2YgdGhlIGZpbGVzeXN0ZW0gKHdoaWNoIGFyZ3VhYmx5IGlzIGEgc2lsbHkgdGhpbmcgdG8KKyAgIGRvLCBidXQgc3RpbGwgdmFsaWQpLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjEwLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjEwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjIxMTk5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMTAudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2Mi40LjEwIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC45CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogeGRpZmYgY29kZSB3ZSB1c2UgdG8gZ2VuZXJhdGUgZGlmZnMgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorICAgZXh0cmVtZWx5IGxhcmdlIGZpbGVzLiAgSXQgdXNlcyAiaW50IiBpbiBtYW55IHBsYWNlcywgd2hpY2ggY2FuCisgICBvdmVyZmxvdyBpZiB3ZSBoYXZlIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgbGluZXMgb3IgZXZlbiBieXRlcyBpbgorICAgb3VyIGlucHV0IGZpbGVzLCBmb3IgZXhhbXBsZS4gIENhcCB0aGUgaW5wdXQgc2l6ZSB0byBzb2Vtd2hlcmUKKyAgIGFyb3VuZCAxR0IgZm9yIG5vdy4KKworICogU29tZSBwcm90b2NvbHMgKGxpa2UgZ2l0LXJlbW90ZS1leHQpIGNhbiBleGVjdXRlIGFyYml0cmFyeSBjb2RlCisgICBmb3VuZCBpbiB0aGUgVVJMLiAgVGhlIFVSTHMgdGhhdCBzdWJtb2R1bGVzIHVzZSBtYXkgY29tZSBmcm9tCisgICBhcmJpdHJhcnkgc291cmNlcyAoZS5nLiwgLmdpdG1vZHVsZXMgZmlsZXMgaW4gYSByZW1vdGUKKyAgIHJlcG9zaXRvcnkpLCBhbmQgY2FuIGh1cnQgdGhvc2Ugd2hvIGJsaW5kbHkgZW5hYmxlIHJlY3Vyc2l2ZQorICAgZmV0Y2guICBSZXN0cmljdCB0aGUgYWxsb3dlZCBwcm90b2NvbHMgdG8gd2VsbCBrbm93biBhbmQgc2FmZQorICAgb25lcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwY2RjNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjIudHh0CkBAIC0wLDAgKzEsNDUgQEAKK0dpdCB2Mi40LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjQuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqICJnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRvbGQgLS1ub3QgLS1hbGwiIHRvIHNlZSBpZiBldmVyeXRoaW5nIHRoYXQKKyAgIGlzIHJlYWNoYWJsZSBmcm9tICRvbGQgaXMgYWxyZWFkeSBjb25uZWN0ZWQgdG8gdGhlIGV4aXN0aW5nIHJlZnMKKyAgIHdhcyB2ZXJ5IGluZWZmaWNpZW50LgorCisgKiAiaGFzaC1vYmplY3QgLS1saXRlcmFsbHkiIGludHJvZHVjZWQgaW4gdjIuMiB3YXMgbm90IHByZXBhcmVkIHRvCisgICB0YWtlIGEgcmVhbGx5IGxvbmcgb2JqZWN0IHR5cGUgbmFtZS4KKworICogImdpdCByZWJhc2UgLS1xdWlldCIgd2FzIG5vdCBxdWl0ZSBxdWlldCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8KKyAgIGRvLgorCisgKiBUaGUgY29tcGxldGlvbiBmb3IgImxvZyAtLWRlY29yYXRlPSIgcGFyYW1ldGVyIHZhbHVlIHdhcyBpbmNvcnJlY3QuCisKKyAqICJmaWx0ZXItYnJhbmNoIiBjb3JydXB0ZWQgY29tbWl0IGxvZyBtZXNzYWdlIHRoYXQgZW5kcyB3aXRoIGFuCisgICBpbmNvbXBsZXRlIGxpbmUgb24gcGxhdGZvcm1zIHdpdGggc29tZSAic2VkIiBpbXBsZW1lbnRhdGlvbnMgdGhhdAorICAgbXVuZ2Ugc3VjaCBhIGxpbmUuICBXb3JrIGl0IGFyb3VuZCBieSBhdm9pZGluZyB0byB1c2UgInNlZCIuCisKKyAqICJnaXQgZGFlbW9uIiBmYWlscyB0byBidWlsZCBmcm9tIHRoZSBzb3VyY2UgdW5kZXIgTk9fSVBWNgorICAgY29uZmlndXJhdGlvbiAocmVncmVzc2lvbiBpbiAyLjQpLgorCisgKiAiZ2l0IHN0YXNoIHBvcC9hcHBseSIgZm9yZ290IHRvIG1ha2Ugc3VyZSB0aGF0IG5vdCBqdXN0IHRoZSB3b3JraW5nCisgICB0cmVlIGlzIGNsZWFuIGJ1dCBhbHNvIHRoZSBpbmRleCBpcyBjbGVhbi4gVGhlIGxhdHRlciBpcyBpbXBvcnRhbnQKKyAgIGFzIGEgc3Rhc2ggYXBwbGljYXRpb24gY2FuIGNvbmZsaWN0IGFuZCB0aGUgaW5kZXggd2lsbCBiZSB1c2VkIGZvcgorICAgY29uZmxpY3QgcmVzb2x1dGlvbi4KKworICogV2UgaGF2ZSBwcmVwZW5kZWQgJEdJVF9FWEVDX1BBVEggYW5kIHRoZSBwYXRoICJnaXQiIGlzIGluc3RhbGxlZCBpbgorICAgKHR5cGljYWxseSAiL3Vzci9iaW4iKSB0byAkUEFUSCB3aGVuIGludm9raW5nIHN1YnByb2dyYW1zIGFuZCBob29rcworICAgZm9yIGFsbW9zdCBldGVybml0eSwgYnV0IHRoZSBvcmlnaW5hbCB1c2UgY2FzZSB0aGUgbGF0dGVyIHRyaWVkIHRvCisgICBzdXBwb3J0IHdhcyBzZW1pLWJvZ3VzIChpLmUuIGluc3RhbGwgZ2l0IHRvIC9vcHQvZm9vL2dpdCBhbmQgcnVuIGl0CisgICB3aXRob3V0IGhhdmluZyAvb3B0L2ZvbyBvbiAkUEFUSCksIGFuZCBtb3JlIGltcG9ydGFudGx5IGl0IGhhcworICAgYmVjb21lIGxlc3MgYW5kIGxlc3MgcmVsZXZhbnQgYXMgR2l0IGdyZXcgbW9yZSBtYWluc3RyZWFtIChpLmUuIHRoZQorICAgdXNlcnMgd291bGQgX3dhbnRfIHRvIGhhdmUgaXQgb24gdGhlaXIgJFBBVEgpLiAgU3RvcCBwcmVwZW5kaW5nIHRoZQorICAgcGF0aCBpbiB3aGljaCAiZ2l0IiBpcyBpbnN0YWxsZWQgdG8gdXNlcnMnICRQQVRILCBhcyB0aGF0IHdvdWxkCisgICBpbnRlcmZlcmUgdGhlIGNvbW1hbmQgc2VhcmNoIG9yZGVyIHBlb3BsZSBkZXBlbmQgb24gKGUuZy4gdGhleSBtYXkKKyAgIG5vdCBsaWtlIHZlcnNpb25zIG9mIHByb2dyYW1zIHRoYXQgYXJlIHVucmVsYXRlZCB0byBHaXQgaW4gL3Vzci9iaW4KKyAgIGFuZCB3YW50IHRvIG92ZXJyaWRlIHRoZW0gYnkgaGF2aW5nIGRpZmZlcmVudCBvbmVzIGluIC91c3IvbG9jYWwvYmluCisgICBhbmQgaGF2ZSB0aGUgbGF0dGVyIGRpcmVjdG9yeSBlYXJsaWVyIGluIHRoZWlyICRQQVRIKS4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4zLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNGQyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC4zLnR4dApAQCAtMCwwICsxLDc2IEBACitHaXQgdjIuNC4zIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40LjMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBFcnJvciBtZXNzYWdlcyBmcm9tICJnaXQgYnJhbmNoIiBjYWxsZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGFzCisgICAicmVtb3RlIGJyYW5jaGVzIi4KKworICogImdpdCByZXJlcmUgZm9yZ2V0IiBpbiBhIHJlcG9zaXRvcnkgd2l0aG91dCByZXJlcmUgZW5hYmxlZCBnYXZlIGEKKyAgIGNyeXB0aWMgZXJyb3IgbWVzc2FnZTsgaXQgc2hvdWxkIGJlIGEgc2lsZW50IG5vLW9wIGluc3RlYWQuCisKKyAqICJnaXQgcHVsbCAtLWxvZyIgYW5kICJnaXQgcHVsbCAtLW5vLWxvZyIgd29ya2VkIGFzIGV4cGVjdGVkLCBidXQKKyAgICJnaXQgcHVsbCAtLWxvZz0yMCIgZGlkIG5vdC4KKworICogVGhlIHB1bGwuZmYgY29uZmlndXJhdGlvbiB3YXMgc3VwcG9zZWQgdG8gb3ZlcnJpZGUgdGhlIG1lcmdlLmZmCisgICBjb25maWd1cmF0aW9uLCBidXQgaXQgZGlkbid0LgorCisgKiBUaGUgY29kZSB0byByZWFkIHBhY2stYml0bWFwIHdhbnRlZCB0byBhbGxvY2F0ZSBhIGZldyBodW5kcmVkCisgICBwb2ludGVycyB0byBhIHN0cnVjdHVyZSwgYnV0IGJ5IG1pc3Rha2UgYWxsb2NhdGVkIGFuZCBsZWFrZWQgbWVtb3J5CisgICBlbm91Z2ggdG8gaG9sZCB0aGF0IG1hbnkgYWN0dWFsIHN0cnVjdHVyZXMuICBDb3JyZWN0IHRoZSBhbGxvY2F0aW9uCisgICBzaXplIGFuZCBhbHNvIGhhdmUgaXQgb24gc3RhY2ssIGFzIGl0IGlzIHNtYWxsIGVub3VnaC4KKworICogVmFyaW91cyBkb2N1bWVudGF0aW9uIG1hcmstdXAgZml4ZXMgdG8gbWFrZSB0aGUgb3V0cHV0IG1vcmUKKyAgIGNvbnNpc3RlbnQgaW4gZ2VuZXJhbCBhbmQgYWxzbyBtYWtlIEFzY2lpRG9jdG9yIChhbiBhbHRlcm5hdGl2ZQorICAgZm9ybWF0dGVyKSBoYXBwaWVyLgorCisgKiAiZ2l0IGJ1bmRsZSB2ZXJpZnkiIGRpZCBub3QgZGlhZ25vc2UgZXh0cmEgcGFyYW1ldGVycyBvbiB0aGUKKyAgIGNvbW1hbmQgbGluZS4KKworICogTXVsdGktcmVmIHRyYW5zYWN0aW9uIHN1cHBvcnQgd2UgbWVyZ2VkIGEgZmV3IHJlbGVhc2VzIGFnbworICAgdW5uZWNlc3NhcmlseSBrZXB0IG1hbnkgZmlsZSBkZXNjcmlwdG9ycyBvcGVuLCByaXNraW5nIHRvIGZhaWwgd2l0aAorICAgcmVzb3VyY2UgZXhoYXVzdGlvbi4KKworICogVGhlIHJlZiBBUEkgZGlkIG5vdCBoYW5kbGUgY2FzZXMgd2hlcmUgJ3JlZnMvaGVhZHMveHl6enkvZnJvdHonIGlzCisgICByZW1vdmVkIGF0IHRoZSBzYW1lIHRpbWUgYXMgJ3JlZnMvaGVhZHMveHl6enknIGlzIGFkZGVkIChvciB2aWNlCisgICB2ZXJzYSkgdmVyeSB3ZWxsLgorCisgKiBUaGUgImxvZyAtLWRlY29yYXRlIiBlbmhhbmNlbWVudCBpbiBHaXQgMi40IHRoYXQgc2hvd3MgdGhlIGNvbW1pdAorICAgYXQgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggZS5nLiAiSEVBRCAtPiBtYXN0ZXIiLCBkaWQgbm90CisgICB3b3JrIHdpdGggLS1kZWNvcmF0ZT1mdWxsLgorCisgKiBUaGVyZSB3YXMgYSBjb21tZW50ZWQtb3V0IChpbnN0ZWFkIG9mIGJlaW5nIG1hcmtlZCB0byBleHBlY3QKKyAgIGZhaWx1cmUpIHRlc3QgdGhhdCBkb2N1bWVudGVkIGEgYnJlYWthZ2UgdGhhdCB3YXMgZml4ZWQgc2luY2UgdGhlCisgICB0ZXN0IHdhcyB3cml0dGVuOyB0dXJuIGl0IGludG8gYSBwcm9wZXIgdGVzdC4KKworICogY29yZS5leGNsdWRlc2ZpbGUgKGRlZmF1bHRpbmcgdG8gJFhER19IT01FL2dpdC9pZ25vcmUpIGlzIHN1cHBvc2VkCisgICB0byBiZSBvdmVycmlkZGVuIGJ5IHJlcG9zaXRvcnktc3BlY2lmaWMgLmdpdC9pbmZvL2V4Y2x1ZGUgZmlsZSwgYnV0CisgICB0aGUgb3JkZXIgd2FzIHN3YXBwZWQgZnJvbSB0aGUgYmVnaW5uaW5nLiBUaGlzIGJlbGF0ZWRseSBmaXhlcyBpdC4KKworICogVGhlIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiBjb2RlIGZvciAic3NoIiB0cmFuc3BvcnQgdHJpZWQgdG8gYWJzb3JiCisgICBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBzdG9jayAic3NoIiBhbmQgUHV0dHktc3VwcGxpZWQgInBsaW5rIiBhbmQKKyAgIGl0cyBkZXJpdmF0aXZlcywgYnV0IHRoZSBsb2dpYyB0byB0ZWxsIHRoYXQgd2UgYXJlIHVzaW5nICJwbGluayIKKyAgIHZhcmlhbnRzIHdlcmUgdG9vIGxvb3NlIGFuZCBmYWxzZWx5IHRyaWdnZXJlZCB3aGVuICJwbGluayIgYXBwZWFyZWQKKyAgIGFueXdoZXJlIGluIHRoZSBwYXRoIChlLmcuICIvaG9tZS9tZS9iaW4vdXBsaW5rL3NzaCIpLgorCisgKiAiZ2l0IHJlYmFzZSAtaSIgbW92ZWQgdGhlICJjdXJyZW50IiBjb21tYW5kIGZyb20gInRvZG8iIHRvICJkb25lIiBhCisgICBiaXQgdG9vIHByZW1hdHVyZWx5LCBsb3NpbmcgYSBzdGVwIHdoZW4gYSAicGljayIgZGlkIG5vdCBldmVuIHN0YXJ0LgorCisgKiAiZ2l0IGFkZCAtZSIgZGlkIG5vdCBhbGxvdyB0aGUgdXNlciB0byBhYm9ydCB0aGUgb3BlcmF0aW9uIGJ5CisgICBraWxsaW5nIHRoZSBlZGl0b3IuCisKKyAqIEdpdCAyLjQgYnJva2Ugc2V0dGluZyB2ZXJib3NpdHkgYW5kIHByb2dyZXNzIGxldmVscyBvbiAiZ2l0IGNsb25lIgorICAgd2l0aCBuYXRpdmUgdHJhbnNwb3J0cy4KKworICogU29tZSB0aW1lIGFnbywgImdpdCBibGFtZSIgKGluY29ycmVjdGx5KSBsb3N0IHRoZSBjb252ZXJ0X3RvX2dpdCgpCisgICBjYWxsIHdoZW4gc3ludGhlc2l6aW5nIGEgZmFrZSAidGlwIiBjb21taXQgdGhhdCByZXByZXNlbnRzIHRoZQorICAgc3RhdGUgaW4gdGhlIHdvcmtpbmcgdHJlZSwgd2hpY2ggYnJva2UgZm9sa3Mgd2hvIHJlY29yZCB0aGUgaGlzdG9yeQorICAgd2l0aCBMRiBsaW5lIGVuZGluZyB0byBtYWtlIHRoZWlyIHByb2plY3QgcG9ydGFiaWxlIGFjcm9zcworICAgcGxhdGZvcm1zIHdoaWxlIHRlcm1pbmF0aW5nIGxpbmVzIGluIHRoZWlyIHdvcmtpbmcgdHJlZSBmaWxlcyB3aXRoCisgICBDUkxGIGZvciB0aGVpciBwbGF0Zm9ybS4KKworICogQ29kZSBjbGVhbi11cCBmb3IgeGRnIGNvbmZpZ3VyYXRpb24gcGF0aCBzdXBwb3J0LgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFjY2QwMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjQudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0dpdCB2Mi40LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjQuMworLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIGwxMG4gdXBkYXRlcyBmb3IgR2VybWFuLgorCisgKiBBbiBlYXJsaWVyIGxlYWtmaXggdG8gYml0bWFwIHRlc3RpbmcgY29kZSB3YXMgaW5jb21wbGV0ZS4KKworICogImdpdCBjbGVhbiBwYXRoc3BlYy4uLiIgdHJpZWQgdG8gbHN0YXQoMikgYW5kIGNvbXBsYWluIGV2ZW4gZm9yCisgICBwYXRocyBvdXRzaWRlIHRoZSBnaXZlbiBwYXRoc3BlYy4KKworICogQ29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBIVFRQIHNlcnZlciBhbmQgaHR0cF9iYWNrZW5kIHByb2Nlc3MgY2FuCisgICBsZWFkIHRvIGEgZGVhZC1sb2NrIHdoZW4gcmVsYXlpbmcgYSBsYXJnZSByZWYgbmVnb3RpYXRpb24gcmVxdWVzdC4KKyAgIERpYWdub3NlIHRoZSBzaXR1YXRpb24gYmV0dGVyLCBhbmQgbWl0aWdhdGUgaXQgYnkgcmVhZGluZyBzdWNoIGEKKyAgIHJlcXVlc3QgZmlyc3QgaW50byBjb3JlICh0byBhIHJlYXNvbmFibGUgbGltaXQpLgorCisgKiBUaGUgY2xlYW4vc211ZGdlIGludGVyZmFjZSBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGZpbHRlcmluZyBhbgorICAgZW1wdHkgY29udGVudHMgKGZhaWxlZCBhbmQgdGhlbiBwYXNzZWQgdGhlIGVtcHR5IGlucHV0IHRocm91Z2gpLgorICAgSXQgY2FuIGJlIGFyZ3VlZCB0aGF0IGEgZmlsdGVyIHRoYXQgcHJvZHVjZXMgYW55dGhpbmcgYnV0IGVtcHR5IGZvcgorICAgYW4gZW1wdHkgaW5wdXQgaXMgbm9uc2Vuc2UsIGJ1dCBpZiB0aGUgdXNlciB3YW50cyB0byBkbyBzdHJhbmdlCisgICB0aGluZ3MsIHRoZW4gd2h5IG5vdD8KKworICogTWFrZSAiZ2l0IHN0YXNoIHNvbWV0aGluZyAtLWhlbHAiIGVycm9yIG91dCwgc28gdGhhdCB1c2VycyBjYW4KKyAgIHNhZmVseSBzYXkgImdpdCBzdGFzaCBkcm9wIC0taGVscCIuCisKKyAqIENsYXJpZnkgdGhhdCAibG9nIC0tcmF3IiBhbmQgImxvZyAtLWZvcm1hdD1yYXciIGFyZSB1bnJlbGF0ZWQKKyAgIGNvbmNlcHRzLgorCisgKiBDYXRjaCBhIHByb2dyYW1tZXIgbWlzdGFrZSB0byBmZWVkIGEgcG9pbnRlciBub3QgYW4gYXJyYXkgdG8KKyAgIEFSUkFZX1NJWkUoKSBtYWNybywgYnkgdXNpbmcgYSBjb3VwbGUgb2YgR0NDIGV4dGVuc2lvbnMuCisKK0Fsc28gY29udGFpbnMgdHlwb2ZpeGVzLCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIHRyaXZpYWwgY29kZQorY2xlYW4tdXBzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuNS50eHQgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC41LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjgyOTdjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuNS50eHQKQEAgLTAsMCArMSwyOCBAQAorR2l0IHYyLjQuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC40CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogVGhlIHNldHVwIGNvZGUgdXNlZCB0byBkaWUgd2hlbiBjb3JlLmJhcmUgYW5kIGNvcmUud29ya3RyZWUgYXJlIHNldAorICAgaW5jb25zaXN0ZW50bHksIGV2ZW4gZm9yIGNvbW1hbmRzIHRoYXQgZG8gbm90IG5lZWQgd29ya2luZyB0cmVlLgorCisgKiBUaGVyZSB3YXMgYSBkZWFkIGNvZGUgdGhhdCB1c2VkIHRvIGhhbmRsZSAiZ2l0IHB1bGwgLS10YWdzIiBhbmQKKyAgIHNob3cgc3BlY2lhbC1jYXNlZCBlcnJvciBtZXNzYWdlLCB3aGljaCB3YXMgbWFkZSBpcnJlbGV2YW50IHdoZW4KKyAgIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIG9wdGlvbiBjaGFuZ2VkIGJhY2sgaW4gR2l0IDEuOSBkYXlzLgorCisgKiAiY29sb3IuZGlmZi5wbGFpbiIgd2FzIGEgbWlzbm9tZXI7IGdpdmUgaXQgJ2NvbG9yLmRpZmYuY29udGV4dCcgYXMKKyAgIGEgbW9yZSBsb2dpY2FsIHN5bm9ueW0uCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHJlYWRlci93cml0ZXIgdXNlcyBtbWFwKDIpIGludGVyZmFjZSB0byBhY2Nlc3MKKyAgIHRoZSBmaWxlczsgd2hlbiB3ZSBmaW5kIGEgZGlyZWN0b3J5LCBpdCBiYXJmZWQgd2l0aCAiT3V0IG9mIG1lbW9yeT8iLgorCisgKiBSZWNlbnQgImdpdCBwcnVuZSIgdHJhdmVyc2VzIHlvdW5nIHVucmVhY2hhYmxlIG9iamVjdHMgdG8gc2FmZWtlZXAKKyAgIG9sZCBvYmplY3RzIGluIHRoZSByZWFjaGFiaWxpdHkgY2hhaW4gZnJvbSB0aGVtLCB3aGljaCBzb21ldGltZXMKKyAgIHNob3dlZCB1bm5lY2Vzc2FyeSBlcnJvciBtZXNzYWdlcyB0aGF0IGFyZSBhbGFybWluZy4KKworICogImdpdCByZWJhc2UgLWkiIGZpcmVkIHBvc3QtcmV3cml0ZSBob29rIHdoZW4gaXQgc2hvdWxkbid0IChuYW1lbHksCisgICB3aGVuIGl0IHdhcyB0b2xkIHRvIHN0b3Agc2VxdWVuY2luZyB3aXRoICdleGVjJyBpbnNuKS4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC42LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1M2YzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC42LnR4dApAQCAtMCwwICsxLDIzIEBACitHaXQgdjIuNC42IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40LjUKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGZldGNoIC0tZGVwdGg9PGRlcHRoPiIgYW5kICJnaXQgY2xvbmUgLS1kZXB0aD08ZGVwdGg+IiBpc3N1ZWQKKyAgIGEgc2hhbGxvdyB0cmFuc2ZlciByZXF1ZXN0IGV2ZW4gdG8gYW4gdXBsb2FkLXBhY2sgdGhhdCBkb2VzIG5vdAorICAgc3VwcG9ydCB0aGUgY2FwYWJpbGl0eS4KKworICogImdpdCBmc2NrIiB1c2VkIHRvIGlnbm9yZSBtaXNzaW5nIG9yIGludmFsaWQgb2JqZWN0cyByZWNvcmRlZCBpbiByZWZsb2cuCisKKyAqIFRoZSB0Y3NoIGNvbXBsZXRpb24gd3JpdGVzIGEgYmFzaCBzY3JpcHRsZXQgYnV0IHRoYXQgd291bGQgaGF2ZQorICAgZmFpbGVkIGZvciB1c2VycyB3aXRoIG5vY2xvYmJlciBzZXQuCisKKyAqIFJlY2VudCBNYWMgT1MgWCB1cGRhdGVzIGJyZWFrcyB0aGUgbG9naWMgdG8gZGV0ZWN0IHRoYXQgdGhlIG1hY2hpbmUKKyAgIGlzIG9uIHRoZSBBQyBwb3dlciBpbiB0aGUgc2FtcGxlIHByZS1hdXRvLWdjIHNjcmlwdC4KKworICogImdpdCBmb3JtYXQtcGF0Y2ggLS1pZ25vcmUtaWYtdXBzdHJlYW0gQS4uQiIgZGlkIG5vdCBsaWtlIHRvIGJlIGZlZAorICAgdGFncyBhcyBib3VuZGFyeSBjb21taXRzLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjcudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuNy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhYzQxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjcudHh0CkBAIC0wLDAgKzEsNTMgQEAKK0dpdCB2Mi40LjcgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjQuNgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIEEgbWlub3IgcmVncmVzc2lvbiB0byAiZ2l0IGZzY2siIGluIHYyLjIgZXJhIHdhcyBmaXhlZDsgaXQKKyAgIGNvbXBsYWluZWQgYWJvdXQgYSBib2R5LWxlc3MgdGFnIG9iamVjdCB3aGVuIGl0IGxhY2tlZCBhCisgICBzZXBhcmF0b3IgZW1wdHkgbGluZSBhZnRlciBpdHMgaGVhZGVyIHRvIHNlcGFyYXRlIGl0IHdpdGggYQorICAgbm9uLWV4aXN0ZW50IGJvZHkuCisKKyAqIFdlIHVzZWQgdG8gYXNrIGxpYkNVUkwgdG8gdXNlIHRoZSBtb3N0IHNlY3VyZSBhdXRoZW50aWNhdGlvbiBtZXRob2QKKyAgIGF2YWlsYWJsZSB3aGVuIHRhbGtpbmcgdG8gYW4gSFRUUCBwcm94eSBvbmx5IHdoZW4gd2Ugd2VyZSB0b2xkIHRvCisgICB0YWxrIHRvIG9uZSB2aWEgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuICBXZSBub3cgYXNrIGxpYkNVUkwgdG8KKyAgIGFsd2F5cyB1c2UgdGhlIG1vc3Qgc2VjdXJlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCwgYmVjYXVzZSB0aGUgdXNlcgorICAgY2FuIHRlbGwgbGliQ1VSTCB0byB1c2UgYW4gSFRUUCBwcm94eSB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIHdpdGhvdXQgdXNpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKKyAqIFdoZW4geW91IHNheSAiITxFTlRFUj4iIHdoaWxlIHJ1bm5pbmcgc2F5ICJnaXQgbG9nIiwgeW91J2QgY29uZnVzZQorICAgeW91cnNlbGYgaW4gdGhlIHJlc3VsdGluZyBzaGVsbCwgdGhhdCBtYXkgbG9vayBhcyBpZiB5b3UgdG9vaworICAgY29udHJvbCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzaGVsbCB5b3Ugc3Bhd25lZCAiZ2l0IGxvZyIgZnJvbSBidXQKKyAgIHRoYXQgaXNuJ3Qgd2hhdCBpcyBoYXBwZW5pbmcuICBUbyB0aGF0IG5ldyBzaGVsbCwgd2UgbGVha2VkCisgICBHSVRfUEFHRVJfSU5fVVNFIGVudmlyb25tZW50IHZhcmlhYmxlIHRoYXQgd2FzIG1lYW50IGFzIGEgbG9jYWwKKyAgIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgb3JpZ2luYWwgIkdpdCIgYW5kIHN1YnByb2Nlc3NlcyB0aGF0IHdhcworICAgc3Bhd25lZCBieSBpdCBhZnRlciB3ZSBsYXVuY2hlZCB0aGUgcGFnZXIsIHdoaWNoIGNhdXNlZCBtYW55CisgICAiaW50ZXJlc3RpbmciIHRoaW5ncyB0byBoYXBwZW4sIGUuZy4gImdpdCBkaWZmIHwgY2F0IiBzdGlsbCBwYWludHMKKyAgIGl0cyBvdXRwdXQgaW4gY29sb3IgYnkgZGVmYXVsdC4KKworICAgU3RvcCBsZWFraW5nIHRoYXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIHBhZ2VyJ3MgaGFsZiBvZiB0aGUKKyAgIGZvcms7IHdlIG9ubHkgbmVlZCBpdCBvbiAiR2l0IiBzaWRlIHdoZW4gd2Ugc3Bhd24gdGhlIHBhZ2VyLgorCisgKiBBdm9pZCBwb3NzaWJsZSBzc2l6ZV90IHRvIGludCB0cnVuY2F0aW9uLgorCisgKiAiZ2l0IGNvbmZpZyIgZmFpbGVkIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHdoZW4gdGhlCisgICB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gaXMgaW5jYXBhYmxlIG9mIHJlbmFtaW5nIGEgZmlsZSB0aGF0IGlzIHN0aWxsCisgICBvcGVuLgorCisgKiBBIG1pbm9yIGJ1Z2ZpeCB3aGVuIHBhY2sgYml0bWFwIGlzIHVzZWQgd2l0aCAicmV2LWxpc3QgLS1jb3VudCIuCisKKyAqIEFuIGFuY2llbnQgdGVzdCBmcmFtZXdvcmsgZW5oYW5jZW1lbnQgdG8gYWxsb3cgY29sb3Igd2FzIG5vdAorICAgZW50aXJlbHkgY29ycmVjdDsgdGhpcyBtYWtlcyBpdCB3b3JrIGV2ZW4gd2hlbiB0cHV0IG5lZWRzIHRvIHJlYWQKKyAgIGZyb20gdGhlIH4vLnRlcm1pbmZvIHVuZGVyIHRoZSB1c2VyJ3MgcmVhbCBIT01FIGRpcmVjdG9yeS4KKworICogRml4IGEgc21hbGwgYnVnIGluIG91ciB1c2Ugb2YgdW1hc2soKSByZXR1cm4gdmFsdWUuCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IGV4aXQgd2l0aCBmYWlsdXJlIHdoZW4gZm9ybWF0LXBhdGNoIGl0IGludm9rZWQKKyAgIGZhaWxlZCBmb3Igd2hhdGV2ZXIgcmVhc29uLgorCisgKiBEaXNhYmxlICJoYXZlIHdlIGxvc3QgYSByYWNlIHdpdGggY29tcGV0aW5nIHJlcGFjaz8iIGNoZWNrIHdoaWxlCisgICByZWNlaXZpbmcgYSBodWdlIG9iamVjdCB0cmFuc2ZlciB0aGF0IHJ1bnMgaW5kZXgtcGFjay4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC44LnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOTQ2YjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNC44LnR4dApAQCAtMCwwICsxLDIxIEBACitHaXQgdjIuNC44IFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi40LjcKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiBBYmFuZG9uaW5nIGFuIGFscmVhZHkgYXBwbGllZCBjaGFuZ2UgaW4gImdpdCByZWJhc2UgLWkiIHdpdGgKKyAgICItLWNvbnRpbnVlIiBsZWZ0IENIRVJSWV9QSUNLX0hFQUQgYW5kIGNvbmZ1c2VkIGxhdGVyIHN0ZXBzLgorCisgKiBWYXJpb3VzIGZpeGVzIGFyb3VuZCAiZ2l0IGFtIiB0aGF0IGFwcGxpZXMgYSBwYXRjaCB0byBhIGhpc3RvcnkKKyAgIHRoYXQgaXMgbm90IHRoZXJlIHlldC4KKworICogImdpdCBmb3ItZWFjaC1yZWYiIHJlcG9ydGVkICJtaXNzaW5nIG9iamVjdCIgZm9yIDB7NDB9IHdoZW4gaXQKKyAgIGVuY291bnRlcnMgYSBicm9rZW4gcmVmLiAgVGhlIGxhY2sgb2Ygb2JqZWN0IHdob3NlIG5hbWUgaXMgMHs0MH0gaXMKKyAgIG5vdCB0aGUgcHJvYmxlbTsgdGhlIHJlZiBiZWluZyBicm9rZW4gaXMuCisKKyAqICJnaXQgY29tbWl0IC0tY2xlYW51cD1zY2lzc29ycyIgd2FzIG5vdCBjYXJlZnVsIGVub3VnaCB0byBwcm90ZWN0CisgICBhZ2FpbnN0IGdldHRpbmcgZm9vbGVkIGJ5IGEgbGluZSB0aGF0IGxvb2tlZCBsaWtlIHNjaXNzb3JzLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjkudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjQuOS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhZjlkZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi40LjkudHh0CkBAIC0wLDAgKzEsOSBAQAorR2l0IHYyLjQuOSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworRml4ZXMgc2luY2UgdjIuNC45CistLS0tLS0tLS0tLS0tLS0tLS0KKworICogQSBoYW5kZnVsIG9mIGNvZGVwYXRocyB0aGF0IHVzZWQgdG8gdXNlIGZpeGVkLXNpemVkIGFycmF5cyB0byBob2xkCisgICBwYXRobmFtZXMgaGF2ZSBiZWVuIGNvcnJlY3RlZCB0byB1c2Ugc3RyYnVmIGFuZCBvdGhlciBtZWNoYW5pc21zIHRvCisgICBhbGxvdyBsb25nZXIgcGF0aG5hbWVzIHdpdGhvdXQgZmVhcmluZyBvdmVyZmxvd3MuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MDQ0NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4wLnR4dApAQCAtMCwwICsxLDU2MyBAQAorR2l0IDIuNSBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi40CistLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIFRoZSBiYXNoIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgbGVhcm5lZCBhIGZldyBvcHRpb25zIHRoYXQKKyAgICJnaXQgcmV2ZXJ0IiB0YWtlcy4KKworICogV2hpdGVzcGFjZSBicmVha2FnZXMgaW4gZGVsZXRlZCBhbmQgY29udGV4dCBsaW5lcyBjYW4gYWxzbyBiZQorICAgcGFpbnRlZCBpbiB0aGUgb3V0cHV0IG9mICJnaXQgZGlmZiIgYW5kIGZyaWVuZHMgd2l0aCB0aGUgbmV3CisgICAtLXdzLWVycm9yLWhpZ2hsaWdodCBvcHRpb24uCisKKyAqIExpc3Qgb2YgY29tbWFuZHMgc2hvd24gYnkgImdpdCBoZWxwIiBhcmUgZ3JvdXBlZCBhbG9uZyB0aGUgd29ya2Zsb3cKKyAgIGVsZW1lbnRzIHRvIGhlbHAgZWFybHkgbGVhcm5lcnMuCisKKyAqICJnaXQgcDQiIG5vdyBkZXRlY3RzIHRoZSBmaWxldHlwZSAoZS5nLiBiaW5hcnkpIGNvcnJlY3RseSBldmVuIHdoZW4KKyAgIHRoZSBmaWxlcyBhcmUgb3BlbmVkIGV4Y2x1c2l2ZWx5LgorCisgKiBnaXQgcDQgYXR0ZW1wdHMgdG8gYmV0dGVyIGhhbmRsZSBicmFuY2hlcyBpbiBQZXJmb3JjZS4KKworICogImdpdCBwNCIgbGVhcm5lZCAiLS1jaGFuZ2VzLWJsb2NrLXNpemUgPG4+IiB0byByZWFkIHRoZSBjaGFuZ2VzIGluCisgICBjaHVua3MgZnJvbSBQZXJmb3JjZSwgaW5zdGVhZCBvZiBtYWtpbmcgb25lIGNhbGwgdG8gInA0IGNoYW5nZXMiCisgICB0aGF0IG1heSB0cmlnZ2VyICJ0b28gbWFueSByb3dzIHNjYW5uZWQiIGVycm9yIGZyb20gUGVyZm9yY2UuCisKKyAqIE1vcmUgd29ya2Fyb3VuZCBmb3IgUGVyZm9yY2UncyByb3cgbnVtYmVyIGxpbWl0IGluICJnaXQgcDQiLgorCisgKiBVbmxpa2UgIiRFRElUT1IiIGFuZCAiJEdJVF9FRElUT1IiIHRoYXQgY2FuIGhvbGQgdGhlIHBhdGggdG8gdGhlCisgICBjb21tYW5kIGFuZCBpbml0aWFsIG9wdGlvbnMgKGUuZy4gIi9wYXRoL3RvL2VtYWNzIC1udyIpLCAnZ2l0IHA0JworICAgZGlkIG5vdCBsZXQgdGhlIHNoZWxsIGludGVycG9sYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlIHRoYXQgbmFtZSB0aGUgZWRpdG9yICIkUDRFRElUT1IiIChhbmQgIiRFRElUT1IiLCB0b28pLgorICAgVGhpcyByZWxlYXNlIG1ha2VzIGl0IGluIGxpbmUgd2l0aCB0aGUgcmVzdCBvZiBHaXQsIGFzIHdlbGwgYXMgd2l0aAorICAgUGVyZm9yY2UuCisKKyAqIEEgbmV3IHNob3J0LWhhbmQgPGJyYW5jaD5Ae3B1c2h9IGRlbm90ZXMgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2gKKyAgIHRoYXQgdHJhY2tzIHRoZSBicmFuY2ggYXQgdGhlIHJlbW90ZSB0aGUgPGJyYW5jaD4gd291bGQgYmUgcHVzaGVkCisgICB0by4KKworICogImdpdCBzaG93LWJyYW5jaCAtLXRvcGljcyBIRUFEIiAod2l0aCBubyBvdGhlciBhcmd1bWVudHMpIGRpZCBub3QKKyAgIGRvIGFueXRoaW5nIGludGVyZXN0aW5nLiAgSW5zdGVhZCwgY29udHJhc3QgdGhlIGdpdmVuIHJldmlzaW9uCisgICBhZ2FpbnN0IGFsbCB0aGUgbG9jYWwgYnJhbmNoZXMgYnkgZGVmYXVsdC4KKworICogQSByZXBsYWNlbWVudCBmb3IgY29udHJpYi93b3JrZGlyL2dpdC1uZXctd29ya2RpciB0aGF0IGRvZXMgbm90CisgICByZWx5IG9uIHN5bWJvbGljIGxpbmtzIGFuZCBtYWtlIHNoYXJpbmcgb2Ygb2JqZWN0cyBhbmQgcmVmcyBzYWZlcgorICAgYnkgbWFraW5nIHRoZSBib3Jyb3dlZSBhbmQgYm9ycm93ZXJzIGF3YXJlIG9mIGVhY2ggb3RoZXIuCisKKyAgIENvbnNpZGVyIHRoaXMgYXMgc3RpbGwgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmU7IGl0cyBVSSBpcyBzdGlsbAorICAgbGlrZWx5IHRvIGNoYW5nZS4KKworICogVHdlYWsgdGhlIHNhbXBsZSAic3RvcmUiIGJhY2tlbmQgb2YgdGhlIGNyZWRlbnRpYWwgaGVscGVyIHRvIGhvbm9yCisgICBYREcgY29uZmlndXJhdGlvbiBmaWxlIGxvY2F0aW9ucyB3aGVuIHNwZWNpZmllZC4KKworICogQSBoZXVyaXN0aWMgd2UgdXNlIHRvIGNhdGNoIG1pc3R5cGVkIHBhdGhzIG9uIHRoZSBjb21tYW5kIGxpbmUKKyAgICJnaXQgPGNtZD4gPHJldnM+IDxwYXRoc3BlYz4iIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgbm9uLXJldgorICAgcGFyYW1ldGVycyBpbiB0aGUgbGF0ZXIgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lIGFyZSBuYW1lcyBvZiB0aGUKKyAgIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsIGJ1dCB0aGF0IG1lYW5zICJnaXQgZ3JlcCAkc3RyIC0tIFwqLmMiCisgICBtdXN0IGFsd2F5cyBiZSBkaXNhbWJpZ3VhdGVkIHdpdGggIi0tIiwgYmVjYXVzZSBub2JvZHkgc2FuZSB3aWxsCisgICBjcmVhdGUgYSBmaWxlIHdob3NlIG5hbWUgbGl0ZXJhbGx5IGlzIGFzdGVyaXNrLWRvdC1zZWUuICBMb29zZW4gdGhlCisgICBoZXVyaXN0aWMgdG8gZGVjbGFyZSB0aGF0IHdpdGggYSB3aWxkY2FyZCBzdHJpbmcgdGhlIHVzZXIgbGlrZWx5CisgICBtZWFudCB0byBnaXZlIHVzIGEgcGF0aHNwZWMuCisKKyAqICJnaXQgbWVyZ2UgRkVUQ0hfSEVBRCIgbGVhcm5lZCB0aGF0IHRoZSBwcmV2aW91cyAiZ2l0IGZldGNoIiBjb3VsZAorICAgYmUgdG8gY3JlYXRlIGFuIE9jdG9wdXMgbWVyZ2UsIGkuZS4gcmVjb3JkaW5nIG11bHRpcGxlIGJyYW5jaGVzCisgICB0aGF0IGFyZSBub3QgbWFya2VkIGFzICJub3QtZm9yLW1lcmdlIjsgdGhpcyBhbGxvd3MgdXMgdG8gbG9zZSBhbgorICAgb2xkIHN0eWxlIGludm9jYXRpb24gImdpdCBtZXJnZSA8bXNnPiBIRUFEICRjb21taXRzLi4uIiBpbiB0aGUKKyAgIGltcGxlbWVudGF0aW9uIG9mICJnaXQgcHVsbCIgc2NyaXB0OyB0aGUgb2xkIHN0eWxlIHN5bnRheCBjYW4gbm93CisgICBiZSBkZXByZWNhdGVkIChidXQgbm90IHJlbW92ZWQgeWV0KS4KKworICogRmlsdGVyIHNjcmlwdHMgd2VyZSBydW4gd2l0aCBTSUdQSVBFIGRpc2FibGVkIG9uIHRoZSBHaXQgc2lkZSwKKyAgIGV4cGVjdGluZyB0aGF0IHRoZXkgbWF5IG5vdCByZWFkIHdoYXQgR2l0IGZlZWRzIHRoZW0gdG8gZmlsdGVyLgorICAgV2UgaG93ZXZlciB0cmVhdGVkIGEgZmlsdGVyIHRoYXQgZG9lcyBub3QgcmVhZCBpdHMgaW5wdXQgZnVsbHkKKyAgIGJlZm9yZSBleGl0aW5nIGFzIGFuIGVycm9yLiAgV2Ugbm8gbG9uZ2VyIGRvIGFuZCBpZ25vcmUgRVBJUEUKKyAgIHdoZW4gd3JpdGluZyB0byBmZWVkIHRoZSBmaWx0ZXIgc2NyaXB0cy4KKworICAgVGhpcyBjaGFuZ2VzIHNlbWFudGljcywgYnV0IGFyZ3VhYmx5IGluIGEgZ29vZCB3YXkuICBJZiBhIGZpbHRlcgorICAgY2FuIHByb2R1Y2UgaXRzIG91dHB1dCB3aXRob3V0IGZ1bGx5IGNvbnN1bWluZyBpdHMgaW5wdXQgdXNpbmcKKyAgIHdoYXRldmVyIG1hZ2ljLCB3ZSBub3cgbGV0IGl0IGRvIHNvLCBpbnN0ZWFkIG9mIGRpYWdub3NpbmcgaXQKKyAgIGFzIGEgcHJvZ3JhbW1pbmcgZXJyb3IuCisKKyAqIEluc3RlYWQgb2YgZHlpbmcgaW1tZWRpYXRlbHkgdXBvbiBmYWlsaW5nIHRvIG9idGFpbiBhIGxvY2ssIHRoZQorICAgbG9ja2luZyAob2YgcmVmcyBldGMpIHJldHJpZXMgYWZ0ZXIgYSBzaG9ydCB3aGlsZSB3aXRoIGJhY2tvZmYuCisKKyAqIEludHJvZHVjZSBodHRwLjx1cmw+LlNTTENpcGhlckxpc3QgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byB0d2VhaworICAgdGhlIGxpc3Qgb2YgY2lwaGVyIHN1aXRlIHRvIGJlIHVzZWQgd2l0aCBsaWJjVVJMIHdoZW4gdGFsa2luZyB3aXRoCisgICBodHRwczovLyBzaXRlcy4KKworICogImdpdCBzdWJ0cmVlIiBzY3JpcHQgKGluIGNvbnRyaWIvKSB1c2VkICJlY2hvIC1uIiB0byBwcm9kdWNlCisgICBwcm9ncmVzcyBtZXNzYWdlcyBpbiBhIG5vbi1wb3J0YWJsZSB3YXkuCisKKyAqICJnaXQgc3VidHJlZSIgc2NyaXB0IChpbiBjb250cmliLykgZG9lcyBub3QgaGF2ZSAtLXNxdWFzaCBvcHRpb24KKyAgIHdoZW4gcHVzaGluZywgYnV0IHRoZSBkb2N1bWVudGF0aW9uIGFuZCBoZWxwIHRleHQgcHJldGVuZGVkIGFzIGlmCisgICBpdCBkaWQuCisKKyAqIFRoZSBHaXQgc3ViY29tbWFuZCBjb21wbGV0aW9uIChpbiBjb250cmliLykgbm8gbG9uZ2VyIGxpc3RzIGNyZWRlbnRpYWwKKyAgIGhlbHBlcnMgYW1vbmcgY2FuZGlkYXRlczsgdGhleSBhcmUgbm90IHNvbWV0aGluZyB0aGUgZW5kIHVzZXIgd291bGQKKyAgIGludm9rZSBpbnRlcmFjdGl2ZWx5LgorCisgKiBUaGUgaW5kZXggZmlsZSBjYW4gYmUgdGF1Z2h0IHdpdGggInVwZGF0ZS1pbmRleCAtLXVudHJhY2tlZC1jYWNoZSIKKyAgIHRvIG9wdGlvbmFsbHkgcmVtZW1iZXIgYWxyZWFkeSBzZWVuIHVudHJhY2tlZCBmaWxlcywgaW4gb3JkZXIgdG8KKyAgIHNwZWVkIHVwICJnaXQgc3RhdHVzIiBpbiBhIHdvcmtpbmcgdHJlZSB3aXRoIHRvbnMgb2YgY3J1ZnQuCisKKyAqICJnaXQgbWVyZ2V0b29sIiBsZWFybmVkIHRvIGRyaXZlIFdpbk1lcmdlIGFzIGEgYmFja2VuZC4KKworICogImdpdCB1cGxvYWQtcGFjayIgdGhhdCBzZXJ2ZXMgImdpdCBmZXRjaCIgY2FuIGJlIHRvbGQgdG8gc2VydmUKKyAgIGNvbW1pdHMgdGhhdCBhcmUgbm90IGF0IHRoZSB0aXAgb2YgYW55IHJlZiwgYXMgbG9uZyBhcyB0aGV5IGFyZQorICAgcmVhY2hhYmxlIGZyb20gYSByZWYsIHdpdGggdXBsb2FkcGFjay5hbGxvd1JlYWNoYWJsZVNIQTFJbldhbnQKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgY2F0LWZpbGUgLS1iYXRjaCgtY2hlY2spIiBsZWFybmVkIHRoZSAiLS1mb2xsb3ctc3ltbGlua3MiCisgICBvcHRpb24gdGhhdCBmb2xsb3dzIGFuIGluLXRyZWUgc3ltYm9saWMgbGluayB3aGVuIGFza2VkIGFib3V0IGFuCisgICBvYmplY3QgdmlhIGV4dGVuZGVkIFNIQS0xIHN5bnRheCwgZS5nLiBIRUFEOlJlbE5vdGVzIHRoYXQgcG9pbnRzIGF0CisgICBEb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4wLnR4dC4gIFdpdGggdGhlIG5ldyBvcHRpb24sIHRoZSBjb21tYW5kCisgICBiZWhhdmVzIGFzIGlmIEhFQUQ6RG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuMC50eHQgd2FzIGdpdmVuIGFzCisgICBpbnB1dCBpbnN0ZWFkLgorCisgICBDb25zaWRlciB0aGlzIGFzIHN0aWxsIGFuIGV4cGVyaW1lbnRhbCBhbmQgaW5jb21wbGV0ZSBmZWF0dXJlOgorCisgICAgLSBXZSBtYXkgd2FudCB0byBkbyB0aGUgc2FtZSBmb3IgaW4taW5kZXggb2JqZWN0cywgZS5nLgorICAgICAgYXNraW5nIGZvciA6UmVsTm90ZXMgd2l0aCB0aGlzIG9wdGlvbiBzaG91bGQgZ2l2ZQorICAgICAgOkRvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjAudHh0LCB0b28KKworICAgIC0gImdpdCBjYXQtZmlsZSAtLWZvbGxvdy1zeW1saW5rcyBibG9iIEhFQUQ6UmVsTm90ZXMiCisgICAgICBtYXkgYWxzbyBiZSBzb21ldGhpbmcgd2Ugd2FudCB0byBhbGxvdyBpbiB0aGUgZnV0dXJlLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgdGhlIGFsaWFzIGZpbGUgZm9ybWF0IHVzZWQgYnkgdGhlIHNlbmRtYWlsCisgICBwcm9ncmFtIChpbiBhIHNpbXBsaWZpZWQgZm9ybTsgd2Ugb2J2aW91c2x5IGRvIG5vdCBmZWVkIHBpcGVzKS4KKworICogVHJhZGl0aW9uYWxseSwgZXh0ZXJuYWwgbG93LWxldmVsIDMtd2F5IG1lcmdlIGRyaXZlcnMgYXJlIGV4cGVjdGVkCisgICB0byBwcm9kdWNlIHRoZWlyIHJlc3VsdHMgYmFzZWQgc29sZWx5IG9uIHRoZSBjb250ZW50cyBvZiB0aGUgdGhyZWUKKyAgIHZhcmlhbnRzIGdpdmVuIGluIHRlbXBvcmFyeSBmaWxlcyBuYW1lZCBieSAlTywgJUEgYW5kICVCIG9uIHRoZWlyCisgICBjb21tYW5kIGxpbmUuICBBZGRpdGlvbmFsbHkgYWxsb3cgdGhlbSB0byBsb29rIGF0IHRoZSBmaW5hbCBwYXRoCisgICAoZ2l2ZW4gYnkgJVApLgorCisgKiAiZ2l0IGJsYW1lIiBsZWFybmVkIGJsYW1lLnNob3dFbWFpbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCisgKiAiZ2l0IGFwcGx5IiBjYW5ub3QgZGlhZ25vc2UgYSBwYXRjaCBjb3JydXB0aW9uIHdoZW4gdGhlIGJyZWFrYWdlIGlzCisgICB0byBtYXJrIHRoZSBsZW5ndGggb2YgdGhlIGh1bmsgc2hvcnRlciB0aGFuIGl0IHJlYWxseSBpcyBvbiB0aGUKKyAgIGh1bmsgaGVhZGVyIGxpbmUgIkBAIC1sLGsgK20sbiBAQCI7IG9uZSBzcGVjaWFsIGNhc2UgaXQgY291bGQgaXMKKyAgIHdoZW4gdGhlIGh1bmsgYmVjb21lcyBuby1vcCAoZS5nLiBrID09IG4gPT0gMiBmb3IgdHdvLWxpbmUgY29udGV4dAorICAgcGF0Y2ggb3V0cHV0KSwgYW5kIGl0IGxlYXJuZWQgdG8gZG8gc28gaW4gdGhpcyBzcGVjaWFsIGNhc2UuCisKKyAqIEFkZCB0aGUgIi0tYWxsb3ctdW5rbm93bi10eXBlIiBvcHRpb24gdG8gImNhdC1maWxlIiB0byBhbGxvdworICAgaW5zcGVjdGluZyBsb29zZSBvYmplY3RzIG9mIGFuIGV4cGVyaW1lbnRhbCBvciBhIGJyb2tlbiB0eXBlLgorCisgKiBNYW55IGxvbmctcnVubmluZyBvcGVyYXRpb25zIHNob3cgcHJvZ3Jlc3MgZXllLWNhbmR5LCBldmVuIHdoZW4KKyAgIHRoZXkgYXJlIGxhdGVyIGJhY2tncm91bmRlZC4gIEhpZGUgdGhlIGV5ZS1jYW5keSB3aGVuIHRoZSBwcm9jZXNzCisgICBpcyBzZW50IHRvIHRoZSBiYWNrZ3JvdW5kIGluc3RlYWQuCisgICAobWVyZ2UgYTRmYjc2YyBsbS9zcXVlbGNoLWJnLXByb2dyZXNzIGxhdGVyIHRvIG1haW50KS4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiAidW5zaWduZWQgY2hhciBbMjBdIiB1c2VkIHRocm91Z2hvdXQgdGhlIGNvZGUgdG8gcmVwcmVzZW50IG9iamVjdAorICAgbmFtZXMgYXJlIGJlaW5nIGNvbnZlcnRlZCBpbnRvIGEgc2VtaS1vcGFxdWUgInN0cnVjdCBvYmplY3RfaWQiLgorICAgVGhpcyBlZmZvcnQgaXMgZXhwZWN0ZWQgdG8gaW50ZXJmZXJlIHdpdGggb3RoZXIgdG9waWNzIGluIGZsaWdodCwKKyAgIGJ1dCBob3BlZnVsbHkgd2lsbCBnaXZlIHVzIG9uZSBleHRyYSBsZXZlbCBvZiBhYnN0cmFjdGlvbiBpbiB0aGUKKyAgIGVuZCwgd2hlbiBjb21wbGV0ZWQuCisKKyAqIGZvcl9lYWNoX3JlZigpIGNhbGxiYWNrIGZ1bmN0aW9ucyB3ZXJlIHRhdWdodCB0byBuYW1lIHRoZSBvYmplY3RzCisgICBub3Qgd2l0aCAidW5zaWduZWQgY2hhciBzaGExWzIwXSIgYnV0IHdpdGggInN0cnVjdCBvYmplY3RfaWQiLgorCisgKiBDYXRjaCBhIHByb2dyYW1tZXIgbWlzdGFrZSB0byBmZWVkIGEgcG9pbnRlciBub3QgYW4gYXJyYXkgdG8KKyAgIEFSUkFZX1NJWkUoKSBtYWNybywgYnkgdXNpbmcgYSBjb3VwbGUgb2YgR0NDIGV4dGVuc2lvbnMuCisKKyAqIFNvbWUgZXJyb3IgbWVzc2FnZXMgaW4gImdpdCBjb25maWciIHdlcmUgZW1pdHRlZCB3aXRob3V0IGNhbGxpbmcKKyAgIHRoZSB1c3VhbCBlcnJvcigpIGZhY2lsaXR5LgorCisgKiBXaGVuICJhZGQtLWludGVyYWN0aXZlIiBzcGxpdHMgYSBodW5rIGludG8gdHdvIG92ZXJsYXBwaW5nIGh1bmtzCisgICBhbmQgdGhlbiBsZXQgdGhlIHVzZXIgY2hvb3NlIG9ubHkgb25lLCBpdCBzb21ldGltZXMgZmVlZHMgYW4KKyAgIGluY29ycmVjdCBwYXRjaCB0ZXh0IHRvICJnaXQgYXBwbHkiLiAgQWRkIHRlc3RzIHRvIGRlbW9uc3RyYXRlCisgICB0aGlzLgorCisgICBJIGhhdmUgYSBzbGlnaHQgc3VzcGljaW9uIHRoYXQgdGhpcyBtYXkgYmUgJGdtYW5lLzg3MjAyIGNvbWluZyBiYWNrCisgICBhbmQgYml0aW5nIHVzIChJIHNlZW0gdG8gaGF2ZSBzYWlkICJsZXQncyBydW4gd2l0aCB0aGlzIGFuZCBzZWUKKyAgIHdoYXQgaGFwcGVucyIgYmFjayB0aGVuKS4KKworICogTW9yZSBsaW5lLWVuZGluZyB0ZXN0cy4KKworICogQW4gZWFybGllciByZXdyaXRlIHRvIHVzZSBzdHJidWZfZ2V0d2hvbGVsaW5lKCkgaW5zdGVhZCBvZiBmZ2V0cygzKQorICAgdG8gcmVhZCBwYWNrZWQtcmVmcyBmaWxlIHJldmVhbGVkIHRoYXQgdGhlIGZvcm1lciBpcyB1bmFjY2VwdGFibHkKKyAgIGluZWZmaWNpZW50LiAgSXQgaGFzIGJlZW4gb3B0aW1pemVkIGJ5IHVzaW5nIGdldGRlbGltKDMpIHdoZW4KKyAgIGF2YWlsYWJsZS4KKworICogVGhlIHJlZnMgQVBJIHVzZXMgcmVmX2xvY2sgc3RydWN0IHdoaWNoIGhhZCBpdHMgb3duICJpbnQgZmQiLCBldmVuCisgICB0aG91Z2ggdGhlIHNhbWUgZmlsZSBkZXNjcmlwdG9yIHdhcyBpbiB0aGUgbG9jayBzdHJ1Y3QgaXQgY29udGFpbnMuCisgICBDbGVhbi11cCB0aGUgY29kZSB0byBsb3NlIHRoaXMgcmVkdW5kYW50IGZpZWxkLgorCisgKiBUaGVyZSB3YXMgYSBkZWFkIGNvZGUgdGhhdCB1c2VkIHRvIGhhbmRsZSAiZ2l0IHB1bGwgLS10YWdzIiBhbmQKKyAgIHNob3cgc3BlY2lhbC1jYXNlZCBlcnJvciBtZXNzYWdlLCB3aGljaCB3YXMgbWFkZSBpcnJlbGV2YW50IHdoZW4KKyAgIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIG9wdGlvbiBjaGFuZ2VkIGJhY2sgaW4gR2l0IDEuOSBkYXlzLgorICAgKG1lcmdlIDE5ZDEyMmIgcHQvcHVsbC10YWdzLWVycm9yLWRpYWcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBIZWxwIHVzIHRvIGZpbmQgYnJva2VuIHRlc3Qgc2NyaXB0IHRoYXQgc3BsaXRzIHRoZSBib2R5IHBhcnQgb2YgdGhlCisgICB0ZXN0IGJ5IG1pc3Rha2VuIHVzZSBvZiB3cm9uZyBraW5kIG9mIHF1b3Rlcy4KKyAgIChtZXJnZSBkOTNkNWQ1IGpjL3Rlc3QtcHJlcmVxLXZhbGlkYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogRGV2ZWxvcGVyIHN1cHBvcnQgdG8gYXV0b21hdGljYWxseSBkZXRlY3QgYnJva2VuICYmLWNoYWluIGluIHRoZQorICAgdGVzdCBzY3JpcHRzIGlzIG5vdyB0dXJuZWQgb24gYnkgZGVmYXVsdC4KKyAgIChtZXJnZSA5MmIyNjlmIGprL3Rlc3QtY2hhaW4tbGludCBsYXRlciB0byBtYWludCkuCisKKyAqIEVycm9yIHJlcG9ydGluZyBtZWNoYW5pc20gdXNlZCBpbiAicmVmcyIgQVBJIGhhcyBiZWVuIG1hZGUgbW9yZQorICAgY29uc2lzdGVudC4KKworICogImdpdCBwdWxsIiBoYXMgbW9yZSB0ZXN0IGNvdmVyYWdlIG5vdy4KKworICogImdpdCBwdWxsIiBoYXMgYmVjb21lIG1vcmUgYXdhcmUgb2YgdGhlIG9wdGlvbnMgbWVhbnQgZm9yCisgICB1bmRlcmx5aW5nICJnaXQgZmV0Y2giIGFuZCB0aGVuIGxlYXJuZWQgdG8gdXNlIHBhcnNlLW9wdGlvbnMKKyAgIHBhcnNlci4KKworICogQ2xhcmlmeSBpbiB0aGUgTWFrZWZpbGUgYSBndWlkZWxpbmUgdG8gZGVjaWRlIHVzZSBvZiBVU0VfTlNFQy4KKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuNAorLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjQgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogR2l0IDIuNCBicm9rZSBzZXR0aW5nIHZlcmJvc2l0eSBhbmQgcHJvZ3Jlc3MgbGV2ZWxzIG9uICJnaXQgY2xvbmUiCisgICB3aXRoIG5hdGl2ZSB0cmFuc3BvcnRzLgorICAgKG1lcmdlIDgyMmYwYzQgbWgvY2xvbmUtdmVyYm9zaXR5LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYWRkIC1lIiBkaWQgbm90IGFsbG93IHRoZSB1c2VyIHRvIGFib3J0IHRoZSBvcGVyYXRpb24gYnkKKyAgIGtpbGxpbmcgdGhlIGVkaXRvci4KKyAgIChtZXJnZSBjYjY0ODAwIGprL2FkZC1lLWtpbGwtZWRpdG9yIGxhdGVyIHRvIG1haW50KS4KKworICogTWVtb3J5IHVzYWdlIG9mICJnaXQgaW5kZXgtcGFjayIgaGFzIGJlZW4gdHJpbW1lZCBieSB0ZW5zIG9mCisgICBwZXItY2VudC4KKyAgIChtZXJnZSBmMGU3ZjExIG5kL3NsaW0taW5kZXgtcGFjay1tZW1vcnktdXNhZ2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkb2xkIC0tbm90IC0tYWxsIiB0byBzZWUgaWYgZXZlcnl0aGluZyB0aGF0CisgICBpcyByZWFjaGFibGUgZnJvbSAkb2xkIGlzIGFscmVhZHkgY29ubmVjdGVkIHRvIHRoZSBleGlzdGluZyByZWZzCisgICB3YXMgdmVyeSBpbmVmZmljaWVudC4KKyAgIChtZXJnZSBiNmU4YTNiIGprL3N0aWxsLWludGVyZXN0aW5nIGxhdGVyIHRvIG1haW50KS4KKworICogImhhc2gtb2JqZWN0IC0tbGl0ZXJhbGx5IiBpbnRyb2R1Y2VkIGluIHYyLjIgd2FzIG5vdCBwcmVwYXJlZCB0bworICAgdGFrZSBhIHJlYWxseSBsb25nIG9iamVjdCB0eXBlIG5hbWUuCisgICAobWVyZ2UgMTQyN2E3ZiBqYy9oYXNoLW9iamVjdCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC0tcXVpZXQiIHdhcyBub3QgcXVpdGUgcXVpZXQgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvCisgICBkby4KKyAgIChtZXJnZSAyMjk0NmE5IGprL3JlYmFzZS1xdWlldC1ub29wIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvbXBsZXRpb24gZm9yICJsb2cgLS1kZWNvcmF0ZT0iIHBhcmFtZXRlciB2YWx1ZSB3YXMgaW5jb3JyZWN0LgorICAgKG1lcmdlIGFmMTZiZGEgc2cvY29tcGxldGUtZGVjb3JhdGUtZnVsbC1ub3QtbG9uZyBsYXRlciB0byBtYWludCkuCisKKyAqICJmaWx0ZXItYnJhbmNoIiBjb3JydXB0ZWQgY29tbWl0IGxvZyBtZXNzYWdlIHRoYXQgZW5kcyB3aXRoIGFuCisgICBpbmNvbXBsZXRlIGxpbmUgb24gcGxhdGZvcm1zIHdpdGggc29tZSAic2VkIiBpbXBsZW1lbnRhdGlvbnMgdGhhdAorICAgbXVuZ2Ugc3VjaCBhIGxpbmUuICBXb3JrIGl0IGFyb3VuZCBieSBhdm9pZGluZyB0byB1c2UgInNlZCIuCisgICAobWVyZ2UgZGYwNjIwMSBqay9maWx0ZXItYnJhbmNoLXVzZS1vZi1zZWQtb24taW5jb21wbGV0ZS1saW5lIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkYWVtb24iIGZhaWxzIHRvIGJ1aWxkIGZyb20gdGhlIHNvdXJjZSB1bmRlciBOT19JUFY2CisgICBjb25maWd1cmF0aW9uIChyZWdyZXNzaW9uIGluIDIuNCkuCisgICAobWVyZ2UgZDM1OGY3NyBqYy9kYWVtb24tbm8taXB2Ni1mb3ItMi40LjEgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBTb21lIHRpbWUgYWdvLCAiZ2l0IGJsYW1lIiAoaW5jb3JyZWN0bHkpIGxvc3QgdGhlIGNvbnZlcnRfdG9fZ2l0KCkKKyAgIGNhbGwgd2hlbiBzeW50aGVzaXppbmcgYSBmYWtlICJ0aXAiIGNvbW1pdCB0aGF0IHJlcHJlc2VudHMgdGhlCisgICBzdGF0ZSBpbiB0aGUgd29ya2luZyB0cmVlLCB3aGljaCBicm9rZSBmb2xrcyB3aG8gcmVjb3JkIHRoZSBoaXN0b3J5CisgICB3aXRoIExGIGxpbmUgZW5kaW5nIHRvIG1ha2UgdGhlaXIgcHJvamVjdCBwb3J0YWJsZSBhY3Jvc3MgcGxhdGZvcm1zCisgICB3aGlsZSB0ZXJtaW5hdGluZyBsaW5lcyBpbiB0aGVpciB3b3JraW5nIHRyZWUgZmlsZXMgd2l0aCBDUkxGIGZvcgorICAgdGhlaXIgcGxhdGZvcm0uCisgICAobWVyZ2UgNGJmMjU2ZCB0Yi9ibGFtZS1yZXN1cnJlY3QtY29udmVydC10by1naXQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXZSBhdm9pZCBzZXR0aW5nIGNvcmUud29ya3RyZWUgd2hlbiB0aGUgcmVwb3NpdG9yeSBsb2NhdGlvbiBpcyB0aGUKKyAgICIuZ2l0IiBkaXJlY3RvcnkgZGlyZWN0bHkgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLCBidXQKKyAgIHRoZSBjb2RlIG1pc2RldGVjdGVkIHRoZSBjYXNlIGluIHdoaWNoIHRoZSB3b3JraW5nIHRyZWUgaXMgYXQgdGhlCisgICByb290IGxldmVsIG9mIHRoZSBmaWxlc3lzdGVtICh3aGljaCBhcmd1YWJseSBpcyBhIHNpbGx5IHRoaW5nIHRvCisgICBkbywgYnV0IHN0aWxsIHZhbGlkKS4KKyAgIChtZXJnZSA4NGNjYWQ4IGprL2luaXQtY29yZS13b3JrdHJlZS1hdC1yb290IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb21taXQgLS1kYXRlPW5vdyIgb3IgYW55dGhpbmcgdGhhdCByZWxpZXMgb24gYXBwcm94aWRhdGUgbG9zdAorICAgdGhlIGRheWxpZ2h0LXNhdmluZy10aW1lIG9mZnNldC4KKyAgIChtZXJnZSBmNmU2MzYyIGpjL2Vwb2NodGltZS13by10eiBsYXRlciB0byBtYWludCkuCisKKyAqIEFjY2VzcyB0byBvYmplY3RzIGluIHJlcG9zaXRvcmllcyB0aGF0IGJvcnJvdyBmcm9tIGFub3RoZXIgb25lIG9uIGEKKyAgIHNsb3cgTkZTIHNlcnZlciB1bm5lY2Vzc2FyaWx5IGdvdCBtb3JlIGV4cGVuc2l2ZSBkdWUgdG8gcmVjZW50IGNvZGUKKyAgIGJlY29taW5nIG1vcmUgY2F1dGlvdXMgaW4gYSBuYWl2ZSB3YXkgbm90IHRvIGxvc2Ugb2JqZWN0cyB0byBwcnVuaW5nLgorICAgKG1lcmdlIGVlMWM2YzMgamsvcHJ1bmUtbXRpbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZXBhdGhzIHRoYXQgcmVhZCAuZ2l0aWdub3JlIGFuZCAuZ2l0YXR0cmlidXRlcyBmaWxlcyBoYXZlIGJlZW4KKyAgIHRhdWdodCB0aGF0IHRoZXNlIGZpbGVzIGVuY29kZWQgaW4gVVRGLTggbWF5IGhhdmUgVVRGLTggQk9NIG1hcmtlciBhdAorICAgdGhlIGJlZ2lubmluZzsgdGhpcyBtYWtlcyBpdCBpbiBsaW5lIHdpdGggd2hhdCB3ZSBkbyBmb3IgY29uZmlndXJhdGlvbgorICAgZmlsZXMgYWxyZWFkeS4KKyAgIChtZXJnZSAyNzU0N2U1IGNuL2JvbS1pbi1naXRpZ25vcmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBhIGZldyBoZWxwZXIgc2NyaXB0cyBpbiB0aGUgdGVzdCBzdWl0ZSBkaWQgbm90IHJlcG9ydCBlcnJvcnMKKyAgIGNvcnJlY3RseS4KKyAgIChtZXJnZSBkZTI0OGU5IGVwL2ZpeC10ZXN0LWxpYi1mdW5jdGlvbnMtcmVwb3J0IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGRlZmF1bHQgJEhPTUUvLmdpdGNvbmZpZyBmaWxlIGNyZWF0ZWQgdXBvbiAiZ2l0IGNvbmZpZyAtLWdsb2JhbCIKKyAgIHRoYXQgZWRpdHMgaXQgaGFkIGluY29ycmVjdGx5IHNwZWxsZWQgdXNlci5uYW1lIGFuZCB1c2VyLmVtYWlsCisgICBlbnRyaWVzIGluIGl0LgorICAgKG1lcmdlIDdlMTEwNTIgb2gvZml4LWNvbmZpZy1kZWZhdWx0LXVzZXItbmFtZS1zZWN0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjYXQtZmlsZSBibCAkYmxvYiIgZmFpbGVkIHRvIGJhcmYgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbm8KKyAgIG9iamVjdCB0eXBlIHRoYXQgaXMgImJsIi4KKyAgIChtZXJnZSBiNzk5NGFmIGprL3R5cGUtZnJvbS1zdHJpbmctZ2VudGx5IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHVzdWFsICJnaXQgZGlmZiIgd2hlbiBzZWVpbmcgYSBmaWxlIHR1cm5pbmcgaW50byBhIGRpcmVjdG9yeQorICAgc2hvd2VkIGEgcGF0Y2hzZXQgdG8gcmVtb3ZlIHRoZSBmaWxlIGFuZCBjcmVhdGUgYWxsIGZpbGVzIGluIHRoZQorICAgZGlyZWN0b3J5LCBidXQgImdpdCBkaWZmIC0tbm8taW5kZXgiIHNpbXBseSByZWZ1c2VkIHRvIHdvcmsuICBBbHNvLAorICAgd2hlbiBhc2tlZCB0byBjb21wYXJlIGEgZmlsZSBhbmQgYSBkaXJlY3RvcnksIGltaXRhdGUgUE9TSVggImRpZmYiCisgICBhbmQgY29tcGFyZSB0aGUgZmlsZSB3aXRoIHRoZSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSBpbiB0aGUKKyAgIGRpcmVjdG9yeSwgaW5zdGVhZCBvZiByZWZ1c2luZyB0byBydW4uCisgICAobWVyZ2UgMDYxNTE3MyBqYy9kaWZmLW5vLWluZGV4LWQtZiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIC1pIiBtb3ZlZCB0aGUgImN1cnJlbnQiIGNvbW1hbmQgZnJvbSAidG9kbyIgdG8gImRvbmUiIGEKKyAgIGJpdCB0b28gcHJlbWF0dXJlbHksIGxvc2luZyBhIHN0ZXAgd2hlbiBhICJwaWNrIiBkaWQgbm90IGV2ZW4gc3RhcnQuCisgICAobWVyZ2UgOGNiYzU3YyBwaC9yZWJhc2UtaS1yZWRvIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNvbm5lY3Rpb24gaW5pdGlhdGlvbiBjb2RlIGZvciAic3NoIiB0cmFuc3BvcnQgdHJpZWQgdG8gYWJzb3JiCisgICBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBzdG9jayAic3NoIiBhbmQgUHV0dHktc3VwcGxpZWQgInBsaW5rIiBhbmQKKyAgIGl0cyBkZXJpdmF0aXZlcywgYnV0IHRoZSBsb2dpYyB0byB0ZWxsIHRoYXQgd2UgYXJlIHVzaW5nICJwbGluayIKKyAgIHZhcmlhbnRzIHdlcmUgdG9vIGxvb3NlIGFuZCBmYWxzZWx5IHRyaWdnZXJlZCB3aGVuICJwbGluayIgYXBwZWFyZWQKKyAgIGFueXdoZXJlIGluIHRoZSBwYXRoIChlLmcuICIvaG9tZS9tZS9iaW4vdXBsaW5rL3NzaCIpLgorICAgKG1lcmdlIGJhYWYyMzMgYmMvY29ubmVjdC1wbGluayBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIGhhdmUgcHJlcGVuZGVkICRHSVRfRVhFQ19QQVRIIGFuZCB0aGUgcGF0aCAiZ2l0IiBpcyBpbnN0YWxsZWQgaW4KKyAgICh0eXBpY2FsbHkgIi91c3IvYmluIikgdG8gJFBBVEggd2hlbiBpbnZva2luZyBzdWJwcm9ncmFtcyBhbmQgaG9va3MKKyAgIGZvciBhbG1vc3QgZXRlcm5pdHksIGJ1dCB0aGUgb3JpZ2luYWwgdXNlIGNhc2UgdGhlIGxhdHRlciB0cmllZCB0bworICAgc3VwcG9ydCB3YXMgc2VtaS1ib2d1cyAoaS5lLiBpbnN0YWxsIGdpdCB0byAvb3B0L2Zvby9naXQgYW5kIHJ1biBpdAorICAgd2l0aG91dCBoYXZpbmcgL29wdC9mb28gb24gJFBBVEgpLCBhbmQgbW9yZSBpbXBvcnRhbnRseSBpdCBoYXMKKyAgIGJlY29tZSBsZXNzIGFuZCBsZXNzIHJlbGV2YW50IGFzIEdpdCBncmV3IG1vcmUgbWFpbnN0cmVhbSAoaS5lLiB0aGUKKyAgIHVzZXJzIHdvdWxkIF93YW50XyB0byBoYXZlIGl0IG9uIHRoZWlyICRQQVRIKS4gIFN0b3AgcHJlcGVuZGluZyB0aGUKKyAgIHBhdGggaW4gd2hpY2ggImdpdCIgaXMgaW5zdGFsbGVkIHRvIHVzZXJzJyAkUEFUSCwgYXMgdGhhdCB3b3VsZAorICAgaW50ZXJmZXJlIHRoZSBjb21tYW5kIHNlYXJjaCBvcmRlciBwZW9wbGUgZGVwZW5kIG9uIChlLmcuIHRoZXkgbWF5CisgICBub3QgbGlrZSB2ZXJzaW9ucyBvZiBwcm9ncmFtcyB0aGF0IGFyZSB1bnJlbGF0ZWQgdG8gR2l0IGluIC91c3IvYmluCisgICBhbmQgd2FudCB0byBvdmVycmlkZSB0aGVtIGJ5IGhhdmluZyBkaWZmZXJlbnQgb25lcyBpbiAvdXNyL2xvY2FsL2JpbgorICAgYW5kIGhhdmUgdGhlIGxhdHRlciBkaXJlY3RvcnkgZWFybGllciBpbiB0aGVpciAkUEFUSCkuCisgICAobWVyZ2UgYTBiNDUwNyBqay9naXQtbm8tbW9yZS1hcmd2MC1wYXRoLW11bmdpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBjb3JlLmV4Y2x1ZGVzZmlsZSAoZGVmYXVsdGluZyB0byAkWERHX0hPTUUvZ2l0L2lnbm9yZSkgaXMgc3VwcG9zZWQKKyAgIHRvIGJlIG92ZXJyaWRkZW4gYnkgcmVwb3NpdG9yeS1zcGVjaWZpYyAuZ2l0L2luZm8vZXhjbHVkZSBmaWxlLCBidXQKKyAgIHRoZSBvcmRlciB3YXMgc3dhcHBlZCBmcm9tIHRoZSBiZWdpbm5pbmcuIFRoaXMgYmVsYXRlZGx5IGZpeGVzIGl0LgorICAgKG1lcmdlIDA5OWQyZDggamMvZ2l0aWdub3JlLXByZWNlZGVuY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGVyZSB3YXMgYSBjb21tZW50ZWQtb3V0IChpbnN0ZWFkIG9mIGJlaW5nIG1hcmtlZCB0byBleHBlY3QKKyAgIGZhaWx1cmUpIHRlc3QgdGhhdCBkb2N1bWVudGVkIGEgYnJlYWthZ2UgdGhhdCB3YXMgZml4ZWQgc2luY2UgdGhlCisgICB0ZXN0IHdhcyB3cml0dGVuOyB0dXJuIGl0IGludG8gYSBwcm9wZXIgdGVzdC4KKyAgIChtZXJnZSA2NmQyZTA0IHNiL3QxMDIwLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgImxvZyAtLWRlY29yYXRlIiBlbmhhbmNlbWVudCBpbiBHaXQgMi40IHRoYXQgc2hvd3MgdGhlIGNvbW1pdAorICAgYXQgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggZS5nLiAiSEVBRCAtPiBtYXN0ZXIiLCBkaWQgbm90CisgICB3b3JrIHdpdGggLS1kZWNvcmF0ZT1mdWxsLgorICAgKG1lcmdlIDQyOWFkMjAgbWcvbG9nLWRlY29yYXRlLUhFQUQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcmVmIEFQSSBkaWQgbm90IGhhbmRsZSBjYXNlcyB3aGVyZSAncmVmcy9oZWFkcy94eXp6eS9mcm90eicgaXMKKyAgIHJlbW92ZWQgYXQgdGhlIHNhbWUgdGltZSBhcyAncmVmcy9oZWFkcy94eXp6eScgaXMgYWRkZWQgKG9yIHZpY2UKKyAgIHZlcnNhKSB2ZXJ5IHdlbGwuCisgICAobWVyZ2UgYzYyOGVkZiBtaC9yZWYtZGlyZWN0b3J5LWZpbGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNdWx0aS1yZWYgdHJhbnNhY3Rpb24gc3VwcG9ydCB3ZSBtZXJnZWQgYSBmZXcgcmVsZWFzZXMgYWdvCisgICB1bm5lY2Vzc2FyaWx5IGtlcHQgbWFueSBmaWxlIGRlc2NyaXB0b3JzIG9wZW4sIHJpc2tpbmcgdG8gZmFpbCB3aXRoCisgICByZXNvdXJjZSBleGhhdXN0aW9uLiAgVGhpcyBpcyBmb3IgMi40LnggdHJhY2suCisgICAobWVyZ2UgMTg1Y2UzYSBtaC93cml0ZS1yZWZzLXNvb25lci0yLjQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJ1bmRsZSB2ZXJpZnkiIGRpZCBub3QgZGlhZ25vc2UgZXh0cmEgcGFyYW1ldGVycyBvbiB0aGUKKyAgIGNvbW1hbmQgbGluZS4KKyAgIChtZXJnZSA3ODg2Y2ZhIHBzL2J1bmRsZS12ZXJpZnktYXJnIGxhdGVyIHRvIG1haW50KS4KKworICogVmFyaW91cyBkb2N1bWVudGF0aW9uIG1hcmstdXAgZml4ZXMgdG8gbWFrZSB0aGUgb3V0cHV0IG1vcmUKKyAgIGNvbnNpc3RlbnQgaW4gZ2VuZXJhbCBhbmQgYWxzbyBtYWtlIEFzY2lpRG9jdG9yIChhbiBhbHRlcm5hdGl2ZQorICAgZm9ybWF0dGVyKSBoYXBwaWVyLgorICAgKG1lcmdlIGQwMjU4YjkgamsvYXNjaWlkb2MtbWFya3VwLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWQzOTY3YSBqay9zdHJpcHNwYWNlLWFzY2lpZG9jdG9yLWZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOTc1ZTM4MiBqYS90dXRvcmlhbC1hc2NpaWRvY3Rvci1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY29kZSB0byByZWFkIHBhY2stYml0bWFwIHdhbnRlZCB0byBhbGxvY2F0ZSBhIGZldyBodW5kcmVkCisgICBwb2ludGVycyB0byBhIHN0cnVjdHVyZSwgYnV0IGJ5IG1pc3Rha2UgYWxsb2NhdGVkIGFuZCBsZWFrZWQgbWVtb3J5CisgICBlbm91Z2ggdG8gaG9sZCB0aGF0IG1hbnkgYWN0dWFsIHN0cnVjdHVyZXMuICBDb3JyZWN0IHRoZSBhbGxvY2F0aW9uCisgICBzaXplIGFuZCBhbHNvIGhhdmUgaXQgb24gc3RhY2ssIGFzIGl0IGlzIHNtYWxsIGVub3VnaC4KKyAgIChtZXJnZSA1OTlkYzc2IHJzL3BsdWctbGVhay1pbi1wYWNrLWJpdG1hcHMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgcHVsbC5mZiBjb25maWd1cmF0aW9uIHdhcyBzdXBwb3NlZCB0byBvdmVycmlkZSB0aGUgbWVyZ2UuZmYKKyAgIGNvbmZpZ3VyYXRpb24sIGJ1dCBpdCBkaWRuJ3QuCisgICAobWVyZ2UgZGI5YmIyOCBwdC9wdWxsLWZmLXZzLW1lcmdlLWZmIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdWxsIC0tbG9nIiBhbmQgImdpdCBwdWxsIC0tbm8tbG9nIiB3b3JrZWQgYXMgZXhwZWN0ZWQsIGJ1dAorICAgImdpdCBwdWxsIC0tbG9nPTIwIiBkaWQgbm90LgorICAgKG1lcmdlIDUwNjFhNDQgcHQvcHVsbC1sb2ctbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmVyZXJlIGZvcmdldCIgaW4gYSByZXBvc2l0b3J5IHdpdGhvdXQgcmVyZXJlIGVuYWJsZWQgZ2F2ZSBhCisgICBjcnlwdGljIGVycm9yIG1lc3NhZ2U7IGl0IHNob3VsZCBiZSBhIHNpbGVudCBuby1vcCBpbnN0ZWFkLgorICAgKG1lcmdlIDA1NDQ1NzQgamsvcmVyZXJlLWZvcmdldC1jaGVjay1lbmFibGVkIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLWkiIGZpcmVkIHBvc3QtcmV3cml0ZSBob29rIHdoZW4gaXQgc2hvdWxkbid0IChuYW1lbHksCisgICB3aGVuIGl0IHdhcyB0b2xkIHRvIHN0b3Agc2VxdWVuY2luZyB3aXRoICdleGVjJyBpbnNuKS4KKyAgIChtZXJnZSAxNDFmZjhmIG1tL3JlYmFzZS1pLXBvc3QtcmV3cml0ZS1leGVjIGxhdGVyIHRvIG1haW50KS4KKworICogQ2xhcmlmeSB0aGF0ICJsb2cgLS1yYXciIGFuZCAibG9nIC0tZm9ybWF0PXJhdyIgYXJlIHVucmVsYXRlZAorICAgY29uY2VwdHMuCisgICAobWVyZ2UgOTJkZTkyMSBtbS9sb2ctZm9ybWF0LXJhdy1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBNYWtlICJnaXQgc3Rhc2ggc29tZXRoaW5nIC0taGVscCIgZXJyb3Igb3V0LCBzbyB0aGF0IHVzZXJzIGNhbgorICAgc2FmZWx5IHNheSAiZ2l0IHN0YXNoIGRyb3AgLS1oZWxwIi4KKyAgIChtZXJnZSA1YmEyODMxIGprL3N0YXNoLW9wdGlvbnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgY2xlYW4vc211ZGdlIGludGVyZmFjZSBkaWQgbm90IHdvcmsgd2VsbCB3aGVuIGZpbHRlcmluZyBhbgorICAgZW1wdHkgY29udGVudHMgKGZhaWxlZCBhbmQgdGhlbiBwYXNzZWQgdGhlIGVtcHR5IGlucHV0IHRocm91Z2gpLgorICAgSXQgY2FuIGJlIGFyZ3VlZCB0aGF0IGEgZmlsdGVyIHRoYXQgcHJvZHVjZXMgYW55dGhpbmcgYnV0IGVtcHR5IGZvcgorICAgYW4gZW1wdHkgaW5wdXQgaXMgbm9uc2Vuc2UsIGJ1dCBpZiB0aGUgdXNlciB3YW50cyB0byBkbyBzdHJhbmdlCisgICB0aGluZ3MsIHRoZW4gd2h5IG5vdD8KKyAgIChtZXJnZSBmNmExZTFlIGpoL2ZpbHRlci1lbXB0eS1jb250ZW50cyBsYXRlciB0byBtYWludCkuCisKKyAqIENvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgSFRUUCBzZXJ2ZXIgYW5kIGh0dHBfYmFja2VuZCBwcm9jZXNzIGNhbgorICAgbGVhZCB0byBhIGRlYWQtbG9jayB3aGVuIHJlbGF5aW5nIGEgbGFyZ2UgcmVmIG5lZ290aWF0aW9uIHJlcXVlc3QuCisgICBEaWFnbm9zZSB0aGUgc2l0dWF0aW9uIGJldHRlciwgYW5kIG1pdGlnYXRlIGl0IGJ5IHJlYWRpbmcgc3VjaCBhCisgICByZXF1ZXN0IGZpcnN0IGludG8gY29yZSAodG8gYSByZWFzb25hYmxlIGxpbWl0KS4KKyAgIChtZXJnZSA2MzY2MTRmIGprL2h0dHAtYmFja2VuZC1kZWFkbG9jayBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY2xlYW4gcGF0aHNwZWMuLi4iIHRyaWVkIHRvIGxzdGF0KDIpIGFuZCBjb21wbGFpbiBldmVuIGZvcgorICAgcGF0aHMgb3V0c2lkZSB0aGUgZ2l2ZW4gcGF0aHNwZWMuCisgICAobWVyZ2UgODM4ZDZhOSBkdC9jbGVhbi1wYXRoc3BlYy1maWx0ZXItdGhlbi1sc3RhdCBsYXRlciB0byBtYWludCkuCisKKyAqIFJlY2VudCAiZ2l0IHBydW5lIiB0cmF2ZXJzZXMgeW91bmcgdW5yZWFjaGFibGUgb2JqZWN0cyB0byBzYWZla2VlcAorICAgb2xkIG9iamVjdHMgaW4gdGhlIHJlYWNoYWJpbGl0eSBjaGFpbiBmcm9tIHRoZW0sIHdoaWNoIHNvbWV0aW1lcworICAgY2F1c2VkIGVycm9yIG1lc3NhZ2VzIHRoYXQgYXJlIHVubmVjZXNzYXJpbHkgYWxhcm1pbmcuCisgICAobWVyZ2UgY2U0ZTdiMiBqay9zcXVlbGNoLW1pc3NpbmctbGluay13YXJuaW5nLWZvci11bnJlYWNoYWJsZSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb25maWd1cmF0aW9uIHJlYWRlci93cml0ZXIgdXNlcyBtbWFwKDIpIGludGVyZmFjZSB0byBhY2Nlc3MKKyAgIHRoZSBmaWxlczsgd2hlbiB3ZSBmaW5kIGEgZGlyZWN0b3J5LCBpdCBiYXJmZWQgd2l0aCAiT3V0IG9mIG1lbW9yeT8iLgorICAgKG1lcmdlIDljYTBhYWYgamsvZGlhZ25vc2UtY29uZmlnLW1tYXAtZmFpbHVyZSBsYXRlciB0byBtYWludCkuCisKKyAqICJjb2xvci5kaWZmLnBsYWluIiB3YXMgYSBtaXNub21lcjsgZ2l2ZSBpdCAnY29sb3IuZGlmZi5jb250ZXh0JyBhcworICAgYSBtb3JlIGxvZ2ljYWwgc3lub255bS4KKyAgIChtZXJnZSA4ZGJmM2ViIGprL2NvbG9yLWRpZmYtcGxhaW4taXMtY29udGV4dCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBzZXR1cCBjb2RlIHVzZWQgdG8gZGllIHdoZW4gY29yZS5iYXJlIGFuZCBjb3JlLndvcmt0cmVlIGFyZSBzZXQKKyAgIGluY29uc2lzdGVudGx5LCBldmVuIGZvciBjb21tYW5kcyB0aGF0IGRvIG5vdCBuZWVkIHdvcmtpbmcgdHJlZS4KKyAgIChtZXJnZSBmYWRhNzY3IGprL2RpZS1vbi1ib2d1cy13b3JrdHJlZS1sYXRlIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IE1hYyBPUyBYIHVwZGF0ZXMgYnJlYWtzIHRoZSBsb2dpYyB0byBkZXRlY3QgdGhhdCB0aGUgbWFjaGluZQorICAgaXMgb24gdGhlIEFDIHBvd2VyIGluIHRoZSBzYW1wbGUgcHJlLWF1dG8tZ2Mgc2NyaXB0LgorICAgKG1lcmdlIGM1NGM3YjMgcGEvYXV0by1nYy1tYWMtb3N4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjb21taXQgLS1jbGVhbnVwPXNjaXNzb3JzIiB3YXMgbm90IGNhcmVmdWwgZW5vdWdoIHRvIHByb3RlY3QKKyAgIGFnYWluc3QgZ2V0dGluZyBmb29sZWQgYnkgYSBsaW5lIHRoYXQgbG9va2VkIGxpa2Ugc2Npc3NvcnMuCisgICAobWVyZ2UgZmJmYTA5NyBzZy9jb21taXQtY2xlYW51cC1zY2lzc29ycyBsYXRlciB0byBtYWludCkuCisKKyAqICJIYXZlIHdlIGxvc3QgYSByYWNlIHdpdGggY29tcGV0aW5nIHJlcGFjaz8iIGNoZWNrIHdhcyB0b28KKyAgIGV4cGVuc2l2ZSwgZXNwZWNpYWxseSB3aGlsZSByZWNlaXZpbmcgYSBodWdlIG9iamVjdCB0cmFuc2ZlcgorICAgdGhhdCBydW5zIGluZGV4LXBhY2sgKGUuZy4gImNsb25lIiBvciAiZmV0Y2giKS4KKyAgIChtZXJnZSAwZWViMDc3IGprL2luZGV4LXBhY2stcmVkdWNlLXJlY2hlY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgdGNzaCBjb21wbGV0aW9uIHdyaXRlcyBhIGJhc2ggc2NyaXB0bGV0IGJ1dCB0aGF0IHdvdWxkIGhhdmUKKyAgIGZhaWxlZCBmb3IgdXNlcnMgd2l0aCBub2Nsb2JiZXIgc2V0LgorICAgKG1lcmdlIDBiMWY2ODggYWYvdGNzaC1jb21wbGV0aW9uLW5vY2xvYmJlciBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZm9yLWVhY2gtcmVmIiByZXBvcnRlZCAibWlzc2luZyBvYmplY3QiIGZvciAwezQwfSB3aGVuIGl0CisgICBlbmNvdW50ZXJzIGEgYnJva2VuIHJlZi4gIFRoZSBsYWNrIG9mIG9iamVjdCB3aG9zZSBuYW1lIGlzIDB7NDB9IGlzCisgICBub3QgdGhlIHByb2JsZW07IHRoZSByZWYgYmVpbmcgYnJva2VuIGlzLgorICAgKG1lcmdlIDUwMWNmNDcgbWgvcmVwb3J0aW5nLWJyb2tlbi1yZWZzLWZyb20tZm9yLWVhY2gtcmVmIGxhdGVyIHRvIG1haW50KS4KKworICogVmFyaW91cyBmaXhlcyBhcm91bmQgImdpdCBhbSIgdGhhdCBhcHBsaWVzIGEgcGF0Y2ggdG8gYSBoaXN0b3J5CisgICB0aGF0IGlzIG5vdCB0aGVyZSB5ZXQuCisgICAobWVyZ2UgNmVhM2I2NyBwdC9hbS1hYm9ydC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZzY2siIHVzZWQgdG8gaWdub3JlIG1pc3Npbmcgb3IgaW52YWxpZCBvYmplY3RzIHJlY29yZGVkIGluIHJlZmxvZy4KKyAgIChtZXJnZSAxOWJmNmM5IG1oL2ZzY2stcmVmbG9nLWVudHJpZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGZvcm1hdC1wYXRjaCAtLWlnbm9yZS1pZi11cHN0cmVhbSBBLi5CIiBkaWQgbm90IGxpa2UgdG8gYmUgZmVkCisgICB0YWdzIGFzIGJvdW5kYXJ5IGNvbW1pdHMuCisgICAobWVyZ2UgOWI3YTYxZCBqYy9kby1ub3QtZmVlZC10YWdzLXRvLWNsZWFyLWNvbW1pdC1tYXJrcyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZmV0Y2ggLS1kZXB0aD08ZGVwdGg+IiBhbmQgImdpdCBjbG9uZSAtLWRlcHRoPTxkZXB0aD4iIGlzc3VlZAorICAgYSBzaGFsbG93IHRyYW5zZmVyIHJlcXVlc3QgZXZlbiB0byBhbiB1cGxvYWQtcGFjayB0aGF0IGRvZXMgbm90CisgICBzdXBwb3J0IHRoZSBjYXBhYmlsaXR5LgorICAgKG1lcmdlIGViODZhNTAgbWUvZmV0Y2gtaW50by1zaGFsbG93LXNhZmV0eSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcmViYXNlIiBkaWQgbm90IGV4aXQgd2l0aCBmYWlsdXJlIHdoZW4gZm9ybWF0LXBhdGNoIGl0IGludm9rZWQKKyAgIGZhaWxlZCBmb3Igd2hhdGV2ZXIgcmVhc29uLgorICAgKG1lcmdlIDYwZDcwOGIgY2IvcmViYXNlLWFtLWV4aXQtY29kZSBsYXRlciB0byBtYWludCkuCisKKyAqIEZpeCBhIHNtYWxsIGJ1ZyBpbiBvdXIgdXNlIG9mIHVtYXNrKCkgcmV0dXJuIHZhbHVlLgorICAgKG1lcmdlIDMwOTZiMmUgamsvZml4LXJlZnJlc2gtdXRpbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBhbmNpZW50IHRlc3QgZnJhbWV3b3JrIGVuaGFuY2VtZW50IHRvIGFsbG93IGNvbG9yIHdhcyBub3QKKyAgIGVudGlyZWx5IGNvcnJlY3Q7IHRoaXMgbWFrZXMgaXQgd29yayBldmVuIHdoZW4gdHB1dCBuZWVkcyB0byByZWFkCisgICBmcm9tIHRoZSB+Ly50ZXJtaW5mbyB1bmRlciB0aGUgdXNlcidzIHJlYWwgSE9NRSBkaXJlY3RvcnkuCisgICAobWVyZ2UgZDVjMWI3YyByaC90ZXN0LWNvbG9yLWF2b2lkLXRlcm1pbmZvLWluLW9yaWdpbmFsLWhvbWUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBIG1pbm9yIGJ1Z2ZpeCB3aGVuIHBhY2sgYml0bWFwIGlzIHVzZWQgd2l0aCAicmV2LWxpc3QgLS1jb3VudCIuCisgICAobWVyZ2UgYzhhNzBkMyBqay9yZXYtbGlzdC1uby1iaXRtYXAtd2hpbGUtcHJ1bmluZyBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgY29uZmlnIiBmYWlsZWQgdG8gdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgd2hlbiB0aGUKKyAgIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBpcyBpbmNhcGFibGUgb2YgcmVuYW1pbmcgYSBmaWxlIHRoYXQgaXMgc3RpbGwKKyAgIG9wZW4uCisgICAobWVyZ2UgN2E2NDU5MiBrYi9jb25maWctdW5tYXAtYmVmb3JlLXJlbmFtaW5nIGxhdGVyIHRvIG1haW50KS4KKworICogQXZvaWQgcG9zc2libGUgc3NpemVfdCB0byBpbnQgdHJ1bmNhdGlvbi4KKyAgIChtZXJnZSA2YzhhZmU0IG1oL3N0cmJ1Zi1yZWFkLWZpbGUtcmV0dXJucy1zc2l6ZS10IGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiB5b3Ugc2F5ICIhPEVOVEVSPiIgd2hpbGUgcnVubmluZyBzYXkgImdpdCBsb2ciLCB5b3UnZCBjb25mdXNlCisgICB5b3Vyc2VsZiBpbiB0aGUgcmVzdWx0aW5nIHNoZWxsLCB0aGF0IG1heSBsb29rIGFzIGlmIHlvdSB0b29rCisgICBjb250cm9sIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNoZWxsIHlvdSBzcGF3bmVkICJnaXQgbG9nIiBmcm9tIGJ1dAorICAgdGhhdCBpc24ndCB3aGF0IGlzIGhhcHBlbmluZy4gIFRvIHRoYXQgbmV3IHNoZWxsLCB3ZSBsZWFrZWQKKyAgIEdJVF9QQUdFUl9JTl9VU0UgZW52aXJvbm1lbnQgdmFyaWFibGUgdGhhdCB3YXMgbWVhbnQgYXMgYSBsb2NhbAorICAgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBvcmlnaW5hbCAiR2l0IiBhbmQgc3VicHJvY2Vzc2VzIHRoYXQgd2FzCisgICBzcGF3bmVkIGJ5IGl0IGFmdGVyIHdlIGxhdW5jaGVkIHRoZSBwYWdlciwgd2hpY2ggY2F1c2VkIG1hbnkKKyAgICJpbnRlcmVzdGluZyIgdGhpbmdzIHRvIGhhcHBlbiwgZS5nLiAiZ2l0IGRpZmYgfCBjYXQiIHN0aWxsIHBhaW50cworICAgaXRzIG91dHB1dCBpbiBjb2xvciBieSBkZWZhdWx0LgorCisgICBTdG9wIGxlYWtpbmcgdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgcGFnZXIncyBoYWxmIG9mIHRoZQorICAgZm9yazsgd2Ugb25seSBuZWVkIGl0IG9uICJHaXQiIHNpZGUgd2hlbiB3ZSBzcGF3biB0aGUgcGFnZXIuCisgICAobWVyZ2UgMTI0YjUxOSBqYy91bmV4cG9ydC1naXQtcGFnZXItaW4tdXNlLWluLXBhZ2VyIGxhdGVyIHRvIG1haW50KS4KKworICogQWJhbmRvbmluZyBhbiBhbHJlYWR5IGFwcGxpZWQgY2hhbmdlIGluICJnaXQgcmViYXNlIC1pIiB3aXRoCisgICAiLS1jb250aW51ZSIgbGVmdCBDSEVSUllfUElDS19IRUFEIGFuZCBjb25mdXNlZCBsYXRlciBzdGVwcy4KKyAgIChtZXJnZSAwZTBhZmY0IGpzL3JlYmFzZS1pLWNsZWFuLXVwLXVwb24tY29udGludWUtdG8tc2tpcCBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIHVzZWQgdG8gYXNrIGxpYkNVUkwgdG8gdXNlIHRoZSBtb3N0IHNlY3VyZSBhdXRoZW50aWNhdGlvbiBtZXRob2QKKyAgIGF2YWlsYWJsZSB3aGVuIHRhbGtpbmcgdG8gYW4gSFRUUCBwcm94eSBvbmx5IHdoZW4gd2Ugd2VyZSB0b2xkIHRvCisgICB0YWxrIHRvIG9uZSB2aWEgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuICBXZSBub3cgYXNrIGxpYkNVUkwgdG8KKyAgIGFsd2F5cyB1c2UgdGhlIG1vc3Qgc2VjdXJlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCwgYmVjYXVzZSB0aGUgdXNlcgorICAgY2FuIHRlbGwgbGliQ1VSTCB0byB1c2UgYW4gSFRUUCBwcm94eSB2aWEgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIHdpdGhvdXQgdXNpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisgICAobWVyZ2UgNTg0MTUyMCBldC9odHRwLXByb3h5YXV0aCBsYXRlciB0byBtYWludCkuCisKKyAqIEEgZml4IHRvIGEgbWlub3IgcmVncmVzc2lvbiB0byAiZ2l0IGZzY2siIGluIHYyLjIgZXJhIHRoYXQgc3RhcnRlZAorICAgY29tcGxhaW5pbmcgYWJvdXQgYSBib2R5LWxlc3MgdGFnIG9iamVjdCB3aGVuIGl0IGxhY2tzIGEgc2VwYXJhdG9yCisgICBlbXB0eSBsaW5lIGFmdGVyIGl0cyBoZWFkZXIgdG8gc2VwYXJhdGUgaXQgd2l0aCBhIG5vbi1leGlzdGVudCBib2R5LgorICAgKG1lcmdlIDg0ZDE4YzAgamMvZnNjay1yZXRpcmUtcmVxdWlyZS1lb2ggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIGNsZWFudXBzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisgICAobWVyZ2UgMDI2OWY5NiBtbS91c2FnZS1sb2ctbC1jYW4tdGFrZS1yZWdleCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgNjRmMjU4OSBuZC90MTUwOS1jaHJvb3QtdGVzdCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZDIwMWExZSBzYi90ZXN0LWJpdG1hcC1mcmVlLWF0LWVuZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDViZmM3ZCBzYi9saW5lLWxvZy1wbHVnLXBhaXJkaWZmLWxlYWsgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDg0NmU1ZGYgcHQveGRnLWNvbmZpZy1wYXRoIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAxMTU0YWE0IGpjL3BsdWctZm10LW1lcmdlLW1zZy1sZWFrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzMTliNjc4IGprL3NoYTEtZmlsZS1yZWR1Y2UtdXNlbGVzcy13YXJuaW5ncyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgOWEzNWMxNCBmZy9kb2N1bWVudC1jb21taXQtbWVzc2FnZS1zdHJpcHBpbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJiZjQzMWMgcHMvZG9jLXBhY2tmaWxlLXZzLXBhY2stZmlsZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMzA5YTllMyBqay9za2lwLWh0dHAtdGVzdHMtdW5kZXItbm8tY3VybCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgY2NkNTkzYyBkbC9icmFuY2gtZXJyb3ItbWVzc2FnZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjI1NzBiNiBycy9qYW5pdG9yaWFsIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1YzJhNTgxIG1jL2NvbW1pdC1kb2MtZ3JhbW1vZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjZTQxNzIwIGFoL3VzYWdlLXN0cmluZ3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGU2YTI2OGMgc2IvZ2xvc3Nhcnktc3VibW9kdWxlIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBlYzQ4YTc2IHNiL3N1Ym1vZHVsZS1kb2MtaW50cm8gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0ZjhiOWIgamsvY2xvbmUtZGlzc29jaWF0ZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMDU1YzdlOSBzYi9wYWNrLXByb3RvY29sLW1lbnRpb24tc21hcnQtaHR0cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2MzN2E1ZCBqay9tYWtlLWZpeC1kZXBlbmRlbmNpZXMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGZjMGFhMzkgc2cvbWVyZ2Utc3VtbWFyeS1jb25maWcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDMyOWFmNmMgcHQvdDAzMDItbmVlZHMtc2FuaXR5IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBkNjE0ZjA3IGZrL2RvYy1mb3JtYXQtcGF0Y2gtdm4gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDcyZGJiMzYgc2cvY29tcGxldGlvbi1jb21taXQtY2xlYW51cCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTY1NGViMiBlcy91dGY4LXN0dXBpZC1jb21waWxlci13b3JrYXJvdW5kIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSAzNGI5MzVjIGVzL29zeC1oZWFkZXItcG9sbHV0ZXMtbWFzay1tYWNybyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWI3ZmFkZSBqYy9wcm9tcHQtZG9jdW1lbnQtcHMxLXN0YXRlLXNlcGFyYXRvciBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMjVmNjAwZSBtbS9kZXNjcmliZS1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDgzZmUxNjcgbW0vYnJhbmNoLWRvYy11cGRhdGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3NWQyZTVhIGxzL2hpbnQtcmV2LWxpc3QtY291bnQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGVkYzhmNzEgY2Ivc3VidHJlZS10ZXN0cy11cGRhdGUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDUzMzBlNmUgc2IvcDUzMTAtYW5kLWNoYWluIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBjNGFjNTI1IHRiL2NoZWNrb3V0LWRvYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTQ3OWM1ZiBqay9wcmV0dHktZW5jb2RpbmctZG9jIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3ZTgzN2M2IHNzL2Nsb25lLWd1ZXNzLWRpci1uYW1lLXNpbXBsaWZ5IGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwNTUzMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjEudHh0CkBAIC0wLDAgKzEsNjUgQEAKK0dpdCB2Mi41LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjUKKy0tLS0tLS0tLS0tLS0tLS0KKworICogUnVubmluZyBhbiBhbGlhc2VkIGNvbW1hbmQgZnJvbSBhIHN1YmRpcmVjdG9yeSB3aGVuIHRoZSAuZ2l0IHRoaW5nCisgICBpbiB0aGUgd29ya2luZyB0cmVlIGlzIGEgZ2l0ZmlsZSBwb2ludGluZyBlbHNld2hlcmUgZGlkIG5vdCB3b3JrLgorCisgKiBPZnRlbiBhIGZhc3QtaW1wb3J0IHN0cmVhbSBidWlsZHMgYSBuZXcgY29tbWl0IG9uIHRvcCBvZiB0aGUKKyAgIHByZXZpb3VzIGNvbW1pdCBpdCBidWlsdCwgYW5kIGl0IG9mdGVuIHVuY29uZGl0aW9uYWxseSBlbWl0cyBhCisgICAiZnJvbSIgY29tbWFuZCB0byBzcGVjaWZ5IHRoZSBmaXJzdCBwYXJlbnQsIHdoaWNoIGNhbiBiZSBvbWl0dGVkIGluCisgICBzdWNoIGEgY2FzZS4gIFRoaXMgY2F1c2VkIGZhc3QtaW1wb3J0IHRvIGZvcmdldCB0aGUgdHJlZSBvZiB0aGUKKyAgIHByZXZpb3VzIGNvbW1pdCBhbmQgdGhlbiByZS1yZWFkIGl0IGZyb20gc2NyYXRjaCwgd2hpY2ggd2FzCisgICBpbmVmZmljaWVudC4gIE9wdGltaXplIGZvciB0aGlzIGNvbW1vbiBjYXNlLgorCisgKiBUaGUgInJldi1wYXJzZSAtLXBhcnNlb3B0IiBtb2RlIHBhcnNlZCB0aGUgb3B0aW9uIHNwZWNpZmljYXRpb24KKyAgIGFuZCB0aGUgYXJndW1lbnQgaGludCBpbiBhIHN0cmFuZ2Ugd2F5IHRvIGFsbG93ICc9JyBhbmQgb3RoZXIKKyAgIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgb3B0aW9uIG5hbWUgd2hpbGUgZm9yYmlkZGluZyB0aGVtIGZyb20KKyAgIHRoZSBhcmd1bWVudCBoaW50LiAgVGhpcyBtYWRlIGl0IGltcG9zc2libGUgdG8gZGVmaW5lIGFuIG9wdGlvbgorICAgbGlrZSAiLS1wYWlyIDxrZXk+PTx2YWx1ZT4iIHdpdGggInBhaXI9a2V5PXZhbHVlIiBzcGVjaWZpY2F0aW9uLAorICAgd2hpY2ggaW5zdGVhZCB3b3VsZCBoYXZlIGRlZmluZWQgYSAiLS1wYWlyPWtleSA8dmFsdWU+IiBvcHRpb24uCisKKyAqIEEgInJlYmFzZSIgcmVwbGF5cyBjaGFuZ2VzIG9mIHRoZSBsb2NhbCBicmFuY2ggb24gdG9wIG9mIHNvbWV0aGluZworICAgZWxzZSwgYXMgc3VjaCB0aGV5IGFyZSBwbGFjZWQgaW4gc3RhZ2UgIzMgYW5kIHJlZmVycmVkIHRvIGFzCisgICAidGhlaXJzIiwgd2hpbGUgdGhlIGNoYW5nZXMgaW4gdGhlIG5ldyBiYXNlLCB0eXBpY2FsbHkgYSBmb3JlaWduCisgICB3b3JrLCBhcmUgcGxhY2VkIGluIHN0YWdlICMyIGFuZCByZWZlcnJlZCB0byBhcyAib3VycyIuICBDbGFyaWZ5CisgICB0aGUgImNoZWNrb3V0IC0tb3Vycy8tLXRoZWlycyIuCisKKyAqIEFuIGV4cGVyaW1lbnRhbCAidW50cmFja2VkIGNhY2hlIiBmZWF0dXJlIHVzZWQgdW5hbWUoMikgaW4gYQorICAgc2xpZ2h0bHkgdW5wb3J0YWJsZSB3YXkuCisKKyAqICJzcGFyc2UgY2hlY2tvdXQiIG1pc2JlaGF2ZWQgZm9yIGEgcGF0aCB0aGF0IGlzIGV4Y2x1ZGVkIGZyb20gdGhlCisgICBjaGVja291dCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGJyYW5jaGVzIHRoYXQgZGlmZmVyIGF0IHRoZSBwYXRoLgorCisgKiBUaGUgbG93LWxldmVsICJnaXQgc2VuZC1wYWNrIiBkaWQgbm90IGhvbm9yICd1c2VyLnNpZ25pbmdrZXknCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHdoZW4gc2VuZGluZyBhIHNpZ25lZC1wdXNoLgorCisgKiBBbiBhdHRlbXB0IHRvIGRlbGV0ZSBhIHJlZiBieSBwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5IHdob3NlIEhFQUQKKyAgIHN5bWJvbGljIHJlZmVyZW5jZSBwb2ludHMgYXQgYW4gdW5ib3JuIGJyYW5jaCB0aGF0IGNhbm5vdCBiZQorICAgY3JlYXRlZCBkdWUgdG8gcmVmIEQvRiBjb25mbGljdCAoZS5nLiByZWZzL2hlYWRzL2EvYiBleGlzdHMsIEhFQUQKKyAgIHBvaW50cyBhdCByZWZzL2hlYWRzL2EpIGZhaWxlZC4KKworICogImdpdCBzdWJ0cmVlIiAoaW4gY29udHJpYi8pIGRlcGVuZGVkIG9uICJnaXQgbG9nIiBvdXRwdXQgdG8gYmUKKyAgIHN0YWJsZSwgd2hpY2ggd2FzIGEgbm8tbm8uICBBcHBseSBhIHdvcmthcm91bmQgdG8gZm9yY2UgYQorICAgcGFydGljdWxhciBkYXRlIGZvcm1hdC4KKworICogImdpdCBjbG9uZSAkVVJMIiBpbiByZWNlbnQgcmVsZWFzZXMgb2YgR2l0IGNvbnRhaW5zIGEgcmVncmVzc2lvbiBpbgorICAgdGhlIGNvZGUgdGhhdCBpbnZlbnRzIGEgbmV3IHJlcG9zaXRvcnkgbmFtZSBpbmNvcnJlY3RseSBiYXNlZCBvbgorICAgdGhlICRVUkwuICBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBkYjJlMjIwIGprL2d1ZXNzLXJlcG8tbmFtZS1yZWdyZXNzaW9uLWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIFJ1bm5pbmcgdGVzdHMgd2l0aCB0aGUgIi14IiBvcHRpb24gdG8gbWFrZSB0aGVtIHZlcmJvc2UgaGFkIHNvbWUKKyAgIHVucGxlYXNhbnQgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMgb2YgdGhlIHRlc3Qgc3VpdGUuCisgICAobWVyZ2UgOWI1ZmU3OCBqay90ZXN0LXdpdGgteCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgcHVsbCIgaW4gcmVjZW50IHJlbGVhc2VzIG9mIEdpdCBoYXMgYSByZWdyZXNzaW9uIGluIHRoZSBjb2RlCisgICB0aGF0IGFsbG93cyBjdXN0b20gcGF0aCB0byB0aGUgLS11cGxvYWQtcGFjaz08cHJvZ3JhbT4uICBUaGlzIGhhcworICAgYmVlbiBjb3JyZWN0ZWQuCisKKyAqIHBpcGUoKSBlbXVsYXRpb24gdXNlZCBpbiBHaXQgZm9yIFdpbmRvd3MgbG9va2VkIGF0IGEgd3JvbmcgdmFyaWFibGUKKyAgIHdoZW4gY2hlY2tpbmcgZm9yIGFuIGVycm9yIGZyb20gYW4gX29wZW5fb3NmaGFuZGxlKCkgY2FsbC4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4yLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNzQ5MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNS4yLnR4dApAQCAtMCwwICsxLDYzIEBACitHaXQgdjIuNS4yIFJlbGVhc2UgTm90ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXhlcyBzaW5jZSB2Mi41LjEKKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgKiAiZ2l0IGluaXQgZW1wdHkgJiYgZ2l0IC1DIGVtcHR5IGxvZyIgc2FpZCAiYmFkIGRlZmF1bHQgcmV2aXNpb24gJ0hFQUQnIiwKKyAgIHdoaWNoIHdhcyBmb3VuZCB0byBiZSBhIGJpdCBjb25mdXNpbmcgdG8gbmV3IHVzZXJzLgorCisgKiBUaGUgImludGVycHJldC10cmFpbGVycyIgaGVscGVyIG1pc3Rvb2sgYSBtdWx0aS1wYXJhZ3JhcGggdGl0bGUgb2YKKyAgIGEgY29tbWl0IGxvZyBtZXNzYWdlIHdpdGggYSBjb2xvbiBpbiBpdCBhcyB0aGUgZW5kIG9mIHRoZSB0cmFpbGVyCisgICBibG9jay4KKworICogV2hlbiByZS1wcmltaW5nIHRoZSBjYWNoZS10cmVlIG9wcG9ydHVuaXN0aWNhbGx5IHdoaWxlIGNvbW1pdHRpbmcKKyAgIHRoZSBpbi1jb3JlIGluZGV4IGFzLWlzLCB3ZSBtaXN0YWtlbmx5IGludmFsaWRhdGVkIHRoZSBpbi1jb3JlCisgICBpbmRleCB0b28gYWdncmVzc2l2ZWx5LCBjYXVzaW5nIHRoZSBleHBlcmltZW50YWwgc3BsaXQtaW5kZXggY29kZQorICAgdG8gdW5uZWNlc3NhcmlseSByZXdyaXRlIHRoZSBvbi1kaXNrIGluZGV4IGZpbGUocykuCisKKyAqICJnaXQgYXJjaGl2ZSIgZGlkIG5vdCB1c2UgemlwNjQgZXh0ZW5zaW9uIHdoZW4gY3JlYXRpbmcgYW4gYXJjaGl2ZQorICAgd2l0aCBtb3JlIHRoYW4gNjRrIGVudHJpZXMsIHdoaWNoIG5vYm9keSBzaG91bGQgbmVlZCwgcmlnaHQgOy0pPworCisgKiBUaGUgY29kZSBpbiAibXVsdGlwbGUtd29ya3RyZWUiIHN1cHBvcnQgdGhhdCBhdHRlbXB0ZWQgdG8gcmVjb3ZlcgorICAgZnJvbSBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdXBkYXRlZCBhbiBpbmNvcnJlY3QgZmlsZS4KKworICogImdpdCByZXYtbGlzdCIgZG9lcyBub3QgdGFrZSAiLS1ub3RlcyIgb3B0aW9uLCBidXQgZGlkIG5vdCBjb21wbGFpbgorICAgd2hlbiBvbmUgaXMgZ2l2ZW4uCisKKyAqIEJlY2F1c2UgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGRvZXMgbm90IGFsbG93ICJhbGlhcy4wZm9vIiBhbmQKKyAgICJwYWdlci4wZm9vIiBhcyB0aGUgY29uZmlndXJhdGlvbiBrZXksIHRoZSB1c2VyIGNhbm5vdCB1c2UgJzBmb28nCisgICBhcyBhIGN1c3RvbSBjb21tYW5kIG5hbWUgYW55d2F5LCBidXQgImdpdCAwZm9vIiB0cmllZCB0byBsb29rIHRoZXNlCisgICBrZXlzIHVwIGFuZCBlbWl0dGVkIHVzZWxlc3Mgd2FybmluZ3MgYmVmb3JlIHNheWluZyAnMGZvbyBpcyBub3QgYQorICAgZ2l0IGNvbW1hbmQnLiAgVGhlc2Ugd2FybmluZyBtZXNzYWdlcyBoYXZlIGJlZW4gc3F1ZWxjaGVkLgorCisgKiBXZSByZWNlbnRseSByZXdyb3RlIG9uZSBvZiB0aGUgYnVpbGQgc2NyaXB0cyBpbiBQZXJsLCB3aGljaCBtYWRlIGl0CisgICBuZWNlc3NhcnkgdG8gaGF2ZSBQZXJsIHRvIGJ1aWxkIEdpdC4gIFJlZHVjZWQgUGVybCBkZXBlbmRlbmN5IGJ5CisgICByZXdyaXRpbmcgaXQgYWdhaW4gdXNpbmcgc2VkLgorCisgKiB0MTUwOSB0ZXN0IHRoYXQgcmVxdWlyZXMgYSBkZWRpY2F0ZWQgVk0gZW52aXJvbm1lbnQgaGFkIHNvbWUKKyAgIGJpdHJvdCwgd2hpY2ggaGFzIGJlZW4gY29ycmVjdGVkLgorCisgKiBzdHJidWZfcmVhZCgpIHVzZWQgdG8gaGF2ZSBvbmUgZXh0cmEgaXRlcmF0aW9uIChhbmQgYW4gdW5uZWNlc3NhcnkKKyAgIHN0cmJ1Zl9ncm93KCkgb2YgOGtCKSwgd2hpY2ggd2FzIGVsaW1pbmF0ZWQuCisKKyAqIFRoZSBjb2RlcGF0aCB0byBwcm9kdWNlIGVycm9yIG1lc3NhZ2VzIGhhZCBhIGhhcmQtY29kZWQgbGltaXQgdG8KKyAgIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLCBwcmltYXJpbHkgdG8gYXZvaWQgbWVtb3J5IGFsbG9jYXRpb24gd2hpbGUKKyAgIGNhbGxpbmcgZGllKCkuCisKKyAqIFdoZW4gdHJ5aW5nIHRvIHNlZSB0aGF0IGFuIG9iamVjdCBkb2VzIG5vdCBleGlzdCwgYSBzdGF0ZSBlcnJubworICAgbGVha2VkIGZyb20gb3VyICJmaXJzdCB0cnkgdG8gb3BlbiBhIHBhY2tmaWxlIHdpdGggT19OT0FUSU1FIGFuZAorICAgdGhlbiBpZiBpdCBmYWlscyByZXRyeSB3aXRob3V0IGl0IiBsb2dpYyBvbiBhIHN5c3RlbSB0aGF0IHJlZnVzZXMKKyAgIE9fTk9BVElNRS4gIFRoaXMgY29uZnVzZWQgdXMgYW5kIGNhdXNlZCB1cyB0byBkaWUsIHNheWluZyB0aGF0IHRoZQorICAgcGFja2ZpbGUgaXMgdW5yZWFkYWJsZSwgd2hlbiB3ZSBzaG91bGQgaGF2ZSBqdXN0IHJlcG9ydGVkIHRoYXQgdGhlCisgICBvYmplY3QgZG9lcyBub3QgZXhpc3QgaW4gdGhhdCBwYWNrZmlsZSB0byB0aGUgY2FsbGVyLgorCisgKiBBbiBvZmYtYnktb25lIGVycm9yIG1hZGUgImdpdCByZW1vdGUiIHRvIG1pc2hhbmRsZSBhIHJlbW90ZSB3aXRoIGEKKyAgIHNpbmdsZSBsZXR0ZXIgbmlja25hbWUuCisKKyAqIEEgaGFuZGZ1bCBvZiBjb2RlcGF0aHMgdGhhdCB1c2VkIHRvIHVzZSBmaXhlZC1zaXplZCBhcnJheXMgdG8gaG9sZAorICAgcGF0aG5hbWVzIGhhdmUgYmVlbiBjb3JyZWN0ZWQgdG8gdXNlIHN0cmJ1ZiBhbmQgb3RoZXIgbWVjaGFuaXNtcyB0bworICAgYWxsb3cgbG9uZ2VyIHBhdGhuYW1lcyB3aXRob3V0IGZlYXJpbmcgb3ZlcmZsb3dzLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjMudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE0MzY4NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjMudHh0CkBAIC0wLDAgKzEsMTcgQEAKK0dpdCB2Mi41LjMgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjUuMgorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZSBleHBlcmltZW50YWwgdW50cmFja2VkLWNhY2hlIGZlYXR1cmUgd2VyZSBidWdneSB3aGVuIHBhdGhzIHdpdGgKKyAgIGEgZmV3IGxldmVscyBvZiBzdWJkaXJlY3RvcmllcyBhcmUgaW52b2x2ZWQuCisKKyAqIFJlY2VudCB2ZXJzaW9ucyBvZiBzY3JpcHRlZCAiZ2l0IGFtIiBoYXMgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uCisgICBpbiAiZ2l0IGFtIC0tc2tpcCIgY29kZXBhdGgsIHdoaWNoIG5vIGxvbmdlciBleGlzdHMgaW4gdGhlCisgICBidWlsdC1pbiB2ZXJzaW9uIG9uIHRoZSAnbWFzdGVyJyBmcm9udC4gIEZpeCB0aGUgcmVncmVzc2lvbiBpbgorICAgdGhlIGxhc3Qgc2NyaXB0ZWQgdmVyc2lvbiB0aGF0IGFwcGVhciBpbiAyLjUueCBtYWludGVuYW5jZSB0cmFjaworICAgYW5kIG9sZGVyLgorCitBbHNvIGNvbnRhaW5zIHR5cG9maXhlcywgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFuZCB0cml2aWFsIGNvZGUKK2NsZWFuLXVwcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjQudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjUuNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVlODQ3NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi41LjQudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2Mi41LjQgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjUuNAorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIHhkaWZmIGNvZGUgd2UgdXNlIHRvIGdlbmVyYXRlIGRpZmZzIGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUKKyAgIGV4dHJlbWVseSBsYXJnZSBmaWxlcy4gIEl0IHVzZXMgImludCIgaW4gbWFueSBwbGFjZXMsIHdoaWNoIGNhbgorICAgb3ZlcmZsb3cgaWYgd2UgaGF2ZSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIGxpbmVzIG9yIGV2ZW4gYnl0ZXMgaW4KKyAgIG91ciBpbnB1dCBmaWxlcywgZm9yIGV4YW1wbGUuICBDYXAgdGhlIGlucHV0IHNpemUgdG8gc29lbXdoZXJlCisgICBhcm91bmQgMUdCIGZvciBub3cuCisKKyAqIFNvbWUgcHJvdG9jb2xzIChsaWtlIGdpdC1yZW1vdGUtZXh0KSBjYW4gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZQorICAgZm91bmQgaW4gdGhlIFVSTC4gIFRoZSBVUkxzIHRoYXQgc3VibW9kdWxlcyB1c2UgbWF5IGNvbWUgZnJvbQorICAgYXJiaXRyYXJ5IHNvdXJjZXMgKGUuZy4sIC5naXRtb2R1bGVzIGZpbGVzIGluIGEgcmVtb3RlCisgICByZXBvc2l0b3J5KSwgYW5kIGNhbiBodXJ0IHRob3NlIHdobyBibGluZGx5IGVuYWJsZSByZWN1cnNpdmUKKyAgIGZldGNoLiAgUmVzdHJpY3QgdGhlIGFsbG93ZWQgcHJvdG9jb2xzIHRvIHdlbGwga25vd24gYW5kIHNhZmUKKyAgIG9uZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyODhhYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNi4wLnR4dApAQCAtMCwwICsxLDM3MCBAQAorR2l0IDIuNiBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi41CistLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqIEFuIGFzdGVyaXNrIGFzIGEgc3Vic3RyaW5nIChhcyBvcHBvc2VkIHRvIHRoZSBlbnRpcmV0eSkgb2YgYSBwYXRoCisgICBjb21wb25lbnQgZm9yIGJvdGggc2lkZSBvZiBhIHJlZnNwZWMsIGUuZy4KKyAgICJyZWZzL2hlYWRzL28qOnJlZnMvcmVtb3Rlcy9oZWFkcy9pKiIsIGlzIG5vdyBhbGxvd2VkLgorCisgKiBOZXcgdXNlcmRpZmYgcGF0dGVybiBkZWZpbml0aW9uIGZvciBmb3VudGFpbiBzY3JlZW53cml0aW5nIG1hcmt1cAorICAgZm9ybWF0IGhhcyBiZWVuIGFkZGVkLgorCisgKiAiZ2l0IGxvZyIgYW5kIGZyaWVuZHMgbGVhcm5lZCBhIG5ldyAiLS1kYXRlPWZvcm1hdDouLi4iIG9wdGlvbiB0bworICAgZm9ybWF0IHRpbWVzdGFtcHMgdXNpbmcgc3lzdGVtJ3Mgc3RyZnRpbWUoMykuCisKKyAqICJnaXQgZmFzdC1pbXBvcnQiIGxlYXJuZWQgdG8gcmVzcG9uZCB0byB0aGUgZ2V0LW1hcmsgY29tbWFuZCB2aWEKKyAgIGl0cyBjYXQtYmxvYi1mZCBpbnRlcmZhY2UuCisKKyAqICJnaXQgcmViYXNlIC1pIiBsZWFybmVkICJkcm9wIGNvbW1pdC1vYmplY3QtbmFtZSBzdWJqZWN0IiBjb21tYW5kCisgICBhcyBhbm90aGVyIHdheSB0byBza2lwIHJlcGxheWluZyBvZiBhIGNvbW1pdC4KKworICogQSBuZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjYW4gZW5hYmxlICItLWZvbGxvdyIgYXV0b21hdGljYWxseQorICAgd2hlbiAiZ2l0IGxvZyIgaXMgcnVuIHdpdGggb25lIHBhdGhzcGVjIGFyZ3VtZW50LgorCisgKiAiZ2l0IHN0YXR1cyIgbGVhcm5lZCB0byBzaG93IGEgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyAgIHRoZSAicmViYXNlIC1pIiBzZXNzaW9uIGluIHByb2dyZXNzLgorCisgKiAiZ2l0IGNhdC1maWxlIiBsZWFybmVkICItLWJhdGNoLWFsbC1vYmplY3RzIiBvcHRpb24gdG8gZW51bWVyYXRlIGFsbAorICAgYXZhaWxhYmxlIG9iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnkgbW9yZSBxdWlja2x5IHRoYW4gInJldi1saXN0CisgICAtLWFsbCAtLW9iamVjdHMiICh0aGUgb3V0cHV0IGluY2x1ZGVzIHVucmVhY2hhYmxlIG9iamVjdHMsIHRob3VnaCkuCisKKyAqICJnaXQgZnNjayIgbGVhcm5lZCB0byBpZ25vcmUgZXJyb3JzIG9uIGEgc2V0IG9mIGtub3duLXRvLWJlLWJhZAorICAgb2JqZWN0cywgYW5kIGFsc28gYWxsb3dzIHRoZSB3YXJuaW5nIGxldmVscyBvZiB2YXJpb3VzIGtpbmRzIG9mCisgICBub24tY3JpdGljYWwgYnJlYWthZ2VzIHRvIGJlIHR3ZWFrZWQuCisKKyAqICJnaXQgcmViYXNlIC1pIidzIGxpc3Qgb2YgdG9kbyBpcyBtYWRlIGNvbmZpZ3VyYWJsZS4KKworICogImdpdCBzZW5kLWVtYWlsIiBub3cgcGVyZm9ybXMgYWxpYXMtZXhwYW5zaW9uIG9uIG5hbWVzIHRoYXQgYXJlCisgICBnaXZlbiB2aWEgLS1jY2NtZCwgZXRjLgorCisgKiBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBHSVRfUkVQTEFDRV9SRUZfQkFTRSB0ZWxscyBHaXQgdG8gbG9vayBpbnRvCisgICByZWZzIGhpZXJhcmNoeSBvdGhlciB0aGFuIHJlZnMvcmVwbGFjZS8gZm9yIHRoZSBvYmplY3QgcmVwbGFjZW1lbnQKKyAgIGRhdGEuCisKKyAqIEFsbG93IHVudHJhY2tlZCBjYWNoZSAoZXhwZXJpbWVudGFsKSB0byBiZSB1c2VkIHdoZW4gc3BhcnNlCisgICBjaGVja291dCAoZXhwZXJpbWVudGFsKSBpcyBhbHNvIGluIHVzZS4KKworICogImdpdCBwdWxsIC0tcmViYXNlIiBoYXMgYmVlbiB0YXVnaHQgdG8gcGF5IGF0dGVudGlvbiB0bworICAgcmViYXNlLmF1dG9zdGFzaCBjb25maWd1cmF0aW9uLgorCisgKiBUaGUgY29tbWFuZC1saW5lIGNvbXBsZXRpb24gc2NyaXB0IChpbiBjb250cmliLykgaGFzIGJlZW4gdXBkYXRlZC4KKworICogQSBuZWdhdGl2ZSAhcmVmIGVudHJ5IGluIG11bHRpLXZhbHVlIHRyYW5zZmVyLmhpZGVSZWZzCisgICBjb25maWd1cmF0aW9uIGNhbiBiZSB1c2VkIHRvIHNheSAiZG9uJ3QgaGlkZSB0aGlzIG9uZSIuCisKKyAqIEFmdGVyICJnaXQgYW0iIHdpdGhvdXQgIi0zIiBzdG9wcywgcnVubmluZyAiZ2l0IGFtIC0zIiBwYXlzIGF0dGVudGlvbgorICAgdG8gIi0zIiBvbmx5IGZvciB0aGUgcGF0Y2ggdGhhdCBjYXVzZWQgdGhlIG9yaWdpbmFsIGludm9jYXRpb24KKyAgIHRvIHN0b3AuCisKKyAqIFdoZW4gbGlua2VkIHdvcmt0cmVlIGlzIHVzZWQsIHNpbXVsdGFuZW91cyAibm90ZXMgbWVyZ2UiIGluc3RhbmNlcworICAgZm9yIHRoZSBzYW1lIHJlZiBpbiByZWZzL25vdGVzLyogYXJlIHByZXZlbnRlZCBmcm9tIHN0b21waW5nIG9uCisgICBlYWNoIG90aGVyLgorCisgKiAiZ2l0IHNlbmQtZW1haWwiIGxlYXJuZWQgYSBuZXcgb3B0aW9uIC0tc210cC1hdXRoIHRvIGxpbWl0IHRoZSBTTVRQCisgICBBVVRIIG1lY2hhbmlzbXMgdG8gYmUgdXNlZCB0byBhIHN1YnNldCBvZiB3aGF0IHRoZSBzeXN0ZW0gbGlicmFyeQorICAgc3VwcG9ydHMuCisKKyAqIEEgbmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaHR0cC5zc2xWZXJzaW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKKyAgIHdoYXQgc3BlY2lmaWMgdmVyc2lvbiBvZiBTU0wvVExTIHRvIHVzZSB0byBtYWtlIGEgY29ubmVjdGlvbi4KKworICogImdpdCBub3RlcyBtZXJnZSIgY2FuIGJlIHRvbGQgd2l0aCAiLS1zdHJhdGVneT08aG93PiIgb3B0aW9uIGhvdyB0bworICAgYXV0b21hdGljYWxseSBoYW5kbGUgY29uZmxpY3RzOyB0aGlzIGNhbiBub3cgYmUgY29uZmlndXJlZCBieQorICAgc2V0dGluZyBub3Rlcy5tZXJnZVN0cmF0ZWd5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAqICJnaXQgbG9nIC0tY2MiIGRpZCBub3Qgc2hvdyBhbnkgcGF0Y2gsIGV2ZW4gdGhvdWdoIG1vc3Qgb2YgdGhlIHRpbWUKKyAgIHRoZSB1c2VyIG1lYW50ICJnaXQgbG9nIC0tY2MgLXAgLW0iIHRvIHNlZSBwYXRjaCBvdXRwdXQgZm9yIGNvbW1pdHMKKyAgIHdpdGggYSBzaW5nbGUgcGFyZW50LCBhbmQgY29tYmluZWQgZGlmZiBmb3IgbWVyZ2UgY29tbWl0cy4gIFRoZQorICAgY29tbWFuZCBpcyB0YXVnaHQgdG8gRFdJTSAiLS1jYyIgKHdpdGhvdXQgIi0tcmF3IiBhbmQgb3RoZXIgZm9ybXMKKyAgIG9mIG91dHB1dCBzcGVjaWZpY2F0aW9uKSB0byAiLS1jYyAtcCAtbSIuCisKKyAqICJnaXQgY29uZmlnIC0tbGlzdCIgb3V0cHV0IHdhcyBoYXJkIHRvIHBhcnNlIHdoZW4gdmFsdWVzIGNvbnNpc3Qgb2YKKyAgIG11bHRpcGxlIGxpbmVzLiAgIi0tbmFtZS1vbmx5IiBvcHRpb24gaXMgYWRkZWQgdG8gaGVscCB0aGlzLgorCisgKiBBIGhhbmRmdWwgb2YgdXNhYmlsaXR5ICYgY29zbWV0aWMgZml4ZXMgdG8gZ2l0ayBhbmQgbDEwbiB1cGRhdGVzLgorCisgKiBBIGNvbXBsZXRlbHkgZW1wdHkgZS1tYWlsIGFkZHJlc3MgPD4gaXMgbm93IGFsbG93ZWQgaW4gdGhlIGF1dGhvcnMKKyAgIGZpbGUgdXNlZCBieSBnaXQtc3ZuLCB0byBtYXRjaCB0aGUgd2F5IGl0IGFjY2VwdHMgdGhlIG91dHB1dCBmcm9tCisgICBhdXRob3JzLXByb2cuCisKKworUGVyZm9ybWFuY2UsIEludGVybmFsIEltcGxlbWVudGF0aW9uLCBEZXZlbG9wbWVudCBTdXBwb3J0IGV0Yy4KKworICogSW4gcHJlcGFyYXRpb24gZm9yIGFsbG93aW5nIGRpZmZlcmVudCAiYmFja2VuZHMiIHRvIHN0b3JlIHRoZSByZWZzCisgICBpbiBhIHdheSBkaWZmZXJlbnQgZnJvbSB0aGUgdHJhZGl0aW9uYWwgIm9uZSByZWYgcGVyIGZpbGUgaW4KKyAgICRHSVRfRElSIG9yIGluIGEgJEdJVF9ESVIvcGFja2VkLXJlZnMgZmlsZSIgZmlsZXN5c3RlbSBzdG9yYWdlLAorICAgZGlyZWN0IGZpbGVzeXN0ZW0gYWNjZXNzIHRvIHJlZi1saWtlIHRoaW5ncyBsaWtlIENIRVJSWV9QSUNLX0hFQUQKKyAgIGZyb20gc2NyaXB0cyBhbmQgcHJvZ3JhbXMgaGFzIGJlZW4gcmVkdWNlZC4KKworICogQ29tcHV0YXRpb24gb2YgdW50cmFja2VkIHN0YXR1cyBpbmRpY2F0b3IgYnkgYmFzaCBwcm9tcHQKKyAgIHNjcmlwdCAoaW4gY29udHJpYi8pIGhhcyBiZWVuIG9wdGltaXplZC4KKworICogTWVtb3J5IHVzZSByZWR1Y3Rpb24gd2hlbiBjb21taXQtc2xhYiBmYWNpbGl0eSBpcyB1c2VkIHRvIGFubm90YXRlCisgICBzcGFyc2VseSAod2hpY2ggaXMgbm90IHJlY29tbWVuZGVkIGluIHRoZSBmaXJzdCBwbGFjZSkuCisKKyAqIENsZWFuIHVwIHJlZnMgQVBJIGFuZCBtYWtlICJnaXQgY2xvbmUiIGxlc3MgaW50aW1hdGUgd2l0aCB0aGUKKyAgIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKworICogImdpdCBwdWxsIiB3YXMgcmVpbXBsZW1lbnRlZCBpbiBDLgorCisgKiBUaGUgcGFja2V0IHRyYWNpbmcgbWFjaGluZXJ5IGFsbG93cyB0byBjYXB0dXJlIGFuIGluY29taW5nIHBhY2sKKyAgIGRhdGEgdG8gYSBmaWxlIGZvciBkZWJ1Z2dpbmcuCisKKyAqIE1vdmUgbWFjaGluZXJ5IHRvIHBhcnNlIGh1bWFuLXJlYWRhYmxlIHNjYWxlZCBudW1iZXJzIGxpa2UgMWssIDRNLAorICAgYW5kIDJHIGFzIGFuIG9wdGlvbiBwYXJhbWV0ZXIncyB2YWx1ZSBmcm9tIHBhY2stb2JqZWN0cyB0bworICAgcGFyc2Utb3B0aW9ucyBBUEksIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIG90aGVyIGNvZGVwYXRocy4KKworICogImdpdCB2ZXJpZnktdGFnIiBhbmQgImdpdCB2ZXJpZnktY29tbWl0IiBoYXZlIGJlZW4gdGF1Z2h0IHRvIHNoYXJlCisgICBtb3JlIGNvZGUsIGFuZCB0aGVuIGxlYXJuZWQgdG8gb3B0aW9uYWxseSBzaG93IHRoZSB2ZXJpZmljYXRpb24KKyAgIG1lc3NhZ2UgZnJvbSB0aGUgdW5kZXJseWluZyBHUEcgaW1wbGVtZW50YXRpb24uCisKKyAqIFZhcmlvdXMgZW5oYW5jZW1lbnRzIGFyb3VuZCAiZ2l0IGFtIiByZWFkaW5nIHBhdGNoZXMgZ2VuZXJhdGVkIGJ5CisgICBmb3JlaWduIFNDTSBoYXZlIGJlZW4gbWFkZS4KKworICogUmVmIGxpc3RpbmcgYnkgImdpdCBicmFuY2ggLWwiIGFuZCAiZ2l0IHRhZyAtbCIgY29tbWFuZHMgaGFzCisgICBzdGFydGVkIHRvIGJlIHJlYnVpbHQsIGJhc2VkIG9uIHRoZSBmb3ItZWFjaC1yZWYgbWFjaGluZXJ5LgorCisgKiBUaGUgY29kZSB0byBwZXJmb3JtIG11bHRpLXRyZWUgbWVyZ2VzIGhhcyBiZWVuIHRhdWdodCB0byByZXBvcHVsYXRlCisgICB0aGUgY2FjaGUtdHJlZSB1cG9uIGEgc3VjY2Vzc2Z1bCBtZXJnZSBpbnRvIHRoZSBpbmRleCwgc28gdGhhdAorICAgc3Vic2VxdWVudCAiZGlmZi1pbmRleCAtLWNhY2hlZCIgKGhlbmNlICJzdGF0dXMiKSBhbmQgIndyaXRlLXRyZWUiCisgICAoaGVuY2UgImNvbW1pdCIpIHdpbGwgZ28gZmFzdGVyLgorCisgICBUaGUgc2FtZSBsb2dpYyBpbiAiZ2l0IGNoZWNrb3V0IiBtYXkgbm93IGJlIHJlbW92ZWQsIGJ1dCB0aGF0IGlzIGEKKyAgIHNlcGFyYXRlIGlzc3VlLgorCisgKiBUZXN0cyB0aGF0IGFzc3VtZSBob3cgcmVmbG9ncyBhcmUgcmVwcmVzZW50ZWQgb24gdGhlIGZpbGVzeXN0ZW0gdG9vCisgICBtdWNoIGhhdmUgYmVlbiBjb3JyZWN0ZWQuCisKKyAqICJnaXQgYW0iIGhhcyBiZWVuIHJld3JpdHRlbiBpbiAiQyIuCisKKyAqIGdpdF9wYXRoKCkgYW5kIG1rcGF0aCgpIGFyZSBoYW5keSBoZWxwZXIgZnVuY3Rpb25zIGJ1dCBpdCBpcyBlYXN5CisgICB0byBtaXN1c2UsIGFzIHRoZSBjYWxsZXJzIG5lZWQgdG8gYmUgY2FyZWZ1bCB0byBrZWVwIHRoZSBudW1iZXIgb2YKKyAgIGFjdGl2ZSByZXN1bHRzIGJlbG93IDQuICBUaGVpciB1c2VzIGhhdmUgYmVlbiByZWR1Y2VkLgorCisgKiBUaGUgImxvY2tmaWxlIiBBUEkgaGFzIGJlZW4gcmVidWlsdCBvbiB0b3Agb2YgYSBuZXcgInRlbXBmaWxlIiBBUEkuCisKKyAqIFRvIHByZXBhcmUgZm9yIGFsbG93aW5nIGEgZGlmZmVyZW50ICJyZWYiIGJhY2tlbmQgdG8gYmUgcGx1Z2dlZCBpbgorICAgdG8gdGhlIHN5c3RlbSwgdXBkYXRlX3JlZigpL2RlbGV0ZV9yZWYoKSBoYXZlIGJlZW4gdGF1Z2h0IGFib3V0CisgICByZWYtbGlrZSB0aGluZ3MgbGlrZSBNRVJHRV9IRUFEIHRoYXQgYXJlIHBlci13b3JrdHJlZSAodGhleSB3aWxsCisgICBhbHdheXMgYmUgd3JpdHRlbiB0byB0aGUgZmlsZXN5c3RlbSBpbnNpZGUgJEdJVF9ESVIpLgorCisgKiBUaGUgZ2l0bW9kdWxlcyBBUEkgdGhhdCBpcyBhY2Nlc3NlZCBmcm9tIHRoZSBDIGNvZGUgbGVhcm5lZCB0bworICAgY2FjaGUgc3R1ZmYgbGF6aWx5LgorCisKK0Fsc28gY29udGFpbnMgdmFyaW91cyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMgYW5kIGNvZGUgY2xlYW4tdXBzLgorCisKK0ZpeGVzIHNpbmNlIHYyLjUKKy0tLS0tLS0tLS0tLS0tLS0KKworVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgYWxsIHRoZSBmaXhlcyBzaW5jZSB2Mi41IGluIHRoZSBtYWludGVuYW5jZQordHJhY2sgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2UgKHNlZSB0aGUgbWFpbnRlbmFuY2UgcmVsZWFzZXMnCitub3RlcyBmb3IgZGV0YWlscykuCisKKyAqICJnaXQgc3VidHJlZSIgKGluIGNvbnRyaWIvKSBkZXBlbmRlZCBvbiAiZ2l0IGxvZyIgb3V0cHV0IHRvIGJlCisgICBzdGFibGUsIHdoaWNoIHdhcyBhIG5vLW5vLiAgQXBwbHkgYSB3b3JrYXJvdW5kIHRvIGZvcmNlIGEKKyAgIHBhcnRpY3VsYXIgZGF0ZSBmb3JtYXQuCisgICAobWVyZ2UgZTdhYWM0NCBkYS9zdWJ0cmVlLWRhdGUtY29uZnVzaW9uIGxhdGVyIHRvIG1haW50KS4KKworICogQW4gYXR0ZW1wdCB0byBkZWxldGUgYSByZWYgYnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aG9zZSBIRUFECisgICBzeW1ib2xpYyByZWZlcmVuY2UgcG9pbnRzIGF0IGFuIHVuYm9ybiBicmFuY2ggdGhhdCBjYW5ub3QgYmUKKyAgIGNyZWF0ZWQgZHVlIHRvIHJlZiBEL0YgY29uZmxpY3QgKGUuZy4gcmVmcy9oZWFkcy9hL2IgZXhpc3RzLCBIRUFECisgICBwb2ludHMgYXQgcmVmcy9oZWFkcy9hKSBmYWlsZWQuCisgICAobWVyZ2UgYjExMmIxNCBqeC9kby1ub3QtY3Jhc2gtcmVjZWl2ZS1wYWNrLXdvLWhlYWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbG93LWxldmVsICJnaXQgc2VuZC1wYWNrIiBkaWQgbm90IGhvbm9yICd1c2VyLnNpZ25pbmdrZXknCisgICBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHdoZW4gc2VuZGluZyBhIHNpZ25lZC1wdXNoLgorICAgKG1lcmdlIGQ4MzBkMzkgZGIvc2VuZC1wYWNrLXVzZXItc2lnbmluZ2tleSBsYXRlciB0byBtYWludCkuCisKKyAqICJzcGFyc2UgY2hlY2tvdXQiIG1pc2JlaGF2ZWQgZm9yIGEgcGF0aCB0aGF0IGlzIGV4Y2x1ZGVkIGZyb20gdGhlCisgICBjaGVja291dCB3aGVuIHN3aXRjaGluZyBiZXR3ZWVuIGJyYW5jaGVzIHRoYXQgZGlmZmVyIGF0IHRoZSBwYXRoLgorICAgKG1lcmdlIDdkNzgyNDEgYXMvc3BhcnNlLWNoZWNrb3V0LXJlbW92YWwgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBBbiBleHBlcmltZW50YWwgInVudHJhY2tlZCBjYWNoZSIgZmVhdHVyZSB1c2VkIHVuYW1lKDIpIGluIGEKKyAgIHNsaWdodGx5IHVucG9ydGFibGUgd2F5LgorICAgKG1lcmdlIDEwMGU0MzMgY2IvdW5hbWUtaW4tdW50cmFja2VkIGxhdGVyIHRvIG1haW50KS4KKworICogQSAicmViYXNlIiByZXBsYXlzIGNoYW5nZXMgb2YgdGhlIGxvY2FsIGJyYW5jaCBvbiB0b3Agb2Ygc29tZXRoaW5nCisgICBlbHNlLCBhcyBzdWNoIHRoZXkgYXJlIHBsYWNlZCBpbiBzdGFnZSAjMyBhbmQgcmVmZXJyZWQgdG8gYXMKKyAgICJ0aGVpcnMiLCB3aGlsZSB0aGUgY2hhbmdlcyBpbiB0aGUgbmV3IGJhc2UsIHR5cGljYWxseSBhIGZvcmVpZ24KKyAgIHdvcmssIGFyZSBwbGFjZWQgaW4gc3RhZ2UgIzIgYW5kIHJlZmVycmVkIHRvIGFzICJvdXJzIi4gIENsYXJpZnkKKyAgIHRoZSAiY2hlY2tvdXQgLS1vdXJzLy0tdGhlaXJzIi4KKyAgIChtZXJnZSBmMzAzMDE2IHNlL2RvYy1jaGVja291dC1vdXJzLXRoZWlycyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSAicmV2LXBhcnNlIC0tcGFyc2VvcHQiIG1vZGUgcGFyc2VkIHRoZSBvcHRpb24gc3BlY2lmaWNhdGlvbgorICAgYW5kIHRoZSBhcmd1bWVudCBoaW50IGluIGEgc3RyYW5nZSB3YXkgdG8gYWxsb3cgJz0nIGFuZCBvdGhlcgorICAgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBvcHRpb24gbmFtZSB3aGlsZSBmb3JiaWRkaW5nIHRoZW0gZnJvbQorICAgdGhlIGFyZ3VtZW50IGhpbnQuICBUaGlzIG1hZGUgaXQgaW1wb3NzaWJsZSB0byBkZWZpbmUgYW4gb3B0aW9uCisgICBsaWtlICItLXBhaXIgPGtleT49PHZhbHVlPiIgd2l0aCAicGFpcj1rZXk9dmFsdWUiIHNwZWNpZmljYXRpb24sCisgICB3aGljaCBpbnN0ZWFkIHdvdWxkIGhhdmUgZGVmaW5lZCBhICItLXBhaXI9a2V5IDx2YWx1ZT4iIG9wdGlvbi4KKyAgIChtZXJnZSAyZDg5M2RmIGliL3NjcmlwdGVkLXBhcnNlLW9wdC1iZXR0ZXItaGludC1zdHJpbmcgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBPZnRlbiBhIGZhc3QtaW1wb3J0IHN0cmVhbSBidWlsZHMgYSBuZXcgY29tbWl0IG9uIHRvcCBvZiB0aGUKKyAgIHByZXZpb3VzIGNvbW1pdCBpdCBidWlsdCwgYW5kIGl0IG9mdGVuIHVuY29uZGl0aW9uYWxseSBlbWl0cyBhCisgICAiZnJvbSIgY29tbWFuZCB0byBzcGVjaWZ5IHRoZSBmaXJzdCBwYXJlbnQsIHdoaWNoIGNhbiBiZSBvbWl0dGVkIGluCisgICBzdWNoIGEgY2FzZS4gIFRoaXMgY2F1c2VkIGZhc3QtaW1wb3J0IHRvIGZvcmdldCB0aGUgdHJlZSBvZiB0aGUKKyAgIHByZXZpb3VzIGNvbW1pdCBhbmQgdGhlbiByZS1yZWFkIGl0IGZyb20gc2NyYXRjaCwgd2hpY2ggd2FzCisgICBpbmVmZmljaWVudC4gIE9wdGltaXplIGZvciB0aGlzIGNvbW1vbiBjYXNlLgorICAgKG1lcmdlIDBkZjMyNDUgbWgvZmFzdC1pbXBvcnQtb3B0aW1pemUtY3VycmVudC1mcm9tIGxhdGVyIHRvIG1haW50KS4KKworICogUnVubmluZyBhbiBhbGlhc2VkIGNvbW1hbmQgZnJvbSBhIHN1YmRpcmVjdG9yeSB3aGVuIHRoZSAuZ2l0IHRoaW5nCisgICBpbiB0aGUgd29ya2luZyB0cmVlIGlzIGEgZ2l0ZmlsZSBwb2ludGluZyBlbHNld2hlcmUgZGlkIG5vdCB3b3JrLgorICAgKG1lcmdlIGQ5NTEzOGUgbmQvZXhwb3J0LXdvcmt0cmVlIGxhdGVyIHRvIG1haW50KS4KKworICogIklzIHRoaXMgc3ViZGlyZWN0b3J5IGEgc2VwYXJhdGUgcmVwb3NpdG9yeSB0aGF0IHNob3VsZCBub3QgYmUKKyAgIHRvdWNoZWQ/IiBjaGVjayAiZ2l0IGNsZWFuIiB3YXMgaW5lZmZpY2llbnQuICBUaGlzIHdhcyByZXBsYWNlZAorICAgd2l0aCBhIG1vcmUgb3B0aW1pemVkIGNoZWNrLgorICAgKG1lcmdlIGZiZjJmZWMgZWUvY2xlYW4tcmVtb3ZlLWRpcnMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgIm5ldy13b3JrdHJlZS1tb2RlIiBoYWNrIGluICJjaGVja291dCIgdGhhdCB3YXMgYWRkZWQgaW4KKyAgIG5kL211bHRpcGxlLXdvcmstdHJlZXMgdG9waWMgaGFzIGJlZW4gcmVtb3ZlZCBieSB1cGRhdGluZyB0aGUKKyAgIGltcGxlbWVudGF0aW9uIG9mIG5ldyAid29ya3RyZWUgYWRkIi4KKyAgIChtZXJnZSA2NWY5Yjc1IGVzL3dvcmt0cmVlLWFkZC1jbGVhbnVwIGxhdGVyIHRvIG1haW50KS4KKworICogUmVtb3ZlIHJlbWFpbmluZyBjcnVmdCBmcm9tICAiZ2l0IGNoZWNrb3V0IC0tdG8iLCB3aGljaAorICAgdHJhbnNpdGlvbmVkIHRvICJnaXQgd29ya3RyZWUgYWRkIi4KKyAgIChtZXJnZSAxMTRmZjg4IGVzL3dvcmt0cmVlLWFkZCBsYXRlciB0byBtYWludCkuCisKKyAqIEFuIG9mZi1ieS1vbmUgZXJyb3IgbWFkZSAiZ2l0IHJlbW90ZSIgdG8gbWlzaGFuZGxlIGEgcmVtb3RlIHdpdGggYQorICAgc2luZ2xlIGxldHRlciBuaWNrbmFtZS4KKyAgIChtZXJnZSBiYzU5OGMzIG1oL2dldC1yZW1vdGUtZ3JvdXAtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBjbG9uZSAkVVJMIiwgd2hlbiBjbG9uaW5nIGZyb20gYSBzaXRlIHdob3NlIHNvbGUgcHVycG9zZSBpcyB0bworICAgaG9zdCBhIHNpbmdsZSByZXBvc2l0b3J5IChoZW5jZSwgbm8gcGF0aCBhZnRlciA8c2NoZW1lPjovLzxzaXRlPi8pLAorICAgdHJpZWQgdG8gdXNlIHRoZSBzaXRlIG5hbWUgYXMgdGhlIG5ldyByZXBvc2l0b3J5IG5hbWUsIGJ1dCBkaWQgbm90CisgICByZW1vdmUgdXNlcm5hbWUgb3IgcGFzc3dvcmQgd2hlbiA8c2l0ZT4gcGFydCB3YXMgb2YgdGhlIGZvcm0KKyAgIDx1c2VyPkA8cGFzcz46PGhvc3Q+LiAgVGhlIGNvZGUgaXMgdGF1Z2h0IHRvIHJlZGFjdCB0aGVzZS4KKyAgIChtZXJnZSBhZGVmOTU2IHBzL2d1ZXNzLXJlcG8tbmFtZS1hdC1yb290IGxhdGVyIHRvIG1haW50KS4KKworICogUnVubmluZyB0ZXN0cyB3aXRoIHRoZSAiLXgiIG9wdGlvbiB0byBtYWtlIHRoZW0gdmVyYm9zZSBoYWQgc29tZQorICAgdW5wbGVhc2FudCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmZWF0dXJlcyBvZiB0aGUgdGVzdCBzdWl0ZS4KKyAgIChtZXJnZSA5YjVmZTc4IGprL3Rlc3Qtd2l0aC14IGxhdGVyIHRvIG1haW50KS4KKworICogdDE1MDkgdGVzdCB0aGF0IHJlcXVpcmVzIGEgZGVkaWNhdGVkIFZNIGVudmlyb25tZW50IGhhZCBzb21lCisgICBiaXRyb3QsIHdoaWNoIGhhcyBiZWVuIGNvcnJlY3RlZC4KKyAgIChtZXJnZSBmYWFjYzVhIHBzL3QxNTA5LWNocm9vdC10ZXN0LWZpeHVwIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBwdWxsIiBpbiByZWNlbnQgcmVsZWFzZXMgb2YgR2l0IGhhcyBhIHJlZ3Jlc3Npb24gaW4gdGhlIGNvZGUKKyAgIHRoYXQgYWxsb3dzIGN1c3RvbSBwYXRoIHRvIHRoZSAtLXVwbG9hZC1wYWNrPTxwcm9ncmFtPi4gIFRoaXMgaGFzCisgICBiZWVuIGNvcnJlY3RlZC4KKworICAgTm90ZSB0aGF0IHRoaXMgaXMgaXJyZWxldmFudCBmb3IgJ21hc3Rlcicgd2l0aCAiZ2l0IHB1bGwiIHJld3JpdHRlbgorICAgaW4gQy4KKyAgIChtZXJnZSAxM2UwZTI4IG1tL3B1bGwtdXBsb2FkLXBhY2sgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIHRyeWluZyB0byBzZWUgdGhhdCBhbiBvYmplY3QgZG9lcyBub3QgZXhpc3QsIGEgc3RhdGUgZXJybm8KKyAgIGxlYWtlZCBmcm9tIG91ciAiZmlyc3QgdHJ5IHRvIG9wZW4gYSBwYWNrZmlsZSB3aXRoIE9fTk9BVElNRSBhbmQKKyAgIHRoZW4gaWYgaXQgZmFpbHMgcmV0cnkgd2l0aG91dCBpdCIgbG9naWMgb24gYSBzeXN0ZW0gdGhhdCByZWZ1c2VzCisgICBPX05PQVRJTUUuICBUaGlzIGNvbmZ1c2VkIHVzIGFuZCBjYXVzZWQgdXMgdG8gZGllLCBzYXlpbmcgdGhhdCB0aGUKKyAgIHBhY2tmaWxlIGlzIHVucmVhZGFibGUsIHdoZW4gd2Ugc2hvdWxkIGhhdmUganVzdCByZXBvcnRlZCB0aGF0IHRoZQorICAgb2JqZWN0IGRvZXMgbm90IGV4aXN0IGluIHRoYXQgcGFja2ZpbGUgdG8gdGhlIGNhbGxlci4KKyAgIChtZXJnZSBkZmY2ZjI4IGNiL29wZW4tbm9hdGltZS1jbGVhci1lcnJubyBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlcGF0aCB0byBwcm9kdWNlIGVycm9yIG1lc3NhZ2VzIGhhZCBhIGhhcmQtY29kZWQgbGltaXQgdG8KKyAgIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLCBwcmltYXJpbHkgdG8gYXZvaWQgbWVtb3J5IGFsbG9jYXRpb24gd2hpbGUKKyAgIGNhbGxpbmcgZGllKCkuCisgICAobWVyZ2UgZjRjM2VkYyBqay9sb25nLWVycm9yLW1lc3NhZ2VzIGxhdGVyIHRvIG1haW50KS4KKworICogc3RyYnVmX3JlYWQoKSB1c2VkIHRvIGhhdmUgb25lIGV4dHJhIGl0ZXJhdGlvbiAoYW5kIGFuIHVubmVjZXNzYXJ5CisgICBzdHJidWZfZ3JvdygpIG9mIDhrQiksIHdoaWNoIHdhcyBlbGltaW5hdGVkLgorICAgKG1lcmdlIDNlYmJkMDAgamgvc3RyYnVmLXJlYWQtdXNlLXJlYWQtaW4tZnVsbCBsYXRlciB0byBtYWludCkuCisKKyAqIFdlIHJld3JvdGUgb25lIG9mIHRoZSBidWlsZCBzY3JpcHRzIGluIFBlcmwgYnV0IHRoaXMgcmVpbXBsZW1lbnRzCisgICBpbiBCb3VybmUgc2hlbGwuCisgICAobWVyZ2UgNTdjZWU4YSBzZy9oZWxwLWdyb3VwIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGV4cGVyaW1lbnRhbCB1bnRyYWNrZWQtY2FjaGUgZmVhdHVyZSB3ZXJlIGJ1Z2d5IHdoZW4gcGF0aHMgd2l0aAorICAgYSBmZXcgbGV2ZWxzIG9mIHN1YmRpcmVjdG9yaWVzIGFyZSBpbnZvbHZlZC4KKyAgIChtZXJnZSA3M2Y5MTQ1IGR0L3VudHJhY2tlZC1zdWJkaXIgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiaW50ZXJwcmV0LXRyYWlsZXJzIiBoZWxwZXIgbWlzdG9vayBhIHNpbmdsZS1saW5lciBsb2cgbWVzc2FnZSB0aGF0CisgICBoYXMgYSBjb2xvbiBhcyB0aGUgZW5kIG9mIGV4aXN0aW5nIHRyYWlsZXIuCisKKyAqIFRoZSAiaW50ZXJwcmV0LXRyYWlsZXJzIiBoZWxwZXIgbWlzdG9vayBhIG11bHRpLXBhcmFncmFwaCB0aXRsZSBvZgorICAgYSBjb21taXQgbG9nIG1lc3NhZ2Ugd2l0aCBhIGNvbG9uIGluIGl0IGFzIHRoZSBlbmQgb2YgdGhlIHRyYWlsZXIKKyAgIGJsb2NrLgorICAgKG1lcmdlIDVjOTk5OTUgY2MvdHJhaWxlcnMtY29ybmVyLWNhc2UtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCBkZXNjcmliZSIgd2l0aG91dCBhcmd1bWVudCBkZWZhdWx0ZWQgdG8gZGVzY3JpYmUgdGhlIEhFQUQKKyAgIGNvbW1pdCwgYnV0ICJnaXQgZGVzY3JpYmUgLS1jb250YWlucyIgZGlkbid0LiAgQXJndWFibHksIGluIGEKKyAgIHJlcG9zaXRvcnkgdXNlZCBmb3IgYWN0aXZlIGRldmVsb3BtZW50LCBzdWNoIGRlZmF1bHRpbmcgd291bGQgbm90CisgICBiZSB2ZXJ5IHVzZWZ1bCBhcyB0aGUgdGlwIG9mIGJyYW5jaCBpcyB0eXBpY2FsbHkgbm90IHRhZ2dlZCwgYnV0IGl0CisgICBpcyBiZXR0ZXIgdG8gYmUgY29uc2lzdGVudC4KKyAgIChtZXJnZSAyYmQwNzA2IHNnL2Rlc2NyaWJlLWNvbnRhaW5zIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGNsaWVudCBzaWRlIGNvZGVwYXRocyBpbiAiZ2l0IHB1c2giIGhhdmUgYmVlbiBjbGVhbmVkIHVwCisgICBhbmQgdGhlIHVzZXIgY2FuIHJlcXVlc3QgdG8gcGVyZm9ybSBhbiBvcHRpb25hbCAic2lnbmVkIHB1c2giLAorICAgaS5lLiBzaWduIG9ubHkgd2hlbiB0aGUgb3RoZXIgZW5kIGFjY2VwdHMgc2lnbmVkIHB1c2guCisgICAobWVyZ2UgNjhjNzU3ZiBkYi9wdXNoLXNpZ24taWYtYXNrZWQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBCZWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBhbGxvdyAiYWxpYXMuMGZvbyIgYW5kCisgICAicGFnZXIuMGZvbyIgYXMgdGhlIGNvbmZpZ3VyYXRpb24ga2V5LCB0aGUgdXNlciBjYW5ub3QgdXNlICcwZm9vJworICAgYXMgYSBjdXN0b20gY29tbWFuZCBuYW1lIGFueXdheSwgYnV0ICJnaXQgMGZvbyIgdHJpZWQgdG8gbG9vayB0aGVzZQorICAga2V5cyB1cCBhbmQgZW1pdHRlZCB1c2VsZXNzIHdhcm5pbmdzIGJlZm9yZSBzYXlpbmcgJzBmb28gaXMgbm90IGEKKyAgIGdpdCBjb21tYW5kJy4gIFRoZXNlIHdhcm5pbmcgbWVzc2FnZXMgaGF2ZSBiZWVuIHNxdWVsY2hlZC4KKyAgIChtZXJnZSA5ZTlkZTE4IGprL2ZpeC1hbGlhcy1wYWdlci1jb25maWcta2V5LXdhcm5pbmdzIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZXYtbGlzdCIgZG9lcyBub3QgdGFrZSAiLS1ub3RlcyIgb3B0aW9uLCBidXQgZGlkIG5vdCBjb21wbGFpbgorICAgd2hlbiBvbmUgaXMgZ2l2ZW4uCisgICAobWVyZ2UgMmFlYTdhNSBqay9yZXYtbGlzdC1oYXMtbm8tbm90ZXMgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBXaGVuIHJlLXByaW1pbmcgdGhlIGNhY2hlLXRyZWUgb3Bwb3J0dW5pc3RpY2FsbHkgd2hpbGUgY29tbWl0dGluZworICAgdGhlIGluLWNvcmUgaW5kZXggYXMtaXMsIHdlIG1pc3Rha2VubHkgaW52YWxpZGF0ZWQgdGhlIGluLWNvcmUKKyAgIGluZGV4IHRvbyBhZ2dyZXNzaXZlbHksIGNhdXNpbmcgdGhlIGV4cGVyaW1lbnRhbCBzcGxpdC1pbmRleCBjb2RlCisgICB0byB1bm5lY2Vzc2FyaWx5IHJld3JpdGUgdGhlIG9uLWRpc2sgaW5kZXggZmlsZShzKS4KKyAgIChtZXJnZSA0NzVhMzQ0IGR0L2NvbW1pdC1wcmVzZXJ2ZS1iYXNlLWluZGV4LXVwb24tb3Bwb3J0dW5pc3RpYy1jYWNoZS10cmVlLXVwZGF0ZSBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYXJjaGl2ZSIgZGlkIG5vdCB1c2UgemlwNjQgZXh0ZW5zaW9uIHdoZW4gY3JlYXRpbmcgYW4gYXJjaGl2ZQorICAgd2l0aCBtb3JlIHRoYW4gNjRrIGVudHJpZXMsIHdoaWNoIG5vYm9keSBzaG91bGQgbmVlZCwgcmlnaHQgOy0pPworICAgKG1lcmdlIDg4MzI5Y2EgcnMvYXJjaGl2ZS16aXAtbWFueSBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBjb2RlIGluICJtdWx0aXBsZS13b3JrdHJlZSIgc3VwcG9ydCB0aGF0IGF0dGVtcHRlZCB0byByZWNvdmVyCisgICBmcm9tIGFuIGluY29uc2lzdGVudCBzdGF0ZSB1cGRhdGVkIGFuIGluY29ycmVjdCBmaWxlLgorICAgKG1lcmdlIDgyZmRlODcgbmQvZml4dXAtbGlua2VkLWdpdGRpciBsYXRlciB0byBtYWludCkuCisKKyAqIE9uIGNhc2UgaW5zZW5zaXRpdmUgc3lzdGVtcywgImdpdCBwNCIgZGlkIG5vdCB3b3JrIHdlbGwgd2l0aCBjbGllbnQKKyAgIHNwZWNzLgorCisgKiAiZ2l0IGluaXQgZW1wdHkgJiYgZ2l0IC1DIGVtcHR5IGxvZyIgc2FpZCAiYmFkIGRlZmF1bHQgcmV2aXNpb24gJ0hFQUQnIiwKKyAgIHdoaWNoIHdhcyBmb3VuZCB0byBiZSBhIGJpdCBjb25mdXNpbmcgdG8gbmV3IHVzZXJzLgorICAgKG1lcmdlIGNlMTEzNjAgamsvbG9nLW1pc3NpbmctZGVmYXVsdC1IRUFEIGxhdGVyIHRvIG1haW50KS4KKworICogUmVjZW50IHZlcnNpb25zIG9mIHNjcmlwdGVkICJnaXQgYW0iIGhhcyBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gaW4KKyAgICJnaXQgYW0gLS1za2lwIiBjb2RlcGF0aCwgd2hpY2ggbm8gbG9uZ2VyIGV4aXN0cyBpbiB0aGUgYnVpbHQtaW4KKyAgIHZlcnNpb24gb24gdGhlICdtYXN0ZXInIGZyb250LiAgRml4IHRoZSByZWdyZXNzaW9uIGluIHRoZSBsYXN0CisgICBzY3JpcHRlZCB2ZXJzaW9uIHRoYXQgYXBwZWFyIGluIDIuNS54IG1haW50ZW5hbmNlIHRyYWNrIGFuZCBvbGRlci4KKyAgIChtZXJnZSBiOWQ2Njg5IGpzL21haW50LWFtLXNraXAtcGVyZm9ybWFuY2UtcmVncmVzc2lvbiBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBicmFuY2ggZGVzY3JpcHRpb25zIHRoYXQgYXJlIHNldCB3aXRoICJnaXQgYnJhbmNoIC0tZWRpdC1kZXNjcmlwdGlvbiIKKyAgIG9wdGlvbiB3ZXJlIHVzZWQgaW4gbWFueSBwbGFjZXMgYnV0IHRoZXkgd2VyZW4ndCBjbGVhcmx5IGRvY3VtZW50ZWQuCisgICAobWVyZ2UgNTYxZDJiNyBwby9kb2MtYnJhbmNoLWRlc2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb2RlIGNsZWFudXBzIGFuZCBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisgICAobWVyZ2UgMWM2MDFhZiBlcy9kb2MtY2xlYW4tb3V0ZGF0ZWQtdG9vbHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDM1ODEzMDQga24vdGFnLWRvYy1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDNhNTllNTkga2IvaTE4bi1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ1YWJkZWUgc2IvcmVtb3ZlLXVudXNlZC12YXItZnJvbS1idWlsdGluLWFkZCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTQ2OTFlMyBzYi9wYXJzZS1vcHRpb25zLWNvZGVmb3JtYXQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDRhNmFkYTMgYWQvYmlzZWN0LWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGRhNGM1YWQgdGEvZG9jZml4LWluZGV4LWZvcm1hdC10ZWNoIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBhZTI1ZmQzIHNiL2NoZWNrLXJldHVybi1mcm9tLXJlYWQtcmVmIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiMzMyNWRmIG5kL2R3aW0td2lsZGNhcmRzLWFzLXBhdGhzcGVjcyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgN2FhOWI5YiBzZy93dC1zdGF0dXMtaGVhZGVyLWluY2x1c2lvbiBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZjA0YzY5MCBhcy9kb2NmaXgtcmVmbG9nLWV4cGlyZS11bnJlYWNoYWJsZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTI2OTg0NyBzZy90MzAyMC10eXBvZml4IGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA4YjU0YzIzIGpjL2NhbGxvYy1wYXRoc3BlYyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYTY5MjZiOCBwby9wby1yZWFkbWUgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDU0ZDE2MGUgc3MvZml4LWNvbmZpZy1mZC1sZWFrIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSBiODBmYTg0IGFoL3N1Ym1vZHVsZS10eXBvZml4LWluLWVycm9yIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5OTg4NWJjIGFoL3JlZmxvZy10eXBvZml4LWluLWVycm9yIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA5NDc2YzJjIGFoL3JlYWQtdHJlZS11c2FnZS1zdHJpbmcgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGI4YzFkMjcgYWgvcGFjay1vYmplY3RzLXVzYWdlLXN0cmluZ3MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ4NmUxZTEgYnIvc3ZuLWRvYy1pbmNsdWRlLXBhdGhzLWNvbmZpZyBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgMTczM2VkMyBlZS9jbGVhbi10ZXN0LWZpeGVzIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA1ZmNhZGMzIGdiL2FwcGx5LWNvbW1lbnQtdHlwb2ZpeCBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYjg5NGQzZSBtcC90NzA2MC1kaWZmLWluZGV4LXRlc3QgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGQyMzg3MTAgYXMvY29uZmlnLWRvYy1tYXJrdXAtZml4IGxhdGVyIHRvIG1haW50KS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjEudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1MTM2MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjEudHh0CkBAIC0wLDAgKzEsMTggQEAKK0dpdCB2Mi42LjEgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjYKKy0tLS0tLS0tLS0tLS0tLS0KKworICogeGRpZmYgY29kZSB3ZSB1c2UgdG8gZ2VuZXJhdGUgZGlmZnMgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorICAgZXh0cmVtZWx5IGxhcmdlIGZpbGVzLiAgSXQgdXNlcyAiaW50IiBpbiBtYW55IHBsYWNlcywgd2hpY2ggY2FuCisgICBvdmVyZmxvdyBpZiB3ZSBoYXZlIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgbGluZXMgb3IgZXZlbiBieXRlcyBpbgorICAgb3VyIGlucHV0IGZpbGVzLCBmb3IgZXhhbXBsZS4gIENhcCB0aGUgaW5wdXQgc2l6ZSB0byBzb2Vtd2hlcmUKKyAgIGFyb3VuZCAxR0IgZm9yIG5vdy4KKworICogU29tZSBwcm90b2NvbHMgKGxpa2UgZ2l0LXJlbW90ZS1leHQpIGNhbiBleGVjdXRlIGFyYml0cmFyeSBjb2RlCisgICBmb3VuZCBpbiB0aGUgVVJMLiAgVGhlIFVSTHMgdGhhdCBzdWJtb2R1bGVzIHVzZSBtYXkgY29tZSBmcm9tCisgICBhcmJpdHJhcnkgc291cmNlcyAoZS5nLiwgLmdpdG1vZHVsZXMgZmlsZXMgaW4gYSByZW1vdGUKKyAgIHJlcG9zaXRvcnkpLCBhbmQgY2FuIGh1cnQgdGhvc2Ugd2hvIGJsaW5kbHkgZW5hYmxlIHJlY3Vyc2l2ZQorICAgZmV0Y2guICBSZXN0cmljdCB0aGUgYWxsb3dlZCBwcm90b2NvbHMgdG8gd2VsbCBrbm93biBhbmQgc2FmZQorICAgb25lcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjIudHh0IGIvRG9jdW1lbnRhdGlvbi9SZWxOb3Rlcy8yLjYuMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI2NWUzNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi42LjIudHh0CkBAIC0wLDAgKzEsNjUgQEAKK0dpdCB2Mi42LjIgUmVsZWFzZSBOb3RlcworPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpeGVzIHNpbmNlIHYyLjYuMQorLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAqIFRoZXJlIHdlcmUgc29tZSBjbGFzc2VzIG9mIGVycm9ycyB0aGF0ICJnaXQgZnNjayIgZGlhZ25vc2VkIHRvIGl0cworICAgc3RhbmRhcmQgZXJyb3IgdGhhdCBkaWQgbm90IGNhdXNlIGl0IHRvIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuCisKKyAqIEEgdGVzdCBzY3JpcHQgZm9yIHRoZSBIVFRQIHNlcnZpY2UgaGFkIGEgdGltaW5nIGRlcGVuZGVudCBidWcsCisgICB3aGljaCB3YXMgZml4ZWQuCisKKyAqIFBlcmZvcm1hbmNlLW1lYXN1cmVtZW50IHRlc3RzIGRpZCBub3Qgd29yayB3aXRob3V0IGFuIGluc3RhbGxlZCBHaXQuCisKKyAqIE9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcywgc2V0dGluZyBHSVRfV09SS19UUkVFIHZhcmlhYmxlCisgICB1c2luZyBhIHJhbmRvbSBjYXNlcyB0aGF0IGRvZXMgbm90IGFncmVlIHdpdGggd2hhdCB0aGUgZmlsZXN5c3RlbQorICAgdGhpbmtzIGNvbmZ1c2VkIEdpdCB0aGF0IGl0IHdhc24ndCBpbnNpZGUgdGhlIHdvcmtpbmcgdHJlZS4KKworICogV2hlbiAiZ2l0IGFtIiB3YXMgcmV3cml0dGVuIGFzIGEgYnVpbHQtaW4sIGl0IHN0b3BwZWQgcGF5aW5nCisgICBhdHRlbnRpb24gdG8gdXNlci5zaWduaW5na2V5LCB3aGljaCB3YXMgZml4ZWQuCisKKyAqIEFmdGVyICJnaXQgY2hlY2tvdXQgLS1kZXRhY2giLCAiZ2l0IHN0YXR1cyIgcmVwb3J0ZWQgYSBmYWlybHkKKyAgIHVzZWxlc3MgIkhFQUQgZGV0YWNoZWQgYXQgSEVBRCIsIGluc3RlYWQgb2Ygc2F5aW5nIGF0IHdoaWNoIGV4YWN0CisgICBjb21taXQuCisKKyAqICJnaXQgcmViYXNlIC1pIiBoYWQgYSBtaW5vciByZWdyZXNzaW9uIHJlY2VudGx5LCB3aGljaCBzdG9wcGVkCisgICBjb25zaWRlcmluZyBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCBhbiBpbmRlbnRlZCAnIycgaW4gaXRzIGluc24KKyAgIHNoZWV0IG5vdCBhIGNvbW1lbnQsIHdoaWNoIGlzIG5vdyBmaXhlZC4KKworICogRGVzY3JpcHRpb24gb2YgdGhlICJsb2cuZm9sbG93IiBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGluICJnaXQgbG9nIgorICAgZG9jdW1lbnRhdGlvbiBpcyBub3cgYWxzbyBjb3BpZWQgdG8gImdpdCBjb25maWciIGRvY3VtZW50YXRpb24uCisKKyAqIEFsbG9jYXRpb24gcmVsYXRlZCBmdW5jdGlvbnMgYW5kIHN0ZGlvIGFyZSB1bnNhZmUgdGhpbmdzIHRvIGNhbGwKKyAgIGluc2lkZSBhIHNpZ25hbCBoYW5kbGVyLCBhbmQgaW5kZWVkIGtpbGxpbmcgdGhlIHBhZ2VyIGNhbiBjYXVzZQorICAgZ2xpYmMgdG8gZGVhZGxvY2sgd2FpdGluZyBvbiBhbGxvY2F0aW9uIG11dGV4IGFzIG91ciBzaWduYWwgaGFuZGxlcgorICAgdHJpZXMgdG8gZnJlZSgpIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzIGluIHdhaXRfZm9yX3BhZ2VyKCkuICBSZWR1Y2UKKyAgIHRoZXNlIHVuc2FmZSBjYWxscy4KKworICogVGhlIHdheSBob3cgLS1yZWYvLS1ub3RlcyB0byBzcGVjaWZ5IHRoZSBub3RlcyB0cmVlIHJlZmVyZW5jZSBhcmUKKyAgIERXSU1tZWQgd2FzIG5vdCBjbGVhcmx5IGRvY3VtZW50ZWQuCisKKyAqIEN1c3RvbWl6YXRpb24gdG8gY2hhbmdlIHRoZSBiZWhhdmlvdXIgd2l0aCAibWFrZSAtdyIgYW5kICJtYWtlIC1zIgorICAgaW4gb3VyIE1ha2VmaWxlIHdhcyBicm9rZW4gd2hlbiB0aGV5IHdlcmUgdXNlZCB0b2dldGhlci4KKworICogVGhlIE1ha2VmaWxlIGFsd2F5cyBydW5zIHRoZSBsaWJyYXJ5IGFyY2hpdmVyIHdpdGggaGFyZGNvZGVkICJjcnMiCisgICBvcHRpb25zLCB3aGljaCB3YXMgaW5jb252ZW5pZW50IGZvciBleG90aWMgcGxhdGZvcm1zIG9uIHdoaWNoCisgICBwZW9wbGUgd2FudCB0byB1c2UgcHJvZ3JhbXMgd2l0aCB0b3RhbGx5IGRpZmZlcmVudCBzZXQgb2YgY29tbWFuZAorICAgbGluZSBvcHRpb25zLgorCisgKiBUaGUgc3NoIHRyYW5zcG9ydCwganVzdCBsaWtlIGFueSBvdGhlciB0cmFuc3BvcnQgb3ZlciB0aGUgbmV0d29yaywKKyAgIGRpZCBub3QgY2xlYXIgR0lUXyogZW52aXJvbm1lbnQgdmFyaWFibGVzLCBidXQgaXQgaXMgcG9zc2libGUgdG8KKyAgIHVzZSBTZW5kRW52IGFuZCBBY2NlcHRFbnYgdG8gbGVhayB0aGVtIHRvIHRoZSByZW1vdGUgaW52b2NhdGlvbiBvZgorICAgR2l0LCB3aGljaCBpcyBub3QgYSBnb29kIGlkZWEgYXQgYWxsLiAgRXhwbGljaXRseSBjbGVhciB0aGVtIGp1c3QKKyAgIGxpa2Ugd2UgZG8gZm9yIHRoZSBsb2NhbCB0cmFuc3BvcnQuCisKKyAqICJnaXQgYmxhbWUgLS1maXJzdC1wYXJlbnQgdjEuMC4udjIuMCIgd2FzIG5vdCByZWplY3RlZCBidXQgZGlkIG5vdAorICAgbGltaXQgdGhlIGJsYW1lIHRvIGNvbW1pdHMgb24gdGhlIGZpcnN0IHBhcmVudCBjaGFpbi4KKworICogVmVyeSBzbWFsbCBudW1iZXIgb2Ygb3B0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIHRoYXQgaXMgb3B0aW9uYWwKKyAgICh3aGljaCBpcyBub3QgYSBncmVhdCBVSSBlbGVtZW50IGFzIHRoZXkgY2FuIG9ubHkgYXBwZWFyIGF0IHRoZSBlbmQKKyAgIG9mIHRoZSBjb21tYW5kIGxpbmUpLiAgQWRkIG5vdGljZSB0byBkb2N1bWVudGF0aW9uIG9mIGVhY2ggYW5kCisgICBldmVyeSBvbmUgb2YgdGhlbS4KKworQWxzbyBjb250YWlucyB0eXBvZml4ZXMsIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgdHJpdmlhbCBjb2RlCitjbGVhbi11cHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dCBiL0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNmQ5ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL1JlbE5vdGVzLzIuNy4wLnR4dApAQCAtMCwwICsxLDI5NCBAQAorR2l0IDIuNyBSZWxlYXNlIE5vdGVzCis9PT09PT09PT09PT09PT09PT09PT0KKworVXBkYXRlcyBzaW5jZSB2Mi42CistLS0tLS0tLS0tLS0tLS0tLS0KKworVUksIFdvcmtmbG93cyAmIEZlYXR1cmVzCisKKyAqICJnaXQgcmVtb3RlIiBsZWFybmVkICJnZXQtdXJsIiBzdWJjb21tYW5kIHRvIHNob3cgdGhlIFVSTCBmb3IgYQorICAgZ2l2ZW4gcmVtb3RlIG5hbWUgdXNlZCBmb3IgZmV0Y2hpbmcgYW5kIHB1c2hpbmcuCisKKyAqIFRoZXJlIHdhcyBubyB3YXkgdG8gZGVmZWF0IGEgY29uZmlndXJlZCByZWJhc2UuYXV0b3N0YXNoIHZhcmlhYmxlCisgICBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGFzICJnaXQgcmViYXNlIC0tbm8tYXV0b3N0YXNoIiB3YXMgbWlzc2luZy4KKworICogImdpdCBsb2cgLS1kYXRlPWxvY2FsIiB1c2VkIHRvIG9ubHkgc2hvdyB0aGUgbm9ybWFsIChkZWZhdWx0KQorICAgZm9ybWF0IGluIHRoZSBsb2NhbCB0aW1lem9uZS4gIFRoZSBjb21tYW5kIGxlYXJuZWQgdG8gdGFrZSAnbG9jYWwnCisgICBhcyBhbiBpbnN0cnVjdGlvbiB0byB1c2UgdGhlIGxvY2FsIHRpbWV6b25lIHdpdGggb3RoZXIgZm9ybWF0cywKKworICogVGhlIHJlZnMgdXNlZCBkdXJpbmcgYSAiZ2l0IGJpc2VjdCIgc2Vzc2lvbiBpcyBub3cgcGVyLXdvcmt0cmVlIHNvCisgICB0aGF0IGluZGVwZW5kZW50IGJpc2VjdCBzZXNzaW9ucyBjYW4gYmUgZG9uZSBpbiBkaWZmZXJlbnQgd29ya3RyZWVzCisgICBjcmVhdGVkIHdpdGggImdpdCB3b3JrdHJlZSBhZGQiLgorCisgKiBVc2VycyB3aG8gYXJlIHRvbyBidXN5IHRvIHR5cGUgdGhyZWUgZXh0cmEga2V5c3Ryb2tlcyB0byBhc2sgZm9yCisgICAiZ2l0IHN0YXNoIHNob3cgLXAiIGNhbiBub3cgc2V0IHN0YXNoLnNob3dQYXRjaCBjb25maWd1cmF0aW9uCisgICB2YXJpYmxlIHRvIHRydWUgdG8gYWx3YXlzIHNlZSB0aGUgYWN0dWFsIHBhdGNoLCBub3QganVzdCB0aGUgbGlzdAorICAgb2YgcGF0aHMgYWZmZWN0ZWQgd2l0aCBmZWVsIGZvciB0aGUgZXh0ZW50IG9mIGRhbWFnZSB2aWEgZGlmZnN0YXQuCisKKyAqICJxdWlsdGltcG9ydCIgYWxsb3dzIHRvIHNwZWNpZnkgdGhlIHNlcmllcyBmaWxlIGJ5IGhvbm9yaW5nIHRoZQorICAgJFFVSUxUX1NFUklFUyBlbnZpcm9ubWVudCBhbmQgYWxzbyAtLXNlcmllcyBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisgKiBUaGUgdXNlIG9mICdnb29kL2JhZCcgaW4gImdpdCBiaXNlY3QiIG1hZGUgaXQgY29uZnVzaW5nIHRvIHVzZSB3aGVuCisgICBodW50aW5nIGZvciBhIHN0YXRlIGNoYW5nZSB0aGF0IGlzIG5vdCBhIHJlZ3Jlc3Npb24gKGUuZy4gYnVnZml4KS4KKyAgIFRoZSBjb21tYW5kIGxlYXJuZWQgJ29sZC9uZXcnIGFuZCB0aGVuIGFsbG93cyB0aGUgZW5kIHVzZXIgdG8KKyAgIHNheSBlLmcuICJiaXNlY3Qgc3RhcnQgLS10ZXJtLW9sZD1mYXN0IC0tdGVybS1uZXc9c2xvdyIgdG8gZmluZCBhCisgICBwZXJmb3JtYW5jZSByZWdyZXNzaW9uLgorCisgKiAiZ2l0IGludGVycHJldC10cmFpbGVycyIgY2FuIG5vdyBydW4gb3V0c2lkZSBvZiBhIEdpdCByZXBvc2l0b3J5LgorCisgKiAiZ2l0IHA0IiBsZWFybmVkIHRvIHJlZW5jb2RlIHRoZSBwYXRobmFtZSBpdCB1c2VzIHRvIGNvbW11bmljYXRlCisgICB3aXRoIHRoZSBwNCBkZXBvdCB3aXRoIGEgbmV3IG9wdGlvbi4KKworICogR2l2ZSBwcm9ncmVzcyBtZXRlciB0byAiZ2l0IGZpbHRlci1icmFuY2giLgorCisgKiBBbGxvdyBhIGxhdGVyICIhL2FiYy9kZWYiIHRvIG92ZXJyaWRlIGFuIGVhcmxpZXIgIi9hYmMiIHRoYXQKKyAgIGFwcGVhcnMgaW4gdGhlIHNhbWUgLmdpdGlnbm9yZSBmaWxlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGV4cHJlc3MKKyAgICJldmVyeXRoaW5nIGluIC9hYmMgZGlyZWN0b3J5IGlzIGlnbm9yZWQsIGV4Y2VwdCBmb3IgLi4uIi4KKworICogVGVhY2ggImdpdCBwNCIgdG8gc2VuZCBsYXJnZSBibG9icyBvdXRzaWRlIHRoZSByZXBvc2l0b3J5IGJ5CisgICB0YWxraW5nIHRvIEdpdCBMRlMuCisKKyAqIFByZXBhcmUgZm9yIEdpdCBvbi1kaXNrIHJlcG9zaXRvcnkgcmVwcmVzZW50YXRpb24gdG8gdW5kZXJnbworICAgYmFja3dhcmQgaW5jb21wYXRpYmxlIGNoYW5nZXMgYnkgaW50cm9kdWNpbmcgYSBuZXcgcmVwb3NpdG9yeQorICAgZm9ybWF0IHZlcnNpb24gIjEiLCB3aXRoIGFuIGV4dGVuc2lvbiBtZWNoYW5pc20uCisgICAobWVyZ2UgMDY3ZmJkNCBqay9yZXBvc2l0b3J5LWV4dGVuc2lvbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgd29ya3RyZWUiIGxlYXJuZWQgYSAibGlzdCIgc3ViY29tbWFuZC4KKworCitQZXJmb3JtYW5jZSwgSW50ZXJuYWwgSW1wbGVtZW50YXRpb24sIERldmVsb3BtZW50IFN1cHBvcnQgZXRjLgorCisgKiBUaGUgaW5mcmFzdHJ1Y3R1cmUgdG8gcmV3cml0ZSAiZ2l0IHN1Ym1vZHVsZSIgaW4gQyBpcyBiZWluZyBidWlsdAorICAgaW5jcmVtZW50YWxseS4gIExldCdzIHBvbGlzaCB0aGVzZSBlYXJseSBwYXJ0cyB3ZWxsIGVub3VnaCBhbmQgbWFrZQorICAgdGhlbSBncmFkdWF0ZSB0byAnbmV4dCcgYW5kICdtYXN0ZXInLCBzbyB0aGF0IHRoZSBtb3JlIGludm9sdmVkCisgICBmb2xsb3ctdXAgY2FuIHN0YXJ0IGNvb2tpbmcgb24gYSBzb2xpZCBncm91bmQuCisKKyAqIFNvbWUgZmVhdHVyZXMgZnJvbSAiZ2l0IHRhZyAtbCIgYW5kICJnaXQgYnJhbmNoIC1sIiBoYXZlIGJlZW4gbWFkZQorICAgYXZhaWxhYmxlIHRvICJnaXQgZm9yLWVhY2gtcmVmIiBzbyB0aGF0IGV2ZW50dWFsbHkgdGhlIHVuaWZpZWQKKyAgIGltcGxlbWVudGF0aW9uIGNhbiBiZSBzaGFyZWQgYWNyb3NzIGFsbCB0aHJlZS4gIFRoZSB2ZXJzaW9uIG1lcmdlZAorICAgdG8gdGhlICdtYXN0ZXInIGJyYW5jaCBlYXJsaWVyIGhhZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gaW4gInRhZworICAgLS1jb250YWlucyIsIHdoaWNoIGhhcyBzaW5jZSBiZWVuIGNvcnJlY3RlZC4KKworICogQmVjYXVzZSAidGVzdF93aGVuX2ZpbmlzaGVkIiBpbiBvdXIgdGVzdCBmcmFtZXdvcmsgcXVldWVzIHRoZQorICAgY2xlYW4tdXAgdGFza3MgdG8gYmUgZG9uZSBpbiBhIHNoZWxsIHZhcmlhYmxlLCBpdCBzaG91bGQgbm90IGJlCisgICB1c2VkIGluc2lkZSBhIHN1YnNoZWxsLiAgQWRkIGEgbWVjaGFuaXNtIHRvIGFsbG93ICdiYXNoJyB0byBjYXRjaAorICAgc3VjaCB1c2VzLCBhbmQgZml4IHRoZSBvbmVzIHRoYXQgd2VyZSBmb3VuZC4KKyAgIChtZXJnZSAwOTY4ZjEyIGprL3Rlc3QtbGludC1mb3JiaWQtd2hlbi1maW5pc2hlZC1pbi1zdWJzaGVsbCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBkZWJ1Z2dpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIHBrdC1saW5lIGJhc2VkIGNvbW11bmljYXRpb24gaGFzCisgICBiZWVuIGltcHJvdmVkIHRvIG1hcmsgdGhlIHNpZGUtYmFuZCBjb21tdW5pY2F0aW9uIHNwZWNpZmljYWxseS4KKyAgIChtZXJnZSBmZDg5NDMzIGprL2FzeW5jLXBrdC1saW5lIGxhdGVyIHRvIG1haW50KS4KKworICogVXBkYXRlICJnaXQgYnJhbmNoIiB0aGF0IGxpc3QgZXhpc3RpbmcgYnJhbmNoZXMsIHVzaW5nIHRoZQorICAgcmVmLWZpbHRlciBBUEkgdGhhdCBpcyBzaGFyZWQgd2l0aCAiZ2l0IHRhZyIgYW5kICJnaXQKKyAgIGZvci1lYWNoLXJlZiIuCisKKyAqIFRoZSB0ZXN0IGZvciB2YXJpb3VzIGxpbmUtZW5kaW5nIGNvbnZlcnNpb25zIGhhcyBiZWVuIGVuaGFuY2VkLgorCisgKiBBIGZldyB0ZXN0IHNjcmlwdHMgYXJvdW5kICJnaXQgcDQiIGhhdmUgYmVlbiBpbXByb3ZlZCBmb3IKKyAgIHBvcnRhYmlsaXR5LgorCisgKiBNYW55IGFsbG9jYXRpb25zIHRoYXQgaXMgbWFudWFsbHkgY291bnRlZCAoY29ycmVjdGx5KSB0aGF0IGFyZQorICAgZm9sbG93ZWQgYnkgc3RyY3B5L3NwcmludGYgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggYSBsZXNzIGVycm9yCisgICBwcm9uZSBjb25zdHJ1Y3RzIHN1Y2ggYXMgeHN0cmZtdC4KKworICogVGhlIGludGVybmFsIHN0cmlwc3BhY2UoKSBmdW5jdGlvbiBoYXMgYmVlbiBtb3ZlZCB0byB3aGVyZSBpdAorICAgbG9naWNhbGx5IGJlbG9uZ3MgdG8sIGkuZS4gc3RyYnVmIEFQSSwgYW5kIHRoZSBjb21tYW5kIGxpbmUgcGFyc2VyCisgICBvZiAiZ2l0IHN0cmlwc3BhY2UiIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdXNlIHRoZSBwYXJzZV9vcHRpb25zIEFQSS4KKyAgIChtZXJnZSBiZWQ0NDUyIHRrL3N0cmlwc3BhY2UgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGFtIiB1c2VkIHRvIHNwYXduICJnaXQgbWFpbGluZm8iIHZpYSBydW5fY29tbWFuZCgpIEFQSSBvbmNlCisgICBwZXIgZWFjaCBwYXRjaCwgYnV0IGxlYXJuZWQgdG8gbWFrZSBhIGRpcmVjdCBjYWxsIHRvIG1haWxpbmZvKCkKKyAgIGluc3RlYWQuCisKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiAiZ2l0IG1haWxpbmZvIiB3YXMgcmVmYWN0b3JlZCBzbyB0aGF0IGEKKyAgIG1haWxpbmZvKCkgZnVuY3Rpb24gY2FuIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGluc2lkZSBhIHByb2Nlc3MuCisKKworQWxzbyBjb250YWlucyB2YXJpb3VzIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhbmQgY29kZSBjbGVhbi11cHMuCisKKworRml4ZXMgc2luY2UgdjIuNgorLS0tLS0tLS0tLS0tLS0tLQorCitVbmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgdGhlIGZpeGVzIHNpbmNlIHYyLjYgaW4gdGhlIG1haW50ZW5hbmNlCit0cmFjayBhcmUgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSAoc2VlIHRoZSBtYWludGVuYW5jZSByZWxlYXNlcycKK25vdGVzIGZvciBkZXRhaWxzKS4KKworICogVmVyeSBzbWFsbCBudW1iZXIgb2Ygb3B0aW9ucyB0YWtlIGEgcGFyYW1ldGVyIHRoYXQgaXMgb3B0aW9uYWwKKyAgICh3aGljaCBpcyBub3QgYSBncmVhdCBVSSBlbGVtZW50IGFzIHRoZXkgY2FuIG9ubHkgYXBwZWFyIGF0IHRoZSBlbmQKKyAgIG9mIHRoZSBjb21tYW5kIGxpbmUpLiAgQWRkIG5vdGljZSB0byBkb2N1bWVudGF0aW9uIG9mIGVhY2ggYW5kCisgICBldmVyeSBvbmUgb2YgdGhlbS4KKyAgIChtZXJnZSAyYjU5NGJmIG1tL2tleWlkLWRvY3MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGJsYW1lIC0tZmlyc3QtcGFyZW50IHYxLjAuLnYyLjAiIHdhcyBub3QgcmVqZWN0ZWQgYnV0IGRpZCBub3QKKyAgIGxpbWl0IHRoZSBibGFtZSB0byBjb21taXRzIG9uIHRoZSBmaXJzdCBwYXJlbnQgY2hhaW4uCisgICAobWVyZ2UgOTVhNGZiMCBqay9ibGFtZS1maXJzdC1wYXJlbnQgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IHN1YnRyZWUiIChpbiBjb250cmliLykgbm93IGNhbiB0YWtlIHdoaXRlc3BhY2VzIGluIHRoZQorICAgcGF0aG5hbWVzLCBub3Qgb25seSBpbiB0aGUgaW4tdHJlZSBwYXRobmFtZSBidXQgdGhlIG5hbWUgb2YgdGhlCisgICBkaXJlY3RvcnkgdGhhdCB0aGUgcmVwb3NpdG9yeSBpcyBpbi4gIChtZXJnZSA1YjZhYjM4CisgICBhcy9zdWJ0cmVlLXdpdGgtc3BhY2VzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHNzaCB0cmFuc3BvcnQsIGp1c3QgbGlrZSBhbnkgb3RoZXIgdHJhbnNwb3J0IG92ZXIgdGhlIG5ldHdvcmssCisgICBkaWQgbm90IGNsZWFyIEdJVF8qIGVudmlyb25tZW50IHZhcmlhYmxlcywgYnV0IGl0IGlzIHBvc3NpYmxlIHRvCisgICB1c2UgU2VuZEVudiBhbmQgQWNjZXB0RW52IHRvIGxlYWsgdGhlbSB0byB0aGUgcmVtb3RlIGludm9jYXRpb24gb2YKKyAgIEdpdCwgd2hpY2ggaXMgbm90IGEgZ29vZCBpZGVhIGF0IGFsbC4gIEV4cGxpY2l0bHkgY2xlYXIgdGhlbSBqdXN0CisgICBsaWtlIHdlIGRvIGZvciB0aGUgbG9jYWwgdHJhbnNwb3J0LgorICAgKG1lcmdlIGE0OGI0MDkgamsvY29ubmVjdC1jbGVhci1lbnYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBDb3JyZWN0ICJnaXQgcDQgLS1kZXRlY3QtbGFiZWxzIiBzbyB0aGF0IGl0IGRvZXMgbm90IGZhaWwgdG8gY3JlYXRlCisgICBhIHRhZyB0aGF0IHBvaW50cyBhdCBhIGNvbW1pdCB0aGF0IGlzIGFsc28gYmVpbmcgaW1wb3J0ZWQuCisgICAobWVyZ2UgYjQzNzAyYSBsZC9wNC1pbXBvcnQtbGFiZWxzIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIE1ha2VmaWxlIGFsd2F5cyBydW5zIHRoZSBsaWJyYXJ5IGFyY2hpdmVyIHdpdGggaGFyZGNvZGVkICJjcnMiCisgICBvcHRpb25zLCB3aGljaCB3YXMgaW5jb252ZW5pZW50IGZvciBleG90aWMgcGxhdGZvcm1zIG9uIHdoaWNoCisgICBwZW9wbGUgd2FudCB0byB1c2UgcHJvZ3JhbXMgd2l0aCB0b3RhbGx5IGRpZmZlcmVudCBzZXQgb2YgY29tbWFuZAorICAgbGluZSBvcHRpb25zLgorICAgKG1lcmdlIGFjMTc5YjQgancvbWFrZS1hcmZsYWdzLWN1c3RvbWl6YWJsZSBsYXRlciB0byBtYWludCkuCisKKyAqIEN1c3RvbWl6YXRpb24gdG8gY2hhbmdlIHRoZSBiZWhhdmlvdXIgd2l0aCAibWFrZSAtdyIgYW5kICJtYWtlIC1zIgorICAgaW4gb3VyIE1ha2VmaWxlIHdhcyBicm9rZW4gd2hlbiB0aGV5IHdlcmUgdXNlZCB0b2dldGhlci4KKyAgIChtZXJnZSBlZjQ5ZTA1IGprL21ha2UtZmluZHN0cmluZy1tYWtlZmxhZ3MtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogQWxsb2NhdGlvbiByZWxhdGVkIGZ1bmN0aW9ucyBhbmQgc3RkaW8gYXJlIHVuc2FmZSB0aGluZ3MgdG8gY2FsbAorICAgaW5zaWRlIGEgc2lnbmFsIGhhbmRsZXIsIGFuZCBpbmRlZWQga2lsbGluZyB0aGUgcGFnZXIgY2FuIGNhdXNlCisgICBnbGliYyB0byBkZWFkbG9jayB3YWl0aW5nIG9uIGFsbG9jYXRpb24gbXV0ZXggYXMgb3VyIHNpZ25hbCBoYW5kbGVyCisgICB0cmllcyB0byBmcmVlKCkgc29tZSBkYXRhIHN0cnVjdHVyZXMgaW4gd2FpdF9mb3JfcGFnZXIoKS4gIFJlZHVjZQorICAgdGhlc2UgdW5zYWZlIGNhbGxzLgorICAgKG1lcmdlIDUwN2Q3ODAgdGkvZ2xpYmMtc3RkaW8tbXV0ZXgtZnJvbS1zaWduYWwtaGFuZGxlciBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSB3YXkgaG93IC0tcmVmLy0tbm90ZXMgdG8gc3BlY2lmeSB0aGUgbm90ZXMgdHJlZSByZWZlcmVuY2UgYXJlCisgICBEV0lNbWVkIHdhcyBub3QgY2xlYXJseSBkb2N1bWVudGVkLgorICAgKG1lcmdlIGUxNGM5MmUgamsvbm90ZXMtZHdpbS1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGdjIiB1c2VkIHRvIGJhcmYgd2hlbiBhIHN5bWJvbGljIHJlZiBoYXMgZ29uZSBkYW5nbGluZworICAgKGUuZy4gdGhlIGJyYW5jaCB0aGF0IHVzZWQgdG8gYmUgeW91ciB1cHN0cmVhbSdzIGRlZmF1bHQgd2hlbiB5b3UKKyAgIGNsb25lZCBmcm9tIGl0IGlzIG5vdyBnb25lLCBhbmQgeW91IGRpZCAiZmV0Y2ggLS1wcnVuZSIpLgorICAgKG1lcmdlIDE0ODg2YjQganMvZ2Mtd2l0aC1zdGFsZS1zeW1yZWYgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiAiZ2l0IGNsb25lIC0tZGlzc29jaWF0ZSIgcnVucyBhIGJpZyAiZ2l0IHJlcGFjayIgcHJvY2VzcyBhdCB0aGUKKyAgIGVuZCwgYW5kIGl0IGhlbHBzIHRvIGNsb3NlIGZpbGUgZGVzY3JpcHRvcnMgdGhhdCBhcmUgb3BlbiBvbiB0aGUKKyAgIHBhY2tzIGFuZCB0aGVpciBpZHggZmlsZXMgYmVmb3JlIGRvaW5nIHNvIG9uIGZpbGVzeXN0ZW1zIHRoYXQKKyAgIGNhbm5vdCByZW1vdmUgYSBmaWxlIHRoYXQgaXMgc3RpbGwgb3Blbi4KKyAgIChtZXJnZSA3ODZiMTUwIGpzL2Nsb25lLWRpc3NvY2lhdGUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBEZXNjcmlwdGlvbiBvZiB0aGUgImxvZy5mb2xsb3ciIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaW4gImdpdCBsb2ciCisgICBkb2N1bWVudGF0aW9uIGlzIG5vdyBhbHNvIGNvcGllZCB0byAiZ2l0IGNvbmZpZyIgZG9jdW1lbnRhdGlvbi4KKyAgIChtZXJnZSBmZDhkMDdlIGR0L2xvZy1mb2xsb3ctY29uZmlnIGxhdGVyIHRvIG1haW50KS4KKworICogImdpdCByZWJhc2UgLWkiIGhhZCBhIG1pbm9yIHJlZ3Jlc3Npb24gcmVjZW50bHksIHdoaWNoIHN0b3BwZWQKKyAgIGNvbnNpZGVyaW5nIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoIGFuIGluZGVudGVkICcjJyBpbiBpdHMgaW5zbgorICAgc2hlZXQgbm90IGEgY29tbWVudCwgd2hpY2ggaXMgbm93IGZpeGVkLgorICAgKG1lcmdlIDFkYjE2OGUgZ3IvcmViYXNlLWktZHJvcC13YXJuIGxhdGVyIHRvIG1haW50KS4KKworICogQWZ0ZXIgImdpdCBjaGVja291dCAtLWRldGFjaCIsICJnaXQgc3RhdHVzIiByZXBvcnRlZCBhIGZhaXJseQorICAgdXNlbGVzcyAiSEVBRCBkZXRhY2hlZCBhdCBIRUFEIiwgaW5zdGVhZCBvZiBzYXlpbmcgYXQgd2hpY2ggZXhhY3QKKyAgIGNvbW1pdC4KKyAgIChtZXJnZSAwZWI4NTQ4IG1tL2RldGFjaC1hdC1IRUFELXJlZmxvZyBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gImdpdCBzZW5kLWVtYWlsIiB3YW50ZWQgdG8gdGFsayBvdmVyIE5ldDo6U01UUDo6U1NMLAorICAgTmV0OjpDbWQ6OmRhdGFzZW5kKCkgZGlkIG5vdCBsaWtlIHRvIGJlIGZlZCB0b28gbWFueSBieXRlcyBhdCB0aGUKKyAgIHNhbWUgdGltZSBhbmQgZmFpbGVkIHRvIHNlbmQgbWVzc2FnZXMuICBTZW5kIHRoZSBwYXlsb2FkIG9uZSBsaW5lCisgICBhdCBhIHRpbWUgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0uCisgICAobWVyZ2UgZjYwYzQ4MyBzYS9zZW5kLWVtYWlsLXNtdHAtYmF0Y2gtZGF0YS1saW1pdCBsYXRlciB0byBtYWludCkuCisKKyAqIFdoZW4gImdpdCBhbSIgd2FzIHJld3JpdHRlbiBhcyBhIGJ1aWx0LWluLCBpdCBzdG9wcGVkIHBheWluZworICAgYXR0ZW50aW9uIHRvIHVzZXIuc2lnbmluZ2tleSwgd2hpY2ggd2FzIGZpeGVkLgorICAgKG1lcmdlIDQzNGM2NGQgcHQvYW0tYnVpbHRpbiBsYXRlciB0byBtYWludCkuCisKKyAqIEl0IHdhcyBub3QgcG9zc2libGUgdG8gdXNlIGEgcmVwb3NpdG9yeS1sb29rYWxpa2UgY3JlYXRlZCBieSAiZ2l0CisgICB3b3JrdHJlZSBhZGQiIGFzIGEgbG9jYWwgc291cmNlIG9mICJnaXQgY2xvbmUiLgorICAgKG1lcmdlIGQ3OGRiODQgbmQvY2xvbmUtbGlua2VkLWNoZWNrb3V0IGxhdGVyIHRvIG1haW50KS4KKworICogT24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGVzeXN0ZW1zLCBzZXR0aW5nIEdJVF9XT1JLX1RSRUUgdmFyaWFibGUKKyAgIHVzaW5nIGEgcmFuZG9tIGNhc2VzIHRoYXQgZG9lcyBub3QgYWdyZWUgd2l0aCB3aGF0IHRoZSBmaWxlc3lzdGVtCisgICB0aGlua3MgY29uZnVzZWQgR2l0IHRoYXQgaXQgd2Fzbid0IGluc2lkZSB0aGUgd29ya2luZyB0cmVlLgorICAgKG1lcmdlIDYzZWM1ZTEganMvaWNhc2Utd3QtZGV0ZWN0aW9uIGxhdGVyIHRvIG1haW50KS4KKworICogUGVyZm9ybWFuY2UtbWVhc3VyZW1lbnQgdGVzdHMgZGlkIG5vdCB3b3JrIHdpdGhvdXQgYW4gaW5zdGFsbGVkIEdpdC4KKyAgIChtZXJnZSAzMWNkMTI4IHNiL3BlcmYtd2l0aG91dC1pbnN0YWxsZWQtZ2l0IGxhdGVyIHRvIG1haW50KS4KKworICogQSB0ZXN0IHNjcmlwdCBmb3IgdGhlIEhUVFAgc2VydmljZSBoYWQgYSB0aW1pbmcgZGVwZW5kZW50IGJ1ZywKKyAgIHdoaWNoIHdhcyBmaXhlZC4KKyAgIChtZXJnZSAzNjJkOGI2IHNiL2h0dHAtZmxha3ktdGVzdC1maXggbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGVyZSB3ZXJlIHNvbWUgY2xhc3NlcyBvZiBlcnJvcnMgdGhhdCAiZ2l0IGZzY2siIGRpYWdub3NlZCB0byBpdHMKKyAgIHN0YW5kYXJkIGVycm9yIHRoYXQgZGlkIG5vdCBjYXVzZSBpdCB0byBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzLgorICAgKG1lcmdlIDEyMmY3NmYgamMvZnNjay1kcm9wcGVkLWVycm9ycyBsYXRlciB0byBtYWludCkuCisKKyAqIFdvcmsgYXJvdW5kICJnaXQgcDQiIGZhaWxpbmcgd2hlbiB0aGUgUDQgZGVwb3QgcmVjb3JkcyB0aGUgY29udGVudHMKKyAgIGluIFVURi0xNiB3aXRob3V0IFVURi0xNiBCT00uCisgICAobWVyZ2UgMWY1ZjM5MCBscy9wNC10cmFuc2xhdGlvbi1mYWlsdXJlIGxhdGVyIHRvIG1haW50KS4KKworICogV2hlbiAiZ2l0IGdjIC0tYXV0byIgaXMgYmFja2dyb3VuZGVkLCBpdHMgZGlhZ25vc2lzIG1lc3NhZ2UgaXMKKyAgIGxvc3QuICBTYXZlIGl0IHRvIGEgZmlsZSBpbiAkR0lUX0RJUiBhbmQgc2hvdyBpdCBuZXh0IHRpbWUgdGhlICJnYworICAgLS1hdXRvIiBpcyBydW4uCisgICAobWVyZ2UgMzI5ZTZlOCBuZC9nYy1hdXRvLWJhY2tncm91bmQtZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHN1Ym1vZHVsZSBjb2RlIGhhcyBiZWVuIHRhdWdodCB0byB3b3JrIGJldHRlciB3aXRoIHNlcGFyYXRlCisgICB3b3JrIHRyZWVzIGNyZWF0ZWQgdmlhICJnaXQgd29ya3RyZWUgYWRkIi4KKyAgIChtZXJnZSAxMWY5ZGQ3IG1rL3N1Ym1vZHVsZS1naXRkaXItcGF0aCBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgZ2MiIGlzIHNhZmUgdG8gcnVuIGFueXRpbWUgb25seSBiZWNhdXNlIGl0IGhhcyB0aGUgYnVpbHQtaW4KKyAgIGdyYWNlIHBlcmlvZCB0byBwcm90ZWN0IHlvdW5nIG9iamVjdHMuICBJbiBvcmRlciB0byBydW4gd2l0aCBubworICAgZ3JhY2UgcGVyaW9kLCB0aGUgdXNlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXBvc2l0b3J5IGlzCisgICBxdWllc2NlbnQuCisgICAobWVyZ2UgZmFlMWE5MCBqYy9kb2MtZ2MtcHJ1bmUtbm93IGxhdGVyIHRvIG1haW50KS4KKworICogQSByZWNlbnQgImZpbHRlci1icmFuY2ggLS1tc2ctZmlsdGVyIiBicm9rZSBza2lwcGluZyBvZiB0aGUgY29tbWl0CisgICBvYmplY3QgaGVhZGVyLCB3aGljaCBpcyBmaXhlZC4KKyAgIChtZXJnZSBhNWE0YjNmIGprL2ZpbHRlci1icmFuY2gtdXNlLW9mLXNlZC1vbi1pbmNvbXBsZXRlLWxpbmUgbGF0ZXIgdG8gbWFpbnQpLgorCisgKiBUaGUgbm9ybWFsaXplX2NlaWxpbmdfZW50cnkoKSBmdW5jdGlvbiBkb2VzIG5vdCBtdWNrIHdpdGggdGhlIGVuZAorICAgb2YgdGhlIHBhdGggaXQgYWNjZXB0cywgYW5kIHRoZSByZWFsIHdvcmxkIGNhbGxlcnMgZG8gcmVseSBvbiB0aGF0LAorICAgYnV0IGEgdGVzdCBpbnNpc3RlZCB0aGF0IHRoZSBmdW5jdGlvbiBkcm9wcyBhIHRyYWlsaW5nIHNsYXNoLgorICAgKG1lcmdlIGIyYTcxMjMgcmQvdGVzdC1wYXRoLXV0aWxzIGxhdGVyIHRvIG1haW50KS4KKworICogQSB0ZXN0IGZvciBpbnRlcmFjdGlvbiBiZXR3ZWVuIHVudHJhY2tlZCBjYWNoZSBhbmQgc3BhcnNlIGNoZWNrb3V0CisgICBhZGRlZCBpbiBHaXQgMi41IGRheXMgd2VyZSBmbGFreS4KKyAgIChtZXJnZSA5YjY4MGZiIGR0L3Q3MDYzLWZpeC1mbGFreS10ZXN0IGxhdGVyIHRvIG1haW50KS4KKworICogQSBjb3VwbGUgb2YgY29tbWFuZHMgc3RpbGwgc2hvd2VkICJbb3B0aW9uc10iIGluIHRoZWlyIHVzYWdlIHN0cmluZworICAgdG8gbm90ZSB3aGVyZSBvcHRpb25zIHNob3VsZCBjb21lIG9uIHRoZWlyIGNvbW1hbmQgbGluZSwgYnV0IHdlCisgICBzcGVsbCB0aGF0ICJbPG9wdGlvbnM+XSIgaW4gbW9zdCBwbGFjZXMgdGhlc2UgZGF5cy4KKyAgIChtZXJnZSBkOTZhMDMxIHJ0L3BsYWNlaG9sZGVyLWluLXVzYWdlIGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIHN5bm9wc2lzIHRleHQgYW5kIHRoZSB1c2FnZSBzdHJpbmcgb2Ygc3ViY29tbWFuZHMgdGhhdCByZWFkCisgICBsaXN0IG9mIHRoaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCBhcmUgb2Z0ZW4gc2hvd24gYXMgaWYgdGhleQorICAgb25seSB0YWtlIGlucHV0IGZyb20gYSBmaWxlIG9uIGEgZmlsZXN5c3RlbSwgd2hpY2ggd2FzIG1pc2xlYWRpbmcuCisgICAobWVyZ2UgMzNlOGZjOCBqYy91c2FnZS1zdGRpbiBsYXRlciB0byBtYWludCkuCisKKyAqICJnaXQgYW0gLTMiIGhhZCBhIHNtYWxsIHJlZ3Jlc3Npb24gd2hlcmUgaXQgaXMgYWJvcnRlZCBpbiBpdHMgZXJyb3IKKyAgIGhhbmRsaW5nIGNvZGVwYXRoIHdoZW4gdW5kZXJseWluZyBtZXJnZS1yZWN1cnNpdmUgZmFpbGVkIGluIGNlcnRhaW4KKyAgIHdheXMsIGFzIGl0IGFzc3VtZWQgdGhhdCB0aGUgaW50ZXJuYWwgY2FsbCB0byBtZXJnZS1yZWN1cnNpdmUgd2lsbAorICAgbmV2ZXIgZGllLCB3aGljaCBpcyBub3QgdGhlIGNhc2UgKHlldCkuCisgICAobWVyZ2UgYzYzZDRiMiBqYy9hbS0zLWZhbGxiYWNrLXJlZ3Jlc3Npb24tZml4IGxhdGVyIHRvIG1haW50KS4KKworICogVGhlIGxpbmthZ2Ugb3JkZXIgb2YgbGlicmFyaWVzIHdhcyB3cm9uZyBpbiBwbGFjZXMgYXJvdW5kIGxpYmN1cmwuCisgICAobWVyZ2UgN2U5MWU4ZCBycC9saW5rLWN1cmwtYmVmb3JlLXNzbCBsYXRlciB0byBtYWludCkuCisKKyAqIFRoZSBuYW1lLWhhc2ggc3Vic3lzdGVtIHRoYXQgaXMgdXNlZCB0byBjb3BlIHdpdGggY2FzZSBpbnNlbnNpdGl2ZQorICAgZmlsZXN5c3RlbXMga2VlcHMgdHJhY2sgb2YgZGlyZWN0b3JpZXMgYW5kIHRoZWlyIG9uLWZpbGVzeXN0ZW0KKyAgIGNhc2VzIGZvciBhbGwgdGhlIHBhdGhzIGluIHRoZSBpbmRleCBieSBob2xkaW5nIGEgcG9pbnRlciB0byBhCisgICByYW5kb21seSBjaG9zZW4gY2FjaGUgZW50cnkgdGhhdCBpcyBpbnNpZGUgdGhlIGRpcmVjdG9yeSAoZm9yIGl0cworICAgY2UtPmNlX25hbWUgY29tcG9uZW50KS4gIFRoaXMgcG9pbnRlciB3YXMgbm90IHVwZGF0ZWQgZXZlbiB3aGVuIHRoZQorICAgY2FjaGUgZW50cnkgd2FzIHJlbW92ZWQgZnJvbSB0aGUgaW5kZXgsIGxlYWRpbmcgdG8gdXNlIGFmdGVyIGZyZWUuCisgICBUaGlzIHdhcyBmaXhlZCBieSByZWNvcmRpbmcgdGhlIHBhdGggZm9yIGVhY2ggZGlyZWN0b3J5IGluc3RlYWQgb2YKKyAgIGJvcnJvd2luZyBjYWNoZSBlbnRyaWVzIGFuZCByZXN0cnVjdHVyaW5nIHRoZSBBUEkgc29tZXdoYXQuCisgICAobWVyZ2UgNDEyODRlYiBkdC9uYW1lLWhhc2gtZGlyLWVudHJ5LWZpeCBsYXRlciB0byBtYWludCkuCisKKyAqIENvZGUgY2xlYW4tdXAsIG1pbm9yIGZpeGVzIGV0Yy4KKyAgIChtZXJnZSAxNWVkMDdkIGpjL3JlcmVyZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgZTdhNzQwMSBwdC9wdWxsLWJ1aWx0aW4gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDI5YmM0ODAgbmQvbHMtcmVtb3RlLWRvZXMtbm90LWhhdmUtdS1vcHRpb24gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJlNTEwZTAgamsvYXNjaWlkb2N0b3Itc2VjdGlvbi1oZWFkaW5nLW1hcmt1cC1maXggbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDgzZTZiZGEgdGsvdHlwb2ZpeC1jb25uZWN0LXVua25vd24tcHJvdG8tZXJyb3IgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGE0M2ViNjcgdGsvZG9jLWludGVycHJldC10cmFpbGVycy1ncmFtbW8gbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGJhMTI4ZTIgZXMvd29ya3RyZWUtYWRkLWNsZWFudXAgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDQ0Y2Q5MWUgY2MvcXVvdGUtY29tbWVudHMgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDE0Nzg3NWYgc2Ivc3VibW9kdWxlLWNvbmZpZy1wYXJzZSBsYXRlciB0byBtYWludCkuCisgICAobWVyZ2UgYWU5ZjI3NCBlcy93b3JrdHJlZS1hZGQgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIDNiMTlkYmEgamMvZW0tZGFzaC1pbi1kb2MgbGF0ZXIgdG8gbWFpbnQpLgorICAgKG1lcmdlIGYzZjM4YzcgamMvZXZlcnlkYXktbWFya3VwIGxhdGVyIHRvIG1haW50KS4KKyAgIChtZXJnZSA3N2Q1ZjcxIHhmL3VzZXItbWFudWFsLW1hcmt1cCBsYXRlciB0byBtYWludCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGZjNGNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwpAQCAtMCwwICsxLDQ2NCBAQAorSGVyZSBhcmUgc29tZSBndWlkZWxpbmVzIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8gY29udHJpYnV0ZSB0aGVpciBjb2RlCit0byB0aGlzIHNvZnR3YXJlLgorCisoMCkgRGVjaWRlIHdoYXQgdG8gYmFzZSB5b3VyIHdvcmsgb24uCisKK0luIGdlbmVyYWwsIGFsd2F5cyBiYXNlIHlvdXIgd29yayBvbiB0aGUgb2xkZXN0IGJyYW5jaCB0aGF0IHlvdXIKK2NoYW5nZSBpcyByZWxldmFudCB0by4KKworIC0gQSBidWdmaXggc2hvdWxkIGJlIGJhc2VkIG9uICdtYWludCcgaW4gZ2VuZXJhbC4gSWYgdGhlIGJ1ZyBpcyBub3QKKyAgIHByZXNlbnQgaW4gJ21haW50JywgYmFzZSBpdCBvbiAnbWFzdGVyJy4gRm9yIGEgYnVnIHRoYXQncyBub3QgeWV0CisgICBpbiAnbWFzdGVyJywgZmluZCB0aGUgdG9waWMgdGhhdCBpbnRyb2R1Y2VzIHRoZSByZWdyZXNzaW9uLCBhbmQKKyAgIGJhc2UgeW91ciB3b3JrIG9uIHRoZSB0aXAgb2YgdGhlIHRvcGljLgorCisgLSBBIG5ldyBmZWF0dXJlIHNob3VsZCBiZSBiYXNlZCBvbiAnbWFzdGVyJyBpbiBnZW5lcmFsLiBJZiB0aGUgbmV3CisgICBmZWF0dXJlIGRlcGVuZHMgb24gYSB0b3BpYyB0aGF0IGlzIGluICdwdScsIGJ1dCBub3QgaW4gJ21hc3RlcicsCisgICBiYXNlIHlvdXIgd29yayBvbiB0aGUgdGlwIG9mIHRoYXQgdG9waWMuCisKKyAtIENvcnJlY3Rpb25zIGFuZCBlbmhhbmNlbWVudHMgdG8gYSB0b3BpYyBub3QgeWV0IGluICdtYXN0ZXInIHNob3VsZAorICAgYmUgYmFzZWQgb24gdGhlIHRpcCBvZiB0aGF0IHRvcGljLiBJZiB0aGUgdG9waWMgaGFzIG5vdCBiZWVuIG1lcmdlZAorICAgdG8gJ25leHQnLCBpdCdzIGFscmlnaHQgdG8gYWRkIGEgbm90ZSB0byBzcXVhc2ggbWlub3IgY29ycmVjdGlvbnMKKyAgIGludG8gdGhlIHNlcmllcy4KKworIC0gSW4gdGhlIGV4Y2VwdGlvbmFsIGNhc2UgdGhhdCBhIG5ldyBmZWF0dXJlIGRlcGVuZHMgb24gc2V2ZXJhbCB0b3BpY3MKKyAgIG5vdCBpbiAnbWFzdGVyJywgc3RhcnQgd29ya2luZyBvbiAnbmV4dCcgb3IgJ3B1JyBwcml2YXRlbHkgYW5kIHNlbmQKKyAgIG91dCBwYXRjaGVzIGZvciBkaXNjdXNzaW9uLiBCZWZvcmUgdGhlIGZpbmFsIG1lcmdlLCB5b3UgbWF5IGhhdmUgdG8KKyAgIHdhaXQgdW50aWwgc29tZSBvZiB0aGUgZGVwZW5kZW50IHRvcGljcyBncmFkdWF0ZSB0byAnbWFzdGVyJywgYW5kCisgICByZWJhc2UgeW91ciB3b3JrLgorCisgLSBTb21lIHBhcnRzIG9mIHRoZSBzeXN0ZW0gaGF2ZSBkZWRpY2F0ZWQgbWFpbnRhaW5lcnMgd2l0aCB0aGVpciBvd24KKyAgIHJlcG9zaXRvcmllcyAoc2VlIHRoZSBzZWN0aW9uICJTdWJzeXN0ZW1zIiBiZWxvdykuICBDaGFuZ2VzIHRvCisgICB0aGVzZSBwYXJ0cyBzaG91bGQgYmUgYmFzZWQgb24gdGhlaXIgdHJlZXMuCisKK1RvIGZpbmQgdGhlIHRpcCBvZiBhIHRvcGljIGJyYW5jaCwgcnVuICJnaXQgbG9nIC0tZmlyc3QtcGFyZW50CittYXN0ZXIuLnB1IiBhbmQgbG9vayBmb3IgdGhlIG1lcmdlIGNvbW1pdC4gVGhlIHNlY29uZCBwYXJlbnQgb2YgdGhpcworY29tbWl0IGlzIHRoZSB0aXAgb2YgdGhlIHRvcGljIGJyYW5jaC4KKworKDEpIE1ha2Ugc2VwYXJhdGUgY29tbWl0cyBmb3IgbG9naWNhbGx5IHNlcGFyYXRlIGNoYW5nZXMuCisKK1VubGVzcyB5b3VyIHBhdGNoIGlzIHJlYWxseSB0cml2aWFsLCB5b3Ugc2hvdWxkIG5vdCBiZSBzZW5kaW5nCitvdXQgYSBwYXRjaCB0aGF0IHdhcyBnZW5lcmF0ZWQgYmV0d2VlbiB5b3VyIHdvcmtpbmcgdHJlZSBhbmQKK3lvdXIgY29tbWl0IGhlYWQuICBJbnN0ZWFkLCBhbHdheXMgbWFrZSBhIGNvbW1pdCB3aXRoIGNvbXBsZXRlCitjb21taXQgbWVzc2FnZSBhbmQgZ2VuZXJhdGUgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIHlvdXIKK3JlcG9zaXRvcnkuICBJdCBpcyBhIGdvb2QgZGlzY2lwbGluZS4KKworR2l2ZSBhbiBleHBsYW5hdGlvbiBmb3IgdGhlIGNoYW5nZShzKSB0aGF0IGlzIGRldGFpbGVkIGVub3VnaCBzbwordGhhdCBwZW9wbGUgY2FuIGp1ZGdlIGlmIGl0IGlzIGdvb2QgdGhpbmcgdG8gZG8sIHdpdGhvdXQgcmVhZGluZwordGhlIGFjdHVhbCBwYXRjaCB0ZXh0IHRvIGRldGVybWluZSBob3cgd2VsbCB0aGUgY29kZSBkb2VzIHdoYXQKK3RoZSBleHBsYW5hdGlvbiBwcm9taXNlcyB0byBkby4KKworSWYgeW91ciBkZXNjcmlwdGlvbiBzdGFydHMgdG8gZ2V0IHRvbyBsb25nLCB0aGF0J3MgYSBzaWduIHRoYXQgeW91Citwcm9iYWJseSBuZWVkIHRvIHNwbGl0IHVwIHlvdXIgY29tbWl0IHRvIGZpbmVyIGdyYWluZWQgcGllY2VzLgorVGhhdCBiZWluZyBzYWlkLCBwYXRjaGVzIHdoaWNoIHBsYWlubHkgZGVzY3JpYmUgdGhlIHRoaW5ncyB0aGF0CitoZWxwIHJldmlld2VycyBjaGVjayB0aGUgcGF0Y2gsIGFuZCBmdXR1cmUgbWFpbnRhaW5lcnMgdW5kZXJzdGFuZAordGhlIGNvZGUsIGFyZSB0aGUgbW9zdCBiZWF1dGlmdWwgcGF0Y2hlcy4gIERlc2NyaXB0aW9ucyB0aGF0IHN1bW1hcmlzZQordGhlIHBvaW50IGluIHRoZSBzdWJqZWN0IHdlbGwsIGFuZCBkZXNjcmliZSB0aGUgbW90aXZhdGlvbiBmb3IgdGhlCitjaGFuZ2UsIHRoZSBhcHByb2FjaCB0YWtlbiBieSB0aGUgY2hhbmdlLCBhbmQgaWYgcmVsZXZhbnQgaG93IHRoaXMKK2RpZmZlcnMgc3Vic3RhbnRpYWxseSBmcm9tIHRoZSBwcmlvciB2ZXJzaW9uLCBhcmUgYWxsIGdvb2QgdGhpbmdzCit0byBoYXZlLgorCitNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0ZXN0cyBmb3IgdGhlIGJ1ZyB5b3UgYXJlIGZpeGluZy4gIFNlZQordC9SRUFETUUgZm9yIGd1aWRhbmNlLgorCitXaGVuIGFkZGluZyBhIG5ldyBmZWF0dXJlLCBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBuZXcgdGVzdHMgdG8gc2hvdwordGhlIGZlYXR1cmUgdHJpZ2dlcnMgdGhlIG5ldyBiZWhhdmlvdXIgd2hlbiBpdCBzaG91bGQsIGFuZCB0byBzaG93IHRoZQorZmVhdHVyZSBkb2VzIG5vdCB0cmlnZ2VyIHdoZW4gaXQgc2hvdWxkbid0LiAgQWxzbyBtYWtlIHN1cmUgdGhhdCB0aGUKK3Rlc3Qgc3VpdGUgcGFzc2VzIGFmdGVyIHlvdXIgY29tbWl0LiAgRG8gbm90IGZvcmdldCB0byB1cGRhdGUgdGhlCitkb2N1bWVudGF0aW9uIHRvIGRlc2NyaWJlIHRoZSB1cGRhdGVkIGJlaGF2aW91ci4KKworU3BlYWtpbmcgb2YgdGhlIGRvY3VtZW50YXRpb24sIGl0IGlzIGN1cnJlbnRseSBhIGxpYmVyYWwgbWl4dHVyZSBvZiBVUworYW5kIFVLIEVuZ2xpc2ggbm9ybXMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFyLCB3aGljaCBpcyBzb21ld2hhdAordW5mb3J0dW5hdGUuICBBIGh1Z2UgcGF0Y2ggdGhhdCB0b3VjaGVzIHRoZSBmaWxlcyBhbGwgb3ZlciB0aGUgcGxhY2UKK29ubHkgdG8gY29ycmVjdCB0aGUgaW5jb25zaXN0ZW5jeSBpcyBub3Qgd2VsY29tZSwgdGhvdWdoLiAgUG90ZW50aWFsCitjbGFzaGVzIHdpdGggb3RoZXIgY2hhbmdlcyB0aGF0IGNhbiByZXN1bHQgZnJvbSBzdWNoIGEgcGF0Y2ggYXJlIG5vdAord29ydGggaXQuICBXZSBwcmVmZXIgdG8gZ3JhZHVhbGx5IHJlY29uY2lsZSB0aGUgaW5jb25zaXN0ZW5jaWVzIGluCitmYXZvciBvZiBVUyBFbmdsaXNoLCB3aXRoIHNtYWxsIGFuZCBlYXNpbHkgZGlnZXN0aWJsZSBwYXRjaGVzLCBhcyBhCitzaWRlIGVmZmVjdCBvZiBkb2luZyBzb21lIG90aGVyIHJlYWwgd29yayBpbiB0aGUgdmljaW5pdHkgKGUuZy4KK3Jld3JpdGluZyBhIHBhcmFncmFwaCBmb3IgY2xhcml0eSwgd2hpbGUgdHVybmluZyBlbl9VSyBzcGVsbGluZyB0bworZW5fVVMpLiAgT2J2aW91cyB0eXBvZ3JhcGhpY2FsIGZpeGVzIGFyZSBtdWNoIG1vcmUgd2VsY29tZWQgKCJ0ZWggLT4KKyJ0aGUiKSwgcHJlZmVyYWJseSBzdWJtaXR0ZWQgYXMgaW5kZXBlbmRlbnQgcGF0Y2hlcyBzZXBhcmF0ZSBmcm9tCitvdGhlciBkb2N1bWVudGF0aW9uIGNoYW5nZXMuCisKK09oLCBhbm90aGVyIHRoaW5nLiAgV2UgYXJlIHBpY2t5IGFib3V0IHdoaXRlc3BhY2VzLiAgTWFrZSBzdXJlIHlvdXIKK2NoYW5nZXMgZG8gbm90IHRyaWdnZXIgZXJyb3JzIHdpdGggdGhlIHNhbXBsZSBwcmUtY29tbWl0IGhvb2sgc2hpcHBlZAoraW4gdGVtcGxhdGVzL2hvb2tzLS1wcmUtY29tbWl0LiAgVG8gaGVscCBlbnN1cmUgdGhpcyBkb2VzIG5vdCBoYXBwZW4sCitydW4gZ2l0IGRpZmYgLS1jaGVjayBvbiB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjb21taXQuCisKKworKDIpIERlc2NyaWJlIHlvdXIgY2hhbmdlcyB3ZWxsLgorCitUaGUgZmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGJlIGEgc2hvcnQgZGVzY3JpcHRpb24gKDUwCitjaGFyYWN0ZXJzIGlzIHRoZSBzb2Z0IGxpbWl0LCBzZWUgRElTQ1VTU0lPTiBpbiBnaXQtY29tbWl0KDEpKSwgYW5kCitzaG91bGQgc2tpcCB0aGUgZnVsbCBzdG9wLiAgSXQgaXMgYWxzbyBjb252ZW50aW9uYWwgaW4gbW9zdCBjYXNlcyB0bworcHJlZml4IHRoZSBmaXJzdCBsaW5lIHdpdGggImFyZWE6ICIgd2hlcmUgdGhlIGFyZWEgaXMgYSBmaWxlbmFtZSBvcgoraWRlbnRpZmllciBmb3IgdGhlIGdlbmVyYWwgYXJlYSBvZiB0aGUgY29kZSBiZWluZyBtb2RpZmllZCwgZS5nLgorCisgIC4gYXJjaGl2ZTogdXN0YXIgaGVhZGVyIGNoZWNrc3VtIGlzIGNvbXB1dGVkIHVuc2lnbmVkCisgIC4gZ2l0LWNoZXJyeS1waWNrLnR4dDogY2xhcmlmeSB0aGUgdXNlIG9mIHJldmlzaW9uIHJhbmdlIG5vdGF0aW9uCisKK0lmIGluIGRvdWJ0IHdoaWNoIGlkZW50aWZpZXIgdG8gdXNlLCBydW4gImdpdCBsb2cgLS1uby1tZXJnZXMiIG9uIHRoZQorZmlsZXMgeW91IGFyZSBtb2RpZnlpbmcgdG8gc2VlIHRoZSBjdXJyZW50IGNvbnZlbnRpb25zLgorCitUaGUgYm9keSBzaG91bGQgcHJvdmlkZSBhIG1lYW5pbmdmdWwgY29tbWl0IG1lc3NhZ2UsIHdoaWNoOgorCisgIC4gZXhwbGFpbnMgdGhlIHByb2JsZW0gdGhlIGNoYW5nZSB0cmllcyB0byBzb2x2ZSwgaW93LCB3aGF0IGlzIHdyb25nCisgICAgd2l0aCB0aGUgY3VycmVudCBjb2RlIHdpdGhvdXQgdGhlIGNoYW5nZS4KKworICAuIGp1c3RpZmllcyB0aGUgd2F5IHRoZSBjaGFuZ2Ugc29sdmVzIHRoZSBwcm9ibGVtLCBpb3csIHdoeSB0aGUKKyAgICByZXN1bHQgd2l0aCB0aGUgY2hhbmdlIGlzIGJldHRlci4KKworICAuIGFsdGVybmF0ZSBzb2x1dGlvbnMgY29uc2lkZXJlZCBidXQgZGlzY2FyZGVkLCBpZiBhbnkuCisKK0Rlc2NyaWJlIHlvdXIgY2hhbmdlcyBpbiBpbXBlcmF0aXZlIG1vb2QsIGUuZy4gIm1ha2UgeHl6enkgZG8gZnJvdHoiCitpbnN0ZWFkIG9mICJbVGhpcyBwYXRjaF0gbWFrZXMgeHl6enkgZG8gZnJvdHoiIG9yICJbSV0gY2hhbmdlZCB4eXp6eQordG8gZG8gZnJvdHoiLCBhcyBpZiB5b3UgYXJlIGdpdmluZyBvcmRlcnMgdG8gdGhlIGNvZGViYXNlIHRvIGNoYW5nZQoraXRzIGJlaGF2aW91ci4gIFRyeSB0byBtYWtlIHN1cmUgeW91ciBleHBsYW5hdGlvbiBjYW4gYmUgdW5kZXJzdG9vZAord2l0aG91dCBleHRlcm5hbCByZXNvdXJjZXMuIEluc3RlYWQgb2YgZ2l2aW5nIGEgVVJMIHRvIGEgbWFpbGluZyBsaXN0CithcmNoaXZlLCBzdW1tYXJpemUgdGhlIHJlbGV2YW50IHBvaW50cyBvZiB0aGUgZGlzY3Vzc2lvbi4KKworCisoMykgR2VuZXJhdGUgeW91ciBwYXRjaCB1c2luZyBHaXQgdG9vbHMgb3V0IG9mIHlvdXIgY29tbWl0cy4KKworR2l0IGJhc2VkIGRpZmYgdG9vbHMgZ2VuZXJhdGUgdW5pZGlmZiB3aGljaCBpcyB0aGUgcHJlZmVycmVkIGZvcm1hdC4KKworWW91IGRvIG5vdCBoYXZlIHRvIGJlIGFmcmFpZCB0byB1c2UgLU0gb3B0aW9uIHRvICJnaXQgZGlmZiIgb3IKKyJnaXQgZm9ybWF0LXBhdGNoIiwgaWYgeW91ciBwYXRjaCBpbnZvbHZlcyBmaWxlIHJlbmFtZXMuICBUaGUKK3JlY2VpdmluZyBlbmQgY2FuIGhhbmRsZSB0aGVtIGp1c3QgZmluZS4KKworUGxlYXNlIG1ha2Ugc3VyZSB5b3VyIHBhdGNoIGRvZXMgbm90IGFkZCBjb21tZW50ZWQgb3V0IGRlYnVnZ2luZyBjb2RlLAorb3IgaW5jbHVkZSBhbnkgZXh0cmEgZmlsZXMgd2hpY2ggZG8gbm90IHJlbGF0ZSB0byB3aGF0IHlvdXIgcGF0Y2gKK2lzIHRyeWluZyB0byBhY2hpZXZlLiBNYWtlIHN1cmUgdG8gcmV2aWV3Cit5b3VyIHBhdGNoIGFmdGVyIGdlbmVyYXRpbmcgaXQsIHRvIGVuc3VyZSBhY2N1cmFjeS4gIEJlZm9yZQorc2VuZGluZyBvdXQsIHBsZWFzZSBtYWtlIHN1cmUgaXQgY2xlYW5seSBhcHBsaWVzIHRvIHRoZSAibWFzdGVyIgorYnJhbmNoIGhlYWQuICBJZiB5b3UgYXJlIHByZXBhcmluZyBhIHdvcmsgYmFzZWQgb24gIm5leHQiIGJyYW5jaCwKK3RoYXQgaXMgZmluZSwgYnV0IHBsZWFzZSBtYXJrIGl0IGFzIHN1Y2guCisKKworKDQpIFNlbmRpbmcgeW91ciBwYXRjaGVzLgorCitMZWFybiB0byB1c2UgZm9ybWF0LXBhdGNoIGFuZCBzZW5kLWVtYWlsIGlmIHBvc3NpYmxlLiAgVGhlc2UgY29tbWFuZHMKK2FyZSBvcHRpbWl6ZWQgZm9yIHRoZSB3b3JrZmxvdyBvZiBzZW5kaW5nIHBhdGNoZXMsIGF2b2lkaW5nIG1hbnkgd2F5cworeW91ciBleGlzdGluZyBlLW1haWwgY2xpZW50IHRoYXQgaXMgb3B0aW1pemVkIGZvciAibXVsdGlwYXJ0LyoiIG1pbWUKK3R5cGUgZS1tYWlscyB0byBjb3JydXB0IGFuZCByZW5kZXIgeW91ciBwYXRjaGVzIHVudXNhYmxlLgorCitQZW9wbGUgb24gdGhlIEdpdCBtYWlsaW5nIGxpc3QgbmVlZCB0byBiZSBhYmxlIHRvIHJlYWQgYW5kCitjb21tZW50IG9uIHRoZSBjaGFuZ2VzIHlvdSBhcmUgc3VibWl0dGluZy4gIEl0IGlzIGltcG9ydGFudCBmb3IKK2EgZGV2ZWxvcGVyIHRvIGJlIGFibGUgdG8gInF1b3RlIiB5b3VyIGNoYW5nZXMsIHVzaW5nIHN0YW5kYXJkCitlLW1haWwgdG9vbHMsIHNvIHRoYXQgdGhleSBtYXkgY29tbWVudCBvbiBzcGVjaWZpYyBwb3J0aW9ucyBvZgoreW91ciBjb2RlLiAgRm9yIHRoaXMgcmVhc29uLCBlYWNoIHBhdGNoIHNob3VsZCBiZSBzdWJtaXR0ZWQKKyJpbmxpbmUiIGluIGEgc2VwYXJhdGUgbWVzc2FnZS4KKworTXVsdGlwbGUgcmVsYXRlZCBwYXRjaGVzIHNob3VsZCBiZSBncm91cGVkIGludG8gdGhlaXIgb3duIGUtbWFpbAordGhyZWFkIHRvIGhlbHAgcmVhZGVycyBmaW5kIGFsbCBwYXJ0cyBvZiB0aGUgc2VyaWVzLiAgVG8gdGhhdCBlbmQsCitzZW5kIHRoZW0gYXMgcmVwbGllcyB0byBlaXRoZXIgYW4gYWRkaXRpb25hbCAiY292ZXIgbGV0dGVyIiBtZXNzYWdlCisoc2VlIGJlbG93KSwgdGhlIGZpcnN0IHBhdGNoLCBvciB0aGUgcmVzcGVjdGl2ZSBwcmVjZWRpbmcgcGF0Y2guCisKK0lmIHlvdXIgbG9nIG1lc3NhZ2UgKGluY2x1ZGluZyB5b3VyIG5hbWUgb24gdGhlCitTaWduZWQtb2ZmLWJ5IGxpbmUpIGlzIG5vdCB3cml0YWJsZSBpbiBBU0NJSSwgbWFrZSBzdXJlIHRoYXQKK3lvdSBzZW5kIG9mZiBhIG1lc3NhZ2UgaW4gdGhlIGNvcnJlY3QgZW5jb2RpbmcuCisKK1dBUk5JTkc6IEJlIHdhcnkgb2YgeW91ciBNVUFzIHdvcmQtd3JhcAorY29ycnVwdGluZyB5b3VyIHBhdGNoLiAgRG8gbm90IGN1dC1uLXBhc3RlIHlvdXIgcGF0Y2g7IHlvdSBjYW4KK2xvc2UgdGFicyB0aGF0IHdheSBpZiB5b3UgYXJlIG5vdCBjYXJlZnVsLgorCitJdCBpcyBhIGNvbW1vbiBjb252ZW50aW9uIHRvIHByZWZpeCB5b3VyIHN1YmplY3QgbGluZSB3aXRoCitbUEFUQ0hdLiAgVGhpcyBsZXRzIHBlb3BsZSBlYXNpbHkgZGlzdGluZ3Vpc2ggcGF0Y2hlcyBmcm9tIG90aGVyCitlLW1haWwgZGlzY3Vzc2lvbnMuICBVc2Ugb2YgYWRkaXRpb25hbCBtYXJrZXJzIGFmdGVyIFBBVENIIGFuZAordGhlIGNsb3NpbmcgYnJhY2tldCB0byBtYXJrIHRoZSBuYXR1cmUgb2YgdGhlIHBhdGNoIGlzIGFsc28KK2VuY291cmFnZWQuICBFLmcuIFtQQVRDSC9SRkNdIGlzIG9mdGVuIHVzZWQgd2hlbiB0aGUgcGF0Y2ggaXMKK25vdCByZWFkeSB0byBiZSBhcHBsaWVkIGJ1dCBpdCBpcyBmb3IgZGlzY3Vzc2lvbiwgW1BBVENIIHYyXSwKK1tQQVRDSCB2M10gZXRjLiBhcmUgb2Z0ZW4gc2VlbiB3aGVuIHlvdSBhcmUgc2VuZGluZyBhbiB1cGRhdGUgdG8KK3doYXQgeW91IGhhdmUgcHJldmlvdXNseSBzZW50LgorCisiZ2l0IGZvcm1hdC1wYXRjaCIgY29tbWFuZCBmb2xsb3dzIHRoZSBiZXN0IGN1cnJlbnQgcHJhY3RpY2UgdG8KK2Zvcm1hdCB0aGUgYm9keSBvZiBhbiBlLW1haWwgbWVzc2FnZS4gIEF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCitwYXRjaCBzaG91bGQgY29tZSB5b3VyIGNvbW1pdCBtZXNzYWdlLCBlbmRpbmcgd2l0aCB0aGUKK1NpZ25lZC1vZmYtYnk6IGxpbmVzLCBhbmQgYSBsaW5lIHRoYXQgY29uc2lzdHMgb2YgdGhyZWUgZGFzaGVzLAorZm9sbG93ZWQgYnkgdGhlIGRpZmZzdGF0IGluZm9ybWF0aW9uIGFuZCB0aGUgcGF0Y2ggaXRzZWxmLiAgSWYKK3lvdSBhcmUgZm9yd2FyZGluZyBhIHBhdGNoIGZyb20gc29tZWJvZHkgZWxzZSwgb3B0aW9uYWxseSwgYXQKK3RoZSBiZWdpbm5pbmcgb2YgdGhlIGUtbWFpbCBtZXNzYWdlIGp1c3QgYmVmb3JlIHRoZSBjb21taXQKK21lc3NhZ2Ugc3RhcnRzLCB5b3UgY2FuIHB1dCBhICJGcm9tOiAiIGxpbmUgdG8gbmFtZSB0aGF0IHBlcnNvbi4KKworWW91IG9mdGVuIHdhbnQgdG8gYWRkIGFkZGl0aW9uYWwgZXhwbGFuYXRpb24gYWJvdXQgdGhlIHBhdGNoLAorb3RoZXIgdGhhbiB0aGUgY29tbWl0IG1lc3NhZ2UgaXRzZWxmLiAgUGxhY2Ugc3VjaCAiY292ZXIgbGV0dGVyIgorbWF0ZXJpYWwgYmV0d2VlbiB0aGUgdGhyZWUtZGFzaCBsaW5lIGFuZCB0aGUgZGlmZnN0YXQuICBGb3IKK3BhdGNoZXMgcmVxdWlyaW5nIG11bHRpcGxlIGl0ZXJhdGlvbnMgb2YgcmV2aWV3IGFuZCBkaXNjdXNzaW9uLAorYW4gZXhwbGFuYXRpb24gb2YgY2hhbmdlcyBiZXR3ZWVuIGVhY2ggaXRlcmF0aW9uIGNhbiBiZSBrZXB0IGluCitHaXQtbm90ZXMgYW5kIGluc2VydGVkIGF1dG9tYXRpY2FsbHkgZm9sbG93aW5nIHRoZSB0aHJlZS1kYXNoCitsaW5lIHZpYSBgZ2l0IGZvcm1hdC1wYXRjaCAtLW5vdGVzYC4KKworRG8gbm90IGF0dGFjaCB0aGUgcGF0Y2ggYXMgYSBNSU1FIGF0dGFjaG1lbnQsIGNvbXByZXNzZWQgb3Igbm90LgorRG8gbm90IGxldCB5b3VyIGUtbWFpbCBjbGllbnQgc2VuZCBxdW90ZWQtcHJpbnRhYmxlLiAgRG8gbm90IGxldAoreW91ciBlLW1haWwgY2xpZW50IHNlbmQgZm9ybWF0PWZsb3dlZCB3aGljaCB3b3VsZCBkZXN0cm95Cit3aGl0ZXNwYWNlcyBpbiB5b3VyIHBhdGNoZXMuIE1hbnkKK3BvcHVsYXIgZS1tYWlsIGFwcGxpY2F0aW9ucyB3aWxsIG5vdCBhbHdheXMgdHJhbnNtaXQgYSBNSU1FCithdHRhY2htZW50IGFzIHBsYWluIHRleHQsIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGNvbW1lbnQgb24KK3lvdXIgY29kZS4gIEEgTUlNRSBhdHRhY2htZW50IGFsc28gdGFrZXMgYSBiaXQgbW9yZSB0aW1lIHRvCitwcm9jZXNzLiAgVGhpcyBkb2VzIG5vdCBkZWNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiB5b3VyCitNSU1FLWF0dGFjaGVkIGNoYW5nZSBiZWluZyBhY2NlcHRlZCwgYnV0IGl0IG1ha2VzIGl0IG1vcmUgbGlrZWx5Cit0aGF0IGl0IHdpbGwgYmUgcG9zdHBvbmVkLgorCitFeGNlcHRpb246ICBJZiB5b3VyIG1haWxlciBpcyBtYW5nbGluZyBwYXRjaGVzIHRoZW4gc29tZW9uZSBtYXkgYXNrCit5b3UgdG8gcmUtc2VuZCB0aGVtIHVzaW5nIE1JTUUsIHRoYXQgaXMgT0suCisKK0RvIG5vdCBQR1Agc2lnbiB5b3VyIHBhdGNoLCBhdCBsZWFzdCBmb3Igbm93LiAgTW9zdCBsaWtlbHksIHlvdXIKK21haW50YWluZXIgb3Igb3RoZXIgcGVvcGxlIG9uIHRoZSBsaXN0IHdvdWxkIG5vdCBoYXZlIHlvdXIgUEdQCitrZXkgYW5kIHdvdWxkIG5vdCBib3RoZXIgb2J0YWluaW5nIGl0IGFueXdheS4gIFlvdXIgcGF0Y2ggaXMgbm90CitqdWRnZWQgYnkgd2hvIHlvdSBhcmU7IGEgZ29vZCBwYXRjaCBmcm9tIGFuIHVua25vd24gb3JpZ2luIGhhcyBhCitmYXIgYmV0dGVyIGNoYW5jZSBvZiBiZWluZyBhY2NlcHRlZCB0aGFuIGEgcGF0Y2ggZnJvbSBhIGtub3duLAorcmVzcGVjdGVkIG9yaWdpbiB0aGF0IGlzIGRvbmUgcG9vcmx5IG9yIGRvZXMgaW5jb3JyZWN0IHRoaW5ncy4KKworSWYgeW91IHJlYWxseSByZWFsbHkgcmVhbGx5IHJlYWxseSB3YW50IHRvIGRvIGEgUEdQIHNpZ25lZAorcGF0Y2gsIGZvcm1hdCBpdCBhcyAibXVsdGlwYXJ0L3NpZ25lZCIsIG5vdCBhIHRleHQvcGxhaW4gbWVzc2FnZQordGhhdCBzdGFydHMgd2l0aCAnLS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLScuICBUaGF0IGlzCitub3QgYSB0ZXh0L3BsYWluLCBpdCdzIHNvbWV0aGluZyBlbHNlLgorCitTZW5kIHlvdXIgcGF0Y2ggd2l0aCAiVG86IiBzZXQgdG8gdGhlIG1haWxpbmcgbGlzdCwgd2l0aCAiY2M6IiBsaXN0aW5nCitwZW9wbGUgd2hvIGFyZSBpbnZvbHZlZCBpbiB0aGUgYXJlYSB5b3UgYXJlIHRvdWNoaW5nICh0aGUgb3V0cHV0IGZyb20KKyJnaXQgYmxhbWUgJHBhdGgiIGFuZCAiZ2l0IHNob3J0bG9nIC0tbm8tbWVyZ2VzICRwYXRoIiB3b3VsZCBoZWxwIHRvCitpZGVudGlmeSB0aGVtKSwgdG8gc29saWNpdCBjb21tZW50cyBhbmQgcmV2aWV3cy4KKworQWZ0ZXIgdGhlIGxpc3QgcmVhY2hlZCBhIGNvbnNlbnN1cyB0aGF0IGl0IGlzIGEgZ29vZCBpZGVhIHRvIGFwcGx5IHRoZQorcGF0Y2gsIHJlLXNlbmQgaXQgd2l0aCAiVG86IiBzZXQgdG8gdGhlIG1haW50YWluZXIgWyoxKl0gYW5kICJjYzoiIHRoZQorbGlzdCBbKjIqXSBmb3IgaW5jbHVzaW9uLgorCitEbyBub3QgZm9yZ2V0IHRvIGFkZCB0cmFpbGVycyBzdWNoIGFzICJBY2tlZC1ieToiLCAiUmV2aWV3ZWQtYnk6IiBhbmQKKyJUZXN0ZWQtYnk6IiBsaW5lcyBhcyBuZWNlc3NhcnkgdG8gY3JlZGl0IHBlb3BsZSB3aG8gaGVscGVkIHlvdXIKK3BhdGNoLgorCisgICAgW0FkZHJlc3Nlc10KKyAgICAgKjEqIFRoZSBjdXJyZW50IG1haW50YWluZXI6IGdpdHN0ZXJAcG9ib3guY29tCisgICAgICoyKiBUaGUgbWFpbGluZyBsaXN0OiBnaXRAdmdlci5rZXJuZWwub3JnCisKKworKDUpIFNpZ24geW91ciB3b3JrCisKK1RvIGltcHJvdmUgdHJhY2tpbmcgb2Ygd2hvIGRpZCB3aGF0LCB3ZSd2ZSBib3Jyb3dlZCB0aGUKKyJzaWduLW9mZiIgcHJvY2VkdXJlIGZyb20gdGhlIExpbnV4IGtlcm5lbCBwcm9qZWN0IG9uIHBhdGNoZXMKK3RoYXQgYXJlIGJlaW5nIGVtYWlsZWQgYXJvdW5kLiAgQWx0aG91Z2ggY29yZSBHaXQgaXMgYSBsb3QKK3NtYWxsZXIgcHJvamVjdCBpdCBpcyBhIGdvb2QgZGlzY2lwbGluZSB0byBmb2xsb3cgaXQuCisKK1RoZSBzaWduLW9mZiBpcyBhIHNpbXBsZSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGV4cGxhbmF0aW9uIGZvcgordGhlIHBhdGNoLCB3aGljaCBjZXJ0aWZpZXMgdGhhdCB5b3Ugd3JvdGUgaXQgb3Igb3RoZXJ3aXNlIGhhdmUKK3RoZSByaWdodCB0byBwYXNzIGl0IG9uIGFzIGEgb3Blbi1zb3VyY2UgcGF0Y2guICBUaGUgcnVsZXMgYXJlCitwcmV0dHkgc2ltcGxlOiBpZiB5b3UgY2FuIGNlcnRpZnkgdGhlIGJlbG93OgorCisgICAgICAgIERldmVsb3BlcidzIENlcnRpZmljYXRlIG9mIE9yaWdpbiAxLjEKKworICAgICAgICBCeSBtYWtpbmcgYSBjb250cmlidXRpb24gdG8gdGhpcyBwcm9qZWN0LCBJIGNlcnRpZnkgdGhhdDoKKworICAgICAgICAoYSkgVGhlIGNvbnRyaWJ1dGlvbiB3YXMgY3JlYXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0IGJ5IG1lIGFuZCBJCisgICAgICAgICAgICBoYXZlIHRoZSByaWdodCB0byBzdWJtaXQgaXQgdW5kZXIgdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UKKyAgICAgICAgICAgIGluZGljYXRlZCBpbiB0aGUgZmlsZTsgb3IKKworICAgICAgICAoYikgVGhlIGNvbnRyaWJ1dGlvbiBpcyBiYXNlZCB1cG9uIHByZXZpb3VzIHdvcmsgdGhhdCwgdG8gdGhlIGJlc3QKKyAgICAgICAgICAgIG9mIG15IGtub3dsZWRnZSwgaXMgY292ZXJlZCB1bmRlciBhbiBhcHByb3ByaWF0ZSBvcGVuIHNvdXJjZQorICAgICAgICAgICAgbGljZW5zZSBhbmQgSSBoYXZlIHRoZSByaWdodCB1bmRlciB0aGF0IGxpY2Vuc2UgdG8gc3VibWl0IHRoYXQKKyAgICAgICAgICAgIHdvcmsgd2l0aCBtb2RpZmljYXRpb25zLCB3aGV0aGVyIGNyZWF0ZWQgaW4gd2hvbGUgb3IgaW4gcGFydAorICAgICAgICAgICAgYnkgbWUsIHVuZGVyIHRoZSBzYW1lIG9wZW4gc291cmNlIGxpY2Vuc2UgKHVubGVzcyBJIGFtCisgICAgICAgICAgICBwZXJtaXR0ZWQgdG8gc3VibWl0IHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UpLCBhcyBpbmRpY2F0ZWQKKyAgICAgICAgICAgIGluIHRoZSBmaWxlOyBvcgorCisgICAgICAgIChjKSBUaGUgY29udHJpYnV0aW9uIHdhcyBwcm92aWRlZCBkaXJlY3RseSB0byBtZSBieSBzb21lIG90aGVyCisgICAgICAgICAgICBwZXJzb24gd2hvIGNlcnRpZmllZCAoYSksIChiKSBvciAoYykgYW5kIEkgaGF2ZSBub3QgbW9kaWZpZWQKKyAgICAgICAgICAgIGl0LgorCisgICAgICAgIChkKSBJIHVuZGVyc3RhbmQgYW5kIGFncmVlIHRoYXQgdGhpcyBwcm9qZWN0IGFuZCB0aGUgY29udHJpYnV0aW9uCisgICAgICAgICAgICBhcmUgcHVibGljIGFuZCB0aGF0IGEgcmVjb3JkIG9mIHRoZSBjb250cmlidXRpb24gKGluY2x1ZGluZyBhbGwKKyAgICAgICAgICAgIHBlcnNvbmFsIGluZm9ybWF0aW9uIEkgc3VibWl0IHdpdGggaXQsIGluY2x1ZGluZyBteSBzaWduLW9mZikgaXMKKyAgICAgICAgICAgIG1haW50YWluZWQgaW5kZWZpbml0ZWx5IGFuZCBtYXkgYmUgcmVkaXN0cmlidXRlZCBjb25zaXN0ZW50IHdpdGgKKyAgICAgICAgICAgIHRoaXMgcHJvamVjdCBvciB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZShzKSBpbnZvbHZlZC4KKwordGhlbiB5b3UganVzdCBhZGQgYSBsaW5lIHNheWluZworCisgICAgICAgIFNpZ25lZC1vZmYtYnk6IFJhbmRvbSBKIERldmVsb3BlciA8cmFuZG9tQGRldmVsb3Blci5leGFtcGxlLm9yZz4KKworVGhpcyBsaW5lIGNhbiBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIGJ5IEdpdCBpZiB5b3UgcnVuIHRoZSBnaXQtY29tbWl0Citjb21tYW5kIHdpdGggdGhlIC1zIG9wdGlvbi4KKworTm90aWNlIHRoYXQgeW91IGNhbiBwbGFjZSB5b3VyIG93biBTaWduZWQtb2ZmLWJ5OiBsaW5lIHdoZW4KK2ZvcndhcmRpbmcgc29tZWJvZHkgZWxzZSdzIHBhdGNoIHdpdGggdGhlIGFib3ZlIHJ1bGVzIGZvcgorRC1DLU8uICBJbmRlZWQgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIGRvIHNvLiAgRG8gbm90IGZvcmdldCB0bworcGxhY2UgYW4gaW4tYm9keSAiRnJvbTogIiBsaW5lIGF0IHRoZSBiZWdpbm5pbmcgdG8gcHJvcGVybHkgYXR0cmlidXRlCit0aGUgY2hhbmdlIHRvIGl0cyB0cnVlIGF1dGhvciAoc2VlICgyKSBhYm92ZSkuCisKK0Fsc28gbm90aWNlIHRoYXQgYSByZWFsIG5hbWUgaXMgdXNlZCBpbiB0aGUgU2lnbmVkLW9mZi1ieTogbGluZS4gUGxlYXNlCitkb24ndCBoaWRlIHlvdXIgcmVhbCBuYW1lLgorCitJZiB5b3UgbGlrZSwgeW91IGNhbiBwdXQgZXh0cmEgdGFncyBhdCB0aGUgZW5kOgorCisxLiAiUmVwb3J0ZWQtYnk6IiBpcyB1c2VkIHRvIGNyZWRpdCBzb21lb25lIHdobyBmb3VuZCB0aGUgYnVnIHRoYXQKKyAgIHRoZSBwYXRjaCBhdHRlbXB0cyB0byBmaXguCisyLiAiQWNrZWQtYnk6IiBzYXlzIHRoYXQgdGhlIHBlcnNvbiB3aG8gaXMgbW9yZSBmYW1pbGlhciB3aXRoIHRoZSBhcmVhCisgICB0aGUgcGF0Y2ggYXR0ZW1wdHMgdG8gbW9kaWZ5IGxpa2VkIHRoZSBwYXRjaC4KKzMuICJSZXZpZXdlZC1ieToiLCB1bmxpa2UgdGhlIG90aGVyIHRhZ3MsIGNhbiBvbmx5IGJlIG9mZmVyZWQgYnkgdGhlCisgICByZXZpZXdlciBhbmQgbWVhbnMgdGhhdCBzaGUgaXMgY29tcGxldGVseSBzYXRpc2ZpZWQgdGhhdCB0aGUgcGF0Y2gKKyAgIGlzIHJlYWR5IGZvciBhcHBsaWNhdGlvbi4gIEl0IGlzIHVzdWFsbHkgb2ZmZXJlZCBvbmx5IGFmdGVyIGEKKyAgIGRldGFpbGVkIHJldmlldy4KKzQuICJUZXN0ZWQtYnk6IiBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHBlcnNvbiBhcHBsaWVkIHRoZSBwYXRjaAorICAgYW5kIGZvdW5kIGl0IHRvIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LgorCitZb3UgY2FuIGFsc28gY3JlYXRlIHlvdXIgb3duIHRhZyBvciB1c2Ugb25lIHRoYXQncyBpbiBjb21tb24gdXNhZ2UKK3N1Y2ggYXMgIlRoYW5rcy10bzoiLCAiQmFzZWQtb24tcGF0Y2gtYnk6Iiwgb3IgIk1lbnRvcmVkLWJ5OiIuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3Vic3lzdGVtcyB3aXRoIGRlZGljYXRlZCBtYWludGFpbmVycworCitTb21lIHBhcnRzIG9mIHRoZSBzeXN0ZW0gaGF2ZSBkZWRpY2F0ZWQgbWFpbnRhaW5lcnMgd2l0aCB0aGVpciBvd24KK3JlcG9zaXRvcmllcy4KKworIC0gZ2l0LWd1aS8gY29tZXMgZnJvbSBnaXQtZ3VpIHByb2plY3QsIG1haW50YWluZWQgYnkgUGF0IFRob3l0czoKKworICAgICAgICBnaXQ6Ly9yZXBvLm9yLmN6L2dpdC1ndWkuZ2l0CisKKyAtIGdpdGstZ2l0LyBjb21lcyBmcm9tIFBhdWwgTWFja2VycmFzJ3MgZ2l0ayBwcm9qZWN0OgorCisgICAgICAgIGdpdDovL296bGFicy5vcmcvfnBhdWx1cy9naXRrCisKKyAtIHBvLyBjb21lcyBmcm9tIHRoZSBsb2NhbGl6YXRpb24gY29vcmRpbmF0b3IsIEppYW5nIFhpbjoKKworCWh0dHBzOi8vZ2l0aHViLmNvbS9naXQtbDEwbi9naXQtcG8vCisKK1BhdGNoZXMgdG8gdGhlc2UgcGFydHMgc2hvdWxkIGJlIGJhc2VkIG9uIHRoZWlyIHRyZWVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FuIGlkZWFsIHBhdGNoIGZsb3cKKworSGVyZSBpcyBhbiBpZGVhbCBwYXRjaCBmbG93IGZvciB0aGlzIHByb2plY3QgdGhlIGN1cnJlbnQgbWFpbnRhaW5lcgorc3VnZ2VzdHMgdG8gdGhlIGNvbnRyaWJ1dG9yczoKKworICgwKSBZb3UgY29tZSB1cCB3aXRoIGFuIGl0Y2guICBZb3UgY29kZSBpdCB1cC4KKworICgxKSBTZW5kIGl0IHRvIHRoZSBsaXN0IGFuZCBjYyBwZW9wbGUgd2hvIG1heSBuZWVkIHRvIGtub3cgYWJvdXQKKyAgICAgdGhlIGNoYW5nZS4KKworICAgICBUaGUgcGVvcGxlIHdobyBtYXkgbmVlZCB0byBrbm93IGFyZSB0aGUgb25lcyB3aG9zZSBjb2RlIHlvdQorICAgICBhcmUgYnV0Y2hlcmluZy4gIFRoZXNlIHBlb3BsZSBoYXBwZW4gdG8gYmUgdGhlIG9uZXMgd2hvIGFyZQorICAgICBtb3N0IGxpa2VseSB0byBiZSBrbm93bGVkZ2VhYmxlIGVub3VnaCB0byBoZWxwIHlvdSwgYnV0CisgICAgIHRoZXkgaGF2ZSBubyBvYmxpZ2F0aW9uIHRvIGhlbHAgeW91IChpLmUuIHlvdSBhc2sgZm9yIGhlbHAsCisgICAgIGRvbid0IGRlbWFuZCkuICAiZ2l0IGxvZyAtcCAtLSAkYXJlYV95b3VfYXJlX21vZGlmeWluZyIgd291bGQKKyAgICAgaGVscCB5b3UgZmluZCBvdXQgd2hvIHRoZXkgYXJlLgorCisgKDIpIFlvdSBnZXQgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudHMuICBZb3UgbWF5CisgICAgIGV2ZW4gZ2V0IHRoZW0gaW4gYSAib24gdG9wIG9mIHlvdXIgY2hhbmdlIiBwYXRjaCBmb3JtLgorCisgKDMpIFBvbGlzaCwgcmVmaW5lLCBhbmQgcmUtc2VuZCB0byB0aGUgbGlzdCBhbmQgdGhlIHBlb3BsZSB3aG8KKyAgICAgc3BlbmQgdGhlaXIgdGltZSB0byBpbXByb3ZlIHlvdXIgcGF0Y2guICBHbyBiYWNrIHRvIHN0ZXAgKDIpLgorCisgKDQpIFRoZSBsaXN0IGZvcm1zIGNvbnNlbnN1cyB0aGF0IHRoZSBsYXN0IHJvdW5kIG9mIHlvdXIgcGF0Y2ggaXMKKyAgICAgZ29vZC4gIFNlbmQgaXQgdG8gdGhlIG1haW50YWluZXIgYW5kIGNjIHRoZSBsaXN0LgorCisgKDUpIEEgdG9waWMgYnJhbmNoIGlzIGNyZWF0ZWQgd2l0aCB0aGUgcGF0Y2ggYW5kIGlzIG1lcmdlZCB0byAnbmV4dCcsCisgICAgIGFuZCBjb29rZWQgZnVydGhlciBhbmQgZXZlbnR1YWxseSBncmFkdWF0ZXMgdG8gJ21hc3RlcicuCisKK0luIGFueSB0aW1lIGJldHdlZW4gdGhlICgyKS0oMykgY3ljbGUsIHRoZSBtYWludGFpbmVyIG1heSBwaWNrIGl0IHVwCitmcm9tIHRoZSBsaXN0IGFuZCBxdWV1ZSBpdCB0byAncHUnLCBpbiBvcmRlciB0byBtYWtlIGl0IGVhc2llciBmb3IKK3Blb3BsZSBwbGF5IHdpdGggaXQgd2l0aG91dCBoYXZpbmcgdG8gcGljayB1cCBhbmQgYXBwbHkgdGhlIHBhdGNoIHRvCit0aGVpciB0cmVlcyB0aGVtc2VsdmVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0tub3cgdGhlIHN0YXR1cyBvZiB5b3VyIHBhdGNoIGFmdGVyIHN1Ym1pc3Npb24KKworKiBZb3UgY2FuIHVzZSBHaXQgaXRzZWxmIHRvIGZpbmQgb3V0IHdoZW4geW91ciBwYXRjaCBpcyBtZXJnZWQgaW4KKyAgbWFzdGVyLiAnZ2l0IHB1bGwgLS1yZWJhc2UnIHdpbGwgYXV0b21hdGljYWxseSBza2lwIGFscmVhZHktYXBwbGllZAorICBwYXRjaGVzLCBhbmQgd2lsbCBsZXQgeW91IGtub3cuIFRoaXMgd29ya3Mgb25seSBpZiB5b3UgcmViYXNlIG9uIHRvcAorICBvZiB0aGUgYnJhbmNoIGluIHdoaWNoIHlvdXIgcGF0Y2ggaGFzIGJlZW4gbWVyZ2VkIChpLmUuIGl0IHdpbGwgbm90CisgIHRlbGwgeW91IGlmIHlvdXIgcGF0Y2ggaXMgbWVyZ2VkIGluIHB1IGlmIHlvdSByZWJhc2Ugb24gdG9wIG9mCisgIG1hc3RlcikuCisKKyogUmVhZCB0aGUgR2l0IG1haWxpbmcgbGlzdCwgdGhlIG1haW50YWluZXIgcmVndWxhcmx5IHBvc3RzIG1lc3NhZ2VzCisgIGVudGl0bGVkICJXaGF0J3MgY29va2luZyBpbiBnaXQuZ2l0IiBhbmQgIldoYXQncyBpbiBnaXQuZ2l0IiBnaXZpbmcKKyAgdGhlIHN0YXR1cyBvZiB2YXJpb3VzIHByb3Bvc2VkIGNoYW5nZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTVVBIHNwZWNpZmljIGhpbnRzCisKK1NvbWUgb2YgcGF0Y2hlcyBJIHJlY2VpdmUgb3IgcGljayB1cCBmcm9tIHRoZSBsaXN0IHNoYXJlIGNvbW1vbgorcGF0dGVybnMgb2YgYnJlYWthZ2UuICBQbGVhc2UgbWFrZSBzdXJlIHlvdXIgTVVBIGlzIHNldCB1cAorcHJvcGVybHkgbm90IHRvIGNvcnJ1cHQgd2hpdGVzcGFjZXMuCisKK1NlZSB0aGUgRElTQ1VTU0lPTiBzZWN0aW9uIG9mIGdpdC1mb3JtYXQtcGF0Y2goMSkgZm9yIGhpbnRzIG9uCitjaGVja2luZyB5b3VyIHBhdGNoIGJ5IG1haWxpbmcgaXQgdG8geW91cnNlbGYgYW5kIGFwcGx5aW5nIHdpdGgKK2dpdC1hbSgxKS4KKworV2hpbGUgeW91IGFyZSBhdCBpdCwgY2hlY2sgdGhlIHJlc3VsdGluZyBjb21taXQgbG9nIG1lc3NhZ2UgZnJvbQorYSB0cmlhbCBydW4gb2YgYXBwbHlpbmcgdGhlIHBhdGNoLiAgSWYgd2hhdCBpcyBpbiB0aGUgcmVzdWx0aW5nCitjb21taXQgaXMgbm90IGV4YWN0bHkgd2hhdCB5b3Ugd291bGQgd2FudCB0byBzZWUsIGl0IGlzIHZlcnkKK2xpa2VseSB0aGF0IHlvdXIgbWFpbnRhaW5lciB3b3VsZCBlbmQgdXAgaGFuZCBlZGl0aW5nIHRoZSBsb2cKK21lc3NhZ2Ugd2hlbiBoZSBhcHBsaWVzIHlvdXIgcGF0Y2guICBUaGluZ3MgbGlrZSAiSGksIHRoaXMgaXMgbXkKK2ZpcnN0IHBhdGNoLlxuIiwgaWYgeW91IHJlYWxseSB3YW50IHRvIHB1dCBpbiB0aGUgcGF0Y2ggZS1tYWlsLAorc2hvdWxkIGNvbWUgYWZ0ZXIgdGhlIHRocmVlLWRhc2ggbGluZSB0aGF0IHNpZ25hbHMgdGhlIGVuZCBvZiB0aGUKK2NvbW1pdCBtZXNzYWdlLgorCisKK1BpbmUKKy0tLS0KKworKEpvaGFubmVzIFNjaGluZGVsaW4pCisKK0kgZG9uJ3Qga25vdyBob3cgbWFueSBwZW9wbGUgc3RpbGwgdXNlIHBpbmUsIGJ1dCBmb3IgdGhvc2UgcG9vcgorc291bHMgaXQgbWF5IGJlIGdvb2QgdG8gbWVudGlvbiB0aGF0IHRoZSBxdWVsbC1mbG93ZWQtdGV4dCBpcworbmVlZGVkIGZvciByZWNlbnQgdmVyc2lvbnMuCisKKy4uLiB0aGUgIm5vLXN0cmlwLXdoaXRlc3BhY2UtYmVmb3JlLXNlbmQiIG9wdGlvbiwgdG9vLiBBRkFJSyBpdAord2FzIGludHJvZHVjZWQgaW4gNC42MC4KKworKExpbnVzIFRvcnZhbGRzKQorCitBbmQgNC41OCBuZWVkcyBhdCBsZWFzdCB0aGlzLgorCistLS0KK2RpZmYtdHJlZSA4MzI2ZGQ4MzUwYmU2NGFjN2ZjODA1ZjY1NjNhMWQ2MWFkMTBkMzJjIChmcm9tIGU4ODZhNjFmNzZlZGY1NDEwNTczZTkyZTM4Y2UyMjk3NGY5YzQwZjEpCitBdXRob3I6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BnNS5vc2RsLm9yZz4KK0RhdGU6ICAgTW9uIEF1ZyAxNSAxNzoyMzo1MSAyMDA1IC0wNzAwCisKKyAgICBGaXggcGluZSB3aGl0ZXNwYWNlLWNvcnJ1cHRpb24gYnVnCisKKyAgICBUaGVyZSdzIG5vIGV4Y3VzZSBmb3IgdW5jb25kaXRpb25hbGx5IHJlbW92aW5nIHdoaXRlc3BhY2UgZnJvbQorICAgIHRoZSBwaWNvIGJ1ZmZlcnMgb24gY2xvc2UuCisKK2RpZmYgLS1naXQgYS9waWNvL3BpY28uYyBiL3BpY28vcGljby5jCistLS0gYS9waWNvL3BpY28uYworKysrIGIvcGljby9waWNvLmMKK0BAIC0yMTksNyArMjE5LDkgQEAgUElDTyAqcG07CisJICAgIHN3aXRjaChwaWNvX2FsbF9kb25lKXsJLyogcHJlcGFyZSBmb3IvaGFuZGxlIGZpbmFsIGV2ZW50cyAqLworCSAgICAgIGNhc2UgQ09NUF9FWElUIDoJCS8qIGFscmVhZHkgY29uZmlybWVkICovCisJCXBhY2toZWFkZXIoKTsKKysjaWYgMAorCQlzdHJpcHdoaXRlc3BhY2UoKTsKKysjZW5kaWYKKwkJYyB8PSBDT01QX0VYSVQ7CisJCWJyZWFrOworCisKKyhEYW5pZWwgQmFya2Fsb3cpCisKKz4gQSBwYXRjaCB0byBTdWJtaXR0aW5nUGF0Y2hlcywgTVVBIHNwZWNpZmljIGhlbHAgc2VjdGlvbiBmb3IKKz4gdXNlcnMgb2YgUGluZSA0LjYzIHdvdWxkIGJlIHZlcnkgbXVjaCBhcHByZWNpYXRlZC4KKworQWgsIGl0IGxvb2tzIGxpa2UgYSByZWNlbnQgdmVyc2lvbiBjaGFuZ2VkIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHRvIGRvIHRoZQorcmlnaHQgdGhpbmcsIGFuZCBpbnZlcnRlZCB0aGUgc2Vuc2Ugb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiAoRWl0aGVyCit0aGF0IG9yIEdlbnRvbyBkaWQgaXQuKSBTbyB5b3UgbmVlZCB0byBzZXQgdGhlCisibm8tc3RyaXAtd2hpdGVzcGFjZS1iZWZvcmUtc2VuZCIgb3B0aW9uLCB1bmxlc3MgdGhlIG9wdGlvbiB5b3UgaGF2ZSBpcworInN0cmlwLXdoaXRlc3BhY2UtYmVmb3JlLXNlbmQiLCBpbiB3aGljaCBjYXNlIHlvdSBzaG91bGQgYXZvaWQgY2hlY2tpbmcKK2l0LgorCisKK1RodW5kZXJiaXJkLCBLTWFpbCwgR01haWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VlIHRoZSBNVUEtU1BFQ0lGSUMgSElOVFMgc2VjdGlvbiBvZiBnaXQtZm9ybWF0LXBhdGNoKDEpLgorCitHbnVzCistLS0tCisKKyd8JyBpbiB0aGUgKlN1bW1hcnkqIGJ1ZmZlciBjYW4gYmUgdXNlZCB0byBwaXBlIHRoZSBjdXJyZW50CittZXNzYWdlIHRvIGFuIGV4dGVybmFsIHByb2dyYW0sIGFuZCB0aGlzIGlzIGEgaGFuZHkgd2F5IHRvIGRyaXZlCisiZ2l0IGFtIi4gIEhvd2V2ZXIsIGlmIHRoZSBtZXNzYWdlIGlzIE1JTUUgZW5jb2RlZCwgd2hhdCBpcworcGlwZWQgaW50byB0aGUgcHJvZ3JhbSBpcyB0aGUgcmVwcmVzZW50YXRpb24geW91IHNlZSBpbiB5b3VyCisqQXJ0aWNsZSogYnVmZmVyIGFmdGVyIHVud3JhcHBpbmcgTUlNRS4gIFRoaXMgaXMgb2Z0ZW4gbm90IHdoYXQKK3lvdSB3b3VsZCB3YW50IGZvciB0d28gcmVhc29ucy4gIEl0IHRlbmRzIHRvIHNjcmV3IHVwIG5vbiBBU0NJSQorY2hhcmFjdGVycyAobW9zdCBub3RhYmx5IGluIHBlb3BsZSdzIG5hbWVzKSwgYW5kIGFsc28KK3doaXRlc3BhY2VzIChmYXRhbCBpbiBwYXRjaGVzKS4gIFJ1bm5pbmcgJ0MtdSBnJyB0byBkaXNwbGF5IHRoZQorbWVzc2FnZSBpbiByYXcgZm9ybSBiZWZvcmUgdXNpbmcgJ3wnIHRvIHJ1biB0aGUgcGlwZSBjYW4gd29yawordGhpcyBwcm9ibGVtIGFyb3VuZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXNjaWlkb2MuY29uZiBiL0RvY3VtZW50YXRpb24vYXNjaWlkb2MuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzE2YzUzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hc2NpaWRvYy5jb25mCkBAIC0wLDAgKzEsOTcgQEAKKyMjIGxpbmtnaXQ6IG1hY3JvCisjCisjIFVzYWdlOiBsaW5rZ2l0OmNvbW1hbmRbbWFucGFnZS1zZWN0aW9uXQorIworIyBOb3RlLCB7MH0gaXMgdGhlIG1hbnBhZ2Ugc2VjdGlvbiwgd2hpbGUge3RhcmdldH0gaXMgdGhlIGNvbW1hbmQuCisjCisjIFNob3cgR2l0IGxpbmsgYXM6IDxjb21tYW5kPig8c2VjdGlvbj4pOyBpZiBzZWN0aW9uIGlzIGRlZmluZWQsIGVsc2UganVzdCBzaG93CisjIHRoZSBjb21tYW5kLgorCitbbWFjcm9zXQorKD9zdSlbXFxdPyg/UDxuYW1lPmxpbmtnaXQpOig/UDx0YXJnZXQ+XFMqPylcWyg/UDxhdHRybGlzdD4uKj8pXF09CisKK1thdHRyaWJ1dGVzXQorYXN0ZXJpc2s9JiM0MjsKK3BsdXM9JiM0MzsKK2NhcmV0PSYjOTQ7CitzdGFydHNiPSYjOTE7CitlbmRzYj0mIzkzOworYmFja3NsYXNoPSYjOTI7Cit0aWxkZT0mIzEyNjsKK2Fwb3N0cm9waGU9JiMzOTsKK2JhY2t0aWNrPSYjOTY7CitsaXRkZD0mIzQ1OyYjNDU7CisKK2lmZGVmOjpiYWNrZW5kLWRvY2Jvb2tbXQorW2xpbmtnaXQtaW5saW5lbWFjcm9dCit7MCV7dGFyZ2V0fX0KK3swIzxjaXRlcmVmZW50cnk+fQorezAjPHJlZmVudHJ5dGl0bGU+e3RhcmdldH08L3JlZmVudHJ5dGl0bGU+PG1hbnZvbG51bT57MH08L21hbnZvbG51bT59Cit7MCM8L2NpdGVyZWZlbnRyeT59CitlbmRpZjo6YmFja2VuZC1kb2Nib29rW10KKworaWZkZWY6OmJhY2tlbmQtZG9jYm9va1tdCitpZm5kZWY6OmdpdC1hc2NpaWRvYy1uby1yb2ZmW10KKyMgInVuYnJlYWsiIGRvY2Jvb2steHNsIHYxLjY4IGZvciBtYW5wYWdlcy4gdjEuNjkgd29ya3Mgd2l0aCBvciB3aXRob3V0IHRoaXMuCisjIHYxLjcyIGJyZWFrcyB3aXRoIHRoaXMgYmVjYXVzZSBpdCByZXBsYWNlcyBkb3RzIG5vdCBpbiByb2ZmIHJlcXVlc3RzLgorW2xpc3RpbmdibG9ja10KKzxleGFtcGxlPjx0aXRsZT57dGl0bGV9PC90aXRsZT4KKzxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KK2lmZGVmOjpkb2N0eXBlLW1hbnBhZ2VbXQorJiMxMDsuZnQgQyYjMTA7CitlbmRpZjo6ZG9jdHlwZS1tYW5wYWdlW10KK3wKK2lmZGVmOjpkb2N0eXBlLW1hbnBhZ2VbXQorJiMxMDsuZnQmIzEwOworZW5kaWY6OmRvY3R5cGUtbWFucGFnZVtdCis8L2xpdGVyYWxsYXlvdXQ+Cit7dGl0bGUjfTwvZXhhbXBsZT4KK2VuZGlmOjpnaXQtYXNjaWlkb2Mtbm8tcm9mZltdCisKK2lmZGVmOjpnaXQtYXNjaWlkb2Mtbm8tcm9mZltdCitpZmRlZjo6ZG9jdHlwZS1tYW5wYWdlW10KKyMgVGhlIGZvbGxvd2luZyB0d28gc21hbGwgd29ya2Fyb3VuZHMgaW5zZXJ0IGEgc2ltcGxlIHBhcmFncmFwaCBhZnRlciBzY3JlZW4KK1tsaXN0aW5nYmxvY2tdCis8ZXhhbXBsZT48dGl0bGU+e3RpdGxlfTwvdGl0bGU+Cis8bGl0ZXJhbGxheW91dCBjbGFzcz0ibW9ub3NwYWNlZCI+Cit8Cis8L2xpdGVyYWxsYXlvdXQ+PHNpbXBhcmE+PC9zaW1wYXJhPgore3RpdGxlI308L2V4YW1wbGU+CisKK1t2ZXJzZWJsb2NrXQorPGZvcm1hbHBhcmF7aWQ/IGlkPSJ7aWR9In0+PHRpdGxlPnt0aXRsZX08L3RpdGxlPjxwYXJhPgore3RpdGxlJX08bGl0ZXJhbGxheW91dHtpZD8gaWQ9IntpZH0ifT4KK3t0aXRsZSN9PGxpdGVyYWxsYXlvdXQ+Cit8Cis8L2xpdGVyYWxsYXlvdXQ+Cit7dGl0bGUjfTwvcGFyYT48L2Zvcm1hbHBhcmE+Cit7dGl0bGUlfTxzaW1wYXJhPjwvc2ltcGFyYT4KK2VuZGlmOjpkb2N0eXBlLW1hbnBhZ2VbXQorZW5kaWY6OmdpdC1hc2NpaWRvYy1uby1yb2ZmW10KK2VuZGlmOjpiYWNrZW5kLWRvY2Jvb2tbXQorCitpZmRlZjo6ZG9jdHlwZS1tYW5wYWdlW10KK2lmZGVmOjpiYWNrZW5kLWRvY2Jvb2tbXQorW2hlYWRlcl0KK3RlbXBsYXRlOjpbaGVhZGVyLWRlY2xhcmF0aW9uc10KKzxyZWZlbnRyeT4KKzxyZWZtZXRhPgorPHJlZmVudHJ5dGl0bGU+e21hbnRpdGxlfTwvcmVmZW50cnl0aXRsZT4KKzxtYW52b2xudW0+e21hbnZvbG51bX08L21hbnZvbG51bT4KKzxyZWZtaXNjaW5mbyBjbGFzcz0ic291cmNlIj5HaXQ8L3JlZm1pc2NpbmZvPgorPHJlZm1pc2NpbmZvIGNsYXNzPSJ2ZXJzaW9uIj57Z2l0X3ZlcnNpb259PC9yZWZtaXNjaW5mbz4KKzxyZWZtaXNjaW5mbyBjbGFzcz0ibWFudWFsIj5HaXQgTWFudWFsPC9yZWZtaXNjaW5mbz4KKzwvcmVmbWV0YT4KKzxyZWZuYW1lZGl2PgorICA8cmVmbmFtZT57bWFubmFtZX08L3JlZm5hbWU+CisgIDxyZWZwdXJwb3NlPnttYW5wdXJwb3NlfTwvcmVmcHVycG9zZT4KKzwvcmVmbmFtZWRpdj4KK2VuZGlmOjpiYWNrZW5kLWRvY2Jvb2tbXQorZW5kaWY6OmRvY3R5cGUtbWFucGFnZVtdCisKK2lmZGVmOjpiYWNrZW5kLXhodG1sMTFbXQorW2F0dHJpYnV0ZXNdCitnaXQtcmVsYXRpdmUtaHRtbC1wcmVmaXg9CitbbGlua2dpdC1pbmxpbmVtYWNyb10KKzxhIGhyZWY9IntnaXQtcmVsYXRpdmUtaHRtbC1wcmVmaXh9e3RhcmdldH0uaHRtbCI+e3RhcmdldH17MD8oezB9KX08L2E+CitlbmRpZjo6YmFja2VuZC14aHRtbDExW10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYmxhbWUtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2JsYW1lLW9wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MGVhYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2JsYW1lLW9wdGlvbnMudHh0CkBAIC0wLDAgKzEsMTA2IEBACistYjo6CisJU2hvdyBibGFuayBTSEEtMSBmb3IgYm91bmRhcnkgY29tbWl0cy4gIFRoaXMgY2FuIGFsc28KKwliZSBjb250cm9sbGVkIHZpYSB0aGUgYGJsYW1lLmJsYW5rYm91bmRhcnlgIGNvbmZpZyBvcHRpb24uCisKKy0tcm9vdDo6CisJRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzLiAgVGhpcyBjYW4gYWxzbyBiZQorCWNvbnRyb2xsZWQgdmlhIHRoZSBgYmxhbWUuc2hvd1Jvb3RgIGNvbmZpZyBvcHRpb24uCisKKy0tc2hvdy1zdGF0czo6CisJSW5jbHVkZSBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgYXQgdGhlIGVuZCBvZiBibGFtZSBvdXRwdXQuCisKKy1MIDxzdGFydD4sPGVuZD46OgorLUwgOjxmdW5jbmFtZT46OgorCUFubm90YXRlIG9ubHkgdGhlIGdpdmVuIGxpbmUgcmFuZ2UuIE1heSBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCisJT3ZlcmxhcHBpbmcgcmFuZ2VzIGFyZSBhbGxvd2VkLgorKworPHN0YXJ0PiBhbmQgPGVuZD4gYXJlIG9wdGlvbmFsLiBgYC1MIDxzdGFydD4nJyBvciBgYC1MIDxzdGFydD4sJycgc3BhbnMgZnJvbQorPHN0YXJ0PiB0byBlbmQgb2YgZmlsZS4gYGAtTCAsPGVuZD4nJyBzcGFucyBmcm9tIHN0YXJ0IG9mIGZpbGUgdG8gPGVuZD4uCisrCitpbmNsdWRlOjpsaW5lLXJhbmdlLWZvcm1hdC50eHRbXQorCistbDo6CisJU2hvdyBsb25nIHJldiAoRGVmYXVsdDogb2ZmKS4KKworLXQ6OgorCVNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKS4KKworLVMgPHJldnMtZmlsZT46OgorCVVzZSByZXZpc2lvbnMgZnJvbSByZXZzLWZpbGUgaW5zdGVhZCBvZiBjYWxsaW5nIGxpbmtnaXQ6Z2l0LXJldi1saXN0WzFdLgorCistLXJldmVyc2U6OgorCVdhbGsgaGlzdG9yeSBmb3J3YXJkIGluc3RlYWQgb2YgYmFja3dhcmQuIEluc3RlYWQgb2Ygc2hvd2luZworCXRoZSByZXZpc2lvbiBpbiB3aGljaCBhIGxpbmUgYXBwZWFyZWQsIHRoaXMgc2hvd3MgdGhlIGxhc3QKKwlyZXZpc2lvbiBpbiB3aGljaCBhIGxpbmUgaGFzIGV4aXN0ZWQuIFRoaXMgcmVxdWlyZXMgYSByYW5nZSBvZgorCXJldmlzaW9uIGxpa2UgU1RBUlQuLkVORCB3aGVyZSB0aGUgcGF0aCB0byBibGFtZSBleGlzdHMgaW4KKwlTVEFSVC4KKworLXA6OgorLS1wb3JjZWxhaW46OgorCVNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24uCisKKy0tbGluZS1wb3JjZWxhaW46OgorCVNob3cgdGhlIHBvcmNlbGFpbiBmb3JtYXQsIGJ1dCBvdXRwdXQgY29tbWl0IGluZm9ybWF0aW9uIGZvcgorCWVhY2ggbGluZSwgbm90IGp1c3QgdGhlIGZpcnN0IHRpbWUgYSBjb21taXQgaXMgcmVmZXJlbmNlZC4KKwlJbXBsaWVzIC0tcG9yY2VsYWluLgorCistLWluY3JlbWVudGFsOjoKKwlTaG93IHRoZSByZXN1bHQgaW5jcmVtZW50YWxseSBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IKKwltYWNoaW5lIGNvbnN1bXB0aW9uLgorCistLWVuY29kaW5nPTxlbmNvZGluZz46OgorCVNwZWNpZmllcyB0aGUgZW5jb2RpbmcgdXNlZCB0byBvdXRwdXQgYXV0aG9yIG5hbWVzCisJYW5kIGNvbW1pdCBzdW1tYXJpZXMuIFNldHRpbmcgaXQgdG8gYG5vbmVgIG1ha2VzIGJsYW1lCisJb3V0cHV0IHVuY29udmVydGVkIGRhdGEuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUKKwlkaXNjdXNzaW9uIGFib3V0IGVuY29kaW5nIGluIHRoZSBsaW5rZ2l0OmdpdC1sb2dbMV0KKwltYW51YWwgcGFnZS4KKworLS1jb250ZW50cyA8ZmlsZT46OgorCVdoZW4gPHJldj4gaXMgbm90IHNwZWNpZmllZCwgdGhlIGNvbW1hbmQgYW5ub3RhdGVzIHRoZQorCWNoYW5nZXMgc3RhcnRpbmcgYmFja3dhcmRzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBjb3B5LgorCVRoaXMgZmxhZyBtYWtlcyB0aGUgY29tbWFuZCBwcmV0ZW5kIGFzIGlmIHRoZSB3b3JraW5nCisJdHJlZSBjb3B5IGhhcyB0aGUgY29udGVudHMgb2YgdGhlIG5hbWVkIGZpbGUgKHNwZWNpZnkKKwlgLWAgdG8gbWFrZSB0aGUgY29tbWFuZCByZWFkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0KS4KKworLS1kYXRlIDxmb3JtYXQ+OjoKKwlTcGVjaWZpZXMgdGhlIGZvcm1hdCB1c2VkIHRvIG91dHB1dCBkYXRlcy4gSWYgLS1kYXRlIGlzIG5vdAorCXByb3ZpZGVkLCB0aGUgdmFsdWUgb2YgdGhlIGJsYW1lLmRhdGUgY29uZmlnIHZhcmlhYmxlIGlzCisJdXNlZC4gSWYgdGhlIGJsYW1lLmRhdGUgY29uZmlnIHZhcmlhYmxlIGlzIGFsc28gbm90IHNldCwgdGhlCisJaXNvIGZvcm1hdCBpcyB1c2VkLiBGb3Igc3VwcG9ydGVkIHZhbHVlcywgc2VlIHRoZSBkaXNjdXNzaW9uCisJb2YgdGhlIC0tZGF0ZSBvcHRpb24gYXQgbGlua2dpdDpnaXQtbG9nWzFdLgorCistTXw8bnVtPnw6OgorCURldGVjdCBtb3ZlZCBvciBjb3BpZWQgbGluZXMgd2l0aGluIGEgZmlsZS4gV2hlbiBhIGNvbW1pdAorCW1vdmVzIG9yIGNvcGllcyBhIGJsb2NrIG9mIGxpbmVzIChlLmcuIHRoZSBvcmlnaW5hbCBmaWxlCisJaGFzIEEgYW5kIHRoZW4gQiwgYW5kIHRoZSBjb21taXQgY2hhbmdlcyBpdCB0byBCIGFuZCB0aGVuCisJQSksIHRoZSB0cmFkaXRpb25hbCAnYmxhbWUnIGFsZ29yaXRobSBub3RpY2VzIG9ubHkgaGFsZiBvZgorCXRoZSBtb3ZlbWVudCBhbmQgdHlwaWNhbGx5IGJsYW1lcyB0aGUgbGluZXMgdGhhdCB3ZXJlIG1vdmVkCisJdXAgKGkuZS4gQikgdG8gdGhlIHBhcmVudCBhbmQgYXNzaWducyBibGFtZSB0byB0aGUgbGluZXMgdGhhdAorCXdlcmUgbW92ZWQgZG93biAoaS5lLiBBKSB0byB0aGUgY2hpbGQgY29tbWl0LiAgV2l0aCB0aGlzCisJb3B0aW9uLCBib3RoIGdyb3VwcyBvZiBsaW5lcyBhcmUgYmxhbWVkIG9uIHRoZSBwYXJlbnQgYnkKKwlydW5uaW5nIGV4dHJhIHBhc3NlcyBvZiBpbnNwZWN0aW9uLgorKworPG51bT4gaXMgb3B0aW9uYWwgYnV0IGl0IGlzIHRoZSBsb3dlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mCithbHBoYW51bWVyaWMgY2hhcmFjdGVycyB0aGF0IEdpdCBtdXN0IGRldGVjdCBhcyBtb3ZpbmcvY29weWluZword2l0aGluIGEgZmlsZSBmb3IgaXQgdG8gYXNzb2NpYXRlIHRob3NlIGxpbmVzIHdpdGggdGhlIHBhcmVudAorY29tbWl0LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyMC4KKworLUN8PG51bT58OjoKKwlJbiBhZGRpdGlvbiB0byBgLU1gLCBkZXRlY3QgbGluZXMgbW92ZWQgb3IgY29waWVkIGZyb20gb3RoZXIKKwlmaWxlcyB0aGF0IHdlcmUgbW9kaWZpZWQgaW4gdGhlIHNhbWUgY29tbWl0LiAgVGhpcyBpcworCXVzZWZ1bCB3aGVuIHlvdSByZW9yZ2FuaXplIHlvdXIgcHJvZ3JhbSBhbmQgbW92ZSBjb2RlCisJYXJvdW5kIGFjcm9zcyBmaWxlcy4gIFdoZW4gdGhpcyBvcHRpb24gaXMgZ2l2ZW4gdHdpY2UsCisJdGhlIGNvbW1hbmQgYWRkaXRpb25hbGx5IGxvb2tzIGZvciBjb3BpZXMgZnJvbSBvdGhlcgorCWZpbGVzIGluIHRoZSBjb21taXQgdGhhdCBjcmVhdGVzIHRoZSBmaWxlLiBXaGVuIHRoaXMKKwlvcHRpb24gaXMgZ2l2ZW4gdGhyZWUgdGltZXMsIHRoZSBjb21tYW5kIGFkZGl0aW9uYWxseQorCWxvb2tzIGZvciBjb3BpZXMgZnJvbSBvdGhlciBmaWxlcyBpbiBhbnkgY29tbWl0LgorKworPG51bT4gaXMgb3B0aW9uYWwgYnV0IGl0IGlzIHRoZSBsb3dlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mCithbHBoYW51bWVyaWMgY2hhcmFjdGVycyB0aGF0IEdpdCBtdXN0IGRldGVjdCBhcyBtb3ZpbmcvY29weWluZworYmV0d2VlbiBmaWxlcyBmb3IgaXQgdG8gYXNzb2NpYXRlIHRob3NlIGxpbmVzIHdpdGggdGhlIHBhcmVudAorY29tbWl0LiBBbmQgdGhlIGRlZmF1bHQgdmFsdWUgaXMgNDAuIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lCitgLUNgIG9wdGlvbnMgZ2l2ZW4sIHRoZSA8bnVtPiBhcmd1bWVudCBvZiB0aGUgbGFzdCBgLUNgIHdpbGwKK3Rha2UgZWZmZWN0LgorCistaDo6CisJU2hvdyBoZWxwIG1lc3NhZ2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2J1aWxkLWRvY2RlcC5wZXJsIGIvRG9jdW1lbnRhdGlvbi9idWlsZC1kb2NkZXAucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYTQyMDVlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9idWlsZC1kb2NkZXAucGVybApAQCAtMCwwICsxLDQ2IEBACisjIS91c3IvYmluL3BlcmwKKworbXkgJWluY2x1ZGUgPSAoKTsKK215ICVpbmNsdWRlZCA9ICgpOworCitmb3IgbXkgJHRleHQgKDwqLnR4dD4pIHsKKyAgICBvcGVuIEksICc8JywgJHRleHQgfHwgZGllICJjYW5ub3QgcmVhZDogJHRleHQiOworICAgIHdoaWxlICg8ST4pIHsKKwlpZiAoL15pbmNsdWRlOjovKSB7CisJICAgIGNob21wOworCSAgICBzL15pbmNsdWRlOjpccyovLzsKKwkgICAgcy9cW1xdLy87CisJICAgICRpbmNsdWRleyR0ZXh0fXskX30gPSAxOworCSAgICAkaW5jbHVkZWR7JF99ID0gMTsKKwl9CisgICAgfQorICAgIGNsb3NlIEk7Cit9CisKKyMgRG8gd2UgY2FyZSBhYm91dCBjaGFpbmVkIGluY2x1ZGVzPz8/CitteSAkY2hhbmdlZCA9IDE7Cit3aGlsZSAoJGNoYW5nZWQpIHsKKyAgICAkY2hhbmdlZCA9IDA7CisgICAgd2hpbGUgKG15ICgkdGV4dCwgJGluY2x1ZGVkKSA9IGVhY2ggJWluY2x1ZGUpIHsKKwlmb3IgbXkgJGkgKGtleXMgJSRpbmNsdWRlZCkgeworCSAgICAjICR0ZXh0IGhhcyBpbmNsdWRlOjokaTsgaWYgJGkgaW5jbHVkZXMgJGoKKwkgICAgIyAkdGV4dCBpbmRpcmVjdGx5IGluY2x1ZGVzICRqLgorCSAgICBpZiAoZXhpc3RzICRpbmNsdWRleyRpfSkgeworCQlmb3IgbXkgJGogKGtleXMgJXskaW5jbHVkZXskaX19KSB7CisJCSAgICBpZiAoIWV4aXN0cyAkaW5jbHVkZXskdGV4dH17JGp9KSB7CisJCQkkaW5jbHVkZXskdGV4dH17JGp9ID0gMTsKKwkJCSRpbmNsdWRlZHskan0gPSAxOworCQkJJGNoYW5nZWQgPSAxOworCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorfQorCit3aGlsZSAobXkgKCR0ZXh0LCAkaW5jbHVkZWQpID0gZWFjaCAlaW5jbHVkZSkgeworICAgIGlmICghIGV4aXN0cyAkaW5jbHVkZWR7JHRleHR9ICYmCisJKG15ICRiYXNlID0gJHRleHQpID1+IHMvXC50eHQkLy8pIHsKKwlwcmludCAiJGJhc2UuaHRtbCAkYmFzZS54bWwgOiAiLCBqb2luKCIgIiwga2V5cyAlJGluY2x1ZGVkKSwgIlxuIjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NhdC10ZXhpLnBlcmwgYi9Eb2N1bWVudGF0aW9uL2NhdC10ZXhpLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODc0MzdmOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY2F0LXRleGkucGVybApAQCAtMCwwICsxLDQzIEBACisjIS91c3IvYmluL3BlcmwgLXcKKworbXkgQG1lbnUgPSAoKTsKK215ICRvdXRwdXQgPSAkQVJHVlswXTsKKworb3BlbiBUTVAsICc+JywgIiRvdXRwdXQudG1wIjsKKword2hpbGUgKDxTVERJTj4pIHsKKwluZXh0IGlmICgvXlxcaW5wdXQgdGV4aW5mby8uLi9cQG5vZGUgVG9wLyk7CisJbmV4dCBpZiAoL15cQGJ5ZS8gfHwgL15cLmZ0Lyk7CisJaWYgKHMvXlxAdG9wICguKikvXEBub2RlICQxLCwsVG9wLykgeworCQlwdXNoIEBtZW51LCAkMTsKKwl9CisJcy9cKFxAcHhyZWZ7XFsoVVJMU3xSRU1PVEVTKVxdfVwpLy87CisJcy9cQGFuY2hvclx7W157fV0qXH0vL2c7CisJcHJpbnQgVE1QOworfQorY2xvc2UgVE1QOworCitwcmludGYgJ1xpbnB1dCB0ZXhpbmZvCitAc2V0ZmlsZW5hbWUgZ2l0bWFuLmluZm8KK0Bkb2N1bWVudGVuY29kaW5nIFVURi04CitAZGlyY2F0ZWdvcnkgRGV2ZWxvcG1lbnQKK0BkaXJlbnRyeQorKiBHaXQgTWFuIFBhZ2VzOiAoZ2l0bWFuKS4gIE1hbnVhbCBwYWdlcyBmb3IgR2l0IHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtCitAZW5kIGRpcmVudHJ5CitAbm9kZSBUb3AsLCwgKGRpcikKK0B0b3AgR2l0IE1hbnVhbCBQYWdlcworQGRvY3VtZW50bGFuZ3VhZ2UgZW4KK0BtZW51CisnLCAkbWVudVswXTsKKworZm9yIChAbWVudSkgeworCXByaW50ICIqICR7X306OlxuIjsKK30KK3ByaW50ICJcQGVuZCBtZW51XG4iOworb3BlbiBUTVAsICc8JywgIiRvdXRwdXQudG1wIjsKK3doaWxlICg8VE1QPikgeworCXByaW50OworfQorY2xvc2UgVE1QOworcHJpbnQgIlxAYnllXG4iOwordW5saW5rICIkb3V0cHV0LnRtcCI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NtZC1saXN0LnBlcmwgYi9Eb2N1bWVudGF0aW9uL2NtZC1saXN0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWFhNzNjZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY21kLWxpc3QucGVybApAQCAtMCwwICsxLDc4IEBACisjIS91c3IvYmluL3BlcmwgLXcKKwordXNlIEZpbGU6OkNvbXBhcmUgcXcoY29tcGFyZSk7CisKK3N1YiBmb3JtYXRfb25lIHsKKwlteSAoJG91dCwgJG5hbWVhdHRyKSA9IEBfOworCW15ICgkbmFtZSwgJGF0dHIpID0gQCRuYW1lYXR0cjsKKwlteSAoJHN0YXRlLCAkZGVzY3JpcHRpb24pOworCSRzdGF0ZSA9IDA7CisJb3BlbiBJLCAnPCcsICIkbmFtZS50eHQiIG9yIGRpZSAiTm8gc3VjaCBmaWxlICRuYW1lLnR4dCI7CisJd2hpbGUgKDxJPikgeworCQlpZiAoL15OQU1FJC8pIHsKKwkJCSRzdGF0ZSA9IDE7CisJCQluZXh0OworCQl9CisJCWlmICgkc3RhdGUgPT0gMSAmJiAvXi0tLS0kLykgeworCQkJJHN0YXRlID0gMjsKKwkJCW5leHQ7CisJCX0KKwkJbmV4dCBpZiAoJHN0YXRlICE9IDIpOworCQljaG9tcDsKKwkJJGRlc2NyaXB0aW9uID0gJF87CisJCWxhc3Q7CisJfQorCWNsb3NlIEk7CisJaWYgKCFkZWZpbmVkICRkZXNjcmlwdGlvbikgeworCQlkaWUgIk5vIGRlc2NyaXB0aW9uIGZvdW5kIGluICRuYW1lLnR4dCI7CisJfQorCWlmIChteSAoJHZlcmlmeV9uYW1lLCAkdGV4dCkgPSAoJGRlc2NyaXB0aW9uID1+IC9eKCRuYW1lKSAtICguKikvKSkgeworCQlwcmludCAkb3V0ICJsaW5rZ2l0OiRuYW1lXFsxXF06OlxuXHQiOworCQlpZiAoJGF0dHIgPX4gLyBkZXByZWNhdGVkIC8pIHsKKwkJCXByaW50ICRvdXQgIihkZXByZWNhdGVkKSAiOworCQl9CisJCXByaW50ICRvdXQgIiR0ZXh0LlxuXG4iOworCX0KKwllbHNlIHsKKwkJZGllICJEZXNjcmlwdGlvbiBkb2VzIG5vdCBtYXRjaCAkbmFtZTogJGRlc2NyaXB0aW9uIjsKKwl9Cit9CisKK3doaWxlICg8PikgeworCWxhc3QgaWYgL14jIyMgY29tbWFuZCBsaXN0LzsKK30KKworbXkgJWNtZHMgPSAoKTsKK2ZvciAoc29ydCA8PikgeworCW5leHQgaWYgL14jLzsKKworCWNob21wOworCW15ICgkbmFtZSwgJGNhdCwgJGF0dHIpID0gL14oXFMrKVxzKyguKj8pKD86XHMrKC4qKSk/JC87CisJJGF0dHIgPSAnJyB1bmxlc3MgZGVmaW5lZCAkYXR0cjsKKwlwdXNoIEB7JGNtZHN7JGNhdH19LCBbJG5hbWUsICIgJGF0dHIgIl07Cit9CisKK2ZvciBteSAkY2F0IChxdyhhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCisJCWFuY2lsbGFyeW1hbmlwdWxhdG9ycworCQltYWlucG9yY2VsYWluCisJCXBsdW1iaW5naW50ZXJyb2dhdG9ycworCQlwbHVtYmluZ21hbmlwdWxhdG9ycworCQlzeW5jaGluZ3JlcG9zaXRvcmllcworCQlmb3JlaWduc2NtaW50ZXJmYWNlCisJCXB1cmVoZWxwZXJzCisJCXN5bmNoZWxwZXJzKSkgeworCW15ICRvdXQgPSAiY21kcy0kY2F0LnR4dCI7CisJb3BlbiBPLCAnPicsICIkb3V0KyIgb3IgZGllICJDYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZSAkb3V0KyI7CisJZm9yIChAeyRjbWRzeyRjYXR9fSkgeworCQlmb3JtYXRfb25lKFwqTywgJF8pOworCX0KKwljbG9zZSBPOworCisJaWYgKC1mICIkb3V0IiAmJiBjb21wYXJlKCIkb3V0IiwgIiRvdXQrIikgPT0gMCkgeworCQl1bmxpbmsgIiRvdXQrIjsKKwl9CisJZWxzZSB7CisJCXByaW50IFNUREVSUiAiJG91dFxuIjsKKwkJcmVuYW1lICIkb3V0KyIsICIkb3V0IjsKKwl9Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkxYTBjMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnLnR4dApAQCAtMCwwICsxLDI3NzQgQEAKK0NPTkZJR1VSQVRJT04gRklMRQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBHaXQgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5zIGEgbnVtYmVyIG9mIHZhcmlhYmxlcyB0aGF0IGFmZmVjdAordGhlIEdpdCBjb21tYW5kcycgYmVoYXZpb3IuIFRoZSBgLmdpdC9jb25maWdgIGZpbGUgaW4gZWFjaCByZXBvc2l0b3J5CitpcyB1c2VkIHRvIHN0b3JlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGF0IHJlcG9zaXRvcnksIGFuZAorYCRIT01FLy5naXRjb25maWdgIGlzIHVzZWQgdG8gc3RvcmUgYSBwZXItdXNlciBjb25maWd1cmF0aW9uIGFzCitmYWxsYmFjayB2YWx1ZXMgZm9yIHRoZSBgLmdpdC9jb25maWdgIGZpbGUuIFRoZSBmaWxlIGAvZXRjL2dpdGNvbmZpZ2AKK2NhbiBiZSB1c2VkIHRvIHN0b3JlIGEgc3lzdGVtLXdpZGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorCitUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYXJlIHVzZWQgYnkgYm90aCB0aGUgR2l0IHBsdW1iaW5nCithbmQgdGhlIHBvcmNlbGFpbnMuIFRoZSB2YXJpYWJsZXMgYXJlIGRpdmlkZWQgaW50byBzZWN0aW9ucywgd2hlcmVpbgordGhlIGZ1bGx5IHF1YWxpZmllZCB2YXJpYWJsZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBpdHNlbGYgaXMgdGhlIGxhc3QKK2RvdC1zZXBhcmF0ZWQgc2VnbWVudCBhbmQgdGhlIHNlY3Rpb24gbmFtZSBpcyBldmVyeXRoaW5nIGJlZm9yZSB0aGUgbGFzdAorZG90LiBUaGUgdmFyaWFibGUgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIGFsbG93IG9ubHkgYWxwaGFudW1lcmljCitjaGFyYWN0ZXJzIGFuZCBgLWAsIGFuZCBtdXN0IHN0YXJ0IHdpdGggYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIuICBTb21lCit2YXJpYWJsZXMgbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lczsgd2Ugc2F5IHRoZW4gdGhhdCB0aGUgdmFyaWFibGUgaXMKK211bHRpdmFsdWVkLgorCitTeW50YXgKK35+fn5+fgorCitUaGUgc3ludGF4IGlzIGZhaXJseSBmbGV4aWJsZSBhbmQgcGVybWlzc2l2ZTsgd2hpdGVzcGFjZXMgYXJlIG1vc3RseQoraWdub3JlZC4gIFRoZSAnIycgYW5kICc7JyBjaGFyYWN0ZXJzIGJlZ2luIGNvbW1lbnRzIHRvIHRoZSBlbmQgb2YgbGluZSwKK2JsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLgorCitUaGUgZmlsZSBjb25zaXN0cyBvZiBzZWN0aW9ucyBhbmQgdmFyaWFibGVzLiAgQSBzZWN0aW9uIGJlZ2lucyB3aXRoCit0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbiBpbiBzcXVhcmUgYnJhY2tldHMgYW5kIGNvbnRpbnVlcyB1bnRpbCB0aGUgbmV4dAorc2VjdGlvbiBiZWdpbnMuICBTZWN0aW9uIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLiAgT25seSBhbHBoYW51bWVyaWMKK2NoYXJhY3RlcnMsIGAtYCBhbmQgYC5gIGFyZSBhbGxvd2VkIGluIHNlY3Rpb24gbmFtZXMuICBFYWNoIHZhcmlhYmxlCittdXN0IGJlbG9uZyB0byBzb21lIHNlY3Rpb24sIHdoaWNoIG1lYW5zIHRoYXQgdGhlcmUgbXVzdCBiZSBhIHNlY3Rpb24KK2hlYWRlciBiZWZvcmUgdGhlIGZpcnN0IHNldHRpbmcgb2YgYSB2YXJpYWJsZS4KKworU2VjdGlvbnMgY2FuIGJlIGZ1cnRoZXIgZGl2aWRlZCBpbnRvIHN1YnNlY3Rpb25zLiAgVG8gYmVnaW4gYSBzdWJzZWN0aW9uCitwdXQgaXRzIG5hbWUgaW4gZG91YmxlIHF1b3Rlcywgc2VwYXJhdGVkIGJ5IHNwYWNlIGZyb20gdGhlIHNlY3Rpb24gbmFtZSwKK2luIHRoZSBzZWN0aW9uIGhlYWRlciwgbGlrZSBpbiB0aGUgZXhhbXBsZSBiZWxvdzoKKworLS0tLS0tLS0KKwlbc2VjdGlvbiAic3Vic2VjdGlvbiJdCisKKy0tLS0tLS0tCisKK1N1YnNlY3Rpb24gbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlIGFuZCBjYW4gY29udGFpbiBhbnkgY2hhcmFjdGVycyBleGNlcHQKK25ld2xpbmUgKGRvdWJsZXF1b3RlIGAiYCBhbmQgYmFja3NsYXNoIGNhbiBiZSBpbmNsdWRlZCBieSBlc2NhcGluZyB0aGVtCithcyBgXCJgIGFuZCBgXFxgLCByZXNwZWN0aXZlbHkpLiAgU2VjdGlvbiBoZWFkZXJzIGNhbm5vdCBzcGFuIG11bHRpcGxlCitsaW5lcy4gIFZhcmlhYmxlcyBtYXkgYmVsb25nIGRpcmVjdGx5IHRvIGEgc2VjdGlvbiBvciB0byBhIGdpdmVuIHN1YnNlY3Rpb24uCitZb3UgY2FuIGhhdmUgYFtzZWN0aW9uXWAgaWYgeW91IGhhdmUgYFtzZWN0aW9uICJzdWJzZWN0aW9uIl1gLCBidXQgeW91Citkb24ndCBuZWVkIHRvLgorCitUaGVyZSBpcyBhbHNvIGEgZGVwcmVjYXRlZCBgW3NlY3Rpb24uc3Vic2VjdGlvbl1gIHN5bnRheC4gV2l0aCB0aGlzCitzeW50YXgsIHRoZSBzdWJzZWN0aW9uIG5hbWUgaXMgY29udmVydGVkIHRvIGxvd2VyLWNhc2UgYW5kIGlzIGFsc28KK2NvbXBhcmVkIGNhc2Ugc2Vuc2l0aXZlbHkuIFRoZXNlIHN1YnNlY3Rpb24gbmFtZXMgZm9sbG93IHRoZSBzYW1lCityZXN0cmljdGlvbnMgYXMgc2VjdGlvbiBuYW1lcy4KKworQWxsIHRoZSBvdGhlciBsaW5lcyAoYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGxpbmUgYWZ0ZXIgdGhlIHNlY3Rpb24KK2hlYWRlcikgYXJlIHJlY29nbml6ZWQgYXMgc2V0dGluZyB2YXJpYWJsZXMsIGluIHRoZSBmb3JtCisnbmFtZSA9IHZhbHVlJyAob3IganVzdCAnbmFtZScsIHdoaWNoIGlzIGEgc2hvcnQtaGFuZCB0byBzYXkgdGhhdAordGhlIHZhcmlhYmxlIGlzIHRoZSBib29sZWFuICJ0cnVlIikuCitUaGUgdmFyaWFibGUgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUsIGFsbG93IG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMKK2FuZCBgLWAsIGFuZCBtdXN0IHN0YXJ0IHdpdGggYW4gYWxwaGFiZXRpYyBjaGFyYWN0ZXIuCisKK0EgbGluZSB0aGF0IGRlZmluZXMgYSB2YWx1ZSBjYW4gYmUgY29udGludWVkIHRvIHRoZSBuZXh0IGxpbmUgYnkKK2VuZGluZyBpdCB3aXRoIGEgYFxgOyB0aGUgYmFja3F1b3RlIGFuZCB0aGUgZW5kLW9mLWxpbmUgYXJlCitzdHJpcHBlZC4gIExlYWRpbmcgd2hpdGVzcGFjZXMgYWZ0ZXIgJ25hbWUgPScsIHRoZSByZW1haW5kZXIgb2YgdGhlCitsaW5lIGFmdGVyIHRoZSBmaXJzdCBjb21tZW50IGNoYXJhY3RlciAnIycgb3IgJzsnLCBhbmQgdHJhaWxpbmcKK3doaXRlc3BhY2VzIG9mIHRoZSBsaW5lIGFyZSBkaXNjYXJkZWQgdW5sZXNzIHRoZXkgYXJlIGVuY2xvc2VkIGluCitkb3VibGUgcXVvdGVzLiAgSW50ZXJuYWwgd2hpdGVzcGFjZXMgd2l0aGluIHRoZSB2YWx1ZSBhcmUgcmV0YWluZWQKK3ZlcmJhdGltLgorCitJbnNpZGUgZG91YmxlIHF1b3RlcywgZG91YmxlIHF1b3RlIGAiYCBhbmQgYmFja3NsYXNoIGBcYCBjaGFyYWN0ZXJzCittdXN0IGJlIGVzY2FwZWQ6IHVzZSBgXCJgIGZvciBgImAgYW5kIGBcXGAgZm9yIGBcYC4KKworVGhlIGZvbGxvd2luZyBlc2NhcGUgc2VxdWVuY2VzIChiZXNpZGUgYFwiYCBhbmQgYFxcYCkgYXJlIHJlY29nbml6ZWQ6CitgXG5gIGZvciBuZXdsaW5lIGNoYXJhY3RlciAoTkwpLCBgXHRgIGZvciBob3Jpem9udGFsIHRhYnVsYXRpb24gKEhULCBUQUIpCithbmQgYFxiYCBmb3IgYmFja3NwYWNlIChCUykuICBPdGhlciBjaGFyIGVzY2FwZSBzZXF1ZW5jZXMgKGluY2x1ZGluZyBvY3RhbAorZXNjYXBlIHNlcXVlbmNlcykgYXJlIGludmFsaWQuCisKKworSW5jbHVkZXMKK35+fn5+fn5+CisKK1lvdSBjYW4gaW5jbHVkZSBvbmUgY29uZmlnIGZpbGUgZnJvbSBhbm90aGVyIGJ5IHNldHRpbmcgdGhlIHNwZWNpYWwKK2BpbmNsdWRlLnBhdGhgIHZhcmlhYmxlIHRvIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGluY2x1ZGVkLiBUaGUKK2luY2x1ZGVkIGZpbGUgaXMgZXhwYW5kZWQgaW1tZWRpYXRlbHksIGFzIGlmIGl0cyBjb250ZW50cyBoYWQgYmVlbgorZm91bmQgYXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBpbmNsdWRlIGRpcmVjdGl2ZS4gSWYgdGhlIHZhbHVlIG9mIHRoZQorYGluY2x1ZGUucGF0aGAgdmFyaWFibGUgaXMgYSByZWxhdGl2ZSBwYXRoLCB0aGUgcGF0aCBpcyBjb25zaWRlcmVkIHRvIGJlCityZWxhdGl2ZSB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGluIHdoaWNoIHRoZSBpbmNsdWRlIGRpcmVjdGl2ZSB3YXMKK2ZvdW5kLiBUaGUgdmFsdWUgb2YgYGluY2x1ZGUucGF0aGAgaXMgc3ViamVjdCB0byB0aWxkZSBleHBhbnNpb246IGB+L2AKK2lzIGV4cGFuZGVkIHRvIHRoZSB2YWx1ZSBvZiBgJEhPTUVgLCBhbmQgYH51c2VyL2AgdG8gdGhlIHNwZWNpZmllZAordXNlcidzIGhvbWUgZGlyZWN0b3J5LiBTZWUgYmVsb3cgZm9yIGV4YW1wbGVzLgorCitFeGFtcGxlCit+fn5+fn5+CisKKwkjIENvcmUgdmFyaWFibGVzCisJW2NvcmVdCisJCTsgRG9uJ3QgdHJ1c3QgZmlsZSBtb2RlcworCQlmaWxlbW9kZSA9IGZhbHNlCisKKwkjIE91ciBkaWZmIGFsZ29yaXRobQorCVtkaWZmXQorCQlleHRlcm5hbCA9IC91c3IvbG9jYWwvYmluL2RpZmYtd3JhcHBlcgorCQlyZW5hbWVzID0gdHJ1ZQorCisJW2JyYW5jaCAiZGV2ZWwiXQorCQlyZW1vdGUgPSBvcmlnaW4KKwkJbWVyZ2UgPSByZWZzL2hlYWRzL2RldmVsCisKKwkjIFByb3h5IHNldHRpbmdzCisJW2NvcmVdCisJCWdpdFByb3h5PSJzc2giIGZvciAia2VybmVsLm9yZyIKKwkJZ2l0UHJveHk9ZGVmYXVsdC1wcm94eSA7IGZvciB0aGUgcmVzdAorCisJW2luY2x1ZGVdCisJCXBhdGggPSAvcGF0aC90by9mb28uaW5jIDsgaW5jbHVkZSBieSBhYnNvbHV0ZSBwYXRoCisJCXBhdGggPSBmb28gOyBleHBhbmQgImZvbyIgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZmlsZQorCQlwYXRoID0gfi9mb28gOyBleHBhbmQgImZvbyIgaW4geW91ciAkSE9NRSBkaXJlY3RvcnkKKworCitWYWx1ZXMKK35+fn5+fgorCitWYWx1ZXMgb2YgbWFueSB2YXJpYWJsZXMgYXJlIHRyZWF0ZWQgYXMgYSBzaW1wbGUgc3RyaW5nLCBidXQgdGhlcmUKK2FyZSB2YXJpYWJsZXMgdGhhdCB0YWtlIHZhbHVlcyBvZiBzcGVjaWZpYyB0eXBlcyBhbmQgdGhlcmUgYXJlIHJ1bGVzCithcyB0byBob3cgdG8gc3BlbGwgdGhlbS4KKworYm9vbGVhbjo6CisKKyAgICAgICBXaGVuIGEgdmFyaWFibGUgaXMgc2FpZCB0byB0YWtlIGEgYm9vbGVhbiB2YWx1ZSwgbWFueQorICAgICAgIHN5bm9ueW1zIGFyZSBhY2NlcHRlZCBmb3IgJ3RydWUnIGFuZCAnZmFsc2UnOyB0aGVzZSBhcmUgYWxsCisgICAgICAgY2FzZS1pbnNlbnNpdGl2ZS4KKworICAgICAgIHRydWU7OyBCb29sZWFuIHRydWUgY2FuIGJlIHNwZWxsZWQgYXMgYHllc2AsIGBvbmAsIGB0cnVlYCwKKwkJb3IgYDFgLiAgQWxzbywgYSB2YXJpYWJsZSBkZWZpbmVkIHdpdGhvdXQgYD0gPHZhbHVlPmAKKwkJaXMgdGFrZW4gYXMgdHJ1ZS4KKworICAgICAgIGZhbHNlOzsgQm9vbGVhbiBmYWxzZSBjYW4gYmUgc3BlbGxlZCBhcyBgbm9gLCBgb2ZmYCwKKwkJYGZhbHNlYCwgb3IgYDBgLgorKworV2hlbiBjb252ZXJ0aW5nIHZhbHVlIHRvIHRoZSBjYW5vbmljYWwgZm9ybSB1c2luZyAnLS1ib29sJyB0eXBlCitzcGVjaWZpZXI7ICdnaXQgY29uZmlnJyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBvdXRwdXQgaXMgInRydWUiIG9yCisiZmFsc2UiIChzcGVsbGVkIGluIGxvd2VyY2FzZSkuCisKK2ludGVnZXI6OgorICAgICAgIFRoZSB2YWx1ZSBmb3IgbWFueSB2YXJpYWJsZXMgdGhhdCBzcGVjaWZ5IHZhcmlvdXMgc2l6ZXMgY2FuCisgICAgICAgYmUgc3VmZml4ZWQgd2l0aCBga2AsIGBNYCwuLi4gdG8gbWVhbiAic2NhbGUgdGhlIG51bWJlciBieQorICAgICAgIDEwMjQiLCAiYnkgMTAyNHgxMDI0IiwgZXRjLgorCitjb2xvcjo6CisgICAgICAgVGhlIHZhbHVlIGZvciBhIHZhcmlhYmxlcyB0aGF0IHRha2VzIGEgY29sb3IgaXMgYSBsaXN0IG9mCisgICAgICAgY29sb3JzIChhdCBtb3N0IHR3bykgYW5kIGF0dHJpYnV0ZXMgKGF0IG1vc3Qgb25lKSwgc2VwYXJhdGVkCisgICAgICAgYnkgc3BhY2VzLiAgVGhlIGNvbG9ycyBhY2NlcHRlZCBhcmUgYG5vcm1hbGAsIGBibGFja2AsCisgICAgICAgYHJlZGAsIGBncmVlbmAsIGB5ZWxsb3dgLCBgYmx1ZWAsIGBtYWdlbnRhYCwgYGN5YW5gIGFuZAorICAgICAgIGB3aGl0ZWA7IHRoZSBhdHRyaWJ1dGVzIGFyZSBgYm9sZGAsIGBkaW1gLCBgdWxgLCBgYmxpbmtgIGFuZAorICAgICAgIGByZXZlcnNlYC4gIFRoZSBmaXJzdCBjb2xvciBnaXZlbiBpcyB0aGUgZm9yZWdyb3VuZDsgdGhlCisgICAgICAgc2Vjb25kIGlzIHRoZSBiYWNrZ3JvdW5kLiAgVGhlIHBvc2l0aW9uIG9mIHRoZSBhdHRyaWJ1dGUsIGlmCisgICAgICAgYW55LCBkb2Vzbid0IG1hdHRlci4gQXR0cmlidXRlcyBtYXkgYmUgdHVybmVkIG9mZiBzcGVjaWZpY2FsbHkKKyAgICAgICBieSBwcmVmaXhpbmcgdGhlbSB3aXRoIGBub2AgKGUuZy4sIGBub3JldmVyc2VgLCBgbm91bGAsIGV0YykuCisrCitDb2xvcnMgKGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQpIG1heSBhbHNvIGJlIGdpdmVuIGFzIG51bWJlcnMgYmV0d2VlbgorMCBhbmQgMjU1OyB0aGVzZSB1c2UgQU5TSSAyNTYtY29sb3IgbW9kZSAoYnV0IG5vdGUgdGhhdCBub3QgYWxsCit0ZXJtaW5hbHMgbWF5IHN1cHBvcnQgdGhpcykuICBJZiB5b3VyIHRlcm1pbmFsIHN1cHBvcnRzIGl0LCB5b3UgbWF5IGFsc28KK3NwZWNpZnkgMjQtYml0IFJHQiB2YWx1ZXMgYXMgaGV4LCBsaWtlIGAjZmYwYWIzYC4KKysKK1RoZSBhdHRyaWJ1dGVzIGFyZSBtZWFudCB0byBiZSByZXNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXRlbQoraW4gdGhlIGNvbG9yZWQgb3V0cHV0LCBzbyBzZXR0aW5nIGNvbG9yLmRlY29yYXRlLmJyYW5jaCB0byBgYmxhY2tgCit3aWxsIHBhaW50IHRoYXQgYnJhbmNoIG5hbWUgaW4gYSBwbGFpbiBgYmxhY2tgLCBldmVuIGlmIHRoZSBwcmV2aW91cwordGhpbmcgb24gdGhlIHNhbWUgb3V0cHV0IGxpbmUgKGUuZy4gb3BlbmluZyBwYXJlbnRoZXNpcyBiZWZvcmUgdGhlCitsaXN0IG9mIGJyYW5jaCBuYW1lcyBpbiBgbG9nIC0tZGVjb3JhdGVgIG91dHB1dCkgaXMgc2V0IHRvIGJlCitwYWludGVkIHdpdGggYGJvbGRgIG9yIHNvbWUgb3RoZXIgYXR0cmlidXRlLgorCisKK1ZhcmlhYmxlcworfn5+fn5+fn5+CisKK05vdGUgdGhhdCB0aGlzIGxpc3QgaXMgbm9uLWNvbXByZWhlbnNpdmUgYW5kIG5vdCBuZWNlc3NhcmlseSBjb21wbGV0ZS4KK0ZvciBjb21tYW5kLXNwZWNpZmljIHZhcmlhYmxlcywgeW91IHdpbGwgZmluZCBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24KK2luIHRoZSBhcHByb3ByaWF0ZSBtYW51YWwgcGFnZS4KKworT3RoZXIgZ2l0LXJlbGF0ZWQgdG9vbHMgbWF5IGFuZCBkbyB1c2UgdGhlaXIgb3duIHZhcmlhYmxlcy4gIFdoZW4KK2ludmVudGluZyBuZXcgdmFyaWFibGVzIGZvciB1c2UgaW4geW91ciBvd24gdG9vbCwgbWFrZSBzdXJlIHRoZWlyCituYW1lcyBkbyBub3QgY29uZmxpY3Qgd2l0aCB0aG9zZSB0aGF0IGFyZSB1c2VkIGJ5IEdpdCBpdHNlbGYgYW5kCitvdGhlciBwb3B1bGFyIHRvb2xzLCBhbmQgZGVzY3JpYmUgdGhlbSBpbiB5b3VyIGRvY3VtZW50YXRpb24uCisKKworYWR2aWNlLio6OgorCVRoZXNlIHZhcmlhYmxlcyBjb250cm9sIHZhcmlvdXMgb3B0aW9uYWwgaGVscCBtZXNzYWdlcyBkZXNpZ25lZCB0bworCWFpZCBuZXcgdXNlcnMuIEFsbCAnYWR2aWNlLionIHZhcmlhYmxlcyBkZWZhdWx0IHRvICd0cnVlJywgYW5kIHlvdQorCWNhbiB0ZWxsIEdpdCB0aGF0IHlvdSBkbyBub3QgbmVlZCBoZWxwIGJ5IHNldHRpbmcgdGhlc2UgdG8gJ2ZhbHNlJzoKKysKKy0tCisJcHVzaFVwZGF0ZVJlamVjdGVkOjoKKwkJU2V0IHRoaXMgdmFyaWFibGUgdG8gJ2ZhbHNlJyBpZiB5b3Ugd2FudCB0byBkaXNhYmxlCisJCSdwdXNoTm9uRkZDdXJyZW50JywKKwkJJ3B1c2hOb25GRk1hdGNoaW5nJywgJ3B1c2hBbHJlYWR5RXhpc3RzJywKKwkJJ3B1c2hGZXRjaEZpcnN0JywgYW5kICdwdXNoTmVlZHNGb3JjZScKKwkJc2ltdWx0YW5lb3VzbHkuCisJcHVzaE5vbkZGQ3VycmVudDo6CisJCUFkdmljZSBzaG93biB3aGVuIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gZmFpbHMgZHVlIHRvIGEKKwkJbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLgorCXB1c2hOb25GRk1hdGNoaW5nOjoKKwkJQWR2aWNlIHNob3duIHdoZW4geW91IHJhbiBsaW5rZ2l0OmdpdC1wdXNoWzFdIGFuZCBwdXNoZWQKKwkJJ21hdGNoaW5nIHJlZnMnIGV4cGxpY2l0bHkgKGkuZS4geW91IHVzZWQgJzonLCBvcgorCQlzcGVjaWZpZWQgYSByZWZzcGVjIHRoYXQgaXNuJ3QgeW91ciBjdXJyZW50IGJyYW5jaCkgYW5kCisJCWl0IHJlc3VsdGVkIGluIGEgbm9uLWZhc3QtZm9yd2FyZCBlcnJvci4KKwlwdXNoQWxyZWFkeUV4aXN0czo6CisJCVNob3duIHdoZW4gbGlua2dpdDpnaXQtcHVzaFsxXSByZWplY3RzIGFuIHVwZGF0ZSB0aGF0CisJCWRvZXMgbm90IHF1YWxpZnkgZm9yIGZhc3QtZm9yd2FyZGluZyAoZS5nLiwgYSB0YWcuKQorCXB1c2hGZXRjaEZpcnN0OjoKKwkJU2hvd24gd2hlbiBsaW5rZ2l0OmdpdC1wdXNoWzFdIHJlamVjdHMgYW4gdXBkYXRlIHRoYXQKKwkJdHJpZXMgdG8gb3ZlcndyaXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhbgorCQlvYmplY3Qgd2UgZG8gbm90IGhhdmUuCisJcHVzaE5lZWRzRm9yY2U6OgorCQlTaG93biB3aGVuIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gcmVqZWN0cyBhbiB1cGRhdGUgdGhhdAorCQl0cmllcyB0byBvdmVyd3JpdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGFuCisJCW9iamVjdCB0aGF0IGlzIG5vdCBhIGNvbW1pdC1pc2gsIG9yIG1ha2UgdGhlIHJlbW90ZQorCQlyZWYgcG9pbnQgYXQgYW4gb2JqZWN0IHRoYXQgaXMgbm90IGEgY29tbWl0LWlzaC4KKwlzdGF0dXNIaW50czo6CisJCVNob3cgZGlyZWN0aW9ucyBvbiBob3cgdG8gcHJvY2VlZCBmcm9tIHRoZSBjdXJyZW50CisJCXN0YXRlIGluIHRoZSBvdXRwdXQgb2YgbGlua2dpdDpnaXQtc3RhdHVzWzFdLCBpbgorCQl0aGUgdGVtcGxhdGUgc2hvd24gd2hlbiB3cml0aW5nIGNvbW1pdCBtZXNzYWdlcyBpbgorCQlsaW5rZ2l0OmdpdC1jb21taXRbMV0sIGFuZCBpbiB0aGUgaGVscCBtZXNzYWdlIHNob3duCisJCWJ5IGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIHdoZW4gc3dpdGNoaW5nIGJyYW5jaC4KKwlzdGF0dXNVb3B0aW9uOjoKKwkJQWR2aXNlIHRvIGNvbnNpZGVyIHVzaW5nIHRoZSBgLXVgIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0KKwkJd2hlbiB0aGUgY29tbWFuZCB0YWtlcyBtb3JlIHRoYW4gMiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQKKwkJZmlsZXMuCisJY29tbWl0QmVmb3JlTWVyZ2U6OgorCQlBZHZpY2Ugc2hvd24gd2hlbiBsaW5rZ2l0OmdpdC1tZXJnZVsxXSByZWZ1c2VzIHRvCisJCW1lcmdlIHRvIGF2b2lkIG92ZXJ3cml0aW5nIGxvY2FsIGNoYW5nZXMuCisJcmVzb2x2ZUNvbmZsaWN0OjoKKwkJQWR2aWNlIHNob3duIGJ5IHZhcmlvdXMgY29tbWFuZHMgd2hlbiBjb25mbGljdHMKKwkJcHJldmVudCB0aGUgb3BlcmF0aW9uIGZyb20gYmVpbmcgcGVyZm9ybWVkLgorCWltcGxpY2l0SWRlbnRpdHk6OgorCQlBZHZpY2Ugb24gaG93IHRvIHNldCB5b3VyIGlkZW50aXR5IGNvbmZpZ3VyYXRpb24gd2hlbgorCQl5b3VyIGluZm9ybWF0aW9uIGlzIGd1ZXNzZWQgZnJvbSB0aGUgc3lzdGVtIHVzZXJuYW1lIGFuZAorCQlkb21haW4gbmFtZS4KKwlkZXRhY2hlZEhlYWQ6OgorCQlBZHZpY2Ugc2hvd24gd2hlbiB5b3UgdXNlZCBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSB0bworCQltb3ZlIHRvIHRoZSBkZXRhY2ggSEVBRCBzdGF0ZSwgdG8gaW5zdHJ1Y3QgaG93IHRvIGNyZWF0ZQorCQlhIGxvY2FsIGJyYW5jaCBhZnRlciB0aGUgZmFjdC4KKwlhbVdvcmtEaXI6OgorCQlBZHZpY2UgdGhhdCBzaG93cyB0aGUgbG9jYXRpb24gb2YgdGhlIHBhdGNoIGZpbGUgd2hlbgorCQlsaW5rZ2l0OmdpdC1hbVsxXSBmYWlscyB0byBhcHBseSBpdC4KKwlybUhpbnRzOjoKKwkJSW4gY2FzZSBvZiBmYWlsdXJlIGluIHRoZSBvdXRwdXQgb2YgbGlua2dpdDpnaXQtcm1bMV0sCisJCXNob3cgZGlyZWN0aW9ucyBvbiBob3cgdG8gcHJvY2VlZCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLgorLS0KKworY29yZS5maWxlTW9kZTo6CisJVGVsbHMgR2l0IGlmIHRoZSBleGVjdXRhYmxlIGJpdCBvZiBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlCisJaXMgdG8gYmUgaG9ub3JlZC4KKysKK1NvbWUgZmlsZXN5c3RlbXMgbG9zZSB0aGUgZXhlY3V0YWJsZSBiaXQgd2hlbiBhIGZpbGUgdGhhdCBpcworbWFya2VkIGFzIGV4ZWN1dGFibGUgaXMgY2hlY2tlZCBvdXQsIG9yIGNoZWNrcyBvdXQgYW4KK25vbi1leGVjdXRhYmxlIGZpbGUgd2l0aCBleGVjdXRhYmxlIGJpdCBvbi4KK2xpbmtnaXQ6Z2l0LWNsb25lWzFdIG9yIGxpbmtnaXQ6Z2l0LWluaXRbMV0gcHJvYmUgdGhlIGZpbGVzeXN0ZW0KK3RvIHNlZSBpZiBpdCBoYW5kbGVzIHRoZSBleGVjdXRhYmxlIGJpdCBjb3JyZWN0bHkKK2FuZCB0aGlzIHZhcmlhYmxlIGlzIGF1dG9tYXRpY2FsbHkgc2V0IGFzIG5lY2Vzc2FyeS4KKysKK0EgcmVwb3NpdG9yeSwgaG93ZXZlciwgbWF5IGJlIG9uIGEgZmlsZXN5c3RlbSB0aGF0IGhhbmRsZXMKK3RoZSBmaWxlbW9kZSBjb3JyZWN0bHksIGFuZCB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAndHJ1ZScKK3doZW4gY3JlYXRlZCwgYnV0IGxhdGVyIG1heSBiZSBtYWRlIGFjY2Vzc2libGUgZnJvbSBhbm90aGVyCitlbnZpcm9ubWVudCB0aGF0IGxvc2VzIHRoZSBmaWxlbW9kZSAoZS5nLiBleHBvcnRpbmcgZXh0NCB2aWEKK0NJRlMgbW91bnQsIHZpc2l0aW5nIGEgQ3lnd2luIGNyZWF0ZWQgcmVwb3NpdG9yeSB3aXRoCitHaXQgZm9yIFdpbmRvd3Mgb3IgRWNsaXBzZSkuCitJbiBzdWNoIGEgY2FzZSBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHNldCB0aGlzIHZhcmlhYmxlIHRvICdmYWxzZScuCitTZWUgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLgorKworVGhlIGRlZmF1bHQgaXMgdHJ1ZSAod2hlbiBjb3JlLmZpbGVtb2RlIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZyBmaWxlKS4KKworY29yZS5pZ25vcmVDYXNlOjoKKwlJZiB0cnVlLCB0aGlzIG9wdGlvbiBlbmFibGVzIHZhcmlvdXMgd29ya2Fyb3VuZHMgdG8gZW5hYmxlCisJR2l0IHRvIHdvcmsgYmV0dGVyIG9uIGZpbGVzeXN0ZW1zIHRoYXQgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZSwKKwlsaWtlIEZBVC4gRm9yIGV4YW1wbGUsIGlmIGEgZGlyZWN0b3J5IGxpc3RpbmcgZmluZHMKKwkibWFrZWZpbGUiIHdoZW4gR2l0IGV4cGVjdHMgIk1ha2VmaWxlIiwgR2l0IHdpbGwgYXNzdW1lCisJaXQgaXMgcmVhbGx5IHRoZSBzYW1lIGZpbGUsIGFuZCBjb250aW51ZSB0byByZW1lbWJlciBpdCBhcworCSJNYWtlZmlsZSIuCisrCitUaGUgZGVmYXVsdCBpcyBmYWxzZSwgZXhjZXB0IGxpbmtnaXQ6Z2l0LWNsb25lWzFdIG9yIGxpbmtnaXQ6Z2l0LWluaXRbMV0KK3dpbGwgcHJvYmUgYW5kIHNldCBjb3JlLmlnbm9yZUNhc2UgdHJ1ZSBpZiBhcHByb3ByaWF0ZSB3aGVuIHRoZSByZXBvc2l0b3J5CitpcyBjcmVhdGVkLgorCitjb3JlLnByZWNvbXBvc2VVbmljb2RlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHVzZWQgYnkgTWFjIE9TIGltcGxlbWVudGF0aW9uIG9mIEdpdC4KKwlXaGVuIGNvcmUucHJlY29tcG9zZVVuaWNvZGU9dHJ1ZSwgR2l0IHJldmVydHMgdGhlIHVuaWNvZGUgZGVjb21wb3NpdGlvbgorCW9mIGZpbGVuYW1lcyBkb25lIGJ5IE1hYyBPUy4gVGhpcyBpcyB1c2VmdWwgd2hlbiBzaGFyaW5nIGEgcmVwb3NpdG9yeQorCWJldHdlZW4gTWFjIE9TIGFuZCBMaW51eCBvciBXaW5kb3dzLgorCShHaXQgZm9yIFdpbmRvd3MgMS43LjEwIG9yIGhpZ2hlciBpcyBuZWVkZWQsIG9yIEdpdCB1bmRlciBjeWd3aW4gMS43KS4KKwlXaGVuIGZhbHNlLCBmaWxlIG5hbWVzIGFyZSBoYW5kbGVkIGZ1bGx5IHRyYW5zcGFyZW50IGJ5IEdpdCwKKwl3aGljaCBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgR2l0LgorCitjb3JlLnByb3RlY3RIRlM6OgorCUlmIHNldCB0byB0cnVlLCBkbyBub3QgYWxsb3cgY2hlY2tvdXQgb2YgcGF0aHMgdGhhdCB3b3VsZAorCWJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byBgLmdpdGAgb24gYW4gSEZTKyBmaWxlc3lzdGVtLgorCURlZmF1bHRzIHRvIGB0cnVlYCBvbiBNYWMgT1MsIGFuZCBgZmFsc2VgIGVsc2V3aGVyZS4KKworY29yZS5wcm90ZWN0TlRGUzo6CisJSWYgc2V0IHRvIHRydWUsIGRvIG5vdCBhbGxvdyBjaGVja291dCBvZiBwYXRocyB0aGF0IHdvdWxkCisJY2F1c2UgcHJvYmxlbXMgd2l0aCB0aGUgTlRGUyBmaWxlc3lzdGVtLCBlLmcuIGNvbmZsaWN0IHdpdGgKKwk4LjMgInNob3J0IiBuYW1lcy4KKwlEZWZhdWx0cyB0byBgdHJ1ZWAgb24gV2luZG93cywgYW5kIGBmYWxzZWAgZWxzZXdoZXJlLgorCitjb3JlLnRydXN0Y3RpbWU6OgorCUlmIGZhbHNlLCB0aGUgY3RpbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgaW5kZXggYW5kIHRoZQorCXdvcmtpbmcgdHJlZSBhcmUgaWdub3JlZDsgdXNlZnVsIHdoZW4gdGhlIGlub2RlIGNoYW5nZSB0aW1lCisJaXMgcmVndWxhcmx5IG1vZGlmaWVkIGJ5IHNvbWV0aGluZyBvdXRzaWRlIEdpdCAoZmlsZSBzeXN0ZW0KKwljcmF3bGVycyBhbmQgc29tZSBiYWNrdXAgc3lzdGVtcykuCisJU2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4gVHJ1ZSBieSBkZWZhdWx0LgorCitjb3JlLmNoZWNrU3RhdDo6CisJRGV0ZXJtaW5lcyB3aGljaCBzdGF0IGZpZWxkcyB0byBtYXRjaCBiZXR3ZWVuIHRoZSBpbmRleAorCWFuZCB3b3JrIHRyZWUuIFRoZSB1c2VyIGNhbiBzZXQgdGhpcyB0byAnZGVmYXVsdCcgb3IKKwknbWluaW1hbCcuIERlZmF1bHQgKG9yIGV4cGxpY2l0bHkgJ2RlZmF1bHQnKSwgaXMgdG8gY2hlY2sKKwlhbGwgZmllbGRzLCBpbmNsdWRpbmcgdGhlIHN1Yi1zZWNvbmQgcGFydCBvZiBtdGltZSBhbmQgY3RpbWUuCisKK2NvcmUucXVvdGVQYXRoOjoKKwlUaGUgY29tbWFuZHMgdGhhdCBvdXRwdXQgcGF0aHMgKGUuZy4gJ2xzLWZpbGVzJywKKwknZGlmZicpLCB3aGVuIG5vdCBnaXZlbiB0aGUgYC16YCBvcHRpb24sIHdpbGwgcXVvdGUKKwkidW51c3VhbCIgY2hhcmFjdGVycyBpbiB0aGUgcGF0aG5hbWUgYnkgZW5jbG9zaW5nIHRoZQorCXBhdGhuYW1lIGluIGEgZG91YmxlLXF1b3RlIHBhaXIgYW5kIHdpdGggYmFja3NsYXNoZXMgdGhlCisJc2FtZSB3YXkgc3RyaW5ncyBpbiBDIHNvdXJjZSBjb2RlIGFyZSBxdW90ZWQuICBJZiB0aGlzCisJdmFyaWFibGUgaXMgc2V0IHRvIGZhbHNlLCB0aGUgYnl0ZXMgaGlnaGVyIHRoYW4gMHg4MCBhcmUKKwlub3QgcXVvdGVkIGJ1dCBvdXRwdXQgYXMgdmVyYmF0aW0uICBOb3RlIHRoYXQgZG91YmxlCisJcXVvdGUsIGJhY2tzbGFzaCBhbmQgY29udHJvbCBjaGFyYWN0ZXJzIGFyZSBhbHdheXMKKwlxdW90ZWQgd2l0aG91dCBgLXpgIHJlZ2FyZGxlc3Mgb2YgdGhlIHNldHRpbmcgb2YgdGhpcworCXZhcmlhYmxlLgorCitjb3JlLmVvbDo6CisJU2V0cyB0aGUgbGluZSBlbmRpbmcgdHlwZSB0byB1c2UgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvcgorCWZpbGVzIHRoYXQgaGF2ZSB0aGUgYHRleHRgIHByb3BlcnR5IHNldC4gIEFsdGVybmF0aXZlcyBhcmUKKwknbGYnLCAnY3JsZicgYW5kICduYXRpdmUnLCB3aGljaCB1c2VzIHRoZSBwbGF0Zm9ybSdzIG5hdGl2ZQorCWxpbmUgZW5kaW5nLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYG5hdGl2ZWAuICBTZWUKKwlsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZW5kLW9mLWxpbmUKKwljb252ZXJzaW9uLgorCitjb3JlLnNhZmVjcmxmOjoKKwlJZiB0cnVlLCBtYWtlcyBHaXQgY2hlY2sgaWYgY29udmVydGluZyBgQ1JMRmAgaXMgcmV2ZXJzaWJsZSB3aGVuCisJZW5kLW9mLWxpbmUgY29udmVyc2lvbiBpcyBhY3RpdmUuICBHaXQgd2lsbCB2ZXJpZnkgaWYgYSBjb21tYW5kCisJbW9kaWZpZXMgYSBmaWxlIGluIHRoZSB3b3JrIHRyZWUgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuCisJRm9yIGV4YW1wbGUsIGNvbW1pdHRpbmcgYSBmaWxlIGZvbGxvd2VkIGJ5IGNoZWNraW5nIG91dCB0aGUKKwlzYW1lIGZpbGUgc2hvdWxkIHlpZWxkIHRoZSBvcmlnaW5hbCBmaWxlIGluIHRoZSB3b3JrIHRyZWUuICBJZgorCXRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciB0aGUgY3VycmVudCBzZXR0aW5nIG9mCisJYGNvcmUuYXV0b2NybGZgLCBHaXQgd2lsbCByZWplY3QgdGhlIGZpbGUuICBUaGUgdmFyaWFibGUgY2FuCisJYmUgc2V0IHRvICJ3YXJuIiwgaW4gd2hpY2ggY2FzZSBHaXQgd2lsbCBvbmx5IHdhcm4gYWJvdXQgYW4KKwlpcnJldmVyc2libGUgY29udmVyc2lvbiBidXQgY29udGludWUgdGhlIG9wZXJhdGlvbi4KKysKK0NSTEYgY29udmVyc2lvbiBiZWFycyBhIHNsaWdodCBjaGFuY2Ugb2YgY29ycnVwdGluZyBkYXRhLgorV2hlbiBpdCBpcyBlbmFibGVkLCBHaXQgd2lsbCBjb252ZXJ0IENSTEYgdG8gTEYgZHVyaW5nIGNvbW1pdCBhbmQgTEYgdG8KK0NSTEYgZHVyaW5nIGNoZWNrb3V0LiAgQSBmaWxlIHRoYXQgY29udGFpbnMgYSBtaXh0dXJlIG9mIExGIGFuZAorQ1JMRiBiZWZvcmUgdGhlIGNvbW1pdCBjYW5ub3QgYmUgcmVjcmVhdGVkIGJ5IEdpdC4gIEZvciB0ZXh0CitmaWxlcyB0aGlzIGlzIHRoZSByaWdodCB0aGluZyB0byBkbzogaXQgY29ycmVjdHMgbGluZSBlbmRpbmdzCitzdWNoIHRoYXQgd2UgaGF2ZSBvbmx5IExGIGxpbmUgZW5kaW5ncyBpbiB0aGUgcmVwb3NpdG9yeS4KK0J1dCBmb3IgYmluYXJ5IGZpbGVzIHRoYXQgYXJlIGFjY2lkZW50YWxseSBjbGFzc2lmaWVkIGFzIHRleHQgdGhlCitjb252ZXJzaW9uIGNhbiBjb3JydXB0IGRhdGEuCisrCitJZiB5b3UgcmVjb2duaXplIHN1Y2ggY29ycnVwdGlvbiBlYXJseSB5b3UgY2FuIGVhc2lseSBmaXggaXQgYnkKK3NldHRpbmcgdGhlIGNvbnZlcnNpb24gdHlwZSBleHBsaWNpdGx5IGluIC5naXRhdHRyaWJ1dGVzLiAgUmlnaHQKK2FmdGVyIGNvbW1pdHRpbmcgeW91IHN0aWxsIGhhdmUgdGhlIG9yaWdpbmFsIGZpbGUgaW4geW91ciB3b3JrCit0cmVlIGFuZCB0aGlzIGZpbGUgaXMgbm90IHlldCBjb3JydXB0ZWQuICBZb3UgY2FuIGV4cGxpY2l0bHkgdGVsbAorR2l0IHRoYXQgdGhpcyBmaWxlIGlzIGJpbmFyeSBhbmQgR2l0IHdpbGwgaGFuZGxlIHRoZSBmaWxlCithcHByb3ByaWF0ZWx5LgorKworVW5mb3J0dW5hdGVseSwgdGhlIGRlc2lyZWQgZWZmZWN0IG9mIGNsZWFuaW5nIHVwIHRleHQgZmlsZXMgd2l0aAorbWl4ZWQgbGluZSBlbmRpbmdzIGFuZCB0aGUgdW5kZXNpcmVkIGVmZmVjdCBvZiBjb3JydXB0aW5nIGJpbmFyeQorZmlsZXMgY2Fubm90IGJlIGRpc3Rpbmd1aXNoZWQuICBJbiBib3RoIGNhc2VzIENSTEZzIGFyZSByZW1vdmVkCitpbiBhbiBpcnJldmVyc2libGUgd2F5LiAgRm9yIHRleHQgZmlsZXMgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcKK3RvIGRvIGJlY2F1c2UgQ1JMRnMgYXJlIGxpbmUgZW5kaW5ncywgd2hpbGUgZm9yIGJpbmFyeSBmaWxlcworY29udmVydGluZyBDUkxGcyBjb3JydXB0cyBkYXRhLgorKworTm90ZSwgdGhpcyBzYWZldHkgY2hlY2sgZG9lcyBub3QgbWVhbiB0aGF0IGEgY2hlY2tvdXQgd2lsbCBnZW5lcmF0ZSBhCitmaWxlIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwgZmlsZSBmb3IgYSBkaWZmZXJlbnQgc2V0dGluZyBvZgorYGNvcmUuZW9sYCBhbmQgYGNvcmUuYXV0b2NybGZgLCBidXQgb25seSBmb3IgdGhlIGN1cnJlbnQgb25lLiAgRm9yCitleGFtcGxlLCBhIHRleHQgZmlsZSB3aXRoIGBMRmAgd291bGQgYmUgYWNjZXB0ZWQgd2l0aCBgY29yZS5lb2w9bGZgCithbmQgY291bGQgbGF0ZXIgYmUgY2hlY2tlZCBvdXQgd2l0aCBgY29yZS5lb2w9Y3JsZmAsIGluIHdoaWNoIGNhc2UgdGhlCityZXN1bHRpbmcgZmlsZSB3b3VsZCBjb250YWluIGBDUkxGYCwgYWx0aG91Z2ggdGhlIG9yaWdpbmFsIGZpbGUKK2NvbnRhaW5lZCBgTEZgLiAgSG93ZXZlciwgaW4gYm90aCB3b3JrIHRyZWVzIHRoZSBsaW5lIGVuZGluZ3Mgd291bGQgYmUKK2NvbnNpc3RlbnQsIHRoYXQgaXMgZWl0aGVyIGFsbCBgTEZgIG9yIGFsbCBgQ1JMRmAsIGJ1dCBuZXZlciBtaXhlZC4gIEEKK2ZpbGUgd2l0aCBtaXhlZCBsaW5lIGVuZGluZ3Mgd291bGQgYmUgcmVwb3J0ZWQgYnkgdGhlIGBjb3JlLnNhZmVjcmxmYAorbWVjaGFuaXNtLgorCitjb3JlLmF1dG9jcmxmOjoKKwlTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gInRydWUiIGlzIGFsbW9zdCB0aGUgc2FtZSBhcyBzZXR0aW5nCisJdGhlIGB0ZXh0YCBhdHRyaWJ1dGUgdG8gImF1dG8iIG9uIGFsbCBmaWxlcyBleGNlcHQgdGhhdCB0ZXh0CisJZmlsZXMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIG5vcm1hbGl6ZWQ6IGZpbGVzIHRoYXQgY29udGFpbgorCWBDUkxGYCBpbiB0aGUgcmVwb3NpdG9yeSB3aWxsIG5vdCBiZSB0b3VjaGVkLiAgVXNlIHRoaXMKKwlzZXR0aW5nIGlmIHlvdSB3YW50IHRvIGhhdmUgYENSTEZgIGxpbmUgZW5kaW5ncyBpbiB5b3VyCisJd29ya2luZyBkaXJlY3RvcnkgZXZlbiB0aG91Z2ggdGhlIHJlcG9zaXRvcnkgZG9lcyBub3QgaGF2ZQorCW5vcm1hbGl6ZWQgbGluZSBlbmRpbmdzLiAgVGhpcyB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvICdpbnB1dCcsCisJaW4gd2hpY2ggY2FzZSBubyBvdXRwdXQgY29udmVyc2lvbiBpcyBwZXJmb3JtZWQuCisKK2NvcmUuc3ltbGlua3M6OgorCUlmIGZhbHNlLCBzeW1ib2xpYyBsaW5rcyBhcmUgY2hlY2tlZCBvdXQgYXMgc21hbGwgcGxhaW4gZmlsZXMgdGhhdAorCWNvbnRhaW4gdGhlIGxpbmsgdGV4dC4gbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdIGFuZAorCWxpbmtnaXQ6Z2l0LWFkZFsxXSB3aWxsIG5vdCBjaGFuZ2UgdGhlIHJlY29yZGVkIHR5cGUgdG8gcmVndWxhcgorCWZpbGUuIFVzZWZ1bCBvbiBmaWxlc3lzdGVtcyBsaWtlIEZBVCB0aGF0IGRvIG5vdCBzdXBwb3J0CisJc3ltYm9saWMgbGlua3MuCisrCitUaGUgZGVmYXVsdCBpcyB0cnVlLCBleGNlcHQgbGlua2dpdDpnaXQtY2xvbmVbMV0gb3IgbGlua2dpdDpnaXQtaW5pdFsxXQord2lsbCBwcm9iZSBhbmQgc2V0IGNvcmUuc3ltbGlua3MgZmFsc2UgaWYgYXBwcm9wcmlhdGUgd2hlbiB0aGUgcmVwb3NpdG9yeQoraXMgY3JlYXRlZC4KKworY29yZS5naXRQcm94eTo6CisJQSAicHJveHkgY29tbWFuZCIgdG8gZXhlY3V0ZSAoYXMgJ2NvbW1hbmQgaG9zdCBwb3J0JykgaW5zdGVhZAorCW9mIGVzdGFibGlzaGluZyBkaXJlY3QgY29ubmVjdGlvbiB0byB0aGUgcmVtb3RlIHNlcnZlciB3aGVuCisJdXNpbmcgdGhlIEdpdCBwcm90b2NvbCBmb3IgZmV0Y2hpbmcuIElmIHRoZSB2YXJpYWJsZSB2YWx1ZSBpcworCWluIHRoZSAiQ09NTUFORCBmb3IgRE9NQUlOIiBmb3JtYXQsIHRoZSBjb21tYW5kIGlzIGFwcGxpZWQgb25seQorCW9uIGhvc3RuYW1lcyBlbmRpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIGRvbWFpbiBzdHJpbmcuIFRoaXMgdmFyaWFibGUKKwltYXkgYmUgc2V0IG11bHRpcGxlIHRpbWVzIGFuZCBpcyBtYXRjaGVkIGluIHRoZSBnaXZlbiBvcmRlcjsKKwl0aGUgZmlyc3QgbWF0Y2ggd2lucy4KKysKK0NhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX1BST1hZX0NPTU1BTkQnIGVudmlyb25tZW50IHZhcmlhYmxlCisod2hpY2ggYWx3YXlzIGFwcGxpZXMgdW5pdmVyc2FsbHksIHdpdGhvdXQgdGhlIHNwZWNpYWwgImZvciIKK2hhbmRsaW5nKS4KKysKK1RoZSBzcGVjaWFsIHN0cmluZyBgbm9uZWAgY2FuIGJlIHVzZWQgYXMgdGhlIHByb3h5IGNvbW1hbmQgdG8KK3NwZWNpZnkgdGhhdCBubyBwcm94eSBiZSB1c2VkIGZvciBhIGdpdmVuIGRvbWFpbiBwYXR0ZXJuLgorVGhpcyBpcyB1c2VmdWwgZm9yIGV4Y2x1ZGluZyBzZXJ2ZXJzIGluc2lkZSBhIGZpcmV3YWxsIGZyb20KK3Byb3h5IHVzZSwgd2hpbGUgZGVmYXVsdGluZyB0byBhIGNvbW1vbiBwcm94eSBmb3IgZXh0ZXJuYWwgZG9tYWlucy4KKworY29yZS5pZ25vcmVTdGF0OjoKKwlJZiB0cnVlLCBHaXQgd2lsbCBhdm9pZCB1c2luZyBsc3RhdCgpIGNhbGxzIHRvIGRldGVjdCBpZiBmaWxlcyBoYXZlCisJY2hhbmdlZCBieSBzZXR0aW5nIHRoZSAiYXNzdW1lLXVuY2hhbmdlZCIgYml0IGZvciB0aG9zZSB0cmFja2VkIGZpbGVzCisJd2hpY2ggaXQgaGFzIHVwZGF0ZWQgaWRlbnRpY2FsbHkgaW4gYm90aCB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZS4KKysKK1doZW4gZmlsZXMgYXJlIG1vZGlmaWVkIG91dHNpZGUgb2YgR2l0LCB0aGUgdXNlciB3aWxsIG5lZWQgdG8gc3RhZ2UKK3RoZSBtb2RpZmllZCBmaWxlcyBleHBsaWNpdGx5IChlLmcuIHNlZSAnRXhhbXBsZXMnIHNlY3Rpb24gaW4KK2xpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXSkuCitHaXQgd2lsbCBub3Qgbm9ybWFsbHkgZGV0ZWN0IGNoYW5nZXMgdG8gdGhvc2UgZmlsZXMuCisrCitUaGlzIGlzIHVzZWZ1bCBvbiBzeXN0ZW1zIHdoZXJlIGxzdGF0KCkgY2FsbHMgYXJlIHZlcnkgc2xvdywgc3VjaCBhcworQ0lGUy9NaWNyb3NvZnQgV2luZG93cy4KKysKK0ZhbHNlIGJ5IGRlZmF1bHQuCisKK2NvcmUucHJlZmVyU3ltbGlua1JlZnM6OgorCUluc3RlYWQgb2YgdGhlIGRlZmF1bHQgInN5bXJlZiIgZm9ybWF0IGZvciBIRUFECisJYW5kIG90aGVyIHN5bWJvbGljIHJlZmVyZW5jZSBmaWxlcywgdXNlIHN5bWJvbGljIGxpbmtzLgorCVRoaXMgaXMgc29tZXRpbWVzIG5lZWRlZCB0byB3b3JrIHdpdGggb2xkIHNjcmlwdHMgdGhhdAorCWV4cGVjdCBIRUFEIHRvIGJlIGEgc3ltYm9saWMgbGluay4KKworY29yZS5iYXJlOjoKKwlJZiB0cnVlIHRoaXMgcmVwb3NpdG9yeSBpcyBhc3N1bWVkIHRvIGJlICdiYXJlJyBhbmQgaGFzIG5vCisJd29ya2luZyBkaXJlY3RvcnkgYXNzb2NpYXRlZCB3aXRoIGl0LiAgSWYgdGhpcyBpcyB0aGUgY2FzZSBhCisJbnVtYmVyIG9mIGNvbW1hbmRzIHRoYXQgcmVxdWlyZSBhIHdvcmtpbmcgZGlyZWN0b3J5IHdpbGwgYmUKKwlkaXNhYmxlZCwgc3VjaCBhcyBsaW5rZ2l0OmdpdC1hZGRbMV0gb3IgbGlua2dpdDpnaXQtbWVyZ2VbMV0uCisrCitUaGlzIHNldHRpbmcgaXMgYXV0b21hdGljYWxseSBndWVzc2VkIGJ5IGxpbmtnaXQ6Z2l0LWNsb25lWzFdIG9yCitsaW5rZ2l0OmdpdC1pbml0WzFdIHdoZW4gdGhlIHJlcG9zaXRvcnkgd2FzIGNyZWF0ZWQuICBCeSBkZWZhdWx0IGEKK3JlcG9zaXRvcnkgdGhhdCBlbmRzIGluICIvLmdpdCIgaXMgYXNzdW1lZCB0byBiZSBub3QgYmFyZSAoYmFyZSA9CitmYWxzZSksIHdoaWxlIGFsbCBvdGhlciByZXBvc2l0b3JpZXMgYXJlIGFzc3VtZWQgdG8gYmUgYmFyZSAoYmFyZQorPSB0cnVlKS4KKworY29yZS53b3JrdHJlZTo6CisJU2V0IHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUuCisJSWYgR0lUX0NPTU1PTl9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBjb3JlLndvcmt0cmVlCisJaXMgaWdub3JlZCBhbmQgbm90IHVzZWQgZm9yIGRldGVybWluaW5nIHRoZSByb290IG9mIHdvcmtpbmcgdHJlZS4KKwlUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBHSVRfV09SS19UUkVFIGVudmlyb25tZW50CisJdmFyaWFibGUgYW5kIHRoZSAnLS13b3JrLXRyZWUnIGNvbW1hbmQtbGluZSBvcHRpb24uCisJVGhlIHZhbHVlIGNhbiBiZSBhbiBhYnNvbHV0ZSBwYXRoIG9yIHJlbGF0aXZlIHRvIHRoZSBwYXRoIHRvCisJdGhlIC5naXQgZGlyZWN0b3J5LCB3aGljaCBpcyBlaXRoZXIgc3BlY2lmaWVkIGJ5IC0tZ2l0LWRpcgorCW9yIEdJVF9ESVIsIG9yIGF1dG9tYXRpY2FsbHkgZGlzY292ZXJlZC4KKwlJZiAtLWdpdC1kaXIgb3IgR0lUX0RJUiBpcyBzcGVjaWZpZWQgYnV0IG5vbmUgb2YKKwktLXdvcmstdHJlZSwgR0lUX1dPUktfVFJFRSBhbmQgY29yZS53b3JrdHJlZSBpcyBzcGVjaWZpZWQsCisJdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgcmVnYXJkZWQgYXMgdGhlIHRvcCBsZXZlbAorCW9mIHlvdXIgd29ya2luZyB0cmVlLgorKworTm90ZSB0aGF0IHRoaXMgdmFyaWFibGUgaXMgaG9ub3JlZCBldmVuIHdoZW4gc2V0IGluIGEgY29uZmlndXJhdGlvbgorZmlsZSBpbiBhICIuZ2l0IiBzdWJkaXJlY3Rvcnkgb2YgYSBkaXJlY3RvcnkgYW5kIGl0cyB2YWx1ZSBkaWZmZXJzCitmcm9tIHRoZSBsYXR0ZXIgZGlyZWN0b3J5IChlLmcuICIvcGF0aC90by8uZ2l0L2NvbmZpZyIgaGFzCitjb3JlLndvcmt0cmVlIHNldCB0byAiL2RpZmZlcmVudC9wYXRoIiksIHdoaWNoIGlzIG1vc3QgbGlrZWx5IGEKK21pc2NvbmZpZ3VyYXRpb24uICBSdW5uaW5nIEdpdCBjb21tYW5kcyBpbiB0aGUgIi9wYXRoL3RvIiBkaXJlY3Rvcnkgd2lsbAorc3RpbGwgdXNlICIvZGlmZmVyZW50L3BhdGgiIGFzIHRoZSByb290IG9mIHRoZSB3b3JrIHRyZWUgYW5kIGNhbiBjYXVzZQorY29uZnVzaW9uIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgKGUuZy4geW91IGFyZSBjcmVhdGluZyBhCityZWFkLW9ubHkgc25hcHNob3Qgb2YgdGhlIHNhbWUgaW5kZXggdG8gYSBsb2NhdGlvbiBkaWZmZXJlbnQgZnJvbSB0aGUKK3JlcG9zaXRvcnkncyB1c3VhbCB3b3JraW5nIHRyZWUpLgorCitjb3JlLmxvZ0FsbFJlZlVwZGF0ZXM6OgorCUVuYWJsZSB0aGUgcmVmbG9nLiBVcGRhdGVzIHRvIGEgcmVmIDxyZWY+IGlzIGxvZ2dlZCB0byB0aGUgZmlsZQorCSIkR0lUX0RJUi9sb2dzLzxyZWY+IiwgYnkgYXBwZW5kaW5nIHRoZSBuZXcgYW5kIG9sZAorCVNIQS0xLCB0aGUgZGF0ZS90aW1lIGFuZCB0aGUgcmVhc29uIG9mIHRoZSB1cGRhdGUsIGJ1dAorCW9ubHkgd2hlbiB0aGUgZmlsZSBleGlzdHMuICBJZiB0aGlzIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZSBpcyBzZXQgdG8gdHJ1ZSwgbWlzc2luZyAiJEdJVF9ESVIvbG9ncy88cmVmPiIKKwlmaWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBmb3IgYnJhbmNoIGhlYWRzIChpLmUuIHVuZGVyCisJcmVmcy9oZWFkcy8pLCByZW1vdGUgcmVmcyAoaS5lLiB1bmRlciByZWZzL3JlbW90ZXMvKSwKKwlub3RlIHJlZnMgKGkuZS4gdW5kZXIgcmVmcy9ub3Rlcy8pLCBhbmQgdGhlIHN5bWJvbGljIHJlZiBIRUFELgorKworVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCBjb21taXQKK3dhcyB0aGUgdGlwIG9mIGEgYnJhbmNoICIyIGRheXMgYWdvIi4KKysKK1RoaXMgdmFsdWUgaXMgdHJ1ZSBieSBkZWZhdWx0IGluIGEgcmVwb3NpdG9yeSB0aGF0IGhhcworYSB3b3JraW5nIGRpcmVjdG9yeSBhc3NvY2lhdGVkIHdpdGggaXQsIGFuZCBmYWxzZSBieQorZGVmYXVsdCBpbiBhIGJhcmUgcmVwb3NpdG9yeS4KKworY29yZS5yZXBvc2l0b3J5Rm9ybWF0VmVyc2lvbjo6CisJSW50ZXJuYWwgdmFyaWFibGUgaWRlbnRpZnlpbmcgdGhlIHJlcG9zaXRvcnkgZm9ybWF0IGFuZCBsYXlvdXQKKwl2ZXJzaW9uLgorCitjb3JlLnNoYXJlZFJlcG9zaXRvcnk6OgorCVdoZW4gJ2dyb3VwJyAob3IgJ3RydWUnKSwgdGhlIHJlcG9zaXRvcnkgaXMgbWFkZSBzaGFyZWFibGUgYmV0d2VlbgorCXNldmVyYWwgdXNlcnMgaW4gYSBncm91cCAobWFraW5nIHN1cmUgYWxsIHRoZSBmaWxlcyBhbmQgb2JqZWN0cyBhcmUKKwlncm91cC13cml0YWJsZSkuIFdoZW4gJ2FsbCcgKG9yICd3b3JsZCcgb3IgJ2V2ZXJ5Ym9keScpLCB0aGUKKwlyZXBvc2l0b3J5IHdpbGwgYmUgcmVhZGFibGUgYnkgYWxsIHVzZXJzLCBhZGRpdGlvbmFsbHkgdG8gYmVpbmcKKwlncm91cC1zaGFyZWFibGUuIFdoZW4gJ3VtYXNrJyAob3IgJ2ZhbHNlJyksIEdpdCB3aWxsIHVzZSBwZXJtaXNzaW9ucworCXJlcG9ydGVkIGJ5IHVtYXNrKDIpLiBXaGVuICcweHh4Jywgd2hlcmUgJzB4eHgnIGlzIGFuIG9jdGFsIG51bWJlciwKKwlmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSB3aWxsIGhhdmUgdGhpcyBtb2RlIHZhbHVlLiAnMHh4eCcgd2lsbCBvdmVycmlkZQorCXVzZXIncyB1bWFzayB2YWx1ZSAod2hlcmVhcyB0aGUgb3RoZXIgb3B0aW9ucyB3aWxsIG9ubHkgb3ZlcnJpZGUKKwlyZXF1ZXN0ZWQgcGFydHMgb2YgdGhlIHVzZXIncyB1bWFzayB2YWx1ZSkuIEV4YW1wbGVzOiAnMDY2MCcgd2lsbCBtYWtlCisJdGhlIHJlcG8gcmVhZC93cml0ZS1hYmxlIGZvciB0aGUgb3duZXIgYW5kIGdyb3VwLCBidXQgaW5hY2Nlc3NpYmxlIHRvCisJb3RoZXJzIChlcXVpdmFsZW50IHRvICdncm91cCcgdW5sZXNzIHVtYXNrIGlzIGUuZy4gJzAwMjInKS4gJzA2NDAnIGlzIGEKKwlyZXBvc2l0b3J5IHRoYXQgaXMgZ3JvdXAtcmVhZGFibGUgYnV0IG5vdCBncm91cC13cml0YWJsZS4KKwlTZWUgbGlua2dpdDpnaXQtaW5pdFsxXS4gRmFsc2UgYnkgZGVmYXVsdC4KKworY29yZS53YXJuQW1iaWd1b3VzUmVmczo6CisJSWYgdHJ1ZSwgR2l0IHdpbGwgd2FybiB5b3UgaWYgdGhlIHJlZiBuYW1lIHlvdSBwYXNzZWQgaXQgaXMgYW1iaWd1b3VzCisJYW5kIG1pZ2h0IG1hdGNoIG11bHRpcGxlIHJlZnMgaW4gdGhlIHJlcG9zaXRvcnkuIFRydWUgYnkgZGVmYXVsdC4KKworY29yZS5jb21wcmVzc2lvbjo6CisJQW4gaW50ZWdlciAtMS4uOSwgaW5kaWNhdGluZyBhIGRlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwuCisJLTEgaXMgdGhlIHpsaWIgZGVmYXVsdC4gMCBtZWFucyBubyBjb21wcmVzc2lvbiwKKwlhbmQgMS4uOSBhcmUgdmFyaW91cyBzcGVlZC9zaXplIHRyYWRlb2ZmcywgOSBiZWluZyBzbG93ZXN0LgorCUlmIHNldCwgdGhpcyBwcm92aWRlcyBhIGRlZmF1bHQgdG8gb3RoZXIgY29tcHJlc3Npb24gdmFyaWFibGVzLAorCXN1Y2ggYXMgJ2NvcmUubG9vc2VDb21wcmVzc2lvbicgYW5kICdwYWNrLmNvbXByZXNzaW9uJy4KKworY29yZS5sb29zZUNvbXByZXNzaW9uOjoKKwlBbiBpbnRlZ2VyIC0xLi45LCBpbmRpY2F0aW5nIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBmb3Igb2JqZWN0cyB0aGF0CisJYXJlIG5vdCBpbiBhIHBhY2sgZmlsZS4gLTEgaXMgdGhlIHpsaWIgZGVmYXVsdC4gMCBtZWFucyBubworCWNvbXByZXNzaW9uLCBhbmQgMS4uOSBhcmUgdmFyaW91cyBzcGVlZC9zaXplIHRyYWRlb2ZmcywgOSBiZWluZworCXNsb3dlc3QuICBJZiBub3Qgc2V0LCAgZGVmYXVsdHMgdG8gY29yZS5jb21wcmVzc2lvbi4gIElmIHRoYXQgaXMKKwlub3Qgc2V0LCAgZGVmYXVsdHMgdG8gMSAoYmVzdCBzcGVlZCkuCisKK2NvcmUucGFja2VkR2l0V2luZG93U2l6ZTo6CisJTnVtYmVyIG9mIGJ5dGVzIG9mIGEgcGFjayBmaWxlIHRvIG1hcCBpbnRvIG1lbW9yeSBpbiBhCisJc2luZ2xlIG1hcHBpbmcgb3BlcmF0aW9uLiAgTGFyZ2VyIHdpbmRvdyBzaXplcyBtYXkgYWxsb3cKKwl5b3VyIHN5c3RlbSB0byBwcm9jZXNzIGEgc21hbGxlciBudW1iZXIgb2YgbGFyZ2UgcGFjayBmaWxlcworCW1vcmUgcXVpY2tseS4gIFNtYWxsZXIgd2luZG93IHNpemVzIHdpbGwgbmVnYXRpdmVseSBhZmZlY3QKKwlwZXJmb3JtYW5jZSBkdWUgdG8gaW5jcmVhc2VkIGNhbGxzIHRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MKKwltZW1vcnkgbWFuYWdlciwgYnV0IG1heSBpbXByb3ZlIHBlcmZvcm1hbmNlIHdoZW4gYWNjZXNzaW5nCisJYSBsYXJnZSBudW1iZXIgb2YgbGFyZ2UgcGFjayBmaWxlcy4KKysKK0RlZmF1bHQgaXMgMSBNaUIgaWYgTk9fTU1BUCB3YXMgc2V0IGF0IGNvbXBpbGUgdGltZSwgb3RoZXJ3aXNlIDMyCitNaUIgb24gMzIgYml0IHBsYXRmb3JtcyBhbmQgMSBHaUIgb24gNjQgYml0IHBsYXRmb3Jtcy4gIFRoaXMgc2hvdWxkCitiZSByZWFzb25hYmxlIGZvciBhbGwgdXNlcnMvb3BlcmF0aW5nIHN5c3RlbXMuICBZb3UgcHJvYmFibHkgZG8KK25vdCBuZWVkIHRvIGFkanVzdCB0aGlzIHZhbHVlLgorKworQ29tbW9uIHVuaXQgc3VmZml4ZXMgb2YgJ2snLCAnbScsIG9yICdnJyBhcmUgc3VwcG9ydGVkLgorCitjb3JlLnBhY2tlZEdpdExpbWl0OjoKKwlNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBtYXAgc2ltdWx0YW5lb3VzbHkgaW50byBtZW1vcnkKKwlmcm9tIHBhY2sgZmlsZXMuICBJZiBHaXQgbmVlZHMgdG8gYWNjZXNzIG1vcmUgdGhhbiB0aGlzIG1hbnkKKwlieXRlcyBhdCBvbmNlIHRvIGNvbXBsZXRlIGFuIG9wZXJhdGlvbiBpdCB3aWxsIHVubWFwIGV4aXN0aW5nCisJcmVnaW9ucyB0byByZWNsYWltIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB3aXRoaW4gdGhlIHByb2Nlc3MuCisrCitEZWZhdWx0IGlzIDI1NiBNaUIgb24gMzIgYml0IHBsYXRmb3JtcyBhbmQgOCBHaUIgb24gNjQgYml0IHBsYXRmb3Jtcy4KK1RoaXMgc2hvdWxkIGJlIHJlYXNvbmFibGUgZm9yIGFsbCB1c2Vycy9vcGVyYXRpbmcgc3lzdGVtcywgZXhjZXB0IG9uCit0aGUgbGFyZ2VzdCBwcm9qZWN0cy4gIFlvdSBwcm9iYWJseSBkbyBub3QgbmVlZCB0byBhZGp1c3QgdGhpcyB2YWx1ZS4KKysKK0NvbW1vbiB1bml0IHN1ZmZpeGVzIG9mICdrJywgJ20nLCBvciAnZycgYXJlIHN1cHBvcnRlZC4KKworY29yZS5kZWx0YUJhc2VDYWNoZUxpbWl0OjoKKwlNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZXNlcnZlIGZvciBjYWNoaW5nIGJhc2Ugb2JqZWN0cworCXRoYXQgbWF5IGJlIHJlZmVyZW5jZWQgYnkgbXVsdGlwbGUgZGVsdGlmaWVkIG9iamVjdHMuICBCeSBzdG9yaW5nIHRoZQorCWVudGlyZSBkZWNvbXByZXNzZWQgYmFzZSBvYmplY3RzIGluIGEgY2FjaGUgR2l0IGlzIGFibGUKKwl0byBhdm9pZCB1bnBhY2tpbmcgYW5kIGRlY29tcHJlc3NpbmcgZnJlcXVlbnRseSB1c2VkIGJhc2UKKwlvYmplY3RzIG11bHRpcGxlIHRpbWVzLgorKworRGVmYXVsdCBpcyA5NiBNaUIgb24gYWxsIHBsYXRmb3Jtcy4gIFRoaXMgc2hvdWxkIGJlIHJlYXNvbmFibGUKK2ZvciBhbGwgdXNlcnMvb3BlcmF0aW5nIHN5c3RlbXMsIGV4Y2VwdCBvbiB0aGUgbGFyZ2VzdCBwcm9qZWN0cy4KK1lvdSBwcm9iYWJseSBkbyBub3QgbmVlZCB0byBhZGp1c3QgdGhpcyB2YWx1ZS4KKysKK0NvbW1vbiB1bml0IHN1ZmZpeGVzIG9mICdrJywgJ20nLCBvciAnZycgYXJlIHN1cHBvcnRlZC4KKworY29yZS5iaWdGaWxlVGhyZXNob2xkOjoKKwlGaWxlcyBsYXJnZXIgdGhhbiB0aGlzIHNpemUgYXJlIHN0b3JlZCBkZWZsYXRlZCwgd2l0aG91dAorCWF0dGVtcHRpbmcgZGVsdGEgY29tcHJlc3Npb24uICBTdG9yaW5nIGxhcmdlIGZpbGVzIHdpdGhvdXQKKwlkZWx0YSBjb21wcmVzc2lvbiBhdm9pZHMgZXhjZXNzaXZlIG1lbW9yeSB1c2FnZSwgYXQgdGhlCisJc2xpZ2h0IGV4cGVuc2Ugb2YgaW5jcmVhc2VkIGRpc2sgdXNhZ2UuIEFkZGl0aW9uYWxseSBmaWxlcworCWxhcmdlciB0aGFuIHRoaXMgc2l6ZSBhcmUgYWx3YXlzIHRyZWF0ZWQgYXMgYmluYXJ5LgorKworRGVmYXVsdCBpcyA1MTIgTWlCIG9uIGFsbCBwbGF0Zm9ybXMuICBUaGlzIHNob3VsZCBiZSByZWFzb25hYmxlCitmb3IgbW9zdCBwcm9qZWN0cyBhcyBzb3VyY2UgY29kZSBhbmQgb3RoZXIgdGV4dCBmaWxlcyBjYW4gc3RpbGwKK2JlIGRlbHRhIGNvbXByZXNzZWQsIGJ1dCBsYXJnZXIgYmluYXJ5IG1lZGlhIGZpbGVzIHdvbid0IGJlLgorKworQ29tbW9uIHVuaXQgc3VmZml4ZXMgb2YgJ2snLCAnbScsIG9yICdnJyBhcmUgc3VwcG9ydGVkLgorCitjb3JlLmV4Y2x1ZGVzRmlsZTo6CisJSW4gYWRkaXRpb24gdG8gJy5naXRpZ25vcmUnIChwZXItZGlyZWN0b3J5KSBhbmQKKwknLmdpdC9pbmZvL2V4Y2x1ZGUnLCBHaXQgbG9va3MgaW50byB0aGlzIGZpbGUgZm9yIHBhdHRlcm5zCisJb2YgZmlsZXMgd2hpY2ggYXJlIG5vdCBtZWFudCB0byBiZSB0cmFja2VkLiAgImB+L2AiIGlzIGV4cGFuZGVkCisJdG8gdGhlIHZhbHVlIG9mIGAkSE9NRWAgYW5kICJgfnVzZXIvYCIgdG8gdGhlIHNwZWNpZmllZCB1c2VyJ3MKKwlob21lIGRpcmVjdG9yeS4gSXRzIGRlZmF1bHQgdmFsdWUgaXMgJFhER19DT05GSUdfSE9NRS9naXQvaWdub3JlLgorCUlmICRYREdfQ09ORklHX0hPTUUgaXMgZWl0aGVyIG5vdCBzZXQgb3IgZW1wdHksICRIT01FLy5jb25maWcvZ2l0L2lnbm9yZQorCWlzIHVzZWQgaW5zdGVhZC4gU2VlIGxpbmtnaXQ6Z2l0aWdub3JlWzVdLgorCitjb3JlLmFza1Bhc3M6OgorCVNvbWUgY29tbWFuZHMgKGUuZy4gc3ZuIGFuZCBodHRwIGludGVyZmFjZXMpIHRoYXQgaW50ZXJhY3RpdmVseQorCWFzayBmb3IgYSBwYXNzd29yZCBjYW4gYmUgdG9sZCB0byB1c2UgYW4gZXh0ZXJuYWwgcHJvZ3JhbSBnaXZlbgorCXZpYSB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZS4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfQVNLUEFTUycKKwllbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgbm90IHNldCwgZmFsbCBiYWNrIHRvIHRoZSB2YWx1ZSBvZiB0aGUKKwknU1NIX0FTS1BBU1MnIGVudmlyb25tZW50IHZhcmlhYmxlIG9yLCBmYWlsaW5nIHRoYXQsIGEgc2ltcGxlIHBhc3N3b3JkCisJcHJvbXB0LiBUaGUgZXh0ZXJuYWwgcHJvZ3JhbSBzaGFsbCBiZSBnaXZlbiBhIHN1aXRhYmxlIHByb21wdCBhcworCWNvbW1hbmQtbGluZSBhcmd1bWVudCBhbmQgd3JpdGUgdGhlIHBhc3N3b3JkIG9uIGl0cyBTVERPVVQuCisKK2NvcmUuYXR0cmlidXRlc0ZpbGU6OgorCUluIGFkZGl0aW9uIHRvICcuZ2l0YXR0cmlidXRlcycgKHBlci1kaXJlY3RvcnkpIGFuZAorCScuZ2l0L2luZm8vYXR0cmlidXRlcycsIEdpdCBsb29rcyBpbnRvIHRoaXMgZmlsZSBmb3IgYXR0cmlidXRlcworCShzZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdKS4gUGF0aCBleHBhbnNpb25zIGFyZSBtYWRlIHRoZSBzYW1lCisJd2F5IGFzIGZvciBgY29yZS5leGNsdWRlc0ZpbGVgLiBJdHMgZGVmYXVsdCB2YWx1ZSBpcworCSRYREdfQ09ORklHX0hPTUUvZ2l0L2F0dHJpYnV0ZXMuIElmICRYREdfQ09ORklHX0hPTUUgaXMgZWl0aGVyIG5vdAorCXNldCBvciBlbXB0eSwgJEhPTUUvLmNvbmZpZy9naXQvYXR0cmlidXRlcyBpcyB1c2VkIGluc3RlYWQuCisKK2NvcmUuZWRpdG9yOjoKKwlDb21tYW5kcyBzdWNoIGFzIGBjb21taXRgIGFuZCBgdGFnYCB0aGF0IGxldHMgeW91IGVkaXQKKwltZXNzYWdlcyBieSBsYXVuY2hpbmcgYW4gZWRpdG9yIHVzZXMgdGhlIHZhbHVlIG9mIHRoaXMKKwl2YXJpYWJsZSB3aGVuIGl0IGlzIHNldCwgYW5kIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorCWBHSVRfRURJVE9SYCBpcyBub3Qgc2V0LiAgU2VlIGxpbmtnaXQ6Z2l0LXZhclsxXS4KKworY29yZS5jb21tZW50Q2hhcjo6CisJQ29tbWFuZHMgc3VjaCBhcyBgY29tbWl0YCBhbmQgYHRhZ2AgdGhhdCBsZXRzIHlvdSBlZGl0CisJbWVzc2FnZXMgY29uc2lkZXIgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggdGhpcyBjaGFyYWN0ZXIKKwljb21tZW50ZWQsIGFuZCByZW1vdmVzIHRoZW0gYWZ0ZXIgdGhlIGVkaXRvciByZXR1cm5zCisJKGRlZmF1bHQgJyMnKS4KKysKK0lmIHNldCB0byAiYXV0byIsIGBnaXQtY29tbWl0YCB3b3VsZCBzZWxlY3QgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QKK3RoZSBiZWdpbm5pbmcgY2hhcmFjdGVyIG9mIGFueSBsaW5lIGluIGV4aXN0aW5nIGNvbW1pdCBtZXNzYWdlcy4KKworY29yZS5wYWNrZWRSZWZzVGltZW91dDo6CisJVGhlIGxlbmd0aCBvZiB0aW1lLCBpbiBtaWxsaXNlY29uZHMsIHRvIHJldHJ5IHdoZW4gdHJ5aW5nIHRvCisJbG9jayB0aGUgYHBhY2tlZC1yZWZzYCBmaWxlLiBWYWx1ZSAwIG1lYW5zIG5vdCB0byByZXRyeSBhdAorCWFsbDsgLTEgbWVhbnMgdG8gdHJ5IGluZGVmaW5pdGVseS4gRGVmYXVsdCBpcyAxMDAwIChpLmUuLAorCXJldHJ5IGZvciAxIHNlY29uZCkuCisKK3NlcXVlbmNlLmVkaXRvcjo6CisJVGV4dCBlZGl0b3IgdXNlZCBieSBgZ2l0IHJlYmFzZSAtaWAgZm9yIGVkaXRpbmcgdGhlIHJlYmFzZSBpbnN0cnVjdGlvbiBmaWxlLgorCVRoZSB2YWx1ZSBpcyBtZWFudCB0byBiZSBpbnRlcnByZXRlZCBieSB0aGUgc2hlbGwgd2hlbiBpdCBpcyB1c2VkLgorCUl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgR0lUX1NFUVVFTkNFX0VESVRPUmAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisJV2hlbiBub3QgY29uZmlndXJlZCB0aGUgZGVmYXVsdCBjb21taXQgbWVzc2FnZSBlZGl0b3IgaXMgdXNlZCBpbnN0ZWFkLgorCitjb3JlLnBhZ2VyOjoKKwlUZXh0IHZpZXdlciBmb3IgdXNlIGJ5IEdpdCBjb21tYW5kcyAoZS5nLiwgJ2xlc3MnKS4gIFRoZSB2YWx1ZQorCWlzIG1lYW50IHRvIGJlIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbC4gIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlCisJaXMgdGhlIGAkR0lUX1BBR0VSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlbiBgY29yZS5wYWdlcmAKKwljb25maWd1cmF0aW9uLCB0aGVuIGAkUEFHRVJgLCBhbmQgdGhlbiB0aGUgZGVmYXVsdCBjaG9zZW4gYXQKKwljb21waWxlIHRpbWUgKHVzdWFsbHkgJ2xlc3MnKS4KKysKK1doZW4gdGhlIGBMRVNTYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1bnNldCwgR2l0IHNldHMgaXQgdG8gYEZSWGAKKyhpZiBgTEVTU2AgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBHaXQgZG9lcyBub3QgY2hhbmdlIGl0IGF0CithbGwpLiAgSWYgeW91IHdhbnQgdG8gc2VsZWN0aXZlbHkgb3ZlcnJpZGUgR2l0J3MgZGVmYXVsdCBzZXR0aW5nCitmb3IgYExFU1NgLCB5b3UgY2FuIHNldCBgY29yZS5wYWdlcmAgdG8gZS5nLiBgbGVzcyAtU2AuICBUaGlzIHdpbGwKK2JlIHBhc3NlZCB0byB0aGUgc2hlbGwgYnkgR2l0LCB3aGljaCB3aWxsIHRyYW5zbGF0ZSB0aGUgZmluYWwKK2NvbW1hbmQgdG8gYExFU1M9RlJYIGxlc3MgLVNgLiBUaGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc2V0IHRoZQorYFNgIG9wdGlvbiBidXQgdGhlIGNvbW1hbmQgbGluZSBkb2VzLCBpbnN0cnVjdGluZyBsZXNzIHRvIHRydW5jYXRlCitsb25nIGxpbmVzLiBTaW1pbGFybHksIHNldHRpbmcgYGNvcmUucGFnZXJgIHRvIGBsZXNzIC0rRmAgd2lsbAorZGVhY3RpdmF0ZSB0aGUgYEZgIG9wdGlvbiBzcGVjaWZpZWQgYnkgdGhlIGVudmlyb25tZW50IGZyb20gdGhlCitjb21tYW5kLWxpbmUsIGRlYWN0aXZhdGluZyB0aGUgInF1aXQgaWYgb25lIHNjcmVlbiIgYmVoYXZpb3Igb2YKK2BsZXNzYC4gIE9uZSBjYW4gc3BlY2lmaWNhbGx5IGFjdGl2YXRlIHNvbWUgZmxhZ3MgZm9yIHBhcnRpY3VsYXIKK2NvbW1hbmRzOiBmb3IgZXhhbXBsZSwgc2V0dGluZyBgcGFnZXIuYmxhbWVgIHRvIGBsZXNzIC1TYCBlbmFibGVzCitsaW5lIHRydW5jYXRpb24gb25seSBmb3IgYGdpdCBibGFtZWAuCisrCitMaWtld2lzZSwgd2hlbiB0aGUgYExWYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyB1bnNldCwgR2l0IHNldHMgaXQKK3RvIGAtY2AuICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgc2V0dGluZyBieSBleHBvcnRpbmcgYExWYCB3aXRoCithbm90aGVyIHZhbHVlIG9yIHNldHRpbmcgYGNvcmUucGFnZXJgIHRvIGBsdiArY2AuCisKK2NvcmUud2hpdGVzcGFjZTo6CisJQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBjb21tb24gd2hpdGVzcGFjZSBwcm9ibGVtcyB0bworCW5vdGljZS4gICdnaXQgZGlmZicgd2lsbCB1c2UgYGNvbG9yLmRpZmYud2hpdGVzcGFjZWAgdG8KKwloaWdobGlnaHQgdGhlbSwgYW5kICdnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWVycm9yJyB3aWxsCisJY29uc2lkZXIgdGhlbSBhcyBlcnJvcnMuICBZb3UgY2FuIHByZWZpeCBgLWAgdG8gZGlzYWJsZQorCWFueSBvZiB0aGVtIChlLmcuIGAtdHJhaWxpbmctc3BhY2VgKToKKysKKyogYGJsYW5rLWF0LWVvbGAgdHJlYXRzIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUKKyAgYXMgYW4gZXJyb3IgKGVuYWJsZWQgYnkgZGVmYXVsdCkuCisqIGBzcGFjZS1iZWZvcmUtdGFiYCB0cmVhdHMgYSBzcGFjZSBjaGFyYWN0ZXIgdGhhdCBhcHBlYXJzIGltbWVkaWF0ZWx5CisgIGJlZm9yZSBhIHRhYiBjaGFyYWN0ZXIgaW4gdGhlIGluaXRpYWwgaW5kZW50IHBhcnQgb2YgdGhlIGxpbmUgYXMgYW4KKyAgZXJyb3IgKGVuYWJsZWQgYnkgZGVmYXVsdCkuCisqIGBpbmRlbnQtd2l0aC1ub24tdGFiYCB0cmVhdHMgYSBsaW5lIHRoYXQgaXMgaW5kZW50ZWQgd2l0aCBzcGFjZQorICBjaGFyYWN0ZXJzIGluc3RlYWQgb2YgdGhlIGVxdWl2YWxlbnQgdGFicyBhcyBhbiBlcnJvciAobm90IGVuYWJsZWQgYnkKKyAgZGVmYXVsdCkuCisqIGB0YWItaW4taW5kZW50YCB0cmVhdHMgYSB0YWIgY2hhcmFjdGVyIGluIHRoZSBpbml0aWFsIGluZGVudCBwYXJ0IG9mCisgIHRoZSBsaW5lIGFzIGFuIGVycm9yIChub3QgZW5hYmxlZCBieSBkZWZhdWx0KS4KKyogYGJsYW5rLWF0LWVvZmAgdHJlYXRzIGJsYW5rIGxpbmVzIGFkZGVkIGF0IHRoZSBlbmQgb2YgZmlsZSBhcyBhbiBlcnJvcgorICAoZW5hYmxlZCBieSBkZWZhdWx0KS4KKyogYHRyYWlsaW5nLXNwYWNlYCBpcyBhIHNob3J0LWhhbmQgdG8gY292ZXIgYm90aCBgYmxhbmstYXQtZW9sYCBhbmQKKyAgYGJsYW5rLWF0LWVvZmAuCisqIGBjci1hdC1lb2xgIHRyZWF0cyBhIGNhcnJpYWdlLXJldHVybiBhdCB0aGUgZW5kIG9mIGxpbmUgYXMKKyAgcGFydCBvZiB0aGUgbGluZSB0ZXJtaW5hdG9yLCBpLmUuIHdpdGggaXQsIGB0cmFpbGluZy1zcGFjZWAKKyAgZG9lcyBub3QgdHJpZ2dlciBpZiB0aGUgY2hhcmFjdGVyIGJlZm9yZSBzdWNoIGEgY2FycmlhZ2UtcmV0dXJuCisgIGlzIG5vdCBhIHdoaXRlc3BhY2UgKG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQpLgorKiBgdGFid2lkdGg9PG4+YCB0ZWxscyBob3cgbWFueSBjaGFyYWN0ZXIgcG9zaXRpb25zIGEgdGFiIG9jY3VwaWVzOyB0aGlzCisgIGlzIHJlbGV2YW50IGZvciBgaW5kZW50LXdpdGgtbm9uLXRhYmAgYW5kIHdoZW4gR2l0IGZpeGVzIGB0YWItaW4taW5kZW50YAorICBlcnJvcnMuIFRoZSBkZWZhdWx0IHRhYiB3aWR0aCBpcyA4LiBBbGxvd2VkIHZhbHVlcyBhcmUgMSB0byA2My4KKworY29yZS5mc3luY09iamVjdEZpbGVzOjoKKwlUaGlzIGJvb2xlYW4gd2lsbCBlbmFibGUgJ2ZzeW5jKCknIHdoZW4gd3JpdGluZyBvYmplY3QgZmlsZXMuCisrCitUaGlzIGlzIGEgdG90YWwgd2FzdGUgb2YgdGltZSBhbmQgZWZmb3J0IG9uIGEgZmlsZXN5c3RlbSB0aGF0IG9yZGVycworZGF0YSB3cml0ZXMgcHJvcGVybHksIGJ1dCBjYW4gYmUgdXNlZnVsIGZvciBmaWxlc3lzdGVtcyB0aGF0IGRvIG5vdCB1c2UKK2pvdXJuYWxsaW5nICh0cmFkaXRpb25hbCBVTklYIGZpbGVzeXN0ZW1zKSBvciB0aGF0IG9ubHkgam91cm5hbCBtZXRhZGF0YQorYW5kIG5vdCBmaWxlIGNvbnRlbnRzIChPUyBYJ3MgSEZTKywgb3IgTGludXggZXh0MyB3aXRoICJkYXRhPXdyaXRlYmFjayIpLgorCitjb3JlLnByZWxvYWRJbmRleDo6CisJRW5hYmxlIHBhcmFsbGVsIGluZGV4IHByZWxvYWQgZm9yIG9wZXJhdGlvbnMgbGlrZSAnZ2l0IGRpZmYnCisrCitUaGlzIGNhbiBzcGVlZCB1cCBvcGVyYXRpb25zIGxpa2UgJ2dpdCBkaWZmJyBhbmQgJ2dpdCBzdGF0dXMnIGVzcGVjaWFsbHkKK29uIGZpbGVzeXN0ZW1zIGxpa2UgTkZTIHRoYXQgaGF2ZSB3ZWFrIGNhY2hpbmcgc2VtYW50aWNzIGFuZCB0aHVzCityZWxhdGl2ZWx5IGhpZ2ggSU8gbGF0ZW5jaWVzLiAgV2hlbiBlbmFibGVkLCBHaXQgd2lsbCBkbyB0aGUKK2luZGV4IGNvbXBhcmlzb24gdG8gdGhlIGZpbGVzeXN0ZW0gZGF0YSBpbiBwYXJhbGxlbCwgYWxsb3dpbmcKK292ZXJsYXBwaW5nIElPJ3MuICBEZWZhdWx0cyB0byB0cnVlLgorCitjb3JlLmNyZWF0ZU9iamVjdDo6CisJWW91IGNhbiBzZXQgdGhpcyB0byAnbGluaycsIGluIHdoaWNoIGNhc2UgYSBoYXJkbGluayBmb2xsb3dlZCBieQorCWEgZGVsZXRlIG9mIHRoZSBzb3VyY2UgYXJlIHVzZWQgdG8gbWFrZSBzdXJlIHRoYXQgb2JqZWN0IGNyZWF0aW9uCisJd2lsbCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nIG9iamVjdHMuCisrCitPbiBzb21lIGZpbGUgc3lzdGVtL29wZXJhdGluZyBzeXN0ZW0gY29tYmluYXRpb25zLCB0aGlzIGlzIHVucmVsaWFibGUuCitTZXQgdGhpcyBjb25maWcgc2V0dGluZyB0byAncmVuYW1lJyB0aGVyZTsgSG93ZXZlciwgVGhpcyB3aWxsIHJlbW92ZSB0aGUKK2NoZWNrIHRoYXQgbWFrZXMgc3VyZSB0aGF0IGV4aXN0aW5nIG9iamVjdCBmaWxlcyB3aWxsIG5vdCBnZXQgb3ZlcndyaXR0ZW4uCisKK2NvcmUubm90ZXNSZWY6OgorCVdoZW4gc2hvd2luZyBjb21taXQgbWVzc2FnZXMsIGFsc28gc2hvdyBub3RlcyB3aGljaCBhcmUgc3RvcmVkIGluCisJdGhlIGdpdmVuIHJlZi4gIFRoZSByZWYgbXVzdCBiZSBmdWxseSBxdWFsaWZpZWQuICBJZiB0aGUgZ2l2ZW4KKwlyZWYgZG9lcyBub3QgZXhpc3QsIGl0IGlzIG5vdCBhbiBlcnJvciBidXQgbWVhbnMgdGhhdCBubworCW5vdGVzIHNob3VsZCBiZSBwcmludGVkLgorKworVGhpcyBzZXR0aW5nIGRlZmF1bHRzIHRvICJyZWZzL25vdGVzL2NvbW1pdHMiLCBhbmQgaXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkKK3RoZSAnR0lUX05PVEVTX1JFRicgZW52aXJvbm1lbnQgdmFyaWFibGUuICBTZWUgbGlua2dpdDpnaXQtbm90ZXNbMV0uCisKK2NvcmUuc3BhcnNlQ2hlY2tvdXQ6OgorCUVuYWJsZSAic3BhcnNlIGNoZWNrb3V0IiBmZWF0dXJlLiBTZWUgc2VjdGlvbiAiU3BhcnNlIGNoZWNrb3V0IiBpbgorCWxpbmtnaXQ6Z2l0LXJlYWQtdHJlZVsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworY29yZS5hYmJyZXY6OgorCVNldCB0aGUgbGVuZ3RoIG9iamVjdCBuYW1lcyBhcmUgYWJicmV2aWF0ZWQgdG8uICBJZiB1bnNwZWNpZmllZCwKKwltYW55IGNvbW1hbmRzIGFiYnJldmlhdGUgdG8gNyBoZXhkaWdpdHMsIHdoaWNoIG1heSBub3QgYmUgZW5vdWdoCisJZm9yIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lcyB0byBzdGF5IHVuaXF1ZSBmb3Igc3VmZmljaWVudGx5IGxvbmcKKwl0aW1lLgorCithZGQuaWdub3JlRXJyb3JzOjoKK2FkZC5pZ25vcmUtZXJyb3JzIChkZXByZWNhdGVkKTo6CisJVGVsbHMgJ2dpdCBhZGQnIHRvIGNvbnRpbnVlIGFkZGluZyBmaWxlcyB3aGVuIHNvbWUgZmlsZXMgY2Fubm90IGJlCisJYWRkZWQgZHVlIHRvIGluZGV4aW5nIGVycm9ycy4gRXF1aXZhbGVudCB0byB0aGUgJy0taWdub3JlLWVycm9ycycKKwlvcHRpb24gb2YgbGlua2dpdDpnaXQtYWRkWzFdLiAgYGFkZC5pZ25vcmUtZXJyb3JzYCBpcyBkZXByZWNhdGVkLAorCWFzIGl0IGRvZXMgbm90IGZvbGxvdyB0aGUgdXN1YWwgbmFtaW5nIGNvbnZlbnRpb24gZm9yIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZXMuCisKK2FsaWFzLio6OgorCUNvbW1hbmQgYWxpYXNlcyBmb3IgdGhlIGxpbmtnaXQ6Z2l0WzFdIGNvbW1hbmQgd3JhcHBlciAtIGUuZy4KKwlhZnRlciBkZWZpbmluZyAiYWxpYXMubGFzdCA9IGNhdC1maWxlIGNvbW1pdCBIRUFEIiwgdGhlIGludm9jYXRpb24KKwkiZ2l0IGxhc3QiIGlzIGVxdWl2YWxlbnQgdG8gImdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCIuIFRvIGF2b2lkCisJY29uZnVzaW9uIGFuZCB0cm91YmxlcyB3aXRoIHNjcmlwdCB1c2FnZSwgYWxpYXNlcyB0aGF0CisJaGlkZSBleGlzdGluZyBHaXQgY29tbWFuZHMgYXJlIGlnbm9yZWQuIEFyZ3VtZW50cyBhcmUgc3BsaXQgYnkKKwlzcGFjZXMsIHRoZSB1c3VhbCBzaGVsbCBxdW90aW5nIGFuZCBlc2NhcGluZyBpcyBzdXBwb3J0ZWQuCisJQSBxdW90ZSBwYWlyIG9yIGEgYmFja3NsYXNoIGNhbiBiZSB1c2VkIHRvIHF1b3RlIHRoZW0uCisrCitJZiB0aGUgYWxpYXMgZXhwYW5zaW9uIGlzIHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb24gcG9pbnQsCitpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBzaGVsbCBjb21tYW5kLiAgRm9yIGV4YW1wbGUsIGRlZmluaW5nCisiYWxpYXMubmV3ID0gIWdpdGsgLS1hbGwgLS1ub3QgT1JJR19IRUFEIiwgdGhlIGludm9jYXRpb24KKyJnaXQgbmV3IiBpcyBlcXVpdmFsZW50IHRvIHJ1bm5pbmcgdGhlIHNoZWxsIGNvbW1hbmQKKyJnaXRrIC0tYWxsIC0tbm90IE9SSUdfSEVBRCIuICBOb3RlIHRoYXQgc2hlbGwgY29tbWFuZHMgd2lsbCBiZQorZXhlY3V0ZWQgZnJvbSB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiBhIHJlcG9zaXRvcnksIHdoaWNoIG1heQorbm90IG5lY2Vzc2FyaWx5IGJlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKydHSVRfUFJFRklYJyBpcyBzZXQgYXMgcmV0dXJuZWQgYnkgcnVubmluZyAnZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4JworZnJvbSB0aGUgb3JpZ2luYWwgY3VycmVudCBkaXJlY3RvcnkuIFNlZSBsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0uCisKK2FtLmtlZXBjcjo6CisJSWYgdHJ1ZSwgZ2l0LWFtIHdpbGwgY2FsbCBnaXQtbWFpbHNwbGl0IGZvciBwYXRjaGVzIGluIG1ib3ggZm9ybWF0CisJd2l0aCBwYXJhbWV0ZXIgJy0ta2VlcC1jcicuIEluIHRoaXMgY2FzZSBnaXQtbWFpbHNwbGl0IHdpbGwKKwlub3QgcmVtb3ZlIGBccmAgZnJvbSBsaW5lcyBlbmRpbmcgd2l0aCBgXHJcbmAuIENhbiBiZSBvdmVycmlkZGVuCisJYnkgZ2l2aW5nICctLW5vLWtlZXAtY3InIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKwlTZWUgbGlua2dpdDpnaXQtYW1bMV0sIGxpbmtnaXQ6Z2l0LW1haWxzcGxpdFsxXS4KKworYW0udGhyZWVXYXk6OgorCUJ5IGRlZmF1bHQsIGBnaXQgYW1gIHdpbGwgZmFpbCBpZiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkgY2xlYW5seS4gV2hlbgorCXNldCB0byB0cnVlLCB0aGlzIHNldHRpbmcgdGVsbHMgYGdpdCBhbWAgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlIGlmCisJdGhlIHBhdGNoIHJlY29yZHMgdGhlIGlkZW50aXR5IG9mIGJsb2JzIGl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvIGFuZAorCXdlIGhhdmUgdGhvc2UgYmxvYnMgYXZhaWxhYmxlIGxvY2FsbHkgKGVxdWl2YWxlbnQgdG8gZ2l2aW5nIHRoZSBgLS0zd2F5YAorCW9wdGlvbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUpLiBEZWZhdWx0cyB0byBgZmFsc2VgLgorCVNlZSBsaW5rZ2l0OmdpdC1hbVsxXS4KKworYXBwbHkuaWdub3JlV2hpdGVzcGFjZTo6CisJV2hlbiBzZXQgdG8gJ2NoYW5nZScsIHRlbGxzICdnaXQgYXBwbHknIHRvIGlnbm9yZSBjaGFuZ2VzIGluCisJd2hpdGVzcGFjZSwgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSAnLS1pZ25vcmUtc3BhY2UtY2hhbmdlJworCW9wdGlvbi4KKwlXaGVuIHNldCB0byBvbmUgb2Y6IG5vLCBub25lLCBuZXZlciwgZmFsc2UgdGVsbHMgJ2dpdCBhcHBseScgdG8KKwlyZXNwZWN0IGFsbCB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzLgorCVNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXS4KKworYXBwbHkud2hpdGVzcGFjZTo6CisJVGVsbHMgJ2dpdCBhcHBseScgaG93IHRvIGhhbmRsZSB3aGl0ZXNwYWNlcywgaW4gdGhlIHNhbWUgd2F5CisJYXMgdGhlICctLXdoaXRlc3BhY2UnIG9wdGlvbi4gU2VlIGxpbmtnaXQ6Z2l0LWFwcGx5WzFdLgorCiticmFuY2guYXV0b1NldHVwTWVyZ2U6OgorCVRlbGxzICdnaXQgYnJhbmNoJyBhbmQgJ2dpdCBjaGVja291dCcgdG8gc2V0IHVwIG5ldyBicmFuY2hlcworCXNvIHRoYXQgbGlua2dpdDpnaXQtcHVsbFsxXSB3aWxsIGFwcHJvcHJpYXRlbHkgbWVyZ2UgZnJvbSB0aGUKKwlzdGFydGluZyBwb2ludCBicmFuY2guIE5vdGUgdGhhdCBldmVuIGlmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZXQsCisJdGhpcyBiZWhhdmlvciBjYW4gYmUgY2hvc2VuIHBlci1icmFuY2ggdXNpbmcgdGhlIGAtLXRyYWNrYAorCWFuZCBgLS1uby10cmFja2Agb3B0aW9ucy4gVGhlIHZhbGlkIHNldHRpbmdzIGFyZTogYGZhbHNlYCAtLSBubworCWF1dG9tYXRpYyBzZXR1cCBpcyBkb25lOyBgdHJ1ZWAgLS0gYXV0b21hdGljIHNldHVwIGlzIGRvbmUgd2hlbiB0aGUKKwlzdGFydGluZyBwb2ludCBpcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2g7IGBhbHdheXNgIC0tCisJYXV0b21hdGljIHNldHVwIGlzIGRvbmUgd2hlbiB0aGUgc3RhcnRpbmcgcG9pbnQgaXMgZWl0aGVyIGEKKwlsb2NhbCBicmFuY2ggb3IgcmVtb3RlLXRyYWNraW5nCisJYnJhbmNoLiBUaGlzIG9wdGlvbiBkZWZhdWx0cyB0byB0cnVlLgorCiticmFuY2guYXV0b1NldHVwUmViYXNlOjoKKwlXaGVuIGEgbmV3IGJyYW5jaCBpcyBjcmVhdGVkIHdpdGggJ2dpdCBicmFuY2gnIG9yICdnaXQgY2hlY2tvdXQnCisJdGhhdCB0cmFja3MgYW5vdGhlciBicmFuY2gsIHRoaXMgdmFyaWFibGUgdGVsbHMgR2l0IHRvIHNldAorCXVwIHB1bGwgdG8gcmViYXNlIGluc3RlYWQgb2YgbWVyZ2UgKHNlZSAiYnJhbmNoLjxuYW1lPi5yZWJhc2UiKS4KKwlXaGVuIGBuZXZlcmAsIHJlYmFzZSBpcyBuZXZlciBhdXRvbWF0aWNhbGx5IHNldCB0byB0cnVlLgorCVdoZW4gYGxvY2FsYCwgcmViYXNlIGlzIHNldCB0byB0cnVlIGZvciB0cmFja2VkIGJyYW5jaGVzIG9mCisJb3RoZXIgbG9jYWwgYnJhbmNoZXMuCisJV2hlbiBgcmVtb3RlYCwgcmViYXNlIGlzIHNldCB0byB0cnVlIGZvciB0cmFja2VkIGJyYW5jaGVzIG9mCisJcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLgorCVdoZW4gYGFsd2F5c2AsIHJlYmFzZSB3aWxsIGJlIHNldCB0byB0cnVlIGZvciBhbGwgdHJhY2tpbmcKKwlicmFuY2hlcy4KKwlTZWUgImJyYW5jaC5hdXRvU2V0dXBNZXJnZSIgZm9yIGRldGFpbHMgb24gaG93IHRvIHNldCB1cCBhCisJYnJhbmNoIHRvIHRyYWNrIGFub3RoZXIgYnJhbmNoLgorCVRoaXMgb3B0aW9uIGRlZmF1bHRzIHRvIG5ldmVyLgorCiticmFuY2guPG5hbWU+LnJlbW90ZTo6CisJV2hlbiBvbiBicmFuY2ggPG5hbWU+LCBpdCB0ZWxscyAnZ2l0IGZldGNoJyBhbmQgJ2dpdCBwdXNoJworCXdoaWNoIHJlbW90ZSB0byBmZXRjaCBmcm9tL3B1c2ggdG8uICBUaGUgcmVtb3RlIHRvIHB1c2ggdG8KKwltYXkgYmUgb3ZlcnJpZGRlbiB3aXRoIGByZW1vdGUucHVzaERlZmF1bHRgIChmb3IgYWxsIGJyYW5jaGVzKS4KKwlUaGUgcmVtb3RlIHRvIHB1c2ggdG8sIGZvciB0aGUgY3VycmVudCBicmFuY2gsIG1heSBiZSBmdXJ0aGVyCisJb3ZlcnJpZGRlbiBieSBgYnJhbmNoLjxuYW1lPi5wdXNoUmVtb3RlYC4gIElmIG5vIHJlbW90ZSBpcworCWNvbmZpZ3VyZWQsIG9yIGlmIHlvdSBhcmUgbm90IG9uIGFueSBicmFuY2gsIGl0IGRlZmF1bHRzIHRvCisJYG9yaWdpbmAgZm9yIGZldGNoaW5nIGFuZCBgcmVtb3RlLnB1c2hEZWZhdWx0YCBmb3IgcHVzaGluZy4KKwlBZGRpdGlvbmFsbHksIGAuYCAoYSBwZXJpb2QpIGlzIHRoZSBjdXJyZW50IGxvY2FsIHJlcG9zaXRvcnkKKwkoYSBkb3QtcmVwb3NpdG9yeSksIHNlZSBgYnJhbmNoLjxuYW1lPi5tZXJnZWAncyBmaW5hbCBub3RlIGJlbG93LgorCiticmFuY2guPG5hbWU+LnB1c2hSZW1vdGU6OgorCVdoZW4gb24gYnJhbmNoIDxuYW1lPiwgaXQgb3ZlcnJpZGVzIGBicmFuY2guPG5hbWU+LnJlbW90ZWAgZm9yCisJcHVzaGluZy4gIEl0IGFsc28gb3ZlcnJpZGVzIGByZW1vdGUucHVzaERlZmF1bHRgIGZvciBwdXNoaW5nCisJZnJvbSBicmFuY2ggPG5hbWU+LiAgV2hlbiB5b3UgcHVsbCBmcm9tIG9uZSBwbGFjZSAoZS5nLiB5b3VyCisJdXBzdHJlYW0pIGFuZCBwdXNoIHRvIGFub3RoZXIgcGxhY2UgKGUuZy4geW91ciBvd24gcHVibGlzaGluZworCXJlcG9zaXRvcnkpLCB5b3Ugd291bGQgd2FudCB0byBzZXQgYHJlbW90ZS5wdXNoRGVmYXVsdGAgdG8KKwlzcGVjaWZ5IHRoZSByZW1vdGUgdG8gcHVzaCB0byBmb3IgYWxsIGJyYW5jaGVzLCBhbmQgdXNlIHRoaXMKKwlvcHRpb24gdG8gb3ZlcnJpZGUgaXQgZm9yIGEgc3BlY2lmaWMgYnJhbmNoLgorCiticmFuY2guPG5hbWU+Lm1lcmdlOjoKKwlEZWZpbmVzLCB0b2dldGhlciB3aXRoIGJyYW5jaC48bmFtZT4ucmVtb3RlLCB0aGUgdXBzdHJlYW0gYnJhbmNoCisJZm9yIHRoZSBnaXZlbiBicmFuY2guIEl0IHRlbGxzICdnaXQgZmV0Y2gnLydnaXQgcHVsbCcvJ2dpdCByZWJhc2UnIHdoaWNoCisJYnJhbmNoIHRvIG1lcmdlIGFuZCBjYW4gYWxzbyBhZmZlY3QgJ2dpdCBwdXNoJyAoc2VlIHB1c2guZGVmYXVsdCkuCisJV2hlbiBpbiBicmFuY2ggPG5hbWU+LCBpdCB0ZWxscyAnZ2l0IGZldGNoJyB0aGUgZGVmYXVsdAorCXJlZnNwZWMgdG8gYmUgbWFya2VkIGZvciBtZXJnaW5nIGluIEZFVENIX0hFQUQuIFRoZSB2YWx1ZSBpcworCWhhbmRsZWQgbGlrZSB0aGUgcmVtb3RlIHBhcnQgb2YgYSByZWZzcGVjLCBhbmQgbXVzdCBtYXRjaCBhCisJcmVmIHdoaWNoIGlzIGZldGNoZWQgZnJvbSB0aGUgcmVtb3RlIGdpdmVuIGJ5CisJImJyYW5jaC48bmFtZT4ucmVtb3RlIi4KKwlUaGUgbWVyZ2UgaW5mb3JtYXRpb24gaXMgdXNlZCBieSAnZ2l0IHB1bGwnICh3aGljaCBhdCBmaXJzdCBjYWxscworCSdnaXQgZmV0Y2gnKSB0byBsb29rdXAgdGhlIGRlZmF1bHQgYnJhbmNoIGZvciBtZXJnaW5nLiBXaXRob3V0CisJdGhpcyBvcHRpb24sICdnaXQgcHVsbCcgZGVmYXVsdHMgdG8gbWVyZ2UgdGhlIGZpcnN0IHJlZnNwZWMgZmV0Y2hlZC4KKwlTcGVjaWZ5IG11bHRpcGxlIHZhbHVlcyB0byBnZXQgYW4gb2N0b3B1cyBtZXJnZS4KKwlJZiB5b3Ugd2lzaCB0byBzZXR1cCAnZ2l0IHB1bGwnIHNvIHRoYXQgaXQgbWVyZ2VzIGludG8gPG5hbWU+IGZyb20KKwlhbm90aGVyIGJyYW5jaCBpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeSwgeW91IGNhbiBwb2ludAorCWJyYW5jaC48bmFtZT4ubWVyZ2UgdG8gdGhlIGRlc2lyZWQgYnJhbmNoLCBhbmQgdXNlIHRoZSByZWxhdGl2ZSBwYXRoCisJc2V0dGluZyBgLmAgKGEgcGVyaW9kKSBmb3IgYnJhbmNoLjxuYW1lPi5yZW1vdGUuCisKK2JyYW5jaC48bmFtZT4ubWVyZ2VPcHRpb25zOjoKKwlTZXRzIGRlZmF1bHQgb3B0aW9ucyBmb3IgbWVyZ2luZyBpbnRvIGJyYW5jaCA8bmFtZT4uIFRoZSBzeW50YXggYW5kCisJc3VwcG9ydGVkIG9wdGlvbnMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIG9mIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdLCBidXQKKwlvcHRpb24gdmFsdWVzIGNvbnRhaW5pbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZSBjdXJyZW50bHkgbm90CisJc3VwcG9ydGVkLgorCiticmFuY2guPG5hbWU+LnJlYmFzZTo6CisJV2hlbiB0cnVlLCByZWJhc2UgdGhlIGJyYW5jaCA8bmFtZT4gb24gdG9wIG9mIHRoZSBmZXRjaGVkIGJyYW5jaCwKKwlpbnN0ZWFkIG9mIG1lcmdpbmcgdGhlIGRlZmF1bHQgYnJhbmNoIGZyb20gdGhlIGRlZmF1bHQgcmVtb3RlIHdoZW4KKwkiZ2l0IHB1bGwiIGlzIHJ1bi4gU2VlICJwdWxsLnJlYmFzZSIgZm9yIGRvaW5nIHRoaXMgaW4gYSBub24KKwlicmFuY2gtc3BlY2lmaWMgbWFubmVyLgorKworV2hlbiBwcmVzZXJ2ZSwgYWxzbyBwYXNzIGAtLXByZXNlcnZlLW1lcmdlc2AgYWxvbmcgdG8gJ2dpdCByZWJhc2UnCitzbyB0aGF0IGxvY2FsbHkgY29tbWl0dGVkIG1lcmdlIGNvbW1pdHMgd2lsbCBub3QgYmUgZmxhdHRlbmVkCitieSBydW5uaW5nICdnaXQgcHVsbCcuCisrCisqTk9URSo6IHRoaXMgaXMgYSBwb3NzaWJseSBkYW5nZXJvdXMgb3BlcmF0aW9uOyBkbyAqbm90KiB1c2UKK2l0IHVubGVzcyB5b3UgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIChzZWUgbGlua2dpdDpnaXQtcmViYXNlWzFdCitmb3IgZGV0YWlscykuCisKK2JyYW5jaC48bmFtZT4uZGVzY3JpcHRpb246OgorCUJyYW5jaCBkZXNjcmlwdGlvbiwgY2FuIGJlIGVkaXRlZCB3aXRoCisJYGdpdCBicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uYC4gQnJhbmNoIGRlc2NyaXB0aW9uIGlzCisJYXV0b21hdGljYWxseSBhZGRlZCBpbiB0aGUgZm9ybWF0LXBhdGNoIGNvdmVyIGxldHRlciBvcgorCXJlcXVlc3QtcHVsbCBzdW1tYXJ5LgorCiticm93c2VyLjx0b29sPi5jbWQ6OgorCVNwZWNpZnkgdGhlIGNvbW1hbmQgdG8gaW52b2tlIHRoZSBzcGVjaWZpZWQgYnJvd3Nlci4gVGhlCisJc3BlY2lmaWVkIGNvbW1hbmQgaXMgZXZhbHVhdGVkIGluIHNoZWxsIHdpdGggdGhlIFVSTHMgcGFzc2VkCisJYXMgYXJndW1lbnRzLiAoU2VlIGxpbmtnaXQ6Z2l0LXdlYntsaXRkZH1icm93c2VbMV0uKQorCiticm93c2VyLjx0b29sPi5wYXRoOjoKKwlPdmVycmlkZSB0aGUgcGF0aCBmb3IgdGhlIGdpdmVuIHRvb2wgdGhhdCBtYXkgYmUgdXNlZCB0bworCWJyb3dzZSBIVE1MIGhlbHAgKHNlZSAnLXcnIG9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1oZWxwWzFdKSBvciBhCisJd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYiAoc2VlIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdKS4KKworY2xlYW4ucmVxdWlyZUZvcmNlOjoKKwlBIGJvb2xlYW4gdG8gbWFrZSBnaXQtY2xlYW4gZG8gbm90aGluZyB1bmxlc3MgZ2l2ZW4gLWYsCisJLWkgb3IgLW4uICAgRGVmYXVsdHMgdG8gdHJ1ZS4KKworY29sb3IuYnJhbmNoOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3IgaW4gdGhlIG91dHB1dCBvZgorCWxpbmtnaXQ6Z2l0LWJyYW5jaFsxXS4gTWF5IGJlIHNldCB0byBgYWx3YXlzYCwKKwlgZmFsc2VgIChvciBgbmV2ZXJgKSBvciBgYXV0b2AgKG9yIGB0cnVlYCksIGluIHdoaWNoIGNhc2UgY29sb3JzIGFyZSB1c2VkCisJb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgdG8gYSB0ZXJtaW5hbC4gRGVmYXVsdHMgdG8gZmFsc2UuCisKK2NvbG9yLmJyYW5jaC48c2xvdD46OgorCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciBicmFuY2ggY29sb3JhdGlvbi4gYDxzbG90PmAgaXMgb25lIG9mCisJYGN1cnJlbnRgICh0aGUgY3VycmVudCBicmFuY2gpLCBgbG9jYWxgIChhIGxvY2FsIGJyYW5jaCksCisJYHJlbW90ZWAgKGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBpbiByZWZzL3JlbW90ZXMvKSwKKwlgdXBzdHJlYW1gICh1cHN0cmVhbSB0cmFja2luZyBicmFuY2gpLCBgcGxhaW5gIChvdGhlcgorCXJlZnMpLgorCitjb2xvci5kaWZmOjoKKwlXaGV0aGVyIHRvIHVzZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgdG8gYWRkIGNvbG9yIHRvIHBhdGNoZXMuCisJSWYgdGhpcyBpcyBzZXQgdG8gYGFsd2F5c2AsIGxpbmtnaXQ6Z2l0LWRpZmZbMV0sCisJbGlua2dpdDpnaXQtbG9nWzFdLCBhbmQgbGlua2dpdDpnaXQtc2hvd1sxXSB3aWxsIHVzZSBjb2xvcgorCWZvciBhbGwgcGF0Y2hlcy4gIElmIGl0IGlzIHNldCB0byBgdHJ1ZWAgb3IgYGF1dG9gLCB0aG9zZQorCWNvbW1hbmRzIHdpbGwgb25seSB1c2UgY29sb3Igd2hlbiBvdXRwdXQgaXMgdG8gdGhlIHRlcm1pbmFsLgorCURlZmF1bHRzIHRvIGZhbHNlLgorKworVGhpcyBkb2VzIG5vdCBhZmZlY3QgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIG9yIHRoZQorJ2dpdC1kaWZmLXthc3Rlcmlza30nIHBsdW1iaW5nIGNvbW1hbmRzLiAgQ2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlCitjb21tYW5kIGxpbmUgd2l0aCB0aGUgYC0tY29sb3JbPTx3aGVuPl1gIG9wdGlvbi4KKworY29sb3IuZGlmZi48c2xvdD46OgorCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciBkaWZmIGNvbG9yaXphdGlvbi4gIGA8c2xvdD5gIHNwZWNpZmllcworCXdoaWNoIHBhcnQgb2YgdGhlIHBhdGNoIHRvIHVzZSB0aGUgc3BlY2lmaWVkIGNvbG9yLCBhbmQgaXMgb25lCisJb2YgYGNvbnRleHRgIChjb250ZXh0IHRleHQgLSBgcGxhaW5gIGlzIGEgaGlzdG9yaWNhbCBzeW5vbnltKSwKKwlgbWV0YWAgKG1ldGFpbmZvcm1hdGlvbiksIGBmcmFnYAorCShodW5rIGhlYWRlciksICdmdW5jJyAoZnVuY3Rpb24gaW4gaHVuayBoZWFkZXIpLCBgb2xkYCAocmVtb3ZlZCBsaW5lcyksCisJYG5ld2AgKGFkZGVkIGxpbmVzKSwgYGNvbW1pdGAgKGNvbW1pdCBoZWFkZXJzKSwgb3IgYHdoaXRlc3BhY2VgCisJKGhpZ2hsaWdodGluZyB3aGl0ZXNwYWNlIGVycm9ycykuCisKK2NvbG9yLmRlY29yYXRlLjxzbG90Pjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yICdnaXQgbG9nIC0tZGVjb3JhdGUnIG91dHB1dC4gIGA8c2xvdD5gIGlzIG9uZQorCW9mIGBicmFuY2hgLCBgcmVtb3RlQnJhbmNoYCwgYHRhZ2AsIGBzdGFzaGAgb3IgYEhFQURgIGZvciBsb2NhbAorCWJyYW5jaGVzLCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMsIHRhZ3MsIHN0YXNoIGFuZCBIRUFELCByZXNwZWN0aXZlbHkuCisKK2NvbG9yLmdyZXA6OgorCVdoZW4gc2V0IHRvIGBhbHdheXNgLCBhbHdheXMgaGlnaGxpZ2h0IG1hdGNoZXMuICBXaGVuIGBmYWxzZWAgKG9yCisJYG5ldmVyYCksIG5ldmVyLiAgV2hlbiBzZXQgdG8gYHRydWVgIG9yIGBhdXRvYCwgdXNlIGNvbG9yIG9ubHkKKwl3aGVuIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiB0byB0aGUgdGVybWluYWwuICBEZWZhdWx0cyB0byBgZmFsc2VgLgorCitjb2xvci5ncmVwLjxzbG90Pjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yIGdyZXAgY29sb3JpemF0aW9uLiAgYDxzbG90PmAgc3BlY2lmaWVzIHdoaWNoCisJcGFydCBvZiB0aGUgbGluZSB0byB1c2UgdGhlIHNwZWNpZmllZCBjb2xvciwgYW5kIGlzIG9uZSBvZgorKworLS0KK2Bjb250ZXh0YDs7CisJbm9uLW1hdGNoaW5nIHRleHQgaW4gY29udGV4dCBsaW5lcyAod2hlbiB1c2luZyBgLUFgLCBgLUJgLCBvciBgLUNgKQorYGZpbGVuYW1lYDs7CisJZmlsZW5hbWUgcHJlZml4ICh3aGVuIG5vdCB1c2luZyBgLWhgKQorYGZ1bmN0aW9uYDs7CisJZnVuY3Rpb24gbmFtZSBsaW5lcyAod2hlbiB1c2luZyBgLXBgKQorYGxpbmVudW1iZXJgOzsKKwlsaW5lIG51bWJlciBwcmVmaXggKHdoZW4gdXNpbmcgYC1uYCkKK2BtYXRjaGA7OworCW1hdGNoaW5nIHRleHQgKHNhbWUgYXMgc2V0dGluZyBgbWF0Y2hDb250ZXh0YCBhbmQgYG1hdGNoU2VsZWN0ZWRgKQorYG1hdGNoQ29udGV4dGA7OworCW1hdGNoaW5nIHRleHQgaW4gY29udGV4dCBsaW5lcworYG1hdGNoU2VsZWN0ZWRgOzsKKwltYXRjaGluZyB0ZXh0IGluIHNlbGVjdGVkIGxpbmVzCitgc2VsZWN0ZWRgOzsKKwlub24tbWF0Y2hpbmcgdGV4dCBpbiBzZWxlY3RlZCBsaW5lcworYHNlcGFyYXRvcmA7OworCXNlcGFyYXRvcnMgYmV0d2VlbiBmaWVsZHMgb24gYSBsaW5lIChgOmAsIGAtYCwgYW5kIGA9YCkKKwlhbmQgYmV0d2VlbiBodW5rcyAoYC0tYCkKKy0tCisKK2NvbG9yLmludGVyYWN0aXZlOjoKKwlXaGVuIHNldCB0byBgYWx3YXlzYCwgYWx3YXlzIHVzZSBjb2xvcnMgZm9yIGludGVyYWN0aXZlIHByb21wdHMKKwlhbmQgZGlzcGxheXMgKHN1Y2ggYXMgdGhvc2UgdXNlZCBieSAiZ2l0LWFkZCAtLWludGVyYWN0aXZlIiBhbmQKKwkiZ2l0LWNsZWFuIC0taW50ZXJhY3RpdmUiKS4gV2hlbiBmYWxzZSAob3IgYG5ldmVyYCksIG5ldmVyLgorCVdoZW4gc2V0IHRvIGB0cnVlYCBvciBgYXV0b2AsIHVzZSBjb2xvcnMgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMKKwl0byB0aGUgdGVybWluYWwuIERlZmF1bHRzIHRvIGZhbHNlLgorCitjb2xvci5pbnRlcmFjdGl2ZS48c2xvdD46OgorCVVzZSBjdXN0b21pemVkIGNvbG9yIGZvciAnZ2l0IGFkZCAtLWludGVyYWN0aXZlJyBhbmQgJ2dpdCBjbGVhbgorCS0taW50ZXJhY3RpdmUnIG91dHB1dC4gYDxzbG90PmAgbWF5IGJlIGBwcm9tcHRgLCBgaGVhZGVyYCwgYGhlbHBgCisJb3IgYGVycm9yYCwgZm9yIGZvdXIgZGlzdGluY3QgdHlwZXMgb2Ygbm9ybWFsIG91dHB1dCBmcm9tCisJaW50ZXJhY3RpdmUgY29tbWFuZHMuCisKK2NvbG9yLnBhZ2VyOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgY29sb3JlZCBvdXRwdXQgd2hlbiB0aGUgcGFnZXIgaXMgaW4KKwl1c2UgKGRlZmF1bHQgaXMgdHJ1ZSkuCisKK2NvbG9yLnNob3dCcmFuY2g6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvciBpbiB0aGUgb3V0cHV0IG9mCisJbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0uIE1heSBiZSBzZXQgdG8gYGFsd2F5c2AsCisJYGZhbHNlYCAob3IgYG5ldmVyYCkgb3IgYGF1dG9gIChvciBgdHJ1ZWApLCBpbiB3aGljaCBjYXNlIGNvbG9ycyBhcmUgdXNlZAorCW9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIHRvIGEgdGVybWluYWwuIERlZmF1bHRzIHRvIGZhbHNlLgorCitjb2xvci5zdGF0dXM6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSBjb2xvciBpbiB0aGUgb3V0cHV0IG9mCisJbGlua2dpdDpnaXQtc3RhdHVzWzFdLiBNYXkgYmUgc2V0IHRvIGBhbHdheXNgLAorCWBmYWxzZWAgKG9yIGBuZXZlcmApIG9yIGBhdXRvYCAob3IgYHRydWVgKSwgaW4gd2hpY2ggY2FzZSBjb2xvcnMgYXJlIHVzZWQKKwlvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyB0byBhIHRlcm1pbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4KKworY29sb3Iuc3RhdHVzLjxzbG90Pjo6CisJVXNlIGN1c3RvbWl6ZWQgY29sb3IgZm9yIHN0YXR1cyBjb2xvcml6YXRpb24uIGA8c2xvdD5gIGlzCisJb25lIG9mIGBoZWFkZXJgICh0aGUgaGVhZGVyIHRleHQgb2YgdGhlIHN0YXR1cyBtZXNzYWdlKSwKKwlgYWRkZWRgIG9yIGB1cGRhdGVkYCAoZmlsZXMgd2hpY2ggYXJlIGFkZGVkIGJ1dCBub3QgY29tbWl0dGVkKSwKKwlgY2hhbmdlZGAgKGZpbGVzIHdoaWNoIGFyZSBjaGFuZ2VkIGJ1dCBub3QgYWRkZWQgaW4gdGhlIGluZGV4KSwKKwlgdW50cmFja2VkYCAoZmlsZXMgd2hpY2ggYXJlIG5vdCB0cmFja2VkIGJ5IEdpdCksCisJYGJyYW5jaGAgKHRoZSBjdXJyZW50IGJyYW5jaCksCisJYG5vYnJhbmNoYCAodGhlIGNvbG9yIHRoZSAnbm8gYnJhbmNoJyB3YXJuaW5nIGlzIHNob3duIGluLCBkZWZhdWx0aW5nCisJdG8gcmVkKSwgb3IKKwlgdW5tZXJnZWRgIChmaWxlcyB3aGljaCBoYXZlIHVubWVyZ2VkIGNoYW5nZXMpLgorCitjb2xvci51aTo6CisJVGhpcyB2YXJpYWJsZSBkZXRlcm1pbmVzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB2YXJpYWJsZXMgc3VjaAorCWFzIGBjb2xvci5kaWZmYCBhbmQgYGNvbG9yLmdyZXBgIHRoYXQgY29udHJvbCB0aGUgdXNlIG9mIGNvbG9yCisJcGVyIGNvbW1hbmQgZmFtaWx5LiBJdHMgc2NvcGUgd2lsbCBleHBhbmQgYXMgbW9yZSBjb21tYW5kcyBsZWFybgorCWNvbmZpZ3VyYXRpb24gdG8gc2V0IGEgZGVmYXVsdCBmb3IgdGhlIGAtLWNvbG9yYCBvcHRpb24uICBTZXQgaXQKKwl0byBgZmFsc2VgIG9yIGBuZXZlcmAgaWYgeW91IHByZWZlciBHaXQgY29tbWFuZHMgbm90IHRvIHVzZQorCWNvbG9yIHVubGVzcyBlbmFibGVkIGV4cGxpY2l0bHkgd2l0aCBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb24KKwlvciB0aGUgYC0tY29sb3JgIG9wdGlvbi4gU2V0IGl0IHRvIGBhbHdheXNgIGlmIHlvdSB3YW50IGFsbAorCW91dHB1dCBub3QgaW50ZW5kZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24gdG8gdXNlIGNvbG9yLCB0bworCWB0cnVlYCBvciBgYXV0b2AgKHRoaXMgaXMgdGhlIGRlZmF1bHQgc2luY2UgR2l0IDEuOC40KSBpZiB5b3UKKwl3YW50IHN1Y2ggb3V0cHV0IHRvIHVzZSBjb2xvciB3aGVuIHdyaXR0ZW4gdG8gdGhlIHRlcm1pbmFsLgorCitjb2x1bW4udWk6OgorCVNwZWNpZnkgd2hldGhlciBzdXBwb3J0ZWQgY29tbWFuZHMgc2hvdWxkIG91dHB1dCBpbiBjb2x1bW5zLgorCVRoaXMgdmFyaWFibGUgY29uc2lzdHMgb2YgYSBsaXN0IG9mIHRva2VucyBzZXBhcmF0ZWQgYnkgc3BhY2VzCisJb3IgY29tbWFzOgorKworVGhlc2Ugb3B0aW9ucyBjb250cm9sIHdoZW4gdGhlIGZlYXR1cmUgc2hvdWxkIGJlIGVuYWJsZWQKKyhkZWZhdWx0cyB0byAnbmV2ZXInKToKKysKKy0tCitgYWx3YXlzYDs7CisJYWx3YXlzIHNob3cgaW4gY29sdW1ucworYG5ldmVyYDs7CisJbmV2ZXIgc2hvdyBpbiBjb2x1bW5zCitgYXV0b2A7OworCXNob3cgaW4gY29sdW1ucyBpZiB0aGUgb3V0cHV0IGlzIHRvIHRoZSB0ZXJtaW5hbAorLS0KKysKK1RoZXNlIG9wdGlvbnMgY29udHJvbCBsYXlvdXQgKGRlZmF1bHRzIHRvICdjb2x1bW4nKS4gIFNldHRpbmcgYW55CitvZiB0aGVzZSBpbXBsaWVzICdhbHdheXMnIGlmIG5vbmUgb2YgJ2Fsd2F5cycsICduZXZlcicsIG9yICdhdXRvJyBhcmUKK3NwZWNpZmllZC4KKysKKy0tCitgY29sdW1uYDs7CisJZmlsbCBjb2x1bW5zIGJlZm9yZSByb3dzCitgcm93YDs7CisJZmlsbCByb3dzIGJlZm9yZSBjb2x1bW5zCitgcGxhaW5gOzsKKwlzaG93IGluIG9uZSBjb2x1bW4KKy0tCisrCitGaW5hbGx5LCB0aGVzZSBvcHRpb25zIGNhbiBiZSBjb21iaW5lZCB3aXRoIGEgbGF5b3V0IG9wdGlvbiAoZGVmYXVsdHMKK3RvICdub2RlbnNlJyk6CisrCistLQorYGRlbnNlYDs7CisJbWFrZSB1bmVxdWFsIHNpemUgY29sdW1ucyB0byB1dGlsaXplIG1vcmUgc3BhY2UKK2Bub2RlbnNlYDs7CisJbWFrZSBlcXVhbCBzaXplIGNvbHVtbnMKKy0tCisKK2NvbHVtbi5icmFuY2g6OgorCVNwZWNpZnkgd2hldGhlciB0byBvdXRwdXQgYnJhbmNoIGxpc3RpbmcgaW4gYGdpdCBicmFuY2hgIGluIGNvbHVtbnMuCisJU2VlIGBjb2x1bW4udWlgIGZvciBkZXRhaWxzLgorCitjb2x1bW4uY2xlYW46OgorCVNwZWNpZnkgdGhlIGxheW91dCB3aGVuIGxpc3QgaXRlbXMgaW4gYGdpdCBjbGVhbiAtaWAsIHdoaWNoIGFsd2F5cworCXNob3dzIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiBjb2x1bW5zLiBTZWUgYGNvbHVtbi51aWAgZm9yIGRldGFpbHMuCisKK2NvbHVtbi5zdGF0dXM6OgorCVNwZWNpZnkgd2hldGhlciB0byBvdXRwdXQgdW50cmFja2VkIGZpbGVzIGluIGBnaXQgc3RhdHVzYCBpbiBjb2x1bW5zLgorCVNlZSBgY29sdW1uLnVpYCBmb3IgZGV0YWlscy4KKworY29sdW1uLnRhZzo6CisJU3BlY2lmeSB3aGV0aGVyIHRvIG91dHB1dCB0YWcgbGlzdGluZyBpbiBgZ2l0IHRhZ2AgaW4gY29sdW1ucy4KKwlTZWUgYGNvbHVtbi51aWAgZm9yIGRldGFpbHMuCisKK2NvbW1pdC5jbGVhbnVwOjoKKwlUaGlzIHNldHRpbmcgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IG9mIHRoZSBgLS1jbGVhbnVwYCBvcHRpb24gaW4KKwlgZ2l0IGNvbW1pdGAuIFNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gZm9yIGRldGFpbHMuIENoYW5naW5nIHRoZQorCWRlZmF1bHQgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSBhbHdheXMgd2FudCB0byBrZWVwIGxpbmVzIHRoYXQgYmVnaW4KKwl3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIGAjYCBpbiB5b3VyIGxvZyBtZXNzYWdlLCBpbiB3aGljaCBjYXNlIHlvdQorCXdvdWxkIGRvIGBnaXQgY29uZmlnIGNvbW1pdC5jbGVhbnVwIHdoaXRlc3BhY2VgIChub3RlIHRoYXQgeW91IHdpbGwKKwloYXZlIHRvIHJlbW92ZSB0aGUgaGVscCBsaW5lcyB0aGF0IGJlZ2luIHdpdGggYCNgIGluIHRoZSBjb21taXQgbG9nCisJdGVtcGxhdGUgeW91cnNlbGYsIGlmIHlvdSBkbyB0aGlzKS4KKworY29tbWl0LmdwZ1NpZ246OgorCisJQSBib29sZWFuIHRvIHNwZWNpZnkgd2hldGhlciBhbGwgY29tbWl0cyBzaG91bGQgYmUgR1BHIHNpZ25lZC4KKwlVc2Ugb2YgdGhpcyBvcHRpb24gd2hlbiBkb2luZyBvcGVyYXRpb25zIHN1Y2ggYXMgcmViYXNlIGNhbgorCXJlc3VsdCBpbiBhIGxhcmdlIG51bWJlciBvZiBjb21taXRzIGJlaW5nIHNpZ25lZC4gSXQgbWF5IGJlCisJY29udmVuaWVudCB0byB1c2UgYW4gYWdlbnQgdG8gYXZvaWQgdHlwaW5nIHlvdXIgR1BHIHBhc3NwaHJhc2UKKwlzZXZlcmFsIHRpbWVzLgorCitjb21taXQuc3RhdHVzOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgaW5jbHVzaW9uIG9mIHN0YXR1cyBpbmZvcm1hdGlvbiBpbiB0aGUKKwljb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSB3aGVuIHVzaW5nIGFuIGVkaXRvciB0byBwcmVwYXJlIHRoZSBjb21taXQKKwltZXNzYWdlLiAgRGVmYXVsdHMgdG8gdHJ1ZS4KKworY29tbWl0LnRlbXBsYXRlOjoKKwlTcGVjaWZ5IGEgZmlsZSB0byB1c2UgYXMgdGhlIHRlbXBsYXRlIGZvciBuZXcgY29tbWl0IG1lc3NhZ2VzLgorCSJgfi9gIiBpcyBleHBhbmRlZCB0byB0aGUgdmFsdWUgb2YgYCRIT01FYCBhbmQgImB+dXNlci9gIiB0byB0aGUKKwlzcGVjaWZpZWQgdXNlcidzIGhvbWUgZGlyZWN0b3J5LgorCitjcmVkZW50aWFsLmhlbHBlcjo6CisJU3BlY2lmeSBhbiBleHRlcm5hbCBoZWxwZXIgdG8gYmUgY2FsbGVkIHdoZW4gYSB1c2VybmFtZSBvcgorCXBhc3N3b3JkIGNyZWRlbnRpYWwgaXMgbmVlZGVkOyB0aGUgaGVscGVyIG1heSBjb25zdWx0IGV4dGVybmFsCisJc3RvcmFnZSB0byBhdm9pZCBwcm9tcHRpbmcgdGhlIHVzZXIgZm9yIHRoZSBjcmVkZW50aWFscy4gU2VlCisJbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XSBmb3IgZGV0YWlscy4KKworY3JlZGVudGlhbC51c2VIdHRwUGF0aDo6CisJV2hlbiBhY3F1aXJpbmcgY3JlZGVudGlhbHMsIGNvbnNpZGVyIHRoZSAicGF0aCIgY29tcG9uZW50IG9mIGFuIGh0dHAKKwlvciBodHRwcyBVUkwgdG8gYmUgaW1wb3J0YW50LiBEZWZhdWx0cyB0byBmYWxzZS4gU2VlCisJbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworY3JlZGVudGlhbC51c2VybmFtZTo6CisJSWYgbm8gdXNlcm5hbWUgaXMgc2V0IGZvciBhIG5ldHdvcmsgYXV0aGVudGljYXRpb24sIHVzZSB0aGlzIHVzZXJuYW1lCisJYnkgZGVmYXVsdC4gU2VlIGNyZWRlbnRpYWwuPGNvbnRleHQ+LiogYmVsb3csIGFuZAorCWxpbmtnaXQ6Z2l0Y3JlZGVudGlhbHNbN10uCisKK2NyZWRlbnRpYWwuPHVybD4uKjo6CisJQW55IG9mIHRoZSBjcmVkZW50aWFsLiogb3B0aW9ucyBhYm92ZSBjYW4gYmUgYXBwbGllZCBzZWxlY3RpdmVseSB0bworCXNvbWUgY3JlZGVudGlhbHMuIEZvciBleGFtcGxlICJjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20udXNlcm5hbWUiCisJd291bGQgc2V0IHRoZSBkZWZhdWx0IHVzZXJuYW1lIG9ubHkgZm9yIGh0dHBzIGNvbm5lY3Rpb25zIHRvCisJZXhhbXBsZS5jb20uIFNlZSBsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddIGZvciBkZXRhaWxzIG9uIGhvdyBVUkxzIGFyZQorCW1hdGNoZWQuCisKK2luY2x1ZGU6OmRpZmYtY29uZmlnLnR4dFtdCisKK2RpZmZ0b29sLjx0b29sPi5wYXRoOjoKKwlPdmVycmlkZSB0aGUgcGF0aCBmb3IgdGhlIGdpdmVuIHRvb2wuICBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlCisJeW91ciB0b29sIGlzIG5vdCBpbiB0aGUgUEFUSC4KKworZGlmZnRvb2wuPHRvb2w+LmNtZDo6CisJU3BlY2lmeSB0aGUgY29tbWFuZCB0byBpbnZva2UgdGhlIHNwZWNpZmllZCBkaWZmIHRvb2wuCisJVGhlIHNwZWNpZmllZCBjb21tYW5kIGlzIGV2YWx1YXRlZCBpbiBzaGVsbCB3aXRoIHRoZSBmb2xsb3dpbmcKKwl2YXJpYWJsZXMgYXZhaWxhYmxlOiAgJ0xPQ0FMJyBpcyBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeQorCWZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGRpZmYgcHJlLWltYWdlIGFuZCAnUkVNT1RFJworCWlzIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMKKwlvZiB0aGUgZGlmZiBwb3N0LWltYWdlLgorCitkaWZmdG9vbC5wcm9tcHQ6OgorCVByb21wdCBiZWZvcmUgZWFjaCBpbnZvY2F0aW9uIG9mIHRoZSBkaWZmIHRvb2wuCisKK2ZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzOjoKKwlUaGlzIG9wdGlvbiBjYW4gYmUgZWl0aGVyIHNldCB0byBhIGJvb2xlYW4gdmFsdWUgb3IgdG8gJ29uLWRlbWFuZCcuCisJU2V0dGluZyBpdCB0byBhIGJvb2xlYW4gY2hhbmdlcyB0aGUgYmVoYXZpb3Igb2YgZmV0Y2ggYW5kIHB1bGwgdG8KKwl1bmNvbmRpdGlvbmFsbHkgcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZXMgd2hlbiBzZXQgdG8gdHJ1ZSBvciB0byBub3QKKwlyZWN1cnNlIGF0IGFsbCB3aGVuIHNldCB0byBmYWxzZS4gV2hlbiBzZXQgdG8gJ29uLWRlbWFuZCcgKHRoZSBkZWZhdWx0CisJdmFsdWUpLCBmZXRjaCBhbmQgcHVsbCB3aWxsIG9ubHkgcmVjdXJzZSBpbnRvIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZQorCXdoZW4gaXRzIHN1cGVycHJvamVjdCByZXRyaWV2ZXMgYSBjb21taXQgdGhhdCB1cGRhdGVzIHRoZSBzdWJtb2R1bGUncworCXJlZmVyZW5jZS4KKworZmV0Y2guZnNja09iamVjdHM6OgorCUlmIGl0IGlzIHNldCB0byB0cnVlLCBnaXQtZmV0Y2gtcGFjayB3aWxsIGNoZWNrIGFsbCBmZXRjaGVkCisJb2JqZWN0cy4gSXQgd2lsbCBhYm9ydCBpbiB0aGUgY2FzZSBvZiBhIG1hbGZvcm1lZCBvYmplY3Qgb3IgYQorCWJyb2tlbiBsaW5rLiBUaGUgcmVzdWx0IG9mIGFuIGFib3J0IGFyZSBvbmx5IGRhbmdsaW5nIG9iamVjdHMuCisJRGVmYXVsdHMgdG8gZmFsc2UuIElmIG5vdCBzZXQsIHRoZSB2YWx1ZSBvZiBgdHJhbnNmZXIuZnNja09iamVjdHNgCisJaXMgdXNlZCBpbnN0ZWFkLgorCitmZXRjaC51bnBhY2tMaW1pdDo6CisJSWYgdGhlIG51bWJlciBvZiBvYmplY3RzIGZldGNoZWQgb3ZlciB0aGUgR2l0IG5hdGl2ZQorCXRyYW5zZmVyIGlzIGJlbG93IHRoaXMKKwlsaW1pdCwgdGhlbiB0aGUgb2JqZWN0cyB3aWxsIGJlIHVucGFja2VkIGludG8gbG9vc2Ugb2JqZWN0CisJZmlsZXMuIEhvd2V2ZXIgaWYgdGhlIG51bWJlciBvZiByZWNlaXZlZCBvYmplY3RzIGVxdWFscyBvcgorCWV4Y2VlZHMgdGhpcyBsaW1pdCB0aGVuIHRoZSByZWNlaXZlZCBwYWNrIHdpbGwgYmUgc3RvcmVkIGFzCisJYSBwYWNrLCBhZnRlciBhZGRpbmcgYW55IG1pc3NpbmcgZGVsdGEgYmFzZXMuICBTdG9yaW5nIHRoZQorCXBhY2sgZnJvbSBhIHB1c2ggY2FuIG1ha2UgdGhlIHB1c2ggb3BlcmF0aW9uIGNvbXBsZXRlIGZhc3RlciwKKwllc3BlY2lhbGx5IG9uIHNsb3cgZmlsZXN5c3RlbXMuICBJZiBub3Qgc2V0LCB0aGUgdmFsdWUgb2YKKwlgdHJhbnNmZXIudW5wYWNrTGltaXRgIGlzIHVzZWQgaW5zdGVhZC4KKworZmV0Y2gucHJ1bmU6OgorCUlmIHRydWUsIGZldGNoIHdpbGwgYXV0b21hdGljYWxseSBiZWhhdmUgYXMgaWYgdGhlIGAtLXBydW5lYAorCW9wdGlvbiB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gIFNlZSBhbHNvIGByZW1vdGUuPG5hbWU+LnBydW5lYC4KKworZm9ybWF0LmF0dGFjaDo6CisJRW5hYmxlIG11bHRpcGFydC9taXhlZCBhdHRhY2htZW50cyBhcyB0aGUgZGVmYXVsdCBmb3IKKwknZm9ybWF0LXBhdGNoJy4gIFRoZSB2YWx1ZSBjYW4gYWxzbyBiZSBhIGRvdWJsZSBxdW90ZWQgc3RyaW5nCisJd2hpY2ggd2lsbCBlbmFibGUgYXR0YWNobWVudHMgYXMgdGhlIGRlZmF1bHQgYW5kIHNldCB0aGUKKwl2YWx1ZSBhcyB0aGUgYm91bmRhcnkuICBTZWUgdGhlIC0tYXR0YWNoIG9wdGlvbiBpbgorCWxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4KKworZm9ybWF0Lm51bWJlcmVkOjoKKwlBIGJvb2xlYW4gd2hpY2ggY2FuIGVuYWJsZSBvciBkaXNhYmxlIHNlcXVlbmNlIG51bWJlcnMgaW4gcGF0Y2gKKwlzdWJqZWN0cy4gIEl0IGRlZmF1bHRzIHRvICJhdXRvIiB3aGljaCBlbmFibGVzIGl0IG9ubHkgaWYgdGhlcmUKKwlpcyBtb3JlIHRoYW4gb25lIHBhdGNoLiAgSXQgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGFsbAorCW1lc3NhZ2VzIGJ5IHNldHRpbmcgaXQgdG8gInRydWUiIG9yICJmYWxzZSIuICBTZWUgLS1udW1iZXJlZAorCW9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0uCisKK2Zvcm1hdC5oZWFkZXJzOjoKKwlBZGRpdGlvbmFsIGVtYWlsIGhlYWRlcnMgdG8gaW5jbHVkZSBpbiBhIHBhdGNoIHRvIGJlIHN1Ym1pdHRlZAorCWJ5IG1haWwuICBTZWUgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCitmb3JtYXQudG86OgorZm9ybWF0LmNjOjoKKwlBZGRpdGlvbmFsIHJlY2lwaWVudHMgdG8gaW5jbHVkZSBpbiBhIHBhdGNoIHRvIGJlIHN1Ym1pdHRlZAorCWJ5IG1haWwuICBTZWUgdGhlIC0tdG8gYW5kIC0tY2Mgb3B0aW9ucyBpbgorCWxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4KKworZm9ybWF0LnN1YmplY3RQcmVmaXg6OgorCVRoZSBkZWZhdWx0IGZvciBmb3JtYXQtcGF0Y2ggaXMgdG8gb3V0cHV0IGZpbGVzIHdpdGggdGhlICdbUEFUQ0hdJworCXN1YmplY3QgcHJlZml4LiBVc2UgdGhpcyB2YXJpYWJsZSB0byBjaGFuZ2UgdGhhdCBwcmVmaXguCisKK2Zvcm1hdC5zaWduYXR1cmU6OgorCVRoZSBkZWZhdWx0IGZvciBmb3JtYXQtcGF0Y2ggaXMgdG8gb3V0cHV0IGEgc2lnbmF0dXJlIGNvbnRhaW5pbmcKKwl0aGUgR2l0IHZlcnNpb24gbnVtYmVyLiBVc2UgdGhpcyB2YXJpYWJsZSB0byBjaGFuZ2UgdGhhdCBkZWZhdWx0LgorCVNldCB0aGlzIHZhcmlhYmxlIHRvIHRoZSBlbXB0eSBzdHJpbmcgKCIiKSB0byBzdXBwcmVzcworCXNpZ25hdHVyZSBnZW5lcmF0aW9uLgorCitmb3JtYXQuc2lnbmF0dXJlRmlsZTo6CisJV29ya3MganVzdCBsaWtlIGZvcm1hdC5zaWduYXR1cmUgZXhjZXB0IHRoZSBjb250ZW50cyBvZiB0aGUKKwlmaWxlIHNwZWNpZmllZCBieSB0aGlzIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCBhcyB0aGUgc2lnbmF0dXJlLgorCitmb3JtYXQuc3VmZml4OjoKKwlUaGUgZGVmYXVsdCBmb3IgZm9ybWF0LXBhdGNoIGlzIHRvIG91dHB1dCBmaWxlcyB3aXRoIHRoZSBzdWZmaXgKKwlgLnBhdGNoYC4gVXNlIHRoaXMgdmFyaWFibGUgdG8gY2hhbmdlIHRoYXQgc3VmZml4IChtYWtlIHN1cmUgdG8KKwlpbmNsdWRlIHRoZSBkb3QgaWYgeW91IHdhbnQgaXQpLgorCitmb3JtYXQucHJldHR5OjoKKwlUaGUgZGVmYXVsdCBwcmV0dHkgZm9ybWF0IGZvciBsb2cvc2hvdy93aGF0Y2hhbmdlZCBjb21tYW5kLAorCVNlZSBsaW5rZ2l0OmdpdC1sb2dbMV0sIGxpbmtnaXQ6Z2l0LXNob3dbMV0sCisJbGlua2dpdDpnaXQtd2hhdGNoYW5nZWRbMV0uCisKK2Zvcm1hdC50aHJlYWQ6OgorCVRoZSBkZWZhdWx0IHRocmVhZGluZyBzdHlsZSBmb3IgJ2dpdCBmb3JtYXQtcGF0Y2gnLiAgQ2FuIGJlCisJYSBib29sZWFuIHZhbHVlLCBvciBgc2hhbGxvd2Agb3IgYGRlZXBgLiAgYHNoYWxsb3dgIHRocmVhZGluZworCW1ha2VzIGV2ZXJ5IG1haWwgYSByZXBseSB0byB0aGUgaGVhZCBvZiB0aGUgc2VyaWVzLAorCXdoZXJlIHRoZSBoZWFkIGlzIGNob3NlbiBmcm9tIHRoZSBjb3ZlciBsZXR0ZXIsIHRoZQorCWAtLWluLXJlcGx5LXRvYCwgYW5kIHRoZSBmaXJzdCBwYXRjaCBtYWlsLCBpbiB0aGlzIG9yZGVyLgorCWBkZWVwYCB0aHJlYWRpbmcgbWFrZXMgZXZlcnkgbWFpbCBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cyBvbmUuCisJQSB0cnVlIGJvb2xlYW4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgYHNoYWxsb3dgLCBhbmQgYSBmYWxzZQorCXZhbHVlIGRpc2FibGVzIHRocmVhZGluZy4KKworZm9ybWF0LnNpZ25PZmY6OgorCUEgYm9vbGVhbiB2YWx1ZSB3aGljaCBsZXRzIHlvdSBlbmFibGUgdGhlIGAtcy8tLXNpZ25vZmZgIG9wdGlvbiBvZgorCWZvcm1hdC1wYXRjaCBieSBkZWZhdWx0LiAqTm90ZToqIEFkZGluZyB0aGUgU2lnbmVkLW9mZi1ieTogbGluZSB0byBhCisJcGF0Y2ggc2hvdWxkIGJlIGEgY29uc2Npb3VzIGFjdCBhbmQgbWVhbnMgdGhhdCB5b3UgY2VydGlmeSB5b3UgaGF2ZQorCXRoZSByaWdodHMgdG8gc3VibWl0IHRoaXMgd29yayB1bmRlciB0aGUgc2FtZSBvcGVuIHNvdXJjZSBsaWNlbnNlLgorCVBsZWFzZSBzZWUgdGhlICdTdWJtaXR0aW5nUGF0Y2hlcycgZG9jdW1lbnQgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbi4KKworZm9ybWF0LmNvdmVyTGV0dGVyOjoKKwlBIGJvb2xlYW4gdGhhdCBjb250cm9scyB3aGV0aGVyIHRvIGdlbmVyYXRlIGEgY292ZXItbGV0dGVyIHdoZW4KKwlmb3JtYXQtcGF0Y2ggaXMgaW52b2tlZCwgYnV0IGluIGFkZGl0aW9uIGNhbiBiZSBzZXQgdG8gImF1dG8iLCB0bworCWdlbmVyYXRlIGEgY292ZXItbGV0dGVyIG9ubHkgd2hlbiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgcGF0Y2guCisKK2ZpbHRlci48ZHJpdmVyPi5jbGVhbjo6CisJVGhlIGNvbW1hbmQgd2hpY2ggaXMgdXNlZCB0byBjb252ZXJ0IHRoZSBjb250ZW50IG9mIGEgd29ya3RyZWUKKwlmaWxlIHRvIGEgYmxvYiB1cG9uIGNoZWNraW4uICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvcgorCWRldGFpbHMuCisKK2ZpbHRlci48ZHJpdmVyPi5zbXVkZ2U6OgorCVRoZSBjb21tYW5kIHdoaWNoIGlzIHVzZWQgdG8gY29udmVydCB0aGUgY29udGVudCBvZiBhIGJsb2IKKwlvYmplY3QgdG8gYSB3b3JrdHJlZSBmaWxlIHVwb24gY2hlY2tvdXQuICBTZWUKKwlsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK2ZzY2suPG1zZy1pZD46OgorCUFsbG93cyBvdmVycmlkaW5nIHRoZSBtZXNzYWdlIHR5cGUgKGVycm9yLCB3YXJuIG9yIGlnbm9yZSkgb2YgYQorCXNwZWNpZmljIG1lc3NhZ2UgSUQgc3VjaCBhcyBgbWlzc2luZ0VtYWlsYC4KKysKK0ZvciBjb252ZW5pZW5jZSwgZnNjayBwcmVmaXhlcyB0aGUgZXJyb3Ivd2FybmluZyB3aXRoIHRoZSBtZXNzYWdlIElELAorZS5nLiAgIm1pc3NpbmdFbWFpbDogaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIGVtYWlsIiBtZWFucwordGhhdCBzZXR0aW5nIGBmc2NrLm1pc3NpbmdFbWFpbCA9IGlnbm9yZWAgd2lsbCBoaWRlIHRoYXQgaXNzdWUuCisrCitUaGlzIGZlYXR1cmUgaXMgaW50ZW5kZWQgdG8gc3VwcG9ydCB3b3JraW5nIHdpdGggbGVnYWN5IHJlcG9zaXRvcmllcword2hpY2ggY2Fubm90IGJlIHJlcGFpcmVkIHdpdGhvdXQgZGlzcnVwdGl2ZSBjaGFuZ2VzLgorCitmc2NrLnNraXBMaXN0OjoKKwlUaGUgcGF0aCB0byBhIHNvcnRlZCBsaXN0IG9mIG9iamVjdCBuYW1lcyAoaS5lLiBvbmUgU0hBLTEgcGVyCisJbGluZSkgdGhhdCBhcmUga25vd24gdG8gYmUgYnJva2VuIGluIGEgbm9uLWZhdGFsIHdheSBhbmQgc2hvdWxkCisJYmUgaWdub3JlZC4gVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCB3aGVuIGFuIGVzdGFibGlzaGVkIHByb2plY3QKKwlzaG91bGQgYmUgYWNjZXB0ZWQgZGVzcGl0ZSBlYXJseSBjb21taXRzIGNvbnRhaW5pbmcgZXJyb3JzIHRoYXQKKwljYW4gYmUgc2FmZWx5IGlnbm9yZWQgc3VjaCBhcyBpbnZhbGlkIGNvbW1pdHRlciBlbWFpbCBhZGRyZXNzZXMuCisJTm90ZTogY29ycnVwdCBvYmplY3RzIGNhbm5vdCBiZSBza2lwcGVkIHdpdGggdGhpcyBzZXR0aW5nLgorCitnYy5hZ2dyZXNzaXZlRGVwdGg6OgorCVRoZSBkZXB0aCBwYXJhbWV0ZXIgdXNlZCBpbiB0aGUgZGVsdGEgY29tcHJlc3Npb24KKwlhbGdvcml0aG0gdXNlZCBieSAnZ2l0IGdjIC0tYWdncmVzc2l2ZScuICBUaGlzIGRlZmF1bHRzCisJdG8gMjUwLgorCitnYy5hZ2dyZXNzaXZlV2luZG93OjoKKwlUaGUgd2luZG93IHNpemUgcGFyYW1ldGVyIHVzZWQgaW4gdGhlIGRlbHRhIGNvbXByZXNzaW9uCisJYWxnb3JpdGhtIHVzZWQgYnkgJ2dpdCBnYyAtLWFnZ3Jlc3NpdmUnLiAgVGhpcyBkZWZhdWx0cworCXRvIDI1MC4KKworZ2MuYXV0bzo6CisJV2hlbiB0aGVyZSBhcmUgYXBwcm94aW1hdGVseSBtb3JlIHRoYW4gdGhpcyBtYW55IGxvb3NlCisJb2JqZWN0cyBpbiB0aGUgcmVwb3NpdG9yeSwgYGdpdCBnYyAtLWF1dG9gIHdpbGwgcGFjayB0aGVtLgorCVNvbWUgUG9yY2VsYWluIGNvbW1hbmRzIHVzZSB0aGlzIGNvbW1hbmQgdG8gcGVyZm9ybSBhCisJbGlnaHQtd2VpZ2h0IGdhcmJhZ2UgY29sbGVjdGlvbiBmcm9tIHRpbWUgdG8gdGltZS4gIFRoZQorCWRlZmF1bHQgdmFsdWUgaXMgNjcwMC4gIFNldHRpbmcgdGhpcyB0byAwIGRpc2FibGVzIGl0LgorCitnYy5hdXRvUGFja0xpbWl0OjoKKwlXaGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gdGhpcyBtYW55IHBhY2tzIHRoYXQgYXJlIG5vdAorCW1hcmtlZCB3aXRoIGAqLmtlZXBgIGZpbGUgaW4gdGhlIHJlcG9zaXRvcnksIGBnaXQgZ2MKKwktLWF1dG9gIGNvbnNvbGlkYXRlcyB0aGVtIGludG8gb25lIGxhcmdlciBwYWNrLiAgVGhlCisJZGVmYXVsdAl2YWx1ZSBpcyA1MC4gIFNldHRpbmcgdGhpcyB0byAwIGRpc2FibGVzIGl0LgorCitnYy5hdXRvRGV0YWNoOjoKKwlNYWtlIGBnaXQgZ2MgLS1hdXRvYCByZXR1cm4gaW1tZWRpYXRlbHkgYW5kIHJ1biBpbiBiYWNrZ3JvdW5kCisJaWYgdGhlIHN5c3RlbSBzdXBwb3J0cyBpdC4gRGVmYXVsdCBpcyB0cnVlLgorCitnYy5wYWNrUmVmczo6CisJUnVubmluZyBgZ2l0IHBhY2stcmVmc2AgaW4gYSByZXBvc2l0b3J5IHJlbmRlcnMgaXQKKwl1bmNsb25hYmxlIGJ5IEdpdCB2ZXJzaW9ucyBwcmlvciB0byAxLjUuMS4yIG92ZXIgZHVtYgorCXRyYW5zcG9ydHMgc3VjaCBhcyBIVFRQLiAgVGhpcyB2YXJpYWJsZSBkZXRlcm1pbmVzIHdoZXRoZXIKKwknZ2l0IGdjJyBydW5zIGBnaXQgcGFjay1yZWZzYC4gVGhpcyBjYW4gYmUgc2V0IHRvIGBub3RiYXJlYAorCXRvIGVuYWJsZSBpdCB3aXRoaW4gYWxsIG5vbi1iYXJlIHJlcG9zIG9yIGl0IGNhbiBiZSBzZXQgdG8gYQorCWJvb2xlYW4gdmFsdWUuICBUaGUgZGVmYXVsdCBpcyBgdHJ1ZWAuCisKK2djLnBydW5lRXhwaXJlOjoKKwlXaGVuICdnaXQgZ2MnIGlzIHJ1biwgaXQgd2lsbCBjYWxsICdwcnVuZSAtLWV4cGlyZSAyLndlZWtzLmFnbycuCisJT3ZlcnJpZGUgdGhlIGdyYWNlIHBlcmlvZCB3aXRoIHRoaXMgY29uZmlnIHZhcmlhYmxlLiAgVGhlIHZhbHVlCisJIm5vdyIgbWF5IGJlIHVzZWQgdG8gZGlzYWJsZSB0aGlzIGdyYWNlIHBlcmlvZCBhbmQgYWx3YXlzIHBydW5lCisJdW5yZWFjaGFibGUgb2JqZWN0cyBpbW1lZGlhdGVseSwgb3IgIm5ldmVyIiBtYXkgYmUgdXNlZCB0bworCXN1cHByZXNzIHBydW5pbmcuCisKK2djLndvcmt0cmVlUHJ1bmVFeHBpcmU6OgorCVdoZW4gJ2dpdCBnYycgaXMgcnVuLCBpdCBjYWxscworCSdnaXQgd29ya3RyZWUgcHJ1bmUgLS1leHBpcmUgMy5tb250aHMuYWdvJy4KKwlUaGlzIGNvbmZpZyB2YXJpYWJsZSBjYW4gYmUgdXNlZCB0byBzZXQgYSBkaWZmZXJlbnQgZ3JhY2UKKwlwZXJpb2QuIFRoZSB2YWx1ZSAibm93IiBtYXkgYmUgdXNlZCB0byBkaXNhYmxlIHRoZSBncmFjZQorCXBlcmlvZCBhbmQgcHJ1bmUgJEdJVF9ESVIvd29ya3RyZWVzIGltbWVkaWF0ZWx5LCBvciAibmV2ZXIiCisJbWF5IGJlIHVzZWQgdG8gc3VwcHJlc3MgcHJ1bmluZy4KKworZ2MucmVmbG9nRXhwaXJlOjoKK2djLjxwYXR0ZXJuPi5yZWZsb2dFeHBpcmU6OgorCSdnaXQgcmVmbG9nIGV4cGlyZScgcmVtb3ZlcyByZWZsb2cgZW50cmllcyBvbGRlciB0aGFuCisJdGhpcyB0aW1lOyBkZWZhdWx0cyB0byA5MCBkYXlzLiBUaGUgdmFsdWUgIm5vdyIgZXhwaXJlcyBhbGwKKwllbnRyaWVzIGltbWVkaWF0ZWx5LCBhbmQgIm5ldmVyIiBzdXBwcmVzc2VzIGV4cGlyYXRpb24KKwlhbHRvZ2V0aGVyLiBXaXRoICI8cGF0dGVybj4iIChlLmcuCisJInJlZnMvc3Rhc2giKSBpbiB0aGUgbWlkZGxlIHRoZSBzZXR0aW5nIGFwcGxpZXMgb25seSB0bworCXRoZSByZWZzIHRoYXQgbWF0Y2ggdGhlIDxwYXR0ZXJuPi4KKworZ2MucmVmbG9nRXhwaXJlVW5yZWFjaGFibGU6OgorZ2MuPHBhdHRlcm4+LnJlZmxvZ0V4cGlyZVVucmVhY2hhYmxlOjoKKwknZ2l0IHJlZmxvZyBleHBpcmUnIHJlbW92ZXMgcmVmbG9nIGVudHJpZXMgb2xkZXIgdGhhbgorCXRoaXMgdGltZSBhbmQgYXJlIG5vdCByZWFjaGFibGUgZnJvbSB0aGUgY3VycmVudCB0aXA7CisJZGVmYXVsdHMgdG8gMzAgZGF5cy4gVGhlIHZhbHVlICJub3ciIGV4cGlyZXMgYWxsIGVudHJpZXMKKwlpbW1lZGlhdGVseSwgYW5kICJuZXZlciIgc3VwcHJlc3NlcyBleHBpcmF0aW9uIGFsdG9nZXRoZXIuCisJV2l0aCAiPHBhdHRlcm4+IiAoZS5nLiAicmVmcy9zdGFzaCIpCisJaW4gdGhlIG1pZGRsZSwgdGhlIHNldHRpbmcgYXBwbGllcyBvbmx5IHRvIHRoZSByZWZzIHRoYXQKKwltYXRjaCB0aGUgPHBhdHRlcm4+LgorCitnYy5yZXJlcmVSZXNvbHZlZDo6CisJUmVjb3JkcyBvZiBjb25mbGljdGVkIG1lcmdlIHlvdSByZXNvbHZlZCBlYXJsaWVyIGFyZQorCWtlcHQgZm9yIHRoaXMgbWFueSBkYXlzIHdoZW4gJ2dpdCByZXJlcmUgZ2MnIGlzIHJ1bi4KKwlUaGUgZGVmYXVsdCBpcyA2MCBkYXlzLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlcmVyZVsxXS4KKworZ2MucmVyZXJlVW5yZXNvbHZlZDo6CisJUmVjb3JkcyBvZiBjb25mbGljdGVkIG1lcmdlIHlvdSBoYXZlIG5vdCByZXNvbHZlZCBhcmUKKwlrZXB0IGZvciB0aGlzIG1hbnkgZGF5cyB3aGVuICdnaXQgcmVyZXJlIGdjJyBpcyBydW4uCisJVGhlIGRlZmF1bHQgaXMgMTUgZGF5cy4gIFNlZSBsaW5rZ2l0OmdpdC1yZXJlcmVbMV0uCisKK2dpdGN2cy5jb21taXRNc2dBbm5vdGF0aW9uOjoKKwlBcHBlbmQgdGhpcyBzdHJpbmcgdG8gZWFjaCBjb21taXQgbWVzc2FnZS4gU2V0IHRvIGVtcHR5IHN0cmluZworCXRvIGRpc2FibGUgdGhpcyBmZWF0dXJlLiBEZWZhdWx0cyB0byAidmlhIGdpdC1DVlMgZW11bGF0b3IiLgorCitnaXRjdnMuZW5hYmxlZDo6CisJV2hldGhlciB0aGUgQ1ZTIHNlcnZlciBpbnRlcmZhY2UgaXMgZW5hYmxlZCBmb3IgdGhpcyByZXBvc2l0b3J5LgorCVNlZSBsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0uCisKK2dpdGN2cy5sb2dGaWxlOjoKKwlQYXRoIHRvIGEgbG9nIGZpbGUgd2hlcmUgdGhlIENWUyBzZXJ2ZXIgaW50ZXJmYWNlIHdlbGwuLi4gbG9ncworCXZhcmlvdXMgc3R1ZmYuIFNlZSBsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0uCisKK2dpdGN2cy51c2VjcmxmYXR0cjo6CisJSWYgdHJ1ZSwgdGhlIHNlcnZlciB3aWxsIGxvb2sgdXAgdGhlIGVuZC1vZi1saW5lIGNvbnZlcnNpb24KKwlhdHRyaWJ1dGVzIGZvciBmaWxlcyB0byBkZXRlcm1pbmUgdGhlICctaycgbW9kZXMgdG8gdXNlLiBJZgorCXRoZSBhdHRyaWJ1dGVzIGZvcmNlIEdpdCB0byB0cmVhdCBhIGZpbGUgYXMgdGV4dCwKKwl0aGUgJy1rJyBtb2RlIHdpbGwgYmUgbGVmdCBibGFuayBzbyBDVlMgY2xpZW50cyB3aWxsCisJdHJlYXQgaXQgYXMgdGV4dC4gSWYgdGhleSBzdXBwcmVzcyB0ZXh0IGNvbnZlcnNpb24sIHRoZSBmaWxlCisJd2lsbCBiZSBzZXQgd2l0aCAnLWtiJyBtb2RlLCB3aGljaCBzdXBwcmVzc2VzIGFueSBuZXdsaW5lIG11bmdpbmcKKwl0aGUgY2xpZW50IG1pZ2h0IG90aGVyd2lzZSBkby4gSWYgdGhlIGF0dHJpYnV0ZXMgZG8gbm90IGFsbG93CisJdGhlIGZpbGUgdHlwZSB0byBiZSBkZXRlcm1pbmVkLCB0aGVuICdnaXRjdnMuYWxsQmluYXJ5JyBpcworCXVzZWQuIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0uCisKK2dpdGN2cy5hbGxCaW5hcnk6OgorCVRoaXMgaXMgdXNlZCBpZiAnZ2l0Y3ZzLnVzZWNybGZhdHRyJyBkb2VzIG5vdCByZXNvbHZlCisJdGhlIGNvcnJlY3QgJy1rYicgbW9kZSB0byB1c2UuIElmIHRydWUsIGFsbAorCXVucmVzb2x2ZWQgZmlsZXMgYXJlIHNlbnQgdG8gdGhlIGNsaWVudCBpbgorCW1vZGUgJy1rYicuIFRoaXMgY2F1c2VzIHRoZSBjbGllbnQgdG8gdHJlYXQgdGhlbQorCWFzIGJpbmFyeSBmaWxlcywgd2hpY2ggc3VwcHJlc3NlcyBhbnkgbmV3bGluZSBtdW5naW5nIGl0CisJb3RoZXJ3aXNlIG1pZ2h0IGRvLiBBbHRlcm5hdGl2ZWx5LCBpZiBpdCBpcyBzZXQgdG8gImd1ZXNzIiwKKwl0aGVuIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcmUgZXhhbWluZWQgdG8gZGVjaWRlIGlmCisJaXQgaXMgYmluYXJ5LCBzaW1pbGFyIHRvICdjb3JlLmF1dG9jcmxmJy4KKworZ2l0Y3ZzLmRiTmFtZTo6CisJRGF0YWJhc2UgdXNlZCBieSBnaXQtY3Zzc2VydmVyIHRvIGNhY2hlIHJldmlzaW9uIGluZm9ybWF0aW9uCisJZGVyaXZlZCBmcm9tIHRoZSBHaXQgcmVwb3NpdG9yeS4gVGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUKKwl1c2VkIGRhdGFiYXNlIGRyaXZlciwgZm9yIFNRTGl0ZSAod2hpY2ggaXMgdGhlIGRlZmF1bHQgZHJpdmVyKSB0aGlzCisJaXMgYSBmaWxlbmFtZS4gU3VwcG9ydHMgdmFyaWFibGUgc3Vic3RpdHV0aW9uIChzZWUKKwlsaW5rZ2l0OmdpdC1jdnNzZXJ2ZXJbMV0gZm9yIGRldGFpbHMpLiBNYXkgbm90IGNvbnRhaW4gc2VtaWNvbG9ucyAoYDtgKS4KKwlEZWZhdWx0OiAnJUdnaXRjdnMuJW0uc3FsaXRlJworCitnaXRjdnMuZGJEcml2ZXI6OgorCVVzZWQgUGVybCBEQkkgZHJpdmVyLiBZb3UgY2FuIHNwZWNpZnkgYW55IGF2YWlsYWJsZSBkcml2ZXIKKwlmb3IgdGhpcyBoZXJlLCBidXQgaXQgbWlnaHQgbm90IHdvcmsuIGdpdC1jdnNzZXJ2ZXIgaXMgdGVzdGVkCisJd2l0aCAnREJEOjpTUUxpdGUnLCByZXBvcnRlZCB0byB3b3JrIHdpdGggJ0RCRDo6UGcnLCBhbmQKKwlyZXBvcnRlZCAqbm90KiB0byB3b3JrIHdpdGggJ0RCRDo6bXlzcWwnLiBFeHBlcmltZW50YWwgZmVhdHVyZS4KKwlNYXkgbm90IGNvbnRhaW4gZG91YmxlIGNvbG9ucyAoYDpgKS4gRGVmYXVsdDogJ1NRTGl0ZScuCisJU2VlIGxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXS4KKworZ2l0Y3ZzLmRiVXNlciwgZ2l0Y3ZzLmRiUGFzczo6CisJRGF0YWJhc2UgdXNlciBhbmQgcGFzc3dvcmQuIE9ubHkgdXNlZnVsIGlmIHNldHRpbmcgJ2dpdGN2cy5kYkRyaXZlcicsCisJc2luY2UgU1FMaXRlIGhhcyBubyBjb25jZXB0IG9mIGRhdGFiYXNlIHVzZXJzIGFuZC9vciBwYXNzd29yZHMuCisJJ2dpdGN2cy5kYlVzZXInIHN1cHBvcnRzIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiAoc2VlCisJbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdIGZvciBkZXRhaWxzKS4KKworZ2l0Y3ZzLmRiVGFibGVOYW1lUHJlZml4OjoKKwlEYXRhYmFzZSB0YWJsZSBuYW1lIHByZWZpeC4gIFByZXBlbmRlZCB0byB0aGUgbmFtZXMgb2YgYW55CisJZGF0YWJhc2UgdGFibGVzIHVzZWQsIGFsbG93aW5nIGEgc2luZ2xlIGRhdGFiYXNlIHRvIGJlIHVzZWQKKwlmb3Igc2V2ZXJhbCByZXBvc2l0b3JpZXMuICBTdXBwb3J0cyB2YXJpYWJsZSBzdWJzdGl0dXRpb24gKHNlZQorCWxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXSBmb3IgZGV0YWlscykuICBBbnkgbm9uLWFscGhhYmV0aWMKKwljaGFyYWN0ZXJzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB1bmRlcnNjb3Jlcy4KKworQWxsIGdpdGN2cyB2YXJpYWJsZXMgZXhjZXB0IGZvciAnZ2l0Y3ZzLnVzZWNybGZhdHRyJyBhbmQKKydnaXRjdnMuYWxsQmluYXJ5JyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgYXMKKydnaXRjdnMuPGFjY2Vzc19tZXRob2Q+Ljx2YXJuYW1lPicgKHdoZXJlICdhY2Nlc3NfbWV0aG9kJworaXMgb25lIG9mICJleHQiIGFuZCAicHNlcnZlciIpIHRvIG1ha2UgdGhlbSBhcHBseSBvbmx5IGZvciB0aGUgZ2l2ZW4KK2FjY2VzcyBtZXRob2QuCisKK2dpdHdlYi5jYXRlZ29yeTo6CitnaXR3ZWIuZGVzY3JpcHRpb246OgorZ2l0d2ViLm93bmVyOjoKK2dpdHdlYi51cmw6OgorCVNlZSBsaW5rZ2l0OmdpdHdlYlsxXSBmb3IgZGVzY3JpcHRpb24uCisKK2dpdHdlYi5hdmF0YXI6OgorZ2l0d2ViLmJsYW1lOjoKK2dpdHdlYi5ncmVwOjoKK2dpdHdlYi5oaWdobGlnaHQ6OgorZ2l0d2ViLnBhdGNoZXM6OgorZ2l0d2ViLnBpY2theGU6OgorZ2l0d2ViLnJlbW90ZV9oZWFkczo6CitnaXR3ZWIuc2hvd1NpemVzOjoKK2dpdHdlYi5zbmFwc2hvdDo6CisJU2VlIGxpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0gZm9yIGRlc2NyaXB0aW9uLgorCitncmVwLmxpbmVOdW1iZXI6OgorCUlmIHNldCB0byB0cnVlLCBlbmFibGUgJy1uJyBvcHRpb24gYnkgZGVmYXVsdC4KKworZ3JlcC5wYXR0ZXJuVHlwZTo6CisJU2V0IHRoZSBkZWZhdWx0IG1hdGNoaW5nIGJlaGF2aW9yLiBVc2luZyBhIHZhbHVlIG9mICdiYXNpYycsICdleHRlbmRlZCcsCisJJ2ZpeGVkJywgb3IgJ3BlcmwnIHdpbGwgZW5hYmxlIHRoZSAnLS1iYXNpYy1yZWdleHAnLCAnLS1leHRlbmRlZC1yZWdleHAnLAorCSctLWZpeGVkLXN0cmluZ3MnLCBvciAnLS1wZXJsLXJlZ2V4cCcgb3B0aW9uIGFjY29yZGluZ2x5LCB3aGlsZSB0aGUKKwl2YWx1ZSAnZGVmYXVsdCcgd2lsbCByZXR1cm4gdG8gdGhlIGRlZmF1bHQgbWF0Y2hpbmcgYmVoYXZpb3IuCisKK2dyZXAuZXh0ZW5kZWRSZWdleHA6OgorCUlmIHNldCB0byB0cnVlLCBlbmFibGUgJy0tZXh0ZW5kZWQtcmVnZXhwJyBvcHRpb24gYnkgZGVmYXVsdC4gVGhpcworCW9wdGlvbiBpcyBpZ25vcmVkIHdoZW4gdGhlICdncmVwLnBhdHRlcm5UeXBlJyBvcHRpb24gaXMgc2V0IHRvIGEgdmFsdWUKKwlvdGhlciB0aGFuICdkZWZhdWx0Jy4KKworZ3BnLnByb2dyYW06OgorCVVzZSB0aGlzIGN1c3RvbSBwcm9ncmFtIGluc3RlYWQgb2YgImdwZyIgZm91bmQgb24gJFBBVEggd2hlbgorCW1ha2luZyBvciB2ZXJpZnlpbmcgYSBQR1Agc2lnbmF0dXJlLiBUaGUgcHJvZ3JhbSBtdXN0IHN1cHBvcnQgdGhlCisJc2FtZSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGFzIEdQRywgbmFtZWx5LCB0byB2ZXJpZnkgYSBkZXRhY2hlZAorCXNpZ25hdHVyZSwgImdwZyAtLXZlcmlmeSAkZmlsZSAtIDwkc2lnbmF0dXJlIiBpcyBydW4sIGFuZCB0aGUKKwlwcm9ncmFtIGlzIGV4cGVjdGVkIHRvIHNpZ25hbCBhIGdvb2Qgc2lnbmF0dXJlIGJ5IGV4aXRpbmcgd2l0aAorCWNvZGUgMCwgYW5kIHRvIGdlbmVyYXRlIGFuIEFTQ0lJLWFybW9yZWQgZGV0YWNoZWQgc2lnbmF0dXJlLCB0aGUKKwlzdGFuZGFyZCBpbnB1dCBvZiAiZ3BnIC1ic2F1ICRrZXkiIGlzIGZlZCB3aXRoIHRoZSBjb250ZW50cyB0byBiZQorCXNpZ25lZCwgYW5kIHRoZSBwcm9ncmFtIGlzIGV4cGVjdGVkIHRvIHNlbmQgdGhlIHJlc3VsdCB0byBpdHMKKwlzdGFuZGFyZCBvdXRwdXQuCisKK2d1aS5jb21taXRNc2dXaWR0aDo6CisJRGVmaW5lcyBob3cgd2lkZSB0aGUgY29tbWl0IG1lc3NhZ2Ugd2luZG93IGlzIGluIHRoZQorCWxpbmtnaXQ6Z2l0LWd1aVsxXS4gIjc1IiBpcyB0aGUgZGVmYXVsdC4KKworZ3VpLmRpZmZDb250ZXh0OjoKKwlTcGVjaWZpZXMgaG93IG1hbnkgY29udGV4dCBsaW5lcyBzaG91bGQgYmUgdXNlZCBpbiBjYWxscyB0byBkaWZmCisJbWFkZSBieSB0aGUgbGlua2dpdDpnaXQtZ3VpWzFdLiBUaGUgZGVmYXVsdCBpcyAiNSIuCisKK2d1aS5kaXNwbGF5VW50cmFja2VkOjoKKwlEZXRlcm1pbmVzIGlmIGxpbmtnaXQ6OmdpdC1ndWlbMV0gc2hvd3MgdW50cmFja2VkIGZpbGVzCisJaW4gdGhlIGZpbGUgbGlzdC4gVGhlIGRlZmF1bHQgaXMgInRydWUiLgorCitndWkuZW5jb2Rpbmc6OgorCVNwZWNpZmllcyB0aGUgZGVmYXVsdCBlbmNvZGluZyB0byB1c2UgZm9yIGRpc3BsYXlpbmcgb2YKKwlmaWxlIGNvbnRlbnRzIGluIGxpbmtnaXQ6Z2l0LWd1aVsxXSBhbmQgbGlua2dpdDpnaXRrWzFdLgorCUl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlICdlbmNvZGluZycgYXR0cmlidXRlCisJZm9yIHJlbGV2YW50IGZpbGVzIChzZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdKS4KKwlJZiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0LCB0aGUgdG9vbHMgZGVmYXVsdCB0byB0aGUKKwlsb2NhbGUgZW5jb2RpbmcuCisKK2d1aS5tYXRjaFRyYWNraW5nQnJhbmNoOjoKKwlEZXRlcm1pbmVzIGlmIG5ldyBicmFuY2hlcyBjcmVhdGVkIHdpdGggbGlua2dpdDpnaXQtZ3VpWzFdIHNob3VsZAorCWRlZmF1bHQgdG8gdHJhY2tpbmcgcmVtb3RlIGJyYW5jaGVzIHdpdGggbWF0Y2hpbmcgbmFtZXMgb3IKKwlub3QuIERlZmF1bHQ6ICJmYWxzZSIuCisKK2d1aS5uZXdCcmFuY2hUZW1wbGF0ZTo6CisJSXMgdXNlZCBhcyBzdWdnZXN0ZWQgbmFtZSB3aGVuIGNyZWF0aW5nIG5ldyBicmFuY2hlcyB1c2luZyB0aGUKKwlsaW5rZ2l0OmdpdC1ndWlbMV0uCisKK2d1aS5wcnVuZUR1cmluZ0ZldGNoOjoKKwkidHJ1ZSIgaWYgbGlua2dpdDpnaXQtZ3VpWzFdIHNob3VsZCBwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgd2hlbgorCXBlcmZvcm1pbmcgYSBmZXRjaC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgImZhbHNlIi4KKworZ3VpLnRydXN0bXRpbWU6OgorCURldGVybWluZXMgaWYgbGlua2dpdDpnaXQtZ3VpWzFdIHNob3VsZCB0cnVzdCB0aGUgZmlsZSBtb2RpZmljYXRpb24KKwl0aW1lc3RhbXAgb3Igbm90LiBCeSBkZWZhdWx0IHRoZSB0aW1lc3RhbXBzIGFyZSBub3QgdHJ1c3RlZC4KKworZ3VpLnNwZWxsaW5nRGljdGlvbmFyeTo6CisJU3BlY2lmaWVzIHRoZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIHNwZWxsIGNoZWNraW5nIGNvbW1pdCBtZXNzYWdlcyBpbgorCXRoZSBsaW5rZ2l0OmdpdC1ndWlbMV0uIFdoZW4gc2V0IHRvICJub25lIiBzcGVsbCBjaGVja2luZyBpcyB0dXJuZWQKKwlvZmYuCisKK2d1aS5mYXN0Q29weUJsYW1lOjoKKwlJZiB0cnVlLCAnZ2l0IGd1aSBibGFtZScgdXNlcyBgLUNgIGluc3RlYWQgb2YgYC1DIC1DYCBmb3Igb3JpZ2luYWwKKwlsb2NhdGlvbiBkZXRlY3Rpb24uIEl0IG1ha2VzIGJsYW1lIHNpZ25pZmljYW50bHkgZmFzdGVyIG9uIGh1Z2UKKwlyZXBvc2l0b3JpZXMgYXQgdGhlIGV4cGVuc2Ugb2YgbGVzcyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4KKworZ3VpLmNvcHlCbGFtZVRocmVzaG9sZDo6CisJU3BlY2lmaWVzIHRoZSB0aHJlc2hvbGQgdG8gdXNlIGluICdnaXQgZ3VpIGJsYW1lJyBvcmlnaW5hbCBsb2NhdGlvbgorCWRldGVjdGlvbiwgbWVhc3VyZWQgaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuIFNlZSB0aGUKKwlsaW5rZ2l0OmdpdC1ibGFtZVsxXSBtYW51YWwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29weSBkZXRlY3Rpb24uCisKK2d1aS5ibGFtZWhpc3RvcnljdHg6OgorCVNwZWNpZmllcyB0aGUgcmFkaXVzIG9mIGhpc3RvcnkgY29udGV4dCBpbiBkYXlzIHRvIHNob3cgaW4KKwlsaW5rZ2l0OmdpdGtbMV0gZm9yIHRoZSBzZWxlY3RlZCBjb21taXQsIHdoZW4gdGhlIGBTaG93IEhpc3RvcnkKKwlDb250ZXh0YCBtZW51IGl0ZW0gaXMgaW52b2tlZCBmcm9tICdnaXQgZ3VpIGJsYW1lJy4gSWYgdGhpcworCXZhcmlhYmxlIGlzIHNldCB0byB6ZXJvLCB0aGUgd2hvbGUgaGlzdG9yeSBpcyBzaG93bi4KKworZ3VpdG9vbC48bmFtZT4uY21kOjoKKwlTcGVjaWZpZXMgdGhlIHNoZWxsIGNvbW1hbmQgbGluZSB0byBleGVjdXRlIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgaXRlbQorCW9mIHRoZSBsaW5rZ2l0OmdpdC1ndWlbMV0gYFRvb2xzYCBtZW51IGlzIGludm9rZWQuIFRoaXMgb3B0aW9uIGlzCisJbWFuZGF0b3J5IGZvciBldmVyeSB0b29sLiBUaGUgY29tbWFuZCBpcyBleGVjdXRlZCBmcm9tIHRoZSByb290IG9mCisJdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgaW4gdGhlIGVudmlyb25tZW50IGl0IHJlY2VpdmVzIHRoZSBuYW1lIG9mCisJdGhlIHRvb2wgYXMgJ0dJVF9HVUlUT09MJywgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmaWxlIGFzCisJJ0ZJTEVOQU1FJywgYW5kIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBhcyAnQ1VSX0JSQU5DSCcgKGlmCisJdGhlIGhlYWQgaXMgZGV0YWNoZWQsICdDVVJfQlJBTkNIJyBpcyBlbXB0eSkuCisKK2d1aXRvb2wuPG5hbWU+Lm5lZWRzRmlsZTo6CisJUnVuIHRoZSB0b29sIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkIGluIHRoZSBHVUkuIEl0IGd1YXJhbnRlZXMKKwl0aGF0ICdGSUxFTkFNRScgaXMgbm90IGVtcHR5LgorCitndWl0b29sLjxuYW1lPi5ub0NvbnNvbGU6OgorCVJ1biB0aGUgY29tbWFuZCBzaWxlbnRseSwgd2l0aG91dCBjcmVhdGluZyBhIHdpbmRvdyB0byBkaXNwbGF5IGl0cworCW91dHB1dC4KKworZ3VpdG9vbC48bmFtZT4ubm9SZXNjYW46OgorCURvbid0IHJlc2NhbiB0aGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIGNoYW5nZXMgYWZ0ZXIgdGhlIHRvb2wKKwlmaW5pc2hlcyBleGVjdXRpb24uCisKK2d1aXRvb2wuPG5hbWU+LmNvbmZpcm06OgorCVNob3cgYSBjb25maXJtYXRpb24gZGlhbG9nIGJlZm9yZSBhY3R1YWxseSBydW5uaW5nIHRoZSB0b29sLgorCitndWl0b29sLjxuYW1lPi5hcmdQcm9tcHQ6OgorCVJlcXVlc3QgYSBzdHJpbmcgYXJndW1lbnQgZnJvbSB0aGUgdXNlciwgYW5kIHBhc3MgaXQgdG8gdGhlIHRvb2wKKwl0aHJvdWdoIHRoZSAnQVJHUycgZW52aXJvbm1lbnQgdmFyaWFibGUuIFNpbmNlIHJlcXVlc3RpbmcgYW4KKwlhcmd1bWVudCBpbXBsaWVzIGNvbmZpcm1hdGlvbiwgdGhlICdjb25maXJtJyBvcHRpb24gaGFzIG5vIGVmZmVjdAorCWlmIHRoaXMgaXMgZW5hYmxlZC4gSWYgdGhlIG9wdGlvbiBpcyBzZXQgdG8gJ3RydWUnLCAneWVzJywgb3IgJzEnLAorCXRoZSBkaWFsb2cgdXNlcyBhIGJ1aWx0LWluIGdlbmVyaWMgcHJvbXB0OyBvdGhlcndpc2UgdGhlIGV4YWN0CisJdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGlzIHVzZWQuCisKK2d1aXRvb2wuPG5hbWU+LnJldlByb21wdDo6CisJUmVxdWVzdCBhIHNpbmdsZSB2YWxpZCByZXZpc2lvbiBmcm9tIHRoZSB1c2VyLCBhbmQgc2V0IHRoZQorCSdSRVZJU0lPTicgZW52aXJvbm1lbnQgdmFyaWFibGUuIEluIG90aGVyIGFzcGVjdHMgdGhpcyBvcHRpb24KKwlpcyBzaW1pbGFyIHRvICdhcmdQcm9tcHQnLCBhbmQgY2FuIGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBpdC4KKworZ3VpdG9vbC48bmFtZT4ucmV2VW5tZXJnZWQ6OgorCVNob3cgb25seSB1bm1lcmdlZCBicmFuY2hlcyBpbiB0aGUgJ3JldlByb21wdCcgc3ViZGlhbG9nLgorCVRoaXMgaXMgdXNlZnVsIGZvciB0b29scyBzaW1pbGFyIHRvIG1lcmdlIG9yIHJlYmFzZSwgYnV0IG5vdAorCWZvciB0aGluZ3MgbGlrZSBjaGVja291dCBvciByZXNldC4KKworZ3VpdG9vbC48bmFtZT4udGl0bGU6OgorCVNwZWNpZmllcyB0aGUgdGl0bGUgdG8gdXNlIGZvciB0aGUgcHJvbXB0IGRpYWxvZy4gVGhlIGRlZmF1bHQKKwlpcyB0aGUgdG9vbCBuYW1lLgorCitndWl0b29sLjxuYW1lPi5wcm9tcHQ6OgorCVNwZWNpZmllcyB0aGUgZ2VuZXJhbCBwcm9tcHQgc3RyaW5nIHRvIGRpc3BsYXkgYXQgdGhlIHRvcCBvZgorCXRoZSBkaWFsb2csIGJlZm9yZSBzdWJzZWN0aW9ucyBmb3IgJ2FyZ1Byb21wdCcgYW5kICdyZXZQcm9tcHQnLgorCVRoZSBkZWZhdWx0IHZhbHVlIGluY2x1ZGVzIHRoZSBhY3R1YWwgY29tbWFuZC4KKworaGVscC5icm93c2VyOjoKKwlTcGVjaWZ5IHRoZSBicm93c2VyIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRpc3BsYXkgaGVscCBpbiB0aGUKKwknd2ViJyBmb3JtYXQuIFNlZSBsaW5rZ2l0OmdpdC1oZWxwWzFdLgorCitoZWxwLmZvcm1hdDo6CisJT3ZlcnJpZGUgdGhlIGRlZmF1bHQgaGVscCBmb3JtYXQgdXNlZCBieSBsaW5rZ2l0OmdpdC1oZWxwWzFdLgorCVZhbHVlcyAnbWFuJywgJ2luZm8nLCAnd2ViJyBhbmQgJ2h0bWwnIGFyZSBzdXBwb3J0ZWQuICdtYW4nIGlzCisJdGhlIGRlZmF1bHQuICd3ZWInIGFuZCAnaHRtbCcgYXJlIHRoZSBzYW1lLgorCitoZWxwLmF1dG9Db3JyZWN0OjoKKwlBdXRvbWF0aWNhbGx5IGNvcnJlY3QgYW5kIGV4ZWN1dGUgbWlzdHlwZWQgY29tbWFuZHMgYWZ0ZXIKKwl3YWl0aW5nIGZvciB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2lzZWNvbmRzICgwLjEgc2VjKS4gSWYgbW9yZQorCXRoYW4gb25lIGNvbW1hbmQgY2FuIGJlIGRlZHVjZWQgZnJvbSB0aGUgZW50ZXJlZCB0ZXh0LCBub3RoaW5nCisJd2lsbCBiZSBleGVjdXRlZC4gIElmIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiBpcyBuZWdhdGl2ZSwKKwl0aGUgY29ycmVjdGVkIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCBpbW1lZGlhdGVseS4gSWYgdGhlCisJdmFsdWUgaXMgMCAtIHRoZSBjb21tYW5kIHdpbGwgYmUganVzdCBzaG93biBidXQgbm90IGV4ZWN1dGVkLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQuCisKK2hlbHAuaHRtbFBhdGg6OgorCVNwZWNpZnkgdGhlIHBhdGggd2hlcmUgdGhlIEhUTUwgZG9jdW1lbnRhdGlvbiByZXNpZGVzLiBGaWxlIHN5c3RlbSBwYXRocworCWFuZCBVUkxzIGFyZSBzdXBwb3J0ZWQuIEhUTUwgcGFnZXMgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIHRoaXMgcGF0aCB3aGVuCisJaGVscCBpcyBkaXNwbGF5ZWQgaW4gdGhlICd3ZWInIGZvcm1hdC4gVGhpcyBkZWZhdWx0cyB0byB0aGUgZG9jdW1lbnRhdGlvbgorCXBhdGggb2YgeW91ciBHaXQgaW5zdGFsbGF0aW9uLgorCitodHRwLnByb3h5OjoKKwlPdmVycmlkZSB0aGUgSFRUUCBwcm94eSwgbm9ybWFsbHkgY29uZmlndXJlZCB1c2luZyB0aGUgJ2h0dHBfcHJveHknLAorCSdodHRwc19wcm94eScsIGFuZCAnYWxsX3Byb3h5JyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKHNlZQorCWBjdXJsKDEpYCkuICBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIG9uIGEgcGVyLXJlbW90ZSBiYXNpczsgc2VlCisJcmVtb3RlLjxuYW1lPi5wcm94eQorCitodHRwLmNvb2tpZUZpbGU6OgorCUZpbGUgY29udGFpbmluZyBwcmV2aW91c2x5IHN0b3JlZCBjb29raWUgbGluZXMgd2hpY2ggc2hvdWxkIGJlIHVzZWQKKwlpbiB0aGUgR2l0IGh0dHAgc2Vzc2lvbiwgaWYgdGhleSBtYXRjaCB0aGUgc2VydmVyLiBUaGUgZmlsZSBmb3JtYXQKKwlvZiB0aGUgZmlsZSB0byByZWFkIGNvb2tpZXMgZnJvbSBzaG91bGQgYmUgcGxhaW4gSFRUUCBoZWFkZXJzIG9yCisJdGhlIE5ldHNjYXBlL01vemlsbGEgY29va2llIGZpbGUgZm9ybWF0IChzZWUgbGlua2dpdDpjdXJsWzFdKS4KKwlOT1RFIHRoYXQgdGhlIGZpbGUgc3BlY2lmaWVkIHdpdGggaHR0cC5jb29raWVGaWxlIGlzIG9ubHkgdXNlZCBhcworCWlucHV0IHVubGVzcyBodHRwLnNhdmVDb29raWVzIGlzIHNldC4KKworaHR0cC5zYXZlQ29va2llczo6CisJSWYgc2V0LCBzdG9yZSBjb29raWVzIHJlY2VpdmVkIGR1cmluZyByZXF1ZXN0cyB0byB0aGUgZmlsZSBzcGVjaWZpZWQgYnkKKwlodHRwLmNvb2tpZUZpbGUuIEhhcyBubyBlZmZlY3QgaWYgaHR0cC5jb29raWVGaWxlIGlzIHVuc2V0LgorCitodHRwLnNzbFZlcnNpb246OgorCVRoZSBTU0wgdmVyc2lvbiB0byB1c2Ugd2hlbiBuZWdvdGlhdGluZyBhbiBTU0wgY29ubmVjdGlvbiwgaWYgeW91CisJd2FudCB0byBmb3JjZSB0aGUgZGVmYXVsdC4gIFRoZSBhdmFpbGFibGUgYW5kIGRlZmF1bHQgdmVyc2lvbgorCWRlcGVuZCBvbiB3aGV0aGVyIGxpYmN1cmwgd2FzIGJ1aWx0IGFnYWluc3QgTlNTIG9yIE9wZW5TU0wgYW5kIHRoZQorCXBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvZiB0aGUgY3J5cHRvIGxpYnJhcnkgaW4gdXNlLiBJbnRlcm5hbGx5CisJdGhpcyBzZXRzIHRoZSAnQ1VSTE9QVF9TU0xfVkVSU0lPTicgb3B0aW9uOyBzZWUgdGhlIGxpYmN1cmwKKwlkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMgb24gdGhlIGZvcm1hdCBvZiB0aGlzIG9wdGlvbiBhbmQKKwlmb3IgdGhlIHNzbCB2ZXJzaW9uIHN1cHBvcnRlZC4gQWN0dWFsbHkgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZgorCXRoaXMgb3B0aW9uIGFyZToKKworCS0gc3NsdjIKKwktIHNzbHYzCisJLSB0bHN2MQorCS0gdGxzdjEuMAorCS0gdGxzdjEuMQorCS0gdGxzdjEuMgorCisrCitDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9TU0xfVkVSU0lPTicgZW52aXJvbm1lbnQgdmFyaWFibGUuCitUbyBmb3JjZSBnaXQgdG8gdXNlIGxpYmN1cmwncyBkZWZhdWx0IHNzbCB2ZXJzaW9uIGFuZCBpZ25vcmUgYW55CitleHBsaWNpdCBodHRwLnNzbHZlcnNpb24gb3B0aW9uLCBzZXQgJ0dJVF9TU0xfVkVSU0lPTicgdG8gdGhlCitlbXB0eSBzdHJpbmcuCisKK2h0dHAuc3NsQ2lwaGVyTGlzdDo6CisgIEEgbGlzdCBvZiBTU0wgY2lwaGVycyB0byB1c2Ugd2hlbiBuZWdvdGlhdGluZyBhbiBTU0wgY29ubmVjdGlvbi4KKyAgVGhlIGF2YWlsYWJsZSBjaXBoZXJzIGRlcGVuZCBvbiB3aGV0aGVyIGxpYmN1cmwgd2FzIGJ1aWx0IGFnYWluc3QKKyAgTlNTIG9yIE9wZW5TU0wgYW5kIHRoZSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNyeXB0bworICBsaWJyYXJ5IGluIHVzZS4gIEludGVybmFsbHkgdGhpcyBzZXRzIHRoZSAnQ1VSTE9QVF9TU0xfQ0lQSEVSX0xJU1QnCisgIG9wdGlvbjsgc2VlIHRoZSBsaWJjdXJsIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgZm9ybWF0CisgIG9mIHRoaXMgbGlzdC4KKysKK0NhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX1NTTF9DSVBIRVJfTElTVCcgZW52aXJvbm1lbnQgdmFyaWFibGUuCitUbyBmb3JjZSBnaXQgdG8gdXNlIGxpYmN1cmwncyBkZWZhdWx0IGNpcGhlciBsaXN0IGFuZCBpZ25vcmUgYW55CitleHBsaWNpdCBodHRwLnNzbENpcGhlckxpc3Qgb3B0aW9uLCBzZXQgJ0dJVF9TU0xfQ0lQSEVSX0xJU1QnIHRvIHRoZQorZW1wdHkgc3RyaW5nLgorCitodHRwLnNzbFZlcmlmeTo6CisJV2hldGhlciB0byB2ZXJpZnkgdGhlIFNTTCBjZXJ0aWZpY2F0ZSB3aGVuIGZldGNoaW5nIG9yIHB1c2hpbmcKKwlvdmVyIEhUVFBTLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9TU0xfTk9fVkVSSUZZJyBlbnZpcm9ubWVudAorCXZhcmlhYmxlLgorCitodHRwLnNzbENlcnQ6OgorCUZpbGUgY29udGFpbmluZyB0aGUgU1NMIGNlcnRpZmljYXRlIHdoZW4gZmV0Y2hpbmcgb3IgcHVzaGluZworCW92ZXIgSFRUUFMuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX1NTTF9DRVJUJyBlbnZpcm9ubWVudAorCXZhcmlhYmxlLgorCitodHRwLnNzbEtleTo6CisJRmlsZSBjb250YWluaW5nIHRoZSBTU0wgcHJpdmF0ZSBrZXkgd2hlbiBmZXRjaGluZyBvciBwdXNoaW5nCisJb3ZlciBIVFRQUy4gQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfU1NMX0tFWScgZW52aXJvbm1lbnQKKwl2YXJpYWJsZS4KKworaHR0cC5zc2xDZXJ0UGFzc3dvcmRQcm90ZWN0ZWQ6OgorCUVuYWJsZSBHaXQncyBwYXNzd29yZCBwcm9tcHQgZm9yIHRoZSBTU0wgY2VydGlmaWNhdGUuICBPdGhlcndpc2UKKwlPcGVuU1NMIHdpbGwgcHJvbXB0IHRoZSB1c2VyLCBwb3NzaWJseSBtYW55IHRpbWVzLCBpZiB0aGUKKwljZXJ0aWZpY2F0ZSBvciBwcml2YXRlIGtleSBpcyBlbmNyeXB0ZWQuICBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUKKwknR0lUX1NTTF9DRVJUX1BBU1NXT1JEX1BST1RFQ1RFRCcgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKK2h0dHAuc3NsQ0FJbmZvOjoKKwlGaWxlIGNvbnRhaW5pbmcgdGhlIGNlcnRpZmljYXRlcyB0byB2ZXJpZnkgdGhlIHBlZXIgd2l0aCB3aGVuCisJZmV0Y2hpbmcgb3IgcHVzaGluZyBvdmVyIEhUVFBTLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUKKwknR0lUX1NTTF9DQUlORk8nIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitodHRwLnNzbENBUGF0aDo6CisJUGF0aCBjb250YWluaW5nIGZpbGVzIHdpdGggdGhlIENBIGNlcnRpZmljYXRlcyB0byB2ZXJpZnkgdGhlIHBlZXIKKwl3aXRoIHdoZW4gZmV0Y2hpbmcgb3IgcHVzaGluZyBvdmVyIEhUVFBTLiBDYW4gYmUgb3ZlcnJpZGRlbgorCWJ5IHRoZSAnR0lUX1NTTF9DQVBBVEgnIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitodHRwLnNzbFRyeTo6CisJQXR0ZW1wdCB0byB1c2UgQVVUSCBTU0wvVExTIGFuZCBlbmNyeXB0ZWQgZGF0YSB0cmFuc2ZlcnMKKwl3aGVuIGNvbm5lY3RpbmcgdmlhIHJlZ3VsYXIgRlRQIHByb3RvY29sLiBUaGlzIG1pZ2h0IGJlIG5lZWRlZAorCWlmIHRoZSBGVFAgc2VydmVyIHJlcXVpcmVzIGl0IGZvciBzZWN1cml0eSByZWFzb25zIG9yIHlvdSB3aXNoCisJdG8gY29ubmVjdCBzZWN1cmVseSB3aGVuZXZlciByZW1vdGUgRlRQIHNlcnZlciBzdXBwb3J0cyBpdC4KKwlEZWZhdWx0IGlzIGZhbHNlIHNpbmNlIGl0IG1pZ2h0IHRyaWdnZXIgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uCisJZXJyb3JzIG9uIG1pc2NvbmZpZ3VyZWQgc2VydmVycy4KKworaHR0cC5tYXhSZXF1ZXN0czo6CisJSG93IG1hbnkgSFRUUCByZXF1ZXN0cyB0byBsYXVuY2ggaW4gcGFyYWxsZWwuIENhbiBiZSBvdmVycmlkZGVuCisJYnkgdGhlICdHSVRfSFRUUF9NQVhfUkVRVUVTVFMnIGVudmlyb25tZW50IHZhcmlhYmxlLiBEZWZhdWx0IGlzIDUuCisKK2h0dHAubWluU2Vzc2lvbnM6OgorCVRoZSBudW1iZXIgb2YgY3VybCBzZXNzaW9ucyAoY291bnRlZCBhY3Jvc3Mgc2xvdHMpIHRvIGJlIGtlcHQgYWNyb3NzCisJcmVxdWVzdHMuIFRoZXkgd2lsbCBub3QgYmUgZW5kZWQgd2l0aCBjdXJsX2Vhc3lfY2xlYW51cCgpIHVudGlsCisJaHR0cF9jbGVhbnVwKCkgaXMgaW52b2tlZC4gSWYgVVNFX0NVUkxfTVVMVEkgaXMgbm90IGRlZmluZWQsIHRoaXMKKwl2YWx1ZSB3aWxsIGJlIGNhcHBlZCBhdCAxLiBEZWZhdWx0cyB0byAxLgorCitodHRwLnBvc3RCdWZmZXI6OgorCU1heGltdW0gc2l6ZSBpbiBieXRlcyBvZiB0aGUgYnVmZmVyIHVzZWQgYnkgc21hcnQgSFRUUAorCXRyYW5zcG9ydHMgd2hlbiBQT1NUaW5nIGRhdGEgdG8gdGhlIHJlbW90ZSBzeXN0ZW0uCisJRm9yIHJlcXVlc3RzIGxhcmdlciB0aGFuIHRoaXMgYnVmZmVyIHNpemUsIEhUVFAvMS4xIGFuZAorCVRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIGlzIHVzZWQgdG8gYXZvaWQgY3JlYXRpbmcgYQorCW1hc3NpdmUgcGFjayBmaWxlIGxvY2FsbHkuICBEZWZhdWx0IGlzIDEgTWlCLCB3aGljaCBpcworCXN1ZmZpY2llbnQgZm9yIG1vc3QgcmVxdWVzdHMuCisKK2h0dHAubG93U3BlZWRMaW1pdCwgaHR0cC5sb3dTcGVlZFRpbWU6OgorCUlmIHRoZSBIVFRQIHRyYW5zZmVyIHNwZWVkIGlzIGxlc3MgdGhhbiAnaHR0cC5sb3dTcGVlZExpbWl0JworCWZvciBsb25nZXIgdGhhbiAnaHR0cC5sb3dTcGVlZFRpbWUnIHNlY29uZHMsIHRoZSB0cmFuc2ZlciBpcyBhYm9ydGVkLgorCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX0hUVFBfTE9XX1NQRUVEX0xJTUlUJyBhbmQKKwknR0lUX0hUVFBfTE9XX1NQRUVEX1RJTUUnIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKworaHR0cC5ub0VQU1Y6OgorCUEgYm9vbGVhbiB3aGljaCBkaXNhYmxlcyB1c2luZyBvZiBFUFNWIGZ0cCBjb21tYW5kIGJ5IGN1cmwuCisJVGhpcyBjYW4gaGVscGZ1bCB3aXRoIHNvbWUgInBvb3IiIGZ0cCBzZXJ2ZXJzIHdoaWNoIGRvbid0CisJc3VwcG9ydCBFUFNWIG1vZGUuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX0NVUkxfRlRQX05PX0VQU1YnCisJZW52aXJvbm1lbnQgdmFyaWFibGUuIERlZmF1bHQgaXMgZmFsc2UgKGN1cmwgd2lsbCB1c2UgRVBTVikuCisKK2h0dHAudXNlckFnZW50OjoKKwlUaGUgSFRUUCBVU0VSX0FHRU5UIHN0cmluZyBwcmVzZW50ZWQgdG8gYW4gSFRUUCBzZXJ2ZXIuICBUaGUgZGVmYXVsdAorCXZhbHVlIHJlcHJlc2VudHMgdGhlIHZlcnNpb24gb2YgdGhlIGNsaWVudCBHaXQgc3VjaCBhcyBnaXQvMS43LjEuCisJVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBvdmVycmlkZSB0aGlzIHZhbHVlIHRvIGEgbW9yZSBjb21tb24gdmFsdWUKKwlzdWNoIGFzIE1vemlsbGEvNC4wLiAgVGhpcyBtYXkgYmUgbmVjZXNzYXJ5LCBmb3IgaW5zdGFuY2UsIGlmCisJY29ubmVjdGluZyB0aHJvdWdoIGEgZmlyZXdhbGwgdGhhdCByZXN0cmljdHMgSFRUUCBjb25uZWN0aW9ucyB0byBhIHNldAorCW9mIGNvbW1vbiBVU0VSX0FHRU5UIHN0cmluZ3MgKGJ1dCBub3QgaW5jbHVkaW5nIHRob3NlIGxpa2UgZ2l0LzEuNy4xKS4KKwlDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9IVFRQX1VTRVJfQUdFTlQnIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitodHRwLjx1cmw+Lio6OgorCUFueSBvZiB0aGUgaHR0cC4qIG9wdGlvbnMgYWJvdmUgY2FuIGJlIGFwcGxpZWQgc2VsZWN0aXZlbHkgdG8gc29tZSBVUkxzLgorCUZvciBhIGNvbmZpZyBrZXkgdG8gbWF0Y2ggYSBVUkwsIGVhY2ggZWxlbWVudCBvZiB0aGUgY29uZmlnIGtleSBpcworCWNvbXBhcmVkIHRvIHRoYXQgb2YgdGhlIFVSTCwgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKysKKy0tCisuIFNjaGVtZSAoZS5nLiwgYGh0dHBzYCBpbiBgaHR0cHM6Ly9leGFtcGxlLmNvbS9gKS4gVGhpcyBmaWVsZAorICBtdXN0IG1hdGNoIGV4YWN0bHkgYmV0d2VlbiB0aGUgY29uZmlnIGtleSBhbmQgdGhlIFVSTC4KKworLiBIb3N0L2RvbWFpbiBuYW1lIChlLmcuLCBgZXhhbXBsZS5jb21gIGluIGBodHRwczovL2V4YW1wbGUuY29tL2ApLgorICBUaGlzIGZpZWxkIG11c3QgbWF0Y2ggZXhhY3RseSBiZXR3ZWVuIHRoZSBjb25maWcga2V5IGFuZCB0aGUgVVJMLgorCisuIFBvcnQgbnVtYmVyIChlLmcuLCBgODA4MGAgaW4gYGh0dHA6Ly9leGFtcGxlLmNvbTo4MDgwL2ApLgorICBUaGlzIGZpZWxkIG11c3QgbWF0Y2ggZXhhY3RseSBiZXR3ZWVuIHRoZSBjb25maWcga2V5IGFuZCB0aGUgVVJMLgorICBPbWl0dGVkIHBvcnQgbnVtYmVycyBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gdGhlIGNvcnJlY3QKKyAgZGVmYXVsdCBmb3IgdGhlIHNjaGVtZSBiZWZvcmUgbWF0Y2hpbmcuCisKKy4gUGF0aCAoZS5nLiwgYHJlcG8uZ2l0YCBpbiBgaHR0cHM6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdGApLiBUaGUKKyAgcGF0aCBmaWVsZCBvZiB0aGUgY29uZmlnIGtleSBtdXN0IG1hdGNoIHRoZSBwYXRoIGZpZWxkIG9mIHRoZSBVUkwKKyAgZWl0aGVyIGV4YWN0bHkgb3IgYXMgYSBwcmVmaXggb2Ygc2xhc2gtZGVsaW1pdGVkIHBhdGggZWxlbWVudHMuICBUaGlzIG1lYW5zCisgIGEgY29uZmlnIGtleSB3aXRoIHBhdGggYGZvby9gIG1hdGNoZXMgVVJMIHBhdGggYGZvby9iYXJgLiAgQSBwcmVmaXggY2FuIG9ubHkKKyAgbWF0Y2ggb24gYSBzbGFzaCAoYC9gKSBib3VuZGFyeS4gIExvbmdlciBtYXRjaGVzIHRha2UgcHJlY2VkZW5jZSAoc28gYSBjb25maWcKKyAga2V5IHdpdGggcGF0aCBgZm9vL2JhcmAgaXMgYSBiZXR0ZXIgbWF0Y2ggdG8gVVJMIHBhdGggYGZvby9iYXJgIHRoYW4gYSBjb25maWcKKyAga2V5IHdpdGgganVzdCBwYXRoIGBmb28vYCkuCisKKy4gVXNlciBuYW1lIChlLmcuLCBgdXNlcmAgaW4gYGh0dHBzOi8vdXNlckBleGFtcGxlLmNvbS9yZXBvLmdpdGApLiBJZgorICB0aGUgY29uZmlnIGtleSBoYXMgYSB1c2VyIG5hbWUgaXQgbXVzdCBtYXRjaCB0aGUgdXNlciBuYW1lIGluIHRoZQorICBVUkwgZXhhY3RseS4gSWYgdGhlIGNvbmZpZyBrZXkgZG9lcyBub3QgaGF2ZSBhIHVzZXIgbmFtZSwgdGhhdAorICBjb25maWcga2V5IHdpbGwgbWF0Y2ggYSBVUkwgd2l0aCBhbnkgdXNlciBuYW1lIChpbmNsdWRpbmcgbm9uZSksCisgIGJ1dCBhdCBhIGxvd2VyIHByZWNlZGVuY2UgdGhhbiBhIGNvbmZpZyBrZXkgd2l0aCBhIHVzZXIgbmFtZS4KKy0tCisrCitUaGUgbGlzdCBhYm92ZSBpcyBvcmRlcmVkIGJ5IGRlY3JlYXNpbmcgcHJlY2VkZW5jZTsgYSBVUkwgdGhhdCBtYXRjaGVzCithIGNvbmZpZyBrZXkncyBwYXRoIGlzIHByZWZlcnJlZCB0byBvbmUgdGhhdCBtYXRjaGVzIGl0cyB1c2VyIG5hbWUuIEZvciBleGFtcGxlLAoraWYgdGhlIFVSTCBpcyBgaHR0cHM6Ly91c2VyQGV4YW1wbGUuY29tL2Zvby9iYXJgIGEgY29uZmlnIGtleSBtYXRjaCBvZgorYGh0dHBzOi8vZXhhbXBsZS5jb20vZm9vYCB3aWxsIGJlIHByZWZlcnJlZCBvdmVyIGEgY29uZmlnIGtleSBtYXRjaCBvZgorYGh0dHBzOi8vdXNlckBleGFtcGxlLmNvbWAuCisrCitBbGwgVVJMcyBhcmUgbm9ybWFsaXplZCBiZWZvcmUgYXR0ZW1wdGluZyBhbnkgbWF0Y2hpbmcgKHRoZSBwYXNzd29yZCBwYXJ0LAoraWYgZW1iZWRkZWQgaW4gdGhlIFVSTCwgaXMgYWx3YXlzIGlnbm9yZWQgZm9yIG1hdGNoaW5nIHB1cnBvc2VzKSBzbyB0aGF0CitlcXVpdmFsZW50IFVSTHMgdGhhdCBhcmUgc2ltcGx5IHNwZWxsZWQgZGlmZmVyZW50bHkgd2lsbCBtYXRjaCBwcm9wZXJseS4KK0Vudmlyb25tZW50IHZhcmlhYmxlIHNldHRpbmdzIGFsd2F5cyBvdmVycmlkZSBhbnkgbWF0Y2hlcy4gIFRoZSBVUkxzIHRoYXQgYXJlCittYXRjaGVkIGFnYWluc3QgYXJlIHRob3NlIGdpdmVuIGRpcmVjdGx5IHRvIEdpdCBjb21tYW5kcy4gIFRoaXMgbWVhbnMgYW55IFVSTHMKK3Zpc2l0ZWQgYXMgYSByZXN1bHQgb2YgYSByZWRpcmVjdGlvbiBkbyBub3QgcGFydGljaXBhdGUgaW4gbWF0Y2hpbmcuCisKK2kxOG4uY29tbWl0RW5jb2Rpbmc6OgorCUNoYXJhY3RlciBlbmNvZGluZyB0aGUgY29tbWl0IG1lc3NhZ2VzIGFyZSBzdG9yZWQgaW47IEdpdCBpdHNlbGYKKwlkb2VzIG5vdCBjYXJlIHBlciBzZSwgYnV0IHRoaXMgaW5mb3JtYXRpb24gaXMgbmVjZXNzYXJ5IGUuZy4gd2hlbgorCWltcG9ydGluZyBjb21taXRzIGZyb20gZW1haWxzIG9yIGluIHRoZSBnaXRrIGdyYXBoaWNhbCBoaXN0b3J5CisJYnJvd3NlciAoYW5kIHBvc3NpYmx5IGF0IG90aGVyIHBsYWNlcyBpbiB0aGUgZnV0dXJlIG9yIGluIG90aGVyCisJcG9yY2VsYWlucykuIFNlZSBlLmcuIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdLiBEZWZhdWx0cyB0byAndXRmLTgnLgorCitpMThuLmxvZ091dHB1dEVuY29kaW5nOjoKKwlDaGFyYWN0ZXIgZW5jb2RpbmcgdGhlIGNvbW1pdCBtZXNzYWdlcyBhcmUgY29udmVydGVkIHRvIHdoZW4KKwlydW5uaW5nICdnaXQgbG9nJyBhbmQgZnJpZW5kcy4KKworaW1hcDo6CisJVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGluIHRoZSAnaW1hcCcgc2VjdGlvbiBhcmUgZGVzY3JpYmVkCisJaW4gbGlua2dpdDpnaXQtaW1hcC1zZW5kWzFdLgorCitpbmRleC52ZXJzaW9uOjoKKwlTcGVjaWZ5IHRoZSB2ZXJzaW9uIHdpdGggd2hpY2ggbmV3IGluZGV4IGZpbGVzIHNob3VsZCBiZQorCWluaXRpYWxpemVkLiAgVGhpcyBkb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgcmVwb3NpdG9yaWVzLgorCitpbml0LnRlbXBsYXRlRGlyOjoKKwlTcGVjaWZ5IHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSBjb3BpZWQuCisJKFNlZSB0aGUgIlRFTVBMQVRFIERJUkVDVE9SWSIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1pbml0WzFdLikKKworaW5zdGF3ZWIuYnJvd3Nlcjo6CisJU3BlY2lmeSB0aGUgcHJvZ3JhbSB0aGF0IHdpbGwgYmUgdXNlZCB0byBicm93c2UgeW91ciB3b3JraW5nCisJcmVwb3NpdG9yeSBpbiBnaXR3ZWIuIFNlZSBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXS4KKworaW5zdGF3ZWIuaHR0cGQ6OgorCVRoZSBIVFRQIGRhZW1vbiBjb21tYW5kLWxpbmUgdG8gc3RhcnQgZ2l0d2ViIG9uIHlvdXIgd29ya2luZworCXJlcG9zaXRvcnkuIFNlZSBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXS4KKworaW5zdGF3ZWIubG9jYWw6OgorCUlmIHRydWUgdGhlIHdlYiBzZXJ2ZXIgc3RhcnRlZCBieSBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXSB3aWxsCisJYmUgYm91bmQgdG8gdGhlIGxvY2FsIElQICgxMjcuMC4wLjEpLgorCitpbnN0YXdlYi5tb2R1bGVQYXRoOjoKKwlUaGUgZGVmYXVsdCBtb2R1bGUgcGF0aCBmb3IgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0gdG8gdXNlCisJaW5zdGVhZCBvZiAvdXNyL2xpYi9hcGFjaGUyL21vZHVsZXMuICBPbmx5IHVzZWQgaWYgaHR0cGQKKwlpcyBBcGFjaGUuCisKK2luc3Rhd2ViLnBvcnQ6OgorCVRoZSBwb3J0IG51bWJlciB0byBiaW5kIHRoZSBnaXR3ZWIgaHR0cGQgdG8uIFNlZQorCWxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdLgorCitpbnRlcmFjdGl2ZS5zaW5nbGVLZXk6OgorCUluIGludGVyYWN0aXZlIGNvbW1hbmRzLCBhbGxvdyB0aGUgdXNlciB0byBwcm92aWRlIG9uZS1sZXR0ZXIKKwlpbnB1dCB3aXRoIGEgc2luZ2xlIGtleSAoaS5lLiwgd2l0aG91dCBoaXR0aW5nIGVudGVyKS4KKwlDdXJyZW50bHkgdGhpcyBpcyB1c2VkIGJ5IHRoZSBgLS1wYXRjaGAgbW9kZSBvZgorCWxpbmtnaXQ6Z2l0LWFkZFsxXSwgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0sIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSwKKwlsaW5rZ2l0OmdpdC1yZXNldFsxXSwgYW5kIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdLiBOb3RlIHRoYXQgdGhpcworCXNldHRpbmcgaXMgc2lsZW50bHkgaWdub3JlZCBpZiBwb3J0YWJsZSBrZXlzdHJva2UgaW5wdXQKKwlpcyBub3QgYXZhaWxhYmxlOyByZXF1aXJlcyB0aGUgUGVybCBtb2R1bGUgVGVybTo6UmVhZEtleS4KKworbG9nLmFiYnJldkNvbW1pdDo6CisJSWYgdHJ1ZSwgbWFrZXMgbGlua2dpdDpnaXQtbG9nWzFdLCBsaW5rZ2l0OmdpdC1zaG93WzFdLCBhbmQKKwlsaW5rZ2l0OmdpdC13aGF0Y2hhbmdlZFsxXSBhc3N1bWUgYC0tYWJicmV2LWNvbW1pdGAuIFlvdSBtYXkKKwlvdmVycmlkZSB0aGlzIG9wdGlvbiB3aXRoIGAtLW5vLWFiYnJldi1jb21taXRgLgorCitsb2cuZGF0ZTo6CisJU2V0IHRoZSBkZWZhdWx0IGRhdGUtdGltZSBtb2RlIGZvciB0aGUgJ2xvZycgY29tbWFuZC4KKwlTZXR0aW5nIGEgdmFsdWUgZm9yIGxvZy5kYXRlIGlzIHNpbWlsYXIgdG8gdXNpbmcgJ2dpdCBsb2cnJ3MKKwlgLS1kYXRlYCBvcHRpb24uICBTZWUgbGlua2dpdDpnaXQtbG9nWzFdIGZvciBkZXRhaWxzLgorCitsb2cuZGVjb3JhdGU6OgorCVByaW50IG91dCB0aGUgcmVmIG5hbWVzIG9mIGFueSBjb21taXRzIHRoYXQgYXJlIHNob3duIGJ5IHRoZSBsb2cKKwljb21tYW5kLiBJZiAnc2hvcnQnIGlzIHNwZWNpZmllZCwgdGhlIHJlZiBuYW1lIHByZWZpeGVzICdyZWZzL2hlYWRzLycsCisJJ3JlZnMvdGFncy8nIGFuZCAncmVmcy9yZW1vdGVzLycgd2lsbCBub3QgYmUgcHJpbnRlZC4gSWYgJ2Z1bGwnIGlzCisJc3BlY2lmaWVkLCB0aGUgZnVsbCByZWYgbmFtZSAoaW5jbHVkaW5nIHByZWZpeCkgd2lsbCBiZSBwcmludGVkLgorCVRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGxvZyBjb21tYW5kcyAnLS1kZWNvcmF0ZScgb3B0aW9uLgorCitsb2cuZm9sbG93OjoKKwlJZiBgdHJ1ZWAsIGBnaXQgbG9nYCB3aWxsIGFjdCBhcyBpZiB0aGUgYC0tZm9sbG93YCBvcHRpb24gd2FzIHVzZWQgd2hlbgorCWEgc2luZ2xlIDxwYXRoPiBpcyBnaXZlbi4gIFRoaXMgaGFzIHRoZSBzYW1lIGxpbWl0YXRpb25zIGFzIGAtLWZvbGxvd2AsCisJaS5lLiBpdCBjYW5ub3QgYmUgdXNlZCB0byBmb2xsb3cgbXVsdGlwbGUgZmlsZXMgYW5kIGRvZXMgbm90IHdvcmsgd2VsbAorCW9uIG5vbi1saW5lYXIgaGlzdG9yeS4KKworbG9nLnNob3dSb290OjoKKwlJZiB0cnVlLCB0aGUgaW5pdGlhbCBjb21taXQgd2lsbCBiZSBzaG93biBhcyBhIGJpZyBjcmVhdGlvbiBldmVudC4KKwlUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBkaWZmIGFnYWluc3QgYW4gZW1wdHkgdHJlZS4KKwlUb29scyBsaWtlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSBvciBsaW5rZ2l0OmdpdC13aGF0Y2hhbmdlZFsxXSwgd2hpY2gKKwlub3JtYWxseSBoaWRlIHRoZSByb290IGNvbW1pdCB3aWxsIG5vdyBzaG93IGl0LiBUcnVlIGJ5IGRlZmF1bHQuCisKK2xvZy5tYWlsbWFwOjoKKwlJZiB0cnVlLCBtYWtlcyBsaW5rZ2l0OmdpdC1sb2dbMV0sIGxpbmtnaXQ6Z2l0LXNob3dbMV0sIGFuZAorCWxpbmtnaXQ6Z2l0LXdoYXRjaGFuZ2VkWzFdIGFzc3VtZSBgLS11c2UtbWFpbG1hcGAuCisKK21haWxpbmZvLnNjaXNzb3JzOjoKKwlJZiB0cnVlLCBtYWtlcyBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSAoYW5kIHRoZXJlZm9yZQorCWxpbmtnaXQ6Z2l0LWFtWzFdKSBhY3QgYnkgZGVmYXVsdCBhcyBpZiB0aGUgLS1zY2lzc29ycyBvcHRpb24KKwl3YXMgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQtbGluZS4gV2hlbiBhY3RpdmUsIHRoaXMgZmVhdHVyZXMKKwlyZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgbWVzc2FnZSBib2R5IGJlZm9yZSBhIHNjaXNzb3JzCisJbGluZSAoaS5lLiBjb25zaXN0aW5nIG1haW5seSBvZiAiPjgiLCAiODwiIGFuZCAiLSIpLgorCittYWlsbWFwLmZpbGU6OgorCVRoZSBsb2NhdGlvbiBvZiBhbiBhdWdtZW50aW5nIG1haWxtYXAgZmlsZS4gVGhlIGRlZmF1bHQKKwltYWlsbWFwLCBsb2NhdGVkIGluIHRoZSByb290IG9mIHRoZSByZXBvc2l0b3J5LCBpcyBsb2FkZWQKKwlmaXJzdCwgdGhlbiB0aGUgbWFpbG1hcCBmaWxlIHBvaW50ZWQgdG8gYnkgdGhpcyB2YXJpYWJsZS4KKwlUaGUgbG9jYXRpb24gb2YgdGhlIG1haWxtYXAgZmlsZSBtYXkgYmUgaW4gYSByZXBvc2l0b3J5CisJc3ViZGlyZWN0b3J5LCBvciBzb21ld2hlcmUgb3V0c2lkZSBvZiB0aGUgcmVwb3NpdG9yeSBpdHNlbGYuCisJU2VlIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIGFuZCBsaW5rZ2l0OmdpdC1ibGFtZVsxXS4KKworbWFpbG1hcC5ibG9iOjoKKwlMaWtlIGBtYWlsbWFwLmZpbGVgLCBidXQgY29uc2lkZXIgdGhlIHZhbHVlIGFzIGEgcmVmZXJlbmNlIHRvIGEKKwlibG9iIGluIHRoZSByZXBvc2l0b3J5LiBJZiBib3RoIGBtYWlsbWFwLmZpbGVgIGFuZAorCWBtYWlsbWFwLmJsb2JgIGFyZSBnaXZlbiwgYm90aCBhcmUgcGFyc2VkLCB3aXRoIGVudHJpZXMgZnJvbQorCWBtYWlsbWFwLmZpbGVgIHRha2luZyBwcmVjZWRlbmNlLiBJbiBhIGJhcmUgcmVwb3NpdG9yeSwgdGhpcworCWRlZmF1bHRzIHRvIGBIRUFEOi5tYWlsbWFwYC4gSW4gYSBub24tYmFyZSByZXBvc2l0b3J5LCBpdAorCWRlZmF1bHRzIHRvIGVtcHR5LgorCittYW4udmlld2VyOjoKKwlTcGVjaWZ5IHRoZSBwcm9ncmFtcyB0aGF0IG1heSBiZSB1c2VkIHRvIGRpc3BsYXkgaGVscCBpbiB0aGUKKwknbWFuJyBmb3JtYXQuIFNlZSBsaW5rZ2l0OmdpdC1oZWxwWzFdLgorCittYW4uPHRvb2w+LmNtZDo6CisJU3BlY2lmeSB0aGUgY29tbWFuZCB0byBpbnZva2UgdGhlIHNwZWNpZmllZCBtYW4gdmlld2VyLiBUaGUKKwlzcGVjaWZpZWQgY29tbWFuZCBpcyBldmFsdWF0ZWQgaW4gc2hlbGwgd2l0aCB0aGUgbWFuIHBhZ2UKKwlwYXNzZWQgYXMgYXJndW1lbnQuIChTZWUgbGlua2dpdDpnaXQtaGVscFsxXS4pCisKK21hbi48dG9vbD4ucGF0aDo6CisJT3ZlcnJpZGUgdGhlIHBhdGggZm9yIHRoZSBnaXZlbiB0b29sIHRoYXQgbWF5IGJlIHVzZWQgdG8KKwlkaXNwbGF5IGhlbHAgaW4gdGhlICdtYW4nIGZvcm1hdC4gU2VlIGxpbmtnaXQ6Z2l0LWhlbHBbMV0uCisKK2luY2x1ZGU6Om1lcmdlLWNvbmZpZy50eHRbXQorCittZXJnZXRvb2wuPHRvb2w+LnBhdGg6OgorCU92ZXJyaWRlIHRoZSBwYXRoIGZvciB0aGUgZ2l2ZW4gdG9vbC4gIFRoaXMgaXMgdXNlZnVsIGluIGNhc2UKKwl5b3VyIHRvb2wgaXMgbm90IGluIHRoZSBQQVRILgorCittZXJnZXRvb2wuPHRvb2w+LmNtZDo6CisJU3BlY2lmeSB0aGUgY29tbWFuZCB0byBpbnZva2UgdGhlIHNwZWNpZmllZCBtZXJnZSB0b29sLiAgVGhlCisJc3BlY2lmaWVkIGNvbW1hbmQgaXMgZXZhbHVhdGVkIGluIHNoZWxsIHdpdGggdGhlIGZvbGxvd2luZworCXZhcmlhYmxlcyBhdmFpbGFibGU6ICdCQVNFJyBpcyB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeSBmaWxlCisJY29udGFpbmluZyB0aGUgY29tbW9uIGJhc2Ugb2YgdGhlIGZpbGVzIHRvIGJlIG1lcmdlZCwgaWYgYXZhaWxhYmxlOworCSdMT0NBTCcgaXMgdGhlIG5hbWUgb2YgYSB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZgorCXRoZSBmaWxlIG9uIHRoZSBjdXJyZW50IGJyYW5jaDsgJ1JFTU9URScgaXMgdGhlIG5hbWUgb2YgYSB0ZW1wb3JhcnkKKwlmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGZyb20gdGhlIGJyYW5jaCBiZWluZworCW1lcmdlZDsgJ01FUkdFRCcgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gd2hpY2ggdGhlIG1lcmdlCisJdG9vbCBzaG91bGQgd3JpdGUgdGhlIHJlc3VsdHMgb2YgYSBzdWNjZXNzZnVsIG1lcmdlLgorCittZXJnZXRvb2wuPHRvb2w+LnRydXN0RXhpdENvZGU6OgorCUZvciBhIGN1c3RvbSBtZXJnZSBjb21tYW5kLCBzcGVjaWZ5IHdoZXRoZXIgdGhlIGV4aXQgY29kZSBvZgorCXRoZSBtZXJnZSBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBtZXJnZSB3YXMKKwlzdWNjZXNzZnVsLiAgSWYgdGhpcyBpcyBub3Qgc2V0IHRvIHRydWUgdGhlbiB0aGUgbWVyZ2UgdGFyZ2V0IGZpbGUKKwl0aW1lc3RhbXAgaXMgY2hlY2tlZCBhbmQgdGhlIG1lcmdlIGFzc3VtZWQgdG8gaGF2ZSBiZWVuIHN1Y2Nlc3NmdWwKKwlpZiB0aGUgZmlsZSBoYXMgYmVlbiB1cGRhdGVkLCBvdGhlcndpc2UgdGhlIHVzZXIgaXMgcHJvbXB0ZWQgdG8KKwlpbmRpY2F0ZSB0aGUgc3VjY2VzcyBvZiB0aGUgbWVyZ2UuCisKK21lcmdldG9vbC5tZWxkLmhhc091dHB1dDo6CisJT2xkZXIgdmVyc2lvbnMgb2YgYG1lbGRgIGRvIG5vdCBzdXBwb3J0IHRoZSBgLS1vdXRwdXRgIG9wdGlvbi4KKwlHaXQgd2lsbCBhdHRlbXB0IHRvIGRldGVjdCB3aGV0aGVyIGBtZWxkYCBzdXBwb3J0cyBgLS1vdXRwdXRgCisJYnkgaW5zcGVjdGluZyB0aGUgb3V0cHV0IG9mIGBtZWxkIC0taGVscGAuICBDb25maWd1cmluZworCWBtZXJnZXRvb2wubWVsZC5oYXNPdXRwdXRgIHdpbGwgbWFrZSBHaXQgc2tpcCB0aGVzZSBjaGVja3MgYW5kCisJdXNlIHRoZSBjb25maWd1cmVkIHZhbHVlIGluc3RlYWQuICBTZXR0aW5nIGBtZXJnZXRvb2wubWVsZC5oYXNPdXRwdXRgCisJdG8gYHRydWVgIHRlbGxzIEdpdCB0byB1bmNvbmRpdGlvbmFsbHkgdXNlIHRoZSBgLS1vdXRwdXRgIG9wdGlvbiwKKwlhbmQgYGZhbHNlYCBhdm9pZHMgdXNpbmcgYC0tb3V0cHV0YC4KKworbWVyZ2V0b29sLmtlZXBCYWNrdXA6OgorCUFmdGVyIHBlcmZvcm1pbmcgYSBtZXJnZSwgdGhlIG9yaWdpbmFsIGZpbGUgd2l0aCBjb25mbGljdCBtYXJrZXJzCisJY2FuIGJlIHNhdmVkIGFzIGEgZmlsZSB3aXRoIGEgYC5vcmlnYCBleHRlbnNpb24uICBJZiB0aGlzIHZhcmlhYmxlCisJaXMgc2V0IHRvIGBmYWxzZWAgdGhlbiB0aGlzIGZpbGUgaXMgbm90IHByZXNlcnZlZC4gIERlZmF1bHRzIHRvCisJYHRydWVgIChpLmUuIGtlZXAgdGhlIGJhY2t1cCBmaWxlcykuCisKK21lcmdldG9vbC5rZWVwVGVtcG9yYXJpZXM6OgorCVdoZW4gaW52b2tpbmcgYSBjdXN0b20gbWVyZ2UgdG9vbCwgR2l0IHVzZXMgYSBzZXQgb2YgdGVtcG9yYXJ5CisJZmlsZXMgdG8gcGFzcyB0byB0aGUgdG9vbC4gSWYgdGhlIHRvb2wgcmV0dXJucyBhbiBlcnJvciBhbmQgdGhpcworCXZhcmlhYmxlIGlzIHNldCB0byBgdHJ1ZWAsIHRoZW4gdGhlc2UgdGVtcG9yYXJ5IGZpbGVzIHdpbGwgYmUKKwlwcmVzZXJ2ZWQsIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgcmVtb3ZlZCBhZnRlciB0aGUgdG9vbCBoYXMKKwlleGl0ZWQuIERlZmF1bHRzIHRvIGBmYWxzZWAuCisKK21lcmdldG9vbC53cml0ZVRvVGVtcDo6CisJR2l0IHdyaXRlcyB0ZW1wb3JhcnkgJ0JBU0UnLCAnTE9DQUwnLCBhbmQgJ1JFTU9URScgdmVyc2lvbnMgb2YKKwljb25mbGljdGluZyBmaWxlcyBpbiB0aGUgd29ya3RyZWUgYnkgZGVmYXVsdC4gIEdpdCB3aWxsIGF0dGVtcHQKKwl0byB1c2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciB0aGVzZSBmaWxlcyB3aGVuIHNldCBgdHJ1ZWAuCisJRGVmYXVsdHMgdG8gYGZhbHNlYC4KKworbWVyZ2V0b29sLnByb21wdDo6CisJUHJvbXB0IGJlZm9yZSBlYWNoIGludm9jYXRpb24gb2YgdGhlIG1lcmdlIHJlc29sdXRpb24gcHJvZ3JhbS4KKworbm90ZXMubWVyZ2VTdHJhdGVneTo6CisJV2hpY2ggbWVyZ2Ugc3RyYXRlZ3kgdG8gY2hvb3NlIGJ5IGRlZmF1bHQgd2hlbiByZXNvbHZpbmcgbm90ZXMKKwljb25mbGljdHMuICBNdXN0IGJlIG9uZSBvZiBgbWFudWFsYCwgYG91cnNgLCBgdGhlaXJzYCwgYHVuaW9uYCwgb3IKKwlgY2F0X3NvcnRfdW5pcWAuICBEZWZhdWx0cyB0byBgbWFudWFsYC4gIFNlZSAiTk9URVMgTUVSR0UgU1RSQVRFR0lFUyIKKwlzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LW5vdGVzWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGVhY2ggc3RyYXRlZ3kuCisKK25vdGVzLjxuYW1lPi5tZXJnZVN0cmF0ZWd5OjoKKwlXaGljaCBtZXJnZSBzdHJhdGVneSB0byBjaG9vc2Ugd2hlbiBkb2luZyBhIG5vdGVzIG1lcmdlIGludG8KKwlyZWZzL25vdGVzLzxuYW1lPi4gIFRoaXMgb3ZlcnJpZGVzIHRoZSBtb3JlIGdlbmVyYWwKKwkibm90ZXMubWVyZ2VTdHJhdGVneSIuICBTZWUgdGhlICJOT1RFUyBNRVJHRSBTVFJBVEVHSUVTIiBzZWN0aW9uIGluCisJbGlua2dpdDpnaXQtbm90ZXNbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGF2YWlsYWJsZSBzdHJhdGVnaWVzLgorCitub3Rlcy5kaXNwbGF5UmVmOjoKKwlUaGUgKGZ1bGx5IHF1YWxpZmllZCkgcmVmbmFtZSBmcm9tIHdoaWNoIHRvIHNob3cgbm90ZXMgd2hlbgorCXNob3dpbmcgY29tbWl0IG1lc3NhZ2VzLiAgVGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgY2FuIGJlIHNldAorCXRvIGEgZ2xvYiwgaW4gd2hpY2ggY2FzZSBub3RlcyBmcm9tIGFsbCBtYXRjaGluZyByZWZzIHdpbGwgYmUKKwlzaG93bi4gIFlvdSBtYXkgYWxzbyBzcGVjaWZ5IHRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCXNldmVyYWwgdGltZXMuICBBIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgZm9yIHJlZnMgdGhhdCBkbyBub3QKKwlleGlzdCwgYnV0IGEgZ2xvYiB0aGF0IGRvZXMgbm90IG1hdGNoIGFueSByZWZzIGlzIHNpbGVudGx5CisJaWdub3JlZC4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgR0lUX05PVEVTX0RJU1BMQVlfUkVGYAorZW52aXJvbm1lbnQgdmFyaWFibGUsIHdoaWNoIG11c3QgYmUgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiByZWZzIG9yCitnbG9icy4KKysKK1RoZSBlZmZlY3RpdmUgdmFsdWUgb2YgImNvcmUubm90ZXNSZWYiIChwb3NzaWJseSBvdmVycmlkZGVuIGJ5CitHSVRfTk9URVNfUkVGKSBpcyBhbHNvIGltcGxpY2l0bHkgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgcmVmcyB0byBiZQorZGlzcGxheWVkLgorCitub3Rlcy5yZXdyaXRlLjxjb21tYW5kPjo6CisJV2hlbiByZXdyaXRpbmcgY29tbWl0cyB3aXRoIDxjb21tYW5kPiAoY3VycmVudGx5IGBhbWVuZGAgb3IKKwlgcmViYXNlYCkgYW5kIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIGB0cnVlYCwgR2l0CisJYXV0b21hdGljYWxseSBjb3BpZXMgeW91ciBub3RlcyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUKKwlyZXdyaXR0ZW4gY29tbWl0LiAgRGVmYXVsdHMgdG8gYHRydWVgLCBidXQgc2VlCisJIm5vdGVzLnJld3JpdGVSZWYiIGJlbG93LgorCitub3Rlcy5yZXdyaXRlTW9kZTo6CisJV2hlbiBjb3B5aW5nIG5vdGVzIGR1cmluZyBhIHJld3JpdGUgKHNlZSB0aGUKKwkibm90ZXMucmV3cml0ZS48Y29tbWFuZD4iIG9wdGlvbiksIGRldGVybWluZXMgd2hhdCB0byBkbyBpZgorCXRoZSB0YXJnZXQgY29tbWl0IGFscmVhZHkgaGFzIGEgbm90ZS4gIE11c3QgYmUgb25lIG9mCisJYG92ZXJ3cml0ZWAsIGBjb25jYXRlbmF0ZWAsIGBjYXRfc29ydF91bmlxYCwgb3IgYGlnbm9yZWAuCisJRGVmYXVsdHMgdG8gYGNvbmNhdGVuYXRlYC4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgR0lUX05PVEVTX1JFV1JJVEVfTU9ERWAKK2Vudmlyb25tZW50IHZhcmlhYmxlLgorCitub3Rlcy5yZXdyaXRlUmVmOjoKKwlXaGVuIGNvcHlpbmcgbm90ZXMgZHVyaW5nIGEgcmV3cml0ZSwgc3BlY2lmaWVzIHRoZSAoZnVsbHkKKwlxdWFsaWZpZWQpIHJlZiB3aG9zZSBub3RlcyBzaG91bGQgYmUgY29waWVkLiAgVGhlIHJlZiBtYXkgYmUgYQorCWdsb2IsIGluIHdoaWNoIGNhc2Ugbm90ZXMgaW4gYWxsIG1hdGNoaW5nIHJlZnMgd2lsbCBiZSBjb3BpZWQuCisJWW91IG1heSBhbHNvIHNwZWNpZnkgdGhpcyBjb25maWd1cmF0aW9uIHNldmVyYWwgdGltZXMuCisrCitEb2VzIG5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZTsgeW91IG11c3QgY29uZmlndXJlIHRoaXMgdmFyaWFibGUgdG8KK2VuYWJsZSBub3RlIHJld3JpdGluZy4gIFNldCBpdCB0byBgcmVmcy9ub3Rlcy9jb21taXRzYCB0byBlbmFibGUKK3Jld3JpdGluZyBmb3IgdGhlIGRlZmF1bHQgY29tbWl0IG5vdGVzLgorKworVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGBHSVRfTk9URVNfUkVXUklURV9SRUZgCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hpY2ggbXVzdCBiZSBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIHJlZnMgb3IKK2dsb2JzLgorCitwYWNrLndpbmRvdzo6CisJVGhlIHNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGJ5IGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXSB3aGVuIG5vCisJd2luZG93IHNpemUgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gRGVmYXVsdHMgdG8gMTAuCisKK3BhY2suZGVwdGg6OgorCVRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIHVzZWQgYnkgbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdIHdoZW4gbm8KKwltYXhpbXVtIGRlcHRoIGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuIERlZmF1bHRzIHRvIDUwLgorCitwYWNrLndpbmRvd01lbW9yeTo6CisJVGhlIG1heGltdW0gc2l6ZSBvZiBtZW1vcnkgdGhhdCBpcyBjb25zdW1lZCBieSBlYWNoIHRocmVhZAorCWluIGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXSBmb3IgcGFjayB3aW5kb3cgbWVtb3J5IHdoZW4KKwlubyBsaW1pdCBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhlIHZhbHVlIGNhbiBiZQorCXN1ZmZpeGVkIHdpdGggImsiLCAibSIsIG9yICJnIi4gIFdoZW4gbGVmdCB1bmNvbmZpZ3VyZWQgKG9yCisJc2V0IGV4cGxpY2l0bHkgdG8gMCksIHRoZXJlIHdpbGwgYmUgbm8gbGltaXQuCisKK3BhY2suY29tcHJlc3Npb246OgorCUFuIGludGVnZXIgLTEuLjksIGluZGljYXRpbmcgdGhlIGNvbXByZXNzaW9uIGxldmVsIGZvciBvYmplY3RzCisJaW4gYSBwYWNrIGZpbGUuIC0xIGlzIHRoZSB6bGliIGRlZmF1bHQuIDAgbWVhbnMgbm8KKwljb21wcmVzc2lvbiwgYW5kIDEuLjkgYXJlIHZhcmlvdXMgc3BlZWQvc2l6ZSB0cmFkZW9mZnMsIDkgYmVpbmcKKwlzbG93ZXN0LiAgSWYgbm90IHNldCwgIGRlZmF1bHRzIHRvIGNvcmUuY29tcHJlc3Npb24uICBJZiB0aGF0IGlzCisJbm90IHNldCwgIGRlZmF1bHRzIHRvIC0xLCB0aGUgemxpYiBkZWZhdWx0LCB3aGljaCBpcyAiYSBkZWZhdWx0CisJY29tcHJvbWlzZSBiZXR3ZWVuIHNwZWVkIGFuZCBjb21wcmVzc2lvbiAoY3VycmVudGx5IGVxdWl2YWxlbnQKKwl0byBsZXZlbCA2KS4iCisrCitOb3RlIHRoYXQgY2hhbmdpbmcgdGhlIGNvbXByZXNzaW9uIGxldmVsIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgcmVjb21wcmVzcworYWxsIGV4aXN0aW5nIG9iamVjdHMuIFlvdSBjYW4gZm9yY2UgcmVjb21wcmVzc2lvbiBieSBwYXNzaW5nIHRoZSAtRiBvcHRpb24KK3RvIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXS4KKworcGFjay5kZWx0YUNhY2hlU2l6ZTo6CisJVGhlIG1heGltdW0gbWVtb3J5IGluIGJ5dGVzIHVzZWQgZm9yIGNhY2hpbmcgZGVsdGFzIGluCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdIGJlZm9yZSB3cml0aW5nIHRoZW0gb3V0IHRvIGEgcGFjay4KKwlUaGlzIGNhY2hlIGlzIHVzZWQgdG8gc3BlZWQgdXAgdGhlIHdyaXRpbmcgb2JqZWN0IHBoYXNlIGJ5IG5vdAorCWhhdmluZyB0byByZWNvbXB1dGUgdGhlIGZpbmFsIGRlbHRhIHJlc3VsdCBvbmNlIHRoZSBiZXN0IG1hdGNoCisJZm9yIGFsbCBvYmplY3RzIGlzIGZvdW5kLiAgUmVwYWNraW5nIGxhcmdlIHJlcG9zaXRvcmllcyBvbiBtYWNoaW5lcworCXdoaWNoIGFyZSB0aWdodCB3aXRoIG1lbW9yeSBtaWdodCBiZSBiYWRseSBpbXBhY3RlZCBieSB0aGlzIHRob3VnaCwKKwllc3BlY2lhbGx5IGlmIHRoaXMgY2FjaGUgcHVzaGVzIHRoZSBzeXN0ZW0gaW50byBzd2FwcGluZy4KKwlBIHZhbHVlIG9mIDAgbWVhbnMgbm8gbGltaXQuIFRoZSBzbWFsbGVzdCBzaXplIG9mIDEgYnl0ZSBtYXkgYmUKKwl1c2VkIHRvIHZpcnR1YWxseSBkaXNhYmxlIHRoaXMgY2FjaGUuIERlZmF1bHRzIHRvIDI1NiBNaUIuCisKK3BhY2suZGVsdGFDYWNoZUxpbWl0OjoKKwlUaGUgbWF4aW11bSBzaXplIG9mIGEgZGVsdGEsIHRoYXQgaXMgY2FjaGVkIGluCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLiBUaGlzIGNhY2hlIGlzIHVzZWQgdG8gc3BlZWQgdXAgdGhlCisJd3JpdGluZyBvYmplY3QgcGhhc2UgYnkgbm90IGhhdmluZyB0byByZWNvbXB1dGUgdGhlIGZpbmFsIGRlbHRhCisJcmVzdWx0IG9uY2UgdGhlIGJlc3QgbWF0Y2ggZm9yIGFsbCBvYmplY3RzIGlzIGZvdW5kLiBEZWZhdWx0cyB0byAxMDAwLgorCitwYWNrLnRocmVhZHM6OgorCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gc3Bhd24gd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QKKwlkZWx0YSBtYXRjaGVzLiAgVGhpcyByZXF1aXJlcyB0aGF0IGxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXQorCWJlIGNvbXBpbGVkIHdpdGggcHRocmVhZHMgb3RoZXJ3aXNlIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgd2l0aCBhCisJd2FybmluZy4gVGhpcyBpcyBtZWFudCB0byByZWR1Y2UgcGFja2luZyB0aW1lIG9uIG11bHRpcHJvY2Vzc29yCisJbWFjaGluZXMuIFRoZSByZXF1aXJlZCBhbW91bnQgb2YgbWVtb3J5IGZvciB0aGUgZGVsdGEgc2VhcmNoIHdpbmRvdworCWlzIGhvd2V2ZXIgbXVsdGlwbGllZCBieSB0aGUgbnVtYmVyIG9mIHRocmVhZHMuCisJU3BlY2lmeWluZyAwIHdpbGwgY2F1c2UgR2l0IHRvIGF1dG8tZGV0ZWN0IHRoZSBudW1iZXIgb2YgQ1BVJ3MKKwlhbmQgc2V0IHRoZSBudW1iZXIgb2YgdGhyZWFkcyBhY2NvcmRpbmdseS4KKworcGFjay5pbmRleFZlcnNpb246OgorCVNwZWNpZnkgdGhlIGRlZmF1bHQgcGFjayBpbmRleCB2ZXJzaW9uLiAgVmFsaWQgdmFsdWVzIGFyZSAxIGZvcgorCWxlZ2FjeSBwYWNrIGluZGV4IHVzZWQgYnkgR2l0IHZlcnNpb25zIHByaW9yIHRvIDEuNS4yLCBhbmQgMiBmb3IKKwl0aGUgbmV3IHBhY2sgaW5kZXggd2l0aCBjYXBhYmlsaXRpZXMgZm9yIHBhY2tzIGxhcmdlciB0aGFuIDQgR0IKKwlhcyB3ZWxsIGFzIHByb3BlciBwcm90ZWN0aW9uIGFnYWluc3QgdGhlIHJlcGFja2luZyBvZiBjb3JydXB0ZWQKKwlwYWNrcy4gIFZlcnNpb24gMiBpcyB0aGUgZGVmYXVsdC4gIE5vdGUgdGhhdCB2ZXJzaW9uIDIgaXMgZW5mb3JjZWQKKwlhbmQgdGhpcyBjb25maWcgb3B0aW9uIGlnbm9yZWQgd2hlbmV2ZXIgdGhlIGNvcnJlc3BvbmRpbmcgcGFjayBpcworCWxhcmdlciB0aGFuIDIgR0IuCisrCitJZiB5b3UgaGF2ZSBhbiBvbGQgR2l0IHRoYXQgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgdmVyc2lvbiAyIGAqLmlkeGAgZmlsZSwKK2Nsb25pbmcgb3IgZmV0Y2hpbmcgb3ZlciBhIG5vbiBuYXRpdmUgcHJvdG9jb2wgKGUuZy4gImh0dHAiIGFuZCAicnN5bmMiKQordGhhdCB3aWxsIGNvcHkgYm90aCBgKi5wYWNrYCBmaWxlIGFuZCBjb3JyZXNwb25kaW5nIGAqLmlkeGAgZmlsZSBmcm9tIHRoZQorb3RoZXIgc2lkZSBtYXkgZ2l2ZSB5b3UgYSByZXBvc2l0b3J5IHRoYXQgY2Fubm90IGJlIGFjY2Vzc2VkIHdpdGggeW91cgorb2xkZXIgdmVyc2lvbiBvZiBHaXQuIElmIHRoZSBgKi5wYWNrYCBmaWxlIGlzIHNtYWxsZXIgdGhhbiAyIEdCLCBob3dldmVyLAoreW91IGNhbiB1c2UgbGlua2dpdDpnaXQtaW5kZXgtcGFja1sxXSBvbiB0aGUgKi5wYWNrIGZpbGUgdG8gcmVnZW5lcmF0ZQordGhlIGAqLmlkeGAgZmlsZS4KKworcGFjay5wYWNrU2l6ZUxpbWl0OjoKKwlUaGUgbWF4aW11bSBzaXplIG9mIGEgcGFjay4gIFRoaXMgc2V0dGluZyBvbmx5IGFmZmVjdHMKKwlwYWNraW5nIHRvIGEgZmlsZSB3aGVuIHJlcGFja2luZywgaS5lLiB0aGUgZ2l0Oi8vIHByb3RvY29sCisJaXMgdW5hZmZlY3RlZC4gIEl0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgLS1tYXgtcGFjay1zaXplYAorCW9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0uIFRoZSBtaW5pbXVtIHNpemUgYWxsb3dlZCBpcworCWxpbWl0ZWQgdG8gMSBNaUIuIFRoZSBkZWZhdWx0IGlzIHVubGltaXRlZC4KKwlDb21tb24gdW5pdCBzdWZmaXhlcyBvZiAnaycsICdtJywgb3IgJ2cnIGFyZQorCXN1cHBvcnRlZC4KKworcGFjay51c2VCaXRtYXBzOjoKKwlXaGVuIHRydWUsIGdpdCB3aWxsIHVzZSBwYWNrIGJpdG1hcHMgKGlmIGF2YWlsYWJsZSkgd2hlbiBwYWNraW5nCisJdG8gc3Rkb3V0IChlLmcuLCBkdXJpbmcgdGhlIHNlcnZlciBzaWRlIG9mIGEgZmV0Y2gpLiBEZWZhdWx0cyB0bworCXRydWUuIFlvdSBzaG91bGQgbm90IGdlbmVyYWxseSBuZWVkIHRvIHR1cm4gdGhpcyBvZmYgdW5sZXNzCisJeW91IGFyZSBkZWJ1Z2dpbmcgcGFjayBiaXRtYXBzLgorCitwYWNrLndyaXRlQml0bWFwcyAoZGVwcmVjYXRlZCk6OgorCVRoaXMgaXMgYSBkZXByZWNhdGVkIHN5bm9ueW0gZm9yIGByZXBhY2sud3JpdGVCaXRtYXBzYC4KKworcGFjay53cml0ZUJpdG1hcEhhc2hDYWNoZTo6CisJV2hlbiB0cnVlLCBnaXQgd2lsbCBpbmNsdWRlIGEgImhhc2ggY2FjaGUiIHNlY3Rpb24gaW4gdGhlIGJpdG1hcAorCWluZGV4IChpZiBvbmUgaXMgd3JpdHRlbikuIFRoaXMgY2FjaGUgY2FuIGJlIHVzZWQgdG8gZmVlZCBnaXQncworCWRlbHRhIGhldXJpc3RpY3MsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYmV0dGVyIGRlbHRhcyBiZXR3ZWVuCisJYml0bWFwcGVkIGFuZCBub24tYml0bWFwcGVkIG9iamVjdHMgKGUuZy4sIHdoZW4gc2VydmluZyBhIGZldGNoCisJYmV0d2VlbiBhbiBvbGRlciwgYml0bWFwcGVkIHBhY2sgYW5kIG9iamVjdHMgdGhhdCBoYXZlIGJlZW4KKwlwdXNoZWQgc2luY2UgdGhlIGxhc3QgZ2MpLiBUaGUgZG93bnNpZGUgaXMgdGhhdCBpdCBjb25zdW1lcyA0CisJYnl0ZXMgcGVyIG9iamVjdCBvZiBkaXNrIHNwYWNlLCBhbmQgdGhhdCBKR2l0J3MgYml0bWFwCisJaW1wbGVtZW50YXRpb24gZG9lcyBub3QgdW5kZXJzdGFuZCBpdCwgY2F1c2luZyBpdCB0byBjb21wbGFpbiBpZgorCUdpdCBhbmQgSkdpdCBhcmUgdXNlZCBvbiB0aGUgc2FtZSByZXBvc2l0b3J5LiBEZWZhdWx0cyB0byBmYWxzZS4KKworcGFnZXIuPGNtZD46OgorCUlmIHRoZSB2YWx1ZSBpcyBib29sZWFuLCB0dXJucyBvbiBvciBvZmYgcGFnaW5hdGlvbiBvZiB0aGUKKwlvdXRwdXQgb2YgYSBwYXJ0aWN1bGFyIEdpdCBzdWJjb21tYW5kIHdoZW4gd3JpdGluZyB0byBhIHR0eS4KKwlPdGhlcndpc2UsIHR1cm5zIG9uIHBhZ2luYXRpb24gZm9yIHRoZSBzdWJjb21tYW5kIHVzaW5nIHRoZQorCXBhZ2VyIHNwZWNpZmllZCBieSB0aGUgdmFsdWUgb2YgYHBhZ2VyLjxjbWQ+YC4gIElmIGAtLXBhZ2luYXRlYAorCW9yIGAtLW5vLXBhZ2VyYCBpcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgaXQgdGFrZXMKKwlwcmVjZWRlbmNlIG92ZXIgdGhpcyBvcHRpb24uICBUbyBkaXNhYmxlIHBhZ2luYXRpb24gZm9yIGFsbAorCWNvbW1hbmRzLCBzZXQgYGNvcmUucGFnZXJgIG9yIGBHSVRfUEFHRVJgIHRvIGBjYXRgLgorCitwcmV0dHkuPG5hbWU+OjoKKwlBbGlhcyBmb3IgYSAtLXByZXR0eT0gZm9ybWF0IHN0cmluZywgYXMgc3BlY2lmaWVkIGluCisJbGlua2dpdDpnaXQtbG9nWzFdLiBBbnkgYWxpYXNlcyBkZWZpbmVkIGhlcmUgY2FuIGJlIHVzZWQganVzdAorCWFzIHRoZSBidWlsdC1pbiBwcmV0dHkgZm9ybWF0cyBjb3VsZC4gRm9yIGV4YW1wbGUsCisJcnVubmluZyBgZ2l0IGNvbmZpZyBwcmV0dHkuY2hhbmdlbG9nICJmb3JtYXQ6KiAlSCAlcyJgCisJd291bGQgY2F1c2UgdGhlIGludm9jYXRpb24gYGdpdCBsb2cgLS1wcmV0dHk9Y2hhbmdlbG9nYAorCXRvIGJlIGVxdWl2YWxlbnQgdG8gcnVubmluZyBgZ2l0IGxvZyAiLS1wcmV0dHk9Zm9ybWF0OiogJUggJXMiYC4KKwlOb3RlIHRoYXQgYW4gYWxpYXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGEgYnVpbHQtaW4gZm9ybWF0CisJd2lsbCBiZSBzaWxlbnRseSBpZ25vcmVkLgorCitwdWxsLmZmOjoKKwlCeSBkZWZhdWx0LCBHaXQgZG9lcyBub3QgY3JlYXRlIGFuIGV4dHJhIG1lcmdlIGNvbW1pdCB3aGVuIG1lcmdpbmcKKwlhIGNvbW1pdCB0aGF0IGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgY3VycmVudCBjb21taXQuIEluc3RlYWQsIHRoZQorCXRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggaXMgZmFzdC1mb3J3YXJkZWQuIFdoZW4gc2V0IHRvIGBmYWxzZWAsCisJdGhpcyB2YXJpYWJsZSB0ZWxscyBHaXQgdG8gY3JlYXRlIGFuIGV4dHJhIG1lcmdlIGNvbW1pdCBpbiBzdWNoCisJYSBjYXNlIChlcXVpdmFsZW50IHRvIGdpdmluZyB0aGUgYC0tbm8tZmZgIG9wdGlvbiBmcm9tIHRoZSBjb21tYW5kCisJbGluZSkuIFdoZW4gc2V0IHRvIGBvbmx5YCwgb25seSBzdWNoIGZhc3QtZm9yd2FyZCBtZXJnZXMgYXJlCisJYWxsb3dlZCAoZXF1aXZhbGVudCB0byBnaXZpbmcgdGhlIGAtLWZmLW9ubHlgIG9wdGlvbiBmcm9tIHRoZQorCWNvbW1hbmQgbGluZSkuIFRoaXMgc2V0dGluZyBvdmVycmlkZXMgYG1lcmdlLmZmYCB3aGVuIHB1bGxpbmcuCisKK3B1bGwucmViYXNlOjoKKwlXaGVuIHRydWUsIHJlYmFzZSBicmFuY2hlcyBvbiB0b3Agb2YgdGhlIGZldGNoZWQgYnJhbmNoLCBpbnN0ZWFkCisJb2YgbWVyZ2luZyB0aGUgZGVmYXVsdCBicmFuY2ggZnJvbSB0aGUgZGVmYXVsdCByZW1vdGUgd2hlbiAiZ2l0CisJcHVsbCIgaXMgcnVuLiBTZWUgImJyYW5jaC48bmFtZT4ucmViYXNlIiBmb3Igc2V0dGluZyB0aGlzIG9uIGEKKwlwZXItYnJhbmNoIGJhc2lzLgorKworV2hlbiBwcmVzZXJ2ZSwgYWxzbyBwYXNzIGAtLXByZXNlcnZlLW1lcmdlc2AgYWxvbmcgdG8gJ2dpdCByZWJhc2UnCitzbyB0aGF0IGxvY2FsbHkgY29tbWl0dGVkIG1lcmdlIGNvbW1pdHMgd2lsbCBub3QgYmUgZmxhdHRlbmVkCitieSBydW5uaW5nICdnaXQgcHVsbCcuCisrCisqTk9URSo6IHRoaXMgaXMgYSBwb3NzaWJseSBkYW5nZXJvdXMgb3BlcmF0aW9uOyBkbyAqbm90KiB1c2UKK2l0IHVubGVzcyB5b3UgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIChzZWUgbGlua2dpdDpnaXQtcmViYXNlWzFdCitmb3IgZGV0YWlscykuCisKK3B1bGwub2N0b3B1czo6CisJVGhlIGRlZmF1bHQgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIHdoZW4gcHVsbGluZyBtdWx0aXBsZSBicmFuY2hlcworCWF0IG9uY2UuCisKK3B1bGwudHdvaGVhZDo6CisJVGhlIGRlZmF1bHQgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIHdoZW4gcHVsbGluZyBhIHNpbmdsZSBicmFuY2guCisKK3B1c2guZGVmYXVsdDo6CisJRGVmaW5lcyB0aGUgYWN0aW9uIGBnaXQgcHVzaGAgc2hvdWxkIHRha2UgaWYgbm8gcmVmc3BlYyBpcworCWV4cGxpY2l0bHkgZ2l2ZW4uICBEaWZmZXJlbnQgdmFsdWVzIGFyZSB3ZWxsLXN1aXRlZCBmb3IKKwlzcGVjaWZpYyB3b3JrZmxvd3M7IGZvciBpbnN0YW5jZSwgaW4gYSBwdXJlbHkgY2VudHJhbCB3b3JrZmxvdworCShpLmUuIHRoZSBmZXRjaCBzb3VyY2UgaXMgZXF1YWwgdG8gdGhlIHB1c2ggZGVzdGluYXRpb24pLAorCWB1cHN0cmVhbWAgaXMgcHJvYmFibHkgd2hhdCB5b3Ugd2FudC4gIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisrCistLQorCisqIGBub3RoaW5nYCAtIGRvIG5vdCBwdXNoIGFueXRoaW5nIChlcnJvciBvdXQpIHVubGVzcyBhIHJlZnNwZWMgaXMKKyAgZXhwbGljaXRseSBnaXZlbi4gVGhpcyBpcyBwcmltYXJpbHkgbWVhbnQgZm9yIHBlb3BsZSB3aG8gd2FudCB0bworICBhdm9pZCBtaXN0YWtlcyBieSBhbHdheXMgYmVpbmcgZXhwbGljaXQuCisKKyogYGN1cnJlbnRgIC0gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggdG8gdXBkYXRlIGEgYnJhbmNoIHdpdGggdGhlIHNhbWUKKyAgbmFtZSBvbiB0aGUgcmVjZWl2aW5nIGVuZC4gIFdvcmtzIGluIGJvdGggY2VudHJhbCBhbmQgbm9uLWNlbnRyYWwKKyAgd29ya2Zsb3dzLgorCisqIGB1cHN0cmVhbWAgLSBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBiYWNrIHRvIHRoZSBicmFuY2ggd2hvc2UKKyAgY2hhbmdlcyBhcmUgdXN1YWxseSBpbnRlZ3JhdGVkIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoICh3aGljaCBpcworICBjYWxsZWQgYEB7dXBzdHJlYW19YCkuICBUaGlzIG1vZGUgb25seSBtYWtlcyBzZW5zZSBpZiB5b3UgYXJlCisgIHB1c2hpbmcgdG8gdGhlIHNhbWUgcmVwb3NpdG9yeSB5b3Ugd291bGQgbm9ybWFsbHkgcHVsbCBmcm9tCisgIChpLmUuIGNlbnRyYWwgd29ya2Zsb3cpLgorCisqIGBzaW1wbGVgIC0gaW4gY2VudHJhbGl6ZWQgd29ya2Zsb3csIHdvcmsgbGlrZSBgdXBzdHJlYW1gIHdpdGggYW4KKyAgYWRkZWQgc2FmZXR5IHRvIHJlZnVzZSB0byBwdXNoIGlmIHRoZSB1cHN0cmVhbSBicmFuY2gncyBuYW1lIGlzCisgIGRpZmZlcmVudCBmcm9tIHRoZSBsb2NhbCBvbmUuCisrCitXaGVuIHB1c2hpbmcgdG8gYSByZW1vdGUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcmVtb3RlIHlvdSBub3JtYWxseQorcHVsbCBmcm9tLCB3b3JrIGFzIGBjdXJyZW50YC4gIFRoaXMgaXMgdGhlIHNhZmVzdCBvcHRpb24gYW5kIGlzIHN1aXRlZAorZm9yIGJlZ2lubmVycy4KKysKK1RoaXMgbW9kZSBoYXMgYmVjb21lIHRoZSBkZWZhdWx0IGluIEdpdCAyLjAuCisKKyogYG1hdGNoaW5nYCAtIHB1c2ggYWxsIGJyYW5jaGVzIGhhdmluZyB0aGUgc2FtZSBuYW1lIG9uIGJvdGggZW5kcy4KKyAgVGhpcyBtYWtlcyB0aGUgcmVwb3NpdG9yeSB5b3UgYXJlIHB1c2hpbmcgdG8gcmVtZW1iZXIgdGhlIHNldCBvZgorICBicmFuY2hlcyB0aGF0IHdpbGwgYmUgcHVzaGVkIG91dCAoZS5nLiBpZiB5b3UgYWx3YXlzIHB1c2ggJ21haW50JworICBhbmQgJ21hc3RlcicgdGhlcmUgYW5kIG5vIG90aGVyIGJyYW5jaGVzLCB0aGUgcmVwb3NpdG9yeSB5b3UgcHVzaAorICB0byB3aWxsIGhhdmUgdGhlc2UgdHdvIGJyYW5jaGVzLCBhbmQgeW91ciBsb2NhbCAnbWFpbnQnIGFuZAorICAnbWFzdGVyJyB3aWxsIGJlIHB1c2hlZCB0aGVyZSkuCisrCitUbyB1c2UgdGhpcyBtb2RlIGVmZmVjdGl2ZWx5LCB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgX2FsbF8gdGhlCiticmFuY2hlcyB5b3Ugd291bGQgcHVzaCBvdXQgYXJlIHJlYWR5IHRvIGJlIHB1c2hlZCBvdXQgYmVmb3JlCitydW5uaW5nICdnaXQgcHVzaCcsIGFzIHRoZSB3aG9sZSBwb2ludCBvZiB0aGlzIG1vZGUgaXMgdG8gYWxsb3cgeW91Cit0byBwdXNoIGFsbCBvZiB0aGUgYnJhbmNoZXMgaW4gb25lIGdvLiAgSWYgeW91IHVzdWFsbHkgZmluaXNoIHdvcmsKK29uIG9ubHkgb25lIGJyYW5jaCBhbmQgcHVzaCBvdXQgdGhlIHJlc3VsdCwgd2hpbGUgb3RoZXIgYnJhbmNoZXMgYXJlCit1bmZpbmlzaGVkLCB0aGlzIG1vZGUgaXMgbm90IGZvciB5b3UuICBBbHNvIHRoaXMgbW9kZSBpcyBub3QKK3N1aXRhYmxlIGZvciBwdXNoaW5nIGludG8gYSBzaGFyZWQgY2VudHJhbCByZXBvc2l0b3J5LCBhcyBvdGhlcgorcGVvcGxlIG1heSBhZGQgbmV3IGJyYW5jaGVzIHRoZXJlLCBvciB1cGRhdGUgdGhlIHRpcCBvZiBleGlzdGluZworYnJhbmNoZXMgb3V0c2lkZSB5b3VyIGNvbnRyb2wuCisrCitUaGlzIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQsIGJ1dCBub3Qgc2luY2UgR2l0IDIuMCAoYHNpbXBsZWAgaXMgdGhlCituZXcgZGVmYXVsdCkuCisKKy0tCisKK3B1c2guZm9sbG93VGFnczo6CisJSWYgc2V0IHRvIHRydWUgZW5hYmxlICctLWZvbGxvdy10YWdzJyBvcHRpb24gYnkgZGVmYXVsdC4gIFlvdQorCW1heSBvdmVycmlkZSB0aGlzIGNvbmZpZ3VyYXRpb24gYXQgdGltZSBvZiBwdXNoIGJ5IHNwZWNpZnlpbmcKKwknLS1uby1mb2xsb3ctdGFncycuCisKK3B1c2guZ3BnU2lnbjo6CisJTWF5IGJlIHNldCB0byBhIGJvb2xlYW4gdmFsdWUsIG9yIHRoZSBzdHJpbmcgJ2lmLWFza2VkJy4gQSB0cnVlCisJdmFsdWUgY2F1c2VzIGFsbCBwdXNoZXMgdG8gYmUgR1BHIHNpZ25lZCwgYXMgaWYgJy0tc2lnbmVkJyBpcworCXBhc3NlZCB0byBsaW5rZ2l0OmdpdC1wdXNoWzFdLiBUaGUgc3RyaW5nICdpZi1hc2tlZCcgY2F1c2VzCisJcHVzaGVzIHRvIGJlIHNpZ25lZCBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIGl0LCBhcyBpZgorCSctLXNpZ25lZD1pZi1hc2tlZCcgaXMgcGFzc2VkIHRvICdnaXQgcHVzaCcuIEEgZmFsc2UgdmFsdWUgbWF5CisJb3ZlcnJpZGUgYSB2YWx1ZSBmcm9tIGEgbG93ZXItcHJpb3JpdHkgY29uZmlnIGZpbGUuIEFuIGV4cGxpY2l0CisJY29tbWFuZC1saW5lIGZsYWcgYWx3YXlzIG92ZXJyaWRlcyB0aGlzIGNvbmZpZyBvcHRpb24uCisKK3JlYmFzZS5zdGF0OjoKKwlXaGV0aGVyIHRvIHNob3cgYSBkaWZmc3RhdCBvZiB3aGF0IGNoYW5nZWQgdXBzdHJlYW0gc2luY2UgdGhlIGxhc3QKKwlyZWJhc2UuIEZhbHNlIGJ5IGRlZmF1bHQuCisKK3JlYmFzZS5hdXRvU3F1YXNoOjoKKwlJZiBzZXQgdG8gdHJ1ZSBlbmFibGUgJy0tYXV0b3NxdWFzaCcgb3B0aW9uIGJ5IGRlZmF1bHQuCisKK3JlYmFzZS5hdXRvU3Rhc2g6OgorCVdoZW4gc2V0IHRvIHRydWUsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgdGVtcG9yYXJ5IHN0YXNoCisJYmVmb3JlIHRoZSBvcGVyYXRpb24gYmVnaW5zLCBhbmQgYXBwbHkgaXQgYWZ0ZXIgdGhlIG9wZXJhdGlvbgorCWVuZHMuICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBydW4gcmViYXNlIG9uIGEgZGlydHkgd29ya3RyZWUuCisJSG93ZXZlciwgdXNlIHdpdGggY2FyZTogdGhlIGZpbmFsIHN0YXNoIGFwcGxpY2F0aW9uIGFmdGVyIGEKKwlzdWNjZXNzZnVsIHJlYmFzZSBtaWdodCByZXN1bHQgaW4gbm9uLXRyaXZpYWwgY29uZmxpY3RzLgorCURlZmF1bHRzIHRvIGZhbHNlLgorCityZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjazo6CisJSWYgc2V0IHRvICJ3YXJuIiwgZ2l0IHJlYmFzZSAtaSB3aWxsIHByaW50IGEgd2FybmluZyBpZiBzb21lCisJY29tbWl0cyBhcmUgcmVtb3ZlZCAoZS5nLiBhIGxpbmUgd2FzIGRlbGV0ZWQpLCBob3dldmVyIHRoZQorCXJlYmFzZSB3aWxsIHN0aWxsIHByb2NlZWQuIElmIHNldCB0byAiZXJyb3IiLCBpdCB3aWxsIHByaW50CisJdGhlIHByZXZpb3VzIHdhcm5pbmcgYW5kIHN0b3AgdGhlIHJlYmFzZSwgJ2dpdCByZWJhc2UKKwktLWVkaXQtdG9kbycgY2FuIHRoZW4gYmUgdXNlZCB0byBjb3JyZWN0IHRoZSBlcnJvci4gSWYgc2V0IHRvCisJImlnbm9yZSIsIG5vIGNoZWNraW5nIGlzIGRvbmUuCisJVG8gZHJvcCBhIGNvbW1pdCB3aXRob3V0IHdhcm5pbmcgb3IgZXJyb3IsIHVzZSB0aGUgYGRyb3BgCisJY29tbWFuZCBpbiB0aGUgdG9kby1saXN0LgorCURlZmF1bHRzIHRvICJpZ25vcmUiLgorCityZWJhc2UuaW5zdHJ1Y3Rpb25Gb3JtYXQKKwlBIGZvcm1hdCBzdHJpbmcsIGFzIHNwZWNpZmllZCBpbiBsaW5rZ2l0OmdpdC1sb2dbMV0sIHRvIGJlIHVzZWQgZm9yCisJdGhlIGluc3RydWN0aW9uIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZS4gIFRoZSBmb3JtYXQgd2lsbCBhdXRvbWF0aWNhbGx5CisJaGF2ZSB0aGUgbG9uZyBjb21taXQgaGFzaCBwcmVwZW5kZWQgdG8gdGhlIGZvcm1hdC4KKworcmVjZWl2ZS5hZHZlcnRpc2VBdG9taWM6OgorCUJ5IGRlZmF1bHQsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBhZHZlcnRpc2UgdGhlIGF0b21pYyBwdXNoCisJY2FwYWJpbGl0eSB0byBpdHMgY2xpZW50cy4gSWYgeW91IGRvbid0IHdhbnQgdG8gdGhpcyBjYXBhYmlsaXR5CisJdG8gYmUgYWR2ZXJ0aXNlZCwgc2V0IHRoaXMgdmFyaWFibGUgdG8gZmFsc2UuCisKK3JlY2VpdmUuYXV0b2djOjoKKwlCeSBkZWZhdWx0LCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgcnVuICJnaXQtZ2MgLS1hdXRvIiBhZnRlcgorCXJlY2VpdmluZyBkYXRhIGZyb20gZ2l0LXB1c2ggYW5kIHVwZGF0aW5nIHJlZnMuICBZb3UgY2FuIHN0b3AKKwlpdCBieSBzZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gZmFsc2UuCisKK3JlY2VpdmUuY2VydE5vbmNlU2VlZDo6CisJQnkgc2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGEgc3RyaW5nLCBgZ2l0IHJlY2VpdmUtcGFja2AKKwl3aWxsIGFjY2VwdCBhIGBnaXQgcHVzaCAtLXNpZ25lZGAgYW5kIHZlcmlmaWVzIGl0IGJ5IHVzaW5nCisJYSAibm9uY2UiIHByb3RlY3RlZCBieSBITUFDIHVzaW5nIHRoaXMgc3RyaW5nIGFzIGEgc2VjcmV0CisJa2V5LgorCityZWNlaXZlLmNlcnROb25jZVNsb3A6OgorCVdoZW4gYSBgZ2l0IHB1c2ggLS1zaWduZWRgIHNlbnQgYSBwdXNoIGNlcnRpZmljYXRlIHdpdGggYQorCSJub25jZSIgdGhhdCB3YXMgaXNzdWVkIGJ5IGEgcmVjZWl2ZS1wYWNrIHNlcnZpbmcgdGhlIHNhbWUKKwlyZXBvc2l0b3J5IHdpdGhpbiB0aGlzIG1hbnkgc2Vjb25kcywgZXhwb3J0IHRoZSAibm9uY2UiCisJZm91bmQgaW4gdGhlIGNlcnRpZmljYXRlIHRvIGBHSVRfUFVTSF9DRVJUX05PTkNFYCB0byB0aGUKKwlob29rcyAoaW5zdGVhZCBvZiB3aGF0IHRoZSByZWNlaXZlLXBhY2sgYXNrZWQgdGhlIHNlbmRpbmcKKwlzaWRlIHRvIGluY2x1ZGUpLiAgVGhpcyBtYXkgYWxsb3cgd3JpdGluZyBjaGVja3MgaW4KKwlgcHJlLXJlY2VpdmVgIGFuZCBgcG9zdC1yZWNlaXZlYCBhIGJpdCBlYXNpZXIuICBJbnN0ZWFkIG9mCisJY2hlY2tpbmcgYEdJVF9QVVNIX0NFUlRfTk9OQ0VfU0xPUGAgZW52aXJvbm1lbnQgdmFyaWFibGUKKwl0aGF0IHJlY29yZHMgYnkgaG93IG1hbnkgc2Vjb25kcyB0aGUgbm9uY2UgaXMgc3RhbGUgdG8KKwlkZWNpZGUgaWYgdGhleSB3YW50IHRvIGFjY2VwdCB0aGUgY2VydGlmaWNhdGUsIHRoZXkgb25seQorCWNhbiBjaGVjayBgR0lUX1BVU0hfQ0VSVF9OT05DRV9TVEFUVVNgIGlzIGBPS2AuCisKK3JlY2VpdmUuZnNja09iamVjdHM6OgorCUlmIGl0IGlzIHNldCB0byB0cnVlLCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgY2hlY2sgYWxsIHJlY2VpdmVkCisJb2JqZWN0cy4gSXQgd2lsbCBhYm9ydCBpbiB0aGUgY2FzZSBvZiBhIG1hbGZvcm1lZCBvYmplY3Qgb3IgYQorCWJyb2tlbiBsaW5rLiBUaGUgcmVzdWx0IG9mIGFuIGFib3J0IGFyZSBvbmx5IGRhbmdsaW5nIG9iamVjdHMuCisJRGVmYXVsdHMgdG8gZmFsc2UuIElmIG5vdCBzZXQsIHRoZSB2YWx1ZSBvZiBgdHJhbnNmZXIuZnNja09iamVjdHNgCisJaXMgdXNlZCBpbnN0ZWFkLgorCityZWNlaXZlLmZzY2suPG1zZy1pZD46OgorCVdoZW4gYHJlY2VpdmUuZnNja09iamVjdHNgIGlzIHNldCB0byB0cnVlLCBlcnJvcnMgY2FuIGJlIHN3aXRjaGVkCisJdG8gd2FybmluZ3MgYW5kIHZpY2UgdmVyc2EgYnkgY29uZmlndXJpbmcgdGhlIGByZWNlaXZlLmZzY2suPG1zZy1pZD5gCisJc2V0dGluZyB3aGVyZSB0aGUgYDxtc2ctaWQ+YCBpcyB0aGUgZnNjayBtZXNzYWdlIElEIGFuZCB0aGUgdmFsdWUKKwlpcyBvbmUgb2YgYGVycm9yYCwgYHdhcm5gIG9yIGBpZ25vcmVgLiBGb3IgY29udmVuaWVuY2UsIGZzY2sgcHJlZml4ZXMKKwl0aGUgZXJyb3Ivd2FybmluZyB3aXRoIHRoZSBtZXNzYWdlIElELCBlLmcuICJtaXNzaW5nRW1haWw6IGludmFsaWQKKwlhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIGVtYWlsIiBtZWFucyB0aGF0IHNldHRpbmcKKwlgcmVjZWl2ZS5mc2NrLm1pc3NpbmdFbWFpbCA9IGlnbm9yZWAgd2lsbCBoaWRlIHRoYXQgaXNzdWUuCisrCitUaGlzIGZlYXR1cmUgaXMgaW50ZW5kZWQgdG8gc3VwcG9ydCB3b3JraW5nIHdpdGggbGVnYWN5IHJlcG9zaXRvcmllcword2hpY2ggd291bGQgbm90IHBhc3MgcHVzaGluZyB3aGVuIGByZWNlaXZlLmZzY2tPYmplY3RzID0gdHJ1ZWAsIGFsbG93aW5nCit0aGUgaG9zdCB0byBhY2NlcHQgcmVwb3NpdG9yaWVzIHdpdGggY2VydGFpbiBrbm93biBpc3N1ZXMgYnV0IHN0aWxsIGNhdGNoCitvdGhlciBpc3N1ZXMuCisKK3JlY2VpdmUuZnNjay5za2lwTGlzdDo6CisJVGhlIHBhdGggdG8gYSBzb3J0ZWQgbGlzdCBvZiBvYmplY3QgbmFtZXMgKGkuZS4gb25lIFNIQS0xIHBlcgorCWxpbmUpIHRoYXQgYXJlIGtub3duIHRvIGJlIGJyb2tlbiBpbiBhIG5vbi1mYXRhbCB3YXkgYW5kIHNob3VsZAorCWJlIGlnbm9yZWQuIFRoaXMgZmVhdHVyZSBpcyB1c2VmdWwgd2hlbiBhbiBlc3RhYmxpc2hlZCBwcm9qZWN0CisJc2hvdWxkIGJlIGFjY2VwdGVkIGRlc3BpdGUgZWFybHkgY29tbWl0cyBjb250YWluaW5nIGVycm9ycyB0aGF0CisJY2FuIGJlIHNhZmVseSBpZ25vcmVkIHN1Y2ggYXMgaW52YWxpZCBjb21taXR0ZXIgZW1haWwgYWRkcmVzc2VzLgorCU5vdGU6IGNvcnJ1cHQgb2JqZWN0cyBjYW5ub3QgYmUgc2tpcHBlZCB3aXRoIHRoaXMgc2V0dGluZy4KKworcmVjZWl2ZS51bnBhY2tMaW1pdDo6CisJSWYgdGhlIG51bWJlciBvZiBvYmplY3RzIHJlY2VpdmVkIGluIGEgcHVzaCBpcyBiZWxvdyB0aGlzCisJbGltaXQgdGhlbiB0aGUgb2JqZWN0cyB3aWxsIGJlIHVucGFja2VkIGludG8gbG9vc2Ugb2JqZWN0CisJZmlsZXMuIEhvd2V2ZXIgaWYgdGhlIG51bWJlciBvZiByZWNlaXZlZCBvYmplY3RzIGVxdWFscyBvcgorCWV4Y2VlZHMgdGhpcyBsaW1pdCB0aGVuIHRoZSByZWNlaXZlZCBwYWNrIHdpbGwgYmUgc3RvcmVkIGFzCisJYSBwYWNrLCBhZnRlciBhZGRpbmcgYW55IG1pc3NpbmcgZGVsdGEgYmFzZXMuICBTdG9yaW5nIHRoZQorCXBhY2sgZnJvbSBhIHB1c2ggY2FuIG1ha2UgdGhlIHB1c2ggb3BlcmF0aW9uIGNvbXBsZXRlIGZhc3RlciwKKwllc3BlY2lhbGx5IG9uIHNsb3cgZmlsZXN5c3RlbXMuICBJZiBub3Qgc2V0LCB0aGUgdmFsdWUgb2YKKwlgdHJhbnNmZXIudW5wYWNrTGltaXRgIGlzIHVzZWQgaW5zdGVhZC4KKworcmVjZWl2ZS5kZW55RGVsZXRlczo6CisJSWYgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBkZW55IGEgcmVmIHVwZGF0ZSB0aGF0IGRlbGV0ZXMKKwl0aGUgcmVmLiBVc2UgdGhpcyB0byBwcmV2ZW50IHN1Y2ggYSByZWYgZGVsZXRpb24gdmlhIGEgcHVzaC4KKworcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudDo6CisJSWYgc2V0IHRvIHRydWUsIGdpdC1yZWNlaXZlLXBhY2sgd2lsbCBkZW55IGEgcmVmIHVwZGF0ZSB0aGF0CisJZGVsZXRlcyB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaCBvZiBhIG5vbi1iYXJlIHJlcG9zaXRvcnkuCisKK3JlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2g6OgorCUlmIHNldCB0byB0cnVlIG9yICJyZWZ1c2UiLCBnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgZGVueSBhIHJlZiB1cGRhdGUKKwl0byB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0IGJyYW5jaCBvZiBhIG5vbi1iYXJlIHJlcG9zaXRvcnkuCisJU3VjaCBhIHB1c2ggaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGJlY2F1c2UgaXQgYnJpbmdzIHRoZSBIRUFECisJb3V0IG9mIHN5bmMgd2l0aCB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZS4gSWYgc2V0IHRvICJ3YXJuIiwKKwlwcmludCBhIHdhcm5pbmcgb2Ygc3VjaCBhIHB1c2ggdG8gc3RkZXJyLCBidXQgYWxsb3cgdGhlIHB1c2ggdG8KKwlwcm9jZWVkLiBJZiBzZXQgdG8gZmFsc2Ugb3IgImlnbm9yZSIsIGFsbG93IHN1Y2ggcHVzaGVzIHdpdGggbm8KKwltZXNzYWdlLiBEZWZhdWx0cyB0byAicmVmdXNlIi4KKysKK0Fub3RoZXIgb3B0aW9uIGlzICJ1cGRhdGVJbnN0ZWFkIiB3aGljaCB3aWxsIHVwZGF0ZSB0aGUgd29ya2luZwordHJlZSBpZiBwdXNoaW5nIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBvcHRpb24gaXMKK2ludGVuZGVkIGZvciBzeW5jaHJvbml6aW5nIHdvcmtpbmcgZGlyZWN0b3JpZXMgd2hlbiBvbmUgc2lkZSBpcyBub3QgZWFzaWx5CithY2Nlc3NpYmxlIHZpYSBpbnRlcmFjdGl2ZSBzc2ggKGUuZy4gYSBsaXZlIHdlYiBzaXRlLCBoZW5jZSB0aGUgcmVxdWlyZW1lbnQKK3RoYXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGJlIGNsZWFuKS4gVGhpcyBtb2RlIGFsc28gY29tZXMgaW4gaGFuZHkgd2hlbgorZGV2ZWxvcGluZyBpbnNpZGUgYSBWTSB0byB0ZXN0IGFuZCBmaXggY29kZSBvbiBkaWZmZXJlbnQgT3BlcmF0aW5nIFN5c3RlbXMuCisrCitCeSBkZWZhdWx0LCAidXBkYXRlSW5zdGVhZCIgd2lsbCByZWZ1c2UgdGhlIHB1c2ggaWYgdGhlIHdvcmtpbmcgdHJlZSBvcgordGhlIGluZGV4IGhhdmUgYW55IGRpZmZlcmVuY2UgZnJvbSB0aGUgSEVBRCwgYnV0IHRoZSBgcHVzaC10by1jaGVja291dGAKK2hvb2sgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoaXMuICBTZWUgbGlua2dpdDpnaXRob29rc1s1XS4KKworcmVjZWl2ZS5kZW55Tm9uRmFzdEZvcndhcmRzOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZ2l0LXJlY2VpdmUtcGFjayB3aWxsIGRlbnkgYSByZWYgdXBkYXRlIHdoaWNoIGlzCisJbm90IGEgZmFzdC1mb3J3YXJkLiBVc2UgdGhpcyB0byBwcmV2ZW50IHN1Y2ggYW4gdXBkYXRlIHZpYSBhIHB1c2gsCisJZXZlbiBpZiB0aGF0IHB1c2ggaXMgZm9yY2VkLiBUaGlzIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMKKwlzZXQgd2hlbiBpbml0aWFsaXppbmcgYSBzaGFyZWQgcmVwb3NpdG9yeS4KKworcmVjZWl2ZS5oaWRlUmVmczo6CisJVGhpcyB2YXJpYWJsZSBpcyB0aGUgc2FtZSBhcyBgdHJhbnNmZXIuaGlkZVJlZnNgLCBidXQgYXBwbGllcworCW9ubHkgdG8gYHJlY2VpdmUtcGFja2AgKGFuZCBzbyBhZmZlY3RzIHB1c2hlcywgYnV0IG5vdCBmZXRjaGVzKS4KKwlBbiBhdHRlbXB0IHRvIHVwZGF0ZSBvciBkZWxldGUgYSBoaWRkZW4gcmVmIGJ5IGBnaXQgcHVzaGAgaXMKKwlyZWplY3RlZC4KKworcmVjZWl2ZS51cGRhdGVTZXJ2ZXJJbmZvOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZ2l0LXJlY2VpdmUtcGFjayB3aWxsIHJ1biBnaXQtdXBkYXRlLXNlcnZlci1pbmZvCisJYWZ0ZXIgcmVjZWl2aW5nIGRhdGEgZnJvbSBnaXQtcHVzaCBhbmQgdXBkYXRpbmcgcmVmcy4KKworcmVjZWl2ZS5zaGFsbG93VXBkYXRlOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgLmdpdC9zaGFsbG93IGNhbiBiZSB1cGRhdGVkIHdoZW4gbmV3IHJlZnMKKwlyZXF1aXJlIG5ldyBzaGFsbG93IHJvb3RzLiBPdGhlcndpc2UgdGhvc2UgcmVmcyBhcmUgcmVqZWN0ZWQuCisKK3JlbW90ZS5wdXNoRGVmYXVsdDo6CisJVGhlIHJlbW90ZSB0byBwdXNoIHRvIGJ5IGRlZmF1bHQuICBPdmVycmlkZXMKKwlgYnJhbmNoLjxuYW1lPi5yZW1vdGVgIGZvciBhbGwgYnJhbmNoZXMsIGFuZCBpcyBvdmVycmlkZGVuIGJ5CisJYGJyYW5jaC48bmFtZT4ucHVzaFJlbW90ZWAgZm9yIHNwZWNpZmljIGJyYW5jaGVzLgorCityZW1vdGUuPG5hbWU+LnVybDo6CisJVGhlIFVSTCBvZiBhIHJlbW90ZSByZXBvc2l0b3J5LiAgU2VlIGxpbmtnaXQ6Z2l0LWZldGNoWzFdIG9yCisJbGlua2dpdDpnaXQtcHVzaFsxXS4KKworcmVtb3RlLjxuYW1lPi5wdXNodXJsOjoKKwlUaGUgcHVzaCBVUkwgb2YgYSByZW1vdGUgcmVwb3NpdG9yeS4gIFNlZSBsaW5rZ2l0OmdpdC1wdXNoWzFdLgorCityZW1vdGUuPG5hbWU+LnByb3h5OjoKKwlGb3IgcmVtb3RlcyB0aGF0IHJlcXVpcmUgY3VybCAoaHR0cCwgaHR0cHMgYW5kIGZ0cCksIHRoZSBVUkwgdG8KKwl0aGUgcHJveHkgdG8gdXNlIGZvciB0aGF0IHJlbW90ZS4gIFNldCB0byB0aGUgZW1wdHkgc3RyaW5nIHRvCisJZGlzYWJsZSBwcm94eWluZyBmb3IgdGhhdCByZW1vdGUuCisKK3JlbW90ZS48bmFtZT4uZmV0Y2g6OgorCVRoZSBkZWZhdWx0IHNldCBvZiAicmVmc3BlYyIgZm9yIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLiBTZWUKKwlsaW5rZ2l0OmdpdC1mZXRjaFsxXS4KKworcmVtb3RlLjxuYW1lPi5wdXNoOjoKKwlUaGUgZGVmYXVsdCBzZXQgb2YgInJlZnNwZWMiIGZvciBsaW5rZ2l0OmdpdC1wdXNoWzFdLiBTZWUKKwlsaW5rZ2l0OmdpdC1wdXNoWzFdLgorCityZW1vdGUuPG5hbWU+Lm1pcnJvcjo6CisJSWYgdHJ1ZSwgcHVzaGluZyB0byB0aGlzIHJlbW90ZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmVoYXZlCisJYXMgaWYgdGhlIGAtLW1pcnJvcmAgb3B0aW9uIHdhcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLgorCityZW1vdGUuPG5hbWU+LnNraXBEZWZhdWx0VXBkYXRlOjoKKwlJZiB0cnVlLCB0aGlzIHJlbW90ZSB3aWxsIGJlIHNraXBwZWQgYnkgZGVmYXVsdCB3aGVuIHVwZGF0aW5nCisJdXNpbmcgbGlua2dpdDpnaXQtZmV0Y2hbMV0gb3IgdGhlIGB1cGRhdGVgIHN1YmNvbW1hbmQgb2YKKwlsaW5rZ2l0OmdpdC1yZW1vdGVbMV0uCisKK3JlbW90ZS48bmFtZT4uc2tpcEZldGNoQWxsOjoKKwlJZiB0cnVlLCB0aGlzIHJlbW90ZSB3aWxsIGJlIHNraXBwZWQgYnkgZGVmYXVsdCB3aGVuIHVwZGF0aW5nCisJdXNpbmcgbGlua2dpdDpnaXQtZmV0Y2hbMV0gb3IgdGhlIGB1cGRhdGVgIHN1YmNvbW1hbmQgb2YKKwlsaW5rZ2l0OmdpdC1yZW1vdGVbMV0uCisKK3JlbW90ZS48bmFtZT4ucmVjZWl2ZXBhY2s6OgorCVRoZSBkZWZhdWx0IHByb2dyYW0gdG8gZXhlY3V0ZSBvbiB0aGUgcmVtb3RlIHNpZGUgd2hlbiBwdXNoaW5nLiAgU2VlCisJb3B0aW9uIC0tcmVjZWl2ZS1wYWNrIG9mIGxpbmtnaXQ6Z2l0LXB1c2hbMV0uCisKK3JlbW90ZS48bmFtZT4udXBsb2FkcGFjazo6CisJVGhlIGRlZmF1bHQgcHJvZ3JhbSB0byBleGVjdXRlIG9uIHRoZSByZW1vdGUgc2lkZSB3aGVuIGZldGNoaW5nLiAgU2VlCisJb3B0aW9uIC0tdXBsb2FkLXBhY2sgb2YgbGlua2dpdDpnaXQtZmV0Y2gtcGFja1sxXS4KKworcmVtb3RlLjxuYW1lPi50YWdPcHQ6OgorCVNldHRpbmcgdGhpcyB2YWx1ZSB0byAtLW5vLXRhZ3MgZGlzYWJsZXMgYXV0b21hdGljIHRhZyBmb2xsb3dpbmcgd2hlbgorCWZldGNoaW5nIGZyb20gcmVtb3RlIDxuYW1lPi4gU2V0dGluZyBpdCB0byAtLXRhZ3Mgd2lsbCBmZXRjaCBldmVyeQorCXRhZyBmcm9tIHJlbW90ZSA8bmFtZT4sIGV2ZW4gaWYgdGhleSBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIHJlbW90ZQorCWJyYW5jaCBoZWFkcy4gUGFzc2luZyB0aGVzZSBmbGFncyBkaXJlY3RseSB0byBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBjYW4KKwlvdmVycmlkZSB0aGlzIHNldHRpbmcuIFNlZSBvcHRpb25zIC0tdGFncyBhbmQgLS1uby10YWdzIG9mCisJbGlua2dpdDpnaXQtZmV0Y2hbMV0uCisKK3JlbW90ZS48bmFtZT4udmNzOjoKKwlTZXR0aW5nIHRoaXMgdG8gYSB2YWx1ZSA8dmNzPiB3aWxsIGNhdXNlIEdpdCB0byBpbnRlcmFjdCB3aXRoCisJdGhlIHJlbW90ZSB3aXRoIHRoZSBnaXQtcmVtb3RlLTx2Y3M+IGhlbHBlci4KKworcmVtb3RlLjxuYW1lPi5wcnVuZTo6CisJV2hlbiBzZXQgdG8gdHJ1ZSwgZmV0Y2hpbmcgZnJvbSB0aGlzIHJlbW90ZSBieSBkZWZhdWx0IHdpbGwgYWxzbworCXJlbW92ZSBhbnkgcmVtb3RlLXRyYWNraW5nIHJlZmVyZW5jZXMgdGhhdCBubyBsb25nZXIgZXhpc3Qgb24gdGhlCisJcmVtb3RlIChhcyBpZiB0aGUgYC0tcHJ1bmVgIG9wdGlvbiB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSkuCisJT3ZlcnJpZGVzIGBmZXRjaC5wcnVuZWAgc2V0dGluZ3MsIGlmIGFueS4KKworcmVtb3Rlcy48Z3JvdXA+OjoKKwlUaGUgbGlzdCBvZiByZW1vdGVzIHdoaWNoIGFyZSBmZXRjaGVkIGJ5ICJnaXQgcmVtb3RlIHVwZGF0ZQorCTxncm91cD4iLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXS4KKworcmVwYWNrLnVzZURlbHRhQmFzZU9mZnNldDo6CisJQnkgZGVmYXVsdCwgbGlua2dpdDpnaXQtcmVwYWNrWzFdIGNyZWF0ZXMgcGFja3MgdGhhdCB1c2UKKwlkZWx0YS1iYXNlIG9mZnNldC4gSWYgeW91IG5lZWQgdG8gc2hhcmUgeW91ciByZXBvc2l0b3J5IHdpdGgKKwlHaXQgb2xkZXIgdGhhbiB2ZXJzaW9uIDEuNC40LCBlaXRoZXIgZGlyZWN0bHkgb3IgdmlhIGEgZHVtYgorCXByb3RvY29sIHN1Y2ggYXMgaHR0cCwgdGhlbiB5b3UgbmVlZCB0byBzZXQgdGhpcyBvcHRpb24gdG8KKwkiZmFsc2UiIGFuZCByZXBhY2suIEFjY2VzcyBmcm9tIG9sZCBHaXQgdmVyc2lvbnMgb3ZlciB0aGUKKwluYXRpdmUgcHJvdG9jb2wgYXJlIHVuYWZmZWN0ZWQgYnkgdGhpcyBvcHRpb24uCisKK3JlcGFjay5wYWNrS2VwdE9iamVjdHM6OgorCUlmIHNldCB0byB0cnVlLCBtYWtlcyBgZ2l0IHJlcGFja2AgYWN0IGFzIGlmCisJYC0tcGFjay1rZXB0LW9iamVjdHNgIHdhcyBwYXNzZWQuIFNlZSBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0gZm9yCisJZGV0YWlscy4gRGVmYXVsdHMgdG8gYGZhbHNlYCBub3JtYWxseSwgYnV0IGB0cnVlYCBpZiBhIGJpdG1hcAorCWluZGV4IGlzIGJlaW5nIHdyaXR0ZW4gKGVpdGhlciB2aWEgYC0td3JpdGUtYml0bWFwLWluZGV4YCBvcgorCWByZXBhY2sud3JpdGVCaXRtYXBzYCkuCisKK3JlcGFjay53cml0ZUJpdG1hcHM6OgorCVdoZW4gdHJ1ZSwgZ2l0IHdpbGwgd3JpdGUgYSBiaXRtYXAgaW5kZXggd2hlbiBwYWNraW5nIGFsbAorCW9iamVjdHMgdG8gZGlzayAoZS5nLiwgd2hlbiBgZ2l0IHJlcGFjayAtYWAgaXMgcnVuKS4gIFRoaXMKKwlpbmRleCBjYW4gc3BlZWQgdXAgdGhlICJjb3VudGluZyBvYmplY3RzIiBwaGFzZSBvZiBzdWJzZXF1ZW50CisJcGFja3MgY3JlYXRlZCBmb3IgY2xvbmVzIGFuZCBmZXRjaGVzLCBhdCB0aGUgY29zdCBvZiBzb21lIGRpc2sKKwlzcGFjZSBhbmQgZXh0cmEgdGltZSBzcGVudCBvbiB0aGUgaW5pdGlhbCByZXBhY2suICBEZWZhdWx0cyB0bworCWZhbHNlLgorCityZXJlcmUuYXV0b1VwZGF0ZTo6CisJV2hlbiBzZXQgdG8gdHJ1ZSwgYGdpdC1yZXJlcmVgIHVwZGF0ZXMgdGhlIGluZGV4IHdpdGggdGhlCisJcmVzdWx0aW5nIGNvbnRlbnRzIGFmdGVyIGl0IGNsZWFubHkgcmVzb2x2ZXMgY29uZmxpY3RzIHVzaW5nCisJcHJldmlvdXNseSByZWNvcmRlZCByZXNvbHV0aW9uLiAgRGVmYXVsdHMgdG8gZmFsc2UuCisKK3JlcmVyZS5lbmFibGVkOjoKKwlBY3RpdmF0ZSByZWNvcmRpbmcgb2YgcmVzb2x2ZWQgY29uZmxpY3RzLCBzbyB0aGF0IGlkZW50aWNhbAorCWNvbmZsaWN0IGh1bmtzIGNhbiBiZSByZXNvbHZlZCBhdXRvbWF0aWNhbGx5LCBzaG91bGQgdGhleSBiZQorCWVuY291bnRlcmVkIGFnYWluLiAgQnkgZGVmYXVsdCwgbGlua2dpdDpnaXQtcmVyZXJlWzFdIGlzCisJZW5hYmxlZCBpZiB0aGVyZSBpcyBhbiBgcnItY2FjaGVgIGRpcmVjdG9yeSB1bmRlciB0aGUKKwlgJEdJVF9ESVJgLCBlLmcuIGlmICJyZXJlcmUiIHdhcyBwcmV2aW91c2x5IHVzZWQgaW4gdGhlCisJcmVwb3NpdG9yeS4KKworc2VuZGVtYWlsLmlkZW50aXR5OjoKKwlBIGNvbmZpZ3VyYXRpb24gaWRlbnRpdHkuIFdoZW4gZ2l2ZW4sIGNhdXNlcyB2YWx1ZXMgaW4gdGhlCisJJ3NlbmRlbWFpbC48aWRlbnRpdHk+JyBzdWJzZWN0aW9uIHRvIHRha2UgcHJlY2VkZW5jZSBvdmVyCisJdmFsdWVzIGluIHRoZSAnc2VuZGVtYWlsJyBzZWN0aW9uLiBUaGUgZGVmYXVsdCBpZGVudGl0eSBpcworCXRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLmlkZW50aXR5Jy4KKworc2VuZGVtYWlsLnNtdHBFbmNyeXB0aW9uOjoKKwlTZWUgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXSBmb3IgZGVzY3JpcHRpb24uICBOb3RlIHRoYXQgdGhpcworCXNldHRpbmcgaXMgbm90IHN1YmplY3QgdG8gdGhlICdpZGVudGl0eScgbWVjaGFuaXNtLgorCitzZW5kZW1haWwuc210cHNzbCAoZGVwcmVjYXRlZCk6OgorCURlcHJlY2F0ZWQgYWxpYXMgZm9yICdzZW5kZW1haWwuc210cEVuY3J5cHRpb24gPSBzc2wnLgorCitzZW5kZW1haWwuc210cHNzbGNlcnRwYXRoOjoKKwlQYXRoIHRvIGNhLWNlcnRpZmljYXRlcyAoZWl0aGVyIGEgZGlyZWN0b3J5IG9yIGEgc2luZ2xlIGZpbGUpLgorCVNldCBpdCB0byBhbiBlbXB0eSBzdHJpbmcgdG8gZGlzYWJsZSBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24uCisKK3NlbmRlbWFpbC48aWRlbnRpdHk+Lio6OgorCUlkZW50aXR5LXNwZWNpZmljIHZlcnNpb25zIG9mIHRoZSAnc2VuZGVtYWlsLionIHBhcmFtZXRlcnMKKwlmb3VuZCBiZWxvdywgdGFraW5nIHByZWNlZGVuY2Ugb3ZlciB0aG9zZSB3aGVuIHRoZSB0aGlzCisJaWRlbnRpdHkgaXMgc2VsZWN0ZWQsIHRocm91Z2ggY29tbWFuZC1saW5lIG9yCisJJ3NlbmRlbWFpbC5pZGVudGl0eScuCisKK3NlbmRlbWFpbC5hbGlhc2VzRmlsZTo6CitzZW5kZW1haWwuYWxpYXNGaWxlVHlwZTo6CitzZW5kZW1haWwuYW5ub3RhdGU6Ogorc2VuZGVtYWlsLmJjYzo6CitzZW5kZW1haWwuY2M6Ogorc2VuZGVtYWlsLmNjQ21kOjoKK3NlbmRlbWFpbC5jaGFpblJlcGx5VG86Ogorc2VuZGVtYWlsLmNvbmZpcm06Ogorc2VuZGVtYWlsLmVudmVsb3BlU2VuZGVyOjoKK3NlbmRlbWFpbC5mcm9tOjoKK3NlbmRlbWFpbC5tdWx0aUVkaXQ6Ogorc2VuZGVtYWlsLnNpZ25lZG9mZmJ5Y2M6Ogorc2VuZGVtYWlsLnNtdHBQYXNzOjoKK3NlbmRlbWFpbC5zdXBwcmVzc2NjOjoKK3NlbmRlbWFpbC5zdXBwcmVzc0Zyb206Ogorc2VuZGVtYWlsLnRvOjoKK3NlbmRlbWFpbC5zbXRwRG9tYWluOjoKK3NlbmRlbWFpbC5zbXRwU2VydmVyOjoKK3NlbmRlbWFpbC5zbXRwU2VydmVyUG9ydDo6CitzZW5kZW1haWwuc210cFNlcnZlck9wdGlvbjo6CitzZW5kZW1haWwuc210cFVzZXI6Ogorc2VuZGVtYWlsLnRocmVhZDo6CitzZW5kZW1haWwudHJhbnNmZXJFbmNvZGluZzo6CitzZW5kZW1haWwudmFsaWRhdGU6Ogorc2VuZGVtYWlsLnhtYWlsZXI6OgorCVNlZSBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdIGZvciBkZXNjcmlwdGlvbi4KKworc2VuZGVtYWlsLnNpZ25lZG9mZmNjIChkZXByZWNhdGVkKTo6CisJRGVwcmVjYXRlZCBhbGlhcyBmb3IgJ3NlbmRlbWFpbC5zaWduZWRvZmZieWNjJy4KKworc2hvd2JyYW5jaC5kZWZhdWx0OjoKKwlUaGUgZGVmYXVsdCBzZXQgb2YgYnJhbmNoZXMgZm9yIGxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdLgorCVNlZSBsaW5rZ2l0OmdpdC1zaG93LWJyYW5jaFsxXS4KKworc3RhdHVzLnJlbGF0aXZlUGF0aHM6OgorCUJ5IGRlZmF1bHQsIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBzaG93cyBwYXRocyByZWxhdGl2ZSB0byB0aGUKKwljdXJyZW50IGRpcmVjdG9yeS4gU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGBmYWxzZWAgc2hvd3MgcGF0aHMKKwlyZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290ICh0aGlzIHdhcyB0aGUgZGVmYXVsdCBmb3IgR2l0CisJcHJpb3IgdG8gdjEuNS40KS4KKworc3RhdHVzLnNob3J0OjoKKwlTZXQgdG8gdHJ1ZSB0byBlbmFibGUgLS1zaG9ydCBieSBkZWZhdWx0IGluIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXS4KKwlUaGUgb3B0aW9uIC0tbm8tc2hvcnQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFyaWFibGUuCisKK3N0YXR1cy5icmFuY2g6OgorCVNldCB0byB0cnVlIHRvIGVuYWJsZSAtLWJyYW5jaCBieSBkZWZhdWx0IGluIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXS4KKwlUaGUgb3B0aW9uIC0tbm8tYnJhbmNoIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGlzIHZhcmlhYmxlLgorCitzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg6OgorCUlmIHNldCB0byB0cnVlLCBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gd2lsbCBpbnNlcnQgYSBjb21tZW50CisJcHJlZml4IGJlZm9yZSBlYWNoIG91dHB1dCBsaW5lIChzdGFydGluZyB3aXRoCisJYGNvcmUuY29tbWVudENoYXJgLCBpLmUuIGAjYCBieSBkZWZhdWx0KS4gVGhpcyB3YXMgdGhlCisJYmVoYXZpb3Igb2YgbGlua2dpdDpnaXQtc3RhdHVzWzFdIGluIEdpdCAxLjguNCBhbmQgcHJldmlvdXMuCisJRGVmYXVsdHMgdG8gZmFsc2UuCisKK3N0YXR1cy5zaG93VW50cmFja2VkRmlsZXM6OgorCUJ5IGRlZmF1bHQsIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBhbmQgbGlua2dpdDpnaXQtY29tbWl0WzFdIHNob3cKKwlmaWxlcyB3aGljaCBhcmUgbm90IGN1cnJlbnRseSB0cmFja2VkIGJ5IEdpdC4gRGlyZWN0b3JpZXMgd2hpY2gKKwljb250YWluIG9ubHkgdW50cmFja2VkIGZpbGVzLCBhcmUgc2hvd24gd2l0aCB0aGUgZGlyZWN0b3J5IG5hbWUKKwlvbmx5LiBTaG93aW5nIHVudHJhY2tlZCBmaWxlcyBtZWFucyB0aGF0IEdpdCBuZWVkcyB0byBsc3RhdCgpIGFsbAorCXRoZSBmaWxlcyBpbiB0aGUgd2hvbGUgcmVwb3NpdG9yeSwgd2hpY2ggbWlnaHQgYmUgc2xvdyBvbiBzb21lCisJc3lzdGVtcy4gU28sIHRoaXMgdmFyaWFibGUgY29udHJvbHMgaG93IHRoZSBjb21tYW5kcyBkaXNwbGF5cworCXRoZSB1bnRyYWNrZWQgZmlsZXMuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CisrCistLQorKiBgbm9gIC0gU2hvdyBubyB1bnRyYWNrZWQgZmlsZXMuCisqIGBub3JtYWxgIC0gU2hvdyB1bnRyYWNrZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorKiBgYWxsYCAtIFNob3cgYWxzbyBpbmRpdmlkdWFsIGZpbGVzIGluIHVudHJhY2tlZCBkaXJlY3Rvcmllcy4KKy0tCisrCitJZiB0aGlzIHZhcmlhYmxlIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvICdub3JtYWwnLgorVGhpcyB2YXJpYWJsZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtdXwtLXVudHJhY2tlZC1maWxlcyBvcHRpb24KK29mIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBhbmQgbGlua2dpdDpnaXQtY29tbWl0WzFdLgorCitzdGF0dXMuc3VibW9kdWxlU3VtbWFyeTo6CisJRGVmYXVsdHMgdG8gZmFsc2UuCisJSWYgdGhpcyBpcyBzZXQgdG8gYSBub24gemVybyBudW1iZXIgb3IgdHJ1ZSAoaWRlbnRpY2FsIHRvIC0xIG9yIGFuCisJdW5saW1pdGVkIG51bWJlciksIHRoZSBzdWJtb2R1bGUgc3VtbWFyeSB3aWxsIGJlIGVuYWJsZWQgYW5kIGEKKwlzdW1tYXJ5IG9mIGNvbW1pdHMgZm9yIG1vZGlmaWVkIHN1Ym1vZHVsZXMgd2lsbCBiZSBzaG93biAoc2VlCisJLS1zdW1tYXJ5LWxpbWl0IG9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0pLiBQbGVhc2Ugbm90ZQorCXRoYXQgdGhlIHN1bW1hcnkgb3V0cHV0IGNvbW1hbmQgd2lsbCBiZSBzdXBwcmVzc2VkIGZvciBhbGwKKwlzdWJtb2R1bGVzIHdoZW4gYGRpZmYuaWdub3JlU3VibW9kdWxlc2AgaXMgc2V0IHRvICdhbGwnIG9yIG9ubHkKKwlmb3IgdGhvc2Ugc3VibW9kdWxlcyB3aGVyZSBgc3VibW9kdWxlLjxuYW1lPi5pZ25vcmU9YWxsYC4gVGhlIG9ubHkKKwlleGNlcHRpb24gdG8gdGhhdCBydWxlIGlzIHRoYXQgc3RhdHVzIGFuZCBjb21taXQgd2lsbCBzaG93IHN0YWdlZAorCXN1Ym1vZHVsZSBjaGFuZ2VzLiBUbworCWFsc28gdmlldyB0aGUgc3VtbWFyeSBmb3IgaWdub3JlZCBzdWJtb2R1bGVzIHlvdSBjYW4gZWl0aGVyIHVzZQorCXRoZSAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IGNvbW1hbmQtbGluZSBvcHRpb24gb3IgdGhlICdnaXQKKwlzdWJtb2R1bGUgc3VtbWFyeScgY29tbWFuZCwgd2hpY2ggc2hvd3MgYSBzaW1pbGFyIG91dHB1dCBidXQgZG9lcworCW5vdCBob25vciB0aGVzZSBzZXR0aW5ncy4KKworc3Rhc2guc2hvd1BhdGNoOjoKKwlJZiB0aGlzIGlzIHNldCB0byB0cnVlLCB0aGUgYGdpdCBzdGFzaCBzaG93YCBjb21tYW5kIHdpdGhvdXQgYW4KKwlvcHRpb24gd2lsbCBzaG93IHRoZSBzdGFzaCBpbiBwYXRjaCBmb3JtLiAgRGVmYXVsdHMgdG8gZmFsc2UuCisJU2VlIGRlc2NyaXB0aW9uIG9mICdzaG93JyBjb21tYW5kIGluIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdLgorCitzdGFzaC5zaG93U3RhdDo6CisJSWYgdGhpcyBpcyBzZXQgdG8gdHJ1ZSwgdGhlIGBnaXQgc3Rhc2ggc2hvd2AgY29tbWFuZCB3aXRob3V0IGFuCisJb3B0aW9uIHdpbGwgc2hvdyBkaWZmc3RhdCBvZiB0aGUgc3Rhc2guICBEZWZhdWx0cyB0byB0cnVlLgorCVNlZSBkZXNjcmlwdGlvbiBvZiAnc2hvdycgY29tbWFuZCBpbiBsaW5rZ2l0OmdpdC1zdGFzaFsxXS4KKworc3VibW9kdWxlLjxuYW1lPi5wYXRoOjoKK3N1Ym1vZHVsZS48bmFtZT4udXJsOjoKKwlUaGUgcGF0aCB3aXRoaW4gdGhpcyBwcm9qZWN0IGFuZCBVUkwgZm9yIGEgc3VibW9kdWxlLiBUaGVzZQorCXZhcmlhYmxlcyBhcmUgaW5pdGlhbGx5IHBvcHVsYXRlZCBieSAnZ2l0IHN1Ym1vZHVsZSBpbml0Jy4gU2VlCisJbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGFuZCBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0gZm9yCisJZGV0YWlscy4KKworc3VibW9kdWxlLjxuYW1lPi51cGRhdGU6OgorCVRoZSBkZWZhdWx0IHVwZGF0ZSBwcm9jZWR1cmUgZm9yIGEgc3VibW9kdWxlLiBUaGlzIHZhcmlhYmxlCisJaXMgcG9wdWxhdGVkIGJ5IGBnaXQgc3VibW9kdWxlIGluaXRgIGZyb20gdGhlCisJbGlua2dpdDpnaXRtb2R1bGVzWzVdIGZpbGUuIFNlZSBkZXNjcmlwdGlvbiBvZiAndXBkYXRlJworCWNvbW1hbmQgaW4gbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdLgorCitzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaDo6CisJVGhlIHJlbW90ZSBicmFuY2ggbmFtZSBmb3IgYSBzdWJtb2R1bGUsIHVzZWQgYnkgYGdpdCBzdWJtb2R1bGUKKwl1cGRhdGUgLS1yZW1vdGVgLiAgU2V0IHRoaXMgb3B0aW9uIHRvIG92ZXJyaWRlIHRoZSB2YWx1ZSBmb3VuZCBpbgorCXRoZSBgLmdpdG1vZHVsZXNgIGZpbGUuICBTZWUgbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGFuZAorCWxpbmtnaXQ6Z2l0bW9kdWxlc1s1XSBmb3IgZGV0YWlscy4KKworc3VibW9kdWxlLjxuYW1lPi5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzOjoKKwlUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiB0aGlzCisJc3VibW9kdWxlLiBJdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUgLS1bbm8tXXJlY3Vyc2Utc3VibW9kdWxlcworCWNvbW1hbmQtbGluZSBvcHRpb24gdG8gImdpdCBmZXRjaCIgYW5kICJnaXQgcHVsbCIuCisJVGhpcyBzZXR0aW5nIHdpbGwgb3ZlcnJpZGUgdGhhdCBmcm9tIGluIHRoZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0KKwlmaWxlLgorCitzdWJtb2R1bGUuPG5hbWU+Lmlnbm9yZTo6CisJRGVmaW5lcyB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgImdpdCBzdGF0dXMiIGFuZCB0aGUgZGlmZiBmYW1pbHkgc2hvdworCWEgc3VibW9kdWxlIGFzIG1vZGlmaWVkLiBXaGVuIHNldCB0byAiYWxsIiwgaXQgd2lsbCBuZXZlciBiZSBjb25zaWRlcmVkCisJbW9kaWZpZWQgKGJ1dCBpdCB3aWxsIG5vbmV0aGVsZXNzIHNob3cgdXAgaW4gdGhlIG91dHB1dCBvZiBzdGF0dXMgYW5kCisJY29tbWl0IHdoZW4gaXQgaGFzIGJlZW4gc3RhZ2VkKSwgImRpcnR5IiB3aWxsIGlnbm9yZSBhbGwgY2hhbmdlcworCXRvIHRoZSBzdWJtb2R1bGVzIHdvcmsgdHJlZSBhbmQKKwl0YWtlcyBvbmx5IGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIEhFQUQgb2YgdGhlIHN1Ym1vZHVsZSBhbmQgdGhlIGNvbW1pdAorCXJlY29yZGVkIGluIHRoZSBzdXBlcnByb2plY3QgaW50byBhY2NvdW50LiAidW50cmFja2VkIiB3aWxsIGFkZGl0aW9uYWxseQorCWxldCBzdWJtb2R1bGVzIHdpdGggbW9kaWZpZWQgdHJhY2tlZCBmaWxlcyBpbiB0aGVpciB3b3JrIHRyZWUgc2hvdyB1cC4KKwlVc2luZyAibm9uZSIgKHRoZSBkZWZhdWx0IHdoZW4gdGhpcyBvcHRpb24gaXMgbm90IHNldCkgYWxzbyBzaG93cworCXN1Ym1vZHVsZXMgdGhhdCBoYXZlIHVudHJhY2tlZCBmaWxlcyBpbiB0aGVpciB3b3JrIHRyZWUgYXMgY2hhbmdlZC4KKwlUaGlzIHNldHRpbmcgb3ZlcnJpZGVzIGFueSBzZXR0aW5nIG1hZGUgaW4gLmdpdG1vZHVsZXMgZm9yIHRoaXMgc3VibW9kdWxlLAorCWJvdGggc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZSBieSB1c2luZyB0aGUKKwkiLS1pZ25vcmUtc3VibW9kdWxlcyIgb3B0aW9uLiBUaGUgJ2dpdCBzdWJtb2R1bGUnIGNvbW1hbmRzIGFyZSBub3QKKwlhZmZlY3RlZCBieSB0aGlzIHNldHRpbmcuCisKK3RhZy5zb3J0OjoKKwlUaGlzIHZhcmlhYmxlIGNvbnRyb2xzIHRoZSBzb3J0IG9yZGVyaW5nIG9mIHRhZ3Mgd2hlbiBkaXNwbGF5ZWQgYnkKKwlsaW5rZ2l0OmdpdC10YWdbMV0uIFdpdGhvdXQgdGhlICItLXNvcnQ9PHZhbHVlPiIgb3B0aW9uIHByb3ZpZGVkLCB0aGUKKwl2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdC4KKwordGFyLnVtYXNrOjoKKwlUaGlzIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBwZXJtaXNzaW9uIGJpdHMgb2YKKwl0YXIgYXJjaGl2ZSBlbnRyaWVzLiAgVGhlIGRlZmF1bHQgaXMgMDAwMiwgd2hpY2ggdHVybnMgb2ZmIHRoZQorCXdvcmxkIHdyaXRlIGJpdC4gIFRoZSBzcGVjaWFsIHZhbHVlICJ1c2VyIiBpbmRpY2F0ZXMgdGhhdCB0aGUKKwlhcmNoaXZpbmcgdXNlcidzIHVtYXNrIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiAgU2VlIHVtYXNrKDIpIGFuZAorCWxpbmtnaXQ6Z2l0LWFyY2hpdmVbMV0uCisKK3RyYW5zZmVyLmZzY2tPYmplY3RzOjoKKwlXaGVuIGBmZXRjaC5mc2NrT2JqZWN0c2Agb3IgYHJlY2VpdmUuZnNja09iamVjdHNgIGFyZQorCW5vdCBzZXQsIHRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIGlzIHVzZWQgaW5zdGVhZC4KKwlEZWZhdWx0cyB0byBmYWxzZS4KKwordHJhbnNmZXIuaGlkZVJlZnM6OgorCVN0cmluZyhzKSBgcmVjZWl2ZS1wYWNrYCBhbmQgYHVwbG9hZC1wYWNrYCB1c2UgdG8gZGVjaWRlIHdoaWNoCisJcmVmcyB0byBvbWl0IGZyb20gdGhlaXIgaW5pdGlhbCBhZHZlcnRpc2VtZW50cy4gIFVzZSBtb3JlIHRoYW4KKwlvbmUgZGVmaW5pdGlvbiB0byBzcGVjaWZ5IG11bHRpcGxlIHByZWZpeCBzdHJpbmdzLiBBIHJlZiB0aGF0IGlzCisJdW5kZXIgdGhlIGhpZXJhcmNoaWVzIGxpc3RlZCBpbiB0aGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcworCWV4Y2x1ZGVkLCBhbmQgaXMgaGlkZGVuIHdoZW4gcmVzcG9uZGluZyB0byBgZ2l0IHB1c2hgIG9yIGBnaXQKKwlmZXRjaGAuICBTZWUgYHJlY2VpdmUuaGlkZVJlZnNgIGFuZCBgdXBsb2FkcGFjay5oaWRlUmVmc2AgZm9yCisJcHJvZ3JhbS1zcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGlzIGNvbmZpZy4KKysKK1lvdSBtYXkgYWxzbyBpbmNsdWRlIGEgYCFgIGluIGZyb250IG9mIHRoZSByZWYgbmFtZSB0byBuZWdhdGUgdGhlIGVudHJ5LAorZXhwbGljaXRseSBleHBvc2luZyBpdCwgZXZlbiBpZiBhbiBlYXJsaWVyIGVudHJ5IG1hcmtlZCBpdCBhcyBoaWRkZW4uCitJZiB5b3UgaGF2ZSBtdWx0aXBsZSBoaWRlUmVmcyB2YWx1ZXMsIGxhdGVyIGVudHJpZXMgb3ZlcnJpZGUgZWFybGllciBvbmVzCisoYW5kIGVudHJpZXMgaW4gbW9yZS1zcGVjaWZpYyBjb25maWcgZmlsZXMgb3ZlcnJpZGUgbGVzcy1zcGVjaWZpYyBvbmVzKS4KKwordHJhbnNmZXIudW5wYWNrTGltaXQ6OgorCVdoZW4gYGZldGNoLnVucGFja0xpbWl0YCBvciBgcmVjZWl2ZS51bnBhY2tMaW1pdGAgYXJlCisJbm90IHNldCwgdGhlIHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgdXNlZCBpbnN0ZWFkLgorCVRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMC4KKwordXBsb2FkYXJjaGl2ZS5hbGxvd1VucmVhY2hhYmxlOjoKKwlJZiB0cnVlLCBhbGxvdyBjbGllbnRzIHRvIHVzZSBgZ2l0IGFyY2hpdmUgLS1yZW1vdGVgIHRvIHJlcXVlc3QKKwlhbnkgdHJlZSwgd2hldGhlciByZWFjaGFibGUgZnJvbSB0aGUgcmVmIHRpcHMgb3Igbm90LiBTZWUgdGhlCisJZGlzY3Vzc2lvbiBpbiB0aGUgYFNFQ1VSSVRZYCBzZWN0aW9uIG9mCisJbGlua2dpdDpnaXQtdXBsb2FkLWFyY2hpdmVbMV0gZm9yIG1vcmUgZGV0YWlscy4gRGVmYXVsdHMgdG8KKwlgZmFsc2VgLgorCit1cGxvYWRwYWNrLmhpZGVSZWZzOjoKKwlUaGlzIHZhcmlhYmxlIGlzIHRoZSBzYW1lIGFzIGB0cmFuc2Zlci5oaWRlUmVmc2AsIGJ1dCBhcHBsaWVzCisJb25seSB0byBgdXBsb2FkLXBhY2tgIChhbmQgc28gYWZmZWN0cyBvbmx5IGZldGNoZXMsIG5vdCBwdXNoZXMpLgorCUFuIGF0dGVtcHQgdG8gZmV0Y2ggYSBoaWRkZW4gcmVmIGJ5IGBnaXQgZmV0Y2hgIHdpbGwgZmFpbC4gIFNlZQorCWFsc28gYHVwbG9hZHBhY2suYWxsb3dUaXBTSEExSW5XYW50YC4KKwordXBsb2FkcGFjay5hbGxvd1RpcFNIQTFJbldhbnQ6OgorCVdoZW4gYHVwbG9hZHBhY2suaGlkZVJlZnNgIGlzIGluIGVmZmVjdCwgYWxsb3cgYHVwbG9hZC1wYWNrYAorCXRvIGFjY2VwdCBhIGZldGNoIHJlcXVlc3QgdGhhdCBhc2tzIGZvciBhbiBvYmplY3QgYXQgdGhlIHRpcAorCW9mIGEgaGlkZGVuIHJlZiAoYnkgZGVmYXVsdCwgc3VjaCBhIHJlcXVlc3QgaXMgcmVqZWN0ZWQpLgorCXNlZSBhbHNvIGB1cGxvYWRwYWNrLmhpZGVSZWZzYC4KKwordXBsb2FkcGFjay5hbGxvd1JlYWNoYWJsZVNIQTFJbldhbnQ6OgorCUFsbG93IGB1cGxvYWQtcGFja2AgdG8gYWNjZXB0IGEgZmV0Y2ggcmVxdWVzdCB0aGF0IGFza3MgZm9yIGFuCisJb2JqZWN0IHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYW55IHJlZiB0aXAuIEhvd2V2ZXIsIG5vdGUgdGhhdAorCWNhbGN1bGF0aW5nIG9iamVjdCByZWFjaGFiaWxpdHkgaXMgY29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZS4KKwlEZWZhdWx0cyB0byBgZmFsc2VgLgorCit1cGxvYWRwYWNrLmtlZXBBbGl2ZTo6CisJV2hlbiBgdXBsb2FkLXBhY2tgIGhhcyBzdGFydGVkIGBwYWNrLW9iamVjdHNgLCB0aGVyZSBtYXkgYmUgYQorCXF1aWV0IHBlcmlvZCB3aGlsZSBgcGFjay1vYmplY3RzYCBwcmVwYXJlcyB0aGUgcGFjay4gTm9ybWFsbHkKKwlpdCB3b3VsZCBvdXRwdXQgcHJvZ3Jlc3MgaW5mb3JtYXRpb24sIGJ1dCBpZiBgLS1xdWlldGAgd2FzIHVzZWQKKwlmb3IgdGhlIGZldGNoLCBgcGFjay1vYmplY3RzYCB3aWxsIG91dHB1dCBub3RoaW5nIGF0IGFsbCB1bnRpbAorCXRoZSBwYWNrIGRhdGEgYmVnaW5zLiBTb21lIGNsaWVudHMgYW5kIG5ldHdvcmtzIG1heSBjb25zaWRlcgorCXRoZSBzZXJ2ZXIgdG8gYmUgaHVuZyBhbmQgZ2l2ZSB1cC4gU2V0dGluZyB0aGlzIG9wdGlvbiBpbnN0cnVjdHMKKwlgdXBsb2FkLXBhY2tgIHRvIHNlbmQgYW4gZW1wdHkga2VlcGFsaXZlIHBhY2tldCBldmVyeQorCWB1cGxvYWRwYWNrLmtlZXBBbGl2ZWAgc2Vjb25kcy4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byAwCisJZGlzYWJsZXMga2VlcGFsaXZlIHBhY2tldHMgZW50aXJlbHkuIFRoZSBkZWZhdWx0IGlzIDUgc2Vjb25kcy4KKwordXJsLjxiYXNlPi5pbnN0ZWFkT2Y6OgorCUFueSBVUkwgdGhhdCBzdGFydHMgd2l0aCB0aGlzIHZhbHVlIHdpbGwgYmUgcmV3cml0dGVuIHRvCisJc3RhcnQsIGluc3RlYWQsIHdpdGggPGJhc2U+LiBJbiBjYXNlcyB3aGVyZSBzb21lIHNpdGUgc2VydmVzIGEKKwlsYXJnZSBudW1iZXIgb2YgcmVwb3NpdG9yaWVzLCBhbmQgc2VydmVzIHRoZW0gd2l0aCBtdWx0aXBsZQorCWFjY2VzcyBtZXRob2RzLCBhbmQgc29tZSB1c2VycyBuZWVkIHRvIHVzZSBkaWZmZXJlbnQgYWNjZXNzCisJbWV0aG9kcywgdGhpcyBmZWF0dXJlIGFsbG93cyBwZW9wbGUgdG8gc3BlY2lmeSBhbnkgb2YgdGhlCisJZXF1aXZhbGVudCBVUkxzIGFuZCBoYXZlIEdpdCBhdXRvbWF0aWNhbGx5IHJld3JpdGUgdGhlIFVSTCB0bworCXRoZSBiZXN0IGFsdGVybmF0aXZlIGZvciB0aGUgcGFydGljdWxhciB1c2VyLCBldmVuIGZvciBhCisJbmV2ZXItYmVmb3JlLXNlZW4gcmVwb3NpdG9yeSBvbiB0aGUgc2l0ZS4gIFdoZW4gbW9yZSB0aGFuIG9uZQorCWluc3RlYWRPZiBzdHJpbmdzIG1hdGNoIGEgZ2l2ZW4gVVJMLCB0aGUgbG9uZ2VzdCBtYXRjaCBpcyB1c2VkLgorCit1cmwuPGJhc2U+LnB1c2hJbnN0ZWFkT2Y6OgorCUFueSBVUkwgdGhhdCBzdGFydHMgd2l0aCB0aGlzIHZhbHVlIHdpbGwgbm90IGJlIHB1c2hlZCB0bzsKKwlpbnN0ZWFkLCBpdCB3aWxsIGJlIHJld3JpdHRlbiB0byBzdGFydCB3aXRoIDxiYXNlPiwgYW5kIHRoZQorCXJlc3VsdGluZyBVUkwgd2lsbCBiZSBwdXNoZWQgdG8uIEluIGNhc2VzIHdoZXJlIHNvbWUgc2l0ZSBzZXJ2ZXMKKwlhIGxhcmdlIG51bWJlciBvZiByZXBvc2l0b3JpZXMsIGFuZCBzZXJ2ZXMgdGhlbSB3aXRoIG11bHRpcGxlCisJYWNjZXNzIG1ldGhvZHMsIHNvbWUgb2Ygd2hpY2ggZG8gbm90IGFsbG93IHB1c2gsIHRoaXMgZmVhdHVyZQorCWFsbG93cyBwZW9wbGUgdG8gc3BlY2lmeSBhIHB1bGwtb25seSBVUkwgYW5kIGhhdmUgR2l0CisJYXV0b21hdGljYWxseSB1c2UgYW4gYXBwcm9wcmlhdGUgVVJMIHRvIHB1c2gsIGV2ZW4gZm9yIGEKKwluZXZlci1iZWZvcmUtc2VlbiByZXBvc2l0b3J5IG9uIHRoZSBzaXRlLiAgV2hlbiBtb3JlIHRoYW4gb25lCisJcHVzaEluc3RlYWRPZiBzdHJpbmdzIG1hdGNoIGEgZ2l2ZW4gVVJMLCB0aGUgbG9uZ2VzdCBtYXRjaCBpcworCXVzZWQuICBJZiBhIHJlbW90ZSBoYXMgYW4gZXhwbGljaXQgcHVzaHVybCwgR2l0IHdpbGwgaWdub3JlIHRoaXMKKwlzZXR0aW5nIGZvciB0aGF0IHJlbW90ZS4KKwordXNlci5lbWFpbDo6CisJWW91ciBlbWFpbCBhZGRyZXNzIHRvIGJlIHJlY29yZGVkIGluIGFueSBuZXdseSBjcmVhdGVkIGNvbW1pdHMuCisJQ2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfQVVUSE9SX0VNQUlMJywgJ0dJVF9DT01NSVRURVJfRU1BSUwnLCBhbmQKKwknRU1BSUwnIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFNlZSBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXS4KKwordXNlci5uYW1lOjoKKwlZb3VyIGZ1bGwgbmFtZSB0byBiZSByZWNvcmRlZCBpbiBhbnkgbmV3bHkgY3JlYXRlZCBjb21taXRzLgorCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX0FVVEhPUl9OQU1FJyBhbmQgJ0dJVF9DT01NSVRURVJfTkFNRScKKwllbnZpcm9ubWVudCB2YXJpYWJsZXMuICBTZWUgbGlua2dpdDpnaXQtY29tbWl0LXRyZWVbMV0uCisKK3VzZXIuc2lnbmluZ0tleTo6CisJSWYgbGlua2dpdDpnaXQtdGFnWzFdIG9yIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSBpcyBub3Qgc2VsZWN0aW5nIHRoZQorCWtleSB5b3Ugd2FudCBpdCB0byBhdXRvbWF0aWNhbGx5IHdoZW4gY3JlYXRpbmcgYSBzaWduZWQgdGFnIG9yCisJY29tbWl0LCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiB3aXRoIHRoaXMgdmFyaWFibGUuCisJVGhpcyBvcHRpb24gaXMgcGFzc2VkIHVuY2hhbmdlZCB0byBncGcncyAtLWxvY2FsLXVzZXIgcGFyYW1ldGVyLAorCXNvIHlvdSBtYXkgc3BlY2lmeSBhIGtleSB1c2luZyBhbnkgbWV0aG9kIHRoYXQgZ3BnIHN1cHBvcnRzLgorCit2ZXJzaW9uc29ydC5wcmVyZWxlYXNlU3VmZml4OjoKKwlXaGVuIHZlcnNpb24gc29ydCBpcyB1c2VkIGluIGxpbmtnaXQ6Z2l0LXRhZ1sxXSwgcHJlcmVsZWFzZQorCXRhZ3MgKGUuZy4gIjEuMC1yYzEiKSBtYXkgYXBwZWFyIGFmdGVyIHRoZSBtYWluIHJlbGVhc2UKKwkiMS4wIi4gQnkgc3BlY2lmeWluZyB0aGUgc3VmZml4ICItcmMiIGluIHRoaXMgdmFyaWFibGUsCisJIjEuMC1yYzEiIHdpbGwgYXBwZWFyIGJlZm9yZSAiMS4wIi4KKysKK1RoaXMgdmFyaWFibGUgY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcywgb25jZSBwZXIgc3VmZml4LiBUaGUKK29yZGVyIG9mIHN1ZmZpeGVzIGluIHRoZSBjb25maWcgZmlsZSBkZXRlcm1pbmVzIHRoZSBzb3J0aW5nIG9yZGVyCisoZS5nLiBpZiAiLXByZSIgYXBwZWFycyBiZWZvcmUgIi1yYyIgaW4gdGhlIGNvbmZpZyBmaWxlIHRoZW4gMS4wLXByZVhYCitpcyBzb3J0ZWQgYmVmb3JlIDEuMC1yY1hYKS4gVGhlIHNvcnRpbmcgb3JkZXIgYmV0d2VlbiBkaWZmZXJlbnQKK3N1ZmZpeGVzIGlzIHVuZGVmaW5lZCBpZiB0aGV5IGFyZSBpbiBtdWx0aXBsZSBjb25maWcgZmlsZXMuCisKK3dlYi5icm93c2VyOjoKKwlTcGVjaWZ5IGEgd2ViIGJyb3dzZXIgdGhhdCBtYXkgYmUgdXNlZCBieSBzb21lIGNvbW1hbmRzLgorCUN1cnJlbnRseSBvbmx5IGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdIGFuZCBsaW5rZ2l0OmdpdC1oZWxwWzFdCisJbWF5IHVzZSBpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGF0ZS1mb3JtYXRzLnR4dCBiL0RvY3VtZW50YXRpb24vZGF0ZS1mb3JtYXRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2QxZmM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kYXRlLWZvcm1hdHMudHh0CkBAIC0wLDAgKzEsMjYgQEAKK0RBVEUgRk9STUFUUworLS0tLS0tLS0tLS0tCisKK1RoZSBHSVRfQVVUSE9SX0RBVEUsIEdJVF9DT01NSVRURVJfREFURSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKK2lmZGVmOjpnaXQtY29tbWl0W10KK2FuZCB0aGUgYC0tZGF0ZWAgb3B0aW9uCitlbmRpZjo6Z2l0LWNvbW1pdFtdCitzdXBwb3J0IHRoZSBmb2xsb3dpbmcgZGF0ZSBmb3JtYXRzOgorCitHaXQgaW50ZXJuYWwgZm9ybWF0OjoKKwlJdCBpcyBgPHVuaXggdGltZXN0YW1wPiA8dGltZSB6b25lIG9mZnNldD5gLCB3aGVyZSBgPHVuaXgKKwl0aW1lc3RhbXA+YCBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guCisJYDx0aW1lIHpvbmUgb2Zmc2V0PmAgaXMgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBvZmZzZXQgZnJvbSBVVEMuCisJRm9yIGV4YW1wbGUgQ0VUICh3aGljaCBpcyAyIGhvdXJzIGFoZWFkIFVUQykgaXMgYCswMjAwYC4KKworUkZDIDI4MjI6OgorCVRoZSBzdGFuZGFyZCBlbWFpbCBmb3JtYXQgYXMgZGVzY3JpYmVkIGJ5IFJGQyAyODIyLCBmb3IgZXhhbXBsZQorCWBUaHUsIDA3IEFwciAyMDA1IDIyOjEzOjEzICswMjAwYC4KKworSVNPIDg2MDE6OgorCVRpbWUgYW5kIGRhdGUgc3BlY2lmaWVkIGJ5IHRoZSBJU08gODYwMSBzdGFuZGFyZCwgZm9yIGV4YW1wbGUKKwlgMjAwNS0wNC0wN1QyMjoxMzoxM2AuIFRoZSBwYXJzZXIgYWNjZXB0cyBhIHNwYWNlIGluc3RlYWQgb2YgdGhlCisJYFRgIGNoYXJhY3RlciBhcyB3ZWxsLgorKworTk9URTogSW4gYWRkaXRpb24sIHRoZSBkYXRlIHBhcnQgaXMgYWNjZXB0ZWQgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXRzOgorYFlZWVkuTU0uRERgLCBgTU0vREQvWVlZWWAgYW5kIGBERC5NTS5ZWVlZYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWNvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhYTQ1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGlmZi1jb25maWcudHh0CkBAIC0wLDAgKzEsMTg0IEBACitkaWZmLmF1dG9SZWZyZXNoSW5kZXg6OgorCVdoZW4gdXNpbmcgJ2dpdCBkaWZmJyB0byBjb21wYXJlIHdpdGggd29yayB0cmVlCisJZmlsZXMsIGRvIG5vdCBjb25zaWRlciBzdGF0LW9ubHkgY2hhbmdlIGFzIGNoYW5nZWQuCisJSW5zdGVhZCwgc2lsZW50bHkgcnVuIGBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaGAgdG8KKwl1cGRhdGUgdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uIGZvciBwYXRocyB3aG9zZQorCWNvbnRlbnRzIGluIHRoZSB3b3JrIHRyZWUgbWF0Y2ggdGhlIGNvbnRlbnRzIGluIHRoZQorCWluZGV4LiAgVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gdHJ1ZS4gIE5vdGUgdGhhdCB0aGlzCisJYWZmZWN0cyBvbmx5ICdnaXQgZGlmZicgUG9yY2VsYWluLCBhbmQgbm90IGxvd2VyIGxldmVsCisJJ2RpZmYnIGNvbW1hbmRzIHN1Y2ggYXMgJ2dpdCBkaWZmLWZpbGVzJy4KKworZGlmZi5kaXJzdGF0OjoKKwlBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGAtLWRpcnN0YXRgIHBhcmFtZXRlcnMgc3BlY2lmeWluZyB0aGUKKwlkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBgLS1kaXJzdGF0YCBvcHRpb24gdG8gbGlua2dpdDpnaXQtZGlmZlsxXWAKKwlhbmQgZnJpZW5kcy4gVGhlIGRlZmF1bHRzIGNhbiBiZSBvdmVycmlkZGVuIG9uIHRoZSBjb21tYW5kIGxpbmUKKwkodXNpbmcgYC0tZGlyc3RhdD08cGFyYW0xLHBhcmFtMiwuLi4+YCkuIFRoZSBmYWxsYmFjayBkZWZhdWx0cworCSh3aGVuIG5vdCBjaGFuZ2VkIGJ5IGBkaWZmLmRpcnN0YXRgKSBhcmUgYGNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzYC4KKwlUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGF2YWlsYWJsZToKKysKKy0tCitgY2hhbmdlc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBjb3VudGluZyB0aGUgbGluZXMgdGhhdCBoYXZlIGJlZW4KKwlyZW1vdmVkIGZyb20gdGhlIHNvdXJjZSwgb3IgYWRkZWQgdG8gdGhlIGRlc3RpbmF0aW9uLiBUaGlzIGlnbm9yZXMKKwl0aGUgYW1vdW50IG9mIHB1cmUgY29kZSBtb3ZlbWVudHMgd2l0aGluIGEgZmlsZS4gIEluIG90aGVyIHdvcmRzLAorCXJlYXJyYW5naW5nIGxpbmVzIGluIGEgZmlsZSBpcyBub3QgY291bnRlZCBhcyBtdWNoIGFzIG90aGVyIGNoYW5nZXMuCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciB3aGVuIG5vIHBhcmFtZXRlciBpcyBnaXZlbi4KK2BsaW5lc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBkb2luZyB0aGUgcmVndWxhciBsaW5lLWJhc2VkIGRpZmYKKwlhbmFseXNpcywgYW5kIHN1bW1pbmcgdGhlIHJlbW92ZWQvYWRkZWQgbGluZSBjb3VudHMuIChGb3IgYmluYXJ5CisJZmlsZXMsIGNvdW50IDY0LWJ5dGUgY2h1bmtzIGluc3RlYWQsIHNpbmNlIGJpbmFyeSBmaWxlcyBoYXZlIG5vCisJbmF0dXJhbCBjb25jZXB0IG9mIGxpbmVzKS4gVGhpcyBpcyBhIG1vcmUgZXhwZW5zaXZlIGAtLWRpcnN0YXRgCisJYmVoYXZpb3IgdGhhbiB0aGUgYGNoYW5nZXNgIGJlaGF2aW9yLCBidXQgaXQgZG9lcyBjb3VudCByZWFycmFuZ2VkCisJbGluZXMgd2l0aGluIGEgZmlsZSBhcyBtdWNoIGFzIG90aGVyIGNoYW5nZXMuIFRoZSByZXN1bHRpbmcgb3V0cHV0CisJaXMgY29uc2lzdGVudCB3aXRoIHdoYXQgeW91IGdldCBmcm9tIHRoZSBvdGhlciBgLS0qc3RhdGAgb3B0aW9ucy4KK2BmaWxlc2A7OworCUNvbXB1dGUgdGhlIGRpcnN0YXQgbnVtYmVycyBieSBjb3VudGluZyB0aGUgbnVtYmVyIG9mIGZpbGVzIGNoYW5nZWQuCisJRWFjaCBjaGFuZ2VkIGZpbGUgY291bnRzIGVxdWFsbHkgaW4gdGhlIGRpcnN0YXQgYW5hbHlzaXMuIFRoaXMgaXMKKwl0aGUgY29tcHV0YXRpb25hbGx5IGNoZWFwZXN0IGAtLWRpcnN0YXRgIGJlaGF2aW9yLCBzaW5jZSBpdCBkb2VzCisJbm90IGhhdmUgdG8gbG9vayBhdCB0aGUgZmlsZSBjb250ZW50cyBhdCBhbGwuCitgY3VtdWxhdGl2ZWA7OworCUNvdW50IGNoYW5nZXMgaW4gYSBjaGlsZCBkaXJlY3RvcnkgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGFzIHdlbGwuCisJTm90ZSB0aGF0IHdoZW4gdXNpbmcgYGN1bXVsYXRpdmVgLCB0aGUgc3VtIG9mIHRoZSBwZXJjZW50YWdlcworCXJlcG9ydGVkIG1heSBleGNlZWQgMTAwJS4gVGhlIGRlZmF1bHQgKG5vbi1jdW11bGF0aXZlKSBiZWhhdmlvciBjYW4KKwliZSBzcGVjaWZpZWQgd2l0aCB0aGUgYG5vbmN1bXVsYXRpdmVgIHBhcmFtZXRlci4KKzxsaW1pdD47OworCUFuIGludGVnZXIgcGFyYW1ldGVyIHNwZWNpZmllcyBhIGN1dC1vZmYgcGVyY2VudCAoMyUgYnkgZGVmYXVsdCkuCisJRGlyZWN0b3JpZXMgY29udHJpYnV0aW5nIGxlc3MgdGhhbiB0aGlzIHBlcmNlbnRhZ2Ugb2YgdGhlIGNoYW5nZXMKKwlhcmUgbm90IHNob3duIGluIHRoZSBvdXRwdXQuCistLQorKworRXhhbXBsZTogVGhlIGZvbGxvd2luZyB3aWxsIGNvdW50IGNoYW5nZWQgZmlsZXMsIHdoaWxlIGlnbm9yaW5nCitkaXJlY3RvcmllcyB3aXRoIGxlc3MgdGhhbiAxMCUgb2YgdGhlIHRvdGFsIGFtb3VudCBvZiBjaGFuZ2VkIGZpbGVzLAorYW5kIGFjY3VtdWxhdGluZyBjaGlsZCBkaXJlY3RvcnkgY291bnRzIGluIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXM6CitgZmlsZXMsMTAsY3VtdWxhdGl2ZWAuCisKK2RpZmYuc3RhdEdyYXBoV2lkdGg6OgorCUxpbWl0IHRoZSB3aWR0aCBvZiB0aGUgZ3JhcGggcGFydCBpbiAtLXN0YXQgb3V0cHV0LiBJZiBzZXQsIGFwcGxpZXMKKwl0byBhbGwgY29tbWFuZHMgZ2VuZXJhdGluZyAtLXN0YXQgb3V0cHV0IGV4Y2VwdCBmb3JtYXQtcGF0Y2guCisKK2RpZmYuY29udGV4dDo6CisJR2VuZXJhdGUgZGlmZnMgd2l0aCA8bj4gbGluZXMgb2YgY29udGV4dCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisJb2YgMy4gVGhpcyB2YWx1ZSBpcyBvdmVycmlkZGVuIGJ5IHRoZSAtVSBvcHRpb24uCisKK2RpZmYuZXh0ZXJuYWw6OgorCUlmIHRoaXMgY29uZmlnIHZhcmlhYmxlIGlzIHNldCwgZGlmZiBnZW5lcmF0aW9uIGlzIG5vdAorCXBlcmZvcm1lZCB1c2luZyB0aGUgaW50ZXJuYWwgZGlmZiBtYWNoaW5lcnksIGJ1dCB1c2luZyB0aGUKKwlnaXZlbiBjb21tYW5kLiAgQ2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgYEdJVF9FWFRFUk5BTF9ESUZGJworCWVudmlyb25tZW50IHZhcmlhYmxlLiAgVGhlIGNvbW1hbmQgaXMgY2FsbGVkIHdpdGggcGFyYW1ldGVycworCWFzIGRlc2NyaWJlZCB1bmRlciAiZ2l0IERpZmZzIiBpbiBsaW5rZ2l0OmdpdFsxXS4gIE5vdGU6IGlmCisJeW91IHdhbnQgdG8gdXNlIGFuIGV4dGVybmFsIGRpZmYgcHJvZ3JhbSBvbmx5IG9uIGEgc3Vic2V0IG9mCisJeW91ciBmaWxlcywgeW91CW1pZ2h0IHdhbnQgdG8gdXNlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBpbnN0ZWFkLgorCitkaWZmLmlnbm9yZVN1Ym1vZHVsZXM6OgorCVNldHMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgLS1pZ25vcmUtc3VibW9kdWxlcy4gTm90ZSB0aGF0IHRoaXMKKwlhZmZlY3RzIG9ubHkgJ2dpdCBkaWZmJyBQb3JjZWxhaW4sIGFuZCBub3QgbG93ZXIgbGV2ZWwgJ2RpZmYnCisJY29tbWFuZHMgc3VjaCBhcyAnZ2l0IGRpZmYtZmlsZXMnLiAnZ2l0IGNoZWNrb3V0JyBhbHNvIGhvbm9ycworCXRoaXMgc2V0dGluZyB3aGVuIHJlcG9ydGluZyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiBTZXR0aW5nIGl0IHRvCisJJ2FsbCcgZGlzYWJsZXMgdGhlIHN1Ym1vZHVsZSBzdW1tYXJ5IG5vcm1hbGx5IHNob3duIGJ5ICdnaXQgY29tbWl0JworCWFuZCAnZ2l0IHN0YXR1cycgd2hlbiAnc3RhdHVzLnN1Ym1vZHVsZVN1bW1hcnknIGlzIHNldCB1bmxlc3MgaXQgaXMKKwlvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSAtLWlnbm9yZS1zdWJtb2R1bGVzIGNvbW1hbmQtbGluZSBvcHRpb24uCisJVGhlICdnaXQgc3VibW9kdWxlJyBjb21tYW5kcyBhcmUgbm90IGFmZmVjdGVkIGJ5IHRoaXMgc2V0dGluZy4KKworZGlmZi5tbmVtb25pY1ByZWZpeDo6CisJSWYgc2V0LCAnZ2l0IGRpZmYnIHVzZXMgYSBwcmVmaXggcGFpciB0aGF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZQorCXN0YW5kYXJkICJhLyIgYW5kICJiLyIgZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgY29tcGFyZWQuICBXaGVuCisJdGhpcyBjb25maWd1cmF0aW9uIGlzIGluIGVmZmVjdCwgcmV2ZXJzZSBkaWZmIG91dHB1dCBhbHNvIHN3YXBzCisJdGhlIG9yZGVyIG9mIHRoZSBwcmVmaXhlczoKK2BnaXQgZGlmZmA7OworCWNvbXBhcmVzIHRoZSAoaSluZGV4IGFuZCB0aGUgKHcpb3JrIHRyZWU7CitgZ2l0IGRpZmYgSEVBRGA7OworCSBjb21wYXJlcyBhIChjKW9tbWl0IGFuZCB0aGUgKHcpb3JrIHRyZWU7CitgZ2l0IGRpZmYgLS1jYWNoZWRgOzsKKwljb21wYXJlcyBhIChjKW9tbWl0IGFuZCB0aGUgKGkpbmRleDsKK2BnaXQgZGlmZiBIRUFEOmZpbGUxIGZpbGUyYDs7CisJY29tcGFyZXMgYW4gKG8pYmplY3QgYW5kIGEgKHcpb3JrIHRyZWUgZW50aXR5OworYGdpdCBkaWZmIC0tbm8taW5kZXggYSBiYDs7CisJY29tcGFyZXMgdHdvIG5vbi1naXQgdGhpbmdzICgxKSBhbmQgKDIpLgorCitkaWZmLm5vcHJlZml4OjoKKwlJZiBzZXQsICdnaXQgZGlmZicgZG9lcyBub3Qgc2hvdyBhbnkgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByZWZpeC4KKworZGlmZi5vcmRlckZpbGU6OgorCUZpbGUgaW5kaWNhdGluZyBob3cgdG8gb3JkZXIgZmlsZXMgd2l0aGluIGEgZGlmZiwgdXNpbmcKKwlvbmUgc2hlbGwgZ2xvYiBwYXR0ZXJuIHBlciBsaW5lLgorCUNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSAnLU8nIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1kaWZmWzFdLgorCitkaWZmLnJlbmFtZUxpbWl0OjoKKwlUaGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIHdoZW4gcGVyZm9ybWluZyB0aGUgY29weS9yZW5hbWUKKwlkZXRlY3Rpb247IGVxdWl2YWxlbnQgdG8gdGhlICdnaXQgZGlmZicgb3B0aW9uICctbCcuCisKK2RpZmYucmVuYW1lczo6CisJVGVsbHMgR2l0IHRvIGRldGVjdCByZW5hbWVzLiAgSWYgc2V0IHRvIGFueSBib29sZWFuIHZhbHVlLCBpdAorCXdpbGwgZW5hYmxlIGJhc2ljIHJlbmFtZSBkZXRlY3Rpb24uICBJZiBzZXQgdG8gImNvcGllcyIgb3IKKwkiY29weSIsIGl0IHdpbGwgZGV0ZWN0IGNvcGllcywgYXMgd2VsbC4KKworZGlmZi5zdXBwcmVzc0JsYW5rRW1wdHk6OgorCUEgYm9vbGVhbiB0byBpbmhpYml0IHRoZSBzdGFuZGFyZCBiZWhhdmlvciBvZiBwcmludGluZyBhIHNwYWNlCisJYmVmb3JlIGVhY2ggZW1wdHkgb3V0cHV0IGxpbmUuIERlZmF1bHRzIHRvIGZhbHNlLgorCitkaWZmLnN1Ym1vZHVsZTo6CisJU3BlY2lmeSB0aGUgZm9ybWF0IGluIHdoaWNoIGRpZmZlcmVuY2VzIGluIHN1Ym1vZHVsZXMgYXJlCisJc2hvd24uICBUaGUgImxvZyIgZm9ybWF0IGxpc3RzIHRoZSBjb21taXRzIGluIHRoZSByYW5nZSBsaWtlCisJbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGBzdW1tYXJ5YCBkb2VzLiAgVGhlICJzaG9ydCIgZm9ybWF0CisJZm9ybWF0IGp1c3Qgc2hvd3MgdGhlIG5hbWVzIG9mIHRoZSBjb21taXRzIGF0IHRoZSBiZWdpbm5pbmcKKwlhbmQgZW5kIG9mIHRoZSByYW5nZS4gIERlZmF1bHRzIHRvIHNob3J0LgorCitkaWZmLndvcmRSZWdleDo6CisJQSBQT1NJWCBFeHRlbmRlZCBSZWd1bGFyIEV4cHJlc3Npb24gdXNlZCB0byBkZXRlcm1pbmUgd2hhdCBpcyBhICJ3b3JkIgorCXdoZW4gcGVyZm9ybWluZyB3b3JkLWJ5LXdvcmQgZGlmZmVyZW5jZSBjYWxjdWxhdGlvbnMuICBDaGFyYWN0ZXIKKwlzZXF1ZW5jZXMgdGhhdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uIGFyZSAid29yZHMiLCBhbGwgb3RoZXIKKwljaGFyYWN0ZXJzIGFyZSAqaWdub3JhYmxlKiB3aGl0ZXNwYWNlLgorCitkaWZmLjxkcml2ZXI+LmNvbW1hbmQ6OgorCVRoZSBjdXN0b20gZGlmZiBkcml2ZXIgY29tbWFuZC4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0KKwlmb3IgZGV0YWlscy4KKworZGlmZi48ZHJpdmVyPi54ZnVuY25hbWU6OgorCVRoZSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB0aGUgZGlmZiBkcml2ZXIgc2hvdWxkIHVzZSB0bworCXJlY29nbml6ZSB0aGUgaHVuayBoZWFkZXIuICBBIGJ1aWx0LWluIHBhdHRlcm4gbWF5IGFsc28gYmUgdXNlZC4KKwlTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCitkaWZmLjxkcml2ZXI+LmJpbmFyeTo6CisJU2V0IHRoaXMgb3B0aW9uIHRvIHRydWUgdG8gbWFrZSB0aGUgZGlmZiBkcml2ZXIgdHJlYXQgZmlsZXMgYXMKKwliaW5hcnkuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCitkaWZmLjxkcml2ZXI+LnRleHRjb252OjoKKwlUaGUgY29tbWFuZCB0aGF0IHRoZSBkaWZmIGRyaXZlciBzaG91bGQgY2FsbCB0byBnZW5lcmF0ZSB0aGUKKwl0ZXh0LWNvbnZlcnRlZCB2ZXJzaW9uIG9mIGEgZmlsZS4gIFRoZSByZXN1bHQgb2YgdGhlCisJY29udmVyc2lvbiBpcyB1c2VkIHRvIGdlbmVyYXRlIGEgaHVtYW4tcmVhZGFibGUgZGlmZi4gIFNlZQorCWxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworZGlmZi48ZHJpdmVyPi53b3JkUmVnZXg6OgorCVRoZSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB0aGUgZGlmZiBkcml2ZXIgc2hvdWxkIHVzZSB0bworCXNwbGl0IHdvcmRzIGluIGEgbGluZS4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yCisJZGV0YWlscy4KKworZGlmZi48ZHJpdmVyPi5jYWNoZXRleHRjb252OjoKKwlTZXQgdGhpcyBvcHRpb24gdG8gdHJ1ZSB0byBtYWtlIHRoZSBkaWZmIGRyaXZlciBjYWNoZSB0aGUgdGV4dAorCWNvbnZlcnNpb24gb3V0cHV0cy4gIFNlZSBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0gZm9yIGRldGFpbHMuCisKK2RpZmYudG9vbDo6CisJQ29udHJvbHMgd2hpY2ggZGlmZiB0b29sIGlzIHVzZWQgYnkgbGlua2dpdDpnaXQtZGlmZnRvb2xbMV0uCisJVGhpcyB2YXJpYWJsZSBvdmVycmlkZXMgdGhlIHZhbHVlIGNvbmZpZ3VyZWQgaW4gYG1lcmdlLnRvb2xgLgorCVRoZSBsaXN0IGJlbG93IHNob3dzIHRoZSB2YWxpZCBidWlsdC1pbiB2YWx1ZXMuCisJQW55IG90aGVyIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYSBjdXN0b20gZGlmZiB0b29sIGFuZCByZXF1aXJlcworCXRoYXQgYSBjb3JyZXNwb25kaW5nIGRpZmZ0b29sLjx0b29sPi5jbWQgdmFyaWFibGUgaXMgZGVmaW5lZC4KKworaW5jbHVkZTo6bWVyZ2V0b29scy1kaWZmLnR4dFtdCisKK2RpZmYuYWxnb3JpdGhtOjoKKwlDaG9vc2UgYSBkaWZmIGFsZ29yaXRobS4gIFRoZSB2YXJpYW50cyBhcmUgYXMgZm9sbG93czoKKysKKy0tCitgZGVmYXVsdGAsIGBteWVyc2A7OworCVRoZSBiYXNpYyBncmVlZHkgZGlmZiBhbGdvcml0aG0uIEN1cnJlbnRseSwgdGhpcyBpcyB0aGUgZGVmYXVsdC4KK2BtaW5pbWFsYDs7CisJU3BlbmQgZXh0cmEgdGltZSB0byBtYWtlIHN1cmUgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIGRpZmYgaXMKKwlwcm9kdWNlZC4KK2BwYXRpZW5jZWA7OworCVVzZSAicGF0aWVuY2UgZGlmZiIgYWxnb3JpdGhtIHdoZW4gZ2VuZXJhdGluZyBwYXRjaGVzLgorYGhpc3RvZ3JhbWA7OworCVRoaXMgYWxnb3JpdGhtIGV4dGVuZHMgdGhlIHBhdGllbmNlIGFsZ29yaXRobSB0byAic3VwcG9ydAorCWxvdy1vY2N1cnJlbmNlIGNvbW1vbiBlbGVtZW50cyIuCistLQorKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWIwODkwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKQEAgLTAsMCArMSwxNzAgQEAKK1JhdyBvdXRwdXQgZm9ybWF0CistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmF3IG91dHB1dCBmb3JtYXQgZnJvbSAiZ2l0LWRpZmYtaW5kZXgiLCAiZ2l0LWRpZmYtdHJlZSIsCisiZ2l0LWRpZmYtZmlsZXMiIGFuZCAiZ2l0IGRpZmYgLS1yYXciIGFyZSB2ZXJ5IHNpbWlsYXIuCisKK1RoZXNlIGNvbW1hbmRzIGFsbCBjb21wYXJlIHR3byBzZXRzIG9mIHRoaW5nczsgd2hhdCBpcworY29tcGFyZWQgZGlmZmVyczoKKworZ2l0LWRpZmYtaW5kZXggPHRyZWUtaXNoPjo6CisgICAgICAgIGNvbXBhcmVzIHRoZSA8dHJlZS1pc2g+IGFuZCB0aGUgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0uCisKK2dpdC1kaWZmLWluZGV4IC0tY2FjaGVkIDx0cmVlLWlzaD46OgorICAgICAgICBjb21wYXJlcyB0aGUgPHRyZWUtaXNoPiBhbmQgdGhlIGluZGV4LgorCitnaXQtZGlmZi10cmVlIFstcl0gPHRyZWUtaXNoLTE+IDx0cmVlLWlzaC0yPiBbPHBhdHRlcm4+Li4uXTo6CisgICAgICAgIGNvbXBhcmVzIHRoZSB0cmVlcyBuYW1lZCBieSB0aGUgdHdvIGFyZ3VtZW50cy4KKworZ2l0LWRpZmYtZmlsZXMgWzxwYXR0ZXJuPi4uLl06OgorICAgICAgICBjb21wYXJlcyB0aGUgaW5kZXggYW5kIHRoZSBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbS4KKworVGhlICJnaXQtZGlmZi10cmVlIiBjb21tYW5kIGJlZ2lucyBpdHMgb3V0cHV0IGJ5IHByaW50aW5nIHRoZSBoYXNoIG9mCit3aGF0IGlzIGJlaW5nIGNvbXBhcmVkLiBBZnRlciB0aGF0LCBhbGwgdGhlIGNvbW1hbmRzIHByaW50IG9uZSBvdXRwdXQKK2xpbmUgcGVyIGNoYW5nZWQgZmlsZS4KKworQW4gb3V0cHV0IGxpbmUgaXMgZm9ybWF0dGVkIHRoaXMgd2F5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luLXBsYWNlIGVkaXQgIDoxMDA2NDQgMTAwNjQ0IGJjZDEyMzQuLi4gMDEyMzQ1Ni4uLiBNIGZpbGUwCitjb3B5LWVkaXQgICAgICA6MTAwNjQ0IDEwMDY0NCBhYmNkMTIzLi4uIDEyMzQ1NjcuLi4gQzY4IGZpbGUxIGZpbGUyCityZW5hbWUtZWRpdCAgICA6MTAwNjQ0IDEwMDY0NCBhYmNkMTIzLi4uIDEyMzQ1NjcuLi4gUjg2IGZpbGUxIGZpbGUzCitjcmVhdGUgICAgICAgICA6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDEyMzQ1NjcuLi4gQSBmaWxlNAorZGVsZXRlICAgICAgICAgOjEwMDY0NCAwMDAwMDAgMTIzNDU2Ny4uLiAwMDAwMDAwLi4uIEQgZmlsZTUKK3VubWVyZ2VkICAgICAgIDowMDAwMDAgMDAwMDAwIDAwMDAwMDAuLi4gMDAwMDAwMC4uLiBVIGZpbGU2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhhdCBpcywgZnJvbSB0aGUgbGVmdCB0byB0aGUgcmlnaHQ6CisKKy4gYSBjb2xvbi4KKy4gbW9kZSBmb3IgInNyYyI7IDAwMDAwMCBpZiBjcmVhdGlvbiBvciB1bm1lcmdlZC4KKy4gYSBzcGFjZS4KKy4gbW9kZSBmb3IgImRzdCI7IDAwMDAwMCBpZiBkZWxldGlvbiBvciB1bm1lcmdlZC4KKy4gYSBzcGFjZS4KKy4gc2hhMSBmb3IgInNyYyI7IDBcezQwXH0gaWYgY3JlYXRpb24gb3IgdW5tZXJnZWQuCisuIGEgc3BhY2UuCisuIHNoYTEgZm9yICJkc3QiOyAwXHs0MFx9IGlmIGNyZWF0aW9uLCB1bm1lcmdlZCBvciAibG9vayBhdCB3b3JrIHRyZWUiLgorLiBhIHNwYWNlLgorLiBzdGF0dXMsIGZvbGxvd2VkIGJ5IG9wdGlvbmFsICJzY29yZSIgbnVtYmVyLgorLiBhIHRhYiBvciBhIE5VTCB3aGVuICcteicgb3B0aW9uIGlzIHVzZWQuCisuIHBhdGggZm9yICJzcmMiCisuIGEgdGFiIG9yIGEgTlVMIHdoZW4gJy16JyBvcHRpb24gaXMgdXNlZDsgb25seSBleGlzdHMgZm9yIEMgb3IgUi4KKy4gcGF0aCBmb3IgImRzdCI7IG9ubHkgZXhpc3RzIGZvciBDIG9yIFIuCisuIGFuIExGIG9yIGEgTlVMIHdoZW4gJy16JyBvcHRpb24gaXMgdXNlZCwgdG8gdGVybWluYXRlIHRoZSByZWNvcmQuCisKK1Bvc3NpYmxlIHN0YXR1cyBsZXR0ZXJzIGFyZToKKworLSBBOiBhZGRpdGlvbiBvZiBhIGZpbGUKKy0gQzogY29weSBvZiBhIGZpbGUgaW50byBhIG5ldyBvbmUKKy0gRDogZGVsZXRpb24gb2YgYSBmaWxlCistIE06IG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGVudHMgb3IgbW9kZSBvZiBhIGZpbGUKKy0gUjogcmVuYW1pbmcgb2YgYSBmaWxlCistIFQ6IGNoYW5nZSBpbiB0aGUgdHlwZSBvZiB0aGUgZmlsZQorLSBVOiBmaWxlIGlzIHVubWVyZ2VkICh5b3UgbXVzdCBjb21wbGV0ZSB0aGUgbWVyZ2UgYmVmb3JlIGl0IGNhbgorYmUgY29tbWl0dGVkKQorLSBYOiAidW5rbm93biIgY2hhbmdlIHR5cGUgKG1vc3QgcHJvYmFibHkgYSBidWcsIHBsZWFzZSByZXBvcnQgaXQpCisKK1N0YXR1cyBsZXR0ZXJzIEMgYW5kIFIgYXJlIGFsd2F5cyBmb2xsb3dlZCBieSBhIHNjb3JlIChkZW5vdGluZyB0aGUKK3BlcmNlbnRhZ2Ugb2Ygc2ltaWxhcml0eSBiZXR3ZWVuIHRoZSBzb3VyY2UgYW5kIHRhcmdldCBvZiB0aGUgbW92ZSBvcgorY29weSkuICBTdGF0dXMgbGV0dGVyIE0gbWF5IGJlIGZvbGxvd2VkIGJ5IGEgc2NvcmUgKGRlbm90aW5nIHRoZQorcGVyY2VudGFnZSBvZiBkaXNzaW1pbGFyaXR5KSBmb3IgZmlsZSByZXdyaXRlcy4KKworPHNoYTE+IGlzIHNob3duIGFzIGFsbCAwJ3MgaWYgYSBmaWxlIGlzIG5ldyBvbiB0aGUgZmlsZXN5c3RlbQorYW5kIGl0IGlzIG91dCBvZiBzeW5jIHdpdGggdGhlIGluZGV4LgorCitFeGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzoxMDA2NDQgMTAwNjQ0IDViZTRhNC4uLi4uLiAwMDAwMDAuLi4uLi4gTSBmaWxlLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGAtemAgb3B0aW9uIGlzIG5vdCB1c2VkLCBUQUIsIExGLCBhbmQgYmFja3NsYXNoIGNoYXJhY3RlcnMKK2luIHBhdGhuYW1lcyBhcmUgcmVwcmVzZW50ZWQgYXMgYFx0YCwgYFxuYCwgYW5kIGBcXGAsCityZXNwZWN0aXZlbHkuCisKK2RpZmYgZm9ybWF0IGZvciBtZXJnZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworImdpdC1kaWZmLXRyZWUiLCAiZ2l0LWRpZmYtZmlsZXMiIGFuZCAiZ2l0LWRpZmYgLS1yYXciCitjYW4gdGFrZSAnLWMnIG9yICctLWNjJyBvcHRpb24KK3RvIGdlbmVyYXRlIGRpZmYgb3V0cHV0IGFsc28gZm9yIG1lcmdlIGNvbW1pdHMuICBUaGUgb3V0cHV0IGRpZmZlcnMKK2Zyb20gdGhlIGZvcm1hdCBkZXNjcmliZWQgYWJvdmUgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisKKy4gdGhlcmUgaXMgYSBjb2xvbiBmb3IgZWFjaCBwYXJlbnQKKy4gdGhlcmUgYXJlIG1vcmUgInNyYyIgbW9kZXMgYW5kICJzcmMiIHNoYTEKKy4gc3RhdHVzIGlzIGNvbmNhdGVuYXRlZCBzdGF0dXMgY2hhcmFjdGVycyBmb3IgZWFjaCBwYXJlbnQKKy4gbm8gb3B0aW9uYWwgInNjb3JlIiBudW1iZXIKKy4gc2luZ2xlIHBhdGgsIG9ubHkgZm9yICJkc3QiCisKK0V4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBmYWJhZGI4Li4uIGNjOTVlYjAuLi4gNDg2NjUxMC4uLiBNTQlkZXNjcmliZS5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0ICdjb21iaW5lZCBkaWZmJyBsaXN0cyBvbmx5IGZpbGVzIHdoaWNoIHdlcmUgbW9kaWZpZWQgZnJvbQorYWxsIHBhcmVudHMuCisKKworaW5jbHVkZTo6ZGlmZi1nZW5lcmF0ZS1wYXRjaC50eHRbXQorCisKK290aGVyIGRpZmYgZm9ybWF0cworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgLS1zdW1tYXJ5YCBvcHRpb24gZGVzY3JpYmVzIG5ld2x5IGFkZGVkLCBkZWxldGVkLCByZW5hbWVkIGFuZAorY29waWVkIGZpbGVzLiAgVGhlIGAtLXN0YXRgIG9wdGlvbiBhZGRzIGRpZmZzdGF0KDEpIGdyYXBoIHRvIHRoZQorb3V0cHV0LiAgVGhlc2Ugb3B0aW9ucyBjYW4gYmUgY29tYmluZWQgd2l0aCBvdGhlciBvcHRpb25zLCBzdWNoIGFzCitgLXBgLCBhbmQgYXJlIG1lYW50IGZvciBodW1hbiBjb25zdW1wdGlvbi4KKworV2hlbiBzaG93aW5nIGEgY2hhbmdlIHRoYXQgaW52b2x2ZXMgYSByZW5hbWUgb3IgYSBjb3B5LCBgLS1zdGF0YCBvdXRwdXQKK2Zvcm1hdHMgdGhlIHBhdGhuYW1lcyBjb21wYWN0bHkgYnkgY29tYmluaW5nIGNvbW1vbiBwcmVmaXggYW5kIHN1ZmZpeCBvZgordGhlIHBhdGhuYW1lcy4gIEZvciBleGFtcGxlLCBhIGNoYW5nZSB0aGF0IG1vdmVzIGBhcmNoL2kzODYvTWFrZWZpbGVgIHRvCitgYXJjaC94ODYvTWFrZWZpbGVgIHdoaWxlIG1vZGlmeWluZyA0IGxpbmVzIHdpbGwgYmUgc2hvd24gbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FyY2gve2kzODYgPT4geDg2fS9NYWtlZmlsZSAgICB8ICAgNCArLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgYC0tbnVtc3RhdGAgb3B0aW9uIGdpdmVzIHRoZSBkaWZmc3RhdCgxKSBpbmZvcm1hdGlvbiBidXQgaXMgZGVzaWduZWQKK2ZvciBlYXNpZXIgbWFjaGluZSBjb25zdW1wdGlvbi4gIEFuIGVudHJ5IGluIGAtLW51bXN0YXRgIG91dHB1dCBsb29rcworbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisxCTIJUkVBRE1FCiszCTEJYXJjaC97aTM4NiA9PiB4ODZ9L01ha2VmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoYXQgaXMsIGZyb20gbGVmdCB0byByaWdodDoKKworLiB0aGUgbnVtYmVyIG9mIGFkZGVkIGxpbmVzOworLiBhIHRhYjsKKy4gdGhlIG51bWJlciBvZiBkZWxldGVkIGxpbmVzOworLiBhIHRhYjsKKy4gcGF0aG5hbWUgKHBvc3NpYmx5IHdpdGggcmVuYW1lL2NvcHkgaW5mb3JtYXRpb24pOworLiBhIG5ld2xpbmUuCisKK1doZW4gYC16YCBvdXRwdXQgb3B0aW9uIGlzIGluIGVmZmVjdCwgdGhlIG91dHB1dCBpcyBmb3JtYXR0ZWQgdGhpcyB3YXk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEJMglSRUFETUUgTlVMCiszCTEJTlVMIGFyY2gvaTM4Ni9NYWtlZmlsZSBOVUwgYXJjaC94ODYvTWFrZWZpbGUgTlVMCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoYXQgaXM6CisKKy4gdGhlIG51bWJlciBvZiBhZGRlZCBsaW5lczsKKy4gYSB0YWI7CisuIHRoZSBudW1iZXIgb2YgZGVsZXRlZCBsaW5lczsKKy4gYSB0YWI7CisuIGEgTlVMIChvbmx5IGV4aXN0cyBpZiByZW5hbWVkL2NvcGllZCk7CisuIHBhdGhuYW1lIGluIHByZWltYWdlOworLiBhIE5VTCAob25seSBleGlzdHMgaWYgcmVuYW1lZC9jb3BpZWQpOworLiBwYXRobmFtZSBpbiBwb3N0aW1hZ2UgKG9ubHkgZXhpc3RzIGlmIHJlbmFtZWQvY29waWVkKTsKKy4gYSBOVUwuCisKK1RoZSBleHRyYSBgTlVMYCBiZWZvcmUgdGhlIHByZWltYWdlIHBhdGggaW4gcmVuYW1lZCBjYXNlIGlzIHRvIGFsbG93CitzY3JpcHRzIHRoYXQgcmVhZCB0aGUgb3V0cHV0IHRvIHRlbGwgaWYgdGhlIGN1cnJlbnQgcmVjb3JkIGJlaW5nIHJlYWQgaXMKK2Egc2luZ2xlLXBhdGggcmVjb3JkIG9yIGEgcmVuYW1lL2NvcHkgcmVjb3JkIHdpdGhvdXQgcmVhZGluZyBhaGVhZC4KK0FmdGVyIHJlYWRpbmcgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMsIHJlYWRpbmcgdXAgdG8gYE5VTGAgd291bGQgeWllbGQKK3RoZSBwYXRobmFtZSwgYnV0IGlmIHRoYXQgaXMgYE5VTGAsIHRoZSByZWNvcmQgd2lsbCBzaG93IHR3byBwYXRocy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1nZW5lcmF0ZS1wYXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2RpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZjU0ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RpZmYtZ2VuZXJhdGUtcGF0Y2gudHh0CkBAIC0wLDAgKzEsMTg1IEBACitHZW5lcmF0aW5nIHBhdGNoZXMgd2l0aCAtcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiAiZ2l0LWRpZmYtaW5kZXgiLCAiZ2l0LWRpZmYtdHJlZSIsIG9yICJnaXQtZGlmZi1maWxlcyIgYXJlIHJ1bgord2l0aCBhICctcCcgb3B0aW9uLCAiZ2l0IGRpZmYiIHdpdGhvdXQgdGhlICctLXJhdycgb3B0aW9uLCBvcgorImdpdCBsb2ciIHdpdGggdGhlICItcCIgb3B0aW9uLCB0aGV5CitkbyBub3QgcHJvZHVjZSB0aGUgb3V0cHV0IGRlc2NyaWJlZCBhYm92ZTsgaW5zdGVhZCB0aGV5IHByb2R1Y2UgYQorcGF0Y2ggZmlsZS4gIFlvdSBjYW4gY3VzdG9taXplIHRoZSBjcmVhdGlvbiBvZiBzdWNoIHBhdGNoZXMgdmlhIHRoZQorR0lUX0VYVEVSTkFMX0RJRkYgYW5kIHRoZSBHSVRfRElGRl9PUFRTIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKworV2hhdCB0aGUgLXAgb3B0aW9uIHByb2R1Y2VzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIHRoZSB0cmFkaXRpb25hbAorZGlmZiBmb3JtYXQ6CisKKzEuICAgSXQgaXMgcHJlY2VkZWQgd2l0aCBhICJnaXQgZGlmZiIgaGVhZGVyIHRoYXQgbG9va3MgbGlrZSB0aGlzOgorCisgICAgICAgZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTIKKysKK1RoZSBgYS9gIGFuZCBgYi9gIGZpbGVuYW1lcyBhcmUgdGhlIHNhbWUgdW5sZXNzIHJlbmFtZS9jb3B5IGlzCitpbnZvbHZlZC4gIEVzcGVjaWFsbHksIGV2ZW4gZm9yIGEgY3JlYXRpb24gb3IgYSBkZWxldGlvbiwKK2AvZGV2L251bGxgIGlzIF9ub3RfIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIGBhL2Agb3IgYGIvYCBmaWxlbmFtZXMuCisrCitXaGVuIHJlbmFtZS9jb3B5IGlzIGludm9sdmVkLCBgZmlsZTFgIGFuZCBgZmlsZTJgIHNob3cgdGhlCituYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSBvZiB0aGUgcmVuYW1lL2NvcHkgYW5kIHRoZSBuYW1lIG9mCit0aGUgZmlsZSB0aGF0IHJlbmFtZS9jb3B5IHByb2R1Y2VzLCByZXNwZWN0aXZlbHkuCisKKzIuICAgSXQgaXMgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgZXh0ZW5kZWQgaGVhZGVyIGxpbmVzOgorCisgICAgICAgb2xkIG1vZGUgPG1vZGU+CisgICAgICAgbmV3IG1vZGUgPG1vZGU+CisgICAgICAgZGVsZXRlZCBmaWxlIG1vZGUgPG1vZGU+CisgICAgICAgbmV3IGZpbGUgbW9kZSA8bW9kZT4KKyAgICAgICBjb3B5IGZyb20gPHBhdGg+CisgICAgICAgY29weSB0byA8cGF0aD4KKyAgICAgICByZW5hbWUgZnJvbSA8cGF0aD4KKyAgICAgICByZW5hbWUgdG8gPHBhdGg+CisgICAgICAgc2ltaWxhcml0eSBpbmRleCA8bnVtYmVyPgorICAgICAgIGRpc3NpbWlsYXJpdHkgaW5kZXggPG51bWJlcj4KKyAgICAgICBpbmRleCA8aGFzaD4uLjxoYXNoPiA8bW9kZT4KKysKK0ZpbGUgbW9kZXMgYXJlIHByaW50ZWQgYXMgNi1kaWdpdCBvY3RhbCBudW1iZXJzIGluY2x1ZGluZyB0aGUgZmlsZSB0eXBlCithbmQgZmlsZSBwZXJtaXNzaW9uIGJpdHMuCisrCitQYXRoIG5hbWVzIGluIGV4dGVuZGVkIGhlYWRlcnMgZG8gbm90IGluY2x1ZGUgdGhlIGBhL2AgYW5kIGBiL2AgcHJlZml4ZXMuCisrCitUaGUgc2ltaWxhcml0eSBpbmRleCBpcyB0aGUgcGVyY2VudGFnZSBvZiB1bmNoYW5nZWQgbGluZXMsIGFuZAordGhlIGRpc3NpbWlsYXJpdHkgaW5kZXggaXMgdGhlIHBlcmNlbnRhZ2Ugb2YgY2hhbmdlZCBsaW5lcy4gIEl0CitpcyBhIHJvdW5kZWQgZG93biBpbnRlZ2VyLCBmb2xsb3dlZCBieSBhIHBlcmNlbnQgc2lnbi4gIFRoZQorc2ltaWxhcml0eSBpbmRleCB2YWx1ZSBvZiAxMDAlIGlzIHRodXMgcmVzZXJ2ZWQgZm9yIHR3byBlcXVhbAorZmlsZXMsIHdoaWxlIDEwMCUgZGlzc2ltaWxhcml0eSBtZWFucyB0aGF0IG5vIGxpbmUgZnJvbSB0aGUgb2xkCitmaWxlIG1hZGUgaXQgaW50byB0aGUgbmV3IG9uZS4KKysKK1RoZSBpbmRleCBsaW5lIGluY2x1ZGVzIHRoZSBTSEEtMSBjaGVja3N1bSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UuCitUaGUgPG1vZGU+IGlzIGluY2x1ZGVkIGlmIHRoZSBmaWxlIG1vZGUgZG9lcyBub3QgY2hhbmdlOyBvdGhlcndpc2UsCitzZXBhcmF0ZSBsaW5lcyBpbmRpY2F0ZSB0aGUgb2xkIGFuZCB0aGUgbmV3IG1vZGUuCisKKzMuICBUQUIsIExGLCBkb3VibGUgcXVvdGUgYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzIGluIHBhdGhuYW1lcworICAgIGFyZSByZXByZXNlbnRlZCBhcyBgXHRgLCBgXG5gLCBgXCJgIGFuZCBgXFxgLCByZXNwZWN0aXZlbHkuCisgICAgSWYgdGhlcmUgaXMgbmVlZCBmb3Igc3VjaCBzdWJzdGl0dXRpb24gdGhlbiB0aGUgd2hvbGUKKyAgICBwYXRobmFtZSBpcyBwdXQgaW4gZG91YmxlIHF1b3Rlcy4KKworNC4gIEFsbCB0aGUgYGZpbGUxYCBmaWxlcyBpbiB0aGUgb3V0cHV0IHJlZmVyIHRvIGZpbGVzIGJlZm9yZSB0aGUKKyAgICBjb21taXQsIGFuZCBhbGwgdGhlIGBmaWxlMmAgZmlsZXMgcmVmZXIgdG8gZmlsZXMgYWZ0ZXIgdGhlIGNvbW1pdC4KKyAgICBJdCBpcyBpbmNvcnJlY3QgdG8gYXBwbHkgZWFjaCBjaGFuZ2UgdG8gZWFjaCBmaWxlIHNlcXVlbnRpYWxseS4gIEZvcgorICAgIGV4YW1wbGUsIHRoaXMgcGF0Y2ggd2lsbCBzd2FwIGEgYW5kIGI6CisKKyAgICAgIGRpZmYgLS1naXQgYS9hIGIvYgorICAgICAgcmVuYW1lIGZyb20gYQorICAgICAgcmVuYW1lIHRvIGIKKyAgICAgIGRpZmYgLS1naXQgYS9iIGIvYQorICAgICAgcmVuYW1lIGZyb20gYgorICAgICAgcmVuYW1lIHRvIGEKKworCitjb21iaW5lZCBkaWZmIGZvcm1hdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW55IGRpZmYtZ2VuZXJhdGluZyBjb21tYW5kIGNhbiB0YWtlIHRoZSBgLWNgIG9yIGAtLWNjYCBvcHRpb24gdG8KK3Byb2R1Y2UgYSAnY29tYmluZWQgZGlmZicgd2hlbiBzaG93aW5nIGEgbWVyZ2UuIFRoaXMgaXMgdGhlIGRlZmF1bHQKK2Zvcm1hdCB3aGVuIHNob3dpbmcgbWVyZ2VzIHdpdGggbGlua2dpdDpnaXQtZGlmZlsxXSBvcgorbGlua2dpdDpnaXQtc2hvd1sxXS4gTm90ZSBhbHNvIHRoYXQgeW91IGNhbiBnaXZlIHRoZSBgLW1gIG9wdGlvbiB0byBhbnkKK29mIHRoZXNlIGNvbW1hbmRzIHRvIGZvcmNlIGdlbmVyYXRpb24gb2YgZGlmZnMgd2l0aCBpbmRpdmlkdWFsIHBhcmVudHMKK29mIGEgbWVyZ2UuCisKK0EgJ2NvbWJpbmVkIGRpZmYnIGZvcm1hdCBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorZGlmZiAtLWNvbWJpbmVkIGRlc2NyaWJlLmMKK2luZGV4IGZhYmFkYjgsY2M5NWViMC4uNDg2NjUxMAorLS0tIGEvZGVzY3JpYmUuYworKysrIGIvZGVzY3JpYmUuYworQEBAIC05OCwyMCAtOTgsMTIgKzk4LDIwIEBAQAorCXJldHVybiAoYV9kYXRlID4gYl9kYXRlKSA/IC0xIDogKGFfZGF0ZSA9PSBiX2RhdGUpID8gMCA6IDE7CisgIH0KKworLSBzdGF0aWMgdm9pZCBkZXNjcmliZShjaGFyICphcmcpCisgLXN0YXRpYyB2b2lkIGRlc2NyaWJlKHN0cnVjdCBjb21taXQgKmNtaXQsIGludCBsYXN0X29uZSkKKysrc3RhdGljIHZvaWQgZGVzY3JpYmUoY2hhciAqYXJnLCBpbnQgbGFzdF9vbmUpCisgIHsKKyArCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisgKwlzdHJ1Y3QgY29tbWl0ICpjbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKwlzdHJ1Y3QgY29tbWl0X25hbWUgKm47CisKKyArCWlmIChnZXRfc2hhMShhcmcsIHNoYTEpIDwgMCkKKyArCQl1c2FnZShkZXNjcmliZV91c2FnZSk7CisgKwljbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisgKwlpZiAoIWNtaXQpCisgKwkJdXNhZ2UoZGVzY3JpYmVfdXNhZ2UpOworICsKKwlpZiAoIWluaXRpYWxpemVkKSB7CisJCWluaXRpYWxpemVkID0gMTsKKwkJZm9yX2VhY2hfcmVmKGdldF9uYW1lKTsKKy0tLS0tLS0tLS0tLQorCisxLiAgIEl0IGlzIHByZWNlZGVkIHdpdGggYSAiZ2l0IGRpZmYiIGhlYWRlciwgdGhhdCBsb29rcyBsaWtlCisgICAgIHRoaXMgKHdoZW4gJy1jJyBvcHRpb24gaXMgdXNlZCk6CisKKyAgICAgICBkaWZmIC0tY29tYmluZWQgZmlsZQorKworb3IgbGlrZSB0aGlzICh3aGVuICctLWNjJyBvcHRpb24gaXMgdXNlZCk6CisKKyAgICAgICBkaWZmIC0tY2MgZmlsZQorCisyLiAgIEl0IGlzIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIGV4dGVuZGVkIGhlYWRlciBsaW5lcworICAgICAodGhpcyBleGFtcGxlIHNob3dzIGEgbWVyZ2Ugd2l0aCB0d28gcGFyZW50cyk6CisKKyAgICAgICBpbmRleCA8aGFzaD4sPGhhc2g+Li48aGFzaD4KKyAgICAgICBtb2RlIDxtb2RlPiw8bW9kZT4uLjxtb2RlPgorICAgICAgIG5ldyBmaWxlIG1vZGUgPG1vZGU+CisgICAgICAgZGVsZXRlZCBmaWxlIG1vZGUgPG1vZGU+LDxtb2RlPgorKworVGhlIGBtb2RlIDxtb2RlPiw8bW9kZT4uLjxtb2RlPmAgbGluZSBhcHBlYXJzIG9ubHkgaWYgYXQgbGVhc3Qgb25lIG9mCit0aGUgPG1vZGU+IGlzIGRpZmZlcmVudCBmcm9tIHRoZSByZXN0LiBFeHRlbmRlZCBoZWFkZXJzIHdpdGgKK2luZm9ybWF0aW9uIGFib3V0IGRldGVjdGVkIGNvbnRlbnRzIG1vdmVtZW50IChyZW5hbWVzIGFuZAorY29weWluZyBkZXRlY3Rpb24pIGFyZSBkZXNpZ25lZCB0byB3b3JrIHdpdGggZGlmZiBvZiB0d28KKzx0cmVlLWlzaD4gYW5kIGFyZSBub3QgdXNlZCBieSBjb21iaW5lZCBkaWZmIGZvcm1hdC4KKworMy4gICBJdCBpcyBmb2xsb3dlZCBieSB0d28tbGluZSBmcm9tLWZpbGUvdG8tZmlsZSBoZWFkZXIKKworICAgICAgIC0tLSBhL2ZpbGUKKyAgICAgICArKysgYi9maWxlCisrCitTaW1pbGFyIHRvIHR3by1saW5lIGhlYWRlciBmb3IgdHJhZGl0aW9uYWwgJ3VuaWZpZWQnIGRpZmYKK2Zvcm1hdCwgYC9kZXYvbnVsbGAgaXMgdXNlZCB0byBzaWduYWwgY3JlYXRlZCBvciBkZWxldGVkCitmaWxlcy4KKworNC4gICBDaHVuayBoZWFkZXIgZm9ybWF0IGlzIG1vZGlmaWVkIHRvIHByZXZlbnQgcGVvcGxlIGZyb20KKyAgICAgYWNjaWRlbnRhbGx5IGZlZWRpbmcgaXQgdG8gYHBhdGNoIC1wMWAuIENvbWJpbmVkIGRpZmYgZm9ybWF0CisgICAgIHdhcyBjcmVhdGVkIGZvciByZXZpZXcgb2YgbWVyZ2UgY29tbWl0IGNoYW5nZXMsIGFuZCB3YXMgbm90CisgICAgIG1lYW50IGZvciBhcHBseS4gVGhlIGNoYW5nZSBpcyBzaW1pbGFyIHRvIHRoZSBjaGFuZ2UgaW4gdGhlCisgICAgIGV4dGVuZGVkICdpbmRleCcgaGVhZGVyOgorCisgICAgICAgQEBAIDxmcm9tLWZpbGUtcmFuZ2U+IDxmcm9tLWZpbGUtcmFuZ2U+IDx0by1maWxlLXJhbmdlPiBAQEAKKysKK1RoZXJlIGFyZSAobnVtYmVyIG9mIHBhcmVudHMgKyAxKSBgQGAgY2hhcmFjdGVycyBpbiB0aGUgY2h1bmsKK2hlYWRlciBmb3IgY29tYmluZWQgZGlmZiBmb3JtYXQuCisKK1VubGlrZSB0aGUgdHJhZGl0aW9uYWwgJ3VuaWZpZWQnIGRpZmYgZm9ybWF0LCB3aGljaCBzaG93cyB0d28KK2ZpbGVzIEEgYW5kIEIgd2l0aCBhIHNpbmdsZSBjb2x1bW4gdGhhdCBoYXMgYC1gIChtaW51cyAtLQorYXBwZWFycyBpbiBBIGJ1dCByZW1vdmVkIGluIEIpLCBgK2AgKHBsdXMgLS0gbWlzc2luZyBpbiBBIGJ1dAorYWRkZWQgdG8gQiksIG9yIGAiICJgIChzcGFjZSAtLSB1bmNoYW5nZWQpIHByZWZpeCwgdGhpcyBmb3JtYXQKK2NvbXBhcmVzIHR3byBvciBtb3JlIGZpbGVzIGZpbGUxLCBmaWxlMiwuLi4gd2l0aCBvbmUgZmlsZSBYLCBhbmQKK3Nob3dzIGhvdyBYIGRpZmZlcnMgZnJvbSBlYWNoIG9mIGZpbGVOLiAgT25lIGNvbHVtbiBmb3IgZWFjaCBvZgorZmlsZU4gaXMgcHJlcGVuZGVkIHRvIHRoZSBvdXRwdXQgbGluZSB0byBub3RlIGhvdyBYJ3MgbGluZSBpcworZGlmZmVyZW50IGZyb20gaXQuCisKK0EgYC1gIGNoYXJhY3RlciBpbiB0aGUgY29sdW1uIE4gbWVhbnMgdGhhdCB0aGUgbGluZSBhcHBlYXJzIGluCitmaWxlTiBidXQgaXQgZG9lcyBub3QgYXBwZWFyIGluIHRoZSByZXN1bHQuICBBIGArYCBjaGFyYWN0ZXIKK2luIHRoZSBjb2x1bW4gTiBtZWFucyB0aGF0IHRoZSBsaW5lIGFwcGVhcnMgaW4gdGhlIHJlc3VsdCwKK2FuZCBmaWxlTiBkb2VzIG5vdCBoYXZlIHRoYXQgbGluZSAoaW4gb3RoZXIgd29yZHMsIHRoZSBsaW5lIHdhcworYWRkZWQsIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YgdGhhdCBwYXJlbnQpLgorCitJbiB0aGUgYWJvdmUgZXhhbXBsZSBvdXRwdXQsIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgd2FzIGNoYW5nZWQKK2Zyb20gYm90aCBmaWxlcyAoaGVuY2UgdHdvIGAtYCByZW1vdmFscyBmcm9tIGJvdGggZmlsZTEgYW5kCitmaWxlMiwgcGx1cyBgKytgIHRvIG1lYW4gb25lIGxpbmUgdGhhdCB3YXMgYWRkZWQgZG9lcyBub3QgYXBwZWFyCitpbiBlaXRoZXIgZmlsZTEgb3IgZmlsZTIpLiAgQWxzbyBlaWdodCBvdGhlciBsaW5lcyBhcmUgdGhlIHNhbWUKK2Zyb20gZmlsZTEgYnV0IGRvIG5vdCBhcHBlYXIgaW4gZmlsZTIgKGhlbmNlIHByZWZpeGVkIHdpdGggYCtgKS4KKworV2hlbiBzaG93biBieSBgZ2l0IGRpZmYtdHJlZSAtY2AsIGl0IGNvbXBhcmVzIHRoZSBwYXJlbnRzIG9mIGEKK21lcmdlIGNvbW1pdCB3aXRoIHRoZSBtZXJnZSByZXN1bHQgKGkuZS4gZmlsZTEuLmZpbGVOIGFyZSB0aGUKK3BhcmVudHMpLiAgV2hlbiBzaG93biBieSBgZ2l0IGRpZmYtZmlsZXMgLWNgLCBpdCBjb21wYXJlcyB0aGUKK3R3byB1bnJlc29sdmVkIG1lcmdlIHBhcmVudHMgd2l0aCB0aGUgd29ya2luZyB0cmVlIGZpbGUKKyhpLmUuIGZpbGUxIGlzIHN0YWdlIDIgYWthICJvdXIgdmVyc2lvbiIsIGZpbGUyIGlzIHN0YWdlIDMgYWthCisidGhlaXIgdmVyc2lvbiIpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLW9wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NmNhOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RpZmYtb3B0aW9ucy50eHQKQEAgLTAsMCArMSw1NjAgQEAKKy8vIFBsZWFzZSBkb24ndCByZW1vdmUgdGhpcyBjb21tZW50IGFzIGFzY2lpZG9jIGJlaGF2ZXMgYmFkbHkgd2hlbgorLy8gdGhlIGZpcnN0IG5vbi1lbXB0eSBsaW5lIGlzIGlmZGVmL2lmbmRlZi4gVGhlIHN5bXB0b20gaXMgdGhhdAorLy8gd2l0aG91dCB0aGlzIGNvbW1lbnQgdGhlIDxnaXQtZGlmZi1jb3JlPiBhdHRyaWJ1dGUgY29uZGl0aW9uYWxseQorLy8gZGVmaW5lZCBiZWxvdyBlbmRzIHVwIGJlaW5nIGRlZmluZWQgdW5jb25kaXRpb25hbGx5LgorLy8gTGFzdCBjaGVja2VkIHdpdGggYXNjaWlkb2MgNy4wLjIuCisKK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCitpZm5kZWY6OmdpdC1kaWZmW10KK2lmbmRlZjo6Z2l0LWxvZ1tdCis6Z2l0LWRpZmYtY29yZTogMQorZW5kaWY6OmdpdC1sb2dbXQorZW5kaWY6OmdpdC1kaWZmW10KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworaWZkZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLXA6OgorLS1uby1zdGF0OjoKKwlHZW5lcmF0ZSBwbGFpbiBwYXRjaGVzIHdpdGhvdXQgYW55IGRpZmZzdGF0cy4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKy1wOjoKKy11OjoKKy0tcGF0Y2g6OgorCUdlbmVyYXRlIHBhdGNoIChzZWUgc2VjdGlvbiBvbiBnZW5lcmF0aW5nIHBhdGNoZXMpLgoraWZkZWY6OmdpdC1kaWZmW10KKwlUaGlzIGlzIHRoZSBkZWZhdWx0LgorZW5kaWY6OmdpdC1kaWZmW10KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworLXM6OgorLS1uby1wYXRjaDo6CisJU3VwcHJlc3MgZGlmZiBvdXRwdXQuIFVzZWZ1bCBmb3IgY29tbWFuZHMgbGlrZSBgZ2l0IHNob3dgIHRoYXQKKwlzaG93IHRoZSBwYXRjaCBieSBkZWZhdWx0LCBvciB0byBjYW5jZWwgdGhlIGVmZmVjdCBvZiBgLS1wYXRjaGAuCisKKy1VPG4+OjoKKy0tdW5pZmllZD08bj46OgorCUdlbmVyYXRlIGRpZmZzIHdpdGggPG4+IGxpbmVzIG9mIGNvbnRleHQgaW5zdGVhZCBvZgorCXRoZSB1c3VhbCB0aHJlZS4KK2lmbmRlZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisJSW1wbGllcyBgLXBgLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLS1yYXc6OgoraWZuZGVmOjpnaXQtbG9nW10KKwlHZW5lcmF0ZSB0aGUgZGlmZiBpbiByYXcgZm9ybWF0LgoraWZkZWY6OmdpdC1kaWZmLWNvcmVbXQorCVRoaXMgaXMgdGhlIGRlZmF1bHQuCitlbmRpZjo6Z2l0LWRpZmYtY29yZVtdCitlbmRpZjo6Z2l0LWxvZ1tdCitpZmRlZjo6Z2l0LWxvZ1tdCisJRm9yIGVhY2ggY29tbWl0LCBzaG93IGEgc3VtbWFyeSBvZiBjaGFuZ2VzIHVzaW5nIHRoZSByYXcgZGlmZgorCWZvcm1hdC4gU2VlIHRoZSAiUkFXIE9VVFBVVCBGT1JNQVQiIHNlY3Rpb24gb2YKKwlsaW5rZ2l0OmdpdC1kaWZmWzFdLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHNob3dpbmcgdGhlIGxvZworCWl0c2VsZiBpbiByYXcgZm9ybWF0LCB3aGljaCB5b3UgY2FuIGFjaGlldmUgd2l0aAorCWAtLWZvcm1hdD1yYXdgLgorZW5kaWY6OmdpdC1sb2dbXQorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLS1wYXRjaC13aXRoLXJhdzo6CisJU3lub255bSBmb3IgYC1wIC0tcmF3YC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworLS1taW5pbWFsOjoKKwlTcGVuZCBleHRyYSB0aW1lIHRvIG1ha2Ugc3VyZSB0aGUgc21hbGxlc3QgcG9zc2libGUKKwlkaWZmIGlzIHByb2R1Y2VkLgorCistLXBhdGllbmNlOjoKKwlHZW5lcmF0ZSBhIGRpZmYgdXNpbmcgdGhlICJwYXRpZW5jZSBkaWZmIiBhbGdvcml0aG0uCisKKy0taGlzdG9ncmFtOjoKKwlHZW5lcmF0ZSBhIGRpZmYgdXNpbmcgdGhlICJoaXN0b2dyYW0gZGlmZiIgYWxnb3JpdGhtLgorCistLWRpZmYtYWxnb3JpdGhtPXtwYXRpZW5jZXxtaW5pbWFsfGhpc3RvZ3JhbXxteWVyc306OgorCUNob29zZSBhIGRpZmYgYWxnb3JpdGhtLiBUaGUgdmFyaWFudHMgYXJlIGFzIGZvbGxvd3M6CisrCistLQorYGRlZmF1bHRgLCBgbXllcnNgOzsKKwlUaGUgYmFzaWMgZ3JlZWR5IGRpZmYgYWxnb3JpdGhtLiBDdXJyZW50bHksIHRoaXMgaXMgdGhlIGRlZmF1bHQuCitgbWluaW1hbGA7OworCVNwZW5kIGV4dHJhIHRpbWUgdG8gbWFrZSBzdXJlIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBkaWZmIGlzCisJcHJvZHVjZWQuCitgcGF0aWVuY2VgOzsKKwlVc2UgInBhdGllbmNlIGRpZmYiIGFsZ29yaXRobSB3aGVuIGdlbmVyYXRpbmcgcGF0Y2hlcy4KK2BoaXN0b2dyYW1gOzsKKwlUaGlzIGFsZ29yaXRobSBleHRlbmRzIHRoZSBwYXRpZW5jZSBhbGdvcml0aG0gdG8gInN1cHBvcnQKKwlsb3ctb2NjdXJyZW5jZSBjb21tb24gZWxlbWVudHMiLgorLS0KKysKK0ZvciBpbnN0YW5jZSwgaWYgeW91IGNvbmZpZ3VyZWQgZGlmZi5hbGdvcml0aG0gdmFyaWFibGUgdG8gYQorbm9uLWRlZmF1bHQgdmFsdWUgYW5kIHdhbnQgdG8gdXNlIHRoZSBkZWZhdWx0IG9uZSwgdGhlbiB5b3UKK2hhdmUgdG8gdXNlIGAtLWRpZmYtYWxnb3JpdGhtPWRlZmF1bHRgIG9wdGlvbi4KKworLS1zdGF0Wz08d2lkdGg+Wyw8bmFtZS13aWR0aD5bLDxjb3VudD5dXV06OgorCUdlbmVyYXRlIGEgZGlmZnN0YXQuIEJ5IGRlZmF1bHQsIGFzIG11Y2ggc3BhY2UgYXMgbmVjZXNzYXJ5CisJd2lsbCBiZSB1c2VkIGZvciB0aGUgZmlsZW5hbWUgcGFydCwgYW5kIHRoZSByZXN0IGZvciB0aGUgZ3JhcGgKKwlwYXJ0LiBNYXhpbXVtIHdpZHRoIGRlZmF1bHRzIHRvIHRlcm1pbmFsIHdpZHRoLCBvciA4MCBjb2x1bW5zCisJaWYgbm90IGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLCBhbmQgY2FuIGJlIG92ZXJyaWRkZW4gYnkKKwlgPHdpZHRoPmAuIFRoZSB3aWR0aCBvZiB0aGUgZmlsZW5hbWUgcGFydCBjYW4gYmUgbGltaXRlZCBieQorCWdpdmluZyBhbm90aGVyIHdpZHRoIGA8bmFtZS13aWR0aD5gIGFmdGVyIGEgY29tbWEuIFRoZSB3aWR0aAorCW9mIHRoZSBncmFwaCBwYXJ0IGNhbiBiZSBsaW1pdGVkIGJ5IHVzaW5nCisJYC0tc3RhdC1ncmFwaC13aWR0aD08d2lkdGg+YCAoYWZmZWN0cyBhbGwgY29tbWFuZHMgZ2VuZXJhdGluZworCWEgc3RhdCBncmFwaCkgb3IgYnkgc2V0dGluZyBgZGlmZi5zdGF0R3JhcGhXaWR0aD08d2lkdGg+YAorCShkb2VzIG5vdCBhZmZlY3QgYGdpdCBmb3JtYXQtcGF0Y2hgKS4KKwlCeSBnaXZpbmcgYSB0aGlyZCBwYXJhbWV0ZXIgYDxjb3VudD5gLCB5b3UgY2FuIGxpbWl0IHRoZQorCW91dHB1dCB0byB0aGUgZmlyc3QgYDxjb3VudD5gIGxpbmVzLCBmb2xsb3dlZCBieSBgLi4uYCBpZgorCXRoZXJlIGFyZSBtb3JlLgorKworVGhlc2UgcGFyYW1ldGVycyBjYW4gYWxzbyBiZSBzZXQgaW5kaXZpZHVhbGx5IHdpdGggYC0tc3RhdC13aWR0aD08d2lkdGg+YCwKK2AtLXN0YXQtbmFtZS13aWR0aD08bmFtZS13aWR0aD5gIGFuZCBgLS1zdGF0LWNvdW50PTxjb3VudD5gLgorCistLW51bXN0YXQ6OgorCVNpbWlsYXIgdG8gYC0tc3RhdGAsIGJ1dCBzaG93cyBudW1iZXIgb2YgYWRkZWQgYW5kCisJZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIGFuZCBwYXRobmFtZSB3aXRob3V0CisJYWJicmV2aWF0aW9uLCB0byBtYWtlIGl0IG1vcmUgbWFjaGluZSBmcmllbmRseS4gIEZvcgorCWJpbmFyeSBmaWxlcywgb3V0cHV0cyB0d28gYC1gIGluc3RlYWQgb2Ygc2F5aW5nCisJYDAgMGAuCisKKy0tc2hvcnRzdGF0OjoKKwlPdXRwdXQgb25seSB0aGUgbGFzdCBsaW5lIG9mIHRoZSBgLS1zdGF0YCBmb3JtYXQgY29udGFpbmluZyB0b3RhbAorCW51bWJlciBvZiBtb2RpZmllZCBmaWxlcywgYXMgd2VsbCBhcyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQKKwlsaW5lcy4KKworLS1kaXJzdGF0Wz08cGFyYW0xLHBhcmFtMiwuLi4+XTo6CisJT3V0cHV0IHRoZSBkaXN0cmlidXRpb24gb2YgcmVsYXRpdmUgYW1vdW50IG9mIGNoYW5nZXMgZm9yIGVhY2gKKwlzdWItZGlyZWN0b3J5LiBUaGUgYmVoYXZpb3Igb2YgYC0tZGlyc3RhdGAgY2FuIGJlIGN1c3RvbWl6ZWQgYnkKKwlwYXNzaW5nIGl0IGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgcGFyYW1ldGVycy4KKwlUaGUgZGVmYXVsdHMgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIGBkaWZmLmRpcnN0YXRgIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZSAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisJVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBhdmFpbGFibGU6CisrCistLQorYGNoYW5nZXNgOzsKKwlDb21wdXRlIHRoZSBkaXJzdGF0IG51bWJlcnMgYnkgY291bnRpbmcgdGhlIGxpbmVzIHRoYXQgaGF2ZSBiZWVuCisJcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UsIG9yIGFkZGVkIHRvIHRoZSBkZXN0aW5hdGlvbi4gVGhpcyBpZ25vcmVzCisJdGhlIGFtb3VudCBvZiBwdXJlIGNvZGUgbW92ZW1lbnRzIHdpdGhpbiBhIGZpbGUuICBJbiBvdGhlciB3b3JkcywKKwlyZWFycmFuZ2luZyBsaW5lcyBpbiBhIGZpbGUgaXMgbm90IGNvdW50ZWQgYXMgbXVjaCBhcyBvdGhlciBjaGFuZ2VzLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiBubyBwYXJhbWV0ZXIgaXMgZ2l2ZW4uCitgbGluZXNgOzsKKwlDb21wdXRlIHRoZSBkaXJzdGF0IG51bWJlcnMgYnkgZG9pbmcgdGhlIHJlZ3VsYXIgbGluZS1iYXNlZCBkaWZmCisJYW5hbHlzaXMsIGFuZCBzdW1taW5nIHRoZSByZW1vdmVkL2FkZGVkIGxpbmUgY291bnRzLiAoRm9yIGJpbmFyeQorCWZpbGVzLCBjb3VudCA2NC1ieXRlIGNodW5rcyBpbnN0ZWFkLCBzaW5jZSBiaW5hcnkgZmlsZXMgaGF2ZSBubworCW5hdHVyYWwgY29uY2VwdCBvZiBsaW5lcykuIFRoaXMgaXMgYSBtb3JlIGV4cGVuc2l2ZSBgLS1kaXJzdGF0YAorCWJlaGF2aW9yIHRoYW4gdGhlIGBjaGFuZ2VzYCBiZWhhdmlvciwgYnV0IGl0IGRvZXMgY291bnQgcmVhcnJhbmdlZAorCWxpbmVzIHdpdGhpbiBhIGZpbGUgYXMgbXVjaCBhcyBvdGhlciBjaGFuZ2VzLiBUaGUgcmVzdWx0aW5nIG91dHB1dAorCWlzIGNvbnNpc3RlbnQgd2l0aCB3aGF0IHlvdSBnZXQgZnJvbSB0aGUgb3RoZXIgYC0tKnN0YXRgIG9wdGlvbnMuCitgZmlsZXNgOzsKKwlDb21wdXRlIHRoZSBkaXJzdGF0IG51bWJlcnMgYnkgY291bnRpbmcgdGhlIG51bWJlciBvZiBmaWxlcyBjaGFuZ2VkLgorCUVhY2ggY2hhbmdlZCBmaWxlIGNvdW50cyBlcXVhbGx5IGluIHRoZSBkaXJzdGF0IGFuYWx5c2lzLiBUaGlzIGlzCisJdGhlIGNvbXB1dGF0aW9uYWxseSBjaGVhcGVzdCBgLS1kaXJzdGF0YCBiZWhhdmlvciwgc2luY2UgaXQgZG9lcworCW5vdCBoYXZlIHRvIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudHMgYXQgYWxsLgorYGN1bXVsYXRpdmVgOzsKKwlDb3VudCBjaGFuZ2VzIGluIGEgY2hpbGQgZGlyZWN0b3J5IGZvciB0aGUgcGFyZW50IGRpcmVjdG9yeSBhcyB3ZWxsLgorCU5vdGUgdGhhdCB3aGVuIHVzaW5nIGBjdW11bGF0aXZlYCwgdGhlIHN1bSBvZiB0aGUgcGVyY2VudGFnZXMKKwlyZXBvcnRlZCBtYXkgZXhjZWVkIDEwMCUuIFRoZSBkZWZhdWx0IChub24tY3VtdWxhdGl2ZSkgYmVoYXZpb3IgY2FuCisJYmUgc3BlY2lmaWVkIHdpdGggdGhlIGBub25jdW11bGF0aXZlYCBwYXJhbWV0ZXIuCis8bGltaXQ+OzsKKwlBbiBpbnRlZ2VyIHBhcmFtZXRlciBzcGVjaWZpZXMgYSBjdXQtb2ZmIHBlcmNlbnQgKDMlIGJ5IGRlZmF1bHQpLgorCURpcmVjdG9yaWVzIGNvbnRyaWJ1dGluZyBsZXNzIHRoYW4gdGhpcyBwZXJjZW50YWdlIG9mIHRoZSBjaGFuZ2VzCisJYXJlIG5vdCBzaG93biBpbiB0aGUgb3V0cHV0LgorLS0KKysKK0V4YW1wbGU6IFRoZSBmb2xsb3dpbmcgd2lsbCBjb3VudCBjaGFuZ2VkIGZpbGVzLCB3aGlsZSBpZ25vcmluZworZGlyZWN0b3JpZXMgd2l0aCBsZXNzIHRoYW4gMTAlIG9mIHRoZSB0b3RhbCBhbW91bnQgb2YgY2hhbmdlZCBmaWxlcywKK2FuZCBhY2N1bXVsYXRpbmcgY2hpbGQgZGlyZWN0b3J5IGNvdW50cyBpbiB0aGUgcGFyZW50IGRpcmVjdG9yaWVzOgorYC0tZGlyc3RhdD1maWxlcywxMCxjdW11bGF0aXZlYC4KKworLS1zdW1tYXJ5OjoKKwlPdXRwdXQgYSBjb25kZW5zZWQgc3VtbWFyeSBvZiBleHRlbmRlZCBoZWFkZXIgaW5mb3JtYXRpb24KKwlzdWNoIGFzIGNyZWF0aW9ucywgcmVuYW1lcyBhbmQgbW9kZSBjaGFuZ2VzLgorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLS1wYXRjaC13aXRoLXN0YXQ6OgorCVN5bm9ueW0gZm9yIGAtcCAtLXN0YXRgLgorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistejo6CitpZmRlZjo6Z2l0LWxvZ1tdCisJU2VwYXJhdGUgdGhlIGNvbW1pdHMgd2l0aCBOVUxzIGluc3RlYWQgb2Ygd2l0aCBuZXcgbmV3bGluZXMuCisrCitBbHNvLCB3aGVuIGAtLXJhd2Agb3IgYC0tbnVtc3RhdGAgaGFzIGJlZW4gZ2l2ZW4sIGRvIG5vdCBtdW5nZQorcGF0aG5hbWVzIGFuZCB1c2UgTlVMcyBhcyBvdXRwdXQgZmllbGQgdGVybWluYXRvcnMuCitlbmRpZjo6Z2l0LWxvZ1tdCitpZm5kZWY6OmdpdC1sb2dbXQorCVdoZW4gYC0tcmF3YCwgYC0tbnVtc3RhdGAsIGAtLW5hbWUtb25seWAgb3IgYC0tbmFtZS1zdGF0dXNgIGhhcyBiZWVuCisJZ2l2ZW4sIGRvIG5vdCBtdW5nZSBwYXRobmFtZXMgYW5kIHVzZSBOVUxzIGFzIG91dHB1dCBmaWVsZCB0ZXJtaW5hdG9ycy4KK2VuZGlmOjpnaXQtbG9nW10KKysKK1dpdGhvdXQgdGhpcyBvcHRpb24sIGVhY2ggcGF0aG5hbWUgb3V0cHV0IHdpbGwgaGF2ZSBUQUIsIExGLCBkb3VibGUgcXVvdGVzLAorYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzIHJlcGxhY2VkIHdpdGggYFx0YCwgYFxuYCwgYFwiYCwgYW5kIGBcXGAsCityZXNwZWN0aXZlbHksIGFuZCB0aGUgcGF0aG5hbWUgd2lsbCBiZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIGlmCithbnkgb2YgdGhvc2UgcmVwbGFjZW1lbnRzIG9jY3VycmVkLgorCistLW5hbWUtb25seTo6CisJU2hvdyBvbmx5IG5hbWVzIG9mIGNoYW5nZWQgZmlsZXMuCisKKy0tbmFtZS1zdGF0dXM6OgorCVNob3cgb25seSBuYW1lcyBhbmQgc3RhdHVzIG9mIGNoYW5nZWQgZmlsZXMuIFNlZSB0aGUgZGVzY3JpcHRpb24KKwlvZiB0aGUgYC0tZGlmZi1maWx0ZXJgIG9wdGlvbiBvbiB3aGF0IHRoZSBzdGF0dXMgbGV0dGVycyBtZWFuLgorCistLXN1Ym1vZHVsZVs9PGZvcm1hdD5dOjoKKwlTcGVjaWZ5IGhvdyBkaWZmZXJlbmNlcyBpbiBzdWJtb2R1bGVzIGFyZSBzaG93bi4gIFdoZW4gYC0tc3VibW9kdWxlYAorCW9yIGAtLXN1Ym1vZHVsZT1sb2dgIGlzIGdpdmVuLCB0aGUgJ2xvZycgZm9ybWF0IGlzIHVzZWQuICBUaGlzIGZvcm1hdCBsaXN0cworCXRoZSBjb21taXRzIGluIHRoZSByYW5nZSBsaWtlIGxpbmtnaXQ6Z2l0LXN1Ym1vZHVsZVsxXSBgc3VtbWFyeWAgZG9lcy4KKwlPbWl0dGluZyB0aGUgYC0tc3VibW9kdWxlYCBvcHRpb24gb3Igc3BlY2lmeWluZyBgLS1zdWJtb2R1bGU9c2hvcnRgLAorCXVzZXMgdGhlICdzaG9ydCcgZm9ybWF0LiBUaGlzIGZvcm1hdCBqdXN0IHNob3dzIHRoZSBuYW1lcyBvZiB0aGUgY29tbWl0cworCWF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgcmFuZ2UuICBDYW4gYmUgdHdlYWtlZCB2aWEgdGhlCisJYGRpZmYuc3VibW9kdWxlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCistLWNvbG9yWz08d2hlbj5dOjoKKwlTaG93IGNvbG9yZWQgZGlmZi4KKwlgLS1jb2xvcmAgKGkuZS4gd2l0aG91dCAnPTx3aGVuPicpIGlzIHRoZSBzYW1lIGFzIGAtLWNvbG9yPWFsd2F5c2AuCisJJzx3aGVuPicgY2FuIGJlIG9uZSBvZiBgYWx3YXlzYCwgYG5ldmVyYCwgb3IgYGF1dG9gLgoraWZkZWY6OmdpdC1kaWZmW10KKwlJdCBjYW4gYmUgY2hhbmdlZCBieSB0aGUgYGNvbG9yLnVpYCBhbmQgYGNvbG9yLmRpZmZgCisJY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KK2VuZGlmOjpnaXQtZGlmZltdCisKKy0tbm8tY29sb3I6OgorCVR1cm4gb2ZmIGNvbG9yZWQgZGlmZi4KK2lmZGVmOjpnaXQtZGlmZltdCisJVGhpcyBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorZW5kaWY6OmdpdC1kaWZmW10KKwlJdCBpcyB0aGUgc2FtZSBhcyBgLS1jb2xvcj1uZXZlcmAuCisKKy0td29yZC1kaWZmWz08bW9kZT5dOjoKKwlTaG93IGEgd29yZCBkaWZmLCB1c2luZyB0aGUgPG1vZGU+IHRvIGRlbGltaXQgY2hhbmdlZCB3b3Jkcy4KKwlCeSBkZWZhdWx0LCB3b3JkcyBhcmUgZGVsaW1pdGVkIGJ5IHdoaXRlc3BhY2U7IHNlZQorCWAtLXdvcmQtZGlmZi1yZWdleGAgYmVsb3cuICBUaGUgPG1vZGU+IGRlZmF1bHRzIHRvICdwbGFpbicsIGFuZAorCW11c3QgYmUgb25lIG9mOgorKworLS0KK2NvbG9yOjoKKwlIaWdobGlnaHQgY2hhbmdlZCB3b3JkcyB1c2luZyBvbmx5IGNvbG9ycy4gIEltcGxpZXMgYC0tY29sb3JgLgorcGxhaW46OgorCVNob3cgd29yZHMgYXMgYFstcmVtb3ZlZC1dYCBhbmQgYHsrYWRkZWQrfWAuICBNYWtlcyBubworCWF0dGVtcHRzIHRvIGVzY2FwZSB0aGUgZGVsaW1pdGVycyBpZiB0aGV5IGFwcGVhciBpbiB0aGUgaW5wdXQsCisJc28gdGhlIG91dHB1dCBtYXkgYmUgYW1iaWd1b3VzLgorcG9yY2VsYWluOjoKKwlVc2UgYSBzcGVjaWFsIGxpbmUtYmFzZWQgZm9ybWF0IGludGVuZGVkIGZvciBzY3JpcHQKKwljb25zdW1wdGlvbi4gIEFkZGVkL3JlbW92ZWQvdW5jaGFuZ2VkIHJ1bnMgYXJlIHByaW50ZWQgaW4gdGhlCisJdXN1YWwgdW5pZmllZCBkaWZmIGZvcm1hdCwgc3RhcnRpbmcgd2l0aCBhIGArYC9gLWAvYCBgCisJY2hhcmFjdGVyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgYW5kIGV4dGVuZGluZyB0byB0aGUKKwllbmQgb2YgdGhlIGxpbmUuICBOZXdsaW5lcyBpbiB0aGUgaW5wdXQgYXJlIHJlcHJlc2VudGVkIGJ5IGEKKwl0aWxkZSBgfmAgb24gYSBsaW5lIG9mIGl0cyBvd24uCitub25lOjoKKwlEaXNhYmxlIHdvcmQgZGlmZiBhZ2Fpbi4KKy0tCisrCitOb3RlIHRoYXQgZGVzcGl0ZSB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgbW9kZSwgY29sb3IgaXMgdXNlZCB0bworaGlnaGxpZ2h0IHRoZSBjaGFuZ2VkIHBhcnRzIGluIGFsbCBtb2RlcyBpZiBlbmFibGVkLgorCistLXdvcmQtZGlmZi1yZWdleD08cmVnZXg+OjoKKwlVc2UgPHJlZ2V4PiB0byBkZWNpZGUgd2hhdCBhIHdvcmQgaXMsIGluc3RlYWQgb2YgY29uc2lkZXJpbmcKKwlydW5zIG9mIG5vbi13aGl0ZXNwYWNlIHRvIGJlIGEgd29yZC4gIEFsc28gaW1wbGllcworCWAtLXdvcmQtZGlmZmAgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IGVuYWJsZWQuCisrCitFdmVyeSBub24tb3ZlcmxhcHBpbmcgbWF0Y2ggb2YgdGhlCis8cmVnZXg+IGlzIGNvbnNpZGVyZWQgYSB3b3JkLiAgQW55dGhpbmcgYmV0d2VlbiB0aGVzZSBtYXRjaGVzIGlzCitjb25zaWRlcmVkIHdoaXRlc3BhY2UgYW5kIGlnbm9yZWQoISkgZm9yIHRoZSBwdXJwb3NlcyBvZiBmaW5kaW5nCitkaWZmZXJlbmNlcy4gIFlvdSBtYXkgd2FudCB0byBhcHBlbmQgYHxbXls6c3BhY2U6XV1gIHRvIHlvdXIgcmVndWxhcgorZXhwcmVzc2lvbiB0byBtYWtlIHN1cmUgdGhhdCBpdCBtYXRjaGVzIGFsbCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgorQSBtYXRjaCB0aGF0IGNvbnRhaW5zIGEgbmV3bGluZSBpcyBzaWxlbnRseSB0cnVuY2F0ZWQoISkgYXQgdGhlCituZXdsaW5lLgorKworVGhlIHJlZ2V4IGNhbiBhbHNvIGJlIHNldCB2aWEgYSBkaWZmIGRyaXZlciBvciBjb25maWd1cmF0aW9uIG9wdGlvbiwgc2VlCitsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbMV0gb3IgbGlua2dpdDpnaXQtY29uZmlnWzFdLiAgR2l2aW5nIGl0IGV4cGxpY2l0bHkKK292ZXJyaWRlcyBhbnkgZGlmZiBkcml2ZXIgb3IgY29uZmlndXJhdGlvbiBzZXR0aW5nLiAgRGlmZiBkcml2ZXJzCitvdmVycmlkZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLgorCistLWNvbG9yLXdvcmRzWz08cmVnZXg+XTo6CisJRXF1aXZhbGVudCB0byBgLS13b3JkLWRpZmY9Y29sb3JgIHBsdXMgKGlmIGEgcmVnZXggd2FzCisJc3BlY2lmaWVkKSBgLS13b3JkLWRpZmYtcmVnZXg9PHJlZ2V4PmAuCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKKy0tbm8tcmVuYW1lczo6CisJVHVybiBvZmYgcmVuYW1lIGRldGVjdGlvbiwgZXZlbiB3aGVuIHRoZSBjb25maWd1cmF0aW9uCisJZmlsZSBnaXZlcyB0aGUgZGVmYXVsdCB0byBkbyBzby4KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KKy0tY2hlY2s6OgorCVdhcm4gaWYgY2hhbmdlcyBpbnRyb2R1Y2Ugd2hpdGVzcGFjZSBlcnJvcnMuICBXaGF0IGFyZQorCWNvbnNpZGVyZWQgd2hpdGVzcGFjZSBlcnJvcnMgaXMgY29udHJvbGxlZCBieSBgY29yZS53aGl0ZXNwYWNlYAorCWNvbmZpZ3VyYXRpb24uICBCeSBkZWZhdWx0LCB0cmFpbGluZyB3aGl0ZXNwYWNlcyAoaW5jbHVkaW5nCisJbGluZXMgdGhhdCBzb2xlbHkgY29uc2lzdCBvZiB3aGl0ZXNwYWNlcykgYW5kIGEgc3BhY2UgY2hhcmFjdGVyCisJdGhhdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRhYiBjaGFyYWN0ZXIgaW5zaWRlIHRoZQorCWluaXRpYWwgaW5kZW50IG9mIHRoZSBsaW5lIGFyZSBjb25zaWRlcmVkIHdoaXRlc3BhY2UgZXJyb3JzLgorCUV4aXRzIHdpdGggbm9uLXplcm8gc3RhdHVzIGlmIHByb2JsZW1zIGFyZSBmb3VuZC4gTm90IGNvbXBhdGlibGUKKwl3aXRoIC0tZXhpdC1jb2RlLgorCistLXdzLWVycm9yLWhpZ2hsaWdodD08a2luZD46OgorCUhpZ2hsaWdodCB3aGl0ZXNwYWNlIGVycm9ycyBvbiBsaW5lcyBzcGVjaWZpZWQgYnkgPGtpbmQ+CisJaW4gdGhlIGNvbG9yIHNwZWNpZmllZCBieSBgY29sb3IuZGlmZi53aGl0ZXNwYWNlYC4gIDxraW5kPgorCWlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgYG9sZGAsIGBuZXdgLCBgY29udGV4dGAuICBXaGVuCisJdGhpcyBvcHRpb24gaXMgbm90IGdpdmVuLCBvbmx5IHdoaXRlc3BhY2UgZXJyb3JzIGluIGBuZXdgCisJbGluZXMgYXJlIGhpZ2hsaWdodGVkLiAgRS5nLiBgLS13cy1lcnJvci1oaWdobGlnaHQ9bmV3LG9sZGAKKwloaWdobGlnaHRzIHdoaXRlc3BhY2UgZXJyb3JzIG9uIGJvdGggZGVsZXRlZCBhbmQgYWRkZWQgbGluZXMuCisJYGFsbGAgY2FuIGJlIHVzZWQgYXMgYSBzaG9ydC1oYW5kIGZvciBgb2xkLG5ldyxjb250ZXh0YC4KKworZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistLWZ1bGwtaW5kZXg6OgorCUluc3RlYWQgb2YgdGhlIGZpcnN0IGhhbmRmdWwgb2YgY2hhcmFjdGVycywgc2hvdyB0aGUgZnVsbAorCXByZS0gYW5kIHBvc3QtaW1hZ2UgYmxvYiBvYmplY3QgbmFtZXMgb24gdGhlICJpbmRleCIKKwlsaW5lIHdoZW4gZ2VuZXJhdGluZyBwYXRjaCBmb3JtYXQgb3V0cHV0LgorCistLWJpbmFyeTo6CisJSW4gYWRkaXRpb24gdG8gYC0tZnVsbC1pbmRleGAsIG91dHB1dCBhIGJpbmFyeSBkaWZmIHRoYXQKKwljYW4gYmUgYXBwbGllZCB3aXRoIGBnaXQtYXBwbHlgLgorCistLWFiYnJldls9PG4+XTo6CisJSW5zdGVhZCBvZiBzaG93aW5nIHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgb2JqZWN0CisJbmFtZSBpbiBkaWZmLXJhdyBmb3JtYXQgb3V0cHV0IGFuZCBkaWZmLXRyZWUgaGVhZGVyCisJbGluZXMsIHNob3cgb25seSBhIHBhcnRpYWwgcHJlZml4LiAgVGhpcyBpcworCWluZGVwZW5kZW50IG9mIHRoZSBgLS1mdWxsLWluZGV4YCBvcHRpb24gYWJvdmUsIHdoaWNoIGNvbnRyb2xzCisJdGhlIGRpZmYtcGF0Y2ggb3V0cHV0IGZvcm1hdC4gIE5vbiBkZWZhdWx0IG51bWJlciBvZgorCWRpZ2l0cyBjYW4gYmUgc3BlY2lmaWVkIHdpdGggYC0tYWJicmV2PTxuPmAuCisKKy1CWzxuPl1bLzxtPl06OgorLS1icmVhay1yZXdyaXRlc1s9WzxuPl1bLzxtPl1dOjoKKwlCcmVhayBjb21wbGV0ZSByZXdyaXRlIGNoYW5nZXMgaW50byBwYWlycyBvZiBkZWxldGUgYW5kCisJY3JlYXRlLiBUaGlzIHNlcnZlcyB0d28gcHVycG9zZXM6CisrCitJdCBhZmZlY3RzIHRoZSB3YXkgYSBjaGFuZ2UgdGhhdCBhbW91bnRzIHRvIGEgdG90YWwgcmV3cml0ZSBvZiBhIGZpbGUKK25vdCBhcyBhIHNlcmllcyBvZiBkZWxldGlvbiBhbmQgaW5zZXJ0aW9uIG1peGVkIHRvZ2V0aGVyIHdpdGggYSB2ZXJ5CitmZXcgbGluZXMgdGhhdCBoYXBwZW4gdG8gbWF0Y2ggdGV4dHVhbGx5IGFzIHRoZSBjb250ZXh0LCBidXQgYXMgYQorc2luZ2xlIGRlbGV0aW9uIG9mIGV2ZXJ5dGhpbmcgb2xkIGZvbGxvd2VkIGJ5IGEgc2luZ2xlIGluc2VydGlvbiBvZgorZXZlcnl0aGluZyBuZXcsIGFuZCB0aGUgbnVtYmVyIGBtYCBjb250cm9scyB0aGlzIGFzcGVjdCBvZiB0aGUgLUIKK29wdGlvbiAoZGVmYXVsdHMgdG8gNjAlKS4gYC1CLzcwJWAgc3BlY2lmaWVzIHRoYXQgbGVzcyB0aGFuIDMwJSBvZiB0aGUKK29yaWdpbmFsIHNob3VsZCByZW1haW4gaW4gdGhlIHJlc3VsdCBmb3IgR2l0IHRvIGNvbnNpZGVyIGl0IGEgdG90YWwKK3Jld3JpdGUgKGkuZS4gb3RoZXJ3aXNlIHRoZSByZXN1bHRpbmcgcGF0Y2ggd2lsbCBiZSBhIHNlcmllcyBvZgorZGVsZXRpb24gYW5kIGluc2VydGlvbiBtaXhlZCB0b2dldGhlciB3aXRoIGNvbnRleHQgbGluZXMpLgorKworV2hlbiB1c2VkIHdpdGggLU0sIGEgdG90YWxseS1yZXdyaXR0ZW4gZmlsZSBpcyBhbHNvIGNvbnNpZGVyZWQgYXMgdGhlCitzb3VyY2Ugb2YgYSByZW5hbWUgKHVzdWFsbHkgLU0gb25seSBjb25zaWRlcnMgYSBmaWxlIHRoYXQgZGlzYXBwZWFyZWQKK2FzIHRoZSBzb3VyY2Ugb2YgYSByZW5hbWUpLCBhbmQgdGhlIG51bWJlciBgbmAgY29udHJvbHMgdGhpcyBhc3BlY3Qgb2YKK3RoZSAtQiBvcHRpb24gKGRlZmF1bHRzIHRvIDUwJSkuIGAtQjIwJWAgc3BlY2lmaWVzIHRoYXQgYSBjaGFuZ2Ugd2l0aAorYWRkaXRpb24gYW5kIGRlbGV0aW9uIGNvbXBhcmVkIHRvIDIwJSBvciBtb3JlIG9mIHRoZSBmaWxlJ3Mgc2l6ZSBhcmUKK2VsaWdpYmxlIGZvciBiZWluZyBwaWNrZWQgdXAgYXMgYSBwb3NzaWJsZSBzb3VyY2Ugb2YgYSByZW5hbWUgdG8KK2Fub3RoZXIgZmlsZS4KKworLU1bPG4+XTo6CistLWZpbmQtcmVuYW1lc1s9PG4+XTo6CitpZm5kZWY6OmdpdC1sb2dbXQorCURldGVjdCByZW5hbWVzLgorZW5kaWY6OmdpdC1sb2dbXQoraWZkZWY6OmdpdC1sb2dbXQorCUlmIGdlbmVyYXRpbmcgZGlmZnMsIGRldGVjdCBhbmQgcmVwb3J0IHJlbmFtZXMgZm9yIGVhY2ggY29tbWl0LgorCUZvciBmb2xsb3dpbmcgZmlsZXMgYWNyb3NzIHJlbmFtZXMgd2hpbGUgdHJhdmVyc2luZyBoaXN0b3J5LCBzZWUKKwlgLS1mb2xsb3dgLgorZW5kaWY6OmdpdC1sb2dbXQorCUlmIGBuYCBpcyBzcGVjaWZpZWQsIGl0IGlzIGEgdGhyZXNob2xkIG9uIHRoZSBzaW1pbGFyaXR5CisJaW5kZXggKGkuZS4gYW1vdW50IG9mIGFkZGl0aW9uL2RlbGV0aW9ucyBjb21wYXJlZCB0byB0aGUKKwlmaWxlJ3Mgc2l6ZSkuIEZvciBleGFtcGxlLCBgLU05MCVgIG1lYW5zIEdpdCBzaG91bGQgY29uc2lkZXIgYQorCWRlbGV0ZS9hZGQgcGFpciB0byBiZSBhIHJlbmFtZSBpZiBtb3JlIHRoYW4gOTAlIG9mIHRoZSBmaWxlCisJaGFzbid0IGNoYW5nZWQuICBXaXRob3V0IGEgYCVgIHNpZ24sIHRoZSBudW1iZXIgaXMgdG8gYmUgcmVhZCBhcworCWEgZnJhY3Rpb24sIHdpdGggYSBkZWNpbWFsIHBvaW50IGJlZm9yZSBpdC4gIEkuZS4sIGAtTTVgIGJlY29tZXMKKwkwLjUsIGFuZCBpcyB0aHVzIHRoZSBzYW1lIGFzIGAtTTUwJWAuICBTaW1pbGFybHksIGAtTTA1YCBpcworCXRoZSBzYW1lIGFzIGAtTTUlYC4gIFRvIGxpbWl0IGRldGVjdGlvbiB0byBleGFjdCByZW5hbWVzLCB1c2UKKwlgLU0xMDAlYC4gIFRoZSBkZWZhdWx0IHNpbWlsYXJpdHkgaW5kZXggaXMgNTAlLgorCistQ1s8bj5dOjoKKy0tZmluZC1jb3BpZXNbPTxuPl06OgorCURldGVjdCBjb3BpZXMgYXMgd2VsbCBhcyByZW5hbWVzLiAgU2VlIGFsc28gYC0tZmluZC1jb3BpZXMtaGFyZGVyYC4KKwlJZiBgbmAgaXMgc3BlY2lmaWVkLCBpdCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgYC1NPG4+YC4KKworLS1maW5kLWNvcGllcy1oYXJkZXI6OgorCUZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBieSBkZWZhdWx0LCBgLUNgIG9wdGlvbiBmaW5kcyBjb3BpZXMgb25seQorCWlmIHRoZSBvcmlnaW5hbCBmaWxlIG9mIHRoZSBjb3B5IHdhcyBtb2RpZmllZCBpbiB0aGUgc2FtZQorCWNoYW5nZXNldC4gIFRoaXMgZmxhZyBtYWtlcyB0aGUgY29tbWFuZAorCWluc3BlY3QgdW5tb2RpZmllZCBmaWxlcyBhcyBjYW5kaWRhdGVzIGZvciB0aGUgc291cmNlIG9mCisJY29weS4gIFRoaXMgaXMgYSB2ZXJ5IGV4cGVuc2l2ZSBvcGVyYXRpb24gZm9yIGxhcmdlCisJcHJvamVjdHMsIHNvIHVzZSBpdCB3aXRoIGNhdXRpb24uICBHaXZpbmcgbW9yZSB0aGFuIG9uZQorCWAtQ2Agb3B0aW9uIGhhcyB0aGUgc2FtZSBlZmZlY3QuCisKKy1EOjoKKy0taXJyZXZlcnNpYmxlLWRlbGV0ZTo6CisJT21pdCB0aGUgcHJlaW1hZ2UgZm9yIGRlbGV0ZXMsIGkuZS4gcHJpbnQgb25seSB0aGUgaGVhZGVyIGJ1dCBub3QKKwl0aGUgZGlmZiBiZXR3ZWVuIHRoZSBwcmVpbWFnZSBhbmQgYC9kZXYvbnVsbGAuIFRoZSByZXN1bHRpbmcgcGF0Y2gKKwlpcyBub3QgbWVhbnQgdG8gYmUgYXBwbGllZCB3aXRoIGBwYXRjaGAgb3IgYGdpdCBhcHBseWA7IHRoaXMgaXMKKwlzb2xlbHkgZm9yIHBlb3BsZSB3aG8gd2FudCB0byBqdXN0IGNvbmNlbnRyYXRlIG9uIHJldmlld2luZyB0aGUKKwl0ZXh0IGFmdGVyIHRoZSBjaGFuZ2UuIEluIGFkZGl0aW9uLCB0aGUgb3V0cHV0IG9idmlvdXNseSBsYWNrCisJZW5vdWdoIGluZm9ybWF0aW9uIHRvIGFwcGx5IHN1Y2ggYSBwYXRjaCBpbiByZXZlcnNlLCBldmVuIG1hbnVhbGx5LAorCWhlbmNlIHRoZSBuYW1lIG9mIHRoZSBvcHRpb24uCisrCitXaGVuIHVzZWQgdG9nZXRoZXIgd2l0aCBgLUJgLCBvbWl0IGFsc28gdGhlIHByZWltYWdlIGluIHRoZSBkZWxldGlvbiBwYXJ0CitvZiBhIGRlbGV0ZS9jcmVhdGUgcGFpci4KKworLWw8bnVtPjo6CisJVGhlIGAtTWAgYW5kIGAtQ2Agb3B0aW9ucyByZXF1aXJlIE8obl4yKSBwcm9jZXNzaW5nIHRpbWUgd2hlcmUgbgorCWlzIHRoZSBudW1iZXIgb2YgcG90ZW50aWFsIHJlbmFtZS9jb3B5IHRhcmdldHMuICBUaGlzCisJb3B0aW9uIHByZXZlbnRzIHJlbmFtZS9jb3B5IGRldGVjdGlvbiBmcm9tIHJ1bm5pbmcgaWYKKwl0aGUgbnVtYmVyIG9mIHJlbmFtZS9jb3B5IHRhcmdldHMgZXhjZWVkcyB0aGUgc3BlY2lmaWVkCisJbnVtYmVyLgorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLS1kaWZmLWZpbHRlcj1bKEF8Q3xEfE18UnxUfFV8WHxCKS4uLlsqXV06OgorCVNlbGVjdCBvbmx5IGZpbGVzIHRoYXQgYXJlIEFkZGVkIChgQWApLCBDb3BpZWQgKGBDYCksCisJRGVsZXRlZCAoYERgKSwgTW9kaWZpZWQgKGBNYCksIFJlbmFtZWQgKGBSYCksIGhhdmUgdGhlaXIKKwl0eXBlIChpLmUuIHJlZ3VsYXIgZmlsZSwgc3ltbGluaywgc3VibW9kdWxlLCAuLi4pIGNoYW5nZWQgKGBUYCksCisJYXJlIFVubWVyZ2VkIChgVWApLCBhcmUKKwlVbmtub3duIChgWGApLCBvciBoYXZlIGhhZCB0aGVpciBwYWlyaW5nIEJyb2tlbiAoYEJgKS4KKwlBbnkgY29tYmluYXRpb24gb2YgdGhlIGZpbHRlciBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgbm9uZSkgY2FuIGJlIHVzZWQuCisJV2hlbiBgKmAgKEFsbC1vci1ub25lKSBpcyBhZGRlZCB0byB0aGUgY29tYmluYXRpb24sIGFsbAorCXBhdGhzIGFyZSBzZWxlY3RlZCBpZiB0aGVyZSBpcyBhbnkgZmlsZSB0aGF0IG1hdGNoZXMKKwlvdGhlciBjcml0ZXJpYSBpbiB0aGUgY29tcGFyaXNvbjsgaWYgdGhlcmUgaXMgbm8gZmlsZQorCXRoYXQgbWF0Y2hlcyBvdGhlciBjcml0ZXJpYSwgbm90aGluZyBpcyBzZWxlY3RlZC4KKworLVM8c3RyaW5nPjo6CisJTG9vayBmb3IgZGlmZmVyZW5jZXMgdGhhdCBjaGFuZ2UgdGhlIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZgorCXRoZSBzcGVjaWZpZWQgc3RyaW5nIChpLmUuIGFkZGl0aW9uL2RlbGV0aW9uKSBpbiBhIGZpbGUuCisJSW50ZW5kZWQgZm9yIHRoZSBzY3JpcHRlcidzIHVzZS4KKysKK0l0IGlzIHVzZWZ1bCB3aGVuIHlvdSdyZSBsb29raW5nIGZvciBhbiBleGFjdCBibG9jayBvZiBjb2RlIChsaWtlIGEKK3N0cnVjdCksIGFuZCB3YW50IHRvIGtub3cgdGhlIGhpc3Rvcnkgb2YgdGhhdCBibG9jayBzaW5jZSBpdCBmaXJzdAorY2FtZSBpbnRvIGJlaW5nOiB1c2UgdGhlIGZlYXR1cmUgaXRlcmF0aXZlbHkgdG8gZmVlZCB0aGUgaW50ZXJlc3RpbmcKK2Jsb2NrIGluIHRoZSBwcmVpbWFnZSBiYWNrIGludG8gYC1TYCwgYW5kIGtlZXAgZ29pbmcgdW50aWwgeW91IGdldCB0aGUKK3ZlcnkgZmlyc3QgdmVyc2lvbiBvZiB0aGUgYmxvY2suCisKKy1HPHJlZ2V4Pjo6CisJTG9vayBmb3IgZGlmZmVyZW5jZXMgd2hvc2UgcGF0Y2ggdGV4dCBjb250YWlucyBhZGRlZC9yZW1vdmVkCisJbGluZXMgdGhhdCBtYXRjaCA8cmVnZXg+LgorKworVG8gaWxsdXN0cmF0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGAtUzxyZWdleD4gLS1waWNrYXhlLXJlZ2V4YCBhbmQKK2AtRzxyZWdleD5gLCBjb25zaWRlciBhIGNvbW1pdCB3aXRoIHRoZSBmb2xsb3dpbmcgZGlmZiBpbiB0aGUgc2FtZQorZmlsZToKKysKKy0tLS0KKysgICAgcmV0dXJuICFyZWdleGVjKHJlZ2V4cCwgdHdvLT5wdHIsIDEsICZyZWdtYXRjaCwgMCk7CisuLi4KKy0gICAgaGl0ID0gIXJlZ2V4ZWMocmVnZXhwLCBtZjIucHRyLCAxLCAmcmVnbWF0Y2gsIDApOworLS0tLQorKworV2hpbGUgYGdpdCBsb2cgLUcicmVnZXhlY1wocmVnZXhwImAgd2lsbCBzaG93IHRoaXMgY29tbWl0LCBgZ2l0IGxvZworLVMicmVnZXhlY1wocmVnZXhwIiAtLXBpY2theGUtcmVnZXhgIHdpbGwgbm90IChiZWNhdXNlIHRoZSBudW1iZXIgb2YKK29jY3VycmVuY2VzIG9mIHRoYXQgc3RyaW5nIGRpZCBub3QgY2hhbmdlKS4KKysKK1NlZSB0aGUgJ3BpY2theGUnIGVudHJ5IGluIGxpbmtnaXQ6Z2l0ZGlmZmNvcmVbN10gZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorCistLXBpY2theGUtYWxsOjoKKwlXaGVuIGAtU2Agb3IgYC1HYCBmaW5kcyBhIGNoYW5nZSwgc2hvdyBhbGwgdGhlIGNoYW5nZXMgaW4gdGhhdAorCWNoYW5nZXNldCwgbm90IGp1c3QgdGhlIGZpbGVzIHRoYXQgY29udGFpbiB0aGUgY2hhbmdlCisJaW4gPHN0cmluZz4uCisKKy0tcGlja2F4ZS1yZWdleDo6CisJVHJlYXQgdGhlIDxzdHJpbmc+IGdpdmVuIHRvIGAtU2AgYXMgYW4gZXh0ZW5kZWQgUE9TSVggcmVndWxhcgorCWV4cHJlc3Npb24gdG8gbWF0Y2guCitlbmRpZjo6Z2l0LWZvcm1hdC1wYXRjaFtdCisKKy1PPG9yZGVyZmlsZT46OgorCU91dHB1dCB0aGUgcGF0Y2ggaW4gdGhlIG9yZGVyIHNwZWNpZmllZCBpbiB0aGUKKwk8b3JkZXJmaWxlPiwgd2hpY2ggaGFzIG9uZSBzaGVsbCBnbG9iIHBhdHRlcm4gcGVyIGxpbmUuCisJVGhpcyBvdmVycmlkZXMgdGhlIGBkaWZmLm9yZGVyRmlsZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCShzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4gIFRvIGNhbmNlbCBgZGlmZi5vcmRlckZpbGVgLAorCXVzZSBgLU8vZGV2L251bGxgLgorCitpZm5kZWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorLVI6OgorCVN3YXAgdHdvIGlucHV0czsgdGhhdCBpcywgc2hvdyBkaWZmZXJlbmNlcyBmcm9tIGluZGV4IG9yCisJb24tZGlzayBmaWxlIHRvIHRyZWUgY29udGVudHMuCisKKy0tcmVsYXRpdmVbPTxwYXRoPl06OgorCVdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QsIGl0IGNhbiBiZQorCXRvbGQgdG8gZXhjbHVkZSBjaGFuZ2VzIG91dHNpZGUgdGhlIGRpcmVjdG9yeSBhbmQgc2hvdworCXBhdGhuYW1lcyByZWxhdGl2ZSB0byBpdCB3aXRoIHRoaXMgb3B0aW9uLiAgV2hlbiB5b3UgYXJlCisJbm90IGluIGEgc3ViZGlyZWN0b3J5IChlLmcuIGluIGEgYmFyZSByZXBvc2l0b3J5KSwgeW91CisJY2FuIG5hbWUgd2hpY2ggc3ViZGlyZWN0b3J5IHRvIG1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZQorCXRvIGJ5IGdpdmluZyBhIDxwYXRoPiBhcyBhbiBhcmd1bWVudC4KK2VuZGlmOjpnaXQtZm9ybWF0LXBhdGNoW10KKworLWE6OgorLS10ZXh0OjoKKwlUcmVhdCBhbGwgZmlsZXMgYXMgdGV4dC4KKworLS1pZ25vcmUtc3BhY2UtYXQtZW9sOjoKKwlJZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIGF0IEVPTC4KKworLWI6OgorLS1pZ25vcmUtc3BhY2UtY2hhbmdlOjoKKwlJZ25vcmUgY2hhbmdlcyBpbiBhbW91bnQgb2Ygd2hpdGVzcGFjZS4gIFRoaXMgaWdub3JlcyB3aGl0ZXNwYWNlCisJYXQgbGluZSBlbmQsIGFuZCBjb25zaWRlcnMgYWxsIG90aGVyIHNlcXVlbmNlcyBvZiBvbmUgb3IKKwltb3JlIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB0byBiZSBlcXVpdmFsZW50LgorCistdzo6CistLWlnbm9yZS1hbGwtc3BhY2U6OgorCUlnbm9yZSB3aGl0ZXNwYWNlIHdoZW4gY29tcGFyaW5nIGxpbmVzLiAgVGhpcyBpZ25vcmVzCisJZGlmZmVyZW5jZXMgZXZlbiBpZiBvbmUgbGluZSBoYXMgd2hpdGVzcGFjZSB3aGVyZSB0aGUgb3RoZXIKKwlsaW5lIGhhcyBub25lLgorCistLWlnbm9yZS1ibGFuay1saW5lczo6CisJSWdub3JlIGNoYW5nZXMgd2hvc2UgbGluZXMgYXJlIGFsbCBibGFuay4KKworLS1pbnRlci1odW5rLWNvbnRleHQ9PGxpbmVzPjo6CisJU2hvdyB0aGUgY29udGV4dCBiZXR3ZWVuIGRpZmYgaHVua3MsIHVwIHRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyCisJb2YgbGluZXMsIHRoZXJlYnkgZnVzaW5nIGh1bmtzIHRoYXQgYXJlIGNsb3NlIHRvIGVhY2ggb3RoZXIuCisKKy1XOjoKKy0tZnVuY3Rpb24tY29udGV4dDo6CisJU2hvdyB3aG9sZSBzdXJyb3VuZGluZyBmdW5jdGlvbnMgb2YgY2hhbmdlcy4KKworaWZuZGVmOjpnaXQtZm9ybWF0LXBhdGNoW10KK2lmbmRlZjo6Z2l0LWxvZ1tdCistLWV4aXQtY29kZTo6CisJTWFrZSB0aGUgcHJvZ3JhbSBleGl0IHdpdGggY29kZXMgc2ltaWxhciB0byBkaWZmKDEpLgorCVRoYXQgaXMsIGl0IGV4aXRzIHdpdGggMSBpZiB0aGVyZSB3ZXJlIGRpZmZlcmVuY2VzIGFuZAorCTAgbWVhbnMgbm8gZGlmZmVyZW5jZXMuCisKKy0tcXVpZXQ6OgorCURpc2FibGUgYWxsIG91dHB1dCBvZiB0aGUgcHJvZ3JhbS4gSW1wbGllcyBgLS1leGl0LWNvZGVgLgorZW5kaWY6OmdpdC1sb2dbXQorZW5kaWY6OmdpdC1mb3JtYXQtcGF0Y2hbXQorCistLWV4dC1kaWZmOjoKKwlBbGxvdyBhbiBleHRlcm5hbCBkaWZmIGhlbHBlciB0byBiZSBleGVjdXRlZC4gSWYgeW91IHNldCBhbgorCWV4dGVybmFsIGRpZmYgZHJpdmVyIHdpdGggbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdLCB5b3UgbmVlZAorCXRvIHVzZSB0aGlzIG9wdGlvbiB3aXRoIGxpbmtnaXQ6Z2l0LWxvZ1sxXSBhbmQgZnJpZW5kcy4KKworLS1uby1leHQtZGlmZjo6CisJRGlzYWxsb3cgZXh0ZXJuYWwgZGlmZiBkcml2ZXJzLgorCistLXRleHRjb252OjoKKy0tbm8tdGV4dGNvbnY6OgorCUFsbG93IChvciBkaXNhbGxvdykgZXh0ZXJuYWwgdGV4dCBjb252ZXJzaW9uIGZpbHRlcnMgdG8gYmUgcnVuCisJd2hlbiBjb21wYXJpbmcgYmluYXJ5IGZpbGVzLiBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvcgorCWRldGFpbHMuIEJlY2F1c2UgdGV4dGNvbnYgZmlsdGVycyBhcmUgdHlwaWNhbGx5IGEgb25lLXdheQorCWNvbnZlcnNpb24sIHRoZSByZXN1bHRpbmcgZGlmZiBpcyBzdWl0YWJsZSBmb3IgaHVtYW4KKwljb25zdW1wdGlvbiwgYnV0IGNhbm5vdCBiZSBhcHBsaWVkLiBGb3IgdGhpcyByZWFzb24sIHRleHRjb252CisJZmlsdGVycyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0IG9ubHkgZm9yIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gYW5kCisJbGlua2dpdDpnaXQtbG9nWzFdLCBidXQgbm90IGZvciBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gb3IKKwlkaWZmIHBsdW1iaW5nIGNvbW1hbmRzLgorCistLWlnbm9yZS1zdWJtb2R1bGVzWz08d2hlbj5dOjoKKwlJZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzIGluIHRoZSBkaWZmIGdlbmVyYXRpb24uIDx3aGVuPiBjYW4gYmUKKwllaXRoZXIgIm5vbmUiLCAidW50cmFja2VkIiwgImRpcnR5IiBvciAiYWxsIiwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuCisJVXNpbmcgIm5vbmUiIHdpbGwgY29uc2lkZXIgdGhlIHN1Ym1vZHVsZSBtb2RpZmllZCB3aGVuIGl0IGVpdGhlciBjb250YWlucworCXVudHJhY2tlZCBvciBtb2RpZmllZCBmaWxlcyBvciBpdHMgSEVBRCBkaWZmZXJzIGZyb20gdGhlIGNvbW1pdCByZWNvcmRlZAorCWluIHRoZSBzdXBlcnByb2plY3QgYW5kIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGFueSBzZXR0aW5ncyBvZiB0aGUKKwknaWdub3JlJyBvcHRpb24gaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdIG9yIGxpbmtnaXQ6Z2l0bW9kdWxlc1s1XS4gV2hlbgorCSJ1bnRyYWNrZWQiIGlzIHVzZWQgc3VibW9kdWxlcyBhcmUgbm90IGNvbnNpZGVyZWQgZGlydHkgd2hlbiB0aGV5IG9ubHkKKwljb250YWluIHVudHJhY2tlZCBjb250ZW50IChidXQgdGhleSBhcmUgc3RpbGwgc2Nhbm5lZCBmb3IgbW9kaWZpZWQKKwljb250ZW50KS4gVXNpbmcgImRpcnR5IiBpZ25vcmVzIGFsbCBjaGFuZ2VzIHRvIHRoZSB3b3JrIHRyZWUgb2Ygc3VibW9kdWxlcywKKwlvbmx5IGNoYW5nZXMgdG8gdGhlIGNvbW1pdHMgc3RvcmVkIGluIHRoZSBzdXBlcnByb2plY3QgYXJlIHNob3duICh0aGlzIHdhcworCXRoZSBiZWhhdmlvciB1bnRpbCAxLjcuMCkuIFVzaW5nICJhbGwiIGhpZGVzIGFsbCBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMuCisKKy0tc3JjLXByZWZpeD08cHJlZml4Pjo6CisJU2hvdyB0aGUgZ2l2ZW4gc291cmNlIHByZWZpeCBpbnN0ZWFkIG9mICJhLyIuCisKKy0tZHN0LXByZWZpeD08cHJlZml4Pjo6CisJU2hvdyB0aGUgZ2l2ZW4gZGVzdGluYXRpb24gcHJlZml4IGluc3RlYWQgb2YgImIvIi4KKworLS1uby1wcmVmaXg6OgorCURvIG5vdCBzaG93IGFueSBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcHJlZml4LgorCitGb3IgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvbiB0aGVzZSBjb21tb24gb3B0aW9ucywgc2VlIGFsc28KK2xpbmtnaXQ6Z2l0ZGlmZmNvcmVbN10uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvY2Jvb2steHNsLmNzcyBiL0RvY3VtZW50YXRpb24vZG9jYm9vay14c2wuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMWM4ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RvY2Jvb2steHNsLmNzcwpAQCAtMCwwICsxLDI5NiBAQAorLyoKKyAgQ1NTIHN0eWxlc2hlZXQgZm9yIFhIVE1MIHByb2R1Y2VkIGJ5IERvY0Jvb2sgWFNMIHN0eWxlc2hlZXRzLgorICBUZXN0ZWQgd2l0aCBYU0wgc3R5bGVzaGVldHMgMS42MS4yLCAxLjY3LjIKKyovCisKK3NwYW4uc3Ryb25nIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2JvZHkgYmxvY2txdW90ZSB7CisgIG1hcmdpbi10b3A6IC43NWVtOworICBsaW5lLWhlaWdodDogMS41OworICBtYXJnaW4tYm90dG9tOiAuNzVlbTsKK30KKworaHRtbCBib2R5IHsKKyAgbWFyZ2luOiAxZW0gNSUgMWVtIDUlOworICBsaW5lLWhlaWdodDogMS4yOworICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKK30KKworYm9keSBkaXYgeworICBtYXJnaW46IDA7Cit9CisKK2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYsCitkaXYudG9jIHAgYiwKK2Rpdi5saXN0LW9mLWZpZ3VyZXMgcCBiLAorZGl2Lmxpc3Qtb2YtdGFibGVzIHAgYiwKK2Rpdi5hYnN0cmFjdCBwLnRpdGxlCit7CisgIGNvbG9yOiAjNTI3YmJkOworICBmb250LWZhbWlseTogdGFob21hLCB2ZXJkYW5hLCBzYW5zLXNlcmlmOworfQorCitkaXYudG9jIHA6Zmlyc3QtY2hpbGQsCitkaXYubGlzdC1vZi1maWd1cmVzIHA6Zmlyc3QtY2hpbGQsCitkaXYubGlzdC1vZi10YWJsZXMgcDpmaXJzdC1jaGlsZCwKK2Rpdi5leGFtcGxlIHAudGl0bGUKK3sKKyAgbWFyZ2luLWJvdHRvbTogMC4yZW07Cit9CisKK2JvZHkgaDEgeworICBtYXJnaW46IC4wZW0gMCAwIC00JTsKKyAgbGluZS1oZWlnaHQ6IDEuMzsKKyAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHNpbHZlcjsKK30KKworYm9keSBoMiB7CisgIG1hcmdpbjogMC41ZW0gMCAwIC00JTsKKyAgbGluZS1oZWlnaHQ6IDEuMzsKKyAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHNpbHZlcjsKK30KKworYm9keSBoMyB7CisgIG1hcmdpbjogLjhlbSAwIDAgLTMlOworICBsaW5lLWhlaWdodDogMS4zOworfQorCitib2R5IGg0IHsKKyAgbWFyZ2luOiAuOGVtIDAgMCAtMyU7CisgIGxpbmUtaGVpZ2h0OiAxLjM7Cit9CisKK2JvZHkgaDUgeworICBtYXJnaW46IC44ZW0gMCAwIC0yJTsKKyAgbGluZS1oZWlnaHQ6IDEuMzsKK30KKworYm9keSBoNiB7CisgIG1hcmdpbjogLjhlbSAwIDAgLTElOworICBsaW5lLWhlaWdodDogMS4zOworfQorCitib2R5IGhyIHsKKyAgYm9yZGVyOiBub25lOyAvKiBCcm9rZW4gb24gSUU2ICovCit9CitkaXYuZm9vdG5vdGVzIGhyIHsKKyAgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOworfQorCitkaXYubmF2aGVhZGVyIHRoLCBkaXYubmF2aGVhZGVyIHRkLCBkaXYubmF2Zm9vdGVyIHRkIHsKKyAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogMC45ZW07CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBjb2xvcjogIzUyN2JiZDsKK30KK2Rpdi5uYXZoZWFkZXIgaW1nLCBkaXYubmF2Zm9vdGVyIGltZyB7CisgIGJvcmRlci1zdHlsZTogbm9uZTsKK30KK2Rpdi5uYXZoZWFkZXIgYSwgZGl2Lm5hdmZvb3RlciBhIHsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KK2Rpdi5uYXZmb290ZXIgaHIgeworICBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7Cit9CisKK2JvZHkgdGQgeworICBsaW5lLWhlaWdodDogMS4yCit9CisKK2JvZHkgdGggeworICBsaW5lLWhlaWdodDogMS4yOworfQorCitvbCB7CisgIGxpbmUtaGVpZ2h0OiAxLjI7Cit9CisKK3VsLCBib2R5IGRpciwgYm9keSBtZW51IHsKKyAgbGluZS1oZWlnaHQ6IDEuMjsKK30KKworaHRtbCB7CisgIG1hcmdpbjogMDsKKyAgcGFkZGluZzogMDsKK30KKworYm9keSBoMSwgYm9keSBoMiwgYm9keSBoMywgYm9keSBoNCwgYm9keSBoNSwgYm9keSBoNiB7CisgIG1hcmdpbi1sZWZ0OiAwCit9CisKK2JvZHkgcHJlIHsKKyAgbWFyZ2luOiAwLjVlbSAxMCUgMC41ZW0gMWVtOworICBsaW5lLWhlaWdodDogMS4wOworICBjb2xvcjogbmF2eTsKK30KKwordHQubGl0ZXJhbCwgY29kZS5saXRlcmFsIHsKKyAgY29sb3I6IG5hdnk7CisgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworfQorCitjb2RlLmxpdGVyYWw6YmVmb3JlIHsgY29udGVudDogIiciOyB9Citjb2RlLmxpdGVyYWw6YWZ0ZXIgeyBjb250ZW50OiAiJyI7IH0KKworZW0geworICBmb250LXN0eWxlOiBpdGFsaWM7CisgIGNvbG9yOiAjMDY0OworfQorCitkaXYubGl0ZXJhbGxheW91dCBwIHsKKyAgcGFkZGluZzogMGVtOworICBtYXJnaW46IDBlbTsKK30KKworZGl2LmxpdGVyYWxsYXlvdXQgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICBtYXJnaW46IDBlbTsKKyAgY29sb3I6IG5hdnk7CisgIGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlcjsKKyAgYmFja2dyb3VuZDogI2Y0ZjRmNDsKKyAgcGFkZGluZzogMC41ZW07Cit9CisKKy5wcm9ncmFtbGlzdGluZywgLnNjcmVlbiB7CisgIGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlcjsKKyAgYmFja2dyb3VuZDogI2Y0ZjRmNDsKKyAgbWFyZ2luOiAwLjVlbSAxMCUgMC41ZW0gMDsKKyAgcGFkZGluZzogMC41ZW0gMWVtOworfQorCitkaXYuc2lkZWJhciB7CisgIGJhY2tncm91bmQ6ICNmZmZmZWU7CisgIG1hcmdpbjogMS4wZW0gMTAlIDAuNWVtIDA7CisgIHBhZGRpbmc6IDAuNWVtIDFlbTsKKyAgYm9yZGVyOiAxcHggc29saWQgc2lsdmVyOworfQorZGl2LnNpZGViYXIgKiB7IHBhZGRpbmc6IDA7IH0KK2Rpdi5zaWRlYmFyIGRpdiB7IG1hcmdpbjogMDsgfQorZGl2LnNpZGViYXIgcC50aXRsZSB7CisgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworICBtYXJnaW4tdG9wOiAwLjVlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC4yZW07Cit9CisKK2Rpdi5iaWJsaW9taXhlZCB7CisgIG1hcmdpbjogMC41ZW0gNSUgMC41ZW0gMWVtOworfQorCitkaXYuZ2xvc3NhcnkgZHQgeworICBmb250LXdlaWdodDogYm9sZDsKK30KK2Rpdi5nbG9zc2FyeSBkZCBwIHsKKyAgbWFyZ2luLXRvcDogMC4yZW07Cit9CisKK2RsIHsKKyAgbWFyZ2luOiAuOGVtIDA7CisgIGxpbmUtaGVpZ2h0OiAxLjI7Cit9CisKK2R0IHsKKyAgbWFyZ2luLXRvcDogMC41ZW07Cit9CisKK2R0IHNwYW4udGVybSB7CisgIGZvbnQtc3R5bGU6IG5vcm1hbDsKKyAgY29sb3I6IG5hdnk7Cit9CisKK2Rpdi52YXJpYWJsZWxpc3QgZGQgcCB7CisgIG1hcmdpbi10b3A6IDA7Cit9CisKK2Rpdi5pdGVtaXplZGxpc3QgbGksIGRpdi5vcmRlcmVkbGlzdCBsaSB7CisgIG1hcmdpbi1sZWZ0OiAtMC44ZW07CisgIG1hcmdpbi10b3A6IDAuNWVtOworfQorCit1bCwgb2wgeworICAgIGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGU7Cit9CisKK2Rpdi5zaWRlYmFyIHVsLCBkaXYuc2lkZWJhciBvbCB7CisgICAgbWFyZ2luLWxlZnQ6IDIuOGVtOworfQorCitkaXYuaXRlbWl6ZWRsaXN0IHAudGl0bGUsCitkaXYub3JkZXJlZGxpc3QgcC50aXRsZSwKK2Rpdi52YXJpYWJsZWxpc3QgcC50aXRsZQoreworICBtYXJnaW4tYm90dG9tOiAtMC44ZW07Cit9CisKK2Rpdi5yZXZoaXN0b3J5IHRhYmxlIHsKKyAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKKyAgYm9yZGVyOiBub25lOworfQorZGl2LnJldmhpc3RvcnkgdGggeworICBib3JkZXI6IG5vbmU7CisgIGNvbG9yOiAjNTI3YmJkOworICBmb250LWZhbWlseTogdGFob21hLCB2ZXJkYW5hLCBzYW5zLXNlcmlmOworfQorZGl2LnJldmhpc3RvcnkgdGQgeworICBib3JkZXI6IDFweCBzb2xpZCBzaWx2ZXI7Cit9CisKKy8qIEtlZXAgVE9DIGFuZCBpbmRleCBsaW5lcyBjbG9zZSB0b2dldGhlci4gKi8KK2Rpdi50b2MgZGwsIGRpdi50b2MgZHQsCitkaXYubGlzdC1vZi1maWd1cmVzIGRsLCBkaXYubGlzdC1vZi1maWd1cmVzIGR0LAorZGl2Lmxpc3Qtb2YtdGFibGVzIGRsLCBkaXYubGlzdC1vZi10YWJsZXMgZHQsCitkaXYuaW5kZXhkaXYgZGwsIGRpdi5pbmRleGRpdiBkdAoreworICBsaW5lLWhlaWdodDogbm9ybWFsOworICBtYXJnaW4tdG9wOiAwOworICBtYXJnaW4tYm90dG9tOiAwOworfQorCisvKgorICBUYWJsZSBzdHlsaW5nIGRvZXMgbm90IHdvcmsgYmVjYXVzZSBvZiBvdmVycmlkaW5nIGF0dHJpYnV0ZXMgaW4KKyAgZ2VuZXJhdGVkIEhUTUwuCisqLworZGl2LnRhYmxlIHRhYmxlLAorZGl2LmluZm9ybWFsdGFibGUgdGFibGUKK3sKKyAgICBtYXJnaW4tbGVmdDogMDsKKyAgICBtYXJnaW4tcmlnaHQ6IDUlOworICAgIG1hcmdpbi1ib3R0b206IDAuOGVtOworfQorZGl2LmluZm9ybWFsdGFibGUgdGFibGUKK3sKKyAgICBtYXJnaW4tdG9wOiAwLjRlbQorfQorZGl2LnRhYmxlIHRoZWFkLAorZGl2LnRhYmxlIHRmb290LAorZGl2LnRhYmxlIHRib2R5LAorZGl2LmluZm9ybWFsdGFibGUgdGhlYWQsCitkaXYuaW5mb3JtYWx0YWJsZSB0Zm9vdCwKK2Rpdi5pbmZvcm1hbHRhYmxlIHRib2R5Cit7CisgICAgLyogTm8gZWZmZWN0IGluIElFNi4gKi8KKyAgICBib3JkZXItdG9wOiAycHggc29saWQgIzUyN2JiZDsKKyAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgIzUyN2JiZDsKK30KK2Rpdi50YWJsZSB0aGVhZCwgZGl2LnRhYmxlIHRmb290LAorZGl2LmluZm9ybWFsdGFibGUgdGhlYWQsIGRpdi5pbmZvcm1hbHRhYmxlIHRmb290Cit7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK2Rpdi5tZWRpYW9iamVjdCBpbWcgeworICAgIGJvcmRlcjogMXB4IHNvbGlkIHNpbHZlcjsKKyAgICBtYXJnaW4tYm90dG9tOiAwLjhlbTsKK30KK2Rpdi5maWd1cmUgcC50aXRsZSwKK2Rpdi50YWJsZSBwLnRpdGxlCit7CisgIG1hcmdpbi10b3A6IDFlbTsKKyAgbWFyZ2luLWJvdHRvbTogMC40ZW07Cit9CisKK0BtZWRpYSBwcmludCB7CisgIGRpdi5uYXZoZWFkZXIsIGRpdi5uYXZmb290ZXIgeyBkaXNwbGF5OiBub25lOyB9Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RvY2Jvb2sueHNsIGIvRG9jdW1lbnRhdGlvbi9kb2Nib29rLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYThiMDViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kb2Nib29rLnhzbApAQCAtMCwwICsxLDggQEAKKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwkJdmVyc2lvbj0nMS4wJz4KKyA8eHNsOmltcG9ydCBocmVmPSJodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudC9odG1sL2RvY2Jvb2sueHNsIi8+CisgPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIgorICAgICBlbmNvZGluZz0iVVRGLTgiIGluZGVudD0ibm8iCisgICAgIGRvY3R5cGUtcHVibGljPSItLy9XM0MvL0RURCBIVE1MIDQuMDEvL0VOIgorICAgICBkb2N0eXBlLXN5c3RlbT0iaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvc3RyaWN0LmR0ZCIgLz4KKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2V2ZXJ5ZGF5LnR4dG8gYi9Eb2N1bWVudGF0aW9uL2V2ZXJ5ZGF5LnR4dG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwNDdkOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZXZlcnlkYXkudHh0bwpAQCAtMCwwICsxLDkgQEAKK0V2ZXJ5ZGF5IEdpdCBXaXRoIDIwIENvbW1hbmRzIE9yIFNvCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRvY3VtZW50IGhhcyBiZWVuIG1vdmVkIHRvIGxpbmtnaXQ6Z2l0ZXZlcnlkYXlbMV0uCisKK1BsZWFzZSBsZXQgdGhlIG93bmVycyBvZiB0aGUgcmVmZXJyaW5nIHNpdGUga25vdyBzbyB0aGF0IHRoZXkgY2FuIHVwZGF0ZSB0aGUKK2xpbmsgeW91IGNsaWNrZWQgdG8gZ2V0IGhlcmUuCisKK1RoYW5rcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmV0Y2gtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NTgzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZldGNoLW9wdGlvbnMudHh0CkBAIC0wLDAgKzEsMTUyIEBACistLWFsbDo6CisJRmV0Y2ggYWxsIHJlbW90ZXMuCisKKy1hOjoKKy0tYXBwZW5kOjoKKwlBcHBlbmQgcmVmIG5hbWVzIGFuZCBvYmplY3QgbmFtZXMgb2YgZmV0Y2hlZCByZWZzIHRvIHRoZQorCWV4aXN0aW5nIGNvbnRlbnRzIG9mIGAuZ2l0L0ZFVENIX0hFQURgLiAgV2l0aG91dCB0aGlzCisJb3B0aW9uIG9sZCBkYXRhIGluIGAuZ2l0L0ZFVENIX0hFQURgIHdpbGwgYmUgb3ZlcndyaXR0ZW4uCisKKy0tZGVwdGg9PGRlcHRoPjo6CisJRGVlcGVuIG9yIHNob3J0ZW4gdGhlIGhpc3Rvcnkgb2YgYSAnc2hhbGxvdycgcmVwb3NpdG9yeSBjcmVhdGVkIGJ5CisJYGdpdCBjbG9uZWAgd2l0aCBgLS1kZXB0aD08ZGVwdGg+YCBvcHRpb24gKHNlZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXSkKKwl0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBjb21taXRzIGZyb20gdGhlIHRpcCBvZiBlYWNoIHJlbW90ZQorCWJyYW5jaCBoaXN0b3J5LiBUYWdzIGZvciB0aGUgZGVlcGVuZWQgY29tbWl0cyBhcmUgbm90IGZldGNoZWQuCisKKy0tdW5zaGFsbG93OjoKKwlJZiB0aGUgc291cmNlIHJlcG9zaXRvcnkgaXMgY29tcGxldGUsIGNvbnZlcnQgYSBzaGFsbG93CisJcmVwb3NpdG9yeSB0byBhIGNvbXBsZXRlIG9uZSwgcmVtb3ZpbmcgYWxsIHRoZSBsaW1pdGF0aW9ucworCWltcG9zZWQgYnkgc2hhbGxvdyByZXBvc2l0b3JpZXMuCisrCitJZiB0aGUgc291cmNlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdywgZmV0Y2ggYXMgbXVjaCBhcyBwb3NzaWJsZSBzbyB0aGF0Cit0aGUgY3VycmVudCByZXBvc2l0b3J5IGhhcyB0aGUgc2FtZSBoaXN0b3J5IGFzIHRoZSBzb3VyY2UgcmVwb3NpdG9yeS4KKworLS11cGRhdGUtc2hhbGxvdzo6CisJQnkgZGVmYXVsdCB3aGVuIGZldGNoaW5nIGZyb20gYSBzaGFsbG93IHJlcG9zaXRvcnksCisJYGdpdCBmZXRjaGAgcmVmdXNlcyByZWZzIHRoYXQgcmVxdWlyZSB1cGRhdGluZworCS5naXQvc2hhbGxvdy4gVGhpcyBvcHRpb24gdXBkYXRlcyAuZ2l0L3NoYWxsb3cgYW5kIGFjY2VwdCBzdWNoCisJcmVmcy4KKworaWZuZGVmOjpnaXQtcHVsbFtdCistLWRyeS1ydW46OgorCVNob3cgd2hhdCB3b3VsZCBiZSBkb25lLCB3aXRob3V0IG1ha2luZyBhbnkgY2hhbmdlcy4KK2VuZGlmOjpnaXQtcHVsbFtdCisKKy1mOjoKKy0tZm9yY2U6OgorCVdoZW4gJ2dpdCBmZXRjaCcgaXMgdXNlZCB3aXRoIGA8cmJyYW5jaD46PGxicmFuY2g+YAorCXJlZnNwZWMsIGl0IHJlZnVzZXMgdG8gdXBkYXRlIHRoZSBsb2NhbCBicmFuY2gKKwlgPGxicmFuY2g+YCB1bmxlc3MgdGhlIHJlbW90ZSBicmFuY2ggYDxyYnJhbmNoPmAgaXQKKwlmZXRjaGVzIGlzIGEgZGVzY2VuZGFudCBvZiBgPGxicmFuY2g+YC4gIFRoaXMgb3B0aW9uCisJb3ZlcnJpZGVzIHRoYXQgY2hlY2suCisKKy1rOjoKKy0ta2VlcDo6CisJS2VlcCBkb3dubG9hZGVkIHBhY2suCisKK2lmbmRlZjo6Z2l0LXB1bGxbXQorLS1tdWx0aXBsZTo6CisJQWxsb3cgc2V2ZXJhbCA8cmVwb3NpdG9yeT4gYW5kIDxncm91cD4gYXJndW1lbnRzIHRvIGJlCisJc3BlY2lmaWVkLiBObyA8cmVmc3BlYz5zIG1heSBiZSBzcGVjaWZpZWQuCisKKy1wOjoKKy0tcHJ1bmU6OgorCUFmdGVyIGZldGNoaW5nLCByZW1vdmUgYW55IHJlbW90ZS10cmFja2luZyByZWZlcmVuY2VzIHRoYXQgbm8KKwlsb25nZXIgZXhpc3Qgb24gdGhlIHJlbW90ZS4gIFRhZ3MgYXJlIG5vdCBzdWJqZWN0IHRvIHBydW5pbmcKKwlpZiB0aGV5IGFyZSBmZXRjaGVkIG9ubHkgYmVjYXVzZSBvZiB0aGUgZGVmYXVsdCB0YWcKKwlhdXRvLWZvbGxvd2luZyBvciBkdWUgdG8gYSAtLXRhZ3Mgb3B0aW9uLiAgSG93ZXZlciwgaWYgdGFncworCWFyZSBmZXRjaGVkIGR1ZSB0byBhbiBleHBsaWNpdCByZWZzcGVjIChlaXRoZXIgb24gdGhlIGNvbW1hbmQKKwlsaW5lIG9yIGluIHRoZSByZW1vdGUgY29uZmlndXJhdGlvbiwgZm9yIGV4YW1wbGUgaWYgdGhlIHJlbW90ZQorCXdhcyBjbG9uZWQgd2l0aCB0aGUgLS1taXJyb3Igb3B0aW9uKSwgdGhlbiB0aGV5IGFyZSBhbHNvCisJc3ViamVjdCB0byBwcnVuaW5nLgorZW5kaWY6OmdpdC1wdWxsW10KKworaWZuZGVmOjpnaXQtcHVsbFtdCistbjo6CitlbmRpZjo6Z2l0LXB1bGxbXQorLS1uby10YWdzOjoKKwlCeSBkZWZhdWx0LCB0YWdzIHRoYXQgcG9pbnQgYXQgb2JqZWN0cyB0aGF0IGFyZSBkb3dubG9hZGVkCisJZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgYXJlIGZldGNoZWQgYW5kIHN0b3JlZCBsb2NhbGx5LgorCVRoaXMgb3B0aW9uIGRpc2FibGVzIHRoaXMgYXV0b21hdGljIHRhZyBmb2xsb3dpbmcuIFRoZSBkZWZhdWx0CisJYmVoYXZpb3IgZm9yIGEgcmVtb3RlIG1heSBiZSBzcGVjaWZpZWQgd2l0aCB0aGUgcmVtb3RlLjxuYW1lPi50YWdPcHQKKwlzZXR0aW5nLiBTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitpZm5kZWY6OmdpdC1wdWxsW10KKy0tcmVmbWFwPTxyZWZzcGVjPjo6CisJV2hlbiBmZXRjaGluZyByZWZzIGxpc3RlZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB1c2UgdGhlCisJc3BlY2lmaWVkIHJlZnNwZWMgKGNhbiBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZSkgdG8gbWFwIHRoZQorCXJlZnMgdG8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLCBpbnN0ZWFkIG9mIHRoZSB2YWx1ZXMgb2YKKwlgcmVtb3RlLiouZmV0Y2hgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgcmVtb3RlCisJcmVwb3NpdG9yeS4gIFNlZSBzZWN0aW9uIG9uICJDb25maWd1cmVkIFJlbW90ZS10cmFja2luZworCUJyYW5jaGVzIiBmb3IgZGV0YWlscy4KKworLXQ6OgorLS10YWdzOjoKKwlGZXRjaCBhbGwgdGFncyBmcm9tIHRoZSByZW1vdGUgKGkuZS4sIGZldGNoIHJlbW90ZSB0YWdzCisJYHJlZnMvdGFncy8qYCBpbnRvIGxvY2FsIHRhZ3Mgd2l0aCB0aGUgc2FtZSBuYW1lKSwgaW4gYWRkaXRpb24KKwl0byB3aGF0ZXZlciBlbHNlIHdvdWxkIG90aGVyd2lzZSBiZSBmZXRjaGVkLiAgVXNpbmcgdGhpcworCW9wdGlvbiBhbG9uZSBkb2VzIG5vdCBzdWJqZWN0IHRhZ3MgdG8gcHJ1bmluZywgZXZlbiBpZiAtLXBydW5lCisJaXMgdXNlZCAodGhvdWdoIHRhZ3MgbWF5IGJlIHBydW5lZCBhbnl3YXkgaWYgdGhleSBhcmUgYWxzbyB0aGUKKwlkZXN0aW5hdGlvbiBvZiBhbiBleHBsaWNpdCByZWZzcGVjOyBzZWUgJy0tcHJ1bmUnKS4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXNbPXllc3xvbi1kZW1hbmR8bm9dOjoKKwlUaGlzIG9wdGlvbiBjb250cm9scyBpZiBhbmQgdW5kZXIgd2hhdCBjb25kaXRpb25zIG5ldyBjb21taXRzIG9mCisJcG9wdWxhdGVkIHN1Ym1vZHVsZXMgc2hvdWxkIGJlIGZldGNoZWQgdG9vLiBJdCBjYW4gYmUgdXNlZCBhcyBhCisJYm9vbGVhbiBvcHRpb24gdG8gY29tcGxldGVseSBkaXNhYmxlIHJlY3Vyc2lvbiB3aGVuIHNldCB0byAnbm8nIG9yIHRvCisJdW5jb25kaXRpb25hbGx5IHJlY3Vyc2UgaW50byBhbGwgcG9wdWxhdGVkIHN1Ym1vZHVsZXMgd2hlbiBzZXQgdG8KKwkneWVzJywgd2hpY2ggaXMgdGhlIGRlZmF1bHQgd2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkIHdpdGhvdXQgYW55CisJdmFsdWUuIFVzZSAnb24tZGVtYW5kJyB0byBvbmx5IHJlY3Vyc2UgaW50byBhIHBvcHVsYXRlZCBzdWJtb2R1bGUKKwl3aGVuIHRoZSBzdXBlcnByb2plY3QgcmV0cmlldmVzIGEgY29tbWl0IHRoYXQgdXBkYXRlcyB0aGUgc3VibW9kdWxlJ3MKKwlyZWZlcmVuY2UgdG8gYSBjb21taXQgdGhhdCBpc24ndCBhbHJlYWR5IGluIHRoZSBsb2NhbCBzdWJtb2R1bGUKKwljbG9uZS4KKworLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCURpc2FibGUgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMgKHRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcworCXVzaW5nIHRoZSAnLS1yZWN1cnNlLXN1Ym1vZHVsZXM9bm8nIG9wdGlvbikuCisKKy0tc3VibW9kdWxlLXByZWZpeD08cGF0aD46OgorCVByZXBlbmQgPHBhdGg+IHRvIHBhdGhzIHByaW50ZWQgaW4gaW5mb3JtYXRpdmUgbWVzc2FnZXMKKwlzdWNoIGFzICJGZXRjaGluZyBzdWJtb2R1bGUgZm9vIi4gIFRoaXMgb3B0aW9uIGlzIHVzZWQKKwlpbnRlcm5hbGx5IHdoZW4gcmVjdXJzaW5nIG92ZXIgc3VibW9kdWxlcy4KKworLS1yZWN1cnNlLXN1Ym1vZHVsZXMtZGVmYXVsdD1beWVzfG9uLWRlbWFuZF06OgorCVRoaXMgb3B0aW9uIGlzIHVzZWQgaW50ZXJuYWxseSB0byB0ZW1wb3JhcmlseSBwcm92aWRlIGEKKwlub24tbmVnYXRpdmUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIC0tcmVjdXJzZS1zdWJtb2R1bGVzCisJb3B0aW9uLiAgQWxsIG90aGVyIG1ldGhvZHMgb2YgY29uZmlndXJpbmcgZmV0Y2gncyBzdWJtb2R1bGUKKwlyZWN1cnNpb24gKHN1Y2ggYXMgc2V0dGluZ3MgaW4gbGlua2dpdDpnaXRtb2R1bGVzWzVdIGFuZAorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkgb3ZlcnJpZGUgdGhpcyBvcHRpb24sIGFzIGRvZXMKKwlzcGVjaWZ5aW5nIC0tW25vLV1yZWN1cnNlLXN1Ym1vZHVsZXMgZGlyZWN0bHkuCitlbmRpZjo6Z2l0LXB1bGxbXQorCistdTo6CistLXVwZGF0ZS1oZWFkLW9rOjoKKwlCeSBkZWZhdWx0ICdnaXQgZmV0Y2gnIHJlZnVzZXMgdG8gdXBkYXRlIHRoZSBoZWFkIHdoaWNoCisJY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBmbGFnIGRpc2FibGVzIHRoZQorCWNoZWNrLiAgVGhpcyBpcyBwdXJlbHkgZm9yIHRoZSBpbnRlcm5hbCB1c2UgZm9yICdnaXQgcHVsbCcKKwl0byBjb21tdW5pY2F0ZSB3aXRoICdnaXQgZmV0Y2gnLCBhbmQgdW5sZXNzIHlvdSBhcmUKKwlpbXBsZW1lbnRpbmcgeW91ciBvd24gUG9yY2VsYWluIHlvdSBhcmUgbm90IHN1cHBvc2VkIHRvCisJdXNlIGl0LgorCistLXVwbG9hZC1wYWNrIDx1cGxvYWQtcGFjaz46OgorCVdoZW4gZ2l2ZW4sIGFuZCB0aGUgcmVwb3NpdG9yeSB0byBmZXRjaCBmcm9tIGlzIGhhbmRsZWQKKwlieSAnZ2l0IGZldGNoLXBhY2snLCAnLS1leGVjPTx1cGxvYWQtcGFjaz4nIGlzIHBhc3NlZCB0bworCXRoZSBjb21tYW5kIHRvIHNwZWNpZnkgbm9uLWRlZmF1bHQgcGF0aCBmb3IgdGhlIGNvbW1hbmQKKwlydW4gb24gdGhlIG90aGVyIGVuZC4KKworaWZuZGVmOjpnaXQtcHVsbFtdCistcTo6CistLXF1aWV0OjoKKwlQYXNzIC0tcXVpZXQgdG8gZ2l0LWZldGNoLXBhY2sgYW5kIHNpbGVuY2UgYW55IG90aGVyIGludGVybmFsbHkKKwl1c2VkIGdpdCBjb21tYW5kcy4gUHJvZ3Jlc3MgaXMgbm90IHJlcG9ydGVkIHRvIHRoZSBzdGFuZGFyZCBlcnJvcgorCXN0cmVhbS4KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLgorZW5kaWY6OmdpdC1wdWxsW10KKworLS1wcm9ncmVzczo6CisJUHJvZ3Jlc3Mgc3RhdHVzIGlzIHJlcG9ydGVkIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0KKwlieSBkZWZhdWx0IHdoZW4gaXQgaXMgYXR0YWNoZWQgdG8gYSB0ZXJtaW5hbCwgdW5sZXNzIC1xCisJaXMgc3BlY2lmaWVkLiBUaGlzIGZsYWcgZm9yY2VzIHByb2dyZXNzIHN0YXR1cyBldmVuIGlmIHRoZQorCXN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QgZGlyZWN0ZWQgdG8gYSB0ZXJtaW5hbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZml4LXRleGkucGVybCBiL0RvY3VtZW50YXRpb24vZml4LXRleGkucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZjdkNzhmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maXgtdGV4aS5wZXJsCkBAIC0wLDAgKzEsMTUgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworCit3aGlsZSAoPD4pIHsKKwlpZiAoL15cQHNldGZpbGVuYW1lLykgeworCQkkXyA9ICJcQHNldGZpbGVuYW1lIGdpdC5pbmZvXG4iOworCX0gZWxzaWYgKC9eXEBkaXJlbnRyeS8pIHsKKwkJcHJpbnQgJ0BkaXJjYXRlZ29yeSBEZXZlbG9wbWVudAorQGRpcmVudHJ5CisqIEdpdDogKGdpdCkuICAgICAgICAgICBBIGZhc3QgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0KK0BlbmQgZGlyZW50cnkKKyc7CX0KKwl1bmxlc3MgKC9eXEBkaXJlbnRyeS8uLi9eXEBlbmQgZGlyZW50cnkvKSB7CisJCXByaW50OworCX0KK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZm10LW1lcmdlLW1zZy1jb25maWcudHh0IGIvRG9jdW1lbnRhdGlvbi9mbXQtbWVyZ2UtbXNnLWNvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzczY2ZhOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZm10LW1lcmdlLW1zZy1jb25maWcudHh0CkBAIC0wLDAgKzEsMTAgQEAKK21lcmdlLmJyYW5jaGRlc2M6OgorCUluIGFkZGl0aW9uIHRvIGJyYW5jaCBuYW1lcywgcG9wdWxhdGUgdGhlIGxvZyBtZXNzYWdlIHdpdGgKKwl0aGUgYnJhbmNoIGRlc2NyaXB0aW9uIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZW0uICBEZWZhdWx0cworCXRvIGZhbHNlLgorCittZXJnZS5sb2c6OgorCUluIGFkZGl0aW9uIHRvIGJyYW5jaCBuYW1lcywgcG9wdWxhdGUgdGhlIGxvZyBtZXNzYWdlIHdpdGggYXQKKwltb3N0IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIG9uZS1saW5lIGRlc2NyaXB0aW9ucyBmcm9tIHRoZQorCWFjdHVhbCBjb21taXRzIHRoYXQgYXJlIGJlaW5nIG1lcmdlZC4gIERlZmF1bHRzIHRvIGZhbHNlLCBhbmQKKwl0cnVlIGlzIGEgc3lub255bSBmb3IgMjAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hZGQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTUyODJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYWRkLnR4dApAQCAtMCwwICsxLDQxMSBAQAorZ2l0LWFkZCgxKQorPT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYWRkIC0gQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBhZGQnIFstLXZlcmJvc2UgfCAtdl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS1mb3JjZSB8IC1mXSBbLS1pbnRlcmFjdGl2ZSB8IC1pXSBbLS1wYXRjaCB8IC1wXQorCSAgWy0tZWRpdCB8IC1lXSBbLS1bbm8tXWFsbCB8IC0tW25vLV1pZ25vcmUtcmVtb3ZhbCB8IFstLXVwZGF0ZSB8IC11XV0KKwkgIFstLWludGVudC10by1hZGQgfCAtTl0gWy0tcmVmcmVzaF0gWy0taWdub3JlLWVycm9yc10gWy0taWdub3JlLW1pc3NpbmddCisJICBbLS1dIFs8cGF0aHNwZWM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCB1cGRhdGVzIHRoZSBpbmRleCB1c2luZyB0aGUgY3VycmVudCBjb250ZW50IGZvdW5kIGluCit0aGUgd29ya2luZyB0cmVlLCB0byBwcmVwYXJlIHRoZSBjb250ZW50IHN0YWdlZCBmb3IgdGhlIG5leHQgY29tbWl0LgorSXQgdHlwaWNhbGx5IGFkZHMgdGhlIGN1cnJlbnQgY29udGVudCBvZiBleGlzdGluZyBwYXRocyBhcyBhIHdob2xlLAorYnV0IHdpdGggc29tZSBvcHRpb25zIGl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gYWRkIGNvbnRlbnQgd2l0aAorb25seSBwYXJ0IG9mIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyBhcHBsaWVkLCBvcgorcmVtb3ZlIHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGluIHRoZSB3b3JraW5nIHRyZWUgYW55bW9yZS4KKworVGhlICJpbmRleCIgaG9sZHMgYSBzbmFwc2hvdCBvZiB0aGUgY29udGVudCBvZiB0aGUgd29ya2luZyB0cmVlLCBhbmQgaXQKK2lzIHRoaXMgc25hcHNob3QgdGhhdCBpcyB0YWtlbiBhcyB0aGUgY29udGVudHMgb2YgdGhlIG5leHQgY29tbWl0LiAgVGh1cworYWZ0ZXIgbWFraW5nIGFueSBjaGFuZ2VzIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIGJlZm9yZSBydW5uaW5nCit0aGUgY29tbWl0IGNvbW1hbmQsIHlvdSBtdXN0IHVzZSB0aGUgYGFkZGAgY29tbWFuZCB0byBhZGQgYW55IG5ldyBvcgorbW9kaWZpZWQgZmlsZXMgdG8gdGhlIGluZGV4LgorCitUaGlzIGNvbW1hbmQgY2FuIGJlIHBlcmZvcm1lZCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgYSBjb21taXQuICBJdCBvbmx5CithZGRzIHRoZSBjb250ZW50IG9mIHRoZSBzcGVjaWZpZWQgZmlsZShzKSBhdCB0aGUgdGltZSB0aGUgYWRkIGNvbW1hbmQgaXMKK3J1bjsgaWYgeW91IHdhbnQgc3Vic2VxdWVudCBjaGFuZ2VzIGluY2x1ZGVkIGluIHRoZSBuZXh0IGNvbW1pdCwgdGhlbgoreW91IG11c3QgcnVuIGBnaXQgYWRkYCBhZ2FpbiB0byBhZGQgdGhlIG5ldyBjb250ZW50IHRvIHRoZSBpbmRleC4KKworVGhlIGBnaXQgc3RhdHVzYCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIG9idGFpbiBhIHN1bW1hcnkgb2Ygd2hpY2gKK2ZpbGVzIGhhdmUgY2hhbmdlcyB0aGF0IGFyZSBzdGFnZWQgZm9yIHRoZSBuZXh0IGNvbW1pdC4KKworVGhlIGBnaXQgYWRkYCBjb21tYW5kIHdpbGwgbm90IGFkZCBpZ25vcmVkIGZpbGVzIGJ5IGRlZmF1bHQuICBJZiBhbnkKK2lnbm9yZWQgZmlsZXMgd2VyZSBleHBsaWNpdGx5IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBgZ2l0IGFkZGAKK3dpbGwgZmFpbCB3aXRoIGEgbGlzdCBvZiBpZ25vcmVkIGZpbGVzLiAgSWdub3JlZCBmaWxlcyByZWFjaGVkIGJ5CitkaXJlY3RvcnkgcmVjdXJzaW9uIG9yIGZpbGVuYW1lIGdsb2JiaW5nIHBlcmZvcm1lZCBieSBHaXQgKHF1b3RlIHlvdXIKK2dsb2JzIGJlZm9yZSB0aGUgc2hlbGwpIHdpbGwgYmUgc2lsZW50bHkgaWdub3JlZC4gIFRoZSAnZ2l0IGFkZCcgY29tbWFuZCBjYW4KK2JlIHVzZWQgdG8gYWRkIGlnbm9yZWQgZmlsZXMgd2l0aCB0aGUgYC1mYCAoZm9yY2UpIG9wdGlvbi4KKworUGxlYXNlIHNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0gZm9yIGFsdGVybmF0aXZlIHdheXMgdG8gYWRkIGNvbnRlbnQgdG8gYQorY29tbWl0LgorCisKK09QVElPTlMKKy0tLS0tLS0KKzxwYXRoc3BlYz4uLi46OgorCUZpbGVzIHRvIGFkZCBjb250ZW50IGZyb20uICBGaWxlZ2xvYnMgKGUuZy4gYCouY2ApIGNhbgorCWJlIGdpdmVuIHRvIGFkZCBhbGwgbWF0Y2hpbmcgZmlsZXMuICBBbHNvIGEKKwlsZWFkaW5nIGRpcmVjdG9yeSBuYW1lIChlLmcuIGBkaXJgIHRvIGFkZCBgZGlyL2ZpbGUxYAorCWFuZCBgZGlyL2ZpbGUyYCkgY2FuIGJlIGdpdmVuIHRvIHVwZGF0ZSB0aGUgaW5kZXggdG8KKwltYXRjaCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgZGlyZWN0b3J5IGFzIGEgd2hvbGUgKGUuZy4KKwlzcGVjaWZ5aW5nIGBkaXJgIHdpbGwgcmVjb3JkIG5vdCBqdXN0IGEgZmlsZSBgZGlyL2ZpbGUxYAorCW1vZGlmaWVkIGluIHRoZSB3b3JraW5nIHRyZWUsIGEgZmlsZSBgZGlyL2ZpbGUyYCBhZGRlZCB0bworCXRoZSB3b3JraW5nIHRyZWUsIGJ1dCBhbHNvIGEgZmlsZSBgZGlyL2ZpbGUzYCByZW1vdmVkIGZyb20KKwl0aGUgd29ya2luZyB0cmVlLiAgTm90ZSB0aGF0IG9sZGVyIHZlcnNpb25zIG9mIEdpdCB1c2VkCisJdG8gaWdub3JlIHJlbW92ZWQgZmlsZXM7IHVzZSBgLS1uby1hbGxgIG9wdGlvbiBpZiB5b3Ugd2FudAorCXRvIGFkZCBtb2RpZmllZCBvciBuZXcgZmlsZXMgYnV0IGlnbm9yZSByZW1vdmVkCW9uZXMuCisKKy1uOjoKKy0tZHJ5LXJ1bjo6CisJRG9uJ3QgYWN0dWFsbHkgYWRkIHRoZSBmaWxlKHMpLCBqdXN0IHNob3cgaWYgdGhleSBleGlzdCBhbmQvb3Igd2lsbAorCWJlIGlnbm9yZWQuCisKKy12OjoKKy0tdmVyYm9zZTo6CisgICAgICAgIEJlIHZlcmJvc2UuCisKKy1mOjoKKy0tZm9yY2U6OgorCUFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcy4KKworLWk6OgorLS1pbnRlcmFjdGl2ZTo6CisJQWRkIG1vZGlmaWVkIGNvbnRlbnRzIGluIHRoZSB3b3JraW5nIHRyZWUgaW50ZXJhY3RpdmVseSB0bworCXRoZSBpbmRleC4gT3B0aW9uYWwgcGF0aCBhcmd1bWVudHMgbWF5IGJlIHN1cHBsaWVkIHRvIGxpbWl0CisJb3BlcmF0aW9uIHRvIGEgc3Vic2V0IG9mIHRoZSB3b3JraW5nIHRyZWUuIFNlZSBgYEludGVyYWN0aXZlCisJbW9kZScnIGZvciBkZXRhaWxzLgorCistcDo6CistLXBhdGNoOjoKKwlJbnRlcmFjdGl2ZWx5IGNob29zZSBodW5rcyBvZiBwYXRjaCBiZXR3ZWVuIHRoZSBpbmRleCBhbmQgdGhlCisJd29yayB0cmVlIGFuZCBhZGQgdGhlbSB0byB0aGUgaW5kZXguIFRoaXMgZ2l2ZXMgdGhlIHVzZXIgYSBjaGFuY2UKKwl0byByZXZpZXcgdGhlIGRpZmZlcmVuY2UgYmVmb3JlIGFkZGluZyBtb2RpZmllZCBjb250ZW50cyB0byB0aGUKKwlpbmRleC4KKysKK1RoaXMgZWZmZWN0aXZlbHkgcnVucyBgYWRkIC0taW50ZXJhY3RpdmVgLCBidXQgYnlwYXNzZXMgdGhlCitpbml0aWFsIGNvbW1hbmQgbWVudSBhbmQgZGlyZWN0bHkganVtcHMgdG8gdGhlIGBwYXRjaGAgc3ViY29tbWFuZC4KK1NlZSBgYEludGVyYWN0aXZlIG1vZGUnJyBmb3IgZGV0YWlscy4KKworLWU6OgorLS1lZGl0OjoKKwlPcGVuIHRoZSBkaWZmIHZzLiB0aGUgaW5kZXggaW4gYW4gZWRpdG9yIGFuZCBsZXQgdGhlIHVzZXIKKwllZGl0IGl0LiAgQWZ0ZXIgdGhlIGVkaXRvciB3YXMgY2xvc2VkLCBhZGp1c3QgdGhlIGh1bmsgaGVhZGVycworCWFuZCBhcHBseSB0aGUgcGF0Y2ggdG8gdGhlIGluZGV4LgorKworVGhlIGludGVudCBvZiB0aGlzIG9wdGlvbiBpcyB0byBwaWNrIGFuZCBjaG9vc2UgbGluZXMgb2YgdGhlIHBhdGNoIHRvCithcHBseSwgb3IgZXZlbiB0byBtb2RpZnkgdGhlIGNvbnRlbnRzIG9mIGxpbmVzIHRvIGJlIHN0YWdlZC4gVGhpcyBjYW4gYmUKK3F1aWNrZXIgYW5kIG1vcmUgZmxleGlibGUgdGhhbiB1c2luZyB0aGUgaW50ZXJhY3RpdmUgaHVuayBzZWxlY3Rvci4KK0hvd2V2ZXIsIGl0IGlzIGVhc3kgdG8gY29uZnVzZSBvbmVzZWxmIGFuZCBjcmVhdGUgYSBwYXRjaCB0aGF0IGRvZXMgbm90CithcHBseSB0byB0aGUgaW5kZXguIFNlZSBFRElUSU5HIFBBVENIRVMgYmVsb3cuCisKKy11OjoKKy0tdXBkYXRlOjoKKwlVcGRhdGUgdGhlIGluZGV4IGp1c3Qgd2hlcmUgaXQgYWxyZWFkeSBoYXMgYW4gZW50cnkgbWF0Y2hpbmcKKwk8cGF0aHNwZWM+LiAgVGhpcyByZW1vdmVzIGFzIHdlbGwgYXMgbW9kaWZpZXMgaW5kZXggZW50cmllcyB0bworCW1hdGNoIHRoZSB3b3JraW5nIHRyZWUsIGJ1dCBhZGRzIG5vIG5ldyBmaWxlcy4KKysKK0lmIG5vIDxwYXRoc3BlYz4gaXMgZ2l2ZW4gd2hlbiBgLXVgIG9wdGlvbiBpcyB1c2VkLCBhbGwKK3RyYWNrZWQgZmlsZXMgaW4gdGhlIGVudGlyZSB3b3JraW5nIHRyZWUgYXJlIHVwZGF0ZWQgKG9sZCB2ZXJzaW9ucworb2YgR2l0IHVzZWQgdG8gbGltaXQgdGhlIHVwZGF0ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGl0cworc3ViZGlyZWN0b3JpZXMpLgorCistQTo6CistLWFsbDo6CistLW5vLWlnbm9yZS1yZW1vdmFsOjoKKwlVcGRhdGUgdGhlIGluZGV4IG5vdCBvbmx5IHdoZXJlIHRoZSB3b3JraW5nIHRyZWUgaGFzIGEgZmlsZQorCW1hdGNoaW5nIDxwYXRoc3BlYz4gYnV0IGFsc28gd2hlcmUgdGhlIGluZGV4IGFscmVhZHkgaGFzIGFuCisJZW50cnkuCVRoaXMgYWRkcywgbW9kaWZpZXMsIGFuZCByZW1vdmVzIGluZGV4IGVudHJpZXMgdG8KKwltYXRjaCB0aGUgd29ya2luZyB0cmVlLgorKworSWYgbm8gPHBhdGhzcGVjPiBpcyBnaXZlbiB3aGVuIGAtQWAgb3B0aW9uIGlzIHVzZWQsIGFsbAorZmlsZXMgaW4gdGhlIGVudGlyZSB3b3JraW5nIHRyZWUgYXJlIHVwZGF0ZWQgKG9sZCB2ZXJzaW9ucworb2YgR2l0IHVzZWQgdG8gbGltaXQgdGhlIHVwZGF0ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGl0cworc3ViZGlyZWN0b3JpZXMpLgorCistLW5vLWFsbDo6CistLWlnbm9yZS1yZW1vdmFsOjoKKwlVcGRhdGUgdGhlIGluZGV4IGJ5IGFkZGluZyBuZXcgZmlsZXMgdGhhdCBhcmUgdW5rbm93biB0byB0aGUKKwlpbmRleCBhbmQgZmlsZXMgbW9kaWZpZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSwgYnV0IGlnbm9yZQorCWZpbGVzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgd29ya2luZyB0cmVlLiAgVGhpcworCW9wdGlvbiBpcyBhIG5vLW9wIHdoZW4gbm8gPHBhdGhzcGVjPiBpcyB1c2VkLgorKworVGhpcyBvcHRpb24gaXMgcHJpbWFyaWx5IHRvIGhlbHAgdXNlcnMgd2hvIGFyZSB1c2VkIHRvIG9sZGVyCit2ZXJzaW9ucyBvZiBHaXQsIHdob3NlICJnaXQgYWRkIDxwYXRoc3BlYz4uLi4iIHdhcyBhIHN5bm9ueW0KK2ZvciAiZ2l0IGFkZCAtLW5vLWFsbCA8cGF0aHNwZWM+Li4uIiwgaS5lLiBpZ25vcmVkIHJlbW92ZWQgZmlsZXMuCisKKy1OOjoKKy0taW50ZW50LXRvLWFkZDo6CisJUmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgcGF0aCB3aWxsIGJlIGFkZGVkIGxhdGVyLiBBbiBlbnRyeQorCWZvciB0aGUgcGF0aCBpcyBwbGFjZWQgaW4gdGhlIGluZGV4IHdpdGggbm8gY29udGVudC4gVGhpcyBpcworCXVzZWZ1bCBmb3IsIGFtb25nIG90aGVyIHRoaW5ncywgc2hvd2luZyB0aGUgdW5zdGFnZWQgY29udGVudCBvZgorCXN1Y2ggZmlsZXMgd2l0aCBgZ2l0IGRpZmZgIGFuZCBjb21taXR0aW5nIHRoZW0gd2l0aCBgZ2l0IGNvbW1pdAorCS1hYC4KKworLS1yZWZyZXNoOjoKKwlEb24ndCBhZGQgdGhlIGZpbGUocyksIGJ1dCBvbmx5IHJlZnJlc2ggdGhlaXIgc3RhdCgpCisJaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4LgorCistLWlnbm9yZS1lcnJvcnM6OgorCUlmIHNvbWUgZmlsZXMgY291bGQgbm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIGluZGV4aW5nCisJdGhlbSwgZG8gbm90IGFib3J0IHRoZSBvcGVyYXRpb24sIGJ1dCBjb250aW51ZSBhZGRpbmcgdGhlCisJb3RoZXJzLiBUaGUgY29tbWFuZCBzaGFsbCBzdGlsbCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzLgorCVRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBhZGQuaWdub3JlRXJyb3JzYCBjYW4gYmUgc2V0IHRvCisJdHJ1ZSB0byBtYWtlIHRoaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorCistLWlnbm9yZS1taXNzaW5nOjoKKwlUaGlzIG9wdGlvbiBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuLiBCeSB1c2luZworCXRoaXMgb3B0aW9uIHRoZSB1c2VyIGNhbiBjaGVjayBpZiBhbnkgb2YgdGhlIGdpdmVuIGZpbGVzIHdvdWxkCisJYmUgaWdub3JlZCwgbm8gbWF0dGVyIGlmIHRoZXkgYXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgd29yaworCXRyZWUgb3Igbm90LgorCitcLS06OgorCVRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20KKwl0aGUgbGlzdCBvZiBmaWxlcywgKHVzZWZ1bCB3aGVuIGZpbGVuYW1lcyBtaWdodCBiZSBtaXN0YWtlbgorCWZvciBjb21tYW5kLWxpbmUgb3B0aW9ucykuCisKKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgY29yZS5leGNsdWRlc0ZpbGVgIGluZGljYXRlcyBhIHBhdGggdG8gYQorZmlsZSBjb250YWluaW5nIHBhdHRlcm5zIG9mIGZpbGUgbmFtZXMgdG8gZXhjbHVkZSBmcm9tIGdpdC1hZGQsIHNpbWlsYXIgdG8KKyRHSVRfRElSL2luZm8vZXhjbHVkZS4gIFBhdHRlcm5zIGluIHRoZSBleGNsdWRlIGZpbGUgYXJlIHVzZWQgaW4gYWRkaXRpb24gdG8KK3Rob3NlIGluIGluZm8vZXhjbHVkZS4gIFNlZSBsaW5rZ2l0OmdpdGlnbm9yZVs1XS4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBBZGRzIGNvbnRlbnQgZnJvbSBhbGwgYCoudHh0YCBmaWxlcyB1bmRlciBgRG9jdW1lbnRhdGlvbmAgZGlyZWN0b3J5CithbmQgaXRzIHN1YmRpcmVjdG9yaWVzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBhZGQgRG9jdW1lbnRhdGlvbi9cKi50eHQKKy0tLS0tLS0tLS0tLQorKworTm90ZSB0aGF0IHRoZSBhc3RlcmlzayBgKmAgaXMgcXVvdGVkIGZyb20gdGhlIHNoZWxsIGluIHRoaXMKK2V4YW1wbGU7IHRoaXMgbGV0cyB0aGUgY29tbWFuZCBpbmNsdWRlIHRoZSBmaWxlcyBmcm9tCitzdWJkaXJlY3RvcmllcyBvZiBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeS4KKworKiBDb25zaWRlcnMgYWRkaW5nIGNvbnRlbnQgZnJvbSBhbGwgZ2l0LSouc2ggc2NyaXB0czoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYWRkIGdpdC0qLnNoCistLS0tLS0tLS0tLS0KKysKK0JlY2F1c2UgdGhpcyBleGFtcGxlIGxldHMgdGhlIHNoZWxsIGV4cGFuZCB0aGUgYXN0ZXJpc2sgKGkuZS4geW91IGFyZQorbGlzdGluZyB0aGUgZmlsZXMgZXhwbGljaXRseSksIGl0IGRvZXMgbm90IGNvbnNpZGVyCitgc3ViZGlyL2dpdC1mb28uc2hgLgorCitJbnRlcmFjdGl2ZSBtb2RlCistLS0tLS0tLS0tLS0tLS0tCitXaGVuIHRoZSBjb21tYW5kIGVudGVycyB0aGUgaW50ZXJhY3RpdmUgbW9kZSwgaXQgc2hvd3MgdGhlCitvdXRwdXQgb2YgdGhlICdzdGF0dXMnIHN1YmNvbW1hbmQsIGFuZCB0aGVuIGdvZXMgaW50byBpdHMKK2ludGVyYWN0aXZlIGNvbW1hbmQgbG9vcC4KKworVGhlIGNvbW1hbmQgbG9vcCBzaG93cyB0aGUgbGlzdCBvZiBzdWJjb21tYW5kcyBhdmFpbGFibGUsIGFuZAorZ2l2ZXMgYSBwcm9tcHQgIldoYXQgbm93PiAiLiAgSW4gZ2VuZXJhbCwgd2hlbiB0aGUgcHJvbXB0IGVuZHMKK3dpdGggYSBzaW5nbGUgJz4nLCB5b3UgY2FuIHBpY2sgb25seSBvbmUgb2YgdGhlIGNob2ljZXMgZ2l2ZW4KK2FuZCB0eXBlIHJldHVybiwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyAgICAqKiogQ29tbWFuZHMgKioqCisgICAgICAxOiBzdGF0dXMgICAgICAgMjogdXBkYXRlICAgICAgIDM6IHJldmVydCAgICAgICA0OiBhZGQgdW50cmFja2VkCisgICAgICA1OiBwYXRjaCAgICAgICAgNjogZGlmZiAgICAgICAgIDc6IHF1aXQgICAgICAgICA4OiBoZWxwCisgICAgV2hhdCBub3c+IDEKKy0tLS0tLS0tLS0tLQorCitZb3UgYWxzbyBjb3VsZCBzYXkgYHNgIG9yIGBzdGFgIG9yIGBzdGF0dXNgIGFib3ZlIGFzIGxvbmcgYXMgdGhlCitjaG9pY2UgaXMgdW5pcXVlLgorCitUaGUgbWFpbiBjb21tYW5kIGxvb3AgaGFzIDYgc3ViY29tbWFuZHMgKHBsdXMgaGVscCBhbmQgcXVpdCkuCisKK3N0YXR1czo6CisKKyAgIFRoaXMgc2hvd3MgdGhlIGNoYW5nZSBiZXR3ZWVuIEhFQUQgYW5kIGluZGV4IChpLmUuIHdoYXQgd2lsbCBiZQorICAgY29tbWl0dGVkIGlmIHlvdSBzYXkgYGdpdCBjb21taXRgKSwgYW5kIGJldHdlZW4gaW5kZXggYW5kCisgICB3b3JraW5nIHRyZWUgZmlsZXMgKGkuZS4gd2hhdCB5b3UgY291bGQgc3RhZ2UgZnVydGhlciBiZWZvcmUKKyAgIGBnaXQgY29tbWl0YCB1c2luZyBgZ2l0IGFkZGApIGZvciBlYWNoIHBhdGguICBBIHNhbXBsZSBvdXRwdXQKKyAgIGxvb2tzIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICBzdGFnZWQgICAgIHVuc3RhZ2VkIHBhdGgKKyAgICAgMTogICAgICAgYmluYXJ5ICAgICAgbm90aGluZyBmb28ucG5nCisgICAgIDI6ICAgICArNDAzLy0zNSAgICAgICAgKzEvLTEgZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybAorLS0tLS0tLS0tLS0tCisrCitJdCBzaG93cyB0aGF0IGZvby5wbmcgaGFzIGRpZmZlcmVuY2VzIGZyb20gSEVBRCAoYnV0IHRoYXQgaXMKK2JpbmFyeSBzbyBsaW5lIGNvdW50IGNhbm5vdCBiZSBzaG93bikgYW5kIHRoZXJlIGlzIG5vCitkaWZmZXJlbmNlIGJldHdlZW4gaW5kZXhlZCBjb3B5IGFuZCB0aGUgd29ya2luZyB0cmVlCit2ZXJzaW9uIChpZiB0aGUgd29ya2luZyB0cmVlIHZlcnNpb24gd2VyZSBhbHNvIGRpZmZlcmVudCwKKydiaW5hcnknIHdvdWxkIGhhdmUgYmVlbiBzaG93biBpbiBwbGFjZSBvZiAnbm90aGluZycpLiAgVGhlCitvdGhlciBmaWxlLCBnaXQtYWRke2xpdGRkfWludGVyYWN0aXZlLnBlcmwsIGhhcyA0MDMgbGluZXMgYWRkZWQKK2FuZCAzNSBsaW5lcyBkZWxldGVkIGlmIHlvdSBjb21taXQgd2hhdCBpcyBpbiB0aGUgaW5kZXgsIGJ1dAord29ya2luZyB0cmVlIGZpbGUgaGFzIGZ1cnRoZXIgbW9kaWZpY2F0aW9ucyAob25lIGFkZGl0aW9uIGFuZAorb25lIGRlbGV0aW9uKS4KKwordXBkYXRlOjoKKworICAgVGhpcyBzaG93cyB0aGUgc3RhdHVzIGluZm9ybWF0aW9uIGFuZCBpc3N1ZXMgYW4gIlVwZGF0ZT4+IgorICAgcHJvbXB0LiAgV2hlbiB0aGUgcHJvbXB0IGVuZHMgd2l0aCBkb3VibGUgJz4+JywgeW91IGNhbgorICAgbWFrZSBtb3JlIHRoYW4gb25lIHNlbGVjdGlvbiwgY29uY2F0ZW5hdGVkIHdpdGggd2hpdGVzcGFjZSBvcgorICAgY29tbWEuICBBbHNvIHlvdSBjYW4gc2F5IHJhbmdlcy4gIEUuZy4gIjItNSA3LDkiIHRvIGNob29zZQorICAgMiwzLDQsNSw3LDkgZnJvbSB0aGUgbGlzdC4gIElmIHRoZSBzZWNvbmQgbnVtYmVyIGluIGEgcmFuZ2UgaXMKKyAgIG9taXR0ZWQsIGFsbCByZW1haW5pbmcgcGF0Y2hlcyBhcmUgdGFrZW4uICBFLmcuICI3LSIgdG8gY2hvb3NlCisgICA3LDgsOSBmcm9tIHRoZSBsaXN0LiAgWW91IGNhbiBzYXkgJyonIHRvIGNob29zZSBldmVyeXRoaW5nLgorKworV2hhdCB5b3UgY2hvc2UgYXJlIHRoZW4gaGlnaGxpZ2h0ZWQgd2l0aCAnKicsCitsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgc3RhZ2VkICAgICB1bnN0YWdlZCBwYXRoCisgIDE6ICAgICAgIGJpbmFyeSAgICAgIG5vdGhpbmcgZm9vLnBuZworKiAyOiAgICAgKzQwMy8tMzUgICAgICAgICsxLy0xIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKKy0tLS0tLS0tLS0tLQorKworVG8gcmVtb3ZlIHNlbGVjdGlvbiwgcHJlZml4IHRoZSBpbnB1dCB3aXRoIGAtYAorbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tCitVcGRhdGU+PiAtMgorLS0tLS0tLS0tLS0tCisrCitBZnRlciBtYWtpbmcgdGhlIHNlbGVjdGlvbiwgYW5zd2VyIHdpdGggYW4gZW1wdHkgbGluZSB0byBzdGFnZSB0aGUKK2NvbnRlbnRzIG9mIHdvcmtpbmcgdHJlZSBmaWxlcyBmb3Igc2VsZWN0ZWQgcGF0aHMgaW4gdGhlIGluZGV4LgorCityZXZlcnQ6OgorCisgIFRoaXMgaGFzIGEgdmVyeSBzaW1pbGFyIFVJIHRvICd1cGRhdGUnLCBhbmQgdGhlIHN0YWdlZAorICBpbmZvcm1hdGlvbiBmb3Igc2VsZWN0ZWQgcGF0aHMgYXJlIHJldmVydGVkIHRvIHRoYXQgb2YgdGhlCisgIEhFQUQgdmVyc2lvbi4gIFJldmVydGluZyBuZXcgcGF0aHMgbWFrZXMgdGhlbSB1bnRyYWNrZWQuCisKK2FkZCB1bnRyYWNrZWQ6OgorCisgIFRoaXMgaGFzIGEgdmVyeSBzaW1pbGFyIFVJIHRvICd1cGRhdGUnIGFuZAorICAncmV2ZXJ0JywgYW5kIGxldHMgeW91IGFkZCB1bnRyYWNrZWQgcGF0aHMgdG8gdGhlIGluZGV4LgorCitwYXRjaDo6CisKKyAgVGhpcyBsZXRzIHlvdSBjaG9vc2Ugb25lIHBhdGggb3V0IG9mIGEgJ3N0YXR1cycgbGlrZSBzZWxlY3Rpb24uCisgIEFmdGVyIGNob29zaW5nIHRoZSBwYXRoLCBpdCBwcmVzZW50cyB0aGUgZGlmZiBiZXR3ZWVuIHRoZSBpbmRleAorICBhbmQgdGhlIHdvcmtpbmcgdHJlZSBmaWxlIGFuZCBhc2tzIHlvdSBpZiB5b3Ugd2FudCB0byBzdGFnZQorICB0aGUgY2hhbmdlIG9mIGVhY2ggaHVuay4gIFlvdSBjYW4gc2VsZWN0IG9uZSBvZiB0aGUgZm9sbG93aW5nCisgIG9wdGlvbnMgYW5kIHR5cGUgcmV0dXJuOgorCisgICAgICAgeSAtIHN0YWdlIHRoaXMgaHVuaworICAgICAgIG4gLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rCisgICAgICAgcSAtIHF1aXQ7IGRvIG5vdCBzdGFnZSB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcworICAgICAgIGEgLSBzdGFnZSB0aGlzIGh1bmsgYW5kIGFsbCBsYXRlciBodW5rcyBpbiB0aGUgZmlsZQorICAgICAgIGQgLSBkbyBub3Qgc3RhZ2UgdGhpcyBodW5rIG9yIGFueSBvZiB0aGUgbGF0ZXIgaHVua3MgaW4gdGhlIGZpbGUKKyAgICAgICBnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0bworICAgICAgIC8gLSBzZWFyY2ggZm9yIGEgaHVuayBtYXRjaGluZyB0aGUgZ2l2ZW4gcmVnZXgKKyAgICAgICBqIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgdW5kZWNpZGVkIGh1bmsKKyAgICAgICBKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVuaworICAgICAgIGsgLSBsZWF2ZSB0aGlzIGh1bmsgdW5kZWNpZGVkLCBzZWUgcHJldmlvdXMgdW5kZWNpZGVkIGh1bmsKKyAgICAgICBLIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIHByZXZpb3VzIGh1bmsKKyAgICAgICBzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3MKKyAgICAgICBlIC0gbWFudWFsbHkgZWRpdCB0aGUgY3VycmVudCBodW5rCisgICAgICAgPyAtIHByaW50IGhlbHAKKysKK0FmdGVyIGRlY2lkaW5nIHRoZSBmYXRlIGZvciBhbGwgaHVua3MsIGlmIHRoZXJlIGlzIGFueSBodW5rCit0aGF0IHdhcyBjaG9zZW4sIHRoZSBpbmRleCBpcyB1cGRhdGVkIHdpdGggdGhlIHNlbGVjdGVkIGh1bmtzLgorKworWW91IGNhbiBvbWl0IGhhdmluZyB0byB0eXBlIHJldHVybiBoZXJlLCBieSBzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uCit2YXJpYWJsZSBgaW50ZXJhY3RpdmUuc2luZ2xlS2V5YCB0byBgdHJ1ZWAuCisKK2RpZmY6OgorCisgIFRoaXMgbGV0cyB5b3UgcmV2aWV3IHdoYXQgd2lsbCBiZSBjb21taXR0ZWQgKGkuZS4gYmV0d2VlbgorICBIRUFEIGFuZCBpbmRleCkuCisKKworRURJVElORyBQQVRDSEVTCistLS0tLS0tLS0tLS0tLS0KKworSW52b2tpbmcgYGdpdCBhZGQgLWVgIG9yIHNlbGVjdGluZyBgZWAgZnJvbSB0aGUgaW50ZXJhY3RpdmUgaHVuaworc2VsZWN0b3Igd2lsbCBvcGVuIGEgcGF0Y2ggaW4geW91ciBlZGl0b3I7IGFmdGVyIHRoZSBlZGl0b3IgZXhpdHMsIHRoZQorcmVzdWx0IGlzIGFwcGxpZWQgdG8gdGhlIGluZGV4LiBZb3UgYXJlIGZyZWUgdG8gbWFrZSBhcmJpdHJhcnkgY2hhbmdlcwordG8gdGhlIHBhdGNoLCBidXQgbm90ZSB0aGF0IHNvbWUgY2hhbmdlcyBtYXkgaGF2ZSBjb25mdXNpbmcgcmVzdWx0cywgb3IKK2V2ZW4gcmVzdWx0IGluIGEgcGF0Y2ggdGhhdCBjYW5ub3QgYmUgYXBwbGllZC4gIElmIHlvdSB3YW50IHRvIGFib3J0IHRoZQorb3BlcmF0aW9uIGVudGlyZWx5IChpLmUuLCBzdGFnZSBub3RoaW5nIG5ldyBpbiB0aGUgaW5kZXgpLCBzaW1wbHkgZGVsZXRlCithbGwgbGluZXMgb2YgdGhlIHBhdGNoLiBUaGUgbGlzdCBiZWxvdyBkZXNjcmliZXMgc29tZSBjb21tb24gdGhpbmdzIHlvdQorbWF5IHNlZSBpbiBhIHBhdGNoLCBhbmQgd2hpY2ggZWRpdGluZyBvcGVyYXRpb25zIG1ha2Ugc2Vuc2Ugb24gdGhlbS4KKworLS0KK2FkZGVkIGNvbnRlbnQ6OgorCitBZGRlZCBjb250ZW50IGlzIHJlcHJlc2VudGVkIGJ5IGxpbmVzIGJlZ2lubmluZyB3aXRoICJ7cGx1c30iLiBZb3UgY2FuCitwcmV2ZW50IHN0YWdpbmcgYW55IGFkZGl0aW9uIGxpbmVzIGJ5IGRlbGV0aW5nIHRoZW0uCisKK3JlbW92ZWQgY29udGVudDo6CisKK1JlbW92ZWQgY29udGVudCBpcyByZXByZXNlbnRlZCBieSBsaW5lcyBiZWdpbm5pbmcgd2l0aCAiLSIuIFlvdSBjYW4KK3ByZXZlbnQgc3RhZ2luZyB0aGVpciByZW1vdmFsIGJ5IGNvbnZlcnRpbmcgdGhlICItIiB0byBhICIgIiAoc3BhY2UpLgorCittb2RpZmllZCBjb250ZW50OjoKKworTW9kaWZpZWQgY29udGVudCBpcyByZXByZXNlbnRlZCBieSAiLSIgbGluZXMgKHJlbW92aW5nIHRoZSBvbGQgY29udGVudCkKK2ZvbGxvd2VkIGJ5ICJ7cGx1c30iIGxpbmVzIChhZGRpbmcgdGhlIHJlcGxhY2VtZW50IGNvbnRlbnQpLiBZb3UgY2FuCitwcmV2ZW50IHN0YWdpbmcgdGhlIG1vZGlmaWNhdGlvbiBieSBjb252ZXJ0aW5nICItIiBsaW5lcyB0byAiICIsIGFuZAorcmVtb3ZpbmcgIntwbHVzfSIgbGluZXMuIEJld2FyZSB0aGF0IG1vZGlmeWluZyBvbmx5IGhhbGYgb2YgdGhlIHBhaXIgaXMKK2xpa2VseSB0byBpbnRyb2R1Y2UgY29uZnVzaW5nIGNoYW5nZXMgdG8gdGhlIGluZGV4LgorLS0KKworVGhlcmUgYXJlIGFsc28gbW9yZSBjb21wbGV4IG9wZXJhdGlvbnMgdGhhdCBjYW4gYmUgcGVyZm9ybWVkLiBCdXQgYmV3YXJlCit0aGF0IGJlY2F1c2UgdGhlIHBhdGNoIGlzIGFwcGxpZWQgb25seSB0byB0aGUgaW5kZXggYW5kIG5vdCB0aGUgd29ya2luZwordHJlZSwgdGhlIHdvcmtpbmcgdHJlZSB3aWxsIGFwcGVhciB0byAidW5kbyIgdGhlIGNoYW5nZSBpbiB0aGUgaW5kZXguCitGb3IgZXhhbXBsZSwgaW50cm9kdWNpbmcgYSBuZXcgbGluZSBpbnRvIHRoZSBpbmRleCB0aGF0IGlzIGluIG5laXRoZXIKK3RoZSBIRUFEIG5vciB0aGUgd29ya2luZyB0cmVlIHdpbGwgc3RhZ2UgdGhlIG5ldyBsaW5lIGZvciBjb21taXQsIGJ1dAordGhlIGxpbmUgd2lsbCBhcHBlYXIgdG8gYmUgcmV2ZXJ0ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKworQXZvaWQgdXNpbmcgdGhlc2UgY29uc3RydWN0cywgb3IgZG8gc28gd2l0aCBleHRyZW1lIGNhdXRpb24uCisKKy0tCityZW1vdmluZyB1bnRvdWNoZWQgY29udGVudDo6CisKK0NvbnRlbnQgd2hpY2ggZG9lcyBub3QgZGlmZmVyIGJldHdlZW4gdGhlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgbWF5IGJlCitzaG93biBvbiBjb250ZXh0IGxpbmVzLCBiZWdpbm5pbmcgd2l0aCBhICIgIiAoc3BhY2UpLiAgWW91IGNhbiBzdGFnZQorY29udGV4dCBsaW5lcyBmb3IgcmVtb3ZhbCBieSBjb252ZXJ0aW5nIHRoZSBzcGFjZSB0byBhICItIi4gVGhlCityZXN1bHRpbmcgd29ya2luZyB0cmVlIGZpbGUgd2lsbCBhcHBlYXIgdG8gcmUtYWRkIHRoZSBjb250ZW50LgorCittb2RpZnlpbmcgZXhpc3RpbmcgY29udGVudDo6CisKK09uZSBjYW4gYWxzbyBtb2RpZnkgY29udGV4dCBsaW5lcyBieSBzdGFnaW5nIHRoZW0gZm9yIHJlbW92YWwgKGJ5Citjb252ZXJ0aW5nICIgIiB0byAiLSIpIGFuZCBhZGRpbmcgYSAie3BsdXN9IiBsaW5lIHdpdGggdGhlIG5ldyBjb250ZW50LgorU2ltaWxhcmx5LCBvbmUgY2FuIG1vZGlmeSAie3BsdXN9IiBsaW5lcyBmb3IgZXhpc3RpbmcgYWRkaXRpb25zIG9yCittb2RpZmljYXRpb25zLiBJbiBhbGwgY2FzZXMsIHRoZSBuZXcgbW9kaWZpY2F0aW9uIHdpbGwgYXBwZWFyIHJldmVydGVkCitpbiB0aGUgd29ya2luZyB0cmVlLgorCituZXcgY29udGVudDo6CisKK1lvdSBtYXkgYWxzbyBhZGQgbmV3IGNvbnRlbnQgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgcGF0Y2g7IHNpbXBseQorYWRkIG5ldyBsaW5lcywgZWFjaCBzdGFydGluZyB3aXRoICJ7cGx1c30iLiBUaGUgYWRkaXRpb24gd2lsbCBhcHBlYXIKK3JldmVydGVkIGluIHRoZSB3b3JraW5nIHRyZWUuCistLQorCitUaGVyZSBhcmUgYWxzbyBzZXZlcmFsIG9wZXJhdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGF2b2lkZWQgZW50aXJlbHksIGFzCit0aGV5IHdpbGwgbWFrZSB0aGUgcGF0Y2ggaW1wb3NzaWJsZSB0byBhcHBseToKKworKiBhZGRpbmcgY29udGV4dCAoIiAiKSBvciByZW1vdmFsICgiLSIpIGxpbmVzCisqIGRlbGV0aW5nIGNvbnRleHQgb3IgcmVtb3ZhbCBsaW5lcworKiBtb2RpZnlpbmcgdGhlIGNvbnRlbnRzIG9mIGNvbnRleHQgb3IgcmVtb3ZhbCBsaW5lcworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXN0YXR1c1sxXQorbGlua2dpdDpnaXQtcm1bMV0KK2xpbmtnaXQ6Z2l0LXJlc2V0WzFdCitsaW5rZ2l0OmdpdC1tdlsxXQorbGlua2dpdDpnaXQtY29tbWl0WzFdCitsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyYzFmZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFtLnR4dApAQCAtMCwwICsxLDIzMCBAQAorZ2l0LWFtKDEpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWFtIC0gQXBwbHkgYSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIGEgbWFpbGJveAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBhbScgWy0tc2lnbm9mZl0gWy0ta2VlcF0gWy0tW25vLV1rZWVwLWNyXSBbLS1bbm8tXXV0ZjhdCisJIFstLVtuby1dM3dheV0gWy0taW50ZXJhY3RpdmVdIFstLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlXQorCSBbLS1pZ25vcmUtZGF0ZV0gWy0taWdub3JlLXNwYWNlLWNoYW5nZSB8IC0taWdub3JlLXdoaXRlc3BhY2VdCisJIFstLXdoaXRlc3BhY2U9PG9wdGlvbj5dIFstQzxuPl0gWy1wPG4+XSBbLS1kaXJlY3Rvcnk9PGRpcj5dCisJIFstLWV4Y2x1ZGU9PHBhdGg+XSBbLS1pbmNsdWRlPTxwYXRoPl0gWy0tcmVqZWN0XSBbLXEgfCAtLXF1aWV0XQorCSBbLS1bbm8tXXNjaXNzb3JzXSBbLVNbPGtleWlkPl1dIFstLXBhdGNoLWZvcm1hdD08Zm9ybWF0Pl0KKwkgWyg8bWJveD4gfCA8TWFpbGRpcj4pLi4uXQorJ2dpdCBhbScgKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1NwbGl0cyBtYWlsIG1lc3NhZ2VzIGluIGEgbWFpbGJveCBpbnRvIGNvbW1pdCBsb2cgbWVzc2FnZSwKK2F1dGhvcnNoaXAgaW5mb3JtYXRpb24gYW5kIHBhdGNoZXMsIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlCitjdXJyZW50IGJyYW5jaC4KKworT1BUSU9OUworLS0tLS0tLQorKDxtYm94Pnw8TWFpbGRpcj4pLi4uOjoKKwlUaGUgbGlzdCBvZiBtYWlsYm94IGZpbGVzIHRvIHJlYWQgcGF0Y2hlcyBmcm9tLiBJZiB5b3UgZG8gbm90CisJc3VwcGx5IHRoaXMgYXJndW1lbnQsIHRoZSBjb21tYW5kIHJlYWRzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCUlmIHlvdSBzdXBwbHkgZGlyZWN0b3JpZXMsIHRoZXkgd2lsbCBiZSB0cmVhdGVkIGFzIE1haWxkaXJzLgorCistczo6CistLXNpZ25vZmY6OgorCUFkZCBhIGBTaWduZWQtb2ZmLWJ5OmAgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UsIHVzaW5nCisJdGhlIGNvbW1pdHRlciBpZGVudGl0eSBvZiB5b3Vyc2VsZi4KKworLWs6OgorLS1rZWVwOjoKKwlQYXNzIGAta2AgZmxhZyB0byAnZ2l0IG1haWxpbmZvJyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KKworLS1rZWVwLW5vbi1wYXRjaDo6CisJUGFzcyBgLWJgIGZsYWcgdG8gJ2dpdCBtYWlsaW5mbycgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCisKKy0tW25vLV1rZWVwLWNyOjoKKwlXaXRoIGAtLWtlZXAtY3JgLCBjYWxsICdnaXQgbWFpbHNwbGl0JyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxzcGxpdFsxXSkKKwl3aXRoIHRoZSBzYW1lIG9wdGlvbiwgdG8gcHJldmVudCBpdCBmcm9tIHN0cmlwcGluZyBDUiBhdCB0aGUgZW5kIG9mCisJbGluZXMuIGBhbS5rZWVwY3JgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUKKwlkZWZhdWx0IGJlaGF2aW91ci4gIGAtLW5vLWtlZXAtY3JgIGlzIHVzZWZ1bCB0byBvdmVycmlkZSBgYW0ua2VlcGNyYC4KKworLWM6OgorLS1zY2lzc29yczo6CisJUmVtb3ZlIGV2ZXJ5dGhpbmcgaW4gYm9keSBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIChzZWUKKwlsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuIENhbiBiZSBhY3RpdmF0ZWQgYnkgZGVmYXVsdCB1c2luZworCXRoZSBgbWFpbGluZm8uc2Npc3NvcnNgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKy0tbm8tc2Npc3NvcnM6OgorCUlnbm9yZSBzY2lzc29ycyBsaW5lcyAoc2VlIGxpbmtnaXQ6Z2l0LW1haWxpbmZvWzFdKS4KKworLW06OgorLS1tZXNzYWdlLWlkOjoKKwlQYXNzIHRoZSBgLW1gIGZsYWcgdG8gJ2dpdCBtYWlsaW5mbycgKHNlZSBsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSksCisJc28gdGhhdCB0aGUgTWVzc2FnZS1JRCBoZWFkZXIgaXMgYWRkZWQgdG8gdGhlIGNvbW1pdCBtZXNzYWdlLgorCVRoZSBgYW0ubWVzc2FnZWlkYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKKwl0aGUgZGVmYXVsdCBiZWhhdmlvdXIuCisKKy0tbm8tbWVzc2FnZS1pZDo6CisJRG8gbm90IGFkZCB0aGUgTWVzc2FnZS1JRCBoZWFkZXIgdG8gdGhlIGNvbW1pdCBtZXNzYWdlLgorCWBuby1tZXNzYWdlLWlkYCBpcyB1c2VmdWwgdG8gb3ZlcnJpZGUgYGFtLm1lc3NhZ2VpZGAuCisKKy1xOjoKKy0tcXVpZXQ6OgorCUJlIHF1aWV0LiBPbmx5IHByaW50IGVycm9yIG1lc3NhZ2VzLgorCistdTo6CistLXV0Zjg6OgorCVBhc3MgYC11YCBmbGFnIHRvICdnaXQgbWFpbGluZm8nIChzZWUgbGlua2dpdDpnaXQtbWFpbGluZm9bMV0pLgorCVRoZSBwcm9wb3NlZCBjb21taXQgbG9nIG1lc3NhZ2UgdGFrZW4gZnJvbSB0aGUgZS1tYWlsCisJaXMgcmUtY29kZWQgaW50byBVVEYtOCBlbmNvZGluZyAoY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCWBpMThuLmNvbW1pdGVuY29kaW5nYCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHByb2plY3QncworCXByZWZlcnJlZCBlbmNvZGluZyBpZiBpdCBpcyBub3QgVVRGLTgpLgorKworVGhpcyB3YXMgb3B0aW9uYWwgaW4gcHJpb3IgdmVyc2lvbnMgb2YgZ2l0LCBidXQgbm93IGl0IGlzIHRoZQorZGVmYXVsdC4gICBZb3UgY2FuIHVzZSBgLS1uby11dGY4YCB0byBvdmVycmlkZSB0aGlzLgorCistLW5vLXV0Zjg6OgorCVBhc3MgYC1uYCBmbGFnIHRvICdnaXQgbWFpbGluZm8nIChzZWUKKwlsaW5rZ2l0OmdpdC1tYWlsaW5mb1sxXSkuCisKKy0zOjoKKy0tM3dheTo6CistLW5vLTN3YXk6OgorCVdoZW4gdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGNsZWFubHksIGZhbGwgYmFjayBvbgorCTMtd2F5IG1lcmdlIGlmIHRoZSBwYXRjaCByZWNvcmRzIHRoZSBpZGVudGl0eSBvZiBibG9icworCWl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvIGFuZCB3ZSBoYXZlIHRob3NlIGJsb2JzCisJYXZhaWxhYmxlIGxvY2FsbHkuIGAtLW5vLTN3YXlgIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlCisJYW0udGhyZWVXYXkgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sCisJc2VlIGFtLnRocmVlV2F5IGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1pZ25vcmUtc3BhY2UtY2hhbmdlOjoKKy0taWdub3JlLXdoaXRlc3BhY2U6OgorLS13aGl0ZXNwYWNlPTxvcHRpb24+OjoKKy1DPG4+OjoKKy1wPG4+OjoKKy0tZGlyZWN0b3J5PTxkaXI+OjoKKy0tZXhjbHVkZT08cGF0aD46OgorLS1pbmNsdWRlPTxwYXRoPjo6CistLXJlamVjdDo6CisJVGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byB0aGUgJ2dpdCBhcHBseScgKHNlZSBsaW5rZ2l0OmdpdC1hcHBseVsxXSkKKwlwcm9ncmFtIHRoYXQgYXBwbGllcworCXRoZSBwYXRjaC4KKworLS1wYXRjaC1mb3JtYXQ6OgorCUJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgd2lsbCB0cnkgdG8gZGV0ZWN0IHRoZSBwYXRjaCBmb3JtYXQKKwlhdXRvbWF0aWNhbGx5LiBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIHVzZXIgdG8gYnlwYXNzIHRoZSBhdXRvbWF0aWMKKwlkZXRlY3Rpb24gYW5kIHNwZWNpZnkgdGhlIHBhdGNoIGZvcm1hdCB0aGF0IHRoZSBwYXRjaChlcykgc2hvdWxkIGJlCisJaW50ZXJwcmV0ZWQgYXMuIFZhbGlkIGZvcm1hdHMgYXJlIG1ib3gsIHN0Z2l0LCBzdGdpdC1zZXJpZXMgYW5kIGhnLgorCistaTo6CistLWludGVyYWN0aXZlOjoKKwlSdW4gaW50ZXJhY3RpdmVseS4KKworLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZTo6CisJQnkgZGVmYXVsdCB0aGUgY29tbWFuZCByZWNvcmRzIHRoZSBkYXRlIGZyb20gdGhlIGUtbWFpbAorCW1lc3NhZ2UgYXMgdGhlIGNvbW1pdCBhdXRob3IgZGF0ZSwgYW5kIHVzZXMgdGhlIHRpbWUgb2YKKwljb21taXQgY3JlYXRpb24gYXMgdGhlIGNvbW1pdHRlciBkYXRlLiBUaGlzIGFsbG93cyB0aGUKKwl1c2VyIHRvIGxpZSBhYm91dCB0aGUgY29tbWl0dGVyIGRhdGUgYnkgdXNpbmcgdGhlIHNhbWUKKwl2YWx1ZSBhcyB0aGUgYXV0aG9yIGRhdGUuCisKKy0taWdub3JlLWRhdGU6OgorCUJ5IGRlZmF1bHQgdGhlIGNvbW1hbmQgcmVjb3JkcyB0aGUgZGF0ZSBmcm9tIHRoZSBlLW1haWwKKwltZXNzYWdlIGFzIHRoZSBjb21taXQgYXV0aG9yIGRhdGUsIGFuZCB1c2VzIHRoZSB0aW1lIG9mCisJY29tbWl0IGNyZWF0aW9uIGFzIHRoZSBjb21taXR0ZXIgZGF0ZS4gVGhpcyBhbGxvd3MgdGhlCisJdXNlciB0byBsaWUgYWJvdXQgdGhlIGF1dGhvciBkYXRlIGJ5IHVzaW5nIHRoZSBzYW1lCisJdmFsdWUgYXMgdGhlIGNvbW1pdHRlciBkYXRlLgorCistLXNraXA6OgorCVNraXAgdGhlIGN1cnJlbnQgcGF0Y2guICBUaGlzIGlzIG9ubHkgbWVhbmluZ2Z1bCB3aGVuCisJcmVzdGFydGluZyBhbiBhYm9ydGVkIHBhdGNoLgorCistU1s8a2V5aWQ+XTo6CistLWdwZy1zaWduWz08a2V5aWQ+XTo6CisJR1BHLXNpZ24gY29tbWl0cy4gVGhlIGBrZXlpZGAgYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kCisJZGVmYXVsdHMgdG8gdGhlIGNvbW1pdHRlciBpZGVudGl0eTsgaWYgc3BlY2lmaWVkLCBpdCBtdXN0IGJlCisJc3R1Y2sgdG8gdGhlIG9wdGlvbiB3aXRob3V0IGEgc3BhY2UuCisKKy0tY29udGludWU6OgorLXI6OgorLS1yZXNvbHZlZDo6CisJQWZ0ZXIgYSBwYXRjaCBmYWlsdXJlIChlLmcuIGF0dGVtcHRpbmcgdG8gYXBwbHkKKwljb25mbGljdGluZyBwYXRjaCksIHRoZSB1c2VyIGhhcyBhcHBsaWVkIGl0IGJ5IGhhbmQgYW5kCisJdGhlIGluZGV4IGZpbGUgc3RvcmVzIHRoZSByZXN1bHQgb2YgdGhlIGFwcGxpY2F0aW9uLgorCU1ha2UgYSBjb21taXQgdXNpbmcgdGhlIGF1dGhvcnNoaXAgYW5kIGNvbW1pdCBsb2cKKwlleHRyYWN0ZWQgZnJvbSB0aGUgZS1tYWlsIG1lc3NhZ2UgYW5kIHRoZSBjdXJyZW50IGluZGV4CisJZmlsZSwgYW5kIGNvbnRpbnVlLgorCistLXJlc29sdmVtc2c9PG1zZz46OgorCVdoZW4gYSBwYXRjaCBmYWlsdXJlIG9jY3VycywgPG1zZz4gd2lsbCBiZSBwcmludGVkCisJdG8gdGhlIHNjcmVlbiBiZWZvcmUgZXhpdGluZy4gIFRoaXMgb3ZlcnJpZGVzIHRoZQorCXN0YW5kYXJkIG1lc3NhZ2UgaW5mb3JtaW5nIHlvdSB0byB1c2UgYC0tY29udGludWVgCisJb3IgYC0tc2tpcGAgdG8gaGFuZGxlIHRoZSBmYWlsdXJlLiAgVGhpcyBpcyBzb2xlbHkKKwlmb3IgaW50ZXJuYWwgdXNlIGJldHdlZW4gJ2dpdCByZWJhc2UnIGFuZCAnZ2l0IGFtJy4KKworLS1hYm9ydDo6CisJUmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLgorCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1RoZSBjb21taXQgYXV0aG9yIG5hbWUgaXMgdGFrZW4gZnJvbSB0aGUgIkZyb206ICIgbGluZSBvZiB0aGUKK21lc3NhZ2UsIGFuZCBjb21taXQgYXV0aG9yIGRhdGUgaXMgdGFrZW4gZnJvbSB0aGUgIkRhdGU6ICIgbGluZQorb2YgdGhlIG1lc3NhZ2UuICBUaGUgIlN1YmplY3Q6ICIgbGluZSBpcyB1c2VkIGFzIHRoZSB0aXRsZSBvZgordGhlIGNvbW1pdCwgYWZ0ZXIgc3RyaXBwaW5nIGNvbW1vbiBwcmVmaXggIltQQVRDSCA8YW55dGhpbmc+XSIuCitUaGUgIlN1YmplY3Q6ICIgbGluZSBpcyBzdXBwb3NlZCB0byBjb25jaXNlbHkgZGVzY3JpYmUgd2hhdCB0aGUKK2NvbW1pdCBpcyBhYm91dCBpbiBvbmUgbGluZSBvZiB0ZXh0LgorCisiRnJvbTogIiBhbmQgIlN1YmplY3Q6ICIgbGluZXMgc3RhcnRpbmcgdGhlIGJvZHkgb3ZlcnJpZGUgdGhlIHJlc3BlY3RpdmUKK2NvbW1pdCBhdXRob3IgbmFtZSBhbmQgdGl0bGUgdmFsdWVzIHRha2VuIGZyb20gdGhlIGhlYWRlcnMuCisKK1RoZSBjb21taXQgbWVzc2FnZSBpcyBmb3JtZWQgYnkgdGhlIHRpdGxlIHRha2VuIGZyb20gdGhlCisiU3ViamVjdDogIiwgYSBibGFuayBsaW5lIGFuZCB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZSB1cCB0bword2hlcmUgdGhlIHBhdGNoIGJlZ2lucy4gIEV4Y2VzcyB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgZWFjaAorbGluZSBpcyBhdXRvbWF0aWNhbGx5IHN0cmlwcGVkLgorCitUaGUgcGF0Y2ggaXMgZXhwZWN0ZWQgdG8gYmUgaW5saW5lLCBkaXJlY3RseSBmb2xsb3dpbmcgdGhlCittZXNzYWdlLiAgQW55IGxpbmUgdGhhdCBpcyBvZiB0aGUgZm9ybToKKworKiB0aHJlZS1kYXNoZXMgYW5kIGVuZC1vZi1saW5lLCBvcgorKiBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCAiZGlmZiAtIiwgb3IKKyogYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggIkluZGV4OiAiCisKK2lzIHRha2VuIGFzIHRoZSBiZWdpbm5pbmcgb2YgYSBwYXRjaCwgYW5kIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UKK2lzIHRlcm1pbmF0ZWQgYmVmb3JlIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHN1Y2ggYSBsaW5lLgorCitXaGVuIGluaXRpYWxseSBpbnZva2luZyBgZ2l0IGFtYCwgeW91IGdpdmUgaXQgdGhlIG5hbWVzIG9mIHRoZSBtYWlsYm94ZXMKK3RvIHByb2Nlc3MuICBVcG9uIHNlZWluZyB0aGUgZmlyc3QgcGF0Y2ggdGhhdCBkb2VzIG5vdCBhcHBseSwgaXQKK2Fib3J0cyBpbiB0aGUgbWlkZGxlLiAgWW91IGNhbiByZWNvdmVyIGZyb20gdGhpcyBpbiBvbmUgb2YgdHdvIHdheXM6CisKKy4gc2tpcCB0aGUgY3VycmVudCBwYXRjaCBieSByZS1ydW5uaW5nIHRoZSBjb21tYW5kIHdpdGggdGhlICctLXNraXAnCisgIG9wdGlvbi4KKworLiBoYW5kIHJlc29sdmUgdGhlIGNvbmZsaWN0IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHVwZGF0ZQorICB0aGUgaW5kZXggZmlsZSB0byBicmluZyBpdCBpbnRvIGEgc3RhdGUgdGhhdCB0aGUgcGF0Y2ggc2hvdWxkCisgIGhhdmUgcHJvZHVjZWQuICBUaGVuIHJ1biB0aGUgY29tbWFuZCB3aXRoIHRoZSAnLS1jb250aW51ZScgb3B0aW9uLgorCitUaGUgY29tbWFuZCByZWZ1c2VzIHRvIHByb2Nlc3MgbmV3IG1haWxib3hlcyB1bnRpbCB0aGUgY3VycmVudAorb3BlcmF0aW9uIGlzIGZpbmlzaGVkLCBzbyBpZiB5b3UgZGVjaWRlIHRvIHN0YXJ0IG92ZXIgZnJvbSBzY3JhdGNoLAorcnVuIGBnaXQgYW0gLS1hYm9ydGAgYmVmb3JlIHJ1bm5pbmcgdGhlIGNvbW1hbmQgd2l0aCBtYWlsYm94CituYW1lcy4KKworQmVmb3JlIGFueSBwYXRjaGVzIGFyZSBhcHBsaWVkLCBPUklHX0hFQUQgaXMgc2V0IHRvIHRoZSB0aXAgb2YgdGhlCitjdXJyZW50IGJyYW5jaC4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSBoYXZlIHByb2JsZW1zIHdpdGggbXVsdGlwbGUKK2NvbW1pdHMsIGxpa2UgcnVubmluZyAnZ2l0IGFtJyBvbiB0aGUgd3JvbmcgYnJhbmNoIG9yIGFuIGVycm9yIGluIHRoZQorY29tbWl0cyB0aGF0IGlzIG1vcmUgZWFzaWx5IGZpeGVkIGJ5IGNoYW5naW5nIHRoZSBtYWlsYm94IChlLmcuCitlcnJvcnMgaW4gdGhlICJGcm9tOiIgbGluZXMpLgorCitIT09LUworLS0tLS0KK1RoaXMgY29tbWFuZCBjYW4gcnVuIGBhcHBseXBhdGNoLW1zZ2AsIGBwcmUtYXBwbHlwYXRjaGAsCithbmQgYHBvc3QtYXBwbHlwYXRjaGAgaG9va3MuICBTZWUgbGlua2dpdDpnaXRob29rc1s1XSBmb3IgbW9yZQoraW5mb3JtYXRpb24uCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtYXBwbHlbMV0uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYW5ub3RhdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYW5ub3RhdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZmQ0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hbm5vdGF0ZS50eHQKQEAgLTAsMCArMSwzMyBAQAorZ2l0LWFubm90YXRlKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWFubm90YXRlIC0gQW5ub3RhdGUgZmlsZSBsaW5lcyB3aXRoIGNvbW1pdCBpbmZvcm1hdGlvbgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYW5ub3RhdGUnIFtvcHRpb25zXSBmaWxlIFtyZXZpc2lvbl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitBbm5vdGF0ZXMgZWFjaCBsaW5lIGluIHRoZSBnaXZlbiBmaWxlIHdpdGggaW5mb3JtYXRpb24gZnJvbSB0aGUgY29tbWl0Cit3aGljaCBpbnRyb2R1Y2VkIHRoZSBsaW5lLiBPcHRpb25hbGx5IGFubm90YXRlcyBmcm9tIGEgZ2l2ZW4gcmV2aXNpb24uCisKK1RoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIGNvbW1hbmQgYW5kIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdIGlzIHRoYXQKK3RoZXkgdXNlIHNsaWdodGx5IGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0cywgYW5kIHRoaXMgY29tbWFuZCBleGlzdHMgb25seQorZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdG8gc3VwcG9ydCBleGlzdGluZyBzY3JpcHRzLCBhbmQgcHJvdmlkZSBhIG1vcmUKK2ZhbWlsaWFyIGNvbW1hbmQgbmFtZSBmb3IgcGVvcGxlIGNvbWluZyBmcm9tIG90aGVyIFNDTSBzeXN0ZW1zLgorCitPUFRJT05TCistLS0tLS0tCitpbmNsdWRlOjpibGFtZS1vcHRpb25zLnR4dFtdCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtYmxhbWVbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcHBseS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDllZDZhMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWFwcGx5LnR4dApAQCAtMCwwICsxLDI3NCBAQAorZ2l0LWFwcGx5KDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWFwcGx5IC0gQXBwbHkgYSBwYXRjaCB0byBmaWxlcyBhbmQvb3IgdG8gdGhlIGluZGV4CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGFwcGx5JyBbLS1zdGF0XSBbLS1udW1zdGF0XSBbLS1zdW1tYXJ5XSBbLS1jaGVja10gWy0taW5kZXhdIFstLTN3YXldCisJICBbLS1hcHBseV0gWy0tbm8tYWRkXSBbLS1idWlsZC1mYWtlLWFuY2VzdG9yPTxmaWxlPl0gWy1SIHwgLS1yZXZlcnNlXQorCSAgWy0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IHwgLS1iaW5hcnldIFstLXJlamVjdF0gWy16XQorCSAgWy1wPG4+XSBbLUM8bj5dIFstLWluYWNjdXJhdGUtZW9mXSBbLS1yZWNvdW50XSBbLS1jYWNoZWRdCisJICBbLS1pZ25vcmUtc3BhY2UtY2hhbmdlIHwgLS1pZ25vcmUtd2hpdGVzcGFjZSBdCisJICBbLS13aGl0ZXNwYWNlPShub3dhcm58d2FybnxmaXh8ZXJyb3J8ZXJyb3ItYWxsKV0KKwkgIFstLWV4Y2x1ZGU9PHBhdGg+XSBbLS1pbmNsdWRlPTxwYXRoPl0gWy0tZGlyZWN0b3J5PTxyb290Pl0KKwkgIFstLXZlcmJvc2VdIFstLXVuc2FmZS1wYXRoc10gWzxwYXRjaD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgdGhlIHN1cHBsaWVkIGRpZmYgb3V0cHV0IChpLmUuICJhIHBhdGNoIikgYW5kIGFwcGxpZXMgaXQgdG8gZmlsZXMuCitXaXRoIHRoZSBgLS1pbmRleGAgb3B0aW9uIHRoZSBwYXRjaCBpcyBhbHNvIGFwcGxpZWQgdG8gdGhlIGluZGV4LCBhbmQKK3dpdGggdGhlIGAtLWNhY2hlZGAgb3B0aW9uIHRoZSBwYXRjaCBpcyBvbmx5IGFwcGxpZWQgdG8gdGhlIGluZGV4LgorV2l0aG91dCB0aGVzZSBvcHRpb25zLCB0aGUgY29tbWFuZCBhcHBsaWVzIHRoZSBwYXRjaCBvbmx5IHRvIGZpbGVzLAorYW5kIGRvZXMgbm90IHJlcXVpcmUgdGhlbSB0byBiZSBpbiBhIEdpdCByZXBvc2l0b3J5LgorCitUaGlzIGNvbW1hbmQgYXBwbGllcyB0aGUgcGF0Y2ggYnV0IGRvZXMgbm90IGNyZWF0ZSBhIGNvbW1pdC4gIFVzZQorbGlua2dpdDpnaXQtYW1bMV0gdG8gY3JlYXRlIGNvbW1pdHMgZnJvbSBwYXRjaGVzIGdlbmVyYXRlZCBieQorbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIGFuZC9vciByZWNlaXZlZCBieSBlbWFpbC4KKworT1BUSU9OUworLS0tLS0tLQorPHBhdGNoPi4uLjo6CisJVGhlIGZpbGVzIHRvIHJlYWQgdGhlIHBhdGNoIGZyb20uICAnLScgY2FuIGJlIHVzZWQgdG8gcmVhZAorCWZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCistLXN0YXQ6OgorCUluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZQorCWlucHV0LiAgVHVybnMgb2ZmICJhcHBseSIuCisKKy0tbnVtc3RhdDo6CisJU2ltaWxhciB0byBgLS1zdGF0YCwgYnV0IHNob3dzIHRoZSBudW1iZXIgb2YgYWRkZWQgYW5kCisJZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIGFuZCB0aGUgcGF0aG5hbWUgd2l0aG91dAorCWFiYnJldmlhdGlvbiwgdG8gbWFrZSBpdCBtb3JlIG1hY2hpbmUgZnJpZW5kbHkuICBGb3IKKwliaW5hcnkgZmlsZXMsIG91dHB1dHMgdHdvIGAtYCBpbnN0ZWFkIG9mIHNheWluZworCWAwIDBgLiAgVHVybnMgb2ZmICJhcHBseSIuCisKKy0tc3VtbWFyeTo6CisJSW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIGNvbmRlbnNlZAorCXN1bW1hcnkgb2YgaW5mb3JtYXRpb24gb2J0YWluZWQgZnJvbSBnaXQgZGlmZiBleHRlbmRlZAorCWhlYWRlcnMsIHN1Y2ggYXMgY3JlYXRpb25zLCByZW5hbWVzIGFuZCBtb2RlIGNoYW5nZXMuCisJVHVybnMgb2ZmICJhcHBseSIuCisKKy0tY2hlY2s6OgorCUluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzCisJYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCB3b3JraW5nIHRyZWUgYW5kL29yIHRoZSBpbmRleAorCWZpbGUgYW5kIGRldGVjdHMgZXJyb3JzLiAgVHVybnMgb2ZmICJhcHBseSIuCisKKy0taW5kZXg6OgorCVdoZW4gYC0tY2hlY2tgIGlzIGluIGVmZmVjdCwgb3Igd2hlbiBhcHBseWluZyB0aGUgcGF0Y2gKKwkod2hpY2ggaXMgdGhlIGRlZmF1bHQgd2hlbiBub25lIG9mIHRoZSBvcHRpb25zIHRoYXQKKwlkaXNhYmxlcyBpdCBpcyBpbiBlZmZlY3QpLCBtYWtlIHN1cmUgdGhlIHBhdGNoIGlzCisJYXBwbGljYWJsZSB0byB3aGF0IHRoZSBjdXJyZW50IGluZGV4IGZpbGUgcmVjb3Jkcy4gIElmCisJdGhlIGZpbGUgdG8gYmUgcGF0Y2hlZCBpbiB0aGUgd29ya2luZyB0cmVlIGlzIG5vdAorCXVwLXRvLWRhdGUsIGl0IGlzIGZsYWdnZWQgYXMgYW4gZXJyb3IuICBUaGlzIGZsYWcgYWxzbworCWNhdXNlcyB0aGUgaW5kZXggZmlsZSB0byBiZSB1cGRhdGVkLgorCistLWNhY2hlZDo6CisJQXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUuIEluc3RlYWQgdGFrZSB0aGUKKwljYWNoZWQgZGF0YSwgYXBwbHkgdGhlIHBhdGNoLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgaW5kZXgKKwl3aXRob3V0IHVzaW5nIHRoZSB3b3JraW5nIHRyZWUuIFRoaXMgaW1wbGllcyBgLS1pbmRleGAuCisKKy0zOjoKKy0tM3dheTo6CisJV2hlbiB0aGUgcGF0Y2ggZG9lcyBub3QgYXBwbHkgY2xlYW5seSwgZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlIGlmCisJdGhlIHBhdGNoIHJlY29yZHMgdGhlIGlkZW50aXR5IG9mIGJsb2JzIGl0IGlzIHN1cHBvc2VkIHRvIGFwcGx5IHRvLAorCWFuZCB3ZSBoYXZlIHRob3NlIGJsb2JzIGF2YWlsYWJsZSBsb2NhbGx5LCBwb3NzaWJseSBsZWF2aW5nIHRoZQorCWNvbmZsaWN0IG1hcmtlcnMgaW4gdGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgZm9yIHRoZSB1c2VyIHRvCisJcmVzb2x2ZS4gIFRoaXMgb3B0aW9uIGltcGxpZXMgdGhlIGAtLWluZGV4YCBvcHRpb24sIGFuZCBpcyBpbmNvbXBhdGlibGUKKwl3aXRoIHRoZSBgLS1yZWplY3RgIGFuZCB0aGUgYC0tY2FjaGVkYCBvcHRpb25zLgorCistLWJ1aWxkLWZha2UtYW5jZXN0b3I9PGZpbGU+OjoKKwlOZXdlciAnZ2l0IGRpZmYnIG91dHB1dCBoYXMgZW1iZWRkZWQgJ2luZGV4IGluZm9ybWF0aW9uJworCWZvciBlYWNoIGJsb2IgdG8gaGVscCBpZGVudGlmeSB0aGUgb3JpZ2luYWwgdmVyc2lvbiB0aGF0CisJdGhlIHBhdGNoIGFwcGxpZXMgdG8uICBXaGVuIHRoaXMgZmxhZyBpcyBnaXZlbiwgYW5kIGlmCisJdGhlIG9yaWdpbmFsIHZlcnNpb25zIG9mIHRoZSBibG9icyBhcmUgYXZhaWxhYmxlIGxvY2FsbHksCisJYnVpbGRzIGEgdGVtcG9yYXJ5IGluZGV4IGNvbnRhaW5pbmcgdGhvc2UgYmxvYnMuCisrCitXaGVuIGEgcHVyZSBtb2RlIGNoYW5nZSBpcyBlbmNvdW50ZXJlZCAod2hpY2ggaGFzIG5vIGluZGV4IGluZm9ybWF0aW9uKSwKK3RoZSBpbmZvcm1hdGlvbiBpcyByZWFkIGZyb20gdGhlIGN1cnJlbnQgaW5kZXggaW5zdGVhZC4KKworLVI6OgorLS1yZXZlcnNlOjoKKwlBcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZS4KKworLS1yZWplY3Q6OgorCUZvciBhdG9taWNpdHksICdnaXQgYXBwbHknIGJ5IGRlZmF1bHQgZmFpbHMgdGhlIHdob2xlIHBhdGNoIGFuZAorCWRvZXMgbm90IHRvdWNoIHRoZSB3b3JraW5nIHRyZWUgd2hlbiBzb21lIG9mIHRoZSBodW5rcworCWRvIG5vdCBhcHBseS4gIFRoaXMgb3B0aW9uIG1ha2VzIGl0IGFwcGx5CisJdGhlIHBhcnRzIG9mIHRoZSBwYXRjaCB0aGF0IGFyZSBhcHBsaWNhYmxlLCBhbmQgbGVhdmUgdGhlCisJcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcy4KKworLXo6OgorCVdoZW4gYC0tbnVtc3RhdGAgaGFzIGJlZW4gZ2l2ZW4sIGRvIG5vdCBtdW5nZSBwYXRobmFtZXMsCisJYnV0IHVzZSBhIE5VTC10ZXJtaW5hdGVkIG1hY2hpbmUtcmVhZGFibGUgZm9ybWF0LgorKworV2l0aG91dCB0aGlzIG9wdGlvbiwgZWFjaCBwYXRobmFtZSBvdXRwdXQgd2lsbCBoYXZlIFRBQiwgTEYsIGRvdWJsZSBxdW90ZXMsCithbmQgYmFja3NsYXNoIGNoYXJhY3RlcnMgcmVwbGFjZWQgd2l0aCBgXHRgLCBgXG5gLCBgXCJgLCBhbmQgYFxcYCwKK3Jlc3BlY3RpdmVseSwgYW5kIHRoZSBwYXRobmFtZSB3aWxsIGJlIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMgaWYKK2FueSBvZiB0aG9zZSByZXBsYWNlbWVudHMgb2NjdXJyZWQuCisKKy1wPG4+OjoKKwlSZW1vdmUgPG4+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMuIFRoZQorCWRlZmF1bHQgaXMgMS4KKworLUM8bj46OgorCUVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2Ygc3Vycm91bmRpbmcgY29udGV4dCBtYXRjaCBiZWZvcmUKKwlhbmQgYWZ0ZXIgZWFjaCBjaGFuZ2UuICBXaGVuIGZld2VyIGxpbmVzIG9mIHN1cnJvdW5kaW5nCisJY29udGV4dCBleGlzdCB0aGV5IGFsbCBtdXN0IG1hdGNoLiAgQnkgZGVmYXVsdCBubyBjb250ZXh0IGlzCisJZXZlciBpZ25vcmVkLgorCistLXVuaWRpZmYtemVybzo6CisJQnkgZGVmYXVsdCwgJ2dpdCBhcHBseScgZXhwZWN0cyB0aGF0IHRoZSBwYXRjaCBiZWluZworCWFwcGxpZWQgaXMgYSB1bmlmaWVkIGRpZmYgd2l0aCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0LgorCVRoaXMgcHJvdmlkZXMgZ29vZCBzYWZldHkgbWVhc3VyZXMsIGJ1dCBicmVha3MgZG93biB3aGVuCisJYXBwbHlpbmcgYSBkaWZmIGdlbmVyYXRlZCB3aXRoIGAtLXVuaWZpZWQ9MGAuIFRvIGJ5cGFzcyB0aGVzZQorCWNoZWNrcyB1c2UgYC0tdW5pZGlmZi16ZXJvYC4KKysKK05vdGUsIGZvciB0aGUgcmVhc29ucyBzdGF0ZWQgYWJvdmUgdXNhZ2Ugb2YgY29udGV4dC1mcmVlIHBhdGNoZXMgaXMKK2Rpc2NvdXJhZ2VkLgorCistLWFwcGx5OjoKKwlJZiB5b3UgdXNlIGFueSBvZiB0aGUgb3B0aW9ucyBtYXJrZWQgIlR1cm5zIG9mZgorCSdhcHBseSciIGFib3ZlLCAnZ2l0IGFwcGx5JyByZWFkcyBhbmQgb3V0cHV0cyB0aGUKKwlyZXF1ZXN0ZWQgaW5mb3JtYXRpb24gd2l0aG91dCBhY3R1YWxseSBhcHBseWluZyB0aGUKKwlwYXRjaC4gIEdpdmUgdGhpcyBmbGFnIGFmdGVyIHRob3NlIGZsYWdzIHRvIGFsc28gYXBwbHkKKwl0aGUgcGF0Y2guCisKKy0tbm8tYWRkOjoKKwlXaGVuIGFwcGx5aW5nIGEgcGF0Y2gsIGlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUKKwlwYXRjaC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gZXh0cmFjdCB0aGUgY29tbW9uIHBhcnQgYmV0d2VlbgorCXR3byBmaWxlcyBieSBmaXJzdCBydW5uaW5nICdkaWZmJyBvbiB0aGVtIGFuZCBhcHBseWluZworCXRoZSByZXN1bHQgd2l0aCB0aGlzIG9wdGlvbiwgd2hpY2ggd291bGQgYXBwbHkgdGhlCisJZGVsZXRpb24gcGFydCBidXQgbm90IHRoZSBhZGRpdGlvbiBwYXJ0LgorCistLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudDo6CistLWJpbmFyeTo6CisJSGlzdG9yaWNhbGx5IHdlIGRpZCBub3QgYWxsb3cgYmluYXJ5IHBhdGNoIGFwcGxpZWQKKwl3aXRob3V0IGFuIGV4cGxpY2l0IHBlcm1pc3Npb24gZnJvbSB0aGUgdXNlciwgYW5kIHRoaXMKKwlmbGFnIHdhcyB0aGUgd2F5IHRvIGRvIHNvLiAgQ3VycmVudGx5IHdlIGFsd2F5cyBhbGxvdyBiaW5hcnkKKwlwYXRjaCBhcHBsaWNhdGlvbiwgc28gdGhpcyBpcyBhIG5vLW9wLgorCistLWV4Y2x1ZGU9PHBhdGgtcGF0dGVybj46OgorCURvbid0IGFwcGx5IGNoYW5nZXMgdG8gZmlsZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGggcGF0dGVybi4gVGhpcyBjYW4KKwliZSB1c2VmdWwgd2hlbiBpbXBvcnRpbmcgcGF0Y2hzZXRzLCB3aGVyZSB5b3Ugd2FudCB0byBleGNsdWRlIGNlcnRhaW4KKwlmaWxlcyBvciBkaXJlY3Rvcmllcy4KKworLS1pbmNsdWRlPTxwYXRoLXBhdHRlcm4+OjoKKwlBcHBseSBjaGFuZ2VzIHRvIGZpbGVzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIHBhdHRlcm4uIFRoaXMgY2FuCisJYmUgdXNlZnVsIHdoZW4gaW1wb3J0aW5nIHBhdGNoc2V0cywgd2hlcmUgeW91IHdhbnQgdG8gaW5jbHVkZSBjZXJ0YWluCisJZmlsZXMgb3IgZGlyZWN0b3JpZXMuCisrCitXaGVuIGAtLWV4Y2x1ZGVgIGFuZCBgLS1pbmNsdWRlYCBwYXR0ZXJucyBhcmUgdXNlZCwgdGhleSBhcmUgZXhhbWluZWQgaW4gdGhlCitvcmRlciB0aGV5IGFwcGVhciBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgdGhlIGZpcnN0IG1hdGNoIGRldGVybWluZXMgaWYgYQorcGF0Y2ggdG8gZWFjaCBwYXRoIGlzIHVzZWQuICBBIHBhdGNoIHRvIGEgcGF0aCB0aGF0IGRvZXMgbm90IG1hdGNoIGFueQoraW5jbHVkZS9leGNsdWRlIHBhdHRlcm4gaXMgdXNlZCBieSBkZWZhdWx0IGlmIHRoZXJlIGlzIG5vIGluY2x1ZGUgcGF0dGVybgorb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIGlnbm9yZWQgaWYgdGhlcmUgaXMgYW55IGluY2x1ZGUgcGF0dGVybi4KKworLS1pZ25vcmUtc3BhY2UtY2hhbmdlOjoKKy0taWdub3JlLXdoaXRlc3BhY2U6OgorCVdoZW4gYXBwbHlpbmcgYSBwYXRjaCwgaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSBpbiBjb250ZXh0CisJbGluZXMgaWYgbmVjZXNzYXJ5LgorCUNvbnRleHQgbGluZXMgd2lsbCBwcmVzZXJ2ZSB0aGVpciB3aGl0ZXNwYWNlLCBhbmQgdGhleSB3aWxsIG5vdAorCXVuZGVyZ28gd2hpdGVzcGFjZSBmaXhpbmcgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhlCisJYC0td2hpdGVzcGFjZWAgb3B0aW9uLiBOZXcgbGluZXMgd2lsbCBzdGlsbCBiZSBmaXhlZCwgdGhvdWdoLgorCistLXdoaXRlc3BhY2U9PGFjdGlvbj46OgorCVdoZW4gYXBwbHlpbmcgYSBwYXRjaCwgZGV0ZWN0IGEgbmV3IG9yIG1vZGlmaWVkIGxpbmUgdGhhdCBoYXMKKwl3aGl0ZXNwYWNlIGVycm9ycy4gIFdoYXQgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSBlcnJvcnMgaXMKKwljb250cm9sbGVkIGJ5IGBjb3JlLndoaXRlc3BhY2VgIGNvbmZpZ3VyYXRpb24uICBCeSBkZWZhdWx0LAorCXRyYWlsaW5nIHdoaXRlc3BhY2VzIChpbmNsdWRpbmcgbGluZXMgdGhhdCBzb2xlbHkgY29uc2lzdCBvZgorCXdoaXRlc3BhY2VzKSBhbmQgYSBzcGFjZSBjaGFyYWN0ZXIgdGhhdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZAorCWJ5IGEgdGFiIGNoYXJhY3RlciBpbnNpZGUgdGhlIGluaXRpYWwgaW5kZW50IG9mIHRoZSBsaW5lIGFyZQorCWNvbnNpZGVyZWQgd2hpdGVzcGFjZSBlcnJvcnMuCisrCitCeSBkZWZhdWx0LCB0aGUgY29tbWFuZCBvdXRwdXRzIHdhcm5pbmcgbWVzc2FnZXMgYnV0IGFwcGxpZXMgdGhlIHBhdGNoLgorV2hlbiBgZ2l0LWFwcGx5YCBpcyB1c2VkIGZvciBzdGF0aXN0aWNzIGFuZCBub3QgYXBwbHlpbmcgYQorcGF0Y2gsIGl0IGRlZmF1bHRzIHRvIGBub3dhcm5gLgorKworWW91IGNhbiB1c2UgZGlmZmVyZW50IGA8YWN0aW9uPmAgdmFsdWVzIHRvIGNvbnRyb2wgdGhpcworYmVoYXZpb3I6CisrCisqIGBub3dhcm5gIHR1cm5zIG9mZiB0aGUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3YXJuaW5nLgorKiBgd2FybmAgb3V0cHV0cyB3YXJuaW5ncyBmb3IgYSBmZXcgc3VjaCBlcnJvcnMsIGJ1dCBhcHBsaWVzIHRoZQorICBwYXRjaCBhcy1pcyAoZGVmYXVsdCkuCisqIGBmaXhgIG91dHB1dHMgd2FybmluZ3MgZm9yIGEgZmV3IHN1Y2ggZXJyb3JzLCBhbmQgYXBwbGllcyB0aGUKKyAgcGF0Y2ggYWZ0ZXIgZml4aW5nIHRoZW0gKGBzdHJpcGAgaXMgYSBzeW5vbnltIC0tLSB0aGUgdG9vbAorICB1c2VkIHRvIGNvbnNpZGVyIG9ubHkgdHJhaWxpbmcgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFzIGVycm9ycywgYW5kIHRoZQorICBmaXggaW52b2x2ZWQgJ3N0cmlwcGluZycgdGhlbSwgYnV0IG1vZGVybiBHaXRzIGRvIG1vcmUpLgorKiBgZXJyb3JgIG91dHB1dHMgd2FybmluZ3MgZm9yIGEgZmV3IHN1Y2ggZXJyb3JzLCBhbmQgcmVmdXNlcworICB0byBhcHBseSB0aGUgcGF0Y2guCisqIGBlcnJvci1hbGxgIGlzIHNpbWlsYXIgdG8gYGVycm9yYCBidXQgc2hvd3MgYWxsIGVycm9ycy4KKworLS1pbmFjY3VyYXRlLWVvZjo6CisJVW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBzb21lIHZlcnNpb25zIG9mICdkaWZmJyBkbyBub3QgY29ycmVjdGx5CisJZGV0ZWN0IGEgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBBcyBhIHJlc3VsdCwgcGF0Y2hlcworCWNyZWF0ZWQgYnkgc3VjaCAnZGlmZicgcHJvZ3JhbXMgZG8gbm90IHJlY29yZCBpbmNvbXBsZXRlIGxpbmVzCisJY29ycmVjdGx5LiBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGFwcGx5aW5nIHN1Y2ggcGF0Y2hlcyBieQorCXdvcmtpbmcgYXJvdW5kIHRoaXMgYnVnLgorCistdjo6CistLXZlcmJvc2U6OgorCVJlcG9ydCBwcm9ncmVzcyB0byBzdGRlcnIuIEJ5IGRlZmF1bHQsIG9ubHkgYSBtZXNzYWdlIGFib3V0IHRoZQorCWN1cnJlbnQgcGF0Y2ggYmVpbmcgYXBwbGllZCB3aWxsIGJlIHByaW50ZWQuIFRoaXMgb3B0aW9uIHdpbGwgY2F1c2UKKwlhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRvIGJlIHJlcG9ydGVkLgorCistLXJlY291bnQ6OgorCURvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycywgYnV0IGluZmVyIHRoZW0KKwlieSBpbnNwZWN0aW5nIHRoZSBwYXRjaCAoZS5nLiBhZnRlciBlZGl0aW5nIHRoZSBwYXRjaCB3aXRob3V0CisJYWRqdXN0aW5nIHRoZSBodW5rIGhlYWRlcnMgYXBwcm9wcmlhdGVseSkuCisKKy0tZGlyZWN0b3J5PTxyb290Pjo6CisJUHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcy4gIElmIGEgIi1wIiBhcmd1bWVudCB3YXMgYWxzbyBwYXNzZWQsCisJaXQgaXMgYXBwbGllZCBiZWZvcmUgcHJlcGVuZGluZyB0aGUgbmV3IHJvb3QuCisrCitGb3IgZXhhbXBsZSwgYSBwYXRjaCB0aGF0IHRhbGtzIGFib3V0IHVwZGF0aW5nIGBhL2dpdC1ndWkuc2hgIHRvIGBiL2dpdC1ndWkuc2hgCitjYW4gYmUgYXBwbGllZCB0byB0aGUgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlIGBtb2R1bGVzL2dpdC1ndWkvZ2l0LWd1aS5zaGAgYnkKK3J1bm5pbmcgYGdpdCBhcHBseSAtLWRpcmVjdG9yeT1tb2R1bGVzL2dpdC1ndWlgLgorCistLXVuc2FmZS1wYXRoczo6CisJQnkgZGVmYXVsdCwgYSBwYXRjaCB0aGF0IGFmZmVjdHMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhCisJKGVpdGhlciBhIEdpdCBjb250cm9sbGVkIHdvcmtpbmcgdHJlZSwgb3IgdGhlIGN1cnJlbnQgd29ya2luZworCWRpcmVjdG9yeSB3aGVuICJnaXQgYXBwbHkiIGlzIHVzZWQgYXMgYSByZXBsYWNlbWVudCBvZiBHTlUKKwlwYXRjaCkgaXMgcmVqZWN0ZWQgYXMgYSBtaXN0YWtlIChvciBhIG1pc2NoaWVmKS4KKysKK1doZW4gYGdpdCBhcHBseWAgaXMgdXNlZCBhcyBhICJiZXR0ZXIgR05VIHBhdGNoIiwgdGhlIHVzZXIgY2FuIHBhc3MKK3RoZSBgLS11bnNhZmUtcGF0aHNgIG9wdGlvbiB0byBvdmVycmlkZSB0aGlzIHNhZmV0eSBjaGVjay4gIFRoaXMgb3B0aW9uCitoYXMgbm8gZWZmZWN0IHdoZW4gYC0taW5kZXhgIG9yIGAtLWNhY2hlZGAgaXMgaW4gdXNlLgorCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK2FwcGx5Lmlnbm9yZVdoaXRlc3BhY2U6OgorCVNldCB0byAnY2hhbmdlJyBpZiB5b3Ugd2FudCBjaGFuZ2VzIGluIHdoaXRlc3BhY2UgdG8gYmUgaWdub3JlZCBieSBkZWZhdWx0LgorCVNldCB0byBvbmUgb2Y6IG5vLCBub25lLCBuZXZlciwgZmFsc2UgaWYgeW91IHdhbnQgY2hhbmdlcyBpbgorCXdoaXRlc3BhY2UgdG8gYmUgc2lnbmlmaWNhbnQuCithcHBseS53aGl0ZXNwYWNlOjoKKwlXaGVuIG5vIGAtLXdoaXRlc3BhY2VgIGZsYWcgaXMgZ2l2ZW4gZnJvbSB0aGUgY29tbWFuZAorCWxpbmUsIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQuCisKK1N1Ym1vZHVsZXMKKy0tLS0tLS0tLS0KK0lmIHRoZSBwYXRjaCBjb250YWlucyBhbnkgY2hhbmdlcyB0byBzdWJtb2R1bGVzIHRoZW4gJ2dpdCBhcHBseScKK3RyZWF0cyB0aGVzZSBjaGFuZ2VzIGFzIGZvbGxvd3MuCisKK0lmIGAtLWluZGV4YCBpcyBzcGVjaWZpZWQgKGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSksIHRoZW4gdGhlIHN1Ym1vZHVsZQorY29tbWl0cyBtdXN0IG1hdGNoIHRoZSBpbmRleCBleGFjdGx5IGZvciB0aGUgcGF0Y2ggdG8gYXBwbHkuICBJZiBhbnkKK29mIHRoZSBzdWJtb2R1bGVzIGFyZSBjaGVja2VkLW91dCwgdGhlbiB0aGVzZSBjaGVjay1vdXRzIGFyZSBjb21wbGV0ZWx5CitpZ25vcmVkLCBpLmUuLCB0aGV5IGFyZSBub3QgcmVxdWlyZWQgdG8gYmUgdXAtdG8tZGF0ZSBvciBjbGVhbiBhbmQgdGhleQorYXJlIG5vdCB1cGRhdGVkLgorCitJZiBgLS1pbmRleGAgaXMgbm90IHNwZWNpZmllZCwgdGhlbiB0aGUgc3VibW9kdWxlIGNvbW1pdHMgaW4gdGhlIHBhdGNoCithcmUgaWdub3JlZCBhbmQgb25seSB0aGUgYWJzZW5jZSBvciBwcmVzZW5jZSBvZiB0aGUgY29ycmVzcG9uZGluZworc3ViZGlyZWN0b3J5IGlzIGNoZWNrZWQgYW5kIChpZiBwb3NzaWJsZSkgdXBkYXRlZC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1hbVsxXS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpbXBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2M2I5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaW1wb3J0LnR4dApAQCAtMCwwICsxLDExMiBAQAorZ2l0LWFyY2hpbXBvcnQoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1hcmNoaW1wb3J0IC0gSW1wb3J0IGFuIEFyY2ggcmVwb3NpdG9yeSBpbnRvIEdpdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBhcmNoaW1wb3J0JyBbLWhdIFstdl0gWy1vXSBbLWFdIFstZl0gWy1UXSBbLUQgZGVwdGhdIFstdCB0ZW1wZGlyXQorICAgICAgICAgICAgICAgPGFyY2hpdmUvYnJhbmNoPls6PGdpdC1icmFuY2g+XSAuLi4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitJbXBvcnRzIGEgcHJvamVjdCBmcm9tIG9uZSBvciBtb3JlIEFyY2ggcmVwb3NpdG9yaWVzLiBJdCB3aWxsIGZvbGxvdyBicmFuY2hlcworYW5kIHJlcG9zaXRvcmllcyB3aXRoaW4gdGhlIG5hbWVzcGFjZXMgZGVmaW5lZCBieSB0aGUgPGFyY2hpdmUvYnJhbmNoPgorcGFyYW1ldGVycyBzdXBwbGllZC4gSWYgaXQgY2Fubm90IGZpbmQgdGhlIHJlbW90ZSBicmFuY2ggYSBtZXJnZSBjb21lcyBmcm9tCitpdCB3aWxsIGp1c3QgaW1wb3J0IGl0IGFzIGEgcmVndWxhciBjb21taXQuIElmIGl0IGNhbiBmaW5kIGl0LCBpdCB3aWxsIG1hcmsgaXQKK2FzIGEgbWVyZ2Ugd2hlbmV2ZXIgcG9zc2libGUgKHNlZSBkaXNjdXNzaW9uIGJlbG93KS4KKworVGhlIHNjcmlwdCBleHBlY3RzIHlvdSB0byBwcm92aWRlIHRoZSBrZXkgcm9vdHMgd2hlcmUgaXQgY2FuIHN0YXJ0IHRoZSBpbXBvcnQKK2Zyb20gYW4gJ2luaXRpYWwgaW1wb3J0JyBvciAndGFnJyB0eXBlIG9mIEFyY2ggY29tbWl0LiBJdCB3aWxsIGZvbGxvdyBhbmQKK2ltcG9ydCBuZXcgYnJhbmNoZXMgd2l0aGluIHRoZSBwcm92aWRlZCByb290cy4KKworSXQgZXhwZWN0cyB0byBiZSBkZWFsaW5nIHdpdGggb25lIHByb2plY3Qgb25seS4gSWYgaXQgc2VlcworYnJhbmNoZXMgdGhhdCBoYXZlIGRpZmZlcmVudCByb290cywgaXQgd2lsbCByZWZ1c2UgdG8gcnVuLiBJbiB0aGF0IGNhc2UsCitlZGl0IHlvdXIgPGFyY2hpdmUvYnJhbmNoPiBwYXJhbWV0ZXJzIHRvIGRlZmluZSBjbGVhcmx5IHRoZSBzY29wZSBvZiB0aGUKK2ltcG9ydC4KKworJ2dpdCBhcmNoaW1wb3J0JyB1c2VzIGB0bGFgIGV4dGVuc2l2ZWx5IGluIHRoZSBiYWNrZ3JvdW5kIHRvIGFjY2VzcyB0aGUKK0FyY2ggcmVwb3NpdG9yeS4KK01ha2Ugc3VyZSB5b3UgaGF2ZSBhIHJlY2VudCB2ZXJzaW9uIG9mIGB0bGFgIGF2YWlsYWJsZSBpbiB0aGUgcGF0aC4gYHRsYWAgbXVzdAora25vdyBhYm91dCB0aGUgcmVwb3NpdG9yaWVzIHlvdSBwYXNzIHRvICdnaXQgYXJjaGltcG9ydCcuCisKK0ZvciB0aGUgaW5pdGlhbCBpbXBvcnQsICdnaXQgYXJjaGltcG9ydCcgZXhwZWN0cyB0byBmaW5kIGl0c2VsZiBpbiBhbiBlbXB0eQorZGlyZWN0b3J5LiBUbyBmb2xsb3cgdGhlIGRldmVsb3BtZW50IG9mIGEgcHJvamVjdCB0aGF0IHVzZXMgQXJjaCwgcmVydW4KKydnaXQgYXJjaGltcG9ydCcgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIHRoZSBpbml0aWFsIGltcG9ydCB0byBwZXJmb3JtCitpbmNyZW1lbnRhbCBpbXBvcnRzLgorCitXaGlsZSAnZ2l0IGFyY2hpbXBvcnQnIHdpbGwgdHJ5IHRvIGNyZWF0ZSBzZW5zaWJsZSBicmFuY2ggbmFtZXMgZm9yIHRoZQorYXJjaGl2ZXMgdGhhdCBpdCBpbXBvcnRzLCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgR2l0IGJyYW5jaCBuYW1lcworbWFudWFsbHkuICBUbyBkbyBzbywgd3JpdGUgYSBHaXQgYnJhbmNoIG5hbWUgYWZ0ZXIgZWFjaCA8YXJjaGl2ZS9icmFuY2g+CitwYXJhbWV0ZXIsIHNlcGFyYXRlZCBieSBhIGNvbG9uLiAgVGhpcyB3YXksIHlvdSBjYW4gc2hvcnRlbiB0aGUgQXJjaAorYnJhbmNoIG5hbWVzIGFuZCBjb252ZXJ0IEFyY2ggamFyZ29uIHRvIEdpdCBqYXJnb24sIGZvciBleGFtcGxlIG1hcHBpbmcgYQorIlBST0pFQ1R7bGl0ZGR9ZGV2b3tsaXRkZH1WRVJTSU9OIiBicmFuY2ggdG8gIm1hc3RlciIuCisKK0Fzc29jaWF0aW5nIG11bHRpcGxlIEFyY2ggYnJhbmNoZXMgdG8gb25lIEdpdCBicmFuY2ggaXMgcG9zc2libGU7IHRoZQorcmVzdWx0IHdpbGwgbWFrZSB0aGUgbW9zdCBzZW5zZSBvbmx5IGlmIG5vIGNvbW1pdHMgYXJlIG1hZGUgdG8gdGhlIGZpcnN0CiticmFuY2gsIGFmdGVyIHRoZSBzZWNvbmQgYnJhbmNoIGlzIGNyZWF0ZWQuICBTdGlsbCwgdGhpcyBpcyB1c2VmdWwgdG8KK2NvbnZlcnQgQXJjaCByZXBvc2l0b3JpZXMgdGhhdCBoYWQgYmVlbiByb3RhdGVkIHBlcmlvZGljYWxseS4KKworCitNRVJHRVMKKy0tLS0tLQorUGF0Y2ggbWVyZ2UgZGF0YSBmcm9tIEFyY2ggaXMgdXNlZCB0byBtYXJrIG1lcmdlcyBpbiBHaXQgYXMgd2VsbC4gR2l0Citkb2VzIG5vdCBjYXJlIG11Y2ggYWJvdXQgdHJhY2tpbmcgcGF0Y2hlcywgYW5kIG9ubHkgY29uc2lkZXJzIGEgbWVyZ2Ugd2hlbiBhCiticmFuY2ggaW5jb3Jwb3JhdGVzIGFsbCB0aGUgY29tbWl0cyBzaW5jZSB0aGUgcG9pbnQgdGhleSBmb3JrZWQuIFRoZSBlbmQgcmVzdWx0CitpcyB0aGF0IEdpdCB3aWxsIGhhdmUgYSBnb29kIGlkZWEgb2YgaG93IGZhciBicmFuY2hlcyBoYXZlIGRpdmVyZ2VkLiBTbyB0aGUKK2ltcG9ydCBwcm9jZXNzIGRvZXMgbG9zZSBzb21lIHBhdGNoLXRyYWRpbmcgbWV0YWRhdGEuCisKK0ZvcnR1bmF0ZWx5LCB3aGVuIHlvdSB0cnkgYW5kIG1lcmdlIGJyYW5jaGVzIGltcG9ydGVkIGZyb20gQXJjaCwKK0dpdCB3aWxsIGZpbmQgYSBnb29kIG1lcmdlIGJhc2UsIGFuZCBpdCBoYXMgYSBnb29kIGNoYW5jZSBvZiBpZGVudGlmeWluZworcGF0Y2hlcyB0aGF0IGhhdmUgYmVlbiB0cmFkZWQgb3V0LW9mLXNlcXVlbmNlIGJldHdlZW4gdGhlIGJyYW5jaGVzLgorCitPUFRJT05TCistLS0tLS0tCisKKy1oOjoKKwlEaXNwbGF5IHVzYWdlLgorCistdjo6CisJVmVyYm9zZSBvdXRwdXQuCisKKy1UOjoKKwlNYW55IHRhZ3MuIFdpbGwgY3JlYXRlIGEgdGFnIGZvciBldmVyeSBjb21taXQsIHJlZmxlY3RpbmcgdGhlIGNvbW1pdAorCW5hbWUgaW4gdGhlIEFyY2ggcmVwb3NpdG9yeS4KKworLWY6OgorCVVzZSB0aGUgZmFzdCBwYXRjaHNldCBpbXBvcnQgc3RyYXRlZ3kuICBUaGlzIGNhbiBiZSBzaWduaWZpY2FudGx5CisJZmFzdGVyIGZvciBsYXJnZSB0cmVlcywgYnV0IGNhbm5vdCBoYW5kbGUgZGlyZWN0b3J5IHJlbmFtZXMgb3IKKwlwZXJtaXNzaW9ucyBjaGFuZ2VzLiAgVGhlIGRlZmF1bHQgc3RyYXRlZ3kgaXMgc2xvdyBhbmQgc2FmZS4KKworLW86OgorCVVzZSB0aGlzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkLXN0eWxlIGJyYW5jaCBuYW1lcyB1c2VkIGJ5CisJZWFybGllciB2ZXJzaW9ucyBvZiAnZ2l0IGFyY2hpbXBvcnQnLiAgT2xkLXN0eWxlIGJyYW5jaCBuYW1lcworCXdlcmUgY2F0ZWdvcnl7bGl0ZGR9YnJhbmNoLCB3aGVyZWFzIG5ldy1zdHlsZSBicmFuY2ggbmFtZXMgYXJlCisJYXJjaGl2ZSxjYXRlZ29yeXtsaXRkZH1icmFuY2h7bGl0ZGR9dmVyc2lvbi4gIEluIGJvdGggY2FzZXMsIG5hbWVzIGdpdmVuCisJb24gdGhlIGNvbW1hbmQtbGluZSB3aWxsIG92ZXJyaWRlIHRoZSBhdXRvbWF0aWNhbGx5LWdlbmVyYXRlZAorCW9uZXMuCisKKy1EIDxkZXB0aD46OgorCUZvbGxvdyBtZXJnZSBhbmNlc3RyeSBhbmQgYXR0ZW1wdCB0byBpbXBvcnQgdHJlZXMgdGhhdCBoYXZlIGJlZW4KKwltZXJnZWQgZnJvbS4gIFNwZWNpZnkgYSBkZXB0aCBncmVhdGVyIHRoYW4gMSBpZiBwYXRjaCBsb2dzIGhhdmUgYmVlbgorCXBydW5lZC4KKworLWE6OgorCUF0dGVtcHQgdG8gYXV0by1yZWdpc3RlciBhcmNoaXZlcyBhdCBodHRwOi8vbWlycm9ycy5zb3VyY2Vjb250cm9sLm5ldAorCVRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCB3aXRoIHRoZSAtRCBvcHRpb24uCisKKy10IDx0bXBkaXI+OjoKKwlPdmVycmlkZSB0aGUgZGVmYXVsdCB0ZW1wZGlyLgorCisKKzxhcmNoaXZlL2JyYW5jaD46OgorCUFyY2hpdmUvYnJhbmNoIGlkZW50aWZpZXIgaW4gYSBmb3JtYXQgdGhhdCBgdGxhIGxvZ2AgdW5kZXJzdGFuZHMuCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWFyY2hpdmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTFlNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1hcmNoaXZlLnR4dApAQCAtMCwwICsxLDE5NyBAQAorZ2l0LWFyY2hpdmUoMSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1hcmNoaXZlIC0gQ3JlYXRlIGFuIGFyY2hpdmUgb2YgZmlsZXMgZnJvbSBhIG5hbWVkIHRyZWUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYXJjaGl2ZScgWy0tZm9ybWF0PTxmbXQ+XSBbLS1saXN0XSBbLS1wcmVmaXg9PHByZWZpeD4vXSBbPGV4dHJhPl0KKwkgICAgICBbLW8gPGZpbGU+IHwgLS1vdXRwdXQ9PGZpbGU+XSBbLS13b3JrdHJlZS1hdHRyaWJ1dGVzXQorCSAgICAgIFstLXJlbW90ZT08cmVwbz4gWy0tZXhlYz08Z2l0LXVwbG9hZC1hcmNoaXZlPl1dIDx0cmVlLWlzaD4KKwkgICAgICBbPHBhdGg+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NyZWF0ZXMgYW4gYXJjaGl2ZSBvZiB0aGUgc3BlY2lmaWVkIGZvcm1hdCBjb250YWluaW5nIHRoZSB0cmVlCitzdHJ1Y3R1cmUgZm9yIHRoZSBuYW1lZCB0cmVlLCBhbmQgd3JpdGVzIGl0IG91dCB0byB0aGUgc3RhbmRhcmQKK291dHB1dC4gIElmIDxwcmVmaXg+IGlzIHNwZWNpZmllZCBpdCBpcworcHJlcGVuZGVkIHRvIHRoZSBmaWxlbmFtZXMgaW4gdGhlIGFyY2hpdmUuCisKKydnaXQgYXJjaGl2ZScgYmVoYXZlcyBkaWZmZXJlbnRseSB3aGVuIGdpdmVuIGEgdHJlZSBJRCB2ZXJzdXMgd2hlbgorZ2l2ZW4gYSBjb21taXQgSUQgb3IgdGFnIElELiAgSW4gdGhlIGZpcnN0IGNhc2UgdGhlIGN1cnJlbnQgdGltZSBpcwordXNlZCBhcyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgZWFjaCBmaWxlIGluIHRoZSBhcmNoaXZlLiAgSW4gdGhlIGxhdHRlcgorY2FzZSB0aGUgY29tbWl0IHRpbWUgYXMgcmVjb3JkZWQgaW4gdGhlIHJlZmVyZW5jZWQgY29tbWl0IG9iamVjdCBpcwordXNlZCBpbnN0ZWFkLiAgQWRkaXRpb25hbGx5IHRoZSBjb21taXQgSUQgaXMgc3RvcmVkIGluIGEgZ2xvYmFsCitleHRlbmRlZCBwYXggaGVhZGVyIGlmIHRoZSB0YXIgZm9ybWF0IGlzIHVzZWQ7IGl0IGNhbiBiZSBleHRyYWN0ZWQKK3VzaW5nICdnaXQgZ2V0LXRhci1jb21taXQtaWQnLiBJbiBaSVAgZmlsZXMgaXQgaXMgc3RvcmVkIGFzIGEgZmlsZQorY29tbWVudC4KKworT1BUSU9OUworLS0tLS0tLQorCistLWZvcm1hdD08Zm10Pjo6CisJRm9ybWF0IG9mIHRoZSByZXN1bHRpbmcgYXJjaGl2ZTogJ3Rhcicgb3IgJ3ppcCcuIElmIHRoaXMgb3B0aW9uCisJaXMgbm90IGdpdmVuLCBhbmQgdGhlIG91dHB1dCBmaWxlIGlzIHNwZWNpZmllZCwgdGhlIGZvcm1hdCBpcworCWluZmVycmVkIGZyb20gdGhlIGZpbGVuYW1lIGlmIHBvc3NpYmxlIChlLmcuIHdyaXRpbmcgdG8gImZvby56aXAiCisJbWFrZXMgdGhlIG91dHB1dCB0byBiZSBpbiB0aGUgemlwIGZvcm1hdCkuIE90aGVyd2lzZSB0aGUgb3V0cHV0CisJZm9ybWF0IGlzIGB0YXJgLgorCistbDo6CistLWxpc3Q6OgorCVNob3cgYWxsIGF2YWlsYWJsZSBmb3JtYXRzLgorCistdjo6CistLXZlcmJvc2U6OgorCVJlcG9ydCBwcm9ncmVzcyB0byBzdGRlcnIuCisKKy0tcHJlZml4PTxwcmVmaXg+Lzo6CisJUHJlcGVuZCA8cHJlZml4Pi8gdG8gZWFjaCBmaWxlbmFtZSBpbiB0aGUgYXJjaGl2ZS4KKworLW8gPGZpbGU+OjoKKy0tb3V0cHV0PTxmaWxlPjo6CisJV3JpdGUgdGhlIGFyY2hpdmUgdG8gPGZpbGU+IGluc3RlYWQgb2Ygc3Rkb3V0LgorCistLXdvcmt0cmVlLWF0dHJpYnV0ZXM6OgorCUxvb2sgZm9yIGF0dHJpYnV0ZXMgaW4gLmdpdGF0dHJpYnV0ZXMgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZQorCWFzIHdlbGwgKHNlZSA8PEFUVFJJQlVURVM+PikuCisKKzxleHRyYT46OgorCVRoaXMgY2FuIGJlIGFueSBvcHRpb25zIHRoYXQgdGhlIGFyY2hpdmVyIGJhY2tlbmQgdW5kZXJzdGFuZHMuCisJU2VlIG5leHQgc2VjdGlvbi4KKworLS1yZW1vdGU9PHJlcG8+OjoKKwlJbnN0ZWFkIG9mIG1ha2luZyBhIHRhciBhcmNoaXZlIGZyb20gdGhlIGxvY2FsIHJlcG9zaXRvcnksCisJcmV0cmlldmUgYSB0YXIgYXJjaGl2ZSBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkuIE5vdGUgdGhhdCB0aGUKKwlyZW1vdGUgcmVwb3NpdG9yeSBtYXkgcGxhY2UgcmVzdHJpY3Rpb25zIG9uIHdoaWNoIHNoYTEKKwlleHByZXNzaW9ucyBtYXkgYmUgYWxsb3dlZCBpbiBgPHRyZWUtaXNoPmAuIFNlZQorCWxpbmtnaXQ6Z2l0LXVwbG9hZC1hcmNoaXZlWzFdIGZvciBkZXRhaWxzLgorCistLWV4ZWM9PGdpdC11cGxvYWQtYXJjaGl2ZT46OgorCVVzZWQgd2l0aCAtLXJlbW90ZSB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIHRoZQorCSdnaXQtdXBsb2FkLWFyY2hpdmUnIG9uIHRoZSByZW1vdGUgc2lkZS4KKworPHRyZWUtaXNoPjo6CisJVGhlIHRyZWUgb3IgY29tbWl0IHRvIHByb2R1Y2UgYW4gYXJjaGl2ZSBmb3IuCisKKzxwYXRoPjo6CisJV2l0aG91dCBhbiBvcHRpb25hbCBwYXRoIHBhcmFtZXRlciwgYWxsIGZpbGVzIGFuZCBzdWJkaXJlY3RvcmllcworCW9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFyZSBpbmNsdWRlZCBpbiB0aGUgYXJjaGl2ZS4KKwlJZiBvbmUgb3IgbW9yZSBwYXRocyBhcmUgc3BlY2lmaWVkLCBvbmx5IHRoZXNlIGFyZSBpbmNsdWRlZC4KKworQkFDS0VORCBFWFRSQSBPUFRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworemlwCit+fn4KKy0wOjoKKwlTdG9yZSB0aGUgZmlsZXMgaW5zdGVhZCBvZiBkZWZsYXRpbmcgdGhlbS4KKy05OjoKKwlIaWdoZXN0IGFuZCBzbG93ZXN0IGNvbXByZXNzaW9uIGxldmVsLiAgWW91IGNhbiBzcGVjaWZ5IGFueQorCW51bWJlciBmcm9tIDEgdG8gOSB0byBhZGp1c3QgY29tcHJlc3Npb24gc3BlZWQgYW5kIHJhdGlvLgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKwordGFyLnVtYXNrOjoKKwlUaGlzIHZhcmlhYmxlIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBwZXJtaXNzaW9uIGJpdHMgb2YKKwl0YXIgYXJjaGl2ZSBlbnRyaWVzLiAgVGhlIGRlZmF1bHQgaXMgMDAwMiwgd2hpY2ggdHVybnMgb2ZmIHRoZQorCXdvcmxkIHdyaXRlIGJpdC4gIFRoZSBzcGVjaWFsIHZhbHVlICJ1c2VyIiBpbmRpY2F0ZXMgdGhhdCB0aGUKKwlhcmNoaXZpbmcgdXNlcidzIHVtYXNrIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLiAgU2VlIHVtYXNrKDIpIGZvcgorCWRldGFpbHMuICBJZiBgLS1yZW1vdGVgIGlzIHVzZWQgdGhlbiBvbmx5IHRoZSBjb25maWd1cmF0aW9uIG9mCisJdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRha2VzIGVmZmVjdC4KKwordGFyLjxmb3JtYXQ+LmNvbW1hbmQ6OgorCVRoaXMgdmFyaWFibGUgc3BlY2lmaWVzIGEgc2hlbGwgY29tbWFuZCB0aHJvdWdoIHdoaWNoIHRoZSB0YXIKKwlvdXRwdXQgZ2VuZXJhdGVkIGJ5IGBnaXQgYXJjaGl2ZWAgc2hvdWxkIGJlIHBpcGVkLiBUaGUgY29tbWFuZAorCWlzIGV4ZWN1dGVkIHVzaW5nIHRoZSBzaGVsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgdGFyIGZpbGUgb24gaXRzCisJc3RhbmRhcmQgaW5wdXQsIGFuZCBzaG91bGQgcHJvZHVjZSB0aGUgZmluYWwgb3V0cHV0IG9uIGl0cworCXN0YW5kYXJkIG91dHB1dC4gQW55IGNvbXByZXNzaW9uLWxldmVsIG9wdGlvbnMgd2lsbCBiZSBwYXNzZWQKKwl0byB0aGUgY29tbWFuZCAoZS5nLiwgIi05IikuIEFuIG91dHB1dCBmaWxlIHdpdGggdGhlIHNhbWUKKwlleHRlbnNpb24gYXMgYDxmb3JtYXQ+YCB3aWxsIGJlIHVzZSB0aGlzIGZvcm1hdCBpZiBubyBvdGhlcgorCWZvcm1hdCBpcyBnaXZlbi4KKysKK1RoZSAidGFyLmd6IiBhbmQgInRneiIgZm9ybWF0cyBhcmUgZGVmaW5lZCBhdXRvbWF0aWNhbGx5IGFuZCBkZWZhdWx0IHRvCitgZ3ppcCAtY25gLiBZb3UgbWF5IG92ZXJyaWRlIHRoZW0gd2l0aCBjdXN0b20gY29tbWFuZHMuCisKK3Rhci48Zm9ybWF0Pi5yZW1vdGU6OgorCUlmIHRydWUsIGVuYWJsZSBgPGZvcm1hdD5gIGZvciB1c2UgYnkgcmVtb3RlIGNsaWVudHMgdmlhCisJbGlua2dpdDpnaXQtdXBsb2FkLWFyY2hpdmVbMV0uIERlZmF1bHRzIHRvIGZhbHNlIGZvcgorCXVzZXItZGVmaW5lZCBmb3JtYXRzLCBidXQgdHJ1ZSBmb3IgdGhlICJ0YXIuZ3oiIGFuZCAidGd6IgorCWZvcm1hdHMuCisKK1tbQVRUUklCVVRFU11dCitBVFRSSUJVVEVTCistLS0tLS0tLS0tCisKK2V4cG9ydC1pZ25vcmU6OgorCUZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoIHRoZSBhdHRyaWJ1dGUgZXhwb3J0LWlnbm9yZSB3b24ndCBiZQorCWFkZGVkIHRvIGFyY2hpdmUgZmlsZXMuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCitleHBvcnQtc3Vic3Q6OgorCUlmIHRoZSBhdHRyaWJ1dGUgZXhwb3J0LXN1YnN0IGlzIHNldCBmb3IgYSBmaWxlIHRoZW4gR2l0IHdpbGwKKwlleHBhbmQgc2V2ZXJhbCBwbGFjZWhvbGRlcnMgd2hlbiBhZGRpbmcgdGhpcyBmaWxlIHRvIGFuIGFyY2hpdmUuCisJU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworTm90ZSB0aGF0IGF0dHJpYnV0ZXMgYXJlIGJ5IGRlZmF1bHQgdGFrZW4gZnJvbSB0aGUgYC5naXRhdHRyaWJ1dGVzYCBmaWxlcworaW4gdGhlIHRyZWUgdGhhdCBpcyBiZWluZyBhcmNoaXZlZC4gIElmIHlvdSB3YW50IHRvIHR3ZWFrIHRoZSB3YXkgdGhlCitvdXRwdXQgaXMgZ2VuZXJhdGVkIGFmdGVyIHRoZSBmYWN0IChlLmcuIHlvdSBjb21taXR0ZWQgd2l0aG91dCBhZGRpbmcgYW4KK2FwcHJvcHJpYXRlIGV4cG9ydC1pZ25vcmUgaW4gaXRzIGAuZ2l0YXR0cmlidXRlc2ApLCBhZGp1c3QgdGhlIGNoZWNrZWQgb3V0CitgLmdpdGF0dHJpYnV0ZXNgIGZpbGUgYXMgbmVjZXNzYXJ5IGFuZCB1c2UgYC0td29ya3RyZWUtYXR0cmlidXRlc2AKK29wdGlvbi4gIEFsdGVybmF0aXZlbHkgeW91IGNhbiBrZWVwIG5lY2Vzc2FyeSBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGFwcGx5Cit3aGlsZSBhcmNoaXZpbmcgYW55IHRyZWUgaW4geW91ciBgJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzYCBmaWxlLgorCitFWEFNUExFUworLS0tLS0tLS0KK2BnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9anVuay8gSEVBRCB8IChjZCAvdmFyL3RtcC8gJiYgdGFyIHhmIC0pYDo6CisKKwlDcmVhdGUgYSB0YXIgYXJjaGl2ZSB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZW50cyBvZiB0aGUKKwlsYXRlc3QgY29tbWl0IG9uIHRoZSBjdXJyZW50IGJyYW5jaCwgYW5kIGV4dHJhY3QgaXQgaW4gdGhlCisJYC92YXIvdG1wL2p1bmtgIGRpcmVjdG9yeS4KKworYGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAtLXByZWZpeD1naXQtMS40LjAvIHYxLjQuMCB8IGd6aXAgPmdpdC0xLjQuMC50YXIuZ3pgOjoKKworCUNyZWF0ZSBhIGNvbXByZXNzZWQgdGFyYmFsbCBmb3IgdjEuNC4wIHJlbGVhc2UuCisKK2BnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIuZ3ogLS1wcmVmaXg9Z2l0LTEuNC4wLyB2MS40LjAgPmdpdC0xLjQuMC50YXIuZ3pgOjoKKworCVNhbWUgYXMgYWJvdmUsIGJ1dCB1c2luZyB0aGUgYnVpbHRpbiB0YXIuZ3ogaGFuZGxpbmcuCisKK2BnaXQgYXJjaGl2ZSAtLXByZWZpeD1naXQtMS40LjAvIC1vIGdpdC0xLjQuMC50YXIuZ3ogdjEuNC4wYDo6CisKKwlTYW1lIGFzIGFib3ZlLCBidXQgdGhlIGZvcm1hdCBpcyBpbmZlcnJlZCBmcm9tIHRoZSBvdXRwdXQgZmlsZS4KKworYGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAtLXByZWZpeD1naXQtMS40LjAvIHYxLjQuMF57dHJlZX0gfCBnemlwID5naXQtMS40LjAudGFyLmd6YDo6CisKKwlDcmVhdGUgYSBjb21wcmVzc2VkIHRhcmJhbGwgZm9yIHYxLjQuMCByZWxlYXNlLCBidXQgd2l0aG91dCBhCisJZ2xvYmFsIGV4dGVuZGVkIHBheCBoZWFkZXIuCisKK2BnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgLS1wcmVmaXg9Z2l0LWRvY3MvIEhFQUQ6RG9jdW1lbnRhdGlvbi8gPiBnaXQtMS40LjAtZG9jcy56aXBgOjoKKworCVB1dCBldmVyeXRoaW5nIGluIHRoZSBjdXJyZW50IGhlYWQncyBEb2N1bWVudGF0aW9uLyBkaXJlY3RvcnkKKwlpbnRvICdnaXQtMS40LjAtZG9jcy56aXAnLCB3aXRoIHRoZSBwcmVmaXggJ2dpdC1kb2NzLycuCisKK2BnaXQgYXJjaGl2ZSAtbyBsYXRlc3QuemlwIEhFQURgOjoKKworCUNyZWF0ZSBhIFppcCBhcmNoaXZlIHRoYXQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBsYXRlc3QKKwljb21taXQgb24gdGhlIGN1cnJlbnQgYnJhbmNoLiBOb3RlIHRoYXQgdGhlIG91dHB1dCBmb3JtYXQgaXMKKwlpbmZlcnJlZCBieSB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBvdXRwdXQgZmlsZS4KKworYGdpdCBjb25maWcgdGFyLnRhci54ei5jb21tYW5kICJ4eiAtYyJgOjoKKworCUNvbmZpZ3VyZSBhICJ0YXIueHoiIGZvcm1hdCBmb3IgbWFraW5nIExaTUEtY29tcHJlc3NlZCB0YXJmaWxlcy4KKwlZb3UgY2FuIHVzZSBpdCBzcGVjaWZ5aW5nIGAtLWZvcm1hdD10YXIueHpgLCBvciBieSBjcmVhdGluZyBhbgorCW91dHB1dCBmaWxlIGxpa2UgYC1vIGZvby50YXIueHpgLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QtbGsyMDA5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDZlZmJkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LWxrMjAwOS50eHQKQEAgLTAsMCArMSwxMzU4IEBACitGaWdodGluZyByZWdyZXNzaW9ucyB3aXRoIGdpdCBiaXNlY3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOkF1dGhvcjogQ2hyaXN0aWFuIENvdWRlcgorOkVtYWlsOiBjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZworOkRhdGU6IDIwMDkvMTEvMDgKKworQWJzdHJhY3QKKy0tLS0tLS0tCisKKyJnaXQgYmlzZWN0IiBlbmFibGVzIHNvZnR3YXJlIHVzZXJzIGFuZCBkZXZlbG9wZXJzIHRvIGVhc2lseSBmaW5kIHRoZQorY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIHJlZ3Jlc3Npb24uIFdlIHNob3cgd2h5IGl0IGlzIGltcG9ydGFudCB0bworaGF2ZSBnb29kIHRvb2xzIHRvIGZpZ2h0IHJlZ3Jlc3Npb25zLiBXZSBkZXNjcmliZSBob3cgImdpdCBiaXNlY3QiCit3b3JrcyBmcm9tIHRoZSBvdXRzaWRlIGFuZCB0aGUgYWxnb3JpdGhtcyBpdCB1c2VzIGluc2lkZS4gVGhlbiB3ZQorZXhwbGFpbiBob3cgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgImdpdCBiaXNlY3QiIHRvIGltcHJvdmUgY3VycmVudAorcHJhY3RpY2VzLiBBbmQgd2UgZGlzY3VzcyBob3cgImdpdCBiaXNlY3QiIGNvdWxkIGltcHJvdmUgaW4gdGhlCitmdXR1cmUuCisKKworSW50cm9kdWN0aW9uIHRvICJnaXQgYmlzZWN0IgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgaXMgYSBEaXN0cmlidXRlZCBWZXJzaW9uIENvbnRyb2wgc3lzdGVtIChEVkNTKSBjcmVhdGVkIGJ5IExpbnVzCitUb3J2YWxkcyBhbmQgbWFpbnRhaW5lZCBieSBKdW5pbyBIYW1hbm8uCisKK0luIEdpdCBsaWtlIGluIG1hbnkgb3RoZXIgVmVyc2lvbiBDb250cm9sIFN5c3RlbXMgKFZDUyksIHRoZSBkaWZmZXJlbnQKK3N0YXRlcyBvZiB0aGUgZGF0YSB0aGF0IGlzIG1hbmFnZWQgYnkgdGhlIHN5c3RlbSBhcmUgY2FsbGVkCitjb21taXRzLiBBbmQsIGFzIFZDUyBhcmUgbW9zdGx5IHVzZWQgdG8gbWFuYWdlIHNvZnR3YXJlIHNvdXJjZSBjb2RlLAorc29tZXRpbWVzICJpbnRlcmVzdGluZyIgY2hhbmdlcyBvZiBiZWhhdmlvciBpbiB0aGUgc29mdHdhcmUgYXJlCitpbnRyb2R1Y2VkIGluIHNvbWUgY29tbWl0cy4KKworSW4gZmFjdCBwZW9wbGUgYXJlIHNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGNvbW1pdHMgdGhhdCBpbnRyb2R1Y2UgYQorImJhZCIgYmVoYXZpb3IsIGNhbGxlZCBhIGJ1ZyBvciBhIHJlZ3Jlc3Npb24uIFRoZXkgYXJlIGludGVyZXN0ZWQgaW4KK3RoZXNlIGNvbW1pdHMgYmVjYXVzZSBhIGNvbW1pdCAoaG9wZWZ1bGx5KSBjb250YWlucyBhIHZlcnkgc21hbGwgc2V0CitvZiBzb3VyY2UgY29kZSBjaGFuZ2VzLiBBbmQgaXQncyBtdWNoIGVhc2llciB0byB1bmRlcnN0YW5kIGFuZAorcHJvcGVybHkgZml4IGEgcHJvYmxlbSB3aGVuIHlvdSBvbmx5IG5lZWQgdG8gY2hlY2sgYSB2ZXJ5IHNtYWxsIHNldCBvZgorY2hhbmdlcywgdGhhbiB3aGVuIHlvdSBkb24ndCBrbm93IHdoZXJlIGxvb2sgaW4gdGhlIGZpcnN0IHBsYWNlLgorCitTbyB0byBoZWxwIHBlb3BsZSBmaW5kIGNvbW1pdHMgdGhhdCBpbnRyb2R1Y2UgYSAiYmFkIiBiZWhhdmlvciwgdGhlCisiZ2l0IGJpc2VjdCIgc2V0IG9mIGNvbW1hbmRzIHdhcyBpbnZlbnRlZC4gQW5kIGl0IGZvbGxvd3Mgb2YgY291cnNlCit0aGF0IGluICJnaXQgYmlzZWN0IiBwYXJsYW5jZSwgY29tbWl0cyB3aGVyZSB0aGUgImludGVyZXN0aW5nCitiZWhhdmlvciIgaXMgcHJlc2VudCBhcmUgY2FsbGVkICJiYWQiIGNvbW1pdHMsIHdoaWxlIG90aGVyIGNvbW1pdHMgYXJlCitjYWxsZWQgImdvb2QiIGNvbW1pdHMuIEFuZCBhIGNvbW1pdCB0aGF0IGludHJvZHVjZSB0aGUgYmVoYXZpb3Igd2UgYXJlCitpbnRlcmVzdGVkIGluIGlzIGNhbGxlZCBhICJmaXJzdCBiYWQgY29tbWl0Ii4gTm90ZSB0aGF0IHRoZXJlIGNvdWxkIGJlCittb3JlIHRoYW4gb25lICJmaXJzdCBiYWQgY29tbWl0IiBpbiB0aGUgY29tbWl0IHNwYWNlIHdlIGFyZSBzZWFyY2hpbmcuCisKK1NvICJnaXQgYmlzZWN0IiBpcyBkZXNpZ25lZCB0byBoZWxwIGZpbmQgYSAiZmlyc3QgYmFkIGNvbW1pdCIuIEFuZCB0bworYmUgYXMgZWZmaWNpZW50IGFzIHBvc3NpYmxlLCBpdCB0cmllcyB0byBwZXJmb3JtIGEgYmluYXJ5IHNlYXJjaC4KKworCitGaWdodGluZyByZWdyZXNzaW9ucyBvdmVydmlldworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVncmVzc2lvbnM6IGEgYmlnIHByb2JsZW0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1JlZ3Jlc3Npb25zIGFyZSBhIGJpZyBwcm9ibGVtIGluIHRoZSBzb2Z0d2FyZSBpbmR1c3RyeS4gQnV0IGl0J3MKK2RpZmZpY3VsdCB0byBwdXQgc29tZSByZWFsIG51bWJlcnMgYmVoaW5kIHRoYXQgY2xhaW0uCisKK1RoZXJlIGFyZSBzb21lIG51bWJlcnMgYWJvdXQgYnVncyBpbiBnZW5lcmFsLCBsaWtlIGEgTklTVCBzdHVkeSBpbgorMjAwMiA8PDE+PiB0aGF0IHNhaWQ6CisKK19fX19fX19fX19fX18KK1NvZnR3YXJlIGJ1Z3MsIG9yIGVycm9ycywgYXJlIHNvIHByZXZhbGVudCBhbmQgc28gZGV0cmltZW50YWwgdGhhdAordGhleSBjb3N0IHRoZSBVLlMuIGVjb25vbXkgYW4gZXN0aW1hdGVkICQ1OS41IGJpbGxpb24gYW5udWFsbHksIG9yCithYm91dCAwLjYgcGVyY2VudCBvZiB0aGUgZ3Jvc3MgZG9tZXN0aWMgcHJvZHVjdCwgYWNjb3JkaW5nIHRvIGEgbmV3bHkKK3JlbGVhc2VkIHN0dWR5IGNvbW1pc3Npb25lZCBieSB0aGUgRGVwYXJ0bWVudCBvZiBDb21tZXJjZSdzIE5hdGlvbmFsCitJbnN0aXR1dGUgb2YgU3RhbmRhcmRzIGFuZCBUZWNobm9sb2d5IChOSVNUKS4gQXQgdGhlIG5hdGlvbmFsIGxldmVsLAorb3ZlciBoYWxmIG9mIHRoZSBjb3N0cyBhcmUgYm9ybmUgYnkgc29mdHdhcmUgdXNlcnMgYW5kIHRoZSByZW1haW5kZXIKK2J5IHNvZnR3YXJlIGRldmVsb3BlcnMvdmVuZG9ycy4gIFRoZSBzdHVkeSBhbHNvIGZvdW5kIHRoYXQsIGFsdGhvdWdoCithbGwgZXJyb3JzIGNhbm5vdCBiZSByZW1vdmVkLCBtb3JlIHRoYW4gYSB0aGlyZCBvZiB0aGVzZSBjb3N0cywgb3IgYW4KK2VzdGltYXRlZCAkMjIuMiBiaWxsaW9uLCBjb3VsZCBiZSBlbGltaW5hdGVkIGJ5IGFuIGltcHJvdmVkIHRlc3RpbmcKK2luZnJhc3RydWN0dXJlIHRoYXQgZW5hYmxlcyBlYXJsaWVyIGFuZCBtb3JlIGVmZmVjdGl2ZSBpZGVudGlmaWNhdGlvbgorYW5kIHJlbW92YWwgb2Ygc29mdHdhcmUgZGVmZWN0cy4gVGhlc2UgYXJlIHRoZSBzYXZpbmdzIGFzc29jaWF0ZWQgd2l0aAorZmluZGluZyBhbiBpbmNyZWFzZWQgcGVyY2VudGFnZSAoYnV0IG5vdCAxMDAgcGVyY2VudCkgb2YgZXJyb3JzIGNsb3NlcgordG8gdGhlIGRldmVsb3BtZW50IHN0YWdlcyBpbiB3aGljaCB0aGV5IGFyZSBpbnRyb2R1Y2VkLiBDdXJyZW50bHksCitvdmVyIGhhbGYgb2YgYWxsIGVycm9ycyBhcmUgbm90IGZvdW5kIHVudGlsICJkb3duc3RyZWFtIiBpbiB0aGUKK2RldmVsb3BtZW50IHByb2Nlc3Mgb3IgZHVyaW5nIHBvc3Qtc2FsZSBzb2Z0d2FyZSB1c2UuCitfX19fX19fX19fX19fCisKK0FuZCB0aGVuOgorCitfX19fX19fX19fX19fCitTb2Z0d2FyZSBkZXZlbG9wZXJzIGFscmVhZHkgc3BlbmQgYXBwcm94aW1hdGVseSA4MCBwZXJjZW50IG9mCitkZXZlbG9wbWVudCBjb3N0cyBvbiBpZGVudGlmeWluZyBhbmQgY29ycmVjdGluZyBkZWZlY3RzLCBhbmQgeWV0IGZldworcHJvZHVjdHMgb2YgYW55IHR5cGUgb3RoZXIgdGhhbiBzb2Z0d2FyZSBhcmUgc2hpcHBlZCB3aXRoIHN1Y2ggaGlnaAorbGV2ZWxzIG9mIGVycm9ycy4KK19fX19fX19fX19fX18KKworRXZlbnR1YWxseSB0aGUgY29uY2x1c2lvbiBzdGFydGVkIHdpdGg6CisKK19fX19fX19fX19fX18KK1RoZSBwYXRoIHRvIGhpZ2hlciBzb2Z0d2FyZSBxdWFsaXR5IGlzIHNpZ25pZmljYW50bHkgaW1wcm92ZWQgc29mdHdhcmUKK3Rlc3RpbmcuCitfX19fX19fX19fX19fCisKK1RoZXJlIGFyZSBvdGhlciBlc3RpbWF0ZXMgc2F5aW5nIHRoYXQgODAlIG9mIHRoZSBjb3N0IHJlbGF0ZWQgdG8KK3NvZnR3YXJlIGlzIGFib3V0IG1haW50ZW5hbmNlIDw8Mj4+LgorCitUaG91Z2gsIGFjY29yZGluZyB0byBXaWtpcGVkaWEgPDwzPj46CisKK19fX19fX19fX19fX18KK0EgY29tbW9uIHBlcmNlcHRpb24gb2YgbWFpbnRlbmFuY2UgaXMgdGhhdCBpdCBpcyBtZXJlbHkgZml4aW5nCitidWdzLiBIb3dldmVyLCBzdHVkaWVzIGFuZCBzdXJ2ZXlzIG92ZXIgdGhlIHllYXJzIGhhdmUgaW5kaWNhdGVkIHRoYXQKK3RoZSBtYWpvcml0eSwgb3ZlciA4MCUsIG9mIHRoZSBtYWludGVuYW5jZSBlZmZvcnQgaXMgdXNlZCBmb3IKK25vbi1jb3JyZWN0aXZlIGFjdGlvbnMgKFBpZ29za3kgMTk5NykuIFRoaXMgcGVyY2VwdGlvbiBpcyBwZXJwZXR1YXRlZAorYnkgdXNlcnMgc3VibWl0dGluZyBwcm9ibGVtIHJlcG9ydHMgdGhhdCBpbiByZWFsaXR5IGFyZSBmdW5jdGlvbmFsaXR5CitlbmhhbmNlbWVudHMgdG8gdGhlIHN5c3RlbS4KK19fX19fX19fX19fX18KKworQnV0IHdlIGNhbiBndWVzcyB0aGF0IGltcHJvdmluZyBvbiBleGlzdGluZyBzb2Z0d2FyZSBpcyB2ZXJ5IGNvc3RseQorYmVjYXVzZSB5b3UgaGF2ZSB0byB3YXRjaCBvdXQgZm9yIHJlZ3Jlc3Npb25zLiBBdCBsZWFzdCB0aGlzIHdvdWxkCittYWtlIHRoZSBhYm92ZSBzdHVkaWVzIGNvbnNpc3RlbnQgYW1vbmcgdGhlbXNlbHZlcy4KKworT2YgY291cnNlIHNvbWUga2luZCBvZiBzb2Z0d2FyZSBpcyBkZXZlbG9wZWQsIHRoZW4gdXNlZCBkdXJpbmcgc29tZQordGltZSB3aXRob3V0IGJlaW5nIGltcHJvdmVkIG9uIG11Y2gsIGFuZCB0aGVuIGZpbmFsbHkgdGhyb3duIGF3YXkuIEluCit0aGlzIGNhc2UsIG9mIGNvdXJzZSwgcmVncmVzc2lvbnMgbWF5IG5vdCBiZSBhIGJpZyBwcm9ibGVtLiBCdXQgb24gdGhlCitvdGhlciBoYW5kLCB0aGVyZSBpcyBhIGxvdCBvZiBiaWcgc29mdHdhcmUgdGhhdCBpcyBjb250aW51YWxseQorZGV2ZWxvcGVkIGFuZCBtYWludGFpbmVkIGR1cmluZyB5ZWFycyBvciBldmVuIHRlbnMgb2YgeWVhcnMgYnkgYSBsb3QKK29mIHBlb3BsZS4gQW5kIGFzIHRoZXJlIGFyZSBvZnRlbiBtYW55IHBlb3BsZSB3aG8gZGVwZW5kIChzb21ldGltZXMKK2NyaXRpY2FsbHkpIG9uIHN1Y2ggc29mdHdhcmUsIHJlZ3Jlc3Npb25zIGFyZSBhIHJlYWxseSBiaWcgcHJvYmxlbS4KKworT25lIHN1Y2ggc29mdHdhcmUgaXMgdGhlIExpbnV4IGtlcm5lbC4gQW5kIGlmIHdlIGxvb2sgYXQgdGhlIExpbnV4CitrZXJuZWwsIHdlIGNhbiBzZWUgdGhhdCBhIGxvdCBvZiB0aW1lIGFuZCBlZmZvcnQgaXMgc3BlbnQgdG8gZmlnaHQKK3JlZ3Jlc3Npb25zLiBUaGUgcmVsZWFzZSBjeWNsZSBzdGFydCB3aXRoIGEgMiB3ZWVrcyBsb25nIG1lcmdlCit3aW5kb3cuIFRoZW4gdGhlIGZpcnN0IHJlbGVhc2UgY2FuZGlkYXRlIChyYykgdmVyc2lvbiBpcyB0YWdnZWQuIEFuZAorYWZ0ZXIgdGhhdCBhYm91dCA3IG9yIDggbW9yZSByYyB2ZXJzaW9ucyB3aWxsIGFwcGVhciB3aXRoIGFyb3VuZCBvbmUKK3dlZWsgYmV0d2VlbiBlYWNoIG9mIHRoZW0sIGJlZm9yZSB0aGUgZmluYWwgcmVsZWFzZS4KKworVGhlIHRpbWUgYmV0d2VlbiB0aGUgZmlyc3QgcmMgcmVsZWFzZSBhbmQgdGhlIGZpbmFsIHJlbGVhc2UgaXMKK3N1cHBvc2VkIHRvIGJlIHVzZWQgdG8gdGVzdCByYyB2ZXJzaW9ucyBhbmQgZmlnaHQgYnVncyBhbmQgZXNwZWNpYWxseQorcmVncmVzc2lvbnMuIEFuZCB0aGlzIHRpbWUgaXMgbW9yZSB0aGFuIDgwJSBvZiB0aGUgcmVsZWFzZSBjeWNsZQordGltZS4gQnV0IHRoaXMgaXMgbm90IHRoZSBlbmQgb2YgdGhlIGZpZ2h0IHlldCwgYXMgb2YgY291cnNlIGl0Citjb250aW51ZXMgYWZ0ZXIgdGhlIHJlbGVhc2UuCisKK0FuZCB0aGVuIHRoaXMgaXMgd2hhdCBJbmdvIE1vbG5hciAoYSB3ZWxsIGtub3duIExpbnV4IGtlcm5lbAorZGV2ZWxvcGVyKSBzYXlzIGFib3V0IGhpcyB1c2Ugb2YgZ2l0IGJpc2VjdDoKKworX19fX19fX19fX19fXworSSBtb3N0IGFjdGl2ZWx5IHVzZSBpdCBkdXJpbmcgdGhlIG1lcmdlIHdpbmRvdyAod2hlbiBhIGxvdCBvZiB0cmVlcworZ2V0IG1lcmdlZCB1cHN0cmVhbSBhbmQgd2hlbiB0aGUgaW5mbHV4IG9mIGJ1Z3MgaXMgdGhlIGhpZ2hlc3QpIC0gYW5kCit5ZXMsIHRoZXJlIGhhdmUgYmVlbiBjYXNlcyB0aGF0IGkgdXNlZCBpdCBtdWx0aXBsZSB0aW1lcyBhIGRheS4gTXkKK2F2ZXJhZ2UgaXMgcm91Z2hseSBvbmNlIGEgZGF5LgorX19fX19fX19fX19fXworCitTbyByZWdyZXNzaW9ucyBhcmUgZm91Z2h0IGFsbCB0aGUgdGltZSBieSBkZXZlbG9wZXJzLCBhbmQgaW5kZWVkIGl0IGlzCit3ZWxsIGtub3duIHRoYXQgYnVncyBzaG91bGQgYmUgZml4ZWQgYXMgc29vbiBhcyBwb3NzaWJsZSwgc28gYXMgc29vbgorYXMgdGhleSBhcmUgZm91bmQuIFRoYXQncyB3aHkgaXQgaXMgaW50ZXJlc3RpbmcgdG8gaGF2ZSBnb29kIHRvb2xzIGZvcgordGhpcyBwdXJwb3NlLgorCitPdGhlciB0b29scyB0byBmaWdodCByZWdyZXNzaW9ucworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU28gd2hhdCBhcmUgdGhlIHRvb2xzIHVzZWQgdG8gZmlnaHQgcmVncmVzc2lvbnM/IFRoZXkgYXJlIG5lYXJseSB0aGUKK3NhbWUgYXMgdGhvc2UgdXNlZCB0byBmaWdodCByZWd1bGFyIGJ1Z3MuIFRoZSBvbmx5IHNwZWNpZmljIHRvb2xzIGFyZQordGVzdCBzdWl0ZXMgYW5kIHRvb2xzIHNpbWlsYXIgYXMgImdpdCBiaXNlY3QiLgorCitUZXN0IHN1aXRlcyBhcmUgdmVyeSBuaWNlLiBCdXQgd2hlbiB0aGV5IGFyZSB1c2VkIGFsb25lLCB0aGV5IGFyZQorc3VwcG9zZWQgdG8gYmUgdXNlZCBzbyB0aGF0IGFsbCB0aGUgdGVzdHMgYXJlIGNoZWNrZWQgYWZ0ZXIgZWFjaAorY29tbWl0LiBUaGlzIG1lYW5zIHRoYXQgdGhleSBhcmUgbm90IHZlcnkgZWZmaWNpZW50LCBiZWNhdXNlIG1hbnkKK3Rlc3RzIGFyZSBydW4gZm9yIG5vIGludGVyZXN0aW5nIHJlc3VsdCwgYW5kIHRoZXkgc3VmZmVyIGZyb20KK2NvbWJpbmF0aW9uYWwgZXhwbG9zaW9uLgorCitJbiBmYWN0IHRoZSBwcm9ibGVtIGlzIHRoYXQgYmlnIHNvZnR3YXJlIG9mdGVuIGhhcyBtYW55IGRpZmZlcmVudAorY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB0aGF0IGVhY2ggdGVzdCBjYXNlIHNob3VsZCBwYXNzIGZvciBlYWNoCitjb25maWd1cmF0aW9uIGFmdGVyIGVhY2ggY29tbWl0LiBTbyBpZiB5b3UgaGF2ZSBmb3IgZWFjaCByZWxlYXNlOiBOCitjb25maWd1cmF0aW9ucywgTSBjb21taXRzIGFuZCBUIHRlc3QgY2FzZXMsIHlvdSBzaG91bGQgcGVyZm9ybToKKworLS0tLS0tLS0tLS0tLQorTiAqIE0gKiBUIHRlc3RzCistLS0tLS0tLS0tLS0tCisKK3doZXJlIE4sIE0gYW5kIFQgYXJlIGFsbCBncm93aW5nIHdpdGggdGhlIHNpemUgeW91ciBzb2Z0d2FyZS4KKworU28gdmVyeSBzb29uIGl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIGNvbXBsZXRlbHkgdGVzdCBldmVyeXRoaW5nLgorCitBbmQgaWYgc29tZSBidWdzIHNsaXAgdGhyb3VnaCB5b3VyIHRlc3Qgc3VpdGUsIHRoZW4geW91IGNhbiBhZGQgYSB0ZXN0Cit0byB5b3VyIHRlc3Qgc3VpdGUuIEJ1dCBpZiB5b3Ugd2FudCB0byB1c2UgeW91ciBuZXcgaW1wcm92ZWQgdGVzdAorc3VpdGUgdG8gZmluZCB3aGVyZSB0aGUgYnVnIHNsaXBwZWQgaW4sIHRoZW4geW91IHdpbGwgZWl0aGVyIGhhdmUgdG8KK2VtdWxhdGUgYSBiaXNlY3Rpb24gcHJvY2VzcyBvciB5b3Ugd2lsbCBwZXJoYXBzIGJsdW50bHkgdGVzdCBlYWNoCitjb21taXQgYmFja3dhcmQgc3RhcnRpbmcgZnJvbSB0aGUgImJhZCIgY29tbWl0IHlvdSBoYXZlIHdoaWNoIG1heSBiZQordmVyeSB3YXN0ZWZ1bC4KKworImdpdCBiaXNlY3QiIG92ZXJ2aWV3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RhcnRpbmcgYSBiaXNlY3Rpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBmaXJzdCAiZ2l0IGJpc2VjdCIgc3ViY29tbWFuZCB0byB1c2UgaXMgImdpdCBiaXNlY3Qgc3RhcnQiIHRvCitzdGFydCB0aGUgc2VhcmNoLiBUaGVuIGJvdW5kcyBtdXN0IGJlIHNldCB0byBsaW1pdCB0aGUgY29tbWl0CitzcGFjZS4gVGhpcyBpcyBkb25lIHVzdWFsbHkgYnkgZ2l2aW5nIG9uZSAiYmFkIiBhbmQgYXQgbGVhc3Qgb25lCisiZ29vZCIgY29tbWl0LiBUaGV5IGNhbiBiZSBwYXNzZWQgaW4gdGhlIGluaXRpYWwgY2FsbCB0byAiZ2l0IGJpc2VjdAorc3RhcnQiIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IFtCQUQgW0dPT0QuLi5dXQorLS0tLS0tLS0tLS0tLQorCitvciB0aGV5IGNhbiBiZSBzZXQgdXNpbmc6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBiYWQgW0NPTU1JVF0KKy0tLS0tLS0tLS0tLS0KKworYW5kOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgZ29vZCBbQ09NTUlULi4uXQorLS0tLS0tLS0tLS0tLQorCit3aGVyZSBCQUQsIEdPT0QgYW5kIENPTU1JVCBhcmUgYWxsIG5hbWVzIHRoYXQgY2FuIGJlIHJlc29sdmVkIHRvIGEKK2NvbW1pdC4KKworVGhlbiAiZ2l0IGJpc2VjdCIgd2lsbCBjaGVja291dCBhIGNvbW1pdCBvZiBpdHMgY2hvb3NpbmcgYW5kIGFzayB0aGUKK3VzZXIgdG8gdGVzdCBpdCwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgdjIuNi4yNyB2Mi42LjI1CitCaXNlY3Rpbmc6IDEwOTI4IHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAocm91Z2hseSAxNCBzdGVwcykKK1syZWM2NWY4Yjg5ZWEwMDNjMjdmZjc3MjM1MjVhMmVlMzM1YTJiMzkzXSB4ODY6IGNsZWFuIHVwIHVzaW5nIG1heF9sb3dfcGZuIG9uIDMyLWJpdAorLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgdGhlIGV4YW1wbGUgdGhhdCB3ZSB3aWxsIHVzZSBpcyByZWFsbHkgYSB0b3kgZXhhbXBsZSwgd2UKK3dpbGwgYmUgbG9va2luZyBmb3IgdGhlIGZpcnN0IGNvbW1pdCB0aGF0IGhhcyBhIHZlcnNpb24gbGlrZQorIjIuNi4yNi1zb21ldGhpbmciLCB0aGF0IGlzIHRoZSBjb21taXQgdGhhdCBoYXMgYSAiU1VCTEVWRUwgPSAyNiIgbGluZQoraW4gdGhlIHRvcCBsZXZlbCBNYWtlZmlsZS4gVGhpcyBpcyBhIHRveSBleGFtcGxlIGJlY2F1c2UgdGhlcmUgYXJlCitiZXR0ZXIgd2F5cyB0byBmaW5kIHRoaXMgY29tbWl0IHdpdGggR2l0IHRoYW4gdXNpbmcgImdpdCBiaXNlY3QiIChmb3IKK2V4YW1wbGUgImdpdCBibGFtZSIgb3IgImdpdCBsb2cgLVM8c3RyaW5nPiIpLgorCitEcml2aW5nIGEgYmlzZWN0aW9uIG1hbnVhbGx5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0F0IHRoaXMgcG9pbnQgdGhlcmUgYXJlIGJhc2ljYWxseSAyIHdheXMgdG8gZHJpdmUgdGhlIHNlYXJjaC4gSXQgY2FuCitiZSBkcml2ZW4gbWFudWFsbHkgYnkgdGhlIHVzZXIgb3IgaXQgY2FuIGJlIGRyaXZlbiBhdXRvbWF0aWNhbGx5IGJ5IGEKK3NjcmlwdCBvciBhIGNvbW1hbmQuCisKK0lmIHRoZSB1c2VyIGlzIGRyaXZpbmcgaXQsIHRoZW4gYXQgZWFjaCBzdGVwIG9mIHRoZSBzZWFyY2gsIHRoZSB1c2VyCit3aWxsIGhhdmUgdG8gdGVzdCB0aGUgY3VycmVudCBjb21taXQgYW5kIHNheSBpZiBpdCBpcyAiZ29vZCIgb3IgImJhZCIKK3VzaW5nIHRoZSAiZ2l0IGJpc2VjdCBnb29kIiBvciAiZ2l0IGJpc2VjdCBiYWQiIGNvbW1hbmRzIHJlc3BlY3RpdmVseQordGhhdCBoYXZlIGJlZW4gZGVzY3JpYmVkIGFib3ZlLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGJhZAorQmlzZWN0aW5nOiA1NDgwIHJldmlzaW9ucyBsZWZ0IHRvIHRlc3QgYWZ0ZXIgdGhpcyAocm91Z2hseSAxMyBzdGVwcykKK1s2NmMwYjM5NGYwOGZkODkyMzY1MTVjMWM4NDQ4NWVhNzEyYTE1N2JlXSBLVk06IGtpbGwgZmlsZS0+Zl9jb3VudCBhYnVzZSBpbiBrdm0KKy0tLS0tLS0tLS0tLS0KKworQW5kIGFmdGVyIGEgZmV3IG1vcmUgc3RlcHMgbGlrZSB0aGF0LCAiZ2l0IGJpc2VjdCIgd2lsbCBldmVudHVhbGx5CitmaW5kIGEgZmlyc3QgYmFkIGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGJhZAorMmRkY2NhMzZjOGJjZmEyNTE3MjRmZTM0MmM4MzI3NDUxOTg4YmUwZCBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdAorY29tbWl0IDJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGQKK0F1dGhvcjogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPgorRGF0ZTogICBTYXQgTWF5IDMgMTE6NTk6NDQgMjAwOCAtMDcwMAorCisgICAgTGludXggMi42LjI2LXJjMQorCis6MTAwNjQ0IDEwMDY0NCA1Y2Y4MjU4MS4uLiA0NDkyOTg0ZS4uLiBNICAgICAgTWFrZWZpbGUKKy0tLS0tLS0tLS0tLS0KKworQXQgdGhpcyBwb2ludCB3ZSBjYW4gc2VlIHdoYXQgdGhlIGNvbW1pdCBkb2VzLCBjaGVjayBpdCBvdXQgKGlmIGl0J3MKK25vdCBhbHJlYWR5IGNoZWNrZWQgb3V0KSBvciB0aW5rZXIgd2l0aCBpdCwgZm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgSEVBRAorY29tbWl0IDJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGQKK0F1dGhvcjogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPgorRGF0ZTogICBTYXQgTWF5IDMgMTE6NTk6NDQgMjAwOCAtMDcwMAorCisgICAgTGludXggMi42LjI2LXJjMQorCitkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQoraW5kZXggNWNmODI1OC4uNDQ5Mjk4NCAxMDA2NDQKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTEsNyArMSw3IEBACisgVkVSU0lPTiA9IDIKKyBQQVRDSExFVkVMID0gNgorLVNVQkxFVkVMID0gMjUKKy1FWFRSQVZFUlNJT04gPQorK1NVQkxFVkVMID0gMjYKKytFWFRSQVZFUlNJT04gPSAtcmMxCisgTkFNRSA9IEZ1bmt5IFdlYXNlbCBpcyBKaWdneSB3aXQgaXQKKworICMgKkRPQ1VNRU5UQVRJT04qCistLS0tLS0tLS0tLS0tCisKK0FuZCB3aGVuIHdlIGFyZSBmaW5pc2hlZCB3ZSBjYW4gdXNlICJnaXQgYmlzZWN0IHJlc2V0IiB0byBnbyBiYWNrIHRvCit0aGUgYnJhbmNoIHdlIHdlcmUgaW4gYmVmb3JlIHdlIHN0YXJ0ZWQgYmlzZWN0aW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcmVzZXQKK0NoZWNraW5nIG91dCBmaWxlczogMTAwJSAoMjE1NDkvMjE1NDkpLCBkb25lLgorUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMgMmRkY2NhMy4uLiBMaW51eCAyLjYuMjYtcmMxCitTd2l0Y2hlZCB0byBicmFuY2ggJ21hc3RlcicKKy0tLS0tLS0tLS0tLS0KKworRHJpdmluZyBhIGJpc2VjdGlvbiBhdXRvbWF0aWNhbGx5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIG90aGVyIHdheSB0byBkcml2ZSB0aGUgYmlzZWN0aW9uIHByb2Nlc3MgaXMgdG8gdGVsbCAiZ2l0IGJpc2VjdCIKK3RvIGxhdW5jaCBhIHNjcmlwdCBvciBjb21tYW5kIGF0IGVhY2ggYmlzZWN0aW9uIHN0ZXAgdG8ga25vdyBpZiB0aGUKK2N1cnJlbnQgY29tbWl0IGlzICJnb29kIiBvciAiYmFkIi4gVG8gZG8gdGhhdCwgd2UgdXNlIHRoZSAiZ2l0IGJpc2VjdAorcnVuIiBjb21tYW5kLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IHYyLjYuMjcgdjIuNi4yNQorQmlzZWN0aW5nOiAxMDkyOCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTQgc3RlcHMpCitbMmVjNjVmOGI4OWVhMDAzYzI3ZmY3NzIzNTI1YTJlZTMzNWEyYjM5M10geDg2OiBjbGVhbiB1cCB1c2luZyBtYXhfbG93X3BmbiBvbiAzMi1iaXQKKyQKKyQgZ2l0IGJpc2VjdCBydW4gZ3JlcCAnXlNVQkxFVkVMID0gMjUnIE1ha2VmaWxlCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKK0Jpc2VjdGluZzogNTQ4MCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTMgc3RlcHMpCitbNjZjMGIzOTRmMDhmZDg5MjM2NTE1YzFjODQ0ODVlYTcxMmExNTdiZV0gS1ZNOiBraWxsIGZpbGUtPmZfY291bnQgYWJ1c2UgaW4ga3ZtCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKK1NVQkxFVkVMID0gMjUKK0Jpc2VjdGluZzogMjc0MCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTIgc3RlcHMpCitbNjcxMjk0NzE5NjI4ZjE2NzFmYWVmZDQ4ODI3NjQ4ODZmOGFkMDhjYl0gVjRML0RWQig3ODc5KTogQWRkaW5nIGN4MTggU3VwcG9ydCBmb3IgbXhsNTAwNXMKKy4uLgorLi4uCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKK0Jpc2VjdGluZzogMCByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMCBzdGVwcykKK1syZGRjY2EzNmM4YmNmYTI1MTcyNGZlMzQyYzgzMjc0NTE5ODhiZTBkXSBMaW51eCAyLjYuMjYtcmMxCitydW5uaW5nIGdyZXAgXlNVQkxFVkVMID0gMjUgTWFrZWZpbGUKKzJkZGNjYTM2YzhiY2ZhMjUxNzI0ZmUzNDJjODMyNzQ1MTk4OGJlMGQgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQKK2NvbW1pdCAyZGRjY2EzNmM4YmNmYTI1MTcyNGZlMzQyYzgzMjc0NTE5ODhiZTBkCitBdXRob3I6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4KK0RhdGU6ICAgU2F0IE1heSAzIDExOjU5OjQ0IDIwMDggLTA3MDAKKworICAgIExpbnV4IDIuNi4yNi1yYzEKKworOjEwMDY0NCAxMDA2NDQgNWNmODI1ODEuLi4gNDQ5Mjk4NGUuLi4gTSAgICAgIE1ha2VmaWxlCitiaXNlY3QgcnVuIHN1Y2Nlc3MKKy0tLS0tLS0tLS0tLS0KKworSW4gdGhpcyBleGFtcGxlLCB3ZSBwYXNzZWQgImdyZXAgJ15TVUJMRVZFTCA9IDI1JyBNYWtlZmlsZSIgYXMKK3BhcmFtZXRlciB0byAiZ2l0IGJpc2VjdCBydW4iLiBUaGlzIG1lYW5zIHRoYXQgYXQgZWFjaCBzdGVwLCB0aGUgZ3JlcAorY29tbWFuZCB3ZSBwYXNzZWQgd2lsbCBiZSBsYXVuY2hlZC4gQW5kIGlmIGl0IGV4aXRzIHdpdGggY29kZSAwICh0aGF0CittZWFucyBzdWNjZXNzKSB0aGVuIGdpdCBiaXNlY3Qgd2lsbCBtYXJrIHRoZSBjdXJyZW50IHN0YXRlIGFzCisiZ29vZCIuIElmIGl0IGV4aXRzIHdpdGggY29kZSAxIChvciBhbnkgY29kZSBiZXR3ZWVuIDEgYW5kIDEyNworaW5jbHVkZWQsIGV4Y2VwdCB0aGUgc3BlY2lhbCBjb2RlIDEyNSksIHRoZW4gdGhlIGN1cnJlbnQgc3RhdGUgd2lsbCBiZQorbWFya2VkIGFzICJiYWQiLgorCitFeGl0IGNvZGUgYmV0d2VlbiAxMjggYW5kIDI1NSBhcmUgc3BlY2lhbCB0byAiZ2l0IGJpc2VjdCBydW4iLiBUaGV5CittYWtlIGl0IHN0b3AgaW1tZWRpYXRlbHkgdGhlIGJpc2VjdGlvbiBwcm9jZXNzLiBUaGlzIGlzIHVzZWZ1bCBmb3IKK2V4YW1wbGUgaWYgdGhlIGNvbW1hbmQgcGFzc2VkIHRha2VzIHRvbyBsb25nIHRvIGNvbXBsZXRlLCBiZWNhdXNlIHlvdQorY2FuIGtpbGwgaXQgd2l0aCBhIHNpZ25hbCBhbmQgaXQgd2lsbCBzdG9wIHRoZSBiaXNlY3Rpb24gcHJvY2Vzcy4KKworSXQgY2FuIGFsc28gYmUgdXNlZnVsIGluIHNjcmlwdHMgcGFzc2VkIHRvICJnaXQgYmlzZWN0IHJ1biIgdG8gImV4aXQKKzI1NSIgaWYgc29tZSB2ZXJ5IGFibm9ybWFsIHNpdHVhdGlvbiBpcyBkZXRlY3RlZC4KKworQXZvaWRpbmcgdW50ZXN0YWJsZSBjb21taXRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU29tZXRpbWVzIGl0IGhhcHBlbnMgdGhhdCB0aGUgY3VycmVudCBzdGF0ZSBjYW5ub3QgYmUgdGVzdGVkLCBmb3IKK2V4YW1wbGUgaWYgaXQgZG9lcyBub3QgY29tcGlsZSBiZWNhdXNlIHRoZXJlIHdhcyBhIGJ1ZyBwcmV2ZW50aW5nIGl0CithdCB0aGF0IHRpbWUuIFRoaXMgaXMgd2hhdCB0aGUgc3BlY2lhbCBleGl0IGNvZGUgMTI1IGlzIGZvci4gSXQgdGVsbHMKKyJnaXQgYmlzZWN0IHJ1biIgdGhhdCB0aGUgY3VycmVudCBjb21taXQgc2hvdWxkIGJlIG1hcmtlZCBhcwordW50ZXN0YWJsZSBhbmQgdGhhdCBhbm90aGVyIG9uZSBzaG91bGQgYmUgY2hvc2VuIGFuZCBjaGVja2VkIG91dC4KKworSWYgdGhlIGJpc2VjdGlvbiBwcm9jZXNzIGlzIGRyaXZlbiBtYW51YWxseSwgeW91IGNhbiB1c2UgImdpdCBiaXNlY3QKK3NraXAiIHRvIGRvIHRoZSBzYW1lIHRoaW5nLiAoSW4gZmFjdCB0aGUgc3BlY2lhbCBleGl0IGNvZGUgMTI1IG1ha2VzCisiZ2l0IGJpc2VjdCBydW4iIHVzZSAiZ2l0IGJpc2VjdCBza2lwIiBpbiB0aGUgYmFja2dyb3VuZC4pCisKK09yIGlmIHlvdSB3YW50IG1vcmUgY29udHJvbCwgeW91IGNhbiBpbnNwZWN0IHRoZSBjdXJyZW50IHN0YXRlIHVzaW5nCitmb3IgZXhhbXBsZSAiZ2l0IGJpc2VjdCB2aXN1YWxpemUiLiBJdCB3aWxsIGxhdW5jaCBnaXRrIChvciAiZ2l0IGxvZyIKK2lmIHRoZSBESVNQTEFZIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQpIHRvIGhlbHAgeW91IGZpbmQgYQorYmV0dGVyIGJpc2VjdGlvbiBwb2ludC4KKworRWl0aGVyIHdheSwgaWYgeW91IGhhdmUgYSBzdHJpbmcgb2YgdW50ZXN0YWJsZSBjb21taXRzLCBpdCBtaWdodAoraGFwcGVuIHRoYXQgdGhlIHJlZ3Jlc3Npb24geW91IGFyZSBsb29raW5nIGZvciBoYXMgYmVlbiBpbnRyb2R1Y2VkIGJ5CitvbmUgb2YgdGhlc2UgdW50ZXN0YWJsZSBjb21taXRzLiBJbiB0aGlzIGNhc2UgaXQncyBub3QgcG9zc2libGUgdG8KK3RlbGwgZm9yIHN1cmUgd2hpY2ggY29tbWl0IGludHJvZHVjZWQgdGhlIHJlZ3Jlc3Npb24uCisKK1NvIGlmIHlvdSB1c2VkICJnaXQgYmlzZWN0IHNraXAiIChvciB0aGUgcnVuIHNjcmlwdCBleGl0ZWQgd2l0aAorc3BlY2lhbCBjb2RlIDEyNSkgeW91IGNvdWxkIGdldCBhIHJlc3VsdCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0KK1RoZXJlIGFyZSBvbmx5ICdza2lwJ3BlZCBjb21taXRzIGxlZnQgdG8gdGVzdC4KK1RoZSBmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZjoKKzE1NzIyZjJmYTMyOGVhYmE5NzAyMjg5OGEzMDVmZmM4MTcyZGI2YjEKKzc4ZTg2Y2YzZTg1MGJkNzU1YmI3MTgzMWY0MmUyMDA2MjZmYmQxZTAKK2UxNWI3M2FkM2RiOWI0OGQ3ZDFhZGUzMmY4Y2QyM2E3NTFmZTBhY2UKKzA3MGVhYjIzMDMwMjQ3MDZmMjkyNDgyMmJmZWM4Yjk4NDdlNGFjMWIKK1dlIGNhbm5vdCBiaXNlY3QgbW9yZSEKKy0tLS0tLS0tLS0tLS0KKworU2F2aW5nIGEgbG9nIGFuZCByZXBsYXlpbmcgaXQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0lmIHlvdSB3YW50IHRvIHNob3cgb3RoZXIgcGVvcGxlIHlvdXIgYmlzZWN0aW9uIHByb2Nlc3MsIHlvdSBjYW4gZ2V0IGEKK2xvZyB1c2luZyBmb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGxvZyA+IGJpc2VjdF9sb2cudHh0CistLS0tLS0tLS0tLS0tCisKK0FuZCBpdCBpcyBwb3NzaWJsZSB0byByZXBsYXkgaXQgdXNpbmc6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCByZXBsYXkgYmlzZWN0X2xvZy50eHQKKy0tLS0tLS0tLS0tLS0KKworCisiZ2l0IGJpc2VjdCIgZGV0YWlscworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmlzZWN0aW9uIGFsZ29yaXRobQorfn5+fn5+fn5+fn5+fn5+fn5+fgorCitBcyB0aGUgR2l0IGNvbW1pdHMgZm9ybSBhIGRpcmVjdGVkIGFjeWNsaWMgZ3JhcGggKERBRyksIGZpbmRpbmcgdGhlCitiZXN0IGJpc2VjdGlvbiBjb21taXQgdG8gdGVzdCBhdCBlYWNoIHN0ZXAgaXMgbm90IHNvIHNpbXBsZS4gQW55d2F5CitMaW51cyBmb3VuZCBhbmQgaW1wbGVtZW50ZWQgYSAidHJ1bHkgc3R1cGlkIiBhbGdvcml0aG0sIGxhdGVyIGltcHJvdmVkCitieSBKdW5pbyBIYW1hbm8sIHRoYXQgd29ya3MgcXVpdGUgd2VsbC4KKworU28gdGhlIGFsZ29yaXRobSB1c2VkIGJ5ICJnaXQgYmlzZWN0IiB0byBmaW5kIHRoZSBiZXN0IGJpc2VjdGlvbgorY29tbWl0IHdoZW4gdGhlcmUgYXJlIG5vIHNraXBwZWQgY29tbWl0cyBpcyB0aGUgZm9sbG93aW5nOgorCisxKSBrZWVwIG9ubHkgdGhlIGNvbW1pdHMgdGhhdDoKKworYSkgYXJlIGFuY2VzdG9yIG9mIHRoZSAiYmFkIiBjb21taXQgKGluY2x1ZGluZyB0aGUgImJhZCIgY29tbWl0IGl0c2VsZiksCitiKSBhcmUgbm90IGFuY2VzdG9yIG9mIGEgImdvb2QiIGNvbW1pdCAoZXhjbHVkaW5nIHRoZSAiZ29vZCIgY29tbWl0cykuCisKK1RoaXMgbWVhbnMgdGhhdCB3ZSBnZXQgcmlkIG9mIHRoZSB1bmludGVyZXN0aW5nIGNvbW1pdHMgaW4gdGhlIERBRy4KKworRm9yIGV4YW1wbGUgaWYgd2Ugc3RhcnQgd2l0aCBhIGdyYXBoIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLQorRy1ZLUctVy1XLVctWC1YLVgtWAorCSAgIFwgLworCSAgICBXLVctQgorCSAgIC8KK1ktLS1HLVctLS1XCisgXCAvICAgXAorWS1ZICAgICBYLVgtWC1YCisKKy0+IHRpbWUgZ29lcyB0aGlzIHdheSAtPgorLS0tLS0tLS0tLS0tLQorCit3aGVyZSBCIGlzIHRoZSAiYmFkIiBjb21taXQsICJHIiBhcmUgImdvb2QiIGNvbW1pdHMgYW5kIFcsIFgsIGFuZCBZCithcmUgb3RoZXIgY29tbWl0cywgd2Ugd2lsbCBnZXQgdGhlIGZvbGxvd2luZyBncmFwaCBhZnRlciB0aGlzIGZpcnN0CitzdGVwOgorCistLS0tLS0tLS0tLS0tCitXLVctVworICAgICBcCisgICAgICBXLVctQgorICAgICAvCitXLS0tVworLS0tLS0tLS0tLS0tLQorCitTbyBvbmx5IHRoZSBXIGFuZCBCIGNvbW1pdHMgd2lsbCBiZSBrZXB0LiBCZWNhdXNlIGNvbW1pdHMgWCBhbmQgWSB3aWxsCitoYXZlIGJlZW4gcmVtb3ZlZCBieSBydWxlcyBhKSBhbmQgYikgcmVzcGVjdGl2ZWx5LCBhbmQgYmVjYXVzZSBjb21taXRzCitHIGFyZSByZW1vdmVkIGJ5IHJ1bGUgYikgdG9vLgorCitOb3RlIGZvciBHaXQgdXNlcnMsIHRoYXQgaXQgaXMgZXF1aXZhbGVudCBhcyBrZWVwaW5nIG9ubHkgdGhlIGNvbW1pdAorZ2l2ZW4gYnk6CisKKy0tLS0tLS0tLS0tLS0KK2dpdCByZXYtbGlzdCBCQUQgLS1ub3QgR09PRDEgR09PRDIuLi4KKy0tLS0tLS0tLS0tLS0KKworQWxzbyBub3RlIHRoYXQgd2UgZG9uJ3QgcmVxdWlyZSB0aGUgY29tbWl0cyB0aGF0IGFyZSBrZXB0IHRvIGJlCitkZXNjZW5kYW50cyBvZiBhICJnb29kIiBjb21taXQuIFNvIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgY29tbWl0cyBXCithbmQgWiB3aWxsIGJlIGtlcHQ6CisKKy0tLS0tLS0tLS0tLS0KK0ctVy1XLVctQgorICAgLworWi1aCistLS0tLS0tLS0tLS0tCisKKzIpIHN0YXJ0aW5nIGZyb20gdGhlICJnb29kIiBlbmRzIG9mIHRoZSBncmFwaCwgYXNzb2NpYXRlIHRvIGVhY2gKK2NvbW1pdCB0aGUgbnVtYmVyIG9mIGFuY2VzdG9ycyBpdCBoYXMgcGx1cyBvbmUKKworRm9yIGV4YW1wbGUgd2l0aCB0aGUgZm9sbG93aW5nIGdyYXBoIHdoZXJlIEggaXMgdGhlICJiYWQiIGNvbW1pdCBhbmQgQQorYW5kIEQgYXJlIHNvbWUgcGFyZW50cyBvZiBzb21lICJnb29kIiBjb21taXRzOgorCistLS0tLS0tLS0tLS0tCitBLUItQworICAgICBcCisgICAgICBGLUctSAorICAgICAvCitELS0tRQorLS0tLS0tLS0tLS0tLQorCit0aGlzIHdpbGwgZ2l2ZToKKworLS0tLS0tLS0tLS0tLQorMSAyIDMKK0EtQi1DCisgICAgIFw2IDcgOAorICAgICAgRi1HLUgKKzEgICAyLworRC0tLUUKKy0tLS0tLS0tLS0tLS0KKworMykgYXNzb2NpYXRlIHRvIGVhY2ggY29tbWl0OiBtaW4oWCwgTiAtIFgpCisKK3doZXJlIFggaXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgdG8gdGhlIGNvbW1pdCBpbiBzdGVwIDIpIGFuZCBOIGlzIHRoZQordG90YWwgbnVtYmVyIG9mIGNvbW1pdHMgaW4gdGhlIGdyYXBoLgorCitJbiB0aGUgYWJvdmUgZXhhbXBsZSB3ZSBoYXZlIE4gPSA4LCBzbyB0aGlzIHdpbGwgZ2l2ZToKKworLS0tLS0tLS0tLS0tLQorMSAyIDMKK0EtQi1DCisgICAgIFwyIDEgMAorICAgICAgRi1HLUgKKzEgICAyLworRC0tLUUKKy0tLS0tLS0tLS0tLS0KKworNCkgdGhlIGJlc3QgYmlzZWN0aW9uIHBvaW50IGlzIHRoZSBjb21taXQgd2l0aCB0aGUgaGlnaGVzdCBhc3NvY2lhdGVkCitudW1iZXIKKworU28gaW4gdGhlIGFib3ZlIGV4YW1wbGUgdGhlIGJlc3QgYmlzZWN0aW9uIHBvaW50IGlzIGNvbW1pdCBDLgorCis1KSBub3RlIHRoYXQgc29tZSBzaG9ydGN1dHMgYXJlIGltcGxlbWVudGVkIHRvIHNwZWVkIHVwIHRoZSBhbGdvcml0aG0KKworQXMgd2Uga25vdyBOIGZyb20gdGhlIGJlZ2lubmluZywgd2Uga25vdyB0aGF0IG1pbihYLCBOIC0gWCkgY2FuJ3QgYmUKK2dyZWF0ZXIgdGhhbiBOLzIuIFNvIGR1cmluZyBzdGVwcyAyKSBhbmQgMyksIGlmIHdlIHdvdWxkIGFzc29jaWF0ZSBOLzIKK3RvIGEgY29tbWl0LCB0aGVuIHdlIGtub3cgdGhpcyBpcyB0aGUgYmVzdCBiaXNlY3Rpb24gcG9pbnQuIFNvIGluIHRoaXMKK2Nhc2Ugd2UgY2FuIGp1c3Qgc3RvcCBwcm9jZXNzaW5nIGFueSBvdGhlciBjb21taXQgYW5kIHJldHVybiB0aGUKK2N1cnJlbnQgY29tbWl0LgorCitCaXNlY3Rpb24gYWxnb3JpdGhtIGRlYnVnZ2luZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworRm9yIGFueSBjb21taXQgZ3JhcGgsIHlvdSBjYW4gc2VlIHRoZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIGVhY2gKK2NvbW1pdCB1c2luZyAiZ2l0IHJldi1saXN0IC0tYmlzZWN0LWFsbCIuCisKK0ZvciBleGFtcGxlLCBmb3IgdGhlIGFib3ZlIGdyYXBoLCBhIGNvbW1hbmQgbGlrZToKKworLS0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LWxpc3QgLS1iaXNlY3QtYWxsIEJBRCAtLW5vdCBHT09EMSBHT09EMgorLS0tLS0tLS0tLS0tLQorCit3b3VsZCBvdXRwdXQgc29tZXRoaW5nIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0KK2UxNWI3M2FkM2RiOWI0OGQ3ZDFhZGUzMmY4Y2QyM2E3NTFmZTBhY2UgKGRpc3Q9MykKKzE1NzIyZjJmYTMyOGVhYmE5NzAyMjg5OGEzMDVmZmM4MTcyZGI2YjEgKGRpc3Q9MikKKzc4ZTg2Y2YzZTg1MGJkNzU1YmI3MTgzMWY0MmUyMDA2MjZmYmQxZTAgKGRpc3Q9MikKK2ExOTM5ZDlhMTQyZGU5NzIwOTRhZjRkZGU5YTU0NGU1NzdkZGVmMGUgKGRpc3Q9MikKKzA3MGVhYjIzMDMwMjQ3MDZmMjkyNDgyMmJmZWM4Yjk4NDdlNGFjMWIgKGRpc3Q9MSkKK2EzODY0ZDRmMzJhM2JmNWVkMTc3ZGRlZjU5ODQ5MGEwODc2MGI3MGQgKGRpc3Q9MSkKK2E0MWJhYTcxN2RkNzRmMTE4MGFiZjU1ZTkzNDFiYzdhMGJiOWQ1NTYgKGRpc3Q9MSkKKzllNjIyYTZkYWQ0MDNiNzFjNDA5Nzk3NDNiYjlkNWJlMTdiMTZiZDYgKGRpc3Q9MCkKKy0tLS0tLS0tLS0tLS0KKworQmlzZWN0aW9uIGFsZ29yaXRobSBkaXNjdXNzZWQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZpcnN0IGxldCdzIGRlZmluZSAiYmVzdCBiaXNlY3Rpb24gcG9pbnQiLiBXZSB3aWxsIHNheSB0aGF0IGEgY29tbWl0IFgKK2lzIGEgYmVzdCBiaXNlY3Rpb24gcG9pbnQgb3IgYSBiZXN0IGJpc2VjdGlvbiBjb21taXQgaWYga25vd2luZyBpdHMKK3N0YXRlICgiZ29vZCIgb3IgImJhZCIpIGdpdmVzIGFzIG11Y2ggaW5mb3JtYXRpb24gYXMgcG9zc2libGUgd2hldGhlcgordGhlIHN0YXRlIG9mIHRoZSBjb21taXQgaGFwcGVucyB0byBiZSAiZ29vZCIgb3IgImJhZCIuCisKK1RoaXMgbWVhbnMgdGhhdCB0aGUgYmVzdCBiaXNlY3Rpb24gY29tbWl0cyBhcmUgdGhlIGNvbW1pdHMgd2hlcmUgdGhlCitmb2xsb3dpbmcgZnVuY3Rpb24gaXMgbWF4aW11bToKKworLS0tLS0tLS0tLS0tLQorZihYKSA9IG1pbihpbmZvcm1hdGlvbl9pZl9nb29kKFgpLCBpbmZvcm1hdGlvbl9pZl9iYWQoWCkpCistLS0tLS0tLS0tLS0tCisKK3doZXJlIGluZm9ybWF0aW9uX2lmX2dvb2QoWCkgaXMgdGhlIGluZm9ybWF0aW9uIHdlIGdldCBpZiBYIGlzIGdvb2QKK2FuZCBpbmZvcm1hdGlvbl9pZl9iYWQoWCkgaXMgdGhlIGluZm9ybWF0aW9uIHdlIGdldCBpZiBYIGlzIGJhZC4KKworTm93IHdlIHdpbGwgc3VwcG9zZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lICJmaXJzdCBiYWQgY29tbWl0Ii4gVGhpcworbWVhbnMgdGhhdCBhbGwgaXRzIGRlc2NlbmRhbnRzIGFyZSAiYmFkIiBhbmQgYWxsIHRoZSBvdGhlciBjb21taXRzIGFyZQorImdvb2QiLiBBbmQgd2Ugd2lsbCBzdXBwb3NlIHRoYXQgYWxsIGNvbW1pdHMgaGF2ZSBhbiBlcXVhbCBwcm9iYWJpbGl0eQorb2YgYmVpbmcgZ29vZCBvciBiYWQsIG9yIG9mIGJlaW5nIHRoZSBmaXJzdCBiYWQgY29tbWl0LCBzbyBrbm93aW5nIHRoZQorc3RhdGUgb2YgYyBjb21taXRzIGdpdmVzIGFsd2F5cyB0aGUgc2FtZSBhbW91bnQgb2YgaW5mb3JtYXRpb24KK3doZXJldmVyIHRoZXNlIGMgY29tbWl0cyBhcmUgb24gdGhlIGdyYXBoIGFuZCB3aGF0ZXZlciBjIGlzLiAoU28gd2UKK3N1cHBvc2UgdGhhdCB0aGVzZSBjb21taXRzIGJlaW5nIGZvciBleGFtcGxlIG9uIGEgYnJhbmNoIG9yIG5lYXIgYQorZ29vZCBvciBhIGJhZCBjb21taXQgZG9lcyBub3QgZ2l2ZSBtb3JlIG9yIGxlc3MgaW5mb3JtYXRpb24pLgorCitMZXQncyBhbHNvIHN1cHBvc2UgdGhhdCB3ZSBoYXZlIGEgY2xlYW5lZCB1cCBncmFwaCBsaWtlIG9uZSBhZnRlciBzdGVwCisxKSBpbiB0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSBhYm92ZS4gVGhpcyBtZWFucyB0aGF0IHdlIGNhbiBtZWFzdXJlCit0aGUgaW5mb3JtYXRpb24gd2UgZ2V0IGluIHRlcm1zIG9mIG51bWJlciBvZiBjb21taXQgd2UgY2FuIHJlbW92ZSBmcm9tCit0aGUgZ3JhcGguLgorCitBbmQgbGV0J3MgdGFrZSBhIGNvbW1pdCBYIGluIHRoZSBncmFwaC4KKworSWYgWCBpcyBmb3VuZCB0byBiZSAiZ29vZCIsIHRoZW4gd2Uga25vdyB0aGF0IGl0cyBhbmNlc3RvcnMgYXJlIGFsbAorImdvb2QiLCBzbyB3ZSB3YW50IHRvIHNheSB0aGF0OgorCistLS0tLS0tLS0tLS0tCitpbmZvcm1hdGlvbl9pZl9nb29kKFgpID0gbnVtYmVyX29mX2FuY2VzdG9ycyhYKSAgKFRSVUUpCistLS0tLS0tLS0tLS0tCisKK0FuZCB0aGlzIGlzIHRydWUgYmVjYXVzZSBhdCBzdGVwIDEpIGIpIHdlIHJlbW92ZSB0aGUgYW5jZXN0b3JzIG9mIHRoZQorImdvb2QiIGNvbW1pdHMuCisKK0lmIFggaXMgZm91bmQgdG8gYmUgImJhZCIsIHRoZW4gd2Uga25vdyB0aGF0IGl0cyBkZXNjZW5kYW50cyBhcmUgYWxsCisiYmFkIiwgc28gd2Ugd2FudCB0byBzYXkgdGhhdDoKKworLS0tLS0tLS0tLS0tLQoraW5mb3JtYXRpb25faWZfYmFkKFgpID0gbnVtYmVyX29mX2Rlc2NlbmRhbnRzKFgpICAoV1JPTkcpCistLS0tLS0tLS0tLS0tCisKK0J1dCB0aGlzIGlzIHdyb25nIGJlY2F1c2UgYXQgc3RlcCAxKSBhKSB3ZSBrZWVwIG9ubHkgdGhlIGFuY2VzdG9ycyBvZgordGhlIGJhZCBjb21taXQuIFNvIHdlIGdldCBtb3JlIGluZm9ybWF0aW9uIHdoZW4gYSBjb21taXQgaXMgbWFya2VkIGFzCisiYmFkIiwgYmVjYXVzZSB3ZSBhbHNvIGtub3cgdGhhdCB0aGUgYW5jZXN0b3JzIG9mIHRoZSBwcmV2aW91cyAiYmFkIgorY29tbWl0IHRoYXQgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlIG5ldyAiYmFkIiBjb21taXQgYXJlIG5vdCB0aGUKK2ZpcnN0IGJhZCBjb21taXQuIFdlIGRvbid0IGtub3cgaWYgdGhleSBhcmUgZ29vZCBvciBiYWQsIGJ1dCB3ZSBrbm93Cit0aGF0IHRoZXkgYXJlIG5vdCB0aGUgZmlyc3QgYmFkIGNvbW1pdCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhbmNlc3Rvcgorb2YgdGhlIG5ldyAiYmFkIiBjb21taXQuCisKK1NvIHdoZW4gYSBjb21taXQgaXMgbWFya2VkIGFzICJiYWQiIHdlIGtub3cgd2UgY2FuIHJlbW92ZSBhbGwgdGhlCitjb21taXRzIGluIHRoZSBncmFwaCBleGNlcHQgdGhvc2UgdGhhdCBhcmUgYW5jZXN0b3JzIG9mIHRoZSBuZXcgImJhZCIKK2NvbW1pdC4gVGhpcyBtZWFucyB0aGF0OgorCistLS0tLS0tLS0tLS0tCitpbmZvcm1hdGlvbl9pZl9iYWQoWCkgPSBOIC0gbnVtYmVyX29mX2FuY2VzdG9ycyhYKSAgKFRSVUUpCistLS0tLS0tLS0tLS0tCisKK3doZXJlIE4gaXMgdGhlIG51bWJlciBvZiBjb21taXRzIGluIHRoZSAoY2xlYW5lZCB1cCkgZ3JhcGguCisKK1NvIGluIHRoZSBlbmQgdGhpcyBtZWFucyB0aGF0IHRvIGZpbmQgdGhlIGJlc3QgYmlzZWN0aW9uIGNvbW1pdHMgd2UKK3Nob3VsZCBtYXhpbWl6ZSB0aGUgZnVuY3Rpb246CisKKy0tLS0tLS0tLS0tLS0KK2YoWCkgPSBtaW4obnVtYmVyX29mX2FuY2VzdG9ycyhYKSwgTiAtIG51bWJlcl9vZl9hbmNlc3RvcnMoWCkpCistLS0tLS0tLS0tLS0tCisKK0FuZCB0aGlzIGlzIG5pY2UgYmVjYXVzZSBhdCBzdGVwIDIpIHdlIGNvbXB1dGUgbnVtYmVyX29mX2FuY2VzdG9ycyhYKQorYW5kIHNvIGF0IHN0ZXAgMykgd2UgY29tcHV0ZSBmKFgpLgorCitMZXQncyB0YWtlIHRoZSBmb2xsb3dpbmcgZ3JhcGggYXMgYW4gZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorCSAgICBHLUgtSS1KCisJICAgLyAgICAgICBcCitBLUItQy1ELUUtRiAgICAgICAgIE8KKwkgICBcICAgICAgIC8KKwkgICAgSy1MLU0tTgorLS0tLS0tLS0tLS0tLQorCitJZiB3ZSBjb21wdXRlIHRoZSBmb2xsb3dpbmcgbm9uIG9wdGltYWwgZnVuY3Rpb24gb24gaXQ6CisKKy0tLS0tLS0tLS0tLS0KK2coWCkgPSBtaW4obnVtYmVyX29mX2FuY2VzdG9ycyhYKSwgbnVtYmVyX29mX2Rlc2NlbmRhbnRzKFgpKQorLS0tLS0tLS0tLS0tLQorCit3ZSBnZXQ6CisKKy0tLS0tLS0tLS0tLS0KKwkgICAgNCAzIDIgMQorCSAgICBHLUgtSS1KCisxIDIgMyA0IDUgNi8gICAgICAgXDAKK0EtQi1DLUQtRS1GICAgICAgICAgTworCSAgIFwgICAgICAgLworCSAgICBLLUwtTS1OCisJICAgIDQgMyAyIDEKKy0tLS0tLS0tLS0tLS0KKworYnV0IHdpdGggdGhlIGFsZ29yaXRobSB1c2VkIGJ5IGdpdCBiaXNlY3Qgd2UgZ2V0OgorCistLS0tLS0tLS0tLS0tCisJICAgIDcgNyA2IDUKKwkgICAgRy1ILUktSgorMSAyIDMgNCA1IDYvICAgICAgIFwwCitBLUItQy1ELUUtRiAgICAgICAgIE8KKwkgICBcICAgICAgIC8KKwkgICAgSy1MLU0tTgorCSAgICA3IDcgNiA1CistLS0tLS0tLS0tLS0tCisKK1NvIHdlIGNob3NlIEcsIEgsIEsgb3IgTCBhcyB0aGUgYmVzdCBiaXNlY3Rpb24gcG9pbnQsIHdoaWNoIGlzIGJldHRlcgordGhhbiBGLiBCZWNhdXNlIGlmIGZvciBleGFtcGxlIEwgaXMgYmFkLCB0aGVuIHdlIHdpbGwga25vdyBub3Qgb25seQordGhhdCBMLCBNIGFuZCBOIGFyZSBiYWQgYnV0IGFsc28gdGhhdCBHLCBILCBJIGFuZCBKIGFyZSBub3QgdGhlIGZpcnN0CitiYWQgY29tbWl0IChzaW5jZSB3ZSBzdXBwb3NlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlyc3QgYmFkIGNvbW1pdAorYW5kIGl0IG11c3QgYmUgYW4gYW5jZXN0b3Igb2YgTCkuCisKK1NvIHRoZSBjdXJyZW50IGFsZ29yaXRobSBzZWVtcyB0byBiZSB0aGUgYmVzdCBwb3NzaWJsZSBnaXZlbiB3aGF0IHdlCitpbml0aWFsbHkgc3VwcG9zZWQuCisKK1NraXAgYWxnb3JpdGhtCit+fn5+fn5+fn5+fn5+fgorCitXaGVuIHNvbWUgY29tbWl0cyBoYXZlIGJlZW4gc2tpcHBlZCAodXNpbmcgImdpdCBiaXNlY3Qgc2tpcCIpLCB0aGVuCit0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSBpcyB0aGUgc2FtZSBmb3Igc3RlcCAxKSB0byAzKS4gQnV0IHRoZW4gd2UgdXNlCityb3VnaGx5IHRoZSBmb2xsb3dpbmcgc3RlcHM6CisKKzYpIHNvcnQgdGhlIGNvbW1pdCBieSBkZWNyZWFzaW5nIGFzc29jaWF0ZWQgdmFsdWUKKworNykgaWYgdGhlIGZpcnN0IGNvbW1pdCBoYXMgbm90IGJlZW4gc2tpcHBlZCwgd2UgY2FuIHJldHVybiBpdCBhbmQgc3RvcAoraGVyZQorCis4KSBvdGhlcndpc2UgZmlsdGVyIG91dCBhbGwgdGhlIHNraXBwZWQgY29tbWl0cyBpbiB0aGUgc29ydGVkIGxpc3QKKworOSkgdXNlIGEgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIChQUk5HKSB0byBnZW5lcmF0ZSBhIHJhbmRvbQorbnVtYmVyIGJldHdlZW4gMCBhbmQgMQorCisxMCkgbXVsdGlwbHkgdGhpcyByYW5kb20gbnVtYmVyIHdpdGggaXRzIHNxdWFyZSByb290IHRvIGJpYXMgaXQgdG93YXJkCiswCisKKzExKSBtdWx0aXBseSB0aGUgcmVzdWx0IGJ5IHRoZSBudW1iZXIgb2YgY29tbWl0cyBpbiB0aGUgZmlsdGVyZWQgbGlzdAordG8gZ2V0IGFuIGluZGV4IGludG8gdGhpcyBsaXN0CisKKzEyKSByZXR1cm4gdGhlIGNvbW1pdCBhdCB0aGUgY29tcHV0ZWQgaW5kZXgKKworU2tpcCBhbGdvcml0aG0gZGlzY3Vzc2VkCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQWZ0ZXIgc3RlcCA3KSAoaW4gdGhlIHNraXAgYWxnb3JpdGhtKSwgd2UgY291bGQgY2hlY2sgaWYgdGhlIHNlY29uZAorY29tbWl0IGhhcyBiZWVuIHNraXBwZWQgYW5kIHJldHVybiBpdCBpZiBpdCBpcyBub3QgdGhlIGNhc2UuIEFuZCBpbgorZmFjdCB0aGF0IHdhcyB0aGUgYWxnb3JpdGhtIHdlIHVzZWQgZnJvbSB3aGVuICJnaXQgYmlzZWN0IHNraXAiIHdhcworZGV2ZWxvcGVkIGluIEdpdCB2ZXJzaW9uIDEuNS40IChyZWxlYXNlZCBvbiBGZWJydWFyeSAxc3QgMjAwOCkgdW50aWwKK0dpdCB2ZXJzaW9uIDEuNi40IChyZWxlYXNlZCBKdWx5IDI5dGggMjAwOSkuCisKK0J1dCBJbmdvIE1vbG5hciBhbmQgSC4gUGV0ZXIgQW52aW4gKGFub3RoZXIgd2VsbCBrbm93biBsaW51eCBrZXJuZWwKK2RldmVsb3BlcikgYm90aCBjb21wbGFpbmVkIHRoYXQgc29tZXRpbWVzIHRoZSBiZXN0IGJpc2VjdGlvbiBwb2ludHMKK2FsbCBoYXBwZW5lZCB0byBiZSBpbiBhbiBhcmVhIHdoZXJlIGFsbCB0aGUgY29tbWl0cyBhcmUKK3VudGVzdGFibGUuIEFuZCBpbiB0aGlzIGNhc2UgdGhlIHVzZXIgd2FzIGFza2VkIHRvIHRlc3QgbWFueQordW50ZXN0YWJsZSBjb21taXRzLCB3aGljaCBjb3VsZCBiZSB2ZXJ5IGluZWZmaWNpZW50LgorCitJbmRlZWQgdW50ZXN0YWJsZSBjb21taXRzIGFyZSBvZnRlbiB1bnRlc3RhYmxlIGJlY2F1c2UgYSBicmVha2FnZSB3YXMKK2ludHJvZHVjZWQgYXQgb25lIHRpbWUsIGFuZCB0aGF0IGJyZWFrYWdlIHdhcyBmaXhlZCBvbmx5IGFmdGVyIG1hbnkKK290aGVyIGNvbW1pdHMgd2VyZSBpbnRyb2R1Y2VkLgorCitUaGlzIGJyZWFrYWdlIGlzIG9mIGNvdXJzZSBtb3N0IG9mIHRoZSB0aW1lIHVucmVsYXRlZCB0byB0aGUgYnJlYWthZ2UKK3dlIGFyZSB0cnlpbmcgdG8gbG9jYXRlIGluIHRoZSBjb21taXQgZ3JhcGguIEJ1dCBpdCBwcmV2ZW50cyB1cyB0bwora25vdyBpZiB0aGUgaW50ZXJlc3RpbmcgImJhZCBiZWhhdmlvciIgaXMgcHJlc2VudCBvciBub3QuCisKK1NvIGl0IGlzIGEgZmFjdCB0aGF0IGNvbW1pdHMgbmVhciBhbiB1bnRlc3RhYmxlIGNvbW1pdCBoYXZlIGEgaGlnaAorcHJvYmFiaWxpdHkgb2YgYmVpbmcgdW50ZXN0YWJsZSB0aGVtc2VsdmVzLiBBbmQgdGhlIGJlc3QgYmlzZWN0aW9uCitjb21taXRzIGFyZSBvZnRlbiBmb3VuZCB0b2dldGhlciB0b28gKGR1ZSB0byB0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSkuCisKK1RoaXMgaXMgd2h5IGl0IGlzIGEgYmFkIGlkZWEgdG8ganVzdCBjaG9zZSB0aGUgbmV4dCBiZXN0IHVuc2tpcHBlZAorYmlzZWN0aW9uIGNvbW1pdCB3aGVuIHRoZSBmaXJzdCBvbmUgaGFzIGJlZW4gc2tpcHBlZC4KKworV2UgZm91bmQgdGhhdCBtb3N0IGNvbW1pdHMgb24gdGhlIGdyYXBoIG1heSBnaXZlIHF1aXRlIGEgbG90IG9mCitpbmZvcm1hdGlvbiB3aGVuIHRoZXkgYXJlIHRlc3RlZC4gQW5kIHRoZSBjb21taXRzIHRoYXQgd2lsbCBub3Qgb24KK2F2ZXJhZ2UgZ2l2ZSBhIGxvdCBvZiBpbmZvcm1hdGlvbiBhcmUgdGhlIG9uZSBuZWFyIHRoZSBnb29kIGFuZCBiYWQKK2NvbW1pdHMuCisKK1NvIHVzaW5nIGEgUFJORyB3aXRoIGEgYmlhcyB0byBmYXZvciBjb21taXRzIGF3YXkgZnJvbSB0aGUgZ29vZCBhbmQKK2JhZCBjb21taXRzIGxvb2tlZCBsaWtlIGEgZ29vZCBjaG9pY2UuCisKK09uZSBvYnZpb3VzIGltcHJvdmVtZW50IHRvIHRoaXMgYWxnb3JpdGhtIHdvdWxkIGJlIHRvIGxvb2sgZm9yIGEKK2NvbW1pdCB0aGF0IGhhcyBhbiBhc3NvY2lhdGVkIHZhbHVlIG5lYXIgdGhlIG9uZSBvZiB0aGUgYmVzdCBiaXNlY3Rpb24KK2NvbW1pdCwgYW5kIHRoYXQgaXMgb24gYW5vdGhlciBicmFuY2gsIGJlZm9yZSB1c2luZyB0aGUgUFJORy4gQmVjYXVzZQoraWYgc3VjaCBhIGNvbW1pdCBleGlzdHMsIHRoZW4gaXQgaXMgbm90IHZlcnkgbGlrZWx5IHRvIGJlIHVudGVzdGFibGUKK3Rvbywgc28gaXQgd2lsbCBwcm9iYWJseSBnaXZlIG1vcmUgaW5mb3JtYXRpb24gdGhhbiBhIG5lYXJseSByYW5kb21seQorY2hvc2VuIG9uZS4KKworQ2hlY2tpbmcgbWVyZ2UgYmFzZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZXJlIGlzIGFub3RoZXIgdHdlYWsgaW4gdGhlIGJpc2VjdGlvbiBhbGdvcml0aG0gdGhhdCBoYXMgbm90IGJlZW4KK2Rlc2NyaWJlZCBpbiB0aGUgImJpc2VjdGlvbiBhbGdvcml0aG0iIGFib3ZlLgorCitXZSBzdXBwb3NlZCBpbiB0aGUgcHJldmlvdXMgZXhhbXBsZXMgdGhhdCB0aGUgImdvb2QiIGNvbW1pdHMgd2VyZQorYW5jZXN0b3JzIG9mIHRoZSAiYmFkIiBjb21taXQuIEJ1dCB0aGlzIGlzIG5vdCBhIHJlcXVpcmVtZW50IG9mICJnaXQKK2Jpc2VjdCIuCisKK09mIGNvdXJzZSB0aGUgImJhZCIgY29tbWl0IGNhbm5vdCBiZSBhbiBhbmNlc3RvciBvZiBhICJnb29kIiBjb21taXQsCitiZWNhdXNlIHRoZSBhbmNlc3RvcnMgb2YgdGhlIGdvb2QgY29tbWl0cyBhcmUgc3VwcG9zZWQgdG8gYmUKKyJnb29kIi4gQW5kIGFsbCB0aGUgImdvb2QiIGNvbW1pdHMgbXVzdCBiZSByZWxhdGVkIHRvIHRoZSBiYWQgY29tbWl0LgorVGhleSBjYW5ub3QgYmUgb24gYSBicmFuY2ggdGhhdCBoYXMgbm8gbGluayB3aXRoIHRoZSBicmFuY2ggb2YgdGhlCisiYmFkIiBjb21taXQuIEJ1dCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBnb29kIGNvbW1pdCB0byBiZSByZWxhdGVkIHRvIGEKK2JhZCBjb21taXQgYW5kIHlldCBub3QgYmUgbmVpdGhlciBvbmUgb2YgaXRzIGFuY2VzdG9yIG5vciBvbmUgb2YgaXRzCitkZXNjZW5kYW50cy4KKworRm9yIGV4YW1wbGUsIHRoZXJlIGNhbiBiZSBhICJtYWluIiBicmFuY2gsIGFuZCBhICJkZXYiIGJyYW5jaCB0aGF0IHdhcworZm9ya2VkIG9mIHRoZSBtYWluIGJyYW5jaCBhdCBhIGNvbW1pdCBuYW1lZCAiRCIgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tCitBLUItQy1ELUUtRi1HICA8LS1tYWluCisgICAgICAgXAorCUgtSS1KICA8LS1kZXYKKy0tLS0tLS0tLS0tLS0KKworVGhlIGNvbW1pdCAiRCIgaXMgY2FsbGVkIGEgIm1lcmdlIGJhc2UiIGZvciBicmFuY2ggIm1haW4iIGFuZCAiZGV2IgorYmVjYXVzZSBpdCdzIHRoZSBiZXN0IGNvbW1vbiBhbmNlc3RvciBmb3IgdGhlc2UgYnJhbmNoZXMgZm9yIGEgbWVyZ2UuCisKK05vdyBsZXQncyBzdXBwb3NlIHRoYXQgY29tbWl0IEogaXMgYmFkIGFuZCBjb21taXQgRyBpcyBnb29kIGFuZCB0aGF0Cit3ZSBhcHBseSB0aGUgYmlzZWN0aW9uIGFsZ29yaXRobSBsaWtlIGl0IGhhcyBiZWVuIHByZXZpb3VzbHkKK2Rlc2NyaWJlZC4KKworQXMgZGVzY3JpYmVkIGluIHN0ZXAgMSkgYikgb2YgdGhlIGJpc2VjdGlvbiBhbGdvcml0aG0sIHdlIHJlbW92ZSBhbGwKK3RoZSBhbmNlc3RvcnMgb2YgdGhlIGdvb2QgY29tbWl0cyBiZWNhdXNlIHRoZXkgYXJlIHN1cHBvc2VkIHRvIGJlIGdvb2QKK3Rvby4KKworU28gd2Ugd291bGQgYmUgbGVmdCB3aXRoIG9ubHk6CisKKy0tLS0tLS0tLS0tLS0KK0gtSS1KCistLS0tLS0tLS0tLS0tCisKK0J1dCB3aGF0IGhhcHBlbnMgaWYgdGhlIGZpcnN0IGJhZCBjb21taXQgaXMgIkIiIGFuZCBpZiBpdCBoYXMgYmVlbgorZml4ZWQgaW4gdGhlICJtYWluIiBicmFuY2ggYnkgY29tbWl0ICJGIj8KKworVGhlIHJlc3VsdCBvZiBzdWNoIGEgYmlzZWN0aW9uIHdvdWxkIGJlIHRoYXQgd2Ugd291bGQgZmluZCB0aGF0IEggaXMKK3RoZSBmaXJzdCBiYWQgY29tbWl0LCB3aGVuIGluIGZhY3QgaXQncyBCLiBTbyB0aGF0IHdvdWxkIGJlIHdyb25nIQorCitBbmQgeWVzIGl0IGNhbiBoYXBwZW4gaW4gcHJhY3RpY2UgdGhhdCBwZW9wbGUgd29ya2luZyBvbiBvbmUgYnJhbmNoCithcmUgbm90IGF3YXJlIHRoYXQgcGVvcGxlIHdvcmtpbmcgb24gYW5vdGhlciBicmFuY2ggZml4ZWQgYSBidWchIEl0Citjb3VsZCBhbHNvIGhhcHBlbiB0aGF0IEYgZml4ZWQgbW9yZSB0aGFuIG9uZSBidWcgb3IgdGhhdCBpdCBpcyBhCityZXZlcnQgb2Ygc29tZSBiaWcgZGV2ZWxvcG1lbnQgZWZmb3J0IHRoYXQgd2FzIG5vdCByZWFkeSB0byBiZQorcmVsZWFzZWQuCisKK0luIGZhY3QgZGV2ZWxvcG1lbnQgdGVhbXMgb2Z0ZW4gbWFpbnRhaW4gYm90aCBhIGRldmVsb3BtZW50IGJyYW5jaCBhbmQKK2EgbWFpbnRlbmFuY2UgYnJhbmNoLCBhbmQgaXQgd291bGQgYmUgcXVpdGUgZWFzeSBmb3IgdGhlbSBpZiAiZ2l0CitiaXNlY3QiIGp1c3Qgd29ya2VkIHdoZW4gdGhleSB3YW50IHRvIGJpc2VjdCBhIHJlZ3Jlc3Npb24gb24gdGhlCitkZXZlbG9wbWVudCBicmFuY2ggdGhhdCBpcyBub3Qgb24gdGhlIG1haW50ZW5hbmNlIGJyYW5jaC4gVGhleSBzaG91bGQKK2JlIGFibGUgdG8gc3RhcnQgYmlzZWN0aW5nIHVzaW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgZGV2IG1haW4KKy0tLS0tLS0tLS0tLS0KKworVG8gZW5hYmxlIHRoYXQgYWRkaXRpb25hbCBuaWNlIGZlYXR1cmUsIHdoZW4gYSBiaXNlY3Rpb24gaXMgc3RhcnRlZAorYW5kIHdoZW4gc29tZSBnb29kIGNvbW1pdHMgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlIGJhZCBjb21taXQsIHdlCitmaXJzdCBjb21wdXRlIHRoZSBtZXJnZSBiYXNlcyBiZXR3ZWVuIHRoZSBiYWQgYW5kIHRoZSBnb29kIGNvbW1pdHMgYW5kCit3ZSBjaG9zZSB0aGVzZSBtZXJnZSBiYXNlcyBhcyB0aGUgZmlyc3QgY29tbWl0cyB0aGF0IHdpbGwgYmUgY2hlY2tlZAorb3V0IGFuZCB0ZXN0ZWQuCisKK0lmIGl0IGhhcHBlbnMgdGhhdCBvbmUgbWVyZ2UgYmFzZSBpcyBiYWQsIHRoZW4gdGhlIGJpc2VjdGlvbiBwcm9jZXNzCitpcyBzdG9wcGVkIHdpdGggYSBtZXNzYWdlIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0KK1RoZSBtZXJnZSBiYXNlIEJCQkJCQiBpcyBiYWQuCitUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgYmV0d2VlbiBCQkJCQkIgYW5kIFtHR0dHR0csLi4uXS4KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgQkJCQkJCIGlzIHRoZSBzaGExIGhhc2ggb2YgdGhlIGJhZCBtZXJnZSBiYXNlIGFuZCBbR0dHR0dHLC4uLl0KK2lzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIHNoYTEgb2YgdGhlIGdvb2QgY29tbWl0cy4KKworSWYgc29tZSBvZiB0aGUgbWVyZ2UgYmFzZXMgYXJlIHNraXBwZWQsIHRoZW4gdGhlIGJpc2VjdGlvbiBwcm9jZXNzCitjb250aW51ZXMsIGJ1dCB0aGUgZm9sbG93aW5nIG1lc3NhZ2UgaXMgcHJpbnRlZCBmb3IgZWFjaCBza2lwcGVkIG1lcmdlCitiYXNlOgorCistLS0tLS0tLS0tLS0tCitXYXJuaW5nOiB0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuIEJCQkJCQiBhbmQgW0dHR0dHRywuLi5dIG11c3QgYmUgc2tpcHBlZC4KK1NvIHdlIGNhbm5vdCBiZSBzdXJlIHRoZSBmaXJzdCBiYWQgY29tbWl0IGlzIGJldHdlZW4gTU1NTU1NIGFuZCBCQkJCQkIuCitXZSBjb250aW51ZSBhbnl3YXkuCistLS0tLS0tLS0tLS0tCisKK3doZXJlIEJCQkJCQiBpcyB0aGUgc2hhMSBoYXNoIG9mIHRoZSBiYWQgY29tbWl0LCBNTU1NTU0gaXMgdGhlIHNoYTEKK2hhc2ggb2YgdGhlIG1lcmdlIGJhc2UgdGhhdCBpcyBza2lwcGVkIGFuZCBbR0dHR0dHLC4uLl0gIGlzIGEgY29tbWEKK3NlcGFyYXRlZCBsaXN0IG9mIHRoZSBzaGExIG9mIHRoZSBnb29kIGNvbW1pdHMuCisKK1NvIGlmIHRoZXJlIGlzIG5vIGJhZCBtZXJnZSBiYXNlLCB0aGUgYmlzZWN0aW9uIHByb2Nlc3MgY29udGludWVzIGFzCit1c3VhbCBhZnRlciB0aGlzIHN0ZXAuCisKK0Jlc3QgYmlzZWN0aW5nIHByYWN0aWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VzaW5nIHRlc3Qgc3VpdGVzIGFuZCBnaXQgYmlzZWN0IHRvZ2V0aGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiB5b3UgYm90aCBoYXZlIGEgdGVzdCBzdWl0ZSBhbmQgdXNlIGdpdCBiaXNlY3QsIHRoZW4gaXQgYmVjb21lcyBsZXNzCitpbXBvcnRhbnQgdG8gY2hlY2sgdGhhdCBhbGwgdGVzdHMgcGFzcyBhZnRlciBlYWNoIGNvbW1pdC4gVGhvdWdoIG9mCitjb3Vyc2UgaXQgaXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gaGF2ZSBzb21lIGNoZWNrcyB0byBhdm9pZAorYnJlYWtpbmcgdG9vIG1hbnkgdGhpbmdzIGJlY2F1c2UgaXQgY291bGQgbWFrZSBiaXNlY3Rpbmcgb3RoZXIgYnVncworbW9yZSBkaWZmaWN1bHQuCisKK1lvdSBjYW4gZm9jdXMgeW91ciBlZmZvcnRzIHRvIGNoZWNrIGF0IGEgZmV3IHBvaW50cyAoZm9yIGV4YW1wbGUgcmMKK2FuZCBiZXRhIHJlbGVhc2VzKSB0aGF0IGFsbCB0aGUgVCB0ZXN0IGNhc2VzIHBhc3MgZm9yIGFsbCB0aGUgTgorY29uZmlndXJhdGlvbnMuIEFuZCB3aGVuIHNvbWUgdGVzdHMgZG9uJ3QgcGFzcyB5b3UgY2FuIHVzZSAiZ2l0CitiaXNlY3QiIChvciBiZXR0ZXIgImdpdCBiaXNlY3QgcnVuIikuIFNvIHlvdSBzaG91bGQgcGVyZm9ybSByb3VnaGx5OgorCistLS0tLS0tLS0tLS0tCitjICogTiAqIFQgKyBiICogTSAqIGxvZzIoTSkgdGVzdHMKKy0tLS0tLS0tLS0tLS0KKword2hlcmUgYyBpcyB0aGUgbnVtYmVyIG9mIHJvdW5kcyBvZiB0ZXN0IChzbyBhIHNtYWxsIGNvbnN0YW50KSBhbmQgYiBpcwordGhlIHJhdGlvIG9mIGJ1ZyBwZXIgY29tbWl0IChob3BlZnVsbHkgYSBzbWFsbCBjb25zdGFudCB0b28pLgorCitTbyBvZiBjb3Vyc2UgaXQncyBtdWNoIGJldHRlciBhcyBpdCdzIE8oTiAqIFQpIHZzIE8oTiAqIFQgKiBNKSBpZgoreW91IHdvdWxkIHRlc3QgZXZlcnl0aGluZyBhZnRlciBlYWNoIGNvbW1pdC4KKworVGhpcyBtZWFucyB0aGF0IHRlc3Qgc3VpdGVzIGFyZSBnb29kIHRvIHByZXZlbnQgc29tZSBidWdzIGZyb20gYmVpbmcKK2NvbW1pdHRlZCBhbmQgdGhleSBhcmUgYWxzbyBxdWl0ZSBnb29kIHRvIHRlbGwgeW91IHRoYXQgeW91IGhhdmUgc29tZQorYnVncy4gQnV0IHRoZXkgYXJlIG5vdCBzbyBnb29kIHRvIHRlbGwgeW91IHdoZXJlIHNvbWUgYnVncyBoYXZlIGJlZW4KK2ludHJvZHVjZWQuIFRvIHRlbGwgeW91IHRoYXQgZWZmaWNpZW50bHksIGdpdCBiaXNlY3QgaXMgbmVlZGVkLgorCitUaGUgb3RoZXIgbmljZSB0aGluZyB3aXRoIHRlc3Qgc3VpdGVzLCBpcyB0aGF0IHdoZW4geW91IGhhdmUgb25lLCB5b3UKK2FscmVhZHkga25vdyBob3cgdG8gdGVzdCBmb3IgYmFkIGJlaGF2aW9yLiBTbyB5b3UgY2FuIHVzZSB0aGlzCitrbm93bGVkZ2UgdG8gY3JlYXRlIGEgbmV3IHRlc3QgY2FzZSBmb3IgImdpdCBiaXNlY3QiIHdoZW4gaXQgYXBwZWFycwordGhhdCB0aGVyZSBpcyBhIHJlZ3Jlc3Npb24uIFNvIGl0IHdpbGwgYmUgZWFzaWVyIHRvIGJpc2VjdCB0aGUgYnVnIGFuZAorZml4IGl0LiBBbmQgdGhlbiB5b3UgY2FuIGFkZCB0aGUgdGVzdCBjYXNlIHlvdSBqdXN0IGNyZWF0ZWQgdG8geW91cgordGVzdCBzdWl0ZS4KKworU28gaWYgeW91IGtub3cgaG93IHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGFuZCBob3cgdG8gYmlzZWN0LCB5b3Ugd2lsbCBiZQorc3ViamVjdCB0byBhIHZpcnR1b3VzIGNpcmNsZToKKworbW9yZSB0ZXN0cyA9PiBlYXNpZXIgdG8gY3JlYXRlIHRlc3RzID0+IGVhc2llciB0byBiaXNlY3QgPT4gbW9yZSB0ZXN0cworCitTbyB0ZXN0IHN1aXRlcyBhbmQgImdpdCBiaXNlY3QiIGFyZSBjb21wbGVtZW50YXJ5IHRvb2xzIHRoYXQgYXJlIHZlcnkKK3Bvd2VyZnVsIGFuZCBlZmZpY2llbnQgd2hlbiB1c2VkIHRvZ2V0aGVyLgorCitCaXNlY3RpbmcgYnVpbGQgZmFpbHVyZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIHZlcnkgZWFzaWx5IGF1dG9tYXRpY2FsbHkgYmlzZWN0IGJyb2tlbiBidWlsZHMgdXNpbmcgc29tZXRoaW5nCitsaWtlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgQkFEIEdPT0QKKyQgZ2l0IGJpc2VjdCBydW4gbWFrZQorLS0tLS0tLS0tLS0tLQorCitQYXNzaW5nIHNoIC1jICJzb21lIGNvbW1hbmRzIiB0byAiZ2l0IGJpc2VjdCBydW4iCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgcnVuIHNoIC1jICJtYWtlIHx8IGV4aXQgMTI1OyAuL215X2FwcCB8IGdyZXAgJ2dvb2Qgb3V0cHV0JyIKKy0tLS0tLS0tLS0tLS0KKworT24gdGhlIG90aGVyIGhhbmQgaWYgeW91IGRvIHRoaXMgb2Z0ZW4sIHRoZW4gaXQgY2FuIGJlIHdvcnRoIGhhdmluZworc2NyaXB0cyB0byBhdm9pZCB0b28gbXVjaCB0eXBpbmcuCisKK0ZpbmRpbmcgcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSGVyZSBpcyBhbiBleGFtcGxlIHNjcmlwdCB0aGF0IGNvbWVzIHNsaWdodGx5IG1vZGlmaWVkIGZyb20gYSByZWFsCit3b3JsZCBzY3JpcHQgdXNlZCBieSBKdW5pbyBIYW1hbm8gPDw0Pj4uCisKK1RoaXMgc2NyaXB0IGNhbiBiZSBwYXNzZWQgdG8gImdpdCBiaXNlY3QgcnVuIiB0byBmaW5kIHRoZSBjb21taXQgdGhhdAoraW50cm9kdWNlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb246CisKKy0tLS0tLS0tLS0tLS0KKyMhL2Jpbi9zaAorCisjIEJ1aWxkIGVycm9ycyBhcmUgbm90IHdoYXQgSSBhbSBpbnRlcmVzdGVkIGluLgorbWFrZSBteV9hcHAgfHwgZXhpdCAyNTUKKworIyBXZSBhcmUgY2hlY2tpbmcgaWYgaXQgc3RvcHMgaW4gYSByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLCBzbworIyBsZXQgaXQgcnVuIGluIHRoZSBiYWNrZ3JvdW5kLi4uCisKKy4vbXlfYXBwID5sb2cgMj4mMSAmCisKKyMgLi4uIGFuZCBncmFiIGl0cyBwcm9jZXNzIElELgorcGlkPSQhCisKKyMgLi4uIGFuZCB0aGVuIHdhaXQgZm9yIHN1ZmZpY2llbnRseSBsb25nLgorc2xlZXAgJE5PUk1BTF9USU1FCisKKyMgLi4uIGFuZCB0aGVuIHNlZSBpZiB0aGUgcHJvY2VzcyBpcyBzdGlsbCB0aGVyZS4KK2lmIGtpbGwgLTAgJHBpZAordGhlbgorCSMgSXQgaXMgc3RpbGwgcnVubmluZyAtLSB0aGF0IGlzIGJhZC4KKwlraWxsICRwaWQ7IHNsZWVwIDE7IGtpbGwgJHBpZDsKKwlleGl0IDEKK2Vsc2UKKwkjIEl0IGhhcyBhbHJlYWR5IGZpbmlzaGVkICh0aGUgJHBpZCBwcm9jZXNzIHdhcyBubyBtb3JlKSwKKwkjIGFuZCB3ZSBhcmUgaGFwcHkuCisJZXhpdCAwCitmaQorLS0tLS0tLS0tLS0tLQorCitGb2xsb3dpbmcgZ2VuZXJhbCBiZXN0IHByYWN0aWNlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSXQgaXMgb2J2aW91c2x5IGEgZ29vZCBpZGVhIG5vdCB0byBoYXZlIGNvbW1pdHMgd2l0aCBjaGFuZ2VzIHRoYXQKK2tub3dpbmdseSBicmVhayB0aGluZ3MsIGV2ZW4gaWYgc29tZSBvdGhlciBjb21taXRzIGxhdGVyIGZpeCB0aGUKK2JyZWFrYWdlLgorCitJdCBpcyBhbHNvIGEgZ29vZCBpZGVhIHdoZW4gdXNpbmcgYW55IFZDUyB0byBoYXZlIG9ubHkgb25lIHNtYWxsCitsb2dpY2FsIGNoYW5nZSBpbiBlYWNoIGNvbW1pdC4KKworVGhlIHNtYWxsZXIgdGhlIGNoYW5nZXMgaW4geW91ciBjb21taXQsIHRoZSBtb3N0IGVmZmVjdGl2ZSAiZ2l0CitiaXNlY3QiIHdpbGwgYmUuIEFuZCB5b3Ugd2lsbCBwcm9iYWJseSBuZWVkICJnaXQgYmlzZWN0IiBsZXNzIGluIHRoZQorZmlyc3QgcGxhY2UsIGFzIHNtYWxsIGNoYW5nZXMgYXJlIGVhc2llciB0byByZXZpZXcgZXZlbiBpZiB0aGV5IGFyZQorb25seSByZXZpZXdlZCBieSB0aGUgY29tbWl0dGVyLgorCitBbm90aGVyIGdvb2QgaWRlYSBpcyB0byBoYXZlIGdvb2QgY29tbWl0IG1lc3NhZ2VzLiBUaGV5IGNhbiBiZSB2ZXJ5CitoZWxwZnVsIHRvIHVuZGVyc3RhbmQgd2h5IHNvbWUgY2hhbmdlcyB3ZXJlIG1hZGUuCisKK1RoZXNlIGdlbmVyYWwgYmVzdCBwcmFjdGljZXMgYXJlIHZlcnkgaGVscGZ1bCBpZiB5b3UgYmlzZWN0IG9mdGVuLgorCitBdm9pZGluZyBidWcgcHJvbmUgbWVyZ2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0ZpcnN0IG1lcmdlcyBieSB0aGVtc2VsdmVzIGNhbiBpbnRyb2R1Y2Ugc29tZSByZWdyZXNzaW9ucyBldmVuIHdoZW4KK3RoZSBtZXJnZSBuZWVkcyBubyBzb3VyY2UgY29kZSBjb25mbGljdCByZXNvbHV0aW9uLiBUaGlzIGlzIGJlY2F1c2UgYQorc2VtYW50aWMgY2hhbmdlIGNhbiBoYXBwZW4gaW4gb25lIGJyYW5jaCB3aGlsZSB0aGUgb3RoZXIgYnJhbmNoIGlzIG5vdAorYXdhcmUgb2YgaXQuCisKK0ZvciBleGFtcGxlIG9uZSBicmFuY2ggY2FuIGNoYW5nZSB0aGUgc2VtYW50aWMgb2YgYSBmdW5jdGlvbiB3aGlsZSB0aGUKK290aGVyIGJyYW5jaCBhZGQgbW9yZSBjYWxscyB0byB0aGUgc2FtZSBmdW5jdGlvbi4KKworVGhpcyBpcyBtYWRlIG11Y2ggd29yc2UgaWYgbWFueSBmaWxlcyBoYXZlIHRvIGJlIGZpeGVkIHRvIHJlc29sdmUKK2NvbmZsaWN0cy4gVGhhdCdzIHdoeSBzdWNoIG1lcmdlcyBhcmUgY2FsbGVkICJldmlsIG1lcmdlcyIuIFRoZXkgY2FuCittYWtlIHJlZ3Jlc3Npb25zIHZlcnkgZGlmZmljdWx0IHRvIHRyYWNrIGRvd24uIEl0IGNhbiBldmVuIGJlCittaXNsZWFkaW5nIHRvIGtub3cgdGhlIGZpcnN0IGJhZCBjb21taXQgaWYgaXQgaGFwcGVucyB0byBiZSBzdWNoIGEKK21lcmdlLCBiZWNhdXNlIHBlb3BsZSBtaWdodCB0aGluayB0aGF0IHRoZSBidWcgY29tZXMgZnJvbSBiYWQgY29uZmxpY3QKK3Jlc29sdXRpb24gd2hlbiBpdCBjb21lcyBmcm9tIGEgc2VtYW50aWMgY2hhbmdlIGluIG9uZSBicmFuY2guCisKK0FueXdheSAiZ2l0IHJlYmFzZSIgY2FuIGJlIHVzZWQgdG8gbGluZWFyaXplIGhpc3RvcnkuIFRoaXMgY2FuIGJlIHVzZWQKK2VpdGhlciB0byBhdm9pZCBtZXJnaW5nIGluIHRoZSBmaXJzdCBwbGFjZS4gT3IgaXQgY2FuIGJlIHVzZWQgdG8KK2Jpc2VjdCBvbiBhIGxpbmVhciBoaXN0b3J5IGluc3RlYWQgb2YgdGhlIG5vbiBsaW5lYXIgb25lLCBhcyB0aGlzCitzaG91bGQgZ2l2ZSBtb3JlIGluZm9ybWF0aW9uIGluIGNhc2Ugb2YgYSBzZW1hbnRpYyBjaGFuZ2UgaW4gb25lCiticmFuY2guCisKK01lcmdlcyBjYW4gYmUgYWxzbyBtYWRlIHNpbXBsZXIgYnkgdXNpbmcgc21hbGxlciBicmFuY2hlcyBvciBieSB1c2luZworbWFueSB0b3BpYyBicmFuY2hlcyBpbnN0ZWFkIG9mIG9ubHkgbG9uZyB2ZXJzaW9uIHJlbGF0ZWQgYnJhbmNoZXMuCisKK0FuZCB0ZXN0aW5nIGNhbiBiZSBkb25lIG1vcmUgb2Z0ZW4gaW4gc3BlY2lhbCBpbnRlZ3JhdGlvbiBicmFuY2hlcworbGlrZSBsaW51eC1uZXh0IGZvciB0aGUgbGludXgga2VybmVsLgorCitBZGFwdGluZyB5b3VyIHdvcmstZmxvdworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQSBzcGVjaWFsIHdvcmstZmxvdyB0byBwcm9jZXNzIHJlZ3Jlc3Npb25zIGNhbiBnaXZlIGdyZWF0IHJlc3VsdHMuCisKK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHdvcmstZmxvdyB1c2VkIGJ5IEFuZHJlYXMgRXJpY3Nzb246CisKKyogd3JpdGUsIGluIHRoZSB0ZXN0IHN1aXRlLCBhIHRlc3Qgc2NyaXB0IHRoYXQgZXhwb3NlcyB0aGUgcmVncmVzc2lvbgorKiB1c2UgImdpdCBiaXNlY3QgcnVuIiB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGl0CisqIGZpeCB0aGUgYnVnIHRoYXQgaXMgb2Z0ZW4gbWFkZSBvYnZpb3VzIGJ5IHRoZSBwcmV2aW91cyBzdGVwCisqIGNvbW1pdCBib3RoIHRoZSBmaXggYW5kIHRoZSB0ZXN0IHNjcmlwdCAoYW5kIGlmIG5lZWRlZCBtb3JlIHRlc3RzKQorCitBbmQgaGVyZSBpcyB3aGF0IEFuZHJlYXMgc2FpZCBhYm91dCB0aGlzIHdvcmstZmxvdyA8PDU+PjoKKworX19fX19fX19fX19fXworVG8gZ2l2ZSBzb21lIGhhcmQgZmlndXJlcywgd2UgdXNlZCB0byBoYXZlIGFuIGF2ZXJhZ2UgcmVwb3J0LXRvLWZpeAorY3ljbGUgb2YgMTQyLjYgaG91cnMgKGFjY29yZGluZyB0byBvdXIgc29tZXdoYXQgd2VpcmQgYnVnLXRyYWNrZXIKK3doaWNoIGp1c3QgbWVhc3VyZXMgd2FsbC1jbG9jayB0aW1lKS4gU2luY2Ugd2UgbW92ZWQgdG8gR2l0LCB3ZSd2ZQorbG93ZXJlZCB0aGF0IHRvIDE2LjIgaG91cnMuIFByaW1hcmlseSBiZWNhdXNlIHdlIGNhbiBzdGF5IG9uIHRvcCBvZgordGhlIGJ1ZyBmaXhpbmcgbm93LCBhbmQgYmVjYXVzZSBldmVyeW9uZSdzIGpvY2tleWluZyB0byBnZXQgdG8gZml4CitidWdzICh3ZSdyZSBxdWl0ZSBwcm91ZCBvZiBob3cgbGF6eSB3ZSBhcmUgdG8gbGV0IEdpdCBmaW5kIHRoZSBidWdzCitmb3IgdXMpLiBFYWNoIG5ldyByZWxlYXNlIHJlc3VsdHMgaW4gfjQwJSBmZXdlciBidWdzIChhbG1vc3QgY2VydGFpbmx5CitkdWUgdG8gaG93IHdlIG5vdyBmZWVsIGFib3V0IHdyaXRpbmcgdGVzdHMpLgorX19fX19fX19fX19fXworCitDbGVhcmx5IHRoaXMgd29yay1mbG93IHVzZXMgdGhlIHZpcnR1b3VzIGNpcmNsZSBiZXR3ZWVuIHRlc3Qgc3VpdGVzCithbmQgImdpdCBiaXNlY3QiLiBJbiBmYWN0IGl0IG1ha2VzIGl0IHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgdG8gZGVhbAord2l0aCByZWdyZXNzaW9uLgorCitJbiBvdGhlciBtZXNzYWdlcyBBbmRyZWFzIHNheXMgdGhhdCB0aGV5IGFsc28gdXNlIHRoZSAiYmVzdCBwcmFjdGljZXMiCitkZXNjcmliZWQgYWJvdmU6IHNtYWxsIGxvZ2ljYWwgY29tbWl0cywgdG9waWMgYnJhbmNoZXMsIG5vIGV2aWwKK21lcmdlLC4uLiBUaGVzZSBwcmFjdGljZXMgYWxsIGltcHJvdmUgdGhlIGJpc2VjdGFiaWxpdHkgb2YgdGhlIGNvbW1pdAorZ3JhcGgsIGJ5IG1ha2luZyBpdCBlYXNpZXIgYW5kIG1vcmUgdXNlZnVsIHRvIGJpc2VjdC4KKworU28gYSBnb29kIHdvcmstZmxvdyBzaG91bGQgYmUgZGVzaWduZWQgYXJvdW5kIHRoZSBhYm92ZSBwb2ludHMuIFRoYXQKK2lzIG1ha2luZyBiaXNlY3RpbmcgZWFzaWVyLCBtb3JlIHVzZWZ1bCBhbmQgc3RhbmRhcmQuCisKK0ludm9sdmluZyBRQSBwZW9wbGUgYW5kIGlmIHBvc3NpYmxlIGVuZCB1c2Vycworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK09uZSBuaWNlIGFib3V0ICJnaXQgYmlzZWN0IiBpcyB0aGF0IGl0IGlzIG5vdCBvbmx5IGEgZGV2ZWxvcGVyCit0b29sLiBJdCBjYW4gZWZmZWN0aXZlbHkgYmUgdXNlZCBieSBRQSBwZW9wbGUgb3IgZXZlbiBlbmQgdXNlcnMgKGlmCit0aGV5IGhhdmUgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBvciBpZiB0aGV5IGNhbiBnZXQgYWNjZXNzIHRvIGFsbAordGhlIGJ1aWxkcykuCisKK1RoZXJlIHdhcyBhIGRpc2N1c3Npb24gYXQgb25lIHBvaW50IG9uIHRoZSBsaW51eCBrZXJuZWwgbWFpbGluZyBsaXN0CitvZiB3aGV0aGVyIGl0IHdhcyBvayB0byBhbHdheXMgYXNrIGVuZCB1c2VyIHRvIGJpc2VjdCwgYW5kIHZlcnkgZ29vZAorcG9pbnRzIHdlcmUgbWFkZSB0byBzdXBwb3J0IHRoZSBwb2ludCBvZiB2aWV3IHRoYXQgaXQgaXMgb2suCisKK0ZvciBleGFtcGxlIERhdmlkIE1pbGxlciB3cm90ZSA8PDY+PjoKKworX19fX19fX19fX19fXworV2hhdCBwZW9wbGUgZG9uJ3QgZ2V0IGlzIHRoYXQgdGhpcyBpcyBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgImVuZCBub2RlCitwcmluY2lwbGUiIGFwcGxpZXMuIFdoZW4geW91IGhhdmUgbGltaXRlZCByZXNvdXJjZXMgKGhlcmU6IGRldmVsb3BlcnMpCit5b3UgZG9uJ3QgcHVzaCB0aGUgYnVsayBvZiB0aGUgYnVyZGVuIHVwb24gdGhlbS4gSW5zdGVhZCB5b3UgcHVzaAordGhpbmdzIG91dCB0byB0aGUgcmVzb3VyY2UgeW91IGhhdmUgYSBsb3Qgb2YsIHRoZSBlbmQgbm9kZXMgKGhlcmU6Cit1c2VycyksIHNvIHRoYXQgdGhlIHNpdHVhdGlvbiBhY3R1YWxseSBzY2FsZXMuCitfX19fX19fX19fX19fCisKK1RoaXMgbWVhbnMgdGhhdCBpdCBpcyBvZnRlbiAiY2hlYXBlciIgaWYgUUEgcGVvcGxlIG9yIGVuZCB1c2VycyBjYW4gZG8KK2l0LgorCitXaGF0IGlzIGludGVyZXN0aW5nIHRvbyBpcyB0aGF0IGVuZCB1c2VycyB0aGF0IGFyZSByZXBvcnRpbmcgYnVncyAob3IKK1FBIHBlb3BsZSB0aGF0IHJlcHJvZHVjZWQgYSBidWcpIGhhdmUgYWNjZXNzIHRvIHRoZSBlbnZpcm9ubWVudCB3aGVyZQordGhlIGJ1ZyBoYXBwZW5zLiBTbyB0aGV5IGNhbiBvZnRlbiBtb3JlIGVhc2lseSByZXByb2R1Y2UgYQorcmVncmVzc2lvbi4gQW5kIGlmIHRoZXkgY2FuIGJpc2VjdCwgdGhlbiBtb3JlIGluZm9ybWF0aW9uIHdpbGwgYmUKK2V4dHJhY3RlZCBmcm9tIHRoZSBlbnZpcm9ubWVudCB3aGVyZSB0aGUgYnVnIGhhcHBlbnMsIHdoaWNoIG1lYW5zIHRoYXQKK2l0IHdpbGwgYmUgZWFzaWVyIHRvIHVuZGVyc3RhbmQgYW5kIHRoZW4gZml4IHRoZSBidWcuCisKK0ZvciBvcGVuIHNvdXJjZSBwcm9qZWN0cyBpdCBjYW4gYmUgYSBnb29kIHdheSB0byBnZXQgbW9yZSB1c2VmdWwKK2NvbnRyaWJ1dGlvbnMgZnJvbSBlbmQgdXNlcnMsIGFuZCB0byBpbnRyb2R1Y2UgdGhlbSB0byBRQSBhbmQKK2RldmVsb3BtZW50IGFjdGl2aXRpZXMuCisKK1VzaW5nIGNvbXBsZXggc2NyaXB0cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0luIHNvbWUgY2FzZXMgbGlrZSBmb3Iga2VybmVsIGRldmVsb3BtZW50IGl0IGNhbiBiZSB3b3J0aCBkZXZlbG9waW5nCitjb21wbGV4IHNjcmlwdHMgdG8gYmUgYWJsZSB0byBmdWxseSBhdXRvbWF0ZSBiaXNlY3RpbmcuCisKK0hlcmUgaXMgd2hhdCBJbmdvIE1vbG5hciBzYXlzIGFib3V0IHRoYXQgPDw3Pj46CisKK19fX19fX19fX19fX18KK2kgaGF2ZSBhIGZ1bGx5IGF1dG9tYXRlZCBib290dXAtaGFuZyBiaXNlY3Rpb24gc2NyaXB0LiBJdCBpcyBiYXNlZCBvbgorImdpdC1iaXNlY3QgcnVuIi4gSSBydW4gdGhlIHNjcmlwdCwgaXQgYnVpbGRzIGFuZCBib290cyBrZXJuZWxzIGZ1bGx5CithdXRvbWF0aWNhbGx5LCBhbmQgd2hlbiB0aGUgYm9vdHVwIGZhaWxzICh0aGUgc2NyaXB0IG5vdGljZXMgdGhhdCB2aWEKK3RoZSBzZXJpYWwgbG9nLCB3aGljaCBpdCBjb250aW51b3VzbHkgd2F0Y2hlcyAtIG9yIHZpYSBhIHRpbWVvdXQsIGlmCit0aGUgc3lzdGVtIGRvZXMgbm90IGNvbWUgdXAgd2l0aGluIDEwIG1pbnV0ZXMgaXQncyBhICJiYWQiIGtlcm5lbCksCit0aGUgc2NyaXB0IHJhaXNlcyBteSBhdHRlbnRpb24gdmlhIGEgYmVlcCBhbmQgaSBwb3dlciBjeWNsZSB0aGUgdGVzdAorYm94LiAoeWVhaCwgaSBzaG91bGQgbWFrZSB1c2Ugb2YgYSBtYW5hZ2VkIHBvd2VyIG91dGxldCB0byAxMDAlCithdXRvbWF0ZSBpdCkKK19fX19fX19fX19fX18KKworQ29tYmluaW5nIHRlc3Qgc3VpdGVzLCBnaXQgYmlzZWN0IGFuZCBvdGhlciBzeXN0ZW1zIHRvZ2V0aGVyCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2UgaGF2ZSBzZWVuIHRoYXQgdGVzdCBzdWl0ZXMgYW4gZ2l0IGJpc2VjdCBhcmUgdmVyeSBwb3dlcmZ1bCB3aGVuCit1c2VkIHRvZ2V0aGVyLiBJdCBjYW4gYmUgZXZlbiBtb3JlIHBvd2VyZnVsIGlmIHlvdSBjYW4gY29tYmluZSB0aGVtCit3aXRoIG90aGVyIHN5c3RlbXMuCisKK0ZvciBleGFtcGxlIHNvbWUgdGVzdCBzdWl0ZXMgY291bGQgYmUgcnVuIGF1dG9tYXRpY2FsbHkgYXQgbmlnaHQgd2l0aAorc29tZSB1bnVzdWFsIChvciBldmVuIHJhbmRvbSkgY29uZmlndXJhdGlvbnMuIEFuZCBpZiBhIHJlZ3Jlc3Npb24gaXMKK2ZvdW5kIGJ5IGEgdGVzdCBzdWl0ZSwgdGhlbiAiZ2l0IGJpc2VjdCIgY2FuIGJlIGF1dG9tYXRpY2FsbHkKK2xhdW5jaGVkLCBhbmQgaXRzIHJlc3VsdCBjYW4gYmUgZW1haWxlZCB0byB0aGUgYXV0aG9yIG9mIHRoZSBmaXJzdCBiYWQKK2NvbW1pdCBmb3VuZCBieSAiZ2l0IGJpc2VjdCIsIGFuZCBwZXJoYXBzIG90aGVyIHBlb3BsZSB0b28uIEFuZCBhIG5ldworZW50cnkgaW4gdGhlIGJ1ZyB0cmFja2luZyBzeXN0ZW0gY291bGQgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHRvby4KKworCitUaGUgZnV0dXJlIG9mIGJpc2VjdGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworImdpdCByZXBsYWNlIgorfn5+fn5+fn5+fn5+fgorCitXZSBzYXcgZWFybGllciB0aGF0ICJnaXQgYmlzZWN0IHNraXAiIGlzIG5vdyB1c2luZyBhIFBSTkcgdG8gdHJ5IHRvCithdm9pZCBhcmVhcyBpbiB0aGUgY29tbWl0IGdyYXBoIHdoZXJlIGNvbW1pdHMgYXJlIHVudGVzdGFibGUuIFRoZQorcHJvYmxlbSBpcyB0aGF0IHNvbWV0aW1lcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCB3aWxsIGJlIGluIGFuCit1bnRlc3RhYmxlIGFyZWEuCisKK1RvIHNpbXBsaWZ5IHRoZSBkaXNjdXNzaW9uIHdlIHdpbGwgc3VwcG9zZSB0aGF0IHRoZSB1bnRlc3RhYmxlIGFyZWEgaXMKK2Egc2ltcGxlIHN0cmluZyBvZiBjb21taXRzIGFuZCB0aGF0IGl0IHdhcyBjcmVhdGVkIGJ5IGEgYnJlYWthZ2UKK2ludHJvZHVjZWQgYnkgb25lIGNvbW1pdCAobGV0J3MgY2FsbCBpdCBCQkMgZm9yIGJpc2VjdCBicmVha2luZworY29tbWl0KSBhbmQgbGF0ZXIgZml4ZWQgYnkgYW5vdGhlciBvbmUgKGxldCdzIGNhbGwgaXQgQkZDIGZvciBiaXNlY3QKK2ZpeGluZyBjb21taXQpLgorCitGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorLi4uLVktQkJDLVgxLVgyLVgzLVg0LVg1LVg2LUJGQy1aLS4uLgorLS0tLS0tLS0tLS0tLQorCit3aGVyZSB3ZSBrbm93IHRoYXQgWSBpcyBnb29kIGFuZCBCRkMgaXMgYmFkLCBhbmQgd2hlcmUgQkJDIGFuZCBYMSB0bworWDYgYXJlIHVudGVzdGFibGUuCisKK0luIHRoaXMgY2FzZSBpZiB5b3UgYXJlIGJpc2VjdGluZyBtYW51YWxseSwgd2hhdCB5b3UgY2FuIGRvIGlzIGNyZWF0ZQorYSBzcGVjaWFsIGJyYW5jaCB0aGF0IHN0YXJ0cyBqdXN0IGJlZm9yZSB0aGUgQkJDLiBUaGUgZmlyc3QgY29tbWl0IGluCit0aGlzIGJyYW5jaCBzaG91bGQgYmUgdGhlIEJCQyB3aXRoIHRoZSBCRkMgc3F1YXNoZWQgaW50byBpdC4gQW5kIHRoZQorb3RoZXIgY29tbWl0cyBpbiB0aGUgYnJhbmNoIHNob3VsZCBiZSB0aGUgY29tbWl0cyBiZXR3ZWVuIEJCQyBhbmQgQkZDCityZWJhc2VkIG9uIHRoZSBmaXJzdCBjb21taXQgb2YgdGhlIGJyYW5jaCBhbmQgdGhlbiB0aGUgY29tbWl0IGFmdGVyCitCRkMgYWxzbyByZWJhc2VkIG9uLgorCitGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLQorICAgICAgKEJCQytCRkMpLVgxJy1YMictWDMnLVg0Jy1YNSctWDYnLVonCisgICAgIC8KKy4uLi1ZLUJCQy1YMS1YMi1YMy1YNC1YNS1YNi1CRkMtWi0uLi4KKy0tLS0tLS0tLS0tLS0KKword2hlcmUgY29tbWl0cyBxdW90ZWQgd2l0aCAnIGhhdmUgYmVlbiByZWJhc2VkLgorCitZb3UgY2FuIGVhc2lseSBjcmVhdGUgc3VjaCBhIGJyYW5jaCB3aXRoIEdpdCB1c2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuCisKK0ZvciBleGFtcGxlIHVzaW5nOgorCistLS0tLS0tLS0tLS0tCiskIGdpdCByZWJhc2UgLWkgWSBaCistLS0tLS0tLS0tLS0tCisKK2FuZCB0aGVuIG1vdmluZyBCRkMgYWZ0ZXIgQkJDIGFuZCBzcXVhc2hpbmcgaXQuCisKK0FmdGVyIHRoYXQgeW91IGNhbiBzdGFydCBiaXNlY3RpbmcgYXMgdXN1YWwgaW4gdGhlIG5ldyBicmFuY2ggYW5kIHlvdQorc2hvdWxkIGV2ZW50dWFsbHkgZmluZCB0aGUgZmlyc3QgYmFkIGNvbW1pdC4KKworRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBaJyBZCistLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBhcmUgdXNpbmcgImdpdCBiaXNlY3QgcnVuIiwgeW91IGNhbiB1c2UgdGhlIHNhbWUgbWFudWFsIGZpeCB1cAorYXMgYWJvdmUsIGFuZCB0aGVuIHN0YXJ0IGFub3RoZXIgImdpdCBiaXNlY3QgcnVuIiBpbiB0aGUgc3BlY2lhbAorYnJhbmNoLiBPciBhcyB0aGUgImdpdCBiaXNlY3QiIG1hbiBwYWdlIHNheXMsIHRoZSBzY3JpcHQgcGFzc2VkIHRvCisiZ2l0IGJpc2VjdCBydW4iIGNhbiBhcHBseSBhIHBhdGNoIGJlZm9yZSBpdCBjb21waWxlcyBhbmQgdGVzdCB0aGUKK3NvZnR3YXJlIDw8OD4+LiBUaGUgcGF0Y2ggc2hvdWxkIHR1cm4gYSBjdXJyZW50IHVudGVzdGFibGUgY29tbWl0cworaW50byBhIHRlc3RhYmxlIG9uZS4gU28gdGhlIHRlc3Rpbmcgd2lsbCByZXN1bHQgaW4gImdvb2QiIG9yICJiYWQiIGFuZAorImdpdCBiaXNlY3QiIHdpbGwgYmUgYWJsZSB0byBmaW5kIHRoZSBmaXJzdCBiYWQgY29tbWl0LiBBbmQgdGhlIHNjcmlwdAorc2hvdWxkIG5vdCBmb3JnZXQgdG8gcmVtb3ZlIHRoZSBwYXRjaCBvbmNlIHRoZSB0ZXN0aW5nIGlzIGRvbmUgYmVmb3JlCitleGl0aW5nIGZyb20gdGhlIHNjcmlwdC4KKworKE5vdGUgdGhhdCBpbnN0ZWFkIG9mIGEgcGF0Y2ggeW91IGNhbiB1c2UgImdpdCBjaGVycnktcGljayBCRkMiIHRvCithcHBseSB0aGUgZml4LCBhbmQgaW4gdGhpcyBjYXNlIHlvdSBzaG91bGQgdXNlICJnaXQgcmVzZXQgLS1oYXJkCitIRUFEXiIgdG8gcmV2ZXJ0IHRoZSBjaGVycnktcGljayBhZnRlciB0ZXN0aW5nIGFuZCBiZWZvcmUgcmV0dXJuaW5nCitmcm9tIHRoZSBzY3JpcHQuKQorCitCdXQgdGhlIGFib3ZlIHdheXMgdG8gd29yayBhcm91bmQgdW50ZXN0YWJsZSBhcmVhcyBhcmUgYSBsaXR0bGUgYml0CitjbHVua3kuIFVzaW5nIHNwZWNpYWwgYnJhbmNoZXMgaXMgbmljZSBiZWNhdXNlIHRoZXNlIGJyYW5jaGVzIGNhbiBiZQorc2hhcmVkIGJ5IGRldmVsb3BlcnMgbGlrZSB1c3VhbCBicmFuY2hlcywgYnV0IHRoZSByaXNrIGlzIHRoYXQgcGVvcGxlCit3aWxsIGdldCBtYW55IHN1Y2ggYnJhbmNoZXMuIEFuZCBpdCBkaXNydXB0cyB0aGUgbm9ybWFsICJnaXQgYmlzZWN0Igord29yay1mbG93LiBTbywgaWYgeW91IHdhbnQgdG8gdXNlICJnaXQgYmlzZWN0IHJ1biIgY29tcGxldGVseQorYXV0b21hdGljYWxseSwgeW91IGhhdmUgdG8gYWRkIHNwZWNpYWwgY29kZSBpbiB5b3VyIHNjcmlwdCB0byByZXN0YXJ0CitiaXNlY3Rpb24gaW4gdGhlIHNwZWNpYWwgYnJhbmNoZXMuCisKK0FueXdheSBvbmUgY2FuIG5vdGljZSBpbiB0aGUgYWJvdmUgc3BlY2lhbCBicmFuY2ggZXhhbXBsZSB0aGF0IHRoZSBaJworYW5kIFogY29tbWl0cyBzaG91bGQgcG9pbnQgdG8gdGhlIHNhbWUgc291cmNlIGNvZGUgc3RhdGUgKHRoZSBzYW1lCisidHJlZSIgaW4gZ2l0IHBhcmxhbmNlKS4gVGhhdCdzIGJlY2F1c2UgWicgcmVzdWx0IGZyb20gYXBwbHlpbmcgdGhlCitzYW1lIGNoYW5nZXMgYXMgWiBqdXN0IGluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG9yZGVyLgorCitTbyBpZiB3ZSBjb3VsZCBqdXN0ICJyZXBsYWNlIiBaIGJ5IFonIHdoZW4gd2UgYmlzZWN0LCB0aGVuIHdlIHdvdWxkCitub3QgbmVlZCB0byBhZGQgYW55dGhpbmcgdG8gYSBzY3JpcHQuIEl0IHdvdWxkIGp1c3Qgd29yayBmb3IgYW55b25lIGluCit0aGUgcHJvamVjdCBzaGFyaW5nIHRoZSBzcGVjaWFsIGJyYW5jaGVzIGFuZCB0aGUgcmVwbGFjZW1lbnRzLgorCitXaXRoIHRoZSBleGFtcGxlIGFib3ZlIHRoYXQgd291bGQgZ2l2ZToKKworLS0tLS0tLS0tLS0tLQorICAgICAgKEJCQytCRkMpLVgxJy1YMictWDMnLVg0Jy1YNSctWDYnLVonLS4uLgorICAgICAvCisuLi4tWS1CQkMtWDEtWDItWDMtWDQtWDUtWDYtQkZDLVoKKy0tLS0tLS0tLS0tLS0KKworVGhhdCdzIHdoeSB0aGUgImdpdCByZXBsYWNlIiBjb21tYW5kIHdhcyBjcmVhdGVkLiBUZWNobmljYWxseSBpdAorc3RvcmVzIHJlcGxhY2VtZW50cyAicmVmcyIgaW4gdGhlICJyZWZzL3JlcGxhY2UvIiBoaWVyYXJjaHkuIFRoZXNlCisicmVmcyIgYXJlIGxpa2UgYnJhbmNoZXMgKHRoYXQgYXJlIHN0b3JlZCBpbiAicmVmcy9oZWFkcy8iKSBvciB0YWdzCisodGhhdCBhcmUgc3RvcmVkIGluICJyZWZzL3RhZ3MiKSwgYW5kIHRoYXQgbWVhbnMgdGhhdCB0aGV5IGNhbgorYXV0b21hdGljYWxseSBiZSBzaGFyZWQgbGlrZSBicmFuY2hlcyBvciB0YWdzIGFtb25nIGRldmVsb3BlcnMuCisKKyJnaXQgcmVwbGFjZSIgaXMgYSB2ZXJ5IHBvd2VyZnVsIG1lY2hhbmlzbS4gSXQgY2FuIGJlIHVzZWQgdG8gZml4Citjb21taXRzIGluIGFscmVhZHkgcmVsZWFzZWQgaGlzdG9yeSwgZm9yIGV4YW1wbGUgdG8gY2hhbmdlIHRoZSBjb21taXQKK21lc3NhZ2Ugb3IgdGhlIGF1dGhvci4gQW5kIGl0IGNhbiBhbHNvIGJlIHVzZWQgaW5zdGVhZCBvZiBnaXQgImdyYWZ0cyIKK3RvIGxpbmsgYSByZXBvc2l0b3J5IHdpdGggYW5vdGhlciBvbGQgcmVwb3NpdG9yeS4KKworSW4gZmFjdCBpdCdzIHRoaXMgbGFzdCBmZWF0dXJlIHRoYXQgInNvbGQiIGl0IHRvIHRoZSBHaXQgY29tbXVuaXR5LCBzbworaXQgaXMgbm93IGluIHRoZSAibWFzdGVyIiBicmFuY2ggb2YgR2l0J3MgR2l0IHJlcG9zaXRvcnkgYW5kIGl0IHNob3VsZAorYmUgcmVsZWFzZWQgaW4gR2l0IDEuNi41IGluIE9jdG9iZXIgb3IgTm92ZW1iZXIgMjAwOS4KKworT25lIHByb2JsZW0gd2l0aCAiZ2l0IHJlcGxhY2UiIGlzIHRoYXQgY3VycmVudGx5IGl0IHN0b3JlcyBhbGwgdGhlCityZXBsYWNlbWVudHMgcmVmcyBpbiAicmVmcy9yZXBsYWNlLyIsIGJ1dCBpdCB3b3VsZCBiZSBwZXJoYXBzIGJldHRlcgoraWYgdGhlIHJlcGxhY2VtZW50IHJlZnMgdGhhdCBhcmUgdXNlZnVsIG9ubHkgZm9yIGJpc2VjdGluZyB3b3VsZCBiZSBpbgorInJlZnMvcmVwbGFjZS9iaXNlY3QvIi4gVGhpcyB3YXkgdGhlIHJlcGxhY2VtZW50IHJlZnMgY291bGQgYmUgdXNlZAorb25seSBmb3IgYmlzZWN0aW5nLCB3aGlsZSBvdGhlciByZWZzIGRpcmVjdGx5IGluICJyZWZzL3JlcGxhY2UvIiB3b3VsZAorYmUgdXNlZCBuZWFybHkgYWxsIHRoZSB0aW1lLgorCitCaXNlY3Rpbmcgc3BvcmFkaWMgYnVncworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQW5vdGhlciBwb3NzaWJsZSBpbXByb3ZlbWVudCB0byAiZ2l0IGJpc2VjdCIgd291bGQgYmUgdG8gb3B0aW9uYWxseQorYWRkIHNvbWUgcmVkdW5kYW5jeSB0byB0aGUgdGVzdHMgcGVyZm9ybWVkIHNvIHRoYXQgaXQgd291bGQgYmUgbW9yZQorcmVsaWFibGUgd2hlbiB0cmFja2luZyBzcG9yYWRpYyBidWdzLgorCitUaGlzIGhhcyBiZWVuIHJlcXVlc3RlZCBieSBzb21lIGtlcm5lbCBkZXZlbG9wZXJzIGJlY2F1c2Ugc29tZSBidWdzCitjYWxsZWQgc3BvcmFkaWMgYnVncyBkbyBub3QgYXBwZWFyIGluIGFsbCB0aGUga2VybmVsIGJ1aWxkcyBiZWNhdXNlCit0aGV5IGFyZSB2ZXJ5IGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorCitUaGUgaWRlYSBpcyB0aGF0IGV2ZXJ5IDMgdGVzdCBmb3IgZXhhbXBsZSwgImdpdCBiaXNlY3QiIGNvdWxkIGFzayB0aGUKK3VzZXIgdG8gdGVzdCBhIGNvbW1pdCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZm91bmQgdG8gYmUgImdvb2QiIG9yCisiYmFkIiAoYmVjYXVzZSBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyBiZWVuCitmb3VuZCB0byBiZSAiZ29vZCIgb3IgImJhZCIgcmVzcGVjdGl2ZWx5KS4gSWYgaXQgaGFwcGVucyB0aGF0IGEgY29tbWl0CitoYXMgYmVlbiBwcmV2aW91c2x5IGluY29ycmVjdGx5IGNsYXNzaWZpZWQgdGhlbiB0aGUgYmlzZWN0aW9uIGNhbiBiZQorYWJvcnRlZCBlYXJseSwgaG9wZWZ1bGx5IGJlZm9yZSB0b28gbWFueSBtaXN0YWtlcyBoYXZlIGJlZW4gbWFkZS4gVGhlbgordGhlIHVzZXIgd2lsbCBoYXZlIHRvIGxvb2sgYXQgd2hhdCBoYXBwZW5lZCBhbmQgdGhlbiByZXN0YXJ0IHRoZQorYmlzZWN0aW9uIHVzaW5nIGEgZml4ZWQgYmlzZWN0IGxvZy4KKworVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3QgY2FsbGVkIEJCQ2hvcCBjcmVhdGVkIGJ5IEVhbGR3dWxmIFd1ZmZpbmdhCitvbiBHaXRodWIgdGhhdCBkb2VzIHNvbWV0aGluZyBsaWtlIHRoYXQgdXNpbmcgQmF5ZXNpYW4gU2VhcmNoIFRoZW9yeQorPDw5Pj46CisKK19fX19fX19fX19fX18KK0JCQ2hvcCBpcyBsaWtlICdnaXQgYmlzZWN0JyAob3IgZXF1aXZhbGVudCksIGJ1dCB3b3JrcyB3aGVuIHlvdXIgYnVnCitpcyBpbnRlcm1pdHRlbnQuIFRoYXQgaXMsIGl0IHdvcmtzIGluIHRoZSBwcmVzZW5jZSBvZiBmYWxzZSBuZWdhdGl2ZXMKKyh3aGVuIGEgdmVyc2lvbiBoYXBwZW5zIHRvIHdvcmsgdGhpcyB0aW1lIGV2ZW4gdGhvdWdoIGl0IGNvbnRhaW5zIHRoZQorYnVnKS4gSXQgYXNzdW1lcyB0aGF0IHRoZXJlIGFyZSBubyBmYWxzZSBwb3NpdGl2ZXMgKGluIHByaW5jaXBsZSwgdGhlCitzYW1lIGFwcHJvYWNoIHdvdWxkIHdvcmssIGJ1dCBhZGRpbmcgaXQgbWF5IGJlIG5vbi10cml2aWFsKS4KK19fX19fX19fX19fX18KKworQnV0IEJCQ2hvcCBpcyBpbmRlcGVuZGVudCBvZiBhbnkgVkNTIGFuZCBpdCB3b3VsZCBiZSBlYXNpZXIgZm9yIEdpdAordXNlcnMgdG8gaGF2ZSBzb21ldGhpbmcgaW50ZWdyYXRlZCBpbiBHaXQuCisKK0NvbmNsdXNpb24KKy0tLS0tLS0tLS0KKworV2UgaGF2ZSBzZWVuIHRoYXQgcmVncmVzc2lvbnMgYXJlIGFuIGltcG9ydGFudCBwcm9ibGVtLCBhbmQgdGhhdCAiZ2l0CitiaXNlY3QiIGhhcyBuaWNlIGZlYXR1cmVzIHRoYXQgY29tcGxlbWVudCB2ZXJ5IHdlbGwgcHJhY3RpY2VzIGFuZAorb3RoZXIgdG9vbHMsIGVzcGVjaWFsbHkgdGVzdCBzdWl0ZXMsIHRoYXQgYXJlIGdlbmVyYWxseSB1c2VkIHRvIGZpZ2h0CityZWdyZXNzaW9ucy4gQnV0IGl0IG1pZ2h0IGJlIG5lZWRlZCB0byBjaGFuZ2Ugc29tZSB3b3JrLWZsb3dzIGFuZAorKGJhZCkgaGFiaXRzIHRvIGdldCB0aGUgbW9zdCBvdXQgb2YgaXQuCisKK1NvbWUgaW1wcm92ZW1lbnRzIHRvIHRoZSBhbGdvcml0aG1zIGluc2lkZSAiZ2l0IGJpc2VjdCIgYXJlIHBvc3NpYmxlCithbmQgc29tZSBuZXcgZmVhdHVyZXMgY291bGQgaGVscCBpbiBzb21lIGNhc2VzLCBidXQgb3ZlcmFsbCAiZ2l0CitiaXNlY3QiIHdvcmtzIGFscmVhZHkgdmVyeSB3ZWxsLCBpcyB1c2VkIGEgbG90LCBhbmQgaXMgYWxyZWFkeSB2ZXJ5Cit1c2VmdWwuIFRvIGJhY2sgdXAgdGhhdCBsYXN0IGNsYWltLCBsZXQncyBnaXZlIHRoZSBmaW5hbCB3b3JkIHRvIEluZ28KK01vbG5hciB3aGVuIGhlIHdhcyBhc2tlZCBieSB0aGUgYXV0aG9yIGhvdyBtdWNoIHRpbWUgZG9lcyBoZSB0aGluaworImdpdCBiaXNlY3QiIHNhdmVzIGhpbSB3aGVuIGhlIHVzZXMgaXQ6CisKK19fX19fX19fX19fX18KK2EgX2xvdF8uCisKK0Fib3V0IHRlbiB5ZWFycyBhZ28gZGlkIGkgZG8gbXkgZmlyc3QgJ2Jpc2VjdGlvbicgb2YgYSBMaW51eCBwYXRjaAorcXVldWUuIFRoYXQgd2FzIHByaW9yIHRoZSBHaXQgKGFuZCBldmVuIHByaW9yIHRoZSBCaXRLZWVwZXIpIGRheXMuIEkKK2xpdGVyYWxseSBkYXlzIHNwZW50IHNvcnRpbmcgb3V0IHBhdGNoZXMsIGNyZWF0aW5nIHdoYXQgaW4gZXNzZW5jZQord2VyZSBzdGFuZGFsb25lIGNvbW1pdHMgdGhhdCBpIGd1ZXNzZWQgdG8gYmUgcmVsYXRlZCB0byB0aGF0IGJ1Zy4KKworSXQgd2FzIGEgdG9vbCBvZiBhYnNvbHV0ZSBsYXN0IHJlc29ydC4gSSdkIHJhdGhlciBzcGVuZCBkYXlzIGxvb2tpbmcKK2F0IHByaW50ayBvdXRwdXQgdGhhbiBkbyBhIG1hbnVhbCAncGF0Y2ggYmlzZWN0aW9uJy4KKworV2l0aCBHaXQgYmlzZWN0IGl0J3MgYSBicmVlemU6IGluIHRoZSBiZXN0IGNhc2UgaSBjYW4gZ2V0IGEgfjE1IHN0ZXAKK2tlcm5lbCBiaXNlY3Rpb24gZG9uZSBpbiAyMC0zMCBtaW51dGVzLCBpbiBhbiBhdXRvbWF0ZWQgd2F5LiBFdmVuIHdpdGgKK21hbnVhbCBoZWxwIG9yIHdoZW4gYmlzZWN0aW5nIG11bHRpcGxlLCBvdmVybGFwcGluZyBidWdzLCBpdCdzIHJhcmVseQorbW9yZSB0aGFuIGFuIGhvdXIuCisKK0luIGZhY3QgaXQncyBpbnZhbHVhYmxlIGJlY2F1c2UgdGhlcmUgYXJlIGJ1Z3MgaSB3b3VsZCBuZXZlciBldmVuCitfdHJ5XyB0byBkZWJ1ZyBpZiBpdCB3YXNuJ3QgZm9yIGdpdCBiaXNlY3QuIEluIHRoZSBwYXN0IHRoZXJlIHdlcmUgYnVnCitwYXR0ZXJucyB0aGF0IHdlcmUgaW1tZWRpYXRlbHkgaG9wZWxlc3MgZm9yIG1lIHRvIGRlYnVnIC0gYXQgYmVzdCBpCitjb3VsZCBzZW5kIHRoZSBjcmFzaC9idWcgc2lnbmF0dXJlIHRvIGxrbWwgYW5kIGhvcGUgdGhhdCBzb21lb25lIGVsc2UKK2NhbiB0aGluayBvZiBzb21ldGhpbmcuCisKK0FuZCBldmVuIGlmIGEgYmlzZWN0aW9uIGZhaWxzIHRvZGF5IGl0IHRlbGxzIHVzIHNvbWV0aGluZyB2YWx1YWJsZQorYWJvdXQgdGhlIGJ1ZzogdGhhdCBpdCdzIG5vbi1kZXRlcm1pbmlzdGljIC0gdGltaW5nIG9yIGtlcm5lbCBpbWFnZQorbGF5b3V0IGRlcGVuZGVudC4KKworU28gZ2l0IGJpc2VjdCBpcyB1bmNvbmRpdGlvbmFsIGdvb2RuZXNzIC0gYW5kIGZlZWwgZnJlZSB0byBxdW90ZSB0aGF0Cis7LSkKK19fX19fX19fX19fX18KKworQWNrbm93bGVkZ21lbnRzCistLS0tLS0tLS0tLS0tLS0KKworTWFueSB0aGFua3MgdG8gSnVuaW8gSGFtYW5vIGZvciBoaXMgaGVscCBpbiByZXZpZXdpbmcgdGhpcyBwYXBlciwgZm9yCityZXZpZXdpbmcgdGhlIHBhdGNoZXMgSSBzZW50IHRvIHRoZSBHaXQgbWFpbGluZyBsaXN0LCBmb3IgZGlzY3Vzc2luZworc29tZSBpZGVhcyBhbmQgaGVscGluZyBtZSBpbXByb3ZlIHRoZW0sIGZvciBpbXByb3ZpbmcgImdpdCBiaXNlY3QiIGEKK2xvdCBhbmQgZm9yIGhpcyBhd2Vzb21lIHdvcmsgaW4gbWFpbnRhaW5pbmcgYW5kIGRldmVsb3BpbmcgR2l0LgorCitNYW55IHRoYW5rcyB0byBJbmdvIE1vbG5hciBmb3IgZ2l2aW5nIG1lIHZlcnkgdXNlZnVsIGluZm9ybWF0aW9uIHRoYXQKK2FwcGVhcnMgaW4gdGhpcyBwYXBlciwgZm9yIGNvbW1lbnRpbmcgb24gdGhpcyBwYXBlciwgZm9yIGhpcworc3VnZ2VzdGlvbnMgdG8gaW1wcm92ZSAiZ2l0IGJpc2VjdCIgYW5kIGZvciBldmFuZ2VsaXppbmcgImdpdCBiaXNlY3QiCitvbiB0aGUgbGludXgga2VybmVsIG1haWxpbmcgbGlzdHMuCisKK01hbnkgdGhhbmtzIHRvIExpbnVzIFRvcnZhbGRzIGZvciBpbnZlbnRpbmcsIGRldmVsb3BpbmcgYW5kCitldmFuZ2VsaXppbmcgImdpdCBiaXNlY3QiLCBHaXQgYW5kIExpbnV4LgorCitNYW55IHRoYW5rcyB0byB0aGUgbWFueSBvdGhlciBncmVhdCBwZW9wbGUgd2hvIGhlbHBlZCBvbmUgd2F5IG9yCithbm90aGVyIHdoZW4gSSB3b3JrZWQgb24gR2l0LCBlc3BlY2lhbGx5IHRvIEFuZHJlYXMgRXJpY3Nzb24sIEpvaGFubmVzCitTY2hpbmRlbGluLCBILiBQZXRlciBBbnZpbiwgRGFuaWVsIEJhcmthbG93LCBCaWxsIExlYXIsIEpvaG4gSGF3bGV5LAorU2hhd24gTy4gUGllcmNlLCBKZWZmIEtpbmcsIFNhbSBWaWxhaW4sIEpvbiBTZXltb3VyLgorCitNYW55IHRoYW5rcyB0byB0aGUgTGludXgtS29uZ3Jlc3MgcHJvZ3JhbSBjb21taXR0ZWUgZm9yIGNob29zaW5nIHRoZQorYXV0aG9yIHRvIGdpdmVuIGEgdGFsayBhbmQgZm9yIHB1Ymxpc2hpbmcgdGhpcyBwYXBlci4KKworUmVmZXJlbmNlcworLS0tLS0tLS0tLQorCistIFtbWzFdXV0gaHR0cDovL3d3dy5uaXN0Lmdvdi9wdWJsaWNfYWZmYWlycy9yZWxlYXNlcy9uMDItMTAuaHRtWydTb2Z0d2FyZSBFcnJvcnMgQ29zdCBVLlMuIEVjb25vbXkgJDU5LjUgQmlsbGlvbiBBbm51YWxseScuIE5pc3QgTmV3cyBSZWxlYXNlLl0KKy0gW1tbMl1dXSBodHRwOi8vamF2YS5zdW4uY29tL2RvY3MvY29kZWNvbnYvaHRtbC9Db2RlQ29udmVudGlvbnMuZG9jLmh0bWwjMTY3MTJbJ0NvZGUgQ29udmVudGlvbnMgZm9yIHRoZSBKYXZhIFByb2dyYW1taW5nIExhbmd1YWdlJy4gU3VuIE1pY3Jvc3lzdGVtcy5dCistIFtbWzNdXV0gaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Tb2Z0d2FyZV9tYWludGVuYW5jZVsnU29mdHdhcmUgbWFpbnRlbmFuY2UnLiBXaWtpcGVkaWEuXQorLSBbW1s0XV1dIGh0dHA6Ly9hcnRpY2xlLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvNDUxOTUvW0p1bmlvIEMgSGFtYW5vLiAnQXV0b21hdGVkIGJpc2VjdCBzdWNjZXNzIHN0b3J5Jy4gR21hbmUuXQorLSBbW1s1XV1dIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzMxNzE1NC9bQ2hyaXN0aWFuIENvdWRlci4gJ0Z1bGx5IGF1dG9tYXRlZCBiaXNlY3Rpbmcgd2l0aCAiZ2l0IGJpc2VjdCBydW4iJy4gTFdOLm5ldC5dCistIFtbWzZdXV0gaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMjc3ODcyL1tKb25hdGhhbiBDb3JiZXQuICdCaXNlY3Rpb24gZGl2aWRlcyB1c2VycyBhbmQgZGV2ZWxvcGVycycuIExXTi5uZXQuXQorLSBbW1s3XV1dIGh0dHA6Ly9hcnRpY2xlLmdtYW5lLm9yZy9nbWFuZS5saW51eC5zY3NpLzM2NjUyL1tJbmdvIE1vbG5hci4gJ1JlOiBCVUcgMi42LjIzLXJjMyBjYW4ndCBzZWUgc2QgcGFydGl0aW9ucyBvbiBBbHBoYScuIEdtYW5lLl0KKy0gW1tbOF1dXSBodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy9naXQtYmlzZWN0Lmh0bWxbSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdC4gJ2dpdC1iaXNlY3QoMSkgTWFudWFsIFBhZ2UnLiBMaW51eCBLZXJuZWwgQXJjaGl2ZXMuXQorLSBbW1s5XV1dIGh0dHA6Ly9naXRodWIuY29tL0VhbGR3dWxmL2JiY2hvcFtFYWxkd3VsZi4gJ2JiY2hvcCcuIEdpdEh1Yi5dCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1iaXNlY3QudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTc5YWFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYmlzZWN0LnR4dApAQCAtMCwwICsxLDUwMCBAQAorZ2l0LWJpc2VjdCgxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYmlzZWN0IC0gVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBiaXNlY3QnIDxzdWJjb21tYW5kPiA8b3B0aW9ucz4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGUgY29tbWFuZCB0YWtlcyB2YXJpb3VzIHN1YmNvbW1hbmRzLCBhbmQgZGlmZmVyZW50IG9wdGlvbnMgZGVwZW5kaW5nCitvbiB0aGUgc3ViY29tbWFuZDoKKworIGdpdCBiaXNlY3Qgc3RhcnQgWy0tdGVybS17b2xkLGdvb2R9PTx0ZXJtPiAtLXRlcm0te25ldyxiYWR9PTx0ZXJtPl0KKwkJICBbLS1uby1jaGVja291dF0gWzxiYWQ+IFs8Z29vZD4uLi5dXSBbLS1dIFs8cGF0aHM+Li4uXQorIGdpdCBiaXNlY3QgKGJhZHxuZXcpIFs8cmV2Pl0KKyBnaXQgYmlzZWN0IChnb29kfG9sZCkgWzxyZXY+Li4uXQorIGdpdCBiaXNlY3QgdGVybXMgWy0tdGVybS1nb29kIHwgLS10ZXJtLWJhZF0KKyBnaXQgYmlzZWN0IHNraXAgWyg8cmV2Pnw8cmFuZ2U+KS4uLl0KKyBnaXQgYmlzZWN0IHJlc2V0IFs8Y29tbWl0Pl0KKyBnaXQgYmlzZWN0IHZpc3VhbGl6ZQorIGdpdCBiaXNlY3QgcmVwbGF5IDxsb2dmaWxlPgorIGdpdCBiaXNlY3QgbG9nCisgZ2l0IGJpc2VjdCBydW4gPGNtZD4uLi4KKyBnaXQgYmlzZWN0IGhlbHAKKworVGhpcyBjb21tYW5kIHVzZXMgYSBiaW5hcnkgc2VhcmNoIGFsZ29yaXRobSB0byBmaW5kIHdoaWNoIGNvbW1pdCBpbgoreW91ciBwcm9qZWN0J3MgaGlzdG9yeSBpbnRyb2R1Y2VkIGEgYnVnLiBZb3UgdXNlIGl0IGJ5IGZpcnN0IHRlbGxpbmcKK2l0IGEgImJhZCIgY29tbWl0IHRoYXQgaXMga25vd24gdG8gY29udGFpbiB0aGUgYnVnLCBhbmQgYSAiZ29vZCIKK2NvbW1pdCB0aGF0IGlzIGtub3duIHRvIGJlIGJlZm9yZSB0aGUgYnVnIHdhcyBpbnRyb2R1Y2VkLiBUaGVuIGBnaXQKK2Jpc2VjdGAgcGlja3MgYSBjb21taXQgYmV0d2VlbiB0aG9zZSB0d28gZW5kcG9pbnRzIGFuZCBhc2tzIHlvdQord2hldGhlciB0aGUgc2VsZWN0ZWQgY29tbWl0IGlzICJnb29kIiBvciAiYmFkIi4gSXQgY29udGludWVzIG5hcnJvd2luZworZG93biB0aGUgcmFuZ2UgdW50aWwgaXQgZmluZHMgdGhlIGV4YWN0IGNvbW1pdCB0aGF0IGludHJvZHVjZWQgdGhlCitjaGFuZ2UuCisKK0luIGZhY3QsIGBnaXQgYmlzZWN0YCBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBjaGFuZ2VkCisqYW55KiBwcm9wZXJ0eSBvZiB5b3VyIHByb2plY3Q7IGUuZy4sIHRoZSBjb21taXQgdGhhdCBmaXhlZCBhIGJ1Zywgb3IKK3RoZSBjb21taXQgdGhhdCBjYXVzZWQgYSBiZW5jaG1hcmsncyBwZXJmb3JtYW5jZSB0byBpbXByb3ZlLiBUbworc3VwcG9ydCB0aGlzIG1vcmUgZ2VuZXJhbCB1c2FnZSwgdGhlIHRlcm1zICJvbGQiIGFuZCAibmV3IiBjYW4gYmUgdXNlZAoraW4gcGxhY2Ugb2YgImdvb2QiIGFuZCAiYmFkIiwgb3IgeW91IGNhbiBjaG9vc2UgeW91ciBvd24gdGVybXMuIFNlZQorc2VjdGlvbiAiQWx0ZXJuYXRlIHRlcm1zIiBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworQmFzaWMgYmlzZWN0IGNvbW1hbmRzOiBzdGFydCwgYmFkLCBnb29kCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQXMgYW4gZXhhbXBsZSwgc3VwcG9zZSB5b3UgYXJlIHRyeWluZyB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBicm9rZSBhCitmZWF0dXJlIHRoYXQgd2FzIGtub3duIHRvIHdvcmsgaW4gdmVyc2lvbiBgdjIuNi4xMy1yYzJgIG9mIHlvdXIKK3Byb2plY3QuIFlvdSBzdGFydCBhIGJpc2VjdCBzZXNzaW9uIGFzIGZvbGxvd3M6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0CiskIGdpdCBiaXNlY3QgYmFkICAgICAgICAgICAgICAgICAjIEN1cnJlbnQgdmVyc2lvbiBpcyBiYWQKKyQgZ2l0IGJpc2VjdCBnb29kIHYyLjYuMTMtcmMyICAgICMgdjIuNi4xMy1yYzIgaXMga25vd24gdG8gYmUgZ29vZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uY2UgeW91IGhhdmUgc3BlY2lmaWVkIGF0IGxlYXN0IG9uZSBiYWQgYW5kIG9uZSBnb29kIGNvbW1pdCwgYGdpdAorYmlzZWN0YCBzZWxlY3RzIGEgY29tbWl0IGluIHRoZSBtaWRkbGUgb2YgdGhhdCByYW5nZSBvZiBoaXN0b3J5LAorY2hlY2tzIGl0IG91dCwgYW5kIG91dHB1dHMgc29tZXRoaW5nIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCaXNlY3Rpbmc6IDY3NSByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgMTAgc3RlcHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IHNob3VsZCBub3cgY29tcGlsZSB0aGUgY2hlY2tlZC1vdXQgdmVyc2lvbiBhbmQgdGVzdCBpdC4gSWYgdGhhdAordmVyc2lvbiB3b3JrcyBjb3JyZWN0bHksIHR5cGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgZ29vZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoYXQgdmVyc2lvbiBpcyBicm9rZW4sIHR5cGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgYmFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiBgZ2l0IGJpc2VjdGAgd2lsbCByZXNwb25kIHdpdGggc29tZXRoaW5nIGxpa2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCaXNlY3Rpbmc6IDMzNyByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgOSBzdGVwcykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitLZWVwIHJlcGVhdGluZyB0aGUgcHJvY2VzczogY29tcGlsZSB0aGUgdHJlZSwgdGVzdCBpdCwgYW5kIGRlcGVuZGluZworb24gd2hldGhlciBpdCBpcyBnb29kIG9yIGJhZCBydW4gYGdpdCBiaXNlY3QgZ29vZGAgb3IgYGdpdCBiaXNlY3QgYmFkYAordG8gYXNrIGZvciB0aGUgbmV4dCBjb21taXQgdGhhdCBuZWVkcyB0ZXN0aW5nLgorCitFdmVudHVhbGx5IHRoZXJlIHdpbGwgYmUgbm8gbW9yZSByZXZpc2lvbnMgbGVmdCB0byBpbnNwZWN0LCBhbmQgdGhlCitjb21tYW5kIHdpbGwgcHJpbnQgb3V0IGEgZGVzY3JpcHRpb24gb2YgdGhlIGZpcnN0IGJhZCBjb21taXQuIFRoZQorcmVmZXJlbmNlIGByZWZzL2Jpc2VjdC9iYWRgIHdpbGwgYmUgbGVmdCBwb2ludGluZyBhdCB0aGF0IGNvbW1pdC4KKworCitCaXNlY3QgcmVzZXQKK35+fn5+fn5+fn5+fgorCitBZnRlciBhIGJpc2VjdCBzZXNzaW9uLCB0byBjbGVhbiB1cCB0aGUgYmlzZWN0aW9uIHN0YXRlIGFuZCByZXR1cm4gdG8KK3RoZSBvcmlnaW5hbCBIRUFELCBpc3N1ZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJlc2V0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgdGhpcyB3aWxsIHJldHVybiB5b3VyIHRyZWUgdG8gdGhlIGNvbW1pdCB0aGF0IHdhcyBjaGVja2VkCitvdXQgYmVmb3JlIGBnaXQgYmlzZWN0IHN0YXJ0YC4gIChBIG5ldyBgZ2l0IGJpc2VjdCBzdGFydGAgd2lsbCBhbHNvIGRvCit0aGF0LCBhcyBpdCBjbGVhbnMgdXAgdGhlIG9sZCBiaXNlY3Rpb24gc3RhdGUuKQorCitXaXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50LCB5b3UgY2FuIHJldHVybiB0byBhIGRpZmZlcmVudCBjb21taXQKK2luc3RlYWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGV4YW1wbGUsIGBnaXQgYmlzZWN0IHJlc2V0IGJpc2VjdC9iYWRgIHdpbGwgY2hlY2sgb3V0IHRoZSBmaXJzdAorYmFkIHJldmlzaW9uLCB3aGlsZSBgZ2l0IGJpc2VjdCByZXNldCBIRUFEYCB3aWxsIGxlYXZlIHlvdSBvbiB0aGUKK2N1cnJlbnQgYmlzZWN0aW9uIGNvbW1pdCBhbmQgYXZvaWQgc3dpdGNoaW5nIGNvbW1pdHMgYXQgYWxsLgorCisKK0FsdGVybmF0ZSB0ZXJtcworfn5+fn5+fn5+fn5+fn5+CisKK1NvbWV0aW1lcyB5b3UgYXJlIG5vdCBsb29raW5nIGZvciB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhCiticmVha2FnZSwgYnV0IHJhdGhlciBmb3IgYSBjb21taXQgdGhhdCBjYXVzZWQgYSBjaGFuZ2UgYmV0d2VlbiBzb21lCitvdGhlciAib2xkIiBzdGF0ZSBhbmQgIm5ldyIgc3RhdGUuIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgYmUgbG9va2luZworZm9yIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgcGFydGljdWxhciBmaXguIE9yIHlvdSBtaWdodCBiZQorbG9va2luZyBmb3IgdGhlIGZpcnN0IGNvbW1pdCBpbiB3aGljaCB0aGUgc291cmNlLWNvZGUgZmlsZW5hbWVzIHdlcmUKK2ZpbmFsbHkgYWxsIGNvbnZlcnRlZCB0byB5b3VyIGNvbXBhbnkncyBuYW1pbmcgc3RhbmRhcmQuIE9yIHdoYXRldmVyLgorCitJbiBzdWNoIGNhc2VzIGl0IGNhbiBiZSB2ZXJ5IGNvbmZ1c2luZyB0byB1c2UgdGhlIHRlcm1zICJnb29kIiBhbmQKKyJiYWQiIHRvIHJlZmVyIHRvICJ0aGUgc3RhdGUgYmVmb3JlIHRoZSBjaGFuZ2UiIGFuZCAidGhlIHN0YXRlIGFmdGVyCit0aGUgY2hhbmdlIi4gU28gaW5zdGVhZCwgeW91IGNhbiB1c2UgdGhlIHRlcm1zICJvbGQiIGFuZCAibmV3IiwKK3Jlc3BlY3RpdmVseSwgaW4gcGxhY2Ugb2YgImdvb2QiIGFuZCAiYmFkIi4gKEJ1dCBub3RlIHRoYXQgeW91IGNhbm5vdAorbWl4ICJnb29kIiBhbmQgImJhZCIgd2l0aCAib2xkIiBhbmQgIm5ldyIgaW4gYSBzaW5nbGUgc2Vzc2lvbi4pCisKK0luIHRoaXMgbW9yZSBnZW5lcmFsIHVzYWdlLCB5b3UgcHJvdmlkZSBgZ2l0IGJpc2VjdGAgd2l0aCBhICJuZXciCitjb21taXQgaGFzIHNvbWUgcHJvcGVydHkgYW5kIGFuICJvbGQiIGNvbW1pdCB0aGF0IGRvZXNuJ3QgaGF2ZSB0aGF0Citwcm9wZXJ0eS4gRWFjaCB0aW1lIGBnaXQgYmlzZWN0YCBjaGVja3Mgb3V0IGEgY29tbWl0LCB5b3UgdGVzdCBpZiB0aGF0Citjb21taXQgaGFzIHRoZSBwcm9wZXJ0eS4gSWYgaXQgZG9lcywgbWFyayB0aGUgY29tbWl0IGFzICJuZXciOworb3RoZXJ3aXNlLCBtYXJrIGl0IGFzICJvbGQiLiBXaGVuIHRoZSBiaXNlY3Rpb24gaXMgZG9uZSwgYGdpdCBiaXNlY3RgCit3aWxsIHJlcG9ydCB3aGljaCBjb21taXQgaW50cm9kdWNlZCB0aGUgcHJvcGVydHkuCisKK1RvIHVzZSAib2xkIiBhbmQgIm5ldyIgaW5zdGVhZCBvZiAiZ29vZCIgYW5kIGJhZCwgeW91IG11c3QgcnVuIGBnaXQKK2Jpc2VjdCBzdGFydGAgd2l0aG91dCBjb21taXRzIGFzIGFyZ3VtZW50IGFuZCB0aGVuIHJ1biB0aGUgZm9sbG93aW5nCitjb21tYW5kcyB0byBhZGQgdGhlIGNvbW1pdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGJpc2VjdCBvbGQgWzxyZXY+XQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIGluZGljYXRlIHRoYXQgYSBjb21taXQgd2FzIGJlZm9yZSB0aGUgc291Z2h0IGNoYW5nZSwgb3IKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgYmlzZWN0IG5ldyBbPHJldj4uLi5dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gaW5kaWNhdGUgdGhhdCBpdCB3YXMgYWZ0ZXIuCisKK1RvIGdldCBhIHJlbWluZGVyIG9mIHRoZSBjdXJyZW50bHkgdXNlZCB0ZXJtcywgdXNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGJpc2VjdCB0ZXJtcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gZ2V0IGp1c3QgdGhlIG9sZCAocmVzcGVjdGl2ZWx5IG5ldykgdGVybSB3aXRoIGBnaXQgYmlzZWN0IHRlcm0KKy0tdGVybS1vbGRgIG9yIGBnaXQgYmlzZWN0IHRlcm0gLS10ZXJtLWdvb2RgLgorCitJZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgeW91ciBvd24gdGVybXMgaW5zdGVhZCBvZiAiYmFkIi8iZ29vZCIgb3IKKyJuZXciLyJvbGQiLCB5b3UgY2FuIGNob29zZSBhbnkgbmFtZXMgeW91IGxpa2UgKGV4Y2VwdCBleGlzdGluZyBiaXNlY3QKK3N1YmNvbW1hbmRzIGxpa2UgYHJlc2V0YCwgYHN0YXJ0YCwgLi4uKSBieSBzdGFydGluZyB0aGUKK2Jpc2VjdGlvbiB1c2luZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBiaXNlY3Qgc3RhcnQgLS10ZXJtLW9sZCA8dGVybS1vbGQ+IC0tdGVybS1uZXcgPHRlcm0tbmV3PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgYXJlIGxvb2tpbmcgZm9yIGEgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhCitwZXJmb3JtYW5jZSByZWdyZXNzaW9uLCB5b3UgbWlnaHQgdXNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGJpc2VjdCBzdGFydCAtLXRlcm0tb2xkIGZhc3QgLS10ZXJtLW5ldyBzbG93CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3IgaWYgeW91IGFyZSBsb29raW5nIGZvciB0aGUgY29tbWl0IHRoYXQgZml4ZWQgYSBidWcsIHlvdSBtaWdodCB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgYmlzZWN0IHN0YXJ0IC0tdGVybS1uZXcgZml4ZWQgLS10ZXJtLW9sZCBicm9rZW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuLCB1c2UgYGdpdCBiaXNlY3QgPHRlcm0tb2xkPmAgYW5kIGBnaXQgYmlzZWN0IDx0ZXJtLW5ldz5gIGluc3RlYWQKK29mIGBnaXQgYmlzZWN0IGdvb2RgIGFuZCBgZ2l0IGJpc2VjdCBiYWRgIHRvIG1hcmsgY29tbWl0cy4KKworQmlzZWN0IHZpc3VhbGl6ZQorfn5+fn5+fn5+fn5+fn5+fgorCitUbyBzZWUgdGhlIGN1cnJlbnRseSByZW1haW5pbmcgc3VzcGVjdHMgaW4gJ2dpdGsnLCBpc3N1ZSB0aGUgZm9sbG93aW5nCitjb21tYW5kIGR1cmluZyB0aGUgYmlzZWN0aW9uIHByb2Nlc3M6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHZpc3VhbGl6ZQorLS0tLS0tLS0tLS0tCisKK2B2aWV3YCBtYXkgYWxzbyBiZSB1c2VkIGFzIGEgc3lub255bSBmb3IgYHZpc3VhbGl6ZWAuCisKK0lmIHRoZSAnRElTUExBWScgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldCwgJ2dpdCBsb2cnIGlzIHVzZWQKK2luc3RlYWQuICBZb3UgY2FuIGFsc28gZ2l2ZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBzdWNoIGFzIGAtcGAgYW5kCitgLS1zdGF0YC4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgdmlldyAtLXN0YXQKKy0tLS0tLS0tLS0tLQorCitCaXNlY3QgbG9nIGFuZCBiaXNlY3QgcmVwbGF5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FmdGVyIGhhdmluZyBtYXJrZWQgcmV2aXNpb25zIGFzIGdvb2Qgb3IgYmFkLCBpc3N1ZSB0aGUgZm9sbG93aW5nCitjb21tYW5kIHRvIHNob3cgd2hhdCBoYXMgYmVlbiBkb25lIHNvIGZhcjoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3QgbG9nCistLS0tLS0tLS0tLS0KKworSWYgeW91IGRpc2NvdmVyIHRoYXQgeW91IG1hZGUgYSBtaXN0YWtlIGluIHNwZWNpZnlpbmcgdGhlIHN0YXR1cyBvZiBhCityZXZpc2lvbiwgeW91IGNhbiBzYXZlIHRoZSBvdXRwdXQgb2YgdGhpcyBjb21tYW5kIHRvIGEgZmlsZSwgZWRpdCBpdCB0bworcmVtb3ZlIHRoZSBpbmNvcnJlY3QgZW50cmllcywgYW5kIHRoZW4gaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0bworcmV0dXJuIHRvIGEgY29ycmVjdGVkIHN0YXRlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCByZXNldAorJCBnaXQgYmlzZWN0IHJlcGxheSB0aGF0LWZpbGUKKy0tLS0tLS0tLS0tLQorCitBdm9pZGluZyB0ZXN0aW5nIGEgY29tbWl0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0lmLCBpbiB0aGUgbWlkZGxlIG9mIGEgYmlzZWN0IHNlc3Npb24sIHlvdSBrbm93IHRoYXQgdGhlIHN1Z2dlc3RlZAorcmV2aXNpb24gaXMgbm90IGEgZ29vZCBvbmUgdG8gdGVzdCAoZS5nLiBpdCBmYWlscyB0byBidWlsZCBhbmQgeW91Citrbm93IHRoYXQgdGhlIGZhaWx1cmUgZG9lcyBub3QgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIHRoZSBidWcgeW91CithcmUgY2hhc2luZyksIHlvdSBjYW4gbWFudWFsbHkgc2VsZWN0IGEgbmVhcmJ5IGNvbW1pdCBhbmQgdGVzdCB0aGF0CitvbmUgaW5zdGVhZC4KKworRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IGdvb2QvYmFkCQkJIyBwcmV2aW91cyByb3VuZCB3YXMgZ29vZCBvciBiYWQuCitCaXNlY3Rpbmc6IDMzNyByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMgKHJvdWdobHkgOSBzdGVwcykKKyQgZ2l0IGJpc2VjdCB2aXN1YWxpemUJCQkjIG9vcHMsIHRoYXQgaXMgdW5pbnRlcmVzdGluZy4KKyQgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjMJCSMgdHJ5IDMgcmV2aXNpb25zIGJlZm9yZSB3aGF0CisJCQkJCSMgd2FzIHN1Z2dlc3RlZAorLS0tLS0tLS0tLS0tCisKK1RoZW4gY29tcGlsZSBhbmQgdGVzdCB0aGUgY2hvc2VuIHJldmlzaW9uLCBhbmQgYWZ0ZXJ3YXJkcyBtYXJrCit0aGUgcmV2aXNpb24gYXMgZ29vZCBvciBiYWQgaW4gdGhlIHVzdWFsIG1hbm5lci4KKworQmlzZWN0IHNraXAKK35+fn5+fn5+fn5+CisKK0luc3RlYWQgb2YgY2hvb3NpbmcgYSBuZWFyYnkgY29tbWl0IGJ5IHlvdXJzZWxmLCB5b3UgY2FuIGFzayBHaXQgdG8gZG8KK2l0IGZvciB5b3UgYnkgaXNzdWluZyB0aGUgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc2tpcCAgICAgICAgICAgICAgICAgIyBDdXJyZW50IHZlcnNpb24gY2Fubm90IGJlIHRlc3RlZAorLS0tLS0tLS0tLS0tCisKK0hvd2V2ZXIsIGlmIHlvdSBza2lwIGEgY29tbWl0IGFkamFjZW50IHRvIHRoZSBvbmUgeW91IGFyZSBsb29raW5nIGZvciwKK0dpdCB3aWxsIGJlIHVuYWJsZSB0byB0ZWxsIGV4YWN0bHkgd2hpY2ggb2YgdGhvc2UgY29tbWl0cyB3YXMgdGhlCitmaXJzdCBiYWQgb25lLgorCitZb3UgY2FuIGFsc28gc2tpcCBhIHJhbmdlIG9mIGNvbW1pdHMsIGluc3RlYWQgb2YganVzdCBvbmUgY29tbWl0LAordXNpbmcgcmFuZ2Ugbm90YXRpb24uIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBza2lwIHYyLjUuLnYyLjYKKy0tLS0tLS0tLS0tLQorCitUaGlzIHRlbGxzIHRoZSBiaXNlY3QgcHJvY2VzcyB0aGF0IG5vIGNvbW1pdCBhZnRlciBgdjIuNWAsIHVwIHRvIGFuZAoraW5jbHVkaW5nIGB2Mi42YCwgc2hvdWxkIGJlIHRlc3RlZC4KKworTm90ZSB0aGF0IGlmIHlvdSBhbHNvIHdhbnQgdG8gc2tpcCB0aGUgZmlyc3QgY29tbWl0IG9mIHRoZSByYW5nZSB5b3UKK3dvdWxkIGlzc3VlIHRoZSBjb21tYW5kOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBza2lwIHYyLjUgdjIuNS4udjIuNgorLS0tLS0tLS0tLS0tCisKK1RoaXMgdGVsbHMgdGhlIGJpc2VjdCBwcm9jZXNzIHRoYXQgdGhlIGNvbW1pdHMgYmV0d2VlbiBgdjIuNWAgYW5kCitgdjIuNmAgKGluY2x1c2l2ZSkgc2hvdWxkIGJlIHNraXBwZWQuCisKKworQ3V0dGluZyBkb3duIGJpc2VjdGlvbiBieSBnaXZpbmcgbW9yZSBwYXJhbWV0ZXJzIHRvIGJpc2VjdCBzdGFydAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIGZ1cnRoZXIgY3V0IGRvd24gdGhlIG51bWJlciBvZiB0cmlhbHMsIGlmIHlvdSBrbm93IHdoYXQgcGFydCBvZgordGhlIHRyZWUgaXMgaW52b2x2ZWQgaW4gdGhlIHByb2JsZW0geW91IGFyZSB0cmFja2luZyBkb3duLCBieSBzcGVjaWZ5aW5nCitwYXRoIHBhcmFtZXRlcnMgd2hlbiBpc3N1aW5nIHRoZSBgYmlzZWN0IHN0YXJ0YCBjb21tYW5kOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCAtLSBhcmNoL2kzODYgaW5jbHVkZS9hc20taTM4NgorLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBrbm93IGJlZm9yZWhhbmQgbW9yZSB0aGFuIG9uZSBnb29kIGNvbW1pdCwgeW91IGNhbiBuYXJyb3cgdGhlCitiaXNlY3Qgc3BhY2UgZG93biBieSBzcGVjaWZ5aW5nIGFsbCBvZiB0aGUgZ29vZCBjb21taXRzIGltbWVkaWF0ZWx5IGFmdGVyCit0aGUgYmFkIGNvbW1pdCB3aGVuIGlzc3VpbmcgdGhlIGBiaXNlY3Qgc3RhcnRgIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IHYyLjYuMjAtcmM2IHYyLjYuMjAtcmM0IHYyLjYuMjAtcmMxIC0tCisgICAgICAgICAgICAgICAgICAgIyB2Mi42LjIwLXJjNiBpcyBiYWQKKyAgICAgICAgICAgICAgICAgICAjIHYyLjYuMjAtcmM0IGFuZCB2Mi42LjIwLXJjMSBhcmUgZ29vZAorLS0tLS0tLS0tLS0tCisKK0Jpc2VjdCBydW4KK35+fn5+fn5+fn4KKworSWYgeW91IGhhdmUgYSBzY3JpcHQgdGhhdCBjYW4gdGVsbCBpZiB0aGUgY3VycmVudCBzb3VyY2UgY29kZSBpcyBnb29kCitvciBiYWQsIHlvdSBjYW4gYmlzZWN0IGJ5IGlzc3VpbmcgdGhlIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJ1biBteV9zY3JpcHQgYXJndW1lbnRzCistLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IHRoZSBzY3JpcHQgKGBteV9zY3JpcHRgIGluIHRoZSBhYm92ZSBleGFtcGxlKSBzaG91bGQgZXhpdAord2l0aCBjb2RlIDAgaWYgdGhlIGN1cnJlbnQgc291cmNlIGNvZGUgaXMgZ29vZC9vbGQsIGFuZCBleGl0IHdpdGggYQorY29kZSBiZXR3ZWVuIDEgYW5kIDEyNyAoaW5jbHVzaXZlKSwgZXhjZXB0IDEyNSwgaWYgdGhlIGN1cnJlbnQgc291cmNlCitjb2RlIGlzIGJhZC9uZXcuCisKK0FueSBvdGhlciBleGl0IGNvZGUgd2lsbCBhYm9ydCB0aGUgYmlzZWN0IHByb2Nlc3MuIEl0IHNob3VsZCBiZSBub3RlZAordGhhdCBhIHByb2dyYW0gdGhhdCB0ZXJtaW5hdGVzIHZpYSBgZXhpdCgtMSlgIGxlYXZlcyAkPyA9IDI1NSwgKHNlZSB0aGUKK2V4aXQoMykgbWFudWFsIHBhZ2UpLCBhcyB0aGUgdmFsdWUgaXMgY2hvcHBlZCB3aXRoIGAmIDAzNzdgLgorCitUaGUgc3BlY2lhbCBleGl0IGNvZGUgMTI1IHNob3VsZCBiZSB1c2VkIHdoZW4gdGhlIGN1cnJlbnQgc291cmNlIGNvZGUKK2Nhbm5vdCBiZSB0ZXN0ZWQuIElmIHRoZSBzY3JpcHQgZXhpdHMgd2l0aCB0aGlzIGNvZGUsIHRoZSBjdXJyZW50CityZXZpc2lvbiB3aWxsIGJlIHNraXBwZWQgKHNlZSBgZ2l0IGJpc2VjdCBza2lwYCBhYm92ZSkuIDEyNSB3YXMgY2hvc2VuCithcyB0aGUgaGlnaGVzdCBzZW5zaWJsZSB2YWx1ZSB0byB1c2UgZm9yIHRoaXMgcHVycG9zZSwgYmVjYXVzZSAxMjYgYW5kIDEyNworYXJlIHVzZWQgYnkgUE9TSVggc2hlbGxzIHRvIHNpZ25hbCBzcGVjaWZpYyBlcnJvciBzdGF0dXMgKDEyNyBpcyBmb3IKK2NvbW1hbmQgbm90IGZvdW5kLCAxMjYgaXMgZm9yIGNvbW1hbmQgZm91bmQgYnV0IG5vdCBleGVjdXRhYmxlLS10aGVzZQorZGV0YWlscyBkbyBub3QgbWF0dGVyLCBhcyB0aGV5IGFyZSBub3JtYWwgZXJyb3JzIGluIHRoZSBzY3JpcHQsIGFzIGZhciBhcworYGJpc2VjdCBydW5gIGlzIGNvbmNlcm5lZCkuCisKK1lvdSBtYXkgb2Z0ZW4gZmluZCB0aGF0IGR1cmluZyBhIGJpc2VjdCBzZXNzaW9uIHlvdSB3YW50IHRvIGhhdmUKK3RlbXBvcmFyeSBtb2RpZmljYXRpb25zIChlLmcuIHMvI2RlZmluZSBERUJVRyAwLyNkZWZpbmUgREVCVUcgMS8gaW4gYQoraGVhZGVyIGZpbGUsIG9yICJyZXZpc2lvbiB0aGF0IGRvZXMgbm90IGhhdmUgdGhpcyBjb21taXQgbmVlZHMgdGhpcworcGF0Y2ggYXBwbGllZCB0byB3b3JrIGFyb3VuZCBhbm90aGVyIHByb2JsZW0gdGhpcyBiaXNlY3Rpb24gaXMgbm90CitpbnRlcmVzdGVkIGluIikgYXBwbGllZCB0byB0aGUgcmV2aXNpb24gYmVpbmcgdGVzdGVkLgorCitUbyBjb3BlIHdpdGggc3VjaCBhIHNpdHVhdGlvbiwgYWZ0ZXIgdGhlIGlubmVyICdnaXQgYmlzZWN0JyBmaW5kcyB0aGUKK25leHQgcmV2aXNpb24gdG8gdGVzdCwgdGhlIHNjcmlwdCBjYW4gYXBwbHkgdGhlIHBhdGNoCitiZWZvcmUgY29tcGlsaW5nLCBydW4gdGhlIHJlYWwgdGVzdCwgYW5kIGFmdGVyd2FyZHMgZGVjaWRlIGlmIHRoZQorcmV2aXNpb24gKHBvc3NpYmx5IHdpdGggdGhlIG5lZWRlZCBwYXRjaCkgcGFzc2VkIHRoZSB0ZXN0IGFuZCB0aGVuCityZXdpbmQgdGhlIHRyZWUgdG8gdGhlIHByaXN0aW5lIHN0YXRlLiAgRmluYWxseSB0aGUgc2NyaXB0IHNob3VsZCBleGl0Cit3aXRoIHRoZSBzdGF0dXMgb2YgdGhlIHJlYWwgdGVzdCB0byBsZXQgdGhlIGBnaXQgYmlzZWN0IHJ1bmAgY29tbWFuZCBsb29wCitkZXRlcm1pbmUgdGhlIGV2ZW50dWFsIG91dGNvbWUgb2YgdGhlIGJpc2VjdCBzZXNzaW9uLgorCitPUFRJT05TCistLS0tLS0tCistLW5vLWNoZWNrb3V0OjoKKysKK0RvIG5vdCBjaGVja291dCB0aGUgbmV3IHdvcmtpbmcgdHJlZSBhdCBlYWNoIGl0ZXJhdGlvbiBvZiB0aGUgYmlzZWN0aW9uCitwcm9jZXNzLiBJbnN0ZWFkIGp1c3QgdXBkYXRlIGEgc3BlY2lhbCByZWZlcmVuY2UgbmFtZWQgJ0JJU0VDVF9IRUFEJyB0byBtYWtlCitpdCBwb2ludCB0byB0aGUgY29tbWl0IHRoYXQgc2hvdWxkIGJlIHRlc3RlZC4KKysKK1RoaXMgb3B0aW9uIG1heSBiZSB1c2VmdWwgd2hlbiB0aGUgdGVzdCB5b3Ugd291bGQgcGVyZm9ybSBpbiBlYWNoIHN0ZXAKK2RvZXMgbm90IHJlcXVpcmUgYSBjaGVja2VkIG91dCB0cmVlLgorKworSWYgdGhlIHJlcG9zaXRvcnkgaXMgYmFyZSwgYC0tbm8tY2hlY2tvdXRgIGlzIGFzc3VtZWQuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIEF1dG9tYXRpY2FsbHkgYmlzZWN0IGEgYnJva2VuIGJ1aWxkIGJldHdlZW4gdjEuMiBhbmQgSEVBRDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgdjEuMiAtLSAgICAgICMgSEVBRCBpcyBiYWQsIHYxLjIgaXMgZ29vZAorJCBnaXQgYmlzZWN0IHJ1biBtYWtlICAgICAgICAgICAgICAgICMgIm1ha2UiIGJ1aWxkcyB0aGUgYXBwCiskIGdpdCBiaXNlY3QgcmVzZXQgICAgICAgICAgICAgICAgICAgIyBxdWl0IHRoZSBiaXNlY3Qgc2Vzc2lvbgorLS0tLS0tLS0tLS0tCisKKyogQXV0b21hdGljYWxseSBiaXNlY3QgYSB0ZXN0IGZhaWx1cmUgYmV0d2VlbiBvcmlnaW4gYW5kIEhFQUQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIG9yaWdpbiAtLSAgICAjIEhFQUQgaXMgYmFkLCBvcmlnaW4gaXMgZ29vZAorJCBnaXQgYmlzZWN0IHJ1biBtYWtlIHRlc3QgICAgICAgICAgICMgIm1ha2UgdGVzdCIgYnVpbGRzIGFuZCB0ZXN0cworJCBnaXQgYmlzZWN0IHJlc2V0ICAgICAgICAgICAgICAgICAgICMgcXVpdCB0aGUgYmlzZWN0IHNlc3Npb24KKy0tLS0tLS0tLS0tLQorCisqIEF1dG9tYXRpY2FsbHkgYmlzZWN0IGEgYnJva2VuIHRlc3QgY2FzZToKKysKKy0tLS0tLS0tLS0tLQorJCBjYXQgfi90ZXN0LnNoCisjIS9iaW4vc2gKK21ha2UgfHwgZXhpdCAxMjUgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgc2tpcHMgYnJva2VuIGJ1aWxkcworfi9jaGVja190ZXN0X2Nhc2Uuc2ggICAgICAgICAgICAgICAgICMgZG9lcyB0aGUgdGVzdCBjYXNlIHBhc3M/CiskIGdpdCBiaXNlY3Qgc3RhcnQgSEVBRCBIRUFEfjEwIC0tICAgIyBjdWxwcml0IGlzIGFtb25nIHRoZSBsYXN0IDEwCiskIGdpdCBiaXNlY3QgcnVuIH4vdGVzdC5zaAorJCBnaXQgYmlzZWN0IHJlc2V0ICAgICAgICAgICAgICAgICAgICMgcXVpdCB0aGUgYmlzZWN0IHNlc3Npb24KKy0tLS0tLS0tLS0tLQorKworSGVyZSB3ZSB1c2UgYSBgdGVzdC5zaGAgY3VzdG9tIHNjcmlwdC4gSW4gdGhpcyBzY3JpcHQsIGlmIGBtYWtlYAorZmFpbHMsIHdlIHNraXAgdGhlIGN1cnJlbnQgY29tbWl0LgorYGNoZWNrX3Rlc3RfY2FzZS5zaGAgc2hvdWxkIGBleGl0IDBgIGlmIHRoZSB0ZXN0IGNhc2UgcGFzc2VzLAorYW5kIGBleGl0IDFgIG90aGVyd2lzZS4KKysKK0l0IGlzIHNhZmVyIGlmIGJvdGggYHRlc3Quc2hgIGFuZCBgY2hlY2tfdGVzdF9jYXNlLnNoYCBhcmUKK291dHNpZGUgdGhlIHJlcG9zaXRvcnkgdG8gcHJldmVudCBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgYmlzZWN0LAorbWFrZSBhbmQgdGVzdCBwcm9jZXNzZXMgYW5kIHRoZSBzY3JpcHRzLgorCisqIEF1dG9tYXRpY2FsbHkgYmlzZWN0IHdpdGggdGVtcG9yYXJ5IG1vZGlmaWNhdGlvbnMgKGhvdC1maXgpOgorKworLS0tLS0tLS0tLS0tCiskIGNhdCB+L3Rlc3Quc2gKKyMhL2Jpbi9zaAorCisjIHR3ZWFrIHRoZSB3b3JraW5nIHRyZWUgYnkgbWVyZ2luZyB0aGUgaG90LWZpeCBicmFuY2gKKyMgYW5kIHRoZW4gYXR0ZW1wdCBhIGJ1aWxkCitpZglnaXQgbWVyZ2UgLS1uby1jb21taXQgaG90LWZpeCAmJgorCW1ha2UKK3RoZW4KKwkjIHJ1biBwcm9qZWN0IHNwZWNpZmljIHRlc3QgYW5kIHJlcG9ydCBpdHMgc3RhdHVzCisJfi9jaGVja190ZXN0X2Nhc2Uuc2gKKwlzdGF0dXM9JD8KK2Vsc2UKKwkjIHRlbGwgdGhlIGNhbGxlciB0aGlzIGlzIHVudGVzdGFibGUKKwlzdGF0dXM9MTI1CitmaQorCisjIHVuZG8gdGhlIHR3ZWFrIHRvIGFsbG93IGNsZWFuIGZsaXBwaW5nIHRvIHRoZSBuZXh0IGNvbW1pdAorZ2l0IHJlc2V0IC0taGFyZAorCisjIHJldHVybiBjb250cm9sCitleGl0ICRzdGF0dXMKKy0tLS0tLS0tLS0tLQorKworVGhpcyBhcHBsaWVzIG1vZGlmaWNhdGlvbnMgZnJvbSBhIGhvdC1maXggYnJhbmNoIGJlZm9yZSBlYWNoIHRlc3QgcnVuLAorZS5nLiBpbiBjYXNlIHlvdXIgYnVpbGQgb3IgdGVzdCBlbnZpcm9ubWVudCBjaGFuZ2VkIHNvIHRoYXQgb2xkZXIKK3JldmlzaW9ucyBtYXkgbmVlZCBhIGZpeCB3aGljaCBuZXdlciBvbmVzIGhhdmUgYWxyZWFkeS4gKE1ha2Ugc3VyZSB0aGUKK2hvdC1maXggYnJhbmNoIGlzIGJhc2VkIG9mZiBhIGNvbW1pdCB3aGljaCBpcyBjb250YWluZWQgaW4gYWxsIHJldmlzaW9ucword2hpY2ggeW91IGFyZSBiaXNlY3RpbmcsIHNvIHRoYXQgdGhlIG1lcmdlIGRvZXMgbm90IHB1bGwgaW4gdG9vIG11Y2gsIG9yCit1c2UgYGdpdCBjaGVycnktcGlja2AgaW5zdGVhZCBvZiBgZ2l0IG1lcmdlYC4pCisKKyogQXV0b21hdGljYWxseSBiaXNlY3QgYSBicm9rZW4gdGVzdCBjYXNlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgSEVBRCBIRUFEfjEwIC0tICAgIyBjdWxwcml0IGlzIGFtb25nIHRoZSBsYXN0IDEwCiskIGdpdCBiaXNlY3QgcnVuIHNoIC1jICJtYWtlIHx8IGV4aXQgMTI1OyB+L2NoZWNrX3Rlc3RfY2FzZS5zaCIKKyQgZ2l0IGJpc2VjdCByZXNldCAgICAgICAgICAgICAgICAgICAjIHF1aXQgdGhlIGJpc2VjdCBzZXNzaW9uCistLS0tLS0tLS0tLS0KKysKK1RoaXMgc2hvd3MgdGhhdCB5b3UgY2FuIGRvIHdpdGhvdXQgYSBydW4gc2NyaXB0IGlmIHlvdSB3cml0ZSB0aGUgdGVzdAorb24gYSBzaW5nbGUgbGluZS4KKworKiBMb2NhdGUgYSBnb29kIHJlZ2lvbiBvZiB0aGUgb2JqZWN0IGdyYXBoIGluIGEgZGFtYWdlZCByZXBvc2l0b3J5CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydCBIRUFEIDxrbm93bi1nb29kLWNvbW1pdD4gWyA8Ym91bmRhcnktY29tbWl0PiAuLi4gXSAtLW5vLWNoZWNrb3V0CiskIGdpdCBiaXNlY3QgcnVuIHNoIC1jICcKKwlHT09EPSQoZ2l0IGZvci1lYWNoLXJlZiAiLS1mb3JtYXQ9JShvYmplY3RuYW1lKSIgcmVmcy9iaXNlY3QvZ29vZC0qKSAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgQklTRUNUX0hFQUQgLS1ub3QgJEdPT0QgPnRtcC4kJCAmJgorCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgPi9kZXYvbnVsbCA8dG1wLiQkCisJcmM9JD8KKwlybSAtZiB0bXAuJCQKKwl0ZXN0ICRyYyA9IDAnCisKKyQgZ2l0IGJpc2VjdCByZXNldCAgICAgICAgICAgICAgICAgICAjIHF1aXQgdGhlIGJpc2VjdCBzZXNzaW9uCistLS0tLS0tLS0tLS0KKysKK0luIHRoaXMgY2FzZSwgd2hlbiAnZ2l0IGJpc2VjdCBydW4nIGZpbmlzaGVzLCBiaXNlY3QvYmFkIHdpbGwgcmVmZXIgdG8gYSBjb21taXQgdGhhdAoraGFzIGF0IGxlYXN0IG9uZSBwYXJlbnQgd2hvc2UgcmVhY2hhYmxlIGdyYXBoIGlzIGZ1bGx5IHRyYXZlcnNhYmxlIGluIHRoZSBzZW5zZQorcmVxdWlyZWQgYnkgJ2dpdCBwYWNrIG9iamVjdHMnLgorCisqIExvb2sgZm9yIGEgZml4IGluc3RlYWQgb2YgYSByZWdyZXNzaW9uIGluIHRoZSBjb2RlCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBzdGFydAorJCBnaXQgYmlzZWN0IG5ldyBIRUFEICAgICMgY3VycmVudCBjb21taXQgaXMgbWFya2VkIGFzIG5ldworJCBnaXQgYmlzZWN0IG9sZCBIRUFEfjEwICMgdGhlIHRlbnRoIGNvbW1pdCBmcm9tIG5vdyBpcyBtYXJrZWQgYXMgb2xkCistLS0tLS0tLS0tLS0KKysKK29yOgorLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQgLS10ZXJtLW9sZCBicm9rZW4gLS10ZXJtLW5ldyBmaXhlZAorJCBnaXQgYmlzZWN0IGZpeGVkCiskIGdpdCBiaXNlY3QgYnJva2VuIEhFQUR+MTAKKy0tLS0tLS0tLS0tLQorCitHZXR0aW5nIGhlbHAKK35+fn5+fn5+fn5+fgorCitVc2UgYGdpdCBiaXNlY3RgIHRvIGdldCBhIHNob3J0IHVzYWdlIGRlc2NyaXB0aW9uLCBhbmQgYGdpdCBiaXNlY3QKK2hlbHBgIG9yIGBnaXQgYmlzZWN0IC1oYCB0byBnZXQgYSBsb25nIHVzYWdlIGRlc2NyaXB0aW9uLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbms6Z2l0LWJpc2VjdC1sazIwMDkuaHRtbFtGaWdodGluZyByZWdyZXNzaW9ucyB3aXRoIGdpdCBiaXNlY3RdLAorbGlua2dpdDpnaXQtYmxhbWVbMV0uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYmxhbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZTk0N2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ibGFtZS50eHQKQEAgLTAsMCArMSwyMzQgQEAKK2dpdC1ibGFtZSgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ibGFtZSAtIFNob3cgd2hhdCByZXZpc2lvbiBhbmQgYXV0aG9yIGxhc3QgbW9kaWZpZWQgZWFjaCBsaW5lIG9mIGEgZmlsZQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYmxhbWUnIFstY10gWy1iXSBbLWxdIFstLXJvb3RdIFstdF0gWy1mXSBbLW5dIFstc10gWy1lXSBbLXBdIFstd10gWy0taW5jcmVtZW50YWxdCisJICAgIFstTCA8cmFuZ2U+XSBbLVMgPHJldnMtZmlsZT5dIFstTV0gWy1DXSBbLUNdIFstQ10gWy0tc2luY2U9PGRhdGU+XQorCSAgICBbLS1hYmJyZXY9PG4+XSBbPHJldj4gfCAtLWNvbnRlbnRzIDxmaWxlPiB8IC0tcmV2ZXJzZSA8cmV2Pl0gWy0tXSA8ZmlsZT4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0Fubm90YXRlcyBlYWNoIGxpbmUgaW4gdGhlIGdpdmVuIGZpbGUgd2l0aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZXZpc2lvbiB3aGljaAorbGFzdCBtb2RpZmllZCB0aGUgbGluZS4gT3B0aW9uYWxseSwgc3RhcnQgYW5ub3RhdGluZyBmcm9tIHRoZSBnaXZlbiByZXZpc2lvbi4KKworV2hlbiBzcGVjaWZpZWQgb25lIG9yIG1vcmUgdGltZXMsIGAtTGAgcmVzdHJpY3RzIGFubm90YXRpb24gdG8gdGhlIHJlcXVlc3RlZAorbGluZXMuCisKK1RoZSBvcmlnaW4gb2YgbGluZXMgaXMgYXV0b21hdGljYWxseSBmb2xsb3dlZCBhY3Jvc3Mgd2hvbGUtZmlsZQorcmVuYW1lcyAoY3VycmVudGx5IHRoZXJlIGlzIG5vIG9wdGlvbiB0byB0dXJuIHRoZSByZW5hbWUtZm9sbG93aW5nCitvZmYpLiBUbyBmb2xsb3cgbGluZXMgbW92ZWQgZnJvbSBvbmUgZmlsZSB0byBhbm90aGVyLCBvciB0byBmb2xsb3cKK2xpbmVzIHRoYXQgd2VyZSBjb3BpZWQgYW5kIHBhc3RlZCBmcm9tIGFub3RoZXIgZmlsZSwgZXRjLiwgc2VlIHRoZQorYC1DYCBhbmQgYC1NYCBvcHRpb25zLgorCitUaGUgcmVwb3J0IGRvZXMgbm90IHRlbGwgeW91IGFueXRoaW5nIGFib3V0IGxpbmVzIHdoaWNoIGhhdmUgYmVlbiBkZWxldGVkIG9yCityZXBsYWNlZDsgeW91IG5lZWQgdG8gdXNlIGEgdG9vbCBzdWNoIGFzICdnaXQgZGlmZicgb3IgdGhlICJwaWNrYXhlIgoraW50ZXJmYWNlIGJyaWVmbHkgbWVudGlvbmVkIGluIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBoLgorCitBcGFydCBmcm9tIHN1cHBvcnRpbmcgZmlsZSBhbm5vdGF0aW9uLCBHaXQgYWxzbyBzdXBwb3J0cyBzZWFyY2hpbmcgdGhlCitkZXZlbG9wbWVudCBoaXN0b3J5IGZvciB3aGVuIGEgY29kZSBzbmlwcGV0IG9jY3VycmVkIGluIGEgY2hhbmdlLiBUaGlzIG1ha2VzIGl0Citwb3NzaWJsZSB0byB0cmFjayB3aGVuIGEgY29kZSBzbmlwcGV0IHdhcyBhZGRlZCB0byBhIGZpbGUsIG1vdmVkIG9yIGNvcGllZAorYmV0d2VlbiBmaWxlcywgYW5kIGV2ZW50dWFsbHkgZGVsZXRlZCBvciByZXBsYWNlZC4gSXQgd29ya3MgYnkgc2VhcmNoaW5nIGZvcgorYSB0ZXh0IHN0cmluZyBpbiB0aGUgZGlmZi4gQSBzbWFsbCBleGFtcGxlIG9mIHRoZSBwaWNrYXhlIGludGVyZmFjZQordGhhdCBzZWFyY2hlcyBmb3IgYGJsYW1lX3VzYWdlYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtLXByZXR0eT1vbmVsaW5lIC1TJ2JsYW1lX3VzYWdlJworNTA0MGYxN2ViYTE1NTA0YmFkNjZiMTRhNjQ1YmRkZDliMDE1ZWJiNyBibGFtZSAtUyA8YW5jZXN0cnktZmlsZT4KK2VhNGM3ZjliZjY5ZTc4MWRkMGNkODhkMmJjY2IyYmY1Y2MxNWM5YTcgZ2l0LWJsYW1lOiBNYWtlIHRoZSBvdXRwdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6OmJsYW1lLW9wdGlvbnMudHh0W10KKworLWM6OgorCVVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBsaW5rZ2l0OmdpdC1hbm5vdGF0ZVsxXSAoRGVmYXVsdDogb2ZmKS4KKworLS1zY29yZS1kZWJ1Zzo6CisJSW5jbHVkZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB0aGUgbW92ZW1lbnQgb2YKKwlsaW5lcyBiZXR3ZWVuIGZpbGVzIChzZWUgYC1DYCkgYW5kIGxpbmVzIG1vdmVkIHdpdGhpbiBhCisJZmlsZSAoc2VlIGAtTWApLiAgVGhlIGZpcnN0IG51bWJlciBsaXN0ZWQgaXMgdGhlIHNjb3JlLgorCVRoaXMgaXMgdGhlIG51bWJlciBvZiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBkZXRlY3RlZAorCWFzIGhhdmluZyBiZWVuIG1vdmVkIGJldHdlZW4gb3Igd2l0aGluIGZpbGVzLiAgVGhpcyBtdXN0IGJlIGFib3ZlCisJYSBjZXJ0YWluIHRocmVzaG9sZCBmb3IgJ2dpdCBibGFtZScgdG8gY29uc2lkZXIgdGhvc2UgbGluZXMKKwlvZiBjb2RlIHRvIGhhdmUgYmVlbiBtb3ZlZC4KKworLWY6OgorLS1zaG93LW5hbWU6OgorCVNob3cgdGhlIGZpbGVuYW1lIGluIHRoZSBvcmlnaW5hbCBjb21taXQuICBCeSBkZWZhdWx0CisJdGhlIGZpbGVuYW1lIGlzIHNob3duIGlmIHRoZXJlIGlzIGFueSBsaW5lIHRoYXQgY2FtZSBmcm9tIGEKKwlmaWxlIHdpdGggYSBkaWZmZXJlbnQgbmFtZSwgZHVlIHRvIHJlbmFtZSBkZXRlY3Rpb24uCisKKy1uOjoKKy0tc2hvdy1udW1iZXI6OgorCVNob3cgdGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBjb21taXQgKERlZmF1bHQ6IG9mZikuCisKKy1zOjoKKwlTdXBwcmVzcyB0aGUgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCBmcm9tIHRoZSBvdXRwdXQuCisKKy1lOjoKKy0tc2hvdy1lbWFpbDo6CisJU2hvdyB0aGUgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgYXV0aG9yIG5hbWUgKERlZmF1bHQ6IG9mZikuCisJVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIHZpYSB0aGUgYGJsYW1lLnNob3dFbWFpbGAgY29uZmlnCisJb3B0aW9uLgorCistdzo6CisJSWdub3JlIHdoaXRlc3BhY2Ugd2hlbiBjb21wYXJpbmcgdGhlIHBhcmVudCdzIHZlcnNpb24gYW5kCisJdGhlIGNoaWxkJ3MgdG8gZmluZCB3aGVyZSB0aGUgbGluZXMgY2FtZSBmcm9tLgorCistLWFiYnJldj08bj46OgorCUluc3RlYWQgb2YgdXNpbmcgdGhlIGRlZmF1bHQgNysxIGhleGFkZWNpbWFsIGRpZ2l0cyBhcyB0aGUKKwlhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSwgdXNlIDxuPisxIGRpZ2l0cy4gTm90ZSB0aGF0IDEgY29sdW1uCisJaXMgdXNlZCBmb3IgYSBjYXJldCB0byBtYXJrIHRoZSBib3VuZGFyeSBjb21taXQuCisKKworVEhFIFBPUkNFTEFJTiBGT1JNQVQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoaXMgZm9ybWF0LCBlYWNoIGxpbmUgaXMgb3V0cHV0IGFmdGVyIGEgaGVhZGVyOyB0aGUKK2hlYWRlciBhdCB0aGUgbWluaW11bSBoYXMgdGhlIGZpcnN0IGxpbmUgd2hpY2ggaGFzOgorCistIDQwLWJ5dGUgU0hBLTEgb2YgdGhlIGNvbW1pdCB0aGUgbGluZSBpcyBhdHRyaWJ1dGVkIHRvOworLSB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGxpbmUgaW4gdGhlIG9yaWdpbmFsIGZpbGU7CistIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgbGluZSBpbiB0aGUgZmluYWwgZmlsZTsKKy0gb24gYSBsaW5lIHRoYXQgc3RhcnRzIGEgZ3JvdXAgb2YgbGluZXMgZnJvbSBhIGRpZmZlcmVudAorICBjb21taXQgdGhhbiB0aGUgcHJldmlvdXMgb25lLCB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoaXMKKyAgZ3JvdXAuICBPbiBzdWJzZXF1ZW50IGxpbmVzIHRoaXMgZmllbGQgaXMgYWJzZW50LgorCitUaGlzIGhlYWRlciBsaW5lIGlzIGZvbGxvd2VkIGJ5IHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24KK2F0IGxlYXN0IG9uY2UgZm9yIGVhY2ggY29tbWl0OgorCistIHRoZSBhdXRob3IgbmFtZSAoImF1dGhvciIpLCBlbWFpbCAoImF1dGhvci1tYWlsIiksIHRpbWUKKyAgKCJhdXRob3ItdGltZSIpLCBhbmQgdGltZSB6b25lICgiYXV0aG9yLXR6Iik7IHNpbWlsYXJseQorICBmb3IgY29tbWl0dGVyLgorLSB0aGUgZmlsZW5hbWUgaW4gdGhlIGNvbW1pdCB0aGF0IHRoZSBsaW5lIGlzIGF0dHJpYnV0ZWQgdG8uCistIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgKCJzdW1tYXJ5IikuCisKK1RoZSBjb250ZW50cyBvZiB0aGUgYWN0dWFsIGxpbmUgaXMgb3V0cHV0IGFmdGVyIHRoZSBhYm92ZQoraGVhZGVyLCBwcmVmaXhlZCBieSBhIFRBQi4gVGhpcyBpcyB0byBhbGxvdyBhZGRpbmcgbW9yZQoraGVhZGVyIGVsZW1lbnRzIGxhdGVyLgorCitUaGUgcG9yY2VsYWluIGZvcm1hdCBnZW5lcmFsbHkgc3VwcHJlc3NlcyBjb21taXQgaW5mb3JtYXRpb24gdGhhdCBoYXMKK2FscmVhZHkgYmVlbiBzZWVuLiBGb3IgZXhhbXBsZSwgdHdvIGxpbmVzIHRoYXQgYXJlIGJsYW1lZCB0byB0aGUgc2FtZQorY29tbWl0IHdpbGwgYm90aCBiZSBzaG93biwgYnV0IHRoZSBkZXRhaWxzIGZvciB0aGF0IGNvbW1pdCB3aWxsIGJlIHNob3duCitvbmx5IG9uY2UuIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQsIGJ1dCBtYXkgcmVxdWlyZSBtb3JlIHN0YXRlIGJlIGtlcHQgYnkKK3RoZSByZWFkZXIuIFRoZSBgLS1saW5lLXBvcmNlbGFpbmAgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIG91dHB1dCBmdWxsCitjb21taXQgaW5mb3JtYXRpb24gZm9yIGVhY2ggbGluZSwgYWxsb3dpbmcgc2ltcGxlciAoYnV0IGxlc3MgZWZmaWNpZW50KQordXNhZ2UgbGlrZToKKworCSMgY291bnQgdGhlIG51bWJlciBvZiBsaW5lcyBhdHRyaWJ1dGVkIHRvIGVhY2ggYXV0aG9yCisJZ2l0IGJsYW1lIC0tbGluZS1wb3JjZWxhaW4gZmlsZSB8CisJc2VkIC1uICdzL15hdXRob3IgLy9wJyB8CisJc29ydCB8IHVuaXEgLWMgfCBzb3J0IC1ybgorCisKK1NQRUNJRllJTkcgUkFOR0VTCistLS0tLS0tLS0tLS0tLS0tLQorCitVbmxpa2UgJ2dpdCBibGFtZScgYW5kICdnaXQgYW5ub3RhdGUnIGluIG9sZGVyIHZlcnNpb25zIG9mIGdpdCwgdGhlIGV4dGVudAorb2YgdGhlIGFubm90YXRpb24gY2FuIGJlIGxpbWl0ZWQgdG8gYm90aCBsaW5lIHJhbmdlcyBhbmQgcmV2aXNpb24KK3Jhbmdlcy4gVGhlIGAtTGAgb3B0aW9uLCB3aGljaCBsaW1pdHMgYW5ub3RhdGlvbiB0byBhIHJhbmdlIG9mIGxpbmVzLCBtYXkgYmUKK3NwZWNpZmllZCBtdWx0aXBsZSB0aW1lcy4KKworV2hlbiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gZmluZGluZyB0aGUgb3JpZ2luIGZvcgorbGluZXMgNDAtNjAgZm9yIGZpbGUgYGZvb2AsIHlvdSBjYW4gdXNlIHRoZSBgLUxgIG9wdGlvbiBsaWtlIHNvCisodGhleSBtZWFuIHRoZSBzYW1lIHRoaW5nIC0tIGJvdGggYXNrIGZvciAyMSBsaW5lcyBzdGFydGluZyBhdAorbGluZSA0MCk6CisKKwlnaXQgYmxhbWUgLUwgNDAsNjAgZm9vCisJZ2l0IGJsYW1lIC1MIDQwLCsyMSBmb28KKworQWxzbyB5b3UgY2FuIHVzZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzcGVjaWZ5IHRoZSBsaW5lIHJhbmdlOgorCisJZ2l0IGJsYW1lIC1MICcvXnN1YiBoZWxsbyB7LywvXn0kLycgZm9vCisKK3doaWNoIGxpbWl0cyB0aGUgYW5ub3RhdGlvbiB0byB0aGUgYm9keSBvZiB0aGUgYGhlbGxvYCBzdWJyb3V0aW5lLgorCitXaGVuIHlvdSBhcmUgbm90IGludGVyZXN0ZWQgaW4gY2hhbmdlcyBvbGRlciB0aGFuIHZlcnNpb24KK3YyLjYuMTgsIG9yIGNoYW5nZXMgb2xkZXIgdGhhbiAzIHdlZWtzLCB5b3UgY2FuIHVzZSByZXZpc2lvbgorcmFuZ2Ugc3BlY2lmaWVycyAgc2ltaWxhciB0byAnZ2l0IHJldi1saXN0JzoKKworCWdpdCBibGFtZSB2Mi42LjE4Li4gLS0gZm9vCisJZ2l0IGJsYW1lIC0tc2luY2U9My53ZWVrcyAtLSBmb28KKworV2hlbiByZXZpc2lvbiByYW5nZSBzcGVjaWZpZXJzIGFyZSB1c2VkIHRvIGxpbWl0IHRoZSBhbm5vdGF0aW9uLAorbGluZXMgdGhhdCBoYXZlIG5vdCBjaGFuZ2VkIHNpbmNlIHRoZSByYW5nZSBib3VuZGFyeSAoZWl0aGVyIHRoZQorY29tbWl0IHYyLjYuMTggb3IgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCB0aGF0IGlzIG1vcmUgdGhhbiAzCit3ZWVrcyBvbGQgaW4gdGhlIGFib3ZlIGV4YW1wbGUpIGFyZSBibGFtZWQgZm9yIHRoYXQgcmFuZ2UKK2JvdW5kYXJ5IGNvbW1pdC4KKworQSBwYXJ0aWN1bGFybHkgdXNlZnVsIHdheSBpcyB0byBzZWUgaWYgYW4gYWRkZWQgZmlsZSBoYXMgbGluZXMKK2NyZWF0ZWQgYnkgY29weS1hbmQtcGFzdGUgZnJvbSBleGlzdGluZyBmaWxlcy4gIFNvbWV0aW1lcyB0aGlzCitpbmRpY2F0ZXMgdGhhdCB0aGUgZGV2ZWxvcGVyIHdhcyBiZWluZyBzbG9wcHkgYW5kIGRpZCBub3QKK3JlZmFjdG9yIHRoZSBjb2RlIHByb3Blcmx5LiAgWW91IGNhbiBmaXJzdCBmaW5kIHRoZSBjb21taXQgdGhhdAoraW50cm9kdWNlZCB0aGUgZmlsZSB3aXRoOgorCisJZ2l0IGxvZyAtLWRpZmYtZmlsdGVyPUEgLS1wcmV0dHk9c2hvcnQgLS0gZm9vCisKK2FuZCB0aGVuIGFubm90YXRlIHRoZSBjaGFuZ2UgYmV0d2VlbiB0aGUgY29tbWl0IGFuZCBpdHMKK3BhcmVudHMsIHVzaW5nIGBjb21taXReIWAgbm90YXRpb246CisKKwlnaXQgYmxhbWUgLUMgLUMgLWYgJGNvbW1pdF4hIC0tIGZvbworCisKK0lOQ1JFTUVOVEFMIE9VVFBVVAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gY2FsbGVkIHdpdGggYC0taW5jcmVtZW50YWxgIG9wdGlvbiwgdGhlIGNvbW1hbmQgb3V0cHV0cyB0aGUKK3Jlc3VsdCBhcyBpdCBpcyBidWlsdC4gIFRoZSBvdXRwdXQgZ2VuZXJhbGx5IHdpbGwgdGFsayBhYm91dAorbGluZXMgdG91Y2hlZCBieSBtb3JlIHJlY2VudCBjb21taXRzIGZpcnN0IChpLmUuIHRoZSBsaW5lcyB3aWxsCitiZSBhbm5vdGF0ZWQgb3V0IG9mIG9yZGVyKSBhbmQgaXMgbWVhbnQgdG8gYmUgdXNlZCBieQoraW50ZXJhY3RpdmUgdmlld2Vycy4KKworVGhlIG91dHB1dCBmb3JtYXQgaXMgc2ltaWxhciB0byB0aGUgUG9yY2VsYWluIGZvcm1hdCwgYnV0IGl0Citkb2VzIG5vdCBjb250YWluIHRoZSBhY3R1YWwgbGluZXMgZnJvbSB0aGUgZmlsZSB0aGF0IGlzIGJlaW5nCithbm5vdGF0ZWQuCisKKy4gRWFjaCBibGFtZSBlbnRyeSBhbHdheXMgc3RhcnRzIHdpdGggYSBsaW5lIG9mOgorCisJPDQwLWJ5dGUgaGV4IHNoYTE+IDxzb3VyY2VsaW5lPiA8cmVzdWx0bGluZT4gPG51bV9saW5lcz4KKysKK0xpbmUgbnVtYmVycyBjb3VudCBmcm9tIDEuCisKKy4gVGhlIGZpcnN0IHRpbWUgdGhhdCBhIGNvbW1pdCBzaG93cyB1cCBpbiB0aGUgc3RyZWFtLCBpdCBoYXMgdmFyaW91cworICBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCBpdCBwcmludGVkIG91dCB3aXRoIGEgb25lLXdvcmQgdGFnIGF0IHRoZQorICBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lIGRlc2NyaWJpbmcgdGhlIGV4dHJhIGNvbW1pdCBpbmZvcm1hdGlvbiAoYXV0aG9yLAorICBlbWFpbCwgY29tbWl0dGVyLCBkYXRlcywgc3VtbWFyeSwgZXRjLikuCisKKy4gVW5saWtlIHRoZSBQb3JjZWxhaW4gZm9ybWF0LCB0aGUgZmlsZW5hbWUgaW5mb3JtYXRpb24gaXMgYWx3YXlzCisgIGdpdmVuIGFuZCB0ZXJtaW5hdGVzIHRoZSBlbnRyeToKKworCSJmaWxlbmFtZSIgPHdoaXRlc3BhY2UtcXVvdGVkLWZpbGVuYW1lLWdvZXMtaGVyZT4KKysKK2FuZCB0aHVzIGl0IGlzIHJlYWxseSBxdWl0ZSBlYXN5IHRvIHBhcnNlIGZvciBzb21lIGxpbmUtIGFuZCB3b3JkLW9yaWVudGVkCitwYXJzZXIgKHdoaWNoIHNob3VsZCBiZSBxdWl0ZSBuYXR1cmFsIGZvciBtb3N0IHNjcmlwdGluZyBsYW5ndWFnZXMpLgorKworW05PVEVdCitGb3IgcGVvcGxlIHdobyBkbyBwYXJzaW5nOiB0byBtYWtlIGl0IG1vcmUgcm9idXN0LCBqdXN0IGlnbm9yZSBhbnkKK2xpbmVzIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBsYXN0IG9uZSAoIjxzaGExPiIgYW5kICJmaWxlbmFtZSIgbGluZXMpCit3aGVyZSB5b3UgZG8gbm90IHJlY29nbml6ZSB0aGUgdGFnIHdvcmRzIChvciBjYXJlIGFib3V0IHRoYXQgcGFydGljdWxhcgorb25lKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAiZXh0ZW5kZWQgaW5mb3JtYXRpb24iIGxpbmVzLiBUaGF0IHdheSwgaWYKK3RoZXJlIGlzIGV2ZXIgYWRkZWQgaW5mb3JtYXRpb24gKGxpa2UgdGhlIGNvbW1pdCBlbmNvZGluZyBvciBleHRlbmRlZAorY29tbWl0IGNvbW1lbnRhcnkpLCBhIGJsYW1lIHZpZXdlciB3aWxsIG5vdCBjYXJlLgorCisKK01BUFBJTkcgQVVUSE9SUworLS0tLS0tLS0tLS0tLS0tCisKK2luY2x1ZGU6Om1haWxtYXAudHh0W10KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWFubm90YXRlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtYnJhbmNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3MDM3ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWJyYW5jaC50eHQKQEAgLTAsMCArMSwzMTAgQEAKK2dpdC1icmFuY2goMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWJyYW5jaCAtIExpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBicmFuY2gnIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy1yIHwgLWFdCisJWy0tbGlzdF0gWy12IFstLWFiYnJldj08bGVuZ3RoPiB8IC0tbm8tYWJicmV2XV0KKwlbLS1jb2x1bW5bPTxvcHRpb25zPl0gfCAtLW5vLWNvbHVtbl0KKwlbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQgfCAtLWNvbnRhaW5zKSBbPGNvbW1pdD5dXSBbLS1zb3J0PTxrZXk+XQorCVstLXBvaW50cy1hdCA8b2JqZWN0Pl0gWzxwYXR0ZXJuPi4uLl0KKydnaXQgYnJhbmNoJyBbLS1zZXQtdXBzdHJlYW0gfCAtLXRyYWNrIHwgLS1uby10cmFja10gWy1sXSBbLWZdIDxicmFuY2huYW1lPiBbPHN0YXJ0LXBvaW50Pl0KKydnaXQgYnJhbmNoJyAoLS1zZXQtdXBzdHJlYW0tdG89PHVwc3RyZWFtPiB8IC11IDx1cHN0cmVhbT4pIFs8YnJhbmNobmFtZT5dCisnZ2l0IGJyYW5jaCcgLS11bnNldC11cHN0cmVhbSBbPGJyYW5jaG5hbWU+XQorJ2dpdCBicmFuY2gnICgtbSB8IC1NKSBbPG9sZGJyYW5jaD5dIDxuZXdicmFuY2g+CisnZ2l0IGJyYW5jaCcgKC1kIHwgLUQpIFstcl0gPGJyYW5jaG5hbWU+Li4uCisnZ2l0IGJyYW5jaCcgLS1lZGl0LWRlc2NyaXB0aW9uIFs8YnJhbmNobmFtZT5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitJZiBgLS1saXN0YCBpcyBnaXZlbiwgb3IgaWYgdGhlcmUgYXJlIG5vIG5vbi1vcHRpb24gYXJndW1lbnRzLCBleGlzdGluZworYnJhbmNoZXMgYXJlIGxpc3RlZDsgdGhlIGN1cnJlbnQgYnJhbmNoIHdpbGwgYmUgaGlnaGxpZ2h0ZWQgd2l0aCBhbgorYXN0ZXJpc2suICBPcHRpb24gYC1yYCBjYXVzZXMgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyB0byBiZSBsaXN0ZWQsCithbmQgb3B0aW9uIGAtYWAgc2hvd3MgYm90aCBsb2NhbCBhbmQgcmVtb3RlIGJyYW5jaGVzLiBJZiBhIGA8cGF0dGVybj5gCitpcyBnaXZlbiwgaXQgaXMgdXNlZCBhcyBhIHNoZWxsIHdpbGRjYXJkIHRvIHJlc3RyaWN0IHRoZSBvdXRwdXQgdG8KK21hdGNoaW5nIGJyYW5jaGVzLiBJZiBtdWx0aXBsZSBwYXR0ZXJucyBhcmUgZ2l2ZW4sIGEgYnJhbmNoIGlzIHNob3duIGlmCitpdCBtYXRjaGVzIGFueSBvZiB0aGUgcGF0dGVybnMuICBOb3RlIHRoYXQgd2hlbiBwcm92aWRpbmcgYQorYDxwYXR0ZXJuPmAsIHlvdSBtdXN0IHVzZSBgLS1saXN0YDsgb3RoZXJ3aXNlIHRoZSBjb21tYW5kIGlzIGludGVycHJldGVkCithcyBicmFuY2ggY3JlYXRpb24uCisKK1dpdGggYC0tY29udGFpbnNgLCBzaG93cyBvbmx5IHRoZSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIG5hbWVkIGNvbW1pdAorKGluIG90aGVyIHdvcmRzLCB0aGUgYnJhbmNoZXMgd2hvc2UgdGlwIGNvbW1pdHMgYXJlIGRlc2NlbmRhbnRzIG9mIHRoZQorbmFtZWQgY29tbWl0KS4gIFdpdGggYC0tbWVyZ2VkYCwgb25seSBicmFuY2hlcyBtZXJnZWQgaW50byB0aGUgbmFtZWQKK2NvbW1pdCAoaS5lLiB0aGUgYnJhbmNoZXMgd2hvc2UgdGlwIGNvbW1pdHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSBuYW1lZAorY29tbWl0KSB3aWxsIGJlIGxpc3RlZC4gIFdpdGggYC0tbm8tbWVyZ2VkYCBvbmx5IGJyYW5jaGVzIG5vdCBtZXJnZWQgaW50bwordGhlIG5hbWVkIGNvbW1pdCB3aWxsIGJlIGxpc3RlZC4gIElmIHRoZSA8Y29tbWl0PiBhcmd1bWVudCBpcyBtaXNzaW5nIGl0CitkZWZhdWx0cyB0byAnSEVBRCcgKGkuZS4gdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2gpLgorCitUaGUgY29tbWFuZCdzIHNlY29uZCBmb3JtIGNyZWF0ZXMgYSBuZXcgYnJhbmNoIGhlYWQgbmFtZWQgPGJyYW5jaG5hbWU+Cit3aGljaCBwb2ludHMgdG8gdGhlIGN1cnJlbnQgJ0hFQUQnLCBvciA8c3RhcnQtcG9pbnQ+IGlmIGdpdmVuLgorCitOb3RlIHRoYXQgdGhpcyB3aWxsIGNyZWF0ZSB0aGUgbmV3IGJyYW5jaCwgYnV0IGl0IHdpbGwgbm90IHN3aXRjaCB0aGUKK3dvcmtpbmcgdHJlZSB0byBpdDsgdXNlICJnaXQgY2hlY2tvdXQgPG5ld2JyYW5jaD4iIHRvIHN3aXRjaCB0byB0aGUKK25ldyBicmFuY2guCisKK1doZW4gYSBsb2NhbCBicmFuY2ggaXMgc3RhcnRlZCBvZmYgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCBHaXQgc2V0cyB1cCB0aGUKK2JyYW5jaCAoc3BlY2lmaWNhbGx5IHRoZSBgYnJhbmNoLjxuYW1lPi5yZW1vdGVgIGFuZCBgYnJhbmNoLjxuYW1lPi5tZXJnZWAKK2NvbmZpZ3VyYXRpb24gZW50cmllcykgc28gdGhhdCAnZ2l0IHB1bGwnIHdpbGwgYXBwcm9wcmlhdGVseSBtZXJnZSBmcm9tCit0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4gVGhpcyBiZWhhdmlvciBtYXkgYmUgY2hhbmdlZCB2aWEgdGhlIGdsb2JhbAorYGJyYW5jaC5hdXRvU2V0dXBNZXJnZWAgY29uZmlndXJhdGlvbiBmbGFnLiBUaGF0IHNldHRpbmcgY2FuIGJlCitvdmVycmlkZGVuIGJ5IHVzaW5nIHRoZSBgLS10cmFja2AgYW5kIGAtLW5vLXRyYWNrYCBvcHRpb25zLCBhbmQKK2NoYW5nZWQgbGF0ZXIgdXNpbmcgYGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG9gLgorCitXaXRoIGEgYC1tYCBvciBgLU1gIG9wdGlvbiwgPG9sZGJyYW5jaD4gd2lsbCBiZSByZW5hbWVkIHRvIDxuZXdicmFuY2g+LgorSWYgPG9sZGJyYW5jaD4gaGFkIGEgY29ycmVzcG9uZGluZyByZWZsb2csIGl0IGlzIHJlbmFtZWQgdG8gbWF0Y2gKKzxuZXdicmFuY2g+LCBhbmQgYSByZWZsb2cgZW50cnkgaXMgY3JlYXRlZCB0byByZW1lbWJlciB0aGUgYnJhbmNoCityZW5hbWluZy4gSWYgPG5ld2JyYW5jaD4gZXhpc3RzLCAtTSBtdXN0IGJlIHVzZWQgdG8gZm9yY2UgdGhlIHJlbmFtZQordG8gaGFwcGVuLgorCitXaXRoIGEgYC1kYCBvciBgLURgIG9wdGlvbiwgYDxicmFuY2huYW1lPmAgd2lsbCBiZSBkZWxldGVkLiAgWW91IG1heQorc3BlY2lmeSBtb3JlIHRoYW4gb25lIGJyYW5jaCBmb3IgZGVsZXRpb24uICBJZiB0aGUgYnJhbmNoIGN1cnJlbnRseQoraGFzIGEgcmVmbG9nIHRoZW4gdGhlIHJlZmxvZyB3aWxsIGFsc28gYmUgZGVsZXRlZC4KKworVXNlIGAtcmAgdG9nZXRoZXIgd2l0aCBgLWRgIHRvIGRlbGV0ZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuIE5vdGUsIHRoYXQgaXQKK29ubHkgbWFrZXMgc2Vuc2UgdG8gZGVsZXRlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBpZiB0aGV5IG5vIGxvbmdlciBleGlzdAoraW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IG9yIGlmICdnaXQgZmV0Y2gnIHdhcyBjb25maWd1cmVkIG5vdCB0byBmZXRjaAordGhlbSBhZ2Fpbi4gU2VlIGFsc28gdGhlICdwcnVuZScgc3ViY29tbWFuZCBvZiBsaW5rZ2l0OmdpdC1yZW1vdGVbMV0gZm9yIGEKK3dheSB0byBjbGVhbiB1cCBhbGwgb2Jzb2xldGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1kOjoKKy0tZGVsZXRlOjoKKwlEZWxldGUgYSBicmFuY2guIFRoZSBicmFuY2ggbXVzdCBiZSBmdWxseSBtZXJnZWQgaW4gaXRzCisJdXBzdHJlYW0gYnJhbmNoLCBvciBpbiBgSEVBRGAgaWYgbm8gdXBzdHJlYW0gd2FzIHNldCB3aXRoCisJYC0tdHJhY2tgIG9yIGAtLXNldC11cHN0cmVhbWAuCisKKy1EOjoKKwlTaG9ydGN1dCBmb3IgYC0tZGVsZXRlIC0tZm9yY2VgLgorCistbDo6CistLWNyZWF0ZS1yZWZsb2c6OgorCUNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nLiAgVGhpcyBhY3RpdmF0ZXMgcmVjb3JkaW5nIG9mCisJYWxsIGNoYW5nZXMgbWFkZSB0byB0aGUgYnJhbmNoIHJlZiwgZW5hYmxpbmcgdXNlIG9mIGRhdGUKKwliYXNlZCBzaGExIGV4cHJlc3Npb25zIHN1Y2ggYXMgIjxicmFuY2huYW1lPkBce3llc3RlcmRheX0iLgorCU5vdGUgdGhhdCBpbiBub24tYmFyZSByZXBvc2l0b3JpZXMsIHJlZmxvZ3MgYXJlIHVzdWFsbHkKKwllbmFibGVkIGJ5IGRlZmF1bHQgYnkgdGhlIGBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXNgIGNvbmZpZyBvcHRpb24uCisKKy1mOjoKKy0tZm9yY2U6OgorCVJlc2V0IDxicmFuY2huYW1lPiB0byA8c3RhcnRwb2ludD4gaWYgPGJyYW5jaG5hbWU+IGV4aXN0cworCWFscmVhZHkuIFdpdGhvdXQgYC1mYCAnZ2l0IGJyYW5jaCcgcmVmdXNlcyB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgYnJhbmNoLgorCUluIGNvbWJpbmF0aW9uIHdpdGggYC1kYCAob3IgYC0tZGVsZXRlYCksIGFsbG93IGRlbGV0aW5nIHRoZQorCWJyYW5jaCBpcnJlc3BlY3RpdmUgb2YgaXRzIG1lcmdlZCBzdGF0dXMuIEluIGNvbWJpbmF0aW9uIHdpdGgKKwlgLW1gIChvciBgLS1tb3ZlYCksIGFsbG93IHJlbmFtaW5nIHRoZSBicmFuY2ggZXZlbiBpZiB0aGUgbmV3CisJYnJhbmNoIG5hbWUgYWxyZWFkeSBleGlzdHMuCisKKy1tOjoKKy0tbW92ZTo6CisJTW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlZmxvZy4KKworLU06OgorCVNob3J0Y3V0IGZvciBgLS1tb3ZlIC0tZm9yY2VgLgorCistLWNvbG9yWz08d2hlbj5dOjoKKwlDb2xvciBicmFuY2hlcyB0byBoaWdobGlnaHQgY3VycmVudCwgbG9jYWwsIGFuZAorCXJlbW90ZS10cmFja2luZyBicmFuY2hlcy4KKwlUaGUgdmFsdWUgbXVzdCBiZSBhbHdheXMgKHRoZSBkZWZhdWx0KSwgbmV2ZXIsIG9yIGF1dG8uCisKKy0tbm8tY29sb3I6OgorCVR1cm4gb2ZmIGJyYW5jaCBjb2xvcnMsIGV2ZW4gd2hlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGdpdmVzIHRoZQorCWRlZmF1bHQgdG8gY29sb3Igb3V0cHV0LgorCVNhbWUgYXMgYC0tY29sb3I9bmV2ZXJgLgorCistLWNvbHVtbls9PG9wdGlvbnM+XTo6CistLW5vLWNvbHVtbjo6CisJRGlzcGxheSBicmFuY2ggbGlzdGluZyBpbiBjb2x1bW5zLiBTZWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCWNvbHVtbi5icmFuY2ggZm9yIG9wdGlvbiBzeW50YXguYC0tY29sdW1uYCBhbmQgYC0tbm8tY29sdW1uYAorCXdpdGhvdXQgb3B0aW9ucyBhcmUgZXF1aXZhbGVudCB0byAnYWx3YXlzJyBhbmQgJ25ldmVyJyByZXNwZWN0aXZlbHkuCisrCitUaGlzIG9wdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgaW4gbm9uLXZlcmJvc2UgbW9kZS4KKworLXI6OgorLS1yZW1vdGVzOjoKKwlMaXN0IG9yIGRlbGV0ZSAoaWYgdXNlZCB3aXRoIC1kKSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLgorCistYTo6CistLWFsbDo6CisJTGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBhbmQgbG9jYWwgYnJhbmNoZXMuCisKKy0tbGlzdDo6CisJQWN0aXZhdGUgdGhlIGxpc3QgbW9kZS4gYGdpdCBicmFuY2ggPHBhdHRlcm4+YCB3b3VsZCB0cnkgdG8gY3JlYXRlIGEgYnJhbmNoLAorCXVzZSBgZ2l0IGJyYW5jaCAtLWxpc3QgPHBhdHRlcm4+YCB0byBsaXN0IG1hdGNoaW5nIGJyYW5jaGVzLgorCistdjo6CistdnY6OgorLS12ZXJib3NlOjoKKwlXaGVuIGluIGxpc3QgbW9kZSwKKwlzaG93IHNoYTEgYW5kIGNvbW1pdCBzdWJqZWN0IGxpbmUgZm9yIGVhY2ggaGVhZCwgYWxvbmcgd2l0aAorCXJlbGF0aW9uc2hpcCB0byB1cHN0cmVhbSBicmFuY2ggKGlmIGFueSkuIElmIGdpdmVuIHR3aWNlLCBwcmludAorCXRoZSBuYW1lIG9mIHRoZSB1cHN0cmVhbSBicmFuY2gsIGFzIHdlbGwgKHNlZSBhbHNvIGBnaXQgcmVtb3RlCisJc2hvdyA8cmVtb3RlPmApLgorCistcTo6CistLXF1aWV0OjoKKwlCZSBtb3JlIHF1aWV0IHdoZW4gY3JlYXRpbmcgb3IgZGVsZXRpbmcgYSBicmFuY2gsIHN1cHByZXNzaW5nCisJbm9uLWVycm9yIG1lc3NhZ2VzLgorCistLWFiYnJldj08bGVuZ3RoPjo6CisJQWx0ZXIgdGhlIHNoYTEncyBtaW5pbXVtIGRpc3BsYXkgbGVuZ3RoIGluIHRoZSBvdXRwdXQgbGlzdGluZy4KKwlUaGUgZGVmYXVsdCB2YWx1ZSBpcyA3IGFuZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYGNvcmUuYWJicmV2YAorCWNvbmZpZyBvcHRpb24uCisKKy0tbm8tYWJicmV2OjoKKwlEaXNwbGF5IHRoZSBmdWxsIHNoYTFzIGluIHRoZSBvdXRwdXQgbGlzdGluZyByYXRoZXIgdGhhbiBhYmJyZXZpYXRpbmcgdGhlbS4KKworLXQ6OgorLS10cmFjazo6CisJV2hlbiBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHNldCB1cCBgYnJhbmNoLjxuYW1lPi5yZW1vdGVgIGFuZAorCWBicmFuY2guPG5hbWU+Lm1lcmdlYCBjb25maWd1cmF0aW9uIGVudHJpZXMgdG8gbWFyayB0aGUKKwlzdGFydC1wb2ludCBicmFuY2ggYXMgInVwc3RyZWFtIiBmcm9tIHRoZSBuZXcgYnJhbmNoLiBUaGlzCisJY29uZmlndXJhdGlvbiB3aWxsIHRlbGwgZ2l0IHRvIHNob3cgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZQorCXR3byBicmFuY2hlcyBpbiBgZ2l0IHN0YXR1c2AgYW5kIGBnaXQgYnJhbmNoIC12YC4gRnVydGhlcm1vcmUsCisJaXQgZGlyZWN0cyBgZ2l0IHB1bGxgIHdpdGhvdXQgYXJndW1lbnRzIHRvIHB1bGwgZnJvbSB0aGUKKwl1cHN0cmVhbSB3aGVuIHRoZSBuZXcgYnJhbmNoIGlzIGNoZWNrZWQgb3V0LgorKworVGhpcyBiZWhhdmlvciBpcyB0aGUgZGVmYXVsdCB3aGVuIHRoZSBzdGFydCBwb2ludCBpcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2guCitTZXQgdGhlIGJyYW5jaC5hdXRvU2V0dXBNZXJnZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIGBmYWxzZWAgaWYgeW91Cit3YW50IGBnaXQgY2hlY2tvdXRgIGFuZCBgZ2l0IGJyYW5jaGAgdG8gYWx3YXlzIGJlaGF2ZSBhcyBpZiAnLS1uby10cmFjaycKK3dlcmUgZ2l2ZW4uIFNldCBpdCB0byBgYWx3YXlzYCBpZiB5b3Ugd2FudCB0aGlzIGJlaGF2aW9yIHdoZW4gdGhlCitzdGFydC1wb2ludCBpcyBlaXRoZXIgYSBsb2NhbCBvciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLgorCistLW5vLXRyYWNrOjoKKwlEbyBub3Qgc2V0IHVwICJ1cHN0cmVhbSIgY29uZmlndXJhdGlvbiwgZXZlbiBpZiB0aGUKKwlicmFuY2guYXV0b1NldHVwTWVyZ2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyB0cnVlLgorCistLXNldC11cHN0cmVhbTo6CisJSWYgc3BlY2lmaWVkIGJyYW5jaCBkb2VzIG5vdCBleGlzdCB5ZXQgb3IgaWYgYC0tZm9yY2VgIGhhcyBiZWVuCisJZ2l2ZW4sIGFjdHMgZXhhY3RseSBsaWtlIGAtLXRyYWNrYC4gT3RoZXJ3aXNlIHNldHMgdXAgY29uZmlndXJhdGlvbgorCWxpa2UgYC0tdHJhY2tgIHdvdWxkIHdoZW4gY3JlYXRpbmcgdGhlIGJyYW5jaCwgZXhjZXB0IHRoYXQgd2hlcmUKKwlicmFuY2ggcG9pbnRzIHRvIGlzIG5vdCBjaGFuZ2VkLgorCistdSA8dXBzdHJlYW0+OjoKKy0tc2V0LXVwc3RyZWFtLXRvPTx1cHN0cmVhbT46OgorCVNldCB1cCA8YnJhbmNobmFtZT4ncyB0cmFja2luZyBpbmZvcm1hdGlvbiBzbyA8dXBzdHJlYW0+IGlzCisJY29uc2lkZXJlZCA8YnJhbmNobmFtZT4ncyB1cHN0cmVhbSBicmFuY2guIElmIG5vIDxicmFuY2huYW1lPgorCWlzIHNwZWNpZmllZCwgdGhlbiBpdCBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2guCisKKy0tdW5zZXQtdXBzdHJlYW06OgorCVJlbW92ZSB0aGUgdXBzdHJlYW0gaW5mb3JtYXRpb24gZm9yIDxicmFuY2huYW1lPi4gSWYgbm8gYnJhbmNoCisJaXMgc3BlY2lmaWVkIGl0IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaC4KKworLS1lZGl0LWRlc2NyaXB0aW9uOjoKKwlPcGVuIGFuIGVkaXRvciBhbmQgZWRpdCB0aGUgdGV4dCB0byBleHBsYWluIHdoYXQgdGhlIGJyYW5jaCBpcworCWZvciwgdG8gYmUgdXNlZCBieSB2YXJpb3VzIG90aGVyIGNvbW1hbmRzIChlLmcuIGBmb3JtYXQtcGF0Y2hgLAorCWByZXF1ZXN0LXB1bGxgLCBhbmQgYG1lcmdlYCAoaWYgZW5hYmxlZCkpLiBNdWx0aS1saW5lIGV4cGxhbmF0aW9ucworCW1heSBiZSB1c2VkLgorCistLWNvbnRhaW5zIFs8Y29tbWl0Pl06OgorCU9ubHkgbGlzdCBicmFuY2hlcyB3aGljaCBjb250YWluIHRoZSBzcGVjaWZpZWQgY29tbWl0IChIRUFECisJaWYgbm90IHNwZWNpZmllZCkuIEltcGxpZXMgYC0tbGlzdGAuCisKKy0tbWVyZ2VkIFs8Y29tbWl0Pl06OgorCU9ubHkgbGlzdCBicmFuY2hlcyB3aG9zZSB0aXBzIGFyZSByZWFjaGFibGUgZnJvbSB0aGUKKwlzcGVjaWZpZWQgY29tbWl0IChIRUFEIGlmIG5vdCBzcGVjaWZpZWQpLiBJbXBsaWVzIGAtLWxpc3RgLgorCistLW5vLW1lcmdlZCBbPGNvbW1pdD5dOjoKKwlPbmx5IGxpc3QgYnJhbmNoZXMgd2hvc2UgdGlwcyBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIHRoZQorCXNwZWNpZmllZCBjb21taXQgKEhFQUQgaWYgbm90IHNwZWNpZmllZCkuIEltcGxpZXMgYC0tbGlzdGAuCisKKzxicmFuY2huYW1lPjo6CisJVGhlIG5hbWUgb2YgdGhlIGJyYW5jaCB0byBjcmVhdGUgb3IgZGVsZXRlLgorCVRoZSBuZXcgYnJhbmNoIG5hbWUgbXVzdCBwYXNzIGFsbCBjaGVja3MgZGVmaW5lZCBieQorCWxpbmtnaXQ6Z2l0LWNoZWNrLXJlZi1mb3JtYXRbMV0uICBTb21lIG9mIHRoZXNlIGNoZWNrcworCW1heSByZXN0cmljdCB0aGUgY2hhcmFjdGVycyBhbGxvd2VkIGluIGEgYnJhbmNoIG5hbWUuCisKKzxzdGFydC1wb2ludD46OgorCVRoZSBuZXcgYnJhbmNoIGhlYWQgd2lsbCBwb2ludCB0byB0aGlzIGNvbW1pdC4gIEl0IG1heSBiZQorCWdpdmVuIGFzIGEgYnJhbmNoIG5hbWUsIGEgY29tbWl0LWlkLCBvciBhIHRhZy4gIElmIHRoaXMKKwlvcHRpb24gaXMgb21pdHRlZCwgdGhlIGN1cnJlbnQgSEVBRCB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKworPG9sZGJyYW5jaD46OgorCVRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGJyYW5jaCB0byByZW5hbWUuCisKKzxuZXdicmFuY2g+OjoKKwlUaGUgbmV3IG5hbWUgZm9yIGFuIGV4aXN0aW5nIGJyYW5jaC4gVGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIGZvcgorCTxicmFuY2huYW1lPiBhcHBseS4KKworLS1zb3J0PTxrZXk+OjoKKwlTb3J0IGJhc2VkIG9uIHRoZSBrZXkgZ2l2ZW4uIFByZWZpeCBgLWAgdG8gc29ydCBpbiBkZXNjZW5kaW5nCisJb3JkZXIgb2YgdGhlIHZhbHVlLiBZb3UgbWF5IHVzZSB0aGUgLS1zb3J0PTxrZXk+IG9wdGlvbgorCW11bHRpcGxlIHRpbWVzLCBpbiB3aGljaCBjYXNlIHRoZSBsYXN0IGtleSBiZWNvbWVzIHRoZSBwcmltYXJ5CisJa2V5LiBUaGUga2V5cyBzdXBwb3J0ZWQgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGluIGBnaXQKKwlmb3ItZWFjaC1yZWZgLiBTb3J0IG9yZGVyIGRlZmF1bHRzIHRvIHNvcnRpbmcgYmFzZWQgb24gdGhlCisJZnVsbCByZWZuYW1lIChpbmNsdWRpbmcgYHJlZnMvLi4uYCBwcmVmaXgpLiBUaGlzIGxpc3RzCisJZGV0YWNoZWQgSEVBRCAoaWYgcHJlc2VudCkgZmlyc3QsIHRoZW4gbG9jYWwgYnJhbmNoZXMgYW5kCisJZmluYWxseSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisKKworLS1wb2ludHMtYXQgPG9iamVjdD46OgorCU9ubHkgbGlzdCBicmFuY2hlcyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgorCitFeGFtcGxlcworLS0tLS0tLS0KKworU3RhcnQgZGV2ZWxvcG1lbnQgZnJvbSBhIGtub3duIHRhZzo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vLi4uL2xpbnV4LTIuNiBteTIuNgorJCBjZCBteTIuNgorJCBnaXQgYnJhbmNoIG15Mi42LjE0IHYyLjYuMTQgICA8MT4KKyQgZ2l0IGNoZWNrb3V0IG15Mi42LjE0CistLS0tLS0tLS0tLS0KKysKKzwxPiBUaGlzIHN0ZXAgYW5kIHRoZSBuZXh0IG9uZSBjb3VsZCBiZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIHN0ZXAgd2l0aAorImNoZWNrb3V0IC1iIG15Mi42LjE0IHYyLjYuMTQiLgorCitEZWxldGUgYW4gdW5uZWVkZWQgYnJhbmNoOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvLi4uL2dpdC5naXQgbXkuZ2l0CiskIGNkIG15LmdpdAorJCBnaXQgYnJhbmNoIC1kIC1yIG9yaWdpbi90b2RvIG9yaWdpbi9odG1sIG9yaWdpbi9tYW4gICA8MT4KKyQgZ2l0IGJyYW5jaCAtRCB0ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDI+CistLS0tLS0tLS0tLS0KKysKKzwxPiBEZWxldGUgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyAidG9kbyIsICJodG1sIiBhbmQgIm1hbiIuIFRoZSBuZXh0CisnZmV0Y2gnIG9yICdwdWxsJyB3aWxsIGNyZWF0ZSB0aGVtIGFnYWluIHVubGVzcyB5b3UgY29uZmlndXJlIHRoZW0gbm90IHRvLgorU2VlIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLgorPDI+IERlbGV0ZSB0aGUgInRlc3QiIGJyYW5jaCBldmVuIGlmIHRoZSAibWFzdGVyIiBicmFuY2ggKG9yIHdoaWNoZXZlciBicmFuY2gKK2lzIGN1cnJlbnRseSBjaGVja2VkIG91dCkgZG9lcyBub3QgaGF2ZSBhbGwgY29tbWl0cyBmcm9tIHRoZSB0ZXN0IGJyYW5jaC4KKworCitOb3RlcworLS0tLS0KKworSWYgeW91IGFyZSBjcmVhdGluZyBhIGJyYW5jaCB0aGF0IHlvdSB3YW50IHRvIGNoZWNrb3V0IGltbWVkaWF0ZWx5LCBpdCBpcworZWFzaWVyIHRvIHVzZSB0aGUgZ2l0IGNoZWNrb3V0IGNvbW1hbmQgd2l0aCBpdHMgYC1iYCBvcHRpb24gdG8gY3JlYXRlCithIGJyYW5jaCBhbmQgY2hlY2sgaXQgb3V0IHdpdGggYSBzaW5nbGUgY29tbWFuZC4KKworVGhlIG9wdGlvbnMgYC0tY29udGFpbnNgLCBgLS1tZXJnZWRgIGFuZCBgLS1uby1tZXJnZWRgIHNlcnZlIHRocmVlIHJlbGF0ZWQKK2J1dCBkaWZmZXJlbnQgcHVycG9zZXM6CisKKy0gYC0tY29udGFpbnMgPGNvbW1pdD5gIGlzIHVzZWQgdG8gZmluZCBhbGwgYnJhbmNoZXMgd2hpY2ggd2lsbCBuZWVkCisgIHNwZWNpYWwgYXR0ZW50aW9uIGlmIDxjb21taXQ+IHdlcmUgdG8gYmUgcmViYXNlZCBvciBhbWVuZGVkLCBzaW5jZSB0aG9zZQorICBicmFuY2hlcyBjb250YWluIHRoZSBzcGVjaWZpZWQgPGNvbW1pdD4uCisKKy0gYC0tbWVyZ2VkYCBpcyB1c2VkIHRvIGZpbmQgYWxsIGJyYW5jaGVzIHdoaWNoIGNhbiBiZSBzYWZlbHkgZGVsZXRlZCwKKyAgc2luY2UgdGhvc2UgYnJhbmNoZXMgYXJlIGZ1bGx5IGNvbnRhaW5lZCBieSBIRUFELgorCistIGAtLW5vLW1lcmdlZGAgaXMgdXNlZCB0byBmaW5kIGJyYW5jaGVzIHdoaWNoIGFyZSBjYW5kaWRhdGVzIGZvciBtZXJnaW5nCisgIGludG8gSEVBRCwgc2luY2UgdGhvc2UgYnJhbmNoZXMgYXJlIG5vdCBmdWxseSBjb250YWluZWQgYnkgSEVBRC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jaGVjay1yZWYtZm9ybWF0WzFdLAorbGlua2dpdDpnaXQtZmV0Y2hbMV0sCitsaW5rZ2l0OmdpdC1yZW1vdGVbMV0sCitsaW5rOnVzZXItbWFudWFsLmh0bWwjd2hhdC1pcy1hLWJyYW5jaFtgYFVuZGVyc3RhbmRpbmcgaGlzdG9yeTogV2hhdCBpcworYSBicmFuY2g/JyddIGluIHRoZSBHaXQgVXNlcidzIE1hbnVhbC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1idW5kbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDE3NTYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtYnVuZGxlLnR4dApAQCAtMCwwICsxLDIwNSBAQAorZ2l0LWJ1bmRsZSgxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtYnVuZGxlIC0gTW92ZSBvYmplY3RzIGFuZCByZWZzIGJ5IGFyY2hpdmUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgYnVuZGxlJyBjcmVhdGUgPGZpbGU+IDxnaXQtcmV2LWxpc3QtYXJncz4KKydnaXQgYnVuZGxlJyB2ZXJpZnkgPGZpbGU+CisnZ2l0IGJ1bmRsZScgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0KKydnaXQgYnVuZGxlJyB1bmJ1bmRsZSA8ZmlsZT4gWzxyZWZuYW1lPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1NvbWUgd29ya2Zsb3dzIHJlcXVpcmUgdGhhdCBvbmUgb3IgbW9yZSBicmFuY2hlcyBvZiBkZXZlbG9wbWVudCBvbiBvbmUKK21hY2hpbmUgYmUgcmVwbGljYXRlZCBvbiBhbm90aGVyIG1hY2hpbmUsIGJ1dCB0aGUgdHdvIG1hY2hpbmVzIGNhbm5vdAorYmUgZGlyZWN0bHkgY29ubmVjdGVkLCBhbmQgdGhlcmVmb3JlIHRoZSBpbnRlcmFjdGl2ZSBHaXQgcHJvdG9jb2xzIChnaXQsCitzc2gsIHJzeW5jLCBodHRwKSBjYW5ub3QgYmUgdXNlZC4gIFRoaXMgY29tbWFuZCBwcm92aWRlcyBzdXBwb3J0IGZvcgorJ2dpdCBmZXRjaCcgYW5kICdnaXQgcHVsbCcgdG8gb3BlcmF0ZSBieSBwYWNrYWdpbmcgb2JqZWN0cyBhbmQgcmVmZXJlbmNlcworaW4gYW4gYXJjaGl2ZSBhdCB0aGUgb3JpZ2luYXRpbmcgbWFjaGluZSwgdGhlbiBpbXBvcnRpbmcgdGhvc2UgaW50bworYW5vdGhlciByZXBvc2l0b3J5IHVzaW5nICdnaXQgZmV0Y2gnIGFuZCAnZ2l0IHB1bGwnCithZnRlciBtb3ZpbmcgdGhlIGFyY2hpdmUgYnkgc29tZSBtZWFucyAoZS5nLiwgYnkgc25lYWtlcm5ldCkuICBBcyBubworZGlyZWN0IGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgcmVwb3NpdG9yaWVzIGV4aXN0cywgdGhlIHVzZXIgbXVzdCBzcGVjaWZ5IGEKK2Jhc2lzIGZvciB0aGUgYnVuZGxlIHRoYXQgaXMgaGVsZCBieSB0aGUgZGVzdGluYXRpb24gcmVwb3NpdG9yeTogdGhlCitidW5kbGUgYXNzdW1lcyB0aGF0IGFsbCBvYmplY3RzIGluIHRoZSBiYXNpcyBhcmUgYWxyZWFkeSBpbiB0aGUKK2Rlc3RpbmF0aW9uIHJlcG9zaXRvcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKworY3JlYXRlIDxmaWxlPjo6CisJVXNlZCB0byBjcmVhdGUgYSBidW5kbGUgbmFtZWQgJ2ZpbGUnLiAgVGhpcyByZXF1aXJlcyB0aGUKKwknZ2l0LXJldi1saXN0LWFyZ3MnIGFyZ3VtZW50cyB0byBkZWZpbmUgdGhlIGJ1bmRsZSBjb250ZW50cy4KKwordmVyaWZ5IDxmaWxlPjo6CisJVXNlZCB0byBjaGVjayB0aGF0IGEgYnVuZGxlIGZpbGUgaXMgdmFsaWQgYW5kIHdpbGwgYXBwbHkKKwljbGVhbmx5IHRvIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuICBUaGlzIGluY2x1ZGVzIGNoZWNrcyBvbiB0aGUKKwlidW5kbGUgZm9ybWF0IGl0c2VsZiBhcyB3ZWxsIGFzIGNoZWNraW5nIHRoYXQgdGhlIHByZXJlcXVpc2l0ZQorCWNvbW1pdHMgZXhpc3QgYW5kIGFyZSBmdWxseSBsaW5rZWQgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4KKwknZ2l0IGJ1bmRsZScgcHJpbnRzIGEgbGlzdCBvZiBtaXNzaW5nIGNvbW1pdHMsIGlmIGFueSwgYW5kIGV4aXRzCisJd2l0aCBhIG5vbi16ZXJvIHN0YXR1cy4KKworbGlzdC1oZWFkcyA8ZmlsZT46OgorCUxpc3RzIHRoZSByZWZlcmVuY2VzIGRlZmluZWQgaW4gdGhlIGJ1bmRsZS4gIElmIGZvbGxvd2VkIGJ5IGEKKwlsaXN0IG9mIHJlZmVyZW5jZXMsIG9ubHkgcmVmZXJlbmNlcyBtYXRjaGluZyB0aG9zZSBnaXZlbiBhcmUKKwlwcmludGVkIG91dC4KKwordW5idW5kbGUgPGZpbGU+OjoKKwlQYXNzZXMgdGhlIG9iamVjdHMgaW4gdGhlIGJ1bmRsZSB0byAnZ2l0IGluZGV4LXBhY2snCisJZm9yIHN0b3JhZ2UgaW4gdGhlIHJlcG9zaXRvcnksIHRoZW4gcHJpbnRzIHRoZSBuYW1lcyBvZiBhbGwKKwlkZWZpbmVkIHJlZmVyZW5jZXMuIElmIGEgbGlzdCBvZiByZWZlcmVuY2VzIGlzIGdpdmVuLCBvbmx5CisJcmVmZXJlbmNlcyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgbGlzdCBhcmUgcHJpbnRlZC4gVGhpcyBjb21tYW5kIGlzCisJcmVhbGx5IHBsdW1iaW5nLCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgb25seSBieSAnZ2l0IGZldGNoJy4KKworPGdpdC1yZXYtbGlzdC1hcmdzPjo6CisJQSBsaXN0IG9mIGFyZ3VtZW50cywgYWNjZXB0YWJsZSB0byAnZ2l0IHJldi1wYXJzZScgYW5kCisJJ2dpdCByZXYtbGlzdCcgKGFuZCBjb250YWluaW5nIGEgbmFtZWQgcmVmLCBzZWUgU1BFQ0lGWUlORyBSRUZFUkVOQ0VTCisJYmVsb3cpLCB0aGF0IHNwZWNpZmllcyB0aGUgc3BlY2lmaWMgb2JqZWN0cyBhbmQgcmVmZXJlbmNlcworCXRvIHRyYW5zcG9ydC4gIEZvciBleGFtcGxlLCBgbWFzdGVyfjEwLi5tYXN0ZXJgIGNhdXNlcyB0aGUKKwljdXJyZW50IG1hc3RlciByZWZlcmVuY2UgdG8gYmUgcGFja2FnZWQgYWxvbmcgd2l0aCBhbGwgb2JqZWN0cworCWFkZGVkIHNpbmNlIGl0cyAxMHRoIGFuY2VzdG9yIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGV4cGxpY2l0CisJbGltaXQgdG8gdGhlIG51bWJlciBvZiByZWZlcmVuY2VzIGFuZCBvYmplY3RzIHRoYXQgbWF5IGJlCisJcGFja2FnZWQuCisKKworWzxyZWZuYW1lPi4uLl06OgorCUEgbGlzdCBvZiByZWZlcmVuY2VzIHVzZWQgdG8gbGltaXQgdGhlIHJlZmVyZW5jZXMgcmVwb3J0ZWQgYXMKKwlhdmFpbGFibGUuIFRoaXMgaXMgcHJpbmNpcGFsbHkgb2YgdXNlIHRvICdnaXQgZmV0Y2gnLCB3aGljaAorCWV4cGVjdHMgdG8gcmVjZWl2ZSBvbmx5IHRob3NlIHJlZmVyZW5jZXMgYXNrZWQgZm9yIGFuZCBub3QKKwluZWNlc3NhcmlseSBldmVyeXRoaW5nIGluIHRoZSBwYWNrIChpbiB0aGlzIGNhc2UsICdnaXQgYnVuZGxlJyBhY3RzCisJbGlrZSAnZ2l0IGZldGNoLXBhY2snKS4KKworU1BFQ0lGWUlORyBSRUZFUkVOQ0VTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJ2dpdCBidW5kbGUnIHdpbGwgb25seSBwYWNrYWdlIHJlZmVyZW5jZXMgdGhhdCBhcmUgc2hvd24gYnkKKydnaXQgc2hvdy1yZWYnOiB0aGlzIGluY2x1ZGVzIGhlYWRzLCB0YWdzLCBhbmQgcmVtb3RlIGhlYWRzLiAgUmVmZXJlbmNlcworc3VjaCBhcyBgbWFzdGVyfjFgIGNhbm5vdCBiZSBwYWNrYWdlZCwgYnV0IGFyZSBwZXJmZWN0bHkgc3VpdGFibGUgZm9yCitkZWZpbmluZyB0aGUgYmFzaXMuICBNb3JlIHRoYW4gb25lIHJlZmVyZW5jZSBtYXkgYmUgcGFja2FnZWQsIGFuZCBtb3JlCit0aGFuIG9uZSBiYXNpcyBjYW4gYmUgc3BlY2lmaWVkLiAgVGhlIG9iamVjdHMgcGFja2FnZWQgYXJlIHRob3NlIG5vdAorY29udGFpbmVkIGluIHRoZSB1bmlvbiBvZiB0aGUgZ2l2ZW4gYmFzZXMuICBFYWNoIGJhc2lzIGNhbiBiZQorc3BlY2lmaWVkIGV4cGxpY2l0bHkgKGUuZy4gYF5tYXN0ZXJ+MTBgKSwgb3IgaW1wbGljaXRseSAoZS5nLgorYG1hc3Rlcn4xMC4ubWFzdGVyYCwgYC0tc2luY2U9MTAuZGF5cy5hZ28gbWFzdGVyYCkuCisKK0l0IGlzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhlIGJhc2lzIHVzZWQgYmUgaGVsZCBieSB0aGUgZGVzdGluYXRpb24uCitJdCBpcyBva2F5IHRvIGVyciBvbiB0aGUgc2lkZSBvZiBjYXV0aW9uLCBjYXVzaW5nIHRoZSBidW5kbGUgZmlsZQordG8gY29udGFpbiBvYmplY3RzIGFscmVhZHkgaW4gdGhlIGRlc3RpbmF0aW9uLCBhcyB0aGVzZSBhcmUgaWdub3JlZAord2hlbiB1bnBhY2tpbmcgYXQgdGhlIGRlc3RpbmF0aW9uLgorCitFWEFNUExFCistLS0tLS0tCisKK0Fzc3VtZSB5b3Ugd2FudCB0byB0cmFuc2ZlciB0aGUgaGlzdG9yeSBmcm9tIGEgcmVwb3NpdG9yeSBSMSBvbiBtYWNoaW5lIEEKK3RvIGFub3RoZXIgcmVwb3NpdG9yeSBSMiBvbiBtYWNoaW5lIEIuCitGb3Igd2hhdGV2ZXIgcmVhc29uLCBkaXJlY3QgY29ubmVjdGlvbiBiZXR3ZWVuIEEgYW5kIEIgaXMgbm90IGFsbG93ZWQsCitidXQgd2UgY2FuIG1vdmUgZGF0YSBmcm9tIEEgdG8gQiB2aWEgc29tZSBtZWNoYW5pc20gKENELCBlbWFpbCwgZXRjLikuCitXZSB3YW50IHRvIHVwZGF0ZSBSMiB3aXRoIGRldmVsb3BtZW50IG1hZGUgb24gdGhlIGJyYW5jaCBtYXN0ZXIgaW4gUjEuCisKK1RvIGJvb3RzdHJhcCB0aGUgcHJvY2VzcywgeW91IGNhbiBmaXJzdCBjcmVhdGUgYSBidW5kbGUgdGhhdCBkb2VzIG5vdCBoYXZlCithbnkgYmFzaXMuIFlvdSBjYW4gdXNlIGEgdGFnIHRvIHJlbWVtYmVyIHVwIHRvIHdoYXQgY29tbWl0IHlvdSBsYXN0Citwcm9jZXNzZWQsIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzeSB0byBsYXRlciB1cGRhdGUgdGhlIG90aGVyIHJlcG9zaXRvcnkKK3dpdGggYW4gaW5jcmVtZW50YWwgYnVuZGxlOgorCistLS0tLS0tLS0tLS0tLS0tCittYWNoaW5lQSQgY2QgUjEKK21hY2hpbmVBJCBnaXQgYnVuZGxlIGNyZWF0ZSBmaWxlLmJ1bmRsZSBtYXN0ZXIKK21hY2hpbmVBJCBnaXQgdGFnIC1mIGxhc3RSMmJ1bmRsZSBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiB5b3UgdHJhbnNmZXIgZmlsZS5idW5kbGUgdG8gdGhlIHRhcmdldCBtYWNoaW5lIEIuIEJlY2F1c2UgdGhpcworYnVuZGxlIGRvZXMgbm90IHJlcXVpcmUgYW55IGV4aXN0aW5nIG9iamVjdCB0byBiZSBleHRyYWN0ZWQsIHlvdSBjYW4KK2NyZWF0ZSBhIG5ldyByZXBvc2l0b3J5IG9uIG1hY2hpbmUgQiBieSBjbG9uaW5nIGZyb20gaXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0KK21hY2hpbmVCJCBnaXQgY2xvbmUgLWIgbWFzdGVyIC9ob21lL21lL3RtcC9maWxlLmJ1bmRsZSBSMgorLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgZGVmaW5lIGEgcmVtb3RlIGNhbGxlZCAib3JpZ2luIiBpbiB0aGUgcmVzdWx0aW5nIHJlcG9zaXRvcnkgdGhhdAorbGV0cyB5b3UgZmV0Y2ggYW5kIHB1bGwgZnJvbSB0aGUgYnVuZGxlLiBUaGUgJEdJVF9ESVIvY29uZmlnIGZpbGUgaW4gUjIgd2lsbAoraGF2ZSBhbiBlbnRyeSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW3JlbW90ZSAib3JpZ2luIl0KKyAgICB1cmwgPSAvaG9tZS9tZS90bXAvZmlsZS5idW5kbGUKKyAgICBmZXRjaCA9IHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1cGRhdGUgdGhlIHJlc3VsdGluZyBtaW5lLmdpdCByZXBvc2l0b3J5LCB5b3UgY2FuIGZldGNoIG9yIHB1bGwgYWZ0ZXIKK3JlcGxhY2luZyB0aGUgYnVuZGxlIHN0b3JlZCBhdCAvaG9tZS9tZS90bXAvZmlsZS5idW5kbGUgd2l0aCBpbmNyZW1lbnRhbAordXBkYXRlcy4KKworQWZ0ZXIgd29ya2luZyBzb21lIG1vcmUgaW4gdGhlIG9yaWdpbmFsIHJlcG9zaXRvcnksIHlvdSBjYW4gY3JlYXRlIGFuCitpbmNyZW1lbnRhbCBidW5kbGUgdG8gdXBkYXRlIHRoZSBvdGhlciByZXBvc2l0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tCittYWNoaW5lQSQgY2QgUjEKK21hY2hpbmVBJCBnaXQgYnVuZGxlIGNyZWF0ZSBmaWxlLmJ1bmRsZSBsYXN0UjJidW5kbGUuLm1hc3RlcgorbWFjaGluZUEkIGdpdCB0YWcgLWYgbGFzdFIyYnVuZGxlIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgdGhlbiB0cmFuc2ZlciB0aGUgYnVuZGxlIHRvIHRoZSBvdGhlciBtYWNoaW5lIHRvIHJlcGxhY2UKKy9ob21lL21lL3RtcC9maWxlLmJ1bmRsZSwgYW5kIHB1bGwgZnJvbSBpdC4KKworLS0tLS0tLS0tLS0tLS0tLQorbWFjaGluZUIkIGNkIFIyCittYWNoaW5lQiQgZ2l0IHB1bGwKKy0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGtub3cgdXAgdG8gd2hhdCBjb21taXQgdGhlIGludGVuZGVkIHJlY2lwaWVudCByZXBvc2l0b3J5IHNob3VsZAoraGF2ZSB0aGUgbmVjZXNzYXJ5IG9iamVjdHMsIHlvdSBjYW4gdXNlIHRoYXQga25vd2xlZGdlIHRvIHNwZWNpZnkgdGhlCitiYXNpcywgZ2l2aW5nIGEgY3V0LW9mZiBwb2ludCB0byBsaW1pdCB0aGUgcmV2aXNpb25zIGFuZCBvYmplY3RzIHRoYXQgZ28KK2luIHRoZSByZXN1bHRpbmcgYnVuZGxlLiBUaGUgcHJldmlvdXMgZXhhbXBsZSB1c2VkIHRoZSBsYXN0UjJidW5kbGUgdGFnCitmb3IgdGhpcyBwdXJwb3NlLCBidXQgeW91IGNhbiB1c2UgYW55IG90aGVyIG9wdGlvbnMgdGhhdCB5b3Ugd291bGQgZ2l2ZSB0bwordGhlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSBjb21tYW5kLiBIZXJlIGFyZSBtb3JlIGV4YW1wbGVzOgorCitZb3UgY2FuIHVzZSBhIHRhZyB0aGF0IGlzIHByZXNlbnQgaW4gYm90aDoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnVuZGxlIGNyZWF0ZSBteWJ1bmRsZSB2MS4wLjAuLm1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHVzZSBhIGJhc2lzIGJhc2VkIG9uIHRpbWU6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJ1bmRsZSBjcmVhdGUgbXlidW5kbGUgLS1zaW5jZT0xMC5kYXlzIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHVzZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJ1bmRsZSBjcmVhdGUgbXlidW5kbGUgLTEwIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHJ1biBgZ2l0LWJ1bmRsZSB2ZXJpZnlgIHRvIHNlZSBpZiB5b3UgY2FuIGV4dHJhY3QgZnJvbSBhIGJ1bmRsZQordGhhdCB3YXMgY3JlYXRlZCB3aXRoIGEgYmFzaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJ1bmRsZSB2ZXJpZnkgbXlidW5kbGUKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGxpc3Qgd2hhdCBjb21taXRzIHlvdSBtdXN0IGhhdmUgaW4gb3JkZXIgdG8gZXh0cmFjdCBmcm9tIHRoZQorYnVuZGxlIGFuZCB3aWxsIGVycm9yIG91dCBpZiB5b3UgZG8gbm90IGhhdmUgdGhlbS4KKworQSBidW5kbGUgZnJvbSBhIHJlY2lwaWVudCByZXBvc2l0b3J5J3MgcG9pbnQgb2YgdmlldyBpcyBqdXN0IGxpa2UgYQorcmVndWxhciByZXBvc2l0b3J5IHdoaWNoIGl0IGZldGNoZXMgb3IgcHVsbHMgZnJvbS4gWW91IGNhbiwgZm9yIGV4YW1wbGUsIG1hcAorcmVmZXJlbmNlcyB3aGVuIGZldGNoaW5nOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBteWJ1bmRsZSBtYXN0ZXI6bG9jYWxSZWYKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHNvIHNlZSB3aGF0IHJlZmVyZW5jZXMgaXQgb2ZmZXJzOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBscy1yZW1vdGUgbXlidW5kbGUKKy0tLS0tLS0tLS0tLS0tLS0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jYXQtZmlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzZDY5NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNhdC1maWxlLnR4dApAQCAtMCwwICsxLDI4MiBAQAorZ2l0LWNhdC1maWxlKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNhdC1maWxlIC0gUHJvdmlkZSBjb250ZW50IG9yIHR5cGUgYW5kIHNpemUgaW5mb3JtYXRpb24gZm9yIHJlcG9zaXRvcnkgb2JqZWN0cworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjYXQtZmlsZScgKC10IFstLWFsbG93LXVua25vd24tdHlwZV18IC1zIFstLWFsbG93LXVua25vd24tdHlwZV18IC1lIHwgLXAgfCA8dHlwZT4gfCAtLXRleHRjb252ICkgPG9iamVjdD4KKydnaXQgY2F0LWZpbGUnICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0luIGl0cyBmaXJzdCBmb3JtLCB0aGUgY29tbWFuZCBwcm92aWRlcyB0aGUgY29udGVudCBvciB0aGUgdHlwZSBvZiBhbiBvYmplY3QgaW4KK3RoZSByZXBvc2l0b3J5LiBUaGUgdHlwZSBpcyByZXF1aXJlZCB1bmxlc3MgJy10JyBvciAnLXAnIGlzIHVzZWQgdG8gZmluZCB0aGUKK29iamVjdCB0eXBlLCBvciAnLXMnIGlzIHVzZWQgdG8gZmluZCB0aGUgb2JqZWN0IHNpemUsIG9yICctLXRleHRjb252JyBpcyB1c2VkCisod2hpY2ggaW1wbGllcyB0eXBlICJibG9iIikuCisKK0luIHRoZSBzZWNvbmQgZm9ybSwgYSBsaXN0IG9mIG9iamVjdHMgKHNlcGFyYXRlZCBieSBsaW5lZmVlZHMpIGlzIHByb3ZpZGVkIG9uCitzdGRpbiwgYW5kIHRoZSBTSEEtMSwgdHlwZSwgYW5kIHNpemUgb2YgZWFjaCBvYmplY3QgaXMgcHJpbnRlZCBvbiBzdGRvdXQuCisKK09QVElPTlMKKy0tLS0tLS0KKzxvYmplY3Q+OjoKKwlUaGUgbmFtZSBvZiB0aGUgb2JqZWN0IHRvIHNob3cuCisJRm9yIGEgbW9yZSBjb21wbGV0ZSBsaXN0IG9mIHdheXMgdG8gc3BlbGwgb2JqZWN0IG5hbWVzLCBzZWUKKwl0aGUgIlNQRUNJRllJTkcgUkVWSVNJT05TIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddLgorCistdDo6CisJSW5zdGVhZCBvZiB0aGUgY29udGVudCwgc2hvdyB0aGUgb2JqZWN0IHR5cGUgaWRlbnRpZmllZCBieQorCTxvYmplY3Q+LgorCistczo6CisJSW5zdGVhZCBvZiB0aGUgY29udGVudCwgc2hvdyB0aGUgb2JqZWN0IHNpemUgaWRlbnRpZmllZCBieQorCTxvYmplY3Q+LgorCistZTo6CisJU3VwcHJlc3MgYWxsIG91dHB1dDsgaW5zdGVhZCBleGl0IHdpdGggemVybyBzdGF0dXMgaWYgPG9iamVjdD4KKwlleGlzdHMgYW5kIGlzIGEgdmFsaWQgb2JqZWN0LgorCistcDo6CisJUHJldHR5LXByaW50IHRoZSBjb250ZW50cyBvZiA8b2JqZWN0PiBiYXNlZCBvbiBpdHMgdHlwZS4KKworPHR5cGU+OjoKKwlUeXBpY2FsbHkgdGhpcyBtYXRjaGVzIHRoZSByZWFsIHR5cGUgb2YgPG9iamVjdD4gYnV0IGFza2luZworCWZvciBhIHR5cGUgdGhhdCBjYW4gdHJpdmlhbGx5IGJlIGRlcmVmZXJlbmNlZCBmcm9tIHRoZSBnaXZlbgorCTxvYmplY3Q+IGlzIGFsc28gcGVybWl0dGVkLiAgQW4gZXhhbXBsZSBpcyB0byBhc2sgZm9yIGEKKwkidHJlZSIgd2l0aCA8b2JqZWN0PiBiZWluZyBhIGNvbW1pdCBvYmplY3QgdGhhdCBjb250YWlucyBpdCwKKwlvciB0byBhc2sgZm9yIGEgImJsb2IiIHdpdGggPG9iamVjdD4gYmVpbmcgYSB0YWcgb2JqZWN0IHRoYXQKKwlwb2ludHMgYXQgaXQuCisKKy0tdGV4dGNvbnY6OgorCVNob3cgdGhlIGNvbnRlbnQgYXMgdHJhbnNmb3JtZWQgYnkgYSB0ZXh0Y29udiBmaWx0ZXIuIEluIHRoaXMgY2FzZSwKKwk8b2JqZWN0PiBoYXMgYmUgb2YgdGhlIGZvcm0gPHRyZWUtaXNoPjo8cGF0aD4sIG9yIDo8cGF0aD4gaW4gb3JkZXIKKwl0byBhcHBseSB0aGUgZmlsdGVyIHRvIHRoZSBjb250ZW50IHJlY29yZGVkIGluIHRoZSBpbmRleCBhdCA8cGF0aD4uCisKKy0tYmF0Y2g6OgorLS1iYXRjaD08Zm9ybWF0Pjo6CisJUHJpbnQgb2JqZWN0IGluZm9ybWF0aW9uIGFuZCBjb250ZW50cyBmb3IgZWFjaCBvYmplY3QgcHJvdmlkZWQKKwlvbiBzdGRpbi4gIE1heSBub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgb3B0aW9ucyBvciBhcmd1bWVudHMuCisJU2VlIHRoZSBzZWN0aW9uIGBCQVRDSCBPVVRQVVRgIGJlbG93IGZvciBkZXRhaWxzLgorCistLWJhdGNoLWNoZWNrOjoKKy0tYmF0Y2gtY2hlY2s9PGZvcm1hdD46OgorCVByaW50IG9iamVjdCBpbmZvcm1hdGlvbiBmb3IgZWFjaCBvYmplY3QgcHJvdmlkZWQgb24gc3RkaW4uICBNYXkKKwlub3QgYmUgY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgb3B0aW9ucyBvciBhcmd1bWVudHMuICBTZWUgdGhlCisJc2VjdGlvbiBgQkFUQ0ggT1VUUFVUYCBiZWxvdyBmb3IgZGV0YWlscy4KKworLS1iYXRjaC1hbGwtb2JqZWN0czo6CisJSW5zdGVhZCBvZiByZWFkaW5nIGEgbGlzdCBvZiBvYmplY3RzIG9uIHN0ZGluLCBwZXJmb3JtIHRoZQorCXJlcXVlc3RlZCBiYXRjaCBvcGVyYXRpb24gb24gYWxsIG9iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnkgYW5kCisJYW55IGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzIChub3QganVzdCByZWFjaGFibGUgb2JqZWN0cykuCisJUmVxdWlyZXMgYC0tYmF0Y2hgIG9yIGAtLWJhdGNoLWNoZWNrYCBiZSBzcGVjaWZpZWQuIE5vdGUgdGhhdAorCXRoZSBvYmplY3RzIGFyZSB2aXNpdGVkIGluIG9yZGVyIHNvcnRlZCBieSB0aGVpciBoYXNoZXMuCisKKy0tYnVmZmVyOjoKKwlOb3JtYWxseSBiYXRjaCBvdXRwdXQgaXMgZmx1c2hlZCBhZnRlciBlYWNoIG9iamVjdCBpcyBvdXRwdXQsIHNvCisJdGhhdCBhIHByb2Nlc3MgY2FuIGludGVyYWN0aXZlbHkgcmVhZCBhbmQgd3JpdGUgZnJvbQorCWBjYXQtZmlsZWAuIFdpdGggdGhpcyBvcHRpb24sIHRoZSBvdXRwdXQgdXNlcyBub3JtYWwgc3RkaW8KKwlidWZmZXJpbmc7IHRoaXMgaXMgbXVjaCBtb3JlIGVmZmljaWVudCB3aGVuIGludm9raW5nCisJYC0tYmF0Y2gtY2hlY2tgIG9uIGEgbGFyZ2UgbnVtYmVyIG9mIG9iamVjdHMuCisKKy0tYWxsb3ctdW5rbm93bi10eXBlOjoKKwlBbGxvdyAtcyBvciAtdCB0byBxdWVyeSBicm9rZW4vY29ycnVwdCBvYmplY3RzIG9mIHVua25vd24gdHlwZS4KKworLS1mb2xsb3ctc3ltbGlua3M6OgorCVdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrLCBmb2xsb3cgc3ltbGlua3MgaW5zaWRlIHRoZQorCXJlcG9zaXRvcnkgd2hlbiByZXF1ZXN0aW5nIG9iamVjdHMgd2l0aCBleHRlbmRlZCBTSEEtMQorCWV4cHJlc3Npb25zIG9mIHRoZSBmb3JtIHRyZWUtaXNoOnBhdGgtaW4tdHJlZS4gIEluc3RlYWQgb2YKKwlwcm92aWRpbmcgb3V0cHV0IGFib3V0IHRoZSBsaW5rIGl0c2VsZiwgcHJvdmlkZSBvdXRwdXQgYWJvdXQKKwl0aGUgbGlua2VkLXRvIG9iamVjdC4gIElmIGEgc3ltbGluayBwb2ludHMgb3V0c2lkZSB0aGUKKwl0cmVlLWlzaCAoZS5nLiBhIGxpbmsgdG8gL2ZvbyBvciBhIHJvb3QtbGV2ZWwgbGluayB0byAuLi9mb28pLAorCXRoZSBwb3J0aW9uIG9mIHRoZSBsaW5rIHdoaWNoIGlzIG91dHNpZGUgdGhlIHRyZWUgd2lsbCBiZQorCXByaW50ZWQuCisrCitUaGlzIG9wdGlvbiBkb2VzIG5vdCAoY3VycmVudGx5KSB3b3JrIGNvcnJlY3RseSB3aGVuIGFuIG9iamVjdCBpbiB0aGUKK2luZGV4IGlzIHNwZWNpZmllZCAoZS5nLiBgOmxpbmtgIGluc3RlYWQgb2YgYEhFQUQ6bGlua2ApIHJhdGhlciB0aGFuCitvbmUgaW4gdGhlIHRyZWUuCisrCitUaGlzIG9wdGlvbiBjYW5ub3QgKGN1cnJlbnRseSkgYmUgdXNlZCB1bmxlc3MgYC0tYmF0Y2hgIG9yCitgLS1iYXRjaC1jaGVja2AgaXMgdXNlZC4KKysKK0ZvciBleGFtcGxlLCBjb25zaWRlciBhIGdpdCByZXBvc2l0b3J5IGNvbnRhaW5pbmc6CisrCistLQorCWY6IGEgZmlsZSBjb250YWluaW5nICJoZWxsb1xuIgorCWxpbms6IGEgc3ltbGluayB0byBmCisJZGlyL2xpbms6IGEgc3ltbGluayB0byAuLi9mCisJcGxpbms6IGEgc3ltbGluayB0byAuLi9mCisJYWxpbms6IGEgc3ltbGluayB0byAvZXRjL3Bhc3N3ZAorLS0KKysKK0ZvciBhIHJlZ3VsYXIgZmlsZSBgZmAsIGBlY2hvIEhFQUQ6ZiB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoYCB3b3VsZCBwcmludAorKworLS0KKwljZTAxMzYyNTAzMGJhOGRiYTkwNmY3NTY5NjdmOWU5Y2EzOTQ0NjRhIGJsb2IgNgorLS0KKysKK0FuZCBgZWNobyBIRUFEOmxpbmsgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCAtLWZvbGxvdy1zeW1saW5rc2Agd291bGQKK3ByaW50IHRoZSBzYW1lIHRoaW5nLCBhcyB3b3VsZCBgSEVBRDpkaXIvbGlua2AsIGFzIHRoZXkgYm90aCBwb2ludCBhdAorYEhFQUQ6ZmAuCisrCitXaXRob3V0IGAtLWZvbGxvdy1zeW1saW5rc2AsIHRoZXNlIHdvdWxkIHByaW50IGRhdGEgYWJvdXQgdGhlIHN5bWxpbmsKK2l0c2VsZi4gIEluIHRoZSBjYXNlIG9mIGBIRUFEOmxpbmtgLCB5b3Ugd291bGQgc2VlCisrCistLQorCTRkMWFlMzViYTJjOGVjNzEyZmEyYTM3OWRiNDRhZDYzOWNhMjc3YmQgYmxvYiAxCistLQorKworQm90aCBgcGxpbmtgIGFuZCBgYWxpbmtgIHBvaW50IG91dHNpZGUgdGhlIHRyZWUsIHNvIHRoZXkgd291bGQKK3Jlc3BlY3RpdmVseSBwcmludDoKKysKKy0tCisJc3ltbGluayA0CisJLi4vZgorCisJc3ltbGluayAxMQorCS9ldGMvcGFzc3dkCistLQorCisKK09VVFBVVAorLS0tLS0tCitJZiAnLXQnIGlzIHNwZWNpZmllZCwgb25lIG9mIHRoZSA8dHlwZT4uCisKK0lmICctcycgaXMgc3BlY2lmaWVkLCB0aGUgc2l6ZSBvZiB0aGUgPG9iamVjdD4gaW4gYnl0ZXMuCisKK0lmICctZScgaXMgc3BlY2lmaWVkLCBubyBvdXRwdXQuCisKK0lmICctcCcgaXMgc3BlY2lmaWVkLCB0aGUgY29udGVudHMgb2YgPG9iamVjdD4gYXJlIHByZXR0eS1wcmludGVkLgorCitJZiA8dHlwZT4gaXMgc3BlY2lmaWVkLCB0aGUgcmF3ICh0aG91Z2ggdW5jb21wcmVzc2VkKSBjb250ZW50cyBvZiB0aGUgPG9iamVjdD4KK3dpbGwgYmUgcmV0dXJuZWQuCisKK0JBVENIIE9VVFBVVAorLS0tLS0tLS0tLS0tCisKK0lmIGAtLWJhdGNoYCBvciBgLS1iYXRjaC1jaGVja2AgaXMgZ2l2ZW4sIGBjYXQtZmlsZWAgd2lsbCByZWFkIG9iamVjdHMKK2Zyb20gc3RkaW4sIG9uZSBwZXIgbGluZSwgYW5kIHByaW50IGluZm9ybWF0aW9uIGFib3V0IHRoZW0uIEJ5IGRlZmF1bHQsCit0aGUgd2hvbGUgbGluZSBpcyBjb25zaWRlcmVkIGFzIGFuIG9iamVjdCwgYXMgaWYgaXQgd2VyZSBmZWQgdG8KK2xpbmtnaXQ6Z2l0LXJldi1wYXJzZVsxXS4KKworWW91IGNhbiBzcGVjaWZ5IHRoZSBpbmZvcm1hdGlvbiBzaG93biBmb3IgZWFjaCBvYmplY3QgYnkgdXNpbmcgYSBjdXN0b20KK2A8Zm9ybWF0PmAuIFRoZSBgPGZvcm1hdD5gIGlzIGNvcGllZCBsaXRlcmFsbHkgdG8gc3Rkb3V0IGZvciBlYWNoCitvYmplY3QsIHdpdGggcGxhY2Vob2xkZXJzIG9mIHRoZSBmb3JtIGAlKGF0b20pYCBleHBhbmRlZCwgZm9sbG93ZWQgYnkgYQorbmV3bGluZS4gVGhlIGF2YWlsYWJsZSBhdG9tcyBhcmU6CisKK2BvYmplY3RuYW1lYDo6CisJVGhlIDQwLWhleCBvYmplY3QgbmFtZSBvZiB0aGUgb2JqZWN0LgorCitgb2JqZWN0dHlwZWA6OgorCVRoZSB0eXBlIG9mIG9mIHRoZSBvYmplY3QgKHRoZSBzYW1lIGFzIGBjYXQtZmlsZSAtdGAgcmVwb3J0cykuCisKK2BvYmplY3RzaXplYDo6CisJVGhlIHNpemUsIGluIGJ5dGVzLCBvZiB0aGUgb2JqZWN0ICh0aGUgc2FtZSBhcyBgY2F0LWZpbGUgLXNgCisJcmVwb3J0cykuCisKK2BvYmplY3RzaXplOmRpc2tgOjoKKwlUaGUgc2l6ZSwgaW4gYnl0ZXMsIHRoYXQgdGhlIG9iamVjdCB0YWtlcyB1cCBvbiBkaXNrLiBTZWUgdGhlCisJbm90ZSBhYm91dCBvbi1kaXNrIHNpemVzIGluIHRoZSBgQ0FWRUFUU2Agc2VjdGlvbiBiZWxvdy4KKworYGRlbHRhYmFzZWA6OgorCUlmIHRoZSBvYmplY3QgaXMgc3RvcmVkIGFzIGEgZGVsdGEgb24tZGlzaywgdGhpcyBleHBhbmRzIHRvIHRoZQorCTQwLWhleCBzaGExIG9mIHRoZSBkZWx0YSBiYXNlIG9iamVjdC4gT3RoZXJ3aXNlLCBleHBhbmRzIHRvIHRoZQorCW51bGwgc2hhMSAoNDAgemVyb2VzKS4gU2VlIGBDQVZFQVRTYCBiZWxvdy4KKworYHJlc3RgOjoKKwlJZiB0aGlzIGF0b20gaXMgdXNlZCBpbiB0aGUgb3V0cHV0IHN0cmluZywgaW5wdXQgbGluZXMgYXJlIHNwbGl0CisJYXQgdGhlIGZpcnN0IHdoaXRlc3BhY2UgYm91bmRhcnkuIEFsbCBjaGFyYWN0ZXJzIGJlZm9yZSB0aGF0CisJd2hpdGVzcGFjZSBhcmUgY29uc2lkZXJlZCB0byBiZSB0aGUgb2JqZWN0IG5hbWU7IGNoYXJhY3RlcnMKKwlhZnRlciB0aGF0IGZpcnN0IHJ1biBvZiB3aGl0ZXNwYWNlIChpLmUuLCB0aGUgInJlc3QiIG9mIHRoZQorCWxpbmUpIGFyZSBvdXRwdXQgaW4gcGxhY2Ugb2YgdGhlIGAlKHJlc3QpYCBhdG9tLgorCitJZiBubyBmb3JtYXQgaXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBmb3JtYXQgaXMgYCUob2JqZWN0bmFtZSkKKyUob2JqZWN0dHlwZSkgJShvYmplY3RzaXplKWAuCisKK0lmIGAtLWJhdGNoYCBpcyBzcGVjaWZpZWQsIHRoZSBvYmplY3QgaW5mb3JtYXRpb24gaXMgZm9sbG93ZWQgYnkgdGhlCitvYmplY3QgY29udGVudHMgKGNvbnNpc3Rpbmcgb2YgYCUob2JqZWN0c2l6ZSlgIGJ5dGVzKSwgZm9sbG93ZWQgYnkgYQorbmV3bGluZS4KKworRm9yIGV4YW1wbGUsIGAtLWJhdGNoYCB3aXRob3V0IGEgY3VzdG9tIGZvcm1hdCB3b3VsZCBwcm9kdWNlOgorCistLS0tLS0tLS0tLS0KKzxzaGExPiBTUCA8dHlwZT4gU1AgPHNpemU+IExGCis8Y29udGVudHM+IExGCistLS0tLS0tLS0tLS0KKworV2hlcmVhcyBgLS1iYXRjaC1jaGVjaz0nJShvYmplY3RuYW1lKSAlKG9iamVjdHR5cGUpJ2Agd291bGQgcHJvZHVjZToKKworLS0tLS0tLS0tLS0tCis8c2hhMT4gU1AgPHR5cGU+IExGCistLS0tLS0tLS0tLS0KKworSWYgYSBuYW1lIGlzIHNwZWNpZmllZCBvbiBzdGRpbiB0aGF0IGNhbm5vdCBiZSByZXNvbHZlZCB0byBhbiBvYmplY3QgaW4KK3RoZSByZXBvc2l0b3J5LCB0aGVuIGBjYXQtZmlsZWAgd2lsbCBpZ25vcmUgYW55IGN1c3RvbSBmb3JtYXQgYW5kIHByaW50OgorCistLS0tLS0tLS0tLS0KKzxvYmplY3Q+IFNQIG1pc3NpbmcgTEYKKy0tLS0tLS0tLS0tLQorCitJZiAtLWZvbGxvdy1zeW1saW5rcyBpcyB1c2VkLCBhbmQgYSBzeW1saW5rIGluIHRoZSByZXBvc2l0b3J5IHBvaW50cworb3V0c2lkZSB0aGUgcmVwb3NpdG9yeSwgdGhlbiBgY2F0LWZpbGVgIHdpbGwgaWdub3JlIGFueSBjdXN0b20gZm9ybWF0CithbmQgcHJpbnQ6CisKKy0tLS0tLS0tLS0tLQorc3ltbGluayBTUCA8c2l6ZT4gTEYKKzxzeW1saW5rPiBMRgorLS0tLS0tLS0tLS0tCisKK1RoZSBzeW1saW5rIHdpbGwgZWl0aGVyIGJlIGFic29sdXRlIChiZWdpbm5pbmcgd2l0aCBhIC8pLCBvciByZWxhdGl2ZQordG8gdGhlIHRyZWUgcm9vdC4gIEZvciBpbnN0YW5jZSwgaWYgZGlyL2xpbmsgcG9pbnRzIHRvIC4uLy4uL2ZvbywgdGhlbgorPHN5bWxpbms+IHdpbGwgYmUgLi4vZm9vLiAgPHNpemU+IGlzIHRoZSBzaXplIG9mIHRoZSBzeW1saW5rIGluIGJ5dGVzLgorCitJZiAtLWZvbGxvdy1zeW1saW5rcyBpcyB1c2VkLCB0aGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2VzIHdpbGwgYmUKK2Rpc3BsYXllZDoKKworLS0tLS0tLS0tLS0tCis8b2JqZWN0PiBTUCBtaXNzaW5nIExGCistLS0tLS0tLS0tLS0KK2lzIHByaW50ZWQgd2hlbiB0aGUgaW5pdGlhbCBzeW1saW5rIHJlcXVlc3RlZCBkb2VzIG5vdCBleGlzdC4KKworLS0tLS0tLS0tLS0tCitkYW5nbGluZyBTUCA8c2l6ZT4gTEYKKzxvYmplY3Q+IExGCistLS0tLS0tLS0tLS0KK2lzIHByaW50ZWQgd2hlbiB0aGUgaW5pdGlhbCBzeW1saW5rIGV4aXN0cywgYnV0IHNvbWV0aGluZyB0aGF0CitpdCAodHJhbnNpdGl2ZS1vZikgcG9pbnRzIHRvIGRvZXMgbm90LgorCistLS0tLS0tLS0tLS0KK2xvb3AgU1AgPHNpemU+IExGCis8b2JqZWN0PiBMRgorLS0tLS0tLS0tLS0tCitpcyBwcmludGVkIGZvciBzeW1saW5rIGxvb3BzIChvciBhbnkgc3ltbGlua3MgdGhhdAorcmVxdWlyZSBtb3JlIHRoYW4gNDAgbGluayByZXNvbHV0aW9ucyB0byByZXNvbHZlKS4KKworLS0tLS0tLS0tLS0tCitub3RkaXIgU1AgPHNpemU+IExGCis8b2JqZWN0PiBMRgorLS0tLS0tLS0tLS0tCitpcyBwcmludGVkIHdoZW4sIGR1cmluZyBzeW1saW5rIHJlc29sdXRpb24sIGEgZmlsZSBpcyB1c2VkIGFzIGEKK2RpcmVjdG9yeSBuYW1lLgorCitDQVZFQVRTCistLS0tLS0tCisKK05vdGUgdGhhdCB0aGUgc2l6ZXMgb2Ygb2JqZWN0cyBvbiBkaXNrIGFyZSByZXBvcnRlZCBhY2N1cmF0ZWx5LCBidXQgY2FyZQorc2hvdWxkIGJlIHRha2VuIGluIGRyYXdpbmcgY29uY2x1c2lvbnMgYWJvdXQgd2hpY2ggcmVmcyBvciBvYmplY3RzIGFyZQorcmVzcG9uc2libGUgZm9yIGRpc2sgdXNhZ2UuIFRoZSBzaXplIG9mIGEgcGFja2VkIG5vbi1kZWx0YSBvYmplY3QgbWF5IGJlCittdWNoIGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIG9iamVjdHMgd2hpY2ggZGVsdGEgYWdhaW5zdCBpdCwgYnV0IHRoZQorY2hvaWNlIG9mIHdoaWNoIG9iamVjdCBpcyB0aGUgYmFzZSBhbmQgd2hpY2ggaXMgdGhlIGRlbHRhIGlzIGFyYml0cmFyeQorYW5kIGlzIHN1YmplY3QgdG8gY2hhbmdlIGR1cmluZyBhIHJlcGFjay4KKworTm90ZSBhbHNvIHRoYXQgbXVsdGlwbGUgY29waWVzIG9mIGFuIG9iamVjdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgb2JqZWN0CitkYXRhYmFzZTsgaW4gdGhpcyBjYXNlLCBpdCBpcyB1bmRlZmluZWQgd2hpY2ggY29weSdzIHNpemUgb3IgZGVsdGEgYmFzZQord2lsbCBiZSByZXBvcnRlZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLWF0dHIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhM2IyYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1hdHRyLnR4dApAQCAtMCwwICsxLDEyMCBAQAorZ2l0LWNoZWNrLWF0dHIoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVjay1hdHRyIC0gRGlzcGxheSBnaXRhdHRyaWJ1dGVzIGluZm9ybWF0aW9uCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZWNrLWF0dHInIFstYSB8IC0tYWxsIHwgYXR0ci4uLl0gWy0tXSBwYXRobmFtZS4uLgorJ2dpdCBjaGVjay1hdHRyJyAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCBhdHRyLi4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ZvciBldmVyeSBwYXRobmFtZSwgdGhpcyBjb21tYW5kIHdpbGwgbGlzdCBpZiBlYWNoIGF0dHJpYnV0ZSBpcyAndW5zcGVjaWZpZWQnLAorJ3NldCcsIG9yICd1bnNldCcgYXMgYSBnaXRhdHRyaWJ1dGUgb24gdGhhdCBwYXRobmFtZS4KKworT1BUSU9OUworLS0tLS0tLQorLWEsIC0tYWxsOjoKKwlMaXN0IGFsbCBhdHRyaWJ1dGVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisJcGF0aHMuICBJZiB0aGlzIG9wdGlvbiBpcyB1c2VkLCB0aGVuICd1bnNwZWNpZmllZCcgYXR0cmlidXRlcworCXdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQuCisKKy0tY2FjaGVkOjoKKwlDb25zaWRlciBgLmdpdGF0dHJpYnV0ZXNgIGluIHRoZSBpbmRleCBvbmx5LCBpZ25vcmluZyB0aGUgd29ya2luZyB0cmVlLgorCistLXN0ZGluOjoKKwlSZWFkIHBhdGhuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgb25lIHBlciBsaW5lLAorCWluc3RlYWQgb2YgZnJvbSB0aGUgY29tbWFuZC1saW5lLgorCistejo6CisJVGhlIG91dHB1dCBmb3JtYXQgaXMgbW9kaWZpZWQgdG8gYmUgbWFjaGluZS1wYXJzZWFibGUuCisJSWYgYC0tc3RkaW5gIGlzIGFsc28gZ2l2ZW4sIGlucHV0IHBhdGhzIGFyZSBzZXBhcmF0ZWQKKwl3aXRoIGEgTlVMIGNoYXJhY3RlciBpbnN0ZWFkIG9mIGEgbGluZWZlZWQgY2hhcmFjdGVyLgorCitcLS06OgorCUludGVycHJldCBhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cyBhcyBhdHRyaWJ1dGVzIGFuZCBhbGwgZm9sbG93aW5nCisJYXJndW1lbnRzIGFzIHBhdGggbmFtZXMuCisKK0lmIG5vbmUgb2YgYC0tc3RkaW5gLCBgLS1hbGxgLCBvciBgLS1gIGlzIHVzZWQsIHRoZSBmaXJzdCBhcmd1bWVudAord2lsbCBiZSB0cmVhdGVkIGFzIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cyBhcworcGF0aG5hbWVzLgorCitPVVRQVVQKKy0tLS0tLQorCitUaGUgb3V0cHV0IGlzIG9mIHRoZSBmb3JtOgorPHBhdGg+IENPTE9OIFNQIDxhdHRyaWJ1dGU+IENPTE9OIFNQIDxpbmZvPiBMRgorCit1bmxlc3MgYC16YCBpcyBpbiBlZmZlY3QsIGluIHdoaWNoIGNhc2UgTlVMIGlzIHVzZWQgYXMgZGVsaW1pdGVyOgorPHBhdGg+IE5VTCA8YXR0cmlidXRlPiBOVUwgPGluZm8+IE5VTAorCisKKzxwYXRoPiBpcyB0aGUgcGF0aCBvZiBhIGZpbGUgYmVpbmcgcXVlcmllZCwgPGF0dHJpYnV0ZT4gaXMgYW4gYXR0cmlidXRlCitiZWluZyBxdWVyaWVkIGFuZCA8aW5mbz4gY2FuIGJlIGVpdGhlcjoKKworJ3Vuc3BlY2lmaWVkJzs7IHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIHBhdGguCisndW5zZXQnOzsJd2hlbiB0aGUgYXR0cmlidXRlIGlzIGRlZmluZWQgYXMgZmFsc2UuCisnc2V0Jzs7CQl3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgZGVmaW5lZCBhcyB0cnVlLgorPHZhbHVlPjs7CXdoZW4gYSB2YWx1ZSBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgYXR0cmlidXRlLgorCitCdWZmZXJpbmcgaGFwcGVucyBhcyBkb2N1bWVudGVkIHVuZGVyIHRoZSBgR0lUX0ZMVVNIYCBvcHRpb24gaW4KK2xpbmtnaXQ6Z2l0WzFdLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgYXZvaWRpbmcgZGVhZGxvY2tzCitjYXVzZWQgYnkgb3ZlcmZpbGxpbmcgYW4gaW5wdXQgYnVmZmVyIG9yIHJlYWRpbmcgZnJvbSBhbiBlbXB0eSBvdXRwdXQKK2J1ZmZlci4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0luIHRoZSBleGFtcGxlcywgdGhlIGZvbGxvd2luZyAnLmdpdGF0dHJpYnV0ZXMnIGZpbGUgaXMgdXNlZDoKKy0tLS0tLS0tLS0tLS0tLQorKi5qYXZhIGRpZmY9amF2YSAtY3JsZiBteUF0dHIKK05vTXlBdHRyLmphdmEgIW15QXR0cgorUkVBRE1FIGNhdmVhdD11bnNwZWNpZmllZAorLS0tLS0tLS0tLS0tLS0tCisKKyogTGlzdGluZyBhIHNpbmdsZSBhdHRyaWJ1dGU6CistLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrLWF0dHIgZGlmZiBvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmEKK29yZy9leGFtcGxlL015Q2xhc3MuamF2YTogZGlmZjogamF2YQorLS0tLS0tLS0tLS0tLS0tCisKKyogTGlzdGluZyBtdWx0aXBsZSBhdHRyaWJ1dGVzIGZvciBhIGZpbGU6CistLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrLWF0dHIgY3JsZiBkaWZmIG15QXR0ciAtLSBvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmEKK29yZy9leGFtcGxlL015Q2xhc3MuamF2YTogY3JsZjogdW5zZXQKK29yZy9leGFtcGxlL015Q2xhc3MuamF2YTogZGlmZjogamF2YQorb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhOiBteUF0dHI6IHNldAorLS0tLS0tLS0tLS0tLS0tCisKKyogTGlzdGluZyBhbGwgYXR0cmlidXRlcyBmb3IgYSBmaWxlOgorLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVjay1hdHRyIC0tYWxsIC0tIG9yZy9leGFtcGxlL015Q2xhc3MuamF2YQorb3JnL2V4YW1wbGUvTXlDbGFzcy5qYXZhOiBkaWZmOiBqYXZhCitvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmE6IG15QXR0cjogc2V0CistLS0tLS0tLS0tLS0tLS0KKworKiBMaXN0aW5nIGFuIGF0dHJpYnV0ZSBmb3IgbXVsdGlwbGUgZmlsZXM6CistLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrLWF0dHIgbXlBdHRyIC0tIG9yZy9leGFtcGxlL015Q2xhc3MuamF2YSBvcmcvZXhhbXBsZS9Ob015QXR0ci5qYXZhCitvcmcvZXhhbXBsZS9NeUNsYXNzLmphdmE6IG15QXR0cjogc2V0CitvcmcvZXhhbXBsZS9Ob015QXR0ci5qYXZhOiBteUF0dHI6IHVuc3BlY2lmaWVkCistLS0tLS0tLS0tLS0tLS0KKworKiBOb3QgYWxsIHZhbHVlcyBhcmUgZXF1YWxseSB1bmFtYmlndW91czoKKy0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2stYXR0ciBjYXZlYXQgUkVBRE1FCitSRUFETUU6IGNhdmVhdDogdW5zcGVjaWZpZWQKKy0tLS0tLS0tLS0tLS0tLQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1pZ25vcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2staWdub3JlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTUzMWFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2staWdub3JlLnR4dApAQCAtMCwwICsxLDEyMCBAQAorZ2l0LWNoZWNrLWlnbm9yZSgxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlY2staWdub3JlIC0gRGVidWcgZ2l0aWdub3JlIC8gZXhjbHVkZSBmaWxlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaGVjay1pZ25vcmUnIFtvcHRpb25zXSBwYXRobmFtZS4uLgorJ2dpdCBjaGVjay1pZ25vcmUnIFtvcHRpb25zXSAtLXN0ZGluCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitGb3IgZWFjaCBwYXRobmFtZSBnaXZlbiB2aWEgdGhlIGNvbW1hbmQtbGluZSBvciBmcm9tIGEgZmlsZSB2aWEKK2AtLXN0ZGluYCwgc2hvdyB0aGUgcGF0dGVybiBmcm9tIC5naXRpZ25vcmUgKG9yIG90aGVyIGlucHV0IGZpbGVzIHRvCit0aGUgZXhjbHVkZSBtZWNoYW5pc20pIHRoYXQgZGVjaWRlcyBpZiB0aGUgcGF0aG5hbWUgaXMgZXhjbHVkZWQgb3IKK2luY2x1ZGVkLiAgTGF0ZXIgcGF0dGVybnMgd2l0aGluIGEgZmlsZSB0YWtlIHByZWNlZGVuY2Ugb3ZlciBlYXJsaWVyCitvbmVzLgorCitCeSBkZWZhdWx0LCB0cmFja2VkIGZpbGVzIGFyZSBub3Qgc2hvd24gYXQgYWxsIHNpbmNlIHRoZXkgYXJlIG5vdAorc3ViamVjdCB0byBleGNsdWRlIHJ1bGVzOyBidXQgc2VlIGAtLW5vLWluZGV4Jy4KKworT1BUSU9OUworLS0tLS0tLQorLXEsIC0tcXVpZXQ6OgorCURvbid0IG91dHB1dCBhbnl0aGluZywganVzdCBzZXQgZXhpdCBzdGF0dXMuICBUaGlzIGlzIG9ubHkKKwl2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lLgorCistdiwgLS12ZXJib3NlOjoKKwlBbHNvIG91dHB1dCBkZXRhaWxzIGFib3V0IHRoZSBtYXRjaGluZyBwYXR0ZXJuIChpZiBhbnkpCisJZm9yIGVhY2ggZ2l2ZW4gcGF0aG5hbWUuCisKKy0tc3RkaW46OgorCVJlYWQgcGF0aG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBvbmUgcGVyIGxpbmUsCisJaW5zdGVhZCBvZiBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCisKKy16OjoKKwlUaGUgb3V0cHV0IGZvcm1hdCBpcyBtb2RpZmllZCB0byBiZSBtYWNoaW5lLXBhcnNlYWJsZSAoc2VlCisJYmVsb3cpLiAgSWYgYC0tc3RkaW5gIGlzIGFsc28gZ2l2ZW4sIGlucHV0IHBhdGhzIGFyZSBzZXBhcmF0ZWQKKwl3aXRoIGEgTlVMIGNoYXJhY3RlciBpbnN0ZWFkIG9mIGEgbGluZWZlZWQgY2hhcmFjdGVyLgorCistbiwgLS1ub24tbWF0Y2hpbmc6OgorCVNob3cgZ2l2ZW4gcGF0aHMgd2hpY2ggZG9uJ3QgbWF0Y2ggYW55IHBhdHRlcm4uCSBUaGlzIG9ubHkKKwltYWtlcyBzZW5zZSB3aGVuIGAtLXZlcmJvc2VgIGlzIGVuYWJsZWQsIG90aGVyd2lzZSBpdCB3b3VsZAorCW5vdCBiZSBwb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHBhdGhzIHdoaWNoIG1hdGNoIGEKKwlwYXR0ZXJuIGFuZCB0aG9zZSB3aGljaCBkb24ndC4KKworLS1uby1pbmRleDo6CisJRG9uJ3QgbG9vayBpbiB0aGUgaW5kZXggd2hlbiB1bmRlcnRha2luZyB0aGUgY2hlY2tzLiBUaGlzIGNhbgorCWJlIHVzZWQgdG8gZGVidWcgd2h5IGEgcGF0aCBiZWNhbWUgdHJhY2tlZCBieSBlLmcuIGBnaXQgYWRkIC5gCisJYW5kIHdhcyBub3QgaWdub3JlZCBieSB0aGUgcnVsZXMgYXMgZXhwZWN0ZWQgYnkgdGhlIHVzZXIgb3Igd2hlbgorCWRldmVsb3BpbmcgcGF0dGVybnMgaW5jbHVkaW5nIG5lZ2F0aW9uIHRvIG1hdGNoIGEgcGF0aCBwcmV2aW91c2x5CisJYWRkZWQgd2l0aCBgZ2l0IGFkZCAtZmAuCisKK09VVFBVVAorLS0tLS0tCisKK0J5IGRlZmF1bHQsIGFueSBvZiB0aGUgZ2l2ZW4gcGF0aG5hbWVzIHdoaWNoIG1hdGNoIGFuIGlnbm9yZSBwYXR0ZXJuCit3aWxsIGJlIG91dHB1dCwgb25lIHBlciBsaW5lLiAgSWYgbm8gcGF0dGVybiBtYXRjaGVzIGEgZ2l2ZW4gcGF0aCwKK25vdGhpbmcgd2lsbCBiZSBvdXRwdXQgZm9yIHRoYXQgcGF0aDsgdGhpcyBtZWFucyB0aGF0IHBhdGggd2lsbCBub3QgYmUKK2lnbm9yZWQuCisKK0lmIGAtLXZlcmJvc2VgIGlzIHNwZWNpZmllZCwgdGhlIG91dHB1dCBpcyBhIHNlcmllcyBvZiBsaW5lcyBvZiB0aGUgZm9ybToKKworPHNvdXJjZT4gPENPTE9OPiA8bGluZW51bT4gPENPTE9OPiA8cGF0dGVybj4gPEhUPiA8cGF0aG5hbWU+CisKKzxwYXRobmFtZT4gaXMgdGhlIHBhdGggb2YgYSBmaWxlIGJlaW5nIHF1ZXJpZWQsIDxwYXR0ZXJuPiBpcyB0aGUKK21hdGNoaW5nIHBhdHRlcm4sIDxzb3VyY2U+IGlzIHRoZSBwYXR0ZXJuJ3Mgc291cmNlIGZpbGUsIGFuZCA8bGluZW51bT4KK2lzIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgcGF0dGVybiB3aXRoaW4gdGhhdCBzb3VyY2UuICBJZiB0aGUgcGF0dGVybgorY29udGFpbmVkIGEgYCFgIHByZWZpeCBvciBgL2Agc3VmZml4LCBpdCB3aWxsIGJlIHByZXNlcnZlZCBpbiB0aGUKK291dHB1dC4gIDxzb3VyY2U+IHdpbGwgYmUgYW4gYWJzb2x1dGUgcGF0aCB3aGVuIHJlZmVycmluZyB0byB0aGUgZmlsZQorY29uZmlndXJlZCBieSBgY29yZS5leGNsdWRlc0ZpbGVgLCBvciByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290Cit3aGVuIHJlZmVycmluZyB0byBgLmdpdC9pbmZvL2V4Y2x1ZGVgIG9yIGEgcGVyLWRpcmVjdG9yeSBleGNsdWRlIGZpbGUuCisKK0lmIGAtemAgaXMgc3BlY2lmaWVkLCB0aGUgcGF0aG5hbWVzIGluIHRoZSBvdXRwdXQgYXJlIGRlbGltaXRlZCBieSB0aGUKK251bGwgY2hhcmFjdGVyOyBpZiBgLS12ZXJib3NlYCBpcyBhbHNvIHNwZWNpZmllZCB0aGVuIG51bGwgY2hhcmFjdGVycworYXJlIGFsc28gdXNlZCBpbnN0ZWFkIG9mIGNvbG9ucyBhbmQgaGFyZCB0YWJzOgorCis8c291cmNlPiA8TlVMTD4gPGxpbmVudW0+IDxOVUxMPiA8cGF0dGVybj4gPE5VTEw+IDxwYXRobmFtZT4gPE5VTEw+CisKK0lmIGAtbmAgb3IgYC0tbm9uLW1hdGNoaW5nYCBhcmUgc3BlY2lmaWVkLCBub24tbWF0Y2hpbmcgcGF0aG5hbWVzIHdpbGwKK2Fsc28gYmUgb3V0cHV0LCBpbiB3aGljaCBjYXNlIGFsbCBmaWVsZHMgaW4gZWFjaCBvdXRwdXQgcmVjb3JkIGV4Y2VwdAorZm9yIDxwYXRobmFtZT4gd2lsbCBiZSBlbXB0eS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHJ1bm5pbmcKK25vbi1pbnRlcmFjdGl2ZWx5LCBzbyB0aGF0IGZpbGVzIGNhbiBiZSBpbmNyZW1lbnRhbGx5IHN0cmVhbWVkIHRvCitTVERJTiBvZiBhIGxvbmctcnVubmluZyBjaGVjay1pZ25vcmUgcHJvY2VzcywgYW5kIGZvciBlYWNoIG9mIHRoZXNlCitmaWxlcywgU1RET1VUIHdpbGwgaW5kaWNhdGUgd2hldGhlciB0aGF0IGZpbGUgbWF0Y2hlZCBhIHBhdHRlcm4gb3IKK25vdC4gIChXaXRob3V0IHRoaXMgb3B0aW9uLCBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIHRlbGwgd2hldGhlciB0aGUKK2Fic2VuY2Ugb2Ygb3V0cHV0IGZvciBhIGdpdmVuIGZpbGUgbWVhbnQgdGhhdCBpdCBkaWRuJ3QgbWF0Y2ggYW55CitwYXR0ZXJuLCBvciB0aGF0IHRoZSBvdXRwdXQgaGFkbid0IGJlZW4gZ2VuZXJhdGVkIHlldC4pCisKK0J1ZmZlcmluZyBoYXBwZW5zIGFzIGRvY3VtZW50ZWQgdW5kZXIgdGhlIGBHSVRfRkxVU0hgIG9wdGlvbiBpbgorbGlua2dpdDpnaXRbMV0uICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBhdm9pZGluZyBkZWFkbG9ja3MKK2NhdXNlZCBieSBvdmVyZmlsbGluZyBhbiBpbnB1dCBidWZmZXIgb3IgcmVhZGluZyBmcm9tIGFuIGVtcHR5IG91dHB1dAorYnVmZmVyLgorCitFWElUIFNUQVRVUworLS0tLS0tLS0tLS0KKworMDo6CisJT25lIG9yIG1vcmUgb2YgdGhlIHByb3ZpZGVkIHBhdGhzIGlzIGlnbm9yZWQuCisKKzE6OgorCU5vbmUgb2YgdGhlIHByb3ZpZGVkIHBhdGhzIGFyZSBpZ25vcmVkLgorCisxMjg6OgorCUEgZmF0YWwgZXJyb3Igd2FzIGVuY291bnRlcmVkLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0aWdub3JlWzVdCitsaW5rZ2l0OmdpdGNvbmZpZ1s1XQorbGlua2dpdDpnaXQtbHMtZmlsZXNbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1tYWlsbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLW1haWxtYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MDI4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1tYWlsbWFwLnR4dApAQCAtMCwwICsxLDQ3IEBACitnaXQtY2hlY2stbWFpbG1hcCgxKQorPT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNoZWNrLW1haWxtYXAgLSBTaG93IGNhbm9uaWNhbCBuYW1lcyBhbmQgZW1haWwgYWRkcmVzc2VzIG9mIGNvbnRhY3RzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZWNrLW1haWxtYXAnIFtvcHRpb25zXSA8Y29udGFjdD4uLi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworRm9yIGVhY2ggYGBOYW1lICQkPHVzZXJAaG9zdD4kJCcnIG9yIGBgJCQ8dXNlckBob3N0PiQkJycgZnJvbSB0aGUgY29tbWFuZC1saW5lCitvciBzdGFuZGFyZCBpbnB1dCAod2hlbiB1c2luZyBgLS1zdGRpbmApLCBsb29rIHVwIHRoZSBwZXJzb24ncyBjYW5vbmljYWwgbmFtZQorYW5kIGVtYWlsIGFkZHJlc3MgKHNlZSAiTWFwcGluZyBBdXRob3JzIiBiZWxvdykuIElmIGZvdW5kLCBwcmludCB0aGVtOworb3RoZXJ3aXNlIHByaW50IHRoZSBpbnB1dCBhcy1pcy4KKworCitPUFRJT05TCistLS0tLS0tCistLXN0ZGluOjoKKwlSZWFkIGNvbnRhY3RzLCBvbmUgcGVyIGxpbmUsIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFmdGVyIGV4aGF1c3RpbmcKKwljb250YWN0cyBwcm92aWRlZCBvbiB0aGUgY29tbWFuZC1saW5lLgorCisKK09VVFBVVAorLS0tLS0tCisKK0ZvciBlYWNoIGNvbnRhY3QsIGEgc2luZ2xlIGxpbmUgaXMgb3V0cHV0LCB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZS4gIElmIHRoZQorbmFtZSBpcyBwcm92aWRlZCBvciBrbm93biB0byB0aGUgJ21haWxtYXAnLCBgYE5hbWUgJCQ8dXNlckBob3N0PiQkJycgaXMKK3ByaW50ZWQ7IG90aGVyd2lzZSBvbmx5IGBgJCQ8dXNlckBob3N0PiQkJycgaXMgcHJpbnRlZC4KKworCitNQVBQSU5HIEFVVEhPUlMKKy0tLS0tLS0tLS0tLS0tLQorCitpbmNsdWRlOjptYWlsbWFwLnR4dFtdCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNDRkZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVjay1yZWYtZm9ybWF0LnR4dApAQCAtMCwwICsxLDEyNyBAQAorZ2l0LWNoZWNrLXJlZi1mb3JtYXQoMSkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jaGVjay1yZWYtZm9ybWF0IC0gRW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIG5hbWUgaXMgd2VsbCBmb3JtZWQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZWNrLXJlZi1mb3JtYXQnIFstLW5vcm1hbGl6ZV0KKyAgICAgICBbLS1bbm8tXWFsbG93LW9uZWxldmVsXSBbLS1yZWZzcGVjLXBhdHRlcm5dCisgICAgICAgPHJlZm5hbWU+CisnZ2l0IGNoZWNrLXJlZi1mb3JtYXQnIC0tYnJhbmNoIDxicmFuY2huYW1lLXNob3J0aGFuZD4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDaGVja3MgaWYgYSBnaXZlbiAncmVmbmFtZScgaXMgYWNjZXB0YWJsZSwgYW5kIGV4aXRzIHdpdGggYSBub24temVybworc3RhdHVzIGlmIGl0IGlzIG5vdC4KKworQSByZWZlcmVuY2UgaXMgdXNlZCBpbiBHaXQgdG8gc3BlY2lmeSBicmFuY2hlcyBhbmQgdGFncy4gIEEKK2JyYW5jaCBoZWFkIGlzIHN0b3JlZCBpbiB0aGUgYHJlZnMvaGVhZHNgIGhpZXJhcmNoeSwgd2hpbGUKK2EgdGFnIGlzIHN0b3JlZCBpbiB0aGUgYHJlZnMvdGFnc2AgaGllcmFyY2h5IG9mIHRoZSByZWYgbmFtZXNwYWNlCisodHlwaWNhbGx5IGluIGAkR0lUX0RJUi9yZWZzL2hlYWRzYCBhbmQgYCRHSVRfRElSL3JlZnMvdGFnc2AKK2RpcmVjdG9yaWVzIG9yLCBhcyBlbnRyaWVzIGluIGZpbGUgYCRHSVRfRElSL3BhY2tlZC1yZWZzYAoraWYgcmVmcyBhcmUgcGFja2VkIGJ5IGBnaXQgZ2NgKS4KKworR2l0IGltcG9zZXMgdGhlIGZvbGxvd2luZyBydWxlcyBvbiBob3cgcmVmZXJlbmNlcyBhcmUgbmFtZWQ6CisKKy4gVGhleSBjYW4gaW5jbHVkZSBzbGFzaCBgL2AgZm9yIGhpZXJhcmNoaWNhbCAoZGlyZWN0b3J5KQorICBncm91cGluZywgYnV0IG5vIHNsYXNoLXNlcGFyYXRlZCBjb21wb25lbnQgY2FuIGJlZ2luIHdpdGggYQorICBkb3QgYC5gIG9yIGVuZCB3aXRoIHRoZSBzZXF1ZW5jZSBgLmxvY2tgLgorCisuIFRoZXkgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBgL2AuIFRoaXMgZW5mb3JjZXMgdGhlIHByZXNlbmNlIG9mIGEKKyAgY2F0ZWdvcnkgbGlrZSBgaGVhZHMvYCwgYHRhZ3MvYCBldGMuIGJ1dCB0aGUgYWN0dWFsIG5hbWVzIGFyZSBub3QKKyAgcmVzdHJpY3RlZC4gIElmIHRoZSBgLS1hbGxvdy1vbmVsZXZlbGAgb3B0aW9uIGlzIHVzZWQsIHRoaXMgcnVsZQorICBpcyB3YWl2ZWQuCisKKy4gVGhleSBjYW5ub3QgaGF2ZSB0d28gY29uc2VjdXRpdmUgZG90cyBgLi5gIGFueXdoZXJlLgorCisuIFRoZXkgY2Fubm90IGhhdmUgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzIChpLmUuIGJ5dGVzIHdob3NlCisgIHZhbHVlcyBhcmUgbG93ZXIgdGhhbiBcMDQwLCBvciBcMTc3IGBERUxgKSwgc3BhY2UsIHRpbGRlIGB+YCwKKyAgY2FyZXQgYF5gLCBvciBjb2xvbiBgOmAgYW55d2hlcmUuCisKKy4gVGhleSBjYW5ub3QgaGF2ZSBxdWVzdGlvbi1tYXJrIGA/YCwgYXN0ZXJpc2sgYCpgLCBvciBvcGVuCisgIGJyYWNrZXQgYFtgIGFueXdoZXJlLiAgU2VlIHRoZSBgLS1yZWZzcGVjLXBhdHRlcm5gIG9wdGlvbiBiZWxvdyBmb3IKKyAgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZS4KKworLiBUaGV5IGNhbm5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIHNsYXNoIGAvYCBvciBjb250YWluIG11bHRpcGxlCisgIGNvbnNlY3V0aXZlIHNsYXNoZXMgKHNlZSB0aGUgYC0tbm9ybWFsaXplYCBvcHRpb24gYmVsb3cgZm9yIGFuCisgIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUpCisKKy4gVGhleSBjYW5ub3QgZW5kIHdpdGggYSBkb3QgYC5gLgorCisuIFRoZXkgY2Fubm90IGNvbnRhaW4gYSBzZXF1ZW5jZSBgQHtgLgorCisuIFRoZXkgY2Fubm90IGJlIHRoZSBzaW5nbGUgY2hhcmFjdGVyIGBAYC4KKworLiBUaGV5IGNhbm5vdCBjb250YWluIGEgYFxgLgorCitUaGVzZSBydWxlcyBtYWtlIGl0IGVhc3kgZm9yIHNoZWxsIHNjcmlwdCBiYXNlZCB0b29scyB0byBwYXJzZQorcmVmZXJlbmNlIG5hbWVzLCBwYXRobmFtZSBleHBhbnNpb24gYnkgdGhlIHNoZWxsIHdoZW4gYSByZWZlcmVuY2UgbmFtZSBpcyB1c2VkCit1bnF1b3RlZCAoYnkgbWlzdGFrZSksIGFuZCBhbHNvIGF2b2lkcyBhbWJpZ3VpdGllcyBpbiBjZXJ0YWluCityZWZlcmVuY2UgbmFtZSBleHByZXNzaW9ucyAoc2VlIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddKToKKworLiBBIGRvdWJsZS1kb3QgYC4uYCBpcyBvZnRlbiB1c2VkIGFzIGluIGByZWYxLi5yZWYyYCwgYW5kIGluIHNvbWUKKyAgY29udGV4dHMgdGhpcyBub3RhdGlvbiBtZWFucyBgXnJlZjEgcmVmMmAgKGkuZS4gbm90IGluCisgIGByZWYxYCBhbmQgaW4gYHJlZjJgKS4KKworLiBBIHRpbGRlIGB+YCBhbmQgY2FyZXQgYF5gIGFyZSB1c2VkIHRvIGludHJvZHVjZSB0aGUgcG9zdGZpeAorICAnbnRoIHBhcmVudCcgYW5kICdwZWVsIG9uaW9uJyBvcGVyYXRpb24uCisKKy4gQSBjb2xvbiBgOmAgaXMgdXNlZCBhcyBpbiBgc3JjcmVmOmRzdHJlZmAgdG8gbWVhbiAidXNlIHNyY3JlZlwncworICB2YWx1ZSBhbmQgc3RvcmUgaXQgaW4gZHN0cmVmIiBpbiBmZXRjaCBhbmQgcHVzaCBvcGVyYXRpb25zLgorICBJdCBtYXkgYWxzbyBiZSB1c2VkIHRvIHNlbGVjdCBhIHNwZWNpZmljIG9iamVjdCBzdWNoIGFzIHdpdGgKKyAgJ2dpdCBjYXQtZmlsZSc6ICJnaXQgY2F0LWZpbGUgYmxvYiB2MS4zLjM6cmVmcy5jIi4KKworLiBhdC1vcGVuLWJyYWNlIGBAe2AgaXMgdXNlZCBhcyBhIG5vdGF0aW9uIHRvIGFjY2VzcyBhIHJlZmxvZyBlbnRyeS4KKworV2l0aCB0aGUgYC0tYnJhbmNoYCBvcHRpb24sIGl0IGV4cGFuZHMgdGhlIGBgcHJldmlvdXMgYnJhbmNoIHN5bnRheCcnCitgQHstbn1gLiAgRm9yIGV4YW1wbGUsIGBAey0xfWAgaXMgYSB3YXkgdG8gcmVmZXIgdGhlIGxhc3QgYnJhbmNoIHlvdQord2VyZSBvbi4gIFRoaXMgb3B0aW9uIHNob3VsZCBiZSB1c2VkIGJ5IHBvcmNlbGFpbnMgdG8gYWNjZXB0IHRoaXMKK3N5bnRheCBhbnl3aGVyZSBhIGJyYW5jaCBuYW1lIGlzIGV4cGVjdGVkLCBzbyB0aGV5IGNhbiBhY3QgYXMgaWYgeW91Cit0eXBlZCB0aGUgYnJhbmNoIG5hbWUuCisKK09QVElPTlMKKy0tLS0tLS0KKy0tW25vLV1hbGxvdy1vbmVsZXZlbDo6CisJQ29udHJvbHMgd2hldGhlciBvbmUtbGV2ZWwgcmVmbmFtZXMgYXJlIGFjY2VwdGVkIChpLmUuLAorCXJlZm5hbWVzIHRoYXQgZG8gbm90IGNvbnRhaW4gbXVsdGlwbGUgYC9gLXNlcGFyYXRlZAorCWNvbXBvbmVudHMpLiAgVGhlIGRlZmF1bHQgaXMgYC0tbm8tYWxsb3ctb25lbGV2ZWxgLgorCistLXJlZnNwZWMtcGF0dGVybjo6CisJSW50ZXJwcmV0IDxyZWZuYW1lPiBhcyBhIHJlZmVyZW5jZSBuYW1lIHBhdHRlcm4gZm9yIGEgcmVmc3BlYworCShhcyB1c2VkIHdpdGggcmVtb3RlIHJlcG9zaXRvcmllcykuICBJZiB0aGlzIG9wdGlvbiBpcworCWVuYWJsZWQsIDxyZWZuYW1lPiBpcyBhbGxvd2VkIHRvIGNvbnRhaW4gYSBzaW5nbGUgYCpgCisJaW4gdGhlIHJlZnNwZWMgKGUuZy4sIGBmb28vYmFyKi9iYXpgIG9yIGBmb28vYmFyKmJhei9gCisJYnV0IG5vdCBgZm9vL2JhciovYmF6KmApLgorCistLW5vcm1hbGl6ZTo6CisJTm9ybWFsaXplICdyZWZuYW1lJyBieSByZW1vdmluZyBhbnkgbGVhZGluZyBzbGFzaCAoYC9gKQorCWNoYXJhY3RlcnMgYW5kIGNvbGxhcHNpbmcgcnVucyBvZiBhZGphY2VudCBzbGFzaGVzIGJldHdlZW4KKwluYW1lIGNvbXBvbmVudHMgaW50byBhIHNpbmdsZSBzbGFzaC4gIElmZiB0aGUgbm9ybWFsaXplZAorCXJlZm5hbWUgaXMgdmFsaWQgdGhlbiBwcmludCBpdCB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQKKwl3aXRoIGEgc3RhdHVzIG9mIDAuICAoYC0tcHJpbnRgIGlzIGEgZGVwcmVjYXRlZCB3YXkgdG8gc3BlbGwKKwlgLS1ub3JtYWxpemVgLikKKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBQcmludCB0aGUgbmFtZSBvZiB0aGUgcHJldmlvdXMgYnJhbmNoOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9CistLS0tLS0tLS0tLS0KKworKiBEZXRlcm1pbmUgdGhlIHJlZmVyZW5jZSBuYW1lIHRvIHVzZSBmb3IgYSBuZXcgYnJhbmNoOgorKworLS0tLS0tLS0tLS0tCiskIHJlZj0kKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tbm9ybWFsaXplICJyZWZzL2hlYWRzLyRuZXdicmFuY2giKSB8fAorZGllICJ3ZSBkbyBub3QgbGlrZSAnJG5ld2JyYW5jaCcgYXMgYSBicmFuY2ggbmFtZS4iCistLS0tLS0tLS0tLS0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVja291dC1pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzM2U3YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LWluZGV4LnR4dApAQCAtMCwwICsxLDE3NyBAQAorZ2l0LWNoZWNrb3V0LWluZGV4KDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNoZWNrb3V0LWluZGV4IC0gQ29weSBmaWxlcyBmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZWNrb3V0LWluZGV4JyBbLXVdIFstcV0gWy1hXSBbLWZdIFstbl0gWy0tcHJlZml4PTxzdHJpbmc+XQorCQkgICBbLS1zdGFnZT08bnVtYmVyPnxhbGxdCisJCSAgIFstLXRlbXBdCisJCSAgIFstel0gWy0tc3RkaW5dCisJCSAgIFstLV0gWzxmaWxlPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitXaWxsIGNvcHkgYWxsIGZpbGVzIGxpc3RlZCBmcm9tIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkKKyhub3Qgb3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXMpLgorCitPUFRJT05TCistLS0tLS0tCistdTo6CistLWluZGV4OjoKKwl1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBmb3IgdGhlIGNoZWNrZWQgb3V0IGVudHJpZXMgaW4KKwl0aGUgaW5kZXggZmlsZS4KKworLXE6OgorLS1xdWlldDo6CisJYmUgcXVpZXQgaWYgZmlsZXMgZXhpc3Qgb3IgYXJlIG5vdCBpbiB0aGUgaW5kZXgKKworLWY6OgorLS1mb3JjZTo6CisJZm9yY2VzIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBmaWxlcworCistYTo6CistLWFsbDo6CisJY2hlY2tzIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4LiAgQ2Fubm90IGJlIHVzZWQKKwl0b2dldGhlciB3aXRoIGV4cGxpY2l0IGZpbGVuYW1lcy4KKworLW46OgorLS1uby1jcmVhdGU6OgorCURvbid0IGNoZWNrb3V0IG5ldyBmaWxlcywgb25seSByZWZyZXNoIGZpbGVzIGFscmVhZHkgY2hlY2tlZAorCW91dC4KKworLS1wcmVmaXg9PHN0cmluZz46OgorCVdoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4gKHVzdWFsbHkgYSBkaXJlY3RvcnkKKwlpbmNsdWRpbmcgYSB0cmFpbGluZyAvKQorCistLXN0YWdlPTxudW1iZXI+fGFsbDo6CisJSW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdW5tZXJnZWQgZW50cmllcywgY29weSBvdXQgdGhlCisJZmlsZXMgZnJvbSBuYW1lZCBzdGFnZS4gIDxudW1iZXI+IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAzLgorCU5vdGU6IC0tc3RhZ2U9YWxsIGF1dG9tYXRpY2FsbHkgaW1wbGllcyAtLXRlbXAuCisKKy0tdGVtcDo6CisJSW5zdGVhZCBvZiBjb3B5aW5nIHRoZSBmaWxlcyB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkKKwl3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMuICBUaGUgdGVtcG9yYXJ5IG5hbWUKKwlhc3NvY2lhdGlvbnMgd2lsbCBiZSB3cml0dGVuIHRvIHN0ZG91dC4KKworLS1zdGRpbjo6CisJSW5zdGVhZCBvZiB0YWtpbmcgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBjb21tYW5kIGxpbmUsCisJcmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LiAgUGF0aHMgYXJlCisJc2VwYXJhdGVkIGJ5IExGIChpLmUuIG9uZSBwYXRoIHBlciBsaW5lKSBieSBkZWZhdWx0LgorCistejo6CisJT25seSBtZWFuaW5nZnVsIHdpdGggYC0tc3RkaW5gOyBwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGgKKwlOVUwgY2hhcmFjdGVyIGluc3RlYWQgb2YgTEYuCisKK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KKworVGhlIG9yZGVyIG9mIHRoZSBmbGFncyB1c2VkIHRvIG1hdHRlciwgYnV0IG5vdCBhbnltb3JlLgorCitKdXN0IGRvaW5nIGBnaXQgY2hlY2tvdXQtaW5kZXhgIGRvZXMgbm90aGluZy4gWW91IHByb2JhYmx5IG1lYW50CitgZ2l0IGNoZWNrb3V0LWluZGV4IC1hYC4gQW5kIGlmIHlvdSB3YW50IHRvIGZvcmNlIGl0LCB5b3Ugd2FudAorYGdpdCBjaGVja291dC1pbmRleCAtZiAtYWAuCisKK0ludHVpdGl2ZW5lc3MgaXMgbm90IHRoZSBnb2FsIGhlcmUuIFJlcGVhdGFiaWxpdHkgaXMuIFRoZSByZWFzb24gZm9yCit0aGUgIm5vIGFyZ3VtZW50cyBtZWFucyBubyB3b3JrIiBiZWhhdmlvciBpcyB0aGF0IGZyb20gc2NyaXB0cyB5b3UgYXJlCitzdXBwb3NlZCB0byBiZSBhYmxlIHRvIGRvOgorCistLS0tLS0tLS0tLS0tLS0tCiskIGZpbmQgLiAtbmFtZSAnKi5oJyAtcHJpbnQwIHwgeGFyZ3MgLTAgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tCistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgZm9yY2UgYWxsIGV4aXN0aW5nIGAqLmhgIGZpbGVzIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlaXIKK2NhY2hlZCBjb3BpZXMuIElmIGFuIGVtcHR5IGNvbW1hbmQgbGluZSBpbXBsaWVkICJhbGwiLCB0aGVuIHRoaXMgd291bGQKK2ZvcmNlLXJlZnJlc2ggZXZlcnl0aGluZyBpbiB0aGUgaW5kZXgsIHdoaWNoIHdhcyBub3QgdGhlIHBvaW50LiAgQnV0CitzaW5jZSAnZ2l0IGNoZWNrb3V0LWluZGV4JyBhY2NlcHRzIC0tc3RkaW4gaXQgd291bGQgYmUgZmFzdGVyIHRvIHVzZToKKworLS0tLS0tLS0tLS0tLS0tLQorJCBmaW5kIC4gLW5hbWUgJyouaCcgLXByaW50MCB8IGdpdCBjaGVja291dC1pbmRleCAtZiAteiAtLXN0ZGluCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgLS1gIGlzIGp1c3QgYSBnb29kIGlkZWEgd2hlbiB5b3Uga25vdyB0aGUgcmVzdCB3aWxsIGJlIGZpbGVuYW1lczsKK2l0IHdpbGwgcHJldmVudCBwcm9ibGVtcyB3aXRoIGEgZmlsZW5hbWUgb2YsIGZvciBleGFtcGxlLCAgYC1hYC4KK1VzaW5nIGAtLWAgaXMgcHJvYmFibHkgYSBnb29kIHBvbGljeSBpbiBzY3JpcHRzLgorCisKK1VzaW5nIC0tdGVtcCBvciAtLXN0YWdlPWFsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaGVuIGAtLXRlbXBgIGlzIHVzZWQgKG9yIGltcGxpZWQgYnkgYC0tc3RhZ2U9YWxsYCkKKydnaXQgY2hlY2tvdXQtaW5kZXgnIHdpbGwgY3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUgZm9yIGVhY2ggaW5kZXgKK2VudHJ5IGJlaW5nIGNoZWNrZWQgb3V0LiAgVGhlIGluZGV4IHdpbGwgbm90IGJlIHVwZGF0ZWQgd2l0aCBzdGF0CitpbmZvcm1hdGlvbi4gIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgY2FsbGVyIG5lZWRzIGFsbAorc3RhZ2VzIG9mIGFsbCB1bm1lcmdlZCBlbnRyaWVzIHNvIHRoYXQgdGhlIHVubWVyZ2VkIGZpbGVzIGNhbiBiZQorcHJvY2Vzc2VkIGJ5IGFuIGV4dGVybmFsIG1lcmdlIHRvb2wuCisKK0EgbGlzdGluZyB3aWxsIGJlIHdyaXR0ZW4gdG8gc3Rkb3V0IHByb3ZpZGluZyB0aGUgYXNzb2NpYXRpb24gb2YKK3RlbXBvcmFyeSBmaWxlIG5hbWVzIHRvIHRyYWNrZWQgcGF0aCBuYW1lcy4gIFRoZSBsaXN0aW5nIGZvcm1hdAoraGFzIHR3byB2YXJpYXRpb25zOgorCisgICAgLiB0ZW1wbmFtZSBUQUIgcGF0aCBSUworKworVGhlIGZpcnN0IGZvcm1hdCBpcyB3aGF0IGdldHMgdXNlZCB3aGVuIGAtLXN0YWdlYCBpcyBvbWl0dGVkIG9yCitpcyBub3QgYC0tc3RhZ2U9YWxsYC4gVGhlIGZpZWxkIHRlbXBuYW1lIGlzIHRoZSB0ZW1wb3JhcnkgZmlsZQorbmFtZSBob2xkaW5nIHRoZSBmaWxlIGNvbnRlbnQgYW5kIHBhdGggaXMgdGhlIHRyYWNrZWQgcGF0aCBuYW1lIGluCit0aGUgaW5kZXguICBPbmx5IHRoZSByZXF1ZXN0ZWQgZW50cmllcyBhcmUgb3V0cHV0LgorCisgICAgLiBzdGFnZTF0ZW1wIFNQIHN0YWdlMnRlbXAgU1Agc3RhZ2UzdG1wIFRBQiBwYXRoIFJTCisrCitUaGUgc2Vjb25kIGZvcm1hdCBpcyB3aGF0IGdldHMgdXNlZCB3aGVuIGAtLXN0YWdlPWFsbGAuICBUaGUgdGhyZWUKK3N0YWdlIHRlbXBvcmFyeSBmaWVsZHMgKHN0YWdlMXRlbXAsIHN0YWdlMnRlbXAsIHN0YWdlM3RlbXApIGxpc3QgdGhlCituYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSBpZiB0aGVyZSBpcyBhIHN0YWdlIGVudHJ5IGluIHRoZSBpbmRleAorb3IgYC5gIGlmIHRoZXJlIGlzIG5vIHN0YWdlIGVudHJ5LiAgUGF0aHMgd2hpY2ggb25seSBoYXZlIGEgc3RhZ2UgMAorZW50cnkgd2lsbCBhbHdheXMgYmUgb21pdHRlZCBmcm9tIHRoZSBvdXRwdXQuCisKK0luIGJvdGggZm9ybWF0cyBSUyAodGhlIHJlY29yZCBzZXBhcmF0b3IpIGlzIG5ld2xpbmUgYnkgZGVmYXVsdAorYnV0IHdpbGwgYmUgdGhlIG51bGwgYnl0ZSBpZiAteiB3YXMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuCitUaGUgdGVtcG9yYXJ5IGZpbGUgbmFtZXMgYXJlIGFsd2F5cyBzYWZlIHN0cmluZ3M7IHRoZXkgd2lsbCBuZXZlcgorY29udGFpbiBkaXJlY3Rvcnkgc2VwYXJhdG9ycyBvciB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuICBUaGUgcGF0aAorZmllbGQgaXMgYWx3YXlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgdGhlIHRlbXBvcmFyeQorZmlsZSBuYW1lcyBhcmUgYWx3YXlzIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5LgorCitJZiB0aGUgb2JqZWN0IGJlaW5nIGNvcGllZCBvdXQgdG8gYSB0ZW1wb3JhcnkgZmlsZSBpcyBhIHN5bWJvbGljCitsaW5rIHRoZSBjb250ZW50IG9mIHRoZSBsaW5rIHdpbGwgYmUgd3JpdHRlbiB0byBhIG5vcm1hbCBmaWxlLiAgSXQgaXMKK3VwIHRvIHRoZSBlbmQtdXNlciBvciB0aGUgUG9yY2VsYWluIHRvIG1ha2UgdXNlIG9mIHRoaXMgaW5mb3JtYXRpb24uCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCitUbyB1cGRhdGUgYW5kIHJlZnJlc2ggb25seSB0aGUgZmlsZXMgYWxyZWFkeSBjaGVja2VkIG91dDo6CisrCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dC1pbmRleCAtbiAtZiAtYSAmJiBnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLW1pc3NpbmcgLS1yZWZyZXNoCistLS0tLS0tLS0tLS0tLS0tCisKK1VzaW5nICdnaXQgY2hlY2tvdXQtaW5kZXgnIHRvICJleHBvcnQgYW4gZW50aXJlIHRyZWUiOjoKKwlUaGUgcHJlZml4IGFiaWxpdHkgYmFzaWNhbGx5IG1ha2VzIGl0IHRyaXZpYWwgdG8gdXNlCisJJ2dpdCBjaGVja291dC1pbmRleCcgYXMgYW4gImV4cG9ydCBhcyB0cmVlIiBmdW5jdGlvbi4KKwlKdXN0IHJlYWQgdGhlIGRlc2lyZWQgdHJlZSBpbnRvIHRoZSBpbmRleCwgYW5kIGRvOgorKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9Z2l0LWV4cG9ydC1kaXIvIC1hCistLS0tLS0tLS0tLS0tLS0tCisrCitgZ2l0IGNoZWNrb3V0LWluZGV4YCB3aWxsICJleHBvcnQiIHRoZSBpbmRleCBpbnRvIHRoZSBzcGVjaWZpZWQKK2RpcmVjdG9yeS4KKysKK1RoZSBmaW5hbCAiLyIgaXMgaW1wb3J0YW50LiBUaGUgZXhwb3J0ZWQgbmFtZSBpcyBsaXRlcmFsbHkganVzdAorcHJlZml4ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHN0cmluZy4gIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUKK2ZvbGxvd2luZyBleGFtcGxlLgorCitFeHBvcnQgZmlsZXMgd2l0aCBhIHByZWZpeDo6CisrCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD0ubWVyZ2VkLSBNYWtlZmlsZQorLS0tLS0tLS0tLS0tLS0tLQorKworVGhpcyB3aWxsIGNoZWNrIG91dCB0aGUgY3VycmVudGx5IGNhY2hlZCBjb3B5IG9mIGBNYWtlZmlsZWAKK2ludG8gdGhlIGZpbGUgYC5tZXJnZWQtTWFrZWZpbGVgLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZWNrb3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjY5ZmIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlY2tvdXQudHh0CkBAIC0wLDAgKzEsNTA0IEBACitnaXQtY2hlY2tvdXQoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlY2tvdXQgLSBTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZWNrb3V0JyBbLXFdIFstZl0gWy1tXSBbPGJyYW5jaD5dCisnZ2l0IGNoZWNrb3V0JyBbLXFdIFstZl0gWy1tXSAtLWRldGFjaCBbPGJyYW5jaD5dCisnZ2l0IGNoZWNrb3V0JyBbLXFdIFstZl0gWy1tXSBbLS1kZXRhY2hdIDxjb21taXQ+CisnZ2l0IGNoZWNrb3V0JyBbLXFdIFstZl0gWy1tXSBbWy1ifC1CfC0tb3JwaGFuXSA8bmV3X2JyYW5jaD5dIFs8c3RhcnRfcG9pbnQ+XQorJ2dpdCBjaGVja291dCcgWy1mfC0tb3Vyc3wtLXRoZWlyc3wtbXwtLWNvbmZsaWN0PTxzdHlsZT5dIFs8dHJlZS1pc2g+XSBbLS1dIDxwYXRocz4uLi4KKydnaXQgY2hlY2tvdXQnIFstcHwtLXBhdGNoXSBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitVcGRhdGVzIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gbWF0Y2ggdGhlIHZlcnNpb24gaW4gdGhlIGluZGV4CitvciB0aGUgc3BlY2lmaWVkIHRyZWUuICBJZiBubyBwYXRocyBhcmUgZ2l2ZW4sICdnaXQgY2hlY2tvdXQnIHdpbGwKK2Fsc28gdXBkYXRlIGBIRUFEYCB0byBzZXQgdGhlIHNwZWNpZmllZCBicmFuY2ggYXMgdGhlIGN1cnJlbnQKK2JyYW5jaC4KKworJ2dpdCBjaGVja291dCcgPGJyYW5jaD46OgorCVRvIHByZXBhcmUgZm9yIHdvcmtpbmcgb24gPGJyYW5jaD4sIHN3aXRjaCB0byBpdCBieSB1cGRhdGluZworCXRoZSBpbmRleCBhbmQgdGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBieSBwb2ludGluZworCUhFQUQgYXQgdGhlIGJyYW5jaC4gTG9jYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgZmlsZXMgaW4gdGhlCisJd29ya2luZyB0cmVlIGFyZSBrZXB0LCBzbyB0aGF0IHRoZXkgY2FuIGJlIGNvbW1pdHRlZCB0byB0aGUKKwk8YnJhbmNoPi4KKysKK0lmIDxicmFuY2g+IGlzIG5vdCBmb3VuZCBidXQgdGhlcmUgZG9lcyBleGlzdCBhIHRyYWNraW5nIGJyYW5jaCBpbgorZXhhY3RseSBvbmUgcmVtb3RlIChjYWxsIGl0IDxyZW1vdGU+KSB3aXRoIGEgbWF0Y2hpbmcgbmFtZSwgdHJlYXQgYXMKK2VxdWl2YWxlbnQgdG8KKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgPGJyYW5jaD4gLS10cmFjayA8cmVtb3RlPi88YnJhbmNoPgorLS0tLS0tLS0tLS0tCisrCitZb3UgY291bGQgb21pdCA8YnJhbmNoPiwgaW4gd2hpY2ggY2FzZSB0aGUgY29tbWFuZCBkZWdlbmVyYXRlcyB0bworImNoZWNrIG91dCB0aGUgY3VycmVudCBicmFuY2giLCB3aGljaCBpcyBhIGdsb3JpZmllZCBuby1vcCB3aXRoIGEKK3JhdGhlciBleHBlbnNpdmUgc2lkZS1lZmZlY3RzIHRvIHNob3cgb25seSB0aGUgdHJhY2tpbmcgaW5mb3JtYXRpb24sCitpZiBleGlzdHMsIGZvciB0aGUgY3VycmVudCBicmFuY2guCisKKydnaXQgY2hlY2tvdXQnIC1ifC1CIDxuZXdfYnJhbmNoPiBbPHN0YXJ0IHBvaW50Pl06OgorCisJU3BlY2lmeWluZyBgLWJgIGNhdXNlcyBhIG5ldyBicmFuY2ggdG8gYmUgY3JlYXRlZCBhcyBpZgorCWxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSB3ZXJlIGNhbGxlZCBhbmQgdGhlbiBjaGVja2VkIG91dC4gIEluCisJdGhpcyBjYXNlIHlvdSBjYW4gdXNlIHRoZSBgLS10cmFja2Agb3IgYC0tbm8tdHJhY2tgIG9wdGlvbnMsCisJd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gJ2dpdCBicmFuY2gnLiAgQXMgYSBjb252ZW5pZW5jZSwKKwlgLS10cmFja2Agd2l0aG91dCBgLWJgIGltcGxpZXMgYnJhbmNoIGNyZWF0aW9uOyBzZWUgdGhlCisJZGVzY3JpcHRpb24gb2YgYC0tdHJhY2tgIGJlbG93LgorKworSWYgYC1CYCBpcyBnaXZlbiwgPG5ld19icmFuY2g+IGlzIGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBleGlzdDsgb3RoZXJ3aXNlLCBpdAoraXMgcmVzZXQuIFRoaXMgaXMgdGhlIHRyYW5zYWN0aW9uYWwgZXF1aXZhbGVudCBvZgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggLWYgPGJyYW5jaD4gWzxzdGFydCBwb2ludD5dCiskIGdpdCBjaGVja291dCA8YnJhbmNoPgorLS0tLS0tLS0tLS0tCisrCit0aGF0IGlzIHRvIHNheSwgdGhlIGJyYW5jaCBpcyBub3QgcmVzZXQvY3JlYXRlZCB1bmxlc3MgImdpdCBjaGVja291dCIgaXMKK3N1Y2Nlc3NmdWwuCisKKydnaXQgY2hlY2tvdXQnIC0tZGV0YWNoIFs8YnJhbmNoPl06OgorJ2dpdCBjaGVja291dCcgWy0tZGV0YWNoXSA8Y29tbWl0Pjo6CisKKwlQcmVwYXJlIHRvIHdvcmsgb24gdG9wIG9mIDxjb21taXQ+LCBieSBkZXRhY2hpbmcgSEVBRCBhdCBpdAorCShzZWUgIkRFVEFDSEVEIEhFQUQiIHNlY3Rpb24pLCBhbmQgdXBkYXRpbmcgdGhlIGluZGV4IGFuZCB0aGUKKwlmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLiAgTG9jYWwgbW9kaWZpY2F0aW9ucyB0byB0aGUgZmlsZXMKKwlpbiB0aGUgd29ya2luZyB0cmVlIGFyZSBrZXB0LCBzbyB0aGF0IHRoZSByZXN1bHRpbmcgd29ya2luZworCXRyZWUgd2lsbCBiZSB0aGUgc3RhdGUgcmVjb3JkZWQgaW4gdGhlIGNvbW1pdCBwbHVzIHRoZSBsb2NhbAorCW1vZGlmaWNhdGlvbnMuCisrCitXaGVuIHRoZSA8Y29tbWl0PiBhcmd1bWVudCBpcyBhIGJyYW5jaCBuYW1lLCB0aGUgYC0tZGV0YWNoYCBvcHRpb24gY2FuCitiZSB1c2VkIHRvIGRldGFjaCBIRUFEIGF0IHRoZSB0aXAgb2YgdGhlIGJyYW5jaCAoYGdpdCBjaGVja291dAorPGJyYW5jaD5gIHdvdWxkIGNoZWNrIG91dCB0aGF0IGJyYW5jaCB3aXRob3V0IGRldGFjaGluZyBIRUFEKS4KKysKK09taXR0aW5nIDxicmFuY2g+IGRldGFjaGVzIEhFQUQgYXQgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2guCisKKydnaXQgY2hlY2tvdXQnIFstcHwtLXBhdGNoXSBbPHRyZWUtaXNoPl0gWy0tXSA8cGF0aHNwZWM+Li4uOjoKKworCVdoZW4gPHBhdGhzPiBvciBgLS1wYXRjaGAgYXJlIGdpdmVuLCAnZ2l0IGNoZWNrb3V0JyBkb2VzICpub3QqCisJc3dpdGNoIGJyYW5jaGVzLiAgSXQgdXBkYXRlcyB0aGUgbmFtZWQgcGF0aHMgaW4gdGhlIHdvcmtpbmcgdHJlZQorCWZyb20gdGhlIGluZGV4IGZpbGUgb3IgZnJvbSBhIG5hbWVkIDx0cmVlLWlzaD4gKG1vc3Qgb2Z0ZW4gYQorCWNvbW1pdCkuICBJbiB0aGlzIGNhc2UsIHRoZSBgLWJgIGFuZCBgLS10cmFja2Agb3B0aW9ucyBhcmUKKwltZWFuaW5nbGVzcyBhbmQgZ2l2aW5nIGVpdGhlciBvZiB0aGVtIHJlc3VsdHMgaW4gYW4gZXJyb3IuICBUaGUKKwk8dHJlZS1pc2g+IGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBzcGVjaWZpYyB0cmVlLWlzaAorCShpLmUuICBjb21taXQsIHRhZyBvciB0cmVlKSB0byB1cGRhdGUgdGhlIGluZGV4IGZvciB0aGUgZ2l2ZW4KKwlwYXRocyBiZWZvcmUgdXBkYXRpbmcgdGhlIHdvcmtpbmcgdHJlZS4KKysKKydnaXQgY2hlY2tvdXQnIHdpdGggPHBhdGhzPiBvciBgLS1wYXRjaGAgaXMgdXNlZCB0byByZXN0b3JlIG1vZGlmaWVkIG9yCitkZWxldGVkIHBhdGhzIHRvIHRoZWlyIG9yaWdpbmFsIGNvbnRlbnRzIGZyb20gdGhlIGluZGV4IG9yIHJlcGxhY2UgcGF0aHMKK3dpdGggdGhlIGNvbnRlbnRzIGZyb20gYSBuYW1lZCA8dHJlZS1pc2g+IChtb3N0IG9mdGVuIGEgY29tbWl0LWlzaCkuCisrCitUaGUgaW5kZXggbWF5IGNvbnRhaW4gdW5tZXJnZWQgZW50cmllcyBiZWNhdXNlIG9mIGEgcHJldmlvdXMgZmFpbGVkIG1lcmdlLgorQnkgZGVmYXVsdCwgaWYgeW91IHRyeSB0byBjaGVjayBvdXQgc3VjaCBhbiBlbnRyeSBmcm9tIHRoZSBpbmRleCwgdGhlCitjaGVja291dCBvcGVyYXRpb24gd2lsbCBmYWlsIGFuZCBub3RoaW5nIHdpbGwgYmUgY2hlY2tlZCBvdXQuCitVc2luZyBgLWZgIHdpbGwgaWdub3JlIHRoZXNlIHVubWVyZ2VkIGVudHJpZXMuICBUaGUgY29udGVudHMgZnJvbSBhCitzcGVjaWZpYyBzaWRlIG9mIHRoZSBtZXJnZSBjYW4gYmUgY2hlY2tlZCBvdXQgb2YgdGhlIGluZGV4IGJ5Cit1c2luZyBgLS1vdXJzYCBvciBgLS10aGVpcnNgLiAgV2l0aCBgLW1gLCBjaGFuZ2VzIG1hZGUgdG8gdGhlIHdvcmtpbmcgdHJlZQorZmlsZSBjYW4gYmUgZGlzY2FyZGVkIHRvIHJlLWNyZWF0ZSB0aGUgb3JpZ2luYWwgY29uZmxpY3RlZCBtZXJnZSByZXN1bHQuCisKK09QVElPTlMKKy0tLS0tLS0KKy1xOjoKKy0tcXVpZXQ6OgorCVF1aWV0LCBzdXBwcmVzcyBmZWVkYmFjayBtZXNzYWdlcy4KKworLWY6OgorLS1mb3JjZTo6CisJV2hlbiBzd2l0Y2hpbmcgYnJhbmNoZXMsIHByb2NlZWQgZXZlbiBpZiB0aGUgaW5kZXggb3IgdGhlCisJd29ya2luZyB0cmVlIGRpZmZlcnMgZnJvbSBIRUFELiAgVGhpcyBpcyB1c2VkIHRvIHRocm93IGF3YXkKKwlsb2NhbCBjaGFuZ2VzLgorKworV2hlbiBjaGVja2luZyBvdXQgcGF0aHMgZnJvbSB0aGUgaW5kZXgsIGRvIG5vdCBmYWlsIHVwb24gdW5tZXJnZWQKK2VudHJpZXM7IGluc3RlYWQsIHVubWVyZ2VkIGVudHJpZXMgYXJlIGlnbm9yZWQuCisKKy0tb3Vyczo6CistLXRoZWlyczo6CisJV2hlbiBjaGVja2luZyBvdXQgcGF0aHMgZnJvbSB0aGUgaW5kZXgsIGNoZWNrIG91dCBzdGFnZSAjMgorCSgnb3VycycpIG9yICMzICgndGhlaXJzJykgZm9yIHVubWVyZ2VkIHBhdGhzLgorKworTm90ZSB0aGF0IGR1cmluZyBgZ2l0IHJlYmFzZWAgYW5kIGBnaXQgcHVsbCAtLXJlYmFzZWAsICdvdXJzJyBhbmQKKyd0aGVpcnMnIG1heSBhcHBlYXIgc3dhcHBlZDsgYC0tb3Vyc2AgZ2l2ZXMgdGhlIHZlcnNpb24gZnJvbSB0aGUKK2JyYW5jaCB0aGUgY2hhbmdlcyBhcmUgcmViYXNlZCBvbnRvLCB3aGlsZSBgLS10aGVpcnNgIGdpdmVzIHRoZQordmVyc2lvbiBmcm9tIHRoZSBicmFuY2ggdGhhdCBob2xkcyB5b3VyIHdvcmsgdGhhdCBpcyBiZWluZyByZWJhc2VkLgorKworVGhpcyBpcyBiZWNhdXNlIGByZWJhc2VgIGlzIHVzZWQgaW4gYSB3b3JrZmxvdyB0aGF0IHRyZWF0cyB0aGUKK2hpc3RvcnkgYXQgdGhlIHJlbW90ZSBhcyB0aGUgc2hhcmVkIGNhbm9uaWNhbCBvbmUsIGFuZCB0cmVhdHMgdGhlCit3b3JrIGRvbmUgb24gdGhlIGJyYW5jaCB5b3UgYXJlIHJlYmFzaW5nIGFzIHRoZSB0aGlyZC1wYXJ0eSB3b3JrIHRvCitiZSBpbnRlZ3JhdGVkLCBhbmQgeW91IGFyZSB0ZW1wb3JhcmlseSBhc3N1bWluZyB0aGUgcm9sZSBvZiB0aGUKK2tlZXBlciBvZiB0aGUgY2Fub25pY2FsIGhpc3RvcnkgZHVyaW5nIHRoZSByZWJhc2UuICBBcyB0aGUga2VlcGVyIG9mCit0aGUgY2Fub25pY2FsIGhpc3RvcnksIHlvdSBuZWVkIHRvIHZpZXcgdGhlIGhpc3RvcnkgZnJvbSB0aGUgcmVtb3RlCithcyBgb3Vyc2AgKGkuZS4gIm91ciBzaGFyZWQgY2Fub25pY2FsIGhpc3RvcnkiKSwgd2hpbGUgd2hhdCB5b3UgZGlkCitvbiB5b3VyIHNpZGUgYnJhbmNoIGFzIGB0aGVpcnNgIChpLmUuICJvbmUgY29udHJpYnV0b3IncyB3b3JrIG9uIHRvcAorb2YgaXQiKS4KKworLWIgPG5ld19icmFuY2g+OjoKKwlDcmVhdGUgYSBuZXcgYnJhbmNoIG5hbWVkIDxuZXdfYnJhbmNoPiBhbmQgc3RhcnQgaXQgYXQKKwk8c3RhcnRfcG9pbnQ+OyBzZWUgbGlua2dpdDpnaXQtYnJhbmNoWzFdIGZvciBkZXRhaWxzLgorCistQiA8bmV3X2JyYW5jaD46OgorCUNyZWF0ZXMgdGhlIGJyYW5jaCA8bmV3X2JyYW5jaD4gYW5kIHN0YXJ0IGl0IGF0IDxzdGFydF9wb2ludD47CisJaWYgaXQgYWxyZWFkeSBleGlzdHMsIHRoZW4gcmVzZXQgaXQgdG8gPHN0YXJ0X3BvaW50Pi4gVGhpcyBpcworCWVxdWl2YWxlbnQgdG8gcnVubmluZyAiZ2l0IGJyYW5jaCIgd2l0aCAiLWYiOyBzZWUKKwlsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yIGRldGFpbHMuCisKKy10OjoKKy0tdHJhY2s6OgorCVdoZW4gY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCBzZXQgdXAgInVwc3RyZWFtIiBjb25maWd1cmF0aW9uLiBTZWUKKwkiLS10cmFjayIgaW4gbGlua2dpdDpnaXQtYnJhbmNoWzFdIGZvciBkZXRhaWxzLgorKworSWYgbm8gJy1iJyBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBuYW1lIG9mIHRoZSBuZXcgYnJhbmNoIHdpbGwgYmUKK2Rlcml2ZWQgZnJvbSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCwgYnkgbG9va2luZyBhdCB0aGUgbG9jYWwgcGFydCBvZgordGhlIHJlZnNwZWMgY29uZmlndXJlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcmVtb3RlLCBhbmQgdGhlbiBzdHJpcHBpbmcKK3RoZSBpbml0aWFsIHBhcnQgdXAgdG8gdGhlICIqIi4KK1RoaXMgd291bGQgdGVsbCB1cyB0byB1c2UgImhhY2siIGFzIHRoZSBsb2NhbCBicmFuY2ggd2hlbiBicmFuY2hpbmcKK29mZiBvZiAib3JpZ2luL2hhY2siIChvciAicmVtb3Rlcy9vcmlnaW4vaGFjayIsIG9yIGV2ZW4KKyJyZWZzL3JlbW90ZXMvb3JpZ2luL2hhY2siKS4gIElmIHRoZSBnaXZlbiBuYW1lIGhhcyBubyBzbGFzaCwgb3IgdGhlIGFib3ZlCitndWVzc2luZyByZXN1bHRzIGluIGFuIGVtcHR5IG5hbWUsIHRoZSBndWVzc2luZyBpcyBhYm9ydGVkLiAgWW91IGNhbgorZXhwbGljaXRseSBnaXZlIGEgbmFtZSB3aXRoICctYicgaW4gc3VjaCBhIGNhc2UuCisKKy0tbm8tdHJhY2s6OgorCURvIG5vdCBzZXQgdXAgInVwc3RyZWFtIiBjb25maWd1cmF0aW9uLCBldmVuIGlmIHRoZQorCWJyYW5jaC5hdXRvU2V0dXBNZXJnZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGlzIHRydWUuCisKKy1sOjoKKwlDcmVhdGUgdGhlIG5ldyBicmFuY2gncyByZWZsb2c7IHNlZSBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gZm9yCisJZGV0YWlscy4KKworLS1kZXRhY2g6OgorCVJhdGhlciB0aGFuIGNoZWNraW5nIG91dCBhIGJyYW5jaCB0byB3b3JrIG9uIGl0LCBjaGVjayBvdXQgYQorCWNvbW1pdCBmb3IgaW5zcGVjdGlvbiBhbmQgZGlzY2FyZGFibGUgZXhwZXJpbWVudHMuCisJVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiAiZ2l0IGNoZWNrb3V0IDxjb21taXQ+IiB3aGVuCisJPGNvbW1pdD4gaXMgbm90IGEgYnJhbmNoIG5hbWUuICBTZWUgdGhlICJERVRBQ0hFRCBIRUFEIiBzZWN0aW9uCisJYmVsb3cgZm9yIGRldGFpbHMuCisKKy0tb3JwaGFuIDxuZXdfYnJhbmNoPjo6CisJQ3JlYXRlIGEgbmV3ICdvcnBoYW4nIGJyYW5jaCwgbmFtZWQgPG5ld19icmFuY2g+LCBzdGFydGVkIGZyb20KKwk8c3RhcnRfcG9pbnQ+IGFuZCBzd2l0Y2ggdG8gaXQuICBUaGUgZmlyc3QgY29tbWl0IG1hZGUgb24gdGhpcworCW5ldyBicmFuY2ggd2lsbCBoYXZlIG5vIHBhcmVudHMgYW5kIGl0IHdpbGwgYmUgdGhlIHJvb3Qgb2YgYSBuZXcKKwloaXN0b3J5IHRvdGFsbHkgZGlzY29ubmVjdGVkIGZyb20gYWxsIHRoZSBvdGhlciBicmFuY2hlcyBhbmQKKwljb21taXRzLgorKworVGhlIGluZGV4IGFuZCB0aGUgd29ya2luZyB0cmVlIGFyZSBhZGp1c3RlZCBhcyBpZiB5b3UgaGFkIHByZXZpb3VzbHkgcnVuCisiZ2l0IGNoZWNrb3V0IDxzdGFydF9wb2ludD4iLiAgVGhpcyBhbGxvd3MgeW91IHRvIHN0YXJ0IGEgbmV3IGhpc3RvcnkKK3RoYXQgcmVjb3JkcyBhIHNldCBvZiBwYXRocyBzaW1pbGFyIHRvIDxzdGFydF9wb2ludD4gYnkgZWFzaWx5IHJ1bm5pbmcKKyJnaXQgY29tbWl0IC1hIiB0byBtYWtlIHRoZSByb290IGNvbW1pdC4KKysKK1RoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHB1Ymxpc2ggdGhlIHRyZWUgZnJvbSBhIGNvbW1pdAord2l0aG91dCBleHBvc2luZyBpdHMgZnVsbCBoaXN0b3J5LiBZb3UgbWlnaHQgd2FudCB0byBkbyB0aGlzIHRvIHB1Ymxpc2gKK2FuIG9wZW4gc291cmNlIGJyYW5jaCBvZiBhIHByb2plY3Qgd2hvc2UgY3VycmVudCB0cmVlIGlzICJjbGVhbiIsIGJ1dAord2hvc2UgZnVsbCBoaXN0b3J5IGNvbnRhaW5zIHByb3ByaWV0YXJ5IG9yIG90aGVyd2lzZSBlbmN1bWJlcmVkIGJpdHMgb2YKK2NvZGUuCisrCitJZiB5b3Ugd2FudCB0byBzdGFydCBhIGRpc2Nvbm5lY3RlZCBoaXN0b3J5IHRoYXQgcmVjb3JkcyBhIHNldCBvZiBwYXRocwordGhhdCBpcyB0b3RhbGx5IGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgb2YgPHN0YXJ0X3BvaW50PiwgdGhlbiB5b3Ugc2hvdWxkCitjbGVhciB0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUgcmlnaHQgYWZ0ZXIgY3JlYXRpbmcgdGhlIG9ycGhhbgorYnJhbmNoIGJ5IHJ1bm5pbmcgImdpdCBybSAtcmYgLiIgZnJvbSB0aGUgdG9wIGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUuCitBZnRlcndhcmRzIHlvdSB3aWxsIGJlIHJlYWR5IHRvIHByZXBhcmUgeW91ciBuZXcgZmlsZXMsIHJlcG9wdWxhdGluZyB0aGUKK3dvcmtpbmcgdHJlZSwgYnkgY29weWluZyB0aGVtIGZyb20gZWxzZXdoZXJlLCBleHRyYWN0aW5nIGEgdGFyYmFsbCwgZXRjLgorCistLWlnbm9yZS1za2lwLXdvcmt0cmVlLWJpdHM6OgorCUluIHNwYXJzZSBjaGVja291dCBtb2RlLCBgZ2l0IGNoZWNrb3V0IC0tIDxwYXRocz5gIHdvdWxkCisJdXBkYXRlIG9ubHkgZW50cmllcyBtYXRjaGVkIGJ5IDxwYXRocz4gYW5kIHNwYXJzZSBwYXR0ZXJucworCWluICRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0LiBUaGlzIG9wdGlvbiBpZ25vcmVzCisJdGhlIHNwYXJzZSBwYXR0ZXJucyBhbmQgYWRkcyBiYWNrIGFueSBmaWxlcyBpbiA8cGF0aHM+LgorCistbTo6CistLW1lcmdlOjoKKwlXaGVuIHN3aXRjaGluZyBicmFuY2hlcywKKwlpZiB5b3UgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zIHRvIG9uZSBvciBtb3JlIGZpbGVzIHRoYXQKKwlhcmUgZGlmZmVyZW50IGJldHdlZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCB0aGUgYnJhbmNoIHRvCisJd2hpY2ggeW91IGFyZSBzd2l0Y2hpbmcsIHRoZSBjb21tYW5kIHJlZnVzZXMgdG8gc3dpdGNoCisJYnJhbmNoZXMgaW4gb3JkZXIgdG8gcHJlc2VydmUgeW91ciBtb2RpZmljYXRpb25zIGluIGNvbnRleHQuCisJSG93ZXZlciwgd2l0aCB0aGlzIG9wdGlvbiwgYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiB0aGUgY3VycmVudAorCWJyYW5jaCwgeW91ciB3b3JraW5nIHRyZWUgY29udGVudHMsIGFuZCB0aGUgbmV3IGJyYW5jaAorCWlzIGRvbmUsIGFuZCB5b3Ugd2lsbCBiZSBvbiB0aGUgbmV3IGJyYW5jaC4KKysKK1doZW4gYSBtZXJnZSBjb25mbGljdCBoYXBwZW5zLCB0aGUgaW5kZXggZW50cmllcyBmb3IgY29uZmxpY3RpbmcKK3BhdGhzIGFyZSBsZWZ0IHVubWVyZ2VkLCBhbmQgeW91IG5lZWQgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3RzCithbmQgbWFyayB0aGUgcmVzb2x2ZWQgcGF0aHMgd2l0aCBgZ2l0IGFkZGAgKG9yIGBnaXQgcm1gIGlmIHRoZSBtZXJnZQorc2hvdWxkIHJlc3VsdCBpbiBkZWxldGlvbiBvZiB0aGUgcGF0aCkuCisrCitXaGVuIGNoZWNraW5nIG91dCBwYXRocyBmcm9tIHRoZSBpbmRleCwgdGhpcyBvcHRpb24gbGV0cyB5b3UgcmVjcmVhdGUKK3RoZSBjb25mbGljdGVkIG1lcmdlIGluIHRoZSBzcGVjaWZpZWQgcGF0aHMuCisKKy0tY29uZmxpY3Q9PHN0eWxlPjo6CisJVGhlIHNhbWUgYXMgLS1tZXJnZSBvcHRpb24gYWJvdmUsIGJ1dCBjaGFuZ2VzIHRoZSB3YXkgdGhlCisJY29uZmxpY3RpbmcgaHVua3MgYXJlIHByZXNlbnRlZCwgb3ZlcnJpZGluZyB0aGUKKwltZXJnZS5jb25mbGljdFN0eWxlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBQb3NzaWJsZSB2YWx1ZXMgYXJlCisJIm1lcmdlIiAoZGVmYXVsdCkgYW5kICJkaWZmMyIgKGluIGFkZGl0aW9uIHRvIHdoYXQgaXMgc2hvd24gYnkKKwkibWVyZ2UiIHN0eWxlLCBzaG93cyB0aGUgb3JpZ2luYWwgY29udGVudHMpLgorCistcDo6CistLXBhdGNoOjoKKwlJbnRlcmFjdGl2ZWx5IHNlbGVjdCBodW5rcyBpbiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZQorCTx0cmVlLWlzaD4gKG9yIHRoZSBpbmRleCwgaWYgdW5zcGVjaWZpZWQpIGFuZCB0aGUgd29ya2luZworCXRyZWUuICBUaGUgY2hvc2VuIGh1bmtzIGFyZSB0aGVuIGFwcGxpZWQgaW4gcmV2ZXJzZSB0byB0aGUKKwl3b3JraW5nIHRyZWUgKGFuZCBpZiBhIDx0cmVlLWlzaD4gd2FzIHNwZWNpZmllZCwgdGhlIGluZGV4KS4KKysKK1RoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHVzZSBgZ2l0IGNoZWNrb3V0IC1wYCB0byBzZWxlY3RpdmVseSBkaXNjYXJkCitlZGl0cyBmcm9tIHlvdXIgY3VycmVudCB3b3JraW5nIHRyZWUuIFNlZSB0aGUgYGBJbnRlcmFjdGl2ZSBNb2RlJycKK3NlY3Rpb24gb2YgbGlua2dpdDpnaXQtYWRkWzFdIHRvIGxlYXJuIGhvdyB0byBvcGVyYXRlIHRoZSBgLS1wYXRjaGAgbW9kZS4KKworLS1pZ25vcmUtb3RoZXItd29ya3RyZWVzOjoKKwlgZ2l0IGNoZWNrb3V0YCByZWZ1c2VzIHdoZW4gdGhlIHdhbnRlZCByZWYgaXMgYWxyZWFkeSBjaGVja2VkCisJb3V0IGJ5IGFub3RoZXIgd29ya3RyZWUuIFRoaXMgb3B0aW9uIG1ha2VzIGl0IGNoZWNrIHRoZSByZWYKKwlvdXQgYW55d2F5LiBJbiBvdGhlciB3b3JkcywgdGhlIHJlZiBjYW4gYmUgaGVsZCBieSBtb3JlIHRoYW4gb25lCisJd29ya3RyZWUuCisKKzxicmFuY2g+OjoKKwlCcmFuY2ggdG8gY2hlY2tvdXQ7IGlmIGl0IHJlZmVycyB0byBhIGJyYW5jaCAoaS5lLiwgYSBuYW1lIHRoYXQsCisJd2hlbiBwcmVwZW5kZWQgd2l0aCAicmVmcy9oZWFkcy8iLCBpcyBhIHZhbGlkIHJlZiksIHRoZW4gdGhhdAorCWJyYW5jaCBpcyBjaGVja2VkIG91dC4gT3RoZXJ3aXNlLCBpZiBpdCByZWZlcnMgdG8gYSB2YWxpZAorCWNvbW1pdCwgeW91ciBIRUFEIGJlY29tZXMgImRldGFjaGVkIiBhbmQgeW91IGFyZSBubyBsb25nZXIgb24KKwlhbnkgYnJhbmNoIChzZWUgYmVsb3cgZm9yIGRldGFpbHMpLgorKworQXMgYSBzcGVjaWFsIGNhc2UsIHRoZSBgIkB7LU59ImAgc3ludGF4IGZvciB0aGUgTi10aCBsYXN0IGJyYW5jaC9jb21taXQKK2NoZWNrcyBvdXQgYnJhbmNoZXMgKGluc3RlYWQgb2YgZGV0YWNoaW5nKS4gIFlvdSBtYXkgYWxzbyBzcGVjaWZ5CitgLWAgd2hpY2ggaXMgc3lub255bW91cyB3aXRoIGAiQHstMX0iYC4KKysKK0FzIGEgZnVydGhlciBzcGVjaWFsIGNhc2UsIHlvdSBtYXkgdXNlIGAiQS4uLkIiYCBhcyBhIHNob3J0Y3V0IGZvciB0aGUKK21lcmdlIGJhc2Ugb2YgYEFgIGFuZCBgQmAgaWYgdGhlcmUgaXMgZXhhY3RseSBvbmUgbWVyZ2UgYmFzZS4gWW91IGNhbgorbGVhdmUgb3V0IGF0IG1vc3Qgb25lIG9mIGBBYCBhbmQgYEJgLCBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvIGBIRUFEYC4KKworPG5ld19icmFuY2g+OjoKKwlOYW1lIGZvciB0aGUgbmV3IGJyYW5jaC4KKworPHN0YXJ0X3BvaW50Pjo6CisJVGhlIG5hbWUgb2YgYSBjb21taXQgYXQgd2hpY2ggdG8gc3RhcnQgdGhlIG5ldyBicmFuY2g7IHNlZQorCWxpbmtnaXQ6Z2l0LWJyYW5jaFsxXSBmb3IgZGV0YWlscy4gRGVmYXVsdHMgdG8gSEVBRC4KKworPHRyZWUtaXNoPjo6CisJVHJlZSB0byBjaGVja291dCBmcm9tICh3aGVuIHBhdGhzIGFyZSBnaXZlbikuIElmIG5vdCBzcGVjaWZpZWQsCisJdGhlIGluZGV4IHdpbGwgYmUgdXNlZC4KKworCisKK0RFVEFDSEVEIEhFQUQKKy0tLS0tLS0tLS0tLS0KK0hFQUQgbm9ybWFsbHkgcmVmZXJzIHRvIGEgbmFtZWQgYnJhbmNoIChlLmcuICdtYXN0ZXInKS4gTWVhbndoaWxlLCBlYWNoCiticmFuY2ggcmVmZXJzIHRvIGEgc3BlY2lmaWMgY29tbWl0LiBMZXQncyBsb29rIGF0IGEgcmVwbyB3aXRoIHRocmVlCitjb21taXRzLCBvbmUgb2YgdGhlbSB0YWdnZWQsIGFuZCB3aXRoIGJyYW5jaCAnbWFzdGVyJyBjaGVja2VkIG91dDoKKworLS0tLS0tLS0tLS0tCisJICAgSEVBRCAocmVmZXJzIHRvIGJyYW5jaCAnbWFzdGVyJykKKwkgICAgfAorCSAgICB2CithLS0tYi0tLWMgIGJyYW5jaCAnbWFzdGVyJyAocmVmZXJzIHRvIGNvbW1pdCAnYycpCisgICAgXgorICAgIHwKKyAgdGFnICd2Mi4wJyAocmVmZXJzIHRvIGNvbW1pdCAnYicpCistLS0tLS0tLS0tLS0KKworV2hlbiBhIGNvbW1pdCBpcyBjcmVhdGVkIGluIHRoaXMgc3RhdGUsIHRoZSBicmFuY2ggaXMgdXBkYXRlZCB0byByZWZlciB0bwordGhlIG5ldyBjb21taXQuIFNwZWNpZmljYWxseSwgJ2dpdCBjb21taXQnIGNyZWF0ZXMgYSBuZXcgY29tbWl0ICdkJywgd2hvc2UKK3BhcmVudCBpcyBjb21taXQgJ2MnLCBhbmQgdGhlbiB1cGRhdGVzIGJyYW5jaCAnbWFzdGVyJyB0byByZWZlciB0byBuZXcKK2NvbW1pdCAnZCcuIEhFQUQgc3RpbGwgcmVmZXJzIHRvIGJyYW5jaCAnbWFzdGVyJyBhbmQgc28gaW5kaXJlY3RseSBub3cgcmVmZXJzCit0byBjb21taXQgJ2QnOgorCistLS0tLS0tLS0tLS0KKyQgZWRpdDsgZ2l0IGFkZDsgZ2l0IGNvbW1pdAorCisJICAgICAgIEhFQUQgKHJlZmVycyB0byBicmFuY2ggJ21hc3RlcicpCisJCXwKKwkJdgorYS0tLWItLS1jLS0tZCAgYnJhbmNoICdtYXN0ZXInIChyZWZlcnMgdG8gY29tbWl0ICdkJykKKyAgICBeCisgICAgfAorICB0YWcgJ3YyLjAnIChyZWZlcnMgdG8gY29tbWl0ICdiJykKKy0tLS0tLS0tLS0tLQorCitJdCBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGJlIGFibGUgdG8gY2hlY2tvdXQgYSBjb21taXQgdGhhdCBpcyBub3QgYXQKK3RoZSB0aXAgb2YgYW55IG5hbWVkIGJyYW5jaCwgb3IgZXZlbiB0byBjcmVhdGUgYSBuZXcgY29tbWl0IHRoYXQgaXMgbm90CityZWZlcmVuY2VkIGJ5IGEgbmFtZWQgYnJhbmNoLiBMZXQncyBsb29rIGF0IHdoYXQgaGFwcGVucyB3aGVuIHdlCitjaGVja291dCBjb21taXQgJ2InIChoZXJlIHdlIHNob3cgdHdvIHdheXMgdGhpcyBtYXkgYmUgZG9uZSk6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgdjIuMCAgIyBvcgorJCBnaXQgY2hlY2tvdXQgbWFzdGVyXl4KKworICAgSEVBRCAocmVmZXJzIHRvIGNvbW1pdCAnYicpCisgICAgfAorICAgIHYKK2EtLS1iLS0tYy0tLWQgIGJyYW5jaCAnbWFzdGVyJyAocmVmZXJzIHRvIGNvbW1pdCAnZCcpCisgICAgXgorICAgIHwKKyAgdGFnICd2Mi4wJyAocmVmZXJzIHRvIGNvbW1pdCAnYicpCistLS0tLS0tLS0tLS0KKworTm90aWNlIHRoYXQgcmVnYXJkbGVzcyBvZiB3aGljaCBjaGVja291dCBjb21tYW5kIHdlIHVzZSwgSEVBRCBub3cgcmVmZXJzCitkaXJlY3RseSB0byBjb21taXQgJ2InLiBUaGlzIGlzIGtub3duIGFzIGJlaW5nIGluIGRldGFjaGVkIEhFQUQgc3RhdGUuCitJdCBtZWFucyBzaW1wbHkgdGhhdCBIRUFEIHJlZmVycyB0byBhIHNwZWNpZmljIGNvbW1pdCwgYXMgb3Bwb3NlZCB0bworcmVmZXJyaW5nIHRvIGEgbmFtZWQgYnJhbmNoLiBMZXQncyBzZWUgd2hhdCBoYXBwZW5zIHdoZW4gd2UgY3JlYXRlIGEgY29tbWl0OgorCistLS0tLS0tLS0tLS0KKyQgZWRpdDsgZ2l0IGFkZDsgZ2l0IGNvbW1pdAorCisgICAgIEhFQUQgKHJlZmVycyB0byBjb21taXQgJ2UnKQorICAgICAgfAorICAgICAgdgorICAgICAgZQorICAgICAvCithLS0tYi0tLWMtLS1kICBicmFuY2ggJ21hc3RlcicgKHJlZmVycyB0byBjb21taXQgJ2QnKQorICAgIF4KKyAgICB8CisgIHRhZyAndjIuMCcgKHJlZmVycyB0byBjb21taXQgJ2InKQorLS0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIG5vdyBhIG5ldyBjb21taXQgJ2UnLCBidXQgaXQgaXMgcmVmZXJlbmNlZCBvbmx5IGJ5IEhFQUQuIFdlIGNhbgorb2YgY291cnNlIGFkZCB5ZXQgYW5vdGhlciBjb21taXQgaW4gdGhpcyBzdGF0ZToKKworLS0tLS0tLS0tLS0tCiskIGVkaXQ7IGdpdCBhZGQ7IGdpdCBjb21taXQKKworCSBIRUFEIChyZWZlcnMgdG8gY29tbWl0ICdmJykKKwkgIHwKKwkgIHYKKyAgICAgIGUtLS1mCisgICAgIC8KK2EtLS1iLS0tYy0tLWQgIGJyYW5jaCAnbWFzdGVyJyAocmVmZXJzIHRvIGNvbW1pdCAnZCcpCisgICAgXgorICAgIHwKKyAgdGFnICd2Mi4wJyAocmVmZXJzIHRvIGNvbW1pdCAnYicpCistLS0tLS0tLS0tLS0KKworSW4gZmFjdCwgd2UgY2FuIHBlcmZvcm0gYWxsIHRoZSBub3JtYWwgR2l0IG9wZXJhdGlvbnMuIEJ1dCwgbGV0J3MgbG9vaworYXQgd2hhdCBoYXBwZW5zIHdoZW4gd2UgdGhlbiBjaGVja291dCBtYXN0ZXI6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbWFzdGVyCisKKwkgICAgICAgSEVBRCAocmVmZXJzIHRvIGJyYW5jaCAnbWFzdGVyJykKKyAgICAgIGUtLS1mICAgICB8CisgICAgIC8gICAgICAgICAgdgorYS0tLWItLS1jLS0tZCAgYnJhbmNoICdtYXN0ZXInIChyZWZlcnMgdG8gY29tbWl0ICdkJykKKyAgICBeCisgICAgfAorICB0YWcgJ3YyLjAnIChyZWZlcnMgdG8gY29tbWl0ICdiJykKKy0tLS0tLS0tLS0tLQorCitJdCBpcyBpbXBvcnRhbnQgdG8gcmVhbGl6ZSB0aGF0IGF0IHRoaXMgcG9pbnQgbm90aGluZyByZWZlcnMgdG8gY29tbWl0CisnZicuIEV2ZW50dWFsbHkgY29tbWl0ICdmJyAoYW5kIGJ5IGV4dGVuc2lvbiBjb21taXQgJ2UnKSB3aWxsIGJlIGRlbGV0ZWQKK2J5IHRoZSByb3V0aW5lIEdpdCBnYXJiYWdlIGNvbGxlY3Rpb24gcHJvY2VzcywgdW5sZXNzIHdlIGNyZWF0ZSBhIHJlZmVyZW5jZQorYmVmb3JlIHRoYXQgaGFwcGVucy4gSWYgd2UgaGF2ZSBub3QgeWV0IG1vdmVkIGF3YXkgZnJvbSBjb21taXQgJ2YnLAorYW55IG9mIHRoZXNlIHdpbGwgY3JlYXRlIGEgcmVmZXJlbmNlIHRvIGl0OgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIGZvbyAgIDwxPgorJCBnaXQgYnJhbmNoIGZvbyAgICAgICAgPDI+CiskIGdpdCB0YWcgZm9vICAgICAgICAgICA8Mz4KKy0tLS0tLS0tLS0tLQorCis8MT4gY3JlYXRlcyBhIG5ldyBicmFuY2ggJ2ZvbycsIHdoaWNoIHJlZmVycyB0byBjb21taXQgJ2YnLCBhbmQgdGhlbgordXBkYXRlcyBIRUFEIHRvIHJlZmVyIHRvIGJyYW5jaCAnZm9vJy4gSW4gb3RoZXIgd29yZHMsIHdlJ2xsIG5vIGxvbmdlcgorYmUgaW4gZGV0YWNoZWQgSEVBRCBzdGF0ZSBhZnRlciB0aGlzIGNvbW1hbmQuCisKKzwyPiBzaW1pbGFybHkgY3JlYXRlcyBhIG5ldyBicmFuY2ggJ2ZvbycsIHdoaWNoIHJlZmVycyB0byBjb21taXQgJ2YnLAorYnV0IGxlYXZlcyBIRUFEIGRldGFjaGVkLgorCis8Mz4gY3JlYXRlcyBhIG5ldyB0YWcgJ2ZvbycsIHdoaWNoIHJlZmVycyB0byBjb21taXQgJ2YnLAorbGVhdmluZyBIRUFEIGRldGFjaGVkLgorCitJZiB3ZSBoYXZlIG1vdmVkIGF3YXkgZnJvbSBjb21taXQgJ2YnLCB0aGVuIHdlIG11c3QgZmlyc3QgcmVjb3ZlciBpdHMgb2JqZWN0CituYW1lICh0eXBpY2FsbHkgYnkgdXNpbmcgZ2l0IHJlZmxvZyksIGFuZCB0aGVuIHdlIGNhbiBjcmVhdGUgYSByZWZlcmVuY2UgdG8KK2l0LiBGb3IgZXhhbXBsZSwgdG8gc2VlIHRoZSBsYXN0IHR3byBjb21taXRzIHRvIHdoaWNoIEhFQUQgcmVmZXJyZWQsIHdlCitjYW4gdXNlIGVpdGhlciBvZiB0aGVzZSBjb21tYW5kczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCByZWZsb2cgLTIgSEVBRCAjIG9yCiskIGdpdCBsb2cgLWcgLTIgSEVBRAorLS0tLS0tLS0tLS0tCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisuIFRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgY2hlY2tzIG91dCB0aGUgYG1hc3RlcmAgYnJhbmNoLCByZXZlcnRzCit0aGUgYE1ha2VmaWxlYCB0byB0d28gcmV2aXNpb25zIGJhY2ssIGRlbGV0ZXMgaGVsbG8uYyBieQorbWlzdGFrZSwgYW5kIGdldHMgaXQgYmFjayBmcm9tIHRoZSBpbmRleC4KKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbWFzdGVyICAgICAgICAgICAgIDwxPgorJCBnaXQgY2hlY2tvdXQgbWFzdGVyfjIgTWFrZWZpbGUgIDwyPgorJCBybSAtZiBoZWxsby5jCiskIGdpdCBjaGVja291dCBoZWxsby5jICAgICAgICAgICAgPDM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBzd2l0Y2ggYnJhbmNoCis8Mj4gdGFrZSBhIGZpbGUgb3V0IG9mIGFub3RoZXIgY29tbWl0Cis8Mz4gcmVzdG9yZSBoZWxsby5jIGZyb20gdGhlIGluZGV4CisrCitJZiB5b3Ugd2FudCB0byBjaGVjayBvdXQgX2FsbF8gQyBzb3VyY2UgZmlsZXMgb3V0IG9mIHRoZSBpbmRleCwKK3lvdSBjYW4gc2F5CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC0tICcqLmMnCistLS0tLS0tLS0tLS0KKysKK05vdGUgdGhlIHF1b3RlcyBhcm91bmQgYCouY2AuICBUaGUgZmlsZSBgaGVsbG8uY2Agd2lsbCBhbHNvIGJlCitjaGVja2VkIG91dCwgZXZlbiB0aG91Z2ggaXQgaXMgbm8gbG9uZ2VyIGluIHRoZSB3b3JraW5nIHRyZWUsCitiZWNhdXNlIHRoZSBmaWxlIGdsb2JiaW5nIGlzIHVzZWQgdG8gbWF0Y2ggZW50cmllcyBpbiB0aGUgaW5kZXgKKyhub3QgaW4gdGhlIHdvcmtpbmcgdHJlZSBieSB0aGUgc2hlbGwpLgorKworSWYgeW91IGhhdmUgYW4gdW5mb3J0dW5hdGUgYnJhbmNoIHRoYXQgaXMgbmFtZWQgYGhlbGxvLmNgLCB0aGlzCitzdGVwIHdvdWxkIGJlIGNvbmZ1c2VkIGFzIGFuIGluc3RydWN0aW9uIHRvIHN3aXRjaCB0byB0aGF0IGJyYW5jaC4KK1lvdSBzaG91bGQgaW5zdGVhZCB3cml0ZToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLS0gaGVsbG8uYworLS0tLS0tLS0tLS0tCisKKy4gQWZ0ZXIgd29ya2luZyBpbiB0aGUgd3JvbmcgYnJhbmNoLCBzd2l0Y2hpbmcgdG8gdGhlIGNvcnJlY3QKK2JyYW5jaCB3b3VsZCBiZSBkb25lIHVzaW5nOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCBteXRvcGljCistLS0tLS0tLS0tLS0KKysKK0hvd2V2ZXIsIHlvdXIgIndyb25nIiBicmFuY2ggYW5kIGNvcnJlY3QgIm15dG9waWMiIGJyYW5jaCBtYXkKK2RpZmZlciBpbiBmaWxlcyB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIGxvY2FsbHksIGluIHdoaWNoIGNhc2UKK3RoZSBhYm92ZSBjaGVja291dCB3b3VsZCBmYWlsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbXl0b3BpYworZXJyb3I6IFlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgdG8gJ2Zyb3R6Jzsgbm90IHN3aXRjaGluZyBicmFuY2hlcy4KKy0tLS0tLS0tLS0tLQorKworWW91IGNhbiBnaXZlIHRoZSBgLW1gIGZsYWcgdG8gdGhlIGNvbW1hbmQsIHdoaWNoIHdvdWxkIHRyeSBhCit0aHJlZS13YXkgbWVyZ2U6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1tIG15dG9waWMKK0F1dG8tbWVyZ2luZyBmcm90egorLS0tLS0tLS0tLS0tCisrCitBZnRlciB0aGlzIHRocmVlLXdheSBtZXJnZSwgdGhlIGxvY2FsIG1vZGlmaWNhdGlvbnMgYXJlIF9ub3RfCityZWdpc3RlcmVkIGluIHlvdXIgaW5kZXggZmlsZSwgc28gYGdpdCBkaWZmYCB3b3VsZCBzaG93IHlvdSB3aGF0CitjaGFuZ2VzIHlvdSBtYWRlIHNpbmNlIHRoZSB0aXAgb2YgdGhlIG5ldyBicmFuY2guCisKKy4gV2hlbiBhIG1lcmdlIGNvbmZsaWN0IGhhcHBlbnMgZHVyaW5nIHN3aXRjaGluZyBicmFuY2hlcyB3aXRoCit0aGUgYC1tYCBvcHRpb24sIHlvdSB3b3VsZCBzZWUgc29tZXRoaW5nIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLW0gbXl0b3BpYworQXV0by1tZXJnaW5nIGZyb3R6CitFUlJPUjogTWVyZ2UgY29uZmxpY3QgaW4gZnJvdHoKK2ZhdGFsOiBtZXJnZSBwcm9ncmFtIGZhaWxlZAorLS0tLS0tLS0tLS0tCisrCitBdCB0aGlzIHBvaW50LCBgZ2l0IGRpZmZgIHNob3dzIHRoZSBjaGFuZ2VzIGNsZWFubHkgbWVyZ2VkIGFzIGluCit0aGUgcHJldmlvdXMgZXhhbXBsZSwgYXMgd2VsbCBhcyB0aGUgY2hhbmdlcyBpbiB0aGUgY29uZmxpY3RlZAorZmlsZXMuICBFZGl0IGFuZCByZXNvbHZlIHRoZSBjb25mbGljdCBhbmQgbWFyayBpdCByZXNvbHZlZCB3aXRoCitgZ2l0IGFkZGAgYXMgdXN1YWw6CisrCistLS0tLS0tLS0tLS0KKyQgZWRpdCBmcm90egorJCBnaXQgYWRkIGZyb3R6CistLS0tLS0tLS0tLS0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnktcGljay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkYTI5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNoZXJyeS1waWNrLnR4dApAQCAtMCwwICsxLDIzMiBAQAorZ2l0LWNoZXJyeS1waWNrKDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNoZXJyeS1waWNrIC0gQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBzb21lIGV4aXN0aW5nIGNvbW1pdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNoZXJyeS1waWNrJyBbLS1lZGl0XSBbLW5dIFstbSBwYXJlbnQtbnVtYmVyXSBbLXNdIFsteF0gWy0tZmZdCisJCSAgWy1TWzxrZXlpZD5dXSA8Y29tbWl0Pi4uLgorJ2dpdCBjaGVycnktcGljaycgLS1jb250aW51ZQorJ2dpdCBjaGVycnktcGljaycgLS1xdWl0CisnZ2l0IGNoZXJyeS1waWNrJyAtLWFib3J0CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXZlbiBvbmUgb3IgbW9yZSBleGlzdGluZyBjb21taXRzLCBhcHBseSB0aGUgY2hhbmdlIGVhY2ggb25lCitpbnRyb2R1Y2VzLCByZWNvcmRpbmcgYSBuZXcgY29tbWl0IGZvciBlYWNoLiAgVGhpcyByZXF1aXJlcyB5b3VyCit3b3JraW5nIHRyZWUgdG8gYmUgY2xlYW4gKG5vIG1vZGlmaWNhdGlvbnMgZnJvbSB0aGUgSEVBRCBjb21taXQpLgorCitXaGVuIGl0IGlzIG5vdCBvYnZpb3VzIGhvdyB0byBhcHBseSBhIGNoYW5nZSwgdGhlIGZvbGxvd2luZworaGFwcGVuczoKKworMS4gVGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBgSEVBRGAgcG9pbnRlciBzdGF5IGF0IHRoZSBsYXN0IGNvbW1pdAorICAgc3VjY2Vzc2Z1bGx5IG1hZGUuCisyLiBUaGUgYENIRVJSWV9QSUNLX0hFQURgIHJlZiBpcyBzZXQgdG8gcG9pbnQgYXQgdGhlIGNvbW1pdCB0aGF0CisgICBpbnRyb2R1Y2VkIHRoZSBjaGFuZ2UgdGhhdCBpcyBkaWZmaWN1bHQgdG8gYXBwbHkuCiszLiBQYXRocyBpbiB3aGljaCB0aGUgY2hhbmdlIGFwcGxpZWQgY2xlYW5seSBhcmUgdXBkYXRlZCBib3RoCisgICBpbiB0aGUgaW5kZXggZmlsZSBhbmQgaW4geW91ciB3b3JraW5nIHRyZWUuCis0LiBGb3IgY29uZmxpY3RpbmcgcGF0aHMsIHRoZSBpbmRleCBmaWxlIHJlY29yZHMgdXAgdG8gdGhyZWUKKyAgIHZlcnNpb25zLCBhcyBkZXNjcmliZWQgaW4gdGhlICJUUlVFIE1FUkdFIiBzZWN0aW9uIG9mCisgICBsaW5rZ2l0OmdpdC1tZXJnZVsxXS4gIFRoZSB3b3JraW5nIHRyZWUgZmlsZXMgd2lsbCBpbmNsdWRlCisgICBhIGRlc2NyaXB0aW9uIG9mIHRoZSBjb25mbGljdCBicmFja2V0ZWQgYnkgdGhlIHVzdWFsCisgICBjb25mbGljdCBtYXJrZXJzIGA8PDw8PDw8YCBhbmQgYD4+Pj4+Pj5gLgorNS4gTm8gb3RoZXIgbW9kaWZpY2F0aW9ucyBhcmUgbWFkZS4KKworU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGZvciBzb21lIGhpbnRzIG9uIHJlc29sdmluZyBzdWNoCitjb25mbGljdHMuCisKK09QVElPTlMKKy0tLS0tLS0KKzxjb21taXQ+Li4uOjoKKwlDb21taXRzIHRvIGNoZXJyeS1waWNrLgorCUZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIGNvbW1pdHMsIHNlZQorCWxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddLgorCVNldHMgb2YgY29tbWl0cyBjYW4gYmUgcGFzc2VkIGJ1dCBubyB0cmF2ZXJzYWwgaXMgZG9uZSBieQorCWRlZmF1bHQsIGFzIGlmIHRoZSAnLS1uby13YWxrJyBvcHRpb24gd2FzIHNwZWNpZmllZCwgc2VlCisJbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIGEgcmFuZ2Ugd2lsbAorCWZlZWQgYWxsIDxjb21taXQ+Li4uIGFyZ3VtZW50cyB0byBhIHNpbmdsZSByZXZpc2lvbiB3YWxrCisJKHNlZSBhIGxhdGVyIGV4YW1wbGUgdGhhdCB1c2VzICdtYWludCBtYXN0ZXIuLm5leHQnKS4KKworLWU6OgorLS1lZGl0OjoKKwlXaXRoIHRoaXMgb3B0aW9uLCAnZ2l0IGNoZXJyeS1waWNrJyB3aWxsIGxldCB5b3UgZWRpdCB0aGUgY29tbWl0CisJbWVzc2FnZSBwcmlvciB0byBjb21taXR0aW5nLgorCisteDo6CisJV2hlbiByZWNvcmRpbmcgdGhlIGNvbW1pdCwgYXBwZW5kIGEgbGluZSB0aGF0IHNheXMKKwkiKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgLi4uKSIgdG8gdGhlIG9yaWdpbmFsIGNvbW1pdAorCW1lc3NhZ2UgaW4gb3JkZXIgdG8gaW5kaWNhdGUgd2hpY2ggY29tbWl0IHRoaXMgY2hhbmdlIHdhcworCWNoZXJyeS1waWNrZWQgZnJvbS4gIFRoaXMgaXMgZG9uZSBvbmx5IGZvciBjaGVycnkKKwlwaWNrcyB3aXRob3V0IGNvbmZsaWN0cy4gIERvIG5vdCB1c2UgdGhpcyBvcHRpb24gaWYKKwl5b3UgYXJlIGNoZXJyeS1waWNraW5nIGZyb20geW91ciBwcml2YXRlIGJyYW5jaCBiZWNhdXNlCisJdGhlIGluZm9ybWF0aW9uIGlzIHVzZWxlc3MgdG8gdGhlIHJlY2lwaWVudC4gIElmIG9uIHRoZQorCW90aGVyIGhhbmQgeW91IGFyZSBjaGVycnktcGlja2luZyBiZXR3ZWVuIHR3byBwdWJsaWNseQorCXZpc2libGUgYnJhbmNoZXMgKGUuZy4gYmFja3BvcnRpbmcgYSBmaXggdG8gYQorCW1haW50ZW5hbmNlIGJyYW5jaCBmb3IgYW4gb2xkZXIgcmVsZWFzZSBmcm9tIGEKKwlkZXZlbG9wbWVudCBicmFuY2gpLCBhZGRpbmcgdGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUKKwl1c2VmdWwuCisKKy1yOjoKKwlJdCB1c2VkIHRvIGJlIHRoYXQgdGhlIGNvbW1hbmQgZGVmYXVsdGVkIHRvIGRvIGAteGAKKwlkZXNjcmliZWQgYWJvdmUsIGFuZCBgLXJgIHdhcyB0byBkaXNhYmxlIGl0LiAgTm93IHRoZQorCWRlZmF1bHQgaXMgbm90IHRvIGRvIGAteGAgc28gdGhpcyBvcHRpb24gaXMgYSBuby1vcC4KKworLW0gcGFyZW50LW51bWJlcjo6CistLW1haW5saW5lIHBhcmVudC1udW1iZXI6OgorCVVzdWFsbHkgeW91IGNhbm5vdCBjaGVycnktcGljayBhIG1lcmdlIGJlY2F1c2UgeW91IGRvIG5vdCBrbm93IHdoaWNoCisJc2lkZSBvZiB0aGUgbWVyZ2Ugc2hvdWxkIGJlIGNvbnNpZGVyZWQgdGhlIG1haW5saW5lLiAgVGhpcworCW9wdGlvbiBzcGVjaWZpZXMgdGhlIHBhcmVudCBudW1iZXIgKHN0YXJ0aW5nIGZyb20gMSkgb2YKKwl0aGUgbWFpbmxpbmUgYW5kIGFsbG93cyBjaGVycnktcGljayB0byByZXBsYXkgdGhlIGNoYW5nZQorCXJlbGF0aXZlIHRvIHRoZSBzcGVjaWZpZWQgcGFyZW50LgorCistbjo6CistLW5vLWNvbW1pdDo6CisJVXN1YWxseSB0aGUgY29tbWFuZCBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBzZXF1ZW5jZSBvZiBjb21taXRzLgorCVRoaXMgZmxhZyBhcHBsaWVzIHRoZSBjaGFuZ2VzIG5lY2Vzc2FyeSB0byBjaGVycnktcGljaworCWVhY2ggbmFtZWQgY29tbWl0IHRvIHlvdXIgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgsCisJd2l0aG91dCBtYWtpbmcgYW55IGNvbW1pdC4gIEluIGFkZGl0aW9uLCB3aGVuIHRoaXMKKwlvcHRpb24gaXMgdXNlZCwgeW91ciBpbmRleCBkb2VzIG5vdCBoYXZlIHRvIG1hdGNoIHRoZQorCUhFQUQgY29tbWl0LiAgVGhlIGNoZXJyeS1waWNrIGlzIGRvbmUgYWdhaW5zdCB0aGUKKwliZWdpbm5pbmcgc3RhdGUgb2YgeW91ciBpbmRleC4KKysKK1RoaXMgaXMgdXNlZnVsIHdoZW4gY2hlcnJ5LXBpY2tpbmcgbW9yZSB0aGFuIG9uZSBjb21taXRzJworZWZmZWN0IHRvIHlvdXIgaW5kZXggaW4gYSByb3cuCisKKy1zOjoKKy0tc2lnbm9mZjo6CisJQWRkIFNpZ25lZC1vZmYtYnkgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQgbWVzc2FnZS4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorCUdQRy1zaWduIGNvbW1pdHMuIFRoZSBga2V5aWRgIGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZAorCWRlZmF1bHRzIHRvIHRoZSBjb21taXR0ZXIgaWRlbnRpdHk7IGlmIHNwZWNpZmllZCwgaXQgbXVzdCBiZQorCXN0dWNrIHRvIHRoZSBvcHRpb24gd2l0aG91dCBhIHNwYWNlLgorCistLWZmOjoKKwlJZiB0aGUgY3VycmVudCBIRUFEIGlzIHRoZSBzYW1lIGFzIHRoZSBwYXJlbnQgb2YgdGhlCisJY2hlcnJ5LXBpY2snZWQgY29tbWl0LCB0aGVuIGEgZmFzdCBmb3J3YXJkIHRvIHRoaXMgY29tbWl0IHdpbGwKKwliZSBwZXJmb3JtZWQuCisKKy0tYWxsb3ctZW1wdHk6OgorCUJ5IGRlZmF1bHQsIGNoZXJyeS1waWNraW5nIGFuIGVtcHR5IGNvbW1pdCB3aWxsIGZhaWwsCisJaW5kaWNhdGluZyB0aGF0IGFuIGV4cGxpY2l0IGludm9jYXRpb24gb2YgYGdpdCBjb21taXQKKwktLWFsbG93LWVtcHR5YCBpcyByZXF1aXJlZC4gVGhpcyBvcHRpb24gb3ZlcnJpZGVzIHRoYXQKKwliZWhhdmlvciwgYWxsb3dpbmcgZW1wdHkgY29tbWl0cyB0byBiZSBwcmVzZXJ2ZWQgYXV0b21hdGljYWxseQorCWluIGEgY2hlcnJ5LXBpY2suIE5vdGUgdGhhdCB3aGVuICItLWZmIiBpcyBpbiBlZmZlY3QsIGVtcHR5CisJY29tbWl0cyB0aGF0IG1lZXQgdGhlICJmYXN0LWZvcndhcmQiIHJlcXVpcmVtZW50IHdpbGwgYmUga2VwdAorCWV2ZW4gd2l0aG91dCB0aGlzIG9wdGlvbi4gIE5vdGUgYWxzbywgdGhhdCB1c2Ugb2YgdGhpcyBvcHRpb24gb25seQorCWtlZXBzIGNvbW1pdHMgdGhhdCB3ZXJlIGluaXRpYWxseSBlbXB0eSAoaS5lLiB0aGUgY29tbWl0IHJlY29yZGVkIHRoZQorCXNhbWUgdHJlZSBhcyBpdHMgcGFyZW50KS4gIENvbW1pdHMgd2hpY2ggYXJlIG1hZGUgZW1wdHkgZHVlIHRvIGEKKwlwcmV2aW91cyBjb21taXQgYXJlIGRyb3BwZWQuICBUbyBmb3JjZSB0aGUgaW5jbHVzaW9uIG9mIHRob3NlIGNvbW1pdHMKKwl1c2UgYC0ta2VlcC1yZWR1bmRhbnQtY29tbWl0c2AuCisKKy0tYWxsb3ctZW1wdHktbWVzc2FnZTo6CisJQnkgZGVmYXVsdCwgY2hlcnJ5LXBpY2tpbmcgYSBjb21taXQgd2l0aCBhbiBlbXB0eSBtZXNzYWdlIHdpbGwgZmFpbC4KKwlUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhhdCBiZWhhdmlvdXIsIGFsbG93aW5nIGNvbW1pdHMgd2l0aCBlbXB0eQorCW1lc3NhZ2VzIHRvIGJlIGNoZXJyeSBwaWNrZWQuCisKKy0ta2VlcC1yZWR1bmRhbnQtY29tbWl0czo6CisJSWYgYSBjb21taXQgYmVpbmcgY2hlcnJ5IHBpY2tlZCBkdXBsaWNhdGVzIGEgY29tbWl0IGFscmVhZHkgaW4gdGhlCisJY3VycmVudCBoaXN0b3J5LCBpdCB3aWxsIGJlY29tZSBlbXB0eS4gIEJ5IGRlZmF1bHQgdGhlc2UKKwlyZWR1bmRhbnQgY29tbWl0cyBjYXVzZSBgY2hlcnJ5LXBpY2tgIHRvIHN0b3Agc28gdGhlIHVzZXIgY2FuCisJZXhhbWluZSB0aGUgY29tbWl0LiBUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhhdCBiZWhhdmlvciBhbmQKKwljcmVhdGVzIGFuIGVtcHR5IGNvbW1pdCBvYmplY3QuICBJbXBsaWVzIGAtLWFsbG93LWVtcHR5YC4KKworLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKKwlVc2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5LiAgU2hvdWxkIG9ubHkgYmUgdXNlZCBvbmNlLgorCVNlZSB0aGUgTUVSR0UgU1RSQVRFR0lFUyBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdCisJZm9yIGRldGFpbHMuCisKKy1YPG9wdGlvbj46OgorLS1zdHJhdGVneS1vcHRpb249PG9wdGlvbj46OgorCVBhc3MgdGhlIG1lcmdlIHN0cmF0ZWd5LXNwZWNpZmljIG9wdGlvbiB0aHJvdWdoIHRvIHRoZQorCW1lcmdlIHN0cmF0ZWd5LiAgU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGZvciBkZXRhaWxzLgorCitTRVFVRU5DRVIgU1VCQ09NTUFORFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5jbHVkZTo6c2VxdWVuY2VyLnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorYGdpdCBjaGVycnktcGljayBtYXN0ZXJgOjoKKworCUFwcGx5IHRoZSBjaGFuZ2UgaW50cm9kdWNlZCBieSB0aGUgY29tbWl0IGF0IHRoZSB0aXAgb2YgdGhlCisJbWFzdGVyIGJyYW5jaCBhbmQgY3JlYXRlIGEgbmV3IGNvbW1pdCB3aXRoIHRoaXMgY2hhbmdlLgorCitgZ2l0IGNoZXJyeS1waWNrIC4ubWFzdGVyYDo6CitgZ2l0IGNoZXJyeS1waWNrIF5IRUFEIG1hc3RlcmA6OgorCisJQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBhbGwgY29tbWl0cyB0aGF0IGFyZSBhbmNlc3RvcnMKKwlvZiBtYXN0ZXIgYnV0IG5vdCBvZiBIRUFEIHRvIHByb2R1Y2UgbmV3IGNvbW1pdHMuCisKK2BnaXQgY2hlcnJ5LXBpY2sgbWFpbnQgbmV4dCBebWFzdGVyYDo6CitgZ2l0IGNoZXJyeS1waWNrIG1haW50IG1hc3Rlci4ubmV4dGA6OgorCisJQXBwbHkgdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSBhbGwgY29tbWl0cyB0aGF0IGFyZQorCWFuY2VzdG9ycyBvZiBtYWludCBvciBuZXh0LCBidXQgbm90IG1hc3RlciBvciBhbnkgb2YgaXRzCisJYW5jZXN0b3JzLiAgTm90ZSB0aGF0IHRoZSBsYXR0ZXIgZG9lcyBub3QgbWVhbiBgbWFpbnRgIGFuZAorCWV2ZXJ5dGhpbmcgYmV0d2VlbiBgbWFzdGVyYCBhbmQgYG5leHRgOyBzcGVjaWZpY2FsbHksCisJYG1haW50YCB3aWxsIG5vdCBiZSB1c2VkIGlmIGl0IGlzIGluY2x1ZGVkIGluIGBtYXN0ZXJgLgorCitgZ2l0IGNoZXJyeS1waWNrIG1hc3Rlcn40IG1hc3Rlcn4yYDo6CisKKwlBcHBseSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBmaWZ0aCBhbmQgdGhpcmQgbGFzdAorCWNvbW1pdHMgcG9pbnRlZCB0byBieSBtYXN0ZXIgYW5kIGNyZWF0ZSAyIG5ldyBjb21taXRzIHdpdGgKKwl0aGVzZSBjaGFuZ2VzLgorCitgZ2l0IGNoZXJyeS1waWNrIC1uIG1hc3Rlcn4xIG5leHRgOjoKKworCUFwcGx5IHRvIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkCisJYnkgdGhlIHNlY29uZCBsYXN0IGNvbW1pdCBwb2ludGVkIHRvIGJ5IG1hc3RlciBhbmQgYnkgdGhlIGxhc3QKKwljb21taXQgcG9pbnRlZCB0byBieSBuZXh0LCBidXQgZG8gbm90IGNyZWF0ZSBhbnkgY29tbWl0IHdpdGgKKwl0aGVzZSBjaGFuZ2VzLgorCitgZ2l0IGNoZXJyeS1waWNrIC0tZmYgLi5uZXh0YDo6CisKKwlJZiBoaXN0b3J5IGlzIGxpbmVhciBhbmQgSEVBRCBpcyBhbiBhbmNlc3RvciBvZiBuZXh0LCB1cGRhdGUKKwl0aGUgd29ya2luZyB0cmVlIGFuZCBhZHZhbmNlIHRoZSBIRUFEIHBvaW50ZXIgdG8gbWF0Y2ggbmV4dC4KKwlPdGhlcndpc2UsIGFwcGx5IHRoZSBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhvc2UgY29tbWl0cyB0aGF0CisJYXJlIGluIG5leHQgYnV0IG5vdCBIRUFEIHRvIHRoZSBjdXJyZW50IGJyYW5jaCwgY3JlYXRpbmcgYSBuZXcKKwljb21taXQgZm9yIGVhY2ggbmV3IGNoYW5nZS4KKworYGdpdCByZXYtbGlzdCAtLXJldmVyc2UgbWFzdGVyIC0tIFJFQURNRSB8IGdpdCBjaGVycnktcGljayAtbiAtLXN0ZGluYDo6CisKKwlBcHBseSB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IGFsbCBjb21taXRzIG9uIHRoZSBtYXN0ZXIKKwlicmFuY2ggdGhhdCB0b3VjaGVkIFJFQURNRSB0byB0aGUgd29ya2luZyB0cmVlIGFuZCBpbmRleCwKKwlzbyB0aGUgcmVzdWx0IGNhbiBiZSBpbnNwZWN0ZWQgYW5kIG1hZGUgaW50byBhIHNpbmdsZSBuZXcKKwljb21taXQgaWYgc3VpdGFibGUuCisKK1RoZSBmb2xsb3dpbmcgc2VxdWVuY2UgYXR0ZW1wdHMgdG8gYmFja3BvcnQgYSBwYXRjaCwgYmFpbHMgb3V0IGJlY2F1c2UKK3RoZSBjb2RlIHRoZSBwYXRjaCBhcHBsaWVzIHRvIGhhcyBjaGFuZ2VkIHRvbyBtdWNoLCBhbmQgdGhlbiB0cmllcworYWdhaW4sIHRoaXMgdGltZSBleGVyY2lzaW5nIG1vcmUgY2FyZSBhYm91dCBtYXRjaGluZyB1cCBjb250ZXh0IGxpbmVzLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZXJyeS1waWNrIHRvcGljXiAgICAgICAgICAgICA8MT4KKyQgZ2l0IGRpZmYgICAgICAgICAgICAgICAgICAgICAgICAgICA8Mj4KKyQgZ2l0IHJlc2V0IC0tbWVyZ2UgT1JJR19IRUFEICAgICAgICA8Mz4KKyQgZ2l0IGNoZXJyeS1waWNrIC1YcGF0aWVuY2UgdG9waWNeICA8ND4KKy0tLS0tLS0tLS0tLQorPDE+IGFwcGx5IHRoZSBjaGFuZ2UgdGhhdCB3b3VsZCBiZSBzaG93biBieSBgZ2l0IHNob3cgdG9waWNeYC4KK0luIHRoaXMgZXhhbXBsZSwgdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHNvCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29uZmxpY3QgaXMgd3JpdHRlbiB0byB0aGUgaW5kZXggYW5kCit3b3JraW5nIHRyZWUgYW5kIG5vIG5ldyBjb21taXQgcmVzdWx0cy4KKzwyPiBzdW1tYXJpemUgY2hhbmdlcyB0byBiZSByZWNvbmNpbGVkCis8Mz4gY2FuY2VsIHRoZSBjaGVycnktcGljay4gIEluIG90aGVyIHdvcmRzLCByZXR1cm4gdG8gdGhlCitwcmUtY2hlcnJ5LXBpY2sgc3RhdGUsIHByZXNlcnZpbmcgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMgeW91IGhhZCBpbgordGhlIHdvcmtpbmcgdHJlZS4KKzw0PiB0cnkgdG8gYXBwbHkgdGhlIGNoYW5nZSBpbnRyb2R1Y2VkIGJ5IGB0b3BpY15gIGFnYWluLAorc3BlbmRpbmcgZXh0cmEgdGltZSB0byBhdm9pZCBtaXN0YWtlcyBiYXNlZCBvbiBpbmNvcnJlY3RseSBtYXRjaGluZworY29udGV4dCBsaW5lcy4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1yZXZlcnRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jaGVycnkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWE5MjFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY2hlcnJ5LnR4dApAQCAtMCwwICsxLDE0NSBAQAorZ2l0LWNoZXJyeSgxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY2hlcnJ5IC0gRmluZCBjb21taXRzIHlldCB0byBiZSBhcHBsaWVkIHRvIHVwc3RyZWFtCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaGVycnknIFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0RldGVybWluZSB3aGV0aGVyIHRoZXJlIGFyZSBjb21taXRzIGluIGA8aGVhZD4uLjx1cHN0cmVhbT5gIHRoYXQgYXJlCitlcXVpdmFsZW50IHRvIHRob3NlIGluIHRoZSByYW5nZSBgPGxpbWl0Pi4uPGhlYWQ+YC4KKworVGhlIGVxdWl2YWxlbmNlIHRlc3QgaXMgYmFzZWQgb24gdGhlIGRpZmYsIGFmdGVyIHJlbW92aW5nIHdoaXRlc3BhY2UKK2FuZCBsaW5lIG51bWJlcnMuICBnaXQtY2hlcnJ5IHRoZXJlZm9yZSBkZXRlY3RzIHdoZW4gY29tbWl0cyBoYXZlIGJlZW4KKyJjb3BpZWQiIGJ5IG1lYW5zIG9mIGxpbmtnaXQ6Z2l0LWNoZXJyeS1waWNrWzFdLCBsaW5rZ2l0OmdpdC1hbVsxXSBvcgorbGlua2dpdDpnaXQtcmViYXNlWzFdLgorCitPdXRwdXRzIHRoZSBTSEExIG9mIGV2ZXJ5IGNvbW1pdCBpbiBgPGxpbWl0Pi4uPGhlYWQ+YCwgcHJlZml4ZWQgd2l0aAorYC1gIGZvciBjb21taXRzIHRoYXQgaGF2ZSBhbiBlcXVpdmFsZW50IGluIDx1cHN0cmVhbT4sIGFuZCBgK2AgZm9yCitjb21taXRzIHRoYXQgZG8gbm90LgorCitPUFRJT05TCistLS0tLS0tCistdjo6CisJU2hvdyB0aGUgY29tbWl0IHN1YmplY3RzIG5leHQgdG8gdGhlIFNIQTFzLgorCis8dXBzdHJlYW0+OjoKKwlVcHN0cmVhbSBicmFuY2ggdG8gc2VhcmNoIGZvciBlcXVpdmFsZW50IGNvbW1pdHMuCisJRGVmYXVsdHMgdG8gdGhlIHVwc3RyZWFtIGJyYW5jaCBvZiBIRUFELgorCis8aGVhZD46OgorCVdvcmtpbmcgYnJhbmNoOyBkZWZhdWx0cyB0byBIRUFELgorCis8bGltaXQ+OjoKKwlEbyBub3QgcmVwb3J0IGNvbW1pdHMgdXAgdG8gKGFuZCBpbmNsdWRpbmcpIGxpbWl0LgorCitFWEFNUExFUworLS0tLS0tLS0KKworUGF0Y2ggd29ya2Zsb3dzCit+fn5+fn5+fn5+fn5+fn4KKworZ2l0LWNoZXJyeSBpcyBmcmVxdWVudGx5IHVzZWQgaW4gcGF0Y2gtYmFzZWQgd29ya2Zsb3dzIChzZWUKK2xpbmtnaXQ6Z2l0d29ya2Zsb3dzWzddKSB0byBkZXRlcm1pbmUgaWYgYSBzZXJpZXMgb2YgcGF0Y2hlcyBoYXMgYmVlbgorYXBwbGllZCBieSB0aGUgdXBzdHJlYW0gbWFpbnRhaW5lci4gIEluIHN1Y2ggYSB3b3JrZmxvdyB5b3UgbWlnaHQKK2NyZWF0ZSBhbmQgc2VuZCBhIHRvcGljIGJyYW5jaCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgdG9waWMgb3JpZ2luL21hc3RlcgorIyB3b3JrIGFuZCBjcmVhdGUgc29tZSBjb21taXRzCiskIGdpdCBmb3JtYXQtcGF0Y2ggb3JpZ2luL21hc3RlcgorJCBnaXQgc2VuZC1lbWFpbCAuLi4gMDAqCistLS0tLS0tLS0tLS0KKworTGF0ZXIsIHlvdSBjYW4gc2VlIHdoZXRoZXIgeW91ciBjaGFuZ2VzIGhhdmUgYmVlbiBhcHBsaWVkIGJ5IHNheWluZworKHN0aWxsIG9uIGB0b3BpY2ApOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoICAjIHVwZGF0ZSB5b3VyIG5vdGlvbiBvZiBvcmlnaW4vbWFzdGVyCiskIGdpdCBjaGVycnkgLXYKKy0tLS0tLS0tLS0tLQorCitDb25jcmV0ZSBleGFtcGxlCit+fn5+fn5+fn5+fn5+fn5+CisKK0luIGEgc2l0dWF0aW9uIHdoZXJlIHRvcGljIGNvbnNpc3RlZCBvZiB0aHJlZSBjb21taXRzLCBhbmQgdGhlCittYWludGFpbmVyIGFwcGxpZWQgdHdvIG9mIHRoZW0sIHRoZSBzaXR1YXRpb24gbWlnaHQgbG9vayBsaWtlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtLWdyYXBoIC0tb25lbGluZSAtLWRlY29yYXRlIC0tYm91bmRhcnkgb3JpZ2luL21hc3Rlci4uLnRvcGljCisqIDc2NTQzMjEgKG9yaWdpbi9tYXN0ZXIpIHVwc3RyZWFtIHRpcCBjb21taXQKK1suLi4gc25pcCBzb21lIG90aGVyIGNvbW1pdHMgLi4uXQorKiBjY2NjMTExIGNoZXJyeS1waWNrIG9mIEMKKyogYWFhYTExMSBjaGVycnktcGljayBvZiBBCitbLi4uIHNuaXAgYSBsb3QgbW9yZSB0aGF0IGhhcyBoYXBwZW5lZCAuLi5dCit8ICogY2NjYzAwMCAodG9waWMpIGNvbW1pdCBDCit8ICogYmJiYjAwMCBjb21taXQgQgorfCAqIGFhYWEwMDAgY29tbWl0IEEKK3wvCitvIDEyMzQ1NjcgYnJhbmNoIHBvaW50CistLS0tLS0tLS0tLS0KKworSW4gc3VjaCBjYXNlcywgZ2l0LWNoZXJyeSBzaG93cyBhIGNvbmNpc2Ugc3VtbWFyeSBvZiB3aGF0IGhhcyB5ZXQgdG8KK2JlIGFwcGxpZWQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlcnJ5IG9yaWdpbi9tYXN0ZXIgdG9waWMKKy0gY2NjYzAwMC4uLiBjb21taXQgQworKyBiYmJiMDAwLi4uIGNvbW1pdCBCCistIGFhYWEwMDAuLi4gY29tbWl0IEEKKy0tLS0tLS0tLS0tLQorCitIZXJlLCB3ZSBzZWUgdGhhdCB0aGUgY29tbWl0cyBBIGFuZCBDIChtYXJrZWQgd2l0aCBgLWApIGNhbiBiZQorZHJvcHBlZCBmcm9tIHlvdXIgYHRvcGljYCBicmFuY2ggd2hlbiB5b3UgcmViYXNlIGl0IG9uIHRvcCBvZgorYG9yaWdpbi9tYXN0ZXJgLCB3aGlsZSB0aGUgY29tbWl0IEIgKG1hcmtlZCB3aXRoIGArYCkgc3RpbGwgbmVlZHMgdG8KK2JlIGtlcHQgc28gdGhhdCBpdCB3aWxsIGJlIHNlbnQgdG8gYmUgYXBwbGllZCB0byBgb3JpZ2luL21hc3RlcmAuCisKKworVXNpbmcgYSBsaW1pdAorfn5+fn5+fn5+fn5+fgorCitUaGUgb3B0aW9uYWwgPGxpbWl0PiBpcyB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgeW91ciB0b3BpYyBpcyBiYXNlZCBvbgorb3RoZXIgd29yayB0aGF0IGlzIG5vdCBpbiB1cHN0cmVhbS4gIEV4cGFuZGluZyBvbiB0aGUgcHJldmlvdXMKK2V4YW1wbGUsIHRoaXMgbWlnaHQgbG9vayBsaWtlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtLWdyYXBoIC0tb25lbGluZSAtLWRlY29yYXRlIC0tYm91bmRhcnkgb3JpZ2luL21hc3Rlci4uLnRvcGljCisqIDc2NTQzMjEgKG9yaWdpbi9tYXN0ZXIpIHVwc3RyZWFtIHRpcCBjb21taXQKK1suLi4gc25pcCBzb21lIG90aGVyIGNvbW1pdHMgLi4uXQorKiBjY2NjMTExIGNoZXJyeS1waWNrIG9mIEMKKyogYWFhYTExMSBjaGVycnktcGljayBvZiBBCitbLi4uIHNuaXAgYSBsb3QgbW9yZSB0aGF0IGhhcyBoYXBwZW5lZCAuLi5dCit8ICogY2NjYzAwMCAodG9waWMpIGNvbW1pdCBDCit8ICogYmJiYjAwMCBjb21taXQgQgorfCAqIGFhYWEwMDAgY29tbWl0IEEKK3wgKiAwMDAwZmZmIChiYXNlKSB1bnB1Ymxpc2hlZCBzdHVmZiBGCitbLi4uIHNuaXAgLi4uXQorfCAqIDAwMDBhYWEgdW5wdWJsaXNoZWQgc3R1ZmYgQQorfC8KK28gMTIzNDU2NyBtZXJnZS1iYXNlIGJldHdlZW4gdXBzdHJlYW0gYW5kIHRvcGljCistLS0tLS0tLS0tLS0KKworQnkgc3BlY2lmeWluZyBgYmFzZWAgYXMgdGhlIGxpbWl0LCB5b3UgY2FuIGF2b2lkIGxpc3RpbmcgY29tbWl0cworYmV0d2VlbiBgYmFzZWAgYW5kIGB0b3BpY2A6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlcnJ5IG9yaWdpbi9tYXN0ZXIgdG9waWMgYmFzZQorLSBjY2NjMDAwLi4uIGNvbW1pdCBDCisrIGJiYmIwMDAuLi4gY29tbWl0IEIKKy0gYWFhYTAwMC4uLiBjb21taXQgQQorLS0tLS0tLS0tLS0tCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wYXRjaC1pZFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNpdG9vbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaXRvb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YTExYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jaXRvb2wudHh0CkBAIC0wLDAgKzEsMjUgQEAKK2dpdC1jaXRvb2woMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNpdG9vbCAtIEdyYXBoaWNhbCBhbHRlcm5hdGl2ZSB0byBnaXQtY29tbWl0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjaXRvb2wnCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQSBUY2wvVGsgYmFzZWQgZ3JhcGhpY2FsIGludGVyZmFjZSB0byByZXZpZXcgbW9kaWZpZWQgZmlsZXMsIHN0YWdlCit0aGVtIGludG8gdGhlIGluZGV4LCBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIGFuZCByZWNvcmQgdGhlIG5ldworY29tbWl0IG9udG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcyBpbnRlcmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUKK3RvIHRoZSBsZXNzIGludGVyYWN0aXZlICdnaXQgY29tbWl0JyBwcm9ncmFtLgorCisnZ2l0IGNpdG9vbCcgaXMgYWN0dWFsbHkgYSBzdGFuZGFyZCBhbGlhcyBmb3IgYGdpdCBndWkgY2l0b29sYC4KK1NlZSBsaW5rZ2l0OmdpdC1ndWlbMV0gZm9yIG1vcmUgZGV0YWlscy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbGVhbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxNjgxZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNsZWFuLnR4dApAQCAtMCwwICsxLDE0MyBAQAorZ2l0LWNsZWFuKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNsZWFuIC0gUmVtb3ZlIHVudHJhY2tlZCBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGNsZWFuJyBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGg+Li4uCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitDbGVhbnMgdGhlIHdvcmtpbmcgdHJlZSBieSByZWN1cnNpdmVseSByZW1vdmluZyBmaWxlcyB0aGF0IGFyZSBub3QKK3VuZGVyIHZlcnNpb24gY29udHJvbCwgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKK05vcm1hbGx5LCBvbmx5IGZpbGVzIHVua25vd24gdG8gR2l0IGFyZSByZW1vdmVkLCBidXQgaWYgdGhlICcteCcKK29wdGlvbiBpcyBzcGVjaWZpZWQsIGlnbm9yZWQgZmlsZXMgYXJlIGFsc28gcmVtb3ZlZC4gVGhpcyBjYW4sIGZvcgorZXhhbXBsZSwgYmUgdXNlZnVsIHRvIHJlbW92ZSBhbGwgYnVpbGQgcHJvZHVjdHMuCisKK0lmIGFueSBvcHRpb25hbCBgPHBhdGg+Li4uYCBhcmd1bWVudHMgYXJlIGdpdmVuLCBvbmx5IHRob3NlIHBhdGhzCithcmUgYWZmZWN0ZWQuCisKK09QVElPTlMKKy0tLS0tLS0KKy1kOjoKKwlSZW1vdmUgdW50cmFja2VkIGRpcmVjdG9yaWVzIGluIGFkZGl0aW9uIHRvIHVudHJhY2tlZCBmaWxlcy4KKwlJZiBhbiB1bnRyYWNrZWQgZGlyZWN0b3J5IGlzIG1hbmFnZWQgYnkgYSBkaWZmZXJlbnQgR2l0CisJcmVwb3NpdG9yeSwgaXQgaXMgbm90IHJlbW92ZWQgYnkgZGVmYXVsdC4gIFVzZSAtZiBvcHRpb24gdHdpY2UKKwlpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIHN1Y2ggYSBkaXJlY3RvcnkuCisKKy1mOjoKKy0tZm9yY2U6OgorCUlmIHRoZSBHaXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBjbGVhbi5yZXF1aXJlRm9yY2UgaXMgbm90IHNldAorCXRvIGZhbHNlLCAnZ2l0IGNsZWFuJyB3aWxsIHJlZnVzZSB0byBkZWxldGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMKKwl1bmxlc3MgZ2l2ZW4gLWYsIC1uIG9yIC1pLiBHaXQgd2lsbCByZWZ1c2UgdG8gZGVsZXRlIGRpcmVjdG9yaWVzCisJd2l0aCAuZ2l0IHN1YiBkaXJlY3Rvcnkgb3IgZmlsZSB1bmxlc3MgYSBzZWNvbmQgLWYKKwlpcyBnaXZlbi4gVGhpcyBhZmZlY3RzIGFsc28gZ2l0IHN1Ym1vZHVsZXMgd2hlcmUgdGhlIHN0b3JhZ2UgYXJlYQorCW9mIHRoZSByZW1vdmVkIHN1Ym1vZHVsZSB1bmRlciAuZ2l0L21vZHVsZXMvIGlzIG5vdCByZW1vdmVkIHVudGlsCisJLWYgaXMgZ2l2ZW4gdHdpY2UuCisKKy1pOjoKKy0taW50ZXJhY3RpdmU6OgorCVNob3cgd2hhdCB3b3VsZCBiZSBkb25lIGFuZCBjbGVhbiBmaWxlcyBpbnRlcmFjdGl2ZWx5LiBTZWUKKwlgYEludGVyYWN0aXZlIG1vZGUnJyBmb3IgZGV0YWlscy4KKworLW46OgorLS1kcnktcnVuOjoKKwlEb24ndCBhY3R1YWxseSByZW1vdmUgYW55dGhpbmcsIGp1c3Qgc2hvdyB3aGF0IHdvdWxkIGJlIGRvbmUuCisKKy1xOjoKKy0tcXVpZXQ6OgorCUJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMsIGJ1dCBub3QgdGhlIGZpbGVzIHRoYXQgYXJlCisJc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuCisKKy1lIDxwYXR0ZXJuPjo6CistLWV4Y2x1ZGU9PHBhdHRlcm4+OjoKKwlJbiBhZGRpdGlvbiB0byB0aG9zZSBmb3VuZCBpbiAuZ2l0aWdub3JlIChwZXIgZGlyZWN0b3J5KSBhbmQKKwkkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUsIGFsc28gY29uc2lkZXIgdGhlc2UgcGF0dGVybnMgdG8gYmUgaW4gdGhlCisJc2V0IG9mIHRoZSBpZ25vcmUgcnVsZXMgaW4gZWZmZWN0LgorCisteDo6CisJRG9uJ3QgdXNlIHRoZSBzdGFuZGFyZCBpZ25vcmUgcnVsZXMgcmVhZCBmcm9tIC5naXRpZ25vcmUgKHBlcgorCWRpcmVjdG9yeSkgYW5kICRHSVRfRElSL2luZm8vZXhjbHVkZSwgYnV0IGRvIHN0aWxsIHVzZSB0aGUgaWdub3JlCisJcnVsZXMgZ2l2ZW4gd2l0aCBgLWVgIG9wdGlvbnMuICBUaGlzIGFsbG93cyByZW1vdmluZyBhbGwgdW50cmFja2VkCisJZmlsZXMsIGluY2x1ZGluZyBidWlsZCBwcm9kdWN0cy4gIFRoaXMgY2FuIGJlIHVzZWQgKHBvc3NpYmx5IGluCisJY29uanVuY3Rpb24gd2l0aCAnZ2l0IHJlc2V0JykgdG8gY3JlYXRlIGEgcHJpc3RpbmUKKwl3b3JraW5nIGRpcmVjdG9yeSB0byB0ZXN0IGEgY2xlYW4gYnVpbGQuCisKKy1YOjoKKwlSZW1vdmUgb25seSBmaWxlcyBpZ25vcmVkIGJ5IEdpdC4gIFRoaXMgbWF5IGJlIHVzZWZ1bCB0byByZWJ1aWxkCisJZXZlcnl0aGluZyBmcm9tIHNjcmF0Y2gsIGJ1dCBrZWVwIG1hbnVhbGx5IGNyZWF0ZWQgZmlsZXMuCisKK0ludGVyYWN0aXZlIG1vZGUKKy0tLS0tLS0tLS0tLS0tLS0KK1doZW4gdGhlIGNvbW1hbmQgZW50ZXJzIHRoZSBpbnRlcmFjdGl2ZSBtb2RlLCBpdCBzaG93cyB0aGUKK2ZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBiZSBjbGVhbmVkLCBhbmQgZ29lcyBpbnRvIGl0cworaW50ZXJhY3RpdmUgY29tbWFuZCBsb29wLgorCitUaGUgY29tbWFuZCBsb29wIHNob3dzIHRoZSBsaXN0IG9mIHN1YmNvbW1hbmRzIGF2YWlsYWJsZSwgYW5kCitnaXZlcyBhIHByb21wdCAiV2hhdCBub3c+ICIuICBJbiBnZW5lcmFsLCB3aGVuIHRoZSBwcm9tcHQgZW5kcword2l0aCBhIHNpbmdsZSAnPicsIHlvdSBjYW4gcGljayBvbmx5IG9uZSBvZiB0aGUgY2hvaWNlcyBnaXZlbgorYW5kIHR5cGUgcmV0dXJuLCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorICAgICoqKiBDb21tYW5kcyAqKioKKwkxOiBjbGVhbiAgICAgICAgICAgICAgICAyOiBmaWx0ZXIgYnkgcGF0dGVybiAgICAzOiBzZWxlY3QgYnkgbnVtYmVycworCTQ6IGFzayBlYWNoICAgICAgICAgICAgIDU6IHF1aXQgICAgICAgICAgICAgICAgIDY6IGhlbHAKKyAgICBXaGF0IG5vdz4gMQorLS0tLS0tLS0tLS0tCisKK1lvdSBhbHNvIGNvdWxkIHNheSBgY2Agb3IgYGNsZWFuYCBhYm92ZSBhcyBsb25nIGFzIHRoZSBjaG9pY2UgaXMgdW5pcXVlLgorCitUaGUgbWFpbiBjb21tYW5kIGxvb3AgaGFzIDYgc3ViY29tbWFuZHMuCisKK2NsZWFuOjoKKworICAgU3RhcnQgY2xlYW5pbmcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLCBhbmQgdGhlbiBxdWl0LgorCitmaWx0ZXIgYnkgcGF0dGVybjo6CisKKyAgIFRoaXMgc2hvd3MgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBiZSBkZWxldGVkIGFuZCBpc3N1ZXMgYW4KKyAgICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiIgcHJvbXB0LiBZb3UgY2FuIGlucHV0IHNwYWNlLXNlcGFyYXRlZAorICAgcGF0dGVybnMgdG8gZXhjbHVkZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgZnJvbSBkZWxldGlvbi4KKyAgIEUuZy4gIiouYyAqLmgiIHdpbGwgZXhjbHVkZXMgZmlsZXMgZW5kIHdpdGggIi5jIiBhbmQgIi5oIiBmcm9tCisgICBkZWxldGlvbi4gV2hlbiB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHRoZSBmaWx0ZXJlZCByZXN1bHQsIHByZXNzCisgICBFTlRFUiAoZW1wdHkpIGJhY2sgdG8gdGhlIG1haW4gbWVudS4KKworc2VsZWN0IGJ5IG51bWJlcnM6OgorCisgICBUaGlzIHNob3dzIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gYmUgZGVsZXRlZCBhbmQgaXNzdWVzIGFuCisgICAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZT4+IiBwcm9tcHQuIFdoZW4gdGhlIHByb21wdCBlbmRzIHdpdGggZG91YmxlCisgICAnPj4nIGxpa2UgdGhpcywgeW91IGNhbiBtYWtlIG1vcmUgdGhhbiBvbmUgc2VsZWN0aW9uLCBjb25jYXRlbmF0ZWQKKyAgIHdpdGggd2hpdGVzcGFjZSBvciBjb21tYS4gIEFsc28geW91IGNhbiBzYXkgcmFuZ2VzLiAgRS5nLiAiMi01IDcsOSIKKyAgIHRvIGNob29zZSAyLDMsNCw1LDcsOSBmcm9tIHRoZSBsaXN0LiAgSWYgdGhlIHNlY29uZCBudW1iZXIgaW4gYQorICAgcmFuZ2UgaXMgb21pdHRlZCwgYWxsIHJlbWFpbmluZyBpdGVtcyBhcmUgc2VsZWN0ZWQuICBFLmcuICI3LSIgdG8KKyAgIGNob29zZSA3LDgsOSBmcm9tIHRoZSBsaXN0LiAgWW91IGNhbiBzYXkgJyonIHRvIGNob29zZSBldmVyeXRoaW5nLgorICAgQWxzbyB3aGVuIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggdGhlIGZpbHRlcmVkIHJlc3VsdCwgcHJlc3MgRU5URVIKKyAgIChlbXB0eSkgYmFjayB0byB0aGUgbWFpbiBtZW51LgorCithc2sgZWFjaDo6CisKKyAgVGhpcyB3aWxsIHN0YXJ0IHRvIGNsZWFuLCBhbmQgeW91IG11c3QgY29uZmlybSBvbmUgYnkgb25lIGluIG9yZGVyCisgIHRvIGRlbGV0ZSBpdGVtcy4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGFjdGlvbiBpcyBub3QgYXMgZWZmaWNpZW50CisgIGFzIHRoZSBhYm92ZSB0d28gYWN0aW9ucy4KKworcXVpdDo6CisKKyAgVGhpcyBsZXRzIHlvdSBxdWl0IHdpdGhvdXQgZG8gY2xlYW5pbmcuCisKK2hlbHA6OgorCisgIFNob3cgYnJpZWYgdXNhZ2Ugb2YgaW50ZXJhY3RpdmUgZ2l0LWNsZWFuLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0aWdub3JlWzVdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY2xvbmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZjJhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jbG9uZS50eHQKQEAgLTAsMCArMSwyNzUgQEAKK2dpdC1jbG9uZSgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jbG9uZSAtIENsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjbG9uZScgWy0tdGVtcGxhdGU9PHRlbXBsYXRlX2RpcmVjdG9yeT5dCisJICBbLWxdIFstc10gWy0tbm8taGFyZGxpbmtzXSBbLXFdIFstbl0gWy0tYmFyZV0gWy0tbWlycm9yXQorCSAgWy1vIDxuYW1lPl0gWy1iIDxuYW1lPl0gWy11IDx1cGxvYWQtcGFjaz5dIFstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dCisJICBbLS1kaXNzb2NpYXRlXSBbLS1zZXBhcmF0ZS1naXQtZGlyIDxnaXQgZGlyPl0KKwkgIFstLWRlcHRoIDxkZXB0aD5dIFstLVtuby1dc2luZ2xlLWJyYW5jaF0KKwkgIFstLXJlY3Vyc2l2ZSB8IC0tcmVjdXJzZS1zdWJtb2R1bGVzXSBbLS1dIDxyZXBvc2l0b3J5PgorCSAgWzxkaXJlY3Rvcnk+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworQ2xvbmVzIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnksIGNyZWF0ZXMKK3JlbW90ZS10cmFja2luZyBicmFuY2hlcyBmb3IgZWFjaCBicmFuY2ggaW4gdGhlIGNsb25lZCByZXBvc2l0b3J5CisodmlzaWJsZSB1c2luZyBgZ2l0IGJyYW5jaCAtcmApLCBhbmQgY3JlYXRlcyBhbmQgY2hlY2tzIG91dCBhbgoraW5pdGlhbCBicmFuY2ggdGhhdCBpcyBmb3JrZWQgZnJvbSB0aGUgY2xvbmVkIHJlcG9zaXRvcnkncworY3VycmVudGx5IGFjdGl2ZSBicmFuY2guCisKK0FmdGVyIHRoZSBjbG9uZSwgYSBwbGFpbiBgZ2l0IGZldGNoYCB3aXRob3V0IGFyZ3VtZW50cyB3aWxsIHVwZGF0ZQorYWxsIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMsIGFuZCBhIGBnaXQgcHVsbGAgd2l0aG91dAorYXJndW1lbnRzIHdpbGwgaW4gYWRkaXRpb24gbWVyZ2UgdGhlIHJlbW90ZSBtYXN0ZXIgYnJhbmNoIGludG8gdGhlCitjdXJyZW50IG1hc3RlciBicmFuY2gsIGlmIGFueSAodGhpcyBpcyB1bnRydWUgd2hlbiAiLS1zaW5nbGUtYnJhbmNoIgoraXMgZ2l2ZW47IHNlZSBiZWxvdykuCisKK1RoaXMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGFjaGlldmVkIGJ5IGNyZWF0aW5nIHJlZmVyZW5jZXMgdG8KK3RoZSByZW1vdGUgYnJhbmNoIGhlYWRzIHVuZGVyIGByZWZzL3JlbW90ZXMvb3JpZ2luYCBhbmQKK2J5IGluaXRpYWxpemluZyBgcmVtb3RlLm9yaWdpbi51cmxgIGFuZCBgcmVtb3RlLm9yaWdpbi5mZXRjaGAKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorCisKK09QVElPTlMKKy0tLS0tLS0KKy0tbG9jYWw6OgorLWw6OgorCVdoZW4gdGhlIHJlcG9zaXRvcnkgdG8gY2xvbmUgZnJvbSBpcyBvbiBhIGxvY2FsIG1hY2hpbmUsCisJdGhpcyBmbGFnIGJ5cGFzc2VzIHRoZSBub3JtYWwgIkdpdCBhd2FyZSIgdHJhbnNwb3J0CisJbWVjaGFuaXNtIGFuZCBjbG9uZXMgdGhlIHJlcG9zaXRvcnkgYnkgbWFraW5nIGEgY29weSBvZgorCUhFQUQgYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgb2JqZWN0cyBhbmQgcmVmcyBkaXJlY3Rvcmllcy4KKwlUaGUgZmlsZXMgdW5kZXIgYC5naXQvb2JqZWN0cy9gIGRpcmVjdG9yeSBhcmUgaGFyZGxpbmtlZAorCXRvIHNhdmUgc3BhY2Ugd2hlbiBwb3NzaWJsZS4KKysKK0lmIHRoZSByZXBvc2l0b3J5IGlzIHNwZWNpZmllZCBhcyBhIGxvY2FsIHBhdGggKGUuZy4sIGAvcGF0aC90by9yZXBvYCksCit0aGlzIGlzIHRoZSBkZWZhdWx0LCBhbmQgLS1sb2NhbCBpcyBlc3NlbnRpYWxseSBhIG5vLW9wLiAgSWYgdGhlCityZXBvc2l0b3J5IGlzIHNwZWNpZmllZCBhcyBhIFVSTCwgdGhlbiB0aGlzIGZsYWcgaXMgaWdub3JlZCAoYW5kIHdlCituZXZlciB1c2UgdGhlIGxvY2FsIG9wdGltaXphdGlvbnMpLiAgU3BlY2lmeWluZyBgLS1uby1sb2NhbGAgd2lsbAorb3ZlcnJpZGUgdGhlIGRlZmF1bHQgd2hlbiBgL3BhdGgvdG8vcmVwb2AgaXMgZ2l2ZW4sIHVzaW5nIHRoZSByZWd1bGFyCitHaXQgdHJhbnNwb3J0IGluc3RlYWQuCisKKy0tbm8taGFyZGxpbmtzOjoKKwlGb3JjZSB0aGUgY2xvbmluZyBwcm9jZXNzIGZyb20gYSByZXBvc2l0b3J5IG9uIGEgbG9jYWwKKwlmaWxlc3lzdGVtIHRvIGNvcHkgdGhlIGZpbGVzIHVuZGVyIHRoZSBgLmdpdC9vYmplY3RzYAorCWRpcmVjdG9yeSBpbnN0ZWFkIG9mIHVzaW5nIGhhcmRsaW5rcy4gVGhpcyBtYXkgYmUgZGVzaXJhYmxlCisJaWYgeW91IGFyZSB0cnlpbmcgdG8gbWFrZSBhIGJhY2stdXAgb2YgeW91ciByZXBvc2l0b3J5LgorCistLXNoYXJlZDo6Cistczo6CisJV2hlbiB0aGUgcmVwb3NpdG9yeSB0byBjbG9uZSBpcyBvbiB0aGUgbG9jYWwgbWFjaGluZSwKKwlpbnN0ZWFkIG9mIHVzaW5nIGhhcmQgbGlua3MsIGF1dG9tYXRpY2FsbHkgc2V0dXAKKwlgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlc2AgdG8gc2hhcmUgdGhlIG9iamVjdHMKKwl3aXRoIHRoZSBzb3VyY2UgcmVwb3NpdG9yeS4gIFRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeQorCXN0YXJ0cyBvdXQgd2l0aG91dCBhbnkgb2JqZWN0IG9mIGl0cyBvd24uCisrCisqTk9URSo6IHRoaXMgaXMgYSBwb3NzaWJseSBkYW5nZXJvdXMgb3BlcmF0aW9uOyBkbyAqbm90KiB1c2UKK2l0IHVubGVzcyB5b3UgdW5kZXJzdGFuZCB3aGF0IGl0IGRvZXMuIElmIHlvdSBjbG9uZSB5b3VyCityZXBvc2l0b3J5IHVzaW5nIHRoaXMgb3B0aW9uIGFuZCB0aGVuIGRlbGV0ZSBicmFuY2hlcyAob3IgdXNlIGFueQorb3RoZXIgR2l0IGNvbW1hbmQgdGhhdCBtYWtlcyBhbnkgZXhpc3RpbmcgY29tbWl0IHVucmVmZXJlbmNlZCkgaW4gdGhlCitzb3VyY2UgcmVwb3NpdG9yeSwgc29tZSBvYmplY3RzIG1heSBiZWNvbWUgdW5yZWZlcmVuY2VkIChvciBkYW5nbGluZykuCitUaGVzZSBvYmplY3RzIG1heSBiZSByZW1vdmVkIGJ5IG5vcm1hbCBHaXQgb3BlcmF0aW9ucyAoc3VjaCBhcyBgZ2l0IGNvbW1pdGApCit3aGljaCBhdXRvbWF0aWNhbGx5IGNhbGwgYGdpdCBnYyAtLWF1dG9gLiAoU2VlIGxpbmtnaXQ6Z2l0LWdjWzFdLikKK0lmIHRoZXNlIG9iamVjdHMgYXJlIHJlbW92ZWQgYW5kIHdlcmUgcmVmZXJlbmNlZCBieSB0aGUgY2xvbmVkIHJlcG9zaXRvcnksCit0aGVuIHRoZSBjbG9uZWQgcmVwb3NpdG9yeSB3aWxsIGJlY29tZSBjb3JydXB0LgorKworTm90ZSB0aGF0IHJ1bm5pbmcgYGdpdCByZXBhY2tgIHdpdGhvdXQgdGhlIGAtbGAgb3B0aW9uIGluIGEgcmVwb3NpdG9yeQorY2xvbmVkIHdpdGggYC1zYCB3aWxsIGNvcHkgb2JqZWN0cyBmcm9tIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpbnRvIGEgcGFjaworaW4gdGhlIGNsb25lZCByZXBvc2l0b3J5LCByZW1vdmluZyB0aGUgZGlzayBzcGFjZSBzYXZpbmdzIG9mIGBjbG9uZSAtc2AuCitJdCBpcyBzYWZlLCBob3dldmVyLCB0byBydW4gYGdpdCBnY2AsIHdoaWNoIHVzZXMgdGhlIGAtbGAgb3B0aW9uIGJ5CitkZWZhdWx0LgorKworSWYgeW91IHdhbnQgdG8gYnJlYWsgdGhlIGRlcGVuZGVuY3kgb2YgYSByZXBvc2l0b3J5IGNsb25lZCB3aXRoIGAtc2Agb24KK2l0cyBzb3VyY2UgcmVwb3NpdG9yeSwgeW91IGNhbiBzaW1wbHkgcnVuIGBnaXQgcmVwYWNrIC1hYCB0byBjb3B5IGFsbAorb2JqZWN0cyBmcm9tIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBpbnRvIGEgcGFjayBpbiB0aGUgY2xvbmVkIHJlcG9zaXRvcnkuCisKKy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pjo6CisJSWYgdGhlIHJlZmVyZW5jZSByZXBvc2l0b3J5IGlzIG9uIHRoZSBsb2NhbCBtYWNoaW5lLAorCWF1dG9tYXRpY2FsbHkgc2V0dXAgYC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgIHRvCisJb2J0YWluIG9iamVjdHMgZnJvbSB0aGUgcmVmZXJlbmNlIHJlcG9zaXRvcnkuICBVc2luZworCWFuIGFscmVhZHkgZXhpc3RpbmcgcmVwb3NpdG9yeSBhcyBhbiBhbHRlcm5hdGUgd2lsbAorCXJlcXVpcmUgZmV3ZXIgb2JqZWN0cyB0byBiZSBjb3BpZWQgZnJvbSB0aGUgcmVwb3NpdG9yeQorCWJlaW5nIGNsb25lZCwgcmVkdWNpbmcgbmV0d29yayBhbmQgbG9jYWwgc3RvcmFnZSBjb3N0cy4KKysKKypOT1RFKjogc2VlIHRoZSBOT1RFIGZvciB0aGUgYC0tc2hhcmVkYCBvcHRpb24sIGFuZCBhbHNvIHRoZQorYC0tZGlzc29jaWF0ZWAgb3B0aW9uLgorCistLWRpc3NvY2lhdGU6OgorCUJvcnJvdyB0aGUgb2JqZWN0cyBmcm9tIHJlZmVyZW5jZSByZXBvc2l0b3JpZXMgc3BlY2lmaWVkCisJd2l0aCB0aGUgYC0tcmVmZXJlbmNlYCBvcHRpb25zIG9ubHkgdG8gcmVkdWNlIG5ldHdvcmsKKwl0cmFuc2ZlciBhbmQgc3RvcCBib3Jyb3dpbmcgZnJvbSB0aGVtIGFmdGVyIGEgY2xvbmUgaXMgbWFkZQorCWJ5IG1ha2luZyBuZWNlc3NhcnkgbG9jYWwgY29waWVzIG9mIGJvcnJvd2VkIG9iamVjdHMuCisKKy0tcXVpZXQ6OgorLXE6OgorCU9wZXJhdGUgcXVpZXRseS4gIFByb2dyZXNzIGlzIG5vdCByZXBvcnRlZCB0byB0aGUgc3RhbmRhcmQKKwllcnJvciBzdHJlYW0uIFRoaXMgZmxhZyBpcyBhbHNvIHBhc3NlZCB0byB0aGUgYHJzeW5jJworCWNvbW1hbmQgd2hlbiBnaXZlbi4KKworLS12ZXJib3NlOjoKKy12OjoKKwlSdW4gdmVyYm9zZWx5LiBEb2VzIG5vdCBhZmZlY3QgdGhlIHJlcG9ydGluZyBvZiBwcm9ncmVzcyBzdGF0dXMKKwl0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLgorCistLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgLXEKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBmb3JjZXMgcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYgdGhlCisJc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlzIG5vdCBkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgorCistLW5vLWNoZWNrb3V0OjoKKy1uOjoKKwlObyBjaGVja291dCBvZiBIRUFEIGlzIHBlcmZvcm1lZCBhZnRlciB0aGUgY2xvbmUgaXMgY29tcGxldGUuCisKKy0tYmFyZTo6CisJTWFrZSBhICdiYXJlJyBHaXQgcmVwb3NpdG9yeS4gIFRoYXQgaXMsIGluc3RlYWQgb2YKKwljcmVhdGluZyBgPGRpcmVjdG9yeT5gIGFuZCBwbGFjaW5nIHRoZSBhZG1pbmlzdHJhdGl2ZQorCWZpbGVzIGluIGA8ZGlyZWN0b3J5Pi8uZ2l0YCwgbWFrZSB0aGUgYDxkaXJlY3Rvcnk+YAorCWl0c2VsZiB0aGUgYCRHSVRfRElSYC4gVGhpcyBvYnZpb3VzbHkgaW1wbGllcyB0aGUgYC1uYAorCWJlY2F1c2UgdGhlcmUgaXMgbm93aGVyZSB0byBjaGVjayBvdXQgdGhlIHdvcmtpbmcgdHJlZS4KKwlBbHNvIHRoZSBicmFuY2ggaGVhZHMgYXQgdGhlIHJlbW90ZSBhcmUgY29waWVkIGRpcmVjdGx5CisJdG8gY29ycmVzcG9uZGluZyBsb2NhbCBicmFuY2ggaGVhZHMsIHdpdGhvdXQgbWFwcGluZworCXRoZW0gdG8gYHJlZnMvcmVtb3Rlcy9vcmlnaW4vYC4gIFdoZW4gdGhpcyBvcHRpb24gaXMKKwl1c2VkLCBuZWl0aGVyIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBub3IgdGhlIHJlbGF0ZWQKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlcyBhcmUgY3JlYXRlZC4KKworLS1taXJyb3I6OgorCVNldCB1cCBhIG1pcnJvciBvZiB0aGUgc291cmNlIHJlcG9zaXRvcnkuICBUaGlzIGltcGxpZXMgYC0tYmFyZWAuCisJQ29tcGFyZWQgdG8gYC0tYmFyZWAsIGAtLW1pcnJvcmAgbm90IG9ubHkgbWFwcyBsb2NhbCBicmFuY2hlcyBvZiB0aGUKKwlzb3VyY2UgdG8gbG9jYWwgYnJhbmNoZXMgb2YgdGhlIHRhcmdldCwgaXQgbWFwcyBhbGwgcmVmcyAoaW5jbHVkaW5nCisJcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLCBub3RlcyBldGMuKSBhbmQgc2V0cyB1cCBhIHJlZnNwZWMgY29uZmlndXJhdGlvbiBzdWNoCisJdGhhdCBhbGwgdGhlc2UgcmVmcyBhcmUgb3ZlcndyaXR0ZW4gYnkgYSBgZ2l0IHJlbW90ZSB1cGRhdGVgIGluIHRoZQorCXRhcmdldCByZXBvc2l0b3J5LgorCistLW9yaWdpbiA8bmFtZT46OgorLW8gPG5hbWU+OjoKKwlJbnN0ZWFkIG9mIHVzaW5nIHRoZSByZW1vdGUgbmFtZSBgb3JpZ2luYCB0byBrZWVwIHRyYWNrCisJb2YgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnksIHVzZSBgPG5hbWU+YC4KKworLS1icmFuY2ggPG5hbWU+OjoKKy1iIDxuYW1lPjo6CisJSW5zdGVhZCBvZiBwb2ludGluZyB0aGUgbmV3bHkgY3JlYXRlZCBIRUFEIHRvIHRoZSBicmFuY2ggcG9pbnRlZAorCXRvIGJ5IHRoZSBjbG9uZWQgcmVwb3NpdG9yeSdzIEhFQUQsIHBvaW50IHRvIGA8bmFtZT5gIGJyYW5jaAorCWluc3RlYWQuIEluIGEgbm9uLWJhcmUgcmVwb3NpdG9yeSwgdGhpcyBpcyB0aGUgYnJhbmNoIHRoYXQgd2lsbAorCWJlIGNoZWNrZWQgb3V0LgorCWAtLWJyYW5jaGAgY2FuIGFsc28gdGFrZSB0YWdzIGFuZCBkZXRhY2hlcyB0aGUgSEVBRCBhdCB0aGF0IGNvbW1pdAorCWluIHRoZSByZXN1bHRpbmcgcmVwb3NpdG9yeS4KKworLS11cGxvYWQtcGFjayA8dXBsb2FkLXBhY2s+OjoKKy11IDx1cGxvYWQtcGFjaz46OgorCVdoZW4gZ2l2ZW4sIGFuZCB0aGUgcmVwb3NpdG9yeSB0byBjbG9uZSBmcm9tIGlzIGFjY2Vzc2VkCisJdmlhIHNzaCwgdGhpcyBzcGVjaWZpZXMgYSBub24tZGVmYXVsdCBwYXRoIGZvciB0aGUgY29tbWFuZAorCXJ1biBvbiB0aGUgb3RoZXIgZW5kLgorCistLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+OjoKKwlTcGVjaWZ5IHRoZSBkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkOworCShTZWUgdGhlICJURU1QTEFURSBESVJFQ1RPUlkiIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtaW5pdFsxXS4pCisKKy0tY29uZmlnIDxrZXk+PTx2YWx1ZT46OgorLWMgPGtleT49PHZhbHVlPjo6CisJU2V0IGEgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpbiB0aGUgbmV3bHktY3JlYXRlZCByZXBvc2l0b3J5OworCXRoaXMgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZXBvc2l0b3J5IGlzCisJaW5pdGlhbGl6ZWQsIGJ1dCBiZWZvcmUgdGhlIHJlbW90ZSBoaXN0b3J5IGlzIGZldGNoZWQgb3IgYW55CisJZmlsZXMgY2hlY2tlZCBvdXQuICBUaGUga2V5IGlzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyBleHBlY3RlZCBieQorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSAoZS5nLiwgYGNvcmUuZW9sPXRydWVgKS4gSWYgbXVsdGlwbGUKKwl2YWx1ZXMgYXJlIGdpdmVuIGZvciB0aGUgc2FtZSBrZXksIGVhY2ggdmFsdWUgd2lsbCBiZSB3cml0dGVuIHRvCisJdGhlIGNvbmZpZyBmaWxlLiBUaGlzIG1ha2VzIGl0IHNhZmUsIGZvciBleGFtcGxlLCB0byBhZGQKKwlhZGRpdGlvbmFsIGZldGNoIHJlZnNwZWNzIHRvIHRoZSBvcmlnaW4gcmVtb3RlLgorCistLWRlcHRoIDxkZXB0aD46OgorCUNyZWF0ZSBhICdzaGFsbG93JyBjbG9uZSB3aXRoIGEgaGlzdG9yeSB0cnVuY2F0ZWQgdG8gdGhlCisJc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMuCisKKy0tW25vLV1zaW5nbGUtYnJhbmNoOjoKKwlDbG9uZSBvbmx5IHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIHRpcCBvZiBhIHNpbmdsZSBicmFuY2gsCisJZWl0aGVyIHNwZWNpZmllZCBieSB0aGUgYC0tYnJhbmNoYCBvcHRpb24gb3IgdGhlIHByaW1hcnkKKwlicmFuY2ggcmVtb3RlJ3MgYEhFQURgIHBvaW50cyBhdC4gV2hlbiBjcmVhdGluZyBhIHNoYWxsb3cKKwljbG9uZSB3aXRoIHRoZSBgLS1kZXB0aGAgb3B0aW9uLCB0aGlzIGlzIHRoZSBkZWZhdWx0LCB1bmxlc3MKKwlgLS1uby1zaW5nbGUtYnJhbmNoYCBpcyBnaXZlbiB0byBmZXRjaCB0aGUgaGlzdG9yaWVzIG5lYXIgdGhlCisJdGlwcyBvZiBhbGwgYnJhbmNoZXMuCisJRnVydGhlciBmZXRjaGVzIGludG8gdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5IHdpbGwgb25seSB1cGRhdGUgdGhlCisJcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgdGhlIGJyYW5jaCB0aGlzIG9wdGlvbiB3YXMgdXNlZCBmb3IgdGhlCisJaW5pdGlhbCBjbG9uaW5nLiAgSWYgdGhlIEhFQUQgYXQgdGhlIHJlbW90ZSBkaWQgbm90IHBvaW50IGF0IGFueQorCWJyYW5jaCB3aGVuIGAtLXNpbmdsZS1icmFuY2hgIGNsb25lIHdhcyBtYWRlLCBubyByZW1vdGUtdHJhY2tpbmcKKwlicmFuY2ggaXMgY3JlYXRlZC4KKworLS1yZWN1cnNpdmU6OgorLS1yZWN1cnNlLXN1Ym1vZHVsZXM6OgorCUFmdGVyIHRoZSBjbG9uZSBpcyBjcmVhdGVkLCBpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIHdpdGhpbiwKKwl1c2luZyB0aGVpciBkZWZhdWx0IHNldHRpbmdzLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gcnVubmluZworCWBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmVgIGltbWVkaWF0ZWx5IGFmdGVyCisJdGhlIGNsb25lIGlzIGZpbmlzaGVkLiBUaGlzIG9wdGlvbiBpcyBpZ25vcmVkIGlmIHRoZSBjbG9uZWQKKwlyZXBvc2l0b3J5IGRvZXMgbm90IGhhdmUgYSB3b3JrdHJlZS9jaGVja291dCAoaS5lLiBpZiBhbnkgb2YKKwlgLS1uby1jaGVja291dGAvYC1uYCwgYC0tYmFyZWAsIG9yIGAtLW1pcnJvcmAgaXMgZ2l2ZW4pCisKKy0tc2VwYXJhdGUtZ2l0LWRpcj08Z2l0IGRpcj46OgorCUluc3RlYWQgb2YgcGxhY2luZyB0aGUgY2xvbmVkIHJlcG9zaXRvcnkgd2hlcmUgaXQgaXMgc3VwcG9zZWQKKwl0byBiZSwgcGxhY2UgdGhlIGNsb25lZCByZXBvc2l0b3J5IGF0IHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5LAorCXRoZW4gbWFrZSBhIGZpbGVzeXN0ZW0tYWdub3N0aWMgR2l0IHN5bWJvbGljIGxpbmsgdG8gdGhlcmUuCisJVGhlIHJlc3VsdCBpcyBHaXQgcmVwb3NpdG9yeSBjYW4gYmUgc2VwYXJhdGVkIGZyb20gd29ya2luZworCXRyZWUuCisKKworPHJlcG9zaXRvcnk+OjoKKwlUaGUgKHBvc3NpYmx5IHJlbW90ZSkgcmVwb3NpdG9yeSB0byBjbG9uZSBmcm9tLiAgU2VlIHRoZQorCTw8VVJMUyxVUkxTPj4gc2VjdGlvbiBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzcGVjaWZ5aW5nCisJcmVwb3NpdG9yaWVzLgorCis8ZGlyZWN0b3J5Pjo6CisJVGhlIG5hbWUgb2YgYSBuZXcgZGlyZWN0b3J5IHRvIGNsb25lIGludG8uICBUaGUgImh1bWFuaXNoIgorCXBhcnQgb2YgdGhlIHNvdXJjZSByZXBvc2l0b3J5IGlzIHVzZWQgaWYgbm8gZGlyZWN0b3J5IGlzCisJZXhwbGljaXRseSBnaXZlbiAoYHJlcG9gIGZvciBgL3BhdGgvdG8vcmVwby5naXRgIGFuZCBgZm9vYAorCWZvciBgaG9zdC54ejpmb28vLmdpdGApLiAgQ2xvbmluZyBpbnRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeQorCWlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5LgorCis6Z2l0LWNsb25lOiAxCitpbmNsdWRlOjp1cmxzLnR4dFtdCisKK0V4YW1wbGVzCistLS0tLS0tLQorCisqIENsb25lIGZyb20gdXBzdHJlYW06CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vLi4uL2xpbnV4LmdpdCBteS1saW51eAorJCBjZCBteS1saW51eAorJCBtYWtlCistLS0tLS0tLS0tLS0KKworCisqIE1ha2UgYSBsb2NhbCBjbG9uZSB0aGF0IGJvcnJvd3MgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHdpdGhvdXQgY2hlY2tpbmcgdGhpbmdzIG91dDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgLWwgLXMgLW4gLiAuLi9jb3B5CiskIGNkIC4uL2NvcHkKKyQgZ2l0IHNob3ctYnJhbmNoCistLS0tLS0tLS0tLS0KKworCisqIENsb25lIGZyb20gdXBzdHJlYW0gd2hpbGUgYm9ycm93aW5nIGZyb20gYW4gZXhpc3RpbmcgbG9jYWwgZGlyZWN0b3J5OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjbG9uZSAtLXJlZmVyZW5jZSAvZ2l0L2xpbnV4LmdpdCBcCisJZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS8uLi4vbGludXguZ2l0IFwKKwlteS1saW51eAorJCBjZCBteS1saW51eAorLS0tLS0tLS0tLS0tCisKKworKiBDcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkgdG8gcHVibGlzaCB5b3VyIGNoYW5nZXMgdG8gdGhlIHB1YmxpYzoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgLS1iYXJlIC1sIC9ob21lL3Byb2ovLmdpdCAvcHViL3NjbS9wcm9qLmdpdAorLS0tLS0tLS0tLS0tCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jb2x1bW4udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY29sdW1uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2QxODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY29sdW1uLnR4dApAQCAtMCwwICsxLDQ4IEBACitnaXQtY29sdW1uKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jb2x1bW4gLSBEaXNwbGF5IGRhdGEgaW4gY29sdW1ucworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY29sdW1uJyBbLS1jb21tYW5kPTxuYW1lPl0gWy0tW3Jhdy1dbW9kZT08bW9kZT5dIFstLXdpZHRoPTx3aWR0aD5dCisJICAgICBbLS1pbmRlbnQ9PHN0cmluZz5dIFstLW5sPTxzdHJpbmc+XSBbLS1wYWRkaW5nPTxuPl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgZm9ybWF0cyBpdHMgaW5wdXQgaW50byBtdWx0aXBsZSBjb2x1bW5zLgorCitPUFRJT05TCistLS0tLS0tCistLWNvbW1hbmQ9PG5hbWU+OjoKKwlMb29rIHVwIGxheW91dCBtb2RlIHVzaW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29sdW1uLjxuYW1lPiBhbmQKKwljb2x1bW4udWkuCisKKy0tbW9kZT08bW9kZT46OgorCVNwZWNpZnkgbGF5b3V0IG1vZGUuIFNlZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGNvbHVtbi51aSBmb3Igb3B0aW9uCisJc3ludGF4LgorCistLXJhdy1tb2RlPTxuPjo6CisJU2FtZSBhcyAtLW1vZGUgYnV0IHRha2UgbW9kZSBlbmNvZGVkIGFzIGEgbnVtYmVyLiBUaGlzIGlzIG1haW5seSB1c2VkCisJYnkgb3RoZXIgY29tbWFuZHMgdGhhdCBoYXZlIGFscmVhZHkgcGFyc2VkIGxheW91dCBtb2RlLgorCistLXdpZHRoPTx3aWR0aD46OgorCVNwZWNpZnkgdGhlIHRlcm1pbmFsIHdpZHRoLiBCeSBkZWZhdWx0ICdnaXQgY29sdW1uJyB3aWxsIGRldGVjdCB0aGUKKwl0ZXJtaW5hbCB3aWR0aCwgb3IgZmFsbCBiYWNrIHRvIDgwIGlmIGl0IGlzIHVuYWJsZSB0byBkbyBzby4KKworLS1pbmRlbnQ9PHN0cmluZz46OgorCVN0cmluZyB0byBiZSBwcmludGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lLgorCistLW5sPTxOPjo6CisJU3RyaW5nIHRvIGJlIHByaW50ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUsCisJaW5jbHVkaW5nIG5ld2xpbmUgY2hhcmFjdGVyLgorCistLXBhZGRpbmc9PE4+OjoKKwlUaGUgbnVtYmVyIG9mIHNwYWNlcyBiZXR3ZWVuIGNvbHVtbnMuIE9uZSBzcGFjZSBieSBkZWZhdWx0LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC10cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGMzM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY29tbWl0LXRyZWUudHh0CkBAIC0wLDAgKzEsMTE4IEBACitnaXQtY29tbWl0LXRyZWUoMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY29tbWl0LXRyZWUgLSBDcmVhdGUgYSBuZXcgY29tbWl0IG9iamVjdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjb21taXQtdHJlZScgPHRyZWU+IFsoLXAgPHBhcmVudD4pLi4uXQorJ2dpdCBjb21taXQtdHJlZScgWygtcCA8cGFyZW50PikuLi5dIFstU1s8a2V5aWQ+XV0gWygtbSA8bWVzc2FnZT4pLi4uXQorCQkgIFsoLUYgPGZpbGU+KS4uLl0gPHRyZWU+CisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGlzIHVzdWFsbHkgbm90IHdoYXQgYW4gZW5kIHVzZXIgd2FudHMgdG8gcnVuIGRpcmVjdGx5LiAgU2VlCitsaW5rZ2l0OmdpdC1jb21taXRbMV0gaW5zdGVhZC4KKworQ3JlYXRlcyBhIG5ldyBjb21taXQgb2JqZWN0IGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0cmVlIG9iamVjdCBhbmQKK2VtaXRzIHRoZSBuZXcgY29tbWl0IG9iamVjdCBpZCBvbiBzdGRvdXQuIFRoZSBsb2cgbWVzc2FnZSBpcyByZWFkCitmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgdW5sZXNzIGAtbWAgb3IgYC1GYCBvcHRpb25zIGFyZSBnaXZlbi4KKworQSBjb21taXQgb2JqZWN0IG1heSBoYXZlIGFueSBudW1iZXIgb2YgcGFyZW50cy4gV2l0aCBleGFjdGx5IG9uZQorcGFyZW50LCBpdCBpcyBhbiBvcmRpbmFyeSBjb21taXQuIEhhdmluZyBtb3JlIHRoYW4gb25lIHBhcmVudCBtYWtlcwordGhlIGNvbW1pdCBhIG1lcmdlIGJldHdlZW4gc2V2ZXJhbCBsaW5lcyBvZiBoaXN0b3J5LiBJbml0aWFsIChyb290KQorY29tbWl0cyBoYXZlIG5vIHBhcmVudHMuCisKK1doaWxlIGEgdHJlZSByZXByZXNlbnRzIGEgcGFydGljdWxhciBkaXJlY3Rvcnkgc3RhdGUgb2YgYSB3b3JraW5nCitkaXJlY3RvcnksIGEgY29tbWl0IHJlcHJlc2VudHMgdGhhdCBzdGF0ZSBpbiAidGltZSIsIGFuZCBleHBsYWlucyBob3cKK3RvIGdldCB0aGVyZS4KKworTm9ybWFsbHkgYSBjb21taXQgd291bGQgaWRlbnRpZnkgYSBuZXcgIkhFQUQiIHN0YXRlLCBhbmQgd2hpbGUgR2l0Citkb2Vzbid0IGNhcmUgd2hlcmUgeW91IHNhdmUgdGhlIG5vdGUgYWJvdXQgdGhhdCBzdGF0ZSwgaW4gcHJhY3RpY2Ugd2UKK3RlbmQgdG8ganVzdCB3cml0ZSB0aGUgcmVzdWx0IHRvIHRoZSBmaWxlIHRoYXQgaXMgcG9pbnRlZCBhdCBieQorYC5naXQvSEVBRGAsIHNvIHRoYXQgd2UgY2FuIGFsd2F5cyBzZWUgd2hhdCB0aGUgbGFzdCBjb21taXR0ZWQKK3N0YXRlIHdhcy4KKworT1BUSU9OUworLS0tLS0tLQorPHRyZWU+OjoKKwlBbiBleGlzdGluZyB0cmVlIG9iamVjdAorCistcCA8cGFyZW50Pjo6CisJRWFjaCAnLXAnIGluZGljYXRlcyB0aGUgaWQgb2YgYSBwYXJlbnQgY29tbWl0IG9iamVjdC4KKworLW0gPG1lc3NhZ2U+OjoKKwlBIHBhcmFncmFwaCBpbiB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLiBUaGlzIGNhbiBiZSBnaXZlbiBtb3JlIHRoYW4KKwlvbmNlIGFuZCBlYWNoIDxtZXNzYWdlPiBiZWNvbWVzIGl0cyBvd24gcGFyYWdyYXBoLgorCistRiA8ZmlsZT46OgorCVJlYWQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBmaWxlLiBVc2UgYC1gIHRvIHJlYWQKKwlmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dC4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorCUdQRy1zaWduIGNvbW1pdHMuIFRoZSBga2V5aWRgIGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZAorCWRlZmF1bHRzIHRvIHRoZSBjb21taXR0ZXIgaWRlbnRpdHk7IGlmIHNwZWNpZmllZCwgaXQgbXVzdCBiZQorCXN0dWNrIHRvIHRoZSBvcHRpb24gd2l0aG91dCBhIHNwYWNlLgorCistLW5vLWdwZy1zaWduOjoKKwlDb3VudGVybWFuZCBgY29tbWl0LmdwZ1NpZ25gIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdGhhdCBpcworCXNldCB0byBmb3JjZSBlYWNoIGFuZCBldmVyeSBjb21taXQgdG8gYmUgc2lnbmVkLgorCisKK0NvbW1pdCBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgY29tbWl0IGVuY2Fwc3VsYXRlczoKKworLSBhbGwgcGFyZW50IG9iamVjdCBpZHMKKy0gYXV0aG9yIG5hbWUsIGVtYWlsIGFuZCBkYXRlCistIGNvbW1pdHRlciBuYW1lIGFuZCBlbWFpbCBhbmQgdGhlIGNvbW1pdCB0aW1lLgorCitXaGlsZSBwYXJlbnQgb2JqZWN0IGlkcyBhcmUgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYXV0aG9yIGFuZAorY29tbWl0dGVyIGluZm9ybWF0aW9uIGlzIHRha2VuIGZyb20gdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsCitpZiBzZXQ6CisKKwlHSVRfQVVUSE9SX05BTUUKKwlHSVRfQVVUSE9SX0VNQUlMCisJR0lUX0FVVEhPUl9EQVRFCisJR0lUX0NPTU1JVFRFUl9OQU1FCisJR0lUX0NPTU1JVFRFUl9FTUFJTAorCUdJVF9DT01NSVRURVJfREFURQorCisobmIgIjwiLCAiPiIgYW5kICJcbiJzIGFyZSBzdHJpcHBlZCkKKworSW4gY2FzZSAoc29tZSBvZikgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0LCB0aGUgaW5mb3JtYXRpb24KK2lzIHRha2VuIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gaXRlbXMgdXNlci5uYW1lIGFuZCB1c2VyLmVtYWlsLCBvciwgaWYgbm90CitwcmVzZW50LCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgRU1BSUwsIG9yLCBpZiB0aGF0IGlzIG5vdCBzZXQsCitzeXN0ZW0gdXNlciBuYW1lIGFuZCB0aGUgaG9zdG5hbWUgdXNlZCBmb3Igb3V0Z29pbmcgbWFpbCAodGFrZW4KK2Zyb20gYC9ldGMvbWFpbG5hbWVgIGFuZCBmYWxsaW5nIGJhY2sgdG8gdGhlIGZ1bGx5IHF1YWxpZmllZCBob3N0bmFtZSB3aGVuCit0aGF0IGZpbGUgZG9lcyBub3QgZXhpc3QpLgorCitBIGNvbW1pdCBjb21tZW50IGlzIHJlYWQgZnJvbSBzdGRpbi4gSWYgYSBjaGFuZ2Vsb2cKK2VudHJ5IGlzIG5vdCBwcm92aWRlZCB2aWEgIjwiIHJlZGlyZWN0aW9uLCAnZ2l0IGNvbW1pdC10cmVlJyB3aWxsIGp1c3Qgd2FpdAorZm9yIG9uZSB0byBiZSBlbnRlcmVkIGFuZCB0ZXJtaW5hdGVkIHdpdGggXkQuCisKK2luY2x1ZGU6OmRhdGUtZm9ybWF0cy50eHRbXQorCitEaXNjdXNzaW9uCistLS0tLS0tLS0tCisKK2luY2x1ZGU6OmkxOG4udHh0W10KKworRklMRVMKKy0tLS0tCisvZXRjL21haWxuYW1lCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtd3JpdGUtdHJlZVsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvbW1pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMzRhNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jb21taXQudHh0CkBAIC0wLDAgKzEsNDc4IEBACitnaXQtY29tbWl0KDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jb21taXQgLSBSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY29tbWl0JyBbLWEgfCAtLWludGVyYWN0aXZlIHwgLS1wYXRjaF0gWy1zXSBbLXZdIFstdTxtb2RlPl0gWy0tYW1lbmRdCisJICAgWy0tZHJ5LXJ1bl0gWygtYyB8IC1DIHwgLS1maXh1cCB8IC0tc3F1YXNoKSA8Y29tbWl0Pl0KKwkgICBbLUYgPGZpbGU+IHwgLW0gPG1zZz5dIFstLXJlc2V0LWF1dGhvcl0gWy0tYWxsb3ctZW1wdHldCisJICAgWy0tYWxsb3ctZW1wdHktbWVzc2FnZV0gWy0tbm8tdmVyaWZ5XSBbLWVdIFstLWF1dGhvcj08YXV0aG9yPl0KKwkgICBbLS1kYXRlPTxkYXRlPl0gWy0tY2xlYW51cD08bW9kZT5dIFstLVtuby1dc3RhdHVzXQorCSAgIFstaSB8IC1vXSBbLVNbPGtleWlkPl1dIFstLV0gWzxmaWxlPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitTdG9yZXMgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGluZGV4IGluIGEgbmV3IGNvbW1pdCBhbG9uZword2l0aCBhIGxvZyBtZXNzYWdlIGZyb20gdGhlIHVzZXIgZGVzY3JpYmluZyB0aGUgY2hhbmdlcy4KKworVGhlIGNvbnRlbnQgdG8gYmUgYWRkZWQgY2FuIGJlIHNwZWNpZmllZCBpbiBzZXZlcmFsIHdheXM6CisKKzEuIGJ5IHVzaW5nICdnaXQgYWRkJyB0byBpbmNyZW1lbnRhbGx5ICJhZGQiIGNoYW5nZXMgdG8gdGhlCisgICBpbmRleCBiZWZvcmUgdXNpbmcgdGhlICdjb21taXQnIGNvbW1hbmQgKE5vdGU6IGV2ZW4gbW9kaWZpZWQKKyAgIGZpbGVzIG11c3QgYmUgImFkZGVkIik7CisKKzIuIGJ5IHVzaW5nICdnaXQgcm0nIHRvIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUKKyAgIGFuZCB0aGUgaW5kZXgsIGFnYWluIGJlZm9yZSB1c2luZyB0aGUgJ2NvbW1pdCcgY29tbWFuZDsKKworMy4gYnkgbGlzdGluZyBmaWxlcyBhcyBhcmd1bWVudHMgdG8gdGhlICdjb21taXQnIGNvbW1hbmQsIGluIHdoaWNoCisgICBjYXNlIHRoZSBjb21taXQgd2lsbCBpZ25vcmUgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4LCBhbmQgaW5zdGVhZAorICAgcmVjb3JkIHRoZSBjdXJyZW50IGNvbnRlbnQgb2YgdGhlIGxpc3RlZCBmaWxlcyAod2hpY2ggbXVzdCBhbHJlYWR5CisgICBiZSBrbm93biB0byBHaXQpOworCis0LiBieSB1c2luZyB0aGUgLWEgc3dpdGNoIHdpdGggdGhlICdjb21taXQnIGNvbW1hbmQgdG8gYXV0b21hdGljYWxseQorICAgImFkZCIgY2hhbmdlcyBmcm9tIGFsbCBrbm93biBmaWxlcyAoaS5lLiBhbGwgZmlsZXMgdGhhdCBhcmUgYWxyZWFkeQorICAgbGlzdGVkIGluIHRoZSBpbmRleCkgYW5kIHRvIGF1dG9tYXRpY2FsbHkgInJtIiBmaWxlcyBpbiB0aGUgaW5kZXgKKyAgIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgd29ya2luZyB0cmVlLCBhbmQgdGhlbiBwZXJmb3JtIHRoZQorICAgYWN0dWFsIGNvbW1pdDsKKworNS4gYnkgdXNpbmcgdGhlIC0taW50ZXJhY3RpdmUgb3IgLS1wYXRjaCBzd2l0Y2hlcyB3aXRoIHRoZSAnY29tbWl0JyBjb21tYW5kCisgICB0byBkZWNpZGUgb25lIGJ5IG9uZSB3aGljaCBmaWxlcyBvciBodW5rcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgY29tbWl0LAorICAgYmVmb3JlIGZpbmFsaXppbmcgdGhlIG9wZXJhdGlvbi4gU2VlIHRoZSBgYEludGVyYWN0aXZlIE1vZGUnJyBzZWN0aW9uIG9mCisgICBsaW5rZ2l0OmdpdC1hZGRbMV0gdG8gbGVhcm4gaG93IHRvIG9wZXJhdGUgdGhlc2UgbW9kZXMuCisKK1RoZSBgLS1kcnktcnVuYCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gb2J0YWluIGEKK3N1bW1hcnkgb2Ygd2hhdCBpcyBpbmNsdWRlZCBieSBhbnkgb2YgdGhlIGFib3ZlIGZvciB0aGUgbmV4dAorY29tbWl0IGJ5IGdpdmluZyB0aGUgc2FtZSBzZXQgb2YgcGFyYW1ldGVycyAob3B0aW9ucyBhbmQgcGF0aHMpLgorCitJZiB5b3UgbWFrZSBhIGNvbW1pdCBhbmQgdGhlbiBmaW5kIGEgbWlzdGFrZSBpbW1lZGlhdGVseSBhZnRlcgordGhhdCwgeW91IGNhbiByZWNvdmVyIGZyb20gaXQgd2l0aCAnZ2l0IHJlc2V0Jy4KKworCitPUFRJT05TCistLS0tLS0tCistYTo6CistLWFsbDo6CisJVGVsbCB0aGUgY29tbWFuZCB0byBhdXRvbWF0aWNhbGx5IHN0YWdlIGZpbGVzIHRoYXQgaGF2ZQorCWJlZW4gbW9kaWZpZWQgYW5kIGRlbGV0ZWQsIGJ1dCBuZXcgZmlsZXMgeW91IGhhdmUgbm90CisJdG9sZCBHaXQgYWJvdXQgYXJlIG5vdCBhZmZlY3RlZC4KKworLXA6OgorLS1wYXRjaDo6CisJVXNlIHRoZSBpbnRlcmFjdGl2ZSBwYXRjaCBzZWxlY3Rpb24gaW50ZXJmYWNlIHRvIGNob3NlCisJd2hpY2ggY2hhbmdlcyB0byBjb21taXQuIFNlZSBsaW5rZ2l0OmdpdC1hZGRbMV0gZm9yCisJZGV0YWlscy4KKworLUMgPGNvbW1pdD46OgorLS1yZXVzZS1tZXNzYWdlPTxjb21taXQ+OjoKKwlUYWtlIGFuIGV4aXN0aW5nIGNvbW1pdCBvYmplY3QsIGFuZCByZXVzZSB0aGUgbG9nIG1lc3NhZ2UKKwlhbmQgdGhlIGF1dGhvcnNoaXAgaW5mb3JtYXRpb24gKGluY2x1ZGluZyB0aGUgdGltZXN0YW1wKQorCXdoZW4gY3JlYXRpbmcgdGhlIGNvbW1pdC4KKworLWMgPGNvbW1pdD46OgorLS1yZWVkaXQtbWVzc2FnZT08Y29tbWl0Pjo6CisJTGlrZSAnLUMnLCBidXQgd2l0aCAnLWMnIHRoZSBlZGl0b3IgaXMgaW52b2tlZCwgc28gdGhhdAorCXRoZSB1c2VyIGNhbiBmdXJ0aGVyIGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlLgorCistLWZpeHVwPTxjb21taXQ+OjoKKwlDb25zdHJ1Y3QgYSBjb21taXQgbWVzc2FnZSBmb3IgdXNlIHdpdGggYHJlYmFzZSAtLWF1dG9zcXVhc2hgLgorCVRoZSBjb21taXQgbWVzc2FnZSB3aWxsIGJlIHRoZSBzdWJqZWN0IGxpbmUgZnJvbSB0aGUgc3BlY2lmaWVkCisJY29tbWl0IHdpdGggYSBwcmVmaXggb2YgImZpeHVwISAiLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXQorCWZvciBkZXRhaWxzLgorCistLXNxdWFzaD08Y29tbWl0Pjo6CisJQ29uc3RydWN0IGEgY29tbWl0IG1lc3NhZ2UgZm9yIHVzZSB3aXRoIGByZWJhc2UgLS1hdXRvc3F1YXNoYC4KKwlUaGUgY29tbWl0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lIGlzIHRha2VuIGZyb20gdGhlIHNwZWNpZmllZAorCWNvbW1pdCB3aXRoIGEgcHJlZml4IG9mICJzcXVhc2ghICIuICBDYW4gYmUgdXNlZCB3aXRoIGFkZGl0aW9uYWwKKwljb21taXQgbWVzc2FnZSBvcHRpb25zIChgLW1gL2AtY2AvYC1DYC9gLUZgKS4gU2VlCisJbGlua2dpdDpnaXQtcmViYXNlWzFdIGZvciBkZXRhaWxzLgorCistLXJlc2V0LWF1dGhvcjo6CisJV2hlbiB1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCBvcHRpb25zLCBvciB3aGVuIGNvbW1pdHRpbmcgYWZ0ZXIgYQorCWEgY29uZmxpY3RpbmcgY2hlcnJ5LXBpY2ssIGRlY2xhcmUgdGhhdCB0aGUgYXV0aG9yc2hpcCBvZiB0aGUKKwlyZXN1bHRpbmcgY29tbWl0IG5vdyBiZWxvbmdzIHRvIHRoZSBjb21taXR0ZXIuIFRoaXMgYWxzbyByZW5ld3MKKwl0aGUgYXV0aG9yIHRpbWVzdGFtcC4KKworLS1zaG9ydDo6CisJV2hlbiBkb2luZyBhIGRyeS1ydW4sIGdpdmUgdGhlIG91dHB1dCBpbiB0aGUgc2hvcnQtZm9ybWF0LiBTZWUKKwlsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gZm9yIGRldGFpbHMuIEltcGxpZXMgYC0tZHJ5LXJ1bmAuCisKKy0tYnJhbmNoOjoKKwlTaG93IHRoZSBicmFuY2ggYW5kIHRyYWNraW5nIGluZm8gZXZlbiBpbiBzaG9ydC1mb3JtYXQuCisKKy0tcG9yY2VsYWluOjoKKwlXaGVuIGRvaW5nIGEgZHJ5LXJ1biwgZ2l2ZSB0aGUgb3V0cHV0IGluIGEgcG9yY2VsYWluLXJlYWR5CisJZm9ybWF0LiBTZWUgbGlua2dpdDpnaXQtc3RhdHVzWzFdIGZvciBkZXRhaWxzLiBJbXBsaWVzCisJYC0tZHJ5LXJ1bmAuCisKKy0tbG9uZzo6CisJV2hlbiBkb2luZyBhIGRyeS1ydW4sIGdpdmUgdGhlIG91dHB1dCBpbiBhIHRoZSBsb25nLWZvcm1hdC4KKwlJbXBsaWVzIGAtLWRyeS1ydW5gLgorCistejo6CistLW51bGw6OgorCVdoZW4gc2hvd2luZyBgc2hvcnRgIG9yIGBwb3JjZWxhaW5gIHN0YXR1cyBvdXRwdXQsIHRlcm1pbmF0ZQorCWVudHJpZXMgaW4gdGhlIHN0YXR1cyBvdXRwdXQgd2l0aCBOVUwsIGluc3RlYWQgb2YgTEYuIElmIG5vCisJZm9ybWF0IGlzIGdpdmVuLCBpbXBsaWVzIHRoZSBgLS1wb3JjZWxhaW5gIG91dHB1dCBmb3JtYXQuCisKKy1GIDxmaWxlPjo6CistLWZpbGU9PGZpbGU+OjoKKwlUYWtlIHRoZSBjb21taXQgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBmaWxlLiAgVXNlICctJyB0bworCXJlYWQgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCisKKy0tYXV0aG9yPTxhdXRob3I+OjoKKwlPdmVycmlkZSB0aGUgY29tbWl0IGF1dGhvci4gU3BlY2lmeSBhbiBleHBsaWNpdCBhdXRob3IgdXNpbmcgdGhlCisJc3RhbmRhcmQgYEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+YCBmb3JtYXQuIE90aGVyd2lzZSA8YXV0aG9yPgorCWlzIGFzc3VtZWQgdG8gYmUgYSBwYXR0ZXJuIGFuZCBpcyB1c2VkIHRvIHNlYXJjaCBmb3IgYW4gZXhpc3RpbmcKKwljb21taXQgYnkgdGhhdCBhdXRob3IgKGkuZS4gcmV2LWxpc3QgLS1hbGwgLWkgLS1hdXRob3I9PGF1dGhvcj4pOworCXRoZSBjb21taXQgYXV0aG9yIGlzIHRoZW4gY29waWVkIGZyb20gdGhlIGZpcnN0IHN1Y2ggY29tbWl0IGZvdW5kLgorCistLWRhdGU9PGRhdGU+OjoKKwlPdmVycmlkZSB0aGUgYXV0aG9yIGRhdGUgdXNlZCBpbiB0aGUgY29tbWl0LgorCistbSA8bXNnPjo6CistLW1lc3NhZ2U9PG1zZz46OgorCVVzZSB0aGUgZ2l2ZW4gPG1zZz4gYXMgdGhlIGNvbW1pdCBtZXNzYWdlLgorCUlmIG11bHRpcGxlIGAtbWAgb3B0aW9ucyBhcmUgZ2l2ZW4sIHRoZWlyIHZhbHVlcyBhcmUKKwljb25jYXRlbmF0ZWQgYXMgc2VwYXJhdGUgcGFyYWdyYXBocy4KKworLXQgPGZpbGU+OjoKKy0tdGVtcGxhdGU9PGZpbGU+OjoKKwlXaGVuIGVkaXRpbmcgdGhlIGNvbW1pdCBtZXNzYWdlLCBzdGFydCB0aGUgZWRpdG9yIHdpdGggdGhlCisJY29udGVudHMgaW4gdGhlIGdpdmVuIGZpbGUuICBUaGUgYGNvbW1pdC50ZW1wbGF0ZWAgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlIGlzIG9mdGVuIHVzZWQgdG8gZ2l2ZSB0aGlzIG9wdGlvbiBpbXBsaWNpdGx5IHRvIHRoZQorCWNvbW1hbmQuICBUaGlzIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCBieSBwcm9qZWN0cyB0aGF0IHdhbnQgdG8KKwlndWlkZSBwYXJ0aWNpcGFudHMgd2l0aCBzb21lIGhpbnRzIG9uIHdoYXQgdG8gd3JpdGUgaW4gdGhlIG1lc3NhZ2UKKwlpbiB3aGF0IG9yZGVyLiAgSWYgdGhlIHVzZXIgZXhpdHMgdGhlIGVkaXRvciB3aXRob3V0IGVkaXRpbmcgdGhlCisJbWVzc2FnZSwgdGhlIGNvbW1pdCBpcyBhYm9ydGVkLiAgVGhpcyBoYXMgbm8gZWZmZWN0IHdoZW4gYSBtZXNzYWdlCisJaXMgZ2l2ZW4gYnkgb3RoZXIgbWVhbnMsIGUuZy4gd2l0aCB0aGUgYC1tYCBvciBgLUZgIG9wdGlvbnMuCisKKy1zOjoKKy0tc2lnbm9mZjo6CisJQWRkIFNpZ25lZC1vZmYtYnkgbGluZSBieSB0aGUgY29tbWl0dGVyIGF0IHRoZSBlbmQgb2YgdGhlIGNvbW1pdAorCWxvZyBtZXNzYWdlLgorCistbjo6CistLW5vLXZlcmlmeTo6CisJVGhpcyBvcHRpb24gYnlwYXNzZXMgdGhlIHByZS1jb21taXQgYW5kIGNvbW1pdC1tc2cgaG9va3MuCisJU2VlIGFsc28gbGlua2dpdDpnaXRob29rc1s1XS4KKworLS1hbGxvdy1lbXB0eTo6CisJVXN1YWxseSByZWNvcmRpbmcgYSBjb21taXQgdGhhdCBoYXMgdGhlIGV4YWN0IHNhbWUgdHJlZSBhcyBpdHMKKwlzb2xlIHBhcmVudCBjb21taXQgaXMgYSBtaXN0YWtlLCBhbmQgdGhlIGNvbW1hbmQgcHJldmVudHMgeW91CisJZnJvbSBtYWtpbmcgc3VjaCBhIGNvbW1pdC4gIFRoaXMgb3B0aW9uIGJ5cGFzc2VzIHRoZSBzYWZldHksIGFuZAorCWlzIHByaW1hcmlseSBmb3IgdXNlIGJ5IGZvcmVpZ24gU0NNIGludGVyZmFjZSBzY3JpcHRzLgorCistLWFsbG93LWVtcHR5LW1lc3NhZ2U6OgorICAgICAgIExpa2UgLS1hbGxvdy1lbXB0eSB0aGlzIGNvbW1hbmQgaXMgcHJpbWFyaWx5IGZvciB1c2UgYnkgZm9yZWlnbgorICAgICAgIFNDTSBpbnRlcmZhY2Ugc2NyaXB0cy4gSXQgYWxsb3dzIHlvdSB0byBjcmVhdGUgYSBjb21taXQgd2l0aCBhbgorICAgICAgIGVtcHR5IGNvbW1pdCBtZXNzYWdlIHdpdGhvdXQgdXNpbmcgcGx1bWJpbmcgY29tbWFuZHMgbGlrZQorICAgICAgIGxpbmtnaXQ6Z2l0LWNvbW1pdC10cmVlWzFdLgorCistLWNsZWFudXA9PG1vZGU+OjoKKwlUaGlzIG9wdGlvbiBkZXRlcm1pbmVzIGhvdyB0aGUgc3VwcGxpZWQgY29tbWl0IG1lc3NhZ2Ugc2hvdWxkIGJlCisJY2xlYW5lZCB1cCBiZWZvcmUgY29tbWl0dGluZy4gIFRoZSAnPG1vZGU+JyBjYW4gYmUgYHN0cmlwYCwKKwlgd2hpdGVzcGFjZWAsIGB2ZXJiYXRpbWAsIGBzY2lzc29yc2Agb3IgYGRlZmF1bHRgLgorKworLS0KK3N0cmlwOjoKKwlTdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyBlbXB0eSBsaW5lcywgdHJhaWxpbmcgd2hpdGVzcGFjZSwKKwljb21tZW50YXJ5IGFuZCBjb2xsYXBzZSBjb25zZWN1dGl2ZSBlbXB0eSBsaW5lcy4KK3doaXRlc3BhY2U6OgorCVNhbWUgYXMgYHN0cmlwYCBleGNlcHQgI2NvbW1lbnRhcnkgaXMgbm90IHJlbW92ZWQuCit2ZXJiYXRpbTo6CisJRG8gbm90IGNoYW5nZSB0aGUgbWVzc2FnZSBhdCBhbGwuCitzY2lzc29yczo6CisJU2FtZSBhcyBgd2hpdGVzcGFjZWAsIGV4Y2VwdCB0aGF0IGV2ZXJ5dGhpbmcgZnJvbSAoYW5kCisJaW5jbHVkaW5nKSB0aGUgbGluZQorCSJgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYCIKKwlpcyB0cnVuY2F0ZWQgaWYgdGhlIG1lc3NhZ2UgaXMgdG8gYmUgZWRpdGVkLiAiYCNgIiBjYW4gYmUKKwljdXN0b21pemVkIHdpdGggY29yZS5jb21tZW50Q2hhci4KK2RlZmF1bHQ6OgorCVNhbWUgYXMgYHN0cmlwYCBpZiB0aGUgbWVzc2FnZSBpcyB0byBiZSBlZGl0ZWQuCisJT3RoZXJ3aXNlIGB3aGl0ZXNwYWNlYC4KKy0tCisrCitUaGUgZGVmYXVsdCBjYW4gYmUgY2hhbmdlZCBieSB0aGUgJ2NvbW1pdC5jbGVhbnVwJyBjb25maWd1cmF0aW9uCit2YXJpYWJsZSAoc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKKy1lOjoKKy0tZWRpdDo6CisJVGhlIG1lc3NhZ2UgdGFrZW4gZnJvbSBmaWxlIHdpdGggYC1GYCwgY29tbWFuZCBsaW5lIHdpdGgKKwlgLW1gLCBhbmQgZnJvbSBjb21taXQgb2JqZWN0IHdpdGggYC1DYCBhcmUgdXN1YWxseSB1c2VkIGFzCisJdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSB1bm1vZGlmaWVkLiBUaGlzIG9wdGlvbiBsZXRzIHlvdQorCWZ1cnRoZXIgZWRpdCB0aGUgbWVzc2FnZSB0YWtlbiBmcm9tIHRoZXNlIHNvdXJjZXMuCisKKy0tbm8tZWRpdDo6CisJVXNlIHRoZSBzZWxlY3RlZCBjb21taXQgbWVzc2FnZSB3aXRob3V0IGxhdW5jaGluZyBhbiBlZGl0b3IuCisJRm9yIGV4YW1wbGUsIGBnaXQgY29tbWl0IC0tYW1lbmQgLS1uby1lZGl0YCBhbWVuZHMgYSBjb21taXQKKwl3aXRob3V0IGNoYW5naW5nIGl0cyBjb21taXQgbWVzc2FnZS4KKworLS1hbWVuZDo6CisJUmVwbGFjZSB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBieSBjcmVhdGluZyBhIG5ldworCWNvbW1pdC4gVGhlIHJlY29yZGVkIHRyZWUgaXMgcHJlcGFyZWQgYXMgdXN1YWwgKGluY2x1ZGluZworCXRoZSBlZmZlY3Qgb2YgdGhlIGAtaWAgYW5kIGAtb2Agb3B0aW9ucyBhbmQgZXhwbGljaXQKKwlwYXRoc3BlYyksIGFuZCB0aGUgbWVzc2FnZSBmcm9tIHRoZSBvcmlnaW5hbCBjb21taXQgaXMgdXNlZAorCWFzIHRoZSBzdGFydGluZyBwb2ludCwgaW5zdGVhZCBvZiBhbiBlbXB0eSBtZXNzYWdlLCB3aGVuIG5vCisJb3RoZXIgbWVzc2FnZSBpcyBzcGVjaWZpZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHZpYSBvcHRpb25zCisJc3VjaCBhcyBgLW1gLCBgLUZgLCBgLWNgLCBldGMuICBUaGUgbmV3IGNvbW1pdCBoYXMgdGhlIHNhbWUKKwlwYXJlbnRzIGFuZCBhdXRob3IgYXMgdGhlIGN1cnJlbnQgb25lICh0aGUgYC0tcmVzZXQtYXV0aG9yYAorCW9wdGlvbiBjYW4gY291bnRlcm1hbmQgdGhpcykuCisrCistLQorSXQgaXMgYSByb3VnaCBlcXVpdmFsZW50IGZvcjoKKy0tLS0tLQorCSQgZ2l0IHJlc2V0IC0tc29mdCBIRUFEXgorCSQgLi4uIGRvIHNvbWV0aGluZyBlbHNlIHRvIGNvbWUgdXAgd2l0aCB0aGUgcmlnaHQgdHJlZSAuLi4KKwkkIGdpdCBjb21taXQgLWMgT1JJR19IRUFECisKKy0tLS0tLQorYnV0IGNhbiBiZSB1c2VkIHRvIGFtZW5kIGEgbWVyZ2UgY29tbWl0LgorLS0KKysKK1lvdSBzaG91bGQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHJld3JpdGluZyBoaXN0b3J5IGlmIHlvdQorYW1lbmQgYSBjb21taXQgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHB1Ymxpc2hlZC4gIChTZWUgdGhlICJSRUNPVkVSSU5HCitGUk9NIFVQU1RSRUFNIFJFQkFTRSIgc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdC1yZWJhc2VbMV0uKQorCistLW5vLXBvc3QtcmV3cml0ZTo6CisJQnlwYXNzIHRoZSBwb3N0LXJld3JpdGUgaG9vay4KKworLWk6OgorLS1pbmNsdWRlOjoKKwlCZWZvcmUgbWFraW5nIGEgY29tbWl0IG91dCBvZiBzdGFnZWQgY29udGVudHMgc28gZmFyLAorCXN0YWdlIHRoZSBjb250ZW50cyBvZiBwYXRocyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lCisJYXMgd2VsbC4gIFRoaXMgaXMgdXN1YWxseSBub3Qgd2hhdCB5b3Ugd2FudCB1bmxlc3MgeW91CisJYXJlIGNvbmNsdWRpbmcgYSBjb25mbGljdGVkIG1lcmdlLgorCistbzo6CistLW9ubHk6OgorCU1ha2UgYSBjb21taXQgYnkgdGFraW5nIHRoZSB1cGRhdGVkIHdvcmtpbmcgdHJlZSBjb250ZW50cworCW9mIHRoZSBwYXRocyBzcGVjaWZpZWQgb24gdGhlCisJY29tbWFuZCBsaW5lLCBkaXNyZWdhcmRpbmcgYW55IGNvbnRlbnRzIHRoYXQgaGF2ZSBiZWVuCisJc3RhZ2VkIGZvciBvdGhlciBwYXRocy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlIG9mIG9wZXJhdGlvbiBvZgorCSdnaXQgY29tbWl0JyBpZiBhbnkgcGF0aHMgYXJlIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsCisJaW4gd2hpY2ggY2FzZSB0aGlzIG9wdGlvbiBjYW4gYmUgb21pdHRlZC4KKwlJZiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCAnLS1hbWVuZCcsIHRoZW4KKwlubyBwYXRocyBuZWVkIHRvIGJlIHNwZWNpZmllZCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYW1lbmQKKwl0aGUgbGFzdCBjb21taXQgd2l0aG91dCBjb21taXR0aW5nIGNoYW5nZXMgdGhhdCBoYXZlCisJYWxyZWFkeSBiZWVuIHN0YWdlZC4KKworLXVbPG1vZGU+XTo6CistLXVudHJhY2tlZC1maWxlc1s9PG1vZGU+XTo6CisJU2hvdyB1bnRyYWNrZWQgZmlsZXMuCisrCitUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvICdhbGwnKSwgYW5kIGlzIHVzZWQgdG8KK3NwZWNpZnkgdGhlIGhhbmRsaW5nIG9mIHVudHJhY2tlZCBmaWxlczsgd2hlbiAtdSBpcyBub3QgdXNlZCwgdGhlCitkZWZhdWx0IGlzICdub3JtYWwnLCBpLmUuIHNob3cgdW50cmFja2VkIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KKysKK1RoZSBwb3NzaWJsZSBvcHRpb25zIGFyZToKKysKKwktICdubycgICAgIC0gU2hvdyBubyB1bnRyYWNrZWQgZmlsZXMKKwktICdub3JtYWwnIC0gU2hvd3MgdW50cmFja2VkIGZpbGVzIGFuZCBkaXJlY3RvcmllcworCS0gJ2FsbCcgICAgLSBBbHNvIHNob3dzIGluZGl2aWR1YWwgZmlsZXMgaW4gdW50cmFja2VkIGRpcmVjdG9yaWVzLgorKworVGhlIGRlZmF1bHQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgZG9jdW1lbnRlZCBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKy12OjoKKy0tdmVyYm9zZTo6CisJU2hvdyB1bmlmaWVkIGRpZmYgYmV0d2VlbiB0aGUgSEVBRCBjb21taXQgYW5kIHdoYXQKKwl3b3VsZCBiZSBjb21taXR0ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UKKwl0ZW1wbGF0ZSB0byBoZWxwIHRoZSB1c2VyIGRlc2NyaWJlIHRoZSBjb21taXQgYnkgcmVtaW5kaW5nCisJd2hhdCBjaGFuZ2VzIHRoZSBjb21taXQgaGFzLgorCU5vdGUgdGhhdCB0aGlzIGRpZmYgb3V0cHV0IGRvZXNuJ3QgaGF2ZSBpdHMKKwlsaW5lcyBwcmVmaXhlZCB3aXRoICcjJy4gVGhpcyBkaWZmIHdpbGwgbm90IGJlIGEgcGFydAorCW9mIHRoZSBjb21taXQgbWVzc2FnZS4KKysKK0lmIHNwZWNpZmllZCB0d2ljZSwgc2hvdyBpbiBhZGRpdGlvbiB0aGUgdW5pZmllZCBkaWZmIGJldHdlZW4KK3doYXQgd291bGQgYmUgY29tbWl0dGVkIGFuZCB0aGUgd29ya3RyZWUgZmlsZXMsIGkuZS4gdGhlIHVuc3RhZ2VkCitjaGFuZ2VzIHRvIHRyYWNrZWQgZmlsZXMuCisKKy1xOjoKKy0tcXVpZXQ6OgorCVN1cHByZXNzIGNvbW1pdCBzdW1tYXJ5IG1lc3NhZ2UuCisKKy0tZHJ5LXJ1bjo6CisJRG8gbm90IGNyZWF0ZSBhIGNvbW1pdCwgYnV0IHNob3cgYSBsaXN0IG9mIHBhdGhzIHRoYXQgYXJlCisJdG8gYmUgY29tbWl0dGVkLCBwYXRocyB3aXRoIGxvY2FsIGNoYW5nZXMgdGhhdCB3aWxsIGJlIGxlZnQKKwl1bmNvbW1pdHRlZCBhbmQgcGF0aHMgdGhhdCBhcmUgdW50cmFja2VkLgorCistLXN0YXR1czo6CisJSW5jbHVkZSB0aGUgb3V0cHV0IG9mIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBpbiB0aGUgY29tbWl0CisJbWVzc2FnZSB0ZW1wbGF0ZSB3aGVuIHVzaW5nIGFuIGVkaXRvciB0byBwcmVwYXJlIHRoZSBjb21taXQKKwltZXNzYWdlLiAgRGVmYXVsdHMgdG8gb24sIGJ1dCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZQorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29tbWl0LnN0YXR1cy4KKworLS1uby1zdGF0dXM6OgorCURvIG5vdCBpbmNsdWRlIHRoZSBvdXRwdXQgb2YgbGlua2dpdDpnaXQtc3RhdHVzWzFdIGluIHRoZQorCWNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIHdoZW4gdXNpbmcgYW4gZWRpdG9yIHRvIHByZXBhcmUgdGhlCisJZGVmYXVsdCBjb21taXQgbWVzc2FnZS4KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorCUdQRy1zaWduIGNvbW1pdHMuIFRoZSBga2V5aWRgIGFyZ3VtZW50IGlzIG9wdGlvbmFsIGFuZAorCWRlZmF1bHRzIHRvIHRoZSBjb21taXR0ZXIgaWRlbnRpdHk7IGlmIHNwZWNpZmllZCwgaXQgbXVzdCBiZQorCXN0dWNrIHRvIHRoZSBvcHRpb24gd2l0aG91dCBhIHNwYWNlLgorCistLW5vLWdwZy1zaWduOjoKKwlDb3VudGVybWFuZCBgY29tbWl0LmdwZ1NpZ25gIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdGhhdCBpcworCXNldCB0byBmb3JjZSBlYWNoIGFuZCBldmVyeSBjb21taXQgdG8gYmUgc2lnbmVkLgorCitcLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKKzxmaWxlPi4uLjo6CisJV2hlbiBmaWxlcyBhcmUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlIGNvbW1hbmQKKwljb21taXRzIHRoZSBjb250ZW50cyBvZiB0aGUgbmFtZWQgZmlsZXMsIHdpdGhvdXQKKwlyZWNvcmRpbmcgdGhlIGNoYW5nZXMgYWxyZWFkeSBzdGFnZWQuICBUaGUgY29udGVudHMgb2YKKwl0aGVzZSBmaWxlcyBhcmUgYWxzbyBzdGFnZWQgZm9yIHRoZSBuZXh0IGNvbW1pdCBvbiB0b3AKKwlvZiB3aGF0IGhhdmUgYmVlbiBzdGFnZWQgYmVmb3JlLgorCis6Z2l0LWNvbW1pdDogMQoraW5jbHVkZTo6ZGF0ZS1mb3JtYXRzLnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorV2hlbiByZWNvcmRpbmcgeW91ciBvd24gd29yaywgdGhlIGNvbnRlbnRzIG9mIG1vZGlmaWVkIGZpbGVzIGluCit5b3VyIHdvcmtpbmcgdHJlZSBhcmUgdGVtcG9yYXJpbHkgc3RvcmVkIHRvIGEgc3RhZ2luZyBhcmVhCitjYWxsZWQgdGhlICJpbmRleCIgd2l0aCAnZ2l0IGFkZCcuICBBIGZpbGUgY2FuIGJlCityZXZlcnRlZCBiYWNrLCBvbmx5IGluIHRoZSBpbmRleCBidXQgbm90IGluIHRoZSB3b3JraW5nIHRyZWUsCit0byB0aGF0IG9mIHRoZSBsYXN0IGNvbW1pdCB3aXRoIGBnaXQgcmVzZXQgSEVBRCAtLSA8ZmlsZT5gLAord2hpY2ggZWZmZWN0aXZlbHkgcmV2ZXJ0cyAnZ2l0IGFkZCcgYW5kIHByZXZlbnRzIHRoZSBjaGFuZ2VzIHRvCit0aGlzIGZpbGUgZnJvbSBwYXJ0aWNpcGF0aW5nIGluIHRoZSBuZXh0IGNvbW1pdC4gIEFmdGVyIGJ1aWxkaW5nCit0aGUgc3RhdGUgdG8gYmUgY29tbWl0dGVkIGluY3JlbWVudGFsbHkgd2l0aCB0aGVzZSBjb21tYW5kcywKK2BnaXQgY29tbWl0YCAod2l0aG91dCBhbnkgcGF0aG5hbWUgcGFyYW1ldGVyKSBpcyB1c2VkIHRvIHJlY29yZCB3aGF0CitoYXMgYmVlbiBzdGFnZWQgc28gZmFyLiAgVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBmb3JtIG9mIHRoZQorY29tbWFuZC4gIEFuIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorJCBlZGl0IGhlbGxvLmMKKyQgZ2l0IHJtIGdvb2RieWUuYworJCBnaXQgYWRkIGhlbGxvLmMKKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tCisKK0luc3RlYWQgb2Ygc3RhZ2luZyBmaWxlcyBhZnRlciBlYWNoIGluZGl2aWR1YWwgY2hhbmdlLCB5b3UgY2FuCit0ZWxsIGBnaXQgY29tbWl0YCB0byBub3RpY2UgdGhlIGNoYW5nZXMgdG8gdGhlIGZpbGVzIHdob3NlCitjb250ZW50cyBhcmUgdHJhY2tlZCBpbgoreW91ciB3b3JraW5nIHRyZWUgYW5kIGRvIGNvcnJlc3BvbmRpbmcgYGdpdCBhZGRgIGFuZCBgZ2l0IHJtYAorZm9yIHlvdS4gIFRoYXQgaXMsIHRoaXMgZXhhbXBsZSBkb2VzIHRoZSBzYW1lIGFzIHRoZSBlYXJsaWVyCitleGFtcGxlIGlmIHRoZXJlIGlzIG5vIG90aGVyIGNoYW5nZSBpbiB5b3VyIHdvcmtpbmcgdHJlZToKKworLS0tLS0tLS0tLS0tCiskIGVkaXQgaGVsbG8uYworJCBybSBnb29kYnllLmMKKyQgZ2l0IGNvbW1pdCAtYQorLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kIGBnaXQgY29tbWl0IC1hYCBmaXJzdCBsb29rcyBhdCB5b3VyIHdvcmtpbmcgdHJlZSwKK25vdGljZXMgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCBoZWxsby5jIGFuZCByZW1vdmVkIGdvb2RieWUuYywKK2FuZCBwZXJmb3JtcyBuZWNlc3NhcnkgYGdpdCBhZGRgIGFuZCBgZ2l0IHJtYCBmb3IgeW91LgorCitBZnRlciBzdGFnaW5nIGNoYW5nZXMgdG8gbWFueSBmaWxlcywgeW91IGNhbiBhbHRlciB0aGUgb3JkZXIgdGhlCitjaGFuZ2VzIGFyZSByZWNvcmRlZCBpbiwgYnkgZ2l2aW5nIHBhdGhuYW1lcyB0byBgZ2l0IGNvbW1pdGAuCitXaGVuIHBhdGhuYW1lcyBhcmUgZ2l2ZW4sIHRoZSBjb21tYW5kIG1ha2VzIGEgY29tbWl0IHRoYXQKK29ubHkgcmVjb3JkcyB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBuYW1lZCBwYXRoczoKKworLS0tLS0tLS0tLS0tCiskIGVkaXQgaGVsbG8uYyBoZWxsby5oCiskIGdpdCBhZGQgaGVsbG8uYyBoZWxsby5oCiskIGVkaXQgTWFrZWZpbGUKKyQgZ2l0IGNvbW1pdCBNYWtlZmlsZQorLS0tLS0tLS0tLS0tCisKK1RoaXMgbWFrZXMgYSBjb21taXQgdGhhdCByZWNvcmRzIHRoZSBtb2RpZmljYXRpb24gdG8gYE1ha2VmaWxlYC4KK1RoZSBjaGFuZ2VzIHN0YWdlZCBmb3IgYGhlbGxvLmNgIGFuZCBgaGVsbG8uaGAgYXJlIG5vdCBpbmNsdWRlZAoraW4gdGhlIHJlc3VsdGluZyBjb21taXQuICBIb3dldmVyLCB0aGVpciBjaGFuZ2VzIGFyZSBub3QgbG9zdCAtLQordGhleSBhcmUgc3RpbGwgc3RhZ2VkIGFuZCBtZXJlbHkgaGVsZCBiYWNrLiAgQWZ0ZXIgdGhlIGFib3ZlCitzZXF1ZW5jZSwgaWYgeW91IGRvOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tCisKK3RoaXMgc2Vjb25kIGNvbW1pdCB3b3VsZCByZWNvcmQgdGhlIGNoYW5nZXMgdG8gYGhlbGxvLmNgIGFuZAorYGhlbGxvLmhgIGFzIGV4cGVjdGVkLgorCitBZnRlciBhIG1lcmdlIChpbml0aWF0ZWQgYnkgJ2dpdCBtZXJnZScgb3IgJ2dpdCBwdWxsJykgc3RvcHMKK2JlY2F1c2Ugb2YgY29uZmxpY3RzLCBjbGVhbmx5IG1lcmdlZAorcGF0aHMgYXJlIGFscmVhZHkgc3RhZ2VkIHRvIGJlIGNvbW1pdHRlZCBmb3IgeW91LCBhbmQgcGF0aHMgdGhhdAorY29uZmxpY3RlZCBhcmUgbGVmdCBpbiB1bm1lcmdlZCBzdGF0ZS4gIFlvdSB3b3VsZCBoYXZlIHRvIGZpcnN0CitjaGVjayB3aGljaCBwYXRocyBhcmUgY29uZmxpY3Rpbmcgd2l0aCAnZ2l0IHN0YXR1cycKK2FuZCBhZnRlciBmaXhpbmcgdGhlbSBtYW51YWxseSBpbiB5b3VyIHdvcmtpbmcgdHJlZSwgeW91IHdvdWxkCitzdGFnZSB0aGUgcmVzdWx0IGFzIHVzdWFsIHdpdGggJ2dpdCBhZGQnOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHN0YXR1cyB8IGdyZXAgdW5tZXJnZWQKK3VubWVyZ2VkOiBoZWxsby5jCiskIGVkaXQgaGVsbG8uYworJCBnaXQgYWRkIGhlbGxvLmMKKy0tLS0tLS0tLS0tLQorCitBZnRlciByZXNvbHZpbmcgY29uZmxpY3RzIGFuZCBzdGFnaW5nIHRoZSByZXN1bHQsIGBnaXQgbHMtZmlsZXMgLXVgCit3b3VsZCBzdG9wIG1lbnRpb25pbmcgdGhlIGNvbmZsaWN0ZWQgcGF0aC4gIFdoZW4geW91IGFyZSBkb25lLAorcnVuIGBnaXQgY29tbWl0YCB0byBmaW5hbGx5IHJlY29yZCB0aGUgbWVyZ2U6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0KKworQXMgd2l0aCB0aGUgY2FzZSB0byByZWNvcmQgeW91ciBvd24gY2hhbmdlcywgeW91IGNhbiB1c2UgYC1hYAorb3B0aW9uIHRvIHNhdmUgdHlwaW5nLiAgT25lIGRpZmZlcmVuY2UgaXMgdGhhdCBkdXJpbmcgYSBtZXJnZQorcmVzb2x1dGlvbiwgeW91IGNhbm5vdCB1c2UgYGdpdCBjb21taXRgIHdpdGggcGF0aG5hbWVzIHRvCithbHRlciB0aGUgb3JkZXIgdGhlIGNoYW5nZXMgYXJlIGNvbW1pdHRlZCwgYmVjYXVzZSB0aGUgbWVyZ2UKK3Nob3VsZCBiZSByZWNvcmRlZCBhcyBhIHNpbmdsZSBjb21taXQuICBJbiBmYWN0LCB0aGUgY29tbWFuZAorcmVmdXNlcyB0byBydW4gd2hlbiBnaXZlbiBwYXRobmFtZXMgKGJ1dCBzZWUgYC1pYCBvcHRpb24pLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworVGhvdWdoIG5vdCByZXF1aXJlZCwgaXQncyBhIGdvb2QgaWRlYSB0byBiZWdpbiB0aGUgY29tbWl0IG1lc3NhZ2UKK3dpdGggYSBzaW5nbGUgc2hvcnQgKGxlc3MgdGhhbiA1MCBjaGFyYWN0ZXIpIGxpbmUgc3VtbWFyaXppbmcgdGhlCitjaGFuZ2UsIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSBhbmQgdGhlbiBhIG1vcmUgdGhvcm91Z2ggZGVzY3JpcHRpb24uCitUaGUgdGV4dCB1cCB0byB0aGUgZmlyc3QgYmxhbmsgbGluZSBpbiBhIGNvbW1pdCBtZXNzYWdlIGlzIHRyZWF0ZWQKK2FzIHRoZSBjb21taXQgdGl0bGUsIGFuZCB0aGF0IHRpdGxlIGlzIHVzZWQgdGhyb3VnaG91dCBHaXQuCitGb3IgZXhhbXBsZSwgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHR1cm5zIGEgY29tbWl0IGludG8gZW1haWwsIGFuZCBpdCB1c2VzCit0aGUgdGl0bGUgb24gdGhlIFN1YmplY3QgbGluZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNvbW1pdCBpbiB0aGUgYm9keS4KKworaW5jbHVkZTo6aTE4bi50eHRbXQorCitFTlZJUk9OTUVOVCBBTkQgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGVkaXRvciB1c2VkIHRvIGVkaXQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSB3aWxsIGJlIGNob3NlbiBmcm9tIHRoZQorR0lUX0VESVRPUiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIGNvcmUuZWRpdG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIHRoZQorVklTVUFMIGVudmlyb25tZW50IHZhcmlhYmxlLCBvciB0aGUgRURJVE9SIGVudmlyb25tZW50IHZhcmlhYmxlIChpbiB0aGF0CitvcmRlcikuICBTZWUgbGlua2dpdDpnaXQtdmFyWzFdIGZvciBkZXRhaWxzLgorCitIT09LUworLS0tLS0KK1RoaXMgY29tbWFuZCBjYW4gcnVuIGBjb21taXQtbXNnYCwgYHByZXBhcmUtY29tbWl0LW1zZ2AsIGBwcmUtY29tbWl0YCwKK2FuZCBgcG9zdC1jb21taXRgIGhvb2tzLiAgU2VlIGxpbmtnaXQ6Z2l0aG9va3NbNV0gZm9yIG1vcmUKK2luZm9ybWF0aW9uLgorCitGSUxFUworLS0tLS0KKworYCRHSVRfRElSL0NPTU1JVF9FRElUTVNHYDo6CisJVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb21taXQgbWVzc2FnZSBvZiBhIGNvbW1pdCBpbiBwcm9ncmVzcy4KKwlJZiBgZ2l0IGNvbW1pdGAgZXhpdHMgZHVlIHRvIGFuIGVycm9yIGJlZm9yZSBjcmVhdGluZyBhIGNvbW1pdCwKKwlhbnkgY29tbWl0IG1lc3NhZ2UgdGhhdCBoYXMgYmVlbiBwcm92aWRlZCBieSB0aGUgdXNlciAoZS5nLiwgaW4KKwlhbiBlZGl0b3Igc2Vzc2lvbikgd2lsbCBiZSBhdmFpbGFibGUgaW4gdGhpcyBmaWxlLCBidXQgd2lsbCBiZQorCW92ZXJ3cml0dGVuIGJ5IHRoZSBuZXh0IGludm9jYXRpb24gb2YgYGdpdCBjb21taXRgLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWFkZFsxXSwKK2xpbmtnaXQ6Z2l0LXJtWzFdLAorbGlua2dpdDpnaXQtbXZbMV0sCitsaW5rZ2l0OmdpdC1tZXJnZVsxXSwKK2xpbmtnaXQ6Z2l0LWNvbW1pdC10cmVlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYwOGNhNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvbmZpZy50eHQKQEAgLTAsMCArMSw0MjAgQEAKK2dpdC1jb25maWcoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNvbmZpZyAtIEdldCBhbmQgc2V0IHJlcG9zaXRvcnkgb3IgZ2xvYmFsIG9wdGlvbnMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gW3R5cGVdIFstenwtLW51bGxdIG5hbWUgW3ZhbHVlIFt2YWx1ZV9yZWdleF1dCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFt0eXBlXSAtLWFkZCBuYW1lIHZhbHVlCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFt0eXBlXSAtLXJlcGxhY2UtYWxsIG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbdHlwZV0gWy16fC0tbnVsbF0gLS1nZXQgbmFtZSBbdmFsdWVfcmVnZXhdCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFt0eXBlXSBbLXp8LS1udWxsXSAtLWdldC1hbGwgbmFtZSBbdmFsdWVfcmVnZXhdCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIFt0eXBlXSBbLXp8LS1udWxsXSBbLS1uYW1lLW9ubHldIC0tZ2V0LXJlZ2V4cCBuYW1lX3JlZ2V4IFt2YWx1ZV9yZWdleF0KKydnaXQgY29uZmlnJyBbPGZpbGUtb3B0aW9uPl0gW3R5cGVdIFstenwtLW51bGxdIC0tZ2V0LXVybG1hdGNoIG5hbWUgVVJMCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC0tdW5zZXQgbmFtZSBbdmFsdWVfcmVnZXhdCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC0tdW5zZXQtYWxsIG5hbWUgW3ZhbHVlX3JlZ2V4XQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtLXJlbmFtZS1zZWN0aW9uIG9sZF9uYW1lIG5ld19uYW1lCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC0tcmVtb3ZlLXNlY3Rpb24gbmFtZQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSBbLXp8LS1udWxsXSBbLS1uYW1lLW9ubHldIC1sIHwgLS1saXN0CisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC0tZ2V0LWNvbG9yIG5hbWUgW2RlZmF1bHRdCisnZ2l0IGNvbmZpZycgWzxmaWxlLW9wdGlvbj5dIC0tZ2V0LWNvbG9yYm9vbCBuYW1lIFtzdGRvdXQtaXMtdHR5XQorJ2dpdCBjb25maWcnIFs8ZmlsZS1vcHRpb24+XSAtZSB8IC0tZWRpdAorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1lvdSBjYW4gcXVlcnkvc2V0L3JlcGxhY2UvdW5zZXQgb3B0aW9ucyB3aXRoIHRoaXMgY29tbWFuZC4gVGhlIG5hbWUgaXMKK2FjdHVhbGx5IHRoZSBzZWN0aW9uIGFuZCB0aGUga2V5IHNlcGFyYXRlZCBieSBhIGRvdCwgYW5kIHRoZSB2YWx1ZSB3aWxsIGJlCitlc2NhcGVkLgorCitNdWx0aXBsZSBsaW5lcyBjYW4gYmUgYWRkZWQgdG8gYW4gb3B0aW9uIGJ5IHVzaW5nIHRoZSAnLS1hZGQnIG9wdGlvbi4KK0lmIHlvdSB3YW50IHRvIHVwZGF0ZSBvciB1bnNldCBhbiBvcHRpb24gd2hpY2ggY2FuIG9jY3VyIG9uIG11bHRpcGxlCitsaW5lcywgYSBQT1NJWCByZWdleHAgYHZhbHVlX3JlZ2V4YCBuZWVkcyB0byBiZSBnaXZlbi4gIE9ubHkgdGhlCitleGlzdGluZyB2YWx1ZXMgdGhhdCBtYXRjaCB0aGUgcmVnZXhwIGFyZSB1cGRhdGVkIG9yIHVuc2V0LiAgSWYKK3lvdSB3YW50IHRvIGhhbmRsZSB0aGUgbGluZXMgdGhhdCBkbyAqbm90KiBtYXRjaCB0aGUgcmVnZXgsIGp1c3QKK3ByZXBlbmQgYSBzaW5nbGUgZXhjbGFtYXRpb24gbWFyayBpbiBmcm9udCAoc2VlIGFsc28gPDxFWEFNUExFUz4+KS4KKworVGhlIHR5cGUgc3BlY2lmaWVyIGNhbiBiZSBlaXRoZXIgJy0taW50JyBvciAnLS1ib29sJywgdG8gbWFrZQorJ2dpdCBjb25maWcnIGVuc3VyZSB0aGF0IHRoZSB2YXJpYWJsZShzKSBhcmUgb2YgdGhlIGdpdmVuIHR5cGUgYW5kCitjb252ZXJ0IHRoZSB2YWx1ZSB0byB0aGUgY2Fub25pY2FsIGZvcm0gKHNpbXBsZSBkZWNpbWFsIG51bWJlciBmb3IgaW50LAorYSAidHJ1ZSIgb3IgImZhbHNlIiBzdHJpbmcgZm9yIGJvb2wpLCBvciAnLS1wYXRoJywgd2hpY2ggZG9lcyBzb21lCitwYXRoIGV4cGFuc2lvbiAoc2VlICctLXBhdGgnIGJlbG93KS4gIElmIG5vIHR5cGUgc3BlY2lmaWVyIGlzIHBhc3NlZCwgbm8KK2NoZWNrcyBvciB0cmFuc2Zvcm1hdGlvbnMgYXJlIHBlcmZvcm1lZCBvbiB0aGUgdmFsdWUuCisKK1doZW4gcmVhZGluZywgdGhlIHZhbHVlcyBhcmUgcmVhZCBmcm9tIHRoZSBzeXN0ZW0sIGdsb2JhbCBhbmQKK3JlcG9zaXRvcnkgbG9jYWwgY29uZmlndXJhdGlvbiBmaWxlcyBieSBkZWZhdWx0LCBhbmQgb3B0aW9ucworJy0tc3lzdGVtJywgJy0tZ2xvYmFsJywgJy0tbG9jYWwnIGFuZCAnLS1maWxlIDxmaWxlbmFtZT4nIGNhbiBiZQordXNlZCB0byB0ZWxsIHRoZSBjb21tYW5kIHRvIHJlYWQgZnJvbSBvbmx5IHRoYXQgbG9jYXRpb24gKHNlZSA8PEZJTEVTPj4pLgorCitXaGVuIHdyaXRpbmcsIHRoZSBuZXcgdmFsdWUgaXMgd3JpdHRlbiB0byB0aGUgcmVwb3NpdG9yeSBsb2NhbAorY29uZmlndXJhdGlvbiBmaWxlIGJ5IGRlZmF1bHQsIGFuZCBvcHRpb25zICctLXN5c3RlbScsICctLWdsb2JhbCcsCisnLS1maWxlIDxmaWxlbmFtZT4nIGNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlIGNvbW1hbmQgdG8gd3JpdGUgdG8KK3RoYXQgbG9jYXRpb24gKHlvdSBjYW4gc2F5ICctLWxvY2FsJyBidXQgdGhhdCBpcyB0aGUgZGVmYXVsdCkuCisKK1RoaXMgY29tbWFuZCB3aWxsIGZhaWwgd2l0aCBub24temVybyBzdGF0dXMgdXBvbiBlcnJvci4gIFNvbWUgZXhpdAorY29kZXMgYXJlOgorCisuIFRoZSBjb25maWcgZmlsZSBpcyBpbnZhbGlkIChyZXQ9MyksCisuIGNhbiBub3Qgd3JpdGUgdG8gdGhlIGNvbmZpZyBmaWxlIChyZXQ9NCksCisuIG5vIHNlY3Rpb24gb3IgbmFtZSB3YXMgcHJvdmlkZWQgKHJldD0yKSwKKy4gdGhlIHNlY3Rpb24gb3Iga2V5IGlzIGludmFsaWQgKHJldD0xKSwKKy4geW91IHRyeSB0byB1bnNldCBhbiBvcHRpb24gd2hpY2ggZG9lcyBub3QgZXhpc3QgKHJldD01KSwKKy4geW91IHRyeSB0byB1bnNldC9zZXQgYW4gb3B0aW9uIGZvciB3aGljaCBtdWx0aXBsZSBsaW5lcyBtYXRjaCAocmV0PTUpLCBvcgorLiB5b3UgdHJ5IHRvIHVzZSBhbiBpbnZhbGlkIHJlZ2V4cCAocmV0PTYpLgorCitPbiBzdWNjZXNzLCB0aGUgY29tbWFuZCByZXR1cm5zIHRoZSBleGl0IGNvZGUgMC4KKworT1BUSU9OUworLS0tLS0tLQorCistLXJlcGxhY2UtYWxsOjoKKwlEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHJlcGxhY2UgYXQgbW9zdCBvbmUgbGluZS4gVGhpcyByZXBsYWNlcworCWFsbCBsaW5lcyBtYXRjaGluZyB0aGUga2V5IChhbmQgb3B0aW9uYWxseSB0aGUgdmFsdWVfcmVnZXgpLgorCistLWFkZDo6CisJQWRkcyBhIG5ldyBsaW5lIHRvIHRoZSBvcHRpb24gd2l0aG91dCBhbHRlcmluZyBhbnkgZXhpc3RpbmcKKwl2YWx1ZXMuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHByb3ZpZGluZyAnXiQnIGFzIHRoZSB2YWx1ZV9yZWdleAorCWluIGAtLXJlcGxhY2UtYWxsYC4KKworLS1nZXQ6OgorCUdldCB0aGUgdmFsdWUgZm9yIGEgZ2l2ZW4ga2V5IChvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGEgcmVnZXgKKwltYXRjaGluZyB0aGUgdmFsdWUpLiBSZXR1cm5zIGVycm9yIGNvZGUgMSBpZiB0aGUga2V5IHdhcyBub3QKKwlmb3VuZCBhbmQgdGhlIGxhc3QgdmFsdWUgaWYgbXVsdGlwbGUga2V5IHZhbHVlcyB3ZXJlIGZvdW5kLgorCistLWdldC1hbGw6OgorCUxpa2UgZ2V0LCBidXQgZG9lcyBub3QgZmFpbCBpZiB0aGUgbnVtYmVyIG9mIHZhbHVlcyBmb3IgdGhlIGtleQorCWlzIG5vdCBleGFjdGx5IG9uZS4KKworLS1nZXQtcmVnZXhwOjoKKwlMaWtlIC0tZ2V0LWFsbCwgYnV0IGludGVycHJldHMgdGhlIG5hbWUgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kCisJd3JpdGVzIG91dCB0aGUga2V5IG5hbWVzLiAgUmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGlzIGN1cnJlbnRseQorCWNhc2Utc2Vuc2l0aXZlIGFuZCBkb25lIGFnYWluc3QgYSBjYW5vbmljYWxpemVkIHZlcnNpb24gb2YgdGhlIGtleQorCWluIHdoaWNoIHNlY3Rpb24gYW5kIHZhcmlhYmxlIG5hbWVzIGFyZSBsb3dlcmNhc2VkLCBidXQgc3Vic2VjdGlvbgorCW5hbWVzIGFyZSBub3QuCisKKy0tZ2V0LXVybG1hdGNoIG5hbWUgVVJMOjoKKwlXaGVuIGdpdmVuIGEgdHdvLXBhcnQgbmFtZSBzZWN0aW9uLmtleSwgdGhlIHZhbHVlIGZvcgorCXNlY3Rpb24uPHVybD4ua2V5IHdob3NlIDx1cmw+IHBhcnQgbWF0Y2hlcyB0aGUgYmVzdCB0byB0aGUKKwlnaXZlbiBVUkwgaXMgcmV0dXJuZWQgKGlmIG5vIHN1Y2gga2V5IGV4aXN0cywgdGhlIHZhbHVlIGZvcgorCXNlY3Rpb24ua2V5IGlzIHVzZWQgYXMgYSBmYWxsYmFjaykuICBXaGVuIGdpdmVuIGp1c3QgdGhlCisJc2VjdGlvbiBhcyBuYW1lLCBkbyBzbyBmb3IgYWxsIHRoZSBrZXlzIGluIHRoZSBzZWN0aW9uIGFuZAorCWxpc3QgdGhlbS4KKworLS1nbG9iYWw6OgorCUZvciB3cml0aW5nIG9wdGlvbnM6IHdyaXRlIHRvIGdsb2JhbCBgfi8uZ2l0Y29uZmlnYCBmaWxlCisJcmF0aGVyIHRoYW4gdGhlIHJlcG9zaXRvcnkgYC5naXQvY29uZmlnYCwgd3JpdGUgdG8KKwlgJFhER19DT05GSUdfSE9NRS9naXQvY29uZmlnYCBmaWxlIGlmIHRoaXMgZmlsZSBleGlzdHMgYW5kIHRoZQorCWB+Ly5naXRjb25maWdgIGZpbGUgZG9lc24ndC4KKysKK0ZvciByZWFkaW5nIG9wdGlvbnM6IHJlYWQgb25seSBmcm9tIGdsb2JhbCBgfi8uZ2l0Y29uZmlnYCBhbmQgZnJvbQorYCRYREdfQ09ORklHX0hPTUUvZ2l0L2NvbmZpZ2AgcmF0aGVyIHRoYW4gZnJvbSBhbGwgYXZhaWxhYmxlIGZpbGVzLgorKworU2VlIGFsc28gPDxGSUxFUz4+LgorCistLXN5c3RlbTo6CisJRm9yIHdyaXRpbmcgb3B0aW9uczogd3JpdGUgdG8gc3lzdGVtLXdpZGUKKwlgJChwcmVmaXgpL2V0Yy9naXRjb25maWdgIHJhdGhlciB0aGFuIHRoZSByZXBvc2l0b3J5CisJYC5naXQvY29uZmlnYC4KKysKK0ZvciByZWFkaW5nIG9wdGlvbnM6IHJlYWQgb25seSBmcm9tIHN5c3RlbS13aWRlIGAkKHByZWZpeCkvZXRjL2dpdGNvbmZpZ2AKK3JhdGhlciB0aGFuIGZyb20gYWxsIGF2YWlsYWJsZSBmaWxlcy4KKysKK1NlZSBhbHNvIDw8RklMRVM+Pi4KKworLS1sb2NhbDo6CisJRm9yIHdyaXRpbmcgb3B0aW9uczogd3JpdGUgdG8gdGhlIHJlcG9zaXRvcnkgYC5naXQvY29uZmlnYCBmaWxlLgorCVRoaXMgaXMJdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisrCitGb3IgcmVhZGluZyBvcHRpb25zOiByZWFkIG9ubHkgZnJvbSB0aGUgcmVwb3NpdG9yeSBgLmdpdC9jb25maWdgIHJhdGhlciB0aGFuCitmcm9tIGFsbCBhdmFpbGFibGUgZmlsZXMuCisrCitTZWUgYWxzbyA8PEZJTEVTPj4uCisKKy1mIGNvbmZpZy1maWxlOjoKKy0tZmlsZSBjb25maWctZmlsZTo6CisJVXNlIHRoZSBnaXZlbiBjb25maWcgZmlsZSBpbnN0ZWFkIG9mIHRoZSBvbmUgc3BlY2lmaWVkIGJ5IEdJVF9DT05GSUcuCisKKy0tYmxvYiBibG9iOjoKKwlTaW1pbGFyIHRvICctLWZpbGUnIGJ1dCB1c2UgdGhlIGdpdmVuIGJsb2IgaW5zdGVhZCBvZiBhIGZpbGUuIEUuZy4KKwl5b3UgY2FuIHVzZSAnbWFzdGVyOi5naXRtb2R1bGVzJyB0byByZWFkIHZhbHVlcyBmcm9tIHRoZSBmaWxlCisJJy5naXRtb2R1bGVzJyBpbiB0aGUgbWFzdGVyIGJyYW5jaC4gU2VlICJTUEVDSUZZSU5HIFJFVklTSU9OUyIKKwlzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddIGZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZgorCXdheXMgdG8gc3BlbGwgYmxvYiBuYW1lcy4KKworLS1yZW1vdmUtc2VjdGlvbjo6CisJUmVtb3ZlIHRoZSBnaXZlbiBzZWN0aW9uIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworLS1yZW5hbWUtc2VjdGlvbjo6CisJUmVuYW1lIHRoZSBnaXZlbiBzZWN0aW9uIHRvIGEgbmV3IG5hbWUuCisKKy0tdW5zZXQ6OgorCVJlbW92ZSB0aGUgbGluZSBtYXRjaGluZyB0aGUga2V5IGZyb20gY29uZmlnIGZpbGUuCisKKy0tdW5zZXQtYWxsOjoKKwlSZW1vdmUgYWxsIGxpbmVzIG1hdGNoaW5nIHRoZSBrZXkgZnJvbSBjb25maWcgZmlsZS4KKworLWw6OgorLS1saXN0OjoKKwlMaXN0IGFsbCB2YXJpYWJsZXMgc2V0IGluIGNvbmZpZyBmaWxlLCBhbG9uZyB3aXRoIHRoZWlyIHZhbHVlcy4KKworLS1ib29sOjoKKwknZ2l0IGNvbmZpZycgd2lsbCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IGlzICJ0cnVlIiBvciAiZmFsc2UiCisKKy0taW50OjoKKwknZ2l0IGNvbmZpZycgd2lsbCBlbnN1cmUgdGhhdCB0aGUgb3V0cHV0IGlzIGEgc2ltcGxlCisJZGVjaW1hbCBudW1iZXIuICBBbiBvcHRpb25hbCB2YWx1ZSBzdWZmaXggb2YgJ2snLCAnbScsIG9yICdnJworCWluIHRoZSBjb25maWcgZmlsZSB3aWxsIGNhdXNlIHRoZSB2YWx1ZSB0byBiZSBtdWx0aXBsaWVkCisJYnkgMTAyNCwgMTA0ODU3Niwgb3IgMTA3Mzc0MTgyNCBwcmlvciB0byBvdXRwdXQuCisKKy0tYm9vbC1vci1pbnQ6OgorCSdnaXQgY29uZmlnJyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBvdXRwdXQgbWF0Y2hlcyB0aGUgZm9ybWF0IG9mCisJZWl0aGVyIC0tYm9vbCBvciAtLWludCwgYXMgZGVzY3JpYmVkIGFib3ZlLgorCistLXBhdGg6OgorCSdnaXQtY29uZmlnJyB3aWxsIGV4cGFuZCBsZWFkaW5nICd7dGlsZGV9JyB0byB0aGUgdmFsdWUgb2YKKwknJEhPTUUnLCBhbmQgJ3t0aWxkZX11c2VyJyB0byB0aGUgaG9tZSBkaXJlY3RvcnkgZm9yIHRoZQorCXNwZWNpZmllZCB1c2VyLiAgVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCB3aGVuIHNldHRpbmcgdGhlCisJdmFsdWUgKGJ1dCB5b3UgY2FuIHVzZSAnZ2l0IGNvbmZpZyBibGEge3RpbGRlfS8nIGZyb20gdGhlCisJY29tbWFuZCBsaW5lIHRvIGxldCB5b3VyIHNoZWxsIGRvIHRoZSBleHBhbnNpb24pLgorCistejo6CistLW51bGw6OgorCUZvciBhbGwgb3B0aW9ucyB0aGF0IG91dHB1dCB2YWx1ZXMgYW5kL29yIGtleXMsIGFsd2F5cworCWVuZCB2YWx1ZXMgd2l0aCB0aGUgbnVsbCBjaGFyYWN0ZXIgKGluc3RlYWQgb2YgYQorCW5ld2xpbmUpLiBVc2UgbmV3bGluZSBpbnN0ZWFkIGFzIGEgZGVsaW1pdGVyIGJldHdlZW4KKwlrZXkgYW5kIHZhbHVlLiBUaGlzIGFsbG93cyBmb3Igc2VjdXJlIHBhcnNpbmcgb2YgdGhlCisJb3V0cHV0IHdpdGhvdXQgZ2V0dGluZyBjb25mdXNlZCBlLmcuIGJ5IHZhbHVlcyB0aGF0CisJY29udGFpbiBsaW5lIGJyZWFrcy4KKworLS1uYW1lLW9ubHk6OgorCU91dHB1dCBvbmx5IHRoZSBuYW1lcyBvZiBjb25maWcgdmFyaWFibGVzIGZvciBgLS1saXN0YCBvcgorCWAtLWdldC1yZWdleHBgLgorCistLWdldC1jb2xvcmJvb2wgbmFtZSBbc3Rkb3V0LWlzLXR0eV06OgorCisJRmluZCB0aGUgY29sb3Igc2V0dGluZyBmb3IgYG5hbWVgIChlLmcuIGBjb2xvci5kaWZmYCkgYW5kIG91dHB1dAorCSJ0cnVlIiBvciAiZmFsc2UiLiAgYHN0ZG91dC1pcy10dHlgIHNob3VsZCBiZSBlaXRoZXIgInRydWUiIG9yCisJImZhbHNlIiwgYW5kIGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIGNvbmZpZ3VyYXRpb24gc2F5cworCSJhdXRvIi4gIElmIGBzdGRvdXQtaXMtdHR5YCBpcyBtaXNzaW5nLCB0aGVuIGNoZWNrcyB0aGUgc3RhbmRhcmQKKwlvdXRwdXQgb2YgdGhlIGNvbW1hbmQgaXRzZWxmLCBhbmQgZXhpdHMgd2l0aCBzdGF0dXMgMCBpZiBjb2xvcgorCWlzIHRvIGJlIHVzZWQsIG9yIGV4aXRzIHdpdGggc3RhdHVzIDEgb3RoZXJ3aXNlLgorCVdoZW4gdGhlIGNvbG9yIHNldHRpbmcgZm9yIGBuYW1lYCBpcyB1bmRlZmluZWQsIHRoZSBjb21tYW5kIHVzZXMKKwlgY29sb3IudWlgIGFzIGZhbGxiYWNrLgorCistLWdldC1jb2xvciBuYW1lIFtkZWZhdWx0XTo6CisKKwlGaW5kIHRoZSBjb2xvciBjb25maWd1cmVkIGZvciBgbmFtZWAgKGUuZy4gYGNvbG9yLmRpZmYubmV3YCkgYW5kCisJb3V0cHV0IGl0IGFzIHRoZSBBTlNJIGNvbG9yIGVzY2FwZSBzZXF1ZW5jZSB0byB0aGUgc3RhbmRhcmQKKwlvdXRwdXQuICBUaGUgb3B0aW9uYWwgYGRlZmF1bHRgIHBhcmFtZXRlciBpcyB1c2VkIGluc3RlYWQsIGlmCisJdGhlcmUgaXMgbm8gY29sb3IgY29uZmlndXJlZCBmb3IgYG5hbWVgLgorCistZTo6CistLWVkaXQ6OgorCU9wZW5zIGFuIGVkaXRvciB0byBtb2RpZnkgdGhlIHNwZWNpZmllZCBjb25maWcgZmlsZTsgZWl0aGVyCisJJy0tc3lzdGVtJywgJy0tZ2xvYmFsJywgb3IgcmVwb3NpdG9yeSAoZGVmYXVsdCkuCisKKy0tW25vLV1pbmNsdWRlczo6CisJUmVzcGVjdCBgaW5jbHVkZS4qYCBkaXJlY3RpdmVzIGluIGNvbmZpZyBmaWxlcyB3aGVuIGxvb2tpbmcgdXAKKwl2YWx1ZXMuIERlZmF1bHRzIHRvIG9uLgorCitbW0ZJTEVTXV0KK0ZJTEVTCistLS0tLQorCitJZiBub3Qgc2V0IGV4cGxpY2l0bHkgd2l0aCAnLS1maWxlJywgdGhlcmUgYXJlIGZvdXIgZmlsZXMgd2hlcmUKKydnaXQgY29uZmlnJyB3aWxsIHNlYXJjaCBmb3IgY29uZmlndXJhdGlvbiBvcHRpb25zOgorCiskKHByZWZpeCkvZXRjL2dpdGNvbmZpZzo6CisJU3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLgorCiskWERHX0NPTkZJR19IT01FL2dpdC9jb25maWc6OgorCVNlY29uZCB1c2VyLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4gSWYgJFhER19DT05GSUdfSE9NRSBpcyBub3Qgc2V0CisJb3IgZW1wdHksIGAkSE9NRS8uY29uZmlnL2dpdC9jb25maWdgIHdpbGwgYmUgdXNlZC4gQW55IHNpbmdsZS12YWx1ZWQKKwl2YXJpYWJsZSBzZXQgaW4gdGhpcyBmaWxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgd2hhdGV2ZXIgaXMgaW4KKwlgfi8uZ2l0Y29uZmlnYC4gIEl0IGlzIGEgZ29vZCBpZGVhIG5vdCB0byBjcmVhdGUgdGhpcyBmaWxlIGlmCisJeW91IHNvbWV0aW1lcyB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0LCBhcyBzdXBwb3J0IGZvciB0aGlzCisJZmlsZSB3YXMgYWRkZWQgZmFpcmx5IHJlY2VudGx5LgorCit+Ly5naXRjb25maWc6OgorCVVzZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlLiBBbHNvIGNhbGxlZCAiZ2xvYmFsIgorCWNvbmZpZ3VyYXRpb24gZmlsZS4KKworJEdJVF9ESVIvY29uZmlnOjoKKwlSZXBvc2l0b3J5IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworSWYgbm8gZnVydGhlciBvcHRpb25zIGFyZSBnaXZlbiwgYWxsIHJlYWRpbmcgb3B0aW9ucyB3aWxsIHJlYWQgYWxsIG9mIHRoZXNlCitmaWxlcyB0aGF0IGFyZSBhdmFpbGFibGUuIElmIHRoZSBnbG9iYWwgb3IgdGhlIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24KK2ZpbGUgYXJlIG5vdCBhdmFpbGFibGUgdGhleSB3aWxsIGJlIGlnbm9yZWQuIElmIHRoZSByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24KK2ZpbGUgaXMgbm90IGF2YWlsYWJsZSBvciByZWFkYWJsZSwgJ2dpdCBjb25maWcnIHdpbGwgZXhpdCB3aXRoIGEgbm9uLXplcm8KK2Vycm9yIGNvZGUuIEhvd2V2ZXIsIGluIG5laXRoZXIgY2FzZSB3aWxsIGFuIGVycm9yIG1lc3NhZ2UgYmUgaXNzdWVkLgorCitUaGUgZmlsZXMgYXJlIHJlYWQgaW4gdGhlIG9yZGVyIGdpdmVuIGFib3ZlLCB3aXRoIGxhc3QgdmFsdWUgZm91bmQgdGFraW5nCitwcmVjZWRlbmNlIG92ZXIgdmFsdWVzIHJlYWQgZWFybGllci4gIFdoZW4gbXVsdGlwbGUgdmFsdWVzIGFyZSB0YWtlbiB0aGVuIGFsbAordmFsdWVzIG9mIGEga2V5IGZyb20gYWxsIGZpbGVzIHdpbGwgYmUgdXNlZC4KKworQWxsIHdyaXRpbmcgb3B0aW9ucyB3aWxsIHBlciBkZWZhdWx0IHdyaXRlIHRvIHRoZSByZXBvc2l0b3J5IHNwZWNpZmljCitjb25maWd1cmF0aW9uIGZpbGUuIE5vdGUgdGhhdCB0aGlzIGFsc28gYWZmZWN0cyBvcHRpb25zIGxpa2UgJy0tcmVwbGFjZS1hbGwnCithbmQgJy0tdW5zZXQnLiAqJ2dpdCBjb25maWcnIHdpbGwgb25seSBldmVyIGNoYW5nZSBvbmUgZmlsZSBhdCBhIHRpbWUqLgorCitZb3UgY2FuIG92ZXJyaWRlIHRoZXNlIHJ1bGVzIGVpdGhlciBieSBjb21tYW5kLWxpbmUgb3B0aW9ucyBvciBieSBlbnZpcm9ubWVudAordmFyaWFibGVzLiBUaGUgJy0tZ2xvYmFsJyBhbmQgdGhlICctLXN5c3RlbScgb3B0aW9ucyB3aWxsIGxpbWl0IHRoZSBmaWxlIHVzZWQKK3RvIHRoZSBnbG9iYWwgb3Igc3lzdGVtLXdpZGUgZmlsZSByZXNwZWN0aXZlbHkuIFRoZSBHSVRfQ09ORklHIGVudmlyb25tZW50Cit2YXJpYWJsZSBoYXMgYSBzaW1pbGFyIGVmZmVjdCwgYnV0IHlvdSBjYW4gc3BlY2lmeSBhbnkgZmlsZW5hbWUgeW91IHdhbnQuCisKKworRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tCisKK0dJVF9DT05GSUc6OgorCVRha2UgdGhlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZ2l2ZW4gZmlsZSBpbnN0ZWFkIG9mIC5naXQvY29uZmlnLgorCVVzaW5nIHRoZSAiLS1nbG9iYWwiIG9wdGlvbiBmb3JjZXMgdGhpcyB0byB+Ly5naXRjb25maWcuIFVzaW5nIHRoZQorCSItLXN5c3RlbSIgb3B0aW9uIGZvcmNlcyB0aGlzIHRvICQocHJlZml4KS9ldGMvZ2l0Y29uZmlnLgorCitHSVRfQ09ORklHX05PU1lTVEVNOjoKKwlXaGV0aGVyIHRvIHNraXAgcmVhZGluZyBzZXR0aW5ncyBmcm9tIHRoZSBzeXN0ZW0td2lkZQorCSQocHJlZml4KS9ldGMvZ2l0Y29uZmlnIGZpbGUuIFNlZSBsaW5rZ2l0OmdpdFsxXSBmb3IgZGV0YWlscy4KKworU2VlIGFsc28gPDxGSUxFUz4+LgorCisKK1tbRVhBTVBMRVNdXQorRVhBTVBMRVMKKy0tLS0tLS0tCisKK0dpdmVuIGEgLmdpdC9jb25maWcgbGlrZSB0aGlzOgorCisJIworCSMgVGhpcyBpcyB0aGUgY29uZmlnIGZpbGUsIGFuZAorCSMgYSAnIycgb3IgJzsnIGNoYXJhY3RlciBpbmRpY2F0ZXMKKwkjIGEgY29tbWVudAorCSMKKworCTsgY29yZSB2YXJpYWJsZXMKKwlbY29yZV0KKwkJOyBEb24ndCB0cnVzdCBmaWxlIG1vZGVzCisJCWZpbGVtb2RlID0gZmFsc2UKKworCTsgT3VyIGRpZmYgYWxnb3JpdGhtCisJW2RpZmZdCisJCWV4dGVybmFsID0gL3Vzci9sb2NhbC9iaW4vZGlmZi13cmFwcGVyCisJCXJlbmFtZXMgPSB0cnVlCisKKwk7IFByb3h5IHNldHRpbmdzCisJW2NvcmVdCisJCWdpdHByb3h5PXByb3h5LWNvbW1hbmQgZm9yIGtlcm5lbC5vcmcKKwkJZ2l0cHJveHk9ZGVmYXVsdC1wcm94eSA7IGZvciBhbGwgdGhlIHJlc3QKKworCTsgSFRUUAorCVtodHRwXQorCQlzc2xWZXJpZnkKKwlbaHR0cCAiaHR0cHM6Ly93ZWFrLmV4YW1wbGUuY29tIl0KKwkJc3NsVmVyaWZ5ID0gZmFsc2UKKwkJY29va2llRmlsZSA9IC90bXAvY29va2llLnR4dAorCit5b3UgY2FuIHNldCB0aGUgZmlsZW1vZGUgdG8gdHJ1ZSB3aXRoCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgdHJ1ZQorLS0tLS0tLS0tLS0tCisKK1RoZSBoeXBvdGhldGljYWwgcHJveHkgY29tbWFuZCBlbnRyaWVzIGFjdHVhbGx5IGhhdmUgYSBwb3N0Zml4IHRvIGRpc2Nlcm4KK3doYXQgVVJMIHRoZXkgYXBwbHkgdG8uIEhlcmUgaXMgaG93IHRvIGNoYW5nZSB0aGUgZW50cnkgZm9yIGtlcm5lbC5vcmcKK3RvICJzc2giLgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyBjb3JlLmdpdHByb3h5ICcic3NoIiBmb3Iga2VybmVsLm9yZycgJ2ZvciBrZXJuZWwub3JnJCcKKy0tLS0tLS0tLS0tLQorCitUaGlzIG1ha2VzIHN1cmUgdGhhdCBvbmx5IHRoZSBrZXkvdmFsdWUgcGFpciBmb3Iga2VybmVsLm9yZyBpcyByZXBsYWNlZC4KKworVG8gZGVsZXRlIHRoZSBlbnRyeSBmb3IgcmVuYW1lcywgZG8KKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS11bnNldCBkaWZmLnJlbmFtZXMKKy0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBkZWxldGUgYW4gZW50cnkgZm9yIGEgbXVsdGl2YXIgKGxpa2UgY29yZS5naXRwcm94eSBhYm92ZSksCit5b3UgaGF2ZSB0byBwcm92aWRlIGEgcmVnZXggbWF0Y2hpbmcgdGhlIHZhbHVlIG9mIGV4YWN0bHkgb25lIGxpbmUuCisKK1RvIHF1ZXJ5IHRoZSB2YWx1ZSBmb3IgYSBnaXZlbiBrZXksIGRvCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIC0tZ2V0IGNvcmUuZmlsZW1vZGUKKy0tLS0tLS0tLS0tLQorCitvcgorCistLS0tLS0tLS0tLS0KKyUgZ2l0IGNvbmZpZyBjb3JlLmZpbGVtb2RlCistLS0tLS0tLS0tLS0KKworb3IsIHRvIHF1ZXJ5IGEgbXVsdGl2YXI6CisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIC0tZ2V0IGNvcmUuZ2l0cHJveHkgImZvciBrZXJuZWwub3JnJCIKKy0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBrbm93IGFsbCB0aGUgdmFsdWVzIGZvciBhIG11bHRpdmFyLCBkbzoKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS1nZXQtYWxsIGNvcmUuZ2l0cHJveHkKKy0tLS0tLS0tLS0tLQorCitJZiB5b3UgbGlrZSB0byBsaXZlIGRhbmdlcm91c2x5LCB5b3UgY2FuIHJlcGxhY2UgKmFsbCogY29yZS5naXRwcm94eSBieSBhCituZXcgb25lIHdpdGgKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBjb3JlLmdpdHByb3h5IHNzaAorLS0tLS0tLS0tLS0tCisKK0hvd2V2ZXIsIGlmIHlvdSByZWFsbHkgb25seSB3YW50IHRvIHJlcGxhY2UgdGhlIGxpbmUgZm9yIHRoZSBkZWZhdWx0IHByb3h5LAoraS5lLiB0aGUgb25lIHdpdGhvdXQgYSAiZm9yIC4uLiIgcG9zdGZpeCwgZG8gc29tZXRoaW5nIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCislIGdpdCBjb25maWcgY29yZS5naXRwcm94eSBzc2ggJyEgZm9yICcKKy0tLS0tLS0tLS0tLQorCitUbyBhY3R1YWxseSBtYXRjaCBvbmx5IHZhbHVlcyB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmssIHlvdSBoYXZlIHRvCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIHNlY3Rpb24ua2V5IHZhbHVlICdbIV0nCistLS0tLS0tLS0tLS0KKworVG8gYWRkIGEgbmV3IHByb3h5LCB3aXRob3V0IGFsdGVyaW5nIGFueSBvZiB0aGUgZXhpc3Rpbmcgb25lcywgdXNlCisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIC0tYWRkIGNvcmUuZ2l0cHJveHkgJyJwcm94eS1jb21tYW5kIiBmb3IgZXhhbXBsZS5jb20nCistLS0tLS0tLS0tLS0KKworQW4gZXhhbXBsZSB0byB1c2UgY3VzdG9taXplZCBjb2xvciBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGluIHlvdXIKK3NjcmlwdDoKKworLS0tLS0tLS0tLS0tCisjIS9iaW4vc2gKK1dTPSQoZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBjb2xvci5kaWZmLndoaXRlc3BhY2UgImJsdWUgcmV2ZXJzZSIpCitSRVNFVD0kKGdpdCBjb25maWcgLS1nZXQtY29sb3IgIiIgInJlc2V0IikKK2VjaG8gIiR7V1N9eW91ciB3aGl0ZXNwYWNlIGNvbG9yIG9yIGJsdWUgcmV2ZXJzZSR7UkVTRVR9IgorLS0tLS0tLS0tLS0tCisKK0ZvciBVUkxzIGluIGBodHRwczovL3dlYWsuZXhhbXBsZS5jb21gLCBgaHR0cC5zc2xWZXJpZnlgIGlzIHNldCB0bworZmFsc2UsIHdoaWxlIGl0IGlzIHNldCB0byBgdHJ1ZWAgZm9yIGFsbCBvdGhlcnM6CisKKy0tLS0tLS0tLS0tLQorJSBnaXQgY29uZmlnIC0tYm9vbCAtLWdldC11cmxtYXRjaCBodHRwLnNzbHZlcmlmeSBodHRwczovL2dvb2QuZXhhbXBsZS5jb20KK3RydWUKKyUgZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQtdXJsbWF0Y2ggaHR0cC5zc2x2ZXJpZnkgaHR0cHM6Ly93ZWFrLmV4YW1wbGUuY29tCitmYWxzZQorJSBnaXQgY29uZmlnIC0tZ2V0LXVybG1hdGNoIGh0dHAgaHR0cHM6Ly93ZWFrLmV4YW1wbGUuY29tCitodHRwLmNvb2tpZUZpbGUgL3RtcC9jb29raWUudHh0CitodHRwLnNzbHZlcmlmeSBmYWxzZQorLS0tLS0tLS0tLS0tCisKK2luY2x1ZGU6OmNvbmZpZy50eHRbXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNvdW50LW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY291bnQtb2JqZWN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZmMzU2OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNvdW50LW9iamVjdHMudHh0CkBAIC0wLDAgKzEsNDkgQEAKK2dpdC1jb3VudC1vYmplY3RzKDEpCis9PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY291bnQtb2JqZWN0cyAtIENvdW50IHVucGFja2VkIG51bWJlciBvZiBvYmplY3RzIGFuZCB0aGVpciBkaXNrIGNvbnN1bXB0aW9uCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjb3VudC1vYmplY3RzJyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBjb3VudHMgdGhlIG51bWJlciBvZiB1bnBhY2tlZCBvYmplY3QgZmlsZXMgYW5kIGRpc2sgc3BhY2UgY29uc3VtZWQgYnkKK3RoZW0sIHRvIGhlbHAgeW91IGRlY2lkZSB3aGVuIGl0IGlzIGEgZ29vZCB0aW1lIHRvIHJlcGFjay4KKworCitPUFRJT05TCistLS0tLS0tCistdjo6CistLXZlcmJvc2U6OgorCVJlcG9ydCBpbiBtb3JlIGRldGFpbDoKKysKK2NvdW50OiB0aGUgbnVtYmVyIG9mIGxvb3NlIG9iamVjdHMKKysKK3NpemU6IGRpc2sgc3BhY2UgY29uc3VtZWQgYnkgbG9vc2Ugb2JqZWN0cywgaW4gS2lCICh1bmxlc3MgLUggaXMgc3BlY2lmaWVkKQorKworaW4tcGFjazogdGhlIG51bWJlciBvZiBpbi1wYWNrIG9iamVjdHMKKysKK3NpemUtcGFjazogZGlzayBzcGFjZSBjb25zdW1lZCBieSB0aGUgcGFja3MsIGluIEtpQiAodW5sZXNzIC1IIGlzIHNwZWNpZmllZCkKKysKK3BydW5lLXBhY2thYmxlOiB0aGUgbnVtYmVyIG9mIGxvb3NlIG9iamVjdHMgdGhhdCBhcmUgYWxzbyBwcmVzZW50IGluCit0aGUgcGFja3MuIFRoZXNlIG9iamVjdHMgY291bGQgYmUgcHJ1bmVkIHVzaW5nIGBnaXQgcHJ1bmUtcGFja2VkYC4KKysKK2dhcmJhZ2U6IHRoZSBudW1iZXIgb2YgZmlsZXMgaW4gb2JqZWN0IGRhdGFiYXNlIHRoYXQgYXJlIG5laXRoZXIgdmFsaWQgbG9vc2UKK29iamVjdHMgbm9yIHZhbGlkIHBhY2tzCisrCitzaXplLWdhcmJhZ2U6IGRpc2sgc3BhY2UgY29uc3VtZWQgYnkgZ2FyYmFnZSBmaWxlcywgaW4gS2lCICh1bmxlc3MgLUggaXMKK3NwZWNpZmllZCkKKworLUg6OgorLS1odW1hbi1yZWFkYWJsZTo6CisKK1ByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdAorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTFjNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24udHh0CkBAIC0wLDAgKzEsMzAgQEAKK2dpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24oMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbiAtIFRlbXBvcmFyaWx5IHN0b3JlIHVzZXIgY3JlZGVudGlhbHMgaW4gbWVtb3J5CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZ2l0IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbiBbLS1kZWJ1Z10gPHNvY2tldD4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK05PVEU6IFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGludm9rZSB0aGlzIGNvbW1hbmQgeW91cnNlbGY7IGl0IGlzCitzdGFydGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UgdXNlIGxpbmtnaXQ6Z2l0LWNyZWRlbnRpYWwtY2FjaGVbMV0uCisKK1RoaXMgY29tbWFuZCBsaXN0ZW5zIG9uIHRoZSBVbml4IGRvbWFpbiBzb2NrZXQgc3BlY2lmaWVkIGJ5IGA8c29ja2V0PmAKK2ZvciBgZ2l0LWNyZWRlbnRpYWwtY2FjaGVgIGNsaWVudHMuIENsaWVudHMgbWF5IHN0b3JlIGFuZCByZXRyaWV2ZQorY3JlZGVudGlhbHMuIEVhY2ggY3JlZGVudGlhbCBpcyBoZWxkIGZvciBhIHRpbWVvdXQgc3BlY2lmaWVkIGJ5IHRoZQorY2xpZW50OyBvbmNlIG5vIGNyZWRlbnRpYWxzIGFyZSBoZWxkLCB0aGUgZGFlbW9uIGV4aXRzLgorCitJZiB0aGUgYC0tZGVidWdgIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBkYWVtb24gZG9lcyBub3QgY2xvc2UgaXRzCitzdGRlcnIgc3RyZWFtLCBhbmQgbWF5IG91dHB1dCBleHRyYSBkaWFnbm9zdGljcyB0byBpdCBldmVuIGFmdGVyIGl0IGhhcworYmVndW4gbGlzdGVuaW5nIGZvciBjbGllbnRzLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtY2FjaGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC1jYWNoZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODliNzMwNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtY2FjaGUudHh0CkBAIC0wLDAgKzEsNzcgQEAKK2dpdC1jcmVkZW50aWFsLWNhY2hlKDEpCis9PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY3JlZGVudGlhbC1jYWNoZSAtIEhlbHBlciB0byB0ZW1wb3JhcmlseSBzdG9yZSBwYXNzd29yZHMgaW4gbWVtb3J5CisKK1NZTk9QU0lTCistLS0tLS0tLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgJ2NhY2hlIFtvcHRpb25zXScKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGNvbW1hbmQgY2FjaGVzIGNyZWRlbnRpYWxzIGluIG1lbW9yeSBmb3IgdXNlIGJ5IGZ1dHVyZSBHaXQKK3Byb2dyYW1zLiBUaGUgc3RvcmVkIGNyZWRlbnRpYWxzIG5ldmVyIHRvdWNoIHRoZSBkaXNrLCBhbmQgYXJlIGZvcmdvdHRlbgorYWZ0ZXIgYSBjb25maWd1cmFibGUgdGltZW91dC4gIFRoZSBjYWNoZSBpcyBhY2Nlc3NpYmxlIG92ZXIgYSBVbml4Citkb21haW4gc29ja2V0LCByZXN0cmljdGVkIHRvIHRoZSBjdXJyZW50IHVzZXIgYnkgZmlsZXN5c3RlbSBwZXJtaXNzaW9ucy4KKworWW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gaW52b2tlIHRoaXMgY29tbWFuZCBkaXJlY3RseTsgaXQgaXMgbWVhbnQgdG8KK2JlIHVzZWQgYXMgYSBjcmVkZW50aWFsIGhlbHBlciBieSBvdGhlciBwYXJ0cyBvZiBHaXQuIFNlZQorbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XSBvciBgRVhBTVBMRVNgIGJlbG93LgorCitPUFRJT05TCistLS0tLS0tCisKKy0tdGltZW91dCA8c2Vjb25kcz46OgorCisJTnVtYmVyIG9mIHNlY29uZHMgdG8gY2FjaGUgY3JlZGVudGlhbHMgKGRlZmF1bHQ6IDkwMCkuCisKKy0tc29ja2V0IDxwYXRoPjo6CisKKwlVc2UgYDxwYXRoPmAgdG8gY29udGFjdCBhIHJ1bm5pbmcgY2FjaGUgZGFlbW9uIChvciBzdGFydCBhIG5ldworCWNhY2hlIGRhZW1vbiBpZiBvbmUgaXMgbm90IHN0YXJ0ZWQpLiBEZWZhdWx0cyB0bworCWB+Ly5naXQtY3JlZGVudGlhbC1jYWNoZS9zb2NrZXRgLiBJZiB5b3VyIGhvbWUgZGlyZWN0b3J5IGlzIG9uIGEKKwluZXR3b3JrLW1vdW50ZWQgZmlsZXN5c3RlbSwgeW91IG1heSBuZWVkIHRvIGNoYW5nZSB0aGlzIHRvIGEKKwlsb2NhbCBmaWxlc3lzdGVtLgorCitDT05UUk9MTElORyBUSEUgREFFTU9OCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSB3b3VsZCBsaWtlIHRoZSBkYWVtb24gdG8gZXhpdCBlYXJseSwgZm9yZ2V0dGluZyBhbGwgY2FjaGVkCitjcmVkZW50aWFscyBiZWZvcmUgdGhlaXIgdGltZW91dCwgeW91IGNhbiBpc3N1ZSBhbiBgZXhpdGAgYWN0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGNyZWRlbnRpYWwtY2FjaGUgZXhpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1RoZSBwb2ludCBvZiB0aGlzIGhlbHBlciBpcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiB0aW1lcyB5b3UgbXVzdCB0eXBlCit5b3VyIHVzZXJuYW1lIG9yIHBhc3N3b3JkLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgY2FjaGUKKyQgZ2l0IHB1c2ggaHR0cDovL2V4YW1wbGUuY29tL3JlcG8uZ2l0CitVc2VybmFtZTogPHR5cGUgeW91ciB1c2VybmFtZT4KK1Bhc3N3b3JkOiA8dHlwZSB5b3VyIHBhc3N3b3JkPgorCitbd29yayBmb3IgNSBtb3JlIG1pbnV0ZXNdCiskIGdpdCBwdXNoIGh0dHA6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdAorW3lvdXIgY3JlZGVudGlhbHMgYXJlIHVzZWQgYXV0b21hdGljYWxseV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHByb3ZpZGUgb3B0aW9ucyB2aWEgdGhlIGNyZWRlbnRpYWwuaGVscGVyIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlICh0aGlzIGV4YW1wbGUgZHJvcHMgdGhlIGNhY2hlIHRpbWUgdG8gNSBtaW51dGVzKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICdjYWNoZSAtLXRpbWVvdXQ9MzAwJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtc3RvcmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtY3JlZGVudGlhbC1zdG9yZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNjOGYyNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwtc3RvcmUudHh0CkBAIC0wLDAgKzEsMTA2IEBACitnaXQtY3JlZGVudGlhbC1zdG9yZSgxKQorPT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNyZWRlbnRpYWwtc3RvcmUgLSBIZWxwZXIgdG8gc3RvcmUgY3JlZGVudGlhbHMgb24gZGlzaworCitTWU5PUFNJUworLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBjb25maWcgY3JlZGVudGlhbC5oZWxwZXIgJ3N0b3JlIFtvcHRpb25zXScKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK05PVEU6IFVzaW5nIHRoaXMgaGVscGVyIHdpbGwgc3RvcmUgeW91ciBwYXNzd29yZHMgdW5lbmNyeXB0ZWQgb24gZGlzaywKK3Byb3RlY3RlZCBvbmx5IGJ5IGZpbGVzeXN0ZW0gcGVybWlzc2lvbnMuIElmIHRoaXMgaXMgbm90IGFuIGFjY2VwdGFibGUKK3NlY3VyaXR5IHRyYWRlb2ZmLCB0cnkgbGlua2dpdDpnaXQtY3JlZGVudGlhbC1jYWNoZVsxXSwgb3IgZmluZCBhIGhlbHBlcgordGhhdCBpbnRlZ3JhdGVzIHdpdGggc2VjdXJlIHN0b3JhZ2UgcHJvdmlkZWQgYnkgeW91ciBvcGVyYXRpbmcgc3lzdGVtLgorCitUaGlzIGNvbW1hbmQgc3RvcmVzIGNyZWRlbnRpYWxzIGluZGVmaW5pdGVseSBvbiBkaXNrIGZvciB1c2UgYnkgZnV0dXJlCitHaXQgcHJvZ3JhbXMuCisKK1lvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGludm9rZSB0aGlzIGNvbW1hbmQgZGlyZWN0bHk7IGl0IGlzIG1lYW50IHRvCitiZSB1c2VkIGFzIGEgY3JlZGVudGlhbCBoZWxwZXIgYnkgb3RoZXIgcGFydHMgb2YgZ2l0LiBTZWUKK2xpbmtnaXQ6Z2l0Y3JlZGVudGlhbHNbN10gb3IgYEVYQU1QTEVTYCBiZWxvdy4KKworT1BUSU9OUworLS0tLS0tLQorCistLWZpbGU9PHBhdGg+OjoKKworCVVzZSBgPHBhdGg+YCB0byBsb29rdXAgYW5kIHN0b3JlIGNyZWRlbnRpYWxzLiBUaGUgZmlsZSB3aWxsIGhhdmUgaXRzCisJZmlsZXN5c3RlbSBwZXJtaXNzaW9ucyBzZXQgdG8gcHJldmVudCBvdGhlciB1c2VycyBvbiB0aGUgc3lzdGVtCisJZnJvbSByZWFkaW5nIGl0LCBidXQgd2lsbCBub3QgYmUgZW5jcnlwdGVkIG9yIG90aGVyd2lzZQorCXByb3RlY3RlZC4gSWYgbm90IHNwZWNpZmllZCwgY3JlZGVudGlhbHMgd2lsbCBiZSBzZWFyY2hlZCBmb3IgZnJvbQorCWB+Ly5naXQtY3JlZGVudGlhbHNgIGFuZCBgJFhER19DT05GSUdfSE9NRS9naXQvY3JlZGVudGlhbHNgLCBhbmQKKwljcmVkZW50aWFscyB3aWxsIGJlIHdyaXR0ZW4gdG8gYH4vLmdpdC1jcmVkZW50aWFsc2AgaWYgaXQgZXhpc3RzLCBvcgorCWAkWERHX0NPTkZJR19IT01FL2dpdC9jcmVkZW50aWFsc2AgaWYgaXQgZXhpc3RzIGFuZCB0aGUgZm9ybWVyIGRvZXMKKwlub3QuIFNlZSBhbHNvIDw8RklMRVM+Pi4KKworW1tGSUxFU11dCitGSUxFUworLS0tLS0KKworSWYgbm90IHNldCBleHBsaWNpdGx5IHdpdGggJy0tZmlsZScsIHRoZXJlIGFyZSB0d28gZmlsZXMgd2hlcmUKK2dpdC1jcmVkZW50aWFsLXN0b3JlIHdpbGwgc2VhcmNoIGZvciBjcmVkZW50aWFscyBpbiBvcmRlciBvZiBwcmVjZWRlbmNlOgorCit+Ly5naXQtY3JlZGVudGlhbHM6OgorCVVzZXItc3BlY2lmaWMgY3JlZGVudGlhbHMgZmlsZS4KKworJFhER19DT05GSUdfSE9NRS9naXQvY3JlZGVudGlhbHM6OgorCVNlY29uZCB1c2VyLXNwZWNpZmljIGNyZWRlbnRpYWxzIGZpbGUuIElmICckWERHX0NPTkZJR19IT01FJyBpcyBub3Qgc2V0CisJb3IgZW1wdHksIGAkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFsc2Agd2lsbCBiZSB1c2VkLiBBbnkgY3JlZGVudGlhbHMKKwlzdG9yZWQgaW4gdGhpcyBmaWxlIHdpbGwgbm90IGJlIHVzZWQgaWYgYH4vLmdpdC1jcmVkZW50aWFsc2AgaGFzIGEKKwltYXRjaGluZyBjcmVkZW50aWFsIGFzIHdlbGwuIEl0IGlzIGEgZ29vZCBpZGVhIG5vdCB0byBjcmVhdGUgdGhpcyBmaWxlCisJaWYgeW91IHNvbWV0aW1lcyB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0IHRoYXQgZG8gbm90IHN1cHBvcnQgaXQuCisKK0ZvciBjcmVkZW50aWFsIGxvb2t1cHMsIHRoZSBmaWxlcyBhcmUgcmVhZCBpbiB0aGUgb3JkZXIgZ2l2ZW4gYWJvdmUsIHdpdGggdGhlCitmaXJzdCBtYXRjaGluZyBjcmVkZW50aWFsIGZvdW5kIHRha2luZyBwcmVjZWRlbmNlIG92ZXIgY3JlZGVudGlhbHMgZm91bmQgaW4KK2ZpbGVzIGZ1cnRoZXIgZG93biB0aGUgbGlzdC4KKworQ3JlZGVudGlhbCBzdG9yYWdlIHdpbGwgYnkgZGVmYXVsdCB3cml0ZSB0byB0aGUgZmlyc3QgZXhpc3RpbmcgZmlsZSBpbiB0aGUKK2xpc3QuIElmIG5vbmUgb2YgdGhlc2UgZmlsZXMgZXhpc3QsIGB+Ly5naXQtY3JlZGVudGlhbHNgIHdpbGwgYmUgY3JlYXRlZCBhbmQKK3dyaXR0ZW4gdG8uCisKK1doZW4gZXJhc2luZyBjcmVkZW50aWFscywgbWF0Y2hpbmcgY3JlZGVudGlhbHMgd2lsbCBiZSBlcmFzZWQgZnJvbSBhbGwgZmlsZXMuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitUaGUgcG9pbnQgb2YgdGhpcyBoZWxwZXIgaXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgdGltZXMgeW91IG11c3QgdHlwZQoreW91ciB1c2VybmFtZSBvciBwYXNzd29yZC4gRm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyIHN0b3JlCiskIGdpdCBwdXNoIGh0dHA6Ly9leGFtcGxlLmNvbS9yZXBvLmdpdAorVXNlcm5hbWU6IDx0eXBlIHlvdXIgdXNlcm5hbWU+CitQYXNzd29yZDogPHR5cGUgeW91ciBwYXNzd29yZD4KKworW3NldmVyYWwgZGF5cyBsYXRlcl0KKyQgZ2l0IHB1c2ggaHR0cDovL2V4YW1wbGUuY29tL3JlcG8uZ2l0CitbeW91ciBjcmVkZW50aWFscyBhcmUgdXNlZCBhdXRvbWF0aWNhbGx5XQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NUT1JBR0UgRk9STUFUCistLS0tLS0tLS0tLS0tLQorCitUaGUgYC5naXQtY3JlZGVudGlhbHNgIGZpbGUgaXMgc3RvcmVkIGluIHBsYWludGV4dC4gRWFjaCBjcmVkZW50aWFsIGlzCitzdG9yZWQgb24gaXRzIG93biBsaW5lIGFzIGEgVVJMIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraHR0cHM6Ly91c2VyOnBhc3NAZXhhbXBsZS5jb20KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIEdpdCBuZWVkcyBhdXRoZW50aWNhdGlvbiBmb3IgYSBwYXJ0aWN1bGFyIFVSTCBjb250ZXh0LAorY3JlZGVudGlhbC1zdG9yZSB3aWxsIGNvbnNpZGVyIHRoYXQgY29udGV4dCBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdAorZWFjaCBlbnRyeSBpbiB0aGUgY3JlZGVudGlhbHMgZmlsZS4gIElmIHRoZSBwcm90b2NvbCwgaG9zdG5hbWUsIGFuZAordXNlcm5hbWUgKGlmIHdlIGFscmVhZHkgaGF2ZSBvbmUpIG1hdGNoLCB0aGVuIHRoZSBwYXNzd29yZCBpcyByZXR1cm5lZAordG8gR2l0LiBTZWUgdGhlIGRpc2N1c3Npb24gb2YgY29uZmlndXJhdGlvbiBpbiBsaW5rZ2l0OmdpdGNyZWRlbnRpYWxzWzddCitmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWNyZWRlbnRpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMTE0NDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jcmVkZW50aWFsLnR4dApAQCAtMCwwICsxLDE1NCBAQAorZ2l0LWNyZWRlbnRpYWwoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jcmVkZW50aWFsIC0gUmV0cmlldmUgYW5kIHN0b3JlIHVzZXIgY3JlZGVudGlhbHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBjcmVkZW50aWFsIDxmaWxsfGFwcHJvdmV8cmVqZWN0PgorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXQgaGFzIGFuIGludGVybmFsIGludGVyZmFjZSBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZyBjcmVkZW50aWFscworZnJvbSBzeXN0ZW0tc3BlY2lmaWMgaGVscGVycywgYXMgd2VsbCBhcyBwcm9tcHRpbmcgdGhlIHVzZXIgZm9yCit1c2VybmFtZXMgYW5kIHBhc3N3b3Jkcy4gVGhlIGdpdC1jcmVkZW50aWFsIGNvbW1hbmQgZXhwb3NlcyB0aGlzCitpbnRlcmZhY2UgdG8gc2NyaXB0cyB3aGljaCBtYXkgd2FudCB0byByZXRyaWV2ZSwgc3RvcmUsIG9yIHByb21wdCBmb3IKK2NyZWRlbnRpYWxzIGluIHRoZSBzYW1lIG1hbm5lciBhcyBHaXQuIFRoZSBkZXNpZ24gb2YgdGhpcyBzY3JpcHRhYmxlCitpbnRlcmZhY2UgbW9kZWxzIHRoZSBpbnRlcm5hbCBDIEFQSTsgc2VlCitsaW5rOnRlY2huaWNhbC9hcGktY3JlZGVudGlhbHMuaHRtbFt0aGUgR2l0IGNyZWRlbnRpYWwgQVBJXSBmb3IgbW9yZQorYmFja2dyb3VuZCBvbiB0aGUgY29uY2VwdHMuCisKK2dpdC1jcmVkZW50aWFsIHRha2VzIGFuICJhY3Rpb24iIG9wdGlvbiBvbiB0aGUgY29tbWFuZC1saW5lIChvbmUgb2YKK2BmaWxsYCwgYGFwcHJvdmVgLCBvciBgcmVqZWN0YCkgYW5kIHJlYWRzIGEgY3JlZGVudGlhbCBkZXNjcmlwdGlvbgorb24gc3RkaW4gKHNlZSA8PElPRk1ULElOUFVUL09VVFBVVCBGT1JNQVQ+PikuCisKK0lmIHRoZSBhY3Rpb24gaXMgYGZpbGxgLCBnaXQtY3JlZGVudGlhbCB3aWxsIGF0dGVtcHQgdG8gYWRkICJ1c2VybmFtZSIKK2FuZCAicGFzc3dvcmQiIGF0dHJpYnV0ZXMgdG8gdGhlIGRlc2NyaXB0aW9uIGJ5IHJlYWRpbmcgY29uZmlnIGZpbGVzLAorYnkgY29udGFjdGluZyBhbnkgY29uZmlndXJlZCBjcmVkZW50aWFsIGhlbHBlcnMsIG9yIGJ5IHByb21wdGluZyB0aGUKK3VzZXIuIFRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXR0cmlidXRlcyBvZiB0aGUgY3JlZGVudGlhbAorZGVzY3JpcHRpb24gYXJlIHRoZW4gcHJpbnRlZCB0byBzdGRvdXQgdG9nZXRoZXIgd2l0aCB0aGUgYXR0cmlidXRlcworYWxyZWFkeSBwcm92aWRlZC4KKworSWYgdGhlIGFjdGlvbiBpcyBgYXBwcm92ZWAsIGdpdC1jcmVkZW50aWFsIHdpbGwgc2VuZCB0aGUgZGVzY3JpcHRpb24KK3RvIGFueSBjb25maWd1cmVkIGNyZWRlbnRpYWwgaGVscGVycywgd2hpY2ggbWF5IHN0b3JlIHRoZSBjcmVkZW50aWFsCitmb3IgbGF0ZXIgdXNlLgorCitJZiB0aGUgYWN0aW9uIGlzIGByZWplY3RgLCBnaXQtY3JlZGVudGlhbCB3aWxsIHNlbmQgdGhlIGRlc2NyaXB0aW9uIHRvCithbnkgY29uZmlndXJlZCBjcmVkZW50aWFsIGhlbHBlcnMsIHdoaWNoIG1heSBlcmFzZSBhbnkgc3RvcmVkCitjcmVkZW50aWFsIG1hdGNoaW5nIHRoZSBkZXNjcmlwdGlvbi4KKworSWYgdGhlIGFjdGlvbiBpcyBgYXBwcm92ZWAgb3IgYHJlamVjdGAsIG5vIG91dHB1dCBzaG91bGQgYmUgZW1pdHRlZC4KKworVFlQSUNBTCBVU0UgT0YgR0lUIENSRURFTlRJQUwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGFwcGxpY2F0aW9uIHVzaW5nIGdpdC1jcmVkZW50aWFsIHdpbGwgdHlwaWNhbGx5IHVzZSBgZ2l0CitjcmVkZW50aWFsYCBmb2xsb3dpbmcgdGhlc2Ugc3RlcHM6CisKKyAgMS4gR2VuZXJhdGUgYSBjcmVkZW50aWFsIGRlc2NyaXB0aW9uIGJhc2VkIG9uIHRoZSBjb250ZXh0LgorKworRm9yIGV4YW1wbGUsIGlmIHdlIHdhbnQgYSBwYXNzd29yZCBmb3IKK2BodHRwczovL2V4YW1wbGUuY29tL2Zvby5naXRgLCB3ZSBtaWdodCBnZW5lcmF0ZSB0aGUgZm9sbG93aW5nCitjcmVkZW50aWFsIGRlc2NyaXB0aW9uIChkb24ndCBmb3JnZXQgdGhlIGJsYW5rIGxpbmUgYXQgdGhlIGVuZDsgaXQKK3RlbGxzIGBnaXQgY3JlZGVudGlhbGAgdGhhdCB0aGUgYXBwbGljYXRpb24gZmluaXNoZWQgZmVlZGluZyBhbGwgdGhlCitpbmZvcm1hdGlvbiBpdCBoYXMpOgorCisJIHByb3RvY29sPWh0dHBzCisJIGhvc3Q9ZXhhbXBsZS5jb20KKwkgcGF0aD1mb28uZ2l0CisKKyAgMi4gQXNrIGdpdC1jcmVkZW50aWFsIHRvIGdpdmUgdXMgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZm9yIHRoaXMKKyAgICAgZGVzY3JpcHRpb24uIFRoaXMgaXMgZG9uZSBieSBydW5uaW5nIGBnaXQgY3JlZGVudGlhbCBmaWxsYCwKKyAgICAgZmVlZGluZyB0aGUgZGVzY3JpcHRpb24gZnJvbSBzdGVwICgxKSB0byBpdHMgc3RhbmRhcmQgaW5wdXQuIFRoZSBjb21wbGV0ZQorICAgICBjcmVkZW50aWFsIGRlc2NyaXB0aW9uIChpbmNsdWRpbmcgdGhlIGNyZWRlbnRpYWwgcGVyIHNlLCBpLmUuIHRoZQorICAgICBsb2dpbiBhbmQgcGFzc3dvcmQpIHdpbGwgYmUgcHJvZHVjZWQgb24gc3RhbmRhcmQgb3V0cHV0LCBsaWtlOgorCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Ym9iCisJcGFzc3dvcmQ9c2VjcjN0CisrCitJbiBtb3N0IGNhc2VzLCB0aGlzIG1lYW5zIHRoZSBhdHRyaWJ1dGVzIGdpdmVuIGluIHRoZSBpbnB1dCB3aWxsIGJlCityZXBlYXRlZCBpbiB0aGUgb3V0cHV0LCBidXQgR2l0IG1heSBhbHNvIG1vZGlmeSB0aGUgY3JlZGVudGlhbAorZGVzY3JpcHRpb24sIGZvciBleGFtcGxlIGJ5IHJlbW92aW5nIHRoZSBgcGF0aGAgYXR0cmlidXRlIHdoZW4gdGhlCitwcm90b2NvbCBpcyBIVFRQKHMpIGFuZCBgY3JlZGVudGlhbC51c2VIdHRwUGF0aGAgaXMgZmFsc2UuCisrCitJZiB0aGUgYGdpdCBjcmVkZW50aWFsYCBrbmV3IGFib3V0IHRoZSBwYXNzd29yZCwgdGhpcyBzdGVwIG1heQorbm90IGhhdmUgaW52b2x2ZWQgdGhlIHVzZXIgYWN0dWFsbHkgdHlwaW5nIHRoaXMgcGFzc3dvcmQgKHRoZQordXNlciBtYXkgaGF2ZSB0eXBlZCBhIHBhc3N3b3JkIHRvIHVubG9jayB0aGUga2V5Y2hhaW4gaW5zdGVhZCwKK29yIG5vIHVzZXIgaW50ZXJhY3Rpb24gd2FzIGRvbmUgaWYgdGhlIGtleWNoYWluIHdhcyBhbHJlYWR5Cit1bmxvY2tlZCkgYmVmb3JlIGl0IHJldHVybmVkIGBwYXNzd29yZD1zZWNyM3RgLgorCisgIDMuIFVzZSB0aGUgY3JlZGVudGlhbCAoZS5nLiwgYWNjZXNzIHRoZSBVUkwgd2l0aCB0aGUgdXNlcm5hbWUgYW5kCisgICAgIHBhc3N3b3JkIGZyb20gc3RlcCAoMikpLCBhbmQgc2VlIGlmIGl0J3MgYWNjZXB0ZWQuCisKKyAgNC4gUmVwb3J0IG9uIHRoZSBzdWNjZXNzIG9yIGZhaWx1cmUgb2YgdGhlIHBhc3N3b3JkLiBJZiB0aGUKKyAgICAgY3JlZGVudGlhbCBhbGxvd2VkIHRoZSBvcGVyYXRpb24gdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LCB0aGVuCisgICAgIGl0IGNhbiBiZSBtYXJrZWQgd2l0aCBhbiAiYXBwcm92ZSIgYWN0aW9uIHRvIHRlbGwgYGdpdAorICAgICBjcmVkZW50aWFsYCB0byByZXVzZSBpdCBpbiBpdHMgbmV4dCBpbnZvY2F0aW9uLiBJZiB0aGUgY3JlZGVudGlhbAorICAgICB3YXMgcmVqZWN0ZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24sIHVzZSB0aGUgInJlamVjdCIgYWN0aW9uIHNvCisgICAgIHRoYXQgYGdpdCBjcmVkZW50aWFsYCB3aWxsIGFzayBmb3IgYSBuZXcgcGFzc3dvcmQgaW4gaXRzIG5leHQKKyAgICAgaW52b2NhdGlvbi4gSW4gZWl0aGVyIGNhc2UsIGBnaXQgY3JlZGVudGlhbGAgc2hvdWxkIGJlIGZlZCB3aXRoCisgICAgIHRoZSBjcmVkZW50aWFsIGRlc2NyaXB0aW9uIG9idGFpbmVkIGZyb20gc3RlcCAoMikgKHdoaWNoIGFsc28KKyAgICAgY29udGFpbiB0aGUgb25lcyBwcm92aWRlZCBpbiBzdGVwICgxKSkuCisKK1tbSU9GTVRdXQorSU5QVVQvT1VUUFVUIEZPUk1BVAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitgZ2l0IGNyZWRlbnRpYWxgIHJlYWRzIGFuZC9vciB3cml0ZXMgKGRlcGVuZGluZyBvbiB0aGUgYWN0aW9uIHVzZWQpCitjcmVkZW50aWFsIGluZm9ybWF0aW9uIGluIGl0cyBzdGFuZGFyZCBpbnB1dC9vdXRwdXQuIFRoaXMgaW5mb3JtYXRpb24KK2NhbiBjb3JyZXNwb25kIGVpdGhlciB0byBrZXlzIGZvciB3aGljaCBgZ2l0IGNyZWRlbnRpYWxgIHdpbGwgb2J0YWluCit0aGUgbG9naW4vcGFzc3dvcmQgaW5mb3JtYXRpb24gKGUuZy4gaG9zdCwgcHJvdG9jb2wsIHBhdGgpLCBvciB0byB0aGUKK2FjdHVhbCBjcmVkZW50aWFsIGRhdGEgdG8gYmUgb2J0YWluZWQgKGxvZ2luL3Bhc3N3b3JkKS4KKworVGhlIGNyZWRlbnRpYWwgaXMgc3BsaXQgaW50byBhIHNldCBvZiBuYW1lZCBhdHRyaWJ1dGVzLCB3aXRoIG9uZQorYXR0cmlidXRlIHBlciBsaW5lLiBFYWNoIGF0dHJpYnV0ZSBpcworc3BlY2lmaWVkIGJ5IGEga2V5LXZhbHVlIHBhaXIsIHNlcGFyYXRlZCBieSBhbiBgPWAgKGVxdWFscykgc2lnbiwKK2ZvbGxvd2VkIGJ5IGEgbmV3bGluZS4gVGhlIGtleSBtYXkgY29udGFpbiBhbnkgYnl0ZXMgZXhjZXB0IGA9YCwKK25ld2xpbmUsIG9yIE5VTC4gVGhlIHZhbHVlIG1heSBjb250YWluIGFueSBieXRlcyBleGNlcHQgbmV3bGluZSBvciBOVUwuCitJbiBib3RoIGNhc2VzLCBhbGwgYnl0ZXMgYXJlIHRyZWF0ZWQgYXMtaXMgKGkuZS4sIHRoZXJlIGlzIG5vIHF1b3RpbmcsCithbmQgb25lIGNhbm5vdCB0cmFuc21pdCBhIHZhbHVlIHdpdGggbmV3bGluZSBvciBOVUwgaW4gaXQpLiBUaGUgbGlzdCBvZgorYXR0cmlidXRlcyBpcyB0ZXJtaW5hdGVkIGJ5IGEgYmxhbmsgbGluZSBvciBlbmQtb2YtZmlsZS4KK0dpdCB1bmRlcnN0YW5kcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKK2Bwcm90b2NvbGA6OgorCisJVGhlIHByb3RvY29sIG92ZXIgd2hpY2ggdGhlIGNyZWRlbnRpYWwgd2lsbCBiZSB1c2VkIChlLmcuLAorCWBodHRwc2ApLgorCitgaG9zdGA6OgorCisJVGhlIHJlbW90ZSBob3N0bmFtZSBmb3IgYSBuZXR3b3JrIGNyZWRlbnRpYWwuCisKK2BwYXRoYDo6CisKKwlUaGUgcGF0aCB3aXRoIHdoaWNoIHRoZSBjcmVkZW50aWFsIHdpbGwgYmUgdXNlZC4gRS5nLiwgZm9yCisJYWNjZXNzaW5nIGEgcmVtb3RlIGh0dHBzIHJlcG9zaXRvcnksIHRoaXMgd2lsbCBiZSB0aGUKKwlyZXBvc2l0b3J5J3MgcGF0aCBvbiB0aGUgc2VydmVyLgorCitgdXNlcm5hbWVgOjoKKworCVRoZSBjcmVkZW50aWFsJ3MgdXNlcm5hbWUsIGlmIHdlIGFscmVhZHkgaGF2ZSBvbmUgKGUuZy4sIGZyb20gYQorCVVSTCwgZnJvbSB0aGUgdXNlciwgb3IgZnJvbSBhIHByZXZpb3VzbHkgcnVuIGhlbHBlcikuCisKK2BwYXNzd29yZGA6OgorCisJVGhlIGNyZWRlbnRpYWwncyBwYXNzd29yZCwgaWYgd2UgYXJlIGFza2luZyBpdCB0byBiZSBzdG9yZWQuCisKK2B1cmxgOjoKKworCVdoZW4gdGhpcyBzcGVjaWFsIGF0dHJpYnV0ZSBpcyByZWFkIGJ5IGBnaXQgY3JlZGVudGlhbGAsIHRoZQorCXZhbHVlIGlzIHBhcnNlZCBhcyBhIFVSTCBhbmQgdHJlYXRlZCBhcyBpZiBpdHMgY29uc3RpdHVlbnQgcGFydHMKKwl3ZXJlIHJlYWQgKGUuZy4sIGB1cmw9aHR0cHM6Ly9leGFtcGxlLmNvbWAgd291bGQgYmVoYXZlIGFzIGlmCisJYHByb3RvY29sPWh0dHBzYCBhbmQgYGhvc3Q9ZXhhbXBsZS5jb21gIGhhZCBiZWVuIHByb3ZpZGVkKS4gVGhpcworCWNhbiBoZWxwIGNhbGxlcnMgYXZvaWQgcGFyc2luZyBVUkxzIHRoZW1zZWx2ZXMuICBOb3RlIHRoYXQgYW55CisJY29tcG9uZW50cyB3aGljaCBhcmUgbWlzc2luZyBmcm9tIHRoZSBVUkwgKGUuZy4sIHRoZXJlIGlzIG5vCisJdXNlcm5hbWUgaW4gdGhlIGV4YW1wbGUgYWJvdmUpIHdpbGwgYmUgc2V0IHRvIGVtcHR5OyBpZiB5b3Ugd2FudAorCXRvIHByb3ZpZGUgYSBVUkwgYW5kIG92ZXJyaWRlIHNvbWUgYXR0cmlidXRlcywgcHJvdmlkZSB0aGUgVVJMCisJYXR0cmlidXRlIGZpcnN0LCBmb2xsb3dlZCBieSBhbnkgb3ZlcnJpZGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3ZzZXhwb3J0Y29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxNTRiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2V4cG9ydGNvbW1pdC50eHQKQEAgLTAsMCArMSwxMTggQEAKK2dpdC1jdnNleHBvcnRjb21taXQoMSkKKz09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWN2c2V4cG9ydGNvbW1pdCAtIEV4cG9ydCBhIHNpbmdsZSBjb21taXQgdG8gYSBDVlMgY2hlY2tvdXQKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY3ZzZXhwb3J0Y29tbWl0JyBbLWhdIFstdV0gWy12XSBbLWNdIFstUF0gWy1wXSBbLWFdIFstZCBjdnNyb290XQorCVstdyBjdnN3b3JrZGlyXSBbLVddIFstZl0gWy1tIG1zZ3ByZWZpeF0gW1BBUkVOVENPTU1JVF0gQ09NTUlUSUQKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0V4cG9ydHMgYSBjb21taXQgZnJvbSBHaXQgdG8gYSBDVlMgY2hlY2tvdXQsIG1ha2luZyBpdCBlYXNpZXIKK3RvIG1lcmdlIHBhdGNoZXMgZnJvbSBhIEdpdCByZXBvc2l0b3J5IGludG8gYSBDVlMgcmVwb3NpdG9yeS4KKworU3BlY2lmeSB0aGUgbmFtZSBvZiBhIENWUyBjaGVja291dCB1c2luZyB0aGUgLXcgc3dpdGNoIG9yIGV4ZWN1dGUgaXQKK2Zyb20gdGhlIHJvb3Qgb2YgdGhlIENWUyB3b3JraW5nIGNvcHkuIEluIHRoZSBsYXR0ZXIgY2FzZSBHSVRfRElSIG11c3QKK2JlIGRlZmluZWQuIFNlZSBleGFtcGxlcyBiZWxvdy4KKworSXQgZG9lcyBpdHMgYmVzdCB0byBkbyB0aGUgc2FmZSB0aGluZywgaXQgd2lsbCBjaGVjayB0aGF0IHRoZSBmaWxlcyBhcmUKK3VuY2hhbmdlZCBhbmQgdXAgdG8gZGF0ZSBpbiB0aGUgQ1ZTIGNoZWNrb3V0LCBhbmQgaXQgd2lsbCBub3QgYXV0b2NvbW1pdAorYnkgZGVmYXVsdC4KKworU3VwcG9ydHMgZmlsZSBhZGRpdGlvbnMsIHJlbW92YWxzLCBhbmQgY29tbWl0cyB0aGF0IGFmZmVjdCBiaW5hcnkgZmlsZXMuCisKK0lmIHRoZSBjb21taXQgaXMgYSBtZXJnZSBjb21taXQsIHlvdSBtdXN0IHRlbGwgJ2dpdCBjdnNleHBvcnRjb21taXQnIHdoYXQKK3BhcmVudCB0aGUgY2hhbmdlc2V0IHNob3VsZCBiZSBkb25lIGFnYWluc3QuCisKK09QVElPTlMKKy0tLS0tLS0KKworLWM6OgorCUNvbW1pdCBhdXRvbWF0aWNhbGx5IGlmIHRoZSBwYXRjaCBhcHBsaWVkIGNsZWFubHkuIEl0IHdpbGwgbm90CisJY29tbWl0IGlmIGFueSBodW5rcyBmYWlsIHRvIGFwcGx5IG9yIHRoZXJlIHdlcmUgb3RoZXIgcHJvYmxlbXMuCisKKy1wOjoKKwlCZSBwZWRhbnRpYyAocGFyYW5vaWQpIHdoZW4gYXBwbHlpbmcgcGF0Y2hlcy4gSW52b2tlcyBwYXRjaCB3aXRoCisJLS1mdXp6PTAKKworLWE6OgorCUFkZCBhdXRob3JzaGlwIGluZm9ybWF0aW9uLiBBZGRzIEF1dGhvciBsaW5lLCBhbmQgQ29tbWl0dGVyIChpZgorCWRpZmZlcmVudCBmcm9tIEF1dGhvcikgdG8gdGhlIG1lc3NhZ2UuCisKKy1kOjoKKwlTZXQgYW4gYWx0ZXJuYXRpdmUgQ1ZTUk9PVCB0byB1c2UuICBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBDVlMKKwktZCBwYXJhbWV0ZXIuICBVc3VhbGx5IHVzZXJzIHdpbGwgbm90IHdhbnQgdG8gc2V0IHRoaXMsIGV4Y2VwdAorCWlmIHVzaW5nIENWUyBpbiBhbiBhc3ltbWV0cmljIGZhc2hpb24uCisKKy1mOjoKKwlGb3JjZSB0aGUgbWVyZ2UgZXZlbiBpZiB0aGUgZmlsZXMgYXJlIG5vdCB1cCB0byBkYXRlLgorCistUDo6CisJRm9yY2UgdGhlIHBhcmVudCBjb21taXQsIGV2ZW4gaWYgaXQgaXMgbm90IGEgZGlyZWN0IHBhcmVudC4KKworLW06OgorCVByZXBlbmQgdGhlIGNvbW1pdCBtZXNzYWdlIHdpdGggdGhlIHByb3ZpZGVkIHByZWZpeC4KKwlVc2VmdWwgZm9yIHBhdGNoIHNlcmllcyBhbmQgdGhlIGxpa2UuCisKKy11OjoKKwlVcGRhdGUgYWZmZWN0ZWQgZmlsZXMgZnJvbSBDVlMgcmVwb3NpdG9yeSBiZWZvcmUgYXR0ZW1wdGluZyBleHBvcnQuCisKKy1rOjoKKwlSZXZlcnNlIENWUyBrZXl3b3JkIGV4cGFuc2lvbiAoZS5nLiAkUmV2aXNpb246IDEuMi4zLjQkCisJYmVjb21lcyAkUmV2aXNpb24kKSBpbiB3b3JraW5nIENWUyBjaGVja291dCBiZWZvcmUgYXBwbHlpbmcgcGF0Y2guCisKKy13OjoKKwlTcGVjaWZ5IHRoZSBsb2NhdGlvbiBvZiB0aGUgQ1ZTIGNoZWNrb3V0IHRvIHVzZSBmb3IgdGhlIGV4cG9ydC4gVGhpcworCW9wdGlvbiBkb2VzIG5vdCByZXF1aXJlIEdJVF9ESVIgdG8gYmUgc2V0IGJlZm9yZSBleGVjdXRpb24gaWYgdGhlCisJY3VycmVudCBkaXJlY3RvcnkgaXMgd2l0aGluIGEgR2l0IHJlcG9zaXRvcnkuICBUaGUgZGVmYXVsdCBpcyB0aGUKKwl2YWx1ZSBvZiAnY3ZzZXhwb3J0Y29tbWl0LmN2c2RpcicuCisKKy1XOjoKKwlUZWxsIGN2c2V4cG9ydGNvbW1pdCB0aGF0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIG5vdCBvbmx5CisJYSBHaXQgY2hlY2tvdXQsIGJ1dCBhbHNvIHRoZSBDVlMgY2hlY2tvdXQuICBUaGVyZWZvcmUsIEdpdCB3aWxsCisJcmVzZXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHRvIHRoZSBwYXJlbnQgY29tbWl0IGJlZm9yZSBwcm9jZWVkaW5nLgorCistdjo6CisJVmVyYm9zZS4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorY3ZzZXhwb3J0Y29tbWl0LmN2c2Rpcjo6CisJVGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIENWUyBjaGVja291dCB0byB1c2UgZm9yIHRoZSBleHBvcnQuCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitNZXJnZSBvbmUgcGF0Y2ggaW50byBDVlM6OgorKworLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfRElSPX4vcHJvamVjdC8uZ2l0CiskIGNkIH4vcHJvamVjdF9jdnNfY2hlY2tvdXQKKyQgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdiA8Y29tbWl0LXNoYTE+CiskIGN2cyBjb21taXQgLUYgLm1zZyA8ZmlsZXM+CistLS0tLS0tLS0tLS0KKworTWVyZ2Ugb25lIHBhdGNoIGludG8gQ1ZTICgtYyBhbmQgLXcgb3B0aW9ucykuIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyB3aXRoaW4gdGhlIEdpdCBSZXBvOjoKKysKKy0tLS0tLS0tLS0tLQorCSQgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdiAtYyAtdyB+L3Byb2plY3RfY3ZzX2NoZWNrb3V0IDxjb21taXQtc2hhMT4KKy0tLS0tLS0tLS0tLQorCitNZXJnZSBwZW5kaW5nIHBhdGNoZXMgaW50byBDVlMgYXV0b21hdGljYWxseSAtLSBvbmx5IGlmIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmc6OgorKworLS0tLS0tLS0tLS0tCiskIGV4cG9ydCBHSVRfRElSPX4vcHJvamVjdC8uZ2l0CiskIGNkIH4vcHJvamVjdF9jdnNfY2hlY2tvdXQKKyQgZ2l0IGNoZXJyeSBjdnNoZWFkIG15aGVhZCB8IHNlZCAtbiAncy9eKyAvL3AnIHwgeGFyZ3MgLWwxIGdpdCBjdnNleHBvcnRjb21taXQgLWMgLXAgLXYKKy0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYTA2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQudHh0CkBAIC0wLDAgKzEsMjI4IEBACitnaXQtY3ZzaW1wb3J0KDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1jdnNpbXBvcnQgLSBTYWx2YWdlIHlvdXIgZGF0YSBvdXQgb2YgYW5vdGhlciBTQ00gcGVvcGxlIGxvdmUgdG8gaGF0ZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjdnNpbXBvcnQnIFstbyA8YnJhbmNoLWZvci1IRUFEPl0gWy1oXSBbLXZdIFstZCA8Q1ZTUk9PVD5dCisJICAgICAgWy1BIDxhdXRob3ItY29udi1maWxlPl0gWy1wIDxvcHRpb25zLWZvci1jdnNwcz5dIFstUCA8ZmlsZT5dCisJICAgICAgWy1DIDxnaXRfcmVwb3NpdG9yeT5dIFsteiA8ZnV6ej5dIFstaV0gWy1rXSBbLXVdIFstcyA8c3Vic3Q+XQorCSAgICAgIFstYV0gWy1tXSBbLU0gPHJlZ2V4Pl0gWy1TIDxyZWdleD5dIFstTCA8Y29tbWl0bGltaXQ+XQorCSAgICAgIFstciA8cmVtb3RlPl0gWy1SXSBbPENWU19tb2R1bGU+XQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorKldBUk5JTkc6KiBgZ2l0IGN2c2ltcG9ydGAgdXNlcyBjdnNwcyB2ZXJzaW9uIDIsIHdoaWNoIGlzIGNvbnNpZGVyZWQKK2RlcHJlY2F0ZWQ7IGl0IGRvZXMgbm90IHdvcmsgd2l0aCBjdnNwcyB2ZXJzaW9uIDMgYW5kIGxhdGVyLiAgSWYgeW91IGFyZQorcGVyZm9ybWluZyBhIG9uZS1zaG90IGltcG9ydCBvZiBhIENWUyByZXBvc2l0b3J5IGNvbnNpZGVyIHVzaW5nCitodHRwOi8vY3ZzMnN2bi50aWdyaXMub3JnL2N2czJnaXQuaHRtbFtjdnMyZ2l0XSBvcgoraHR0cHM6Ly9naXRodWIuY29tL0JhcnRNYXNzZXkvcGFyc2VjdnNbcGFyc2VjdnNdLgorCitJbXBvcnRzIGEgQ1ZTIHJlcG9zaXRvcnkgaW50byBHaXQuIEl0IHdpbGwgZWl0aGVyIGNyZWF0ZSBhIG5ldworcmVwb3NpdG9yeSwgb3IgaW5jcmVtZW50YWxseSBpbXBvcnQgaW50byBhbiBleGlzdGluZyBvbmUuCisKK1NwbGl0dGluZyB0aGUgQ1ZTIGxvZyBpbnRvIHBhdGNoIHNldHMgaXMgZG9uZSBieSAnY3ZzcHMnLgorQXQgbGVhc3QgdmVyc2lvbiAyLjEgaXMgcmVxdWlyZWQuCisKKypXQVJOSU5HOiogZm9yIGNlcnRhaW4gc2l0dWF0aW9ucyB0aGUgaW1wb3J0IGxlYWRzIHRvIGluY29ycmVjdCByZXN1bHRzLgorUGxlYXNlIHNlZSB0aGUgc2VjdGlvbiA8PGlzc3VlcyxJU1NVRVM+PiBmb3IgZnVydGhlciByZWZlcmVuY2UuCisKK1lvdSBzaG91bGQgKm5ldmVyKiBkbyBhbnkgd29yayBvZiB5b3VyIG93biBvbiB0aGUgYnJhbmNoZXMgdGhhdCBhcmUKK2NyZWF0ZWQgYnkgJ2dpdCBjdnNpbXBvcnQnLiAgQnkgZGVmYXVsdCBpbml0aWFsIGltcG9ydCB3aWxsIGNyZWF0ZSBhbmQgcG9wdWxhdGUgYQorIm1hc3RlciIgYnJhbmNoIGZyb20gdGhlIENWUyByZXBvc2l0b3J5J3MgbWFpbiBicmFuY2ggd2hpY2ggeW91J3JlIGZyZWUKK3RvIHdvcmsgd2l0aDsgYWZ0ZXIgdGhhdCwgeW91IG5lZWQgdG8gJ2dpdCBtZXJnZScgaW5jcmVtZW50YWwgaW1wb3J0cywgb3IKK2FueSBDVlMgYnJhbmNoZXMsIHlvdXJzZWxmLiAgSXQgaXMgYWR2aXNhYmxlIHRvIHNwZWNpZnkgYSBuYW1lZCByZW1vdGUgdmlhCistciB0byBzZXBhcmF0ZSBhbmQgcHJvdGVjdCB0aGUgaW5jb21pbmcgYnJhbmNoZXMuCisKK0lmIHlvdSBpbnRlbmQgdG8gc2V0IHVwIGEgc2hhcmVkIHB1YmxpYyByZXBvc2l0b3J5IHRoYXQgYWxsIGRldmVsb3BlcnMgY2FuCityZWFkL3dyaXRlLCBvciBpZiB5b3Ugd2FudCB0byB1c2UgbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdLCB0aGVuIHlvdQorcHJvYmFibHkgd2FudCB0byBtYWtlIGEgYmFyZSBjbG9uZSBvZiB0aGUgaW1wb3J0ZWQgcmVwb3NpdG9yeSwKK2FuZCB1c2UgdGhlIGNsb25lIGFzIHRoZSBzaGFyZWQgcmVwb3NpdG9yeS4KK1NlZSBsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10uCisKKworT1BUSU9OUworLS0tLS0tLQorLXY6OgorCVZlcmJvc2l0eTogbGV0ICdjdnNpbXBvcnQnIHJlcG9ydCB3aGF0IGl0IGlzIGRvaW5nLgorCistZCA8Q1ZTUk9PVD46OgorCVRoZSByb290IG9mIHRoZSBDVlMgYXJjaGl2ZS4gTWF5IGJlIGxvY2FsIChhIHNpbXBsZSBwYXRoKSBvciByZW1vdGU7CisJY3VycmVudGx5LCBvbmx5IHRoZSA6bG9jYWw6LCA6ZXh0OiBhbmQgOnBzZXJ2ZXI6IGFjY2VzcyBtZXRob2RzCisJYXJlIHN1cHBvcnRlZC4gSWYgbm90IGdpdmVuLCAnZ2l0IGN2c2ltcG9ydCcgd2lsbCB0cnkgdG8gcmVhZCBpdAorCWZyb20gYENWUy9Sb290YC4gSWYgbm8gc3VjaCBmaWxlIGV4aXN0cywgaXQgY2hlY2tzIGZvciB0aGUKKwlgQ1ZTUk9PVGAgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKzxDVlNfbW9kdWxlPjo6CisJVGhlIENWUyBtb2R1bGUgeW91IHdhbnQgdG8gaW1wb3J0LiBSZWxhdGl2ZSB0byA8Q1ZTUk9PVD4uCisJSWYgbm90IGdpdmVuLCAnZ2l0IGN2c2ltcG9ydCcgdHJpZXMgdG8gcmVhZCBpdCBmcm9tCisJYENWUy9SZXBvc2l0b3J5YC4KKworLUMgPHRhcmdldC1kaXI+OjoKKwlUaGUgR2l0IHJlcG9zaXRvcnkgdG8gaW1wb3J0IHRvLiAgSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0CisgICAgICAgIGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworLXIgPHJlbW90ZT46OgorCVRoZSBHaXQgcmVtb3RlIHRvIGltcG9ydCB0aGlzIENWUyByZXBvc2l0b3J5IGludG8uCisJTW92ZXMgYWxsIENWUyBicmFuY2hlcyBpbnRvIHJlbW90ZXMvPHJlbW90ZT4vPGJyYW5jaD4KKwlha2luIHRvIHRoZSB3YXkgJ2dpdCBjbG9uZScgdXNlcyAnb3JpZ2luJyBieSBkZWZhdWx0LgorCistbyA8YnJhbmNoLWZvci1IRUFEPjo6CisJV2hlbiBubyByZW1vdGUgaXMgc3BlY2lmaWVkICh2aWEgLXIpIHRoZSAnSEVBRCcgYnJhbmNoCisJZnJvbSBDVlMgaXMgaW1wb3J0ZWQgdG8gdGhlICdvcmlnaW4nIGJyYW5jaCB3aXRoaW4gdGhlIEdpdAorCXJlcG9zaXRvcnksIGFzICdIRUFEJyBhbHJlYWR5IGhhcyBhIHNwZWNpYWwgbWVhbmluZyBmb3IgR2l0LgorCVdoZW4gYSByZW1vdGUgaXMgc3BlY2lmaWVkIHRoZSAnSEVBRCcgYnJhbmNoIGlzIG5hbWVkCisJcmVtb3Rlcy88cmVtb3RlPi9tYXN0ZXIgbWlycm9yaW5nICdnaXQgY2xvbmUnIGJlaGF2aW91ci4KKwlVc2UgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gaW1wb3J0IGludG8gYSBkaWZmZXJlbnQKKwlicmFuY2guCisrCitVc2UgJy1vIG1hc3RlcicgZm9yIGNvbnRpbnVpbmcgYW4gaW1wb3J0IHRoYXQgd2FzIGluaXRpYWxseSBkb25lIGJ5Cit0aGUgb2xkIGN2czJnaXQgdG9vbC4KKworLWk6OgorCUltcG9ydC1vbmx5OiBkb24ndCBwZXJmb3JtIGEgY2hlY2tvdXQgYWZ0ZXIgaW1wb3J0aW5nLiAgVGhpcyBvcHRpb24KKwllbnN1cmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggcmVtYWluIHVudG91Y2hlZCBhbmQgd2lsbAorCW5vdCBjcmVhdGUgdGhlbSBpZiB0aGV5IGRvIG5vdCBleGlzdC4KKworLWs6OgorCUtpbGwga2V5d29yZHM6IHdpbGwgZXh0cmFjdCBmaWxlcyB3aXRoICcta2snIGZyb20gdGhlIENWUyBhcmNoaXZlCisJdG8gYXZvaWQgbm9pc3kgY2hhbmdlc2V0cy4gSGlnaGx5IHJlY29tbWVuZGVkLCBidXQgb2ZmIGJ5IGRlZmF1bHQKKwl0byBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggZWFybHkgaW1wb3J0ZWQgdHJlZXMuCisKKy11OjoKKwlDb252ZXJ0IHVuZGVyc2NvcmVzIGluIHRhZyBhbmQgYnJhbmNoIG5hbWVzIHRvIGRvdHMuCisKKy1zIDxzdWJzdD46OgorCVN1YnN0aXR1dGUgdGhlIGNoYXJhY3RlciAiLyIgaW4gYnJhbmNoIG5hbWVzIHdpdGggPHN1YnN0PgorCistcCA8b3B0aW9ucy1mb3ItY3ZzcHM+OjoKKwlBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGN2c3BzLgorCVRoZSBvcHRpb25zICctdScgYW5kICctQScgYXJlIGltcGxpY2l0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaGVyZS4KKysKK0lmIHlvdSBuZWVkIHRvIHBhc3MgbXVsdGlwbGUgb3B0aW9ucywgc2VwYXJhdGUgdGhlbSB3aXRoIGEgY29tbWEuCisKKy16IDxmdXp6Pjo6CisJUGFzcyB0aGUgdGltZXN0YW1wIGZ1enogZmFjdG9yIHRvIGN2c3BzLCBpbiBzZWNvbmRzLiBJZiB1bnNldCwKKwljdnNwcyBkZWZhdWx0cyB0byAzMDBzLgorCistUCA8Y3ZzcHMtb3V0cHV0LWZpbGU+OjoKKwlJbnN0ZWFkIG9mIGNhbGxpbmcgY3ZzcHMsIHJlYWQgdGhlIHByb3ZpZGVkIGN2c3BzIG91dHB1dCBmaWxlLiBVc2VmdWwKKwlmb3IgZGVidWdnaW5nIG9yIHdoZW4gY3ZzcHMgaXMgYmVpbmcgaGFuZGxlZCBvdXRzaWRlIGN2c2ltcG9ydC4KKworLW06OgorCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgb3B0aW9uCisJd2lsbCBlbmFibGUgZGVmYXVsdCByZWdleGVzIHRoYXQgdHJ5IHRvIGNhcHR1cmUgdGhlIHNvdXJjZQorCWJyYW5jaCBuYW1lIGZyb20gdGhlIGNvbW1pdCBtZXNzYWdlLgorCistTSA8cmVnZXg+OjoKKwlBdHRlbXB0IHRvIGRldGVjdCBtZXJnZXMgYmFzZWQgb24gdGhlIGNvbW1pdCBtZXNzYWdlIHdpdGggYSBjdXN0b20KKwlyZWdleC4gSXQgY2FuIGJlIHVzZWQgd2l0aCAnLW0nIHRvIGVuYWJsZSB0aGUgZGVmYXVsdCByZWdleGVzCisJYXMgd2VsbC4gWW91IG11c3QgZXNjYXBlIGZvcndhcmQgc2xhc2hlcy4KKysKK1RoZSByZWdleCBtdXN0IGNhcHR1cmUgdGhlIHNvdXJjZSBicmFuY2ggbmFtZSBpbiAkMS4KKysKK1RoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHNldmVyYWwgdGltZXMgdG8gcHJvdmlkZSBzZXZlcmFsIGRldGVjdGlvbiByZWdleGVzLgorCistUyA8cmVnZXg+OjoKKwlTa2lwIHBhdGhzIG1hdGNoaW5nIHRoZSByZWdleC4KKworLWE6OgorCUltcG9ydCBhbGwgY29tbWl0cywgaW5jbHVkaW5nIHJlY2VudCBvbmVzLiBjdnNpbXBvcnQgYnkgZGVmYXVsdAorCXNraXBzIGNvbW1pdHMgdGhhdCBoYXZlIGEgdGltZXN0YW1wIGxlc3MgdGhhbiAxMCBtaW51dGVzIGFnby4KKworLUwgPGxpbWl0Pjo6CisJTGltaXQgdGhlIG51bWJlciBvZiBjb21taXRzIGltcG9ydGVkLiBXb3JrYXJvdW5kIGZvciBjYXNlcyB3aGVyZQorCWN2c2ltcG9ydCBsZWFrcyBtZW1vcnkuCisKKy1BIDxhdXRob3ItY29udi1maWxlPjo6CisJQ1ZTIGJ5IGRlZmF1bHQgdXNlcyB0aGUgVW5peCB1c2VybmFtZSB3aGVuIHdyaXRpbmcgaXRzCisJY29tbWl0IGxvZ3MuIFVzaW5nIHRoaXMgb3B0aW9uIGFuZCBhbiBhdXRob3ItY29udi1maWxlCisJbWFwcyB0aGUgbmFtZSByZWNvcmRlZCBpbiBDVlMgdG8gYXV0aG9yIG5hbWUsIGUtbWFpbCBhbmQKKwlvcHRpb25hbCB0aW1lIHpvbmU6CisrCistLS0tLS0tLS0KKwlleG9uPUFuZHJlYXMgRXJpY3Nzb24gPGFlQG9wNS5zZT4KKwlzcGF3bj1TaW1vbiBQYXduIDxzcGF3bkBmcm9nLXBvbmQub3JnPiBBbWVyaWNhL0NoaWNhZ28KKworLS0tLS0tLS0tCisrCisnZ2l0IGN2c2ltcG9ydCcgd2lsbCBtYWtlIGl0IGFwcGVhciBhcyB0aG9zZSBhdXRob3JzIGhhZAordGhlaXIgR0lUX0FVVEhPUl9OQU1FIGFuZCBHSVRfQVVUSE9SX0VNQUlMIHNldCBwcm9wZXJseQorYWxsIGFsb25nLiAgSWYgYSB0aW1lIHpvbmUgaXMgc3BlY2lmaWVkLCBHSVRfQVVUSE9SX0RBVEUgd2lsbAoraGF2ZSB0aGUgY29ycmVzcG9uZGluZyBvZmZzZXQgYXBwbGllZC4KKysKK0ZvciBjb252ZW5pZW5jZSwgdGhpcyBkYXRhIGlzIHNhdmVkIHRvIGAkR0lUX0RJUi9jdnMtYXV0aG9yc2AKK2VhY2ggdGltZSB0aGUgJy1BJyBvcHRpb24gaXMgcHJvdmlkZWQgYW5kIHJlYWQgZnJvbSB0aGF0IHNhbWUKK2ZpbGUgZWFjaCB0aW1lICdnaXQgY3ZzaW1wb3J0JyBpcyBydW4uCisrCitJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgZmVhdHVyZSBpZiB5b3UgaW50ZW5kIHRvCitleHBvcnQgY2hhbmdlcyBiYWNrIHRvIENWUyBhZ2FpbiBsYXRlciB3aXRoCisnZ2l0IGN2c2V4cG9ydGNvbW1pdCcuCisKKy1SOjoKKwlHZW5lcmF0ZSBhIGAkR0lUX0RJUi9jdnMtcmV2aXNpb25zYCBmaWxlIGNvbnRhaW5pbmcgYSBtYXBwaW5nIGZyb20gQ1ZTCisJcmV2aXNpb24gbnVtYmVycyB0byBuZXdseS1jcmVhdGVkIEdpdCBjb21taXQgSURzLiAgVGhlIGdlbmVyYXRlZCBmaWxlCisJd2lsbCBjb250YWluIG9uZSBsaW5lIGZvciBlYWNoIChmaWxlbmFtZSwgcmV2aXNpb24pIHBhaXIgaW1wb3J0ZWQ7CisJZWFjaCBsaW5lIHdpbGwgbG9vayBsaWtlCisrCistLS0tLS0tLS0KK3NyYy93aWRnZXQuYyAxLjEgMWQ4NjJmMTczY2RjNzMyNWI2ZmE2ZDJhZTFjZmQ2MWZkMWI1MTJiNworLS0tLS0tLS0tCisrCitUaGUgcmV2aXNpb24gZGF0YSBpcyBhcHBlbmRlZCB0byB0aGUgZmlsZSBpZiBpdCBhbHJlYWR5IGV4aXN0cywgZm9yIHVzZSB3aGVuCitkb2luZyBpbmNyZW1lbnRhbCBpbXBvcnRzLgorKworVGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCBpZiB5b3UgaGF2ZSBDVlMgcmV2aXNpb24gbnVtYmVycyBzdG9yZWQgaW4gY29tbWl0CittZXNzYWdlcywgYnVnLXRyYWNraW5nIHN5c3RlbXMsIGVtYWlsIGFyY2hpdmVzLCBhbmQgdGhlIGxpa2UuCisKKy1oOjoKKwlQcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuCisKK09VVFBVVAorLS0tLS0tCitJZiAnLXYnIGlzIHNwZWNpZmllZCwgdGhlIHNjcmlwdCByZXBvcnRzIHdoYXQgaXQgaXMgZG9pbmcuCisKK090aGVyd2lzZSwgc3VjY2VzcyBpcyBpbmRpY2F0ZWQgdGhlIFVuaXggd2F5LCBpLmUuIGJ5IHNpbXBseSBleGl0aW5nIHdpdGgKK2EgemVybyBleGl0IHN0YXR1cy4KKworW1tpc3N1ZXNdXQorSVNTVUVTCistLS0tLS0KK1Byb2JsZW1zIHJlbGF0ZWQgdG8gdGltZXN0YW1wczoKKworICogSWYgdGltZXN0YW1wcyBvZiBjb21taXRzIGluIHRoZSBDVlMgcmVwb3NpdG9yeSBhcmUgbm90IHN0YWJsZSBlbm91Z2gKKyAgIHRvIGJlIHVzZWQgZm9yIG9yZGVyaW5nIGNvbW1pdHMgY2hhbmdlcyBtYXkgc2hvdyB1cCBpbiB0aGUgd3JvbmcKKyAgIG9yZGVyLgorICogSWYgYW55IGZpbGVzIHdlcmUgZXZlciAiY3ZzIGltcG9ydCJlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiwgaW1wb3J0IG9mCisgICBtb3JlIHRoYW4gb25lIHZlbmRvciByZWxlYXNlKSB0aGUgSEVBRCBjb250YWlucyB0aGUgd3JvbmcgY29udGVudC4KKyAqIElmIHRoZSB0aW1lc3RhbXAgb3JkZXIgb2YgZGlmZmVyZW50IGZpbGVzIGNyb3NzIHRoZSByZXZpc2lvbiBvcmRlcgorICAgd2l0aGluIHRoZSBjb21taXQgbWF0Y2hpbmcgdGltZSB3aW5kb3cgdGhlIG9yZGVyIG9mIGNvbW1pdHMgbWF5IGJlCisgICB3cm9uZy4KKworUHJvYmxlbXMgcmVsYXRlZCB0byBicmFuY2hlczoKKworICogQnJhbmNoZXMgb24gd2hpY2ggbm8gY29tbWl0cyBoYXZlIGJlZW4gbWFkZSBhcmUgbm90IGltcG9ydGVkLgorICogQWxsIGZpbGVzIGZyb20gdGhlIGJyYW5jaGluZyBwb2ludCBhcmUgYWRkZWQgdG8gYSBicmFuY2ggZXZlbiBpZgorICAgbmV2ZXIgYWRkZWQgaW4gQ1ZTLgorICogVGhpcyBhcHBsaWVzIHRvIGZpbGVzIGFkZGVkIHRvIHRoZSBzb3VyY2UgYnJhbmNoICphZnRlciogYSBkYXVnaHRlcgorICAgYnJhbmNoIHdhcyBjcmVhdGVkOiBpZiBwcmV2aW91c2x5IG5vIGNvbW1pdCB3YXMgbWFkZSBvbiB0aGUgZGF1Z2h0ZXIKKyAgIGJyYW5jaCB0aGV5IHdpbGwgZXJyb25lb3VzbHkgYmUgYWRkZWQgdG8gdGhlIGRhdWdodGVyIGJyYW5jaCBpbiBnaXQuCisKK1Byb2JsZW1zIHJlbGF0ZWQgdG8gdGFnczoKKworKiBNdWx0aXBsZSB0YWdzIG9uIHRoZSBzYW1lIHJldmlzaW9uIGFyZSBub3QgaW1wb3J0ZWQuCisKK0lmIHlvdSBzdXNwZWN0IHRoYXQgYW55IG9mIHRoZXNlIGlzc3VlcyBtYXkgYXBwbHkgdG8gdGhlIHJlcG9zaXRvcnkgeW91Cit3YW50IHRvIGltcG9ydCwgY29uc2lkZXIgdXNpbmcgY3ZzMmdpdDoKKworKiBjdnMyZ2l0IChwYXJ0IG9mIGN2czJzdm4pLCBgaHR0cDovL3N1YnZlcnNpb24uYXBhY2hlLm9yZy9gCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtY3Zzc2VydmVyLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI0ZDdhOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c3NlcnZlci50eHQKQEAgLTAsMCArMSw0MzMgQEAKK2dpdC1jdnNzZXJ2ZXIoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWN2c3NlcnZlciAtIEEgQ1ZTIHNlcnZlciBlbXVsYXRvciBmb3IgR2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorCitTU0g6CisKK1t2ZXJzZV0KK2V4cG9ydCBDVlNfU0VSVkVSPSJnaXQgY3Zzc2VydmVyIgorJ2N2cycgLWQgOmV4dDp1c2VyQHNlcnZlci9wYXRoL3JlcG8uZ2l0IGNvIDxIRUFEX25hbWU+CisKK3BzZXJ2ZXIgKC9ldGMvaW5ldGQuY29uZik6CisKK1t2ZXJzZV0KK2N2c3BzZXJ2ZXIgc3RyZWFtIHRjcCBub3dhaXQgbm9ib2R5IC91c3IvYmluL2dpdC1jdnNzZXJ2ZXIgZ2l0LWN2c3NlcnZlciBwc2VydmVyCisKK1VzYWdlOgorCitbdmVyc2VdCisnZ2l0LWN2c3NlcnZlcicgW29wdGlvbnNdIFtwc2VydmVyfHNlcnZlcl0gWzxkaXJlY3Rvcnk+IC4uLl0KKworT1BUSU9OUworLS0tLS0tLQorCitBbGwgdGhlc2Ugb3B0aW9ucyBvYnZpb3VzbHkgb25seSBtYWtlIHNlbnNlIGlmIGVuZm9yY2VkIGJ5IHRoZSBzZXJ2ZXIgc2lkZS4KK1RoZXkgaGF2ZSBiZWVuIGltcGxlbWVudGVkIHRvIHJlc2VtYmxlIHRoZSBsaW5rZ2l0OmdpdC1kYWVtb25bMV0gb3B0aW9ucyBhcworY2xvc2VseSBhcyBwb3NzaWJsZS4KKworLS1iYXNlLXBhdGggPHBhdGg+OjoKK1ByZXBlbmQgJ3BhdGgnIHRvIHJlcXVlc3RlZCBDVlNST09UCisKKy0tc3RyaWN0LXBhdGhzOjoKK0Rvbid0IGFsbG93IHJlY3Vyc2luZyBpbnRvIHN1YmRpcmVjdG9yaWVzCisKKy0tZXhwb3J0LWFsbDo6CitEb24ndCBjaGVjayBmb3IgYGdpdGN2cy5lbmFibGVkYCBpbiBjb25maWcuIFlvdSBhbHNvIGhhdmUgdG8gc3BlY2lmeSBhIGxpc3QKK29mIGFsbG93ZWQgZGlyZWN0b3JpZXMgKHNlZSBiZWxvdykgaWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgb3B0aW9uLgorCistVjo6CistLXZlcnNpb246OgorUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorCistaDo6CistSDo6CistLWhlbHA6OgorUHJpbnQgdXNhZ2UgaW5mb3JtYXRpb24gYW5kIGV4aXQKKworPGRpcmVjdG9yeT46OgorWW91IGNhbiBzcGVjaWZ5IGEgbGlzdCBvZiBhbGxvd2VkIGRpcmVjdG9yaWVzLiBJZiBubyBkaXJlY3RvcmllcworYXJlIGdpdmVuLCBhbGwgYXJlIGFsbG93ZWQuIFRoaXMgaXMgYW4gYWRkaXRpb25hbCByZXN0cmljdGlvbiwgZ2l0Y3ZzCithY2Nlc3Mgc3RpbGwgbmVlZHMgdG8gYmUgZW5hYmxlZCBieSB0aGUgYGdpdGN2cy5lbmFibGVkYCBjb25maWcgb3B0aW9uCit1bmxlc3MgJy0tZXhwb3J0LWFsbCcgd2FzIGdpdmVuLCB0b28uCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgYXBwbGljYXRpb24gaXMgYSBDVlMgZW11bGF0aW9uIGxheWVyIGZvciBHaXQuCisKK0l0IGlzIGhpZ2hseSBmdW5jdGlvbmFsLiBIb3dldmVyLCBub3QgYWxsIG1ldGhvZHMgYXJlIGltcGxlbWVudGVkLAorYW5kIGZvciB0aG9zZSBtZXRob2RzIHRoYXQgYXJlIGltcGxlbWVudGVkLAorbm90IGFsbCBzd2l0Y2hlcyBhcmUgaW1wbGVtZW50ZWQuCisKK1Rlc3RpbmcgaGFzIGJlZW4gZG9uZSB1c2luZyBib3RoIHRoZSBDTEkgQ1ZTIGNsaWVudCwgYW5kIHRoZSBFY2xpcHNlIENWUworcGx1Z2luLiBNb3N0IGZ1bmN0aW9uYWxpdHkgd29ya3MgZmluZSB3aXRoIGJvdGggb2YgdGhlc2UgY2xpZW50cy4KKworTElNSVRBVElPTlMKKy0tLS0tLS0tLS0tCisKK0NWUyBjbGllbnRzIGNhbm5vdCB0YWcsIGJyYW5jaCBvciBwZXJmb3JtIEdpdCBtZXJnZXMuCisKKydnaXQtY3Zzc2VydmVyJyBtYXBzIEdpdCBicmFuY2hlcyB0byBDVlMgbW9kdWxlcy4gVGhpcyBpcyB2ZXJ5IGRpZmZlcmVudAorZnJvbSB3aGF0IG1vc3QgQ1ZTIHVzZXJzIHdvdWxkIGV4cGVjdCBzaW5jZSBpbiBDVlMgbW9kdWxlcyB1c3VhbGx5IHJlcHJlc2VudAorb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMuCisKK0lOU1RBTExBVElPTgorLS0tLS0tLS0tLS0tCisKKzEuIElmIHlvdSBhcmUgZ29pbmcgdG8gb2ZmZXIgQ1ZTIGFjY2VzcyB2aWEgcHNlcnZlciwgYWRkIGEgbGluZSBpbgorICAgL2V0Yy9pbmV0ZC5jb25mIGxpa2UKKysKKy0tCistLS0tLS0KKyAgIGN2c3BzZXJ2ZXIgc3RyZWFtIHRjcCBub3dhaXQgbm9ib2R5IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlcgorCistLS0tLS0KK05vdGU6IFNvbWUgaW5ldGQgc2VydmVycyBsZXQgeW91IHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGFibGUKK2luZGVwZW5kZW50bHkgb2YgdGhlIHZhbHVlIG9mIGFyZ3ZbMF0gKGkuZS4gdGhlIG5hbWUgdGhlIHByb2dyYW0gYXNzdW1lcworaXQgd2FzIGV4ZWN1dGVkIHdpdGgpLiBJbiB0aGlzIGNhc2UgdGhlIGNvcnJlY3QgbGluZSBpbiAvZXRjL2luZXRkLmNvbmYKK2xvb2tzIGxpa2UKKworLS0tLS0tCisgICBjdnNwc2VydmVyIHN0cmVhbSB0Y3Agbm93YWl0IG5vYm9keSAvdXNyL2Jpbi9naXQtY3Zzc2VydmVyIGdpdC1jdnNzZXJ2ZXIgcHNlcnZlcgorCistLS0tLS0KKworT25seSBhbm9ueW1vdXMgYWNjZXNzIGlzIHByb3ZpZGVkIGJ5IHBzZXJ2ZSBieSBkZWZhdWx0LiBUbyBjb21taXQgeW91Cit3aWxsIGhhdmUgdG8gY3JlYXRlIHBzZXJ2ZXIgYWNjb3VudHMsIHNpbXBseSBhZGQgYSBnaXRjdnMuYXV0aGRiCitzZXR0aW5nIGluIHRoZSBjb25maWcgZmlsZSBvZiB0aGUgcmVwb3NpdG9yaWVzIHlvdSB3YW50IHRoZSBjdnNzZXJ2ZXIKK3RvIGFsbG93IHdyaXRlcyB0bywgZm9yIGV4YW1wbGU6CisKKy0tLS0tLQorCisgICBbZ2l0Y3ZzXQorCWF1dGhkYiA9IC9ldGMvY3Zzc2VydmVyL3Bhc3N3ZAorCistLS0tLS0KK1RoZSBmb3JtYXQgb2YgdGhlc2UgZmlsZXMgaXMgdXNlcm5hbWUgZm9sbG93ZWQgYnkgdGhlIGVuY3J5cHRlZCBwYXNzd29yZCwKK2ZvciBleGFtcGxlOgorCistLS0tLS0KKyAgIG15dXNlcjokMU95eDVyOW1kR1oyCisgICBteXVzZXI6JDEkQkEpQCR2Ym5NSk1EeW03dEEzMkFhbVhybS4vCistLS0tLS0KK1lvdSBjYW4gdXNlIHRoZSAnaHRwYXNzd2QnIGZhY2lsaXR5IHRoYXQgY29tZXMgd2l0aCBBcGFjaGUgdG8gbWFrZSB0aGVzZQorZmlsZXMsIGJ1dCBBcGFjaGUncyBNRDUgY3J5cHQgbWV0aG9kIGRpZmZlcnMgZnJvbSB0aGUgb25lIHVzZWQgYnkgbW9zdCBDCitsaWJyYXJ5J3MgY3J5cHQoKSBmdW5jdGlvbiwgc28gZG9uJ3QgdXNlIHRoZSAtbSBvcHRpb24uCisKK0FsdGVybmF0aXZlbHkgeW91IGNhbiBwcm9kdWNlIHRoZSBwYXNzd29yZCB3aXRoIHBlcmwncyBjcnlwdCgpIG9wZXJhdG9yOgorLS0tLS0KKyAgIHBlcmwgLWUgJ215ICgkdXNlciwgJHBhc3MpID0gQEFSR1Y7IHByaW50ZiAiJXM6JXNcbiIsICR1c2VyLCBjcnlwdCgkdXNlciwgJHBhc3MpJyAkVVNFUiBwYXNzd29yZAorLS0tLS0KKworVGhlbiBwcm92aWRlIHlvdXIgcGFzc3dvcmQgdmlhIHRoZSBwc2VydmVyIG1ldGhvZCwgZm9yIGV4YW1wbGU6CistLS0tLS0KKyAgIGN2cyAtZDpwc2VydmVyOnNvbWV1c2VyOnNvbWVwYXNzd29yZCA8YXQ+IHNlcnZlci9wYXRoL3JlcG8uZ2l0IGNvIDxIRUFEX25hbWU+CistLS0tLS0KK05vIHNwZWNpYWwgc2V0dXAgaXMgbmVlZGVkIGZvciBTU0ggYWNjZXNzLCBvdGhlciB0aGFuIGhhdmluZyBHaXQgdG9vbHMKK2luIHRoZSBQQVRILiBJZiB5b3UgaGF2ZSBjbGllbnRzIHRoYXQgZG8gbm90IGFjY2VwdCB0aGUgQ1ZTX1NFUlZFUgorZW52aXJvbm1lbnQgdmFyaWFibGUsIHlvdSBjYW4gcmVuYW1lICdnaXQtY3Zzc2VydmVyJyB0byBgY3ZzYC4KKworTm90ZTogTmV3ZXIgQ1ZTIHZlcnNpb25zICg+PSAxLjEyLjExKSBhbHNvIHN1cHBvcnQgc3BlY2lmeWluZworQ1ZTX1NFUlZFUiBkaXJlY3RseSBpbiBDVlNST09UIGxpa2UKKworLS0tLS0tCitjdnMgLWQgIjpleHQ7Q1ZTX1NFUlZFUj1naXQgY3Zzc2VydmVyOnVzZXJAc2VydmVyL3BhdGgvcmVwby5naXQiIGNvIDxIRUFEX25hbWU+CistLS0tLS0KK1RoaXMgaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCBpdCB3aWxsIGJlIHNhdmVkIGluIHlvdXIgJ0NWUy9Sb290JyBmaWxlcyBhbmQKK3lvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGFsd2F5cyBzZXR0aW5nIHRoZSBjb3JyZWN0IGVudmlyb25tZW50Cit2YXJpYWJsZS4gIFNTSCB1c2VycyByZXN0cmljdGVkIHRvICdnaXQtc2hlbGwnIGRvbid0IG5lZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKK3dpdGggQ1ZTX1NFUlZFUiAoYW5kIHNob3VsZG4ndCkgYXMgJ2dpdC1zaGVsbCcgdW5kZXJzdGFuZHMgYGN2c2AgdG8gbWVhbgorJ2dpdC1jdnNzZXJ2ZXInIGFuZCBwcmV0ZW5kcyB0aGF0IHRoZSBvdGhlciBlbmQgcnVucyB0aGUgcmVhbCAnY3ZzJyBiZXR0ZXIuCistLQorMi4gRm9yIGVhY2ggcmVwbyB0aGF0IHlvdSB3YW50IGFjY2Vzc2libGUgZnJvbSBDVlMgeW91IG5lZWQgdG8gZWRpdCBjb25maWcgaW4KKyAgIHRoZSByZXBvIGFuZCBhZGQgdGhlIGZvbGxvd2luZyBzZWN0aW9uLgorKworLS0KKy0tLS0tLQorICAgW2dpdGN2c10KKyAgICAgICAgZW5hYmxlZD0xCisgICAgICAgICMgb3B0aW9uYWwgZm9yIGRlYnVnZ2luZworCWxvZ0ZpbGU9L3BhdGgvdG8vbG9nZmlsZQorCistLS0tLS0KK05vdGU6IHlvdSBuZWVkIHRvIGVuc3VyZSBlYWNoIHVzZXIgdGhhdCBpcyBnb2luZyB0byBpbnZva2UgJ2dpdC1jdnNzZXJ2ZXInIGhhcword3JpdGUgYWNjZXNzIHRvIHRoZSBsb2cgZmlsZSBhbmQgdG8gdGhlIGRhdGFiYXNlIChzZWUKKzw8ZGJiYWNrZW5kLERhdGFiYXNlIEJhY2tlbmQ+Pi4gSWYgeW91IHdhbnQgdG8gb2ZmZXIgd3JpdGUgYWNjZXNzIG92ZXIKK1NTSCwgdGhlIHVzZXJzIG9mIGNvdXJzZSBhbHNvIG5lZWQgd3JpdGUgYWNjZXNzIHRvIHRoZSBHaXQgcmVwb3NpdG9yeSBpdHNlbGYuCisKK1lvdSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgZWFjaCByZXBvc2l0b3J5IGlzICJiYXJlIiAod2l0aG91dCBhIEdpdCBpbmRleAorZmlsZSkgZm9yIGBjdnMgY29tbWl0YCB0byB3b3JrLiBTZWUgbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLgorCitbW2NvbmZpZ2FjY2Vzc21ldGhvZF1dCitBbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgY2FuIGFsc28gYmUgb3ZlcnJpZGRlbiBmb3IgYSBzcGVjaWZpYyBtZXRob2Qgb2YKK2FjY2Vzcy4gVmFsaWQgbWV0aG9kIG5hbWVzIGFyZSAiZXh0IiAoZm9yIFNTSCBhY2Nlc3MpIGFuZCAicHNlcnZlciIuIFRoZQorZm9sbG93aW5nIGV4YW1wbGUgY29uZmlndXJhdGlvbiB3b3VsZCBkaXNhYmxlIHBzZXJ2ZXIgYWNjZXNzIHdoaWxlIHN0aWxsCithbGxvd2luZyBhY2Nlc3Mgb3ZlciBTU0guCistLS0tLS0KKyAgIFtnaXRjdnNdCisgICAgICAgIGVuYWJsZWQ9MAorCisgICBbZ2l0Y3ZzICJleHQiXQorICAgICAgICBlbmFibGVkPTEKKy0tLS0tLQorLS0KKzMuIElmIHlvdSBkaWRuJ3Qgc3BlY2lmeSB0aGUgQ1ZTUk9PVC9DVlNfU0VSVkVSIGRpcmVjdGx5IGluIHRoZSBjaGVja291dCBjb21tYW5kLAorICAgYXV0b21hdGljYWxseSBzYXZpbmcgaXQgaW4geW91ciAnQ1ZTL1Jvb3QnIGZpbGVzLCB0aGVuIHlvdSBuZWVkIHRvIHNldCB0aGVtCisgICBleHBsaWNpdGx5IGluIHlvdXIgZW52aXJvbm1lbnQuICBDVlNST09UIHNob3VsZCBiZSBzZXQgYXMgcGVyIG5vcm1hbCwgYnV0IHRoZQorICAgZGlyZWN0b3J5IHNob3VsZCBwb2ludCBhdCB0aGUgYXBwcm9wcmlhdGUgR2l0IHJlcG8uICBBcyBhYm92ZSwgZm9yIFNTSCBjbGllbnRzCisgICBfbm90XyByZXN0cmljdGVkIHRvICdnaXQtc2hlbGwnLCBDVlNfU0VSVkVSIHNob3VsZCBiZSBzZXQgdG8gJ2dpdC1jdnNzZXJ2ZXInLgorKworLS0KKy0tLS0tLQorICAgICBleHBvcnQgQ1ZTUk9PVD06ZXh0OnVzZXJAc2VydmVyOi92YXIvZ2l0L3Byb2plY3QuZ2l0CisgICAgIGV4cG9ydCBDVlNfU0VSVkVSPSJnaXQgY3Zzc2VydmVyIgorLS0tLS0tCistLQorNC4gRm9yIFNTSCBjbGllbnRzIHRoYXQgd2lsbCBtYWtlIGNvbW1pdHMsIG1ha2Ugc3VyZSB0aGVpciBzZXJ2ZXItc2lkZQorICAgLnNzaC9lbnZpcm9ubWVudCBmaWxlcyAob3IgLmJhc2hyYywgZXRjLiwgYWNjb3JkaW5nIHRvIHRoZWlyIHNwZWNpZmljIHNoZWxsKQorICAgZXhwb3J0IGFwcHJvcHJpYXRlIHZhbHVlcyBmb3IgR0lUX0FVVEhPUl9OQU1FLCBHSVRfQVVUSE9SX0VNQUlMLAorICAgR0lUX0NPTU1JVFRFUl9OQU1FLCBhbmQgR0lUX0NPTU1JVFRFUl9FTUFJTC4gIEZvciBTU0ggY2xpZW50cyB3aG9zZSBsb2dpbgorICAgc2hlbGwgaXMgYmFzaCwgLmJhc2hyYyBtYXkgYmUgYSByZWFzb25hYmxlIGFsdGVybmF0aXZlLgorCis1LiBDbGllbnRzIHNob3VsZCBub3cgYmUgYWJsZSB0byBjaGVjayBvdXQgdGhlIHByb2plY3QuIFVzZSB0aGUgQ1ZTICdtb2R1bGUnCisgICBuYW1lIHRvIGluZGljYXRlIHdoYXQgR2l0ICdoZWFkJyB5b3Ugd2FudCB0byBjaGVjayBvdXQuICBUaGlzIGFsc28gc2V0cyB0aGUKKyAgIG5hbWUgb2YgeW91ciBuZXdseSBjaGVja2VkLW91dCBkaXJlY3RvcnksIHVubGVzcyB5b3UgdGVsbCBpdCBvdGhlcndpc2Ugd2l0aAorICAgYC1kIDxkaXJfbmFtZT5gLiAgRm9yIGV4YW1wbGUsIHRoaXMgY2hlY2tzIG91dCAnbWFzdGVyJyBicmFuY2ggdG8gdGhlCisgICBgcHJvamVjdC1tYXN0ZXJgIGRpcmVjdG9yeToKKysKKy0tLS0tLQorICAgICBjdnMgY28gLWQgcHJvamVjdC1tYXN0ZXIgbWFzdGVyCistLS0tLS0KKworW1tkYmJhY2tlbmRdXQorRGF0YWJhc2UgQmFja2VuZAorLS0tLS0tLS0tLS0tLS0tLQorCisnZ2l0LWN2c3NlcnZlcicgdXNlcyBvbmUgZGF0YWJhc2UgcGVyIEdpdCBoZWFkIChpLmUuIENWUyBtb2R1bGUpIHRvCitzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVwb3NpdG9yeSB0byBtYWludGFpbiBjb25zaXN0ZW50CitDVlMgcmV2aXNpb24gbnVtYmVycy4gVGhlIGRhdGFiYXNlIG5lZWRzIHRvIGJlCit1cGRhdGVkIChpLmUuIHdyaXR0ZW4gdG8pIGFmdGVyIGV2ZXJ5IGNvbW1pdC4KKworSWYgdGhlIGNvbW1pdCBpcyBkb25lIGRpcmVjdGx5IGJ5IHVzaW5nIGBnaXRgIChhcyBvcHBvc2VkIHRvCit1c2luZyAnZ2l0LWN2c3NlcnZlcicpIHRoZSB1cGRhdGUgd2lsbCBuZWVkIHRvIGhhcHBlbiBvbiB0aGUKK25leHQgcmVwb3NpdG9yeSBhY2Nlc3MgYnkgJ2dpdC1jdnNzZXJ2ZXInLCBpbmRlcGVuZGVudCBvZgorYWNjZXNzIG1ldGhvZCBhbmQgcmVxdWVzdGVkIG9wZXJhdGlvbi4KKworVGhhdCBtZWFucyB0aGF0IGV2ZW4gaWYgeW91IG9mZmVyIG9ubHkgcmVhZCBhY2Nlc3MgKGUuZy4gYnkgdXNpbmcKK3RoZSBwc2VydmVyIG1ldGhvZCksICdnaXQtY3Zzc2VydmVyJyBzaG91bGQgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8KK3RoZSBkYXRhYmFzZSB0byB3b3JrIHJlbGlhYmx5IChvdGhlcndpc2UgeW91IG5lZWQgdG8gbWFrZSBzdXJlCit0aGF0IHRoZSBkYXRhYmFzZSBpcyB1cC10by1kYXRlIGFueSB0aW1lICdnaXQtY3Zzc2VydmVyJyBpcyBleGVjdXRlZCkuCisKK0J5IGRlZmF1bHQgaXQgdXNlcyBTUUxpdGUgZGF0YWJhc2VzIGluIHRoZSBHaXQgZGlyZWN0b3J5LCBuYW1lZAorYGdpdGN2cy48bW9kdWxlX25hbWU+LnNxbGl0ZWAuIE5vdGUgdGhhdCB0aGUgU1FMaXRlIGJhY2tlbmQgY3JlYXRlcwordGVtcG9yYXJ5IGZpbGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgZGF0YWJhc2UgZmlsZSBvbgord3JpdGUgc28gaXQgbWlnaHQgbm90IGJlIGVub3VnaCB0byBncmFudCB0aGUgdXNlcnMgdXNpbmcKKydnaXQtY3Zzc2VydmVyJyB3cml0ZSBhY2Nlc3MgdG8gdGhlIGRhdGFiYXNlIGZpbGUgd2l0aG91dCBncmFudGluZwordGhlbSB3cml0ZSBhY2Nlc3MgdG8gdGhlIGRpcmVjdG9yeSwgdG9vLgorCitUaGUgZGF0YWJhc2UgY2FuIG5vdCBiZSByZWxpYWJseSByZWdlbmVyYXRlZCBpbiBhCitjb25zaXN0ZW50IGZvcm0gYWZ0ZXIgdGhlIGJyYW5jaCBpdCBpcyB0cmFja2luZyBoYXMgY2hhbmdlZC4KK0V4YW1wbGU6IEZvciBtZXJnZWQgYnJhbmNoZXMsICdnaXQtY3Zzc2VydmVyJyBvbmx5IHRyYWNrcworb25lIGJyYW5jaCBvZiBkZXZlbG9wbWVudCwgYW5kIGFmdGVyIGEgJ2dpdCBtZXJnZScgYW4KK2luY3JlbWVudGFsbHkgdXBkYXRlZCBkYXRhYmFzZSBtYXkgdHJhY2sgYSBkaWZmZXJlbnQgYnJhbmNoCit0aGFuIGEgZGF0YWJhc2UgcmVnZW5lcmF0ZWQgZnJvbSBzY3JhdGNoLCBjYXVzaW5nIGluY29uc2lzdGVudAorQ1ZTIHJldmlzaW9uIG51bWJlcnMuIGBnaXQtY3Zzc2VydmVyYCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgd2hpY2gKK2JyYW5jaCBpdCB3b3VsZCBoYXZlIHBpY2tlZCBpZiBpdCBoYWQgYmVlbiBydW4gaW5jcmVtZW50YWxseQorcHJlLW1lcmdlLiBTbyBpZiB5b3UgaGF2ZSB0byBmdWxseSBvciBwYXJ0aWFsbHkgKGZyb20gb2xkCitiYWNrdXApIHJlZ2VuZXJhdGUgdGhlIGRhdGFiYXNlLCB5b3Ugc2hvdWxkIGJlIHN1c3BpY2lvdXMKK29mIHByZS1leGlzdGluZyBDVlMgc2FuZGJveGVzLgorCitZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgZGF0YWJhc2UgYmFja2VuZCB3aXRoIHRoZSBmb2xsb3dpbmcKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGVzOgorCitDb25maWd1cmluZyBkYXRhYmFzZSBiYWNrZW5kCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKydnaXQtY3Zzc2VydmVyJyB1c2VzIHRoZSBQZXJsIERCSSBtb2R1bGUuIFBsZWFzZSBhbHNvIHJlYWQKK2l0cyBkb2N1bWVudGF0aW9uIGlmIGNoYW5naW5nIHRoZXNlIHZhcmlhYmxlcywgZXNwZWNpYWxseQorYWJvdXQgYERCSS0+Y29ubmVjdCgpYC4KKworZ2l0Y3ZzLmRiTmFtZTo6CisJRGF0YWJhc2UgbmFtZS4gVGhlIGV4YWN0IG1lYW5pbmcgZGVwZW5kcyBvbiB0aGUKKwlzZWxlY3RlZCBkYXRhYmFzZSBkcml2ZXIsIGZvciBTUUxpdGUgdGhpcyBpcyBhIGZpbGVuYW1lLgorCVN1cHBvcnRzIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiAoc2VlIGJlbG93KS4gTWF5CisJbm90IGNvbnRhaW4gc2VtaWNvbG9ucyAoYDtgKS4KKwlEZWZhdWx0OiAnJUdnaXRjdnMuJW0uc3FsaXRlJworCitnaXRjdnMuZGJEcml2ZXI6OgorCVVzZWQgREJJIGRyaXZlci4gWW91IGNhbiBzcGVjaWZ5IGFueSBhdmFpbGFibGUgZHJpdmVyCisJZm9yIHRoaXMgaGVyZSwgYnV0IGl0IG1pZ2h0IG5vdCB3b3JrLiBjdnNzZXJ2ZXIgaXMgdGVzdGVkCisJd2l0aCAnREJEOjpTUUxpdGUnLCByZXBvcnRlZCB0byB3b3JrIHdpdGgKKwknREJEOjpQZycsIGFuZCByZXBvcnRlZCAqbm90KiB0byB3b3JrIHdpdGggJ0RCRDo6bXlzcWwnLgorCVBsZWFzZSByZWdhcmQgdGhpcyBhcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS4gTWF5IG5vdAorCWNvbnRhaW4gY29sb25zIChgOmApLgorCURlZmF1bHQ6ICdTUUxpdGUnCisKK2dpdGN2cy5kYnVzZXI6OgorCURhdGFiYXNlIHVzZXIuIE9ubHkgdXNlZnVsIGlmIHNldHRpbmcgYGRiRHJpdmVyYCwgc2luY2UKKwlTUUxpdGUgaGFzIG5vIGNvbmNlcHQgb2YgZGF0YWJhc2UgdXNlcnMuIFN1cHBvcnRzIHZhcmlhYmxlCisJc3Vic3RpdHV0aW9uIChzZWUgYmVsb3cpLgorCitnaXRjdnMuZGJQYXNzOjoKKwlEYXRhYmFzZSBwYXNzd29yZC4gIE9ubHkgdXNlZnVsIGlmIHNldHRpbmcgYGRiRHJpdmVyYCwgc2luY2UKKwlTUUxpdGUgaGFzIG5vIGNvbmNlcHQgb2YgZGF0YWJhc2UgcGFzc3dvcmRzLgorCitnaXRjdnMuZGJUYWJsZU5hbWVQcmVmaXg6OgorCURhdGFiYXNlIHRhYmxlIG5hbWUgcHJlZml4LiAgU3VwcG9ydHMgdmFyaWFibGUgc3Vic3RpdHV0aW9uCisJKHNlZSBiZWxvdykuICBBbnkgbm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyB3aWxsIGJlIHJlcGxhY2VkCisJd2l0aCB1bmRlcnNjb3Jlcy4KKworQWxsIHZhcmlhYmxlcyBjYW4gYWxzbyBiZSBzZXQgcGVyIGFjY2VzcyBtZXRob2QsIHNlZSA8PGNvbmZpZ2FjY2Vzc21ldGhvZCxhYm92ZT4+LgorCitWYXJpYWJsZSBzdWJzdGl0dXRpb24KK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorSW4gYGRiRHJpdmVyYCBhbmQgYGRiVXNlcmAgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisKKyVHOjoKKwlHaXQgZGlyZWN0b3J5IG5hbWUKKyVnOjoKKwlHaXQgZGlyZWN0b3J5IG5hbWUsIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCBmb3IKKwlhbHBoYS1udW1lcmljIG9uZXMsIGAuYCwgYW5kIGAtYCBhcmUgcmVwbGFjZWQgd2l0aAorCWBfYCAodGhpcyBzaG91bGQgbWFrZSBpdCBlYXNpZXIgdG8gdXNlIHRoZSBkaXJlY3RvcnkKKwluYW1lIGluIGEgZmlsZW5hbWUgaWYgd2FudGVkKQorJW06OgorCUNWUyBtb2R1bGUvR2l0IGhlYWQgbmFtZQorJWE6OgorCWFjY2VzcyBtZXRob2QgKG9uZSBvZiAiZXh0IiBvciAicHNlcnZlciIpCisldTo6CisJTmFtZSBvZiB0aGUgdXNlciBydW5uaW5nICdnaXQtY3Zzc2VydmVyJy4KKwlJZiBubyBuYW1lIGNhbiBiZSBkZXRlcm1pbmVkLCB0aGUKKwludW1lcmljIHVpZCBpcyB1c2VkLgorCitFTlZJUk9OTUVOVAorLS0tLS0tLS0tLS0KKworVGhlc2UgdmFyaWFibGVzIG9idmlhdGUgdGhlIG5lZWQgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zIGluIHNvbWUKK2NpcmN1bXN0YW5jZXMsIGFsbG93aW5nIGVhc2llciByZXN0cmljdGVkIHVzYWdlIHRocm91Z2ggZ2l0LXNoZWxsLgorCitHSVRfQ1ZTU0VSVkVSX0JBU0VfUEFUSCB0YWtlcyB0aGUgcGxhY2Ugb2YgdGhlIGFyZ3VtZW50IHRvIC0tYmFzZS1wYXRoLgorCitHSVRfQ1ZTU0VSVkVSX1JPT1Qgc3BlY2lmaWVzIGEgc2luZ2xlLWRpcmVjdG9yeSB3aGl0ZWxpc3QuIFRoZQorcmVwb3NpdG9yeSBtdXN0IHN0aWxsIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgYWNjZXNzIHRocm91Z2gKK2dpdC1jdnNzZXJ2ZXIsIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworV2hlbiB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHNldCwgdGhlIGNvcnJlc3BvbmRpbmcKK2NvbW1hbmQtbGluZSBhcmd1bWVudHMgbWF5IG5vdCBiZSB1c2VkLgorCitFY2xpcHNlIENWUyBDbGllbnQgTm90ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBnZXQgYSBjaGVja291dCB3aXRoIHRoZSBFY2xpcHNlIENWUyBjbGllbnQ6CisKKzEuIFNlbGVjdCAiQ3JlYXRlIGEgbmV3IHByb2plY3QgLT4gRnJvbSBDVlMgY2hlY2tvdXQiCisyLiBDcmVhdGUgYSBuZXcgbG9jYXRpb24uIFNlZSB0aGUgbm90ZXMgYmVsb3cgZm9yIGRldGFpbHMgb24gaG93IHRvIGNob29zZSB0aGUKKyAgIHJpZ2h0IHByb3RvY29sLgorMy4gQnJvd3NlIHRoZSAnbW9kdWxlcycgYXZhaWxhYmxlLiBJdCB3aWxsIGdpdmUgeW91IGEgbGlzdCBvZiB0aGUgaGVhZHMgaW4KKyAgIHRoZSByZXBvc2l0b3J5LiBZb3Ugd2lsbCBub3QgYmUgYWJsZSB0byBicm93c2UgdGhlIHRyZWUgZnJvbSB0aGVyZS4gT25seQorICAgdGhlIGhlYWRzLgorNC4gUGljayAnSEVBRCcgd2hlbiBpdCBhc2tzIHdoYXQgYnJhbmNoL3RhZyB0byBjaGVjayBvdXQuIFVudGljayB0aGUKKyAgICJsYXVuY2ggY29tbWl0IHdpemFyZCIgdG8gYXZvaWQgY29tbWl0dGluZyB0aGUgLnByb2plY3QgZmlsZS4KKworUHJvdG9jb2wgbm90ZXM6IElmIHlvdSBhcmUgdXNpbmcgYW5vbnltb3VzIGFjY2VzcyB2aWEgcHNlcnZlciwganVzdCBzZWxlY3QgdGhhdC4KK1Rob3NlIHVzaW5nIFNTSCBhY2Nlc3Mgc2hvdWxkIGNob29zZSB0aGUgJ2V4dCcgcHJvdG9jb2wsIGFuZCBjb25maWd1cmUgJ2V4dCcKK2FjY2VzcyBvbiB0aGUgUHJlZmVyZW5jZXMtPlRlYW0tPkNWUy0+RXh0Q29ubmVjdGlvbiBwYW5lLiBTZXQgQ1ZTX1NFUlZFUiB0bworImBnaXQgY3Zzc2VydmVyYCIuIE5vdGUgdGhhdCBwYXNzd29yZCBzdXBwb3J0IGlzIG5vdCBnb29kIHdoZW4gdXNpbmcgJ2V4dCcsCit5b3Ugd2lsbCBkZWZpbml0ZWx5IHdhbnQgdG8gaGF2ZSBTU0gga2V5cyBzZXR1cC4KKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBqdXN0IHVzZSB0aGUgbm9uLXN0YW5kYXJkIGV4dHNzaCBwcm90b2NvbCB0aGF0IEVjbGlwc2UKK29mZmVyLiBJbiB0aGF0IGNhc2UgQ1ZTX1NFUlZFUiBpcyBpZ25vcmVkLCBhbmQgeW91IHdpbGwgaGF2ZSB0byByZXBsYWNlCit0aGUgY3ZzIHV0aWxpdHkgb24gdGhlIHNlcnZlciB3aXRoICdnaXQtY3Zzc2VydmVyJyBvciBtYW5pcHVsYXRlIHlvdXIgYC5iYXNocmNgCitzbyB0aGF0IGNhbGxpbmcgJ2N2cycgZWZmZWN0aXZlbHkgY2FsbHMgJ2dpdC1jdnNzZXJ2ZXInLgorCitDbGllbnRzIGtub3duIHRvIHdvcmsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIENWUyAxLjEyLjkgb24gRGViaWFuCistIENWUyAxLjExLjE3IG9uIE1hY09TWCAoZnJvbSBGaW5rIHBhY2thZ2UpCistIEVjbGlwc2UgMy4wLCAzLjEuMiBvbiBNYWNPU1ggKHNlZSBFY2xpcHNlIENWUyBDbGllbnQgTm90ZXMpCistIFRvcnRvaXNlQ1ZTCisKK09wZXJhdGlvbnMgc3VwcG9ydGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgdGhlIG9wZXJhdGlvbnMgcmVxdWlyZWQgZm9yIG5vcm1hbCB1c2UgYXJlIHN1cHBvcnRlZCwgaW5jbHVkaW5nCitjaGVja291dCwgZGlmZiwgc3RhdHVzLCB1cGRhdGUsIGxvZywgYWRkLCByZW1vdmUsIGNvbW1pdC4KKworTW9zdCBDVlMgY29tbWFuZCBhcmd1bWVudHMgdGhhdCByZWFkIENWUyB0YWdzIG9yIHJldmlzaW9uIG51bWJlcnMKKyh0eXBpY2FsbHkgLXIpIHdvcmssIGFuZCBhbHNvIHN1cHBvcnQgYW55IGdpdCByZWZzcGVjCisodGFnLCBicmFuY2gsIGNvbW1pdCBJRCwgZXRjKS4KK0hvd2V2ZXIsIENWUyByZXZpc2lvbiBudW1iZXJzIGZvciBub24tZGVmYXVsdCBicmFuY2hlcyBhcmUgbm90IHdlbGwKK2VtdWxhdGVkLCBhbmQgY3ZzIGxvZyBkb2VzIG5vdCBzaG93IHRhZ3Mgb3IgYnJhbmNoZXMgYXQKK2FsbC4gIChOb24tbWFpbi1icmFuY2ggQ1ZTIHJldmlzaW9uIG51bWJlcnMgc3VwZXJmaWNpYWxseSByZXNlbWJsZSBDVlMKK3JldmlzaW9uIG51bWJlcnMsIGJ1dCB0aGV5IGFjdHVhbGx5IGVuY29kZSBhIGdpdCBjb21taXQgSUQgZGlyZWN0bHksCityYXRoZXIgdGhhbiByZXByZXNlbnQgdGhlIG51bWJlciBvZiByZXZpc2lvbnMgc2luY2UgdGhlIGJyYW5jaCBwb2ludC4pCisKK05vdGUgdGhhdCB0aGVyZSBhcmUgdHdvIHdheXMgdG8gY2hlY2tvdXQgYSBwYXJ0aWN1bGFyIGJyYW5jaC4KK0FzIGRlc2NyaWJlZCBlbHNld2hlcmUgb24gdGhpcyBwYWdlLCB0aGUgIm1vZHVsZSIgcGFyYW1ldGVyCitvZiBjdnMgY2hlY2tvdXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBicmFuY2ggbmFtZSwgYW5kIGl0IGJlY29tZXMKK3RoZSBtYWluIGJyYW5jaC4gIEl0IHJlbWFpbnMgdGhlIG1haW4gYnJhbmNoIGZvciBhIGdpdmVuIHNhbmRib3gKK2V2ZW4gaWYgeW91IHRlbXBvcmFyaWx5IG1ha2UgYW5vdGhlciBicmFuY2ggc3RpY2t5IHdpdGgKK2N2cyB1cGRhdGUgLXIuICBBbHRlcm5hdGl2ZWx5LCB0aGUgLXIgYXJndW1lbnQgY2FuIGluZGljYXRlCitzb21lIG90aGVyIGJyYW5jaCB0byBhY3R1YWxseSBjaGVja291dCwgZXZlbiB0aG91Z2ggdGhlIG1vZHVsZQoraXMgc3RpbGwgdGhlICJtYWluIiBicmFuY2guICBUcmFkZW9mZnMgKGFzIGN1cnJlbnRseQoraW1wbGVtZW50ZWQpOiBFYWNoIG5ldyAibW9kdWxlIiBjcmVhdGVzIGEgbmV3IGRhdGFiYXNlIG9uIGRpc2sgd2l0aAorYSBoaXN0b3J5IGZvciB0aGUgZ2l2ZW4gbW9kdWxlLCBhbmQgYWZ0ZXIgdGhlIGRhdGFiYXNlIGlzIGNyZWF0ZWQsCitvcGVyYXRpb25zIGFnYWluc3QgdGhhdCBtYWluIGJyYW5jaCBhcmUgZmFzdC4gIE9yIGFsdGVybmF0aXZlbHksCistciBkb2Vzbid0IHRha2UgYW55IGV4dHJhIGRpc2sgc3BhY2UsIGJ1dCBtYXkgYmUgc2lnbmlmaWNhbnRseSBzbG93ZXIgZm9yCittYW55IG9wZXJhdGlvbnMsIGxpa2UgY3ZzIHVwZGF0ZS4KKworSWYgeW91IHdhbnQgdG8gcmVmZXIgdG8gYSBnaXQgcmVmc3BlYyB0aGF0IGhhcyBjaGFyYWN0ZXJzIHRoYXQgYXJlCitub3QgYWxsb3dlZCBieSBDVlMsIHlvdSBoYXZlIHR3byBvcHRpb25zLiAgRmlyc3QsIGl0IG1heSBqdXN0IHdvcmsKK3RvIHN1cHBseSB0aGUgZ2l0IHJlZnNwZWMgZGlyZWN0bHkgdG8gdGhlIGFwcHJvcHJpYXRlIENWUyAtciBhcmd1bWVudDsKK3NvbWUgQ1ZTIGNsaWVudHMgZG9uJ3Qgc2VlbSB0byBkbyBtdWNoIHNhbml0eSBjaGVja2luZyBvZiB0aGUgYXJndW1lbnQuCitTZWNvbmQsIGlmIHRoYXQgZmFpbHMsIHlvdSBjYW4gdXNlIGEgc3BlY2lhbCBjaGFyYWN0ZXIgZXNjYXBlIG1lY2hhbmlzbQordGhhdCBvbmx5IHVzZXMgY2hhcmFjdGVycyB0aGF0IGFyZSB2YWxpZCBpbiBDVlMgdGFncy4gIEEgc2VxdWVuY2UKK29mIDQgb3IgNSBjaGFyYWN0ZXJzIG9mIHRoZSBmb3JtICh1bmRlcnNjb3JlIChgIl8iYCksIGRhc2ggKGAiLSJgKSwKK29uZSBvciB0d28gY2hhcmFjdGVycywgYW5kIGRhc2ggKGAiLSJgKSkgY2FuIGVuY29kZSB2YXJpb3VzIGNoYXJhY3RlcnMgYmFzZWQKK29uIHRoZSBvbmUgb3IgdHdvIGxldHRlcnM6IGAicyJgIGZvciBzbGFzaCAoYCIvImApLCBgInAiYCBmb3IKK3BlcmlvZCAoYCIuImApLCBgInUiYCBmb3IgdW5kZXJzY29yZSAoYCJfImApLCBvciB0d28gaGV4YWRlY2ltYWwgZGlnaXRzCitmb3IgYW55IGJ5dGUgdmFsdWUgYXQgYWxsICh0eXBpY2FsbHkgYW4gQVNDSUkgbnVtYmVyLCBvciBwZXJoYXBzIGEgcGFydAorb2YgYSBVVEYtOCBlbmNvZGVkIGNoYXJhY3RlcikuCisKK0xlZ2FjeSBtb25pdG9yaW5nIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgKGVkaXQsIHdhdGNoIGFuZCByZWxhdGVkKS4KK0V4cG9ydHMgYW5kIHRhZ2dpbmcgKHRhZ3MgYW5kIGJyYW5jaGVzKSBhcmUgbm90IHN1cHBvcnRlZCBhdCB0aGlzIHN0YWdlLgorCitDUkxGIExpbmUgRW5kaW5nIENvbnZlcnNpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0J5IGRlZmF1bHQgdGhlIHNlcnZlciBsZWF2ZXMgdGhlICctaycgbW9kZSBibGFuayBmb3IgYWxsIGZpbGVzLAord2hpY2ggY2F1c2VzIHRoZSBDVlMgY2xpZW50IHRvIHRyZWF0IHRoZW0gYXMgYSB0ZXh0IGZpbGVzLCBzdWJqZWN0Cit0byBlbmQtb2YtbGluZSBjb252ZXJzaW9uIG9uIHNvbWUgcGxhdGZvcm1zLgorCitZb3UgY2FuIG1ha2UgdGhlIHNlcnZlciB1c2UgdGhlIGVuZC1vZi1saW5lIGNvbnZlcnNpb24gYXR0cmlidXRlcyB0bworc2V0IHRoZSAnLWsnIG1vZGVzIGZvciBmaWxlcyBieSBzZXR0aW5nIHRoZSBgZ2l0Y3ZzLnVzZWNybGZhdHRyYAorY29uZmlnIHZhcmlhYmxlLiAgU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorYWJvdXQgZW5kLW9mLWxpbmUgY29udmVyc2lvbi4KKworQWx0ZXJuYXRpdmVseSwgaWYgYGdpdGN2cy51c2VjcmxmYXR0cmAgY29uZmlnIGlzIG5vdCBlbmFibGVkCitvciB0aGUgYXR0cmlidXRlcyBkbyBub3QgYWxsb3cgYXV0b21hdGljIGRldGVjdGlvbiBmb3IgYSBmaWxlbmFtZSwgdGhlbgordGhlIHNlcnZlciB1c2VzIHRoZSBgZ2l0Y3ZzLmFsbEJpbmFyeWAgY29uZmlnIGZvciB0aGUgZGVmYXVsdCBzZXR0aW5nLgorSWYgYGdpdGN2cy5hbGxCaW5hcnlgIGlzIHNldCwgdGhlbiBmaWxlIG5vdCBvdGhlcndpc2UKK3NwZWNpZmllZCB3aWxsIGRlZmF1bHQgdG8gJy1rYicgbW9kZS4gT3RoZXJ3aXNlIHRoZSAnLWsnIG1vZGUKK2lzIGxlZnQgYmxhbmsuIEJ1dCBpZiBgZ2l0Y3ZzLmFsbEJpbmFyeWAgaXMgc2V0IHRvICJndWVzcyIsIHRoZW4KK3RoZSBjb3JyZWN0ICctaycgbW9kZSB3aWxsIGJlIGd1ZXNzZWQgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mCit0aGUgZmlsZS4KKworRm9yIGJlc3QgY29uc2lzdGVuY3kgd2l0aCAnY3ZzJywgaXQgaXMgcHJvYmFibHkgYmVzdCB0byBvdmVycmlkZSB0aGUKK2RlZmF1bHRzIGJ5IHNldHRpbmcgYGdpdGN2cy51c2VjcmxmYXR0cmAgdG8gdHJ1ZSwKK2FuZCBgZ2l0Y3ZzLmFsbEJpbmFyeWAgdG8gImd1ZXNzIi4KKworRGVwZW5kZW5jaWVzCistLS0tLS0tLS0tLS0KKydnaXQtY3Zzc2VydmVyJyBkZXBlbmRzIG9uIERCRDo6U1FMaXRlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWRhZW1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OWIzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kYWVtb24udHh0CkBAIC0wLDAgKzEsMzE4IEBACitnaXQtZGFlbW9uKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kYWVtb24gLSBBIHJlYWxseSBzaW1wbGUgc2VydmVyIGZvciBHaXQgcmVwb3NpdG9yaWVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBkYWVtb24nIFstLXZlcmJvc2VdIFstLXN5c2xvZ10gWy0tZXhwb3J0LWFsbF0KKwkgICAgIFstLXRpbWVvdXQ9PG4+XSBbLS1pbml0LXRpbWVvdXQ9PG4+XSBbLS1tYXgtY29ubmVjdGlvbnM9PG4+XQorCSAgICAgWy0tc3RyaWN0LXBhdGhzXSBbLS1iYXNlLXBhdGg9PHBhdGg+XSBbLS1iYXNlLXBhdGgtcmVsYXhlZF0KKwkgICAgIFstLXVzZXItcGF0aCB8IC0tdXNlci1wYXRoPTxwYXRoPl0KKwkgICAgIFstLWludGVycG9sYXRlZC1wYXRoPTxwYXRodGVtcGxhdGU+XQorCSAgICAgWy0tcmV1c2VhZGRyXSBbLS1kZXRhY2hdIFstLXBpZC1maWxlPTxmaWxlPl0KKwkgICAgIFstLWVuYWJsZT08c2VydmljZT5dIFstLWRpc2FibGU9PHNlcnZpY2U+XQorCSAgICAgWy0tYWxsb3ctb3ZlcnJpZGU9PHNlcnZpY2U+XSBbLS1mb3JiaWQtb3ZlcnJpZGU9PHNlcnZpY2U+XQorCSAgICAgWy0tYWNjZXNzLWhvb2s9PHBhdGg+XSBbLS1bbm8tXWluZm9ybWF0aXZlLWVycm9yc10KKwkgICAgIFstLWluZXRkIHwKKwkgICAgICBbLS1saXN0ZW49PGhvc3Rfb3JfaXBhZGRyPl0gWy0tcG9ydD08bj5dCisJICAgICAgWy0tdXNlcj08dXNlcj4gWy0tZ3JvdXA9PGdyb3VwPl1dXQorCSAgICAgWzxkaXJlY3Rvcnk+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0EgcmVhbGx5IHNpbXBsZSBUQ1AgR2l0IGRhZW1vbiB0aGF0IG5vcm1hbGx5IGxpc3RlbnMgb24gcG9ydCAiREVGQVVMVF9HSVRfUE9SVCIKK2FrYSA5NDE4LiAgSXQgd2FpdHMgZm9yIGEgY29ubmVjdGlvbiBhc2tpbmcgZm9yIGEgc2VydmljZSwgYW5kIHdpbGwgc2VydmUKK3RoYXQgc2VydmljZSBpZiBpdCBpcyBlbmFibGVkLgorCitJdCB2ZXJpZmllcyB0aGF0IHRoZSBkaXJlY3RvcnkgaGFzIHRoZSBtYWdpYyBmaWxlICJnaXQtZGFlbW9uLWV4cG9ydC1vayIsIGFuZAoraXQgd2lsbCByZWZ1c2UgdG8gZXhwb3J0IGFueSBHaXQgZGlyZWN0b3J5IHRoYXQgaGFzbid0IGV4cGxpY2l0bHkgYmVlbiBtYXJrZWQKK2ZvciBleHBvcnQgdGhpcyB3YXkgKHVubGVzcyB0aGUgJy0tZXhwb3J0LWFsbCcgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCkuIElmIHlvdQorcGFzcyBzb21lIGRpcmVjdG9yeSBwYXRocyBhcyAnZ2l0IGRhZW1vbicgYXJndW1lbnRzLCB5b3UgY2FuIGZ1cnRoZXIgcmVzdHJpY3QKK3RoZSBvZmZlcnMgdG8gYSB3aGl0ZWxpc3QgY29tcHJpc2luZyBvZiB0aG9zZS4KKworQnkgZGVmYXVsdCwgb25seSBgdXBsb2FkLXBhY2tgIHNlcnZpY2UgaXMgZW5hYmxlZCwgd2hpY2ggc2VydmVzCisnZ2l0IGZldGNoLXBhY2snIGFuZCAnZ2l0IGxzLXJlbW90ZScgY2xpZW50cywgd2hpY2ggYXJlIGludm9rZWQKK2Zyb20gJ2dpdCBmZXRjaCcsICdnaXQgcHVsbCcsIGFuZCAnZ2l0IGNsb25lJy4KKworVGhpcyBpcyBpZGVhbGx5IHN1aXRlZCBmb3IgcmVhZC1vbmx5IHVwZGF0ZXMsIGkuZS4sIHB1bGxpbmcgZnJvbQorR2l0IHJlcG9zaXRvcmllcy4KKworQW4gYHVwbG9hZC1hcmNoaXZlYCBhbHNvIGV4aXN0cyB0byBzZXJ2ZSAnZ2l0IGFyY2hpdmUnLgorCitPUFRJT05TCistLS0tLS0tCistLXN0cmljdC1wYXRoczo6CisJTWF0Y2ggcGF0aHMgZXhhY3RseSAoaS5lLiBkb24ndCBhbGxvdyAiL2Zvby9yZXBvIiB3aGVuIHRoZSByZWFsIHBhdGggaXMKKwkiL2Zvby9yZXBvLmdpdCIgb3IgIi9mb28vcmVwby8uZ2l0IikgYW5kIGRvbid0IGRvIHVzZXItcmVsYXRpdmUgcGF0aHMuCisJJ2dpdCBkYWVtb24nIHdpbGwgcmVmdXNlIHRvIHN0YXJ0IHdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgbm8KKwl3aGl0ZWxpc3QgaXMgc3BlY2lmaWVkLgorCistLWJhc2UtcGF0aD08cGF0aD46OgorCVJlbWFwIGFsbCB0aGUgcGF0aCByZXF1ZXN0cyBhcyByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcGF0aC4KKwlUaGlzIGlzIHNvcnQgb2YgIkdpdCByb290IiAtIGlmIHlvdSBydW4gJ2dpdCBkYWVtb24nIHdpdGgKKwknLS1iYXNlLXBhdGg9L3Nydi9naXQnIG9uIGV4YW1wbGUuY29tLCB0aGVuIGlmIHlvdSBsYXRlciB0cnkgdG8gcHVsbAorCSdnaXQ6Ly9leGFtcGxlLmNvbS9oZWxsby5naXQnLCAnZ2l0IGRhZW1vbicgd2lsbCBpbnRlcnByZXQgdGhlIHBhdGgKKwlhcyAnL3Nydi9naXQvaGVsbG8uZ2l0Jy4KKworLS1iYXNlLXBhdGgtcmVsYXhlZDo6CisJSWYgLS1iYXNlLXBhdGggaXMgZW5hYmxlZCBhbmQgcmVwbyBsb29rdXAgZmFpbHMsIHdpdGggdGhpcyBvcHRpb24KKwknZ2l0IGRhZW1vbicgd2lsbCBhdHRlbXB0IHRvIGxvb2t1cCB3aXRob3V0IHByZWZpeGluZyB0aGUgYmFzZSBwYXRoLgorCVRoaXMgaXMgdXNlZnVsIGZvciBzd2l0Y2hpbmcgdG8gLS1iYXNlLXBhdGggdXNhZ2UsIHdoaWxlIHN0aWxsCisJYWxsb3dpbmcgdGhlIG9sZCBwYXRocy4KKworLS1pbnRlcnBvbGF0ZWQtcGF0aD08cGF0aHRlbXBsYXRlPjo6CisJVG8gc3VwcG9ydCB2aXJ0dWFsIGhvc3RpbmcsIGFuIGludGVycG9sYXRlZCBwYXRoIHRlbXBsYXRlIGNhbiBiZQorCXVzZWQgdG8gZHluYW1pY2FsbHkgY29uc3RydWN0IGFsdGVybmF0ZSBwYXRocy4gIFRoZSB0ZW1wbGF0ZQorCXN1cHBvcnRzICVIIGZvciB0aGUgdGFyZ2V0IGhvc3RuYW1lIGFzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQgYnV0CisJY29udmVydGVkIHRvIGFsbCBsb3dlcmNhc2UsICVDSCBmb3IgdGhlIGNhbm9uaWNhbCBob3N0bmFtZSwKKwklSVAgZm9yIHRoZSBzZXJ2ZXIncyBJUCBhZGRyZXNzLCAlUCBmb3IgdGhlIHBvcnQgbnVtYmVyLAorCWFuZCAlRCBmb3IgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIG5hbWVkIHJlcG9zaXRvcnkuCisJQWZ0ZXIgaW50ZXJwb2xhdGlvbiwgdGhlIHBhdGggaXMgdmFsaWRhdGVkIGFnYWluc3QgdGhlIGRpcmVjdG9yeQorCXdoaXRlbGlzdC4KKworLS1leHBvcnQtYWxsOjoKKwlBbGxvdyBwdWxsaW5nIGZyb20gYWxsIGRpcmVjdG9yaWVzIHRoYXQgbG9vayBsaWtlIEdpdCByZXBvc2l0b3JpZXMKKwkoaGF2ZSB0aGUgJ29iamVjdHMnIGFuZCAncmVmcycgc3ViZGlyZWN0b3JpZXMpLCBldmVuIGlmIHRoZXkKKwlkbyBub3QgaGF2ZSB0aGUgJ2dpdC1kYWVtb24tZXhwb3J0LW9rJyBmaWxlLgorCistLWluZXRkOjoKKwlIYXZlIHRoZSBzZXJ2ZXIgcnVuIGFzIGFuIGluZXRkIHNlcnZpY2UuIEltcGxpZXMgLS1zeXNsb2cuCisJSW5jb21wYXRpYmxlIHdpdGggLS1kZXRhY2gsIC0tcG9ydCwgLS1saXN0ZW4sIC0tdXNlciBhbmQgLS1ncm91cAorCW9wdGlvbnMuCisKKy0tbGlzdGVuPTxob3N0X29yX2lwYWRkcj46OgorCUxpc3RlbiBvbiBhIHNwZWNpZmljIElQIGFkZHJlc3Mgb3IgaG9zdG5hbWUuICBJUCBhZGRyZXNzZXMgY2FuCisJYmUgZWl0aGVyIGFuIElQdjQgYWRkcmVzcyBvciBhbiBJUHY2IGFkZHJlc3MgaWYgc3VwcG9ydGVkLiAgSWYgSVB2NgorCWlzIG5vdCBzdXBwb3J0ZWQsIHRoZW4gLS1saXN0ZW49aG9zdG5hbWUgaXMgYWxzbyBub3Qgc3VwcG9ydGVkIGFuZAorCS0tbGlzdGVuIG11c3QgYmUgZ2l2ZW4gYW4gSVB2NCBhZGRyZXNzLgorCUNhbiBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZS4KKwlJbmNvbXBhdGlibGUgd2l0aCAnLS1pbmV0ZCcgb3B0aW9uLgorCistLXBvcnQ9PG4+OjoKKwlMaXN0ZW4gb24gYW4gYWx0ZXJuYXRpdmUgcG9ydC4gIEluY29tcGF0aWJsZSB3aXRoICctLWluZXRkJyBvcHRpb24uCisKKy0taW5pdC10aW1lb3V0PTxuPjo6CisJVGltZW91dCAoaW4gc2Vjb25kcykgYmV0d2VlbiB0aGUgbW9tZW50IHRoZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkCisJYW5kIHRoZSBjbGllbnQgcmVxdWVzdCBpcyByZWNlaXZlZCAodHlwaWNhbGx5IGEgcmF0aGVyIGxvdyB2YWx1ZSwgc2luY2UKKwl0aGF0IHNob3VsZCBiZSBiYXNpY2FsbHkgaW1tZWRpYXRlKS4KKworLS10aW1lb3V0PTxuPjo6CisJVGltZW91dCAoaW4gc2Vjb25kcykgZm9yIHNwZWNpZmljIGNsaWVudCBzdWItcmVxdWVzdHMuIFRoaXMgaW5jbHVkZXMKKwl0aGUgdGltZSBpdCB0YWtlcyBmb3IgdGhlIHNlcnZlciB0byBwcm9jZXNzIHRoZSBzdWItcmVxdWVzdCBhbmQgdGhlCisJdGltZSBzcGVudCB3YWl0aW5nIGZvciB0aGUgbmV4dCBjbGllbnQncyByZXF1ZXN0LgorCistLW1heC1jb25uZWN0aW9ucz08bj46OgorCU1heGltdW0gbnVtYmVyIG9mIGNvbmN1cnJlbnQgY2xpZW50cywgZGVmYXVsdHMgdG8gMzIuICBTZXQgaXQgdG8KKwl6ZXJvIGZvciBubyBsaW1pdC4KKworLS1zeXNsb2c6OgorCUxvZyB0byBzeXNsb2cgaW5zdGVhZCBvZiBzdGRlcnIuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBkb2VzIG5vdCBpbXBseQorCS0tdmVyYm9zZSwgdGh1cyBieSBkZWZhdWx0IG9ubHkgZXJyb3IgY29uZGl0aW9ucyB3aWxsIGJlIGxvZ2dlZC4KKworLS11c2VyLXBhdGg6OgorLS11c2VyLXBhdGg9PHBhdGg+OjoKKwlBbGxvdyB7dGlsZGV9dXNlciBub3RhdGlvbiB0byBiZSB1c2VkIGluIHJlcXVlc3RzLiAgV2hlbgorCXNwZWNpZmllZCB3aXRoIG5vIHBhcmFtZXRlciwgcmVxdWVzdHMgdG8KKwlnaXQ6Ly9ob3N0L3t0aWxkZX1hbGljZS9mb28gaXMgdGFrZW4gYXMgYSByZXF1ZXN0IHRvIGFjY2VzcworCSdmb28nIHJlcG9zaXRvcnkgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IG9mIHVzZXIgYGFsaWNlYC4KKwlJZiBgLS11c2VyLXBhdGg9cGF0aGAgaXMgc3BlY2lmaWVkLCB0aGUgc2FtZSByZXF1ZXN0IGlzCisJdGFrZW4gYXMgYSByZXF1ZXN0IHRvIGFjY2VzcyBgcGF0aC9mb29gIHJlcG9zaXRvcnkgaW4KKwl0aGUgaG9tZSBkaXJlY3Rvcnkgb2YgdXNlciBgYWxpY2VgLgorCistLXZlcmJvc2U6OgorCUxvZyBkZXRhaWxzIGFib3V0IHRoZSBpbmNvbWluZyBjb25uZWN0aW9ucyBhbmQgcmVxdWVzdGVkIGZpbGVzLgorCistLXJldXNlYWRkcjo6CisJVXNlIFNPX1JFVVNFQUREUiB3aGVuIGJpbmRpbmcgdGhlIGxpc3RlbmluZyBzb2NrZXQuCisJVGhpcyBhbGxvd3MgdGhlIHNlcnZlciB0byByZXN0YXJ0IHdpdGhvdXQgd2FpdGluZyBmb3IKKwlvbGQgY29ubmVjdGlvbnMgdG8gdGltZSBvdXQuCisKKy0tZGV0YWNoOjoKKwlEZXRhY2ggZnJvbSB0aGUgc2hlbGwuIEltcGxpZXMgLS1zeXNsb2cuCisKKy0tcGlkLWZpbGU9PGZpbGU+OjoKKwlTYXZlIHRoZSBwcm9jZXNzIGlkIGluICdmaWxlJy4gIElnbm9yZWQgd2hlbiB0aGUgZGFlbW9uCisJaXMgcnVuIHVuZGVyIGAtLWluZXRkYC4KKworLS11c2VyPTx1c2VyPjo6CistLWdyb3VwPTxncm91cD46OgorCUNoYW5nZSBkYWVtb24ncyB1aWQgYW5kIGdpZCBiZWZvcmUgZW50ZXJpbmcgdGhlIHNlcnZpY2UgbG9vcC4KKwlXaGVuIG9ubHkgYC0tdXNlcmAgaXMgZ2l2ZW4gd2l0aG91dCBgLS1ncm91cGAsIHRoZQorCXByaW1hcnkgZ3JvdXAgSUQgZm9yIHRoZSB1c2VyIGlzIHVzZWQuICBUaGUgdmFsdWVzIG9mCisJdGhlIG9wdGlvbiBhcmUgZ2l2ZW4gdG8gYGdldHB3bmFtKDMpYCBhbmQgYGdldGdybmFtKDMpYAorCWFuZCBudW1lcmljIElEcyBhcmUgbm90IHN1cHBvcnRlZC4KKysKK0dpdmluZyB0aGVzZSBvcHRpb25zIGlzIGFuIGVycm9yIHdoZW4gdXNlZCB3aXRoIGAtLWluZXRkYDsgdXNlCit0aGUgZmFjaWxpdHkgb2YgaW5ldCBkYWVtb24gdG8gYWNoaWV2ZSB0aGUgc2FtZSBiZWZvcmUgc3Bhd25pbmcKKydnaXQgZGFlbW9uJyBpZiBuZWVkZWQuCisrCitMaWtlIG1hbnkgcHJvZ3JhbXMgdGhhdCBzd2l0Y2ggdXNlciBpZCwgdGhlIGRhZW1vbiBkb2VzIG5vdCByZXNldAorZW52aXJvbm1lbnQgdmFyaWFibGVzIHN1Y2ggYXMgYCRIT01FYCB3aGVuIGl0IHJ1bnMgZ2l0IHByb2dyYW1zLAorZS5nLiBgdXBsb2FkLXBhY2tgIGFuZCBgcmVjZWl2ZS1wYWNrYC4gV2hlbiB1c2luZyB0aGlzIG9wdGlvbiwgeW91CittYXkgYWxzbyB3YW50IHRvIHNldCBhbmQgZXhwb3J0IGBIT01FYCB0byBwb2ludCBhdCB0aGUgaG9tZQorZGlyZWN0b3J5IG9mIGA8dXNlcj5gIGJlZm9yZSBzdGFydGluZyB0aGUgZGFlbW9uLCBhbmQgbWFrZSBzdXJlIGFueQorR2l0IGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkgYXJlIHJlYWRhYmxlIGJ5IGA8dXNlcj5gLgorCistLWVuYWJsZT08c2VydmljZT46OgorLS1kaXNhYmxlPTxzZXJ2aWNlPjo6CisJRW5hYmxlL2Rpc2FibGUgdGhlIHNlcnZpY2Ugc2l0ZS13aWRlIHBlciBkZWZhdWx0LiAgTm90ZQorCXRoYXQgYSBzZXJ2aWNlIGRpc2FibGVkIHNpdGUtd2lkZSBjYW4gc3RpbGwgYmUgZW5hYmxlZAorCXBlciByZXBvc2l0b3J5IGlmIGl0IGlzIG1hcmtlZCBvdmVycmlkYWJsZSBhbmQgdGhlCisJcmVwb3NpdG9yeSBlbmFibGVzIHRoZSBzZXJ2aWNlIHdpdGggYSBjb25maWd1cmF0aW9uCisJaXRlbS4KKworLS1hbGxvdy1vdmVycmlkZT08c2VydmljZT46OgorLS1mb3JiaWQtb3ZlcnJpZGU9PHNlcnZpY2U+OjoKKwlBbGxvdy9mb3JiaWQgb3ZlcnJpZGluZyB0aGUgc2l0ZS13aWRlIGRlZmF1bHQgd2l0aCBwZXIKKwlyZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24uICBCeSBkZWZhdWx0LCBhbGwgdGhlIHNlcnZpY2VzCisJbWF5IGJlIG92ZXJyaWRkZW4uCisKKy0tW25vLV1pbmZvcm1hdGl2ZS1lcnJvcnM6OgorCVdoZW4gaW5mb3JtYXRpdmUgZXJyb3JzIGFyZSB0dXJuZWQgb24sIGdpdC1kYWVtb24gd2lsbCByZXBvcnQKKwltb3JlIHZlcmJvc2UgZXJyb3JzIHRvIHRoZSBjbGllbnQsIGRpZmZlcmVudGlhdGluZyBjb25kaXRpb25zCisJbGlrZSAibm8gc3VjaCByZXBvc2l0b3J5IiBmcm9tICJyZXBvc2l0b3J5IG5vdCBleHBvcnRlZCIuIFRoaXMKKwlpcyBtb3JlIGNvbnZlbmllbnQgZm9yIGNsaWVudHMsIGJ1dCBtYXkgbGVhayBpbmZvcm1hdGlvbiBhYm91dAorCXRoZSBleGlzdGVuY2Ugb2YgdW5leHBvcnRlZCByZXBvc2l0b3JpZXMuICBXaGVuIGluZm9ybWF0aXZlCisJZXJyb3JzIGFyZSBub3QgZW5hYmxlZCwgYWxsIGVycm9ycyByZXBvcnQgImFjY2VzcyBkZW5pZWQiIHRvIHRoZQorCWNsaWVudC4gVGhlIGRlZmF1bHQgaXMgLS1uby1pbmZvcm1hdGl2ZS1lcnJvcnMuCisKKy0tYWNjZXNzLWhvb2s9PHBhdGg+OjoKKwlFdmVyeSB0aW1lIGEgY2xpZW50IGNvbm5lY3RzLCBmaXJzdCBydW4gYW4gZXh0ZXJuYWwgY29tbWFuZAorCXNwZWNpZmllZCBieSB0aGUgPHBhdGg+IHdpdGggc2VydmljZSBuYW1lIChlLmcuICJ1cGxvYWQtcGFjayIpLAorCXBhdGggdG8gdGhlIHJlcG9zaXRvcnksIGhvc3RuYW1lICglSCksIGNhbm9uaWNhbCBob3N0bmFtZQorCSglQ0gpLCBJUCBhZGRyZXNzICglSVApLCBhbmQgVENQIHBvcnQgKCVQKSBhcyBpdHMgY29tbWFuZC1saW5lCisJYXJndW1lbnRzLiBUaGUgZXh0ZXJuYWwgY29tbWFuZCBjYW4gZGVjaWRlIHRvIGRlY2xpbmUgdGhlCisJc2VydmljZSBieSBleGl0aW5nIHdpdGggYSBub24temVybyBzdGF0dXMgKG9yIHRvIGFsbG93IGl0IGJ5CisJZXhpdGluZyB3aXRoIGEgemVybyBzdGF0dXMpLiAgSXQgY2FuIGFsc28gbG9vayBhdCB0aGUgJFJFTU9URV9BRERSCisJYW5kICRSRU1PVEVfUE9SVCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gbGVhcm4gYWJvdXQgdGhlCisJcmVxdWVzdG9yIHdoZW4gbWFraW5nIHRoaXMgZGVjaXNpb24uCisrCitUaGUgZXh0ZXJuYWwgY29tbWFuZCBjYW4gb3B0aW9uYWxseSB3cml0ZSBhIHNpbmdsZSBsaW5lIHRvIGl0cworc3RhbmRhcmQgb3V0cHV0IHRvIGJlIHNlbnQgdG8gdGhlIHJlcXVlc3RvciBhcyBhbiBlcnJvciBtZXNzYWdlIHdoZW4KK2l0IGRlY2xpbmVzIHRoZSBzZXJ2aWNlLgorCis8ZGlyZWN0b3J5Pjo6CisJQSBkaXJlY3RvcnkgdG8gYWRkIHRvIHRoZSB3aGl0ZWxpc3Qgb2YgYWxsb3dlZCBkaXJlY3Rvcmllcy4gVW5sZXNzCisJLS1zdHJpY3QtcGF0aHMgaXMgc3BlY2lmaWVkIHRoaXMgd2lsbCBhbHNvIGluY2x1ZGUgc3ViZGlyZWN0b3JpZXMKKwlvZiBlYWNoIG5hbWVkIGRpcmVjdG9yeS4KKworU0VSVklDRVMKKy0tLS0tLS0tCisKK1RoZXNlIHNlcnZpY2VzIGNhbiBiZSBnbG9iYWxseSBlbmFibGVkL2Rpc2FibGVkIHVzaW5nIHRoZQorY29tbWFuZC1saW5lIG9wdGlvbnMgb2YgdGhpcyBjb21tYW5kLiAgSWYgZmluZXItZ3JhaW5lZAorY29udHJvbCBpcyBkZXNpcmVkIChlLmcuIHRvIGFsbG93ICdnaXQgYXJjaGl2ZScgdG8gYmUgcnVuCithZ2FpbnN0IG9ubHkgaW4gYSBmZXcgc2VsZWN0ZWQgcmVwb3NpdG9yaWVzIHRoZSBkYWVtb24gc2VydmVzKSwKK3RoZSBwZXItcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGZpbGUgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIG9yCitkaXNhYmxlIHRoZW0uCisKK3VwbG9hZC1wYWNrOjoKKwlUaGlzIHNlcnZlcyAnZ2l0IGZldGNoLXBhY2snIGFuZCAnZ2l0IGxzLXJlbW90ZScKKwljbGllbnRzLiAgSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYSByZXBvc2l0b3J5IGNhbgorCWRpc2FibGUgaXQgYnkgc2V0dGluZyBgZGFlbW9uLnVwbG9hZHBhY2tgIGNvbmZpZ3VyYXRpb24KKwlpdGVtIHRvIGBmYWxzZWAuCisKK3VwbG9hZC1hcmNoaXZlOjoKKwlUaGlzIHNlcnZlcyAnZ2l0IGFyY2hpdmUgLS1yZW1vdGUnLiAgSXQgaXMgZGlzYWJsZWQgYnkKKwlkZWZhdWx0LCBidXQgYSByZXBvc2l0b3J5IGNhbiBlbmFibGUgaXQgYnkgc2V0dGluZworCWBkYWVtb24udXBsb2FkYXJjaGAgY29uZmlndXJhdGlvbiBpdGVtIHRvIGB0cnVlYC4KKworcmVjZWl2ZS1wYWNrOjoKKwlUaGlzIHNlcnZlcyAnZ2l0IHNlbmQtcGFjaycgY2xpZW50cywgYWxsb3dpbmcgYW5vbnltb3VzCisJcHVzaC4gIEl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGFzIHRoZXJlIGlzIF9ub18KKwlhdXRoZW50aWNhdGlvbiBpbiB0aGUgcHJvdG9jb2wgKGluIG90aGVyIHdvcmRzLCBhbnlib2R5CisJY2FuIHB1c2ggYW55dGhpbmcgaW50byB0aGUgcmVwb3NpdG9yeSwgaW5jbHVkaW5nIHJlbW92YWwKKwlvZiByZWZzKS4gIFRoaXMgaXMgc29sZWx5IG1lYW50IGZvciBhIGNsb3NlZCBMQU4gc2V0dGluZworCXdoZXJlIGV2ZXJ5Ym9keSBpcyBmcmllbmRseS4gIFRoaXMgc2VydmljZSBjYW4gYmUKKwllbmFibGVkIGJ5IHNldHRpbmcgYGRhZW1vbi5yZWNlaXZlcGFja2AgY29uZmlndXJhdGlvbiBpdGVtIHRvCisJYHRydWVgLgorCitFWEFNUExFUworLS0tLS0tLS0KK1dlIGFzc3VtZSB0aGUgZm9sbG93aW5nIGluIC9ldGMvc2VydmljZXM6OgorKworLS0tLS0tLS0tLS0tCiskIGdyZXAgOTQxOCAvZXRjL3NlcnZpY2VzCitnaXQJCTk0MTgvdGNwCQkjIEdpdCBWZXJzaW9uIENvbnRyb2wgU3lzdGVtCistLS0tLS0tLS0tLS0KKworJ2dpdCBkYWVtb24nIGFzIGluZXRkIHNlcnZlcjo6CisJVG8gc2V0IHVwICdnaXQgZGFlbW9uJyBhcyBhbiBpbmV0ZCBzZXJ2aWNlIHRoYXQgaGFuZGxlcyBhbnkKKwlyZXBvc2l0b3J5IHVuZGVyIHRoZSB3aGl0ZWxpc3RlZCBzZXQgb2YgZGlyZWN0b3JpZXMsIC9wdWIvZm9vCisJYW5kIC9wdWIvYmFyLCBwbGFjZSBhbiBlbnRyeSBsaWtlIHRoZSBmb2xsb3dpbmcgaW50bworCS9ldGMvaW5ldGQgYWxsIG9uIG9uZSBsaW5lOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZ2l0IHN0cmVhbSB0Y3Agbm93YWl0IG5vYm9keSAgL3Vzci9iaW4vZ2l0CisJCWdpdCBkYWVtb24gLS1pbmV0ZCAtLXZlcmJvc2UgLS1leHBvcnQtYWxsCisJCS9wdWIvZm9vIC9wdWIvYmFyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisnZ2l0IGRhZW1vbicgYXMgaW5ldGQgc2VydmVyIGZvciB2aXJ0dWFsIGhvc3RzOjoKKwlUbyBzZXQgdXAgJ2dpdCBkYWVtb24nIGFzIGFuIGluZXRkIHNlcnZpY2UgdGhhdCBoYW5kbGVzCisJcmVwb3NpdG9yaWVzIGZvciBkaWZmZXJlbnQgdmlydHVhbCBob3N0cywgYHd3dy5leGFtcGxlLmNvbWAKKwlhbmQgYHd3dy5leGFtcGxlLm9yZ2AsIHBsYWNlIGFuIGVudHJ5IGxpa2UgdGhlIGZvbGxvd2luZyBpbnRvCisJYC9ldGMvaW5ldGRgIGFsbCBvbiBvbmUgbGluZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWdpdCBzdHJlYW0gdGNwIG5vd2FpdCBub2JvZHkgL3Vzci9iaW4vZ2l0CisJCWdpdCBkYWVtb24gLS1pbmV0ZCAtLXZlcmJvc2UgLS1leHBvcnQtYWxsCisJCS0taW50ZXJwb2xhdGVkLXBhdGg9L3B1Yi8lSCVECisJCS9wdWIvd3d3LmV4YW1wbGUub3JnL3NvZnR3YXJlCisJCS9wdWIvd3d3LmV4YW1wbGUuY29tL3NvZnR3YXJlCisJCS9zb2Z0d2FyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitJbiB0aGlzIGV4YW1wbGUsIHRoZSByb290LWxldmVsIGRpcmVjdG9yeSBgL3B1YmAgd2lsbCBjb250YWluCithIHN1YmRpcmVjdG9yeSBmb3IgZWFjaCB2aXJ0dWFsIGhvc3QgbmFtZSBzdXBwb3J0ZWQuCitGdXJ0aGVyLCBib3RoIGhvc3RzIGFkdmVydGlzZSByZXBvc2l0b3JpZXMgc2ltcGx5IGFzCitgZ2l0Oi8vd3d3LmV4YW1wbGUuY29tL3NvZnR3YXJlL3JlcG8uZ2l0YC4gIEZvciBwcmUtMS40LjAKK2NsaWVudHMsIGEgc3ltbGluayBmcm9tIGAvc29mdHdhcmVgIGludG8gdGhlIGFwcHJvcHJpYXRlCitkZWZhdWx0IHJlcG9zaXRvcnkgY291bGQgYmUgbWFkZSBhcyB3ZWxsLgorCisKKydnaXQgZGFlbW9uJyBhcyByZWd1bGFyIGRhZW1vbiBmb3IgdmlydHVhbCBob3N0czo6CisJVG8gc2V0IHVwICdnaXQgZGFlbW9uJyBhcyBhIHJlZ3VsYXIsIG5vbi1pbmV0ZCBzZXJ2aWNlIHRoYXQKKwloYW5kbGVzIHJlcG9zaXRvcmllcyBmb3IgbXVsdGlwbGUgdmlydHVhbCBob3N0cyBiYXNlZCBvbgorCXRoZWlyIElQIGFkZHJlc3Nlcywgc3RhcnQgdGhlIGRhZW1vbiBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlnaXQgZGFlbW9uIC0tdmVyYm9zZSAtLWV4cG9ydC1hbGwKKwkJLS1pbnRlcnBvbGF0ZWQtcGF0aD0vcHViLyVJUC8lRAorCQkvcHViLzE5Mi4xNjguMS4yMDAvc29mdHdhcmUKKwkJL3B1Yi8xMC4xMC4yMjAuMjMvc29mdHdhcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSW4gdGhpcyBleGFtcGxlLCB0aGUgcm9vdC1sZXZlbCBkaXJlY3RvcnkgYC9wdWJgIHdpbGwgY29udGFpbgorYSBzdWJkaXJlY3RvcnkgZm9yIGVhY2ggdmlydHVhbCBob3N0IElQIGFkZHJlc3Mgc3VwcG9ydGVkLgorUmVwb3NpdG9yaWVzIGNhbiBzdGlsbCBiZSBhY2Nlc3NlZCBieSBob3N0bmFtZSB0aG91Z2gsIGFzc3VtaW5nCit0aGV5IGNvcnJlc3BvbmQgdG8gdGhlc2UgSVAgYWRkcmVzc2VzLgorCitzZWxlY3RpdmVseSBlbmFibGUvZGlzYWJsZSBzZXJ2aWNlcyBwZXIgcmVwb3NpdG9yeTo6CisJVG8gZW5hYmxlICdnaXQgYXJjaGl2ZSAtLXJlbW90ZScgYW5kIGRpc2FibGUgJ2dpdCBmZXRjaCcgYWdhaW5zdAorCWEgcmVwb3NpdG9yeSwgaGF2ZSB0aGUgZm9sbG93aW5nIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgaW4gdGhlCisJcmVwb3NpdG9yeSAodGhhdCBpcyB0aGUgZmlsZSAnY29uZmlnJyBuZXh0IHRvICdIRUFEJywgJ3JlZnMnIGFuZAorCSdvYmplY3RzJykuCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJW2RhZW1vbl0KKwkJdXBsb2FkcGFjayA9IGZhbHNlCisJCXVwbG9hZGFyY2ggPSB0cnVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tCisnZ2l0IGRhZW1vbicgd2lsbCBzZXQgUkVNT1RFX0FERFIgdG8gdGhlIElQIGFkZHJlc3Mgb2YgdGhlIGNsaWVudAordGhhdCBjb25uZWN0ZWQgdG8gaXQsIGlmIHRoZSBJUCBhZGRyZXNzIGlzIGF2YWlsYWJsZS4gUkVNT1RFX0FERFIgd2lsbAorYmUgYXZhaWxhYmxlIGluIHRoZSBlbnZpcm9ubWVudCBvZiBob29rcyBjYWxsZWQgd2hlbgorc2VydmljZXMgYXJlIHBlcmZvcm1lZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kZXNjcmliZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhmMjhjOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRlc2NyaWJlLnR4dApAQCAtMCwwICsxLDE2OSBAQAorZ2l0LWRlc2NyaWJlKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWRlc2NyaWJlIC0gRGVzY3JpYmUgYSBjb21taXQgdXNpbmcgdGhlIG1vc3QgcmVjZW50IHRhZyByZWFjaGFibGUgZnJvbSBpdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBkZXNjcmliZScgWy0tYWxsXSBbLS10YWdzXSBbLS1jb250YWluc10gWy0tYWJicmV2PTxuPl0gWzxjb21taXQtaXNoPi4uLl0KKydnaXQgZGVzY3JpYmUnIFstLWFsbF0gWy0tdGFnc10gWy0tY29udGFpbnNdIFstLWFiYnJldj08bj5dIC0tZGlydHlbPTxtYXJrPl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGUgY29tbWFuZCBmaW5kcyB0aGUgbW9zdCByZWNlbnQgdGFnIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gYQorY29tbWl0LiAgSWYgdGhlIHRhZyBwb2ludHMgdG8gdGhlIGNvbW1pdCwgdGhlbiBvbmx5IHRoZSB0YWcgaXMKK3Nob3duLiAgT3RoZXJ3aXNlLCBpdCBzdWZmaXhlcyB0aGUgdGFnIG5hbWUgd2l0aCB0aGUgbnVtYmVyIG9mCithZGRpdGlvbmFsIGNvbW1pdHMgb24gdG9wIG9mIHRoZSB0YWdnZWQgb2JqZWN0IGFuZCB0aGUKK2FiYnJldmlhdGVkIG9iamVjdCBuYW1lIG9mIHRoZSBtb3N0IHJlY2VudCBjb21taXQuCisKK0J5IGRlZmF1bHQgKHdpdGhvdXQgLS1hbGwgb3IgLS10YWdzKSBgZ2l0IGRlc2NyaWJlYCBvbmx5IHNob3dzCithbm5vdGF0ZWQgdGFncy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIGFubm90YXRlZCB0YWdzCitzZWUgdGhlIC1hIGFuZCAtcyBvcHRpb25zIHRvIGxpbmtnaXQ6Z2l0LXRhZ1sxXS4KKworT1BUSU9OUworLS0tLS0tLQorPGNvbW1pdC1pc2g+Li4uOjoKKwlDb21taXQtaXNoIG9iamVjdCBuYW1lcyB0byBkZXNjcmliZS4gIERlZmF1bHRzIHRvIEhFQUQgaWYgb21pdHRlZC4KKworLS1kaXJ0eVs9PG1hcms+XTo6CisJRGVzY3JpYmUgdGhlIHdvcmtpbmcgdHJlZS4KKwlJdCBtZWFucyBkZXNjcmliZSBIRUFEIGFuZCBhcHBlbmRzIDxtYXJrPiAoYC1kaXJ0eWAgYnkKKwlkZWZhdWx0KSBpZiB0aGUgd29ya2luZyB0cmVlIGlzIGRpcnR5LgorCistLWFsbDo6CisJSW5zdGVhZCBvZiB1c2luZyBvbmx5IHRoZSBhbm5vdGF0ZWQgdGFncywgdXNlIGFueSByZWYKKwlmb3VuZCBpbiBgcmVmcy9gIG5hbWVzcGFjZS4gIFRoaXMgb3B0aW9uIGVuYWJsZXMgbWF0Y2hpbmcKKwlhbnkga25vd24gYnJhbmNoLCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCBvciBsaWdodHdlaWdodCB0YWcuCisKKy0tdGFnczo6CisJSW5zdGVhZCBvZiB1c2luZyBvbmx5IHRoZSBhbm5vdGF0ZWQgdGFncywgdXNlIGFueSB0YWcKKwlmb3VuZCBpbiBgcmVmcy90YWdzYCBuYW1lc3BhY2UuICBUaGlzIG9wdGlvbiBlbmFibGVzIG1hdGNoaW5nCisJYSBsaWdodHdlaWdodCAobm9uLWFubm90YXRlZCkgdGFnLgorCistLWNvbnRhaW5zOjoKKwlJbnN0ZWFkIG9mIGZpbmRpbmcgdGhlIHRhZyB0aGF0IHByZWRhdGVzIHRoZSBjb21taXQsIGZpbmQKKwl0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCwgYW5kIHRodXMgY29udGFpbnMgaXQuCisJQXV0b21hdGljYWxseSBpbXBsaWVzIC0tdGFncy4KKworLS1hYmJyZXY9PG4+OjoKKwlJbnN0ZWFkIG9mIHVzaW5nIHRoZSBkZWZhdWx0IDcgaGV4YWRlY2ltYWwgZGlnaXRzIGFzIHRoZQorCWFiYnJldmlhdGVkIG9iamVjdCBuYW1lLCB1c2UgPG4+IGRpZ2l0cywgb3IgYXMgbWFueSBkaWdpdHMKKwlhcyBuZWVkZWQgdG8gZm9ybSBhIHVuaXF1ZSBvYmplY3QgbmFtZS4gIEFuIDxuPiBvZiAwCisJd2lsbCBzdXBwcmVzcyBsb25nIGZvcm1hdCwgb25seSBzaG93aW5nIHRoZSBjbG9zZXN0IHRhZy4KKworLS1jYW5kaWRhdGVzPTxuPjo6CisJSW5zdGVhZCBvZiBjb25zaWRlcmluZyBvbmx5IHRoZSAxMCBtb3N0IHJlY2VudCB0YWdzIGFzCisJY2FuZGlkYXRlcyB0byBkZXNjcmliZSB0aGUgaW5wdXQgY29tbWl0LWlzaCBjb25zaWRlcgorCXVwIHRvIDxuPiBjYW5kaWRhdGVzLiAgSW5jcmVhc2luZyA8bj4gYWJvdmUgMTAgd2lsbCB0YWtlCisJc2xpZ2h0bHkgbG9uZ2VyIGJ1dCBtYXkgcHJvZHVjZSBhIG1vcmUgYWNjdXJhdGUgcmVzdWx0LgorCUFuIDxuPiBvZiAwIHdpbGwgY2F1c2Ugb25seSBleGFjdCBtYXRjaGVzIHRvIGJlIG91dHB1dC4KKworLS1leGFjdC1tYXRjaDo6CisJT25seSBvdXRwdXQgZXhhY3QgbWF0Y2hlcyAoYSB0YWcgZGlyZWN0bHkgcmVmZXJlbmNlcyB0aGUKKwlzdXBwbGllZCBjb21taXQpLiAgVGhpcyBpcyBhIHN5bm9ueW0gZm9yIC0tY2FuZGlkYXRlcz0wLgorCistLWRlYnVnOjoKKwlWZXJib3NlbHkgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VhcmNoaW5nIHN0cmF0ZWd5CisJYmVpbmcgZW1wbG95ZWQgdG8gc3RhbmRhcmQgZXJyb3IuICBUaGUgdGFnIG5hbWUgd2lsbCBzdGlsbAorCWJlIHByaW50ZWQgdG8gc3RhbmRhcmQgb3V0LgorCistLWxvbmc6OgorCUFsd2F5cyBvdXRwdXQgdGhlIGxvbmcgZm9ybWF0ICh0aGUgdGFnLCB0aGUgbnVtYmVyIG9mIGNvbW1pdHMKKwlhbmQgdGhlIGFiYnJldmlhdGVkIGNvbW1pdCBuYW1lKSBldmVuIHdoZW4gaXQgbWF0Y2hlcyBhIHRhZy4KKwlUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIHNlZSBwYXJ0cyBvZiB0aGUgY29tbWl0IG9iamVjdCBuYW1lCisJaW4gImRlc2NyaWJlIiBvdXRwdXQsIGV2ZW4gd2hlbiB0aGUgY29tbWl0IGluIHF1ZXN0aW9uIGhhcHBlbnMgdG8gYmUKKwlhIHRhZ2dlZCB2ZXJzaW9uLiAgSW5zdGVhZCBvZiBqdXN0IGVtaXR0aW5nIHRoZSB0YWcgbmFtZSwgaXQgd2lsbAorCWRlc2NyaWJlIHN1Y2ggYSBjb21taXQgYXMgdjEuMi0wLWdkZWFkYmVlICgwdGggY29tbWl0IHNpbmNlIHRhZyB2MS4yCisJdGhhdCBwb2ludHMgYXQgb2JqZWN0IGRlYWRiZWUuLi4uKS4KKworLS1tYXRjaCA8cGF0dGVybj46OgorCU9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyB0aGUgZ2l2ZW4gYGdsb2IoNylgIHBhdHRlcm4sCisJZXhjbHVkaW5nIHRoZSAicmVmcy90YWdzLyIgcHJlZml4LiAgVGhpcyBjYW4gYmUgdXNlZCB0byBhdm9pZAorCWxlYWtpbmcgcHJpdmF0ZSB0YWdzIGZyb20gdGhlIHJlcG9zaXRvcnkuCisKKy0tYWx3YXlzOjoKKwlTaG93IHVuaXF1ZWx5IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2suCisKKy0tZmlyc3QtcGFyZW50OjoKKwlGb2xsb3cgb25seSB0aGUgZmlyc3QgcGFyZW50IGNvbW1pdCB1cG9uIHNlZWluZyBhIG1lcmdlIGNvbW1pdC4KKwlUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIG5vdCBtYXRjaCB0YWdzIG9uIGJyYW5jaGVzIG1lcmdlZAorCWluIHRoZSBoaXN0b3J5IG9mIHRoZSB0YXJnZXQgY29tbWl0LgorCitFWEFNUExFUworLS0tLS0tLS0KKworV2l0aCBzb21ldGhpbmcgbGlrZSBnaXQuZ2l0IGN1cnJlbnQgdHJlZSwgSSBnZXQ6CisKKwlbdG9ydmFsZHNAZzUgZ2l0XSQgZ2l0IGRlc2NyaWJlIHBhcmVudAorCXYxLjAuNC0xNC1nMjQxNDcyMQorCitpLmUuIHRoZSBjdXJyZW50IGhlYWQgb2YgbXkgInBhcmVudCIgYnJhbmNoIGlzIGJhc2VkIG9uIHYxLjAuNCwKK2J1dCBzaW5jZSBpdCBoYXMgYSBmZXcgY29tbWl0cyBvbiB0b3Agb2YgdGhhdCwKK2Rlc2NyaWJlIGhhcyBhZGRlZCB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY29tbWl0cyAoIjE0IikgYW5kCithbiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZSBmb3IgdGhlIGNvbW1pdCBpdHNlbGYgKCIyNDE0NzIxIikKK2F0IHRoZSBlbmQuCisKK1RoZSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb21taXRzIGlzIHRoZSBudW1iZXIKK29mIGNvbW1pdHMgd2hpY2ggd291bGQgYmUgZGlzcGxheWVkIGJ5ICJnaXQgbG9nIHYxLjAuNC4ucGFyZW50Ii4KK1RoZSBoYXNoIHN1ZmZpeCBpcyAiLWciICsgNy1jaGFyIGFiYnJldmlhdGlvbiBmb3IgdGhlIHRpcCBjb21taXQKK29mIHBhcmVudCAod2hpY2ggd2FzIGAyNDE0NzIxYjE5NDQ1M2YwNTgwNzlkODk3ZDEzYzRlMzc3ZjkyZGM2YCkuCitUaGUgImciIHByZWZpeCBzdGFuZHMgZm9yICJnaXQiIGFuZCBpcyB1c2VkIHRvIGFsbG93IGRlc2NyaWJpbmcgdGhlIHZlcnNpb24gb2YKK2Egc29mdHdhcmUgZGVwZW5kaW5nIG9uIHRoZSBTQ00gdGhlIHNvZnR3YXJlIGlzIG1hbmFnZWQgd2l0aC4gVGhpcyBpcyB1c2VmdWwKK2luIGFuIGVudmlyb25tZW50IHdoZXJlIHBlb3BsZSBtYXkgdXNlIGRpZmZlcmVudCBTQ01zLgorCitEb2luZyBhICdnaXQgZGVzY3JpYmUnIG9uIGEgdGFnLW5hbWUgd2lsbCBqdXN0IHNob3cgdGhlIHRhZyBuYW1lOgorCisJW3RvcnZhbGRzQGc1IGdpdF0kIGdpdCBkZXNjcmliZSB2MS4wLjQKKwl2MS4wLjQKKworV2l0aCAtLWFsbCwgdGhlIGNvbW1hbmQgY2FuIHVzZSBicmFuY2ggaGVhZHMgYXMgcmVmZXJlbmNlcywgc28KK3RoZSBvdXRwdXQgc2hvd3MgdGhlIHJlZmVyZW5jZSBwYXRoIGFzIHdlbGw6CisKKwlbdG9ydmFsZHNAZzUgZ2l0XSQgZ2l0IGRlc2NyaWJlIC0tYWxsIC0tYWJicmV2PTQgdjEuMC41XjIKKwl0YWdzL3YxLjAuMC0yMS1nOTc1YgorCisJW3RvcnZhbGRzQGc1IGdpdF0kIGdpdCBkZXNjcmliZSAtLWFsbCAtLWFiYnJldj00IEhFQUReCisJaGVhZHMvbHQvZGVzY3JpYmUtNy1nOTc1YgorCitXaXRoIC0tYWJicmV2IHNldCB0byAwLCB0aGUgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZQorY2xvc2VzdCB0YWduYW1lIHdpdGhvdXQgYW55IHN1ZmZpeDoKKworCVt0b3J2YWxkc0BnNSBnaXRdJCBnaXQgZGVzY3JpYmUgLS1hYmJyZXY9MCB2MS4wLjVeMgorCXRhZ3MvdjEuMC4wCisKK05vdGUgdGhhdCB0aGUgc3VmZml4IHlvdSBnZXQgaWYgeW91IHR5cGUgdGhlc2UgY29tbWFuZHMgdG9kYXkgbWF5IGJlCitsb25nZXIgdGhhbiB3aGF0IExpbnVzIHNhdyBhYm92ZSB3aGVuIGhlIHJhbiB0aGVzZSBjb21tYW5kcywgYXMgeW91cgorR2l0IHJlcG9zaXRvcnkgbWF5IGhhdmUgbmV3IGNvbW1pdHMgd2hvc2Ugb2JqZWN0IG5hbWVzIGJlZ2luIHdpdGgKKzk3NWIgdGhhdCBkaWQgbm90IGV4aXN0IGJhY2sgdGhlbiwgYW5kICItZzk3NWIiIHN1ZmZpeCBhbG9uZSBtYXkgbm90CitiZSBzdWZmaWNpZW50IHRvIGRpc2FtYmlndWF0ZSB0aGVzZSBjb21taXRzLgorCisKK1NFQVJDSCBTVFJBVEVHWQorLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBlYWNoIGNvbW1pdC1pc2ggc3VwcGxpZWQsICdnaXQgZGVzY3JpYmUnIHdpbGwgZmlyc3QgbG9vayBmb3IKK2EgdGFnIHdoaWNoIHRhZ3MgZXhhY3RseSB0aGF0IGNvbW1pdC4gIEFubm90YXRlZCB0YWdzIHdpbGwgYWx3YXlzCitiZSBwcmVmZXJyZWQgb3ZlciBsaWdodHdlaWdodCB0YWdzLCBhbmQgdGFncyB3aXRoIG5ld2VyIGRhdGVzIHdpbGwKK2Fsd2F5cyBiZSBwcmVmZXJyZWQgb3ZlciB0YWdzIHdpdGggb2xkZXIgZGF0ZXMuICBJZiBhbiBleGFjdCBtYXRjaAoraXMgZm91bmQsIGl0cyBuYW1lIHdpbGwgYmUgb3V0cHV0IGFuZCBzZWFyY2hpbmcgd2lsbCBzdG9wLgorCitJZiBhbiBleGFjdCBtYXRjaCB3YXMgbm90IGZvdW5kLCAnZ2l0IGRlc2NyaWJlJyB3aWxsIHdhbGsgYmFjawordGhyb3VnaCB0aGUgY29tbWl0IGhpc3RvcnkgdG8gbG9jYXRlIGFuIGFuY2VzdG9yIGNvbW1pdCB3aGljaAoraGFzIGJlZW4gdGFnZ2VkLiAgVGhlIGFuY2VzdG9yJ3MgdGFnIHdpbGwgYmUgb3V0cHV0IGFsb25nIHdpdGggYW4KK2FiYnJldmlhdGlvbiBvZiB0aGUgaW5wdXQgY29tbWl0LWlzaCdzIFNIQS0xLiBJZiAnLS1maXJzdC1wYXJlbnQnIHdhcworc3BlY2lmaWVkIHRoZW4gdGhlIHdhbGsgd2lsbCBvbmx5IGNvbnNpZGVyIHRoZSBmaXJzdCBwYXJlbnQgb2YgZWFjaAorY29tbWl0LgorCitJZiBtdWx0aXBsZSB0YWdzIHdlcmUgZm91bmQgZHVyaW5nIHRoZSB3YWxrIHRoZW4gdGhlIHRhZyB3aGljaAoraGFzIHRoZSBmZXdlc3QgY29tbWl0cyBkaWZmZXJlbnQgZnJvbSB0aGUgaW5wdXQgY29tbWl0LWlzaCB3aWxsIGJlCitzZWxlY3RlZCBhbmQgb3V0cHV0LiAgSGVyZSBmZXdlc3QgY29tbWl0cyBkaWZmZXJlbnQgaXMgZGVmaW5lZCBhcwordGhlIG51bWJlciBvZiBjb21taXRzIHdoaWNoIHdvdWxkIGJlIHNob3duIGJ5IGBnaXQgbG9nIHRhZy4uaW5wdXRgCit3aWxsIGJlIHRoZSBzbWFsbGVzdCBudW1iZXIgb2YgY29tbWl0cyBwb3NzaWJsZS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtZmlsZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjc3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWZpbGVzLnR4dApAQCAtMCwwICsxLDUyIEBACitnaXQtZGlmZi1maWxlcygxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWRpZmYtZmlsZXMgLSBDb21wYXJlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXgKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZGlmZi1maWxlcycgWy1xXSBbLTB8LTF8LTJ8LTN8LWN8LS1jY10gWzxjb21tb24gZGlmZiBvcHRpb25zPl0gWzxwYXRoPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDb21wYXJlcyB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4LiAgV2hlbiBwYXRocworYXJlIHNwZWNpZmllZCwgY29tcGFyZXMgb25seSB0aG9zZSBuYW1lZCBwYXRocy4gIE90aGVyd2lzZSBhbGwKK2VudHJpZXMgaW4gdGhlIGluZGV4IGFyZSBjb21wYXJlZC4gIFRoZSBvdXRwdXQgZm9ybWF0IGlzIHRoZQorc2FtZSBhcyBmb3IgJ2dpdCBkaWZmLWluZGV4JyBhbmQgJ2dpdCBkaWZmLXRyZWUnLgorCitPUFRJT05TCistLS0tLS0tCitpbmNsdWRlOjpkaWZmLW9wdGlvbnMudHh0W10KKworLTEgLS1iYXNlOjoKKy0yIC0tb3Vyczo6CistMyAtLXRoZWlyczo6CistMDo6CisJRGlmZiBhZ2FpbnN0IHRoZSAiYmFzZSIgdmVyc2lvbiwgIm91ciBicmFuY2giIG9yICJ0aGVpcgorCWJyYW5jaCIgcmVzcGVjdGl2ZWx5LiAgV2l0aCB0aGVzZSBvcHRpb25zLCBkaWZmcyBmb3IKKwltZXJnZWQgZW50cmllcyBhcmUgbm90IHNob3duLgorKworVGhlIGRlZmF1bHQgaXMgdG8gZGlmZiBhZ2FpbnN0IG91ciBicmFuY2ggKC0yKSBhbmQgdGhlCitjbGVhbmx5IHJlc29sdmVkIHBhdGhzLiAgVGhlIG9wdGlvbiAtMCBjYW4gYmUgZ2l2ZW4gdG8KK29taXQgZGlmZiBvdXRwdXQgZm9yIHVubWVyZ2VkIGVudHJpZXMgYW5kIGp1c3Qgc2hvdyAiVW5tZXJnZWQiLgorCistYzo6CistLWNjOjoKKwlUaGlzIGNvbXBhcmVzIHN0YWdlIDIgKG91ciBicmFuY2gpLCBzdGFnZSAzICh0aGVpcgorCWJyYW5jaCkgYW5kIHRoZSB3b3JraW5nIHRyZWUgZmlsZSBhbmQgb3V0cHV0cyBhIGNvbWJpbmVkCisJZGlmZiwgc2ltaWxhciB0byB0aGUgd2F5ICdkaWZmLXRyZWUnIHNob3dzIGEgbWVyZ2UKKwljb21taXQgd2l0aCB0aGVzZSBmbGFncy4KKworLXE6OgorCVJlbWFpbiBzaWxlbnQgZXZlbiBvbiBub25leGlzdGVudCBmaWxlcworCisKK2luY2x1ZGU6OmRpZmYtZm9ybWF0LnR4dFtdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLWluZGV4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODZjZjYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi1pbmRleC50eHQKQEAgLTAsMCArMSwxMjIgQEAKK2dpdC1kaWZmLWluZGV4KDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZGlmZi1pbmRleCAtIENvbXBhcmUgYSB0cmVlIHRvIHRoZSB3b3JraW5nIHRyZWUgb3IgaW5kZXgKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZGlmZi1pbmRleCcgWy1tXSBbLS1jYWNoZWRdIFs8Y29tbW9uIGRpZmYgb3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDb21wYXJlcyB0aGUgY29udGVudCBhbmQgbW9kZSBvZiB0aGUgYmxvYnMgZm91bmQgaW4gYSB0cmVlIG9iamVjdAord2l0aCB0aGUgY29ycmVzcG9uZGluZyB0cmFja2VkIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsIG9yIHdpdGggdGhlCitjb3JyZXNwb25kaW5nIHBhdGhzIGluIHRoZSBpbmRleC4gIFdoZW4gPHBhdGg+IGFyZ3VtZW50cyBhcmUgcHJlc2VudCwKK2NvbXBhcmVzIG9ubHkgcGF0aHMgbWF0Y2hpbmcgdGhvc2UgcGF0dGVybnMuICBPdGhlcndpc2UgYWxsIHRyYWNrZWQKK2ZpbGVzIGFyZSBjb21wYXJlZC4KKworT1BUSU9OUworLS0tLS0tLQoraW5jbHVkZTo6ZGlmZi1vcHRpb25zLnR4dFtdCisKKzx0cmVlLWlzaD46OgorCVRoZSBpZCBvZiBhIHRyZWUgb2JqZWN0IHRvIGRpZmYgYWdhaW5zdC4KKworLS1jYWNoZWQ6OgorCWRvIG5vdCBjb25zaWRlciB0aGUgb24tZGlzayBmaWxlIGF0IGFsbAorCistbTo6CisJQnkgZGVmYXVsdCwgZmlsZXMgcmVjb3JkZWQgaW4gdGhlIGluZGV4IGJ1dCBub3QgY2hlY2tlZAorCW91dCBhcmUgcmVwb3J0ZWQgYXMgZGVsZXRlZC4gIFRoaXMgZmxhZyBtYWtlcworCSdnaXQgZGlmZi1pbmRleCcgc2F5IHRoYXQgYWxsIG5vbi1jaGVja2VkLW91dCBmaWxlcyBhcmUgdXAKKwl0byBkYXRlLgorCitpbmNsdWRlOjpkaWZmLWZvcm1hdC50eHRbXQorCitPcGVyYXRpbmcgTW9kZXMKKy0tLS0tLS0tLS0tLS0tLQorWW91IGNhbiBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byB0cnVzdCB0aGUgaW5kZXggZmlsZSBlbnRpcmVseQorKHVzaW5nIHRoZSAnLS1jYWNoZWQnIGZsYWcpIG9yIGFzayB0aGUgZGlmZiBsb2dpYyB0byBzaG93IGFueSBmaWxlcwordGhhdCBkb24ndCBtYXRjaCB0aGUgc3RhdCBzdGF0ZSBhcyBiZWluZyAidGVudGF0aXZlbHkgY2hhbmdlZCIuICBCb3RoCitvZiB0aGVzZSBvcGVyYXRpb25zIGFyZSB2ZXJ5IHVzZWZ1bCBpbmRlZWQuCisKK0NhY2hlZCBNb2RlCistLS0tLS0tLS0tLQorSWYgJy0tY2FjaGVkJyBpcyBzcGVjaWZpZWQsIGl0IGFsbG93cyB5b3UgdG8gYXNrOgorCisJc2hvdyBtZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBIRUFEIGFuZCB0aGUgY3VycmVudCBpbmRleAorCWNvbnRlbnRzICh0aGUgb25lcyBJJ2Qgd3JpdGUgdXNpbmcgJ2dpdCB3cml0ZS10cmVlJykKKworRm9yIGV4YW1wbGUsIGxldCdzIHNheSB0aGF0IHlvdSBoYXZlIHdvcmtlZCBvbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LCB1cGRhdGVkCitzb21lIGZpbGVzIGluIHRoZSBpbmRleCBhbmQgYXJlIHJlYWR5IHRvIGNvbW1pdC4gWW91IHdhbnQgdG8gc2VlIGV4YWN0bHkKKyp3aGF0KiB5b3UgYXJlIGdvaW5nIHRvIGNvbW1pdCwgd2l0aG91dCBoYXZpbmcgdG8gd3JpdGUgYSBuZXcgdHJlZQorb2JqZWN0IGFuZCBjb21wYXJlIGl0IHRoYXQgd2F5LCBhbmQgdG8gZG8gdGhhdCwgeW91IGp1c3QgZG8KKworCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQKKworRXhhbXBsZTogbGV0J3Mgc2F5IEkgaGFkIHJlbmFtZWQgYGNvbW1pdC5jYCB0byBgZ2l0LWNvbW1pdC5jYCwgYW5kIEkgaGFkCitkb25lIGFuIGB1cGRhdGUtaW5kZXhgIHRvIG1ha2UgdGhhdCBlZmZlY3RpdmUgaW4gdGhlIGluZGV4IGZpbGUuCitgZ2l0IGRpZmYtZmlsZXNgIHdvdWxkbid0IHNob3cgYW55dGhpbmcgYXQgYWxsLCBzaW5jZSB0aGUgaW5kZXggZmlsZQorbWF0Y2hlcyBteSB3b3JraW5nIGRpcmVjdG9yeS4gQnV0IGRvaW5nIGEgJ2dpdCBkaWZmLWluZGV4JyBkb2VzOgorCisgIHRvcnZhbGRzQHBwYzk3MDp+L2dpdD4gZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRAorICAtMTAwNjQ0IGJsb2IgICAgNDE2MWFlY2M2NzAwYTJlYjU3OWU4NDJhZjBiN2YyMmI5ODQ0M2Y3NCAgICAgICAgY29tbWl0LmMKKyAgKzEwMDY0NCBibG9iICAgIDQxNjFhZWNjNjcwMGEyZWI1NzllODQyYWYwYjdmMjJiOTg0NDNmNzQgICAgICAgIGdpdC1jb21taXQuYworCitZb3UgY2FuIHNlZSBlYXNpbHkgdGhhdCB0aGUgYWJvdmUgaXMgYSByZW5hbWUuCisKK0luIGZhY3QsIGBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZGAgKnNob3VsZCogYWx3YXlzIGJlIGVudGlyZWx5IGVxdWl2YWxlbnQgdG8KK2FjdHVhbGx5IGRvaW5nIGEgJ2dpdCB3cml0ZS10cmVlJyBhbmQgY29tcGFyaW5nIHRoYXQuIEV4Y2VwdCB0aGlzIG9uZSBpcyBtdWNoCituaWNlciBmb3IgdGhlIGNhc2Ugd2hlcmUgeW91IGp1c3Qgd2FudCB0byBjaGVjayB3aGVyZSB5b3UgYXJlLgorCitTbyBkb2luZyBhIGBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZGAgaXMgYmFzaWNhbGx5IHZlcnkgdXNlZnVsIHdoZW4geW91IGFyZQorYXNraW5nIHlvdXJzZWxmICJ3aGF0IGhhdmUgSSBhbHJlYWR5IG1hcmtlZCBmb3IgYmVpbmcgY29tbWl0dGVkLCBhbmQKK3doYXQncyB0aGUgZGlmZmVyZW5jZSB0byBhIHByZXZpb3VzIHRyZWUiLgorCitOb24tY2FjaGVkIE1vZGUKKy0tLS0tLS0tLS0tLS0tLQorVGhlICJub24tY2FjaGVkIiBtb2RlIHRha2VzIGEgZGlmZmVyZW50IGFwcHJvYWNoLCBhbmQgaXMgcG90ZW50aWFsbHkKK3RoZSBtb3JlIHVzZWZ1bCBvZiB0aGUgdHdvIGluIHRoYXQgd2hhdCBpdCBkb2VzIGNhbid0IGJlIGVtdWxhdGVkIHdpdGgKK2EgJ2dpdCB3cml0ZS10cmVlJyArICdnaXQgZGlmZi10cmVlJy4gVGh1cyB0aGF0J3MgdGhlIGRlZmF1bHQgbW9kZS4KK1RoZSBub24tY2FjaGVkIHZlcnNpb24gYXNrcyB0aGUgcXVlc3Rpb246CisKKyAgc2hvdyBtZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBIRUFEIGFuZCB0aGUgY3VycmVudGx5IGNoZWNrZWQgb3V0CisgIHRyZWUgLSBpbmRleCBjb250ZW50cyBfYW5kXyBmaWxlcyB0aGF0IGFyZW4ndCB1cC10by1kYXRlCisKK3doaWNoIGlzIG9idmlvdXNseSBhIHZlcnkgdXNlZnVsIHF1ZXN0aW9uIHRvbywgc2luY2UgdGhhdCB0ZWxscyB5b3Ugd2hhdAoreW91ICpjb3VsZCogY29tbWl0LiBBZ2FpbiwgdGhlIG91dHB1dCBtYXRjaGVzIHRoZSAnZ2l0IGRpZmYtdHJlZSAtcicKK291dHB1dCB0byBhIHRlZSwgYnV0IHdpdGggYSB0d2lzdC4KKworVGhlIHR3aXN0IGlzIHRoYXQgaWYgc29tZSBmaWxlIGRvZXNuJ3QgbWF0Y2ggdGhlIGluZGV4LCB3ZSBkb24ndCBoYXZlCithIGJhY2tpbmcgc3RvcmUgdGhpbmcgZm9yIGl0LCBhbmQgd2UgdXNlIHRoZSBtYWdpYyAiYWxsLXplcm8iIHNoYTEgdG8KK3Nob3cgdGhhdC4gU28gbGV0J3Mgc2F5IHRoYXQgeW91IGhhdmUgZWRpdGVkIGBrZXJuZWwvc2NoZWQuY2AsIGJ1dAoraGF2ZSBub3QgYWN0dWFsbHkgZG9uZSBhICdnaXQgdXBkYXRlLWluZGV4JyBvbiBpdCB5ZXQgLSB0aGVyZSBpcyBubworIm9iamVjdCIgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXcgc3RhdGUsIGFuZCB5b3UgZ2V0OgorCisgIHRvcnZhbGRzQHBwYzk3MDp+L3YyLjYvbGludXg+IGdpdCBkaWZmLWluZGV4IC0tYWJicmV2IEhFQUQKKyAgOjEwMDY0NCAxMDA2NjQgNzQ3NmJiLi4uIDAwMDAwMC4uLiAgICAgIGtlcm5lbC9zY2hlZC5jCisKK2kuZS4sIGl0IHNob3dzIHRoYXQgdGhlIHRyZWUgaGFzIGNoYW5nZWQsIGFuZCB0aGF0IGBrZXJuZWwvc2NoZWQuY2AgaGFzIGlzCitub3QgdXAtdG8tZGF0ZSBhbmQgbWF5IGNvbnRhaW4gbmV3IHN0dWZmLiBUaGUgYWxsLXplcm8gc2hhMSBtZWFucyB0aGF0IHRvCitnZXQgdGhlIHJlYWwgZGlmZiwgeW91IG5lZWQgdG8gbG9vayBhdCB0aGUgb2JqZWN0IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeQorZGlyZWN0bHkgcmF0aGVyIHRoYW4gZG8gYW4gb2JqZWN0LXRvLW9iamVjdCBkaWZmLgorCitOT1RFOiBBcyB3aXRoIG90aGVyIGNvbW1hbmRzIG9mIHRoaXMgdHlwZSwgJ2dpdCBkaWZmLWluZGV4JyBkb2VzIG5vdAorYWN0dWFsbHkgbG9vayBhdCB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXQgYWxsLiBTbyBtYXliZQorYGtlcm5lbC9zY2hlZC5jYCBoYXNuJ3QgYWN0dWFsbHkgY2hhbmdlZCwgYW5kIGl0J3MganVzdCB0aGF0IHlvdQordG91Y2hlZCBpdC4gSW4gZWl0aGVyIGNhc2UsIGl0J3MgYSBub3RlIHRoYXQgeW91IG5lZWQgdG8KKydnaXQgdXBkYXRlLWluZGV4JyBpdCB0byBtYWtlIHRoZSBpbmRleCBiZSBpbiBzeW5jLgorCitOT1RFOiBZb3UgY2FuIGhhdmUgYSBtaXh0dXJlIG9mIGZpbGVzIHNob3cgdXAgYXMgImhhcyBiZWVuIHVwZGF0ZWQiCithbmQgImlzIHN0aWxsIGRpcnR5IGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSIgdG9nZXRoZXIuIFlvdSBjYW4gYWx3YXlzCit0ZWxsIHdoaWNoIGZpbGUgaXMgaW4gd2hpY2ggc3RhdGUsIHNpbmNlIHRoZSAiaGFzIGJlZW4gdXBkYXRlZCIgb25lcworc2hvdyBhIHZhbGlkIHNoYTEsIGFuZCB0aGUgIm5vdCBpbiBzeW5jIHdpdGggdGhlIGluZGV4IiBvbmVzIHdpbGwKK2Fsd2F5cyBoYXZlIHRoZSBzcGVjaWFsIGFsbC16ZXJvIHNoYTEuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzOTQ4NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWRpZmYtdHJlZS50eHQKQEAgLTAsMCArMSwxNjcgQEAKK2dpdC1kaWZmLXRyZWUoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWRpZmYtdHJlZSAtIENvbXBhcmVzIHRoZSBjb250ZW50IGFuZCBtb2RlIG9mIGJsb2JzIGZvdW5kIHZpYSB0d28gdHJlZSBvYmplY3RzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGRpZmYtdHJlZScgWy0tc3RkaW5dIFstbV0gWy1zXSBbLXZdIFstLW5vLWNvbW1pdC1pZF0gWy0tcHJldHR5XQorCSAgICAgIFstdF0gWy1yXSBbLWMgfCAtLWNjXSBbLS1yb290XSBbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XQorCSAgICAgIDx0cmVlLWlzaD4gWzx0cmVlLWlzaD5dIFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQ29tcGFyZXMgdGhlIGNvbnRlbnQgYW5kIG1vZGUgb2YgdGhlIGJsb2JzIGZvdW5kIHZpYSB0d28gdHJlZSBvYmplY3RzLgorCitJZiB0aGVyZSBpcyBvbmx5IG9uZSA8dHJlZS1pc2g+IGdpdmVuLCB0aGUgY29tbWl0IGlzIGNvbXBhcmVkIHdpdGggaXRzIHBhcmVudHMKKyhzZWUgLS1zdGRpbiBiZWxvdykuCisKK05vdGUgdGhhdCAnZ2l0IGRpZmYtdHJlZScgY2FuIHVzZSB0aGUgdHJlZSBlbmNhcHN1bGF0ZWQgaW4gYSBjb21taXQgb2JqZWN0LgorCitPUFRJT05TCistLS0tLS0tCitpbmNsdWRlOjpkaWZmLW9wdGlvbnMudHh0W10KKworPHRyZWUtaXNoPjo6CisJVGhlIGlkIG9mIGEgdHJlZSBvYmplY3QuCisKKzxwYXRoPi4uLjo6CisJSWYgcHJvdmlkZWQsIHRoZSByZXN1bHRzIGFyZSBsaW1pdGVkIHRvIGEgc3Vic2V0IG9mIGZpbGVzCisJbWF0Y2hpbmcgb25lIG9mIHRoZXNlIHByZWZpeCBzdHJpbmdzLgorCWkuZS4sIGZpbGUgbWF0Y2hlcyBgL148cGF0dGVybjE+fDxwYXR0ZXJuMj58Li4uL2AKKwlOb3RlIHRoYXQgdGhpcyBwYXJhbWV0ZXIgZG9lcyBub3QgcHJvdmlkZSBhbnkgd2lsZGNhcmQgb3IgcmVnZXhwCisJZmVhdHVyZXMuCisKKy1yOjoKKyAgICAgICAgcmVjdXJzZSBpbnRvIHN1Yi10cmVlcworCistdDo6CisJc2hvdyB0cmVlIGVudHJ5IGl0c2VsZiBhcyB3ZWxsIGFzIHN1YnRyZWVzLiAgSW1wbGllcyAtci4KKworLS1yb290OjoKKwlXaGVuICctLXJvb3QnIGlzIHNwZWNpZmllZCB0aGUgaW5pdGlhbCBjb21taXQgd2lsbCBiZSBzaG93biBhcyBhIGJpZworCWNyZWF0aW9uIGV2ZW50LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBkaWZmIGFnYWluc3QgdGhlIE5VTEwgdHJlZS4KKworLS1zdGRpbjo6CisJV2hlbiAnLS1zdGRpbicgaXMgc3BlY2lmaWVkLCB0aGUgY29tbWFuZCBkb2VzIG5vdCB0YWtlCisJPHRyZWUtaXNoPiBhcmd1bWVudHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiAgSW5zdGVhZCwgaXQKKwlyZWFkcyBsaW5lcyBjb250YWluaW5nIGVpdGhlciB0d28gPHRyZWU+LCBvbmUgPGNvbW1pdD4sIG9yIGEKKwlsaXN0IG9mIDxjb21taXQ+IGZyb20gaXRzIHN0YW5kYXJkIGlucHV0LiAgKFVzZSBhIHNpbmdsZSBzcGFjZQorCWFzIHNlcGFyYXRvci4pCisrCitXaGVuIHR3byB0cmVlcyBhcmUgZ2l2ZW4sIGl0IGNvbXBhcmVzIHRoZSBmaXJzdCB0cmVlIHdpdGggdGhlIHNlY29uZC4KK1doZW4gYSBzaW5nbGUgY29tbWl0IGlzIGdpdmVuLCBpdCBjb21wYXJlcyB0aGUgY29tbWl0IHdpdGggaXRzCitwYXJlbnRzLiAgVGhlIHJlbWFpbmluZyBjb21taXRzLCB3aGVuIGdpdmVuLCBhcmUgdXNlZCBhcyBpZiB0aGV5IGFyZQorcGFyZW50cyBvZiB0aGUgZmlyc3QgY29tbWl0LgorKworV2hlbiBjb21wYXJpbmcgdHdvIHRyZWVzLCB0aGUgSUQgb2YgYm90aCB0cmVlcyAoc2VwYXJhdGVkIGJ5IGEgc3BhY2UKK2FuZCB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZSkgaXMgcHJpbnRlZCBiZWZvcmUgdGhlIGRpZmZlcmVuY2UuICBXaGVuCitjb21wYXJpbmcgY29tbWl0cywgdGhlIElEIG9mIHRoZSBmaXJzdCAob3Igb25seSkgY29tbWl0LCBmb2xsb3dlZCBieSBhCituZXdsaW5lLCBpcyBwcmludGVkLgorKworVGhlIGZvbGxvd2luZyBmbGFncyBmdXJ0aGVyIGFmZmVjdCB0aGUgYmVoYXZpb3Igd2hlbiBjb21wYXJpbmcKK2NvbW1pdHMgKGJ1dCBub3QgdHJlZXMpLgorCistbTo6CisJQnkgZGVmYXVsdCwgJ2dpdCBkaWZmLXRyZWUgLS1zdGRpbicgZG9lcyBub3Qgc2hvdworCWRpZmZlcmVuY2VzIGZvciBtZXJnZSBjb21taXRzLiAgV2l0aCB0aGlzIGZsYWcsIGl0IHNob3dzCisJZGlmZmVyZW5jZXMgdG8gdGhhdCBjb21taXQgZnJvbSBhbGwgb2YgaXRzIHBhcmVudHMuIFNlZQorCWFsc28gJy1jJy4KKworLXM6OgorCUJ5IGRlZmF1bHQsICdnaXQgZGlmZi10cmVlIC0tc3RkaW4nIHNob3dzIGRpZmZlcmVuY2VzLAorCWVpdGhlciBpbiBtYWNoaW5lLXJlYWRhYmxlIGZvcm0gKHdpdGhvdXQgJy1wJykgb3IgaW4gcGF0Y2gKKwlmb3JtICh3aXRoICctcCcpLiAgVGhpcyBvdXRwdXQgY2FuIGJlIHN1cHByZXNzZWQuICBJdCBpcworCW9ubHkgdXNlZnVsIHdpdGggJy12JyBmbGFnLgorCistdjo6CisJVGhpcyBmbGFnIGNhdXNlcyAnZ2l0IGRpZmYtdHJlZSAtLXN0ZGluJyB0byBhbHNvIHNob3cKKwl0aGUgY29tbWl0IG1lc3NhZ2UgYmVmb3JlIHRoZSBkaWZmZXJlbmNlcy4KKworaW5jbHVkZTo6cHJldHR5LW9wdGlvbnMudHh0W10KKworLS1uby1jb21taXQtaWQ6OgorCSdnaXQgZGlmZi10cmVlJyBvdXRwdXRzIGEgbGluZSB3aXRoIHRoZSBjb21taXQgSUQgd2hlbgorCWFwcGxpY2FibGUuICBUaGlzIGZsYWcgc3VwcHJlc3NlZCB0aGUgY29tbWl0IElEIG91dHB1dC4KKworLWM6OgorCVRoaXMgZmxhZyBjaGFuZ2VzIHRoZSB3YXkgYSBtZXJnZSBjb21taXQgaXMgZGlzcGxheWVkCisJKHdoaWNoIG1lYW5zIGl0IGlzIHVzZWZ1bCBvbmx5IHdoZW4gdGhlIGNvbW1hbmQgaXMgZ2l2ZW4KKwlvbmUgPHRyZWUtaXNoPiwgb3IgJy0tc3RkaW4nKS4gIEl0IHNob3dzIHRoZSBkaWZmZXJlbmNlcworCWZyb20gZWFjaCBvZiB0aGUgcGFyZW50cyB0byB0aGUgbWVyZ2UgcmVzdWx0IHNpbXVsdGFuZW91c2x5CisJaW5zdGVhZCBvZiBzaG93aW5nIHBhaXJ3aXNlIGRpZmYgYmV0d2VlbiBhIHBhcmVudCBhbmQgdGhlCisJcmVzdWx0IG9uZSBhdCBhIHRpbWUgKHdoaWNoIGlzIHdoYXQgdGhlICctbScgb3B0aW9uIGRvZXMpLgorCUZ1cnRoZXJtb3JlLCBpdCBsaXN0cyBvbmx5IGZpbGVzIHdoaWNoIHdlcmUgbW9kaWZpZWQKKwlmcm9tIGFsbCBwYXJlbnRzLgorCistLWNjOjoKKwlUaGlzIGZsYWcgY2hhbmdlcyB0aGUgd2F5IGEgbWVyZ2UgY29tbWl0IHBhdGNoIGlzIGRpc3BsYXllZCwKKwlpbiBhIHNpbWlsYXIgd2F5IHRvIHRoZSAnLWMnIG9wdGlvbi4gSXQgaW1wbGllcyB0aGUgJy1jJworCWFuZCAnLXAnIG9wdGlvbnMgYW5kIGZ1cnRoZXIgY29tcHJlc3NlcyB0aGUgcGF0Y2ggb3V0cHV0CisJYnkgb21pdHRpbmcgdW5pbnRlcmVzdGluZyBodW5rcyB3aG9zZSB0aGUgY29udGVudHMgaW4gdGhlIHBhcmVudHMKKwloYXZlIG9ubHkgdHdvIHZhcmlhbnRzIGFuZCB0aGUgbWVyZ2UgcmVzdWx0IHBpY2tzIG9uZSBvZiB0aGVtCisJd2l0aG91dCBtb2RpZmljYXRpb24uICBXaGVuIGFsbCBodW5rcyBhcmUgdW5pbnRlcmVzdGluZywgdGhlIGNvbW1pdAorCWl0c2VsZiBhbmQgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpcyBub3Qgc2hvd24sIGp1c3QgbGlrZSBpbiBhbnkgb3RoZXIKKwkiZW1wdHkgZGlmZiIgY2FzZS4KKworLS1hbHdheXM6OgorCVNob3cgdGhlIGNvbW1pdCBpdHNlbGYgYW5kIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgZXZlbgorCWlmIHRoZSBkaWZmIGl0c2VsZiBpcyBlbXB0eS4KKworCitpbmNsdWRlOjpwcmV0dHktZm9ybWF0cy50eHRbXQorCisKK0xpbWl0aW5nIE91dHB1dAorLS0tLS0tLS0tLS0tLS0tCitJZiB5b3UncmUgb25seSBpbnRlcmVzdGVkIGluIGRpZmZlcmVuY2VzIGluIGEgc3Vic2V0IG9mIGZpbGVzLCBmb3IKK2V4YW1wbGUgc29tZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmlsZXMsIHlvdSBtaWdodCBkbzoKKworCWdpdCBkaWZmLXRyZWUgLXIgPHRyZWUtaXNoPiA8dHJlZS1pc2g+IGFyY2gvaWE2NCBpbmNsdWRlL2FzbS1pYTY0CisKK2FuZCBpdCB3aWxsIG9ubHkgc2hvdyB5b3Ugd2hhdCBjaGFuZ2VkIGluIHRob3NlIHR3byBkaXJlY3Rvcmllcy4KKworT3IgaWYgeW91IGFyZSBzZWFyY2hpbmcgZm9yIHdoYXQgY2hhbmdlZCBpbiBqdXN0IGBrZXJuZWwvc2NoZWQuY2AsIGp1c3QgZG8KKworCWdpdCBkaWZmLXRyZWUgLXIgPHRyZWUtaXNoPiA8dHJlZS1pc2g+IGtlcm5lbC9zY2hlZC5jCisKK2FuZCBpdCB3aWxsIGlnbm9yZSBhbGwgZGlmZmVyZW5jZXMgdG8gb3RoZXIgZmlsZXMuCisKK1RoZSBwYXR0ZXJuIGlzIGFsd2F5cyB0aGUgcHJlZml4LCBhbmQgaXMgbWF0Y2hlZCBleGFjdGx5LiAgVGhlcmUgYXJlIG5vCit3aWxkY2FyZHMuICBFdmVuIHN0cmljdGVyLCBpdCBoYXMgdG8gbWF0Y2ggYSBjb21wbGV0ZSBwYXRoIGNvbXBvbmVudC4KK0kuZS4gImZvbyIgZG9lcyBub3QgcGljayB1cCBgZm9vYmFyLmhgLiAgImZvbyIgZG9lcyBtYXRjaCBgZm9vL2Jhci5oYAorc28gaXQgY2FuIGJlIHVzZWQgdG8gbmFtZSBzdWJkaXJlY3Rvcmllcy4KKworQW4gZXhhbXBsZSBvZiBub3JtYWwgdXNhZ2UgaXM6CisKKyAgdG9ydmFsZHNAcHBjOTcwOn4vZ2l0PiBnaXQgZGlmZi10cmVlIC0tYWJicmV2IDUzMTllNAorICA6MTAwNjY0IDEwMDY2NCBhYzM0OGIuLi4gYTAxNTEzLi4uCWdpdC1mc2NrLW9iamVjdHMuYworCit3aGljaCB0ZWxscyB5b3UgdGhhdCB0aGUgbGFzdCBjb21taXQgY2hhbmdlZCBqdXN0IG9uZSBmaWxlIChpdCdzIGZyb20KK3RoaXMgb25lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29tbWl0IDNjNmY3Y2ExOWFkNDA0M2U5ZTcyZmE5NDEwNmYzNTI4OTdlNjUxYTgKK3RyZWUgNTMxOWU0ZDYwOWNkZDI4MjA2OWNjNGRjZTMzYzFkYjU1OTUzOWIwMworcGFyZW50IGI0ZTYyOGVhMzBkNWFiMzYwNjExOWQyZWE1Y2FlYWIxNDFkMzhkZjcKK2F1dGhvciBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAcHBjOTcwLm9zZGwub3JnPiBTYXQgQXByIDkgMTI6MDI6MzAgMjAwNQorY29tbWl0dGVyIExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BwcGM5NzAub3NkbC5vcmc+IFNhdCBBcHIgOSAxMjowMjozMCAyMDA1CisKK01ha2UgImdpdC1mc2NrLW9iamVjdHMiIHByaW50IG91dCBhbGwgdGhlIHJvb3QgY29tbWl0cyBpdCBmaW5kcy4KKworT25jZSBJIGRvIHRoZSByZWZlcmVuY2UgdHJhY2tpbmcsIEknbGwgYWxzbyBtYWtlIGl0IHByaW50IG91dCBhbGwgdGhlCitIRUFEIGNvbW1pdHMgaXQgZmluZHMsIHdoaWNoIGlzIGV2ZW4gbW9yZSBpbnRlcmVzdGluZy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2luIGNhc2UgeW91IGNhcmUpLgorCisKK2luY2x1ZGU6OmRpZmYtZm9ybWF0LnR4dFtdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmFiMzVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZi50eHQKQEAgLTAsMCArMSwxODkgQEAKK2dpdC1kaWZmKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZGlmZiAtIFNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZGlmZicgW29wdGlvbnNdIFs8Y29tbWl0Pl0gWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBkaWZmJyBbb3B0aW9uc10gLS1jYWNoZWQgWzxjb21taXQ+XSBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IGRpZmYnIFtvcHRpb25zXSA8Y29tbWl0PiA8Y29tbWl0PiBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IGRpZmYnIFtvcHRpb25zXSA8YmxvYj4gPGJsb2I+CisnZ2l0IGRpZmYnIFtvcHRpb25zXSBbLS1uby1pbmRleF0gWy0tXSA8cGF0aD4gPHBhdGg+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU2hvdyBjaGFuZ2VzIGJldHdlZW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IG9yIGEgdHJlZSwgY2hhbmdlcworYmV0d2VlbiB0aGUgaW5kZXggYW5kIGEgdHJlZSwgY2hhbmdlcyBiZXR3ZWVuIHR3byB0cmVlcywgY2hhbmdlcyBiZXR3ZWVuCit0d28gYmxvYiBvYmplY3RzLCBvciBjaGFuZ2VzIGJldHdlZW4gdHdvIGZpbGVzIG9uIGRpc2suCisKKydnaXQgZGlmZicgWy0tb3B0aW9uc10gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgY2hhbmdlcyB5b3UgbWFkZSByZWxhdGl2ZSB0bworCXRoZSBpbmRleCAoc3RhZ2luZyBhcmVhIGZvciB0aGUgbmV4dCBjb21taXQpLiAgSW4gb3RoZXIKKwl3b3JkcywgdGhlIGRpZmZlcmVuY2VzIGFyZSB3aGF0IHlvdSBfY291bGRfIHRlbGwgR2l0IHRvCisJZnVydGhlciBhZGQgdG8gdGhlIGluZGV4IGJ1dCB5b3Ugc3RpbGwgaGF2ZW4ndC4gIFlvdSBjYW4KKwlzdGFnZSB0aGVzZSBjaGFuZ2VzIGJ5IHVzaW5nIGxpbmtnaXQ6Z2l0LWFkZFsxXS4KKworJ2dpdCBkaWZmJyAtLW5vLWluZGV4IFstLW9wdGlvbnNdIFstLV0gWzxwYXRoPi4uLl06OgorCisJVGhpcyBmb3JtIGlzIHRvIGNvbXBhcmUgdGhlIGdpdmVuIHR3byBwYXRocyBvbiB0aGUKKwlmaWxlc3lzdGVtLiAgWW91IGNhbiBvbWl0IHRoZSBgLS1uby1pbmRleGAgb3B0aW9uIHdoZW4KKwlydW5uaW5nIHRoZSBjb21tYW5kIGluIGEgd29ya2luZyB0cmVlIGNvbnRyb2xsZWQgYnkgR2l0IGFuZAorCWF0IGxlYXN0IG9uZSBvZiB0aGUgcGF0aHMgcG9pbnRzIG91dHNpZGUgdGhlIHdvcmtpbmcgdHJlZSwKKwlvciB3aGVuIHJ1bm5pbmcgdGhlIGNvbW1hbmQgb3V0c2lkZSBhIHdvcmtpbmcgdHJlZQorCWNvbnRyb2xsZWQgYnkgR2l0LgorCisnZ2l0IGRpZmYnIFstLW9wdGlvbnNdIC0tY2FjaGVkIFs8Y29tbWl0Pl0gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgY2hhbmdlcyB5b3Ugc3RhZ2VkIGZvciB0aGUgbmV4dAorCWNvbW1pdCByZWxhdGl2ZSB0byB0aGUgbmFtZWQgPGNvbW1pdD4uICBUeXBpY2FsbHkgeW91CisJd291bGQgd2FudCBjb21wYXJpc29uIHdpdGggdGhlIGxhdGVzdCBjb21taXQsIHNvIGlmIHlvdQorCWRvIG5vdCBnaXZlIDxjb21taXQ+LCBpdCBkZWZhdWx0cyB0byBIRUFELgorCUlmIEhFQUQgZG9lcyBub3QgZXhpc3QgKGUuZy4gdW5ib3JuIGJyYW5jaGVzKSBhbmQKKwk8Y29tbWl0PiBpcyBub3QgZ2l2ZW4sIGl0IHNob3dzIGFsbCBzdGFnZWQgY2hhbmdlcy4KKwktLXN0YWdlZCBpcyBhIHN5bm9ueW0gb2YgLS1jYWNoZWQuCisKKydnaXQgZGlmZicgWy0tb3B0aW9uc10gPGNvbW1pdD4gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgY2hhbmdlcyB5b3UgaGF2ZSBpbiB5b3VyCisJd29ya2luZyB0cmVlIHJlbGF0aXZlIHRvIHRoZSBuYW1lZCA8Y29tbWl0Pi4gIFlvdSBjYW4KKwl1c2UgSEVBRCB0byBjb21wYXJlIGl0IHdpdGggdGhlIGxhdGVzdCBjb21taXQsIG9yIGEKKwlicmFuY2ggbmFtZSB0byBjb21wYXJlIHdpdGggdGhlIHRpcCBvZiBhIGRpZmZlcmVudAorCWJyYW5jaC4KKworJ2dpdCBkaWZmJyBbLS1vcHRpb25zXSA8Y29tbWl0PiA8Y29tbWl0PiBbLS1dIFs8cGF0aD4uLi5dOjoKKworCVRoaXMgaXMgdG8gdmlldyB0aGUgY2hhbmdlcyBiZXR3ZWVuIHR3byBhcmJpdHJhcnkKKwk8Y29tbWl0Pi4KKworJ2dpdCBkaWZmJyBbLS1vcHRpb25zXSA8Y29tbWl0Pi4uPGNvbW1pdD4gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGlzIHN5bm9ueW1vdXMgdG8gdGhlIHByZXZpb3VzIGZvcm0uICBJZiA8Y29tbWl0PiBvbgorCW9uZSBzaWRlIGlzIG9taXR0ZWQsIGl0IHdpbGwgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMKKwl1c2luZyBIRUFEIGluc3RlYWQuCisKKydnaXQgZGlmZicgWy0tb3B0aW9uc10gPGNvbW1pdD5cLi4uPGNvbW1pdD4gWy0tXSBbPHBhdGg+Li4uXTo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgY2hhbmdlcyBvbiB0aGUgYnJhbmNoIGNvbnRhaW5pbmcKKwlhbmQgdXAgdG8gdGhlIHNlY29uZCA8Y29tbWl0Piwgc3RhcnRpbmcgYXQgYSBjb21tb24gYW5jZXN0b3IKKwlvZiBib3RoIDxjb21taXQ+LiAgImdpdCBkaWZmIEFcLi4uQiIgaXMgZXF1aXZhbGVudCB0bworCSJnaXQgZGlmZiAkKGdpdC1tZXJnZS1iYXNlIEEgQikgQiIuICBZb3UgY2FuIG9taXQgYW55IG9uZQorCW9mIDxjb21taXQ+LCB3aGljaCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHVzaW5nIEhFQUQgaW5zdGVhZC4KKworSnVzdCBpbiBjYXNlIGlmIHlvdSBhcmUgZG9pbmcgc29tZXRoaW5nIGV4b3RpYywgaXQgc2hvdWxkIGJlCitub3RlZCB0aGF0IGFsbCBvZiB0aGUgPGNvbW1pdD4gaW4gdGhlIGFib3ZlIGRlc2NyaXB0aW9uLCBleGNlcHQKK2luIHRoZSBsYXN0IHR3byBmb3JtcyB0aGF0IHVzZSAiLi4iIG5vdGF0aW9ucywgY2FuIGJlIGFueQorPHRyZWU+LgorCitGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCA8Y29tbWl0Piwgc2VlCisiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCitIb3dldmVyLCAiZGlmZiIgaXMgYWJvdXQgY29tcGFyaW5nIHR3byBfZW5kcG9pbnRzXywgbm90IHJhbmdlcywKK2FuZCB0aGUgcmFuZ2Ugbm90YXRpb25zICgiPGNvbW1pdD4uLjxjb21taXQ+IiBhbmQKKyI8Y29tbWl0PlwuLi48Y29tbWl0PiIpIGRvIG5vdCBtZWFuIGEgcmFuZ2UgYXMgZGVmaW5lZCBpbiB0aGUKKyJTUEVDSUZZSU5HIFJBTkdFUyIgc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KKworJ2dpdCBkaWZmJyBbb3B0aW9uc10gPGJsb2I+IDxibG9iPjo6CisKKwlUaGlzIGZvcm0gaXMgdG8gdmlldyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgcmF3CisJY29udGVudHMgb2YgdHdvIGJsb2Igb2JqZWN0cy4KKworT1BUSU9OUworLS0tLS0tLQorOmdpdC1kaWZmOiAxCitpbmNsdWRlOjpkaWZmLW9wdGlvbnMudHh0W10KKworPHBhdGg+Li4uOjoKKwlUaGUgPHBhdGhzPiBwYXJhbWV0ZXJzLCB3aGVuIGdpdmVuLCBhcmUgdXNlZCB0byBsaW1pdAorCXRoZSBkaWZmIHRvIHRoZSBuYW1lZCBwYXRocyAoeW91IGNhbiBnaXZlIGRpcmVjdG9yeQorCW5hbWVzIGFuZCBnZXQgZGlmZiBmb3IgYWxsIGZpbGVzIHVuZGVyIHRoZW0pLgorCisKK2luY2x1ZGU6OmRpZmYtZm9ybWF0LnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitWYXJpb3VzIHdheXMgdG8gY2hlY2sgeW91ciB3b3JraW5nIHRyZWU6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmICAgICAgICAgICAgPDE+CiskIGdpdCBkaWZmIC0tY2FjaGVkICAgPDI+CiskIGdpdCBkaWZmIEhFQUQgICAgICAgPDM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBDaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgbm90IHlldCBzdGFnZWQgZm9yIHRoZSBuZXh0IGNvbW1pdC4KKzwyPiBDaGFuZ2VzIGJldHdlZW4gdGhlIGluZGV4IGFuZCB5b3VyIGxhc3QgY29tbWl0OyB3aGF0IHlvdQord291bGQgYmUgY29tbWl0dGluZyBpZiB5b3UgcnVuICJnaXQgY29tbWl0IiB3aXRob3V0ICItYSIgb3B0aW9uLgorPDM+IENoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBzaW5jZSB5b3VyIGxhc3QgY29tbWl0OyB3aGF0IHlvdQord291bGQgYmUgY29tbWl0dGluZyBpZiB5b3UgcnVuICJnaXQgY29tbWl0IC1hIgorCitDb21wYXJpbmcgd2l0aCBhcmJpdHJhcnkgY29tbWl0czo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgdGVzdCAgICAgICAgICAgIDwxPgorJCBnaXQgZGlmZiBIRUFEIC0tIC4vdGVzdCAgPDI+CiskIGdpdCBkaWZmIEhFQUReIEhFQUQgICAgICA8Mz4KKy0tLS0tLS0tLS0tLQorKworPDE+IEluc3RlYWQgb2YgdXNpbmcgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2gsIGNvbXBhcmUgd2l0aCB0aGUKK3RpcCBvZiAidGVzdCIgYnJhbmNoLgorPDI+IEluc3RlYWQgb2YgY29tcGFyaW5nIHdpdGggdGhlIHRpcCBvZiAidGVzdCIgYnJhbmNoLCBjb21wYXJlIHdpdGgKK3RoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoLCBidXQgbGltaXQgdGhlIGNvbXBhcmlzb24gdG8gdGhlCitmaWxlICJ0ZXN0Ii4KKzwzPiBDb21wYXJlIHRoZSB2ZXJzaW9uIGJlZm9yZSB0aGUgbGFzdCBjb21taXQgYW5kIHRoZSBsYXN0IGNvbW1pdC4KKworQ29tcGFyaW5nIGJyYW5jaGVzOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiB0b3BpYyBtYXN0ZXIgICAgPDE+CiskIGdpdCBkaWZmIHRvcGljLi5tYXN0ZXIgICA8Mj4KKyQgZ2l0IGRpZmYgdG9waWMuLi5tYXN0ZXIgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gQ2hhbmdlcyBiZXR3ZWVuIHRoZSB0aXBzIG9mIHRoZSB0b3BpYyBhbmQgdGhlIG1hc3RlciBicmFuY2hlcy4KKzwyPiBTYW1lIGFzIGFib3ZlLgorPDM+IENoYW5nZXMgdGhhdCBvY2N1cnJlZCBvbiB0aGUgbWFzdGVyIGJyYW5jaCBzaW5jZSB3aGVuIHRoZSB0b3BpYworYnJhbmNoIHdhcyBzdGFydGVkIG9mZiBpdC4KKworTGltaXRpbmcgdGhlIGRpZmYgb3V0cHV0OjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiAtLWRpZmYtZmlsdGVyPU1SQyAgICAgICAgICAgIDwxPgorJCBnaXQgZGlmZiAtLW5hbWUtc3RhdHVzICAgICAgICAgICAgICAgIDwyPgorJCBnaXQgZGlmZiBhcmNoL2kzODYgaW5jbHVkZS9hc20taTM4NiAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gU2hvdyBvbmx5IG1vZGlmaWNhdGlvbiwgcmVuYW1lLCBhbmQgY29weSwgYnV0IG5vdCBhZGRpdGlvbgorb3IgZGVsZXRpb24uCis8Mj4gU2hvdyBvbmx5IG5hbWVzIGFuZCB0aGUgbmF0dXJlIG9mIGNoYW5nZSwgYnV0IG5vdCBhY3R1YWwKK2RpZmYgb3V0cHV0LgorPDM+IExpbWl0IGRpZmYgb3V0cHV0IHRvIG5hbWVkIHN1YnRyZWVzLgorCitNdW5naW5nIHRoZSBkaWZmIG91dHB1dDo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgLS1maW5kLWNvcGllcy1oYXJkZXIgLUIgLUMgIDwxPgorJCBnaXQgZGlmZiAtUiAgICAgICAgICAgICAgICAgICAgICAgICAgPDI+CistLS0tLS0tLS0tLS0KKysKKzwxPiBTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCByZW5hbWVzLCBjb3BpZXMgYW5kIGNvbXBsZXRlCityZXdyaXRlcyAodmVyeSBleHBlbnNpdmUpLgorPDI+IE91dHB1dCBkaWZmIGluIHJldmVyc2UuCisKK1NFRSBBTFNPCistLS0tLS0tLQorZGlmZigxKSwKK2xpbmtnaXQ6Z2l0LWRpZmZ0b29sWzFdLAorbGlua2dpdDpnaXQtbG9nWzFdLAorbGlua2dpdDpnaXRkaWZmY29yZVs3XSwKK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSwKK2xpbmtnaXQ6Z2l0LWFwcGx5WzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZGlmZnRvb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzM2NmNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1kaWZmdG9vbC50eHQKQEAgLTAsMCArMSwxNDYgQEAKK2dpdC1kaWZmdG9vbCgxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1kaWZmdG9vbCAtIFNob3cgY2hhbmdlcyB1c2luZyBjb21tb24gZGlmZiB0b29scworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZGlmZnRvb2wnIFs8b3B0aW9ucz5dIFs8Y29tbWl0PiBbPGNvbW1pdD5dXSBbLS1dIFs8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorJ2dpdCBkaWZmdG9vbCcgaXMgYSBHaXQgY29tbWFuZCB0aGF0IGFsbG93cyB5b3UgdG8gY29tcGFyZSBhbmQgZWRpdCBmaWxlcworYmV0d2VlbiByZXZpc2lvbnMgdXNpbmcgY29tbW9uIGRpZmYgdG9vbHMuICAnZ2l0IGRpZmZ0b29sJyBpcyBhIGZyb250ZW5kCit0byAnZ2l0IGRpZmYnIGFuZCBhY2NlcHRzIHRoZSBzYW1lIG9wdGlvbnMgYW5kIGFyZ3VtZW50cy4gU2VlCitsaW5rZ2l0OmdpdC1kaWZmWzFdLgorCitPUFRJT05TCistLS0tLS0tCistZDo6CistLWRpci1kaWZmOjoKKwlDb3B5IHRoZSBtb2RpZmllZCBmaWxlcyB0byBhIHRlbXBvcmFyeSBsb2NhdGlvbiBhbmQgcGVyZm9ybQorCWEgZGlyZWN0b3J5IGRpZmYgb24gdGhlbS4gVGhpcyBtb2RlIG5ldmVyIHByb21wdHMgYmVmb3JlCisJbGF1bmNoaW5nIHRoZSBkaWZmIHRvb2wuCisKKy15OjoKKy0tbm8tcHJvbXB0OjoKKwlEbyBub3QgcHJvbXB0IGJlZm9yZSBsYXVuY2hpbmcgYSBkaWZmIHRvb2wuCisKKy0tcHJvbXB0OjoKKwlQcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgZGlmZiB0b29sLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyOyB0aGUgb3B0aW9uIGlzIHByb3ZpZGVkIHRvCisJb3ZlcnJpZGUgYW55IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCisKKy10IDx0b29sPjo6CistLXRvb2w9PHRvb2w+OjoKKwlVc2UgdGhlIGRpZmYgdG9vbCBzcGVjaWZpZWQgYnkgPHRvb2w+LiAgVmFsaWQgdmFsdWVzIGluY2x1ZGUKKwllbWVyZ2UsIGtvbXBhcmUsIG1lbGQsIGFuZCB2aW1kaWZmLiBSdW4gYGdpdCBkaWZmdG9vbCAtLXRvb2wtaGVscGAKKwlmb3IgdGhlIGxpc3Qgb2YgdmFsaWQgPHRvb2w+IHNldHRpbmdzLgorKworSWYgYSBkaWZmIHRvb2wgaXMgbm90IHNwZWNpZmllZCwgJ2dpdCBkaWZmdG9vbCcKK3dpbGwgdXNlIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBkaWZmLnRvb2xgLiAgSWYgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBkaWZmLnRvb2xgIGlzIG5vdCBzZXQsICdnaXQgZGlmZnRvb2wnCit3aWxsIHBpY2sgYSBzdWl0YWJsZSBkZWZhdWx0LgorKworWW91IGNhbiBleHBsaWNpdGx5IHByb3ZpZGUgYSBmdWxsIHBhdGggdG8gdGhlIHRvb2wgYnkgc2V0dGluZyB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGRpZmZ0b29sLjx0b29sPi5wYXRoYC4gRm9yIGV4YW1wbGUsIHlvdQorY2FuIGNvbmZpZ3VyZSB0aGUgYWJzb2x1dGUgcGF0aCB0byBrZGlmZjMgYnkgc2V0dGluZworYGRpZmZ0b29sLmtkaWZmMy5wYXRoYC4gT3RoZXJ3aXNlLCAnZ2l0IGRpZmZ0b29sJyBhc3N1bWVzIHRoZQordG9vbCBpcyBhdmFpbGFibGUgaW4gUEFUSC4KKysKK0luc3RlYWQgb2YgcnVubmluZyBvbmUgb2YgdGhlIGtub3duIGRpZmYgdG9vbHMsCisnZ2l0IGRpZmZ0b29sJyBjYW4gYmUgY3VzdG9taXplZCB0byBydW4gYW4gYWx0ZXJuYXRpdmUgcHJvZ3JhbQorYnkgc3BlY2lmeWluZyB0aGUgY29tbWFuZCBsaW5lIHRvIGludm9rZSBpbiBhIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIGBkaWZmdG9vbC48dG9vbD4uY21kYC4KKysKK1doZW4gJ2dpdCBkaWZmdG9vbCcgaXMgaW52b2tlZCB3aXRoIHRoaXMgdG9vbCAoZWl0aGVyIHRocm91Z2ggdGhlCitgLXRgIG9yIGAtLXRvb2xgIG9wdGlvbiBvciB0aGUgYGRpZmYudG9vbGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSkKK3RoZSBjb25maWd1cmVkIGNvbW1hbmQgbGluZSB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgZm9sbG93aW5nCit2YXJpYWJsZXMgYXZhaWxhYmxlOiBgJExPQ0FMYCBpcyBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeQorZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgZGlmZiBwcmUtaW1hZ2UgYW5kIGAkUkVNT1RFYAoraXMgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIHRoZSBjb250ZW50cworb2YgdGhlIGRpZmYgcG9zdC1pbWFnZS4gIGAkTUVSR0VEYCBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3aGljaCBpcworYmVpbmcgY29tcGFyZWQuIGAkQkFTRWAgaXMgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkKK3dpdGggY3VzdG9tIG1lcmdlIHRvb2wgY29tbWFuZHMgYW5kIGhhcyB0aGUgc2FtZSB2YWx1ZSBhcyBgJE1FUkdFRGAuCisKKy0tdG9vbC1oZWxwOjoKKwlQcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggYC0tdG9vbGAuCisKKy0tW25vLV1zeW1saW5rczo6CisJJ2dpdCBkaWZmdG9vbCcncyBkZWZhdWx0IGJlaGF2aW9yIGlzIGNyZWF0ZSBzeW1saW5rcyB0byB0aGUKKwl3b3JraW5nIHRyZWUgd2hlbiBydW4gaW4gYC0tZGlyLWRpZmZgIG1vZGUgYW5kIHRoZSByaWdodC1oYW5kCisJc2lkZSBvZiB0aGUgY29tcGFyaXNvbiB5aWVsZHMgdGhlIHNhbWUgY29udGVudCBhcyB0aGUgZmlsZSBpbgorCXRoZSB3b3JraW5nIHRyZWUuCisrCitTcGVjaWZ5aW5nIGAtLW5vLXN5bWxpbmtzYCBpbnN0cnVjdHMgJ2dpdCBkaWZmdG9vbCcgdG8gY3JlYXRlIGNvcGllcworaW5zdGVhZC4gIGAtLW5vLXN5bWxpbmtzYCBpcyB0aGUgZGVmYXVsdCBvbiBXaW5kb3dzLgorCisteCA8Y29tbWFuZD46OgorLS1leHRjbWQ9PGNvbW1hbmQ+OjoKKwlTcGVjaWZ5IGEgY3VzdG9tIGNvbW1hbmQgZm9yIHZpZXdpbmcgZGlmZnMuCisJJ2dpdC1kaWZmdG9vbCcgaWdub3JlcyB0aGUgY29uZmlndXJlZCBkZWZhdWx0cyBhbmQgcnVucworCWAkY29tbWFuZCAkTE9DQUwgJFJFTU9URWAgd2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQuCisJQWRkaXRpb25hbGx5LCBgJEJBU0VgIGlzIHNldCBpbiB0aGUgZW52aXJvbm1lbnQuCisKKy1nOjoKKy0tZ3VpOjoKKwlXaGVuICdnaXQtZGlmZnRvb2wnIGlzIGludm9rZWQgd2l0aCB0aGUgYC1nYCBvciBgLS1ndWlgIG9wdGlvbgorCXRoZSBkZWZhdWx0IGRpZmYgdG9vbCB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgY29uZmlndXJlZAorCWBkaWZmLmd1aXRvb2xgIHZhcmlhYmxlIGluc3RlYWQgb2YgYGRpZmYudG9vbGAuCisKKy0tW25vLV10cnVzdC1leGl0LWNvZGU6OgorCSdnaXQtZGlmZnRvb2wnIGludm9rZXMgYSBkaWZmIHRvb2wgaW5kaXZpZHVhbGx5IG9uIGVhY2ggZmlsZS4KKwlFcnJvcnMgcmVwb3J0ZWQgYnkgdGhlIGRpZmYgdG9vbCBhcmUgaWdub3JlZCBieSBkZWZhdWx0LgorCVVzZSBgLS10cnVzdC1leGl0LWNvZGVgIHRvIG1ha2UgJ2dpdC1kaWZmdG9vbCcgZXhpdCB3aGVuIGFuCisJaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQgY29kZS4KKysKKydnaXQtZGlmZnRvb2wnIHdpbGwgZm9yd2FyZCB0aGUgZXhpdCBjb2RlIG9mIHRoZSBpbnZva2VkIHRvb2wgd2hlbgorJy0tdHJ1c3QtZXhpdC1jb2RlJyBpcyB1c2VkLgorCitTZWUgbGlua2dpdDpnaXQtZGlmZlsxXSBmb3IgdGhlIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQgb3B0aW9ucy4KKworQ09ORklHIFZBUklBQkxFUworLS0tLS0tLS0tLS0tLS0tLQorJ2dpdCBkaWZmdG9vbCcgZmFsbHMgYmFjayB0byAnZ2l0IG1lcmdldG9vbCcgY29uZmlnIHZhcmlhYmxlcyB3aGVuIHRoZQorZGlmZnRvb2wgZXF1aXZhbGVudHMgaGF2ZSBub3QgYmVlbiBkZWZpbmVkLgorCitkaWZmLnRvb2w6OgorCVRoZSBkZWZhdWx0IGRpZmYgdG9vbCB0byB1c2UuCisKK2RpZmYuZ3VpdG9vbDo6CisJVGhlIGRlZmF1bHQgZGlmZiB0b29sIHRvIHVzZSB3aGVuIGAtLWd1aWAgaXMgc3BlY2lmaWVkLgorCitkaWZmdG9vbC48dG9vbD4ucGF0aDo6CisJT3ZlcnJpZGUgdGhlIHBhdGggZm9yIHRoZSBnaXZlbiB0b29sLiAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZQorCXlvdXIgdG9vbCBpcyBub3QgaW4gdGhlIFBBVEguCisKK2RpZmZ0b29sLjx0b29sPi5jbWQ6OgorCVNwZWNpZnkgdGhlIGNvbW1hbmQgdG8gaW52b2tlIHRoZSBzcGVjaWZpZWQgZGlmZiB0b29sLgorKworU2VlIHRoZSBgLS10b29sPTx0b29sPmAgb3B0aW9uIGFib3ZlIGZvciBtb3JlIGRldGFpbHMuCisKK2RpZmZ0b29sLnByb21wdDo6CisJUHJvbXB0IGJlZm9yZSBlYWNoIGludm9jYXRpb24gb2YgdGhlIGRpZmYgdG9vbC4KKworZGlmZnRvb2wudHJ1c3RFeGl0Q29kZTo6CisJRXhpdCBkaWZmdG9vbCBpZiB0aGUgaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQgc3RhdHVzLgorKworU2VlIHRoZSBgLS10cnVzdC1leGl0LWNvZGVgIG9wdGlvbiBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWRpZmZbMV06OgorCSBTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjCisKK2xpbmtnaXQ6Z2l0LW1lcmdldG9vbFsxXTo6CisJUnVuIG1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24gdG9vbHMgdG8gcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMKKworbGlua2dpdDpnaXQtY29uZmlnWzFdOjoKKwkgR2V0IGFuZCBzZXQgcmVwb3NpdG9yeSBvciBnbG9iYWwgb3B0aW9ucworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtZXhwb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDU3YzY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1leHBvcnQudHh0CkBAIC0wLDAgKzEsMjE4IEBACitnaXQtZmFzdC1leHBvcnQoMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZmFzdC1leHBvcnQgLSBHaXQgZGF0YSBleHBvcnRlcgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBmYXN0LWV4cG9ydCBbb3B0aW9uc10nIHwgJ2dpdCBmYXN0LWltcG9ydCcKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIHByb2dyYW0gZHVtcHMgdGhlIGdpdmVuIHJldmlzaW9ucyBpbiBhIGZvcm0gc3VpdGFibGUgdG8gYmUgcGlwZWQKK2ludG8gJ2dpdCBmYXN0LWltcG9ydCcuCisKK1lvdSBjYW4gdXNlIGl0IGFzIGEgaHVtYW4tcmVhZGFibGUgYnVuZGxlIHJlcGxhY2VtZW50IChzZWUKK2xpbmtnaXQ6Z2l0LWJ1bmRsZVsxXSksIG9yIGFzIGEga2luZCBvZiBhbiBpbnRlcmFjdGl2ZQorJ2dpdCBmaWx0ZXItYnJhbmNoJy4KKworCitPUFRJT05TCistLS0tLS0tCistLXByb2dyZXNzPTxuPjo6CisJSW5zZXJ0ICdwcm9ncmVzcycgc3RhdGVtZW50cyBldmVyeSA8bj4gb2JqZWN0cywgdG8gYmUgc2hvd24gYnkKKwknZ2l0IGZhc3QtaW1wb3J0JyBkdXJpbmcgaW1wb3J0LgorCistLXNpZ25lZC10YWdzPSh2ZXJiYXRpbXx3YXJufHdhcm4tc3RyaXB8c3RyaXB8YWJvcnQpOjoKKwlTcGVjaWZ5IGhvdyB0byBoYW5kbGUgc2lnbmVkIHRhZ3MuICBTaW5jZSBhbnkgdHJhbnNmb3JtYXRpb24KKwlhZnRlciB0aGUgZXhwb3J0IGNhbiBjaGFuZ2UgdGhlIHRhZyBuYW1lcyAod2hpY2ggY2FuIGFsc28gaGFwcGVuCisJd2hlbiBleGNsdWRpbmcgcmV2aXNpb25zKSB0aGUgc2lnbmF0dXJlcyB3aWxsIG5vdCBtYXRjaC4KKysKK1doZW4gYXNraW5nIHRvICdhYm9ydCcgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KSwgdGhpcyBwcm9ncmFtIHdpbGwgZGllCit3aGVuIGVuY291bnRlcmluZyBhIHNpZ25lZCB0YWcuICBXaXRoICdzdHJpcCcsIHRoZSB0YWdzIHdpbGwgc2lsZW50bHkKK2JlIG1hZGUgdW5zaWduZWQsIHdpdGggJ3dhcm4tc3RyaXAnIHRoZXkgd2lsbCBiZSBtYWRlIHVuc2lnbmVkIGJ1dCBhCit3YXJuaW5nIHdpbGwgYmUgZGlzcGxheWVkLCB3aXRoICd2ZXJiYXRpbScsIHRoZXkgd2lsbCBiZSBzaWxlbnRseQorZXhwb3J0ZWQgYW5kIHdpdGggJ3dhcm4nLCB0aGV5IHdpbGwgYmUgZXhwb3J0ZWQsIGJ1dCB5b3Ugd2lsbCBzZWUgYQord2FybmluZy4KKworLS10YWctb2YtZmlsdGVyZWQtb2JqZWN0PShhYm9ydHxkcm9wfHJld3JpdGUpOjoKKwlTcGVjaWZ5IGhvdyB0byBoYW5kbGUgdGFncyB3aG9zZSB0YWdnZWQgb2JqZWN0IGlzIGZpbHRlcmVkIG91dC4KKwlTaW5jZSByZXZpc2lvbnMgYW5kIGZpbGVzIHRvIGV4cG9ydCBjYW4gYmUgbGltaXRlZCBieSBwYXRoLAorCXRhZ2dlZCBvYmplY3RzIG1heSBiZSBmaWx0ZXJlZCBjb21wbGV0ZWx5LgorKworV2hlbiBhc2tpbmcgdG8gJ2Fib3J0JyAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLCB0aGlzIHByb2dyYW0gd2lsbCBkaWUKK3doZW4gZW5jb3VudGVyaW5nIHN1Y2ggYSB0YWcuICBXaXRoICdkcm9wJyBpdCB3aWxsIG9taXQgc3VjaCB0YWdzIGZyb20KK3RoZSBvdXRwdXQuICBXaXRoICdyZXdyaXRlJywgaWYgdGhlIHRhZ2dlZCBvYmplY3QgaXMgYSBjb21taXQsIGl0IHdpbGwKK3Jld3JpdGUgdGhlIHRhZyB0byB0YWcgYW4gYW5jZXN0b3IgY29tbWl0ICh2aWEgcGFyZW50IHJld3JpdGluZzsgc2VlCitsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSkKKworLU06OgorLUM6OgorCVBlcmZvcm0gbW92ZSBhbmQvb3IgY29weSBkZXRlY3Rpb24sIGFzIGRlc2NyaWJlZCBpbiB0aGUKKwlsaW5rZ2l0OmdpdC1kaWZmWzFdIG1hbnVhbCBwYWdlLCBhbmQgdXNlIGl0IHRvIGdlbmVyYXRlCisJcmVuYW1lIGFuZCBjb3B5IGNvbW1hbmRzIGluIHRoZSBvdXRwdXQgZHVtcC4KKysKK05vdGUgdGhhdCBlYXJsaWVyIHZlcnNpb25zIG9mIHRoaXMgY29tbWFuZCBkaWQgbm90IGNvbXBsYWluIGFuZAorcHJvZHVjZWQgaW5jb3JyZWN0IHJlc3VsdHMgaWYgeW91IGdhdmUgdGhlc2Ugb3B0aW9ucy4KKworLS1leHBvcnQtbWFya3M9PGZpbGU+OjoKKwlEdW1wcyB0aGUgaW50ZXJuYWwgbWFya3MgdGFibGUgdG8gPGZpbGU+IHdoZW4gY29tcGxldGUuCisJTWFya3MgYXJlIHdyaXR0ZW4gb25lIHBlciBsaW5lIGFzIGA6bWFya2lkIFNIQS0xYC4gT25seSBtYXJrcworCWZvciByZXZpc2lvbnMgYXJlIGR1bXBlZDsgbWFya3MgZm9yIGJsb2JzIGFyZSBpZ25vcmVkLgorCUJhY2tlbmRzIGNhbiB1c2UgdGhpcyBmaWxlIHRvIHZhbGlkYXRlIGltcG9ydHMgYWZ0ZXIgdGhleQorCWhhdmUgYmVlbiBjb21wbGV0ZWQsIG9yIHRvIHNhdmUgdGhlIG1hcmtzIHRhYmxlIGFjcm9zcworCWluY3JlbWVudGFsIHJ1bnMuICBBcyA8ZmlsZT4gaXMgb25seSBvcGVuZWQgYW5kIHRydW5jYXRlZAorCWF0IGNvbXBsZXRpb24sIHRoZSBzYW1lIHBhdGggY2FuIGFsc28gYmUgc2FmZWx5IGdpdmVuIHRvCisJLS1pbXBvcnQtbWFya3MuCisJVGhlIGZpbGUgd2lsbCBub3QgYmUgd3JpdHRlbiBpZiBubyBuZXcgb2JqZWN0IGhhcyBiZWVuCisJbWFya2VkL2V4cG9ydGVkLgorCistLWltcG9ydC1tYXJrcz08ZmlsZT46OgorCUJlZm9yZSBwcm9jZXNzaW5nIGFueSBpbnB1dCwgbG9hZCB0aGUgbWFya3Mgc3BlY2lmaWVkIGluCisJPGZpbGU+LiAgVGhlIGlucHV0IGZpbGUgbXVzdCBleGlzdCwgbXVzdCBiZSByZWFkYWJsZSwgYW5kCisJbXVzdCB1c2UgdGhlIHNhbWUgZm9ybWF0IGFzIHByb2R1Y2VkIGJ5IC0tZXhwb3J0LW1hcmtzLgorKworQW55IGNvbW1pdHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBtYXJrZWQgd2lsbCBub3QgYmUgZXhwb3J0ZWQgYWdhaW4uCitJZiB0aGUgYmFja2VuZCB1c2VzIGEgc2ltaWxhciAtLWltcG9ydC1tYXJrcyBmaWxlLCB0aGlzIGFsbG93cyBmb3IKK2luY3JlbWVudGFsIGJpZGlyZWN0aW9uYWwgZXhwb3J0aW5nIG9mIHRoZSByZXBvc2l0b3J5IGJ5IGtlZXBpbmcgdGhlCittYXJrcyB0aGUgc2FtZSBhY3Jvc3MgcnVucy4KKworLS1mYWtlLW1pc3NpbmctdGFnZ2VyOjoKKwlTb21lIG9sZCByZXBvc2l0b3JpZXMgaGF2ZSB0YWdzIHdpdGhvdXQgYSB0YWdnZXIuICBUaGUKKwlmYXN0LWltcG9ydCBwcm90b2NvbCB3YXMgcHJldHR5IHN0cmljdCBhYm91dCB0aGF0LCBhbmQgZGlkIG5vdAorCWFsbG93IHRoYXQuICBTbyBmYWtlIGEgdGFnZ2VyIHRvIGJlIGFibGUgdG8gZmFzdC1pbXBvcnQgdGhlCisJb3V0cHV0LgorCistLXVzZS1kb25lLWZlYXR1cmU6OgorCVN0YXJ0IHRoZSBzdHJlYW0gd2l0aCBhICdmZWF0dXJlIGRvbmUnIHN0YW56YSwgYW5kIHRlcm1pbmF0ZQorCWl0IHdpdGggYSAnZG9uZScgY29tbWFuZC4KKworLS1uby1kYXRhOjoKKwlTa2lwIG91dHB1dCBvZiBibG9iIG9iamVjdHMgYW5kIGluc3RlYWQgcmVmZXIgdG8gYmxvYnMgdmlhCisJdGhlaXIgb3JpZ2luYWwgU0hBLTEgaGFzaC4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gcmV3cml0aW5nIHRoZQorCWRpcmVjdG9yeSBzdHJ1Y3R1cmUgb3IgaGlzdG9yeSBvZiBhIHJlcG9zaXRvcnkgd2l0aG91dAorCXRvdWNoaW5nIHRoZSBjb250ZW50cyBvZiBpbmRpdmlkdWFsIGZpbGVzLiAgTm90ZSB0aGF0IHRoZQorCXJlc3VsdGluZyBzdHJlYW0gY2FuIG9ubHkgYmUgdXNlZCBieSBhIHJlcG9zaXRvcnkgd2hpY2gKKwlhbHJlYWR5IGNvbnRhaW5zIHRoZSBuZWNlc3Nhcnkgb2JqZWN0cy4KKworLS1mdWxsLXRyZWU6OgorCVRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgZmFzdC1leHBvcnQgdG8gaXNzdWUgYSAiZGVsZXRlYWxsIgorCWRpcmVjdGl2ZSBmb3IgZWFjaCBjb21taXQgZm9sbG93ZWQgYnkgYSBmdWxsIGxpc3Qgb2YgYWxsIGZpbGVzCisJaW4gdGhlIGNvbW1pdCAoYXMgb3Bwb3NlZCB0byBqdXN0IGxpc3RpbmcgdGhlIGZpbGVzIHdoaWNoIGFyZQorCWRpZmZlcmVudCBmcm9tIHRoZSBjb21taXQncyBmaXJzdCBwYXJlbnQpLgorCistLWFub255bWl6ZTo6CisJQW5vbnltaXplIHRoZSBjb250ZW50cyBvZiB0aGUgcmVwb3NpdG9yeSB3aGlsZSBzdGlsbCByZXRhaW5pbmcKKwl0aGUgc2hhcGUgb2YgdGhlIGhpc3RvcnkgYW5kIHN0b3JlZCB0cmVlLiAgU2VlIHRoZSBzZWN0aW9uIG9uCisJYEFOT05ZTUlaSU5HYCBiZWxvdy4KKworLS1yZWZzcGVjOjoKKwlBcHBseSB0aGUgc3BlY2lmaWVkIHJlZnNwZWMgdG8gZWFjaCByZWYgZXhwb3J0ZWQuIE11bHRpcGxlIG9mIHRoZW0gY2FuCisJYmUgc3BlY2lmaWVkLgorCitbPGdpdC1yZXYtbGlzdC1hcmdzPi4uLl06OgorCUEgbGlzdCBvZiBhcmd1bWVudHMsIGFjY2VwdGFibGUgdG8gJ2dpdCByZXYtcGFyc2UnIGFuZAorCSdnaXQgcmV2LWxpc3QnLCB0aGF0IHNwZWNpZmllcyB0aGUgc3BlY2lmaWMgb2JqZWN0cyBhbmQgcmVmZXJlbmNlcworCXRvIGV4cG9ydC4gIEZvciBleGFtcGxlLCBgbWFzdGVyfjEwLi5tYXN0ZXJgIGNhdXNlcyB0aGUKKwljdXJyZW50IG1hc3RlciByZWZlcmVuY2UgdG8gYmUgZXhwb3J0ZWQgYWxvbmcgd2l0aCBhbGwgb2JqZWN0cworCWFkZGVkIHNpbmNlIGl0cyAxMHRoIGFuY2VzdG9yIGNvbW1pdC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZhc3QtZXhwb3J0IC0tYWxsIHwgKGNkIC9lbXB0eS9yZXBvc2l0b3J5ICYmIGdpdCBmYXN0LWltcG9ydCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGV4cG9ydCB0aGUgd2hvbGUgcmVwb3NpdG9yeSBhbmQgaW1wb3J0IGl0IGludG8gdGhlIGV4aXN0aW5nCitlbXB0eSByZXBvc2l0b3J5LiAgRXhjZXB0IGZvciByZWVuY29kaW5nIGNvbW1pdHMgdGhhdCBhcmUgbm90IGluCitVVEYtOCwgaXQgd291bGQgYmUgYSBvbmUtdG8tb25lIG1pcnJvci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZhc3QtZXhwb3J0IG1hc3Rlcn41Li5tYXN0ZXIgfAorCXNlZCAic3xyZWZzL2hlYWRzL21hc3RlcnxyZWZzL2hlYWRzL290aGVyfCIgfAorCWdpdCBmYXN0LWltcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtYWtlcyBhIG5ldyBicmFuY2ggY2FsbGVkICdvdGhlcicgZnJvbSAnbWFzdGVyfjUuLm1hc3RlcicKKyhpLmUuIGlmICdtYXN0ZXInIGhhcyBsaW5lYXIgaGlzdG9yeSwgaXQgd2lsbCB0YWtlIHRoZSBsYXN0IDUgY29tbWl0cykuCisKK05vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhhdCBub25lIG9mIHRoZSBibG9icyBhbmQgY29tbWl0IG1lc3NhZ2VzCityZWZlcmVuY2VkIGJ5IHRoYXQgcmV2aXNpb24gcmFuZ2UgY29udGFpbnMgdGhlIHN0cmluZworJ3JlZnMvaGVhZHMvbWFzdGVyJy4KKworCitBTk9OWU1JWklORworLS0tLS0tLS0tLS0KKworSWYgdGhlIGAtLWFub255bWl6ZWAgb3B0aW9uIGlzIGdpdmVuLCBnaXQgd2lsbCBhdHRlbXB0IHRvIHJlbW92ZSBhbGwKK2lkZW50aWZ5aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlcG9zaXRvcnkgd2hpbGUgc3RpbGwgcmV0YWluaW5nIGVub3VnaAorb2YgdGhlIG9yaWdpbmFsIHRyZWUgYW5kIGhpc3RvcnkgcGF0dGVybnMgdG8gcmVwcm9kdWNlIHNvbWUgYnVncy4gVGhlCitnb2FsIGlzIHRoYXQgYSBnaXQgYnVnIHdoaWNoIGlzIGZvdW5kIG9uIGEgcHJpdmF0ZSByZXBvc2l0b3J5IHdpbGwKK3BlcnNpc3QgaW4gdGhlIGFub255bWl6ZWQgcmVwb3NpdG9yeSwgYW5kIHRoZSBsYXR0ZXIgY2FuIGJlIHNoYXJlZCB3aXRoCitnaXQgZGV2ZWxvcGVycyB0byBoZWxwIHNvbHZlIHRoZSBidWcuCisKK1dpdGggdGhpcyBvcHRpb24sIGdpdCB3aWxsIHJlcGxhY2UgYWxsIHJlZm5hbWVzLCBwYXRocywgYmxvYiBjb250ZW50cywKK2NvbW1pdCBhbmQgdGFnIG1lc3NhZ2VzLCBuYW1lcywgYW5kIGVtYWlsIGFkZHJlc3NlcyBpbiB0aGUgb3V0cHV0IHdpdGgKK2Fub255bWl6ZWQgZGF0YS4gIFR3byBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgc3RyaW5nIHdpbGwgYmUgcmVwbGFjZWQKK2VxdWl2YWxlbnRseSAoZS5nLiwgdHdvIGNvbW1pdHMgd2l0aCB0aGUgc2FtZSBhdXRob3Igd2lsbCBoYXZlIHRoZSBzYW1lCithbm9ueW1pemVkIGF1dGhvciBpbiB0aGUgb3V0cHV0LCBidXQgYmVhciBubyByZXNlbWJsYW5jZSB0byB0aGUgb3JpZ2luYWwKK2F1dGhvciBzdHJpbmcpLiBUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4gY29tbWl0cywgYnJhbmNoZXMsIGFuZCB0YWdzIGlzCityZXRhaW5lZCwgYXMgd2VsbCBhcyB0aGUgY29tbWl0IHRpbWVzdGFtcHMgKGJ1dCB0aGUgY29tbWl0IG1lc3NhZ2VzIGFuZAorcmVmbmFtZXMgYmVhciBubyByZXNlbWJsYW5jZSB0byB0aGUgb3JpZ2luYWxzKS4gVGhlIHJlbGF0aXZlIG1ha2V1cCBvZgordGhlIHRyZWUgaXMgcmV0YWluZWQgKGUuZy4sIGlmIHlvdSBoYXZlIGEgcm9vdCB0cmVlIHdpdGggMTAgZmlsZXMgYW5kIDMKK3RyZWVzLCBzbyB3aWxsIHRoZSBvdXRwdXQpLCBidXQgdGhlaXIgbmFtZXMgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUKK2ZpbGVzIHdpbGwgYmUgcmVwbGFjZWQuCisKK0lmIHlvdSB0aGluayB5b3UgaGF2ZSBmb3VuZCBhIGdpdCBidWcsIHlvdSBjYW4gc3RhcnQgYnkgZXhwb3J0aW5nIGFuCithbm9ueW1pemVkIHN0cmVhbSBvZiB0aGUgd2hvbGUgcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmYXN0LWV4cG9ydCAtLWFub255bWl6ZSAtLWFsbCA+YW5vbi1zdHJlYW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIGNvbmZpcm0gdGhhdCB0aGUgYnVnIHBlcnNpc3RzIGluIGEgcmVwb3NpdG9yeSBjcmVhdGVkIGZyb20gdGhhdAorc3RyZWFtIChtYW55IGJ1Z3Mgd2lsbCBub3QsIGFzIHRoZXkgcmVhbGx5IGRvIGRlcGVuZCBvbiB0aGUgZXhhY3QKK3JlcG9zaXRvcnkgY29udGVudHMpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGluaXQgYW5vbi1yZXBvCiskIGNkIGFub24tcmVwbworJCBnaXQgZmFzdC1pbXBvcnQgPC4uL2Fub24tc3RyZWFtCiskIC4uLiB0ZXN0IHlvdXIgYnVnIC4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBhbm9ueW1pemVkIHJlcG9zaXRvcnkgc2hvd3MgdGhlIGJ1ZywgaXQgbWF5IGJlIHdvcnRoIHNoYXJpbmcKK2Bhbm9uLXN0cmVhbWAgYWxvbmcgd2l0aCBhIHJlZ3VsYXIgYnVnIHJlcG9ydC4gTm90ZSB0aGF0IHRoZSBhbm9ueW1pemVkCitzdHJlYW0gY29tcHJlc3NlcyB2ZXJ5IHdlbGwsIHNvIGd6aXBwaW5nIGl0IGlzIGVuY291cmFnZWQuIElmIHlvdSB3YW50Cit0byBleGFtaW5lIHRoZSBzdHJlYW0gdG8gc2VlIHRoYXQgaXQgZG9lcyBub3QgY29udGFpbiBhbnkgcHJpdmF0ZSBkYXRhLAoreW91IGNhbiBwZXJ1c2UgaXQgZGlyZWN0bHkgYmVmb3JlIHNlbmRpbmcuIFlvdSBtYXkgYWxzbyB3YW50IHRvIHRyeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIHBlcmwgLXBlICdzL1xkKy9YL2cnIDxhbm9uLXN0cmVhbSB8IHNvcnQgLXUgfCBsZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggc2hvd3MgYWxsIG9mIHRoZSB1bmlxdWUgbGluZXMgKHdpdGggbnVtYmVycyBjb252ZXJ0ZWQgdG8gIlgiLCB0bworY29sbGFwc2UgIlVzZXIgMCIsICJVc2VyIDEiLCBldGMgaW50byAiVXNlciBYIikuIFRoaXMgcHJvZHVjZXMgYSBtdWNoCitzbWFsbGVyIG91dHB1dCwgYW5kIGl0IGlzIHVzdWFsbHkgZWFzeSB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCB0aGVyZSBpcworbm8gcHJpdmF0ZSBkYXRhIGluIHRoZSBzdHJlYW0uCisKKworTGltaXRhdGlvbnMKKy0tLS0tLS0tLS0tCisKK1NpbmNlICdnaXQgZmFzdC1pbXBvcnQnIGNhbm5vdCB0YWcgdHJlZXMsIHlvdSB3aWxsIG5vdCBiZQorYWJsZSB0byBleHBvcnQgdGhlIGxpbnV4LmdpdCByZXBvc2l0b3J5IGNvbXBsZXRlbHksIGFzIGl0IGNvbnRhaW5zCithIHRhZyByZWZlcmVuY2luZyBhIHRyZWUgaW5zdGVhZCBvZiBhIGNvbW1pdC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1mYXN0LWltcG9ydFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZhc3QtaW1wb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjkxMGFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0CkBAIC0wLDAgKzEsMTQ3MyBAQAorZ2l0LWZhc3QtaW1wb3J0KDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWZhc3QtaW1wb3J0IC0gQmFja2VuZCBmb3IgZmFzdCBHaXQgZGF0YSBpbXBvcnRlcnMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KK2Zyb250ZW5kIHwgJ2dpdCBmYXN0LWltcG9ydCcgW29wdGlvbnNdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBwcm9ncmFtIGlzIHVzdWFsbHkgbm90IHdoYXQgdGhlIGVuZCB1c2VyIHdhbnRzIHRvIHJ1biBkaXJlY3RseS4KK01vc3QgZW5kIHVzZXJzIHdhbnQgdG8gdXNlIG9uZSBvZiB0aGUgZXhpc3RpbmcgZnJvbnRlbmQgcHJvZ3JhbXMsCit3aGljaCBwYXJzZXMgYSBzcGVjaWZpYyB0eXBlIG9mIGZvcmVpZ24gc291cmNlIGFuZCBmZWVkcyB0aGUgY29udGVudHMKK3N0b3JlZCB0aGVyZSB0byAnZ2l0IGZhc3QtaW1wb3J0Jy4KKworZmFzdC1pbXBvcnQgcmVhZHMgYSBtaXhlZCBjb21tYW5kL2RhdGEgc3RyZWFtIGZyb20gc3RhbmRhcmQgaW5wdXQgYW5kCit3cml0ZXMgb25lIG9yIG1vcmUgcGFja2ZpbGVzIGRpcmVjdGx5IGludG8gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4KK1doZW4gRU9GIGlzIHJlY2VpdmVkIG9uIHN0YW5kYXJkIGlucHV0LCBmYXN0IGltcG9ydCB3cml0ZXMgb3V0Cit1cGRhdGVkIGJyYW5jaCBhbmQgdGFnIHJlZnMsIGZ1bGx5IHVwZGF0aW5nIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkKK3dpdGggdGhlIG5ld2x5IGltcG9ydGVkIGRhdGEuCisKK1RoZSBmYXN0LWltcG9ydCBiYWNrZW5kIGl0c2VsZiBjYW4gaW1wb3J0IGludG8gYW4gZW1wdHkgcmVwb3NpdG9yeSAob25lIHRoYXQKK2hhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgYnkgJ2dpdCBpbml0Jykgb3IgaW5jcmVtZW50YWxseQordXBkYXRlIGFuIGV4aXN0aW5nIHBvcHVsYXRlZCByZXBvc2l0b3J5LiAgV2hldGhlciBvciBub3QgaW5jcmVtZW50YWwKK2ltcG9ydHMgYXJlIHN1cHBvcnRlZCBmcm9tIGEgcGFydGljdWxhciBmb3JlaWduIHNvdXJjZSBkZXBlbmRzIG9uCit0aGUgZnJvbnRlbmQgcHJvZ3JhbSBpbiB1c2UuCisKKworT1BUSU9OUworLS0tLS0tLQorCistLWZvcmNlOjoKKwlGb3JjZSB1cGRhdGluZyBtb2RpZmllZCBleGlzdGluZyBicmFuY2hlcywgZXZlbiBpZiBkb2luZworCXNvIHdvdWxkIGNhdXNlIGNvbW1pdHMgdG8gYmUgbG9zdCAoYXMgdGhlIG5ldyBjb21taXQgZG9lcworCW5vdCBjb250YWluIHRoZSBvbGQgY29tbWl0KS4KKworLS1xdWlldDo6CisJRGlzYWJsZSBhbGwgbm9uLWZhdGFsIG91dHB1dCwgbWFraW5nIGZhc3QtaW1wb3J0IHNpbGVudCB3aGVuIGl0CisJaXMgc3VjY2Vzc2Z1bC4gIFRoaXMgb3B0aW9uIGRpc2FibGVzIHRoZSBvdXRwdXQgc2hvd24gYnkKKwktLXN0YXRzLgorCistLXN0YXRzOjoKKwlEaXNwbGF5IHNvbWUgYmFzaWMgc3RhdGlzdGljcyBhYm91dCB0aGUgb2JqZWN0cyBmYXN0LWltcG9ydCBoYXMKKwljcmVhdGVkLCB0aGUgcGFja2ZpbGVzIHRoZXkgd2VyZSBzdG9yZWQgaW50bywgYW5kIHRoZQorCW1lbW9yeSB1c2VkIGJ5IGZhc3QtaW1wb3J0IGR1cmluZyB0aGlzIHJ1bi4gIFNob3dpbmcgdGhpcyBvdXRwdXQKKwlpcyBjdXJyZW50bHkgdGhlIGRlZmF1bHQsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgd2l0aCAtLXF1aWV0LgorCitPcHRpb25zIGZvciBGcm9udGVuZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCistLWNhdC1ibG9iLWZkPTxmZD46OgorCVdyaXRlIHJlc3BvbnNlcyB0byBgZ2V0LW1hcmtgLCBgY2F0LWJsb2JgLCBhbmQgYGxzYCBxdWVyaWVzIHRvIHRoZQorCWZpbGUgZGVzY3JpcHRvciA8ZmQ+IGluc3RlYWQgb2YgYHN0ZG91dGAuICBBbGxvd3MgYHByb2dyZXNzYAorCW91dHB1dCBpbnRlbmRlZCBmb3IgdGhlIGVuZC11c2VyIHRvIGJlIHNlcGFyYXRlZCBmcm9tIG90aGVyCisJb3V0cHV0LgorCistLWRhdGUtZm9ybWF0PTxmbXQ+OjoKKwlTcGVjaWZ5IHRoZSB0eXBlIG9mIGRhdGVzIHRoZSBmcm9udGVuZCB3aWxsIHN1cHBseSB0bworCWZhc3QtaW1wb3J0IHdpdGhpbiBgYXV0aG9yYCwgYGNvbW1pdHRlcmAgYW5kIGB0YWdnZXJgIGNvbW1hbmRzLgorCVNlZSBgYERhdGUgRm9ybWF0cycnIGJlbG93IGZvciBkZXRhaWxzIGFib3V0IHdoaWNoIGZvcm1hdHMKKwlhcmUgc3VwcG9ydGVkLCBhbmQgdGhlaXIgc3ludGF4LgorCistLWRvbmU6OgorCVRlcm1pbmF0ZSB3aXRoIGVycm9yIGlmIHRoZXJlIGlzIG5vIGBkb25lYCBjb21tYW5kIGF0IHRoZSBlbmQgb2YKKwl0aGUgc3RyZWFtLiAgVGhpcyBvcHRpb24gbWlnaHQgYmUgdXNlZnVsIGZvciBkZXRlY3RpbmcgZXJyb3JzCisJdGhhdCBjYXVzZSB0aGUgZnJvbnRlbmQgdG8gdGVybWluYXRlIGJlZm9yZSBpdCBoYXMgc3RhcnRlZCB0bworCXdyaXRlIGEgc3RyZWFtLgorCitMb2NhdGlvbnMgb2YgTWFya3MgRmlsZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCistLWV4cG9ydC1tYXJrcz08ZmlsZT46OgorCUR1bXBzIHRoZSBpbnRlcm5hbCBtYXJrcyB0YWJsZSB0byA8ZmlsZT4gd2hlbiBjb21wbGV0ZS4KKwlNYXJrcyBhcmUgd3JpdHRlbiBvbmUgcGVyIGxpbmUgYXMgYDptYXJraWQgU0hBLTFgLgorCUZyb250ZW5kcyBjYW4gdXNlIHRoaXMgZmlsZSB0byB2YWxpZGF0ZSBpbXBvcnRzIGFmdGVyIHRoZXkKKwloYXZlIGJlZW4gY29tcGxldGVkLCBvciB0byBzYXZlIHRoZSBtYXJrcyB0YWJsZSBhY3Jvc3MKKwlpbmNyZW1lbnRhbCBydW5zLiAgQXMgPGZpbGU+IGlzIG9ubHkgb3BlbmVkIGFuZCB0cnVuY2F0ZWQKKwlhdCBjaGVja3BvaW50IChvciBjb21wbGV0aW9uKSB0aGUgc2FtZSBwYXRoIGNhbiBhbHNvIGJlCisJc2FmZWx5IGdpdmVuIHRvIC0taW1wb3J0LW1hcmtzLgorCistLWltcG9ydC1tYXJrcz08ZmlsZT46OgorCUJlZm9yZSBwcm9jZXNzaW5nIGFueSBpbnB1dCwgbG9hZCB0aGUgbWFya3Mgc3BlY2lmaWVkIGluCisJPGZpbGU+LiAgVGhlIGlucHV0IGZpbGUgbXVzdCBleGlzdCwgbXVzdCBiZSByZWFkYWJsZSwgYW5kCisJbXVzdCB1c2UgdGhlIHNhbWUgZm9ybWF0IGFzIHByb2R1Y2VkIGJ5IC0tZXhwb3J0LW1hcmtzLgorCU11bHRpcGxlIG9wdGlvbnMgbWF5IGJlIHN1cHBsaWVkIHRvIGltcG9ydCBtb3JlIHRoYW4gb25lCisJc2V0IG9mIG1hcmtzLiAgSWYgYSBtYXJrIGlzIGRlZmluZWQgdG8gZGlmZmVyZW50IHZhbHVlcywKKwl0aGUgbGFzdCBmaWxlIHdpbnMuCisKKy0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cz08ZmlsZT46OgorCUxpa2UgLS1pbXBvcnQtbWFya3MgYnV0IGluc3RlYWQgb2YgZXJyb3Jpbmcgb3V0LCBzaWxlbnRseQorCXNraXBzIHRoZSBmaWxlIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorCistLVtuby1dcmVsYXRpdmUtbWFya3M6OgorCUFmdGVyIHNwZWNpZnlpbmcgLS1yZWxhdGl2ZS1tYXJrcyB0aGUgcGF0aHMgc3BlY2lmaWVkCisJd2l0aCAtLWltcG9ydC1tYXJrcz0gYW5kIC0tZXhwb3J0LW1hcmtzPSBhcmUgcmVsYXRpdmUKKwl0byBhbiBpbnRlcm5hbCBkaXJlY3RvcnkgaW4gdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS4KKwlJbiBnaXQtZmFzdC1pbXBvcnQgdGhpcyBtZWFucyB0aGF0IHRoZSBwYXRocyBhcmUgcmVsYXRpdmUKKwl0byB0aGUgLmdpdC9pbmZvL2Zhc3QtaW1wb3J0IGRpcmVjdG9yeS4gSG93ZXZlciwgb3RoZXIKKwlpbXBvcnRlcnMgbWF5IHVzZSBhIGRpZmZlcmVudCBsb2NhdGlvbi4KKysKK1JlbGF0aXZlIGFuZCBub24tcmVsYXRpdmUgbWFya3MgbWF5IGJlIGNvbWJpbmVkIGJ5IGludGVyd2VhdmluZworLS0obm8tKS1yZWxhdGl2ZS1tYXJrcyB3aXRoIHRoZSAtLShpbXBvcnR8ZXhwb3J0KS1tYXJrcz0gb3B0aW9ucy4KKworUGVyZm9ybWFuY2UgYW5kIENvbXByZXNzaW9uIFR1bmluZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCistLWFjdGl2ZS1icmFuY2hlcz08bj46OgorCU1heGltdW0gbnVtYmVyIG9mIGJyYW5jaGVzIHRvIG1haW50YWluIGFjdGl2ZSBhdCBvbmNlLgorCVNlZSBgYE1lbW9yeSBVdGlsaXphdGlvbicnIGJlbG93IGZvciBkZXRhaWxzLiAgRGVmYXVsdCBpcyA1LgorCistLWJpZy1maWxlLXRocmVzaG9sZD08bj46OgorCU1heGltdW0gc2l6ZSBvZiBhIGJsb2IgdGhhdCBmYXN0LWltcG9ydCB3aWxsIGF0dGVtcHQgdG8KKwljcmVhdGUgYSBkZWx0YSBmb3IsIGV4cHJlc3NlZCBpbiBieXRlcy4gIFRoZSBkZWZhdWx0IGlzIDUxMm0KKwkoNTEyIE1pQikuICBTb21lIGltcG9ydGVycyBtYXkgd2lzaCB0byBsb3dlciB0aGlzIG9uIHN5c3RlbXMKKwl3aXRoIGNvbnN0cmFpbmVkIG1lbW9yeS4KKworLS1kZXB0aD08bj46OgorCU1heGltdW0gZGVsdGEgZGVwdGgsIGZvciBibG9iIGFuZCB0cmVlIGRlbHRpZmljYXRpb24uCisJRGVmYXVsdCBpcyAxMC4KKworLS1leHBvcnQtcGFjay1lZGdlcz08ZmlsZT46OgorCUFmdGVyIGNyZWF0aW5nIGEgcGFja2ZpbGUsIHByaW50IGEgbGluZSBvZiBkYXRhIHRvCisJPGZpbGU+IGxpc3RpbmcgdGhlIGZpbGVuYW1lIG9mIHRoZSBwYWNrZmlsZSBhbmQgdGhlIGxhc3QKKwljb21taXQgb24gZWFjaCBicmFuY2ggdGhhdCB3YXMgd3JpdHRlbiB0byB0aGF0IHBhY2tmaWxlLgorCVRoaXMgaW5mb3JtYXRpb24gbWF5IGJlIHVzZWZ1bCBhZnRlciBpbXBvcnRpbmcgcHJvamVjdHMKKwl3aG9zZSB0b3RhbCBvYmplY3Qgc2V0IGV4Y2VlZHMgdGhlIDQgR2lCIHBhY2tmaWxlIGxpbWl0LAorCWFzIHRoZXNlIGNvbW1pdHMgY2FuIGJlIHVzZWQgYXMgZWRnZSBwb2ludHMgZHVyaW5nIGNhbGxzCisJdG8gJ2dpdCBwYWNrLW9iamVjdHMnLgorCistLW1heC1wYWNrLXNpemU9PG4+OjoKKwlNYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFja2ZpbGUuCisJVGhlIGRlZmF1bHQgaXMgdW5saW1pdGVkLgorCisKK1BlcmZvcm1hbmNlCistLS0tLS0tLS0tLQorVGhlIGRlc2lnbiBvZiBmYXN0LWltcG9ydCBhbGxvd3MgaXQgdG8gaW1wb3J0IGxhcmdlIHByb2plY3RzIGluIGEgbWluaW11bQorYW1vdW50IG9mIG1lbW9yeSB1c2FnZSBhbmQgcHJvY2Vzc2luZyB0aW1lLiAgQXNzdW1pbmcgdGhlIGZyb250ZW5kCitpcyBhYmxlIHRvIGtlZXAgdXAgd2l0aCBmYXN0LWltcG9ydCBhbmQgZmVlZCBpdCBhIGNvbnN0YW50IHN0cmVhbSBvZiBkYXRhLAoraW1wb3J0IHRpbWVzIGZvciBwcm9qZWN0cyBob2xkaW5nIDEwKyB5ZWFycyBvZiBoaXN0b3J5IGFuZCBjb250YWluaW5nCisxMDAsMDAwKyBpbmRpdmlkdWFsIGNvbW1pdHMgYXJlIGdlbmVyYWxseSBjb21wbGV0ZWQgaW4ganVzdCAxLTIKK2hvdXJzIG9uIHF1aXRlIG1vZGVzdCAofiQyLDAwMCBVU0QpIGhhcmR3YXJlLgorCitNb3N0IGJvdHRsZW5lY2tzIGFwcGVhciB0byBiZSBpbiBmb3JlaWduIHNvdXJjZSBkYXRhIGFjY2VzcyAodGhlCitzb3VyY2UganVzdCBjYW5ub3QgZXh0cmFjdCByZXZpc2lvbnMgZmFzdCBlbm91Z2gpIG9yIGRpc2sgSU8gKGZhc3QtaW1wb3J0Cit3cml0ZXMgYXMgZmFzdCBhcyB0aGUgZGlzayB3aWxsIHRha2UgdGhlIGRhdGEpLiAgSW1wb3J0cyB3aWxsIHJ1bgorZmFzdGVyIGlmIHRoZSBzb3VyY2UgZGF0YSBpcyBzdG9yZWQgb24gYSBkaWZmZXJlbnQgZHJpdmUgdGhhbiB0aGUKK2Rlc3RpbmF0aW9uIEdpdCByZXBvc2l0b3J5IChkdWUgdG8gbGVzcyBJTyBjb250ZW50aW9uKS4KKworCitEZXZlbG9wbWVudCBDb3N0CistLS0tLS0tLS0tLS0tLS0tCitBIHR5cGljYWwgZnJvbnRlbmQgZm9yIGZhc3QtaW1wb3J0IHRlbmRzIHRvIHdlaWdoIGluIGF0IGFwcHJveGltYXRlbHkgMjAwCitsaW5lcyBvZiBQZXJsL1B5dGhvbi9SdWJ5IGNvZGUuICBNb3N0IGRldmVsb3BlcnMgaGF2ZSBiZWVuIGFibGUgdG8KK2NyZWF0ZSB3b3JraW5nIGltcG9ydGVycyBpbiBqdXN0IGEgY291cGxlIG9mIGhvdXJzLCBldmVuIHRob3VnaCBpdAoraXMgdGhlaXIgZmlyc3QgZXhwb3N1cmUgdG8gZmFzdC1pbXBvcnQsIGFuZCBzb21ldGltZXMgZXZlbiB0byBHaXQuICBUaGlzIGlzCithbiBpZGVhbCBzaXR1YXRpb24sIGdpdmVuIHRoYXQgbW9zdCBjb252ZXJzaW9uIHRvb2xzIGFyZSB0aHJvdy1hd2F5CisodXNlIG9uY2UsIGFuZCBuZXZlciBsb29rIGJhY2spLgorCisKK1BhcmFsbGVsIE9wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tCitMaWtlICdnaXQgcHVzaCcgb3IgJ2dpdCBmZXRjaCcsIGltcG9ydHMgaGFuZGxlZCBieSBmYXN0LWltcG9ydCBhcmUgc2FmZSB0bworcnVuIGFsb25nc2lkZSBwYXJhbGxlbCBgZ2l0IHJlcGFjayAtYSAtZGAgb3IgYGdpdCBnY2AgaW52b2NhdGlvbnMsCitvciBhbnkgb3RoZXIgR2l0IG9wZXJhdGlvbiAoaW5jbHVkaW5nICdnaXQgcHJ1bmUnLCBhcyBsb29zZSBvYmplY3RzCithcmUgbmV2ZXIgdXNlZCBieSBmYXN0LWltcG9ydCkuCisKK2Zhc3QtaW1wb3J0IGRvZXMgbm90IGxvY2sgdGhlIGJyYW5jaCBvciB0YWcgcmVmcyBpdCBpcyBhY3RpdmVseSBpbXBvcnRpbmcuCitBZnRlciB0aGUgaW1wb3J0LCBkdXJpbmcgaXRzIHJlZiB1cGRhdGUgcGhhc2UsIGZhc3QtaW1wb3J0IHRlc3RzIGVhY2gKK2V4aXN0aW5nIGJyYW5jaCByZWYgdG8gdmVyaWZ5IHRoZSB1cGRhdGUgd2lsbCBiZSBhIGZhc3QtZm9yd2FyZAordXBkYXRlICh0aGUgY29tbWl0IHN0b3JlZCBpbiB0aGUgcmVmIGlzIGNvbnRhaW5lZCBpbiB0aGUgbmV3CitoaXN0b3J5IG9mIHRoZSBjb21taXQgdG8gYmUgd3JpdHRlbikuICBJZiB0aGUgdXBkYXRlIGlzIG5vdCBhCitmYXN0LWZvcndhcmQgdXBkYXRlLCBmYXN0LWltcG9ydCB3aWxsIHNraXAgdXBkYXRpbmcgdGhhdCByZWYgYW5kIGluc3RlYWQKK3ByaW50cyBhIHdhcm5pbmcgbWVzc2FnZS4gIGZhc3QtaW1wb3J0IHdpbGwgYWx3YXlzIGF0dGVtcHQgdG8gdXBkYXRlIGFsbAorYnJhbmNoIHJlZnMsIGFuZCBkb2VzIG5vdCBzdG9wIG9uIHRoZSBmaXJzdCBmYWlsdXJlLgorCitCcmFuY2ggdXBkYXRlcyBjYW4gYmUgZm9yY2VkIHdpdGggLS1mb3JjZSwgYnV0IGl0J3MgcmVjb21tZW5kZWQgdGhhdAordGhpcyBvbmx5IGJlIHVzZWQgb24gYW4gb3RoZXJ3aXNlIHF1aWV0IHJlcG9zaXRvcnkuICBVc2luZyAtLWZvcmNlCitpcyBub3QgbmVjZXNzYXJ5IGZvciBhbiBpbml0aWFsIGltcG9ydCBpbnRvIGFuIGVtcHR5IHJlcG9zaXRvcnkuCisKKworVGVjaG5pY2FsIERpc2N1c3Npb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitmYXN0LWltcG9ydCB0cmFja3MgYSBzZXQgb2YgYnJhbmNoZXMgaW4gbWVtb3J5LiAgQW55IGJyYW5jaCBjYW4gYmUgY3JlYXRlZAorb3IgbW9kaWZpZWQgYXQgYW55IHBvaW50IGR1cmluZyB0aGUgaW1wb3J0IHByb2Nlc3MgYnkgc2VuZGluZyBhCitgY29tbWl0YCBjb21tYW5kIG9uIHRoZSBpbnB1dCBzdHJlYW0uICBUaGlzIGRlc2lnbiBhbGxvd3MgYSBmcm9udGVuZAorcHJvZ3JhbSB0byBwcm9jZXNzIGFuIHVubGltaXRlZCBudW1iZXIgb2YgYnJhbmNoZXMgc2ltdWx0YW5lb3VzbHksCitnZW5lcmF0aW5nIGNvbW1pdHMgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBzb3VyY2UKK2RhdGEuICBJdCBhbHNvIHNpbXBsaWZpZXMgdGhlIGZyb250ZW5kIHByb2dyYW1zIGNvbnNpZGVyYWJseS4KKworZmFzdC1pbXBvcnQgZG9lcyBub3QgdXNlIG9yIGFsdGVyIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBvciBhbnkKK2ZpbGUgd2l0aGluIGl0LiAgKEl0IGRvZXMgaG93ZXZlciB1cGRhdGUgdGhlIGN1cnJlbnQgR2l0IHJlcG9zaXRvcnksCithcyByZWZlcmVuY2VkIGJ5IGBHSVRfRElSYC4pICBUaGVyZWZvcmUgYW4gaW1wb3J0IGZyb250ZW5kIG1heSB1c2UKK3RoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgaXRzIG93biBwdXJwb3Nlcywgc3VjaCBhcyBleHRyYWN0aW5nIGZpbGUKK3JldmlzaW9ucyBmcm9tIHRoZSBmb3JlaWduIHNvdXJjZS4gIFRoaXMgaWdub3JhbmNlIG9mIHRoZSB3b3JraW5nCitkaXJlY3RvcnkgYWxzbyBhbGxvd3MgZmFzdC1pbXBvcnQgdG8gcnVuIHZlcnkgcXVpY2tseSwgYXMgaXQgZG9lcyBub3QKK25lZWQgdG8gcGVyZm9ybSBhbnkgY29zdGx5IGZpbGUgdXBkYXRlIG9wZXJhdGlvbnMgd2hlbiBzd2l0Y2hpbmcKK2JldHdlZW4gYnJhbmNoZXMuCisKK0lucHV0IEZvcm1hdAorLS0tLS0tLS0tLS0tCitXaXRoIHRoZSBleGNlcHRpb24gb2YgcmF3IGZpbGUgZGF0YSAod2hpY2ggR2l0IGRvZXMgbm90IGludGVycHJldCkKK3RoZSBmYXN0LWltcG9ydCBpbnB1dCBmb3JtYXQgaXMgdGV4dCAoQVNDSUkpIGJhc2VkLiAgVGhpcyB0ZXh0IGJhc2VkCitmb3JtYXQgc2ltcGxpZmllcyBkZXZlbG9wbWVudCBhbmQgZGVidWdnaW5nIG9mIGZyb250ZW5kIHByb2dyYW1zLAorZXNwZWNpYWxseSB3aGVuIGEgaGlnaGVyIGxldmVsIGxhbmd1YWdlIHN1Y2ggYXMgUGVybCwgUHl0aG9uIG9yCitSdWJ5IGlzIGJlaW5nIHVzZWQuCisKK2Zhc3QtaW1wb3J0IGlzIHZlcnkgc3RyaWN0IGFib3V0IGl0cyBpbnB1dC4gIFdoZXJlIHdlIHNheSBTUCBiZWxvdyB3ZSBtZWFuCisqZXhhY3RseSogb25lIHNwYWNlLiAgTGlrZXdpc2UgTEYgbWVhbnMgb25lIChhbmQgb25seSBvbmUpIGxpbmVmZWVkCithbmQgSFQgb25lIChhbmQgb25seSBvbmUpIGhvcml6b250YWwgdGFiLgorU3VwcGx5aW5nIGFkZGl0aW9uYWwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHdpbGwgY2F1c2UgdW5leHBlY3RlZAorcmVzdWx0cywgc3VjaCBhcyBicmFuY2ggbmFtZXMgb3IgZmlsZSBuYW1lcyB3aXRoIGxlYWRpbmcgb3IgdHJhaWxpbmcKK3NwYWNlcyBpbiB0aGVpciBuYW1lLCBvciBlYXJseSB0ZXJtaW5hdGlvbiBvZiBmYXN0LWltcG9ydCB3aGVuIGl0IGVuY291bnRlcnMKK3VuZXhwZWN0ZWQgaW5wdXQuCisKK1N0cmVhbSBDb21tZW50cworfn5+fn5+fn5+fn5+fn5+CitUbyBhaWQgaW4gZGVidWdnaW5nIGZyb250ZW5kcyBmYXN0LWltcG9ydCBpZ25vcmVzIGFueSBsaW5lIHRoYXQKK2JlZ2lucyB3aXRoIGAjYCAoQVNDSUkgcG91bmQvaGFzaCkgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgbGluZQorZW5kaW5nIGBMRmAuICBBIGNvbW1lbnQgbGluZSBtYXkgY29udGFpbiBhbnkgc2VxdWVuY2Ugb2YgYnl0ZXMKK3RoYXQgZG9lcyBub3QgY29udGFpbiBhbiBMRiBhbmQgdGhlcmVmb3JlIG1heSBiZSB1c2VkIHRvIGluY2x1ZGUKK2FueSBkZXRhaWxlZCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBiZSBzcGVjaWZpYyB0byB0aGUKK2Zyb250ZW5kIGFuZCB1c2VmdWwgd2hlbiBpbnNwZWN0aW5nIGEgZmFzdC1pbXBvcnQgZGF0YSBzdHJlYW0uCisKK0RhdGUgRm9ybWF0cworfn5+fn5+fn5+fn5+CitUaGUgZm9sbG93aW5nIGRhdGUgZm9ybWF0cyBhcmUgc3VwcG9ydGVkLiAgQSBmcm9udGVuZCBzaG91bGQgc2VsZWN0Cit0aGUgZm9ybWF0IGl0IHdpbGwgdXNlIGZvciB0aGlzIGltcG9ydCBieSBwYXNzaW5nIHRoZSBmb3JtYXQgbmFtZQoraW4gdGhlIC0tZGF0ZS1mb3JtYXQ9PGZtdD4gY29tbWFuZC1saW5lIG9wdGlvbi4KKworYHJhd2A6OgorCVRoaXMgaXMgdGhlIEdpdCBuYXRpdmUgZm9ybWF0IGFuZCBpcyBgPHRpbWU+IFNQIDxvZmZ1dGM+YC4KKwlJdCBpcyBhbHNvIGZhc3QtaW1wb3J0J3MgZGVmYXVsdCBmb3JtYXQsIGlmIC0tZGF0ZS1mb3JtYXQgd2FzCisJbm90IHNwZWNpZmllZC4KKysKK1RoZSB0aW1lIG9mIHRoZSBldmVudCBpcyBzcGVjaWZpZWQgYnkgYDx0aW1lPmAgYXMgdGhlIG51bWJlciBvZgorc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaCAobWlkbmlnaHQsIEphbiAxLCAxOTcwLCBVVEMpIGFuZCBpcword3JpdHRlbiBhcyBhbiBBU0NJSSBkZWNpbWFsIGludGVnZXIuCisrCitUaGUgbG9jYWwgb2Zmc2V0IGlzIHNwZWNpZmllZCBieSBgPG9mZnV0Yz5gIGFzIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUKK29mZnNldCBmcm9tIFVUQy4gIEZvciBleGFtcGxlIEVTVCAod2hpY2ggaXMgNSBob3VycyBiZWhpbmQgVVRDKQord291bGQgYmUgZXhwcmVzc2VkIGluIGA8dHo+YCBieSBgYC0wNTAwJycgd2hpbGUgVVRDIGlzIGBgKzAwMDAnJy4KK1RoZSBsb2NhbCBvZmZzZXQgZG9lcyBub3QgYWZmZWN0IGA8dGltZT5gOyBpdCBpcyB1c2VkIG9ubHkgYXMgYW4KK2FkdmlzZW1lbnQgdG8gaGVscCBmb3JtYXR0aW5nIHJvdXRpbmVzIGRpc3BsYXkgdGhlIHRpbWVzdGFtcC4KKysKK0lmIHRoZSBsb2NhbCBvZmZzZXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgc291cmNlIG1hdGVyaWFsLCB1c2UKK2BgKzAwMDAnJywgb3IgdGhlIG1vc3QgY29tbW9uIGxvY2FsIG9mZnNldC4gIEZvciBleGFtcGxlIG1hbnkKK29yZ2FuaXphdGlvbnMgaGF2ZSBhIENWUyByZXBvc2l0b3J5IHdoaWNoIGhhcyBvbmx5IGV2ZXIgYmVlbiBhY2Nlc3NlZAorYnkgdXNlcnMgd2hvIGFyZSBsb2NhdGVkIGluIHRoZSBzYW1lIGxvY2F0aW9uIGFuZCB0aW1lIHpvbmUuICBJbiB0aGlzCitjYXNlIGEgcmVhc29uYWJsZSBvZmZzZXQgZnJvbSBVVEMgY291bGQgYmUgYXNzdW1lZC4KKysKK1VubGlrZSB0aGUgYHJmYzI4MjJgIGZvcm1hdCwgdGhpcyBmb3JtYXQgaXMgdmVyeSBzdHJpY3QuICBBbnkKK3ZhcmlhdGlvbiBpbiBmb3JtYXR0aW5nIHdpbGwgY2F1c2UgZmFzdC1pbXBvcnQgdG8gcmVqZWN0IHRoZSB2YWx1ZS4KKworYHJmYzI4MjJgOjoKKwlUaGlzIGlzIHRoZSBzdGFuZGFyZCBlbWFpbCBmb3JtYXQgYXMgZGVzY3JpYmVkIGJ5IFJGQyAyODIyLgorKworQW4gZXhhbXBsZSB2YWx1ZSBpcyBgYFR1ZSBGZWIgNiAxMToyMjoxOCAyMDA3IC0wNTAwJycuICBUaGUgR2l0CitwYXJzZXIgaXMgYWNjdXJhdGUsIGJ1dCBhIGxpdHRsZSBvbiB0aGUgbGVuaWVudCBzaWRlLiAgSXQgaXMgdGhlCitzYW1lIHBhcnNlciB1c2VkIGJ5ICdnaXQgYW0nIHdoZW4gYXBwbHlpbmcgcGF0Y2hlcworcmVjZWl2ZWQgZnJvbSBlbWFpbC4KKysKK1NvbWUgbWFsZm9ybWVkIHN0cmluZ3MgbWF5IGJlIGFjY2VwdGVkIGFzIHZhbGlkIGRhdGVzLiAgSW4gc29tZSBvZgordGhlc2UgY2FzZXMgR2l0IHdpbGwgc3RpbGwgYmUgYWJsZSB0byBvYnRhaW4gdGhlIGNvcnJlY3QgZGF0ZSBmcm9tCit0aGUgbWFsZm9ybWVkIHN0cmluZy4gIFRoZXJlIGFyZSBhbHNvIHNvbWUgdHlwZXMgb2YgbWFsZm9ybWVkCitzdHJpbmdzIHdoaWNoIEdpdCB3aWxsIHBhcnNlIHdyb25nLCBhbmQgeWV0IGNvbnNpZGVyIHZhbGlkLgorU2VyaW91c2x5IG1hbGZvcm1lZCBzdHJpbmdzIHdpbGwgYmUgcmVqZWN0ZWQuCisrCitVbmxpa2UgdGhlIGByYXdgIGZvcm1hdCBhYm92ZSwgdGhlIHRpbWUgem9uZS9VVEMgb2Zmc2V0IGluZm9ybWF0aW9uCitjb250YWluZWQgaW4gYW4gUkZDIDI4MjIgZGF0ZSBzdHJpbmcgaXMgdXNlZCB0byBhZGp1c3QgdGhlIGRhdGUKK3ZhbHVlIHRvIFVUQyBwcmlvciB0byBzdG9yYWdlLiAgVGhlcmVmb3JlIGl0IGlzIGltcG9ydGFudCB0aGF0Cit0aGlzIGluZm9ybWF0aW9uIGJlIGFzIGFjY3VyYXRlIGFzIHBvc3NpYmxlLgorKworSWYgdGhlIHNvdXJjZSBtYXRlcmlhbCB1c2VzIFJGQyAyODIyIHN0eWxlIGRhdGVzLAordGhlIGZyb250ZW5kIHNob3VsZCBsZXQgZmFzdC1pbXBvcnQgaGFuZGxlIHRoZSBwYXJzaW5nIGFuZCBjb252ZXJzaW9uCisocmF0aGVyIHRoYW4gYXR0ZW1wdGluZyB0byBkbyBpdCBpdHNlbGYpIGFzIHRoZSBHaXQgcGFyc2VyIGhhcworYmVlbiB3ZWxsIHRlc3RlZCBpbiB0aGUgd2lsZC4KKysKK0Zyb250ZW5kcyBzaG91bGQgcHJlZmVyIHRoZSBgcmF3YCBmb3JtYXQgaWYgdGhlIHNvdXJjZSBtYXRlcmlhbAorYWxyZWFkeSB1c2VzIFVOSVgtZXBvY2ggZm9ybWF0LCBjYW4gYmUgY29heGVkIHRvIGdpdmUgZGF0ZXMgaW4gdGhhdAorZm9ybWF0LCBvciBpdHMgZm9ybWF0IGlzIGVhc2lseSBjb252ZXJ0aWJsZSB0byBpdCwgYXMgdGhlcmUgaXMgbm8KK2FtYmlndWl0eSBpbiBwYXJzaW5nLgorCitgbm93YDo6CisJQWx3YXlzIHVzZSB0aGUgY3VycmVudCB0aW1lIGFuZCB0aW1lIHpvbmUuICBUaGUgbGl0ZXJhbAorCWBub3dgIG11c3QgYWx3YXlzIGJlIHN1cHBsaWVkIGZvciBgPHdoZW4+YC4KKysKK1RoaXMgaXMgYSB0b3kgZm9ybWF0LiAgVGhlIGN1cnJlbnQgdGltZSBhbmQgdGltZSB6b25lIG9mIHRoaXMgc3lzdGVtCitpcyBhbHdheXMgY29waWVkIGludG8gdGhlIGlkZW50aXR5IHN0cmluZyBhdCB0aGUgdGltZSBpdCBpcyBiZWluZworY3JlYXRlZCBieSBmYXN0LWltcG9ydC4gIFRoZXJlIGlzIG5vIHdheSB0byBzcGVjaWZ5IGEgZGlmZmVyZW50IHRpbWUgb3IKK3RpbWUgem9uZS4KKysKK1RoaXMgcGFydGljdWxhciBmb3JtYXQgaXMgc3VwcGxpZWQgYXMgaXQncyBzaG9ydCB0byBpbXBsZW1lbnQgYW5kCittYXkgYmUgdXNlZnVsIHRvIGEgcHJvY2VzcyB0aGF0IHdhbnRzIHRvIGNyZWF0ZSBhIG5ldyBjb21taXQKK3JpZ2h0IG5vdywgd2l0aG91dCBuZWVkaW5nIHRvIHVzZSBhIHdvcmtpbmcgZGlyZWN0b3J5IG9yCisnZ2l0IHVwZGF0ZS1pbmRleCcuCisrCitJZiBzZXBhcmF0ZSBgYXV0aG9yYCBhbmQgYGNvbW1pdHRlcmAgY29tbWFuZHMgYXJlIHVzZWQgaW4gYSBgY29tbWl0YAordGhlIHRpbWVzdGFtcHMgbWF5IG5vdCBtYXRjaCwgYXMgdGhlIHN5c3RlbSBjbG9jayB3aWxsIGJlIHBvbGxlZAordHdpY2UgKG9uY2UgZm9yIGVhY2ggY29tbWFuZCkuICBUaGUgb25seSB3YXkgdG8gZW5zdXJlIHRoYXQgYm90aAorYXV0aG9yIGFuZCBjb21taXR0ZXIgaWRlbnRpdHkgaW5mb3JtYXRpb24gaGFzIHRoZSBzYW1lIHRpbWVzdGFtcAoraXMgdG8gb21pdCBgYXV0aG9yYCAodGh1cyBjb3B5aW5nIGZyb20gYGNvbW1pdHRlcmApIG9yIHRvIHVzZSBhCitkYXRlIGZvcm1hdCBvdGhlciB0aGFuIGBub3dgLgorCitDb21tYW5kcworfn5+fn5+fn4KK2Zhc3QtaW1wb3J0IGFjY2VwdHMgc2V2ZXJhbCBjb21tYW5kcyB0byB1cGRhdGUgdGhlIGN1cnJlbnQgcmVwb3NpdG9yeQorYW5kIGNvbnRyb2wgdGhlIGN1cnJlbnQgaW1wb3J0IHByb2Nlc3MuICBNb3JlIGRldGFpbGVkIGRpc2N1c3Npb24KKyh3aXRoIGV4YW1wbGVzKSBvZiBlYWNoIGNvbW1hbmQgZm9sbG93cyBsYXRlci4KKworYGNvbW1pdGA6OgorCUNyZWF0ZXMgYSBuZXcgYnJhbmNoIG9yIHVwZGF0ZXMgYW4gZXhpc3RpbmcgYnJhbmNoIGJ5CisJY3JlYXRpbmcgYSBuZXcgY29tbWl0IGFuZCB1cGRhdGluZyB0aGUgYnJhbmNoIHRvIHBvaW50IGF0CisJdGhlIG5ld2x5IGNyZWF0ZWQgY29tbWl0LgorCitgdGFnYDo6CisJQ3JlYXRlcyBhbiBhbm5vdGF0ZWQgdGFnIG9iamVjdCBmcm9tIGFuIGV4aXN0aW5nIGNvbW1pdCBvcgorCWJyYW5jaC4gIExpZ2h0d2VpZ2h0IHRhZ3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21tYW5kLAorCWFzIHRoZXkgYXJlIG5vdCByZWNvbW1lbmRlZCBmb3IgcmVjb3JkaW5nIG1lYW5pbmdmdWwgcG9pbnRzCisJaW4gdGltZS4KKworYHJlc2V0YDo6CisJUmVzZXQgYW4gZXhpc3RpbmcgYnJhbmNoIChvciBhIG5ldyBicmFuY2gpIHRvIGEgc3BlY2lmaWMKKwlyZXZpc2lvbi4gIFRoaXMgY29tbWFuZCBtdXN0IGJlIHVzZWQgdG8gY2hhbmdlIGEgYnJhbmNoIHRvCisJYSBzcGVjaWZpYyByZXZpc2lvbiB3aXRob3V0IG1ha2luZyBhIGNvbW1pdCBvbiBpdC4KKworYGJsb2JgOjoKKwlDb252ZXJ0IHJhdyBmaWxlIGRhdGEgaW50byBhIGJsb2IsIGZvciBmdXR1cmUgdXNlIGluIGEKKwlgY29tbWl0YCBjb21tYW5kLiAgVGhpcyBjb21tYW5kIGlzIG9wdGlvbmFsIGFuZCBpcyBub3QKKwluZWVkZWQgdG8gcGVyZm9ybSBhbiBpbXBvcnQuCisKK2BjaGVja3BvaW50YDo6CisJRm9yY2VzIGZhc3QtaW1wb3J0IHRvIGNsb3NlIHRoZSBjdXJyZW50IHBhY2tmaWxlLCBnZW5lcmF0ZSBpdHMKKwl1bmlxdWUgU0hBLTEgY2hlY2tzdW0gYW5kIGluZGV4LCBhbmQgc3RhcnQgYSBuZXcgcGFja2ZpbGUuCisJVGhpcyBjb21tYW5kIGlzIG9wdGlvbmFsIGFuZCBpcyBub3QgbmVlZGVkIHRvIHBlcmZvcm0KKwlhbiBpbXBvcnQuCisKK2Bwcm9ncmVzc2A6OgorCUNhdXNlcyBmYXN0LWltcG9ydCB0byBlY2hvIHRoZSBlbnRpcmUgbGluZSB0byBpdHMgb3duCisJc3RhbmRhcmQgb3V0cHV0LiAgVGhpcyBjb21tYW5kIGlzIG9wdGlvbmFsIGFuZCBpcyBub3QgbmVlZGVkCisJdG8gcGVyZm9ybSBhbiBpbXBvcnQuCisKK2Bkb25lYDo6CisJTWFya3MgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLiBUaGlzIGNvbW1hbmQgaXMgb3B0aW9uYWwKKwl1bmxlc3MgdGhlIGBkb25lYCBmZWF0dXJlIHdhcyByZXF1ZXN0ZWQgdXNpbmcgdGhlCisJYC0tZG9uZWAgY29tbWFuZC1saW5lIG9wdGlvbiBvciBgZmVhdHVyZSBkb25lYCBjb21tYW5kLgorCitgZ2V0LW1hcmtgOjoKKwlDYXVzZXMgZmFzdC1pbXBvcnQgdG8gcHJpbnQgdGhlIFNIQS0xIGNvcnJlc3BvbmRpbmcgdG8gYSBtYXJrCisJdG8gdGhlIGZpbGUgZGVzY3JpcHRvciBzZXQgd2l0aCBgLS1jYXQtYmxvYi1mZGAsIG9yIGBzdGRvdXRgIGlmCisJdW5zcGVjaWZpZWQuCisKK2BjYXQtYmxvYmA6OgorCUNhdXNlcyBmYXN0LWltcG9ydCB0byBwcmludCBhIGJsb2IgaW4gJ2NhdC1maWxlIC0tYmF0Y2gnCisJZm9ybWF0IHRvIHRoZSBmaWxlIGRlc2NyaXB0b3Igc2V0IHdpdGggYC0tY2F0LWJsb2ItZmRgIG9yCisJYHN0ZG91dGAgaWYgdW5zcGVjaWZpZWQuCisKK2Bsc2A6OgorCUNhdXNlcyBmYXN0LWltcG9ydCB0byBwcmludCBhIGxpbmUgZGVzY3JpYmluZyBhIGRpcmVjdG9yeQorCWVudHJ5IGluICdscy10cmVlJyBmb3JtYXQgdG8gdGhlIGZpbGUgZGVzY3JpcHRvciBzZXQgd2l0aAorCWAtLWNhdC1ibG9iLWZkYCBvciBgc3Rkb3V0YCBpZiB1bnNwZWNpZmllZC4KKworYGZlYXR1cmVgOjoKKwlFbmFibGUgdGhlIHNwZWNpZmllZCBmZWF0dXJlLiBUaGlzIHJlcXVpcmVzIHRoYXQgZmFzdC1pbXBvcnQKKwlzdXBwb3J0cyB0aGUgc3BlY2lmaWVkIGZlYXR1cmUsIGFuZCBhYm9ydHMgaWYgaXQgZG9lcyBub3QuCisKK2BvcHRpb25gOjoKKwlTcGVjaWZ5IGFueSBvZiB0aGUgb3B0aW9ucyBsaXN0ZWQgdW5kZXIgT1BUSU9OUyB0aGF0IGRvIG5vdAorCWNoYW5nZSBzdHJlYW0gc2VtYW50aWMgdG8gc3VpdCB0aGUgZnJvbnRlbmQncyBuZWVkcy4gVGhpcworCWNvbW1hbmQgaXMgb3B0aW9uYWwgYW5kIGlzIG5vdCBuZWVkZWQgdG8gcGVyZm9ybSBhbiBpbXBvcnQuCisKK2Bjb21taXRgCit+fn5+fn5+fgorQ3JlYXRlIG9yIHVwZGF0ZSBhIGJyYW5jaCB3aXRoIGEgbmV3IGNvbW1pdCwgcmVjb3JkaW5nIG9uZSBsb2dpY2FsCitjaGFuZ2UgdG8gdGhlIHByb2plY3QuCisKKy4uLi4KKwknY29tbWl0JyBTUCA8cmVmPiBMRgorCW1hcms/CisJKCdhdXRob3InIChTUCA8bmFtZT4pPyBTUCBMVCA8ZW1haWw+IEdUIFNQIDx3aGVuPiBMRik/CisJJ2NvbW1pdHRlcicgKFNQIDxuYW1lPik/IFNQIExUIDxlbWFpbD4gR1QgU1AgPHdoZW4+IExGCisJZGF0YQorCSgnZnJvbScgU1AgPGNvbW1pdC1pc2g+IExGKT8KKwkoJ21lcmdlJyBTUCA8Y29tbWl0LWlzaD4gTEYpPworCShmaWxlbW9kaWZ5IHwgZmlsZWRlbGV0ZSB8IGZpbGVjb3B5IHwgZmlsZXJlbmFtZSB8IGZpbGVkZWxldGVhbGwgfCBub3RlbW9kaWZ5KSoKKwlMRj8KKy4uLi4KKword2hlcmUgYDxyZWY+YCBpcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRvIG1ha2UgdGhlIGNvbW1pdCBvbi4KK1R5cGljYWxseSBicmFuY2ggbmFtZXMgYXJlIHByZWZpeGVkIHdpdGggYHJlZnMvaGVhZHMvYCBpbgorR2l0LCBzbyBpbXBvcnRpbmcgdGhlIENWUyBicmFuY2ggc3ltYm9sIGBSRUxFTkctMV8wYCB3b3VsZCB1c2UKK2ByZWZzL2hlYWRzL1JFTEVORy0xXzBgIGZvciB0aGUgdmFsdWUgb2YgYDxyZWY+YC4gIFRoZSB2YWx1ZSBvZgorYDxyZWY+YCBtdXN0IGJlIGEgdmFsaWQgcmVmbmFtZSBpbiBHaXQuICBBcyBgTEZgIGlzIG5vdCB2YWxpZCBpbgorYSBHaXQgcmVmbmFtZSwgbm8gcXVvdGluZyBvciBlc2NhcGluZyBzeW50YXggaXMgc3VwcG9ydGVkIGhlcmUuCisKK0EgYG1hcmtgIGNvbW1hbmQgbWF5IG9wdGlvbmFsbHkgYXBwZWFyLCByZXF1ZXN0aW5nIGZhc3QtaW1wb3J0IHRvIHNhdmUgYQorcmVmZXJlbmNlIHRvIHRoZSBuZXdseSBjcmVhdGVkIGNvbW1pdCBmb3IgZnV0dXJlIHVzZSBieSB0aGUgZnJvbnRlbmQKKyhzZWUgYmVsb3cgZm9yIGZvcm1hdCkuICBJdCBpcyB2ZXJ5IGNvbW1vbiBmb3IgZnJvbnRlbmRzIHRvIG1hcmsKK2V2ZXJ5IGNvbW1pdCB0aGV5IGNyZWF0ZSwgdGhlcmVieSBhbGxvd2luZyBmdXR1cmUgYnJhbmNoIGNyZWF0aW9uCitmcm9tIGFueSBpbXBvcnRlZCBjb21taXQuCisKK1RoZSBgZGF0YWAgY29tbWFuZCBmb2xsb3dpbmcgYGNvbW1pdHRlcmAgbXVzdCBzdXBwbHkgdGhlIGNvbW1pdAorbWVzc2FnZSAoc2VlIGJlbG93IGZvciBgZGF0YWAgY29tbWFuZCBzeW50YXgpLiAgVG8gaW1wb3J0IGFuIGVtcHR5Citjb21taXQgbWVzc2FnZSB1c2UgYSAwIGxlbmd0aCBkYXRhLiAgQ29tbWl0IG1lc3NhZ2VzIGFyZSBmcmVlLWZvcm0KK2FuZCBhcmUgbm90IGludGVycHJldGVkIGJ5IEdpdC4gIEN1cnJlbnRseSB0aGV5IG11c3QgYmUgZW5jb2RlZCBpbgorVVRGLTgsIGFzIGZhc3QtaW1wb3J0IGRvZXMgbm90IHBlcm1pdCBvdGhlciBlbmNvZGluZ3MgdG8gYmUgc3BlY2lmaWVkLgorCitaZXJvIG9yIG1vcmUgYGZpbGVtb2RpZnlgLCBgZmlsZWRlbGV0ZWAsIGBmaWxlY29weWAsIGBmaWxlcmVuYW1lYCwKK2BmaWxlZGVsZXRlYWxsYCBhbmQgYG5vdGVtb2RpZnlgIGNvbW1hbmRzCittYXkgYmUgaW5jbHVkZWQgdG8gdXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgYnJhbmNoIHByaW9yIHRvCitjcmVhdGluZyB0aGUgY29tbWl0LiAgVGhlc2UgY29tbWFuZHMgbWF5IGJlIHN1cHBsaWVkIGluIGFueSBvcmRlci4KK0hvd2V2ZXIgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhIGBmaWxlZGVsZXRlYWxsYCBjb21tYW5kIHByZWNlZGUKK2FsbCBgZmlsZW1vZGlmeWAsIGBmaWxlY29weWAsIGBmaWxlcmVuYW1lYCBhbmQgYG5vdGVtb2RpZnlgIGNvbW1hbmRzIGluCit0aGUgc2FtZSBjb21taXQsIGFzIGBmaWxlZGVsZXRlYWxsYCB3aXBlcyB0aGUgYnJhbmNoIGNsZWFuIChzZWUgYmVsb3cpLgorCitUaGUgYExGYCBhZnRlciB0aGUgY29tbWFuZCBpcyBvcHRpb25hbCAoaXQgdXNlZCB0byBiZSByZXF1aXJlZCkuCisKK2BhdXRob3JgCiteXl5eXl5eXgorQW4gYGF1dGhvcmAgY29tbWFuZCBtYXkgb3B0aW9uYWxseSBhcHBlYXIsIGlmIHRoZSBhdXRob3IgaW5mb3JtYXRpb24KK21pZ2h0IGRpZmZlciBmcm9tIHRoZSBjb21taXR0ZXIgaW5mb3JtYXRpb24uICBJZiBgYXV0aG9yYCBpcyBvbWl0dGVkCit0aGVuIGZhc3QtaW1wb3J0IHdpbGwgYXV0b21hdGljYWxseSB1c2UgdGhlIGNvbW1pdHRlcidzIGluZm9ybWF0aW9uIGZvcgordGhlIGF1dGhvciBwb3J0aW9uIG9mIHRoZSBjb21taXQuICBTZWUgYmVsb3cgZm9yIGEgZGVzY3JpcHRpb24gb2YKK3RoZSBmaWVsZHMgaW4gYGF1dGhvcmAsIGFzIHRoZXkgYXJlIGlkZW50aWNhbCB0byBgY29tbWl0dGVyYC4KKworYGNvbW1pdHRlcmAKK15eXl5eXl5eXl5eCitUaGUgYGNvbW1pdHRlcmAgY29tbWFuZCBpbmRpY2F0ZXMgd2hvIG1hZGUgdGhpcyBjb21taXQsIGFuZCB3aGVuCit0aGV5IG1hZGUgaXQuCisKK0hlcmUgYDxuYW1lPmAgaXMgdGhlIHBlcnNvbidzIGRpc3BsYXkgbmFtZSAoZm9yIGV4YW1wbGUKK2BgQ29tIE0gSXR0ZXInJykgYW5kIGA8ZW1haWw+YCBpcyB0aGUgcGVyc29uJ3MgZW1haWwgYWRkcmVzcworKGBgXGNtQGV4YW1wbGUuY29tJycpLiAgYExUYCBhbmQgYEdUYCBhcmUgdGhlIGxpdGVyYWwgbGVzcy10aGFuIChceDNjKQorYW5kIGdyZWF0ZXItdGhhbiAoXHgzZSkgc3ltYm9scy4gIFRoZXNlIGFyZSByZXF1aXJlZCB0byBkZWxpbWl0Cit0aGUgZW1haWwgYWRkcmVzcyBmcm9tIHRoZSBvdGhlciBmaWVsZHMgaW4gdGhlIGxpbmUuICBOb3RlIHRoYXQKK2A8bmFtZT5gIGFuZCBgPGVtYWlsPmAgYXJlIGZyZWUtZm9ybSBhbmQgbWF5IGNvbnRhaW4gYW55IHNlcXVlbmNlCitvZiBieXRlcywgZXhjZXB0IGBMVGAsIGBHVGAgYW5kIGBMRmAuICBgPG5hbWU+YCBpcyB0eXBpY2FsbHkgVVRGLTggZW5jb2RlZC4KKworVGhlIHRpbWUgb2YgdGhlIGNoYW5nZSBpcyBzcGVjaWZpZWQgYnkgYDx3aGVuPmAgdXNpbmcgdGhlIGRhdGUgZm9ybWF0Cit0aGF0IHdhcyBzZWxlY3RlZCBieSB0aGUgLS1kYXRlLWZvcm1hdD08Zm10PiBjb21tYW5kLWxpbmUgb3B0aW9uLgorU2VlIGBgRGF0ZSBGb3JtYXRzJycgYWJvdmUgZm9yIHRoZSBzZXQgb2Ygc3VwcG9ydGVkIGZvcm1hdHMsIGFuZAordGhlaXIgc3ludGF4LgorCitgZnJvbWAKK15eXl5eXgorVGhlIGBmcm9tYCBjb21tYW5kIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29tbWl0IHRvIGluaXRpYWxpemUKK3RoaXMgYnJhbmNoIGZyb20uICBUaGlzIHJldmlzaW9uIHdpbGwgYmUgdGhlIGZpcnN0IGFuY2VzdG9yIG9mIHRoZQorbmV3IGNvbW1pdC4gIFRoZSBzdGF0ZSBvZiB0aGUgdHJlZSBidWlsdCBhdCB0aGlzIGNvbW1pdCB3aWxsIGJlZ2luCit3aXRoIHRoZSBzdGF0ZSBhdCB0aGUgYGZyb21gIGNvbW1pdCwgYW5kIGJlIGFsdGVyZWQgYnkgdGhlIGNvbnRlbnQKK21vZGlmaWNhdGlvbnMgaW4gdGhpcyBjb21taXQuCisKK09taXR0aW5nIHRoZSBgZnJvbWAgY29tbWFuZCBpbiB0aGUgZmlyc3QgY29tbWl0IG9mIGEgbmV3IGJyYW5jaAord2lsbCBjYXVzZSBmYXN0LWltcG9ydCB0byBjcmVhdGUgdGhhdCBjb21taXQgd2l0aCBubyBhbmNlc3Rvci4gVGhpcwordGVuZHMgdG8gYmUgZGVzaXJlZCBvbmx5IGZvciB0aGUgaW5pdGlhbCBjb21taXQgb2YgYSBwcm9qZWN0LgorSWYgdGhlIGZyb250ZW5kIGNyZWF0ZXMgYWxsIGZpbGVzIGZyb20gc2NyYXRjaCB3aGVuIG1ha2luZyBhIG5ldworYnJhbmNoLCBhIGBtZXJnZWAgY29tbWFuZCBtYXkgYmUgdXNlZCBpbnN0ZWFkIG9mIGBmcm9tYCB0byBzdGFydAordGhlIGNvbW1pdCB3aXRoIGFuIGVtcHR5IHRyZWUuCitPbWl0dGluZyB0aGUgYGZyb21gIGNvbW1hbmQgb24gZXhpc3RpbmcgYnJhbmNoZXMgaXMgdXN1YWxseSBkZXNpcmVkLAorYXMgdGhlIGN1cnJlbnQgY29tbWl0IG9uIHRoYXQgYnJhbmNoIGlzIGF1dG9tYXRpY2FsbHkgYXNzdW1lZCB0bworYmUgdGhlIGZpcnN0IGFuY2VzdG9yIG9mIHRoZSBuZXcgY29tbWl0LgorCitBcyBgTEZgIGlzIG5vdCB2YWxpZCBpbiBhIEdpdCByZWZuYW1lIG9yIFNIQS0xIGV4cHJlc3Npb24sIG5vCitxdW90aW5nIG9yIGVzY2FwaW5nIHN5bnRheCBpcyBzdXBwb3J0ZWQgd2l0aGluIGA8Y29tbWl0LWlzaD5gLgorCitIZXJlIGA8Y29tbWl0LWlzaD5gIGlzIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCisqIFRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGJyYW5jaCBhbHJlYWR5IGluIGZhc3QtaW1wb3J0J3MgaW50ZXJuYWwgYnJhbmNoCisgIHRhYmxlLiAgSWYgZmFzdC1pbXBvcnQgZG9lc24ndCBrbm93IHRoZSBuYW1lLCBpdCdzIHRyZWF0ZWQgYXMgYSBTSEEtMQorICBleHByZXNzaW9uLgorCisqIEEgbWFyayByZWZlcmVuY2UsIGA6PGlkbnVtPmAsIHdoZXJlIGA8aWRudW0+YCBpcyB0aGUgbWFyayBudW1iZXIuCisrCitUaGUgcmVhc29uIGZhc3QtaW1wb3J0IHVzZXMgYDpgIHRvIGRlbm90ZSBhIG1hcmsgcmVmZXJlbmNlIGlzIHRoaXMgY2hhcmFjdGVyCitpcyBub3QgbGVnYWwgaW4gYSBHaXQgYnJhbmNoIG5hbWUuICBUaGUgbGVhZGluZyBgOmAgbWFrZXMgaXQgZWFzeQordG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgbWFyayA0MiAoYDo0MmApIGFuZCB0aGUgYnJhbmNoIDQyIChgNDJgCitvciBgcmVmcy9oZWFkcy80MmApLCBvciBhbiBhYmJyZXZpYXRlZCBTSEEtMSB3aGljaCBoYXBwZW5lZCB0bworY29uc2lzdCBvbmx5IG9mIGJhc2UtMTAgZGlnaXRzLgorKworTWFya3MgbXVzdCBiZSBkZWNsYXJlZCAodmlhIGBtYXJrYCkgYmVmb3JlIHRoZXkgY2FuIGJlIHVzZWQuCisKKyogQSBjb21wbGV0ZSA0MCBieXRlIG9yIGFiYnJldmlhdGVkIGNvbW1pdCBTSEEtMSBpbiBoZXguCisKKyogQW55IHZhbGlkIEdpdCBTSEEtMSBleHByZXNzaW9uIHRoYXQgcmVzb2x2ZXMgdG8gYSBjb21taXQuICBTZWUKKyAgYGBTUEVDSUZZSU5HIFJFVklTSU9OUycnIGluIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddIGZvciBkZXRhaWxzLgorCisqIFRoZSBzcGVjaWFsIG51bGwgU0hBLTEgKDQwIHplcm9zKSBzcGVjaWZpZXMgdGhhdCB0aGUgYnJhbmNoIGlzIHRvIGJlCisgIHJlbW92ZWQuCisKK1RoZSBzcGVjaWFsIGNhc2Ugb2YgcmVzdGFydGluZyBhbiBpbmNyZW1lbnRhbCBpbXBvcnQgZnJvbSB0aGUKK2N1cnJlbnQgYnJhbmNoIHZhbHVlIHNob3VsZCBiZSB3cml0dGVuIGFzOgorLS0tLQorCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorLS0tLQorVGhlIGBeMGAgc3VmZml4IGlzIG5lY2Vzc2FyeSBhcyBmYXN0LWltcG9ydCBkb2VzIG5vdCBwZXJtaXQgYSBicmFuY2ggdG8KK3N0YXJ0IGZyb20gaXRzZWxmLCBhbmQgdGhlIGJyYW5jaCBpcyBjcmVhdGVkIGluIG1lbW9yeSBiZWZvcmUgdGhlCitgZnJvbWAgY29tbWFuZCBpcyBldmVuIHJlYWQgZnJvbSB0aGUgaW5wdXQuICBBZGRpbmcgYF4wYCB3aWxsIGZvcmNlCitmYXN0LWltcG9ydCB0byByZXNvbHZlIHRoZSBjb21taXQgdGhyb3VnaCBHaXQncyByZXZpc2lvbiBwYXJzaW5nIGxpYnJhcnksCityYXRoZXIgdGhhbiBpdHMgaW50ZXJuYWwgYnJhbmNoIHRhYmxlLCB0aGVyZWJ5IGxvYWRpbmcgaW4gdGhlCitleGlzdGluZyB2YWx1ZSBvZiB0aGUgYnJhbmNoLgorCitgbWVyZ2VgCiteXl5eXl5eCitJbmNsdWRlcyBvbmUgYWRkaXRpb25hbCBhbmNlc3RvciBjb21taXQuICBUaGUgYWRkaXRpb25hbCBhbmNlc3RyeQorbGluayBkb2VzIG5vdCBjaGFuZ2UgdGhlIHdheSB0aGUgdHJlZSBzdGF0ZSBpcyBidWlsdCBhdCB0aGlzIGNvbW1pdC4KK0lmIHRoZSBgZnJvbWAgY29tbWFuZCBpcworb21pdHRlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhlIGZpcnN0IGBtZXJnZWAgY29tbWl0IHdpbGwgYmUKK3RoZSBmaXJzdCBhbmNlc3RvciBvZiB0aGUgY3VycmVudCBjb21taXQsIGFuZCB0aGUgYnJhbmNoIHdpbGwgc3RhcnQKK291dCB3aXRoIG5vIGZpbGVzLiAgQW4gdW5saW1pdGVkIG51bWJlciBvZiBgbWVyZ2VgIGNvbW1hbmRzIHBlcgorY29tbWl0IGFyZSBwZXJtaXR0ZWQgYnkgZmFzdC1pbXBvcnQsIHRoZXJlYnkgZXN0YWJsaXNoaW5nIGFuIG4td2F5IG1lcmdlLgorCitIZXJlIGA8Y29tbWl0LWlzaD5gIGlzIGFueSBvZiB0aGUgY29tbWl0IHNwZWNpZmljYXRpb24gZXhwcmVzc2lvbnMKK2Fsc28gYWNjZXB0ZWQgYnkgYGZyb21gIChzZWUgYWJvdmUpLgorCitgZmlsZW1vZGlmeWAKK15eXl5eXl5eXl5eXgorSW5jbHVkZWQgaW4gYSBgY29tbWl0YCBjb21tYW5kIHRvIGFkZCBhIG5ldyBmaWxlIG9yIGNoYW5nZSB0aGUKK2NvbnRlbnQgb2YgYW4gZXhpc3RpbmcgZmlsZS4gIFRoaXMgY29tbWFuZCBoYXMgdHdvIGRpZmZlcmVudCBtZWFucworb2Ygc3BlY2lmeWluZyB0aGUgY29udGVudCBvZiB0aGUgZmlsZS4KKworRXh0ZXJuYWwgZGF0YSBmb3JtYXQ6OgorCVRoZSBkYXRhIGNvbnRlbnQgZm9yIHRoZSBmaWxlIHdhcyBhbHJlYWR5IHN1cHBsaWVkIGJ5IGEgcHJpb3IKKwlgYmxvYmAgY29tbWFuZC4gIFRoZSBmcm9udGVuZCBqdXN0IG5lZWRzIHRvIGNvbm5lY3QgaXQuCisrCisuLi4uCisJJ00nIFNQIDxtb2RlPiBTUCA8ZGF0YXJlZj4gU1AgPHBhdGg+IExGCisuLi4uCisrCitIZXJlIHVzdWFsbHkgYDxkYXRhcmVmPmAgbXVzdCBiZSBlaXRoZXIgYSBtYXJrIHJlZmVyZW5jZSAoYDo8aWRudW0+YCkKK3NldCBieSBhIHByaW9yIGBibG9iYCBjb21tYW5kLCBvciBhIGZ1bGwgNDAtYnl0ZSBTSEEtMSBvZiBhbgorZXhpc3RpbmcgR2l0IGJsb2Igb2JqZWN0LiAgSWYgYDxtb2RlPmAgaXMgYDA0MDAwMGBgIHRoZW4KK2A8ZGF0YXJlZj5gIG11c3QgYmUgdGhlIGZ1bGwgNDAtYnl0ZSBTSEEtMSBvZiBhbiBleGlzdGluZworR2l0IHRyZWUgb2JqZWN0IG9yIGEgbWFyayByZWZlcmVuY2Ugc2V0IHdpdGggYC0taW1wb3J0LW1hcmtzYC4KKworSW5saW5lIGRhdGEgZm9ybWF0OjoKKwlUaGUgZGF0YSBjb250ZW50IGZvciB0aGUgZmlsZSBoYXMgbm90IGJlZW4gc3VwcGxpZWQgeWV0LgorCVRoZSBmcm9udGVuZCB3YW50cyB0byBzdXBwbHkgaXQgYXMgcGFydCBvZiB0aGlzIG1vZGlmeQorCWNvbW1hbmQuCisrCisuLi4uCisJJ00nIFNQIDxtb2RlPiBTUCAnaW5saW5lJyBTUCA8cGF0aD4gTEYKKwlkYXRhCisuLi4uCisrCitTZWUgYmVsb3cgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIGBkYXRhYCBjb21tYW5kLgorCitJbiBib3RoIGZvcm1hdHMgYDxtb2RlPmAgaXMgdGhlIHR5cGUgb2YgZmlsZSBlbnRyeSwgc3BlY2lmaWVkCitpbiBvY3RhbC4gIEdpdCBvbmx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgbW9kZXM6CisKKyogYDEwMDY0NGAgb3IgYDY0NGA6IEEgbm9ybWFsIChub3QtZXhlY3V0YWJsZSkgZmlsZS4gIFRoZSBtYWpvcml0eQorICBvZiBmaWxlcyBpbiBtb3N0IHByb2plY3RzIHVzZSB0aGlzIG1vZGUuICBJZiBpbiBkb3VidCwgdGhpcyBpcworICB3aGF0IHlvdSB3YW50LgorKiBgMTAwNzU1YCBvciBgNzU1YDogQSBub3JtYWwsIGJ1dCBleGVjdXRhYmxlLCBmaWxlLgorKiBgMTIwMDAwYDogQSBzeW1saW5rLCB0aGUgY29udGVudCBvZiB0aGUgZmlsZSB3aWxsIGJlIHRoZSBsaW5rIHRhcmdldC4KKyogYDE2MDAwMGA6IEEgZ2l0bGluaywgU0hBLTEgb2YgdGhlIG9iamVjdCByZWZlcnMgdG8gYSBjb21taXQgaW4KKyAgYW5vdGhlciByZXBvc2l0b3J5LiBHaXQgbGlua3MgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIGJ5IFNIQSBvciB0aHJvdWdoCisgIGEgY29tbWl0IG1hcmsuIFRoZXkgYXJlIHVzZWQgdG8gaW1wbGVtZW50IHN1Ym1vZHVsZXMuCisqIGAwNDAwMDBgOiBBIHN1YmRpcmVjdG9yeS4gIFN1YmRpcmVjdG9yaWVzIGNhbiBvbmx5IGJlIHNwZWNpZmllZCBieQorICBTSEEgb3IgdGhyb3VnaCBhIHRyZWUgbWFyayBzZXQgd2l0aCBgLS1pbXBvcnQtbWFya3NgLgorCitJbiBib3RoIGZvcm1hdHMgYDxwYXRoPmAgaXMgdGhlIGNvbXBsZXRlIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgYWRkZWQKKyhpZiBub3QgYWxyZWFkeSBleGlzdGluZykgb3IgbW9kaWZpZWQgKGlmIGFscmVhZHkgZXhpc3RpbmcpLgorCitBIGA8cGF0aD5gIHN0cmluZyBtdXN0IHVzZSBVTklYLXN0eWxlIGRpcmVjdG9yeSBzZXBhcmF0b3JzIChmb3J3YXJkCitzbGFzaCBgL2ApLCBtYXkgY29udGFpbiBhbnkgYnl0ZSBvdGhlciB0aGFuIGBMRmAsIGFuZCBtdXN0IG5vdAorc3RhcnQgd2l0aCBkb3VibGUgcXVvdGUgKGAiYCkuCisKK0EgcGF0aCBjYW4gdXNlIEMtc3R5bGUgc3RyaW5nIHF1b3Rpbmc7IHRoaXMgaXMgYWNjZXB0ZWQgaW4gYWxsIGNhc2VzCithbmQgbWFuZGF0b3J5IGlmIHRoZSBmaWxlbmFtZSBzdGFydHMgd2l0aCBkb3VibGUgcXVvdGUgb3IgY29udGFpbnMKK2BMRmAuIEluIEMtc3R5bGUgcXVvdGluZywgdGhlIGNvbXBsZXRlIG5hbWUgc2hvdWxkIGJlIHN1cnJvdW5kZWQgd2l0aAorZG91YmxlIHF1b3RlcywgYW5kIGFueSBgTEZgLCBiYWNrc2xhc2gsIG9yIGRvdWJsZSBxdW90ZSBjaGFyYWN0ZXJzCittdXN0IGJlIGVzY2FwZWQgYnkgcHJlY2VkaW5nIHRoZW0gd2l0aCBhIGJhY2tzbGFzaCAoZS5nLiwKK2AicGF0aC93aXRoXG4sIFxcIGFuZCBcIiBpbiBpdCJgKS4KKworVGhlIHZhbHVlIG9mIGA8cGF0aD5gIG11c3QgYmUgaW4gY2Fub25pY2FsIGZvcm0uIFRoYXQgaXMgaXQgbXVzdCBub3Q6CisKKyogY29udGFpbiBhbiBlbXB0eSBkaXJlY3RvcnkgY29tcG9uZW50IChlLmcuIGBmb28vL2JhcmAgaXMgaW52YWxpZCksCisqIGVuZCB3aXRoIGEgZGlyZWN0b3J5IHNlcGFyYXRvciAoZS5nLiBgZm9vL2AgaXMgaW52YWxpZCksCisqIHN0YXJ0IHdpdGggYSBkaXJlY3Rvcnkgc2VwYXJhdG9yIChlLmcuIGAvZm9vYCBpcyBpbnZhbGlkKSwKKyogY29udGFpbiB0aGUgc3BlY2lhbCBjb21wb25lbnQgYC5gIG9yIGAuLmAgKGUuZy4gYGZvby8uL2JhcmAgYW5kCisgIGBmb28vLi4vYmFyYCBhcmUgaW52YWxpZCkuCisKK1RoZSByb290IG9mIHRoZSB0cmVlIGNhbiBiZSByZXByZXNlbnRlZCBieSBhbiBlbXB0eSBzdHJpbmcgYXMgYDxwYXRoPmAuCisKK0l0IGlzIHJlY29tbWVuZGVkIHRoYXQgYDxwYXRoPmAgYWx3YXlzIGJlIGVuY29kZWQgdXNpbmcgVVRGLTguCisKK2BmaWxlZGVsZXRlYAorXl5eXl5eXl5eXl5eCitJbmNsdWRlZCBpbiBhIGBjb21taXRgIGNvbW1hbmQgdG8gcmVtb3ZlIGEgZmlsZSBvciByZWN1cnNpdmVseQorZGVsZXRlIGFuIGVudGlyZSBkaXJlY3RvcnkgZnJvbSB0aGUgYnJhbmNoLiAgSWYgdGhlIGZpbGUgb3IgZGlyZWN0b3J5CityZW1vdmFsIG1ha2VzIGl0cyBwYXJlbnQgZGlyZWN0b3J5IGVtcHR5LCB0aGUgcGFyZW50IGRpcmVjdG9yeSB3aWxsCitiZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgdG9vLiAgVGhpcyBjYXNjYWRlcyB1cCB0aGUgdHJlZSB1bnRpbCB0aGUKK2ZpcnN0IG5vbi1lbXB0eSBkaXJlY3Rvcnkgb3IgdGhlIHJvb3QgaXMgcmVhY2hlZC4KKworLi4uLgorCSdEJyBTUCA8cGF0aD4gTEYKKy4uLi4KKworaGVyZSBgPHBhdGg+YCBpcyB0aGUgY29tcGxldGUgcGF0aCBvZiB0aGUgZmlsZSBvciBzdWJkaXJlY3RvcnkgdG8KK2JlIHJlbW92ZWQgZnJvbSB0aGUgYnJhbmNoLgorU2VlIGBmaWxlbW9kaWZ5YCBhYm92ZSBmb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBgPHBhdGg+YC4KKworYGZpbGVjb3B5YAorXl5eXl5eXl5eXgorUmVjdXJzaXZlbHkgY29waWVzIGFuIGV4aXN0aW5nIGZpbGUgb3Igc3ViZGlyZWN0b3J5IHRvIGEgZGlmZmVyZW50Citsb2NhdGlvbiB3aXRoaW4gdGhlIGJyYW5jaC4gIFRoZSBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeSBtdXN0CitleGlzdC4gIElmIHRoZSBkZXN0aW5hdGlvbiBleGlzdHMgaXQgd2lsbCBiZSBjb21wbGV0ZWx5IHJlcGxhY2VkCitieSB0aGUgY29udGVudCBjb3BpZWQgZnJvbSB0aGUgc291cmNlLgorCisuLi4uCisJJ0MnIFNQIDxwYXRoPiBTUCA8cGF0aD4gTEYKKy4uLi4KKworaGVyZSB0aGUgZmlyc3QgYDxwYXRoPmAgaXMgdGhlIHNvdXJjZSBsb2NhdGlvbiBhbmQgdGhlIHNlY29uZAorYDxwYXRoPmAgaXMgdGhlIGRlc3RpbmF0aW9uLiAgU2VlIGBmaWxlbW9kaWZ5YCBhYm92ZSBmb3IgYSBkZXRhaWxlZAorZGVzY3JpcHRpb24gb2Ygd2hhdCBgPHBhdGg+YCBtYXkgbG9vayBsaWtlLiAgVG8gdXNlIGEgc291cmNlIHBhdGgKK3RoYXQgY29udGFpbnMgU1AgdGhlIHBhdGggbXVzdCBiZSBxdW90ZWQuCisKK0EgYGZpbGVjb3B5YCBjb21tYW5kIHRha2VzIGVmZmVjdCBpbW1lZGlhdGVseS4gIE9uY2UgdGhlIHNvdXJjZQorbG9jYXRpb24gaGFzIGJlZW4gY29waWVkIHRvIHRoZSBkZXN0aW5hdGlvbiBhbnkgZnV0dXJlIGNvbW1hbmRzCithcHBsaWVkIHRvIHRoZSBzb3VyY2UgbG9jYXRpb24gd2lsbCBub3QgaW1wYWN0IHRoZSBkZXN0aW5hdGlvbiBvZgordGhlIGNvcHkuCisKK2BmaWxlcmVuYW1lYAorXl5eXl5eXl5eXl5eCitSZW5hbWVzIGFuIGV4aXN0aW5nIGZpbGUgb3Igc3ViZGlyZWN0b3J5IHRvIGEgZGlmZmVyZW50IGxvY2F0aW9uCit3aXRoaW4gdGhlIGJyYW5jaC4gIFRoZSBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeSBtdXN0IGV4aXN0LiBJZgordGhlIGRlc3RpbmF0aW9uIGV4aXN0cyBpdCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBzb3VyY2UgZGlyZWN0b3J5LgorCisuLi4uCisJJ1InIFNQIDxwYXRoPiBTUCA8cGF0aD4gTEYKKy4uLi4KKworaGVyZSB0aGUgZmlyc3QgYDxwYXRoPmAgaXMgdGhlIHNvdXJjZSBsb2NhdGlvbiBhbmQgdGhlIHNlY29uZAorYDxwYXRoPmAgaXMgdGhlIGRlc3RpbmF0aW9uLiAgU2VlIGBmaWxlbW9kaWZ5YCBhYm92ZSBmb3IgYSBkZXRhaWxlZAorZGVzY3JpcHRpb24gb2Ygd2hhdCBgPHBhdGg+YCBtYXkgbG9vayBsaWtlLiAgVG8gdXNlIGEgc291cmNlIHBhdGgKK3RoYXQgY29udGFpbnMgU1AgdGhlIHBhdGggbXVzdCBiZSBxdW90ZWQuCisKK0EgYGZpbGVyZW5hbWVgIGNvbW1hbmQgdGFrZXMgZWZmZWN0IGltbWVkaWF0ZWx5LiAgT25jZSB0aGUgc291cmNlCitsb2NhdGlvbiBoYXMgYmVlbiByZW5hbWVkIHRvIHRoZSBkZXN0aW5hdGlvbiBhbnkgZnV0dXJlIGNvbW1hbmRzCithcHBsaWVkIHRvIHRoZSBzb3VyY2UgbG9jYXRpb24gd2lsbCBjcmVhdGUgbmV3IGZpbGVzIHRoZXJlIGFuZCBub3QKK2ltcGFjdCB0aGUgZGVzdGluYXRpb24gb2YgdGhlIHJlbmFtZS4KKworTm90ZSB0aGF0IGEgYGZpbGVyZW5hbWVgIGlzIHRoZSBzYW1lIGFzIGEgYGZpbGVjb3B5YCBmb2xsb3dlZCBieSBhCitgZmlsZWRlbGV0ZWAgb2YgdGhlIHNvdXJjZSBsb2NhdGlvbi4gIFRoZXJlIGlzIGEgc2xpZ2h0IHBlcmZvcm1hbmNlCithZHZhbnRhZ2UgdG8gdXNpbmcgYGZpbGVyZW5hbWVgLCBidXQgdGhlIGFkdmFudGFnZSBpcyBzbyBzbWFsbAordGhhdCBpdCBpcyBuZXZlciB3b3J0aCB0cnlpbmcgdG8gY29udmVydCBhIGRlbGV0ZS9hZGQgcGFpciBpbgorc291cmNlIG1hdGVyaWFsIGludG8gYSByZW5hbWUgZm9yIGZhc3QtaW1wb3J0LiAgVGhpcyBgZmlsZXJlbmFtZWAKK2NvbW1hbmQgaXMgcHJvdmlkZWQganVzdCB0byBzaW1wbGlmeSBmcm9udGVuZHMgdGhhdCBhbHJlYWR5IGhhdmUKK3JlbmFtZSBpbmZvcm1hdGlvbiBhbmQgZG9uJ3Qgd2FudCBib3RoZXIgd2l0aCBkZWNvbXBvc2luZyBpdCBpbnRvIGEKK2BmaWxlY29weWAgZm9sbG93ZWQgYnkgYSBgZmlsZWRlbGV0ZWAuCisKK2BmaWxlZGVsZXRlYWxsYAorXl5eXl5eXl5eXl5eXl5eCitJbmNsdWRlZCBpbiBhIGBjb21taXRgIGNvbW1hbmQgdG8gcmVtb3ZlIGFsbCBmaWxlcyAoYW5kIGFsc28gYWxsCitkaXJlY3RvcmllcykgZnJvbSB0aGUgYnJhbmNoLiAgVGhpcyBjb21tYW5kIHJlc2V0cyB0aGUgaW50ZXJuYWwKK2JyYW5jaCBzdHJ1Y3R1cmUgdG8gaGF2ZSBubyBmaWxlcyBpbiBpdCwgYWxsb3dpbmcgdGhlIGZyb250ZW5kCit0byBzdWJzZXF1ZW50bHkgYWRkIGFsbCBpbnRlcmVzdGluZyBmaWxlcyBmcm9tIHNjcmF0Y2guCisKKy4uLi4KKwknZGVsZXRlYWxsJyBMRgorLi4uLgorCitUaGlzIGNvbW1hbmQgaXMgZXh0cmVtZWx5IHVzZWZ1bCBpZiB0aGUgZnJvbnRlbmQgZG9lcyBub3Qga25vdworKG9yIGRvZXMgbm90IGNhcmUgdG8ga25vdykgd2hhdCBmaWxlcyBhcmUgY3VycmVudGx5IG9uIHRoZSBicmFuY2gsCithbmQgdGhlcmVmb3JlIGNhbm5vdCBnZW5lcmF0ZSB0aGUgcHJvcGVyIGBmaWxlZGVsZXRlYCBjb21tYW5kcyB0bwordXBkYXRlIHRoZSBjb250ZW50LgorCitJc3N1aW5nIGEgYGZpbGVkZWxldGVhbGxgIGZvbGxvd2VkIGJ5IHRoZSBuZWVkZWQgYGZpbGVtb2RpZnlgCitjb21tYW5kcyB0byBzZXQgdGhlIGNvcnJlY3QgY29udGVudCB3aWxsIHByb2R1Y2UgdGhlIHNhbWUgcmVzdWx0cworYXMgc2VuZGluZyBvbmx5IHRoZSBuZWVkZWQgYGZpbGVtb2RpZnlgIGFuZCBgZmlsZWRlbGV0ZWAgY29tbWFuZHMuCitUaGUgYGZpbGVkZWxldGVhbGxgIGFwcHJvYWNoIG1heSBob3dldmVyIHJlcXVpcmUgZmFzdC1pbXBvcnQgdG8gdXNlIHNsaWdodGx5Cittb3JlIG1lbW9yeSBwZXIgYWN0aXZlIGJyYW5jaCAobGVzcyB0aGFuIDEgTWlCIGZvciBldmVuIG1vc3QgbGFyZ2UKK3Byb2plY3RzKTsgc28gZnJvbnRlbmRzIHRoYXQgY2FuIGVhc2lseSBvYnRhaW4gb25seSB0aGUgYWZmZWN0ZWQKK3BhdGhzIGZvciBhIGNvbW1pdCBhcmUgZW5jb3VyYWdlZCB0byBkbyBzby4KKworYG5vdGVtb2RpZnlgCiteXl5eXl5eXl5eXl4KK0luY2x1ZGVkIGluIGEgYGNvbW1pdGAgYDxub3Rlc19yZWY+YCBjb21tYW5kIHRvIGFkZCBhIG5ldyBub3RlCithbm5vdGF0aW5nIGEgYDxjb21taXQtaXNoPmAgb3IgY2hhbmdlIHRoaXMgYW5ub3RhdGlvbiBjb250ZW50cy4KK0ludGVybmFsbHkgaXQgaXMgc2ltaWxhciB0byBmaWxlbW9kaWZ5IDEwMDY0NCBvbiBgPGNvbW1pdC1pc2g+YAorcGF0aCAobWF5YmUgc3BsaXQgaW50byBzdWJkaXJlY3RvcmllcykuIEl0J3Mgbm90IGFkdmlzZWQgdG8KK3VzZSBhbnkgb3RoZXIgY29tbWFuZHMgdG8gd3JpdGUgdG8gdGhlIGA8bm90ZXNfcmVmPmAgdHJlZSBleGNlcHQKK2BmaWxlZGVsZXRlYWxsYCB0byBkZWxldGUgYWxsIGV4aXN0aW5nIG5vdGVzIGluIHRoaXMgdHJlZS4KK1RoaXMgY29tbWFuZCBoYXMgdHdvIGRpZmZlcmVudCBtZWFucyBvZiBzcGVjaWZ5aW5nIHRoZSBjb250ZW50CitvZiB0aGUgbm90ZS4KKworRXh0ZXJuYWwgZGF0YSBmb3JtYXQ6OgorCVRoZSBkYXRhIGNvbnRlbnQgZm9yIHRoZSBub3RlIHdhcyBhbHJlYWR5IHN1cHBsaWVkIGJ5IGEgcHJpb3IKKwlgYmxvYmAgY29tbWFuZC4gIFRoZSBmcm9udGVuZCBqdXN0IG5lZWRzIHRvIGNvbm5lY3QgaXQgdG8gdGhlCisJY29tbWl0IHRoYXQgaXMgdG8gYmUgYW5ub3RhdGVkLgorKworLi4uLgorCSdOJyBTUCA8ZGF0YXJlZj4gU1AgPGNvbW1pdC1pc2g+IExGCisuLi4uCisrCitIZXJlIGA8ZGF0YXJlZj5gIGNhbiBiZSBlaXRoZXIgYSBtYXJrIHJlZmVyZW5jZSAoYDo8aWRudW0+YCkKK3NldCBieSBhIHByaW9yIGBibG9iYCBjb21tYW5kLCBvciBhIGZ1bGwgNDAtYnl0ZSBTSEEtMSBvZiBhbgorZXhpc3RpbmcgR2l0IGJsb2Igb2JqZWN0LgorCitJbmxpbmUgZGF0YSBmb3JtYXQ6OgorCVRoZSBkYXRhIGNvbnRlbnQgZm9yIHRoZSBub3RlIGhhcyBub3QgYmVlbiBzdXBwbGllZCB5ZXQuCisJVGhlIGZyb250ZW5kIHdhbnRzIHRvIHN1cHBseSBpdCBhcyBwYXJ0IG9mIHRoaXMgbW9kaWZ5CisJY29tbWFuZC4KKysKKy4uLi4KKwknTicgU1AgJ2lubGluZScgU1AgPGNvbW1pdC1pc2g+IExGCisJZGF0YQorLi4uLgorKworU2VlIGJlbG93IGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBgZGF0YWAgY29tbWFuZC4KKworSW4gYm90aCBmb3JtYXRzIGA8Y29tbWl0LWlzaD5gIGlzIGFueSBvZiB0aGUgY29tbWl0IHNwZWNpZmljYXRpb24KK2V4cHJlc3Npb25zIGFsc28gYWNjZXB0ZWQgYnkgYGZyb21gIChzZWUgYWJvdmUpLgorCitgbWFya2AKK35+fn5+fgorQXJyYW5nZXMgZm9yIGZhc3QtaW1wb3J0IHRvIHNhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgb2JqZWN0LCBhbGxvd2luZwordGhlIGZyb250ZW5kIHRvIHJlY2FsbCB0aGlzIG9iamVjdCBhdCBhIGZ1dHVyZSBwb2ludCBpbiB0aW1lLCB3aXRob3V0Citrbm93aW5nIGl0cyBTSEEtMS4gIEhlcmUgdGhlIGN1cnJlbnQgb2JqZWN0IGlzIHRoZSBvYmplY3QgY3JlYXRpb24KK2NvbW1hbmQgdGhlIGBtYXJrYCBjb21tYW5kIGFwcGVhcnMgd2l0aGluLiAgVGhpcyBjYW4gYmUgYGNvbW1pdGAsCitgdGFnYCwgYW5kIGBibG9iYCwgYnV0IGBjb21taXRgIGlzIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS4KKworLi4uLgorCSdtYXJrJyBTUCAnOicgPGlkbnVtPiBMRgorLi4uLgorCit3aGVyZSBgPGlkbnVtPmAgaXMgdGhlIG51bWJlciBhc3NpZ25lZCBieSB0aGUgZnJvbnRlbmQgdG8gdGhpcyBtYXJrLgorVGhlIHZhbHVlIG9mIGA8aWRudW0+YCBpcyBleHByZXNzZWQgYXMgYW4gQVNDSUkgZGVjaW1hbCBpbnRlZ2VyLgorVGhlIHZhbHVlIDAgaXMgcmVzZXJ2ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIGFzCithIG1hcmsuICBPbmx5IHZhbHVlcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMSBtYXkgYmUgdXNlZCBhcyBtYXJrcy4KKworTmV3IG1hcmtzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuICBFeGlzdGluZyBtYXJrcyBjYW4gYmUgbW92ZWQKK3RvIGFub3RoZXIgb2JqZWN0IHNpbXBseSBieSByZXVzaW5nIHRoZSBzYW1lIGA8aWRudW0+YCBpbiBhbm90aGVyCitgbWFya2AgY29tbWFuZC4KKworYHRhZ2AKK35+fn5+CitDcmVhdGVzIGFuIGFubm90YXRlZCB0YWcgcmVmZXJyaW5nIHRvIGEgc3BlY2lmaWMgY29tbWl0LiAgVG8gY3JlYXRlCitsaWdodHdlaWdodCAobm9uLWFubm90YXRlZCkgdGFncyBzZWUgdGhlIGByZXNldGAgY29tbWFuZCBiZWxvdy4KKworLi4uLgorCSd0YWcnIFNQIDxuYW1lPiBMRgorCSdmcm9tJyBTUCA8Y29tbWl0LWlzaD4gTEYKKwkndGFnZ2VyJyAoU1AgPG5hbWU+KT8gU1AgTFQgPGVtYWlsPiBHVCBTUCA8d2hlbj4gTEYKKwlkYXRhCisuLi4uCisKK3doZXJlIGA8bmFtZT5gIGlzIHRoZSBuYW1lIG9mIHRoZSB0YWcgdG8gY3JlYXRlLgorCitUYWcgbmFtZXMgYXJlIGF1dG9tYXRpY2FsbHkgcHJlZml4ZWQgd2l0aCBgcmVmcy90YWdzL2Agd2hlbiBzdG9yZWQKK2luIEdpdCwgc28gaW1wb3J0aW5nIHRoZSBDVlMgYnJhbmNoIHN5bWJvbCBgUkVMRU5HLTFfMC1GSU5BTGAgd291bGQKK3VzZSBqdXN0IGBSRUxFTkctMV8wLUZJTkFMYCBmb3IgYDxuYW1lPmAsIGFuZCBmYXN0LWltcG9ydCB3aWxsIHdyaXRlIHRoZQorY29ycmVzcG9uZGluZyByZWYgYXMgYHJlZnMvdGFncy9SRUxFTkctMV8wLUZJTkFMYC4KKworVGhlIHZhbHVlIG9mIGA8bmFtZT5gIG11c3QgYmUgYSB2YWxpZCByZWZuYW1lIGluIEdpdCBhbmQgdGhlcmVmb3JlCittYXkgY29udGFpbiBmb3J3YXJkIHNsYXNoZXMuICBBcyBgTEZgIGlzIG5vdCB2YWxpZCBpbiBhIEdpdCByZWZuYW1lLAorbm8gcXVvdGluZyBvciBlc2NhcGluZyBzeW50YXggaXMgc3VwcG9ydGVkIGhlcmUuCisKK1RoZSBgZnJvbWAgY29tbWFuZCBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgYGNvbW1pdGAgY29tbWFuZDsgc2VlCithYm92ZSBmb3IgZGV0YWlscy4KKworVGhlIGB0YWdnZXJgIGNvbW1hbmQgdXNlcyB0aGUgc2FtZSBmb3JtYXQgYXMgYGNvbW1pdHRlcmAgd2l0aGluCitgY29tbWl0YDsgYWdhaW4gc2VlIGFib3ZlIGZvciBkZXRhaWxzLgorCitUaGUgYGRhdGFgIGNvbW1hbmQgZm9sbG93aW5nIGB0YWdnZXJgIG11c3Qgc3VwcGx5IHRoZSBhbm5vdGF0ZWQgdGFnCittZXNzYWdlIChzZWUgYmVsb3cgZm9yIGBkYXRhYCBjb21tYW5kIHN5bnRheCkuICBUbyBpbXBvcnQgYW4gZW1wdHkKK3RhZyBtZXNzYWdlIHVzZSBhIDAgbGVuZ3RoIGRhdGEuICBUYWcgbWVzc2FnZXMgYXJlIGZyZWUtZm9ybSBhbmQgYXJlCitub3QgaW50ZXJwcmV0ZWQgYnkgR2l0LiAgQ3VycmVudGx5IHRoZXkgbXVzdCBiZSBlbmNvZGVkIGluIFVURi04LAorYXMgZmFzdC1pbXBvcnQgZG9lcyBub3QgcGVybWl0IG90aGVyIGVuY29kaW5ncyB0byBiZSBzcGVjaWZpZWQuCisKK1NpZ25pbmcgYW5ub3RhdGVkIHRhZ3MgZHVyaW5nIGltcG9ydCBmcm9tIHdpdGhpbiBmYXN0LWltcG9ydCBpcyBub3QKK3N1cHBvcnRlZC4gIFRyeWluZyB0byBpbmNsdWRlIHlvdXIgb3duIFBHUC9HUEcgc2lnbmF0dXJlIGlzIG5vdAorcmVjb21tZW5kZWQsIGFzIHRoZSBmcm9udGVuZCBkb2VzIG5vdCAoZWFzaWx5KSBoYXZlIGFjY2VzcyB0byB0aGUKK2NvbXBsZXRlIHNldCBvZiBieXRlcyB3aGljaCBub3JtYWxseSBnb2VzIGludG8gc3VjaCBhIHNpZ25hdHVyZS4KK0lmIHNpZ25pbmcgaXMgcmVxdWlyZWQsIGNyZWF0ZSBsaWdodHdlaWdodCB0YWdzIGZyb20gd2l0aGluIGZhc3QtaW1wb3J0IHdpdGgKK2ByZXNldGAsIHRoZW4gY3JlYXRlIHRoZSBhbm5vdGF0ZWQgdmVyc2lvbnMgb2YgdGhvc2UgdGFncyBvZmZsaW5lCit3aXRoIHRoZSBzdGFuZGFyZCAnZ2l0IHRhZycgcHJvY2Vzcy4KKworYHJlc2V0YAorfn5+fn5+fgorQ3JlYXRlcyAob3IgcmVjcmVhdGVzKSB0aGUgbmFtZWQgYnJhbmNoLCBvcHRpb25hbGx5IHN0YXJ0aW5nIGZyb20KK2Egc3BlY2lmaWMgcmV2aXNpb24uICBUaGUgcmVzZXQgY29tbWFuZCBhbGxvd3MgYSBmcm9udGVuZCB0byBpc3N1ZQorYSBuZXcgYGZyb21gIGNvbW1hbmQgZm9yIGFuIGV4aXN0aW5nIGJyYW5jaCwgb3IgdG8gY3JlYXRlIGEgbmV3CiticmFuY2ggZnJvbSBhbiBleGlzdGluZyBjb21taXQgd2l0aG91dCBjcmVhdGluZyBhIG5ldyBjb21taXQuCisKKy4uLi4KKwkncmVzZXQnIFNQIDxyZWY+IExGCisJKCdmcm9tJyBTUCA8Y29tbWl0LWlzaD4gTEYpPworCUxGPworLi4uLgorCitGb3IgYSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBgPHJlZj5gIGFuZCBgPGNvbW1pdC1pc2g+YCBzZWUgYWJvdmUKK3VuZGVyIGBjb21taXRgIGFuZCBgZnJvbWAuCisKK1RoZSBgTEZgIGFmdGVyIHRoZSBjb21tYW5kIGlzIG9wdGlvbmFsIChpdCB1c2VkIHRvIGJlIHJlcXVpcmVkKS4KKworVGhlIGByZXNldGAgY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSBsaWdodHdlaWdodAorKG5vbi1hbm5vdGF0ZWQpIHRhZ3MuICBGb3IgZXhhbXBsZToKKworPT09PQorCXJlc2V0IHJlZnMvdGFncy85MzgKKwlmcm9tIDo5MzgKKz09PT0KKword291bGQgY3JlYXRlIHRoZSBsaWdodHdlaWdodCB0YWcgYHJlZnMvdGFncy85MzhgIHJlZmVycmluZyB0bword2hhdGV2ZXIgY29tbWl0IG1hcmsgYDo5MzhgIHJlZmVyZW5jZXMuCisKK2BibG9iYAorfn5+fn5+CitSZXF1ZXN0cyB3cml0aW5nIG9uZSBmaWxlIHJldmlzaW9uIHRvIHRoZSBwYWNrZmlsZS4gIFRoZSByZXZpc2lvbgoraXMgbm90IGNvbm5lY3RlZCB0byBhbnkgY29tbWl0OyB0aGlzIGNvbm5lY3Rpb24gbXVzdCBiZSBmb3JtZWQgaW4KK2Egc3Vic2VxdWVudCBgY29tbWl0YCBjb21tYW5kIGJ5IHJlZmVyZW5jaW5nIHRoZSBibG9iIHRocm91Z2ggYW4KK2Fzc2lnbmVkIG1hcmsuCisKKy4uLi4KKwknYmxvYicgTEYKKwltYXJrPworCWRhdGEKKy4uLi4KKworVGhlIG1hcmsgY29tbWFuZCBpcyBvcHRpb25hbCBoZXJlIGFzIHNvbWUgZnJvbnRlbmRzIGhhdmUgY2hvc2VuCit0byBnZW5lcmF0ZSB0aGUgR2l0IFNIQS0xIGZvciB0aGUgYmxvYiBvbiB0aGVpciBvd24sIGFuZCBmZWVkIHRoYXQKK2RpcmVjdGx5IHRvIGBjb21taXRgLiAgVGhpcyBpcyB0eXBpY2FsbHkgbW9yZSB3b3JrIHRoYW4gaXQncyB3b3J0aAoraG93ZXZlciwgYXMgbWFya3MgYXJlIGluZXhwZW5zaXZlIHRvIHN0b3JlIGFuZCBlYXN5IHRvIHVzZS4KKworYGRhdGFgCit+fn5+fn4KK1N1cHBsaWVzIHJhdyBkYXRhIChmb3IgdXNlIGFzIGJsb2IvZmlsZSBjb250ZW50LCBjb21taXQgbWVzc2FnZXMsIG9yCithbm5vdGF0ZWQgdGFnIG1lc3NhZ2VzKSB0byBmYXN0LWltcG9ydC4gIERhdGEgY2FuIGJlIHN1cHBsaWVkIHVzaW5nIGFuIGV4YWN0CitieXRlIGNvdW50IG9yIGRlbGltaXRlZCB3aXRoIGEgdGVybWluYXRpbmcgbGluZS4gIFJlYWwgZnJvbnRlbmRzCitpbnRlbmRlZCBmb3IgcHJvZHVjdGlvbi1xdWFsaXR5IGNvbnZlcnNpb25zIHNob3VsZCBhbHdheXMgdXNlIHRoZQorZXhhY3QgYnl0ZSBjb3VudCBmb3JtYXQsIGFzIGl0IGlzIG1vcmUgcm9idXN0IGFuZCBwZXJmb3JtcyBiZXR0ZXIuCitUaGUgZGVsaW1pdGVkIGZvcm1hdCBpcyBpbnRlbmRlZCBwcmltYXJpbHkgZm9yIHRlc3RpbmcgZmFzdC1pbXBvcnQuCisKK0NvbW1lbnQgbGluZXMgYXBwZWFyaW5nIHdpdGhpbiB0aGUgYDxyYXc+YCBwYXJ0IG9mIGBkYXRhYCBjb21tYW5kcworYXJlIGFsd2F5cyB0YWtlbiB0byBiZSBwYXJ0IG9mIHRoZSBib2R5IG9mIHRoZSBkYXRhIGFuZCBhcmUgdGhlcmVmb3JlCituZXZlciBpZ25vcmVkIGJ5IGZhc3QtaW1wb3J0LiAgVGhpcyBtYWtlcyBpdCBzYWZlIHRvIGltcG9ydCBhbnkKK2ZpbGUvbWVzc2FnZSBjb250ZW50IHdob3NlIGxpbmVzIG1pZ2h0IHN0YXJ0IHdpdGggYCNgLgorCitFeGFjdCBieXRlIGNvdW50IGZvcm1hdDo6CisJVGhlIGZyb250ZW5kIG11c3Qgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEuCisrCisuLi4uCisJJ2RhdGEnIFNQIDxjb3VudD4gTEYKKwk8cmF3PiBMRj8KKy4uLi4KKysKK3doZXJlIGA8Y291bnQ+YCBpcyB0aGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIGFwcGVhcmluZyB3aXRoaW4KK2A8cmF3PmAuICBUaGUgdmFsdWUgb2YgYDxjb3VudD5gIGlzIGV4cHJlc3NlZCBhcyBhbiBBU0NJSSBkZWNpbWFsCitpbnRlZ2VyLiAgVGhlIGBMRmAgb24gZWl0aGVyIHNpZGUgb2YgYDxyYXc+YCBpcyBub3QKK2luY2x1ZGVkIGluIGA8Y291bnQ+YCBhbmQgd2lsbCBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIGltcG9ydGVkIGRhdGEuCisrCitUaGUgYExGYCBhZnRlciBgPHJhdz5gIGlzIG9wdGlvbmFsIChpdCB1c2VkIHRvIGJlIHJlcXVpcmVkKSBidXQKK3JlY29tbWVuZGVkLiAgQWx3YXlzIGluY2x1ZGluZyBpdCBtYWtlcyBkZWJ1Z2dpbmcgYSBmYXN0LWltcG9ydAorc3RyZWFtIGVhc2llciBhcyB0aGUgbmV4dCBjb21tYW5kIGFsd2F5cyBzdGFydHMgaW4gY29sdW1uIDAKK29mIHRoZSBuZXh0IGxpbmUsIGV2ZW4gaWYgYDxyYXc+YCBkaWQgbm90IGVuZCB3aXRoIGFuIGBMRmAuCisKK0RlbGltaXRlZCBmb3JtYXQ6OgorCUEgZGVsaW1pdGVyIHN0cmluZyBpcyB1c2VkIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgZGF0YS4KKwlmYXN0LWltcG9ydCB3aWxsIGNvbXB1dGUgdGhlIGxlbmd0aCBieSBzZWFyY2hpbmcgZm9yIHRoZSBkZWxpbWl0ZXIuCisJVGhpcyBmb3JtYXQgaXMgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgdGVzdGluZyBhbmQgaXMgbm90CisJcmVjb21tZW5kZWQgZm9yIHJlYWwgZGF0YS4KKysKKy4uLi4KKwknZGF0YScgU1AgJzw8JyA8ZGVsaW0+IExGCisJPHJhdz4gTEYKKwk8ZGVsaW0+IExGCisJTEY/CisuLi4uCisrCit3aGVyZSBgPGRlbGltPmAgaXMgdGhlIGNob3NlbiBkZWxpbWl0ZXIgc3RyaW5nLiAgVGhlIHN0cmluZyBgPGRlbGltPmAKK211c3Qgbm90IGFwcGVhciBvbiBhIGxpbmUgYnkgaXRzZWxmIHdpdGhpbiBgPHJhdz5gLCBhcyBvdGhlcndpc2UKK2Zhc3QtaW1wb3J0IHdpbGwgdGhpbmsgdGhlIGRhdGEgZW5kcyBlYXJsaWVyIHRoYW4gaXQgcmVhbGx5IGRvZXMuICBUaGUgYExGYAoraW1tZWRpYXRlbHkgdHJhaWxpbmcgYDxyYXc+YCBpcyBwYXJ0IG9mIGA8cmF3PmAuICBUaGlzIGlzIG9uZSBvZgordGhlIGxpbWl0YXRpb25zIG9mIHRoZSBkZWxpbWl0ZWQgZm9ybWF0LCBpdCBpcyBpbXBvc3NpYmxlIHRvIHN1cHBseQorYSBkYXRhIGNodW5rIHdoaWNoIGRvZXMgbm90IGhhdmUgYW4gTEYgYXMgaXRzIGxhc3QgYnl0ZS4KKysKK1RoZSBgTEZgIGFmdGVyIGA8ZGVsaW0+IExGYCBpcyBvcHRpb25hbCAoaXQgdXNlZCB0byBiZSByZXF1aXJlZCkuCisKK2BjaGVja3BvaW50YAorfn5+fn5+fn5+fn5+CitGb3JjZXMgZmFzdC1pbXBvcnQgdG8gY2xvc2UgdGhlIGN1cnJlbnQgcGFja2ZpbGUsIHN0YXJ0IGEgbmV3IG9uZSwgYW5kIHRvCitzYXZlIG91dCBhbGwgY3VycmVudCBicmFuY2ggcmVmcywgdGFncyBhbmQgbWFya3MuCisKKy4uLi4KKwknY2hlY2twb2ludCcgTEYKKwlMRj8KKy4uLi4KKworTm90ZSB0aGF0IGZhc3QtaW1wb3J0IGF1dG9tYXRpY2FsbHkgc3dpdGNoZXMgcGFja2ZpbGVzIHdoZW4gdGhlIGN1cnJlbnQKK3BhY2tmaWxlIHJlYWNoZXMgLS1tYXgtcGFjay1zaXplLCBvciA0IEdpQiwgd2hpY2hldmVyIGxpbWl0IGlzCitzbWFsbGVyLiAgRHVyaW5nIGFuIGF1dG9tYXRpYyBwYWNrZmlsZSBzd2l0Y2ggZmFzdC1pbXBvcnQgZG9lcyBub3QgdXBkYXRlCit0aGUgYnJhbmNoIHJlZnMsIHRhZ3Mgb3IgbWFya3MuCisKK0FzIGEgYGNoZWNrcG9pbnRgIGNhbiByZXF1aXJlIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIENQVSB0aW1lIGFuZAorZGlzayBJTyAodG8gY29tcHV0ZSB0aGUgb3ZlcmFsbCBwYWNrIFNIQS0xIGNoZWNrc3VtLCBnZW5lcmF0ZSB0aGUKK2NvcnJlc3BvbmRpbmcgaW5kZXggZmlsZSwgYW5kIHVwZGF0ZSB0aGUgcmVmcykgaXQgY2FuIGVhc2lseSB0YWtlCitzZXZlcmFsIG1pbnV0ZXMgZm9yIGEgc2luZ2xlIGBjaGVja3BvaW50YCBjb21tYW5kIHRvIGNvbXBsZXRlLgorCitGcm9udGVuZHMgbWF5IGNob29zZSB0byBpc3N1ZSBjaGVja3BvaW50cyBkdXJpbmcgZXh0cmVtZWx5IGxhcmdlCithbmQgbG9uZyBydW5uaW5nIGltcG9ydHMsIG9yIHdoZW4gdGhleSBuZWVkIHRvIGFsbG93IGFub3RoZXIgR2l0Citwcm9jZXNzIGFjY2VzcyB0byBhIGJyYW5jaC4gIEhvd2V2ZXIgZ2l2ZW4gdGhhdCBhIDMwIEdpQiBTdWJ2ZXJzaW9uCityZXBvc2l0b3J5IGNhbiBiZSBsb2FkZWQgaW50byBHaXQgdGhyb3VnaCBmYXN0LWltcG9ydCBpbiBhYm91dCAzIGhvdXJzLAorZXhwbGljaXQgY2hlY2twb2ludGluZyBtYXkgbm90IGJlIG5lY2Vzc2FyeS4KKworVGhlIGBMRmAgYWZ0ZXIgdGhlIGNvbW1hbmQgaXMgb3B0aW9uYWwgKGl0IHVzZWQgdG8gYmUgcmVxdWlyZWQpLgorCitgcHJvZ3Jlc3NgCit+fn5+fn5+fn5+CitDYXVzZXMgZmFzdC1pbXBvcnQgdG8gcHJpbnQgdGhlIGVudGlyZSBgcHJvZ3Jlc3NgIGxpbmUgdW5tb2RpZmllZCB0bworaXRzIHN0YW5kYXJkIG91dHB1dCBjaGFubmVsIChmaWxlIGRlc2NyaXB0b3IgMSkgd2hlbiB0aGUgY29tbWFuZCBpcworcHJvY2Vzc2VkIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gIFRoZSBjb21tYW5kIG90aGVyd2lzZSBoYXMgbm8gaW1wYWN0CitvbiB0aGUgY3VycmVudCBpbXBvcnQsIG9yIG9uIGFueSBvZiBmYXN0LWltcG9ydCdzIGludGVybmFsIHN0YXRlLgorCisuLi4uCisJJ3Byb2dyZXNzJyBTUCA8YW55PiBMRgorCUxGPworLi4uLgorCitUaGUgYDxhbnk+YCBwYXJ0IG9mIHRoZSBjb21tYW5kIG1heSBjb250YWluIGFueSBzZXF1ZW5jZSBvZiBieXRlcwordGhhdCBkb2VzIG5vdCBjb250YWluIGBMRmAuICBUaGUgYExGYCBhZnRlciB0aGUgY29tbWFuZCBpcyBvcHRpb25hbC4KK0NhbGxlcnMgbWF5IHdpc2ggdG8gcHJvY2VzcyB0aGUgb3V0cHV0IHRocm91Z2ggYSB0b29sIHN1Y2ggYXMgc2VkIHRvCityZW1vdmUgdGhlIGxlYWRpbmcgcGFydCBvZiB0aGUgbGluZSwgZm9yIGV4YW1wbGU6CisKKz09PT0KKwlmcm9udGVuZCB8IGdpdCBmYXN0LWltcG9ydCB8IHNlZCAncy9ecHJvZ3Jlc3MgLy8nCis9PT09CisKK1BsYWNpbmcgYSBgcHJvZ3Jlc3NgIGNvbW1hbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgYSBgY2hlY2twb2ludGAgd2lsbAoraW5mb3JtIHRoZSByZWFkZXIgd2hlbiB0aGUgYGNoZWNrcG9pbnRgIGhhcyBiZWVuIGNvbXBsZXRlZCBhbmQgaXQKK2NhbiBzYWZlbHkgYWNjZXNzIHRoZSByZWZzIHRoYXQgZmFzdC1pbXBvcnQgdXBkYXRlZC4KKworYGdldC1tYXJrYAorfn5+fn5+fn5+fgorQ2F1c2VzIGZhc3QtaW1wb3J0IHRvIHByaW50IHRoZSBTSEEtMSBjb3JyZXNwb25kaW5nIHRvIGEgbWFyayB0bworc3Rkb3V0IG9yIHRvIHRoZSBmaWxlIGRlc2NyaXB0b3IgcHJldmlvdXNseSBhcnJhbmdlZCB3aXRoIHRoZQorYC0tY2F0LWJsb2ItZmRgIGFyZ3VtZW50LiBUaGUgY29tbWFuZCBvdGhlcndpc2UgaGFzIG5vIGltcGFjdCBvbiB0aGUKK2N1cnJlbnQgaW1wb3J0OyBpdHMgcHVycG9zZSBpcyB0byByZXRyaWV2ZSBTSEEtMXMgdGhhdCBsYXRlciBjb21taXRzCittaWdodCB3YW50IHRvIHJlZmVyIHRvIGluIHRoZWlyIGNvbW1pdCBtZXNzYWdlcy4KKworLi4uLgorCSdnZXQtbWFyaycgU1AgJzonIDxpZG51bT4gTEYKKy4uLi4KKworVGhpcyBjb21tYW5kIGNhbiBiZSB1c2VkIGFueXdoZXJlIGluIHRoZSBzdHJlYW0gdGhhdCBjb21tZW50cyBhcmUKK2FjY2VwdGVkLiAgSW4gcGFydGljdWxhciwgdGhlIGBnZXQtbWFya2AgY29tbWFuZCBjYW4gYmUgdXNlZCBpbiB0aGUKK21pZGRsZSBvZiBhIGNvbW1pdCBidXQgbm90IGluIHRoZSBtaWRkbGUgb2YgYSBgZGF0YWAgY29tbWFuZC4KKworU2VlIGBgUmVzcG9uc2VzIFRvIENvbW1hbmRzJycgYmVsb3cgZm9yIGRldGFpbHMgYWJvdXQgaG93IHRvIHJlYWQKK3RoaXMgb3V0cHV0IHNhZmVseS4KKworYGNhdC1ibG9iYAorfn5+fn5+fn5+fgorQ2F1c2VzIGZhc3QtaW1wb3J0IHRvIHByaW50IGEgYmxvYiB0byBhIGZpbGUgZGVzY3JpcHRvciBwcmV2aW91c2x5CithcnJhbmdlZCB3aXRoIHRoZSBgLS1jYXQtYmxvYi1mZGAgYXJndW1lbnQuICBUaGUgY29tbWFuZCBvdGhlcndpc2UKK2hhcyBubyBpbXBhY3Qgb24gdGhlIGN1cnJlbnQgaW1wb3J0OyBpdHMgbWFpbiBwdXJwb3NlIGlzIHRvCityZXRyaWV2ZSBibG9icyB0aGF0IG1heSBiZSBpbiBmYXN0LWltcG9ydCdzIG1lbW9yeSBidXQgbm90CithY2Nlc3NpYmxlIGZyb20gdGhlIHRhcmdldCByZXBvc2l0b3J5LgorCisuLi4uCisJJ2NhdC1ibG9iJyBTUCA8ZGF0YXJlZj4gTEYKKy4uLi4KKworVGhlIGA8ZGF0YXJlZj5gIGNhbiBiZSBlaXRoZXIgYSBtYXJrIHJlZmVyZW5jZSAoYDo8aWRudW0+YCkKK3NldCBwcmV2aW91c2x5IG9yIGEgZnVsbCA0MC1ieXRlIFNIQS0xIG9mIGEgR2l0IGJsb2IsIHByZWV4aXN0aW5nIG9yCityZWFkeSB0byBiZSB3cml0dGVuLgorCitPdXRwdXQgdXNlcyB0aGUgc2FtZSBmb3JtYXQgYXMgYGdpdCBjYXQtZmlsZSAtLWJhdGNoYDoKKworPT09PQorCTxzaGExPiBTUCAnYmxvYicgU1AgPHNpemU+IExGCisJPGNvbnRlbnRzPiBMRgorPT09PQorCitUaGlzIGNvbW1hbmQgY2FuIGJlIHVzZWQgYW55d2hlcmUgaW4gdGhlIHN0cmVhbSB0aGF0IGNvbW1lbnRzIGFyZQorYWNjZXB0ZWQuICBJbiBwYXJ0aWN1bGFyLCB0aGUgYGNhdC1ibG9iYCBjb21tYW5kIGNhbiBiZSB1c2VkIGluIHRoZQorbWlkZGxlIG9mIGEgY29tbWl0IGJ1dCBub3QgaW4gdGhlIG1pZGRsZSBvZiBhIGBkYXRhYCBjb21tYW5kLgorCitTZWUgYGBSZXNwb25zZXMgVG8gQ29tbWFuZHMnJyBiZWxvdyBmb3IgZGV0YWlscyBhYm91dCBob3cgdG8gcmVhZAordGhpcyBvdXRwdXQgc2FmZWx5LgorCitgbHNgCit+fn5+CitQcmludHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG9iamVjdCBhdCBhIHBhdGggdG8gYSBmaWxlIGRlc2NyaXB0b3IKK3ByZXZpb3VzbHkgYXJyYW5nZWQgd2l0aCB0aGUgYC0tY2F0LWJsb2ItZmRgIGFyZ3VtZW50LiAgVGhpcyBhbGxvd3MKK3ByaW50aW5nIGEgYmxvYiBmcm9tIHRoZSBhY3RpdmUgY29tbWl0ICh3aXRoIGBjYXQtYmxvYmApIG9yIGNvcHlpbmcgYQorYmxvYiBvciB0cmVlIGZyb20gYSBwcmV2aW91cyBjb21taXQgZm9yIHVzZSBpbiB0aGUgY3VycmVudCBvbmUgKHdpdGgKK2BmaWxlbW9kaWZ5YCkuCisKK1RoZSBgbHNgIGNvbW1hbmQgY2FuIGJlIHVzZWQgYW55d2hlcmUgaW4gdGhlIHN0cmVhbSB0aGF0IGNvbW1lbnRzIGFyZQorYWNjZXB0ZWQsIGluY2x1ZGluZyB0aGUgbWlkZGxlIG9mIGEgY29tbWl0LgorCitSZWFkaW5nIGZyb20gdGhlIGFjdGl2ZSBjb21taXQ6OgorCVRoaXMgZm9ybSBjYW4gb25seSBiZSB1c2VkIGluIHRoZSBtaWRkbGUgb2YgYSBgY29tbWl0YC4KKwlUaGUgcGF0aCBuYW1lcyBhIGRpcmVjdG9yeSBlbnRyeSB3aXRoaW4gZmFzdC1pbXBvcnQncworCWFjdGl2ZSBjb21taXQuICBUaGUgcGF0aCBtdXN0IGJlIHF1b3RlZCBpbiB0aGlzIGNhc2UuCisrCisuLi4uCisJJ2xzJyBTUCA8cGF0aD4gTEYKKy4uLi4KKworUmVhZGluZyBmcm9tIGEgbmFtZWQgdHJlZTo6CisJVGhlIGA8ZGF0YXJlZj5gIGNhbiBiZSBhIG1hcmsgcmVmZXJlbmNlIChgOjxpZG51bT5gKSBvciB0aGUKKwlmdWxsIDQwLWJ5dGUgU0hBLTEgb2YgYSBHaXQgdGFnLCBjb21taXQsIG9yIHRyZWUgb2JqZWN0LAorCXByZWV4aXN0aW5nIG9yIHdhaXRpbmcgdG8gYmUgd3JpdHRlbi4KKwlUaGUgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgdG9wIGxldmVsIG9mIHRoZSB0cmVlCisJbmFtZWQgYnkgYDxkYXRhcmVmPmAuCisrCisuLi4uCisJJ2xzJyBTUCA8ZGF0YXJlZj4gU1AgPHBhdGg+IExGCisuLi4uCisKK1NlZSBgZmlsZW1vZGlmeWAgYWJvdmUgZm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgYDxwYXRoPmAuCisKK091dHB1dCB1c2VzIHRoZSBzYW1lIGZvcm1hdCBhcyBgZ2l0IGxzLXRyZWUgPHRyZWU+IC0tIDxwYXRoPmA6CisKKz09PT0KKwk8bW9kZT4gU1AgKCdibG9iJyB8ICd0cmVlJyB8ICdjb21taXQnKSBTUCA8ZGF0YXJlZj4gSFQgPHBhdGg+IExGCis9PT09CisKK1RoZSA8ZGF0YXJlZj4gcmVwcmVzZW50cyB0aGUgYmxvYiwgdHJlZSwgb3IgY29tbWl0IG9iamVjdCBhdCA8cGF0aD4KK2FuZCBjYW4gYmUgdXNlZCBpbiBsYXRlciAnZ2V0LW1hcmsnLCAnY2F0LWJsb2InLCAnZmlsZW1vZGlmeScsIG9yCisnbHMnIGNvbW1hbmRzLgorCitJZiB0aGVyZSBpcyBubyBmaWxlIG9yIHN1YnRyZWUgYXQgdGhhdCBwYXRoLCAnZ2l0IGZhc3QtaW1wb3J0JyB3aWxsCitpbnN0ZWFkIHJlcG9ydAorCis9PT09CisJbWlzc2luZyBTUCA8cGF0aD4gTEYKKz09PT0KKworU2VlIGBgUmVzcG9uc2VzIFRvIENvbW1hbmRzJycgYmVsb3cgZm9yIGRldGFpbHMgYWJvdXQgaG93IHRvIHJlYWQKK3RoaXMgb3V0cHV0IHNhZmVseS4KKworYGZlYXR1cmVgCit+fn5+fn5+fn4KK1JlcXVpcmUgdGhhdCBmYXN0LWltcG9ydCBzdXBwb3J0cyB0aGUgc3BlY2lmaWVkIGZlYXR1cmUsIG9yIGFib3J0IGlmCitpdCBkb2VzIG5vdC4KKworLi4uLgorCSdmZWF0dXJlJyBTUCA8ZmVhdHVyZT4gKCc9JyA8YXJndW1lbnQ+KT8gTEYKKy4uLi4KKworVGhlIDxmZWF0dXJlPiBwYXJ0IG9mIHRoZSBjb21tYW5kIG1heSBiZSBhbnkgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKK2RhdGUtZm9ybWF0OjoKK2V4cG9ydC1tYXJrczo6CityZWxhdGl2ZS1tYXJrczo6Cituby1yZWxhdGl2ZS1tYXJrczo6Citmb3JjZTo6CisJQWN0IGFzIHRob3VnaCB0aGUgY29ycmVzcG9uZGluZyBjb21tYW5kLWxpbmUgb3B0aW9uIHdpdGgKKwlhIGxlYWRpbmcgJy0tJyB3YXMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUKKwkoc2VlIE9QVElPTlMsIGFib3ZlKS4KKworaW1wb3J0LW1hcmtzOjoKK2ltcG9ydC1tYXJrcy1pZi1leGlzdHM6OgorCUxpa2UgLS1pbXBvcnQtbWFya3MgZXhjZXB0IGluIHR3byByZXNwZWN0czogZmlyc3QsIG9ubHkgb25lCisJImZlYXR1cmUgaW1wb3J0LW1hcmtzIiBvciAiZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzIgorCWNvbW1hbmQgaXMgYWxsb3dlZCBwZXIgc3RyZWFtOyBzZWNvbmQsIGFuIC0taW1wb3J0LW1hcmtzPQorCW9yIC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cyBjb21tYW5kLWxpbmUgb3B0aW9uIG92ZXJyaWRlcworCWFueSBvZiB0aGVzZSAiZmVhdHVyZSIgY29tbWFuZHMgaW4gdGhlIHN0cmVhbTsgdGhpcmQsCisJImZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cyIgbGlrZSBhIGNvcnJlc3BvbmRpbmcKKwljb21tYW5kLWxpbmUgb3B0aW9uIHNpbGVudGx5IHNraXBzIGEgbm9uZXhpc3RlbnQgZmlsZS4KKworZ2V0LW1hcms6OgorY2F0LWJsb2I6OgorbHM6OgorCVJlcXVpcmUgdGhhdCB0aGUgYmFja2VuZCBzdXBwb3J0IHRoZSAnZ2V0LW1hcmsnLCAnY2F0LWJsb2InLAorCW9yICdscycgY29tbWFuZCByZXNwZWN0aXZlbHkuCisJVmVyc2lvbnMgb2YgZmFzdC1pbXBvcnQgbm90IHN1cHBvcnRpbmcgdGhlIHNwZWNpZmllZCBjb21tYW5kCisJd2lsbCBleGl0IHdpdGggYSBtZXNzYWdlIGluZGljYXRpbmcgc28uCisJVGhpcyBsZXRzIHRoZSBpbXBvcnQgZXJyb3Igb3V0IGVhcmx5IHdpdGggYSBjbGVhciBtZXNzYWdlLAorCXJhdGhlciB0aGFuIHdhc3RpbmcgdGltZSBvbiB0aGUgZWFybHkgcGFydCBvZiBhbiBpbXBvcnQKKwliZWZvcmUgdGhlIHVuc3VwcG9ydGVkIGNvbW1hbmQgaXMgZGV0ZWN0ZWQuCisKK25vdGVzOjoKKwlSZXF1aXJlIHRoYXQgdGhlIGJhY2tlbmQgc3VwcG9ydCB0aGUgJ25vdGVtb2RpZnknIChOKQorCXN1YmNvbW1hbmQgdG8gdGhlICdjb21taXQnIGNvbW1hbmQuCisJVmVyc2lvbnMgb2YgZmFzdC1pbXBvcnQgbm90IHN1cHBvcnRpbmcgbm90ZXMgd2lsbCBleGl0CisJd2l0aCBhIG1lc3NhZ2UgaW5kaWNhdGluZyBzby4KKworZG9uZTo6CisJRXJyb3Igb3V0IGlmIHRoZSBzdHJlYW0gZW5kcyB3aXRob3V0IGEgJ2RvbmUnIGNvbW1hbmQuCisJV2l0aG91dCB0aGlzIGZlYXR1cmUsIGVycm9ycyBjYXVzaW5nIHRoZSBmcm9udGVuZCB0byBlbmQKKwlhYnJ1cHRseSBhdCBhIGNvbnZlbmllbnQgcG9pbnQgaW4gdGhlIHN0cmVhbSBjYW4gZ28KKwl1bmRldGVjdGVkLiAgVGhpcyBtYXkgb2NjdXIsIGZvciBleGFtcGxlLCBpZiBhbiBpbXBvcnQKKwlmcm9udCBlbmQgZGllcyBpbiBtaWQtb3BlcmF0aW9uIHdpdGhvdXQgZW1pdHRpbmcgU0lHVEVSTQorCW9yIFNJR0tJTEwgYXQgaXRzIHN1Ym9yZGluYXRlIGdpdCBmYXN0LWltcG9ydCBpbnN0YW5jZS4KKworYG9wdGlvbmAKK35+fn5+fn5+CitQcm9jZXNzZXMgdGhlIHNwZWNpZmllZCBvcHRpb24gc28gdGhhdCBnaXQgZmFzdC1pbXBvcnQgYmVoYXZlcyBpbiBhCit3YXkgdGhhdCBzdWl0cyB0aGUgZnJvbnRlbmQncyBuZWVkcy4KK05vdGUgdGhhdCBvcHRpb25zIHNwZWNpZmllZCBieSB0aGUgZnJvbnRlbmQgYXJlIG92ZXJyaWRkZW4gYnkgYW55CitvcHRpb25zIHRoZSB1c2VyIG1heSBzcGVjaWZ5IHRvIGdpdCBmYXN0LWltcG9ydCBpdHNlbGYuCisKKy4uLi4KKyAgICAnb3B0aW9uJyBTUCA8b3B0aW9uPiBMRgorLi4uLgorCitUaGUgYDxvcHRpb24+YCBwYXJ0IG9mIHRoZSBjb21tYW5kIG1heSBjb250YWluIGFueSBvZiB0aGUgb3B0aW9ucworbGlzdGVkIGluIHRoZSBPUFRJT05TIHNlY3Rpb24gdGhhdCBkbyBub3QgY2hhbmdlIGltcG9ydCBzZW1hbnRpY3MsCit3aXRob3V0IHRoZSBsZWFkaW5nICctLScgYW5kIGlzIHRyZWF0ZWQgaW4gdGhlIHNhbWUgd2F5LgorCitPcHRpb24gY29tbWFuZHMgbXVzdCBiZSB0aGUgZmlyc3QgY29tbWFuZHMgb24gdGhlIGlucHV0IChub3QgY291bnRpbmcKK2ZlYXR1cmUgY29tbWFuZHMpLCB0byBnaXZlIGFuIG9wdGlvbiBjb21tYW5kIGFmdGVyIGFueSBub24tb3B0aW9uCitjb21tYW5kIGlzIGFuIGVycm9yLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmQtbGluZSBvcHRpb25zIGNoYW5nZSBpbXBvcnQgc2VtYW50aWNzIGFuZCBtYXkgdGhlcmVmb3JlCitub3QgYmUgcGFzc2VkIGFzIG9wdGlvbjoKKworKiBkYXRlLWZvcm1hdAorKiBpbXBvcnQtbWFya3MKKyogZXhwb3J0LW1hcmtzCisqIGNhdC1ibG9iLWZkCisqIGZvcmNlCisKK2Bkb25lYAorfn5+fn5+CitJZiB0aGUgYGRvbmVgIGZlYXR1cmUgaXMgbm90IGluIHVzZSwgdHJlYXRlZCBhcyBpZiBFT0Ygd2FzIHJlYWQuCitUaGlzIGNhbiBiZSB1c2VkIHRvIHRlbGwgZmFzdC1pbXBvcnQgdG8gZmluaXNoIGVhcmx5LgorCitJZiB0aGUgYC0tZG9uZWAgY29tbWFuZC1saW5lIG9wdGlvbiBvciBgZmVhdHVyZSBkb25lYCBjb21tYW5kIGlzCitpbiB1c2UsIHRoZSBgZG9uZWAgY29tbWFuZCBpcyBtYW5kYXRvcnkgYW5kIG1hcmtzIHRoZSBlbmQgb2YgdGhlCitzdHJlYW0uCisKK1Jlc3BvbnNlcyBUbyBDb21tYW5kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOZXcgb2JqZWN0cyB3cml0dGVuIGJ5IGZhc3QtaW1wb3J0IGFyZSBub3QgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LgorTW9zdCBmYXN0LWltcG9ydCBjb21tYW5kcyBoYXZlIG5vIHZpc2libGUgZWZmZWN0IHVudGlsIHRoZSBuZXh0CitjaGVja3BvaW50IChvciBjb21wbGV0aW9uKS4gIFRoZSBmcm9udGVuZCBjYW4gc2VuZCBjb21tYW5kcyB0bworZmlsbCBmYXN0LWltcG9ydCdzIGlucHV0IHBpcGUgd2l0aG91dCB3b3JyeWluZyBhYm91dCBob3cgcXVpY2tseQordGhleSB3aWxsIHRha2UgZWZmZWN0LCB3aGljaCBpbXByb3ZlcyBwZXJmb3JtYW5jZSBieSBzaW1wbGlmeWluZworc2NoZWR1bGluZy4KKworRm9yIHNvbWUgZnJvbnRlbmRzLCB0aG91Z2gsIGl0IGlzIHVzZWZ1bCB0byBiZSBhYmxlIHRvIHJlYWQgYmFjaworZGF0YSBmcm9tIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkgYXMgaXQgaXMgYmVpbmcgdXBkYXRlZCAoZm9yCitleGFtcGxlIHdoZW4gdGhlIHNvdXJjZSBtYXRlcmlhbCBkZXNjcmliZXMgb2JqZWN0cyBpbiB0ZXJtcyBvZgorcGF0Y2hlcyB0byBiZSBhcHBsaWVkIHRvIHByZXZpb3VzbHkgaW1wb3J0ZWQgb2JqZWN0cykuICBUaGlzIGNhbgorYmUgYWNjb21wbGlzaGVkIGJ5IGNvbm5lY3RpbmcgdGhlIGZyb250ZW5kIGFuZCBmYXN0LWltcG9ydCB2aWEKK2JpZGlyZWN0aW9uYWwgcGlwZXM6CisKKz09PT0KKwlta2ZpZm8gZmFzdC1pbXBvcnQtb3V0cHV0CisJZnJvbnRlbmQgPGZhc3QtaW1wb3J0LW91dHB1dCB8CisJZ2l0IGZhc3QtaW1wb3J0ID5mYXN0LWltcG9ydC1vdXRwdXQKKz09PT0KKworQSBmcm9udGVuZCBzZXQgdXAgdGhpcyB3YXkgY2FuIHVzZSBgcHJvZ3Jlc3NgLCBgZ2V0LW1hcmtgLCBgbHNgLCBhbmQKK2BjYXQtYmxvYmAgY29tbWFuZHMgdG8gcmVhZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbXBvcnQgaW4gcHJvZ3Jlc3MuCisKK1RvIGF2b2lkIGRlYWRsb2NrLCBzdWNoIGZyb250ZW5kcyBtdXN0IGNvbXBsZXRlbHkgY29uc3VtZSBhbnkKK3BlbmRpbmcgb3V0cHV0IGZyb20gYHByb2dyZXNzYCwgYGxzYCwgYGdldC1tYXJrYCwgYW5kIGBjYXQtYmxvYmAgYmVmb3JlCitwZXJmb3JtaW5nIHdyaXRlcyB0byBmYXN0LWltcG9ydCB0aGF0IG1pZ2h0IGJsb2NrLgorCitDcmFzaCBSZXBvcnRzCistLS0tLS0tLS0tLS0tCitJZiBmYXN0LWltcG9ydCBpcyBzdXBwbGllZCBpbnZhbGlkIGlucHV0IGl0IHdpbGwgdGVybWluYXRlIHdpdGggYQorbm9uLXplcm8gZXhpdCBzdGF0dXMgYW5kIGNyZWF0ZSBhIGNyYXNoIHJlcG9ydCBpbiB0aGUgdG9wIGxldmVsIG9mCit0aGUgR2l0IHJlcG9zaXRvcnkgaXQgd2FzIGltcG9ydGluZyBpbnRvLiAgQ3Jhc2ggcmVwb3J0cyBjb250YWluCithIHNuYXBzaG90IG9mIHRoZSBpbnRlcm5hbCBmYXN0LWltcG9ydCBzdGF0ZSBhcyB3ZWxsIGFzIHRoZSBtb3N0CityZWNlbnQgY29tbWFuZHMgdGhhdCBsZWFkIHVwIHRvIHRoZSBjcmFzaC4KKworQWxsIHJlY2VudCBjb21tYW5kcyAoaW5jbHVkaW5nIHN0cmVhbSBjb21tZW50cywgZmlsZSBjaGFuZ2VzIGFuZAorcHJvZ3Jlc3MgY29tbWFuZHMpIGFyZSBzaG93biBpbiB0aGUgY29tbWFuZCBoaXN0b3J5IHdpdGhpbiB0aGUgY3Jhc2gKK3JlcG9ydCwgYnV0IHJhdyBmaWxlIGRhdGEgYW5kIGNvbW1pdCBtZXNzYWdlcyBhcmUgZXhjbHVkZWQgZnJvbSB0aGUKK2NyYXNoIHJlcG9ydC4gIFRoaXMgZXhjbHVzaW9uIHNhdmVzIHNwYWNlIHdpdGhpbiB0aGUgcmVwb3J0IGZpbGUKK2FuZCByZWR1Y2VzIHRoZSBhbW91bnQgb2YgYnVmZmVyaW5nIHRoYXQgZmFzdC1pbXBvcnQgbXVzdCBwZXJmb3JtCitkdXJpbmcgZXhlY3V0aW9uLgorCitBZnRlciB3cml0aW5nIGEgY3Jhc2ggcmVwb3J0IGZhc3QtaW1wb3J0IHdpbGwgY2xvc2UgdGhlIGN1cnJlbnQKK3BhY2tmaWxlIGFuZCBleHBvcnQgdGhlIG1hcmtzIHRhYmxlLiAgVGhpcyBhbGxvd3MgdGhlIGZyb250ZW5kCitkZXZlbG9wZXIgdG8gaW5zcGVjdCB0aGUgcmVwb3NpdG9yeSBzdGF0ZSBhbmQgcmVzdW1lIHRoZSBpbXBvcnQgZnJvbQordGhlIHBvaW50IHdoZXJlIGl0IGNyYXNoZWQuICBUaGUgbW9kaWZpZWQgYnJhbmNoZXMgYW5kIHRhZ3MgYXJlIG5vdAordXBkYXRlZCBkdXJpbmcgYSBjcmFzaCwgYXMgdGhlIGltcG9ydCBkaWQgbm90IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4KK0JyYW5jaCBhbmQgdGFnIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgY3Jhc2ggcmVwb3J0IGFuZAorbXVzdCBiZSBhcHBsaWVkIG1hbnVhbGx5IGlmIHRoZSB1cGRhdGUgaXMgbmVlZGVkLgorCitBbiBleGFtcGxlIGNyYXNoOgorCis9PT09CisJJCBjYXQgPmluIDw8RU5EX09GX0lOUFVUCisJIyBteSB2ZXJ5IGZpcnN0IHRlc3QgY29tbWl0CisJY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCisJY29tbWl0dGVyIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZT4gMTkyODMgLTA0MDAKKwkjIHdobyBpcyB0aGF0IGd1eSBhbnl3YXk/CisJZGF0YSA8PEVPRgorCXRoaXMgaXMgbXkgY29tbWl0CisJRU9GCisJTSA2NDQgaW5saW5lIC5naXRpZ25vcmUKKwlkYXRhIDw8RU9GCisJLmdpdGlnbm9yZQorCUVPRgorCU0gNzc3IGlubGluZSBib2IKKwlFTkRfT0ZfSU5QVVQKKworCSQgZ2l0IGZhc3QtaW1wb3J0IDxpbgorCWZhdGFsOiBDb3JydXB0IG1vZGU6IE0gNzc3IGlubGluZSBib2IKKwlmYXN0LWltcG9ydDogZHVtcGluZyBjcmFzaCByZXBvcnQgdG8gLmdpdC9mYXN0X2ltcG9ydF9jcmFzaF84NDM0CisKKwkkIGNhdCAuZ2l0L2Zhc3RfaW1wb3J0X2NyYXNoXzg0MzQKKwlmYXN0LWltcG9ydCBjcmFzaCByZXBvcnQ6CisJICAgIGZhc3QtaW1wb3J0IHByb2Nlc3M6IDg0MzQKKwkgICAgcGFyZW50IHByb2Nlc3MgICAgIDogMTM5MQorCSAgICBhdCBTYXQgU2VwIDEgMDA6NTg6MTIgMjAwNworCisJZmF0YWw6IENvcnJ1cHQgbW9kZTogTSA3NzcgaW5saW5lIGJvYgorCisJTW9zdCBSZWNlbnQgQ29tbWFuZHMgQmVmb3JlIENyYXNoCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAjIG15IHZlcnkgZmlyc3QgdGVzdCBjb21taXQKKwkgIGNvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorCSAgY29tbWl0dGVyIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZT4gMTkyODMgLTA0MDAKKwkgICMgd2hvIGlzIHRoYXQgZ3V5IGFueXdheT8KKwkgIGRhdGEgPDxFT0YKKwkgIE0gNjQ0IGlubGluZSAuZ2l0aWdub3JlCisJICBkYXRhIDw8RU9GCisJKiBNIDc3NyBpbmxpbmUgYm9iCisKKwlBY3RpdmUgQnJhbmNoIExSVQorCS0tLS0tLS0tLS0tLS0tLS0tCisJICAgIGFjdGl2ZV9icmFuY2hlcyA9IDEgY3VyLCA1IG1heAorCisJICBwb3MgIGNsb2NrIG5hbWUKKwkgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCSAgIDEpICAgICAgMCByZWZzL2hlYWRzL21hc3RlcgorCisJSW5hY3RpdmUgQnJhbmNoZXMKKwktLS0tLS0tLS0tLS0tLS0tLQorCXJlZnMvaGVhZHMvbWFzdGVyOgorCSAgc3RhdHVzICAgICAgOiBhY3RpdmUgbG9hZGVkIGRpcnR5CisJICB0aXAgY29tbWl0ICA6IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKwkgIG9sZCB0cmVlICAgIDogMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorCSAgY3VyIHRyZWUgICAgOiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisJICBjb21taXQgY2xvY2s6IDAKKwkgIGxhc3QgcGFjayAgIDoKKworCisJLS0tLS0tLS0tLS0tLS0tLS0tLQorCUVORCBPRiBDUkFTSCBSRVBPUlQKKz09PT0KKworVGlwcyBhbmQgVHJpY2tzCistLS0tLS0tLS0tLS0tLS0KK1RoZSBmb2xsb3dpbmcgdGlwcyBhbmQgdHJpY2tzIGhhdmUgYmVlbiBjb2xsZWN0ZWQgZnJvbSB2YXJpb3VzCit1c2VycyBvZiBmYXN0LWltcG9ydCwgYW5kIGFyZSBvZmZlcmVkIGhlcmUgYXMgc3VnZ2VzdGlvbnMuCisKK1VzZSBPbmUgTWFyayBQZXIgQ29tbWl0Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorV2hlbiBkb2luZyBhIHJlcG9zaXRvcnkgY29udmVyc2lvbiwgdXNlIGEgdW5pcXVlIG1hcmsgcGVyIGNvbW1pdAorKGBtYXJrIDo8bj5gKSBhbmQgc3VwcGx5IHRoZSAtLWV4cG9ydC1tYXJrcyBvcHRpb24gb24gdGhlIGNvbW1hbmQKK2xpbmUuICBmYXN0LWltcG9ydCB3aWxsIGR1bXAgYSBmaWxlIHdoaWNoIGxpc3RzIGV2ZXJ5IG1hcmsgYW5kIHRoZSBHaXQKK29iamVjdCBTSEEtMSB0aGF0IGNvcnJlc3BvbmRzIHRvIGl0LiAgSWYgdGhlIGZyb250ZW5kIGNhbiB0aWUKK3RoZSBtYXJrcyBiYWNrIHRvIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSwgaXQgaXMgZWFzeSB0byB2ZXJpZnkgdGhlCithY2N1cmFjeSBhbmQgY29tcGxldGVuZXNzIG9mIHRoZSBpbXBvcnQgYnkgY29tcGFyaW5nIGVhY2ggR2l0Citjb21taXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIHJldmlzaW9uLgorCitDb21pbmcgZnJvbSBhIHN5c3RlbSBzdWNoIGFzIFBlcmZvcmNlIG9yIFN1YnZlcnNpb24gdGhpcyBzaG91bGQgYmUKK3F1aXRlIHNpbXBsZSwgYXMgdGhlIGZhc3QtaW1wb3J0IG1hcmsgY2FuIGFsc28gYmUgdGhlIFBlcmZvcmNlIGNoYW5nZXNldAorbnVtYmVyIG9yIHRoZSBTdWJ2ZXJzaW9uIHJldmlzaW9uIG51bWJlci4KKworRnJlZWx5IFNraXAgQXJvdW5kIEJyYW5jaGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0Rvbid0IGJvdGhlciB0cnlpbmcgdG8gb3B0aW1pemUgdGhlIGZyb250ZW5kIHRvIHN0aWNrIHRvIG9uZSBicmFuY2gKK2F0IGEgdGltZSBkdXJpbmcgYW4gaW1wb3J0LiAgQWx0aG91Z2ggZG9pbmcgc28gbWlnaHQgYmUgc2xpZ2h0bHkKK2Zhc3RlciBmb3IgZmFzdC1pbXBvcnQsIGl0IHRlbmRzIHRvIGluY3JlYXNlIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBmcm9udGVuZAorY29kZSBjb25zaWRlcmFibHkuCisKK1RoZSBicmFuY2ggTFJVIGJ1aWx0aW4gdG8gZmFzdC1pbXBvcnQgdGVuZHMgdG8gYmVoYXZlIHZlcnkgd2VsbCwgYW5kIHRoZQorY29zdCBvZiBhY3RpdmF0aW5nIGFuIGluYWN0aXZlIGJyYW5jaCBpcyBzbyBsb3cgdGhhdCBib3VuY2luZyBhcm91bmQKK2JldHdlZW4gYnJhbmNoZXMgaGFzIHZpcnR1YWxseSBubyBpbXBhY3Qgb24gaW1wb3J0IHBlcmZvcm1hbmNlLgorCitIYW5kbGluZyBSZW5hbWVzCit+fn5+fn5+fn5+fn5+fn5+CitXaGVuIGltcG9ydGluZyBhIHJlbmFtZWQgZmlsZSBvciBkaXJlY3RvcnksIHNpbXBseSBkZWxldGUgdGhlIG9sZAorbmFtZShzKSBhbmQgbW9kaWZ5IHRoZSBuZXcgbmFtZShzKSBkdXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWl0LgorR2l0IHBlcmZvcm1zIHJlbmFtZSBkZXRlY3Rpb24gYWZ0ZXItdGhlLWZhY3QsIHJhdGhlciB0aGFuIGV4cGxpY2l0bHkKK2R1cmluZyBhIGNvbW1pdC4KKworVXNlIFRhZyBGaXh1cCBCcmFuY2hlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorU29tZSBvdGhlciBTQ00gc3lzdGVtcyBsZXQgdGhlIHVzZXIgY3JlYXRlIGEgdGFnIGZyb20gbXVsdGlwbGUKK2ZpbGVzIHdoaWNoIGFyZSBub3QgZnJvbSB0aGUgc2FtZSBjb21taXQvY2hhbmdlc2V0LiAgT3IgdG8gY3JlYXRlCit0YWdzIHdoaWNoIGFyZSBhIHN1YnNldCBvZiB0aGUgZmlsZXMgYXZhaWxhYmxlIGluIHRoZSByZXBvc2l0b3J5LgorCitJbXBvcnRpbmcgdGhlc2UgdGFncyBhcy1pcyBpbiBHaXQgaXMgaW1wb3NzaWJsZSB3aXRob3V0IG1ha2luZyBhdAorbGVhc3Qgb25lIGNvbW1pdCB3aGljaCBgYGZpeGVzIHVwJycgdGhlIGZpbGVzIHRvIG1hdGNoIHRoZSBjb250ZW50CitvZiB0aGUgdGFnLiAgVXNlIGZhc3QtaW1wb3J0J3MgYHJlc2V0YCBjb21tYW5kIHRvIHJlc2V0IGEgZHVtbXkgYnJhbmNoCitvdXRzaWRlIG9mIHlvdXIgbm9ybWFsIGJyYW5jaCBzcGFjZSB0byB0aGUgYmFzZSBjb21taXQgZm9yIHRoZSB0YWcsCit0aGVuIGNvbW1pdCBvbmUgb3IgbW9yZSBmaWxlIGZpeHVwIGNvbW1pdHMsIGFuZCBmaW5hbGx5IHRhZyB0aGUKK2R1bW15IGJyYW5jaC4KKworRm9yIGV4YW1wbGUgc2luY2UgYWxsIG5vcm1hbCBicmFuY2hlcyBhcmUgc3RvcmVkIHVuZGVyIGByZWZzL2hlYWRzL2AKK25hbWUgdGhlIHRhZyBmaXh1cCBicmFuY2ggYFRBR19GSVhVUGAuICBUaGlzIHdheSBpdCBpcyBpbXBvc3NpYmxlIGZvcgordGhlIGZpeHVwIGJyYW5jaCB1c2VkIGJ5IHRoZSBpbXBvcnRlciB0byBoYXZlIG5hbWVzcGFjZSBjb25mbGljdHMKK3dpdGggcmVhbCBicmFuY2hlcyBpbXBvcnRlZCBmcm9tIHRoZSBzb3VyY2UgKHRoZSBuYW1lIGBUQUdfRklYVVBgCitpcyBub3QgYHJlZnMvaGVhZHMvVEFHX0ZJWFVQYCkuCisKK1doZW4gY29tbWl0dGluZyBmaXh1cHMsIGNvbnNpZGVyIHVzaW5nIGBtZXJnZWAgdG8gY29ubmVjdCB0aGUKK2NvbW1pdChzKSB3aGljaCBhcmUgc3VwcGx5aW5nIGZpbGUgcmV2aXNpb25zIHRvIHRoZSBmaXh1cCBicmFuY2guCitEb2luZyBzbyB3aWxsIGFsbG93IHRvb2xzIHN1Y2ggYXMgJ2dpdCBibGFtZScgdG8gdHJhY2sKK3Rocm91Z2ggdGhlIHJlYWwgY29tbWl0IGhpc3RvcnkgYW5kIHByb3Blcmx5IGFubm90YXRlIHRoZSBzb3VyY2UKK2ZpbGVzLgorCitBZnRlciBmYXN0LWltcG9ydCB0ZXJtaW5hdGVzIHRoZSBmcm9udGVuZCB3aWxsIG5lZWQgdG8gZG8gYHJtIC5naXQvVEFHX0ZJWFVQYAordG8gcmVtb3ZlIHRoZSBkdW1teSBicmFuY2guCisKK0ltcG9ydCBOb3csIFJlcGFjayBMYXRlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitBcyBzb29uIGFzIGZhc3QtaW1wb3J0IGNvbXBsZXRlcyB0aGUgR2l0IHJlcG9zaXRvcnkgaXMgY29tcGxldGVseSB2YWxpZAorYW5kIHJlYWR5IGZvciB1c2UuICBUeXBpY2FsbHkgdGhpcyB0YWtlcyBvbmx5IGEgdmVyeSBzaG9ydCB0aW1lLAorZXZlbiBmb3IgY29uc2lkZXJhYmx5IGxhcmdlIHByb2plY3RzICgxMDAsMDAwKyBjb21taXRzKS4KKworSG93ZXZlciByZXBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaXMgbmVjZXNzYXJ5IHRvIGltcHJvdmUgZGF0YQorbG9jYWxpdHkgYW5kIGFjY2VzcyBwZXJmb3JtYW5jZS4gIEl0IGNhbiBhbHNvIHRha2UgaG91cnMgb24gZXh0cmVtZWx5CitsYXJnZSBwcm9qZWN0cyAoZXNwZWNpYWxseSBpZiAtZiBhbmQgYSBsYXJnZSAtLXdpbmRvdyBwYXJhbWV0ZXIgaXMKK3VzZWQpLiAgU2luY2UgcmVwYWNraW5nIGlzIHNhZmUgdG8gcnVuIGFsb25nc2lkZSByZWFkZXJzIGFuZCB3cml0ZXJzLAorcnVuIHRoZSByZXBhY2sgaW4gdGhlIGJhY2tncm91bmQgYW5kIGxldCBpdCBmaW5pc2ggd2hlbiBpdCBmaW5pc2hlcy4KK1RoZXJlIGlzIG5vIHJlYXNvbiB0byB3YWl0IHRvIGV4cGxvcmUgeW91ciBuZXcgR2l0IHByb2plY3QhCisKK0lmIHlvdSBjaG9vc2UgdG8gd2FpdCBmb3IgdGhlIHJlcGFjaywgZG9uJ3QgdHJ5IHRvIHJ1biBiZW5jaG1hcmtzCitvciBwZXJmb3JtYW5jZSB0ZXN0cyB1bnRpbCByZXBhY2tpbmcgaXMgY29tcGxldGVkLiAgZmFzdC1pbXBvcnQgb3V0cHV0cworc3Vib3B0aW1hbCBwYWNrZmlsZXMgdGhhdCBhcmUgc2ltcGx5IG5ldmVyIHNlZW4gaW4gcmVhbCB1c2UKK3NpdHVhdGlvbnMuCisKK1JlcGFja2luZyBIaXN0b3JpY2FsIERhdGEKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0lmIHlvdSBhcmUgcmVwYWNraW5nIHZlcnkgb2xkIGltcG9ydGVkIGRhdGEgKGUuZy4gb2xkZXIgdGhhbiB0aGUKK2xhc3QgeWVhciksIGNvbnNpZGVyIGV4cGVuZGluZyBzb21lIGV4dHJhIENQVSB0aW1lIGFuZCBzdXBwbHlpbmcKKy0td2luZG93PTUwIChvciBoaWdoZXIpIHdoZW4geW91IHJ1biAnZ2l0IHJlcGFjaycuCitUaGlzIHdpbGwgdGFrZSBsb25nZXIsIGJ1dCB3aWxsIGFsc28gcHJvZHVjZSBhIHNtYWxsZXIgcGFja2ZpbGUuCitZb3Ugb25seSBuZWVkIHRvIGV4cGVuZCB0aGUgZWZmb3J0IG9uY2UsIGFuZCBldmVyeW9uZSB1c2luZyB5b3VyCitwcm9qZWN0IHdpbGwgYmVuZWZpdCBmcm9tIHRoZSBzbWFsbGVyIHJlcG9zaXRvcnkuCisKK0luY2x1ZGUgU29tZSBQcm9ncmVzcyBNZXNzYWdlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitFdmVyeSBvbmNlIGluIGEgd2hpbGUgaGF2ZSB5b3VyIGZyb250ZW5kIGVtaXQgYSBgcHJvZ3Jlc3NgIG1lc3NhZ2UKK3RvIGZhc3QtaW1wb3J0LiAgVGhlIGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlcyBhcmUgZW50aXJlbHkgZnJlZS1mb3JtLAorc28gb25lIHN1Z2dlc3Rpb24gd291bGQgYmUgdG8gb3V0cHV0IHRoZSBjdXJyZW50IG1vbnRoIGFuZCB5ZWFyCitlYWNoIHRpbWUgdGhlIGN1cnJlbnQgY29tbWl0IGRhdGUgbW92ZXMgaW50byB0aGUgbmV4dCBtb250aC4KK1lvdXIgdXNlcnMgd2lsbCBmZWVsIGJldHRlciBrbm93aW5nIGhvdyBtdWNoIG9mIHRoZSBkYXRhIHN0cmVhbQoraGFzIGJlZW4gcHJvY2Vzc2VkLgorCisKK1BhY2tmaWxlIE9wdGltaXphdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaGVuIHBhY2tpbmcgYSBibG9iIGZhc3QtaW1wb3J0IGFsd2F5cyBhdHRlbXB0cyB0byBkZWx0aWZ5IGFnYWluc3QgdGhlIGxhc3QKK2Jsb2Igd3JpdHRlbi4gIFVubGVzcyBzcGVjaWZpY2FsbHkgYXJyYW5nZWQgZm9yIGJ5IHRoZSBmcm9udGVuZCwKK3RoaXMgd2lsbCBwcm9iYWJseSBub3QgYmUgYSBwcmlvciB2ZXJzaW9uIG9mIHRoZSBzYW1lIGZpbGUsIHNvIHRoZQorZ2VuZXJhdGVkIGRlbHRhIHdpbGwgbm90IGJlIHRoZSBzbWFsbGVzdCBwb3NzaWJsZS4gIFRoZSByZXN1bHRpbmcKK3BhY2tmaWxlIHdpbGwgYmUgY29tcHJlc3NlZCwgYnV0IHdpbGwgbm90IGJlIG9wdGltYWwuCisKK0Zyb250ZW5kcyB3aGljaCBoYXZlIGVmZmljaWVudCBhY2Nlc3MgdG8gYWxsIHJldmlzaW9ucyBvZiBhCitzaW5nbGUgZmlsZSAoZm9yIGV4YW1wbGUgcmVhZGluZyBhbiBSQ1MvQ1ZTICx2IGZpbGUpIGNhbiBjaG9vc2UKK3RvIHN1cHBseSBhbGwgcmV2aXNpb25zIG9mIHRoYXQgZmlsZSBhcyBhIHNlcXVlbmNlIG9mIGNvbnNlY3V0aXZlCitgYmxvYmAgY29tbWFuZHMuICBUaGlzIGFsbG93cyBmYXN0LWltcG9ydCB0byBkZWx0aWZ5IHRoZSBkaWZmZXJlbnQgZmlsZQorcmV2aXNpb25zIGFnYWluc3QgZWFjaCBvdGhlciwgc2F2aW5nIHNwYWNlIGluIHRoZSBmaW5hbCBwYWNrZmlsZS4KK01hcmtzIGNhbiBiZSB1c2VkIHRvIGxhdGVyIGlkZW50aWZ5IGluZGl2aWR1YWwgZmlsZSByZXZpc2lvbnMgZHVyaW5nCithIHNlcXVlbmNlIG9mIGBjb21taXRgIGNvbW1hbmRzLgorCitUaGUgcGFja2ZpbGUocykgY3JlYXRlZCBieSBmYXN0LWltcG9ydCBkbyBub3QgZW5jb3VyYWdlIGdvb2QgZGlzayBhY2Nlc3MKK3BhdHRlcm5zLiAgVGhpcyBpcyBjYXVzZWQgYnkgZmFzdC1pbXBvcnQgd3JpdGluZyB0aGUgZGF0YSBpbiB0aGUgb3JkZXIKK2l0IGlzIHJlY2VpdmVkIG9uIHN0YW5kYXJkIGlucHV0LCB3aGlsZSBHaXQgdHlwaWNhbGx5IG9yZ2FuaXplcworZGF0YSB3aXRoaW4gcGFja2ZpbGVzIHRvIG1ha2UgdGhlIG1vc3QgcmVjZW50IChjdXJyZW50IHRpcCkgZGF0YQorYXBwZWFyIGJlZm9yZSBoaXN0b3JpY2FsIGRhdGEuICBHaXQgYWxzbyBjbHVzdGVycyBjb21taXRzIHRvZ2V0aGVyLAorc3BlZWRpbmcgdXAgcmV2aXNpb24gdHJhdmVyc2FsIHRocm91Z2ggYmV0dGVyIGNhY2hlIGxvY2FsaXR5LgorCitGb3IgdGhpcyByZWFzb24gaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB1c2VycyByZXBhY2sgdGhlCityZXBvc2l0b3J5IHdpdGggYGdpdCByZXBhY2sgLWEgLWRgIGFmdGVyIGZhc3QtaW1wb3J0IGNvbXBsZXRlcywgYWxsb3dpbmcKK0dpdCB0byByZW9yZ2FuaXplIHRoZSBwYWNrZmlsZXMgZm9yIGZhc3RlciBkYXRhIGFjY2Vzcy4gIElmIGJsb2IKK2RlbHRhcyBhcmUgc3Vib3B0aW1hbCAoc2VlIGFib3ZlKSB0aGVuIGFsc28gYWRkaW5nIHRoZSBgLWZgIG9wdGlvbgordG8gZm9yY2UgcmVjb21wdXRhdGlvbiBvZiBhbGwgZGVsdGFzIGNhbiBzaWduaWZpY2FudGx5IHJlZHVjZSB0aGUKK2ZpbmFsIHBhY2tmaWxlIHNpemUgKDMwLTUwJSBzbWFsbGVyIGNhbiBiZSBxdWl0ZSB0eXBpY2FsKS4KKworCitNZW1vcnkgVXRpbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLQorVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGZhY3RvcnMgd2hpY2ggYWZmZWN0IGhvdyBtdWNoIG1lbW9yeSBmYXN0LWltcG9ydAorcmVxdWlyZXMgdG8gcGVyZm9ybSBhbiBpbXBvcnQuICBMaWtlIGNyaXRpY2FsIHNlY3Rpb25zIG9mIGNvcmUKK0dpdCwgZmFzdC1pbXBvcnQgdXNlcyBpdHMgb3duIG1lbW9yeSBhbGxvY2F0b3JzIHRvIGFtb3J0aXplIGFueSBvdmVyaGVhZHMKK2Fzc29jaWF0ZWQgd2l0aCBtYWxsb2MuICBJbiBwcmFjdGljZSBmYXN0LWltcG9ydCB0ZW5kcyB0byBhbW9ydGl6ZSBhbnkKK21hbGxvYyBvdmVyaGVhZHMgdG8gMCwgZHVlIHRvIGl0cyB1c2Ugb2YgbGFyZ2UgYmxvY2sgYWxsb2NhdGlvbnMuCisKK3BlciBvYmplY3QKK35+fn5+fn5+fn4KK2Zhc3QtaW1wb3J0IG1haW50YWlucyBhbiBpbi1tZW1vcnkgc3RydWN0dXJlIGZvciBldmVyeSBvYmplY3Qgd3JpdHRlbiBpbgordGhpcyBleGVjdXRpb24uICBPbiBhIDMyIGJpdCBzeXN0ZW0gdGhlIHN0cnVjdHVyZSBpcyAzMiBieXRlcywKK29uIGEgNjQgYml0IHN5c3RlbSB0aGUgc3RydWN0dXJlIGlzIDQwIGJ5dGVzIChkdWUgdG8gdGhlIGxhcmdlcgorcG9pbnRlciBzaXplcykuICBPYmplY3RzIGluIHRoZSB0YWJsZSBhcmUgbm90IGRlYWxsb2NhdGVkIHVudGlsCitmYXN0LWltcG9ydCB0ZXJtaW5hdGVzLiAgSW1wb3J0aW5nIDIgbWlsbGlvbiBvYmplY3RzIG9uIGEgMzIgYml0IHN5c3RlbQord2lsbCByZXF1aXJlIGFwcHJveGltYXRlbHkgNjQgTWlCIG9mIG1lbW9yeS4KKworVGhlIG9iamVjdCB0YWJsZSBpcyBhY3R1YWxseSBhIGhhc2h0YWJsZSBrZXllZCBvbiB0aGUgb2JqZWN0IG5hbWUKKyh0aGUgdW5pcXVlIFNIQS0xKS4gIFRoaXMgc3RvcmFnZSBjb25maWd1cmF0aW9uIGFsbG93cyBmYXN0LWltcG9ydCB0byByZXVzZQorYW4gZXhpc3Rpbmcgb3IgYWxyZWFkeSB3cml0dGVuIG9iamVjdCBhbmQgYXZvaWQgd3JpdGluZyBkdXBsaWNhdGVzCit0byB0aGUgb3V0cHV0IHBhY2tmaWxlLiAgRHVwbGljYXRlIGJsb2JzIGFyZSBzdXJwcmlzaW5nbHkgY29tbW9uCitpbiBhbiBpbXBvcnQsIHR5cGljYWxseSBkdWUgdG8gYnJhbmNoIG1lcmdlcyBpbiB0aGUgc291cmNlLgorCitwZXIgbWFyaworfn5+fn5+fn4KK01hcmtzIGFyZSBzdG9yZWQgaW4gYSBzcGFyc2UgYXJyYXksIHVzaW5nIDEgcG9pbnRlciAoNCBieXRlcyBvciA4CitieXRlcywgZGVwZW5kaW5nIG9uIHBvaW50ZXIgc2l6ZSkgcGVyIG1hcmsuICBBbHRob3VnaCB0aGUgYXJyYXkKK2lzIHNwYXJzZSwgZnJvbnRlbmRzIGFyZSBzdGlsbCBzdHJvbmdseSBlbmNvdXJhZ2VkIHRvIHVzZSBtYXJrcworYmV0d2VlbiAxIGFuZCBuLCB3aGVyZSBuIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgbWFya3MgcmVxdWlyZWQgZm9yCit0aGlzIGltcG9ydC4KKworcGVyIGJyYW5jaAorfn5+fn5+fn5+fgorQnJhbmNoZXMgYXJlIGNsYXNzaWZpZWQgYXMgYWN0aXZlIGFuZCBpbmFjdGl2ZS4gIFRoZSBtZW1vcnkgdXNhZ2UKK29mIHRoZSB0d28gY2xhc3NlcyBpcyBzaWduaWZpY2FudGx5IGRpZmZlcmVudC4KKworSW5hY3RpdmUgYnJhbmNoZXMgYXJlIHN0b3JlZCBpbiBhIHN0cnVjdHVyZSB3aGljaCB1c2VzIDk2IG9yIDEyMAorYnl0ZXMgKDMyIGJpdCBvciA2NCBiaXQgc3lzdGVtcywgcmVzcGVjdGl2ZWx5KSwgcGx1cyB0aGUgbGVuZ3RoIG9mCit0aGUgYnJhbmNoIG5hbWUgKHR5cGljYWxseSB1bmRlciAyMDAgYnl0ZXMpLCBwZXIgYnJhbmNoLiAgZmFzdC1pbXBvcnQgd2lsbAorZWFzaWx5IGhhbmRsZSBhcyBtYW55IGFzIDEwLDAwMCBpbmFjdGl2ZSBicmFuY2hlcyBpbiB1bmRlciAyIE1pQgorb2YgbWVtb3J5LgorCitBY3RpdmUgYnJhbmNoZXMgaGF2ZSB0aGUgc2FtZSBvdmVyaGVhZCBhcyBpbmFjdGl2ZSBicmFuY2hlcywgYnV0CithbHNvIGNvbnRhaW4gY29waWVzIG9mIGV2ZXJ5IHRyZWUgdGhhdCBoYXMgYmVlbiByZWNlbnRseSBtb2RpZmllZCBvbgordGhhdCBicmFuY2guICBJZiBzdWJ0cmVlIGBpbmNsdWRlYCBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlCiticmFuY2ggYmVjYW1lIGFjdGl2ZSwgaXRzIGNvbnRlbnRzIHdpbGwgbm90IGJlIGxvYWRlZCBpbnRvIG1lbW9yeSwKK2J1dCBpZiBzdWJ0cmVlIGBzcmNgIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGEgY29tbWl0IHNpbmNlIHRoZSBicmFuY2gKK2JlY2FtZSBhY3RpdmUsIHRoZW4gaXRzIGNvbnRlbnRzIHdpbGwgYmUgbG9hZGVkIGluIG1lbW9yeS4KKworQXMgYWN0aXZlIGJyYW5jaGVzIHN0b3JlIG1ldGFkYXRhIGFib3V0IHRoZSBmaWxlcyBjb250YWluZWQgb24gdGhhdAorYnJhbmNoLCB0aGVpciBpbi1tZW1vcnkgc3RvcmFnZSBzaXplIGNhbiBncm93IHRvIGEgY29uc2lkZXJhYmxlIHNpemUKKyhzZWUgYmVsb3cpLgorCitmYXN0LWltcG9ydCBhdXRvbWF0aWNhbGx5IG1vdmVzIGFjdGl2ZSBicmFuY2hlcyB0byBpbmFjdGl2ZSBzdGF0dXMgYmFzZWQgb24KK2Egc2ltcGxlIGxlYXN0LXJlY2VudGx5LXVzZWQgYWxnb3JpdGhtLiAgVGhlIExSVSBjaGFpbiBpcyB1cGRhdGVkIG9uCitlYWNoIGBjb21taXRgIGNvbW1hbmQuICBUaGUgbWF4aW11bSBudW1iZXIgb2YgYWN0aXZlIGJyYW5jaGVzIGNhbiBiZQoraW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggLS1hY3RpdmUtYnJhbmNoZXM9LgorCitwZXIgYWN0aXZlIHRyZWUKK35+fn5+fn5+fn5+fn5+fgorVHJlZXMgKGFrYSBkaXJlY3RvcmllcykgdXNlIGp1c3QgMTIgYnl0ZXMgb2YgbWVtb3J5IG9uIHRvcCBvZiB0aGUKK21lbW9yeSByZXF1aXJlZCBmb3IgdGhlaXIgZW50cmllcyAoc2VlIGBgcGVyIGFjdGl2ZSBmaWxlJycgYmVsb3cpLgorVGhlIGNvc3Qgb2YgYSB0cmVlIGlzIHZpcnR1YWxseSAwLCBhcyBpdHMgb3ZlcmhlYWQgYW1vcnRpemVzIG91dAorb3ZlciB0aGUgaW5kaXZpZHVhbCBmaWxlIGVudHJpZXMuCisKK3BlciBhY3RpdmUgZmlsZSBlbnRyeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+CitGaWxlcyAoYW5kIHBvaW50ZXJzIHRvIHN1YnRyZWVzKSB3aXRoaW4gYWN0aXZlIHRyZWVzIHJlcXVpcmUgNTIgb3IgNjQKK2J5dGVzICgzMi82NCBiaXQgcGxhdGZvcm1zKSBwZXIgZW50cnkuICBUbyBjb25zZXJ2ZSBzcGFjZSwgZmlsZSBhbmQKK3RyZWUgbmFtZXMgYXJlIHBvb2xlZCBpbiBhIGNvbW1vbiBzdHJpbmcgdGFibGUsIGFsbG93aW5nIHRoZSBmaWxlbmFtZQorYGBNYWtlZmlsZScnIHRvIHVzZSBqdXN0IDE2IGJ5dGVzIChhZnRlciBpbmNsdWRpbmcgdGhlIHN0cmluZyBoZWFkZXIKK292ZXJoZWFkKSBubyBtYXR0ZXIgaG93IG1hbnkgdGltZXMgaXQgb2NjdXJzIHdpdGhpbiB0aGUgcHJvamVjdC4KKworVGhlIGFjdGl2ZSBicmFuY2ggTFJVLCB3aGVuIGNvdXBsZWQgd2l0aCB0aGUgZmlsZW5hbWUgc3RyaW5nIHBvb2wKK2FuZCBsYXp5IGxvYWRpbmcgb2Ygc3VidHJlZXMsIGFsbG93cyBmYXN0LWltcG9ydCB0byBlZmZpY2llbnRseSBpbXBvcnQKK3Byb2plY3RzIHdpdGggMiwwMDArIGJyYW5jaGVzIGFuZCA0NSwxMTQrIGZpbGVzIGluIGEgdmVyeSBsaW1pdGVkCittZW1vcnkgZm9vdHByaW50IChsZXNzIHRoYW4gMi43IE1pQiBwZXIgYWN0aXZlIGJyYW5jaCkuCisKK1NpZ25hbHMKKy0tLS0tLS0KK1NlbmRpbmcgKlNJR1VTUjEqIHRvIHRoZSAnZ2l0IGZhc3QtaW1wb3J0JyBwcm9jZXNzIGVuZHMgdGhlIGN1cnJlbnQKK3BhY2tmaWxlIGVhcmx5LCBzaW11bGF0aW5nIGEgYGNoZWNrcG9pbnRgIGNvbW1hbmQuICBUaGUgaW1wYXRpZW50CitvcGVyYXRvciBjYW4gdXNlIHRoaXMgZmFjaWxpdHkgdG8gcGVlayBhdCB0aGUgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFuCitpbXBvcnQgaW4gcHJvZ3Jlc3MsIGF0IHRoZSBjb3N0IG9mIHNvbWUgYWRkZWQgcnVubmluZyB0aW1lIGFuZCB3b3JzZQorY29tcHJlc3Npb24uCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZmFzdC1leHBvcnRbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLXBhY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ODBmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC1wYWNrLnR4dApAQCAtMCwwICsxLDExNCBAQAorZ2l0LWZldGNoLXBhY2soMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mZXRjaC1wYWNrIC0gUmVjZWl2ZSBtaXNzaW5nIG9iamVjdHMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZmV0Y2gtcGFjaycgWy0tYWxsXSBbLS1xdWlldHwtcV0gWy0ta2VlcHwta10gWy0tdGhpbl0gWy0taW5jbHVkZS10YWddCisJWy0tdXBsb2FkLXBhY2s9PGdpdC11cGxvYWQtcGFjaz5dCisJWy0tZGVwdGg9PG4+XSBbLS1uby1wcm9ncmVzc10KKwlbLXZdIDxyZXBvc2l0b3J5PiBbPHJlZnM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1VzdWFsbHkgeW91IHdvdWxkIHdhbnQgdG8gdXNlICdnaXQgZmV0Y2gnLCB3aGljaCBpcyBhCitoaWdoZXIgbGV2ZWwgd3JhcHBlciBvZiB0aGlzIGNvbW1hbmQsIGluc3RlYWQuCisKK0ludm9rZXMgJ2dpdC11cGxvYWQtcGFjaycgb24gYSBwb3NzaWJseSByZW1vdGUgcmVwb3NpdG9yeQorYW5kIGFza3MgaXQgdG8gc2VuZCBvYmplY3RzIG1pc3NpbmcgZnJvbSB0aGlzIHJlcG9zaXRvcnksIHRvCit1cGRhdGUgdGhlIG5hbWVkIGhlYWRzLiAgVGhlIGxpc3Qgb2YgY29tbWl0cyBhdmFpbGFibGUgbG9jYWxseQoraXMgZm91bmQgb3V0IGJ5IHNjYW5uaW5nIHRoZSBsb2NhbCByZWZzLyBoaWVyYXJjaHkgYW5kIHNlbnQgdG8KKydnaXQtdXBsb2FkLXBhY2snIHJ1bm5pbmcgb24gdGhlIG90aGVyIGVuZC4KKworVGhpcyBjb21tYW5kIGRlZ2VuZXJhdGVzIHRvIGRvd25sb2FkIGV2ZXJ5dGhpbmcgdG8gY29tcGxldGUgdGhlCithc2tlZCByZWZzIGZyb20gdGhlIHJlbW90ZSBzaWRlIHdoZW4gdGhlIGxvY2FsIHNpZGUgZG9lcyBub3QKK2hhdmUgYSBjb21tb24gYW5jZXN0b3IgY29tbWl0LgorCisKK09QVElPTlMKKy0tLS0tLS0KKy0tYWxsOjoKKwlGZXRjaCBhbGwgcmVtb3RlIHJlZnMuCisKKy0tc3RkaW46OgorCVRha2UgdGhlIGxpc3Qgb2YgcmVmcyBmcm9tIHN0ZGluLCBvbmUgcGVyIGxpbmUuIElmIHRoZXJlCisJYXJlIHJlZnMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgaW4gYWRkaXRpb24gdG8gdGhpcworCW9wdGlvbiwgdGhlbiB0aGUgcmVmcyBmcm9tIHN0ZGluIGFyZSBwcm9jZXNzZWQgYWZ0ZXIgdGhvc2UKKwlvbiB0aGUgY29tbWFuZCBsaW5lLgorKworSWYgJy0tc3RhdGVsZXNzLXJwYycgaXMgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggdGhpcyBvcHRpb24gdGhlbgordGhlIGxpc3Qgb2YgcmVmcyBtdXN0IGJlIGluIHBhY2tldCBmb3JtYXQgKHBrdC1saW5lKS4gRWFjaCByZWYgbXVzdAorYmUgaW4gYSBzZXBhcmF0ZSBwYWNrZXQsIGFuZCB0aGUgbGlzdCBtdXN0IGVuZCB3aXRoIGEgZmx1c2ggcGFja2V0LgorCistcTo6CistLXF1aWV0OjoKKwlQYXNzICctcScgZmxhZyB0byAnZ2l0IHVucGFjay1vYmplY3RzJzsgdGhpcyBtYWtlcyB0aGUKKwljbG9uaW5nIHByb2Nlc3MgbGVzcyB2ZXJib3NlLgorCistazo6CistLWtlZXA6OgorCURvIG5vdCBpbnZva2UgJ2dpdCB1bnBhY2stb2JqZWN0cycgb24gcmVjZWl2ZWQgZGF0YSwgYnV0CisJY3JlYXRlIGEgc2luZ2xlIHBhY2tmaWxlIG91dCBvZiBpdCBpbnN0ZWFkLCBhbmQgc3RvcmUgaXQKKwlpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiBJZiBwcm92aWRlZCB0d2ljZSB0aGVuIHRoZSBwYWNrIGlzCisJbG9ja2VkIGFnYWluc3QgcmVwYWNraW5nLgorCistLXRoaW46OgorCUZldGNoIGEgInRoaW4iIHBhY2ssIHdoaWNoIHJlY29yZHMgb2JqZWN0cyBpbiBkZWx0aWZpZWQgZm9ybSBiYXNlZAorCW9uIG9iamVjdHMgbm90IGluY2x1ZGVkIGluIHRoZSBwYWNrIHRvIHJlZHVjZSBuZXR3b3JrIHRyYWZmaWMuCisKKy0taW5jbHVkZS10YWc6OgorCUlmIHRoZSByZW1vdGUgc2lkZSBzdXBwb3J0cyBpdCwgYW5ub3RhdGVkIHRhZ3Mgb2JqZWN0cyB3aWxsCisJYmUgZG93bmxvYWRlZCBvbiB0aGUgc2FtZSBjb25uZWN0aW9uIGFzIHRoZSBvdGhlciBvYmplY3RzIGlmCisJdGhlIG9iamVjdCB0aGUgdGFnIHJlZmVyZW5jZXMgaXMgZG93bmxvYWRlZC4gIFRoZSBjYWxsZXIgbXVzdAorCW90aGVyd2lzZSBkZXRlcm1pbmUgdGhlIHRhZ3MgdGhpcyBvcHRpb24gbWFkZSBhdmFpbGFibGUuCisKKy0tdXBsb2FkLXBhY2s9PGdpdC11cGxvYWQtcGFjaz46OgorCVVzZSB0aGlzIHRvIHNwZWNpZnkgdGhlIHBhdGggdG8gJ2dpdC11cGxvYWQtcGFjaycgb24gdGhlCisJcmVtb3RlIHNpZGUsIGlmIGlzIG5vdCBmb3VuZCBvbiB5b3VyICRQQVRILgorCUluc3RhbGxhdGlvbnMgb2Ygc3NoZCBpZ25vcmVzIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQKKwlzZXR1cCBzY3JpcHRzIGZvciBsb2dpbiBzaGVsbHMgKGUuZy4gLmJhc2hfcHJvZmlsZSkgYW5kCisJeW91ciBwcml2YXRlbHkgaW5zdGFsbGVkIGdpdCBtYXkgbm90IGJlIGZvdW5kIG9uIHRoZSBzeXN0ZW0KKwlkZWZhdWx0ICRQQVRILiAgQW5vdGhlciB3b3JrYXJvdW5kIHN1Z2dlc3RlZCBpcyB0byBzZXQKKwl1cCB5b3VyICRQQVRIIGluICIuYmFzaHJjIiwgYnV0IHRoaXMgZmxhZyBpcyBmb3IgcGVvcGxlCisJd2hvIGRvIG5vdCB3YW50IHRvIHBheSB0aGUgb3ZlcmhlYWQgZm9yIG5vbi1pbnRlcmFjdGl2ZQorCXNoZWxscyBieSBoYXZpbmcgYSBsZWFuIC5iYXNocmMgZmlsZSAodGhleSBzZXQgbW9zdCBvZgorCXRoZSB0aGluZ3MgdXAgaW4gLmJhc2hfcHJvZmlsZSkuCisKKy0tZXhlYz08Z2l0LXVwbG9hZC1wYWNrPjo6CisJU2FtZSBhcyAtLXVwbG9hZC1wYWNrPTxnaXQtdXBsb2FkLXBhY2s+LgorCistLWRlcHRoPTxuPjo6CisJTGltaXQgZmV0Y2hpbmcgdG8gYW5jZXN0b3ItY2hhaW5zIG5vdCBsb25nZXIgdGhhbiBuLgorCSdnaXQtdXBsb2FkLXBhY2snIHRyZWF0cyB0aGUgc3BlY2lhbCBkZXB0aCAyMTQ3NDgzNjQ3IGFzCisJaW5maW5pdGUgZXZlbiBpZiB0aGVyZSBpcyBhbiBhbmNlc3Rvci1jaGFpbiB0aGF0IGxvbmcuCisKKy0tbm8tcHJvZ3Jlc3M6OgorCURvIG5vdCBzaG93IHRoZSBwcm9ncmVzcy4KKworLS1jaGVjay1zZWxmLWNvbnRhaW5lZC1hbmQtY29ubmVjdGVkOjoKKwlPdXRwdXQgImNvbm5lY3Rpdml0eS1vayIgaWYgdGhlIHJlY2VpdmVkIHBhY2sgaXMKKwlzZWxmLWNvbnRhaW5lZCBhbmQgY29ubmVjdGVkLgorCistdjo6CisJUnVuIHZlcmJvc2VseS4KKworPHJlcG9zaXRvcnk+OjoKKwlUaGUgVVJMIHRvIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4KKworPHJlZnM+Li4uOjoKKwlUaGUgcmVtb3RlIGhlYWRzIHRvIHVwZGF0ZSBmcm9tLiBUaGlzIGlzIHJlbGF0aXZlIHRvCisJJEdJVF9ESVIgKGUuZy4gIkhFQUQiLCAicmVmcy9oZWFkcy9tYXN0ZXIiKS4gIFdoZW4KKwl1bnNwZWNpZmllZCwgdXBkYXRlIGZyb20gYWxsIGhlYWRzIHRoZSByZW1vdGUgc2lkZSBoYXMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZmV0Y2hbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mZXRjaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZlNTZlMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZldGNoLnR4dApAQCAtMCwwICsxLDE1OSBAQAorZ2l0LWZldGNoKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWZldGNoIC0gRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBmZXRjaCcgWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0KKydnaXQgZmV0Y2gnIFs8b3B0aW9ucz5dIDxncm91cD4KKydnaXQgZmV0Y2gnIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0KKydnaXQgZmV0Y2gnIC0tYWxsIFs8b3B0aW9ucz5dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitGZXRjaCBicmFuY2hlcyBhbmQvb3IgdGFncyAoY29sbGVjdGl2ZWx5LCAicmVmcyIpIGZyb20gb25lIG9yIG1vcmUKK290aGVyIHJlcG9zaXRvcmllcywgYWxvbmcgd2l0aCB0aGUgb2JqZWN0cyBuZWNlc3NhcnkgdG8gY29tcGxldGUgdGhlaXIKK2hpc3Rvcmllcy4gIFJlbW90ZS10cmFja2luZyBicmFuY2hlcyBhcmUgdXBkYXRlZCAoc2VlIHRoZSBkZXNjcmlwdGlvbgorb2YgPHJlZnNwZWM+IGJlbG93IGZvciB3YXlzIHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvcikuCisKK0J5IGRlZmF1bHQsIGFueSB0YWcgdGhhdCBwb2ludHMgaW50byB0aGUgaGlzdG9yaWVzIGJlaW5nIGZldGNoZWQgaXMKK2Fsc28gZmV0Y2hlZDsgdGhlIGVmZmVjdCBpcyB0byBmZXRjaCB0YWdzIHRoYXQKK3BvaW50IGF0IGJyYW5jaGVzIHRoYXQgeW91IGFyZSBpbnRlcmVzdGVkIGluLiAgVGhpcyBkZWZhdWx0IGJlaGF2aW9yCitjYW4gYmUgY2hhbmdlZCBieSB1c2luZyB0aGUgLS10YWdzIG9yIC0tbm8tdGFncyBvcHRpb25zIG9yIGJ5Citjb25maWd1cmluZyByZW1vdGUuPG5hbWU+LnRhZ09wdC4gIEJ5IHVzaW5nIGEgcmVmc3BlYyB0aGF0IGZldGNoZXMgdGFncworZXhwbGljaXRseSwgeW91IGNhbiBmZXRjaCB0YWdzIHRoYXQgZG8gbm90IHBvaW50IGludG8gYnJhbmNoZXMgeW91CithcmUgaW50ZXJlc3RlZCBpbiBhcyB3ZWxsLgorCisnZ2l0IGZldGNoJyBjYW4gZmV0Y2ggZnJvbSBlaXRoZXIgYSBzaW5nbGUgbmFtZWQgcmVwb3NpdG9yeSBvciBVUkwsCitvciBmcm9tIHNldmVyYWwgcmVwb3NpdG9yaWVzIGF0IG9uY2UgaWYgPGdyb3VwPiBpcyBnaXZlbiBhbmQKK3RoZXJlIGlzIGEgcmVtb3Rlcy48Z3JvdXA+IGVudHJ5IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisoU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKK1doZW4gbm8gcmVtb3RlIGlzIHNwZWNpZmllZCwgYnkgZGVmYXVsdCB0aGUgYG9yaWdpbmAgcmVtb3RlIHdpbGwgYmUgdXNlZCwKK3VubGVzcyB0aGVyZSdzIGFuIHVwc3RyZWFtIGJyYW5jaCBjb25maWd1cmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guCisKK1RoZSBuYW1lcyBvZiByZWZzIHRoYXQgYXJlIGZldGNoZWQsIHRvZ2V0aGVyIHdpdGggdGhlIG9iamVjdCBuYW1lcwordGhleSBwb2ludCBhdCwgYXJlIHdyaXR0ZW4gdG8gYC5naXQvRkVUQ0hfSEVBRGAuICBUaGlzIGluZm9ybWF0aW9uCittYXkgYmUgdXNlZCBieSBzY3JpcHRzIG9yIG90aGVyIGdpdCBjb21tYW5kcywgc3VjaCBhcyBsaW5rZ2l0OmdpdC1wdWxsWzFdLgorCitPUFRJT05TCistLS0tLS0tCitpbmNsdWRlOjpmZXRjaC1vcHRpb25zLnR4dFtdCisKK2luY2x1ZGU6OnB1bGwtZmV0Y2gtcGFyYW0udHh0W10KKworaW5jbHVkZTo6dXJscy1yZW1vdGVzLnR4dFtdCisKKworQ09ORklHVVJFRCBSRU1PVEUtVFJBQ0tJTkcgQlJBTkNIRVNbW0NSVEJdXQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3Ugb2Z0ZW4gaW50ZXJhY3Qgd2l0aCB0aGUgc2FtZSByZW1vdGUgcmVwb3NpdG9yeSBieQorcmVndWxhcmx5IGFuZCByZXBlYXRlZGx5IGZldGNoaW5nIGZyb20gaXQuICBJbiBvcmRlciB0byBrZWVwIHRyYWNrCitvZiB0aGUgcHJvZ3Jlc3Mgb2Ygc3VjaCBhIHJlbW90ZSByZXBvc2l0b3J5LCBgZ2l0IGZldGNoYCBhbGxvd3MgeW91Cit0byBjb25maWd1cmUgYHJlbW90ZS48cmVwb3NpdG9yeT4uZmV0Y2hgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLgorCitUeXBpY2FsbHkgc3VjaCBhIHZhcmlhYmxlIG1heSBsb29rIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbcmVtb3RlICJvcmlnaW4iXQorCWZldGNoID0gK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNvbmZpZ3VyYXRpb24gaXMgdXNlZCBpbiB0d28gd2F5czoKKworKiBXaGVuIGBnaXQgZmV0Y2hgIGlzIHJ1biB3aXRob3V0IHNwZWNpZnlpbmcgd2hhdCBicmFuY2hlcworICBhbmQvb3IgdGFncyB0byBmZXRjaCBvbiB0aGUgY29tbWFuZCBsaW5lLCBlLmcuIGBnaXQgZmV0Y2ggb3JpZ2luYAorICBvciBgZ2l0IGZldGNoYCwgYHJlbW90ZS48cmVwb3NpdG9yeT4uZmV0Y2hgIHZhbHVlcyBhcmUgdXNlZCBhcworICB0aGUgcmVmc3BlY3MtLXRoZXkgc3BlY2lmeSB3aGljaCByZWZzIHRvIGZldGNoIGFuZCB3aGljaCBsb2NhbCByZWZzCisgIHRvIHVwZGF0ZS4gIFRoZSBleGFtcGxlIGFib3ZlIHdpbGwgZmV0Y2gKKyAgYWxsIGJyYW5jaGVzIHRoYXQgZXhpc3QgaW4gdGhlIGBvcmlnaW5gIChpLmUuIGFueSByZWYgdGhhdCBtYXRjaGVzCisgIHRoZSBsZWZ0LWhhbmQgc2lkZSBvZiB0aGUgdmFsdWUsIGByZWZzL2hlYWRzLypgKSBhbmQgdXBkYXRlIHRoZQorICBjb3JyZXNwb25kaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBpbiB0aGUgYHJlZnMvcmVtb3Rlcy9vcmlnaW4vKmAKKyAgaGllcmFyY2h5LgorCisqIFdoZW4gYGdpdCBmZXRjaGAgaXMgcnVuIHdpdGggZXhwbGljaXQgYnJhbmNoZXMgYW5kL29yIHRhZ3MKKyAgdG8gZmV0Y2ggb24gdGhlIGNvbW1hbmQgbGluZSwgZS5nLiBgZ2l0IGZldGNoIG9yaWdpbiBtYXN0ZXJgLCB0aGUKKyAgPHJlZnNwZWM+cyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGRldGVybWluZSB3aGF0IGFyZSB0byBiZQorICBmZXRjaGVkIChlLmcuIGBtYXN0ZXJgIGluIHRoZSBleGFtcGxlLAorICB3aGljaCBpcyBhIHNob3J0LWhhbmQgZm9yIGBtYXN0ZXI6YCwgd2hpY2ggaW4gdHVybiBtZWFucworICAiZmV0Y2ggdGhlICdtYXN0ZXInIGJyYW5jaCBidXQgSSBkbyBub3QgZXhwbGljaXRseSBzYXkgd2hhdAorICByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHRvIHVwZGF0ZSB3aXRoIGl0IGZyb20gdGhlIGNvbW1hbmQgbGluZSIpLAorICBhbmQgdGhlIGV4YW1wbGUgY29tbWFuZCB3aWxsCisgIGZldGNoIF9vbmx5XyB0aGUgJ21hc3RlcicgYnJhbmNoLiAgVGhlIGByZW1vdGUuPHJlcG9zaXRvcnk+LmZldGNoYAorICB2YWx1ZXMgZGV0ZXJtaW5lIHdoaWNoCisgIHJlbW90ZS10cmFja2luZyBicmFuY2gsIGlmIGFueSwgaXMgdXBkYXRlZC4gIFdoZW4gdXNlZCBpbiB0aGlzCisgIHdheSwgdGhlIGByZW1vdGUuPHJlcG9zaXRvcnk+LmZldGNoYCB2YWx1ZXMgZG8gbm90IGhhdmUgYW55CisgIGVmZmVjdCBpbiBkZWNpZGluZyBfd2hhdF8gZ2V0cyBmZXRjaGVkIChpLmUuIHRoZSB2YWx1ZXMgYXJlIG5vdAorICB1c2VkIGFzIHJlZnNwZWNzIHdoZW4gdGhlIGNvbW1hbmQtbGluZSBsaXN0cyByZWZzcGVjcyk7IHRoZXkgYXJlCisgIG9ubHkgdXNlZCB0byBkZWNpZGUgX3doZXJlXyB0aGUgcmVmcyB0aGF0IGFyZSBmZXRjaGVkIGFyZSBzdG9yZWQKKyAgYnkgYWN0aW5nIGFzIGEgbWFwcGluZy4KKworVGhlIGxhdHRlciB1c2Ugb2YgdGhlIGByZW1vdGUuPHJlcG9zaXRvcnk+LmZldGNoYCB2YWx1ZXMgY2FuIGJlCitvdmVycmlkZGVuIGJ5IGdpdmluZyB0aGUgYC0tcmVmbWFwPTxyZWZzcGVjPmAgcGFyYW1ldGVyKHMpIG9uIHRoZQorY29tbWFuZCBsaW5lLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIFVwZGF0ZSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBvcmlnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhlIGFib3ZlIGNvbW1hbmQgY29waWVzIGFsbCBicmFuY2hlcyBmcm9tIHRoZSByZW1vdGUgcmVmcy9oZWFkcy8KK25hbWVzcGFjZSBhbmQgc3RvcmVzIHRoZW0gdG8gdGhlIGxvY2FsIHJlZnMvcmVtb3Rlcy9vcmlnaW4vIG5hbWVzcGFjZSwKK3VubGVzcyB0aGUgYnJhbmNoLjxuYW1lPi5mZXRjaCBvcHRpb24gaXMgdXNlZCB0byBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQKK3JlZnNwZWMuCisKKyogVXNpbmcgcmVmc3BlY3MgZXhwbGljaXRseToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggb3JpZ2luICtwdTpwdSBtYWludDp0bXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhpcyB1cGRhdGVzIChvciBjcmVhdGVzLCBhcyBuZWNlc3NhcnkpIGJyYW5jaGVzIGBwdWAgYW5kIGB0bXBgIGluCit0aGUgbG9jYWwgcmVwb3NpdG9yeSBieSBmZXRjaGluZyBmcm9tIHRoZSBicmFuY2hlcyAocmVzcGVjdGl2ZWx5KQorYHB1YCBhbmQgYG1haW50YCBmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4KKysKK1RoZSBgcHVgIGJyYW5jaCB3aWxsIGJlIHVwZGF0ZWQgZXZlbiBpZiBpdCBpcyBkb2VzIG5vdCBmYXN0LWZvcndhcmQsCitiZWNhdXNlIGl0IGlzIHByZWZpeGVkIHdpdGggYSBwbHVzIHNpZ247IGB0bXBgIHdpbGwgbm90IGJlLgorCisqIFBlZWsgYXQgYSByZW1vdGUncyBicmFuY2gsIHdpdGhvdXQgY29uZmlndXJpbmcgdGhlIHJlbW90ZSBpbiB5b3VyIGxvY2FsCityZXBvc2l0b3J5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0IG1haW50CiskIGdpdCBsb2cgRkVUQ0hfSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGUgZmlyc3QgY29tbWFuZCBmZXRjaGVzIHRoZSBgbWFpbnRgIGJyYW5jaCBmcm9tIHRoZSByZXBvc2l0b3J5IGF0CitgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdGAgYW5kIHRoZSBzZWNvbmQgY29tbWFuZCB1c2VzCitgRkVUQ0hfSEVBRGAgdG8gZXhhbWluZSB0aGUgYnJhbmNoIHdpdGggbGlua2dpdDpnaXQtbG9nWzFdLiAgVGhlIGZldGNoZWQKK29iamVjdHMgd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQgYnkgZ2l0J3MgYnVpbHQtaW4gaG91c2VrZWVwaW5nIChzZWUKK2xpbmtnaXQ6Z2l0LWdjWzFdKS4KKworQlVHUworLS0tLQorVXNpbmcgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgY2FuIG9ubHkgZmV0Y2ggbmV3IGNvbW1pdHMgaW4gYWxyZWFkeSBjaGVja2VkCitvdXQgc3VibW9kdWxlcyByaWdodCBub3cuIFdoZW4gZS5nLiB1cHN0cmVhbSBhZGRlZCBhIG5ldyBzdWJtb2R1bGUgaW4gdGhlCitqdXN0IGZldGNoZWQgY29tbWl0cyBvZiB0aGUgc3VwZXJwcm9qZWN0IHRoZSBzdWJtb2R1bGUgaXRzZWxmIGNhbiBub3QgYmUKK2ZldGNoZWQsIG1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGNoZWNrIG91dCB0aGF0IHN1Ym1vZHVsZSBsYXRlciB3aXRob3V0CitoYXZpbmcgdG8gZG8gYSBmZXRjaCBhZ2Fpbi4gVGhpcyBpcyBleHBlY3RlZCB0byBiZSBmaXhlZCBpbiBhIGZ1dHVyZSBHaXQKK3ZlcnNpb24uCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcHVsbFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZmlsdGVyLWJyYW5jaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNmZDllOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWZpbHRlci1icmFuY2gudHh0CkBAIC0wLDAgKzEsNDY1IEBACitnaXQtZmlsdGVyLWJyYW5jaCgxKQorPT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWZpbHRlci1icmFuY2ggLSBSZXdyaXRlIGJyYW5jaGVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBmaWx0ZXItYnJhbmNoJyBbLS1lbnYtZmlsdGVyIDxjb21tYW5kPl0gWy0tdHJlZS1maWx0ZXIgPGNvbW1hbmQ+XQorCVstLWluZGV4LWZpbHRlciA8Y29tbWFuZD5dIFstLXBhcmVudC1maWx0ZXIgPGNvbW1hbmQ+XQorCVstLW1zZy1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1jb21taXQtZmlsdGVyIDxjb21tYW5kPl0KKwlbLS10YWctbmFtZS1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1zdWJkaXJlY3RvcnktZmlsdGVyIDxkaXJlY3Rvcnk+XQorCVstLXBydW5lLWVtcHR5XQorCVstLW9yaWdpbmFsIDxuYW1lc3BhY2U+XSBbLWQgPGRpcmVjdG9yeT5dIFstZiB8IC0tZm9yY2VdCisJWy0tXSBbPHJldi1saXN0IG9wdGlvbnM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0xldHMgeW91IHJld3JpdGUgR2l0IHJldmlzaW9uIGhpc3RvcnkgYnkgcmV3cml0aW5nIHRoZSBicmFuY2hlcyBtZW50aW9uZWQKK2luIHRoZSA8cmV2LWxpc3Qgb3B0aW9ucz4sIGFwcGx5aW5nIGN1c3RvbSBmaWx0ZXJzIG9uIGVhY2ggcmV2aXNpb24uCitUaG9zZSBmaWx0ZXJzIGNhbiBtb2RpZnkgZWFjaCB0cmVlIChlLmcuIHJlbW92aW5nIGEgZmlsZSBvciBydW5uaW5nCithIHBlcmwgcmV3cml0ZSBvbiBhbGwgZmlsZXMpIG9yIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggY29tbWl0LgorT3RoZXJ3aXNlLCBhbGwgaW5mb3JtYXRpb24gKGluY2x1ZGluZyBvcmlnaW5hbCBjb21taXQgdGltZXMgb3IgbWVyZ2UKK2luZm9ybWF0aW9uKSB3aWxsIGJlIHByZXNlcnZlZC4KKworVGhlIGNvbW1hbmQgd2lsbCBvbmx5IHJld3JpdGUgdGhlIF9wb3NpdGl2ZV8gcmVmcyBtZW50aW9uZWQgaW4gdGhlCitjb21tYW5kIGxpbmUgKGUuZy4gaWYgeW91IHBhc3MgJ2EuLmInLCBvbmx5ICdiJyB3aWxsIGJlIHJld3JpdHRlbikuCitJZiB5b3Ugc3BlY2lmeSBubyBmaWx0ZXJzLCB0aGUgY29tbWl0cyB3aWxsIGJlIHJlY29tbWl0dGVkIHdpdGhvdXQgYW55CitjaGFuZ2VzLCB3aGljaCB3b3VsZCBub3JtYWxseSBoYXZlIG5vIGVmZmVjdC4gIE5ldmVydGhlbGVzcywgdGhpcyBtYXkgYmUKK3VzZWZ1bCBpbiB0aGUgZnV0dXJlIGZvciBjb21wZW5zYXRpbmcgZm9yIHNvbWUgR2l0IGJ1Z3Mgb3Igc3VjaCwKK3RoZXJlZm9yZSBzdWNoIGEgdXNhZ2UgaXMgcGVybWl0dGVkLgorCisqTk9URSo6IFRoaXMgY29tbWFuZCBob25vcnMgYC5naXQvaW5mby9ncmFmdHNgIGZpbGUgYW5kIHJlZnMgaW4KK3RoZSBgcmVmcy9yZXBsYWNlL2AgbmFtZXNwYWNlLgorSWYgeW91IGhhdmUgYW55IGdyYWZ0cyBvciByZXBsYWNlbWVudCByZWZzIGRlZmluZWQsIHJ1bm5pbmcgdGhpcyBjb21tYW5kCit3aWxsIG1ha2UgdGhlbSBwZXJtYW5lbnQuCisKKypXQVJOSU5HKiEgVGhlIHJld3JpdHRlbiBoaXN0b3J5IHdpbGwgaGF2ZSBkaWZmZXJlbnQgb2JqZWN0IG5hbWVzIGZvciBhbGwKK3RoZSBvYmplY3RzIGFuZCB3aWxsIG5vdCBjb252ZXJnZSB3aXRoIHRoZSBvcmlnaW5hbCBicmFuY2guICBZb3Ugd2lsbCBub3QKK2JlIGFibGUgdG8gZWFzaWx5IHB1c2ggYW5kIGRpc3RyaWJ1dGUgdGhlIHJld3JpdHRlbiBicmFuY2ggb24gdG9wIG9mIHRoZQorb3JpZ2luYWwgYnJhbmNoLiAgUGxlYXNlIGRvIG5vdCB1c2UgdGhpcyBjb21tYW5kIGlmIHlvdSBkbyBub3Qga25vdyB0aGUKK2Z1bGwgaW1wbGljYXRpb25zLCBhbmQgYXZvaWQgdXNpbmcgaXQgYW55d2F5LCBpZiBhIHNpbXBsZSBzaW5nbGUgY29tbWl0Cit3b3VsZCBzdWZmaWNlIHRvIGZpeCB5b3VyIHByb2JsZW0uICAoU2VlIHRoZSAiUkVDT1ZFUklORyBGUk9NIFVQU1RSRUFNCitSRUJBU0UiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXQtcmViYXNlWzFdIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0CityZXdyaXRpbmcgcHVibGlzaGVkIGhpc3RvcnkuKQorCitBbHdheXMgdmVyaWZ5IHRoYXQgdGhlIHJld3JpdHRlbiB2ZXJzaW9uIGlzIGNvcnJlY3Q6IFRoZSBvcmlnaW5hbCByZWZzLAoraWYgZGlmZmVyZW50IGZyb20gdGhlIHJld3JpdHRlbiBvbmVzLCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgbmFtZXNwYWNlCisncmVmcy9vcmlnaW5hbC8nLgorCitOb3RlIHRoYXQgc2luY2UgdGhpcyBvcGVyYXRpb24gaXMgdmVyeSBJL08gZXhwZW5zaXZlLCBpdCBtaWdodAorYmUgYSBnb29kIGlkZWEgdG8gcmVkaXJlY3QgdGhlIHRlbXBvcmFyeSBkaXJlY3Rvcnkgb2ZmLWRpc2sgd2l0aCB0aGUKKyctZCcgb3B0aW9uLCBlLmcuIG9uIHRtcGZzLiAgUmVwb3J0ZWRseSB0aGUgc3BlZWR1cCBpcyB2ZXJ5IG5vdGljZWFibGUuCisKKworRmlsdGVycworfn5+fn5+fgorCitUaGUgZmlsdGVycyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgYXMgbGlzdGVkIGJlbG93LiAgVGhlIDxjb21tYW5kPgorYXJndW1lbnQgaXMgYWx3YXlzIGV2YWx1YXRlZCBpbiB0aGUgc2hlbGwgY29udGV4dCB1c2luZyB0aGUgJ2V2YWwnIGNvbW1hbmQKKyh3aXRoIHRoZSBub3RhYmxlIGV4Y2VwdGlvbiBvZiB0aGUgY29tbWl0IGZpbHRlciwgZm9yIHRlY2huaWNhbCByZWFzb25zKS4KK1ByaW9yIHRvIHRoYXQsIHRoZSAkR0lUX0NPTU1JVCBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byBjb250YWluCit0aGUgaWQgb2YgdGhlIGNvbW1pdCBiZWluZyByZXdyaXR0ZW4uICBBbHNvLCBHSVRfQVVUSE9SX05BTUUsCitHSVRfQVVUSE9SX0VNQUlMLCBHSVRfQVVUSE9SX0RBVEUsIEdJVF9DT01NSVRURVJfTkFNRSwgR0lUX0NPTU1JVFRFUl9FTUFJTCwKK2FuZCBHSVRfQ09NTUlUVEVSX0RBVEUgYXJlIHRha2VuIGZyb20gdGhlIGN1cnJlbnQgY29tbWl0IGFuZCBleHBvcnRlZCB0bwordGhlIGVudmlyb25tZW50LCBpbiBvcmRlciB0byBhZmZlY3QgdGhlIGF1dGhvciBhbmQgY29tbWl0dGVyIGlkZW50aXRpZXMgb2YKK3RoZSByZXBsYWNlbWVudCBjb21taXQgY3JlYXRlZCBieSBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXSBhZnRlciB0aGUKK2ZpbHRlcnMgaGF2ZSBydW4uCisKK0lmIGFueSBldmFsdWF0aW9uIG9mIDxjb21tYW5kPiByZXR1cm5zIGEgbm9uLXplcm8gZXhpdCBzdGF0dXMsIHRoZSB3aG9sZQorb3BlcmF0aW9uIHdpbGwgYmUgYWJvcnRlZC4KKworQSAnbWFwJyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgdGhhdCB0YWtlcyBhbiAib3JpZ2luYWwgc2hhMSBpZCIgYXJndW1lbnQKK2FuZCBvdXRwdXRzIGEgInJld3JpdHRlbiBzaGExIGlkIiBpZiB0aGUgY29tbWl0IGhhcyBiZWVuIGFscmVhZHkKK3Jld3JpdHRlbiwgYW5kICJvcmlnaW5hbCBzaGExIGlkIiBvdGhlcndpc2U7IHRoZSAnbWFwJyBmdW5jdGlvbiBjYW4KK3JldHVybiBzZXZlcmFsIGlkcyBvbiBzZXBhcmF0ZSBsaW5lcyBpZiB5b3VyIGNvbW1pdCBmaWx0ZXIgZW1pdHRlZAorbXVsdGlwbGUgY29tbWl0cy4KKworCitPUFRJT05TCistLS0tLS0tCisKKy0tZW52LWZpbHRlciA8Y29tbWFuZD46OgorCVRoaXMgZmlsdGVyIG1heSBiZSB1c2VkIGlmIHlvdSBvbmx5IG5lZWQgdG8gbW9kaWZ5IHRoZSBlbnZpcm9ubWVudAorCWluIHdoaWNoIHRoZSBjb21taXQgd2lsbCBiZSBwZXJmb3JtZWQuICBTcGVjaWZpY2FsbHksIHlvdSBtaWdodAorCXdhbnQgdG8gcmV3cml0ZSB0aGUgYXV0aG9yL2NvbW1pdHRlciBuYW1lL2VtYWlsL3RpbWUgZW52aXJvbm1lbnQKKwl2YXJpYWJsZXMgKHNlZSBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXSBmb3IgZGV0YWlscykuICBEbyBub3QgZm9yZ2V0CisJdG8gcmUtZXhwb3J0IHRoZSB2YXJpYWJsZXMuCisKKy0tdHJlZS1maWx0ZXIgPGNvbW1hbmQ+OjoKKwlUaGlzIGlzIHRoZSBmaWx0ZXIgZm9yIHJld3JpdGluZyB0aGUgdHJlZSBhbmQgaXRzIGNvbnRlbnRzLgorCVRoZSBhcmd1bWVudCBpcyBldmFsdWF0ZWQgaW4gc2hlbGwgd2l0aCB0aGUgd29ya2luZworCWRpcmVjdG9yeSBzZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIGNoZWNrZWQgb3V0IHRyZWUuICBUaGUgbmV3IHRyZWUKKwlpcyB0aGVuIHVzZWQgYXMtaXMgKG5ldyBmaWxlcyBhcmUgYXV0by1hZGRlZCwgZGlzYXBwZWFyZWQgZmlsZXMKKwlhcmUgYXV0by1yZW1vdmVkIC0gbmVpdGhlciAuZ2l0aWdub3JlIGZpbGVzIG5vciBhbnkgb3RoZXIgaWdub3JlCisJcnVsZXMgKkhBVkUgQU5ZIEVGRkVDVCohKS4KKworLS1pbmRleC1maWx0ZXIgPGNvbW1hbmQ+OjoKKwlUaGlzIGlzIHRoZSBmaWx0ZXIgZm9yIHJld3JpdGluZyB0aGUgaW5kZXguICBJdCBpcyBzaW1pbGFyIHRvIHRoZQorCXRyZWUgZmlsdGVyIGJ1dCBkb2VzIG5vdCBjaGVjayBvdXQgdGhlIHRyZWUsIHdoaWNoIG1ha2VzIGl0IG11Y2gKKwlmYXN0ZXIuICBGcmVxdWVudGx5IHVzZWQgd2l0aCBgZ2l0IHJtIC0tY2FjaGVkCisJLS1pZ25vcmUtdW5tYXRjaCAuLi5gLCBzZWUgRVhBTVBMRVMgYmVsb3cuICBGb3IgaGFpcnkKKwljYXNlcywgc2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXS4KKworLS1wYXJlbnQtZmlsdGVyIDxjb21tYW5kPjo6CisJVGhpcyBpcyB0aGUgZmlsdGVyIGZvciByZXdyaXRpbmcgdGhlIGNvbW1pdCdzIHBhcmVudCBsaXN0LgorCUl0IHdpbGwgcmVjZWl2ZSB0aGUgcGFyZW50IHN0cmluZyBvbiBzdGRpbiBhbmQgc2hhbGwgb3V0cHV0CisJdGhlIG5ldyBwYXJlbnQgc3RyaW5nIG9uIHN0ZG91dC4gIFRoZSBwYXJlbnQgc3RyaW5nIGlzIGluCisJdGhlIGZvcm1hdCBkZXNjcmliZWQgaW4gbGlua2dpdDpnaXQtY29tbWl0LXRyZWVbMV06IGVtcHR5IGZvcgorCXRoZSBpbml0aWFsIGNvbW1pdCwgIi1wIHBhcmVudCIgZm9yIGEgbm9ybWFsIGNvbW1pdCBhbmQKKwkiLXAgcGFyZW50MSAtcCBwYXJlbnQyIC1wIHBhcmVudDMgLi4uIiBmb3IgYSBtZXJnZSBjb21taXQuCisKKy0tbXNnLWZpbHRlciA8Y29tbWFuZD46OgorCVRoaXMgaXMgdGhlIGZpbHRlciBmb3IgcmV3cml0aW5nIHRoZSBjb21taXQgbWVzc2FnZXMuCisJVGhlIGFyZ3VtZW50IGlzIGV2YWx1YXRlZCBpbiB0aGUgc2hlbGwgd2l0aCB0aGUgb3JpZ2luYWwKKwljb21taXQgbWVzc2FnZSBvbiBzdGFuZGFyZCBpbnB1dDsgaXRzIHN0YW5kYXJkIG91dHB1dCBpcworCXVzZWQgYXMgdGhlIG5ldyBjb21taXQgbWVzc2FnZS4KKworLS1jb21taXQtZmlsdGVyIDxjb21tYW5kPjo6CisJVGhpcyBpcyB0aGUgZmlsdGVyIGZvciBwZXJmb3JtaW5nIHRoZSBjb21taXQuCisJSWYgdGhpcyBmaWx0ZXIgaXMgc3BlY2lmaWVkLCBpdCB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZQorCSdnaXQgY29tbWl0LXRyZWUnIGNvbW1hbmQsIHdpdGggYXJndW1lbnRzIG9mIHRoZSBmb3JtCisJIjxUUkVFX0lEPiBbKC1wIDxQQVJFTlRfQ09NTUlUX0lEPikuLi5dIiBhbmQgdGhlIGxvZyBtZXNzYWdlIG9uCisJc3RkaW4uICBUaGUgY29tbWl0IGlkIGlzIGV4cGVjdGVkIG9uIHN0ZG91dC4KKysKK0FzIGEgc3BlY2lhbCBleHRlbnNpb24sIHRoZSBjb21taXQgZmlsdGVyIG1heSBlbWl0IG11bHRpcGxlCitjb21taXQgaWRzOyBpbiB0aGF0IGNhc2UsIHRoZSByZXdyaXR0ZW4gY2hpbGRyZW4gb2YgdGhlIG9yaWdpbmFsIGNvbW1pdCB3aWxsCitoYXZlIGFsbCBvZiB0aGVtIGFzIHBhcmVudHMuCisrCitZb3UgY2FuIHVzZSB0aGUgJ21hcCcgY29udmVuaWVuY2UgZnVuY3Rpb24gaW4gdGhpcyBmaWx0ZXIsIGFuZCBvdGhlcgorY29udmVuaWVuY2UgZnVuY3Rpb25zLCB0b28uICBGb3IgZXhhbXBsZSwgY2FsbGluZyAnc2tpcF9jb21taXQgIiRAIicKK3dpbGwgbGVhdmUgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCAoYnV0IG5vdCBpdHMgY2hhbmdlcyEgSWYgeW91IHdhbnQKK3RoYXQsIHVzZSAnZ2l0IHJlYmFzZScgaW5zdGVhZCkuCisrCitZb3UgY2FuIGFsc28gdXNlIHRoZSBgZ2l0X2NvbW1pdF9ub25fZW1wdHlfdHJlZSAiJEAiYCBpbnN0ZWFkIG9mCitgZ2l0IGNvbW1pdC10cmVlICIkQCJgIGlmIHlvdSBkb24ndCB3aXNoIHRvIGtlZXAgY29tbWl0cyB3aXRoIGEgc2luZ2xlIHBhcmVudAorYW5kIHRoYXQgbWFrZXMgbm8gY2hhbmdlIHRvIHRoZSB0cmVlLgorCistLXRhZy1uYW1lLWZpbHRlciA8Y29tbWFuZD46OgorCVRoaXMgaXMgdGhlIGZpbHRlciBmb3IgcmV3cml0aW5nIHRhZyBuYW1lcy4gV2hlbiBwYXNzZWQsCisJaXQgd2lsbCBiZSBjYWxsZWQgZm9yIGV2ZXJ5IHRhZyByZWYgdGhhdCBwb2ludHMgdG8gYSByZXdyaXR0ZW4KKwlvYmplY3QgKG9yIHRvIGEgdGFnIG9iamVjdCB3aGljaCBwb2ludHMgdG8gYSByZXdyaXR0ZW4gb2JqZWN0KS4KKwlUaGUgb3JpZ2luYWwgdGFnIG5hbWUgaXMgcGFzc2VkIHZpYSBzdGFuZGFyZCBpbnB1dCwgYW5kIHRoZSBuZXcKKwl0YWcgbmFtZSBpcyBleHBlY3RlZCBvbiBzdGFuZGFyZCBvdXRwdXQuCisrCitUaGUgb3JpZ2luYWwgdGFncyBhcmUgbm90IGRlbGV0ZWQsIGJ1dCBjYW4gYmUgb3ZlcndyaXR0ZW47Cit1c2UgIi0tdGFnLW5hbWUtZmlsdGVyIGNhdCIgdG8gc2ltcGx5IHVwZGF0ZSB0aGUgdGFncy4gIEluIHRoaXMKK2Nhc2UsIGJlIHZlcnkgY2FyZWZ1bCBhbmQgbWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBvbGQgdGFncworYmFja2VkIHVwIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gaGFzIHJ1biBhZm91bC4KKysKK05lYXJseSBwcm9wZXIgcmV3cml0aW5nIG9mIHRhZyBvYmplY3RzIGlzIHN1cHBvcnRlZC4gSWYgdGhlIHRhZyBoYXMKK2EgbWVzc2FnZSBhdHRhY2hlZCwgYSBuZXcgdGFnIG9iamVjdCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGUgc2FtZSBtZXNzYWdlLAorYXV0aG9yLCBhbmQgdGltZXN0YW1wLiBJZiB0aGUgdGFnIGhhcyBhIHNpZ25hdHVyZSBhdHRhY2hlZCwgdGhlCitzaWduYXR1cmUgd2lsbCBiZSBzdHJpcHBlZC4gSXQgaXMgYnkgZGVmaW5pdGlvbiBpbXBvc3NpYmxlIHRvIHByZXNlcnZlCitzaWduYXR1cmVzLiBUaGUgcmVhc29uIHRoaXMgaXMgIm5lYXJseSIgcHJvcGVyLCBpcyBiZWNhdXNlIGlkZWFsbHkgaWYKK3RoZSB0YWcgZGlkIG5vdCBjaGFuZ2UgKHBvaW50cyB0byB0aGUgc2FtZSBvYmplY3QsIGhhcyB0aGUgc2FtZSBuYW1lLCBldGMuKQoraXQgc2hvdWxkIHJldGFpbiBhbnkgc2lnbmF0dXJlLiBUaGF0IGlzIG5vdCB0aGUgY2FzZSwgc2lnbmF0dXJlcyB3aWxsIGFsd2F5cworYmUgcmVtb3ZlZCwgYnV5ZXIgYmV3YXJlLiBUaGVyZSBpcyBhbHNvIG5vIHN1cHBvcnQgZm9yIGNoYW5naW5nIHRoZQorYXV0aG9yIG9yIHRpbWVzdGFtcCAob3IgdGhlIHRhZyBtZXNzYWdlIGZvciB0aGF0IG1hdHRlcikuIFRhZ3Mgd2hpY2ggcG9pbnQKK3RvIG90aGVyIHRhZ3Mgd2lsbCBiZSByZXdyaXR0ZW4gdG8gcG9pbnQgdG8gdGhlIHVuZGVybHlpbmcgY29tbWl0LgorCistLXN1YmRpcmVjdG9yeS1maWx0ZXIgPGRpcmVjdG9yeT46OgorCU9ubHkgbG9vayBhdCB0aGUgaGlzdG9yeSB3aGljaCB0b3VjaGVzIHRoZSBnaXZlbiBzdWJkaXJlY3RvcnkuCisJVGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gdGhhdCBkaXJlY3RvcnkgKGFuZCBvbmx5IHRoYXQpIGFzIGl0cworCXByb2plY3Qgcm9vdC4gSW1wbGllcyA8PFJlbWFwX3RvX2FuY2VzdG9yPj4uCisKKy0tcHJ1bmUtZW1wdHk6OgorCVNvbWUga2luZCBvZiBmaWx0ZXJzIHdpbGwgZ2VuZXJhdGUgZW1wdHkgY29tbWl0cywgdGhhdCBsZWZ0IHRoZSB0cmVlCisJdW50b3VjaGVkLiAgVGhpcyBzd2l0Y2ggYWxsb3cgZ2l0LWZpbHRlci1icmFuY2ggdG8gaWdub3JlIHN1Y2gKKwljb21taXRzLiAgVGhvdWdoLCB0aGlzIHN3aXRjaCBvbmx5IGFwcGxpZXMgZm9yIGNvbW1pdHMgdGhhdCBoYXZlIG9uZQorCWFuZCBvbmx5IG9uZSBwYXJlbnQsIGl0IHdpbGwgaGVuY2Uga2VlcCBtZXJnZXMgcG9pbnRzLiBBbHNvLCB0aGlzCisJb3B0aW9uIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHVzZSBvZiAnLS1jb21taXQtZmlsdGVyJy4gVGhvdWdoIHlvdQorCWp1c3QgbmVlZCB0byB1c2UgdGhlIGZ1bmN0aW9uICdnaXRfY29tbWl0X25vbl9lbXB0eV90cmVlICIkQCInIGluc3RlYWQKKwlvZiB0aGUgYGdpdCBjb21taXQtdHJlZSAiJEAiYCBpZGlvbSBpbiB5b3VyIGNvbW1pdCBmaWx0ZXIgdG8gbWFrZSB0aGF0CisJaGFwcGVuLgorCistLW9yaWdpbmFsIDxuYW1lc3BhY2U+OjoKKwlVc2UgdGhpcyBvcHRpb24gdG8gc2V0IHRoZSBuYW1lc3BhY2Ugd2hlcmUgdGhlIG9yaWdpbmFsIGNvbW1pdHMKKwl3aWxsIGJlIHN0b3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgJ3JlZnMvb3JpZ2luYWwnLgorCistZCA8ZGlyZWN0b3J5Pjo6CisJVXNlIHRoaXMgb3B0aW9uIHRvIHNldCB0aGUgcGF0aCB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSB1c2VkIGZvcgorCXJld3JpdGluZy4gIFdoZW4gYXBwbHlpbmcgYSB0cmVlIGZpbHRlciwgdGhlIGNvbW1hbmQgbmVlZHMgdG8KKwl0ZW1wb3JhcmlseSBjaGVjayBvdXQgdGhlIHRyZWUgdG8gc29tZSBkaXJlY3RvcnksIHdoaWNoIG1heSBjb25zdW1lCisJY29uc2lkZXJhYmxlIHNwYWNlIGluIGNhc2Ugb2YgbGFyZ2UgcHJvamVjdHMuICBCeSBkZWZhdWx0IGl0CisJZG9lcyB0aGlzIGluIHRoZSAnLmdpdC1yZXdyaXRlLycgZGlyZWN0b3J5IGJ1dCB5b3UgY2FuIG92ZXJyaWRlCisJdGhhdCBjaG9pY2UgYnkgdGhpcyBwYXJhbWV0ZXIuCisKKy1mOjoKKy0tZm9yY2U6OgorCSdnaXQgZmlsdGVyLWJyYW5jaCcgcmVmdXNlcyB0byBzdGFydCB3aXRoIGFuIGV4aXN0aW5nIHRlbXBvcmFyeQorCWRpcmVjdG9yeSBvciB3aGVuIHRoZXJlIGFyZSBhbHJlYWR5IHJlZnMgc3RhcnRpbmcgd2l0aAorCSdyZWZzL29yaWdpbmFsLycsIHVubGVzcyBmb3JjZWQuCisKKzxyZXYtbGlzdCBvcHRpb25zPi4uLjo6CisJQXJndW1lbnRzIGZvciAnZ2l0IHJldi1saXN0Jy4gIEFsbCBwb3NpdGl2ZSByZWZzIGluY2x1ZGVkIGJ5CisJdGhlc2Ugb3B0aW9ucyBhcmUgcmV3cml0dGVuLiAgWW91IG1heSBhbHNvIHNwZWNpZnkgb3B0aW9ucworCXN1Y2ggYXMgJy0tYWxsJywgYnV0IHlvdSBtdXN0IHVzZSAnLS0nIHRvIHNlcGFyYXRlIHRoZW0gZnJvbQorCXRoZSAnZ2l0IGZpbHRlci1icmFuY2gnIG9wdGlvbnMuIEltcGxpZXMgPDxSZW1hcF90b19hbmNlc3Rvcj4+LgorCisKK1tbUmVtYXBfdG9fYW5jZXN0b3JdXQorUmVtYXAgdG8gYW5jZXN0b3IKK35+fn5+fn5+fn5+fn5+fn5+CisKK0J5IHVzaW5nIGxpbmtnaXQ6cmV2LWxpc3RbMV0gYXJndW1lbnRzLCBlLmcuLCBwYXRoIGxpbWl0ZXJzLCB5b3UgY2FuIGxpbWl0IHRoZQorc2V0IG9mIHJldmlzaW9ucyB3aGljaCBnZXQgcmV3cml0dGVuLiBIb3dldmVyLCBwb3NpdGl2ZSByZWZzIG9uIHRoZSBjb21tYW5kCitsaW5lIGFyZSBkaXN0aW5ndWlzaGVkOiB3ZSBkb24ndCBsZXQgdGhlbSBiZSBleGNsdWRlZCBieSBzdWNoIGxpbWl0ZXJzLiBGb3IKK3RoaXMgcHVycG9zZSwgdGhleSBhcmUgaW5zdGVhZCByZXdyaXR0ZW4gdG8gcG9pbnQgYXQgdGhlIG5lYXJlc3QgYW5jZXN0b3IgdGhhdAord2FzIG5vdCBleGNsdWRlZC4KKworCitFeGFtcGxlcworLS0tLS0tLS0KKworU3VwcG9zZSB5b3Ugd2FudCB0byByZW1vdmUgYSBmaWxlIChjb250YWluaW5nIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbgorb3IgY29weXJpZ2h0IHZpb2xhdGlvbikgZnJvbSBhbGwgY29tbWl0czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS10cmVlLWZpbHRlciAncm0gZmlsZW5hbWUnIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSG93ZXZlciwgaWYgdGhlIGZpbGUgaXMgYWJzZW50IGZyb20gdGhlIHRyZWUgb2Ygc29tZSBjb21taXQsCithIHNpbXBsZSBgcm0gZmlsZW5hbWVgIHdpbGwgZmFpbCBmb3IgdGhhdCB0cmVlIGFuZCBjb21taXQuCitUaHVzIHlvdSBtYXkgaW5zdGVhZCB3YW50IHRvIHVzZSBgcm0gLWYgZmlsZW5hbWVgIGFzIHRoZSBzY3JpcHQuCisKK1VzaW5nIGAtLWluZGV4LWZpbHRlcmAgd2l0aCAnZ2l0IHJtJyB5aWVsZHMgYSBzaWduaWZpY2FudGx5IGZhc3RlcgordmVyc2lvbi4gIExpa2Ugd2l0aCB1c2luZyBgcm0gZmlsZW5hbWVgLCBgZ2l0IHJtIC0tY2FjaGVkIGZpbGVuYW1lYAord2lsbCBmYWlsIGlmIHRoZSBmaWxlIGlzIGFic2VudCBmcm9tIHRoZSB0cmVlIG9mIGEgY29tbWl0LiAgSWYgeW91Cit3YW50IHRvICJjb21wbGV0ZWx5IGZvcmdldCIgYSBmaWxlLCBpdCBkb2VzIG5vdCBtYXR0ZXIgd2hlbiBpdCBlbnRlcmVkCitoaXN0b3J5LCBzbyB3ZSBhbHNvIGFkZCBgLS1pZ25vcmUtdW5tYXRjaGA6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgZmlsdGVyLWJyYW5jaCAtLWluZGV4LWZpbHRlciAnZ2l0IHJtIC0tY2FjaGVkIC0taWdub3JlLXVubWF0Y2ggZmlsZW5hbWUnIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdywgeW91IHdpbGwgZ2V0IHRoZSByZXdyaXR0ZW4gaGlzdG9yeSBzYXZlZCBpbiBIRUFELgorCitUbyByZXdyaXRlIHRoZSByZXBvc2l0b3J5IHRvIGxvb2sgYXMgaWYgYGZvb2Rpci9gIGhhZCBiZWVuIGl0cyBwcm9qZWN0Cityb290LCBhbmQgZGlzY2FyZCBhbGwgb3RoZXIgaGlzdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS1zdWJkaXJlY3RvcnktZmlsdGVyIGZvb2RpciAtLSAtLWFsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaHVzIHlvdSBjYW4sIGUuZy4sIHR1cm4gYSBsaWJyYXJ5IHN1YmRpcmVjdG9yeSBpbnRvIGEgcmVwb3NpdG9yeSBvZgoraXRzIG93bi4gIE5vdGUgdGhlIGAtLWAgdGhhdCBzZXBhcmF0ZXMgJ2ZpbHRlci1icmFuY2gnIG9wdGlvbnMgZnJvbQorcmV2aXNpb24gb3B0aW9ucywgYW5kIHRoZSBgLS1hbGxgIHRvIHJld3JpdGUgYWxsIGJyYW5jaGVzIGFuZCB0YWdzLgorCitUbyBzZXQgYSBjb21taXQgKHdoaWNoIHR5cGljYWxseSBpcyBhdCB0aGUgdGlwIG9mIGFub3RoZXIKK2hpc3RvcnkpIHRvIGJlIHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgaW5pdGlhbCBjb21taXQsIGluCitvcmRlciB0byBwYXN0ZSB0aGUgb3RoZXIgaGlzdG9yeSBiZWhpbmQgdGhlIGN1cnJlbnQgaGlzdG9yeToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS1wYXJlbnQtZmlsdGVyICdzZWQgInMvXlwkLy1wIDxncmFmdC1pZD4vIicgSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoaWYgdGhlIHBhcmVudCBzdHJpbmcgaXMgZW1wdHkgLSB3aGljaCBoYXBwZW5zIHdoZW4gd2UgYXJlIGRlYWxpbmcgd2l0aAordGhlIGluaXRpYWwgY29tbWl0IC0gYWRkIGdyYWZ0Y29tbWl0IGFzIGEgcGFyZW50KS4gIE5vdGUgdGhhdCB0aGlzIGFzc3VtZXMKK2hpc3Rvcnkgd2l0aCBhIHNpbmdsZSByb290ICh0aGF0IGlzLCBubyBtZXJnZSB3aXRob3V0IGNvbW1vbiBhbmNlc3RvcnMKK2hhcHBlbmVkKS4gIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCB1c2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgZmlsdGVyLWJyYW5jaCAtLXBhcmVudC1maWx0ZXIgXAorCSd0ZXN0ICRHSVRfQ09NTUlUID0gPGNvbW1pdC1pZD4gJiYgZWNobyAiLXAgPGdyYWZ0LWlkPiIgfHwgY2F0JyBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciBldmVuIHNpbXBsZXI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlY2hvICIkY29tbWl0LWlkICRncmFmdC1pZCIgPj4gLmdpdC9pbmZvL2dyYWZ0cworZ2l0IGZpbHRlci1icmFuY2ggJGdyYWZ0LWlkLi5IRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZW1vdmUgY29tbWl0cyBhdXRob3JlZCBieSAiRGFybCBNY0JyaWJlIiBmcm9tIHRoZSBoaXN0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmaWx0ZXItYnJhbmNoIC0tY29tbWl0LWZpbHRlciAnCisJaWYgWyAiJEdJVF9BVVRIT1JfTkFNRSIgPSAiRGFybCBNY0JyaWJlIiBdOworCXRoZW4KKwkJc2tpcF9jb21taXQgIiRAIjsKKwllbHNlCisJCWdpdCBjb21taXQtdHJlZSAiJEAiOworCWZpJyBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZ1bmN0aW9uICdza2lwX2NvbW1pdCcgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2tpcF9jb21taXQoKQoreworCXNoaWZ0OworCXdoaWxlIFsgLW4gIiQxIiBdOworCWRvCisJCXNoaWZ0OworCQltYXAgIiQxIjsKKwkJc2hpZnQ7CisJZG9uZTsKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzaGlmdCBtYWdpYyBmaXJzdCB0aHJvd3MgYXdheSB0aGUgdHJlZSBpZCBhbmQgdGhlbiB0aGUgLXAKK3BhcmFtZXRlcnMuICBOb3RlIHRoYXQgdGhpcyBoYW5kbGVzIG1lcmdlcyBwcm9wZXJseSEgSW4gY2FzZSBEYXJsCitjb21taXR0ZWQgYSBtZXJnZSBiZXR3ZWVuIFAxIGFuZCBQMiwgaXQgd2lsbCBiZSBwcm9wYWdhdGVkIHByb3Blcmx5CithbmQgYWxsIGNoaWxkcmVuIG9mIHRoZSBtZXJnZSB3aWxsIGJlY29tZSBtZXJnZSBjb21taXRzIHdpdGggUDEsUDIKK2FzIHRoZWlyIHBhcmVudHMgaW5zdGVhZCBvZiB0aGUgbWVyZ2UgY29tbWl0LgorCisqTk9URSogdGhlIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGUgY29tbWl0cywgYW5kIHdoaWNoIGFyZSBub3QgcmV2ZXJ0ZWQKK2J5IHN1YnNlcXVlbnQgY29tbWl0cywgd2lsbCBzdGlsbCBiZSBpbiB0aGUgcmV3cml0dGVuIGJyYW5jaC4gSWYgeW91IHdhbnQKK3RvIHRocm93IG91dCBfY2hhbmdlc18gdG9nZXRoZXIgd2l0aCB0aGUgY29tbWl0cywgeW91IHNob3VsZCB1c2UgdGhlCitpbnRlcmFjdGl2ZSBtb2RlIG9mICdnaXQgcmViYXNlJy4KKworWW91IGNhbiByZXdyaXRlIHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzIHVzaW5nIGAtLW1zZy1maWx0ZXJgLiAgRm9yCitleGFtcGxlLCAnZ2l0IHN2bi1pZCcgc3RyaW5ncyBpbiBhIHJlcG9zaXRvcnkgY3JlYXRlZCBieSAnZ2l0IHN2bicgY2FuCitiZSByZW1vdmVkIHRoaXMgd2F5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgZmlsdGVyLWJyYW5jaCAtLW1zZy1maWx0ZXIgJworCXNlZCAtZSAiL15naXQtc3ZuLWlkOi9kIgorJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgbmVlZCB0byBhZGQgJ0Fja2VkLWJ5JyBsaW5lcyB0bywgc2F5LCB0aGUgbGFzdCAxMCBjb21taXRzIChub25lCitvZiB3aGljaCBpcyBhIG1lcmdlKSwgdXNlIHRoaXMgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmaWx0ZXItYnJhbmNoIC0tbXNnLWZpbHRlciAnCisJY2F0ICYmCisJZWNobyAiQWNrZWQtYnk6IEJ1Z3MgQnVubnkgPGJ1bm55QGJ1Z3ppbGxhLm9yZz4iCisnIEhFQUR+MTAuLkhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgLS1lbnYtZmlsdGVyYCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IGNvbW1pdHRlciBhbmQvb3IgYXV0aG9yCitpZGVudGl0eS4gIEZvciBleGFtcGxlLCBpZiB5b3UgZm91bmQgb3V0IHRoYXQgeW91ciBjb21taXRzIGhhdmUgdGhlIHdyb25nCitpZGVudGl0eSBkdWUgdG8gYSBtaXNjb25maWd1cmVkIHVzZXIuZW1haWwsIHlvdSBjYW4gbWFrZSBhIGNvcnJlY3Rpb24sCitiZWZvcmUgcHVibGlzaGluZyB0aGUgcHJvamVjdCwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGZpbHRlci1icmFuY2ggLS1lbnYtZmlsdGVyICcKKwlpZiB0ZXN0ICIkR0lUX0FVVEhPUl9FTUFJTCIgPSAicm9vdEBsb2NhbGhvc3QiCisJdGhlbgorCQlHSVRfQVVUSE9SX0VNQUlMPWpvaG5AZXhhbXBsZS5jb20KKwkJZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKKwlmaQorCWlmIHRlc3QgIiRHSVRfQ09NTUlUVEVSX0VNQUlMIiA9ICJyb290QGxvY2FsaG9zdCIKKwl0aGVuCisJCUdJVF9DT01NSVRURVJfRU1BSUw9am9obkBleGFtcGxlLmNvbQorCQlleHBvcnQgR0lUX0NPTU1JVFRFUl9FTUFJTAorCWZpCisnIC0tIC0tYWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZXN0cmljdCByZXdyaXRpbmcgdG8gb25seSBwYXJ0IG9mIHRoZSBoaXN0b3J5LCBzcGVjaWZ5IGEgcmV2aXNpb24KK3JhbmdlIGluIGFkZGl0aW9uIHRvIHRoZSBuZXcgYnJhbmNoIG5hbWUuICBUaGUgbmV3IGJyYW5jaCBuYW1lIHdpbGwKK3BvaW50IHRvIHRoZSB0b3AtbW9zdCByZXZpc2lvbiB0aGF0IGEgJ2dpdCByZXYtbGlzdCcgb2YgdGhpcyByYW5nZQord2lsbCBwcmludC4KKworQ29uc2lkZXIgdGhpcyBoaXN0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgRC0tRS0tRi0tRy0tSAorICAgIC8gICAgIC8KK0EtLUItLS0tLUMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyByZXdyaXRlIG9ubHkgY29tbWl0cyBELEUsRixHLEgsIGJ1dCBsZWF2ZSBBLCBCIGFuZCBDIGFsb25lLCB1c2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgZmlsdGVyLWJyYW5jaCAuLi4gQy4uSAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gcmV3cml0ZSBjb21taXRzIEUsRixHLEgsIHVzZSBvbmUgb2YgdGhlc2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmaWx0ZXItYnJhbmNoIC4uLiBDLi5IIC0tbm90IEQKK2dpdCBmaWx0ZXItYnJhbmNoIC4uLiBELi5IIC0tbm90IEMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gbW92ZSB0aGUgd2hvbGUgdHJlZSBpbnRvIGEgc3ViZGlyZWN0b3J5LCBvciByZW1vdmUgaXQgZnJvbSB0aGVyZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgZmlsdGVyLWJyYW5jaCAtLWluZGV4LWZpbHRlciBcCisJJ2dpdCBscy1maWxlcyAtcyB8IHNlZCAicy1cdFwiKi0mbmV3c3ViZGlyLy0iIHwKKwkJR0lUX0lOREVYX0ZJTEU9JEdJVF9JTkRFWF9GSUxFLm5ldyBcCisJCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCSBtdiAiJEdJVF9JTkRFWF9GSUxFLm5ldyIgIiRHSVRfSU5ERVhfRklMRSInIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKworQ2hlY2tsaXN0IGZvciBTaHJpbmtpbmcgYSBSZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2l0LWZpbHRlci1icmFuY2ggY2FuIGJlIHVzZWQgdG8gZ2V0IHJpZCBvZiBhIHN1YnNldCBvZiBmaWxlcywKK3VzdWFsbHkgd2l0aCBzb21lIGNvbWJpbmF0aW9uIG9mIGAtLWluZGV4LWZpbHRlcmAgYW5kCitgLS1zdWJkaXJlY3RvcnktZmlsdGVyYC4gIFBlb3BsZSBleHBlY3QgdGhlIHJlc3VsdGluZyByZXBvc2l0b3J5IHRvCitiZSBzbWFsbGVyIHRoYW4gdGhlIG9yaWdpbmFsLCBidXQgeW91IG5lZWQgYSBmZXcgbW9yZSBzdGVwcyB0bworYWN0dWFsbHkgbWFrZSBpdCBzbWFsbGVyLCBiZWNhdXNlIEdpdCB0cmllcyBoYXJkIG5vdCB0byBsb3NlIHlvdXIKK29iamVjdHMgdW50aWwgeW91IHRlbGwgaXQgdG8uICBGaXJzdCBtYWtlIHN1cmUgdGhhdDoKKworKiBZb3UgcmVhbGx5IHJlbW92ZWQgYWxsIHZhcmlhbnRzIG9mIGEgZmlsZW5hbWUsIGlmIGEgYmxvYiB3YXMgbW92ZWQKKyAgb3ZlciBpdHMgbGlmZXRpbWUuICBgZ2l0IGxvZyAtLW5hbWUtb25seSAtLWZvbGxvdyAtLWFsbCAtLSBmaWxlbmFtZWAKKyAgY2FuIGhlbHAgeW91IGZpbmQgcmVuYW1lcy4KKworKiBZb3UgcmVhbGx5IGZpbHRlcmVkIGFsbCByZWZzOiB1c2UgYC0tdGFnLW5hbWUtZmlsdGVyIGNhdCAtLSAtLWFsbGAKKyAgd2hlbiBjYWxsaW5nIGdpdC1maWx0ZXItYnJhbmNoLgorCitUaGVuIHRoZXJlIGFyZSB0d28gd2F5cyB0byBnZXQgYSBzbWFsbGVyIHJlcG9zaXRvcnkuICBBIHNhZmVyIHdheSBpcwordG8gY2xvbmUsIHRoYXQga2VlcHMgeW91ciBvcmlnaW5hbCBpbnRhY3QuCisKKyogQ2xvbmUgaXQgd2l0aCBgZ2l0IGNsb25lIGZpbGU6Ly8vcGF0aC90by9yZXBvYC4gIFRoZSBjbG9uZQorICB3aWxsIG5vdCBoYXZlIHRoZSByZW1vdmVkIG9iamVjdHMuICBTZWUgbGlua2dpdDpnaXQtY2xvbmVbMV0uICAoTm90ZQorICB0aGF0IGNsb25pbmcgd2l0aCBhIHBsYWluIHBhdGgganVzdCBoYXJkbGlua3MgZXZlcnl0aGluZyEpCisKK0lmIHlvdSByZWFsbHkgZG9uJ3Qgd2FudCB0byBjbG9uZSBpdCwgZm9yIHdoYXRldmVyIHJlYXNvbnMsIGNoZWNrIHRoZQorZm9sbG93aW5nIHBvaW50cyBpbnN0ZWFkIChpbiB0aGlzIG9yZGVyKS4gIFRoaXMgaXMgYSB2ZXJ5IGRlc3RydWN0aXZlCithcHByb2FjaCwgc28gKm1ha2UgYSBiYWNrdXAqIG9yIGdvIGJhY2sgdG8gY2xvbmluZyBpdC4gIFlvdSBoYXZlIGJlZW4KK3dhcm5lZC4KKworKiBSZW1vdmUgdGhlIG9yaWdpbmFsIHJlZnMgYmFja2VkIHVwIGJ5IGdpdC1maWx0ZXItYnJhbmNoOiBzYXkgYGdpdAorICBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIHJlZnMvb3JpZ2luYWwvIHwgeGFyZ3MgLW4gMSBnaXQKKyAgdXBkYXRlLXJlZiAtZGAuCisKKyogRXhwaXJlIGFsbCByZWZsb2dzIHdpdGggYGdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAtLWFsbGAuCisKKyogR2FyYmFnZSBjb2xsZWN0IGFsbCB1bnJlZmVyZW5jZWQgb2JqZWN0cyB3aXRoIGBnaXQgZ2MgLS1wcnVuZT1ub3dgCisgIChvciBpZiB5b3VyIGdpdC1nYyBpcyBub3QgbmV3IGVub3VnaCB0byBzdXBwb3J0IGFyZ3VtZW50cyB0bworICBgLS1wcnVuZWAsIHVzZSBgZ2l0IHJlcGFjayAtYWQ7IGdpdCBwcnVuZWAgaW5zdGVhZCkuCisKK05vdGVzCistLS0tLQorCitnaXQtZmlsdGVyLWJyYW5jaCBhbGxvd3MgeW91IHRvIG1ha2UgY29tcGxleCBzaGVsbC1zY3JpcHRlZCByZXdyaXRlcworb2YgeW91ciBHaXQgaGlzdG9yeSwgYnV0IHlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRoaXMgZmxleGliaWxpdHkgaWYKK3lvdSdyZSBzaW1wbHkgX3JlbW92aW5nIHVud2FudGVkIGRhdGFfIGxpa2UgbGFyZ2UgZmlsZXMgb3IgcGFzc3dvcmRzLgorRm9yIHRob3NlIG9wZXJhdGlvbnMgeW91IG1heSB3YW50IHRvIGNvbnNpZGVyCitodHRwOi8vcnR5bGV5LmdpdGh1Yi5pby9iZmctcmVwby1jbGVhbmVyL1tUaGUgQkZHIFJlcG8tQ2xlYW5lcl0sCithIEpWTS1iYXNlZCBhbHRlcm5hdGl2ZSB0byBnaXQtZmlsdGVyLWJyYW5jaCwgdHlwaWNhbGx5IGF0IGxlYXN0CisxMC01MHggZmFzdGVyIGZvciB0aG9zZSB1c2UtY2FzZXMsIGFuZCB3aXRoIHF1aXRlIGRpZmZlcmVudAorY2hhcmFjdGVyaXN0aWNzOgorCisqIEFueSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgYSBmaWxlIGlzIGNsZWFuZWQgZXhhY3RseSBfb25jZV8uIFRoZSBCRkcsCisgIHVubGlrZSBnaXQtZmlsdGVyLWJyYW5jaCwgZG9lcyBub3QgZ2l2ZSB5b3UgdGhlIG9wcG9ydHVuaXR5IHRvCisgIGhhbmRsZSBhIGZpbGUgZGlmZmVyZW50bHkgYmFzZWQgb24gd2hlcmUgb3Igd2hlbiBpdCB3YXMgY29tbWl0dGVkCisgIHdpdGhpbiB5b3VyIGhpc3RvcnkuIFRoaXMgY29uc3RyYWludCBnaXZlcyB0aGUgY29yZSBwZXJmb3JtYW5jZQorICBiZW5lZml0IG9mIFRoZSBCRkcsIGFuZCBpcyB3ZWxsLXN1aXRlZCB0byB0aGUgdGFzayBvZiBjbGVhbnNpbmcgYmFkCisgIGRhdGEgLSB5b3UgZG9uJ3QgY2FyZSBfd2hlcmVfIHRoZSBiYWQgZGF0YSBpcywgeW91IGp1c3Qgd2FudCBpdAorICBfZ29uZV8uCisKKyogQnkgZGVmYXVsdCBUaGUgQkZHIHRha2VzIGZ1bGwgYWR2YW50YWdlIG9mIG11bHRpLWNvcmUgbWFjaGluZXMsCisgIGNsZWFuc2luZyBjb21taXQgZmlsZS10cmVlcyBpbiBwYXJhbGxlbC4gZ2l0LWZpbHRlci1icmFuY2ggY2xlYW5zCisgIGNvbW1pdHMgc2VxdWVudGlhbGx5IChpLmUuIGluIGEgc2luZ2xlLXRocmVhZGVkIG1hbm5lciksIHRob3VnaCBpdAorICBfaXNfIHBvc3NpYmxlIHRvIHdyaXRlIGZpbHRlcnMgdGhhdCBpbmNsdWRlIHRoZWlyIG93biBwYXJhbGxlbGlzbSwKKyAgaW4gdGhlIHNjcmlwdHMgZXhlY3V0ZWQgYWdhaW5zdCBlYWNoIGNvbW1pdC4KKworKiBUaGUgaHR0cDovL3J0eWxleS5naXRodWIuaW8vYmZnLXJlcG8tY2xlYW5lci8jZXhhbXBsZXNbY29tbWFuZCBvcHRpb25zXQorICBhcmUgbXVjaCBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gZ2l0LWZpbHRlciBicmFuY2gsIGFuZCBkZWRpY2F0ZWQganVzdAorICB0byB0aGUgdGFza3Mgb2YgcmVtb3ZpbmcgdW53YW50ZWQgZGF0YS0gZS5nOgorICBgLS1zdHJpcC1ibG9icy1iaWdnZXItdGhhbiAxTWAuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZm10LW1lcmdlLW1zZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mbXQtbWVyZ2UtbXNnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTI2YjE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm10LW1lcmdlLW1zZy50eHQKQEAgLTAsMCArMSw3OCBAQAorZ2l0LWZtdC1tZXJnZS1tc2coMSkKKz09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mbXQtbWVyZ2UtbXNnIC0gUHJvZHVjZSBhIG1lcmdlIGNvbW1pdCBtZXNzYWdlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGZtdC1tZXJnZS1tc2cnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXQorJ2dpdCBmbXQtbWVyZ2UtbXNnJyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gLUYgPGZpbGU+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGFrZXMgdGhlIGxpc3Qgb2YgbWVyZ2VkIG9iamVjdHMgb24gc3RkaW4gYW5kIHByb2R1Y2VzIGEgc3VpdGFibGUKK2NvbW1pdCBtZXNzYWdlIHRvIGJlIHVzZWQgZm9yIHRoZSBtZXJnZSBjb21taXQsIHVzdWFsbHkgdG8gYmUKK3Bhc3NlZCBhcyB0aGUgJzxtZXJnZS1tZXNzYWdlPicgYXJndW1lbnQgb2YgJ2dpdCBtZXJnZScuCisKK1RoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBtb3N0bHkgZm9yIGludGVybmFsIHVzZSBieSBzY3JpcHRzCithdXRvbWF0aWNhbGx5IGludm9raW5nICdnaXQgbWVyZ2UnLgorCitPUFRJT05TCistLS0tLS0tCisKKy0tbG9nWz08bj5dOjoKKwlJbiBhZGRpdGlvbiB0byBicmFuY2ggbmFtZXMsIHBvcHVsYXRlIHRoZSBsb2cgbWVzc2FnZSB3aXRoCisJb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gdGhlIGFjdHVhbCBjb21taXRzIHRoYXQgYXJlIGJlaW5nCisJbWVyZ2VkLiAgQXQgbW9zdCA8bj4gY29tbWl0cyBmcm9tIGVhY2ggbWVyZ2UgcGFyZW50IHdpbGwgYmUKKwl1c2VkICgyMCBpZiA8bj4gaXMgb21pdHRlZCkuICBUaGlzIG92ZXJyaWRlcyB0aGUgYG1lcmdlLmxvZ2AKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCistLW5vLWxvZzo6CisJRG8gbm90IGxpc3Qgb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gdGhlIGFjdHVhbCBjb21taXRzIGJlaW5nCisJbWVyZ2VkLgorCistLVtuby1dc3VtbWFyeTo6CisJU3lub255bXMgdG8gLS1sb2cgYW5kIC0tbm8tbG9nOyB0aGVzZSBhcmUgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZQorCXJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KKworLW0gPG1lc3NhZ2U+OjoKKy0tbWVzc2FnZSA8bWVzc2FnZT46OgorCVVzZSA8bWVzc2FnZT4gaW5zdGVhZCBvZiB0aGUgYnJhbmNoIG5hbWVzIGZvciB0aGUgZmlyc3QgbGluZQorCW9mIHRoZSBsb2cgbWVzc2FnZS4gIEZvciB1c2Ugd2l0aCBgLS1sb2dgLgorCistRiA8ZmlsZT46OgorLS1maWxlIDxmaWxlPjo6CisJVGFrZSB0aGUgbGlzdCBvZiBtZXJnZWQgb2JqZWN0cyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mCisJc3RkaW4uCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KK2luY2x1ZGU6OmZtdC1tZXJnZS1tc2ctY29uZmlnLnR4dFtdCisKK21lcmdlLnN1bW1hcnk6OgorCVN5bm9ueW0gdG8gYG1lcmdlLmxvZ2A7IHRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluCisJdGhlIGZ1dHVyZS4KKworRVhBTVBMRQorLS0tLS0tLQorCistLQorJCBnaXQgZmV0Y2ggb3JpZ2luIG1hc3RlcgorJCBnaXQgZm10LW1lcmdlLW1zZyAtLWxvZyA8JEdJVF9ESVIvRkVUQ0hfSEVBRAorLS0KKworUHJpbnQgYSBsb2cgbWVzc2FnZSBkZXNjcmliaW5nIGEgbWVyZ2Ugb2YgdGhlICJtYXN0ZXIiIGJyYW5jaCBmcm9tCit0aGUgIm9yaWdpbiIgcmVtb3RlLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtbWVyZ2VbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3ItZWFjaC1yZWYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZm9yLWVhY2gtcmVmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmYwNzNjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9yLWVhY2gtcmVmLnR4dApAQCAtMCwwICsxLDI2NCBAQAorZ2l0LWZvci1lYWNoLXJlZigxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZm9yLWVhY2gtcmVmIC0gT3V0cHV0IGluZm9ybWF0aW9uIG9uIGVhY2ggcmVmCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBmb3ItZWFjaC1yZWYnIFstLWNvdW50PTxjb3VudD5dIFstLXNoZWxsfC0tcGVybHwtLXB5dGhvbnwtLXRjbF0KKwkJICAgWygtLXNvcnQ9PGtleT4pLi4uXSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFs8cGF0dGVybj4uLi5dCisJCSAgIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0gWygtLW1lcmdlZCB8IC0tbm8tbWVyZ2VkKSBbPG9iamVjdD5dXQorCQkgICBbLS1jb250YWlucyBbPG9iamVjdD5dXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworSXRlcmF0ZSBvdmVyIGFsbCByZWZzIHRoYXQgbWF0Y2ggYDxwYXR0ZXJuPmAgYW5kIHNob3cgdGhlbQorYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBgPGZvcm1hdD5gLCBhZnRlciBzb3J0aW5nIHRoZW0gYWNjb3JkaW5nCit0byB0aGUgZ2l2ZW4gc2V0IG9mIGA8a2V5PmAuICBJZiBgPGNvdW50PmAgaXMgZ2l2ZW4sIHN0b3AgYWZ0ZXIKK3Nob3dpbmcgdGhhdCBtYW55IHJlZnMuICBUaGUgaW50ZXJwb2xhdGVkIHZhbHVlcyBpbiBgPGZvcm1hdD5gCitjYW4gb3B0aW9uYWxseSBiZSBxdW90ZWQgYXMgc3RyaW5nIGxpdGVyYWxzIGluIHRoZSBzcGVjaWZpZWQKK2hvc3QgbGFuZ3VhZ2UgYWxsb3dpbmcgdGhlaXIgZGlyZWN0IGV2YWx1YXRpb24gaW4gdGhhdCBsYW5ndWFnZS4KKworT1BUSU9OUworLS0tLS0tLQorPGNvdW50Pjo6CisJQnkgZGVmYXVsdCB0aGUgY29tbWFuZCBzaG93cyBhbGwgcmVmcyB0aGF0IG1hdGNoCisJYDxwYXR0ZXJuPmAuICBUaGlzIG9wdGlvbiBtYWtlcyBpdCBzdG9wIGFmdGVyIHNob3dpbmcKKwl0aGF0IG1hbnkgcmVmcy4KKworPGtleT46OgorCUEgZmllbGQgbmFtZSB0byBzb3J0IG9uLiAgUHJlZml4IGAtYCB0byBzb3J0IGluCisJZGVzY2VuZGluZyBvcmRlciBvZiB0aGUgdmFsdWUuICBXaGVuIHVuc3BlY2lmaWVkLAorCWByZWZuYW1lYCBpcyB1c2VkLiAgWW91IG1heSB1c2UgdGhlIC0tc29ydD08a2V5PiBvcHRpb24KKwltdWx0aXBsZSB0aW1lcywgaW4gd2hpY2ggY2FzZSB0aGUgbGFzdCBrZXkgYmVjb21lcyB0aGUgcHJpbWFyeQorCWtleS4KKworPGZvcm1hdD46OgorCUEgc3RyaW5nIHRoYXQgaW50ZXJwb2xhdGVzIGAlKGZpZWxkbmFtZSlgIGZyb20gdGhlCisJb2JqZWN0IHBvaW50ZWQgYXQgYnkgYSByZWYgYmVpbmcgc2hvd24uICBJZiBgZmllbGRuYW1lYAorCWlzIHByZWZpeGVkIHdpdGggYW4gYXN0ZXJpc2sgKGAqYCkgYW5kIHRoZSByZWYgcG9pbnRzCisJYXQgYSB0YWcgb2JqZWN0LCB0aGUgdmFsdWUgZm9yIHRoZSBmaWVsZCBpbiB0aGUgb2JqZWN0CisJdGFnIHJlZmVycyBpcyB1c2VkLiAgV2hlbiB1bnNwZWNpZmllZCwgZGVmYXVsdHMgdG8KKwlgJShvYmplY3RuYW1lKSBTUEMgJShvYmplY3R0eXBlKSBUQUIgJShyZWZuYW1lKWAuCisJSXQgYWxzbyBpbnRlcnBvbGF0ZXMgYCUlYCB0byBgJWAsIGFuZCBgJXh4YCB3aGVyZSBgeHhgCisJYXJlIGhleCBkaWdpdHMgaW50ZXJwb2xhdGVzIHRvIGNoYXJhY3RlciB3aXRoIGhleCBjb2RlCisJYHh4YDsgZm9yIGV4YW1wbGUgYCUwMGAgaW50ZXJwb2xhdGVzIHRvIGBcMGAgKE5VTCksCisJYCUwOWAgdG8gYFx0YCAoVEFCKSBhbmQgYCUwYWAgdG8gYFxuYCAoTEYpLgorCis8cGF0dGVybj4uLi46OgorCUlmIG9uZSBvciBtb3JlIHBhdHRlcm5zIGFyZSBnaXZlbiwgb25seSByZWZzIGFyZSBzaG93biB0aGF0CisJbWF0Y2ggYWdhaW5zdCBhdCBsZWFzdCBvbmUgcGF0dGVybiwgZWl0aGVyIHVzaW5nIGZubWF0Y2goMykgb3IKKwlsaXRlcmFsbHksIGluIHRoZSBsYXR0ZXIgY2FzZSBtYXRjaGluZyBjb21wbGV0ZWx5IG9yIGZyb20gdGhlCisJYmVnaW5uaW5nIHVwIHRvIGEgc2xhc2guCisKKy0tc2hlbGw6OgorLS1wZXJsOjoKKy0tcHl0aG9uOjoKKy0tdGNsOjoKKwlJZiBnaXZlbiwgc3RyaW5ncyB0aGF0IHN1YnN0aXR1dGUgYCUoZmllbGRuYW1lKWAKKwlwbGFjZWhvbGRlcnMgYXJlIHF1b3RlZCBhcyBzdHJpbmcgbGl0ZXJhbHMgc3VpdGFibGUgZm9yCisJdGhlIHNwZWNpZmllZCBob3N0IGxhbmd1YWdlLiAgVGhpcyBpcyBtZWFudCB0byBwcm9kdWNlCisJYSBzY3JpcHRsZXQgdGhhdCBjYW4gZGlyZWN0bHkgYmUgYGV2YWxgZWQuCisKKy0tcG9pbnRzLWF0IDxvYmplY3Q+OjoKKwlPbmx5IGxpc3QgcmVmcyB3aGljaCBwb2ludHMgYXQgdGhlIGdpdmVuIG9iamVjdC4KKworLS1tZXJnZWQgWzxvYmplY3Q+XTo6CisJT25seSBsaXN0IHJlZnMgd2hvc2UgdGlwcyBhcmUgcmVhY2hhYmxlIGZyb20gdGhlCisJc3BlY2lmaWVkIGNvbW1pdCAoSEVBRCBpZiBub3Qgc3BlY2lmaWVkKS4KKworLS1uby1tZXJnZWQgWzxvYmplY3Q+XTo6CisJT25seSBsaXN0IHJlZnMgd2hvc2UgdGlwcyBhcmUgbm90IHJlYWNoYWJsZSBmcm9tIHRoZQorCXNwZWNpZmllZCBjb21taXQgKEhFQUQgaWYgbm90IHNwZWNpZmllZCkuCisKKy0tY29udGFpbnMgWzxvYmplY3Q+XTo6CisJT25seSBsaXN0IHRhZ3Mgd2hpY2ggY29udGFpbiB0aGUgc3BlY2lmaWVkIGNvbW1pdCAoSEVBRCBpZiBub3QKKwlzcGVjaWZpZWQpLgorCitGSUVMRCBOQU1FUworLS0tLS0tLS0tLS0KKworVmFyaW91cyB2YWx1ZXMgZnJvbSBzdHJ1Y3R1cmVkIGZpZWxkcyBpbiByZWZlcmVuY2VkIG9iamVjdHMgY2FuCitiZSB1c2VkIHRvIGludGVycG9sYXRlIGludG8gdGhlIHJlc3VsdGluZyBvdXRwdXQsIG9yIGFzIHNvcnQKK2tleXMuCisKK0ZvciBhbGwgb2JqZWN0cywgdGhlIGZvbGxvd2luZyBuYW1lcyBjYW4gYmUgdXNlZDoKKworcmVmbmFtZTo6CisJVGhlIG5hbWUgb2YgdGhlIHJlZiAodGhlIHBhcnQgYWZ0ZXIgJEdJVF9ESVIvKS4KKwlGb3IgYSBub24tYW1iaWd1b3VzIHNob3J0IG5hbWUgb2YgdGhlIHJlZiBhcHBlbmQgYDpzaG9ydGAuCisJVGhlIG9wdGlvbiBjb3JlLndhcm5BbWJpZ3VvdXNSZWZzIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBzdHJpY3QKKwlhYmJyZXZpYXRpb24gbW9kZS4KKworb2JqZWN0dHlwZTo6CisJVGhlIHR5cGUgb2YgdGhlIG9iamVjdCAoYGJsb2JgLCBgdHJlZWAsIGBjb21taXRgLCBgdGFnYCkuCisKK29iamVjdHNpemU6OgorCVRoZSBzaXplIG9mIHRoZSBvYmplY3QgKHRoZSBzYW1lIGFzICdnaXQgY2F0LWZpbGUgLXMnIHJlcG9ydHMpLgorCitvYmplY3RuYW1lOjoKKwlUaGUgb2JqZWN0IG5hbWUgKGFrYSBTSEEtMSkuCisJRm9yIGEgbm9uLWFtYmlndW91cyBhYmJyZXZpYXRpb24gb2YgdGhlIG9iamVjdCBuYW1lIGFwcGVuZCBgOnNob3J0YC4KKwordXBzdHJlYW06OgorCVRoZSBuYW1lIG9mIGEgbG9jYWwgcmVmIHdoaWNoIGNhbiBiZSBjb25zaWRlcmVkIGBgdXBzdHJlYW0nJworCWZyb20gdGhlIGRpc3BsYXllZCByZWYuIFJlc3BlY3RzIGA6c2hvcnRgIGluIHRoZSBzYW1lIHdheSBhcworCWByZWZuYW1lYCBhYm92ZS4gIEFkZGl0aW9uYWxseSByZXNwZWN0cyBgOnRyYWNrYCB0byBzaG93CisJIlthaGVhZCBOLCBiZWhpbmQgTV0iIGFuZCBgOnRyYWNrc2hvcnRgIHRvIHNob3cgdGhlIHRlcnNlCisJdmVyc2lvbjogIj4iIChhaGVhZCksICI8IiAoYmVoaW5kKSwgIjw+IiAoYWhlYWQgYW5kIGJlaGluZCksCisJb3IgIj0iIChpbiBzeW5jKS4gIEhhcyBubyBlZmZlY3QgaWYgdGhlIHJlZiBkb2VzIG5vdCBoYXZlCisJdHJhY2tpbmcgaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGl0LgorCitwdXNoOjoKKwlUaGUgbmFtZSBvZiBhIGxvY2FsIHJlZiB3aGljaCByZXByZXNlbnRzIHRoZSBgQHtwdXNofWAgbG9jYXRpb24KKwlmb3IgdGhlIGRpc3BsYXllZCByZWYuIFJlc3BlY3RzIGA6c2hvcnRgLCBgOnRyYWNrYCwgYW5kCisJYDp0cmFja3Nob3J0YCBvcHRpb25zIGFzIGB1cHN0cmVhbWAgZG9lcy4gUHJvZHVjZXMgYW4gZW1wdHkKKwlzdHJpbmcgaWYgbm8gYEB7cHVzaH1gIHJlZiBpcyBjb25maWd1cmVkLgorCitIRUFEOjoKKwknKicgaWYgSEVBRCBtYXRjaGVzIGN1cnJlbnQgcmVmICh0aGUgY2hlY2tlZCBvdXQgYnJhbmNoKSwgJyAnCisJb3RoZXJ3aXNlLgorCitjb2xvcjo6CisJQ2hhbmdlIG91dHB1dCBjb2xvci4gIEZvbGxvd2VkIGJ5IGA6PGNvbG9ybmFtZT5gLCB3aGVyZSBuYW1lcworCWFyZSBkZXNjcmliZWQgaW4gYGNvbG9yLmJyYW5jaC4qYC4KKworYWxpZ246OgorCUxlZnQtLCBtaWRkbGUtLCBvciByaWdodC1hbGlnbiB0aGUgY29udGVudCBiZXR3ZWVuCisJJShhbGlnbjouLi4pIGFuZCAlKGVuZCkuIFRoZSAiYWxpZ246IiBpcyBmb2xsb3dlZCBieSBgPHdpZHRoPmAKKwlhbmQgYDxwb3NpdGlvbj5gIGluIGFueSBvcmRlciBzZXBhcmF0ZWQgYnkgYSBjb21tYSwgd2hlcmUgdGhlCisJYDxwb3NpdGlvbj5gIGlzIGVpdGhlciBsZWZ0LCByaWdodCBvciBtaWRkbGUsIGRlZmF1bHQgYmVpbmcKKwlsZWZ0IGFuZCBgPHdpZHRoPmAgaXMgdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgY29udGVudCB3aXRoCisJYWxpZ25tZW50LiBJZiB0aGUgY29udGVudHMgbGVuZ3RoIGlzIG1vcmUgdGhhbiB0aGUgd2lkdGggdGhlbgorCW5vIGFsaWdubWVudCBpcyBwZXJmb3JtZWQuIElmIHVzZWQgd2l0aCAnLS1xdW90ZScgZXZlcnl0aGluZworCWluIGJldHdlZW4gJShhbGlnbjouLi4pIGFuZCAlKGVuZCkgaXMgcXVvdGVkLCBidXQgaWYgbmVzdGVkCisJdGhlbiBvbmx5IHRoZSB0b3Btb3N0IGxldmVsIHBlcmZvcm1zIHF1b3RpbmcuCisKK0luIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSwgZm9yIGNvbW1pdCBhbmQgdGFnIG9iamVjdHMsIHRoZSBoZWFkZXIKK2ZpZWxkIG5hbWVzIChgdHJlZWAsIGBwYXJlbnRgLCBgb2JqZWN0YCwgYHR5cGVgLCBhbmQgYHRhZ2ApIGNhbgorYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB2YWx1ZSBpbiB0aGUgaGVhZGVyIGZpZWxkLgorCitGaWVsZHMgdGhhdCBoYXZlIG5hbWUtZW1haWwtZGF0ZSB0dXBsZSBhcyBpdHMgdmFsdWUgKGBhdXRob3JgLAorYGNvbW1pdHRlcmAsIGFuZCBgdGFnZ2VyYCkgY2FuIGJlIHN1ZmZpeGVkIHdpdGggYG5hbWVgLCBgZW1haWxgLAorYW5kIGBkYXRlYCB0byBleHRyYWN0IHRoZSBuYW1lZCBjb21wb25lbnQuCisKK1RoZSBjb21wbGV0ZSBtZXNzYWdlIGluIGEgY29tbWl0IGFuZCB0YWcgb2JqZWN0IGlzIGBjb250ZW50c2AuCitJdHMgZmlyc3QgbGluZSBpcyBgY29udGVudHM6c3ViamVjdGAsIHdoZXJlIHN1YmplY3QgaXMgdGhlIGNvbmNhdGVuYXRpb24KK29mIGFsbCBsaW5lcyBvZiB0aGUgY29tbWl0IG1lc3NhZ2UgdXAgdG8gdGhlIGZpcnN0IGJsYW5rIGxpbmUuICBUaGUgbmV4dAorbGluZSBpcyAnY29udGVudHM6Ym9keScsIHdoZXJlIGJvZHkgaXMgYWxsIG9mIHRoZSBsaW5lcyBhZnRlciB0aGUgZmlyc3QKK2JsYW5rIGxpbmUuICBUaGUgb3B0aW9uYWwgR1BHIHNpZ25hdHVyZSBpcyBgY29udGVudHM6c2lnbmF0dXJlYC4gIFRoZQorZmlyc3QgYE5gIGxpbmVzIG9mIHRoZSBtZXNzYWdlIGlzIG9idGFpbmVkIHVzaW5nIGBjb250ZW50czpsaW5lcz1OYC4KKworRm9yIHNvcnRpbmcgcHVycG9zZXMsIGZpZWxkcyB3aXRoIG51bWVyaWMgdmFsdWVzIHNvcnQgaW4gbnVtZXJpYworb3JkZXIgKGBvYmplY3RzaXplYCwgYGF1dGhvcmRhdGVgLCBgY29tbWl0dGVyZGF0ZWAsIGB0YWdnZXJkYXRlYCkuCitBbGwgb3RoZXIgZmllbGRzIGFyZSB1c2VkIHRvIHNvcnQgaW4gdGhlaXIgYnl0ZS12YWx1ZSBvcmRlci4KKworVGhlcmUgaXMgYWxzbyBhbiBvcHRpb24gdG8gc29ydCBieSB2ZXJzaW9ucywgdGhpcyBjYW4gYmUgZG9uZSBieSB1c2luZwordGhlIGZpZWxkbmFtZSBgdmVyc2lvbjpyZWZuYW1lYCBvciBpdHMgYWxpYXMgYHY6cmVmbmFtZWAuCisKK0luIGFueSBjYXNlLCBhIGZpZWxkIG5hbWUgdGhhdCByZWZlcnMgdG8gYSBmaWVsZCBpbmFwcGxpY2FibGUgdG8KK3RoZSBvYmplY3QgcmVmZXJyZWQgYnkgdGhlIHJlZiBkb2VzIG5vdCBjYXVzZSBhbiBlcnJvci4gIEl0CityZXR1cm5zIGFuIGVtcHR5IHN0cmluZyBpbnN0ZWFkLgorCitBcyBhIHNwZWNpYWwgY2FzZSBmb3IgdGhlIGRhdGUtdHlwZSBmaWVsZHMsIHlvdSBtYXkgc3BlY2lmeSBhIGZvcm1hdCBmb3IKK3RoZSBkYXRlIGJ5IGFkZGluZyBgOmAgZm9sbG93ZWQgYnkgZGF0ZSBmb3JtYXQgbmFtZSAoc2VlIHRoZQordmFsdWVzIHRoZSBgLS1kYXRlYCBvcHRpb24gdG8gbGlua2dpdDo6Z2l0LXJldi1saXN0WzFdIHRha2VzKS4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworQW4gZXhhbXBsZSBkaXJlY3RseSBwcm9kdWNpbmcgZm9ybWF0dGVkIHRleHQuICBTaG93IHRoZSBtb3N0IHJlY2VudAorMyB0YWdnZWQgY29tbWl0czoKKworLS0tLS0tLS0tLS0tCisjIS9iaW4vc2gKKworZ2l0IGZvci1lYWNoLXJlZiAtLWNvdW50PTMgLS1zb3J0PSctKmF1dGhvcmRhdGUnIFwKKy0tZm9ybWF0PSdGcm9tOiAlKCphdXRob3JuYW1lKSAlKCphdXRob3JlbWFpbCkKK1N1YmplY3Q6ICUoKnN1YmplY3QpCitEYXRlOiAlKCphdXRob3JkYXRlKQorUmVmOiAlKCpyZWZuYW1lKQorCislKCpib2R5KQorJyAncmVmcy90YWdzJworLS0tLS0tLS0tLS0tCisKKworQSBzaW1wbGUgZXhhbXBsZSBzaG93aW5nIHRoZSB1c2Ugb2Ygc2hlbGwgZXZhbCBvbiB0aGUgb3V0cHV0LAorZGVtb25zdHJhdGluZyB0aGUgdXNlIG9mIC0tc2hlbGwuICBMaXN0IHRoZSBwcmVmaXhlcyBvZiBhbGwgaGVhZHM6CistLS0tLS0tLS0tLS0KKyMhL2Jpbi9zaAorCitnaXQgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9InJlZj0lKHJlZm5hbWUpIiByZWZzL2hlYWRzIHwgXAord2hpbGUgcmVhZCBlbnRyeQorZG8KKwlldmFsICIkZW50cnkiCisJZWNobyBgZGlybmFtZSAkcmVmYAorZG9uZQorLS0tLS0tLS0tLS0tCisKKworQSBiaXQgbW9yZSBlbGFib3JhdGUgcmVwb3J0IG9uIHRhZ3MsIGRlbW9uc3RyYXRpbmcgdGhhdCB0aGUgZm9ybWF0CittYXkgYmUgYW4gZW50aXJlIHNjcmlwdDoKKy0tLS0tLS0tLS0tLQorIyEvYmluL3NoCisKK2ZtdD0nCisJcj0lKHJlZm5hbWUpCisJdD0lKCpvYmplY3R0eXBlKQorCVQ9JHtyI3JlZnMvdGFncy99CisKKwlvPSUoKm9iamVjdG5hbWUpCisJbj0lKCphdXRob3JuYW1lKQorCWU9JSgqYXV0aG9yZW1haWwpCisJcz0lKCpzdWJqZWN0KQorCWQ9JSgqYXV0aG9yZGF0ZSkKKwliPSUoKmJvZHkpCisKKwlraW5kPVRhZworCWlmIHRlc3QgInokdCIgPSB6CisJdGhlbgorCQkjIGNvdWxkIGJlIGEgbGlnaHR3ZWlnaHQgdGFnCisJCXQ9JShvYmplY3R0eXBlKQorCQlraW5kPSJMaWdodHdlaWdodCB0YWciCisJCW89JShvYmplY3RuYW1lKQorCQluPSUoYXV0aG9ybmFtZSkKKwkJZT0lKGF1dGhvcmVtYWlsKQorCQlzPSUoc3ViamVjdCkKKwkJZD0lKGF1dGhvcmRhdGUpCisJCWI9JShib2R5KQorCWZpCisJZWNobyAiJGtpbmQgJFQgcG9pbnRzIGF0IGEgJHQgb2JqZWN0ICRvIgorCWlmIHRlc3QgInokdCIgPSB6Y29tbWl0CisJdGhlbgorCQllY2hvICJUaGUgY29tbWl0IHdhcyBhdXRob3JlZCBieSAkbiAkZQorYXQgJGQsIGFuZCB0aXRsZWQKKworICAgICRzCisKK0l0cyBtZXNzYWdlIHJlYWRzIGFzOgorIgorCQllY2hvICIkYiIgfCBzZWQgLWUgInMvXi8gICAgLyIKKwkJZWNobworCWZpCisnCisKK2V2YWw9YGdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJGZtdCIgXAorCS0tc29ydD0nKm9iamVjdHR5cGUnIFwKKwktLXNvcnQ9LXRhZ2dlcmRhdGUgXAorCXJlZnMvdGFnc2AKK2V2YWwgIiRldmFsIgorLS0tLS0tLS0tLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtc2hvdy1yZWZbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mb3JtYXQtcGF0Y2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDM1NjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZm9ybWF0LXBhdGNoLnR4dApAQCAtMCwwICsxLDU2NiBAQAorZ2l0LWZvcm1hdC1wYXRjaCgxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZm9ybWF0LXBhdGNoIC0gUHJlcGFyZSBwYXRjaGVzIGZvciBlLW1haWwgc3VibWlzc2lvbgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBmb3JtYXQtcGF0Y2gnIFsta10gWygtb3wtLW91dHB1dC1kaXJlY3RvcnkpIDxkaXI+IHwgLS1zdGRvdXRdCisJCSAgIFstLW5vLXRocmVhZCB8IC0tdGhyZWFkWz08c3R5bGU+XV0KKwkJICAgWygtLWF0dGFjaHwtLWlubGluZSlbPTxib3VuZGFyeT5dIHwgLS1uby1hdHRhY2hdCisJCSAgIFstcyB8IC0tc2lnbm9mZl0KKwkJICAgWy0tc2lnbmF0dXJlPTxzaWduYXR1cmU+IHwgLS1uby1zaWduYXR1cmVdCisJCSAgIFstLXNpZ25hdHVyZS1maWxlPTxmaWxlPl0KKwkJICAgWy1uIHwgLS1udW1iZXJlZCB8IC1OIHwgLS1uby1udW1iZXJlZF0KKwkJICAgWy0tc3RhcnQtbnVtYmVyIDxuPl0gWy0tbnVtYmVyZWQtZmlsZXNdCisJCSAgIFstLWluLXJlcGx5LXRvPU1lc3NhZ2UtSWRdIFstLXN1ZmZpeD0uPHNmeD5dCisJCSAgIFstLWlnbm9yZS1pZi1pbi11cHN0cmVhbV0KKwkJICAgWy0tc3ViamVjdC1wcmVmaXg9U3ViamVjdC1QcmVmaXhdIFsoLS1yZXJvbGwtY291bnR8LXYpIDxuPl0KKwkJICAgWy0tdG89PGVtYWlsPl0gWy0tY2M9PGVtYWlsPl0KKwkJICAgWy0tW25vLV1jb3Zlci1sZXR0ZXJdIFstLXF1aWV0XSBbLS1ub3Rlc1s9PHJlZj5dXQorCQkgICBbPGNvbW1vbiBkaWZmIG9wdGlvbnM+XQorCQkgICBbIDxzaW5jZT4gfCA8cmV2aXNpb24gcmFuZ2U+IF0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1ByZXBhcmUgZWFjaCBjb21taXQgd2l0aCBpdHMgcGF0Y2ggaW4KK29uZSBmaWxlIHBlciBjb21taXQsIGZvcm1hdHRlZCB0byByZXNlbWJsZSBVTklYIG1haWxib3ggZm9ybWF0LgorVGhlIG91dHB1dCBvZiB0aGlzIGNvbW1hbmQgaXMgY29udmVuaWVudCBmb3IgZS1tYWlsIHN1Ym1pc3Npb24gb3IKK2ZvciB1c2Ugd2l0aCAnZ2l0IGFtJy4KKworVGhlcmUgYXJlIHR3byB3YXlzIHRvIHNwZWNpZnkgd2hpY2ggY29tbWl0cyB0byBvcGVyYXRlIG9uLgorCisxLiBBIHNpbmdsZSBjb21taXQsIDxzaW5jZT4sIHNwZWNpZmllcyB0aGF0IHRoZSBjb21taXRzIGxlYWRpbmcKKyAgIHRvIHRoZSB0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIHRoYXQgYXJlIG5vdCBpbiB0aGUgaGlzdG9yeQorICAgdGhhdCBsZWFkcyB0byB0aGUgPHNpbmNlPiB0byBiZSBvdXRwdXQuCisKKzIuIEdlbmVyaWMgPHJldmlzaW9uIHJhbmdlPiBleHByZXNzaW9uIChzZWUgIlNQRUNJRllJTkcKKyAgIFJFVklTSU9OUyIgc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSkgbWVhbnMgdGhlCisgICBjb21taXRzIGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UuCisKK1RoZSBmaXJzdCBydWxlIHRha2VzIHByZWNlZGVuY2UgaW4gdGhlIGNhc2Ugb2YgYSBzaW5nbGUgPGNvbW1pdD4uICBUbworYXBwbHkgdGhlIHNlY29uZCBydWxlLCBpLmUuLCBmb3JtYXQgZXZlcnl0aGluZyBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mCitoaXN0b3J5IHVwIHVudGlsIDxjb21taXQ+LCB1c2UgdGhlICdcLS1yb290JyBvcHRpb246IGBnaXQgZm9ybWF0LXBhdGNoCistLXJvb3QgPGNvbW1pdD5gLiAgSWYgeW91IHdhbnQgdG8gZm9ybWF0IG9ubHkgPGNvbW1pdD4gaXRzZWxmLCB5b3UKK2NhbiBkbyB0aGlzIHdpdGggYGdpdCBmb3JtYXQtcGF0Y2ggLTEgPGNvbW1pdD5gLgorCitCeSBkZWZhdWx0LCBlYWNoIG91dHB1dCBmaWxlIGlzIG51bWJlcmVkIHNlcXVlbnRpYWxseSBmcm9tIDEsIGFuZCB1c2VzIHRoZQorZmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UgKG1hc3NhZ2VkIGZvciBwYXRobmFtZSBzYWZldHkpIGFzCit0aGUgZmlsZW5hbWUuIFdpdGggdGhlIGAtLW51bWJlcmVkLWZpbGVzYCBvcHRpb24sIHRoZSBvdXRwdXQgZmlsZSBuYW1lcword2lsbCBvbmx5IGJlIG51bWJlcnMsIHdpdGhvdXQgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGNvbW1pdCBhcHBlbmRlZC4KK1RoZSBuYW1lcyBvZiB0aGUgb3V0cHV0IGZpbGVzIGFyZSBwcmludGVkIHRvIHN0YW5kYXJkCitvdXRwdXQsIHVubGVzcyB0aGUgYC0tc3Rkb3V0YCBvcHRpb24gaXMgc3BlY2lmaWVkLgorCitJZiBgLW9gIGlzIHNwZWNpZmllZCwgb3V0cHV0IGZpbGVzIGFyZSBjcmVhdGVkIGluIDxkaXI+LiAgT3RoZXJ3aXNlCit0aGV5IGFyZSBjcmVhdGVkIGluIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorCitCeSBkZWZhdWx0LCB0aGUgc3ViamVjdCBvZiBhIHNpbmdsZSBwYXRjaCBpcyAiW1BBVENIXSAiIGZvbGxvd2VkIGJ5Cit0aGUgY29uY2F0ZW5hdGlvbiBvZiBsaW5lcyBmcm9tIHRoZSBjb21taXQgbWVzc2FnZSB1cCB0byB0aGUgZmlyc3QgYmxhbmsKK2xpbmUgKHNlZSB0aGUgRElTQ1VTU0lPTiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSkuCisKK1doZW4gbXVsdGlwbGUgcGF0Y2hlcyBhcmUgb3V0cHV0LCB0aGUgc3ViamVjdCBwcmVmaXggd2lsbCBpbnN0ZWFkIGJlCisiW1BBVENIIG4vbV0gIi4gIFRvIGZvcmNlIDEvMSB0byBiZSBhZGRlZCBmb3IgYSBzaW5nbGUgcGF0Y2gsIHVzZSBgLW5gLgorVG8gb21pdCBwYXRjaCBudW1iZXJzIGZyb20gdGhlIHN1YmplY3QsIHVzZSBgLU5gLgorCitJZiBnaXZlbiBgLS10aHJlYWRgLCBgZ2l0LWZvcm1hdC1wYXRjaGAgd2lsbCBnZW5lcmF0ZSBgSW4tUmVwbHktVG9gIGFuZAorYFJlZmVyZW5jZXNgIGhlYWRlcnMgdG8gbWFrZSB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IHBhdGNoIG1haWxzIGFwcGVhcgorYXMgcmVwbGllcyB0byB0aGUgZmlyc3QgbWFpbDsgdGhpcyBhbHNvIGdlbmVyYXRlcyBhIGBNZXNzYWdlLUlkYCBoZWFkZXIgdG8KK3JlZmVyZW5jZS4KKworT1BUSU9OUworLS0tLS0tLQorOmdpdC1mb3JtYXQtcGF0Y2g6IDEKK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCistPG4+OjoKKwlQcmVwYXJlIHBhdGNoZXMgZnJvbSB0aGUgdG9wbW9zdCA8bj4gY29tbWl0cy4KKworLW8gPGRpcj46OgorLS1vdXRwdXQtZGlyZWN0b3J5IDxkaXI+OjoKKwlVc2UgPGRpcj4gdG8gc3RvcmUgdGhlIHJlc3VsdGluZyBmaWxlcywgaW5zdGVhZCBvZiB0aGUKKwljdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorCistbjo6CistLW51bWJlcmVkOjoKKwlOYW1lIG91dHB1dCBpbiAnW1BBVENIIG4vbV0nIGZvcm1hdCwgZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoLgorCistTjo6CistLW5vLW51bWJlcmVkOjoKKwlOYW1lIG91dHB1dCBpbiAnW1BBVENIXScgZm9ybWF0LgorCistLXN0YXJ0LW51bWJlciA8bj46OgorCVN0YXJ0IG51bWJlcmluZyB0aGUgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxLgorCistLW51bWJlcmVkLWZpbGVzOjoKKwlPdXRwdXQgZmlsZSBuYW1lcyB3aWxsIGJlIGEgc2ltcGxlIG51bWJlciBzZXF1ZW5jZQorCXdpdGhvdXQgdGhlIGRlZmF1bHQgZmlyc3QgbGluZSBvZiB0aGUgY29tbWl0IGFwcGVuZGVkLgorCistazo6CistLWtlZXAtc3ViamVjdDo6CisJRG8gbm90IHN0cmlwL2FkZCAnW1BBVENIXScgZnJvbSB0aGUgZmlyc3QgbGluZSBvZiB0aGUKKwljb21taXQgbG9nIG1lc3NhZ2UuCisKKy1zOjoKKy0tc2lnbm9mZjo6CisJQWRkIGBTaWduZWQtb2ZmLWJ5OmAgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UsIHVzaW5nCisJdGhlIGNvbW1pdHRlciBpZGVudGl0eSBvZiB5b3Vyc2VsZi4KKworLS1zdGRvdXQ6OgorCVByaW50IGFsbCBjb21taXRzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgaW4gbWJveCBmb3JtYXQsCisJaW5zdGVhZCBvZiBjcmVhdGluZyBhIGZpbGUgZm9yIGVhY2ggb25lLgorCistLWF0dGFjaFs9PGJvdW5kYXJ5Pl06OgorCUNyZWF0ZSBtdWx0aXBhcnQvbWl4ZWQgYXR0YWNobWVudCwgdGhlIGZpcnN0IHBhcnQgb2YKKwl3aGljaCBpcyB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHRoZSBwYXRjaCBpdHNlbGYgaW4gdGhlCisJc2Vjb25kIHBhcnQsIHdpdGggYENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnRgLgorCistLW5vLWF0dGFjaDo6CisJRGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgYW4gYXR0YWNobWVudCwgb3ZlcnJpZGluZyB0aGUKKwljb25maWd1cmF0aW9uIHNldHRpbmcuCisKKy0taW5saW5lWz08Ym91bmRhcnk+XTo6CisJQ3JlYXRlIG11bHRpcGFydC9taXhlZCBhdHRhY2htZW50LCB0aGUgZmlyc3QgcGFydCBvZgorCXdoaWNoIGlzIHRoZSBjb21taXQgbWVzc2FnZSBhbmQgdGhlIHBhdGNoIGl0c2VsZiBpbiB0aGUKKwlzZWNvbmQgcGFydCwgd2l0aCBgQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lYC4KKworLS10aHJlYWRbPTxzdHlsZT5dOjoKKy0tbm8tdGhyZWFkOjoKKwlDb250cm9scyBhZGRpdGlvbiBvZiBgSW4tUmVwbHktVG9gIGFuZCBgUmVmZXJlbmNlc2AgaGVhZGVycyB0bworCW1ha2UgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBtYWlscyBhcHBlYXIgYXMgcmVwbGllcyB0byB0aGUKKwlmaXJzdC4gIEFsc28gY29udHJvbHMgZ2VuZXJhdGlvbiBvZiB0aGUgYE1lc3NhZ2UtSWRgIGhlYWRlciB0bworCXJlZmVyZW5jZS4KKysKK1RoZSBvcHRpb25hbCA8c3R5bGU+IGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgYHNoYWxsb3dgIG9yIGBkZWVwYC4KKydzaGFsbG93JyB0aHJlYWRpbmcgbWFrZXMgZXZlcnkgbWFpbCBhIHJlcGx5IHRvIHRoZSBoZWFkIG9mIHRoZQorc2VyaWVzLCB3aGVyZSB0aGUgaGVhZCBpcyBjaG9zZW4gZnJvbSB0aGUgY292ZXIgbGV0dGVyLCB0aGUKK2AtLWluLXJlcGx5LXRvYCwgYW5kIHRoZSBmaXJzdCBwYXRjaCBtYWlsLCBpbiB0aGlzIG9yZGVyLiAgJ2RlZXAnCit0aHJlYWRpbmcgbWFrZXMgZXZlcnkgbWFpbCBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cyBvbmUuCisrCitUaGUgZGVmYXVsdCBpcyBgLS1uby10aHJlYWRgLCB1bmxlc3MgdGhlICdmb3JtYXQudGhyZWFkJyBjb25maWd1cmF0aW9uCitpcyBzZXQuICBJZiBgLS10aHJlYWRgIGlzIHNwZWNpZmllZCB3aXRob3V0IGEgc3R5bGUsIGl0IGRlZmF1bHRzIHRvIHRoZQorc3R5bGUgc3BlY2lmaWVkIGJ5ICdmb3JtYXQudGhyZWFkJyBpZiBhbnksIG9yIGVsc2UgYHNoYWxsb3dgLgorKworQmV3YXJlIHRoYXQgdGhlIGRlZmF1bHQgZm9yICdnaXQgc2VuZC1lbWFpbCcgaXMgdG8gdGhyZWFkIGVtYWlscworaXRzZWxmLiAgSWYgeW91IHdhbnQgYGdpdCBmb3JtYXQtcGF0Y2hgIHRvIHRha2UgY2FyZSBvZiB0aHJlYWRpbmcsIHlvdQord2lsbCB3YW50IHRvIGVuc3VyZSB0aGF0IHRocmVhZGluZyBpcyBkaXNhYmxlZCBmb3IgYGdpdCBzZW5kLWVtYWlsYC4KKworLS1pbi1yZXBseS10bz1NZXNzYWdlLUlkOjoKKwlNYWtlIHRoZSBmaXJzdCBtYWlsIChvciBhbGwgdGhlIG1haWxzIHdpdGggYC0tbm8tdGhyZWFkYCkgYXBwZWFyIGFzIGEKKwlyZXBseSB0byB0aGUgZ2l2ZW4gTWVzc2FnZS1JZCwgd2hpY2ggYXZvaWRzIGJyZWFraW5nIHRocmVhZHMgdG8KKwlwcm92aWRlIGEgbmV3IHBhdGNoIHNlcmllcy4KKworLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW06OgorCURvIG5vdCBpbmNsdWRlIGEgcGF0Y2ggdGhhdCBtYXRjaGVzIGEgY29tbWl0IGluCisJPHVudGlsPi4uPHNpbmNlPi4gIFRoaXMgd2lsbCBleGFtaW5lIGFsbCBwYXRjaGVzIHJlYWNoYWJsZQorCWZyb20gPHNpbmNlPiBidXQgbm90IGZyb20gPHVudGlsPiBhbmQgY29tcGFyZSB0aGVtIHdpdGggdGhlCisJcGF0Y2hlcyBiZWluZyBnZW5lcmF0ZWQsIGFuZCBhbnkgcGF0Y2ggdGhhdCBtYXRjaGVzIGlzCisJaWdub3JlZC4KKworLS1zdWJqZWN0LXByZWZpeD08U3ViamVjdC1QcmVmaXg+OjoKKwlJbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCAnW1BBVENIXScgcHJlZml4IGluIHRoZSBzdWJqZWN0CisJbGluZSwgaW5zdGVhZCB1c2UgJ1s8U3ViamVjdC1QcmVmaXg+XScuIFRoaXMKKwlhbGxvd3MgZm9yIHVzZWZ1bCBuYW1pbmcgb2YgYSBwYXRjaCBzZXJpZXMsIGFuZCBjYW4gYmUKKwljb21iaW5lZCB3aXRoIHRoZSBgLS1udW1iZXJlZGAgb3B0aW9uLgorCistdiA8bj46OgorLS1yZXJvbGwtY291bnQ9PG4+OjoKKwlNYXJrIHRoZSBzZXJpZXMgYXMgdGhlIDxuPi10aCBpdGVyYXRpb24gb2YgdGhlIHRvcGljLiBUaGUKKwlvdXRwdXQgZmlsZW5hbWVzIGhhdmUgYHY8bj5gIHByZXBlbmRlZCB0byB0aGVtLCBhbmQgdGhlCisJc3ViamVjdCBwcmVmaXggKCJQQVRDSCIgYnkgZGVmYXVsdCwgYnV0IGNvbmZpZ3VyYWJsZSB2aWEgdGhlCisJYC0tc3ViamVjdC1wcmVmaXhgIG9wdGlvbikgaGFzIGAgdjxuPmAgYXBwZW5kZWQgdG8gaXQuICBFLmcuCisJYC0tcmVyb2xsLWNvdW50PTRgIG1heSBwcm9kdWNlIGB2NC0wMDAxLWFkZC1tYWtlZmlsZS5wYXRjaGAKKwlmaWxlIHRoYXQgaGFzICJTdWJqZWN0OiBbUEFUQ0ggdjQgMS8yMF0gQWRkIG1ha2VmaWxlIiBpbiBpdC4KKworLS10bz08ZW1haWw+OjoKKwlBZGQgYSBgVG86YCBoZWFkZXIgdG8gdGhlIGVtYWlsIGhlYWRlcnMuIFRoaXMgaXMgaW4gYWRkaXRpb24KKwl0byBhbnkgY29uZmlndXJlZCBoZWFkZXJzLCBhbmQgbWF5IGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuCisJVGhlIG5lZ2F0ZWQgZm9ybSBgLS1uby10b2AgZGlzY2FyZHMgYWxsIGBUbzpgIGhlYWRlcnMgYWRkZWQgc28KKwlmYXIgKGZyb20gY29uZmlnIG9yIGNvbW1hbmQgbGluZSkuCisKKy0tY2M9PGVtYWlsPjo6CisJQWRkIGEgYENjOmAgaGVhZGVyIHRvIHRoZSBlbWFpbCBoZWFkZXJzLiBUaGlzIGlzIGluIGFkZGl0aW9uCisJdG8gYW55IGNvbmZpZ3VyZWQgaGVhZGVycywgYW5kIG1heSBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLgorCVRoZSBuZWdhdGVkIGZvcm0gYC0tbm8tY2NgIGRpc2NhcmRzIGFsbCBgQ2M6YCBoZWFkZXJzIGFkZGVkIHNvCisJZmFyIChmcm9tIGNvbmZpZyBvciBjb21tYW5kIGxpbmUpLgorCistLWZyb206OgorLS1mcm9tPTxpZGVudD46OgorCVVzZSBgaWRlbnRgIGluIHRoZSBgRnJvbTpgIGhlYWRlciBvZiBlYWNoIGNvbW1pdCBlbWFpbC4gSWYgdGhlCisJYXV0aG9yIGlkZW50IG9mIHRoZSBjb21taXQgaXMgbm90IHRleHR1YWxseSBpZGVudGljYWwgdG8gdGhlCisJcHJvdmlkZWQgYGlkZW50YCwgcGxhY2UgYSBgRnJvbTpgIGhlYWRlciBpbiB0aGUgYm9keSBvZiB0aGUKKwltZXNzYWdlIHdpdGggdGhlIG9yaWdpbmFsIGF1dGhvci4gSWYgbm8gYGlkZW50YCBpcyBnaXZlbiwgdXNlCisJdGhlIGNvbW1pdHRlciBpZGVudC4KKysKK05vdGUgdGhhdCB0aGlzIG9wdGlvbiBpcyBvbmx5IHVzZWZ1bCBpZiB5b3UgYXJlIGFjdHVhbGx5IHNlbmRpbmcgdGhlCitlbWFpbHMgYW5kIHdhbnQgdG8gaWRlbnRpZnkgeW91cnNlbGYgYXMgdGhlIHNlbmRlciwgYnV0IHJldGFpbiB0aGUKK29yaWdpbmFsIGF1dGhvciAoYW5kIGBnaXQgYW1gIHdpbGwgY29ycmVjdGx5IHBpY2sgdXAgdGhlIGluLWJvZHkKK2hlYWRlcikuIE5vdGUgYWxzbyB0aGF0IGBnaXQgc2VuZC1lbWFpbGAgYWxyZWFkeSBoYW5kbGVzIHRoaXMKK3RyYW5zZm9ybWF0aW9uIGZvciB5b3UsIGFuZCB0aGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIHVzZWQgaWYgeW91IGFyZQorZmVlZGluZyB0aGUgcmVzdWx0IHRvIGBnaXQgc2VuZC1lbWFpbGAuCisKKy0tYWRkLWhlYWRlcj08aGVhZGVyPjo6CisJQWRkIGFuIGFyYml0cmFyeSBoZWFkZXIgdG8gdGhlIGVtYWlsIGhlYWRlcnMuICBUaGlzIGlzIGluIGFkZGl0aW9uCisJdG8gYW55IGNvbmZpZ3VyZWQgaGVhZGVycywgYW5kIG1heSBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLgorCUZvciBleGFtcGxlLCBgLS1hZGQtaGVhZGVyPSJPcmdhbml6YXRpb246IGdpdC1mb28iYC4KKwlUaGUgbmVnYXRlZCBmb3JtIGAtLW5vLWFkZC1oZWFkZXJgIGRpc2NhcmRzICphbGwqIChgVG86YCwKKwlgQ2M6YCwgYW5kIGN1c3RvbSkgaGVhZGVycyBhZGRlZCBzbyBmYXIgZnJvbSBjb25maWcgb3IgY29tbWFuZAorCWxpbmUuCisKKy0tW25vLV1jb3Zlci1sZXR0ZXI6OgorCUluIGFkZGl0aW9uIHRvIHRoZSBwYXRjaGVzLCBnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciBmaWxlCisJY29udGFpbmluZyB0aGUgYnJhbmNoIGRlc2NyaXB0aW9uLCBzaG9ydGxvZyBhbmQgdGhlIG92ZXJhbGwgZGlmZnN0YXQuICBZb3UgY2FuCisJZmlsbCBpbiBhIGRlc2NyaXB0aW9uIGluIHRoZSBmaWxlIGJlZm9yZSBzZW5kaW5nIGl0IG91dC4KKworLS1ub3Rlc1s9PHJlZj5dOjoKKwlBcHBlbmQgdGhlIG5vdGVzIChzZWUgbGlua2dpdDpnaXQtbm90ZXNbMV0pIGZvciB0aGUgY29tbWl0CisJYWZ0ZXIgdGhlIHRocmVlLWRhc2ggbGluZS4KKysKK1RoZSBleHBlY3RlZCB1c2UgY2FzZSBvZiB0aGlzIGlzIHRvIHdyaXRlIHN1cHBvcnRpbmcgZXhwbGFuYXRpb24gZm9yCit0aGUgY29tbWl0IHRoYXQgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgcHJvcGVyLAorYW5kIGluY2x1ZGUgaXQgd2l0aCB0aGUgcGF0Y2ggc3VibWlzc2lvbi4gV2hpbGUgb25lIGNhbiBzaW1wbHkgd3JpdGUKK3RoZXNlIGV4cGxhbmF0aW9ucyBhZnRlciBgZm9ybWF0LXBhdGNoYCBoYXMgcnVuIGJ1dCBiZWZvcmUgc2VuZGluZywKK2tlZXBpbmcgdGhlbSBhcyBHaXQgbm90ZXMgYWxsb3dzIHRoZW0gdG8gYmUgbWFpbnRhaW5lZCBiZXR3ZWVuIHZlcnNpb25zCitvZiB0aGUgcGF0Y2ggc2VyaWVzIChidXQgc2VlIHRoZSBkaXNjdXNzaW9uIG9mIHRoZSBgbm90ZXMucmV3cml0ZWAKK2NvbmZpZ3VyYXRpb24gb3B0aW9ucyBpbiBsaW5rZ2l0OmdpdC1ub3Rlc1sxXSB0byB1c2UgdGhpcyB3b3JrZmxvdykuCisKKy0tW25vXS1zaWduYXR1cmU9PHNpZ25hdHVyZT46OgorCUFkZCBhIHNpZ25hdHVyZSB0byBlYWNoIG1lc3NhZ2UgcHJvZHVjZWQuIFBlciBSRkMgMzY3NiB0aGUgc2lnbmF0dXJlCisJaXMgc2VwYXJhdGVkIGZyb20gdGhlIGJvZHkgYnkgYSBsaW5lIHdpdGggJy0tICcgb24gaXQuIElmIHRoZQorCXNpZ25hdHVyZSBvcHRpb24gaXMgb21pdHRlZCB0aGUgc2lnbmF0dXJlIGRlZmF1bHRzIHRvIHRoZSBHaXQgdmVyc2lvbgorCW51bWJlci4KKworLS1zaWduYXR1cmUtZmlsZT08ZmlsZT46OgorCVdvcmtzIGp1c3QgbGlrZSAtLXNpZ25hdHVyZSBleGNlcHQgdGhlIHNpZ25hdHVyZSBpcyByZWFkIGZyb20gYSBmaWxlLgorCistLXN1ZmZpeD0uPHNmeD46OgorCUluc3RlYWQgb2YgdXNpbmcgYC5wYXRjaGAgYXMgdGhlIHN1ZmZpeCBmb3IgZ2VuZXJhdGVkCisJZmlsZW5hbWVzLCB1c2Ugc3BlY2lmaWVkIHN1ZmZpeC4gIEEgY29tbW9uIGFsdGVybmF0aXZlIGlzCisJYC0tc3VmZml4PS50eHRgLiAgTGVhdmluZyB0aGlzIGVtcHR5IHdpbGwgcmVtb3ZlIHRoZSBgLnBhdGNoYAorCXN1ZmZpeC4KKysKK05vdGUgdGhhdCB0aGUgbGVhZGluZyBjaGFyYWN0ZXIgZG9lcyBub3QgaGF2ZSB0byBiZSBhIGRvdDsgZm9yIGV4YW1wbGUsCit5b3UgY2FuIHVzZSBgLS1zdWZmaXg9LXBhdGNoYCB0byBnZXQgYDAwMDEtZGVzY3JpcHRpb24tb2YtbXktY2hhbmdlLXBhdGNoYC4KKworLXE6OgorLS1xdWlldDo6CisJRG8gbm90IHByaW50IHRoZSBuYW1lcyBvZiB0aGUgZ2VuZXJhdGVkIGZpbGVzIHRvIHN0YW5kYXJkIG91dHB1dC4KKworLS1uby1iaW5hcnk6OgorCURvIG5vdCBvdXRwdXQgY29udGVudHMgb2YgY2hhbmdlcyBpbiBiaW5hcnkgZmlsZXMsIGluc3RlYWQKKwlkaXNwbGF5IGEgbm90aWNlIHRoYXQgdGhvc2UgZmlsZXMgY2hhbmdlZC4gIFBhdGNoZXMgZ2VuZXJhdGVkCisJdXNpbmcgdGhpcyBvcHRpb24gY2Fubm90IGJlIGFwcGxpZWQgcHJvcGVybHksIGJ1dCB0aGV5IGFyZQorCXN0aWxsIHVzZWZ1bCBmb3IgY29kZSByZXZpZXcuCisKKy0tcm9vdDo6CisJVHJlYXQgdGhlIHJldmlzaW9uIGFyZ3VtZW50IGFzIGEgPHJldmlzaW9uIHJhbmdlPiwgZXZlbiBpZiBpdAorCWlzIGp1c3QgYSBzaW5nbGUgY29tbWl0ICh0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHRyZWF0ZWQgYXMgYQorCTxzaW5jZT4pLiAgTm90ZSB0aGF0IHJvb3QgY29tbWl0cyBpbmNsdWRlZCBpbiB0aGUgc3BlY2lmaWVkCisJcmFuZ2UgYXJlIGFsd2F5cyBmb3JtYXR0ZWQgYXMgY3JlYXRpb24gcGF0Y2hlcywgaW5kZXBlbmRlbnRseQorCW9mIHRoaXMgZmxhZy4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorWW91IGNhbiBzcGVjaWZ5IGV4dHJhIG1haWwgaGVhZGVyIGxpbmVzIHRvIGJlIGFkZGVkIHRvIGVhY2ggbWVzc2FnZSwKK2RlZmF1bHRzIGZvciB0aGUgc3ViamVjdCBwcmVmaXggYW5kIGZpbGUgc3VmZml4LCBudW1iZXIgcGF0Y2hlcyB3aGVuCitvdXRwdXR0aW5nIG1vcmUgdGhhbiBvbmUgcGF0Y2gsIGFkZCAiVG8iIG9yICJDYzoiIGhlYWRlcnMsIGNvbmZpZ3VyZQorYXR0YWNobWVudHMsIGFuZCBzaWduIG9mZiBwYXRjaGVzIHdpdGggY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKKy0tLS0tLS0tLS0tLQorW2Zvcm1hdF0KKwloZWFkZXJzID0gIk9yZ2FuaXphdGlvbjogZ2l0LWZvb1xuIgorCXN1YmplY3RQcmVmaXggPSBDSEFOR0UKKwlzdWZmaXggPSAudHh0CisJbnVtYmVyZWQgPSBhdXRvCisJdG8gPSA8ZW1haWw+CisJY2MgPSA8ZW1haWw+CisJYXR0YWNoIFsgPSBtaW1lLWJvdW5kYXJ5LXN0cmluZyBdCisJc2lnbk9mZiA9IHRydWUKKwljb3ZlcmxldHRlciA9IGF1dG8KKy0tLS0tLS0tLS0tLQorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworVGhlIHBhdGNoIHByb2R1Y2VkIGJ5ICdnaXQgZm9ybWF0LXBhdGNoJyBpcyBpbiBVTklYIG1haWxib3ggZm9ybWF0LAord2l0aCBhIGZpeGVkICJtYWdpYyIgdGltZSBzdGFtcCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBmaWxlIGlzIG91dHB1dAorZnJvbSBmb3JtYXQtcGF0Y2ggcmF0aGVyIHRoYW4gYSByZWFsIG1haWxib3gsIGxpa2Ugc286CisKKy0tLS0tLS0tLS0tLQorRnJvbSA4ZjcyYmFkMWJhZjE5YTUzNDU5NjYxMzQzZTIxZDY0OTFjMzkwOGQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogVG9ueSBMdWNrIDx0b255Lmx1Y2tAaW50ZWwuY29tPgorRGF0ZTogVHVlLCAxMyBKdWwgMjAxMCAxMTo0Mjo1NCAtMDcwMAorU3ViamVjdDogW1BBVENIXSA9P1VURi04P3E/W0lBNjRdPTIwUHV0PTIwaWE2ND0yMGNvbmZpZz0yMGZpbGVzPTIwb249MjB0aGU9MjA/PQorID0/VVRGLTg/cT9Vd2U9MjBLbGVpbmUtSz1DMz1CNm5pZz0yMGRpZXQ/PQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCithcmNoL2FybSBjb25maWcgZmlsZXMgd2VyZSBzbGltbWVkIGRvd24gdXNpbmcgYSBweXRob24gc2NyaXB0CisoU2VlIGNvbW1pdCBjMjMzMGUyODZmNjhmMWM0MDhiNGFhNjUxNWJhNDlkNTdmMDViZWFlIGNvbW1lbnQpCisKK0RvIHRoZSBzYW1lIGZvciBpYTY0IHNvIHdlIGNhbiBoYXZlIHNsZWVrICYgdHJpbSBsb29raW5nCisuLi4KKy0tLS0tLS0tLS0tLQorCitUeXBpY2FsbHkgaXQgd2lsbCBiZSBwbGFjZWQgaW4gYSBNVUEncyBkcmFmdHMgZm9sZGVyLCBlZGl0ZWQgdG8gYWRkCit0aW1lbHkgY29tbWVudGFyeSB0aGF0IHNob3VsZCBub3QgZ28gaW4gdGhlIGNoYW5nZWxvZyBhZnRlciB0aGUgdGhyZWUKK2Rhc2hlcywgYW5kIHRoZW4gc2VudCBhcyBhIG1lc3NhZ2Ugd2hvc2UgYm9keSwgaW4gb3VyIGV4YW1wbGUsIHN0YXJ0cword2l0aCAiYXJjaC9hcm0gY29uZmlnIGZpbGVzIHdlcmUuLi4iLiAgT24gdGhlIHJlY2VpdmluZyBlbmQsIHJlYWRlcnMKK2NhbiBzYXZlIGludGVyZXN0aW5nIHBhdGNoZXMgaW4gYSBVTklYIG1haWxib3ggYW5kIGFwcGx5IHRoZW0gd2l0aAorbGlua2dpdDpnaXQtYW1bMV0uCisKK1doZW4gYSBwYXRjaCBpcyBwYXJ0IG9mIGFuIG9uZ29pbmcgZGlzY3Vzc2lvbiwgdGhlIHBhdGNoIGdlbmVyYXRlZCBieQorJ2dpdCBmb3JtYXQtcGF0Y2gnIGNhbiBiZSB0d2Vha2VkIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSAnZ2l0IGFtCistLXNjaXNzb3JzJyBmZWF0dXJlLiAgQWZ0ZXIgeW91ciByZXNwb25zZSB0byB0aGUgZGlzY3Vzc2lvbiBjb21lcyBhCitsaW5lIHRoYXQgY29uc2lzdHMgc29sZWx5IG9mICJgLS0gPjggLS1gIiAoc2Npc3NvcnMgYW5kIHBlcmZvcmF0aW9uKSwKK2ZvbGxvd2VkIGJ5IHRoZSBwYXRjaCB3aXRoIHVubmVjZXNzYXJ5IGhlYWRlciBmaWVsZHMgcmVtb3ZlZDoKKworLS0tLS0tLS0tLS0tCisuLi4KKz4gU28gd2Ugc2hvdWxkIGRvIHN1Y2gtYW5kLXN1Y2guCisKK01ha2VzIHNlbnNlIHRvIG1lLiAgSG93IGFib3V0IHRoaXMgcGF0Y2g/CisKKy0tID44IC0tCitTdWJqZWN0OiBbSUE2NF0gUHV0IGlhNjQgY29uZmlnIGZpbGVzIG9uIHRoZSBVd2UgS2xlaW5lLUvDtm5pZyBkaWV0CisKK2FyY2gvYXJtIGNvbmZpZyBmaWxlcyB3ZXJlIHNsaW1tZWQgZG93biB1c2luZyBhIHB5dGhvbiBzY3JpcHQKKy4uLgorLS0tLS0tLS0tLS0tCisKK1doZW4gc2VuZGluZyBhIHBhdGNoIHRoaXMgd2F5LCBtb3N0IG9mdGVuIHlvdSBhcmUgc2VuZGluZyB5b3VyIG93bgorcGF0Y2gsIHNvIGluIGFkZGl0aW9uIHRvIHRoZSAiYEZyb20gJFNIQTEgJG1hZ2ljX3RpbWVzdGFtcGAiIG1hcmtlciB5b3UKK3Nob3VsZCBvbWl0IGBGcm9tOmAgYW5kIGBEYXRlOmAgbGluZXMgZnJvbSB0aGUgcGF0Y2ggZmlsZS4gIFRoZSBwYXRjaAordGl0bGUgaXMgbGlrZWx5IHRvIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBzdWJqZWN0IG9mIHRoZSBkaXNjdXNzaW9uIHRoZQorcGF0Y2ggaXMgaW4gcmVzcG9uc2UgdG8sIHNvIGl0IGlzIGxpa2VseSB0aGF0IHlvdSB3b3VsZCB3YW50IHRvIGtlZXAKK3RoZSBTdWJqZWN0OiBsaW5lLCBsaWtlIHRoZSBleGFtcGxlIGFib3ZlLgorCitDaGVja2luZyBmb3IgcGF0Y2ggY29ycnVwdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK01hbnkgbWFpbGVycyBpZiBub3Qgc2V0IHVwIHByb3Blcmx5IHdpbGwgY29ycnVwdCB3aGl0ZXNwYWNlLiAgSGVyZSBhcmUKK3R3byBjb21tb24gdHlwZXMgb2YgY29ycnVwdGlvbjoKKworKiBFbXB0eSBjb250ZXh0IGxpbmVzIHRoYXQgZG8gbm90IGhhdmUgX2FueV8gd2hpdGVzcGFjZS4KKworKiBOb24tZW1wdHkgY29udGV4dCBsaW5lcyB0aGF0IGhhdmUgb25lIGV4dHJhIHdoaXRlc3BhY2UgYXQgdGhlCisgIGJlZ2lubmluZy4KKworT25lIHdheSB0byB0ZXN0IGlmIHlvdXIgTVVBIGlzIHNldCB1cCBjb3JyZWN0bHkgaXM6CisKKyogU2VuZCB0aGUgcGF0Y2ggdG8geW91cnNlbGYsIGV4YWN0bHkgdGhlIHdheSB5b3Ugd291bGQsIGV4Y2VwdAorICB3aXRoIFRvOiBhbmQgQ2M6IGxpbmVzIHRoYXQgZG8gbm90IGNvbnRhaW4gdGhlIGxpc3QgYW5kCisgIG1haW50YWluZXIgYWRkcmVzcy4KKworKiBTYXZlIHRoYXQgcGF0Y2ggdG8gYSBmaWxlIGluIFVOSVggbWFpbGJveCBmb3JtYXQuICBDYWxsIGl0IGEucGF0Y2gsCisgIHNheS4KKworKiBBcHBseSBpdDoKKworICAgICQgZ2l0IGZldGNoIDxwcm9qZWN0PiBtYXN0ZXI6dGVzdC1hcHBseQorICAgICQgZ2l0IGNoZWNrb3V0IHRlc3QtYXBwbHkKKyAgICAkIGdpdCByZXNldCAtLWhhcmQKKyAgICAkIGdpdCBhbSBhLnBhdGNoCisKK0lmIGl0IGRvZXMgbm90IGFwcGx5IGNvcnJlY3RseSwgdGhlcmUgY2FuIGJlIHZhcmlvdXMgcmVhc29ucy4KKworKiBUaGUgcGF0Y2ggaXRzZWxmIGRvZXMgbm90IGFwcGx5IGNsZWFubHkuICBUaGF0IGlzIF9iYWRfIGJ1dAorICBkb2VzIG5vdCBoYXZlIG11Y2ggdG8gZG8gd2l0aCB5b3VyIE1VQS4gIFlvdSBtaWdodCB3YW50IHRvIHJlYmFzZQorICB0aGUgcGF0Y2ggd2l0aCBsaW5rZ2l0OmdpdC1yZWJhc2VbMV0gYmVmb3JlIHJlZ2VuZXJhdGluZyBpdCBpbgorICB0aGlzIGNhc2UuCisKKyogVGhlIE1VQSBjb3JydXB0ZWQgeW91ciBwYXRjaDsgImFtIiB3b3VsZCBjb21wbGFpbiB0aGF0CisgIHRoZSBwYXRjaCBkb2VzIG5vdCBhcHBseS4gIExvb2sgaW4gdGhlIC5naXQvcmViYXNlLWFwcGx5LyBzdWJkaXJlY3RvcnkgYW5kCisgIHNlZSB3aGF0ICdwYXRjaCcgZmlsZSBjb250YWlucyBhbmQgY2hlY2sgZm9yIHRoZSBjb21tb24KKyAgY29ycnVwdGlvbiBwYXR0ZXJucyBtZW50aW9uZWQgYWJvdmUuCisKKyogV2hpbGUgYXQgaXQsIGNoZWNrIHRoZSAnaW5mbycgYW5kICdmaW5hbC1jb21taXQnIGZpbGVzIGFzIHdlbGwuCisgIElmIHdoYXQgaXMgaW4gJ2ZpbmFsLWNvbW1pdCcgaXMgbm90IGV4YWN0bHkgd2hhdCB5b3Ugd291bGQgd2FudCB0bworICBzZWUgaW4gdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSwgaXQgaXMgdmVyeSBsaWtlbHkgdGhhdCB0aGUKKyAgcmVjZWl2ZXIgd291bGQgZW5kIHVwIGhhbmQgZWRpdGluZyB0aGUgbG9nIG1lc3NhZ2Ugd2hlbiBhcHBseWluZworICB5b3VyIHBhdGNoLiAgVGhpbmdzIGxpa2UgIkhpLCB0aGlzIGlzIG15IGZpcnN0IHBhdGNoLlxuIiBpbiB0aGUKKyAgcGF0Y2ggZS1tYWlsIHNob3VsZCBjb21lIGFmdGVyIHRoZSB0aHJlZS1kYXNoIGxpbmUgdGhhdCBzaWduYWxzCisgIHRoZSBlbmQgb2YgdGhlIGNvbW1pdCBtZXNzYWdlLgorCitNVUEtU1BFQ0lGSUMgSElOVFMKKy0tLS0tLS0tLS0tLS0tLS0tLQorSGVyZSBhcmUgc29tZSBoaW50cyBvbiBob3cgdG8gc3VjY2Vzc2Z1bGx5IHN1Ym1pdCBwYXRjaGVzIGlubGluZSB1c2luZwordmFyaW91cyBtYWlsZXJzLgorCitHTWFpbAorfn5+fn4KK0dNYWlsIGRvZXMgbm90IGhhdmUgYW55IHdheSB0byB0dXJuIG9mZiBsaW5lIHdyYXBwaW5nIGluIHRoZSB3ZWIKK2ludGVyZmFjZSwgc28gaXQgd2lsbCBtYW5nbGUgYW55IGVtYWlscyB0aGF0IHlvdSBzZW5kLiAgWW91IGNhbiBob3dldmVyCit1c2UgImdpdCBzZW5kLWVtYWlsIiBhbmQgc2VuZCB5b3VyIHBhdGNoZXMgdGhyb3VnaCB0aGUgR01haWwgU01UUCBzZXJ2ZXIsIG9yCit1c2UgYW55IElNQVAgZW1haWwgY2xpZW50IHRvIGNvbm5lY3QgdG8gdGhlIGdvb2dsZSBJTUFQIHNlcnZlciBhbmQgZm9yd2FyZAordGhlIGVtYWlscyB0aHJvdWdoIHRoYXQuCisKK0ZvciBoaW50cyBvbiB1c2luZyAnZ2l0IHNlbmQtZW1haWwnIHRvIHNlbmQgeW91ciBwYXRjaGVzIHRocm91Z2ggdGhlCitHTWFpbCBTTVRQIHNlcnZlciwgc2VlIHRoZSBFWEFNUExFIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXS4KKworRm9yIGhpbnRzIG9uIHN1Ym1pc3Npb24gdXNpbmcgdGhlIElNQVAgaW50ZXJmYWNlLCBzZWUgdGhlIEVYQU1QTEUKK3NlY3Rpb24gb2YgbGlua2dpdDpnaXQtaW1hcC1zZW5kWzFdLgorCitUaHVuZGVyYmlyZAorfn5+fn5+fn5+fn4KK0J5IGRlZmF1bHQsIFRodW5kZXJiaXJkIHdpbGwgYm90aCB3cmFwIGVtYWlscyBhcyB3ZWxsIGFzIGZsYWcKK3RoZW0gYXMgYmVpbmcgJ2Zvcm1hdD1mbG93ZWQnLCBib3RoIG9mIHdoaWNoIHdpbGwgbWFrZSB0aGUKK3Jlc3VsdGluZyBlbWFpbCB1bnVzYWJsZSBieSBHaXQuCisKK1RoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgYXBwcm9hY2hlczogdXNlIGFuIGFkZC1vbiB0byB0dXJuIG9mZiBsaW5lIHdyYXBzLAorY29uZmlndXJlIFRodW5kZXJiaXJkIHRvIG5vdCBtYW5nbGUgcGF0Y2hlcywgb3IgdXNlCithbiBleHRlcm5hbCBlZGl0b3IgdG8ga2VlcCBUaHVuZGVyYmlyZCBmcm9tIG1hbmdsaW5nIHRoZSBwYXRjaGVzLgorCitBcHByb2FjaCAjMSAoYWRkLW9uKQorXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworSW5zdGFsbCB0aGUgVG9nZ2xlIFdvcmQgV3JhcCBhZGQtb24gdGhhdCBpcyBhdmFpbGFibGUgZnJvbQoraHR0cHM6Ly9hZGRvbnMubW96aWxsYS5vcmcvdGh1bmRlcmJpcmQvYWRkb24vdG9nZ2xlLXdvcmQtd3JhcC8KK0l0IGFkZHMgYSBtZW51IGVudHJ5ICJFbmFibGUgV29yZCBXcmFwIiBpbiB0aGUgY29tcG9zZXIncyAiT3B0aW9ucyIgbWVudQordGhhdCB5b3UgY2FuIHRpY2sgb2ZmLiBOb3cgeW91IGNhbiBjb21wb3NlIHRoZSBtZXNzYWdlIGFzIHlvdSBvdGhlcndpc2UgZG8KKyhjdXQgKyBwYXN0ZSwgJ2dpdCBmb3JtYXQtcGF0Y2gnIHwgJ2dpdCBpbWFwLXNlbmQnLCBldGMpLCBidXQgeW91IGhhdmUgdG8KK2luc2VydCBsaW5lIGJyZWFrcyBtYW51YWxseSBpbiBhbnkgdGV4dCB0aGF0IHlvdSB0eXBlLgorCitBcHByb2FjaCAjMiAoY29uZmlndXJhdGlvbikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorVGhyZWUgc3RlcHM6CisKKzEuIENvbmZpZ3VyZSB5b3VyIG1haWwgc2VydmVyIGNvbXBvc2l0aW9uIGFzIHBsYWluIHRleHQ6CisgICBFZGl0Li4uQWNjb3VudCBTZXR0aW5ncy4uLkNvbXBvc2l0aW9uICYgQWRkcmVzc2luZywKKyAgIHVuY2hlY2sgIkNvbXBvc2UgTWVzc2FnZXMgaW4gSFRNTCIuCisKKzIuIENvbmZpZ3VyZSB5b3VyIGdlbmVyYWwgY29tcG9zaXRpb24gd2luZG93IHRvIG5vdCB3cmFwLgorKworSW4gVGh1bmRlcmJpcmQgMjoKK0VkaXQuLlByZWZlcmVuY2VzLi5Db21wb3NpdGlvbiwgd3JhcCBwbGFpbiB0ZXh0IG1lc3NhZ2VzIGF0IDAKKysKK0luIFRodW5kZXJiaXJkIDM6CitFZGl0Li5QcmVmZXJlbmNlcy4uQWR2YW5jZWQuLkNvbmZpZyBFZGl0b3IuICBTZWFyY2ggZm9yCisibWFpbC53cmFwX2xvbmdfbGluZXMiLgorVG9nZ2xlIGl0IHRvIG1ha2Ugc3VyZSBpdCBpcyBzZXQgdG8gYGZhbHNlYC4gQWxzbywgc2VhcmNoIGZvcgorIm1haWxuZXdzLndyYXBsZW5ndGgiIGFuZCBzZXQgdGhlIHZhbHVlIHRvIDAuCisKKzMuIERpc2FibGUgdGhlIHVzZSBvZiBmb3JtYXQ9Zmxvd2VkOgorRWRpdC4uUHJlZmVyZW5jZXMuLkFkdmFuY2VkLi5Db25maWcgRWRpdG9yLiAgU2VhcmNoIGZvcgorIm1haWxuZXdzLnNlbmRfcGxhaW50ZXh0X2Zsb3dlZCIuCitUb2dnbGUgaXQgdG8gbWFrZSBzdXJlIGl0IGlzIHNldCB0byBgZmFsc2VgLgorCitBZnRlciB0aGF0IGlzIGRvbmUsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBjb21wb3NlIGVtYWlsIGFzIHlvdQorb3RoZXJ3aXNlIHdvdWxkIChjdXQgKyBwYXN0ZSwgJ2dpdCBmb3JtYXQtcGF0Y2gnIHwgJ2dpdCBpbWFwLXNlbmQnLCBldGMpLAorYW5kIHRoZSBwYXRjaGVzIHdpbGwgbm90IGJlIG1hbmdsZWQuCisKK0FwcHJvYWNoICMzIChleHRlcm5hbCBlZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgZm9sbG93aW5nIFRodW5kZXJiaXJkIGV4dGVuc2lvbnMgYXJlIG5lZWRlZDoKK0Fib3V0Q29uZmlnIGZyb20gaHR0cDovL2Fib3V0Y29uZmlnLm1vemRldi5vcmcvIGFuZAorRXh0ZXJuYWwgRWRpdG9yIGZyb20gaHR0cDovL2dsb2JzLm9yZy9hcnRpY2xlcy5waHA/bG5nPWVuJnBnPTgKKworMS4gUHJlcGFyZSB0aGUgcGF0Y2ggYXMgYSB0ZXh0IGZpbGUgdXNpbmcgeW91ciBtZXRob2Qgb2YgY2hvaWNlLgorCisyLiBCZWZvcmUgb3BlbmluZyBhIGNvbXBvc2Ugd2luZG93LCB1c2UgRWRpdC0+QWNjb3VudCBTZXR0aW5ncyB0bworICAgdW5jaGVjayB0aGUgIkNvbXBvc2UgbWVzc2FnZXMgaW4gSFRNTCBmb3JtYXQiIHNldHRpbmcgaW4gdGhlCisgICAiQ29tcG9zaXRpb24gJiBBZGRyZXNzaW5nIiBwYW5lbCBvZiB0aGUgYWNjb3VudCB0byBiZSB1c2VkIHRvCisgICBzZW5kIHRoZSBwYXRjaC4KKworMy4gSW4gdGhlIG1haW4gVGh1bmRlcmJpcmQgd2luZG93LCAnYmVmb3JlJyB5b3Ugb3BlbiB0aGUgY29tcG9zZQorICAgd2luZG93IGZvciB0aGUgcGF0Y2gsIHVzZSBUb29scy0+YWJvdXQ6Y29uZmlnIHRvIHNldCB0aGUKKyAgIGZvbGxvd2luZyB0byB0aGUgaW5kaWNhdGVkIHZhbHVlczoKKysKKy0tLS0tLS0tLS0KKwltYWlsbmV3cy5zZW5kX3BsYWludGV4dF9mbG93ZWQgID0+IGZhbHNlCisJbWFpbG5ld3Mud3JhcGxlbmd0aCAgICAgICAgICAgICA9PiAwCistLS0tLS0tLS0tCisKKzQuIE9wZW4gYSBjb21wb3NlIHdpbmRvdyBhbmQgY2xpY2sgdGhlIGV4dGVybmFsIGVkaXRvciBpY29uLgorCis1LiBJbiB0aGUgZXh0ZXJuYWwgZWRpdG9yIHdpbmRvdywgcmVhZCBpbiB0aGUgcGF0Y2ggZmlsZSBhbmQgZXhpdAorICAgdGhlIGVkaXRvciBub3JtYWxseS4KKworU2lkZSBub3RlOiBpdCBtYXkgYmUgcG9zc2libGUgdG8gZG8gc3RlcCAyIHdpdGgKK2Fib3V0OmNvbmZpZyBhbmQgdGhlIGZvbGxvd2luZyBzZXR0aW5ncyBidXQgbm8gb25lJ3MgdHJpZWQgeWV0LgorCistLS0tLS0tLS0tCisJbWFpbC5odG1sX2NvbXBvc2UgICAgICAgICAgICAgICAgICAgICAgID0+IGZhbHNlCisJbWFpbC5pZGVudGl0eS5kZWZhdWx0LmNvbXBvc2VfaHRtbCAgICAgID0+IGZhbHNlCisJbWFpbC5pZGVudGl0eS5pZD8uY29tcG9zZV9odG1sICAgICAgICAgID0+IGZhbHNlCistLS0tLS0tLS0tCisKK1RoZXJlIGlzIGEgc2NyaXB0IGluIGNvbnRyaWIvdGh1bmRlcmJpcmQtcGF0Y2gtaW5saW5lIHdoaWNoIGNhbiBoZWxwCit5b3UgaW5jbHVkZSBwYXRjaGVzIHdpdGggVGh1bmRlcmJpcmQgaW4gYW4gZWFzeSB3YXkuIFRvIHVzZSBpdCwgZG8gdGhlCitzdGVwcyBhYm92ZSBhbmQgdGhlbiB1c2UgdGhlIHNjcmlwdCBhcyB0aGUgZXh0ZXJuYWwgZWRpdG9yLgorCitLTWFpbAorfn5+fn4KK1RoaXMgc2hvdWxkIGhlbHAgeW91IHRvIHN1Ym1pdCBwYXRjaGVzIGlubGluZSB1c2luZyBLTWFpbC4KKworMS4gUHJlcGFyZSB0aGUgcGF0Y2ggYXMgYSB0ZXh0IGZpbGUuCisKKzIuIENsaWNrIG9uIE5ldyBNYWlsLgorCiszLiBHbyB1bmRlciAiT3B0aW9ucyIgaW4gdGhlIENvbXBvc2VyIHdpbmRvdyBhbmQgYmUgc3VyZSB0aGF0CisgICAiV29yZCB3cmFwIiBpcyBub3Qgc2V0LgorCis0LiBVc2UgTWVzc2FnZSAtPiBJbnNlcnQgZmlsZS4uLiBhbmQgaW5zZXJ0IHRoZSBwYXRjaC4KKworNS4gQmFjayBpbiB0aGUgY29tcG9zZSB3aW5kb3c6IGFkZCB3aGF0ZXZlciBvdGhlciB0ZXh0IHlvdSB3aXNoIHRvIHRoZQorICAgbWVzc2FnZSwgY29tcGxldGUgdGhlIGFkZHJlc3NpbmcgYW5kIHN1YmplY3QgZmllbGRzLCBhbmQgcHJlc3Mgc2VuZC4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBFeHRyYWN0IGNvbW1pdHMgYmV0d2VlbiByZXZpc2lvbnMgUjEgYW5kIFIyLCBhbmQgYXBwbHkgdGhlbSBvbiB0b3Agb2YKK3RoZSBjdXJyZW50IGJyYW5jaCB1c2luZyAnZ2l0IGFtJyB0byBjaGVycnktcGljayB0aGVtOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggLWsgLS1zdGRvdXQgUjEuLlIyIHwgZ2l0IGFtIC0zIC1rCistLS0tLS0tLS0tLS0KKworKiBFeHRyYWN0IGFsbCBjb21taXRzIHdoaWNoIGFyZSBpbiB0aGUgY3VycmVudCBicmFuY2ggYnV0IG5vdCBpbiB0aGUKK29yaWdpbiBicmFuY2g6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCBvcmlnaW4KKy0tLS0tLS0tLS0tLQorKworRm9yIGVhY2ggY29tbWl0IGEgc2VwYXJhdGUgZmlsZSBpcyBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworKiBFeHRyYWN0IGFsbCBjb21taXRzIHRoYXQgbGVhZCB0byAnb3JpZ2luJyBzaW5jZSB0aGUgaW5jZXB0aW9uIG9mIHRoZQorcHJvamVjdDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIC0tcm9vdCBvcmlnaW4KKy0tLS0tLS0tLS0tLQorCisqIFRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBvbmU6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGZvcm1hdC1wYXRjaCAtTSAtQiBvcmlnaW4KKy0tLS0tLS0tLS0tLQorKworQWRkaXRpb25hbGx5LCBpdCBkZXRlY3RzIGFuZCBoYW5kbGVzIHJlbmFtZXMgYW5kIGNvbXBsZXRlIHJld3JpdGVzCitpbnRlbGxpZ2VudGx5IHRvIHByb2R1Y2UgYSByZW5hbWluZyBwYXRjaC4gIEEgcmVuYW1pbmcgcGF0Y2ggcmVkdWNlcwordGhlIGFtb3VudCBvZiB0ZXh0IG91dHB1dCwgYW5kIGdlbmVyYWxseSBtYWtlcyBpdCBlYXNpZXIgdG8gcmV2aWV3LgorTm90ZSB0aGF0IG5vbi1HaXQgInBhdGNoIiBwcm9ncmFtcyB3b24ndCB1bmRlcnN0YW5kIHJlbmFtaW5nIHBhdGNoZXMsIHNvCit1c2UgaXQgb25seSB3aGVuIHlvdSBrbm93IHRoZSByZWNpcGllbnQgdXNlcyBHaXQgdG8gYXBwbHkgeW91ciBwYXRjaC4KKworKiBFeHRyYWN0IHRocmVlIHRvcG1vc3QgY29tbWl0cyBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgZm9ybWF0IHRoZW0KK2FzIGUtbWFpbGFibGUgcGF0Y2hlczoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIC0zCistLS0tLS0tLS0tLS0KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1hbVsxXSwgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWZzY2stb2JqZWN0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLW9iamVjdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYzRiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLW9iamVjdHMudHh0CkBAIC0wLDAgKzEsMjIgQEAKK2dpdC1mc2NrLW9iamVjdHMoMSkKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWZzY2stb2JqZWN0cyAtIFZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBmc2NrLW9iamVjdHMnIC4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBpcyBhIHN5bm9ueW0gZm9yIGxpbmtnaXQ6Z2l0LWZzY2tbMV0uICBQbGVhc2UgcmVmZXIgdG8gdGhlCitkb2N1bWVudGF0aW9uIG9mIHRoYXQgY29tbWFuZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWZzY2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZWU5MmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1mc2NrLnR4dApAQCAtMCwwICsxLDE1MiBAQAorZ2l0LWZzY2soMSkKKz09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1mc2NrIC0gVmVyaWZpZXMgdGhlIGNvbm5lY3Rpdml0eSBhbmQgdmFsaWRpdHkgb2YgdGhlIG9iamVjdHMgaW4gdGhlIGRhdGFiYXNlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGZzY2snIFstLXRhZ3NdIFstLXJvb3RdIFstLXVucmVhY2hhYmxlXSBbLS1jYWNoZV0gWy0tbm8tcmVmbG9nc10KKwkgWy0tW25vLV1mdWxsXSBbLS1zdHJpY3RdIFstLXZlcmJvc2VdIFstLWxvc3QtZm91bmRdCisJIFstLVtuby1dZGFuZ2xpbmddIFstLVtuby1dcHJvZ3Jlc3NdIFstLWNvbm5lY3Rpdml0eS1vbmx5XSBbPG9iamVjdD4qXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1ZlcmlmaWVzIHRoZSBjb25uZWN0aXZpdHkgYW5kIHZhbGlkaXR5IG9mIHRoZSBvYmplY3RzIGluIHRoZSBkYXRhYmFzZS4KKworT1BUSU9OUworLS0tLS0tLQorPG9iamVjdD46OgorCUFuIG9iamVjdCB0byB0cmVhdCBhcyB0aGUgaGVhZCBvZiBhbiB1bnJlYWNoYWJpbGl0eSB0cmFjZS4KKysKK0lmIG5vIG9iamVjdHMgYXJlIGdpdmVuLCAnZ2l0IGZzY2snIGRlZmF1bHRzIHRvIHVzaW5nIHRoZQoraW5kZXggZmlsZSwgYWxsIFNIQS0xIHJlZmVyZW5jZXMgaW4gYHJlZnNgIG5hbWVzcGFjZSwgYW5kIGFsbCByZWZsb2dzCisodW5sZXNzIC0tbm8tcmVmbG9ncyBpcyBnaXZlbikgYXMgaGVhZHMuCisKKy0tdW5yZWFjaGFibGU6OgorCVByaW50IG91dCBvYmplY3RzIHRoYXQgZXhpc3QgYnV0IHRoYXQgYXJlbid0IHJlYWNoYWJsZSBmcm9tIGFueQorCW9mIHRoZSByZWZlcmVuY2Ugbm9kZXMuCisKKy0tW25vLV1kYW5nbGluZzo6CisJUHJpbnQgb2JqZWN0cyB0aGF0IGV4aXN0IGJ1dCB0aGF0IGFyZSBuZXZlciAnZGlyZWN0bHknIHVzZWQgKGRlZmF1bHQpLgorCWAtLW5vLWRhbmdsaW5nYCBjYW4gYmUgdXNlZCB0byBvbWl0IHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3V0cHV0LgorCistLXJvb3Q6OgorCVJlcG9ydCByb290IG5vZGVzLgorCistLXRhZ3M6OgorCVJlcG9ydCB0YWdzLgorCistLWNhY2hlOjoKKwlDb25zaWRlciBhbnkgb2JqZWN0IHJlY29yZGVkIGluIHRoZSBpbmRleCBhbHNvIGFzIGEgaGVhZCBub2RlIGZvcgorCWFuIHVucmVhY2hhYmlsaXR5IHRyYWNlLgorCistLW5vLXJlZmxvZ3M6OgorCURvIG5vdCBjb25zaWRlciBjb21taXRzIHRoYXQgYXJlIHJlZmVyZW5jZWQgb25seSBieSBhbgorCWVudHJ5IGluIGEgcmVmbG9nIHRvIGJlIHJlYWNoYWJsZS4gIFRoaXMgb3B0aW9uIGlzIG1lYW50CisJb25seSB0byBzZWFyY2ggZm9yIGNvbW1pdHMgdGhhdCB1c2VkIHRvIGJlIGluIGEgcmVmLCBidXQKKwlub3cgYXJlbid0LCBidXQgYXJlIHN0aWxsIGluIHRoYXQgY29ycmVzcG9uZGluZyByZWZsb2cuCisKKy0tZnVsbDo6CisJQ2hlY2sgbm90IGp1c3Qgb2JqZWN0cyBpbiBHSVRfT0JKRUNUX0RJUkVDVE9SWQorCSgkR0lUX0RJUi9vYmplY3RzKSwgYnV0IGFsc28gdGhlIG9uZXMgZm91bmQgaW4gYWx0ZXJuYXRlCisJb2JqZWN0IHBvb2xzIGxpc3RlZCBpbiBHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUworCW9yICRHSVRfRElSL29iamVjdHMvaW5mby9hbHRlcm5hdGVzLAorCWFuZCBpbiBwYWNrZWQgR2l0IGFyY2hpdmVzIGZvdW5kIGluICRHSVRfRElSL29iamVjdHMvcGFjaworCWFuZCBjb3JyZXNwb25kaW5nIHBhY2sgc3ViZGlyZWN0b3JpZXMgaW4gYWx0ZXJuYXRlCisJb2JqZWN0IHBvb2xzLiAgVGhpcyBpcyBub3cgZGVmYXVsdDsgeW91IGNhbiB0dXJuIGl0IG9mZgorCXdpdGggLS1uby1mdWxsLgorCistLWNvbm5lY3Rpdml0eS1vbmx5OjoKKwlDaGVjayBvbmx5IHRoZSBjb25uZWN0aXZpdHkgb2YgdGFncywgY29tbWl0cyBhbmQgdHJlZSBvYmplY3RzLiBCeQorCWF2b2lkaW5nIHRvIHVucGFjayBibG9icywgdGhpcyBzcGVlZHMgdXAgdGhlIG9wZXJhdGlvbiwgYXQgdGhlCisJZXhwZW5zZSBvZiBtaXNzaW5nIGNvcnJ1cHQgb2JqZWN0cyBvciBvdGhlciBwcm9ibGVtYXRpYyBpc3N1ZXMuCisKKy0tc3RyaWN0OjoKKwlFbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmcsIG5hbWVseSB0byBjYXRjaCBhIGZpbGUgbW9kZQorCXJlY29yZGVkIHdpdGggZyt3IGJpdCBzZXQsIHdoaWNoIHdhcyBjcmVhdGVkIGJ5IG9sZGVyCisJdmVyc2lvbnMgb2YgR2l0LiAgRXhpc3RpbmcgcmVwb3NpdG9yaWVzLCBpbmNsdWRpbmcgdGhlCisJTGludXgga2VybmVsLCBHaXQgaXRzZWxmLCBhbmQgc3BhcnNlIHJlcG9zaXRvcnkgaGF2ZSBvbGQKKwlvYmplY3RzIHRoYXQgdHJpZ2dlcnMgdGhpcyBjaGVjaywgYnV0IGl0IGlzIHJlY29tbWVuZGVkCisJdG8gY2hlY2sgbmV3IHByb2plY3RzIHdpdGggdGhpcyBmbGFnLgorCistLXZlcmJvc2U6OgorCUJlIGNoYXR0eS4KKworLS1sb3N0LWZvdW5kOjoKKwlXcml0ZSBkYW5nbGluZyBvYmplY3RzIGludG8gLmdpdC9sb3N0LWZvdW5kL2NvbW1pdC8gb3IKKwkuZ2l0L2xvc3QtZm91bmQvb3RoZXIvLCBkZXBlbmRpbmcgb24gdHlwZS4gIElmIHRoZSBvYmplY3QgaXMKKwlhIGJsb2IsIHRoZSBjb250ZW50cyBhcmUgd3JpdHRlbiBpbnRvIHRoZSBmaWxlLCByYXRoZXIgdGhhbgorCWl0cyBvYmplY3QgbmFtZS4KKworLS1bbm8tXXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBieQorCWRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MKKwktLW5vLXByb2dyZXNzIG9yIC0tdmVyYm9zZSBpcyBzcGVjaWZpZWQuIC0tcHJvZ3Jlc3MgZm9yY2VzCisJcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYgdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBpcyBub3QKKwlkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgorCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK2dpdC1mc2NrIHRlc3RzIFNIQS0xIGFuZCBnZW5lcmFsIG9iamVjdCBzYW5pdHksIGFuZCBpdCBkb2VzIGZ1bGwgdHJhY2tpbmcKK29mIHRoZSByZXN1bHRpbmcgcmVhY2hhYmlsaXR5IGFuZCBldmVyeXRoaW5nIGVsc2UuIEl0IHByaW50cyBvdXQgYW55Citjb3JydXB0aW9uIGl0IGZpbmRzIChtaXNzaW5nIG9yIGJhZCBvYmplY3RzKSwgYW5kIGlmIHlvdSB1c2UgdGhlCisnLS11bnJlYWNoYWJsZScgZmxhZyBpdCB3aWxsIGFsc28gcHJpbnQgb3V0IG9iamVjdHMgdGhhdCBleGlzdCBidXQgdGhhdAorYXJlbid0IHJlYWNoYWJsZSBmcm9tIGFueSBvZiB0aGUgc3BlY2lmaWVkIGhlYWQgbm9kZXMgKG9yIHRoZSBkZWZhdWx0CitzZXQsIGFzIG1lbnRpb25lZCBhYm92ZSkuCisKK0FueSBjb3JydXB0IG9iamVjdHMgeW91IHdpbGwgaGF2ZSB0byBmaW5kIGluIGJhY2t1cHMgb3Igb3RoZXIgYXJjaGl2ZXMKKyhpLmUuLCB5b3UgY2FuIGp1c3QgcmVtb3ZlIHRoZW0gYW5kIGRvIGFuICdyc3luYycgd2l0aCBzb21lIG90aGVyIHNpdGUgaW4KK3RoZSBob3BlcyB0aGF0IHNvbWVib2R5IGVsc2UgaGFzIHRoZSBvYmplY3QgeW91IGhhdmUgY29ycnVwdGVkKS4KKworRXh0cmFjdGVkIERpYWdub3N0aWNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXhwZWN0IGRhbmdsaW5nIGNvbW1pdHMgLSBwb3RlbnRpYWwgaGVhZHMgLSBkdWUgdG8gbGFjayBvZiBoZWFkIGluZm9ybWF0aW9uOjoKKwlZb3UgaGF2ZW4ndCBzcGVjaWZpZWQgYW55IG5vZGVzIGFzIGhlYWRzIHNvIGl0IHdvbid0IGJlCisJcG9zc2libGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHVuLXBhcmVudGVkIGNvbW1pdHMgYW5kCisJcm9vdCBub2Rlcy4KKworbWlzc2luZyBzaGExIGRpcmVjdG9yeSAnPGRpcj4nOjoKKwlUaGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIHNoYTEgb2JqZWN0cyBpcyBtaXNzaW5nLgorCit1bnJlYWNoYWJsZSA8dHlwZT4gPG9iamVjdD46OgorCVRoZSA8dHlwZT4gb2JqZWN0IDxvYmplY3Q+LCBpc24ndCBhY3R1YWxseSByZWZlcnJlZCB0byBkaXJlY3RseQorCW9yIGluZGlyZWN0bHkgaW4gYW55IG9mIHRoZSB0cmVlcyBvciBjb21taXRzIHNlZW4uIFRoaXMgY2FuCisJbWVhbiB0aGF0IHRoZXJlJ3MgYW5vdGhlciByb290IG5vZGUgdGhhdCB5b3UncmUgbm90IHNwZWNpZnlpbmcKKwlvciB0aGF0IHRoZSB0cmVlIGlzIGNvcnJ1cHQuIElmIHlvdSBoYXZlbid0IG1pc3NlZCBhIHJvb3Qgbm9kZQorCXRoZW4geW91IG1pZ2h0IGFzIHdlbGwgZGVsZXRlIHVucmVhY2hhYmxlIG5vZGVzIHNpbmNlIHRoZXkKKwljYW4ndCBiZSB1c2VkLgorCittaXNzaW5nIDx0eXBlPiA8b2JqZWN0Pjo6CisJVGhlIDx0eXBlPiBvYmplY3QgPG9iamVjdD4sIGlzIHJlZmVycmVkIHRvIGJ1dCBpc24ndCBwcmVzZW50IGluCisJdGhlIGRhdGFiYXNlLgorCitkYW5nbGluZyA8dHlwZT4gPG9iamVjdD46OgorCVRoZSA8dHlwZT4gb2JqZWN0IDxvYmplY3Q+LCBpcyBwcmVzZW50IGluIHRoZSBkYXRhYmFzZSBidXQgbmV2ZXIKKwknZGlyZWN0bHknIHVzZWQuIEEgZGFuZ2xpbmcgY29tbWl0IGNvdWxkIGJlIGEgcm9vdCBub2RlLgorCitzaGExIG1pc21hdGNoIDxvYmplY3Q+OjoKKwlUaGUgZGF0YWJhc2UgaGFzIGFuIG9iamVjdCB3aG8ncyBzaGExIGRvZXNuJ3QgbWF0Y2ggdGhlCisJZGF0YWJhc2UgdmFsdWUuCisJVGhpcyBpbmRpY2F0ZXMgYSBzZXJpb3VzIGRhdGEgaW50ZWdyaXR5IHByb2JsZW0uCisKK0Vudmlyb25tZW50IFZhcmlhYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dJVF9PQkpFQ1RfRElSRUNUT1JZOjoKKwl1c2VkIHRvIHNwZWNpZnkgdGhlIG9iamVjdCBkYXRhYmFzZSByb290ICh1c3VhbGx5ICRHSVRfRElSL29iamVjdHMpCisKK0dJVF9JTkRFWF9GSUxFOjoKKwl1c2VkIHRvIHNwZWNpZnkgdGhlIGluZGV4IGZpbGUgb2YgdGhlIGluZGV4CisKK0dJVF9BTFRFUk5BVEVfT0JKRUNUX0RJUkVDVE9SSUVTOjoKKwl1c2VkIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBvYmplY3QgZGF0YWJhc2Ugcm9vdHMgKHVzdWFsbHkgdW5zZXQpCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZ2MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMTUxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1nYy50eHQKQEAgLTAsMCArMSwxNjggQEAKK2dpdC1nYygxKQorPT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1nYyAtIENsZWFudXAgdW5uZWNlc3NhcnkgZmlsZXMgYW5kIG9wdGltaXplIHRoZSBsb2NhbCByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGdjJyBbLS1hZ2dyZXNzaXZlXSBbLS1hdXRvXSBbLS1xdWlldF0gWy0tcHJ1bmU9PGRhdGU+IHwgLS1uby1wcnVuZV0gWy0tZm9yY2VdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUnVucyBhIG51bWJlciBvZiBob3VzZWtlZXBpbmcgdGFza3Mgd2l0aGluIHRoZSBjdXJyZW50IHJlcG9zaXRvcnksCitzdWNoIGFzIGNvbXByZXNzaW5nIGZpbGUgcmV2aXNpb25zICh0byByZWR1Y2UgZGlzayBzcGFjZSBhbmQgaW5jcmVhc2UKK3BlcmZvcm1hbmNlKSBhbmQgcmVtb3ZpbmcgdW5yZWFjaGFibGUgb2JqZWN0cyB3aGljaCBtYXkgaGF2ZSBiZWVuCitjcmVhdGVkIGZyb20gcHJpb3IgaW52b2NhdGlvbnMgb2YgJ2dpdCBhZGQnLgorCitVc2VycyBhcmUgZW5jb3VyYWdlZCB0byBydW4gdGhpcyB0YXNrIG9uIGEgcmVndWxhciBiYXNpcyB3aXRoaW4KK2VhY2ggcmVwb3NpdG9yeSB0byBtYWludGFpbiBnb29kIGRpc2sgc3BhY2UgdXRpbGl6YXRpb24gYW5kIGdvb2QKK29wZXJhdGluZyBwZXJmb3JtYW5jZS4KKworU29tZSBnaXQgY29tbWFuZHMgbWF5IGF1dG9tYXRpY2FsbHkgcnVuICdnaXQgZ2MnOyBzZWUgdGhlIGAtLWF1dG9gIGZsYWcKK2JlbG93IGZvciBkZXRhaWxzLiBJZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZyBhbmQgYWxsIHlvdSB3YW50IGlzIHRvCitkaXNhYmxlIHRoaXMgYmVoYXZpb3IgcGVybWFuZW50bHkgd2l0aG91dCBmdXJ0aGVyIGNvbnNpZGVyYXRpb25zLCBqdXN0IGRvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgZ2MuYXV0byAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1hZ2dyZXNzaXZlOjoKKwlVc3VhbGx5ICdnaXQgZ2MnIHJ1bnMgdmVyeSBxdWlja2x5IHdoaWxlIHByb3ZpZGluZyBnb29kIGRpc2sKKwlzcGFjZSB1dGlsaXphdGlvbiBhbmQgcGVyZm9ybWFuY2UuICBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlCisJJ2dpdCBnYycgdG8gbW9yZSBhZ2dyZXNzaXZlbHkgb3B0aW1pemUgdGhlIHJlcG9zaXRvcnkgYXQgdGhlIGV4cGVuc2UKKwlvZiB0YWtpbmcgbXVjaCBtb3JlIHRpbWUuICBUaGUgZWZmZWN0cyBvZiB0aGlzIG9wdGltaXphdGlvbiBhcmUKKwlwZXJzaXN0ZW50LCBzbyB0aGlzIG9wdGlvbiBvbmx5IG5lZWRzIHRvIGJlIHVzZWQgb2NjYXNpb25hbGx5OyBldmVyeQorCWZldyBodW5kcmVkIGNoYW5nZXNldHMgb3Igc28uCisKKy0tYXV0bzo6CisJV2l0aCB0aGlzIG9wdGlvbiwgJ2dpdCBnYycgY2hlY2tzIHdoZXRoZXIgYW55IGhvdXNla2VlcGluZyBpcworCXJlcXVpcmVkOyBpZiBub3QsIGl0IGV4aXRzIHdpdGhvdXQgcGVyZm9ybWluZyBhbnkgd29yay4KKwlTb21lIGdpdCBjb21tYW5kcyBydW4gYGdpdCBnYyAtLWF1dG9gIGFmdGVyIHBlcmZvcm1pbmcKKwlvcGVyYXRpb25zIHRoYXQgY291bGQgY3JlYXRlIG1hbnkgbG9vc2Ugb2JqZWN0cy4KKysKK0hvdXNla2VlcGluZyBpcyByZXF1aXJlZCBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgbG9vc2Ugb2JqZWN0cyBvcgordG9vIG1hbnkgcGFja3MgaW4gdGhlIHJlcG9zaXRvcnkuIElmIHRoZSBudW1iZXIgb2YgbG9vc2Ugb2JqZWN0cworZXhjZWVkcyB0aGUgdmFsdWUgb2YgdGhlIGBnYy5hdXRvYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB0aGVuCithbGwgbG9vc2Ugb2JqZWN0cyBhcmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBwYWNrIHVzaW5nCitgZ2l0IHJlcGFjayAtZCAtbGAuICBTZXR0aW5nIHRoZSB2YWx1ZSBvZiBgZ2MuYXV0b2AgdG8gMAorZGlzYWJsZXMgYXV0b21hdGljIHBhY2tpbmcgb2YgbG9vc2Ugb2JqZWN0cy4KKysKK0lmIHRoZSBudW1iZXIgb2YgcGFja3MgZXhjZWVkcyB0aGUgdmFsdWUgb2YgYGdjLmF1dG9QYWNrTGltaXRgLAordGhlbiBleGlzdGluZyBwYWNrcyAoZXhjZXB0IHRob3NlIG1hcmtlZCB3aXRoIGEgYC5rZWVwYCBmaWxlKQorYXJlIGNvbnNvbGlkYXRlZCBpbnRvIGEgc2luZ2xlIHBhY2sgYnkgdXNpbmcgdGhlIGAtQWAgb3B0aW9uIG9mCisnZ2l0IHJlcGFjaycuIFNldHRpbmcgYGdjLmF1dG9QYWNrTGltaXRgIHRvIDAgZGlzYWJsZXMKK2F1dG9tYXRpYyBjb25zb2xpZGF0aW9uIG9mIHBhY2tzLgorCistLXBydW5lPTxkYXRlPjo6CisJUHJ1bmUgbG9vc2Ugb2JqZWN0cyBvbGRlciB0aGFuIGRhdGUgKGRlZmF1bHQgaXMgMiB3ZWVrcyBhZ28sCisJb3ZlcnJpZGFibGUgYnkgdGhlIGNvbmZpZyB2YXJpYWJsZSBgZ2MucHJ1bmVFeHBpcmVgKS4KKwktLXBydW5lPWFsbCBwcnVuZXMgbG9vc2Ugb2JqZWN0cyByZWdhcmRsZXNzIG9mIHRoZWlyIGFnZSAoZG8KKwlub3QgdXNlIC0tcHJ1bmU9YWxsIHVubGVzcyB5b3Uga25vdyBleGFjdGx5IHdoYXQgeW91IGFyZSBkb2luZy4KKwlVbmxlc3MgdGhlIHJlcG9zaXRvcnkgaXMgcXVpZXNjZW50LCB5b3Ugd2lsbCBsb3NlIG5ld2x5IGNyZWF0ZWQKKwlvYmplY3RzIHRoYXQgaGF2ZW4ndCBiZWVuIGFuY2hvcmVkIHdpdGggdGhlIHJlZnMgYW5kIGVuZCB1cAorCWNvcnJ1cHRpbmcgeW91ciByZXBvc2l0b3J5KS4gIC0tcHJ1bmUgaXMgb24gYnkgZGVmYXVsdC4KKworLS1uby1wcnVuZTo6CisJRG8gbm90IHBydW5lIGFueSBsb29zZSBvYmplY3RzLgorCistLXF1aWV0OjoKKwlTdXBwcmVzcyBhbGwgcHJvZ3Jlc3MgcmVwb3J0cy4KKworLS1mb3JjZTo6CisJRm9yY2UgYGdpdCBnY2AgdG8gcnVuIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgYGdpdCBnY2AKKwlpbnN0YW5jZSBydW5uaW5nIG9uIHRoaXMgcmVwb3NpdG9yeS4KKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnZ2MucmVmbG9nRXhwaXJlJyBjYW4gYmUKK3NldCB0byBpbmRpY2F0ZSBob3cgbG9uZyBoaXN0b3JpY2FsIGVudHJpZXMgd2l0aGluIGVhY2ggYnJhbmNoJ3MKK3JlZmxvZyBzaG91bGQgcmVtYWluIGF2YWlsYWJsZSBpbiB0aGlzIHJlcG9zaXRvcnkuICBUaGUgc2V0dGluZyBpcworZXhwcmVzc2VkIGFzIGEgbGVuZ3RoIG9mIHRpbWUsIGZvciBleGFtcGxlICc5MCBkYXlzJyBvciAnMyBtb250aHMnLgorSXQgZGVmYXVsdHMgdG8gJzkwIGRheXMnLgorCitUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnZ2MucmVmbG9nRXhwaXJlVW5yZWFjaGFibGUnCitjYW4gYmUgc2V0IHRvIGluZGljYXRlIGhvdyBsb25nIGhpc3RvcmljYWwgcmVmbG9nIGVudHJpZXMgd2hpY2gKK2FyZSBub3QgcGFydCBvZiB0aGUgY3VycmVudCBicmFuY2ggc2hvdWxkIHJlbWFpbiBhdmFpbGFibGUgaW4KK3RoaXMgcmVwb3NpdG9yeS4gIFRoZXNlIHR5cGVzIG9mIGVudHJpZXMgYXJlIGdlbmVyYWxseSBjcmVhdGVkIGFzCithIHJlc3VsdCBvZiB1c2luZyBgZ2l0IGNvbW1pdCAtLWFtZW5kYCBvciBgZ2l0IHJlYmFzZWAgYW5kIGFyZSB0aGUKK2NvbW1pdHMgcHJpb3IgdG8gdGhlIGFtZW5kIG9yIHJlYmFzZSBvY2N1cnJpbmcuICBTaW5jZSB0aGVzZSBjaGFuZ2VzCithcmUgbm90IHBhcnQgb2YgdGhlIGN1cnJlbnQgcHJvamVjdCBtb3N0IHVzZXJzIHdpbGwgd2FudCB0byBleHBpcmUKK3RoZW0gc29vbmVyLiAgVGhpcyBvcHRpb24gZGVmYXVsdHMgdG8gJzMwIGRheXMnLgorCitUaGUgYWJvdmUgdHdvIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGNhbiBiZSBnaXZlbiB0byBhIHBhdHRlcm4uICBGb3IKK2V4YW1wbGUsIHRoaXMgc2V0cyBub24tZGVmYXVsdCBleHBpcnkgdmFsdWVzIG9ubHkgdG8gcmVtb3RlLXRyYWNraW5nCiticmFuY2hlczoKKworLS0tLS0tLS0tLS0tCitbZ2MgInJlZnMvcmVtb3Rlcy8qIl0KKwlyZWZsb2dFeHBpcmUgPSBuZXZlcgorCXJlZmxvZ0V4cGlyZVVucmVhY2hhYmxlID0gMyBkYXlzCistLS0tLS0tLS0tLS0KKworVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ2djLnJlcmVyZVJlc29sdmVkJyBpbmRpY2F0ZXMKK2hvdyBsb25nIHJlY29yZHMgb2YgY29uZmxpY3RlZCBtZXJnZSB5b3UgcmVzb2x2ZWQgZWFybGllciBhcmUKK2tlcHQuICBUaGlzIGRlZmF1bHRzIHRvIDYwIGRheXMuCisKK1RoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdnYy5yZXJlcmVVbnJlc29sdmVkJyBpbmRpY2F0ZXMKK2hvdyBsb25nIHJlY29yZHMgb2YgY29uZmxpY3RlZCBtZXJnZSB5b3UgaGF2ZSBub3QgcmVzb2x2ZWQgYXJlCitrZXB0LiAgVGhpcyBkZWZhdWx0cyB0byAxNSBkYXlzLgorCitUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnZ2MucGFja1JlZnMnIGRldGVybWluZXMgaWYKKydnaXQgZ2MnIHJ1bnMgJ2dpdCBwYWNrLXJlZnMnLiBUaGlzIGNhbiBiZSBzZXQgdG8gIm5vdGJhcmUiIHRvIGVuYWJsZQoraXQgd2l0aGluIGFsbCBub24tYmFyZSByZXBvcyBvciBpdCBjYW4gYmUgc2V0IHRvIGEgYm9vbGVhbiB2YWx1ZS4KK1RoaXMgZGVmYXVsdHMgdG8gdHJ1ZS4KKworVGhlIG9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ2djLmFnZ3Jlc3NpdmVXaW5kb3cnIGNvbnRyb2xzIGhvdworbXVjaCB0aW1lIGlzIHNwZW50IG9wdGltaXppbmcgdGhlIGRlbHRhIGNvbXByZXNzaW9uIG9mIHRoZSBvYmplY3RzIGluCit0aGUgcmVwb3NpdG9yeSB3aGVuIHRoZSAtLWFnZ3Jlc3NpdmUgb3B0aW9uIGlzIHNwZWNpZmllZC4gIFRoZSBsYXJnZXIKK3RoZSB2YWx1ZSwgdGhlIG1vcmUgdGltZSBpcyBzcGVudCBvcHRpbWl6aW5nIHRoZSBkZWx0YSBjb21wcmVzc2lvbi4gIFNlZQordGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSAtLXdpbmRvdycgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXSBmb3IKK21vcmUgZGV0YWlscy4gIFRoaXMgZGVmYXVsdHMgdG8gMjUwLgorCitTaW1pbGFybHksIHRoZSBvcHRpb25hbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdnYy5hZ2dyZXNzaXZlRGVwdGgnCitjb250cm9scyAtLWRlcHRoIG9wdGlvbiBpbiBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0uIFRoaXMgZGVmYXVsdHMgdG8gMjUwLgorCitUaGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnZ2MucHJ1bmVFeHBpcmUnIGNvbnRyb2xzIGhvdyBvbGQKK3RoZSB1bnJlZmVyZW5jZWQgbG9vc2Ugb2JqZWN0cyBoYXZlIHRvIGJlIGJlZm9yZSB0aGV5IGFyZSBwcnVuZWQuICBUaGUKK2RlZmF1bHQgaXMgIjIgd2Vla3MgYWdvIi4KKworCitOb3RlcworLS0tLS0KKworJ2dpdCBnYycgdHJpZXMgdmVyeSBoYXJkIHRvIGJlIHNhZmUgYWJvdXQgdGhlIGdhcmJhZ2UgaXQgY29sbGVjdHMuIEluCitwYXJ0aWN1bGFyLCBpdCB3aWxsIGtlZXAgbm90IG9ubHkgb2JqZWN0cyByZWZlcmVuY2VkIGJ5IHlvdXIgY3VycmVudCBzZXQKK29mIGJyYW5jaGVzIGFuZCB0YWdzLCBidXQgYWxzbyBvYmplY3RzIHJlZmVyZW5jZWQgYnkgdGhlIGluZGV4LAorcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLCByZWZzIHNhdmVkIGJ5ICdnaXQgZmlsdGVyLWJyYW5jaCcgaW4KK3JlZnMvb3JpZ2luYWwvLCBvciByZWZsb2dzICh3aGljaCBtYXkgcmVmZXJlbmNlIGNvbW1pdHMgaW4gYnJhbmNoZXMKK3RoYXQgd2VyZSBsYXRlciBhbWVuZGVkIG9yIHJld291bmQpLgorCitJZiB5b3UgYXJlIGV4cGVjdGluZyBzb21lIG9iamVjdHMgdG8gYmUgY29sbGVjdGVkIGFuZCB0aGV5IGFyZW4ndCwgY2hlY2sKK2FsbCBvZiB0aG9zZSBsb2NhdGlvbnMgYW5kIGRlY2lkZSB3aGV0aGVyIGl0IG1ha2VzIHNlbnNlIGluIHlvdXIgY2FzZSB0bworcmVtb3ZlIHRob3NlIHJlZmVyZW5jZXMuCisKK0hPT0tTCistLS0tLQorCitUaGUgJ2dpdCBnYyAtLWF1dG8nIGNvbW1hbmQgd2lsbCBydW4gdGhlICdwcmUtYXV0by1nYycgaG9vay4gIFNlZQorbGlua2dpdDpnaXRob29rc1s1XSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXBydW5lWzFdCitsaW5rZ2l0OmdpdC1yZWZsb2dbMV0KK2xpbmtnaXQ6Z2l0LXJlcGFja1sxXQorbGlua2dpdDpnaXQtcmVyZXJlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtZ2V0LXRhci1jb21taXQtaWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZ2V0LXRhci1jb21taXQtaWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNDRkODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1nZXQtdGFyLWNvbW1pdC1pZC50eHQKQEAgLTAsMCArMSwzMCBAQAorZ2l0LWdldC10YXItY29tbWl0LWlkKDEpCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWdldC10YXItY29tbWl0LWlkIC0gRXh0cmFjdCBjb21taXQgSUQgZnJvbSBhbiBhcmNoaXZlIGNyZWF0ZWQgdXNpbmcgZ2l0LWFyY2hpdmUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZ2V0LXRhci1jb21taXQtaWQnCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1JlYWQgYSB0YXIgYXJjaGl2ZSBjcmVhdGVkIGJ5ICdnaXQgYXJjaGl2ZScgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQKK2FuZCBleHRyYWN0IHRoZSBjb21taXQgSUQgc3RvcmVkIGluIGl0LiAgSXQgcmVhZHMgb25seSB0aGUgZmlyc3QKKzEwMjQgYnl0ZXMgb2YgaW5wdXQsIHRodXMgaXRzIHJ1bnRpbWUgaXMgbm90IGluZmx1ZW5jZWQgYnkgdGhlIHNpemUKK29mIHRoZSB0YXIgYXJjaGl2ZSB2ZXJ5IG11Y2guCisKK0lmIG5vIGNvbW1pdCBJRCBpcyBmb3VuZCwgJ2dpdCBnZXQtdGFyLWNvbW1pdC1pZCcgcXVpZXRseSBleGlzdHMgd2l0aCBhCityZXR1cm4gY29kZSBvZiAxLiAgVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBhcmNoaXZlIGhhZCBub3QgYmVlbiBjcmVhdGVkCit1c2luZyAnZ2l0IGFyY2hpdmUnIG9yIGlmIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgJ2dpdCBhcmNoaXZlJyBoYWQgYmVlbgorYSB0cmVlIElEIGluc3RlYWQgb2YgYSBjb21taXQgSUQgb3IgdGFnLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZ3JlcC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0NGQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWdyZXAudHh0CkBAIC0wLDAgKzEsMjg3IEBACitnaXQtZ3JlcCgxKQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWdyZXAgLSBQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4KKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZ3JlcCcgWy1hIHwgLS10ZXh0XSBbLUldIFstLXRleHRjb252XSBbLWkgfCAtLWlnbm9yZS1jYXNlXSBbLXcgfCAtLXdvcmQtcmVnZXhwXQorCSAgIFstdiB8IC0taW52ZXJ0LW1hdGNoXSBbLWh8LUhdIFstLWZ1bGwtbmFtZV0KKwkgICBbLUUgfCAtLWV4dGVuZGVkLXJlZ2V4cF0gWy1HIHwgLS1iYXNpYy1yZWdleHBdCisJICAgWy1QIHwgLS1wZXJsLXJlZ2V4cF0KKwkgICBbLUYgfCAtLWZpeGVkLXN0cmluZ3NdIFstbiB8IC0tbGluZS1udW1iZXJdCisJICAgWy1sIHwgLS1maWxlcy13aXRoLW1hdGNoZXNdIFstTCB8IC0tZmlsZXMtd2l0aG91dC1tYXRjaF0KKwkgICBbKC1PIHwgLS1vcGVuLWZpbGVzLWluLXBhZ2VyKSBbPHBhZ2VyPl1dCisJICAgWy16IHwgLS1udWxsXQorCSAgIFstYyB8IC0tY291bnRdIFstLWFsbC1tYXRjaF0gWy1xIHwgLS1xdWlldF0KKwkgICBbLS1tYXgtZGVwdGggPGRlcHRoPl0KKwkgICBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdCisJICAgWy0tYnJlYWtdIFstLWhlYWRpbmddIFstcCB8IC0tc2hvdy1mdW5jdGlvbl0KKwkgICBbLUEgPHBvc3QtY29udGV4dD5dIFstQiA8cHJlLWNvbnRleHQ+XSBbLUMgPGNvbnRleHQ+XQorCSAgIFstVyB8IC0tZnVuY3Rpb24tY29udGV4dF0KKwkgICBbLWYgPGZpbGU+XSBbLWVdIDxwYXR0ZXJuPgorCSAgIFstLWFuZHwtLW9yfC0tbm90fCh8KXwtZSA8cGF0dGVybj4uLi5dCisJICAgWyBbLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmRdIFstLWNhY2hlZCB8IC0tbm8taW5kZXggfCAtLXVudHJhY2tlZF0gfCA8dHJlZT4uLi5dCisJICAgWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitMb29rIGZvciBzcGVjaWZpZWQgcGF0dGVybnMgaW4gdGhlIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmsgdHJlZSwgYmxvYnMKK3JlZ2lzdGVyZWQgaW4gdGhlIGluZGV4IGZpbGUsIG9yIGJsb2JzIGluIGdpdmVuIHRyZWUgb2JqZWN0cy4gIFBhdHRlcm5zCithcmUgbGlzdHMgb2Ygb25lIG9yIG1vcmUgc2VhcmNoIGV4cHJlc3Npb25zIHNlcGFyYXRlZCBieSBuZXdsaW5lCitjaGFyYWN0ZXJzLiAgQW4gZW1wdHkgc3RyaW5nIGFzIHNlYXJjaCBleHByZXNzaW9uIG1hdGNoZXMgYWxsIGxpbmVzLgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworZ3JlcC5saW5lTnVtYmVyOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlICctbicgb3B0aW9uIGJ5IGRlZmF1bHQuCisKK2dyZXAucGF0dGVyblR5cGU6OgorCVNldCB0aGUgZGVmYXVsdCBtYXRjaGluZyBiZWhhdmlvci4gVXNpbmcgYSB2YWx1ZSBvZiAnYmFzaWMnLCAnZXh0ZW5kZWQnLAorCSdmaXhlZCcsIG9yICdwZXJsJyB3aWxsIGVuYWJsZSB0aGUgJy0tYmFzaWMtcmVnZXhwJywgJy0tZXh0ZW5kZWQtcmVnZXhwJywKKwknLS1maXhlZC1zdHJpbmdzJywgb3IgJy0tcGVybC1yZWdleHAnIG9wdGlvbiBhY2NvcmRpbmdseSwgd2hpbGUgdGhlCisJdmFsdWUgJ2RlZmF1bHQnIHdpbGwgcmV0dXJuIHRvIHRoZSBkZWZhdWx0IG1hdGNoaW5nIGJlaGF2aW9yLgorCitncmVwLmV4dGVuZGVkUmVnZXhwOjoKKwlJZiBzZXQgdG8gdHJ1ZSwgZW5hYmxlICctLWV4dGVuZGVkLXJlZ2V4cCcgb3B0aW9uIGJ5IGRlZmF1bHQuIFRoaXMKKwlvcHRpb24gaXMgaWdub3JlZCB3aGVuIHRoZSAnZ3JlcC5wYXR0ZXJuVHlwZScgb3B0aW9uIGlzIHNldCB0byBhIHZhbHVlCisJb3RoZXIgdGhhbiAnZGVmYXVsdCcuCisKK2dyZXAuZnVsbE5hbWU6OgorCUlmIHNldCB0byB0cnVlLCBlbmFibGUgJy0tZnVsbC1uYW1lJyBvcHRpb24gYnkgZGVmYXVsdC4KKworCitPUFRJT05TCistLS0tLS0tCistLWNhY2hlZDo6CisJSW5zdGVhZCBvZiBzZWFyY2hpbmcgdHJhY2tlZCBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLCBzZWFyY2gKKwlibG9icyByZWdpc3RlcmVkIGluIHRoZSBpbmRleCBmaWxlLgorCistLW5vLWluZGV4OjoKKwlTZWFyY2ggZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHRoYXQgaXMgbm90IG1hbmFnZWQgYnkgR2l0LgorCistLXVudHJhY2tlZDo6CisJSW4gYWRkaXRpb24gdG8gc2VhcmNoaW5nIGluIHRoZSB0cmFja2VkIGZpbGVzIGluIHRoZSB3b3JraW5nCisJdHJlZSwgc2VhcmNoIGFsc28gaW4gdW50cmFja2VkIGZpbGVzLgorCistLW5vLWV4Y2x1ZGUtc3RhbmRhcmQ6OgorCUFsc28gc2VhcmNoIGluIGlnbm9yZWQgZmlsZXMgYnkgbm90IGhvbm9yaW5nIHRoZSBgLmdpdGlnbm9yZWAKKwltZWNoYW5pc20uIE9ubHkgdXNlZnVsIHdpdGggYC0tdW50cmFja2VkYC4KKworLS1leGNsdWRlLXN0YW5kYXJkOjoKKwlEbyBub3QgcGF5IGF0dGVudGlvbiB0byBpZ25vcmVkIGZpbGVzIHNwZWNpZmllZCB2aWEgdGhlCWAuZ2l0aWdub3JlYAorCW1lY2hhbmlzbS4gIE9ubHkgdXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeQorCXdpdGggYC0tbm8taW5kZXhgLgorCistYTo6CistLXRleHQ6OgorCVByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIGlmIHRoZXkgd2VyZSB0ZXh0LgorCistLXRleHRjb252OjoKKwlIb25vciB0ZXh0Y29udiBmaWx0ZXIgc2V0dGluZ3MuCisKKy0tbm8tdGV4dGNvbnY6OgorCURvIG5vdCBob25vciB0ZXh0Y29udiBmaWx0ZXIgc2V0dGluZ3MuCisJVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworLWk6OgorLS1pZ25vcmUtY2FzZTo6CisJSWdub3JlIGNhc2UgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgcGF0dGVybnMgYW5kIHRoZQorCWZpbGVzLgorCistSTo6CisJRG9uJ3QgbWF0Y2ggdGhlIHBhdHRlcm4gaW4gYmluYXJ5IGZpbGVzLgorCistLW1heC1kZXB0aCA8ZGVwdGg+OjoKKwlGb3IgZWFjaCA8cGF0aHNwZWM+IGdpdmVuIG9uIGNvbW1hbmQgbGluZSwgZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4KKwlsZXZlbHMgb2YgZGlyZWN0b3JpZXMuIEEgbmVnYXRpdmUgdmFsdWUgbWVhbnMgbm8gbGltaXQuCisJVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpZiA8cGF0aHNwZWM+IGNvbnRhaW5zIGFjdGl2ZSB3aWxkY2FyZHMuCisJSW4gb3RoZXIgd29yZHMgaWYgImEqIiBtYXRjaGVzIGEgZGlyZWN0b3J5IG5hbWVkICJhKiIsCisJIioiIGlzIG1hdGNoZWQgbGl0ZXJhbGx5IHNvIC0tbWF4LWRlcHRoIGlzIHN0aWxsIGVmZmVjdGl2ZS4KKworLXc6OgorLS13b3JkLXJlZ2V4cDo6CisJTWF0Y2ggdGhlIHBhdHRlcm4gb25seSBhdCB3b3JkIGJvdW5kYXJ5IChlaXRoZXIgYmVnaW4gYXQgdGhlCisJYmVnaW5uaW5nIG9mIGEgbGluZSwgb3IgcHJlY2VkZWQgYnkgYSBub24td29yZCBjaGFyYWN0ZXI7IGVuZCBhdAorCXRoZSBlbmQgb2YgYSBsaW5lIG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXdvcmQgY2hhcmFjdGVyKS4KKworLXY6OgorLS1pbnZlcnQtbWF0Y2g6OgorCVNlbGVjdCBub24tbWF0Y2hpbmcgbGluZXMuCisKKy1oOjoKKy1IOjoKKwlCeSBkZWZhdWx0LCB0aGUgY29tbWFuZCBzaG93cyB0aGUgZmlsZW5hbWUgZm9yIGVhY2gKKwltYXRjaC4gIGAtaGAgb3B0aW9uIGlzIHVzZWQgdG8gc3VwcHJlc3MgdGhpcyBvdXRwdXQuCisJYC1IYCBpcyB0aGVyZSBmb3IgY29tcGxldGVuZXNzIGFuZCBkb2VzIG5vdCBkbyBhbnl0aGluZworCWV4Y2VwdCBpdCBvdmVycmlkZXMgYC1oYCBnaXZlbiBlYXJsaWVyIG9uIHRoZSBjb21tYW5kCisJbGluZS4KKworLS1mdWxsLW5hbWU6OgorCVdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnksIHRoZSBjb21tYW5kIHVzdWFsbHkKKwlvdXRwdXRzIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRoaXMKKwlvcHRpb24gZm9yY2VzIHBhdGhzIHRvIGJlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdAorCXRvcCBkaXJlY3RvcnkuCisKKy1FOjoKKy0tZXh0ZW5kZWQtcmVnZXhwOjoKKy1HOjoKKy0tYmFzaWMtcmVnZXhwOjoKKwlVc2UgUE9TSVggZXh0ZW5kZWQvYmFzaWMgcmVnZXhwIGZvciBwYXR0ZXJucy4gIERlZmF1bHQKKwlpcyB0byB1c2UgYmFzaWMgcmVnZXhwLgorCistUDo6CistLXBlcmwtcmVnZXhwOjoKKwlVc2UgUGVybC1jb21wYXRpYmxlIHJlZ2V4cCBmb3IgcGF0dGVybnMuIFJlcXVpcmVzIGxpYnBjcmUgdG8gYmUKKwljb21waWxlZCBpbi4KKworLUY6OgorLS1maXhlZC1zdHJpbmdzOjoKKwlVc2UgZml4ZWQgc3RyaW5ncyBmb3IgcGF0dGVybnMgKGRvbid0IGludGVycHJldCBwYXR0ZXJuCisJYXMgYSByZWdleCkuCisKKy1uOjoKKy0tbGluZS1udW1iZXI6OgorCVByZWZpeCB0aGUgbGluZSBudW1iZXIgdG8gbWF0Y2hpbmcgbGluZXMuCisKKy1sOjoKKy0tZmlsZXMtd2l0aC1tYXRjaGVzOjoKKy0tbmFtZS1vbmx5OjoKKy1MOjoKKy0tZmlsZXMtd2l0aG91dC1tYXRjaDo6CisJSW5zdGVhZCBvZiBzaG93aW5nIGV2ZXJ5IG1hdGNoZWQgbGluZSwgc2hvdyBvbmx5IHRoZQorCW5hbWVzIG9mIGZpbGVzIHRoYXQgY29udGFpbiAob3IgZG8gbm90IGNvbnRhaW4pIG1hdGNoZXMuCisJRm9yIGJldHRlciBjb21wYXRpYmlsaXR5IHdpdGggJ2dpdCBkaWZmJywgYC0tbmFtZS1vbmx5YCBpcyBhCisJc3lub255bSBmb3IgYC0tZmlsZXMtd2l0aC1tYXRjaGVzYC4KKworLU9bPHBhZ2VyPl06OgorLS1vcGVuLWZpbGVzLWluLXBhZ2VyWz08cGFnZXI+XTo6CisJT3BlbiB0aGUgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIChub3QgdGhlIG91dHB1dCBvZiAnZ3JlcCcpLgorCUlmIHRoZSBwYWdlciBoYXBwZW5zIHRvIGJlICJsZXNzIiBvciAidmkiLCBhbmQgdGhlIHVzZXIKKwlzcGVjaWZpZWQgb25seSBvbmUgcGF0dGVybiwgdGhlIGZpcnN0IGZpbGUgaXMgcG9zaXRpb25lZCBhdAorCXRoZSBmaXJzdCBtYXRjaCBhdXRvbWF0aWNhbGx5LiBUaGUgYHBhZ2VyYCBhcmd1bWVudCBpcworCW9wdGlvbmFsOyBpZiBzcGVjaWZpZWQsIGl0IG11c3QgYmUgc3R1Y2sgdG8gdGhlIG9wdGlvbgorCXdpdGhvdXQgYSBzcGFjZS4gSWYgYHBhZ2VyYCBpcyB1bnNwZWNpZmllZCwgdGhlIGRlZmF1bHQgcGFnZXIKKwl3aWxsIGJlIHVzZWQgKHNlZSBgY29yZS5wYWdlcmAgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworLXo6OgorLS1udWxsOjoKKwlPdXRwdXQgXDAgaW5zdGVhZCBvZiB0aGUgY2hhcmFjdGVyIHRoYXQgbm9ybWFsbHkgZm9sbG93cyBhCisJZmlsZSBuYW1lLgorCistYzo6CistLWNvdW50OjoKKwlJbnN0ZWFkIG9mIHNob3dpbmcgZXZlcnkgbWF0Y2hlZCBsaW5lLCBzaG93IHRoZSBudW1iZXIgb2YKKwlsaW5lcyB0aGF0IG1hdGNoLgorCistLWNvbG9yWz08d2hlbj5dOjoKKwlTaG93IGNvbG9yZWQgbWF0Y2hlcy4KKwlUaGUgdmFsdWUgbXVzdCBiZSBhbHdheXMgKHRoZSBkZWZhdWx0KSwgbmV2ZXIsIG9yIGF1dG8uCisKKy0tbm8tY29sb3I6OgorCVR1cm4gb2ZmIG1hdGNoIGhpZ2hsaWdodGluZywgZXZlbiB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKKwlnaXZlcyB0aGUgZGVmYXVsdCB0byBjb2xvciBvdXRwdXQuCisJU2FtZSBhcyBgLS1jb2xvcj1uZXZlcmAuCisKKy0tYnJlYWs6OgorCVByaW50IGFuIGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzLgorCistLWhlYWRpbmc6OgorCVNob3cgdGhlIGZpbGVuYW1lIGFib3ZlIHRoZSBtYXRjaGVzIGluIHRoYXQgZmlsZSBpbnN0ZWFkIG9mCisJYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc2hvd24gbGluZS4KKworLXA6OgorLS1zaG93LWZ1bmN0aW9uOjoKKwlTaG93IHRoZSBwcmVjZWRpbmcgbGluZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBuYW1lIG9mCisJdGhlIG1hdGNoLCB1bmxlc3MgdGhlIG1hdGNoaW5nIGxpbmUgaXMgYSBmdW5jdGlvbiBuYW1lIGl0c2VsZi4KKwlUaGUgbmFtZSBpcyBkZXRlcm1pbmVkIGluIHRoZSBzYW1lIHdheSBhcyAnZ2l0IGRpZmYnIHdvcmtzIG91dAorCXBhdGNoIGh1bmsgaGVhZGVycyAoc2VlICdEZWZpbmluZyBhIGN1c3RvbSBodW5rLWhlYWRlcicgaW4KKwlsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0pLgorCistPG51bT46OgorLUMgPG51bT46OgorLS1jb250ZXh0IDxudW0+OjoKKwlTaG93IDxudW0+IGxlYWRpbmcgYW5kIHRyYWlsaW5nIGxpbmVzLCBhbmQgcGxhY2UgYSBsaW5lCisJY29udGFpbmluZyBgLS1gIGJldHdlZW4gY29udGlndW91cyBncm91cHMgb2YgbWF0Y2hlcy4KKworLUEgPG51bT46OgorLS1hZnRlci1jb250ZXh0IDxudW0+OjoKKwlTaG93IDxudW0+IHRyYWlsaW5nIGxpbmVzLCBhbmQgcGxhY2UgYSBsaW5lIGNvbnRhaW5pbmcKKwlgLS1gIGJldHdlZW4gY29udGlndW91cyBncm91cHMgb2YgbWF0Y2hlcy4KKworLUIgPG51bT46OgorLS1iZWZvcmUtY29udGV4dCA8bnVtPjo6CisJU2hvdyA8bnVtPiBsZWFkaW5nIGxpbmVzLCBhbmQgcGxhY2UgYSBsaW5lIGNvbnRhaW5pbmcKKwlgLS1gIGJldHdlZW4gY29udGlndW91cyBncm91cHMgb2YgbWF0Y2hlcy4KKworLVc6OgorLS1mdW5jdGlvbi1jb250ZXh0OjoKKwlTaG93IHRoZSBzdXJyb3VuZGluZyB0ZXh0IGZyb20gdGhlIHByZXZpb3VzIGxpbmUgY29udGFpbmluZyBhCisJZnVuY3Rpb24gbmFtZSB1cCB0byB0aGUgb25lIGJlZm9yZSB0aGUgbmV4dCBmdW5jdGlvbiBuYW1lLAorCWVmZmVjdGl2ZWx5IHNob3dpbmcgdGhlIHdob2xlIGZ1bmN0aW9uIGluIHdoaWNoIHRoZSBtYXRjaCB3YXMKKwlmb3VuZC4KKworLWYgPGZpbGU+OjoKKwlSZWFkIHBhdHRlcm5zIGZyb20gPGZpbGU+LCBvbmUgcGVyIGxpbmUuCisKKy1lOjoKKwlUaGUgbmV4dCBwYXJhbWV0ZXIgaXMgdGhlIHBhdHRlcm4uIFRoaXMgb3B0aW9uIGhhcyB0byBiZQorCXVzZWQgZm9yIHBhdHRlcm5zIHN0YXJ0aW5nIHdpdGggYC1gIGFuZCBzaG91bGQgYmUgdXNlZCBpbgorCXNjcmlwdHMgcGFzc2luZyB1c2VyIGlucHV0IHRvIGdyZXAuICBNdWx0aXBsZSBwYXR0ZXJucyBhcmUKKwljb21iaW5lZCBieSAnb3InLgorCistLWFuZDo6CistLW9yOjoKKy0tbm90OjoKKyggLi4uICk6OgorCVNwZWNpZnkgaG93IG11bHRpcGxlIHBhdHRlcm5zIGFyZSBjb21iaW5lZCB1c2luZyBCb29sZWFuCisJZXhwcmVzc2lvbnMuICBgLS1vcmAgaXMgdGhlIGRlZmF1bHQgb3BlcmF0b3IuICBgLS1hbmRgIGhhcworCWhpZ2hlciBwcmVjZWRlbmNlIHRoYW4gYC0tb3JgLiAgYC1lYCBoYXMgdG8gYmUgdXNlZCBmb3IgYWxsCisJcGF0dGVybnMuCisKKy0tYWxsLW1hdGNoOjoKKwlXaGVuIGdpdmluZyBtdWx0aXBsZSBwYXR0ZXJuIGV4cHJlc3Npb25zIGNvbWJpbmVkIHdpdGggYC0tb3JgLAorCXRoaXMgZmxhZyBpcyBzcGVjaWZpZWQgdG8gbGltaXQgdGhlIG1hdGNoIHRvIGZpbGVzIHRoYXQKKwloYXZlIGxpbmVzIHRvIG1hdGNoIGFsbCBvZiB0aGVtLgorCistcTo6CistLXF1aWV0OjoKKwlEbyBub3Qgb3V0cHV0IG1hdGNoZWQgbGluZXM7IGluc3RlYWQsIGV4aXQgd2l0aCBzdGF0dXMgMCB3aGVuCisJdGhlcmUgaXMgYSBtYXRjaCBhbmQgd2l0aCBub24temVybyBzdGF0dXMgd2hlbiB0aGVyZSBpc24ndC4KKworPHRyZWU+Li4uOjoKKwlJbnN0ZWFkIG9mIHNlYXJjaGluZyB0cmFja2VkIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUsIHNlYXJjaAorCWJsb2JzIGluIHRoZSBnaXZlbiB0cmVlcy4KKworXC0tOjoKKwlTaWduYWxzIHRoZSBlbmQgb2Ygb3B0aW9uczsgdGhlIHJlc3Qgb2YgdGhlIHBhcmFtZXRlcnMKKwlhcmUgPHBhdGhzcGVjPiBsaW1pdGVycy4KKworPHBhdGhzcGVjPi4uLjo6CisJSWYgZ2l2ZW4sIGxpbWl0IHRoZSBzZWFyY2ggdG8gcGF0aHMgbWF0Y2hpbmcgYXQgbGVhc3Qgb25lIHBhdHRlcm4uCisJQm90aCBsZWFkaW5nIHBhdGhzIG1hdGNoIGFuZCBnbG9iKDcpIHBhdHRlcm5zIGFyZSBzdXBwb3J0ZWQuCisKK0V4YW1wbGVzCistLS0tLS0tLQorCitgZ2l0IGdyZXAgJ3RpbWVfdCcgLS0gJyouW2NoXSdgOjoKKwlMb29rcyBmb3IgYHRpbWVfdGAgaW4gYWxsIHRyYWNrZWQgLmMgYW5kIC5oIGZpbGVzIGluIHRoZSB3b3JraW5nCisJZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMuCisKK2BnaXQgZ3JlcCAtZSAnI2RlZmluZScgLS1hbmQgXCggLWUgTUFYX1BBVEggLWUgUEFUSF9NQVggXClgOjoKKwlMb29rcyBmb3IgYSBsaW5lIHRoYXQgaGFzIGAjZGVmaW5lYCBhbmQgZWl0aGVyIGBNQVhfUEFUSGAgb3IKKwlgUEFUSF9NQVhgLgorCitgZ2l0IGdyZXAgLS1hbGwtbWF0Y2ggLWUgTk9ERSAtZSBVbmV4cGVjdGVkYDo6CisJTG9va3MgZm9yIGEgbGluZSB0aGF0IGhhcyBgTk9ERWAgb3IgYFVuZXhwZWN0ZWRgIGluCisJZmlsZXMgdGhhdCBoYXZlIGxpbmVzIHRoYXQgbWF0Y2ggYm90aC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ndWkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtZ3VpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTQ0NTI3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtZ3VpLnR4dApAQCAtMCwwICsxLDEyNyBAQAorZ2l0LWd1aSgxKQorPT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtZ3VpIC0gQSBwb3J0YWJsZSBncmFwaGljYWwgaW50ZXJmYWNlIHRvIEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgZ3VpJyBbPGNvbW1hbmQ+XSBbYXJndW1lbnRzXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0EgVGNsL1RrIGJhc2VkIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSB0byBHaXQuICAnZ2l0IGd1aScgZm9jdXNlcworb24gYWxsb3dpbmcgdXNlcnMgdG8gbWFrZSBjaGFuZ2VzIHRvIHRoZWlyIHJlcG9zaXRvcnkgYnkgbWFraW5nCituZXcgY29tbWl0cywgYW1lbmRpbmcgZXhpc3Rpbmcgb25lcywgY3JlYXRpbmcgYnJhbmNoZXMsIHBlcmZvcm1pbmcKK2xvY2FsIG1lcmdlcywgYW5kIGZldGNoaW5nL3B1c2hpbmcgdG8gcmVtb3RlIHJlcG9zaXRvcmllcy4KKworVW5saWtlICdnaXRrJywgJ2dpdCBndWknIGZvY3VzZXMgb24gY29tbWl0IGdlbmVyYXRpb24KK2FuZCBzaW5nbGUgZmlsZSBhbm5vdGF0aW9uIGFuZCBkb2VzIG5vdCBzaG93IHByb2plY3QgaGlzdG9yeS4KK0l0IGRvZXMgaG93ZXZlciBzdXBwbHkgbWVudSBhY3Rpb25zIHRvIHN0YXJ0IGEgJ2dpdGsnIHNlc3Npb24gZnJvbQord2l0aGluICdnaXQgZ3VpJy4KKworJ2dpdCBndWknIGlzIGtub3duIHRvIHdvcmsgb24gYWxsIHBvcHVsYXIgVU5JWCBzeXN0ZW1zLCBNYWMgT1MgWCwKK2FuZCBXaW5kb3dzICh1bmRlciBib3RoIEN5Z3dpbiBhbmQgTVNZUykuICBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlCitPUyBzcGVjaWZpYyB1c2VyIGludGVyZmFjZSBndWlkZWxpbmVzIGFyZSBmb2xsb3dlZCwgbWFraW5nICdnaXQgZ3VpJworYSBmYWlybHkgbmF0aXZlIGludGVyZmFjZSBmb3IgdXNlcnMuCisKK0NPTU1BTkRTCistLS0tLS0tLQorYmxhbWU6OgorCVN0YXJ0IGEgYmxhbWUgdmlld2VyIG9uIHRoZSBzcGVjaWZpZWQgZmlsZSBvbiB0aGUgZ2l2ZW4KKwl2ZXJzaW9uIChvciB3b3JraW5nIGRpcmVjdG9yeSBpZiBub3Qgc3BlY2lmaWVkKS4KKworYnJvd3Nlcjo6CisJU3RhcnQgYSB0cmVlIGJyb3dzZXIgc2hvd2luZyBhbGwgZmlsZXMgaW4gdGhlIHNwZWNpZmllZAorCWNvbW1pdCAob3IgJ0hFQUQnIGJ5IGRlZmF1bHQpLiAgRmlsZXMgc2VsZWN0ZWQgdGhyb3VnaCB0aGUKKwlicm93c2VyIGFyZSBvcGVuZWQgaW4gdGhlIGJsYW1lIHZpZXdlci4KKworY2l0b29sOjoKKwlTdGFydCAnZ2l0IGd1aScgYW5kIGFycmFuZ2UgdG8gbWFrZSBleGFjdGx5IG9uZSBjb21taXQgYmVmb3JlCisJZXhpdGluZyBhbmQgcmV0dXJuaW5nIHRvIHRoZSBzaGVsbC4gIFRoZSBpbnRlcmZhY2UgaXMgbGltaXRlZAorCXRvIG9ubHkgY29tbWl0IGFjdGlvbnMsIHNsaWdodGx5IHJlZHVjaW5nIHRoZSBhcHBsaWNhdGlvbidzCisJc3RhcnR1cCB0aW1lIGFuZCBzaW1wbGlmeWluZyB0aGUgbWVudWJhci4KKwordmVyc2lvbjo6CisJRGlzcGxheSB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdmVyc2lvbiBvZiAnZ2l0IGd1aScuCisKKworRXhhbXBsZXMKKy0tLS0tLS0tCitgZ2l0IGd1aSBibGFtZSBNYWtlZmlsZWA6OgorCisJU2hvdyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgJ01ha2VmaWxlJyBpbiB0aGUgY3VycmVudAorCXdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgcHJvdmlkZSBhbm5vdGF0aW9ucyBmb3IgYm90aCB0aGUKKwlvcmlnaW5hbCBhdXRob3Igb2YgZWFjaCBsaW5lLCBhbmQgd2hvIG1vdmVkIHRoZSBsaW5lIHRvIGl0cworCWN1cnJlbnQgbG9jYXRpb24uICBUaGUgdW5jb21taXR0ZWQgZmlsZSBpcyBhbm5vdGF0ZWQsIGFuZAorCXVuY29tbWl0dGVkIGNoYW5nZXMgKGlmIGFueSkgYXJlIGV4cGxpY2l0bHkgYXR0cmlidXRlZCB0bworCSdOb3QgWWV0IENvbW1pdHRlZCcuCisKK2BnaXQgZ3VpIGJsYW1lIHYwLjk5LjggTWFrZWZpbGVgOjoKKworCVNob3cgdGhlIGNvbnRlbnRzIG9mICdNYWtlZmlsZScgaW4gcmV2aXNpb24gJ3YwLjk5LjgnCisJYW5kIHByb3ZpZGUgYW5ub3RhdGlvbnMgZm9yIGVhY2ggbGluZS4gIFVubGlrZSB0aGUgYWJvdmUKKwlleGFtcGxlIHRoZSBmaWxlIGlzIHJlYWQgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlIGFuZCBub3QKKwl0aGUgd29ya2luZyBkaXJlY3RvcnkuCisKK2BnaXQgZ3VpIGJsYW1lIC0tbGluZT0xMDAgTWFrZWZpbGVgOjoKKworCUxvYWRzIGFubm90YXRpb25zIGFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgYXV0b21hdGljYWxseQorCXNjcm9sbHMgdGhlIHZpZXcgdG8gY2VudGVyIG9uIGxpbmUgJzEwMCcuCisKK2BnaXQgZ3VpIGNpdG9vbGA6OgorCisJTWFrZSBvbmUgY29tbWl0IGFuZCByZXR1cm4gdG8gdGhlIHNoZWxsIHdoZW4gaXQgaXMgY29tcGxldGUuCisJVGhpcyBjb21tYW5kIHJldHVybnMgYSBub24temVybyBleGl0IGNvZGUgaWYgdGhlIHdpbmRvdyB3YXMKKwljbG9zZWQgaW4gYW55IHdheSBvdGhlciB0aGFuIGJ5IG1ha2luZyBhIGNvbW1pdC4KKworYGdpdCBndWkgY2l0b29sIC0tYW1lbmRgOjoKKworCUF1dG9tYXRpY2FsbHkgZW50ZXIgdGhlICdBbWVuZCBMYXN0IENvbW1pdCcgbW9kZSBvZgorCXRoZSBpbnRlcmZhY2UuCisKK2BnaXQgZ3VpIGNpdG9vbCAtLW5vY29tbWl0YDo6CisKKwlCZWhhdmUgYXMgbm9ybWFsIGNpdG9vbCwgYnV0IGluc3RlYWQgb2YgbWFraW5nIGEgY29tbWl0CisJc2ltcGx5IHRlcm1pbmF0ZSB3aXRoIGEgemVybyBleGl0IGNvZGUuIEl0IHN0aWxsIGNoZWNrcworCXRoYXQgdGhlIGluZGV4IGRvZXMgbm90IGNvbnRhaW4gYW55IHVubWVyZ2VkIGVudHJpZXMsIHNvCisJeW91IGNhbiB1c2UgaXQgYXMgYSBHVUkgdmVyc2lvbiBvZiBsaW5rZ2l0OmdpdC1tZXJnZXRvb2xbMV0KKworYGdpdCBjaXRvb2xgOjoKKworCVNhbWUgYXMgYGdpdCBndWkgY2l0b29sYCAoYWJvdmUpLgorCitgZ2l0IGd1aSBicm93c2VyIG1haW50YDo6CisKKwlTaG93IGEgYnJvd3NlciBmb3IgdGhlIHRyZWUgb2YgdGhlICdtYWludCcgYnJhbmNoLiAgRmlsZXMKKwlzZWxlY3RlZCBpbiB0aGUgYnJvd3NlciBjYW4gYmUgdmlld2VkIHdpdGggdGhlIGludGVybmFsCisJYmxhbWUgdmlld2VyLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0a1sxXTo6CisJVGhlIEdpdCByZXBvc2l0b3J5IGJyb3dzZXIuICBTaG93cyBicmFuY2hlcywgY29tbWl0IGhpc3RvcnkKKwlhbmQgZmlsZSBkaWZmZXJlbmNlcy4gIGdpdGsgaXMgdGhlIHV0aWxpdHkgc3RhcnRlZCBieQorCSdnaXQgZ3VpJydzIFJlcG9zaXRvcnkgVmlzdWFsaXplIGFjdGlvbnMuCisKK090aGVyCistLS0tLQorJ2dpdCBndWknIGlzIGFjdHVhbGx5IG1haW50YWluZWQgYXMgYW4gaW5kZXBlbmRlbnQgcHJvamVjdCwgYnV0IHN0YWJsZQordmVyc2lvbnMgYXJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIEdpdCBzdWl0ZSBmb3IgdGhlIGNvbnZlbmllbmNlCitvZiBlbmQgdXNlcnMuCisKK0EgJ2dpdCBndWknIGRldmVsb3BtZW50IHJlcG9zaXRvcnkgY2FuIGJlIG9idGFpbmVkIGZyb206CisKKyAgZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ovZ2l0LWd1aS5naXQKKworb3IKKworICBnaXQgY2xvbmUgaHR0cDovL3JlcG8ub3IuY3ovci9naXQtZ3VpLmdpdAorCitvciBicm93c2VkIG9ubGluZSBhdCBodHRwOi8vcmVwby5vci5jei93L2dpdC1ndWkuZ2l0L1tdLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWhhc2gtb2JqZWN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTRlNzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaGFzaC1vYmplY3QudHh0CkBAIC0wLDAgKzEsNjUgQEAKK2dpdC1oYXNoLW9iamVjdCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1oYXNoLW9iamVjdCAtIENvbXB1dGUgb2JqZWN0IElEIGFuZCBvcHRpb25hbGx5IGNyZWF0ZXMgYSBibG9iIGZyb20gYSBmaWxlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGhhc2gtb2JqZWN0JyBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+fC0tbm8tZmlsdGVyc10gWy0tc3RkaW4gWy0tbGl0ZXJhbGx5XV0gWy0tXSA8ZmlsZT4uLi4KKydnaXQgaGFzaC1vYmplY3QnIFstdCA8dHlwZT5dIFstd10gLS1zdGRpbi1wYXRocyBbLS1uby1maWx0ZXJzXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NvbXB1dGVzIHRoZSBvYmplY3QgSUQgdmFsdWUgZm9yIGFuIG9iamVjdCB3aXRoIHNwZWNpZmllZCB0eXBlCit3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgbmFtZWQgZmlsZSAod2hpY2ggY2FuIGJlIG91dHNpZGUgb2YgdGhlCit3b3JrIHRyZWUpLCBhbmQgb3B0aW9uYWxseSB3cml0ZXMgdGhlIHJlc3VsdGluZyBvYmplY3QgaW50byB0aGUKK29iamVjdCBkYXRhYmFzZS4gIFJlcG9ydHMgaXRzIG9iamVjdCBJRCB0byBpdHMgc3RhbmRhcmQgb3V0cHV0LgorVGhpcyBpcyB1c2VkIGJ5ICdnaXQgY3ZzaW1wb3J0JyB0byB1cGRhdGUgdGhlIGluZGV4Cit3aXRob3V0IG1vZGlmeWluZyBmaWxlcyBpbiB0aGUgd29yayB0cmVlLiAgV2hlbiA8dHlwZT4gaXMgbm90CitzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvICJibG9iIi4KKworT1BUSU9OUworLS0tLS0tLQorCistdCA8dHlwZT46OgorCVNwZWNpZnkgdGhlIHR5cGUgKGRlZmF1bHQ6ICJibG9iIikuCisKKy13OjoKKwlBY3R1YWxseSB3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZS4KKworLS1zdGRpbjo6CisJUmVhZCB0aGUgb2JqZWN0IGZyb20gc3RhbmRhcmQgaW5wdXQgaW5zdGVhZCBvZiBmcm9tIGEgZmlsZS4KKworLS1zdGRpbi1wYXRoczo6CisJUmVhZCBmaWxlIG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBvbmUgcGVyIGxpbmUsIGluc3RlYWQKKwlvZiBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCisKKy0tcGF0aDo6CisJSGFzaCBvYmplY3QgYXMgaXQgd2VyZSBsb2NhdGVkIGF0IHRoZSBnaXZlbiBwYXRoLiBUaGUgbG9jYXRpb24gb2YKKwlmaWxlIGRvZXMgbm90IGRpcmVjdGx5IGluZmx1ZW5jZSBvbiB0aGUgaGFzaCB2YWx1ZSwgYnV0IHBhdGggaXMKKwl1c2VkIHRvIGRldGVybWluZSB3aGF0IEdpdCBmaWx0ZXJzIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBvYmplY3QKKwliZWZvcmUgaXQgY2FuIGJlIHBsYWNlZCB0byB0aGUgb2JqZWN0IGRhdGFiYXNlLCBhbmQsIGFzIHJlc3VsdCBvZgorCWFwcGx5aW5nIGZpbHRlcnMsIHRoZSBhY3R1YWwgYmxvYiBwdXQgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIG1heQorCWRpZmZlciBmcm9tIHRoZSBnaXZlbiBmaWxlLiBUaGlzIG9wdGlvbiBpcyBtYWlubHkgdXNlZnVsIGZvciBoYXNoaW5nCisJdGVtcG9yYXJ5IGZpbGVzIGxvY2F0ZWQgb3V0c2lkZSBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgb3IgZmlsZXMKKwlyZWFkIGZyb20gc3RkaW4uCisKKy0tbm8tZmlsdGVyczo6CisJSGFzaCB0aGUgY29udGVudHMgYXMgaXMsIGlnbm9yaW5nIGFueSBpbnB1dCBmaWx0ZXIgdGhhdCB3b3VsZAorCWhhdmUgYmVlbiBjaG9zZW4gYnkgdGhlIGF0dHJpYnV0ZXMgbWVjaGFuaXNtLCBpbmNsdWRpbmcgdGhlIGVuZC1vZi1saW5lCisJY29udmVyc2lvbi4gSWYgdGhlIGZpbGUgaXMgcmVhZCBmcm9tIHN0YW5kYXJkIGlucHV0IHRoZW4gdGhpcworCWlzIGFsd2F5cyBpbXBsaWVkLCB1bmxlc3MgdGhlIGAtLXBhdGhgIG9wdGlvbiBpcyBnaXZlbi4KKworLS1saXRlcmFsbHk6OgorCUFsbG93IGAtLXN0ZGluYCB0byBoYXNoIGFueSBnYXJiYWdlIGludG8gYSBsb29zZSBvYmplY3Qgd2hpY2ggbWlnaHQgbm90CisJb3RoZXJ3aXNlIHBhc3Mgc3RhbmRhcmQgb2JqZWN0IHBhcnNpbmcgb3IgZ2l0LWZzY2sgY2hlY2tzLiBVc2VmdWwgZm9yCisJc3RyZXNzLXRlc3RpbmcgR2l0IGl0c2VsZiBvciByZXByb2R1Y2luZyBjaGFyYWN0ZXJpc3RpY3Mgb2YgY29ycnVwdCBvcgorCWJvZ3VzIG9iamVjdHMgZW5jb3VudGVyZWQgaW4gdGhlIHdpbGQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1oZWxwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTU2NTI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaGVscC50eHQKQEAgLTAsMCArMSwxOTEgQEAKK2dpdC1oZWxwKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaGVscCAtIERpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBhYm91dCBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGhlbHAnIFstYXwtLWFsbF0gWy1nfC0tZ3VpZGVdCisJICAgWy1pfC0taW5mb3wtbXwtLW1hbnwtd3wtLXdlYl0gW0NPTU1BTkR8R1VJREVdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitXaXRoIG5vIG9wdGlvbnMgYW5kIG5vIENPTU1BTkQgb3IgR1VJREUgZ2l2ZW4sIHRoZSBzeW5vcHNpcyBvZiB0aGUgJ2dpdCcKK2NvbW1hbmQgYW5kIGEgbGlzdCBvZiB0aGUgbW9zdCBjb21tb25seSB1c2VkIEdpdCBjb21tYW5kcyBhcmUgcHJpbnRlZAorb24gdGhlIHN0YW5kYXJkIG91dHB1dC4KKworSWYgdGhlIG9wdGlvbiAnLS1hbGwnIG9yICctYScgaXMgZ2l2ZW4sIGFsbCBhdmFpbGFibGUgY29tbWFuZHMgYXJlCitwcmludGVkIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKK0lmIHRoZSBvcHRpb24gJy0tZ3VpZGUnIG9yICctZycgaXMgZ2l2ZW4sIGEgbGlzdCBvZiB0aGUgdXNlZnVsCitHaXQgZ3VpZGVzIGlzIGFsc28gcHJpbnRlZCBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCitJZiBhIGNvbW1hbmQsIG9yIGEgZ3VpZGUsIGlzIGdpdmVuLCBhIG1hbnVhbCBwYWdlIGZvciB0aGF0IGNvbW1hbmQgb3IKK2d1aWRlIGlzIGJyb3VnaHQgdXAuIFRoZSAnbWFuJyBwcm9ncmFtIGlzIHVzZWQgYnkgZGVmYXVsdCBmb3IgdGhpcworcHVycG9zZSwgYnV0IHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgb3RoZXIgb3B0aW9ucyBvciBjb25maWd1cmF0aW9uCit2YXJpYWJsZXMuCisKK05vdGUgdGhhdCBgZ2l0IC0taGVscCAuLi5gIGlzIGlkZW50aWNhbCB0byBgZ2l0IGhlbHAgLi4uYCBiZWNhdXNlIHRoZQorZm9ybWVyIGlzIGludGVybmFsbHkgY29udmVydGVkIGludG8gdGhlIGxhdHRlci4KKworVG8gZGlzcGxheSB0aGUgbGlua2dpdDpnaXRbMV0gbWFuIHBhZ2UsIHVzZSBgZ2l0IGhlbHAgZ2l0YC4KKworVGhpcyBwYWdlIGNhbiBiZSBkaXNwbGF5ZWQgd2l0aCAnZ2l0IGhlbHAgaGVscCcgb3IgYGdpdCBoZWxwIC0taGVscGAKKworT1BUSU9OUworLS0tLS0tLQorLWE6OgorLS1hbGw6OgorCVByaW50cyBhbGwgdGhlIGF2YWlsYWJsZSBjb21tYW5kcyBvbiB0aGUgc3RhbmRhcmQgb3V0cHV0LiBUaGlzCisJb3B0aW9uIG92ZXJyaWRlcyBhbnkgZ2l2ZW4gY29tbWFuZCBvciBndWlkZSBuYW1lLgorCistZzo6CistLWd1aWRlczo6CisJUHJpbnRzIGEgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuIFRoaXMKKwlvcHRpb24gb3ZlcnJpZGVzIGFueSBnaXZlbiBjb21tYW5kIG9yIGd1aWRlIG5hbWUuCisKKy1pOjoKKy0taW5mbzo6CisJRGlzcGxheSBtYW51YWwgcGFnZSBmb3IgdGhlIGNvbW1hbmQgaW4gdGhlICdpbmZvJyBmb3JtYXQuIFRoZQorCSdpbmZvJyBwcm9ncmFtIHdpbGwgYmUgdXNlZCBmb3IgdGhhdCBwdXJwb3NlLgorCistbTo6CistLW1hbjo6CisJRGlzcGxheSBtYW51YWwgcGFnZSBmb3IgdGhlIGNvbW1hbmQgaW4gdGhlICdtYW4nIGZvcm1hdC4gVGhpcworCW9wdGlvbiBtYXkgYmUgdXNlZCB0byBvdmVycmlkZSBhIHZhbHVlIHNldCBpbiB0aGUKKwknaGVscC5mb3JtYXQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisrCitCeSBkZWZhdWx0IHRoZSAnbWFuJyBwcm9ncmFtIHdpbGwgYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBtYW51YWwgcGFnZSwKK2J1dCB0aGUgJ21hbi52aWV3ZXInIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbWF5IGJlIHVzZWQgdG8gY2hvb3NlCitvdGhlciBkaXNwbGF5IHByb2dyYW1zIChzZWUgYmVsb3cpLgorCistdzo6CistLXdlYjo6CisJRGlzcGxheSBtYW51YWwgcGFnZSBmb3IgdGhlIGNvbW1hbmQgaW4gdGhlICd3ZWInIChIVE1MKQorCWZvcm1hdC4gQSB3ZWIgYnJvd3NlciB3aWxsIGJlIHVzZWQgZm9yIHRoYXQgcHVycG9zZS4KKysKK1RoZSB3ZWIgYnJvd3NlciBjYW4gYmUgc3BlY2lmaWVkIHVzaW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisnaGVscC5icm93c2VyJywgb3IgJ3dlYi5icm93c2VyJyBpZiB0aGUgZm9ybWVyIGlzIG5vdCBzZXQuIElmIG5vbmUgb2YKK3RoZXNlIGNvbmZpZyB2YXJpYWJsZXMgaXMgc2V0LCB0aGUgJ2dpdCB3ZWJ7bGl0ZGR9YnJvd3NlJyBoZWxwZXIgc2NyaXB0CisoY2FsbGVkIGJ5ICdnaXQgaGVscCcpIHdpbGwgcGljayBhIHN1aXRhYmxlIGRlZmF1bHQuIFNlZQorbGlua2dpdDpnaXQtd2Vie2xpdGRkfWJyb3dzZVsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzLgorCitDT05GSUdVUkFUSU9OIFZBUklBQkxFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaGVscC5mb3JtYXQKK35+fn5+fn5+fn5+CisKK0lmIG5vIGNvbW1hbmQtbGluZSBvcHRpb24gaXMgcGFzc2VkLCB0aGUgJ2hlbHAuZm9ybWF0JyBjb25maWd1cmF0aW9uCit2YXJpYWJsZSB3aWxsIGJlIGNoZWNrZWQuIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBzdXBwb3J0ZWQgZm9yIHRoaXMKK3ZhcmlhYmxlOyB0aGV5IG1ha2UgJ2dpdCBoZWxwJyBiZWhhdmUgYXMgdGhlaXIgY29ycmVzcG9uZGluZyBjb21tYW5kLQorbGluZSBvcHRpb246CisKKyogIm1hbiIgY29ycmVzcG9uZHMgdG8gJy1tfC0tbWFuJywKKyogImluZm8iIGNvcnJlc3BvbmRzIHRvICctaXwtLWluZm8nLAorKiAid2ViIiBvciAiaHRtbCIgY29ycmVzcG9uZCB0byAnLXd8LS13ZWInLgorCitoZWxwLmJyb3dzZXIsIHdlYi5icm93c2VyIGFuZCBicm93c2VyLjx0b29sPi5wYXRoCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSAnaGVscC5icm93c2VyJywgJ3dlYi5icm93c2VyJyBhbmQgJ2Jyb3dzZXIuPHRvb2w+LnBhdGgnIHdpbGwgYWxzbworYmUgY2hlY2tlZCBpZiB0aGUgJ3dlYicgZm9ybWF0IGlzIGNob3NlbiAoZWl0aGVyIGJ5IGNvbW1hbmQtbGluZQorb3B0aW9uIG9yIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUpLiBTZWUgJy13fC0td2ViJyBpbiB0aGUgT1BUSU9OUworc2VjdGlvbiBhYm92ZSBhbmQgbGlua2dpdDpnaXQtd2Vie2xpdGRkfWJyb3dzZVsxXS4KKworbWFuLnZpZXdlcgorfn5+fn5+fn5+fgorCitUaGUgJ21hbi52aWV3ZXInIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2lsbCBiZSBjaGVja2VkIGlmIHRoZSAnbWFuJworZm9ybWF0IGlzIGNob3Nlbi4gVGhlIGZvbGxvd2luZyB2YWx1ZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6CisKKyogIm1hbiI6IHVzZSB0aGUgJ21hbicgcHJvZ3JhbSBhcyB1c3VhbCwKKyogIndvbWFuIjogdXNlICdlbWFjc2NsaWVudCcgdG8gbGF1bmNoIHRoZSAid29tYW4iIG1vZGUgaW4gZW1hY3MKKyh0aGlzIG9ubHkgd29ya3Mgc3RhcnRpbmcgd2l0aCBlbWFjc2NsaWVudCB2ZXJzaW9ucyAyMiksCisqICJrb25xdWVyb3IiOiB1c2UgJ2tmbWNsaWVudCcgdG8gb3BlbiB0aGUgbWFuIHBhZ2UgaW4gYSBuZXcga29ucXVlcm9yCit0YWIgKHNlZSAnTm90ZSBhYm91dCBrb25xdWVyb3InIGJlbG93KS4KKworVmFsdWVzIGZvciBvdGhlciB0b29scyBjYW4gYmUgdXNlZCBpZiB0aGVyZSBpcyBhIGNvcnJlc3BvbmRpbmcKKydtYW4uPHRvb2w+LmNtZCcgY29uZmlndXJhdGlvbiBlbnRyeSAoc2VlIGJlbG93KS4KKworTXVsdGlwbGUgdmFsdWVzIG1heSBiZSBnaXZlbiB0byB0aGUgJ21hbi52aWV3ZXInIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlLiBUaGVpciBjb3JyZXNwb25kaW5nIHByb2dyYW1zIHdpbGwgYmUgdHJpZWQgaW4gdGhlIG9yZGVyCitsaXN0ZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworRm9yIGV4YW1wbGUsIHRoaXMgY29uZmlndXJhdGlvbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJW21hbl0KKwkJdmlld2VyID0ga29ucXVlcm9yCisJCXZpZXdlciA9IHdvbWFuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCB0cnkgdG8gdXNlIGtvbnF1ZXJvciBmaXJzdC4gQnV0IHRoaXMgbWF5IGZhaWwgKGZvciBleGFtcGxlLCBpZgorRElTUExBWSBpcyBub3Qgc2V0KSBhbmQgaW4gdGhhdCBjYXNlIGVtYWNzJyB3b21hbiBtb2RlIHdpbGwgYmUgdHJpZWQuCisKK0lmIGV2ZXJ5dGhpbmcgZmFpbHMsIG9yIGlmIG5vIHZpZXdlciBpcyBjb25maWd1cmVkLCB0aGUgdmlld2VyIHNwZWNpZmllZAoraW4gdGhlIEdJVF9NQU5fVklFV0VSIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgdHJpZWQuICBJZiB0aGF0CitmYWlscyB0b28sIHRoZSAnbWFuJyBwcm9ncmFtIHdpbGwgYmUgdHJpZWQgYW55d2F5LgorCittYW4uPHRvb2w+LnBhdGgKK35+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIGV4cGxpY2l0bHkgcHJvdmlkZSBhIGZ1bGwgcGF0aCB0byB5b3VyIHByZWZlcnJlZCBtYW4gdmlld2VyIGJ5CitzZXR0aW5nIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdtYW4uPHRvb2w+LnBhdGgnLiBGb3IgZXhhbXBsZSwgeW91CitjYW4gY29uZmlndXJlIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGtvbnF1ZXJvciBieSBzZXR0aW5nCisnbWFuLmtvbnF1ZXJvci5wYXRoJy4gT3RoZXJ3aXNlLCAnZ2l0IGhlbHAnIGFzc3VtZXMgdGhlIHRvb2wgaXMKK2F2YWlsYWJsZSBpbiBQQVRILgorCittYW4uPHRvb2w+LmNtZAorfn5+fn5+fn5+fn5+fn4KKworV2hlbiB0aGUgbWFuIHZpZXdlciwgc3BlY2lmaWVkIGJ5IHRoZSAnbWFuLnZpZXdlcicgY29uZmlndXJhdGlvbgordmFyaWFibGVzLCBpcyBub3QgYW1vbmcgdGhlIHN1cHBvcnRlZCBvbmVzLCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nCisnbWFuLjx0b29sPi5jbWQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2lsbCBiZSBsb29rZWQgdXAuIElmIHRoaXMKK3ZhcmlhYmxlIGV4aXN0cyB0aGVuIHRoZSBzcGVjaWZpZWQgdG9vbCB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBjdXN0b20KK2NvbW1hbmQgYW5kIGEgc2hlbGwgZXZhbCB3aWxsIGJlIHVzZWQgdG8gcnVuIHRoZSBjb21tYW5kIHdpdGggdGhlIG1hbgorcGFnZSBwYXNzZWQgYXMgYXJndW1lbnRzLgorCitOb3RlIGFib3V0IGtvbnF1ZXJvcgorfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2hlbiAna29ucXVlcm9yJyBpcyBzcGVjaWZpZWQgaW4gdGhlICdtYW4udmlld2VyJyBjb25maWd1cmF0aW9uCit2YXJpYWJsZSwgd2UgbGF1bmNoICdrZm1jbGllbnQnIHRvIHRyeSB0byBvcGVuIHRoZSBtYW4gcGFnZSBvbiBhbgorYWxyZWFkeSBvcGVuZWQga29ucXVlcm9yIGluIGEgbmV3IHRhYiBpZiBwb3NzaWJsZS4KKworRm9yIGNvbnNpc3RlbmN5LCB3ZSBhbHNvIHRyeSBzdWNoIGEgdHJpY2sgaWYgJ21hbi5rb25xdWVyb3IucGF0aCcgaXMKK3NldCB0byBzb21ldGhpbmcgbGlrZSAnQV9QQVRIX1RPL2tvbnF1ZXJvcicuIFRoYXQgbWVhbnMgd2Ugd2lsbCB0cnkgdG8KK2xhdW5jaCAnQV9QQVRIX1RPL2tmbWNsaWVudCcgaW5zdGVhZC4KKworSWYgeW91IHJlYWxseSB3YW50IHRvIHVzZSAna29ucXVlcm9yJywgdGhlbiB5b3UgY2FuIHVzZSBzb21ldGhpbmcgbGlrZQordGhlIGZvbGxvd2luZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJW21hbl0KKwkJdmlld2VyID0ga29ucQorCisJW21hbiAia29ucSJdCisJCWNtZCA9IEFfUEFUSF9UTy9rb25xdWVyb3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIGFib3V0IGdpdCBjb25maWcgLS1nbG9iYWwKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitOb3RlIHRoYXQgYWxsIHRoZXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHNob3VsZCBwcm9iYWJseSBiZSBzZXQKK3VzaW5nIHRoZSAnLS1nbG9iYWwnIGZsYWcsIGZvciBleGFtcGxlIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgaGVscC5mb3JtYXQgd2ViCiskIGdpdCBjb25maWcgLS1nbG9iYWwgd2ViLmJyb3dzZXIgZmlyZWZveAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FzIHRoZXkgYXJlIHByb2JhYmx5IG1vcmUgdXNlciBzcGVjaWZpYyB0aGFuIHJlcG9zaXRvcnkgc3BlY2lmaWMuCitTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1iYWNrZW5kLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtYmFja2VuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2OGZiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWh0dHAtYmFja2VuZC50eHQKQEAgLTAsMCArMSwyNzcgQEAKK2dpdC1odHRwLWJhY2tlbmQoMSkKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWh0dHAtYmFja2VuZCAtIFNlcnZlciBzaWRlIGltcGxlbWVudGF0aW9uIG9mIEdpdCBvdmVyIEhUVFAKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGh0dHAtYmFja2VuZCcKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitBIHNpbXBsZSBDR0kgcHJvZ3JhbSB0byBzZXJ2ZSB0aGUgY29udGVudHMgb2YgYSBHaXQgcmVwb3NpdG9yeSB0byBHaXQKK2NsaWVudHMgYWNjZXNzaW5nIHRoZSByZXBvc2l0b3J5IG92ZXIgaHR0cDovLyBhbmQgaHR0cHM6Ly8gcHJvdG9jb2xzLgorVGhlIHByb2dyYW0gc3VwcG9ydHMgY2xpZW50cyBmZXRjaGluZyB1c2luZyBib3RoIHRoZSBzbWFydCBIVFRQIHByb3RvY29sCithbmQgdGhlIGJhY2t3YXJkcy1jb21wYXRpYmxlIGR1bWIgSFRUUCBwcm90b2NvbCwgYXMgd2VsbCBhcyBjbGllbnRzCitwdXNoaW5nIHVzaW5nIHRoZSBzbWFydCBIVFRQIHByb3RvY29sLgorCitJdCB2ZXJpZmllcyB0aGF0IHRoZSBkaXJlY3RvcnkgaGFzIHRoZSBtYWdpYyBmaWxlCisiZ2l0LWRhZW1vbi1leHBvcnQtb2siLCBhbmQgaXQgd2lsbCByZWZ1c2UgdG8gZXhwb3J0IGFueSBHaXQgZGlyZWN0b3J5Cit0aGF0IGhhc24ndCBleHBsaWNpdGx5IGJlZW4gbWFya2VkIGZvciBleHBvcnQgdGhpcyB3YXkgKHVubGVzcyB0aGUKK0dJVF9IVFRQX0VYUE9SVF9BTEwgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBpcyBzZXQpLgorCitCeSBkZWZhdWx0LCBvbmx5IHRoZSBgdXBsb2FkLXBhY2tgIHNlcnZpY2UgaXMgZW5hYmxlZCwgd2hpY2ggc2VydmVzCisnZ2l0IGZldGNoLXBhY2snIGFuZCAnZ2l0IGxzLXJlbW90ZScgY2xpZW50cywgd2hpY2ggYXJlIGludm9rZWQgZnJvbQorJ2dpdCBmZXRjaCcsICdnaXQgcHVsbCcsIGFuZCAnZ2l0IGNsb25lJy4gIElmIHRoZSBjbGllbnQgaXMgYXV0aGVudGljYXRlZCwKK3RoZSBgcmVjZWl2ZS1wYWNrYCBzZXJ2aWNlIGlzIGVuYWJsZWQsIHdoaWNoIHNlcnZlcyAnZ2l0IHNlbmQtcGFjaycKK2NsaWVudHMsIHdoaWNoIGlzIGludm9rZWQgZnJvbSAnZ2l0IHB1c2gnLgorCitTRVJWSUNFUworLS0tLS0tLS0KK1RoZXNlIHNlcnZpY2VzIGNhbiBiZSBlbmFibGVkL2Rpc2FibGVkIHVzaW5nIHRoZSBwZXItcmVwb3NpdG9yeQorY29uZmlndXJhdGlvbiBmaWxlOgorCitodHRwLmdldGFueWZpbGU6OgorCVRoaXMgc2VydmVzIEdpdCBjbGllbnRzIG9sZGVyIHRoYW4gdmVyc2lvbiAxLjYuNiB0aGF0IGFyZSB1bmFibGUgdG8gdXNlIHRoZQorCXVwbG9hZCBwYWNrIHNlcnZpY2UuICBXaGVuIGVuYWJsZWQsIGNsaWVudHMgYXJlIGFibGUgdG8gcmVhZAorCWFueSBmaWxlIHdpdGhpbiB0aGUgcmVwb3NpdG9yeSwgaW5jbHVkaW5nIG9iamVjdHMgdGhhdCBhcmUKKwlubyBsb25nZXIgcmVhY2hhYmxlIGZyb20gYSBicmFuY2ggYnV0IGFyZSBzdGlsbCBwcmVzZW50LgorCUl0IGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGEgcmVwb3NpdG9yeSBjYW4gZGlzYWJsZSBpdAorCWJ5IHNldHRpbmcgdGhpcyBjb25maWd1cmF0aW9uIGl0ZW0gdG8gYGZhbHNlYC4KKworaHR0cC51cGxvYWRwYWNrOjoKKwlUaGlzIHNlcnZlcyAnZ2l0IGZldGNoLXBhY2snIGFuZCAnZ2l0IGxzLXJlbW90ZScgY2xpZW50cy4KKwlJdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhIHJlcG9zaXRvcnkgY2FuIGRpc2FibGUgaXQKKwlieSBzZXR0aW5nIHRoaXMgY29uZmlndXJhdGlvbiBpdGVtIHRvIGBmYWxzZWAuCisKK2h0dHAucmVjZWl2ZXBhY2s6OgorCVRoaXMgc2VydmVzICdnaXQgc2VuZC1wYWNrJyBjbGllbnRzLCBhbGxvd2luZyBwdXNoLiAgSXQgaXMKKwlkaXNhYmxlZCBieSBkZWZhdWx0IGZvciBhbm9ueW1vdXMgdXNlcnMsIGFuZCBlbmFibGVkIGJ5CisJZGVmYXVsdCBmb3IgdXNlcnMgYXV0aGVudGljYXRlZCBieSB0aGUgd2ViIHNlcnZlci4gIEl0IGNhbiBiZQorCWRpc2FibGVkIGJ5IHNldHRpbmcgdGhpcyBpdGVtIHRvIGBmYWxzZWAsIG9yIGVuYWJsZWQgZm9yIGFsbAorCXVzZXJzLCBpbmNsdWRpbmcgYW5vbnltb3VzIHVzZXJzLCBieSBzZXR0aW5nIGl0IHRvIGB0cnVlYC4KKworVVJMIFRSQU5TTEFUSU9OCistLS0tLS0tLS0tLS0tLS0KK1RvIGRldGVybWluZSB0aGUgbG9jYXRpb24gb2YgdGhlIHJlcG9zaXRvcnkgb24gZGlzaywgJ2dpdCBodHRwLWJhY2tlbmQnCitjb25jYXRlbmF0ZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBQQVRIX0lORk8sIHdoaWNoIGlzIHNldAorYXV0b21hdGljYWxseSBieSB0aGUgd2ViIHNlcnZlciwgYW5kIEdJVF9QUk9KRUNUX1JPT1QsIHdoaWNoIG11c3QgYmUgc2V0CittYW51YWxseSBpbiB0aGUgd2ViIHNlcnZlciBjb25maWd1cmF0aW9uLiAgSWYgR0lUX1BST0pFQ1RfUk9PVCBpcyBub3QKK3NldCwgJ2dpdCBodHRwLWJhY2tlbmQnIHJlYWRzIFBBVEhfVFJBTlNMQVRFRCwgd2hpY2ggaXMgYWxzbyBzZXQKK2F1dG9tYXRpY2FsbHkgYnkgdGhlIHdlYiBzZXJ2ZXIuCisKK0VYQU1QTEVTCistLS0tLS0tLQorQWxsIG9mIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgbWFwIGBodHRwOi8vJGhvc3RuYW1lL2dpdC9mb28vYmFyLmdpdGAKK3RvIGAvdmFyL3d3dy9naXQvZm9vL2Jhci5naXRgLgorCitBcGFjaGUgMi54OjoKKwlFbnN1cmUgbW9kX2NnaSwgbW9kX2FsaWFzLCBhbmQgbW9kX2VudiBhcmUgZW5hYmxlZCwgc2V0CisJR0lUX1BST0pFQ1RfUk9PVCAob3IgRG9jdW1lbnRSb290KSBhcHByb3ByaWF0ZWx5LCBhbmQKKwljcmVhdGUgYSBTY3JpcHRBbGlhcyB0byB0aGUgQ0dJOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0RW52IEdJVF9QUk9KRUNUX1JPT1QgL3Zhci93d3cvZ2l0CitTZXRFbnYgR0lUX0hUVFBfRVhQT1JUX0FMTAorU2NyaXB0QWxpYXMgL2dpdC8gL3Vzci9saWJleGVjL2dpdC1jb3JlL2dpdC1odHRwLWJhY2tlbmQvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUbyBlbmFibGUgYW5vbnltb3VzIHJlYWQgYWNjZXNzIGJ1dCBhdXRoZW50aWNhdGVkIHdyaXRlIGFjY2VzcywKK3JlcXVpcmUgYXV0aG9yaXphdGlvbiBmb3IgYm90aCB0aGUgaW5pdGlhbCByZWYgYWR2ZXJ0aXNlbWVudCAod2hpY2ggd2UKK2RldGVjdCBhcyBhIHB1c2ggdmlhIHRoZSBzZXJ2aWNlIHBhcmFtZXRlciBpbiB0aGUgcXVlcnkgc3RyaW5nKSwgYW5kIHRoZQorcmVjZWl2ZS1wYWNrIGludm9jYXRpb24gaXRzZWxmOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmV3cml0ZUNvbmQgJXtRVUVSWV9TVFJJTkd9IHNlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBbT1JdCitSZXdyaXRlQ29uZCAle1JFUVVFU1RfVVJJfSAvZ2l0LXJlY2VpdmUtcGFjayQKK1Jld3JpdGVSdWxlIF4vZ2l0LyAtIFtFPUFVVEhSRVFVSVJFRDp5ZXNdCisKKzxMb2NhdGlvbk1hdGNoICJeL2dpdC8iPgorCU9yZGVyIERlbnksQWxsb3cKKwlEZW55IGZyb20gZW52PUFVVEhSRVFVSVJFRAorCisJQXV0aFR5cGUgQmFzaWMKKwlBdXRoTmFtZSAiR2l0IEFjY2VzcyIKKwlSZXF1aXJlIGdyb3VwIGNvbW1pdHRlcnMKKwlTYXRpc2Z5IEFueQorCS4uLgorPC9Mb2NhdGlvbk1hdGNoPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSWYgeW91IGRvIG5vdCBoYXZlIGBtb2RfcmV3cml0ZWAgYXZhaWxhYmxlIHRvIG1hdGNoIGFnYWluc3QgdGhlIHF1ZXJ5CitzdHJpbmcsIGl0IGlzIHN1ZmZpY2llbnQgdG8ganVzdCBwcm90ZWN0IGBnaXQtcmVjZWl2ZS1wYWNrYCBpdHNlbGYsCitsaWtlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPExvY2F0aW9uTWF0Y2ggIl4vZ2l0Ly4qL2dpdC1yZWNlaXZlLXBhY2skIj4KKwlBdXRoVHlwZSBCYXNpYworCUF1dGhOYW1lICJHaXQgQWNjZXNzIgorCVJlcXVpcmUgZ3JvdXAgY29tbWl0dGVycworCS4uLgorPC9Mb2NhdGlvbk1hdGNoPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSW4gdGhpcyBtb2RlLCB0aGUgc2VydmVyIHdpbGwgbm90IHJlcXVlc3QgYXV0aGVudGljYXRpb24gdW50aWwgdGhlCitjbGllbnQgYWN0dWFsbHkgc3RhcnRzIHRoZSBvYmplY3QgbmVnb3RpYXRpb24gcGhhc2Ugb2YgdGhlIHB1c2gsIHJhdGhlcgordGhhbiBkdXJpbmcgdGhlIGluaXRpYWwgY29udGFjdC4gIEZvciB0aGlzIHJlYXNvbiwgeW91IG11c3QgYWxzbyBlbmFibGUKK3RoZSBgaHR0cC5yZWNlaXZlcGFja2AgY29uZmlnIG9wdGlvbiBpbiBhbnkgcmVwb3NpdG9yaWVzIHRoYXQgc2hvdWxkCithY2NlcHQgYSBwdXNoLiBUaGUgZGVmYXVsdCBiZWhhdmlvciwgaWYgYGh0dHAucmVjZWl2ZXBhY2tgIGlzIG5vdCBzZXQsCitpcyB0byByZWplY3QgYW55IHB1c2hlcyBieSB1bmF1dGhlbnRpY2F0ZWQgdXNlcnM7IHRoZSBpbml0aWFsIHJlcXVlc3QKK3dpbGwgdGhlcmVmb3JlIHJlcG9ydCBgNDAzIEZvcmJpZGRlbmAgdG8gdGhlIGNsaWVudCwgd2l0aG91dCBldmVuIGdpdmluZworYW4gb3Bwb3J0dW5pdHkgZm9yIGF1dGhlbnRpY2F0aW9uLgorKworVG8gcmVxdWlyZSBhdXRoZW50aWNhdGlvbiBmb3IgYm90aCByZWFkcyBhbmQgd3JpdGVzLCB1c2UgYSBMb2NhdGlvbgorZGlyZWN0aXZlIGFyb3VuZCB0aGUgcmVwb3NpdG9yeSwgb3Igb25lIG9mIGl0cyBwYXJlbnQgZGlyZWN0b3JpZXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8TG9jYXRpb24gL2dpdC9wcml2YXRlPgorCUF1dGhUeXBlIEJhc2ljCisJQXV0aE5hbWUgIlByaXZhdGUgR2l0IEFjY2VzcyIKKwlSZXF1aXJlIGdyb3VwIGNvbW1pdHRlcnMKKwkuLi4KKzwvTG9jYXRpb24+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUbyBzZXJ2ZSBnaXR3ZWIgYXQgdGhlIHNhbWUgdXJsLCB1c2UgYSBTY3JpcHRBbGlhc01hdGNoIHRvIG9ubHkKK3Rob3NlIFVSTHMgdGhhdCAnZ2l0IGh0dHAtYmFja2VuZCcgY2FuIGhhbmRsZSwgYW5kIGZvcndhcmQgdGhlCityZXN0IHRvIGdpdHdlYjoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NjcmlwdEFsaWFzTWF0Y2ggXAorCSIoP3gpXi9naXQvKC4qLyhIRUFEIHwgXAorCQkJaW5mby9yZWZzIHwgXAorCQkJb2JqZWN0cy8oaW5mby9bXi9dKyB8IFwKKwkJCQkgWzAtOWEtZl17Mn0vWzAtOWEtZl17Mzh9IHwgXAorCQkJCSBwYWNrL3BhY2stWzAtOWEtZl17NDB9XC4ocGFja3xpZHgpKSB8IFwKKwkJCWdpdC0odXBsb2FkfHJlY2VpdmUpLXBhY2spKSQiIFwKKwkvdXNyL2xpYmV4ZWMvZ2l0LWNvcmUvZ2l0LWh0dHAtYmFja2VuZC8kMQorCitTY3JpcHRBbGlhcyAvZ2l0LyAvdmFyL3d3dy9jZ2ktYmluL2dpdHdlYi5jZ2kvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUbyBzZXJ2ZSBtdWx0aXBsZSByZXBvc2l0b3JpZXMgZnJvbSBkaWZmZXJlbnQgbGlua2dpdDpnaXRuYW1lc3BhY2VzWzddIGluIGEKK3NpbmdsZSByZXBvc2l0b3J5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0RW52SWYgUmVxdWVzdF9VUkkgIl4vZ2l0LyhbXi9dKikiIEdJVF9OQU1FU1BBQ0U9JDEKK1NjcmlwdEFsaWFzTWF0Y2ggXi9naXQvW14vXSooLiopIC91c3IvbGliZXhlYy9naXQtY29yZS9naXQtaHR0cC1iYWNrZW5kL3N0b3JhZ2UuZ2l0JDEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWNjZWxlcmF0ZWQgc3RhdGljIEFwYWNoZSAyLng6OgorCVNpbWlsYXIgdG8gdGhlIGFib3ZlLCBidXQgQXBhY2hlIGNhbiBiZSB1c2VkIHRvIHJldHVybiBzdGF0aWMKKwlmaWxlcyB0aGF0IGFyZSBzdG9yZWQgb24gZGlzay4JT24gbWFueSBzeXN0ZW1zIHRoaXMgbWF5CisJYmUgbW9yZSBlZmZpY2llbnQgYXMgQXBhY2hlIGNhbiBhc2sgdGhlIGtlcm5lbCB0byBjb3B5IHRoZQorCWZpbGUgY29udGVudHMgZnJvbSB0aGUgZmlsZSBzeXN0ZW0gZGlyZWN0bHkgdG8gdGhlIG5ldHdvcms6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTZXRFbnYgR0lUX1BST0pFQ1RfUk9PVCAvdmFyL3d3dy9naXQKKworQWxpYXNNYXRjaCBeL2dpdC8oLiovb2JqZWN0cy9bMC05YS1mXXsyfS9bMC05YS1mXXszOH0pJCAgICAgICAgICAvdmFyL3d3dy9naXQvJDEKK0FsaWFzTWF0Y2ggXi9naXQvKC4qL29iamVjdHMvcGFjay9wYWNrLVswLTlhLWZdezQwfS4ocGFja3xpZHgpKSQgL3Zhci93d3cvZ2l0LyQxCitTY3JpcHRBbGlhcyAvZ2l0LyAvdXNyL2xpYmV4ZWMvZ2l0LWNvcmUvZ2l0LWh0dHAtYmFja2VuZC8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgY2FuIGJlIGNvbWJpbmVkIHdpdGggdGhlIGdpdHdlYiBjb25maWd1cmF0aW9uOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2V0RW52IEdJVF9QUk9KRUNUX1JPT1QgL3Zhci93d3cvZ2l0CisKK0FsaWFzTWF0Y2ggXi9naXQvKC4qL29iamVjdHMvWzAtOWEtZl17Mn0vWzAtOWEtZl17Mzh9KSQgICAgICAgICAgL3Zhci93d3cvZ2l0LyQxCitBbGlhc01hdGNoIF4vZ2l0LyguKi9vYmplY3RzL3BhY2svcGFjay1bMC05YS1mXXs0MH0uKHBhY2t8aWR4KSkkIC92YXIvd3d3L2dpdC8kMQorU2NyaXB0QWxpYXNNYXRjaCBcCisJIig/eCleL2dpdC8oLiovKEhFQUQgfCBcCisJCQlpbmZvL3JlZnMgfCBcCisJCQlvYmplY3RzL2luZm8vW14vXSsgfCBcCisJCQlnaXQtKHVwbG9hZHxyZWNlaXZlKS1wYWNrKSkkIiBcCisJL3Vzci9saWJleGVjL2dpdC1jb3JlL2dpdC1odHRwLWJhY2tlbmQvJDEKK1NjcmlwdEFsaWFzIC9naXQvIC92YXIvd3d3L2NnaS1iaW4vZ2l0d2ViLmNnaS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGlnaHR0cGQ6OgorCUVuc3VyZSB0aGF0IGBtb2RfY2dpYCwgYG1vZF9hbGlhc2AsIGBtb2RfYXV0aGAsIGBtb2Rfc2V0ZW52YCBhcmUKKwlsb2FkZWQsIHRoZW4gc2V0IGBHSVRfUFJPSkVDVF9ST09UYCBhcHByb3ByaWF0ZWx5IGFuZCByZWRpcmVjdAorCWFsbCByZXF1ZXN0cyB0byB0aGUgQ0dJOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpYXMudXJsICs9ICggIi9naXQiID0+ICIvdXNyL2xpYi9naXQtY29yZS9naXQtaHR0cC1iYWNrZW5kIiApCiskSFRUUFsidXJsIl0gPX4gIl4vZ2l0IiB7CisJY2dpLmFzc2lnbiA9ICgiIiA9PiAiIikKKwlzZXRlbnYuYWRkLWVudmlyb25tZW50ID0gKAorCQkiR0lUX1BST0pFQ1RfUk9PVCIgPT4gIi92YXIvd3d3L2dpdCIsCisJCSJHSVRfSFRUUF9FWFBPUlRfQUxMIiA9PiAiIgorCSkKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RvIGVuYWJsZSBhbm9ueW1vdXMgcmVhZCBhY2Nlc3MgYnV0IGF1dGhlbnRpY2F0ZWQgd3JpdGUgYWNjZXNzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJEhUVFBbInF1ZXJ5c3RyaW5nIl0gPX4gInNlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayIgeworCWluY2x1ZGUgImdpdC1hdXRoLmNvbmYiCit9CiskSFRUUFsidXJsIl0gPX4gIl4vZ2l0Ly4qL2dpdC1yZWNlaXZlLXBhY2skIiB7CisJaW5jbHVkZSAiZ2l0LWF1dGguY29uZiIKK30KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK3doZXJlIGBnaXQtYXV0aC5jb25mYCBsb29rcyBzb21ldGhpbmcgbGlrZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2F1dGgucmVxdWlyZSA9ICgKKwkiLyIgPT4gKAorCQkibWV0aG9kIiA9PiAiYmFzaWMiLAorCQkicmVhbG0iID0+ICJHaXQgQWNjZXNzIiwKKwkJInJlcXVpcmUiID0+ICJ2YWxpZC11c2VyIgorCSAgICAgICApCispCisjIC4uLmFuZCBzZXQgdXAgYXV0aC5iYWNrZW5kIGhlcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RvIHJlcXVpcmUgYXV0aGVudGljYXRpb24gZm9yIGJvdGggcmVhZHMgYW5kIHdyaXRlczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyRIVFRQWyJ1cmwiXSA9fiAiXi9naXQvcHJpdmF0ZSIgeworCWluY2x1ZGUgImdpdC1hdXRoLmNvbmYiCit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tCisnZ2l0IGh0dHAtYmFja2VuZCcgcmVsaWVzIHVwb24gdGhlIENHSSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2V0CitieSB0aGUgaW52b2tpbmcgd2ViIHNlcnZlciwgaW5jbHVkaW5nOgorCisqIFBBVEhfSU5GTyAoaWYgR0lUX1BST0pFQ1RfUk9PVCBpcyBzZXQsIG90aGVyd2lzZSBQQVRIX1RSQU5TTEFURUQpCisqIFJFTU9URV9VU0VSCisqIFJFTU9URV9BRERSCisqIENPTlRFTlRfVFlQRQorKiBRVUVSWV9TVFJJTkcKKyogUkVRVUVTVF9NRVRIT0QKKworVGhlIEdJVF9IVFRQX0VYUE9SVF9BTEwgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBtYXkgYmUgcGFzc2VkIHRvCisnZ2l0LWh0dHAtYmFja2VuZCcgdG8gYnlwYXNzIHRoZSBjaGVjayBmb3IgdGhlICJnaXQtZGFlbW9uLWV4cG9ydC1vayIKK2ZpbGUgaW4gZWFjaCByZXBvc2l0b3J5IGJlZm9yZSBhbGxvd2luZyBleHBvcnQgb2YgdGhhdCByZXBvc2l0b3J5LgorCitUaGUgYEdJVF9IVFRQX01BWF9SRVFVRVNUX0JVRkZFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgKG9yIHRoZQorYGh0dHAubWF4UmVxdWVzdEJ1ZmZlcmAgY29uZmlnIHZhcmlhYmxlKSBtYXkgYmUgc2V0IHRvIGNoYW5nZSB0aGUKK2xhcmdlc3QgcmVmIG5lZ290aWF0aW9uIHJlcXVlc3QgdGhhdCBnaXQgd2lsbCBoYW5kbGUgZHVyaW5nIGEgZmV0Y2g7IGFueQorZmV0Y2ggcmVxdWlyaW5nIGEgbGFyZ2VyIGJ1ZmZlciB3aWxsIG5vdCBzdWNjZWVkLiAgVGhpcyB2YWx1ZSBzaG91bGQgbm90Citub3JtYWxseSBuZWVkIHRvIGJlIGNoYW5nZWQsIGJ1dCBtYXkgYmUgaGVscGZ1bCBpZiB5b3UgYXJlIGZldGNoaW5nIGZyb20KK2EgcmVwb3NpdG9yeSB3aXRoIGFuIGV4dHJlbWVseSBsYXJnZSBudW1iZXIgb2YgcmVmcy4gIFRoZSB2YWx1ZSBjYW4gYmUKK3NwZWNpZmllZCB3aXRoIGEgdW5pdCAoZS5nLiwgYDEwME1gIGZvciAxMDAgbWVnYWJ5dGVzKS4gVGhlIGRlZmF1bHQgaXMKKzEwIG1lZ2FieXRlcy4KKworVGhlIGJhY2tlbmQgcHJvY2VzcyBzZXRzIEdJVF9DT01NSVRURVJfTkFNRSB0byAnJFJFTU9URV9VU0VSJyBhbmQKK0dJVF9DT01NSVRURVJfRU1BSUwgdG8gJyRce1JFTU9URV9VU0VSfUBodHRwLiRce1JFTU9URV9BRERSXH0nLAorZW5zdXJpbmcgdGhhdCBhbnkgcmVmbG9ncyBjcmVhdGVkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJyBjb250YWluIHNvbWUKK2lkZW50aWZ5aW5nIGluZm9ybWF0aW9uIG9mIHRoZSByZW1vdGUgdXNlciB3aG8gcGVyZm9ybWVkIHRoZSBwdXNoLgorCitBbGwgQ0dJIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgYXZhaWxhYmxlIHRvIGVhY2ggb2YgdGhlIGhvb2tzCitpbnZva2VkIGJ5IHRoZSAnZ2l0LXJlY2VpdmUtcGFjaycuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1mZXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLWZldGNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWEzM2QyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1mZXRjaC50eHQKQEAgLTAsMCArMSw1MiBAQAorZ2l0LWh0dHAtZmV0Y2goMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1odHRwLWZldGNoIC0gRG93bmxvYWQgZnJvbSBhIHJlbW90ZSBHaXQgcmVwb3NpdG9yeSB2aWEgSFRUUAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBodHRwLWZldGNoJyBbLWNdIFstdF0gWy1hXSBbLWRdIFstdl0gWy13IGZpbGVuYW1lXSBbLS1yZWNvdmVyXSBbLS1zdGRpbl0gPGNvbW1pdD4gPHVybD4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitEb3dubG9hZHMgYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgdmlhIEhUVFAuCisKKypOT1RFKjogdXNlIG9mIHRoaXMgY29tbWFuZCB3aXRob3V0IC1hIGlzIGRlcHJlY2F0ZWQuICBUaGUgLWEKK2JlaGF2aW91ciB3aWxsIGJlY29tZSB0aGUgZGVmYXVsdCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorCitPUFRJT05TCistLS0tLS0tCitjb21taXQtaWQ6OgorICAgICAgICBFaXRoZXIgdGhlIGhhc2ggb3IgdGhlIGZpbGVuYW1lIHVuZGVyIFtVUkxdL3JlZnMvIHRvCisgICAgICAgIHB1bGwuCisKKy1jOjoKKwlHZXQgdGhlIGNvbW1pdCBvYmplY3RzLgorLXQ6OgorCUdldCB0cmVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1pdCBvYmplY3RzLgorLWE6OgorCUdldCBhbGwgdGhlIG9iamVjdHMuCistdjo6CisJUmVwb3J0IHdoYXQgaXMgZG93bmxvYWRlZC4KKworLXcgPGZpbGVuYW1lPjo6CisgICAgICAgIFdyaXRlcyB0aGUgY29tbWl0LWlkIGludG8gdGhlIGZpbGVuYW1lIHVuZGVyICRHSVRfRElSL3JlZnMvPGZpbGVuYW1lPiBvbgorICAgICAgICB0aGUgbG9jYWwgZW5kIGFmdGVyIHRoZSB0cmFuc2ZlciBpcyBjb21wbGV0ZS4KKworLS1zdGRpbjo6CisJSW5zdGVhZCBvZiBhIGNvbW1pdCBpZCBvbiB0aGUgY29tbWFuZCBsaW5lICh3aGljaCBpcyBub3QgZXhwZWN0ZWQgaW4gdGhpcworCWNhc2UpLCAnZ2l0IGh0dHAtZmV0Y2gnIGV4cGVjdHMgbGluZXMgb24gc3RkaW4gaW4gdGhlIGZvcm1hdAorCisJCTxjb21taXQtaWQ+WydcdCc8ZmlsZW5hbWUtYXMtaW4tLXc+XQorCistLXJlY292ZXI6OgorCVZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgcmVhY2hhYmxlIGZyb20gdGFyZ2V0IGlzIGZldGNoZWQuICBVc2VkIGFmdGVyCisJYW4gZWFybGllciBmZXRjaCBpcyBpbnRlcnJ1cHRlZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1odHRwLXB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTY3MzYyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaHR0cC1wdXNoLnR4dApAQCAtMCwwICsxLDk3IEBACitnaXQtaHR0cC1wdXNoKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1odHRwLXB1c2ggLSBQdXNoIG9iamVjdHMgb3ZlciBIVFRQL0RBViB0byBhbm90aGVyIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgaHR0cC1wdXNoJyBbLS1hbGxdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS12ZXJib3NlXSA8dXJsPiA8cmVmPiBbPHJlZj4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU2VuZHMgbWlzc2luZyBvYmplY3RzIHRvIHJlbW90ZSByZXBvc2l0b3J5LCBhbmQgdXBkYXRlcyB0aGUKK3JlbW90ZSBicmFuY2guCisKKypOT1RFKjogVGhpcyBjb21tYW5kIGlzIHRlbXBvcmFyaWx5IGRpc2FibGVkIGlmIHlvdXIgbGliY3VybAoraXMgb2xkZXIgdGhhbiA3LjE2LCBhcyB0aGUgY29tYmluYXRpb24gaGFzIGJlZW4gcmVwb3J0ZWQKK25vdCB0byB3b3JrIGFuZCBzb21ldGltZXMgY29ycnVwdHMgcmVwb3NpdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorLS1hbGw6OgorCURvIG5vdCBhc3N1bWUgdGhhdCB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgaXMgY29tcGxldGUgaW4gaXRzCisJY3VycmVudCBzdGF0ZSwgYW5kIHZlcmlmeSBhbGwgb2JqZWN0cyBpbiB0aGUgZW50aXJlIGxvY2FsCisJcmVmJ3MgaGlzdG9yeSBleGlzdCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisKKy0tZm9yY2U6OgorCVVzdWFsbHksIHRoZSBjb21tYW5kIHJlZnVzZXMgdG8gdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0CisJaXMgbm90IGFuIGFuY2VzdG9yIG9mIHRoZSBsb2NhbCByZWYgdXNlZCB0byBvdmVyd3JpdGUgaXQuCisJVGhpcyBmbGFnIGRpc2FibGVzIHRoZSBjaGVjay4gIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0CisJdGhlIHJlbW90ZSByZXBvc2l0b3J5IGNhbiBsb3NlIGNvbW1pdHM7IHVzZSBpdCB3aXRoCisJY2FyZS4KKworLS1kcnktcnVuOjoKKwlEbyBldmVyeXRoaW5nIGV4Y2VwdCBhY3R1YWxseSBzZW5kIHRoZSB1cGRhdGVzLgorCistLXZlcmJvc2U6OgorCVJlcG9ydCB0aGUgbGlzdCBvZiBvYmplY3RzIGJlaW5nIHdhbGtlZCBsb2NhbGx5IGFuZCB0aGUKKwlsaXN0IG9mIG9iamVjdHMgc3VjY2Vzc2Z1bGx5IHNlbnQgdG8gdGhlIHJlbW90ZSByZXBvc2l0b3J5LgorCistZDo6CistRDo6CisJUmVtb3ZlIDxyZWY+IGZyb20gcmVtb3RlIHJlcG9zaXRvcnkuICBUaGUgc3BlY2lmaWVkIGJyYW5jaAorCWNhbm5vdCBiZSB0aGUgcmVtb3RlIEhFQUQuICBJZiAtZCBpcyBzcGVjaWZpZWQgdGhlIGZvbGxvd2luZworCW90aGVyIGNvbmRpdGlvbnMgbXVzdCBhbHNvIGJlIG1ldDoKKworCS0gUmVtb3RlIEhFQUQgbXVzdCByZXNvbHZlIHRvIGFuIG9iamVjdCB0aGF0IGV4aXN0cyBsb2NhbGx5CisJLSBTcGVjaWZpZWQgYnJhbmNoIHJlc29sdmVzIHRvIGFuIG9iamVjdCB0aGF0IGV4aXN0cyBsb2NhbGx5CisJLSBTcGVjaWZpZWQgYnJhbmNoIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSByZW1vdGUgSEVBRAorCis8cmVmPi4uLjo6CisJVGhlIHJlbW90ZSByZWZzIHRvIHVwZGF0ZS4KKworCitTcGVjaWZ5aW5nIHRoZSBSZWZzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgJzxyZWY+JyBzcGVjaWZpY2F0aW9uIGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgcGF0dGVybiwgb3IgYSBwYWlyCitvZiBzdWNoIHBhdHRlcm5zIHNlcGFyYXRlZCBieSBhIGNvbG9uICI6IiAodGhpcyBtZWFucyB0aGF0IGEgcmVmIG5hbWUKK2Nhbm5vdCBoYXZlIGEgY29sb24gaW4gaXQpLiAgQSBzaW5nbGUgcGF0dGVybiAnPG5hbWU+JyBpcyBqdXN0IGEKK3Nob3J0aGFuZCBmb3IgJzxuYW1lPjo8bmFtZT4nLgorCitFYWNoIHBhdHRlcm4gcGFpciBjb25zaXN0cyBvZiB0aGUgc291cmNlIHNpZGUgKGJlZm9yZSB0aGUgY29sb24pCithbmQgdGhlIGRlc3RpbmF0aW9uIHNpZGUgKGFmdGVyIHRoZSBjb2xvbikuICBUaGUgcmVmIHRvIGJlCitwdXNoZWQgaXMgZGV0ZXJtaW5lZCBieSBmaW5kaW5nIGEgbWF0Y2ggdGhhdCBtYXRjaGVzIHRoZSBzb3VyY2UKK3NpZGUsIGFuZCB3aGVyZSBpdCBpcyBwdXNoZWQgaXMgZGV0ZXJtaW5lZCBieSB1c2luZyB0aGUKK2Rlc3RpbmF0aW9uIHNpZGUuCisKKyAtIEl0IGlzIGFuIGVycm9yIGlmIDxzcmM+IGRvZXMgbm90IG1hdGNoIGV4YWN0bHkgb25lIG9mIHRoZQorICAgbG9jYWwgcmVmcy4KKworIC0gSWYgPGRzdD4gZG9lcyBub3QgbWF0Y2ggYW55IHJlbW90ZSByZWYsIGVpdGhlcgorCisgICAqIGl0IGhhcyB0byBzdGFydCB3aXRoICJyZWZzLyI7IDxkc3Q+IGlzIHVzZWQgYXMgdGhlCisgICAgIGRlc3RpbmF0aW9uIGxpdGVyYWxseSBpbiB0aGlzIGNhc2UuCisKKyAgICogPHNyYz4gPT0gPGRzdD4gYW5kIHRoZSByZWYgdGhhdCBtYXRjaGVkIHRoZSA8c3JjPiBtdXN0IG5vdAorICAgICBleGlzdCBpbiB0aGUgc2V0IG9mIHJlbW90ZSByZWZzOyB0aGUgcmVmIG1hdGNoZWQgPHNyYz4KKyAgICAgbG9jYWxseSBpcyB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbi4KKworV2l0aG91dCAnLS1mb3JjZScsIHRoZSA8c3JjPiByZWYgaXMgc3RvcmVkIGF0IHRoZSByZW1vdGUgb25seSBpZgorPGRzdD4gZG9lcyBub3QgZXhpc3QsIG9yIDxkc3Q+IGlzIGEgcHJvcGVyIHN1YnNldCAoaS5lLiBhbgorYW5jZXN0b3IpIG9mIDxzcmM+LiAgVGhpcyBjaGVjaywga25vd24gYXMgImZhc3QtZm9yd2FyZCBjaGVjayIsCitpcyBwZXJmb3JtZWQgaW4gb3JkZXIgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IG92ZXJ3cml0aW5nIHRoZQorcmVtb3RlIHJlZiBhbmQgbG9zZSBvdGhlciBwZW9wbGVzJyBjb21taXRzIGZyb20gdGhlcmUuCisKK1dpdGggJy0tZm9yY2UnLCB0aGUgZmFzdC1mb3J3YXJkIGNoZWNrIGlzIGRpc2FibGVkIGZvciBhbGwgcmVmcy4KKworT3B0aW9uYWxseSwgYSA8cmVmPiBwYXJhbWV0ZXIgY2FuIGJlIHByZWZpeGVkIHdpdGggYSBwbHVzICcrJyBzaWduCit0byBkaXNhYmxlIHRoZSBmYXN0LWZvcndhcmQgY2hlY2sgb25seSBvbiB0aGF0IHJlZi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbWFwLXNlbmQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW1hcC1zZW5kLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDFlNGM4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW1hcC1zZW5kLnR4dApAQCAtMCwwICsxLDE4MyBAQAorZ2l0LWltYXAtc2VuZCgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaW1hcC1zZW5kIC0gU2VuZCBhIGNvbGxlY3Rpb24gb2YgcGF0Y2hlcyBmcm9tIHN0ZGluIHRvIGFuIElNQVAgZm9sZGVyCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGltYXAtc2VuZCcgWy12XSBbLXFdIFstLVtuby1dY3VybF0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCB1cGxvYWRzIGEgbWFpbGJveCBnZW5lcmF0ZWQgd2l0aCAnZ2l0IGZvcm1hdC1wYXRjaCcKK2ludG8gYW4gSU1BUCBkcmFmdHMgZm9sZGVyLiAgVGhpcyBhbGxvd3MgcGF0Y2hlcyB0byBiZSBzZW50IGFzCitvdGhlciBlbWFpbCBpcyB3aGVuIHVzaW5nIG1haWwgY2xpZW50cyB0aGF0IGNhbm5vdCByZWFkIG1haWxib3gKK2ZpbGVzIGRpcmVjdGx5LiBUaGUgY29tbWFuZCBhbHNvIHdvcmtzIHdpdGggYW55IGdlbmVyYWwgbWFpbGJveAoraW4gd2hpY2ggZW1haWxzIGhhdmUgdGhlIGZpZWxkcyAiRnJvbSIsICJEYXRlIiwgYW5kICJTdWJqZWN0IiBpbgordGhhdCBvcmRlci4KKworVHlwaWNhbCB1c2FnZSBpcyBzb21ldGhpbmcgbGlrZToKKworZ2l0IGZvcm1hdC1wYXRjaCAtLXNpZ25vZmYgLS1zdGRvdXQgLS1hdHRhY2ggb3JpZ2luIHwgZ2l0IGltYXAtc2VuZAorCisKK09QVElPTlMKKy0tLS0tLS0KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLgorCistcTo6CistLXF1aWV0OjoKKwlCZSBxdWlldC4KKworLS1jdXJsOjoKKwlVc2UgbGliY3VybCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBJTUFQIHNlcnZlciwgdW5sZXNzIHR1bm5lbGluZworCWludG8gaXQuICBJZ25vcmVkIGlmIEdpdCB3YXMgYnVpbHQgd2l0aG91dCB0aGUgVVNFX0NVUkxfRk9SX0lNQVBfU0VORAorCW9wdGlvbiBzZXQuCisKKy0tbm8tY3VybDo6CisJVGFsayB0byB0aGUgSU1BUCBzZXJ2ZXIgdXNpbmcgZ2l0J3Mgb3duIElNQVAgcm91dGluZXMgaW5zdGVhZCBvZgorCXVzaW5nIGxpYmN1cmwuICBJZ25vcmVkIGlmIEdpdCB3YXMgYnVpbHQgd2l0aCB0aGUgTk9fT1BFTlNTTCBvcHRpb24KKwlzZXQuCisKKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgdGhlIHRvb2wsIGltYXAuZm9sZGVyIGFuZCBlaXRoZXIgaW1hcC50dW5uZWwgb3IgaW1hcC5ob3N0IG11c3QgYmUgc2V0Cit0byBhcHByb3ByaWF0ZSB2YWx1ZXMuCisKK1ZhcmlhYmxlcworfn5+fn5+fn5+CisKK2ltYXAuZm9sZGVyOjoKKwlUaGUgZm9sZGVyIHRvIGRyb3AgdGhlIG1haWxzIGludG8sIHdoaWNoIGlzIHR5cGljYWxseSB0aGUgRHJhZnRzCisJZm9sZGVyLiBGb3IgZXhhbXBsZTogIklOQk9YLkRyYWZ0cyIsICJJTkJPWC9EcmFmdHMiIG9yCisJIltHbWFpbF0vRHJhZnRzIi4gUmVxdWlyZWQuCisKK2ltYXAudHVubmVsOjoKKwlDb21tYW5kIHVzZWQgdG8gc2V0dXAgYSB0dW5uZWwgdG8gdGhlIElNQVAgc2VydmVyIHRocm91Z2ggd2hpY2gKKwljb21tYW5kcyB3aWxsIGJlIHBpcGVkIGluc3RlYWQgb2YgdXNpbmcgYSBkaXJlY3QgbmV0d29yayBjb25uZWN0aW9uCisJdG8gdGhlIHNlcnZlci4gUmVxdWlyZWQgd2hlbiBpbWFwLmhvc3QgaXMgbm90IHNldC4KKworaW1hcC5ob3N0OjoKKwlBIFVSTCBpZGVudGlmeWluZyB0aGUgc2VydmVyLiBVc2UgYSBgaW1hcDovL2AgcHJlZml4IGZvciBub24tc2VjdXJlCisJY29ubmVjdGlvbnMgYW5kIGEgYGltYXBzOi8vYCBwcmVmaXggZm9yIHNlY3VyZSBjb25uZWN0aW9ucy4KKwlJZ25vcmVkIHdoZW4gaW1hcC50dW5uZWwgaXMgc2V0LCBidXQgcmVxdWlyZWQgb3RoZXJ3aXNlLgorCitpbWFwLnVzZXI6OgorCVRoZSB1c2VybmFtZSB0byB1c2Ugd2hlbiBsb2dnaW5nIGluIHRvIHRoZSBzZXJ2ZXIuCisKK2ltYXAucGFzczo6CisJVGhlIHBhc3N3b3JkIHRvIHVzZSB3aGVuIGxvZ2dpbmcgaW4gdG8gdGhlIHNlcnZlci4KKworaW1hcC5wb3J0OjoKKwlBbiBpbnRlZ2VyIHBvcnQgbnVtYmVyIHRvIGNvbm5lY3QgdG8gb24gdGhlIHNlcnZlci4KKwlEZWZhdWx0cyB0byAxNDMgZm9yIGltYXA6Ly8gaG9zdHMgYW5kIDk5MyBmb3IgaW1hcHM6Ly8gaG9zdHMuCisJSWdub3JlZCB3aGVuIGltYXAudHVubmVsIGlzIHNldC4KKworaW1hcC5zc2x2ZXJpZnk6OgorCUEgYm9vbGVhbiB0byBlbmFibGUvZGlzYWJsZSB2ZXJpZmljYXRpb24gb2YgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZQorCXVzZWQgYnkgdGhlIFNTTC9UTFMgY29ubmVjdGlvbi4gRGVmYXVsdCBpcyBgdHJ1ZWAuIElnbm9yZWQgd2hlbgorCWltYXAudHVubmVsIGlzIHNldC4KKworaW1hcC5wcmVmb3JtYXR0ZWRIVE1MOjoKKwlBIGJvb2xlYW4gdG8gZW5hYmxlL2Rpc2FibGUgdGhlIHVzZSBvZiBodG1sIGVuY29kaW5nIHdoZW4gc2VuZGluZworCWEgcGF0Y2guICBBbiBodG1sIGVuY29kZWQgcGF0Y2ggd2lsbCBiZSBicmFja2V0ZWQgd2l0aCA8cHJlPgorCWFuZCBoYXZlIGEgY29udGVudCB0eXBlIG9mIHRleHQvaHRtbC4gIElyb25pY2FsbHksIGVuYWJsaW5nIHRoaXMKKwlvcHRpb24gY2F1c2VzIFRodW5kZXJiaXJkIHRvIHNlbmQgdGhlIHBhdGNoIGFzIGEgcGxhaW4vdGV4dCwKKwlmb3JtYXQ9Zml4ZWQgZW1haWwuICBEZWZhdWx0IGlzIGBmYWxzZWAuCisKK2ltYXAuYXV0aE1ldGhvZDo6CisJU3BlY2lmeSBhdXRoZW50aWNhdGUgbWV0aG9kIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIElNQVAgc2VydmVyLgorCUlmIEdpdCB3YXMgYnVpbHQgd2l0aCB0aGUgTk9fQ1VSTCBvcHRpb24sIG9yIGlmIHlvdXIgY3VybCB2ZXJzaW9uIGlzIG9sZGVyCisJdGhhbiA3LjM0LjAsIG9yIGlmIHlvdSdyZSBydW5uaW5nIGdpdC1pbWFwLXNlbmQgd2l0aCB0aGUgYC0tbm8tY3VybGAKKwlvcHRpb24sIHRoZSBvbmx5IHN1cHBvcnRlZCBtZXRob2QgaXMgJ0NSQU0tTUQ1Jy4gSWYgdGhpcyBpcyBub3Qgc2V0CisJdGhlbiAnZ2l0IGltYXAtc2VuZCcgdXNlcyB0aGUgYmFzaWMgSU1BUCBwbGFpbnRleHQgTE9HSU4gY29tbWFuZC4KKworRXhhbXBsZXMKK35+fn5+fn5+CisKK1VzaW5nIHR1bm5lbCBtb2RlOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorW2ltYXBdCisgICAgZm9sZGVyID0gIklOQk9YLkRyYWZ0cyIKKyAgICB0dW5uZWwgPSAic3NoIC1xIC1DIHVzZXJAZXhhbXBsZS5jb20gL3Vzci9iaW4vaW1hcGQgLi9NYWlsZGlyIDI+IC9kZXYvbnVsbCIKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1VzaW5nIGRpcmVjdCBtb2RlOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCitbaW1hcF0KKyAgICBmb2xkZXIgPSAiSU5CT1guRHJhZnRzIgorICAgIGhvc3QgPSBpbWFwOi8vaW1hcC5leGFtcGxlLmNvbQorICAgIHVzZXIgPSBib2IKKyAgICBwYXNzID0gcDRzc3cwcmQKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVXNpbmcgZGlyZWN0IG1vZGUgd2l0aCBTU0w6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KK1tpbWFwXQorICAgIGZvbGRlciA9ICJJTkJPWC5EcmFmdHMiCisgICAgaG9zdCA9IGltYXBzOi8vaW1hcC5leGFtcGxlLmNvbQorICAgIHVzZXIgPSBib2IKKyAgICBwYXNzID0gcDRzc3cwcmQKKyAgICBwb3J0ID0gMTIzCisgICAgc3NsdmVyaWZ5ID0gZmFsc2UKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworCitFWEFNUExFCistLS0tLS0tCitUbyBzdWJtaXQgcGF0Y2hlcyB1c2luZyBHTWFpbCdzIElNQVAgaW50ZXJmYWNlLCBmaXJzdCwgZWRpdCB5b3VyIH4vLmdpdGNvbmZpZwordG8gc3BlY2lmeSB5b3VyIGFjY291bnQgc2V0dGluZ3M6CisKKy0tLS0tLS0tLQorW2ltYXBdCisJZm9sZGVyID0gIltHbWFpbF0vRHJhZnRzIgorCWhvc3QgPSBpbWFwczovL2ltYXAuZ21haWwuY29tCisJdXNlciA9IHVzZXJAZ21haWwuY29tCisJcG9ydCA9IDk5MworCXNzbHZlcmlmeSA9IGZhbHNlCistLS0tLS0tLS0KKworWW91IG1pZ2h0IG5lZWQgdG8gaW5zdGVhZCB1c2U6IGZvbGRlciA9ICJbR29vZ2xlIE1haWxdL0RyYWZ0cyIgaWYgeW91IGdldCBhbiBlcnJvcgordGhhdCB0aGUgIkZvbGRlciBkb2Vzbid0IGV4aXN0Ii4KKworT25jZSB0aGUgY29tbWl0cyBhcmUgcmVhZHkgdG8gYmUgc2VudCwgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICAkIGdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLU0gLS1zdGRvdXQgb3JpZ2luL21hc3RlciB8IGdpdCBpbWFwLXNlbmQKKworSnVzdCBtYWtlIHN1cmUgdG8gZGlzYWJsZSBsaW5lIHdyYXBwaW5nIGluIHRoZSBlbWFpbCBjbGllbnQgKEdNYWlsJ3Mgd2ViCitpbnRlcmZhY2Ugd2lsbCB3cmFwIGxpbmVzIG5vIG1hdHRlciB3aGF0LCBzbyB5b3UgbmVlZCB0byB1c2UgYSByZWFsCitJTUFQIGNsaWVudCkuCisKK0NBVVRJT04KKy0tLS0tLS0KK0l0IGlzIHN0aWxsIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGVtYWlsIG1lc3NhZ2UKK3NlbnQgYnkgeW91ciBlbWFpbCBwcm9ncmFtIG1lZXRzIHRoZSBzdGFuZGFyZHMgb2YgeW91ciBwcm9qZWN0LgorTWFueSBwcm9qZWN0cyBkbyBub3QgbGlrZSBwYXRjaGVzIHRvIGJlIGF0dGFjaGVkLiAgU29tZSBtYWlsCithZ2VudHMgd2lsbCB0cmFuc2Zvcm0gcGF0Y2hlcyAoZS5nLiB3cmFwIGxpbmVzLCBzZW5kIHRoZW0gYXMKK2Zvcm1hdD1mbG93ZWQpIGluIHdheXMgdGhhdCBtYWtlIHRoZW0gZmFpbC4gIFlvdSB3aWxsIGdldCBhbmdyeQorZmxhbWVzIHJpZGljdWxpbmcgeW91IGlmIHlvdSBkb24ndCBjaGVjayB0aGlzLgorCitUaHVuZGVyYmlyZCBpbiBwYXJ0aWN1bGFyIGlzIGtub3duIHRvIGJlIHByb2JsZW1hdGljLiAgVGh1bmRlcmJpcmQKK3VzZXJzIG1heSB3aXNoIHRvIHZpc2l0IHRoaXMgd2ViIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246CisgIGh0dHA6Ly9rYi5tb3ppbGxhemluZS5vcmcvUGxhaW5fdGV4dF9lLW1haWxfLV9UaHVuZGVyYmlyZCNDb21wbGV0ZWx5X3BsYWluX2VtYWlsCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLCBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdLCBtYm94KDUpCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtaW5kZXgtcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbmRleC1wYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTRlMDU1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW5kZXgtcGFjay50eHQKQEAgLTAsMCArMSwxMDMgQEAKK2dpdC1pbmRleC1wYWNrKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaW5kZXgtcGFjayAtIEJ1aWxkIHBhY2sgaW5kZXggZmlsZSBmb3IgYW4gZXhpc3RpbmcgcGFja2VkIGFyY2hpdmUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgaW5kZXgtcGFjaycgWy12XSBbLW8gPGluZGV4LWZpbGU+XSA8cGFjay1maWxlPgorJ2dpdCBpbmRleC1wYWNrJyAtLXN0ZGluIFstLWZpeC10aGluXSBbLS1rZWVwXSBbLXZdIFstbyA8aW5kZXgtZmlsZT5dCisgICAgICAgICAgICAgICAgIFs8cGFjay1maWxlPl0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWRzIGEgcGFja2VkIGFyY2hpdmUgKC5wYWNrKSBmcm9tIHRoZSBzcGVjaWZpZWQgZmlsZSwgYW5kCitidWlsZHMgYSBwYWNrIGluZGV4IGZpbGUgKC5pZHgpIGZvciBpdC4gIFRoZSBwYWNrZWQgYXJjaGl2ZQordG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCBjYW4gdGhlbiBiZSBwbGFjZWQgaW4gdGhlCitvYmplY3RzL3BhY2svIGRpcmVjdG9yeSBvZiBhIEdpdCByZXBvc2l0b3J5LgorCisKK09QVElPTlMKKy0tLS0tLS0KKy12OjoKKwlCZSB2ZXJib3NlIGFib3V0IHdoYXQgaXMgZ29pbmcgb24sIGluY2x1ZGluZyBwcm9ncmVzcyBzdGF0dXMuCisKKy1vIDxpbmRleC1maWxlPjo6CisJV3JpdGUgdGhlIGdlbmVyYXRlZCBwYWNrIGluZGV4IGludG8gdGhlIHNwZWNpZmllZAorCWZpbGUuICBXaXRob3V0IHRoaXMgb3B0aW9uIHRoZSBuYW1lIG9mIHBhY2sgaW5kZXgKKwlmaWxlIGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIG5hbWUgb2YgcGFja2VkIGFyY2hpdmUKKwlmaWxlIGJ5IHJlcGxhY2luZyAucGFjayB3aXRoIC5pZHggKGFuZCB0aGUgcHJvZ3JhbQorCWZhaWxzIGlmIHRoZSBuYW1lIG9mIHBhY2tlZCBhcmNoaXZlIGRvZXMgbm90IGVuZAorCXdpdGggLnBhY2spLgorCistLXN0ZGluOjoKKwlXaGVuIHRoaXMgZmxhZyBpcyBwcm92aWRlZCwgdGhlIHBhY2sgaXMgcmVhZCBmcm9tIHN0ZGluCisJaW5zdGVhZCBhbmQgYSBjb3B5IGlzIHRoZW4gd3JpdHRlbiB0byA8cGFjay1maWxlPi4gSWYKKwk8cGFjay1maWxlPiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgcGFjayBpcyB3cml0dGVuIHRvCisJb2JqZWN0cy9wYWNrLyBkaXJlY3Rvcnkgb2YgdGhlIGN1cnJlbnQgR2l0IHJlcG9zaXRvcnkgd2l0aAorCWEgZGVmYXVsdCBuYW1lIGRldGVybWluZWQgZnJvbSB0aGUgcGFjayBjb250ZW50LiAgSWYKKwk8cGFjay1maWxlPiBpcyBub3Qgc3BlY2lmaWVkIGNvbnNpZGVyIHVzaW5nIC0ta2VlcCB0bworCXByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBiZXR3ZWVuIHRoaXMgcHJvY2VzcyBhbmQKKwknZ2l0IHJlcGFjaycuCisKKy0tZml4LXRoaW46OgorCUZpeCBhICJ0aGluIiBwYWNrIHByb2R1Y2VkIGJ5IGBnaXQgcGFjay1vYmplY3RzIC0tdGhpbmAgKHNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXSBmb3IgZGV0YWlscykgYnkgYWRkaW5nIHRoZQorCWV4Y2x1ZGVkIG9iamVjdHMgdGhlIGRlbHRpZmllZCBvYmplY3RzIGFyZSBiYXNlZCBvbiB0byB0aGUKKwlwYWNrLiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGluIGNvbmp1bmN0aW9uIHdpdGggLS1zdGRpbi4KKworLS1rZWVwOjoKKwlCZWZvcmUgbW92aW5nIHRoZSBpbmRleCBpbnRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbgorCWNyZWF0ZSBhbiBlbXB0eSAua2VlcCBmaWxlIGZvciB0aGUgYXNzb2NpYXRlZCBwYWNrIGZpbGUuCisJVGhpcyBvcHRpb24gaXMgdXN1YWxseSBuZWNlc3Nhcnkgd2l0aCAtLXN0ZGluIHRvIHByZXZlbnQgYQorCXNpbXVsdGFuZW91cyAnZ2l0IHJlcGFjaycgcHJvY2VzcyBmcm9tIGRlbGV0aW5nCisJdGhlIG5ld2x5IGNvbnN0cnVjdGVkIHBhY2sgYW5kIGluZGV4IGJlZm9yZSByZWZzIGNhbiBiZQorCXVwZGF0ZWQgdG8gdXNlIG9iamVjdHMgY29udGFpbmVkIGluIHRoZSBwYWNrLgorCistLWtlZXA9PG1zZz46OgorCUxpa2UgLS1rZWVwIGNyZWF0ZSBhIC5rZWVwIGZpbGUgYmVmb3JlIG1vdmluZyB0aGUgaW5kZXggaW50bworCWl0cyBmaW5hbCBkZXN0aW5hdGlvbiwgYnV0IHJhdGhlciB0aGFuIGNyZWF0aW5nIGFuIGVtcHR5IGZpbGUKKwlwbGFjZSAnPG1zZz4nIGZvbGxvd2VkIGJ5IGFuIExGIGludG8gdGhlIC5rZWVwIGZpbGUuICBUaGUgJzxtc2c+JworCW1lc3NhZ2UgY2FuIGxhdGVyIGJlIHNlYXJjaGVkIGZvciB3aXRoaW4gYWxsIC5rZWVwIGZpbGVzIHRvCisJbG9jYXRlIGFueSB3aGljaCBoYXZlIG91dGxpdmVkIHRoZWlyIHVzZWZ1bG5lc3MuCisKKy0taW5kZXgtdmVyc2lvbj08dmVyc2lvbj5bLDxvZmZzZXQ+XTo6CisJVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGJ5IHRoZSB0ZXN0IHN1aXRlIG9ubHkuIEl0IGFsbG93cworCXRvIGZvcmNlIHRoZSB2ZXJzaW9uIGZvciB0aGUgZ2VuZXJhdGVkIHBhY2sgaW5kZXgsIGFuZCB0byBmb3JjZQorCTY0LWJpdCBpbmRleCBlbnRyaWVzIG9uIG9iamVjdHMgbG9jYXRlZCBhYm92ZSB0aGUgZ2l2ZW4gb2Zmc2V0LgorCistLXN0cmljdDo6CisJRGllLCBpZiB0aGUgcGFjayBjb250YWlucyBicm9rZW4gb2JqZWN0cyBvciBsaW5rcy4KKworLS1jaGVjay1zZWxmLWNvbnRhaW5lZC1hbmQtY29ubmVjdGVkOjoKKwlEaWUgaWYgdGhlIHBhY2sgY29udGFpbnMgYnJva2VuIGxpbmtzLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCisKKy0tdGhyZWFkcz08bj46OgorCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gc3Bhd24gd2hlbiByZXNvbHZpbmcKKwlkZWx0YXMuIFRoaXMgcmVxdWlyZXMgdGhhdCBpbmRleC1wYWNrIGJlIGNvbXBpbGVkIHdpdGgKKwlwdGhyZWFkcyBvdGhlcndpc2UgdGhpcyBvcHRpb24gaXMgaWdub3JlZCB3aXRoIGEgd2FybmluZy4KKwlUaGlzIGlzIG1lYW50IHRvIHJlZHVjZSBwYWNraW5nIHRpbWUgb24gbXVsdGlwcm9jZXNzb3IKKwltYWNoaW5lcy4gVGhlIHJlcXVpcmVkIGFtb3VudCBvZiBtZW1vcnkgZm9yIHRoZSBkZWx0YSBzZWFyY2gKKwl3aW5kb3cgaXMgaG93ZXZlciBtdWx0aXBsaWVkIGJ5IHRoZSBudW1iZXIgb2YgdGhyZWFkcy4KKwlTcGVjaWZ5aW5nIDAgd2lsbCBjYXVzZSBHaXQgdG8gYXV0by1kZXRlY3QgdGhlIG51bWJlciBvZiBDUFUncworCWFuZCB1c2UgbWF4aW11bSAzIHRocmVhZHMuCisKKworTm90ZQorLS0tLQorCitPbmNlIHRoZSBpbmRleCBoYXMgYmVlbiBjcmVhdGVkLCB0aGUgbGlzdCBvZiBvYmplY3QgbmFtZXMgaXMgc29ydGVkCithbmQgdGhlIFNIQS0xIGhhc2ggb2YgdGhhdCBsaXN0IGlzIHByaW50ZWQgdG8gc3Rkb3V0LiBJZiAtLXN0ZGluIHdhcworYWxzbyB1c2VkIHRoZW4gdGhpcyBpcyBwcmVmaXhlZCBieSBlaXRoZXIgInBhY2tcdCIsIG9yICJrZWVwXHQiIGlmIGEKK25ldyAua2VlcCBmaWxlIHdhcyBzdWNjZXNzZnVsbHkgY3JlYXRlZC4gVGhpcyBpcyB1c2VmdWwgdG8gcmVtb3ZlIGEKKy5rZWVwIGZpbGUgdXNlZCBhcyBhIGxvY2sgdG8gcHJldmVudCB0aGUgcmFjZSB3aXRoICdnaXQgcmVwYWNrJworbWVudGlvbmVkIGFib3ZlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluaXQtZGIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC1kYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4YTZjZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQtZGIudHh0CkBAIC0wLDAgKzEsMjMgQEAKK2dpdC1pbml0LWRiKDEpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaW5pdC1kYiAtIENyZWF0ZXMgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgaW5pdC1kYicgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlX2RpcmVjdG9yeT5dIFstLXNlcGFyYXRlLWdpdC1kaXIgPGdpdCBkaXI+XSBbLS1zaGFyZWRbPTxwZXJtaXNzaW9ucz5dXQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIGEgc3lub255bSBmb3IgbGlua2dpdDpnaXQtaW5pdFsxXS4gIFBsZWFzZSByZWZlciB0byB0aGUKK2RvY3VtZW50YXRpb24gb2YgdGhhdCBjb21tYW5kLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW5pdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3NGQyNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluaXQudHh0CkBAIC0wLDAgKzEsMTUzIEBACitnaXQtaW5pdCgxKQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWluaXQgLSBDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBpbml0JyBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGVfZGlyZWN0b3J5Pl0KKwkgIFstLXNlcGFyYXRlLWdpdC1kaXIgPGdpdCBkaXI+XQorCSAgWy0tc2hhcmVkWz08cGVybWlzc2lvbnM+XV0gW2RpcmVjdG9yeV0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworVGhpcyBjb21tYW5kIGNyZWF0ZXMgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgLSBiYXNpY2FsbHkgYSBgLmdpdGAKK2RpcmVjdG9yeSB3aXRoIHN1YmRpcmVjdG9yaWVzIGZvciBgb2JqZWN0c2AsIGByZWZzL2hlYWRzYCwKK2ByZWZzL3RhZ3NgLCBhbmQgdGVtcGxhdGUgZmlsZXMuICBBbiBpbml0aWFsIGBIRUFEYCBmaWxlIHRoYXQKK3JlZmVyZW5jZXMgdGhlIEhFQUQgb2YgdGhlIG1hc3RlciBicmFuY2ggaXMgYWxzbyBjcmVhdGVkLgorCitJZiB0aGUgYCRHSVRfRElSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdGhlbiBpdCBzcGVjaWZpZXMgYSBwYXRoCit0byB1c2UgaW5zdGVhZCBvZiBgLi8uZ2l0YCBmb3IgdGhlIGJhc2Ugb2YgdGhlIHJlcG9zaXRvcnkuCisKK0lmIHRoZSBvYmplY3Qgc3RvcmFnZSBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkIHZpYSB0aGUKK2AkR0lUX09CSkVDVF9ESVJFQ1RPUllgIGVudmlyb25tZW50IHZhcmlhYmxlIHRoZW4gdGhlIHNoYTEgZGlyZWN0b3JpZXMKK2FyZSBjcmVhdGVkIHVuZGVybmVhdGggLSBvdGhlcndpc2UgdGhlIGRlZmF1bHQgYCRHSVRfRElSL29iamVjdHNgCitkaXJlY3RvcnkgaXMgdXNlZC4KKworUnVubmluZyAnZ2l0IGluaXQnIGluIGFuIGV4aXN0aW5nIHJlcG9zaXRvcnkgaXMgc2FmZS4gSXQgd2lsbCBub3QKK292ZXJ3cml0ZSB0aGluZ3MgdGhhdCBhcmUgYWxyZWFkeSB0aGVyZS4gVGhlIHByaW1hcnkgcmVhc29uIGZvcgorcmVydW5uaW5nICdnaXQgaW5pdCcgaXMgdG8gcGljayB1cCBuZXdseSBhZGRlZCB0ZW1wbGF0ZXMgKG9yIHRvIG1vdmUKK3RoZSByZXBvc2l0b3J5IHRvIGFub3RoZXIgcGxhY2UgaWYgLS1zZXBhcmF0ZS1naXQtZGlyIGlzIGdpdmVuKS4KKworT1BUSU9OUworLS0tLS0tLQorCistLQorCistcTo6CistLXF1aWV0OjoKKworT25seSBwcmludCBlcnJvciBhbmQgd2FybmluZyBtZXNzYWdlczsgYWxsIG90aGVyIG91dHB1dCB3aWxsIGJlIHN1cHByZXNzZWQuCisKKy0tYmFyZTo6CisKK0NyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeS4gSWYgR0lUX0RJUiBlbnZpcm9ubWVudCBpcyBub3Qgc2V0LCBpdCBpcyBzZXQgdG8gdGhlCitjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorCistLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+OjoKKworU3BlY2lmeSB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZC4gIChTZWUgdGhlICJURU1QTEFURQorRElSRUNUT1JZIiBzZWN0aW9uIGJlbG93LikKKworLS1zZXBhcmF0ZS1naXQtZGlyPTxnaXQgZGlyPjo6CisKK0luc3RlYWQgb2YgaW5pdGlhbGl6aW5nIHRoZSByZXBvc2l0b3J5IGFzIGEgZGlyZWN0b3J5IHRvIGVpdGhlciBgJEdJVF9ESVJgIG9yCitgLi8uZ2l0L2AsIGNyZWF0ZSBhIHRleHQgZmlsZSB0aGVyZSBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBhY3R1YWwKK3JlcG9zaXRvcnkuICBUaGlzIGZpbGUgYWN0cyBhcyBmaWxlc3lzdGVtLWFnbm9zdGljIEdpdCBzeW1ib2xpYyBsaW5rIHRvIHRoZQorcmVwb3NpdG9yeS4KKysKK0lmIHRoaXMgaXMgcmVpbml0aWFsaXphdGlvbiwgdGhlIHJlcG9zaXRvcnkgd2lsbCBiZSBtb3ZlZCB0byB0aGUgc3BlY2lmaWVkIHBhdGguCisKKy0tc2hhcmVkWz0oZmFsc2V8dHJ1ZXx1bWFza3xncm91cHxhbGx8d29ybGR8ZXZlcnlib2R5fDB4eHgpXTo6CisKK1NwZWNpZnkgdGhhdCB0aGUgR2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2Vycy4gIFRoaXMKK2FsbG93cyB1c2VycyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgZ3JvdXAgdG8gcHVzaCBpbnRvIHRoYXQKK3JlcG9zaXRvcnkuICBXaGVuIHNwZWNpZmllZCwgdGhlIGNvbmZpZyB2YXJpYWJsZSAiY29yZS5zaGFyZWRSZXBvc2l0b3J5IiBpcworc2V0IHNvIHRoYXQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHVuZGVyIGAkR0lUX0RJUmAgYXJlIGNyZWF0ZWQgd2l0aCB0aGUKK3JlcXVlc3RlZCBwZXJtaXNzaW9ucy4gIFdoZW4gbm90IHNwZWNpZmllZCwgR2l0IHdpbGwgdXNlIHBlcm1pc3Npb25zIHJlcG9ydGVkCitieSB1bWFzaygyKS4KKysKK1RoZSBvcHRpb24gY2FuIGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXMsIGRlZmF1bHRpbmcgdG8gJ2dyb3VwJyBpZiBubyB2YWx1ZQoraXMgZ2l2ZW46CisrCistLQorJ3VtYXNrJyAob3IgJ2ZhbHNlJyk6OgorCitVc2UgcGVybWlzc2lvbnMgcmVwb3J0ZWQgYnkgdW1hc2soMikuIFRoZSBkZWZhdWx0LCB3aGVuIGAtLXNoYXJlZGAgaXMgbm90CitzcGVjaWZpZWQuCisKKydncm91cCcgKG9yICd0cnVlJyk6OgorCitNYWtlIHRoZSByZXBvc2l0b3J5IGdyb3VwLXdyaXRhYmxlLCAoYW5kIGcrc3gsIHNpbmNlIHRoZSBnaXQgZ3JvdXAgbWF5IGJlIG5vdAordGhlIHByaW1hcnkgZ3JvdXAgb2YgYWxsIHVzZXJzKS4gVGhpcyBpcyB1c2VkIHRvIGxvb3NlbiB0aGUgcGVybWlzc2lvbnMgb2YgYW4KK290aGVyd2lzZSBzYWZlIHVtYXNrKDIpIHZhbHVlLiBOb3RlIHRoYXQgdGhlIHVtYXNrIHN0aWxsIGFwcGxpZXMgdG8gdGhlIG90aGVyCitwZXJtaXNzaW9uIGJpdHMgKGUuZy4gaWYgdW1hc2sgaXMgJzAwMjInLCB1c2luZyAnZ3JvdXAnIHdpbGwgbm90IHJlbW92ZSByZWFkCitwcml2aWxlZ2VzIGZyb20gb3RoZXIgKG5vbi1ncm91cCkgdXNlcnMpLiBTZWUgJzB4eHgnIGZvciBob3cgdG8gZXhhY3RseSBzcGVjaWZ5Cit0aGUgcmVwb3NpdG9yeSBwZXJtaXNzaW9ucy4KKworJ2FsbCcgKG9yICd3b3JsZCcgb3IgJ2V2ZXJ5Ym9keScpOjoKKworU2FtZSBhcyAnZ3JvdXAnLCBidXQgbWFrZSB0aGUgcmVwb3NpdG9yeSByZWFkYWJsZSBieSBhbGwgdXNlcnMuCisKKycweHh4Jzo6CisKKycweHh4JyBpcyBhbiBvY3RhbCBudW1iZXIgYW5kIGVhY2ggZmlsZSB3aWxsIGhhdmUgbW9kZSAnMHh4eCcuICcweHh4JyB3aWxsCitvdmVycmlkZSB1c2VycycgdW1hc2soMikgdmFsdWUgKGFuZCBub3Qgb25seSBsb29zZW4gcGVybWlzc2lvbnMgYXMgJ2dyb3VwJyBhbmQKKydhbGwnIGRvZXMpLiAnMDY0MCcgd2lsbCBjcmVhdGUgYSByZXBvc2l0b3J5IHdoaWNoIGlzIGdyb3VwLXJlYWRhYmxlLCBidXQgbm90Citncm91cC13cml0YWJsZSBvciBhY2Nlc3NpYmxlIHRvIG90aGVycy4gJzA2NjAnIHdpbGwgY3JlYXRlIGEgcmVwbyB0aGF0IGlzCityZWFkYWJsZSBhbmQgd3JpdGFibGUgdG8gdGhlIGN1cnJlbnQgdXNlciBhbmQgZ3JvdXAsIGJ1dCBpbmFjY2Vzc2libGUgdG8gb3RoZXJzLgorLS0KKworQnkgZGVmYXVsdCwgdGhlIGNvbmZpZ3VyYXRpb24gZmxhZyBgcmVjZWl2ZS5kZW55Tm9uRmFzdEZvcndhcmRzYCBpcyBlbmFibGVkCitpbiBzaGFyZWQgcmVwb3NpdG9yaWVzLCBzbyB0aGF0IHlvdSBjYW5ub3QgZm9yY2UgYSBub24gZmFzdC1mb3J3YXJkaW5nIHB1c2gKK2ludG8gaXQuCisKK0lmIHlvdSBwcm92aWRlIGEgJ2RpcmVjdG9yeScsIHRoZSBjb21tYW5kIGlzIHJ1biBpbnNpZGUgaXQuIElmIHRoaXMgZGlyZWN0b3J5Citkb2VzIG5vdCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkLgorCistLQorCitURU1QTEFURSBESVJFQ1RPUlkKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdGVtcGxhdGUgZGlyZWN0b3J5IGNvbnRhaW5zIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0aGF0IHdpbGwgYmUgY29waWVkIHRvCit0aGUgYCRHSVRfRElSYCBhZnRlciBpdCBpcyBjcmVhdGVkLgorCitUaGUgdGVtcGxhdGUgZGlyZWN0b3J5IHdpbGwgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgKGluIG9yZGVyKToKKworIC0gdGhlIGFyZ3VtZW50IGdpdmVuIHdpdGggdGhlIGAtLXRlbXBsYXRlYCBvcHRpb247CisKKyAtIHRoZSBjb250ZW50cyBvZiB0aGUgYCRHSVRfVEVNUExBVEVfRElSYCBlbnZpcm9ubWVudCB2YXJpYWJsZTsKKworIC0gdGhlIGBpbml0LnRlbXBsYXRlRGlyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlOyBvcgorCisgLSB0aGUgZGVmYXVsdCB0ZW1wbGF0ZSBkaXJlY3Rvcnk6IGAvdXNyL3NoYXJlL2dpdC1jb3JlL3RlbXBsYXRlc2AuCisKK1RoZSBkZWZhdWx0IHRlbXBsYXRlIGRpcmVjdG9yeSBpbmNsdWRlcyBzb21lIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIHN1Z2dlc3RlZAorImV4Y2x1ZGUgcGF0dGVybnMiIChzZWUgbGlua2dpdDpnaXRpZ25vcmVbNV0pLCBhbmQgc2FtcGxlIGhvb2sgZmlsZXMgKHNlZSBsaW5rZ2l0OmdpdGhvb2tzWzVdKS4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1N0YXJ0IGEgbmV3IEdpdCByZXBvc2l0b3J5IGZvciBhbiBleGlzdGluZyBjb2RlIGJhc2U6OgorKworLS0tLS0tLS0tLS0tLS0tLQorJCBjZCAvcGF0aC90by9teS9jb2RlYmFzZQorJCBnaXQgaW5pdCAgICAgIDwxPgorJCBnaXQgYWRkIC4gICAgIDwyPgorJCBnaXQgY29tbWl0ICAgIDwzPgorLS0tLS0tLS0tLS0tLS0tLQorKworPDE+IENyZWF0ZSBhIC9wYXRoL3RvL215L2NvZGViYXNlLy5naXQgZGlyZWN0b3J5LgorPDI+IEFkZCBhbGwgZXhpc3RpbmcgZmlsZXMgdG8gdGhlIGluZGV4LgorPDM+IFJlY29yZCB0aGUgcHJpc3RpbmUgc3RhdGUgYXMgdGhlIGZpcnN0IGNvbW1pdCBpbiB0aGUgaGlzdG9yeS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbnN0YXdlYi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1pbnN0YXdlYi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3NWIyNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWluc3Rhd2ViLnR4dApAQCAtMCwwICsxLDkzIEBACitnaXQtaW5zdGF3ZWIoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaW5zdGF3ZWIgLSBJbnN0YW50bHkgYnJvd3NlIHlvdXIgd29ya2luZyByZXBvc2l0b3J5IGluIGdpdHdlYgorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgaW5zdGF3ZWInIFstLWxvY2FsXSBbLS1odHRwZD08aHR0cGQ+XSBbLS1wb3J0PTxwb3J0Pl0KKyAgICAgICAgICAgICAgIFstLWJyb3dzZXI9PGJyb3dzZXI+XQorJ2dpdCBpbnN0YXdlYicgWy0tc3RhcnRdIFstLXN0b3BdIFstLXJlc3RhcnRdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQSBzaW1wbGUgc2NyaXB0IHRvIHNldCB1cCBgZ2l0d2ViYCBhbmQgYSB3ZWIgc2VydmVyIGZvciBicm93c2luZyB0aGUgbG9jYWwKK3JlcG9zaXRvcnkuCisKK09QVElPTlMKKy0tLS0tLS0KKworLWw6OgorLS1sb2NhbDo6CisJT25seSBiaW5kIHRoZSB3ZWIgc2VydmVyIHRvIHRoZSBsb2NhbCBJUCAoMTI3LjAuMC4xKS4KKworLWQ6OgorLS1odHRwZDo6CisJVGhlIEhUVFAgZGFlbW9uIGNvbW1hbmQtbGluZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuCisJQ29tbWFuZC1saW5lIG9wdGlvbnMgbWF5IGJlIHNwZWNpZmllZCBoZXJlLCBhbmQgdGhlCisJY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgYmUgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWFuZC1saW5lLgorCUN1cnJlbnRseSBhcGFjaGUyLCBsaWdodHRwZCwgbW9uZ29vc2UsIHBsYWNrdXAgYW5kIHdlYnJpY2sgYXJlIHN1cHBvcnRlZC4KKwkoRGVmYXVsdDogbGlnaHR0cGQpCisKKy1tOjoKKy0tbW9kdWxlLXBhdGg6OgorCVRoZSBtb2R1bGUgcGF0aCAob25seSBuZWVkZWQgaWYgaHR0cGQgaXMgQXBhY2hlKS4KKwkoRGVmYXVsdDogL3Vzci9saWIvYXBhY2hlMi9tb2R1bGVzKQorCistcDo6CistLXBvcnQ6OgorCVRoZSBwb3J0IG51bWJlciB0byBiaW5kIHRoZSBodHRwZCB0by4gIChEZWZhdWx0OiAxMjM0KQorCistYjo6CistLWJyb3dzZXI6OgorCVRoZSB3ZWIgYnJvd3NlciB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHZpZXcgdGhlIGdpdHdlYgorCXBhZ2UuIFRoaXMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlICdnaXQgd2Vie2xpdGRkfWJyb3dzZScgaGVscGVyCisJc2NyaXB0IGFsb25nIHdpdGggdGhlIFVSTCBvZiB0aGUgZ2l0d2ViIGluc3RhbmNlLiBTZWUKKwlsaW5rZ2l0OmdpdC13ZWJ7bGl0ZGR9YnJvd3NlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMuIElmCisJdGhlIHNjcmlwdCBmYWlscywgdGhlIFVSTCB3aWxsIGJlIHByaW50ZWQgdG8gc3Rkb3V0LgorCitzdGFydDo6CistLXN0YXJ0OjoKKwlTdGFydCB0aGUgaHR0cGQgaW5zdGFuY2UgYW5kIGV4aXQuICBSZWdlbmVyYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMKKwlhcyBuZWNlc3NhcnkgZm9yIHNwYXduaW5nIGEgbmV3IGluc3RhbmNlLgorCitzdG9wOjoKKy0tc3RvcDo6CisJU3RvcCB0aGUgaHR0cGQgaW5zdGFuY2UgYW5kIGV4aXQuICBUaGlzIGRvZXMgbm90IGdlbmVyYXRlCisJYW55IG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBzcGF3bmluZyBhIG5ldyBpbnN0YW5jZSwKKwlub3IgZG9lcyBpdCBjbG9zZSB0aGUgYnJvd3Nlci4KKworcmVzdGFydDo6CistLXJlc3RhcnQ6OgorCVJlc3RhcnQgdGhlIGh0dHBkIGluc3RhbmNlIGFuZCBleGl0LiAgUmVnZW5lcmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzCisJYXMgbmVjZXNzYXJ5IGZvciBzcGF3bmluZyBhIG5ldyBpbnN0YW5jZS4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitZb3UgbWF5IHNwZWNpZnkgY29uZmlndXJhdGlvbiBpbiB5b3VyIC5naXQvY29uZmlnCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbaW5zdGF3ZWJdCisJbG9jYWwgPSB0cnVlCisJaHR0cGQgPSBhcGFjaGUyIC1mCisJcG9ydCA9IDQzMjEKKwlicm93c2VyID0ga29ucXVlcm9yCisJbW9kdWxlUGF0aCA9IC91c3IvbGliL2FwYWNoZTIvbW9kdWxlcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAnaW5zdGF3ZWIuYnJvd3NlcicgaXMgbm90IHNldCwKKyd3ZWIuYnJvd3Nlcicgd2lsbCBiZSB1c2VkIGluc3RlYWQgaWYgaXQgaXMgZGVmaW5lZC4gU2VlCitsaW5rZ2l0OmdpdC13ZWJ7bGl0ZGR9YnJvd3NlWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR3ZWJbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1pbnRlcnByZXQtdHJhaWxlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtaW50ZXJwcmV0LXRyYWlsZXJzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWNkNDk3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtaW50ZXJwcmV0LXRyYWlsZXJzLnR4dApAQCAtMCwwICsxLDMxNCBAQAorZ2l0LWludGVycHJldC10cmFpbGVycygxKQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtaW50ZXJwcmV0LXRyYWlsZXJzIC0gaGVscCBhZGQgc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBpbnRvIGNvbW1pdCBtZXNzYWdlcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgaW50ZXJwcmV0LXRyYWlsZXJzJyBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciA8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSBbPGZpbGU+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0hlbHAgYWRkaW5nICd0cmFpbGVycycgbGluZXMsIHRoYXQgbG9vayBzaW1pbGFyIHRvIFJGQyA4MjIgZS1tYWlsCitoZWFkZXJzLCBhdCB0aGUgZW5kIG9mIHRoZSBvdGhlcndpc2UgZnJlZS1mb3JtIHBhcnQgb2YgYSBjb21taXQKK21lc3NhZ2UuCisKK1RoaXMgY29tbWFuZCByZWFkcyBzb21lIHBhdGNoZXMgb3IgY29tbWl0IG1lc3NhZ2VzIGZyb20gZWl0aGVyIHRoZQorPGZpbGU+IGFyZ3VtZW50cyBvciB0aGUgc3RhbmRhcmQgaW5wdXQgaWYgbm8gPGZpbGU+IGlzIHNwZWNpZmllZC4gVGhlbgordGhpcyBjb21tYW5kIGFwcGxpZXMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdXNpbmcgdGhlIGAtLXRyYWlsZXJgCitvcHRpb24sIGlmIGFueSwgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIHBhcnQgb2YgZWFjaCBpbnB1dCBmaWxlLiBUaGUKK3Jlc3VsdCBpcyBlbWl0dGVkIG9uIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKK1NvbWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgY29udHJvbCB0aGUgd2F5IHRoZSBgLS10cmFpbGVyYCBhcmd1bWVudHMKK2FyZSBhcHBsaWVkIHRvIGVhY2ggY29tbWl0IG1lc3NhZ2UgYW5kIHRoZSB3YXkgYW55IGV4aXN0aW5nIHRyYWlsZXIgaW4KK3RoZSBjb21taXQgbWVzc2FnZSBpcyBjaGFuZ2VkLiBUaGV5IGFsc28gbWFrZSBpdCBwb3NzaWJsZSB0bworYXV0b21hdGljYWxseSBhZGQgc29tZSB0cmFpbGVycy4KKworQnkgZGVmYXVsdCwgYSAnPHRva2VuPj08dmFsdWU+JyBvciAnPHRva2VuPjo8dmFsdWU+JyBhcmd1bWVudCBnaXZlbgordXNpbmcgYC0tdHJhaWxlcmAgd2lsbCBiZSBhcHBlbmRlZCBhZnRlciB0aGUgZXhpc3RpbmcgdHJhaWxlcnMgb25seSBpZgordGhlIGxhc3QgdHJhaWxlciBoYXMgYSBkaWZmZXJlbnQgKDx0b2tlbj4sIDx2YWx1ZT4pIHBhaXIgKG9yIGlmIHRoZXJlCitpcyBubyBleGlzdGluZyB0cmFpbGVyKS4gVGhlIDx0b2tlbj4gYW5kIDx2YWx1ZT4gcGFydHMgd2lsbCBiZSB0cmltbWVkCit0byByZW1vdmUgc3RhcnRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGFuZCB0aGUgcmVzdWx0aW5nIHRyaW1tZWQKKzx0b2tlbj4gYW5kIDx2YWx1ZT4gd2lsbCBhcHBlYXIgaW4gdGhlIG1lc3NhZ2UgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rva2VuOiB2YWx1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbWVhbnMgdGhhdCB0aGUgdHJpbW1lZCA8dG9rZW4+IGFuZCA8dmFsdWU+IHdpbGwgYmUgc2VwYXJhdGVkIGJ5CitgJzogJ2AgKG9uZSBjb2xvbiBmb2xsb3dlZCBieSBvbmUgc3BhY2UpLgorCitCeSBkZWZhdWx0IHRoZSBuZXcgdHJhaWxlciB3aWxsIGFwcGVhciBhdCB0aGUgZW5kIG9mIGFsbCB0aGUgZXhpc3RpbmcKK3RyYWlsZXJzLiBJZiB0aGVyZSBpcyBubyBleGlzdGluZyB0cmFpbGVyLCB0aGUgbmV3IHRyYWlsZXIgd2lsbCBhcHBlYXIKK2FmdGVyIHRoZSBjb21taXQgbWVzc2FnZSBwYXJ0IG9mIHRoZSBvdXRwdXQsIGFuZCwgaWYgdGhlcmUgaXMgbm8gbGluZQord2l0aCBvbmx5IHNwYWNlcyBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQgbWVzc2FnZSBwYXJ0LCBvbmUgYmxhbmsgbGluZQord2lsbCBiZSBhZGRlZCBiZWZvcmUgdGhlIG5ldyB0cmFpbGVyLgorCitFeGlzdGluZyB0cmFpbGVycyBhcmUgZXh0cmFjdGVkIGZyb20gdGhlIGlucHV0IG1lc3NhZ2UgYnkgbG9va2luZyBmb3IKK2EgZ3JvdXAgb2Ygb25lIG9yIG1vcmUgbGluZXMgdGhhdCBjb250YWluIGEgY29sb24gKGJ5IGRlZmF1bHQpLCB3aGVyZQordGhlIGdyb3VwIGlzIHByZWNlZGVkIGJ5IG9uZSBvciBtb3JlIGVtcHR5IChvciB3aGl0ZXNwYWNlLW9ubHkpIGxpbmVzLgorVGhlIGdyb3VwIG11c3QgZWl0aGVyIGJlIGF0IHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2Ugb3IgYmUgdGhlIGxhc3QKK25vbi13aGl0ZXNwYWNlIGxpbmVzIGJlZm9yZSBhIGxpbmUgdGhhdCBzdGFydHMgd2l0aCAnLS0tJy4gU3VjaCB0aHJlZQorbWludXMgc2lnbnMgc3RhcnQgdGhlIHBhdGNoIHBhcnQgb2YgdGhlIG1lc3NhZ2UuCisKK1doZW4gcmVhZGluZyB0cmFpbGVycywgdGhlcmUgY2FuIGJlIHdoaXRlc3BhY2VzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlCit0b2tlbiwgdGhlIHNlcGFyYXRvciBhbmQgdGhlIHZhbHVlLiBUaGVyZSBjYW4gYWxzbyBiZSB3aGl0ZXNwYWNlcworaW5zaWRlIHRoZSB0b2tlbiBhbmQgdGhlIHZhbHVlLgorCitOb3RlIHRoYXQgJ3RyYWlsZXJzJyBkbyBub3QgZm9sbG93IGFuZCBhcmUgbm90IGludGVuZGVkIHRvIGZvbGxvdyBtYW55CitydWxlcyBmb3IgUkZDIDgyMiBoZWFkZXJzLiBGb3IgZXhhbXBsZSB0aGV5IGRvIG5vdCBmb2xsb3cgdGhlIGxpbmUKK2ZvbGRpbmcgcnVsZXMsIHRoZSBlbmNvZGluZyBydWxlcyBhbmQgcHJvYmFibHkgbWFueSBvdGhlciBydWxlcy4KKworT1BUSU9OUworLS0tLS0tLQorLS10cmltLWVtcHR5OjoKKwlJZiB0aGUgPHZhbHVlPiBwYXJ0IG9mIGFueSB0cmFpbGVyIGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZSwKKwl0aGUgd2hvbGUgdHJhaWxlciB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgcmVzdWx0aW5nIG1lc3NhZ2UuCisJVGhpcyBhcHBsaWVzIHRvIGV4aXN0aW5nIHRyYWlsZXJzIGFzIHdlbGwgYXMgbmV3IHRyYWlsZXJzLgorCistLXRyYWlsZXIgPHRva2VuPlsoPXw6KTx2YWx1ZT5dOjoKKwlTcGVjaWZ5IGEgKDx0b2tlbj4sIDx2YWx1ZT4pIHBhaXIgdGhhdCBzaG91bGQgYmUgYXBwbGllZCBhcyBhCisJdHJhaWxlciB0byB0aGUgaW5wdXQgbWVzc2FnZXMuIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgdGhpcworCWNvbW1hbmQuCisKK0NPTkZJR1VSQVRJT04gVkFSSUFCTEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0cmFpbGVyLnNlcGFyYXRvcnM6OgorCVRoaXMgb3B0aW9uIHRlbGxzIHdoaWNoIGNoYXJhY3RlcnMgYXJlIHJlY29nbml6ZWQgYXMgdHJhaWxlcgorCXNlcGFyYXRvcnMuIEJ5IGRlZmF1bHQgb25seSAnOicgaXMgcmVjb2duaXplZCBhcyBhIHRyYWlsZXIKKwlzZXBhcmF0b3IsIGV4Y2VwdCB0aGF0ICc9JyBpcyBhbHdheXMgYWNjZXB0ZWQgb24gdGhlIGNvbW1hbmQKKwlsaW5lIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgZ2l0IGNvbW1hbmRzLgorKworVGhlIGZpcnN0IGNoYXJhY3RlciBnaXZlbiBieSB0aGlzIG9wdGlvbiB3aWxsIGJlIHRoZSBkZWZhdWx0IGNoYXJhY3RlcgordXNlZCB3aGVuIGFub3RoZXIgc2VwYXJhdG9yIGlzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZyBmb3IgdGhpcwordHJhaWxlci4KKysKK0ZvciBleGFtcGxlLCBpZiB0aGUgdmFsdWUgZm9yIHRoaXMgb3B0aW9uIGlzICIlPSQiLCB0aGVuIG9ubHkgbGluZXMKK3VzaW5nIHRoZSBmb3JtYXQgJzx0b2tlbj48c2VwPjx2YWx1ZT4nIHdpdGggPHNlcD4gY29udGFpbmluZyAnJScsICc9Jworb3IgJyQnIGFuZCB0aGVuIHNwYWNlcyB3aWxsIGJlIGNvbnNpZGVyZWQgdHJhaWxlcnMuIEFuZCAnJScgd2lsbCBiZQordGhlIGRlZmF1bHQgc2VwYXJhdG9yIHVzZWQsIHNvIGJ5IGRlZmF1bHQgdHJhaWxlcnMgd2lsbCBhcHBlYXIgbGlrZToKKyc8dG9rZW4+JSA8dmFsdWU+JyAob25lIHBlcmNlbnQgc2lnbiBhbmQgb25lIHNwYWNlIHdpbGwgYXBwZWFyIGJldHdlZW4KK3RoZSB0b2tlbiBhbmQgdGhlIHZhbHVlKS4KKwordHJhaWxlci53aGVyZTo6CisJVGhpcyBvcHRpb24gdGVsbHMgd2hlcmUgYSBuZXcgdHJhaWxlciB3aWxsIGJlIGFkZGVkLgorKworVGhpcyBjYW4gYmUgYGVuZGAsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LCBgc3RhcnRgLCBgYWZ0ZXJgIG9yIGBiZWZvcmVgLgorKworSWYgaXQgaXMgYGVuZGAsIHRoZW4gZWFjaCBuZXcgdHJhaWxlciB3aWxsIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZQorZXhpc3RpbmcgdHJhaWxlcnMuCisrCitJZiBpdCBpcyBgc3RhcnRgLCB0aGVuIGVhY2ggbmV3IHRyYWlsZXIgd2lsbCBhcHBlYXIgYXQgdGhlIHN0YXJ0LAoraW5zdGVhZCBvZiB0aGUgZW5kLCBvZiB0aGUgZXhpc3RpbmcgdHJhaWxlcnMuCisrCitJZiBpdCBpcyBgYWZ0ZXJgLCB0aGVuIGVhY2ggbmV3IHRyYWlsZXIgd2lsbCBhcHBlYXIganVzdCBhZnRlciB0aGUKK2xhc3QgdHJhaWxlciB3aXRoIHRoZSBzYW1lIDx0b2tlbj4uCisrCitJZiBpdCBpcyBgYmVmb3JlYCwgdGhlbiBlYWNoIG5ldyB0cmFpbGVyIHdpbGwgYXBwZWFyIGp1c3QgYmVmb3JlIHRoZQorZmlyc3QgdHJhaWxlciB3aXRoIHRoZSBzYW1lIDx0b2tlbj4uCisKK3RyYWlsZXIuaWZleGlzdHM6OgorCVRoaXMgb3B0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNob29zZSB3aGF0IGFjdGlvbiB3aWxsIGJlCisJcGVyZm9ybWVkIHdoZW4gdGhlcmUgaXMgYWxyZWFkeSBhdCBsZWFzdCBvbmUgdHJhaWxlciB3aXRoIHRoZQorCXNhbWUgPHRva2VuPiBpbiB0aGUgbWVzc2FnZS4KKysKK1RoZSB2YWxpZCB2YWx1ZXMgZm9yIHRoaXMgb3B0aW9uIGFyZTogYGFkZElmRGlmZmVyZW50TmVpZ2hib3JgICh0aGlzCitpcyB0aGUgZGVmYXVsdCksIGBhZGRJZkRpZmZlcmVudGAsIGBhZGRgLCBgb3ZlcndyaXRlYCBvciBgZG9Ob3RoaW5nYC4KKysKK1dpdGggYGFkZElmRGlmZmVyZW50TmVpZ2hib3JgLCBhIG5ldyB0cmFpbGVyIHdpbGwgYmUgYWRkZWQgb25seSBpZiBubwordHJhaWxlciB3aXRoIHRoZSBzYW1lICg8dG9rZW4+LCA8dmFsdWU+KSBwYWlyIGlzIGFib3ZlIG9yIGJlbG93IHRoZSBsaW5lCit3aGVyZSB0aGUgbmV3IHRyYWlsZXIgd2lsbCBiZSBhZGRlZC4KKysKK1dpdGggYGFkZElmRGlmZmVyZW50YCwgYSBuZXcgdHJhaWxlciB3aWxsIGJlIGFkZGVkIG9ubHkgaWYgbm8gdHJhaWxlcgord2l0aCB0aGUgc2FtZSAoPHRva2VuPiwgPHZhbHVlPikgcGFpciBpcyBhbHJlYWR5IGluIHRoZSBtZXNzYWdlLgorKworV2l0aCBgYWRkYCwgYSBuZXcgdHJhaWxlciB3aWxsIGJlIGFkZGVkLCBldmVuIGlmIHNvbWUgdHJhaWxlcnMgd2l0aAordGhlIHNhbWUgKDx0b2tlbj4sIDx2YWx1ZT4pIHBhaXIgYXJlIGFscmVhZHkgaW4gdGhlIG1lc3NhZ2UuCisrCitXaXRoIGByZXBsYWNlYCwgYW4gZXhpc3RpbmcgdHJhaWxlciB3aXRoIHRoZSBzYW1lIDx0b2tlbj4gd2lsbCBiZQorZGVsZXRlZCBhbmQgdGhlIG5ldyB0cmFpbGVyIHdpbGwgYmUgYWRkZWQuIFRoZSBkZWxldGVkIHRyYWlsZXIgd2lsbCBiZQordGhlIGNsb3Nlc3Qgb25lICh3aXRoIHRoZSBzYW1lIDx0b2tlbj4pIHRvIHRoZSBwbGFjZSB3aGVyZSB0aGUgbmV3IG9uZQord2lsbCBiZSBhZGRlZC4KKysKK1dpdGggYGRvTm90aGluZ2AsIG5vdGhpbmcgd2lsbCBiZSBkb25lOyB0aGF0IGlzIG5vIG5ldyB0cmFpbGVyIHdpbGwgYmUKK2FkZGVkIGlmIHRoZXJlIGlzIGFscmVhZHkgb25lIHdpdGggdGhlIHNhbWUgPHRva2VuPiBpbiB0aGUgbWVzc2FnZS4KKwordHJhaWxlci5pZm1pc3Npbmc6OgorCVRoaXMgb3B0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNob29zZSB3aGF0IGFjdGlvbiB3aWxsIGJlCisJcGVyZm9ybWVkIHdoZW4gdGhlcmUgaXMgbm90IHlldCBhbnkgdHJhaWxlciB3aXRoIHRoZSBzYW1lCisJPHRva2VuPiBpbiB0aGUgbWVzc2FnZS4KKysKK1RoZSB2YWxpZCB2YWx1ZXMgZm9yIHRoaXMgb3B0aW9uIGFyZTogYGFkZGAgKHRoaXMgaXMgdGhlIGRlZmF1bHQpIGFuZAorYGRvTm90aGluZ2AuCisrCitXaXRoIGBhZGRgLCBhIG5ldyB0cmFpbGVyIHdpbGwgYmUgYWRkZWQuCisrCitXaXRoIGBkb05vdGhpbmdgLCBub3RoaW5nIHdpbGwgYmUgZG9uZS4KKwordHJhaWxlci48dG9rZW4+LmtleTo6CisJVGhpcyBga2V5YCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiA8dG9rZW4+IGluIHRoZSB0cmFpbGVyLiBBdAorCXRoZSBlbmQgb2YgdGhpcyBrZXksIGEgc2VwYXJhdG9yIGNhbiBhcHBlYXIgYW5kIHRoZW4gc29tZQorCXNwYWNlIGNoYXJhY3RlcnMuIEJ5IGRlZmF1bHQgdGhlIG9ubHkgdmFsaWQgc2VwYXJhdG9yIGlzICc6JywKKwlidXQgdGhpcyBjYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgYHRyYWlsZXIuc2VwYXJhdG9yc2AgY29uZmlnCisJdmFyaWFibGUuCisrCitJZiB0aGVyZSBpcyBhIHNlcGFyYXRvciwgdGhlbiB0aGUga2V5IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIGJvdGggdGhlCis8dG9rZW4+IGFuZCB0aGUgZGVmYXVsdCBzZXBhcmF0b3Igd2hlbiBhZGRpbmcgdGhlIHRyYWlsZXIuCisKK3RyYWlsZXIuPHRva2VuPi53aGVyZTo6CisJVGhpcyBvcHRpb24gdGFrZXMgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZSAndHJhaWxlci53aGVyZScKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlIGFuZCBpdCBvdmVycmlkZXMgd2hhdCBpcyBzcGVjaWZpZWQgYnkKKwl0aGF0IG9wdGlvbiBmb3IgdHJhaWxlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIDx0b2tlbj4uCisKK3RyYWlsZXIuPHRva2VuPi5pZmV4aXN0OjoKKwlUaGlzIG9wdGlvbiB0YWtlcyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlICd0cmFpbGVyLmlmZXhpc3QnCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhbmQgaXQgb3ZlcnJpZGVzIHdoYXQgaXMgc3BlY2lmaWVkIGJ5CisJdGhhdCBvcHRpb24gZm9yIHRyYWlsZXJzIHdpdGggdGhlIHNwZWNpZmllZCA8dG9rZW4+LgorCit0cmFpbGVyLjx0b2tlbj4uaWZtaXNzaW5nOjoKKwlUaGlzIG9wdGlvbiB0YWtlcyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlICd0cmFpbGVyLmlmbWlzc2luZycKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlIGFuZCBpdCBvdmVycmlkZXMgd2hhdCBpcyBzcGVjaWZpZWQgYnkKKwl0aGF0IG9wdGlvbiBmb3IgdHJhaWxlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIDx0b2tlbj4uCisKK3RyYWlsZXIuPHRva2VuPi5jb21tYW5kOjoKKwlUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgc2hlbGwgY29tbWFuZCB0aGF0IHdpbGwKKwliZSBjYWxsZWQgdG8gYXV0b21hdGljYWxseSBhZGQgb3IgbW9kaWZ5IGEgdHJhaWxlciB3aXRoIHRoZQorCXNwZWNpZmllZCA8dG9rZW4+LgorKworV2hlbiB0aGlzIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBiZWhhdmlvciBpcyBhcyBpZiBhIHNwZWNpYWwKKyc8dG9rZW4+PTx2YWx1ZT4nIGFyZ3VtZW50IHdlcmUgYWRkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tbWFuZAorbGluZSwgd2hlcmUgPHZhbHVlPiBpcyB0YWtlbiB0byBiZSB0aGUgc3RhbmRhcmQgb3V0cHV0IG9mIHRoZQorc3BlY2lmaWVkIGNvbW1hbmQgd2l0aCBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSB0cmltbWVkCitvZmYuCisrCitJZiB0aGUgY29tbWFuZCBjb250YWlucyB0aGUgYCRBUkdgIHN0cmluZywgdGhpcyBzdHJpbmcgd2lsbCBiZQorcmVwbGFjZWQgd2l0aCB0aGUgPHZhbHVlPiBwYXJ0IG9mIGFuIGV4aXN0aW5nIHRyYWlsZXIgd2l0aCB0aGUgc2FtZQorPHRva2VuPiwgaWYgYW55LCBiZWZvcmUgdGhlIGNvbW1hbmQgaXMgbGF1bmNoZWQuCisrCitJZiBzb21lICc8dG9rZW4+PTx2YWx1ZT4nIGFyZ3VtZW50cyBhcmUgYWxzbyBwYXNzZWQgb24gdGhlIGNvbW1hbmQKK2xpbmUsIHdoZW4gYSAndHJhaWxlci48dG9rZW4+LmNvbW1hbmQnIGlzIGNvbmZpZ3VyZWQsIHRoZSBjb21tYW5kIHdpbGwKK2Fsc28gYmUgZXhlY3V0ZWQgZm9yIGVhY2ggb2YgdGhlc2UgYXJndW1lbnRzLiBBbmQgdGhlIDx2YWx1ZT4gcGFydCBvZgordGhlc2UgYXJndW1lbnRzLCBpZiBhbnksIHdpbGwgYmUgdXNlZCB0byByZXBsYWNlIHRoZSBgJEFSR2Agc3RyaW5nIGluCit0aGUgY29tbWFuZC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKyogQ29uZmlndXJlIGEgJ3NpZ24nIHRyYWlsZXIgd2l0aCBhICdTaWduZWQtb2ZmLWJ5JyBrZXksIGFuZCB0aGVuCisgIGFkZCB0d28gb2YgdGhlc2UgdHJhaWxlcnMgdG8gYSBtZXNzYWdlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgdHJhaWxlci5zaWduLmtleSAiU2lnbmVkLW9mZi1ieSIKKyQgY2F0IG1zZy50eHQKK3N1YmplY3QKKworbWVzc2FnZQorJCBjYXQgbXNnLnR4dCB8IGdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICdzaWduOiBBbGljZSA8YWxpY2VAZXhhbXBsZS5jb20+JyAtLXRyYWlsZXIgJ3NpZ246IEJvYiA8Ym9iQGV4YW1wbGUuY29tPicKK3N1YmplY3QKKworbWVzc2FnZQorCitTaWduZWQtb2ZmLWJ5OiBBbGljZSA8YWxpY2VAZXhhbXBsZS5jb20+CitTaWduZWQtb2ZmLWJ5OiBCb2IgPGJvYkBleGFtcGxlLmNvbT4KKy0tLS0tLS0tLS0tLQorCisqIEV4dHJhY3QgdGhlIGxhc3QgY29tbWl0IGFzIGEgcGF0Y2gsIGFuZCBhZGQgYSAnQ2MnIGFuZCBhCisgICdSZXZpZXdlZC1ieScgdHJhaWxlciB0byBpdDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIC0xCiswMDAxLWZvby5wYXRjaAorJCBnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAnQ2M6IEFsaWNlIDxhbGljZUBleGFtcGxlLmNvbT4nIC0tdHJhaWxlciAnUmV2aWV3ZWQtYnk6IEJvYiA8Ym9iQGV4YW1wbGUuY29tPicgMDAwMS1mb28ucGF0Y2ggPjAwMDEtYmFyLnBhdGNoCistLS0tLS0tLS0tLS0KKworKiBDb25maWd1cmUgYSAnc2lnbicgdHJhaWxlciB3aXRoIGEgY29tbWFuZCB0byBhdXRvbWF0aWNhbGx5IGFkZCBhCisgICdTaWduZWQtb2ZmLWJ5OiAnIHdpdGggdGhlIGF1dGhvciBpbmZvcm1hdGlvbiBvbmx5IGlmIHRoZXJlIGlzIG5vCisgICdTaWduZWQtb2ZmLWJ5OiAnIGFscmVhZHksIGFuZCBzaG93IGhvdyBpdCB3b3JrczoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5rZXkgIlNpZ25lZC1vZmYtYnk6ICIKKyQgZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uaWZtaXNzaW5nIGFkZAorJCBnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5pZmV4aXN0cyBkb05vdGhpbmcKKyQgZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uY29tbWFuZCAnZWNobyAiJChnaXQgY29uZmlnIHVzZXIubmFtZSkgPCQoZ2l0IGNvbmZpZyB1c2VyLmVtYWlsKT4iJworJCBnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIDw8RU9GCis+IEVPRgorCitTaWduZWQtb2ZmLWJ5OiBCb2IgPGJvYkBleGFtcGxlLmNvbT4KKyQgZ2l0IGludGVycHJldC10cmFpbGVycyA8PEVPRgorPiBTaWduZWQtb2ZmLWJ5OiBBbGljZSA8YWxpY2VAZXhhbXBsZS5jb20+Cis+IEVPRgorCitTaWduZWQtb2ZmLWJ5OiBBbGljZSA8YWxpY2VAZXhhbXBsZS5jb20+CistLS0tLS0tLS0tLS0KKworKiBDb25maWd1cmUgYSAnZml4JyB0cmFpbGVyIHdpdGggYSBrZXkgdGhhdCBjb250YWlucyBhICcjJyBhbmQgbm8KKyAgc3BhY2UgYWZ0ZXIgdGhpcyBjaGFyYWN0ZXIsIGFuZCBzaG93IGhvdyBpdCB3b3JrczoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIHRyYWlsZXIuc2VwYXJhdG9ycyAiOiMiCiskIGdpdCBjb25maWcgdHJhaWxlci5maXgua2V5ICJGaXggIyIKKyQgZWNobyAic3ViamVjdCIgfCBnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciBmaXg9NDIKK3N1YmplY3QKKworRml4ICM0MgorLS0tLS0tLS0tLS0tCisKKyogQ29uZmlndXJlIGEgJ3NlZScgdHJhaWxlciB3aXRoIGEgY29tbWFuZCB0byBzaG93IHRoZSBzdWJqZWN0IG9mIGEKKyAgY29tbWl0IHRoYXQgaXMgcmVsYXRlZCwgYW5kIHNob3cgaG93IGl0IHdvcmtzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgdHJhaWxlci5zZWUua2V5ICJTZWUtYWxzbzogIgorJCBnaXQgY29uZmlnIHRyYWlsZXIuc2VlLmlmRXhpc3RzICJyZXBsYWNlIgorJCBnaXQgY29uZmlnIHRyYWlsZXIuc2VlLmlmTWlzc2luZyAiZG9Ob3RoaW5nIgorJCBnaXQgY29uZmlnIHRyYWlsZXIuc2VlLmNvbW1hbmQgImdpdCBsb2cgLTEgLS1vbmVsaW5lIC0tZm9ybWF0PVwiJWggKCVzKVwiIC0tYWJicmV2LWNvbW1pdCAtLWFiYnJldj0xNCBcJEFSRyIKKyQgZ2l0IGludGVycHJldC10cmFpbGVycyA8PEVPRgorPiBzdWJqZWN0Cis+IAorPiBtZXNzYWdlCis+IAorPiBzZWU6IEhFQUR+MgorPiBFT0YKK3N1YmplY3QKKworbWVzc2FnZQorCitTZWUtYWxzbzogZmUzMTg3NDg5ZDY5YzQgKHN1YmplY3Qgb2YgcmVsYXRlZCBjb21taXQpCistLS0tLS0tLS0tLS0KKworKiBDb25maWd1cmUgYSBjb21taXQgdGVtcGxhdGUgd2l0aCBzb21lIHRyYWlsZXJzIHdpdGggZW1wdHkgdmFsdWVzCisgICh1c2luZyBzZWQgdG8gc2hvdyBhbmQga2VlcCB0aGUgdHJhaWxpbmcgc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlCisgIHRyYWlsZXJzKSwgdGhlbiBjb25maWd1cmUgYSBjb21taXQtbXNnIGhvb2sgdGhhdCB1c2VzCisgICdnaXQgaW50ZXJwcmV0LXRyYWlsZXJzJyB0byByZW1vdmUgdHJhaWxlcnMgd2l0aCBlbXB0eSB2YWx1ZXMgYW5kCisgIHRvIGFkZCBhICdnaXQtdmVyc2lvbicgdHJhaWxlcjoKKysKKy0tLS0tLS0tLS0tLQorJCBzZWQgLWUgJ3MvIFokLyAvJyA+Y29tbWl0X3RlbXBsYXRlLnR4dCA8PEVPRgorPiAqKipzdWJqZWN0KioqCis+IAorPiAqKiptZXNzYWdlKioqCis+IAorPiBGaXhlczogWgorPiBDYzogWgorPiBSZXZpZXdlZC1ieTogWgorPiBTaWduZWQtb2ZmLWJ5OiBaCis+IEVPRgorJCBnaXQgY29uZmlnIGNvbW1pdC50ZW1wbGF0ZSBjb21taXRfdGVtcGxhdGUudHh0CiskIGNhdCA+LmdpdC9ob29rcy9jb21taXQtbXNnIDw8RU9GCis+ICMhL2Jpbi9zaAorPiBnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgImdpdC12ZXJzaW9uOiBcJChnaXQgZGVzY3JpYmUpIiAiXCQxIiA+ICJcJDEubmV3IgorPiBtdiAiXCQxLm5ldyIgIlwkMSIKKz4gRU9GCiskIGNobW9kICt4IC5naXQvaG9va3MvY29tbWl0LW1zZworLS0tLS0tLS0tLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY29tbWl0WzFdLCBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0sIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxvZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZjk1ODAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1sb2cudHh0CkBAIC0wLDAgKzEsMjE4IEBACitnaXQtbG9nKDEpCis9PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1sb2cgLSBTaG93IGNvbW1pdCBsb2dzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IGxvZycgWzxvcHRpb25zPl0gWzxyZXZpc2lvbiByYW5nZT5dIFtbXC0tXSA8cGF0aD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU2hvd3MgdGhlIGNvbW1pdCBsb2dzLgorCitUaGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8gdGhlIGBnaXQgcmV2LWxpc3RgCitjb21tYW5kIHRvIGNvbnRyb2wgd2hhdCBpcyBzaG93biBhbmQgaG93LCBhbmQgb3B0aW9ucyBhcHBsaWNhYmxlIHRvCit0aGUgYGdpdCBkaWZmLSpgIGNvbW1hbmRzIHRvIGNvbnRyb2wgaG93IHRoZSBjaGFuZ2VzCitlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzIGFyZSBzaG93bi4KKworCitPUFRJT05TCistLS0tLS0tCisKKy0tZm9sbG93OjoKKwlDb250aW51ZSBsaXN0aW5nIHRoZSBoaXN0b3J5IG9mIGEgZmlsZSBiZXlvbmQgcmVuYW1lcworCSh3b3JrcyBvbmx5IGZvciBhIHNpbmdsZSBmaWxlKS4KKworLS1uby1kZWNvcmF0ZTo6CistLWRlY29yYXRlWz1zaG9ydHxmdWxsfG5vXTo6CisJUHJpbnQgb3V0IHRoZSByZWYgbmFtZXMgb2YgYW55IGNvbW1pdHMgdGhhdCBhcmUgc2hvd24uIElmICdzaG9ydCcgaXMKKwlzcGVjaWZpZWQsIHRoZSByZWYgbmFtZSBwcmVmaXhlcyAncmVmcy9oZWFkcy8nLCAncmVmcy90YWdzLycgYW5kCisJJ3JlZnMvcmVtb3Rlcy8nIHdpbGwgbm90IGJlIHByaW50ZWQuIElmICdmdWxsJyBpcyBzcGVjaWZpZWQsIHRoZQorCWZ1bGwgcmVmIG5hbWUgKGluY2x1ZGluZyBwcmVmaXgpIHdpbGwgYmUgcHJpbnRlZC4gVGhlIGRlZmF1bHQgb3B0aW9uCisJaXMgJ3Nob3J0Jy4KKworLS1zb3VyY2U6OgorCVByaW50IG91dCB0aGUgcmVmIG5hbWUgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSBieSB3aGljaCBlYWNoCisJY29tbWl0IHdhcyByZWFjaGVkLgorCistLXVzZS1tYWlsbWFwOjoKKwlVc2UgbWFpbG1hcCBmaWxlIHRvIG1hcCBhdXRob3IgYW5kIGNvbW1pdHRlciBuYW1lcyBhbmQgZW1haWwKKwlhZGRyZXNzZXMgdG8gY2Fub25pY2FsIHJlYWwgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3Nlcy4gU2VlCisJbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0uCisKKy0tZnVsbC1kaWZmOjoKKwlXaXRob3V0IHRoaXMgZmxhZywgYGdpdCBsb2cgLXAgPHBhdGg+Li4uYCBzaG93cyBjb21taXRzIHRoYXQKKwl0b3VjaCB0aGUgc3BlY2lmaWVkIHBhdGhzLCBhbmQgZGlmZnMgYWJvdXQgdGhlIHNhbWUgc3BlY2lmaWVkCisJcGF0aHMuICBXaXRoIHRoaXMsIHRoZSBmdWxsIGRpZmYgaXMgc2hvd24gZm9yIGNvbW1pdHMgdGhhdCB0b3VjaAorCXRoZSBzcGVjaWZpZWQgcGF0aHM7IHRoaXMgbWVhbnMgdGhhdCAiPHBhdGg+Li4uIiBsaW1pdHMgb25seQorCWNvbW1pdHMsIGFuZCBkb2Vzbid0IGxpbWl0IGRpZmYgZm9yIHRob3NlIGNvbW1pdHMuCisrCitOb3RlIHRoYXQgdGhpcyBhZmZlY3RzIGFsbCBkaWZmLWJhc2VkIG91dHB1dCB0eXBlcywgZS5nLiB0aG9zZQorcHJvZHVjZWQgYnkgYC0tc3RhdGAsIGV0Yy4KKworLS1sb2ctc2l6ZTo6CisJSW5jbHVkZSBhIGxpbmUgYGBsb2cgc2l6ZSA8bnVtYmVyPicnIGluIHRoZSBvdXRwdXQgZm9yIGVhY2ggY29tbWl0LAorCXdoZXJlIDxudW1iZXI+IGlzIHRoZSBsZW5ndGggb2YgdGhhdCBjb21taXQncyBtZXNzYWdlIGluIGJ5dGVzLgorCUludGVuZGVkIHRvIHNwZWVkIHVwIHRvb2xzIHRoYXQgcmVhZCBsb2cgbWVzc2FnZXMgZnJvbSBgZ2l0IGxvZ2AKKwlvdXRwdXQgYnkgYWxsb3dpbmcgdGhlbSB0byBhbGxvY2F0ZSBzcGFjZSBpbiBhZHZhbmNlLgorCistTCA8c3RhcnQ+LDxlbmQ+OjxmaWxlPjo6CistTCA6PGZ1bmNuYW1lPjo8ZmlsZT46OgorCVRyYWNlIHRoZSBldm9sdXRpb24gb2YgdGhlIGxpbmUgcmFuZ2UgZ2l2ZW4gYnkgIjxzdGFydD4sPGVuZD4iCisJKG9yIHRoZSBmdW5jdGlvbiBuYW1lIHJlZ2V4IDxmdW5jbmFtZT4pIHdpdGhpbiB0aGUgPGZpbGU+LiAgWW91IG1heQorCW5vdCBnaXZlIGFueSBwYXRoc3BlYyBsaW1pdGVycy4gIFRoaXMgaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8KKwlhIHdhbGsgc3RhcnRpbmcgZnJvbSBhIHNpbmdsZSByZXZpc2lvbiwgaS5lLiwgeW91IG1heSBvbmx5CisJZ2l2ZSB6ZXJvIG9yIG9uZSBwb3NpdGl2ZSByZXZpc2lvbiBhcmd1bWVudHMuCisJWW91IGNhbiBzcGVjaWZ5IHRoaXMgb3B0aW9uIG1vcmUgdGhhbiBvbmNlLgorKworaW5jbHVkZTo6bGluZS1yYW5nZS1mb3JtYXQudHh0W10KKworPHJldmlzaW9uIHJhbmdlPjo6CisJU2hvdyBvbmx5IGNvbW1pdHMgaW4gdGhlIHNwZWNpZmllZCByZXZpc2lvbiByYW5nZS4gIFdoZW4gbm8KKwk8cmV2aXNpb24gcmFuZ2U+IGlzIHNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gYEhFQURgIChpLmUuIHRoZQorCXdob2xlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCBjb21taXQpLiAgYG9yaWdpbi4uSEVBRGAKKwlzcGVjaWZpZXMgYWxsIHRoZSBjb21taXRzIHJlYWNoYWJsZSBmcm9tIHRoZSBjdXJyZW50IGNvbW1pdAorCShpLmUuIGBIRUFEYCksIGJ1dCBub3QgZnJvbSBgb3JpZ2luYC4gRm9yIGEgY29tcGxldGUgbGlzdCBvZgorCXdheXMgdG8gc3BlbGwgPHJldmlzaW9uIHJhbmdlPiwgc2VlIHRoZSAnU3BlY2lmeWluZyBSYW5nZXMnCisJc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KKworW1wtLV0gPHBhdGg+Li4uOjoKKwlTaG93IG9ubHkgY29tbWl0cyB0aGF0IGFyZSBlbm91Z2ggdG8gZXhwbGFpbiBob3cgdGhlIGZpbGVzCisJdGhhdCBtYXRjaCB0aGUgc3BlY2lmaWVkIHBhdGhzIGNhbWUgdG8gYmUuICBTZWUgJ0hpc3RvcnkKKwlTaW1wbGlmaWNhdGlvbicgYmVsb3cgZm9yIGRldGFpbHMgYW5kIG90aGVyIHNpbXBsaWZpY2F0aW9uCisJbW9kZXMuCisrCitQYXRocyBtYXkgbmVlZCB0byBiZSBwcmVmaXhlZCB3aXRoIGBgXC0tICcnIHRvIHNlcGFyYXRlIHRoZW0gZnJvbQorb3B0aW9ucyBvciB0aGUgcmV2aXNpb24gcmFuZ2UsIHdoZW4gY29uZnVzaW9uIGFyaXNlcy4KKworaW5jbHVkZTo6cmV2LWxpc3Qtb3B0aW9ucy50eHRbXQorCitpbmNsdWRlOjpwcmV0dHktZm9ybWF0cy50eHRbXQorCitDT01NT04gRElGRiBPUFRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKzpnaXQtbG9nOiAxCitpbmNsdWRlOjpkaWZmLW9wdGlvbnMudHh0W10KKworaW5jbHVkZTo6ZGlmZi1nZW5lcmF0ZS1wYXRjaC50eHRbXQorCitFWEFNUExFUworLS0tLS0tLS0KK2BnaXQgbG9nIC0tbm8tbWVyZ2VzYDo6CisKKwlTaG93IHRoZSB3aG9sZSBjb21taXQgaGlzdG9yeSwgYnV0IHNraXAgYW55IG1lcmdlcworCitgZ2l0IGxvZyB2Mi42LjEyLi4gaW5jbHVkZS9zY3NpIGRyaXZlcnMvc2NzaWA6OgorCisJU2hvdyBhbGwgY29tbWl0cyBzaW5jZSB2ZXJzaW9uICd2Mi42LjEyJyB0aGF0IGNoYW5nZWQgYW55IGZpbGUKKwlpbiB0aGUgYGluY2x1ZGUvc2NzaWAgb3IgYGRyaXZlcnMvc2NzaWAgc3ViZGlyZWN0b3JpZXMKKworYGdpdCBsb2cgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iIC0tIGdpdGtgOjoKKworCVNob3cgdGhlIGNoYW5nZXMgZHVyaW5nIHRoZSBsYXN0IHR3byB3ZWVrcyB0byB0aGUgZmlsZSAnZ2l0aycuCisJVGhlIGBgLS0nJyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlICpicmFuY2gqIG5hbWVkCisJJ2dpdGsnCisKK2BnaXQgbG9nIC0tbmFtZS1zdGF0dXMgcmVsZWFzZS4udGVzdGA6OgorCisJU2hvdyB0aGUgY29tbWl0cyB0aGF0IGFyZSBpbiB0aGUgInRlc3QiIGJyYW5jaCBidXQgbm90IHlldAorCWluIHRoZSAicmVsZWFzZSIgYnJhbmNoLCBhbG9uZyB3aXRoIHRoZSBsaXN0IG9mIHBhdGhzCisJZWFjaCBjb21taXQgbW9kaWZpZXMuCisKK2BnaXQgbG9nIC0tZm9sbG93IGJ1aWx0aW4vcmV2LWxpc3QuY2A6OgorCisJU2hvd3MgdGhlIGNvbW1pdHMgdGhhdCBjaGFuZ2VkIGBidWlsdGluL3Jldi1saXN0LmNgLCBpbmNsdWRpbmcKKwl0aG9zZSBjb21taXRzIHRoYXQgb2NjdXJyZWQgYmVmb3JlIHRoZSBmaWxlIHdhcyBnaXZlbiBpdHMKKwlwcmVzZW50IG5hbWUuCisKK2BnaXQgbG9nIC0tYnJhbmNoZXMgLS1ub3QgLS1yZW1vdGVzPW9yaWdpbmA6OgorCisJU2hvd3MgYWxsIGNvbW1pdHMgdGhhdCBhcmUgaW4gYW55IG9mIGxvY2FsIGJyYW5jaGVzIGJ1dCBub3QgaW4KKwlhbnkgb2YgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGZvciAnb3JpZ2luJyAod2hhdCB5b3UgaGF2ZSB0aGF0CisJb3JpZ2luIGRvZXNuJ3QpLgorCitgZ2l0IGxvZyBtYXN0ZXIgLS1ub3QgLS1yZW1vdGVzPSovbWFzdGVyYDo6CisKKwlTaG93cyBhbGwgY29tbWl0cyB0aGF0IGFyZSBpbiBsb2NhbCBtYXN0ZXIgYnV0IG5vdCBpbiBhbnkgcmVtb3RlCisJcmVwb3NpdG9yeSBtYXN0ZXIgYnJhbmNoZXMuCisKK2BnaXQgbG9nIC1wIC1tIC0tZmlyc3QtcGFyZW50YDo6CisKKwlTaG93cyB0aGUgaGlzdG9yeSBpbmNsdWRpbmcgY2hhbmdlIGRpZmZzLCBidXQgb25seSBmcm9tIHRoZQorCWBgbWFpbiBicmFuY2gnJyBwZXJzcGVjdGl2ZSwgc2tpcHBpbmcgY29tbWl0cyB0aGF0IGNvbWUgZnJvbSBtZXJnZWQKKwlicmFuY2hlcywgYW5kIHNob3dpbmcgZnVsbCBkaWZmcyBvZiBjaGFuZ2VzIGludHJvZHVjZWQgYnkgdGhlIG1lcmdlcy4KKwlUaGlzIG1ha2VzIHNlbnNlIG9ubHkgd2hlbiBmb2xsb3dpbmcgYSBzdHJpY3QgcG9saWN5IG9mIG1lcmdpbmcgYWxsCisJdG9waWMgYnJhbmNoZXMgd2hlbiBzdGF5aW5nIG9uIGEgc2luZ2xlIGludGVncmF0aW9uIGJyYW5jaC4KKworYGdpdCBsb2cgLUwgJy9pbnQgbWFpbi8nLC9efS86bWFpbi5jYDo6CisKKwlTaG93cyBob3cgdGhlIGZ1bmN0aW9uIGBtYWluKClgIGluIHRoZSBmaWxlIGBtYWluLmNgIGV2b2x2ZWQKKwlvdmVyIHRpbWUuCisKK2BnaXQgbG9nIC0zYDo6CisKKwlMaW1pdHMgdGhlIG51bWJlciBvZiBjb21taXRzIHRvIHNob3cgdG8gMy4KKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitpbmNsdWRlOjppMThuLnR4dFtdCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgY29yZSB2YXJpYWJsZXMgYW5kIGxpbmtnaXQ6Z2l0LWRpZmZbMV0KK2ZvciBzZXR0aW5ncyByZWxhdGVkIHRvIGRpZmYgZ2VuZXJhdGlvbi4KKworZm9ybWF0LnByZXR0eTo6CisJRGVmYXVsdCBmb3IgdGhlIGAtLWZvcm1hdGAgb3B0aW9uLiAgKFNlZSAnUHJldHR5IEZvcm1hdHMnIGFib3ZlLikKKwlEZWZhdWx0cyB0byBgbWVkaXVtYC4KKworaTE4bi5sb2dPdXRwdXRFbmNvZGluZzo6CisJRW5jb2RpbmcgdG8gdXNlIHdoZW4gZGlzcGxheWluZyBsb2dzLiAgKFNlZSAnRGlzY3Vzc2lvbicgYWJvdmUuKQorCURlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgaTE4bi5jb21taXRFbmNvZGluZ2AgaWYgc2V0LCBhbmQgVVRGLTgKKwlvdGhlcndpc2UuCisKK2xvZy5kYXRlOjoKKwlEZWZhdWx0IGZvcm1hdCBmb3IgaHVtYW4tcmVhZGFibGUgZGF0ZXMuICAoQ29tcGFyZSB0aGUKKwlgLS1kYXRlYCBvcHRpb24uKSAgRGVmYXVsdHMgdG8gImRlZmF1bHQiLCB3aGljaCBtZWFucyB0byB3cml0ZQorCWRhdGVzIGxpa2UgYFNhdCBNYXkgOCAxOTozNTozNCAyMDEwIC0wNTAwYC4KKworbG9nLmZvbGxvdzo6CisJSWYgYHRydWVgLCBgZ2l0IGxvZ2Agd2lsbCBhY3QgYXMgaWYgdGhlIGAtLWZvbGxvd2Agb3B0aW9uIHdhcyB1c2VkIHdoZW4KKwlhIHNpbmdsZSA8cGF0aD4gaXMgZ2l2ZW4uICBUaGlzIGhhcyB0aGUgc2FtZSBsaW1pdGF0aW9ucyBhcyBgLS1mb2xsb3dgLAorCWkuZS4gaXQgY2Fubm90IGJlIHVzZWQgdG8gZm9sbG93IG11bHRpcGxlIGZpbGVzIGFuZCBkb2VzIG5vdCB3b3JrIHdlbGwKKwlvbiBub24tbGluZWFyIGhpc3RvcnkuCisKK2xvZy5zaG93Um9vdDo6CisJSWYgYGZhbHNlYCwgYGdpdCBsb2dgIGFuZCByZWxhdGVkIGNvbW1hbmRzIHdpbGwgbm90IHRyZWF0IHRoZQorCWluaXRpYWwgY29tbWl0IGFzIGEgYmlnIGNyZWF0aW9uIGV2ZW50LiAgQW55IHJvb3QgY29tbWl0cyBpbgorCWBnaXQgbG9nIC1wYCBvdXRwdXQgd291bGQgYmUgc2hvd24gd2l0aG91dCBhIGRpZmYgYXR0YWNoZWQuCisJVGhlIGRlZmF1bHQgaXMgYHRydWVgLgorCittYWlsbWFwLio6OgorCVNlZSBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXS4KKworbm90ZXMuZGlzcGxheVJlZjo6CisJV2hpY2ggcmVmcywgaW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgc2V0IGJ5IGBjb3JlLm5vdGVzUmVmYAorCW9yICdHSVRfTk9URVNfUkVGJywgdG8gcmVhZCBub3RlcyBmcm9tIHdoZW4gc2hvd2luZyBjb21taXQKKwltZXNzYWdlcyB3aXRoIHRoZSBgbG9nYCBmYW1pbHkgb2YgY29tbWFuZHMuICBTZWUKKwlsaW5rZ2l0OmdpdC1ub3Rlc1sxXS4KKysKK01heSBiZSBhbiB1bmFiYnJldmlhdGVkIHJlZiBuYW1lIG9yIGEgZ2xvYiBhbmQgbWF5IGJlIHNwZWNpZmllZAorbXVsdGlwbGUgdGltZXMuICBBIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgZm9yIHJlZnMgdGhhdCBkbyBub3QgZXhpc3QsCitidXQgYSBnbG9iIHRoYXQgZG9lcyBub3QgbWF0Y2ggYW55IHJlZnMgaXMgc2lsZW50bHkgaWdub3JlZC4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgZGlzYWJsZWQgYnkgdGhlIGAtLW5vLW5vdGVzYCBvcHRpb24sCitvdmVycmlkZGVuIGJ5IHRoZSAnR0lUX05PVEVTX0RJU1BMQVlfUkVGJyBlbnZpcm9ubWVudCB2YXJpYWJsZSwKK2FuZCBvdmVycmlkZGVuIGJ5IHRoZSBgLS1ub3Rlcz08cmVmPmAgb3B0aW9uLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLWZpbGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjZmMDFmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtZmlsZXMudHh0CkBAIC0wLDAgKzEsMjE0IEBACitnaXQtbHMtZmlsZXMoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbHMtZmlsZXMgLSBTaG93IGluZm9ybWF0aW9uIGFib3V0IGZpbGVzIGluIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBscy1maWxlcycgWy16XSBbLXRdIFstdl0KKwkJKC0tW2NhY2hlZHxkZWxldGVkfG90aGVyc3xpZ25vcmVkfHN0YWdlfHVubWVyZ2VkfGtpbGxlZHxtb2RpZmllZF0pKgorCQkoLVtjfGR8b3xpfHN8dXxrfG1dKSoKKwkJWy14IDxwYXR0ZXJuPnwtLWV4Y2x1ZGU9PHBhdHRlcm4+XQorCQlbLVggPGZpbGU+fC0tZXhjbHVkZS1mcm9tPTxmaWxlPl0KKwkJWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxmaWxlPl0KKwkJWy0tZXhjbHVkZS1zdGFuZGFyZF0KKwkJWy0tZXJyb3ItdW5tYXRjaF0gWy0td2l0aC10cmVlPTx0cmVlLWlzaD5dCisJCVstLWZ1bGwtbmFtZV0gWy0tYWJicmV2XSBbLS1dIFs8ZmlsZT4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBtZXJnZXMgdGhlIGZpbGUgbGlzdGluZyBpbiB0aGUgZGlyZWN0b3J5IGNhY2hlIGluZGV4IHdpdGggdGhlCithY3R1YWwgd29ya2luZyBkaXJlY3RvcnkgbGlzdCwgYW5kIHNob3dzIGRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgdGhlCit0d28uCisKK09uZSBvciBtb3JlIG9mIHRoZSBvcHRpb25zIGJlbG93IG1heSBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgZmlsZXMKK3Nob3duOgorCitPUFRJT05TCistLS0tLS0tCistYzo6CistLWNhY2hlZDo6CisJU2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkKKworLWQ6OgorLS1kZWxldGVkOjoKKwlTaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dAorCistbTo6CistLW1vZGlmaWVkOjoKKwlTaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQKKworLW86OgorLS1vdGhlcnM6OgorCVNob3cgb3RoZXIgKGkuZS4gdW50cmFja2VkKSBmaWxlcyBpbiB0aGUgb3V0cHV0CisKKy1pOjoKKy0taWdub3JlZDo6CisJU2hvdyBvbmx5IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dC4gV2hlbiBzaG93aW5nIGZpbGVzIGluIHRoZQorCWluZGV4LCBwcmludCBvbmx5IHRob3NlIG1hdGNoZWQgYnkgYW4gZXhjbHVkZSBwYXR0ZXJuLiBXaGVuCisJc2hvd2luZyAib3RoZXIiIGZpbGVzLCBzaG93IG9ubHkgdGhvc2UgbWF0Y2hlZCBieSBhbiBleGNsdWRlCisJcGF0dGVybi4KKworLXM6OgorLS1zdGFnZTo6CisJU2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lLCBtb2RlIGJpdHMgYW5kIHN0YWdlIG51bWJlciBpbiB0aGUgb3V0cHV0LgorCistLWRpcmVjdG9yeTo6CisJSWYgYSB3aG9sZSBkaXJlY3RvcnkgaXMgY2xhc3NpZmllZCBhcyAib3RoZXIiLCBzaG93IGp1c3QgaXRzCisJbmFtZSAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKSBhbmQgbm90IGl0cyB3aG9sZSBjb250ZW50cy4KKworLS1uby1lbXB0eS1kaXJlY3Rvcnk6OgorCURvIG5vdCBsaXN0IGVtcHR5IGRpcmVjdG9yaWVzLiBIYXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1kaXJlY3RvcnkuCisKKy11OjoKKy0tdW5tZXJnZWQ6OgorCVNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZm9yY2VzIC0tc3RhZ2UpCisKKy1rOjoKKy0ta2lsbGVkOjoKKwlTaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIGR1ZQorCXRvIGZpbGUvZGlyZWN0b3J5IGNvbmZsaWN0cyBmb3IgY2hlY2tvdXQtaW5kZXggdG8KKwlzdWNjZWVkLgorCistejo6CisJXDAgbGluZSB0ZXJtaW5hdGlvbiBvbiBvdXRwdXQuCisKKy14IDxwYXR0ZXJuPjo6CistLWV4Y2x1ZGU9PHBhdHRlcm4+OjoKKwlTa2lwIHVudHJhY2tlZCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuLgorCU5vdGUgdGhhdCBwYXR0ZXJuIGlzIGEgc2hlbGwgd2lsZGNhcmQgcGF0dGVybi4gU2VlIEVYQ0xVREUgUEFUVEVSTlMKKwliZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLVggPGZpbGU+OjoKKy0tZXhjbHVkZS1mcm9tPTxmaWxlPjo6CisJUmVhZCBleGNsdWRlIHBhdHRlcm5zIGZyb20gPGZpbGU+OyAxIHBlciBsaW5lLgorCistLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08ZmlsZT46OgorCVJlYWQgYWRkaXRpb25hbCBleGNsdWRlIHBhdHRlcm5zIHRoYXQgYXBwbHkgb25seSB0byB0aGUKKwlkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3RvcmllcyBpbiA8ZmlsZT4uCisKKy0tZXhjbHVkZS1zdGFuZGFyZDo6CisJQWRkIHRoZSBzdGFuZGFyZCBHaXQgZXhjbHVzaW9uczogLmdpdC9pbmZvL2V4Y2x1ZGUsIC5naXRpZ25vcmUKKwlpbiBlYWNoIGRpcmVjdG9yeSwgYW5kIHRoZSB1c2VyJ3MgZ2xvYmFsIGV4Y2x1c2lvbiBmaWxlLgorCistLWVycm9yLXVubWF0Y2g6OgorCUlmIGFueSA8ZmlsZT4gZG9lcyBub3QgYXBwZWFyIGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbgorCWVycm9yIChyZXR1cm4gMSkuCisKKy0td2l0aC10cmVlPTx0cmVlLWlzaD46OgorCVdoZW4gdXNpbmcgLS1lcnJvci11bm1hdGNoIHRvIGV4cGFuZCB0aGUgdXNlciBzdXBwbGllZAorCTxmaWxlPiAoaS5lLiBwYXRoIHBhdHRlcm4pIGFyZ3VtZW50cyB0byBwYXRocywgcHJldGVuZAorCXRoYXQgcGF0aHMgd2hpY2ggd2VyZSByZW1vdmVkIGluIHRoZSBpbmRleCBzaW5jZSB0aGUKKwluYW1lZCA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50LiAgVXNpbmcgdGhpcyBvcHRpb24KKwl3aXRoIGAtc2Agb3IgYC11YCBvcHRpb25zIGRvZXMgbm90IG1ha2UgYW55IHNlbnNlLgorCistdDo6CisJVGhpcyBmZWF0dXJlIGlzIHNlbWktZGVwcmVjYXRlZC4gRm9yIHNjcmlwdGluZyBwdXJwb3NlLAorCWxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSBgLS1wb3JjZWxhaW5gIGFuZAorCWxpbmtnaXQ6Z2l0LWRpZmYtZmlsZXNbMV0gYC0tbmFtZS1zdGF0dXNgIGFyZSBhbG1vc3QgYWx3YXlzCisJc3VwZXJpb3IgYWx0ZXJuYXRpdmVzLCBhbmQgdXNlcnMgc2hvdWxkIGxvb2sgYXQKKwlsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gYC0tc2hvcnRgIG9yIGxpbmtnaXQ6Z2l0LWRpZmZbMV0KKwlgLS1uYW1lLXN0YXR1c2AgZm9yIG1vcmUgdXNlci1mcmllbmRseSBhbHRlcm5hdGl2ZXMuCisrCitUaGlzIG9wdGlvbiBpZGVudGlmaWVzIHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRoZSBmb2xsb3dpbmcgdGFncyAoZm9sbG93ZWQgYnkKK2Egc3BhY2UpIGF0IHRoZSBzdGFydCBvZiBlYWNoIGxpbmU6CisKKwlIOjoJY2FjaGVkCisJUzo6CXNraXAtd29ya3RyZWUKKwlNOjoJdW5tZXJnZWQKKwlSOjoJcmVtb3ZlZC9kZWxldGVkCisJQzo6CW1vZGlmaWVkL2NoYW5nZWQKKwlLOjoJdG8gYmUga2lsbGVkCisJPzo6CW90aGVyCisKKy12OjoKKwlTaW1pbGFyIHRvIGAtdGAsIGJ1dCB1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yIGZpbGVzCisJdGhhdCBhcmUgbWFya2VkIGFzICdhc3N1bWUgdW5jaGFuZ2VkJyAoc2VlCisJbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdKS4KKworLS1mdWxsLW5hbWU6OgorCVdoZW4gcnVuIGZyb20gYSBzdWJkaXJlY3RvcnksIHRoZSBjb21tYW5kIHVzdWFsbHkKKwlvdXRwdXRzIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFRoaXMKKwlvcHRpb24gZm9yY2VzIHBhdGhzIHRvIGJlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdAorCXRvcCBkaXJlY3RvcnkuCisKKy0tYWJicmV2Wz08bj5dOjoKKwlJbnN0ZWFkIG9mIHNob3dpbmcgdGhlIGZ1bGwgNDAtYnl0ZSBoZXhhZGVjaW1hbCBvYmplY3QKKwlsaW5lcywgc2hvdyBvbmx5IGEgcGFydGlhbCBwcmVmaXguCisJTm9uIGRlZmF1bHQgbnVtYmVyIG9mIGRpZ2l0cyBjYW4gYmUgc3BlY2lmaWVkIHdpdGggLS1hYmJyZXY9PG4+LgorCistLWRlYnVnOjoKKwlBZnRlciBlYWNoIGxpbmUgdGhhdCBkZXNjcmliZXMgYSBmaWxlLCBhZGQgbW9yZSBkYXRhIGFib3V0IGl0cworCWNhY2hlIGVudHJ5LiAgVGhpcyBpcyBpbnRlbmRlZCB0byBzaG93IGFzIG11Y2ggaW5mb3JtYXRpb24gYXMKKwlwb3NzaWJsZSBmb3IgbWFudWFsIGluc3BlY3Rpb247IHRoZSBleGFjdCBmb3JtYXQgbWF5IGNoYW5nZSBhdAorCWFueSB0aW1lLgorCitcLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKKzxmaWxlPjo6CisJRmlsZXMgdG8gc2hvdy4gSWYgbm8gZmlsZXMgYXJlIGdpdmVuIGFsbCBmaWxlcyB3aGljaCBtYXRjaCB0aGUgb3RoZXIKKwlzcGVjaWZpZWQgY3JpdGVyaWEgYXJlIHNob3duLgorCitPdXRwdXQKKy0tLS0tLQorJ2dpdCBscy1maWxlcycganVzdCBvdXRwdXRzIHRoZSBmaWxlbmFtZXMgdW5sZXNzICctLXN0YWdlJyBpcyBzcGVjaWZpZWQgaW4KK3doaWNoIGNhc2UgaXQgb3V0cHV0czoKKworICAgICAgICBbPHRhZz4gXTxtb2RlPiA8b2JqZWN0PiA8c3RhZ2U+IDxmaWxlPgorCisnZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQnIGFuZCAnZ2l0IGxzLWZpbGVzIC0tc3RhZ2UnIGNhbiBiZSB1c2VkIHRvIGV4YW1pbmUKK2RldGFpbGVkIGluZm9ybWF0aW9uIG9uIHVubWVyZ2VkIHBhdGhzLgorCitGb3IgYW4gdW5tZXJnZWQgcGF0aCwgaW5zdGVhZCBvZiByZWNvcmRpbmcgYSBzaW5nbGUgbW9kZS9TSEEtMSBwYWlyLAordGhlIGluZGV4IHJlY29yZHMgdXAgdG8gdGhyZWUgc3VjaCBwYWlyczsgb25lIGZyb20gdHJlZSBPIGluIHN0YWdlCisxLCBBIGluIHN0YWdlIDIsIGFuZCBCIGluIHN0YWdlIDMuICBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VkIGJ5Cit0aGUgdXNlciAob3IgdGhlIHBvcmNlbGFpbikgdG8gc2VlIHdoYXQgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVjb3JkZWQgYXQgdGhlCitwYXRoLiAoc2VlIGxpbmtnaXQ6Z2l0LXJlYWQtdHJlZVsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdGF0ZSkKKworV2hlbiBgLXpgIG9wdGlvbiBpcyBub3QgdXNlZCwgVEFCLCBMRiwgYW5kIGJhY2tzbGFzaCBjaGFyYWN0ZXJzCitpbiBwYXRobmFtZXMgYXJlIHJlcHJlc2VudGVkIGFzIGBcdGAsIGBcbmAsIGFuZCBgXFxgLAorcmVzcGVjdGl2ZWx5LgorCisKK0V4Y2x1ZGUgUGF0dGVybnMKKy0tLS0tLS0tLS0tLS0tLS0KKworJ2dpdCBscy1maWxlcycgY2FuIHVzZSBhIGxpc3Qgb2YgImV4Y2x1ZGUgcGF0dGVybnMiIHdoZW4KK3RyYXZlcnNpbmcgdGhlIGRpcmVjdG9yeSB0cmVlIGFuZCBmaW5kaW5nIGZpbGVzIHRvIHNob3cgd2hlbiB0aGUKK2ZsYWdzIC0tb3RoZXJzIG9yIC0taWdub3JlZCBhcmUgc3BlY2lmaWVkLiAgbGlua2dpdDpnaXRpZ25vcmVbNV0KK3NwZWNpZmllcyB0aGUgZm9ybWF0IG9mIGV4Y2x1ZGUgcGF0dGVybnMuCisKK1RoZXNlIGV4Y2x1ZGUgcGF0dGVybnMgY29tZSBmcm9tIHRoZXNlIHBsYWNlcywgaW4gb3JkZXI6CisKKyAgMS4gVGhlIGNvbW1hbmQtbGluZSBmbGFnIC0tZXhjbHVkZT08cGF0dGVybj4gc3BlY2lmaWVzIGEKKyAgICAgc2luZ2xlIHBhdHRlcm4uICBQYXR0ZXJucyBhcmUgb3JkZXJlZCBpbiB0aGUgc2FtZSBvcmRlcgorICAgICB0aGV5IGFwcGVhciBpbiB0aGUgY29tbWFuZCBsaW5lLgorCisgIDIuIFRoZSBjb21tYW5kLWxpbmUgZmxhZyAtLWV4Y2x1ZGUtZnJvbT08ZmlsZT4gc3BlY2lmaWVzIGEKKyAgICAgZmlsZSBjb250YWluaW5nIGEgbGlzdCBvZiBwYXR0ZXJucy4gIFBhdHRlcm5zIGFyZSBvcmRlcmVkCisgICAgIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkgYXBwZWFyIGluIHRoZSBmaWxlLgorCisgIDMuIFRoZSBjb21tYW5kLWxpbmUgZmxhZyAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08bmFtZT4gc3BlY2lmaWVzCisgICAgIGEgbmFtZSBvZiB0aGUgZmlsZSBpbiBlYWNoIGRpcmVjdG9yeSAnZ2l0IGxzLWZpbGVzJworICAgICBleGFtaW5lcywgbm9ybWFsbHkgYC5naXRpZ25vcmVgLiAgRmlsZXMgaW4gZGVlcGVyCisgICAgIGRpcmVjdG9yaWVzIHRha2UgcHJlY2VkZW5jZS4gIFBhdHRlcm5zIGFyZSBvcmRlcmVkIGluIHRoZQorICAgICBzYW1lIG9yZGVyIHRoZXkgYXBwZWFyIGluIHRoZSBmaWxlcy4KKworQSBwYXR0ZXJuIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggLS1leGNsdWRlIG9yIHJlYWQKK2Zyb20gdGhlIGZpbGUgc3BlY2lmaWVkIHdpdGggLS1leGNsdWRlLWZyb20gaXMgcmVsYXRpdmUgdG8gdGhlCit0b3Agb2YgdGhlIGRpcmVjdG9yeSB0cmVlLiAgQSBwYXR0ZXJuIHJlYWQgZnJvbSBhIGZpbGUgc3BlY2lmaWVkCitieSAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeSBpcyByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IHRoYXQgdGhlCitwYXR0ZXJuIGZpbGUgYXBwZWFycyBpbi4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1yZWFkLXRyZWVbMV0sIGxpbmtnaXQ6Z2l0aWdub3JlWzVdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXJlbW90ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMGMwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXJlbW90ZS50eHQKQEAgLTAsMCArMSw4MSBAQAorZ2l0LWxzLXJlbW90ZSgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbHMtcmVtb3RlIC0gTGlzdCByZWZlcmVuY2VzIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbHMtcmVtb3RlJyBbLS1oZWFkc10gWy0tdGFnc10gIFstLXVwbG9hZC1wYWNrPTxleGVjPl0KKwkgICAgICBbLS1leGl0LWNvZGVdIDxyZXBvc2l0b3J5PiBbPHJlZnM+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0Rpc3BsYXlzIHJlZmVyZW5jZXMgYXZhaWxhYmxlIGluIGEgcmVtb3RlIHJlcG9zaXRvcnkgYWxvbmcgd2l0aCB0aGUgYXNzb2NpYXRlZAorY29tbWl0IElEcy4KKworCitPUFRJT05TCistLS0tLS0tCistaDo6CistLWhlYWRzOjoKKy10OjoKKy0tdGFnczo6CisJTGltaXQgdG8gb25seSByZWZzL2hlYWRzIGFuZCByZWZzL3RhZ3MsIHJlc3BlY3RpdmVseS4KKwlUaGVzZSBvcHRpb25zIGFyZSBfbm90XyBtdXR1YWxseSBleGNsdXNpdmU7IHdoZW4gZ2l2ZW4KKwlib3RoLCByZWZlcmVuY2VzIHN0b3JlZCBpbiByZWZzL2hlYWRzIGFuZCByZWZzL3RhZ3MgYXJlCisJZGlzcGxheWVkLgorCistLXVwbG9hZC1wYWNrPTxleGVjPjo6CisJU3BlY2lmeSB0aGUgZnVsbCBwYXRoIG9mICdnaXQtdXBsb2FkLXBhY2snIG9uIHRoZSByZW1vdGUKKwlob3N0LiBUaGlzIGFsbG93cyBsaXN0aW5nIHJlZmVyZW5jZXMgZnJvbSByZXBvc2l0b3JpZXMgYWNjZXNzZWQgdmlhCisJU1NIIGFuZCB3aGVyZSB0aGUgU1NIIGRhZW1vbiBkb2VzIG5vdCB1c2UgdGhlIFBBVEggY29uZmlndXJlZCBieSB0aGUKKwl1c2VyLgorCistLWV4aXQtY29kZTo6CisJRXhpdCB3aXRoIHN0YXR1cyAiMiIgd2hlbiBubyBtYXRjaGluZyByZWZzIGFyZSBmb3VuZCBpbiB0aGUgcmVtb3RlCisJcmVwb3NpdG9yeS4gVXN1YWxseSB0aGUgY29tbWFuZCBleGl0cyB3aXRoIHN0YXR1cyAiMCIgdG8gaW5kaWNhdGUKKwlpdCBzdWNjZXNzZnVsbHkgdGFsa2VkIHdpdGggdGhlIHJlbW90ZSByZXBvc2l0b3J5LCB3aGV0aGVyIGl0CisJZm91bmQgYW55IG1hdGNoaW5nIHJlZnMuCisKKy0tZ2V0LXVybDo6CisJRXhwYW5kIHRoZSBVUkwgb2YgdGhlIGdpdmVuIHJlbW90ZSByZXBvc2l0b3J5IHRha2luZyBpbnRvIGFjY291bnQgYW55CisJInVybC48YmFzZT4uaW5zdGVhZE9mIiBjb25maWcgc2V0dGluZyAoU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkgYW5kCisJZXhpdCB3aXRob3V0IHRhbGtpbmcgdG8gdGhlIHJlbW90ZS4KKworPHJlcG9zaXRvcnk+OjoKKwlUaGUgInJlbW90ZSIgcmVwb3NpdG9yeSB0byBxdWVyeS4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZQorCWVpdGhlciBhIFVSTCBvciB0aGUgbmFtZSBvZiBhIHJlbW90ZSAoc2VlIHRoZSBHSVQgVVJMUyBhbmQKKwlSRU1PVEVTIHNlY3Rpb25zIG9mIGxpbmtnaXQ6Z2l0LWZldGNoWzFdKS4KKworPHJlZnM+Li4uOjoKKwlXaGVuIHVuc3BlY2lmaWVkLCBhbGwgcmVmZXJlbmNlcywgYWZ0ZXIgZmlsdGVyaW5nIGRvbmUKKwl3aXRoIC0taGVhZHMgYW5kIC0tdGFncywgYXJlIHNob3duLiAgV2hlbiA8cmVmcz4uLi4gYXJlCisJc3BlY2lmaWVkLCBvbmx5IHJlZmVyZW5jZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm5zCisJYXJlIGRpc3BsYXllZC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKKwkkIGdpdCBscy1yZW1vdGUgLS10YWdzIC4vLgorCWQ2NjAyZWM1MTk0Yzg3YjBmYzg3MTAzY2E0ZDY3MjUxYzc2ZjIzM2EJcmVmcy90YWdzL3YwLjk5CisJZjI1YTI2NWEzNDJhZWQ2MDQxYWIwY2M0ODQyMjRkOWNhNTRiNmY0MQlyZWZzL3RhZ3MvdjAuOTkuMQorCTdjZWNhMjc1ZDA0N2M5MGMwYzdkNWFmYjEzYWI5N2VmZGY1MWJkNmUJcmVmcy90YWdzL3YwLjk5LjMKKwljNWRiNTQ1NmFlM2IwODczZmM2NTljMTlmYWZkZGUyMjMxM2NjNDQxCXJlZnMvdGFncy92MC45OS4yCisJMDkxODM4NWRiZDk2NTZjYWIwZDFkODFiYTc0NTNkNDliYmMxNjI1MAlyZWZzL3RhZ3MvanVuaW8tZ3BnLXB1YgorCSQgZ2l0IGxzLXJlbW90ZSBodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdCBtYXN0ZXIgcHUgcmMKKwk1ZmU5NzhhNTM4MWYxZmJhZDI2YTgwZTY4MmRkZDJhNDAxOTY2NzQwCXJlZnMvaGVhZHMvbWFzdGVyCisJYzc4MWE4NGI1MjA0ZmIyOTRjOWNjYzc5ZjhiM2JhY2VlYjMyYzA2MQlyZWZzL2hlYWRzL3B1CisJJCBnaXQgcmVtb3RlIGFkZCBrb3JnIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0CisJJCBnaXQgbHMtcmVtb3RlIC0tdGFncyBrb3JnIHZcKgorCWQ2NjAyZWM1MTk0Yzg3YjBmYzg3MTAzY2E0ZDY3MjUxYzc2ZjIzM2EJcmVmcy90YWdzL3YwLjk5CisJZjI1YTI2NWEzNDJhZWQ2MDQxYWIwY2M0ODQyMjRkOWNhNTRiNmY0MQlyZWZzL3RhZ3MvdjAuOTkuMQorCWM1ZGI1NDU2YWUzYjA4NzNmYzY1OWMxOWZhZmRkZTIyMzEzY2M0NDEJcmVmcy90YWdzL3YwLjk5LjIKKwk3Y2VjYTI3NWQwNDdjOTBjMGM3ZDVhZmIxM2FiOTdlZmRmNTFiZDZlCXJlZnMvdGFncy92MC45OS4zCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmU4N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKQEAgLTAsMCArMSwxMDAgQEAKK2dpdC1scy10cmVlKDEpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbHMtdHJlZSAtIExpc3QgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbHMtdHJlZScgWy1kXSBbLXJdIFstdF0gWy1sXSBbLXpdCisJICAgIFstLW5hbWUtb25seV0gWy0tbmFtZS1zdGF0dXNdIFstLWZ1bGwtbmFtZV0gWy0tZnVsbC10cmVlXSBbLS1hYmJyZXZbPTxuPl1dCisJICAgIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitMaXN0cyB0aGUgY29udGVudHMgb2YgYSBnaXZlbiB0cmVlIG9iamVjdCwgbGlrZSB3aGF0ICIvYmluL2xzIC1hIiBkb2VzCitpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIE5vdGUgdGhhdDoKKworIC0gdGhlIGJlaGF2aW91ciBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSB0aGF0IG9mICIvYmluL2xzIiBpbiB0aGF0IHRoZQorICAgJzxwYXRoPicgZGVub3RlcyBqdXN0IGEgbGlzdCBvZiBwYXR0ZXJucyB0byBtYXRjaCwgZS5nLiBzbyBzcGVjaWZ5aW5nCisgICBkaXJlY3RvcnkgbmFtZSAod2l0aG91dCAnLXInKSB3aWxsIGJlaGF2ZSBkaWZmZXJlbnRseSwgYW5kIG9yZGVyIG9mIHRoZQorICAgYXJndW1lbnRzIGRvZXMgbm90IG1hdHRlci4KKworIC0gdGhlIGJlaGF2aW91ciBpcyBzaW1pbGFyIHRvIHRoYXQgb2YgIi9iaW4vbHMiIGluIHRoYXQgdGhlICc8cGF0aD4nIGlzCisgICB0YWtlbiBhcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIEUuZy4gd2hlbiB5b3UgYXJlCisgICBpbiBhIGRpcmVjdG9yeSAnc3ViJyB0aGF0IGhhcyBhIGRpcmVjdG9yeSAnZGlyJywgeW91IGNhbiBydW4gJ2dpdAorICAgbHMtdHJlZSAtciBIRUFEIGRpcicgdG8gbGlzdCB0aGUgY29udGVudHMgb2YgdGhlIHRyZWUgKHRoYXQgaXMKKyAgICdzdWIvZGlyJyBpbiAnSEVBRCcpLiAgWW91IGRvbid0IHdhbnQgdG8gZ2l2ZSBhIHRyZWUgdGhhdCBpcyBub3QgYXQgdGhlCisgICByb290IGxldmVsIChlLmcuIGBnaXQgbHMtdHJlZSAtciBIRUFEOnN1YiBkaXJgKSBpbiB0aGlzIGNhc2UsIGFzIHRoYXQKKyAgIHdvdWxkIHJlc3VsdCBpbiBhc2tpbmcgZm9yICdzdWIvc3ViL2RpcicgaW4gdGhlICdIRUFEJyBjb21taXQuCisgICBIb3dldmVyLCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBjYW4gYmUgaWdub3JlZCBieSBwYXNzaW5nCisgICAtLWZ1bGwtdHJlZSBvcHRpb24uCisKK09QVElPTlMKKy0tLS0tLS0KKzx0cmVlLWlzaD46OgorCUlkIG9mIGEgdHJlZS1pc2guCisKKy1kOjoKKwlTaG93IG9ubHkgdGhlIG5hbWVkIHRyZWUgZW50cnkgaXRzZWxmLCBub3QgaXRzIGNoaWxkcmVuLgorCistcjo6CisJUmVjdXJzZSBpbnRvIHN1Yi10cmVlcy4KKworLXQ6OgorCVNob3cgdHJlZSBlbnRyaWVzIGV2ZW4gd2hlbiBnb2luZyB0byByZWN1cnNlIHRoZW0uIEhhcyBubyBlZmZlY3QKKwlpZiAnLXInIHdhcyBub3QgcGFzc2VkLiAnLWQnIGltcGxpZXMgJy10Jy4KKworLWw6OgorLS1sb25nOjoKKwlTaG93IG9iamVjdCBzaXplIG9mIGJsb2IgKGZpbGUpIGVudHJpZXMuCisKKy16OjoKKwlcMCBsaW5lIHRlcm1pbmF0aW9uIG9uIG91dHB1dC4KKworLS1uYW1lLW9ubHk6OgorLS1uYW1lLXN0YXR1czo6CisJTGlzdCBvbmx5IGZpbGVuYW1lcyAoaW5zdGVhZCBvZiB0aGUgImxvbmciIG91dHB1dCksIG9uZSBwZXIgbGluZS4KKworLS1hYmJyZXZbPTxuPl06OgorCUluc3RlYWQgb2Ygc2hvd2luZyB0aGUgZnVsbCA0MC1ieXRlIGhleGFkZWNpbWFsIG9iamVjdAorCWxpbmVzLCBzaG93IG9ubHkgYSBwYXJ0aWFsIHByZWZpeC4KKwlOb24gZGVmYXVsdCBudW1iZXIgb2YgZGlnaXRzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCAtLWFiYnJldj08bj4uCisKKy0tZnVsbC1uYW1lOjoKKwlJbnN0ZWFkIG9mIHNob3dpbmcgdGhlIHBhdGggbmFtZXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZworCWRpcmVjdG9yeSwgc2hvdyB0aGUgZnVsbCBwYXRoIG5hbWVzLgorCistLWZ1bGwtdHJlZTo6CisJRG8gbm90IGxpbWl0IHRoZSBsaXN0aW5nIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorCUltcGxpZXMgLS1mdWxsLW5hbWUuCisKK1s8cGF0aD4uLi5dOjoKKwlXaGVuIHBhdGhzIGFyZSBnaXZlbiwgc2hvdyB0aGVtIChub3RlIHRoYXQgdGhpcyBpc24ndCByZWFsbHkgcmF3CisJcGF0aG5hbWVzLCBidXQgcmF0aGVyIGEgbGlzdCBvZiBwYXR0ZXJucyB0byBtYXRjaCkuICBPdGhlcndpc2UKKwlpbXBsaWNpdGx5IHVzZXMgdGhlIHJvb3QgbGV2ZWwgb2YgdGhlIHRyZWUgYXMgdGhlIHNvbGUgcGF0aCBhcmd1bWVudC4KKworCitPdXRwdXQgRm9ybWF0CistLS0tLS0tLS0tLS0tCisgICAgICAgIDxtb2RlPiBTUCA8dHlwZT4gU1AgPG9iamVjdD4gVEFCIDxmaWxlPgorCitVbmxlc3MgdGhlIGAtemAgb3B0aW9uIGlzIHVzZWQsIFRBQiwgTEYsIGFuZCBiYWNrc2xhc2ggY2hhcmFjdGVycworaW4gcGF0aG5hbWVzIGFyZSByZXByZXNlbnRlZCBhcyBgXHRgLCBgXG5gLCBhbmQgYFxcYCwgcmVzcGVjdGl2ZWx5LgorVGhpcyBvdXRwdXQgZm9ybWF0IGlzIGNvbXBhdGlibGUgd2l0aCB3aGF0IGAtLWluZGV4LWluZm8gLS1zdGRpbmAgb2YKKydnaXQgdXBkYXRlLWluZGV4JyBleHBlY3RzLgorCitXaGVuIHRoZSBgLWxgIG9wdGlvbiBpcyB1c2VkLCBmb3JtYXQgY2hhbmdlcyB0bworCisgICAgICAgIDxtb2RlPiBTUCA8dHlwZT4gU1AgPG9iamVjdD4gU1AgPG9iamVjdCBzaXplPiBUQUIgPGZpbGU+CisKK09iamVjdCBzaXplIGlkZW50aWZpZWQgYnkgPG9iamVjdD4gaXMgZ2l2ZW4gaW4gYnl0ZXMsIGFuZCByaWdodC1qdXN0aWZpZWQKK3dpdGggbWluaW11bSB3aWR0aCBvZiA3IGNoYXJhY3RlcnMuICBPYmplY3Qgc2l6ZSBpcyBnaXZlbiBvbmx5IGZvciBibG9icworKGZpbGUpIGVudHJpZXM7IGZvciBvdGhlciBlbnRyaWVzIGAtYCBjaGFyYWN0ZXIgaXMgdXNlZCBpbiBwbGFjZSBvZiBzaXplLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1haWxpbmZvLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1haWxpbmZvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTQ3MDg0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWFpbGluZm8udHh0CkBAIC0wLDAgKzEsMTAyIEBACitnaXQtbWFpbGluZm8oMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWFpbGluZm8gLSBFeHRyYWN0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBmcm9tIGEgc2luZ2xlIGUtbWFpbCBtZXNzYWdlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG1haWxpbmZvJyBbLWt8LWJdIFstdSB8IC0tZW5jb2Rpbmc9PGVuY29kaW5nPiB8IC1uXSBbLS1bbm8tXXNjaXNzb3JzXSA8bXNnPiA8cGF0Y2g+CisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyBhIHNpbmdsZSBlLW1haWwgbWVzc2FnZSBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgYW5kCit3cml0ZXMgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpbiA8bXNnPiBmaWxlLCBhbmQgdGhlIHBhdGNoZXMgaW4KKzxwYXRjaD4gZmlsZS4gIFRoZSBhdXRob3IgbmFtZSwgZS1tYWlsIGFuZCBlLW1haWwgc3ViamVjdCBhcmUKK3dyaXR0ZW4gb3V0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgdG8gYmUgdXNlZCBieSAnZ2l0IGFtJwordG8gY3JlYXRlIGEgY29tbWl0LiAgSXQgaXMgdXN1YWxseSBub3QgbmVjZXNzYXJ5IHRvIHVzZSB0aGlzCitjb21tYW5kIGRpcmVjdGx5LiAgU2VlIGxpbmtnaXQ6Z2l0LWFtWzFdIGluc3RlYWQuCisKKworT1BUSU9OUworLS0tLS0tLQorLWs6OgorCVVzdWFsbHkgdGhlIHByb2dyYW0gcmVtb3ZlcyBlbWFpbCBjcnVmdCBmcm9tIHRoZSBTdWJqZWN0OgorCWhlYWRlciBsaW5lIHRvIGV4dHJhY3QgdGhlIHRpdGxlIGxpbmUgZm9yIHRoZSBjb21taXQgbG9nCisJbWVzc2FnZS4gIFRoaXMgb3B0aW9uIHByZXZlbnRzIHRoaXMgbXVuZ2luZywgYW5kIGlzIG1vc3QKKwl1c2VmdWwgd2hlbiB1c2VkIHRvIHJlYWQgYmFjayAnZ2l0IGZvcm1hdC1wYXRjaCAtaycgb3V0cHV0LgorKworU3BlY2lmaWNhbGx5LCB0aGUgZm9sbG93aW5nIGFyZSByZW1vdmVkIHVudGlsIG5vbmUgb2YgdGhlbSByZW1haW46CisrCistLQorKglMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLgorCisqCUxlYWRpbmcgYFJlOmAsIGByZTpgLCBhbmQgYDpgLgorCisqCUxlYWRpbmcgYnJhY2tldGVkIHN0cmluZ3MgKGJldHdlZW4gYFtgIGFuZCBgXWAsIHVzdWFsbHkKKwlgW1BBVENIXWApLgorLS0KKysKK0ZpbmFsbHksIHJ1bnMgb2Ygd2hpdGVzcGFjZSBhcmUgbm9ybWFsaXplZCB0byBhIHNpbmdsZSBBU0NJSSBzcGFjZQorY2hhcmFjdGVyLgorCistYjo6CisJV2hlbiAtayBpcyBub3QgaW4gZWZmZWN0LCBhbGwgbGVhZGluZyBzdHJpbmdzIGJyYWNrZXRlZCB3aXRoICdbJworCWFuZCAnXScgcGFpcnMgYXJlIHN0cmlwcGVkLiAgVGhpcyBvcHRpb24gbGltaXRzIHRoZSBzdHJpcHBpbmcgdG8KKwlvbmx5IHRoZSBwYWlycyB3aG9zZSBicmFja2V0ZWQgc3RyaW5nIGNvbnRhaW5zIHRoZSB3b3JkICJQQVRDSCIuCisKKy11OjoKKwlUaGUgY29tbWl0IGxvZyBtZXNzYWdlLCBhdXRob3IgbmFtZSBhbmQgYXV0aG9yIGVtYWlsIGFyZQorCXRha2VuIGZyb20gdGhlIGUtbWFpbCwgYW5kIGFmdGVyIG1pbmltYWxseSBkZWNvZGluZyBNSU1FCisJdHJhbnNmZXIgZW5jb2RpbmcsIHJlLWNvZGVkIGluIHRoZSBjaGFyc2V0IHNwZWNpZmllZCBieQorCWkxOG4uY29tbWl0ZW5jb2RpbmcgKGRlZmF1bHRpbmcgdG8gVVRGLTgpIGJ5IHRyYW5zbGl0ZXJhdGluZworCXRoZW0uICBUaGlzIHVzZWQgdG8gYmUgb3B0aW9uYWwgYnV0IG5vdyBpdCBpcyB0aGUgZGVmYXVsdC4KKysKK05vdGUgdGhhdCB0aGUgcGF0Y2ggaXMgYWx3YXlzIHVzZWQgYXMtaXMgd2l0aG91dCBjaGFyc2V0Citjb252ZXJzaW9uLCBldmVuIHdpdGggdGhpcyBmbGFnLgorCistLWVuY29kaW5nPTxlbmNvZGluZz46OgorCVNpbWlsYXIgdG8gLXUuICBCdXQgd2hlbiByZS1jb2RpbmcsIHRoZSBjaGFyc2V0IHNwZWNpZmllZCBoZXJlIGlzCisJdXNlZCBpbnN0ZWFkIG9mIHRoZSBvbmUgc3BlY2lmaWVkIGJ5IGkxOG4uY29tbWl0ZW5jb2Rpbmcgb3IgVVRGLTguCisKKy1uOjoKKwlEaXNhYmxlIGFsbCBjaGFyc2V0IHJlLWNvZGluZyBvZiB0aGUgbWV0YWRhdGEuCisKKy1tOjoKKy0tbWVzc2FnZS1pZDo6CisJQ29weSB0aGUgTWVzc2FnZS1JRCBoZWFkZXIgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuICBUaGlzCisJaXMgdXNlZnVsIGluIG9yZGVyIHRvIGFzc29jaWF0ZSBjb21taXRzIHdpdGggbWFpbGluZyBsaXN0IGRpc2N1c3Npb25zLgorCistLXNjaXNzb3JzOjoKKwlSZW1vdmUgZXZlcnl0aGluZyBpbiBib2R5IGJlZm9yZSBhIHNjaXNzb3JzIGxpbmUuICBBIGxpbmUgdGhhdAorCW1haW5seSBjb25zaXN0cyBvZiBzY2lzc29ycyAoZWl0aGVyICI+OCIgb3IgIjg8IikgYW5kIHBlcmZvcmF0aW9uCisJKGRhc2ggIi0iKSBtYXJrcyBpcyBjYWxsZWQgYSBzY2lzc29ycyBsaW5lLCBhbmQgaXMgdXNlZCB0byByZXF1ZXN0CisJdGhlIHJlYWRlciB0byBjdXQgdGhlIG1lc3NhZ2UgYXQgdGhhdCBsaW5lLiAgSWYgc3VjaCBhIGxpbmUKKwlhcHBlYXJzIGluIHRoZSBib2R5IG9mIHRoZSBtZXNzYWdlIGJlZm9yZSB0aGUgcGF0Y2gsIGV2ZXJ5dGhpbmcKKwliZWZvcmUgaXQgKGluY2x1ZGluZyB0aGUgc2Npc3NvcnMgbGluZSBpdHNlbGYpIGlzIGlnbm9yZWQgd2hlbgorCXRoaXMgb3B0aW9uIGlzIHVzZWQuCisrCitUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBiZWdpbiB5b3VyIG1lc3NhZ2UgaW4gYSBkaXNjdXNzaW9uIHRocmVhZAord2l0aCBjb21tZW50cyBhbmQgc3VnZ2VzdGlvbnMgb24gdGhlIG1lc3NhZ2UgeW91IGFyZSByZXNwb25kaW5nIHRvLCBhbmQgdG8KK2NvbmNsdWRlIGl0IHdpdGggYSBwYXRjaCBzdWJtaXNzaW9uLCBzZXBhcmF0aW5nIHRoZSBkaXNjdXNzaW9uIGFuZCB0aGUKK2JlZ2lubmluZyBvZiB0aGUgcHJvcG9zZWQgY29tbWl0IGxvZyBtZXNzYWdlIHdpdGggYSBzY2lzc29ycyBsaW5lLgorKworVGhpcyBjYW4gZW5hYmxlZCBieSBkZWZhdWx0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG1haWxpbmZvLnNjaXNzb3JzLgorCistLW5vLXNjaXNzb3JzOjoKKwlJZ25vcmUgc2Npc3NvcnMgbGluZXMuIFVzZWZ1bCBmb3Igb3ZlcnJpZGluZyBtYWlsaW5mby5zY2lzc29ycyBzZXR0aW5ncy4KKworPG1zZz46OgorCVRoZSBjb21taXQgbG9nIG1lc3NhZ2UgZXh0cmFjdGVkIGZyb20gZS1tYWlsLCB1c3VhbGx5CisJZXhjZXB0IHRoZSB0aXRsZSBsaW5lIHdoaWNoIGNvbWVzIGZyb20gZS1tYWlsIFN1YmplY3QuCisKKzxwYXRjaD46OgorCVRoZSBwYXRjaCBleHRyYWN0ZWQgZnJvbSBlLW1haWwuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWFpbHNwbGl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQxYjg3MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1haWxzcGxpdC50eHQKQEAgLTAsMCArMSw1MiBAQAorZ2l0LW1haWxzcGxpdCgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWFpbHNwbGl0IC0gU2ltcGxlIFVOSVggbWJveCBzcGxpdHRlciBwcm9ncmFtCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtYWlsc3BsaXQnIFstYl0gWy1mPG5uPl0gWy1kPHByZWM+XSBbLS1rZWVwLWNyXSAtbzxkaXJlY3Rvcnk+IFstLV0gWyg8bWJveD58PE1haWxkaXI+KS4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitTcGxpdHMgYSBtYm94IGZpbGUgb3IgYSBNYWlsZGlyIGludG8gYSBsaXN0IG9mIGZpbGVzOiAiMDAwMSIgIjAwMDIiIC4uICBpbiB0aGUKK3NwZWNpZmllZCBkaXJlY3Rvcnkgc28geW91IGNhbiBwcm9jZXNzIHRoZW0gZnVydGhlciBmcm9tIHRoZXJlLgorCitJTVBPUlRBTlQ6IE1haWxkaXIgc3BsaXR0aW5nIHJlbGllcyB1cG9uIGZpbGVuYW1lcyBiZWluZyBzb3J0ZWQgdG8gb3V0cHV0CitwYXRjaGVzIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorCitPUFRJT05TCistLS0tLS0tCis8bWJveD46OgorCU1ib3ggZmlsZSB0byBzcGxpdC4gIElmIG5vdCBnaXZlbiwgdGhlIG1ib3ggaXMgcmVhZCBmcm9tCisJdGhlIHN0YW5kYXJkIGlucHV0LgorCis8TWFpbGRpcj46OgorCVJvb3Qgb2YgdGhlIE1haWxkaXIgdG8gc3BsaXQuIFRoaXMgZGlyZWN0b3J5IHNob3VsZCBjb250YWluIHRoZSBjdXIsIHRtcAorCWFuZCBuZXcgc3ViZGlyZWN0b3JpZXMuCisKKy1vPGRpcmVjdG9yeT46OgorCURpcmVjdG9yeSBpbiB3aGljaCB0byBwbGFjZSB0aGUgaW5kaXZpZHVhbCBtZXNzYWdlcy4KKworLWI6OgorCUlmIGFueSBmaWxlIGRvZXNuJ3QgYmVnaW4gd2l0aCBhIEZyb20gbGluZSwgYXNzdW1lIGl0IGlzIGEKKwlzaW5nbGUgbWFpbCBtZXNzYWdlIGluc3RlYWQgb2Ygc2lnbmFsaW5nIGVycm9yLgorCistZDxwcmVjPjo6CisJSW5zdGVhZCBvZiB0aGUgZGVmYXVsdCA0IGRpZ2l0cyB3aXRoIGxlYWRpbmcgemVyb3MsCisJZGlmZmVyZW50IHByZWNpc2lvbiBjYW4gYmUgc3BlY2lmaWVkIGZvciB0aGUgZ2VuZXJhdGVkCisJZmlsZW5hbWVzLgorCistZjxubj46OgorCVNraXAgdGhlIGZpcnN0IDxubj4gbnVtYmVycywgZm9yIGV4YW1wbGUgaWYgLWYzIGlzIHNwZWNpZmllZCwKKwlzdGFydCB0aGUgbnVtYmVyaW5nIHdpdGggMDAwNC4KKworLS1rZWVwLWNyOjoKKwlEbyBub3QgcmVtb3ZlIGBccmAgZnJvbSBsaW5lcyBlbmRpbmcgd2l0aCBgXHJcbmAuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtYmFzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1iYXNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDg0MjZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtYmFzZS50eHQKQEAgLTAsMCArMSwxODMgQEAKK2dpdC1tZXJnZS1iYXNlKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWVyZ2UtYmFzZSAtIEZpbmQgYXMgZ29vZCBjb21tb24gYW5jZXN0b3JzIGFzIHBvc3NpYmxlIGZvciBhIG1lcmdlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG1lcmdlLWJhc2UnIFstYXwtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4KKydnaXQgbWVyZ2UtYmFzZScgWy1hfC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4KKydnaXQgbWVyZ2UtYmFzZScgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PgorJ2dpdCBtZXJnZS1iYXNlJyAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uCisnZ2l0IG1lcmdlLWJhc2UnIC0tZm9yay1wb2ludCA8cmVmPiBbPGNvbW1pdD5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCisnZ2l0IG1lcmdlLWJhc2UnIGZpbmRzIGJlc3QgY29tbW9uIGFuY2VzdG9yKHMpIGJldHdlZW4gdHdvIGNvbW1pdHMgdG8gdXNlCitpbiBhIHRocmVlLXdheSBtZXJnZS4gIE9uZSBjb21tb24gYW5jZXN0b3IgaXMgJ2JldHRlcicgdGhhbiBhbm90aGVyIGNvbW1vbgorYW5jZXN0b3IgaWYgdGhlIGxhdHRlciBpcyBhbiBhbmNlc3RvciBvZiB0aGUgZm9ybWVyLiAgQSBjb21tb24gYW5jZXN0b3IKK3RoYXQgZG9lcyBub3QgaGF2ZSBhbnkgYmV0dGVyIGNvbW1vbiBhbmNlc3RvciBpcyBhICdiZXN0IGNvbW1vbgorYW5jZXN0b3InLCBpLmUuIGEgJ21lcmdlIGJhc2UnLiAgTm90ZSB0aGF0IHRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lCittZXJnZSBiYXNlIGZvciBhIHBhaXIgb2YgY29tbWl0cy4KKworT1BFUkFUSU9OIE1PREVTCistLS0tLS0tLS0tLS0tLS0KKworQXMgdGhlIG1vc3QgY29tbW9uIHNwZWNpYWwgY2FzZSwgc3BlY2lmeWluZyBvbmx5IHR3byBjb21taXRzIG9uIHRoZQorY29tbWFuZCBsaW5lIG1lYW5zIGNvbXB1dGluZyB0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuIHRoZSBnaXZlbiB0d28gY29tbWl0cy4KKworTW9yZSBnZW5lcmFsbHksIGFtb25nIHRoZSB0d28gY29tbWl0cyB0byBjb21wdXRlIHRoZSBtZXJnZSBiYXNlIGZyb20sCitvbmUgaXMgc3BlY2lmaWVkIGJ5IHRoZSBmaXJzdCBjb21taXQgYXJndW1lbnQgb24gdGhlIGNvbW1hbmQgbGluZTsKK3RoZSBvdGhlciBjb21taXQgaXMgYSAocG9zc2libHkgaHlwb3RoZXRpY2FsKSBjb21taXQgdGhhdCBpcyBhIG1lcmdlCithY3Jvc3MgYWxsIHRoZSByZW1haW5pbmcgY29tbWl0cyBvbiB0aGUgY29tbWFuZCBsaW5lLgorCitBcyBhIGNvbnNlcXVlbmNlLCB0aGUgJ21lcmdlIGJhc2UnIGlzIG5vdCBuZWNlc3NhcmlseSBjb250YWluZWQgaW4gZWFjaCBvZiB0aGUKK2NvbW1pdCBhcmd1bWVudHMgaWYgbW9yZSB0aGFuIHR3byBjb21taXRzIGFyZSBzcGVjaWZpZWQuIFRoaXMgaXMgZGlmZmVyZW50Citmcm9tIGxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdIHdoZW4gdXNlZCB3aXRoIHRoZSBgLS1tZXJnZS1iYXNlYCBvcHRpb24uCisKKy0tb2N0b3B1czo6CisJQ29tcHV0ZSB0aGUgYmVzdCBjb21tb24gYW5jZXN0b3JzIG9mIGFsbCBzdXBwbGllZCBjb21taXRzLAorCWluIHByZXBhcmF0aW9uIGZvciBhbiBuLXdheSBtZXJnZS4gIFRoaXMgbWltaWNzIHRoZSBiZWhhdmlvcgorCW9mICdnaXQgc2hvdy1icmFuY2ggLS1tZXJnZS1iYXNlJy4KKworLS1pbmRlcGVuZGVudDo6CisJSW5zdGVhZCBvZiBwcmludGluZyBtZXJnZSBiYXNlcywgcHJpbnQgYSBtaW5pbWFsIHN1YnNldCBvZgorCXRoZSBzdXBwbGllZCBjb21taXRzIHdpdGggdGhlIHNhbWUgYW5jZXN0b3JzLiAgSW4gb3RoZXIgd29yZHMsCisJYW1vbmcgdGhlIGNvbW1pdHMgZ2l2ZW4sIGxpc3QgdGhvc2Ugd2hpY2ggY2Fubm90IGJlIHJlYWNoZWQKKwlmcm9tIGFueSBvdGhlci4gIFRoaXMgbWltaWNzIHRoZSBiZWhhdmlvciBvZiAnZ2l0IHNob3ctYnJhbmNoCisJLS1pbmRlcGVuZGVudCcuCisKKy0taXMtYW5jZXN0b3I6OgorCUNoZWNrIGlmIHRoZSBmaXJzdCA8Y29tbWl0PiBpcyBhbiBhbmNlc3RvciBvZiB0aGUgc2Vjb25kIDxjb21taXQ+LAorCWFuZCBleGl0IHdpdGggc3RhdHVzIDAgaWYgdHJ1ZSwgb3Igd2l0aCBzdGF0dXMgMSBpZiBub3QuCisJRXJyb3JzIGFyZSBzaWduYWxlZCBieSBhIG5vbi16ZXJvIHN0YXR1cyB0aGF0IGlzIG5vdCAxLgorCistLWZvcmstcG9pbnQ6OgorCUZpbmQgdGhlIHBvaW50IGF0IHdoaWNoIGEgYnJhbmNoIChvciBhbnkgaGlzdG9yeSB0aGF0IGxlYWRzCisJdG8gPGNvbW1pdD4pIGZvcmtlZCBmcm9tIGFub3RoZXIgYnJhbmNoIChvciBhbnkgcmVmZXJlbmNlKQorCTxyZWY+LiBUaGlzIGRvZXMgbm90IGp1c3QgbG9vayBmb3IgdGhlIGNvbW1vbiBhbmNlc3RvciBvZgorCXRoZSB0d28gY29tbWl0cywgYnV0IGFsc28gdGFrZXMgaW50byBhY2NvdW50IHRoZSByZWZsb2cgb2YKKwk8cmVmPiB0byBzZWUgaWYgdGhlIGhpc3RvcnkgbGVhZGluZyB0byA8Y29tbWl0PiBmb3JrZWQgZnJvbQorCWFuIGVhcmxpZXIgaW5jYXJuYXRpb24gb2YgdGhlIGJyYW5jaCA8cmVmPiAoc2VlIGRpc2N1c3Npb24KKwlvbiB0aGlzIG1vZGUgYmVsb3cpLgorCitPUFRJT05TCistLS0tLS0tCistYTo6CistLWFsbDo6CisJT3V0cHV0IGFsbCBtZXJnZSBiYXNlcyBmb3IgdGhlIGNvbW1pdHMsIGluc3RlYWQgb2YganVzdCBvbmUuCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworR2l2ZW4gdHdvIGNvbW1pdHMgJ0EnIGFuZCAnQicsIGBnaXQgbWVyZ2UtYmFzZSBBIEJgIHdpbGwgb3V0cHV0IGEgY29tbWl0Cit3aGljaCBpcyByZWFjaGFibGUgZnJvbSBib3RoICdBJyBhbmQgJ0InIHRocm91Z2ggdGhlIHBhcmVudCByZWxhdGlvbnNoaXAuCisKK0ZvciBleGFtcGxlLCB3aXRoIHRoaXMgdG9wb2xvZ3k6CisKKwkJIG8tLS1vLS0tby0tLUIKKwkJLworCS0tLW8tLS0xLS0tby0tLW8tLS1vLS0tQQorCit0aGUgbWVyZ2UgYmFzZSBiZXR3ZWVuICdBJyBhbmQgJ0InIGlzICcxJy4KKworR2l2ZW4gdGhyZWUgY29tbWl0cyAnQScsICdCJyBhbmQgJ0MnLCBgZ2l0IG1lcmdlLWJhc2UgQSBCIENgIHdpbGwgY29tcHV0ZSB0aGUKK21lcmdlIGJhc2UgYmV0d2VlbiAnQScgYW5kIGEgaHlwb3RoZXRpY2FsIGNvbW1pdCAnTScsIHdoaWNoIGlzIGEgbWVyZ2UKK2JldHdlZW4gJ0InIGFuZCAnQycuICBGb3IgZXhhbXBsZSwgd2l0aCB0aGlzIHRvcG9sb2d5OgorCisJICAgICAgIG8tLS1vLS0tby0tLW8tLS1DCisJICAgICAgLworCSAgICAgLyAgIG8tLS1vLS0tby0tLUIKKwkgICAgLyAgIC8KKwktLS0yLS0tMS0tLW8tLS1vLS0tby0tLUEKKwordGhlIHJlc3VsdCBvZiBgZ2l0IG1lcmdlLWJhc2UgQSBCIENgIGlzICcxJy4gIFRoaXMgaXMgYmVjYXVzZSB0aGUKK2VxdWl2YWxlbnQgdG9wb2xvZ3kgd2l0aCBhIG1lcmdlIGNvbW1pdCAnTScgYmV0d2VlbiAnQicgYW5kICdDJyBpczoKKworCisJICAgICAgIG8tLS1vLS0tby0tLW8tLS1vCisJICAgICAgLyAgICAgICAgICAgICAgICAgXAorCSAgICAgLyAgIG8tLS1vLS0tby0tLW8tLS1NCisJICAgIC8gICAvCisJLS0tMi0tLTEtLS1vLS0tby0tLW8tLS1BCisKK2FuZCB0aGUgcmVzdWx0IG9mIGBnaXQgbWVyZ2UtYmFzZSBBIE1gIGlzICcxJy4gIENvbW1pdCAnMicgaXMgYWxzbyBhCitjb21tb24gYW5jZXN0b3IgYmV0d2VlbiAnQScgYW5kICdNJywgYnV0ICcxJyBpcyBhIGJldHRlciBjb21tb24gYW5jZXN0b3IsCitiZWNhdXNlICcyJyBpcyBhbiBhbmNlc3RvciBvZiAnMScuICBIZW5jZSwgJzInIGlzIG5vdCBhIG1lcmdlIGJhc2UuCisKK1RoZSByZXN1bHQgb2YgYGdpdCBtZXJnZS1iYXNlIC0tb2N0b3B1cyBBIEIgQ2AgaXMgJzInLCBiZWNhdXNlICcyJyBpcwordGhlIGJlc3QgY29tbW9uIGFuY2VzdG9yIG9mIGFsbCBjb21taXRzLgorCitXaGVuIHRoZSBoaXN0b3J5IGludm9sdmVzIGNyaXNzLWNyb3NzIG1lcmdlcywgdGhlcmUgY2FuIGJlIG1vcmUgdGhhbiBvbmUKKydiZXN0JyBjb21tb24gYW5jZXN0b3IgZm9yIHR3byBjb21taXRzLiAgRm9yIGV4YW1wbGUsIHdpdGggdGhpcyB0b3BvbG9neToKKworICAgICAgIC0tLTEtLS1vLS0tQQorCSAgIFwgLworCSAgICBYCisJICAgLyBcCisgICAgICAgLS0tMi0tLW8tLS1vLS0tQgorCitib3RoICcxJyBhbmQgJzInIGFyZSBtZXJnZS1iYXNlcyBvZiBBIGFuZCBCLiAgTmVpdGhlciBvbmUgaXMgYmV0dGVyIHRoYW4KK3RoZSBvdGhlciAoYm90aCBhcmUgJ2Jlc3QnIG1lcmdlIGJhc2VzKS4gIFdoZW4gdGhlIGAtLWFsbGAgb3B0aW9uIGlzIG5vdCBnaXZlbiwKK2l0IGlzIHVuc3BlY2lmaWVkIHdoaWNoIGJlc3Qgb25lIGlzIG91dHB1dC4KKworQSBjb21tb24gaWRpb20gdG8gY2hlY2sgImZhc3QtZm9yd2FyZC1uZXNzIiBiZXR3ZWVuIHR3byBjb21taXRzIEEKK2FuZCBCIGlzIChvciBhdCBsZWFzdCB1c2VkIHRvIGJlKSB0byBjb21wdXRlIHRoZSBtZXJnZSBiYXNlIGJldHdlZW4KK0EgYW5kIEIsIGFuZCBjaGVjayBpZiBpdCBpcyB0aGUgc2FtZSBhcyBBLCBpbiB3aGljaCBjYXNlLCBBIGlzIGFuCithbmNlc3RvciBvZiBCLiAgWW91IHdpbGwgc2VlIHRoaXMgaWRpb20gdXNlZCBvZnRlbiBpbiBvbGRlciBzY3JpcHRzLgorCisJQT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQSkKKwlpZiB0ZXN0ICIkQSIgPSAiJChnaXQgbWVyZ2UtYmFzZSBBIEIpIgorCXRoZW4KKwkJLi4uIEEgaXMgYW4gYW5jZXN0b3Igb2YgQiAuLi4KKwlmaQorCitJbiBtb2Rlcm4gZ2l0LCB5b3UgY2FuIHNheSB0aGlzIGluIGEgbW9yZSBkaXJlY3Qgd2F5OgorCisJaWYgZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciBBIEIKKwl0aGVuCisJCS4uLiBBIGlzIGFuIGFuY2VzdG9yIG9mIEIgLi4uCisJZmkKKworaW5zdGVhZC4KKworRGlzY3Vzc2lvbiBvbiBmb3JrLXBvaW50IG1vZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIHdvcmtpbmcgb24gdGhlIGB0b3BpY2AgYnJhbmNoIGNyZWF0ZWQgd2l0aCBgZ2l0IGNoZWNrb3V0IC1iCit0b3BpYyBvcmlnaW4vbWFzdGVyYCwgdGhlIGhpc3Rvcnkgb2YgcmVtb3RlLXRyYWNraW5nIGJyYW5jaAorYG9yaWdpbi9tYXN0ZXJgIG1heSBoYXZlIGJlZW4gcmV3b3VuZCBhbmQgcmVidWlsdCwgbGVhZGluZyB0byBhCitoaXN0b3J5IG9mIHRoaXMgc2hhcGU6CisKKwkJCSBvLS0tQjEKKwkJCS8KKwktLS1vLS0tby0tLUIyLS1vLS0tby0tLW8tLS1CIChvcmlnaW4vbWFzdGVyKQorCQlcCisJCSBCMworCQkgIFwKKwkJICAgRGVyaXZlZCAodG9waWMpCisKK3doZXJlIGBvcmlnaW4vbWFzdGVyYCB1c2VkIHRvIHBvaW50IGF0IGNvbW1pdHMgQjMsIEIyLCBCMSBhbmQgbm93IGl0Citwb2ludHMgYXQgQiwgYW5kIHlvdXIgYHRvcGljYCBicmFuY2ggd2FzIHN0YXJ0ZWQgb24gdG9wIG9mIGl0IGJhY2sKK3doZW4gYG9yaWdpbi9tYXN0ZXJgIHdhcyBhdCBCMy4gVGhpcyBtb2RlIHVzZXMgdGhlIHJlZmxvZyBvZgorYG9yaWdpbi9tYXN0ZXJgIHRvIGZpbmQgQjMgYXMgdGhlIGZvcmsgcG9pbnQsIHNvIHRoYXQgdGhlIGB0b3BpY2AKK2NhbiBiZSByZWJhc2VkIG9uIHRvcCBvZiB0aGUgdXBkYXRlZCBgb3JpZ2luL21hc3RlcmAgYnk6CisKKyAgICAkIGZvcmtfcG9pbnQ9JChnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgb3JpZ2luL21hc3RlciB0b3BpYykKKyAgICAkIGdpdCByZWJhc2UgLS1vbnRvIG9yaWdpbi9tYXN0ZXIgJGZvcmtfcG9pbnQgdG9waWMKKworCitTZWUgYWxzbworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXJldi1saXN0WzFdLAorbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0sCitsaW5rZ2l0OmdpdC1tZXJnZVsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtZmlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJmYzEyZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWZpbGUudHh0CkBAIC0wLDAgKzEsOTQgQEAKK2dpdC1tZXJnZS1maWxlKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWVyZ2UtZmlsZSAtIFJ1biBhIHRocmVlLXdheSBmaWxlIG1lcmdlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG1lcmdlLWZpbGUnIFstTCA8Y3VycmVudC1uYW1lPiBbLUwgPGJhc2UtbmFtZT4gWy1MIDxvdGhlci1uYW1lPl1dXQorCVstLW91cnN8LS10aGVpcnN8LS11bmlvbl0gWy1wfC0tc3Rkb3V0XSBbLXF8LS1xdWlldF0gWy0tbWFya2VyLXNpemU9PG4+XQorCVstLVtuby1dZGlmZjNdIDxjdXJyZW50LWZpbGU+IDxiYXNlLWZpbGU+IDxvdGhlci1maWxlPgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorJ2dpdCBtZXJnZS1maWxlJyBpbmNvcnBvcmF0ZXMgYWxsIGNoYW5nZXMgdGhhdCBsZWFkIGZyb20gdGhlIGA8YmFzZS1maWxlPmAKK3RvIGA8b3RoZXItZmlsZT5gIGludG8gYDxjdXJyZW50LWZpbGU+YC4gVGhlIHJlc3VsdCBvcmRpbmFyaWx5IGdvZXMgaW50bworYDxjdXJyZW50LWZpbGU+YC4gJ2dpdCBtZXJnZS1maWxlJyBpcyB1c2VmdWwgZm9yIGNvbWJpbmluZyBzZXBhcmF0ZSBjaGFuZ2VzCit0byBhbiBvcmlnaW5hbC4gU3VwcG9zZSBgPGJhc2UtZmlsZT5gIGlzIHRoZSBvcmlnaW5hbCwgYW5kIGJvdGgKK2A8Y3VycmVudC1maWxlPmAgYW5kIGA8b3RoZXItZmlsZT5gIGFyZSBtb2RpZmljYXRpb25zIG9mIGA8YmFzZS1maWxlPmAsCit0aGVuICdnaXQgbWVyZ2UtZmlsZScgY29tYmluZXMgYm90aCBjaGFuZ2VzLgorCitBIGNvbmZsaWN0IG9jY3VycyBpZiBib3RoIGA8Y3VycmVudC1maWxlPmAgYW5kIGA8b3RoZXItZmlsZT5gIGhhdmUgY2hhbmdlcworaW4gYSBjb21tb24gc2VnbWVudCBvZiBsaW5lcy4gSWYgYSBjb25mbGljdCBpcyBmb3VuZCwgJ2dpdCBtZXJnZS1maWxlJworbm9ybWFsbHkgb3V0cHV0cyBhIHdhcm5pbmcgYW5kIGJyYWNrZXRzIHRoZSBjb25mbGljdCB3aXRoIGxpbmVzIGNvbnRhaW5pbmcKKzw8PDw8PDwgYW5kID4+Pj4+Pj4gbWFya2Vycy4gQSB0eXBpY2FsIGNvbmZsaWN0IHdpbGwgbG9vayBsaWtlIHRoaXM6CisKKwk8PDw8PDw8IEEKKwlsaW5lcyBpbiBmaWxlIEEKKwk9PT09PT09CisJbGluZXMgaW4gZmlsZSBCCisJPj4+Pj4+PiBCCisKK0lmIHRoZXJlIGFyZSBjb25mbGljdHMsIHRoZSB1c2VyIHNob3VsZCBlZGl0IHRoZSByZXN1bHQgYW5kIGRlbGV0ZSBvbmUgb2YKK3RoZSBhbHRlcm5hdGl2ZXMuICBXaGVuIGAtLW91cnNgLCBgLS10aGVpcnNgLCBvciBgLS11bmlvbmAgb3B0aW9uIGlzIGluIGVmZmVjdCwKK2hvd2V2ZXIsIHRoZXNlIGNvbmZsaWN0cyBhcmUgcmVzb2x2ZWQgZmF2b3VyaW5nIGxpbmVzIGZyb20gYDxjdXJyZW50LWZpbGU+YCwKK2xpbmVzIGZyb20gYDxvdGhlci1maWxlPmAsIG9yIGxpbmVzIGZyb20gYm90aCByZXNwZWN0aXZlbHkuICBUaGUgbGVuZ3RoIG9mIHRoZQorY29uZmxpY3QgbWFya2VycyBjYW4gYmUgZ2l2ZW4gd2l0aCB0aGUgYC0tbWFya2VyLXNpemVgIG9wdGlvbi4KKworVGhlIGV4aXQgdmFsdWUgb2YgdGhpcyBwcm9ncmFtIGlzIG5lZ2F0aXZlIG9uIGVycm9yLCBhbmQgdGhlIG51bWJlciBvZgorY29uZmxpY3RzIG90aGVyd2lzZS4gSWYgdGhlIG1lcmdlIHdhcyBjbGVhbiwgdGhlIGV4aXQgdmFsdWUgaXMgMC4KKworJ2dpdCBtZXJnZS1maWxlJyBpcyBkZXNpZ25lZCB0byBiZSBhIG1pbmltYWwgY2xvbmUgb2YgUkNTICdtZXJnZSc7IHRoYXQgaXMsIGl0CitpbXBsZW1lbnRzIGFsbCBvZiBSQ1MgJ21lcmdlJydzIGZ1bmN0aW9uYWxpdHkgd2hpY2ggaXMgbmVlZGVkIGJ5CitsaW5rZ2l0OmdpdFsxXS4KKworCitPUFRJT05TCistLS0tLS0tCisKKy1MIDxsYWJlbD46OgorCVRoaXMgb3B0aW9uIG1heSBiZSBnaXZlbiB1cCB0byB0aHJlZSB0aW1lcywgYW5kCisJc3BlY2lmaWVzIGxhYmVscyB0byBiZSB1c2VkIGluIHBsYWNlIG9mIHRoZQorCWNvcnJlc3BvbmRpbmcgZmlsZSBuYW1lcyBpbiBjb25mbGljdCByZXBvcnRzLiBUaGF0IGlzLAorCWBnaXQgbWVyZ2UtZmlsZSAtTCB4IC1MIHkgLUwgeiBhIGIgY2AgZ2VuZXJhdGVzIG91dHB1dCB0aGF0CisJbG9va3MgbGlrZSBpdCBjYW1lIGZyb20gZmlsZXMgeCwgeSBhbmQgeiBpbnN0ZWFkIG9mCisJZnJvbSBmaWxlcyBhLCBiIGFuZCBjLgorCistcDo6CisJU2VuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nCisJYDxjdXJyZW50LWZpbGU+YC4KKworLXE6OgorCVF1aWV0OyBkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMuCisKKy0tZGlmZjM6OgorCVNob3cgY29uZmxpY3RzIGluICJkaWZmMyIgc3R5bGUuCisKKy0tb3Vyczo6CistLXRoZWlyczo6CistLXVuaW9uOjoKKwlJbnN0ZWFkIG9mIGxlYXZpbmcgY29uZmxpY3RzIGluIHRoZSBmaWxlLCByZXNvbHZlIGNvbmZsaWN0cworCWZhdm91cmluZyBvdXIgKG9yIHRoZWlyIG9yIGJvdGgpIHNpZGUgb2YgdGhlIGxpbmVzLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCitgZ2l0IG1lcmdlLWZpbGUgUkVBRE1FLm15IFJFQURNRSBSRUFETUUudXBzdHJlYW1gOjoKKworCWNvbWJpbmVzIHRoZSBjaGFuZ2VzIG9mIFJFQURNRS5teSBhbmQgUkVBRE1FLnVwc3RyZWFtIHNpbmNlIFJFQURNRSwKKwl0cmllcyB0byBtZXJnZSB0aGVtIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBpbnRvIFJFQURNRS5teS4KKworYGdpdCBtZXJnZS1maWxlIC1MIGEgLUwgYiAtTCBjIHRtcC9hMTIzIHRtcC9iMjM0IHRtcC9jMzQ1YDo6CisKKwltZXJnZXMgdG1wL2ExMjMgYW5kIHRtcC9jMzQ1IHdpdGggdGhlIGJhc2UgdG1wL2IyMzQsIGJ1dCB1c2VzIGxhYmVscworCWBhYCBhbmQgYGNgIGluc3RlYWQgb2YgYHRtcC9hMTIzYCBhbmQgYHRtcC9jMzQ1YC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI2NzZmYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLWluZGV4LnR4dApAQCAtMCwwICsxLDc5IEBACitnaXQtbWVyZ2UtaW5kZXgoMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWVyZ2UtaW5kZXggLSBSdW4gYSBtZXJnZSBmb3IgZmlsZXMgbmVlZGluZyBtZXJnaW5nCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG1lcmdlLWluZGV4JyBbLW9dIFstcV0gPG1lcmdlLXByb2dyYW0+ICgtYSB8IFstLV0gPGZpbGU+KikKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGxvb2tzIHVwIHRoZSA8ZmlsZT4ocykgaW4gdGhlIGluZGV4IGFuZCwgaWYgdGhlcmUgYXJlIGFueSBtZXJnZQorZW50cmllcywgcGFzc2VzIHRoZSBTSEEtMSBoYXNoIGZvciB0aG9zZSBmaWxlcyBhcyBhcmd1bWVudHMgMSwgMiwgMyAoZW1wdHkKK2FyZ3VtZW50IGlmIG5vIGZpbGUpLCBhbmQgPGZpbGU+IGFzIGFyZ3VtZW50IDQuICBGaWxlIG1vZGVzIGZvciB0aGUgdGhyZWUKK2ZpbGVzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIDUsIDYgYW5kIDcuCisKK09QVElPTlMKKy0tLS0tLS0KK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KKworLWE6OgorCVJ1biBtZXJnZSBhZ2FpbnN0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXggdGhhdCBuZWVkIG1lcmdpbmcuCisKKy1vOjoKKwlJbnN0ZWFkIG9mIHN0b3BwaW5nIGF0IHRoZSBmaXJzdCBmYWlsZWQgbWVyZ2UsIGRvIGFsbCBvZiB0aGVtCisJaW4gb25lIHNob3QgLSBjb250aW51ZSB3aXRoIG1lcmdpbmcgZXZlbiB3aGVuIHByZXZpb3VzIG1lcmdlcworCXJldHVybmVkIGVycm9ycywgYW5kIG9ubHkgcmV0dXJuIHRoZSBlcnJvciBjb2RlIGFmdGVyIGFsbCB0aGUKKwltZXJnZXMuCisKKy1xOjoKKwlEbyBub3QgY29tcGxhaW4gYWJvdXQgYSBmYWlsZWQgbWVyZ2UgcHJvZ3JhbSAoYSBtZXJnZSBwcm9ncmFtCisJZmFpbHVyZSB1c3VhbGx5IGluZGljYXRlcyBjb25mbGljdHMgZHVyaW5nIHRoZSBtZXJnZSkuIFRoaXMgaXMgZm9yCisJcG9yY2VsYWlucyB3aGljaCBtaWdodCB3YW50IHRvIGVtaXQgY3VzdG9tIG1lc3NhZ2VzLgorCitJZiAnZ2l0IG1lcmdlLWluZGV4JyBpcyBjYWxsZWQgd2l0aCBtdWx0aXBsZSA8ZmlsZT5zIChvciAtYSkgdGhlbiBpdAorcHJvY2Vzc2VzIHRoZW0gaW4gdHVybiBvbmx5IHN0b3BwaW5nIGlmIG1lcmdlIHJldHVybnMgYSBub24temVybyBleGl0Citjb2RlLgorCitUeXBpY2FsbHkgdGhpcyBpcyBydW4gd2l0aCBhIHNjcmlwdCBjYWxsaW5nIEdpdCdzIGltaXRhdGlvbiBvZgordGhlICdtZXJnZScgY29tbWFuZCBmcm9tIHRoZSBSQ1MgcGFja2FnZS4KKworQSBzYW1wbGUgc2NyaXB0IGNhbGxlZCAnZ2l0IG1lcmdlLW9uZS1maWxlJyBpcyBpbmNsdWRlZCBpbiB0aGUKK2Rpc3RyaWJ1dGlvbi4KKworQUxFUlQgQUxFUlQgQUxFUlQhIFRoZSBHaXQgIm1lcmdlIG9iamVjdCBvcmRlciIgaXMgZGlmZmVyZW50IGZyb20gdGhlCitSQ1MgJ21lcmdlJyBwcm9ncmFtIG1lcmdlIG9iamVjdCBvcmRlci4gSW4gdGhlIGFib3ZlIG9yZGVyaW5nLCB0aGUKK29yaWdpbmFsIGlzIGZpcnN0LiBCdXQgdGhlIGFyZ3VtZW50IG9yZGVyIHRvIHRoZSAzLXdheSBtZXJnZSBwcm9ncmFtCisnbWVyZ2UnIGlzIHRvIGhhdmUgdGhlIG9yaWdpbmFsIGluIHRoZSBtaWRkbGUuIERvbid0IGFzayBtZSB3aHkuCisKK0V4YW1wbGVzOgorCisgIHRvcnZhbGRzQHBwYzk3MDp+L21lcmdlLXRlc3Q+IGdpdCBtZXJnZS1pbmRleCBjYXQgTU0KKyAgVGhpcyBpcyBNTSBmcm9tIHRoZSBvcmlnaW5hbCB0cmVlLgkJCSMgb3JpZ2luYWwKKyAgVGhpcyBpcyBtb2RpZmllZCBNTSBpbiB0aGUgYnJhbmNoIEEuCQkJIyBtZXJnZTEKKyAgVGhpcyBpcyBtb2RpZmllZCBNTSBpbiB0aGUgYnJhbmNoIEIuCQkJIyBtZXJnZTIKKyAgVGhpcyBpcyBtb2RpZmllZCBNTSBpbiB0aGUgYnJhbmNoIEIuCQkJIyBjdXJyZW50IGNvbnRlbnRzCisKK29yCisKKyAgdG9ydmFsZHNAcHBjOTcwOn4vbWVyZ2UtdGVzdD4gZ2l0IG1lcmdlLWluZGV4IGNhdCBBQSBNTQorICBjYXQ6IDogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQorICBUaGlzIGlzIGFkZGVkIEFBIGluIHRoZSBicmFuY2ggQS4KKyAgVGhpcyBpcyBhZGRlZCBBQSBpbiB0aGUgYnJhbmNoIEIuCisgIFRoaXMgaXMgYWRkZWQgQUEgaW4gdGhlIGJyYW5jaCBCLgorICBmYXRhbDogbWVyZ2UgcHJvZ3JhbSBmYWlsZWQKKword2hlcmUgdGhlIGxhdHRlciBleGFtcGxlIHNob3dzIGhvdyAnZ2l0IG1lcmdlLWluZGV4JyB3aWxsIHN0b3AgdHJ5aW5nIHRvCittZXJnZSBvbmNlIGFueXRoaW5nIGhhcyByZXR1cm5lZCBhbiBlcnJvciAoaS5lLiwgYGNhdGAgcmV0dXJuZWQgYW4gZXJyb3IKK2ZvciB0aGUgQUEgZmlsZSwgYmVjYXVzZSBpdCBkaWRuJ3QgZXhpc3QgaW4gdGhlIG9yaWdpbmFsLCBhbmQgdGh1cworJ2dpdCBtZXJnZS1pbmRleCcgZGlkbid0IGV2ZW4gdHJ5IHRvIG1lcmdlIHRoZSBNTSB0aGluZykuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2Utb25lLWZpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZTgwM2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS1vbmUtZmlsZS50eHQKQEAgLTAsMCArMSwyMSBAQAorZ2l0LW1lcmdlLW9uZS1maWxlKDEpCis9PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdlLW9uZS1maWxlIC0gVGhlIHN0YW5kYXJkIGhlbHBlciBwcm9ncmFtIHRvIHVzZSB3aXRoIGdpdC1tZXJnZS1pbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZS1vbmUtZmlsZScKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGlzIHRoZSBzdGFuZGFyZCBoZWxwZXIgcHJvZ3JhbSB0byB1c2Ugd2l0aCAnZ2l0IG1lcmdlLWluZGV4JwordG8gcmVzb2x2ZSBhIG1lcmdlIGFmdGVyIHRoZSB0cml2aWFsIG1lcmdlIGRvbmUgd2l0aCAnZ2l0IHJlYWQtdHJlZSAtbScuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS10cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODczMWMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UtdHJlZS50eHQKQEAgLTAsMCArMSwyOSBAQAorZ2l0LW1lcmdlLXRyZWUoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1tZXJnZS10cmVlIC0gU2hvdyB0aHJlZS13YXkgbWVyZ2Ugd2l0aG91dCB0b3VjaGluZyBpbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBtZXJnZS10cmVlJyA8YmFzZS10cmVlPiA8YnJhbmNoMT4gPGJyYW5jaDI+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgdGhyZWUgdHJlZS1pc2gsIGFuZCBvdXRwdXQgdHJpdmlhbCBtZXJnZSByZXN1bHRzIGFuZAorY29uZmxpY3Rpbmcgc3RhZ2VzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICBUaGlzIGlzIHNpbWlsYXIgdG8KK3doYXQgdGhyZWUtd2F5ICdnaXQgcmVhZC10cmVlIC1tJyBkb2VzLCBidXQgaW5zdGVhZCBvZiBzdG9yaW5nIHRoZQorcmVzdWx0cyBpbiB0aGUgaW5kZXgsIHRoZSBjb21tYW5kIG91dHB1dHMgdGhlIGVudHJpZXMgdG8gdGhlCitzdGFuZGFyZCBvdXRwdXQuCisKK1RoaXMgaXMgbWVhbnQgdG8gYmUgdXNlZCBieSBoaWdoZXIgbGV2ZWwgc2NyaXB0cyB0byBjb21wdXRlCittZXJnZSByZXN1bHRzIG91dHNpZGUgb2YgdGhlIGluZGV4LCBhbmQgc3R1ZmYgdGhlIHJlc3VsdHMgYmFjayBpbnRvIHRoZQoraW5kZXguICBGb3IgdGhpcyByZWFzb24sIHRoZSBvdXRwdXQgZnJvbSB0aGUgY29tbWFuZCBvbWl0cworZW50cmllcyB0aGF0IG1hdGNoIHRoZSA8YnJhbmNoMT4gdHJlZS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdmNzI5NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dApAQCAtMCwwICsxLDM1NCBAQAorZ2l0LW1lcmdlKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW1lcmdlIC0gSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWVyZ2UnIFstbl0gWy0tc3RhdF0gWy0tbm8tY29tbWl0XSBbLS1zcXVhc2hdIFstLVtuby1dZWRpdF0KKwlbLXMgPHN0cmF0ZWd5Pl0gWy1YIDxzdHJhdGVneS1vcHRpb24+XSBbLVNbPGtleWlkPl1dCisJWy0tW25vLV1yZXJlcmUtYXV0b3VwZGF0ZV0gWy1tIDxtc2c+XSBbPGNvbW1pdD4uLi5dCisnZ2l0IG1lcmdlJyA8bXNnPiBIRUFEIDxjb21taXQ+Li4uCisnZ2l0IG1lcmdlJyAtLWFib3J0CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW5jb3Jwb3JhdGVzIGNoYW5nZXMgZnJvbSB0aGUgbmFtZWQgY29tbWl0cyAoc2luY2UgdGhlIHRpbWUgdGhlaXIKK2hpc3RvcmllcyBkaXZlcmdlZCBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCkgaW50byB0aGUgY3VycmVudAorYnJhbmNoLiAgVGhpcyBjb21tYW5kIGlzIHVzZWQgYnkgJ2dpdCBwdWxsJyB0byBpbmNvcnBvcmF0ZSBjaGFuZ2VzCitmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSBhbmQgY2FuIGJlIHVzZWQgYnkgaGFuZCB0byBtZXJnZSBjaGFuZ2VzCitmcm9tIG9uZSBicmFuY2ggaW50byBhbm90aGVyLgorCitBc3N1bWUgdGhlIGZvbGxvd2luZyBoaXN0b3J5IGV4aXN0cyBhbmQgdGhlIGN1cnJlbnQgYnJhbmNoIGlzCisiYG1hc3RlcmAiOgorCistLS0tLS0tLS0tLS0KKwkgIEEtLS1CLS0tQyB0b3BpYworCSAvCisgICAgRC0tLUUtLS1GLS0tRyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGVuICJgZ2l0IG1lcmdlIHRvcGljYCIgd2lsbCByZXBsYXkgdGhlIGNoYW5nZXMgbWFkZSBvbiB0aGUKK2B0b3BpY2AgYnJhbmNoIHNpbmNlIGl0IGRpdmVyZ2VkIGZyb20gYG1hc3RlcmAgKGkuZS4sIGBFYCkgdW50aWwKK2l0cyBjdXJyZW50IGNvbW1pdCAoYENgKSBvbiB0b3Agb2YgYG1hc3RlcmAsIGFuZCByZWNvcmQgdGhlIHJlc3VsdAoraW4gYSBuZXcgY29tbWl0IGFsb25nIHdpdGggdGhlIG5hbWVzIG9mIHRoZSB0d28gcGFyZW50IGNvbW1pdHMgYW5kCithIGxvZyBtZXNzYWdlIGZyb20gdGhlIHVzZXIgZGVzY3JpYmluZyB0aGUgY2hhbmdlcy4KKworLS0tLS0tLS0tLS0tCisJICBBLS0tQi0tLUMgdG9waWMKKwkgLyAgICAgICAgIFwKKyAgICBELS0tRS0tLUYtLS1HLS0tSCBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGUgc2Vjb25kIHN5bnRheCAoPG1zZz4gYEhFQURgIDxjb21taXQ+Li4uKSBpcyBzdXBwb3J0ZWQgZm9yCitoaXN0b3JpY2FsIHJlYXNvbnMuICBEbyBub3QgdXNlIGl0IGZyb20gdGhlIGNvbW1hbmQgbGluZSBvciBpbgorbmV3IHNjcmlwdHMuICBJdCBpcyB0aGUgc2FtZSBhcyBgZ2l0IG1lcmdlIC1tIDxtc2c+IDxjb21taXQ+Li4uYC4KKworVGhlIHRoaXJkIHN5bnRheCAoImBnaXQgbWVyZ2UgLS1hYm9ydGAiKSBjYW4gb25seSBiZSBydW4gYWZ0ZXIgdGhlCittZXJnZSBoYXMgcmVzdWx0ZWQgaW4gY29uZmxpY3RzLiAnZ2l0IG1lcmdlIC0tYWJvcnQnIHdpbGwgYWJvcnQgdGhlCittZXJnZSBwcm9jZXNzIGFuZCB0cnkgdG8gcmVjb25zdHJ1Y3QgdGhlIHByZS1tZXJnZSBzdGF0ZS4gSG93ZXZlciwKK2lmIHRoZXJlIHdlcmUgdW5jb21taXR0ZWQgY2hhbmdlcyB3aGVuIHRoZSBtZXJnZSBzdGFydGVkIChhbmQKK2VzcGVjaWFsbHkgaWYgdGhvc2UgY2hhbmdlcyB3ZXJlIGZ1cnRoZXIgbW9kaWZpZWQgYWZ0ZXIgdGhlIG1lcmdlCit3YXMgc3RhcnRlZCksICdnaXQgbWVyZ2UgLS1hYm9ydCcgd2lsbCBpbiBzb21lIGNhc2VzIGJlIHVuYWJsZSB0bworcmVjb25zdHJ1Y3QgdGhlIG9yaWdpbmFsIChwcmUtbWVyZ2UpIGNoYW5nZXMuIFRoZXJlZm9yZToKKworKldhcm5pbmcqOiBSdW5uaW5nICdnaXQgbWVyZ2UnIHdpdGggbm9uLXRyaXZpYWwgdW5jb21taXR0ZWQgY2hhbmdlcyBpcworZGlzY291cmFnZWQ6IHdoaWxlIHBvc3NpYmxlLCBpdCBtYXkgbGVhdmUgeW91IGluIGEgc3RhdGUgdGhhdCBpcyBoYXJkIHRvCitiYWNrIG91dCBvZiBpbiB0aGUgY2FzZSBvZiBhIGNvbmZsaWN0LgorCisKK09QVElPTlMKKy0tLS0tLS0KK2luY2x1ZGU6Om1lcmdlLW9wdGlvbnMudHh0W10KKworLVNbPGtleWlkPl06OgorLS1ncGctc2lnbls9PGtleWlkPl06OgorCUdQRy1zaWduIHRoZSByZXN1bHRpbmcgbWVyZ2UgY29tbWl0LiBUaGUgYGtleWlkYCBhcmd1bWVudCBpcworCW9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byB0aGUgY29tbWl0dGVyIGlkZW50aXR5OyBpZiBzcGVjaWZpZWQsCisJaXQgbXVzdCBiZSBzdHVjayB0byB0aGUgb3B0aW9uIHdpdGhvdXQgYSBzcGFjZS4KKworLW0gPG1zZz46OgorCVNldCB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gYmUgdXNlZCBmb3IgdGhlIG1lcmdlIGNvbW1pdCAoaW4KKwljYXNlIG9uZSBpcyBjcmVhdGVkKS4KKysKK0lmIGAtLWxvZ2AgaXMgc3BlY2lmaWVkLCBhIHNob3J0bG9nIG9mIHRoZSBjb21taXRzIGJlaW5nIG1lcmdlZAord2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UuCisrCitUaGUgJ2dpdCBmbXQtbWVyZ2UtbXNnJyBjb21tYW5kIGNhbiBiZQordXNlZCB0byBnaXZlIGEgZ29vZCBkZWZhdWx0IGZvciBhdXRvbWF0ZWQgJ2dpdCBtZXJnZScKK2ludm9jYXRpb25zLiBUaGUgYXV0b21hdGVkIG1lc3NhZ2UgY2FuIGluY2x1ZGUgdGhlIGJyYW5jaCBkZXNjcmlwdGlvbi4KKworLS1bbm8tXXJlcmVyZS1hdXRvdXBkYXRlOjoKKwlBbGxvdyB0aGUgcmVyZXJlIG1lY2hhbmlzbSB0byB1cGRhdGUgdGhlIGluZGV4IHdpdGggdGhlCisJcmVzdWx0IG9mIGF1dG8tY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZS4KKworLS1hYm9ydDo6CisJQWJvcnQgdGhlIGN1cnJlbnQgY29uZmxpY3QgcmVzb2x1dGlvbiBwcm9jZXNzLCBhbmQKKwl0cnkgdG8gcmVjb25zdHJ1Y3QgdGhlIHByZS1tZXJnZSBzdGF0ZS4KKysKK0lmIHRoZXJlIHdlcmUgdW5jb21taXR0ZWQgd29ya3RyZWUgY2hhbmdlcyBwcmVzZW50IHdoZW4gdGhlIG1lcmdlCitzdGFydGVkLCAnZ2l0IG1lcmdlIC0tYWJvcnQnIHdpbGwgaW4gc29tZSBjYXNlcyBiZSB1bmFibGUgdG8KK3JlY29uc3RydWN0IHRoZXNlIGNoYW5nZXMuIEl0IGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBhbHdheXMKK2NvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYmVmb3JlIHJ1bm5pbmcgJ2dpdCBtZXJnZScuCisrCisnZ2l0IG1lcmdlIC0tYWJvcnQnIGlzIGVxdWl2YWxlbnQgdG8gJ2dpdCByZXNldCAtLW1lcmdlJyB3aGVuCitgTUVSR0VfSEVBRGAgaXMgcHJlc2VudC4KKworPGNvbW1pdD4uLi46OgorCUNvbW1pdHMsIHVzdWFsbHkgb3RoZXIgYnJhbmNoIGhlYWRzLCB0byBtZXJnZSBpbnRvIG91ciBicmFuY2guCisJU3BlY2lmeWluZyBtb3JlIHRoYW4gb25lIGNvbW1pdCB3aWxsIGNyZWF0ZSBhIG1lcmdlIHdpdGgKKwltb3JlIHRoYW4gdHdvIHBhcmVudHMgKGFmZmVjdGlvbmF0ZWx5IGNhbGxlZCBhbiBPY3RvcHVzIG1lcmdlKS4KKysKK0lmIG5vIGNvbW1pdCBpcyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIG1lcmdlIHRoZSByZW1vdGUtdHJhY2tpbmcKK2JyYW5jaGVzIHRoYXQgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGFzIGl0cyB1cHN0cmVhbS4KK1NlZSBhbHNvIHRoZSBjb25maWd1cmF0aW9uIHNlY3Rpb24gb2YgdGhpcyBtYW51YWwgcGFnZS4KKysKK1doZW4gYEZFVENIX0hFQURgIChhbmQgbm8gb3RoZXIgY29tbWl0KSBpcyBzcGVjaWZpZWQsIHRoZSBicmFuY2hlcworcmVjb3JkZWQgaW4gdGhlIGAuZ2l0L0ZFVENIX0hFQURgIGZpbGUgYnkgdGhlIHByZXZpb3VzIGludm9jYXRpb24KK29mIGBnaXQgZmV0Y2hgIGZvciBtZXJnaW5nIGFyZSBtZXJnZWQgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLgorCisKK1BSRS1NRVJHRSBDSEVDS1MKKy0tLS0tLS0tLS0tLS0tLS0KKworQmVmb3JlIGFwcGx5aW5nIG91dHNpZGUgY2hhbmdlcywgeW91IHNob3VsZCBnZXQgeW91ciBvd24gd29yayBpbgorZ29vZCBzaGFwZSBhbmQgY29tbWl0dGVkIGxvY2FsbHksIHNvIGl0IHdpbGwgbm90IGJlIGNsb2JiZXJlZCBpZgordGhlcmUgYXJlIGNvbmZsaWN0cy4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0LXN0YXNoWzFdLgorJ2dpdCBwdWxsJyBhbmQgJ2dpdCBtZXJnZScgd2lsbCBzdG9wIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcgd2hlbgorbG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcyBvdmVybGFwIHdpdGggZmlsZXMgdGhhdCAnZ2l0IHB1bGwnLydnaXQKK21lcmdlJyBtYXkgbmVlZCB0byB1cGRhdGUuCisKK1RvIGF2b2lkIHJlY29yZGluZyB1bnJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgbWVyZ2UgY29tbWl0LAorJ2dpdCBwdWxsJyBhbmQgJ2dpdCBtZXJnZScgd2lsbCBhbHNvIGFib3J0IGlmIHRoZXJlIGFyZSBhbnkgY2hhbmdlcworcmVnaXN0ZXJlZCBpbiB0aGUgaW5kZXggcmVsYXRpdmUgdG8gdGhlIGBIRUFEYCBjb21taXQuICAoT25lCitleGNlcHRpb24gaXMgd2hlbiB0aGUgY2hhbmdlZCBpbmRleCBlbnRyaWVzIGFyZSBpbiB0aGUgc3RhdGUgdGhhdAord291bGQgcmVzdWx0IGZyb20gdGhlIG1lcmdlIGFscmVhZHkuKQorCitJZiBhbGwgbmFtZWQgY29tbWl0cyBhcmUgYWxyZWFkeSBhbmNlc3RvcnMgb2YgYEhFQURgLCAnZ2l0IG1lcmdlJword2lsbCBleGl0IGVhcmx5IHdpdGggdGhlIG1lc3NhZ2UgIkFscmVhZHkgdXAtdG8tZGF0ZS4iCisKK0ZBU1QtRk9SV0FSRCBNRVJHRQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK09mdGVuIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSBuYW1lZCBjb21taXQuCitUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBjYXNlIGVzcGVjaWFsbHkgd2hlbiBpbnZva2VkIGZyb20gJ2dpdAorcHVsbCc6IHlvdSBhcmUgdHJhY2tpbmcgYW4gdXBzdHJlYW0gcmVwb3NpdG9yeSwgeW91IGhhdmUgY29tbWl0dGVkCitubyBsb2NhbCBjaGFuZ2VzLCBhbmQgbm93IHlvdSB3YW50IHRvIHVwZGF0ZSB0byBhIG5ld2VyIHVwc3RyZWFtCityZXZpc2lvbi4gIEluIHRoaXMgY2FzZSwgYSBuZXcgY29tbWl0IGlzIG5vdCBuZWVkZWQgdG8gc3RvcmUgdGhlCitjb21iaW5lZCBoaXN0b3J5OyBpbnN0ZWFkLCB0aGUgYEhFQURgIChhbG9uZyB3aXRoIHRoZSBpbmRleCkgaXMKK3VwZGF0ZWQgdG8gcG9pbnQgYXQgdGhlIG5hbWVkIGNvbW1pdCwgd2l0aG91dCBjcmVhdGluZyBhbiBleHRyYQorbWVyZ2UgY29tbWl0LgorCitUaGlzIGJlaGF2aW9yIGNhbiBiZSBzdXBwcmVzc2VkIHdpdGggdGhlIGAtLW5vLWZmYCBvcHRpb24uCisKK1RSVUUgTUVSR0UKKy0tLS0tLS0tLS0KKworRXhjZXB0IGluIGEgZmFzdC1mb3J3YXJkIG1lcmdlIChzZWUgYWJvdmUpLCB0aGUgYnJhbmNoZXMgdG8gYmUKK21lcmdlZCBtdXN0IGJlIHRpZWQgdG9nZXRoZXIgYnkgYSBtZXJnZSBjb21taXQgdGhhdCBoYXMgYm90aCBvZiB0aGVtCithcyBpdHMgcGFyZW50cy4KKworQSBtZXJnZWQgdmVyc2lvbiByZWNvbmNpbGluZyB0aGUgY2hhbmdlcyBmcm9tIGFsbCBicmFuY2hlcyB0byBiZQorbWVyZ2VkIGlzIGNvbW1pdHRlZCwgYW5kIHlvdXIgYEhFQURgLCBpbmRleCwgYW5kIHdvcmtpbmcgdHJlZSBhcmUKK3VwZGF0ZWQgdG8gaXQuICBJdCBpcyBwb3NzaWJsZSB0byBoYXZlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHdvcmtpbmcKK3RyZWUgYXMgbG9uZyBhcyB0aGV5IGRvIG5vdCBvdmVybGFwOyB0aGUgdXBkYXRlIHdpbGwgcHJlc2VydmUgdGhlbS4KKworV2hlbiBpdCBpcyBub3Qgb2J2aW91cyBob3cgdG8gcmVjb25jaWxlIHRoZSBjaGFuZ2VzLCB0aGUgZm9sbG93aW5nCitoYXBwZW5zOgorCisxLiBUaGUgYEhFQURgIHBvaW50ZXIgc3RheXMgdGhlIHNhbWUuCisyLiBUaGUgYE1FUkdFX0hFQURgIHJlZiBpcyBzZXQgdG8gcG9pbnQgdG8gdGhlIG90aGVyIGJyYW5jaCBoZWFkLgorMy4gUGF0aHMgdGhhdCBtZXJnZWQgY2xlYW5seSBhcmUgdXBkYXRlZCBib3RoIGluIHRoZSBpbmRleCBmaWxlIGFuZAorICAgaW4geW91ciB3b3JraW5nIHRyZWUuCis0LiBGb3IgY29uZmxpY3RpbmcgcGF0aHMsIHRoZSBpbmRleCBmaWxlIHJlY29yZHMgdXAgdG8gdGhyZWUKKyAgIHZlcnNpb25zOiBzdGFnZSAxIHN0b3JlcyB0aGUgdmVyc2lvbiBmcm9tIHRoZSBjb21tb24gYW5jZXN0b3IsCisgICBzdGFnZSAyIGZyb20gYEhFQURgLCBhbmQgc3RhZ2UgMyBmcm9tIGBNRVJHRV9IRUFEYCAoeW91CisgICBjYW4gaW5zcGVjdCB0aGUgc3RhZ2VzIHdpdGggYGdpdCBscy1maWxlcyAtdWApLiAgVGhlIHdvcmtpbmcKKyAgIHRyZWUgZmlsZXMgY29udGFpbiB0aGUgcmVzdWx0IG9mIHRoZSAibWVyZ2UiIHByb2dyYW07IGkuZS4gMy13YXkKKyAgIG1lcmdlIHJlc3VsdHMgd2l0aCBmYW1pbGlhciBjb25mbGljdCBtYXJrZXJzIGA8PDxgIGA9PT1gIGA+Pj5gLgorNS4gTm8gb3RoZXIgY2hhbmdlcyBhcmUgbWFkZS4gIEluIHBhcnRpY3VsYXIsIHRoZSBsb2NhbAorICAgbW9kaWZpY2F0aW9ucyB5b3UgaGFkIGJlZm9yZSB5b3Ugc3RhcnRlZCBtZXJnZSB3aWxsIHN0YXkgdGhlCisgICBzYW1lIGFuZCB0aGUgaW5kZXggZW50cmllcyBmb3IgdGhlbSBzdGF5IGFzIHRoZXkgd2VyZSwKKyAgIGkuZS4gbWF0Y2hpbmcgYEhFQURgLgorCitJZiB5b3UgdHJpZWQgYSBtZXJnZSB3aGljaCByZXN1bHRlZCBpbiBjb21wbGV4IGNvbmZsaWN0cyBhbmQKK3dhbnQgdG8gc3RhcnQgb3ZlciwgeW91IGNhbiByZWNvdmVyIHdpdGggYGdpdCBtZXJnZSAtLWFib3J0YC4KKworTUVSR0lORyBUQUcKKy0tLS0tLS0tLS0tCisKK1doZW4gbWVyZ2luZyBhbiBhbm5vdGF0ZWQgKGFuZCBwb3NzaWJseSBzaWduZWQpIHRhZywgR2l0IGFsd2F5cworY3JlYXRlcyBhIG1lcmdlIGNvbW1pdCBldmVuIGlmIGEgZmFzdC1mb3J3YXJkIG1lcmdlIGlzIHBvc3NpYmxlLCBhbmQKK3RoZSBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSBpcyBwcmVwYXJlZCB3aXRoIHRoZSB0YWcgbWVzc2FnZS4KK0FkZGl0aW9uYWxseSwgaWYgdGhlIHRhZyBpcyBzaWduZWQsIHRoZSBzaWduYXR1cmUgY2hlY2sgaXMgcmVwb3J0ZWQKK2FzIGEgY29tbWVudCBpbiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZS4gU2VlIGFsc28gbGlua2dpdDpnaXQtdGFnWzFdLgorCitXaGVuIHlvdSB3YW50IHRvIGp1c3QgaW50ZWdyYXRlIHdpdGggdGhlIHdvcmsgbGVhZGluZyB0byB0aGUgY29tbWl0Cit0aGF0IGhhcHBlbnMgdG8gYmUgdGFnZ2VkLCBlLmcuIHN5bmNocm9uaXppbmcgd2l0aCBhbiB1cHN0cmVhbQorcmVsZWFzZSBwb2ludCwgeW91IG1heSBub3Qgd2FudCB0byBtYWtlIGFuIHVubmVjZXNzYXJ5IG1lcmdlIGNvbW1pdC4KKworSW4gc3VjaCBhIGNhc2UsIHlvdSBjYW4gInVud3JhcCIgdGhlIHRhZyB5b3Vyc2VsZiBiZWZvcmUgZmVlZGluZyBpdAordG8gYGdpdCBtZXJnZWAsIG9yIHBhc3MgYC0tZmYtb25seWAgd2hlbiB5b3UgZG8gbm90IGhhdmUgYW55IHdvcmsgb24KK3lvdXIgb3duLiBlLmcuCisKKy0tLS0KK2dpdCBmZXRjaCBvcmlnaW4KK2dpdCBtZXJnZSB2MS4yLjNeMAorZ2l0IG1lcmdlIC0tZmYtb25seSB2MS4yLjMKKy0tLS0KKworCitIT1cgQ09ORkxJQ1RTIEFSRSBQUkVTRU5URUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEdXJpbmcgYSBtZXJnZSwgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyBhcmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSByZXN1bHQKK29mIHRoZSBtZXJnZS4gIEFtb25nIHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGNvbW1vbiBhbmNlc3RvcidzIHZlcnNpb24sCitub24tb3ZlcmxhcHBpbmcgb25lcyAodGhhdCBpcywgeW91IGNoYW5nZWQgYW4gYXJlYSBvZiB0aGUgZmlsZSB3aGlsZSB0aGUKK290aGVyIHNpZGUgbGVmdCB0aGF0IGFyZWEgaW50YWN0LCBvciB2aWNlIHZlcnNhKSBhcmUgaW5jb3Jwb3JhdGVkIGluIHRoZQorZmluYWwgcmVzdWx0IHZlcmJhdGltLiAgV2hlbiBib3RoIHNpZGVzIG1hZGUgY2hhbmdlcyB0byB0aGUgc2FtZSBhcmVhLAoraG93ZXZlciwgR2l0IGNhbm5vdCByYW5kb21seSBwaWNrIG9uZSBzaWRlIG92ZXIgdGhlIG90aGVyLCBhbmQgYXNrcyB5b3UgdG8KK3Jlc29sdmUgaXQgYnkgbGVhdmluZyB3aGF0IGJvdGggc2lkZXMgZGlkIHRvIHRoYXQgYXJlYS4KKworQnkgZGVmYXVsdCwgR2l0IHVzZXMgdGhlIHNhbWUgc3R5bGUgYXMgdGhlIG9uZSB1c2VkIGJ5IHRoZSAibWVyZ2UiIHByb2dyYW0KK2Zyb20gdGhlIFJDUyBzdWl0ZSB0byBwcmVzZW50IHN1Y2ggYSBjb25mbGljdGVkIGh1bmssIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCitIZXJlIGFyZSBsaW5lcyB0aGF0IGFyZSBlaXRoZXIgdW5jaGFuZ2VkIGZyb20gdGhlIGNvbW1vbgorYW5jZXN0b3IsIG9yIGNsZWFubHkgcmVzb2x2ZWQgYmVjYXVzZSBvbmx5IG9uZSBzaWRlIGNoYW5nZWQuCis8PDw8PDw8IHlvdXJzOnNhbXBsZS50eHQKK0NvbmZsaWN0IHJlc29sdXRpb24gaXMgaGFyZDsKK2xldCdzIGdvIHNob3BwaW5nLgorPT09PT09PQorR2l0IG1ha2VzIGNvbmZsaWN0IHJlc29sdXRpb24gZWFzeS4KKz4+Pj4+Pj4gdGhlaXJzOnNhbXBsZS50eHQKK0FuZCBoZXJlIGlzIGFub3RoZXIgbGluZSB0aGF0IGlzIGNsZWFubHkgcmVzb2x2ZWQgb3IgdW5tb2RpZmllZC4KKy0tLS0tLS0tLS0tLQorCitUaGUgYXJlYSB3aGVyZSBhIHBhaXIgb2YgY29uZmxpY3RpbmcgY2hhbmdlcyBoYXBwZW5lZCBpcyBtYXJrZWQgd2l0aCBtYXJrZXJzCitgPDw8PDw8PGAsIGA9PT09PT09YCwgYW5kIGA+Pj4+Pj4+YC4gIFRoZSBwYXJ0IGJlZm9yZSB0aGUgYD09PT09PT1gCitpcyB0eXBpY2FsbHkgeW91ciBzaWRlLCBhbmQgdGhlIHBhcnQgYWZ0ZXJ3YXJkcyBpcyB0eXBpY2FsbHkgdGhlaXIgc2lkZS4KKworVGhlIGRlZmF1bHQgZm9ybWF0IGRvZXMgbm90IHNob3cgd2hhdCB0aGUgb3JpZ2luYWwgc2FpZCBpbiB0aGUgY29uZmxpY3RpbmcKK2FyZWEuICBZb3UgY2Fubm90IHRlbGwgaG93IG1hbnkgbGluZXMgYXJlIGRlbGV0ZWQgYW5kIHJlcGxhY2VkIHdpdGgKK0JhcmJpZSdzIHJlbWFyayBvbiB5b3VyIHNpZGUuICBUaGUgb25seSB0aGluZyB5b3UgY2FuIHRlbGwgaXMgdGhhdCB5b3VyCitzaWRlIHdhbnRzIHRvIHNheSBpdCBpcyBoYXJkIGFuZCB5b3UnZCBwcmVmZXIgdG8gZ28gc2hvcHBpbmcsIHdoaWxlIHRoZQorb3RoZXIgc2lkZSB3YW50cyB0byBjbGFpbSBpdCBpcyBlYXN5LgorCitBbiBhbHRlcm5hdGl2ZSBzdHlsZSBjYW4gYmUgdXNlZCBieSBzZXR0aW5nIHRoZSAibWVyZ2UuY29uZmxpY3RTdHlsZSIKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gImRpZmYzIi4gIEluICJkaWZmMyIgc3R5bGUsIHRoZSBhYm92ZSBjb25mbGljdAorbWF5IGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KK0hlcmUgYXJlIGxpbmVzIHRoYXQgYXJlIGVpdGhlciB1bmNoYW5nZWQgZnJvbSB0aGUgY29tbW9uCithbmNlc3Rvciwgb3IgY2xlYW5seSByZXNvbHZlZCBiZWNhdXNlIG9ubHkgb25lIHNpZGUgY2hhbmdlZC4KKzw8PDw8PDwgeW91cnM6c2FtcGxlLnR4dAorQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyBoYXJkOworbGV0J3MgZ28gc2hvcHBpbmcuCit8fHx8fHx8CitDb25mbGljdCByZXNvbHV0aW9uIGlzIGhhcmQuCis9PT09PT09CitHaXQgbWFrZXMgY29uZmxpY3QgcmVzb2x1dGlvbiBlYXN5LgorPj4+Pj4+PiB0aGVpcnM6c2FtcGxlLnR4dAorQW5kIGhlcmUgaXMgYW5vdGhlciBsaW5lIHRoYXQgaXMgY2xlYW5seSByZXNvbHZlZCBvciB1bm1vZGlmaWVkLgorLS0tLS0tLS0tLS0tCisKK0luIGFkZGl0aW9uIHRvIHRoZSBgPDw8PDw8PGAsIGA9PT09PT09YCwgYW5kIGA+Pj4+Pj4+YCBtYXJrZXJzLCBpdCB1c2VzCithbm90aGVyIGB8fHx8fHx8YCBtYXJrZXIgdGhhdCBpcyBmb2xsb3dlZCBieSB0aGUgb3JpZ2luYWwgdGV4dC4gIFlvdSBjYW4KK3RlbGwgdGhhdCB0aGUgb3JpZ2luYWwganVzdCBzdGF0ZWQgYSBmYWN0LCBhbmQgeW91ciBzaWRlIHNpbXBseSBnYXZlIGluIHRvCit0aGF0IHN0YXRlbWVudCBhbmQgZ2F2ZSB1cCwgd2hpbGUgdGhlIG90aGVyIHNpZGUgdHJpZWQgdG8gaGF2ZSBhIG1vcmUKK3Bvc2l0aXZlIGF0dGl0dWRlLiAgWW91IGNhbiBzb21ldGltZXMgY29tZSB1cCB3aXRoIGEgYmV0dGVyIHJlc29sdXRpb24gYnkKK3ZpZXdpbmcgdGhlIG9yaWdpbmFsLgorCisKK0hPVyBUTyBSRVNPTFZFIENPTkZMSUNUUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIHNlZWluZyBhIGNvbmZsaWN0LCB5b3UgY2FuIGRvIHR3byB0aGluZ3M6CisKKyAqIERlY2lkZSBub3QgdG8gbWVyZ2UuICBUaGUgb25seSBjbGVhbi11cHMgeW91IG5lZWQgYXJlIHRvIHJlc2V0CisgICB0aGUgaW5kZXggZmlsZSB0byB0aGUgYEhFQURgIGNvbW1pdCB0byByZXZlcnNlIDIuIGFuZCB0byBjbGVhbgorICAgdXAgd29ya2luZyB0cmVlIGNoYW5nZXMgbWFkZSBieSAyLiBhbmQgMy47IGBnaXQgbWVyZ2UgLS1hYm9ydGAKKyAgIGNhbiBiZSB1c2VkIGZvciB0aGlzLgorCisgKiBSZXNvbHZlIHRoZSBjb25mbGljdHMuICBHaXQgd2lsbCBtYXJrIHRoZSBjb25mbGljdHMgaW4KKyAgIHRoZSB3b3JraW5nIHRyZWUuICBFZGl0IHRoZSBmaWxlcyBpbnRvIHNoYXBlIGFuZAorICAgJ2dpdCBhZGQnIHRoZW0gdG8gdGhlIGluZGV4LiAgVXNlICdnaXQgY29tbWl0JyB0byBzZWFsIHRoZSBkZWFsLgorCitZb3UgY2FuIHdvcmsgdGhyb3VnaCB0aGUgY29uZmxpY3Qgd2l0aCBhIG51bWJlciBvZiB0b29sczoKKworICogVXNlIGEgbWVyZ2V0b29sLiAgYGdpdCBtZXJnZXRvb2xgIHRvIGxhdW5jaCBhIGdyYXBoaWNhbAorICAgbWVyZ2V0b29sIHdoaWNoIHdpbGwgd29yayB5b3UgdGhyb3VnaCB0aGUgbWVyZ2UuCisKKyAqIExvb2sgYXQgdGhlIGRpZmZzLiAgYGdpdCBkaWZmYCB3aWxsIHNob3cgYSB0aHJlZS13YXkgZGlmZiwKKyAgIGhpZ2hsaWdodGluZyBjaGFuZ2VzIGZyb20gYm90aCB0aGUgYEhFQURgIGFuZCBgTUVSR0VfSEVBRGAKKyAgIHZlcnNpb25zLgorCisgKiBMb29rIGF0IHRoZSBkaWZmcyBmcm9tIGVhY2ggYnJhbmNoLiBgZ2l0IGxvZyAtLW1lcmdlIC1wIDxwYXRoPmAKKyAgIHdpbGwgc2hvdyBkaWZmcyBmaXJzdCBmb3IgdGhlIGBIRUFEYCB2ZXJzaW9uIGFuZCB0aGVuIHRoZQorICAgYE1FUkdFX0hFQURgIHZlcnNpb24uCisKKyAqIExvb2sgYXQgdGhlIG9yaWdpbmFscy4gIGBnaXQgc2hvdyA6MTpmaWxlbmFtZWAgc2hvd3MgdGhlCisgICBjb21tb24gYW5jZXN0b3IsIGBnaXQgc2hvdyA6MjpmaWxlbmFtZWAgc2hvd3MgdGhlIGBIRUFEYAorICAgdmVyc2lvbiwgYW5kIGBnaXQgc2hvdyA6MzpmaWxlbmFtZWAgc2hvd3MgdGhlIGBNRVJHRV9IRUFEYAorICAgdmVyc2lvbi4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2hlcyBgZml4ZXNgIGFuZCBgZW5oYW5jZW1lbnRzYCBvbiB0b3Agb2YKKyAgdGhlIGN1cnJlbnQgYnJhbmNoLCBtYWtpbmcgYW4gb2N0b3B1cyBtZXJnZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgZml4ZXMgZW5oYW5jZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2ggYG9ic29sZXRlYCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgdXNpbmcgYG91cnNgCisgIG1lcmdlIHN0cmF0ZWd5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtcyBvdXJzIG9ic29sZXRlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNZXJnZSBicmFuY2ggYG1haW50YCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgYnV0IGRvIG5vdCBtYWtlCisgIGEgbmV3IGNvbW1pdCBhdXRvbWF0aWNhbGx5OgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBtYWludAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGNhbiBiZSB1c2VkIHdoZW4geW91IHdhbnQgdG8gaW5jbHVkZSBmdXJ0aGVyIGNoYW5nZXMgdG8gdGhlCittZXJnZSwgb3Igd2FudCB0byB3cml0ZSB5b3VyIG93biBtZXJnZSBjb21taXQgbWVzc2FnZS4KKysKK1lvdSBzaG91bGQgcmVmcmFpbiBmcm9tIGFidXNpbmcgdGhpcyBvcHRpb24gdG8gc25lYWsgc3Vic3RhbnRpYWwKK2NoYW5nZXMgaW50byBhIG1lcmdlIGNvbW1pdC4gIFNtYWxsIGZpeHVwcyBsaWtlIGJ1bXBpbmcKK3JlbGVhc2UvdmVyc2lvbiBuYW1lIHdvdWxkIGJlIGFjY2VwdGFibGUuCisKKworaW5jbHVkZTo6bWVyZ2Utc3RyYXRlZ2llcy50eHRbXQorCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCitpbmNsdWRlOjptZXJnZS1jb25maWcudHh0W10KKworYnJhbmNoLjxuYW1lPi5tZXJnZU9wdGlvbnM6OgorCVNldHMgZGVmYXVsdCBvcHRpb25zIGZvciBtZXJnaW5nIGludG8gYnJhbmNoIDxuYW1lPi4gVGhlIHN5bnRheCBhbmQKKwlzdXBwb3J0ZWQgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgdGhvc2Ugb2YgJ2dpdCBtZXJnZScsIGJ1dCBvcHRpb24KKwl2YWx1ZXMgY29udGFpbmluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZtdC1tZXJnZS1tc2dbMV0sIGxpbmtnaXQ6Z2l0LXB1bGxbMV0sCitsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0sCitsaW5rZ2l0OmdpdC1yZXNldFsxXSwKK2xpbmtnaXQ6Z2l0LWRpZmZbMV0sIGxpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdLAorbGlua2dpdDpnaXQtYWRkWzFdLCBsaW5rZ2l0OmdpdC1ybVsxXSwKK2xpbmtnaXQ6Z2l0LW1lcmdldG9vbFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC0tbGliLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW1lcmdldG9vbC0tbGliLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTU1NTBiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLS1saWIudHh0CkBAIC0wLDAgKzEsNDcgQEAKK2dpdC1tZXJnZXRvb2x7bGl0ZGR9bGliKDEpCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWVyZ2V0b29sLS1saWIgLSBDb21tb24gR2l0IG1lcmdlIHRvb2wgc2hlbGwgc2NyaXB0bGV0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydUT09MX01PREU9KGRpZmZ8bWVyZ2UpIC4gIiQoZ2l0IC0tZXhlYy1wYXRoKS9naXQtbWVyZ2V0b29se2xpdGRkfWxpYiInCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIG5vdCBhIGNvbW1hbmQgdGhlIGVuZCB1c2VyIHdvdWxkIHdhbnQgdG8gcnVuLiAgRXZlci4KK1RoaXMgZG9jdW1lbnRhdGlvbiBpcyBtZWFudCBmb3IgcGVvcGxlIHdobyBhcmUgc3R1ZHlpbmcgdGhlCitQb3JjZWxhaW4taXNoIHNjcmlwdHMgYW5kL29yIGFyZSB3cml0aW5nIG5ldyBvbmVzLgorCitUaGUgJ2dpdC1tZXJnZXRvb2x7bGl0ZGR9bGliJyBzY3JpcHRsZXQgaXMgZGVzaWduZWQgdG8gYmUgc291cmNlZCAodXNpbmcKK2AuYCkgYnkgb3RoZXIgc2hlbGwgc2NyaXB0cyB0byBzZXQgdXAgZnVuY3Rpb25zIGZvciB3b3JraW5nCit3aXRoIEdpdCBtZXJnZSB0b29scy4KKworQmVmb3JlIHNvdXJjaW5nICdnaXQtbWVyZ2V0b29se2xpdGRkfWxpYicsIHlvdXIgc2NyaXB0IG11c3Qgc2V0IGBUT09MX01PREVgCit0byBkZWZpbmUgdGhlIG9wZXJhdGlvbiBtb2RlIGZvciB0aGUgZnVuY3Rpb25zIGxpc3RlZCBiZWxvdy4KKydkaWZmJyBhbmQgJ21lcmdlJyBhcmUgdmFsaWQgdmFsdWVzLgorCitGVU5DVElPTlMKKy0tLS0tLS0tLQorZ2V0X21lcmdlX3Rvb2w6OgorCXJldHVybnMgYSBtZXJnZSB0b29sLgorCitnZXRfbWVyZ2VfdG9vbF9jbWQ6OgorCXJldHVybnMgdGhlIGN1c3RvbSBjb21tYW5kIGZvciBhIG1lcmdlIHRvb2wuCisKK2dldF9tZXJnZV90b29sX3BhdGg6OgorCXJldHVybnMgdGhlIGN1c3RvbSBwYXRoIGZvciBhIG1lcmdlIHRvb2wuCisKK3J1bl9tZXJnZV90b29sOjoKKwlsYXVuY2hlcyBhIG1lcmdlIHRvb2wgZ2l2ZW4gdGhlIHRvb2wgbmFtZSBhbmQgYSB0cnVlL2ZhbHNlCisJZmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIGEgbWVyZ2UgYmFzZSBpcyBwcmVzZW50LgorCSckTUVSR0VEJywgJyRMT0NBTCcsICckUkVNT1RFJywgYW5kICckQkFTRScgbXVzdCBiZSBkZWZpbmVkCisJZm9yIHVzZSBieSB0aGUgbWVyZ2UgdG9vbC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1tZXJnZXRvb2wudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODQ2YzJlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2V0b29sLnR4dApAQCAtMCwwICsxLDk0IEBACitnaXQtbWVyZ2V0b29sKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1tZXJnZXRvb2wgLSBSdW4gbWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scyB0byByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgbWVyZ2V0b29sJyBbLS10b29sPTx0b29sPl0gWy15IHwgLS1bbm8tXXByb21wdF0gWzxmaWxlPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1VzZSBgZ2l0IG1lcmdldG9vbGAgdG8gcnVuIG9uZSBvZiBzZXZlcmFsIG1lcmdlIHV0aWxpdGllcyB0byByZXNvbHZlCittZXJnZSBjb25mbGljdHMuICBJdCBpcyB0eXBpY2FsbHkgcnVuIGFmdGVyICdnaXQgbWVyZ2UnLgorCitJZiBvbmUgb3IgbW9yZSA8ZmlsZT4gcGFyYW1ldGVycyBhcmUgZ2l2ZW4sIHRoZSBtZXJnZSB0b29sIHByb2dyYW0gd2lsbAorYmUgcnVuIHRvIHJlc29sdmUgZGlmZmVyZW5jZXMgb24gZWFjaCBmaWxlIChza2lwcGluZyB0aG9zZSB3aXRob3V0Citjb25mbGljdHMpLiAgU3BlY2lmeWluZyBhIGRpcmVjdG9yeSB3aWxsIGluY2x1ZGUgYWxsIHVucmVzb2x2ZWQgZmlsZXMgaW4KK3RoYXQgcGF0aC4gIElmIG5vIDxmaWxlPiBuYW1lcyBhcmUgc3BlY2lmaWVkLCAnZ2l0IG1lcmdldG9vbCcgd2lsbCBydW4KK3RoZSBtZXJnZSB0b29sIHByb2dyYW0gb24gZXZlcnkgZmlsZSB3aXRoIG1lcmdlIGNvbmZsaWN0cy4KKworT1BUSU9OUworLS0tLS0tLQorLXQgPHRvb2w+OjoKKy0tdG9vbD08dG9vbD46OgorCVVzZSB0aGUgbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIHNwZWNpZmllZCBieSA8dG9vbD4uCisJVmFsaWQgdmFsdWVzIGluY2x1ZGUgZW1lcmdlLCBndmltZGlmZiwga2RpZmYzLAorCW1lbGQsIHZpbWRpZmYsIGFuZCB0b3J0b2lzZW1lcmdlLiBSdW4gYGdpdCBtZXJnZXRvb2wgLS10b29sLWhlbHBgCisJZm9yIHRoZSBsaXN0IG9mIHZhbGlkIDx0b29sPiBzZXR0aW5ncy4KKysKK0lmIGEgbWVyZ2UgcmVzb2x1dGlvbiBwcm9ncmFtIGlzIG5vdCBzcGVjaWZpZWQsICdnaXQgbWVyZ2V0b29sJword2lsbCB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYG1lcmdlLnRvb2xgLiAgSWYgdGhlCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBtZXJnZS50b29sYCBpcyBub3Qgc2V0LCAnZ2l0IG1lcmdldG9vbCcKK3dpbGwgcGljayBhIHN1aXRhYmxlIGRlZmF1bHQuCisrCitZb3UgY2FuIGV4cGxpY2l0bHkgcHJvdmlkZSBhIGZ1bGwgcGF0aCB0byB0aGUgdG9vbCBieSBzZXR0aW5nIHRoZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBgbWVyZ2V0b29sLjx0b29sPi5wYXRoYC4gRm9yIGV4YW1wbGUsIHlvdQorY2FuIGNvbmZpZ3VyZSB0aGUgYWJzb2x1dGUgcGF0aCB0byBrZGlmZjMgYnkgc2V0dGluZworYG1lcmdldG9vbC5rZGlmZjMucGF0aGAuIE90aGVyd2lzZSwgJ2dpdCBtZXJnZXRvb2wnIGFzc3VtZXMgdGhlCit0b29sIGlzIGF2YWlsYWJsZSBpbiBQQVRILgorKworSW5zdGVhZCBvZiBydW5uaW5nIG9uZSBvZiB0aGUga25vd24gbWVyZ2UgdG9vbCBwcm9ncmFtcywKKydnaXQgbWVyZ2V0b29sJyBjYW4gYmUgY3VzdG9taXplZCB0byBydW4gYW4gYWx0ZXJuYXRpdmUgcHJvZ3JhbQorYnkgc3BlY2lmeWluZyB0aGUgY29tbWFuZCBsaW5lIHRvIGludm9rZSBpbiBhIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlIGBtZXJnZXRvb2wuPHRvb2w+LmNtZGAuCisrCitXaGVuICdnaXQgbWVyZ2V0b29sJyBpcyBpbnZva2VkIHdpdGggdGhpcyB0b29sIChlaXRoZXIgdGhyb3VnaCB0aGUKK2AtdGAgb3IgYC0tdG9vbGAgb3B0aW9uIG9yIHRoZSBgbWVyZ2UudG9vbGAgY29uZmlndXJhdGlvbgordmFyaWFibGUpIHRoZSBjb25maWd1cmVkIGNvbW1hbmQgbGluZSB3aWxsIGJlIGludm9rZWQgd2l0aCBgJEJBU0VgCitzZXQgdG8gdGhlIG5hbWUgb2YgYSB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIHRoZSBjb21tb24gYmFzZSBmb3IKK3RoZSBtZXJnZSwgaWYgYXZhaWxhYmxlOyBgJExPQ0FMYCBzZXQgdG8gdGhlIG5hbWUgb2YgYSB0ZW1wb3JhcnkKK2ZpbGUgY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgb24gdGhlIGN1cnJlbnQgYnJhbmNoOworYCRSRU1PVEVgIHNldCB0byB0aGUgbmFtZSBvZiBhIHRlbXBvcmFyeSBmaWxlIGNvbnRhaW5pbmcgdGhlCitjb250ZW50cyBvZiB0aGUgZmlsZSB0byBiZSBtZXJnZWQsIGFuZCBgJE1FUkdFRGAgc2V0IHRvIHRoZSBuYW1lCitvZiB0aGUgZmlsZSB0byB3aGljaCB0aGUgbWVyZ2UgdG9vbCBzaG91bGQgd3JpdGUgdGhlIHJlc3VsdCBvZiB0aGUKK21lcmdlIHJlc29sdXRpb24uCisrCitJZiB0aGUgY3VzdG9tIG1lcmdlIHRvb2wgY29ycmVjdGx5IGluZGljYXRlcyB0aGUgc3VjY2VzcyBvZiBhCittZXJnZSByZXNvbHV0aW9uIHdpdGggaXRzIGV4aXQgY29kZSwgdGhlbiB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgYG1lcmdldG9vbC48dG9vbD4udHJ1c3RFeGl0Q29kZWAgY2FuIGJlIHNldCB0byBgdHJ1ZWAuCitPdGhlcndpc2UsICdnaXQgbWVyZ2V0b29sJyB3aWxsIHByb21wdCB0aGUgdXNlciB0byBpbmRpY2F0ZSB0aGUKK3N1Y2Nlc3Mgb2YgdGhlIHJlc29sdXRpb24gYWZ0ZXIgdGhlIGN1c3RvbSB0b29sIGhhcyBleGl0ZWQuCisKKy0tdG9vbC1oZWxwOjoKKwlQcmludCBhIGxpc3Qgb2YgbWVyZ2UgdG9vbHMgdGhhdCBtYXkgYmUgdXNlZCB3aXRoIGAtLXRvb2xgLgorCisteTo6CistLW5vLXByb21wdDo6CisJRG9uJ3QgcHJvbXB0IGJlZm9yZSBlYWNoIGludm9jYXRpb24gb2YgdGhlIG1lcmdlIHJlc29sdXRpb24KKwlwcm9ncmFtLgorCVRoaXMgaXMgdGhlIGRlZmF1bHQgaWYgdGhlIG1lcmdlIHJlc29sdXRpb24gcHJvZ3JhbSBpcworCWV4cGxpY2l0bHkgc3BlY2lmaWVkIHdpdGggdGhlIGAtLXRvb2xgIG9wdGlvbiBvciB3aXRoIHRoZQorCWBtZXJnZS50b29sYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCistLXByb21wdDo6CisJUHJvbXB0IGJlZm9yZSBlYWNoIGludm9jYXRpb24gb2YgdGhlIG1lcmdlIHJlc29sdXRpb24gcHJvZ3JhbQorCXRvIGdpdmUgdGhlIHVzZXIgYSBjaGFuY2UgdG8gc2tpcCB0aGUgcGF0aC4KKworVEVNUE9SQVJZIEZJTEVTCistLS0tLS0tLS0tLS0tLS0KK2BnaXQgbWVyZ2V0b29sYCBjcmVhdGVzIGAqLm9yaWdgIGJhY2t1cCBmaWxlcyB3aGlsZSByZXNvbHZpbmcgbWVyZ2VzLgorVGhlc2UgYXJlIHNhZmUgdG8gcmVtb3ZlIG9uY2UgYSBmaWxlIGhhcyBiZWVuIG1lcmdlZCBhbmQgaXRzCitgZ2l0IG1lcmdldG9vbGAgc2Vzc2lvbiBoYXMgY29tcGxldGVkLgorCitTZXR0aW5nIHRoZSBgbWVyZ2V0b29sLmtlZXBCYWNrdXBgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gYGZhbHNlYAorY2F1c2VzIGBnaXQgbWVyZ2V0b29sYCB0byBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgYmFja3VwIGFzIGZpbGVzCithcmUgc3VjY2Vzc2Z1bGx5IG1lcmdlZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ta3RhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ta3RhZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2YTc1NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW1rdGFnLnR4dApAQCAtMCwwICsxLDM5IEBACitnaXQtbWt0YWcoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbWt0YWcgLSBDcmVhdGVzIGEgdGFnIG9iamVjdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBta3RhZycKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyBhIHRhZyBjb250ZW50cyBvbiBzdGFuZGFyZCBpbnB1dCBhbmQgY3JlYXRlcyBhIHRhZyBvYmplY3QKK3RoYXQgY2FuIGFsc28gYmUgdXNlZCB0byBzaWduIG90aGVyIG9iamVjdHMuCisKK1RoZSBvdXRwdXQgaXMgdGhlIG5ldyB0YWcncyA8b2JqZWN0PiBpZGVudGlmaWVyLgorCitUYWcgRm9ybWF0CistLS0tLS0tLS0tCitBIHRhZyBzaWduYXR1cmUgZmlsZSwgdG8gYmUgZmVkIHRvIHRoaXMgY29tbWFuZCdzIHN0YW5kYXJkIGlucHV0LAoraGFzIGEgdmVyeSBzaW1wbGUgZml4ZWQgZm9ybWF0OiBmb3VyIGxpbmVzIG9mCisKKyAgb2JqZWN0IDxzaGExPgorICB0eXBlIDx0eXBlbmFtZT4KKyAgdGFnIDx0YWduYW1lPgorICB0YWdnZXIgPHRhZ2dlcj4KKworZm9sbG93ZWQgYnkgc29tZSAnb3B0aW9uYWwnIGZyZWUtZm9ybSBtZXNzYWdlIChzb21lIHRhZ3MgY3JlYXRlZAorYnkgb2xkZXIgR2l0IG1heSBub3QgaGF2ZSBgdGFnZ2VyYCBsaW5lKS4gIFRoZSBtZXNzYWdlLCB3aGVuCitleGlzdHMsIGlzIHNlcGFyYXRlZCBieSBhIGJsYW5rIGxpbmUgZnJvbSB0aGUgaGVhZGVyLiAgVGhlCittZXNzYWdlIHBhcnQgbWF5IGNvbnRhaW4gYSBzaWduYXR1cmUgdGhhdCBHaXQgaXRzZWxmIGRvZXNuJ3QKK2NhcmUgYWJvdXQsIGJ1dCB0aGF0IGNhbiBiZSB2ZXJpZmllZCB3aXRoIGdwZy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1ta3RyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzZlYmRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbWt0cmVlLnR4dApAQCAtMCwwICsxLDQwIEBACitnaXQtbWt0cmVlKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ta3RyZWUgLSBCdWlsZCBhIHRyZWUtb2JqZWN0IGZyb20gbHMtdHJlZSBmb3JtYXR0ZWQgdGV4dAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBta3RyZWUnIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgc3RhbmRhcmQgaW5wdXQgaW4gbm9uLXJlY3Vyc2l2ZSBgbHMtdHJlZWAgb3V0cHV0IGZvcm1hdCwgYW5kIGNyZWF0ZXMKK2EgdHJlZSBvYmplY3QuICBUaGUgb3JkZXIgb2YgdGhlIHRyZWUgZW50cmllcyBpcyBub3JtYWxpc2VkIGJ5IG1rdHJlZSBzbworcHJlLXNvcnRpbmcgdGhlIGlucHV0IGlzIG5vdCByZXF1aXJlZC4gIFRoZSBvYmplY3QgbmFtZSBvZiB0aGUgdHJlZSBvYmplY3QKK2J1aWx0IGlzIHdyaXR0ZW4gdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KKworT1BUSU9OUworLS0tLS0tLQorLXo6OgorCVJlYWQgdGhlIE5VTC10ZXJtaW5hdGVkIGBscy10cmVlIC16YCBvdXRwdXQgaW5zdGVhZC4KKworLS1taXNzaW5nOjoKKwlBbGxvdyBtaXNzaW5nIG9iamVjdHMuICBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgKHdpdGhvdXQgdGhpcyBvcHRpb24pCisJaXMgdG8gdmVyaWZ5IHRoYXQgZWFjaCB0cmVlIGVudHJ5J3Mgc2hhMSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nCisJb2JqZWN0LiAgVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgdHJlYXRtZW50IG9mIGdpdGxpbmsgZW50cmllcworCShha2EgInN1Ym1vZHVsZXMiKSB3aGljaCBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gYmUgbWlzc2luZy4KKworLS1iYXRjaDo6CisJQWxsb3cgYnVpbGRpbmcgb2YgbW9yZSB0aGFuIG9uZSB0cmVlIG9iamVjdCBiZWZvcmUgZXhpdGluZy4gIEVhY2gKKwl0cmVlIGlzIHNlcGFyYXRlZCBieSBhcyBzaW5nbGUgYmxhbmsgbGluZS4gVGhlIGZpbmFsIG5ldy1saW5lIGlzCisJb3B0aW9uYWwuICBOb3RlIC0gaWYgdGhlICcteicgb3B0aW9uIGlzIHVzZWQsIGxpbmVzIGFyZSB0ZXJtaW5hdGVkCisJd2l0aCBOVUwuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtbXYudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbXYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NTMxMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1tdi50eHQKQEAgLTAsMCArMSw2OSBAQAorZ2l0LW12KDEpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LW12IC0gTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG12JyA8b3B0aW9ucz4uLi4gPGFyZ3M+Li4uCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorTW92ZSBvciByZW5hbWUgYSBmaWxlLCBkaXJlY3Rvcnkgb3Igc3ltbGluay4KKworIGdpdCBtdiBbLXZdIFstZl0gWy1uXSBbLWtdIDxzb3VyY2U+IDxkZXN0aW5hdGlvbj4KKyBnaXQgbXYgWy12XSBbLWZdIFstbl0gWy1rXSA8c291cmNlPiAuLi4gPGRlc3RpbmF0aW9uIGRpcmVjdG9yeT4KKworSW4gdGhlIGZpcnN0IGZvcm0sIGl0IHJlbmFtZXMgPHNvdXJjZT4sIHdoaWNoIG11c3QgZXhpc3QgYW5kIGJlIGVpdGhlcgorYSBmaWxlLCBzeW1saW5rIG9yIGRpcmVjdG9yeSwgdG8gPGRlc3RpbmF0aW9uPi4KK0luIHRoZSBzZWNvbmQgZm9ybSwgdGhlIGxhc3QgYXJndW1lbnQgaGFzIHRvIGJlIGFuIGV4aXN0aW5nCitkaXJlY3Rvcnk7IHRoZSBnaXZlbiBzb3VyY2VzIHdpbGwgYmUgbW92ZWQgaW50byB0aGlzIGRpcmVjdG9yeS4KKworVGhlIGluZGV4IGlzIHVwZGF0ZWQgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCBidXQgdGhlIGNoYW5nZSBtdXN0IHN0aWxsIGJlCitjb21taXR0ZWQuCisKK09QVElPTlMKKy0tLS0tLS0KKy1mOjoKKy0tZm9yY2U6OgorCUZvcmNlIHJlbmFtaW5nIG9yIG1vdmluZyBvZiBhIGZpbGUgZXZlbiBpZiB0aGUgdGFyZ2V0IGV4aXN0cworLWs6OgorICAgICAgICBTa2lwIG1vdmUgb3IgcmVuYW1lIGFjdGlvbnMgd2hpY2ggd291bGQgbGVhZCB0byBhbiBlcnJvcgorCWNvbmRpdGlvbi4gQW4gZXJyb3IgaGFwcGVucyB3aGVuIGEgc291cmNlIGlzIG5laXRoZXIgZXhpc3Rpbmcgbm9yCisJY29udHJvbGxlZCBieSBHaXQsIG9yIHdoZW4gaXQgd291bGQgb3ZlcndyaXRlIGFuIGV4aXN0aW5nCisgICAgICAgIGZpbGUgdW5sZXNzICctZicgaXMgZ2l2ZW4uCistbjo6CistLWRyeS1ydW46OgorCURvIG5vdGhpbmc7IG9ubHkgc2hvdyB3aGF0IHdvdWxkIGhhcHBlbgorCistdjo6CistLXZlcmJvc2U6OgorCVJlcG9ydCB0aGUgbmFtZXMgb2YgZmlsZXMgYXMgdGhleSBhcmUgbW92ZWQuCisKK1NVQk1PRFVMRVMKKy0tLS0tLS0tLS0KK01vdmluZyBhIHN1Ym1vZHVsZSB1c2luZyBhIGdpdGZpbGUgKHdoaWNoIG1lYW5zIHRoZXkgd2VyZSBjbG9uZWQKK3dpdGggYSBHaXQgdmVyc2lvbiAxLjcuOCBvciBuZXdlcikgd2lsbCB1cGRhdGUgdGhlIGdpdGZpbGUgYW5kCitjb3JlLndvcmt0cmVlIHNldHRpbmcgdG8gbWFrZSB0aGUgc3VibW9kdWxlIHdvcmsgaW4gdGhlIG5ldyBsb2NhdGlvbi4KK0l0IGFsc28gd2lsbCBhdHRlbXB0IHRvIHVwZGF0ZSB0aGUgc3VibW9kdWxlLjxuYW1lPi5wYXRoIHNldHRpbmcgaW4KK3RoZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0gZmlsZSBhbmQgc3RhZ2UgdGhhdCBmaWxlICh1bmxlc3MgLW4gaXMgdXNlZCkuCisKK0JVR1MKKy0tLS0KK0VhY2ggdGltZSBhIHN1cGVycHJvamVjdCB1cGRhdGUgbW92ZXMgYSBwb3B1bGF0ZWQgc3VibW9kdWxlIChlLmcuIHdoZW4KK3N3aXRjaGluZyBiZXR3ZWVuIGNvbW1pdHMgYmVmb3JlIGFuZCBhZnRlciB0aGUgbW92ZSkgYSBzdGFsZSBzdWJtb2R1bGUKK2NoZWNrb3V0IHdpbGwgcmVtYWluIGluIHRoZSBvbGQgbG9jYXRpb24gYW5kIGFuIGVtcHR5IGRpcmVjdG9yeSB3aWxsCithcHBlYXIgaW4gdGhlIG5ldyBsb2NhdGlvbi4gVG8gcG9wdWxhdGUgdGhlIHN1Ym1vZHVsZSBhZ2FpbiBpbiB0aGUgbmV3Citsb2NhdGlvbiB0aGUgdXNlciB3aWxsIGhhdmUgdG8gcnVuICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIKK2FmdGVyd2FyZHMuIFJlbW92aW5nIHRoZSBvbGQgZGlyZWN0b3J5IGlzIG9ubHkgc2FmZSB3aGVuIGl0IHVzZXMgYQorZ2l0ZmlsZSwgYXMgb3RoZXJ3aXNlIHRoZSBoaXN0b3J5IG9mIHRoZSBzdWJtb2R1bGUgd2lsbCBiZSBkZWxldGVkCit0b28uIEJvdGggc3RlcHMgd2lsbCBiZSBvYnNvbGV0ZSB3aGVuIHJlY3Vyc2l2ZSBzdWJtb2R1bGUgdXBkYXRlIGhhcworYmVlbiBpbXBsZW1lbnRlZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1uYW1lLXJldi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EyOGZiOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LW5hbWUtcmV2LnR4dApAQCAtMCwwICsxLDc4IEBACitnaXQtbmFtZS1yZXYoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbmFtZS1yZXYgLSBGaW5kIHN5bWJvbGljIG5hbWVzIGZvciBnaXZlbiByZXZzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG5hbWUtcmV2JyBbLS10YWdzXSBbLS1yZWZzPTxwYXR0ZXJuPl0KKwkgICAgICAgKCAtLWFsbCB8IC0tc3RkaW4gfCA8Y29tbWl0LWlzaD4uLi4gKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ZpbmRzIHN5bWJvbGljIG5hbWVzIHN1aXRhYmxlIGZvciBodW1hbiBkaWdlc3Rpb24gZm9yIHJldmlzaW9ucyBnaXZlbiBpbiBhbnkKK2Zvcm1hdCBwYXJzYWJsZSBieSAnZ2l0IHJldi1wYXJzZScuCisKKworT1BUSU9OUworLS0tLS0tLQorCistLXRhZ3M6OgorCURvIG5vdCB1c2UgYnJhbmNoIG5hbWVzLCBidXQgb25seSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMKKworLS1yZWZzPTxwYXR0ZXJuPjo6CisJT25seSB1c2UgcmVmcyB3aG9zZSBuYW1lcyBtYXRjaCBhIGdpdmVuIHNoZWxsIHBhdHRlcm4uICBUaGUgcGF0dGVybgorCWNhbiBiZSBvbmUgb2YgYnJhbmNoIG5hbWUsIHRhZyBuYW1lIG9yIGZ1bGx5IHF1YWxpZmllZCByZWYgbmFtZS4KKworLS1hbGw6OgorCUxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMKKworLS1zdGRpbjo6CisJVHJhbnNmb3JtIHN0ZGluIGJ5IHN1YnN0aXR1dGluZyBhbGwgdGhlIDQwLWNoYXJhY3RlciBTSEEtMQorCWhleGVzIChzYXkgJGhleCkgd2l0aCAiJGhleCAoJHJldl9uYW1lKSIuICBXaGVuIHVzZWQgd2l0aAorCS0tbmFtZS1vbmx5LCBzdWJzdGl0dXRlIHdpdGggIiRyZXZfbmFtZSIsIG9taXR0aW5nICRoZXgKKwlhbHRvZ2V0aGVyLiAgSW50ZW5kZWQgZm9yIHRoZSBzY3JpcHRlcidzIHVzZS4KKworLS1uYW1lLW9ubHk6OgorCUluc3RlYWQgb2YgcHJpbnRpbmcgYm90aCB0aGUgU0hBLTEgYW5kIHRoZSBuYW1lLCBwcmludCBvbmx5CisJdGhlIG5hbWUuICBJZiBnaXZlbiB3aXRoIC0tdGFncyB0aGUgdXN1YWwgdGFnIHByZWZpeCBvZgorCSJ0YWdzLyIgaXMgYWxzbyBvbWl0dGVkIGZyb20gdGhlIG5hbWUsIG1hdGNoaW5nIHRoZSBvdXRwdXQKKwlvZiBgZ2l0LWRlc2NyaWJlYCBtb3JlIGNsb3NlbHkuCisKKy0tbm8tdW5kZWZpbmVkOjoKKwlEaWUgd2l0aCBlcnJvciBjb2RlICE9IDAgd2hlbiBhIHJlZmVyZW5jZSBpcyB1bmRlZmluZWQsCisJaW5zdGVhZCBvZiBwcmludGluZyBgdW5kZWZpbmVkYC4KKworLS1hbHdheXM6OgorCVNob3cgdW5pcXVlbHkgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjay4KKworRVhBTVBMRQorLS0tLS0tLQorCitHaXZlbiBhIGNvbW1pdCwgZmluZCBvdXQgd2hlcmUgaXQgaXMgcmVsYXRpdmUgdG8gdGhlIGxvY2FsIHJlZnMuIFNheSBzb21lYm9keQord3JvdGUgeW91IGFib3V0IHRoYXQgZmFudGFzdGljIGNvbW1pdCAzM2RiNWY0ZDkwMjdhMTBlNDc3Y2NmMDU0YjJjMWFiOTRmNzRjODVhLgorT2YgY291cnNlLCB5b3UgbG9vayBpbnRvIHRoZSBjb21taXQsIGJ1dCB0aGF0IG9ubHkgdGVsbHMgeW91IHdoYXQgaGFwcGVuZWQsIGJ1dAorbm90IHRoZSBjb250ZXh0LgorCitFbnRlciAnZ2l0IG5hbWUtcmV2JzoKKworLS0tLS0tLS0tLS0tCislIGdpdCBuYW1lLXJldiAzM2RiNWY0ZDkwMjdhMTBlNDc3Y2NmMDU0YjJjMWFiOTRmNzRjODVhCiszM2RiNWY0ZDkwMjdhMTBlNDc3Y2NmMDU0YjJjMWFiOTRmNzRjODVhIHRhZ3MvdjAuOTl+OTQwCistLS0tLS0tLS0tLS0KKworTm93IHlvdSBhcmUgd2lzZXIsIGJlY2F1c2UgeW91IGtub3cgdGhhdCBpdCBoYXBwZW5lZCA5NDAgcmV2aXNpb25zIGJlZm9yZSB2MC45OS4KKworQW5vdGhlciBuaWNlIHRoaW5nIHlvdSBjYW4gZG8gaXM6CisKKy0tLS0tLS0tLS0tLQorJSBnaXQgbG9nIHwgZ2l0IG5hbWUtcmV2IC0tc3RkaW4KKy0tLS0tLS0tLS0tLQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LW5vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGUzNDk5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbm90ZXMudHh0CkBAIC0wLDAgKzEsNDA1IEBACitnaXQtbm90ZXMoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtbm90ZXMgLSBBZGQgb3IgaW5zcGVjdCBvYmplY3Qgbm90ZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IG5vdGVzJyBbbGlzdCBbPG9iamVjdD5dXQorJ2dpdCBub3RlcycgYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstRiA8ZmlsZT4gfCAtbSA8bXNnPiB8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XQorJ2dpdCBub3RlcycgY29weSBbLWZdICggLS1zdGRpbiB8IDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4gKQorJ2dpdCBub3RlcycgYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLUYgPGZpbGU+IHwgLW0gPG1zZz4gfCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0KKydnaXQgbm90ZXMnIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0KKydnaXQgbm90ZXMnIHNob3cgWzxvYmplY3Q+XQorJ2dpdCBub3RlcycgbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+IF0gPG5vdGVzLXJlZj4KKydnaXQgbm90ZXMnIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXQorJ2dpdCBub3RlcycgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0KKydnaXQgbm90ZXMnIHJlbW92ZSBbLS1pZ25vcmUtbWlzc2luZ10gWy0tc3RkaW5dIFs8b2JqZWN0Pi4uLl0KKydnaXQgbm90ZXMnIHBydW5lIFstbiB8IC12XQorJ2dpdCBub3RlcycgZ2V0LXJlZgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQWRkcywgcmVtb3Zlcywgb3IgcmVhZHMgbm90ZXMgYXR0YWNoZWQgdG8gb2JqZWN0cywgd2l0aG91dCB0b3VjaGluZwordGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKworQnkgZGVmYXVsdCwgbm90ZXMgYXJlIHNhdmVkIHRvIGFuZCByZWFkIGZyb20gYHJlZnMvbm90ZXMvY29tbWl0c2AsIGJ1dAordGhpcyBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuLiAgU2VlIHRoZSBPUFRJT05TLCBDT05GSUdVUkFUSU9OLCBhbmQKK0VOVklST05NRU5UIHNlY3Rpb25zIGJlbG93LiAgSWYgdGhpcyByZWYgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUKK3F1aWV0bHkgY3JlYXRlZCB3aGVuIGl0IGlzIGZpcnN0IG5lZWRlZCB0byBzdG9yZSBhIG5vdGUuCisKK0EgdHlwaWNhbCB1c2Ugb2Ygbm90ZXMgaXMgdG8gc3VwcGxlbWVudCBhIGNvbW1pdCBtZXNzYWdlIHdpdGhvdXQKK2NoYW5naW5nIHRoZSBjb21taXQgaXRzZWxmLiBOb3RlcyBjYW4gYmUgc2hvd24gYnkgJ2dpdCBsb2cnIGFsb25nIHdpdGgKK3RoZSBvcmlnaW5hbCBjb21taXQgbWVzc2FnZS4gVG8gZGlzdGluZ3Vpc2ggdGhlc2Ugbm90ZXMgZnJvbSB0aGUKK21lc3NhZ2Ugc3RvcmVkIGluIHRoZSBjb21taXQgb2JqZWN0LCB0aGUgbm90ZXMgYXJlIGluZGVudGVkIGxpa2UgdGhlCittZXNzYWdlLCBhZnRlciBhbiB1bmluZGVudGVkIGxpbmUgc2F5aW5nICJOb3RlcyAoPHJlZm5hbWU+KToiIChvcgorIk5vdGVzOiIgZm9yIGByZWZzL25vdGVzL2NvbW1pdHNgKS4KKworTm90ZXMgY2FuIGFsc28gYmUgYWRkZWQgdG8gcGF0Y2hlcyBwcmVwYXJlZCB3aXRoIGBnaXQgZm9ybWF0LXBhdGNoYCBieQordXNpbmcgdGhlIGAtLW5vdGVzYCBvcHRpb24uIFN1Y2ggbm90ZXMgYXJlIGFkZGVkIGFzIGEgcGF0Y2ggY29tbWVudGFyeQorYWZ0ZXIgYSB0aHJlZSBkYXNoIHNlcGFyYXRvciBsaW5lLgorCitUbyBjaGFuZ2Ugd2hpY2ggbm90ZXMgYXJlIHNob3duIGJ5ICdnaXQgbG9nJywgc2VlIHRoZQorIm5vdGVzLmRpc3BsYXlSZWYiIGNvbmZpZ3VyYXRpb24gaW4gbGlua2dpdDpnaXQtbG9nWzFdLgorCitTZWUgdGhlICJub3Rlcy5yZXdyaXRlLjxjb21tYW5kPiIgY29uZmlndXJhdGlvbiBmb3IgYSB3YXkgdG8gY2FycnkKK25vdGVzIGFjcm9zcyBjb21tYW5kcyB0aGF0IHJld3JpdGUgY29tbWl0cy4KKworCitTVUJDT01NQU5EUworLS0tLS0tLS0tLS0KKworbGlzdDo6CisJTGlzdCB0aGUgbm90ZXMgb2JqZWN0IGZvciBhIGdpdmVuIG9iamVjdC4gSWYgbm8gb2JqZWN0IGlzCisJZ2l2ZW4sIHNob3cgYSBsaXN0IG9mIGFsbCBub3RlIG9iamVjdHMgYW5kIHRoZSBvYmplY3RzIHRoZXkKKwlhbm5vdGF0ZSAoaW4gdGhlIGZvcm1hdCAiPG5vdGUgb2JqZWN0PiA8YW5ub3RhdGVkIG9iamVjdD4iKS4KKwlUaGlzIGlzIHRoZSBkZWZhdWx0IHN1YmNvbW1hbmQgaWYgbm8gc3ViY29tbWFuZCBpcyBnaXZlbi4KKworYWRkOjoKKwlBZGQgbm90ZXMgZm9yIGEgZ2l2ZW4gb2JqZWN0IChkZWZhdWx0cyB0byBIRUFEKS4gQWJvcnQgaWYgdGhlCisJb2JqZWN0IGFscmVhZHkgaGFzIG5vdGVzICh1c2UgYC1mYCB0byBvdmVyd3JpdGUgZXhpc3Rpbmcgbm90ZXMpLgorCUhvd2V2ZXIsIGlmIHlvdSdyZSB1c2luZyBgYWRkYCBpbnRlcmFjdGl2ZWx5ICh1c2luZyBhbiBlZGl0b3IKKwl0byBzdXBwbHkgdGhlIG5vdGVzIGNvbnRlbnRzKSwgdGhlbiAtIGluc3RlYWQgb2YgYWJvcnRpbmcgLQorCXRoZSBleGlzdGluZyBub3RlcyB3aWxsIGJlIG9wZW5lZCBpbiB0aGUgZWRpdG9yIChsaWtlIHRoZSBgZWRpdGAKKwlzdWJjb21tYW5kKS4KKworY29weTo6CisJQ29weSB0aGUgbm90ZXMgZm9yIHRoZSBmaXJzdCBvYmplY3Qgb250byB0aGUgc2Vjb25kIG9iamVjdC4KKwlBYm9ydCBpZiB0aGUgc2Vjb25kIG9iamVjdCBhbHJlYWR5IGhhcyBub3Rlcywgb3IgaWYgdGhlIGZpcnN0CisJb2JqZWN0IGhhcyBub25lICh1c2UgLWYgdG8gb3ZlcndyaXRlIGV4aXN0aW5nIG5vdGVzIHRvIHRoZQorCXNlY29uZCBvYmplY3QpLiBUaGlzIHN1YmNvbW1hbmQgaXMgZXF1aXZhbGVudCB0bzoKKwlgZ2l0IG5vdGVzIGFkZCBbLWZdIC1DICQoZ2l0IG5vdGVzIGxpc3QgPGZyb20tb2JqZWN0PikgPHRvLW9iamVjdD5gCisrCitJbiBgLS1zdGRpbmAgbW9kZSwgdGFrZSBsaW5lcyBpbiB0aGUgZm9ybWF0CisrCistLS0tLS0tLS0tCis8ZnJvbS1vYmplY3Q+IFNQIDx0by1vYmplY3Q+IFsgU1AgPHJlc3Q+IF0gTEYKKy0tLS0tLS0tLS0KKysKK29uIHN0YW5kYXJkIGlucHV0LCBhbmQgY29weSB0aGUgbm90ZXMgZnJvbSBlYWNoIDxmcm9tLW9iamVjdD4gdG8gaXRzCitjb3JyZXNwb25kaW5nIDx0by1vYmplY3Q+LiAgKFRoZSBvcHRpb25hbCBgPHJlc3Q+YCBpcyBpZ25vcmVkIHNvIHRoYXQKK3RoZSBjb21tYW5kIGNhbiByZWFkIHRoZSBpbnB1dCBnaXZlbiB0byB0aGUgYHBvc3QtcmV3cml0ZWAgaG9vay4pCisKK2FwcGVuZDo6CisJQXBwZW5kIHRvIHRoZSBub3RlcyBvZiBhbiBleGlzdGluZyBvYmplY3QgKGRlZmF1bHRzIHRvIEhFQUQpLgorCUNyZWF0ZXMgYSBuZXcgbm90ZXMgb2JqZWN0IGlmIG5lZWRlZC4KKworZWRpdDo6CisJRWRpdCB0aGUgbm90ZXMgZm9yIGEgZ2l2ZW4gb2JqZWN0IChkZWZhdWx0cyB0byBIRUFEKS4KKworc2hvdzo6CisJU2hvdyB0aGUgbm90ZXMgZm9yIGEgZ2l2ZW4gb2JqZWN0IChkZWZhdWx0cyB0byBIRUFEKS4KKworbWVyZ2U6OgorCU1lcmdlIHRoZSBnaXZlbiBub3RlcyByZWYgaW50byB0aGUgY3VycmVudCBub3RlcyByZWYuCisJVGhpcyB3aWxsIHRyeSB0byBtZXJnZSB0aGUgY2hhbmdlcyBtYWRlIGJ5IHRoZSBnaXZlbgorCW5vdGVzIHJlZiAoY2FsbGVkICJyZW1vdGUiKSBzaW5jZSB0aGUgbWVyZ2UtYmFzZSAoaWYKKwlhbnkpIGludG8gdGhlIGN1cnJlbnQgbm90ZXMgcmVmIChjYWxsZWQgImxvY2FsIikuCisrCitJZiBjb25mbGljdHMgYXJpc2UgYW5kIGEgc3RyYXRlZ3kgZm9yIGF1dG9tYXRpY2FsbHkgcmVzb2x2aW5nCitjb25mbGljdGluZyBub3RlcyAoc2VlIHRoZSAiTk9URVMgTUVSR0UgU1RSQVRFR0lFUyIgc2VjdGlvbikgaXMgbm90IGdpdmVuLAordGhlICJtYW51YWwiIHJlc29sdmVyIGlzIHVzZWQuIFRoaXMgcmVzb2x2ZXIgY2hlY2tzIG91dCB0aGUKK2NvbmZsaWN0aW5nIG5vdGVzIGluIGEgc3BlY2lhbCB3b3JrdHJlZSAoYC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUVgKSwKK2FuZCBpbnN0cnVjdHMgdGhlIHVzZXIgdG8gbWFudWFsbHkgcmVzb2x2ZSB0aGUgY29uZmxpY3RzIHRoZXJlLgorV2hlbiBkb25lLCB0aGUgdXNlciBjYW4gZWl0aGVyIGZpbmFsaXplIHRoZSBtZXJnZSB3aXRoCisnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0Jywgb3IgYWJvcnQgdGhlIG1lcmdlIHdpdGgKKydnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcuCisKK3JlbW92ZTo6CisJUmVtb3ZlIHRoZSBub3RlcyBmb3IgZ2l2ZW4gb2JqZWN0cyAoZGVmYXVsdHMgdG8gSEVBRCkuIFdoZW4KKwlnaXZpbmcgemVybyBvciBvbmUgb2JqZWN0IGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdGhpcyBpcworCWVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyBhbiBlbXB0eSBub3RlIG1lc3NhZ2UgdG8KKwl0aGUgYGVkaXRgIHN1YmNvbW1hbmQuCisKK3BydW5lOjoKKwlSZW1vdmUgYWxsIG5vdGVzIGZvciBub24tZXhpc3RpbmcvdW5yZWFjaGFibGUgb2JqZWN0cy4KKworZ2V0LXJlZjo6CisJUHJpbnQgdGhlIGN1cnJlbnQgbm90ZXMgcmVmLiBUaGlzIHByb3ZpZGVzIGFuIGVhc3kgd2F5IHRvCisJcmV0cmlldmUgdGhlIGN1cnJlbnQgbm90ZXMgcmVmIChlLmcuIGZyb20gc2NyaXB0cykuCisKK09QVElPTlMKKy0tLS0tLS0KKy1mOjoKKy0tZm9yY2U6OgorCVdoZW4gYWRkaW5nIG5vdGVzIHRvIGFuIG9iamVjdCB0aGF0IGFscmVhZHkgaGFzIG5vdGVzLAorCW92ZXJ3cml0ZSB0aGUgZXhpc3Rpbmcgbm90ZXMgKGluc3RlYWQgb2YgYWJvcnRpbmcpLgorCistbSA8bXNnPjo6CistLW1lc3NhZ2U9PG1zZz46OgorCVVzZSB0aGUgZ2l2ZW4gbm90ZSBtZXNzYWdlIChpbnN0ZWFkIG9mIHByb21wdGluZykuCisJSWYgbXVsdGlwbGUgYC1tYCBvcHRpb25zIGFyZSBnaXZlbiwgdGhlaXIgdmFsdWVzCisJYXJlIGNvbmNhdGVuYXRlZCBhcyBzZXBhcmF0ZSBwYXJhZ3JhcGhzLgorCUxpbmVzIHN0YXJ0aW5nIHdpdGggYCNgIGFuZCBlbXB0eSBsaW5lcyBvdGhlciB0aGFuIGEKKwlzaW5nbGUgbGluZSBiZXR3ZWVuIHBhcmFncmFwaHMgd2lsbCBiZSBzdHJpcHBlZCBvdXQuCisKKy1GIDxmaWxlPjo6CistLWZpbGU9PGZpbGU+OjoKKwlUYWtlIHRoZSBub3RlIG1lc3NhZ2UgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4gIFVzZSAnLScgdG8KKwlyZWFkIHRoZSBub3RlIG1lc3NhZ2UgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuCisJTGluZXMgc3RhcnRpbmcgd2l0aCBgI2AgYW5kIGVtcHR5IGxpbmVzIG90aGVyIHRoYW4gYQorCXNpbmdsZSBsaW5lIGJldHdlZW4gcGFyYWdyYXBocyB3aWxsIGJlIHN0cmlwcGVkIG91dC4KKworLUMgPG9iamVjdD46OgorLS1yZXVzZS1tZXNzYWdlPTxvYmplY3Q+OjoKKwlUYWtlIHRoZSBnaXZlbiBibG9iIG9iamVjdCAoZm9yCWV4YW1wbGUsIGFub3RoZXIgbm90ZSkgYXMgdGhlCisJbm90ZSBtZXNzYWdlLiAoVXNlIGBnaXQgbm90ZXMgY29weSA8b2JqZWN0PmAgaW5zdGVhZCB0bworCWNvcHkgbm90ZXMgYmV0d2VlbiBvYmplY3RzLikKKworLWMgPG9iamVjdD46OgorLS1yZWVkaXQtbWVzc2FnZT08b2JqZWN0Pjo6CisJTGlrZSAnLUMnLCBidXQgd2l0aCAnLWMnIHRoZSBlZGl0b3IgaXMgaW52b2tlZCwgc28gdGhhdAorCXRoZSB1c2VyIGNhbiBmdXJ0aGVyIGVkaXQgdGhlIG5vdGUgbWVzc2FnZS4KKworLS1hbGxvdy1lbXB0eTo6CisJQWxsb3cgYW4gZW1wdHkgbm90ZSBvYmplY3QgdG8gYmUgc3RvcmVkLiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcworCXRvIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIGVtcHR5IG5vdGVzLgorCistLXJlZiA8cmVmPjo6CisJTWFuaXB1bGF0ZSB0aGUgbm90ZXMgdHJlZSBpbiA8cmVmPi4gIFRoaXMgb3ZlcnJpZGVzCisJJ0dJVF9OT1RFU19SRUYnIGFuZCB0aGUgImNvcmUubm90ZXNSZWYiIGNvbmZpZ3VyYXRpb24uICBUaGUgcmVmCisJc3BlY2lmaWVzIHRoZSBmdWxsIHJlZm5hbWUgd2hlbiBpdCBiZWdpbnMgd2l0aCBgcmVmcy9ub3Rlcy9gOyB3aGVuIGl0CisJYmVnaW5zIHdpdGggYG5vdGVzL2AsIGByZWZzL2AgYW5kIG90aGVyd2lzZSBgcmVmcy9ub3Rlcy9gIGlzIHByZWZpeGVkCisJdG8gZm9ybSBhIGZ1bGwgbmFtZSBvZiB0aGUgcmVmLgorCistLWlnbm9yZS1taXNzaW5nOjoKKwlEbyBub3QgY29uc2lkZXIgaXQgYW4gZXJyb3IgdG8gcmVxdWVzdCByZW1vdmluZyBub3RlcyBmcm9tIGFuCisJb2JqZWN0IHRoYXQgZG9lcyBub3QgaGF2ZSBub3RlcyBhdHRhY2hlZCB0byBpdC4KKworLS1zdGRpbjo6CisJQWxzbyByZWFkIHRoZSBvYmplY3QgbmFtZXMgdG8gcmVtb3ZlIG5vdGVzIGZyb20gZnJvbSB0aGUgc3RhbmRhcmQKKwlpbnB1dCAodGhlcmUgaXMgbm8gcmVhc29uIHlvdSBjYW5ub3QgY29tYmluZSB0aGlzIHdpdGggb2JqZWN0CisJbmFtZXMgZnJvbSB0aGUgY29tbWFuZCBsaW5lKS4KKworLW46OgorLS1kcnktcnVuOjoKKwlEbyBub3QgcmVtb3ZlIGFueXRoaW5nOyBqdXN0IHJlcG9ydCB0aGUgb2JqZWN0IG5hbWVzIHdob3NlIG5vdGVzCisJd291bGQgYmUgcmVtb3ZlZC4KKworLXMgPHN0cmF0ZWd5Pjo6CistLXN0cmF0ZWd5PTxzdHJhdGVneT46OgorCVdoZW4gbWVyZ2luZyBub3RlcywgcmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuCisJc3RyYXRlZ3kuIFRoZSBmb2xsb3dpbmcgc3RyYXRlZ2llcyBhcmUgcmVjb2duaXplZDogIm1hbnVhbCIKKwkoZGVmYXVsdCksICJvdXJzIiwgInRoZWlycyIsICJ1bmlvbiIgYW5kICJjYXRfc29ydF91bmlxIi4KKwlUaGlzIG9wdGlvbiBvdmVycmlkZXMgdGhlICJub3Rlcy5tZXJnZVN0cmF0ZWd5IiBjb25maWd1cmF0aW9uIHNldHRpbmcuCisJU2VlIHRoZSAiTk9URVMgTUVSR0UgU1RSQVRFR0lFUyIgc2VjdGlvbiBiZWxvdyBmb3IgbW9yZQorCWluZm9ybWF0aW9uIG9uIGVhY2ggbm90ZXMgbWVyZ2Ugc3RyYXRlZ3kuCisKKy0tY29tbWl0OjoKKwlGaW5hbGl6ZSBhbiBpbi1wcm9ncmVzcyAnZ2l0IG5vdGVzIG1lcmdlJy4gVXNlIHRoaXMgb3B0aW9uCisJd2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGUgY29uZmxpY3RzIHRoYXQgJ2dpdCBub3RlcyBtZXJnZScKKwlzdG9yZWQgaW4gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4gVGhpcyBhbWVuZHMgdGhlIHBhcnRpYWwKKwltZXJnZSBjb21taXQgY3JlYXRlZCBieSAnZ2l0IG5vdGVzIG1lcmdlJyAoc3RvcmVkIGluCisJLmdpdC9OT1RFU19NRVJHRV9QQVJUSUFMKSBieSBhZGRpbmcgdGhlIG5vdGVzIGluCisJLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4gVGhlIG5vdGVzIHJlZiBzdG9yZWQgaW4gdGhlCisJLmdpdC9OT1RFU19NRVJHRV9SRUYgc3ltcmVmIGlzIHVwZGF0ZWQgdG8gdGhlIHJlc3VsdGluZyBjb21taXQuCisKKy0tYWJvcnQ6OgorCUFib3J0L3Jlc2V0IGEgaW4tcHJvZ3Jlc3MgJ2dpdCBub3RlcyBtZXJnZScsIGkuZS4gYSBub3RlcyBtZXJnZQorCXdpdGggY29uZmxpY3RzLiBUaGlzIHNpbXBseSByZW1vdmVzIGFsbCBmaWxlcyByZWxhdGVkIHRvIHRoZQorCW5vdGVzIG1lcmdlLgorCistcTo6CistLXF1aWV0OjoKKwlXaGVuIG1lcmdpbmcgbm90ZXMsIG9wZXJhdGUgcXVpZXRseS4KKworLXY6OgorLS12ZXJib3NlOjoKKwlXaGVuIG1lcmdpbmcgbm90ZXMsIGJlIG1vcmUgdmVyYm9zZS4KKwlXaGVuIHBydW5pbmcgbm90ZXMsIHJlcG9ydCBhbGwgb2JqZWN0IG5hbWVzIHdob3NlIG5vdGVzIGFyZQorCXJlbW92ZWQuCisKKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitDb21taXQgbm90ZXMgYXJlIGJsb2JzIGNvbnRhaW5pbmcgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgYW4gb2JqZWN0CisodXN1YWxseSBpbmZvcm1hdGlvbiB0byBzdXBwbGVtZW50IGEgY29tbWl0J3MgbWVzc2FnZSkuICBUaGVzZSBibG9icworYXJlIHRha2VuIGZyb20gbm90ZXMgcmVmcy4gIEEgbm90ZXMgcmVmIGlzIHVzdWFsbHkgYSBicmFuY2ggd2hpY2gKK2NvbnRhaW5zICJmaWxlcyIgd2hvc2UgcGF0aHMgYXJlIHRoZSBvYmplY3QgbmFtZXMgZm9yIHRoZSBvYmplY3RzCit0aGV5IGRlc2NyaWJlLCB3aXRoIHNvbWUgZGlyZWN0b3J5IHNlcGFyYXRvcnMgaW5jbHVkZWQgZm9yIHBlcmZvcm1hbmNlCityZWFzb25zIGZvb3Rub3RlOltQZXJtaXR0ZWQgcGF0aG5hbWVzIGhhdmUgdGhlIGZvcm0KKydhYidgL2AnY2QnYC9gJ2VmJ2AvYCcuLi4nYC9gJ2FiY2RlZi4uLic6IGEgc2VxdWVuY2Ugb2YgZGlyZWN0b3J5CituYW1lcyBvZiB0d28gaGV4YWRlY2ltYWwgZGlnaXRzIGVhY2ggZm9sbG93ZWQgYnkgYSBmaWxlbmFtZSB3aXRoIHRoZQorcmVzdCBvZiB0aGUgb2JqZWN0IElELl0uCisKK0V2ZXJ5IG5vdGVzIGNoYW5nZSBjcmVhdGVzIGEgbmV3IGNvbW1pdCBhdCB0aGUgc3BlY2lmaWVkIG5vdGVzIHJlZi4KK1lvdSBjYW4gdGhlcmVmb3JlIGluc3BlY3QgdGhlIGhpc3Rvcnkgb2YgdGhlIG5vdGVzIGJ5IGludm9raW5nLCBlLmcuLAorYGdpdCBsb2cgLXAgbm90ZXMvY29tbWl0c2AuICBDdXJyZW50bHkgdGhlIGNvbW1pdCBtZXNzYWdlIG9ubHkgcmVjb3Jkcword2hpY2ggb3BlcmF0aW9uIHRyaWdnZXJlZCB0aGUgdXBkYXRlLCBhbmQgdGhlIGNvbW1pdCBhdXRob3JzaGlwIGlzCitkZXRlcm1pbmVkIGFjY29yZGluZyB0byB0aGUgdXN1YWwgcnVsZXMgKHNlZSBsaW5rZ2l0OmdpdC1jb21taXRbMV0pLgorVGhlc2UgZGV0YWlscyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuCisKK0l0IGlzIGFsc28gcGVybWl0dGVkIGZvciBhIG5vdGVzIHJlZiB0byBwb2ludCBkaXJlY3RseSB0byBhIHRyZWUKK29iamVjdCwgaW4gd2hpY2ggY2FzZSB0aGUgaGlzdG9yeSBvZiB0aGUgbm90ZXMgY2FuIGJlIHJlYWQgd2l0aAorYGdpdCBsb2cgLXAgLWcgPHJlZm5hbWU+YC4KKworCitOT1RFUyBNRVJHRSBTVFJBVEVHSUVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IG5vdGVzIG1lcmdlIHN0cmF0ZWd5IGlzICJtYW51YWwiLCB3aGljaCBjaGVja3Mgb3V0Citjb25mbGljdGluZyBub3RlcyBpbiBhIHNwZWNpYWwgd29yayB0cmVlIGZvciByZXNvbHZpbmcgbm90ZXMgY29uZmxpY3RzCisoYC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUVgKSwgYW5kIGluc3RydWN0cyB0aGUgdXNlciB0byByZXNvbHZlIHRoZQorY29uZmxpY3RzIGluIHRoYXQgd29yayB0cmVlLgorV2hlbiBkb25lLCB0aGUgdXNlciBjYW4gZWl0aGVyIGZpbmFsaXplIHRoZSBtZXJnZSB3aXRoCisnZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0Jywgb3IgYWJvcnQgdGhlIG1lcmdlIHdpdGgKKydnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCcuCisKK1VzZXJzIG1heSBzZWxlY3QgYW4gYXV0b21hdGVkIG1lcmdlIHN0cmF0ZWd5IGZyb20gYW1vbmcgdGhlIGZvbGxvd2luZyB1c2luZworZWl0aGVyIC1zLy0tc3RyYXRlZ3kgb3B0aW9uIG9yIGNvbmZpZ3VyaW5nIG5vdGVzLm1lcmdlU3RyYXRlZ3kgYWNjb3JkaW5nbHk6CisKKyJvdXJzIiBhdXRvbWF0aWNhbGx5IHJlc29sdmVzIGNvbmZsaWN0aW5nIG5vdGVzIGluIGZhdm9yIG9mIHRoZSBsb2NhbAordmVyc2lvbiAoaS5lLiB0aGUgY3VycmVudCBub3RlcyByZWYpLgorCisidGhlaXJzIiBhdXRvbWF0aWNhbGx5IHJlc29sdmVzIG5vdGVzIGNvbmZsaWN0cyBpbiBmYXZvciBvZiB0aGUgcmVtb3RlCit2ZXJzaW9uIChpLmUuIHRoZSBnaXZlbiBub3RlcyByZWYgYmVpbmcgbWVyZ2VkIGludG8gdGhlIGN1cnJlbnQgbm90ZXMKK3JlZikuCisKKyJ1bmlvbiIgYXV0b21hdGljYWxseSByZXNvbHZlcyBub3RlcyBjb25mbGljdHMgYnkgY29uY2F0ZW5hdGluZyB0aGUKK2xvY2FsIGFuZCByZW1vdGUgdmVyc2lvbnMuCisKKyJjYXRfc29ydF91bmlxIiBpcyBzaW1pbGFyIHRvICJ1bmlvbiIsIGJ1dCBpbiBhZGRpdGlvbiB0byBjb25jYXRlbmF0aW5nCit0aGUgbG9jYWwgYW5kIHJlbW90ZSB2ZXJzaW9ucywgdGhpcyBzdHJhdGVneSBhbHNvIHNvcnRzIHRoZSByZXN1bHRpbmcKK2xpbmVzLCBhbmQgcmVtb3ZlcyBkdXBsaWNhdGUgbGluZXMgZnJvbSB0aGUgcmVzdWx0LiBUaGlzIGlzIGVxdWl2YWxlbnQKK3RvIGFwcGx5aW5nIHRoZSAiY2F0IHwgc29ydCB8IHVuaXEiIHNoZWxsIHBpcGVsaW5lIHRvIHRoZSBsb2NhbCBhbmQKK3JlbW90ZSB2ZXJzaW9ucy4gVGhpcyBzdHJhdGVneSBpcyB1c2VmdWwgaWYgdGhlIG5vdGVzIGZvbGxvdyBhIGxpbmUtYmFzZWQKK2Zvcm1hdCB3aGVyZSBvbmUgd2FudHMgdG8gYXZvaWQgZHVwbGljYXRlZCBsaW5lcyBpbiB0aGUgbWVyZ2UgcmVzdWx0LgorTm90ZSB0aGF0IGlmIGVpdGhlciB0aGUgbG9jYWwgb3IgcmVtb3RlIHZlcnNpb24gY29udGFpbiBkdXBsaWNhdGUgbGluZXMKK3ByaW9yIHRvIHRoZSBtZXJnZSwgdGhlc2Ugd2lsbCBhbHNvIGJlIHJlbW92ZWQgYnkgdGhpcyBub3RlcyBtZXJnZQorc3RyYXRlZ3kuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1lvdSBjYW4gdXNlIG5vdGVzIHRvIGFkZCBhbm5vdGF0aW9ucyB3aXRoIGluZm9ybWF0aW9uIHRoYXQgd2FzIG5vdAorYXZhaWxhYmxlIGF0IHRoZSB0aW1lIGEgY29tbWl0IHdhcyB3cml0dGVuLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IG5vdGVzIGFkZCAtbSAnVGVzdGVkLWJ5OiBKb2hhbm5lcyBTaXh0IDxqNnRAa2RiZy5vcmc+JyA3MmExNDRlMgorJCBnaXQgc2hvdyAtcyA3MmExNDRlCitbLi4uXQorICAgIFNpZ25lZC1vZmYtYnk6IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKworTm90ZXM6CisgICAgVGVzdGVkLWJ5OiBKb2hhbm5lcyBTaXh0IDxqNnRAa2RiZy5vcmc+CistLS0tLS0tLS0tLS0KKworSW4gcHJpbmNpcGxlLCBhIG5vdGUgaXMgYSByZWd1bGFyIEdpdCBibG9iLCBhbmQgYW55IGtpbmQgb2YKKyhub24tKWZvcm1hdCBpcyBhY2NlcHRlZC4gIFlvdSBjYW4gYmluYXJ5LXNhZmVseSBjcmVhdGUgbm90ZXMgZnJvbQorYXJiaXRyYXJ5IGZpbGVzIHVzaW5nICdnaXQgaGFzaC1vYmplY3QnOgorCistLS0tLS0tLS0tLS0KKyQgY2MgKi5jCiskIGJsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgYS5vdXQpCiskIGdpdCBub3RlcyAtLXJlZj1idWlsdCBhZGQgLS1hbGxvdy1lbXB0eSAtQyAiJGJsb2IiIEhFQUQKKy0tLS0tLS0tLS0tLQorCisoWW91IGNhbm5vdCBzaW1wbHkgdXNlIGBnaXQgbm90ZXMgLS1yZWY9YnVpbHQgYWRkIC1GIGEub3V0IEhFQURgCitiZWNhdXNlIHRoYXQgaXMgbm90IGJpbmFyeS1zYWZlLikKK09mIGNvdXJzZSwgaXQgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdG8gZGlzcGxheSBub24tdGV4dC1mb3JtYXQgbm90ZXMKK3dpdGggJ2dpdCBsb2cnLCBzbyBpZiB5b3UgdXNlIHN1Y2ggbm90ZXMsIHlvdSdsbCBwcm9iYWJseSBuZWVkIHRvIHdyaXRlCitzb21lIHNwZWNpYWwtcHVycG9zZSB0b29scyB0byBkbyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlbS4KKworCitDT05GSUdVUkFUSU9OCistLS0tLS0tLS0tLS0tCisKK2NvcmUubm90ZXNSZWY6OgorCU5vdGVzIHJlZiB0byByZWFkIGFuZCBtYW5pcHVsYXRlIGluc3RlYWQgb2YKKwlgcmVmcy9ub3Rlcy9jb21taXRzYC4gIE11c3QgYmUgYW4gdW5hYmJyZXZpYXRlZCByZWYgbmFtZS4KKwlUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gdGhyb3VnaCB0aGUgZW52aXJvbm1lbnQgYW5kCisJY29tbWFuZCBsaW5lLgorCitub3Rlcy5tZXJnZVN0cmF0ZWd5OjoKKwlXaGljaCBtZXJnZSBzdHJhdGVneSB0byBjaG9vc2UgYnkgZGVmYXVsdCB3aGVuIHJlc29sdmluZyBub3RlcworCWNvbmZsaWN0cy4gIE11c3QgYmUgb25lIG9mIGBtYW51YWxgLCBgb3Vyc2AsIGB0aGVpcnNgLCBgdW5pb25gLCBvcgorCWBjYXRfc29ydF91bmlxYC4gIERlZmF1bHRzIHRvIGBtYW51YWxgLiAgU2VlICJOT1RFUyBNRVJHRSBTVFJBVEVHSUVTIgorCXNlY3Rpb24gYWJvdmUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZWFjaCBzdHJhdGVneS4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nIHRoZSBgLS1zdHJhdGVneWAgb3B0aW9uLgorCitub3Rlcy48bmFtZT4ubWVyZ2VTdHJhdGVneTo6CisJV2hpY2ggbWVyZ2Ugc3RyYXRlZ3kgdG8gY2hvb3NlIHdoZW4gZG9pbmcgYSBub3RlcyBtZXJnZSBpbnRvCisJcmVmcy9ub3Rlcy88bmFtZT4uICBUaGlzIG92ZXJyaWRlcyB0aGUgbW9yZSBnZW5lcmFsCisJIm5vdGVzLm1lcmdlU3RyYXRlZ3kiLiAgU2VlIHRoZSAiTk9URVMgTUVSR0UgU1RSQVRFR0lFUyIgc2VjdGlvbiBhYm92ZQorCWZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGVhY2ggYXZhaWxhYmxlIHN0cmF0ZWd5LgorCitub3Rlcy5kaXNwbGF5UmVmOjoKKwlXaGljaCByZWYgKG9yIHJlZnMsIGlmIGEgZ2xvYiBvciBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UpLCBpbgorCWFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IHNldCBieSBgY29yZS5ub3Rlc1JlZmAgb3IKKwknR0lUX05PVEVTX1JFRicsIHRvIHJlYWQgbm90ZXMgZnJvbSB3aGVuIHNob3dpbmcgY29tbWl0CisJbWVzc2FnZXMgd2l0aCB0aGUgJ2dpdCBsb2cnIGZhbWlseSBvZiBjb21tYW5kcy4KKwlUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZSBvciBieSB0aGUKKwknR0lUX05PVEVTX0RJU1BMQVlfUkVGJyBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKwlTZWUgbGlua2dpdDpnaXQtbG9nWzFdLgorCitub3Rlcy5yZXdyaXRlLjxjb21tYW5kPjo6CisJV2hlbiByZXdyaXRpbmcgY29tbWl0cyB3aXRoIDxjb21tYW5kPiAoY3VycmVudGx5IGBhbWVuZGAgb3IKKwlgcmViYXNlYCksIGlmIHRoaXMgdmFyaWFibGUgaXMgYGZhbHNlYCwgZ2l0IHdpbGwgbm90IGNvcHkKKwlub3RlcyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgcmV3cml0dGVuIGNvbW1pdC4gIERlZmF1bHRzIHRvCisJYHRydWVgLiAgU2VlIGFsc28gImBub3Rlcy5yZXdyaXRlUmVmYCIgYmVsb3cuCisrCitUaGlzIHNldHRpbmcgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlICdHSVRfTk9URVNfUkVXUklURV9SRUYnCitlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworbm90ZXMucmV3cml0ZU1vZGU6OgorCVdoZW4gY29weWluZyBub3RlcyBkdXJpbmcgYSByZXdyaXRlLCB3aGF0IHRvIGRvIGlmIHRoZSB0YXJnZXQKKwljb21taXQgYWxyZWFkeSBoYXMgYSBub3RlLiAgTXVzdCBiZSBvbmUgb2YgYG92ZXJ3cml0ZWAsCisJYGNvbmNhdGVuYXRlYCwgYGNhdF9zb3J0X3VuaXFgLCBvciBgaWdub3JlYC4gIERlZmF1bHRzIHRvCisJYGNvbmNhdGVuYXRlYC4KKysKK1RoaXMgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgR0lUX05PVEVTX1JFV1JJVEVfTU9ERWAKK2Vudmlyb25tZW50IHZhcmlhYmxlLgorCitub3Rlcy5yZXdyaXRlUmVmOjoKKwlXaGVuIGNvcHlpbmcgbm90ZXMgZHVyaW5nIGEgcmV3cml0ZSwgc3BlY2lmaWVzIHRoZSAoZnVsbHkKKwlxdWFsaWZpZWQpIHJlZiB3aG9zZSBub3RlcyBzaG91bGQgYmUgY29waWVkLiAgTWF5IGJlIGEgZ2xvYiwKKwlpbiB3aGljaCBjYXNlIG5vdGVzIGluIGFsbCBtYXRjaGluZyByZWZzIHdpbGwgYmUgY29waWVkLiAgWW91CisJbWF5IGFsc28gc3BlY2lmeSB0aGlzIGNvbmZpZ3VyYXRpb24gc2V2ZXJhbCB0aW1lcy4KKysKK0RvZXMgbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlOyB5b3UgbXVzdCBjb25maWd1cmUgdGhpcyB2YXJpYWJsZSB0bworZW5hYmxlIG5vdGUgcmV3cml0aW5nLgorKworQ2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgJ0dJVF9OT1RFU19SRVdSSVRFX1JFRicgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKworRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tCisKKydHSVRfTk9URVNfUkVGJzo6CisJV2hpY2ggcmVmIHRvIG1hbmlwdWxhdGUgbm90ZXMgZnJvbSwgaW5zdGVhZCBvZiBgcmVmcy9ub3Rlcy9jb21taXRzYC4KKwlUaGlzIG92ZXJyaWRlcyB0aGUgYGNvcmUubm90ZXNSZWZgIHNldHRpbmcuCisKKydHSVRfTk9URVNfRElTUExBWV9SRUYnOjoKKwlDb2xvbi1kZWxpbWl0ZWQgbGlzdCBvZiByZWZzIG9yIGdsb2JzIGluZGljYXRpbmcgd2hpY2ggcmVmcywKKwlpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBmcm9tIGBjb3JlLm5vdGVzUmVmYCBvcgorCSdHSVRfTk9URVNfUkVGJywgdG8gcmVhZCBub3RlcyBmcm9tIHdoZW4gc2hvd2luZyBjb21taXQKKwltZXNzYWdlcy4KKwlUaGlzIG92ZXJyaWRlcyB0aGUgYG5vdGVzLmRpc3BsYXlSZWZgIHNldHRpbmcuCisrCitBIHdhcm5pbmcgd2lsbCBiZSBpc3N1ZWQgZm9yIHJlZnMgdGhhdCBkbyBub3QgZXhpc3QsIGJ1dCBhIGdsb2IgdGhhdAorZG9lcyBub3QgbWF0Y2ggYW55IHJlZnMgaXMgc2lsZW50bHkgaWdub3JlZC4KKworJ0dJVF9OT1RFU19SRVdSSVRFX01PREUnOjoKKwlXaGVuIGNvcHlpbmcgbm90ZXMgZHVyaW5nIGEgcmV3cml0ZSwgd2hhdCB0byBkbyBpZiB0aGUgdGFyZ2V0CisJY29tbWl0IGFscmVhZHkgaGFzIGEgbm90ZS4KKwlNdXN0IGJlIG9uZSBvZiBgb3ZlcndyaXRlYCwgYGNvbmNhdGVuYXRlYCwgYGNhdF9zb3J0X3VuaXFgLCBvciBgaWdub3JlYC4KKwlUaGlzIG92ZXJyaWRlcyB0aGUgYGNvcmUucmV3cml0ZU1vZGVgIHNldHRpbmcuCisKKydHSVRfTk9URVNfUkVXUklURV9SRUYnOjoKKwlXaGVuIHJld3JpdGluZyBjb21taXRzLCB3aGljaCBub3RlcyB0byBjb3B5IGZyb20gdGhlIG9yaWdpbmFsCisJdG8gdGhlIHJld3JpdHRlbiBjb21taXQuICBNdXN0IGJlIGEgY29sb24tZGVsaW1pdGVkIGxpc3Qgb2YKKwlyZWZzIG9yIGdsb2JzLgorKworSWYgbm90IHNldCBpbiB0aGUgZW52aXJvbm1lbnQsIHRoZSBsaXN0IG9mIG5vdGVzIHRvIGNvcHkgZGVwZW5kcworb24gdGhlIGBub3Rlcy5yZXdyaXRlLjxjb21tYW5kPmAgYW5kIGBub3Rlcy5yZXdyaXRlUmVmYCBzZXR0aW5ncy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wNC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wNC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNmZjdkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXA0LnR4dApAQCAtMCwwICsxLDYyNCBAQAorZ2l0LXA0KDEpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXA0IC0gSW1wb3J0IGZyb20gYW5kIHN1Ym1pdCB0byBQZXJmb3JjZSByZXBvc2l0b3JpZXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcDQgY2xvbmUnIFs8c3luYyBvcHRpb25zPl0gWzxjbG9uZSBvcHRpb25zPl0gPHA0IGRlcG90IHBhdGg+Li4uCisnZ2l0IHA0IHN5bmMnIFs8c3luYyBvcHRpb25zPl0gWzxwNCBkZXBvdCBwYXRoPi4uLl0KKydnaXQgcDQgcmViYXNlJworJ2dpdCBwNCBzdWJtaXQnIFs8c3VibWl0IG9wdGlvbnM+XSBbPG1hc3RlciBicmFuY2ggbmFtZT5dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgcHJvdmlkZXMgYSB3YXkgdG8gaW50ZXJhY3Qgd2l0aCBwNCByZXBvc2l0b3JpZXMKK3VzaW5nIEdpdC4KKworQ3JlYXRlIGEgbmV3IEdpdCByZXBvc2l0b3J5IGZyb20gYW4gZXhpc3RpbmcgcDQgcmVwb3NpdG9yeSB1c2luZworJ2dpdCBwNCBjbG9uZScsIGdpdmluZyBpdCBvbmUgb3IgbW9yZSBwNCBkZXBvdCBwYXRocy4gIEluY29ycG9yYXRlCituZXcgY29tbWl0cyBmcm9tIHA0IGNoYW5nZXMgd2l0aCAnZ2l0IHA0IHN5bmMnLiAgVGhlICdzeW5jJyBjb21tYW5kCitpcyBhbHNvIHVzZWQgdG8gaW5jbHVkZSBuZXcgYnJhbmNoZXMgZnJvbSBvdGhlciBwNCBkZXBvdCBwYXRocy4KK1N1Ym1pdCBHaXQgY2hhbmdlcyBiYWNrIHRvIHA0IHVzaW5nICdnaXQgcDQgc3VibWl0Jy4gIFRoZSBjb21tYW5kCisnZ2l0IHA0IHJlYmFzZScgZG9lcyBhIHN5bmMgcGx1cyByZWJhc2VzIHRoZSBjdXJyZW50IGJyYW5jaCBvbnRvCit0aGUgdXBkYXRlZCBwNCByZW1vdGUgYnJhbmNoLgorCisKK0VYQU1QTEUKKy0tLS0tLS0KKyogQ2xvbmUgYSByZXBvc2l0b3J5OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBwNCBjbG9uZSAvL2RlcG90L3BhdGgvcHJvamVjdAorLS0tLS0tLS0tLS0tCisKKyogRG8gc29tZSB3b3JrIGluIHRoZSBuZXdseSBjcmVhdGVkIEdpdCByZXBvc2l0b3J5OgorKworLS0tLS0tLS0tLS0tCiskIGNkIHByb2plY3QKKyQgdmkgZm9vLmgKKyQgZ2l0IGNvbW1pdCAtYSAtbSAiZWRpdGVkIGZvby5oIgorLS0tLS0tLS0tLS0tCisKKyogVXBkYXRlIHRoZSBHaXQgcmVwb3NpdG9yeSB3aXRoIHJlY2VudCBjaGFuZ2VzIGZyb20gcDQsIHJlYmFzaW5nIHlvdXIKKyAgd29yayBvbiB0b3A6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IHJlYmFzZQorLS0tLS0tLS0tLS0tCisKKyogU3VibWl0IHlvdXIgY29tbWl0cyBiYWNrIHRvIHA0OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBwNCBzdWJtaXQKKy0tLS0tLS0tLS0tLQorCisKK0NPTU1BTkRTCistLS0tLS0tLQorCitDbG9uZQorfn5+fn4KK0dlbmVyYWxseSwgJ2dpdCBwNCBjbG9uZScgaXMgdXNlZCB0byBjcmVhdGUgYSBuZXcgR2l0IGRpcmVjdG9yeQorZnJvbSBhbiBleGlzdGluZyBwNCByZXBvc2l0b3J5OgorLS0tLS0tLS0tLS0tCiskIGdpdCBwNCBjbG9uZSAvL2RlcG90L3BhdGgvcHJvamVjdAorLS0tLS0tLS0tLS0tCitUaGlzOgorCisxLiAgIENyZWF0ZXMgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gYSBzdWJkaXJlY3RvcnkgY2FsbGVkICdwcm9qZWN0Jy4KKysKKzIuICAgSW1wb3J0cyB0aGUgZnVsbCBjb250ZW50cyBvZiB0aGUgaGVhZCByZXZpc2lvbiBmcm9tIHRoZSBnaXZlbiBwNAorZGVwb3QgcGF0aCBpbnRvIGEgc2luZ2xlIGNvbW1pdCBpbiB0aGUgR2l0IGJyYW5jaCAncmVmcy9yZW1vdGVzL3A0L21hc3RlcicuCisrCiszLiAgIENyZWF0ZXMgYSBsb2NhbCBicmFuY2gsICdtYXN0ZXInIGZyb20gdGhpcyByZW1vdGUgYW5kIGNoZWNrcyBpdCBvdXQuCisKK1RvIHJlcHJvZHVjZSB0aGUgZW50aXJlIHA0IGhpc3RvcnkgaW4gR2l0LCB1c2UgdGhlICdAYWxsJyBtb2RpZmllciBvbgordGhlIGRlcG90IHBhdGg6CistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IGNsb25lIC8vZGVwb3QvcGF0aC9wcm9qZWN0QGFsbAorLS0tLS0tLS0tLS0tCisKKworU3luYworfn5+fgorQXMgZGV2ZWxvcG1lbnQgY29udGludWVzIGluIHRoZSBwNCByZXBvc2l0b3J5LCB0aG9zZSBjaGFuZ2VzIGNhbgorYmUgaW5jbHVkZWQgaW4gdGhlIEdpdCByZXBvc2l0b3J5IHVzaW5nOgorLS0tLS0tLS0tLS0tCiskIGdpdCBwNCBzeW5jCistLS0tLS0tLS0tLS0KK1RoaXMgY29tbWFuZCBmaW5kcyBuZXcgY2hhbmdlcyBpbiBwNCBhbmQgaW1wb3J0cyB0aGVtIGFzIEdpdCBjb21taXRzLgorCitQNCByZXBvc2l0b3JpZXMgY2FuIGJlIGFkZGVkIHRvIGFuIGV4aXN0aW5nIEdpdCByZXBvc2l0b3J5IHVzaW5nCisnZ2l0IHA0IHN5bmMnIHRvbzoKKy0tLS0tLS0tLS0tLQorJCBta2RpciByZXBvLWdpdAorJCBjZCByZXBvLWdpdAorJCBnaXQgaW5pdAorJCBnaXQgcDQgc3luYyAvL3BhdGgvaW4veW91ci9wZXJmb3JjZS9kZXBvdAorLS0tLS0tLS0tLS0tCitUaGlzIGltcG9ydHMgdGhlIHNwZWNpZmllZCBkZXBvdCBpbnRvCisncmVmcy9yZW1vdGVzL3A0L21hc3RlcicgaW4gYW4gZXhpc3RpbmcgR2l0IHJlcG9zaXRvcnkuICBUaGUKKyctLWJyYW5jaCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgYnJhbmNoIHRvCitiZSB1c2VkIGZvciB0aGUgcDQgY29udGVudC4KKworSWYgYSBHaXQgcmVwb3NpdG9yeSBpbmNsdWRlcyBicmFuY2hlcyAncmVmcy9yZW1vdGVzL29yaWdpbi9wNCcsIHRoZXNlCit3aWxsIGJlIGZldGNoZWQgYW5kIGNvbnN1bHRlZCBmaXJzdCBkdXJpbmcgYSAnZ2l0IHA0IHN5bmMnLiAgU2luY2UKK2ltcG9ydGluZyBkaXJlY3RseSBmcm9tIHA0IGlzIGNvbnNpZGVyYWJseSBzbG93ZXIgdGhhbiBwdWxsaW5nIGNoYW5nZXMKK2Zyb20gYSBHaXQgcmVtb3RlLCB0aGlzIGNhbiBiZSB1c2VmdWwgaW4gYSBtdWx0aS1kZXZlbG9wZXIgZW52aXJvbm1lbnQuCisKK0lmIHRoZXJlIGFyZSBtdWx0aXBsZSBicmFuY2hlcywgZG9pbmcgJ2dpdCBwNCBzeW5jJyB3aWxsIGF1dG9tYXRpY2FsbHkKK3VzZSB0aGUgIkJSQU5DSCBERVRFQ1RJT04iIGFsZ29yaXRobSB0byB0cnkgdG8gcGFydGl0aW9uIG5ldyBjaGFuZ2VzCitpbnRvIHRoZSByaWdodCBicmFuY2guICBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlICctLWJyYW5jaCcKK29wdGlvbiB0byBzcGVjaWZ5IGp1c3QgYSBzaW5nbGUgYnJhbmNoIHRvIHVwZGF0ZS4KKworCitSZWJhc2UKK35+fn5+fgorQSBjb21tb24gd29ya2luZyBwYXR0ZXJuIGlzIHRvIGZldGNoIHRoZSBsYXRlc3QgY2hhbmdlcyBmcm9tIHRoZSBwNCBkZXBvdAorYW5kIG1lcmdlIHRoZW0gd2l0aCBsb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLiAgT2Z0ZW4sIHRoZSBwNCByZXBvc2l0b3J5CitpcyB0aGUgdWx0aW1hdGUgbG9jYXRpb24gZm9yIGFsbCBjb2RlLCB0aHVzIGEgcmViYXNlIHdvcmtmbG93IG1ha2VzCitzZW5zZS4gIFRoaXMgY29tbWFuZCBkb2VzICdnaXQgcDQgc3luYycgZm9sbG93ZWQgYnkgJ2dpdCByZWJhc2UnIHRvIG1vdmUKK2xvY2FsIGNvbW1pdHMgb24gdG9wIG9mIHVwZGF0ZWQgcDQgY2hhbmdlcy4KKy0tLS0tLS0tLS0tLQorJCBnaXQgcDQgcmViYXNlCistLS0tLS0tLS0tLS0KKworCitTdWJtaXQKK35+fn5+fgorU3VibWl0dGluZyBjaGFuZ2VzIGZyb20gYSBHaXQgcmVwb3NpdG9yeSBiYWNrIHRvIHRoZSBwNCByZXBvc2l0b3J5CityZXF1aXJlcyBhIHNlcGFyYXRlIHA0IGNsaWVudCB3b3Jrc3BhY2UuICBUaGlzIHNob3VsZCBiZSBzcGVjaWZpZWQKK3VzaW5nIHRoZSAnUDRDTElFTlQnIGVudmlyb25tZW50IHZhcmlhYmxlIG9yIHRoZSBHaXQgY29uZmlndXJhdGlvbgordmFyaWFibGUgJ2dpdC1wNC5jbGllbnQnLiAgVGhlIHA0IGNsaWVudCBtdXN0IGV4aXN0LCBidXQgdGhlIGNsaWVudCByb290Cit3aWxsIGJlIGNyZWF0ZWQgYW5kIHBvcHVsYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgorCitUbyBzdWJtaXQgYWxsIGNoYW5nZXMgdGhhdCBhcmUgaW4gdGhlIGN1cnJlbnQgR2l0IGJyYW5jaCBidXQgbm90IGluCit0aGUgJ3A0L21hc3RlcicgYnJhbmNoLCB1c2U6CistLS0tLS0tLS0tLS0KKyQgZ2l0IHA0IHN1Ym1pdAorLS0tLS0tLS0tLS0tCisKK1RvIHNwZWNpZnkgYSBicmFuY2ggb3RoZXIgdGhhbiB0aGUgY3VycmVudCBvbmUsIHVzZToKKy0tLS0tLS0tLS0tLQorJCBnaXQgcDQgc3VibWl0IHRvcGljYnJhbmNoCistLS0tLS0tLS0tLS0KKworVGhlIHVwc3RyZWFtIHJlZmVyZW5jZSBpcyBnZW5lcmFsbHkgJ3JlZnMvcmVtb3Rlcy9wNC9tYXN0ZXInLCBidXQgY2FuCitiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSAnLS1vcmlnaW49JyBjb21tYW5kLWxpbmUgb3B0aW9uLgorCitUaGUgcDQgY2hhbmdlcyB3aWxsIGJlIGNyZWF0ZWQgYXMgdGhlIHVzZXIgaW52b2tpbmcgJ2dpdCBwNCBzdWJtaXQnLiBUaGUKKyctLXByZXNlcnZlLXVzZXInIG9wdGlvbiB3aWxsIGNhdXNlIG93bmVyc2hpcCB0byBiZSBtb2RpZmllZAorYWNjb3JkaW5nIHRvIHRoZSBhdXRob3Igb2YgdGhlIEdpdCBjb21taXQuICBUaGlzIG9wdGlvbiByZXF1aXJlcyBhZG1pbgorcHJpdmlsZWdlcyBpbiBwNCwgd2hpY2ggY2FuIGJlIGdyYW50ZWQgdXNpbmcgJ3A0IHByb3RlY3QnLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworR2VuZXJhbCBvcHRpb25zCit+fn5+fn5+fn5+fn5+fn4KK0FsbCBjb21tYW5kcyBleGNlcHQgY2xvbmUgYWNjZXB0IHRoZXNlIG9wdGlvbnMuCisKKy0tZ2l0LWRpciA8ZGlyPjo6CisJU2V0IHRoZSAnR0lUX0RJUicgZW52aXJvbm1lbnQgdmFyaWFibGUuICBTZWUgbGlua2dpdDpnaXRbMV0uCisKKy12OjoKKy0tdmVyYm9zZTo6CisJUHJvdmlkZSBtb3JlIHByb2dyZXNzIGluZm9ybWF0aW9uLgorCitTeW5jIG9wdGlvbnMKK35+fn5+fn5+fn5+fgorVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZCBpbiB0aGUgaW5pdGlhbCAnY2xvbmUnIGFzIHdlbGwgYXMgaW4KK3N1YnNlcXVlbnQgJ3N5bmMnIG9wZXJhdGlvbnMuCisKKy0tYnJhbmNoIDxyZWY+OjoKKwlJbXBvcnQgY2hhbmdlcyBpbnRvIDxyZWY+IGluc3RlYWQgb2YgcmVmcy9yZW1vdGVzL3A0L21hc3Rlci4KKwlJZiA8cmVmPiBzdGFydHMgd2l0aCByZWZzLywgaXQgaXMgdXNlZCBhcyBpcy4gIE90aGVyd2lzZSwgaWYKKwlpdCBkb2VzIG5vdCBzdGFydCB3aXRoIHA0LywgdGhhdCBwcmVmaXggaXMgYWRkZWQuCisrCitCeSBkZWZhdWx0IGEgPHJlZj4gbm90IHN0YXJ0aW5nIHdpdGggcmVmcy8gaXMgdHJlYXRlZCBhcyB0aGUKK25hbWUgb2YgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICh1bmRlciByZWZzL3JlbW90ZXMvKS4gIFRoaXMKK2JlaGF2aW9yIGNhbiBiZSBtb2RpZmllZCB1c2luZyB0aGUgLS1pbXBvcnQtbG9jYWwgb3B0aW9uLgorKworVGhlIGRlZmF1bHQgPHJlZj4gaXMgIm1hc3RlciIuCisrCitUaGlzIGV4YW1wbGUgaW1wb3J0cyBhIG5ldyByZW1vdGUgInA0L3Byb2oyIiBpbnRvIGFuIGV4aXN0aW5nCitHaXQgcmVwb3NpdG9yeToKKysKKy0tLS0KKyAgICAkIGdpdCBpbml0CisgICAgJCBnaXQgcDQgc3luYyAtLWJyYW5jaD1yZWZzL3JlbW90ZXMvcDQvcHJvajIgLy9kZXBvdC9wcm9qMgorLS0tLQorCistLWRldGVjdC1icmFuY2hlczo6CisJVXNlIHRoZSBicmFuY2ggZGV0ZWN0aW9uIGFsZ29yaXRobSB0byBmaW5kIG5ldyBwYXRocyBpbiBwNC4gIEl0IGlzCisJZG9jdW1lbnRlZCBiZWxvdyBpbiAiQlJBTkNIIERFVEVDVElPTiIuCisKKy0tY2hhbmdlc2ZpbGUgPGZpbGU+OjoKKwlJbXBvcnQgZXhhY3RseSB0aGUgcDQgY2hhbmdlIG51bWJlcnMgbGlzdGVkIGluICdmaWxlJywgb25lIHBlcgorCWxpbmUuICBOb3JtYWxseSwgJ2dpdCBwNCcgaW5zcGVjdHMgdGhlIGN1cnJlbnQgcDQgcmVwb3NpdG9yeQorCXN0YXRlIGFuZCBkZXRlY3RzIHRoZSBjaGFuZ2VzIGl0IHNob3VsZCBpbXBvcnQuCisKKy0tc2lsZW50OjoKKwlEbyBub3QgcHJpbnQgYW55IHByb2dyZXNzIGluZm9ybWF0aW9uLgorCistLWRldGVjdC1sYWJlbHM6OgorCVF1ZXJ5IHA0IGZvciBsYWJlbHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZXBvdCBwYXRocywgYW5kIGFkZAorCXRoZW0gYXMgdGFncyBpbiBHaXQuIExpbWl0ZWQgdXNlZnVsbmVzcyBhcyBvbmx5IGltcG9ydHMgbGFiZWxzCisJYXNzb2NpYXRlZCB3aXRoIG5ldyBjaGFuZ2VsaXN0cy4gRGVwcmVjYXRlZC4KKworLS1pbXBvcnQtbGFiZWxzOjoKKwlJbXBvcnQgbGFiZWxzIGZyb20gcDQgaW50byBHaXQuCisKKy0taW1wb3J0LWxvY2FsOjoKKwlCeSBkZWZhdWx0LCBwNCBicmFuY2hlcyBhcmUgc3RvcmVkIGluICdyZWZzL3JlbW90ZXMvcDQvJywKKwl3aGVyZSB0aGV5IHdpbGwgYmUgdHJlYXRlZCBhcyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYnkKKwlsaW5rZ2l0OmdpdC1icmFuY2hbMV0gYW5kIG90aGVyIGNvbW1hbmRzLiAgVGhpcyBvcHRpb24gaW5zdGVhZAorCXB1dHMgcDQgYnJhbmNoZXMgaW4gJ3JlZnMvaGVhZHMvcDQvJy4gIE5vdGUgdGhhdCBmdXR1cmUKKwlzeW5jIG9wZXJhdGlvbnMgbXVzdCBzcGVjaWZ5ICctLWltcG9ydC1sb2NhbCcgYXMgd2VsbCBzbyB0aGF0CisJdGhleSBjYW4gZmluZCB0aGUgcDQgYnJhbmNoZXMgaW4gcmVmcy9oZWFkcy4KKworLS1tYXgtY2hhbmdlcyA8bj46OgorCUltcG9ydCBhdCBtb3N0ICduJyBjaGFuZ2VzLCByYXRoZXIgdGhhbiB0aGUgZW50aXJlIHJhbmdlIG9mCisJY2hhbmdlcyBpbmNsdWRlZCBpbiB0aGUgZ2l2ZW4gcmV2aXNpb24gc3BlY2lmaWVyLiBBIHR5cGljYWwKKwl1c2FnZSB3b3VsZCBiZSB1c2UgJ0BhbGwnIGFzIHRoZSByZXZpc2lvbiBzcGVjaWZpZXIsIGJ1dCB0aGVuCisJdG8gdXNlICctLW1heC1jaGFuZ2VzIDEwMDAnIHRvIGltcG9ydCBvbmx5IHRoZSBsYXN0IDEwMDAKKwlyZXZpc2lvbnMgcmF0aGVyIHRoYW4gdGhlIGVudGlyZSByZXZpc2lvbiBoaXN0b3J5LgorCistLWNoYW5nZXMtYmxvY2stc2l6ZSA8bj46OgorCVRoZSBpbnRlcm5hbCBibG9jayBzaXplIHRvIHVzZSB3aGVuIGNvbnZlcnRpbmcgYSByZXZpc2lvbgorCXNwZWNpZmllciBzdWNoIGFzICdAYWxsJyBpbnRvIGEgbGlzdCBvZiBzcGVjaWZpYyBjaGFuZ2UKKwludW1iZXJzLiBJbnN0ZWFkIG9mIHVzaW5nIGEgc2luZ2xlIGNhbGwgdG8gJ3A0IGNoYW5nZXMnIHRvCisJZmluZCB0aGUgZnVsbCBsaXN0IG9mIGNoYW5nZXMgZm9yIHRoZSBjb252ZXJzaW9uLCB0aGVyZSBhcmUgYQorCXNlcXVlbmNlIG9mIGNhbGxzIHRvICdwNCBjaGFuZ2VzIC1tJywgZWFjaCBvZiB3aGljaCByZXF1ZXN0cworCW9uZSBibG9jayBvZiBjaGFuZ2VzIG9mIHRoZSBnaXZlbiBzaXplLiBUaGUgZGVmYXVsdCBibG9jayBzaXplCisJaXMgNTAwLCB3aGljaCBzaG91bGQgdXN1YWxseSBiZSBzdWl0YWJsZS4KKworLS1rZWVwLXBhdGg6OgorCVRoZSBtYXBwaW5nIG9mIGZpbGUgbmFtZXMgZnJvbSB0aGUgcDQgZGVwb3QgcGF0aCB0byBHaXQsIGJ5CisJZGVmYXVsdCwgaW52b2x2ZXMgcmVtb3ZpbmcgdGhlIGVudGlyZSBkZXBvdCBwYXRoLiAgV2l0aCB0aGlzCisJb3B0aW9uLCB0aGUgZnVsbCBwNCBkZXBvdCBwYXRoIGlzIHJldGFpbmVkIGluIEdpdC4gIEZvciBleGFtcGxlLAorCXBhdGggJy8vZGVwb3QvbWFpbi9mb28vYmFyLmMnLCB3aGVuIGltcG9ydGVkIGZyb20KKwknLy9kZXBvdC9tYWluLycsIGJlY29tZXMgJ2Zvby9iYXIuYycuICBXaXRoICctLWtlZXAtcGF0aCcsIHRoZQorCUdpdCBwYXRoIGlzIGluc3RlYWQgJ2RlcG90L21haW4vZm9vL2Jhci5jJy4KKworLS11c2UtY2xpZW50LXNwZWM6OgorCVVzZSBhIGNsaWVudCBzcGVjIHRvIGZpbmQgdGhlIGxpc3Qgb2YgaW50ZXJlc3RpbmcgZmlsZXMgaW4gcDQuCisJU2VlIHRoZSAiQ0xJRU5UIFNQRUMiIHNlY3Rpb24gYmVsb3cuCisKKy0vIDxwYXRoPjo6CisJRXhjbHVkZSBzZWxlY3RlZCBkZXBvdCBwYXRocyB3aGVuIGNsb25pbmcgb3Igc3luY2luZy4KKworQ2xvbmUgb3B0aW9ucworfn5+fn5+fn5+fn5+fgorVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZCBpbiBhbiBpbml0aWFsICdjbG9uZScsIGFsb25nIHdpdGggdGhlICdzeW5jJworb3B0aW9ucyBkZXNjcmliZWQgYWJvdmUuCisKKy0tZGVzdGluYXRpb24gPGRpcmVjdG9yeT46OgorCVdoZXJlIHRvIGNyZWF0ZSB0aGUgR2l0IHJlcG9zaXRvcnkuICBJZiBub3QgcHJvdmlkZWQsIHRoZSBsYXN0CisJY29tcG9uZW50IGluIHRoZSBwNCBkZXBvdCBwYXRoIGlzIHVzZWQgdG8gY3JlYXRlIGEgbmV3CisJZGlyZWN0b3J5LgorCistLWJhcmU6OgorCVBlcmZvcm0gYSBiYXJlIGNsb25lLiAgU2VlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdLgorCitTdWJtaXQgb3B0aW9ucworfn5+fn5+fn5+fn5+fn4KK1RoZXNlIG9wdGlvbnMgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5ICdnaXQgcDQgc3VibWl0JyBiZWhhdmlvci4KKworLS1vcmlnaW4gPGNvbW1pdD46OgorCVVwc3RyZWFtIGxvY2F0aW9uIGZyb20gd2hpY2ggY29tbWl0cyBhcmUgaWRlbnRpZmllZCB0byBzdWJtaXQgdG8KKwlwNC4gIEJ5IGRlZmF1bHQsIHRoaXMgaXMgdGhlIG1vc3QgcmVjZW50IHA0IGNvbW1pdCByZWFjaGFibGUKKwlmcm9tICdIRUFEJy4KKworLU06OgorCURldGVjdCByZW5hbWVzLiAgU2VlIGxpbmtnaXQ6Z2l0LWRpZmZbMV0uICBSZW5hbWVzIHdpbGwgYmUKKwlyZXByZXNlbnRlZCBpbiBwNCB1c2luZyBleHBsaWNpdCAnbW92ZScgb3BlcmF0aW9ucy4gIFRoZXJlCisJaXMgbm8gY29ycmVzcG9uZGluZyBvcHRpb24gdG8gZGV0ZWN0IGNvcGllcywgYnV0IHRoZXJlIGFyZQorCXZhcmlhYmxlcyBmb3IgYm90aCBtb3ZlcyBhbmQgY29waWVzLgorCistLXByZXNlcnZlLXVzZXI6OgorCVJlLWF1dGhvciBwNCBjaGFuZ2VzIGJlZm9yZSBzdWJtaXR0aW5nIHRvIHA0LiAgVGhpcyBvcHRpb24KKwlyZXF1aXJlcyBwNCBhZG1pbiBwcml2aWxlZ2VzLgorCistLWV4cG9ydC1sYWJlbHM6OgorCUV4cG9ydCB0YWdzIGZyb20gR2l0IGFzIHA0IGxhYmVscy4gVGFncyBmb3VuZCBpbiBHaXQgYXJlIGFwcGxpZWQKKwl0byB0aGUgcGVyZm9yY2Ugd29ya2luZyBkaXJlY3RvcnkuCisKKy1uOjoKKy0tZHJ5LXJ1bjo6CisJU2hvdyBqdXN0IHdoYXQgY29tbWl0cyB3b3VsZCBiZSBzdWJtaXR0ZWQgdG8gcDQ7IGRvIG5vdCBjaGFuZ2UKKwlzdGF0ZSBpbiBHaXQgb3IgcDQuCisKKy0tcHJlcGFyZS1wNC1vbmx5OjoKKwlBcHBseSBhIGNvbW1pdCB0byB0aGUgcDQgd29ya3NwYWNlLCBvcGVuaW5nLCBhZGRpbmcgYW5kIGRlbGV0aW5nCisJZmlsZXMgaW4gcDQgYXMgZm9yIGEgbm9ybWFsIHN1Ym1pdCBvcGVyYXRpb24uICBEbyBub3QgaXNzdWUgdGhlCisJZmluYWwgInA0IHN1Ym1pdCIsIGJ1dCBpbnN0ZWFkIHByaW50IGEgbWVzc2FnZSBhYm91dCBob3cgdG8KKwlzdWJtaXQgbWFudWFsbHkgb3IgcmV2ZXJ0LiAgVGhpcyBvcHRpb24gYWx3YXlzIHN0b3BzIGFmdGVyIHRoZQorCWZpcnN0IChvbGRlc3QpIGNvbW1pdC4gIEdpdCB0YWdzIGFyZSBub3QgZXhwb3J0ZWQgdG8gcDQuCisKKy0tY29uZmxpY3Q9KGFza3xza2lwfHF1aXQpOjoKKwlDb25mbGljdHMgY2FuIG9jY3VyIHdoZW4gYXBwbHlpbmcgYSBjb21taXQgdG8gcDQuICBXaGVuIHRoaXMKKwloYXBwZW5zLCB0aGUgZGVmYXVsdCBiZWhhdmlvciAoImFzayIpIGlzIHRvIHByb21wdCB3aGV0aGVyIHRvCisJc2tpcCB0aGlzIGNvbW1pdCBhbmQgY29udGludWUsIG9yIHF1aXQuICBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZAorCXRvIGJ5cGFzcyB0aGUgcHJvbXB0LCBjYXVzaW5nIGNvbmZsaWN0aW5nIGNvbW1pdHMgdG8gYmUgYXV0b21hdGljYWxseQorCXNraXBwZWQsIG9yIHRvIHF1aXQgdHJ5aW5nIHRvIGFwcGx5IGNvbW1pdHMsIHdpdGhvdXQgcHJvbXB0aW5nLgorCistLWJyYW5jaCA8YnJhbmNoPjo6CisJQWZ0ZXIgc3VibWl0dGluZywgc3luYyB0aGlzIG5hbWVkIGJyYW5jaCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisJcDQvbWFzdGVyLiAgU2VlIHRoZSAiU3luYyBvcHRpb25zIiBzZWN0aW9uIGFib3ZlIGZvciBtb3JlCisJaW5mb3JtYXRpb24uCisKK1JlYmFzZSBvcHRpb25zCit+fn5+fn5+fn5+fn5+fgorVGhlc2Ugb3B0aW9ucyBjYW4gYmUgdXNlZCB0byBtb2RpZnkgJ2dpdCBwNCByZWJhc2UnIGJlaGF2aW9yLgorCistLWltcG9ydC1sYWJlbHM6OgorCUltcG9ydCBwNCBsYWJlbHMuCisKK0RFUE9UIFBBVEggU1lOVEFYCistLS0tLS0tLS0tLS0tLS0tLQorVGhlIHA0IGRlcG90IHBhdGggYXJndW1lbnQgdG8gJ2dpdCBwNCBzeW5jJyBhbmQgJ2dpdCBwNCBjbG9uZScgY2FuCitiZSBvbmUgb3IgbW9yZSBzcGFjZS1zZXBhcmF0ZWQgcDQgZGVwb3QgcGF0aHMsIHdpdGggYW4gb3B0aW9uYWwKK3A0IHJldmlzaW9uIHNwZWNpZmllciBvbiB0aGUgZW5kOgorCisiLy9kZXBvdC9teS9wcm9qZWN0Ijo6CisgICAgSW1wb3J0IG9uZSBjb21taXQgd2l0aCBhbGwgZmlsZXMgaW4gdGhlICcjaGVhZCcgY2hhbmdlIHVuZGVyIHRoYXQgdHJlZS4KKworIi8vZGVwb3QvbXkvcHJvamVjdEBhbGwiOjoKKyAgICBJbXBvcnQgb25lIGNvbW1pdCBmb3IgZWFjaCBjaGFuZ2UgaW4gdGhlIGhpc3Rvcnkgb2YgdGhhdCBkZXBvdCBwYXRoLgorCisiLy9kZXBvdC9teS9wcm9qZWN0QDEsNiI6OgorICAgIEltcG9ydCBvbmx5IGNoYW5nZXMgMSB0aHJvdWdoIDYuCisKKyIvL2RlcG90L3Byb2oxQGFsbCAvL2RlcG90L3Byb2oyQGFsbCI6OgorICAgIEltcG9ydCBhbGwgY2hhbmdlcyBmcm9tIGJvdGggbmFtZWQgZGVwb3QgcGF0aHMgaW50byBhIHNpbmdsZQorICAgIHJlcG9zaXRvcnkuICBPbmx5IGZpbGVzIGJlbG93IHRoZXNlIGRpcmVjdG9yaWVzIGFyZSBpbmNsdWRlZC4KKyAgICBUaGVyZSBpcyBub3QgYSBzdWJkaXJlY3RvcnkgaW4gR2l0IGZvciBlYWNoICJwcm9qMSIgYW5kICJwcm9qMiIuCisgICAgWW91IG11c3QgdXNlIHRoZSAnLS1kZXN0aW5hdGlvbicgb3B0aW9uIHdoZW4gc3BlY2lmeWluZyBtb3JlCisgICAgdGhhbiBvbmUgZGVwb3QgcGF0aC4gIFRoZSByZXZpc2lvbiBzcGVjaWZpZXIgbXVzdCBiZSBzcGVjaWZpZWQKKyAgICBpZGVudGljYWxseSBvbiBlYWNoIGRlcG90IHBhdGguICBJZiB0aGVyZSBhcmUgZmlsZXMgaW4gdGhlCisgICAgZGVwb3QgcGF0aHMgd2l0aCB0aGUgc2FtZSBuYW1lLCB0aGUgcGF0aCB3aXRoIHRoZSBtb3N0IHJlY2VudGx5CisgICAgdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZSBmaWxlIGlzIHRoZSBvbmUgdGhhdCBhcHBlYXJzIGluIEdpdC4KKworU2VlICdwNCBoZWxwIHJldmlzaW9ucycgZm9yIHRoZSBmdWxsIHN5bnRheCBvZiBwNCByZXZpc2lvbiBzcGVjaWZpZXJzLgorCisKK0NMSUVOVCBTUEVDCistLS0tLS0tLS0tLQorVGhlIHA0IGNsaWVudCBzcGVjaWZpY2F0aW9uIGlzIG1haW50YWluZWQgd2l0aCB0aGUgJ3A0IGNsaWVudCcgY29tbWFuZAorYW5kIGNvbnRhaW5zIGFtb25nIG90aGVyIGZpZWxkcywgYSBWaWV3IHRoYXQgc3BlY2lmaWVzIGhvdyB0aGUgZGVwb3QKK2lzIG1hcHBlZCBpbnRvIHRoZSBjbGllbnQgcmVwb3NpdG9yeS4gIFRoZSAnY2xvbmUnIGFuZCAnc3luYycgY29tbWFuZHMKK2NhbiBjb25zdWx0IHRoZSBjbGllbnQgc3BlYyB3aGVuIGdpdmVuIHRoZSAnLS11c2UtY2xpZW50LXNwZWMnIG9wdGlvbiBvcgord2hlbiB0aGUgdXNlQ2xpZW50U3BlYyB2YXJpYWJsZSBpcyB0cnVlLiAgQWZ0ZXIgJ2dpdCBwNCBjbG9uZScsIHRoZQordXNlQ2xpZW50U3BlYyB2YXJpYWJsZSBpcyBhdXRvbWF0aWNhbGx5IHNldCBpbiB0aGUgcmVwb3NpdG9yeQorY29uZmlndXJhdGlvbiBmaWxlLiAgVGhpcyBhbGxvd3MgZnV0dXJlICdnaXQgcDQgc3VibWl0JyBjb21tYW5kcyB0bword29yayBwcm9wZXJseTsgdGhlIHN1Ym1pdCBjb21tYW5kIGxvb2tzIG9ubHkgYXQgdGhlIHZhcmlhYmxlIGFuZCBkb2VzCitub3QgaGF2ZSBhIGNvbW1hbmQtbGluZSBvcHRpb24uCisKK1RoZSBmdWxsIHN5bnRheCBmb3IgYSBwNCB2aWV3IGlzIGRvY3VtZW50ZWQgaW4gJ3A0IGhlbHAgdmlld3MnLiAgJ2dpdCBwNCcKK2tub3dzIG9ubHkgYSBzdWJzZXQgb2YgdGhlIHZpZXcgc3ludGF4LiAgSXQgdW5kZXJzdGFuZHMgbXVsdGktbGluZQorbWFwcGluZ3MsIG92ZXJsYXlzIHdpdGggJysnLCBleGNsdXNpb25zIHdpdGggJy0nIGFuZCBkb3VibGUtcXVvdGVzCithcm91bmQgd2hpdGVzcGFjZS4gIE9mIHRoZSBwb3NzaWJsZSB3aWxkY2FyZHMsICdnaXQgcDQnIG9ubHkgaGFuZGxlcworJy4uLicsIGFuZCBvbmx5IHdoZW4gaXQgaXMgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aC4gICdnaXQgcDQnIHdpbGwgY29tcGxhaW4KK2lmIGl0IGVuY291bnRlcnMgYW4gdW5oYW5kbGVkIHdpbGRjYXJkLgorCitCdWdzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBvdmVybGFwIG1hcHBpbmdzIGV4aXN0LiAgSWYgbXVsdGlwbGUgZGVwb3QKK3BhdGhzIG1hcCB0aHJvdWdoIG92ZXJsYXlzIHRvIHRoZSBzYW1lIGxvY2F0aW9uIGluIHRoZSByZXBvc2l0b3J5LAorJ2dpdCBwNCcgY2FuIGNob29zZSB0aGUgd3Jvbmcgb25lLiAgVGhpcyBpcyBoYXJkIHRvIHNvbHZlIHdpdGhvdXQKK2RlZGljYXRpbmcgYSBjbGllbnQgc3BlYyBqdXN0IGZvciAnZ2l0IHA0Jy4KKworVGhlIG5hbWUgb2YgdGhlIGNsaWVudCBjYW4gYmUgZ2l2ZW4gdG8gJ2dpdCBwNCcgaW4gbXVsdGlwbGUgd2F5cy4gIFRoZQordmFyaWFibGUgJ2dpdC1wNC5jbGllbnQnIHRha2VzIHByZWNlZGVuY2UgaWYgaXQgZXhpc3RzLiAgT3RoZXJ3aXNlLAorbm9ybWFsIHA0IG1lY2hhbmlzbXMgb2YgZGV0ZXJtaW5pbmcgdGhlIGNsaWVudCBhcmUgdXNlZDogIGVudmlyb25tZW50Cit2YXJpYWJsZSBQNENMSUVOVCwgYSBmaWxlIHJlZmVyZW5jZWQgYnkgUDRDT05GSUcsIG9yIHRoZSBsb2NhbCBob3N0IG5hbWUuCisKKworQlJBTkNIIERFVEVDVElPTgorLS0tLS0tLS0tLS0tLS0tLQorUDQgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBjb25jZXB0IG9mIGEgYnJhbmNoIGFzIEdpdC4gIEluc3RlYWQsCitwNCBvcmdhbml6ZXMgaXRzIGNvbnRlbnQgYXMgYSBkaXJlY3RvcnkgdHJlZSwgd2hlcmUgYnkgY29udmVudGlvbgorZGlmZmVyZW50IGxvZ2ljYWwgYnJhbmNoZXMgYXJlIGluIGRpZmZlcmVudCBsb2NhdGlvbnMgaW4gdGhlIHRyZWUuCitUaGUgJ3A0IGJyYW5jaCcgY29tbWFuZCBpcyB1c2VkIHRvIG1haW50YWluIG1hcHBpbmdzIGJldHdlZW4KK2RpZmZlcmVudCBhcmVhcyBpbiB0aGUgdHJlZSwgYW5kIGluZGljYXRlIHJlbGF0ZWQgY29udGVudC4gICdnaXQgcDQnCitjYW4gdXNlIHRoZXNlIG1hcHBpbmdzIHRvIGRldGVybWluZSBicmFuY2ggcmVsYXRpb25zaGlwcy4KKworSWYgeW91IGhhdmUgYSByZXBvc2l0b3J5IHdoZXJlIGFsbCB0aGUgYnJhbmNoZXMgb2YgaW50ZXJlc3QgZXhpc3QgYXMKK3N1YmRpcmVjdG9yaWVzIG9mIGEgc2luZ2xlIGRlcG90IHBhdGgsIHlvdSBjYW4gdXNlICctLWRldGVjdC1icmFuY2hlcycKK3doZW4gY2xvbmluZyBvciBzeW5jaW5nIHRvIGhhdmUgJ2dpdCBwNCcgYXV0b21hdGljYWxseSBmaW5kCitzdWJkaXJlY3RvcmllcyBpbiBwNCwgYW5kIHRvIGdlbmVyYXRlIHRoZXNlIGFzIGJyYW5jaGVzIGluIEdpdC4KKworRm9yIGV4YW1wbGUsIGlmIHRoZSBQNCByZXBvc2l0b3J5IHN0cnVjdHVyZSBpczoKKy0tLS0KKy8vZGVwb3QvbWFpbi8uLi4KKy8vZGVwb3QvYnJhbmNoMS8uLi4KKy0tLS0KKworQW5kICJwNCBicmFuY2ggLW8gYnJhbmNoMSIgc2hvd3MgYSBWaWV3IGxpbmUgdGhhdCBsb29rcyBsaWtlOgorLS0tLQorLy9kZXBvdC9tYWluLy4uLiAvL2RlcG90L2JyYW5jaDEvLi4uCistLS0tCisKK1RoZW4gdGhpcyAnZ2l0IHA0IGNsb25lJyBjb21tYW5kOgorLS0tLQorZ2l0IHA0IGNsb25lIC0tZGV0ZWN0LWJyYW5jaGVzIC8vZGVwb3RAYWxsCistLS0tCitwcm9kdWNlcyBhIHNlcGFyYXRlIGJyYW5jaCBpbiAncmVmcy9yZW1vdGVzL3A0LycgZm9yIC8vZGVwb3QvbWFpbiwKK2NhbGxlZCAnbWFzdGVyJywgYW5kIG9uZSBmb3IgLy9kZXBvdC9icmFuY2gxIGNhbGxlZCAnZGVwb3QvYnJhbmNoMScuCisKK0hvd2V2ZXIsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY3JlYXRlIGJyYW5jaGVzIGluIHA0IHRvIGJlIGFibGUgdG8gdXNlCit0aGVtIGxpa2UgYnJhbmNoZXMuICBCZWNhdXNlIGl0IGlzIGRpZmZpY3VsdCB0byBpbmZlciBicmFuY2gKK3JlbGF0aW9uc2hpcHMgYXV0b21hdGljYWxseSwgYSBHaXQgY29uZmlndXJhdGlvbiBzZXR0aW5nCisnZ2l0LXA0LmJyYW5jaExpc3QnIGNhbiBiZSB1c2VkIHRvIGV4cGxpY2l0bHkgaWRlbnRpZnkgYnJhbmNoCityZWxhdGlvbnNoaXBzLiAgSXQgaXMgYSBsaXN0IG9mICJzb3VyY2U6ZGVzdGluYXRpb24iIHBhaXJzLCBsaWtlIGEKK3NpbXBsZSBwNCBicmFuY2ggc3BlY2lmaWNhdGlvbiwgd2hlcmUgdGhlICJzb3VyY2UiIGFuZCAiZGVzdGluYXRpb24iIGFyZQordGhlIHBhdGggZWxlbWVudHMgaW4gdGhlIHA0IHJlcG9zaXRvcnkuICBUaGUgZXhhbXBsZSBhYm92ZSByZWxpZWQgb24gdGhlCitwcmVzZW5jZSBvZiB0aGUgcDQgYnJhbmNoLiAgV2l0aG91dCBwNCBicmFuY2hlcywgdGhlIHNhbWUgcmVzdWx0IHdpbGwKK29jY3VyIHdpdGg6CistLS0tCitnaXQgaW5pdCBkZXBvdAorY2QgZGVwb3QKK2dpdCBjb25maWcgZ2l0LXA0LmJyYW5jaExpc3QgbWFpbjpicmFuY2gxCitnaXQgcDQgY2xvbmUgLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgLgorLS0tLQorCisKK1BFUkZPUk1BTkNFCistLS0tLS0tLS0tLQorVGhlIGZhc3QtaW1wb3J0IG1lY2hhbmlzbSB1c2VkIGJ5ICdnaXQgcDQnIGNyZWF0ZXMgb25lIHBhY2sgZmlsZSBmb3IKK2VhY2ggaW52b2NhdGlvbiBvZiAnZ2l0IHA0IHN5bmMnLiAgTm9ybWFsbHksIEdpdCBnYXJiYWdlIGNvbXByZXNzaW9uCisobGlua2dpdDpnaXQtZ2NbMV0pIGF1dG9tYXRpY2FsbHkgY29tcHJlc3NlcyB0aGVzZSB0byBmZXdlciBwYWNrIGZpbGVzLAorYnV0IGV4cGxpY2l0IGludm9jYXRpb24gb2YgJ2dpdCByZXBhY2sgLWFkZicgbWF5IGltcHJvdmUgcGVyZm9ybWFuY2UuCisKKworQ09ORklHVVJBVElPTiBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgZm9sbG93aW5nIGNvbmZpZyBzZXR0aW5ncyBjYW4gYmUgdXNlZCB0byBtb2RpZnkgJ2dpdCBwNCcgYmVoYXZpb3IuCitUaGV5IGFsbCBhcmUgaW4gdGhlICdnaXQtcDQnIHNlY3Rpb24uCisKK0dlbmVyYWwgdmFyaWFibGVzCit+fn5+fn5+fn5+fn5+fn5+fgorZ2l0LXA0LnVzZXI6OgorCVVzZXIgc3BlY2lmaWVkIGFzIGFuIG9wdGlvbiB0byBhbGwgcDQgY29tbWFuZHMsIHdpdGggJy11IDx1c2VyPicuCisJVGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdQNFVTRVInIGNhbiBiZSB1c2VkIGluc3RlYWQuCisKK2dpdC1wNC5wYXNzd29yZDo6CisJUGFzc3dvcmQgc3BlY2lmaWVkIGFzIGFuIG9wdGlvbiB0byBhbGwgcDQgY29tbWFuZHMsIHdpdGgKKwknLVAgPHBhc3N3b3JkPicuCisJVGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdQNFBBU1MnIGNhbiBiZSB1c2VkIGluc3RlYWQuCisKK2dpdC1wNC5wb3J0OjoKKwlQb3J0IHNwZWNpZmllZCBhcyBhbiBvcHRpb24gdG8gYWxsIHA0IGNvbW1hbmRzLCB3aXRoCisJJy1wIDxwb3J0PicuCisJVGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdQNFBPUlQnIGNhbiBiZSB1c2VkIGluc3RlYWQuCisKK2dpdC1wNC5ob3N0OjoKKwlIb3N0IHNwZWNpZmllZCBhcyBhbiBvcHRpb24gdG8gYWxsIHA0IGNvbW1hbmRzLCB3aXRoCisJJy1oIDxob3N0PicuCisJVGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdQNEhPU1QnIGNhbiBiZSB1c2VkIGluc3RlYWQuCisKK2dpdC1wNC5jbGllbnQ6OgorCUNsaWVudCBzcGVjaWZpZWQgYXMgYW4gb3B0aW9uIHRvIGFsbCBwNCBjb21tYW5kcywgd2l0aAorCSctYyA8Y2xpZW50PicsIGluY2x1ZGluZyB0aGUgY2xpZW50IHNwZWMuCisKK0Nsb25lIGFuZCBzeW5jIHZhcmlhYmxlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitnaXQtcDQuc3luY0Zyb21PcmlnaW46OgorCUJlY2F1c2UgaW1wb3J0aW5nIGNvbW1pdHMgZnJvbSBvdGhlciBHaXQgcmVwb3NpdG9yaWVzIGlzIG11Y2ggZmFzdGVyCisJdGhhbiBpbXBvcnRpbmcgdGhlbSBmcm9tIHA0LCBhIG1lY2hhbmlzbSBleGlzdHMgdG8gZmluZCBwNCBjaGFuZ2VzCisJZmlyc3QgaW4gR2l0IHJlbW90ZXMuICBJZiBicmFuY2hlcyBleGlzdCB1bmRlciAncmVmcy9yZW1vdGUvb3JpZ2luL3A0JywKKwl0aG9zZSB3aWxsIGJlIGZldGNoZWQgYW5kIHVzZWQgd2hlbiBzeW5jaW5nIGZyb20gcDQuICBUaGlzCisJdmFyaWFibGUgY2FuIGJlIHNldCB0byAnZmFsc2UnIHRvIGRpc2FibGUgdGhpcyBiZWhhdmlvci4KKworZ2l0LXA0LmJyYW5jaFVzZXI6OgorCU9uZSBwaGFzZSBpbiBicmFuY2ggZGV0ZWN0aW9uIGludm9sdmVzIGxvb2tpbmcgYXQgcDQgYnJhbmNoZXMKKwl0byBmaW5kIG5ldyBvbmVzIHRvIGltcG9ydC4gIEJ5IGRlZmF1bHQsIGFsbCBicmFuY2hlcyBhcmUKKwlpbnNwZWN0ZWQuICBUaGlzIG9wdGlvbiBsaW1pdHMgdGhlIHNlYXJjaCB0byBqdXN0IHRob3NlIG93bmVkCisJYnkgdGhlIHNpbmdsZSB1c2VyIG5hbWVkIGluIHRoZSB2YXJpYWJsZS4KKworZ2l0LXA0LmJyYW5jaExpc3Q6OgorCUxpc3Qgb2YgYnJhbmNoZXMgdG8gYmUgaW1wb3J0ZWQgd2hlbiBicmFuY2ggZGV0ZWN0aW9uIGlzCisJZW5hYmxlZC4gIEVhY2ggZW50cnkgc2hvdWxkIGJlIGEgcGFpciBvZiBicmFuY2ggbmFtZXMgc2VwYXJhdGVkCisJYnkgYSBjb2xvbiAoOikuICBUaGlzIGV4YW1wbGUgZGVjbGFyZXMgdGhhdCBib3RoIGJyYW5jaEEgYW5kCisJYnJhbmNoQiB3ZXJlIGNyZWF0ZWQgZnJvbSBtYWluOgorKworLS0tLS0tLS0tLS0tLQorZ2l0IGNvbmZpZyAgICAgICBnaXQtcDQuYnJhbmNoTGlzdCBtYWluOmJyYW5jaEEKK2dpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgbWFpbjpicmFuY2hCCistLS0tLS0tLS0tLS0tCisKK2dpdC1wNC5pZ25vcmVkUDRMYWJlbHM6OgorCUxpc3Qgb2YgcDQgbGFiZWxzIHRvIGlnbm9yZS4gVGhpcyBpcyBidWlsdCBhdXRvbWF0aWNhbGx5IGFzCisJdW5pbXBvcnRhYmxlIGxhYmVscyBhcmUgZGlzY292ZXJlZC4KKworZ2l0LXA0LmltcG9ydExhYmVsczo6CisJSW1wb3J0IHA0IGxhYmVscyBpbnRvIGdpdCwgYXMgcGVyIC0taW1wb3J0LWxhYmVscy4KKworZ2l0LXA0LmxhYmVsSW1wb3J0UmVnZXhwOjoKKwlPbmx5IHA0IGxhYmVscyBtYXRjaGluZyB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiB3aWxsIGJlIGltcG9ydGVkLiBUaGUKKwlkZWZhdWx0IHZhbHVlIGlzICdbYS16QS1aMC05X1wtLl0rJCcuCisKK2dpdC1wNC51c2VDbGllbnRTcGVjOjoKKwlTcGVjaWZ5IHRoYXQgdGhlIHA0IGNsaWVudCBzcGVjIHNob3VsZCBiZSB1c2VkIHRvIGlkZW50aWZ5IHA0CisJZGVwb3QgcGF0aHMgb2YgaW50ZXJlc3QuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyB0aGUKKwlvcHRpb24gJy0tdXNlLWNsaWVudC1zcGVjJy4gIFNlZSB0aGUgIkNMSUVOVCBTUEVDIiBzZWN0aW9uIGFib3ZlLgorCVRoaXMgdmFyaWFibGUgaXMgYSBib29sZWFuLCBub3QgdGhlIG5hbWUgb2YgYSBwNCBjbGllbnQuCisKK2dpdC1wNC5wYXRoRW5jb2Rpbmc6OgorCVBlcmZvcmNlIGtlZXBzIHRoZSBlbmNvZGluZyBvZiBhIHBhdGggYXMgZ2l2ZW4gYnkgdGhlIG9yaWdpbmF0aW5nIE9TLgorCUdpdCBleHBlY3RzIHBhdGhzIGVuY29kZWQgYXMgVVRGLTguIFVzZSB0aGlzIGNvbmZpZyB0byB0ZWxsIGdpdC1wNAorCXdoYXQgZW5jb2RpbmcgUGVyZm9yY2UgaGFkIHVzZWQgZm9yIHRoZSBwYXRocy4gVGhpcyBlbmNvZGluZyBpcyB1c2VkCisJdG8gdHJhbnNjb2RlIHRoZSBwYXRocyB0byBVVEYtOC4gQXMgYW4gZXhhbXBsZSwgUGVyZm9yY2Ugb24gV2luZG93cworCW9mdGVuIHVzZXMg4oCcY3AxMjUy4oCdIHRvIGVuY29kZSBwYXRoIG5hbWVzLgorCitnaXQtcDQubGFyZ2VGaWxlU3lzdGVtOjoKKwlTcGVjaWZ5IHRoZSBzeXN0ZW0gdGhhdCBpcyB1c2VkIGZvciBsYXJnZSAoYmluYXJ5KSBmaWxlcy4gUGxlYXNlIG5vdGUKKwl0aGF0IGxhcmdlIGZpbGUgc3lzdGVtcyBkbyBub3Qgc3VwcG9ydCB0aGUgJ2dpdCBwNCBzdWJtaXQnIGNvbW1hbmQuCisJT25seSBHaXQgTEZTIFsxXSBpcyBpbXBsZW1lbnRlZCByaWdodCBub3cuIERvd25sb2FkCisJYW5kIGluc3RhbGwgdGhlIEdpdCBMRlMgY29tbWFuZCBsaW5lIGV4dGVuc2lvbiB0byB1c2UgdGhpcyBvcHRpb24KKwlhbmQgY29uZmlndXJlIGl0IGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLS0KK2dpdCBjb25maWcgICAgICAgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBHaXRMRlMKKy0tLS0tLS0tLS0tLS0KKysKKwlbMV0gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vCisKK2dpdC1wNC5sYXJnZUZpbGVFeHRlbnNpb25zOjoKKwlBbGwgZmlsZXMgbWF0Y2hpbmcgYSBmaWxlIGV4dGVuc2lvbiBpbiB0aGUgbGlzdCB3aWxsIGJlIHByb2Nlc3NlZAorCWJ5IHRoZSBsYXJnZSBmaWxlIHN5c3RlbS4gRG8gbm90IHByZWZpeCB0aGUgZXh0ZW5zaW9ucyB3aXRoICcuJy4KKworZ2l0LXA0LmxhcmdlRmlsZVRocmVzaG9sZDo6CisJQWxsIGZpbGVzIHdpdGggYW4gdW5jb21wcmVzc2VkIHNpemUgZXhjZWVkaW5nIHRoZSB0aHJlc2hvbGQgd2lsbCBiZQorCXByb2Nlc3NlZCBieSB0aGUgbGFyZ2UgZmlsZSBzeXN0ZW0uIEJ5IGRlZmF1bHQgdGhlIHRocmVzaG9sZCBpcworCWRlZmluZWQgaW4gYnl0ZXMuIEFkZCB0aGUgc3VmZml4IGssIG0sIG9yIGcgdG8gY2hhbmdlIHRoZSB1bml0LgorCitnaXQtcDQubGFyZ2VGaWxlQ29tcHJlc3NlZFRocmVzaG9sZDo6CisJQWxsIGZpbGVzIHdpdGggYSBjb21wcmVzc2VkIHNpemUgZXhjZWVkaW5nIHRoZSB0aHJlc2hvbGQgd2lsbCBiZQorCXByb2Nlc3NlZCBieSB0aGUgbGFyZ2UgZmlsZSBzeXN0ZW0uIFRoaXMgb3B0aW9uIG1pZ2h0IHNsb3cgZG93bgorCXlvdXIgY2xvbmUvc3luYyBwcm9jZXNzLiBCeSBkZWZhdWx0IHRoZSB0aHJlc2hvbGQgaXMgZGVmaW5lZCBpbgorCWJ5dGVzLiBBZGQgdGhlIHN1ZmZpeCBrLCBtLCBvciBnIHRvIGNoYW5nZSB0aGUgdW5pdC4KKworZ2l0LXA0LmxhcmdlRmlsZVB1c2g6OgorCUJvb2xlYW4gdmFyaWFibGUgd2hpY2ggZGVmaW5lcyBpZiBsYXJnZSBmaWxlcyBhcmUgYXV0b21hdGljYWxseQorCXB1c2hlZCB0byBhIHNlcnZlci4KKworU3VibWl0IHZhcmlhYmxlcworfn5+fn5+fn5+fn5+fn5+fgorZ2l0LXA0LmRldGVjdFJlbmFtZXM6OgorCURldGVjdCByZW5hbWVzLiAgU2VlIGxpbmtnaXQ6Z2l0LWRpZmZbMV0uICBUaGlzIGNhbiBiZSB0cnVlLAorCWZhbHNlLCBvciBhIHNjb3JlIGFzIGV4cGVjdGVkIGJ5ICdnaXQgZGlmZiAtTScuCisKK2dpdC1wNC5kZXRlY3RDb3BpZXM6OgorCURldGVjdCBjb3BpZXMuICBTZWUgbGlua2dpdDpnaXQtZGlmZlsxXS4gIFRoaXMgY2FuIGJlIHRydWUsCisJZmFsc2UsIG9yIGEgc2NvcmUgYXMgZXhwZWN0ZWQgYnkgJ2dpdCBkaWZmIC1DJy4KKworZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlcjo6CisJRGV0ZWN0IGNvcGllcyBoYXJkZXIuICBTZWUgbGlua2dpdDpnaXQtZGlmZlsxXS4gIEEgYm9vbGVhbi4KKworZ2l0LXA0LnByZXNlcnZlVXNlcjo6CisJT24gc3VibWl0LCByZS1hdXRob3IgY2hhbmdlcyB0byByZWZsZWN0IHRoZSBHaXQgYXV0aG9yLAorCXJlZ2FyZGxlc3Mgb2Ygd2hvIGludm9rZXMgJ2dpdCBwNCBzdWJtaXQnLgorCitnaXQtcDQuYWxsb3dNaXNzaW5nUDRVc2Vyczo6CisJV2hlbiAncHJlc2VydmVVc2VyJyBpcyB0cnVlLCAnZ2l0IHA0JyBub3JtYWxseSBkaWVzIGlmIGl0CisJY2Fubm90IGZpbmQgYW4gYXV0aG9yIGluIHRoZSBwNCB1c2VyIG1hcC4gIFRoaXMgc2V0dGluZworCXN1Ym1pdHMgdGhlIGNoYW5nZSByZWdhcmRsZXNzLgorCitnaXQtcDQuc2tpcFN1Ym1pdEVkaXQ6OgorCVRoZSBzdWJtaXQgcHJvY2VzcyBpbnZva2VzIHRoZSBlZGl0b3IgYmVmb3JlIGVhY2ggcDQgY2hhbmdlCisJaXMgc3VibWl0dGVkLiAgSWYgdGhpcyBzZXR0aW5nIGlzIHRydWUsIHRob3VnaCwgdGhlIGVkaXRpbmcKKwlzdGVwIGlzIHNraXBwZWQuCisKK2dpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrOjoKKwlBZnRlciBlZGl0aW5nIHRoZSBwNCBjaGFuZ2UgbWVzc2FnZSwgJ2dpdCBwNCcgbWFrZXMgc3VyZSB0aGF0CisJdGhlIGRlc2NyaXB0aW9uIHJlYWxseSB3YXMgY2hhbmdlZCBieSBsb29raW5nIGF0IHRoZSBmaWxlCisJbW9kaWZpY2F0aW9uIHRpbWUuICBUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGF0IHRlc3QuCisKK2dpdC1wNC5hbGxvd1N1Ym1pdDo6CisJQnkgZGVmYXVsdCwgYW55IGJyYW5jaCBjYW4gYmUgdXNlZCBhcyB0aGUgc291cmNlIGZvciBhICdnaXQgcDQKKwlzdWJtaXQnIG9wZXJhdGlvbi4gIFRoaXMgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgaWYgc2V0LCBwZXJtaXRzIG9ubHkKKwl0aGUgbmFtZWQgYnJhbmNoZXMgdG8gYmUgdXNlZCBhcyBzdWJtaXQgc291cmNlcy4gIEJyYW5jaCBuYW1lcworCW11c3QgYmUgdGhlIHNob3J0IG5hbWVzIChubyAicmVmcy9oZWFkcy8iKSwgYW5kIHNob3VsZCBiZQorCXNlcGFyYXRlZCBieSBjb21tYXMgKCIsIiksIHdpdGggbm8gc3BhY2VzLgorCitnaXQtcDQuc2tpcFVzZXJOYW1lQ2hlY2s6OgorCUlmIHRoZSB1c2VyIHJ1bm5pbmcgJ2dpdCBwNCBzdWJtaXQnIGRvZXMgbm90IGV4aXN0IGluIHRoZSBwNAorCXVzZXIgbWFwLCAnZ2l0IHA0JyBleGl0cy4gIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGZvcmNlCisJc3VibWlzc2lvbiByZWdhcmRsZXNzLgorCitnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXA6OgorCUlmIGVuYWJsZWQsICdnaXQgcDQgc3VibWl0JyB3aWxsIGF0dGVtcHQgdG8gY2xlYW51cCBSQ1Mga2V5d29yZHMKKwkoJEhlYWRlciQsIGV0YykuIFRoZXNlIHdvdWxkIG90aGVyd2lzZSBjYXVzZSBtZXJnZSBjb25mbGljdHMgYW5kIHByZXZlbnQKKwl0aGUgc3VibWl0IGdvaW5nIGFoZWFkLiBUaGlzIG9wdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBleHBlcmltZW50YWwgYXQKKwlwcmVzZW50LgorCitnaXQtcDQuZXhwb3J0TGFiZWxzOjoKKwlFeHBvcnQgR2l0IHRhZ3MgdG8gcDQgbGFiZWxzLCBhcyBwZXIgLS1leHBvcnQtbGFiZWxzLgorCitnaXQtcDQubGFiZWxFeHBvcnRSZWdleHA6OgorCU9ubHkgcDQgbGFiZWxzIG1hdGNoaW5nIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwgYmUgZXhwb3J0ZWQuIFRoZQorCWRlZmF1bHQgdmFsdWUgaXMgJ1thLXpBLVowLTlfXC0uXSskJy4KKworZ2l0LXA0LmNvbmZsaWN0OjoKKwlTcGVjaWZ5IHN1Ym1pdCBiZWhhdmlvciB3aGVuIGEgY29uZmxpY3Qgd2l0aCBwNCBpcyBmb3VuZCwgYXMgcGVyCisJLS1jb25mbGljdC4gIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzICdhc2snLgorCitJTVBMRU1FTlRBVElPTiBERVRBSUxTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqIENoYW5nZXNldHMgZnJvbSBwNCBhcmUgaW1wb3J0ZWQgdXNpbmcgR2l0IGZhc3QtaW1wb3J0LgorKiBDbG9uaW5nIG9yIHN5bmNpbmcgZG9lcyBub3QgcmVxdWlyZSBhIHA0IGNsaWVudDsgZmlsZSBjb250ZW50cyBhcmUKKyAgY29sbGVjdGVkIHVzaW5nICdwNCBwcmludCcuCisqIFN1Ym1pdHRpbmcgcmVxdWlyZXMgYSBwNCBjbGllbnQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgc2FtZSBsb2NhdGlvbgorICBhcyB0aGUgR2l0IHJlcG9zaXRvcnkuICBQYXRjaGVzIGFyZSBhcHBsaWVkLCBvbmUgYXQgYSB0aW1lLCB0bworICB0aGlzIHA0IGNsaWVudCBhbmQgc3VibWl0dGVkIGZyb20gdGhlcmUuCisqIEVhY2ggY29tbWl0IGltcG9ydGVkIGJ5ICdnaXQgcDQnIGhhcyBhIGxpbmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nCisgIG1lc3NhZ2UgaW5kaWNhdGluZyB0aGUgcDQgZGVwb3QgbG9jYXRpb24gYW5kIGNoYW5nZSBudW1iZXIuICBUaGlzCisgIGxpbmUgaXMgdXNlZCBieSBsYXRlciAnZ2l0IHA0IHN5bmMnIG9wZXJhdGlvbnMgdG8ga25vdyB3aGljaCBwNAorICBjaGFuZ2VzIGFyZSBuZXcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYWNrLW9iamVjdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmVhNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1vYmplY3RzLnR4dApAQCAtMCwwICsxLDI0MSBAQAorZ2l0LXBhY2stb2JqZWN0cygxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcGFjay1vYmplY3RzIC0gQ3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgb2Ygb2JqZWN0cworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwYWNrLW9iamVjdHMnIFstcSB8IC0tcHJvZ3Jlc3MgfCAtLWFsbC1wcm9ncmVzc10gWy0tYWxsLXByb2dyZXNzLWltcGxpZWRdCisJWy0tbm8tcmV1c2UtZGVsdGFdIFstLWRlbHRhLWJhc2Utb2Zmc2V0XSBbLS1ub24tZW1wdHldCisJWy0tbG9jYWxdIFstLWluY3JlbWVudGFsXSBbLS13aW5kb3c9PG4+XSBbLS1kZXB0aD08bj5dCisJWy0tcmV2cyBbLS11bnBhY2tlZCB8IC0tYWxsXV0gWy0tc3Rkb3V0IHwgYmFzZS1uYW1lXQorCVstLXNoYWxsb3ddIFstLWtlZXAtdHJ1ZS1wYXJlbnRzXSA8IG9iamVjdC1saXN0CisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitSZWFkcyBsaXN0IG9mIG9iamVjdHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIGFuZCB3cml0ZXMgYSBwYWNrZWQKK2FyY2hpdmUgd2l0aCBzcGVjaWZpZWQgYmFzZS1uYW1lLCBvciB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCitBIHBhY2tlZCBhcmNoaXZlIGlzIGFuIGVmZmljaWVudCB3YXkgdG8gdHJhbnNmZXIgYSBzZXQgb2Ygb2JqZWN0cworYmV0d2VlbiB0d28gcmVwb3NpdG9yaWVzIGFzIHdlbGwgYXMgYW4gYWNjZXNzIGVmZmljaWVudCBhcmNoaXZhbAorZm9ybWF0LiAgSW4gYSBwYWNrZWQgYXJjaGl2ZSwgYW4gb2JqZWN0IGlzIGVpdGhlciBzdG9yZWQgYXMgYQorY29tcHJlc3NlZCB3aG9sZSBvciBhcyBhIGRpZmZlcmVuY2UgZnJvbSBzb21lIG90aGVyIG9iamVjdC4KK1RoZSBsYXR0ZXIgaXMgb2Z0ZW4gY2FsbGVkIGEgZGVsdGEuCisKK1RoZSBwYWNrZWQgYXJjaGl2ZSBmb3JtYXQgKC5wYWNrKSBpcyBkZXNpZ25lZCB0byBiZSBzZWxmLWNvbnRhaW5lZAorc28gdGhhdCBpdCBjYW4gYmUgdW5wYWNrZWQgd2l0aG91dCBhbnkgZnVydGhlciBpbmZvcm1hdGlvbi4gVGhlcmVmb3JlLAorZWFjaCBvYmplY3QgdGhhdCBhIGRlbHRhIGRlcGVuZHMgdXBvbiBtdXN0IGJlIHByZXNlbnQgd2l0aGluIHRoZSBwYWNrLgorCitBIHBhY2sgaW5kZXggZmlsZSAoLmlkeCkgaXMgZ2VuZXJhdGVkIGZvciBmYXN0LCByYW5kb20gYWNjZXNzIHRvIHRoZQorb2JqZWN0cyBpbiB0aGUgcGFjay4gUGxhY2luZyBib3RoIHRoZSBpbmRleCBmaWxlICguaWR4KSBhbmQgdGhlIHBhY2tlZAorYXJjaGl2ZSAoLnBhY2spIGluIHRoZSBwYWNrLyBzdWJkaXJlY3Rvcnkgb2YgJEdJVF9PQkpFQ1RfRElSRUNUT1JZIChvcgorYW55IG9mIHRoZSBkaXJlY3RvcmllcyBvbiAkR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVMpCitlbmFibGVzIEdpdCB0byByZWFkIGZyb20gdGhlIHBhY2sgYXJjaGl2ZS4KKworVGhlICdnaXQgdW5wYWNrLW9iamVjdHMnIGNvbW1hbmQgY2FuIHJlYWQgdGhlIHBhY2tlZCBhcmNoaXZlIGFuZAorZXhwYW5kIHRoZSBvYmplY3RzIGNvbnRhaW5lZCBpbiB0aGUgcGFjayBpbnRvICJvbmUtZmlsZQorb25lLW9iamVjdCIgZm9ybWF0OyB0aGlzIGlzIHR5cGljYWxseSBkb25lIGJ5IHRoZSBzbWFydC1wdWxsCitjb21tYW5kcyB3aGVuIGEgcGFjayBpcyBjcmVhdGVkIG9uLXRoZS1mbHkgZm9yIGVmZmljaWVudCBuZXR3b3JrCit0cmFuc3BvcnQgYnkgdGhlaXIgcGVlcnMuCisKKworT1BUSU9OUworLS0tLS0tLQorYmFzZS1uYW1lOjoKKwlXcml0ZSBpbnRvIGEgcGFpciBvZiBmaWxlcyAoLnBhY2sgYW5kIC5pZHgpLCB1c2luZworCTxiYXNlLW5hbWU+IHRvIGRldGVybWluZSB0aGUgbmFtZSBvZiB0aGUgY3JlYXRlZCBmaWxlLgorCVdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgdGhlIHR3byBmaWxlcyBhcmUgd3JpdHRlbiBpbgorCTxiYXNlLW5hbWU+LTxTSEEtMT4ue3BhY2ssaWR4fSBmaWxlcy4gIDxTSEEtMT4gaXMgYSBoYXNoCisJYmFzZWQgb24gdGhlIHBhY2sgY29udGVudCBhbmQgaXMgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQKKwlvdXRwdXQgb2YgdGhlIGNvbW1hbmQuCisKKy0tc3Rkb3V0OjoKKwlXcml0ZSB0aGUgcGFjayBjb250ZW50cyAod2hhdCB3b3VsZCBoYXZlIGJlZW4gd3JpdHRlbiB0bworCS5wYWNrIGZpbGUpIG91dCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorCistLXJldnM6OgorCVJlYWQgdGhlIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwgaW5zdGVhZCBvZgorCWluZGl2aWR1YWwgb2JqZWN0IG5hbWVzLiAgVGhlIHJldmlzaW9uIGFyZ3VtZW50cyBhcmUgcHJvY2Vzc2VkCisJdGhlIHNhbWUgd2F5IGFzICdnaXQgcmV2LWxpc3QnIHdpdGggdGhlIGAtLW9iamVjdHNgIGZsYWcKKwl1c2VzIGl0cyBgY29tbWl0YCBhcmd1bWVudHMgdG8gYnVpbGQgdGhlIGxpc3Qgb2Ygb2JqZWN0cyBpdAorCW91dHB1dHMuICBUaGUgb2JqZWN0cyBvbiB0aGUgcmVzdWx0aW5nIGxpc3QgYXJlIHBhY2tlZC4KKwlCZXNpZGVzIHJldmlzaW9ucywgYC0tbm90YCBvciBgLS1zaGFsbG93IDxTSEEtMT5gIGxpbmVzIGFyZQorCWFsc28gYWNjZXB0ZWQuCisKKy0tdW5wYWNrZWQ6OgorCVRoaXMgaW1wbGllcyBgLS1yZXZzYC4gIFdoZW4gcHJvY2Vzc2luZyB0aGUgbGlzdCBvZgorCXJldmlzaW9uIGFyZ3VtZW50cyByZWFkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBsaW1pdAorCXRoZSBvYmplY3RzIHBhY2tlZCB0byB0aG9zZSB0aGF0IGFyZSBub3QgYWxyZWFkeSBwYWNrZWQuCisKKy0tYWxsOjoKKwlUaGlzIGltcGxpZXMgYC0tcmV2c2AuICBJbiBhZGRpdGlvbiB0byB0aGUgbGlzdCBvZgorCXJldmlzaW9uIGFyZ3VtZW50cyByZWFkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBwcmV0ZW5kCisJYXMgaWYgYWxsIHJlZnMgdW5kZXIgYHJlZnMvYCBhcmUgc3BlY2lmaWVkIHRvIGJlCisJaW5jbHVkZWQuCisKKy0taW5jbHVkZS10YWc6OgorCUluY2x1ZGUgdW5hc2tlZC1mb3IgYW5ub3RhdGVkIHRhZ3MgaWYgdGhlIG9iamVjdCB0aGV5CisJcmVmZXJlbmNlIHdhcyBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2tmaWxlLiAgVGhpcworCWNhbiBiZSB1c2VmdWwgdG8gc2VuZCBuZXcgdGFncyB0byBuYXRpdmUgR2l0IGNsaWVudHMuCisKKy0td2luZG93PTxuPjo6CistLWRlcHRoPTxuPjo6CisJVGhlc2UgdHdvIG9wdGlvbnMgYWZmZWN0IGhvdyB0aGUgb2JqZWN0cyBjb250YWluZWQgaW4KKwl0aGUgcGFjayBhcmUgc3RvcmVkIHVzaW5nIGRlbHRhIGNvbXByZXNzaW9uLiAgVGhlCisJb2JqZWN0cyBhcmUgZmlyc3QgaW50ZXJuYWxseSBzb3J0ZWQgYnkgdHlwZSwgc2l6ZSBhbmQKKwlvcHRpb25hbGx5IG5hbWVzIGFuZCBjb21wYXJlZCBhZ2FpbnN0IHRoZSBvdGhlciBvYmplY3RzCisJd2l0aGluIC0td2luZG93IHRvIHNlZSBpZiB1c2luZyBkZWx0YSBjb21wcmVzc2lvbiBzYXZlcworCXNwYWNlLiAgLS1kZXB0aCBsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGg7IG1ha2luZworCWl0IHRvbyBkZWVwIGFmZmVjdHMgdGhlIHBlcmZvcm1hbmNlIG9uIHRoZSB1bnBhY2tlcgorCXNpZGUsIGJlY2F1c2UgZGVsdGEgZGF0YSBuZWVkcyB0byBiZSBhcHBsaWVkIHRoYXQgbWFueQorCXRpbWVzIHRvIGdldCB0byB0aGUgbmVjZXNzYXJ5IG9iamVjdC4KKwlUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgLS13aW5kb3cgaXMgMTAgYW5kIC0tZGVwdGggaXMgNTAuCisKKy0td2luZG93LW1lbW9yeT08bj46OgorCVRoaXMgb3B0aW9uIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgbGltaXQgb24gdG9wIG9mIGAtLXdpbmRvd2A7CisJdGhlIHdpbmRvdyBzaXplIHdpbGwgZHluYW1pY2FsbHkgc2NhbGUgZG93biBzbyBhcyB0byBub3QgdGFrZQorCXVwIG1vcmUgdGhhbiAnPG4+JyBieXRlcyBpbiBtZW1vcnkuICBUaGlzIGlzIHVzZWZ1bCBpbgorCXJlcG9zaXRvcmllcyB3aXRoIGEgbWl4IG9mIGxhcmdlIGFuZCBzbWFsbCBvYmplY3RzIHRvIG5vdCBydW4KKwlvdXQgb2YgbWVtb3J5IHdpdGggYSBsYXJnZSB3aW5kb3csIGJ1dCBzdGlsbCBiZSBhYmxlIHRvIHRha2UKKwlhZHZhbnRhZ2Ugb2YgdGhlIGxhcmdlIHdpbmRvdyBmb3IgdGhlIHNtYWxsZXIgb2JqZWN0cy4gIFRoZQorCXNpemUgY2FuIGJlIHN1ZmZpeGVkIHdpdGggImsiLCAibSIsIG9yICJnIi4KKwlgLS13aW5kb3ctbWVtb3J5PTBgIG1ha2VzIG1lbW9yeSB1c2FnZSB1bmxpbWl0ZWQsIHdoaWNoIGlzIHRoZQorCWRlZmF1bHQuCisKKy0tbWF4LXBhY2stc2l6ZT08bj46OgorCU1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUuIFRoZSBzaXplIGNhbiBiZSBzdWZmaXhlZCB3aXRoCisJImsiLCAibSIsIG9yICJnIi4gVGhlIG1pbmltdW0gc2l6ZSBhbGxvd2VkIGlzIGxpbWl0ZWQgdG8gMSBNaUIuCisJSWYgc3BlY2lmaWVkLCAgbXVsdGlwbGUgcGFja2ZpbGVzIG1heSBiZSBjcmVhdGVkLgorCVRoZSBkZWZhdWx0IGlzIHVubGltaXRlZCwgdW5sZXNzIHRoZSBjb25maWcgdmFyaWFibGUKKwlgcGFjay5wYWNrU2l6ZUxpbWl0YCBpcyBzZXQuCisKKy0taG9ub3ItcGFjay1rZWVwOjoKKwlUaGlzIGZsYWcgY2F1c2VzIGFuIG9iamVjdCBhbHJlYWR5IGluIGEgbG9jYWwgcGFjayB0aGF0CisJaGFzIGEgLmtlZXAgZmlsZSB0byBiZSBpZ25vcmVkLCBldmVuIGlmIGl0IHdvdWxkIGhhdmUKKwlvdGhlcndpc2UgYmVlbiBwYWNrZWQuCisKKy0taW5jcmVtZW50YWw6OgorCVRoaXMgZmxhZyBjYXVzZXMgYW4gb2JqZWN0IGFscmVhZHkgaW4gYSBwYWNrIHRvIGJlIGlnbm9yZWQKKwlldmVuIGlmIGl0IHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGJlZW4gcGFja2VkLgorCistLWxvY2FsOjoKKwlUaGlzIGZsYWcgY2F1c2VzIGFuIG9iamVjdCB0aGF0IGlzIGJvcnJvd2VkIGZyb20gYW4gYWx0ZXJuYXRlCisJb2JqZWN0IHN0b3JlIHRvIGJlIGlnbm9yZWQgZXZlbiBpZiBpdCB3b3VsZCBoYXZlIG90aGVyd2lzZSBiZWVuCisJcGFja2VkLgorCistLW5vbi1lbXB0eTo6CisgICAgICAgIE9ubHkgY3JlYXRlIGEgcGFja2VkIGFyY2hpdmUgaWYgaXQgd291bGQgY29udGFpbiBhdAorICAgICAgICBsZWFzdCBvbmUgb2JqZWN0LgorCistLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgLXEKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBmb3JjZXMgcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYKKwl0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlzIG5vdCBkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgorCistLWFsbC1wcm9ncmVzczo6CisJV2hlbiAtLXN0ZG91dCBpcyBzcGVjaWZpZWQgdGhlbiBwcm9ncmVzcyByZXBvcnQgaXMKKwlkaXNwbGF5ZWQgZHVyaW5nIHRoZSBvYmplY3QgY291bnQgYW5kIGNvbXByZXNzaW9uIHBoYXNlcworCWJ1dCBpbmhpYml0ZWQgZHVyaW5nIHRoZSB3cml0ZS1vdXQgcGhhc2UuIFRoZSByZWFzb24gaXMKKwl0aGF0IGluIHNvbWUgY2FzZXMgdGhlIG91dHB1dCBzdHJlYW0gaXMgZGlyZWN0bHkgbGlua2VkCisJdG8gYW5vdGhlciBjb21tYW5kIHdoaWNoIG1heSB3aXNoIHRvIGRpc3BsYXkgcHJvZ3Jlc3MKKwlzdGF0dXMgb2YgaXRzIG93biBhcyBpdCBwcm9jZXNzZXMgaW5jb21pbmcgcGFjayBkYXRhLgorCVRoaXMgZmxhZyBpcyBsaWtlIC0tcHJvZ3Jlc3MgZXhjZXB0IHRoYXQgaXQgZm9yY2VzIHByb2dyZXNzCisJcmVwb3J0IGZvciB0aGUgd3JpdGUtb3V0IHBoYXNlIGFzIHdlbGwgZXZlbiBpZiAtLXN0ZG91dCBpcworCXVzZWQuCisKKy0tYWxsLXByb2dyZXNzLWltcGxpZWQ6OgorCVRoaXMgaXMgdXNlZCB0byBpbXBseSAtLWFsbC1wcm9ncmVzcyB3aGVuZXZlciBwcm9ncmVzcyBkaXNwbGF5CisJaXMgYWN0aXZhdGVkLiAgVW5saWtlIC0tYWxsLXByb2dyZXNzIHRoaXMgZmxhZyBkb2Vzbid0IGFjdHVhbGx5CisJZm9yY2UgYW55IHByb2dyZXNzIGRpc3BsYXkgYnkgaXRzZWxmLgorCistcTo6CisJVGhpcyBmbGFnIG1ha2VzIHRoZSBjb21tYW5kIG5vdCB0byByZXBvcnQgaXRzIHByb2dyZXNzCisJb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4KKworLS1uby1yZXVzZS1kZWx0YTo6CisJV2hlbiBjcmVhdGluZyBhIHBhY2tlZCBhcmNoaXZlIGluIGEgcmVwb3NpdG9yeSB0aGF0CisJaGFzIGV4aXN0aW5nIHBhY2tzLCB0aGUgY29tbWFuZCByZXVzZXMgZXhpc3RpbmcgZGVsdGFzLgorCVRoaXMgc29tZXRpbWVzIHJlc3VsdHMgaW4gYSBzbGlnaHRseSBzdWJvcHRpbWFsIHBhY2suCisJVGhpcyBmbGFnIHRlbGxzIHRoZSBjb21tYW5kIG5vdCB0byByZXVzZSBleGlzdGluZyBkZWx0YXMKKwlidXQgY29tcHV0ZSB0aGVtIGZyb20gc2NyYXRjaC4KKworLS1uby1yZXVzZS1vYmplY3Q6OgorCVRoaXMgZmxhZyB0ZWxscyB0aGUgY29tbWFuZCBub3QgdG8gcmV1c2UgZXhpc3Rpbmcgb2JqZWN0IGRhdGEgYXQgYWxsLAorCWluY2x1ZGluZyBub24gZGVsdGlmaWVkIG9iamVjdCwgZm9yY2luZyByZWNvbXByZXNzaW9uIG9mIGV2ZXJ5dGhpbmcuCisJVGhpcyBpbXBsaWVzIC0tbm8tcmV1c2UtZGVsdGEuIFVzZWZ1bCBvbmx5IGluIHRoZSBvYnNjdXJlIGNhc2Ugd2hlcmUKKwl3aG9sZXNhbGUgZW5mb3JjZW1lbnQgb2YgYSBkaWZmZXJlbnQgY29tcHJlc3Npb24gbGV2ZWwgb24gdGhlCisJcGFja2VkIGRhdGEgaXMgZGVzaXJlZC4KKworLS1jb21wcmVzc2lvbj08bj46OgorCVNwZWNpZmllcyBjb21wcmVzc2lvbiBsZXZlbCBmb3IgbmV3bHktY29tcHJlc3NlZCBkYXRhIGluIHRoZQorCWdlbmVyYXRlZCBwYWNrLiAgSWYgbm90IHNwZWNpZmllZCwgIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgaXMKKwlkZXRlcm1pbmVkIGZpcnN0IGJ5IHBhY2suY29tcHJlc3Npb24sICB0aGVuIGJ5IGNvcmUuY29tcHJlc3Npb24sCisJYW5kIGRlZmF1bHRzIHRvIC0xLCAgdGhlIHpsaWIgZGVmYXVsdCwgIGlmIG5laXRoZXIgaXMgc2V0LgorCUFkZCAtLW5vLXJldXNlLW9iamVjdCBpZiB5b3Ugd2FudCB0byBmb3JjZSBhIHVuaWZvcm0gY29tcHJlc3Npb24KKwlsZXZlbCBvbiBhbGwgZGF0YSBubyBtYXR0ZXIgdGhlIHNvdXJjZS4KKworLS10aGluOjoKKwlDcmVhdGUgYSAidGhpbiIgcGFjayBieSBvbWl0dGluZyB0aGUgY29tbW9uIG9iamVjdHMgYmV0d2VlbiBhCisJc2VuZGVyIGFuZCBhIHJlY2VpdmVyIGluIG9yZGVyIHRvIHJlZHVjZSBuZXR3b3JrIHRyYW5zZmVyLiBUaGlzCisJb3B0aW9uIG9ubHkgbWFrZXMgc2Vuc2UgaW4gY29uanVuY3Rpb24gd2l0aCAtLXN0ZG91dC4KKysKK05vdGU6IEEgdGhpbiBwYWNrIHZpb2xhdGVzIHRoZSBwYWNrZWQgYXJjaGl2ZSBmb3JtYXQgYnkgb21pdHRpbmcKK3JlcXVpcmVkIG9iamVjdHMgYW5kIGlzIHRodXMgdW51c2FibGUgYnkgR2l0IHdpdGhvdXQgbWFraW5nIGl0CitzZWxmLWNvbnRhaW5lZC4gVXNlIGBnaXQgaW5kZXgtcGFjayAtLWZpeC10aGluYAorKHNlZSBsaW5rZ2l0OmdpdC1pbmRleC1wYWNrWzFdKSB0byByZXN0b3JlIHRoZSBzZWxmLWNvbnRhaW5lZCBwcm9wZXJ0eS4KKworLS1zaGFsbG93OjoKKwlPcHRpbWl6ZSBhIHBhY2sgdGhhdCB3aWxsIGJlIHByb3ZpZGVkIHRvIGEgY2xpZW50IHdpdGggYSBzaGFsbG93CisJcmVwb3NpdG9yeS4gIFRoaXMgb3B0aW9uLCBjb21iaW5lZCB3aXRoIC0tdGhpbiwgY2FuIHJlc3VsdCBpbiBhCisJc21hbGxlciBwYWNrIGF0IHRoZSBjb3N0IG9mIHNwZWVkLgorCistLWRlbHRhLWJhc2Utb2Zmc2V0OjoKKwlBIHBhY2tlZCBhcmNoaXZlIGNhbiBleHByZXNzIHRoZSBiYXNlIG9iamVjdCBvZiBhIGRlbHRhIGFzCisJZWl0aGVyIGEgMjAtYnl0ZSBvYmplY3QgbmFtZSBvciBhcyBhbiBvZmZzZXQgaW4gdGhlCisJc3RyZWFtLCBidXQgYW5jaWVudCB2ZXJzaW9ucyBvZiBHaXQgZG9uJ3QgdW5kZXJzdGFuZCB0aGUKKwlsYXR0ZXIuICBCeSBkZWZhdWx0LCAnZ2l0IHBhY2stb2JqZWN0cycgb25seSB1c2VzIHRoZQorCWZvcm1lciBmb3JtYXQgZm9yIGJldHRlciBjb21wYXRpYmlsaXR5LiAgVGhpcyBvcHRpb24KKwlhbGxvd3MgdGhlIGNvbW1hbmQgdG8gdXNlIHRoZSBsYXR0ZXIgZm9ybWF0IGZvcgorCWNvbXBhY3RuZXNzLiAgRGVwZW5kaW5nIG9uIHRoZSBhdmVyYWdlIGRlbHRhIGNoYWluCisJbGVuZ3RoLCB0aGlzIG9wdGlvbiB0eXBpY2FsbHkgc2hyaW5rcyB0aGUgcmVzdWx0aW5nCisJcGFja2ZpbGUgYnkgMy01IHBlci1jZW50LgorKworTm90ZTogUG9yY2VsYWluIGNvbW1hbmRzIHN1Y2ggYXMgYGdpdCBnY2AgKHNlZSBsaW5rZ2l0OmdpdC1nY1sxXSksCitgZ2l0IHJlcGFja2AgKHNlZSBsaW5rZ2l0OmdpdC1yZXBhY2tbMV0pIHBhc3MgdGhpcyBvcHRpb24gYnkgZGVmYXVsdAoraW4gbW9kZXJuIEdpdCB3aGVuIHRoZXkgcHV0IG9iamVjdHMgaW4geW91ciByZXBvc2l0b3J5IGludG8gcGFjayBmaWxlcy4KK1NvIGRvZXMgYGdpdCBidW5kbGVgIChzZWUgbGlua2dpdDpnaXQtYnVuZGxlWzFdKSB3aGVuIGl0IGNyZWF0ZXMgYSBidW5kbGUuCisKKy0tdGhyZWFkcz08bj46OgorCVNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdG8gc3Bhd24gd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QKKwlkZWx0YSBtYXRjaGVzLiAgVGhpcyByZXF1aXJlcyB0aGF0IHBhY2stb2JqZWN0cyBiZSBjb21waWxlZCB3aXRoCisJcHRocmVhZHMgb3RoZXJ3aXNlIHRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgd2l0aCBhIHdhcm5pbmcuCisJVGhpcyBpcyBtZWFudCB0byByZWR1Y2UgcGFja2luZyB0aW1lIG9uIG11bHRpcHJvY2Vzc29yIG1hY2hpbmVzLgorCVRoZSByZXF1aXJlZCBhbW91bnQgb2YgbWVtb3J5IGZvciB0aGUgZGVsdGEgc2VhcmNoIHdpbmRvdyBpcworCWhvd2V2ZXIgbXVsdGlwbGllZCBieSB0aGUgbnVtYmVyIG9mIHRocmVhZHMuCisJU3BlY2lmeWluZyAwIHdpbGwgY2F1c2UgR2l0IHRvIGF1dG8tZGV0ZWN0IHRoZSBudW1iZXIgb2YgQ1BVJ3MKKwlhbmQgc2V0IHRoZSBudW1iZXIgb2YgdGhyZWFkcyBhY2NvcmRpbmdseS4KKworLS1pbmRleC12ZXJzaW9uPTx2ZXJzaW9uPlssPG9mZnNldD5dOjoKKwlUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYnkgdGhlIHRlc3Qgc3VpdGUgb25seS4gSXQgYWxsb3dzCisJdG8gZm9yY2UgdGhlIHZlcnNpb24gZm9yIHRoZSBnZW5lcmF0ZWQgcGFjayBpbmRleCwgYW5kIHRvIGZvcmNlCisJNjQtYml0IGluZGV4IGVudHJpZXMgb24gb2JqZWN0cyBsb2NhdGVkIGFib3ZlIHRoZSBnaXZlbiBvZmZzZXQuCisKKy0ta2VlcC10cnVlLXBhcmVudHM6OgorCVdpdGggdGhpcyBvcHRpb24sIHBhcmVudHMgdGhhdCBhcmUgaGlkZGVuIGJ5IGdyYWZ0cyBhcmUgcGFja2VkCisJbmV2ZXJ0aGVsZXNzLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXJldi1saXN0WzFdCitsaW5rZ2l0OmdpdC1yZXBhY2tbMV0KK2xpbmtnaXQ6Z2l0LXBydW5lLXBhY2tlZFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVkdW5kYW50LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVkdW5kYW50LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjg2OWRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWR1bmRhbnQudHh0CkBAIC0wLDAgKzEsNTAgQEAKK2dpdC1wYWNrLXJlZHVuZGFudCgxKQorPT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1wYWNrLXJlZHVuZGFudCAtIEZpbmQgcmVkdW5kYW50IHBhY2sgZmlsZXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcGFjay1yZWR1bmRhbnQnIFsgLS12ZXJib3NlIF0gWyAtLWFsdC1vZGIgXSA8IC0tYWxsIHwgLnBhY2sgZmlsZW5hbWUgLi4uID4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGlzIHByb2dyYW0gY29tcHV0ZXMgd2hpY2ggcGFja3MgaW4geW91ciByZXBvc2l0b3J5CithcmUgcmVkdW5kYW50LiBUaGUgb3V0cHV0IGlzIHN1aXRhYmxlIGZvciBwaXBpbmcgdG8KK2B4YXJncyBybWAgaWYgeW91IGFyZSBpbiB0aGUgcm9vdCBvZiB0aGUgcmVwb3NpdG9yeS4KKworJ2dpdCBwYWNrLXJlZHVuZGFudCcgYWNjZXB0cyBhIGxpc3Qgb2Ygb2JqZWN0cyBvbiBzdGFuZGFyZCBpbnB1dC4gQW55IG9iamVjdHMKK2dpdmVuIHdpbGwgYmUgaWdub3JlZCB3aGVuIGNoZWNraW5nIHdoaWNoIHBhY2tzIGFyZSByZXF1aXJlZC4gVGhpcyBtYWtlcyB0aGUKK2ZvbGxvd2luZyBjb21tYW5kIHVzZWZ1bCB3aGVuIHdhbnRpbmcgdG8gcmVtb3ZlIHBhY2tzIHdoaWNoIGNvbnRhaW4gdW5yZWFjaGFibGUKK29iamVjdHMuCisKK2dpdCBmc2NrIC0tZnVsbCAtLXVucmVhY2hhYmxlIHwgY3V0IC1kICcgJyAtZjMgfCBcCitnaXQgcGFjay1yZWR1bmRhbnQgLS1hbGwgfCB4YXJncyBybQorCitPUFRJT05TCistLS0tLS0tCisKKworLS1hbGw6OgorCVByb2Nlc3NlcyBhbGwgcGFja3MuIEFueSBmaWxlbmFtZXMgb24gdGhlIGNvbW1hbmQgbGluZSBhcmUgaWdub3JlZC4KKworLS1hbHQtb2RiOjoKKwlEb24ndCByZXF1aXJlIG9iamVjdHMgcHJlc2VudCBpbiBwYWNrcyBmcm9tIGFsdGVybmF0ZSBvYmplY3QKKwlkaXJlY3RvcmllcyB0byBiZSBwcmVzZW50IGluIGxvY2FsIHBhY2tzLgorCistLXZlcmJvc2U6OgorCU91dHB1dHMgc29tZSBzdGF0aXN0aWNzIHRvIHN0ZGVyci4gSGFzIGEgc21hbGwgcGVyZm9ybWFuY2UgcGVuYWx0eS4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0KK2xpbmtnaXQ6Z2l0LXJlcGFja1sxXQorbGlua2dpdDpnaXQtcHJ1bmUtcGFja2VkWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGFjay1yZWZzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU0MDgxZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhY2stcmVmcy50eHQKQEAgLTAsMCArMSw3MyBAQAorZ2l0LXBhY2stcmVmcygxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcGFjay1yZWZzIC0gUGFjayBoZWFkcyBhbmQgdGFncyBmb3IgZWZmaWNpZW50IHJlcG9zaXRvcnkgYWNjZXNzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwYWNrLXJlZnMnIFstLWFsbF0gWy0tbm8tcHJ1bmVdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUcmFkaXRpb25hbGx5LCB0aXBzIG9mIGJyYW5jaGVzIGFuZCB0YWdzIChjb2xsZWN0aXZlbHkga25vd24gYXMKKydyZWZzJykgd2VyZSBzdG9yZWQgb25lIGZpbGUgcGVyIHJlZiBpbiBhIChzdWIpZGlyZWN0b3J5Cit1bmRlciBgJEdJVF9ESVIvcmVmc2AKK2RpcmVjdG9yeS4gIFdoaWxlIG1hbnkgYnJhbmNoIHRpcHMgdGVuZCB0byBiZSB1cGRhdGVkIG9mdGVuLAorbW9zdCB0YWdzIGFuZCBzb21lIGJyYW5jaCB0aXBzIGFyZSBuZXZlciB1cGRhdGVkLiAgV2hlbiBhCityZXBvc2l0b3J5IGhhcyBodW5kcmVkcyBvciB0aG91c2FuZHMgb2YgdGFncywgdGhpcworb25lLWZpbGUtcGVyLXJlZiBmb3JtYXQgYm90aCB3YXN0ZXMgc3RvcmFnZSBhbmQgaHVydHMKK3BlcmZvcm1hbmNlLgorCitUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBzb2x2ZSB0aGUgc3RvcmFnZSBhbmQgcGVyZm9ybWFuY2UKK3Byb2JsZW0gYnkgc3RvcmluZyB0aGUgcmVmcyBpbiBhIHNpbmdsZSBmaWxlLAorYCRHSVRfRElSL3BhY2tlZC1yZWZzYC4gIFdoZW4gYSByZWYgaXMgbWlzc2luZyBmcm9tIHRoZQordHJhZGl0aW9uYWwgYCRHSVRfRElSL3JlZnNgIGRpcmVjdG9yeSBoaWVyYXJjaHksIGl0IGlzIGxvb2tlZAordXAgaW4gdGhpcworZmlsZSBhbmQgdXNlZCBpZiBmb3VuZC4KKworU3Vic2VxdWVudCB1cGRhdGVzIHRvIGJyYW5jaGVzIGFsd2F5cyBjcmVhdGUgbmV3IGZpbGVzIHVuZGVyCitgJEdJVF9ESVIvcmVmc2AgZGlyZWN0b3J5IGhpZXJhcmNoeS4KKworQSByZWNvbW1lbmRlZCBwcmFjdGljZSB0byBkZWFsIHdpdGggYSByZXBvc2l0b3J5IHdpdGggdG9vIG1hbnkKK3JlZnMgaXMgdG8gcGFjayBpdHMgcmVmcyB3aXRoIGAtLWFsbGAgb25jZSwgYW5kCitvY2Nhc2lvbmFsbHkgcnVuIGBnaXQgcGFjay1yZWZzYC4gIFRhZ3MgYXJlIGJ5CitkZWZpbml0aW9uIHN0YXRpb25hcnkgYW5kIGFyZSBub3QgZXhwZWN0ZWQgdG8gY2hhbmdlLiAgQnJhbmNoCitoZWFkcyB3aWxsIGJlIHBhY2tlZCB3aXRoIHRoZSBpbml0aWFsIGBwYWNrLXJlZnMgLS1hbGxgLCBidXQKK29ubHkgdGhlIGN1cnJlbnRseSBhY3RpdmUgYnJhbmNoIGhlYWRzIHdpbGwgYmVjb21lIHVucGFja2VkLAorYW5kIHRoZSBuZXh0IGBwYWNrLXJlZnNgICh3aXRob3V0IGAtLWFsbGApIHdpbGwgbGVhdmUgdGhlbQordW5wYWNrZWQuCisKKworT1BUSU9OUworLS0tLS0tLQorCistLWFsbDo6CisKK1RoZSBjb21tYW5kIGJ5IGRlZmF1bHQgcGFja3MgYWxsIHRhZ3MgYW5kIHJlZnMgdGhhdCBhcmUgYWxyZWFkeQorcGFja2VkLCBhbmQgbGVhdmVzIG90aGVyIHJlZnMKK2Fsb25lLiAgVGhpcyBpcyBiZWNhdXNlIGJyYW5jaGVzIGFyZSBleHBlY3RlZCB0byBiZSBhY3RpdmVseQorZGV2ZWxvcGVkIGFuZCBwYWNraW5nIHRoZWlyIHRpcHMgZG9lcyBub3QgaGVscCBwZXJmb3JtYW5jZS4KK1RoaXMgb3B0aW9uIGNhdXNlcyBicmFuY2ggdGlwcyB0byBiZSBwYWNrZWQgYXMgd2VsbC4gIFVzZWZ1bCBmb3IKK2EgcmVwb3NpdG9yeSB3aXRoIG1hbnkgYnJhbmNoZXMgb2YgaGlzdG9yaWNhbCBpbnRlcmVzdHMuCisKKy0tbm8tcHJ1bmU6OgorCitUaGUgY29tbWFuZCB1c3VhbGx5IHJlbW92ZXMgbG9vc2UgcmVmcyB1bmRlciBgJEdJVF9ESVIvcmVmc2AKK2hpZXJhcmNoeSBhZnRlciBwYWNraW5nIHRoZW0uICBUaGlzIG9wdGlvbiB0ZWxscyBpdCBub3QgdG8uCisKKworQlVHUworLS0tLQorCitPbGRlciBkb2N1bWVudGF0aW9uIHdyaXR0ZW4gYmVmb3JlIHRoZSBwYWNrZWQtcmVmcyBtZWNoYW5pc20gd2FzCitpbnRyb2R1Y2VkIG1heSBzdGlsbCBzYXkgdGhpbmdzIGxpa2UgIi5naXQvcmVmcy9oZWFkcy88YnJhbmNoPiBmaWxlCitleGlzdHMiIHdoZW4gaXQgbWVhbnMgImJyYW5jaCA8YnJhbmNoPiBleGlzdHMiLgorCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcGFyc2UtcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ1ZWExZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhcnNlLXJlbW90ZS50eHQKQEAgLTAsMCArMSwyMyBAQAorZ2l0LXBhcnNlLXJlbW90ZSgxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcGFyc2UtcmVtb3RlIC0gUm91dGluZXMgdG8gaGVscCBwYXJzaW5nIHJlbW90ZSByZXBvc2l0b3J5IGFjY2VzcyBwYXJhbWV0ZXJzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnLiAiJChnaXQgLS1leGVjLXBhdGgpL2dpdC1wYXJzZS1yZW1vdGUiJworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1RoaXMgc2NyaXB0IGlzIGluY2x1ZGVkIGluIHZhcmlvdXMgc2NyaXB0cyB0byBzdXBwbHkKK3JvdXRpbmVzIHRvIHBhcnNlIGZpbGVzIHVuZGVyICRHSVRfRElSL3JlbW90ZXMvIGFuZAorJEdJVF9ESVIvYnJhbmNoZXMvIGFuZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0aGF0IGFyZSByZWxhdGVkCit0byBmZXRjaGluZywgcHVsbGluZyBhbmQgcHVzaGluZy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wYXRjaC1pZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y3MWZiYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXBhdGNoLWlkLnR4dApAQCAtMCwwICsxLDY0IEBACitnaXQtcGF0Y2gtaWQoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcGF0Y2gtaWQgLSBDb21wdXRlIHVuaXF1ZSBJRCBmb3IgYSBwYXRjaAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcGF0Y2gtaWQnIFstLXN0YWJsZSB8IC0tdW5zdGFibGVdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZCBhIHBhdGNoIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IGFuZCBjb21wdXRlIHRoZSBwYXRjaCBJRCBmb3IgaXQuCisKK0EgInBhdGNoIElEIiBpcyBub3RoaW5nIGJ1dCBhIHN1bSBvZiBTSEEtMSBvZiB0aGUgZmlsZSBkaWZmcyBhc3NvY2lhdGVkIHdpdGggYQorcGF0Y2gsIHdpdGggd2hpdGVzcGFjZSBhbmQgbGluZSBudW1iZXJzIGlnbm9yZWQuICBBcyBzdWNoLCBpdCdzICJyZWFzb25hYmx5CitzdGFibGUiLCBidXQgYXQgdGhlIHNhbWUgdGltZSBhbHNvIHJlYXNvbmFibHkgdW5pcXVlLCBpLmUuLCB0d28gcGF0Y2hlcyB0aGF0CitoYXZlIHRoZSBzYW1lICJwYXRjaCBJRCIgYXJlIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJlIHRoZSBzYW1lIHRoaW5nLgorCitJT1csIHlvdSBjYW4gdXNlIHRoaXMgdGhpbmcgdG8gbG9vayBmb3IgbGlrZWx5IGR1cGxpY2F0ZSBjb21taXRzLgorCitXaGVuIGRlYWxpbmcgd2l0aCAnZ2l0IGRpZmYtdHJlZScgb3V0cHV0LCBpdCB0YWtlcyBhZHZhbnRhZ2Ugb2YKK3RoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGlzIHByZWZpeGVkIHdpdGggdGhlIG9iamVjdCBuYW1lIG9mIHRoZQorY29tbWl0LCBhbmQgb3V0cHV0cyB0d28gNDAtYnl0ZSBoZXhhZGVjaW1hbCBzdHJpbmdzLiAgVGhlIGZpcnN0CitzdHJpbmcgaXMgdGhlIHBhdGNoIElELCBhbmQgdGhlIHNlY29uZCBzdHJpbmcgaXMgdGhlIGNvbW1pdCBJRC4KK1RoaXMgY2FuIGJlIHVzZWQgdG8gbWFrZSBhIG1hcHBpbmcgZnJvbSBwYXRjaCBJRCB0byBjb21taXQgSUQuCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1zdGFibGU6OgorCVVzZSBhICJzdGFibGUiIHN1bSBvZiBoYXNoZXMgYXMgdGhlIHBhdGNoIElELiBXaXRoIHRoaXMgb3B0aW9uOgorCSAtIFJlb3JkZXJpbmcgZmlsZSBkaWZmcyB0aGF0IG1ha2UgdXAgYSBwYXRjaCBkb2VzIG5vdCBhZmZlY3QgdGhlIElELgorCSAgIEluIHBhcnRpY3VsYXIsIHR3byBwYXRjaGVzIHByb2R1Y2VkIGJ5IGNvbXBhcmluZyB0aGUgc2FtZSB0d28gdHJlZXMKKwkgICB3aXRoIHR3byBkaWZmZXJlbnQgc2V0dGluZ3MgZm9yICItTzxvcmRlcmZpbGU+IiByZXN1bHQgaW4gdGhlIHNhbWUKKwkgICBwYXRjaCBJRCBzaWduYXR1cmUsIHRoZXJlYnkgYWxsb3dpbmcgdGhlIGNvbXB1dGVkIHJlc3VsdCB0byBiZSB1c2VkCisJICAgYXMgYSBrZXkgdG8gaW5kZXggc29tZSBtZXRhLWluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFuZ2UgYmV0d2VlbgorCSAgIHRoZSB0d28gdHJlZXM7CisKKwkgLSBSZXN1bHQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIHByb2R1Y2VkIGJ5IGdpdCAxLjkgYW5kIG9sZGVyCisJICAgb3IgcHJvZHVjZWQgd2hlbiBhbiAidW5zdGFibGUiIGhhc2ggKHNlZSAtLXVuc3RhYmxlIGJlbG93KSBpcworCSAgIGNvbmZpZ3VyZWQgLSBldmVuIHdoZW4gdXNlZCBvbiBhIGRpZmYgb3V0cHV0IHRha2VuIHdpdGhvdXQgYW55IHVzZQorCSAgIG9mICItTzxvcmRlcmZpbGU+IiwgdGhlcmVieSBtYWtpbmcgZXhpc3RpbmcgZGF0YWJhc2VzIHN0b3Jpbmcgc3VjaAorCSAgICJ1bnN0YWJsZSIgb3IgaGlzdG9yaWNhbCBwYXRjaC1pZHMgdW51c2FibGUuCisKKwlUaGlzIGlzIHRoZSBkZWZhdWx0IGlmIHBhdGNoaWQuc3RhYmxlIGlzIHNldCB0byB0cnVlLgorCistLXVuc3RhYmxlOjoKKwlVc2UgYW4gInVuc3RhYmxlIiBoYXNoIGFzIHRoZSBwYXRjaCBJRC4gV2l0aCB0aGlzIG9wdGlvbiwKKwl0aGUgcmVzdWx0IHByb2R1Y2VkIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgcGF0Y2gtaWQgdmFsdWUgcHJvZHVjZWQKKwlieSBnaXQgMS45IGFuZCBvbGRlci4gIFVzZXJzIHdpdGggcHJlLWV4aXN0aW5nIGRhdGFiYXNlcyBzdG9yaW5nCisJcGF0Y2gtaWRzIHByb2R1Y2VkIGJ5IGdpdCAxLjkgYW5kIG9sZGVyICh3aG8gZG8gbm90IGRlYWwgd2l0aCByZW9yZGVyZWQKKwlwYXRjaGVzKSBtYXkgd2FudCB0byB1c2UgdGhpcyBvcHRpb24uCisKKwlUaGlzIGlzIHRoZSBkZWZhdWx0LgorCis8cGF0Y2g+OjoKKwlUaGUgZGlmZiB0byBjcmVhdGUgdGhlIElEIG9mLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXBydW5lLXBhY2tlZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS1wYWNrZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZWQ1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS1wYWNrZWQudHh0CkBAIC0wLDAgKzEsNDcgQEAKK2dpdC1wcnVuZS1wYWNrZWQoMSkKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXBydW5lLXBhY2tlZCAtIFJlbW92ZSBleHRyYSBvYmplY3RzIHRoYXQgYXJlIGFscmVhZHkgaW4gcGFjayBmaWxlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwcnVuZS1wYWNrZWQnIFstbnwtLWRyeS1ydW5dIFstcXwtLXF1aWV0XQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBwcm9ncmFtIHNlYXJjaGVzIHRoZSBgJEdJVF9PQkpFQ1RfRElSRUNUT1JZYCBmb3IgYWxsIG9iamVjdHMgdGhhdCBjdXJyZW50bHkKK2V4aXN0IGluIGEgcGFjayBmaWxlIGFzIHdlbGwgYXMgdGhlIGluZGVwZW5kZW50IG9iamVjdCBkaXJlY3Rvcmllcy4KKworQWxsIHN1Y2ggZXh0cmEgb2JqZWN0cyBhcmUgcmVtb3ZlZC4KKworQSBwYWNrIGlzIGEgY29sbGVjdGlvbiBvZiBvYmplY3RzLCBpbmRpdmlkdWFsbHkgY29tcHJlc3NlZCwgd2l0aCBkZWx0YQorY29tcHJlc3Npb24gYXBwbGllZCwgc3RvcmVkIGluIGEgc2luZ2xlIGZpbGUsIHdpdGggYW4gYXNzb2NpYXRlZCBpbmRleCBmaWxlLgorCitQYWNrcyBhcmUgdXNlZCB0byByZWR1Y2UgdGhlIGxvYWQgb24gbWlycm9yIHN5c3RlbXMsIGJhY2t1cCBlbmdpbmVzLAorZGlzayBzdG9yYWdlLCBldGMuCisKKworT1BUSU9OUworLS0tLS0tLQorLW46OgorLS1kcnktcnVuOjoKKyAgICAgICAgRG9uJ3QgYWN0dWFsbHkgcmVtb3ZlIGFueSBvYmplY3RzLCBvbmx5IHNob3cgdGhvc2UgdGhhdCB3b3VsZCBoYXZlIGJlZW4KKyAgICAgICAgcmVtb3ZlZC4KKworLXE6OgorLS1xdWlldDo6CisJU3F1ZWxjaCB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXQorbGlua2dpdDpnaXQtcmVwYWNrWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHJ1bmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNDkzYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1wcnVuZS50eHQKQEAgLTAsMCArMSw4NiBAQAorZ2l0LXBydW5lKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXBydW5lIC0gUHJ1bmUgYWxsIHVucmVhY2hhYmxlIG9iamVjdHMgZnJvbSB0aGUgb2JqZWN0IGRhdGFiYXNlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHBydW5lJyBbLW5dIFstdl0gWy0tZXhwaXJlIDxleHBpcmU+XSBbLS1dIFs8aGVhZD4uLi5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitOT1RFOiBJbiBtb3N0IGNhc2VzLCB1c2VycyBzaG91bGQgcnVuICdnaXQgZ2MnLCB3aGljaCBjYWxscworJ2dpdCBwcnVuZScuIFNlZSB0aGUgc2VjdGlvbiAiTk9URVMiLCBiZWxvdy4KKworVGhpcyBydW5zICdnaXQgZnNjayAtLXVucmVhY2hhYmxlJyB1c2luZyBhbGwgdGhlIHJlZnMKK2F2YWlsYWJsZSBpbiBgcmVmcy9gLCBvcHRpb25hbGx5IHdpdGggYWRkaXRpb25hbCBzZXQgb2YKK29iamVjdHMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCBwcnVuZXMgYWxsIHVucGFja2VkCitvYmplY3RzIHVucmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZXNlIGhlYWQgb2JqZWN0cyBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UuCitJbiBhZGRpdGlvbiwgaXQKK3BydW5lcyB0aGUgdW5wYWNrZWQgb2JqZWN0cyB0aGF0IGFyZSBhbHNvIGZvdW5kIGluIHBhY2tzIGJ5CitydW5uaW5nICdnaXQgcHJ1bmUtcGFja2VkJy4KK0l0IGFsc28gcmVtb3ZlcyBlbnRyaWVzIGZyb20gLmdpdC9zaGFsbG93IHRoYXQgYXJlIG5vdCByZWFjaGFibGUgYnkKK2FueSByZWYuCisKK05vdGUgdGhhdCB1bnJlYWNoYWJsZSwgcGFja2VkIG9iamVjdHMgd2lsbCByZW1haW4uICBJZiB0aGlzIGlzCitub3QgZGVzaXJlZCwgc2VlIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXS4KKworT1BUSU9OUworLS0tLS0tLQorCistbjo6CistLWRyeS1ydW46OgorCURvIG5vdCByZW1vdmUgYW55dGhpbmc7IGp1c3QgcmVwb3J0IHdoYXQgaXQgd291bGQKKwlyZW1vdmUuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJUmVwb3J0IGFsbCByZW1vdmVkIG9iamVjdHMuCisKK1wtLTo6CisJRG8gbm90IGludGVycHJldCBhbnkgbW9yZSBhcmd1bWVudHMgYXMgb3B0aW9ucy4KKworLS1leHBpcmUgPHRpbWU+OjoKKwlPbmx5IGV4cGlyZSBsb29zZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+LgorCis8aGVhZD4uLi46OgorCUluIGFkZGl0aW9uIHRvIG9iamVjdHMKKwlyZWFjaGFibGUgZnJvbSBhbnkgb2Ygb3VyIHJlZmVyZW5jZXMsIGtlZXAgb2JqZWN0cworCXJlYWNoYWJsZSBmcm9tIGxpc3RlZCA8aGVhZD5zLgorCitFWEFNUExFCistLS0tLS0tCisKK1RvIHBydW5lIG9iamVjdHMgbm90IHVzZWQgYnkgeW91ciByZXBvc2l0b3J5IG9yIGFub3RoZXIgdGhhdAorYm9ycm93cyBmcm9tIHlvdXIgcmVwb3NpdG9yeSB2aWEgaXRzCitgLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlc2A6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHJ1bmUgJChjZCAuLi9hbm90aGVyICYmIGdpdCByZXYtcGFyc2UgLS1hbGwpCistLS0tLS0tLS0tLS0KKworTm90ZXMKKy0tLS0tCisKK0luIG1vc3QgY2FzZXMsIHVzZXJzIHdpbGwgbm90IG5lZWQgdG8gY2FsbCAnZ2l0IHBydW5lJyBkaXJlY3RseSwgYnV0CitzaG91bGQgaW5zdGVhZCBjYWxsICdnaXQgZ2MnLCB3aGljaCBoYW5kbGVzIHBydW5pbmcgYWxvbmcgd2l0aAorbWFueSBvdGhlciBob3VzZWtlZXBpbmcgdGFza3MuCisKK0ZvciBhIGRlc2NyaXB0aW9uIG9mIHdoaWNoIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZm9yIHBydW5pbmcsIHNlZQorJ2dpdCBmc2NrJydzIC0tdW5yZWFjaGFibGUgb3B0aW9uLgorCitTRUUgQUxTTworLS0tLS0tLS0KKworbGlua2dpdDpnaXQtZnNja1sxXSwKK2xpbmtnaXQ6Z2l0LWdjWzFdLAorbGlua2dpdDpnaXQtcmVmbG9nWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1wdWxsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2M3MmEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcHVsbC50eHQKQEAgLTAsMCArMSwyNDQgQEAKK2dpdC1wdWxsKDEpCis9PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcHVsbCAtIEZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBwdWxsJyBbb3B0aW9uc10gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworSW5jb3Jwb3JhdGVzIGNoYW5nZXMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IGludG8gdGhlIGN1cnJlbnQKK2JyYW5jaC4gIEluIGl0cyBkZWZhdWx0IG1vZGUsIGBnaXQgcHVsbGAgaXMgc2hvcnRoYW5kIGZvcgorYGdpdCBmZXRjaGAgZm9sbG93ZWQgYnkgYGdpdCBtZXJnZSBGRVRDSF9IRUFEYC4KKworTW9yZSBwcmVjaXNlbHksICdnaXQgcHVsbCcgcnVucyAnZ2l0IGZldGNoJyB3aXRoIHRoZSBnaXZlbgorcGFyYW1ldGVycyBhbmQgY2FsbHMgJ2dpdCBtZXJnZScgdG8gbWVyZ2UgdGhlIHJldHJpZXZlZCBicmFuY2gKK2hlYWRzIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLgorV2l0aCBgLS1yZWJhc2VgLCBpdCBydW5zICdnaXQgcmViYXNlJyBpbnN0ZWFkIG9mICdnaXQgbWVyZ2UnLgorCis8cmVwb3NpdG9yeT4gc2hvdWxkIGJlIHRoZSBuYW1lIG9mIGEgcmVtb3RlIHJlcG9zaXRvcnkgYXMKK3Bhc3NlZCB0byBsaW5rZ2l0OmdpdC1mZXRjaFsxXS4gIDxyZWZzcGVjPiBjYW4gbmFtZSBhbgorYXJiaXRyYXJ5IHJlbW90ZSByZWYgKGZvciBleGFtcGxlLCB0aGUgbmFtZSBvZiBhIHRhZykgb3IgZXZlbgorYSBjb2xsZWN0aW9uIG9mIHJlZnMgd2l0aCBjb3JyZXNwb25kaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcworKGUuZy4sIHJlZnMvaGVhZHMve2FzdGVyaXNrfTpyZWZzL3JlbW90ZXMvb3JpZ2luL3thc3Rlcmlza30pLAorYnV0IHVzdWFsbHkgaXQgaXMgdGhlIG5hbWUgb2YgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LgorCitEZWZhdWx0IHZhbHVlcyBmb3IgPHJlcG9zaXRvcnk+IGFuZCA8YnJhbmNoPiBhcmUgcmVhZCBmcm9tIHRoZQorInJlbW90ZSIgYW5kICJtZXJnZSIgY29uZmlndXJhdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoCithcyBzZXQgYnkgbGlua2dpdDpnaXQtYnJhbmNoWzFdIGAtLXRyYWNrYC4KKworQXNzdW1lIHRoZSBmb2xsb3dpbmcgaGlzdG9yeSBleGlzdHMgYW5kIHRoZSBjdXJyZW50IGJyYW5jaCBpcworImBtYXN0ZXJgIjoKKworLS0tLS0tLS0tLS0tCisJICBBLS0tQi0tLUMgbWFzdGVyIG9uIG9yaWdpbgorCSAvCisgICAgRC0tLUUtLS1GLS0tRyBtYXN0ZXIKKwleCisJb3JpZ2luL21hc3RlciBpbiB5b3VyIHJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLQorCitUaGVuICJgZ2l0IHB1bGxgIiB3aWxsIGZldGNoIGFuZCByZXBsYXkgdGhlIGNoYW5nZXMgZnJvbSB0aGUgcmVtb3RlCitgbWFzdGVyYCBicmFuY2ggc2luY2UgaXQgZGl2ZXJnZWQgZnJvbSB0aGUgbG9jYWwgYG1hc3RlcmAgKGkuZS4sIGBFYCkKK3VudGlsIGl0cyBjdXJyZW50IGNvbW1pdCAoYENgKSBvbiB0b3Agb2YgYG1hc3RlcmAgYW5kIHJlY29yZCB0aGUKK3Jlc3VsdCBpbiBhIG5ldyBjb21taXQgYWxvbmcgd2l0aCB0aGUgbmFtZXMgb2YgdGhlIHR3byBwYXJlbnQgY29tbWl0cworYW5kIGEgbG9nIG1lc3NhZ2UgZnJvbSB0aGUgdXNlciBkZXNjcmliaW5nIHRoZSBjaGFuZ2VzLgorCistLS0tLS0tLS0tLS0KKwkgIEEtLS1CLS0tQyBvcmlnaW4vbWFzdGVyCisJIC8gICAgICAgICBcCisgICAgRC0tLUUtLS1GLS0tRy0tLUggbWFzdGVyCistLS0tLS0tLS0tLS0KKworU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGZvciBkZXRhaWxzLCBpbmNsdWRpbmcgaG93IGNvbmZsaWN0cworYXJlIHByZXNlbnRlZCBhbmQgaGFuZGxlZC4KKworSW4gR2l0IDEuNy4wIG9yIGxhdGVyLCB0byBjYW5jZWwgYSBjb25mbGljdGluZyBtZXJnZSwgdXNlCitgZ2l0IHJlc2V0IC0tbWVyZ2VgLiAgKldhcm5pbmcqOiBJbiBvbGRlciB2ZXJzaW9ucyBvZiBHaXQsIHJ1bm5pbmcgJ2dpdCBwdWxsJword2l0aCB1bmNvbW1pdHRlZCBjaGFuZ2VzIGlzIGRpc2NvdXJhZ2VkOiB3aGlsZSBwb3NzaWJsZSwgaXQgbGVhdmVzIHlvdQoraW4gYSBzdGF0ZSB0aGF0IG1heSBiZSBoYXJkIHRvIGJhY2sgb3V0IG9mIGluIHRoZSBjYXNlIG9mIGEgY29uZmxpY3QuCisKK0lmIGFueSBvZiB0aGUgcmVtb3RlIGNoYW5nZXMgb3ZlcmxhcCB3aXRoIGxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsCit0aGUgbWVyZ2Ugd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNhbmNlbGxlZCBhbmQgdGhlIHdvcmsgdHJlZSB1bnRvdWNoZWQuCitJdCBpcyBnZW5lcmFsbHkgYmVzdCB0byBnZXQgYW55IGxvY2FsIGNoYW5nZXMgaW4gd29ya2luZyBvcmRlciBiZWZvcmUKK3B1bGxpbmcgb3Igc3Rhc2ggdGhlbSBhd2F5IHdpdGggbGlua2dpdDpnaXQtc3Rhc2hbMV0uCisKK09QVElPTlMKKy0tLS0tLS0KKworLXE6OgorLS1xdWlldDo6CisJVGhpcyBpcyBwYXNzZWQgdG8gYm90aCB1bmRlcmx5aW5nIGdpdC1mZXRjaCB0byBzcXVlbGNoIHJlcG9ydGluZyBvZgorCWR1cmluZyB0cmFuc2ZlciwgYW5kIHVuZGVybHlpbmcgZ2l0LW1lcmdlIHRvIHNxdWVsY2ggb3V0cHV0IGR1cmluZworCW1lcmdpbmcuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJUGFzcyAtLXZlcmJvc2UgdG8gZ2l0LWZldGNoIGFuZCBnaXQtbWVyZ2UuCisKKy0tW25vLV1yZWN1cnNlLXN1Ym1vZHVsZXNbPXllc3xvbi1kZW1hbmR8bm9dOjoKKwlUaGlzIG9wdGlvbiBjb250cm9scyBpZiBuZXcgY29tbWl0cyBvZiBhbGwgcG9wdWxhdGVkIHN1Ym1vZHVsZXMgc2hvdWxkCisJYmUgZmV0Y2hlZCB0b28gKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gYW5kIGxpbmtnaXQ6Z2l0bW9kdWxlc1s1XSkuCisJVGhhdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gZ2V0IHRoZSBkYXRhIG5lZWRlZCBmb3IgbWVyZ2luZyBzdWJtb2R1bGUKKwljb21taXRzLCBhIGZlYXR1cmUgR2l0IGxlYXJuZWQgaW4gMS43LjMuIE5vdGljZSB0aGF0IHRoZSByZXN1bHQgb2YgYQorCW1lcmdlIHdpbGwgbm90IGJlIGNoZWNrZWQgb3V0IGluIHRoZSBzdWJtb2R1bGUsICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIKKwloYXMgdG8gYmUgY2FsbGVkIGFmdGVyd2FyZHMgdG8gYnJpbmcgdGhlIHdvcmsgdHJlZSB1cCB0byBkYXRlIHdpdGggdGhlCisJbWVyZ2UgcmVzdWx0LgorCitPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworOmdpdC1wdWxsOiAxCisKK2luY2x1ZGU6Om1lcmdlLW9wdGlvbnMudHh0W10KKworLXI6OgorLS1yZWJhc2VbPWZhbHNlfHRydWV8cHJlc2VydmVdOjoKKwlXaGVuIHRydWUsIHJlYmFzZSB0aGUgY3VycmVudCBicmFuY2ggb24gdG9wIG9mIHRoZSB1cHN0cmVhbQorCWJyYW5jaCBhZnRlciBmZXRjaGluZy4gSWYgdGhlcmUgaXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoCisJY29ycmVzcG9uZGluZyB0byB0aGUgdXBzdHJlYW0gYnJhbmNoIGFuZCB0aGUgdXBzdHJlYW0gYnJhbmNoCisJd2FzIHJlYmFzZWQgc2luY2UgbGFzdCBmZXRjaGVkLCB0aGUgcmViYXNlIHVzZXMgdGhhdCBpbmZvcm1hdGlvbgorCXRvIGF2b2lkIHJlYmFzaW5nIG5vbi1sb2NhbCBjaGFuZ2VzLgorKworV2hlbiBzZXQgdG8gcHJlc2VydmUsIHJlYmFzZSB3aXRoIHRoZSBgLS1wcmVzZXJ2ZS1tZXJnZXNgIG9wdGlvbiBwYXNzZWQKK3RvIGBnaXQgcmViYXNlYCBzbyB0aGF0IGxvY2FsbHkgY3JlYXRlZCBtZXJnZSBjb21taXRzIHdpbGwgbm90IGJlIGZsYXR0ZW5lZC4KKysKK1doZW4gZmFsc2UsIG1lcmdlIHRoZSBjdXJyZW50IGJyYW5jaCBpbnRvIHRoZSB1cHN0cmVhbSBicmFuY2guCisrCitTZWUgYHB1bGwucmViYXNlYCwgYGJyYW5jaC48bmFtZT4ucmViYXNlYCBhbmQgYGJyYW5jaC5hdXRvU2V0dXBSZWJhc2VgIGluCitsaW5rZ2l0OmdpdC1jb25maWdbMV0gaWYgeW91IHdhbnQgdG8gbWFrZSBgZ2l0IHB1bGxgIGFsd2F5cyB1c2UKK2AtLXJlYmFzZWAgaW5zdGVhZCBvZiBtZXJnaW5nLgorKworW05PVEVdCitUaGlzIGlzIGEgcG90ZW50aWFsbHkgX2Rhbmdlcm91c18gbW9kZSBvZiBvcGVyYXRpb24uCitJdCByZXdyaXRlcyBoaXN0b3J5LCB3aGljaCBkb2VzIG5vdCBib2RlIHdlbGwgd2hlbiB5b3UKK3B1Ymxpc2hlZCB0aGF0IGhpc3RvcnkgYWxyZWFkeS4gIERvICpub3QqIHVzZSB0aGlzIG9wdGlvbgordW5sZXNzIHlvdSBoYXZlIHJlYWQgbGlua2dpdDpnaXQtcmViYXNlWzFdIGNhcmVmdWxseS4KKworLS1uby1yZWJhc2U6OgorCU92ZXJyaWRlIGVhcmxpZXIgLS1yZWJhc2UuCisKK09wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2luY2x1ZGU6OmZldGNoLW9wdGlvbnMudHh0W10KKworaW5jbHVkZTo6cHVsbC1mZXRjaC1wYXJhbS50eHRbXQorCitpbmNsdWRlOjp1cmxzLXJlbW90ZXMudHh0W10KKworaW5jbHVkZTo6bWVyZ2Utc3RyYXRlZ2llcy50eHRbXQorCitERUZBVUxUIEJFSEFWSU9VUgorLS0tLS0tLS0tLS0tLS0tLS0KKworT2Z0ZW4gcGVvcGxlIHVzZSBgZ2l0IHB1bGxgIHdpdGhvdXQgZ2l2aW5nIGFueSBwYXJhbWV0ZXIuCitUcmFkaXRpb25hbGx5LCB0aGlzIGhhcyBiZWVuIGVxdWl2YWxlbnQgdG8gc2F5aW5nIGBnaXQgcHVsbAorb3JpZ2luYC4gIEhvd2V2ZXIsIHdoZW4gY29uZmlndXJhdGlvbiBgYnJhbmNoLjxuYW1lPi5yZW1vdGVgIGlzCitwcmVzZW50IHdoaWxlIG9uIGJyYW5jaCBgPG5hbWU+YCwgdGhhdCB2YWx1ZSBpcyB1c2VkIGluc3RlYWQgb2YKK2BvcmlnaW5gLgorCitJbiBvcmRlciB0byBkZXRlcm1pbmUgd2hhdCBVUkwgdG8gdXNlIHRvIGZldGNoIGZyb20sIHRoZSB2YWx1ZQorb2YgdGhlIGNvbmZpZ3VyYXRpb24gYHJlbW90ZS48b3JpZ2luPi51cmxgIGlzIGNvbnN1bHRlZAorYW5kIGlmIHRoZXJlIGlzIG5vdCBhbnkgc3VjaCB2YXJpYWJsZSwgdGhlIHZhbHVlIG9uIGBVUkw6IGAgbGluZQoraW4gYCRHSVRfRElSL3JlbW90ZXMvPG9yaWdpbj5gIGZpbGUgaXMgdXNlZC4KKworSW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoYXQgcmVtb3RlIGJyYW5jaGVzIHRvIGZldGNoIChhbmQKK29wdGlvbmFsbHkgc3RvcmUgaW4gdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcykgd2hlbiB0aGUgY29tbWFuZCBpcworcnVuIHdpdGhvdXQgYW55IHJlZnNwZWMgcGFyYW1ldGVycyBvbiB0aGUgY29tbWFuZCBsaW5lLCB2YWx1ZXMKK29mIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGByZW1vdGUuPG9yaWdpbj4uZmV0Y2hgIGFyZQorY29uc3VsdGVkLCBhbmQgaWYgdGhlcmUgYXJlbid0IGFueSwgYCRHSVRfRElSL3JlbW90ZXMvPG9yaWdpbj5gCitmaWxlIGlzIGNvbnN1bHRlZCBhbmQgaXRzIGBQdWxsOiBgIGxpbmVzIGFyZSB1c2VkLgorSW4gYWRkaXRpb24gdG8gdGhlIHJlZnNwZWMgZm9ybWF0cyBkZXNjcmliZWQgaW4gdGhlIE9QVElPTlMKK3NlY3Rpb24sIHlvdSBjYW4gaGF2ZSBhIGdsb2JiaW5nIHJlZnNwZWMgdGhhdCBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKgorLS0tLS0tLS0tLS0tCisKK0EgZ2xvYmJpbmcgcmVmc3BlYyBtdXN0IGhhdmUgYSBub24tZW1wdHkgUkhTIChpLmUuIG11c3Qgc3RvcmUKK3doYXQgd2VyZSBmZXRjaGVkIGluIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyksIGFuZCBpdHMgTEhTIGFuZCBSSFMKK211c3QgZW5kIHdpdGggYC8qYC4gIFRoZSBhYm92ZSBzcGVjaWZpZXMgdGhhdCBhbGwgcmVtb3RlCiticmFuY2hlcyBhcmUgdHJhY2tlZCB1c2luZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgaW4KK2ByZWZzL3JlbW90ZXMvb3JpZ2luL2AgaGllcmFyY2h5IHVuZGVyIHRoZSBzYW1lIG5hbWUuCisKK1RoZSBydWxlIHRvIGRldGVybWluZSB3aGljaCByZW1vdGUgYnJhbmNoIHRvIG1lcmdlIGFmdGVyCitmZXRjaGluZyBpcyBhIGJpdCBpbnZvbHZlZCwgaW4gb3JkZXIgbm90IHRvIGJyZWFrIGJhY2t3YXJkCitjb21wYXRpYmlsaXR5LgorCitJZiBleHBsaWNpdCByZWZzcGVjcyB3ZXJlIGdpdmVuIG9uIHRoZSBjb21tYW5kCitsaW5lIG9mIGBnaXQgcHVsbGAsIHRoZXkgYXJlIGFsbCBtZXJnZWQuCisKK1doZW4gbm8gcmVmc3BlYyB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlbiBgZ2l0IHB1bGxgCit1c2VzIHRoZSByZWZzcGVjIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gb3IKK2AkR0lUX0RJUi9yZW1vdGVzLzxvcmlnaW4+YC4gIEluIHN1Y2ggY2FzZXMsIHRoZSBmb2xsb3dpbmcKK3J1bGVzIGFwcGx5OgorCisuIElmIGBicmFuY2guPG5hbWU+Lm1lcmdlYCBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VycmVudAorICBicmFuY2ggYDxuYW1lPmAgZXhpc3RzLCB0aGF0IGlzIHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggYXQgdGhlCisgIHJlbW90ZSBzaXRlIHRoYXQgaXMgbWVyZ2VkLgorCisuIElmIHRoZSByZWZzcGVjIGlzIGEgZ2xvYmJpbmcgb25lLCBub3RoaW5nIGlzIG1lcmdlZC4KKworLiBPdGhlcndpc2UgdGhlIHJlbW90ZSBicmFuY2ggb2YgdGhlIGZpcnN0IHJlZnNwZWMgaXMgbWVyZ2VkLgorCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIFVwZGF0ZSB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGZvciB0aGUgcmVwb3NpdG9yeQorICB5b3UgY2xvbmVkIGZyb20sIHRoZW4gbWVyZ2Ugb25lIG9mIHRoZW0gaW50byB5b3VyCisgIGN1cnJlbnQgYnJhbmNoOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsLCBnaXQgcHVsbCBvcmlnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworTm9ybWFsbHkgdGhlIGJyYW5jaCBtZXJnZWQgaW4gaXMgdGhlIEhFQUQgb2YgdGhlIHJlbW90ZSByZXBvc2l0b3J5LAorYnV0IHRoZSBjaG9pY2UgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJhbmNoLjxuYW1lPi5yZW1vdGUgYW5kCiticmFuY2guPG5hbWU+Lm1lcmdlIG9wdGlvbnM7IHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIGRldGFpbHMuCisKKyogTWVyZ2UgaW50byB0aGUgY3VycmVudCBicmFuY2ggdGhlIHJlbW90ZSBicmFuY2ggYG5leHRgOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsIG9yaWdpbiBuZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoaXMgbGVhdmVzIGEgY29weSBvZiBgbmV4dGAgdGVtcG9yYXJpbHkgaW4gRkVUQ0hfSEVBRCwgYnV0Citkb2VzIG5vdCB1cGRhdGUgYW55IHJlbW90ZS10cmFja2luZyBicmFuY2hlcy4gVXNpbmcgcmVtb3RlLXRyYWNraW5nCiticmFuY2hlcywgdGhlIHNhbWUgY2FuIGJlIGRvbmUgYnkgaW52b2tpbmcgZmV0Y2ggYW5kIG1lcmdlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBvcmlnaW4KKyQgZ2l0IG1lcmdlIG9yaWdpbi9uZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitJZiB5b3UgdHJpZWQgYSBwdWxsIHdoaWNoIHJlc3VsdGVkIGluIGNvbXBsZXggY29uZmxpY3RzIGFuZAord291bGQgd2FudCB0byBzdGFydCBvdmVyLCB5b3UgY2FuIHJlY292ZXIgd2l0aCAnZ2l0IHJlc2V0Jy4KKworCitCVUdTCistLS0tCitVc2luZyAtLXJlY3Vyc2Utc3VibW9kdWxlcyBjYW4gb25seSBmZXRjaCBuZXcgY29tbWl0cyBpbiBhbHJlYWR5IGNoZWNrZWQKK291dCBzdWJtb2R1bGVzIHJpZ2h0IG5vdy4gV2hlbiBlLmcuIHVwc3RyZWFtIGFkZGVkIGEgbmV3IHN1Ym1vZHVsZSBpbiB0aGUKK2p1c3QgZmV0Y2hlZCBjb21taXRzIG9mIHRoZSBzdXBlcnByb2plY3QgdGhlIHN1Ym1vZHVsZSBpdHNlbGYgY2FuIG5vdCBiZQorZmV0Y2hlZCwgbWFraW5nIGl0IGltcG9zc2libGUgdG8gY2hlY2sgb3V0IHRoYXQgc3VibW9kdWxlIGxhdGVyIHdpdGhvdXQKK2hhdmluZyB0byBkbyBhIGZldGNoIGFnYWluLiBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGZpeGVkIGluIGEgZnV0dXJlIEdpdAordmVyc2lvbi4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1mZXRjaFsxXSwgbGlua2dpdDpnaXQtbWVyZ2VbMV0sIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcHVzaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhNGQ3ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXB1c2gudHh0CkBAIC0wLDAgKzEsNTM5IEBACitnaXQtcHVzaCgxKQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXB1c2ggLSBVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcHVzaCcgWy0tYWxsIHwgLS1taXJyb3IgfCAtLXRhZ3NdIFstLWZvbGxvdy10YWdzXSBbLS1hdG9taWNdIFstbiB8IC0tZHJ5LXJ1bl0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtcmVjZWl2ZS1wYWNrPl0KKwkgICBbLS1yZXBvPTxyZXBvc2l0b3J5Pl0gWy1mIHwgLS1mb3JjZV0gWy0tcHJ1bmVdIFstdiB8IC0tdmVyYm9zZV0KKwkgICBbLXUgfCAtLXNldC11cHN0cmVhbV0KKwkgICBbLS1bbm8tXXNpZ25lZHwtLXNpZ249KHRydWV8ZmFsc2V8aWYtYXNrZWQpXQorCSAgIFstLWZvcmNlLXdpdGgtbGVhc2VbPTxyZWZuYW1lPls6PGV4cGVjdD5dXV0KKwkgICBbLS1uby12ZXJpZnldIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitVcGRhdGVzIHJlbW90ZSByZWZzIHVzaW5nIGxvY2FsIHJlZnMsIHdoaWxlIHNlbmRpbmcgb2JqZWN0cworbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIHRoZSBnaXZlbiByZWZzLgorCitZb3UgY2FuIG1ha2UgaW50ZXJlc3RpbmcgdGhpbmdzIGhhcHBlbiB0byBhIHJlcG9zaXRvcnkKK2V2ZXJ5IHRpbWUgeW91IHB1c2ggaW50byBpdCwgYnkgc2V0dGluZyB1cCAnaG9va3MnIHRoZXJlLiAgU2VlCitkb2N1bWVudGF0aW9uIGZvciBsaW5rZ2l0OmdpdC1yZWNlaXZlLXBhY2tbMV0uCisKK1doZW4gdGhlIGNvbW1hbmQgbGluZSBkb2VzIG5vdCBzcGVjaWZ5IHdoZXJlIHRvIHB1c2ggd2l0aCB0aGUKK2A8cmVwb3NpdG9yeT5gIGFyZ3VtZW50LCBgYnJhbmNoLioucmVtb3RlYCBjb25maWd1cmF0aW9uIGZvciB0aGUKK2N1cnJlbnQgYnJhbmNoIGlzIGNvbnN1bHRlZCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gcHVzaC4gIElmIHRoZQorY29uZmlndXJhdGlvbiBpcyBtaXNzaW5nLCBpdCBkZWZhdWx0cyB0byAnb3JpZ2luJy4KKworV2hlbiB0aGUgY29tbWFuZCBsaW5lIGRvZXMgbm90IHNwZWNpZnkgd2hhdCB0byBwdXNoIHdpdGggYDxyZWZzcGVjPi4uLmAKK2FyZ3VtZW50cyBvciBgLS1hbGxgLCBgLS1taXJyb3JgLCBgLS10YWdzYCBvcHRpb25zLCB0aGUgY29tbWFuZCBmaW5kcwordGhlIGRlZmF1bHQgYDxyZWZzcGVjPmAgYnkgY29uc3VsdGluZyBgcmVtb3RlLioucHVzaGAgY29uZmlndXJhdGlvbiwKK2FuZCBpZiBpdCBpcyBub3QgZm91bmQsIGhvbm9ycyBgcHVzaC5kZWZhdWx0YCBjb25maWd1cmF0aW9uIHRvIGRlY2lkZQord2hhdCB0byBwdXNoIChTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciB0aGUgbWVhbmluZyBvZiBgcHVzaC5kZWZhdWx0YCkuCisKKworT1BUSU9OU1tbT1BUSU9OU11dCistLS0tLS0tLS0tLS0tLS0tLS0KKzxyZXBvc2l0b3J5Pjo6CisJVGhlICJyZW1vdGUiIHJlcG9zaXRvcnkgdGhhdCBpcyBkZXN0aW5hdGlvbiBvZiBhIHB1c2gKKwlvcGVyYXRpb24uICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgZWl0aGVyIGEgVVJMCisJKHNlZSB0aGUgc2VjdGlvbiA8PFVSTFMsR0lUIFVSTFM+PiBiZWxvdykgb3IgdGhlIG5hbWUKKwlvZiBhIHJlbW90ZSAoc2VlIHRoZSBzZWN0aW9uIDw8UkVNT1RFUyxSRU1PVEVTPj4gYmVsb3cpLgorCis8cmVmc3BlYz4uLi46OgorCVNwZWNpZnkgd2hhdCBkZXN0aW5hdGlvbiByZWYgdG8gdXBkYXRlIHdpdGggd2hhdCBzb3VyY2Ugb2JqZWN0LgorCVRoZSBmb3JtYXQgb2YgYSA8cmVmc3BlYz4gcGFyYW1ldGVyIGlzIGFuIG9wdGlvbmFsIHBsdXMKKwlgK2AsIGZvbGxvd2VkIGJ5IHRoZSBzb3VyY2Ugb2JqZWN0IDxzcmM+LCBmb2xsb3dlZAorCWJ5IGEgY29sb24gYDpgLCBmb2xsb3dlZCBieSB0aGUgZGVzdGluYXRpb24gcmVmIDxkc3Q+LgorKworVGhlIDxzcmM+IGlzIG9mdGVuIHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggeW91IHdvdWxkIHdhbnQgdG8gcHVzaCwgYnV0CitpdCBjYW4gYmUgYW55IGFyYml0cmFyeSAiU0hBLTEgZXhwcmVzc2lvbiIsIHN1Y2ggYXMgYG1hc3Rlcn40YCBvcgorYEhFQURgIChzZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10pLgorKworVGhlIDxkc3Q+IHRlbGxzIHdoaWNoIHJlZiBvbiB0aGUgcmVtb3RlIHNpZGUgaXMgdXBkYXRlZCB3aXRoIHRoaXMKK3B1c2guIEFyYml0cmFyeSBleHByZXNzaW9ucyBjYW5ub3QgYmUgdXNlZCBoZXJlLCBhbiBhY3R1YWwgcmVmIG11c3QKK2JlIG5hbWVkLgorSWYgYGdpdCBwdXNoIFs8cmVwb3NpdG9yeT5dYCB3aXRob3V0IGFueSBgPHJlZnNwZWM+YCBhcmd1bWVudCBpcyBzZXQgdG8KK3VwZGF0ZSBzb21lIHJlZiBhdCB0aGUgZGVzdGluYXRpb24gd2l0aCBgPHNyYz5gIHdpdGgKK2ByZW1vdGUuPHJlcG9zaXRvcnk+LnB1c2hgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGA6PGRzdD5gIHBhcnQgY2FuCitiZSBvbWl0dGVkLS1zdWNoIGEgcHVzaCB3aWxsIHVwZGF0ZSBhIHJlZiB0aGF0IGA8c3JjPmAgbm9ybWFsbHkgdXBkYXRlcword2l0aG91dCBhbnkgYDxyZWZzcGVjPmAgb24gdGhlIGNvbW1hbmQgbGluZS4gIE90aGVyd2lzZSwgbWlzc2luZworYDo8ZHN0PmAgbWVhbnMgdG8gdXBkYXRlIHRoZSBzYW1lIHJlZiBhcyB0aGUgYDxzcmM+YC4KKysKK1RoZSBvYmplY3QgcmVmZXJlbmNlZCBieSA8c3JjPiBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgPGRzdD4gcmVmZXJlbmNlCitvbiB0aGUgcmVtb3RlIHNpZGUuICBCeSBkZWZhdWx0IHRoaXMgaXMgb25seSBhbGxvd2VkIGlmIDxkc3Q+IGlzIG5vdAorYSB0YWcgKGFubm90YXRlZCBvciBsaWdodHdlaWdodCksIGFuZCB0aGVuIG9ubHkgaWYgaXQgY2FuIGZhc3QtZm9yd2FyZAorPGRzdD4uICBCeSBoYXZpbmcgdGhlIG9wdGlvbmFsIGxlYWRpbmcgYCtgLCB5b3UgY2FuIHRlbGwgR2l0IHRvIHVwZGF0ZQordGhlIDxkc3Q+IHJlZiBldmVuIGlmIGl0IGlzIG5vdCBhbGxvd2VkIGJ5IGRlZmF1bHQgKGUuZy4sIGl0IGlzIG5vdCBhCitmYXN0LWZvcndhcmQuKSAgVGhpcyBkb2VzICpub3QqIGF0dGVtcHQgdG8gbWVyZ2UgPHNyYz4gaW50byA8ZHN0Pi4gIFNlZQorRVhBTVBMRVMgYmVsb3cgZm9yIGRldGFpbHMuCisrCitgdGFnIDx0YWc+YCBtZWFucyB0aGUgc2FtZSBhcyBgcmVmcy90YWdzLzx0YWc+OnJlZnMvdGFncy88dGFnPmAuCisrCitQdXNoaW5nIGFuIGVtcHR5IDxzcmM+IGFsbG93cyB5b3UgdG8gZGVsZXRlIHRoZSA8ZHN0PiByZWYgZnJvbQordGhlIHJlbW90ZSByZXBvc2l0b3J5LgorKworVGhlIHNwZWNpYWwgcmVmc3BlYyBgOmAgKG9yIGArOmAgdG8gYWxsb3cgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzKQorZGlyZWN0cyBHaXQgdG8gcHVzaCAibWF0Y2hpbmciIGJyYW5jaGVzOiBmb3IgZXZlcnkgYnJhbmNoIHRoYXQgZXhpc3RzIG9uCit0aGUgbG9jYWwgc2lkZSwgdGhlIHJlbW90ZSBzaWRlIGlzIHVwZGF0ZWQgaWYgYSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZQorYWxyZWFkeSBleGlzdHMgb24gdGhlIHJlbW90ZSBzaWRlLgorCistLWFsbDo6CisJUHVzaCBhbGwgYnJhbmNoZXMgKGkuZS4gcmVmcyB1bmRlciBgcmVmcy9oZWFkcy9gKTsgY2Fubm90IGJlCisJdXNlZCB3aXRoIG90aGVyIDxyZWZzcGVjPi4KKworLS1wcnVuZTo6CisJUmVtb3ZlIHJlbW90ZSBicmFuY2hlcyB0aGF0IGRvbid0IGhhdmUgYSBsb2NhbCBjb3VudGVycGFydC4gRm9yIGV4YW1wbGUKKwlhIHJlbW90ZSBicmFuY2ggYHRtcGAgd2lsbCBiZSByZW1vdmVkIGlmIGEgbG9jYWwgYnJhbmNoIHdpdGggdGhlIHNhbWUKKwluYW1lIGRvZXNuJ3QgZXhpc3QgYW55IG1vcmUuIFRoaXMgYWxzbyByZXNwZWN0cyByZWZzcGVjcywgZS5nLgorCWBnaXQgcHVzaCAtLXBydW5lIHJlbW90ZSByZWZzL2hlYWRzLyo6cmVmcy90bXAvKmAgd291bGQKKwltYWtlIHN1cmUgdGhhdCByZW1vdGUgYHJlZnMvdG1wL2Zvb2Agd2lsbCBiZSByZW1vdmVkIGlmIGByZWZzL2hlYWRzL2Zvb2AKKwlkb2Vzbid0IGV4aXN0LgorCistLW1pcnJvcjo6CisJSW5zdGVhZCBvZiBuYW1pbmcgZWFjaCByZWYgdG8gcHVzaCwgc3BlY2lmaWVzIHRoYXQgYWxsCisJcmVmcyB1bmRlciBgcmVmcy9gICh3aGljaCBpbmNsdWRlcyBidXQgaXMgbm90CisJbGltaXRlZCB0byBgcmVmcy9oZWFkcy9gLCBgcmVmcy9yZW1vdGVzL2AsIGFuZCBgcmVmcy90YWdzL2ApCisJYmUgbWlycm9yZWQgdG8gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiAgTmV3bHkgY3JlYXRlZCBsb2NhbAorCXJlZnMgd2lsbCBiZSBwdXNoZWQgdG8gdGhlIHJlbW90ZSBlbmQsIGxvY2FsbHkgdXBkYXRlZCByZWZzCisJd2lsbCBiZSBmb3JjZSB1cGRhdGVkIG9uIHRoZSByZW1vdGUgZW5kLCBhbmQgZGVsZXRlZCByZWZzCisJd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIHJlbW90ZSBlbmQuICBUaGlzIGlzIHRoZSBkZWZhdWx0CisJaWYgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGByZW1vdGUuPHJlbW90ZT4ubWlycm9yYCBpcworCXNldC4KKworLW46OgorLS1kcnktcnVuOjoKKwlEbyBldmVyeXRoaW5nIGV4Y2VwdCBhY3R1YWxseSBzZW5kIHRoZSB1cGRhdGVzLgorCistLXBvcmNlbGFpbjo6CisJUHJvZHVjZSBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dC4gIFRoZSBvdXRwdXQgc3RhdHVzIGxpbmUgZm9yIGVhY2ggcmVmCisJd2lsbCBiZSB0YWItc2VwYXJhdGVkIGFuZCBzZW50IHRvIHN0ZG91dCBpbnN0ZWFkIG9mIHN0ZGVyci4gIFRoZSBmdWxsCisJc3ltYm9saWMgbmFtZXMgb2YgdGhlIHJlZnMgd2lsbCBiZSBnaXZlbi4KKworLS1kZWxldGU6OgorCUFsbCBsaXN0ZWQgcmVmcyBhcmUgZGVsZXRlZCBmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4gVGhpcyBpcworCXRoZSBzYW1lIGFzIHByZWZpeGluZyBhbGwgcmVmcyB3aXRoIGEgY29sb24uCisKKy0tdGFnczo6CisJQWxsIHJlZnMgdW5kZXIgYHJlZnMvdGFnc2AgYXJlIHB1c2hlZCwgaW4KKwlhZGRpdGlvbiB0byByZWZzcGVjcyBleHBsaWNpdGx5IGxpc3RlZCBvbiB0aGUgY29tbWFuZAorCWxpbmUuCisKKy0tZm9sbG93LXRhZ3M6OgorCVB1c2ggYWxsIHRoZSByZWZzIHRoYXQgd291bGQgYmUgcHVzaGVkIHdpdGhvdXQgdGhpcyBvcHRpb24sCisJYW5kIGFsc28gcHVzaCBhbm5vdGF0ZWQgdGFncyBpbiBgcmVmcy90YWdzYCB0aGF0IGFyZSBtaXNzaW5nCisJZnJvbSB0aGUgcmVtb3RlIGJ1dCBhcmUgcG9pbnRpbmcgYXQgY29tbWl0LWlzaCB0aGF0IGFyZQorCXJlYWNoYWJsZSBmcm9tIHRoZSByZWZzIGJlaW5nIHB1c2hlZC4gIFRoaXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkCisJd2l0aCBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdwdXNoLmZvbGxvd1RhZ3MnLiAgRm9yIG1vcmUKKwlpbmZvcm1hdGlvbiwgc2VlICdwdXNoLmZvbGxvd1RhZ3MnIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworLS1bbm8tXXNpZ25lZDo6CistLXNpZ249KHRydWV8ZmFsc2V8aWYtYXNrZWQpOjoKKwlHUEctc2lnbiB0aGUgcHVzaCByZXF1ZXN0IHRvIHVwZGF0ZSByZWZzIG9uIHRoZSByZWNlaXZpbmcKKwlzaWRlLCB0byBhbGxvdyBpdCB0byBiZSBjaGVja2VkIGJ5IHRoZSBob29rcyBhbmQvb3IgYmUKKwlsb2dnZWQuICBJZiBgZmFsc2VgIG9yIGAtLW5vLXNpZ25lZGAsIG5vIHNpZ25pbmcgd2lsbCBiZQorCWF0dGVtcHRlZC4gIElmIGB0cnVlYCBvciBgLS1zaWduZWRgLCB0aGUgcHVzaCB3aWxsIGZhaWwgaWYgdGhlCisJc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2lnbmVkIHB1c2hlcy4gIElmIHNldCB0byBgaWYtYXNrZWRgLAorCXNpZ24gaWYgYW5kIG9ubHkgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBzaWduZWQgcHVzaGVzLiAgVGhlIHB1c2gKKwl3aWxsIGFsc28gZmFpbCBpZiB0aGUgYWN0dWFsIGNhbGwgdG8gYGdwZyAtLXNpZ25gIGZhaWxzLiAgU2VlCisJbGlua2dpdDpnaXQtcmVjZWl2ZS1wYWNrWzFdIGZvciB0aGUgZGV0YWlscyBvbiB0aGUgcmVjZWl2aW5nIGVuZC4KKworLS1bbm8tXWF0b21pYzo6CisJVXNlIGFuIGF0b21pYyB0cmFuc2FjdGlvbiBvbiB0aGUgcmVtb3RlIHNpZGUgaWYgYXZhaWxhYmxlLgorCUVpdGhlciBhbGwgcmVmcyBhcmUgdXBkYXRlZCwgb3Igb24gZXJyb3IsIG5vIHJlZnMgYXJlIHVwZGF0ZWQuCisJSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IGF0b21pYyBwdXNoZXMgdGhlIHB1c2ggd2lsbCBmYWlsLgorCistLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz46OgorLS1leGVjPTxnaXQtcmVjZWl2ZS1wYWNrPjo6CisJUGF0aCB0byB0aGUgJ2dpdC1yZWNlaXZlLXBhY2snIHByb2dyYW0gb24gdGhlIHJlbW90ZQorCWVuZC4gIFNvbWV0aW1lcyB1c2VmdWwgd2hlbiBwdXNoaW5nIHRvIGEgcmVtb3RlCisJcmVwb3NpdG9yeSBvdmVyIHNzaCwgYW5kIHlvdSBkbyBub3QgaGF2ZSB0aGUgcHJvZ3JhbSBpbgorCWEgZGlyZWN0b3J5IG9uIHRoZSBkZWZhdWx0ICRQQVRILgorCistLVtuby1dZm9yY2Utd2l0aC1sZWFzZTo6CistLWZvcmNlLXdpdGgtbGVhc2U9PHJlZm5hbWU+OjoKKy0tZm9yY2Utd2l0aC1sZWFzZT08cmVmbmFtZT46PGV4cGVjdD46OgorCVVzdWFsbHksICJnaXQgcHVzaCIgcmVmdXNlcyB0byB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgaXMKKwlub3QgYW4gYW5jZXN0b3Igb2YgdGhlIGxvY2FsIHJlZiB1c2VkIHRvIG92ZXJ3cml0ZSBpdC4KKysKK1RoaXMgb3B0aW9uIG92ZXJyaWRlcyB0aGlzIHJlc3RyaWN0aW9uIGlmIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQorcmVtb3RlIHJlZiBpcyB0aGUgZXhwZWN0ZWQgdmFsdWUuICAiZ2l0IHB1c2giIGZhaWxzIG90aGVyd2lzZS4KKysKK0ltYWdpbmUgdGhhdCB5b3UgaGF2ZSB0byByZWJhc2Ugd2hhdCB5b3UgaGF2ZSBhbHJlYWR5IHB1Ymxpc2hlZC4KK1lvdSB3aWxsIGhhdmUgdG8gYnlwYXNzIHRoZSAibXVzdCBmYXN0LWZvcndhcmQiIHJ1bGUgaW4gb3JkZXIgdG8KK3JlcGxhY2UgdGhlIGhpc3RvcnkgeW91IG9yaWdpbmFsbHkgcHVibGlzaGVkIHdpdGggdGhlIHJlYmFzZWQgaGlzdG9yeS4KK0lmIHNvbWVib2R5IGVsc2UgYnVpbHQgb24gdG9wIG9mIHlvdXIgb3JpZ2luYWwgaGlzdG9yeSB3aGlsZSB5b3UgYXJlCityZWJhc2luZywgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIGF0IHRoZSByZW1vdGUgbWF5IGFkdmFuY2Ugd2l0aCBoZXIKK2NvbW1pdCwgYW5kIGJsaW5kbHkgcHVzaGluZyB3aXRoIGAtLWZvcmNlYCB3aWxsIGxvc2UgaGVyIHdvcmsuCisrCitUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNheSB0aGF0IHlvdSBleHBlY3QgdGhlIGhpc3RvcnkgeW91IGFyZQordXBkYXRpbmcgaXMgd2hhdCB5b3UgcmViYXNlZCBhbmQgd2FudCB0byByZXBsYWNlLiBJZiB0aGUgcmVtb3RlIHJlZgorc3RpbGwgcG9pbnRzIGF0IHRoZSBjb21taXQgeW91IHNwZWNpZmllZCwgeW91IGNhbiBiZSBzdXJlIHRoYXQgbm8KK290aGVyIHBlb3BsZSBkaWQgYW55dGhpbmcgdG8gdGhlIHJlZi4gSXQgaXMgbGlrZSB0YWtpbmcgYSAibGVhc2UiIG9uCit0aGUgcmVmIHdpdGhvdXQgZXhwbGljaXRseSBsb2NraW5nIGl0LCBhbmQgdGhlIHJlbW90ZSByZWYgaXMgdXBkYXRlZAorb25seSBpZiB0aGUgImxlYXNlIiBpcyBzdGlsbCB2YWxpZC4KKysKK2AtLWZvcmNlLXdpdGgtbGVhc2VgIGFsb25lLCB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGRldGFpbHMsIHdpbGwgcHJvdGVjdAorYWxsIHJlbW90ZSByZWZzIHRoYXQgYXJlIGdvaW5nIHRvIGJlIHVwZGF0ZWQgYnkgcmVxdWlyaW5nIHRoZWlyCitjdXJyZW50IHZhbHVlIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHdlIGhhdmUKK2ZvciB0aGVtLgorKworYC0tZm9yY2Utd2l0aC1sZWFzZT08cmVmbmFtZT5gLCB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGV4cGVjdGVkIHZhbHVlLCB3aWxsCitwcm90ZWN0IHRoZSBuYW1lZCByZWYgKGFsb25lKSwgaWYgaXQgaXMgZ29pbmcgdG8gYmUgdXBkYXRlZCwgYnkKK3JlcXVpcmluZyBpdHMgY3VycmVudCB2YWx1ZSB0byBiZSB0aGUgc2FtZSBhcyB0aGUgcmVtb3RlLXRyYWNraW5nCiticmFuY2ggd2UgaGF2ZSBmb3IgaXQuCisrCitgLS1mb3JjZS13aXRoLWxlYXNlPTxyZWZuYW1lPjo8ZXhwZWN0PmAgd2lsbCBwcm90ZWN0IHRoZSBuYW1lZCByZWYgKGFsb25lKSwKK2lmIGl0IGlzIGdvaW5nIHRvIGJlIHVwZGF0ZWQsIGJ5IHJlcXVpcmluZyBpdHMgY3VycmVudCB2YWx1ZSB0byBiZQordGhlIHNhbWUgYXMgdGhlIHNwZWNpZmllZCB2YWx1ZSA8ZXhwZWN0PiAod2hpY2ggaXMgYWxsb3dlZCB0byBiZQorZGlmZmVyZW50IGZyb20gdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2ggd2UgaGF2ZSBmb3IgdGhlIHJlZm5hbWUsCitvciB3ZSBkbyBub3QgZXZlbiBoYXZlIHRvIGhhdmUgc3VjaCBhIHJlbW90ZS10cmFja2luZyBicmFuY2ggd2hlbgordGhpcyBmb3JtIGlzIHVzZWQpLgorKworTm90ZSB0aGF0IGFsbCBmb3JtcyBvdGhlciB0aGFuIGAtLWZvcmNlLXdpdGgtbGVhc2U9PHJlZm5hbWU+OjxleHBlY3Q+YAordGhhdCBzcGVjaWZpZXMgdGhlIGV4cGVjdGVkIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlZiBleHBsaWNpdGx5IGFyZQorc3RpbGwgZXhwZXJpbWVudGFsIGFuZCB0aGVpciBzZW1hbnRpY3MgbWF5IGNoYW5nZSBhcyB3ZSBnYWluIGV4cGVyaWVuY2UKK3dpdGggdGhpcyBmZWF0dXJlLgorKworIi0tbm8tZm9yY2Utd2l0aC1sZWFzZSIgd2lsbCBjYW5jZWwgYWxsIHRoZSBwcmV2aW91cyAtLWZvcmNlLXdpdGgtbGVhc2Ugb24gdGhlCitjb21tYW5kIGxpbmUuCisKKy1mOjoKKy0tZm9yY2U6OgorCVVzdWFsbHksIHRoZSBjb21tYW5kIHJlZnVzZXMgdG8gdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IGlzCisJbm90IGFuIGFuY2VzdG9yIG9mIHRoZSBsb2NhbCByZWYgdXNlZCB0byBvdmVyd3JpdGUgaXQuCisJQWxzbywgd2hlbiBgLS1mb3JjZS13aXRoLWxlYXNlYCBvcHRpb24gaXMgdXNlZCwgdGhlIGNvbW1hbmQgcmVmdXNlcworCXRvIHVwZGF0ZSBhIHJlbW90ZSByZWYgd2hvc2UgY3VycmVudCB2YWx1ZSBkb2VzIG5vdCBtYXRjaAorCXdoYXQgaXMgZXhwZWN0ZWQuCisrCitUaGlzIGZsYWcgZGlzYWJsZXMgdGhlc2UgY2hlY2tzLCBhbmQgY2FuIGNhdXNlIHRoZSByZW1vdGUgcmVwb3NpdG9yeQordG8gbG9zZSBjb21taXRzOyB1c2UgaXQgd2l0aCBjYXJlLgorKworTm90ZSB0aGF0IGAtLWZvcmNlYCBhcHBsaWVzIHRvIGFsbCB0aGUgcmVmcyB0aGF0IGFyZSBwdXNoZWQsIGhlbmNlCit1c2luZyBpdCB3aXRoIGBwdXNoLmRlZmF1bHRgIHNldCB0byBgbWF0Y2hpbmdgIG9yIHdpdGggbXVsdGlwbGUgcHVzaAorZGVzdGluYXRpb25zIGNvbmZpZ3VyZWQgd2l0aCBgcmVtb3RlLioucHVzaGAgbWF5IG92ZXJ3cml0ZSByZWZzCitvdGhlciB0aGFuIHRoZSBjdXJyZW50IGJyYW5jaCAoaW5jbHVkaW5nIGxvY2FsIHJlZnMgdGhhdCBhcmUKK3N0cmljdGx5IGJlaGluZCB0aGVpciByZW1vdGUgY291bnRlcnBhcnQpLiAgVG8gZm9yY2UgYSBwdXNoIHRvIG9ubHkKK29uZSBicmFuY2gsIHVzZSBhIGArYCBpbiBmcm9udCBvZiB0aGUgcmVmc3BlYyB0byBwdXNoIChlLmcgYGdpdCBwdXNoCitvcmlnaW4gK21hc3RlcmAgdG8gZm9yY2UgYSBwdXNoIHRvIHRoZSBgbWFzdGVyYCBicmFuY2gpLiBTZWUgdGhlCitgPHJlZnNwZWM+Li4uYCBzZWN0aW9uIGFib3ZlIGZvciBkZXRhaWxzLgorCistLXJlcG89PHJlcG9zaXRvcnk+OjoKKwlUaGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSA8cmVwb3NpdG9yeT4gYXJndW1lbnQuIElmIGJvdGgKKwlhcmUgc3BlY2lmaWVkLCB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50IHRha2VzIHByZWNlZGVuY2UuCisKKy11OjoKKy0tc2V0LXVwc3RyZWFtOjoKKwlGb3IgZXZlcnkgYnJhbmNoIHRoYXQgaXMgdXAgdG8gZGF0ZSBvciBzdWNjZXNzZnVsbHkgcHVzaGVkLCBhZGQKKwl1cHN0cmVhbSAodHJhY2tpbmcpIHJlZmVyZW5jZSwgdXNlZCBieSBhcmd1bWVudC1sZXNzCisJbGlua2dpdDpnaXQtcHVsbFsxXSBhbmQgb3RoZXIgY29tbWFuZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLAorCXNlZSAnYnJhbmNoLjxuYW1lPi5tZXJnZScgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCistLVtuby1ddGhpbjo6CisJVGhlc2Ugb3B0aW9ucyBhcmUgcGFzc2VkIHRvIGxpbmtnaXQ6Z2l0LXNlbmQtcGFja1sxXS4gQSB0aGluIHRyYW5zZmVyCisJc2lnbmlmaWNhbnRseSByZWR1Y2VzIHRoZSBhbW91bnQgb2Ygc2VudCBkYXRhIHdoZW4gdGhlIHNlbmRlciBhbmQKKwlyZWNlaXZlciBzaGFyZSBtYW55IG9mIHRoZSBzYW1lIG9iamVjdHMgaW4gY29tbW9uLiBUaGUgZGVmYXVsdCBpcworCVwtLXRoaW4uCisKKy1xOjoKKy0tcXVpZXQ6OgorCVN1cHByZXNzIGFsbCBvdXRwdXQsIGluY2x1ZGluZyB0aGUgbGlzdGluZyBvZiB1cGRhdGVkIHJlZnMsCisJdW5sZXNzIGFuIGVycm9yIG9jY3Vycy4gUHJvZ3Jlc3MgaXMgbm90IHJlcG9ydGVkIHRvIHRoZSBzdGFuZGFyZAorCWVycm9yIHN0cmVhbS4KKworLXY6OgorLS12ZXJib3NlOjoKKwlSdW4gdmVyYm9zZWx5LgorCistLXByb2dyZXNzOjoKKwlQcm9ncmVzcyBzdGF0dXMgaXMgcmVwb3J0ZWQgb24gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbQorCWJ5IGRlZmF1bHQgd2hlbiBpdCBpcyBhdHRhY2hlZCB0byBhIHRlcm1pbmFsLCB1bmxlc3MgLXEKKwlpcyBzcGVjaWZpZWQuIFRoaXMgZmxhZyBmb3JjZXMgcHJvZ3Jlc3Mgc3RhdHVzIGV2ZW4gaWYgdGhlCisJc3RhbmRhcmQgZXJyb3Igc3RyZWFtIGlzIG5vdCBkaXJlY3RlZCB0byBhIHRlcm1pbmFsLgorCistLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVja3xvbi1kZW1hbmQ6OgorCU1ha2Ugc3VyZSBhbGwgc3VibW9kdWxlIGNvbW1pdHMgdXNlZCBieSB0aGUgcmV2aXNpb25zIHRvIGJlCisJcHVzaGVkIGFyZSBhdmFpbGFibGUgb24gYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLiBJZiAnY2hlY2snIGlzCisJdXNlZCBHaXQgd2lsbCB2ZXJpZnkgdGhhdCBhbGwgc3VibW9kdWxlIGNvbW1pdHMgdGhhdCBjaGFuZ2VkIGluCisJdGhlIHJldmlzaW9ucyB0byBiZSBwdXNoZWQgYXJlIGF2YWlsYWJsZSBvbiBhdCBsZWFzdCBvbmUgcmVtb3RlCisJb2YgdGhlIHN1Ym1vZHVsZS4gSWYgYW55IGNvbW1pdHMgYXJlIG1pc3NpbmcgdGhlIHB1c2ggd2lsbCBiZQorCWFib3J0ZWQgYW5kIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuIElmICdvbi1kZW1hbmQnIGlzIHVzZWQKKwlhbGwgc3VibW9kdWxlcyB0aGF0IGNoYW5nZWQgaW4gdGhlIHJldmlzaW9ucyB0byBiZSBwdXNoZWQgd2lsbAorCWJlIHB1c2hlZC4gSWYgb24tZGVtYW5kIHdhcyBub3QgYWJsZSB0byBwdXNoIGFsbCBuZWNlc3NhcnkKKwlyZXZpc2lvbnMgaXQgd2lsbCBhbHNvIGJlIGFib3J0ZWQgYW5kIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMuCisKKy0tW25vLV12ZXJpZnk6OgorCVRvZ2dsZSB0aGUgcHJlLXB1c2ggaG9vayAoc2VlIGxpbmtnaXQ6Z2l0aG9va3NbNV0pLiAgVGhlCisJZGVmYXVsdCBpcyAtLXZlcmlmeSwgZ2l2aW5nIHRoZSBob29rIGEgY2hhbmNlIHRvIHByZXZlbnQgdGhlCisJcHVzaC4gIFdpdGggLS1uby12ZXJpZnksIHRoZSBob29rIGlzIGJ5cGFzc2VkIGNvbXBsZXRlbHkuCisKKworaW5jbHVkZTo6dXJscy1yZW1vdGVzLnR4dFtdCisKK09VVFBVVAorLS0tLS0tCisKK1RoZSBvdXRwdXQgb2YgImdpdCBwdXNoIiBkZXBlbmRzIG9uIHRoZSB0cmFuc3BvcnQgbWV0aG9kIHVzZWQ7IHRoaXMKK3NlY3Rpb24gZGVzY3JpYmVzIHRoZSBvdXRwdXQgd2hlbiBwdXNoaW5nIG92ZXIgdGhlIEdpdCBwcm90b2NvbCAoZWl0aGVyCitsb2NhbGx5IG9yIHZpYSBzc2gpLgorCitUaGUgc3RhdHVzIG9mIHRoZSBwdXNoIGlzIG91dHB1dCBpbiB0YWJ1bGFyIGZvcm0sIHdpdGggZWFjaCBsaW5lCityZXByZXNlbnRpbmcgdGhlIHN0YXR1cyBvZiBhIHNpbmdsZSByZWYuIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDxmbGFnPiA8c3VtbWFyeT4gPGZyb20+IC0+IDx0bz4gKDxyZWFzb24+KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiAtLXBvcmNlbGFpbiBpcyB1c2VkLCB0aGVuIGVhY2ggbGluZSBvZiB0aGUgb3V0cHV0IGlzIG9mIHRoZSBmb3JtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgPGZsYWc+IFx0IDxmcm9tPjo8dG8+IFx0IDxzdW1tYXJ5PiAoPHJlYXNvbj4pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzdGF0dXMgb2YgdXAtdG8tZGF0ZSByZWZzIGlzIHNob3duIG9ubHkgaWYgLS1wb3JjZWxhaW4gb3IgLS12ZXJib3NlCitvcHRpb24gaXMgdXNlZC4KKworZmxhZzo6CisJQSBzaW5nbGUgY2hhcmFjdGVyIGluZGljYXRpbmcgdGhlIHN0YXR1cyBvZiB0aGUgcmVmOgorKHNwYWNlKTs7IGZvciBhIHN1Y2Nlc3NmdWxseSBwdXNoZWQgZmFzdC1mb3J3YXJkOworYCtgOzsgZm9yIGEgc3VjY2Vzc2Z1bCBmb3JjZWQgdXBkYXRlOworYC1gOzsgZm9yIGEgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQgcmVmOworYCpgOzsgZm9yIGEgc3VjY2Vzc2Z1bGx5IHB1c2hlZCBuZXcgcmVmOworYCFgOzsgZm9yIGEgcmVmIHRoYXQgd2FzIHJlamVjdGVkIG9yIGZhaWxlZCB0byBwdXNoOyBhbmQKK2A9YDs7IGZvciBhIHJlZiB0aGF0IHdhcyB1cCB0byBkYXRlIGFuZCBkaWQgbm90IG5lZWQgcHVzaGluZy4KKworc3VtbWFyeTo6CisJRm9yIGEgc3VjY2Vzc2Z1bGx5IHB1c2hlZCByZWYsIHRoZSBzdW1tYXJ5IHNob3dzIHRoZSBvbGQgYW5kIG5ldworCXZhbHVlcyBvZiB0aGUgcmVmIGluIGEgZm9ybSBzdWl0YWJsZSBmb3IgdXNpbmcgYXMgYW4gYXJndW1lbnQgdG8KKwlgZ2l0IGxvZ2AgKHRoaXMgaXMgYDxvbGQ+Li48bmV3PmAgaW4gbW9zdCBjYXNlcywgYW5kCisJYDxvbGQ+Li4uPG5ldz5gIGZvciBmb3JjZWQgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzKS4KKysKK0ZvciBhIGZhaWxlZCB1cGRhdGUsIG1vcmUgZGV0YWlscyBhcmUgZ2l2ZW46CisrCistLQorcmVqZWN0ZWQ6OgorCUdpdCBkaWQgbm90IHRyeSB0byBzZW5kIHRoZSByZWYgYXQgYWxsLCB0eXBpY2FsbHkgYmVjYXVzZSBpdAorCWlzIG5vdCBhIGZhc3QtZm9yd2FyZCBhbmQgeW91IGRpZCBub3QgZm9yY2UgdGhlIHVwZGF0ZS4KKworcmVtb3RlIHJlamVjdGVkOjoKKwlUaGUgcmVtb3RlIGVuZCByZWZ1c2VkIHRoZSB1cGRhdGUuICBVc3VhbGx5IGNhdXNlZCBieSBhIGhvb2sKKwlvbiB0aGUgcmVtb3RlIHNpZGUsIG9yIGJlY2F1c2UgdGhlIHJlbW90ZSByZXBvc2l0b3J5IGhhcyBvbmUKKwlvZiB0aGUgZm9sbG93aW5nIHNhZmV0eSBvcHRpb25zIGluIGVmZmVjdDoKKwlgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaGAgKGZvciBwdXNoZXMgdG8gdGhlIGNoZWNrZWQgb3V0CisJYnJhbmNoKSwgYHJlY2VpdmUuZGVueU5vbkZhc3RGb3J3YXJkc2AgKGZvciBmb3JjZWQKKwlub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMpLCBgcmVjZWl2ZS5kZW55RGVsZXRlc2Agb3IKKwlgcmVjZWl2ZS5kZW55RGVsZXRlQ3VycmVudGAuICBTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCityZW1vdGUgZmFpbHVyZTo6CisJVGhlIHJlbW90ZSBlbmQgZGlkIG5vdCByZXBvcnQgdGhlIHN1Y2Nlc3NmdWwgdXBkYXRlIG9mIHRoZSByZWYsCisJcGVyaGFwcyBiZWNhdXNlIG9mIGEgdGVtcG9yYXJ5IGVycm9yIG9uIHRoZSByZW1vdGUgc2lkZSwgYQorCWJyZWFrIGluIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb24sIG9yIG90aGVyIHRyYW5zaWVudCBlcnJvci4KKy0tCisKK2Zyb206OgorCVRoZSBuYW1lIG9mIHRoZSBsb2NhbCByZWYgYmVpbmcgcHVzaGVkLCBtaW51cyBpdHMKKwlgcmVmcy88dHlwZT4vYCBwcmVmaXguIEluIHRoZSBjYXNlIG9mIGRlbGV0aW9uLCB0aGUKKwluYW1lIG9mIHRoZSBsb2NhbCByZWYgaXMgb21pdHRlZC4KKwordG86OgorCVRoZSBuYW1lIG9mIHRoZSByZW1vdGUgcmVmIGJlaW5nIHVwZGF0ZWQsIG1pbnVzIGl0cworCWByZWZzLzx0eXBlPi9gIHByZWZpeC4KKworcmVhc29uOjoKKwlBIGh1bWFuLXJlYWRhYmxlIGV4cGxhbmF0aW9uLiBJbiB0aGUgY2FzZSBvZiBzdWNjZXNzZnVsbHkgcHVzaGVkCisJcmVmcywgbm8gZXhwbGFuYXRpb24gaXMgbmVlZGVkLiBGb3IgYSBmYWlsZWQgcmVmLCB0aGUgcmVhc29uIGZvcgorCWZhaWx1cmUgaXMgZGVzY3JpYmVkLgorCitOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGFuIHVwZGF0ZSBjaGFuZ2VzIGEgYnJhbmNoIChvciBtb3JlIGluIGdlbmVyYWwsIGEgcmVmKSB0aGF0IHVzZWQgdG8KK3BvaW50IGF0IGNvbW1pdCBBIHRvIHBvaW50IGF0IGFub3RoZXIgY29tbWl0IEIsIGl0IGlzIGNhbGxlZCBhCitmYXN0LWZvcndhcmQgdXBkYXRlIGlmIGFuZCBvbmx5IGlmIEIgaXMgYSBkZXNjZW5kYW50IG9mIEEuCisKK0luIGEgZmFzdC1mb3J3YXJkIHVwZGF0ZSBmcm9tIEEgdG8gQiwgdGhlIHNldCBvZiBjb21taXRzIHRoYXQgdGhlIG9yaWdpbmFsCitjb21taXQgQSBidWlsdCBvbiB0b3Agb2YgaXMgYSBzdWJzZXQgb2YgdGhlIGNvbW1pdHMgdGhlIG5ldyBjb21taXQgQgorYnVpbGRzIG9uIHRvcCBvZi4gIEhlbmNlLCBpdCBkb2VzIG5vdCBsb3NlIGFueSBoaXN0b3J5LgorCitJbiBjb250cmFzdCwgYSBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZSB3aWxsIGxvc2UgaGlzdG9yeS4gIEZvciBleGFtcGxlLAorc3VwcG9zZSB5b3UgYW5kIHNvbWVib2R5IGVsc2Ugc3RhcnRlZCBhdCB0aGUgc2FtZSBjb21taXQgWCwgYW5kIHlvdSBidWlsdAorYSBoaXN0b3J5IGxlYWRpbmcgdG8gY29tbWl0IEIgd2hpbGUgdGhlIG90aGVyIHBlcnNvbiBidWlsdCBhIGhpc3RvcnkKK2xlYWRpbmcgdG8gY29tbWl0IEEuICBUaGUgaGlzdG9yeSBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgQgorICAgICAvCisgLS0tWC0tLUEKKworLS0tLS0tLS0tLS0tLS0tLQorCitGdXJ0aGVyIHN1cHBvc2UgdGhhdCB0aGUgb3RoZXIgcGVyc29uIGFscmVhZHkgcHVzaGVkIGNoYW5nZXMgbGVhZGluZyB0byBBCitiYWNrIHRvIHRoZSBvcmlnaW5hbCByZXBvc2l0b3J5IGZyb20gd2hpY2ggeW91IHR3byBvYnRhaW5lZCB0aGUgb3JpZ2luYWwKK2NvbW1pdCBYLgorCitUaGUgcHVzaCBkb25lIGJ5IHRoZSBvdGhlciBwZXJzb24gdXBkYXRlZCB0aGUgYnJhbmNoIHRoYXQgdXNlZCB0byBwb2ludCBhdAorY29tbWl0IFggdG8gcG9pbnQgYXQgY29tbWl0IEEuICBJdCBpcyBhIGZhc3QtZm9yd2FyZC4KKworQnV0IGlmIHlvdSB0cnkgdG8gcHVzaCwgeW91IHdpbGwgYXR0ZW1wdCB0byB1cGRhdGUgdGhlIGJyYW5jaCAodGhhdAorbm93IHBvaW50cyBhdCBBKSB3aXRoIGNvbW1pdCBCLiAgVGhpcyBkb2VzIF9ub3RfIGZhc3QtZm9yd2FyZC4gIElmIHlvdSBkaWQKK3NvLCB0aGUgY2hhbmdlcyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBBIHdpbGwgYmUgbG9zdCwgYmVjYXVzZSBldmVyeWJvZHkKK3dpbGwgbm93IHN0YXJ0IGJ1aWxkaW5nIG9uIHRvcCBvZiBCLgorCitUaGUgY29tbWFuZCBieSBkZWZhdWx0IGRvZXMgbm90IGFsbG93IGFuIHVwZGF0ZSB0aGF0IGlzIG5vdCBhIGZhc3QtZm9yd2FyZAordG8gcHJldmVudCBzdWNoIGxvc3Mgb2YgaGlzdG9yeS4KKworSWYgeW91IGRvIG5vdCB3YW50IHRvIGxvc2UgeW91ciB3b3JrIChoaXN0b3J5IGZyb20gWCB0byBCKSBvciB0aGUgd29yayBieQordGhlIG90aGVyIHBlcnNvbiAoaGlzdG9yeSBmcm9tIFggdG8gQSksIHlvdSB3b3VsZCBuZWVkIHRvIGZpcnN0IGZldGNoIHRoZQoraGlzdG9yeSBmcm9tIHRoZSByZXBvc2l0b3J5LCBjcmVhdGUgYSBoaXN0b3J5IHRoYXQgY29udGFpbnMgY2hhbmdlcyBkb25lCitieSBib3RoIHBhcnRpZXMsIGFuZCBwdXNoIHRoZSByZXN1bHQgYmFjay4KKworWW91IGNhbiBwZXJmb3JtICJnaXQgcHVsbCIsIHJlc29sdmUgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kICJnaXQgcHVzaCIKK3RoZSByZXN1bHQuICBBICJnaXQgcHVsbCIgd2lsbCBjcmVhdGUgYSBtZXJnZSBjb21taXQgQyBiZXR3ZWVuIGNvbW1pdHMgQQorYW5kIEIuCisKKy0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgQi0tLUMKKyAgICAgLyAgIC8KKyAtLS1YLS0tQQorCistLS0tLS0tLS0tLS0tLS0tCisKK1VwZGF0aW5nIEEgd2l0aCB0aGUgcmVzdWx0aW5nIG1lcmdlIGNvbW1pdCB3aWxsIGZhc3QtZm9yd2FyZCBhbmQgeW91cgorcHVzaCB3aWxsIGJlIGFjY2VwdGVkLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHJlYmFzZSB5b3VyIGNoYW5nZSBiZXR3ZWVuIFggYW5kIEIgb24gdG9wIG9mIEEsCit3aXRoICJnaXQgcHVsbCAtLXJlYmFzZSIsIGFuZCBwdXNoIHRoZSByZXN1bHQgYmFjay4gIFRoZSByZWJhc2Ugd2lsbAorY3JlYXRlIGEgbmV3IGNvbW1pdCBEIHRoYXQgYnVpbGRzIHRoZSBjaGFuZ2UgYmV0d2VlbiBYIGFuZCBCIG9uIHRvcCBvZgorQS4KKworLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICBCICAgRAorICAgICAvICAgLworIC0tLVgtLS1BCisKKy0tLS0tLS0tLS0tLS0tLS0KKworQWdhaW4sIHVwZGF0aW5nIEEgd2l0aCB0aGlzIGNvbW1pdCB3aWxsIGZhc3QtZm9yd2FyZCBhbmQgeW91ciBwdXNoIHdpbGwgYmUKK2FjY2VwdGVkLgorCitUaGVyZSBpcyBhbm90aGVyIGNvbW1vbiBzaXR1YXRpb24gd2hlcmUgeW91IG1heSBlbmNvdW50ZXIgbm9uLWZhc3QtZm9yd2FyZAorcmVqZWN0aW9uIHdoZW4geW91IHRyeSB0byBwdXNoLCBhbmQgaXQgaXMgcG9zc2libGUgZXZlbiB3aGVuIHlvdSBhcmUKK3B1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgbm9ib2R5IGVsc2UgcHVzaGVzIGludG8uIEFmdGVyIHlvdSBwdXNoIGNvbW1pdAorQSB5b3Vyc2VsZiAoaW4gdGhlIGZpcnN0IHBpY3R1cmUgaW4gdGhpcyBzZWN0aW9uKSwgcmVwbGFjZSBpdCB3aXRoICJnaXQKK2NvbW1pdCAtLWFtZW5kIiB0byBwcm9kdWNlIGNvbW1pdCBCLCBhbmQgeW91IHRyeSB0byBwdXNoIGl0IG91dCwgYmVjYXVzZQorZm9yZ290IHRoYXQgeW91IGhhdmUgcHVzaGVkIEEgb3V0IGFscmVhZHkuIEluIHN1Y2ggYSBjYXNlLCBhbmQgb25seSBpZgoreW91IGFyZSBjZXJ0YWluIHRoYXQgbm9ib2R5IGluIHRoZSBtZWFudGltZSBmZXRjaGVkIHlvdXIgZWFybGllciBjb21taXQgQQorKGFuZCBzdGFydGVkIGJ1aWxkaW5nIG9uIHRvcCBvZiBpdCksIHlvdSBjYW4gcnVuICJnaXQgcHVzaCAtLWZvcmNlIiB0bworb3ZlcndyaXRlIGl0LiBJbiBvdGhlciB3b3JkcywgImdpdCBwdXNoIC0tZm9yY2UiIGlzIGEgbWV0aG9kIHJlc2VydmVkIGZvcgorYSBjYXNlIHdoZXJlIHlvdSBkbyBtZWFuIHRvIGxvc2UgaGlzdG9yeS4KKworCitFeGFtcGxlcworLS0tLS0tLS0KKworYGdpdCBwdXNoYDo6CisJV29ya3MgbGlrZSBgZ2l0IHB1c2ggPHJlbW90ZT5gLCB3aGVyZSA8cmVtb3RlPiBpcyB0aGUKKwljdXJyZW50IGJyYW5jaCdzIHJlbW90ZSAob3IgYG9yaWdpbmAsIGlmIG5vIHJlbW90ZSBpcworCWNvbmZpZ3VyZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCkuCisKK2BnaXQgcHVzaCBvcmlnaW5gOjoKKwlXaXRob3V0IGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiwgcHVzaGVzIHRoZSBjdXJyZW50IGJyYW5jaCB0bworCXRoZSBjb25maWd1cmVkIHVwc3RyZWFtIChgcmVtb3RlLm9yaWdpbi5tZXJnZWAgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlKSBpZiBpdCBoYXMgdGhlIHNhbWUgbmFtZSBhcyB0aGUgY3VycmVudCBicmFuY2gsIGFuZAorCWVycm9ycyBvdXQgd2l0aG91dCBwdXNoaW5nIG90aGVyd2lzZS4KKysKK1RoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoaXMgY29tbWFuZCB3aGVuIG5vIDxyZWZzcGVjPiBpcyBnaXZlbiBjYW4gYmUKK2NvbmZpZ3VyZWQgYnkgc2V0dGluZyB0aGUgYHB1c2hgIG9wdGlvbiBvZiB0aGUgcmVtb3RlLCBvciB0aGUgYHB1c2guZGVmYXVsdGAKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisrCitGb3IgZXhhbXBsZSwgdG8gZGVmYXVsdCB0byBwdXNoaW5nIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIGBvcmlnaW5gCit1c2UgYGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5wdXNoIEhFQURgLiAgQW55IHZhbGlkIDxyZWZzcGVjPiAobGlrZQordGhlIG9uZXMgaW4gdGhlIGV4YW1wbGVzIGJlbG93KSBjYW4gYmUgY29uZmlndXJlZCBhcyB0aGUgZGVmYXVsdCBmb3IKK2BnaXQgcHVzaCBvcmlnaW5gLgorCitgZ2l0IHB1c2ggb3JpZ2luIDpgOjoKKwlQdXNoICJtYXRjaGluZyIgYnJhbmNoZXMgdG8gYG9yaWdpbmAuIFNlZQorCTxyZWZzcGVjPiBpbiB0aGUgPDxPUFRJT05TLE9QVElPTlM+PiBzZWN0aW9uIGFib3ZlIGZvciBhCisJZGVzY3JpcHRpb24gb2YgIm1hdGNoaW5nIiBicmFuY2hlcy4KKworYGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXJgOjoKKwlGaW5kIGEgcmVmIHRoYXQgbWF0Y2hlcyBgbWFzdGVyYCBpbiB0aGUgc291cmNlIHJlcG9zaXRvcnkKKwkobW9zdCBsaWtlbHksIGl0IHdvdWxkIGZpbmQgYHJlZnMvaGVhZHMvbWFzdGVyYCksIGFuZCB1cGRhdGUKKwl0aGUgc2FtZSByZWYgKGUuZy4gYHJlZnMvaGVhZHMvbWFzdGVyYCkgaW4gYG9yaWdpbmAgcmVwb3NpdG9yeQorCXdpdGggaXQuICBJZiBgbWFzdGVyYCBkaWQgbm90IGV4aXN0IHJlbW90ZWx5LCBpdCB3b3VsZCBiZQorCWNyZWF0ZWQuCisKK2BnaXQgcHVzaCBvcmlnaW4gSEVBRGA6OgorCUEgaGFuZHkgd2F5IHRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBzYW1lIG5hbWUgb24gdGhlCisJcmVtb3RlLgorCitgZ2l0IHB1c2ggbW90aGVyc2hpcCBtYXN0ZXI6c2F0ZWxsaXRlL21hc3RlciBkZXY6c2F0ZWxsaXRlL2RldmA6OgorCVVzZSB0aGUgc291cmNlIHJlZiB0aGF0IG1hdGNoZXMgYG1hc3RlcmAgKGUuZy4gYHJlZnMvaGVhZHMvbWFzdGVyYCkKKwl0byB1cGRhdGUgdGhlIHJlZiB0aGF0IG1hdGNoZXMgYHNhdGVsbGl0ZS9tYXN0ZXJgIChtb3N0IHByb2JhYmx5CisJYHJlZnMvcmVtb3Rlcy9zYXRlbGxpdGUvbWFzdGVyYCkgaW4gdGhlIGBtb3RoZXJzaGlwYCByZXBvc2l0b3J5OworCWRvIHRoZSBzYW1lIGZvciBgZGV2YCBhbmQgYHNhdGVsbGl0ZS9kZXZgLgorKworVGhpcyBpcyB0byBlbXVsYXRlIGBnaXQgZmV0Y2hgIHJ1biBvbiB0aGUgYG1vdGhlcnNoaXBgIHVzaW5nIGBnaXQKK3B1c2hgIHRoYXQgaXMgcnVuIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gaW4gb3JkZXIgdG8gaW50ZWdyYXRlCit0aGUgd29yayBkb25lIG9uIGBzYXRlbGxpdGVgLCBhbmQgaXMgb2Z0ZW4gbmVjZXNzYXJ5IHdoZW4geW91IGNhbgorb25seSBtYWtlIGNvbm5lY3Rpb24gaW4gb25lIHdheSAoaS5lLiBzYXRlbGxpdGUgY2FuIHNzaCBpbnRvCittb3RoZXJzaGlwIGJ1dCBtb3RoZXJzaGlwIGNhbm5vdCBpbml0aWF0ZSBjb25uZWN0aW9uIHRvIHNhdGVsbGl0ZQorYmVjYXVzZSB0aGUgbGF0dGVyIGlzIGJlaGluZCBhIGZpcmV3YWxsIG9yIGRvZXMgbm90IHJ1biBzc2hkKS4KKysKK0FmdGVyIHJ1bm5pbmcgdGhpcyBgZ2l0IHB1c2hgIG9uIHRoZSBgc2F0ZWxsaXRlYCBtYWNoaW5lLCB5b3Ugd291bGQKK3NzaCBpbnRvIHRoZSBgbW90aGVyc2hpcGAgYW5kIHJ1biBgZ2l0IG1lcmdlYCB0aGVyZSB0byBjb21wbGV0ZSB0aGUKK2VtdWxhdGlvbiBvZiBgZ2l0IHB1bGxgIHRoYXQgd2VyZSBydW4gb24gYG1vdGhlcnNoaXBgIHRvIHB1bGwgY2hhbmdlcworbWFkZSBvbiBgc2F0ZWxsaXRlYC4KKworYGdpdCBwdXNoIG9yaWdpbiBIRUFEOm1hc3RlcmA6OgorCVB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSByZW1vdGUgcmVmIG1hdGNoaW5nIGBtYXN0ZXJgIGluIHRoZQorCWBvcmlnaW5gIHJlcG9zaXRvcnkuIFRoaXMgZm9ybSBpcyBjb252ZW5pZW50IHRvIHB1c2ggdGhlIGN1cnJlbnQKKwlicmFuY2ggd2l0aG91dCB0aGlua2luZyBhYm91dCBpdHMgbG9jYWwgbmFtZS4KKworYGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXI6cmVmcy9oZWFkcy9leHBlcmltZW50YWxgOjoKKwlDcmVhdGUgdGhlIGJyYW5jaCBgZXhwZXJpbWVudGFsYCBpbiB0aGUgYG9yaWdpbmAgcmVwb3NpdG9yeQorCWJ5IGNvcHlpbmcgdGhlIGN1cnJlbnQgYG1hc3RlcmAgYnJhbmNoLiAgVGhpcyBmb3JtIGlzIG9ubHkKKwluZWVkZWQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBvciB0YWcgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHdoZW4KKwl0aGUgbG9jYWwgbmFtZSBhbmQgdGhlIHJlbW90ZSBuYW1lIGFyZSBkaWZmZXJlbnQ7IG90aGVyd2lzZSwKKwl0aGUgcmVmIG5hbWUgb24gaXRzIG93biB3aWxsIHdvcmsuCisKK2BnaXQgcHVzaCBvcmlnaW4gOmV4cGVyaW1lbnRhbGA6OgorCUZpbmQgYSByZWYgdGhhdCBtYXRjaGVzIGBleHBlcmltZW50YWxgIGluIHRoZSBgb3JpZ2luYCByZXBvc2l0b3J5CisJKGUuZy4gYHJlZnMvaGVhZHMvZXhwZXJpbWVudGFsYCksIGFuZCBkZWxldGUgaXQuCisKK2BnaXQgcHVzaCBvcmlnaW4gK2RldjptYXN0ZXJgOjoKKwlVcGRhdGUgdGhlIG9yaWdpbiByZXBvc2l0b3J5J3MgbWFzdGVyIGJyYW5jaCB3aXRoIHRoZSBkZXYgYnJhbmNoLAorCWFsbG93aW5nIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcy4gICpUaGlzIGNhbiBsZWF2ZSB1bnJlZmVyZW5jZWQKKwljb21taXRzIGRhbmdsaW5nIGluIHRoZSBvcmlnaW4gcmVwb3NpdG9yeS4qICBDb25zaWRlciB0aGUKKwlmb2xsb3dpbmcgc2l0dWF0aW9uLCB3aGVyZSBhIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGU6CisrCistLS0tCisJICAgIG8tLS1vLS0tby0tLUEtLS1CICBvcmlnaW4vbWFzdGVyCisJCSAgICAgXAorCQkgICAgICBYLS0tWS0tLVogIGRldgorLS0tLQorKworVGhlIGFib3ZlIGNvbW1hbmQgd291bGQgY2hhbmdlIHRoZSBvcmlnaW4gcmVwb3NpdG9yeSB0bworKworLS0tLQorCQkgICAgICBBLS0tQiAgKHVubmFtZWQgYnJhbmNoKQorCQkgICAgIC8KKwkgICAgby0tLW8tLS1vLS0tWC0tLVktLS1aICBtYXN0ZXIKKy0tLS0KKysKK0NvbW1pdHMgQSBhbmQgQiB3b3VsZCBubyBsb25nZXIgYmVsb25nIHRvIGEgYnJhbmNoIHdpdGggYSBzeW1ib2xpYyBuYW1lLAorYW5kIHNvIHdvdWxkIGJlIHVucmVhY2hhYmxlLiAgQXMgc3VjaCwgdGhlc2UgY29tbWl0cyB3b3VsZCBiZSByZW1vdmVkIGJ5CithIGBnaXQgZ2NgIGNvbW1hbmQgb24gdGhlIG9yaWdpbiByZXBvc2l0b3J5LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXF1aWx0aW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXF1aWx0aW1wb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjYzM2IwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcXVpbHRpbXBvcnQudHh0CkBAIC0wLDAgKzEsNjEgQEAKK2dpdC1xdWlsdGltcG9ydCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1xdWlsdGltcG9ydCAtIEFwcGxpZXMgYSBxdWlsdCBwYXRjaHNldCBvbnRvIHRoZSBjdXJyZW50IGJyYW5jaAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBxdWlsdGltcG9ydCcgWy0tZHJ5LXJ1biB8IC1uXSBbLS1hdXRob3IgPGF1dGhvcj5dIFstLXBhdGNoZXMgPGRpcj5dCisJCVstLXNlcmllcyA8ZmlsZT5dCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitBcHBsaWVzIGEgcXVpbHQgcGF0Y2hzZXQgb250byB0aGUgY3VycmVudCBHaXQgYnJhbmNoLCBwcmVzZXJ2aW5nCit0aGUgcGF0Y2ggYm91bmRhcmllcywgcGF0Y2ggb3JkZXIsIGFuZCBwYXRjaCBkZXNjcmlwdGlvbnMgcHJlc2VudAoraW4gdGhlIHF1aWx0IHBhdGNoc2V0LgorCitGb3IgZWFjaCBwYXRjaCB0aGUgY29kZSBhdHRlbXB0cyB0byBleHRyYWN0IHRoZSBhdXRob3IgZnJvbSB0aGUKK3BhdGNoIGRlc2NyaXB0aW9uLiAgSWYgdGhhdCBmYWlscyBpdCBmYWxscyBiYWNrIHRvIHRoZSBhdXRob3IKK3NwZWNpZmllZCB3aXRoIC0tYXV0aG9yLiAgSWYgdGhlIC0tYXV0aG9yIGZsYWcgd2FzIG5vdCBnaXZlbgordGhlIHBhdGNoIGRlc2NyaXB0aW9uIGlzIGRpc3BsYXllZCBhbmQgdGhlIHVzZXIgaXMgYXNrZWQgdG8KK2ludGVyYWN0aXZlbHkgZW50ZXIgdGhlIGF1dGhvciBvZiB0aGUgcGF0Y2guCisKK0lmIGEgc3ViamVjdCBpcyBub3QgZm91bmQgaW4gdGhlIHBhdGNoIGRlc2NyaXB0aW9uIHRoZSBwYXRjaCBuYW1lIGlzCitwcmVzZXJ2ZWQgYXMgdGhlIDEgbGluZSBzdWJqZWN0IGluIHRoZSBHaXQgZGVzY3JpcHRpb24uCisKK09QVElPTlMKKy0tLS0tLS0KKworLW46OgorLS1kcnktcnVuOjoKKwlXYWxrIHRocm91Z2ggdGhlIHBhdGNoZXMgaW4gdGhlIHNlcmllcyBhbmQgd2FybgorCWlmIHdlIGNhbm5vdCBmaW5kIGFsbCBvZiB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGNvbW1pdAorCWEgcGF0Y2guICBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcgb25seSBtaXNzaW5nIGF1dGhvcgorCWluZm9ybWF0aW9uIGlzIHdhcm5lZCBhYm91dC4KKworLS1hdXRob3IgQXV0aG9yIE5hbWUgPEF1dGhvciBFbWFpbD46OgorCVRoZSBhdXRob3IgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB0byB1c2Ugd2hlbiBubyBhdXRob3IKKwlpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIHBhdGNoIGRlc2NyaXB0aW9uLgorCistLXBhdGNoZXMgPGRpcj46OgorCVRoZSBkaXJlY3RvcnkgdG8gZmluZCB0aGUgcXVpbHQgcGF0Y2hlcy4KKysKK1RoZSBkZWZhdWx0IGZvciB0aGUgcGF0Y2ggZGlyZWN0b3J5IGlzIHBhdGNoZXMKK29yIHRoZSB2YWx1ZSBvZiB0aGUgJFFVSUxUX1BBVENIRVMgZW52aXJvbm1lbnQKK3ZhcmlhYmxlLgorCistLXNlcmllcyA8ZmlsZT46OgorCVRoZSBxdWlsdCBzZXJpZXMgZmlsZS4KKysKK1RoZSBkZWZhdWx0IGZvciB0aGUgc2VyaWVzIGZpbGUgaXMgPHBhdGNoZXM+L3Nlcmllcworb3IgdGhlIHZhbHVlIG9mIHRoZSAkUVVJTFRfU0VSSUVTIGVudmlyb25tZW50Cit2YXJpYWJsZS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWFkLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTFkNTU3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dApAQCAtMCwwICsxLDQzMSBAQAorZ2l0LXJlYWQtdHJlZSgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVhZC10cmVlIC0gUmVhZHMgdHJlZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBpbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZWFkLXRyZWUnIFtbLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD5dCisJCVstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXQorCQlbLS1pbmRleC1vdXRwdXQ9PGZpbGU+XSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdCisJCSgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKQorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgdGhlIHRyZWUgaW5mb3JtYXRpb24gZ2l2ZW4gYnkgPHRyZWUtaXNoPiBpbnRvIHRoZSBpbmRleCwKK2J1dCBkb2VzIG5vdCBhY3R1YWxseSAqdXBkYXRlKiBhbnkgb2YgdGhlIGZpbGVzIGl0ICJjYWNoZXMiLiAoc2VlOgorbGlua2dpdDpnaXQtY2hlY2tvdXQtaW5kZXhbMV0pCisKK09wdGlvbmFsbHksIGl0IGNhbiBtZXJnZSBhIHRyZWUgaW50byB0aGUgaW5kZXgsIHBlcmZvcm0gYQorZmFzdC1mb3J3YXJkIChpLmUuIDItd2F5KSBtZXJnZSwgb3IgYSAzLXdheSBtZXJnZSwgd2l0aCB0aGUgYC1tYAorZmxhZy4gIFdoZW4gdXNlZCB3aXRoIGAtbWAsIHRoZSBgLXVgIGZsYWcgY2F1c2VzIGl0IHRvIGFsc28gdXBkYXRlCit0aGUgZmlsZXMgaW4gdGhlIHdvcmsgdHJlZSB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLgorCitUcml2aWFsIG1lcmdlcyBhcmUgZG9uZSBieSAnZ2l0IHJlYWQtdHJlZScgaXRzZWxmLiAgT25seSBjb25mbGljdGluZyBwYXRocword2lsbCBiZSBpbiB1bm1lcmdlZCBzdGF0ZSB3aGVuICdnaXQgcmVhZC10cmVlJyByZXR1cm5zLgorCitPUFRJT05TCistLS0tLS0tCistbTo6CisJUGVyZm9ybSBhIG1lcmdlLCBub3QganVzdCBhIHJlYWQuICBUaGUgY29tbWFuZCB3aWxsCisJcmVmdXNlIHRvIHJ1biBpZiB5b3VyIGluZGV4IGZpbGUgaGFzIHVubWVyZ2VkIGVudHJpZXMsCisJaW5kaWNhdGluZyB0aGF0IHlvdSBoYXZlIG5vdCBmaW5pc2hlZCBwcmV2aW91cyBtZXJnZSB5b3UKKwlzdGFydGVkLgorCistLXJlc2V0OjoKKyAgICAgICAgU2FtZSBhcyAtbSwgZXhjZXB0IHRoYXQgdW5tZXJnZWQgZW50cmllcyBhcmUgZGlzY2FyZGVkCisgICAgICAgIGluc3RlYWQgb2YgZmFpbGluZy4KKworLXU6OgorCUFmdGVyIGEgc3VjY2Vzc2Z1bCBtZXJnZSwgdXBkYXRlIHRoZSBmaWxlcyBpbiB0aGUgd29yaworCXRyZWUgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZS4KKworLWk6OgorCVVzdWFsbHkgYSBtZXJnZSByZXF1aXJlcyB0aGUgaW5kZXggZmlsZSBhcyB3ZWxsIGFzIHRoZQorCWZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgdG8gYmUgdXAgdG8gZGF0ZSB3aXRoIHRoZQorCWN1cnJlbnQgaGVhZCBjb21taXQsIGluIG9yZGVyIG5vdCB0byBsb3NlIGxvY2FsCisJY2hhbmdlcy4gIFRoaXMgZmxhZyBkaXNhYmxlcyB0aGUgY2hlY2sgd2l0aCB0aGUgd29ya2luZworCXRyZWUgYW5kIGlzIG1lYW50IHRvIGJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIG1lcmdlIG9mCisJdHJlZXMgdGhhdCBhcmUgbm90IGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQKKwl3b3JraW5nIHRyZWUgc3RhdHVzIGludG8gYSB0ZW1wb3JhcnkgaW5kZXggZmlsZS4KKworLW46OgorLS1kcnktcnVuOjoKKwlDaGVjayBpZiB0aGUgY29tbWFuZCB3b3VsZCBlcnJvciBvdXQsIHdpdGhvdXQgdXBkYXRpbmcgdGhlIGluZGV4CisJb3IgdGhlIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUgZm9yIHJlYWwuCisKKy12OjoKKwlTaG93IHRoZSBwcm9ncmVzcyBvZiBjaGVja2luZyBmaWxlcyBvdXQuCisKKy0tdHJpdmlhbDo6CisJUmVzdHJpY3QgdGhyZWUtd2F5IG1lcmdlIGJ5ICdnaXQgcmVhZC10cmVlJyB0byBoYXBwZW4KKwlvbmx5IGlmIHRoZXJlIGlzIG5vIGZpbGUtbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCwgaW5zdGVhZAorCW9mIHJlc29sdmluZyBtZXJnZSBmb3IgdHJpdmlhbCBjYXNlcyBhbmQgbGVhdmluZworCWNvbmZsaWN0aW5nIGZpbGVzIHVucmVzb2x2ZWQgaW4gdGhlIGluZGV4LgorCistLWFnZ3Jlc3NpdmU6OgorCVVzdWFsbHkgYSB0aHJlZS13YXkgbWVyZ2UgYnkgJ2dpdCByZWFkLXRyZWUnIHJlc29sdmVzCisJdGhlIG1lcmdlIGZvciByZWFsbHkgdHJpdmlhbCBjYXNlcyBhbmQgbGVhdmVzIG90aGVyCisJY2FzZXMgdW5yZXNvbHZlZCBpbiB0aGUgaW5kZXgsIHNvIHRoYXQgcG9yY2VsYWlucyBjYW4KKwlpbXBsZW1lbnQgZGlmZmVyZW50IG1lcmdlIHBvbGljaWVzLiAgVGhpcyBmbGFnIG1ha2VzIHRoZQorCWNvbW1hbmQgcmVzb2x2ZSBhIGZldyBtb3JlIGNhc2VzIGludGVybmFsbHk6CisrCisqIHdoZW4gb25lIHNpZGUgcmVtb3ZlcyBhIHBhdGggYW5kIHRoZSBvdGhlciBzaWRlIGxlYXZlcyB0aGUgcGF0aAorICB1bm1vZGlmaWVkLiAgVGhlIHJlc29sdXRpb24gaXMgdG8gcmVtb3ZlIHRoYXQgcGF0aC4KKyogd2hlbiBib3RoIHNpZGVzIHJlbW92ZSBhIHBhdGguICBUaGUgcmVzb2x1dGlvbiBpcyB0byByZW1vdmUgdGhhdCBwYXRoLgorKiB3aGVuIGJvdGggc2lkZXMgYWRkIGEgcGF0aCBpZGVudGljYWxseS4gIFRoZSByZXNvbHV0aW9uCisgIGlzIHRvIGFkZCB0aGF0IHBhdGguCisKKy0tcHJlZml4PTxwcmVmaXg+Lzo6CisJS2VlcCB0aGUgY3VycmVudCBpbmRleCBjb250ZW50cywgYW5kIHJlYWQgdGhlIGNvbnRlbnRzCisJb2YgdGhlIG5hbWVkIHRyZWUtaXNoIHVuZGVyIHRoZSBkaXJlY3RvcnkgYXQgYDxwcmVmaXg+YC4KKwlUaGUgY29tbWFuZCB3aWxsIHJlZnVzZSB0byBvdmVyd3JpdGUgZW50cmllcyB0aGF0IGFscmVhZHkKKwlleGlzdGVkIGluIHRoZSBvcmlnaW5hbCBpbmRleCBmaWxlLiBOb3RlIHRoYXQgdGhlIGA8cHJlZml4Pi9gCisJdmFsdWUgbXVzdCBlbmQgd2l0aCBhIHNsYXNoLgorCistLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPjo6CisJV2hlbiBydW5uaW5nIHRoZSBjb21tYW5kIHdpdGggYC11YCBhbmQgYC1tYCBvcHRpb25zLCB0aGUKKwltZXJnZSByZXN1bHQgbWF5IG5lZWQgdG8gb3ZlcndyaXRlIHBhdGhzIHRoYXQgYXJlIG5vdAorCXRyYWNrZWQgaW4gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhlIGNvbW1hbmQgdXN1YWxseQorCXJlZnVzZXMgdG8gcHJvY2VlZCB3aXRoIHRoZSBtZXJnZSB0byBhdm9pZCBsb3Npbmcgc3VjaCBhCisJcGF0aC4gIEhvd2V2ZXIgdGhpcyBzYWZldHkgdmFsdmUgc29tZXRpbWVzIGdldHMgaW4gdGhlCisJd2F5LiAgRm9yIGV4YW1wbGUsIGl0IG9mdGVuIGhhcHBlbnMgdGhhdCB0aGUgb3RoZXIKKwlicmFuY2ggYWRkZWQgYSBmaWxlIHRoYXQgdXNlZCB0byBiZSBhIGdlbmVyYXRlZCBmaWxlIGluCisJeW91ciBicmFuY2gsIGFuZCB0aGUgc2FmZXR5IHZhbHZlIHRyaWdnZXJzIHdoZW4geW91IHRyeQorCXRvIHN3aXRjaCB0byB0aGF0IGJyYW5jaCBhZnRlciB5b3UgcmFuIGBtYWtlYCBidXQgYmVmb3JlCisJcnVubmluZyBgbWFrZSBjbGVhbmAgdG8gcmVtb3ZlIHRoZSBnZW5lcmF0ZWQgZmlsZS4gIFRoaXMKKwlvcHRpb24gdGVsbHMgdGhlIGNvbW1hbmQgdG8gcmVhZCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUKKwlmaWxlICh1c3VhbGx5ICcuZ2l0aWdub3JlJykgYW5kIGFsbG93cyBzdWNoIGFuIHVudHJhY2tlZAorCWJ1dCBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZSB0byBiZSBvdmVyd3JpdHRlbi4KKworLS1pbmRleC1vdXRwdXQ9PGZpbGU+OjoKKwlJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIHJlc3VsdHMgb3V0IHRvIGAkR0lUX0lOREVYX0ZJTEVgLAorCXdyaXRlIHRoZSByZXN1bHRpbmcgaW5kZXggaW4gdGhlIG5hbWVkIGZpbGUuICBXaGlsZSB0aGUKKwljb21tYW5kIGlzIG9wZXJhdGluZywgdGhlIG9yaWdpbmFsIGluZGV4IGZpbGUgaXMgbG9ja2VkCisJd2l0aCB0aGUgc2FtZSBtZWNoYW5pc20gYXMgdXN1YWwuICBUaGUgZmlsZSBtdXN0IGFsbG93CisJdG8gYmUgcmVuYW1lKDIpZWQgaW50byBmcm9tIGEgdGVtcG9yYXJ5IGZpbGUgdGhhdCBpcworCWNyZWF0ZWQgbmV4dCB0byB0aGUgdXN1YWwgaW5kZXggZmlsZTsgdHlwaWNhbGx5IHRoaXMKKwltZWFucyBpdCBuZWVkcyB0byBiZSBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtIGFzIHRoZSBpbmRleAorCWZpbGUgaXRzZWxmLCBhbmQgeW91IG5lZWQgd3JpdGUgcGVybWlzc2lvbiB0byB0aGUKKwlkaXJlY3RvcmllcyB0aGUgaW5kZXggZmlsZSBhbmQgaW5kZXggb3V0cHV0IGZpbGUgYXJlCisJbG9jYXRlZCBpbi4KKworLS1uby1zcGFyc2UtY2hlY2tvdXQ6OgorCURpc2FibGUgc3BhcnNlIGNoZWNrb3V0IHN1cHBvcnQgZXZlbiBpZiBgY29yZS5zcGFyc2VDaGVja291dGAKKwlpcyB0cnVlLgorCistLWVtcHR5OjoKKwlJbnN0ZWFkIG9mIHJlYWRpbmcgdHJlZSBvYmplY3QocykgaW50byB0aGUgaW5kZXgsIGp1c3QgZW1wdHkKKwlpdC4KKworPHRyZWUtaXNoIz46OgorCVRoZSBpZCBvZiB0aGUgdHJlZSBvYmplY3QocykgdG8gYmUgcmVhZC9tZXJnZWQuCisKKworTWVyZ2luZworLS0tLS0tLQorSWYgYC1tYCBpcyBzcGVjaWZpZWQsICdnaXQgcmVhZC10cmVlJyBjYW4gcGVyZm9ybSAzIGtpbmRzIG9mCittZXJnZSwgYSBzaW5nbGUgdHJlZSBtZXJnZSBpZiBvbmx5IDEgdHJlZSBpcyBnaXZlbiwgYQorZmFzdC1mb3J3YXJkIG1lcmdlIHdpdGggMiB0cmVlcywgb3IgYSAzLXdheSBtZXJnZSBpZiAzIHRyZWVzIGFyZQorcHJvdmlkZWQuCisKKworU2luZ2xlIFRyZWUgTWVyZ2UKK35+fn5+fn5+fn5+fn5+fn5+CitJZiBvbmx5IDEgdHJlZSBpcyBzcGVjaWZpZWQsICdnaXQgcmVhZC10cmVlJyBvcGVyYXRlcyBhcyBpZiB0aGUgdXNlciBkaWQgbm90CitzcGVjaWZ5IGAtbWAsIGV4Y2VwdCB0aGF0IGlmIHRoZSBvcmlnaW5hbCBpbmRleCBoYXMgYW4gZW50cnkgZm9yIGEKK2dpdmVuIHBhdGhuYW1lLCBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBwYXRoIG1hdGNoIHdpdGggdGhlIHRyZWUKK2JlaW5nIHJlYWQsIHRoZSBzdGF0IGluZm8gZnJvbSB0aGUgaW5kZXggaXMgdXNlZC4gKEluIG90aGVyIHdvcmRzLCB0aGUKK2luZGV4J3Mgc3RhdCgpcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgbWVyZ2VkIHRyZWUncykuCisKK1RoYXQgbWVhbnMgdGhhdCBpZiB5b3UgZG8gYSBgZ2l0IHJlYWQtdHJlZSAtbSA8bmV3dHJlZT5gIGZvbGxvd2VkIGJ5IGEKK2BnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgLWFgLCB0aGUgJ2dpdCBjaGVja291dC1pbmRleCcgb25seSBjaGVja3Mgb3V0Cit0aGUgc3R1ZmYgdGhhdCByZWFsbHkgY2hhbmdlZC4KKworVGhpcyBpcyB1c2VkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGZhbHNlIGhpdHMgd2hlbiAnZ2l0IGRpZmYtZmlsZXMnIGlzCitydW4gYWZ0ZXIgJ2dpdCByZWFkLXRyZWUnLgorCisKK1R3byBUcmVlIE1lcmdlCit+fn5+fn5+fn5+fn5+fgorCitUeXBpY2FsbHksIHRoaXMgaXMgaW52b2tlZCBhcyBgZ2l0IHJlYWQtdHJlZSAtbSAkSCAkTWAsIHdoZXJlICRICitpcyB0aGUgaGVhZCBjb21taXQgb2YgdGhlIGN1cnJlbnQgcmVwb3NpdG9yeSwgYW5kICRNIGlzIHRoZSBoZWFkCitvZiBhIGZvcmVpZ24gdHJlZSwgd2hpY2ggaXMgc2ltcGx5IGFoZWFkIG9mICRIIChpLmUuIHdlIGFyZSBpbiBhCitmYXN0LWZvcndhcmQgc2l0dWF0aW9uKS4KKworV2hlbiB0d28gdHJlZXMgYXJlIHNwZWNpZmllZCwgdGhlIHVzZXIgaXMgdGVsbGluZyAnZ2l0IHJlYWQtdHJlZScKK3RoZSBmb2xsb3dpbmc6CisKKyAgICAgMS4gVGhlIGN1cnJlbnQgaW5kZXggYW5kIHdvcmsgdHJlZSBpcyBkZXJpdmVkIGZyb20gJEgsIGJ1dAorCXRoZSB1c2VyIG1heSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gdGhlbSBzaW5jZSAkSC4KKworICAgICAyLiBUaGUgdXNlciB3YW50cyB0byBmYXN0LWZvcndhcmQgdG8gJE0uCisKK0luIHRoaXMgY2FzZSwgdGhlIGBnaXQgcmVhZC10cmVlIC1tICRIICRNYCBjb21tYW5kIG1ha2VzIHN1cmUKK3RoYXQgbm8gbG9jYWwgY2hhbmdlIGlzIGxvc3QgYXMgdGhlIHJlc3VsdCBvZiB0aGlzICJtZXJnZSIuCitIZXJlIGFyZSB0aGUgImNhcnJ5IGZvcndhcmQiIHJ1bGVzLCB3aGVyZSAiSSIgZGVub3RlcyB0aGUgaW5kZXgsCisiY2xlYW4iIG1lYW5zIHRoYXQgaW5kZXggYW5kIHdvcmsgdHJlZSBjb2luY2lkZSwgYW5kICJleGlzdHMiLyJub3RoaW5nIgorcmVmZXIgdG8gdGhlIHByZXNlbmNlIG9mIGEgcGF0aCBpbiB0aGUgc3BlY2lmaWVkIGNvbW1pdDoKKworCUkgICAgICAgICAgICAgICAgICAgSCAgICAgICAgTSAgICAgICAgUmVzdWx0CisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAwICBub3RoaW5nICAgICAgICAgICAgIG5vdGhpbmcgIG5vdGhpbmcgIChkb2VzIG5vdCBoYXBwZW4pCisgICAgIDEgIG5vdGhpbmcgICAgICAgICAgICAgbm90aGluZyAgZXhpc3RzICAgdXNlIE0KKyAgICAgMiAgbm90aGluZyAgICAgICAgICAgICBleGlzdHMgICBub3RoaW5nICByZW1vdmUgcGF0aCBmcm9tIGluZGV4CisgICAgIDMgIG5vdGhpbmcgICAgICAgICAgICAgZXhpc3RzICAgZXhpc3RzLCAgdXNlIE0gaWYgImluaXRpYWwgY2hlY2tvdXQiLAorCQkJCSAgICAgSCA9PSBNICAga2VlcCBpbmRleCBvdGhlcndpc2UKKwkJCQkgICAgIGV4aXN0cywgIGZhaWwKKwkJCQkgICAgIEggIT0gTQorCisgICAgICAgIGNsZWFuIEk9PUggIEk9PU0KKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgNCAgeWVzICAgTi9BICAgTi9BICAgICBub3RoaW5nICBub3RoaW5nICBrZWVwIGluZGV4CisgICAgIDUgIG5vICAgIE4vQSAgIE4vQSAgICAgbm90aGluZyAgbm90aGluZyAga2VlcCBpbmRleAorCisgICAgIDYgIHllcyAgIE4vQSAgIHllcyAgICAgbm90aGluZyAgZXhpc3RzICAga2VlcCBpbmRleAorICAgICA3ICBubyAgICBOL0EgICB5ZXMgICAgIG5vdGhpbmcgIGV4aXN0cyAgIGtlZXAgaW5kZXgKKyAgICAgOCAgeWVzICAgTi9BICAgbm8gICAgICBub3RoaW5nICBleGlzdHMgICBmYWlsCisgICAgIDkgIG5vICAgIE4vQSAgIG5vICAgICAgbm90aGluZyAgZXhpc3RzICAgZmFpbAorCisgICAgIDEwIHllcyAgIHllcyAgIE4vQSAgICAgZXhpc3RzICAgbm90aGluZyAgcmVtb3ZlIHBhdGggZnJvbSBpbmRleAorICAgICAxMSBubyAgICB5ZXMgICBOL0EgICAgIGV4aXN0cyAgIG5vdGhpbmcgIGZhaWwKKyAgICAgMTIgeWVzICAgbm8gICAgTi9BICAgICBleGlzdHMgICBub3RoaW5nICBmYWlsCisgICAgIDEzIG5vICAgIG5vICAgIE4vQSAgICAgZXhpc3RzICAgbm90aGluZyAgZmFpbAorCisJY2xlYW4gKEg9PU0pCisgICAgICAgLS0tLS0tCisgICAgIDE0IHllcyAgICAgICAgICAgICAgICAgZXhpc3RzICAgZXhpc3RzICAga2VlcCBpbmRleAorICAgICAxNSBubyAgICAgICAgICAgICAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGtlZXAgaW5kZXgKKworICAgICAgICBjbGVhbiBJPT1IICBJPT1NIChIIT1NKQorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAxNiB5ZXMgICBubyAgICBubyAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGZhaWwKKyAgICAgMTcgbm8gICAgbm8gICAgbm8gICAgICBleGlzdHMgICBleGlzdHMgICBmYWlsCisgICAgIDE4IHllcyAgIG5vICAgIHllcyAgICAgZXhpc3RzICAgZXhpc3RzICAga2VlcCBpbmRleAorICAgICAxOSBubyAgICBubyAgICB5ZXMgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGtlZXAgaW5kZXgKKyAgICAgMjAgeWVzICAgeWVzICAgbm8gICAgICBleGlzdHMgICBleGlzdHMgICB1c2UgTQorICAgICAyMSBubyAgICB5ZXMgICBubyAgICAgIGV4aXN0cyAgIGV4aXN0cyAgIGZhaWwKKworSW4gYWxsICJrZWVwIGluZGV4IiBjYXNlcywgdGhlIGluZGV4IGVudHJ5IHN0YXlzIGFzIGluIHRoZQorb3JpZ2luYWwgaW5kZXggZmlsZS4gIElmIHRoZSBlbnRyeSBpcyBub3QgdXAgdG8gZGF0ZSwKKydnaXQgcmVhZC10cmVlJyBrZWVwcyB0aGUgY29weSBpbiB0aGUgd29yayB0cmVlIGludGFjdCB3aGVuCitvcGVyYXRpbmcgdW5kZXIgdGhlIC11IGZsYWcuCisKK1doZW4gdGhpcyBmb3JtIG9mICdnaXQgcmVhZC10cmVlJyByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgeW91IGNhbgorc2VlIHdoaWNoIG9mIHRoZSAibG9jYWwgY2hhbmdlcyIgdGhhdCB5b3UgbWFkZSB3ZXJlIGNhcnJpZWQgZm9yd2FyZCBieSBydW5uaW5nCitgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJE1gLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKK25lY2Vzc2FyaWx5IG1hdGNoIHdoYXQgYGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICRIYCB3b3VsZCBoYXZlCitwcm9kdWNlZCBiZWZvcmUgc3VjaCBhIHR3byB0cmVlIG1lcmdlLiAgVGhpcyBpcyBiZWNhdXNlIG9mIGNhc2VzCisxOCBhbmQgMTkgLS0tIGlmIHlvdSBhbHJlYWR5IGhhZCB0aGUgY2hhbmdlcyBpbiAkTSAoZS5nLiBtYXliZQoreW91IHBpY2tlZCBpdCB1cCB2aWEgZS1tYWlsIGluIGEgcGF0Y2ggZm9ybSksIGBnaXQgZGlmZi1pbmRleAorLS1jYWNoZWQgJEhgIHdvdWxkIGhhdmUgdG9sZCB5b3UgYWJvdXQgdGhlIGNoYW5nZSBiZWZvcmUgdGhpcworbWVyZ2UsIGJ1dCBpdCB3b3VsZCBub3Qgc2hvdyBpbiBgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJE1gCitvdXRwdXQgYWZ0ZXIgdGhlIHR3by10cmVlIG1lcmdlLgorCitDYXNlIDMgaXMgc2xpZ2h0bHkgdHJpY2t5IGFuZCBuZWVkcyBleHBsYW5hdGlvbi4gIFRoZSByZXN1bHQgZnJvbSB0aGlzCitydWxlIGxvZ2ljYWxseSBzaG91bGQgYmUgdG8gcmVtb3ZlIHRoZSBwYXRoIGlmIHRoZSB1c2VyIHN0YWdlZCB0aGUgcmVtb3ZhbAorb2YgdGhlIHBhdGggYW5kIHRoZW4gc3dpdGNoaW5nIHRvIGEgbmV3IGJyYW5jaC4gIFRoYXQgaG93ZXZlciB3aWxsIHByZXZlbnQKK3RoZSBpbml0aWFsIGNoZWNrb3V0IGZyb20gaGFwcGVuaW5nLCBzbyB0aGUgcnVsZSBpcyBtb2RpZmllZCB0byB1c2UgTSAobmV3Cit0cmVlKSBvbmx5IHdoZW4gdGhlIGNvbnRlbnQgb2YgdGhlIGluZGV4IGlzIGVtcHR5LiAgT3RoZXJ3aXNlIHRoZSByZW1vdmFsCitvZiB0aGUgcGF0aCBpcyBrZXB0IGFzIGxvbmcgYXMgJEggYW5kICRNIGFyZSB0aGUgc2FtZS4KKworMy1XYXkgTWVyZ2UKK35+fn5+fn5+fn5+CitFYWNoICJpbmRleCIgZW50cnkgaGFzIHR3byBiaXRzIHdvcnRoIG9mICJzdGFnZSIgc3RhdGUuIHN0YWdlIDAgaXMgdGhlCitub3JtYWwgb25lLCBhbmQgaXMgdGhlIG9ubHkgb25lIHlvdSdkIHNlZSBpbiBhbnkga2luZCBvZiBub3JtYWwgdXNlLgorCitIb3dldmVyLCB3aGVuIHlvdSBkbyAnZ2l0IHJlYWQtdHJlZScgd2l0aCB0aHJlZSB0cmVlcywgdGhlICJzdGFnZSIKK3N0YXJ0cyBvdXQgYXQgMS4KKworVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gZG8KKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVhZC10cmVlIC1tIDx0cmVlMT4gPHRyZWUyPiA8dHJlZTM+CistLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB5b3Ugd2lsbCBlbmQgdXAgd2l0aCBhbiBpbmRleCB3aXRoIGFsbCBvZiB0aGUgPHRyZWUxPiBlbnRyaWVzIGluCisic3RhZ2UxIiwgYWxsIG9mIHRoZSA8dHJlZTI+IGVudHJpZXMgaW4gInN0YWdlMiIgYW5kIGFsbCBvZiB0aGUKKzx0cmVlMz4gZW50cmllcyBpbiAic3RhZ2UzIi4gIFdoZW4gcGVyZm9ybWluZyBhIG1lcmdlIG9mIGFub3RoZXIKK2JyYW5jaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgd2UgdXNlIHRoZSBjb21tb24gYW5jZXN0b3IgdHJlZQorYXMgPHRyZWUxPiwgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQgYXMgPHRyZWUyPiwgYW5kIHRoZSBvdGhlcgorYnJhbmNoIGhlYWQgYXMgPHRyZWUzPi4KKworRnVydGhlcm1vcmUsICdnaXQgcmVhZC10cmVlJyBoYXMgc3BlY2lhbC1jYXNlIGxvZ2ljIHRoYXQgc2F5czogaWYgeW91IHNlZQorYSBmaWxlIHRoYXQgbWF0Y2hlcyBpbiBhbGwgcmVzcGVjdHMgaW4gdGhlIGZvbGxvd2luZyBzdGF0ZXMsIGl0CisiY29sbGFwc2VzIiBiYWNrIHRvICJzdGFnZTAiOgorCisgICAtIHN0YWdlIDIgYW5kIDMgYXJlIHRoZSBzYW1lOyB0YWtlIG9uZSBvciB0aGUgb3RoZXIgKGl0IG1ha2VzIG5vCisgICAgIGRpZmZlcmVuY2UgLSB0aGUgc2FtZSB3b3JrIGhhcyBiZWVuIGRvbmUgb24gb3VyIGJyYW5jaCBpbgorICAgICBzdGFnZSAyIGFuZCB0aGVpciBicmFuY2ggaW4gc3RhZ2UgMykKKworICAgLSBzdGFnZSAxIGFuZCBzdGFnZSAyIGFyZSB0aGUgc2FtZSBhbmQgc3RhZ2UgMyBpcyBkaWZmZXJlbnQ7IHRha2UKKyAgICAgc3RhZ2UgMyAob3VyIGJyYW5jaCBpbiBzdGFnZSAyIGRpZCBub3QgZG8gYW55dGhpbmcgc2luY2UgdGhlCisgICAgIGFuY2VzdG9yIGluIHN0YWdlIDEgd2hpbGUgdGhlaXIgYnJhbmNoIGluIHN0YWdlIDMgd29ya2VkIG9uCisgICAgIGl0KQorCisgICAtIHN0YWdlIDEgYW5kIHN0YWdlIDMgYXJlIHRoZSBzYW1lIGFuZCBzdGFnZSAyIGlzIGRpZmZlcmVudCB0YWtlCisgICAgIHN0YWdlIDIgKHdlIGRpZCBzb21ldGhpbmcgd2hpbGUgdGhleSBkaWQgbm90aGluZykKKworVGhlICdnaXQgd3JpdGUtdHJlZScgY29tbWFuZCByZWZ1c2VzIHRvIHdyaXRlIGEgbm9uc2Vuc2ljYWwgdHJlZSwgYW5kIGl0Cit3aWxsIGNvbXBsYWluIGFib3V0IHVubWVyZ2VkIGVudHJpZXMgaWYgaXQgc2VlcyBhIHNpbmdsZSBlbnRyeSB0aGF0IGlzIG5vdAorc3RhZ2UgMC4KKworT0ssIHRoaXMgYWxsIHNvdW5kcyBsaWtlIGEgY29sbGVjdGlvbiBvZiB0b3RhbGx5IG5vbnNlbnNpY2FsIHJ1bGVzLAorYnV0IGl0J3MgYWN0dWFsbHkgZXhhY3RseSB3aGF0IHlvdSB3YW50IGluIG9yZGVyIHRvIGRvIGEgZmFzdAorbWVyZ2UuIFRoZSBkaWZmZXJlbnQgc3RhZ2VzIHJlcHJlc2VudCB0aGUgInJlc3VsdCB0cmVlIiAoc3RhZ2UgMCwgYWthCisibWVyZ2VkIiksIHRoZSBvcmlnaW5hbCB0cmVlIChzdGFnZSAxLCBha2EgIm9yaWciKSwgYW5kIHRoZSB0d28gdHJlZXMKK3lvdSBhcmUgdHJ5aW5nIHRvIG1lcmdlIChzdGFnZSAyIGFuZCAzIHJlc3BlY3RpdmVseSkuCisKK1RoZSBvcmRlciBvZiBzdGFnZXMgMSwgMiBhbmQgMyAoaGVuY2UgdGhlIG9yZGVyIG9mIHRocmVlCis8dHJlZS1pc2g+IGNvbW1hbmQtbGluZSBhcmd1bWVudHMpIGFyZSBzaWduaWZpY2FudCB3aGVuIHlvdQorc3RhcnQgYSAzLXdheSBtZXJnZSB3aXRoIGFuIGluZGV4IGZpbGUgdGhhdCBpcyBhbHJlYWR5Citwb3B1bGF0ZWQuICBIZXJlIGlzIGFuIG91dGxpbmUgb2YgaG93IHRoZSBhbGdvcml0aG0gd29ya3M6CisKKy0gaWYgYSBmaWxlIGV4aXN0cyBpbiBpZGVudGljYWwgZm9ybWF0IGluIGFsbCB0aHJlZSB0cmVlcywgaXQgd2lsbAorICBhdXRvbWF0aWNhbGx5IGNvbGxhcHNlIHRvICJtZXJnZWQiIHN0YXRlIGJ5ICdnaXQgcmVhZC10cmVlJy4KKworLSBhIGZpbGUgdGhhdCBoYXMgX2FueV8gZGlmZmVyZW5jZSB3aGF0LXNvLWV2ZXIgaW4gdGhlIHRocmVlIHRyZWVzCisgIHdpbGwgc3RheSBhcyBzZXBhcmF0ZSBlbnRyaWVzIGluIHRoZSBpbmRleC4gSXQncyB1cCB0byAicG9yY2VsYWluCisgIHBvbGljeSIgdG8gZGV0ZXJtaW5lIGhvdyB0byByZW1vdmUgdGhlIG5vbi0wIHN0YWdlcywgYW5kIGluc2VydCBhCisgIG1lcmdlZCB2ZXJzaW9uLgorCistIHRoZSBpbmRleCBmaWxlIHNhdmVzIGFuZCByZXN0b3JlcyB3aXRoIGFsbCB0aGlzIGluZm9ybWF0aW9uLCBzbyB5b3UKKyAgY2FuIG1lcmdlIHRoaW5ncyBpbmNyZW1lbnRhbGx5LCBidXQgYXMgbG9uZyBhcyBpdCBoYXMgZW50cmllcyBpbgorICBzdGFnZXMgMS8yLzMgKGkuZS4sICJ1bm1lcmdlZCBlbnRyaWVzIikgeW91IGNhbid0IHdyaXRlIHRoZSByZXN1bHQuIFNvCisgIG5vdyB0aGUgbWVyZ2UgYWxnb3JpdGhtIGVuZHMgdXAgYmVpbmcgcmVhbGx5IHNpbXBsZToKKworICAqIHlvdSB3YWxrIHRoZSBpbmRleCBpbiBvcmRlciwgYW5kIGlnbm9yZSBhbGwgZW50cmllcyBvZiBzdGFnZSAwLAorICAgIHNpbmNlIHRoZXkndmUgYWxyZWFkeSBiZWVuIGRvbmUuCisKKyAgKiBpZiB5b3UgZmluZCBhICJzdGFnZTEiLCBidXQgbm8gbWF0Y2hpbmcgInN0YWdlMiIgb3IgInN0YWdlMyIsIHlvdQorICAgIGtub3cgaXQncyBiZWVuIHJlbW92ZWQgZnJvbSBib3RoIHRyZWVzIChpdCBvbmx5IGV4aXN0ZWQgaW4gdGhlCisgICAgb3JpZ2luYWwgdHJlZSksIGFuZCB5b3UgcmVtb3ZlIHRoYXQgZW50cnkuCisKKyAgKiBpZiB5b3UgZmluZCBhIG1hdGNoaW5nICJzdGFnZTIiIGFuZCAic3RhZ2UzIiB0cmVlLCB5b3UgcmVtb3ZlIG9uZQorICAgIG9mIHRoZW0sIGFuZCB0dXJuIHRoZSBvdGhlciBpbnRvIGEgInN0YWdlMCIgZW50cnkuIFJlbW92ZSBhbnkKKyAgICBtYXRjaGluZyAic3RhZ2UxIiBlbnRyeSBpZiBpdCBleGlzdHMgdG9vLiAgLi4gYWxsIHRoZSBub3JtYWwKKyAgICB0cml2aWFsIHJ1bGVzIC4uCisKK1lvdSB3b3VsZCBub3JtYWxseSB1c2UgJ2dpdCBtZXJnZS1pbmRleCcgd2l0aCBzdXBwbGllZAorJ2dpdCBtZXJnZS1vbmUtZmlsZScgdG8gZG8gdGhpcyBsYXN0IHN0ZXAuICBUaGUgc2NyaXB0IHVwZGF0ZXMKK3RoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFzIGl0IG1lcmdlcyBlYWNoIHBhdGggYW5kIGF0IHRoZQorZW5kIG9mIGEgc3VjY2Vzc2Z1bCBtZXJnZS4KKworV2hlbiB5b3Ugc3RhcnQgYSAzLXdheSBtZXJnZSB3aXRoIGFuIGluZGV4IGZpbGUgdGhhdCBpcyBhbHJlYWR5Citwb3B1bGF0ZWQsIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCByZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiB0aGUKK2ZpbGVzIGluIHlvdXIgd29yayB0cmVlLCBhbmQgeW91IGNhbiBldmVuIGhhdmUgZmlsZXMgd2l0aAorY2hhbmdlcyB1bnJlY29yZGVkIGluIHRoZSBpbmRleCBmaWxlLiAgSXQgaXMgZnVydGhlciBhc3N1bWVkCit0aGF0IHRoaXMgc3RhdGUgaXMgImRlcml2ZWQiIGZyb20gdGhlIHN0YWdlIDIgdHJlZS4gIFRoZSAzLXdheQorbWVyZ2UgcmVmdXNlcyB0byBydW4gaWYgaXQgZmluZHMgYW4gZW50cnkgaW4gdGhlIG9yaWdpbmFsIGluZGV4CitmaWxlIHRoYXQgZG9lcyBub3QgbWF0Y2ggc3RhZ2UgMi4KKworVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgeW91IGZyb20gbG9zaW5nIHlvdXIgd29yay1pbi1wcm9ncmVzcworY2hhbmdlcywgYW5kIG1peGluZyB5b3VyIHJhbmRvbSBjaGFuZ2VzIGluIGFuIHVucmVsYXRlZCBtZXJnZQorY29tbWl0LiAgVG8gaWxsdXN0cmF0ZSwgc3VwcG9zZSB5b3Ugc3RhcnQgZnJvbSB3aGF0IGhhcyBiZWVuCitjb21taXR0ZWQgbGFzdCB0byB5b3VyIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgSkM9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIkhFQUReMCJgCiskIGdpdCBjaGVja291dC1pbmRleCAtZiAtdSAtYSAkSkMKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGRvIHJhbmRvbSBlZGl0cywgd2l0aG91dCBydW5uaW5nICdnaXQgdXBkYXRlLWluZGV4Jy4gIEFuZCB0aGVuCit5b3Ugbm90aWNlIHRoYXQgdGhlIHRpcCBvZiB5b3VyICJ1cHN0cmVhbSIgdHJlZSBoYXMgYWR2YW5jZWQKK3NpbmNlIHlvdSBwdWxsZWQgZnJvbSBoaW06CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIGdpdDovLy4uLi4gbGludXMKKyQgTFQ9YGdpdCByZXYtcGFyc2UgRkVUQ0hfSEVBRGAKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91ciB3b3JrIHRyZWUgaXMgc3RpbGwgYmFzZWQgb24geW91ciBIRUFEICgkSkMpLCBidXQgeW91IGhhdmUKK3NvbWUgZWRpdHMgc2luY2UuICBUaHJlZS13YXkgbWVyZ2UgbWFrZXMgc3VyZSB0aGF0IHlvdSBoYXZlIG5vdAorYWRkZWQgb3IgbW9kaWZpZWQgaW5kZXggZW50cmllcyBzaW5jZSAkSkMsIGFuZCBpZiB5b3UgaGF2ZW4ndCwKK3RoZW4gZG9lcyB0aGUgcmlnaHQgdGhpbmcuICBTbyB3aXRoIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYWQtdHJlZSAtbSAtdSBgZ2l0IG1lcmdlLWJhc2UgJEpDICRMVGAgJEpDICRMVAorJCBnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIC1hCiskIGVjaG8gIk1lcmdlIHdpdGggTGludXMiIHwgXAorICBnaXQgY29tbWl0LXRyZWUgYGdpdCB3cml0ZS10cmVlYCAtcCAkSkMgLXAgJExUCistLS0tLS0tLS0tLS0tLS0tCisKK3doYXQgeW91IHdvdWxkIGNvbW1pdCBpcyBhIHB1cmUgbWVyZ2UgYmV0d2VlbiAkSkMgYW5kICRMVCB3aXRob3V0Cit5b3VyIHdvcmstaW4tcHJvZ3Jlc3MgY2hhbmdlcywgYW5kIHlvdXIgd29yayB0cmVlIHdvdWxkIGJlCit1cGRhdGVkIHRvIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLgorCitIb3dldmVyLCBpZiB5b3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdAord291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgdGhpcyBtZXJnZSwgJ2dpdCByZWFkLXRyZWUnIHdpbGwgcmVmdXNlCit0byBydW4gdG8gcHJldmVudCB5b3VyIGNoYW5nZXMgZnJvbSBiZWluZyBsb3N0LgorCitJbiBvdGhlciB3b3JkcywgdGhlcmUgaXMgbm8gbmVlZCB0byB3b3JyeSBhYm91dCB3aGF0IGV4aXN0cyBvbmx5CitpbiB0aGUgd29ya2luZyB0cmVlLiAgV2hlbiB5b3UgaGF2ZSBsb2NhbCBjaGFuZ2VzIGluIGEgcGFydCBvZgordGhlIHByb2plY3QgdGhhdCBpcyBub3QgaW52b2x2ZWQgaW4gdGhlIG1lcmdlLCB5b3VyIGNoYW5nZXMgZG8KK25vdCBpbnRlcmZlcmUgd2l0aCB0aGUgbWVyZ2UsIGFuZCBhcmUga2VwdCBpbnRhY3QuICBXaGVuIHRoZXkKKypkbyogaW50ZXJmZXJlLCB0aGUgbWVyZ2UgZG9lcyBub3QgZXZlbiBzdGFydCAoJ2dpdCByZWFkLXRyZWUnCitjb21wbGFpbnMgbG91ZGx5IGFuZCBmYWlscyB3aXRob3V0IG1vZGlmeWluZyBhbnl0aGluZykuICBJbiBzdWNoCithIGNhc2UsIHlvdSBjYW4gc2ltcGx5IGNvbnRpbnVlIGRvaW5nIHdoYXQgeW91IHdlcmUgaW4gdGhlCittaWRkbGUgb2YgZG9pbmcsIGFuZCB3aGVuIHlvdXIgd29ya2luZyB0cmVlIGlzIHJlYWR5IChpLmUuIHlvdQoraGF2ZSBmaW5pc2hlZCB5b3VyIHdvcmstaW4tcHJvZ3Jlc3MpLCBhdHRlbXB0IHRoZSBtZXJnZSBhZ2Fpbi4KKworCitTcGFyc2UgY2hlY2tvdXQKKy0tLS0tLS0tLS0tLS0tLQorCisiU3BhcnNlIGNoZWNrb3V0IiBhbGxvd3MgcG9wdWxhdGluZyB0aGUgd29ya2luZyBkaXJlY3Rvcnkgc3BhcnNlbHkuCitJdCB1c2VzIHRoZSBza2lwLXdvcmt0cmVlIGJpdCAoc2VlIGxpbmtnaXQ6Z2l0LXVwZGF0ZS1pbmRleFsxXSkgdG8gdGVsbAorR2l0IHdoZXRoZXIgYSBmaWxlIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyB3b3J0aCBsb29raW5nIGF0LgorCisnZ2l0IHJlYWQtdHJlZScgYW5kIG90aGVyIG1lcmdlLWJhc2VkIGNvbW1hbmRzICgnZ2l0IG1lcmdlJywgJ2dpdAorY2hlY2tvdXQnLi4uKSBjYW4gaGVscCBtYWludGFpbmluZyB0aGUgc2tpcC13b3JrdHJlZSBiaXRtYXAgYW5kIHdvcmtpbmcKK2RpcmVjdG9yeSB1cGRhdGUuIGAkR0lUX0RJUi9pbmZvL3NwYXJzZS1jaGVja291dGAgaXMgdXNlZCB0bworZGVmaW5lIHRoZSBza2lwLXdvcmt0cmVlIHJlZmVyZW5jZSBiaXRtYXAuIFdoZW4gJ2dpdCByZWFkLXRyZWUnIG5lZWRzCit0byB1cGRhdGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBpdCByZXNldHMgdGhlIHNraXAtd29ya3RyZWUgYml0IGluIHRoZSBpbmRleAorYmFzZWQgb24gdGhpcyBmaWxlLCB3aGljaCB1c2VzIHRoZSBzYW1lIHN5bnRheCBhcyAuZ2l0aWdub3JlIGZpbGVzLgorSWYgYW4gZW50cnkgbWF0Y2hlcyBhIHBhdHRlcm4gaW4gdGhpcyBmaWxlLCBza2lwLXdvcmt0cmVlIHdpbGwgbm90IGJlCitzZXQgb24gdGhhdCBlbnRyeS4gT3RoZXJ3aXNlLCBza2lwLXdvcmt0cmVlIHdpbGwgYmUgc2V0LgorCitUaGVuIGl0IGNvbXBhcmVzIHRoZSBuZXcgc2tpcC13b3JrdHJlZSB2YWx1ZSB3aXRoIHRoZSBwcmV2aW91cyBvbmUuIElmCitza2lwLXdvcmt0cmVlIHR1cm5zIGZyb20gc2V0IHRvIHVuc2V0LCBpdCB3aWxsIGFkZCB0aGUgY29ycmVzcG9uZGluZworZmlsZSBiYWNrLiBJZiBpdCB0dXJucyBmcm9tIHVuc2V0IHRvIHNldCwgdGhhdCBmaWxlIHdpbGwgYmUgcmVtb3ZlZC4KKworV2hpbGUgYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YCBpcyB1c3VhbGx5IHVzZWQgdG8gc3BlY2lmeSB3aGF0CitmaWxlcyBhcmUgaW4sIHlvdSBjYW4gYWxzbyBzcGVjaWZ5IHdoYXQgZmlsZXMgYXJlIF9ub3RfIGluLCB1c2luZworbmVnYXRlIHBhdHRlcm5zLiBGb3IgZXhhbXBsZSwgdG8gcmVtb3ZlIHRoZSBmaWxlIGB1bndhbnRlZGA6CisKKy0tLS0tLS0tLS0tLS0tLS0KKy8qCishdW53YW50ZWQKKy0tLS0tLS0tLS0tLS0tLS0KKworQW5vdGhlciB0cmlja3kgdGhpbmcgaXMgZnVsbHkgcmVwb3B1bGF0aW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHlvdQorbm8gbG9uZ2VyIHdhbnQgc3BhcnNlIGNoZWNrb3V0LiBZb3UgY2Fubm90IGp1c3QgZGlzYWJsZSAic3BhcnNlCitjaGVja291dCIgYmVjYXVzZSBza2lwLXdvcmt0cmVlIGJpdHMgYXJlIHN0aWxsIGluIHRoZSBpbmRleCBhbmQgeW91ciB3b3JraW5nCitkaXJlY3RvcnkgaXMgc3RpbGwgc3BhcnNlbHkgcG9wdWxhdGVkLiBZb3Ugc2hvdWxkIHJlLXBvcHVsYXRlIHRoZSB3b3JraW5nCitkaXJlY3Rvcnkgd2l0aCB0aGUgYCRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0YCBmaWxlIGNvbnRlbnQgYXMKK2ZvbGxvd3M6CisKKy0tLS0tLS0tLS0tLS0tLS0KKy8qCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZW4geW91IGNhbiBkaXNhYmxlIHNwYXJzZSBjaGVja291dC4gU3BhcnNlIGNoZWNrb3V0IHN1cHBvcnQgaW4gJ2dpdAorcmVhZC10cmVlJyBhbmQgc2ltaWxhciBjb21tYW5kcyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LiBZb3UgbmVlZCB0bwordHVybiBgY29yZS5zcGFyc2VDaGVja291dGAgb24gaW4gb3JkZXIgdG8gaGF2ZSBzcGFyc2UgY2hlY2tvdXQKK3N1cHBvcnQuCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC13cml0ZS10cmVlWzFdOyBsaW5rZ2l0OmdpdC1scy1maWxlc1sxXTsKK2xpbmtnaXQ6Z2l0aWdub3JlWzVdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmViYXNlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjYThiYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlYmFzZS50eHQKQEAgLTAsMCArMSw3OTcgQEAKK2dpdC1yZWJhc2UoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlYmFzZSAtIEZvcndhcmQtcG9ydCBsb2NhbCBjb21taXRzIHRvIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlYmFzZScgWy1pIHwgLS1pbnRlcmFjdGl2ZV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XQorCVs8dXBzdHJlYW0+IFs8YnJhbmNoPl1dCisnZ2l0IHJlYmFzZScgWy1pIHwgLS1pbnRlcmFjdGl2ZV0gW29wdGlvbnNdIFstLWV4ZWMgPGNtZD5dIFstLW9udG8gPG5ld2Jhc2U+XQorCS0tcm9vdCBbPGJyYW5jaD5dCisnZ2l0IHJlYmFzZScgLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQgfCAtLWVkaXQtdG9kbworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0lmIDxicmFuY2g+IGlzIHNwZWNpZmllZCwgJ2dpdCByZWJhc2UnIHdpbGwgcGVyZm9ybSBhbiBhdXRvbWF0aWMKK2BnaXQgY2hlY2tvdXQgPGJyYW5jaD5gIGJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLiAgT3RoZXJ3aXNlCitpdCByZW1haW5zIG9uIHRoZSBjdXJyZW50IGJyYW5jaC4KKworSWYgPHVwc3RyZWFtPiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgdXBzdHJlYW0gY29uZmlndXJlZCBpbgorYnJhbmNoLjxuYW1lPi5yZW1vdGUgYW5kIGJyYW5jaC48bmFtZT4ubWVyZ2Ugb3B0aW9ucyB3aWxsIGJlIHVzZWQgKHNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBkZXRhaWxzKSBhbmQgdGhlIGAtLWZvcmstcG9pbnRgIG9wdGlvbiBpcworYXNzdW1lZC4gIElmIHlvdSBhcmUgY3VycmVudGx5IG5vdCBvbiBhbnkgYnJhbmNoIG9yIGlmIHRoZSBjdXJyZW50CiticmFuY2ggZG9lcyBub3QgaGF2ZSBhIGNvbmZpZ3VyZWQgdXBzdHJlYW0sIHRoZSByZWJhc2Ugd2lsbCBhYm9ydC4KKworQWxsIGNoYW5nZXMgbWFkZSBieSBjb21taXRzIGluIHRoZSBjdXJyZW50IGJyYW5jaCBidXQgdGhhdCBhcmUgbm90CitpbiA8dXBzdHJlYW0+IGFyZSBzYXZlZCB0byBhIHRlbXBvcmFyeSBhcmVhLiAgVGhpcyBpcyB0aGUgc2FtZSBzZXQKK29mIGNvbW1pdHMgdGhhdCB3b3VsZCBiZSBzaG93biBieSBgZ2l0IGxvZyA8dXBzdHJlYW0+Li5IRUFEYDsgb3IgYnkKK2BnaXQgbG9nICdmb3JrX3BvaW50Jy4uSEVBRGAsIGlmIGAtLWZvcmstcG9pbnRgIGlzIGFjdGl2ZSAoc2VlIHRoZQorZGVzY3JpcHRpb24gb24gYC0tZm9yay1wb2ludGAgYmVsb3cpOyBvciBieSBgZ2l0IGxvZyBIRUFEYCwgaWYgdGhlCitgLS1yb290YCBvcHRpb24gaXMgc3BlY2lmaWVkLgorCitUaGUgY3VycmVudCBicmFuY2ggaXMgcmVzZXQgdG8gPHVwc3RyZWFtPiwgb3IgPG5ld2Jhc2U+IGlmIHRoZQorLS1vbnRvIG9wdGlvbiB3YXMgc3VwcGxpZWQuICBUaGlzIGhhcyB0aGUgZXhhY3Qgc2FtZSBlZmZlY3QgYXMKK2BnaXQgcmVzZXQgLS1oYXJkIDx1cHN0cmVhbT5gIChvciA8bmV3YmFzZT4pLiAgT1JJR19IRUFEIGlzIHNldAordG8gcG9pbnQgYXQgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIGJlZm9yZSB0aGUgcmVzZXQuCisKK1RoZSBjb21taXRzIHRoYXQgd2VyZSBwcmV2aW91c2x5IHNhdmVkIGludG8gdGhlIHRlbXBvcmFyeSBhcmVhIGFyZQordGhlbiByZWFwcGxpZWQgdG8gdGhlIGN1cnJlbnQgYnJhbmNoLCBvbmUgYnkgb25lLCBpbiBvcmRlci4gTm90ZSB0aGF0CithbnkgY29tbWl0cyBpbiBIRUFEIHdoaWNoIGludHJvZHVjZSB0aGUgc2FtZSB0ZXh0dWFsIGNoYW5nZXMgYXMgYSBjb21taXQKK2luIEhFQUQuLjx1cHN0cmVhbT4gYXJlIG9taXR0ZWQgKGkuZS4sIGEgcGF0Y2ggYWxyZWFkeSBhY2NlcHRlZCB1cHN0cmVhbQord2l0aCBhIGRpZmZlcmVudCBjb21taXQgbWVzc2FnZSBvciB0aW1lc3RhbXAgd2lsbCBiZSBza2lwcGVkKS4KKworSXQgaXMgcG9zc2libGUgdGhhdCBhIG1lcmdlIGZhaWx1cmUgd2lsbCBwcmV2ZW50IHRoaXMgcHJvY2VzcyBmcm9tIGJlaW5nCitjb21wbGV0ZWx5IGF1dG9tYXRpYy4gIFlvdSB3aWxsIGhhdmUgdG8gcmVzb2x2ZSBhbnkgc3VjaCBtZXJnZSBmYWlsdXJlCithbmQgcnVuIGBnaXQgcmViYXNlIC0tY29udGludWVgLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gYnlwYXNzIHRoZSBjb21taXQKK3RoYXQgY2F1c2VkIHRoZSBtZXJnZSBmYWlsdXJlIHdpdGggYGdpdCByZWJhc2UgLS1za2lwYC4gIFRvIGNoZWNrIG91dCB0aGUKK29yaWdpbmFsIDxicmFuY2g+IGFuZCByZW1vdmUgdGhlIC5naXQvcmViYXNlLWFwcGx5IHdvcmtpbmcgZmlsZXMsIHVzZSB0aGUKK2NvbW1hbmQgYGdpdCByZWJhc2UgLS1hYm9ydGAgaW5zdGVhZC4KKworQXNzdW1lIHRoZSBmb2xsb3dpbmcgaGlzdG9yeSBleGlzdHMgYW5kIHRoZSBjdXJyZW50IGJyYW5jaCBpcyAidG9waWMiOgorCistLS0tLS0tLS0tLS0KKyAgICAgICAgICBBLS0tQi0tLUMgdG9waWMKKyAgICAgICAgIC8KKyAgICBELS0tRS0tLUYtLS1HIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK0Zyb20gdGhpcyBwb2ludCwgdGhlIHJlc3VsdCBvZiBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kczoKKworCisgICAgZ2l0IHJlYmFzZSBtYXN0ZXIKKyAgICBnaXQgcmViYXNlIG1hc3RlciB0b3BpYworCit3b3VsZCBiZToKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICBBJy0tQictLUMnIHRvcGljCisgICAgICAgICAgICAgICAgIC8KKyAgICBELS0tRS0tLUYtLS1HIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKKypOT1RFOiogVGhlIGxhdHRlciBmb3JtIGlzIGp1c3QgYSBzaG9ydC1oYW5kIG9mIGBnaXQgY2hlY2tvdXQgdG9waWNgCitmb2xsb3dlZCBieSBgZ2l0IHJlYmFzZSBtYXN0ZXJgLiBXaGVuIHJlYmFzZSBleGl0cyBgdG9waWNgIHdpbGwKK3JlbWFpbiB0aGUgY2hlY2tlZC1vdXQgYnJhbmNoLgorCitJZiB0aGUgdXBzdHJlYW0gYnJhbmNoIGFscmVhZHkgY29udGFpbnMgYSBjaGFuZ2UgeW91IGhhdmUgbWFkZSAoZS5nLiwKK2JlY2F1c2UgeW91IG1haWxlZCBhIHBhdGNoIHdoaWNoIHdhcyBhcHBsaWVkIHVwc3RyZWFtKSwgdGhlbiB0aGF0IGNvbW1pdAord2lsbCBiZSBza2lwcGVkLiBGb3IgZXhhbXBsZSwgcnVubmluZyBgZ2l0IHJlYmFzZSBtYXN0ZXJgIG9uIHRoZQorZm9sbG93aW5nIGhpc3RvcnkgKGluIHdoaWNoIGBBJ2AgYW5kIGBBYCBpbnRyb2R1Y2UgdGhlIHNhbWUgc2V0IG9mIGNoYW5nZXMsCitidXQgaGF2ZSBkaWZmZXJlbnQgY29tbWl0dGVyIGluZm9ybWF0aW9uKToKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgQS0tLUItLS1DIHRvcGljCisgICAgICAgICAvCisgICAgRC0tLUUtLS1BJy0tLUYgbWFzdGVyCistLS0tLS0tLS0tLS0KKword2lsbCByZXN1bHQgaW46CisKKy0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgIEInLS0tQycgdG9waWMKKyAgICAgICAgICAgICAgICAgIC8KKyAgICBELS0tRS0tLUEnLS0tRiBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitIZXJlIGlzIGhvdyB5b3Ugd291bGQgdHJhbnNwbGFudCBhIHRvcGljIGJyYW5jaCBiYXNlZCBvbiBvbmUKK2JyYW5jaCB0byBhbm90aGVyLCB0byBwcmV0ZW5kIHRoYXQgeW91IGZvcmtlZCB0aGUgdG9waWMgYnJhbmNoCitmcm9tIHRoZSBsYXR0ZXIgYnJhbmNoLCB1c2luZyBgcmViYXNlIC0tb250b2AuCisKK0ZpcnN0IGxldCdzIGFzc3VtZSB5b3VyICd0b3BpYycgaXMgYmFzZWQgb24gYnJhbmNoICduZXh0Jy4KK0ZvciBleGFtcGxlLCBhIGZlYXR1cmUgZGV2ZWxvcGVkIGluICd0b3BpYycgZGVwZW5kcyBvbiBzb21lCitmdW5jdGlvbmFsaXR5IHdoaWNoIGlzIGZvdW5kIGluICduZXh0Jy4KKworLS0tLS0tLS0tLS0tCisgICAgby0tLW8tLS1vLS0tby0tLW8gIG1hc3RlcgorICAgICAgICAgXAorICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vICBuZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgby0tLW8tLS1vICB0b3BpYworLS0tLS0tLS0tLS0tCisKK1dlIHdhbnQgdG8gbWFrZSAndG9waWMnIGZvcmtlZCBmcm9tIGJyYW5jaCAnbWFzdGVyJzsgZm9yIGV4YW1wbGUsCitiZWNhdXNlIHRoZSBmdW5jdGlvbmFsaXR5IG9uIHdoaWNoICd0b3BpYycgZGVwZW5kcyB3YXMgbWVyZ2VkIGludG8gdGhlCittb3JlIHN0YWJsZSAnbWFzdGVyJyBicmFuY2guIFdlIHdhbnQgb3VyIHRyZWUgdG8gbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorICAgIG8tLS1vLS0tby0tLW8tLS1vICBtYXN0ZXIKKyAgICAgICAgfCAgICAgICAgICAgIFwKKyAgICAgICAgfCAgICAgICAgICAgICBvJy0tbyctLW8nICB0b3BpYworICAgICAgICAgXAorICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vICBuZXh0CistLS0tLS0tLS0tLS0KKworV2UgY2FuIGdldCB0aGlzIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworICAgIGdpdCByZWJhc2UgLS1vbnRvIG1hc3RlciBuZXh0IHRvcGljCisKKworQW5vdGhlciBleGFtcGxlIG9mIC0tb250byBvcHRpb24gaXMgdG8gcmViYXNlIHBhcnQgb2YgYQorYnJhbmNoLiAgSWYgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHNpdHVhdGlvbjoKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC0tLUktLS1KIHRvcGljQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgLworICAgICAgICAgICAgICAgICAgRS0tLUYtLS1HICB0b3BpY0EKKyAgICAgICAgICAgICAgICAgLworICAgIEEtLS1CLS0tQy0tLUQgIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK3RoZW4gdGhlIGNvbW1hbmQKKworICAgIGdpdCByZWJhc2UgLS1vbnRvIG1hc3RlciB0b3BpY0EgdG9waWNCCisKK3dvdWxkIHJlc3VsdCBpbjoKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgIEgnLS1JJy0tSicgIHRvcGljQgorICAgICAgICAgICAgICAgIC8KKyAgICAgICAgICAgICAgICB8IEUtLS1GLS0tRyAgdG9waWNBCisgICAgICAgICAgICAgICAgfC8KKyAgICBBLS0tQi0tLUMtLS1EICBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHVzZWZ1bCB3aGVuIHRvcGljQiBkb2VzIG5vdCBkZXBlbmQgb24gdG9waWNBLgorCitBIHJhbmdlIG9mIGNvbW1pdHMgY291bGQgYWxzbyBiZSByZW1vdmVkIHdpdGggcmViYXNlLiAgSWYgd2UgaGF2ZQordGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisKKy0tLS0tLS0tLS0tLQorICAgIEUtLS1GLS0tRy0tLUgtLS1JLS0tSiAgdG9waWNBCistLS0tLS0tLS0tLS0KKwordGhlbiB0aGUgY29tbWFuZAorCisgICAgZ2l0IHJlYmFzZSAtLW9udG8gdG9waWNBfjUgdG9waWNBfjMgdG9waWNBCisKK3dvdWxkIHJlc3VsdCBpbiB0aGUgcmVtb3ZhbCBvZiBjb21taXRzIEYgYW5kIEc6CisKKy0tLS0tLS0tLS0tLQorICAgIEUtLS1IJy0tLUknLS0tSicgIHRvcGljQQorLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdXNlZnVsIGlmIEYgYW5kIEcgd2VyZSBmbGF3ZWQgaW4gc29tZSB3YXksIG9yIHNob3VsZCBub3QgYmUKK3BhcnQgb2YgdG9waWNBLiAgTm90ZSB0aGF0IHRoZSBhcmd1bWVudCB0byAtLW9udG8gYW5kIHRoZSA8dXBzdHJlYW0+CitwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWxpZCBjb21taXQtaXNoLgorCitJbiBjYXNlIG9mIGNvbmZsaWN0LCAnZ2l0IHJlYmFzZScgd2lsbCBzdG9wIGF0IHRoZSBmaXJzdCBwcm9ibGVtYXRpYyBjb21taXQKK2FuZCBsZWF2ZSBjb25mbGljdCBtYXJrZXJzIGluIHRoZSB0cmVlLiAgWW91IGNhbiB1c2UgJ2dpdCBkaWZmJyB0byBsb2NhdGUKK3RoZSBtYXJrZXJzICg8PDw8PDwpIGFuZCBtYWtlIGVkaXRzIHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0LiAgRm9yIGVhY2gKK2ZpbGUgeW91IGVkaXQsIHlvdSBuZWVkIHRvIHRlbGwgR2l0IHRoYXQgdGhlIGNvbmZsaWN0IGhhcyBiZWVuIHJlc29sdmVkLAordHlwaWNhbGx5IHRoaXMgd291bGQgYmUgZG9uZSB3aXRoCisKKworICAgIGdpdCBhZGQgPGZpbGVuYW1lPgorCisKK0FmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3QgbWFudWFsbHkgYW5kIHVwZGF0aW5nIHRoZSBpbmRleCB3aXRoIHRoZQorZGVzaXJlZCByZXNvbHV0aW9uLCB5b3UgY2FuIGNvbnRpbnVlIHRoZSByZWJhc2luZyBwcm9jZXNzIHdpdGgKKworCisgICAgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisKKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1bmRvIHRoZSAnZ2l0IHJlYmFzZScgd2l0aAorCisKKyAgICBnaXQgcmViYXNlIC0tYWJvcnQKKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCityZWJhc2Uuc3RhdDo6CisJV2hldGhlciB0byBzaG93IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIHNpbmNlIHRoZSBsYXN0CisJcmViYXNlLiBGYWxzZSBieSBkZWZhdWx0LgorCityZWJhc2UuYXV0b1NxdWFzaDo6CisJSWYgc2V0IHRvIHRydWUgZW5hYmxlICctLWF1dG9zcXVhc2gnIG9wdGlvbiBieSBkZWZhdWx0LgorCityZWJhc2UuYXV0b1N0YXNoOjoKKwlJZiBzZXQgdG8gdHJ1ZSBlbmFibGUgJy0tYXV0b3N0YXNoJyBvcHRpb24gYnkgZGVmYXVsdC4KKworcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2s6OgorCUlmIHNldCB0byAid2FybiIsIHByaW50IHdhcm5pbmdzIGFib3V0IHJlbW92ZWQgY29tbWl0cyBpbgorCWludGVyYWN0aXZlIG1vZGUuIElmIHNldCB0byAiZXJyb3IiLCBwcmludCB0aGUgd2FybmluZ3MgYW5kCisJc3RvcCB0aGUgcmViYXNlLiBJZiBzZXQgdG8gImlnbm9yZSIsIG5vIGNoZWNraW5nIGlzCisJZG9uZS4gImlnbm9yZSIgYnkgZGVmYXVsdC4KKworcmViYXNlLmluc3RydWN0aW9uRm9ybWF0OjoKKwlDdXN0b20gY29tbWl0IGxpc3QgZm9ybWF0IHRvIHVzZSBkdXJpbmcgYW4gJy0taW50ZXJhY3RpdmUnIHJlYmFzZS4KKworT1BUSU9OUworLS0tLS0tLQorLS1vbnRvIDxuZXdiYXNlPjo6CisJU3RhcnRpbmcgcG9pbnQgYXQgd2hpY2ggdG8gY3JlYXRlIHRoZSBuZXcgY29tbWl0cy4gSWYgdGhlCisJLS1vbnRvIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc3RhcnRpbmcgcG9pbnQgaXMKKwk8dXBzdHJlYW0+LiAgTWF5IGJlIGFueSB2YWxpZCBjb21taXQsIGFuZCBub3QganVzdCBhbgorCWV4aXN0aW5nIGJyYW5jaCBuYW1lLgorKworQXMgYSBzcGVjaWFsIGNhc2UsIHlvdSBtYXkgdXNlICJBXC4uLkIiIGFzIGEgc2hvcnRjdXQgZm9yIHRoZQorbWVyZ2UgYmFzZSBvZiBBIGFuZCBCIGlmIHRoZXJlIGlzIGV4YWN0bHkgb25lIG1lcmdlIGJhc2UuIFlvdSBjYW4KK2xlYXZlIG91dCBhdCBtb3N0IG9uZSBvZiBBIGFuZCBCLCBpbiB3aGljaCBjYXNlIGl0IGRlZmF1bHRzIHRvIEhFQUQuCisKKzx1cHN0cmVhbT46OgorCVVwc3RyZWFtIGJyYW5jaCB0byBjb21wYXJlIGFnYWluc3QuICBNYXkgYmUgYW55IHZhbGlkIGNvbW1pdCwKKwlub3QganVzdCBhbiBleGlzdGluZyBicmFuY2ggbmFtZS4gRGVmYXVsdHMgdG8gdGhlIGNvbmZpZ3VyZWQKKwl1cHN0cmVhbSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLgorCis8YnJhbmNoPjo6CisJV29ya2luZyBicmFuY2g7IGRlZmF1bHRzIHRvIEhFQUQuCisKKy0tY29udGludWU6OgorCVJlc3RhcnQgdGhlIHJlYmFzaW5nIHByb2Nlc3MgYWZ0ZXIgaGF2aW5nIHJlc29sdmVkIGEgbWVyZ2UgY29uZmxpY3QuCisKKy0tYWJvcnQ6OgorCUFib3J0IHRoZSByZWJhc2Ugb3BlcmF0aW9uIGFuZCByZXNldCBIRUFEIHRvIHRoZSBvcmlnaW5hbAorCWJyYW5jaC4gSWYgPGJyYW5jaD4gd2FzIHByb3ZpZGVkIHdoZW4gdGhlIHJlYmFzZSBvcGVyYXRpb24gd2FzCisJc3RhcnRlZCwgdGhlbiBIRUFEIHdpbGwgYmUgcmVzZXQgdG8gPGJyYW5jaD4uIE90aGVyd2lzZSBIRUFECisJd2lsbCBiZSByZXNldCB0byB3aGVyZSBpdCB3YXMgd2hlbiB0aGUgcmViYXNlIG9wZXJhdGlvbiB3YXMKKwlzdGFydGVkLgorCistLWtlZXAtZW1wdHk6OgorCUtlZXAgdGhlIGNvbW1pdHMgdGhhdCBkbyBub3QgY2hhbmdlIGFueXRoaW5nIGZyb20gaXRzCisJcGFyZW50cyBpbiB0aGUgcmVzdWx0LgorCistLXNraXA6OgorCVJlc3RhcnQgdGhlIHJlYmFzaW5nIHByb2Nlc3MgYnkgc2tpcHBpbmcgdGhlIGN1cnJlbnQgcGF0Y2guCisKKy0tZWRpdC10b2RvOjoKKwlFZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZS4KKworLW06OgorLS1tZXJnZTo6CisJVXNlIG1lcmdpbmcgc3RyYXRlZ2llcyB0byByZWJhc2UuICBXaGVuIHRoZSByZWN1cnNpdmUgKGRlZmF1bHQpIG1lcmdlCisJc3RyYXRlZ3kgaXMgdXNlZCwgdGhpcyBhbGxvd3MgcmViYXNlIHRvIGJlIGF3YXJlIG9mIHJlbmFtZXMgb24gdGhlCisJdXBzdHJlYW0gc2lkZS4KKysKK05vdGUgdGhhdCBhIHJlYmFzZSBtZXJnZSB3b3JrcyBieSByZXBsYXlpbmcgZWFjaCBjb21taXQgZnJvbSB0aGUgd29ya2luZworYnJhbmNoIG9uIHRvcCBvZiB0aGUgPHVwc3RyZWFtPiBicmFuY2guICBCZWNhdXNlIG9mIHRoaXMsIHdoZW4gYSBtZXJnZQorY29uZmxpY3QgaGFwcGVucywgdGhlIHNpZGUgcmVwb3J0ZWQgYXMgJ291cnMnIGlzIHRoZSBzby1mYXIgcmViYXNlZAorc2VyaWVzLCBzdGFydGluZyB3aXRoIDx1cHN0cmVhbT4sIGFuZCAndGhlaXJzJyBpcyB0aGUgd29ya2luZyBicmFuY2guICBJbgorb3RoZXIgd29yZHMsIHRoZSBzaWRlcyBhcmUgc3dhcHBlZC4KKworLXMgPHN0cmF0ZWd5Pjo6CistLXN0cmF0ZWd5PTxzdHJhdGVneT46OgorCVVzZSB0aGUgZ2l2ZW4gbWVyZ2Ugc3RyYXRlZ3kuCisJSWYgdGhlcmUgaXMgbm8gYC1zYCBvcHRpb24gJ2dpdCBtZXJnZS1yZWN1cnNpdmUnIGlzIHVzZWQKKwlpbnN0ZWFkLiAgVGhpcyBpbXBsaWVzIC0tbWVyZ2UuCisrCitCZWNhdXNlICdnaXQgcmViYXNlJyByZXBsYXlzIGVhY2ggY29tbWl0IGZyb20gdGhlIHdvcmtpbmcgYnJhbmNoCitvbiB0b3Agb2YgdGhlIDx1cHN0cmVhbT4gYnJhbmNoIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSwgdXNpbmcKK3RoZSAnb3Vycycgc3RyYXRlZ3kgc2ltcGx5IGRpc2NhcmRzIGFsbCBwYXRjaGVzIGZyb20gdGhlIDxicmFuY2g+LAord2hpY2ggbWFrZXMgbGl0dGxlIHNlbnNlLgorCistWCA8c3RyYXRlZ3ktb3B0aW9uPjo6CistLXN0cmF0ZWd5LW9wdGlvbj08c3RyYXRlZ3ktb3B0aW9uPjo6CisJUGFzcyB0aGUgPHN0cmF0ZWd5LW9wdGlvbj4gdGhyb3VnaCB0byB0aGUgbWVyZ2Ugc3RyYXRlZ3kuCisJVGhpcyBpbXBsaWVzIGAtLW1lcmdlYCBhbmQsIGlmIG5vIHN0cmF0ZWd5IGhhcyBiZWVuCisJc3BlY2lmaWVkLCBgLXMgcmVjdXJzaXZlYC4gIE5vdGUgdGhlIHJldmVyc2FsIG9mICdvdXJzJyBhbmQKKwkndGhlaXJzJyBhcyBub3RlZCBhYm92ZSBmb3IgdGhlIGAtbWAgb3B0aW9uLgorCistU1s8a2V5aWQ+XTo6CistLWdwZy1zaWduWz08a2V5aWQ+XTo6CisJR1BHLXNpZ24gY29tbWl0cy4gVGhlIGBrZXlpZGAgYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kCisJZGVmYXVsdHMgdG8gdGhlIGNvbW1pdHRlciBpZGVudGl0eTsgaWYgc3BlY2lmaWVkLCBpdCBtdXN0IGJlCisJc3R1Y2sgdG8gdGhlIG9wdGlvbiB3aXRob3V0IGEgc3BhY2UuCisKKy1xOjoKKy0tcXVpZXQ6OgorCUJlIHF1aWV0LiBJbXBsaWVzIC0tbm8tc3RhdC4KKworLXY6OgorLS12ZXJib3NlOjoKKwlCZSB2ZXJib3NlLiBJbXBsaWVzIC0tc3RhdC4KKworLS1zdGF0OjoKKwlTaG93IGEgZGlmZnN0YXQgb2Ygd2hhdCBjaGFuZ2VkIHVwc3RyZWFtIHNpbmNlIHRoZSBsYXN0IHJlYmFzZS4gVGhlCisJZGlmZnN0YXQgaXMgYWxzbyBjb250cm9sbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWJhc2Uuc3RhdC4KKworLW46OgorLS1uby1zdGF0OjoKKwlEbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGFzIHBhcnQgb2YgdGhlIHJlYmFzZSBwcm9jZXNzLgorCistLW5vLXZlcmlmeTo6CisJVGhpcyBvcHRpb24gYnlwYXNzZXMgdGhlIHByZS1yZWJhc2UgaG9vay4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKKy0tdmVyaWZ5OjoKKwlBbGxvd3MgdGhlIHByZS1yZWJhc2UgaG9vayB0byBydW4sIHdoaWNoIGlzIHRoZSBkZWZhdWx0LiAgVGhpcyBvcHRpb24gY2FuCisJYmUgdXNlZCB0byBvdmVycmlkZSAtLW5vLXZlcmlmeS4gIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKKy1DPG4+OjoKKwlFbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIHN1cnJvdW5kaW5nIGNvbnRleHQgbWF0Y2ggYmVmb3JlCisJYW5kIGFmdGVyIGVhY2ggY2hhbmdlLiAgV2hlbiBmZXdlciBsaW5lcyBvZiBzdXJyb3VuZGluZworCWNvbnRleHQgZXhpc3QgdGhleSBhbGwgbXVzdCBtYXRjaC4gIEJ5IGRlZmF1bHQgbm8gY29udGV4dCBpcworCWV2ZXIgaWdub3JlZC4KKworLWY6OgorLS1mb3JjZS1yZWJhc2U6OgorCUZvcmNlIGEgcmViYXNlIGV2ZW4gaWYgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIHVwLXRvLWRhdGUgYW5kCisJdGhlIGNvbW1hbmQgd2l0aG91dCBgLS1mb3JjZWAgd291bGQgcmV0dXJuIHdpdGhvdXQgZG9pbmcgYW55dGhpbmcuCisrCitZb3UgbWF5IGZpbmQgdGhpcyAob3IgLS1uby1mZiB3aXRoIGFuIGludGVyYWN0aXZlIHJlYmFzZSkgaGVscGZ1bCBhZnRlcgorcmV2ZXJ0aW5nIGEgdG9waWMgYnJhbmNoIG1lcmdlLCBhcyB0aGlzIG9wdGlvbiByZWNyZWF0ZXMgdGhlIHRvcGljIGJyYW5jaCB3aXRoCitmcmVzaCBjb21taXRzIHNvIGl0IGNhbiBiZSByZW1lcmdlZCBzdWNjZXNzZnVsbHkgd2l0aG91dCBuZWVkaW5nIHRvICJyZXZlcnQKK3RoZSByZXZlcnNpb24iIChzZWUgdGhlCitsaW5rOmhvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS5odG1sW3JldmVydC1hLWZhdWx0eS1tZXJnZSBIb3ctVG9dIGZvciBkZXRhaWxzKS4KKworLS1mb3JrLXBvaW50OjoKKy0tbm8tZm9yay1wb2ludDo6CisJVXNlIHJlZmxvZyB0byBmaW5kIGEgYmV0dGVyIGNvbW1vbiBhbmNlc3RvciBiZXR3ZWVuIDx1cHN0cmVhbT4KKwlhbmQgPGJyYW5jaD4gd2hlbiBjYWxjdWxhdGluZyB3aGljaCBjb21taXRzIGhhdmUgYmVlbgorCWludHJvZHVjZWQgYnkgPGJyYW5jaD4uCisrCitXaGVuIC0tZm9yay1wb2ludCBpcyBhY3RpdmUsICdmb3JrX3BvaW50JyB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZgorPHVwc3RyZWFtPiB0byBjYWxjdWxhdGUgdGhlIHNldCBvZiBjb21taXRzIHRvIHJlYmFzZSwgd2hlcmUKKydmb3JrX3BvaW50JyBpcyB0aGUgcmVzdWx0IG9mIGBnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHVwc3RyZWFtPgorPGJyYW5jaD5gIGNvbW1hbmQgKHNlZSBsaW5rZ2l0OmdpdC1tZXJnZS1iYXNlWzFdKS4gIElmICdmb3JrX3BvaW50JworZW5kcyB1cCBiZWluZyBlbXB0eSwgdGhlIDx1cHN0cmVhbT4gd2lsbCBiZSB1c2VkIGFzIGEgZmFsbGJhY2suCisrCitJZiBlaXRoZXIgPHVwc3RyZWFtPiBvciAtLXJvb3QgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlbiB0aGUKK2RlZmF1bHQgaXMgYC0tbm8tZm9yay1wb2ludGAsIG90aGVyd2lzZSB0aGUgZGVmYXVsdCBpcyBgLS1mb3JrLXBvaW50YC4KKworLS1pZ25vcmUtd2hpdGVzcGFjZTo6CistLXdoaXRlc3BhY2U9PG9wdGlvbj46OgorCVRoZXNlIGZsYWcgYXJlIHBhc3NlZCB0byB0aGUgJ2dpdCBhcHBseScgcHJvZ3JhbQorCShzZWUgbGlua2dpdDpnaXQtYXBwbHlbMV0pIHRoYXQgYXBwbGllcyB0aGUgcGF0Y2guCisJSW5jb21wYXRpYmxlIHdpdGggdGhlIC0taW50ZXJhY3RpdmUgb3B0aW9uLgorCistLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlOjoKKy0taWdub3JlLWRhdGU6OgorCVRoZXNlIGZsYWdzIGFyZSBwYXNzZWQgdG8gJ2dpdCBhbScgdG8gZWFzaWx5IGNoYW5nZSB0aGUgZGF0ZXMKKwlvZiB0aGUgcmViYXNlZCBjb21taXRzIChzZWUgbGlua2dpdDpnaXQtYW1bMV0pLgorCUluY29tcGF0aWJsZSB3aXRoIHRoZSAtLWludGVyYWN0aXZlIG9wdGlvbi4KKworLWk6OgorLS1pbnRlcmFjdGl2ZTo6CisJTWFrZSBhIGxpc3Qgb2YgdGhlIGNvbW1pdHMgd2hpY2ggYXJlIGFib3V0IHRvIGJlIHJlYmFzZWQuICBMZXQgdGhlCisJdXNlciBlZGl0IHRoYXQgbGlzdCBiZWZvcmUgcmViYXNpbmcuICBUaGlzIG1vZGUgY2FuIGFsc28gYmUgdXNlZCB0bworCXNwbGl0IGNvbW1pdHMgKHNlZSBTUExJVFRJTkcgQ09NTUlUUyBiZWxvdykuCisrCitUaGUgY29tbWl0IGxpc3QgZm9ybWF0IGNhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uCityZWJhc2UuaW5zdHJ1Y3Rpb25Gb3JtYXQuICBBIGN1c3RvbWl6ZWQgaW5zdHJ1Y3Rpb24gZm9ybWF0IHdpbGwgYXV0b21hdGljYWxseQoraGF2ZSB0aGUgbG9uZyBjb21taXQgaGFzaCBwcmVwZW5kZWQgdG8gdGhlIGZvcm1hdC4KKworLXA6OgorLS1wcmVzZXJ2ZS1tZXJnZXM6OgorCVJlY3JlYXRlIG1lcmdlIGNvbW1pdHMgaW5zdGVhZCBvZiBmbGF0dGVuaW5nIHRoZSBoaXN0b3J5IGJ5IHJlcGxheWluZworCWNvbW1pdHMgYSBtZXJnZSBjb21taXQgaW50cm9kdWNlcy4gTWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbnMgb3IgbWFudWFsCisJYW1lbmRtZW50cyB0byBtZXJnZSBjb21taXRzIGFyZSBub3QgcHJlc2VydmVkLgorKworVGhpcyB1c2VzIHRoZSBgLS1pbnRlcmFjdGl2ZWAgbWFjaGluZXJ5IGludGVybmFsbHksIGJ1dCBjb21iaW5pbmcgaXQKK3dpdGggdGhlIGAtLWludGVyYWN0aXZlYCBvcHRpb24gZXhwbGljaXRseSBpcyBnZW5lcmFsbHkgbm90IGEgZ29vZAoraWRlYSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nIChzZWUgQlVHUyBiZWxvdykuCisKKy14IDxjbWQ+OjoKKy0tZXhlYyA8Y21kPjo6CisJQXBwZW5kICJleGVjIDxjbWQ+IiBhZnRlciBlYWNoIGxpbmUgY3JlYXRpbmcgYSBjb21taXQgaW4gdGhlCisJZmluYWwgaGlzdG9yeS4gPGNtZD4gd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBvbmUgb3IgbW9yZSBzaGVsbAorCWNvbW1hbmRzLgorKworVGhpcyBvcHRpb24gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBgLS1pbnRlcmFjdGl2ZWAgb3B0aW9uCisoc2VlIElOVEVSQUNUSVZFIE1PREUgYmVsb3cpLgorKworWW91IG1heSBleGVjdXRlIHNldmVyYWwgY29tbWFuZHMgYnkgZWl0aGVyIHVzaW5nIG9uZSBpbnN0YW5jZSBvZiBgLS1leGVjYAord2l0aCBzZXZlcmFsIGNvbW1hbmRzOgorKworCWdpdCByZWJhc2UgLWkgLS1leGVjICJjbWQxICYmIGNtZDIgJiYgLi4uIgorKworb3IgYnkgZ2l2aW5nIG1vcmUgdGhhbiBvbmUgYC0tZXhlY2A6CisrCisJZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImNtZDEiIC0tZXhlYyAiY21kMiIgLS1leGVjIC4uLgorKworSWYgYC0tYXV0b3NxdWFzaGAgaXMgdXNlZCwgImV4ZWMiIGxpbmVzIHdpbGwgbm90IGJlIGFwcGVuZGVkIGZvcgordGhlIGludGVybWVkaWF0ZSBjb21taXRzLCBhbmQgd2lsbCBvbmx5IGFwcGVhciBhdCB0aGUgZW5kIG9mIGVhY2gKK3NxdWFzaC9maXh1cCBzZXJpZXMuCisKKy0tcm9vdDo6CisJUmViYXNlIGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIDxicmFuY2g+LCBpbnN0ZWFkIG9mCisJbGltaXRpbmcgdGhlbSB3aXRoIGFuIDx1cHN0cmVhbT4uICBUaGlzIGFsbG93cyB5b3UgdG8gcmViYXNlCisJdGhlIHJvb3QgY29tbWl0KHMpIG9uIGEgYnJhbmNoLiAgV2hlbiB1c2VkIHdpdGggLS1vbnRvLCBpdAorCXdpbGwgc2tpcCBjaGFuZ2VzIGFscmVhZHkgY29udGFpbmVkIGluIDxuZXdiYXNlPiAoaW5zdGVhZCBvZgorCTx1cHN0cmVhbT4pIHdoZXJlYXMgd2l0aG91dCAtLW9udG8gaXQgd2lsbCBvcGVyYXRlIG9uIGV2ZXJ5IGNoYW5nZS4KKwlXaGVuIHVzZWQgdG9nZXRoZXIgd2l0aCBib3RoIC0tb250byBhbmQgLS1wcmVzZXJ2ZS1tZXJnZXMsCisJJ2FsbCcgcm9vdCBjb21taXRzIHdpbGwgYmUgcmV3cml0dGVuIHRvIGhhdmUgPG5ld2Jhc2U+IGFzIHBhcmVudAorCWluc3RlYWQuCisKKy0tYXV0b3NxdWFzaDo6CistLW5vLWF1dG9zcXVhc2g6OgorCVdoZW4gdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBiZWdpbnMgd2l0aCAic3F1YXNoISAuLi4iIChvcgorCSJmaXh1cCEgLi4uIiksIGFuZCB0aGVyZSBpcyBhIGNvbW1pdCB3aG9zZSB0aXRsZSBiZWdpbnMgd2l0aAorCXRoZSBzYW1lIC4uLiwgYXV0b21hdGljYWxseSBtb2RpZnkgdGhlIHRvZG8gbGlzdCBvZiByZWJhc2UgLWkKKwlzbyB0aGF0IHRoZSBjb21taXQgbWFya2VkIGZvciBzcXVhc2hpbmcgY29tZXMgcmlnaHQgYWZ0ZXIgdGhlCisJY29tbWl0IHRvIGJlIG1vZGlmaWVkLCBhbmQgY2hhbmdlIHRoZSBhY3Rpb24gb2YgdGhlIG1vdmVkCisJY29tbWl0IGZyb20gYHBpY2tgIHRvIGBzcXVhc2hgIChvciBgZml4dXBgKS4gIElnbm9yZXMgc3Vic2VxdWVudAorCSJmaXh1cCEgIiBvciAic3F1YXNoISAiIGFmdGVyIHRoZSBmaXJzdCwgaW4gY2FzZSB5b3UgcmVmZXJyZWQgdG8gYW4KKwllYXJsaWVyIGZpeHVwL3NxdWFzaCB3aXRoIGBnaXQgY29tbWl0IC0tZml4dXAvLS1zcXVhc2hgLgorKworVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCB3aGVuIHRoZSAnLS1pbnRlcmFjdGl2ZScgb3B0aW9uIGlzIHVzZWQuCisrCitJZiB0aGUgJy0tYXV0b3NxdWFzaCcgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB1c2luZyB0aGUKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgYHJlYmFzZS5hdXRvU3F1YXNoYCwgdGhpcyBvcHRpb24gY2FuIGJlCit1c2VkIHRvIG92ZXJyaWRlIGFuZCBkaXNhYmxlIHRoaXMgc2V0dGluZy4KKworLS1hdXRvc3Rhc2g6OgorLS1uby1hdXRvc3Rhc2g6OgorCUF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgdGVtcG9yYXJ5IHN0YXNoIGJlZm9yZSB0aGUgb3BlcmF0aW9uCisJYmVnaW5zLCBhbmQgYXBwbHkgaXQgYWZ0ZXIgdGhlIG9wZXJhdGlvbiBlbmRzLiAgVGhpcyBtZWFucworCXRoYXQgeW91IGNhbiBydW4gcmViYXNlIG9uIGEgZGlydHkgd29ya3RyZWUuICBIb3dldmVyLCB1c2UKKwl3aXRoIGNhcmU6IHRoZSBmaW5hbCBzdGFzaCBhcHBsaWNhdGlvbiBhZnRlciBhIHN1Y2Nlc3NmdWwKKwlyZWJhc2UgbWlnaHQgcmVzdWx0IGluIG5vbi10cml2aWFsIGNvbmZsaWN0cy4KKworLS1uby1mZjo6CisJV2l0aCAtLWludGVyYWN0aXZlLCBjaGVycnktcGljayBhbGwgcmViYXNlZCBjb21taXRzIGluc3RlYWQgb2YKKwlmYXN0LWZvcndhcmRpbmcgb3ZlciB0aGUgdW5jaGFuZ2VkIG9uZXMuICBUaGlzIGVuc3VyZXMgdGhhdCB0aGUKKwllbnRpcmUgaGlzdG9yeSBvZiB0aGUgcmViYXNlZCBicmFuY2ggaXMgY29tcG9zZWQgb2YgbmV3IGNvbW1pdHMuCisrCitXaXRob3V0IC0taW50ZXJhY3RpdmUsIHRoaXMgaXMgYSBzeW5vbnltIGZvciAtLWZvcmNlLXJlYmFzZS4KKysKK1lvdSBtYXkgZmluZCB0aGlzIGhlbHBmdWwgYWZ0ZXIgcmV2ZXJ0aW5nIGEgdG9waWMgYnJhbmNoIG1lcmdlLCBhcyB0aGlzIG9wdGlvbgorcmVjcmVhdGVzIHRoZSB0b3BpYyBicmFuY2ggd2l0aCBmcmVzaCBjb21taXRzIHNvIGl0IGNhbiBiZSByZW1lcmdlZAorc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgbmVlZGluZyB0byAicmV2ZXJ0IHRoZSByZXZlcnNpb24iIChzZWUgdGhlCitsaW5rOmhvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS5odG1sW3JldmVydC1hLWZhdWx0eS1tZXJnZSBIb3ctVG9dIGZvciBkZXRhaWxzKS4KKworaW5jbHVkZTo6bWVyZ2Utc3RyYXRlZ2llcy50eHRbXQorCitOT1RFUworLS0tLS0KKworWW91IHNob3VsZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdXNpbmcgJ2dpdCByZWJhc2UnIG9uIGEKK3JlcG9zaXRvcnkgdGhhdCB5b3Ugc2hhcmUuICBTZWUgYWxzbyBSRUNPVkVSSU5HIEZST00gVVBTVFJFQU0gUkVCQVNFCitiZWxvdy4KKworV2hlbiB0aGUgZ2l0LXJlYmFzZSBjb21tYW5kIGlzIHJ1biwgaXQgd2lsbCBmaXJzdCBleGVjdXRlIGEgInByZS1yZWJhc2UiCitob29rIGlmIG9uZSBleGlzdHMuICBZb3UgY2FuIHVzZSB0aGlzIGhvb2sgdG8gZG8gc2FuaXR5IGNoZWNrcyBhbmQKK3JlamVjdCB0aGUgcmViYXNlIGlmIGl0IGlzbid0IGFwcHJvcHJpYXRlLiAgUGxlYXNlIHNlZSB0aGUgdGVtcGxhdGUKK3ByZS1yZWJhc2UgaG9vayBzY3JpcHQgZm9yIGFuIGV4YW1wbGUuCisKK1Vwb24gY29tcGxldGlvbiwgPGJyYW5jaD4gd2lsbCBiZSB0aGUgY3VycmVudCBicmFuY2guCisKK0lOVEVSQUNUSVZFIE1PREUKKy0tLS0tLS0tLS0tLS0tLS0KKworUmViYXNpbmcgaW50ZXJhY3RpdmVseSBtZWFucyB0aGF0IHlvdSBoYXZlIGEgY2hhbmNlIHRvIGVkaXQgdGhlIGNvbW1pdHMKK3doaWNoIGFyZSByZWJhc2VkLiAgWW91IGNhbiByZW9yZGVyIHRoZSBjb21taXRzLCBhbmQgeW91IGNhbgorcmVtb3ZlIHRoZW0gKHdlZWRpbmcgb3V0IGJhZCBvciBvdGhlcndpc2UgdW53YW50ZWQgcGF0Y2hlcykuCisKK1RoZSBpbnRlcmFjdGl2ZSBtb2RlIGlzIG1lYW50IGZvciB0aGlzIHR5cGUgb2Ygd29ya2Zsb3c6CisKKzEuIGhhdmUgYSB3b25kZXJmdWwgaWRlYQorMi4gaGFjayBvbiB0aGUgY29kZQorMy4gcHJlcGFyZSBhIHNlcmllcyBmb3Igc3VibWlzc2lvbgorNC4gc3VibWl0CisKK3doZXJlIHBvaW50IDIuIGNvbnNpc3RzIG9mIHNldmVyYWwgaW5zdGFuY2VzIG9mCisKK2EpIHJlZ3VsYXIgdXNlCisKKyAxLiBmaW5pc2ggc29tZXRoaW5nIHdvcnRoeSBvZiBhIGNvbW1pdAorIDIuIGNvbW1pdAorCitiKSBpbmRlcGVuZGVudCBmaXh1cAorCisgMS4gcmVhbGl6ZSB0aGF0IHNvbWV0aGluZyBkb2VzIG5vdCB3b3JrCisgMi4gZml4IHRoYXQKKyAzLiBjb21taXQgaXQKKworU29tZXRpbWVzIHRoZSB0aGluZyBmaXhlZCBpbiBiLjIuIGNhbm5vdCBiZSBhbWVuZGVkIHRvIHRoZSBub3QtcXVpdGUKK3BlcmZlY3QgY29tbWl0IGl0IGZpeGVzLCBiZWNhdXNlIHRoYXQgY29tbWl0IGlzIGJ1cmllZCBkZWVwbHkgaW4gYQorcGF0Y2ggc2VyaWVzLiAgVGhhdCBpcyBleGFjdGx5IHdoYXQgaW50ZXJhY3RpdmUgcmViYXNlIGlzIGZvcjogdXNlIGl0CithZnRlciBwbGVudHkgb2YgImEicyBhbmQgImIicywgYnkgcmVhcnJhbmdpbmcgYW5kIGVkaXRpbmcKK2NvbW1pdHMsIGFuZCBzcXVhc2hpbmcgbXVsdGlwbGUgY29tbWl0cyBpbnRvIG9uZS4KKworU3RhcnQgaXQgd2l0aCB0aGUgbGFzdCBjb21taXQgeW91IHdhbnQgdG8gcmV0YWluIGFzLWlzOgorCisJZ2l0IHJlYmFzZSAtaSA8YWZ0ZXItdGhpcy1jb21taXQ+CisKK0FuIGVkaXRvciB3aWxsIGJlIGZpcmVkIHVwIHdpdGggYWxsIHRoZSBjb21taXRzIGluIHlvdXIgY3VycmVudCBicmFuY2gKKyhpZ25vcmluZyBtZXJnZSBjb21taXRzKSwgd2hpY2ggY29tZSBhZnRlciB0aGUgZ2l2ZW4gY29tbWl0LiAgWW91IGNhbgorcmVvcmRlciB0aGUgY29tbWl0cyBpbiB0aGlzIGxpc3QgdG8geW91ciBoZWFydCdzIGNvbnRlbnQsIGFuZCB5b3UgY2FuCityZW1vdmUgdGhlbS4gIFRoZSBsaXN0IGxvb2tzIG1vcmUgb3IgbGVzcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BpY2sgZGVhZGJlZSBUaGUgb25lbGluZSBvZiB0aGlzIGNvbW1pdAorcGljayBmYTFhZmUxIFRoZSBvbmVsaW5lIG9mIHRoZSBuZXh0IGNvbW1pdAorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBvbmVsaW5lIGRlc2NyaXB0aW9ucyBhcmUgcHVyZWx5IGZvciB5b3VyIHBsZWFzdXJlOyAnZ2l0IHJlYmFzZScgd2lsbAorbm90IGxvb2sgYXQgdGhlbSBidXQgYXQgdGhlIGNvbW1pdCBuYW1lcyAoImRlYWRiZWUiIGFuZCAiZmExYWZlMSIgaW4gdGhpcworZXhhbXBsZSksIHNvIGRvIG5vdCBkZWxldGUgb3IgZWRpdCB0aGUgbmFtZXMuCisKK0J5IHJlcGxhY2luZyB0aGUgY29tbWFuZCAicGljayIgd2l0aCB0aGUgY29tbWFuZCAiZWRpdCIsIHlvdSBjYW4gdGVsbAorJ2dpdCByZWJhc2UnIHRvIHN0b3AgYWZ0ZXIgYXBwbHlpbmcgdGhhdCBjb21taXQsIHNvIHRoYXQgeW91IGNhbiBlZGl0Cit0aGUgZmlsZXMgYW5kL29yIHRoZSBjb21taXQgbWVzc2FnZSwgYW1lbmQgdGhlIGNvbW1pdCwgYW5kIGNvbnRpbnVlCityZWJhc2luZy4KKworSWYgeW91IGp1c3Qgd2FudCB0byBlZGl0IHRoZSBjb21taXQgbWVzc2FnZSBmb3IgYSBjb21taXQsIHJlcGxhY2UgdGhlCitjb21tYW5kICJwaWNrIiB3aXRoIHRoZSBjb21tYW5kICJyZXdvcmQiLgorCitUbyBkcm9wIGEgY29tbWl0LCByZXBsYWNlIHRoZSBjb21tYW5kICJwaWNrIiB3aXRoICJkcm9wIiwgb3IganVzdAorZGVsZXRlIHRoZSBtYXRjaGluZyBsaW5lLgorCitJZiB5b3Ugd2FudCB0byBmb2xkIHR3byBvciBtb3JlIGNvbW1pdHMgaW50byBvbmUsIHJlcGxhY2UgdGhlIGNvbW1hbmQKKyJwaWNrIiBmb3IgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBjb21taXRzIHdpdGggInNxdWFzaCIgb3IgImZpeHVwIi4KK0lmIHRoZSBjb21taXRzIGhhZCBkaWZmZXJlbnQgYXV0aG9ycywgdGhlIGZvbGRlZCBjb21taXQgd2lsbCBiZQorYXR0cmlidXRlZCB0byB0aGUgYXV0aG9yIG9mIHRoZSBmaXJzdCBjb21taXQuICBUaGUgc3VnZ2VzdGVkIGNvbW1pdAorbWVzc2FnZSBmb3IgdGhlIGZvbGRlZCBjb21taXQgaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGNvbW1pdAorbWVzc2FnZXMgb2YgdGhlIGZpcnN0IGNvbW1pdCBhbmQgb2YgdGhvc2Ugd2l0aCB0aGUgInNxdWFzaCIgY29tbWFuZCwKK2J1dCBvbWl0cyB0aGUgY29tbWl0IG1lc3NhZ2VzIG9mIGNvbW1pdHMgd2l0aCB0aGUgImZpeHVwIiBjb21tYW5kLgorCisnZ2l0IHJlYmFzZScgd2lsbCBzdG9wIHdoZW4gInBpY2siIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggImVkaXQiIG9yCit3aGVuIGEgY29tbWFuZCBmYWlscyBkdWUgdG8gbWVyZ2UgZXJyb3JzLiBXaGVuIHlvdSBhcmUgZG9uZSBlZGl0aW5nCithbmQvb3IgcmVzb2x2aW5nIGNvbmZsaWN0cyB5b3UgY2FuIGNvbnRpbnVlIHdpdGggYGdpdCByZWJhc2UgLS1jb250aW51ZWAuCisKK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byByZW9yZGVyIHRoZSBsYXN0IDUgY29tbWl0cywgc3VjaCB0aGF0IHdoYXQKK3dhcyBIRUFEfjQgYmVjb21lcyB0aGUgbmV3IEhFQUQuIFRvIGFjaGlldmUgdGhhdCwgeW91IHdvdWxkIGNhbGwKKydnaXQgcmViYXNlJyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYmFzZSAtaSBIRUFEfjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW5kIG1vdmUgdGhlIGZpcnN0IHBhdGNoIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCisKK1lvdSBtaWdodCB3YW50IHRvIHByZXNlcnZlIG1lcmdlcywgaWYgeW91IGhhdmUgYSBoaXN0b3J5IGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgIFgKKyAgICAgICAgICAgIFwKKyAgICAgICAgIEEtLS1NLS0tQgorICAgICAgICAvCistLS1vLS0tTy0tLVAtLS1RCistLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9zZSB5b3Ugd2FudCB0byByZWJhc2UgdGhlIHNpZGUgYnJhbmNoIHN0YXJ0aW5nIGF0ICJBIiB0byAiUSIuIE1ha2UKK3N1cmUgdGhhdCB0aGUgY3VycmVudCBIRUFEIGlzICJCIiwgYW5kIGNhbGwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYmFzZSAtaSAtcCAtLW9udG8gUSBPCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZW9yZGVyaW5nIGFuZCBlZGl0aW5nIGNvbW1pdHMgdXN1YWxseSBjcmVhdGVzIHVudGVzdGVkIGludGVybWVkaWF0ZQorc3RlcHMuICBZb3UgbWF5IHdhbnQgdG8gY2hlY2sgdGhhdCB5b3VyIGhpc3RvcnkgZWRpdGluZyBkaWQgbm90IGJyZWFrCithbnl0aGluZyBieSBydW5uaW5nIGEgdGVzdCwgb3IgYXQgbGVhc3QgcmVjb21waWxpbmcgYXQgaW50ZXJtZWRpYXRlCitwb2ludHMgaW4gaGlzdG9yeSBieSB1c2luZyB0aGUgImV4ZWMiIGNvbW1hbmQgKHNob3J0Y3V0ICJ4IikuICBZb3UgbWF5CitkbyBzbyBieSBjcmVhdGluZyBhIHRvZG8gbGlzdCBsaWtlIHRoaXMgb25lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwaWNrIGRlYWRiZWUgSW1wbGVtZW50IGZlYXR1cmUgWFhYCitmaXh1cCBmMWE1YzAwIEZpeCB0byBmZWF0dXJlIFhYWAorZXhlYyBtYWtlCitwaWNrIGMwZmZlZWUgVGhlIG9uZWxpbmUgb2YgdGhlIG5leHQgY29tbWl0CitlZGl0IGRlYWRiYWIgVGhlIG9uZWxpbmUgb2YgdGhlIGNvbW1pdCBhZnRlcgorZXhlYyBjZCBzdWJkaXI7IG1ha2UgdGVzdAorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbnRlcmFjdGl2ZSByZWJhc2Ugd2lsbCBzdG9wIHdoZW4gYSBjb21tYW5kIGZhaWxzIChpLmUuIGV4aXRzIHdpdGgKK25vbi0wIHN0YXR1cykgdG8gZ2l2ZSB5b3UgYW4gb3Bwb3J0dW5pdHkgdG8gZml4IHRoZSBwcm9ibGVtLiBZb3UgY2FuCitjb250aW51ZSB3aXRoIGBnaXQgcmViYXNlIC0tY29udGludWVgLgorCitUaGUgImV4ZWMiIGNvbW1hbmQgbGF1bmNoZXMgdGhlIGNvbW1hbmQgaW4gYSBzaGVsbCAodGhlIG9uZSBzcGVjaWZpZWQKK2luIGAkU0hFTExgLCBvciB0aGUgZGVmYXVsdCBzaGVsbCBpZiBgJFNIRUxMYCBpcyBub3Qgc2V0KSwgc28geW91IGNhbgordXNlIHNoZWxsIGZlYXR1cmVzIChsaWtlICJjZCIsICI+IiwgIjsiIC4uLikuIFRoZSBjb21tYW5kIGlzIHJ1biBmcm9tCit0aGUgcm9vdCBvZiB0aGUgd29ya2luZyB0cmVlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWJhc2UgLWkgLS1leGVjICJtYWtlIHRlc3QiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCBsZXRzIHlvdSBjaGVjayB0aGF0IGludGVybWVkaWF0ZSBjb21taXRzIGFyZSBjb21waWxhYmxlLgorVGhlIHRvZG8gbGlzdCBiZWNvbWVzIGxpa2UgdGhhdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BpY2sgNTkyOGFlYSBvbmUKK2V4ZWMgbWFrZSB0ZXN0CitwaWNrIDA0ZDBmZGEgdHdvCitleGVjIG1ha2UgdGVzdAorcGljayBiYTQ2MTY5IHRocmVlCitleGVjIG1ha2UgdGVzdAorcGljayBmNDU5M2Y5IGZvdXIKK2V4ZWMgbWFrZSB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTUExJVFRJTkcgQ09NTUlUUworLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gaW50ZXJhY3RpdmUgbW9kZSwgeW91IGNhbiBtYXJrIGNvbW1pdHMgd2l0aCB0aGUgYWN0aW9uICJlZGl0Ii4gIEhvd2V2ZXIsCit0aGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCAnZ2l0IHJlYmFzZScgZXhwZWN0cyB0aGUgcmVzdWx0IG9mIHRoaXMKK2VkaXQgdG8gYmUgZXhhY3RseSBvbmUgY29tbWl0LiAgSW5kZWVkLCB5b3UgY2FuIHVuZG8gdGhlIGNvbW1pdCwgb3IgeW91IGNhbgorYWRkIG90aGVyIGNvbW1pdHMuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHNwbGl0IGEgY29tbWl0IGludG8gdHdvOgorCistIFN0YXJ0IGFuIGludGVyYWN0aXZlIHJlYmFzZSB3aXRoIGBnaXQgcmViYXNlIC1pIDxjb21taXQ+XmAsIHdoZXJlCisgIDxjb21taXQ+IGlzIHRoZSBjb21taXQgeW91IHdhbnQgdG8gc3BsaXQuICBJbiBmYWN0LCBhbnkgY29tbWl0IHJhbmdlCisgIHdpbGwgZG8sIGFzIGxvbmcgYXMgaXQgY29udGFpbnMgdGhhdCBjb21taXQuCisKKy0gTWFyayB0aGUgY29tbWl0IHlvdSB3YW50IHRvIHNwbGl0IHdpdGggdGhlIGFjdGlvbiAiZWRpdCIuCisKKy0gV2hlbiBpdCBjb21lcyB0byBlZGl0aW5nIHRoYXQgY29tbWl0LCBleGVjdXRlIGBnaXQgcmVzZXQgSEVBRF5gLiAgVGhlCisgIGVmZmVjdCBpcyB0aGF0IHRoZSBIRUFEIGlzIHJld291bmQgYnkgb25lLCBhbmQgdGhlIGluZGV4IGZvbGxvd3Mgc3VpdC4KKyAgSG93ZXZlciwgdGhlIHdvcmtpbmcgdHJlZSBzdGF5cyB0aGUgc2FtZS4KKworLSBOb3cgYWRkIHRoZSBjaGFuZ2VzIHRvIHRoZSBpbmRleCB0aGF0IHlvdSB3YW50IHRvIGhhdmUgaW4gdGhlIGZpcnN0CisgIGNvbW1pdC4gIFlvdSBjYW4gdXNlIGBnaXQgYWRkYCAocG9zc2libHkgaW50ZXJhY3RpdmVseSkgb3IKKyAgJ2dpdCBndWknIChvciBib3RoKSB0byBkbyB0aGF0LgorCistIENvbW1pdCB0aGUgbm93LWN1cnJlbnQgaW5kZXggd2l0aCB3aGF0ZXZlciBjb21taXQgbWVzc2FnZSBpcyBhcHByb3ByaWF0ZQorICBub3cuCisKKy0gUmVwZWF0IHRoZSBsYXN0IHR3byBzdGVwcyB1bnRpbCB5b3VyIHdvcmtpbmcgdHJlZSBpcyBjbGVhbi4KKworLSBDb250aW51ZSB0aGUgcmViYXNlIHdpdGggYGdpdCByZWJhc2UgLS1jb250aW51ZWAuCisKK0lmIHlvdSBhcmUgbm90IGFic29sdXRlbHkgc3VyZSB0aGF0IHRoZSBpbnRlcm1lZGlhdGUgcmV2aXNpb25zIGFyZQorY29uc2lzdGVudCAodGhleSBjb21waWxlLCBwYXNzIHRoZSB0ZXN0c3VpdGUsIGV0Yy4pIHlvdSBzaG91bGQgdXNlCisnZ2l0IHN0YXNoJyB0byBzdGFzaCBhd2F5IHRoZSBub3QteWV0LWNvbW1pdHRlZCBjaGFuZ2VzCithZnRlciBlYWNoIGNvbW1pdCwgdGVzdCwgYW5kIGFtZW5kIHRoZSBjb21taXQgaWYgZml4ZXMgYXJlIG5lY2Vzc2FyeS4KKworCitSRUNPVkVSSU5HIEZST00gVVBTVFJFQU0gUkVCQVNFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlYmFzaW5nIChvciBhbnkgb3RoZXIgZm9ybSBvZiByZXdyaXRpbmcpIGEgYnJhbmNoIHRoYXQgb3RoZXJzIGhhdmUKK2Jhc2VkIHdvcmsgb24gaXMgYSBiYWQgaWRlYTogYW55b25lIGRvd25zdHJlYW0gb2YgaXQgaXMgZm9yY2VkIHRvCittYW51YWxseSBmaXggdGhlaXIgaGlzdG9yeS4gIFRoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gZG8gdGhlIGZpeAorZnJvbSB0aGUgZG93bnN0cmVhbSdzIHBvaW50IG9mIHZpZXcuICBUaGUgcmVhbCBmaXgsIGhvd2V2ZXIsIHdvdWxkIGJlCit0byBhdm9pZCByZWJhc2luZyB0aGUgdXBzdHJlYW0gaW4gdGhlIGZpcnN0IHBsYWNlLgorCitUbyBpbGx1c3RyYXRlLCBzdXBwb3NlIHlvdSBhcmUgaW4gYSBzaXR1YXRpb24gd2hlcmUgc29tZW9uZSBkZXZlbG9wcyBhCisnc3Vic3lzdGVtJyBicmFuY2gsIGFuZCB5b3UgYXJlIHdvcmtpbmcgb24gYSAndG9waWMnIHRoYXQgaXMgZGVwZW5kZW50CitvbiB0aGlzICdzdWJzeXN0ZW0nLiAgWW91IG1pZ2h0IGVuZCB1cCB3aXRoIGEgaGlzdG9yeSBsaWtlIHRoZQorZm9sbG93aW5nOgorCistLS0tLS0tLS0tLS0KKyAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8gIG1hc3RlcgorCSBcCisJICBvLS0tby0tLW8tLS1vLS0tbyAgc3Vic3lzdGVtCisJCQkgICBcCisJCQkgICAgKi0tLSotLS0qICB0b3BpYworLS0tLS0tLS0tLS0tCisKK0lmICdzdWJzeXN0ZW0nIGlzIHJlYmFzZWQgYWdhaW5zdCAnbWFzdGVyJywgdGhlIGZvbGxvd2luZyBoYXBwZW5zOgorCistLS0tLS0tLS0tLS0KKyAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tbyAgbWFzdGVyCisJIFwJCQkgXAorCSAgby0tLW8tLS1vLS0tby0tLW8JICBvJy0tbyctLW8nLS1vJy0tbycgIHN1YnN5c3RlbQorCQkJICAgXAorCQkJICAgICotLS0qLS0tKiAgdG9waWMKKy0tLS0tLS0tLS0tLQorCitJZiB5b3Ugbm93IGNvbnRpbnVlIGRldmVsb3BtZW50IGFzIHVzdWFsLCBhbmQgZXZlbnR1YWxseSBtZXJnZSAndG9waWMnCit0byAnc3Vic3lzdGVtJywgdGhlIGNvbW1pdHMgZnJvbSAnc3Vic3lzdGVtJyB3aWxsIHJlbWFpbiBkdXBsaWNhdGVkIGZvcmV2ZXI6CisKKy0tLS0tLS0tLS0tLQorICAgIG8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vICBtYXN0ZXIKKwkgXAkJCSBcCisJICBvLS0tby0tLW8tLS1vLS0tbwkgIG8nLS1vJy0tbyctLW8nLS1vJy0tTQkgc3Vic3lzdGVtCisJCQkgICBcCQkJICAgICAvCisJCQkgICAgKi0tLSotLS0qLS4uLi4uLi4uLi4tKi0tKiAgdG9waWMKKy0tLS0tLS0tLS0tLQorCitTdWNoIGR1cGxpY2F0ZXMgYXJlIGdlbmVyYWxseSBmcm93bmVkIHVwb24gYmVjYXVzZSB0aGV5IGNsdXR0ZXIgdXAKK2hpc3RvcnksIG1ha2luZyBpdCBoYXJkZXIgdG8gZm9sbG93LiAgVG8gY2xlYW4gdGhpbmdzIHVwLCB5b3UgbmVlZCB0bwordHJhbnNwbGFudCB0aGUgY29tbWl0cyBvbiAndG9waWMnIHRvIHRoZSBuZXcgJ3N1YnN5c3RlbScgdGlwLCBpLmUuLAorcmViYXNlICd0b3BpYycuICBUaGlzIGJlY29tZXMgYSByaXBwbGUgZWZmZWN0OiBhbnlvbmUgZG93bnN0cmVhbSBmcm9tCisndG9waWMnIGlzIGZvcmNlZCB0byByZWJhc2UgdG9vLCBhbmQgc28gb24hCisKK1RoZXJlIGFyZSB0d28ga2luZHMgb2YgZml4ZXMsIGRpc2N1c3NlZCBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zOgorCitFYXN5IGNhc2U6IFRoZSBjaGFuZ2VzIGFyZSBsaXRlcmFsbHkgdGhlIHNhbWUuOjoKKworCVRoaXMgaGFwcGVucyBpZiB0aGUgJ3N1YnN5c3RlbScgcmViYXNlIHdhcyBhIHNpbXBsZSByZWJhc2UgYW5kCisJaGFkIG5vIGNvbmZsaWN0cy4KKworSGFyZCBjYXNlOiBUaGUgY2hhbmdlcyBhcmUgbm90IHRoZSBzYW1lLjo6CisKKwlUaGlzIGhhcHBlbnMgaWYgdGhlICdzdWJzeXN0ZW0nIHJlYmFzZSBoYWQgY29uZmxpY3RzLCBvciB1c2VkCisJYC0taW50ZXJhY3RpdmVgIHRvIG9taXQsIGVkaXQsIHNxdWFzaCwgb3IgZml4dXAgY29tbWl0czsgb3IKKwlpZiB0aGUgdXBzdHJlYW0gdXNlZCBvbmUgb2YgYGNvbW1pdCAtLWFtZW5kYCwgYHJlc2V0YCwgb3IKKwlgZmlsdGVyLWJyYW5jaGAuCisKKworVGhlIGVhc3kgY2FzZQorfn5+fn5+fn5+fn5+fgorCitPbmx5IHdvcmtzIGlmIHRoZSBjaGFuZ2VzIChwYXRjaCBJRHMgYmFzZWQgb24gdGhlIGRpZmYgY29udGVudHMpIG9uCisnc3Vic3lzdGVtJyBhcmUgbGl0ZXJhbGx5IHRoZSBzYW1lIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHJlYmFzZQorJ3N1YnN5c3RlbScgZGlkLgorCitJbiB0aGF0IGNhc2UsIHRoZSBmaXggaXMgZWFzeSBiZWNhdXNlICdnaXQgcmViYXNlJyBrbm93cyB0byBza2lwCitjaGFuZ2VzIHRoYXQgYXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgbmV3IHVwc3RyZWFtLiAgU28gaWYgeW91IHNheQorKGFzc3VtaW5nIHlvdSdyZSBvbiAndG9waWMnKQorLS0tLS0tLS0tLS0tCisgICAgJCBnaXQgcmViYXNlIHN1YnN5c3RlbQorLS0tLS0tLS0tLS0tCit5b3Ugd2lsbCBlbmQgdXAgd2l0aCB0aGUgZml4ZWQgaGlzdG9yeQorLS0tLS0tLS0tLS0tCisgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8gIG1hc3RlcgorCQkJCSBcCisJCQkJICBvJy0tbyctLW8nLS1vJy0tbycgIHN1YnN5c3RlbQorCQkJCQkJICAgXAorCQkJCQkJICAgICotLS0qLS0tKiAgdG9waWMKKy0tLS0tLS0tLS0tLQorCisKK1RoZSBoYXJkIGNhc2UKK35+fn5+fn5+fn5+fn4KKworVGhpbmdzIGdldCBtb3JlIGNvbXBsaWNhdGVkIGlmIHRoZSAnc3Vic3lzdGVtJyBjaGFuZ2VzIGRvIG5vdCBleGFjdGx5Citjb3JyZXNwb25kIHRvIHRoZSBvbmVzIGJlZm9yZSB0aGUgcmViYXNlLgorCitOT1RFOiBXaGlsZSBhbiAiZWFzeSBjYXNlIHJlY292ZXJ5IiBzb21ldGltZXMgYXBwZWFycyB0byBiZSBzdWNjZXNzZnVsCisgICAgICBldmVuIGluIHRoZSBoYXJkIGNhc2UsIGl0IG1heSBoYXZlIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzLiAgRm9yCisgICAgICBleGFtcGxlLCBhIGNvbW1pdCB0aGF0IHdhcyByZW1vdmVkIHZpYSBgZ2l0IHJlYmFzZQorICAgICAgLS1pbnRlcmFjdGl2ZWAgd2lsbCBiZSAqKnJlc3VycmVjdGVkKiohCisKK1RoZSBpZGVhIGlzIHRvIG1hbnVhbGx5IHRlbGwgJ2dpdCByZWJhc2UnICJ3aGVyZSB0aGUgb2xkICdzdWJzeXN0ZW0nCitlbmRlZCBhbmQgeW91ciAndG9waWMnIGJlZ2FuIiwgdGhhdCBpcywgd2hhdCB0aGUgb2xkIG1lcmdlLWJhc2UKK2JldHdlZW4gdGhlbSB3YXMuICBZb3Ugd2lsbCBoYXZlIHRvIGZpbmQgYSB3YXkgdG8gbmFtZSB0aGUgbGFzdCBjb21taXQKK29mIHRoZSBvbGQgJ3N1YnN5c3RlbScsIGZvciBleGFtcGxlOgorCisqIFdpdGggdGhlICdzdWJzeXN0ZW0nIHJlZmxvZzogYWZ0ZXIgJ2dpdCBmZXRjaCcsIHRoZSBvbGQgdGlwIG9mCisgICdzdWJzeXN0ZW0nIGlzIGF0IGBzdWJzeXN0ZW1AezF9YC4gIFN1YnNlcXVlbnQgZmV0Y2hlcyB3aWxsCisgIGluY3JlYXNlIHRoZSBudW1iZXIuICAoU2VlIGxpbmtnaXQ6Z2l0LXJlZmxvZ1sxXS4pCisKKyogUmVsYXRpdmUgdG8gdGhlIHRpcCBvZiAndG9waWMnOiBrbm93aW5nIHRoYXQgeW91ciAndG9waWMnIGhhcyB0aHJlZQorICBjb21taXRzLCB0aGUgb2xkIHRpcCBvZiAnc3Vic3lzdGVtJyBtdXN0IGJlIGB0b3BpY34zYC4KKworWW91IGNhbiB0aGVuIHRyYW5zcGxhbnQgdGhlIG9sZCBgc3Vic3lzdGVtLi50b3BpY2AgdG8gdGhlIG5ldyB0aXAgYnkKK3NheWluZyAoZm9yIHRoZSByZWZsb2cgY2FzZSwgYW5kIGFzc3VtaW5nIHlvdSBhcmUgb24gJ3RvcGljJyBhbHJlYWR5KToKKy0tLS0tLS0tLS0tLQorICAgICQgZ2l0IHJlYmFzZSAtLW9udG8gc3Vic3lzdGVtIHN1YnN5c3RlbUB7MX0KKy0tLS0tLS0tLS0tLQorCitUaGUgcmlwcGxlIGVmZmVjdCBvZiBhICJoYXJkIGNhc2UiIHJlY292ZXJ5IGlzIGVzcGVjaWFsbHkgYmFkOgorJ2V2ZXJ5b25lJyBkb3duc3RyZWFtIGZyb20gJ3RvcGljJyB3aWxsIG5vdyBoYXZlIHRvIHBlcmZvcm0gYSAiaGFyZAorY2FzZSIgcmVjb3ZlcnkgdG9vIQorCitCVUdTCistLS0tCitUaGUgdG9kbyBsaXN0IHByZXNlbnRlZCBieSBgLS1wcmVzZXJ2ZS1tZXJnZXMgLS1pbnRlcmFjdGl2ZWAgZG9lcyBub3QKK3JlcHJlc2VudCB0aGUgdG9wb2xvZ3kgb2YgdGhlIHJldmlzaW9uIGdyYXBoLiAgRWRpdGluZyBjb21taXRzIGFuZAorcmV3b3JkaW5nIHRoZWlyIGNvbW1pdCBtZXNzYWdlcyBzaG91bGQgd29yayBmaW5lLCBidXQgYXR0ZW1wdHMgdG8KK3Jlb3JkZXIgY29tbWl0cyB0ZW5kIHRvIHByb2R1Y2UgY291bnRlcmludHVpdGl2ZSByZXN1bHRzLgorCitGb3IgZXhhbXBsZSwgYW4gYXR0ZW1wdCB0byByZWFycmFuZ2UKKy0tLS0tLS0tLS0tLQorMSAtLS0gMiAtLS0gMyAtLS0gNCAtLS0gNQorLS0tLS0tLS0tLS0tCit0bworLS0tLS0tLS0tLS0tCisxIC0tLSAyIC0tLSA0IC0tLSAzIC0tLSA1CistLS0tLS0tLS0tLS0KK2J5IG1vdmluZyB0aGUgInBpY2sgNCIgbGluZSB3aWxsIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIGhpc3Rvcnk6CistLS0tLS0tLS0tLS0KKwkzCisgICAgICAgLworMSAtLS0gMiAtLS0gNCAtLS0gNQorLS0tLS0tLS0tLS0tCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVjZWl2ZS1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlY2VpdmUtcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwZWU4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlY2VpdmUtcGFjay50eHQKQEAgLTAsMCArMSwyMjAgQEAKK2dpdC1yZWNlaXZlLXBhY2soMSkKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlY2VpdmUtcGFjayAtIFJlY2VpdmUgd2hhdCBpcyBwdXNoZWQgaW50byB0aGUgcmVwb3NpdG9yeQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdC1yZWNlaXZlLXBhY2snIDxkaXJlY3Rvcnk+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW52b2tlZCBieSAnZ2l0IHNlbmQtcGFjaycgYW5kIHVwZGF0ZXMgdGhlIHJlcG9zaXRvcnkgd2l0aCB0aGUKK2luZm9ybWF0aW9uIGZlZCBmcm9tIHRoZSByZW1vdGUgZW5kLgorCitUaGlzIGNvbW1hbmQgaXMgdXN1YWxseSBub3QgaW52b2tlZCBkaXJlY3RseSBieSB0aGUgZW5kIHVzZXIuCitUaGUgVUkgZm9yIHRoZSBwcm90b2NvbCBpcyBvbiB0aGUgJ2dpdCBzZW5kLXBhY2snIHNpZGUsIGFuZCB0aGUKK3Byb2dyYW0gcGFpciBpcyBtZWFudCB0byBiZSB1c2VkIHRvIHB1c2ggdXBkYXRlcyB0byByZW1vdGUKK3JlcG9zaXRvcnkuICBGb3IgcHVsbCBvcGVyYXRpb25zLCBzZWUgbGlua2dpdDpnaXQtZmV0Y2gtcGFja1sxXS4KKworVGhlIGNvbW1hbmQgYWxsb3dzIGZvciBjcmVhdGlvbiBhbmQgZmFzdC1mb3J3YXJkaW5nIG9mIHNoYTEgcmVmcworKGhlYWRzL3RhZ3MpIG9uIHRoZSByZW1vdGUgZW5kIChzdHJpY3RseSBzcGVha2luZywgaXQgaXMgdGhlCitsb2NhbCBlbmQgJ2dpdC1yZWNlaXZlLXBhY2snIHJ1bnMsIGJ1dCB0byB0aGUgdXNlciB3aG8gaXMgc2l0dGluZyBhdAordGhlIHNlbmQtcGFjayBlbmQsIGl0IGlzIHVwZGF0aW5nIHRoZSByZW1vdGUuICBDb25mdXNlZD8pCisKK1RoZXJlIGFyZSBvdGhlciByZWFsLXdvcmxkIGV4YW1wbGVzIG9mIHVzaW5nIHVwZGF0ZSBhbmQKK3Bvc3QtdXBkYXRlIGhvb2tzIGZvdW5kIGluIHRoZSBEb2N1bWVudGF0aW9uL2hvd3RvIGRpcmVjdG9yeS4KKworJ2dpdC1yZWNlaXZlLXBhY2snIGhvbm91cnMgdGhlIHJlY2VpdmUuZGVueU5vbkZhc3RGb3J3YXJkcyBjb25maWcKK29wdGlvbiwgd2hpY2ggdGVsbHMgaXQgaWYgdXBkYXRlcyB0byBhIHJlZiBzaG91bGQgYmUgZGVuaWVkIGlmIHRoZXkKK2FyZSBub3QgZmFzdC1mb3J3YXJkcy4KKworT1BUSU9OUworLS0tLS0tLQorPGRpcmVjdG9yeT46OgorCVRoZSByZXBvc2l0b3J5IHRvIHN5bmMgaW50by4KKworcHJlLXJlY2VpdmUgSG9vaworLS0tLS0tLS0tLS0tLS0tLQorQmVmb3JlIGFueSByZWYgaXMgdXBkYXRlZCwgaWYgJEdJVF9ESVIvaG9va3MvcHJlLXJlY2VpdmUgZmlsZSBleGlzdHMKK2FuZCBpcyBleGVjdXRhYmxlLCBpdCB3aWxsIGJlIGludm9rZWQgb25jZSB3aXRoIG5vIHBhcmFtZXRlcnMuICBUaGUKK3N0YW5kYXJkIGlucHV0IG9mIHRoZSBob29rIHdpbGwgYmUgb25lIGxpbmUgcGVyIHJlZiB0byBiZSB1cGRhdGVkOgorCisgICAgICAgc2hhMS1vbGQgU1Agc2hhMS1uZXcgU1AgcmVmbmFtZSBMRgorCitUaGUgcmVmbmFtZSB2YWx1ZSBpcyByZWxhdGl2ZSB0byAkR0lUX0RJUjsgZS5nLiBmb3IgdGhlIG1hc3RlcgoraGVhZCB0aGlzIGlzICJyZWZzL2hlYWRzL21hc3RlciIuICBUaGUgdHdvIHNoYTEgdmFsdWVzIGJlZm9yZQorZWFjaCByZWZuYW1lIGFyZSB0aGUgb2JqZWN0IG5hbWVzIGZvciB0aGUgcmVmbmFtZSBiZWZvcmUgYW5kIGFmdGVyCit0aGUgdXBkYXRlLiAgUmVmcyB0byBiZSBjcmVhdGVkIHdpbGwgaGF2ZSBzaGExLW9sZCBlcXVhbCB0byAwXHs0MH0sCit3aGlsZSByZWZzIHRvIGJlIGRlbGV0ZWQgd2lsbCBoYXZlIHNoYTEtbmV3IGVxdWFsIHRvIDBcezQwfSwgb3RoZXJ3aXNlCitzaGExLW9sZCBhbmQgc2hhMS1uZXcgc2hvdWxkIGJlIHZhbGlkIG9iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnkuCisKK1doZW4gYWNjZXB0aW5nIGEgc2lnbmVkIHB1c2ggKHNlZSBsaW5rZ2l0OmdpdC1wdXNoWzFdKSwgdGhlIHNpZ25lZAorcHVzaCBjZXJ0aWZpY2F0ZSBpcyBzdG9yZWQgaW4gYSBibG9iIGFuZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZQorYEdJVF9QVVNIX0NFUlRgIGNhbiBiZSBjb25zdWx0ZWQgZm9yIGl0cyBvYmplY3QgbmFtZS4gIFNlZSB0aGUKK2Rlc2NyaXB0aW9uIG9mIGBwb3N0LXJlY2VpdmVgIGhvb2sgZm9yIGFuIGV4YW1wbGUuICBJbiBhZGRpdGlvbiwgdGhlCitjZXJ0aWZpY2F0ZSBpcyB2ZXJpZmllZCB1c2luZyBHUEcgYW5kIHRoZSByZXN1bHQgaXMgZXhwb3J0ZWQgd2l0aAordGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisKK2BHSVRfUFVTSF9DRVJUX1NJR05FUmA6OgorCVRoZSBuYW1lIGFuZCB0aGUgZS1tYWlsIGFkZHJlc3Mgb2YgdGhlIG93bmVyIG9mIHRoZSBrZXkgdGhhdAorCXNpZ25lZCB0aGUgcHVzaCBjZXJ0aWZpY2F0ZS4KKworYEdJVF9QVVNIX0NFUlRfS0VZYDo6CisJVGhlIEdQRyBrZXkgSUQgb2YgdGhlIGtleSB0aGF0IHNpZ25lZCB0aGUgcHVzaCBjZXJ0aWZpY2F0ZS4KKworYEdJVF9QVVNIX0NFUlRfU1RBVFVTYDo6CisJVGhlIHN0YXR1cyBvZiBHUEcgdmVyaWZpY2F0aW9uIG9mIHRoZSBwdXNoIGNlcnRpZmljYXRlLAorCXVzaW5nIHRoZSBzYW1lIG1uZW1vbmljIGFzIHVzZWQgaW4gYCVHP2AgZm9ybWF0IG9mIGBnaXQgbG9nYAorCWZhbWlseSBvZiBjb21tYW5kcyAoc2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSkuCisKK2BHSVRfUFVTSF9DRVJUX05PTkNFYDo6CisJVGhlIG5vbmNlIHN0cmluZyB0aGUgcHJvY2VzcyBhc2tlZCB0aGUgc2lnbmVyIHRvIGluY2x1ZGUKKwlpbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZS4gIElmIHRoaXMgZG9lcyBub3QgbWF0Y2ggdGhlIHZhbHVlCisJcmVjb3JkZWQgb24gdGhlICJub25jZSIgaGVhZGVyIGluIHRoZSBwdXNoIGNlcnRpZmljYXRlLCBpdAorCW1heSBpbmRpY2F0ZSB0aGF0IHRoZSBjZXJ0aWZpY2F0ZSBpcyBhIHZhbGlkIG9uZSB0aGF0IGlzCisJYmVpbmcgcmVwbGF5ZWQgZnJvbSBhIHNlcGFyYXRlICJnaXQgcHVzaCIgc2Vzc2lvbi4KKworYEdJVF9QVVNIX0NFUlRfTk9OQ0VfU1RBVFVTYDo6CitgVU5TT0xJQ0lURURgOzsKKwkiZ2l0IHB1c2ggLS1zaWduZWQiIHNlbnQgYSBub25jZSB3aGVuIHdlIGRpZCBub3QgYXNrIGl0IHRvCisJc2VuZCBvbmUuCitgTUlTU0lOR2A7OworCSJnaXQgcHVzaCAtLXNpZ25lZCIgZGlkIG5vdCBzZW5kIGFueSBub25jZSBoZWFkZXIuCitgQkFEYDs7CisJImdpdCBwdXNoIC0tc2lnbmVkIiBzZW50IGEgYm9ndXMgbm9uY2UuCitgT0tgOzsKKwkiZ2l0IHB1c2ggLS1zaWduZWQiIHNlbnQgdGhlIG5vbmNlIHdlIGFza2VkIGl0IHRvIHNlbmQuCitgU0xPUGA7OworCSJnaXQgcHVzaCAtLXNpZ25lZCIgc2VudCBhIG5vbmNlIGRpZmZlcmVudCBmcm9tIHdoYXQgd2UKKwlhc2tlZCBpdCB0byBzZW5kIG5vdywgYnV0IGluIGEgcHJldmlvdXMgc2Vzc2lvbi4gIFNlZQorCWBHSVRfUFVTSF9DRVJUX05PTkNFX1NMT1BgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCitgR0lUX1BVU0hfQ0VSVF9OT05DRV9TTE9QYDo6CisJImdpdCBwdXNoIC0tc2lnbmVkIiBzZW50IGEgbm9uY2UgZGlmZmVyZW50IGZyb20gd2hhdCB3ZQorCWFza2VkIGl0IHRvIHNlbmQgbm93LCBidXQgaW4gYSBkaWZmZXJlbnQgc2Vzc2lvbiB3aG9zZQorCXN0YXJ0aW5nIHRpbWUgaXMgZGlmZmVyZW50IGJ5IHRoaXMgbWFueSBzZWNvbmRzIGZyb20gdGhlCisJY3VycmVudCBzZXNzaW9uLiAgT25seSBtZWFuaW5nZnVsIHdoZW4KKwlgR0lUX1BVU0hfQ0VSVF9OT05DRV9TVEFUVVNgIHNheXMgYFNMT1BgLgorCUFsc28gcmVhZCBhYm91dCBgcmVjZWl2ZS5jZXJ0Tm9uY2VTbG9wYCB2YXJpYWJsZSBpbgorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworVGhpcyBob29rIGlzIGNhbGxlZCBiZWZvcmUgYW55IHJlZm5hbWUgaXMgdXBkYXRlZCBhbmQgYmVmb3JlIGFueQorZmFzdC1mb3J3YXJkIGNoZWNrcyBhcmUgcGVyZm9ybWVkLgorCitJZiB0aGUgcHJlLXJlY2VpdmUgaG9vayBleGl0cyB3aXRoIGEgbm9uLXplcm8gZXhpdCBzdGF0dXMgbm8gdXBkYXRlcword2lsbCBiZSBwZXJmb3JtZWQsIGFuZCB0aGUgdXBkYXRlLCBwb3N0LXJlY2VpdmUgYW5kIHBvc3QtdXBkYXRlCitob29rcyB3aWxsIG5vdCBiZSBpbnZva2VkIGVpdGhlci4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBxdWlja2x5CitiYWlsIG91dCBpZiB0aGUgdXBkYXRlIGlzIG5vdCB0byBiZSBzdXBwb3J0ZWQuCisKK3VwZGF0ZSBIb29rCistLS0tLS0tLS0tLQorQmVmb3JlIGVhY2ggcmVmIGlzIHVwZGF0ZWQsIGlmICRHSVRfRElSL2hvb2tzL3VwZGF0ZSBmaWxlIGV4aXN0cworYW5kIGlzIGV4ZWN1dGFibGUsIGl0IGlzIGludm9rZWQgb25jZSBwZXIgcmVmLCB3aXRoIHRocmVlIHBhcmFtZXRlcnM6CisKKyAgICAgICAkR0lUX0RJUi9ob29rcy91cGRhdGUgcmVmbmFtZSBzaGExLW9sZCBzaGExLW5ldworCitUaGUgcmVmbmFtZSBwYXJhbWV0ZXIgaXMgcmVsYXRpdmUgdG8gJEdJVF9ESVI7IGUuZy4gZm9yIHRoZSBtYXN0ZXIKK2hlYWQgdGhpcyBpcyAicmVmcy9oZWFkcy9tYXN0ZXIiLiAgVGhlIHR3byBzaGExIGFyZ3VtZW50cyBhcmUKK3RoZSBvYmplY3QgbmFtZXMgZm9yIHRoZSByZWZuYW1lIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHVwZGF0ZS4KK05vdGUgdGhhdCB0aGUgaG9vayBpcyBjYWxsZWQgYmVmb3JlIHRoZSByZWZuYW1lIGlzIHVwZGF0ZWQsCitzbyBlaXRoZXIgc2hhMS1vbGQgaXMgMFx7NDB9IChtZWFuaW5nIHRoZXJlIGlzIG5vIHN1Y2ggcmVmIHlldCksCitvciBpdCBzaG91bGQgbWF0Y2ggd2hhdCBpcyByZWNvcmRlZCBpbiByZWZuYW1lLgorCitUaGUgaG9vayBzaG91bGQgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBpZiBpdCB3YW50cyB0byBkaXNhbGxvdwordXBkYXRpbmcgdGhlIG5hbWVkIHJlZi4gIE90aGVyd2lzZSBpdCBzaG91bGQgZXhpdCB3aXRoIHplcm8uCisKK1N1Y2Nlc3NmdWwgZXhlY3V0aW9uIChhIHplcm8gZXhpdCBzdGF0dXMpIG9mIHRoaXMgaG9vayBkb2VzIG5vdAorZW5zdXJlIHRoZSByZWYgd2lsbCBhY3R1YWxseSBiZSB1cGRhdGVkLCBpdCBpcyBvbmx5IGEgcHJlcmVxdWlzaXRlLgorQXMgc3VjaCBpdCBpcyBub3QgYSBnb29kIGlkZWEgdG8gc2VuZCBub3RpY2VzIChlLmcuIGVtYWlsKSBmcm9tCit0aGlzIGhvb2suICBDb25zaWRlciB1c2luZyB0aGUgcG9zdC1yZWNlaXZlIGhvb2sgaW5zdGVhZC4KKworcG9zdC1yZWNlaXZlIEhvb2sKKy0tLS0tLS0tLS0tLS0tLS0tCitBZnRlciBhbGwgcmVmcyB3ZXJlIHVwZGF0ZWQgKG9yIGF0dGVtcHRlZCB0byBiZSB1cGRhdGVkKSwgaWYgYW55CityZWYgdXBkYXRlIHdhcyBzdWNjZXNzZnVsLCBhbmQgaWYgJEdJVF9ESVIvaG9va3MvcG9zdC1yZWNlaXZlCitmaWxlIGV4aXN0cyBhbmQgaXMgZXhlY3V0YWJsZSwgaXQgd2lsbCBiZSBpbnZva2VkIG9uY2Ugd2l0aCBubworcGFyYW1ldGVycy4gIFRoZSBzdGFuZGFyZCBpbnB1dCBvZiB0aGUgaG9vayB3aWxsIGJlIG9uZSBsaW5lCitmb3IgZWFjaCBzdWNjZXNzZnVsbHkgdXBkYXRlZCByZWY6CisKKyAgICAgICBzaGExLW9sZCBTUCBzaGExLW5ldyBTUCByZWZuYW1lIExGCisKK1RoZSByZWZuYW1lIHZhbHVlIGlzIHJlbGF0aXZlIHRvICRHSVRfRElSOyBlLmcuIGZvciB0aGUgbWFzdGVyCitoZWFkIHRoaXMgaXMgInJlZnMvaGVhZHMvbWFzdGVyIi4gIFRoZSB0d28gc2hhMSB2YWx1ZXMgYmVmb3JlCitlYWNoIHJlZm5hbWUgYXJlIHRoZSBvYmplY3QgbmFtZXMgZm9yIHRoZSByZWZuYW1lIGJlZm9yZSBhbmQgYWZ0ZXIKK3RoZSB1cGRhdGUuICBSZWZzIHRoYXQgd2VyZSBjcmVhdGVkIHdpbGwgaGF2ZSBzaGExLW9sZCBlcXVhbCB0bworMFx7NDB9LCB3aGlsZSByZWZzIHRoYXQgd2VyZSBkZWxldGVkIHdpbGwgaGF2ZSBzaGExLW5ldyBlcXVhbCB0bworMFx7NDB9LCBvdGhlcndpc2Ugc2hhMS1vbGQgYW5kIHNoYTEtbmV3IHNob3VsZCBiZSB2YWxpZCBvYmplY3RzIGluCit0aGUgcmVwb3NpdG9yeS4KKworVGhlIGBHSVRfUFVTSF9DRVJUKmAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGNhbiBiZSBpbnNwZWN0ZWQsIGp1c3QgYXMKK2luIGBwcmUtcmVjZWl2ZWAgaG9vaywgYWZ0ZXIgYWNjZXB0aW5nIGEgc2lnbmVkIHB1c2guCisKK1VzaW5nIHRoaXMgaG9vaywgaXQgaXMgZWFzeSB0byBnZW5lcmF0ZSBtYWlscyBkZXNjcmliaW5nIHRoZSB1cGRhdGVzCit0byB0aGUgcmVwb3NpdG9yeS4gIFRoaXMgZXhhbXBsZSBzY3JpcHQgc2VuZHMgb25lIG1haWwgbWVzc2FnZSBwZXIKK3JlZiBsaXN0aW5nIHRoZSBjb21taXRzIHB1c2hlZCB0byB0aGUgcmVwb3NpdG9yeSwgYW5kIGxvZ3MgdGhlIHB1c2gKK2NlcnRpZmljYXRlcyBvZiBzaWduZWQgcHVzaGVzIHdpdGggZ29vZCBzaWduYXR1cmVzIHRvIGEgbG9nZ2VyCitzZXJ2aWNlOgorCisJIyEvYmluL3NoCisJIyBtYWlsIG91dCBjb21taXQgdXBkYXRlIGluZm9ybWF0aW9uLgorCXdoaWxlIHJlYWQgb3ZhbCBudmFsIHJlZgorCWRvCisJCWlmIGV4cHIgIiRvdmFsIiA6ICcwKiQnID4vZGV2L251bGwKKwkJdGhlbgorCQkJZWNobyAiQ3JlYXRlZCBhIG5ldyByZWYsIHdpdGggdGhlIGZvbGxvd2luZyBjb21taXRzOiIKKwkJCWdpdCByZXYtbGlzdCAtLXByZXR0eSAiJG52YWwiCisJCWVsc2UKKwkJCWVjaG8gIk5ldyBjb21taXRzOiIKKwkJCWdpdCByZXYtbGlzdCAtLXByZXR0eSAiJG52YWwiICJeJG92YWwiCisJCWZpIHwKKwkJbWFpbCAtcyAiQ2hhbmdlcyB0byByZWYgJHJlZiIgY29tbWl0LWxpc3RAbXlkb21haW4KKwlkb25lCisJIyBsb2cgc2lnbmVkIHB1c2ggY2VydGlmaWNhdGUsIGlmIGFueQorCWlmIHRlc3QgLW4gIiR7R0lUX1BVU0hfQ0VSVC19IiAmJiB0ZXN0ICR7R0lUX1BVU0hfQ0VSVF9TVEFUVVN9ID0gRworCXRoZW4KKwkJKAorCQkJZWNobyBleHBlY3RlZCBub25jZSBpcyAke0dJVF9QVVNIX05PTkNFfQorCQkJZ2l0IGNhdC1maWxlIGJsb2IgJHtHSVRfUFVTSF9DRVJUfQorCQkpIHwgbWFpbCAtcyAicHVzaCBjZXJ0aWZpY2F0ZSBmcm9tICRHSVRfUFVTSF9DRVJUX1NJR05FUiIgcHVzaC1sb2dAbXlkb21haW4KKwlmaQorCWV4aXQgMAorCitUaGUgZXhpdCBjb2RlIGZyb20gdGhpcyBob29rIGludm9jYXRpb24gaXMgaWdub3JlZCwgaG93ZXZlciBhCitub24temVybyBleGl0IGNvZGUgd2lsbCBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlLgorCitOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIHJlZm5hbWUgdG8gbm90IGhhdmUgc2hhMS1uZXcgd2hlbiB0aGlzCitob29rIHJ1bnMuICBUaGlzIGNhbiBlYXNpbHkgb2NjdXIgaWYgYW5vdGhlciB1c2VyIG1vZGlmaWVzIHRoZSByZWYKK2FmdGVyIGl0IHdhcyB1cGRhdGVkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJywgYnV0IGJlZm9yZSB0aGUgaG9vayB3YXMgYWJsZQordG8gZXZhbHVhdGUgaXQuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGhvb2tzIHJlbHkgb24gc2hhMS1uZXcKK3JhdGhlciB0aGFuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHJlZm5hbWUuCisKK3Bvc3QtdXBkYXRlIEhvb2sKKy0tLS0tLS0tLS0tLS0tLS0KK0FmdGVyIGFsbCBvdGhlciBwcm9jZXNzaW5nLCBpZiBhdCBsZWFzdCBvbmUgcmVmIHdhcyB1cGRhdGVkLCBhbmQKK2lmICRHSVRfRElSL2hvb2tzL3Bvc3QtdXBkYXRlIGZpbGUgZXhpc3RzIGFuZCBpcyBleGVjdXRhYmxlLCB0aGVuCitwb3N0LXVwZGF0ZSB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsaXN0IG9mIHJlZnMgdGhhdCBoYXZlIGJlZW4gdXBkYXRlZC4KK1RoaXMgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGFueSByZXBvc2l0b3J5IHdpZGUgY2xlYW51cCB0YXNrcy4KKworVGhlIGV4aXQgY29kZSBmcm9tIHRoaXMgaG9vayBpbnZvY2F0aW9uIGlzIGlnbm9yZWQ7IHRoZSBvbmx5IHRoaW5nCitsZWZ0IGZvciAnZ2l0LXJlY2VpdmUtcGFjaycgdG8gZG8gYXQgdGhhdCBwb2ludCBpcyB0byBleGl0IGl0c2VsZgorYW55d2F5LgorCitUaGlzIGhvb2sgY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBydW4gYGdpdCB1cGRhdGUtc2VydmVyLWluZm9gCitpZiB0aGUgcmVwb3NpdG9yeSBpcyBwYWNrZWQgYW5kIGlzIHNlcnZlZCB2aWEgYSBkdW1iIHRyYW5zcG9ydC4KKworCSMhL2Jpbi9zaAorCWV4ZWMgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbworCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtc2VuZC1wYWNrWzFdLCBsaW5rZ2l0OmdpdG5hbWVzcGFjZXNbN10KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWZsb2cudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVmbG9nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM3MzZmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVmbG9nLnR4dApAQCAtMCwwICsxLDEzMyBAQAorZ2l0LXJlZmxvZygxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVmbG9nIC0gTWFuYWdlIHJlZmxvZyBpbmZvcm1hdGlvbgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZWZsb2cnIDxzdWJjb21tYW5kPiA8b3B0aW9ucz4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitUaGUgY29tbWFuZCB0YWtlcyB2YXJpb3VzIHN1YmNvbW1hbmRzLCBhbmQgZGlmZmVyZW50IG9wdGlvbnMKK2RlcGVuZGluZyBvbiB0aGUgc3ViY29tbWFuZDoKKworW3ZlcnNlXQorJ2dpdCByZWZsb2cnIFsnc2hvdyddIFtsb2ctb3B0aW9uc10gWzxyZWY+XQorJ2dpdCByZWZsb2cgZXhwaXJlJyBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XQorCVstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tc3RhbGUtZml4XQorCVstLWRyeS1ydW5dIFstLXZlcmJvc2VdIFstLWFsbCB8IDxyZWZzPi4uLl0KKydnaXQgcmVmbG9nIGRlbGV0ZScgWy0tcmV3cml0ZV0gWy0tdXBkYXRlcmVmXQorCVstLWRyeS1ydW5dIFstLXZlcmJvc2VdIHJlZkBce3NwZWNpZmllclx9Li4uCisnZ2l0IHJlZmxvZyBleGlzdHMnIDxyZWY+CisKK1JlZmVyZW5jZSBsb2dzLCBvciAicmVmbG9ncyIsIHJlY29yZCB3aGVuIHRoZSB0aXBzIG9mIGJyYW5jaGVzIGFuZAorb3RoZXIgcmVmZXJlbmNlcyB3ZXJlIHVwZGF0ZWQgaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkuIFJlZmxvZ3MgYXJlCit1c2VmdWwgaW4gdmFyaW91cyBHaXQgY29tbWFuZHMsIHRvIHNwZWNpZnkgdGhlIG9sZCB2YWx1ZSBvZiBhCityZWZlcmVuY2UuIEZvciBleGFtcGxlLCBgSEVBREB7Mn1gIG1lYW5zICJ3aGVyZSBIRUFEIHVzZWQgdG8gYmUgdHdvCittb3ZlcyBhZ28iLCBgbWFzdGVyQHtvbmUud2Vlay5hZ299YCBtZWFucyAid2hlcmUgbWFzdGVyIHVzZWQgdG8gcG9pbnQKK3RvIG9uZSB3ZWVrIGFnbyBpbiB0aGlzIGxvY2FsIHJlcG9zaXRvcnkiLCBhbmQgc28gb24uIFNlZQorbGlua2dpdDpnaXRyZXZpc2lvbnNbN10gZm9yIG1vcmUgZGV0YWlscy4KKworVGhpcyBjb21tYW5kIG1hbmFnZXMgdGhlIGluZm9ybWF0aW9uIHJlY29yZGVkIGluIHRoZSByZWZsb2dzLgorCitUaGUgInNob3ciIHN1YmNvbW1hbmQgKHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQsIGluIHRoZSBhYnNlbmNlIG9mCithbnkgc3ViY29tbWFuZHMpIHNob3dzIHRoZSBsb2cgb2YgdGhlIHJlZmVyZW5jZSBwcm92aWRlZCBpbiB0aGUKK2NvbW1hbmQtbGluZSAob3IgYEhFQURgLCBieSBkZWZhdWx0KS4gVGhlIHJlZmxvZyBjb3ZlcnMgYWxsIHJlY2VudAorYWN0aW9ucywgYW5kIGluIGFkZGl0aW9uIHRoZSBgSEVBRGAgcmVmbG9nIHJlY29yZHMgYnJhbmNoIHN3aXRjaGluZy4KK2BnaXQgcmVmbG9nIHNob3dgIGlzIGFuIGFsaWFzIGZvciBgZ2l0IGxvZyAtZyAtLWFiYnJldi1jb21taXQKKy0tcHJldHR5PW9uZWxpbmVgOyBzZWUgbGlua2dpdDpnaXQtbG9nWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitUaGUgImV4cGlyZSIgc3ViY29tbWFuZCBwcnVuZXMgb2xkZXIgcmVmbG9nIGVudHJpZXMuIEVudHJpZXMgb2xkZXIKK3RoYW4gYGV4cGlyZWAgdGltZSwgb3IgZW50cmllcyBvbGRlciB0aGFuIGBleHBpcmUtdW5yZWFjaGFibGVgIHRpbWUKK2FuZCBub3QgcmVhY2hhYmxlIGZyb20gdGhlIGN1cnJlbnQgdGlwLCBhcmUgcmVtb3ZlZCBmcm9tIHRoZSByZWZsb2cuCitUaGlzIGlzIHR5cGljYWxseSBub3QgdXNlZCBkaXJlY3RseSBieSBlbmQgdXNlcnMgLS0gaW5zdGVhZCwgc2VlCitsaW5rZ2l0OmdpdC1nY1sxXS4KKworVGhlICJkZWxldGUiIHN1YmNvbW1hbmQgZGVsZXRlcyBzaW5nbGUgZW50cmllcyBmcm9tIHRoZSByZWZsb2cuIEl0cworYXJndW1lbnQgbXVzdCBiZSBhbiBfZXhhY3RfIGVudHJ5IChlLmcuICJgZ2l0IHJlZmxvZyBkZWxldGUKK21hc3RlckB7Mn1gIikuIFRoaXMgc3ViY29tbWFuZCBpcyBhbHNvIHR5cGljYWxseSBub3QgdXNlZCBkaXJlY3RseSBieQorZW5kIHVzZXJzLgorCitUaGUgImV4aXN0cyIgc3ViY29tbWFuZCBjaGVja3Mgd2hldGhlciBhIHJlZiBoYXMgYSByZWZsb2cuICBJdCBleGl0cword2l0aCB6ZXJvIHN0YXR1cyBpZiB0aGUgcmVmbG9nIGV4aXN0cywgYW5kIG5vbi16ZXJvIHN0YXR1cyBpZiBpdCBkb2VzCitub3QuCisKK09QVElPTlMKKy0tLS0tLS0KKworT3B0aW9ucyBmb3IgYHNob3dgCit+fn5+fn5+fn5+fn5+fn5+fn4KKworYGdpdCByZWZsb2cgc2hvd2AgYWNjZXB0cyBhbnkgb2YgdGhlIG9wdGlvbnMgYWNjZXB0ZWQgYnkgYGdpdCBsb2dgLgorCisKK09wdGlvbnMgZm9yIGBleHBpcmVgCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCistLWFsbDo6CisJUHJvY2VzcyB0aGUgcmVmbG9ncyBvZiBhbGwgcmVmZXJlbmNlcy4KKworLS1leHBpcmU9PHRpbWU+OjoKKwlQcnVuZSBlbnRyaWVzIG9sZGVyIHRoYW4gdGhlIHNwZWNpZmllZCB0aW1lLiBJZiB0aGlzIG9wdGlvbiBpcworCW5vdCBzcGVjaWZpZWQsIHRoZSBleHBpcmF0aW9uIHRpbWUgaXMgdGFrZW4gZnJvbSB0aGUKKwljb25maWd1cmF0aW9uIHNldHRpbmcgYGdjLnJlZmxvZ0V4cGlyZWAsIHdoaWNoIGluIHR1cm4KKwlkZWZhdWx0cyB0byA5MCBkYXlzLiBgLS1leHBpcmU9YWxsYCBwcnVuZXMgZW50cmllcyByZWdhcmRsZXNzCisJb2YgdGhlaXIgYWdlOyBgLS1leHBpcmU9bmV2ZXJgIHR1cm5zIG9mZiBwcnVuaW5nIG9mIHJlYWNoYWJsZQorCWVudHJpZXMgKGJ1dCBzZWUgYC0tZXhwaXJlLXVucmVhY2hhYmxlYCkuCisKKy0tZXhwaXJlLXVucmVhY2hhYmxlPTx0aW1lPjo6CisJUHJ1bmUgZW50cmllcyBvbGRlciB0aGFuIGA8dGltZT5gIHRoYXQgYXJlIG5vdCByZWFjaGFibGUgZnJvbQorCXRoZSBjdXJyZW50IHRpcCBvZiB0aGUgYnJhbmNoLiBJZiB0aGlzIG9wdGlvbiBpcyBub3QKKwlzcGVjaWZpZWQsIHRoZSBleHBpcmF0aW9uIHRpbWUgaXMgdGFrZW4gZnJvbSB0aGUgY29uZmlndXJhdGlvbgorCXNldHRpbmcgYGdjLnJlZmxvZ0V4cGlyZVVucmVhY2hhYmxlYCwgd2hpY2ggaW4gdHVybiBkZWZhdWx0cworCXRvIDMwIGRheXMuIGAtLWV4cGlyZS11bnJlYWNoYWJsZT1hbGxgIHBydW5lcyB1bnJlYWNoYWJsZQorCWVudHJpZXMgcmVnYXJkbGVzcyBvZiB0aGVpciBhZ2U7IGAtLWV4cGlyZS11bnJlYWNoYWJsZT1uZXZlcmAKKwl0dXJucyBvZmYgZWFybHkgcHJ1bmluZyBvZiB1bnJlYWNoYWJsZSBlbnRyaWVzIChidXQgc2VlCisJYC0tZXhwaXJlYCkuCisKKy0tdXBkYXRlcmVmOjoKKwlVcGRhdGUgdGhlIHJlZmVyZW5jZSB0byB0aGUgdmFsdWUgb2YgdGhlIHRvcCByZWZsb2cgZW50cnkgKGkuZS4KKwk8cmVmPkBcezBcfSkgaWYgdGhlIHByZXZpb3VzIHRvcCBlbnRyeSB3YXMgcHJ1bmVkLiAgKFRoaXMKKwlvcHRpb24gaXMgaWdub3JlZCBmb3Igc3ltYm9saWMgcmVmZXJlbmNlcy4pCisKKy0tcmV3cml0ZTo6CisJSWYgYSByZWZsb2cgZW50cnkncyBwcmVkZWNlc3NvciBpcyBwcnVuZWQsIGFkanVzdCBpdHMgIm9sZCIKKwlTSEEtMSB0byBiZSBlcXVhbCB0byB0aGUgIm5ldyIgU0hBLTEgZmllbGQgb2YgdGhlIGVudHJ5IHRoYXQKKwlub3cgcHJlY2VkZXMgaXQuCisKKy0tc3RhbGUtZml4OjoKKwlQcnVuZSBhbnkgcmVmbG9nIGVudHJpZXMgdGhhdCBwb2ludCB0byAiYnJva2VuIGNvbW1pdHMiLiBBCisJYnJva2VuIGNvbW1pdCBpcyBhIGNvbW1pdCB0aGF0IGlzIG5vdCByZWFjaGFibGUgZnJvbSBhbnkgb2YKKwl0aGUgcmVmZXJlbmNlIHRpcHMgYW5kIHRoYXQgcmVmZXJzLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0bworCWEgbWlzc2luZyBjb21taXQsIHRyZWUsIG9yIGJsb2Igb2JqZWN0LgorKworVGhpcyBjb21wdXRhdGlvbiBpbnZvbHZlcyB0cmF2ZXJzaW5nIGFsbCB0aGUgcmVhY2hhYmxlIG9iamVjdHMsIGkuZS4gaXQKK2hhcyB0aGUgc2FtZSBjb3N0IGFzICdnaXQgcHJ1bmUnLiAgSXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIGZpeAorY29ycnVwdGlvbiBjYXVzZWQgYnkgZ2FyYmFnZSBjb2xsZWN0aW5nIHVzaW5nIG9sZGVyIHZlcnNpb25zIG9mIEdpdCwKK3doaWNoIGRpZG4ndCBwcm90ZWN0IG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgcmVmbG9ncy4KKworLW46OgorLS1kcnktcnVuOjoKKwlEbyBub3QgYWN0dWFsbHkgcHJ1bmUgYW55IGVudHJpZXM7IGp1c3Qgc2hvdyB3aGF0IHdvdWxkIGhhdmUKKwliZWVuIHBydW5lZC4KKworLS12ZXJib3NlOjoKKwlQcmludCBleHRyYSBpbmZvcm1hdGlvbiBvbiBzY3JlZW4uCisKKworT3B0aW9ucyBmb3IgYGRlbGV0ZWAKK35+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2BnaXQgcmVmbG9nIGRlbGV0ZWAgYWNjZXB0cyBvcHRpb25zIGAtLXVwZGF0ZXJlZmAsIGAtLXJld3JpdGVgLCBgLW5gLAorYC0tZHJ5LXJ1bmAsIGFuZCBgLS12ZXJib3NlYCwgd2l0aCB0aGUgc2FtZSBtZWFuaW5ncyBhcyB3aGVuIHRoZXkgYXJlCit1c2VkIHdpdGggYGV4cGlyZWAuCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZWxpbmsudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVsaW5rLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjMzYzk5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVsaW5rLnR4dApAQCAtMCwwICsxLDMwIEBACitnaXQtcmVsaW5rKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZWxpbmsgLSBIYXJkbGluayBjb21tb24gb2JqZWN0cyBpbiBsb2NhbCByZXBvc2l0b3JpZXMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlbGluaycgWy0tc2FmZV0gPGRpcj4uLi4gPG1hc3Rlcl9kaXI+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyB3aWxsIHNjYW4gMSBvciBtb3JlIG9iamVjdCByZXBvc2l0b3JpZXMgYW5kIGxvb2sgZm9yIG9iamVjdHMgaW4gY29tbW9uCit3aXRoIGEgbWFzdGVyIHJlcG9zaXRvcnkuIE9iamVjdHMgbm90IGFscmVhZHkgaGFyZGxpbmtlZCB0byB0aGUgbWFzdGVyCityZXBvc2l0b3J5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIGhhcmRsaW5rIHRvIHRoZSBtYXN0ZXIgcmVwb3NpdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorLS1zYWZlOjoKKwlTdG9wcyBpZiB0d28gb2JqZWN0cyB3aXRoIHRoZSBzYW1lIGhhc2ggZXhpc3QgYnV0IGhhdmUgZGlmZmVyZW50IHNpemVzLgorCURlZmF1bHQgaXMgdG8gd2FybiBhbmQgY29udGludWUuCisKKzxkaXI+OjoKKwlEaXJlY3RvcmllcyBjb250YWluaW5nIGEgLmdpdC9vYmplY3RzLyBzdWJkaXJlY3RvcnkuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLWV4dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZXh0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjVkMGI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLWV4dC50eHQKQEAgLTAsMCArMSwxMjUgQEAKK2dpdC1yZW1vdGUtZXh0KDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVtb3RlLWV4dCAtIEJyaWRnZSBzbWFydCB0cmFuc3BvcnQgdG8gZXh0ZXJuYWwgY29tbWFuZC4KKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitnaXQgcmVtb3RlIGFkZCA8bmljaz4gImV4dDo6PGNvbW1hbmQ+WyA8YXJndW1lbnRzPi4uLl0iCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyByZW1vdGUgaGVscGVyIHVzZXMgdGhlIHNwZWNpZmllZCAnPGNvbW1hbmQ+JyB0byBjb25uZWN0Cit0byBhIHJlbW90ZSBHaXQgc2VydmVyLgorCitEYXRhIHdyaXR0ZW4gdG8gc3RkaW4gb2YgdGhlIHNwZWNpZmllZCAnPGNvbW1hbmQ+JyBpcyBhc3N1bWVkCit0byBiZSBzZW50IHRvIGEgZ2l0Oi8vIHNlcnZlciwgZ2l0LXVwbG9hZC1wYWNrLCBnaXQtcmVjZWl2ZS1wYWNrCitvciBnaXQtdXBsb2FkLWFyY2hpdmUgKGRlcGVuZGluZyBvbiBzaXR1YXRpb24pLCBhbmQgZGF0YSByZWFkCitmcm9tIHN0ZG91dCBvZiA8Y29tbWFuZD4gaXMgYXNzdW1lZCB0byBiZSByZWNlaXZlZCBmcm9tCit0aGUgc2FtZSBzZXJ2aWNlLgorCitDb21tYW5kIGFuZCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBhbiB1bmVzY2FwZWQgc3BhY2UuCisKK1RoZSBmb2xsb3dpbmcgc2VxdWVuY2VzIGhhdmUgYSBzcGVjaWFsIG1lYW5pbmc6CisKKyclICc6OgorCUxpdGVyYWwgc3BhY2UgaW4gY29tbWFuZCBvciBhcmd1bWVudC4KKworJyUlJzo6CisJTGl0ZXJhbCBwZXJjZW50IHNpZ24uCisKKyclcyc6OgorCVJlcGxhY2VkIHdpdGggbmFtZSAocmVjZWl2ZS1wYWNrLCB1cGxvYWQtcGFjaywgb3IKKwl1cGxvYWQtYXJjaGl2ZSkgb2YgdGhlIHNlcnZpY2UgR2l0IHdhbnRzIHRvIGludm9rZS4KKworJyVTJzo6CisJUmVwbGFjZWQgd2l0aCBsb25nIG5hbWUgKGdpdC1yZWNlaXZlLXBhY2ssCisJZ2l0LXVwbG9hZC1wYWNrLCBvciBnaXQtdXBsb2FkLWFyY2hpdmUpIG9mIHRoZSBzZXJ2aWNlCisJR2l0IHdhbnRzIHRvIGludm9rZS4KKworJyVHJyAobXVzdCBiZSB0aGUgZmlyc3QgY2hhcmFjdGVycyBpbiBhbiBhcmd1bWVudCk6OgorCVRoaXMgYXJndW1lbnQgd2lsbCBub3QgYmUgcGFzc2VkIHRvICc8Y29tbWFuZD4nLiBJbnN0ZWFkLCBpdAorCXdpbGwgY2F1c2UgdGhlIGhlbHBlciB0byBzdGFydCBieSBzZW5kaW5nIGdpdDovLyBzZXJ2aWNlIHJlcXVlc3RzIHRvCisJdGhlIHJlbW90ZSBzaWRlIHdpdGggdGhlIHNlcnZpY2UgZmllbGQgc2V0IHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGFuZAorCXRoZSByZXBvc2l0b3J5IGZpZWxkIHNldCB0byByZXN0IG9mIHRoZSBhcmd1bWVudC4gRGVmYXVsdCBpcyBub3QgdG8gc2VuZAorCXN1Y2ggYSByZXF1ZXN0LgorKworVGhpcyBpcyB1c2VmdWwgaWYgcmVtb3RlIHNpZGUgaXMgZ2l0Oi8vIHNlcnZlciBhY2Nlc3NlZCBvdmVyCitzb21lIHR1bm5lbC4KKworJyVWJyAobXVzdCBiZSBmaXJzdCBjaGFyYWN0ZXJzIGluIGFyZ3VtZW50KTo6CisJVGhpcyBhcmd1bWVudCB3aWxsIG5vdCBiZSBwYXNzZWQgdG8gJzxjb21tYW5kPicuIEluc3RlYWQgaXQgc2V0cworCXRoZSB2aG9zdCBmaWVsZCBpbiB0aGUgZ2l0Oi8vIHNlcnZpY2UgcmVxdWVzdCAodG8gcmVzdCBvZiB0aGUgYXJndW1lbnQpLgorCURlZmF1bHQgaXMgbm90IHRvIHNlbmQgdmhvc3QgaW4gc3VjaCByZXF1ZXN0IChpZiBzZW50KS4KKworRU5WSVJPTk1FTlQgVkFSSUFCTEVTOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHSVRfVFJBTlNMT09QX0RFQlVHOjoKKwlJZiBzZXQsIHByaW50cyBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdmFyaW91cyByZWFkcy93cml0ZXMuCisKK0VOVklST05NRU5UIFZBUklBQkxFUyBQQVNTRUQgVE8gQ09NTUFORDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR0lUX0VYVF9TRVJWSUNFOjoKKwlTZXQgdG8gbG9uZyBuYW1lIChnaXQtdXBsb2FkLXBhY2ssIGV0Yy4uLikgb2Ygc2VydmljZSBoZWxwZXIgbmVlZHMKKwl0byBpbnZva2UuCisKK0dJVF9FWFRfU0VSVklDRV9OT1BSRUZJWDo6CisJU2V0IHRvIGxvbmcgbmFtZSAodXBsb2FkLXBhY2ssIGV0Yy4uLikgb2Ygc2VydmljZSBoZWxwZXIgbmVlZHMKKwl0byBpbnZva2UuCisKKworRVhBTVBMRVM6CistLS0tLS0tLS0KK1RoaXMgcmVtb3RlIGhlbHBlciBpcyB0cmFuc3BhcmVudGx5IHVzZWQgYnkgR2l0IHdoZW4KK3lvdSB1c2UgY29tbWFuZHMgc3VjaCBhcyAiZ2l0IGZldGNoIDxVUkw+IiwgImdpdCBjbG9uZSA8VVJMPiIsCissICJnaXQgcHVzaCA8VVJMPiIgb3IgImdpdCByZW1vdGUgYWRkIDxuaWNrPiA8VVJMPiIsIHdoZXJlIDxVUkw+CitiZWdpbnMgd2l0aCBgZXh0OjpgLiAgRXhhbXBsZXM6CisKKyJleHQ6OnNzaCAtaSAvaG9tZS9mb28vLnNzaC9zb21la2V5IHVzZXImIzY0O2hvc3QuZXhhbXBsZSAlUyAnZm9vL3JlcG8nIjo6CisJTGlrZSBob3N0LmV4YW1wbGU6Zm9vL3JlcG8sIGJ1dCB1c2UgL2hvbWUvZm9vLy5zc2gvc29tZWtleSBhcworCWtleXBhaXIgYW5kIHVzZXIgYXMgdXNlciBvbiByZW1vdGUgc2lkZS4gVGhpcyBhdm9pZHMgbmVlZGluZyB0bworCWVkaXQgLnNzaC9jb25maWcuCisKKyJleHQ6OnNvY2F0IC10MzYwMCAtIEFCU1RSQUNULUNPTk5FQ1Q6L2dpdC1zZXJ2ZXIgJUcvc29tZXJlcG8iOjoKKwlSZXByZXNlbnRzIHJlcG9zaXRvcnkgd2l0aCBwYXRoIC9zb21lcmVwbyBhY2Nlc3NpYmxlIG92ZXIKKwlnaXQgcHJvdG9jb2wgYXQgYWJzdHJhY3QgbmFtZXNwYWNlIGFkZHJlc3MgL2dpdC1zZXJ2ZXIuCisKKyJleHQ6OmdpdC1zZXJ2ZXItYWxpYXMgZm9vICVHL3JlcG8iOjoKKwlSZXByZXNlbnRzIGEgcmVwb3NpdG9yeSB3aXRoIHBhdGggL3JlcG8gYWNjZXNzZWQgdXNpbmcgdGhlCisJaGVscGVyIHByb2dyYW0gImdpdC1zZXJ2ZXItYWxpYXMgZm9vIi4gIFRoZSBwYXRoIHRvIHRoZQorCXJlcG9zaXRvcnkgYW5kIHR5cGUgb2YgcmVxdWVzdCBhcmUgbm90IHBhc3NlZCBvbiB0aGUgY29tbWFuZAorCWxpbmUgYnV0IGFzIHBhcnQgb2YgdGhlIHByb3RvY29sIHN0cmVhbSwgYXMgdXN1YWwgd2l0aCBnaXQ6Ly8KKwlwcm90b2NvbC4KKworImV4dDo6Z2l0LXNlcnZlci1hbGlhcyBmb28gJUcvcmVwbyAlVmZvbyI6OgorCVJlcHJlc2VudHMgYSByZXBvc2l0b3J5IHdpdGggcGF0aCAvcmVwbyBhY2Nlc3NlZCB1c2luZyB0aGUKKwloZWxwZXIgcHJvZ3JhbSAiZ2l0LXNlcnZlci1hbGlhcyBmb28iLiAgVGhlIGhvc3RuYW1lIGZvciB0aGUKKwlyZW1vdGUgc2VydmVyIHBhc3NlZCBpbiB0aGUgcHJvdG9jb2wgc3RyZWFtIHdpbGwgYmUgImZvbyIKKwkodGhpcyBhbGxvd3MgbXVsdGlwbGUgdmlydHVhbCBHaXQgc2VydmVycyB0byBzaGFyZSBhCisJbGluay1sZXZlbCBhZGRyZXNzKS4KKworImV4dDo6Z2l0LXNlcnZlci1hbGlhcyBmb28gJUcvcmVwbyUgd2l0aCUgc3BhY2VzICVWZm9vIjo6CisJUmVwcmVzZW50cyBhIHJlcG9zaXRvcnkgd2l0aCBwYXRoICcvcmVwbyB3aXRoIHNwYWNlcycgYWNjZXNzZWQKKwl1c2luZyB0aGUgaGVscGVyIHByb2dyYW0gImdpdC1zZXJ2ZXItYWxpYXMgZm9vIi4gIFRoZSBob3N0bmFtZSBmb3IKKwl0aGUgcmVtb3RlIHNlcnZlciBwYXNzZWQgaW4gdGhlIHByb3RvY29sIHN0cmVhbSB3aWxsIGJlICJmb28iCisJKHRoaXMgYWxsb3dzIG11bHRpcGxlIHZpcnR1YWwgR2l0IHNlcnZlcnMgdG8gc2hhcmUgYQorCWxpbmstbGV2ZWwgYWRkcmVzcykuCisKKyJleHQ6OmdpdC1zc2wgZm9vLmV4YW1wbGUgL2JhciI6OgorCVJlcHJlc2VudHMgYSByZXBvc2l0b3J5IGFjY2Vzc2VkIHVzaW5nIHRoZSBoZWxwZXIgcHJvZ3JhbQorCSJnaXQtc3NsIGZvby5leGFtcGxlIC9iYXIiLiAgVGhlIHR5cGUgb2YgcmVxdWVzdCBjYW4gYmUKKwlkZXRlcm1pbmVkIGJ5IHRoZSBoZWxwZXIgdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIChzZWUKKwlhYm92ZSkuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRyZW1vdGUtaGVscGVyc1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1mZC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDBiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUtZmQudHh0CkBAIC0wLDAgKzEsNTkgQEAKK2dpdC1yZW1vdGUtZmQoMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlbW90ZS1mZCAtIFJlZmxlY3Qgc21hcnQgdHJhbnNwb3J0IHN0cmVhbSBiYWNrIHRvIGNhbGxlcgorCitTWU5PUFNJUworLS0tLS0tLS0KKyJmZDo6PGluZmQ+Wyw8b3V0ZmQ+XVsvPGFueXRoaW5nPl0iIChhcyBVUkwpCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorVGhpcyBoZWxwZXIgdXNlcyBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9ycyB0byBjb25uZWN0IHRvIGEgcmVtb3RlIEdpdCBzZXJ2ZXIuCitUaGlzIGlzIG5vdCBtZWFudCBmb3IgZW5kIHVzZXJzIGJ1dCBmb3IgcHJvZ3JhbXMgYW5kIHNjcmlwdHMgY2FsbGluZyBnaXQKK2ZldGNoLCBwdXNoIG9yIGFyY2hpdmUuCisKK0lmIG9ubHkgPGluZmQ+IGlzIGdpdmVuLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgYmlkaXJlY3Rpb25hbCBzb2NrZXQgY29ubmVjdGVkCit0byByZW1vdGUgR2l0IHNlcnZlciAoZ2l0LXVwbG9hZC1wYWNrLCBnaXQtcmVjZWl2ZS1wYWNrIG9yCitnaXQtdXBsb2FkLWFjaGl2ZSkuIElmIGJvdGggPGluZmQ+IGFuZCA8b3V0ZmQ+IGFyZSBnaXZlbiwgdGhleSBhcmUgYXNzdW1lZAordG8gYmUgcGlwZXMgY29ubmVjdGVkIHRvIGEgcmVtb3RlIEdpdCBzZXJ2ZXIgKDxpbmZkPiBiZWluZyB0aGUgaW5ib3VuZCBwaXBlCithbmQgPG91dGZkPiBiZWluZyB0aGUgb3V0Ym91bmQgcGlwZS4KKworSXQgaXMgYXNzdW1lZCB0aGF0IGFueSBoYW5kc2hha2luZyBwcm9jZWR1cmVzIGhhdmUgYWxyZWFkeSBiZWVuIGNvbXBsZXRlZAorKHN1Y2ggYXMgc2VuZGluZyBzZXJ2aWNlIHJlcXVlc3QgZm9yIGdpdDovLykgYmVmb3JlIHRoaXMgaGVscGVyIGlzIHN0YXJ0ZWQuCisKKzxhbnl0aGluZz4gY2FuIGJlIGFueSBzdHJpbmcuIEl0IGlzIGlnbm9yZWQuIEl0IGlzIG1lYW50IGZvciBwcm92aWRpbmcKK2luZm9ybWF0aW9uIHRvIHVzZXIgaW4gdGhlIFVSTCBpbiBjYXNlIHRoYXQgVVJMIGlzIGRpc3BsYXllZCBpbiBzb21lCitjb250ZXh0LgorCitFTlZJUk9OTUVOVCBWQVJJQUJMRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR0lUX1RSQU5TTE9PUF9ERUJVRzo6CisJSWYgc2V0LCBwcmludHMgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHZhcmlvdXMgcmVhZHMvd3JpdGVzLgorCitFWEFNUExFUworLS0tLS0tLS0KK2BnaXQgZmV0Y2ggZmQ6OjE3IG1hc3RlcmA6OgorCUZldGNoIG1hc3RlciwgdXNpbmcgZmlsZSBkZXNjcmlwdG9yICMxNyB0byBjb21tdW5pY2F0ZSB3aXRoCisJZ2l0LXVwbG9hZC1wYWNrLgorCitgZ2l0IGZldGNoIGZkOjoxNy9mb28gbWFzdGVyYDo6CisJU2FtZSBhcyBhYm92ZS4KKworYGdpdCBwdXNoIGZkOjo3LDggbWFzdGVyIChhcyBVUkwpYDo6CisJUHVzaCBtYXN0ZXIsIHVzaW5nIGZpbGUgZGVzY3JpcHRvciAjNyB0byByZWFkIGRhdGEgZnJvbQorCWdpdC1yZWNlaXZlLXBhY2sgYW5kIGZpbGUgZGVzY3JpcHRvciAjOCB0byB3cml0ZSBkYXRhIHRvCisJc2FtZSBzZXJ2aWNlLgorCitgZ2l0IHB1c2ggZmQ6OjcsOC9iYXIgbWFzdGVyYDo6CisJU2FtZSBhcyBhYm92ZS4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHJlbW90ZS1oZWxwZXJzWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLWhlbHBlcnMudHh0byBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1oZWxwZXJzLnR4dG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkyMzNmNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS1oZWxwZXJzLnR4dG8KQEAgLTAsMCArMSw5IEBACitnaXQtcmVtb3RlLWhlbHBlcnMKKz09PT09PT09PT09PT09PT09PQorCitUaGlzIGRvY3VtZW50IGhhcyBiZWVuIG1vdmVkIHRvIGxpbmtnaXQ6Z2l0cmVtb3RlLWhlbHBlcnNbMV0uCisKK1BsZWFzZSBsZXQgdGhlIG93bmVycyBvZiB0aGUgcmVmZXJyaW5nIHNpdGUga25vdyBzbyB0aGF0IHRoZXkgY2FuIHVwZGF0ZSB0aGUKK2xpbmsgeW91IGNsaWNrZWQgdG8gZ2V0IGhlcmUuCisKK1RoYW5rcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS10ZXN0Z2l0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS10ZXN0Z2l0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzkxZDczCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVtb3RlLXRlc3RnaXQudHh0CkBAIC0wLDAgKzEsMzAgQEAKK2dpdC1yZW1vdGUtdGVzdGdpdCgxKQorPT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZW1vdGUtdGVzdGdpdCAtIEV4YW1wbGUgcmVtb3RlLWhlbHBlcgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZ2l0IGNsb25lIHRlc3RnaXQ6Ojxzb3VyY2UtcmVwbz4gWzxkZXN0aW5hdGlvbj5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGNvbW1hbmQgaXMgYSBzaW1wbGUgcmVtb3RlLWhlbHBlciwgdGhhdCBpcyB1c2VkIGJvdGggYXMgYQordGVzdGNhc2UgZm9yIHRoZSByZW1vdGUtaGVscGVyIGZ1bmN0aW9uYWxpdHksIGFuZCBhcyBhbiBleGFtcGxlIHRvCitzaG93IHJlbW90ZS1oZWxwZXIgYXV0aG9ycyBvbmUgcG9zc2libGUgaW1wbGVtZW50YXRpb24uCisKK1RoZSBiZXN0IHdheSB0byBsZWFybiBtb3JlIGlzIHRvIHJlYWQgdGhlIGNvbW1lbnRzIGFuZCBzb3VyY2UgY29kZSBpbgorJ2dpdC1yZW1vdGUtdGVzdGdpdCcuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXRyZW1vdGUtaGVscGVyc1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlbW90ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkN2VjZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZW1vdGUudHh0CkBAIC0wLDAgKzEsMjUyIEBACitnaXQtcmVtb3RlKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZW1vdGUgLSBNYW5hZ2Ugc2V0IG9mIHRyYWNrZWQgcmVwb3NpdG9yaWVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJlbW90ZScgWy12IHwgLS12ZXJib3NlXQorJ2dpdCByZW1vdGUgYWRkJyBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS1bbm8tXXRhZ3NdIFstLW1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPgorJ2dpdCByZW1vdGUgcmVuYW1lJyA8b2xkPiA8bmV3PgorJ2dpdCByZW1vdGUgcmVtb3ZlJyA8bmFtZT4KKydnaXQgcmVtb3RlIHNldC1oZWFkJyA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KQorJ2dpdCByZW1vdGUgc2V0LWJyYW5jaGVzJyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLgorJ2dpdCByZW1vdGUgZ2V0LXVybCcgWy0tcHVzaF0gWy0tYWxsXSA8bmFtZT4KKydnaXQgcmVtb3RlIHNldC11cmwnIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dCisnZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkJyBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4KKydnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUnIFstLXB1c2hdIDxuYW1lPiA8dXJsPgorJ2dpdCByZW1vdGUnIFstdiB8IC0tdmVyYm9zZV0gJ3Nob3cnIFstbl0gPG5hbWU+Li4uCisnZ2l0IHJlbW90ZSBwcnVuZScgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4uLi4KKydnaXQgcmVtb3RlJyBbLXYgfCAtLXZlcmJvc2VdICd1cGRhdGUnIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK01hbmFnZSB0aGUgc2V0IG9mIHJlcG9zaXRvcmllcyAoInJlbW90ZXMiKSB3aG9zZSBicmFuY2hlcyB5b3UgdHJhY2suCisKKworT1BUSU9OUworLS0tLS0tLQorCistdjo6CistLXZlcmJvc2U6OgorCUJlIGEgbGl0dGxlIG1vcmUgdmVyYm9zZSBhbmQgc2hvdyByZW1vdGUgdXJsIGFmdGVyIG5hbWUuCisJTk9URTogVGhpcyBtdXN0IGJlIHBsYWNlZCBiZXR3ZWVuIGByZW1vdGVgIGFuZCBgc3ViY29tbWFuZGAuCisKKworQ09NTUFORFMKKy0tLS0tLS0tCisKK1dpdGggbm8gYXJndW1lbnRzLCBzaG93cyBhIGxpc3Qgb2YgZXhpc3RpbmcgcmVtb3Rlcy4gIFNldmVyYWwKK3N1YmNvbW1hbmRzIGFyZSBhdmFpbGFibGUgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIHRoZSByZW1vdGVzLgorCisnYWRkJzo6CisKK0FkZHMgYSByZW1vdGUgbmFtZWQgPG5hbWU+IGZvciB0aGUgcmVwb3NpdG9yeSBhdAorPHVybD4uICBUaGUgY29tbWFuZCBgZ2l0IGZldGNoIDxuYW1lPmAgY2FuIHRoZW4gYmUgdXNlZCB0byBjcmVhdGUgYW5kCit1cGRhdGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIDxuYW1lPi88YnJhbmNoPi4KKysKK1dpdGggYC1mYCBvcHRpb24sIGBnaXQgZmV0Y2ggPG5hbWU+YCBpcyBydW4gaW1tZWRpYXRlbHkgYWZ0ZXIKK3RoZSByZW1vdGUgaW5mb3JtYXRpb24gaXMgc2V0IHVwLgorKworV2l0aCBgLS10YWdzYCBvcHRpb24sIGBnaXQgZmV0Y2ggPG5hbWU+YCBpbXBvcnRzIGV2ZXJ5IHRhZyBmcm9tIHRoZQorcmVtb3RlIHJlcG9zaXRvcnkuCisrCitXaXRoIGAtLW5vLXRhZ3NgIG9wdGlvbiwgYGdpdCBmZXRjaCA8bmFtZT5gIGRvZXMgbm90IGltcG9ydCB0YWdzIGZyb20KK3RoZSByZW1vdGUgcmVwb3NpdG9yeS4KKysKK0J5IGRlZmF1bHQsIG9ubHkgdGFncyBvbiBmZXRjaGVkIGJyYW5jaGVzIGFyZSBpbXBvcnRlZAorKHNlZSBsaW5rZ2l0OmdpdC1mZXRjaFsxXSkuCisrCitXaXRoIGAtdCA8YnJhbmNoPmAgb3B0aW9uLCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGdsb2IKK3JlZnNwZWMgZm9yIHRoZSByZW1vdGUgdG8gdHJhY2sgYWxsIGJyYW5jaGVzIHVuZGVyCit0aGUgYHJlZnMvcmVtb3Rlcy88bmFtZT4vYCBuYW1lc3BhY2UsIGEgcmVmc3BlYyB0byB0cmFjayBvbmx5IGA8YnJhbmNoPmAKK2lzIGNyZWF0ZWQuICBZb3UgY2FuIGdpdmUgbW9yZSB0aGFuIG9uZSBgLXQgPGJyYW5jaD5gIHRvIHRyYWNrCittdWx0aXBsZSBicmFuY2hlcyB3aXRob3V0IGdyYWJiaW5nIGFsbCBicmFuY2hlcy4KKysKK1dpdGggYC1tIDxtYXN0ZXI+YCBvcHRpb24sIGEgc3ltYm9saWMtcmVmIGByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQURgIGlzIHNldAordXAgdG8gcG9pbnQgYXQgcmVtb3RlJ3MgYDxtYXN0ZXI+YCBicmFuY2guIFNlZSBhbHNvIHRoZSBzZXQtaGVhZCBjb21tYW5kLgorKworV2hlbiBhIGZldGNoIG1pcnJvciBpcyBjcmVhdGVkIHdpdGggYC0tbWlycm9yPWZldGNoYCwgdGhlIHJlZnMgd2lsbCBub3QKK2JlIHN0b3JlZCBpbiB0aGUgJ3JlZnMvcmVtb3Rlcy8nIG5hbWVzcGFjZSwgYnV0IHJhdGhlciBldmVyeXRoaW5nIGluCisncmVmcy8nIG9uIHRoZSByZW1vdGUgd2lsbCBiZSBkaXJlY3RseSBtaXJyb3JlZCBpbnRvICdyZWZzLycgaW4gdGhlCitsb2NhbCByZXBvc2l0b3J5LiBUaGlzIG9wdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGluIGJhcmUgcmVwb3NpdG9yaWVzLAorYmVjYXVzZSBhIGZldGNoIHdvdWxkIG92ZXJ3cml0ZSBhbnkgbG9jYWwgY29tbWl0cy4KKysKK1doZW4gYSBwdXNoIG1pcnJvciBpcyBjcmVhdGVkIHdpdGggYC0tbWlycm9yPXB1c2hgLCB0aGVuIGBnaXQgcHVzaGAKK3dpbGwgYWx3YXlzIGJlaGF2ZSBhcyBpZiBgLS1taXJyb3JgIHdhcyBwYXNzZWQuCisKKydyZW5hbWUnOjoKKworUmVuYW1lIHRoZSByZW1vdGUgbmFtZWQgPG9sZD4gdG8gPG5ldz4uIEFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgYW5kCitjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgcmVtb3RlIGFyZSB1cGRhdGVkLgorKworSW4gY2FzZSA8b2xkPiBhbmQgPG5ldz4gYXJlIHRoZSBzYW1lLCBhbmQgPG9sZD4gaXMgYSBmaWxlIHVuZGVyCitgJEdJVF9ESVIvcmVtb3Rlc2Agb3IgYCRHSVRfRElSL2JyYW5jaGVzYCwgdGhlIHJlbW90ZSBpcyBjb252ZXJ0ZWQgdG8KK3RoZSBjb25maWd1cmF0aW9uIGZpbGUgZm9ybWF0LgorCisncmVtb3ZlJzo6Cisncm0nOjoKKworUmVtb3ZlIHRoZSByZW1vdGUgbmFtZWQgPG5hbWU+LiBBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGFuZAorY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhlIHJlbW90ZSBhcmUgcmVtb3ZlZC4KKworJ3NldC1oZWFkJzo6CisKK1NldHMgb3IgZGVsZXRlcyB0aGUgZGVmYXVsdCBicmFuY2ggKGkuZS4gdGhlIHRhcmdldCBvZiB0aGUKK3N5bWJvbGljLXJlZiBgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEYCkgZm9yCit0aGUgbmFtZWQgcmVtb3RlLiBIYXZpbmcgYSBkZWZhdWx0IGJyYW5jaCBmb3IgYSByZW1vdGUgaXMgbm90IHJlcXVpcmVkLAorYnV0IGFsbG93cyB0aGUgbmFtZSBvZiB0aGUgcmVtb3RlIHRvIGJlIHNwZWNpZmllZCBpbiBsaWV1IG9mIGEgc3BlY2lmaWMKK2JyYW5jaC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBkZWZhdWx0IGJyYW5jaCBmb3IgYG9yaWdpbmAgaXMgc2V0IHRvCitgbWFzdGVyYCwgdGhlbiBgb3JpZ2luYCBtYXkgYmUgc3BlY2lmaWVkIHdoZXJldmVyIHlvdSB3b3VsZCBub3JtYWxseQorc3BlY2lmeSBgb3JpZ2luL21hc3RlcmAuCisrCitXaXRoIGAtZGAgb3IgYC0tZGVsZXRlYCwgdGhlIHN5bWJvbGljIHJlZiBgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEYCBpcyBkZWxldGVkLgorKworV2l0aCBgLWFgIG9yIGAtLWF1dG9gLCB0aGUgcmVtb3RlIGlzIHF1ZXJpZWQgdG8gZGV0ZXJtaW5lIGl0cyBgSEVBRGAsIHRoZW4gdGhlCitzeW1ib2xpYy1yZWYgYHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRGAgaXMgc2V0IHRvIHRoZSBzYW1lIGJyYW5jaC4gZS5nLiwgaWYgdGhlIHJlbW90ZQorYEhFQURgIGlzIHBvaW50ZWQgYXQgYG5leHRgLCAiYGdpdCByZW1vdGUgc2V0LWhlYWQgb3JpZ2luIC1hYCIgd2lsbCBzZXQKK3RoZSBzeW1ib2xpYy1yZWYgYHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRGAgdG8gYHJlZnMvcmVtb3Rlcy9vcmlnaW4vbmV4dGAuIFRoaXMgd2lsbAorb25seSB3b3JrIGlmIGByZWZzL3JlbW90ZXMvb3JpZ2luL25leHRgIGFscmVhZHkgZXhpc3RzOyBpZiBub3QgaXQgbXVzdCBiZQorZmV0Y2hlZCBmaXJzdC4KKysKK1VzZSBgPGJyYW5jaD5gIHRvIHNldCB0aGUgc3ltYm9saWMtcmVmIGByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQURgIGV4cGxpY2l0bHkuIGUuZy4sICJnaXQKK3JlbW90ZSBzZXQtaGVhZCBvcmlnaW4gbWFzdGVyIiB3aWxsIHNldCB0aGUgc3ltYm9saWMtcmVmIGByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQURgIHRvCitgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXJgLiBUaGlzIHdpbGwgb25seSB3b3JrIGlmCitgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXJgIGFscmVhZHkgZXhpc3RzOyBpZiBub3QgaXQgbXVzdCBiZSBmZXRjaGVkIGZpcnN0LgorKworCisnc2V0LWJyYW5jaGVzJzo6CisKK0NoYW5nZXMgdGhlIGxpc3Qgb2YgYnJhbmNoZXMgdHJhY2tlZCBieSB0aGUgbmFtZWQgcmVtb3RlLgorVGhpcyBjYW4gYmUgdXNlZCB0byB0cmFjayBhIHN1YnNldCBvZiB0aGUgYXZhaWxhYmxlIHJlbW90ZSBicmFuY2hlcworYWZ0ZXIgdGhlIGluaXRpYWwgc2V0dXAgZm9yIGEgcmVtb3RlLgorKworVGhlIG5hbWVkIGJyYW5jaGVzIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgaWYgc3BlY2lmaWVkIHdpdGggdGhlCitgLXRgIG9wdGlvbiBvbiB0aGUgJ2dpdCByZW1vdGUgYWRkJyBjb21tYW5kIGxpbmUuCisrCitXaXRoIGAtLWFkZGAsIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZSBsaXN0IG9mIGN1cnJlbnRseSB0cmFja2VkCiticmFuY2hlcywgYWRkcyB0byB0aGF0IGxpc3QuCisKKydnZXQtdXJsJzo6CisKK1JldHJpZXZlcyB0aGUgVVJMcyBmb3IgYSByZW1vdGUuIENvbmZpZ3VyYXRpb25zIGZvciBgaW5zdGVhZE9mYCBhbmQKK2BwdXNoSW5zdGVhZE9mYCBhcmUgZXhwYW5kZWQgaGVyZS4gQnkgZGVmYXVsdCwgb25seSB0aGUgZmlyc3QgVVJMIGlzIGxpc3RlZC4KKysKK1dpdGggJy0tcHVzaCcsIHB1c2ggVVJMcyBhcmUgcXVlcmllZCByYXRoZXIgdGhhbiBmZXRjaCBVUkxzLgorKworV2l0aCAnLS1hbGwnLCBhbGwgVVJMcyBmb3IgdGhlIHJlbW90ZSB3aWxsIGJlIGxpc3RlZC4KKworJ3NldC11cmwnOjoKKworQ2hhbmdlcyBVUkxzIGZvciB0aGUgcmVtb3RlLiBTZXRzIGZpcnN0IFVSTCBmb3IgcmVtb3RlIDxuYW1lPiB0aGF0IG1hdGNoZXMKK3JlZ2V4IDxvbGR1cmw+IChmaXJzdCBVUkwgaWYgbm8gPG9sZHVybD4gaXMgZ2l2ZW4pIHRvIDxuZXd1cmw+LiBJZgorPG9sZHVybD4gZG9lc24ndCBtYXRjaCBhbnkgVVJMLCBhbiBlcnJvciBvY2N1cnMgYW5kIG5vdGhpbmcgaXMgY2hhbmdlZC4KKysKK1dpdGggJy0tcHVzaCcsIHB1c2ggVVJMcyBhcmUgbWFuaXB1bGF0ZWQgaW5zdGVhZCBvZiBmZXRjaCBVUkxzLgorKworV2l0aCAnLS1hZGQnLCBpbnN0ZWFkIG9mIGNoYW5naW5nIGV4aXN0aW5nIFVSTHMsIG5ldyBVUkwgaXMgYWRkZWQuCisrCitXaXRoICctLWRlbGV0ZScsIGluc3RlYWQgb2YgY2hhbmdpbmcgZXhpc3RpbmcgVVJMcywgYWxsIFVSTHMgbWF0Y2hpbmcKK3JlZ2V4IDx1cmw+IGFyZSBkZWxldGVkIGZvciByZW1vdGUgPG5hbWU+LiAgVHJ5aW5nIHRvIGRlbGV0ZSBhbGwKK25vbi1wdXNoIFVSTHMgaXMgYW4gZXJyb3IuCisrCitOb3RlIHRoYXQgdGhlIHB1c2ggVVJMIGFuZCB0aGUgZmV0Y2ggVVJMLCBldmVuIHRob3VnaCB0aGV5IGNhbgorYmUgc2V0IGRpZmZlcmVudGx5LCBtdXN0IHN0aWxsIHJlZmVyIHRvIHRoZSBzYW1lIHBsYWNlLiAgV2hhdCB5b3UKK3B1c2hlZCB0byB0aGUgcHVzaCBVUkwgc2hvdWxkIGJlIHdoYXQgeW91IHdvdWxkIHNlZSBpZiB5b3UKK2ltbWVkaWF0ZWx5IGZldGNoZWQgZnJvbSB0aGUgZmV0Y2ggVVJMLiAgSWYgeW91IGFyZSB0cnlpbmcgdG8KK2ZldGNoIGZyb20gb25lIHBsYWNlIChlLmcuIHlvdXIgdXBzdHJlYW0pIGFuZCBwdXNoIHRvIGFub3RoZXIgKGUuZy4KK3lvdXIgcHVibGlzaGluZyByZXBvc2l0b3J5KSwgdXNlIHR3byBzZXBhcmF0ZSByZW1vdGVzLgorCisKKydzaG93Jzo6CisKK0dpdmVzIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlbW90ZSA8bmFtZT4uCisrCitXaXRoIGAtbmAgb3B0aW9uLCB0aGUgcmVtb3RlIGhlYWRzIGFyZSBub3QgcXVlcmllZCBmaXJzdCB3aXRoCitgZ2l0IGxzLXJlbW90ZSA8bmFtZT5gOyBjYWNoZWQgaW5mb3JtYXRpb24gaXMgdXNlZCBpbnN0ZWFkLgorCisncHJ1bmUnOjoKKworRGVsZXRlcyBhbGwgc3RhbGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIHVuZGVyIDxuYW1lPi4KK1RoZXNlIHN0YWxlIGJyYW5jaGVzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkKK3JlZmVyZW5jZWQgYnkgPG5hbWU+LCBidXQgYXJlIHN0aWxsIGxvY2FsbHkgYXZhaWxhYmxlIGluCisicmVtb3Rlcy88bmFtZT4iLgorKworV2l0aCBgLS1kcnktcnVuYCBvcHRpb24sIHJlcG9ydCB3aGF0IGJyYW5jaGVzIHdpbGwgYmUgcHJ1bmVkLCBidXQgZG8gbm90CithY3R1YWxseSBwcnVuZSB0aGVtLgorCisndXBkYXRlJzo6CisKK0ZldGNoIHVwZGF0ZXMgZm9yIGEgbmFtZWQgc2V0IG9mIHJlbW90ZXMgaW4gdGhlIHJlcG9zaXRvcnkgYXMgZGVmaW5lZCBieQorcmVtb3Rlcy48Z3JvdXA+LiAgSWYgYSBuYW1lZCBncm91cCBpcyBub3Qgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsCit0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgcmVtb3Rlcy5kZWZhdWx0IHdpbGwgYmUgdXNlZDsgaWYKK3JlbW90ZXMuZGVmYXVsdCBpcyBub3QgZGVmaW5lZCwgYWxsIHJlbW90ZXMgd2hpY2ggZG8gbm90IGhhdmUgdGhlCitjb25maWd1cmF0aW9uIHBhcmFtZXRlciByZW1vdGUuPG5hbWU+LnNraXBEZWZhdWx0VXBkYXRlIHNldCB0byB0cnVlIHdpbGwKK2JlIHVwZGF0ZWQuICAoU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisrCitXaXRoIGAtLXBydW5lYCBvcHRpb24sIHBydW5lIGFsbCB0aGUgcmVtb3RlcyB0aGF0IGFyZSB1cGRhdGVkLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworVGhlIHJlbW90ZSBjb25maWd1cmF0aW9uIGlzIGFjaGlldmVkIHVzaW5nIHRoZSBgcmVtb3RlLm9yaWdpbi51cmxgIGFuZAorYHJlbW90ZS5vcmlnaW4uZmV0Y2hgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiAgKFNlZQorbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworRXhhbXBsZXMKKy0tLS0tLS0tCisKKyogQWRkIGEgbmV3IHJlbW90ZSwgZmV0Y2gsIGFuZCBjaGVjayBvdXQgYSBicmFuY2ggZnJvbSBpdAorKworLS0tLS0tLS0tLS0tCiskIGdpdCByZW1vdGUKK29yaWdpbgorJCBnaXQgYnJhbmNoIC1yCisgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL21hc3RlcgorJCBnaXQgcmVtb3RlIGFkZCBzdGFnaW5nIGdpdDovL2dpdC5rZXJuZWwub3JnLy4uLi9ncmVna2gvc3RhZ2luZy5naXQKKyQgZ2l0IHJlbW90ZQorb3JpZ2luCitzdGFnaW5nCiskIGdpdCBmZXRjaCBzdGFnaW5nCisuLi4KK0Zyb20gZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2dyZWdraC9zdGFnaW5nCisgKiBbbmV3IGJyYW5jaF0gICAgICBtYXN0ZXIgICAgIC0+IHN0YWdpbmcvbWFzdGVyCisgKiBbbmV3IGJyYW5jaF0gICAgICBzdGFnaW5nLWxpbnVzIC0+IHN0YWdpbmcvc3RhZ2luZy1saW51cworICogW25ldyBicmFuY2hdICAgICAgc3RhZ2luZy1uZXh0IC0+IHN0YWdpbmcvc3RhZ2luZy1uZXh0CiskIGdpdCBicmFuY2ggLXIKKyAgb3JpZ2luL0hFQUQgLT4gb3JpZ2luL21hc3RlcgorICBvcmlnaW4vbWFzdGVyCisgIHN0YWdpbmcvbWFzdGVyCisgIHN0YWdpbmcvc3RhZ2luZy1saW51cworICBzdGFnaW5nL3N0YWdpbmctbmV4dAorJCBnaXQgY2hlY2tvdXQgLWIgc3RhZ2luZyBzdGFnaW5nL21hc3RlcgorLi4uCistLS0tLS0tLS0tLS0KKworKiBJbWl0YXRlICdnaXQgY2xvbmUnIGJ1dCB0cmFjayBvbmx5IHNlbGVjdGVkIGJyYW5jaGVzCisrCistLS0tLS0tLS0tLS0KKyQgbWtkaXIgcHJvamVjdC5naXQKKyQgY2QgcHJvamVjdC5naXQKKyQgZ2l0IGluaXQKKyQgZ2l0IHJlbW90ZSBhZGQgLWYgLXQgbWFzdGVyIC1tIG1hc3RlciBvcmlnaW4gZ2l0Oi8vZXhhbXBsZS5jb20vZ2l0LmdpdC8KKyQgZ2l0IG1lcmdlIG9yaWdpbgorLS0tLS0tLS0tLS0tCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1mZXRjaFsxXQorbGlua2dpdDpnaXQtYnJhbmNoWzFdCitsaW5rZ2l0OmdpdC1jb25maWdbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1yZXBhY2sudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTBiZDM2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwYWNrLnR4dApAQCAtMCwwICsxLDE0OSBAQAorZ2l0LXJlcGFjaygxKQorPT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVwYWNrIC0gUGFjayB1bnBhY2tlZCBvYmplY3RzIGluIGEgcmVwb3NpdG9yeQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZXBhY2snIFstYV0gWy1BXSBbLWRdIFstZl0gWy1GXSBbLWxdIFstbl0gWy1xXSBbLWJdIFstLXdpbmRvdz08bj5dIFstLWRlcHRoPTxuPl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGNvbWJpbmUgYWxsIG9iamVjdHMgdGhhdCBkbyBub3QgY3VycmVudGx5CityZXNpZGUgaW4gYSAicGFjayIsIGludG8gYSBwYWNrLiAgSXQgY2FuIGFsc28gYmUgdXNlZCB0byByZS1vcmdhbml6ZQorZXhpc3RpbmcgcGFja3MgaW50byBhIHNpbmdsZSwgbW9yZSBlZmZpY2llbnQgcGFjay4KKworQSBwYWNrIGlzIGEgY29sbGVjdGlvbiBvZiBvYmplY3RzLCBpbmRpdmlkdWFsbHkgY29tcHJlc3NlZCwgd2l0aAorZGVsdGEgY29tcHJlc3Npb24gYXBwbGllZCwgc3RvcmVkIGluIGEgc2luZ2xlIGZpbGUsIHdpdGggYW4KK2Fzc29jaWF0ZWQgaW5kZXggZmlsZS4KKworUGFja3MgYXJlIHVzZWQgdG8gcmVkdWNlIHRoZSBsb2FkIG9uIG1pcnJvciBzeXN0ZW1zLCBiYWNrdXAKK2VuZ2luZXMsIGRpc2sgc3RvcmFnZSwgZXRjLgorCitPUFRJT05TCistLS0tLS0tCisKKy1hOjoKKwlJbnN0ZWFkIG9mIGluY3JlbWVudGFsbHkgcGFja2luZyB0aGUgdW5wYWNrZWQgb2JqZWN0cywKKwlwYWNrIGV2ZXJ5dGhpbmcgcmVmZXJlbmNlZCBpbnRvIGEgc2luZ2xlIHBhY2suCisJRXNwZWNpYWxseSB1c2VmdWwgd2hlbiBwYWNraW5nIGEgcmVwb3NpdG9yeSB0aGF0IGlzIHVzZWQKKwlmb3IgcHJpdmF0ZSBkZXZlbG9wbWVudC4gVXNlCisJd2l0aCAnLWQnLiAgVGhpcyB3aWxsIGNsZWFuIHVwIHRoZSBvYmplY3RzIHRoYXQgYGdpdCBwcnVuZWAKKwlsZWF2ZXMgYmVoaW5kLCBidXQgYGdpdCBmc2NrIC0tZnVsbCAtLWRhbmdsaW5nYCBzaG93cyBhcworCWRhbmdsaW5nLgorKworTm90ZSB0aGF0IHVzZXJzIGZldGNoaW5nIG92ZXIgZHVtYiBwcm90b2NvbHMgd2lsbCBoYXZlIHRvIGZldGNoIHRoZQord2hvbGUgbmV3IHBhY2sgaW4gb3JkZXIgdG8gZ2V0IGFueSBjb250YWluZWQgb2JqZWN0LCBubyBtYXR0ZXIgaG93IG1hbnkKK290aGVyIG9iamVjdHMgaW4gdGhhdCBwYWNrIHRoZXkgYWxyZWFkeSBoYXZlIGxvY2FsbHkuCisKKy1BOjoKKwlTYW1lIGFzIGAtYWAsIHVubGVzcyAnLWQnIGlzIHVzZWQuICBUaGVuIGFueSB1bnJlYWNoYWJsZQorCW9iamVjdHMgaW4gYSBwcmV2aW91cyBwYWNrIGJlY29tZSBsb29zZSwgdW5wYWNrZWQgb2JqZWN0cywKKwlpbnN0ZWFkIG9mIGJlaW5nIGxlZnQgaW4gdGhlIG9sZCBwYWNrLiAgVW5yZWFjaGFibGUgb2JqZWN0cworCWFyZSBuZXZlciBpbnRlbnRpb25hbGx5IGFkZGVkIHRvIGEgcGFjaywgZXZlbiB3aGVuIHJlcGFja2luZy4KKwlUaGlzIG9wdGlvbiBwcmV2ZW50cyB1bnJlYWNoYWJsZSBvYmplY3RzIGZyb20gYmVpbmcgaW1tZWRpYXRlbHkKKwlkZWxldGVkIGJ5IHdheSBvZiBiZWluZyBsZWZ0IGluIHRoZSBvbGQgcGFjayBhbmQgdGhlbgorCXJlbW92ZWQuICBJbnN0ZWFkLCB0aGUgbG9vc2UgdW5yZWFjaGFibGUgb2JqZWN0cworCXdpbGwgYmUgcHJ1bmVkIGFjY29yZGluZyB0byBub3JtYWwgZXhwaXJ5IHJ1bGVzCisJd2l0aCB0aGUgbmV4dCAnZ2l0IGdjJyBpbnZvY2F0aW9uLiBTZWUgbGlua2dpdDpnaXQtZ2NbMV0uCisKKy1kOjoKKwlBZnRlciBwYWNraW5nLCBpZiB0aGUgbmV3bHkgY3JlYXRlZCBwYWNrcyBtYWtlIHNvbWUKKwlleGlzdGluZyBwYWNrcyByZWR1bmRhbnQsIHJlbW92ZSB0aGUgcmVkdW5kYW50IHBhY2tzLgorCUFsc28gcnVuICAnZ2l0IHBydW5lLXBhY2tlZCcgdG8gcmVtb3ZlIHJlZHVuZGFudAorCWxvb3NlIG9iamVjdCBmaWxlcy4KKworLWw6OgorCVBhc3MgdGhlIGAtLWxvY2FsYCBvcHRpb24gdG8gJ2dpdCBwYWNrLW9iamVjdHMnLiBTZWUKKwlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uCisKKy1mOjoKKwlQYXNzIHRoZSBgLS1uby1yZXVzZS1kZWx0YWAgb3B0aW9uIHRvIGBnaXQtcGFjay1vYmplY3RzYCwgc2VlCisJbGlua2dpdDpnaXQtcGFjay1vYmplY3RzWzFdLgorCistRjo6CisJUGFzcyB0aGUgYC0tbm8tcmV1c2Utb2JqZWN0YCBvcHRpb24gdG8gYGdpdC1wYWNrLW9iamVjdHNgLCBzZWUKKwlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0uCisKKy1xOjoKKwlQYXNzIHRoZSBgLXFgIG9wdGlvbiB0byAnZ2l0IHBhY2stb2JqZWN0cycuIFNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stb2JqZWN0c1sxXS4KKworLW46OgorCURvIG5vdCB1cGRhdGUgdGhlIHNlcnZlciBpbmZvcm1hdGlvbiB3aXRoCisJJ2dpdCB1cGRhdGUtc2VydmVyLWluZm8nLiAgVGhpcyBvcHRpb24gc2tpcHMKKwl1cGRhdGluZyBsb2NhbCBjYXRhbG9nIGZpbGVzIG5lZWRlZCB0byBwdWJsaXNoCisJdGhpcyByZXBvc2l0b3J5IChvciBhIGRpcmVjdCBjb3B5IG9mIGl0KQorCW92ZXIgSFRUUCBvciBGVFAuICBTZWUgbGlua2dpdDpnaXQtdXBkYXRlLXNlcnZlci1pbmZvWzFdLgorCistLXdpbmRvdz08bj46OgorLS1kZXB0aD08bj46OgorCVRoZXNlIHR3byBvcHRpb25zIGFmZmVjdCBob3cgdGhlIG9iamVjdHMgY29udGFpbmVkIGluIHRoZSBwYWNrIGFyZQorCXN0b3JlZCB1c2luZyBkZWx0YSBjb21wcmVzc2lvbi4gVGhlIG9iamVjdHMgYXJlIGZpcnN0IGludGVybmFsbHkKKwlzb3J0ZWQgYnkgdHlwZSwgc2l6ZSBhbmQgb3B0aW9uYWxseSBuYW1lcyBhbmQgY29tcGFyZWQgYWdhaW5zdCB0aGUKKwlvdGhlciBvYmplY3RzIHdpdGhpbiBgLS13aW5kb3dgIHRvIHNlZSBpZiB1c2luZyBkZWx0YSBjb21wcmVzc2lvbiBzYXZlcworCXNwYWNlLiBgLS1kZXB0aGAgbGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoOyBtYWtpbmcgaXQgdG9vIGRlZXAKKwlhZmZlY3RzIHRoZSBwZXJmb3JtYW5jZSBvbiB0aGUgdW5wYWNrZXIgc2lkZSwgYmVjYXVzZSBkZWx0YSBkYXRhIG5lZWRzCisJdG8gYmUgYXBwbGllZCB0aGF0IG1hbnkgdGltZXMgdG8gZ2V0IHRvIHRoZSBuZWNlc3Nhcnkgb2JqZWN0LgorCVRoZSBkZWZhdWx0IHZhbHVlIGZvciAtLXdpbmRvdyBpcyAxMCBhbmQgLS1kZXB0aCBpcyA1MC4KKworLS13aW5kb3ctbWVtb3J5PTxuPjo6CisJVGhpcyBvcHRpb24gcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBsaW1pdCBvbiB0b3Agb2YgYC0td2luZG93YDsKKwl0aGUgd2luZG93IHNpemUgd2lsbCBkeW5hbWljYWxseSBzY2FsZSBkb3duIHNvIGFzIHRvIG5vdCB0YWtlCisJdXAgbW9yZSB0aGFuICc8bj4nIGJ5dGVzIGluIG1lbW9yeS4gIFRoaXMgaXMgdXNlZnVsIGluCisJcmVwb3NpdG9yaWVzIHdpdGggYSBtaXggb2YgbGFyZ2UgYW5kIHNtYWxsIG9iamVjdHMgdG8gbm90IHJ1bgorCW91dCBvZiBtZW1vcnkgd2l0aCBhIGxhcmdlIHdpbmRvdywgYnV0IHN0aWxsIGJlIGFibGUgdG8gdGFrZQorCWFkdmFudGFnZSBvZiB0aGUgbGFyZ2Ugd2luZG93IGZvciB0aGUgc21hbGxlciBvYmplY3RzLiAgVGhlCisJc2l6ZSBjYW4gYmUgc3VmZml4ZWQgd2l0aCAiayIsICJtIiwgb3IgImciLgorCWAtLXdpbmRvdy1tZW1vcnk9MGAgbWFrZXMgbWVtb3J5IHVzYWdlIHVubGltaXRlZCwgd2hpY2ggaXMgdGhlCisJZGVmYXVsdC4KKworLS1tYXgtcGFjay1zaXplPTxuPjo6CisJTWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZS4gVGhlIHNpemUgY2FuIGJlIHN1ZmZpeGVkIHdpdGgKKwkiayIsICJtIiwgb3IgImciLiBUaGUgbWluaW11bSBzaXplIGFsbG93ZWQgaXMgbGltaXRlZCB0byAxIE1pQi4KKwlJZiBzcGVjaWZpZWQsICBtdWx0aXBsZSBwYWNrZmlsZXMgbWF5IGJlIGNyZWF0ZWQuCisJVGhlIGRlZmF1bHQgaXMgdW5saW1pdGVkLCB1bmxlc3MgdGhlIGNvbmZpZyB2YXJpYWJsZQorCWBwYWNrLnBhY2tTaXplTGltaXRgIGlzIHNldC4KKworLWI6OgorLS13cml0ZS1iaXRtYXAtaW5kZXg6OgorCVdyaXRlIGEgcmVhY2hhYmlsaXR5IGJpdG1hcCBpbmRleCBhcyBwYXJ0IG9mIHRoZSByZXBhY2suIFRoaXMKKwlvbmx5IG1ha2VzIHNlbnNlIHdoZW4gdXNlZCB3aXRoIGAtYWAgb3IgYC1BYCwgYXMgdGhlIGJpdG1hcHMKKwltdXN0IGJlIGFibGUgdG8gcmVmZXIgdG8gYWxsIHJlYWNoYWJsZSBvYmplY3RzLiBUaGlzIG9wdGlvbgorCW92ZXJyaWRlcyB0aGUgc2V0dGluZyBvZiBgcGFjay53cml0ZUJpdG1hcHNgLgorCistLXBhY2sta2VwdC1vYmplY3RzOjoKKwlJbmNsdWRlIG9iamVjdHMgaW4gYC5rZWVwYCBmaWxlcyB3aGVuIHJlcGFja2luZy4gIE5vdGUgdGhhdCB3ZQorCXN0aWxsIGRvIG5vdCBkZWxldGUgYC5rZWVwYCBwYWNrcyBhZnRlciBgcGFjay1vYmplY3RzYCBmaW5pc2hlcy4KKwlUaGlzIG1lYW5zIHRoYXQgd2UgbWF5IGR1cGxpY2F0ZSBvYmplY3RzLCBidXQgdGhpcyBtYWtlcyB0aGUKKwlvcHRpb24gc2FmZSB0byB1c2Ugd2hlbiB0aGVyZSBhcmUgY29uY3VycmVudCBwdXNoZXMgb3IgZmV0Y2hlcy4KKwlUaGlzIG9wdGlvbiBpcyBnZW5lcmFsbHkgb25seSB1c2VmdWwgaWYgeW91IGFyZSB3cml0aW5nIGJpdG1hcHMKKwl3aXRoIGAtYmAgb3IgYHBhY2sud3JpdGVCaXRtYXBzYCwgYXMgaXQgZW5zdXJlcyB0aGF0IHRoZQorCWJpdG1hcHBlZCBwYWNrZmlsZSBoYXMgdGhlIG5lY2Vzc2FyeSBvYmplY3RzLgorCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIHRoZSBjb21tYW5kIHBhc3NlcyBgLS1kZWx0YS1iYXNlLW9mZnNldGAgb3B0aW9uIHRvCisnZ2l0IHBhY2stb2JqZWN0cyc7IHRoaXMgdHlwaWNhbGx5IHJlc3VsdHMgaW4gc2xpZ2h0bHkgc21hbGxlciBwYWNrcywKK2J1dCB0aGUgZ2VuZXJhdGVkIHBhY2tzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB2ZXJzaW9ucyBvZiBHaXQgb2xkZXIgdGhhbgordmVyc2lvbiAxLjQuNC4gSWYgeW91IG5lZWQgdG8gc2hhcmUgeW91ciByZXBvc2l0b3J5IHdpdGggc3VjaCBhbmNpZW50IEdpdAordmVyc2lvbnMsIGVpdGhlciBkaXJlY3RseSBvciB2aWEgdGhlIGR1bWIgaHR0cCBvciByc3luYyBwcm90b2NvbCwgdGhlbiB5b3UKK25lZWQgdG8gc2V0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGByZXBhY2suVXNlRGVsdGFCYXNlT2Zmc2V0YCB0bworImZhbHNlIiBhbmQgcmVwYWNrLiBBY2Nlc3MgZnJvbSBvbGQgR2l0IHZlcnNpb25zIG92ZXIgdGhlIG5hdGl2ZSBwcm90b2NvbAoraXMgdW5hZmZlY3RlZCBieSB0aGlzIG9wdGlvbiBhcyB0aGUgY29udmVyc2lvbiBpcyBwZXJmb3JtZWQgb24gdGhlIGZseQorYXMgbmVlZGVkIGluIHRoYXQgY2FzZS4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0KK2xpbmtnaXQ6Z2l0LXBydW5lLXBhY2tlZFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcGxhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcmVwbGFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmZjU5OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJlcGxhY2UudHh0CkBAIC0wLDAgKzEsMTU2IEBACitnaXQtcmVwbGFjZSgxKQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlcGxhY2UgLSBDcmVhdGUsIGxpc3QsIGRlbGV0ZSByZWZzIHRvIHJlcGxhY2Ugb2JqZWN0cworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVwbGFjZScgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+CisnZ2l0IHJlcGxhY2UnIFstZl0gLS1lZGl0IDxvYmplY3Q+CisnZ2l0IHJlcGxhY2UnIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dCisnZ2l0IHJlcGxhY2UnIC1kIDxvYmplY3Q+Li4uCisnZ2l0IHJlcGxhY2UnIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0FkZHMgYSAncmVwbGFjZScgcmVmZXJlbmNlIGluIGByZWZzL3JlcGxhY2UvYCBuYW1lc3BhY2UuCisKK1RoZSBuYW1lIG9mIHRoZSAncmVwbGFjZScgcmVmZXJlbmNlIGlzIHRoZSBTSEEtMSBvZiB0aGUgb2JqZWN0IHRoYXQgaXMKK3JlcGxhY2VkLiBUaGUgY29udGVudCBvZiB0aGUgJ3JlcGxhY2UnIHJlZmVyZW5jZSBpcyB0aGUgU0hBLTEgb2YgdGhlCityZXBsYWNlbWVudCBvYmplY3QuCisKK1RoZSByZXBsYWNlZCBvYmplY3QgYW5kIHRoZSByZXBsYWNlbWVudCBvYmplY3QgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLgorVGhpcyByZXN0cmljdGlvbiBjYW4gYmUgYnlwYXNzZWQgdXNpbmcgYC1mYC4KKworVW5sZXNzIGAtZmAgaXMgZ2l2ZW4sIHRoZSAncmVwbGFjZScgcmVmZXJlbmNlIG11c3Qgbm90IHlldCBleGlzdC4KKworVGhlcmUgaXMgbm8gb3RoZXIgcmVzdHJpY3Rpb24gb24gdGhlIHJlcGxhY2VkIGFuZCByZXBsYWNlbWVudCBvYmplY3RzLgorTWVyZ2UgY29tbWl0cyBjYW4gYmUgcmVwbGFjZWQgYnkgbm9uLW1lcmdlIGNvbW1pdHMgYW5kIHZpY2UgdmVyc2EuCisKK1JlcGxhY2VtZW50IHJlZmVyZW5jZXMgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQgYnkgYWxsIEdpdCBjb21tYW5kcworZXhjZXB0IHRob3NlIGRvaW5nIHJlYWNoYWJpbGl0eSB0cmF2ZXJzYWwgKHBydW5lLCBwYWNrIHRyYW5zZmVyIGFuZAorZnNjaykuCisKK0l0IGlzIHBvc3NpYmxlIHRvIGRpc2FibGUgdXNlIG9mIHJlcGxhY2VtZW50IHJlZmVyZW5jZXMgZm9yIGFueQorY29tbWFuZCB1c2luZyB0aGUgYC0tbm8tcmVwbGFjZS1vYmplY3RzYCBvcHRpb24ganVzdCBhZnRlciAnZ2l0Jy4KKworRm9yIGV4YW1wbGUgaWYgY29tbWl0ICdmb28nIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IGNvbW1pdCAnYmFyJzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyBjYXQtZmlsZSBjb21taXQgZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc2hvd3MgaW5mb3JtYXRpb24gYWJvdXQgY29tbWl0ICdmb28nLCB3aGlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBjb21taXQgZm9vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc2hvd3MgaW5mb3JtYXRpb24gYWJvdXQgY29tbWl0ICdiYXInLgorCitUaGUgJ0dJVF9OT19SRVBMQUNFX09CSkVDVFMnIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8KK2FjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSBgLS1uby1yZXBsYWNlLW9iamVjdHNgIG9wdGlvbi4KKworT1BUSU9OUworLS0tLS0tLQorLWY6OgorLS1mb3JjZTo6CisJSWYgYW4gZXhpc3RpbmcgcmVwbGFjZSByZWYgZm9yIHRoZSBzYW1lIG9iamVjdCBleGlzdHMsIGl0IHdpbGwKKwliZSBvdmVyd3JpdHRlbiAoaW5zdGVhZCBvZiBmYWlsaW5nKS4KKworLWQ6OgorLS1kZWxldGU6OgorCURlbGV0ZSBleGlzdGluZyByZXBsYWNlIHJlZnMgZm9yIHRoZSBnaXZlbiBvYmplY3RzLgorCistLWVkaXQgPG9iamVjdD46OgorCUVkaXQgYW4gb2JqZWN0J3MgY29udGVudCBpbnRlcmFjdGl2ZWx5LiBUaGUgZXhpc3RpbmcgY29udGVudAorCWZvciA8b2JqZWN0PiBpcyBwcmV0dHktcHJpbnRlZCBpbnRvIGEgdGVtcG9yYXJ5IGZpbGUsIGFuCisJZWRpdG9yIGlzIGxhdW5jaGVkIG9uIHRoZSBmaWxlLCBhbmQgdGhlIHJlc3VsdCBpcyBwYXJzZWQgdG8KKwljcmVhdGUgYSBuZXcgb2JqZWN0IG9mIHRoZSBzYW1lIHR5cGUgYXMgPG9iamVjdD4uIEEKKwlyZXBsYWNlbWVudCByZWYgaXMgdGhlbiBjcmVhdGVkIHRvIHJlcGxhY2UgPG9iamVjdD4gd2l0aCB0aGUKKwluZXdseSBjcmVhdGVkIG9iamVjdC4gU2VlIGxpbmtnaXQ6Z2l0LXZhclsxXSBmb3IgZGV0YWlscyBhYm91dAorCWhvdyB0aGUgZWRpdG9yIHdpbGwgYmUgY2hvc2VuLgorCistLXJhdzo6CisJV2hlbiBlZGl0aW5nLCBwcm92aWRlIHRoZSByYXcgb2JqZWN0IGNvbnRlbnRzIHJhdGhlciB0aGFuCisJcHJldHR5LXByaW50ZWQgb25lcy4gQ3VycmVudGx5IHRoaXMgb25seSBhZmZlY3RzIHRyZWVzLCB3aGljaAorCXdpbGwgYmUgc2hvd24gaW4gdGhlaXIgYmluYXJ5IGZvcm0uIFRoaXMgaXMgaGFyZGVyIHRvIHdvcmsgd2l0aCwKKwlidXQgY2FuIGhlbHAgd2hlbiByZXBhaXJpbmcgYSB0cmVlIHRoYXQgaXMgc28gY29ycnVwdGVkIGl0CisJY2Fubm90IGJlIHByZXR0eS1wcmludGVkLiBOb3RlIHRoYXQgeW91IG1heSBuZWVkIHRvIGNvbmZpZ3VyZQorCXlvdXIgZWRpdG9yIHRvIGNsZWFubHkgcmVhZCBhbmQgd3JpdGUgYmluYXJ5IGRhdGEuCisKKy0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXTo6CisJQ3JlYXRlIGEgZ3JhZnQgY29tbWl0LiBBIG5ldyBjb21taXQgaXMgY3JlYXRlZCB3aXRoIHRoZSBzYW1lCisJY29udGVudCBhcyA8Y29tbWl0PiBleGNlcHQgdGhhdCBpdHMgcGFyZW50cyB3aWxsIGJlCisJWzxwYXJlbnQ+Li4uXSBpbnN0ZWFkIG9mIDxjb21taXQ+J3MgcGFyZW50cy4gQSByZXBsYWNlbWVudCByZWYKKwlpcyB0aGVuIGNyZWF0ZWQgdG8gcmVwbGFjZSA8Y29tbWl0PiB3aXRoIHRoZSBuZXdseSBjcmVhdGVkCisJY29tbWl0LiBTZWUgY29udHJpYi9jb252ZXJ0LWdyYWZ0cy10by1yZXBsYWNlLXJlZnMuc2ggZm9yIGFuCisJZXhhbXBsZSBzY3JpcHQgYmFzZWQgb24gdGhpcyBvcHRpb24gdGhhdCBjYW4gY29udmVydCBncmFmdHMgdG8KKwlyZXBsYWNlIHJlZnMuCisKKy1sIDxwYXR0ZXJuPjo6CistLWxpc3QgPHBhdHRlcm4+OjoKKwlMaXN0IHJlcGxhY2UgcmVmcyBmb3Igb2JqZWN0cyB0aGF0IG1hdGNoIHRoZSBnaXZlbiBwYXR0ZXJuIChvcgorCWFsbCBpZiBubyBwYXR0ZXJuIGlzIGdpdmVuKS4KKwlUeXBpbmcgImdpdCByZXBsYWNlIiB3aXRob3V0IGFyZ3VtZW50cywgYWxzbyBsaXN0cyBhbGwgcmVwbGFjZQorCXJlZnMuCisKKy0tZm9ybWF0PTxmb3JtYXQ+OjoKKwlXaGVuIGxpc3RpbmcsIHVzZSB0aGUgc3BlY2lmaWVkIDxmb3JtYXQ+LCB3aGljaCBjYW4gYmUgb25lIG9mCisJJ3Nob3J0JywgJ21lZGl1bScgYW5kICdsb25nJy4gV2hlbiBvbWl0dGVkLCB0aGUgZm9ybWF0CisJZGVmYXVsdHMgdG8gJ3Nob3J0Jy4KKworRk9STUFUUworLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGZvcm1hdCBhcmUgYXZhaWxhYmxlOgorCisqICdzaG9ydCc6CisJPHJlcGxhY2VkIHNoYTE+CisqICdtZWRpdW0nOgorCTxyZXBsYWNlZCBzaGExPiAtPiA8cmVwbGFjZW1lbnQgc2hhMT4KKyogJ2xvbmcnOgorCTxyZXBsYWNlZCBzaGExPiAoPHJlcGxhY2VkIHR5cGU+KSAtPiA8cmVwbGFjZW1lbnQgc2hhMT4gKDxyZXBsYWNlbWVudCB0eXBlPikKKworQ1JFQVRJTkcgUkVQTEFDRU1FTlQgT0JKRUNUUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsaW5rZ2l0OmdpdC1maWx0ZXItYnJhbmNoWzFdLCBsaW5rZ2l0OmdpdC1oYXNoLW9iamVjdFsxXSBhbmQKK2xpbmtnaXQ6Z2l0LXJlYmFzZVsxXSwgYW1vbmcgb3RoZXIgZ2l0IGNvbW1hbmRzLCBjYW4gYmUgdXNlZCB0byBjcmVhdGUKK3JlcGxhY2VtZW50IG9iamVjdHMgZnJvbSBleGlzdGluZyBvYmplY3RzLiBUaGUgYC0tZWRpdGAgb3B0aW9uIGNhbgorYWxzbyBiZSB1c2VkIHdpdGggJ2dpdCByZXBsYWNlJyB0byBjcmVhdGUgYSByZXBsYWNlbWVudCBvYmplY3QgYnkKK2VkaXRpbmcgYW4gZXhpc3Rpbmcgb2JqZWN0LgorCitJZiB5b3Ugd2FudCB0byByZXBsYWNlIG1hbnkgYmxvYnMsIHRyZWVzIG9yIGNvbW1pdHMgdGhhdCBhcmUgcGFydCBvZiBhCitzdHJpbmcgb2YgY29tbWl0cywgeW91IG1heSBqdXN0IHdhbnQgdG8gY3JlYXRlIGEgcmVwbGFjZW1lbnQgc3RyaW5nIG9mCitjb21taXRzIGFuZCB0aGVuIG9ubHkgcmVwbGFjZSB0aGUgY29tbWl0IGF0IHRoZSB0aXAgb2YgdGhlIHRhcmdldAorc3RyaW5nIG9mIGNvbW1pdHMgd2l0aCB0aGUgY29tbWl0IGF0IHRoZSB0aXAgb2YgdGhlIHJlcGxhY2VtZW50IHN0cmluZworb2YgY29tbWl0cy4KKworQlVHUworLS0tLQorQ29tcGFyaW5nIGJsb2JzIG9yIHRyZWVzIHRoYXQgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggdGhvc2UgdGhhdAorcmVwbGFjZSB0aGVtIHdpbGwgbm90IHdvcmsgcHJvcGVybHkuIEFuZCB1c2luZyBgZ2l0IHJlc2V0IC0taGFyZGAgdG8KK2dvIGJhY2sgdG8gYSByZXBsYWNlZCBjb21taXQgd2lsbCBtb3ZlIHRoZSBicmFuY2ggdG8gdGhlIHJlcGxhY2VtZW50Citjb21taXQgaW5zdGVhZCBvZiB0aGUgcmVwbGFjZWQgY29tbWl0LgorCitUaGVyZSBtYXkgYmUgb3RoZXIgcHJvYmxlbXMgd2hlbiB1c2luZyAnZ2l0IHJldi1saXN0JyByZWxhdGVkIHRvCitwZW5kaW5nIG9iamVjdHMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtaGFzaC1vYmplY3RbMV0KK2xpbmtnaXQ6Z2l0LWZpbHRlci1icmFuY2hbMV0KK2xpbmtnaXQ6Z2l0LXJlYmFzZVsxXQorbGlua2dpdDpnaXQtdGFnWzFdCitsaW5rZ2l0OmdpdC1icmFuY2hbMV0KK2xpbmtnaXQ6Z2l0LWNvbW1pdFsxXQorbGlua2dpdDpnaXQtdmFyWzFdCitsaW5rZ2l0OmdpdFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcXVlc3QtcHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXF1ZXN0LXB1bGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMmNiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXF1ZXN0LXB1bGwudHh0CkBAIC0wLDAgKzEsNzkgQEAKK2dpdC1yZXF1ZXN0LXB1bGwoMSkKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJlcXVlc3QtcHVsbCAtIEdlbmVyYXRlcyBhIHN1bW1hcnkgb2YgcGVuZGluZyBjaGFuZ2VzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZXF1ZXN0LXB1bGwnIFstcF0gPHN0YXJ0PiA8dXJsPiBbPGVuZD5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHZW5lcmF0ZSBhIHJlcXVlc3QgYXNraW5nIHlvdXIgdXBzdHJlYW0gcHJvamVjdCB0byBwdWxsIGNoYW5nZXMgaW50bwordGhlaXIgdHJlZS4gIFRoZSByZXF1ZXN0LCBwcmludGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQsCitiZWdpbnMgd2l0aCB0aGUgYnJhbmNoIGRlc2NyaXB0aW9uLCBzdW1tYXJpemVzCit0aGUgY2hhbmdlcyBhbmQgaW5kaWNhdGVzIGZyb20gd2hlcmUgdGhleSBjYW4gYmUgcHVsbGVkLgorCitUaGUgdXBzdHJlYW0gcHJvamVjdCBpcyBleHBlY3RlZCB0byBoYXZlIHRoZSBjb21taXQgbmFtZWQgYnkKK2A8c3RhcnQ+YCBhbmQgdGhlIG91dHB1dCBhc2tzIGl0IHRvIGludGVncmF0ZSB0aGUgY2hhbmdlcyB5b3UgbWFkZQorc2luY2UgdGhhdCBjb21taXQsIHVwIHRvIHRoZSBjb21taXQgbmFtZWQgYnkgYDxlbmQ+YCwgYnkgdmlzaXRpbmcKK3RoZSByZXBvc2l0b3J5IG5hbWVkIGJ5IGA8dXJsPmAuCisKKworT1BUSU9OUworLS0tLS0tLQorLXA6OgorCUluY2x1ZGUgcGF0Y2ggdGV4dCBpbiB0aGUgb3V0cHV0LgorCis8c3RhcnQ+OjoKKwlDb21taXQgdG8gc3RhcnQgYXQuICBUaGlzIG5hbWVzIGEgY29tbWl0IHRoYXQgaXMgYWxyZWFkeSBpbgorCXRoZSB1cHN0cmVhbSBoaXN0b3J5LgorCis8dXJsPjo6CisJVGhlIHJlcG9zaXRvcnkgVVJMIHRvIGJlIHB1bGxlZCBmcm9tLgorCis8ZW5kPjo6CisJQ29tbWl0IHRvIGVuZCBhdCAoZGVmYXVsdHMgdG8gSEVBRCkuICBUaGlzIG5hbWVzIHRoZSBjb21taXQKKwlhdCB0aGUgdGlwIG9mIHRoZSBoaXN0b3J5IHlvdSBhcmUgYXNraW5nIHRvIGJlIHB1bGxlZC4KKysKK1doZW4gdGhlIHJlcG9zaXRvcnkgbmFtZWQgYnkgYDx1cmw+YCBoYXMgdGhlIGNvbW1pdCBhdCBhIHRpcCBvZiBhCityZWYgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcmVmIHlvdSBoYXZlIGxvY2FsbHksIHlvdSBjYW4gdXNlIHRoZQorYDxsb2NhbD46PHJlbW90ZT5gIHN5bnRheCwgdG8gaGF2ZSBpdHMgbG9jYWwgbmFtZSwgYSBjb2xvbiBgOmAsIGFuZAoraXRzIHJlbW90ZSBuYW1lLgorCisKK0VYQU1QTEUKKy0tLS0tLS0KKworSW1hZ2luZSB0aGF0IHlvdSBidWlsdCB5b3VyIHdvcmsgb24geW91ciBgbWFzdGVyYCBicmFuY2ggb24gdG9wIG9mCit0aGUgYHYxLjBgIHJlbGVhc2UsIGFuZCB3YW50IGl0IHRvIGJlIGludGVncmF0ZWQgdG8gdGhlIHByb2plY3QuCitGaXJzdCB5b3UgcHVzaCB0aGF0IGNoYW5nZSB0byB5b3VyIHB1YmxpYyByZXBvc2l0b3J5IGZvciBvdGhlcnMgdG8KK3NlZToKKworCWdpdCBwdXNoIGh0dHBzOi8vZ2l0LmtvLnh6L3Byb2plY3QgbWFzdGVyCisKK1RoZW4sIHlvdSBydW4gdGhpcyBjb21tYW5kOgorCisJZ2l0IHJlcXVlc3QtcHVsbCB2MS4wIGh0dHBzOi8vZ2l0LmtvLnh6L3Byb2plY3QgbWFzdGVyCisKK3doaWNoIHdpbGwgcHJvZHVjZSBhIHJlcXVlc3QgdG8gdGhlIHVwc3RyZWFtLCBzdW1tYXJpemluZyB0aGUKK2NoYW5nZXMgYmV0d2VlbiB0aGUgYHYxLjBgIHJlbGVhc2UgYW5kIHlvdXIgYG1hc3RlcmAsIHRvIHB1bGwgaXQKK2Zyb20geW91ciBwdWJsaWMgcmVwb3NpdG9yeS4KKworSWYgeW91IHB1c2hlZCB5b3VyIGNoYW5nZSB0byBhIGJyYW5jaCB3aG9zZSBuYW1lIGlzIGRpZmZlcmVudCBmcm9tCit0aGUgb25lIHlvdSBoYXZlIGxvY2FsbHksIGUuZy4KKworCWdpdCBwdXNoIGh0dHBzOi8vZ2l0LmtvLnh6L3Byb2plY3QgbWFzdGVyOmZvci1saW51cworCit0aGVuIHlvdSBjYW4gYXNrIHRoYXQgdG8gYmUgcHVsbGVkIHdpdGgKKworCWdpdCByZXF1ZXN0LXB1bGwgdjEuMCBodHRwczovL2dpdC5rby54ei9wcm9qZWN0IG1hc3Rlcjpmb3ItbGludXMKKworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlcmVyZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZTA4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXJlcmUudHh0CkBAIC0wLDAgKzEsMjE2IEBACitnaXQtcmVyZXJlKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXJlcmUgLSBSZXVzZSByZWNvcmRlZCByZXNvbHV0aW9uIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCByZXJlcmUnIFsnY2xlYXInfCdmb3JnZXQnIDxwYXRoc3BlYz58J2RpZmYnfCdyZW1haW5pbmcnfCdzdGF0dXMnfCdnYyddCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitJbiBhIHdvcmtmbG93IGVtcGxveWluZyByZWxhdGl2ZWx5IGxvbmcgbGl2ZWQgdG9waWMgYnJhbmNoZXMsCit0aGUgZGV2ZWxvcGVyIHNvbWV0aW1lcyBuZWVkcyB0byByZXNvbHZlIHRoZSBzYW1lIGNvbmZsaWN0cyBvdmVyCithbmQgb3ZlciBhZ2FpbiB1bnRpbCB0aGUgdG9waWMgYnJhbmNoZXMgYXJlIGRvbmUgKGVpdGhlciBtZXJnZWQKK3RvIHRoZSAicmVsZWFzZSIgYnJhbmNoLCBvciBzZW50IG91dCBhbmQgYWNjZXB0ZWQgdXBzdHJlYW0pLgorCitUaGlzIGNvbW1hbmQgYXNzaXN0cyB0aGUgZGV2ZWxvcGVyIGluIHRoaXMgcHJvY2VzcyBieSByZWNvcmRpbmcKK2NvbmZsaWN0ZWQgYXV0b21lcmdlIHJlc3VsdHMgYW5kIGNvcnJlc3BvbmRpbmcgaGFuZCByZXNvbHZlIHJlc3VsdHMKK29uIHRoZSBpbml0aWFsIG1hbnVhbCBtZXJnZSwgYW5kIGFwcGx5aW5nIHByZXZpb3VzbHkgcmVjb3JkZWQKK2hhbmQgcmVzb2x1dGlvbnMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBhdXRvbWVyZ2UgcmVzdWx0cy4KKworW05PVEVdCitZb3UgbmVlZCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgcmVyZXJlLmVuYWJsZWQgaW4gb3JkZXIgdG8KK2VuYWJsZSB0aGlzIGNvbW1hbmQuCisKKworQ09NTUFORFMKKy0tLS0tLS0tCisKK05vcm1hbGx5LCAnZ2l0IHJlcmVyZScgaXMgcnVuIHdpdGhvdXQgYXJndW1lbnRzIG9yIHVzZXItaW50ZXJ2ZW50aW9uLgorSG93ZXZlciwgaXQgaGFzIHNldmVyYWwgY29tbWFuZHMgdGhhdCBhbGxvdyBpdCB0byBpbnRlcmFjdCB3aXRoCitpdHMgd29ya2luZyBzdGF0ZS4KKworJ2NsZWFyJzo6CisKK1Jlc2V0IHRoZSBtZXRhZGF0YSB1c2VkIGJ5IHJlcmVyZSBpZiBhIG1lcmdlIHJlc29sdXRpb24gaXMgdG8gYmUKK2Fib3J0ZWQuICBDYWxsaW5nICdnaXQgYW0gWy0tc2tpcHwtLWFib3J0XScgb3IgJ2dpdCByZWJhc2UgWy0tc2tpcHwtLWFib3J0XScKK3dpbGwgYXV0b21hdGljYWxseSBpbnZva2UgdGhpcyBjb21tYW5kLgorCisnZm9yZ2V0JyA8cGF0aHNwZWM+OjoKKworUmVzZXQgdGhlIGNvbmZsaWN0IHJlc29sdXRpb25zIHdoaWNoIHJlcmVyZSBoYXMgcmVjb3JkZWQgZm9yIHRoZSBjdXJyZW50Citjb25mbGljdCBpbiA8cGF0aHNwZWM+LgorCisnZGlmZic6OgorCitEaXNwbGF5IGRpZmZzIGZvciB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcmVzb2x1dGlvbi4gIEl0IGlzCit1c2VmdWwgZm9yIHRyYWNraW5nIHdoYXQgaGFzIGNoYW5nZWQgd2hpbGUgdGhlIHVzZXIgaXMgcmVzb2x2aW5nCitjb25mbGljdHMuICBBZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIHRoZSBzeXN0ZW0KKydkaWZmJyBjb21tYW5kIGluc3RhbGxlZCBpbiBQQVRILgorCisnc3RhdHVzJzo6CisKK1ByaW50IHBhdGhzIHdpdGggY29uZmxpY3RzIHdob3NlIG1lcmdlIHJlc29sdXRpb24gcmVyZXJlIHdpbGwgcmVjb3JkLgorCisncmVtYWluaW5nJzo6CisKK1ByaW50IHBhdGhzIHdpdGggY29uZmxpY3RzIHRoYXQgaGF2ZSBub3QgYmVlbiBhdXRvcmVzb2x2ZWQgYnkgcmVyZXJlLgorVGhpcyBpbmNsdWRlcyBwYXRocyB3aG9zZSByZXNvbHV0aW9ucyBjYW5ub3QgYmUgdHJhY2tlZCBieSByZXJlcmUsCitzdWNoIGFzIGNvbmZsaWN0aW5nIHN1Ym1vZHVsZXMuCisKKydnYyc6OgorCitQcnVuZSByZWNvcmRzIG9mIGNvbmZsaWN0ZWQgbWVyZ2VzIHRoYXQKK29jY3VycmVkIGEgbG9uZyB0aW1lIGFnby4gIEJ5IGRlZmF1bHQsIHVucmVzb2x2ZWQgY29uZmxpY3RzIG9sZGVyCit0aGFuIDE1IGRheXMgYW5kIHJlc29sdmVkIGNvbmZsaWN0cyBvbGRlciB0aGFuIDYwCitkYXlzIGFyZSBwcnVuZWQuICBUaGVzZSBkZWZhdWx0cyBhcmUgY29udHJvbGxlZCB2aWEgdGhlCitgZ2MucmVyZXJlVW5yZXNvbHZlZGAgYW5kIGBnYy5yZXJlcmVSZXNvbHZlZGAgY29uZmlndXJhdGlvbgordmFyaWFibGVzIHJlc3BlY3RpdmVseS4KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1doZW4geW91ciB0b3BpYyBicmFuY2ggbW9kaWZpZXMgYW4gb3ZlcmxhcHBpbmcgYXJlYSB0aGF0IHlvdXIKK21hc3RlciBicmFuY2ggKG9yIHVwc3RyZWFtKSB0b3VjaGVkIHNpbmNlIHlvdXIgdG9waWMgYnJhbmNoCitmb3JrZWQgZnJvbSBpdCwgeW91IG1heSB3YW50IHRvIHRlc3QgaXQgd2l0aCB0aGUgbGF0ZXN0IG1hc3RlciwKK2V2ZW4gYmVmb3JlIHlvdXIgdG9waWMgYnJhbmNoIGlzIHJlYWR5IHRvIGJlIHB1c2hlZCB1cHN0cmVhbToKKworLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgIG8tLS0qLS0tbyB0b3BpYworICAgICAgICAgICAgIC8KKyAgICBvLS0tby0tLW8tLS0qLS0tby0tLW8gbWFzdGVyCistLS0tLS0tLS0tLS0KKworRm9yIHN1Y2ggYSB0ZXN0LCB5b3UgbmVlZCB0byBtZXJnZSBtYXN0ZXIgYW5kIHRvcGljIHNvbWVob3cuCitPbmUgd2F5IHRvIGRvIGl0IGlzIHRvIHB1bGwgbWFzdGVyIGludG8gdGhlIHRvcGljIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tCisJJCBnaXQgY2hlY2tvdXQgdG9waWMKKwkkIGdpdCBtZXJnZSBtYXN0ZXIKKworICAgICAgICAgICAgICBvLS0tKi0tLW8tLS0rIHRvcGljCisgICAgICAgICAgICAgLyAgICAgICAgICAgLworICAgIG8tLS1vLS0tby0tLSotLS1vLS0tbyBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCitUaGUgY29tbWl0cyBtYXJrZWQgd2l0aCBgKmAgdG91Y2ggdGhlIHNhbWUgYXJlYSBpbiB0aGUgc2FtZQorZmlsZTsgeW91IG5lZWQgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3RzIHdoZW4gY3JlYXRpbmcgdGhlIGNvbW1pdAorbWFya2VkIHdpdGggYCtgLiAgVGhlbiB5b3UgY2FuIHRlc3QgdGhlIHJlc3VsdCB0byBtYWtlIHN1cmUgeW91cgord29yay1pbi1wcm9ncmVzcyBzdGlsbCB3b3JrcyB3aXRoIHdoYXQgaXMgaW4gdGhlIGxhdGVzdCBtYXN0ZXIuCisKK0FmdGVyIHRoaXMgdGVzdCBtZXJnZSwgdGhlcmUgYXJlIHR3byB3YXlzIHRvIGNvbnRpbnVlIHlvdXIgd29yaworb24gdGhlIHRvcGljLiAgVGhlIGVhc2llc3QgaXMgdG8gYnVpbGQgb24gdG9wIG9mIHRoZSB0ZXN0IG1lcmdlCitjb21taXQgYCtgLCBhbmQgd2hlbiB5b3VyIHdvcmsgaW4gdGhlIHRvcGljIGJyYW5jaCBpcyBmaW5hbGx5CityZWFkeSwgcHVsbCB0aGUgdG9waWMgYnJhbmNoIGludG8gbWFzdGVyLCBhbmQvb3IgYXNrIHRoZQordXBzdHJlYW0gdG8gcHVsbCBmcm9tIHlvdS4gIEJ5IHRoYXQgdGltZSwgaG93ZXZlciwgdGhlIG1hc3RlciBvcgordGhlIHVwc3RyZWFtIG1pZ2h0IGhhdmUgYmVlbiBhZHZhbmNlZCBzaW5jZSB0aGUgdGVzdCBtZXJnZSBgK2AsCitpbiB3aGljaCBjYXNlIHRoZSBmaW5hbCBjb21taXQgZ3JhcGggd291bGQgbG9vayBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorCSQgZ2l0IGNoZWNrb3V0IHRvcGljCisJJCBnaXQgbWVyZ2UgbWFzdGVyCisJJCAuLi4gd29yayBvbiBib3RoIHRvcGljIGFuZCBtYXN0ZXIgYnJhbmNoZXMKKwkkIGdpdCBjaGVja291dCBtYXN0ZXIKKwkkIGdpdCBtZXJnZSB0b3BpYworCisgICAgICAgICAgICAgIG8tLS0qLS0tby0tLSstLS1vLS0tbyB0b3BpYworICAgICAgICAgICAgIC8gICAgICAgICAgIC8gICAgICAgICBcCisgICAgby0tLW8tLS1vLS0tKi0tLW8tLS1vLS0tby0tLW8tLS0rIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK1doZW4geW91ciB0b3BpYyBicmFuY2ggaXMgbG9uZy1saXZlZCwgaG93ZXZlciwgeW91ciB0b3BpYyBicmFuY2gKK3dvdWxkIGVuZCB1cCBoYXZpbmcgbWFueSBzdWNoICJNZXJnZSBmcm9tIG1hc3RlciIgY29tbWl0cyBvbiBpdCwKK3doaWNoIHdvdWxkIHVubmVjZXNzYXJpbHkgY2x1dHRlciB0aGUgZGV2ZWxvcG1lbnQgaGlzdG9yeS4KK1JlYWRlcnMgb2YgdGhlIExpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3QgbWF5IHJlbWVtYmVyIHRoYXQgTGludXMKK2NvbXBsYWluZWQgYWJvdXQgc3VjaCB0b28gZnJlcXVlbnQgdGVzdCBtZXJnZXMgd2hlbiBhIHN1YnN5c3RlbQorbWFpbnRhaW5lciBhc2tlZCB0byBwdWxsIGZyb20gYSBicmFuY2ggZnVsbCBvZiAidXNlbGVzcyBtZXJnZXMiLgorCitBcyBhbiBhbHRlcm5hdGl2ZSwgdG8ga2VlcCB0aGUgdG9waWMgYnJhbmNoIGNsZWFuIG9mIHRlc3QKK21lcmdlcywgeW91IGNvdWxkIGJsb3cgYXdheSB0aGUgdGVzdCBtZXJnZSwgYW5kIGtlZXAgYnVpbGRpbmcgb24KK3RvcCBvZiB0aGUgdGlwIGJlZm9yZSB0aGUgdGVzdCBtZXJnZToKKworLS0tLS0tLS0tLS0tCisJJCBnaXQgY2hlY2tvdXQgdG9waWMKKwkkIGdpdCBtZXJnZSBtYXN0ZXIKKwkkIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gOyMgcmV3aW5kIHRoZSB0ZXN0IG1lcmdlCisJJCAuLi4gd29yayBvbiBib3RoIHRvcGljIGFuZCBtYXN0ZXIgYnJhbmNoZXMKKwkkIGdpdCBjaGVja291dCBtYXN0ZXIKKwkkIGdpdCBtZXJnZSB0b3BpYworCisgICAgICAgICAgICAgIG8tLS0qLS0tby0tLS0tLS1vLS0tbyB0b3BpYworICAgICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgICBcCisgICAgby0tLW8tLS1vLS0tKi0tLW8tLS1vLS0tby0tLW8tLS0rIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK1RoaXMgd291bGQgbGVhdmUgb25seSBvbmUgbWVyZ2UgY29tbWl0IHdoZW4geW91ciB0b3BpYyBicmFuY2ggaXMKK2ZpbmFsbHkgcmVhZHkgYW5kIG1lcmdlZCBpbnRvIHRoZSBtYXN0ZXIgYnJhbmNoLiAgVGhpcyBtZXJnZQord291bGQgcmVxdWlyZSB5b3UgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3QsIGludHJvZHVjZWQgYnkgdGhlCitjb21taXRzIG1hcmtlZCB3aXRoIGAqYC4gIEhvd2V2ZXIsIHRoaXMgY29uZmxpY3QgaXMgb2Z0ZW4gdGhlCitzYW1lIGNvbmZsaWN0IHlvdSByZXNvbHZlZCB3aGVuIHlvdSBjcmVhdGVkIHRoZSB0ZXN0IG1lcmdlIHlvdQorYmxldyBhd2F5LiAgJ2dpdCByZXJlcmUnIGhlbHBzIHlvdSByZXNvbHZlIHRoaXMgZmluYWwKK2NvbmZsaWN0ZWQgbWVyZ2UgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGZyb20geW91ciBlYXJsaWVyIGhhbmQKK3Jlc29sdmUuCisKK1J1bm5pbmcgdGhlICdnaXQgcmVyZXJlJyBjb21tYW5kIGltbWVkaWF0ZWx5IGFmdGVyIGEgY29uZmxpY3RlZAorYXV0b21lcmdlIHJlY29yZHMgdGhlIGNvbmZsaWN0ZWQgd29ya2luZyB0cmVlIGZpbGVzLCB3aXRoIHRoZQordXN1YWwgY29uZmxpY3QgbWFya2VycyBgPDw8PDw8PGAsIGA9PT09PT09YCwgYW5kIGA+Pj4+Pj4+YCBpbgordGhlbS4gIExhdGVyLCBhZnRlciB5b3UgYXJlIGRvbmUgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsCitydW5uaW5nICdnaXQgcmVyZXJlJyBhZ2FpbiB3aWxsIHJlY29yZCB0aGUgcmVzb2x2ZWQgc3RhdGUgb2YgdGhlc2UKK2ZpbGVzLiAgU3VwcG9zZSB5b3UgZGlkIHRoaXMgd2hlbiB5b3UgY3JlYXRlZCB0aGUgdGVzdCBtZXJnZSBvZgorbWFzdGVyIGludG8gdGhlIHRvcGljIGJyYW5jaC4KKworTmV4dCB0aW1lLCBhZnRlciBzZWVpbmcgdGhlIHNhbWUgY29uZmxpY3RlZCBhdXRvbWVyZ2UsCitydW5uaW5nICdnaXQgcmVyZXJlJyB3aWxsIHBlcmZvcm0gYSB0aHJlZS13YXkgbWVyZ2UgYmV0d2VlbiB0aGUKK2VhcmxpZXIgY29uZmxpY3RlZCBhdXRvbWVyZ2UsIHRoZSBlYXJsaWVyIG1hbnVhbCByZXNvbHV0aW9uLCBhbmQKK3RoZSBjdXJyZW50IGNvbmZsaWN0ZWQgYXV0b21lcmdlLgorSWYgdGhpcyB0aHJlZS13YXkgbWVyZ2UgcmVzb2x2ZXMgY2xlYW5seSwgdGhlIHJlc3VsdCBpcyB3cml0dGVuCitvdXQgdG8geW91ciB3b3JraW5nIHRyZWUgZmlsZSwgc28geW91IGRvIG5vdCBoYXZlIHRvIG1hbnVhbGx5CityZXNvbHZlIGl0LiAgTm90ZSB0aGF0ICdnaXQgcmVyZXJlJyBsZWF2ZXMgdGhlIGluZGV4IGZpbGUgYWxvbmUsCitzbyB5b3Ugc3RpbGwgbmVlZCB0byBkbyB0aGUgZmluYWwgc2FuaXR5IGNoZWNrcyB3aXRoIGBnaXQgZGlmZmAKKyhvciBgZ2l0IGRpZmYgLWNgKSBhbmQgJ2dpdCBhZGQnIHdoZW4geW91IGFyZSBzYXRpc2ZpZWQuCisKK0FzIGEgY29udmVuaWVuY2UgbWVhc3VyZSwgJ2dpdCBtZXJnZScgYXV0b21hdGljYWxseSBpbnZva2VzCisnZ2l0IHJlcmVyZScgdXBvbiBleGl0aW5nIHdpdGggYSBmYWlsZWQgYXV0b21lcmdlIGFuZCAnZ2l0IHJlcmVyZScKK3JlY29yZHMgdGhlIGhhbmQgcmVzb2x2ZSB3aGVuIGl0IGlzIGEgbmV3IGNvbmZsaWN0LCBvciByZXVzZXMgdGhlIGVhcmxpZXIgaGFuZAorcmVzb2x2ZSB3aGVuIGl0IGlzIG5vdC4gICdnaXQgY29tbWl0JyBhbHNvIGludm9rZXMgJ2dpdCByZXJlcmUnCit3aGVuIGNvbW1pdHRpbmcgYSBtZXJnZSByZXN1bHQuICBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB5b3UgZG8KK25vdCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgeW91cnNlbGYgKGJlc2lkZXMgZW5hYmxpbmcKK3RoZSByZXJlcmUuZW5hYmxlZCBjb25maWcgdmFyaWFibGUpLgorCitJbiBvdXIgZXhhbXBsZSwgd2hlbiB5b3UgZG8gdGhlIHRlc3QgbWVyZ2UsIHRoZSBtYW51YWwKK3Jlc29sdXRpb24gaXMgcmVjb3JkZWQsIGFuZCBpdCB3aWxsIGJlIHJldXNlZCB3aGVuIHlvdSBkbyB0aGUKK2FjdHVhbCBtZXJnZSBsYXRlciB3aXRoIHRoZSB1cGRhdGVkIG1hc3RlciBhbmQgdG9waWMgYnJhbmNoLCBhcyBsb25nCithcyB0aGUgcmVjb3JkZWQgcmVzb2x1dGlvbiBpcyBzdGlsbCBhcHBsaWNhYmxlLgorCitUaGUgaW5mb3JtYXRpb24gJ2dpdCByZXJlcmUnIHJlY29yZHMgaXMgYWxzbyB1c2VkIHdoZW4gcnVubmluZworJ2dpdCByZWJhc2UnLiAgQWZ0ZXIgYmxvd2luZyBhd2F5IHRoZSB0ZXN0IG1lcmdlIGFuZCBjb250aW51aW5nCitkZXZlbG9wbWVudCBvbiB0aGUgdG9waWMgYnJhbmNoOgorCistLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgby0tLSotLS1vLS0tLS0tLW8tLS1vIHRvcGljCisgICAgICAgICAgICAgLworICAgIG8tLS1vLS0tby0tLSotLS1vLS0tby0tLW8tLS1vICAgbWFzdGVyCisKKwkkIGdpdCByZWJhc2UgbWFzdGVyIHRvcGljCisKKwkJCQkgIG8tLS0qLS0tby0tLS0tLS1vLS0tbyB0b3BpYworCQkJCSAvCisgICAgby0tLW8tLS1vLS0tKi0tLW8tLS1vLS0tby0tLW8gICBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorCit5b3UgY291bGQgcnVuIGBnaXQgcmViYXNlIG1hc3RlciB0b3BpY2AsIHRvIGJyaW5nIHlvdXJzZWxmCit1cC10by1kYXRlIGJlZm9yZSB5b3VyIHRvcGljIGlzIHJlYWR5IHRvIGJlIHNlbnQgdXBzdHJlYW0uCitUaGlzIHdvdWxkIHJlc3VsdCBpbiBmYWxsaW5nIGJhY2sgdG8gYSB0aHJlZS13YXkgbWVyZ2UsIGFuZCBpdAord291bGQgY29uZmxpY3QgdGhlIHNhbWUgd2F5IGFzIHRoZSB0ZXN0IG1lcmdlIHlvdSByZXNvbHZlZCBlYXJsaWVyLgorJ2dpdCByZXJlcmUnIHdpbGwgYmUgcnVuIGJ5ICdnaXQgcmViYXNlJyB0byBoZWxwIHlvdSByZXNvbHZlIHRoaXMKK2NvbmZsaWN0LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJlc2V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTQzMmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmVzZXQudHh0CkBAIC0wLDAgKzEsNDA2IEBACitnaXQtcmVzZXQoMSkKKz09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmVzZXQgLSBSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVzZXQnIFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzPi4uLgorJ2dpdCByZXNldCcgKC0tcGF0Y2ggfCAtcCkgWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRocz4uLi5dCisnZ2l0IHJlc2V0JyBbLS1zb2Z0IHwgLS1taXhlZCBbLU5dIHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorSW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgZm9ybSwgY29weSBlbnRyaWVzIGZyb20gPHRyZWUtaXNoPiB0byB0aGUgaW5kZXguCitJbiB0aGUgdGhpcmQgZm9ybSwgc2V0IHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkIChIRUFEKSB0byA8Y29tbWl0Piwgb3B0aW9uYWxseQorbW9kaWZ5aW5nIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgdG8gbWF0Y2guICBUaGUgPHRyZWUtaXNoPi88Y29tbWl0PiBkZWZhdWx0cwordG8gSEVBRCBpbiBhbGwgZm9ybXMuCisKKydnaXQgcmVzZXQnIFstcV0gWzx0cmVlLWlzaD5dIFstLV0gPHBhdGhzPi4uLjo6CisJVGhpcyBmb3JtIHJlc2V0cyB0aGUgaW5kZXggZW50cmllcyBmb3IgYWxsIDxwYXRocz4gdG8gdGhlaXIKKwlzdGF0ZSBhdCA8dHJlZS1pc2g+LiAgKEl0IGRvZXMgbm90IGFmZmVjdCB0aGUgd29ya2luZyB0cmVlIG9yCisJdGhlIGN1cnJlbnQgYnJhbmNoLikKKysKK1RoaXMgbWVhbnMgdGhhdCBgZ2l0IHJlc2V0IDxwYXRocz5gIGlzIHRoZSBvcHBvc2l0ZSBvZiBgZ2l0IGFkZAorPHBhdGhzPmAuCisrCitBZnRlciBydW5uaW5nIGBnaXQgcmVzZXQgPHBhdGhzPmAgdG8gdXBkYXRlIHRoZSBpbmRleCBlbnRyeSwgeW91IGNhbgordXNlIGxpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvdXQgb2YgdGhlIGluZGV4IHRvCit0aGUgd29ya2luZyB0cmVlLgorQWx0ZXJuYXRpdmVseSwgdXNpbmcgbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0gYW5kIHNwZWNpZnlpbmcgYSBjb21taXQsIHlvdQorY2FuIGNvcHkgdGhlIGNvbnRlbnRzIG9mIGEgcGF0aCBvdXQgb2YgYSBjb21taXQgdG8gdGhlIGluZGV4IGFuZCB0byB0aGUKK3dvcmtpbmcgdHJlZSBpbiBvbmUgZ28uCisKKydnaXQgcmVzZXQnICgtLXBhdGNoIHwgLXApIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHM+Li4uXTo6CisJSW50ZXJhY3RpdmVseSBzZWxlY3QgaHVua3MgaW4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5kZXgKKwlhbmQgPHRyZWUtaXNoPiAoZGVmYXVsdHMgdG8gSEVBRCkuICBUaGUgY2hvc2VuIGh1bmtzIGFyZSBhcHBsaWVkCisJaW4gcmV2ZXJzZSB0byB0aGUgaW5kZXguCisrCitUaGlzIG1lYW5zIHRoYXQgYGdpdCByZXNldCAtcGAgaXMgdGhlIG9wcG9zaXRlIG9mIGBnaXQgYWRkIC1wYCwgaS5lLgoreW91IGNhbiB1c2UgaXQgdG8gc2VsZWN0aXZlbHkgcmVzZXQgaHVua3MuIFNlZSB0aGUgYGBJbnRlcmFjdGl2ZSBNb2RlJycKK3NlY3Rpb24gb2YgbGlua2dpdDpnaXQtYWRkWzFdIHRvIGxlYXJuIGhvdyB0byBvcGVyYXRlIHRoZSBgLS1wYXRjaGAgbW9kZS4KKworJ2dpdCByZXNldCcgWzxtb2RlPl0gWzxjb21taXQ+XTo6CisJVGhpcyBmb3JtIHJlc2V0cyB0aGUgY3VycmVudCBicmFuY2ggaGVhZCB0byA8Y29tbWl0PiBhbmQKKwlwb3NzaWJseSB1cGRhdGVzIHRoZSBpbmRleCAocmVzZXR0aW5nIGl0IHRvIHRoZSB0cmVlIG9mIDxjb21taXQ+KSBhbmQKKwl0aGUgd29ya2luZyB0cmVlIGRlcGVuZGluZyBvbiA8bW9kZT4uIElmIDxtb2RlPiBpcyBvbWl0dGVkLAorCWRlZmF1bHRzIHRvICItLW1peGVkIi4gVGhlIDxtb2RlPiBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorKworLS0KKy0tc29mdDo6CisJRG9lcyBub3QgdG91Y2ggdGhlIGluZGV4IGZpbGUgb3IgdGhlIHdvcmtpbmcgdHJlZSBhdCBhbGwgKGJ1dAorCXJlc2V0cyB0aGUgaGVhZCB0byA8Y29tbWl0PiwganVzdCBsaWtlIGFsbCBtb2RlcyBkbykuIFRoaXMgbGVhdmVzCisJYWxsIHlvdXIgY2hhbmdlZCBmaWxlcyAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQiLCBhcyAnZ2l0IHN0YXR1cycKKwl3b3VsZCBwdXQgaXQuCisKKy0tbWl4ZWQ6OgorCVJlc2V0cyB0aGUgaW5kZXggYnV0IG5vdCB0aGUgd29ya2luZyB0cmVlIChpLmUuLCB0aGUgY2hhbmdlZCBmaWxlcworCWFyZSBwcmVzZXJ2ZWQgYnV0IG5vdCBtYXJrZWQgZm9yIGNvbW1pdCkgYW5kIHJlcG9ydHMgd2hhdCBoYXMgbm90CisJYmVlbiB1cGRhdGVkLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGFjdGlvbi4KKysKK0lmIGAtTmAgaXMgc3BlY2lmaWVkLCByZW1vdmVkIHBhdGhzIGFyZSBtYXJrZWQgYXMgaW50ZW50LXRvLWFkZCAoc2VlCitsaW5rZ2l0OmdpdC1hZGRbMV0pLgorCistLWhhcmQ6OgorCVJlc2V0cyB0aGUgaW5kZXggYW5kIHdvcmtpbmcgdHJlZS4gQW55IGNoYW5nZXMgdG8gdHJhY2tlZCBmaWxlcyBpbiB0aGUKKwl3b3JraW5nIHRyZWUgc2luY2UgPGNvbW1pdD4gYXJlIGRpc2NhcmRlZC4KKworLS1tZXJnZTo6CisJUmVzZXRzIHRoZSBpbmRleCBhbmQgdXBkYXRlcyB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0aGF0IGFyZQorCWRpZmZlcmVudCBiZXR3ZWVuIDxjb21taXQ+IGFuZCBIRUFELCBidXQga2VlcHMgdGhvc2Ugd2hpY2ggYXJlCisJZGlmZmVyZW50IGJldHdlZW4gdGhlIGluZGV4IGFuZCB3b3JraW5nIHRyZWUgKGkuZS4gd2hpY2ggaGF2ZSBjaGFuZ2VzCisJd2hpY2ggaGF2ZSBub3QgYmVlbiBhZGRlZCkuCisJSWYgYSBmaWxlIHRoYXQgaXMgZGlmZmVyZW50IGJldHdlZW4gPGNvbW1pdD4gYW5kIHRoZSBpbmRleCBoYXMgdW5zdGFnZWQKKwljaGFuZ2VzLCByZXNldCBpcyBhYm9ydGVkLgorKworSW4gb3RoZXIgd29yZHMsIC0tbWVyZ2UgZG9lcyBzb21ldGhpbmcgbGlrZSBhICdnaXQgcmVhZC10cmVlIC11IC1tIDxjb21taXQ+JywKK2J1dCBjYXJyaWVzIGZvcndhcmQgdW5tZXJnZWQgaW5kZXggZW50cmllcy4KKworLS1rZWVwOjoKKwlSZXNldHMgaW5kZXggZW50cmllcyBhbmQgdXBkYXRlcyBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgYXJlCisJZGlmZmVyZW50IGJldHdlZW4gPGNvbW1pdD4gYW5kIEhFQUQuCisJSWYgYSBmaWxlIHRoYXQgaXMgZGlmZmVyZW50IGJldHdlZW4gPGNvbW1pdD4gYW5kIEhFQUQgaGFzIGxvY2FsIGNoYW5nZXMsCisJcmVzZXQgaXMgYWJvcnRlZC4KKy0tCisKK0lmIHlvdSB3YW50IHRvIHVuZG8gYSBjb21taXQgb3RoZXIgdGhhbiB0aGUgbGF0ZXN0IG9uIGEgYnJhbmNoLAorbGlua2dpdDpnaXQtcmV2ZXJ0WzFdIGlzIHlvdXIgZnJpZW5kLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworLXE6OgorLS1xdWlldDo6CisJQmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycy4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworVW5kbyBhZGQ6OgorKworLS0tLS0tLS0tLS0tCiskIGVkaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDE+CiskIGdpdCBhZGQgZnJvdHouYyBmaWxmcmUuYworJCBtYWlseCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwyPgorJCBnaXQgcmVzZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwzPgorJCBnaXQgcHVsbCBnaXQ6Ly9pbmZvLmV4YW1wbGUuY29tLyBuaXRmb2wgIDw0PgorLS0tLS0tLS0tLS0tCisrCis8MT4gWW91IGFyZSBoYXBwaWx5IHdvcmtpbmcgb24gc29tZXRoaW5nLCBhbmQgZmluZCB0aGUgY2hhbmdlcworaW4gdGhlc2UgZmlsZXMgYXJlIGluIGdvb2Qgb3JkZXIuICBZb3UgZG8gbm90IHdhbnQgdG8gc2VlIHRoZW0KK3doZW4geW91IHJ1biAiZ2l0IGRpZmYiLCBiZWNhdXNlIHlvdSBwbGFuIHRvIHdvcmsgb24gb3RoZXIgZmlsZXMKK2FuZCBjaGFuZ2VzIHdpdGggdGhlc2UgZmlsZXMgYXJlIGRpc3RyYWN0aW5nLgorPDI+IFNvbWVib2R5IGFza3MgeW91IHRvIHB1bGwsIGFuZCB0aGUgY2hhbmdlcyBzb3VuZHMgd29ydGh5IG9mIG1lcmdpbmcuCis8Mz4gSG93ZXZlciwgeW91IGFscmVhZHkgZGlydGllZCB0aGUgaW5kZXggKGkuZS4geW91ciBpbmRleCBkb2VzCitub3QgbWF0Y2ggdGhlIEhFQUQgY29tbWl0KS4gIEJ1dCB5b3Uga25vdyB0aGUgcHVsbCB5b3UgYXJlIGdvaW5nCit0byBtYWtlIGRvZXMgbm90IGFmZmVjdCBmcm90ei5jIG9yIGZpbGZyZS5jLCBzbyB5b3UgcmV2ZXJ0IHRoZQoraW5kZXggY2hhbmdlcyBmb3IgdGhlc2UgdHdvIGZpbGVzLiAgWW91ciBjaGFuZ2VzIGluIHdvcmtpbmcgdHJlZQorcmVtYWluIHRoZXJlLgorPDQ+IFRoZW4geW91IGNhbiBwdWxsIGFuZCBtZXJnZSwgbGVhdmluZyBmcm90ei5jIGFuZCBmaWxmcmUuYworY2hhbmdlcyBzdGlsbCBpbiB0aGUgd29ya2luZyB0cmVlLgorCitVbmRvIGEgY29tbWl0IGFuZCByZWRvOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC4uLgorJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReICAgICAgPDE+CiskIGVkaXQgICAgICAgICAgICAgICAgICAgICAgICA8Mj4KKyQgZ2l0IGNvbW1pdCAtYSAtYyBPUklHX0hFQUQgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gVGhpcyBpcyBtb3N0IG9mdGVuIGRvbmUgd2hlbiB5b3UgcmVtZW1iZXJlZCB3aGF0IHlvdQoranVzdCBjb21taXR0ZWQgaXMgaW5jb21wbGV0ZSwgb3IgeW91IG1pc3NwZWxsZWQgeW91ciBjb21taXQKK21lc3NhZ2UsIG9yIGJvdGguICBMZWF2ZXMgd29ya2luZyB0cmVlIGFzIGl0IHdhcyBiZWZvcmUgInJlc2V0Ii4KKzwyPiBNYWtlIGNvcnJlY3Rpb25zIHRvIHdvcmtpbmcgdHJlZSBmaWxlcy4KKzwzPiAicmVzZXQiIGNvcGllcyB0aGUgb2xkIGhlYWQgdG8gLmdpdC9PUklHX0hFQUQ7IHJlZG8gdGhlCitjb21taXQgYnkgc3RhcnRpbmcgd2l0aCBpdHMgbG9nIG1lc3NhZ2UuICBJZiB5b3UgZG8gbm90IG5lZWQgdG8KK2VkaXQgdGhlIG1lc3NhZ2UgZnVydGhlciwgeW91IGNhbiBnaXZlIC1DIG9wdGlvbiBpbnN0ZWFkLgorKworU2VlIGFsc28gdGhlIC0tYW1lbmQgb3B0aW9uIHRvIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXS4KKworVW5kbyBhIGNvbW1pdCwgbWFraW5nIGl0IGEgdG9waWMgYnJhbmNoOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIHRvcGljL3dpcCAgICAgPDE+CiskIGdpdCByZXNldCAtLWhhcmQgSEVBRH4zICA8Mj4KKyQgZ2l0IGNoZWNrb3V0IHRvcGljL3dpcCAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gWW91IGhhdmUgbWFkZSBzb21lIGNvbW1pdHMsIGJ1dCByZWFsaXplIHRoZXkgd2VyZSBwcmVtYXR1cmUKK3RvIGJlIGluIHRoZSAibWFzdGVyIiBicmFuY2guICBZb3Ugd2FudCB0byBjb250aW51ZSBwb2xpc2hpbmcKK3RoZW0gaW4gYSB0b3BpYyBicmFuY2gsIHNvIGNyZWF0ZSAidG9waWMvd2lwIiBicmFuY2ggb2ZmIG9mIHRoZQorY3VycmVudCBIRUFELgorPDI+IFJld2luZCB0aGUgbWFzdGVyIGJyYW5jaCB0byBnZXQgcmlkIG9mIHRob3NlIHRocmVlIGNvbW1pdHMuCis8Mz4gU3dpdGNoIHRvICJ0b3BpYy93aXAiIGJyYW5jaCBhbmQga2VlcCB3b3JraW5nLgorCitVbmRvIGNvbW1pdHMgcGVybWFuZW50bHk6OgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLi4uCiskIGdpdCByZXNldCAtLWhhcmQgSEVBRH4zICAgPDE+CistLS0tLS0tLS0tLS0KKysKKzwxPiBUaGUgbGFzdCB0aHJlZSBjb21taXRzIChIRUFELCBIRUFEXiwgYW5kIEhFQUR+Mikgd2VyZSBiYWQKK2FuZCB5b3UgZG8gbm90IHdhbnQgdG8gZXZlciBzZWUgdGhlbSBhZ2Fpbi4gIERvICpub3QqIGRvIHRoaXMgaWYKK3lvdSBoYXZlIGFscmVhZHkgZ2l2ZW4gdGhlc2UgY29tbWl0cyB0byBzb21lYm9keSBlbHNlLiAgKFNlZSB0aGUKKyJSRUNPVkVSSU5HIEZST00gVVBTVFJFQU0gUkVCQVNFIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXSBmb3IKK3RoZSBpbXBsaWNhdGlvbnMgb2YgZG9pbmcgc28uKQorCitVbmRvIGEgbWVyZ2Ugb3IgcHVsbDo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgICAgICAgICAgICAgICAgICAgICAgICAgPDE+CitBdXRvLW1lcmdpbmcgbml0Zm9sCitDT05GTElDVCAoY29udGVudCk6IE1lcmdlIGNvbmZsaWN0IGluIG5pdGZvbAorQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC4KKyQgZ2l0IHJlc2V0IC0taGFyZCAgICAgICAgICAgICAgICAgPDI+CiskIGdpdCBwdWxsIC4gdG9waWMvYnJhbmNoICAgICAgICAgIDwzPgorVXBkYXRpbmcgZnJvbSA0MTIyMy4uLiB0byAxMzEzNC4uLgorRmFzdC1mb3J3YXJkCiskIGdpdCByZXNldCAtLWhhcmQgT1JJR19IRUFEICAgICAgIDw0PgorLS0tLS0tLS0tLS0tCisrCis8MT4gVHJ5IHRvIHVwZGF0ZSBmcm9tIHRoZSB1cHN0cmVhbSByZXN1bHRlZCBpbiBhIGxvdCBvZgorY29uZmxpY3RzOyB5b3Ugd2VyZSBub3QgcmVhZHkgdG8gc3BlbmQgYSBsb3Qgb2YgdGltZSBtZXJnaW5nCityaWdodCBub3csIHNvIHlvdSBkZWNpZGUgdG8gZG8gdGhhdCBsYXRlci4KKzwyPiAicHVsbCIgaGFzIG5vdCBtYWRlIG1lcmdlIGNvbW1pdCwgc28gImdpdCByZXNldCAtLWhhcmQiCit3aGljaCBpcyBhIHN5bm9ueW0gZm9yICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiIGNsZWFycyB0aGUgbWVzcworZnJvbSB0aGUgaW5kZXggZmlsZSBhbmQgdGhlIHdvcmtpbmcgdHJlZS4KKzwzPiBNZXJnZSBhIHRvcGljIGJyYW5jaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCwgd2hpY2ggcmVzdWx0ZWQKK2luIGEgZmFzdC1mb3J3YXJkLgorPDQ+IEJ1dCB5b3UgZGVjaWRlZCB0aGF0IHRoZSB0b3BpYyBicmFuY2ggaXMgbm90IHJlYWR5IGZvciBwdWJsaWMKK2NvbnN1bXB0aW9uIHlldC4gICJwdWxsIiBvciAibWVyZ2UiIGFsd2F5cyBsZWF2ZXMgdGhlIG9yaWdpbmFsCit0aXAgb2YgdGhlIGN1cnJlbnQgYnJhbmNoIGluIE9SSUdfSEVBRCwgc28gcmVzZXR0aW5nIGhhcmQgdG8gaXQKK2JyaW5ncyB5b3VyIGluZGV4IGZpbGUgYW5kIHRoZSB3b3JraW5nIHRyZWUgYmFjayB0byB0aGF0IHN0YXRlLAorYW5kIHJlc2V0cyB0aGUgdGlwIG9mIHRoZSBicmFuY2ggdG8gdGhhdCBjb21taXQuCisKK1VuZG8gYSBtZXJnZSBvciBwdWxsIGluc2lkZSBhIGRpcnR5IHdvcmtpbmcgdHJlZTo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgICAgICAgICAgICAgICAgICAgICAgICAgPDE+CitBdXRvLW1lcmdpbmcgbml0Zm9sCitNZXJnZSBtYWRlIGJ5IHJlY3Vyc2l2ZS4KKyBuaXRmb2wgICAgICAgICAgICAgICAgfCAgIDIwICsrKysrLS0tLQorIC4uLgorJCBnaXQgcmVzZXQgLS1tZXJnZSBPUklHX0hFQUQgICAgICA8Mj4KKy0tLS0tLS0tLS0tLQorKworPDE+IEV2ZW4gaWYgeW91IG1heSBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnMgaW4geW91cgord29ya2luZyB0cmVlLCB5b3UgY2FuIHNhZmVseSBzYXkgImdpdCBwdWxsIiB3aGVuIHlvdSBrbm93Cit0aGF0IHRoZSBjaGFuZ2UgaW4gdGhlIG90aGVyIGJyYW5jaCBkb2VzIG5vdCBvdmVybGFwIHdpdGgKK3RoZW0uCis8Mj4gQWZ0ZXIgaW5zcGVjdGluZyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZSwgeW91IG1heSBmaW5kCit0aGF0IHRoZSBjaGFuZ2UgaW4gdGhlIG90aGVyIGJyYW5jaCBpcyB1bnNhdGlzZmFjdG9yeS4gIFJ1bm5pbmcKKyJnaXQgcmVzZXQgLS1oYXJkIE9SSUdfSEVBRCIgd2lsbCBsZXQgeW91IGdvIGJhY2sgdG8gd2hlcmUgeW91Cit3ZXJlLCBidXQgaXQgd2lsbCBkaXNjYXJkIHlvdXIgbG9jYWwgY2hhbmdlcywgd2hpY2ggeW91IGRvIG5vdAord2FudC4gICJnaXQgcmVzZXQgLS1tZXJnZSIga2VlcHMgeW91ciBsb2NhbCBjaGFuZ2VzLgorCisKK0ludGVycnVwdGVkIHdvcmtmbG93OjoKKysKK1N1cHBvc2UgeW91IGFyZSBpbnRlcnJ1cHRlZCBieSBhbiB1cmdlbnQgZml4IHJlcXVlc3Qgd2hpbGUgeW91CithcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGxhcmdlIGNoYW5nZS4gIFRoZSBmaWxlcyBpbiB5b3VyCit3b3JraW5nIHRyZWUgYXJlIG5vdCBpbiBhbnkgc2hhcGUgdG8gYmUgY29tbWl0dGVkIHlldCwgYnV0IHlvdQorbmVlZCB0byBnZXQgdG8gdGhlIG90aGVyIGJyYW5jaCBmb3IgYSBxdWljayBidWdmaXguCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IGZlYXR1cmUgOyMgeW91IHdlcmUgd29ya2luZyBpbiAiZmVhdHVyZSIgYnJhbmNoIGFuZAorJCB3b3JrIHdvcmsgd29yayAgICAgICA7IyBnb3QgaW50ZXJydXB0ZWQKKyQgZ2l0IGNvbW1pdCAtYSAtbSAic25hcHNob3QgV0lQIiAgICAgICAgICAgICAgICAgPDE+CiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZml4IGZpeCBmaXgKKyQgZ2l0IGNvbW1pdCA7IyBjb21taXQgd2l0aCByZWFsIGxvZworJCBnaXQgY2hlY2tvdXQgZmVhdHVyZQorJCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReIDsjIGdvIGJhY2sgdG8gV0lQIHN0YXRlICA8Mj4KKyQgZ2l0IHJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDM+CistLS0tLS0tLS0tLS0KKysKKzwxPiBUaGlzIGNvbW1pdCB3aWxsIGdldCBibG93biBhd2F5IHNvIGEgdGhyb3ctYXdheSBsb2cgbWVzc2FnZSBpcyBPSy4KKzwyPiBUaGlzIHJlbW92ZXMgdGhlICdXSVAnIGNvbW1pdCBmcm9tIHRoZSBjb21taXQgaGlzdG9yeSwgYW5kIHNldHMKKyAgICB5b3VyIHdvcmtpbmcgdHJlZSB0byB0aGUgc3RhdGUganVzdCBiZWZvcmUgeW91IG1hZGUgdGhhdCBzbmFwc2hvdC4KKzwzPiBBdCB0aGlzIHBvaW50IHRoZSBpbmRleCBmaWxlIHN0aWxsIGhhcyBhbGwgdGhlIFdJUCBjaGFuZ2VzIHlvdQorICAgIGNvbW1pdHRlZCBhcyAnc25hcHNob3QgV0lQJy4gIFRoaXMgdXBkYXRlcyB0aGUgaW5kZXggdG8gc2hvdyB5b3VyCisgICAgV0lQIGZpbGVzIGFzIHVuY29tbWl0dGVkLgorKworU2VlIGFsc28gbGlua2dpdDpnaXQtc3Rhc2hbMV0uCisKK1Jlc2V0IGEgc2luZ2xlIGZpbGUgaW4gdGhlIGluZGV4OjoKKysKK1N1cHBvc2UgeW91IGhhdmUgYWRkZWQgYSBmaWxlIHRvIHlvdXIgaW5kZXgsIGJ1dCBsYXRlciBkZWNpZGUgeW91IGRvIG5vdAord2FudCB0byBhZGQgaXQgdG8geW91ciBjb21taXQuIFlvdSBjYW4gcmVtb3ZlIHRoZSBmaWxlIGZyb20gdGhlIGluZGV4Cit3aGlsZSBrZWVwaW5nIHlvdXIgY2hhbmdlcyB3aXRoIGdpdCByZXNldC4KKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVzZXQgLS0gZnJvdHouYyAgICAgICAgICAgICAgICAgICAgICA8MT4KKyQgZ2l0IGNvbW1pdCAtbSAiQ29tbWl0IGZpbGVzIGluIGluZGV4IiAgICAgPDI+CiskIGdpdCBhZGQgZnJvdHouYyAgICAgICAgICAgICAgICAgICAgICAgICAgIDwzPgorLS0tLS0tLS0tLS0tCisrCis8MT4gVGhpcyByZW1vdmVzIHRoZSBmaWxlIGZyb20gdGhlIGluZGV4IHdoaWxlIGtlZXBpbmcgaXQgaW4gdGhlIHdvcmtpbmcKKyAgICBkaXJlY3RvcnkuCis8Mj4gVGhpcyBjb21taXRzIGFsbCBvdGhlciBjaGFuZ2VzIGluIHRoZSBpbmRleC4KKzwzPiBBZGRzIHRoZSBmaWxlIHRvIHRoZSBpbmRleCBhZ2Fpbi4KKworS2VlcCBjaGFuZ2VzIGluIHdvcmtpbmcgdHJlZSB3aGlsZSBkaXNjYXJkaW5nIHNvbWUgcHJldmlvdXMgY29tbWl0czo6CisrCitTdXBwb3NlIHlvdSBhcmUgd29ya2luZyBvbiBzb21ldGhpbmcgYW5kIHlvdSBjb21taXQgaXQsIGFuZCB0aGVuIHlvdQorY29udGludWUgd29ya2luZyBhIGJpdCBtb3JlLCBidXQgbm93IHlvdSB0aGluayB0aGF0IHdoYXQgeW91IGhhdmUgaW4KK3lvdXIgd29ya2luZyB0cmVlIHNob3VsZCBiZSBpbiBhbm90aGVyIGJyYW5jaCB0aGF0IGhhcyBub3RoaW5nIHRvIGRvCit3aXRoIHdoYXQgeW91IGNvbW1pdHRlZCBwcmV2aW91c2x5LiBZb3UgY2FuIHN0YXJ0IGEgbmV3IGJyYW5jaCBhbmQKK3Jlc2V0IGl0IHdoaWxlIGtlZXBpbmcgdGhlIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuCisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHRhZyBzdGFydAorJCBnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMQorJCBlZGl0CiskIGdpdCBjb21taXQgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwxPgorJCBlZGl0CiskIGdpdCBjaGVja291dCAtYiBicmFuY2gyICAgICAgICAgICAgICAgICAgIDwyPgorJCBnaXQgcmVzZXQgLS1rZWVwIHN0YXJ0ICAgICAgICAgICAgICAgICAgICA8Mz4KKy0tLS0tLS0tLS0tLQorKworPDE+IFRoaXMgY29tbWl0cyB5b3VyIGZpcnN0IGVkaXRzIGluIGJyYW5jaDEuCis8Mj4gSW4gdGhlIGlkZWFsIHdvcmxkLCB5b3UgY291bGQgaGF2ZSByZWFsaXplZCB0aGF0IHRoZSBlYXJsaWVyCisgICAgY29tbWl0IGRpZCBub3QgYmVsb25nIHRvIHRoZSBuZXcgdG9waWMgd2hlbiB5b3UgY3JlYXRlZCBhbmQgc3dpdGNoZWQKKyAgICB0byBicmFuY2gyIChpLmUuICJnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBzdGFydCIpLCBidXQgbm9ib2R5IGlzCisgICAgcGVyZmVjdC4KKzwzPiBCdXQgeW91IGNhbiB1c2UgInJlc2V0IC0ta2VlcCIgdG8gcmVtb3ZlIHRoZSB1bndhbnRlZCBjb21taXQgYWZ0ZXIKKyAgICB5b3Ugc3dpdGNoZWQgdG8gImJyYW5jaDIiLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworVGhlIHRhYmxlcyBiZWxvdyBzaG93IHdoYXQgaGFwcGVucyB3aGVuIHJ1bm5pbmc6CisKKy0tLS0tLS0tLS0KK2dpdCByZXNldCAtLW9wdGlvbiB0YXJnZXQKKy0tLS0tLS0tLS0KKwordG8gcmVzZXQgdGhlIEhFQUQgdG8gYW5vdGhlciBjb21taXQgKGB0YXJnZXRgKSB3aXRoIHRoZSBkaWZmZXJlbnQKK3Jlc2V0IG9wdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgZmlsZXMuCisKK0luIHRoZXNlIHRhYmxlcywgQSwgQiwgQyBhbmQgRCBhcmUgc29tZSBkaWZmZXJlbnQgc3RhdGVzIG9mIGEKK2ZpbGUuIEZvciBleGFtcGxlLCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlyc3QgdGFibGUgbWVhbnMgdGhhdCBpZiBhCitmaWxlIGlzIGluIHN0YXRlIEEgaW4gdGhlIHdvcmtpbmcgdHJlZSwgaW4gc3RhdGUgQiBpbiB0aGUgaW5kZXgsIGluCitzdGF0ZSBDIGluIEhFQUQgYW5kIGluIHN0YXRlIEQgaW4gdGhlIHRhcmdldCwgdGhlbiAiZ2l0IHJlc2V0IC0tc29mdAordGFyZ2V0IiB3aWxsIGxlYXZlIHRoZSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUgaW4gc3RhdGUgQSBhbmQgaW4gdGhlCitpbmRleCBpbiBzdGF0ZSBCLiAgSXQgcmVzZXRzIChpLmUuIG1vdmVzKSB0aGUgSEVBRCAoaS5lLiB0aGUgdGlwIG9mCit0aGUgY3VycmVudCBicmFuY2gsIGlmIHlvdSBhcmUgb24gb25lKSB0byAidGFyZ2V0IiAod2hpY2ggaGFzIHRoZSBmaWxlCitpbiBzdGF0ZSBEKS4KKworICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEEgICAgICAgQiAgICAgQyAgICBEICAgICAtLXNvZnQgICBBICAgICAgIEIgICAgIEQKKwkJCQktLW1peGVkICBBICAgICAgIEQgICAgIEQKKwkJCQktLWhhcmQgICBEICAgICAgIEQgICAgIEQKKwkJCQktLW1lcmdlIChkaXNhbGxvd2VkKQorCQkJCS0ta2VlcCAgKGRpc2FsbG93ZWQpCisKKyAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICBBICAgICAgIEIgICAgIEMgICAgQyAgICAgLS1zb2Z0ICAgQSAgICAgICBCICAgICBDCisJCQkJLS1taXhlZCAgQSAgICAgICBDICAgICBDCisJCQkJLS1oYXJkICAgQyAgICAgICBDICAgICBDCisJCQkJLS1tZXJnZSAoZGlzYWxsb3dlZCkKKwkJCQktLWtlZXAgICBBICAgICAgIEMgICAgIEMKKworICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEIgICAgICAgQiAgICAgQyAgICBEICAgICAtLXNvZnQgICBCICAgICAgIEIgICAgIEQKKwkJCQktLW1peGVkICBCICAgICAgIEQgICAgIEQKKwkJCQktLWhhcmQgICBEICAgICAgIEQgICAgIEQKKwkJCQktLW1lcmdlICBEICAgICAgIEQgICAgIEQKKwkJCQktLWtlZXAgIChkaXNhbGxvd2VkKQorCisgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgQiAgICAgICBCICAgICBDICAgIEMgICAgIC0tc29mdCAgIEIgICAgICAgQiAgICAgQworCQkJCS0tbWl4ZWQgIEIgICAgICAgQyAgICAgQworCQkJCS0taGFyZCAgIEMgICAgICAgQyAgICAgQworCQkJCS0tbWVyZ2UgIEMgICAgICAgQyAgICAgQworCQkJCS0ta2VlcCAgIEIgICAgICAgQyAgICAgQworCisgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgQiAgICAgICBDICAgICBDICAgIEQgICAgIC0tc29mdCAgIEIgICAgICAgQyAgICAgRAorCQkJCS0tbWl4ZWQgIEIgICAgICAgRCAgICAgRAorCQkJCS0taGFyZCAgIEQgICAgICAgRCAgICAgRAorCQkJCS0tbWVyZ2UgKGRpc2FsbG93ZWQpCisJCQkJLS1rZWVwICAoZGlzYWxsb3dlZCkKKworICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIEIgICAgICAgQyAgICAgQyAgICBDICAgICAtLXNvZnQgICBCICAgICAgIEMgICAgIEMKKwkJCQktLW1peGVkICBCICAgICAgIEMgICAgIEMKKwkJCQktLWhhcmQgICBDICAgICAgIEMgICAgIEMKKwkJCQktLW1lcmdlICBCICAgICAgIEMgICAgIEMKKwkJCQktLWtlZXAgICBCICAgICAgIEMgICAgIEMKKworInJlc2V0IC0tbWVyZ2UiIGlzIG1lYW50IHRvIGJlIHVzZWQgd2hlbiByZXNldHRpbmcgb3V0IG9mIGEgY29uZmxpY3RlZAorbWVyZ2UuIEFueSBtZXJneSBvcGVyYXRpb24gZ3VhcmFudGVlcyB0aGF0IHRoZSB3b3JraW5nIHRyZWUgZmlsZSB0aGF0IGlzCitpbnZvbHZlZCBpbiB0aGUgbWVyZ2UgZG9lcyBub3QgaGF2ZSBsb2NhbCBjaGFuZ2Ugd3J0IHRoZSBpbmRleCBiZWZvcmUKK2l0IHN0YXJ0cywgYW5kIHRoYXQgaXQgd3JpdGVzIHRoZSByZXN1bHQgb3V0IHRvIHRoZSB3b3JraW5nIHRyZWUuIFNvIGlmCit3ZSBzZWUgc29tZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGluZGV4IGFuZCB0aGUgdGFyZ2V0IGFuZCBhbHNvCitiZXR3ZWVuIHRoZSBpbmRleCBhbmQgdGhlIHdvcmtpbmcgdHJlZSwgdGhlbiBpdCBtZWFucyB0aGF0IHdlIGFyZSBub3QKK3Jlc2V0dGluZyBvdXQgZnJvbSBhIHN0YXRlIHRoYXQgYSBtZXJneSBvcGVyYXRpb24gbGVmdCBhZnRlciBmYWlsaW5nCit3aXRoIGEgY29uZmxpY3QuIFRoYXQgaXMgd2h5IHdlIGRpc2FsbG93IC0tbWVyZ2Ugb3B0aW9uIGluIHRoaXMgY2FzZS4KKworInJlc2V0IC0ta2VlcCIgaXMgbWVhbnQgdG8gYmUgdXNlZCB3aGVuIHJlbW92aW5nIHNvbWUgb2YgdGhlIGxhc3QKK2NvbW1pdHMgaW4gdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIGtlZXBpbmcgY2hhbmdlcyBpbiB0aGUgd29ya2luZwordHJlZS4gSWYgdGhlcmUgY291bGQgYmUgY29uZmxpY3RzIGJldHdlZW4gdGhlIGNoYW5nZXMgaW4gdGhlIGNvbW1pdCB3ZQord2FudCB0byByZW1vdmUgYW5kIHRoZSBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgd2Ugd2FudCB0byBrZWVwLAordGhlIHJlc2V0IGlzIGRpc2FsbG93ZWQuIFRoYXQncyB3aHkgaXQgaXMgZGlzYWxsb3dlZCBpZiB0aGVyZSBhcmUgYm90aAorY2hhbmdlcyBiZXR3ZWVuIHRoZSB3b3JraW5nIHRyZWUgYW5kIEhFQUQsIGFuZCBiZXR3ZWVuIEhFQUQgYW5kIHRoZQordGFyZ2V0LiBUbyBiZSBzYWZlLCBpdCBpcyBhbHNvIGRpc2FsbG93ZWQgd2hlbiB0aGVyZSBhcmUgdW5tZXJnZWQKK2VudHJpZXMuCisKK1RoZSBmb2xsb3dpbmcgdGFibGVzIHNob3cgd2hhdCBoYXBwZW5zIHdoZW4gdGhlcmUgYXJlIHVubWVyZ2VkCitlbnRyaWVzOgorCisgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgWCAgICAgICBVICAgICBBICAgIEIgICAgIC0tc29mdCAgKGRpc2FsbG93ZWQpCisJCQkJLS1taXhlZCAgWCAgICAgICBCICAgICBCCisJCQkJLS1oYXJkICAgQiAgICAgICBCICAgICBCCisJCQkJLS1tZXJnZSAgQiAgICAgICBCICAgICBCCisJCQkJLS1rZWVwICAoZGlzYWxsb3dlZCkKKworICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIFggICAgICAgVSAgICAgQSAgICBBICAgICAtLXNvZnQgIChkaXNhbGxvd2VkKQorCQkJCS0tbWl4ZWQgIFggICAgICAgQSAgICAgQQorCQkJCS0taGFyZCAgIEEgICAgICAgQSAgICAgQQorCQkJCS0tbWVyZ2UgIEEgICAgICAgQSAgICAgQQorCQkJCS0ta2VlcCAgKGRpc2FsbG93ZWQpCisKK1ggbWVhbnMgYW55IHN0YXRlIGFuZCBVIG1lYW5zIGFuIHVubWVyZ2VkIGluZGV4LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldi1saXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjIyZjE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtcmV2LWxpc3QudHh0CkBAIC0wLDAgKzEsMTIxIEBACitnaXQtcmV2LWxpc3QoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtcmV2LWxpc3QgLSBMaXN0cyBjb21taXQgb2JqZWN0cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmV2LWxpc3QnIFsgLS1tYXgtY291bnQ9PG51bWJlcj4gXQorCSAgICAgWyAtLXNraXA9PG51bWJlcj4gXQorCSAgICAgWyAtLW1heC1hZ2U9PHRpbWVzdGFtcD4gXQorCSAgICAgWyAtLW1pbi1hZ2U9PHRpbWVzdGFtcD4gXQorCSAgICAgWyAtLXNwYXJzZSBdCisJICAgICBbIC0tbWVyZ2VzIF0KKwkgICAgIFsgLS1uby1tZXJnZXMgXQorCSAgICAgWyAtLW1pbi1wYXJlbnRzPTxudW1iZXI+IF0KKwkgICAgIFsgLS1uby1taW4tcGFyZW50cyBdCisJICAgICBbIC0tbWF4LXBhcmVudHM9PG51bWJlcj4gXQorCSAgICAgWyAtLW5vLW1heC1wYXJlbnRzIF0KKwkgICAgIFsgLS1maXJzdC1wYXJlbnQgXQorCSAgICAgWyAtLXJlbW92ZS1lbXB0eSBdCisJICAgICBbIC0tZnVsbC1oaXN0b3J5IF0KKwkgICAgIFsgLS1ub3QgXQorCSAgICAgWyAtLWFsbCBdCisJICAgICBbIC0tYnJhbmNoZXNbPTxwYXR0ZXJuPl0gXQorCSAgICAgWyAtLXRhZ3NbPTxwYXR0ZXJuPl0gXQorCSAgICAgWyAtLXJlbW90ZXNbPTxwYXR0ZXJuPl0gXQorCSAgICAgWyAtLWdsb2I9PGdsb2ItcGF0dGVybj4gXQorCSAgICAgWyAtLWlnbm9yZS1taXNzaW5nIF0KKwkgICAgIFsgLS1zdGRpbiBdCisJICAgICBbIC0tcXVpZXQgXQorCSAgICAgWyAtLXRvcG8tb3JkZXIgXQorCSAgICAgWyAtLXBhcmVudHMgXQorCSAgICAgWyAtLXRpbWVzdGFtcCBdCisJICAgICBbIC0tbGVmdC1yaWdodCBdCisJICAgICBbIC0tbGVmdC1vbmx5IF0KKwkgICAgIFsgLS1yaWdodC1vbmx5IF0KKwkgICAgIFsgLS1jaGVycnktbWFyayBdCisJICAgICBbIC0tY2hlcnJ5LXBpY2sgXQorCSAgICAgWyAtLWVuY29kaW5nPTxlbmNvZGluZz4gXQorCSAgICAgWyAtLShhdXRob3J8Y29tbWl0dGVyfGdyZXApPTxwYXR0ZXJuPiBdCisJICAgICBbIC0tcmVnZXhwLWlnbm9yZS1jYXNlIHwgLWkgXQorCSAgICAgWyAtLWV4dGVuZGVkLXJlZ2V4cCB8IC1FIF0KKwkgICAgIFsgLS1maXhlZC1zdHJpbmdzIHwgLUYgXQorCSAgICAgWyAtLWRhdGU9PGZvcm1hdD5dCisJICAgICBbIFsgLS1vYmplY3RzIHwgLS1vYmplY3RzLWVkZ2UgfCAtLW9iamVjdHMtZWRnZS1hZ2dyZXNzaXZlIF0KKwkgICAgICAgWyAtLXVucGFja2VkIF0gXQorCSAgICAgWyAtLXByZXR0eSB8IC0taGVhZGVyIF0KKwkgICAgIFsgLS1iaXNlY3QgXQorCSAgICAgWyAtLWJpc2VjdC12YXJzIF0KKwkgICAgIFsgLS1iaXNlY3QtYWxsIF0KKwkgICAgIFsgLS1tZXJnZSBdCisJICAgICBbIC0tcmV2ZXJzZSBdCisJICAgICBbIC0td2Fsay1yZWZsb2dzIF0KKwkgICAgIFsgLS1uby13YWxrIF0gWyAtLWRvLXdhbGsgXQorCSAgICAgWyAtLWNvdW50IF0KKwkgICAgIFsgLS11c2UtYml0bWFwLWluZGV4IF0KKwkgICAgIDxjb21taXQ+Li4uIFsgXC0tIDxwYXRocz4uLi4gXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworTGlzdCBjb21taXRzIHRoYXQgYXJlIHJlYWNoYWJsZSBieSBmb2xsb3dpbmcgdGhlIGBwYXJlbnRgIGxpbmtzIGZyb20gdGhlCitnaXZlbiBjb21taXQocyksIGJ1dCBleGNsdWRlIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIG9uZShzKQorZ2l2ZW4gd2l0aCBhICd7Y2FyZXR9JyBpbiBmcm9udCBvZiB0aGVtLiAgVGhlIG91dHB1dCBpcyBnaXZlbiBpbiByZXZlcnNlCitjaHJvbm9sb2dpY2FsIG9yZGVyIGJ5IGRlZmF1bHQuCisKK1lvdSBjYW4gdGhpbmsgb2YgdGhpcyBhcyBhIHNldCBvcGVyYXRpb24uICBDb21taXRzIGdpdmVuIG9uIHRoZSBjb21tYW5kCitsaW5lIGZvcm0gYSBzZXQgb2YgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBhbnkgb2YgdGhlbSwgYW5kIHRoZW4KK2NvbW1pdHMgcmVhY2hhYmxlIGZyb20gYW55IG9mIHRoZSBvbmVzIGdpdmVuIHdpdGggJ3tjYXJldH0nIGluIGZyb250IGFyZQorc3VidHJhY3RlZCBmcm9tIHRoYXQgc2V0LiAgVGhlIHJlbWFpbmluZyBjb21taXRzIGFyZSB3aGF0IGNvbWVzIG91dCBpbiB0aGUKK2NvbW1hbmQncyBvdXRwdXQuICBWYXJpb3VzIG90aGVyIG9wdGlvbnMgYW5kIHBhdGhzIHBhcmFtZXRlcnMgY2FuIGJlIHVzZWQKK3RvIGZ1cnRoZXIgbGltaXQgdGhlIHJlc3VsdC4KKworVGh1cywgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSQgZ2l0IHJldi1saXN0IGZvbyBiYXIgXmJhegorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbWVhbnMgImxpc3QgYWxsIHRoZSBjb21taXRzIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSAnZm9vJyBvciAnYmFyJywgYnV0Citub3QgZnJvbSAnYmF6JyIuCisKK0Egc3BlY2lhbCBub3RhdGlvbiAiJzxjb21taXQxPicuLic8Y29tbWl0Mj4nIiBjYW4gYmUgdXNlZCBhcyBhCitzaG9ydC1oYW5kIGZvciAie2NhcmV0fSc8Y29tbWl0MT4nICc8Y29tbWl0Mj4nIi4gRm9yIGV4YW1wbGUsIGVpdGhlciBvZgordGhlIGZvbGxvd2luZyBtYXkgYmUgdXNlZCBpbnRlcmNoYW5nZWFibHk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJJCBnaXQgcmV2LWxpc3Qgb3JpZ2luLi5IRUFECisJJCBnaXQgcmV2LWxpc3QgSEVBRCBeb3JpZ2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbm90aGVyIHNwZWNpYWwgbm90YXRpb24gaXMgIic8Y29tbWl0MT4nLi4uJzxjb21taXQyPiciIHdoaWNoIGlzIHVzZWZ1bAorZm9yIG1lcmdlcy4gIFRoZSByZXN1bHRpbmcgc2V0IG9mIGNvbW1pdHMgaXMgdGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlCitiZXR3ZWVuIHRoZSB0d28gb3BlcmFuZHMuICBUaGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyBhcmUgZXF1aXZhbGVudDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkkIGdpdCByZXYtbGlzdCBBIEIgLS1ub3QgJChnaXQgbWVyZ2UtYmFzZSAtLWFsbCBBIEIpCisJJCBnaXQgcmV2LWxpc3QgQS4uLkIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKydyZXYtbGlzdCcgaXMgYSB2ZXJ5IGVzc2VudGlhbCBHaXQgY29tbWFuZCwgc2luY2UgaXQKK3Byb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGJ1aWxkIGFuZCB0cmF2ZXJzZSBjb21taXQgYW5jZXN0cnkgZ3JhcGhzLiBGb3IKK3RoaXMgcmVhc29uLCBpdCBoYXMgYSBsb3Qgb2YgZGlmZmVyZW50IG9wdGlvbnMgdGhhdCBlbmFibGVzIGl0IHRvIGJlCit1c2VkIGJ5IGNvbW1hbmRzIGFzIGRpZmZlcmVudCBhcyAnZ2l0IGJpc2VjdCcgYW5kCisnZ2l0IHJlcGFjaycuCisKK09QVElPTlMKKy0tLS0tLS0KKworOmdpdC1yZXYtbGlzdDogMQoraW5jbHVkZTo6cmV2LWxpc3Qtb3B0aW9ucy50eHRbXQorCitpbmNsdWRlOjpwcmV0dHktZm9ybWF0cy50eHRbXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXJldi1wYXJzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YzYzMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1yZXYtcGFyc2UudHh0CkBAIC0wLDAgKzEsNDQyIEBACitnaXQtcmV2LXBhcnNlKDEpCis9PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1yZXYtcGFyc2UgLSBQaWNrIG91dCBhbmQgbWFzc2FnZSBwYXJhbWV0ZXJzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJldi1wYXJzZScgWyAtLW9wdGlvbiBdIDxhcmdzPi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworTWFueSBHaXQgcG9yY2VsYWluaXNoIGNvbW1hbmRzIHRha2UgbWl4dHVyZSBvZiBmbGFncworKGkuZS4gcGFyYW1ldGVycyB0aGF0IGJlZ2luIHdpdGggYSBkYXNoICctJykgYW5kIHBhcmFtZXRlcnMKK21lYW50IGZvciB0aGUgdW5kZXJseWluZyAnZ2l0IHJldi1saXN0JyBjb21tYW5kIHRoZXkgdXNlIGludGVybmFsbHkKK2FuZCBmbGFncyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIG90aGVyIGNvbW1hbmRzIHRoZXkgdXNlCitkb3duc3RyZWFtIG9mICdnaXQgcmV2LWxpc3QnLiAgVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8KK2Rpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbS4KKworCitPUFRJT05TCistLS0tLS0tCisKK09wZXJhdGlvbiBNb2Rlcworfn5+fn5+fn5+fn5+fn5+CisKK0VhY2ggb2YgdGhlc2Ugb3B0aW9ucyBtdXN0IGFwcGVhciBmaXJzdCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCistLXBhcnNlb3B0OjoKKwlVc2UgJ2dpdCByZXYtcGFyc2UnIGluIG9wdGlvbiBwYXJzaW5nIG1vZGUgKHNlZSBQQVJTRU9QVCBzZWN0aW9uIGJlbG93KS4KKworLS1zcS1xdW90ZTo6CisJVXNlICdnaXQgcmV2LXBhcnNlJyBpbiBzaGVsbCBxdW90aW5nIG1vZGUgKHNlZSBTUS1RVU9URQorCXNlY3Rpb24gYmVsb3cpLiBJbiBjb250cmFzdCB0byB0aGUgYC0tc3FgIG9wdGlvbiBiZWxvdywgdGhpcworCW1vZGUgZG9lcyBvbmx5IHF1b3RpbmcuIE5vdGhpbmcgZWxzZSBpcyBkb25lIHRvIGNvbW1hbmQgaW5wdXQuCisKK09wdGlvbnMgZm9yIC0tcGFyc2VvcHQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLS1rZWVwLWRhc2hkYXNoOjoKKwlPbmx5IG1lYW5pbmdmdWwgaW4gYC0tcGFyc2VvcHRgIG1vZGUuIFRlbGxzIHRoZSBvcHRpb24gcGFyc2VyIHRvIGVjaG8KKwlvdXQgdGhlIGZpcnN0IGAtLWAgbWV0IGluc3RlYWQgb2Ygc2tpcHBpbmcgaXQuCisKKy0tc3RvcC1hdC1ub24tb3B0aW9uOjoKKwlPbmx5IG1lYW5pbmdmdWwgaW4gYC0tcGFyc2VvcHRgIG1vZGUuICBMZXRzIHRoZSBvcHRpb24gcGFyc2VyIHN0b3AgYXQKKwl0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gcGFyc2Ugc3ViLWNvbW1hbmRzCisJdGhhdCB0YWtlIG9wdGlvbnMgdGhlbXNlbHZlcy4KKworLS1zdHVjay1sb25nOjoKKwlPbmx5IG1lYW5pbmdmdWwgaW4gYC0tcGFyc2VvcHRgIG1vZGUuIE91dHB1dCB0aGUgb3B0aW9ucyBpbiB0aGVpcgorCWxvbmcgZm9ybSBpZiBhdmFpbGFibGUsIGFuZCB3aXRoIHRoZWlyIGFyZ3VtZW50cyBzdHVjay4KKworT3B0aW9ucyBmb3IgRmlsdGVyaW5nCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLS1yZXZzLW9ubHk6OgorCURvIG5vdCBvdXRwdXQgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgbm90IG1lYW50IGZvcgorCSdnaXQgcmV2LWxpc3QnIGNvbW1hbmQuCisKKy0tbm8tcmV2czo6CisJRG8gbm90IG91dHB1dCBmbGFncyBhbmQgcGFyYW1ldGVycyBtZWFudCBmb3IKKwknZ2l0IHJldi1saXN0JyBjb21tYW5kLgorCistLWZsYWdzOjoKKwlEbyBub3Qgb3V0cHV0IG5vbi1mbGFnIHBhcmFtZXRlcnMuCisKKy0tbm8tZmxhZ3M6OgorCURvIG5vdCBvdXRwdXQgZmxhZyBwYXJhbWV0ZXJzLgorCitPcHRpb25zIGZvciBPdXRwdXQKK35+fn5+fn5+fn5+fn5+fn5+fgorCistLWRlZmF1bHQgPGFyZz46OgorCUlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciBnaXZlbiBieSB0aGUgdXNlciwgdXNlIGA8YXJnPmAKKwlpbnN0ZWFkLgorCistLXByZWZpeCA8YXJnPjo6CisJQmVoYXZlIGFzIGlmICdnaXQgcmV2LXBhcnNlJyB3YXMgaW52b2tlZCBmcm9tIHRoZSBgPGFyZz5gCisJc3ViZGlyZWN0b3J5IG9mIHRoZSB3b3JraW5nIHRyZWUuICBBbnkgcmVsYXRpdmUgZmlsZW5hbWVzIGFyZQorCXJlc29sdmVkIGFzIGlmIHRoZXkgYXJlIHByZWZpeGVkIGJ5IGA8YXJnPmAgYW5kIHdpbGwgYmUgcHJpbnRlZAorCWluIHRoYXQgZm9ybS4KKysKK1RoaXMgY2FuIGJlIHVzZWQgdG8gY29udmVydCBhcmd1bWVudHMgdG8gYSBjb21tYW5kIHJ1biBpbiBhIHN1YmRpcmVjdG9yeQorc28gdGhhdCB0aGV5IGNhbiBzdGlsbCBiZSB1c2VkIGFmdGVyIG1vdmluZyB0byB0aGUgdG9wLWxldmVsIG9mIHRoZQorcmVwb3NpdG9yeS4gIEZvciBleGFtcGxlOgorKworLS0tLQorcHJlZml4PSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4KQorY2QgIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpIgorZXZhbCAic2V0IC0tICQoZ2l0IHJldi1wYXJzZSAtLXNxIC0tcHJlZml4ICIkcHJlZml4IiAiJEAiKSIKKy0tLS0KKworLS12ZXJpZnk6OgorCVZlcmlmeSB0aGF0IGV4YWN0bHkgb25lIHBhcmFtZXRlciBpcyBwcm92aWRlZCwgYW5kIHRoYXQgaXQKKwljYW4gYmUgdHVybmVkIGludG8gYSByYXcgMjAtYnl0ZSBTSEEtMSB0aGF0IGNhbiBiZSB1c2VkIHRvCisJYWNjZXNzIHRoZSBvYmplY3QgZGF0YWJhc2UuIElmIHNvLCBlbWl0IGl0IHRvIHRoZSBzdGFuZGFyZAorCW91dHB1dDsgb3RoZXJ3aXNlLCBlcnJvciBvdXQuCisrCitJZiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgb3V0cHV0IGFjdHVhbGx5IG5hbWVzIGFuIG9iamVjdCBpbgoreW91ciBvYmplY3QgZGF0YWJhc2UgYW5kL29yIGNhbiBiZSB1c2VkIGFzIGEgc3BlY2lmaWMgdHlwZSBvZiBvYmplY3QKK3lvdSByZXF1aXJlLCB5b3UgY2FuIGFkZCB0aGUgYF57dHlwZX1gIHBlZWxpbmcgb3BlcmF0b3IgdG8gdGhlIHBhcmFtZXRlci4KK0ZvciBleGFtcGxlLCBgZ2l0IHJldi1wYXJzZSAiJFZBUl57Y29tbWl0fSJgIHdpbGwgbWFrZSBzdXJlIGAkVkFSYAorbmFtZXMgYW4gZXhpc3Rpbmcgb2JqZWN0IHRoYXQgaXMgYSBjb21taXQtaXNoIChpLmUuIGEgY29tbWl0LCBvciBhbgorYW5ub3RhdGVkIHRhZyB0aGF0IHBvaW50cyBhdCBhIGNvbW1pdCkuICBUbyBtYWtlIHN1cmUgdGhhdCBgJFZBUmAKK25hbWVzIGFuIGV4aXN0aW5nIG9iamVjdCBvZiBhbnkgdHlwZSwgYGdpdCByZXYtcGFyc2UgIiRWQVJee29iamVjdH0iYAorY2FuIGJlIHVzZWQuCisKKy1xOjoKKy0tcXVpZXQ6OgorCU9ubHkgbWVhbmluZ2Z1bCBpbiBgLS12ZXJpZnlgIG1vZGUuIERvIG5vdCBvdXRwdXQgYW4gZXJyb3IKKwltZXNzYWdlIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgYSB2YWxpZCBvYmplY3QgbmFtZTsKKwlpbnN0ZWFkIGV4aXQgd2l0aCBub24temVybyBzdGF0dXMgc2lsZW50bHkuCisJU0hBLTFzIGZvciB2YWxpZCBvYmplY3QgbmFtZXMgYXJlIHByaW50ZWQgdG8gc3Rkb3V0IG9uIHN1Y2Nlc3MuCisKKy0tc3E6OgorCVVzdWFsbHkgdGhlIG91dHB1dCBpcyBtYWRlIG9uZSBsaW5lIHBlciBmbGFnIGFuZAorCXBhcmFtZXRlci4gIFRoaXMgb3B0aW9uIG1ha2VzIG91dHB1dCBhIHNpbmdsZSBsaW5lLAorCXByb3Blcmx5IHF1b3RlZCBmb3IgY29uc3VtcHRpb24gYnkgc2hlbGwuICBVc2VmdWwgd2hlbgorCXlvdSBleHBlY3QgeW91ciBwYXJhbWV0ZXIgdG8gY29udGFpbiB3aGl0ZXNwYWNlcyBhbmQKKwluZXdsaW5lcyAoZS5nLiB3aGVuIHVzaW5nIHBpY2theGUgYC1TYCB3aXRoCisJJ2dpdCBkaWZmLXthc3Rlcmlza30nKS4gSW4gY29udHJhc3QgdG8gdGhlIGAtLXNxLXF1b3RlYCBvcHRpb24sCisJdGhlIGNvbW1hbmQgaW5wdXQgaXMgc3RpbGwgaW50ZXJwcmV0ZWQgYXMgdXN1YWwuCisKKy0tbm90OjoKKwlXaGVuIHNob3dpbmcgb2JqZWN0IG5hbWVzLCBwcmVmaXggdGhlbSB3aXRoICd7Y2FyZXR9JyBhbmQKKwlzdHJpcCAne2NhcmV0fScgcHJlZml4IGZyb20gdGhlIG9iamVjdCBuYW1lcyB0aGF0IGFscmVhZHkgaGF2ZQorCW9uZS4KKworLS1hYmJyZXYtcmVmWz0oc3RyaWN0fGxvb3NlKV06OgorCUEgbm9uLWFtYmlndW91cyBzaG9ydCBuYW1lIG9mIHRoZSBvYmplY3RzIG5hbWUuCisJVGhlIG9wdGlvbiBjb3JlLndhcm5BbWJpZ3VvdXNSZWZzIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBzdHJpY3QKKwlhYmJyZXZpYXRpb24gbW9kZS4KKworLS1zaG9ydDo6CistLXNob3J0PW51bWJlcjo6CisJSW5zdGVhZCBvZiBvdXRwdXR0aW5nIHRoZSBmdWxsIFNIQS0xIHZhbHVlcyBvZiBvYmplY3QgbmFtZXMgdHJ5IHRvCisJYWJicmV2aWF0ZSB0aGVtIHRvIGEgc2hvcnRlciB1bmlxdWUgbmFtZS4gV2hlbiBubyBsZW5ndGggaXMgc3BlY2lmaWVkCisJNyBpcyB1c2VkLiBUaGUgbWluaW11bSBsZW5ndGggaXMgNC4KKworLS1zeW1ib2xpYzo6CisJVXN1YWxseSB0aGUgb2JqZWN0IG5hbWVzIGFyZSBvdXRwdXQgaW4gU0hBLTEgZm9ybSAod2l0aAorCXBvc3NpYmxlICd7Y2FyZXR9JyBwcmVmaXgpOyB0aGlzIG9wdGlvbiBtYWtlcyB0aGVtIG91dHB1dCBpbiBhCisJZm9ybSBhcyBjbG9zZSB0byB0aGUgb3JpZ2luYWwgaW5wdXQgYXMgcG9zc2libGUuCisKKy0tc3ltYm9saWMtZnVsbC1uYW1lOjoKKwlUaGlzIGlzIHNpbWlsYXIgdG8gLS1zeW1ib2xpYywgYnV0IGl0IG9taXRzIGlucHV0IHRoYXQKKwlhcmUgbm90IHJlZnMgKGkuZS4gYnJhbmNoIG9yIHRhZyBuYW1lczsgb3IgbW9yZQorCWV4cGxpY2l0bHkgZGlzYW1iaWd1YXRpbmcgImhlYWRzL21hc3RlciIgZm9ybSwgd2hlbiB5b3UKKwl3YW50IHRvIG5hbWUgdGhlICJtYXN0ZXIiIGJyYW5jaCB3aGVuIHRoZXJlIGlzIGFuCisJdW5mb3J0dW5hdGVseSBuYW1lZCB0YWcgIm1hc3RlciIpLCBhbmQgc2hvdyB0aGVtIGFzIGZ1bGwKKwlyZWZuYW1lcyAoZS5nLiAicmVmcy9oZWFkcy9tYXN0ZXIiKS4KKworT3B0aW9ucyBmb3IgT2JqZWN0cworfn5+fn5+fn5+fn5+fn5+fn5+fgorCistLWFsbDo6CisJU2hvdyBhbGwgcmVmcyBmb3VuZCBpbiBgcmVmcy9gLgorCistLWJyYW5jaGVzWz1wYXR0ZXJuXTo6CistLXRhZ3NbPXBhdHRlcm5dOjoKKy0tcmVtb3Rlc1s9cGF0dGVybl06OgorCVNob3cgYWxsIGJyYW5jaGVzLCB0YWdzLCBvciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMsCisJcmVzcGVjdGl2ZWx5IChpLmUuLCByZWZzIGZvdW5kIGluIGByZWZzL2hlYWRzYCwKKwlgcmVmcy90YWdzYCwgb3IgYHJlZnMvcmVtb3Rlc2AsIHJlc3BlY3RpdmVseSkuCisrCitJZiBhIGBwYXR0ZXJuYCBpcyBnaXZlbiwgb25seSByZWZzIG1hdGNoaW5nIHRoZSBnaXZlbiBzaGVsbCBnbG9iIGFyZQorc2hvd24uICBJZiB0aGUgcGF0dGVybiBkb2VzIG5vdCBjb250YWluIGEgZ2xvYmJpbmcgY2hhcmFjdGVyIChgP2AsCitgKmAsIG9yIGBbYCksIGl0IGlzIHR1cm5lZCBpbnRvIGEgcHJlZml4IG1hdGNoIGJ5IGFwcGVuZGluZyBgLypgLgorCistLWdsb2I9cGF0dGVybjo6CisJU2hvdyBhbGwgcmVmcyBtYXRjaGluZyB0aGUgc2hlbGwgZ2xvYiBwYXR0ZXJuIGBwYXR0ZXJuYC4gSWYKKwl0aGUgcGF0dGVybiBkb2VzIG5vdCBzdGFydCB3aXRoIGByZWZzL2AsIHRoaXMgaXMgYXV0b21hdGljYWxseQorCXByZXBlbmRlZC4gIElmIHRoZSBwYXR0ZXJuIGRvZXMgbm90IGNvbnRhaW4gYSBnbG9iYmluZworCWNoYXJhY3RlciAoYD9gLCBgKmAsIG9yIGBbYCksIGl0IGlzIHR1cm5lZCBpbnRvIGEgcHJlZml4CisJbWF0Y2ggYnkgYXBwZW5kaW5nIGAvKmAuCisKKy0tZXhjbHVkZT08Z2xvYi1wYXR0ZXJuPjo6CisJRG8gbm90IGluY2x1ZGUgcmVmcyBtYXRjaGluZyAnPGdsb2ItcGF0dGVybj4nIHRoYXQgdGhlIG5leHQgYC0tYWxsYCwKKwlgLS1icmFuY2hlc2AsIGAtLXRhZ3NgLCBgLS1yZW1vdGVzYCwgb3IgYC0tZ2xvYmAgd291bGQgb3RoZXJ3aXNlCisJY29uc2lkZXIuIFJlcGV0aXRpb25zIG9mIHRoaXMgb3B0aW9uIGFjY3VtdWxhdGUgZXhjbHVzaW9uIHBhdHRlcm5zCisJdXAgdG8gdGhlIG5leHQgYC0tYWxsYCwgYC0tYnJhbmNoZXNgLCBgLS10YWdzYCwgYC0tcmVtb3Rlc2AsIG9yCisJYC0tZ2xvYmAgb3B0aW9uIChvdGhlciBvcHRpb25zIG9yIGFyZ3VtZW50cyBkbyBub3QgY2xlYXIKKwlhY2N1bXVsYXRlZCBwYXR0ZXJucykuCisrCitUaGUgcGF0dGVybnMgZ2l2ZW4gc2hvdWxkIG5vdCBiZWdpbiB3aXRoIGByZWZzL2hlYWRzYCwgYHJlZnMvdGFnc2AsIG9yCitgcmVmcy9yZW1vdGVzYCB3aGVuIGFwcGxpZWQgdG8gYC0tYnJhbmNoZXNgLCBgLS10YWdzYCwgb3IgYC0tcmVtb3Rlc2AsCityZXNwZWN0aXZlbHksIGFuZCB0aGV5IG11c3QgYmVnaW4gd2l0aCBgcmVmcy9gIHdoZW4gYXBwbGllZCB0byBgLS1nbG9iYAorb3IgYC0tYWxsYC4gSWYgYSB0cmFpbGluZyAnL3thc3Rlcmlza30nIGlzIGludGVuZGVkLCBpdCBtdXN0IGJlIGdpdmVuCitleHBsaWNpdGx5LgorCistLWRpc2FtYmlndWF0ZT08cHJlZml4Pjo6CisJU2hvdyBldmVyeSBvYmplY3Qgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCB0aGUgZ2l2ZW4gcHJlZml4LgorCVRoZSA8cHJlZml4PiBtdXN0IGJlIGF0IGxlYXN0IDQgaGV4YWRlY2ltYWwgZGlnaXRzIGxvbmcgdG8KKwlhdm9pZCBsaXN0aW5nIGVhY2ggYW5kIGV2ZXJ5IG9iamVjdCBpbiB0aGUgcmVwb3NpdG9yeSBieQorCW1pc3Rha2UuCisKK09wdGlvbnMgZm9yIEZpbGVzCit+fn5+fn5+fn5+fn5+fn5+fgorCistLWxvY2FsLWVudi12YXJzOjoKKwlMaXN0IHRoZSBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhcmUgbG9jYWwgdG8gdGhlCisJcmVwb3NpdG9yeSAoZS5nLiBHSVRfRElSIG9yIEdJVF9XT1JLX1RSRUUsIGJ1dCBub3QgR0lUX0VESVRPUikuCisJT25seSB0aGUgbmFtZXMgb2YgdGhlIHZhcmlhYmxlcyBhcmUgbGlzdGVkLCBub3QgdGhlaXIgdmFsdWUsCisJZXZlbiBpZiB0aGV5IGFyZSBzZXQuCisKKy0tZ2l0LWRpcjo6CisJU2hvdyBgJEdJVF9ESVJgIGlmIGRlZmluZWQuIE90aGVyd2lzZSBzaG93IHRoZSBwYXRoIHRvCisJdGhlIC5naXQgZGlyZWN0b3J5LiBUaGUgcGF0aCBzaG93biwgd2hlbiByZWxhdGl2ZSwgaXMKKwlyZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKysKK0lmIGAkR0lUX0RJUmAgaXMgbm90IGRlZmluZWQgYW5kIHRoZSBjdXJyZW50IGRpcmVjdG9yeQoraXMgbm90IGRldGVjdGVkIHRvIGxpZSBpbiBhIEdpdCByZXBvc2l0b3J5IG9yIHdvcmsgdHJlZQorcHJpbnQgYSBtZXNzYWdlIHRvIHN0ZGVyciBhbmQgZXhpdCB3aXRoIG5vbnplcm8gc3RhdHVzLgorCistLWdpdC1jb21tb24tZGlyOjoKKwlTaG93IGAkR0lUX0NPTU1PTl9ESVJgIGlmIGRlZmluZWQsIGVsc2UgYCRHSVRfRElSYC4KKworLS1pcy1pbnNpZGUtZ2l0LWRpcjo6CisJV2hlbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcyBiZWxvdyB0aGUgcmVwb3NpdG9yeQorCWRpcmVjdG9yeSBwcmludCAidHJ1ZSIsIG90aGVyd2lzZSAiZmFsc2UiLgorCistLWlzLWluc2lkZS13b3JrLXRyZWU6OgorCVdoZW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgaW5zaWRlIHRoZSB3b3JrIHRyZWUgb2YgdGhlCisJcmVwb3NpdG9yeSBwcmludCAidHJ1ZSIsIG90aGVyd2lzZSAiZmFsc2UiLgorCistLWlzLWJhcmUtcmVwb3NpdG9yeTo6CisJV2hlbiB0aGUgcmVwb3NpdG9yeSBpcyBiYXJlIHByaW50ICJ0cnVlIiwgb3RoZXJ3aXNlICJmYWxzZSIuCisKKy0tcmVzb2x2ZS1naXQtZGlyIDxwYXRoPjo6CisJQ2hlY2sgaWYgPHBhdGg+IGlzIGEgdmFsaWQgcmVwb3NpdG9yeSBvciBhIGdpdGZpbGUgdGhhdAorCXBvaW50cyBhdCBhIHZhbGlkIHJlcG9zaXRvcnksIGFuZCBwcmludCB0aGUgbG9jYXRpb24gb2YgdGhlCisJcmVwb3NpdG9yeS4gIElmIDxwYXRoPiBpcyBhIGdpdGZpbGUgdGhlbiB0aGUgcmVzb2x2ZWQgcGF0aAorCXRvIHRoZSByZWFsIHJlcG9zaXRvcnkgaXMgcHJpbnRlZC4KKworLS1naXQtcGF0aCA8cGF0aD46OgorCVJlc29sdmUgIiRHSVRfRElSLzxwYXRoPiIgYW5kIHRha2VzIG90aGVyIHBhdGggcmVsb2NhdGlvbgorCXZhcmlhYmxlcyBzdWNoIGFzICRHSVRfT0JKRUNUX0RJUkVDVE9SWSwKKwkkR0lUX0lOREVYX0ZJTEUuLi4gaW50byBhY2NvdW50LiBGb3IgZXhhbXBsZSwgaWYKKwkkR0lUX09CSkVDVF9ESVJFQ1RPUlkgaXMgc2V0IHRvIC9mb28vYmFyIHRoZW4gImdpdCByZXYtcGFyc2UKKwktLWdpdC1wYXRoIG9iamVjdHMvYWJjIiByZXR1cm5zIC9mb28vYmFyL2FiYy4KKworLS1zaG93LWNkdXA6OgorCVdoZW4gdGhlIGNvbW1hbmQgaXMgaW52b2tlZCBmcm9tIGEgc3ViZGlyZWN0b3J5LCBzaG93IHRoZQorCXBhdGggb2YgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQKKwlkaXJlY3RvcnkgKHR5cGljYWxseSBhIHNlcXVlbmNlIG9mICIuLi8iLCBvciBhbiBlbXB0eSBzdHJpbmcpLgorCistLXNob3ctcHJlZml4OjoKKwlXaGVuIHRoZSBjb21tYW5kIGlzIGludm9rZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSwgc2hvdyB0aGUKKwlwYXRoIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgdG9wLWxldmVsCisJZGlyZWN0b3J5LgorCistLXNob3ctdG9wbGV2ZWw6OgorCVNob3cgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisKKy0tc2hhcmVkLWluZGV4LXBhdGg6OgorCVNob3cgdGhlIHBhdGggdG8gdGhlIHNoYXJlZCBpbmRleCBmaWxlIGluIHNwbGl0IGluZGV4IG1vZGUsIG9yCisJZW1wdHkgaWYgbm90IGluIHNwbGl0LWluZGV4IG1vZGUuCisKK090aGVyIE9wdGlvbnMKK35+fn5+fn5+fn5+fn4KKworLS1zaW5jZT1kYXRlc3RyaW5nOjoKKy0tYWZ0ZXI9ZGF0ZXN0cmluZzo6CisJUGFyc2UgdGhlIGRhdGUgc3RyaW5nLCBhbmQgb3V0cHV0IHRoZSBjb3JyZXNwb25kaW5nCisJLS1tYXgtYWdlPSBwYXJhbWV0ZXIgZm9yICdnaXQgcmV2LWxpc3QnLgorCistLXVudGlsPWRhdGVzdHJpbmc6OgorLS1iZWZvcmU9ZGF0ZXN0cmluZzo6CisJUGFyc2UgdGhlIGRhdGUgc3RyaW5nLCBhbmQgb3V0cHV0IHRoZSBjb3JyZXNwb25kaW5nCisJLS1taW4tYWdlPSBwYXJhbWV0ZXIgZm9yICdnaXQgcmV2LWxpc3QnLgorCis8YXJncz4uLi46OgorCUZsYWdzIGFuZCBwYXJhbWV0ZXJzIHRvIGJlIHBhcnNlZC4KKworCitpbmNsdWRlOjpyZXZpc2lvbnMudHh0W10KKworUEFSU0VPUFQKKy0tLS0tLS0tCisKK0luIGAtLXBhcnNlb3B0YCBtb2RlLCAnZ2l0IHJldi1wYXJzZScgaGVscHMgbWFzc2FnaW5nIG9wdGlvbnMgdG8gYnJpbmcgdG8gc2hlbGwKK3NjcmlwdHMgdGhlIHNhbWUgZmFjaWxpdGllcyBDIGJ1aWx0aW5zIGhhdmUuIEl0IHdvcmtzIGFzIGFuIG9wdGlvbiBub3JtYWxpemVyCisoZS5nLiBzcGxpdHMgc2luZ2xlIHN3aXRjaGVzIGFnZ3JlZ2F0ZSB2YWx1ZXMpLCBhIGJpdCBsaWtlIGBnZXRvcHQoMSlgIGRvZXMuCisKK0l0IHRha2VzIG9uIHRoZSBzdGFuZGFyZCBpbnB1dCB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgb3B0aW9ucyB0byBwYXJzZSBhbmQKK3VuZGVyc3RhbmQsIGFuZCBlY2hvZXMgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBhIHN0cmluZyBzdWl0YWJsZSBmb3IgYHNoKDEpYCBgZXZhbGAKK3RvIHJlcGxhY2UgdGhlIGFyZ3VtZW50cyB3aXRoIG5vcm1hbGl6ZWQgb25lcy4gIEluIGNhc2Ugb2YgZXJyb3IsIGl0IG91dHB1dHMKK3VzYWdlIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0sIGFuZCBleGl0cyB3aXRoIGNvZGUgMTI5LgorCitOb3RlOiBNYWtlIHN1cmUgeW91IHF1b3RlIHRoZSByZXN1bHQgd2hlbiBwYXNzaW5nIGl0IHRvIGBldmFsYC4gIFNlZQorYmVsb3cgZm9yIGFuIGV4YW1wbGUuCisKK0lucHV0IEZvcm1hdAorfn5+fn5+fn5+fn5+CisKKydnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQnIGlucHV0IGZvcm1hdCBpcyBmdWxseSB0ZXh0IGJhc2VkLiBJdCBoYXMgdHdvIHBhcnRzLAorc2VwYXJhdGVkIGJ5IGEgbGluZSB0aGF0IGNvbnRhaW5zIG9ubHkgYC0tYC4gVGhlIGxpbmVzIGJlZm9yZSB0aGUgc2VwYXJhdG9yCisoc2hvdWxkIGJlIG9uZSBvciBtb3JlKSBhcmUgdXNlZCBmb3IgdGhlIHVzYWdlLgorVGhlIGxpbmVzIGFmdGVyIHRoZSBzZXBhcmF0b3IgZGVzY3JpYmUgdGhlIG9wdGlvbnMuCisKK0VhY2ggbGluZSBvZiBvcHRpb25zIGhhcyB0aGlzIGZvcm1hdDoKKworLS0tLS0tLS0tLS0tCis8b3B0LXNwZWM+PGZsYWdzPio8YXJnLWhpbnQ+PyBTUCsgaGVscCBMRgorLS0tLS0tLS0tLS0tCisKK2A8b3B0LXNwZWM+YDo6CisJaXRzIGZvcm1hdCBpcyB0aGUgc2hvcnQgb3B0aW9uIGNoYXJhY3RlciwgdGhlbiB0aGUgbG9uZyBvcHRpb24gbmFtZQorCXNlcGFyYXRlZCBieSBhIGNvbW1hLiBCb3RoIHBhcnRzIGFyZSBub3QgcmVxdWlyZWQsIHRob3VnaCBhdCBsZWFzdCBvbmUKKwlpcyBuZWNlc3NhcnkuIE1heSBub3QgY29udGFpbiBhbnkgb2YgdGhlIGA8ZmxhZ3M+YCBjaGFyYWN0ZXJzLgorCWBoLGhlbHBgLCBgZHJ5LXJ1bmAgYW5kIGBmYCBhcmUgZXhhbXBsZXMgb2YgY29ycmVjdCBgPG9wdC1zcGVjPmAuCisKK2A8ZmxhZ3M+YDo6CisJYDxmbGFncz5gIGFyZSBvZiBgKmAsIGA9YCwgYD9gIG9yIGAhYC4KKwkqIFVzZSBgPWAgaWYgdGhlIG9wdGlvbiB0YWtlcyBhbiBhcmd1bWVudC4KKworCSogVXNlIGA/YCB0byBtZWFuIHRoYXQgdGhlIG9wdGlvbiB0YWtlcyBhbiBvcHRpb25hbCBhcmd1bWVudC4gWW91CisJICBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgYC0tc3R1Y2stbG9uZ2AgbW9kZSB0byBiZSBhYmxlIHRvCisJICB1bmFtYmlndW91c2x5IHBhcnNlIHRoZSBvcHRpb25hbCBhcmd1bWVudC4KKworCSogVXNlIGAqYCB0byBtZWFuIHRoYXQgdGhpcyBvcHRpb24gc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHVzYWdlCisJICBnZW5lcmF0ZWQgZm9yIHRoZSBgLWhgIGFyZ3VtZW50LiBJdCdzIHNob3duIGZvciBgLS1oZWxwLWFsbGAgYXMKKwkgIGRvY3VtZW50ZWQgaW4gbGlua2dpdDpnaXRjbGlbN10uCisKKwkqIFVzZSBgIWAgdG8gbm90IG1ha2UgdGhlIGNvcnJlc3BvbmRpbmcgbmVnYXRlZCBsb25nIG9wdGlvbiBhdmFpbGFibGUuCisKK2A8YXJnLWhpbnQ+YDo6CisJYDxhcmctaGludD5gLCBpZiBzcGVjaWZpZWQsIGlzIHVzZWQgYXMgYSBuYW1lIG9mIHRoZSBhcmd1bWVudCBpbiB0aGUKKwloZWxwIG91dHB1dCwgZm9yIG9wdGlvbnMgdGhhdCB0YWtlIGFyZ3VtZW50cy4gYDxhcmctaGludD5gIGlzCisJdGVybWluYXRlZCBieSB0aGUgZmlyc3Qgd2hpdGVzcGFjZS4gIEl0IGlzIGN1c3RvbWFyeSB0byB1c2UgYQorCWRhc2ggdG8gc2VwYXJhdGUgd29yZHMgaW4gYSBtdWx0aS13b3JkIGFyZ3VtZW50IGhpbnQuCisKK1RoZSByZW1haW5kZXIgb2YgdGhlIGxpbmUsIGFmdGVyIHN0cmlwcGluZyB0aGUgc3BhY2VzLCBpcyB1c2VkCithcyB0aGUgaGVscCBhc3NvY2lhdGVkIHRvIHRoZSBvcHRpb24uCisKK0JsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLCBhbmQgbGluZXMgdGhhdCBkb24ndCBtYXRjaCB0aGlzIHNwZWNpZmljYXRpb24gYXJlIHVzZWQKK2FzIG9wdGlvbiBncm91cCBoZWFkZXJzIChzdGFydCB0aGUgbGluZSB3aXRoIGEgc3BhY2UgdG8gY3JlYXRlIHN1Y2gKK2xpbmVzIG9uIHB1cnBvc2UpLgorCitFeGFtcGxlCit+fn5+fn5+CisKKy0tLS0tLS0tLS0tLQorT1BUU19TUEVDPSJcCitzb21lLWNvbW1hbmQgW29wdGlvbnNdIDxhcmdzPi4uLgorCitzb21lLWNvbW1hbmQgZG9lcyBmb28gYW5kIGJhciEKKy0tCitoLGhlbHAgICAgc2hvdyB0aGUgaGVscAorCitmb28gICAgICAgc29tZSBuaWZ0eSBvcHRpb24gLS1mb28KK2Jhcj0gICAgICBzb21lIGNvb2wgb3B0aW9uIC0tYmFyIHdpdGggYW4gYXJndW1lbnQKK2Jhej1hcmcgICBhbm90aGVyIGNvb2wgb3B0aW9uIC0tYmF6IHdpdGggYSBuYW1lZCBhcmd1bWVudAorcXV4P3BhdGggIHF1eCBtYXkgdGFrZSBhIHBhdGggYXJndW1lbnQgYnV0IGhhcyBtZWFuaW5nIGJ5IGl0c2VsZgorCisgIEFuIG9wdGlvbiBncm91cCBIZWFkZXIKK0M/ICAgICAgICBvcHRpb24gQyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50IgorCitldmFsICIkKGVjaG8gIiRPUFRTX1NQRUMiIHwgZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tICIkQCIgfHwgZWNobyBleGl0ICQ/KSIKKy0tLS0tLS0tLS0tLQorCisKK1VzYWdlIHRleHQKK35+fn5+fn5+fn4KKworV2hlbiBgIiRAImAgaXMgYC1oYCBvciBgLS1oZWxwYCBpbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGZvbGxvd2luZwordXNhZ2UgdGV4dCB3b3VsZCBiZSBzaG93bjoKKworLS0tLS0tLS0tLS0tCit1c2FnZTogc29tZS1jb21tYW5kIFtvcHRpb25zXSA8YXJncz4uLi4KKworICAgIHNvbWUtY29tbWFuZCBkb2VzIGZvbyBhbmQgYmFyIQorCisgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhlIGhlbHAKKyAgICAtLWZvbyAgICAgICAgICAgICAgICAgc29tZSBuaWZ0eSBvcHRpb24gLS1mb28KKyAgICAtLWJhciAuLi4gICAgICAgICAgICAgc29tZSBjb29sIG9wdGlvbiAtLWJhciB3aXRoIGFuIGFyZ3VtZW50CisgICAgLS1iYXogPGFyZz4gICAgICAgICAgIGFub3RoZXIgY29vbCBvcHRpb24gLS1iYXogd2l0aCBhIG5hbWVkIGFyZ3VtZW50CisgICAgLS1xdXhbPTxwYXRoPl0gICAgICAgIHF1eCBtYXkgdGFrZSBhIHBhdGggYXJndW1lbnQgYnV0IGhhcyBtZWFuaW5nIGJ5IGl0c2VsZgorCitBbiBvcHRpb24gZ3JvdXAgSGVhZGVyCisgICAgLUNbLi4uXSAgICAgICAgICAgICAgIG9wdGlvbiBDIHdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQKKy0tLS0tLS0tLS0tLQorCitTUS1RVU9URQorLS0tLS0tLS0KKworSW4gYC0tc3EtcXVvdGVgIG1vZGUsICdnaXQgcmV2LXBhcnNlJyBlY2hvZXMgb24gdGhlIHN0YW5kYXJkIG91dHB1dCBhCitzaW5nbGUgbGluZSBzdWl0YWJsZSBmb3IgYHNoKDEpYCBgZXZhbGAuIFRoaXMgbGluZSBpcyBtYWRlIGJ5Citub3JtYWxpemluZyB0aGUgYXJndW1lbnRzIGZvbGxvd2luZyBgLS1zcS1xdW90ZWAuIE5vdGhpbmcgb3RoZXIgdGhhbgorcXVvdGluZyB0aGUgYXJndW1lbnRzIGlzIGRvbmUuCisKK0lmIHlvdSB3YW50IGNvbW1hbmQgaW5wdXQgdG8gc3RpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgdXN1YWwgYnkKKydnaXQgcmV2LXBhcnNlJyBiZWZvcmUgdGhlIG91dHB1dCBpcyBzaGVsbCBxdW90ZWQsIHNlZSB0aGUgYC0tc3FgCitvcHRpb24uCisKK0V4YW1wbGUKK35+fn5+fn4KKworLS0tLS0tLS0tLS0tCiskIGNhdCA+eW91ci1naXQtc2NyaXB0LnNoIDw8XEVPRgorIyEvYmluL3NoCithcmdzPSQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkQCIpICAgIyBxdW90ZSB1c2VyLXN1cHBsaWVkIGFyZ3VtZW50cworY29tbWFuZD0iZ2l0IGZyb3R6IC1uMjQgJGFyZ3MiICAgICAgICAgICMgYW5kIHVzZSBpdCBpbnNpZGUgYSBoYW5kY3JhZnRlZAorCQkJCQkjIGNvbW1hbmQgbGluZQorZXZhbCAiJGNvbW1hbmQiCitFT0YKKworJCBzaCB5b3VyLWdpdC1zY3JpcHQuc2ggImEgYidjIgorLS0tLS0tLS0tLS0tCisKK0VYQU1QTEVTCistLS0tLS0tLQorCisqIFByaW50IHRoZSBvYmplY3QgbmFtZSBvZiB0aGUgY3VycmVudCBjb21taXQ6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFECistLS0tLS0tLS0tLS0KKworKiBQcmludCB0aGUgY29tbWl0IG9iamVjdCBuYW1lIGZyb20gdGhlIHJldmlzaW9uIGluIHRoZSAkUkVWIHNoZWxsIHZhcmlhYmxlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJFJFVl57Y29tbWl0fQorLS0tLS0tLS0tLS0tCisrCitUaGlzIHdpbGwgZXJyb3Igb3V0IGlmICRSRVYgaXMgZW1wdHkgb3Igbm90IGEgdmFsaWQgcmV2aXNpb24uCisKKyogU2ltaWxhciB0byBhYm92ZToKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBtYXN0ZXIgLS12ZXJpZnkgJFJFVgorLS0tLS0tLS0tLS0tCisrCitidXQgaWYgJFJFViBpcyBlbXB0eSwgdGhlIGNvbW1pdCBvYmplY3QgbmFtZSBmcm9tIG1hc3RlciB3aWxsIGJlIHByaW50ZWQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcmV2ZXJ0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1MTM5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXJldmVydC50eHQKQEAgLTAsMCArMSwxMjggQEAKK2dpdC1yZXZlcnQoMSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXJldmVydCAtIFJldmVydCBzb21lIGV4aXN0aW5nIGNvbW1pdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHJldmVydCcgWy0tW25vLV1lZGl0XSBbLW5dIFstbSBwYXJlbnQtbnVtYmVyXSBbLXNdIFstU1s8a2V5aWQ+XV0gPGNvbW1pdD4uLi4KKydnaXQgcmV2ZXJ0JyAtLWNvbnRpbnVlCisnZ2l0IHJldmVydCcgLS1xdWl0CisnZ2l0IHJldmVydCcgLS1hYm9ydAorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2l2ZW4gb25lIG9yIG1vcmUgZXhpc3RpbmcgY29tbWl0cywgcmV2ZXJ0IHRoZSBjaGFuZ2VzIHRoYXQgdGhlCityZWxhdGVkIHBhdGNoZXMgaW50cm9kdWNlLCBhbmQgcmVjb3JkIHNvbWUgbmV3IGNvbW1pdHMgdGhhdCByZWNvcmQKK3RoZW0uICBUaGlzIHJlcXVpcmVzIHlvdXIgd29ya2luZyB0cmVlIHRvIGJlIGNsZWFuIChubyBtb2RpZmljYXRpb25zCitmcm9tIHRoZSBIRUFEIGNvbW1pdCkuCisKK05vdGU6ICdnaXQgcmV2ZXJ0JyBpcyB1c2VkIHRvIHJlY29yZCBzb21lIG5ldyBjb21taXRzIHRvIHJldmVyc2UgdGhlCitlZmZlY3Qgb2Ygc29tZSBlYXJsaWVyIGNvbW1pdHMgKG9mdGVuIG9ubHkgYSBmYXVsdHkgb25lKS4gIElmIHlvdSB3YW50IHRvCit0aHJvdyBhd2F5IGFsbCB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnksIHlvdQorc2hvdWxkIHNlZSBsaW5rZ2l0OmdpdC1yZXNldFsxXSwgcGFydGljdWxhcmx5IHRoZSAnLS1oYXJkJyBvcHRpb24uICBJZgoreW91IHdhbnQgdG8gZXh0cmFjdCBzcGVjaWZpYyBmaWxlcyBhcyB0aGV5IHdlcmUgaW4gYW5vdGhlciBjb21taXQsIHlvdQorc2hvdWxkIHNlZSBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwgc3BlY2lmaWNhbGx5IHRoZSBgZ2l0IGNoZWNrb3V0Cis8Y29tbWl0PiAtLSA8ZmlsZW5hbWU+YCBzeW50YXguICBUYWtlIGNhcmUgd2l0aCB0aGVzZSBhbHRlcm5hdGl2ZXMgYXMKK2JvdGggd2lsbCBkaXNjYXJkIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorPGNvbW1pdD4uLi46OgorCUNvbW1pdHMgdG8gcmV2ZXJ0LgorCUZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIGNvbW1pdCBuYW1lcywgc2VlCisJbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisJU2V0cyBvZiBjb21taXRzIGNhbiBhbHNvIGJlIGdpdmVuIGJ1dCBubyB0cmF2ZXJzYWwgaXMgZG9uZSBieQorCWRlZmF1bHQsIHNlZSBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSBhbmQgaXRzICctLW5vLXdhbGsnCisJb3B0aW9uLgorCistZTo6CistLWVkaXQ6OgorCVdpdGggdGhpcyBvcHRpb24sICdnaXQgcmV2ZXJ0JyB3aWxsIGxldCB5b3UgZWRpdCB0aGUgY29tbWl0CisJbWVzc2FnZSBwcmlvciB0byBjb21taXR0aW5nIHRoZSByZXZlcnQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgaWYKKwl5b3UgcnVuIHRoZSBjb21tYW5kIGZyb20gYSB0ZXJtaW5hbC4KKworLW0gcGFyZW50LW51bWJlcjo6CistLW1haW5saW5lIHBhcmVudC1udW1iZXI6OgorCVVzdWFsbHkgeW91IGNhbm5vdCByZXZlcnQgYSBtZXJnZSBiZWNhdXNlIHlvdSBkbyBub3Qga25vdyB3aGljaAorCXNpZGUgb2YgdGhlIG1lcmdlIHNob3VsZCBiZSBjb25zaWRlcmVkIHRoZSBtYWlubGluZS4gIFRoaXMKKwlvcHRpb24gc3BlY2lmaWVzIHRoZSBwYXJlbnQgbnVtYmVyIChzdGFydGluZyBmcm9tIDEpIG9mCisJdGhlIG1haW5saW5lIGFuZCBhbGxvd3MgcmV2ZXJ0IHRvIHJldmVyc2UgdGhlIGNoYW5nZQorCXJlbGF0aXZlIHRvIHRoZSBzcGVjaWZpZWQgcGFyZW50LgorKworUmV2ZXJ0aW5nIGEgbWVyZ2UgY29tbWl0IGRlY2xhcmVzIHRoYXQgeW91IHdpbGwgbmV2ZXIgd2FudCB0aGUgdHJlZSBjaGFuZ2VzCiticm91Z2h0IGluIGJ5IHRoZSBtZXJnZS4gIEFzIGEgcmVzdWx0LCBsYXRlciBtZXJnZXMgd2lsbCBvbmx5IGJyaW5nIGluIHRyZWUKK2NoYW5nZXMgaW50cm9kdWNlZCBieSBjb21taXRzIHRoYXQgYXJlIG5vdCBhbmNlc3RvcnMgb2YgdGhlIHByZXZpb3VzbHkKK3JldmVydGVkIG1lcmdlLiAgVGhpcyBtYXkgb3IgbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50LgorKworU2VlIHRoZSBsaW5rOmhvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS5odG1sW3JldmVydC1hLWZhdWx0eS1tZXJnZSBIb3ctVG9dIGZvcgorbW9yZSBkZXRhaWxzLgorCistLW5vLWVkaXQ6OgorCVdpdGggdGhpcyBvcHRpb24sICdnaXQgcmV2ZXJ0JyB3aWxsIG5vdCBzdGFydCB0aGUgY29tbWl0CisJbWVzc2FnZSBlZGl0b3IuCisKKy1uOjoKKy0tbm8tY29tbWl0OjoKKwlVc3VhbGx5IHRoZSBjb21tYW5kIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBzb21lIGNvbW1pdHMgd2l0aAorCWNvbW1pdCBsb2cgbWVzc2FnZXMgc3RhdGluZyB3aGljaCBjb21taXRzIHdlcmUKKwlyZXZlcnRlZC4gIFRoaXMgZmxhZyBhcHBsaWVzIHRoZSBjaGFuZ2VzIG5lY2Vzc2FyeQorCXRvIHJldmVydCB0aGUgbmFtZWQgY29tbWl0cyB0byB5b3VyIHdvcmtpbmcgdHJlZQorCWFuZCB0aGUgaW5kZXgsIGJ1dCBkb2VzIG5vdCBtYWtlIHRoZSBjb21taXRzLiAgSW4gYWRkaXRpb24sCisJd2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLCB5b3VyIGluZGV4IGRvZXMgbm90IGhhdmUgdG8gbWF0Y2gKKwl0aGUgSEVBRCBjb21taXQuICBUaGUgcmV2ZXJ0IGlzIGRvbmUgYWdhaW5zdCB0aGUKKwliZWdpbm5pbmcgc3RhdGUgb2YgeW91ciBpbmRleC4KKysKK1RoaXMgaXMgdXNlZnVsIHdoZW4gcmV2ZXJ0aW5nIG1vcmUgdGhhbiBvbmUgY29tbWl0cycKK2VmZmVjdCB0byB5b3VyIGluZGV4IGluIGEgcm93LgorCistU1s8a2V5aWQ+XTo6CistLWdwZy1zaWduWz08a2V5aWQ+XTo6CisJR1BHLXNpZ24gY29tbWl0cy4gVGhlIGBrZXlpZGAgYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kCisJZGVmYXVsdHMgdG8gdGhlIGNvbW1pdHRlciBpZGVudGl0eTsgaWYgc3BlY2lmaWVkLCBpdCBtdXN0IGJlCisJc3R1Y2sgdG8gdGhlIG9wdGlvbiB3aXRob3V0IGEgc3BhY2UuCisKKy1zOjoKKy0tc2lnbm9mZjo6CisJQWRkIFNpZ25lZC1vZmYtYnkgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBjb21taXQgbWVzc2FnZS4KKworLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKKwlVc2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5LiAgU2hvdWxkIG9ubHkgYmUgdXNlZCBvbmNlLgorCVNlZSB0aGUgTUVSR0UgU1RSQVRFR0lFUyBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdCisJZm9yIGRldGFpbHMuCisKKy1YPG9wdGlvbj46OgorLS1zdHJhdGVneS1vcHRpb249PG9wdGlvbj46OgorCVBhc3MgdGhlIG1lcmdlIHN0cmF0ZWd5LXNwZWNpZmljIG9wdGlvbiB0aHJvdWdoIHRvIHRoZQorCW1lcmdlIHN0cmF0ZWd5LiAgU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGZvciBkZXRhaWxzLgorCitTRVFVRU5DRVIgU1VCQ09NTUFORFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5jbHVkZTo6c2VxdWVuY2VyLnR4dFtdCisKK0VYQU1QTEVTCistLS0tLS0tLQorYGdpdCByZXZlcnQgSEVBRH4zYDo6CisKKwlSZXZlcnQgdGhlIGNoYW5nZXMgc3BlY2lmaWVkIGJ5IHRoZSBmb3VydGggbGFzdCBjb21taXQgaW4gSEVBRAorCWFuZCBjcmVhdGUgYSBuZXcgY29tbWl0IHdpdGggdGhlIHJldmVydGVkIGNoYW5nZXMuCisKK2BnaXQgcmV2ZXJ0IC1uIG1hc3Rlcn41Li5tYXN0ZXJ+MmA6OgorCisJUmV2ZXJ0IHRoZSBjaGFuZ2VzIGRvbmUgYnkgY29tbWl0cyBmcm9tIHRoZSBmaWZ0aCBsYXN0IGNvbW1pdAorCWluIG1hc3RlciAoaW5jbHVkZWQpIHRvIHRoZSB0aGlyZCBsYXN0IGNvbW1pdCBpbiBtYXN0ZXIKKwkoaW5jbHVkZWQpLCBidXQgZG8gbm90IGNyZWF0ZSBhbnkgY29tbWl0IHdpdGggdGhlIHJldmVydGVkCisJY2hhbmdlcy4gVGhlIHJldmVydCBvbmx5IG1vZGlmaWVzIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZQorCWluZGV4LgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNoZXJyeS1waWNrWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcm0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZWZjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1ybS50eHQKQEAgLTAsMCArMSwxODggQEAKK2dpdC1ybSgxKQorPT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1ybSAtIFJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBybScgWy1mIHwgLS1mb3JjZV0gWy1uXSBbLXJdIFstLWNhY2hlZF0gWy0taWdub3JlLXVubWF0Y2hdIFstLXF1aWV0XSBbLS1dIDxmaWxlPi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBpbmRleCwgb3IgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUgaW5kZXguCitgZ2l0IHJtYCB3aWxsIG5vdCByZW1vdmUgYSBmaWxlIGZyb20ganVzdCB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LgorKFRoZXJlIGlzIG5vIG9wdGlvbiB0byByZW1vdmUgYSBmaWxlIG9ubHkgZnJvbSB0aGUgd29ya2luZyB0cmVlCithbmQgeWV0IGtlZXAgaXQgaW4gdGhlIGluZGV4OyB1c2UgYC9iaW4vcm1gIGlmIHlvdSB3YW50IHRvIGRvIHRoYXQuKQorVGhlIGZpbGVzIGJlaW5nIHJlbW92ZWQgaGF2ZSB0byBiZSBpZGVudGljYWwgdG8gdGhlIHRpcCBvZiB0aGUgYnJhbmNoLAorYW5kIG5vIHVwZGF0ZXMgdG8gdGhlaXIgY29udGVudHMgY2FuIGJlIHN0YWdlZCBpbiB0aGUgaW5kZXgsCit0aG91Z2ggdGhhdCBkZWZhdWx0IGJlaGF2aW9yIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIGAtZmAgb3B0aW9uLgorV2hlbiBgLS1jYWNoZWRgIGlzIGdpdmVuLCB0aGUgc3RhZ2VkIGNvbnRlbnQgaGFzIHRvCittYXRjaCBlaXRoZXIgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIG9yIHRoZSBmaWxlIG9uIGRpc2ssCithbGxvd2luZyB0aGUgZmlsZSB0byBiZSByZW1vdmVkIGZyb20ganVzdCB0aGUgaW5kZXguCisKKworT1BUSU9OUworLS0tLS0tLQorPGZpbGU+Li4uOjoKKwlGaWxlcyB0byByZW1vdmUuICBGaWxlZ2xvYnMgKGUuZy4gYCouY2ApIGNhbiBiZSBnaXZlbiB0bworCXJlbW92ZSBhbGwgbWF0Y2hpbmcgZmlsZXMuICBJZiB5b3Ugd2FudCBHaXQgdG8gZXhwYW5kCisJZmlsZSBnbG9iIGNoYXJhY3RlcnMsIHlvdSBtYXkgbmVlZCB0byBzaGVsbC1lc2NhcGUgdGhlbS4KKwlBIGxlYWRpbmcgZGlyZWN0b3J5IG5hbWUKKwkoZS5nLiBgZGlyYCB0byByZW1vdmUgYGRpci9maWxlMWAgYW5kIGBkaXIvZmlsZTJgKSBjYW4gYmUKKwlnaXZlbiB0byByZW1vdmUgYWxsIGZpbGVzIGluIHRoZSBkaXJlY3RvcnksIGFuZCByZWN1cnNpdmVseQorCWFsbCBzdWItZGlyZWN0b3JpZXMsCisJYnV0IHRoaXMgcmVxdWlyZXMgdGhlIGAtcmAgb3B0aW9uIHRvIGJlIGV4cGxpY2l0bHkgZ2l2ZW4uCisKKy1mOjoKKy0tZm9yY2U6OgorCU92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrLgorCistbjo6CistLWRyeS1ydW46OgorCURvbid0IGFjdHVhbGx5IHJlbW92ZSBhbnkgZmlsZShzKS4gIEluc3RlYWQsIGp1c3Qgc2hvdworCWlmIHRoZXkgZXhpc3QgaW4gdGhlIGluZGV4IGFuZCB3b3VsZCBvdGhlcndpc2UgYmUgcmVtb3ZlZAorCWJ5IHRoZSBjb21tYW5kLgorCistcjo6CisgICAgICAgIEFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIHdoZW4gYSBsZWFkaW5nIGRpcmVjdG9yeSBuYW1lIGlzCisgICAgICAgIGdpdmVuLgorCitcLS06OgorCVRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNlcGFyYXRlIGNvbW1hbmQtbGluZSBvcHRpb25zIGZyb20KKwl0aGUgbGlzdCBvZiBmaWxlcywgKHVzZWZ1bCB3aGVuIGZpbGVuYW1lcyBtaWdodCBiZSBtaXN0YWtlbgorCWZvciBjb21tYW5kLWxpbmUgb3B0aW9ucykuCisKKy0tY2FjaGVkOjoKKwlVc2UgdGhpcyBvcHRpb24gdG8gdW5zdGFnZSBhbmQgcmVtb3ZlIHBhdGhzIG9ubHkgZnJvbSB0aGUgaW5kZXguCisJV29ya2luZyB0cmVlIGZpbGVzLCB3aGV0aGVyIG1vZGlmaWVkIG9yIG5vdCwgd2lsbCBiZQorCWxlZnQgYWxvbmUuCisKKy0taWdub3JlLXVubWF0Y2g6OgorCUV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm8gZmlsZXMgbWF0Y2hlZC4KKworLXE6OgorLS1xdWlldDo6CisJYGdpdCBybWAgbm9ybWFsbHkgb3V0cHV0cyBvbmUgbGluZSAoaW4gdGhlIGZvcm0gb2YgYW4gYHJtYCBjb21tYW5kKQorCWZvciBlYWNoIGZpbGUgcmVtb3ZlZC4gVGhpcyBvcHRpb24gc3VwcHJlc3NlcyB0aGF0IG91dHB1dC4KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK1RoZSA8ZmlsZT4gbGlzdCBnaXZlbiB0byB0aGUgY29tbWFuZCBjYW4gYmUgZXhhY3QgcGF0aG5hbWVzLAorZmlsZSBnbG9iIHBhdHRlcm5zLCBvciBsZWFkaW5nIGRpcmVjdG9yeSBuYW1lcy4gIFRoZSBjb21tYW5kCityZW1vdmVzIG9ubHkgdGhlIHBhdGhzIHRoYXQgYXJlIGtub3duIHRvIEdpdC4gIEdpdmluZyB0aGUgbmFtZSBvZgorYSBmaWxlIHRoYXQgeW91IGhhdmUgbm90IHRvbGQgR2l0IGFib3V0IGRvZXMgbm90IHJlbW92ZSB0aGF0IGZpbGUuCisKK0ZpbGUgZ2xvYmJpbmcgbWF0Y2hlcyBhY3Jvc3MgZGlyZWN0b3J5IGJvdW5kYXJpZXMuICBUaHVzLCBnaXZlbgordHdvIGRpcmVjdG9yaWVzIGBkYCBhbmQgYGQyYCwgdGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4KK3VzaW5nIGBnaXQgcm0gJ2QqJ2AgYW5kIGBnaXQgcm0gJ2QvKidgLCBhcyB0aGUgZm9ybWVyIHdpbGwKK2Fsc28gcmVtb3ZlIGFsbCBvZiBkaXJlY3RvcnkgYGQyYC4KKworUkVNT1ZJTkcgRklMRVMgVEhBVCBIQVZFIERJU0FQUEVBUkVEIEZST00gVEhFIEZJTEVTWVNURU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBpcyBubyBvcHRpb24gZm9yIGBnaXQgcm1gIHRvIHJlbW92ZSBmcm9tIHRoZSBpbmRleCBvbmx5Cit0aGUgcGF0aHMgdGhhdCBoYXZlIGRpc2FwcGVhcmVkIGZyb20gdGhlIGZpbGVzeXN0ZW0uIEhvd2V2ZXIsCitkZXBlbmRpbmcgb24gdGhlIHVzZSBjYXNlLCB0aGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHRoYXQgY2FuIGJlCitkb25lLgorCitVc2luZyBgYGdpdCBjb21taXQgLWEnJworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0lmIHlvdSBpbnRlbmQgdGhhdCB5b3VyIG5leHQgY29tbWl0IHNob3VsZCByZWNvcmQgYWxsIG1vZGlmaWNhdGlvbnMKK29mIHRyYWNrZWQgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZSBhbmQgcmVjb3JkIGFsbCByZW1vdmFscyBvZgorZmlsZXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUgd2l0aCBgcm1gCisoYXMgb3Bwb3NlZCB0byBgZ2l0IHJtYCksIHVzZSBgZ2l0IGNvbW1pdCAtYWAsIGFzIGl0IHdpbGwKK2F1dG9tYXRpY2FsbHkgbm90aWNlIGFuZCByZWNvcmQgYWxsIHJlbW92YWxzLiAgWW91IGNhbiBhbHNvIGhhdmUgYQorc2ltaWxhciBlZmZlY3Qgd2l0aG91dCBjb21taXR0aW5nIGJ5IHVzaW5nIGBnaXQgYWRkIC11YC4KKworVXNpbmcgYGBnaXQgYWRkIC1BJycKK35+fn5+fn5+fn5+fn5+fn5+fn5+CitXaGVuIGFjY2VwdGluZyBhIG5ldyBjb2RlIGRyb3AgZm9yIGEgdmVuZG9yIGJyYW5jaCwgeW91IHByb2JhYmx5Cit3YW50IHRvIHJlY29yZCBib3RoIHRoZSByZW1vdmFsIG9mIHBhdGhzIGFuZCBhZGRpdGlvbnMgb2YgbmV3IHBhdGhzCithcyB3ZWxsIGFzIG1vZGlmaWNhdGlvbnMgb2YgZXhpc3RpbmcgcGF0aHMuCisKK1R5cGljYWxseSB5b3Ugd291bGQgZmlyc3QgcmVtb3ZlIGFsbCB0cmFja2VkIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcKK3RyZWUgdXNpbmcgdGhpcyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tCitnaXQgbHMtZmlsZXMgLXogfCB4YXJncyAtMCBybSAtZgorLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhlbiB1bnRhciB0aGUgbmV3IGNvZGUgaW4gdGhlIHdvcmtpbmcgdHJlZS4gQWx0ZXJuYXRlbHkKK3lvdSBjb3VsZCAncnN5bmMnIHRoZSBjaGFuZ2VzIGludG8gdGhlIHdvcmtpbmcgdHJlZS4KKworQWZ0ZXIgdGhhdCwgdGhlIGVhc2llc3Qgd2F5IHRvIHJlY29yZCBhbGwgcmVtb3ZhbHMsIGFkZGl0aW9ucywgYW5kCittb2RpZmljYXRpb25zIGluIHRoZSB3b3JraW5nIHRyZWUgaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0KK2dpdCBhZGQgLUEKKy0tLS0tLS0tLS0tLS0tLS0KKworU2VlIGxpbmtnaXQ6Z2l0LWFkZFsxXS4KKworT3RoZXIgd2F5cworfn5+fn5+fn5+fgorSWYgYWxsIHlvdSByZWFsbHkgd2FudCB0byBkbyBpcyB0byByZW1vdmUgZnJvbSB0aGUgaW5kZXggdGhlIGZpbGVzCit0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudCBpbiB0aGUgd29ya2luZyB0cmVlIChwZXJoYXBzIGJlY2F1c2UKK3lvdXIgd29ya2luZyB0cmVlIGlzIGRpcnR5IHNvIHRoYXQgeW91IGNhbm5vdCB1c2UgYGdpdCBjb21taXQgLWFgKSwKK3VzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLS0tLS0KK2dpdCBkaWZmIC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9RCAteiB8IHhhcmdzIC0wIGdpdCBybSAtLWNhY2hlZAorLS0tLS0tLS0tLS0tLS0tLQorCitTVUJNT0RVTEVTCistLS0tLS0tLS0tCitPbmx5IHN1Ym1vZHVsZXMgdXNpbmcgYSBnaXRmaWxlICh3aGljaCBtZWFucyB0aGV5IHdlcmUgY2xvbmVkCit3aXRoIGEgR2l0IHZlcnNpb24gMS43Ljggb3IgbmV3ZXIpIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSB3b3JrCit0cmVlLCBhcyB0aGVpciByZXBvc2l0b3J5IGxpdmVzIGluc2lkZSB0aGUgLmdpdCBkaXJlY3Rvcnkgb2YgdGhlCitzdXBlcnByb2plY3QuIElmIGEgc3VibW9kdWxlIChvciBvbmUgb2YgdGhvc2UgbmVzdGVkIGluc2lkZSBpdCkKK3N0aWxsIHVzZXMgYSAuZ2l0IGRpcmVjdG9yeSwgYGdpdCBybWAgd2lsbCBmYWlsIC0gbm8gbWF0dGVyIGlmIGZvcmNlZAorb3Igbm90IC0gdG8gcHJvdGVjdCB0aGUgc3VibW9kdWxlJ3MgaGlzdG9yeS4gSWYgaXQgZXhpc3RzIHRoZQorc3VibW9kdWxlLjxuYW1lPiBzZWN0aW9uIGluIHRoZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0gZmlsZSB3aWxsIGFsc28KK2JlIHJlbW92ZWQgYW5kIHRoYXQgZmlsZSB3aWxsIGJlIHN0YWdlZCAodW5sZXNzIC0tY2FjaGVkIG9yIC1uIGFyZSB1c2VkKS4KKworQSBzdWJtb2R1bGUgaXMgY29uc2lkZXJlZCB1cC10by1kYXRlIHdoZW4gdGhlIEhFQUQgaXMgdGhlIHNhbWUgYXMKK3JlY29yZGVkIGluIHRoZSBpbmRleCwgbm8gdHJhY2tlZCBmaWxlcyBhcmUgbW9kaWZpZWQgYW5kIG5vIHVudHJhY2tlZAorZmlsZXMgdGhhdCBhcmVuJ3QgaWdub3JlZCBhcmUgcHJlc2VudCBpbiB0aGUgc3VibW9kdWxlcyB3b3JrIHRyZWUuCitJZ25vcmVkIGZpbGVzIGFyZSBkZWVtZWQgZXhwZW5kYWJsZSBhbmQgd29uJ3Qgc3RvcCBhIHN1Ym1vZHVsZSdzIHdvcmsKK3RyZWUgZnJvbSBiZWluZyByZW1vdmVkLgorCitJZiB5b3Ugb25seSB3YW50IHRvIHJlbW92ZSB0aGUgbG9jYWwgY2hlY2tvdXQgb2YgYSBzdWJtb2R1bGUgZnJvbSB5b3VyCit3b3JrIHRyZWUgd2l0aG91dCBjb21taXR0aW5nIHRoZSByZW1vdmFsLAordXNlIGxpbmtnaXQ6Z2l0LXN1Ym1vZHVsZVsxXSBgZGVpbml0YCBpbnN0ZWFkLgorCitFWEFNUExFUworLS0tLS0tLS0KK2BnaXQgcm0gRG9jdW1lbnRhdGlvbi9cKi50eHRgOjoKKwlSZW1vdmVzIGFsbCBgKi50eHRgIGZpbGVzIGZyb20gdGhlIGluZGV4IHRoYXQgYXJlIHVuZGVyIHRoZQorCWBEb2N1bWVudGF0aW9uYCBkaXJlY3RvcnkgYW5kIGFueSBvZiBpdHMgc3ViZGlyZWN0b3JpZXMuCisrCitOb3RlIHRoYXQgdGhlIGFzdGVyaXNrIGAqYCBpcyBxdW90ZWQgZnJvbSB0aGUgc2hlbGwgaW4gdGhpcworZXhhbXBsZTsgdGhpcyBsZXRzIEdpdCwgYW5kIG5vdCB0aGUgc2hlbGwsIGV4cGFuZCB0aGUgcGF0aG5hbWVzCitvZiBmaWxlcyBhbmQgc3ViZGlyZWN0b3JpZXMgdW5kZXIgdGhlIGBEb2N1bWVudGF0aW9uL2AgZGlyZWN0b3J5LgorCitgZ2l0IHJtIC1mIGdpdC0qLnNoYDo6CisJQmVjYXVzZSB0aGlzIGV4YW1wbGUgbGV0cyB0aGUgc2hlbGwgZXhwYW5kIHRoZSBhc3RlcmlzaworCShpLmUuIHlvdSBhcmUgbGlzdGluZyB0aGUgZmlsZXMgZXhwbGljaXRseSksIGl0CisJZG9lcyBub3QgcmVtb3ZlIGBzdWJkaXIvZ2l0LWZvby5zaGAuCisKK0JVR1MKKy0tLS0KK0VhY2ggdGltZSBhIHN1cGVycHJvamVjdCB1cGRhdGUgcmVtb3ZlcyBhIHBvcHVsYXRlZCBzdWJtb2R1bGUKKyhlLmcuIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gY29tbWl0cyBiZWZvcmUgYW5kIGFmdGVyIHRoZSByZW1vdmFsKSBhCitzdGFsZSBzdWJtb2R1bGUgY2hlY2tvdXQgd2lsbCByZW1haW4gaW4gdGhlIG9sZCBsb2NhdGlvbi4gUmVtb3ZpbmcgdGhlCitvbGQgZGlyZWN0b3J5IGlzIG9ubHkgc2FmZSB3aGVuIGl0IHVzZXMgYSBnaXRmaWxlLCBhcyBvdGhlcndpc2UgdGhlCitoaXN0b3J5IG9mIHRoZSBzdWJtb2R1bGUgd2lsbCBiZSBkZWxldGVkIHRvby4gVGhpcyBzdGVwIHdpbGwgYmUKK29ic29sZXRlIHdoZW4gcmVjdXJzaXZlIHN1Ym1vZHVsZSB1cGRhdGUgaGFzIGJlZW4gaW1wbGVtZW50ZWQuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtYWRkWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zZW5kLWVtYWlsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTEzNGQyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1lbWFpbC50eHQKQEAgLTAsMCArMSw0NTggQEAKK2dpdC1zZW5kLWVtYWlsKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2VuZC1lbWFpbCAtIFNlbmQgYSBjb2xsZWN0aW9uIG9mIHBhdGNoZXMgYXMgZW1haWxzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHNlbmQtZW1haWwnIFtvcHRpb25zXSA8ZmlsZXxkaXJlY3Rvcnl8cmV2LWxpc3Qgb3B0aW9ucz4uLi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1Rha2VzIHRoZSBwYXRjaGVzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kIGVtYWlscyB0aGVtIG91dC4KK1BhdGNoZXMgY2FuIGJlIHNwZWNpZmllZCBhcyBmaWxlcywgZGlyZWN0b3JpZXMgKHdoaWNoIHdpbGwgc2VuZCBhbGwKK2ZpbGVzIGluIHRoZSBkaXJlY3RvcnkpLCBvciBkaXJlY3RseSBhcyBhIHJldmlzaW9uIGxpc3QuICBJbiB0aGUKK2xhc3QgY2FzZSwgYW55IGZvcm1hdCBhY2NlcHRlZCBieSBsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gY2FuCitiZSBwYXNzZWQgdG8gZ2l0IHNlbmQtZW1haWwuCisKK1RoZSBoZWFkZXIgb2YgdGhlIGVtYWlsIGlzIGNvbmZpZ3VyYWJsZSB2aWEgY29tbWFuZC1saW5lIG9wdGlvbnMuICBJZiBub3QKK3NwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkIHdpdGggYSBSZWFkTGluZQorZW5hYmxlZCBpbnRlcmZhY2UgdG8gcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLgorCitUaGVyZSBhcmUgdHdvIGZvcm1hdHMgYWNjZXB0ZWQgZm9yIHBhdGNoIGZpbGVzOgorCisxLiBtYm94IGZvcm1hdCBmaWxlcworKworVGhpcyBpcyB3aGF0IGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSBnZW5lcmF0ZXMuICBNb3N0IGhlYWRlcnMgYW5kIE1JTUUKK2Zvcm1hdHRpbmcgYXJlIGlnbm9yZWQuCisKKzIuIFRoZSBvcmlnaW5hbCBmb3JtYXQgdXNlZCBieSBHcmVnIEtyb2FoLUhhcnRtYW4ncyAnc2VuZF9sb3RzX29mX2VtYWlsLnBsJworc2NyaXB0CisrCitUaGlzIGZvcm1hdCBleHBlY3RzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmaWxlIHRvIGNvbnRhaW4gdGhlICJDYzoiIHZhbHVlCithbmQgdGhlICJTdWJqZWN0OiIgb2YgdGhlIG1lc3NhZ2UgYXMgdGhlIHNlY29uZCBsaW5lLgorCisKK09QVElPTlMKKy0tLS0tLS0KKworQ29tcG9zaW5nCit+fn5+fn5+fn4KKworLS1hbm5vdGF0ZTo6CisJUmV2aWV3IGFuZCBlZGl0IGVhY2ggcGF0Y2ggeW91J3JlIGFib3V0IHRvIHNlbmQuIERlZmF1bHQgaXMgdGhlIHZhbHVlCisJb2YgJ3NlbmRlbWFpbC5hbm5vdGF0ZScuIFNlZSB0aGUgQ09ORklHVVJBVElPTiBzZWN0aW9uIGZvcgorCSdzZW5kZW1haWwubXVsdGlFZGl0Jy4KKworLS1iY2M9PGFkZHJlc3M+LC4uLjo6CisJU3BlY2lmeSBhICJCY2M6IiB2YWx1ZSBmb3IgZWFjaCBlbWFpbC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YKKwknc2VuZGVtYWlsLmJjYycuCisrCitUaGlzIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgorCistLWNjPTxhZGRyZXNzPiwuLi46OgorCVNwZWNpZnkgYSBzdGFydGluZyAiQ2M6IiB2YWx1ZSBmb3IgZWFjaCBlbWFpbC4KKwlEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLmNjJy4KKysKK1RoaXMgb3B0aW9uIG1heSBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuCisKKy0tY29tcG9zZTo6CisJSW52b2tlIGEgdGV4dCBlZGl0b3IgKHNlZSBHSVRfRURJVE9SIGluIGxpbmtnaXQ6Z2l0LXZhclsxXSkKKwl0byBlZGl0IGFuIGludHJvZHVjdG9yeSBtZXNzYWdlIGZvciB0aGUgcGF0Y2ggc2VyaWVzLgorKworV2hlbiAnLS1jb21wb3NlJyBpcyB1c2VkLCBnaXQgc2VuZC1lbWFpbCB3aWxsIHVzZSB0aGUgRnJvbSwgU3ViamVjdCwgYW5kCitJbi1SZXBseS1UbyBoZWFkZXJzIHNwZWNpZmllZCBpbiB0aGUgbWVzc2FnZS4gSWYgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UKKyh3aGF0IHlvdSB0eXBlIGFmdGVyIHRoZSBoZWFkZXJzIGFuZCBhIGJsYW5rIGxpbmUpIG9ubHkgY29udGFpbnMgYmxhbmsKKyhvciBHaXQ6IHByZWZpeGVkKSBsaW5lcywgdGhlIHN1bW1hcnkgd29uJ3QgYmUgc2VudCwgYnV0IEZyb20sIFN1YmplY3QsCithbmQgSW4tUmVwbHktVG8gaGVhZGVycyB3aWxsIGJlIHVzZWQgdW5sZXNzIHRoZXkgYXJlIHJlbW92ZWQuCisrCitNaXNzaW5nIEZyb20gb3IgSW4tUmVwbHktVG8gaGVhZGVycyB3aWxsIGJlIHByb21wdGVkIGZvci4KKysKK1NlZSB0aGUgQ09ORklHVVJBVElPTiBzZWN0aW9uIGZvciAnc2VuZGVtYWlsLm11bHRpRWRpdCcuCisKKy0tZnJvbT08YWRkcmVzcz46OgorCVNwZWNpZnkgdGhlIHNlbmRlciBvZiB0aGUgZW1haWxzLiAgSWYgbm90IHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLAorCXRoZSB2YWx1ZSBvZiB0aGUgJ3NlbmRlbWFpbC5mcm9tJyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB1c2VkLiAgSWYKKwluZWl0aGVyIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIG5vciAnc2VuZGVtYWlsLmZyb20nIGFyZSBzZXQsIHRoZW4gdGhlCisJdXNlciB3aWxsIGJlIHByb21wdGVkIGZvciB0aGUgdmFsdWUuICBUaGUgZGVmYXVsdCBmb3IgdGhlIHByb21wdCB3aWxsIGJlCisJdGhlIHZhbHVlIG9mIEdJVF9BVVRIT1JfSURFTlQsIG9yIEdJVF9DT01NSVRURVJfSURFTlQgaWYgdGhhdCBpcyBub3QKKwlzZXQsIGFzIHJldHVybmVkIGJ5ICJnaXQgdmFyIC1sIi4KKworLS1pbi1yZXBseS10bz08aWRlbnRpZmllcj46OgorCU1ha2UgdGhlIGZpcnN0IG1haWwgKG9yIGFsbCB0aGUgbWFpbHMgd2l0aCBgLS1uby10aHJlYWRgKSBhcHBlYXIgYXMgYQorCXJlcGx5IHRvIHRoZSBnaXZlbiBNZXNzYWdlLUlkLCB3aGljaCBhdm9pZHMgYnJlYWtpbmcgdGhyZWFkcyB0bworCXByb3ZpZGUgYSBuZXcgcGF0Y2ggc2VyaWVzLgorCVRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgZW1haWxzIHdpbGwgYmUgc2VudCBhcyByZXBsaWVzIGFjY29yZGluZyB0bworCXRoZSBgLS1bbm9dLWNoYWluLXJlcGx5LXRvYCBzZXR0aW5nLgorKworU28gZm9yIGV4YW1wbGUgd2hlbiBgLS10aHJlYWRgIGFuZCBgLS1uby1jaGFpbi1yZXBseS10b2AgYXJlIHNwZWNpZmllZCwgdGhlCitzZWNvbmQgYW5kIHN1YnNlcXVlbnQgcGF0Y2hlcyB3aWxsIGJlIHJlcGxpZXMgdG8gdGhlIGZpcnN0IG9uZSBsaWtlIGluIHRoZQoraWxsdXN0cmF0aW9uIGJlbG93IHdoZXJlIGBbUEFUQ0ggdjIgMC8zXWAgaXMgaW4gcmVwbHkgdG8gYFtQQVRDSCAwLzJdYDoKKysKKyAgW1BBVENIIDAvMl0gSGVyZSBpcyB3aGF0IEkgZGlkLi4uCisgICAgW1BBVENIIDEvMl0gQ2xlYW4gdXAgYW5kIHRlc3RzCisgICAgW1BBVENIIDIvMl0gSW1wbGVtZW50YXRpb24KKyAgICBbUEFUQ0ggdjIgMC8zXSBIZXJlIGlzIGEgcmVyb2xsCisgICAgICBbUEFUQ0ggdjIgMS8zXSBDbGVhbiB1cAorICAgICAgW1BBVENIIHYyIDIvM10gTmV3IHRlc3RzCisgICAgICBbUEFUQ0ggdjIgMy8zXSBJbXBsZW1lbnRhdGlvbgorKworT25seSBuZWNlc3NhcnkgaWYgLS1jb21wb3NlIGlzIGFsc28gc2V0LiAgSWYgLS1jb21wb3NlCitpcyBub3Qgc2V0LCB0aGlzIHdpbGwgYmUgcHJvbXB0ZWQgZm9yLgorCistLXN1YmplY3Q9PHN0cmluZz46OgorCVNwZWNpZnkgdGhlIGluaXRpYWwgc3ViamVjdCBvZiB0aGUgZW1haWwgdGhyZWFkLgorCU9ubHkgbmVjZXNzYXJ5IGlmIC0tY29tcG9zZSBpcyBhbHNvIHNldC4gIElmIC0tY29tcG9zZQorCWlzIG5vdCBzZXQsIHRoaXMgd2lsbCBiZSBwcm9tcHRlZCBmb3IuCisKKy0tdG89PGFkZHJlc3M+LC4uLjo6CisJU3BlY2lmeSB0aGUgcHJpbWFyeSByZWNpcGllbnQgb2YgdGhlIGVtYWlscyBnZW5lcmF0ZWQuIEdlbmVyYWxseSwgdGhpcworCXdpbGwgYmUgdGhlIHVwc3RyZWFtIG1haW50YWluZXIgb2YgdGhlIHByb2plY3QgaW52b2x2ZWQuIERlZmF1bHQgaXMgdGhlCisJdmFsdWUgb2YgdGhlICdzZW5kZW1haWwudG8nIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsCisJYW5kIC0tdG8tY21kIGlzIG5vdCBzcGVjaWZpZWQsIHRoaXMgd2lsbCBiZSBwcm9tcHRlZCBmb3IuCisrCitUaGlzIG9wdGlvbiBtYXkgYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgorCistLThiaXQtZW5jb2Rpbmc9PGVuY29kaW5nPjo6CisJV2hlbiBlbmNvdW50ZXJpbmcgYSBub24tQVNDSUkgbWVzc2FnZSBvciBzdWJqZWN0IHRoYXQgZG9lcyBub3QKKwlkZWNsYXJlIGl0cyBlbmNvZGluZywgYWRkIGhlYWRlcnMvcXVvdGluZyB0byBpbmRpY2F0ZSBpdCBpcworCWVuY29kZWQgaW4gPGVuY29kaW5nPi4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZQorCSdzZW5kZW1haWwuYXNzdW1lOGJpdEVuY29kaW5nJzsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgdGhpcworCXdpbGwgYmUgcHJvbXB0ZWQgZm9yIGlmIGFueSBub24tQVNDSUkgZmlsZXMgYXJlIGVuY291bnRlcmVkLgorKworTm90ZSB0aGF0IG5vIGF0dGVtcHRzIHdoYXRzb2V2ZXIgYXJlIG1hZGUgdG8gdmFsaWRhdGUgdGhlIGVuY29kaW5nLgorCistLWNvbXBvc2UtZW5jb2Rpbmc9PGVuY29kaW5nPjo6CisJU3BlY2lmeSBlbmNvZGluZyBvZiBjb21wb3NlIG1lc3NhZ2UuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZQorCSdzZW5kZW1haWwuY29tcG9zZWVuY29kaW5nJzsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgVVRGLTggaXMgYXNzdW1lZC4KKworLS10cmFuc2Zlci1lbmNvZGluZz0oN2JpdHw4Yml0fHF1b3RlZC1wcmludGFibGV8YmFzZTY0KTo6CisJU3BlY2lmeSB0aGUgdHJhbnNmZXIgZW5jb2RpbmcgdG8gYmUgdXNlZCB0byBzZW5kIHRoZSBtZXNzYWdlIG92ZXIgU01UUC4KKwk3Yml0IHdpbGwgZmFpbCB1cG9uIGVuY291bnRlcmluZyBhIG5vbi1BU0NJSSBtZXNzYWdlLiAgcXVvdGVkLXByaW50YWJsZQorCWNhbiBiZSB1c2VmdWwgd2hlbiB0aGUgcmVwb3NpdG9yeSBjb250YWlucyBmaWxlcyB0aGF0IGNvbnRhaW4gY2FycmlhZ2UKKwlyZXR1cm5zLCBidXQgbWFrZXMgdGhlIHJhdyBwYXRjaCBlbWFpbCBmaWxlIChhcyBzYXZlZCBmcm9tIGEgTVVBKSBtdWNoCisJaGFyZGVyIHRvIGluc3BlY3QgbWFudWFsbHkuICBiYXNlNjQgaXMgZXZlbiBtb3JlIGZvb2wgcHJvb2YsIGJ1dCBhbHNvCisJZXZlbiBtb3JlIG9wYXF1ZS4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZSAnc2VuZGVtYWlsLnRyYW5zZmVyRW5jb2RpbmcnCisJY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZ2l0IHdpbGwgdXNlIDhiaXQgYW5kIG5vdAorCWFkZCBhIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcgaGVhZGVyLgorCistLXhtYWlsZXI6OgorLS1uby14bWFpbGVyOjoKKwlBZGQgKG9yIHByZXZlbnQgYWRkaW5nKSB0aGUgIlgtTWFpbGVyOiIgaGVhZGVyLiAgQnkgZGVmYXVsdCwKKwl0aGUgaGVhZGVyIGlzIGFkZGVkLCBidXQgaXQgY2FuIGJlIHR1cm5lZCBvZmYgYnkgc2V0dGluZyB0aGUKKwlgc2VuZGVtYWlsLnhtYWlsZXJgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gYGZhbHNlYC4KKworU2VuZGluZworfn5+fn5+fgorCistLWVudmVsb3BlLXNlbmRlcj08YWRkcmVzcz46OgorCVNwZWNpZnkgdGhlIGVudmVsb3BlIHNlbmRlciB1c2VkIHRvIHNlbmQgdGhlIGVtYWlscy4KKwlUaGlzIGlzIHVzZWZ1bCBpZiB5b3VyIGRlZmF1bHQgYWRkcmVzcyBpcyBub3QgdGhlIGFkZHJlc3MgdGhhdCBpcworCXN1YnNjcmliZWQgdG8gYSBsaXN0LiBJbiBvcmRlciB0byB1c2UgdGhlICdGcm9tJyBhZGRyZXNzLCBzZXQgdGhlCisJdmFsdWUgdG8gImF1dG8iLiBJZiB5b3UgdXNlIHRoZSBzZW5kbWFpbCBiaW5hcnksIHlvdSBtdXN0IGhhdmUKKwlzdWl0YWJsZSBwcml2aWxlZ2VzIGZvciB0aGUgLWYgcGFyYW1ldGVyLiAgRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgdGhlCisJJ3NlbmRlbWFpbC5lbnZlbG9wZVNlbmRlcicgY29uZmlndXJhdGlvbiB2YXJpYWJsZTsgaWYgdGhhdCBpcworCXVuc3BlY2lmaWVkLCBjaG9vc2luZyB0aGUgZW52ZWxvcGUgc2VuZGVyIGlzIGxlZnQgdG8geW91ciBNVEEuCisKKy0tc210cC1lbmNyeXB0aW9uPTxlbmNyeXB0aW9uPjo6CisJU3BlY2lmeSB0aGUgZW5jcnlwdGlvbiB0byB1c2UsIGVpdGhlciAnc3NsJyBvciAndGxzJy4gIEFueSBvdGhlcgorCXZhbHVlIHJldmVydHMgdG8gcGxhaW4gU01UUC4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mCisJJ3NlbmRlbWFpbC5zbXRwRW5jcnlwdGlvbicuCisKKy0tc210cC1kb21haW49PEZRRE4+OjoKKwlTcGVjaWZpZXMgdGhlIEZ1bGx5IFF1YWxpZmllZCBEb21haW4gTmFtZSAoRlFETikgdXNlZCBpbiB0aGUKKwlIRUxPL0VITE8gY29tbWFuZCB0byB0aGUgU01UUCBzZXJ2ZXIuICBTb21lIHNlcnZlcnMgcmVxdWlyZSB0aGUKKwlGUUROIHRvIG1hdGNoIHlvdXIgSVAgYWRkcmVzcy4gIElmIG5vdCBzZXQsIGdpdCBzZW5kLWVtYWlsIGF0dGVtcHRzCisJdG8gZGV0ZXJtaW5lIHlvdXIgRlFETiBhdXRvbWF0aWNhbGx5LiAgRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YKKwknc2VuZGVtYWlsLnNtdHBEb21haW4nLgorCistLXNtdHAtYXV0aD08bWVjaGFuaXNtcz46OgorCVdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWxsb3dlZCBTTVRQLUFVVEggbWVjaGFuaXNtcy4gVGhpcyBzZXR0aW5nCisJZm9yY2VzIHVzaW5nIG9ubHkgdGhlIGxpc3RlZCBtZWNoYW5pc21zLiBFeGFtcGxlOgorKworLS0tLS0tCiskIGdpdCBzZW5kLWVtYWlsIC0tc210cC1hdXRoPSJQTEFJTiBMT0dJTiBHU1NBUEkiIC4uLgorLS0tLS0tCisrCitJZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHNwZWNpZmllZCBtZWNoYW5pc21zIG1hdGNoZXMgdGhlIG9uZXMgYWR2ZXJ0aXNlZCBieSB0aGUKK1NNVFAgc2VydmVyIGFuZCBpZiBpdCBpcyBzdXBwb3J0ZWQgYnkgdGhlIHV0aWxpemVkIFNBU0wgbGlicmFyeSwgdGhlIG1lY2hhbmlzbQoraXMgdXNlZCBmb3IgYXV0aGVudGljYXRpb24uIElmIG5laXRoZXIgJ3NlbmRlbWFpbC5zbXRwQXV0aCcgbm9yICctLXNtdHAtYXV0aCcKK2lzIHNwZWNpZmllZCwgYWxsIG1lY2hhbmlzbXMgc3VwcG9ydGVkIGJ5IHRoZSBTQVNMIGxpYnJhcnkgY2FuIGJlIHVzZWQuCisKKy0tc210cC1wYXNzWz08cGFzc3dvcmQ+XTo6CisJUGFzc3dvcmQgZm9yIFNNVFAtQVVUSC4gVGhlIGFyZ3VtZW50IGlzIG9wdGlvbmFsOiBJZiBubworCWFyZ3VtZW50IGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgZW1wdHkgc3RyaW5nIGlzIHVzZWQgYXMKKwl0aGUgcGFzc3dvcmQuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuc210cFBhc3MnLAorCWhvd2V2ZXIgJy0tc210cC1wYXNzJyBhbHdheXMgb3ZlcnJpZGVzIHRoaXMgdmFsdWUuCisrCitGdXJ0aGVybW9yZSwgcGFzc3dvcmRzIG5lZWQgbm90IGJlIHNwZWNpZmllZCBpbiBjb25maWd1cmF0aW9uIGZpbGVzCitvciBvbiB0aGUgY29tbWFuZCBsaW5lLiBJZiBhIHVzZXJuYW1lIGhhcyBiZWVuIHNwZWNpZmllZCAod2l0aAorJy0tc210cC11c2VyJyBvciBhICdzZW5kZW1haWwuc210cFVzZXInKSwgYnV0IG5vIHBhc3N3b3JkIGhhcyBiZWVuCitzcGVjaWZpZWQgKHdpdGggJy0tc210cC1wYXNzJyBvciAnc2VuZGVtYWlsLnNtdHBQYXNzJyksIHRoZW4KK2EgcGFzc3dvcmQgaXMgb2J0YWluZWQgdXNpbmcgJ2dpdC1jcmVkZW50aWFsJy4KKworLS1zbXRwLXNlcnZlcj08aG9zdD46OgorCUlmIHNldCwgc3BlY2lmaWVzIHRoZSBvdXRnb2luZyBTTVRQIHNlcnZlciB0byB1c2UgKGUuZy4KKwlgc210cC5leGFtcGxlLmNvbWAgb3IgYSByYXcgSVAgYWRkcmVzcykuICBBbHRlcm5hdGl2ZWx5IGl0IGNhbgorCXNwZWNpZnkgYSBmdWxsIHBhdGhuYW1lIG9mIGEgc2VuZG1haWwtbGlrZSBwcm9ncmFtIGluc3RlYWQ7CisJdGhlIHByb2dyYW0gbXVzdCBzdXBwb3J0IHRoZSBgLWlgIG9wdGlvbi4gIERlZmF1bHQgdmFsdWUgY2FuCisJYmUgc3BlY2lmaWVkIGJ5IHRoZSAnc2VuZGVtYWlsLnNtdHBTZXJ2ZXInIGNvbmZpZ3VyYXRpb24KKwlvcHRpb247IHRoZSBidWlsdC1pbiBkZWZhdWx0IGlzIGAvdXNyL3NiaW4vc2VuZG1haWxgIG9yCisJYC91c3IvbGliL3NlbmRtYWlsYCBpZiBzdWNoIHByb2dyYW0gaXMgYXZhaWxhYmxlLCBvcgorCWBsb2NhbGhvc3RgIG90aGVyd2lzZS4KKworLS1zbXRwLXNlcnZlci1wb3J0PTxwb3J0Pjo6CisJU3BlY2lmaWVzIGEgcG9ydCBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCBwb3J0IChTTVRQCisJc2VydmVycyB0eXBpY2FsbHkgbGlzdGVuIHRvIHNtdHAgcG9ydCAyNSwgYnV0IG1heSBhbHNvIGxpc3RlbiB0bworCXN1Ym1pc3Npb24gcG9ydCA1ODcsIG9yIHRoZSBjb21tb24gU1NMIHNtdHAgcG9ydCA0NjUpOworCXN5bWJvbGljIHBvcnQgbmFtZXMgKGUuZy4gInN1Ym1pc3Npb24iIGluc3RlYWQgb2YgNTg3KQorCWFyZSBhbHNvIGFjY2VwdGVkLiBUaGUgcG9ydCBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUKKwknc2VuZGVtYWlsLnNtdHBTZXJ2ZXJQb3J0JyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCistLXNtdHAtc2VydmVyLW9wdGlvbj08b3B0aW9uPjo6CisJSWYgc2V0LCBzcGVjaWZpZXMgdGhlIG91dGdvaW5nIFNNVFAgc2VydmVyIG9wdGlvbiB0byB1c2UuCisJRGVmYXVsdCB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkIGJ5IHRoZSAnc2VuZGVtYWlsLnNtdHBTZXJ2ZXJPcHRpb24nCisJY29uZmlndXJhdGlvbiBvcHRpb24uCisrCitUaGUgLS1zbXRwLXNlcnZlci1vcHRpb24gb3B0aW9uIG11c3QgYmUgcmVwZWF0ZWQgZm9yIGVhY2ggb3B0aW9uIHlvdSB3YW50Cit0byBwYXNzIHRvIHRoZSBzZXJ2ZXIuIExpa2V3aXNlLCBkaWZmZXJlbnQgbGluZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMKK211c3QgYmUgdXNlZCBmb3IgZWFjaCBvcHRpb24uCisKKy0tc210cC1zc2w6OgorCUxlZ2FjeSBhbGlhcyBmb3IgJy0tc210cC1lbmNyeXB0aW9uIHNzbCcuCisKKy0tc210cC1zc2wtY2VydC1wYXRoOjoKKwlQYXRoIHRvIGEgc3RvcmUgb2YgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMgZm9yIFNNVFAgU1NML1RMUworCWNlcnRpZmljYXRlIHZhbGlkYXRpb24gKGVpdGhlciBhIGRpcmVjdG9yeSB0aGF0IGhhcyBiZWVuIHByb2Nlc3NlZAorCWJ5ICdjX3JlaGFzaCcsIG9yIGEgc2luZ2xlIGZpbGUgY29udGFpbmluZyBvbmUgb3IgbW9yZSBQRU0gZm9ybWF0CisJY2VydGlmaWNhdGVzIGNvbmNhdGVuYXRlZCB0b2dldGhlcjogc2VlIHZlcmlmeSgxKSAtQ0FmaWxlIGFuZAorCS1DQXBhdGggZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlc2UpLiBTZXQgaXQgdG8gYW4gZW1wdHkgc3RyaW5nCisJdG8gZGlzYWJsZSBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24uIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiB0aGUKKwknc2VuZGVtYWlsLnNtdHBzc2xjZXJ0cGF0aCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgaWYgc2V0LCBvciB0aGUKKwliYWNraW5nIFNTTCBsaWJyYXJ5J3MgY29tcGlsZWQtaW4gZGVmYXVsdCBvdGhlcndpc2UgKHdoaWNoIHNob3VsZAorCWJlIHRoZSBiZXN0IGNob2ljZSBvbiBtb3N0IHBsYXRmb3JtcykuCisKKy0tc210cC11c2VyPTx1c2VyPjo6CisJVXNlcm5hbWUgZm9yIFNNVFAtQVVUSC4gRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5zbXRwVXNlcic7CisJaWYgYSB1c2VybmFtZSBpcyBub3Qgc3BlY2lmaWVkICh3aXRoICctLXNtdHAtdXNlcicgb3IgJ3NlbmRlbWFpbC5zbXRwVXNlcicpLAorCXRoZW4gYXV0aGVudGljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4KKworLS1zbXRwLWRlYnVnPTB8MTo6CisJRW5hYmxlICgxKSBvciBkaXNhYmxlICgwKSBkZWJ1ZyBvdXRwdXQuIElmIGVuYWJsZWQsIFNNVFAKKwljb21tYW5kcyBhbmQgcmVwbGllcyB3aWxsIGJlIHByaW50ZWQuIFVzZWZ1bCB0byBkZWJ1ZyBUTFMKKwljb25uZWN0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBwcm9ibGVtcy4KKworQXV0b21hdGluZworfn5+fn5+fn5+fgorCistLXRvLWNtZD08Y29tbWFuZD46OgorCVNwZWNpZnkgYSBjb21tYW5kIHRvIGV4ZWN1dGUgb25jZSBwZXIgcGF0Y2ggZmlsZSB3aGljaAorCXNob3VsZCBnZW5lcmF0ZSBwYXRjaCBmaWxlIHNwZWNpZmljICJUbzoiIGVudHJpZXMuCisJT3V0cHV0IG9mIHRoaXMgY29tbWFuZCBtdXN0IGJlIHNpbmdsZSBlbWFpbCBhZGRyZXNzIHBlciBsaW5lLgorCURlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwudG9jbWQnIGNvbmZpZ3VyYXRpb24gdmFsdWUuCisKKy0tY2MtY21kPTxjb21tYW5kPjo6CisJU3BlY2lmeSBhIGNvbW1hbmQgdG8gZXhlY3V0ZSBvbmNlIHBlciBwYXRjaCBmaWxlIHdoaWNoCisJc2hvdWxkIGdlbmVyYXRlIHBhdGNoIGZpbGUgc3BlY2lmaWMgIkNjOiIgZW50cmllcy4KKwlPdXRwdXQgb2YgdGhpcyBjb21tYW5kIG11c3QgYmUgc2luZ2xlIGVtYWlsIGFkZHJlc3MgcGVyIGxpbmUuCisJRGVmYXVsdCBpcyB0aGUgdmFsdWUgb2YgJ3NlbmRlbWFpbC5jY0NtZCcgY29uZmlndXJhdGlvbiB2YWx1ZS4KKworLS1bbm8tXWNoYWluLXJlcGx5LXRvOjoKKwlJZiB0aGlzIGlzIHNldCwgZWFjaCBlbWFpbCB3aWxsIGJlIHNlbnQgYXMgYSByZXBseSB0byB0aGUgcHJldmlvdXMKKwllbWFpbCBzZW50LiAgSWYgZGlzYWJsZWQgd2l0aCAiLS1uby1jaGFpbi1yZXBseS10byIsIGFsbCBlbWFpbHMgYWZ0ZXIKKwl0aGUgZmlyc3Qgd2lsbCBiZSBzZW50IGFzIHJlcGxpZXMgdG8gdGhlIGZpcnN0IGVtYWlsIHNlbnQuICBXaGVuIHVzaW5nCisJdGhpcywgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgZmlyc3QgZmlsZSBnaXZlbiBiZSBhbiBvdmVydmlldyBvZiB0aGUKKwllbnRpcmUgcGF0Y2ggc2VyaWVzLiBEaXNhYmxlZCBieSBkZWZhdWx0LCBidXQgdGhlICdzZW5kZW1haWwuY2hhaW5SZXBseVRvJworCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGl0LgorCistLWlkZW50aXR5PTxpZGVudGl0eT46OgorCUEgY29uZmlndXJhdGlvbiBpZGVudGl0eS4gV2hlbiBnaXZlbiwgY2F1c2VzIHZhbHVlcyBpbiB0aGUKKwknc2VuZGVtYWlsLjxpZGVudGl0eT4nIHN1YnNlY3Rpb24gdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIKKwl2YWx1ZXMgaW4gdGhlICdzZW5kZW1haWwnIHNlY3Rpb24uIFRoZSBkZWZhdWx0IGlkZW50aXR5IGlzCisJdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuaWRlbnRpdHknLgorCistLVtuby1dc2lnbmVkLW9mZi1ieS1jYzo6CisJSWYgdGhpcyBpcyBzZXQsIGFkZCBlbWFpbHMgZm91bmQgaW4gU2lnbmVkLW9mZi1ieTogb3IgQ2M6IGxpbmVzIHRvIHRoZQorCWNjIGxpc3QuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuc2lnbmVkb2ZmYnljYycgY29uZmlndXJhdGlvbgorCXZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIC0tc2lnbmVkLW9mZi1ieS1jYy4KKworLS1bbm8tXWNjLWNvdmVyOjoKKwlJZiB0aGlzIGlzIHNldCwgZW1haWxzIGZvdW5kIGluIENjOiBoZWFkZXJzIGluIHRoZSBmaXJzdCBwYXRjaCBvZgorCXRoZSBzZXJpZXMgKHR5cGljYWxseSB0aGUgY292ZXIgbGV0dGVyKSBhcmUgYWRkZWQgdG8gdGhlIGNjIGxpc3QKKwlmb3IgZWFjaCBlbWFpbCBzZXQuIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuY2Njb3ZlcicKKwljb25maWd1cmF0aW9uIHZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIC0tbm8tY2MtY292ZXIuCisKKy0tW25vLV10by1jb3Zlcjo6CisJSWYgdGhpcyBpcyBzZXQsIGVtYWlscyBmb3VuZCBpbiBUbzogaGVhZGVycyBpbiB0aGUgZmlyc3QgcGF0Y2ggb2YKKwl0aGUgc2VyaWVzICh0eXBpY2FsbHkgdGhlIGNvdmVyIGxldHRlcikgYXJlIGFkZGVkIHRvIHRoZSB0byBsaXN0CisJZm9yIGVhY2ggZW1haWwgc2V0LiBEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLnRvY292ZXInCisJY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYgdGhhdCBpcyB1bnNwZWNpZmllZCwgZGVmYXVsdCB0byAtLW5vLXRvLWNvdmVyLgorCistLXN1cHByZXNzLWNjPTxjYXRlZ29yeT46OgorCVNwZWNpZnkgYW4gYWRkaXRpb25hbCBjYXRlZ29yeSBvZiByZWNpcGllbnRzIHRvIHN1cHByZXNzIHRoZQorCWF1dG8tY2Mgb2Y6CisrCistLQorLSAnYXV0aG9yJyB3aWxsIGF2b2lkIGluY2x1ZGluZyB0aGUgcGF0Y2ggYXV0aG9yCistICdzZWxmJyB3aWxsIGF2b2lkIGluY2x1ZGluZyB0aGUgc2VuZGVyCistICdjYycgd2lsbCBhdm9pZCBpbmNsdWRpbmcgYW55b25lIG1lbnRpb25lZCBpbiBDYyBsaW5lcyBpbiB0aGUgcGF0Y2ggaGVhZGVyCisgIGV4Y2VwdCBmb3Igc2VsZiAodXNlICdzZWxmJyBmb3IgdGhhdCkuCistICdib2R5Y2MnIHdpbGwgYXZvaWQgaW5jbHVkaW5nIGFueW9uZSBtZW50aW9uZWQgaW4gQ2MgbGluZXMgaW4gdGhlCisgIHBhdGNoIGJvZHkgKGNvbW1pdCBtZXNzYWdlKSBleGNlcHQgZm9yIHNlbGYgKHVzZSAnc2VsZicgZm9yIHRoYXQpLgorLSAnc29iJyB3aWxsIGF2b2lkIGluY2x1ZGluZyBhbnlvbmUgbWVudGlvbmVkIGluIFNpZ25lZC1vZmYtYnkgbGluZXMgZXhjZXB0CisgICBmb3Igc2VsZiAodXNlICdzZWxmJyBmb3IgdGhhdCkuCistICdjY2NtZCcgd2lsbCBhdm9pZCBydW5uaW5nIHRoZSAtLWNjLWNtZC4KKy0gJ2JvZHknIGlzIGVxdWl2YWxlbnQgdG8gJ3NvYicgKyAnYm9keWNjJworLSAnYWxsJyB3aWxsIHN1cHByZXNzIGFsbCBhdXRvIGNjIHZhbHVlcy4KKy0tCisrCitEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLnN1cHByZXNzY2MnIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmCit0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvICdzZWxmJyBpZiAtLXN1cHByZXNzLWZyb20gaXMKK3NwZWNpZmllZCwgYXMgd2VsbCBhcyAnYm9keScgaWYgLS1uby1zaWduZWQtb2ZmLWNjIGlzIHNwZWNpZmllZC4KKworLS1bbm8tXXN1cHByZXNzLWZyb206OgorCUlmIHRoaXMgaXMgc2V0LCBkbyBub3QgYWRkIHRoZSBGcm9tOiBhZGRyZXNzIHRvIHRoZSBjYzogbGlzdC4KKwlEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLnN1cHByZXNzRnJvbScgY29uZmlndXJhdGlvbgorCXZhbHVlOyBpZiB0aGF0IGlzIHVuc3BlY2lmaWVkLCBkZWZhdWx0IHRvIC0tbm8tc3VwcHJlc3MtZnJvbS4KKworLS1bbm8tXXRocmVhZDo6CisJSWYgdGhpcyBpcyBzZXQsIHRoZSBJbi1SZXBseS1UbyBhbmQgUmVmZXJlbmNlcyBoZWFkZXJzIHdpbGwgYmUKKwlhZGRlZCB0byBlYWNoIGVtYWlsIHNlbnQuICBXaGV0aGVyIGVhY2ggbWFpbCByZWZlcnMgdG8gdGhlCisJcHJldmlvdXMgZW1haWwgKGBkZWVwYCB0aHJlYWRpbmcgcGVyICdnaXQgZm9ybWF0LXBhdGNoJworCXdvcmRpbmcpIG9yIHRvIHRoZSBmaXJzdCBlbWFpbCAoYHNoYWxsb3dgIHRocmVhZGluZykgaXMKKwlnb3Zlcm5lZCBieSAiLS1bbm8tXWNoYWluLXJlcGx5LXRvIi4KKysKK0lmIGRpc2FibGVkIHdpdGggIi0tbm8tdGhyZWFkIiwgdGhvc2UgaGVhZGVycyB3aWxsIG5vdCBiZSBhZGRlZAorKHVubGVzcyBzcGVjaWZpZWQgd2l0aCAtLWluLXJlcGx5LXRvKS4gIERlZmF1bHQgaXMgdGhlIHZhbHVlIG9mIHRoZQorJ3NlbmRlbWFpbC50aHJlYWQnIGNvbmZpZ3VyYXRpb24gdmFsdWU7IGlmIHRoYXQgaXMgdW5zcGVjaWZpZWQsCitkZWZhdWx0IHRvIC0tdGhyZWFkLgorKworSXQgaXMgdXAgdG8gdGhlIHVzZXIgdG8gZW5zdXJlIHRoYXQgbm8gSW4tUmVwbHktVG8gaGVhZGVyIGFscmVhZHkKK2V4aXN0cyB3aGVuICdnaXQgc2VuZC1lbWFpbCcgaXMgYXNrZWQgdG8gYWRkIGl0IChlc3BlY2lhbGx5IG5vdGUgdGhhdAorJ2dpdCBmb3JtYXQtcGF0Y2gnIGNhbiBiZSBjb25maWd1cmVkIHRvIGRvIHRoZSB0aHJlYWRpbmcgaXRzZWxmKS4KK0ZhaWx1cmUgdG8gZG8gc28gbWF5IG5vdCBwcm9kdWNlIHRoZSBleHBlY3RlZCByZXN1bHQgaW4gdGhlCityZWNpcGllbnQncyBNVUEuCisKKworQWRtaW5pc3RlcmluZworfn5+fn5+fn5+fn5+fgorCistLWNvbmZpcm09PG1vZGU+OjoKKwlDb25maXJtIGp1c3QgYmVmb3JlIHNlbmRpbmc6CisrCistLQorLSAnYWx3YXlzJyB3aWxsIGFsd2F5cyBjb25maXJtIGJlZm9yZSBzZW5kaW5nCistICduZXZlcicgd2lsbCBuZXZlciBjb25maXJtIGJlZm9yZSBzZW5kaW5nCistICdjYycgd2lsbCBjb25maXJtIGJlZm9yZSBzZW5kaW5nIHdoZW4gc2VuZC1lbWFpbCBoYXMgYXV0b21hdGljYWxseQorICBhZGRlZCBhZGRyZXNzZXMgZnJvbSB0aGUgcGF0Y2ggdG8gdGhlIENjIGxpc3QKKy0gJ2NvbXBvc2UnIHdpbGwgY29uZmlybSBiZWZvcmUgc2VuZGluZyB0aGUgZmlyc3QgbWVzc2FnZSB3aGVuIHVzaW5nIC0tY29tcG9zZS4KKy0gJ2F1dG8nIGlzIGVxdWl2YWxlbnQgdG8gJ2NjJyArICdjb21wb3NlJworLS0KKysKK0RlZmF1bHQgaXMgdGhlIHZhbHVlIG9mICdzZW5kZW1haWwuY29uZmlybScgY29uZmlndXJhdGlvbiB2YWx1ZTsgaWYgdGhhdAoraXMgdW5zcGVjaWZpZWQsIGRlZmF1bHQgdG8gJ2F1dG8nIHVubGVzcyBhbnkgb2YgdGhlIHN1cHByZXNzIG9wdGlvbnMKK2hhdmUgYmVlbiBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgZGVmYXVsdCB0byAnY29tcG9zZScuCisKKy0tZHJ5LXJ1bjo6CisJRG8gZXZlcnl0aGluZyBleGNlcHQgYWN0dWFsbHkgc2VuZCB0aGUgZW1haWxzLgorCistLVtuby1dZm9ybWF0LXBhdGNoOjoKKwlXaGVuIGFuIGFyZ3VtZW50IG1heSBiZSB1bmRlcnN0b29kIGVpdGhlciBhcyBhIHJlZmVyZW5jZSBvciBhcyBhIGZpbGUgbmFtZSwKKwljaG9vc2UgdG8gdW5kZXJzdGFuZCBpdCBhcyBhIGZvcm1hdC1wYXRjaCBhcmd1bWVudCAoJy0tZm9ybWF0LXBhdGNoJykKKwlvciBhcyBhIGZpbGUgbmFtZSAoJy0tbm8tZm9ybWF0LXBhdGNoJykuIEJ5IGRlZmF1bHQsIHdoZW4gc3VjaCBhIGNvbmZsaWN0CisJb2NjdXJzLCBnaXQgc2VuZC1lbWFpbCB3aWxsIGZhaWwuCisKKy0tcXVpZXQ6OgorCU1ha2UgZ2l0LXNlbmQtZW1haWwgbGVzcyB2ZXJib3NlLiAgT25lIGxpbmUgcGVyIGVtYWlsIHNob3VsZCBiZQorCWFsbCB0aGF0IGlzIG91dHB1dC4KKworLS1bbm8tXXZhbGlkYXRlOjoKKwlQZXJmb3JtIHNhbml0eSBjaGVja3Mgb24gcGF0Y2hlcy4KKwlDdXJyZW50bHksIHZhbGlkYXRpb24gbWVhbnMgdGhlIGZvbGxvd2luZzoKKysKKy0tCisJCSoJV2FybiBvZiBwYXRjaGVzIHRoYXQgY29udGFpbiBsaW5lcyBsb25nZXIgdGhhbiA5OTggY2hhcmFjdGVyczsgdGhpcworCQkJaXMgZHVlIHRvIFNNVFAgbGltaXRzIGFzIGRlc2NyaWJlZCBieSBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyODIxLnR4dC4KKy0tCisrCitEZWZhdWx0IGlzIHRoZSB2YWx1ZSBvZiAnc2VuZGVtYWlsLnZhbGlkYXRlJzsgaWYgdGhpcyBpcyBub3Qgc2V0LAorZGVmYXVsdCB0byAnLS12YWxpZGF0ZScuCisKKy0tZm9yY2U6OgorCVNlbmQgZW1haWxzIGV2ZW4gaWYgc2FmZXR5IGNoZWNrcyB3b3VsZCBwcmV2ZW50IGl0LgorCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KKworc2VuZGVtYWlsLmFsaWFzZXNGaWxlOjoKKwlUbyBhdm9pZCB0eXBpbmcgbG9uZyBlbWFpbCBhZGRyZXNzZXMsIHBvaW50IHRoaXMgdG8gb25lIG9yIG1vcmUKKwllbWFpbCBhbGlhc2VzIGZpbGVzLiAgWW91IG11c3QgYWxzbyBzdXBwbHkgJ3NlbmRlbWFpbC5hbGlhc0ZpbGVUeXBlJy4KKworc2VuZGVtYWlsLmFsaWFzRmlsZVR5cGU6OgorCUZvcm1hdCBvZiB0aGUgZmlsZShzKSBzcGVjaWZpZWQgaW4gc2VuZGVtYWlsLmFsaWFzZXNGaWxlLiBNdXN0IGJlCisJb25lIG9mICdtdXR0JywgJ21haWxyYycsICdwaW5lJywgJ2VsbScsIG9yICdnbnVzJywgb3IgJ3NlbmRtYWlsJy4KKysKK1doYXQgYW4gYWxpYXMgZmlsZSBpbiBlYWNoIGZvcm1hdCBsb29rcyBsaWtlIGNhbiBiZSBmb3VuZCBpbgordGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIGVtYWlsIHByb2dyYW0gb2YgdGhlIHNhbWUgbmFtZS4gVGhlCitkaWZmZXJlbmNlcyBhbmQgbGltaXRhdGlvbnMgZnJvbSB0aGUgc3RhbmRhcmQgZm9ybWF0cyBhcmUKK2Rlc2NyaWJlZCBiZWxvdzoKKysKKy0tCitzZW5kbWFpbDs7CisqCVF1b3RlZCBhbGlhc2VzIGFuZCBxdW90ZWQgYWRkcmVzc2VzIGFyZSBub3Qgc3VwcG9ydGVkOiBsaW5lcyB0aGF0CisJY29udGFpbiBhIGAiYCBzeW1ib2wgYXJlIGlnbm9yZWQuCisqCVJlZGlyZWN0aW9uIHRvIGEgZmlsZSAoYC9wYXRoL25hbWVgKSBvciBwaXBlIChgfGNvbW1hbmRgKSBpcyBub3QKKwlzdXBwb3J0ZWQuCisqCUZpbGUgaW5jbHVzaW9uIChgOmluY2x1ZGU6IC9wYXRoL25hbWVgKSBpcyBub3Qgc3VwcG9ydGVkLgorKglXYXJuaW5ncyBhcmUgcHJpbnRlZCBvbiB0aGUgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGZvciBhbnkKKwlleHBsaWNpdGx5IHVuc3VwcG9ydGVkIGNvbnN0cnVjdHMsIGFuZCBhbnkgb3RoZXIgbGluZXMgdGhhdCBhcmUgbm90CisJcmVjb2duaXplZCBieSB0aGUgcGFyc2VyLgorLS0KKworc2VuZGVtYWlsLm11bHRpRWRpdDo6CisJSWYgdHJ1ZSAoZGVmYXVsdCksIGEgc2luZ2xlIGVkaXRvciBpbnN0YW5jZSB3aWxsIGJlIHNwYXduZWQgdG8gZWRpdAorCWZpbGVzIHlvdSBoYXZlIHRvIGVkaXQgKHBhdGNoZXMgd2hlbiAnLS1hbm5vdGF0ZScgaXMgdXNlZCwgYW5kIHRoZQorCXN1bW1hcnkgd2hlbiAnLS1jb21wb3NlJyBpcyB1c2VkKS4gSWYgZmFsc2UsIGZpbGVzIHdpbGwgYmUgZWRpdGVkIG9uZQorCWFmdGVyIHRoZSBvdGhlciwgc3Bhd25pbmcgYSBuZXcgZWRpdG9yIGVhY2ggdGltZS4KKworc2VuZGVtYWlsLmNvbmZpcm06OgorCVNldHMgdGhlIGRlZmF1bHQgZm9yIHdoZXRoZXIgdG8gY29uZmlybSBiZWZvcmUgc2VuZGluZy4gTXVzdCBiZQorCW9uZSBvZiAnYWx3YXlzJywgJ25ldmVyJywgJ2NjJywgJ2NvbXBvc2UnLCBvciAnYXV0bycuIFNlZSAnLS1jb25maXJtJworCWluIHRoZSBwcmV2aW91cyBzZWN0aW9uIGZvciB0aGUgbWVhbmluZyBvZiB0aGVzZSB2YWx1ZXMuCisKK0VYQU1QTEUKKy0tLS0tLS0KK1VzZSBnbWFpbCBhcyB0aGUgc210cCBzZXJ2ZXIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RvIHVzZSAnZ2l0IHNlbmQtZW1haWwnIHRvIHNlbmQgeW91ciBwYXRjaGVzIHRocm91Z2ggdGhlIEdNYWlsIFNNVFAgc2VydmVyLAorZWRpdCB+Ly5naXRjb25maWcgdG8gc3BlY2lmeSB5b3VyIGFjY291bnQgc2V0dGluZ3M6CisKKwlbc2VuZGVtYWlsXQorCQlzbXRwRW5jcnlwdGlvbiA9IHRscworCQlzbXRwU2VydmVyID0gc210cC5nbWFpbC5jb20KKwkJc210cFVzZXIgPSB5b3VybmFtZUBnbWFpbC5jb20KKwkJc210cFNlcnZlclBvcnQgPSA1ODcKKworT25jZSB5b3VyIGNvbW1pdHMgYXJlIHJlYWR5IHRvIGJlIHNlbnQgdG8gdGhlIG1haWxpbmcgbGlzdCwgcnVuIHRoZQorZm9sbG93aW5nIGNvbW1hbmRzOgorCisJJCBnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC1NIG9yaWdpbi9tYXN0ZXIgLW8gb3V0Z29pbmcvCisJJCBlZGl0IG91dGdvaW5nLzAwMDAtKgorCSQgZ2l0IHNlbmQtZW1haWwgb3V0Z29pbmcvKgorCitOb3RlOiB0aGUgZm9sbG93aW5nIHBlcmwgbW9kdWxlcyBhcmUgcmVxdWlyZWQKKyAgICAgIE5ldDo6U01UUDo6U1NMLCBNSU1FOjpCYXNlNjQgYW5kIEF1dGhlbjo6U0FTTAorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSwgbGlua2dpdDpnaXQtaW1hcC1zZW5kWzFdLCBtYm94KDUpCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2VuZC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFhOTFlOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNlbmQtcGFjay50eHQKQEAgLTAsMCArMSwxNTAgQEAKK2dpdC1zZW5kLXBhY2soMSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNlbmQtcGFjayAtIFB1c2ggb2JqZWN0cyBvdmVyIEdpdCBwcm90b2NvbCB0byBhbm90aGVyIHJlcG9zaXRvcnkKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc2VuZC1wYWNrJyBbLS1hbGxdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XQorCQlbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdCisJCVstLVtuby1dc2lnbmVkfC0tc2lnbj0odHJ1ZXxmYWxzZXxpZi1hc2tlZCldCisJCVs8aG9zdD46XTxkaXJlY3Rvcnk+IFs8cmVmPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitVc3VhbGx5IHlvdSB3b3VsZCB3YW50IHRvIHVzZSAnZ2l0IHB1c2gnLCB3aGljaCBpcyBhCitoaWdoZXItbGV2ZWwgd3JhcHBlciBvZiB0aGlzIGNvbW1hbmQsIGluc3RlYWQuIFNlZSBsaW5rZ2l0OmdpdC1wdXNoWzFdLgorCitJbnZva2VzICdnaXQtcmVjZWl2ZS1wYWNrJyBvbiBhIHBvc3NpYmx5IHJlbW90ZSByZXBvc2l0b3J5LCBhbmQKK3VwZGF0ZXMgaXQgZnJvbSB0aGUgY3VycmVudCByZXBvc2l0b3J5LCBzZW5kaW5nIG5hbWVkIHJlZnMuCisKKworT1BUSU9OUworLS0tLS0tLQorLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+OjoKKwlQYXRoIHRvIHRoZSAnZ2l0LXJlY2VpdmUtcGFjaycgcHJvZ3JhbSBvbiB0aGUgcmVtb3RlCisJZW5kLiAgU29tZXRpbWVzIHVzZWZ1bCB3aGVuIHB1c2hpbmcgdG8gYSByZW1vdGUKKwlyZXBvc2l0b3J5IG92ZXIgc3NoLCBhbmQgeW91IGRvIG5vdCBoYXZlIHRoZSBwcm9ncmFtIGluCisJYSBkaXJlY3Rvcnkgb24gdGhlIGRlZmF1bHQgJFBBVEguCisKKy0tZXhlYz08Z2l0LXJlY2VpdmUtcGFjaz46OgorCVNhbWUgYXMgLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+LgorCistLWFsbDo6CisJSW5zdGVhZCBvZiBleHBsaWNpdGx5IHNwZWNpZnlpbmcgd2hpY2ggcmVmcyB0byB1cGRhdGUsCisJdXBkYXRlIGFsbCBoZWFkcyB0aGF0IGxvY2FsbHkgZXhpc3QuCisKKy0tc3RkaW46OgorCVRha2UgdGhlIGxpc3Qgb2YgcmVmcyBmcm9tIHN0ZGluLCBvbmUgcGVyIGxpbmUuIElmIHRoZXJlCisJYXJlIHJlZnMgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgaW4gYWRkaXRpb24gdG8gdGhpcworCW9wdGlvbiwgdGhlbiB0aGUgcmVmcyBmcm9tIHN0ZGluIGFyZSBwcm9jZXNzZWQgYWZ0ZXIgdGhvc2UKKwlvbiB0aGUgY29tbWFuZCBsaW5lLgorKworSWYgJy0tc3RhdGVsZXNzLXJwYycgaXMgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggdGhpcyBvcHRpb24gdGhlbgordGhlIGxpc3Qgb2YgcmVmcyBtdXN0IGJlIGluIHBhY2tldCBmb3JtYXQgKHBrdC1saW5lKS4gRWFjaCByZWYgbXVzdAorYmUgaW4gYSBzZXBhcmF0ZSBwYWNrZXQsIGFuZCB0aGUgbGlzdCBtdXN0IGVuZCB3aXRoIGEgZmx1c2ggcGFja2V0LgorCistLWRyeS1ydW46OgorCURvIGV2ZXJ5dGhpbmcgZXhjZXB0IGFjdHVhbGx5IHNlbmQgdGhlIHVwZGF0ZXMuCisKKy0tZm9yY2U6OgorCVVzdWFsbHksIHRoZSBjb21tYW5kIHJlZnVzZXMgdG8gdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0CisJaXMgbm90IGFuIGFuY2VzdG9yIG9mIHRoZSBsb2NhbCByZWYgdXNlZCB0byBvdmVyd3JpdGUgaXQuCisJVGhpcyBmbGFnIGRpc2FibGVzIHRoZSBjaGVjay4gIFdoYXQgdGhpcyBtZWFucyBpcyB0aGF0CisJdGhlIHJlbW90ZSByZXBvc2l0b3J5IGNhbiBsb3NlIGNvbW1pdHM7IHVzZSBpdCB3aXRoCisJY2FyZS4KKworLS12ZXJib3NlOjoKKwlSdW4gdmVyYm9zZWx5LgorCistLXRoaW46OgorCVNlbmQgYSAidGhpbiIgcGFjaywgd2hpY2ggcmVjb3JkcyBvYmplY3RzIGluIGRlbHRpZmllZCBmb3JtIGJhc2VkCisJb24gb2JqZWN0cyBub3QgaW5jbHVkZWQgaW4gdGhlIHBhY2sgdG8gcmVkdWNlIG5ldHdvcmsgdHJhZmZpYy4KKworLS1hdG9taWM6OgorCVVzZSBhbiBhdG9taWMgdHJhbnNhY3Rpb24gZm9yIHVwZGF0aW5nIHRoZSByZWZzLiBJZiBhbnkgb2YgdGhlIHJlZnMKKwlmYWlscyB0byB1cGRhdGUgdGhlbiB0aGUgZW50aXJlIHB1c2ggd2lsbCBmYWlsIHdpdGhvdXQgY2hhbmdpbmcgYW55CisJcmVmcy4KKworLS1bbm8tXXNpZ25lZDo6CistLXNpZ249KHRydWV8ZmFsc2V8aWYtYXNrZWQpOjoKKwlHUEctc2lnbiB0aGUgcHVzaCByZXF1ZXN0IHRvIHVwZGF0ZSByZWZzIG9uIHRoZSByZWNlaXZpbmcKKwlzaWRlLCB0byBhbGxvdyBpdCB0byBiZSBjaGVja2VkIGJ5IHRoZSBob29rcyBhbmQvb3IgYmUKKwlsb2dnZWQuICBJZiBgZmFsc2VgIG9yIGAtLW5vLXNpZ25lZGAsIG5vIHNpZ25pbmcgd2lsbCBiZQorCWF0dGVtcHRlZC4gIElmIGB0cnVlYCBvciBgLS1zaWduZWRgLCB0aGUgcHVzaCB3aWxsIGZhaWwgaWYgdGhlCisJc2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2lnbmVkIHB1c2hlcy4gIElmIHNldCB0byBgaWYtYXNrZWRgLAorCXNpZ24gaWYgYW5kIG9ubHkgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyBzaWduZWQgcHVzaGVzLiAgVGhlIHB1c2gKKwl3aWxsIGFsc28gZmFpbCBpZiB0aGUgYWN0dWFsIGNhbGwgdG8gYGdwZyAtLXNpZ25gIGZhaWxzLiAgU2VlCisJbGlua2dpdDpnaXQtcmVjZWl2ZS1wYWNrWzFdIGZvciB0aGUgZGV0YWlscyBvbiB0aGUgcmVjZWl2aW5nIGVuZC4KKworPGhvc3Q+OjoKKwlBIHJlbW90ZSBob3N0IHRvIGhvdXNlIHRoZSByZXBvc2l0b3J5LiAgV2hlbiB0aGlzCisJcGFydCBpcyBzcGVjaWZpZWQsICdnaXQtcmVjZWl2ZS1wYWNrJyBpcyBpbnZva2VkIHZpYQorCXNzaC4KKworPGRpcmVjdG9yeT46OgorCVRoZSByZXBvc2l0b3J5IHRvIHVwZGF0ZS4KKworPHJlZj4uLi46OgorCVRoZSByZW1vdGUgcmVmcyB0byB1cGRhdGUuCisKKworU3BlY2lmeWluZyB0aGUgUmVmcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBzcGVjaWZ5IHdoaWNoIHJlZnMgdG8gdXBkYXRlIG9uIHRoZQorcmVtb3RlIGVuZC4KKworV2l0aCAnLS1hbGwnIGZsYWcsIGFsbCByZWZzIHRoYXQgZXhpc3QgbG9jYWxseSBhcmUgdHJhbnNmZXJyZWQgdG8KK3RoZSByZW1vdGUgc2lkZS4gIFlvdSBjYW5ub3Qgc3BlY2lmeSBhbnkgJzxyZWY+JyBpZiB5b3UgdXNlCit0aGlzIGZsYWcuCisKK1dpdGhvdXQgJy0tYWxsJyBhbmQgd2l0aG91dCBhbnkgJzxyZWY+JywgdGhlIGhlYWRzIHRoYXQgZXhpc3QKK2JvdGggb24gdGhlIGxvY2FsIHNpZGUgYW5kIG9uIHRoZSByZW1vdGUgc2lkZSBhcmUgdXBkYXRlZC4KKworV2hlbiBvbmUgb3IgbW9yZSAnPHJlZj4nIGFyZSBzcGVjaWZpZWQgZXhwbGljaXRseSAod2hldGhlciBvbiB0aGUKK2NvbW1hbmQgbGluZSBvciB2aWEgYC0tc3RkaW5gKSwgaXQgY2FuIGJlIGVpdGhlciBhCitzaW5nbGUgcGF0dGVybiwgb3IgYSBwYWlyIG9mIHN1Y2ggcGF0dGVybiBzZXBhcmF0ZWQgYnkgYSBjb2xvbgorIjoiICh0aGlzIG1lYW5zIHRoYXQgYSByZWYgbmFtZSBjYW5ub3QgaGF2ZSBhIGNvbG9uIGluIGl0KS4gIEEKK3NpbmdsZSBwYXR0ZXJuICc8bmFtZT4nIGlzIGp1c3QgYSBzaG9ydGhhbmQgZm9yICc8bmFtZT46PG5hbWU+Jy4KKworRWFjaCBwYXR0ZXJuIHBhaXIgY29uc2lzdHMgb2YgdGhlIHNvdXJjZSBzaWRlIChiZWZvcmUgdGhlIGNvbG9uKQorYW5kIHRoZSBkZXN0aW5hdGlvbiBzaWRlIChhZnRlciB0aGUgY29sb24pLiAgVGhlIHJlZiB0byBiZQorcHVzaGVkIGlzIGRldGVybWluZWQgYnkgZmluZGluZyBhIG1hdGNoIHRoYXQgbWF0Y2hlcyB0aGUgc291cmNlCitzaWRlLCBhbmQgd2hlcmUgaXQgaXMgcHVzaGVkIGlzIGRldGVybWluZWQgYnkgdXNpbmcgdGhlCitkZXN0aW5hdGlvbiBzaWRlLiBUaGUgcnVsZXMgdXNlZCB0byBtYXRjaCBhIHJlZiBhcmUgdGhlIHNhbWUKK3J1bGVzIHVzZWQgYnkgJ2dpdCByZXYtcGFyc2UnIHRvIHJlc29sdmUgYSBzeW1ib2xpYyByZWYKK25hbWUuIFNlZSBsaW5rZ2l0OmdpdC1yZXYtcGFyc2VbMV0uCisKKyAtIEl0IGlzIGFuIGVycm9yIGlmIDxzcmM+IGRvZXMgbm90IG1hdGNoIGV4YWN0bHkgb25lIG9mIHRoZQorICAgbG9jYWwgcmVmcy4KKworIC0gSXQgaXMgYW4gZXJyb3IgaWYgPGRzdD4gbWF0Y2hlcyBtb3JlIHRoYW4gb25lIHJlbW90ZSByZWZzLgorCisgLSBJZiA8ZHN0PiBkb2VzIG5vdCBtYXRjaCBhbnkgcmVtb3RlIHJlZiwgZWl0aGVyCisKKyAgICogaXQgaGFzIHRvIHN0YXJ0IHdpdGggInJlZnMvIjsgPGRzdD4gaXMgdXNlZCBhcyB0aGUKKyAgICAgZGVzdGluYXRpb24gbGl0ZXJhbGx5IGluIHRoaXMgY2FzZS4KKworICAgKiA8c3JjPiA9PSA8ZHN0PiBhbmQgdGhlIHJlZiB0aGF0IG1hdGNoZWQgdGhlIDxzcmM+IG11c3Qgbm90CisgICAgIGV4aXN0IGluIHRoZSBzZXQgb2YgcmVtb3RlIHJlZnM7IHRoZSByZWYgbWF0Y2hlZCA8c3JjPgorICAgICBsb2NhbGx5IGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uLgorCitXaXRob3V0ICctLWZvcmNlJywgdGhlIDxzcmM+IHJlZiBpcyBzdG9yZWQgYXQgdGhlIHJlbW90ZSBvbmx5IGlmCis8ZHN0PiBkb2VzIG5vdCBleGlzdCwgb3IgPGRzdD4gaXMgYSBwcm9wZXIgc3Vic2V0IChpLmUuIGFuCithbmNlc3Rvcikgb2YgPHNyYz4uICBUaGlzIGNoZWNrLCBrbm93biBhcyAiZmFzdC1mb3J3YXJkIGNoZWNrIiwKK2lzIHBlcmZvcm1lZCBpbiBvcmRlciB0byBhdm9pZCBhY2NpZGVudGFsbHkgb3ZlcndyaXRpbmcgdGhlCityZW1vdGUgcmVmIGFuZCBsb3NlIG90aGVyIHBlb3BsZXMnIGNvbW1pdHMgZnJvbSB0aGVyZS4KKworV2l0aCAnLS1mb3JjZScsIHRoZSBmYXN0LWZvcndhcmQgY2hlY2sgaXMgZGlzYWJsZWQgZm9yIGFsbCByZWZzLgorCitPcHRpb25hbGx5LCBhIDxyZWY+IHBhcmFtZXRlciBjYW4gYmUgcHJlZml4ZWQgd2l0aCBhIHBsdXMgJysnIHNpZ24KK3RvIGRpc2FibGUgdGhlIGZhc3QtZm9yd2FyZCBjaGVjayBvbmx5IG9uIHRoYXQgcmVmLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNoLWkxOG4tLWVudnN1YnN0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLWkxOG4tLWVudnN1YnN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmZhZjkzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtaTE4bi0tZW52c3Vic3QudHh0CkBAIC0wLDAgKzEsMzYgQEAKK2dpdC1zaC1pMThue2xpdGRkfWVudnN1YnN0KDEpCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2gtaTE4bi0tZW52c3Vic3QgLSBHaXQncyBvd24gZW52c3Vic3QoMSkgZm9yIGkxOG4gZmFsbGJhY2tzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZXZhbF9nZXR0ZXh0ICgpIHsKKwlwcmludGYgIiVzIiAiJDEiIHwgKAorCQlleHBvcnQgUEFUSCAkKCdnaXQgc2gtaTE4bntsaXRkZH1lbnZzdWJzdCcgLS12YXJpYWJsZXMgIiQxIik7CisJCSdnaXQgc2gtaTE4bntsaXRkZH1lbnZzdWJzdCcgIiQxIgorCSkKK30KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgbm90IGEgY29tbWFuZCB0aGUgZW5kIHVzZXIgd291bGQgd2FudCB0byBydW4uICBFdmVyLgorVGhpcyBkb2N1bWVudGF0aW9uIGlzIG1lYW50IGZvciBwZW9wbGUgd2hvIGFyZSBzdHVkeWluZyB0aGUKK3BsdW1iaW5nIHNjcmlwdHMgYW5kL29yIGFyZSB3cml0aW5nIG5ldyBvbmVzLgorCisnZ2l0IHNoLWkxOG57bGl0ZGR9ZW52c3Vic3QnIGlzIEdpdCdzIHN0cmlwcGVkLWRvd24gY29weSBvZiB0aGUgR05VCitgZW52c3Vic3QoMSlgIHByb2dyYW0gdGhhdCBjb21lcyB3aXRoIHRoZSBHTlUgZ2V0dGV4dCBwYWNrYWdlLiBJdCdzCit1c2VkIGludGVybmFsbHkgYnkgbGlua2dpdDpnaXQtc2gtaTE4blsxXSB0byBpbnRlcnBvbGF0ZSB0aGUgdmFyaWFibGVzCitwYXNzZWQgdG8gdGhlIGBldmFsX2dldHRleHRgIGZ1bmN0aW9uLgorCitObyBwcm9taXNlcyBhcmUgbWFkZSBhYm91dCB0aGUgaW50ZXJmYWNlLCBvciB0aGF0IHRoaXMKK3Byb2dyYW0gd29uJ3QgZGlzYXBwZWFyIHdpdGhvdXQgd2FybmluZyBpbiB0aGUgbmV4dCB2ZXJzaW9uCitvZiBHaXQuIERvbid0IHVzZSBpdC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zaC1pMThuLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLWkxOG4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwY2Y0OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaC1pMThuLnR4dApAQCAtMCwwICsxLDQzIEBACitnaXQtc2gtaTE4bigxKQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNoLWkxOG4gLSBHaXQncyBpMThuIHNldHVwIGNvZGUgZm9yIHNoZWxsIHNjcmlwdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnLiAiJChnaXQgLS1leGVjLXBhdGgpL2dpdC1zaC1pMThuIicKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgbm90IGEgY29tbWFuZCB0aGUgZW5kIHVzZXIgd291bGQgd2FudCB0byBydW4uICBFdmVyLgorVGhpcyBkb2N1bWVudGF0aW9uIGlzIG1lYW50IGZvciBwZW9wbGUgd2hvIGFyZSBzdHVkeWluZyB0aGUKK1BvcmNlbGFpbi1pc2ggc2NyaXB0cyBhbmQvb3IgYXJlIHdyaXRpbmcgbmV3IG9uZXMuCisKK1RoZSAnZ2l0IHNoLWkxOG4gc2NyaXB0bGV0IGlzIGRlc2lnbmVkIHRvIGJlIHNvdXJjZWQgKHVzaW5nCitgLmApIGJ5IEdpdCdzIHBvcmNlbGFpbiBwcm9ncmFtcyBpbXBsZW1lbnRlZCBpbiBzaGVsbAorc2NyaXB0LiBJdCBwcm92aWRlcyB3cmFwcGVycyBmb3IgdGhlIEdOVSBgZ2V0dGV4dGAgYW5kCitgZXZhbF9nZXR0ZXh0YCBmdW5jdGlvbnMgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBgZ2V0dGV4dC5zaGAKK3NjcmlwdCwgYW5kIHByb3ZpZGVzIHBhc3MtdGhyb3VnaCBmYWxsYmFja3Mgb24gc3lzdGVtcword2l0aG91dCBHTlUgZ2V0dGV4dC4KKworRlVOQ1RJT05TCistLS0tLS0tLS0KKworZ2V0dGV4dDo6CisJQ3VycmVudGx5IGEgZHVtbXkgZmFsbC10aHJvdWdoIGZ1bmN0aW9uIGltcGxlbWVudGVkIGFzIGEgd3JhcHBlcgorCWFyb3VuZCBgcHJpbnRmKDEpYC4gV2lsbCBiZSByZXBsYWNlZCBieSBhIHJlYWwgZ2V0dGV4dAorCWltcGxlbWVudGF0aW9uIGluIGEgbGF0ZXIgdmVyc2lvbi4KKworZXZhbF9nZXR0ZXh0OjoKKwlDdXJyZW50bHkgYSBkdW1teSBmYWxsLXRocm91Z2ggZnVuY3Rpb24gaW1wbGVtZW50ZWQgYXMgYSB3cmFwcGVyCisJYXJvdW5kIGBwcmludGYoMSlgIHdpdGggdmFyaWFibGVzIGV4cGFuZGVkIGJ5IHRoZQorCWxpbmtnaXQ6Z2l0LXNoLWkxOG57bGl0ZGR9ZW52c3Vic3RbMV0gaGVscGVyLiBXaWxsIGJlIHJlcGxhY2VkIGJ5IGEKKwlyZWFsIGdldHRleHQgaW1wbGVtZW50YXRpb24gaW4gYSBsYXRlciB2ZXJzaW9uLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNoLXNldHVwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjY3YzRjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2gtc2V0dXAudHh0CkBAIC0wLDAgKzEsOTUgQEAKK2dpdC1zaC1zZXR1cCgxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaC1zZXR1cCAtIENvbW1vbiBHaXQgc2hlbGwgc2NyaXB0IHNldHVwIGNvZGUKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnLiAiJChnaXQgLS1leGVjLXBhdGgpL2dpdC1zaC1zZXR1cCInCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIG5vdCBhIGNvbW1hbmQgdGhlIGVuZCB1c2VyIHdvdWxkIHdhbnQgdG8gcnVuLiAgRXZlci4KK1RoaXMgZG9jdW1lbnRhdGlvbiBpcyBtZWFudCBmb3IgcGVvcGxlIHdobyBhcmUgc3R1ZHlpbmcgdGhlCitQb3JjZWxhaW4taXNoIHNjcmlwdHMgYW5kL29yIGFyZSB3cml0aW5nIG5ldyBvbmVzLgorCitUaGUgJ2dpdCBzaC1zZXR1cCcgc2NyaXB0bGV0IGlzIGRlc2lnbmVkIHRvIGJlIHNvdXJjZWQgKHVzaW5nCitgLmApIGJ5IG90aGVyIHNoZWxsIHNjcmlwdHMgdG8gc2V0IHVwIHNvbWUgdmFyaWFibGVzIHBvaW50aW5nIGF0Cit0aGUgbm9ybWFsIEdpdCBkaXJlY3RvcmllcyBhbmQgYSBmZXcgaGVscGVyIHNoZWxsIGZ1bmN0aW9ucy4KKworQmVmb3JlIHNvdXJjaW5nIGl0LCB5b3VyIHNjcmlwdCBzaG91bGQgc2V0IHVwIGEgZmV3IHZhcmlhYmxlczsKK2BVU0FHRWAgKGFuZCBgTE9OR19VU0FHRWAsIGlmIGFueSkgaXMgdXNlZCB0byBkZWZpbmUgbWVzc2FnZQorZ2l2ZW4gYnkgYHVzYWdlKClgIHNoZWxsIGZ1bmN0aW9uLiAgYFNVQkRJUkVDVE9SWV9PS2AgY2FuIGJlIHNldAoraWYgdGhlIHNjcmlwdCBjYW4gcnVuIGZyb20gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIHdvcmtpbmcgdHJlZQorKHNvbWUgY29tbWFuZHMgZG8gbm90KS4KKworVGhlIHNjcmlwdGxldCBzZXRzIGBHSVRfRElSYCBhbmQgYEdJVF9PQkpFQ1RfRElSRUNUT1JZYCBzaGVsbAordmFyaWFibGVzLCBidXQgZG9lcyAqbm90KiBleHBvcnQgdGhlbSB0byB0aGUgZW52aXJvbm1lbnQuCisKK0ZVTkNUSU9OUworLS0tLS0tLS0tCisKK2RpZTo6CisJZXhpdCBhZnRlciBlbWl0dGluZyB0aGUgc3VwcGxpZWQgZXJyb3IgbWVzc2FnZSB0byB0aGUKKwlzdGFuZGFyZCBlcnJvciBzdHJlYW0uCisKK3VzYWdlOjoKKwlkaWUgd2l0aCB0aGUgdXNhZ2UgbWVzc2FnZS4KKworc2V0X3JlZmxvZ19hY3Rpb246OgorCVNldCBHSVRfUkVGTE9HX0FDVElPTiBlbnZpcm9ubWVudCB0byBhIGdpdmVuIHN0cmluZyAodHlwaWNhbGx5CisJdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0pIHVubGVzcyBpdCBpcyBhbHJlYWR5IHNldC4gIFdoZW5ldmVyCisJdGhlIHNjcmlwdCBydW5zIGEgYGdpdGAgY29tbWFuZCB0aGF0IHVwZGF0ZXMgcmVmcywgYSByZWZsb2cKKwllbnRyeSBpcyBjcmVhdGVkIHVzaW5nIHRoZSB2YWx1ZSBvZiB0aGlzIHN0cmluZyB0byBsZWF2ZSB0aGUKKwlyZWNvcmQgb2Ygd2hhdCBjb21tYW5kIHVwZGF0ZWQgdGhlIHJlZi4KKworZ2l0X2VkaXRvcjo6CisJcnVucyBhbiBlZGl0b3Igb2YgdXNlcidzIGNob2ljZSAoR0lUX0VESVRPUiwgY29yZS5lZGl0b3IsIFZJU1VBTCBvcgorCUVESVRPUikgb24gYSBnaXZlbiBmaWxlLCBidXQgZXJyb3Igb3V0IGlmIG5vIGVkaXRvciBpcyBzcGVjaWZpZWQKKwlhbmQgdGhlIHRlcm1pbmFsIGlzIGR1bWIuCisKK2lzX2JhcmVfcmVwb3NpdG9yeTo6CisJb3V0cHV0cyBgdHJ1ZWAgb3IgYGZhbHNlYCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHN0cmVhbQorCXRvIGluZGljYXRlIGlmIHRoZSByZXBvc2l0b3J5IGlzIGEgYmFyZSByZXBvc2l0b3J5CisJKGkuZS4gd2l0aG91dCBhbiBhc3NvY2lhdGVkIHdvcmtpbmcgdHJlZSkuCisKK2NkX3RvX3RvcGxldmVsOjoKKwlydW5zIGNoZGlyIHRvIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLgorCityZXF1aXJlX3dvcmtfdHJlZTo6CisJY2hlY2tzIGlmIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyB3aXRoaW4gdGhlIHdvcmtpbmcgdHJlZQorCW9mIHRoZSByZXBvc2l0b3J5LCBhbmQgb3RoZXJ3aXNlIGRpZXMuCisKK3JlcXVpcmVfd29ya190cmVlX2V4aXN0czo6CisJY2hlY2tzIGlmIHRoZSB3b3JraW5nIHRyZWUgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXBvc2l0b3J5CisJZXhpc3RzLCBhbmQgb3RoZXJ3aXNlIGRpZXMuICBPZnRlbiBkb25lIGJlZm9yZSBjYWxsaW5nCisJY2RfdG9fdG9wbGV2ZWwsIHdoaWNoIGlzIGltcG9zc2libGUgdG8gZG8gaWYgdGhlcmUgaXMgbm8KKwl3b3JraW5nIHRyZWUuCisKK3JlcXVpcmVfY2xlYW5fd29ya190cmVlIDxhY3Rpb24+IFs8aGludD5dOjoKKwljaGVja3MgdGhhdCB0aGUgd29ya2luZyB0cmVlIGFuZCBpbmRleCBhc3NvY2lhdGVkIHdpdGggdGhlCisJcmVwb3NpdG9yeSBoYXZlIG5vIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gdHJhY2tlZCBmaWxlcy4KKwlPdGhlcndpc2UgaXQgZW1pdHMgYW4gZXJyb3IgbWVzc2FnZSBvZiB0aGUgZm9ybSBgQ2Fubm90CisJPGFjdGlvbj46IDxyZWFzb24+LiA8aGludD5gLCBhbmQgZGllcy4gIEV4YW1wbGU6CisrCistLS0tLS0tLS0tLS0tLS0tCityZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSByZWJhc2UgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCistLS0tLS0tLS0tLS0tLS0tCisKK2dldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQ6OgorCW91dHB1dHMgY29kZSBmb3IgdXNlIHdpdGggZXZhbCB0byBzZXQgdGhlIEdJVF9BVVRIT1JfTkFNRSwKKwlHSVRfQVVUSE9SX0VNQUlMIGFuZCBHSVRfQVVUSE9SX0RBVEUgdmFyaWFibGVzIGZvciBhIGdpdmVuIGNvbW1pdC4KKworY3JlYXRlX3ZpcnR1YWxfYmFzZTo6CisJbW9kaWZpZXMgdGhlIGZpcnN0IGZpbGUgc28gb25seSBsaW5lcyBpbiBjb21tb24gd2l0aCB0aGUKKwlzZWNvbmQgZmlsZSByZW1haW4uIElmIHRoZXJlIGlzIGluc3VmZmljaWVudCBjb21tb24gbWF0ZXJpYWwsCisJdGhlbiB0aGUgZmlyc3QgZmlsZSBpcyBsZWZ0IGVtcHR5LiBUaGUgcmVzdWx0IGlzIHN1aXRhYmxlCisJYXMgYSB2aXJ0dWFsIGJhc2UgaW5wdXQgZm9yIGEgMy13YXkgbWVyZ2UuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hlbGwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YmRkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaGVsbC50eHQKQEAgLTAsMCArMSw5MCBAQAorZ2l0LXNoZWxsKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXNoZWxsIC0gUmVzdHJpY3RlZCBsb2dpbiBzaGVsbCBmb3IgR2l0LW9ubHkgU1NIIGFjY2VzcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2Noc2gnIC1zICQoY29tbWFuZCAtdiBnaXQtc2hlbGwpIDx1c2VyPgorJ2dpdCBjbG9uZScgPHVzZXI+YEBsb2NhbGhvc3Q6L3BhdGgvdG8vcmVwby5naXRgCisnc3NoJyA8dXNlcj5gQGxvY2FsaG9zdGAKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBsb2dpbiBzaGVsbCBmb3IgU1NIIGFjY291bnRzIHRvIHByb3ZpZGUgcmVzdHJpY3RlZCBHaXQgYWNjZXNzLgorSXQgcGVybWl0cyBleGVjdXRpb24gb25seSBvZiBzZXJ2ZXItc2lkZSBHaXQgY29tbWFuZHMgaW1wbGVtZW50aW5nIHRoZQorcHVsbC9wdXNoIGZ1bmN0aW9uYWxpdHksIHBsdXMgY3VzdG9tIGNvbW1hbmRzIHByZXNlbnQgaW4gYSBzdWJkaXJlY3RvcnkKK25hbWVkIGBnaXQtc2hlbGwtY29tbWFuZHNgIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuCisKK0NPTU1BTkRTCistLS0tLS0tLQorCisnZ2l0IHNoZWxsJyBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYWZ0ZXIgdGhlICctYycgb3B0aW9uOgorCisnZ2l0IHJlY2VpdmUtcGFjayA8YXJndW1lbnQ+Jzo6CisnZ2l0IHVwbG9hZC1wYWNrIDxhcmd1bWVudD4nOjoKKydnaXQgdXBsb2FkLWFyY2hpdmUgPGFyZ3VtZW50Pic6OgorCUNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgc2VydmVyLXNpZGUgY29tbWFuZCB0byBzdXBwb3J0CisJdGhlIGNsaWVudCdzICdnaXQgcHVzaCcsICdnaXQgZmV0Y2gnLCBvciAnZ2l0IGFyY2hpdmUgLS1yZW1vdGUnCisJcmVxdWVzdC4KKydjdnMgc2VydmVyJzo6CisJSW1pdGF0ZSBhIENWUyBzZXJ2ZXIuICBTZWUgbGlua2dpdDpnaXQtY3Zzc2VydmVyWzFdLgorCitJZiBhIGB+L2dpdC1zaGVsbC1jb21tYW5kc2AgZGlyZWN0b3J5IGlzIHByZXNlbnQsICdnaXQgc2hlbGwnIHdpbGwKK2Fsc28gaGFuZGxlIG90aGVyLCBjdXN0b20gY29tbWFuZHMgYnkgcnVubmluZworImBnaXQtc2hlbGwtY29tbWFuZHMvPGNvbW1hbmQ+IDxhcmd1bWVudHM+YCIgZnJvbSB0aGUgdXNlcidzIGhvbWUKK2RpcmVjdG9yeS4KKworSU5URVJBQ1RJVkUgVVNFCistLS0tLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgdGhlIGNvbW1hbmRzIGFib3ZlIGNhbiBiZSBleGVjdXRlZCBvbmx5IHdpdGggdGhlICctYycKK29wdGlvbjsgdGhlIHNoZWxsIGlzIG5vdCBpbnRlcmFjdGl2ZS4KKworSWYgYSBgfi9naXQtc2hlbGwtY29tbWFuZHNgIGRpcmVjdG9yeSBpcyBwcmVzZW50LCAnZ2l0IHNoZWxsJworY2FuIGFsc28gYmUgcnVuIGludGVyYWN0aXZlbHkgKHdpdGggbm8gYXJndW1lbnRzKS4gIElmIGEgYGhlbHBgCitjb21tYW5kIGlzIHByZXNlbnQgaW4gdGhlIGBnaXQtc2hlbGwtY29tbWFuZHNgIGRpcmVjdG9yeSwgaXQgaXMKK3J1biB0byBwcm92aWRlIHRoZSB1c2VyIHdpdGggYW4gb3ZlcnZpZXcgb2YgYWxsb3dlZCBhY3Rpb25zLiAgVGhlbiBhCisiZ2l0PiAiIHByb21wdCBpcyBwcmVzZW50ZWQgYXQgd2hpY2ggb25lIGNhbiBlbnRlciBhbnkgb2YgdGhlCitjb21tYW5kcyBmcm9tIHRoZSBgZ2l0LXNoZWxsLWNvbW1hbmRzYCBkaXJlY3RvcnksIG9yIGBleGl0YCB0byBjbG9zZQordGhlIGNvbm5lY3Rpb24uCisKK0dlbmVyYWxseSB0aGlzIG1vZGUgaXMgdXNlZCBhcyBhbiBhZG1pbmlzdHJhdGl2ZSBpbnRlcmZhY2UgdG8gYWxsb3cKK3VzZXJzIHRvIGxpc3QgcmVwb3NpdG9yaWVzIHRoZXkgaGF2ZSBhY2Nlc3MgdG8sIGNyZWF0ZSwgZGVsZXRlLCBvcgorcmVuYW1lIHJlcG9zaXRvcmllcywgb3IgY2hhbmdlIHJlcG9zaXRvcnkgZGVzY3JpcHRpb25zIGFuZAorcGVybWlzc2lvbnMuCisKK0lmIGEgYG5vLWludGVyYWN0aXZlLWxvZ2luYCBjb21tYW5kIGV4aXN0cywgdGhlbiBpdCBpcyBydW4gYW5kIHRoZQoraW50ZXJhY3RpdmUgc2hlbGwgaXMgYWJvcnRlZC4KKworRVhBTVBMRQorLS0tLS0tLQorCitUbyBkaXNhYmxlIGludGVyYWN0aXZlIGxvZ2lucywgZGlzcGxheWluZyBhIGdyZWV0aW5nIGluc3RlYWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgY2hzaCAtcyAvdXNyL2Jpbi9naXQtc2hlbGwKKyQgbWtkaXIgJEhPTUUvZ2l0LXNoZWxsLWNvbW1hbmRzCiskIGNhdCA+JEhPTUUvZ2l0LXNoZWxsLWNvbW1hbmRzL25vLWludGVyYWN0aXZlLWxvZ2luIDw8XEVPRgorIyEvYmluL3NoCitwcmludGYgJyVzXG4nICJIaSAkVVNFUiEgWW91J3ZlIHN1Y2Nlc3NmdWxseSBhdXRoZW50aWNhdGVkLCBidXQgSSBkbyBub3QiCitwcmludGYgJyVzXG4nICJwcm92aWRlIGludGVyYWN0aXZlIHNoZWxsIGFjY2Vzcy4iCitleGl0IDEyOAorRU9GCiskIGNobW9kICt4ICRIT01FL2dpdC1zaGVsbC1jb21tYW5kcy9uby1pbnRlcmFjdGl2ZS1sb2dpbgorLS0tLS0tLS0tLS0tLS0tLQorCitTRUUgQUxTTworLS0tLS0tLS0KK3NzaCgxKSwKK2xpbmtnaXQ6Z2l0LWRhZW1vblsxXSwKK2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL1JFQURNRQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3J0bG9nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWFmN2YyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvcnRsb2cudHh0CkBAIC0wLDAgKzEsODYgQEAKK2dpdC1zaG9ydGxvZygxKQorPT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaG9ydGxvZyAtIFN1bW1hcml6ZSAnZ2l0IGxvZycgb3V0cHV0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorZ2l0IGxvZyAtLXByZXR0eT1zaG9ydCB8ICdnaXQgc2hvcnRsb2cnIFs8b3B0aW9ucz5dCisnZ2l0IHNob3J0bG9nJyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uIHJhbmdlPl0gW1tcLS1dIDxwYXRoPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitTdW1tYXJpemVzICdnaXQgbG9nJyBvdXRwdXQgaW4gYSBmb3JtYXQgc3VpdGFibGUgZm9yIGluY2x1c2lvbgoraW4gcmVsZWFzZSBhbm5vdW5jZW1lbnRzLiBFYWNoIGNvbW1pdCB3aWxsIGJlIGdyb3VwZWQgYnkgYXV0aG9yIGFuZCB0aXRsZS4KKworQWRkaXRpb25hbGx5LCAiW1BBVENIXSIgd2lsbCBiZSBzdHJpcHBlZCBmcm9tIHRoZSBjb21taXQgZGVzY3JpcHRpb24uCisKK0lmIG5vIHJldmlzaW9ucyBhcmUgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgYW5kIGVpdGhlciBzdGFuZGFyZCBpbnB1dAoraXMgbm90IGEgdGVybWluYWwgb3IgdGhlcmUgaXMgbm8gY3VycmVudCBicmFuY2gsICdnaXQgc2hvcnRsb2cnIHdpbGwKK291dHB1dCBhIHN1bW1hcnkgb2YgdGhlIGxvZyByZWFkIGZyb20gc3RhbmRhcmQgaW5wdXQsIHdpdGhvdXQKK3JlZmVyZW5jZSB0byB0aGUgY3VycmVudCByZXBvc2l0b3J5LgorCitPUFRJT05TCistLS0tLS0tCisKKy1uOjoKKy0tbnVtYmVyZWQ6OgorCVNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciBpbnN0ZWFkCisJb2YgYXV0aG9yIGFscGhhYmV0aWMgb3JkZXIuCisKKy1zOjoKKy0tc3VtbWFyeTo6CisJU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9uIGFuZCBwcm92aWRlIGEgY29tbWl0IGNvdW50IHN1bW1hcnkgb25seS4KKworLWU6OgorLS1lbWFpbDo6CisJU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvci4KKworLS1mb3JtYXRbPTxmb3JtYXQ+XTo6CisJSW5zdGVhZCBvZiB0aGUgY29tbWl0IHN1YmplY3QsIHVzZSBzb21lIG90aGVyIGluZm9ybWF0aW9uIHRvCisJZGVzY3JpYmUgZWFjaCBjb21taXQuICAnPGZvcm1hdD4nIGNhbiBiZSBhbnkgc3RyaW5nIGFjY2VwdGVkCisJYnkgdGhlIGAtLWZvcm1hdGAgb3B0aW9uIG9mICdnaXQgbG9nJywgc3VjaCBhcyAnKiBbJWhdICVzJy4KKwkoU2VlIHRoZSAiUFJFVFRZIEZPUk1BVFMiIHNlY3Rpb24gb2YgbGlua2dpdDpnaXQtbG9nWzFdLikKKworCUVhY2ggcHJldHR5LXByaW50ZWQgY29tbWl0IHdpbGwgYmUgcmV3cmFwcGVkIGJlZm9yZSBpdCBpcyBzaG93bi4KKworLXdbPHdpZHRoPlssPGluZGVudDE+Wyw8aW5kZW50Mj5dXV06OgorCUxpbmV3cmFwIHRoZSBvdXRwdXQgYnkgd3JhcHBpbmcgZWFjaCBsaW5lIGF0IGB3aWR0aGAuICBUaGUgZmlyc3QKKwlsaW5lIG9mIGVhY2ggZW50cnkgaXMgaW5kZW50ZWQgYnkgYGluZGVudDFgIHNwYWNlcywgYW5kIHRoZSBzZWNvbmQKKwlhbmQgc3Vic2VxdWVudCBsaW5lcyBhcmUgaW5kZW50ZWQgYnkgYGluZGVudDJgIHNwYWNlcy4gYHdpZHRoYCwKKwlgaW5kZW50MWAsIGFuZCBgaW5kZW50MmAgZGVmYXVsdCB0byA3NiwgNiBhbmQgOSByZXNwZWN0aXZlbHkuCisrCitJZiB3aWR0aCBpcyBgMGAgKHplcm8pIHRoZW4gaW5kZW50IHRoZSBsaW5lcyBvZiB0aGUgb3V0cHV0IHdpdGhvdXQgd3JhcHBpbmcKK3RoZW0uCisKKzxyZXZpc2lvbiByYW5nZT46OgorCVNob3cgb25seSBjb21taXRzIGluIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24gcmFuZ2UuICBXaGVuIG5vCisJPHJldmlzaW9uIHJhbmdlPiBpcyBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBIRUFEYCAoaS5lLiB0aGUKKwl3aG9sZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgY29tbWl0KS4gIGBvcmlnaW4uLkhFQURgCisJc3BlY2lmaWVzIGFsbCB0aGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSB0aGUgY3VycmVudCBjb21taXQKKwkoaS5lLiBgSEVBRGApLCBidXQgbm90IGZyb20gYG9yaWdpbmAuIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2YKKwl3YXlzIHRvIHNwZWxsIDxyZXZpc2lvbiByYW5nZT4sIHNlZSB0aGUgIlNwZWNpZnlpbmcgUmFuZ2VzIgorCXNlY3Rpb24gb2YgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisKK1tcLS1dIDxwYXRoPi4uLjo6CisJQ29uc2lkZXIgb25seSBjb21taXRzIHRoYXQgYXJlIGVub3VnaCB0byBleHBsYWluIGhvdyB0aGUgZmlsZXMKKwl0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0aHMgY2FtZSB0byBiZS4KKysKK1BhdGhzIG1heSBuZWVkIHRvIGJlIHByZWZpeGVkIHdpdGggIlwtLSAiIHRvIHNlcGFyYXRlIHRoZW0gZnJvbQorb3B0aW9ucyBvciB0aGUgcmV2aXNpb24gcmFuZ2UsIHdoZW4gY29uZnVzaW9uIGFyaXNlcy4KKworTUFQUElORyBBVVRIT1JTCistLS0tLS0tLS0tLS0tLS0KKworVGhlIGAubWFpbG1hcGAgZmVhdHVyZSBpcyB1c2VkIHRvIGNvYWxlc2NlIHRvZ2V0aGVyIGNvbW1pdHMgYnkgdGhlIHNhbWUKK3BlcnNvbiBpbiB0aGUgc2hvcnRsb2csIHdoZXJlIHRoZWlyIG5hbWUgYW5kL29yIGVtYWlsIGFkZHJlc3Mgd2FzCitzcGVsbGVkIGRpZmZlcmVudGx5LgorCitpbmNsdWRlOjptYWlsbWFwLnR4dFtdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1icmFuY2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MWQ0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LWJyYW5jaC50eHQKQEAgLTAsMCArMSwyMDQgQEAKK2dpdC1zaG93LWJyYW5jaCgxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaG93LWJyYW5jaCAtIFNob3cgYnJhbmNoZXMgYW5kIHRoZWlyIGNvbW1pdHMKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHNob3ctYnJhbmNoJyBbLWF8LS1hbGxdIFstcnwtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdCisJCVstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXQorCQlbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdCisJCVstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXQorCQlbKDxyZXY+IHwgPGdsb2I+KS4uLl0KKydnaXQgc2hvdy1icmFuY2gnICgtZ3wtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworU2hvd3MgdGhlIGNvbW1pdCBhbmNlc3RyeSBncmFwaCBzdGFydGluZyBmcm9tIHRoZSBjb21taXRzIG5hbWVkCit3aXRoIDxyZXY+cyBvciA8Z2xvYnM+cyAob3IgYWxsIHJlZnMgdW5kZXIgcmVmcy9oZWFkcworYW5kL29yIHJlZnMvdGFncykgc2VtaS12aXN1YWxseS4KKworSXQgY2Fubm90IHNob3cgbW9yZSB0aGFuIDI5IGJyYW5jaGVzIGFuZCBjb21taXRzIGF0IGEgdGltZS4KKworSXQgdXNlcyBgc2hvd2JyYW5jaC5kZWZhdWx0YCBtdWx0aS12YWx1ZWQgY29uZmlndXJhdGlvbiBpdGVtcyBpZgorbm8gPHJldj4gb3IgPGdsb2I+IGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKworT1BUSU9OUworLS0tLS0tLQorPHJldj46OgorCUFyYml0cmFyeSBleHRlbmRlZCBTSEEtMSBleHByZXNzaW9uIChzZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10pCisJdGhhdCB0eXBpY2FsbHkgbmFtZXMgYSBicmFuY2ggaGVhZCBvciBhIHRhZy4KKworPGdsb2I+OjoKKwlBIGdsb2IgcGF0dGVybiB0aGF0IG1hdGNoZXMgYnJhbmNoIG9yIHRhZyBuYW1lcyB1bmRlcgorCXJlZnMvLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIG1hbnkgdG9waWMKKwlicmFuY2hlcyB1bmRlciByZWZzL2hlYWRzL3RvcGljLCBnaXZpbmcKKwlgdG9waWMvKmAgd291bGQgc2hvdyBhbGwgb2YgdGhlbS4KKworLXI6OgorLS1yZW1vdGVzOjoKKwlTaG93IHRoZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisKKy1hOjoKKy0tYWxsOjoKKwlTaG93IGJvdGggcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGFuZCBsb2NhbCBicmFuY2hlcy4KKworLS1jdXJyZW50OjoKKwlXaXRoIHRoaXMgb3B0aW9uLCB0aGUgY29tbWFuZCBpbmNsdWRlcyB0aGUgY3VycmVudAorCWJyYW5jaCB0byB0aGUgbGlzdCBvZiByZXZzIHRvIGJlIHNob3duIHdoZW4gaXQgaXMgbm90CisJZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKworLS10b3BvLW9yZGVyOjoKKyAgICAgICAgQnkgZGVmYXVsdCwgdGhlIGJyYW5jaGVzIGFuZCB0aGVpciBjb21taXRzIGFyZSBzaG93biBpbgorICAgICAgICByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuICBUaGlzIG9wdGlvbiBtYWtlcyB0aGVtCisgICAgICAgIGFwcGVhciBpbiB0b3BvbG9naWNhbCBvcmRlciAoaS5lLiwgZGVzY2VuZGFudCBjb21taXRzCisgICAgICAgIGFyZSBzaG93biBiZWZvcmUgdGhlaXIgcGFyZW50cykuCisKKy0tZGF0ZS1vcmRlcjo6CisJVGhpcyBvcHRpb24gaXMgc2ltaWxhciB0byAnLS10b3BvLW9yZGVyJyBpbiB0aGUgc2Vuc2UgdGhhdCBubworCXBhcmVudCBjb21lcyBiZWZvcmUgYWxsIG9mIGl0cyBjaGlsZHJlbiwgYnV0IG90aGVyd2lzZSBjb21taXRzCisJYXJlIG9yZGVyZWQgYWNjb3JkaW5nIHRvIHRoZWlyIGNvbW1pdCBkYXRlLgorCistLXNwYXJzZTo6CisJQnkgZGVmYXVsdCwgdGhlIG91dHB1dCBvbWl0cyBtZXJnZXMgdGhhdCBhcmUgcmVhY2hhYmxlCisJZnJvbSBvbmx5IG9uZSB0aXAgYmVpbmcgc2hvd24uICBUaGlzIG9wdGlvbiBtYWtlcyB0aGVtCisJdmlzaWJsZS4KKworLS1tb3JlPTxuPjo6CisJVXN1YWxseSB0aGUgY29tbWFuZCBzdG9wcyBvdXRwdXQgdXBvbiBzaG93aW5nIHRoZSBjb21taXQKKwl0aGF0IGlzIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgYWxsIHRoZSBicmFuY2hlcy4gIFRoaXMKKwlmbGFnIHRlbGxzIHRoZSBjb21tYW5kIHRvIGdvIDxuPiBtb3JlIGNvbW1vbiBjb21taXRzCisJYmV5b25kIHRoYXQuICBXaGVuIDxuPiBpcyBuZWdhdGl2ZSwgZGlzcGxheSBvbmx5IHRoZQorCTxyZWZlcmVuY2U+cyBnaXZlbiwgd2l0aG91dCBzaG93aW5nIHRoZSBjb21taXQgYW5jZXN0cnkKKwl0cmVlLgorCistLWxpc3Q6OgorCVN5bm9ueW0gdG8gYC0tbW9yZT0tMWAKKworLS1tZXJnZS1iYXNlOjoKKwlJbnN0ZWFkIG9mIHNob3dpbmcgdGhlIGNvbW1pdCBsaXN0LCBkZXRlcm1pbmUgcG9zc2libGUKKwltZXJnZSBiYXNlcyBmb3IgdGhlIHNwZWNpZmllZCBjb21taXRzLiBBbGwgbWVyZ2UgYmFzZXMKKwl3aWxsIGJlIGNvbnRhaW5lZCBpbiBhbGwgc3BlY2lmaWVkIGNvbW1pdHMuIFRoaXMgaXMKKwlkaWZmZXJlbnQgZnJvbSBob3cgbGlua2dpdDpnaXQtbWVyZ2UtYmFzZVsxXSBoYW5kbGVzCisJdGhlIGNhc2Ugb2YgdGhyZWUgb3IgbW9yZSBjb21taXRzLgorCistLWluZGVwZW5kZW50OjoKKwlBbW9uZyB0aGUgPHJlZmVyZW5jZT5zIGdpdmVuLCBkaXNwbGF5IG9ubHkgdGhlIG9uZXMgdGhhdAorCWNhbm5vdCBiZSByZWFjaGVkIGZyb20gYW55IG90aGVyIDxyZWZlcmVuY2U+LgorCistLW5vLW5hbWU6OgorCURvIG5vdCBzaG93IG5hbWluZyBzdHJpbmdzIGZvciBlYWNoIGNvbW1pdC4KKworLS1zaGExLW5hbWU6OgorCUluc3RlYWQgb2YgbmFtaW5nIHRoZSBjb21taXRzIHVzaW5nIHRoZSBwYXRoIHRvIHJlYWNoCisJdGhlbSBmcm9tIGhlYWRzIChlLmcuICJtYXN0ZXJ+MiIgdG8gbWVhbiB0aGUgZ3JhbmRwYXJlbnQKKwlvZiAibWFzdGVyIiksIG5hbWUgdGhlbSB3aXRoIHRoZSB1bmlxdWUgcHJlZml4IG9mIHRoZWlyCisJb2JqZWN0IG5hbWVzLgorCistLXRvcGljczo6CisJU2hvd3Mgb25seSBjb21taXRzIHRoYXQgYXJlIE5PVCBvbiB0aGUgZmlyc3QgYnJhbmNoIGdpdmVuLgorCVRoaXMgaGVscHMgdHJhY2sgdG9waWMgYnJhbmNoZXMgYnkgaGlkaW5nIGFueSBjb21taXQgdGhhdAorCWlzIGFscmVhZHkgaW4gdGhlIG1haW4gbGluZSBvZiBkZXZlbG9wbWVudC4gIFdoZW4gZ2l2ZW4KKwkiZ2l0IHNob3ctYnJhbmNoIC0tdG9waWNzIG1hc3RlciB0b3BpYzEgdG9waWMyIiwgdGhpcworCXdpbGwgc2hvdyB0aGUgcmV2aXNpb25zIGdpdmVuIGJ5ICJnaXQgcmV2LWxpc3Qge2NhcmV0fW1hc3RlcgorCXRvcGljMSB0b3BpYzIiCisKKy1nOjoKKy0tcmVmbG9nWz08bj5bLDxiYXNlPl1dIFs8cmVmPl06OgorCVNob3dzIDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgZm9yIHRoZSBnaXZlbgorCXJlZi4gIElmIDxiYXNlPiBpcyBnaXZlbiwgPG4+IGVudHJpZXMgZ29pbmcgYmFjayBmcm9tCisJdGhhdCBlbnRyeS4gIDxiYXNlPiBjYW4gYmUgc3BlY2lmaWVkIGFzIGNvdW50IG9yIGRhdGUuCisJV2hlbiBubyBleHBsaWNpdCA8cmVmPiBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvIHRoZQorCWN1cnJlbnQgYnJhbmNoIChvciBgSEVBRGAgaWYgaXQgaXMgZGV0YWNoZWQpLgorCistLWNvbG9yWz08d2hlbj5dOjoKKwlDb2xvciB0aGUgc3RhdHVzIHNpZ24gKG9uZSBvZiB0aGVzZTogYCpgIGAhYCBgK2AgYC1gKSBvZiBlYWNoIGNvbW1pdAorCWNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCBpdCdzIGluLgorCVRoZSB2YWx1ZSBtdXN0IGJlIGFsd2F5cyAodGhlIGRlZmF1bHQpLCBuZXZlciwgb3IgYXV0by4KKworLS1uby1jb2xvcjo6CisJVHVybiBvZmYgY29sb3JlZCBvdXRwdXQsIGV2ZW4gd2hlbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGdpdmVzIHRoZQorCWRlZmF1bHQgdG8gY29sb3Igb3V0cHV0LgorCVNhbWUgYXMgYC0tY29sb3I9bmV2ZXJgLgorCitOb3RlIHRoYXQgLS1tb3JlLCAtLWxpc3QsIC0taW5kZXBlbmRlbnQgYW5kIC0tbWVyZ2UtYmFzZSBvcHRpb25zCithcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorCisKK09VVFBVVAorLS0tLS0tCitHaXZlbiBOIDxyZWZlcmVuY2VzPiwgdGhlIGZpcnN0IE4gbGluZXMgYXJlIHRoZSBvbmUtbGluZQorZGVzY3JpcHRpb24gZnJvbSB0aGVpciBjb21taXQgbWVzc2FnZS4gIFRoZSBicmFuY2ggaGVhZCB0aGF0IGlzCitwb2ludGVkIGF0IGJ5ICRHSVRfRElSL0hFQUQgaXMgcHJlZml4ZWQgd2l0aCBhbiBhc3RlcmlzayBgKmAKK2NoYXJhY3RlciB3aGlsZSBvdGhlciBoZWFkcyBhcmUgcHJlZml4ZWQgd2l0aCBhIGAhYCBjaGFyYWN0ZXIuCisKK0ZvbGxvd2luZyB0aGVzZSBOIGxpbmVzLCBvbmUtbGluZSBsb2cgZm9yIGVhY2ggY29tbWl0IGlzCitkaXNwbGF5ZWQsIGluZGVudGVkIE4gcGxhY2VzLiAgSWYgYSBjb21taXQgaXMgb24gdGhlIEktdGgKK2JyYW5jaCwgdGhlIEktdGggaW5kZW50YXRpb24gY2hhcmFjdGVyIHNob3dzIGEgYCtgIHNpZ247CitvdGhlcndpc2UgaXQgc2hvd3MgYSBzcGFjZS4gIE1lcmdlIGNvbW1pdHMgYXJlIGRlbm90ZWQgYnkKK2EgYC1gIHNpZ24uICBFYWNoIGNvbW1pdCBzaG93cyBhIHNob3J0IG5hbWUgdGhhdAorY2FuIGJlIHVzZWQgYXMgYW4gZXh0ZW5kZWQgU0hBLTEgdG8gbmFtZSB0aGF0IGNvbW1pdC4KKworVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHRocmVlIGJyYW5jaGVzLCAibWFzdGVyIiwgImZpeGVzIgorYW5kICJtaGYiOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoIG1hc3RlciBmaXhlcyBtaGYKKyogW21hc3Rlcl0gQWRkICdnaXQgc2hvdy1icmFuY2gnLgorICEgW2ZpeGVzXSBJbnRyb2R1Y2UgInJlc2V0IHR5cGUiIGZsYWcgdG8gImdpdCByZXNldCIKKyAgISBbbWhmXSBBbGxvdyAiK3JlbW90ZTpsb2NhbCIgcmVmc3BlYyB0byBjYXVzZSAtLWZvcmNlIHdoZW4gZmV0Y2hpbmcuCistLS0KKyAgKyBbbWhmXSBBbGxvdyAiK3JlbW90ZTpsb2NhbCIgcmVmc3BlYyB0byBjYXVzZSAtLWZvcmNlIHdoZW4gZmV0Y2hpbmcuCisgICsgW21oZn4xXSBVc2UgZ2l0LW9jdG9wdXMgd2hlbiBwdWxsaW5nIG1vcmUgdGhhbiBvbmUgaGVhZHMuCisgKyAgW2ZpeGVzXSBJbnRyb2R1Y2UgInJlc2V0IHR5cGUiIGZsYWcgdG8gImdpdCByZXNldCIKKyAgKyBbbWhmfjJdICJnaXQgZmV0Y2ggLS1mb3JjZSIuCisgICsgW21oZn4zXSBVc2UgLmdpdC9yZW1vdGUvb3JpZ2luLCBub3QgLmdpdC9icmFuY2hlcy9vcmlnaW4uCisgICsgW21oZn40XSBNYWtlICJnaXQgcHVsbCIgYW5kICJnaXQgZmV0Y2giIGRlZmF1bHQgdG8gb3JpZ2luCisgICsgW21oZn41XSBJbmZhbW91cyAnb2N0b3B1cyBtZXJnZScKKyAgKyBbbWhmfjZdIFJldGlyZSBnaXQtcGFyc2UtcmVtb3RlLgorICArIFttaGZ+N10gTXVsdGktaGVhZCBmZXRjaC4KKyAgKyBbbWhmfjhdIFN0YXJ0IGFkZGluZyB0aGUgJEdJVF9ESVIvcmVtb3Rlcy8gc3VwcG9ydC4KKyorKyBbbWFzdGVyXSBBZGQgJ2dpdCBzaG93LWJyYW5jaCcuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgdGhyZWUgYnJhbmNoZXMgYWxsIGZvcmtlZCBmcm9tIGEgY29tbW9uIGNvbW1pdCwgW21hc3Rlcl0sCit3aG9zZSBjb21taXQgbWVzc2FnZSBpcyAiQWRkIHthcG9zdHJvcGhlfWdpdCBzaG93LWJyYW5jaHthcG9zdHJvcGhlfSIuCitUaGUgImZpeGVzIiBicmFuY2ggYWRkcyBvbmUgY29tbWl0ICJJbnRyb2R1Y2UgInJlc2V0IHR5cGUiIGZsYWcgdG8KKyJnaXQgcmVzZXQiIi4gVGhlICJtaGYiIGJyYW5jaCBhZGRzIG1hbnkgb3RoZXIgY29tbWl0cy4KK1RoZSBjdXJyZW50IGJyYW5jaCBpcyAibWFzdGVyIi4KKworCitFWEFNUExFCistLS0tLS0tCisKK0lmIHlvdSBrZWVwIHlvdXIgcHJpbWFyeSBicmFuY2hlcyBpbW1lZGlhdGVseSB1bmRlcgorYHJlZnMvaGVhZHNgLCBhbmQgdG9waWMgYnJhbmNoZXMgaW4gc3ViZGlyZWN0b3JpZXMgb2YKK2l0LCBoYXZpbmcgdGhlIGZvbGxvd2luZyBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIG1heSBoZWxwOgorCistLS0tLS0tLS0tLS0KK1tzaG93YnJhbmNoXQorCWRlZmF1bHQgPSAtLXRvcG8tb3JkZXIKKwlkZWZhdWx0ID0gaGVhZHMvKgorCistLS0tLS0tLS0tLS0KKworV2l0aCB0aGlzLCBgZ2l0IHNob3ctYnJhbmNoYCB3aXRob3V0IGV4dHJhIHBhcmFtZXRlcnMgd291bGQgc2hvdworb25seSB0aGUgcHJpbWFyeSBicmFuY2hlcy4gIEluIGFkZGl0aW9uLCBpZiB5b3UgaGFwcGVuIHRvIGJlIG9uCit5b3VyIHRvcGljIGJyYW5jaCwgaXQgaXMgc2hvd24gYXMgd2VsbC4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCAtLXJlZmxvZz0iMTAsMSBob3VyIGFnbyIgLS1saXN0IG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK3Nob3dzIDEwIHJlZmxvZyBlbnRyaWVzIGdvaW5nIGJhY2sgZnJvbSB0aGUgdGlwIGFzIG9mIDEgaG91ciBhZ28uCitXaXRob3V0IGAtLWxpc3RgLCB0aGUgb3V0cHV0IGFsc28gc2hvd3MgaG93IHRoZXNlIHRpcHMgYXJlCit0b3BvbG9naWNhbGx5IHJlbGF0ZWQgd2l0aCBlYWNoIG90aGVyLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhOTUwOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctaW5kZXgudHh0CkBAIC0wLDAgKzEsMjcgQEAKK2dpdC1zaG93LWluZGV4KDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2hvdy1pbmRleCAtIFNob3cgcGFja2VkIGFyY2hpdmUgaW5kZXgKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc2hvdy1pbmRleCcKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWQgdGhlIGlkeCBmaWxlIGZvciBhIEdpdCBwYWNrZmlsZSBjcmVhdGVkIHdpdGgKKydnaXQgcGFjay1vYmplY3RzJyBjb21tYW5kIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBhbmQKK2R1bXAgaXRzIGNvbnRlbnRzLgorCitUaGUgaW5mb3JtYXRpb24gaXQgb3V0cHV0cyBpcyBzdWJzZXQgb2Ygd2hhdCB5b3UgY2FuIGdldCBmcm9tCisnZ2l0IHZlcmlmeS1wYWNrIC12JzsgdGhpcyBjb21tYW5kIG9ubHkgc2hvd3MgdGhlIHBhY2tmaWxlCitvZmZzZXQgYW5kIFNIQS0xIG9mIGVhY2ggb2JqZWN0LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNob3ctcmVmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTMyNDUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy1yZWYudHh0CkBAIC0wLDAgKzEsMTg2IEBACitnaXQtc2hvdy1yZWYoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc2hvdy1yZWYgLSBMaXN0IHJlZmVyZW5jZXMgaW4gYSBsb2NhbCByZXBvc2l0b3J5CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzaG93LXJlZicgWy1xfC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kfC0tZGVyZWZlcmVuY2VdCisJICAgICBbLXN8LS1oYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdCisJICAgICBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXQorJ2dpdCBzaG93LXJlZicgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitEaXNwbGF5cyByZWZlcmVuY2VzIGF2YWlsYWJsZSBpbiBhIGxvY2FsIHJlcG9zaXRvcnkgYWxvbmcgd2l0aCB0aGUgYXNzb2NpYXRlZAorY29tbWl0IElEcy4gUmVzdWx0cyBjYW4gYmUgZmlsdGVyZWQgdXNpbmcgYSBwYXR0ZXJuIGFuZCB0YWdzIGNhbiBiZQorZGVyZWZlcmVuY2VkIGludG8gb2JqZWN0IElEcy4gQWRkaXRpb25hbGx5LCBpdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHdoZXRoZXIgYQorcGFydGljdWxhciByZWYgZXhpc3RzLgorCitCeSBkZWZhdWx0LCBzaG93cyB0aGUgdGFncywgaGVhZHMsIGFuZCByZW1vdGUgcmVmcy4KKworVGhlIC0tZXhjbHVkZS1leGlzdGluZyBmb3JtIGlzIGEgZmlsdGVyIHRoYXQgZG9lcyB0aGUgaW52ZXJzZS4gSXQgcmVhZHMKK3JlZnMgZnJvbSBzdGRpbiwgb25lIHJlZiBwZXIgbGluZSwgYW5kIHNob3dzIHRob3NlIHRoYXQgZG9uJ3QgZXhpc3QgaW4KK3RoZSBsb2NhbCByZXBvc2l0b3J5LgorCitVc2Ugb2YgdGhpcyB1dGlsaXR5IGlzIGVuY291cmFnZWQgaW4gZmF2b3Igb2YgZGlyZWN0bHkgYWNjZXNzaW5nIGZpbGVzIHVuZGVyCit0aGUgYC5naXRgIGRpcmVjdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorCistLWhlYWQ6OgorCisJU2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgbm9ybWFsbHkgYmUgZmlsdGVyZWQgb3V0LgorCistLXRhZ3M6OgorLS1oZWFkczo6CisKKwlMaW1pdCB0byAicmVmcy9oZWFkcyIgYW5kICJyZWZzL3RhZ3MiLCByZXNwZWN0aXZlbHkuICBUaGVzZSBvcHRpb25zCisJYXJlIG5vdCBtdXR1YWxseSBleGNsdXNpdmU7IHdoZW4gZ2l2ZW4gYm90aCwgcmVmZXJlbmNlcyBzdG9yZWQgaW4KKwkicmVmcy9oZWFkcyIgYW5kICJyZWZzL3RhZ3MiIGFyZSBkaXNwbGF5ZWQuCisKKy1kOjoKKy0tZGVyZWZlcmVuY2U6OgorCisJRGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMgYXMgd2VsbC4gVGhleSB3aWxsIGJlIHNob3duIHdpdGggIntjYXJldH17fSIKKwlhcHBlbmRlZC4KKworLXM6OgorLS1oYXNoWz08bj5dOjoKKworCU9ubHkgc2hvdyB0aGUgU0hBLTEgaGFzaCwgbm90IHRoZSByZWZlcmVuY2UgbmFtZS4gV2hlbiBjb21iaW5lZCB3aXRoCisJLS1kZXJlZmVyZW5jZSB0aGUgZGVyZWZlcmVuY2VkIHRhZyB3aWxsIHN0aWxsIGJlIHNob3duIGFmdGVyIHRoZSBTSEEtMS4KKworLS12ZXJpZnk6OgorCisJRW5hYmxlIHN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZyBieSByZXF1aXJpbmcgYW4gZXhhY3QgcmVmIHBhdGguCisJQXNpZGUgZnJvbSByZXR1cm5pbmcgYW4gZXJyb3IgY29kZSBvZiAxLCBpdCB3aWxsIGFsc28gcHJpbnQgYW4gZXJyb3IKKwltZXNzYWdlIGlmICctLXF1aWV0JyB3YXMgbm90IHNwZWNpZmllZC4KKworLS1hYmJyZXZbPTxuPl06OgorCisJQWJicmV2aWF0ZSB0aGUgb2JqZWN0IG5hbWUuICBXaGVuIHVzaW5nIGAtLWhhc2hgLCB5b3UgZG8KKwlub3QgaGF2ZSB0byBzYXkgYC0taGFzaCAtLWFiYnJldmA7IGAtLWhhc2g9bmAgd291bGQgZG8uCisKKy1xOjoKKy0tcXVpZXQ6OgorCisJRG8gbm90IHByaW50IGFueSByZXN1bHRzIHRvIHN0ZG91dC4gV2hlbiBjb21iaW5lZCB3aXRoICctLXZlcmlmeScgdGhpcworCWNhbiBiZSB1c2VkIHRvIHNpbGVudGx5IGNoZWNrIGlmIGEgcmVmZXJlbmNlIGV4aXN0cy4KKworLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dOjoKKworCU1ha2UgJ2dpdCBzaG93LXJlZicgYWN0IGFzIGEgZmlsdGVyIHRoYXQgcmVhZHMgcmVmcyBmcm9tIHN0ZGluIG9mIHRoZQorCWZvcm0gImBeKD86PGFueXRoaW5nPlxzKT88cmVmbmFtZT4oPzpcXnt9KT8kYCIKKwlhbmQgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zIG9uIGVhY2g6CisJKDEpIHN0cmlwICJ7Y2FyZXR9e30iIGF0IHRoZSBlbmQgb2YgbGluZSBpZiBhbnk7CisJKDIpIGlnbm9yZSBpZiBwYXR0ZXJuIGlzIHByb3ZpZGVkIGFuZCBkb2VzIG5vdCBoZWFkLW1hdGNoIHJlZm5hbWU7CisJKDMpIHdhcm4gaWYgcmVmbmFtZSBpcyBub3QgYSB3ZWxsLWZvcm1lZCByZWZuYW1lIGFuZCBza2lwOworCSg0KSBpZ25vcmUgaWYgcmVmbmFtZSBpcyBhIHJlZiB0aGF0IGV4aXN0cyBpbiB0aGUgbG9jYWwgcmVwb3NpdG9yeTsKKwkoNSkgb3RoZXJ3aXNlIG91dHB1dCB0aGUgbGluZS4KKworCis8cGF0dGVybj4uLi46OgorCisJU2hvdyByZWZlcmVuY2VzIG1hdGNoaW5nIG9uZSBvciBtb3JlIHBhdHRlcm5zLiBQYXR0ZXJucyBhcmUgbWF0Y2hlZCBmcm9tCisJdGhlIGVuZCBvZiB0aGUgZnVsbCBuYW1lLCBhbmQgb25seSBjb21wbGV0ZSBwYXJ0cyBhcmUgbWF0Y2hlZCwgZS5nLgorCSdtYXN0ZXInIG1hdGNoZXMgJ3JlZnMvaGVhZHMvbWFzdGVyJywgJ3JlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyJywKKwkncmVmcy90YWdzL2plZGkvbWFzdGVyJyBidXQgbm90ICdyZWZzL2hlYWRzL215bWFzdGVyJyBvcgorCSdyZWZzL3JlbW90ZXMvbWFzdGVyL2plZGknLgorCitPVVRQVVQKKy0tLS0tLQorCitUaGUgb3V0cHV0IGlzIGluIHRoZSBmb3JtYXQ6ICc8U0hBLTEgSUQ+JyAnPHNwYWNlPicgJzxyZWZlcmVuY2UgbmFtZT4nLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1yZWYgLS1oZWFkIC0tZGVyZWZlcmVuY2UKKzgzMmU3NmE5ODk5ZjU2MGE5MGZmZDYyYWUyY2U4M2JiZWZmNThmNTQgSEVBRAorODMyZTc2YTk4OTlmNTYwYTkwZmZkNjJhZTJjZTgzYmJlZmY1OGY1NCByZWZzL2hlYWRzL21hc3RlcgorODMyZTc2YTk4OTlmNTYwYTkwZmZkNjJhZTJjZTgzYmJlZmY1OGY1NCByZWZzL2hlYWRzL29yaWdpbgorMzUyMTAxNzU1NmM1ZGU0MTU5ZGE0NjE1YTM5ZmE0ZDVkMmMyNzliNSByZWZzL3RhZ3MvdjAuOTkuOWMKKzZkZGMwOTY0MDM0MzQyNTE5YTg3ZmUwMTM3ODFhYmYzMWM2ZGI2YWQgcmVmcy90YWdzL3YwLjk5LjljXnt9CiswNTVlNGFlM2FlNmViMzQ0Y2JhYmYyYTUyNTZhNDllYTY2MDQwMTMxIHJlZnMvdGFncy92MS4wcmM0Cis0MjMzMjVhMmQyNDYzOGRkY2M4MmNlNDdiZTVlNDBiZTU1MGY0NTA3IHJlZnMvdGFncy92MS4wcmM0Xnt9CisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gdXNpbmcgLS1oYXNoIChhbmQgbm90IC0tZGVyZWZlcmVuY2UpIHRoZSBvdXRwdXQgZm9ybWF0IGlzOiAnPFNIQS0xIElEPicKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctcmVmIC0taGVhZHMgLS1oYXNoCisyZTNiYTAxMTRhMWY1MmI0N2RmMjk3NDNkNjkxNWQwNTZiZTEzMjc4CisxODUwMDhhZTk3OTYwYzhkNTUxYWRjZDllMjM1NjUxOTQ2NTFiNWQxCiswM2FkZjQyYzk4ODE5NWI1MGUxYTE5MzViYTVmY2JjMzliMmIwMjliCisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VYQU1QTEUKKy0tLS0tLS0KKworVG8gc2hvdyBhbGwgcmVmZXJlbmNlcyBjYWxsZWQgIm1hc3RlciIsIHdoZXRoZXIgdGFncyBvciBoZWFkcyBvciBhbnl0aGluZworZWxzZSwgYW5kIHJlZ2FyZGxlc3Mgb2YgaG93IGRlZXAgaW4gdGhlIHJlZmVyZW5jZSBuYW1pbmcgaGllcmFyY2h5IHRoZXkgYXJlLAordXNlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWdpdCBzaG93LXJlZiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBzaG93ICJyZWZzL2hlYWRzL21hc3RlciIgYnV0IGFsc28gInJlZnMvcmVtb3RlL290aGVyLXJlcG8vbWFzdGVyIiwKK2lmIHN1Y2ggcmVmZXJlbmNlcyBleGlzdHMuCisKK1doZW4gdXNpbmcgdGhlICctLXZlcmlmeScgZmxhZywgdGhlIGNvbW1hbmQgcmVxdWlyZXMgYW4gZXhhY3QgcGF0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgb25seSBtYXRjaCB0aGUgZXhhY3QgYnJhbmNoIGNhbGxlZCAibWFzdGVyIi4KKworSWYgbm90aGluZyBtYXRjaGVzLCAnZ2l0IHNob3ctcmVmJyB3aWxsIHJldHVybiBhbiBlcnJvciBjb2RlIG9mIDEsCithbmQgaW4gdGhlIGNhc2Ugb2YgdmVyaWZpY2F0aW9uLCBpdCB3aWxsIHNob3cgYW4gZXJyb3IgbWVzc2FnZS4KKworRm9yIHNjcmlwdGluZywgeW91IGNhbiBhc2sgaXQgdG8gYmUgcXVpZXQgd2l0aCB0aGUgIi0tcXVpZXQiIGZsYWcsIHdoaWNoCithbGxvd3MgeW91IHRvIGRvIHRoaW5ncyBsaWtlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZ2l0IHNob3ctcmVmIC0tcXVpZXQgLS12ZXJpZnkgLS0gInJlZnMvaGVhZHMvJGhlYWRuYW1lIiB8fAorCQllY2hvICIkaGVhZG5hbWUgaXMgbm90IGEgdmFsaWQgYnJhbmNoIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gY2hlY2sgd2hldGhlciBhIHBhcnRpY3VsYXIgYnJhbmNoIGV4aXN0cyBvciBub3QgKG5vdGljZSBob3cgd2UgZG9uJ3QKK2FjdHVhbGx5IHdhbnQgdG8gc2hvdyBhbnkgcmVzdWx0cywgYW5kIHdlIHdhbnQgdG8gdXNlIHRoZSBmdWxsIHJlZm5hbWUgZm9yIGl0CitpbiBvcmRlciB0byBub3QgdHJpZ2dlciB0aGUgcHJvYmxlbSB3aXRoIGFtYmlndW91cyBwYXJ0aWFsIG1hdGNoZXMpLgorCitUbyBzaG93IG9ubHkgdGFncywgb3Igb25seSBwcm9wZXIgYnJhbmNoIGhlYWRzLCB1c2UgIi0tdGFncyIgYW5kL29yICItLWhlYWRzIgorcmVzcGVjdGl2ZWx5ICh1c2luZyBib3RoIG1lYW5zIHRoYXQgaXQgc2hvd3MgdGFncyBhbmQgaGVhZHMsIGJ1dCBub3Qgb3RoZXIKK3JhbmRvbSByZWZlcmVuY2VzIHVuZGVyIHRoZSByZWZzLyBzdWJkaXJlY3RvcnkpLgorCitUbyBkbyBhdXRvbWF0aWMgdGFnIG9iamVjdCBkZXJlZmVyZW5jaW5nLCB1c2UgdGhlICItZCIgb3IgIi0tZGVyZWZlcmVuY2UiCitmbGFnLCBzbyB5b3UgY2FuIGRvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJZ2l0IHNob3ctcmVmIC0tdGFncyAtLWRlcmVmZXJlbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0byBnZXQgYSBsaXN0aW5nIG9mIGFsbCB0YWdzIHRvZ2V0aGVyIHdpdGggd2hhdCB0aGV5IGRlcmVmZXJlbmNlLgorCitGSUxFUworLS0tLS0KK2AuZ2l0L3JlZnMvKmAsIGAuZ2l0L3BhY2tlZC1yZWZzYAorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWZvci1lYWNoLXJlZlsxXSwKK2xpbmtnaXQ6Z2l0LWxzLXJlbW90ZVsxXSwKK2xpbmtnaXQ6Z2l0LXVwZGF0ZS1yZWZbMV0sCitsaW5rZ2l0OmdpdHJlcG9zaXRvcnktbGF5b3V0WzVdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zaG93LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmE0MTI1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc2hvdy50eHQKQEAgLTAsMCArMSw4NyBAQAorZ2l0LXNob3coMSkKKz09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zaG93IC0gU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc2hvdycgW29wdGlvbnNdIDxvYmplY3Q+Li4uCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorU2hvd3Mgb25lIG9yIG1vcmUgb2JqZWN0cyAoYmxvYnMsIHRyZWVzLCB0YWdzIGFuZCBjb21taXRzKS4KKworRm9yIGNvbW1pdHMgaXQgc2hvd3MgdGhlIGxvZyBtZXNzYWdlIGFuZCB0ZXh0dWFsIGRpZmYuIEl0IGFsc28KK3ByZXNlbnRzIHRoZSBtZXJnZSBjb21taXQgaW4gYSBzcGVjaWFsIGZvcm1hdCBhcyBwcm9kdWNlZCBieQorJ2dpdCBkaWZmLXRyZWUgLS1jYycuCisKK0ZvciB0YWdzLCBpdCBzaG93cyB0aGUgdGFnIG1lc3NhZ2UgYW5kIHRoZSByZWZlcmVuY2VkIG9iamVjdHMuCisKK0ZvciB0cmVlcywgaXQgc2hvd3MgdGhlIG5hbWVzIChlcXVpdmFsZW50IHRvICdnaXQgbHMtdHJlZScKK3dpdGggLS1uYW1lLW9ubHkpLgorCitGb3IgcGxhaW4gYmxvYnMsIGl0IHNob3dzIHRoZSBwbGFpbiBjb250ZW50cy4KKworVGhlIGNvbW1hbmQgdGFrZXMgb3B0aW9ucyBhcHBsaWNhYmxlIHRvIHRoZSAnZ2l0IGRpZmYtdHJlZScgY29tbWFuZCB0bworY29udHJvbCBob3cgdGhlIGNoYW5nZXMgdGhlIGNvbW1pdCBpbnRyb2R1Y2VzIGFyZSBzaG93bi4KKworVGhpcyBtYW51YWwgcGFnZSBkZXNjcmliZXMgb25seSB0aGUgbW9zdCBmcmVxdWVudGx5IHVzZWQgb3B0aW9ucy4KKworCitPUFRJT05TCistLS0tLS0tCis8b2JqZWN0Pi4uLjo6CisJVGhlIG5hbWVzIG9mIG9iamVjdHMgdG8gc2hvdy4KKwlGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCBvYmplY3QgbmFtZXMsIHNlZQorCSJTUEVDSUZZSU5HIFJFVklTSU9OUyIgc2VjdGlvbiBpbiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XS4KKworaW5jbHVkZTo6cHJldHR5LW9wdGlvbnMudHh0W10KKworCitpbmNsdWRlOjpwcmV0dHktZm9ybWF0cy50eHRbXQorCisKK0NPTU1PTiBESUZGIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworOmdpdC1sb2c6IDEKK2luY2x1ZGU6OmRpZmYtb3B0aW9ucy50eHRbXQorCitpbmNsdWRlOjpkaWZmLWdlbmVyYXRlLXBhdGNoLnR4dFtdCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK2BnaXQgc2hvdyB2MS4wLjBgOjoKKwlTaG93cyB0aGUgdGFnIGB2MS4wLjBgLCBhbG9uZyB3aXRoIHRoZSBvYmplY3QgdGhlIHRhZ3MKKwlwb2ludHMgYXQuCisKK2BnaXQgc2hvdyB2MS4wLjBee3RyZWV9YDo6CisJU2hvd3MgdGhlIHRyZWUgcG9pbnRlZCB0byBieSB0aGUgdGFnIGB2MS4wLjBgLgorCitgZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXMgdjEuMC4wXntjb21taXR9YDo6CisJU2hvd3MgdGhlIHN1YmplY3Qgb2YgdGhlIGNvbW1pdCBwb2ludGVkIHRvIGJ5IHRoZQorCXRhZyBgdjEuMC4wYC4KKworYGdpdCBzaG93IG5leHR+MTA6RG9jdW1lbnRhdGlvbi9SRUFETUVgOjoKKwlTaG93cyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgYERvY3VtZW50YXRpb24vUkVBRE1FYCBhcworCXRoZXkgd2VyZSBjdXJyZW50IGluIHRoZSAxMHRoIGxhc3QgY29tbWl0IG9mIHRoZSBicmFuY2gKKwlgbmV4dGAuCisKK2BnaXQgc2hvdyBtYXN0ZXI6TWFrZWZpbGUgbWFzdGVyOnQvTWFrZWZpbGVgOjoKKwlDb25jYXRlbmF0ZXMgdGhlIGNvbnRlbnRzIG9mIHNhaWQgTWFrZWZpbGVzIGluIHRoZSBoZWFkCisJb2YgdGhlIGJyYW5jaCBgbWFzdGVyYC4KKworRGlzY3Vzc2lvbgorLS0tLS0tLS0tLQorCitpbmNsdWRlOjppMThuLnR4dFtdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3RhZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3RhZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YmNkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGFnZS50eHQKQEAgLTAsMCArMSwyMyBAQAorZ2l0LXN0YWdlKDEpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXN0YWdlIC0gQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIHN0YWdpbmcgYXJlYQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzdGFnZScgYXJncy4uLgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGlzIGEgc3lub255bSBmb3IgbGlua2dpdDpnaXQtYWRkWzFdLiAgUGxlYXNlIHJlZmVyIHRvIHRoZQorZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGNvbW1hbmQuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3Rhc2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZGY1OTYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGFzaC50eHQKQEAgLTAsMCArMSwyODAgQEAKK2dpdC1zdGFzaCgxKQorPT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zdGFzaCAtIFN0YXNoIHRoZSBjaGFuZ2VzIGluIGEgZGlydHkgd29ya2luZyBkaXJlY3RvcnkgYXdheQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3Rhc2gnIGxpc3QgWzxvcHRpb25zPl0KKydnaXQgc3Rhc2gnIHNob3cgWzxzdGFzaD5dCisnZ2l0IHN0YXNoJyBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KKydnaXQgc3Rhc2gnICggcG9wIHwgYXBwbHkgKSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XQorJ2dpdCBzdGFzaCcgYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl0KKydnaXQgc3Rhc2gnIFtzYXZlIFstcHwtLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XQorCSAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl1dCisnZ2l0IHN0YXNoJyBjbGVhcgorJ2dpdCBzdGFzaCcgY3JlYXRlIFs8bWVzc2FnZT5dCisnZ2l0IHN0YXNoJyBzdG9yZSBbLW18LS1tZXNzYWdlIDxtZXNzYWdlPl0gWy1xfC0tcXVpZXRdIDxjb21taXQ+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitVc2UgYGdpdCBzdGFzaGAgd2hlbiB5b3Ugd2FudCB0byByZWNvcmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCit3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGhlIGluZGV4LCBidXQgd2FudCB0byBnbyBiYWNrIHRvIGEgY2xlYW4KK3dvcmtpbmcgZGlyZWN0b3J5LiAgVGhlIGNvbW1hbmQgc2F2ZXMgeW91ciBsb2NhbCBtb2RpZmljYXRpb25zIGF3YXkKK2FuZCByZXZlcnRzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0byBtYXRjaCB0aGUgYEhFQURgIGNvbW1pdC4KKworVGhlIG1vZGlmaWNhdGlvbnMgc3Rhc2hlZCBhd2F5IGJ5IHRoaXMgY29tbWFuZCBjYW4gYmUgbGlzdGVkIHdpdGgKK2BnaXQgc3Rhc2ggbGlzdGAsIGluc3BlY3RlZCB3aXRoIGBnaXQgc3Rhc2ggc2hvd2AsIGFuZCByZXN0b3JlZAorKHBvdGVudGlhbGx5IG9uIHRvcCBvZiBhIGRpZmZlcmVudCBjb21taXQpIHdpdGggYGdpdCBzdGFzaCBhcHBseWAuCitDYWxsaW5nIGBnaXQgc3Rhc2hgIHdpdGhvdXQgYW55IGFyZ3VtZW50cyBpcyBlcXVpdmFsZW50IHRvIGBnaXQgc3Rhc2ggc2F2ZWAuCitBIHN0YXNoIGlzIGJ5IGRlZmF1bHQgbGlzdGVkIGFzICJXSVAgb24gJ2JyYW5jaG5hbWUnIC4uLiIsIGJ1dAoreW91IGNhbiBnaXZlIGEgbW9yZSBkZXNjcmlwdGl2ZSBtZXNzYWdlIG9uIHRoZSBjb21tYW5kIGxpbmUgd2hlbgoreW91IGNyZWF0ZSBvbmUuCisKK1RoZSBsYXRlc3Qgc3Rhc2ggeW91IGNyZWF0ZWQgaXMgc3RvcmVkIGluIGByZWZzL3N0YXNoYDsgb2xkZXIKK3N0YXNoZXMgYXJlIGZvdW5kIGluIHRoZSByZWZsb2cgb2YgdGhpcyByZWZlcmVuY2UgYW5kIGNhbiBiZSBuYW1lZCB1c2luZwordGhlIHVzdWFsIHJlZmxvZyBzeW50YXggKGUuZy4gYHN0YXNoQHswfWAgaXMgdGhlIG1vc3QgcmVjZW50bHkKK2NyZWF0ZWQgc3Rhc2gsIGBzdGFzaEB7MX1gIGlzIHRoZSBvbmUgYmVmb3JlIGl0LCBgc3Rhc2hAezIuaG91cnMuYWdvfWAKK2lzIGFsc28gcG9zc2libGUpLgorCitPUFRJT05TCistLS0tLS0tCisKK3NhdmUgWy1wfC0tcGF0Y2hdIFsta3wtLVtuby1da2VlcC1pbmRleF0gWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWy1xfC0tcXVpZXRdIFs8bWVzc2FnZT5dOjoKKworCVNhdmUgeW91ciBsb2NhbCBtb2RpZmljYXRpb25zIHRvIGEgbmV3ICdzdGFzaCcsIGFuZCBydW4gYGdpdCByZXNldAorCS0taGFyZGAgdG8gcmV2ZXJ0IHRoZW0uICBUaGUgPG1lc3NhZ2U+IHBhcnQgaXMgb3B0aW9uYWwgYW5kIGdpdmVzCisJdGhlIGRlc2NyaXB0aW9uIGFsb25nIHdpdGggdGhlIHN0YXNoZWQgc3RhdGUuICBGb3IgcXVpY2tseSBtYWtpbmcKKwlhIHNuYXBzaG90LCB5b3UgY2FuIG9taXQgX2JvdGhfICJzYXZlIiBhbmQgPG1lc3NhZ2U+LCBidXQgZ2l2aW5nCisJb25seSA8bWVzc2FnZT4gZG9lcyBub3QgdHJpZ2dlciB0aGlzIGFjdGlvbiB0byBwcmV2ZW50IGEgbWlzc3BlbGxlZAorCXN1YmNvbW1hbmQgZnJvbSBtYWtpbmcgYW4gdW53YW50ZWQgc3Rhc2guCisrCitJZiB0aGUgYC0ta2VlcC1pbmRleGAgb3B0aW9uIGlzIHVzZWQsIGFsbCBjaGFuZ2VzIGFscmVhZHkgYWRkZWQgdG8gdGhlCitpbmRleCBhcmUgbGVmdCBpbnRhY3QuCisrCitJZiB0aGUgYC0taW5jbHVkZS11bnRyYWNrZWRgIG9wdGlvbiBpcyB1c2VkLCBhbGwgdW50cmFja2VkIGZpbGVzIGFyZSBhbHNvCitzdGFzaGVkIGFuZCB0aGVuIGNsZWFuZWQgdXAgd2l0aCBgZ2l0IGNsZWFuYCwgbGVhdmluZyB0aGUgd29ya2luZyBkaXJlY3RvcnkKK2luIGEgdmVyeSBjbGVhbiBzdGF0ZS4gSWYgdGhlIGAtLWFsbGAgb3B0aW9uIGlzIHVzZWQgaW5zdGVhZCB0aGVuIHRoZQoraWdub3JlZCBmaWxlcyBhcmUgc3Rhc2hlZCBhbmQgY2xlYW5lZCBpbiBhZGRpdGlvbiB0byB0aGUgdW50cmFja2VkIGZpbGVzLgorKworV2l0aCBgLS1wYXRjaGAsIHlvdSBjYW4gaW50ZXJhY3RpdmVseSBzZWxlY3QgaHVua3MgZnJvbSB0aGUgZGlmZgorYmV0d2VlbiBIRUFEIGFuZCB0aGUgd29ya2luZyB0cmVlIHRvIGJlIHN0YXNoZWQuICBUaGUgc3Rhc2ggZW50cnkgaXMKK2NvbnN0cnVjdGVkIHN1Y2ggdGhhdCBpdHMgaW5kZXggc3RhdGUgaXMgdGhlIHNhbWUgYXMgdGhlIGluZGV4IHN0YXRlCitvZiB5b3VyIHJlcG9zaXRvcnksIGFuZCBpdHMgd29ya3RyZWUgY29udGFpbnMgb25seSB0aGUgY2hhbmdlcyB5b3UKK3NlbGVjdGVkIGludGVyYWN0aXZlbHkuICBUaGUgc2VsZWN0ZWQgY2hhbmdlcyBhcmUgdGhlbiByb2xsZWQgYmFjaworZnJvbSB5b3VyIHdvcmt0cmVlLiBTZWUgdGhlIGBgSW50ZXJhY3RpdmUgTW9kZScnIHNlY3Rpb24gb2YKK2xpbmtnaXQ6Z2l0LWFkZFsxXSB0byBsZWFybiBob3cgdG8gb3BlcmF0ZSB0aGUgYC0tcGF0Y2hgIG1vZGUuCisrCitUaGUgYC0tcGF0Y2hgIG9wdGlvbiBpbXBsaWVzIGAtLWtlZXAtaW5kZXhgLiAgWW91IGNhbiB1c2UKK2AtLW5vLWtlZXAtaW5kZXhgIHRvIG92ZXJyaWRlIHRoaXMuCisKK2xpc3QgWzxvcHRpb25zPl06OgorCisJTGlzdCB0aGUgc3Rhc2hlcyB0aGF0IHlvdSBjdXJyZW50bHkgaGF2ZS4gIEVhY2ggJ3N0YXNoJyBpcyBsaXN0ZWQKKwl3aXRoIGl0cyBuYW1lIChlLmcuIGBzdGFzaEB7MH1gIGlzIHRoZSBsYXRlc3Qgc3Rhc2gsIGBzdGFzaEB7MX1gIGlzCisJdGhlIG9uZSBiZWZvcmUsIGV0Yy4pLCB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRoYXQgd2FzIGN1cnJlbnQgd2hlbiB0aGUKKwlzdGFzaCB3YXMgbWFkZSwgYW5kIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIGNvbW1pdCB0aGUgc3Rhc2ggd2FzCisJYmFzZWQgb24uCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdGFzaEB7MH06IFdJUCBvbiBzdWJtaXQ6IDZlYmQwZTIuLi4gVXBkYXRlIGdpdC1zdGFzaCBkb2N1bWVudGF0aW9uCitzdGFzaEB7MX06IE9uIG1hc3RlcjogOWNjMDU4OS4uLiBBZGQgZ2l0LXN0YXNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGUgY29tbWFuZCB0YWtlcyBvcHRpb25zIGFwcGxpY2FibGUgdG8gdGhlICdnaXQgbG9nJworY29tbWFuZCB0byBjb250cm9sIHdoYXQgaXMgc2hvd24gYW5kIGhvdy4gU2VlIGxpbmtnaXQ6Z2l0LWxvZ1sxXS4KKworc2hvdyBbPHN0YXNoPl06OgorCisJU2hvdyB0aGUgY2hhbmdlcyByZWNvcmRlZCBpbiB0aGUgc3Rhc2ggYXMgYSBkaWZmIGJldHdlZW4gdGhlCisJc3Rhc2hlZCBzdGF0ZSBhbmQgaXRzIG9yaWdpbmFsIHBhcmVudC4gV2hlbiBubyBgPHN0YXNoPmAgaXMgZ2l2ZW4sCisJc2hvd3MgdGhlIGxhdGVzdCBvbmUuIEJ5IGRlZmF1bHQsIHRoZSBjb21tYW5kIHNob3dzIHRoZSBkaWZmc3RhdCwgYnV0CisJaXQgd2lsbCBhY2NlcHQgYW55IGZvcm1hdCBrbm93biB0byAnZ2l0IGRpZmYnIChlLmcuLCBgZ2l0IHN0YXNoIHNob3cKKwktcCBzdGFzaEB7MX1gIHRvIHZpZXcgdGhlIHNlY29uZCBtb3N0IHJlY2VudCBzdGFzaCBpbiBwYXRjaCBmb3JtKS4KKwlZb3UgY2FuIHVzZSBzdGFzaC5zaG93U3RhdCBhbmQvb3Igc3Rhc2guc2hvd1BhdGNoIGNvbmZpZyB2YXJpYWJsZXMKKwl0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IuCisKK3BvcCBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XTo6CisKKwlSZW1vdmUgYSBzaW5nbGUgc3Rhc2hlZCBzdGF0ZSBmcm9tIHRoZSBzdGFzaCBsaXN0IGFuZCBhcHBseSBpdAorCW9uIHRvcCBvZiB0aGUgY3VycmVudCB3b3JraW5nIHRyZWUgc3RhdGUsIGkuZS4sIGRvIHRoZSBpbnZlcnNlCisJb3BlcmF0aW9uIG9mIGBnaXQgc3Rhc2ggc2F2ZWAuIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBtdXN0CisJbWF0Y2ggdGhlIGluZGV4LgorKworQXBwbHlpbmcgdGhlIHN0YXRlIGNhbiBmYWlsIHdpdGggY29uZmxpY3RzOyBpbiB0aGlzIGNhc2UsIGl0IGlzIG5vdAorcmVtb3ZlZCBmcm9tIHRoZSBzdGFzaCBsaXN0LiBZb3UgbmVlZCB0byByZXNvbHZlIHRoZSBjb25mbGljdHMgYnkgaGFuZAorYW5kIGNhbGwgYGdpdCBzdGFzaCBkcm9wYCBtYW51YWxseSBhZnRlcndhcmRzLgorKworSWYgdGhlIGAtLWluZGV4YCBvcHRpb24gaXMgdXNlZCwgdGhlbiB0cmllcyB0byByZWluc3RhdGUgbm90IG9ubHkgdGhlIHdvcmtpbmcKK3RyZWUncyBjaGFuZ2VzLCBidXQgYWxzbyB0aGUgaW5kZXgncyBvbmVzLiBIb3dldmVyLCB0aGlzIGNhbiBmYWlsLCB3aGVuIHlvdQoraGF2ZSBjb25mbGljdHMgKHdoaWNoIGFyZSBzdG9yZWQgaW4gdGhlIGluZGV4LCB3aGVyZSB5b3UgdGhlcmVmb3JlIGNhbiBubworbG9uZ2VyIGFwcGx5IHRoZSBjaGFuZ2VzIGFzIHRoZXkgd2VyZSBvcmlnaW5hbGx5KS4KKysKK1doZW4gbm8gYDxzdGFzaD5gIGlzIGdpdmVuLCBgc3Rhc2hAezB9YCBpcyBhc3N1bWVkLCBvdGhlcndpc2UgYDxzdGFzaD5gIG11c3QKK2JlIGEgcmVmZXJlbmNlIG9mIHRoZSBmb3JtIGBzdGFzaEB7PHJldmlzaW9uPn1gLgorCithcHBseSBbLS1pbmRleF0gWy1xfC0tcXVpZXRdIFs8c3Rhc2g+XTo6CisKKwlMaWtlIGBwb3BgLCBidXQgZG8gbm90IHJlbW92ZSB0aGUgc3RhdGUgZnJvbSB0aGUgc3Rhc2ggbGlzdC4gVW5saWtlIGBwb3BgLAorCWA8c3Rhc2g+YCBtYXkgYmUgYW55IGNvbW1pdCB0aGF0IGxvb2tzIGxpa2UgYSBjb21taXQgY3JlYXRlZCBieQorCWBzdGFzaCBzYXZlYCBvciBgc3Rhc2ggY3JlYXRlYC4KKworYnJhbmNoIDxicmFuY2huYW1lPiBbPHN0YXNoPl06OgorCisJQ3JlYXRlcyBhbmQgY2hlY2tzIG91dCBhIG5ldyBicmFuY2ggbmFtZWQgYDxicmFuY2huYW1lPmAgc3RhcnRpbmcgZnJvbQorCXRoZSBjb21taXQgYXQgd2hpY2ggdGhlIGA8c3Rhc2g+YCB3YXMgb3JpZ2luYWxseSBjcmVhdGVkLCBhcHBsaWVzIHRoZQorCWNoYW5nZXMgcmVjb3JkZWQgaW4gYDxzdGFzaD5gIHRvIHRoZSBuZXcgd29ya2luZyB0cmVlIGFuZCBpbmRleC4KKwlJZiB0aGF0IHN1Y2NlZWRzLCBhbmQgYDxzdGFzaD5gIGlzIGEgcmVmZXJlbmNlIG9mIHRoZSBmb3JtCisJYHN0YXNoQHs8cmV2aXNpb24+fWAsIGl0IHRoZW4gZHJvcHMgdGhlIGA8c3Rhc2g+YC4gV2hlbiBubyBgPHN0YXNoPmAKKwlpcyBnaXZlbiwgYXBwbGllcyB0aGUgbGF0ZXN0IG9uZS4KKysKK1RoaXMgaXMgdXNlZnVsIGlmIHRoZSBicmFuY2ggb24gd2hpY2ggeW91IHJhbiBgZ2l0IHN0YXNoIHNhdmVgIGhhcworY2hhbmdlZCBlbm91Z2ggdGhhdCBgZ2l0IHN0YXNoIGFwcGx5YCBmYWlscyBkdWUgdG8gY29uZmxpY3RzLiBTaW5jZQordGhlIHN0YXNoIGlzIGFwcGxpZWQgb24gdG9wIG9mIHRoZSBjb21taXQgdGhhdCB3YXMgSEVBRCBhdCB0aGUgdGltZQorYGdpdCBzdGFzaGAgd2FzIHJ1biwgaXQgcmVzdG9yZXMgdGhlIG9yaWdpbmFsbHkgc3Rhc2hlZCBzdGF0ZSB3aXRoCitubyBjb25mbGljdHMuCisKK2NsZWFyOjoKKwlSZW1vdmUgYWxsIHRoZSBzdGFzaGVkIHN0YXRlcy4gTm90ZSB0aGF0IHRob3NlIHN0YXRlcyB3aWxsIHRoZW4KKwliZSBzdWJqZWN0IHRvIHBydW5pbmcsIGFuZCBtYXkgYmUgaW1wb3NzaWJsZSB0byByZWNvdmVyIChzZWUKKwknRXhhbXBsZXMnIGJlbG93IGZvciBhIHBvc3NpYmxlIHN0cmF0ZWd5KS4KKworZHJvcCBbLXF8LS1xdWlldF0gWzxzdGFzaD5dOjoKKworCVJlbW92ZSBhIHNpbmdsZSBzdGFzaGVkIHN0YXRlIGZyb20gdGhlIHN0YXNoIGxpc3QuIFdoZW4gbm8gYDxzdGFzaD5gCisJaXMgZ2l2ZW4sIGl0IHJlbW92ZXMgdGhlIGxhdGVzdCBvbmUuIGkuZS4gYHN0YXNoQHswfWAsIG90aGVyd2lzZQorCWA8c3Rhc2g+YCBtdXN0IGJlIGEgdmFsaWQgc3Rhc2ggbG9nIHJlZmVyZW5jZSBvZiB0aGUgZm9ybQorCWBzdGFzaEB7PHJldmlzaW9uPn1gLgorCitjcmVhdGU6OgorCisJQ3JlYXRlIGEgc3Rhc2ggKHdoaWNoIGlzIGEgcmVndWxhciBjb21taXQgb2JqZWN0KSBhbmQgcmV0dXJuIGl0cworCW9iamVjdCBuYW1lLCB3aXRob3V0IHN0b3JpbmcgaXQgYW55d2hlcmUgaW4gdGhlIHJlZiBuYW1lc3BhY2UuCisJVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VmdWwgZm9yIHNjcmlwdHMuICBJdCBpcyBwcm9iYWJseSBub3QKKwl0aGUgY29tbWFuZCB5b3Ugd2FudCB0byB1c2U7IHNlZSAic2F2ZSIgYWJvdmUuCisKK3N0b3JlOjoKKworCVN0b3JlIGEgZ2l2ZW4gc3Rhc2ggY3JlYXRlZCB2aWEgJ2dpdCBzdGFzaCBjcmVhdGUnICh3aGljaCBpcyBhCisJZGFuZ2xpbmcgbWVyZ2UgY29tbWl0KSBpbiB0aGUgc3Rhc2ggcmVmLCB1cGRhdGluZyB0aGUgc3Rhc2gKKwlyZWZsb2cuICBUaGlzIGlzIGludGVuZGVkIHRvIGJlIHVzZWZ1bCBmb3Igc2NyaXB0cy4gIEl0IGlzCisJcHJvYmFibHkgbm90IHRoZSBjb21tYW5kIHlvdSB3YW50IHRvIHVzZTsgc2VlICJzYXZlIiBhYm92ZS4KKworRElTQ1VTU0lPTgorLS0tLS0tLS0tLQorCitBIHN0YXNoIGlzIHJlcHJlc2VudGVkIGFzIGEgY29tbWl0IHdob3NlIHRyZWUgcmVjb3JkcyB0aGUgc3RhdGUgb2YgdGhlCit3b3JraW5nIGRpcmVjdG9yeSwgYW5kIGl0cyBmaXJzdCBwYXJlbnQgaXMgdGhlIGNvbW1pdCBhdCBgSEVBRGAgd2hlbgordGhlIHN0YXNoIHdhcyBjcmVhdGVkLiAgVGhlIHRyZWUgb2YgdGhlIHNlY29uZCBwYXJlbnQgcmVjb3JkcyB0aGUKK3N0YXRlIG9mIHRoZSBpbmRleCB3aGVuIHRoZSBzdGFzaCBpcyBtYWRlLCBhbmQgaXQgaXMgbWFkZSBhIGNoaWxkIG9mCit0aGUgYEhFQURgIGNvbW1pdC4gIFRoZSBhbmNlc3RyeSBncmFwaCBsb29rcyBsaWtlIHRoaXM6CisKKyAgICAgICAgICAgIC4tLS0tVworICAgICAgICAgICAvICAgIC8KKyAgICAgLS0tLS1ILS0tLUkKKword2hlcmUgYEhgIGlzIHRoZSBgSEVBRGAgY29tbWl0LCBgSWAgaXMgYSBjb21taXQgdGhhdCByZWNvcmRzIHRoZSBzdGF0ZQorb2YgdGhlIGluZGV4LCBhbmQgYFdgIGlzIGEgY29tbWl0IHRoYXQgcmVjb3JkcyB0aGUgc3RhdGUgb2YgdGhlIHdvcmtpbmcKK3RyZWUuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1B1bGxpbmcgaW50byBhIGRpcnR5IHRyZWU6OgorCitXaGVuIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBzb21ldGhpbmcsIHlvdSBsZWFybiB0aGF0IHRoZXJlIGFyZQordXBzdHJlYW0gY2hhbmdlcyB0aGF0IGFyZSBwb3NzaWJseSByZWxldmFudCB0byB3aGF0IHlvdSBhcmUKK2RvaW5nLiAgV2hlbiB5b3VyIGxvY2FsIGNoYW5nZXMgZG8gbm90IGNvbmZsaWN0IHdpdGggdGhlIGNoYW5nZXMgaW4KK3RoZSB1cHN0cmVhbSwgYSBzaW1wbGUgYGdpdCBwdWxsYCB3aWxsIGxldCB5b3UgbW92ZSBmb3J3YXJkLgorKworSG93ZXZlciwgdGhlcmUgYXJlIGNhc2VzIGluIHdoaWNoIHlvdXIgbG9jYWwgY2hhbmdlcyBkbyBjb25mbGljdCB3aXRoCit0aGUgdXBzdHJlYW0gY2hhbmdlcywgYW5kIGBnaXQgcHVsbGAgcmVmdXNlcyB0byBvdmVyd3JpdGUgeW91cgorY2hhbmdlcy4gIEluIHN1Y2ggYSBjYXNlLCB5b3UgY2FuIHN0YXNoIHlvdXIgY2hhbmdlcyBhd2F5LAorcGVyZm9ybSBhIHB1bGwsIGFuZCB0aGVuIHVuc3Rhc2gsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwKKyAuLi4KK2ZpbGUgZm9vYmFyIG5vdCB1cCB0byBkYXRlLCBjYW5ub3QgbWVyZ2UuCiskIGdpdCBzdGFzaAorJCBnaXQgcHVsbAorJCBnaXQgc3Rhc2ggcG9wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ludGVycnVwdGVkIHdvcmtmbG93OjoKKworV2hlbiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2Ygc29tZXRoaW5nLCB5b3VyIGJvc3MgY29tZXMgaW4gYW5kCitkZW1hbmRzIHRoYXQgeW91IGZpeCBzb21ldGhpbmcgaW1tZWRpYXRlbHkuICBUcmFkaXRpb25hbGx5LCB5b3Ugd291bGQKK21ha2UgYSBjb21taXQgdG8gYSB0ZW1wb3JhcnkgYnJhbmNoIHRvIHN0b3JlIHlvdXIgY2hhbmdlcyBhd2F5LCBhbmQKK3JldHVybiB0byB5b3VyIG9yaWdpbmFsIGJyYW5jaCB0byBtYWtlIHRoZSBlbWVyZ2VuY3kgZml4LCBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIC4uLiBoYWNrIGhhY2sgaGFjayAuLi4KKyQgZ2l0IGNoZWNrb3V0IC1iIG15X3dpcAorJCBnaXQgY29tbWl0IC1hIC1tICJXSVAiCiskIGdpdCBjaGVja291dCBtYXN0ZXIKKyQgZWRpdCBlbWVyZ2VuY3kgZml4CiskIGdpdCBjb21taXQgLWEgLW0gIkZpeCBpbiBhIGh1cnJ5IgorJCBnaXQgY2hlY2tvdXQgbXlfd2lwCiskIGdpdCByZXNldCAtLXNvZnQgSEVBRF4KKyMgLi4uIGNvbnRpbnVlIGhhY2tpbmcgLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitZb3UgY2FuIHVzZSAnZ2l0IHN0YXNoJyB0byBzaW1wbGlmeSB0aGUgYWJvdmUsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLi4uIGhhY2sgaGFjayBoYWNrIC4uLgorJCBnaXQgc3Rhc2gKKyQgZWRpdCBlbWVyZ2VuY3kgZml4CiskIGdpdCBjb21taXQgLWEgLW0gIkZpeCBpbiBhIGh1cnJ5IgorJCBnaXQgc3Rhc2ggcG9wCisjIC4uLiBjb250aW51ZSBoYWNraW5nIC4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUZXN0aW5nIHBhcnRpYWwgY29tbWl0czo6CisKK1lvdSBjYW4gdXNlIGBnaXQgc3Rhc2ggc2F2ZSAtLWtlZXAtaW5kZXhgIHdoZW4geW91IHdhbnQgdG8gbWFrZSB0d28gb3IKK21vcmUgY29tbWl0cyBvdXQgb2YgdGhlIGNoYW5nZXMgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHlvdSB3YW50IHRvIHRlc3QKK2VhY2ggY2hhbmdlIGJlZm9yZSBjb21taXR0aW5nOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyAuLi4gaGFjayBoYWNrIGhhY2sgLi4uCiskIGdpdCBhZGQgLS1wYXRjaCBmb28gICAgICAgICAgICAjIGFkZCBqdXN0IGZpcnN0IHBhcnQgdG8gdGhlIGluZGV4CiskIGdpdCBzdGFzaCBzYXZlIC0ta2VlcC1pbmRleCAgICAjIHNhdmUgYWxsIG90aGVyIGNoYW5nZXMgdG8gdGhlIHN0YXNoCiskIGVkaXQvYnVpbGQvdGVzdCBmaXJzdCBwYXJ0CiskIGdpdCBjb21taXQgLW0gJ0ZpcnN0IHBhcnQnICAgICAjIGNvbW1pdCBmdWxseSB0ZXN0ZWQgY2hhbmdlCiskIGdpdCBzdGFzaCBwb3AgICAgICAgICAgICAgICAgICAjIHByZXBhcmUgdG8gd29yayBvbiBhbGwgb3RoZXIgY2hhbmdlcworIyAuLi4gcmVwZWF0IGFib3ZlIGZpdmUgc3RlcHMgdW50aWwgb25lIGNvbW1pdCByZW1haW5zIC4uLgorJCBlZGl0L2J1aWxkL3Rlc3QgcmVtYWluaW5nIHBhcnRzCiskIGdpdCBjb21taXQgZm9vIC1tICdSZW1haW5pbmcgcGFydHMnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlY292ZXJpbmcgc3Rhc2hlcyB0aGF0IHdlcmUgY2xlYXJlZC9kcm9wcGVkIGVycm9uZW91c2x5OjoKKworSWYgeW91IG1pc3Rha2VubHkgZHJvcCBvciBjbGVhciBzdGFzaGVzLCB0aGV5IGNhbm5vdCBiZSByZWNvdmVyZWQKK3Rocm91Z2ggdGhlIG5vcm1hbCBzYWZldHkgbWVjaGFuaXNtcy4gIEhvd2V2ZXIsIHlvdSBjYW4gdHJ5IHRoZQorZm9sbG93aW5nIGluY2FudGF0aW9uIHRvIGdldCBhIGxpc3Qgb2Ygc3Rhc2hlcyB0aGF0IGFyZSBzdGlsbCBpbiB5b3VyCityZXBvc2l0b3J5LCBidXQgbm90IHJlYWNoYWJsZSBhbnkgbW9yZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBmc2NrIC0tdW5yZWFjaGFibGUgfAorZ3JlcCBjb21taXQgfCBjdXQgLWRcICAtZjMgfAoreGFyZ3MgZ2l0IGxvZyAtLW1lcmdlcyAtLW5vLXdhbGsgLS1ncmVwPVdJUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0sCitsaW5rZ2l0OmdpdC1jb21taXRbMV0sCitsaW5rZ2l0OmdpdC1yZWZsb2dbMV0sCitsaW5rZ2l0OmdpdC1yZXNldFsxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0YXR1cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZThmNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zdGF0dXMudHh0CkBAIC0wLDAgKzEsMjM5IEBACitnaXQtc3RhdHVzKDEpCis9PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC1zdGF0dXMgLSBTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN0YXR1cycgWzxvcHRpb25zPi4uLl0gWy0tXSBbPHBhdGhzcGVjPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitEaXNwbGF5cyBwYXRocyB0aGF0IGhhdmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgaW5kZXggZmlsZSBhbmQgdGhlCitjdXJyZW50IEhFQUQgY29tbWl0LCBwYXRocyB0aGF0IGhhdmUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgd29ya2luZwordHJlZSBhbmQgdGhlIGluZGV4IGZpbGUsIGFuZCBwYXRocyBpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgYXJlIG5vdAordHJhY2tlZCBieSBHaXQgKGFuZCBhcmUgbm90IGlnbm9yZWQgYnkgbGlua2dpdDpnaXRpZ25vcmVbNV0pLiBUaGUgZmlyc3QKK2FyZSB3aGF0IHlvdSBfd291bGRfIGNvbW1pdCBieSBydW5uaW5nIGBnaXQgY29tbWl0YDsgdGhlIHNlY29uZCBhbmQKK3RoaXJkIGFyZSB3aGF0IHlvdSBfY291bGRfIGNvbW1pdCBieSBydW5uaW5nICdnaXQgYWRkJyBiZWZvcmUgcnVubmluZworYGdpdCBjb21taXRgLgorCitPUFRJT05TCistLS0tLS0tCisKKy1zOjoKKy0tc2hvcnQ6OgorCUdpdmUgdGhlIG91dHB1dCBpbiB0aGUgc2hvcnQtZm9ybWF0LgorCistYjo6CistLWJyYW5jaDo6CisJU2hvdyB0aGUgYnJhbmNoIGFuZCB0cmFja2luZyBpbmZvIGV2ZW4gaW4gc2hvcnQtZm9ybWF0LgorCistLXBvcmNlbGFpbjo6CisJR2l2ZSB0aGUgb3V0cHV0IGluIGFuIGVhc3ktdG8tcGFyc2UgZm9ybWF0IGZvciBzY3JpcHRzLgorCVRoaXMgaXMgc2ltaWxhciB0byB0aGUgc2hvcnQgb3V0cHV0LCBidXQgd2lsbCByZW1haW4gc3RhYmxlCisJYWNyb3NzIEdpdCB2ZXJzaW9ucyBhbmQgcmVnYXJkbGVzcyBvZiB1c2VyIGNvbmZpZ3VyYXRpb24uIFNlZQorCWJlbG93IGZvciBkZXRhaWxzLgorCistLWxvbmc6OgorCUdpdmUgdGhlIG91dHB1dCBpbiB0aGUgbG9uZy1mb3JtYXQuIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKy12OjoKKy0tdmVyYm9zZTo6CisJSW4gYWRkaXRpb24gdG8gdGhlIG5hbWVzIG9mIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQsIGFsc28KKwlzaG93IHRoZSB0ZXh0dWFsIGNoYW5nZXMgdGhhdCBhcmUgc3RhZ2VkIHRvIGJlIGNvbW1pdHRlZAorCShpLmUuLCBsaWtlIHRoZSBvdXRwdXQgb2YgYGdpdCBkaWZmIC0tY2FjaGVkYCkuIElmIGAtdmAgaXMgc3BlY2lmaWVkCisJdHdpY2UsIHRoZW4gYWxzbyBzaG93IHRoZSBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdAorCWhhdmUgbm90IHlldCBiZWVuIHN0YWdlZCAoaS5lLiwgbGlrZSB0aGUgb3V0cHV0IG9mIGBnaXQgZGlmZmApLgorCistdVs8bW9kZT5dOjoKKy0tdW50cmFja2VkLWZpbGVzWz08bW9kZT5dOjoKKwlTaG93IHVudHJhY2tlZCBmaWxlcy4KKysKK1RoZSBtb2RlIHBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGhhbmRsaW5nIG9mIHVudHJhY2tlZCBmaWxlcy4KK0l0IGlzIG9wdGlvbmFsOiBpdCBkZWZhdWx0cyB0byAnYWxsJywgYW5kIGlmIHNwZWNpZmllZCwgaXQgbXVzdCBiZQorc3R1Y2sgdG8gdGhlIG9wdGlvbiAoZS5nLiBgLXVub2AsIGJ1dCBub3QgYC11IG5vYCkuCisrCitUaGUgcG9zc2libGUgb3B0aW9ucyBhcmU6CisrCisJLSAnbm8nICAgICAtIFNob3cgbm8gdW50cmFja2VkIGZpbGVzLgorCS0gJ25vcm1hbCcgLSBTaG93cyB1bnRyYWNrZWQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorCS0gJ2FsbCcgICAgLSBBbHNvIHNob3dzIGluZGl2aWR1YWwgZmlsZXMgaW4gdW50cmFja2VkIGRpcmVjdG9yaWVzLgorKworV2hlbiBgLXVgIG9wdGlvbiBpcyBub3QgdXNlZCwgdW50cmFja2VkIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBhcmUKK3Nob3duIChpLmUuIHRoZSBzYW1lIGFzIHNwZWNpZnlpbmcgYG5vcm1hbGApLCB0byBoZWxwIHlvdSBhdm9pZAorZm9yZ2V0dGluZyB0byBhZGQgbmV3bHkgY3JlYXRlZCBmaWxlcy4gIEJlY2F1c2UgaXQgdGFrZXMgZXh0cmEgd29yawordG8gZmluZCB1bnRyYWNrZWQgZmlsZXMgaW4gdGhlIGZpbGVzeXN0ZW0sIHRoaXMgbW9kZSBtYXkgdGFrZSBzb21lCit0aW1lIGluIGEgbGFyZ2Ugd29ya2luZyB0cmVlLgorQ29uc2lkZXIgZW5hYmxpbmcgdW50cmFja2VkIGNhY2hlIGFuZCBzcGxpdCBpbmRleCBpZiBzdXBwb3J0ZWQgKHNlZQorYGdpdCB1cGRhdGUtaW5kZXggLS11bnRyYWNrZWQtY2FjaGVgIGFuZCBgZ2l0IHVwZGF0ZS1pbmRleAorLS1zcGxpdC1pbmRleGApLCBPdGhlcndpc2UgeW91IGNhbiB1c2UgYG5vYCB0byBoYXZlIGBnaXQgc3RhdHVzYAorcmV0dXJuIG1vcmUgcXVpY2tseSB3aXRob3V0IHNob3dpbmcgdW50cmFja2VkIGZpbGVzLgorKworVGhlIGRlZmF1bHQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgZG9jdW1lbnRlZCBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKy0taWdub3JlLXN1Ym1vZHVsZXNbPTx3aGVuPl06OgorCUlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMgd2hlbiBsb29raW5nIGZvciBjaGFuZ2VzLiA8d2hlbj4gY2FuIGJlCisJZWl0aGVyICJub25lIiwgInVudHJhY2tlZCIsICJkaXJ0eSIgb3IgImFsbCIsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LgorCVVzaW5nICJub25lIiB3aWxsIGNvbnNpZGVyIHRoZSBzdWJtb2R1bGUgbW9kaWZpZWQgd2hlbiBpdCBlaXRoZXIgY29udGFpbnMKKwl1bnRyYWNrZWQgb3IgbW9kaWZpZWQgZmlsZXMgb3IgaXRzIEhFQUQgZGlmZmVycyBmcm9tIHRoZSBjb21taXQgcmVjb3JkZWQKKwlpbiB0aGUgc3VwZXJwcm9qZWN0IGFuZCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgc2V0dGluZ3Mgb2YgdGhlCisJJ2lnbm9yZScgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBvciBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0uIFdoZW4KKwkidW50cmFja2VkIiBpcyB1c2VkIHN1Ym1vZHVsZXMgYXJlIG5vdCBjb25zaWRlcmVkIGRpcnR5IHdoZW4gdGhleSBvbmx5CisJY29udGFpbiB1bnRyYWNrZWQgY29udGVudCAoYnV0IHRoZXkgYXJlIHN0aWxsIHNjYW5uZWQgZm9yIG1vZGlmaWVkCisJY29udGVudCkuIFVzaW5nICJkaXJ0eSIgaWdub3JlcyBhbGwgY2hhbmdlcyB0byB0aGUgd29yayB0cmVlIG9mIHN1Ym1vZHVsZXMsCisJb25seSBjaGFuZ2VzIHRvIHRoZSBjb21taXRzIHN0b3JlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGFyZSBzaG93biAodGhpcyB3YXMKKwl0aGUgYmVoYXZpb3IgYmVmb3JlIDEuNy4wKS4gVXNpbmcgImFsbCIgaGlkZXMgYWxsIGNoYW5nZXMgdG8gc3VibW9kdWxlcworCShhbmQgc3VwcHJlc3NlcyB0aGUgb3V0cHV0IG9mIHN1Ym1vZHVsZSBzdW1tYXJpZXMgd2hlbiB0aGUgY29uZmlnIG9wdGlvbgorCWBzdGF0dXMuc3VibW9kdWxlU3VtbWFyeWAgaXMgc2V0KS4KKworLS1pZ25vcmVkOjoKKwlTaG93IGlnbm9yZWQgZmlsZXMgYXMgd2VsbC4KKworLXo6OgorCVRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMLCBpbnN0ZWFkIG9mIExGLiAgVGhpcyBpbXBsaWVzCisJdGhlIGAtLXBvcmNlbGFpbmAgb3V0cHV0IGZvcm1hdCBpZiBubyBvdGhlciBmb3JtYXQgaXMgZ2l2ZW4uCisKKy0tY29sdW1uWz08b3B0aW9ucz5dOjoKKy0tbm8tY29sdW1uOjoKKwlEaXNwbGF5IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zLiBTZWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCWNvbHVtbi5zdGF0dXMgZm9yIG9wdGlvbiBzeW50YXguYC0tY29sdW1uYCBhbmQgYC0tbm8tY29sdW1uYAorCXdpdGhvdXQgb3B0aW9ucyBhcmUgZXF1aXZhbGVudCB0byAnYWx3YXlzJyBhbmQgJ25ldmVyJworCXJlc3BlY3RpdmVseS4KKworCitPVVRQVVQKKy0tLS0tLQorVGhlIG91dHB1dCBmcm9tIHRoaXMgY29tbWFuZCBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgY29tbWl0Cit0ZW1wbGF0ZSBjb21tZW50LgorVGhlIGRlZmF1bHQsIGxvbmcgZm9ybWF0LCBpcyBkZXNpZ25lZCB0byBiZSBodW1hbiByZWFkYWJsZSwKK3ZlcmJvc2UgYW5kIGRlc2NyaXB0aXZlLiAgSXRzIGNvbnRlbnRzIGFuZCBmb3JtYXQgYXJlIHN1YmplY3QgdG8gY2hhbmdlCithdCBhbnkgdGltZS4KKworVGhlIHBhdGhzIG1lbnRpb25lZCBpbiB0aGUgb3V0cHV0LCB1bmxpa2UgbWFueSBvdGhlciBHaXQgY29tbWFuZHMsIGFyZQorbWFkZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkgaWYgeW91IGFyZSB3b3JraW5nIGluIGEKK3N1YmRpcmVjdG9yeSAodGhpcyBpcyBvbiBwdXJwb3NlLCB0byBoZWxwIGN1dHRpbmcgYW5kIHBhc3RpbmcpLiBTZWUKK3RoZSBzdGF0dXMucmVsYXRpdmVQYXRocyBjb25maWcgb3B0aW9uIGJlbG93LgorCitTaG9ydCBGb3JtYXQKK35+fn5+fn5+fn5+fgorCitJbiB0aGUgc2hvcnQtZm9ybWF0LCB0aGUgc3RhdHVzIG9mIGVhY2ggcGF0aCBpcyBzaG93biBhcworCisJWFkgUEFUSDEgLT4gUEFUSDIKKword2hlcmUgYFBBVEgxYCBpcyB0aGUgcGF0aCBpbiB0aGUgYEhFQURgLCBhbmQgdGhlICIgYC0+IFBBVEgyYCIgcGFydCBpcworc2hvd24gb25seSB3aGVuIGBQQVRIMWAgY29ycmVzcG9uZHMgdG8gYSBkaWZmZXJlbnQgcGF0aCBpbiB0aGUKK2luZGV4L3dvcmt0cmVlIChpLmUuIHRoZSBmaWxlIGlzIHJlbmFtZWQpLiBUaGUgYFhZYCBpcyBhIHR3by1sZXR0ZXIKK3N0YXR1cyBjb2RlLgorCitUaGUgZmllbGRzIChpbmNsdWRpbmcgdGhlIGAtPmApIGFyZSBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IGEKK3NpbmdsZSBzcGFjZS4gSWYgYSBmaWxlbmFtZSBjb250YWlucyB3aGl0ZXNwYWNlIG9yIG90aGVyIG5vbnByaW50YWJsZQorY2hhcmFjdGVycywgdGhhdCBmaWVsZCB3aWxsIGJlIHF1b3RlZCBpbiB0aGUgbWFubmVyIG9mIGEgQyBzdHJpbmcKK2xpdGVyYWw6IHN1cnJvdW5kZWQgYnkgQVNDSUkgZG91YmxlIHF1b3RlICgzNCkgY2hhcmFjdGVycywgYW5kIHdpdGgKK2ludGVyaW9yIHNwZWNpYWwgY2hhcmFjdGVycyBiYWNrc2xhc2gtZXNjYXBlZC4KKworRm9yIHBhdGhzIHdpdGggbWVyZ2UgY29uZmxpY3RzLCBgWGAgYW5kIGBZYCBzaG93IHRoZSBtb2RpZmljYXRpb24KK3N0YXRlcyBvZiBlYWNoIHNpZGUgb2YgdGhlIG1lcmdlLiBGb3IgcGF0aHMgdGhhdCBkbyBub3QgaGF2ZSBtZXJnZQorY29uZmxpY3RzLCBgWGAgc2hvd3MgdGhlIHN0YXR1cyBvZiB0aGUgaW5kZXgsIGFuZCBgWWAgc2hvd3MgdGhlIHN0YXR1cworb2YgdGhlIHdvcmsgdHJlZS4gIEZvciB1bnRyYWNrZWQgcGF0aHMsIGBYWWAgYXJlIGA/P2AuICBPdGhlciBzdGF0dXMKK2NvZGVzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBmb2xsb3dzOgorCisqICcgJyA9IHVubW9kaWZpZWQKKyogJ00nID0gbW9kaWZpZWQKKyogJ0EnID0gYWRkZWQKKyogJ0QnID0gZGVsZXRlZAorKiAnUicgPSByZW5hbWVkCisqICdDJyA9IGNvcGllZAorKiAnVScgPSB1cGRhdGVkIGJ1dCB1bm1lcmdlZAorCitJZ25vcmVkIGZpbGVzIGFyZSBub3QgbGlzdGVkLCB1bmxlc3MgYC0taWdub3JlZGAgb3B0aW9uIGlzIGluIGVmZmVjdCwKK2luIHdoaWNoIGNhc2UgYFhZYCBhcmUgYCEhYC4KKworICAgIFggICAgICAgICAgWSAgICAgTWVhbmluZworICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgW01EXSAgIG5vdCB1cGRhdGVkCisgICAgTSAgICAgICAgWyBNRF0gICB1cGRhdGVkIGluIGluZGV4CisgICAgQSAgICAgICAgWyBNRF0gICBhZGRlZCB0byBpbmRleAorICAgIEQgICAgICAgICBbIE1dICAgZGVsZXRlZCBmcm9tIGluZGV4CisgICAgUiAgICAgICAgWyBNRF0gICByZW5hbWVkIGluIGluZGV4CisgICAgQyAgICAgICAgWyBNRF0gICBjb3BpZWQgaW4gaW5kZXgKKyAgICBbTUFSQ10gICAgICAgICAgIGluZGV4IGFuZCB3b3JrIHRyZWUgbWF0Y2hlcworICAgIFsgTUFSQ10gICAgIE0gICAgd29yayB0cmVlIGNoYW5nZWQgc2luY2UgaW5kZXgKKyAgICBbIE1BUkNdICAgICBEICAgIGRlbGV0ZWQgaW4gd29yayB0cmVlCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEQgICAgICAgICAgIEQgICAgdW5tZXJnZWQsIGJvdGggZGVsZXRlZAorICAgIEEgICAgICAgICAgIFUgICAgdW5tZXJnZWQsIGFkZGVkIGJ5IHVzCisgICAgVSAgICAgICAgICAgRCAgICB1bm1lcmdlZCwgZGVsZXRlZCBieSB0aGVtCisgICAgVSAgICAgICAgICAgQSAgICB1bm1lcmdlZCwgYWRkZWQgYnkgdGhlbQorICAgIEQgICAgICAgICAgIFUgICAgdW5tZXJnZWQsIGRlbGV0ZWQgYnkgdXMKKyAgICBBICAgICAgICAgICBBICAgIHVubWVyZ2VkLCBib3RoIGFkZGVkCisgICAgVSAgICAgICAgICAgVSAgICB1bm1lcmdlZCwgYm90aCBtb2RpZmllZAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICA/ICAgICAgICAgICA/ICAgIHVudHJhY2tlZAorICAgICEgICAgICAgICAgICEgICAgaWdub3JlZAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgLWIgaXMgdXNlZCB0aGUgc2hvcnQtZm9ybWF0IHN0YXR1cyBpcyBwcmVjZWRlZCBieSBhIGxpbmUKKworIyMgYnJhbmNobmFtZSB0cmFja2luZyBpbmZvCisKK1BvcmNlbGFpbiBGb3JtYXQKK35+fn5+fn5+fn5+fn5+fn4KKworVGhlIHBvcmNlbGFpbiBmb3JtYXQgaXMgc2ltaWxhciB0byB0aGUgc2hvcnQgZm9ybWF0LCBidXQgaXMgZ3VhcmFudGVlZAorbm90IHRvIGNoYW5nZSBpbiBhIGJhY2t3YXJkcy1pbmNvbXBhdGlibGUgd2F5IGJldHdlZW4gR2l0IHZlcnNpb25zIG9yCitiYXNlZCBvbiB1c2VyIGNvbmZpZ3VyYXRpb24uIFRoaXMgbWFrZXMgaXQgaWRlYWwgZm9yIHBhcnNpbmcgYnkgc2NyaXB0cy4KK1RoZSBkZXNjcmlwdGlvbiBvZiB0aGUgc2hvcnQgZm9ybWF0IGFib3ZlIGFsc28gZGVzY3JpYmVzIHRoZSBwb3JjZWxhaW4KK2Zvcm1hdCwgd2l0aCBhIGZldyBleGNlcHRpb25zOgorCisxLiBUaGUgdXNlcidzIGNvbG9yLnN0YXR1cyBjb25maWd1cmF0aW9uIGlzIG5vdCByZXNwZWN0ZWQ7IGNvbG9yIHdpbGwKKyAgIGFsd2F5cyBiZSBvZmYuCisKKzIuIFRoZSB1c2VyJ3Mgc3RhdHVzLnJlbGF0aXZlUGF0aHMgY29uZmlndXJhdGlvbiBpcyBub3QgcmVzcGVjdGVkOyBwYXRocworICAgc2hvd24gd2lsbCBhbHdheXMgYmUgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4KKworVGhlcmUgaXMgYWxzbyBhbiBhbHRlcm5hdGUgLXogZm9ybWF0IHJlY29tbWVuZGVkIGZvciBtYWNoaW5lIHBhcnNpbmcuIEluCit0aGF0IGZvcm1hdCwgdGhlIHN0YXR1cyBmaWVsZCBpcyB0aGUgc2FtZSwgYnV0IHNvbWUgb3RoZXIgdGhpbmdzCitjaGFuZ2UuICBGaXJzdCwgdGhlICdcLT4nIGlzIG9taXR0ZWQgZnJvbSByZW5hbWUgZW50cmllcyBhbmQgdGhlIGZpZWxkCitvcmRlciBpcyByZXZlcnNlZCAoZS5nICdmcm9tIFwtPiB0bycgYmVjb21lcyAndG8gZnJvbScpLiBTZWNvbmQsIGEgTlVMCisoQVNDSUkgMCkgZm9sbG93cyBlYWNoIGZpbGVuYW1lLCByZXBsYWNpbmcgc3BhY2UgYXMgYSBmaWVsZCBzZXBhcmF0b3IKK2FuZCB0aGUgdGVybWluYXRpbmcgbmV3bGluZSAoYnV0IGEgc3BhY2Ugc3RpbGwgc2VwYXJhdGVzIHRoZSBzdGF0dXMKK2ZpZWxkIGZyb20gdGhlIGZpcnN0IGZpbGVuYW1lKS4gIFRoaXJkLCBmaWxlbmFtZXMgY29udGFpbmluZyBzcGVjaWFsCitjaGFyYWN0ZXJzIGFyZSBub3Qgc3BlY2lhbGx5IGZvcm1hdHRlZDsgbm8gcXVvdGluZyBvcgorYmFja3NsYXNoLWVzY2FwaW5nIGlzIHBlcmZvcm1lZC4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZCBob25vcnMgYGNvbG9yLnN0YXR1c2AgKG9yIGBzdGF0dXMuY29sb3JgIC0tIHRoZXkKK21lYW4gdGhlIHNhbWUgdGhpbmcgYW5kIHRoZSBsYXR0ZXIgaXMga2VwdCBmb3IgYmFja3dhcmQKK2NvbXBhdGliaWxpdHkpIGFuZCBgY29sb3Iuc3RhdHVzLjxzbG90PmAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKK3RvIGNvbG9yaXplIGl0cyBvdXRwdXQuCisKK0lmIHRoZSBjb25maWcgdmFyaWFibGUgYHN0YXR1cy5yZWxhdGl2ZVBhdGhzYCBpcyBzZXQgdG8gZmFsc2UsIHRoZW4gYWxsCitwYXRocyBzaG93biBhcmUgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdCwgbm90IHRvIHRoZSBjdXJyZW50CitkaXJlY3RvcnkuCisKK0lmIGBzdGF0dXMuc3VibW9kdWxlU3VtbWFyeWAgaXMgc2V0IHRvIGEgbm9uIHplcm8gbnVtYmVyIG9yIHRydWUgKGlkZW50aWNhbAordG8gLTEgb3IgYW4gdW5saW1pdGVkIG51bWJlciksIHRoZSBzdWJtb2R1bGUgc3VtbWFyeSB3aWxsIGJlIGVuYWJsZWQgZm9yCit0aGUgbG9uZyBmb3JtYXQgYW5kIGEgc3VtbWFyeSBvZiBjb21taXRzIGZvciBtb2RpZmllZCBzdWJtb2R1bGVzIHdpbGwgYmUKK3Nob3duIChzZWUgLS1zdW1tYXJ5LWxpbWl0IG9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0pLiBQbGVhc2Ugbm90ZQordGhhdCB0aGUgc3VtbWFyeSBvdXRwdXQgZnJvbSB0aGUgc3RhdHVzIGNvbW1hbmQgd2lsbCBiZSBzdXBwcmVzc2VkIGZvciBhbGwKK3N1Ym1vZHVsZXMgd2hlbiBgZGlmZi5pZ25vcmVTdWJtb2R1bGVzYCBpcyBzZXQgdG8gJ2FsbCcgb3Igb25seSBmb3IgdGhvc2UKK3N1Ym1vZHVsZXMgd2hlcmUgYHN1Ym1vZHVsZS48bmFtZT4uaWdub3JlPWFsbGAuIFRvIGFsc28gdmlldyB0aGUgc3VtbWFyeSBmb3IKK2lnbm9yZWQgc3VibW9kdWxlcyB5b3UgY2FuIGVpdGhlciB1c2UgdGhlIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgY29tbWFuZAorbGluZSBvcHRpb24gb3IgdGhlICdnaXQgc3VibW9kdWxlIHN1bW1hcnknIGNvbW1hbmQsIHdoaWNoIHNob3dzIGEgc2ltaWxhcgorb3V0cHV0IGJ1dCBkb2VzIG5vdCBob25vciB0aGVzZSBzZXR0aW5ncy4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdGlnbm9yZVs1XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXN0cmlwc3BhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3RyaXBzcGFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQzOGY3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN0cmlwc3BhY2UudHh0CkBAIC0wLDAgKzEsOTQgQEAKK2dpdC1zdHJpcHNwYWNlKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3RyaXBzcGFjZSAtIFJlbW92ZSB1bm5lY2Vzc2FyeSB3aGl0ZXNwYWNlCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHN0cmlwc3BhY2UnIFstcyB8IC0tc3RyaXAtY29tbWVudHNdCisnZ2l0IHN0cmlwc3BhY2UnIFstYyB8IC0tY29tbWVudC1saW5lc10KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1JlYWQgdGV4dCwgc3VjaCBhcyBjb21taXQgbWVzc2FnZXMsIG5vdGVzLCB0YWdzIGFuZCBicmFuY2gKK2Rlc2NyaXB0aW9ucywgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQgYW5kIGNsZWFuIGl0IGluIHRoZSBtYW5uZXIKK3VzZWQgYnkgR2l0LgorCitXaXRoIG5vIGFyZ3VtZW50cywgdGhpcyB3aWxsOgorCistIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIGxpbmVzCistIGNvbGxhcHNlIG11bHRpcGxlIGNvbnNlY3V0aXZlIGVtcHR5IGxpbmVzIGludG8gb25lIGVtcHR5IGxpbmUKKy0gcmVtb3ZlIGVtcHR5IGxpbmVzIGZyb20gdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnB1dAorLSBhZGQgYSBtaXNzaW5nICdcbicgdG8gdGhlIGxhc3QgbGluZSBpZiBuZWNlc3NhcnkuCisKK0luIHRoZSBjYXNlIHdoZXJlIHRoZSBpbnB1dCBjb25zaXN0cyBlbnRpcmVseSBvZiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIG5vCitvdXRwdXQgd2lsbCBiZSBwcm9kdWNlZC4KKworKk5PVEUqOiBUaGlzIGlzIGludGVuZGVkIGZvciBjbGVhbmluZyBtZXRhZGF0YSwgcHJlZmVyIHRoZSBgLS13aGl0ZXNwYWNlPWZpeGAKK21vZGUgb2YgbGlua2dpdDpnaXQtYXBwbHlbMV0gZm9yIGNvcnJlY3Rpbmcgd2hpdGVzcGFjZSBvZiBwYXRjaGVzIG9yIGZpbGVzIGluCit0aGUgcmVwb3NpdG9yeS4KKworT1BUSU9OUworLS0tLS0tLQorLXM6OgorLS1zdHJpcC1jb21tZW50czo6CisJU2tpcCBhbmQgcmVtb3ZlIGFsbCBsaW5lcyBzdGFydGluZyB3aXRoIGNvbW1lbnQgY2hhcmFjdGVyIChkZWZhdWx0ICcjJykuCisKKy1jOjoKKy0tY29tbWVudC1saW5lczo6CisJUHJlcGVuZCBjb21tZW50IGNoYXJhY3RlciBhbmQgYmxhbmsgdG8gZWFjaCBsaW5lLiBMaW5lcyB3aWxsIGF1dG9tYXRpY2FsbHkKKwliZSB0ZXJtaW5hdGVkIHdpdGggYSBuZXdsaW5lLiBPbiBlbXB0eSBsaW5lcywgb25seSB0aGUgY29tbWVudCBjaGFyYWN0ZXIKKwl3aWxsIGJlIHByZXBlbmRlZC4KKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK0dpdmVuIHRoZSBmb2xsb3dpbmcgbm9pc3kgaW5wdXQgd2l0aCAnJCcgaW5kaWNhdGluZyB0aGUgZW5kIG9mIGEgbGluZToKKworLS0tLS0tLS0tCit8QSBicmllZiBpbnRyb2R1Y3Rpb24gICAkCit8ICAgJAorfCQKK3xBIG5ldyBwYXJhZ3JhcGgkCit8IyB3aXRoIGEgY29tbWVudGVkLW91dCBsaW5lICAgICQKK3xleHBsYWluaW5nIGxvdHMgb2Ygc3R1ZmYuJAorfCQKK3wjIEFuIG9sZCBwYXJhZ3JhcGgsIGFsc28gY29tbWVudGVkLW91dC4gJAorfCAgICAgICQKK3xUaGUgZW5kLiQKK3wgICQKKy0tLS0tLS0tLQorCitVc2UgJ2dpdCBzdHJpcHNwYWNlJyB3aXRoIG5vIGFyZ3VtZW50cyB0byBvYnRhaW46CisKKy0tLS0tLS0tLQorfEEgYnJpZWYgaW50cm9kdWN0aW9uJAorfCQKK3xBIG5ldyBwYXJhZ3JhcGgkCit8IyB3aXRoIGEgY29tbWVudGVkLW91dCBsaW5lJAorfGV4cGxhaW5pbmcgbG90cyBvZiBzdHVmZi4kCit8JAorfCMgQW4gb2xkIHBhcmFncmFwaCwgYWxzbyBjb21tZW50ZWQtb3V0LiQKK3wkCit8VGhlIGVuZC4kCistLS0tLS0tLS0KKworVXNlICdnaXQgc3RyaXBzcGFjZSAtLXN0cmlwLWNvbW1lbnRzJyB0byBvYnRhaW46CisKKy0tLS0tLS0tLQorfEEgYnJpZWYgaW50cm9kdWN0aW9uJAorfCQKK3xBIG5ldyBwYXJhZ3JhcGgkCit8ZXhwbGFpbmluZyBsb3RzIG9mIHN0dWZmLiQKK3wkCit8VGhlIGVuZC4kCistLS0tLS0tLS0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdWJtb2R1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTc2ODdlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3VibW9kdWxlLnR4dApAQCAtMCwwICsxLDM5MyBAQAorZ2l0LXN1Ym1vZHVsZSgxKQorPT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3VibW9kdWxlIC0gSW5pdGlhbGl6ZSwgdXBkYXRlIG9yIGluc3BlY3Qgc3VibW9kdWxlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBhZGQgWy1iIDxicmFuY2g+XSBbLWZ8LS1mb3JjZV0gWy0tbmFtZSA8bmFtZT5dCisJICAgICAgWy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pl0gWy0tZGVwdGggPGRlcHRoPl0gWy0tXSA8cmVwb3NpdG9yeT4gWzxwYXRoPl0KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3RhdHVzIFstLWNhY2hlZF0gWy0tcmVjdXJzaXZlXSBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGluaXQgWy0tXSBbPHBhdGg+Li4uXQorJ2dpdCBzdWJtb2R1bGUnIFstLXF1aWV0XSBkZWluaXQgWy1mfC0tZm9yY2VdIFstLV0gPHBhdGg+Li4uCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIHVwZGF0ZSBbLS1pbml0XSBbLS1yZW1vdGVdIFstTnwtLW5vLWZldGNoXQorCSAgICAgIFstZnwtLWZvcmNlXSBbLS1yZWJhc2V8LS1tZXJnZV0gWy0tcmVmZXJlbmNlIDxyZXBvc2l0b3J5Pl0KKwkgICAgICBbLS1kZXB0aCA8ZGVwdGg+XSBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3VtbWFyeSBbLS1jYWNoZWR8LS1maWxlc10gWygtbnwtLXN1bW1hcnktbGltaXQpIDxuPl0KKwkgICAgICBbY29tbWl0XSBbLS1dIFs8cGF0aD4uLi5dCisnZ2l0IHN1Ym1vZHVsZScgWy0tcXVpZXRdIGZvcmVhY2ggWy0tcmVjdXJzaXZlXSA8Y29tbWFuZD4KKydnaXQgc3VibW9kdWxlJyBbLS1xdWlldF0gc3luYyBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0luc3BlY3RzLCB1cGRhdGVzIGFuZCBtYW5hZ2VzIHN1Ym1vZHVsZXMuCisKK0Egc3VibW9kdWxlIGFsbG93cyB5b3UgdG8ga2VlcCBhbm90aGVyIEdpdCByZXBvc2l0b3J5IGluIGEgc3ViZGlyZWN0b3J5CitvZiB5b3VyIHJlcG9zaXRvcnkuIFRoZSBvdGhlciByZXBvc2l0b3J5IGhhcyBpdHMgb3duIGhpc3RvcnksIHdoaWNoIGRvZXMgbm90CitpbnRlcmZlcmUgd2l0aCB0aGUgaGlzdG9yeSBvZiB0aGUgY3VycmVudCByZXBvc2l0b3J5LiBUaGlzIGNhbiBiZSB1c2VkIHRvCitoYXZlIGV4dGVybmFsIGRlcGVuZGVuY2llcyBzdWNoIGFzIHRoaXJkIHBhcnR5IGxpYnJhcmllcyBmb3IgZXhhbXBsZS4KKworV2hlbiBjbG9uaW5nIG9yIHB1bGxpbmcgYSByZXBvc2l0b3J5IGNvbnRhaW5pbmcgc3VibW9kdWxlcyBob3dldmVyLAordGhlc2Ugd2lsbCBub3QgYmUgY2hlY2tlZCBvdXQgYnkgZGVmYXVsdDsgdGhlICdpbml0JyBhbmQgJ3VwZGF0ZScKK3N1YmNvbW1hbmRzIHdpbGwgbWFpbnRhaW4gc3VibW9kdWxlcyBjaGVja2VkIG91dCBhbmQgYXQKK2FwcHJvcHJpYXRlIHJldmlzaW9uIGluIHlvdXIgd29ya2luZyB0cmVlLgorCitTdWJtb2R1bGVzIGFyZSBjb21wb3NlZCBmcm9tIGEgc28tY2FsbGVkIGBnaXRsaW5rYCB0cmVlIGVudHJ5CitpbiB0aGUgbWFpbiByZXBvc2l0b3J5IHRoYXQgcmVmZXJzIHRvIGEgcGFydGljdWxhciBjb21taXQgb2JqZWN0Cit3aXRoaW4gdGhlIGlubmVyIHJlcG9zaXRvcnkgdGhhdCBpcyBjb21wbGV0ZWx5IHNlcGFyYXRlLgorQSByZWNvcmQgaW4gdGhlIGAuZ2l0bW9kdWxlc2AgKHNlZSBsaW5rZ2l0OmdpdG1vZHVsZXNbNV0pIGZpbGUgYXQgdGhlCityb290IG9mIHRoZSBzb3VyY2UgdHJlZSBhc3NpZ25zIGEgbG9naWNhbCBuYW1lIHRvIHRoZSBzdWJtb2R1bGUgYW5kCitkZXNjcmliZXMgdGhlIGRlZmF1bHQgVVJMIHRoZSBzdWJtb2R1bGUgc2hhbGwgYmUgY2xvbmVkIGZyb20uCitUaGUgbG9naWNhbCBuYW1lIGNhbiBiZSB1c2VkIGZvciBvdmVycmlkaW5nIHRoaXMgVVJMIHdpdGhpbiB5b3VyCitsb2NhbCByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gKHNlZSAnc3VibW9kdWxlIGluaXQnKS4KKworU3VibW9kdWxlcyBhcmUgbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggcmVtb3Rlcywgd2hpY2ggYXJlIG90aGVyCityZXBvc2l0b3JpZXMgb2YgdGhlIHNhbWUgcHJvamVjdDsgc3VibW9kdWxlcyBhcmUgbWVhbnQgZm9yCitkaWZmZXJlbnQgcHJvamVjdHMgeW91IHdvdWxkIGxpa2UgdG8gbWFrZSBwYXJ0IG9mIHlvdXIgc291cmNlIHRyZWUsCit3aGlsZSB0aGUgaGlzdG9yeSBvZiB0aGUgdHdvIHByb2plY3RzIHN0aWxsIHN0YXlzIGNvbXBsZXRlbHkKK2luZGVwZW5kZW50IGFuZCB5b3UgY2Fubm90IG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhlIHN1Ym1vZHVsZQorZnJvbSB3aXRoaW4gdGhlIG1haW4gcHJvamVjdC4KK0lmIHlvdSB3YW50IHRvIG1lcmdlIHRoZSBwcm9qZWN0IGhpc3RvcmllcyBhbmQgd2FudCB0byB0cmVhdCB0aGUKK2FnZ3JlZ2F0ZWQgd2hvbGUgYXMgYSBzaW5nbGUgcHJvamVjdCBmcm9tIHRoZW4gb24sIHlvdSBtYXkgd2FudCB0bworYWRkIGEgcmVtb3RlIGZvciB0aGUgb3RoZXIgcHJvamVjdCBhbmQgdXNlIHRoZSAnc3VidHJlZScgbWVyZ2Ugc3RyYXRlZ3ksCitpbnN0ZWFkIG9mIHRyZWF0aW5nIHRoZSBvdGhlciBwcm9qZWN0IGFzIGEgc3VibW9kdWxlLiBEaXJlY3RvcmllcwordGhhdCBjb21lIGZyb20gYm90aCBwcm9qZWN0cyBjYW4gYmUgY2xvbmVkIGFuZCBjaGVja2VkIG91dCBhcyBhIHdob2xlCitpZiB5b3UgY2hvb3NlIHRvIGdvIHRoYXQgcm91dGUuCisKK0NPTU1BTkRTCistLS0tLS0tLQorYWRkOjoKKwlBZGQgdGhlIGdpdmVuIHJlcG9zaXRvcnkgYXMgYSBzdWJtb2R1bGUgYXQgdGhlIGdpdmVuIHBhdGgKKwl0byB0aGUgY2hhbmdlc2V0IHRvIGJlIGNvbW1pdHRlZCBuZXh0IHRvIHRoZSBjdXJyZW50CisJcHJvamVjdDogdGhlIGN1cnJlbnQgcHJvamVjdCBpcyB0ZXJtZWQgdGhlICJzdXBlcnByb2plY3QiLgorKworVGhpcyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQ6IDxyZXBvc2l0b3J5Pi4gVGhlIG9wdGlvbmFsCithcmd1bWVudCA8cGF0aD4gaXMgdGhlIHJlbGF0aXZlIGxvY2F0aW9uIGZvciB0aGUgY2xvbmVkIHN1Ym1vZHVsZQordG8gZXhpc3QgaW4gdGhlIHN1cGVycHJvamVjdC4gSWYgPHBhdGg+IGlzIG5vdCBnaXZlbiwgdGhlCisiaHVtYW5pc2giIHBhcnQgb2YgdGhlIHNvdXJjZSByZXBvc2l0b3J5IGlzIHVzZWQgKCJyZXBvIiBmb3IKKyIvcGF0aC90by9yZXBvLmdpdCIgYW5kICJmb28iIGZvciAiaG9zdC54ejpmb28vLmdpdCIpLgorVGhlIDxwYXRoPiBpcyBhbHNvIHVzZWQgYXMgdGhlIHN1Ym1vZHVsZSdzIGxvZ2ljYWwgbmFtZSBpbiBpdHMKK2NvbmZpZ3VyYXRpb24gZW50cmllcyB1bmxlc3MgYC0tbmFtZWAgaXMgdXNlZCB0byBzcGVjaWZ5IGEgbG9naWNhbCBuYW1lLgorKworPHJlcG9zaXRvcnk+IGlzIHRoZSBVUkwgb2YgdGhlIG5ldyBzdWJtb2R1bGUncyBvcmlnaW4gcmVwb3NpdG9yeS4KK1RoaXMgbWF5IGJlIGVpdGhlciBhbiBhYnNvbHV0ZSBVUkwsIG9yIChpZiBpdCBiZWdpbnMgd2l0aCAuLworb3IgLi4vKSwgdGhlIGxvY2F0aW9uIHJlbGF0aXZlIHRvIHRoZSBzdXBlcnByb2plY3QncyBvcmlnaW4KK3JlcG9zaXRvcnkgKFBsZWFzZSBub3RlIHRoYXQgdG8gc3BlY2lmeSBhIHJlcG9zaXRvcnkgJ2Zvby5naXQnCit3aGljaCBpcyBsb2NhdGVkIHJpZ2h0IG5leHQgdG8gYSBzdXBlcnByb2plY3QgJ2Jhci5naXQnLCB5b3UnbGwKK2hhdmUgdG8gdXNlICcuLi9mb28uZ2l0JyBpbnN0ZWFkIG9mICcuL2Zvby5naXQnIC0gYXMgb25lIG1pZ2h0IGV4cGVjdAord2hlbiBmb2xsb3dpbmcgdGhlIHJ1bGVzIGZvciByZWxhdGl2ZSBVUkxzIC0gYmVjYXVzZSB0aGUgZXZhbHVhdGlvbgorb2YgcmVsYXRpdmUgVVJMcyBpbiBHaXQgaXMgaWRlbnRpY2FsIHRvIHRoYXQgb2YgcmVsYXRpdmUgZGlyZWN0b3JpZXMpLgorSWYgdGhlIHN1cGVycHJvamVjdCBkb2Vzbid0IGhhdmUgYW4gb3JpZ2luIGNvbmZpZ3VyZWQKK3RoZSBzdXBlcnByb2plY3QgaXMgaXRzIG93biBhdXRob3JpdGF0aXZlIHVwc3RyZWFtIGFuZCB0aGUgY3VycmVudAord29ya2luZyBkaXJlY3RvcnkgaXMgdXNlZCBpbnN0ZWFkLgorKworPHBhdGg+IGlzIHRoZSByZWxhdGl2ZSBsb2NhdGlvbiBmb3IgdGhlIGNsb25lZCBzdWJtb2R1bGUgdG8KK2V4aXN0IGluIHRoZSBzdXBlcnByb2plY3QuIElmIDxwYXRoPiBkb2VzIG5vdCBleGlzdCwgdGhlbiB0aGUKK3N1Ym1vZHVsZSBpcyBjcmVhdGVkIGJ5IGNsb25pbmcgZnJvbSB0aGUgbmFtZWQgVVJMLiBJZiA8cGF0aD4gZG9lcworZXhpc3QgYW5kIGlzIGFscmVhZHkgYSB2YWxpZCBHaXQgcmVwb3NpdG9yeSwgdGhlbiB0aGlzIGlzIGFkZGVkCit0byB0aGUgY2hhbmdlc2V0IHdpdGhvdXQgY2xvbmluZy4gVGhpcyBzZWNvbmQgZm9ybSBpcyBwcm92aWRlZAordG8gZWFzZSBjcmVhdGluZyBhIG5ldyBzdWJtb2R1bGUgZnJvbSBzY3JhdGNoLCBhbmQgcHJlc3VtZXMKK3RoZSB1c2VyIHdpbGwgbGF0ZXIgcHVzaCB0aGUgc3VibW9kdWxlIHRvIHRoZSBnaXZlbiBVUkwuCisrCitJbiBlaXRoZXIgY2FzZSwgdGhlIGdpdmVuIFVSTCBpcyByZWNvcmRlZCBpbnRvIC5naXRtb2R1bGVzIGZvcgordXNlIGJ5IHN1YnNlcXVlbnQgdXNlcnMgY2xvbmluZyB0aGUgc3VwZXJwcm9qZWN0LiBJZiB0aGUgVVJMIGlzCitnaXZlbiByZWxhdGl2ZSB0byB0aGUgc3VwZXJwcm9qZWN0J3MgcmVwb3NpdG9yeSwgdGhlIHByZXN1bXB0aW9uCitpcyB0aGUgc3VwZXJwcm9qZWN0IGFuZCBzdWJtb2R1bGUgcmVwb3NpdG9yaWVzIHdpbGwgYmUga2VwdAordG9nZXRoZXIgaW4gdGhlIHNhbWUgcmVsYXRpdmUgbG9jYXRpb24sIGFuZCBvbmx5IHRoZQorc3VwZXJwcm9qZWN0J3MgVVJMIG5lZWRzIHRvIGJlIHByb3ZpZGVkOiBnaXQtc3VibW9kdWxlIHdpbGwgY29ycmVjdGx5Citsb2NhdGUgdGhlIHN1Ym1vZHVsZSB1c2luZyB0aGUgcmVsYXRpdmUgVVJMIGluIC5naXRtb2R1bGVzLgorCitzdGF0dXM6OgorCVNob3cgdGhlIHN0YXR1cyBvZiB0aGUgc3VibW9kdWxlcy4gVGhpcyB3aWxsIHByaW50IHRoZSBTSEEtMSBvZiB0aGUKKwljdXJyZW50bHkgY2hlY2tlZCBvdXQgY29tbWl0IGZvciBlYWNoIHN1Ym1vZHVsZSwgYWxvbmcgd2l0aCB0aGUKKwlzdWJtb2R1bGUgcGF0aCBhbmQgdGhlIG91dHB1dCBvZiAnZ2l0IGRlc2NyaWJlJyBmb3IgdGhlCisJU0hBLTEuIEVhY2ggU0hBLTEgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIGAtYCBpZiB0aGUgc3VibW9kdWxlIGlzIG5vdAorCWluaXRpYWxpemVkLCBgK2AgaWYgdGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBzdWJtb2R1bGUgY29tbWl0CisJZG9lcyBub3QgbWF0Y2ggdGhlIFNIQS0xIGZvdW5kIGluIHRoZSBpbmRleCBvZiB0aGUgY29udGFpbmluZworCXJlcG9zaXRvcnkgYW5kIGBVYCBpZiB0aGUgc3VibW9kdWxlIGhhcyBtZXJnZSBjb25mbGljdHMuCisrCitJZiBgLS1yZWN1cnNpdmVgIGlzIHNwZWNpZmllZCwgdGhpcyBjb21tYW5kIHdpbGwgcmVjdXJzZSBpbnRvIG5lc3RlZAorc3VibW9kdWxlcywgYW5kIHNob3cgdGhlaXIgc3RhdHVzIGFzIHdlbGwuCisrCitJZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBjaGFuZ2VzIG9mIHRoZSBjdXJyZW50bHkgaW5pdGlhbGl6ZWQKK3N1Ym1vZHVsZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIGluZGV4IG9yIHRoZSBIRUFELAorbGlua2dpdDpnaXQtc3RhdHVzWzFdIGFuZCBsaW5rZ2l0OmdpdC1kaWZmWzFdIHdpbGwgcHJvdmlkZSB0aGF0IGluZm9ybWF0aW9uCit0b28gKGFuZCBjYW4gYWxzbyByZXBvcnQgY2hhbmdlcyB0byBhIHN1Ym1vZHVsZSdzIHdvcmsgdHJlZSkuCisKK2luaXQ6OgorCUluaXRpYWxpemUgdGhlIHN1Ym1vZHVsZXMgcmVjb3JkZWQgaW4gdGhlIGluZGV4ICh3aGljaCB3ZXJlCisJYWRkZWQgYW5kIGNvbW1pdHRlZCBlbHNld2hlcmUpIGJ5IGNvcHlpbmcgc3VibW9kdWxlCisJbmFtZXMgYW5kIHVybHMgZnJvbSAuZ2l0bW9kdWxlcyB0byAuZ2l0L2NvbmZpZy4KKwlPcHRpb25hbCA8cGF0aD4gYXJndW1lbnRzIGxpbWl0IHdoaWNoIHN1Ym1vZHVsZXMgd2lsbCBiZSBpbml0aWFsaXplZC4KKwlJdCB3aWxsIGFsc28gY29weSB0aGUgdmFsdWUgb2YgYHN1Ym1vZHVsZS4kbmFtZS51cGRhdGVgIGludG8KKwkuZ2l0L2NvbmZpZy4KKwlUaGUga2V5IHVzZWQgaW4gLmdpdC9jb25maWcgaXMgYHN1Ym1vZHVsZS4kbmFtZS51cmxgLgorCVRoaXMgY29tbWFuZCBkb2VzIG5vdCBhbHRlciBleGlzdGluZyBpbmZvcm1hdGlvbiBpbiAuZ2l0L2NvbmZpZy4KKwlZb3UgY2FuIHRoZW4gY3VzdG9taXplIHRoZSBzdWJtb2R1bGUgY2xvbmUgVVJMcyBpbiAuZ2l0L2NvbmZpZworCWZvciB5b3VyIGxvY2FsIHNldHVwIGFuZCBwcm9jZWVkIHRvIGBnaXQgc3VibW9kdWxlIHVwZGF0ZWA7CisJeW91IGNhbiBhbHNvIGp1c3QgdXNlIGBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXRgIHdpdGhvdXQKKwl0aGUgZXhwbGljaXQgJ2luaXQnIHN0ZXAgaWYgeW91IGRvIG5vdCBpbnRlbmQgdG8gY3VzdG9taXplCisJYW55IHN1Ym1vZHVsZSBsb2NhdGlvbnMuCisKK2RlaW5pdDo6CisJVW5yZWdpc3RlciB0aGUgZ2l2ZW4gc3VibW9kdWxlcywgaS5lLiByZW1vdmUgdGhlIHdob2xlCisJYHN1Ym1vZHVsZS4kbmFtZWAgc2VjdGlvbiBmcm9tIC5naXQvY29uZmlnIHRvZ2V0aGVyIHdpdGggdGhlaXIgd29yaworCXRyZWUuIEZ1cnRoZXIgY2FsbHMgdG8gYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCwgYGdpdCBzdWJtb2R1bGUgZm9yZWFjaGAKKwlhbmQgYGdpdCBzdWJtb2R1bGUgc3luY2Agd2lsbCBza2lwIGFueSB1bnJlZ2lzdGVyZWQgc3VibW9kdWxlcyB1bnRpbAorCXRoZXkgYXJlIGluaXRpYWxpemVkIGFnYWluLCBzbyB1c2UgdGhpcyBjb21tYW5kIGlmIHlvdSBkb24ndCB3YW50IHRvCisJaGF2ZSBhIGxvY2FsIGNoZWNrb3V0IG9mIHRoZSBzdWJtb2R1bGUgaW4geW91ciB3b3JrIHRyZWUgYW55bW9yZS4gSWYKKwl5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGEgc3VibW9kdWxlIGZyb20gdGhlIHJlcG9zaXRvcnkgYW5kIGNvbW1pdAorCXRoYXQgdXNlIGxpbmtnaXQ6Z2l0LXJtWzFdIGluc3RlYWQuCisrCitJZiBgLS1mb3JjZWAgaXMgc3BlY2lmaWVkLCB0aGUgc3VibW9kdWxlJ3Mgd29yayB0cmVlIHdpbGwgYmUgcmVtb3ZlZCBldmVuIGlmCitpdCBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zLgorCit1cGRhdGU6OgorKworLS0KK1VwZGF0ZSB0aGUgcmVnaXN0ZXJlZCBzdWJtb2R1bGVzIHRvIG1hdGNoIHdoYXQgdGhlIHN1cGVycHJvamVjdAorZXhwZWN0cyBieSBjbG9uaW5nIG1pc3Npbmcgc3VibW9kdWxlcyBhbmQgdXBkYXRpbmcgdGhlIHdvcmtpbmcgdHJlZSBvZgordGhlIHN1Ym1vZHVsZXMuIFRoZSAidXBkYXRpbmciIGNhbiBiZSBkb25lIGluIHNldmVyYWwgd2F5cyBkZXBlbmRpbmcKK29uIGNvbW1hbmQgbGluZSBvcHRpb25zIGFuZCB0aGUgdmFsdWUgb2YgYHN1Ym1vZHVsZS48bmFtZT4udXBkYXRlYAorY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gU3VwcG9ydGVkIHVwZGF0ZSBwcm9jZWR1cmVzIGFyZToKKworCWNoZWNrb3V0OzsgdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IHdpbGwgYmUKKwkgICAgY2hlY2tlZCBvdXQgaW4gdGhlIHN1Ym1vZHVsZSBvbiBhIGRldGFjaGVkIEhFQUQuIFRoaXMgaXMKKwkgICAgZG9uZSB3aGVuIGAtLWNoZWNrb3V0YCBvcHRpb24gaXMgZ2l2ZW4sIG9yIG5vIG9wdGlvbiBpcworCSAgICBnaXZlbiwgYW5kIGBzdWJtb2R1bGUuPG5hbWU+LnVwZGF0ZWAgaXMgdW5zZXQsIG9yIGlmIGl0IGlzCisJICAgIHNldCB0byAnY2hlY2tvdXQnLgorKworSWYgYC0tZm9yY2VgIGlzIHNwZWNpZmllZCwgdGhlIHN1Ym1vZHVsZSB3aWxsIGJlIGNoZWNrZWQgb3V0ICh1c2luZworYGdpdCBjaGVja291dCAtLWZvcmNlYCBpZiBhcHByb3ByaWF0ZSksIGV2ZW4gaWYgdGhlIGNvbW1pdCBzcGVjaWZpZWQKK2luIHRoZSBpbmRleCBvZiB0aGUgY29udGFpbmluZyByZXBvc2l0b3J5IGFscmVhZHkgbWF0Y2hlcyB0aGUgY29tbWl0CitjaGVja2VkIG91dCBpbiB0aGUgc3VibW9kdWxlLgorCisJcmViYXNlOzsgdGhlIGN1cnJlbnQgYnJhbmNoIG9mIHRoZSBzdWJtb2R1bGUgd2lsbCBiZSByZWJhc2VkCisJICAgIG9udG8gdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0LiBUaGlzIGlzIGRvbmUKKwkgICAgd2hlbiBgLS1yZWJhc2VgIG9wdGlvbiBpcyBnaXZlbiwgb3Igbm8gb3B0aW9uIGlzIGdpdmVuLCBhbmQKKwkgICAgYHN1Ym1vZHVsZS48bmFtZT4udXBkYXRlYCBpcyBzZXQgdG8gJ3JlYmFzZScuCisKKwltZXJnZTs7IHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCB3aWxsIGJlIG1lcmdlZAorCSAgICBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaCBpbiB0aGUgc3VibW9kdWxlLiBUaGlzIGlzIGRvbmUKKwkgICAgd2hlbiBgLS1tZXJnZWAgb3B0aW9uIGlzIGdpdmVuLCBvciBubyBvcHRpb24gaXMgZ2l2ZW4sIGFuZAorCSAgICBgc3VibW9kdWxlLjxuYW1lPi51cGRhdGVgIGlzIHNldCB0byAnbWVyZ2UnLgorCisJY3VzdG9tIGNvbW1hbmQ7OyBhcmJpdHJhcnkgc2hlbGwgY29tbWFuZCB0aGF0IHRha2VzIGEgc2luZ2xlCisJICAgIGFyZ3VtZW50ICh0aGUgc2hhMSBvZiB0aGUgY29tbWl0IHJlY29yZGVkIGluIHRoZQorCSAgICBzdXBlcnByb2plY3QpIGlzIGV4ZWN1dGVkLiBUaGlzIGlzIGRvbmUgd2hlbiBubyBvcHRpb24gaXMKKwkgICAgZ2l2ZW4sIGFuZCBgc3VibW9kdWxlLjxuYW1lPi51cGRhdGVgIGhhcyB0aGUgZm9ybSBvZgorCSAgICAnIWNvbW1hbmQnLgorCitXaGVuIG5vIG9wdGlvbiBpcyBnaXZlbiBhbmQgYHN1Ym1vZHVsZS48bmFtZT4udXBkYXRlYCBpcyBzZXQgdG8gJ25vbmUnLAordGhlIHN1Ym1vZHVsZSBpcyBub3QgdXBkYXRlZC4KKworSWYgdGhlIHN1Ym1vZHVsZSBpcyBub3QgeWV0IGluaXRpYWxpemVkLCBhbmQgeW91IGp1c3Qgd2FudCB0byB1c2UgdGhlCitzZXR0aW5nIGFzIHN0b3JlZCBpbiAuZ2l0bW9kdWxlcywgeW91IGNhbiBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemUgdGhlCitzdWJtb2R1bGUgd2l0aCB0aGUgYC0taW5pdGAgb3B0aW9uLgorCitJZiBgLS1yZWN1cnNpdmVgIGlzIHNwZWNpZmllZCwgdGhpcyBjb21tYW5kIHdpbGwgcmVjdXJzZSBpbnRvIHRoZQorcmVnaXN0ZXJlZCBzdWJtb2R1bGVzLCBhbmQgdXBkYXRlIGFueSBuZXN0ZWQgc3VibW9kdWxlcyB3aXRoaW4uCistLQorc3VtbWFyeTo6CisJU2hvdyBjb21taXQgc3VtbWFyeSBiZXR3ZWVuIHRoZSBnaXZlbiBjb21taXQgKGRlZmF1bHRzIHRvIEhFQUQpIGFuZAorCXdvcmtpbmcgdHJlZS9pbmRleC4gRm9yIGEgc3VibW9kdWxlIGluIHF1ZXN0aW9uLCBhIHNlcmllcyBvZiBjb21taXRzCisJaW4gdGhlIHN1Ym1vZHVsZSBiZXR3ZWVuIHRoZSBnaXZlbiBzdXBlciBwcm9qZWN0IGNvbW1pdCBhbmQgdGhlCisJaW5kZXggb3Igd29ya2luZyB0cmVlIChzd2l0Y2hlZCBieSBgLS1jYWNoZWRgKSBhcmUgc2hvd24uIElmIHRoZSBvcHRpb24KKwlgLS1maWxlc2AgaXMgZ2l2ZW4sIHNob3cgdGhlIHNlcmllcyBvZiBjb21taXRzIGluIHRoZSBzdWJtb2R1bGUgYmV0d2VlbgorCXRoZSBpbmRleCBvZiB0aGUgc3VwZXIgcHJvamVjdCBhbmQgdGhlIHdvcmtpbmcgdHJlZSBvZiB0aGUgc3VibW9kdWxlCisJKHRoaXMgb3B0aW9uIGRvZXNuJ3QgYWxsb3cgdG8gdXNlIHRoZSBgLS1jYWNoZWRgIG9wdGlvbiBvciB0byBwcm92aWRlIGFuCisJZXhwbGljaXQgY29tbWl0KS4KKysKK1VzaW5nIHRoZSBgLS1zdWJtb2R1bGU9bG9nYCBvcHRpb24gd2l0aCBsaW5rZ2l0OmdpdC1kaWZmWzFdIHdpbGwgcHJvdmlkZSB0aGF0CitpbmZvcm1hdGlvbiB0b28uCisKK2ZvcmVhY2g6OgorCUV2YWx1YXRlcyBhbiBhcmJpdHJhcnkgc2hlbGwgY29tbWFuZCBpbiBlYWNoIGNoZWNrZWQgb3V0IHN1Ym1vZHVsZS4KKwlUaGUgY29tbWFuZCBoYXMgYWNjZXNzIHRvIHRoZSB2YXJpYWJsZXMgJG5hbWUsICRwYXRoLCAkc2hhMSBhbmQKKwkkdG9wbGV2ZWw6CisJJG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIHJlbGV2YW50IHN1Ym1vZHVsZSBzZWN0aW9uIGluIC5naXRtb2R1bGVzLAorCSRwYXRoIGlzIHRoZSBuYW1lIG9mIHRoZSBzdWJtb2R1bGUgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZQorCXN1cGVycHJvamVjdCwgJHNoYTEgaXMgdGhlIGNvbW1pdCBhcyByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0LAorCWFuZCAkdG9wbGV2ZWwgaXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHRvcC1sZXZlbCBvZiB0aGUgc3VwZXJwcm9qZWN0LgorCUFueSBzdWJtb2R1bGVzIGRlZmluZWQgaW4gdGhlIHN1cGVycHJvamVjdCBidXQgbm90IGNoZWNrZWQgb3V0IGFyZQorCWlnbm9yZWQgYnkgdGhpcyBjb21tYW5kLiBVbmxlc3MgZ2l2ZW4gYC0tcXVpZXRgLCBmb3JlYWNoIHByaW50cyB0aGUgbmFtZQorCW9mIGVhY2ggc3VibW9kdWxlIGJlZm9yZSBldmFsdWF0aW5nIHRoZSBjb21tYW5kLgorCUlmIGAtLXJlY3Vyc2l2ZWAgaXMgZ2l2ZW4sIHN1Ym1vZHVsZXMgYXJlIHRyYXZlcnNlZCByZWN1cnNpdmVseSAoaS5lLgorCXRoZSBnaXZlbiBzaGVsbCBjb21tYW5kIGlzIGV2YWx1YXRlZCBpbiBuZXN0ZWQgc3VibW9kdWxlcyBhcyB3ZWxsKS4KKwlBIG5vbi16ZXJvIHJldHVybiBmcm9tIHRoZSBjb21tYW5kIGluIGFueSBzdWJtb2R1bGUgY2F1c2VzCisJdGhlIHByb2Nlc3NpbmcgdG8gdGVybWluYXRlLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFkZGluZyAnfHwgOicKKwl0byB0aGUgZW5kIG9mIHRoZSBjb21tYW5kLgorKworQXMgYW4gZXhhbXBsZSwgK2dpdCBzdWJtb2R1bGUgZm9yZWFjaCBcJ2VjaG8gJHBhdGgge2JhY2t0aWNrfWdpdAorcmV2LXBhcnNlIEhFQUR7YmFja3RpY2t9Jysgd2lsbCBzaG93IHRoZSBwYXRoIGFuZCBjdXJyZW50bHkgY2hlY2tlZCBvdXQKK2NvbW1pdCBmb3IgZWFjaCBzdWJtb2R1bGUuCisKK3N5bmM6OgorCVN5bmNocm9uaXplcyBzdWJtb2R1bGVzJyByZW1vdGUgVVJMIGNvbmZpZ3VyYXRpb24gc2V0dGluZworCXRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgaW4gLmdpdG1vZHVsZXMuIEl0IHdpbGwgb25seSBhZmZlY3QgdGhvc2UKKwlzdWJtb2R1bGVzIHdoaWNoIGFscmVhZHkgaGF2ZSBhIFVSTCBlbnRyeSBpbiAuZ2l0L2NvbmZpZyAodGhhdCBpcyB0aGUKKwljYXNlIHdoZW4gdGhleSBhcmUgaW5pdGlhbGl6ZWQgb3IgZnJlc2hseSBhZGRlZCkuIFRoaXMgaXMgdXNlZnVsIHdoZW4KKwlzdWJtb2R1bGUgVVJMcyBjaGFuZ2UgdXBzdHJlYW0gYW5kIHlvdSBuZWVkIHRvIHVwZGF0ZSB5b3VyIGxvY2FsCisJcmVwb3NpdG9yaWVzIGFjY29yZGluZ2x5LgorKworImdpdCBzdWJtb2R1bGUgc3luYyIgc3luY2hyb25pemVzIGFsbCBzdWJtb2R1bGVzIHdoaWxlCisiZ2l0IHN1Ym1vZHVsZSBzeW5jIFwtLSBBIiBzeW5jaHJvbml6ZXMgc3VibW9kdWxlICJBIiBvbmx5LgorCitPUFRJT05TCistLS0tLS0tCistcTo6CistLXF1aWV0OjoKKwlPbmx5IHByaW50IGVycm9yIG1lc3NhZ2VzLgorCistYjo6CistLWJyYW5jaDo6CisJQnJhbmNoIG9mIHJlcG9zaXRvcnkgdG8gYWRkIGFzIHN1Ym1vZHVsZS4KKwlUaGUgbmFtZSBvZiB0aGUgYnJhbmNoIGlzIHJlY29yZGVkIGFzIGBzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaGAgaW4KKwlgLmdpdG1vZHVsZXNgIGZvciBgdXBkYXRlIC0tcmVtb3RlYC4KKworLWY6OgorLS1mb3JjZTo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYWRkLCBkZWluaXQgYW5kIHVwZGF0ZSBjb21tYW5kcy4KKwlXaGVuIHJ1bm5pbmcgYWRkLCBhbGxvdyBhZGRpbmcgYW4gb3RoZXJ3aXNlIGlnbm9yZWQgc3VibW9kdWxlIHBhdGguCisJV2hlbiBydW5uaW5nIGRlaW5pdCB0aGUgc3VibW9kdWxlIHdvcmsgdHJlZXMgd2lsbCBiZSByZW1vdmVkIGV2ZW4gaWYKKwl0aGV5IGNvbnRhaW4gbG9jYWwgY2hhbmdlcy4KKwlXaGVuIHJ1bm5pbmcgdXBkYXRlIChvbmx5IGVmZmVjdGl2ZSB3aXRoIHRoZSBjaGVja291dCBwcm9jZWR1cmUpLAorCXRocm93IGF3YXkgbG9jYWwgY2hhbmdlcyBpbiBzdWJtb2R1bGVzIHdoZW4gc3dpdGNoaW5nIHRvIGEKKwlkaWZmZXJlbnQgY29tbWl0OyBhbmQgYWx3YXlzIHJ1biBhIGNoZWNrb3V0IG9wZXJhdGlvbiBpbiB0aGUKKwlzdWJtb2R1bGUsIGV2ZW4gaWYgdGhlIGNvbW1pdCBsaXN0ZWQgaW4gdGhlIGluZGV4IG9mIHRoZQorCWNvbnRhaW5pbmcgcmVwb3NpdG9yeSBtYXRjaGVzIHRoZSBjb21taXQgY2hlY2tlZCBvdXQgaW4gdGhlCisJc3VibW9kdWxlLgorCistLWNhY2hlZDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3Igc3RhdHVzIGFuZCBzdW1tYXJ5IGNvbW1hbmRzLiAgVGhlc2UKKwljb21tYW5kcyB0eXBpY2FsbHkgdXNlIHRoZSBjb21taXQgZm91bmQgaW4gdGhlIHN1Ym1vZHVsZSBIRUFELCBidXQKKwl3aXRoIHRoaXMgb3B0aW9uLCB0aGUgY29tbWl0IHN0b3JlZCBpbiB0aGUgaW5kZXggaXMgdXNlZCBpbnN0ZWFkLgorCistLWZpbGVzOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgc3VtbWFyeSBjb21tYW5kLiBUaGlzIGNvbW1hbmQKKwljb21wYXJlcyB0aGUgY29tbWl0IGluIHRoZSBpbmRleCB3aXRoIHRoYXQgaW4gdGhlIHN1Ym1vZHVsZSBIRUFECisJd2hlbiB0aGlzIG9wdGlvbiBpcyB1c2VkLgorCistbjo6CistLXN1bW1hcnktbGltaXQ6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBzdW1tYXJ5IGNvbW1hbmQuCisJTGltaXQgdGhlIHN1bW1hcnkgc2l6ZSAobnVtYmVyIG9mIGNvbW1pdHMgc2hvd24gaW4gdG90YWwpLgorCUdpdmluZyAwIHdpbGwgZGlzYWJsZSB0aGUgc3VtbWFyeTsgYSBuZWdhdGl2ZSBudW1iZXIgbWVhbnMgdW5saW1pdGVkCisJKHRoZSBkZWZhdWx0KS4gVGhpcyBsaW1pdCBvbmx5IGFwcGxpZXMgdG8gbW9kaWZpZWQgc3VibW9kdWxlcy4gVGhlCisJc2l6ZSBpcyBhbHdheXMgbGltaXRlZCB0byAxIGZvciBhZGRlZC9kZWxldGVkL3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZXMuCisKKy0tcmVtb3RlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuICBJbnN0ZWFkIG9mIHVzaW5nCisJdGhlIHN1cGVycHJvamVjdCdzIHJlY29yZGVkIFNIQS0xIHRvIHVwZGF0ZSB0aGUgc3VibW9kdWxlLCB1c2UgdGhlCisJc3RhdHVzIG9mIHRoZSBzdWJtb2R1bGUncyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLiAgVGhlIHJlbW90ZSB1c2VkCisJaXMgYnJhbmNoJ3MgcmVtb3RlIChgYnJhbmNoLjxuYW1lPi5yZW1vdGVgKSwgZGVmYXVsdGluZyB0byBgb3JpZ2luYC4KKwlUaGUgcmVtb3RlIGJyYW5jaCB1c2VkIGRlZmF1bHRzIHRvIGBtYXN0ZXJgLCBidXQgdGhlIGJyYW5jaCBuYW1lIG1heQorCWJlIG92ZXJyaWRkZW4gYnkgc2V0dGluZyB0aGUgYHN1Ym1vZHVsZS48bmFtZT4uYnJhbmNoYCBvcHRpb24gaW4KKwllaXRoZXIgYC5naXRtb2R1bGVzYCBvciBgLmdpdC9jb25maWdgICh3aXRoIGAuZ2l0L2NvbmZpZ2AgdGFraW5nCisJcHJlY2VkZW5jZSkuCisrCitUaGlzIHdvcmtzIGZvciBhbnkgb2YgdGhlIHN1cHBvcnRlZCB1cGRhdGUgcHJvY2VkdXJlcyAoYC0tY2hlY2tvdXRgLAorYC0tcmViYXNlYCwgZXRjLikuICBUaGUgb25seSBjaGFuZ2UgaXMgdGhlIHNvdXJjZSBvZiB0aGUgdGFyZ2V0IFNIQS0xLgorRm9yIGV4YW1wbGUsIGBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlIC0tbWVyZ2VgIHdpbGwgbWVyZ2UgdXBzdHJlYW0KK3N1Ym1vZHVsZSBjaGFuZ2VzIGludG8gdGhlIHN1Ym1vZHVsZXMsIHdoaWxlIGBzdWJtb2R1bGUgdXBkYXRlCistLW1lcmdlYCB3aWxsIG1lcmdlIHN1cGVycHJvamVjdCBnaXRsaW5rIGNoYW5nZXMgaW50byB0aGUgc3VibW9kdWxlcy4KKysKK0luIG9yZGVyIHRvIGVuc3VyZSBhIGN1cnJlbnQgdHJhY2tpbmcgYnJhbmNoIHN0YXRlLCBgdXBkYXRlIC0tcmVtb3RlYAorZmV0Y2hlcyB0aGUgc3VibW9kdWxlJ3MgcmVtb3RlIHJlcG9zaXRvcnkgYmVmb3JlIGNhbGN1bGF0aW5nIHRoZQorU0hBLTEuICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBmZXRjaCwgeW91IHNob3VsZCB1c2UgYHN1Ym1vZHVsZSB1cGRhdGUKKy0tcmVtb3RlIC0tbm8tZmV0Y2hgLgorKworVXNlIHRoaXMgb3B0aW9uIHRvIGludGVncmF0ZSBjaGFuZ2VzIGZyb20gdGhlIHVwc3RyZWFtIHN1YnByb2plY3Qgd2l0aAoreW91ciBzdWJtb2R1bGUncyBjdXJyZW50IEhFQUQuICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHJ1biBgZ2l0IHB1bGxgCitmcm9tIHRoZSBzdWJtb2R1bGUsIHdoaWNoIGlzIGVxdWl2YWxlbnQgZXhjZXB0IGZvciB0aGUgcmVtb3RlIGJyYW5jaAorbmFtZTogYHVwZGF0ZSAtLXJlbW90ZWAgdXNlcyB0aGUgZGVmYXVsdCB1cHN0cmVhbSByZXBvc2l0b3J5IGFuZAorYHN1Ym1vZHVsZS48bmFtZT4uYnJhbmNoYCwgd2hpbGUgYGdpdCBwdWxsYCB1c2VzIHRoZSBzdWJtb2R1bGUncworYGJyYW5jaC48bmFtZT4ubWVyZ2VgLiAgUHJlZmVyIGBzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaGAgaWYgeW91IHdhbnQKK3RvIGRpc3RyaWJ1dGUgdGhlIGRlZmF1bHQgdXBzdHJlYW0gYnJhbmNoIHdpdGggdGhlIHN1cGVycHJvamVjdCBhbmQKK2BicmFuY2guPG5hbWU+Lm1lcmdlYCBpZiB5b3Ugd2FudCBhIG1vcmUgbmF0aXZlIGZlZWwgd2hpbGUgd29ya2luZyBpbgordGhlIHN1Ym1vZHVsZSBpdHNlbGYuCisKKy1OOjoKKy0tbm8tZmV0Y2g6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KKwlEb24ndCBmZXRjaCBuZXcgb2JqZWN0cyBmcm9tIHRoZSByZW1vdGUgc2l0ZS4KKworLS1jaGVja291dDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCUNoZWNrb3V0IHRoZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCBvbiBhIGRldGFjaGVkIEhFQUQKKwlpbiB0aGUgc3VibW9kdWxlLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yLCB0aGUgbWFpbiB1c2Ugb2YKKwl0aGlzIG9wdGlvbiBpcyB0byBvdmVycmlkZSBgc3VibW9kdWxlLiRuYW1lLnVwZGF0ZWAgd2hlbiBzZXQgdG8KKwlhIHZhbHVlIG90aGVyIHRoYW4gYGNoZWNrb3V0YC4KKwlJZiB0aGUga2V5IGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBpcyBlaXRoZXIgbm90IGV4cGxpY2l0bHkgc2V0IG9yCisJc2V0IHRvIGBjaGVja291dGAsIHRoaXMgb3B0aW9uIGlzIGltcGxpY2l0LgorCistLW1lcmdlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciB0aGUgdXBkYXRlIGNvbW1hbmQuCisJTWVyZ2UgdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IGludG8gdGhlIGN1cnJlbnQgYnJhbmNoCisJb2YgdGhlIHN1Ym1vZHVsZS4gSWYgdGhpcyBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBzdWJtb2R1bGUncyBIRUFEIHdpbGwKKwlub3QgYmUgZGV0YWNoZWQuIElmIGEgbWVyZ2UgZmFpbHVyZSBwcmV2ZW50cyB0aGlzIHByb2Nlc3MsIHlvdSB3aWxsCisJaGF2ZSB0byByZXNvbHZlIHRoZSByZXN1bHRpbmcgY29uZmxpY3RzIHdpdGhpbiB0aGUgc3VibW9kdWxlIHdpdGggdGhlCisJdXN1YWwgY29uZmxpY3QgcmVzb2x1dGlvbiB0b29scy4KKwlJZiB0aGUga2V5IGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBpcyBzZXQgdG8gYG1lcmdlYCwgdGhpcyBvcHRpb24gaXMKKwlpbXBsaWNpdC4KKworLS1yZWJhc2U6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSB1cGRhdGUgY29tbWFuZC4KKwlSZWJhc2UgdGhlIGN1cnJlbnQgYnJhbmNoIG9udG8gdGhlIGNvbW1pdCByZWNvcmRlZCBpbiB0aGUKKwlzdXBlcnByb2plY3QuIElmIHRoaXMgb3B0aW9uIGlzIGdpdmVuLCB0aGUgc3VibW9kdWxlJ3MgSEVBRCB3aWxsIG5vdAorCWJlIGRldGFjaGVkLiBJZiBhIG1lcmdlIGZhaWx1cmUgcHJldmVudHMgdGhpcyBwcm9jZXNzLCB5b3Ugd2lsbCBoYXZlCisJdG8gcmVzb2x2ZSB0aGVzZSBmYWlsdXJlcyB3aXRoIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXS4KKwlJZiB0aGUga2V5IGBzdWJtb2R1bGUuJG5hbWUudXBkYXRlYCBpcyBzZXQgdG8gYHJlYmFzZWAsIHRoaXMgb3B0aW9uIGlzCisJaW1wbGljaXQuCisKKy0taW5pdDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHVwZGF0ZSBjb21tYW5kLgorCUluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMgZm9yIHdoaWNoICJnaXQgc3VibW9kdWxlIGluaXQiIGhhcyBub3QgYmVlbgorCWNhbGxlZCBzbyBmYXIgYmVmb3JlIHVwZGF0aW5nLgorCistLW5hbWU6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBhZGQgY29tbWFuZC4gSXQgc2V0cyB0aGUgc3VibW9kdWxlJ3MKKwluYW1lIHRvIHRoZSBnaXZlbiBzdHJpbmcgaW5zdGVhZCBvZiBkZWZhdWx0aW5nIHRvIGl0cyBwYXRoLiBUaGUgbmFtZQorCW11c3QgYmUgdmFsaWQgYXMgYSBkaXJlY3RvcnkgbmFtZSBhbmQgbWF5IG5vdCBlbmQgd2l0aCBhICcvJy4KKworLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBhZGQgYW5kIHVwZGF0ZSBjb21tYW5kcy4gIFRoZXNlCisJY29tbWFuZHMgc29tZXRpbWVzIG5lZWQgdG8gY2xvbmUgYSByZW1vdGUgcmVwb3NpdG9yeS4gSW4gdGhpcyBjYXNlLAorCXRoaXMgb3B0aW9uIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBjb21tYW5kLgorKworKk5PVEUqOiBEbyAqbm90KiB1c2UgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBoYXZlIHJlYWQgdGhlIG5vdGUKK2ZvciBsaW5rZ2l0OmdpdC1jbG9uZVsxXSdzIGAtLXJlZmVyZW5jZWAgYW5kIGAtLXNoYXJlZGAgb3B0aW9ucyBjYXJlZnVsbHkuCisKKy0tcmVjdXJzaXZlOjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBmb3JlYWNoLCB1cGRhdGUgYW5kIHN0YXR1cyBjb21tYW5kcy4KKwlUcmF2ZXJzZSBzdWJtb2R1bGVzIHJlY3Vyc2l2ZWx5LiBUaGUgb3BlcmF0aW9uIGlzIHBlcmZvcm1lZCBub3QKKwlvbmx5IGluIHRoZSBzdWJtb2R1bGVzIG9mIHRoZSBjdXJyZW50IHJlcG8sIGJ1dCBhbHNvCisJaW4gYW55IG5lc3RlZCBzdWJtb2R1bGVzIGluc2lkZSB0aG9zZSBzdWJtb2R1bGVzIChhbmQgc28gb24pLgorCistLWRlcHRoOjoKKwlUaGlzIG9wdGlvbiBpcyB2YWxpZCBmb3IgYWRkIGFuZCB1cGRhdGUgY29tbWFuZHMuIENyZWF0ZSBhICdzaGFsbG93JworCWNsb25lIHdpdGggYSBoaXN0b3J5IHRydW5jYXRlZCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiByZXZpc2lvbnMuCisJU2VlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdCisKKworPHBhdGg+Li4uOjoKKwlQYXRocyB0byBzdWJtb2R1bGUocykuIFdoZW4gc3BlY2lmaWVkIHRoaXMgd2lsbCByZXN0cmljdCB0aGUgY29tbWFuZAorCXRvIG9ubHkgb3BlcmF0ZSBvbiB0aGUgc3VibW9kdWxlcyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIHBhdGhzLgorCShUaGlzIGFyZ3VtZW50IGlzIHJlcXVpcmVkIHdpdGggYWRkKS4KKworRklMRVMKKy0tLS0tCitXaGVuIGluaXRpYWxpemluZyBzdWJtb2R1bGVzLCBhIC5naXRtb2R1bGVzIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkKK29mIHRoZSBjb250YWluaW5nIHJlcG9zaXRvcnkgaXMgdXNlZCB0byBmaW5kIHRoZSB1cmwgb2YgZWFjaCBzdWJtb2R1bGUuCitUaGlzIGZpbGUgc2hvdWxkIGJlIGZvcm1hdHRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYCRHSVRfRElSL2NvbmZpZ2AuIFRoZSBrZXkKK3RvIGVhY2ggc3VibW9kdWxlIHVybCBpcyAic3VibW9kdWxlLiRuYW1lLnVybCIuICBTZWUgbGlua2dpdDpnaXRtb2R1bGVzWzVdCitmb3IgZGV0YWlscy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1zdm4udHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzBmNjBiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3ZuLnR4dApAQCAtMCwwICsxLDExMDEgQEAKK2dpdC1zdm4oMSkKKz09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXN2biAtIEJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYW5kIEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3ZuJyA8Y29tbWFuZD4gW29wdGlvbnNdIFthcmd1bWVudHNdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorJ2dpdCBzdm4nIGlzIGEgc2ltcGxlIGNvbmR1aXQgZm9yIGNoYW5nZXNldHMgYmV0d2VlbiBTdWJ2ZXJzaW9uIGFuZCBHaXQuCitJdCBwcm92aWRlcyBhIGJpZGlyZWN0aW9uYWwgZmxvdyBvZiBjaGFuZ2VzIGJldHdlZW4gYSBTdWJ2ZXJzaW9uIGFuZCBhIEdpdAorcmVwb3NpdG9yeS4KKworJ2dpdCBzdm4nIGNhbiB0cmFjayBhIHN0YW5kYXJkIFN1YnZlcnNpb24gcmVwb3NpdG9yeSwKK2ZvbGxvd2luZyB0aGUgY29tbW9uICJ0cnVuay9icmFuY2hlcy90YWdzIiBsYXlvdXQsIHdpdGggdGhlIC0tc3RkbGF5b3V0IG9wdGlvbi4KK0l0IGNhbiBhbHNvIGZvbGxvdyBicmFuY2hlcyBhbmQgdGFncyBpbiBhbnkgbGF5b3V0IHdpdGggdGhlIC1ULy10Ly1iIG9wdGlvbnMKKyhzZWUgb3B0aW9ucyB0byAnaW5pdCcgYmVsb3csIGFuZCBhbHNvIHRoZSAnY2xvbmUnIGNvbW1hbmQpLgorCitPbmNlIHRyYWNraW5nIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5ICh3aXRoIGFueSBvZiB0aGUgYWJvdmUgbWV0aG9kcyksIHRoZSBHaXQKK3JlcG9zaXRvcnkgY2FuIGJlIHVwZGF0ZWQgZnJvbSBTdWJ2ZXJzaW9uIGJ5IHRoZSAnZmV0Y2gnIGNvbW1hbmQgYW5kCitTdWJ2ZXJzaW9uIHVwZGF0ZWQgZnJvbSBHaXQgYnkgdGhlICdkY29tbWl0JyBjb21tYW5kLgorCitDT01NQU5EUworLS0tLS0tLS0KKworJ2luaXQnOjoKKwlJbml0aWFsaXplcyBhbiBlbXB0eSBHaXQgcmVwb3NpdG9yeSB3aXRoIGFkZGl0aW9uYWwKKwltZXRhZGF0YSBkaXJlY3RvcmllcyBmb3IgJ2dpdCBzdm4nLiAgVGhlIFN1YnZlcnNpb24gVVJMCisJbWF5IGJlIHNwZWNpZmllZCBhcyBhIGNvbW1hbmQtbGluZSBhcmd1bWVudCwgb3IgYXMgZnVsbAorCVVSTCBhcmd1bWVudHMgdG8gLVQvLXQvLWIuICBPcHRpb25hbGx5LCB0aGUgdGFyZ2V0CisJZGlyZWN0b3J5IHRvIG9wZXJhdGUgb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIHNlY29uZAorCWFyZ3VtZW50LiAgTm9ybWFsbHkgdGhpcyBjb21tYW5kIGluaXRpYWxpemVzIHRoZSBjdXJyZW50CisJZGlyZWN0b3J5LgorCistVDx0cnVua19zdWJkaXI+OzsKKy0tdHJ1bms9PHRydW5rX3N1YmRpcj47OworLXQ8dGFnc19zdWJkaXI+OzsKKy0tdGFncz08dGFnc19zdWJkaXI+OzsKKy1iPGJyYW5jaGVzX3N1YmRpcj47OworLS1icmFuY2hlcz08YnJhbmNoZXNfc3ViZGlyPjs7Cistczs7CistLXN0ZGxheW91dDs7CisJVGhlc2UgYXJlIG9wdGlvbmFsIGNvbW1hbmQtbGluZSBvcHRpb25zIGZvciBpbml0LiAgRWFjaCBvZgorCXRoZXNlIGZsYWdzIGNhbiBwb2ludCB0byBhIHJlbGF0aXZlIHJlcG9zaXRvcnkgcGF0aAorCSgtLXRhZ3M9cHJvamVjdC90YWdzKSBvciBhIGZ1bGwgdXJsCisJKC0tdGFncz1odHRwczovL2Zvby5vcmcvcHJvamVjdC90YWdzKS4KKwlZb3UgY2FuIHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLXRhZ3MgYW5kL29yIC0tYnJhbmNoZXMgb3B0aW9ucywgaW4gY2FzZQorCXlvdXIgU3VidmVyc2lvbiByZXBvc2l0b3J5IHBsYWNlcyB0YWdzIG9yIGJyYW5jaGVzIHVuZGVyIG11bHRpcGxlIHBhdGhzLgorCVRoZSBvcHRpb24gLS1zdGRsYXlvdXQgaXMKKwlhIHNob3J0aGFuZCB3YXkgb2Ygc2V0dGluZyB0cnVuayx0YWdzLGJyYW5jaGVzIGFzIHRoZSByZWxhdGl2ZSBwYXRocywKKwl3aGljaCBpcyB0aGUgU3VidmVyc2lvbiBkZWZhdWx0LiBJZiBhbnkgb2YgdGhlIG90aGVyIG9wdGlvbnMgYXJlIGdpdmVuCisJYXMgd2VsbCwgdGhleSB0YWtlIHByZWNlZGVuY2UuCistLW5vLW1ldGFkYXRhOzsKKwlTZXQgdGhlICdub01ldGFkYXRhJyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCisJVGhpcyBvcHRpb24gaXMgbm90IHJlY29tbWVuZGVkLCBwbGVhc2UgcmVhZCB0aGUgJ3N2bi5ub01ldGFkYXRhJworCXNlY3Rpb24gb2YgdGhpcyBtYW5wYWdlIGJlZm9yZSB1c2luZyB0aGlzIG9wdGlvbi4KKy0tdXNlLXN2bS1wcm9wczs7CisJU2V0IHRoZSAndXNlU3ZtUHJvcHMnIG9wdGlvbiBpbiB0aGUgW3N2bi1yZW1vdGVdIGNvbmZpZy4KKy0tdXNlLXN2bnN5bmMtcHJvcHM7OworCVNldCB0aGUgJ3VzZVN2bnN5bmNQcm9wcycgb3B0aW9uIGluIHRoZSBbc3ZuLXJlbW90ZV0gY29uZmlnLgorLS1yZXdyaXRlLXJvb3Q9PFVSTD47OworCVNldCB0aGUgJ3Jld3JpdGVSb290JyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCistLXJld3JpdGUtdXVpZD08VVVJRD47OworCVNldCB0aGUgJ3Jld3JpdGVVVUlEJyBvcHRpb24gaW4gdGhlIFtzdm4tcmVtb3RlXSBjb25maWcuCistLXVzZXJuYW1lPTx1c2VyPjs7CisJRm9yIHRyYW5zcG9ydHMgdGhhdCBTVk4gaGFuZGxlcyBhdXRoZW50aWNhdGlvbiBmb3IgKGh0dHAsCisJaHR0cHMsIGFuZCBwbGFpbiBzdm4pLCBzcGVjaWZ5IHRoZSB1c2VybmFtZS4gIEZvciBvdGhlcgorCXRyYW5zcG9ydHMgKGUuZy4gYHN2bitzc2g6Ly9gKSwgeW91IG11c3QgaW5jbHVkZSB0aGUgdXNlcm5hbWUgaW4KKwl0aGUgVVJMLCBlLmcuIGBzdm4rc3NoOi8vZm9vQHN2bi5iYXIuY29tL3Byb2plY3RgCistLXByZWZpeD08cHJlZml4Pjs7CisJVGhpcyBhbGxvd3Mgb25lIHRvIHNwZWNpZnkgYSBwcmVmaXggd2hpY2ggaXMgcHJlcGVuZGVkCisJdG8gdGhlIG5hbWVzIG9mIHJlbW90ZXMgaWYgdHJ1bmsvYnJhbmNoZXMvdGFncyBhcmUKKwlzcGVjaWZpZWQuICBUaGUgcHJlZml4IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgaW5jbHVkZSBhCisJdHJhaWxpbmcgc2xhc2gsIHNvIGJlIHN1cmUgeW91IGluY2x1ZGUgb25lIGluIHRoZQorCWFyZ3VtZW50IGlmIHRoYXQgaXMgd2hhdCB5b3Ugd2FudC4gIElmIC0tYnJhbmNoZXMvLWIgaXMKKwlzcGVjaWZpZWQsIHRoZSBwcmVmaXggbXVzdCBpbmNsdWRlIGEgdHJhaWxpbmcgc2xhc2guCisJU2V0dGluZyBhIHByZWZpeCAod2l0aCBhIHRyYWlsaW5nIHNsYXNoKSBpcyBzdHJvbmdseQorCWVuY291cmFnZWQgaW4gYW55IGNhc2UsIGFzIHlvdXIgU1ZOLXRyYWNraW5nIHJlZnMgd2lsbAorCXRoZW4gYmUgbG9jYXRlZCBhdCAicmVmcy9yZW1vdGVzLyRwcmVmaXgvKiIsIHdoaWNoIGlzCisJY29tcGF0aWJsZSB3aXRoIEdpdCdzIG93biByZW1vdGUtdHJhY2tpbmcgcmVmIGxheW91dAorCShyZWZzL3JlbW90ZXMvJHJlbW90ZS8qKS4gU2V0dGluZyBhIHByZWZpeCBpcyBhbHNvIHVzZWZ1bAorCWlmIHlvdSB3aXNoIHRvIHRyYWNrIG11bHRpcGxlIHByb2plY3RzIHRoYXQgc2hhcmUgYSBjb21tb24KKwlyZXBvc2l0b3J5LgorCUJ5IGRlZmF1bHQsIHRoZSBwcmVmaXggaXMgc2V0IHRvICdvcmlnaW4vJy4KKysKK05PVEU6IEJlZm9yZSBHaXQgdjIuMCwgdGhlIGRlZmF1bHQgcHJlZml4IHdhcyAiIiAobm8gcHJlZml4KS4gVGhpcworbWVhbnQgdGhhdCBTVk4tdHJhY2tpbmcgcmVmcyB3ZXJlIHB1dCBhdCAicmVmcy9yZW1vdGVzLyoiLCB3aGljaCBpcworaW5jb21wYXRpYmxlIHdpdGggaG93IEdpdCdzIG93biByZW1vdGUtdHJhY2tpbmcgcmVmcyBhcmUgb3JnYW5pemVkLgorSWYgeW91IHN0aWxsIHdhbnQgdGhlIG9sZCBkZWZhdWx0LCB5b3UgY2FuIGdldCBpdCBieSBwYXNzaW5nCitgLS1wcmVmaXggIiJgIG9uIHRoZSBjb21tYW5kIGxpbmUgKGAtLXByZWZpeD0iImAgbWF5IG5vdCB3b3JrIGlmCit5b3VyIFBlcmwncyBHZXRvcHQ6OkxvbmcgaXMgPCB2Mi4zNykuCisKKy0taWdub3JlLXBhdGhzPTxyZWdleD47OworCVdoZW4gcGFzc2VkIHRvICdpbml0JyBvciAnY2xvbmUnIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwKKwliZSBwcmVzZXJ2ZWQgYXMgYSBjb25maWcga2V5LiAgU2VlICdmZXRjaCcgZm9yIGEgZGVzY3JpcHRpb24KKwlvZiAnLS1pZ25vcmUtcGF0aHMnLgorLS1pbmNsdWRlLXBhdGhzPTxyZWdleD47OworCVdoZW4gcGFzc2VkIHRvICdpbml0JyBvciAnY2xvbmUnIHRoaXMgcmVndWxhciBleHByZXNzaW9uIHdpbGwKKwliZSBwcmVzZXJ2ZWQgYXMgYSBjb25maWcga2V5LiAgU2VlICdmZXRjaCcgZm9yIGEgZGVzY3JpcHRpb24KKwlvZiAnLS1pbmNsdWRlLXBhdGhzJy4KKy0tbm8tbWluaW1pemUtdXJsOzsKKwlXaGVuIHRyYWNraW5nIG11bHRpcGxlIGRpcmVjdG9yaWVzICh1c2luZyAtLXN0ZGxheW91dCwKKwktLWJyYW5jaGVzLCBvciAtLXRhZ3Mgb3B0aW9ucyksIGdpdCBzdm4gd2lsbCBhdHRlbXB0IHRvIGNvbm5lY3QKKwl0byB0aGUgcm9vdCAob3IgaGlnaGVzdCBhbGxvd2VkIGxldmVsKSBvZiB0aGUgU3VidmVyc2lvbgorCXJlcG9zaXRvcnkuICBUaGlzIGRlZmF1bHQgYWxsb3dzIGJldHRlciB0cmFja2luZyBvZiBoaXN0b3J5IGlmCisJZW50aXJlIHByb2plY3RzIGFyZSBtb3ZlZCB3aXRoaW4gYSByZXBvc2l0b3J5LCBidXQgbWF5IGNhdXNlCisJaXNzdWVzIG9uIHJlcG9zaXRvcmllcyB3aGVyZSByZWFkIGFjY2VzcyByZXN0cmljdGlvbnMgYXJlIGluCisJcGxhY2UuICBQYXNzaW5nICctLW5vLW1pbmltaXplLXVybCcgd2lsbCBhbGxvdyBnaXQgc3ZuIHRvCisJYWNjZXB0IFVSTHMgYXMtaXMgd2l0aG91dCBhdHRlbXB0aW5nIHRvIGNvbm5lY3QgdG8gYSBoaWdoZXIKKwlsZXZlbCBkaXJlY3RvcnkuICBUaGlzIG9wdGlvbiBpcyBvZmYgYnkgZGVmYXVsdCB3aGVuIG9ubHkKKwlvbmUgVVJML2JyYW5jaCBpcyB0cmFja2VkIChpdCB3b3VsZCBkbyBsaXR0bGUgZ29vZCkuCisKKydmZXRjaCc6OgorCUZldGNoIHVuZmV0Y2hlZCByZXZpc2lvbnMgZnJvbSB0aGUgU3VidmVyc2lvbiByZW1vdGUgd2UgYXJlCisJdHJhY2tpbmcuICBUaGUgbmFtZSBvZiB0aGUgW3N2bi1yZW1vdGUgIi4uLiJdIHNlY3Rpb24gaW4gdGhlCisJJEdJVF9ESVIvY29uZmlnIGZpbGUgbWF5IGJlIHNwZWNpZmllZCBhcyBhbiBvcHRpb25hbAorCWNvbW1hbmQtbGluZSBhcmd1bWVudC4KKysKK1RoaXMgYXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSByZXZfbWFwIGlmIG5lZWRlZCAoc2VlCisnJEdJVF9ESVIvc3ZuL1wqXCovLnJldl9tYXAuKicgaW4gdGhlIEZJTEVTIHNlY3Rpb24gYmVsb3cgZm9yIGRldGFpbHMpLgorCistLWxvY2FsdGltZTs7CisJU3RvcmUgR2l0IGNvbW1pdCB0aW1lcyBpbiB0aGUgbG9jYWwgdGltZSB6b25lIGluc3RlYWQgb2YgVVRDLiAgVGhpcworCW1ha2VzICdnaXQgbG9nJyAoZXZlbiB3aXRob3V0IC0tZGF0ZT1sb2NhbCkgc2hvdyB0aGUgc2FtZSB0aW1lcworCXRoYXQgYHN2biBsb2dgIHdvdWxkIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuCisrCitUaGlzIGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggaW50ZXJvcGVyYXRpbmcgd2l0aCB0aGUgU3VidmVyc2lvbgorcmVwb3NpdG9yeSB5b3UgY2xvbmVkIGZyb20sIGJ1dCBpZiB5b3Ugd2lzaCBmb3IgeW91ciBsb2NhbCBHaXQKK3JlcG9zaXRvcnkgdG8gYmUgYWJsZSB0byBpbnRlcm9wZXJhdGUgd2l0aCBzb21lb25lIGVsc2UncyBsb2NhbCBHaXQKK3JlcG9zaXRvcnksIGVpdGhlciBkb24ndCB1c2UgdGhpcyBvcHRpb24gb3IgeW91IHNob3VsZCBib3RoIHVzZSBpdCBpbgordGhlIHNhbWUgbG9jYWwgdGltZSB6b25lLgorCistLXBhcmVudDs7CisJRmV0Y2ggb25seSBmcm9tIHRoZSBTVk4gcGFyZW50IG9mIHRoZSBjdXJyZW50IEhFQUQuCisKKy0taWdub3JlLXBhdGhzPTxyZWdleD47OworCVRoaXMgYWxsb3dzIG9uZSB0byBzcGVjaWZ5IGEgUGVybCByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB3aWxsCisJY2F1c2Ugc2tpcHBpbmcgb2YgYWxsIG1hdGNoaW5nIHBhdGhzIGZyb20gY2hlY2tvdXQgZnJvbSBTVk4uCisJVGhlICctLWlnbm9yZS1wYXRocycgb3B0aW9uIHNob3VsZCBtYXRjaCBmb3IgZXZlcnkgJ2ZldGNoJworCShpbmNsdWRpbmcgYXV0b21hdGljIGZldGNoZXMgZHVlIHRvICdjbG9uZScsICdkY29tbWl0JywKKwkncmViYXNlJywgZXRjKSBvbiBhIGdpdmVuIHJlcG9zaXRvcnkuCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4tcmVtb3RlLjxuYW1lPi5pZ25vcmUtcGF0aHMKKysKK0lmIHRoZSBpZ25vcmUtcGF0aHMgY29uZmlndXJhdGlvbiBrZXkgaXMgc2V0LCBhbmQgdGhlIGNvbW1hbmQtbGluZQorb3B0aW9uIGlzIGFsc28gZ2l2ZW4sIGJvdGggcmVndWxhciBleHByZXNzaW9ucyB3aWxsIGJlIHVzZWQuCisrCitFeGFtcGxlczoKKysKKy0tCitTa2lwICJkb2MqIiBkaXJlY3RvcnkgZm9yIGV2ZXJ5IGZldGNoOzsKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS1pZ25vcmUtcGF0aHM9Il5kb2MiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2tpcCAiYnJhbmNoZXMiIGFuZCAidGFncyIgb2YgZmlyc3QgbGV2ZWwgZGlyZWN0b3JpZXM7OworKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLWlnbm9yZS1wYXRocz0iXlteL10rLyg/OmJyYW5jaGVzfHRhZ3MpIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLQorCistLWluY2x1ZGUtcGF0aHM9PHJlZ2V4Pjs7CisJVGhpcyBhbGxvd3Mgb25lIHRvIHNwZWNpZnkgYSBQZXJsIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHdpbGwKKwljYXVzZSB0aGUgaW5jbHVzaW9uIG9mIG9ubHkgbWF0Y2hpbmcgcGF0aHMgZnJvbSBjaGVja291dCBmcm9tIFNWTi4KKwlUaGUgJy0taW5jbHVkZS1wYXRocycgb3B0aW9uIHNob3VsZCBtYXRjaCBmb3IgZXZlcnkgJ2ZldGNoJworCShpbmNsdWRpbmcgYXV0b21hdGljIGZldGNoZXMgZHVlIHRvICdjbG9uZScsICdkY29tbWl0JywKKwkncmViYXNlJywgZXRjKSBvbiBhIGdpdmVuIHJlcG9zaXRvcnkuICctLWlnbm9yZS1wYXRocycgdGFrZXMKKwlwcmVjZWRlbmNlIG92ZXIgJy0taW5jbHVkZS1wYXRocycuCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4tcmVtb3RlLjxuYW1lPi5pbmNsdWRlLXBhdGhzCisKKy0tbG9nLXdpbmRvdy1zaXplPTxuPjs7CisJRmV0Y2ggPG4+IGxvZyBlbnRyaWVzIHBlciByZXF1ZXN0IHdoZW4gc2Nhbm5pbmcgU3VidmVyc2lvbiBoaXN0b3J5LgorCVRoZSBkZWZhdWx0IGlzIDEwMC4gRm9yIHZlcnkgbGFyZ2UgU3VidmVyc2lvbiByZXBvc2l0b3JpZXMsIGxhcmdlcgorCXZhbHVlcyBtYXkgYmUgbmVlZGVkIGZvciAnY2xvbmUnLydmZXRjaCcgdG8gY29tcGxldGUgaW4gcmVhc29uYWJsZQorCXRpbWUuIEJ1dCBvdmVybHkgbGFyZ2UgdmFsdWVzIG1heSBsZWFkIHRvIGhpZ2hlciBtZW1vcnkgdXNhZ2UgYW5kCisJcmVxdWVzdCB0aW1lb3V0cy4KKworJ2Nsb25lJzo6CisJUnVucyAnaW5pdCcgYW5kICdmZXRjaCcuICBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEKKwlkaXJlY3RvcnkgYmFzZWQgb24gdGhlIGJhc2VuYW1lIG9mIHRoZSBVUkwgcGFzc2VkIHRvIGl0OworCW9yIGlmIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHBhc3NlZDsgaXQgd2lsbCBjcmVhdGUgYSBkaXJlY3RvcnkKKwlhbmQgd29yayB3aXRoaW4gdGhhdC4gIEl0IGFjY2VwdHMgYWxsIGFyZ3VtZW50cyB0aGF0IHRoZQorCSdpbml0JyBhbmQgJ2ZldGNoJyBjb21tYW5kcyBhY2NlcHQ7IHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorCSctLWZldGNoLWFsbCcgYW5kICctLXBhcmVudCcuICBBZnRlciBhIHJlcG9zaXRvcnkgaXMgY2xvbmVkLAorCXRoZSAnZmV0Y2gnIGNvbW1hbmQgd2lsbCBiZSBhYmxlIHRvIHVwZGF0ZSByZXZpc2lvbnMgd2l0aG91dAorCWFmZmVjdGluZyB0aGUgd29ya2luZyB0cmVlOyBhbmQgdGhlICdyZWJhc2UnIGNvbW1hbmQgd2lsbCBiZQorCWFibGUgdG8gdXBkYXRlIHRoZSB3b3JraW5nIHRyZWUgd2l0aCB0aGUgbGF0ZXN0IGNoYW5nZXMuCisKKy0tcHJlc2VydmUtZW1wdHktZGlyczs7CisJQ3JlYXRlIGEgcGxhY2Vob2xkZXIgZmlsZSBpbiB0aGUgbG9jYWwgR2l0IHJlcG9zaXRvcnkgZm9yIGVhY2gKKwllbXB0eSBkaXJlY3RvcnkgZmV0Y2hlZCBmcm9tIFN1YnZlcnNpb24uICBUaGlzIGluY2x1ZGVzIGRpcmVjdG9yaWVzCisJdGhhdCBiZWNvbWUgZW1wdHkgYnkgcmVtb3ZpbmcgYWxsIGVudHJpZXMgaW4gdGhlIFN1YnZlcnNpb24KKwlyZXBvc2l0b3J5IChidXQgbm90IHRoZSBkaXJlY3RvcnkgaXRzZWxmKS4gIFRoZSBwbGFjZWhvbGRlciBmaWxlcworCWFyZSBhbHNvIHRyYWNrZWQgYW5kIHJlbW92ZWQgd2hlbiBubyBsb25nZXIgbmVjZXNzYXJ5LgorCistLXBsYWNlaG9sZGVyLWZpbGVuYW1lPTxmaWxlbmFtZT47OworCVNldCB0aGUgbmFtZSBvZiBwbGFjZWhvbGRlciBmaWxlcyBjcmVhdGVkIGJ5IC0tcHJlc2VydmUtZW1wdHktZGlycy4KKwlEZWZhdWx0OiAiLmdpdGlnbm9yZSIKKworJ3JlYmFzZSc6OgorCVRoaXMgZmV0Y2hlcyByZXZpc2lvbnMgZnJvbSB0aGUgU1ZOIHBhcmVudCBvZiB0aGUgY3VycmVudCBIRUFECisJYW5kIHJlYmFzZXMgdGhlIGN1cnJlbnQgKHVuY29tbWl0dGVkIHRvIFNWTikgd29yayBhZ2FpbnN0IGl0LgorKworVGhpcyB3b3JrcyBzaW1pbGFybHkgdG8gYHN2biB1cGRhdGVgIG9yICdnaXQgcHVsbCcgZXhjZXB0IHRoYXQKK2l0IHByZXNlcnZlcyBsaW5lYXIgaGlzdG9yeSB3aXRoICdnaXQgcmViYXNlJyBpbnN0ZWFkIG9mCisnZ2l0IG1lcmdlJyBmb3IgZWFzZSBvZiBkY29tbWl0dGluZyB3aXRoICdnaXQgc3ZuJy4KKysKK1RoaXMgYWNjZXB0cyBhbGwgb3B0aW9ucyB0aGF0ICdnaXQgc3ZuIGZldGNoJyBhbmQgJ2dpdCByZWJhc2UnCithY2NlcHQuICBIb3dldmVyLCAnLS1mZXRjaC1hbGwnIG9ubHkgZmV0Y2hlcyBmcm9tIHRoZSBjdXJyZW50Citbc3ZuLXJlbW90ZV0sIGFuZCBub3QgYWxsIFtzdm4tcmVtb3RlXSBkZWZpbml0aW9ucy4KKysKK0xpa2UgJ2dpdCByZWJhc2UnOyB0aGlzIHJlcXVpcmVzIHRoYXQgdGhlIHdvcmtpbmcgdHJlZSBiZSBjbGVhbgorYW5kIGhhdmUgbm8gdW5jb21taXR0ZWQgY2hhbmdlcy4KKysKK1RoaXMgYXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSByZXZfbWFwIGlmIG5lZWRlZCAoc2VlCisnJEdJVF9ESVIvc3ZuL1wqXCovLnJldl9tYXAuKicgaW4gdGhlIEZJTEVTIHNlY3Rpb24gYmVsb3cgZm9yIGRldGFpbHMpLgorCistbDs7CistLWxvY2FsOzsKKwlEbyBub3QgZmV0Y2ggcmVtb3RlbHk7IG9ubHkgcnVuICdnaXQgcmViYXNlJyBhZ2FpbnN0IHRoZQorCWxhc3QgZmV0Y2hlZCBjb21taXQgZnJvbSB0aGUgdXBzdHJlYW0gU1ZOLgorCisnZGNvbW1pdCc6OgorCUNvbW1pdCBlYWNoIGRpZmYgZnJvbSB0aGUgY3VycmVudCBicmFuY2ggZGlyZWN0bHkgdG8gdGhlIFNWTgorCXJlcG9zaXRvcnksIGFuZCB0aGVuIHJlYmFzZSBvciByZXNldCAoZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3IKKwlub3QgdGhlcmUgaXMgYSBkaWZmIGJldHdlZW4gU1ZOIGFuZCBoZWFkKS4gIFRoaXMgd2lsbCBjcmVhdGUKKwlhIHJldmlzaW9uIGluIFNWTiBmb3IgZWFjaCBjb21taXQgaW4gR2l0LgorKworV2hlbiBhbiBvcHRpb25hbCBHaXQgYnJhbmNoIG5hbWUgKG9yIGEgR2l0IGNvbW1pdCBvYmplY3QgbmFtZSkKK2lzIHNwZWNpZmllZCBhcyBhbiBhcmd1bWVudCwgdGhlIHN1YmNvbW1hbmQgd29ya3Mgb24gdGhlIHNwZWNpZmllZAorYnJhbmNoLCBub3Qgb24gdGhlIGN1cnJlbnQgYnJhbmNoLgorKworVXNlIG9mICdkY29tbWl0JyBpcyBwcmVmZXJyZWQgdG8gJ3NldC10cmVlJyAoYmVsb3cpLgorKworLS1uby1yZWJhc2U7OworCUFmdGVyIGNvbW1pdHRpbmcsIGRvIG5vdCByZWJhc2Ugb3IgcmVzZXQuCistLWNvbW1pdC11cmwgPFVSTD47OworCUNvbW1pdCB0byB0aGlzIFNWTiBVUkwgKHRoZSBmdWxsIHBhdGgpLiAgVGhpcyBpcyBpbnRlbmRlZCB0bworCWFsbG93IGV4aXN0aW5nICdnaXQgc3ZuJyByZXBvc2l0b3JpZXMgY3JlYXRlZCB3aXRoIG9uZSB0cmFuc3BvcnQKKwltZXRob2QgKGUuZy4gYHN2bjovL2Agb3IgYGh0dHA6Ly9gIGZvciBhbm9ueW1vdXMgcmVhZCkgdG8gYmUKKwlyZXVzZWQgaWYgYSB1c2VyIGlzIGxhdGVyIGdpdmVuIGFjY2VzcyB0byBhbiBhbHRlcm5hdGUgdHJhbnNwb3J0CisJbWV0aG9kIChlLmcuIGBzdm4rc3NoOi8vYCBvciBgaHR0cHM6Ly9gKSBmb3IgY29tbWl0LgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLXJlbW90ZS48bmFtZT4uY29tbWl0dXJsCitjb25maWcga2V5OiBzdm4uY29tbWl0dXJsIChvdmVyd3JpdGVzIGFsbCBzdm4tcmVtb3RlLjxuYW1lPi5jb21taXR1cmwgb3B0aW9ucykKKysKK05vdGUgdGhhdCB0aGUgU1ZOIFVSTCBvZiB0aGUgY29tbWl0dXJsIGNvbmZpZyBrZXkgaW5jbHVkZXMgdGhlIFNWTiBicmFuY2guCitJZiB5b3UgcmF0aGVyIHdhbnQgdG8gc2V0IHRoZSBjb21taXQgVVJMIGZvciBhbiBlbnRpcmUgU1ZOIHJlcG9zaXRvcnkgdXNlCitzdm4tcmVtb3RlLjxuYW1lPi5wdXNodXJsIGluc3RlYWQuCisrCitVc2luZyB0aGlzIG9wdGlvbiBmb3IgYW55IG90aGVyIHB1cnBvc2UgKGRvbid0IGFzaykgaXMgdmVyeSBzdHJvbmdseQorZGlzY291cmFnZWQuCisKKy0tbWVyZ2VpbmZvPTxtZXJnZWluZm8+OzsKKwlBZGQgdGhlIGdpdmVuIG1lcmdlIGluZm9ybWF0aW9uIGR1cmluZyB0aGUgZGNvbW1pdAorCShlLmcuIGAtLW1lcmdlaW5mbz0iL2JyYW5jaGVzL2ZvbzoxLTEwImApLiBBbGwgc3ZuIHNlcnZlciB2ZXJzaW9ucyBjYW4KKwlzdG9yZSB0aGlzIGluZm9ybWF0aW9uIChhcyBhIHByb3BlcnR5KSwgYW5kIHN2biBjbGllbnRzIHN0YXJ0aW5nIGZyb20KKwl2ZXJzaW9uIDEuNSBjYW4gbWFrZSB1c2Ugb2YgaXQuIFRvIHNwZWNpZnkgbWVyZ2UgaW5mb3JtYXRpb24gZnJvbSBtdWx0aXBsZQorCWJyYW5jaGVzLCB1c2UgYSBzaW5nbGUgc3BhY2UgY2hhcmFjdGVyIGJldHdlZW4gdGhlIGJyYW5jaGVzCisJKGAtLW1lcmdlaW5mbz0iL2JyYW5jaGVzL2ZvbzoxLTEwIC9icmFuY2hlcy9iYXI6Myw1LTYsOCJgKQorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLnB1c2htZXJnZWluZm8KKysKK1RoaXMgb3B0aW9uIHdpbGwgY2F1c2UgZ2l0LXN2biB0byBhdHRlbXB0IHRvIGF1dG9tYXRpY2FsbHkgcG9wdWxhdGUgdGhlCitzdm46bWVyZ2VpbmZvIHByb3BlcnR5IGluIHRoZSBTVk4gcmVwb3NpdG9yeSB3aGVuIHBvc3NpYmxlLiBDdXJyZW50bHksIHRoaXMgY2FuCitvbmx5IGJlIGRvbmUgd2hlbiBkY29tbWl0dGluZyBub24tZmFzdC1mb3J3YXJkIG1lcmdlcyB3aGVyZSBhbGwgcGFyZW50cyBidXQgdGhlCitmaXJzdCBoYXZlIGFscmVhZHkgYmVlbiBwdXNoZWQgaW50byBTVk4uCisKKy0taW50ZXJhY3RpdmU7OworCUFzayB0aGUgdXNlciB0byBjb25maXJtIHRoYXQgYSBwYXRjaCBzZXQgc2hvdWxkIGFjdHVhbGx5IGJlIHNlbnQgdG8gU1ZOLgorCUZvciBlYWNoIHBhdGNoLCBvbmUgbWF5IGFuc3dlciAieWVzIiAoYWNjZXB0IHRoaXMgcGF0Y2gpLCAibm8iIChkaXNjYXJkIHRoaXMKKwlwYXRjaCksICJhbGwiIChhY2NlcHQgYWxsIHBhdGNoZXMpLCBvciAicXVpdCIuCisrCisnZ2l0IHN2biBkY29tbWl0JyByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIGFuc3dlciBpcyAibm8iIG9yICJxdWl0Iiwgd2l0aG91dAorY29tbWl0dGluZyBhbnl0aGluZyB0byBTVk4uCisKKydicmFuY2gnOjoKKwlDcmVhdGUgYSBicmFuY2ggaW4gdGhlIFNWTiByZXBvc2l0b3J5LgorCistbTs7CistLW1lc3NhZ2U7OworCUFsbG93cyB0byBzcGVjaWZ5IHRoZSBjb21taXQgbWVzc2FnZS4KKworLXQ7OworLS10YWc7OworCUNyZWF0ZSBhIHRhZyBieSB1c2luZyB0aGUgdGFnc19zdWJkaXIgaW5zdGVhZCBvZiB0aGUgYnJhbmNoZXNfc3ViZGlyCisJc3BlY2lmaWVkIGR1cmluZyBnaXQgc3ZuIGluaXQuCisKKy1kPHBhdGg+OzsKKy0tZGVzdGluYXRpb249PHBhdGg+OzsKKworCUlmIG1vcmUgdGhhbiBvbmUgLS1icmFuY2hlcyAob3IgLS10YWdzKSBvcHRpb24gd2FzIGdpdmVuIHRvIHRoZSAnaW5pdCcKKwlvciAnY2xvbmUnIGNvbW1hbmQsIHlvdSBtdXN0IHByb3ZpZGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBicmFuY2ggKG9yCisJdGFnKSB5b3Ugd2lzaCB0byBjcmVhdGUgaW4gdGhlIFNWTiByZXBvc2l0b3J5LiAgPHBhdGg+IHNwZWNpZmllcyB3aGljaAorCXBhdGggdG8gdXNlIHRvIGNyZWF0ZSB0aGUgYnJhbmNoIG9yIHRhZyBhbmQgc2hvdWxkIG1hdGNoIHRoZSBwYXR0ZXJuCisJb24gdGhlIGxlZnQtaGFuZCBzaWRlIG9mIG9uZSBvZiB0aGUgY29uZmlndXJlZCBicmFuY2hlcyBvciB0YWdzCisJcmVmc3BlY3MuICBZb3UgY2FuIHNlZSB0aGVzZSByZWZzcGVjcyB3aXRoIHRoZSBjb21tYW5kcworKworCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuPG5hbWU+LmJyYW5jaGVzCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS48bmFtZT4udGFncworKword2hlcmUgPG5hbWU+IGlzIHRoZSBuYW1lIG9mIHRoZSBTVk4gcmVwb3NpdG9yeSBhcyBzcGVjaWZpZWQgYnkgdGhlIC1SIG9wdGlvbiB0bworJ2luaXQnIChvciAic3ZuIiBieSBkZWZhdWx0KS4KKworLS11c2VybmFtZTs7CisJU3BlY2lmeSB0aGUgU1ZOIHVzZXJuYW1lIHRvIHBlcmZvcm0gdGhlIGNvbW1pdCBhcy4gIFRoaXMgb3B0aW9uIG92ZXJyaWRlcworCXRoZSAndXNlcm5hbWUnIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkuCisKKy0tY29tbWl0LXVybDs7CisJVXNlIHRoZSBzcGVjaWZpZWQgVVJMIHRvIGNvbm5lY3QgdG8gdGhlIGRlc3RpbmF0aW9uIFN1YnZlcnNpb24KKwlyZXBvc2l0b3J5LiAgVGhpcyBpcyB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgdGhlIHNvdXJjZSBTVk4KKwlyZXBvc2l0b3J5IGlzIHJlYWQtb25seS4gIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyBjb25maWd1cmF0aW9uCisJcHJvcGVydHkgJ2NvbW1pdHVybCcuCisrCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc3ZuLXJlbW90ZS48bmFtZT4uY29tbWl0dXJsCisrCisKKy0tcGFyZW50czs7CisJQ3JlYXRlIHBhcmVudCBmb2xkZXJzLiBUaGlzIHBhcmFtZXRlciBpcyBlcXVpdmFsZW50IHRvIHRoZSBwYXJhbWV0ZXIKKwktLXBhcmVudHMgb24gc3ZuIGNwIGNvbW1hbmRzIGFuZCBpcyB1c2VmdWwgZm9yIG5vbi1zdGFuZGFyZCByZXBvc2l0b3J5CisJbGF5b3V0cy4KKworJ3RhZyc6OgorCUNyZWF0ZSBhIHRhZyBpbiB0aGUgU1ZOIHJlcG9zaXRvcnkuIFRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yCisJJ2JyYW5jaCAtdCcuCisKKydsb2cnOjoKKwlUaGlzIHNob3VsZCBtYWtlIGl0IGVhc3kgdG8gbG9vayB1cCBzdm4gbG9nIG1lc3NhZ2VzIHdoZW4gc3ZuCisJdXNlcnMgcmVmZXIgdG8gLXIvLS1yZXZpc2lvbiBudW1iZXJzLgorKworVGhlIGZvbGxvd2luZyBmZWF0dXJlcyBmcm9tIGBzdm4gbG9nJyBhcmUgc3VwcG9ydGVkOgorKworLS0KKy1yIDxuPls6PG4+XTs7CistLXJldmlzaW9uPTxuPls6PG4+XTs7CisJaXMgc3VwcG9ydGVkLCBub24tbnVtZXJpYyBhcmdzIGFyZSBub3Q6CisJSEVBRCwgTkVYVCwgQkFTRSwgUFJFViwgZXRjIC4uLgorLXY7OworLS12ZXJib3NlOzsKKwlpdCdzIG5vdCBjb21wbGV0ZWx5IGNvbXBhdGlibGUgd2l0aCB0aGUgLS12ZXJib3NlCisJb3V0cHV0IGluIHN2biBsb2csIGJ1dCByZWFzb25hYmx5IGNsb3NlLgorLS1saW1pdD08bj47OworCWlzIE5PVCB0aGUgc2FtZSBhcyAtLW1heC1jb3VudCwgZG9lc24ndCBjb3VudAorCW1lcmdlZC9leGNsdWRlZCBjb21taXRzCistLWluY3JlbWVudGFsOzsKKwlzdXBwb3J0ZWQKKy0tCisrCitOZXcgZmVhdHVyZXM6CisrCistLQorLS1zaG93LWNvbW1pdDs7CisJc2hvd3MgdGhlIEdpdCBjb21taXQgc2hhMSwgYXMgd2VsbAorLS1vbmVsaW5lOzsKKwlvdXIgdmVyc2lvbiBvZiAtLXByZXR0eT1vbmVsaW5lCistLQorKworTk9URTogU1ZOIGl0c2VsZiBvbmx5IHN0b3JlcyB0aW1lcyBpbiBVVEMgYW5kIG5vdGhpbmcgZWxzZS4gVGhlIHJlZ3VsYXIgc3ZuCitjbGllbnQgY29udmVydHMgdGhlIFVUQyB0aW1lIHRvIHRoZSBsb2NhbCB0aW1lIChvciBiYXNlZCBvbiB0aGUgVFo9CitlbnZpcm9ubWVudCkuIFRoaXMgY29tbWFuZCBoYXMgdGhlIHNhbWUgYmVoYXZpb3VyLgorKworQW55IG90aGVyIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgbG9nJworCisnYmxhbWUnOjoKKwlTaG93IHdoYXQgcmV2aXNpb24gYW5kIGF1dGhvciBsYXN0IG1vZGlmaWVkIGVhY2ggbGluZSBvZiBhIGZpbGUuIFRoZQorCW91dHB1dCBvZiB0aGlzIG1vZGUgaXMgZm9ybWF0LWNvbXBhdGlibGUgd2l0aCB0aGUgb3V0cHV0IG9mCisJYHN2biBibGFtZScgYnkgZGVmYXVsdC4gTGlrZSB0aGUgU1ZOIGJsYW1lIGNvbW1hbmQsCisJbG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFyZSBpZ25vcmVkOworCXRoZSB2ZXJzaW9uIG9mIHRoZSBmaWxlIGluIHRoZSBIRUFEIHJldmlzaW9uIGlzIGFubm90YXRlZC4gVW5rbm93bgorCWFyZ3VtZW50cyBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgYmxhbWUnLgorKworLS1naXQtZm9ybWF0OzsKKwlQcm9kdWNlIG91dHB1dCBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgJ2dpdCBibGFtZScsIGJ1dCB3aXRoCisJU1ZOIHJldmlzaW9uIG51bWJlcnMgaW5zdGVhZCBvZiBHaXQgY29tbWl0IGhhc2hlcy4gSW4gdGhpcyBtb2RlLAorCWNoYW5nZXMgdGhhdCBoYXZlbid0IGJlZW4gY29tbWl0dGVkIHRvIFNWTiAoaW5jbHVkaW5nIGxvY2FsCisJd29ya2luZy1jb3B5IGVkaXRzKSBhcmUgc2hvd24gYXMgcmV2aXNpb24gMC4KKworJ2ZpbmQtcmV2Jzo6CisJV2hlbiBnaXZlbiBhbiBTVk4gcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBmb3JtICdyTicsIHJldHVybnMgdGhlCisJY29ycmVzcG9uZGluZyBHaXQgY29tbWl0IGhhc2ggKHRoaXMgY2FuIG9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgYQorCXRyZWUtaXNoIHRvIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHNob3VsZCBiZSBzZWFyY2hlZCkuICBXaGVuIGdpdmVuIGEKKwl0cmVlLWlzaCwgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBTVk4gcmV2aXNpb24gbnVtYmVyLgorKworLUI7OworLS1iZWZvcmU7OworCURvbid0IHJlcXVpcmUgYW4gZXhhY3QgbWF0Y2ggaWYgZ2l2ZW4gYW4gU1ZOIHJldmlzaW9uLCBpbnN0ZWFkIGZpbmQKKwl0aGUgY29tbWl0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN0YXRlIG9mIHRoZSBTVk4gcmVwb3NpdG9yeSAob24gdGhlCisJY3VycmVudCBicmFuY2gpIGF0IHRoZSBzcGVjaWZpZWQgcmV2aXNpb24uCisrCistQTs7CistLWFmdGVyOzsKKwlEb24ndCByZXF1aXJlIGFuIGV4YWN0IG1hdGNoIGlmIGdpdmVuIGFuIFNWTiByZXZpc2lvbjsgaWYgdGhlcmUgaXMKKwlub3QgYW4gZXhhY3QgbWF0Y2ggcmV0dXJuIHRoZSBjbG9zZXN0IG1hdGNoIHNlYXJjaGluZyBmb3J3YXJkIGluIHRoZQorCWhpc3RvcnkuCisKKydzZXQtdHJlZSc6OgorCVlvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgJ2Rjb21taXQnIGluc3RlYWQgb2YgdGhpcyBjb21tYW5kLgorCUNvbW1pdCBzcGVjaWZpZWQgY29tbWl0IG9yIHRyZWUgb2JqZWN0cyB0byBTVk4uICBUaGlzIHJlbGllcyBvbgorCXlvdXIgaW1wb3J0ZWQgZmV0Y2ggZGF0YSBiZWluZyB1cC10by1kYXRlLiAgVGhpcyBtYWtlcworCWFic29sdXRlbHkgbm8gYXR0ZW1wdHMgdG8gZG8gcGF0Y2hpbmcgd2hlbiBjb21taXR0aW5nIHRvIFNWTiwgaXQKKwlzaW1wbHkgb3ZlcndyaXRlcyBmaWxlcyB3aXRoIHRob3NlIHNwZWNpZmllZCBpbiB0aGUgdHJlZSBvcgorCWNvbW1pdC4gIEFsbCBtZXJnaW5nIGlzIGFzc3VtZWQgdG8gaGF2ZSB0YWtlbiBwbGFjZQorCWluZGVwZW5kZW50bHkgb2YgJ2dpdCBzdm4nIGZ1bmN0aW9ucy4KKworJ2NyZWF0ZS1pZ25vcmUnOjoKKwlSZWN1cnNpdmVseSBmaW5kcyB0aGUgc3ZuOmlnbm9yZSBwcm9wZXJ0eSBvbiBkaXJlY3RvcmllcyBhbmQKKwljcmVhdGVzIG1hdGNoaW5nIC5naXRpZ25vcmUgZmlsZXMuIFRoZSByZXN1bHRpbmcgZmlsZXMgYXJlIHN0YWdlZCB0bworCWJlIGNvbW1pdHRlZCwgYnV0IGFyZSBub3QgY29tbWl0dGVkLiBVc2UgLXIvLS1yZXZpc2lvbiB0byByZWZlciB0byBhCisJc3BlY2lmaWMgcmV2aXNpb24uCisKKydzaG93LWlnbm9yZSc6OgorCVJlY3Vyc2l2ZWx5IGZpbmRzIGFuZCBsaXN0cyB0aGUgc3ZuOmlnbm9yZSBwcm9wZXJ0eSBvbgorCWRpcmVjdG9yaWVzLiAgVGhlIG91dHB1dCBpcyBzdWl0YWJsZSBmb3IgYXBwZW5kaW5nIHRvCisJdGhlICRHSVRfRElSL2luZm8vZXhjbHVkZSBmaWxlLgorCisnbWtkaXJzJzo6CisJQXR0ZW1wdHMgdG8gcmVjcmVhdGUgZW1wdHkgZGlyZWN0b3JpZXMgdGhhdCBjb3JlIEdpdCBjYW5ub3QgdHJhY2sKKwliYXNlZCBvbiBpbmZvcm1hdGlvbiBpbiAkR0lUX0RJUi9zdm4vPHJlZm5hbWU+L3VuaGFuZGxlZC5sb2cgZmlsZXMuCisJRW1wdHkgZGlyZWN0b3JpZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVjcmVhdGVkIHdoZW4gdXNpbmcKKwkiZ2l0IHN2biBjbG9uZSIgYW5kICJnaXQgc3ZuIHJlYmFzZSIsIHNvICJta2RpcnMiIGlzIGludGVuZGVkCisJZm9yIHVzZSBhZnRlciBjb21tYW5kcyBsaWtlICJnaXQgY2hlY2tvdXQiIG9yICJnaXQgcmVzZXQiLgorCShTZWUgdGhlIHN2bi1yZW1vdGUuPG5hbWU+LmF1dG9ta2RpcnMgY29uZmlnIGZpbGUgb3B0aW9uIGZvcgorCW1vcmUgaW5mb3JtYXRpb24uKQorCisnY29tbWl0LWRpZmYnOjoKKwlDb21taXRzIHRoZSBkaWZmIG9mIHR3byB0cmVlLWlzaCBhcmd1bWVudHMgZnJvbSB0aGUKKwljb21tYW5kLWxpbmUuICBUaGlzIGNvbW1hbmQgZG9lcyBub3QgcmVseSBvbiBiZWluZyBpbnNpZGUgYW4gYGdpdCBzdm4KKwlpbml0YC1lZCByZXBvc2l0b3J5LiAgVGhpcyBjb21tYW5kIHRha2VzIHRocmVlIGFyZ3VtZW50cywgKGEpIHRoZQorCW9yaWdpbmFsIHRyZWUgdG8gZGlmZiBhZ2FpbnN0LCAoYikgdGhlIG5ldyB0cmVlIHJlc3VsdCwgKGMpIHRoZQorCVVSTCBvZiB0aGUgdGFyZ2V0IFN1YnZlcnNpb24gcmVwb3NpdG9yeS4gIFRoZSBmaW5hbCBhcmd1bWVudAorCShVUkwpIG1heSBiZSBvbWl0dGVkIGlmIHlvdSBhcmUgd29ya2luZyBmcm9tIGEgJ2dpdCBzdm4nLWF3YXJlCisJcmVwb3NpdG9yeSAodGhhdCBoYXMgYmVlbiBgaW5pdGAtZWQgd2l0aCAnZ2l0IHN2bicpLgorCVRoZSAtcjxyZXZpc2lvbj4gb3B0aW9uIGlzIHJlcXVpcmVkIGZvciB0aGlzLgorCisnaW5mbyc6OgorCVNob3dzIGluZm9ybWF0aW9uIGFib3V0IGEgZmlsZSBvciBkaXJlY3Rvcnkgc2ltaWxhciB0byB3aGF0CisJYHN2biBpbmZvJyBwcm92aWRlcy4gIERvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IGEgLXIvLS1yZXZpc2lvbgorCWFyZ3VtZW50LiAgVXNlIHRoZSAtLXVybCBvcHRpb24gdG8gb3V0cHV0IG9ubHkgdGhlIHZhbHVlIG9mIHRoZQorCSdVUkw6JyBmaWVsZC4KKworJ3Byb3BsaXN0Jzo6CisJTGlzdHMgdGhlIHByb3BlcnRpZXMgc3RvcmVkIGluIHRoZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgYWJvdXQgYQorCWdpdmVuIGZpbGUgb3IgZGlyZWN0b3J5LiAgVXNlIC1yLy0tcmV2aXNpb24gdG8gcmVmZXIgdG8gYSBzcGVjaWZpYworCVN1YnZlcnNpb24gcmV2aXNpb24uCisKKydwcm9wZ2V0Jzo6CisJR2V0cyB0aGUgU3VidmVyc2lvbiBwcm9wZXJ0eSBnaXZlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIGZvciBhCisJZmlsZS4gIEEgc3BlY2lmaWMgcmV2aXNpb24gY2FuIGJlIHNwZWNpZmllZCB3aXRoIC1yLy0tcmV2aXNpb24uCisKKydzaG93LWV4dGVybmFscyc6OgorCVNob3dzIHRoZSBTdWJ2ZXJzaW9uIGV4dGVybmFscy4gIFVzZSAtci8tLXJldmlzaW9uIHRvIHNwZWNpZnkgYQorCXNwZWNpZmljIHJldmlzaW9uLgorCisnZ2MnOjoKKwlDb21wcmVzcyAkR0lUX0RJUi9zdm4vPHJlZm5hbWU+L3VuaGFuZGxlZC5sb2cgZmlsZXMgYW5kIHJlbW92ZQorCSRHSVRfRElSL3N2bi88cmVmbmFtZT4vaW5kZXggZmlsZXMuCisKKydyZXNldCc6OgorCVVuZG9lcyB0aGUgZWZmZWN0cyBvZiAnZmV0Y2gnIGJhY2sgdG8gdGhlIHNwZWNpZmllZCByZXZpc2lvbi4KKwlUaGlzIGFsbG93cyB5b3UgdG8gcmUtJ2ZldGNoJyBhbiBTVk4gcmV2aXNpb24uICBOb3JtYWxseSB0aGUKKwljb250ZW50cyBvZiBhbiBTVk4gcmV2aXNpb24gc2hvdWxkIG5ldmVyIGNoYW5nZSBhbmQgJ3Jlc2V0JworCXNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LiAgSG93ZXZlciwgaWYgU1ZOIHBlcm1pc3Npb25zIGNoYW5nZSwKKwlvciBpZiB5b3UgYWx0ZXIgeW91ciAtLWlnbm9yZS1wYXRocyBvcHRpb24sIGEgJ2ZldGNoJyBtYXkgZmFpbAorCXdpdGggIm5vdCBmb3VuZCBpbiBjb21taXQiIChmaWxlIG5vdCBwcmV2aW91c2x5IHZpc2libGUpIG9yCisJImNoZWNrc3VtIG1pc21hdGNoIiAobWlzc2VkIGEgbW9kaWZpY2F0aW9uKS4gIElmIHRoZSBwcm9ibGVtCisJZmlsZSBjYW5ub3QgYmUgaWdub3JlZCBmb3JldmVyICh3aXRoIC0taWdub3JlLXBhdGhzKSB0aGUgb25seQorCXdheSB0byByZXBhaXIgdGhlIHJlcG8gaXMgdG8gdXNlICdyZXNldCcuCisrCitPbmx5IHRoZSByZXZfbWFwIGFuZCByZWZzL3JlbW90ZXMvZ2l0LXN2biBhcmUgY2hhbmdlZCAoc2VlCisnJEdJVF9ESVIvc3ZuL1wqXCovLnJldl9tYXAuKicgaW4gdGhlIEZJTEVTIHNlY3Rpb24gYmVsb3cgZm9yIGRldGFpbHMpLgorRm9sbG93ICdyZXNldCcgd2l0aCBhICdmZXRjaCcgYW5kIHRoZW4gJ2dpdCByZXNldCcgb3IgJ2dpdCByZWJhc2UnIHRvCittb3ZlIGxvY2FsIGJyYW5jaGVzIG9udG8gdGhlIG5ldyB0cmVlLgorCistciA8bj47OworLS1yZXZpc2lvbj08bj47OworCVNwZWNpZnkgdGhlIG1vc3QgcmVjZW50IHJldmlzaW9uIHRvIGtlZXAuICBBbGwgbGF0ZXIgcmV2aXNpb25zCisJYXJlIGRpc2NhcmRlZC4KKy1wOzsKKy0tcGFyZW50OzsKKwlEaXNjYXJkIHRoZSBzcGVjaWZpZWQgcmV2aXNpb24gYXMgd2VsbCwga2VlcGluZyB0aGUgbmVhcmVzdAorCXBhcmVudCBpbnN0ZWFkLgorRXhhbXBsZTo7OworQXNzdW1lIHlvdSBoYXZlIGxvY2FsIGNoYW5nZXMgaW4gIm1hc3RlciIsIGJ1dCB5b3UgbmVlZCB0byByZWZldGNoICJyMiIuCisrCistLS0tLS0tLS0tLS0KKyAgICByMS0tLXIyLS0tcjMgcmVtb3Rlcy9naXQtc3ZuCisgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICBBLS0tQiBtYXN0ZXIKKy0tLS0tLS0tLS0tLQorKworRml4IHRoZSBpZ25vcmUtcGF0aHMgb3IgU1ZOIHBlcm1pc3Npb25zIHByb2JsZW0gdGhhdCBjYXVzZWQgInIyIiB0bworYmUgaW5jb21wbGV0ZSBpbiB0aGUgZmlyc3QgcGxhY2UuICBUaGVuOgorKworW3ZlcnNlXQorZ2l0IHN2biByZXNldCAtcjIgLXAKK2dpdCBzdm4gZmV0Y2gKKysKKy0tLS0tLS0tLS0tLQorICAgIHIxLS0tcjInLS1yMycgcmVtb3Rlcy9naXQtc3ZuCisgICAgICBcCisgICAgICAgcjItLS1yMy0tLUEtLS1CIG1hc3RlcgorLS0tLS0tLS0tLS0tCisrCitUaGVuIGZpeHVwICJtYXN0ZXIiIHdpdGggJ2dpdCByZWJhc2UnLgorRG8gTk9UIHVzZSAnZ2l0IG1lcmdlJyBvciB5b3VyIGhpc3Rvcnkgd2lsbCBub3QgYmUgY29tcGF0aWJsZSB3aXRoIGEKK2Z1dHVyZSAnZGNvbW1pdCchCisrCitbdmVyc2VdCitnaXQgcmViYXNlIC0tb250byByZW1vdGVzL2dpdC1zdm4gQV4gbWFzdGVyCisrCistLS0tLS0tLS0tLS0KKyAgICByMS0tLXIyJy0tcjMnIHJlbW90ZXMvZ2l0LXN2bgorICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgQSctLUInIG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK09QVElPTlMKKy0tLS0tLS0KKworLS1zaGFyZWRbPShmYWxzZXx0cnVlfHVtYXNrfGdyb3VwfGFsbHx3b3JsZHxldmVyeWJvZHkpXTo6CistLXRlbXBsYXRlPTx0ZW1wbGF0ZV9kaXJlY3Rvcnk+OjoKKwlPbmx5IHVzZWQgd2l0aCB0aGUgJ2luaXQnIGNvbW1hbmQuCisJVGhlc2UgYXJlIHBhc3NlZCBkaXJlY3RseSB0byAnZ2l0IGluaXQnLgorCistciA8YXJnPjo6CistLXJldmlzaW9uIDxhcmc+OjoKKwkgICBVc2VkIHdpdGggdGhlICdmZXRjaCcgY29tbWFuZC4KKysKK1RoaXMgYWxsb3dzIHJldmlzaW9uIHJhbmdlcyBmb3IgcGFydGlhbC9jYXV0ZXJpemVkIGhpc3RvcnkKK3RvIGJlIHN1cHBvcnRlZC4gICROVU1CRVIsICROVU1CRVIxOiROVU1CRVIyIChudW1lcmljIHJhbmdlcyksCiskTlVNQkVSOkhFQUQsIGFuZCBCQVNFOiROVU1CRVIgYXJlIGFsbCBzdXBwb3J0ZWQuCisrCitUaGlzIGNhbiBhbGxvdyB5b3UgdG8gbWFrZSBwYXJ0aWFsIG1pcnJvcnMgd2hlbiBydW5uaW5nIGZldGNoOworYnV0IGlzIGdlbmVyYWxseSBub3QgcmVjb21tZW5kZWQgYmVjYXVzZSBoaXN0b3J5IHdpbGwgYmUgc2tpcHBlZAorYW5kIGxvc3QuCisKKy06OgorLS1zdGRpbjo6CisJT25seSB1c2VkIHdpdGggdGhlICdzZXQtdHJlZScgY29tbWFuZC4KKysKK1JlYWQgYSBsaXN0IG9mIGNvbW1pdHMgZnJvbSBzdGRpbiBhbmQgY29tbWl0IHRoZW0gaW4gcmV2ZXJzZQorb3JkZXIuICBPbmx5IHRoZSBsZWFkaW5nIHNoYTEgaXMgcmVhZCBmcm9tIGVhY2ggbGluZSwgc28KKydnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZScgb3V0cHV0IGNhbiBiZSB1c2VkLgorCistLXJtZGlyOjoKKwlPbmx5IHVzZWQgd2l0aCB0aGUgJ2Rjb21taXQnLCAnc2V0LXRyZWUnIGFuZCAnY29tbWl0LWRpZmYnIGNvbW1hbmRzLgorKworUmVtb3ZlIGRpcmVjdG9yaWVzIGZyb20gdGhlIFNWTiB0cmVlIGlmIHRoZXJlIGFyZSBubyBmaWxlcyBsZWZ0CitiZWhpbmQuICBTVk4gY2FuIHZlcnNpb24gZW1wdHkgZGlyZWN0b3JpZXMsIGFuZCB0aGV5IGFyZSBub3QKK3JlbW92ZWQgYnkgZGVmYXVsdCBpZiB0aGVyZSBhcmUgbm8gZmlsZXMgbGVmdCBpbiB0aGVtLiAgR2l0CitjYW5ub3QgdmVyc2lvbiBlbXB0eSBkaXJlY3Rvcmllcy4gIEVuYWJsaW5nIHRoaXMgZmxhZyB3aWxsIG1ha2UKK3RoZSBjb21taXQgdG8gU1ZOIGFjdCBsaWtlIEdpdC4KKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi5ybWRpcgorCistZTo6CistLWVkaXQ6OgorCU9ubHkgdXNlZCB3aXRoIHRoZSAnZGNvbW1pdCcsICdzZXQtdHJlZScgYW5kICdjb21taXQtZGlmZicgY29tbWFuZHMuCisrCitFZGl0IHRoZSBjb21taXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyB0byBTVk4uICBUaGlzIGlzIG9mZiBieQorZGVmYXVsdCBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjb21taXRzLCBhbmQgZm9yY2VkIG9uIHdoZW4gY29tbWl0dGluZwordHJlZSBvYmplY3RzLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLmVkaXQKKworLWw8bnVtPjo6CistLWZpbmQtY29waWVzLWhhcmRlcjo6CisJT25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3NldC10cmVlJyBhbmQgJ2NvbW1pdC1kaWZmJyBjb21tYW5kcy4KKysKK1RoZXkgYXJlIGJvdGggcGFzc2VkIGRpcmVjdGx5IHRvICdnaXQgZGlmZi10cmVlJzsgc2VlCitsaW5rZ2l0OmdpdC1kaWZmLXRyZWVbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisrCitbdmVyc2VdCitjb25maWcga2V5OiBzdm4ubAorY29uZmlnIGtleTogc3ZuLmZpbmRjb3BpZXNoYXJkZXIKKworLUE8ZmlsZW5hbWU+OjoKKy0tYXV0aG9ycy1maWxlPTxmaWxlbmFtZT46OgorCVN5bnRheCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGZpbGUgdXNlZCBieSAnZ2l0IGN2c2ltcG9ydCc6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlsb2dpbm5hbWUgPSBKb2UgVXNlciA8dXNlckBleGFtcGxlLmNvbT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkIGFuZCAnZ2l0IHN2bicgZW5jb3VudGVycyBhbiBTVk4KK2NvbW1pdHRlciBuYW1lIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGF1dGhvcnMtZmlsZSwgJ2dpdCBzdm4nCit3aWxsIGFib3J0IG9wZXJhdGlvbi4gVGhlIHVzZXIgd2lsbCB0aGVuIGhhdmUgdG8gYWRkIHRoZQorYXBwcm9wcmlhdGUgZW50cnkuICBSZS1ydW5uaW5nIHRoZSBwcmV2aW91cyAnZ2l0IHN2bicgY29tbWFuZAorYWZ0ZXIgdGhlIGF1dGhvcnMtZmlsZSBpcyBtb2RpZmllZCBzaG91bGQgY29udGludWUgb3BlcmF0aW9uLgorKworW3ZlcnNlXQorY29uZmlnIGtleTogc3ZuLmF1dGhvcnNmaWxlCisKKy0tYXV0aG9ycy1wcm9nPTxmaWxlbmFtZT46OgorCUlmIHRoaXMgb3B0aW9uIGlzIHNwZWNpZmllZCwgZm9yIGVhY2ggU1ZOIGNvbW1pdHRlciBuYW1lIHRoYXQKKwlkb2VzIG5vdCBleGlzdCBpbiB0aGUgYXV0aG9ycyBmaWxlLCB0aGUgZ2l2ZW4gZmlsZSBpcyBleGVjdXRlZAorCXdpdGggdGhlIGNvbW1pdHRlciBuYW1lIGFzIHRoZSBmaXJzdCBhcmd1bWVudC4gIFRoZSBwcm9ncmFtIGlzCisJZXhwZWN0ZWQgdG8gcmV0dXJuIGEgc2luZ2xlIGxpbmUgb2YgdGhlIGZvcm0gIk5hbWUgPGVtYWlsPiIsCisJd2hpY2ggd2lsbCBiZSB0cmVhdGVkIGFzIGlmIGluY2x1ZGVkIGluIHRoZSBhdXRob3JzIGZpbGUuCisKKy1xOjoKKy0tcXVpZXQ6OgorCU1ha2UgJ2dpdCBzdm4nIGxlc3MgdmVyYm9zZS4gU3BlY2lmeSBhIHNlY29uZCB0aW1lIHRvIG1ha2UgaXQKKwlldmVuIGxlc3MgdmVyYm9zZS4KKworLW06OgorLS1tZXJnZTo6CistczxzdHJhdGVneT46OgorLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKKy1wOjoKKy0tcHJlc2VydmUtbWVyZ2VzOjoKKwlUaGVzZSBhcmUgb25seSB1c2VkIHdpdGggdGhlICdkY29tbWl0JyBhbmQgJ3JlYmFzZScgY29tbWFuZHMuCisrCitQYXNzZWQgZGlyZWN0bHkgdG8gJ2dpdCByZWJhc2UnIHdoZW4gdXNpbmcgJ2Rjb21taXQnIGlmIGEKKydnaXQgcmVzZXQnIGNhbm5vdCBiZSB1c2VkIChzZWUgJ2Rjb21taXQnKS4KKworLW46OgorLS1kcnktcnVuOjoKKwlUaGlzIGNhbiBiZSB1c2VkIHdpdGggdGhlICdkY29tbWl0JywgJ3JlYmFzZScsICdicmFuY2gnIGFuZAorCSd0YWcnIGNvbW1hbmRzLgorKworRm9yICdkY29tbWl0JywgcHJpbnQgb3V0IHRoZSBzZXJpZXMgb2YgR2l0IGFyZ3VtZW50cyB0aGF0IHdvdWxkIHNob3cKK3doaWNoIGRpZmZzIHdvdWxkIGJlIGNvbW1pdHRlZCB0byBTVk4uCisrCitGb3IgJ3JlYmFzZScsIGRpc3BsYXkgdGhlIGxvY2FsIGJyYW5jaCBhc3NvY2lhdGVkIHdpdGggdGhlIHVwc3RyZWFtIHN2bgorcmVwb3NpdG9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCB0aGUgVVJMIG9mIHN2bgorcmVwb3NpdG9yeSB0aGF0IHdpbGwgYmUgZmV0Y2hlZCBmcm9tLgorKworRm9yICdicmFuY2gnIGFuZCAndGFnJywgZGlzcGxheSB0aGUgdXJscyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgY29weWluZyB3aGVuCitjcmVhdGluZyB0aGUgYnJhbmNoIG9yIHRhZy4KKworLS11c2UtbG9nLWF1dGhvcjo6CisJV2hlbiByZXRyaWV2aW5nIHN2biBjb21taXRzIGludG8gR2l0IChhcyBwYXJ0IG9mICdmZXRjaCcsICdyZWJhc2UnLCBvcgorCSdkY29tbWl0JyBvcGVyYXRpb25zKSwgbG9vayBmb3IgdGhlIGZpcnN0IGBGcm9tOmAgb3IgYFNpZ25lZC1vZmYtYnk6YCBsaW5lCisJaW4gdGhlIGxvZyBtZXNzYWdlIGFuZCB1c2UgdGhhdCBhcyB0aGUgYXV0aG9yIHN0cmluZy4KKy0tYWRkLWF1dGhvci1mcm9tOjoKKwlXaGVuIGNvbW1pdHRpbmcgdG8gc3ZuIGZyb20gR2l0IChhcyBwYXJ0IG9mICdjb21taXQtZGlmZicsICdzZXQtdHJlZScgb3IgJ2Rjb21taXQnCisJb3BlcmF0aW9ucyksIGlmIHRoZSBleGlzdGluZyBsb2cgbWVzc2FnZSBkb2Vzbid0IGFscmVhZHkgaGF2ZSBhCisJYEZyb206YCBvciBgU2lnbmVkLW9mZi1ieTpgIGxpbmUsIGFwcGVuZCBhIGBGcm9tOmAgbGluZSBiYXNlZCBvbiB0aGUKKwlHaXQgY29tbWl0J3MgYXV0aG9yIHN0cmluZy4gIElmIHlvdSB1c2UgdGhpcywgdGhlbiBgLS11c2UtbG9nLWF1dGhvcmAKKwl3aWxsIHJldHJpZXZlIGEgdmFsaWQgYXV0aG9yIHN0cmluZyBmb3IgYWxsIGNvbW1pdHMuCisKKworQURWQU5DRUQgT1BUSU9OUworLS0tLS0tLS0tLS0tLS0tLQorCistaTxHSVRfU1ZOX0lEPjo6CistLWlkIDxHSVRfU1ZOX0lEPjo6CisJVGhpcyBzZXRzIEdJVF9TVk5fSUQgKGluc3RlYWQgb2YgdXNpbmcgdGhlIGVudmlyb25tZW50KS4gIFRoaXMKKwlhbGxvd3MgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcmVmbmFtZSB0byBmZXRjaCBmcm9tCisJd2hlbiB0cmFja2luZyBhIHNpbmdsZSBVUkwuICBUaGUgJ2xvZycgYW5kICdkY29tbWl0JyBjb21tYW5kcworCW5vIGxvbmdlciByZXF1aXJlIHRoaXMgc3dpdGNoIGFzIGFuIGFyZ3VtZW50LgorCistUjxyZW1vdGUgbmFtZT46OgorLS1zdm4tcmVtb3RlIDxyZW1vdGUgbmFtZT46OgorCVNwZWNpZnkgdGhlIFtzdm4tcmVtb3RlICI8cmVtb3RlIG5hbWU+Il0gc2VjdGlvbiB0byB1c2UsCisJdGhpcyBhbGxvd3MgU1ZOIG11bHRpcGxlIHJlcG9zaXRvcmllcyB0byBiZSB0cmFja2VkLgorCURlZmF1bHQ6ICJzdm4iCisKKy0tZm9sbG93LXBhcmVudDo6CisJVGhpcyBvcHRpb24gaXMgb25seSByZWxldmFudCBpZiB3ZSBhcmUgdHJhY2tpbmcgYnJhbmNoZXMgKHVzaW5nCisJb25lIG9mIHRoZSByZXBvc2l0b3J5IGxheW91dCBvcHRpb25zIC0tdHJ1bmssIC0tdGFncywKKwktLWJyYW5jaGVzLCAtLXN0ZGxheW91dCkuIEZvciBlYWNoIHRyYWNrZWQgYnJhbmNoLCB0cnkgdG8gZmluZAorCW91dCB3aGVyZSBpdHMgcmV2aXNpb24gd2FzIGNvcGllZCBmcm9tLCBhbmQgc2V0CisJYSBzdWl0YWJsZSBwYXJlbnQgaW4gdGhlIGZpcnN0IEdpdCBjb21taXQgZm9yIHRoZSBicmFuY2guCisJVGhpcyBpcyBlc3BlY2lhbGx5IGhlbHBmdWwgd2hlbiB3ZSdyZSB0cmFja2luZyBhIGRpcmVjdG9yeQorCXRoYXQgaGFzIGJlZW4gbW92ZWQgYXJvdW5kIHdpdGhpbiB0aGUgcmVwb3NpdG9yeS4gIElmIHRoaXMKKwlmZWF0dXJlIGlzIGRpc2FibGVkLCB0aGUgYnJhbmNoZXMgY3JlYXRlZCBieSAnZ2l0IHN2bicgd2lsbCBhbGwKKwliZSBsaW5lYXIgYW5kIG5vdCBzaGFyZSBhbnkgaGlzdG9yeSwgbWVhbmluZyB0aGF0IHRoZXJlIHdpbGwgYmUKKwlubyBpbmZvcm1hdGlvbiBvbiB3aGVyZSBicmFuY2hlcyB3ZXJlIGJyYW5jaGVkIG9mZiBvciBtZXJnZWQuCisJSG93ZXZlciwgZm9sbG93aW5nIGxvbmcvY29udm9sdXRlZCBoaXN0b3JpZXMgY2FuIHRha2UgYSBsb25nCisJdGltZSwgc28gZGlzYWJsaW5nIHRoaXMgZmVhdHVyZSBtYXkgc3BlZWQgdXAgdGhlIGNsb25pbmcKKwlwcm9jZXNzLiBUaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB1c2UKKwktLW5vLWZvbGxvdy1wYXJlbnQgdG8gZGlzYWJsZSBpdC4KKysKK1t2ZXJzZV0KK2NvbmZpZyBrZXk6IHN2bi5mb2xsb3dwYXJlbnQKKworQ09ORklHIEZJTEUtT05MWSBPUFRJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3ZuLm5vTWV0YWRhdGE6Ogorc3ZuLXJlbW90ZS48bmFtZT4ubm9NZXRhZGF0YTo6CisJVGhpcyBnZXRzIHJpZCBvZiB0aGUgJ2dpdC1zdm4taWQ6JyBsaW5lcyBhdCB0aGUgZW5kIG9mIGV2ZXJ5IGNvbW1pdC4KKysKK1RoaXMgb3B0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZm9yIG9uZS1zaG90IGltcG9ydHMgYXMgJ2dpdCBzdm4nCit3aWxsIG5vdCBiZSBhYmxlIHRvIGZldGNoIGFnYWluIHdpdGhvdXQgbWV0YWRhdGEuIEFkZGl0aW9uYWxseSwKK2lmIHlvdSBsb3NlIHlvdXIgJyRHSVRfRElSL3N2bi9cKlwqLy5yZXZfbWFwLionIGZpbGVzLCAnZ2l0IHN2bicgd2lsbCBub3QKK2JlIGFibGUgdG8gcmVidWlsZCB0aGVtLgorKworVGhlICdnaXQgc3ZuIGxvZycgY29tbWFuZCB3aWxsIG5vdCB3b3JrIG9uIHJlcG9zaXRvcmllcyB1c2luZwordGhpcywgZWl0aGVyLiAgVXNpbmcgdGhpcyBjb25mbGljdHMgd2l0aCB0aGUgJ3VzZVN2bVByb3BzJworb3B0aW9uIGZvciAoaG9wZWZ1bGx5KSBvYnZpb3VzIHJlYXNvbnMuCisrCitUaGlzIG9wdGlvbiBpcyBOT1QgcmVjb21tZW5kZWQgYXMgaXQgbWFrZXMgaXQgZGlmZmljdWx0IHRvIHRyYWNrIGRvd24KK29sZCByZWZlcmVuY2VzIHRvIFNWTiByZXZpc2lvbiBudW1iZXJzIGluIGV4aXN0aW5nIGRvY3VtZW50YXRpb24sIGJ1ZworcmVwb3J0cyBhbmQgYXJjaGl2ZXMuICBJZiB5b3UgcGxhbiB0byBldmVudHVhbGx5IG1pZ3JhdGUgZnJvbSBTVk4gdG8gR2l0CithbmQgYXJlIGNlcnRhaW4gYWJvdXQgZHJvcHBpbmcgU1ZOIGhpc3RvcnksIGNvbnNpZGVyCitsaW5rZ2l0OmdpdC1maWx0ZXItYnJhbmNoWzFdIGluc3RlYWQuICBmaWx0ZXItYnJhbmNoIGFsc28gYWxsb3dzCityZWZvcm1hdHRpbmcgb2YgbWV0YWRhdGEgZm9yIGVhc2Utb2YtcmVhZGluZyBhbmQgcmV3cml0aW5nIGF1dGhvcnNoaXAKK2luZm8gZm9yIG5vbi0ic3ZuLmF1dGhvcnNGaWxlIiB1c2Vycy4KKworc3ZuLnVzZVN2bVByb3BzOjoKK3N2bi1yZW1vdGUuPG5hbWU+LnVzZVN2bVByb3BzOjoKKwlUaGlzIGFsbG93cyAnZ2l0IHN2bicgdG8gcmUtbWFwIHJlcG9zaXRvcnkgVVJMcyBhbmQgVVVJRHMgZnJvbQorCW1pcnJvcnMgY3JlYXRlZCB1c2luZyBTVk46Ok1pcnJvciAob3Igc3ZrKSBmb3IgbWV0YWRhdGEuCisrCitJZiBhbiBTVk4gcmV2aXNpb24gaGFzIGEgcHJvcGVydHksICJzdm06aGVhZHJldiIsIGl0IGlzIGxpa2VseQordGhhdCB0aGUgcmV2aXNpb24gd2FzIGNyZWF0ZWQgYnkgU1ZOOjpNaXJyb3IgKGFsc28gdXNlZCBieSBTVkspLgorVGhlIHByb3BlcnR5IGNvbnRhaW5zIGEgcmVwb3NpdG9yeSBVVUlEIGFuZCBhIHJldmlzaW9uLiAgV2Ugd2FudAordG8gbWFrZSBpdCBsb29rIGxpa2Ugd2UgYXJlIG1pcnJvcmluZyB0aGUgb3JpZ2luYWwgVVJMLCBzbworaW50cm9kdWNlIGEgaGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgb3JpZ2luYWwgaWRlbnRpdHkKK1VSTCBhbmQgVVVJRCwgYW5kIHVzZSBpdCB3aGVuIGdlbmVyYXRpbmcgbWV0YWRhdGEgaW4gY29tbWl0CittZXNzYWdlcy4KKworc3ZuLnVzZVN2bnN5bmNQcm9wczo6Citzdm4tcmVtb3RlLjxuYW1lPi51c2VTdm5zeW5jcHJvcHM6OgorCVNpbWlsYXIgdG8gdGhlIHVzZVN2bVByb3BzIG9wdGlvbjsgdGhpcyBpcyBmb3IgdXNlcnMKKwlvZiB0aGUgc3Zuc3luYygxKSBjb21tYW5kIGRpc3RyaWJ1dGVkIHdpdGggU1ZOIDEuNC54IGFuZAorCWxhdGVyLgorCitzdm4tcmVtb3RlLjxuYW1lPi5yZXdyaXRlUm9vdDo6CisJVGhpcyBhbGxvd3MgdXNlcnMgdG8gY3JlYXRlIHJlcG9zaXRvcmllcyBmcm9tIGFsdGVybmF0ZQorCVVSTHMuICBGb3IgZXhhbXBsZSwgYW4gYWRtaW5pc3RyYXRvciBjb3VsZCBydW4gJ2dpdCBzdm4nIG9uIHRoZQorCXNlcnZlciBsb2NhbGx5IChhY2Nlc3NpbmcgdmlhIGZpbGU6Ly8pIGJ1dCB3aXNoIHRvIGRpc3RyaWJ1dGUKKwl0aGUgcmVwb3NpdG9yeSB3aXRoIGEgcHVibGljIGh0dHA6Ly8gb3Igc3ZuOi8vIFVSTCBpbiB0aGUKKwltZXRhZGF0YSBzbyB1c2VycyBvZiBpdCB3aWxsIHNlZSB0aGUgcHVibGljIFVSTC4KKworc3ZuLXJlbW90ZS48bmFtZT4ucmV3cml0ZVVVSUQ6OgorCVNpbWlsYXIgdG8gdGhlIHVzZVN2bVByb3BzIG9wdGlvbjsgdGhpcyBpcyBmb3IgdXNlcnMgd2hvIG5lZWQKKwl0byByZW1hcCB0aGUgVVVJRCBtYW51YWxseS4gVGhpcyBtYXkgYmUgdXNlZnVsIGluIHNpdHVhdGlvbnMKKwl3aGVyZSB0aGUgb3JpZ2luYWwgVVVJRCBpcyBub3QgYXZhaWxhYmxlIHZpYSBlaXRoZXIgdXNlU3ZtUHJvcHMKKwlvciB1c2VTdm5zeW5jUHJvcHMuCisKK3N2bi1yZW1vdGUuPG5hbWU+LnB1c2h1cmw6OgorCisJU2ltaWxhciB0byBHaXQncyAncmVtb3RlLjxuYW1lPi5wdXNodXJsJywgdGhpcyBrZXkgaXMgZGVzaWduZWQKKwl0byBiZSB1c2VkIGluIGNhc2VzIHdoZXJlICd1cmwnIHBvaW50cyB0byBhbiBTVk4gcmVwb3NpdG9yeQorCXZpYSBhIHJlYWQtb25seSB0cmFuc3BvcnQsIHRvIHByb3ZpZGUgYW4gYWx0ZXJuYXRlIHJlYWQvd3JpdGUKKwl0cmFuc3BvcnQuIEl0IGlzIGFzc3VtZWQgdGhhdCBib3RoIGtleXMgcG9pbnQgdG8gdGhlIHNhbWUKKwlyZXBvc2l0b3J5LiBVbmxpa2UgJ2NvbW1pdHVybCcsICdwdXNodXJsJyBpcyBhIGJhc2UgcGF0aC4gSWYKKwllaXRoZXIgJ2NvbW1pdHVybCcgb3IgJ3B1c2h1cmwnIGNvdWxkIGJlIHVzZWQsICdjb21taXR1cmwnCisJdGFrZXMgcHJlY2VkZW5jZS4KKworc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kOjoKKwlUaGlzIGRpc2FibGVzIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBjaGVja3MgdG8gd29ya2Fyb3VuZAorCWJyb2tlbiBzeW1saW5rcyBjaGVja2VkIGludG8gU1ZOIGJ5IGJyb2tlbiBjbGllbnRzLiAgU2V0IHRoaXMKKwlvcHRpb24gdG8gImZhbHNlIiBpZiB5b3UgdHJhY2sgYSBTVk4gcmVwb3NpdG9yeSB3aXRoIG1hbnkKKwllbXB0eSBibG9icyB0aGF0IGFyZSBub3Qgc3ltbGlua3MuICBUaGlzIG9wdGlvbiBtYXkgYmUgY2hhbmdlZAorCXdoaWxlICdnaXQgc3ZuJyBpcyBydW5uaW5nIGFuZCB0YWtlIGVmZmVjdCBvbiB0aGUgbmV4dAorCXJldmlzaW9uIGZldGNoZWQuICBJZiB1bnNldCwgJ2dpdCBzdm4nIGFzc3VtZXMgdGhpcyBvcHRpb24gdG8KKwliZSAidHJ1ZSIuCisKK3N2bi5wYXRobmFtZWVuY29kaW5nOjoKKwlUaGlzIGluc3RydWN0cyBnaXQgc3ZuIHRvIHJlY29kZSBwYXRobmFtZXMgdG8gYSBnaXZlbiBlbmNvZGluZy4KKwlJdCBjYW4gYmUgdXNlZCBieSB3aW5kb3dzIHVzZXJzIGFuZCBieSB0aG9zZSB3aG8gd29yayBpbiBub24tdXRmOAorCWxvY2FsZXMgdG8gYXZvaWQgY29ycnVwdGVkIGZpbGUgbmFtZXMgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycy4KKwlWYWxpZCBlbmNvZGluZ3MgYXJlIHRoZSBvbmVzIHN1cHBvcnRlZCBieSBQZXJsJ3MgRW5jb2RlIG1vZHVsZS4KKworc3ZuLXJlbW90ZS48bmFtZT4uYXV0b21rZGlyczo6CisJTm9ybWFsbHksIHRoZSAiZ2l0IHN2biBjbG9uZSIgYW5kICJnaXQgc3ZuIHJlYmFzZSIgY29tbWFuZHMKKwlhdHRlbXB0IHRvIHJlY3JlYXRlIGVtcHR5IGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZQorCVN1YnZlcnNpb24gcmVwb3NpdG9yeS4gIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byAiZmFsc2UiLCB0aGVuCisJZW1wdHkgZGlyZWN0b3JpZXMgd2lsbCBvbmx5IGJlIGNyZWF0ZWQgaWYgdGhlICJnaXQgc3ZuIG1rZGlycyIKKwljb21tYW5kIGlzIHJ1biBleHBsaWNpdGx5LiAgSWYgdW5zZXQsICdnaXQgc3ZuJyBhc3N1bWVzIHRoaXMKKwlvcHRpb24gdG8gYmUgInRydWUiLgorCitTaW5jZSB0aGUgbm9NZXRhZGF0YSwgcmV3cml0ZVJvb3QsIHJld3JpdGVVVUlELCB1c2VTdm5zeW5jUHJvcHMgYW5kIHVzZVN2bVByb3BzCitvcHRpb25zIGFsbCBhZmZlY3QgdGhlIG1ldGFkYXRhIGdlbmVyYXRlZCBhbmQgdXNlZCBieSAnZ2l0IHN2bic7IHRoZXkKKyptdXN0KiBiZSBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBiZWZvcmUgYW55IGhpc3RvcnkgaXMgaW1wb3J0ZWQKK2FuZCB0aGVzZSBzZXR0aW5ncyBzaG91bGQgbmV2ZXIgYmUgY2hhbmdlZCBvbmNlIHRoZXkgYXJlIHNldC4KKworQWRkaXRpb25hbGx5LCBvbmx5IG9uZSBvZiB0aGVzZSBvcHRpb25zIGNhbiBiZSB1c2VkIHBlciBzdm4tcmVtb3RlCitzZWN0aW9uIGJlY2F1c2UgdGhleSBhZmZlY3QgdGhlICdnaXQtc3ZuLWlkOicgbWV0YWRhdGEgbGluZSwgZXhjZXB0Citmb3IgcmV3cml0ZVJvb3QgYW5kIHJld3JpdGVVVUlEIHdoaWNoIGNhbiBiZSB1c2VkIHRvZ2V0aGVyLgorCisKK0JBU0lDIEVYQU1QTEVTCistLS0tLS0tLS0tLS0tLQorCitUcmFja2luZyBhbmQgY29udHJpYnV0aW5nIHRvIHRoZSB0cnVuayBvZiBhIFN1YnZlcnNpb24tbWFuYWdlZCBwcm9qZWN0CisoaWdub3JpbmcgdGFncyBhbmQgYnJhbmNoZXMpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2xvbmUgYSByZXBvIChsaWtlIGdpdCBjbG9uZSk6CisJZ2l0IHN2biBjbG9uZSBodHRwOi8vc3ZuLmV4YW1wbGUuY29tL3Byb2plY3QvdHJ1bmsKKyMgRW50ZXIgdGhlIG5ld2x5IGNsb25lZCBkaXJlY3Rvcnk6CisJY2QgdHJ1bmsKKyMgWW91IHNob3VsZCBiZSBvbiBtYXN0ZXIgYnJhbmNoLCBkb3VibGUtY2hlY2sgd2l0aCAnZ2l0IGJyYW5jaCcKKwlnaXQgYnJhbmNoCisjIERvIHNvbWUgd29yayBhbmQgY29tbWl0IGxvY2FsbHkgdG8gR2l0OgorCWdpdCBjb21taXQgLi4uCisjIFNvbWV0aGluZyBpcyBjb21taXR0ZWQgdG8gU1ZOLCByZWJhc2UgeW91ciBsb2NhbCBjaGFuZ2VzIGFnYWluc3QgdGhlCisjIGxhdGVzdCBjaGFuZ2VzIGluIFNWTjoKKwlnaXQgc3ZuIHJlYmFzZQorIyBOb3cgY29tbWl0IHlvdXIgY2hhbmdlcyAodGhhdCB3ZXJlIGNvbW1pdHRlZCBwcmV2aW91c2x5IHVzaW5nIEdpdCkgdG8gU1ZOLAorIyBhcyB3ZWxsIGFzIGF1dG9tYXRpY2FsbHkgdXBkYXRpbmcgeW91ciB3b3JraW5nIEhFQUQ6CisJZ2l0IHN2biBkY29tbWl0CisjIEFwcGVuZCBzdm46aWdub3JlIHNldHRpbmdzIHRvIHRoZSBkZWZhdWx0IEdpdCBleGNsdWRlIGZpbGU6CisJZ2l0IHN2biBzaG93LWlnbm9yZSA+PiAuZ2l0L2luZm8vZXhjbHVkZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RyYWNraW5nIGFuZCBjb250cmlidXRpbmcgdG8gYW4gZW50aXJlIFN1YnZlcnNpb24tbWFuYWdlZCBwcm9qZWN0CisoY29tcGxldGUgd2l0aCBhIHRydW5rLCB0YWdzIGFuZCBicmFuY2hlcyk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDbG9uZSBhIHJlcG8gd2l0aCBzdGFuZGFyZCBTVk4gZGlyZWN0b3J5IGxheW91dCAobGlrZSBnaXQgY2xvbmUpOgorCWdpdCBzdm4gY2xvbmUgaHR0cDovL3N2bi5leGFtcGxlLmNvbS9wcm9qZWN0IC0tc3RkbGF5b3V0IC0tcHJlZml4IHN2bi8KKyMgT3IsIGlmIHRoZSByZXBvIHVzZXMgYSBub24tc3RhbmRhcmQgZGlyZWN0b3J5IGxheW91dDoKKwlnaXQgc3ZuIGNsb25lIGh0dHA6Ly9zdm4uZXhhbXBsZS5jb20vcHJvamVjdCAtVCB0ciAtYiBicmFuY2ggLXQgdGFnIC0tcHJlZml4IHN2bi8KKyMgVmlldyBhbGwgYnJhbmNoZXMgYW5kIHRhZ3MgeW91IGhhdmUgY2xvbmVkOgorCWdpdCBicmFuY2ggLXIKKyMgQ3JlYXRlIGEgbmV3IGJyYW5jaCBpbiBTVk4KKwlnaXQgc3ZuIGJyYW5jaCB3YWxkbworIyBSZXNldCB5b3VyIG1hc3RlciB0byB0cnVuayAob3IgYW55IG90aGVyIGJyYW5jaCwgcmVwbGFjaW5nICd0cnVuaycKKyMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbmFtZSk6CisJZ2l0IHJlc2V0IC0taGFyZCBzdm4vdHJ1bmsKKyMgWW91IG1heSBvbmx5IGRjb21taXQgdG8gb25lIGJyYW5jaC90YWcvdHJ1bmsgYXQgYSB0aW1lLiAgVGhlIHVzYWdlCisjIG9mIGRjb21taXQvcmViYXNlL3Nob3ctaWdub3JlIHNob3VsZCBiZSB0aGUgc2FtZSBhcyBhYm92ZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW5pdGlhbCAnZ2l0IHN2biBjbG9uZScgY2FuIGJlIHF1aXRlIHRpbWUtY29uc3VtaW5nCisoZXNwZWNpYWxseSBmb3IgbGFyZ2UgU3VidmVyc2lvbiByZXBvc2l0b3JpZXMpLiBJZiBtdWx0aXBsZQorcGVvcGxlIChvciBvbmUgcGVyc29uIHdpdGggbXVsdGlwbGUgbWFjaGluZXMpIHdhbnQgdG8gdXNlCisnZ2l0IHN2bicgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgc2FtZSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnksIHlvdSBjYW4KK2RvIHRoZSBpbml0aWFsICdnaXQgc3ZuIGNsb25lJyB0byBhIHJlcG9zaXRvcnkgb24gYSBzZXJ2ZXIgYW5kCitoYXZlIGVhY2ggcGVyc29uIGNsb25lIHRoYXQgcmVwb3NpdG9yeSB3aXRoICdnaXQgY2xvbmUnOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRG8gdGhlIGluaXRpYWwgaW1wb3J0IG9uIGEgc2VydmVyCisJc3NoIHNlcnZlciAiY2QgL3B1YiAmJiBnaXQgc3ZuIGNsb25lIGh0dHA6Ly9zdm4uZXhhbXBsZS5jb20vcHJvamVjdCBbb3B0aW9ucy4uLl0iCisjIENsb25lIGxvY2FsbHkgLSBtYWtlIHN1cmUgdGhlIHJlZnMvcmVtb3Rlcy8gc3BhY2UgbWF0Y2hlcyB0aGUgc2VydmVyCisJbWtkaXIgcHJvamVjdAorCWNkIHByb2plY3QKKwlnaXQgaW5pdAorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiBzZXJ2ZXI6L3B1Yi9wcm9qZWN0CisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIHJlbW90ZS5vcmlnaW4uZmV0Y2ggJytyZWZzL3JlbW90ZXMvKjpyZWZzL3JlbW90ZXMvKicKKwlnaXQgZmV0Y2gKKyMgUHJldmVudCBmZXRjaC9wdWxsIGZyb20gcmVtb3RlIEdpdCBzZXJ2ZXIgaW4gdGhlIGZ1dHVyZSwKKyMgd2Ugb25seSB3YW50IHRvIHVzZSBnaXQgc3ZuIGZvciBmdXR1cmUgdXBkYXRlcworCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiByZW1vdGUub3JpZ2luCisjIENyZWF0ZSBhIGxvY2FsIGJyYW5jaCBmcm9tIG9uZSBvZiB0aGUgYnJhbmNoZXMganVzdCBmZXRjaGVkCisJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBGRVRDSF9IRUFECisjIEluaXRpYWxpemUgJ2dpdCBzdm4nIGxvY2FsbHkgKGJlIHN1cmUgdG8gdXNlIHRoZSBzYW1lIFVSTCBhbmQKKyMgLS1zdGRsYXlvdXQvLVQvLWIvLXQvLS1wcmVmaXggb3B0aW9ucyBhcyB3ZXJlIHVzZWQgb24gc2VydmVyKQorCWdpdCBzdm4gaW5pdCBodHRwOi8vc3ZuLmV4YW1wbGUuY29tL3Byb2plY3QgW29wdGlvbnMuLi5dCisjIFB1bGwgdGhlIGxhdGVzdCBjaGFuZ2VzIGZyb20gU3VidmVyc2lvbgorCWdpdCBzdm4gcmViYXNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUkVCQVNFIFZTLiBQVUxML01FUkdFCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ByZWZlciB0byB1c2UgJ2dpdCBzdm4gcmViYXNlJyBvciAnZ2l0IHJlYmFzZScsIHJhdGhlciB0aGFuCisnZ2l0IHB1bGwnIG9yICdnaXQgbWVyZ2UnIHRvIHN5bmNocm9uaXplIHVuaW50ZWdyYXRlZCBjb21taXRzIHdpdGggYSAnZ2l0IHN2bicKK2JyYW5jaC4gRG9pbmcgc28gd2lsbCBrZWVwIHRoZSBoaXN0b3J5IG9mIHVuaW50ZWdyYXRlZCBjb21taXRzIGxpbmVhciB3aXRoCityZXNwZWN0IHRvIHRoZSB1cHN0cmVhbSBTVk4gcmVwb3NpdG9yeSBhbmQgYWxsb3cgdGhlIHVzZSBvZiB0aGUgcHJlZmVycmVkCisnZ2l0IHN2biBkY29tbWl0JyBzdWJjb21tYW5kIHRvIHB1c2ggdW5pbnRlZ3JhdGVkIGNvbW1pdHMgYmFjayBpbnRvIFNWTi4KKworT3JpZ2luYWxseSwgJ2dpdCBzdm4nIHJlY29tbWVuZGVkIHRoYXQgZGV2ZWxvcGVycyBwdWxsZWQgb3IgbWVyZ2VkIGZyb20KK3RoZSAnZ2l0IHN2bicgYnJhbmNoLiAgVGhpcyB3YXMgYmVjYXVzZSB0aGUgYXV0aG9yIGZhdm9yZWQKK2BnaXQgc3ZuIHNldC10cmVlIEJgIHRvIGNvbW1pdCBhIHNpbmdsZSBoZWFkIHJhdGhlciB0aGFuIHRoZQorYGdpdCBzdm4gc2V0LXRyZWUgQS4uQmAgbm90YXRpb24gdG8gY29tbWl0IG11bHRpcGxlIGNvbW1pdHMuIFVzZSBvZgorJ2dpdCBwdWxsJyBvciAnZ2l0IG1lcmdlJyB3aXRoIGBnaXQgc3ZuIHNldC10cmVlIEEuLkJgIHdpbGwgY2F1c2Ugbm9uLWxpbmVhcgoraGlzdG9yeSB0byBiZSBmbGF0dGVuZWQgd2hlbiBjb21taXR0aW5nIGludG8gU1ZOIGFuZCB0aGlzIGNhbiBsZWFkIHRvIG1lcmdlCitjb21taXRzIHVuZXhwZWN0ZWRseSByZXZlcnNpbmcgcHJldmlvdXMgY29tbWl0cyBpbiBTVk4uCisKK01FUkdFIFRSQUNLSU5HCistLS0tLS0tLS0tLS0tLQorV2hpbGUgJ2dpdCBzdm4nIGNhbiB0cmFjaworY29weSBoaXN0b3J5IChpbmNsdWRpbmcgYnJhbmNoZXMgYW5kIHRhZ3MpIGZvciByZXBvc2l0b3JpZXMgYWRvcHRpbmcgYQorc3RhbmRhcmQgbGF5b3V0LCBpdCBjYW5ub3QgeWV0IHJlcHJlc2VudCBtZXJnZSBoaXN0b3J5IHRoYXQgaGFwcGVuZWQKK2luc2lkZSBnaXQgYmFjayB1cHN0cmVhbSB0byBTVk4gdXNlcnMuICBUaGVyZWZvcmUgaXQgaXMgYWR2aXNlZCB0aGF0Cit1c2VycyBrZWVwIGhpc3RvcnkgYXMgbGluZWFyIGFzIHBvc3NpYmxlIGluc2lkZSBHaXQgdG8gZWFzZQorY29tcGF0aWJpbGl0eSB3aXRoIFNWTiAoc2VlIHRoZSBDQVZFQVRTIHNlY3Rpb24gYmVsb3cpLgorCitIQU5ETElORyBPRiBTVk4gQlJBTkNIRVMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSWYgJ2dpdCBzdm4nIGlzIGNvbmZpZ3VyZWQgdG8gZmV0Y2ggYnJhbmNoZXMgKGFuZCAtLWZvbGxvdy1icmFuY2hlcworaXMgaW4gZWZmZWN0KSwgaXQgc29tZXRpbWVzIGNyZWF0ZXMgbXVsdGlwbGUgR2l0IGJyYW5jaGVzIGZvciBvbmUKK1NWTiBicmFuY2gsIHdoZXJlIHRoZSBhZGRpdGlvbmFsIGJyYW5jaGVzIGhhdmUgbmFtZXMgb2YgdGhlIGZvcm0KKydicmFuY2huYW1lQG5ubicgKHdpdGggbm5uIGFuIFNWTiByZXZpc2lvbiBudW1iZXIpLiAgVGhlc2UgYWRkaXRpb25hbAorYnJhbmNoZXMgYXJlIGNyZWF0ZWQgaWYgJ2dpdCBzdm4nIGNhbm5vdCBmaW5kIGEgcGFyZW50IGNvbW1pdCBmb3IgdGhlCitmaXJzdCBjb21taXQgaW4gYW4gU1ZOIGJyYW5jaCwgdG8gY29ubmVjdCB0aGUgYnJhbmNoIHRvIHRoZSBoaXN0b3J5IG9mCit0aGUgb3RoZXIgYnJhbmNoZXMuCisKK05vcm1hbGx5LCB0aGUgZmlyc3QgY29tbWl0IGluIGFuIFNWTiBicmFuY2ggY29uc2lzdHMKK29mIGEgY29weSBvcGVyYXRpb24uICdnaXQgc3ZuJyB3aWxsIHJlYWQgdGhpcyBjb21taXQgdG8gZ2V0IHRoZSBTVk4KK3JldmlzaW9uIHRoZSBicmFuY2ggd2FzIGNyZWF0ZWQgZnJvbS4gSXQgd2lsbCB0aGVuIHRyeSB0byBmaW5kIHRoZQorR2l0IGNvbW1pdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgU1ZOIHJldmlzaW9uLCBhbmQgdXNlIHRoYXQgYXMgdGhlCitwYXJlbnQgb2YgdGhlIGJyYW5jaC4gSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBubyBzdWl0YWJsZQorR2l0IGNvbW1pdCB0byBzZXJ2ZSBhcyBwYXJlbnQuICBUaGlzIHdpbGwgaGFwcGVuLCBhbW9uZyBvdGhlciByZWFzb25zLAoraWYgdGhlIFNWTiBicmFuY2ggaXMgYSBjb3B5IG9mIGEgcmV2aXNpb24gdGhhdCB3YXMgbm90IGZldGNoZWQgYnkgJ2dpdAorc3ZuJyAoZS5nLiBiZWNhdXNlIGl0IGlzIGFuIG9sZCByZXZpc2lvbiB0aGF0IHdhcyBza2lwcGVkIHdpdGgKKyctLXJldmlzaW9uJyksIG9yIGlmIGluIFNWTiBhIGRpcmVjdG9yeSB3YXMgY29waWVkIHRoYXQgaXMgbm90IHRyYWNrZWQKK2J5ICdnaXQgc3ZuJyAoc3VjaCBhcyBhIGJyYW5jaCB0aGF0IGlzIG5vdCB0cmFja2VkIGF0IGFsbCwgb3IgYQorc3ViZGlyZWN0b3J5IG9mIGEgdHJhY2tlZCBicmFuY2gpLiBJbiB0aGVzZSBjYXNlcywgJ2dpdCBzdm4nIHdpbGwgc3RpbGwKK2NyZWF0ZSBhIEdpdCBicmFuY2gsIGJ1dCBpbnN0ZWFkIG9mIHVzaW5nIGFuIGV4aXN0aW5nIEdpdCBjb21taXQgYXMgdGhlCitwYXJlbnQgb2YgdGhlIGJyYW5jaCwgaXQgd2lsbCByZWFkIHRoZSBTVk4gaGlzdG9yeSBvZiB0aGUgZGlyZWN0b3J5IHRoZQorYnJhbmNoIHdhcyBjb3BpZWQgZnJvbSBhbmQgY3JlYXRlIGFwcHJvcHJpYXRlIEdpdCBjb21taXRzLiAgVGhpcyBpcworaW5kaWNhdGVkIGJ5IHRoZSBtZXNzYWdlICJJbml0aWFsaXppbmcgcGFyZW50OiA8YnJhbmNobmFtZT4iLgorCitBZGRpdGlvbmFsbHksIGl0IHdpbGwgY3JlYXRlIGEgc3BlY2lhbCBicmFuY2ggbmFtZWQKKyc8YnJhbmNobmFtZT5APFNWTi1SZXZpc2lvbj4nLCB3aGVyZSA8U1ZOLVJldmlzaW9uPiBpcyB0aGUgU1ZOIHJldmlzaW9uCitudW1iZXIgdGhlIGJyYW5jaCB3YXMgY29waWVkIGZyb20uICBUaGlzIGJyYW5jaCB3aWxsIHBvaW50IHRvIHRoZSBuZXdseQorY3JlYXRlZCBwYXJlbnQgY29tbWl0IG9mIHRoZSBicmFuY2guICBJZiBpbiBTVk4gdGhlIGJyYW5jaCB3YXMgZGVsZXRlZAorYW5kIGxhdGVyIHJlY3JlYXRlZCBmcm9tIGEgZGlmZmVyZW50IHZlcnNpb24sIHRoZXJlIHdpbGwgYmUgbXVsdGlwbGUKK3N1Y2ggYnJhbmNoZXMgd2l0aCBhbiAnQCcuCisKK05vdGUgdGhhdCB0aGlzIG1heSBtZWFuIHRoYXQgbXVsdGlwbGUgR2l0IGNvbW1pdHMgYXJlIGNyZWF0ZWQgZm9yIGEKK3NpbmdsZSBTVk4gcmV2aXNpb24uCisKK0FuIGV4YW1wbGU6IGluIGFuIFNWTiByZXBvc2l0b3J5IHdpdGggYSBzdGFuZGFyZAordHJ1bmsvdGFncy9icmFuY2hlcyBsYXlvdXQsIGEgZGlyZWN0b3J5IHRydW5rL3N1YiBpcyBjcmVhdGVkIGluIHIuMTAwLgorSW4gci4yMDAsIHRydW5rL3N1YiBpcyBicmFuY2hlZCBieSBjb3B5aW5nIGl0IHRvIGJyYW5jaGVzLy4gJ2dpdCBzdm4KK2Nsb25lIC1zJyB3aWxsIHRoZW4gY3JlYXRlIGEgYnJhbmNoICdzdWInLiBJdCB3aWxsIGFsc28gY3JlYXRlIG5ldyBHaXQKK2NvbW1pdHMgZm9yIHIuMTAwIHRocm91Z2ggci4xOTkgYW5kIHVzZSB0aGVzZSBhcyB0aGUgaGlzdG9yeSBvZiBicmFuY2gKKydzdWInLiBUaHVzIHRoZXJlIHdpbGwgYmUgdHdvIEdpdCBjb21taXRzIGZvciBlYWNoIHJldmlzaW9uIGZyb20gci4xMDAKK3RvIHIuMTk5IChvbmUgY29udGFpbmluZyB0cnVuay8sIG9uZSBjb250YWluaW5nIHRydW5rL3N1Yi8pLiBGaW5hbGx5LAoraXQgd2lsbCBjcmVhdGUgYSBicmFuY2ggJ3N1YkAyMDAnIHBvaW50aW5nIHRvIHRoZSBuZXcgcGFyZW50IGNvbW1pdCBvZgorYnJhbmNoICdzdWInIChpLmUuIHRoZSBjb21taXQgZm9yIHIuMjAwIGFuZCB0cnVuay9zdWIvKS4KKworQ0FWRUFUUworLS0tLS0tLQorCitGb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eSBhbmQgaW50ZXJvcGVyYXRpbmcgd2l0aCBTdWJ2ZXJzaW9uLAoraXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgJ2dpdCBzdm4nIHVzZXJzIGNsb25lLCBmZXRjaCBhbmQgZGNvbW1pdAorZGlyZWN0bHkgZnJvbSB0aGUgU1ZOIHNlcnZlciwgYW5kIGF2b2lkIGFsbCAnZ2l0IGNsb25lJy8ncHVsbCcvJ21lcmdlJy8ncHVzaCcKK29wZXJhdGlvbnMgYmV0d2VlbiBHaXQgcmVwb3NpdG9yaWVzIGFuZCBicmFuY2hlcy4gIFRoZSByZWNvbW1lbmRlZAorbWV0aG9kIG9mIGV4Y2hhbmdpbmcgY29kZSBiZXR3ZWVuIEdpdCBicmFuY2hlcyBhbmQgdXNlcnMgaXMKKydnaXQgZm9ybWF0LXBhdGNoJyBhbmQgJ2dpdCBhbScsIG9yIGp1c3QgJ2Rjb21taXQnaW5nIHRvIHRoZSBTVk4gcmVwb3NpdG9yeS4KKworUnVubmluZyAnZ2l0IG1lcmdlJyBvciAnZ2l0IHB1bGwnIGlzIE5PVCByZWNvbW1lbmRlZCBvbiBhIGJyYW5jaCB5b3UKK3BsYW4gdG8gJ2Rjb21taXQnIGZyb20gYmVjYXVzZSBTdWJ2ZXJzaW9uIHVzZXJzIGNhbm5vdCBzZWUgYW55CittZXJnZXMgeW91J3ZlIG1hZGUuICBGdXJ0aGVybW9yZSwgaWYgeW91IG1lcmdlIG9yIHB1bGwgZnJvbSBhIEdpdCBicmFuY2gKK3RoYXQgaXMgYSBtaXJyb3Igb2YgYW4gU1ZOIGJyYW5jaCwgJ2Rjb21taXQnIG1heSBjb21taXQgdG8gdGhlIHdyb25nCiticmFuY2guCisKK0lmIHlvdSBkbyBtZXJnZSwgbm90ZSB0aGUgZm9sbG93aW5nIHJ1bGU6ICdnaXQgc3ZuIGRjb21taXQnIHdpbGwKK2F0dGVtcHQgdG8gY29tbWl0IG9uIHRvcCBvZiB0aGUgU1ZOIGNvbW1pdCBuYW1lZCBpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnaXQgbG9nIC0tZ3JlcD1eZ2l0LXN2bi1pZDogLS1maXJzdC1wYXJlbnQgLTEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWW91ICdtdXN0JyB0aGVyZWZvcmUgZW5zdXJlIHRoYXQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvZiB0aGUgYnJhbmNoCit5b3Ugd2FudCB0byBkY29tbWl0IHRvIGlzIHRoZSAnZmlyc3QnIHBhcmVudCBvZiB0aGUgbWVyZ2UuICBDaGFvcyB3aWxsCitlbnN1ZSBvdGhlcndpc2UsIGVzcGVjaWFsbHkgaWYgdGhlIGZpcnN0IHBhcmVudCBpcyBhbiBvbGRlciBjb21taXQgb24KK3RoZSBzYW1lIFNWTiBicmFuY2guCisKKydnaXQgY2xvbmUnIGRvZXMgbm90IGNsb25lIGJyYW5jaGVzIHVuZGVyIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSBvcgorYW55ICdnaXQgc3ZuJyBtZXRhZGF0YSwgb3IgY29uZmlnLiAgU28gcmVwb3NpdG9yaWVzIGNyZWF0ZWQgYW5kIG1hbmFnZWQgd2l0aAordXNpbmcgJ2dpdCBzdm4nIHNob3VsZCB1c2UgJ3JzeW5jJyBmb3IgY2xvbmluZywgaWYgY2xvbmluZyBpcyB0byBiZSBkb25lCithdCBhbGwuCisKK1NpbmNlICdkY29tbWl0JyB1c2VzIHJlYmFzZSBpbnRlcm5hbGx5LCBhbnkgR2l0IGJyYW5jaGVzIHlvdSAnZ2l0IHB1c2gnIHRvCitiZWZvcmUgJ2Rjb21taXQnIG9uIHdpbGwgcmVxdWlyZSBmb3JjaW5nIGFuIG92ZXJ3cml0ZSBvZiB0aGUgZXhpc3RpbmcgcmVmCitvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuICBUaGlzIGlzIGdlbmVyYWxseSBjb25zaWRlcmVkIGJhZCBwcmFjdGljZSwKK3NlZSB0aGUgbGlua2dpdDpnaXQtcHVzaFsxXSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorCitEbyBub3QgdXNlIHRoZSAtLWFtZW5kIG9wdGlvbiBvZiBsaW5rZ2l0OmdpdC1jb21taXRbMV0gb24gYSBjaGFuZ2UgeW91J3ZlCithbHJlYWR5IGRjb21taXR0ZWQuICBJdCBpcyBjb25zaWRlcmVkIGJhZCBwcmFjdGljZSB0byAtLWFtZW5kIGNvbW1pdHMKK3lvdSd2ZSBhbHJlYWR5IHB1c2hlZCB0byBhIHJlbW90ZSByZXBvc2l0b3J5IGZvciBvdGhlciB1c2VycywgYW5kCitkY29tbWl0IHdpdGggU1ZOIGlzIGFuYWxvZ291cyB0byB0aGF0LgorCitXaGVuIGNsb25pbmcgYW4gU1ZOIHJlcG9zaXRvcnksIGlmIG5vbmUgb2YgdGhlIG9wdGlvbnMgZm9yIGRlc2NyaWJpbmcKK3RoZSByZXBvc2l0b3J5IGxheW91dCBpcyB1c2VkICgtLXRydW5rLCAtLXRhZ3MsIC0tYnJhbmNoZXMsCistLXN0ZGxheW91dCksICdnaXQgc3ZuIGNsb25lJyB3aWxsIGNyZWF0ZSBhIEdpdCByZXBvc2l0b3J5IHdpdGgKK2NvbXBsZXRlbHkgbGluZWFyIGhpc3RvcnksIHdoZXJlIGJyYW5jaGVzIGFuZCB0YWdzIGFwcGVhciBhcyBzZXBhcmF0ZQorZGlyZWN0b3JpZXMgaW4gdGhlIHdvcmtpbmcgY29weS4gIFdoaWxlIHRoaXMgaXMgdGhlIGVhc2llc3Qgd2F5IHRvIGdldCBhCitjb3B5IG9mIGEgY29tcGxldGUgcmVwb3NpdG9yeSwgZm9yIHByb2plY3RzIHdpdGggbWFueSBicmFuY2hlcyBpdCB3aWxsCitsZWFkIHRvIGEgd29ya2luZyBjb3B5IG1hbnkgdGltZXMgbGFyZ2VyIHRoYW4ganVzdCB0aGUgdHJ1bmsuIFRodXMgZm9yCitwcm9qZWN0cyB1c2luZyB0aGUgc3RhbmRhcmQgZGlyZWN0b3J5IHN0cnVjdHVyZSAodHJ1bmsvYnJhbmNoZXMvdGFncyksCitpdCBpcyByZWNvbW1lbmRlZCB0byBjbG9uZSB3aXRoIG9wdGlvbiAnLS1zdGRsYXlvdXQnLiBJZiB0aGUgcHJvamVjdAordXNlcyBhIG5vbi1zdGFuZGFyZCBzdHJ1Y3R1cmUsIGFuZC9vciBpZiBicmFuY2hlcyBhbmQgdGFncyBhcmUgbm90CityZXF1aXJlZCwgaXQgaXMgZWFzaWVzdCB0byBvbmx5IGNsb25lIG9uZSBkaXJlY3RvcnkgKHR5cGljYWxseSB0cnVuayksCit3aXRob3V0IGdpdmluZyBhbnkgcmVwb3NpdG9yeSBsYXlvdXQgb3B0aW9ucy4gIElmIHRoZSBmdWxsIGhpc3Rvcnkgd2l0aAorYnJhbmNoZXMgYW5kIHRhZ3MgaXMgcmVxdWlyZWQsIHRoZSBvcHRpb25zICctLXRydW5rJyAvICctLWJyYW5jaGVzJyAvCisnLS10YWdzJyBtdXN0IGJlIHVzZWQuCisKK1doZW4gdXNpbmcgbXVsdGlwbGUgLS1icmFuY2hlcyBvciAtLXRhZ3MsICdnaXQgc3ZuJyBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5CitoYW5kbGUgbmFtZSBjb2xsaXNpb25zIChmb3IgZXhhbXBsZSwgaWYgdHdvIGJyYW5jaGVzIGZyb20gZGlmZmVyZW50IHBhdGhzIGhhdmUKK3RoZSBzYW1lIG5hbWUsIG9yIGlmIGEgYnJhbmNoIGFuZCBhIHRhZyBoYXZlIHRoZSBzYW1lIG5hbWUpLiAgSW4gdGhlc2UgY2FzZXMsCit1c2UgJ2luaXQnIHRvIHNldCB1cCB5b3VyIEdpdCByZXBvc2l0b3J5IHRoZW4sIGJlZm9yZSB5b3VyIGZpcnN0ICdmZXRjaCcsIGVkaXQKK3RoZSAkR0lUX0RJUi9jb25maWcgZmlsZSBzbyB0aGF0IHRoZSBicmFuY2hlcyBhbmQgdGFncyBhcmUgYXNzb2NpYXRlZAord2l0aCBkaWZmZXJlbnQgbmFtZSBzcGFjZXMuICBGb3IgZXhhbXBsZToKKworCWJyYW5jaGVzID0gc3RhYmxlLyo6cmVmcy9yZW1vdGVzL3N2bi9zdGFibGUvKgorCWJyYW5jaGVzID0gZGVidWcvKjpyZWZzL3JlbW90ZXMvc3ZuL2RlYnVnLyoKKworQlVHUworLS0tLQorCitXZSBpZ25vcmUgYWxsIFNWTiBwcm9wZXJ0aWVzIGV4Y2VwdCBzdm46ZXhlY3V0YWJsZS4gIEFueSB1bmhhbmRsZWQKK3Byb3BlcnRpZXMgYXJlIGxvZ2dlZCB0byAkR0lUX0RJUi9zdm4vPHJlZm5hbWU+L3VuaGFuZGxlZC5sb2cKKworUmVuYW1lZCBhbmQgY29waWVkIGRpcmVjdG9yaWVzIGFyZSBub3QgZGV0ZWN0ZWQgYnkgR2l0IGFuZCBoZW5jZSBub3QKK3RyYWNrZWQgd2hlbiBjb21taXR0aW5nIHRvIFNWTi4gIEkgZG8gbm90IHBsYW4gb24gYWRkaW5nIHN1cHBvcnQgZm9yCit0aGlzIGFzIGl0J3MgcXVpdGUgZGlmZmljdWx0IGFuZCB0aW1lLWNvbnN1bWluZyB0byBnZXQgd29ya2luZyBmb3IgYWxsCit0aGUgcG9zc2libGUgY29ybmVyIGNhc2VzIChHaXQgZG9lc24ndCBkbyBpdCwgZWl0aGVyKS4gIENvbW1pdHRpbmcKK3JlbmFtZWQgYW5kIGNvcGllZCBmaWxlcyBpcyBmdWxseSBzdXBwb3J0ZWQgaWYgdGhleSdyZSBzaW1pbGFyIGVub3VnaAorZm9yIEdpdCB0byBkZXRlY3QgdGhlbS4KKworSW4gU1ZOLCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIGRpc2NvdXJhZ2VkKSB0byBjb21taXQgY2hhbmdlcyB0byBhIHRhZworKGJlY2F1c2UgYSB0YWcgaXMganVzdCBhIGRpcmVjdG9yeSBjb3B5LCB0aHVzIHRlY2huaWNhbGx5IHRoZSBzYW1lIGFzIGEKK2JyYW5jaCkuIFdoZW4gY2xvbmluZyBhbiBTVk4gcmVwb3NpdG9yeSwgJ2dpdCBzdm4nIGNhbm5vdCBrbm93IGlmIHN1Y2ggYQorY29tbWl0IHRvIGEgdGFnIHdpbGwgaGFwcGVuIGluIHRoZSBmdXR1cmUuIFRodXMgaXQgYWN0cyBjb25zZXJ2YXRpdmVseQorYW5kIGltcG9ydHMgYWxsIFNWTiB0YWdzIGFzIGJyYW5jaGVzLCBwcmVmaXhpbmcgdGhlIHRhZyBuYW1lIHdpdGggJ3RhZ3MvJy4KKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorCisnZ2l0IHN2bicgc3RvcmVzIFtzdm4tcmVtb3RlXSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGluIHRoZQorcmVwb3NpdG9yeSAkR0lUX0RJUi9jb25maWcgZmlsZS4gIEl0IGlzIHNpbWlsYXIgdGhlIGNvcmUgR2l0CitbcmVtb3RlXSBzZWN0aW9ucyBleGNlcHQgJ2ZldGNoJyBrZXlzIGRvIG5vdCBhY2NlcHQgZ2xvYgorYXJndW1lbnRzOyBidXQgdGhleSBhcmUgaW5zdGVhZCBoYW5kbGVkIGJ5IHRoZSAnYnJhbmNoZXMnCithbmQgJ3RhZ3MnIGtleXMuICBTaW5jZSBzb21lIFNWTiByZXBvc2l0b3JpZXMgYXJlIG9kZGx5Citjb25maWd1cmVkIHdpdGggbXVsdGlwbGUgcHJvamVjdHMgZ2xvYiBleHBhbnNpb25zIHN1Y2ggdGhvc2UKK2xpc3RlZCBiZWxvdyBhcmUgYWxsb3dlZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbc3ZuLXJlbW90ZSAicHJvamVjdC1hIl0KKwl1cmwgPSBodHRwOi8vc2VydmVyLm9yZy9zdm4KKwlmZXRjaCA9IHRydW5rL3Byb2plY3QtYTpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL3RydW5rCisJYnJhbmNoZXMgPSBicmFuY2hlcy8qL3Byb2plY3QtYTpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL2JyYW5jaGVzLyoKKwl0YWdzID0gdGFncy8qL3Byb2plY3QtYTpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL3RhZ3MvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0tlZXAgaW4gbWluZCB0aGF0IHRoZSAnXConIChhc3Rlcmlzaykgd2lsZGNhcmQgb2YgdGhlIGxvY2FsIHJlZgorKHJpZ2h0IG9mIHRoZSAnOicpICptdXN0KiBiZSB0aGUgZmFydGhlc3QgcmlnaHQgcGF0aCBjb21wb25lbnQ7Citob3dldmVyIHRoZSByZW1vdGUgd2lsZGNhcmQgbWF5IGJlIGFueXdoZXJlIGFzIGxvbmcgYXMgaXQncyBhbgoraW5kZXBlbmRlbnQgcGF0aCBjb21wb25lbnQgKHN1cnJvdW5kZWQgYnkgJy8nIG9yIEVPTCkuICAgVGhpcwordHlwZSBvZiBjb25maWd1cmF0aW9uIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgYnkgJ2luaXQnIGFuZAorc2hvdWxkIGJlIG1hbnVhbGx5IGVudGVyZWQgd2l0aCBhIHRleHQtZWRpdG9yIG9yIHVzaW5nICdnaXQgY29uZmlnJy4KKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBmZXRjaCBhIHN1YnNldCBvZiBicmFuY2hlcyBvciB0YWdzIGJ5IHVzaW5nIGEKK2NvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG5hbWVzIHdpdGhpbiBicmFjZXMuIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tzdm4tcmVtb3RlICJodWdlLXByb2plY3QiXQorCXVybCA9IGh0dHA6Ly9zZXJ2ZXIub3JnL3N2bgorCWZldGNoID0gdHJ1bmsvc3JjOnJlZnMvcmVtb3Rlcy90cnVuaworCWJyYW5jaGVzID0gYnJhbmNoZXMve3JlZCxncmVlbn0vc3JjOnJlZnMvcmVtb3Rlcy9wcm9qZWN0LWEvYnJhbmNoZXMvKgorCXRhZ3MgPSB0YWdzL3sxLjAsMi4wfS9zcmM6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS90YWdzLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNdWx0aXBsZSBmZXRjaCwgYnJhbmNoZXMsIGFuZCB0YWdzIGtleXMgYXJlIHN1cHBvcnRlZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbc3ZuLXJlbW90ZSAibWVzc3ktcmVwbyJdCisJdXJsID0gaHR0cDovL3NlcnZlci5vcmcvc3ZuCisJZmV0Y2ggPSB0cnVuay9wcm9qZWN0LWE6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS90cnVuaworCWZldGNoID0gYnJhbmNoZXMvZGVtb3MvanVuZS1wcm9qZWN0LWEtZGVtbzpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL2RlbW9zL2p1bmUtZGVtbworCWJyYW5jaGVzID0gYnJhbmNoZXMvc2VydmVyLyo6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS9icmFuY2hlcy8qCisJYnJhbmNoZXMgPSBicmFuY2hlcy9kZW1vcy8yMDExLyo6cmVmcy9yZW1vdGVzL3Byb2plY3QtYS8yMDExLWRlbW9zLyoKKwl0YWdzID0gdGFncy9zZXJ2ZXIvKjpyZWZzL3JlbW90ZXMvcHJvamVjdC1hL3RhZ3MvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWF0aW5nIGEgYnJhbmNoIGluIHN1Y2ggYSBjb25maWd1cmF0aW9uIHJlcXVpcmVzIGRpc2FtYmlndWF0aW5nIHdoaWNoCitsb2NhdGlvbiB0byB1c2UgdXNpbmcgdGhlIC1kIG9yIC0tZGVzdGluYXRpb24gZmxhZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzdm4gYnJhbmNoIC1kIGJyYW5jaGVzL3NlcnZlciByZWxlYXNlLTItMy0wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IGdpdC1zdm4ga2VlcHMgdHJhY2sgb2YgdGhlIGhpZ2hlc3QgcmV2aXNpb24gaW4gd2hpY2ggYSBicmFuY2gKK29yIHRhZyBoYXMgYXBwZWFyZWQuIElmIHRoZSBzdWJzZXQgb2YgYnJhbmNoZXMgb3IgdGFncyBpcyBjaGFuZ2VkIGFmdGVyCitmZXRjaGluZywgdGhlbiAkR0lUX0RJUi9zdm4vLm1ldGFkYXRhIG11c3QgYmUgbWFudWFsbHkgZWRpdGVkIHRvIHJlbW92ZQorKG9yIHJlc2V0KSBicmFuY2hlcy1tYXhSZXYgYW5kL29yIHRhZ3MtbWF4UmV2IGFzIGFwcHJvcHJpYXRlLgorCitGSUxFUworLS0tLS0KKyRHSVRfRElSL3N2bi9cKlwqLy5yZXZfbWFwLio6OgorCU1hcHBpbmcgYmV0d2VlbiBTdWJ2ZXJzaW9uIHJldmlzaW9uIG51bWJlcnMgYW5kIEdpdCBjb21taXQKKwluYW1lcy4gIEluIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGUgbm9NZXRhZGF0YSBvcHRpb24gaXMgbm90IHNldCwKKwl0aGlzIGNhbiBiZSByZWJ1aWx0IGZyb20gdGhlIGdpdC1zdm4taWQ6IGxpbmVzIHRoYXQgYXJlIGF0IHRoZQorCWVuZCBvZiBldmVyeSBjb21taXQgKHNlZSB0aGUgJ3N2bi5ub01ldGFkYXRhJyBzZWN0aW9uIGFib3ZlIGZvcgorCWRldGFpbHMpLgorKworJ2dpdCBzdm4gZmV0Y2gnIGFuZCAnZ2l0IHN2biByZWJhc2UnIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSByZXZfbWFwCitpZiBpdCBpcyBtaXNzaW5nIG9yIG5vdCB1cCB0byBkYXRlLiAgJ2dpdCBzdm4gcmVzZXQnIGF1dG9tYXRpY2FsbHkKK3Jld2luZHMgaXQuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcmViYXNlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtc3ltYm9saWMtcmVmLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXN5bWJvbGljLXJlZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2OGFkMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXN5bWJvbGljLXJlZi50eHQKQEAgLTAsMCArMSw2OSBAQAorZ2l0LXN5bWJvbGljLXJlZigxKQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3ltYm9saWMtcmVmIC0gUmVhZCwgbW9kaWZ5IGFuZCBkZWxldGUgc3ltYm9saWMgcmVmcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3ltYm9saWMtcmVmJyBbLW0gPHJlYXNvbj5dIDxuYW1lPiA8cmVmPgorJ2dpdCBzeW1ib2xpYy1yZWYnIFstcV0gWy0tc2hvcnRdIDxuYW1lPgorJ2dpdCBzeW1ib2xpYy1yZWYnIC0tZGVsZXRlIFstcV0gPG5hbWU+CisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorR2l2ZW4gb25lIGFyZ3VtZW50LCByZWFkcyB3aGljaCBicmFuY2ggaGVhZCB0aGUgZ2l2ZW4gc3ltYm9saWMKK3JlZiByZWZlcnMgdG8gYW5kIG91dHB1dHMgaXRzIHBhdGgsIHJlbGF0aXZlIHRvIHRoZSBgLmdpdC9gCitkaXJlY3RvcnkuICBUeXBpY2FsbHkgeW91IHdvdWxkIGdpdmUgYEhFQURgIGFzIHRoZSA8bmFtZT4KK2FyZ3VtZW50IHRvIHNlZSB3aGljaCBicmFuY2ggeW91ciB3b3JraW5nIHRyZWUgaXMgb24uCisKK0dpdmVuIHR3byBhcmd1bWVudHMsIGNyZWF0ZXMgb3IgdXBkYXRlcyBhIHN5bWJvbGljIHJlZiA8bmFtZT4gdG8KK3BvaW50IGF0IHRoZSBnaXZlbiBicmFuY2ggPHJlZj4uCisKK0dpdmVuIGAtLWRlbGV0ZWAgYW5kIGFuIGFkZGl0aW9uYWwgYXJndW1lbnQsIGRlbGV0ZXMgdGhlIGdpdmVuCitzeW1ib2xpYyByZWYuCisKK0Egc3ltYm9saWMgcmVmIGlzIGEgcmVndWxhciBmaWxlIHRoYXQgc3RvcmVzIGEgc3RyaW5nIHRoYXQKK2JlZ2lucyB3aXRoIGByZWY6IHJlZnMvYC4gIEZvciBleGFtcGxlLCB5b3VyIGAuZ2l0L0hFQURgIGlzCithIHJlZ3VsYXIgZmlsZSB3aG9zZSBjb250ZW50cyBpcyBgcmVmOiByZWZzL2hlYWRzL21hc3RlcmAuCisKK09QVElPTlMKKy0tLS0tLS0KKworLWQ6OgorLS1kZWxldGU6OgorCURlbGV0ZSB0aGUgc3ltYm9saWMgcmVmIDxuYW1lPi4KKworLXE6OgorLS1xdWlldDo6CisJRG8gbm90IGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UgaWYgdGhlIDxuYW1lPiBpcyBub3QgYQorCXN5bWJvbGljIHJlZiBidXQgYSBkZXRhY2hlZCBIRUFEOyBpbnN0ZWFkIGV4aXQgd2l0aAorCW5vbi16ZXJvIHN0YXR1cyBzaWxlbnRseS4KKworLS1zaG9ydDo6CisJV2hlbiBzaG93aW5nIHRoZSB2YWx1ZSBvZiA8bmFtZT4gYXMgYSBzeW1ib2xpYyByZWYsIHRyeSB0byBzaG9ydGVuIHRoZQorCXZhbHVlLCBlLmcuIGZyb20gYHJlZnMvaGVhZHMvbWFzdGVyYCB0byBgbWFzdGVyYC4KKworLW06OgorCVVwZGF0ZSB0aGUgcmVmbG9nIGZvciA8bmFtZT4gd2l0aCA8cmVhc29uPi4gIFRoaXMgaXMgdmFsaWQgb25seQorCXdoZW4gY3JlYXRpbmcgb3IgdXBkYXRpbmcgYSBzeW1ib2xpYyByZWYuCisKK05PVEVTCistLS0tLQorSW4gdGhlIHBhc3QsIGAuZ2l0L0hFQURgIHdhcyBhIHN5bWJvbGljIGxpbmsgcG9pbnRpbmcgYXQKK2ByZWZzL2hlYWRzL21hc3RlcmAuICBXaGVuIHdlIHdhbnRlZCB0byBzd2l0Y2ggdG8gYW5vdGhlciBicmFuY2gsCit3ZSBkaWQgYGxuIC1zZiByZWZzL2hlYWRzL25ld2JyYW5jaCAuZ2l0L0hFQURgLCBhbmQgd2hlbiB3ZSB3YW50ZWQKK3RvIGZpbmQgb3V0IHdoaWNoIGJyYW5jaCB3ZSBhcmUgb24sIHdlIGRpZCBgcmVhZGxpbmsgLmdpdC9IRUFEYC4KK0J1dCBzeW1ib2xpYyBsaW5rcyBhcmUgbm90IGVudGlyZWx5IHBvcnRhYmxlLCBzbyB0aGV5IGFyZSBub3cKK2RlcHJlY2F0ZWQgYW5kIHN5bWJvbGljIHJlZnMgKGFzIGRlc2NyaWJlZCBhYm92ZSkgYXJlIHVzZWQgYnkKK2RlZmF1bHQuCisKKydnaXQgc3ltYm9saWMtcmVmJyB3aWxsIGV4aXQgd2l0aCBzdGF0dXMgMCBpZiB0aGUgY29udGVudHMgb2YgdGhlCitzeW1ib2xpYyByZWYgd2VyZSBwcmludGVkIGNvcnJlY3RseSwgd2l0aCBzdGF0dXMgMSBpZiB0aGUgcmVxdWVzdGVkCituYW1lIGlzIG5vdCBhIHN5bWJvbGljIHJlZiwgb3IgMTI4IGlmIGFub3RoZXIgZXJyb3Igb2NjdXJzLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXRhZy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjBlNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC10YWcudHh0CkBAIC0wLDAgKzEsMzQ0IEBACitnaXQtdGFnKDEpCis9PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC10YWcgLSBDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB0YWcnIFstYSB8IC1zIHwgLXUgPGtleWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dCisJPHRhZ25hbWU+IFs8Y29tbWl0PiB8IDxvYmplY3Q+XQorJ2dpdCB0YWcnIC1kIDx0YWduYW1lPi4uLgorJ2dpdCB0YWcnIFstbls8bnVtPl1dIC1sIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamVjdD5dCisJWy0tY29sdW1uWz08b3B0aW9ucz5dIHwgLS1uby1jb2x1bW5dIFstLWNyZWF0ZS1yZWZsb2ddIFstLXNvcnQ9PGtleT5dCisJWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXQorJ2dpdCB0YWcnIC12IDx0YWduYW1lPi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworQWRkIGEgdGFnIHJlZmVyZW5jZSBpbiBgcmVmcy90YWdzL2AsIHVubGVzcyBgLWQvLWwvLXZgIGlzIGdpdmVuCit0byBkZWxldGUsIGxpc3Qgb3IgdmVyaWZ5IHRhZ3MuCisKK1VubGVzcyBgLWZgIGlzIGdpdmVuLCB0aGUgbmFtZWQgdGFnIG11c3Qgbm90IHlldCBleGlzdC4KKworSWYgb25lIG9mIGAtYWAsIGAtc2AsIG9yIGAtdSA8a2V5aWQ+YCBpcyBwYXNzZWQsIHRoZSBjb21tYW5kCitjcmVhdGVzIGEgJ3RhZycgb2JqZWN0LCBhbmQgcmVxdWlyZXMgYSB0YWcgbWVzc2FnZS4gIFVubGVzcworYC1tIDxtc2c+YCBvciBgLUYgPGZpbGU+YCBpcyBnaXZlbiwgYW4gZWRpdG9yIGlzIHN0YXJ0ZWQgZm9yIHRoZSB1c2VyIHRvIHR5cGUKK2luIHRoZSB0YWcgbWVzc2FnZS4KKworSWYgYC1tIDxtc2c+YCBvciBgLUYgPGZpbGU+YCBpcyBnaXZlbiBhbmQgYC1hYCwgYC1zYCwgYW5kIGAtdSA8a2V5aWQ+YAorYXJlIGFic2VudCwgYC1hYCBpcyBpbXBsaWVkLgorCitPdGhlcndpc2UganVzdCBhIHRhZyByZWZlcmVuY2UgZm9yIHRoZSBTSEEtMSBvYmplY3QgbmFtZSBvZiB0aGUgY29tbWl0IG9iamVjdCBpcworY3JlYXRlZCAoaS5lLiBhIGxpZ2h0d2VpZ2h0IHRhZykuCisKK0EgR251UEcgc2lnbmVkIHRhZyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIHdoZW4gYC1zYCBvciBgLXUKKzxrZXlpZD5gIGlzIHVzZWQuICBXaGVuIGAtdSA8a2V5aWQ+YCBpcyBub3QgdXNlZCwgdGhlCitjb21taXR0ZXIgaWRlbnRpdHkgZm9yIHRoZSBjdXJyZW50IHVzZXIgaXMgdXNlZCB0byBmaW5kIHRoZQorR251UEcga2V5IGZvciBzaWduaW5nLiAJVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGdwZy5wcm9ncmFtYAoraXMgdXNlZCB0byBzcGVjaWZ5IGN1c3RvbSBHbnVQRyBiaW5hcnkuCisKK1RhZyBvYmplY3RzIChjcmVhdGVkIHdpdGggYC1hYCwgYC1zYCwgb3IgYC11YCkgYXJlIGNhbGxlZCAiYW5ub3RhdGVkIgordGFnczsgdGhleSBjb250YWluIGEgY3JlYXRpb24gZGF0ZSwgdGhlIHRhZ2dlciBuYW1lIGFuZCBlLW1haWwsIGEKK3RhZ2dpbmcgbWVzc2FnZSwgYW5kIGFuIG9wdGlvbmFsIEdudVBHIHNpZ25hdHVyZS4gV2hlcmVhcyBhCisibGlnaHR3ZWlnaHQiIHRhZyBpcyBzaW1wbHkgYSBuYW1lIGZvciBhbiBvYmplY3QgKHVzdWFsbHkgYSBjb21taXQKK29iamVjdCkuCisKK0Fubm90YXRlZCB0YWdzIGFyZSBtZWFudCBmb3IgcmVsZWFzZSB3aGlsZSBsaWdodHdlaWdodCB0YWdzIGFyZSBtZWFudAorZm9yIHByaXZhdGUgb3IgdGVtcG9yYXJ5IG9iamVjdCBsYWJlbHMuIEZvciB0aGlzIHJlYXNvbiwgc29tZSBnaXQKK2NvbW1hbmRzIGZvciBuYW1pbmcgb2JqZWN0cyAobGlrZSBgZ2l0IGRlc2NyaWJlYCkgd2lsbCBpZ25vcmUKK2xpZ2h0d2VpZ2h0IHRhZ3MgYnkgZGVmYXVsdC4KKworCitPUFRJT05TCistLS0tLS0tCistYTo6CistLWFubm90YXRlOjoKKwlNYWtlIGFuIHVuc2lnbmVkLCBhbm5vdGF0ZWQgdGFnIG9iamVjdAorCistczo6CistLXNpZ246OgorCU1ha2UgYSBHUEctc2lnbmVkIHRhZywgdXNpbmcgdGhlIGRlZmF1bHQgZS1tYWlsIGFkZHJlc3MncyBrZXkuCisKKy11IDxrZXlpZD46OgorLS1sb2NhbC11c2VyPTxrZXlpZD46OgorCU1ha2UgYSBHUEctc2lnbmVkIHRhZywgdXNpbmcgdGhlIGdpdmVuIGtleS4KKworLWY6OgorLS1mb3JjZTo6CisJUmVwbGFjZSBhbiBleGlzdGluZyB0YWcgd2l0aCB0aGUgZ2l2ZW4gbmFtZSAoaW5zdGVhZCBvZiBmYWlsaW5nKQorCistZDo6CistLWRlbGV0ZTo6CisJRGVsZXRlIGV4aXN0aW5nIHRhZ3Mgd2l0aCB0aGUgZ2l2ZW4gbmFtZXMuCisKKy12OjoKKy0tdmVyaWZ5OjoKKwlWZXJpZnkgdGhlIGdwZyBzaWduYXR1cmUgb2YgdGhlIGdpdmVuIHRhZyBuYW1lcy4KKworLW48bnVtPjo6CisJPG51bT4gc3BlY2lmaWVzIGhvdyBtYW55IGxpbmVzIGZyb20gdGhlIGFubm90YXRpb24sIGlmIGFueSwKKwlhcmUgcHJpbnRlZCB3aGVuIHVzaW5nIC1sLgorCVRoZSBkZWZhdWx0IGlzIG5vdCB0byBwcmludCBhbnkgYW5ub3RhdGlvbiBsaW5lcy4KKwlJZiBubyBudW1iZXIgaXMgZ2l2ZW4gdG8gYC1uYCwgb25seSB0aGUgZmlyc3QgbGluZSBpcyBwcmludGVkLgorCUlmIHRoZSB0YWcgaXMgbm90IGFubm90YXRlZCwgdGhlIGNvbW1pdCBtZXNzYWdlIGlzIGRpc3BsYXllZCBpbnN0ZWFkLgorCistbCA8cGF0dGVybj46OgorLS1saXN0IDxwYXR0ZXJuPjo6CisJTGlzdCB0YWdzIHdpdGggbmFtZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gcGF0dGVybiAob3IgYWxsIGlmIG5vCisJcGF0dGVybiBpcyBnaXZlbikuICBSdW5uaW5nICJnaXQgdGFnIiB3aXRob3V0IGFyZ3VtZW50cyBhbHNvCisJbGlzdHMgYWxsIHRhZ3MuIFRoZSBwYXR0ZXJuIGlzIGEgc2hlbGwgd2lsZGNhcmQgKGkuZS4sIG1hdGNoZWQKKwl1c2luZyBmbm1hdGNoKDMpKS4gIE11bHRpcGxlIHBhdHRlcm5zIG1heSBiZSBnaXZlbjsgaWYgYW55IG9mCisJdGhlbSBtYXRjaGVzLCB0aGUgdGFnIGlzIHNob3duLgorCistLXNvcnQ9PGtleT46OgorCVNvcnQgYmFzZWQgb24gdGhlIGtleSBnaXZlbi4gIFByZWZpeCBgLWAgdG8gc29ydCBpbgorCWRlc2NlbmRpbmcgb3JkZXIgb2YgdGhlIHZhbHVlLiBZb3UgbWF5IHVzZSB0aGUgLS1zb3J0PTxrZXk+IG9wdGlvbgorCW11bHRpcGxlIHRpbWVzLCBpbiB3aGljaCBjYXNlIHRoZSBsYXN0IGtleSBiZWNvbWVzIHRoZSBwcmltYXJ5CisJa2V5LiBBbHNvIHN1cHBvcnRzICJ2ZXJzaW9uOnJlZm5hbWUiIG9yICJ2OnJlZm5hbWUiICh0YWcKKwluYW1lcyBhcmUgdHJlYXRlZCBhcyB2ZXJzaW9ucykuIFRoZSAidmVyc2lvbjpyZWZuYW1lIiBzb3J0CisJb3JkZXIgY2FuIGFsc28gYmUgYWZmZWN0ZWQgYnkgdGhlCisJInZlcnNpb25zb3J0LnByZXJlbGVhc2VTdWZmaXgiIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisJVGhlIGtleXMgc3VwcG9ydGVkIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBpbiBgZ2l0IGZvci1lYWNoLXJlZmAuCisJU29ydCBvcmRlciBkZWZhdWx0cyB0byB0aGUgdmFsdWUgY29uZmlndXJlZCBmb3IgdGhlICd0YWcuc29ydCcKKwl2YXJpYWJsZSBpZiBpdCBleGlzdHMsIG9yIGxleGljb2dyYXBoaWMgb3JkZXIgb3RoZXJ3aXNlLiBTZWUKKwlsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKKy0tY29sdW1uWz08b3B0aW9ucz5dOjoKKy0tbm8tY29sdW1uOjoKKwlEaXNwbGF5IHRhZyBsaXN0aW5nIGluIGNvbHVtbnMuIFNlZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisJY29sdW1uLnRhZyBmb3Igb3B0aW9uIHN5bnRheC5gLS1jb2x1bW5gIGFuZCBgLS1uby1jb2x1bW5gCisJd2l0aG91dCBvcHRpb25zIGFyZSBlcXVpdmFsZW50IHRvICdhbHdheXMnIGFuZCAnbmV2ZXInIHJlc3BlY3RpdmVseS4KKysKK1RoaXMgb3B0aW9uIGlzIG9ubHkgYXBwbGljYWJsZSB3aGVuIGxpc3RpbmcgdGFncyB3aXRob3V0IGFubm90YXRpb24gbGluZXMuCisKKy0tY29udGFpbnMgWzxjb21taXQ+XTo6CisJT25seSBsaXN0IHRhZ3Mgd2hpY2ggY29udGFpbiB0aGUgc3BlY2lmaWVkIGNvbW1pdCAoSEVBRCBpZiBub3QKKwlzcGVjaWZpZWQpLgorCistLXBvaW50cy1hdCA8b2JqZWN0Pjo6CisJT25seSBsaXN0IHRhZ3Mgb2YgdGhlIGdpdmVuIG9iamVjdC4KKworLW0gPG1zZz46OgorLS1tZXNzYWdlPTxtc2c+OjoKKwlVc2UgdGhlIGdpdmVuIHRhZyBtZXNzYWdlIChpbnN0ZWFkIG9mIHByb21wdGluZykuCisJSWYgbXVsdGlwbGUgYC1tYCBvcHRpb25zIGFyZSBnaXZlbiwgdGhlaXIgdmFsdWVzIGFyZQorCWNvbmNhdGVuYXRlZCBhcyBzZXBhcmF0ZSBwYXJhZ3JhcGhzLgorCUltcGxpZXMgYC1hYCBpZiBub25lIG9mIGAtYWAsIGAtc2AsIG9yIGAtdSA8a2V5aWQ+YAorCWlzIGdpdmVuLgorCistRiA8ZmlsZT46OgorLS1maWxlPTxmaWxlPjo6CisJVGFrZSB0aGUgdGFnIG1lc3NhZ2UgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4gIFVzZSAnLScgdG8KKwlyZWFkIHRoZSBtZXNzYWdlIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LgorCUltcGxpZXMgYC1hYCBpZiBub25lIG9mIGAtYWAsIGAtc2AsIG9yIGAtdSA8a2V5aWQ+YAorCWlzIGdpdmVuLgorCistLWNsZWFudXA9PG1vZGU+OjoKKwlUaGlzIG9wdGlvbiBzZXRzIGhvdyB0aGUgdGFnIG1lc3NhZ2UgaXMgY2xlYW5lZCB1cC4KKwlUaGUgICc8bW9kZT4nIGNhbiBiZSBvbmUgb2YgJ3ZlcmJhdGltJywgJ3doaXRlc3BhY2UnIGFuZCAnc3RyaXAnLiAgVGhlCisJJ3N0cmlwJyBtb2RlIGlzIGRlZmF1bHQuIFRoZSAndmVyYmF0aW0nIG1vZGUgZG9lcyBub3QgY2hhbmdlIG1lc3NhZ2UgYXQKKwlhbGwsICd3aGl0ZXNwYWNlJyByZW1vdmVzIGp1c3QgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlIGxpbmVzIGFuZAorCSdzdHJpcCcgcmVtb3ZlcyBib3RoIHdoaXRlc3BhY2UgYW5kIGNvbW1lbnRhcnkuCisKKy0tY3JlYXRlLXJlZmxvZzo6CisJQ3JlYXRlIGEgcmVmbG9nIGZvciB0aGUgdGFnLgorCis8dGFnbmFtZT46OgorCVRoZSBuYW1lIG9mIHRoZSB0YWcgdG8gY3JlYXRlLCBkZWxldGUsIG9yIGRlc2NyaWJlLgorCVRoZSBuZXcgdGFnIG5hbWUgbXVzdCBwYXNzIGFsbCBjaGVja3MgZGVmaW5lZCBieQorCWxpbmtnaXQ6Z2l0LWNoZWNrLXJlZi1mb3JtYXRbMV0uICBTb21lIG9mIHRoZXNlIGNoZWNrcworCW1heSByZXN0cmljdCB0aGUgY2hhcmFjdGVycyBhbGxvd2VkIGluIGEgdGFnIG5hbWUuCisKKzxjb21taXQ+OjoKKzxvYmplY3Q+OjoKKwlUaGUgb2JqZWN0IHRoYXQgdGhlIG5ldyB0YWcgd2lsbCByZWZlciB0bywgdXN1YWxseSBhIGNvbW1pdC4KKwlEZWZhdWx0cyB0byBIRUFELgorCis8Zm9ybWF0Pjo6CisJQSBzdHJpbmcgdGhhdCBpbnRlcnBvbGF0ZXMgYCUoZmllbGRuYW1lKWAgZnJvbSB0aGUgb2JqZWN0CisJcG9pbnRlZCBhdCBieSBhIHJlZiBiZWluZyBzaG93bi4gIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMKKwl0aGF0IG9mIGxpbmtnaXQ6Z2l0LWZvci1lYWNoLXJlZlsxXS4gIFdoZW4gdW5zcGVjaWZpZWQsCisJZGVmYXVsdHMgdG8gYCUocmVmbmFtZTpzaG9ydClgLgorCistLVtuby1dbWVyZ2VkIFs8Y29tbWl0Pl06OgorCU9ubHkgbGlzdCB0YWdzIHdob3NlIHRpcHMgYXJlIHJlYWNoYWJsZSwgb3Igbm90IHJlYWNoYWJsZQorCWlmICctLW5vLW1lcmdlZCcgaXMgdXNlZCwgZnJvbSB0aGUgc3BlY2lmaWVkIGNvbW1pdCAoJ0hFQUQnCisJaWYgbm90IHNwZWNpZmllZCkuCisKK0NPTkZJR1VSQVRJT04KKy0tLS0tLS0tLS0tLS0KK0J5IGRlZmF1bHQsICdnaXQgdGFnJyBpbiBzaWduLXdpdGgtZGVmYXVsdCBtb2RlICgtcykgd2lsbCB1c2UgeW91cgorY29tbWl0dGVyIGlkZW50aXR5IChvZiB0aGUgZm9ybSBgWW91ciBOYW1lIDx5b3VyQGVtYWlsLmFkZHJlc3M+YCkgdG8KK2ZpbmQgYSBrZXkuICBJZiB5b3Ugd2FudCB0byB1c2UgYSBkaWZmZXJlbnQgZGVmYXVsdCBrZXksIHlvdSBjYW4gc3BlY2lmeQoraXQgaW4gdGhlIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhcyBmb2xsb3dzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbdXNlcl0KKyAgICBzaWduaW5nS2V5ID0gPGdwZy1rZXlpZD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCisKK09uIFJlLXRhZ2dpbmcKK35+fn5+fn5+fn5+fn4KKworV2hhdCBzaG91bGQgeW91IGRvIHdoZW4geW91IHRhZyBhIHdyb25nIGNvbW1pdCBhbmQgeW91IHdvdWxkCit3YW50IHRvIHJlLXRhZz8KKworSWYgeW91IG5ldmVyIHB1c2hlZCBhbnl0aGluZyBvdXQsIGp1c3QgcmUtdGFnIGl0LiBVc2UgIi1mIiB0bworcmVwbGFjZSB0aGUgb2xkIG9uZS4gQW5kIHlvdSdyZSBkb25lLgorCitCdXQgaWYgeW91IGhhdmUgcHVzaGVkIHRoaW5ncyBvdXQgKG9yIG90aGVycyBjb3VsZCBqdXN0IHJlYWQKK3lvdXIgcmVwb3NpdG9yeSBkaXJlY3RseSksIHRoZW4gb3RoZXJzIHdpbGwgaGF2ZSBhbHJlYWR5IHNlZW4KK3RoZSBvbGQgdGFnLiBJbiB0aGF0IGNhc2UgeW91IGNhbiBkbyBvbmUgb2YgdHdvIHRoaW5nczoKKworLiBUaGUgc2FuZSB0aGluZy4KK0p1c3QgYWRtaXQgeW91IHNjcmV3ZWQgdXAsIGFuZCB1c2UgYSBkaWZmZXJlbnQgbmFtZS4gT3RoZXJzIGhhdmUKK2FscmVhZHkgc2VlbiBvbmUgdGFnLW5hbWUsIGFuZCBpZiB5b3Uga2VlcCB0aGUgc2FtZSBuYW1lLCB5b3UKK21heSBiZSBpbiB0aGUgc2l0dWF0aW9uIHRoYXQgdHdvIHBlb3BsZSBib3RoIGhhdmUgInZlcnNpb24gWCIsCitidXQgdGhleSBhY3R1YWxseSBoYXZlICdkaWZmZXJlbnQnICJYIidzLiAgU28ganVzdCBjYWxsIGl0ICJYLjEiCithbmQgYmUgZG9uZSB3aXRoIGl0LgorCisuIFRoZSBpbnNhbmUgdGhpbmcuCitZb3UgcmVhbGx5IHdhbnQgdG8gY2FsbCB0aGUgbmV3IHZlcnNpb24gIlgiIHRvbywgJ2V2ZW4gdGhvdWdoJworb3RoZXJzIGhhdmUgYWxyZWFkeSBzZWVuIHRoZSBvbGQgb25lLiBTbyBqdXN0IHVzZSAnZ2l0IHRhZyAtZicKK2FnYWluLCBhcyBpZiB5b3UgaGFkbid0IGFscmVhZHkgcHVibGlzaGVkIHRoZSBvbGQgb25lLgorCitIb3dldmVyLCBHaXQgZG9lcyAqbm90KiAoYW5kIGl0IHNob3VsZCBub3QpIGNoYW5nZSB0YWdzIGJlaGluZAordXNlcnMgYmFjay4gU28gaWYgc29tZWJvZHkgYWxyZWFkeSBnb3QgdGhlIG9sZCB0YWcsIGRvaW5nIGEKKydnaXQgcHVsbCcgb24geW91ciB0cmVlIHNob3VsZG4ndCBqdXN0IG1ha2UgdGhlbSBvdmVyd3JpdGUgdGhlIG9sZAorb25lLgorCitJZiBzb21lYm9keSBnb3QgYSByZWxlYXNlIHRhZyBmcm9tIHlvdSwgeW91IGNhbm5vdCBqdXN0IGNoYW5nZQordGhlIHRhZyBmb3IgdGhlbSBieSB1cGRhdGluZyB5b3VyIG93biBvbmUuIFRoaXMgaXMgYSBiaWcKK3NlY3VyaXR5IGlzc3VlLCBpbiB0aGF0IHBlb3BsZSBNVVNUIGJlIGFibGUgdG8gdHJ1c3QgdGhlaXIKK3RhZy1uYW1lcy4gIElmIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGUgaW5zYW5lIHRoaW5nLCB5b3UgbmVlZAordG8ganVzdCBmZXNzIHVwIHRvIGl0LCBhbmQgdGVsbCBwZW9wbGUgdGhhdCB5b3UgbWVzc2VkIHVwLiBZb3UKK2NhbiBkbyB0aGF0IGJ5IG1ha2luZyBhIHZlcnkgcHVibGljIGFubm91bmNlbWVudCBzYXlpbmc6CisKKy0tLS0tLS0tLS0tLQorT2ssIEkgbWVzc2VkIHVwLCBhbmQgSSBwdXNoZWQgb3V0IGFuIGVhcmxpZXIgdmVyc2lvbiB0YWdnZWQgYXMgWC4gSQordGhlbiBmaXhlZCBzb21ldGhpbmcsIGFuZCByZXRhZ2dlZCB0aGUgKmZpeGVkKiB0cmVlIGFzIFggYWdhaW4uCisKK0lmIHlvdSBnb3QgdGhlIHdyb25nIHRhZywgYW5kIHdhbnQgdGhlIG5ldyBvbmUsIHBsZWFzZSBkZWxldGUKK3RoZSBvbGQgb25lIGFuZCBmZXRjaCB0aGUgbmV3IG9uZSBieSBkb2luZzoKKworCWdpdCB0YWcgLWQgWAorCWdpdCBmZXRjaCBvcmlnaW4gdGFnIFgKKwordG8gZ2V0IG15IHVwZGF0ZWQgdGFnLgorCitZb3UgY2FuIHRlc3Qgd2hpY2ggdGFnIHlvdSBoYXZlIGJ5IGRvaW5nCisKKwlnaXQgcmV2LXBhcnNlIFgKKword2hpY2ggc2hvdWxkIHJldHVybiAwMTIzNDU2Nzg5YWJjZGVmLi4gaWYgeW91IGhhdmUgdGhlIG5ldyB2ZXJzaW9uLgorCitTb3JyeSBmb3IgdGhlIGluY29udmVuaWVuY2UuCistLS0tLS0tLS0tLS0KKworRG9lcyB0aGlzIHNlZW0gYSBiaXQgY29tcGxpY2F0ZWQ/ICBJdCAqc2hvdWxkKiBiZS4gVGhlcmUgaXMgbm8KK3dheSB0aGF0IGl0IHdvdWxkIGJlIGNvcnJlY3QgdG8ganVzdCAiZml4IiBpdCBhdXRvbWF0aWNhbGx5LgorUGVvcGxlIG5lZWQgdG8ga25vdyB0aGF0IHRoZWlyIHRhZ3MgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQuCisKKworT24gQXV0b21hdGljIGZvbGxvd2luZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitJZiB5b3UgYXJlIGZvbGxvd2luZyBzb21lYm9keSBlbHNlJ3MgdHJlZSwgeW91IGFyZSBtb3N0IGxpa2VseQordXNpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIChgcmVmcy9oZWFkcy9vcmlnaW5gIGluIHRyYWRpdGlvbmFsCitsYXlvdXQsIG9yIGByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcmAgaW4gdGhlIHNlcGFyYXRlLXJlbW90ZQorbGF5b3V0KS4gIFlvdSB1c3VhbGx5IHdhbnQgdGhlIHRhZ3MgZnJvbSB0aGUgb3RoZXIgZW5kLgorCitPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IGFyZSBmZXRjaGluZyBiZWNhdXNlIHlvdSB3b3VsZCB3YW50IGEKK29uZS1zaG90IG1lcmdlIGZyb20gc29tZWJvZHkgZWxzZSwgeW91IHR5cGljYWxseSBkbyBub3Qgd2FudCB0bworZ2V0IHRhZ3MgZnJvbSB0aGVyZS4gIFRoaXMgaGFwcGVucyBtb3JlIG9mdGVuIGZvciBwZW9wbGUgbmVhcgordGhlIHRvcGxldmVsIGJ1dCBub3QgbGltaXRlZCB0byB0aGVtLiAgTWVyZSBtb3J0YWxzIHdoZW4gcHVsbGluZworZnJvbSBlYWNoIG90aGVyIGRvIG5vdCBuZWNlc3NhcmlseSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZ2V0Citwcml2YXRlIGFuY2hvciBwb2ludCB0YWdzIGZyb20gdGhlIG90aGVyIHBlcnNvbi4KKworT2Z0ZW4sICJwbGVhc2UgcHVsbCIgbWVzc2FnZXMgb24gdGhlIG1haWxpbmcgbGlzdCBqdXN0IHByb3ZpZGUKK3R3byBwaWVjZXMgb2YgaW5mb3JtYXRpb246IGEgcmVwbyBVUkwgYW5kIGEgYnJhbmNoIG5hbWU7IHRoaXMKK2lzIGRlc2lnbmVkIHRvIGJlIGVhc2lseSBjdXQmcGFzdGVkIGF0IHRoZSBlbmQgb2YgYSAnZ2l0IGZldGNoJworY29tbWFuZCBsaW5lOgorCistLS0tLS0tLS0tLS0KK0xpbnVzLCBwbGVhc2UgcHVsbCBmcm9tCisKKwlnaXQ6Ly9naXQuLi4uL3Byb2ouZ2l0IG1hc3RlcgorCit0byBnZXQgdGhlIGZvbGxvd2luZyB1cGRhdGVzLi4uCistLS0tLS0tLS0tLS0KKworYmVjb21lczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsIGdpdDovL2dpdC4uLi4vcHJvai5naXQgbWFzdGVyCistLS0tLS0tLS0tLS0KKworSW4gc3VjaCBhIGNhc2UsIHlvdSBkbyBub3Qgd2FudCB0byBhdXRvbWF0aWNhbGx5IGZvbGxvdyB0aGUgb3RoZXIKK3BlcnNvbidzIHRhZ3MuCisKK09uZSBpbXBvcnRhbnQgYXNwZWN0IG9mIEdpdCBpcyBpdHMgZGlzdHJpYnV0ZWQgbmF0dXJlLCB3aGljaAorbGFyZ2VseSBtZWFucyB0aGVyZSBpcyBubyBpbmhlcmVudCAidXBzdHJlYW0iIG9yCisiZG93bnN0cmVhbSIgaW4gdGhlIHN5c3RlbS4gIE9uIHRoZSBmYWNlIG9mIGl0LCB0aGUgYWJvdmUKK2V4YW1wbGUgbWlnaHQgc2VlbSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0YWcgbmFtZXNwYWNlIGlzIG93bmVkCitieSB0aGUgdXBwZXIgZWNoZWxvbiBvZiBwZW9wbGUgYW5kIHRoYXQgdGFncyBvbmx5IGZsb3cgZG93bndhcmRzLCBidXQKK3RoYXQgaXMgbm90IHRoZSBjYXNlLiAgSXQgb25seSBzaG93cyB0aGF0IHRoZSB1c2FnZSBwYXR0ZXJuCitkZXRlcm1pbmVzIHdobyBhcmUgaW50ZXJlc3RlZCBpbiB3aG9zZSB0YWdzLgorCitBIG9uZS1zaG90IHB1bGwgaXMgYSBzaWduIHRoYXQgYSBjb21taXQgaGlzdG9yeSBpcyBub3cgY3Jvc3NpbmcKK3RoZSBib3VuZGFyeSBiZXR3ZWVuIG9uZSBjaXJjbGUgb2YgcGVvcGxlIChlLmcuICJwZW9wbGUgd2hvIGFyZQorcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gdGhlIG5ldHdvcmtpbmcgcGFydCBvZiB0aGUga2VybmVsIikgd2hvIG1heQoraGF2ZSB0aGVpciBvd24gc2V0IG9mIHRhZ3MgKGUuZy4gInRoaXMgaXMgdGhlIHRoaXJkIHJlbGVhc2UKK2NhbmRpZGF0ZSBmcm9tIHRoZSBuZXR3b3JraW5nIGdyb3VwIHRvIGJlIHByb3Bvc2VkIGZvciBnZW5lcmFsCitjb25zdW1wdGlvbiB3aXRoIDIuNi4yMSByZWxlYXNlIikgdG8gYW5vdGhlciBjaXJjbGUgb2YgcGVvcGxlCisoZS5nLiAicGVvcGxlIHdobyBpbnRlZ3JhdGUgdmFyaW91cyBzdWJzeXN0ZW0gaW1wcm92ZW1lbnRzIikuCitUaGUgbGF0dGVyIGFyZSB1c3VhbGx5IG5vdCBpbnRlcmVzdGVkIGluIHRoZSBkZXRhaWxlZCB0YWdzIHVzZWQKK2ludGVybmFsbHkgaW4gdGhlIGZvcm1lciBncm91cCAodGhhdCBpcyB3aGF0ICJpbnRlcm5hbCIgbWVhbnMpLgorVGhhdCBpcyB3aHkgaXQgaXMgZGVzaXJhYmxlIG5vdCB0byBmb2xsb3cgdGFncyBhdXRvbWF0aWNhbGx5IGluCit0aGlzIGNhc2UuCisKK0l0IG1heSB3ZWxsIGJlIHRoYXQgYW1vbmcgbmV0d29ya2luZyBwZW9wbGUsIHRoZXkgbWF5IHdhbnQgdG8KK2V4Y2hhbmdlIHRoZSB0YWdzIGludGVybmFsIHRvIHRoZWlyIGdyb3VwLCBidXQgaW4gdGhhdCB3b3JrZmxvdwordGhleSBhcmUgbW9zdCBsaWtlbHkgdHJhY2tpbmcgZWFjaCBvdGhlcidzIHByb2dyZXNzIGJ5CitoYXZpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLiAgQWdhaW4sIHRoZSBoZXVyaXN0aWMgdG8gYXV0b21hdGljYWxseQorZm9sbG93IHN1Y2ggdGFncyBpcyBhIGdvb2QgdGhpbmcuCisKKworT24gQmFja2RhdGluZyBUYWdzCit+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgeW91IGhhdmUgaW1wb3J0ZWQgc29tZSBjaGFuZ2VzIGZyb20gYW5vdGhlciBWQ1MgYW5kIHdvdWxkIGxpa2UKK3RvIGFkZCB0YWdzIGZvciBtYWpvciByZWxlYXNlcyBvZiB5b3VyIHdvcmssIGl0IGlzIHVzZWZ1bCB0byBiZSBhYmxlCit0byBzcGVjaWZ5IHRoZSBkYXRlIHRvIGVtYmVkIGluc2lkZSBvZiB0aGUgdGFnIG9iamVjdDsgc3VjaCBkYXRhIGluCit0aGUgdGFnIG9iamVjdCBhZmZlY3RzLCBmb3IgZXhhbXBsZSwgdGhlIG9yZGVyaW5nIG9mIHRhZ3MgaW4gdGhlCitnaXR3ZWIgaW50ZXJmYWNlLgorCitUbyBzZXQgdGhlIGRhdGUgdXNlZCBpbiBmdXR1cmUgdGFnIG9iamVjdHMsIHNldCB0aGUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIEdJVF9DT01NSVRURVJfREFURSAoc2VlIHRoZSBsYXRlciBkaXNjdXNzaW9uIG9mIHBvc3NpYmxlCit2YWx1ZXM7IHRoZSBtb3N0IGNvbW1vbiBmb3JtIGlzICJZWVlZLU1NLUREIEhIOk1NIikuCisKK0ZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0KKyQgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTEwLTAyIDEwOjMxIiBnaXQgdGFnIC1zIHYxLjAuMQorLS0tLS0tLS0tLS0tCisKK2luY2x1ZGU6OmRhdGUtZm9ybWF0cy50eHRbXQorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNoZWNrLXJlZi1mb3JtYXRbMV0uCitsaW5rZ2l0OmdpdC1jb25maWdbMV0uCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdG9vbHMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtdG9vbHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNGZmNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC10b29scy50eHQKQEAgLTAsMCArMSwxMCBAQAorR2l0IFRvb2xzCis9PT09PT09PT0KKworV2hlbiBHaXQgd2FzIHlvdW5nLCBwZW9wbGUgbG9va2luZyBmb3IgdGhpcmQtcGFydHkgR2l0LXJlbGF0ZWQgdG9vbHMgY2FtZQordG8gdGhlIEdpdCBwcm9qZWN0IGl0c2VsZiB0byBmaW5kIHRoZW0sIHRodXMgYSBsaXN0IG9mIHN1Y2ggdG9vbHMgd2FzCittYWludGFpbmVkIGhlcmUuIFRoZXNlIGRheXMsIGhvd2V2ZXIsIHNlYXJjaCBlbmdpbmVzIGZpbGwgdGhhdCByb2xlIG11Y2gKK21vcmUgZWZmaWNpZW50bHksIHNvIHRoaXMgbWFudWFsbHktbWFpbnRhaW5lZCBsaXN0IGhhcyBiZWVuIHJldGlyZWQuCisKK1NlZSBhbHNvIHRoZSBgY29udHJpYi9gIGFyZWEsIGFuZCB0aGUgR2l0IHdpa2k6CitodHRwOi8vZ2l0Lm9yLmN6L2dpdHdpa2kvSW50ZXJmYWNlc0Zyb250ZW5kc0FuZFRvb2xzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stZmlsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stZmlsZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmMTQ4YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1maWxlLnR4dApAQCAtMCwwICsxLDI4IEBACitnaXQtdW5wYWNrLWZpbGUoMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdW5wYWNrLWZpbGUgLSBDcmVhdGVzIGEgdGVtcG9yYXJ5IGZpbGUgd2l0aCBhIGJsb2IncyBjb250ZW50cworCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHVucGFjay1maWxlJyA8YmxvYj4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDcmVhdGVzIGEgZmlsZSBob2xkaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiBzcGVjaWZpZWQgYnkgc2hhMS4gSXQKK3JldHVybnMgdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCS5tZXJnZV9maWxlX1hYWFhYCisKK09QVElPTlMKKy0tLS0tLS0KKzxibG9iPjo6CisJTXVzdCBiZSBhIGJsb2IgaWQKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stb2JqZWN0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11bnBhY2stb2JqZWN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U4ODdkMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVucGFjay1vYmplY3RzLnR4dApAQCAtMCwwICsxLDQ5IEBACitnaXQtdW5wYWNrLW9iamVjdHMoMSkKKz09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdW5wYWNrLW9iamVjdHMgLSBVbnBhY2sgb2JqZWN0cyBmcm9tIGEgcGFja2VkIGFyY2hpdmUKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdW5wYWNrLW9iamVjdHMnIFstbl0gWy1xXSBbLXJdIFstLXN0cmljdF0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1JlYWQgYSBwYWNrZWQgYXJjaGl2ZSAoLnBhY2spIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LCBleHBhbmRpbmcKK3RoZSBvYmplY3RzIGNvbnRhaW5lZCB3aXRoaW4gYW5kIHdyaXRpbmcgdGhlbSBpbnRvIHRoZSByZXBvc2l0b3J5IGluCisibG9vc2UiIChvbmUgb2JqZWN0IHBlciBmaWxlKSBmb3JtYXQuCisKK09iamVjdHMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoZSByZXBvc2l0b3J5IHdpbGwgKm5vdCogYmUgdW5wYWNrZWQKK2Zyb20gdGhlIHBhY2tmaWxlLiAgVGhlcmVmb3JlLCBub3RoaW5nIHdpbGwgYmUgdW5wYWNrZWQgaWYgeW91IHVzZQordGhpcyBjb21tYW5kIG9uIGEgcGFja2ZpbGUgdGhhdCBleGlzdHMgd2l0aGluIHRoZSB0YXJnZXQgcmVwb3NpdG9yeS4KKworU2VlIGxpbmtnaXQ6Z2l0LXJlcGFja1sxXSBmb3Igb3B0aW9ucyB0byBnZW5lcmF0ZQorbmV3IHBhY2tzIGFuZCByZXBsYWNlIGV4aXN0aW5nIG9uZXMuCisKK09QVElPTlMKKy0tLS0tLS0KKy1uOjoKKyAgICAgICAgRHJ5IHJ1bi4gIENoZWNrIHRoZSBwYWNrIGZpbGUgd2l0aG91dCBhY3R1YWxseSB1bnBhY2tpbmcKKwl0aGUgb2JqZWN0cy4KKworLXE6OgorCVRoZSBjb21tYW5kIHVzdWFsbHkgc2hvd3MgcGVyY2VudGFnZSBwcm9ncmVzcy4gIFRoaXMKKwlmbGFnIHN1cHByZXNzZXMgaXQuCisKKy1yOjoKKwlXaGVuIHVucGFja2luZyBhIGNvcnJ1cHQgcGFja2ZpbGUsIHRoZSBjb21tYW5kIGRpZXMgYXQKKwl0aGUgZmlyc3QgY29ycnVwdGlvbi4gIFRoaXMgZmxhZyB0ZWxscyBpdCB0byBrZWVwIGdvaW5nCisJYW5kIG1ha2UgdGhlIGJlc3QgZWZmb3J0IHRvIHJlY292ZXIgYXMgbWFueSBvYmplY3RzIGFzCisJcG9zc2libGUuCisKKy0tc3RyaWN0OjoKKwlEb24ndCB3cml0ZSBvYmplY3RzIHdpdGggYnJva2VuIGNvbnRlbnQgb3IgbGlua3MuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLWluZGV4LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyOTZiYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1pbmRleC50eHQKQEAgLTAsMCArMSw0MTAgQEAKK2dpdC11cGRhdGUtaW5kZXgoMSkKKz09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXVwZGF0ZS1pbmRleCAtIFJlZ2lzdGVyIGZpbGUgY29udGVudHMgaW4gdGhlIHdvcmtpbmcgdHJlZSB0byB0aGUgaW5kZXgKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdXBkYXRlLWluZGV4JworCSAgICAgWy0tYWRkXSBbLS1yZW1vdmUgfCAtLWZvcmNlLXJlbW92ZV0gWy0tcmVwbGFjZV0KKwkgICAgIFstLXJlZnJlc2hdIFstcV0gWy0tdW5tZXJnZWRdIFstLWlnbm9yZS1taXNzaW5nXQorCSAgICAgWygtLWNhY2hlaW5mbyA8bW9kZT4sPG9iamVjdD4sPGZpbGU+KS4uLl0KKwkgICAgIFstLWNobW9kPSgrfC0peF0KKwkgICAgIFstLVtuby1dYXNzdW1lLXVuY2hhbmdlZF0KKwkgICAgIFstLVtuby1dc2tpcC13b3JrdHJlZV0KKwkgICAgIFstLWlnbm9yZS1zdWJtb2R1bGVzXQorCSAgICAgWy0tcmVhbGx5LXJlZnJlc2hdIFstLXVucmVzb2x2ZV0gWy0tYWdhaW4gfCAtZ10KKwkgICAgIFstLWluZm8tb25seV0gWy0taW5kZXgtaW5mb10KKwkgICAgIFstel0gWy0tc3RkaW5dIFstLWluZGV4LXZlcnNpb24gPG4+XQorCSAgICAgWy0tdmVyYm9zZV0KKwkgICAgIFstLV0gWzxmaWxlPi4uLl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitNb2RpZmllcyB0aGUgaW5kZXggb3IgZGlyZWN0b3J5IGNhY2hlLiBFYWNoIGZpbGUgbWVudGlvbmVkIGlzIHVwZGF0ZWQKK2ludG8gdGhlIGluZGV4IGFuZCBhbnkgJ3VubWVyZ2VkJyBvciAnbmVlZHMgdXBkYXRpbmcnIHN0YXRlIGlzCitjbGVhcmVkLgorCitTZWUgYWxzbyBsaW5rZ2l0OmdpdC1hZGRbMV0gZm9yIGEgbW9yZSB1c2VyLWZyaWVuZGx5IHdheSB0byBkbyBzb21lIG9mCit0aGUgbW9zdCBjb21tb24gb3BlcmF0aW9ucyBvbiB0aGUgaW5kZXguCisKK1RoZSB3YXkgJ2dpdCB1cGRhdGUtaW5kZXgnIGhhbmRsZXMgZmlsZXMgaXQgaXMgdG9sZCBhYm91dCBjYW4gYmUgbW9kaWZpZWQKK3VzaW5nIHRoZSB2YXJpb3VzIG9wdGlvbnM6CisKK09QVElPTlMKKy0tLS0tLS0KKy0tYWRkOjoKKwlJZiBhIHNwZWNpZmllZCBmaWxlIGlzbid0IGluIHRoZSBpbmRleCBhbHJlYWR5IHRoZW4gaXQncworCWFkZGVkLgorCURlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGlnbm9yZSBuZXcgZmlsZXMuCisKKy0tcmVtb3ZlOjoKKwlJZiBhIHNwZWNpZmllZCBmaWxlIGlzIGluIHRoZSBpbmRleCBidXQgaXMgbWlzc2luZyB0aGVuIGl0J3MKKwlyZW1vdmVkLgorCURlZmF1bHQgYmVoYXZpb3IgaXMgdG8gaWdub3JlIHJlbW92ZWQgZmlsZS4KKworLS1yZWZyZXNoOjoKKwlMb29rcyBhdCB0aGUgY3VycmVudCBpbmRleCBhbmQgY2hlY2tzIHRvIHNlZSBpZiBtZXJnZXMgb3IKKwl1cGRhdGVzIGFyZSBuZWVkZWQgYnkgY2hlY2tpbmcgc3RhdCgpIGluZm9ybWF0aW9uLgorCistcTo6CisgICAgICAgIFF1aWV0LiAgSWYgLS1yZWZyZXNoIGZpbmRzIHRoYXQgdGhlIGluZGV4IG5lZWRzIGFuIHVwZGF0ZSwgdGhlCisgICAgICAgIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gZXJyb3Igb3V0LiAgVGhpcyBvcHRpb24gbWFrZXMKKwknZ2l0IHVwZGF0ZS1pbmRleCcgY29udGludWUgYW55d2F5LgorCistLWlnbm9yZS1zdWJtb2R1bGVzOjoKKwlEbyBub3QgdHJ5IHRvIHVwZGF0ZSBzdWJtb2R1bGVzLiAgVGhpcyBvcHRpb24gaXMgb25seSByZXNwZWN0ZWQKKwl3aGVuIHBhc3NlZCBiZWZvcmUgLS1yZWZyZXNoLgorCistLXVubWVyZ2VkOjoKKyAgICAgICAgSWYgLS1yZWZyZXNoIGZpbmRzIHVubWVyZ2VkIGNoYW5nZXMgaW4gdGhlIGluZGV4LCB0aGUgZGVmYXVsdAorCWJlaGF2aW9yIGlzIHRvIGVycm9yIG91dC4gIFRoaXMgb3B0aW9uIG1ha2VzICdnaXQgdXBkYXRlLWluZGV4JworICAgICAgICBjb250aW51ZSBhbnl3YXkuCisKKy0taWdub3JlLW1pc3Npbmc6OgorCUlnbm9yZXMgbWlzc2luZyBmaWxlcyBkdXJpbmcgYSAtLXJlZnJlc2gKKworLS1jYWNoZWluZm8gPG1vZGU+LDxvYmplY3Q+LDxwYXRoPjo6CistLWNhY2hlaW5mbyA8bW9kZT4gPG9iamVjdD4gPHBhdGg+OjoKKwlEaXJlY3RseSBpbnNlcnQgdGhlIHNwZWNpZmllZCBpbmZvIGludG8gdGhlIGluZGV4LiAgRm9yCisJYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgeW91IGNhbiBhbHNvIGdpdmUgdGhlc2UgdGhyZWUKKwlhcmd1bWVudHMgYXMgdGhyZWUgc2VwYXJhdGUgcGFyYW1ldGVycywgYnV0IG5ldyB1c2VycyBhcmUKKwllbmNvdXJhZ2VkIHRvIHVzZSBhIHNpbmdsZS1wYXJhbWV0ZXIgZm9ybS4KKworLS1pbmRleC1pbmZvOjoKKyAgICAgICAgUmVhZCBpbmRleCBpbmZvcm1hdGlvbiBmcm9tIHN0ZGluLgorCistLWNobW9kPSgrfC0peDo6CisgICAgICAgIFNldCB0aGUgZXhlY3V0ZSBwZXJtaXNzaW9ucyBvbiB0aGUgdXBkYXRlZCBmaWxlcy4KKworLS1bbm8tXWFzc3VtZS11bmNoYW5nZWQ6OgorCVdoZW4gdGhpcyBmbGFnIGlzIHNwZWNpZmllZCwgdGhlIG9iamVjdCBuYW1lcyByZWNvcmRlZAorCWZvciB0aGUgcGF0aHMgYXJlIG5vdCB1cGRhdGVkLiAgSW5zdGVhZCwgdGhpcyBvcHRpb24KKwlzZXRzL3Vuc2V0cyB0aGUgImFzc3VtZSB1bmNoYW5nZWQiIGJpdCBmb3IgdGhlCisJcGF0aHMuICBXaGVuIHRoZSAiYXNzdW1lIHVuY2hhbmdlZCIgYml0IGlzIG9uLCB0aGUgdXNlcgorCXByb21pc2VzIG5vdCB0byBjaGFuZ2UgdGhlIGZpbGUgYW5kIGFsbG93cyBHaXQgdG8gYXNzdW1lCisJdGhhdCB0aGUgd29ya2luZyB0cmVlIGZpbGUgbWF0Y2hlcyB3aGF0IGlzIHJlY29yZGVkIGluCisJdGhlIGluZGV4LiAgSWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSB3b3JraW5nIHRyZWUgZmlsZSwKKwl5b3UgbmVlZCB0byB1bnNldCB0aGUgYml0IHRvIHRlbGwgR2l0LiAgVGhpcyBpcworCXNvbWV0aW1lcyBoZWxwZnVsIHdoZW4gd29ya2luZyB3aXRoIGEgYmlnIHByb2plY3Qgb24gYQorCWZpbGVzeXN0ZW0gdGhhdCBoYXMgdmVyeSBzbG93IGxzdGF0KDIpIHN5c3RlbSBjYWxsCisJKGUuZy4gY2lmcykuCisrCitHaXQgd2lsbCBmYWlsIChncmFjZWZ1bGx5KSBpbiBjYXNlIGl0IG5lZWRzIHRvIG1vZGlmeSB0aGlzIGZpbGUKK2luIHRoZSBpbmRleCBlLmcuIHdoZW4gbWVyZ2luZyBpbiBhIGNvbW1pdDsKK3RodXMsIGluIGNhc2UgdGhlIGFzc3VtZWQtdW50cmFja2VkIGZpbGUgaXMgY2hhbmdlZCB1cHN0cmVhbSwKK3lvdSB3aWxsIG5lZWQgdG8gaGFuZGxlIHRoZSBzaXR1YXRpb24gbWFudWFsbHkuCisKKy0tcmVhbGx5LXJlZnJlc2g6OgorCUxpa2UgJy0tcmVmcmVzaCcsIGJ1dCBjaGVja3Mgc3RhdCBpbmZvcm1hdGlvbiB1bmNvbmRpdGlvbmFsbHksCisJd2l0aG91dCByZWdhcmQgdG8gdGhlICJhc3N1bWUgdW5jaGFuZ2VkIiBzZXR0aW5nLgorCistLVtuby1dc2tpcC13b3JrdHJlZTo6CisJV2hlbiBvbmUgb2YgdGhlc2UgZmxhZ3MgaXMgc3BlY2lmaWVkLCB0aGUgb2JqZWN0IG5hbWUgcmVjb3JkZWQKKwlmb3IgdGhlIHBhdGhzIGFyZSBub3QgdXBkYXRlZC4gSW5zdGVhZCwgdGhlc2Ugb3B0aW9ucworCXNldCBhbmQgdW5zZXQgdGhlICJza2lwLXdvcmt0cmVlIiBiaXQgZm9yIHRoZSBwYXRocy4gU2VlCisJc2VjdGlvbiAiU2tpcC13b3JrdHJlZSBiaXQiIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCistZzo6CistLWFnYWluOjoKKwlSdW5zICdnaXQgdXBkYXRlLWluZGV4JyBpdHNlbGYgb24gdGhlIHBhdGhzIHdob3NlIGluZGV4CisJZW50cmllcyBhcmUgZGlmZmVyZW50IGZyb20gdGhvc2UgZnJvbSB0aGUgYEhFQURgIGNvbW1pdC4KKworLS11bnJlc29sdmU6OgorCVJlc3RvcmVzIHRoZSAndW5tZXJnZWQnIG9yICduZWVkcyB1cGRhdGluZycgc3RhdGUgb2YgYQorCWZpbGUgZHVyaW5nIGEgbWVyZ2UgaWYgaXQgd2FzIGNsZWFyZWQgYnkgYWNjaWRlbnQuCisKKy0taW5mby1vbmx5OjoKKwlEbyBub3QgY3JlYXRlIG9iamVjdHMgaW4gdGhlIG9iamVjdCBkYXRhYmFzZSBmb3IgYWxsCisJPGZpbGU+IGFyZ3VtZW50cyB0aGF0IGZvbGxvdyB0aGlzIGZsYWc7IGp1c3QgaW5zZXJ0CisJdGhlaXIgb2JqZWN0IElEcyBpbnRvIHRoZSBpbmRleC4KKworLS1mb3JjZS1yZW1vdmU6OgorCVJlbW92ZSB0aGUgZmlsZSBmcm9tIHRoZSBpbmRleCBldmVuIHdoZW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5CisJc3RpbGwgaGFzIHN1Y2ggYSBmaWxlLiAoSW1wbGllcyAtLXJlbW92ZS4pCisKKy0tcmVwbGFjZTo6CisJQnkgZGVmYXVsdCwgd2hlbiBhIGZpbGUgYHBhdGhgIGV4aXN0cyBpbiB0aGUgaW5kZXgsCisJJ2dpdCB1cGRhdGUtaW5kZXgnIHJlZnVzZXMgYW4gYXR0ZW1wdCB0byBhZGQgYHBhdGgvZmlsZWAuCisJU2ltaWxhcmx5IGlmIGEgZmlsZSBgcGF0aC9maWxlYCBleGlzdHMsIGEgZmlsZSBgcGF0aGAKKwljYW5ub3QgYmUgYWRkZWQuICBXaXRoIC0tcmVwbGFjZSBmbGFnLCBleGlzdGluZyBlbnRyaWVzCisJdGhhdCBjb25mbGljdCB3aXRoIHRoZSBlbnRyeSBiZWluZyBhZGRlZCBhcmUKKwlhdXRvbWF0aWNhbGx5IHJlbW92ZWQgd2l0aCB3YXJuaW5nIG1lc3NhZ2VzLgorCistLXN0ZGluOjoKKwlJbnN0ZWFkIG9mIHRha2luZyBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIGNvbW1hbmQgbGluZSwKKwlyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuICBQYXRocyBhcmUKKwlzZXBhcmF0ZWQgYnkgTEYgKGkuZS4gb25lIHBhdGggcGVyIGxpbmUpIGJ5IGRlZmF1bHQuCisKKy0tdmVyYm9zZTo6CisgICAgICAgIFJlcG9ydCB3aGF0IGlzIGJlaW5nIGFkZGVkIGFuZCByZW1vdmVkIGZyb20gaW5kZXguCisKKy0taW5kZXgtdmVyc2lvbiA8bj46OgorCVdyaXRlIHRoZSByZXN1bHRpbmcgaW5kZXggb3V0IGluIHRoZSBuYW1lZCBvbi1kaXNrIGZvcm1hdCB2ZXJzaW9uLgorCVN1cHBvcnRlZCB2ZXJzaW9ucyBhcmUgMiwgMyBhbmQgNC4gVGhlIGN1cnJlbnQgZGVmYXVsdCB2ZXJzaW9uIGlzIDIKKwlvciAzLCBkZXBlbmRpbmcgb24gd2hldGhlciBleHRyYSBmZWF0dXJlcyBhcmUgdXNlZCwgc3VjaCBhcworCWBnaXQgYWRkIC1OYC4KKysKK1ZlcnNpb24gNCBwZXJmb3JtcyBhIHNpbXBsZSBwYXRobmFtZSBjb21wcmVzc2lvbiB0aGF0IHJlZHVjZXMgaW5kZXgKK3NpemUgYnkgMzAlLTUwJSBvbiBsYXJnZSByZXBvc2l0b3JpZXMsIHdoaWNoIHJlc3VsdHMgaW4gZmFzdGVyIGxvYWQKK3RpbWUuIFZlcnNpb24gNCBpcyByZWxhdGl2ZWx5IHlvdW5nIChmaXJzdCByZWxlYXNlZCBpbiBpbiAxLjguMCBpbgorT2N0b2JlciAyMDEyKS4gT3RoZXIgR2l0IGltcGxlbWVudGF0aW9ucyBzdWNoIGFzIEpHaXQgYW5kIGxpYmdpdDIKK21heSBub3Qgc3VwcG9ydCBpdCB5ZXQuCisKKy16OjoKKwlPbmx5IG1lYW5pbmdmdWwgd2l0aCBgLS1zdGRpbmAgb3IgYC0taW5kZXgtaW5mb2A7IHBhdGhzIGFyZQorCXNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBMRi4KKworLS1zcGxpdC1pbmRleDo6CistLW5vLXNwbGl0LWluZGV4OjoKKwlFbmFibGUgb3IgZGlzYWJsZSBzcGxpdCBpbmRleCBtb2RlLiBJZiBlbmFibGVkLCB0aGUgaW5kZXggaXMKKwlzcGxpdCBpbnRvIHR3byBmaWxlcywgJEdJVF9ESVIvaW5kZXggYW5kICRHSVRfRElSL3NoYXJlZGluZGV4LjxTSEEtMT4uCisJQ2hhbmdlcyBhcmUgYWNjdW11bGF0ZWQgaW4gJEdJVF9ESVIvaW5kZXggd2hpbGUgdGhlIHNoYXJlZAorCWluZGV4IGZpbGUgY29udGFpbnMgYWxsIGluZGV4IGVudHJpZXMgc3RheXMgdW5jaGFuZ2VkLiBJZgorCXNwbGl0LWluZGV4IG1vZGUgaXMgYWxyZWFkeSBlbmFibGVkIGFuZCBgLS1zcGxpdC1pbmRleGAgaXMKKwlnaXZlbiBhZ2FpbiwgYWxsIGNoYW5nZXMgaW4gJEdJVF9ESVIvaW5kZXggYXJlIHB1c2hlZCBiYWNrIHRvCisJdGhlIHNoYXJlZCBpbmRleCBmaWxlLiBUaGlzIG1vZGUgaXMgZGVzaWduZWQgZm9yIHZlcnkgbGFyZ2UKKwlpbmRleGVzIHRoYXQgdGFrZSBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aW1lIHRvIHJlYWQgb3Igd3JpdGUuCisKKy0tdW50cmFja2VkLWNhY2hlOjoKKy0tbm8tdW50cmFja2VkLWNhY2hlOjoKKwlFbmFibGUgb3IgZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUgZXh0ZW5zaW9uLiBUaGlzIGNvdWxkIHNwZWVkCisJdXAgZm9yIGNvbW1hbmRzIHRoYXQgaW52b2x2ZSBkZXRlcm1pbmluZyB1bnRyYWNrZWQgZmlsZXMgc3VjaAorCWFzIGBnaXQgc3RhdHVzYC4gVGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSBhbmQgZmlsZQorCXN5c3RlbSBtdXN0IGNoYW5nZSBgc3RfbXRpbWVgIGZpZWxkIG9mIGEgZGlyZWN0b3J5IGlmIGZpbGVzCisJYXJlIGFkZGVkIG9yIGRlbGV0ZWQgaW4gdGhhdCBkaXJlY3RvcnkuCisKKy0tZm9yY2UtdW50cmFja2VkLWNhY2hlOjoKKwlGb3Igc2FmZXR5LCBgLS11bnRyYWNrZWQtY2FjaGVgIHBlcmZvcm1zIHRlc3RzIG9uIHRoZSB3b3JraW5nCisJZGlyZWN0b3J5IHRvIG1ha2Ugc3VyZSB1bnRyYWNrZWQgY2FjaGUgY2FuIGJlIHVzZWQuIFRoZXNlCisJdGVzdHMgY2FuIHRha2UgYSBmZXcgc2Vjb25kcy4gYC0tZm9yY2UtdW50cmFja2VkLWNhY2hlYCBjYW4gYmUKKwl1c2VkIHRvIHNraXAgdGhlIHRlc3RzLgorCitcLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKKzxmaWxlPjo6CisJRmlsZXMgdG8gYWN0IG9uLgorCU5vdGUgdGhhdCBmaWxlcyBiZWdpbm5pbmcgd2l0aCAnLicgYXJlIGRpc2NhcmRlZC4gVGhpcyBpbmNsdWRlcworCWAuL2ZpbGVgIGFuZCBgZGlyLy4vZmlsZWAuIElmIHlvdSBkb24ndCB3YW50IHRoaXMsIHRoZW4gdXNlCisJY2xlYW5lciBuYW1lcy4KKwlUaGUgc2FtZSBhcHBsaWVzIHRvIGRpcmVjdG9yaWVzIGVuZGluZyAnLycgYW5kIHBhdGhzIHdpdGggJy8vJworCitVc2luZyAtLXJlZnJlc2gKKy0tLS0tLS0tLS0tLS0tLQorJy0tcmVmcmVzaCcgZG9lcyBub3QgY2FsY3VsYXRlIGEgbmV3IHNoYTEgZmlsZSBvciBicmluZyB0aGUgaW5kZXgKK3VwLXRvLWRhdGUgZm9yIG1vZGUvY29udGVudCBjaGFuZ2VzLiBCdXQgd2hhdCBpdCAqZG9lcyogZG8gaXMgdG8KKyJyZS1tYXRjaCIgdGhlIHN0YXQgaW5mb3JtYXRpb24gb2YgYSBmaWxlIHdpdGggdGhlIGluZGV4LCBzbyB0aGF0IHlvdQorY2FuIHJlZnJlc2ggdGhlIGluZGV4IGZvciBhIGZpbGUgdGhhdCBoYXNuJ3QgYmVlbiBjaGFuZ2VkIGJ1dCB3aGVyZQordGhlIHN0YXQgZW50cnkgaXMgb3V0IG9mIGRhdGUuCisKK0ZvciBleGFtcGxlLCB5b3UnZCB3YW50IHRvIGRvIHRoaXMgYWZ0ZXIgZG9pbmcgYSAnZ2l0IHJlYWQtdHJlZScsIHRvIGxpbmsKK3VwIHRoZSBzdGF0IGluZGV4IGRldGFpbHMgd2l0aCB0aGUgcHJvcGVyIGZpbGVzLgorCitVc2luZyAtLWNhY2hlaW5mbyBvciAtLWluZm8tb25seQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyctLWNhY2hlaW5mbycgaXMgdXNlZCB0byByZWdpc3RlciBhIGZpbGUgdGhhdCBpcyBub3QgaW4gdGhlCitjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiAgVGhpcyBpcyB1c2VmdWwgZm9yIG1pbmltdW0tY2hlY2tvdXQKK21lcmdpbmcuCisKK1RvIHByZXRlbmQgeW91IGhhdmUgYSBmaWxlIHdpdGggbW9kZSBhbmQgc2hhMSBhdCBwYXRoLCBzYXk6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyA8bW9kZT4sPHNoYTE+LDxwYXRoPgorLS0tLS0tLS0tLS0tLS0tLQorCisnLS1pbmZvLW9ubHknIGlzIHVzZWQgdG8gcmVnaXN0ZXIgZmlsZXMgd2l0aG91dCBwbGFjaW5nIHRoZW0gaW4gdGhlIG9iamVjdAorZGF0YWJhc2UuICBUaGlzIGlzIHVzZWZ1bCBmb3Igc3RhdHVzLW9ubHkgcmVwb3NpdG9yaWVzLgorCitCb3RoICctLWNhY2hlaW5mbycgYW5kICctLWluZm8tb25seScgYmVoYXZlIHNpbWlsYXJseTogdGhlIGluZGV4IGlzIHVwZGF0ZWQKK2J1dCB0aGUgb2JqZWN0IGRhdGFiYXNlIGlzbid0LiAgJy0tY2FjaGVpbmZvJyBpcyB1c2VmdWwgd2hlbiB0aGUgb2JqZWN0IGlzCitpbiB0aGUgZGF0YWJhc2UgYnV0IHRoZSBmaWxlIGlzbid0IGF2YWlsYWJsZSBsb2NhbGx5LiAgJy0taW5mby1vbmx5JyBpcwordXNlZnVsIHdoZW4gdGhlIGZpbGUgaXMgYXZhaWxhYmxlLCBidXQgeW91IGRvIG5vdCB3aXNoIHRvIHVwZGF0ZSB0aGUKK29iamVjdCBkYXRhYmFzZS4KKworCitVc2luZyAtLWluZGV4LWluZm8KKy0tLS0tLS0tLS0tLS0tLS0tLQorCitgLS1pbmRleC1pbmZvYCBpcyBhIG1vcmUgcG93ZXJmdWwgbWVjaGFuaXNtIHRoYXQgbGV0cyB5b3UgZmVlZAorbXVsdGlwbGUgZW50cnkgZGVmaW5pdGlvbnMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQsIGFuZCBkZXNpZ25lZAorc3BlY2lmaWNhbGx5IGZvciBzY3JpcHRzLiAgSXQgY2FuIHRha2UgaW5wdXRzIG9mIHRocmVlIGZvcm1hdHM6CisKKyAgICAuIG1vZGUgICAgICAgICBTUCBzaGExICAgICAgICAgIFRBQiBwYXRoCisrCitUaGUgZmlyc3QgZm9ybWF0IGlzIHdoYXQgImdpdC1hcHBseSAtLWluZGV4LWluZm8iCityZXBvcnRzLCBhbmQgdXNlZCB0byByZWNvbnN0cnVjdCBhIHBhcnRpYWwgdHJlZQordGhhdCBpcyB1c2VkIGZvciBwaG9ueSBtZXJnZSBiYXNlIHRyZWUgd2hlbiBmYWxsaW5nCitiYWNrIG9uIDMtd2F5IG1lcmdlLgorCisgICAgLiBtb2RlIFNQIHR5cGUgU1Agc2hhMSAgICAgICAgICBUQUIgcGF0aAorKworVGhlIHNlY29uZCBmb3JtYXQgaXMgdG8gc3R1ZmYgJ2dpdCBscy10cmVlJyBvdXRwdXQKK2ludG8gdGhlIGluZGV4IGZpbGUuCisKKyAgICAuIG1vZGUgICAgICAgICBTUCBzaGExIFNQIHN0YWdlIFRBQiBwYXRoCisrCitUaGlzIGZvcm1hdCBpcyB0byBwdXQgaGlnaGVyIG9yZGVyIHN0YWdlcyBpbnRvIHRoZQoraW5kZXggZmlsZSBhbmQgbWF0Y2hlcyAnZ2l0IGxzLWZpbGVzIC0tc3RhZ2UnIG91dHB1dC4KKworVG8gcGxhY2UgYSBoaWdoZXIgc3RhZ2UgZW50cnkgdG8gdGhlIGluZGV4LCB0aGUgcGF0aCBzaG91bGQKK2ZpcnN0IGJlIHJlbW92ZWQgYnkgZmVlZGluZyBhIG1vZGU9MCBlbnRyeSBmb3IgdGhlIHBhdGgsIGFuZAordGhlbiBmZWVkaW5nIG5lY2Vzc2FyeSBpbnB1dCBsaW5lcyBpbiB0aGUgdGhpcmQgZm9ybWF0LgorCitGb3IgZXhhbXBsZSwgc3RhcnRpbmcgd2l0aCB0aGlzIGluZGV4OgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLWZpbGVzIC1zCisxMDA2NDQgOGExMjE4YTEwMjRhMjEyYmIzZGIzMGJlY2Q4NjAzMTVmOWYzYWM1MiAwICAgICAgIGZyb3R6CistLS0tLS0tLS0tLS0KKworeW91IGNhbiBmZWVkIHRoZSBmb2xsb3dpbmcgaW5wdXQgdG8gYC0taW5kZXgtaW5mb2A6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbworMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCWZyb3R6CisxMDA2NDQgOGExMjE4YTEwMjRhMjEyYmIzZGIzMGJlY2Q4NjAzMTVmOWYzYWM1MiAxCWZyb3R6CisxMDA3NTUgOGExMjE4YTEwMjRhMjEyYmIzZGIzMGJlY2Q4NjAzMTVmOWYzYWM1MiAyCWZyb3R6CistLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IGxpbmUgb2YgdGhlIGlucHV0IGZlZWRzIDAgYXMgdGhlIG1vZGUgdG8gcmVtb3ZlIHRoZQorcGF0aDsgdGhlIFNIQS0xIGRvZXMgbm90IG1hdHRlciBhcyBsb25nIGFzIGl0IGlzIHdlbGwgZm9ybWF0dGVkLgorVGhlbiB0aGUgc2Vjb25kIGFuZCB0aGlyZCBsaW5lIGZlZWRzIHN0YWdlIDEgYW5kIHN0YWdlIDIgZW50cmllcworZm9yIHRoYXQgcGF0aC4gIEFmdGVyIHRoZSBhYm92ZSwgd2Ugd291bGQgZW5kIHVwIHdpdGggdGhpczoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBscy1maWxlcyAtcworMTAwNjQ0IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMQlmcm90egorMTAwNzU1IDhhMTIxOGExMDI0YTIxMmJiM2RiMzBiZWNkODYwMzE1ZjlmM2FjNTIgMglmcm90egorLS0tLS0tLS0tLS0tCisKKworVXNpbmcgYGBhc3N1bWUgdW5jaGFuZ2VkJycgYml0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFueSBvcGVyYXRpb25zIGluIEdpdCBkZXBlbmQgb24geW91ciBmaWxlc3lzdGVtIHRvIGhhdmUgYW4KK2VmZmljaWVudCBgbHN0YXQoMilgIGltcGxlbWVudGF0aW9uLCBzbyB0aGF0IGBzdF9tdGltZWAKK2luZm9ybWF0aW9uIGZvciB3b3JraW5nIHRyZWUgZmlsZXMgY2FuIGJlIGNoZWFwbHkgY2hlY2tlZCB0byBzZWUKK2lmIHRoZSBmaWxlIGNvbnRlbnRzIGhhdmUgY2hhbmdlZCBmcm9tIHRoZSB2ZXJzaW9uIHJlY29yZGVkIGluCit0aGUgaW5kZXggZmlsZS4gIFVuZm9ydHVuYXRlbHksIHNvbWUgZmlsZXN5c3RlbXMgaGF2ZQoraW5lZmZpY2llbnQgYGxzdGF0KDIpYC4gIElmIHlvdXIgZmlsZXN5c3RlbSBpcyBvbmUgb2YgdGhlbSwgeW91CitjYW4gc2V0ICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXQgdG8gcGF0aHMgeW91IGhhdmUgbm90IGNoYW5nZWQgdG8KK2NhdXNlIEdpdCBub3QgdG8gZG8gdGhpcyBjaGVjay4gIE5vdGUgdGhhdCBzZXR0aW5nIHRoaXMgYml0IG9uIGEKK3BhdGggZG9lcyBub3QgbWVhbiBHaXQgd2lsbCBjaGVjayB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgdG8KK3NlZSBpZiBpdCBoYXMgY2hhbmdlZCAtLSBpdCBtYWtlcyBHaXQgdG8gb21pdCBhbnkgY2hlY2tpbmcgYW5kCithc3N1bWUgaXQgaGFzICpub3QqIGNoYW5nZWQuICBXaGVuIHlvdSBtYWtlIGNoYW5nZXMgdG8gd29ya2luZwordHJlZSBmaWxlcywgeW91IGhhdmUgdG8gZXhwbGljaXRseSB0ZWxsIEdpdCBhYm91dCBpdCBieSBkcm9wcGluZworImFzc3VtZSB1bmNoYW5nZWQiIGJpdCwgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB5b3UgbW9kaWZ5IHRoZW0uCisKK0luIG9yZGVyIHRvIHNldCAiYXNzdW1lIHVuY2hhbmdlZCIgYml0LCB1c2UgYC0tYXNzdW1lLXVuY2hhbmdlZGAKK29wdGlvbi4gIFRvIHVuc2V0LCB1c2UgYC0tbm8tYXNzdW1lLXVuY2hhbmdlZGAuIFRvIHNlZSB3aGljaCBmaWxlcworaGF2ZSB0aGUgImFzc3VtZSB1bmNoYW5nZWQiIGJpdCBzZXQsIHVzZSBgZ2l0IGxzLWZpbGVzIC12YAorKHNlZSBsaW5rZ2l0OmdpdC1scy1maWxlc1sxXSkuCisKK1RoZSBjb21tYW5kIGxvb2tzIGF0IGBjb3JlLmlnbm9yZXN0YXRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBXaGVuCit0aGlzIGlzIHRydWUsIHBhdGhzIHVwZGF0ZWQgd2l0aCBgZ2l0IHVwZGF0ZS1pbmRleCBwYXRocy4uLmAgYW5kCitwYXRocyB1cGRhdGVkIHdpdGggb3RoZXIgR2l0IGNvbW1hbmRzIHRoYXQgdXBkYXRlIGJvdGggaW5kZXggYW5kCit3b3JraW5nIHRyZWUgKGUuZy4gJ2dpdCBhcHBseSAtLWluZGV4JywgJ2dpdCBjaGVja291dC1pbmRleCAtdScsCithbmQgJ2dpdCByZWFkLXRyZWUgLXUnKSBhcmUgYXV0b21hdGljYWxseSBtYXJrZWQgYXMgImFzc3VtZQordW5jaGFuZ2VkIi4gIE5vdGUgdGhhdCAiYXNzdW1lIHVuY2hhbmdlZCIgYml0IGlzICpub3QqIHNldCBpZgorYGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoYCBmaW5kcyB0aGUgd29ya2luZyB0cmVlIGZpbGUgbWF0Y2hlcwordGhlIGluZGV4ICh1c2UgYGdpdCB1cGRhdGUtaW5kZXggLS1yZWFsbHktcmVmcmVzaGAgaWYgeW91IHdhbnQKK3RvIG1hcmsgdGhlbSBhcyAiYXNzdW1lIHVuY2hhbmdlZCIpLgorCisKK0V4YW1wbGVzCistLS0tLS0tLQorVG8gdXBkYXRlIGFuZCByZWZyZXNoIG9ubHkgdGhlIGZpbGVzIGFscmVhZHkgY2hlY2tlZCBvdXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0LWluZGV4IC1uIC1mIC1hICYmIGdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKKy0tLS0tLS0tLS0tLS0tLS0KKworT24gYW4gaW5lZmZpY2llbnQgZmlsZXN5c3RlbSB3aXRoIGBjb3JlLmlnbm9yZXN0YXRgIHNldDo6CisrCistLS0tLS0tLS0tLS0KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlYWxseS1yZWZyZXNoICAgICAgICAgICAgICA8MT4KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLWFzc3VtZS11bmNoYW5nZWQgZm9vLmMgICA8Mj4KKyQgZ2l0IGRpZmYgLS1uYW1lLW9ubHkgICAgICAgICAgICAgICAgICAgICAgICAgICA8Mz4KKyQgZWRpdCBmb28uYworJCBnaXQgZGlmZiAtLW5hbWUtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw0PgorTSBmb28uYworJCBnaXQgdXBkYXRlLWluZGV4IGZvby5jICAgICAgICAgICAgICAgICAgICAgICAgIDw1PgorJCBnaXQgZGlmZiAtLW5hbWUtb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw2PgorJCBlZGl0IGZvby5jCiskIGdpdCBkaWZmIC0tbmFtZS1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDc+CiskIGdpdCB1cGRhdGUtaW5kZXggLS1uby1hc3N1bWUtdW5jaGFuZ2VkIGZvby5jICAgPDg+CiskIGdpdCBkaWZmIC0tbmFtZS1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgPDk+CitNIGZvby5jCistLS0tLS0tLS0tLS0KKysKKzwxPiBmb3JjZXMgbHN0YXQoMikgdG8gc2V0ICJhc3N1bWUgdW5jaGFuZ2VkIiBiaXRzIGZvciBwYXRocyB0aGF0IG1hdGNoIGluZGV4LgorPDI+IG1hcmsgdGhlIHBhdGggdG8gYmUgZWRpdGVkLgorPDM+IHRoaXMgZG9lcyBsc3RhdCgyKSBhbmQgZmluZHMgaW5kZXggbWF0Y2hlcyB0aGUgcGF0aC4KKzw0PiB0aGlzIGRvZXMgbHN0YXQoMikgYW5kIGZpbmRzIGluZGV4IGRvZXMgKm5vdCogbWF0Y2ggdGhlIHBhdGguCis8NT4gcmVnaXN0ZXJpbmcgdGhlIG5ldyB2ZXJzaW9uIHRvIGluZGV4IHNldHMgImFzc3VtZSB1bmNoYW5nZWQiIGJpdC4KKzw2PiBhbmQgaXQgaXMgYXNzdW1lZCB1bmNoYW5nZWQuCis8Nz4gZXZlbiBhZnRlciB5b3UgZWRpdCBpdC4KKzw4PiB5b3UgY2FuIHRlbGwgYWJvdXQgdGhlIGNoYW5nZSBhZnRlciB0aGUgZmFjdC4KKzw5PiBub3cgaXQgY2hlY2tzIHdpdGggbHN0YXQoMikgYW5kIGZpbmRzIGl0IGhhcyBiZWVuIGNoYW5nZWQuCisKKworU2tpcC13b3JrdHJlZSBiaXQKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1NraXAtd29ya3RyZWUgYml0IGNhbiBiZSBkZWZpbmVkIGluIG9uZSAobG9uZykgc2VudGVuY2U6IFdoZW4gcmVhZGluZworYW4gZW50cnksIGlmIGl0IGlzIG1hcmtlZCBhcyBza2lwLXdvcmt0cmVlLCB0aGVuIEdpdCBwcmV0ZW5kcyBpdHMKK3dvcmtpbmcgZGlyZWN0b3J5IHZlcnNpb24gaXMgdXAgdG8gZGF0ZSBhbmQgcmVhZCB0aGUgaW5kZXggdmVyc2lvbgoraW5zdGVhZC4KKworVG8gZWxhYm9yYXRlLCAicmVhZGluZyIgbWVhbnMgY2hlY2tpbmcgZm9yIGZpbGUgZXhpc3RlbmNlLCByZWFkaW5nCitmaWxlIGF0dHJpYnV0ZXMgb3IgZmlsZSBjb250ZW50LiBUaGUgd29ya2luZyBkaXJlY3RvcnkgdmVyc2lvbiBtYXkgYmUKK3ByZXNlbnQgb3IgYWJzZW50LiBJZiBwcmVzZW50LCBpdHMgY29udGVudCBtYXkgbWF0Y2ggYWdhaW5zdCB0aGUgaW5kZXgKK3ZlcnNpb24gb3Igbm90LiBXcml0aW5nIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzIGJpdCwgY29udGVudCBzYWZldHkKK2lzIHN0aWxsIGZpcnN0IHByaW9yaXR5LiBOb3RlIHRoYXQgR2l0IF9jYW5fIHVwZGF0ZSB3b3JraW5nIGRpcmVjdG9yeQorZmlsZSwgdGhhdCBpcyBtYXJrZWQgc2tpcC13b3JrdHJlZSwgaWYgaXQgaXMgc2FmZSB0byBkbyBzbyAoaS5lLgord29ya2luZyBkaXJlY3RvcnkgdmVyc2lvbiBtYXRjaGVzIGluZGV4IHZlcnNpb24pCisKK0FsdGhvdWdoIHRoaXMgYml0IGxvb2tzIHNpbWlsYXIgdG8gYXNzdW1lLXVuY2hhbmdlZCBiaXQsIGl0cyBnb2FsIGlzCitkaWZmZXJlbnQgZnJvbSBhc3N1bWUtdW5jaGFuZ2VkIGJpdCdzLiBTa2lwLXdvcmt0cmVlIGFsc28gdGFrZXMKK3ByZWNlZGVuY2Ugb3ZlciBhc3N1bWUtdW5jaGFuZ2VkIGJpdCB3aGVuIGJvdGggYXJlIHNldC4KKworCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kIGhvbm9ycyBgY29yZS5maWxlbW9kZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIElmCit5b3VyIHJlcG9zaXRvcnkgaXMgb24gYSBmaWxlc3lzdGVtIHdob3NlIGV4ZWN1dGFibGUgYml0cyBhcmUKK3VucmVsaWFibGUsIHRoaXMgc2hvdWxkIGJlIHNldCB0byAnZmFsc2UnIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KK1RoaXMgY2F1c2VzIHRoZSBjb21tYW5kIHRvIGlnbm9yZSBkaWZmZXJlbmNlcyBpbiBmaWxlIG1vZGVzIHJlY29yZGVkCitpbiB0aGUgaW5kZXggYW5kIHRoZSBmaWxlIG1vZGUgb24gdGhlIGZpbGVzeXN0ZW0gaWYgdGhleSBkaWZmZXIgb25seSBvbgorZXhlY3V0YWJsZSBiaXQuICAgT24gc3VjaCBhbiB1bmZvcnR1bmF0ZSBmaWxlc3lzdGVtLCB5b3UgbWF5CituZWVkIHRvIHVzZSAnZ2l0IHVwZGF0ZS1pbmRleCAtLWNobW9kPScuCisKK1F1aXRlIHNpbWlsYXJseSwgaWYgYGNvcmUuc3ltbGlua3NgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgc2V0Cit0byAnZmFsc2UnIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKSwgc3ltYm9saWMgbGlua3MgYXJlIGNoZWNrZWQgb3V0CithcyBwbGFpbiBmaWxlcywgYW5kIHRoaXMgY29tbWFuZCBkb2VzIG5vdCBtb2RpZnkgYSByZWNvcmRlZCBmaWxlIG1vZGUKK2Zyb20gc3ltYm9saWMgbGluayB0byByZWd1bGFyIGZpbGUuCisKK1RoZSBjb21tYW5kIGxvb2tzIGF0IGBjb3JlLmlnbm9yZXN0YXRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuICBTZWUKKydVc2luZyAiYXNzdW1lIHVuY2hhbmdlZCIgYml0JyBzZWN0aW9uIGFib3ZlLgorCitUaGUgY29tbWFuZCBhbHNvIGxvb2tzIGF0IGBjb3JlLnRydXN0Y3RpbWVgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCitJdCBjYW4gYmUgdXNlZnVsIHdoZW4gdGhlIGlub2RlIGNoYW5nZSB0aW1lIGlzIHJlZ3VsYXJseSBtb2RpZmllZCBieQorc29tZXRoaW5nIG91dHNpZGUgR2l0IChmaWxlIHN5c3RlbSBjcmF3bGVycyBhbmQgYmFja3VwIHN5c3RlbXMgdXNlCitjdGltZSBmb3IgbWFya2luZyBmaWxlcyBwcm9jZXNzZWQpIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KKworCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSwKK2xpbmtnaXQ6Z2l0LWFkZFsxXSwKK2xpbmtnaXQ6Z2l0LWxzLWZpbGVzWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXJlZi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtcmVmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjliZmFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBkYXRlLXJlZi50eHQKQEAgLTAsMCArMSwxNTIgQEAKK2dpdC11cGRhdGUtcmVmKDEpCis9PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdXBkYXRlLXJlZiAtIFVwZGF0ZSB0aGUgb2JqZWN0IG5hbWUgc3RvcmVkIGluIGEgcmVmIHNhZmVseQorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdXBkYXRlLXJlZicgWy1tIDxyZWFzb24+XSAoLWQgPHJlZj4gWzxvbGR2YWx1ZT5dIHwgWy0tbm8tZGVyZWZdIFstLWNyZWF0ZS1yZWZsb2ddIDxyZWY+IDxuZXd2YWx1ZT4gWzxvbGR2YWx1ZT5dIHwgLS1zdGRpbiBbLXpdKQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0dpdmVuIHR3byBhcmd1bWVudHMsIHN0b3JlcyB0aGUgPG5ld3ZhbHVlPiBpbiB0aGUgPHJlZj4sIHBvc3NpYmx5CitkZXJlZmVyZW5jaW5nIHRoZSBzeW1ib2xpYyByZWZzLiAgRS5nLiBgZ2l0IHVwZGF0ZS1yZWYgSEVBRAorPG5ld3ZhbHVlPmAgdXBkYXRlcyB0aGUgY3VycmVudCBicmFuY2ggaGVhZCB0byB0aGUgbmV3IG9iamVjdC4KKworR2l2ZW4gdGhyZWUgYXJndW1lbnRzLCBzdG9yZXMgdGhlIDxuZXd2YWx1ZT4gaW4gdGhlIDxyZWY+LAorcG9zc2libHkgZGVyZWZlcmVuY2luZyB0aGUgc3ltYm9saWMgcmVmcywgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQKK3RoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSA8cmVmPiBtYXRjaGVzIDxvbGR2YWx1ZT4uCitFLmcuIGBnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL21hc3RlciA8bmV3dmFsdWU+IDxvbGR2YWx1ZT5gCit1cGRhdGVzIHRoZSBtYXN0ZXIgYnJhbmNoIGhlYWQgdG8gPG5ld3ZhbHVlPiBvbmx5IGlmIGl0cyBjdXJyZW50Cit2YWx1ZSBpcyA8b2xkdmFsdWU+LiAgWW91IGNhbiBzcGVjaWZ5IDQwICIwIiBvciBhbiBlbXB0eSBzdHJpbmcKK2FzIDxvbGR2YWx1ZT4gdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHJlZiB5b3UgYXJlIGNyZWF0aW5nIGRvZXMKK25vdCBleGlzdC4KKworSXQgYWxzbyBhbGxvd3MgYSAicmVmIiBmaWxlIHRvIGJlIGEgc3ltYm9saWMgcG9pbnRlciB0byBhbm90aGVyCityZWYgZmlsZSBieSBzdGFydGluZyB3aXRoIHRoZSBmb3VyLWJ5dGUgaGVhZGVyIHNlcXVlbmNlIG9mCisicmVmOiIuCisKK01vcmUgaW1wb3J0YW50bHksIGl0IGFsbG93cyB0aGUgdXBkYXRlIG9mIGEgcmVmIGZpbGUgdG8gZm9sbG93Cit0aGVzZSBzeW1ib2xpYyBwb2ludGVycywgd2hldGhlciB0aGV5IGFyZSBzeW1saW5rcyBvciB0aGVzZQorInJlZ3VsYXIgZmlsZSBzeW1ib2xpYyByZWZzIi4gIEl0IGZvbGxvd3MgKnJlYWwqIHN5bWxpbmtzIG9ubHkKK2lmIHRoZXkgc3RhcnQgd2l0aCAicmVmcy8iOiBvdGhlcndpc2UgaXQgd2lsbCBqdXN0IHRyeSB0byByZWFkCit0aGVtIGFuZCB1cGRhdGUgdGhlbSBhcyBhIHJlZ3VsYXIgZmlsZSAoaS5lLiBpdCB3aWxsIGFsbG93IHRoZQorZmlsZXN5c3RlbSB0byBmb2xsb3cgdGhlbSwgYnV0IHdpbGwgb3ZlcndyaXRlIHN1Y2ggYSBzeW1saW5rIHRvCitzb21ld2hlcmUgZWxzZSB3aXRoIGEgcmVndWxhciBmaWxlbmFtZSkuCisKK0lmIC0tbm8tZGVyZWYgaXMgZ2l2ZW4sIDxyZWY+IGl0c2VsZiBpcyBvdmVyd3JpdHRlbiwgcmF0aGVyIHRoYW4KK3RoZSByZXN1bHQgb2YgZm9sbG93aW5nIHRoZSBzeW1ib2xpYyBwb2ludGVycy4KKworSW4gZ2VuZXJhbCwgdXNpbmcKKworCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRoZWFkIgorCitzaG91bGQgYmUgYSBfbG90XyBzYWZlciB0aGFuIGRvaW5nCisKKwllY2hvICIkaGVhZCIgPiAiJEdJVF9ESVIvSEVBRCIKKworYm90aCBmcm9tIGEgc3ltbGluayBmb2xsb3dpbmcgc3RhbmRwb2ludCAqYW5kKiBhbiBlcnJvciBjaGVja2luZworc3RhbmRwb2ludC4gIFRoZSAicmVmcy8iIHJ1bGUgZm9yIHN5bWxpbmtzIG1lYW5zIHRoYXQgc3ltbGlua3MKK3RoYXQgcG9pbnQgdG8gIm91dHNpZGUiIHRoZSB0cmVlIGFyZSBzYWZlOiB0aGV5J2xsIGJlIGZvbGxvd2VkCitmb3IgcmVhZGluZyBidXQgbm90IGZvciB3cml0aW5nIChzbyB3ZSdsbCBuZXZlciB3cml0ZSB0aHJvdWdoIGEKK3JlZiBzeW1saW5rIHRvIHNvbWUgb3RoZXIgdHJlZSwgaWYgeW91IGhhdmUgY29waWVkIGEgd2hvbGUKK2FyY2hpdmUgYnkgY3JlYXRpbmcgYSBzeW1saW5rIHRyZWUpLgorCitXaXRoIGAtZGAgZmxhZywgaXQgZGVsZXRlcyB0aGUgbmFtZWQgPHJlZj4gYWZ0ZXIgdmVyaWZ5aW5nIGl0CitzdGlsbCBjb250YWlucyA8b2xkdmFsdWU+LgorCitXaXRoIGAtLXN0ZGluYCwgdXBkYXRlLXJlZiByZWFkcyBpbnN0cnVjdGlvbnMgZnJvbSBzdGFuZGFyZCBpbnB1dCBhbmQKK3BlcmZvcm1zIGFsbCBtb2RpZmljYXRpb25zIHRvZ2V0aGVyLiAgU3BlY2lmeSBjb21tYW5kcyBvZiB0aGUgZm9ybToKKworCXVwZGF0ZSBTUCA8cmVmPiBTUCA8bmV3dmFsdWU+IFtTUCA8b2xkdmFsdWU+XSBMRgorCWNyZWF0ZSBTUCA8cmVmPiBTUCA8bmV3dmFsdWU+IExGCisJZGVsZXRlIFNQIDxyZWY+IFtTUCA8b2xkdmFsdWU+XSBMRgorCXZlcmlmeSBTUCA8cmVmPiBbU1AgPG9sZHZhbHVlPl0gTEYKKwlvcHRpb24gU1AgPG9wdD4gTEYKKworV2l0aCBgLS1jcmVhdGUtcmVmbG9nYCwgdXBkYXRlLXJlZiB3aWxsIGNyZWF0ZSBhIHJlZmxvZyBmb3IgZWFjaCByZWYKK2V2ZW4gaWYgb25lIHdvdWxkIG5vdCBvcmRpbmFyaWx5IGJlIGNyZWF0ZWQuCisKK1F1b3RlIGZpZWxkcyBjb250YWluaW5nIHdoaXRlc3BhY2UgYXMgaWYgdGhleSB3ZXJlIHN0cmluZ3MgaW4gQyBzb3VyY2UKK2NvZGU7IGkuZS4sIHN1cnJvdW5kZWQgYnkgZG91YmxlLXF1b3RlcyBhbmQgd2l0aCBiYWNrc2xhc2ggZXNjYXBlcy4KK1VzZSA0MCAiMCIgY2hhcmFjdGVycyBvciB0aGUgZW1wdHkgc3RyaW5nIHRvIHNwZWNpZnkgYSB6ZXJvIHZhbHVlLiAgVG8KK3NwZWNpZnkgYSBtaXNzaW5nIHZhbHVlLCBvbWl0IHRoZSB2YWx1ZSBhbmQgaXRzIHByZWNlZGluZyBTUCBlbnRpcmVseS4KKworQWx0ZXJuYXRpdmVseSwgdXNlIGAtemAgdG8gc3BlY2lmeSBpbiBOVUwtdGVybWluYXRlZCBmb3JtYXQsIHdpdGhvdXQKK3F1b3Rpbmc6CisKKwl1cGRhdGUgU1AgPHJlZj4gTlVMIDxuZXd2YWx1ZT4gTlVMIFs8b2xkdmFsdWU+XSBOVUwKKwljcmVhdGUgU1AgPHJlZj4gTlVMIDxuZXd2YWx1ZT4gTlVMCisJZGVsZXRlIFNQIDxyZWY+IE5VTCBbPG9sZHZhbHVlPl0gTlVMCisJdmVyaWZ5IFNQIDxyZWY+IE5VTCBbPG9sZHZhbHVlPl0gTlVMCisJb3B0aW9uIFNQIDxvcHQ+IE5VTAorCitJbiB0aGlzIGZvcm1hdCwgdXNlIDQwICIwIiB0byBzcGVjaWZ5IGEgemVybyB2YWx1ZSwgYW5kIHVzZSB0aGUgZW1wdHkKK3N0cmluZyB0byBzcGVjaWZ5IGEgbWlzc2luZyB2YWx1ZS4KKworSW4gZWl0aGVyIGZvcm1hdCwgdmFsdWVzIGNhbiBiZSBzcGVjaWZpZWQgaW4gYW55IGZvcm0gdGhhdCBHaXQKK3JlY29nbml6ZXMgYXMgYW4gb2JqZWN0IG5hbWUuICBDb21tYW5kcyBpbiBhbnkgb3RoZXIgZm9ybWF0IG9yIGEKK3JlcGVhdGVkIDxyZWY+IHByb2R1Y2UgYW4gZXJyb3IuICBDb21tYW5kIG1lYW5pbmdzIGFyZToKKwordXBkYXRlOjoKKwlTZXQgPHJlZj4gdG8gPG5ld3ZhbHVlPiBhZnRlciB2ZXJpZnlpbmcgPG9sZHZhbHVlPiwgaWYgZ2l2ZW4uCisJU3BlY2lmeSBhIHplcm8gPG5ld3ZhbHVlPiB0byBlbnN1cmUgdGhlIHJlZiBkb2VzIG5vdCBleGlzdAorCWFmdGVyIHRoZSB1cGRhdGUgYW5kL29yIGEgemVybyA8b2xkdmFsdWU+IHRvIG1ha2Ugc3VyZSB0aGUKKwlyZWYgZG9lcyBub3QgZXhpc3QgYmVmb3JlIHRoZSB1cGRhdGUuCisKK2NyZWF0ZTo6CisJQ3JlYXRlIDxyZWY+IHdpdGggPG5ld3ZhbHVlPiBhZnRlciB2ZXJpZnlpbmcgaXQgZG9lcyBub3QKKwlleGlzdC4gIFRoZSBnaXZlbiA8bmV3dmFsdWU+IG1heSBub3QgYmUgemVyby4KKworZGVsZXRlOjoKKwlEZWxldGUgPHJlZj4gYWZ0ZXIgdmVyaWZ5aW5nIGl0IGV4aXN0cyB3aXRoIDxvbGR2YWx1ZT4sIGlmCisJZ2l2ZW4uICBJZiBnaXZlbiwgPG9sZHZhbHVlPiBtYXkgbm90IGJlIHplcm8uCisKK3ZlcmlmeTo6CisJVmVyaWZ5IDxyZWY+IGFnYWluc3QgPG9sZHZhbHVlPiBidXQgZG8gbm90IGNoYW5nZSBpdC4gIElmCisJPG9sZHZhbHVlPiB6ZXJvIG9yIG1pc3NpbmcsIHRoZSByZWYgbXVzdCBub3QgZXhpc3QuCisKK29wdGlvbjo6CisJTW9kaWZ5IGJlaGF2aW9yIG9mIHRoZSBuZXh0IGNvbW1hbmQgbmFtaW5nIGEgPHJlZj4uCisJVGhlIG9ubHkgdmFsaWQgb3B0aW9uIGlzIGBuby1kZXJlZmAgdG8gYXZvaWQgZGVyZWZlcmVuY2luZworCWEgc3ltYm9saWMgcmVmLgorCitJZiBhbGwgPHJlZj5zIGNhbiBiZSBsb2NrZWQgd2l0aCBtYXRjaGluZyA8b2xkdmFsdWU+cworc2ltdWx0YW5lb3VzbHksIGFsbCBtb2RpZmljYXRpb25zIGFyZSBwZXJmb3JtZWQuICBPdGhlcndpc2UsIG5vCittb2RpZmljYXRpb25zIGFyZSBwZXJmb3JtZWQuICBOb3RlIHRoYXQgd2hpbGUgZWFjaCBpbmRpdmlkdWFsCis8cmVmPiBpcyB1cGRhdGVkIG9yIGRlbGV0ZWQgYXRvbWljYWxseSwgYSBjb25jdXJyZW50IHJlYWRlciBtYXkKK3N0aWxsIHNlZSBhIHN1YnNldCBvZiB0aGUgbW9kaWZpY2F0aW9ucy4KKworTG9nZ2luZyBVcGRhdGVzCistLS0tLS0tLS0tLS0tLS0KK0lmIGNvbmZpZyBwYXJhbWV0ZXIgImNvcmUubG9nQWxsUmVmVXBkYXRlcyIgaXMgdHJ1ZSBhbmQgdGhlIHJlZiBpcyBvbmUgdW5kZXIKKyJyZWZzL2hlYWRzLyIsICJyZWZzL3JlbW90ZXMvIiwgInJlZnMvbm90ZXMvIiwgb3IgdGhlIHN5bWJvbGljIHJlZiBIRUFEOyBvcgordGhlIGZpbGUgIiRHSVRfRElSL2xvZ3MvPHJlZj4iIGV4aXN0cyB0aGVuIGBnaXQgdXBkYXRlLXJlZmAgd2lsbCBhcHBlbmQKK2EgbGluZSB0byB0aGUgbG9nIGZpbGUgIiRHSVRfRElSL2xvZ3MvPHJlZj4iIChkZXJlZmVyZW5jaW5nIGFsbAorc3ltYm9saWMgcmVmcyBiZWZvcmUgY3JlYXRpbmcgdGhlIGxvZyBuYW1lKSBkZXNjcmliaW5nIHRoZSBjaGFuZ2UKK2luIHJlZiB2YWx1ZS4gIExvZyBsaW5lcyBhcmUgZm9ybWF0dGVkIGFzOgorCisgICAgLiBvbGRzaGExIFNQIG5ld3NoYTEgU1AgY29tbWl0dGVyIExGCisrCitXaGVyZSAib2xkc2hhMSIgaXMgdGhlIDQwIGNoYXJhY3RlciBoZXhhZGVjaW1hbCB2YWx1ZSBwcmV2aW91c2x5CitzdG9yZWQgaW4gPHJlZj4sICJuZXdzaGExIiBpcyB0aGUgNDAgY2hhcmFjdGVyIGhleGFkZWNpbWFsIHZhbHVlIG9mCis8bmV3dmFsdWU+IGFuZCAiY29tbWl0dGVyIiBpcyB0aGUgY29tbWl0dGVyJ3MgbmFtZSwgZW1haWwgYWRkcmVzcworYW5kIGRhdGUgaW4gdGhlIHN0YW5kYXJkIEdpdCBjb21taXR0ZXIgaWRlbnQgZm9ybWF0LgorCitPcHRpb25hbGx5IHdpdGggLW06CisKKyAgICAuIG9sZHNoYTEgU1AgbmV3c2hhMSBTUCBjb21taXR0ZXIgVEFCIG1lc3NhZ2UgTEYKKysKK1doZXJlIGFsbCBmaWVsZHMgYXJlIGFzIGRlc2NyaWJlZCBhYm92ZSBhbmQgIm1lc3NhZ2UiIGlzIHRoZQordmFsdWUgc3VwcGxpZWQgdG8gdGhlIC1tIG9wdGlvbi4KKworQW4gdXBkYXRlIHdpbGwgZmFpbCAod2l0aG91dCBjaGFuZ2luZyA8cmVmPikgaWYgdGhlIGN1cnJlbnQgdXNlciBpcwordW5hYmxlIHRvIGNyZWF0ZSBhIG5ldyBsb2cgZmlsZSwgYXBwZW5kIHRvIHRoZSBleGlzdGluZyBsb2cgZmlsZQorb3IgZG9lcyBub3QgaGF2ZSBjb21taXR0ZXIgaW5mb3JtYXRpb24gYXZhaWxhYmxlLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mby50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtc2VydmVyLWluZm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMGUzNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGRhdGUtc2VydmVyLWluZm8udHh0CkBAIC0wLDAgKzEsNDQgQEAKK2dpdC11cGRhdGUtc2VydmVyLWluZm8oMSkKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyAtIFVwZGF0ZSBhdXhpbGlhcnkgaW5mbyBmaWxlIHRvIGhlbHAgZHVtYiBzZXJ2ZXJzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbycgWy0tZm9yY2VdCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorQSBkdW1iIHNlcnZlciB0aGF0IGRvZXMgbm90IGRvIG9uLXRoZS1mbHkgcGFjayBnZW5lcmF0aW9ucyBtdXN0CitoYXZlIHNvbWUgYXV4aWxpYXJ5IGluZm9ybWF0aW9uIGZpbGVzIGluICRHSVRfRElSL2luZm8gYW5kCiskR0lUX09CSkVDVF9ESVJFQ1RPUlkvaW5mbyBkaXJlY3RvcmllcyB0byBoZWxwIGNsaWVudHMgZGlzY292ZXIKK3doYXQgcmVmZXJlbmNlcyBhbmQgcGFja3MgdGhlIHNlcnZlciBoYXMuICBUaGlzIGNvbW1hbmQKK2dlbmVyYXRlcyBzdWNoIGF1eGlsaWFyeSBmaWxlcy4KKworCitPUFRJT05TCistLS0tLS0tCisKKy1mOjoKKy0tZm9yY2U6OgorCVVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2guCisKKworT1VUUFVUCistLS0tLS0KKworQ3VycmVudGx5IHRoZSBjb21tYW5kIHVwZGF0ZXMgdGhlIGZvbGxvd2luZyBmaWxlcy4gIFBsZWFzZSBzZWUKK2xpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0gZm9yIGRlc2NyaXB0aW9uIG9mCit3aGF0IHRoZXkgYXJlIGZvcjoKKworKiBvYmplY3RzL2luZm8vcGFja3MKKworKiBpbmZvL3JlZnMKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtYXJjaGl2ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC11cGxvYWQtYXJjaGl2ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJhMGYxYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1hcmNoaXZlLnR4dApAQCAtMCwwICsxLDYyIEBACitnaXQtdXBsb2FkLWFyY2hpdmUoMSkKKz09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdXBsb2FkLWFyY2hpdmUgLSBTZW5kIGFyY2hpdmUgYmFjayB0byBnaXQtYXJjaGl2ZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB1cGxvYWQtYXJjaGl2ZScgPGRpcmVjdG9yeT4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitJbnZva2VkIGJ5ICdnaXQgYXJjaGl2ZSAtLXJlbW90ZScgYW5kIHNlbmRzIGEgZ2VuZXJhdGVkIGFyY2hpdmUgdG8gdGhlCitvdGhlciBlbmQgb3ZlciB0aGUgR2l0IHByb3RvY29sLgorCitUaGlzIGNvbW1hbmQgaXMgdXN1YWxseSBub3QgaW52b2tlZCBkaXJlY3RseSBieSB0aGUgZW5kIHVzZXIuICBUaGUgVUkKK2ZvciB0aGUgcHJvdG9jb2wgaXMgb24gdGhlICdnaXQgYXJjaGl2ZScgc2lkZSwgYW5kIHRoZSBwcm9ncmFtIHBhaXIKK2lzIG1lYW50IHRvIGJlIHVzZWQgdG8gZ2V0IGFuIGFyY2hpdmUgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LgorCitTRUNVUklUWQorLS0tLS0tLS0KKworSW4gb3JkZXIgdG8gcHJvdGVjdCB0aGUgcHJpdmFjeSBvZiBvYmplY3RzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbQoraGlzdG9yeSBidXQgbWF5IG5vdCB5ZXQgaGF2ZSBiZWVuIHBydW5lZCwgYGdpdC11cGxvYWQtYXJjaGl2ZWAgYXZvaWRzCitzZXJ2aW5nIGFyY2hpdmVzIGZvciBjb21taXRzIGFuZCB0cmVlcyB0aGF0IGFyZSBub3QgcmVhY2hhYmxlIGZyb20gdGhlCityZXBvc2l0b3J5J3MgcmVmcy4gIEhvd2V2ZXIsIGJlY2F1c2UgY2FsY3VsYXRpbmcgb2JqZWN0IHJlYWNoYWJpbGl0eSBpcworY29tcHV0YXRpb25hbGx5IGV4cGVuc2l2ZSwgYGdpdC11cGxvYWQtYXJjaGl2ZWAgaW1wbGVtZW50cyBhIHN0cmljdGVyCitidXQgZWFzaWVyLXRvLWNoZWNrIHNldCBvZiBydWxlczoKKworICAxLiBDbGllbnRzIG1heSByZXF1ZXN0IGEgY29tbWl0IG9yIHRyZWUgdGhhdCBpcyBwb2ludGVkIHRvIGRpcmVjdGx5IGJ5CisgICAgIGEgcmVmLiBFLmcuLCBgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9b3JpZ2luIHYxLjBgLgorCisgIDIuIENsaWVudHMgbWF5IHJlcXVlc3QgYSBzdWItdHJlZSB3aXRoaW4gYSBjb21taXQgb3IgdHJlZSB1c2luZyB0aGUKKyAgICAgYHJlZjpwYXRoYCBzeW50YXguIEUuZy4sIGBnaXQgYXJjaGl2ZSAtLXJlbW90ZT1vcmlnaW4gdjEuMDpEb2N1bWVudGF0aW9uYC4KKworICAzLiBDbGllbnRzIG1heSBfbm90XyB1c2Ugb3RoZXIgc2hhMSBleHByZXNzaW9ucywgZXZlbiBpZiB0aGUgZW5kCisgICAgIHJlc3VsdCBpcyByZWFjaGFibGUuIEUuZy4sIG5laXRoZXIgYSByZWxhdGl2ZSBjb21taXQgbGlrZSBgbWFzdGVyXmAKKyAgICAgbm9yIGEgbGl0ZXJhbCBzaGExIGxpa2UgYGFiY2QxMjM0YCBpcyBhbGxvd2VkLCBldmVuIGlmIHRoZSByZXN1bHQKKyAgICAgaXMgcmVhY2hhYmxlIGZyb20gdGhlIHJlZnMuCisKK05vdGUgdGhhdCBydWxlIDMgZGlzYWxsb3dzIG1hbnkgY2FzZXMgdGhhdCBkbyBub3QgaGF2ZSBhbnkgcHJpdmFjeQoraW1wbGljYXRpb25zLiBUaGVzZSBydWxlcyBhcmUgc3ViamVjdCB0byBjaGFuZ2UgaW4gZnV0dXJlIHZlcnNpb25zIG9mCitnaXQsIGFuZCB0aGUgc2VydmVyIGFjY2Vzc2VkIGJ5IGBnaXQgYXJjaGl2ZSAtLXJlbW90ZWAgbWF5IG9yIG1heSBub3QKK2ZvbGxvdyB0aGVzZSBleGFjdCBydWxlcy4KKworSWYgdGhlIGNvbmZpZyBvcHRpb24gYHVwbG9hZEFyY2hpdmUuYWxsb3dVbnJlYWNoYWJsZWAgaXMgdHJ1ZSwgdGhlc2UKK3J1bGVzIGFyZSBpZ25vcmVkLCBhbmQgY2xpZW50cyBtYXkgdXNlIGFyYml0cmFyeSBzaGExIGV4cHJlc3Npb25zLgorVGhpcyBpcyB1c2VmdWwgaWYgeW91IGRvIG5vdCBjYXJlIGFib3V0IHRoZSBwcml2YWN5IG9mIHVucmVhY2hhYmxlCitvYmplY3RzLCBvciBpZiB5b3VyIG9iamVjdCBkYXRhYmFzZSBpcyBhbHJlYWR5IHB1YmxpY2x5IGF2YWlsYWJsZSBmb3IKK2FjY2VzcyB2aWEgbm9uLXNtYXJ0LWh0dHAuCisKK09QVElPTlMKKy0tLS0tLS0KKzxkaXJlY3Rvcnk+OjoKKwlUaGUgcmVwb3NpdG9yeSB0byBnZXQgYSB0YXIgYXJjaGl2ZSBmcm9tLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXVwbG9hZC1wYWNrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWJjODA2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtdXBsb2FkLXBhY2sudHh0CkBAIC0wLDAgKzEsNDMgQEAKK2dpdC11cGxvYWQtcGFjaygxKQorPT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC11cGxvYWQtcGFjayAtIFNlbmQgb2JqZWN0cyBwYWNrZWQgYmFjayB0byBnaXQtZmV0Y2gtcGFjaworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdC11cGxvYWQtcGFjaycgWy0tc3RyaWN0XSBbLS10aW1lb3V0PTxuPl0gPGRpcmVjdG9yeT4KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitJbnZva2VkIGJ5ICdnaXQgZmV0Y2gtcGFjaycsIGxlYXJucyB3aGF0CitvYmplY3RzIHRoZSBvdGhlciBzaWRlIGlzIG1pc3NpbmcsIGFuZCBzZW5kcyB0aGVtIGFmdGVyIHBhY2tpbmcuCisKK1RoaXMgY29tbWFuZCBpcyB1c3VhbGx5IG5vdCBpbnZva2VkIGRpcmVjdGx5IGJ5IHRoZSBlbmQgdXNlci4KK1RoZSBVSSBmb3IgdGhlIHByb3RvY29sIGlzIG9uIHRoZSAnZ2l0IGZldGNoLXBhY2snIHNpZGUsIGFuZCB0aGUKK3Byb2dyYW0gcGFpciBpcyBtZWFudCB0byBiZSB1c2VkIHRvIHB1bGwgdXBkYXRlcyBmcm9tIGEgcmVtb3RlCityZXBvc2l0b3J5LiAgRm9yIHB1c2ggb3BlcmF0aW9ucywgc2VlICdnaXQgc2VuZC1wYWNrJy4KKworCitPUFRJT05TCistLS0tLS0tCisKKy0tc3RyaWN0OjoKKwlEbyBub3QgdHJ5IDxkaXJlY3Rvcnk+Ly5naXQvIGlmIDxkaXJlY3Rvcnk+IGlzIG5vIEdpdCBkaXJlY3RvcnkuCisKKy0tdGltZW91dD08bj46OgorCUludGVycnVwdCB0cmFuc2ZlciBhZnRlciA8bj4gc2Vjb25kcyBvZiBpbmFjdGl2aXR5LgorCis8ZGlyZWN0b3J5Pjo6CisJVGhlIHJlcG9zaXRvcnkgdG8gc3luYyBmcm9tLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0bmFtZXNwYWNlc1s3XQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXZhci50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZmY5NTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC12YXIudHh0CkBAIC0wLDAgKzEsNzAgQEAKK2dpdC12YXIoMSkKKz09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXZhciAtIFNob3cgYSBHaXQgbG9naWNhbCB2YXJpYWJsZQorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB2YXInICggLWwgfCA8dmFyaWFibGU+ICkKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitQcmludHMgYSBHaXQgbG9naWNhbCB2YXJpYWJsZS4KKworT1BUSU9OUworLS0tLS0tLQorLWw6OgorCUNhdXNlIHRoZSBsb2dpY2FsIHZhcmlhYmxlcyB0byBiZSBsaXN0ZWQuIEluIGFkZGl0aW9uLCBhbGwgdGhlCisJdmFyaWFibGVzIG9mIHRoZSBHaXQgY29uZmlndXJhdGlvbiBmaWxlIC5naXQvY29uZmlnIGFyZSBsaXN0ZWQKKwlhcyB3ZWxsLiAoSG93ZXZlciwgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGxpc3RpbmcgZnVuY3Rpb25hbGl0eQorCWlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYGdpdCBjb25maWcgLWxgLikKKworRVhBTVBMRQorLS0tLS0tLS0KKwkkIGdpdCB2YXIgR0lUX0FVVEhPUl9JREVOVAorCUVyaWMgVy4gQmllZGVybWFuIDxlYmllZGVybUBsbnhpLmNvbT4gMTEyMTIyMzI3OCAtMDYwMAorCisKK1ZBUklBQkxFUworLS0tLS0tLS0tLQorR0lUX0FVVEhPUl9JREVOVDo6CisgICAgVGhlIGF1dGhvciBvZiBhIHBpZWNlIG9mIGNvZGUuCisKK0dJVF9DT01NSVRURVJfSURFTlQ6OgorICAgIFRoZSBwZXJzb24gd2hvIHB1dCBhIHBpZWNlIG9mIGNvZGUgaW50byBHaXQuCisKK0dJVF9FRElUT1I6OgorICAgIFRleHQgZWRpdG9yIGZvciB1c2UgYnkgR2l0IGNvbW1hbmRzLiAgVGhlIHZhbHVlIGlzIG1lYW50IHRvIGJlCisgICAgaW50ZXJwcmV0ZWQgYnkgdGhlIHNoZWxsIHdoZW4gaXQgaXMgdXNlZC4gIEV4YW1wbGVzOiBgfi9iaW4vdmlgLAorICAgIGAkU09NRV9FTlZJUk9OTUVOVF9WQVJJQUJMRWAsIGAiQzpcUHJvZ3JhbSBGaWxlc1xWaW1cZ3ZpbS5leGUiCisgICAgLS1ub2ZvcmtgLiAgVGhlIG9yZGVyIG9mIHByZWZlcmVuY2UgaXMgdGhlIGAkR0lUX0VESVRPUmAKKyAgICBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlbiBgY29yZS5lZGl0b3JgIGNvbmZpZ3VyYXRpb24sIHRoZW4KKyAgICBgJFZJU1VBTGAsIHRoZW4gYCRFRElUT1JgLCBhbmQgdGhlbiB0aGUgZGVmYXVsdCBjaG9zZW4gYXQgY29tcGlsZQorICAgIHRpbWUsIHdoaWNoIGlzIHVzdWFsbHkgJ3ZpJy4KK2lmZGVmOjpnaXQtZGVmYXVsdC1lZGl0b3JbXQorICAgIFRoZSBidWlsZCB5b3UgYXJlIHVzaW5nIGNob3NlICd7Z2l0LWRlZmF1bHQtZWRpdG9yfScgYXMgdGhlIGRlZmF1bHQuCitlbmRpZjo6Z2l0LWRlZmF1bHQtZWRpdG9yW10KKworR0lUX1BBR0VSOjoKKyAgICBUZXh0IHZpZXdlciBmb3IgdXNlIGJ5IEdpdCBjb21tYW5kcyAoZS5nLiwgJ2xlc3MnKS4gIFRoZSB2YWx1ZQorICAgIGlzIG1lYW50IHRvIGJlIGludGVycHJldGVkIGJ5IHRoZSBzaGVsbC4gIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlCisgICAgaXMgdGhlIGAkR0lUX1BBR0VSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlbiBgY29yZS5wYWdlcmAKKyAgICBjb25maWd1cmF0aW9uLCB0aGVuIGAkUEFHRVJgLCBhbmQgdGhlbiB0aGUgZGVmYXVsdCBjaG9zZW4gYXQKKyAgICBjb21waWxlIHRpbWUgKHVzdWFsbHkgJ2xlc3MnKS4KK2lmZGVmOjpnaXQtZGVmYXVsdC1wYWdlcltdCisgICAgVGhlIGJ1aWxkIHlvdSBhcmUgdXNpbmcgY2hvc2UgJ3tnaXQtZGVmYXVsdC1wYWdlcn0nIGFzIHRoZSBkZWZhdWx0LgorZW5kaWY6OmdpdC1kZWZhdWx0LXBhZ2VyW10KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXQorbGlua2dpdDpnaXQtdGFnWzFdCitsaW5rZ2l0OmdpdC1jb25maWdbMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktY29tbWl0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXZlcmlmeS1jb21taXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZjRkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktY29tbWl0LnR4dApAQCAtMCwwICsxLDMyIEBACitnaXQtdmVyaWZ5LWNvbW1pdCgxKQorPT09PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXZlcmlmeS1jb21taXQgLSBDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiBjb21taXRzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB2ZXJpZnktY29tbWl0JyA8Y29tbWl0Pi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1ZhbGlkYXRlcyB0aGUgZ3BnIHNpZ25hdHVyZSBjcmVhdGVkIGJ5ICdnaXQgY29tbWl0IC1TJy4KKworT1BUSU9OUworLS0tLS0tLQorLS1yYXc6OgorCVByaW50IHRoZSByYXcgZ3BnIHN0YXR1cyBvdXRwdXQgdG8gc3RhbmRhcmQgZXJyb3IgaW5zdGVhZCBvZiB0aGUgbm9ybWFsCisJaHVtYW4tcmVhZGFibGUgb3V0cHV0LgorCistdjo6CistLXZlcmJvc2U6OgorCVByaW50IHRoZSBjb250ZW50cyBvZiB0aGUgY29tbWl0IG9iamVjdCBiZWZvcmUgdmFsaWRhdGluZyBpdC4KKworPGNvbW1pdD4uLi46OgorCVNIQS0xIGlkZW50aWZpZXJzIG9mIEdpdCBjb21taXQgb2JqZWN0cy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktcGFjay50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktcGFjay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFjYTZkMAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXZlcmlmeS1wYWNrLnR4dApAQCAtMCwwICsxLDUzIEBACitnaXQtdmVyaWZ5LXBhY2soMSkKKz09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtdmVyaWZ5LXBhY2sgLSBWYWxpZGF0ZSBwYWNrZWQgR2l0IGFyY2hpdmUgZmlsZXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgdmVyaWZ5LXBhY2snIFstdnwtLXZlcmJvc2VdIFstc3wtLXN0YXQtb25seV0gWy0tXSA8cGFjaz4uaWR4IC4uLgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorUmVhZHMgZ2l2ZW4gaWR4IGZpbGUgZm9yIHBhY2tlZCBHaXQgYXJjaGl2ZSBjcmVhdGVkIHdpdGggdGhlCisnZ2l0IHBhY2stb2JqZWN0cycgY29tbWFuZCBhbmQgdmVyaWZpZXMgaWR4IGZpbGUgYW5kIHRoZQorY29ycmVzcG9uZGluZyBwYWNrIGZpbGUuCisKK09QVElPTlMKKy0tLS0tLS0KKzxwYWNrPi5pZHggLi4uOjoKKwlUaGUgaWR4IGZpbGVzIHRvIHZlcmlmeS4KKworLXY6OgorLS12ZXJib3NlOjoKKwlBZnRlciB2ZXJpZnlpbmcgdGhlIHBhY2ssIHNob3cgbGlzdCBvZiBvYmplY3RzIGNvbnRhaW5lZAorCWluIHRoZSBwYWNrIGFuZCBhIGhpc3RvZ3JhbSBvZiBkZWx0YSBjaGFpbiBsZW5ndGguCisKKy1zOjoKKy0tc3RhdC1vbmx5OjoKKwlEbyBub3QgdmVyaWZ5IHRoZSBwYWNrIGNvbnRlbnRzOyBvbmx5IHNob3cgdGhlIGhpc3RvZ3JhbSBvZiBkZWx0YQorCWNoYWluIGxlbmd0aC4gIFdpdGggYC0tdmVyYm9zZWAsIGxpc3Qgb2Ygb2JqZWN0cyBpcyBhbHNvIHNob3duLgorCitcLS06OgorCURvIG5vdCBpbnRlcnByZXQgYW55IG1vcmUgYXJndW1lbnRzIGFzIG9wdGlvbnMuCisKK09VVFBVVCBGT1JNQVQKKy0tLS0tLS0tLS0tLS0KK1doZW4gc3BlY2lmeWluZyB0aGUgLXYgb3B0aW9uIHRoZSBmb3JtYXQgdXNlZCBpczoKKworCVNIQS0xIHR5cGUgc2l6ZSBzaXplLWluLXBhY2tmaWxlIG9mZnNldC1pbi1wYWNrZmlsZQorCitmb3Igb2JqZWN0cyB0aGF0IGFyZSBub3QgZGVsdGlmaWVkIGluIHRoZSBwYWNrLCBhbmQKKworCVNIQS0xIHR5cGUgc2l6ZSBzaXplLWluLXBhY2tmaWxlIG9mZnNldC1pbi1wYWNrZmlsZSBkZXB0aCBiYXNlLVNIQS0xCisKK2ZvciBvYmplY3RzIHRoYXQgYXJlIGRlbHRpZmllZC4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktdGFnLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXZlcmlmeS10YWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OTBlZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC12ZXJpZnktdGFnLnR4dApAQCAtMCwwICsxLDMyIEBACitnaXQtdmVyaWZ5LXRhZygxKQorPT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXZlcmlmeS10YWcgLSBDaGVjayB0aGUgR1BHIHNpZ25hdHVyZSBvZiB0YWdzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB2ZXJpZnktdGFnJyA8dGFnPi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1ZhbGlkYXRlcyB0aGUgZ3BnIHNpZ25hdHVyZSBjcmVhdGVkIGJ5ICdnaXQgdGFnJy4KKworT1BUSU9OUworLS0tLS0tLQorLS1yYXc6OgorCVByaW50IHRoZSByYXcgZ3BnIHN0YXR1cyBvdXRwdXQgdG8gc3RhbmRhcmQgZXJyb3IgaW5zdGVhZCBvZiB0aGUgbm9ybWFsCisJaHVtYW4tcmVhZGFibGUgb3V0cHV0LgorCistdjo6CistLXZlcmJvc2U6OgorCVByaW50IHRoZSBjb250ZW50cyBvZiB0aGUgdGFnIG9iamVjdCBiZWZvcmUgdmFsaWRhdGluZyBpdC4KKworPHRhZz4uLi46OgorCVNIQS0xIGlkZW50aWZpZXJzIG9mIEdpdCB0YWcgb2JqZWN0cy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC13ZWItLWJyb3dzZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC13ZWItLWJyb3dzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlZGU1YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXdlYi0tYnJvd3NlLnR4dApAQCAtMCwwICsxLDEyNCBAQAorZ2l0LXdlYntsaXRkZH1icm93c2UoMSkKKz09PT09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC13ZWItLWJyb3dzZSAtIEdpdCBoZWxwZXIgc2NyaXB0IHRvIGxhdW5jaCBhIHdlYiBicm93c2VyCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB3ZWJ7bGl0ZGR9YnJvd3NlJyBbT1BUSU9OU10gVVJML0ZJTEUgLi4uCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIHNjcmlwdCB0cmllcywgYXMgbXVjaCBhcyBwb3NzaWJsZSwgdG8gZGlzcGxheSB0aGUgVVJMcyBhbmQgRklMRXMKK3RoYXQgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMsIGFzIEhUTUwgcGFnZXMgaW4gbmV3IHRhYnMgb24gYW4gYWxyZWFkeQorb3BlbmVkIHdlYiBicm93c2VyLgorCitUaGUgZm9sbG93aW5nIGJyb3dzZXJzIChvciBjb21tYW5kcykgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6CisKKyogZmlyZWZveCAodGhpcyBpcyB0aGUgZGVmYXVsdCB1bmRlciBYIFdpbmRvdyB3aGVuIG5vdCB1c2luZyBLREUpCisqIGljZXdlYXNlbAorKiBzZWFtb25rZXkKKyogaWNlYXBlCisqIGNocm9taXVtIChhbHNvIHN1cHBvcnRlZCBhcyBjaHJvbWl1bS1icm93c2VyKQorKiBnb29nbGUtY2hyb21lIChhbHNvIHN1cHBvcnRlZCBhcyBjaHJvbWUpCisqIGtvbnF1ZXJvciAodGhpcyBpcyB0aGUgZGVmYXVsdCB1bmRlciBLREUsIHNlZSAnTm90ZSBhYm91dCBrb25xdWVyb3InIGJlbG93KQorKiBvcGVyYQorKiB3M20gKHRoaXMgaXMgdGhlIGRlZmF1bHQgb3V0c2lkZSBncmFwaGljYWwgZW52aXJvbm1lbnRzKQorKiBlbGlua3MKKyogbGlua3MKKyogbHlueAorKiBkaWxsbworKiBvcGVuICh0aGlzIGlzIHRoZSBkZWZhdWx0IHVuZGVyIE1hYyBPUyBYIEdVSSkKKyogc3RhcnQgKHRoaXMgaXMgdGhlIGRlZmF1bHQgdW5kZXIgTWluR1cpCisqIGN5Z3N0YXJ0ICh0aGlzIGlzIHRoZSBkZWZhdWx0IHVuZGVyIEN5Z3dpbikKKyogeGRnLW9wZW4KKworQ3VzdG9tIGNvbW1hbmRzIG1heSBhbHNvIGJlIHNwZWNpZmllZC4KKworT1BUSU9OUworLS0tLS0tLQorLWIgPGJyb3dzZXI+OjoKKy0tYnJvd3Nlcj08YnJvd3Nlcj46OgorCVVzZSB0aGUgc3BlY2lmaWVkIGJyb3dzZXIuIEl0IG11c3QgYmUgaW4gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkCisJYnJvd3NlcnMuCisKKy10IDxicm93c2VyPjo6CistLXRvb2w9PGJyb3dzZXI+OjoKKwlTYW1lIGFzIGFib3ZlLgorCistYyA8Y29uZi52YXI+OjoKKy0tY29uZmlnPTxjb25mLnZhcj46OgorCUNPTkYuVkFSIGlzIGxvb2tlZCB1cCBpbiB0aGUgR2l0IGNvbmZpZyBmaWxlcy4gSWYgaXQncyBzZXQsCisJdGhlbiBpdHMgdmFsdWUgc3BlY2lmaWVzIHRoZSBicm93c2VyIHRoYXQgc2hvdWxkIGJlIHVzZWQuCisKK0NPTkZJR1VSQVRJT04gVkFSSUFCTEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDT05GLlZBUiAoZnJvbSAtYyBvcHRpb24pIGFuZCB3ZWIuYnJvd3Nlcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIHdlYiBicm93c2VyIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgYSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHBhc3NlZAord2l0aCB0aGUgLWMgKG9yIC0tY29uZmlnKSBjb21tYW5kLWxpbmUgb3B0aW9uLCBvciB0aGUgJ3dlYi5icm93c2VyJworY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpZiB0aGUgZm9ybWVyIGlzIG5vdCB1c2VkLgorCiticm93c2VyLjx0b29sPi5wYXRoCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gZXhwbGljaXRseSBwcm92aWRlIGEgZnVsbCBwYXRoIHRvIHlvdXIgcHJlZmVycmVkIGJyb3dzZXIgYnkKK3NldHRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgJ2Jyb3dzZXIuPHRvb2w+LnBhdGgnLiBGb3IgZXhhbXBsZSwKK3lvdSBjYW4gY29uZmlndXJlIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGZpcmVmb3ggYnkgc2V0dGluZworJ2Jyb3dzZXIuZmlyZWZveC5wYXRoJy4gT3RoZXJ3aXNlLCAnZ2l0IHdlYntsaXRkZH1icm93c2UnIGFzc3VtZXMgdGhlIHRvb2wKK2lzIGF2YWlsYWJsZSBpbiBQQVRILgorCiticm93c2VyLjx0b29sPi5jbWQKK35+fn5+fn5+fn5+fn5+fn5+fgorCitXaGVuIHRoZSBicm93c2VyLCBzcGVjaWZpZWQgYnkgb3B0aW9ucyBvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcywgaXMKK25vdCBhbW9uZyB0aGUgc3VwcG9ydGVkIG9uZXMsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcKKydicm93c2VyLjx0b29sPi5jbWQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgd2lsbCBiZSBsb29rZWQgdXAuIElmIHRoaXMKK3ZhcmlhYmxlIGV4aXN0cyB0aGVuICdnaXQgd2Vie2xpdGRkfWJyb3dzZScgd2lsbCB0cmVhdCB0aGUgc3BlY2lmaWVkIHRvb2wKK2FzIGEgY3VzdG9tIGNvbW1hbmQgYW5kIHdpbGwgdXNlIGEgc2hlbGwgZXZhbCB0byBydW4gdGhlIGNvbW1hbmQgd2l0aAordGhlIFVSTHMgcGFzc2VkIGFzIGFyZ3VtZW50cy4KKworTm90ZSBhYm91dCBrb25xdWVyb3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gJ2tvbnF1ZXJvcicgaXMgc3BlY2lmaWVkIGJ5IGEgY29tbWFuZC1saW5lIG9wdGlvbiBvciBhCitjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB3ZSBsYXVuY2ggJ2tmbWNsaWVudCcgdG8gdHJ5IHRvIG9wZW4gdGhlIEhUTUwKK21hbiBwYWdlIG9uIGFuIGFscmVhZHkgb3BlbmVkIGtvbnF1ZXJvciBpbiBhIG5ldyB0YWIgaWYgcG9zc2libGUuCisKK0ZvciBjb25zaXN0ZW5jeSwgd2UgYWxzbyB0cnkgc3VjaCBhIHRyaWNrIGlmICdicm93c2VyLmtvbnF1ZXJvci5wYXRoJyBpcworc2V0IHRvIHNvbWV0aGluZyBsaWtlICdBX1BBVEhfVE8va29ucXVlcm9yJy4gVGhhdCBtZWFucyB3ZSB3aWxsIHRyeSB0bworbGF1bmNoICdBX1BBVEhfVE8va2ZtY2xpZW50JyBpbnN0ZWFkLgorCitJZiB5b3UgcmVhbGx5IHdhbnQgdG8gdXNlICdrb25xdWVyb3InLCB0aGVuIHlvdSBjYW4gdXNlIHNvbWV0aGluZyBsaWtlCit0aGUgZm9sbG93aW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlbd2ViXQorCQlicm93c2VyID0ga29ucQorCisJW2Jyb3dzZXIgImtvbnEiXQorCQljbWQgPSBBX1BBVEhfVE8va29ucXVlcm9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSBhYm91dCBnaXQtY29uZmlnIC0tZ2xvYmFsCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworTm90ZSB0aGF0IHRoZXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHNob3VsZCBwcm9iYWJseSBiZSBzZXQgdXNpbmcKK3RoZSAnLS1nbG9iYWwnIGZsYWcsIGZvciBleGFtcGxlIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgd2ViLmJyb3dzZXIgZmlyZWZveAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FzIHRoZXkgYXJlIHByb2JhYmx5IG1vcmUgdXNlciBzcGVjaWZpYyB0aGFuIHJlcG9zaXRvcnkgc3BlY2lmaWMuCitTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtd2hhdGNoYW5nZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNjNjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC13aGF0Y2hhbmdlZC50eHQKQEAgLTAsMCArMSw0MyBAQAorZ2l0LXdoYXRjaGFuZ2VkKDEpCis9PT09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LXdoYXRjaGFuZ2VkIC0gU2hvdyBsb2dzIHdpdGggZGlmZmVyZW5jZSBlYWNoIGNvbW1pdCBpbnRyb2R1Y2VzCisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0IHdoYXRjaGFuZ2VkJyA8b3B0aW9uPi4uLgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworU2hvd3MgY29tbWl0IGxvZ3MgYW5kIGRpZmYgb3V0cHV0IGVhY2ggY29tbWl0IGludHJvZHVjZXMuCisKK05ldyB1c2VycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgbGlua2dpdDpnaXQtbG9nWzFdIGluc3RlYWQuICBUaGUKK2B3aGF0Y2hhbmdlZGAgY29tbWFuZCBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBsaW5rZ2l0OmdpdC1sb2dbMV0KK2J1dCBkZWZhdWx0cyB0byBzaG93IHRoZSByYXcgZm9ybWF0IGRpZmYgb3V0cHV0IGFuZCB0byBza2lwIG1lcmdlcy4KKworVGhlIGNvbW1hbmQgaXMga2VwdCBwcmltYXJpbHkgZm9yIGhpc3RvcmljYWwgcmVhc29uczsgZmluZ2VycyBvZgorbWFueSBwZW9wbGUgd2hvIGxlYXJuZWQgR2l0IGxvbmcgYmVmb3JlIGBnaXQgbG9nYCB3YXMgaW52ZW50ZWQgYnkKK3JlYWRpbmcgTGludXgga2VybmVsIG1haWxpbmcgbGlzdCBhcmUgdHJhaW5lZCB0byB0eXBlIGl0LgorCisKK0V4YW1wbGVzCistLS0tLS0tLQorYGdpdCB3aGF0Y2hhbmdlZCAtcCB2Mi42LjEyLi4gaW5jbHVkZS9zY3NpIGRyaXZlcnMvc2NzaWA6OgorCisJU2hvdyBhcyBwYXRjaGVzIHRoZSBjb21taXRzIHNpbmNlIHZlcnNpb24gJ3YyLjYuMTInIHRoYXQgY2hhbmdlZAorCWFueSBmaWxlIGluIHRoZSBpbmNsdWRlL3Njc2kgb3IgZHJpdmVycy9zY3NpIHN1YmRpcmVjdG9yaWVzCisKK2BnaXQgd2hhdGNoYW5nZWQgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iIC0tIGdpdGtgOjoKKworCVNob3cgdGhlIGNoYW5nZXMgZHVyaW5nIHRoZSBsYXN0IHR3byB3ZWVrcyB0byB0aGUgZmlsZSAnZ2l0aycuCisJVGhlICItLSIgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIHRoZSAqYnJhbmNoKiBuYW1lZAorCSdnaXRrJworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0LXdvcmt0cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXdvcmt0cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjlhZDA0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtd29ya3RyZWUudHh0CkBAIC0wLDAgKzEsMjIzIEBACitnaXQtd29ya3RyZWUoMSkKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtd29ya3RyZWUgLSBNYW5hZ2UgbXVsdGlwbGUgd29ya2luZyB0cmVlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB3b3JrdHJlZSBhZGQnIFstZl0gWy0tZGV0YWNoXSBbLWIgPG5ldy1icmFuY2g+XSA8cGF0aD4gWzxicmFuY2g+XQorJ2dpdCB3b3JrdHJlZSBwcnVuZScgWy1uXSBbLXZdIFstLWV4cGlyZSA8ZXhwaXJlPl0KKydnaXQgd29ya3RyZWUgbGlzdCcgWy0tcG9yY2VsYWluXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworTWFuYWdlIG11bHRpcGxlIHdvcmtpbmcgdHJlZXMgYXR0YWNoZWQgdG8gdGhlIHNhbWUgcmVwb3NpdG9yeS4KKworQSBnaXQgcmVwb3NpdG9yeSBjYW4gc3VwcG9ydCBtdWx0aXBsZSB3b3JraW5nIHRyZWVzLCBhbGxvd2luZyB5b3UgdG8gY2hlY2sKK291dCBtb3JlIHRoYW4gb25lIGJyYW5jaCBhdCBhIHRpbWUuICBXaXRoIGBnaXQgd29ya3RyZWUgYWRkYCBhIG5ldyB3b3JraW5nCit0cmVlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVwb3NpdG9yeS4gIFRoaXMgbmV3IHdvcmtpbmcgdHJlZSBpcyBjYWxsZWQgYQorImxpbmtlZCB3b3JraW5nIHRyZWUiIGFzIG9wcG9zZWQgdG8gdGhlICJtYWluIHdvcmtpbmcgdHJlZSIgcHJlcGFyZWQgYnkgImdpdAoraW5pdCIgb3IgImdpdCBjbG9uZSIuICBBIHJlcG9zaXRvcnkgaGFzIG9uZSBtYWluIHdvcmtpbmcgdHJlZSAoaWYgaXQncyBub3QgYQorYmFyZSByZXBvc2l0b3J5KSBhbmQgemVybyBvciBtb3JlIGxpbmtlZCB3b3JraW5nIHRyZWVzLgorCitXaGVuIHlvdSBhcmUgZG9uZSB3aXRoIGEgbGlua2VkIHdvcmtpbmcgdHJlZSB5b3UgY2FuIHNpbXBseSBkZWxldGUgaXQuCitUaGUgd29ya2luZyB0cmVlJ3MgYWRtaW5pc3RyYXRpdmUgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgKHNlZQorIkRFVEFJTFMiIGJlbG93KSB3aWxsIGV2ZW50dWFsbHkgYmUgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5IChzZWUKK2BnYy53b3JrdHJlZVBydW5lRXhwaXJlYCBpbiBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLCBvciB5b3UgY2FuIHJ1bgorYGdpdCB3b3JrdHJlZSBwcnVuZWAgaW4gdGhlIG1haW4gb3IgYW55IGxpbmtlZCB3b3JraW5nIHRyZWUgdG8KK2NsZWFuIHVwIGFueSBzdGFsZSBhZG1pbmlzdHJhdGl2ZSBmaWxlcy4KKworSWYgeW91IG1vdmUgYSBsaW5rZWQgd29ya2luZyB0cmVlIHRvIGFub3RoZXIgZmlsZSBzeXN0ZW0sIG9yCit3aXRoaW4gYSBmaWxlIHN5c3RlbSB0aGF0IGRvZXMgbm90IHN1cHBvcnQgaGFyZCBsaW5rcywgeW91IG5lZWQgdG8gcnVuCithdCBsZWFzdCBvbmUgZ2l0IGNvbW1hbmQgaW5zaWRlIHRoZSBsaW5rZWQgd29ya2luZyB0cmVlCisoZS5nLiBgZ2l0IHN0YXR1c2ApIGluIG9yZGVyIHRvIHVwZGF0ZSBpdHMgYWRtaW5pc3RyYXRpdmUgZmlsZXMgaW4gdGhlCityZXBvc2l0b3J5IHNvIHRoYXQgdGhleSBkbyBub3QgZ2V0IGF1dG9tYXRpY2FsbHkgcHJ1bmVkLgorCitJZiBhIGxpbmtlZCB3b3JraW5nIHRyZWUgaXMgc3RvcmVkIG9uIGEgcG9ydGFibGUgZGV2aWNlIG9yIG5ldHdvcmsgc2hhcmUKK3doaWNoIGlzIG5vdCBhbHdheXMgbW91bnRlZCwgeW91IGNhbiBwcmV2ZW50IGl0cyBhZG1pbmlzdHJhdGl2ZSBmaWxlcyBmcm9tCitiZWluZyBwcnVuZWQgYnkgY3JlYXRpbmcgYSBmaWxlIG5hbWVkICdsb2NrZWQnIGFsb25nc2lkZSB0aGUgb3RoZXIKK2FkbWluaXN0cmF0aXZlIGZpbGVzLCBvcHRpb25hbGx5IGNvbnRhaW5pbmcgYSBwbGFpbiB0ZXh0IHJlYXNvbiB0aGF0CitwcnVuaW5nIHNob3VsZCBiZSBzdXBwcmVzc2VkLiBTZWUgc2VjdGlvbiAiREVUQUlMUyIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0NPTU1BTkRTCistLS0tLS0tLQorYWRkIDxwYXRoPiBbPGJyYW5jaD5dOjoKKworQ3JlYXRlIGA8cGF0aD5gIGFuZCBjaGVja291dCBgPGJyYW5jaD5gIGludG8gaXQuIFRoZSBuZXcgd29ya2luZyBkaXJlY3RvcnkKK2lzIGxpbmtlZCB0byB0aGUgY3VycmVudCByZXBvc2l0b3J5LCBzaGFyaW5nIGV2ZXJ5dGhpbmcgZXhjZXB0IHdvcmtpbmcKK2RpcmVjdG9yeSBzcGVjaWZpYyBmaWxlcyBzdWNoIGFzIEhFQUQsIGluZGV4LCBldGMuCisrCitJZiBgPGJyYW5jaD5gIGlzIG9taXR0ZWQgYW5kIG5laXRoZXIgYC1iYCBub3IgYC1CYCBub3IgYC0tZGV0YWNoZWRgIHVzZWQsCit0aGVuLCBhcyBhIGNvbnZlbmllbmNlLCBhIG5ldyBicmFuY2ggYmFzZWQgYXQgSEVBRCBpcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHksCithcyBpZiBgLWIgJChiYXNlbmFtZSA8cGF0aD4pYCB3YXMgc3BlY2lmaWVkLgorCitwcnVuZTo6CisKK1BydW5lIHdvcmtpbmcgdHJlZSBpbmZvcm1hdGlvbiBpbiAkR0lUX0RJUi93b3JrdHJlZXMuCisKK2xpc3Q6OgorCitMaXN0IGRldGFpbHMgb2YgZWFjaCB3b3JrdHJlZS4gIFRoZSBtYWluIHdvcmt0cmVlIGlzIGxpc3RlZCBmaXJzdCwgZm9sbG93ZWQgYnkKK2VhY2ggb2YgdGhlIGxpbmtlZCB3b3JrdHJlZXMuICBUaGUgb3V0cHV0IGRldGFpbHMgaW5jbHVkZSBpZiB0aGUgd29ya3RyZWUgaXMKK2JhcmUsIHRoZSByZXZpc2lvbiBjdXJyZW50bHkgY2hlY2tlZCBvdXQsIGFuZCB0aGUgYnJhbmNoIGN1cnJlbnRseSBjaGVja2VkIG91dAorKG9yICdkZXRhY2hlZCBIRUFEJyBpZiBub25lKS4KKworT1BUSU9OUworLS0tLS0tLQorCistZjo6CistLWZvcmNlOjoKKwlCeSBkZWZhdWx0LCBgYWRkYCByZWZ1c2VzIHRvIGNyZWF0ZSBhIG5ldyB3b3JraW5nIHRyZWUgd2hlbiBgPGJyYW5jaD5gCisJaXMgYWxyZWFkeSBjaGVja2VkIG91dCBieSBhbm90aGVyIHdvcmtpbmcgdHJlZS4gVGhpcyBvcHRpb24gb3ZlcnJpZGVzCisJdGhhdCBzYWZlZ3VhcmQuCisKKy1iIDxuZXctYnJhbmNoPjo6CistQiA8bmV3LWJyYW5jaD46OgorCVdpdGggYGFkZGAsIGNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgYDxuZXctYnJhbmNoPmAgc3RhcnRpbmcgYXQKKwlgPGJyYW5jaD5gLCBhbmQgY2hlY2sgb3V0IGA8bmV3LWJyYW5jaD5gIGludG8gdGhlIG5ldyB3b3JraW5nIHRyZWUuCisJSWYgYDxicmFuY2g+YCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBIRUFELgorCUJ5IGRlZmF1bHQsIGAtYmAgcmVmdXNlcyB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIGlmIGl0IGFscmVhZHkKKwlleGlzdHMuIGAtQmAgb3ZlcnJpZGVzIHRoaXMgc2FmZWd1YXJkLCByZXNldHRpbmcgYDxuZXctYnJhbmNoPmAgdG8KKwlgPGJyYW5jaD5gLgorCistLWRldGFjaDo6CisJV2l0aCBgYWRkYCwgZGV0YWNoIEhFQUQgaW4gdGhlIG5ldyB3b3JraW5nIHRyZWUuIFNlZSAiREVUQUNIRUQgSEVBRCIKKwlpbiBsaW5rZ2l0OmdpdC1jaGVja291dFsxXS4KKworLW46OgorLS1kcnktcnVuOjoKKwlXaXRoIGBwcnVuZWAsIGRvIG5vdCByZW1vdmUgYW55dGhpbmc7IGp1c3QgcmVwb3J0IHdoYXQgaXQgd291bGQKKwlyZW1vdmUuCisKKy0tcG9yY2VsYWluOjoKKwlXaXRoIGBsaXN0YCwgb3V0cHV0IGluIGFuIGVhc3ktdG8tcGFyc2UgZm9ybWF0IGZvciBzY3JpcHRzLgorCVRoaXMgZm9ybWF0IHdpbGwgcmVtYWluIHN0YWJsZSBhY3Jvc3MgR2l0IHZlcnNpb25zIGFuZCByZWdhcmRsZXNzIG9mIHVzZXIKKwljb25maWd1cmF0aW9uLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLgorCistdjo6CistLXZlcmJvc2U6OgorCVdpdGggYHBydW5lYCwgcmVwb3J0IGFsbCByZW1vdmFscy4KKworLS1leHBpcmUgPHRpbWU+OjoKKwlXaXRoIGBwcnVuZWAsIG9ubHkgZXhwaXJlIHVudXNlZCB3b3JraW5nIHRyZWVzIG9sZGVyIHRoYW4gPHRpbWU+LgorCitERVRBSUxTCistLS0tLS0tCitFYWNoIGxpbmtlZCB3b3JraW5nIHRyZWUgaGFzIGEgcHJpdmF0ZSBzdWItZGlyZWN0b3J5IGluIHRoZSByZXBvc2l0b3J5J3MKKyRHSVRfRElSL3dvcmt0cmVlcyBkaXJlY3RvcnkuICBUaGUgcHJpdmF0ZSBzdWItZGlyZWN0b3J5J3MgbmFtZSBpcyB1c3VhbGx5Cit0aGUgYmFzZSBuYW1lIG9mIHRoZSBsaW5rZWQgd29ya2luZyB0cmVlJ3MgcGF0aCwgcG9zc2libHkgYXBwZW5kZWQgd2l0aCBhCitudW1iZXIgdG8gbWFrZSBpdCB1bmlxdWUuICBGb3IgZXhhbXBsZSwgd2hlbiBgJEdJVF9ESVI9L3BhdGgvbWFpbi8uZ2l0YCB0aGUKK2NvbW1hbmQgYGdpdCB3b3JrdHJlZSBhZGQgL3BhdGgvb3RoZXIvdGVzdC1uZXh0IG5leHRgIGNyZWF0ZXMgdGhlIGxpbmtlZAord29ya2luZyB0cmVlIGluIGAvcGF0aC9vdGhlci90ZXN0LW5leHRgIGFuZCBhbHNvIGNyZWF0ZXMgYQorYCRHSVRfRElSL3dvcmt0cmVlcy90ZXN0LW5leHRgIGRpcmVjdG9yeSAob3IgYCRHSVRfRElSL3dvcmt0cmVlcy90ZXN0LW5leHQxYAoraWYgYHRlc3QtbmV4dGAgaXMgYWxyZWFkeSB0YWtlbikuCisKK1dpdGhpbiBhIGxpbmtlZCB3b3JraW5nIHRyZWUsICRHSVRfRElSIGlzIHNldCB0byBwb2ludCB0byB0aGlzIHByaXZhdGUKK2RpcmVjdG9yeSAoZS5nLiBgL3BhdGgvbWFpbi8uZ2l0L3dvcmt0cmVlcy90ZXN0LW5leHRgIGluIHRoZSBleGFtcGxlKSBhbmQKKyRHSVRfQ09NTU9OX0RJUiBpcyBzZXQgdG8gcG9pbnQgYmFjayB0byB0aGUgbWFpbiB3b3JraW5nIHRyZWUncyAkR0lUX0RJUgorKGUuZy4gYC9wYXRoL21haW4vLmdpdGApLiBUaGVzZSBzZXR0aW5ncyBhcmUgbWFkZSBpbiBhIGAuZ2l0YCBmaWxlIGxvY2F0ZWQgYXQKK3RoZSB0b3AgZGlyZWN0b3J5IG9mIHRoZSBsaW5rZWQgd29ya2luZyB0cmVlLgorCitQYXRoIHJlc29sdXRpb24gdmlhIGBnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGhgIHVzZXMgZWl0aGVyCiskR0lUX0RJUiBvciAkR0lUX0NPTU1PTl9ESVIgZGVwZW5kaW5nIG9uIHRoZSBwYXRoLiBGb3IgZXhhbXBsZSwgaW4gdGhlCitsaW5rZWQgd29ya2luZyB0cmVlIGBnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggSEVBRGAgcmV0dXJucworYC9wYXRoL21haW4vLmdpdC93b3JrdHJlZXMvdGVzdC1uZXh0L0hFQURgIChub3QKK2AvcGF0aC9vdGhlci90ZXN0LW5leHQvLmdpdC9IRUFEYCBvciBgL3BhdGgvbWFpbi8uZ2l0L0hFQURgKSB3aGlsZSBgZ2l0CityZXYtcGFyc2UgLS1naXQtcGF0aCByZWZzL2hlYWRzL21hc3RlcmAgdXNlcworJEdJVF9DT01NT05fRElSIGFuZCByZXR1cm5zIGAvcGF0aC9tYWluLy5naXQvcmVmcy9oZWFkcy9tYXN0ZXJgLAorc2luY2UgcmVmcyBhcmUgc2hhcmVkIGFjcm9zcyBhbGwgd29ya2luZyB0cmVlcy4KKworU2VlIGxpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uIFRoZSBydWxlIG9mCit0aHVtYiBpcyBkbyBub3QgbWFrZSBhbnkgYXNzdW1wdGlvbiBhYm91dCB3aGV0aGVyIGEgcGF0aCBiZWxvbmdzIHRvCiskR0lUX0RJUiBvciAkR0lUX0NPTU1PTl9ESVIgd2hlbiB5b3UgbmVlZCB0byBkaXJlY3RseSBhY2Nlc3Mgc29tZXRoaW5nCitpbnNpZGUgJEdJVF9ESVIuIFVzZSBgZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoYCB0byBnZXQgdGhlIGZpbmFsIHBhdGguCisKK1RvIHByZXZlbnQgYSAkR0lUX0RJUi93b3JrdHJlZXMgZW50cnkgZnJvbSBiZWluZyBwcnVuZWQgKHdoaWNoCitjYW4gYmUgdXNlZnVsIGluIHNvbWUgc2l0dWF0aW9ucywgc3VjaCBhcyB3aGVuIHRoZQorZW50cnkncyB3b3JraW5nIHRyZWUgaXMgc3RvcmVkIG9uIGEgcG9ydGFibGUgZGV2aWNlKSwgYWRkIGEgZmlsZSBuYW1lZAorJ2xvY2tlZCcgdG8gdGhlIGVudHJ5J3MgZGlyZWN0b3J5LiBUaGUgZmlsZSBjb250YWlucyB0aGUgcmVhc29uIGluCitwbGFpbiB0ZXh0LiBGb3IgZXhhbXBsZSwgaWYgYSBsaW5rZWQgd29ya2luZyB0cmVlJ3MgYC5naXRgIGZpbGUgcG9pbnRzCit0byBgL3BhdGgvbWFpbi8uZ2l0L3dvcmt0cmVlcy90ZXN0LW5leHRgIHRoZW4gYSBmaWxlIG5hbWVkCitgL3BhdGgvbWFpbi8uZ2l0L3dvcmt0cmVlcy90ZXN0LW5leHQvbG9ja2VkYCB3aWxsIHByZXZlbnQgdGhlCitgdGVzdC1uZXh0YCBlbnRyeSBmcm9tIGJlaW5nIHBydW5lZC4gIFNlZQorbGlua2dpdDpnaXRyZXBvc2l0b3J5LWxheW91dFs1XSBmb3IgZGV0YWlscy4KKworTElTVCBPVVRQVVQgRk9STUFUCistLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSB3b3JrdHJlZSBsaXN0IGNvbW1hbmQgaGFzIHR3byBvdXRwdXQgZm9ybWF0cy4gIFRoZSBkZWZhdWx0IGZvcm1hdCBzaG93cyB0aGUKK2RldGFpbHMgb24gYSBzaW5nbGUgbGluZSB3aXRoIGNvbHVtbnMuICBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tCitTIGdpdCB3b3JrdHJlZSBsaXN0CisvcGF0aC90by9iYXJlLXNvdXJjZSAgICAgICAgICAgIChiYXJlKQorL3BhdGgvdG8vbGlua2VkLXdvcmt0cmVlICAgICAgICBhYmNkMTIzNCBbbWFzdGVyXQorL3BhdGgvdG8vb3RoZXItbGlua2VkLXdvcmt0cmVlICAxMjM0YWJjICAoZGV0YWNoZWQgSEVBRCkKKy0tLS0tLS0tLS0tLQorCitQb3JjZWxhaW4gRm9ybWF0Cit+fn5+fn5+fn5+fn5+fn5+CitUaGUgcG9yY2VsYWluIGZvcm1hdCBoYXMgYSBsaW5lIHBlciBhdHRyaWJ1dGUuICBBdHRyaWJ1dGVzIGFyZSBsaXN0ZWQgd2l0aCBhCitsYWJlbCBhbmQgdmFsdWUgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNwYWNlLiAgQm9vbGVhbiBhdHRyaWJ1dGVzIChsaWtlICdiYXJlJworYW5kICdkZXRhY2hlZCcpIGFyZSBsaXN0ZWQgYXMgYSBsYWJlbCBvbmx5LCBhbmQgYXJlIG9ubHkgcHJlc2VudCBpZiBhbmQgb25seQoraWYgdGhlIHZhbHVlIGlzIHRydWUuICBBbiBlbXB0eSBsaW5lIGluZGljYXRlcyB0aGUgZW5kIG9mIGEgd29ya3RyZWUuICBGb3IKK2V4YW1wbGU6CisKKy0tLS0tLS0tLS0tLQorUyBnaXQgd29ya3RyZWUgbGlzdCAtLXBvcmNlbGFpbgord29ya3RyZWUgL3BhdGgvdG8vYmFyZS1zb3VyY2UKK2JhcmUKKword29ya3RyZWUgL3BhdGgvdG8vbGlua2VkLXdvcmt0cmVlCitIRUFEIGFiY2QxMjM0YWJjZDEyMzRhYmNkMTIzNGFiY2QxMjM0YWJjZDEyMzQKK2JyYW5jaCByZWZzL2hlYWRzL21hc3RlcgorCit3b3JrdHJlZSAvcGF0aC90by9vdGhlci1saW5rZWQtd29ya3RyZWUKK0hFQUQgMTIzNGFiYzEyMzRhYmMxMjM0YWJjMTIzNGFiYzEyMzRhYmMxMjM0YQorZGV0YWNoZWQKKworLS0tLS0tLS0tLS0tCisKK0VYQU1QTEVTCistLS0tLS0tLQorWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVmYWN0b3Jpbmcgc2Vzc2lvbiBhbmQgeW91ciBib3NzIGNvbWVzIGluIGFuZAorZGVtYW5kcyB0aGF0IHlvdSBmaXggc29tZXRoaW5nIGltbWVkaWF0ZWx5LiBZb3UgbWlnaHQgdHlwaWNhbGx5IHVzZQorbGlua2dpdDpnaXQtc3Rhc2hbMV0gdG8gc3RvcmUgeW91ciBjaGFuZ2VzIGF3YXkgdGVtcG9yYXJpbHksIGhvd2V2ZXIsIHlvdXIKK3dvcmtpbmcgdHJlZSBpcyBpbiBzdWNoIGEgc3RhdGUgb2YgZGlzYXJyYXkgKHdpdGggbmV3LCBtb3ZlZCwgYW5kIHJlbW92ZWQKK2ZpbGVzLCBhbmQgb3RoZXIgYml0cyBhbmQgcGllY2VzIHN0cmV3biBhcm91bmQpIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gcmlzaworZGlzdHVyYmluZyBhbnkgb2YgaXQuIEluc3RlYWQsIHlvdSBjcmVhdGUgYSB0ZW1wb3JhcnkgbGlua2VkIHdvcmtpbmcgdHJlZSB0bworbWFrZSB0aGUgZW1lcmdlbmN5IGZpeCwgcmVtb3ZlIGl0IHdoZW4gZG9uZSwgYW5kIHRoZW4gcmVzdW1lIHlvdXIgZWFybGllcgorcmVmYWN0b3Jpbmcgc2Vzc2lvbi4KKworLS0tLS0tLS0tLS0tCiskIGdpdCB3b3JrdHJlZSBhZGQgLWIgZW1lcmdlbmN5LWZpeCAuLi90ZW1wIG1hc3RlcgorJCBwdXNoZCAuLi90ZW1wCisjIC4uLiBoYWNrIGhhY2sgaGFjayAuLi4KKyQgZ2l0IGNvbW1pdCAtYSAtbSAnZW1lcmdlbmN5IGZpeCBmb3IgYm9zcycKKyQgcG9wZAorJCBybSAtcmYgLi4vdGVtcAorJCBnaXQgd29ya3RyZWUgcHJ1bmUKKy0tLS0tLS0tLS0tLQorCitCVUdTCistLS0tCitNdWx0aXBsZSBjaGVja291dCBpbiBnZW5lcmFsIGlzIHN0aWxsIGV4cGVyaW1lbnRhbCwgYW5kIHRoZSBzdXBwb3J0Citmb3Igc3VibW9kdWxlcyBpcyBpbmNvbXBsZXRlLiBJdCBpcyBOT1QgcmVjb21tZW5kZWQgdG8gbWFrZSBtdWx0aXBsZQorY2hlY2tvdXRzIG9mIGEgc3VwZXJwcm9qZWN0LgorCitnaXQtd29ya3RyZWUgY291bGQgcHJvdmlkZSBtb3JlIGF1dG9tYXRpb24gZm9yIHRhc2tzIGN1cnJlbnRseQorcGVyZm9ybWVkIG1hbnVhbGx5LCBzdWNoIGFzOgorCistIGByZW1vdmVgIHRvIHJlbW92ZSBhIGxpbmtlZCB3b3JraW5nIHRyZWUgYW5kIGl0cyBhZG1pbmlzdHJhdGl2ZSBmaWxlcyAoYW5kCisgIHdhcm4gaWYgdGhlIHdvcmtpbmcgdHJlZSBpcyBkaXJ0eSkKKy0gYG12YCB0byBtb3ZlIG9yIHJlbmFtZSBhIHdvcmtpbmcgdHJlZSBhbmQgdXBkYXRlIGl0cyBhZG1pbmlzdHJhdGl2ZSBmaWxlcworLSBgbG9ja2AgdG8gcHJldmVudCBhdXRvbWF0aWMgcHJ1bmluZyBvZiBhZG1pbmlzdHJhdGl2ZSBmaWxlcyAoZm9yIGluc3RhbmNlLAorICBmb3IgYSB3b3JraW5nIHRyZWUgb24gYSBwb3J0YWJsZSBkZXZpY2UpCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtd3JpdGUtdHJlZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC13cml0ZS10cmVlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjIwNDFhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtd3JpdGUtdHJlZS50eHQKQEAgLTAsMCArMSw0MiBAQAorZ2l0LXdyaXRlLXRyZWUoMSkKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdC13cml0ZS10cmVlIC0gQ3JlYXRlIGEgdHJlZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBpbmRleAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCB3cml0ZS10cmVlJyBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0NyZWF0ZXMgYSB0cmVlIG9iamVjdCB1c2luZyB0aGUgY3VycmVudCBpbmRleC4gVGhlIG5hbWUgb2YgdGhlIG5ldwordHJlZSBvYmplY3QgaXMgcHJpbnRlZCB0byBzdGFuZGFyZCBvdXRwdXQuCisKK1RoZSBpbmRleCBtdXN0IGJlIGluIGEgZnVsbHkgbWVyZ2VkIHN0YXRlLgorCitDb25jZXB0dWFsbHksICdnaXQgd3JpdGUtdHJlZScgc3luYygpcyB0aGUgY3VycmVudCBpbmRleCBjb250ZW50cworaW50byBhIHNldCBvZiB0cmVlIGZpbGVzLgorSW4gb3JkZXIgdG8gaGF2ZSB0aGF0IG1hdGNoIHdoYXQgaXMgYWN0dWFsbHkgaW4geW91ciBkaXJlY3RvcnkgcmlnaHQKK25vdywgeW91IG5lZWQgdG8gaGF2ZSBkb25lIGEgJ2dpdCB1cGRhdGUtaW5kZXgnIHBoYXNlIGJlZm9yZSB5b3UgZGlkIHRoZQorJ2dpdCB3cml0ZS10cmVlJy4KKworCitPUFRJT05TCistLS0tLS0tCistLW1pc3Npbmctb2s6OgorCU5vcm1hbGx5ICdnaXQgd3JpdGUtdHJlZScgZW5zdXJlcyB0aGF0IHRoZSBvYmplY3RzIHJlZmVyZW5jZWQgYnkgdGhlCisJZGlyZWN0b3J5IGV4aXN0IGluIHRoZSBvYmplY3QgZGF0YWJhc2UuICBUaGlzIG9wdGlvbiBkaXNhYmxlcyB0aGlzCisJY2hlY2suCisKKy0tcHJlZml4PTxwcmVmaXg+Lzo6CisJV3JpdGVzIGEgdHJlZSBvYmplY3QgdGhhdCByZXByZXNlbnRzIGEgc3ViZGlyZWN0b3J5CisJYDxwcmVmaXg+YC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gd3JpdGUgdGhlIHRyZWUgb2JqZWN0CisJZm9yIGEgc3VicHJvamVjdCB0aGF0IGlzIGluIHRoZSBuYW1lZCBzdWJkaXJlY3RvcnkuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ODUxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKQEAgLTAsMCArMSwxMjMyIEBACitnaXQoMSkKKz09PT09PQorCitOQU1FCistLS0tCitnaXQgLSB0aGUgc3R1cGlkIGNvbnRlbnQgdHJhY2tlcgorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCcgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIDxuYW1lPj08dmFsdWU+XQorICAgIFstLWV4ZWMtcGF0aFs9PHBhdGg+XV0gWy0taHRtbC1wYXRoXSBbLS1tYW4tcGF0aF0gWy0taW5mby1wYXRoXQorICAgIFstcHwtLXBhZ2luYXRlfC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tYmFyZV0KKyAgICBbLS1naXQtZGlyPTxwYXRoPl0gWy0td29yay10cmVlPTxwYXRoPl0gWy0tbmFtZXNwYWNlPTxuYW1lPl0KKyAgICA8Y29tbWFuZD4gWzxhcmdzPl0KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgordW51c3VhbGx5IHJpY2ggY29tbWFuZCBzZXQgdGhhdCBwcm92aWRlcyBib3RoIGhpZ2gtbGV2ZWwgb3BlcmF0aW9ucworYW5kIGZ1bGwgYWNjZXNzIHRvIGludGVybmFscy4KKworU2VlIGxpbmtnaXQ6Z2l0dHV0b3JpYWxbN10gdG8gZ2V0IHN0YXJ0ZWQsIHRoZW4gc2VlCitsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddIGZvciBhIHVzZWZ1bCBtaW5pbXVtIHNldCBvZgorY29tbWFuZHMuICBUaGUgbGluazp1c2VyLW1hbnVhbC5odG1sW0dpdCBVc2VyJ3MgTWFudWFsXSBoYXMgYSBtb3JlCitpbi1kZXB0aCBpbnRyb2R1Y3Rpb24uCisKK0FmdGVyIHlvdSBtYXN0ZXJlZCB0aGUgYmFzaWMgY29uY2VwdHMsIHlvdSBjYW4gY29tZSBiYWNrIHRvIHRoaXMKK3BhZ2UgdG8gbGVhcm4gd2hhdCBjb21tYW5kcyBHaXQgb2ZmZXJzLiAgWW91IGNhbiBsZWFybiBtb3JlIGFib3V0CitpbmRpdmlkdWFsIEdpdCBjb21tYW5kcyB3aXRoICJnaXQgaGVscCBjb21tYW5kIi4gIGxpbmtnaXQ6Z2l0Y2xpWzddCittYW51YWwgcGFnZSBnaXZlcyB5b3UgYW4gb3ZlcnZpZXcgb2YgdGhlIGNvbW1hbmQtbGluZSBjb21tYW5kIHN5bnRheC4KKworRm9ybWF0dGVkIGFuZCBoeXBlcmxpbmtlZCB2ZXJzaW9uIG9mIHRoZSBsYXRlc3QgR2l0IGRvY3VtZW50YXRpb24KK2NhbiBiZSB2aWV3ZWQgYXQgYGh0dHA6Ly9naXQtaHRtbGRvY3MuZ29vZ2xlY29kZS5jb20vZ2l0L2dpdC5odG1sYC4KKworaWZkZWY6OnN0YWxlbm90ZXNbXQorW05PVEVdCis9PT09PT09PT09PT0KKworWW91IGFyZSByZWFkaW5nIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgbGF0ZXN0IChwb3NzaWJseQordW5yZWxlYXNlZCkgdmVyc2lvbiBvZiBHaXQsIHRoYXQgaXMgYXZhaWxhYmxlIGZyb20gdGhlICdtYXN0ZXInCiticmFuY2ggb2YgdGhlIGBnaXQuZ2l0YCByZXBvc2l0b3J5LgorRG9jdW1lbnRhdGlvbiBmb3Igb2xkZXIgcmVsZWFzZXMgYXJlIGF2YWlsYWJsZSBoZXJlOgorCisqIGxpbms6djIuNi4yL2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMi42LjJdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8yLjYuMi50eHRbMi42LjJdLAorICBsaW5rOlJlbE5vdGVzLzIuNi4xLnR4dFsyLjYuMV0sCisgIGxpbms6UmVsTm90ZXMvMi42LjAudHh0WzIuNl0uCisKKyogbGluazp2Mi41LjQvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAyLjUuNF0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzIuNS40LnR4dFsyLjUuNF0sCisgIGxpbms6UmVsTm90ZXMvMi41LjMudHh0WzIuNS4zXSwKKyAgbGluazpSZWxOb3Rlcy8yLjUuMi50eHRbMi41LjJdLAorICBsaW5rOlJlbE5vdGVzLzIuNS4xLnR4dFsyLjUuMV0sCisgIGxpbms6UmVsTm90ZXMvMi41LjAudHh0WzIuNV0uCisKKyogbGluazp2Mi40LjEwL2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMi40LjEwXQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMi40LjEwLnR4dFsyLjQuMTBdLAorICBsaW5rOlJlbE5vdGVzLzIuNC45LnR4dFsyLjQuOV0sCisgIGxpbms6UmVsTm90ZXMvMi40LjgudHh0WzIuNC44XSwKKyAgbGluazpSZWxOb3Rlcy8yLjQuNy50eHRbMi40LjddLAorICBsaW5rOlJlbE5vdGVzLzIuNC42LnR4dFsyLjQuNl0sCisgIGxpbms6UmVsTm90ZXMvMi40LjUudHh0WzIuNC41XSwKKyAgbGluazpSZWxOb3Rlcy8yLjQuNC50eHRbMi40LjRdLAorICBsaW5rOlJlbE5vdGVzLzIuNC4zLnR4dFsyLjQuM10sCisgIGxpbms6UmVsTm90ZXMvMi40LjIudHh0WzIuNC4yXSwKKyAgbGluazpSZWxOb3Rlcy8yLjQuMS50eHRbMi40LjFdLAorICBsaW5rOlJlbE5vdGVzLzIuNC4wLnR4dFsyLjRdLgorCisqIGxpbms6djIuMy4xMC9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDIuMy4xMF0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzIuMy4xMC50eHRbMi4zLjEwXSwKKyAgbGluazpSZWxOb3Rlcy8yLjMuOS50eHRbMi4zLjldLAorICBsaW5rOlJlbE5vdGVzLzIuMy44LnR4dFsyLjMuOF0sCisgIGxpbms6UmVsTm90ZXMvMi4zLjcudHh0WzIuMy43XSwKKyAgbGluazpSZWxOb3Rlcy8yLjMuNi50eHRbMi4zLjZdLAorICBsaW5rOlJlbE5vdGVzLzIuMy41LnR4dFsyLjMuNV0sCisgIGxpbms6UmVsTm90ZXMvMi4zLjQudHh0WzIuMy40XSwKKyAgbGluazpSZWxOb3Rlcy8yLjMuMy50eHRbMi4zLjNdLAorICBsaW5rOlJlbE5vdGVzLzIuMy4yLnR4dFsyLjMuMl0sCisgIGxpbms6UmVsTm90ZXMvMi4zLjEudHh0WzIuMy4xXSwKKyAgbGluazpSZWxOb3Rlcy8yLjMuMC50eHRbMi4zXS4KKworKiBsaW5rOnYyLjIuMy9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDIuMi4zXQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMi4yLjMudHh0WzIuMi4zXSwKKyAgbGluazpSZWxOb3Rlcy8yLjIuMi50eHRbMi4yLjJdLAorICBsaW5rOlJlbE5vdGVzLzIuMi4xLnR4dFsyLjIuMV0sCisgIGxpbms6UmVsTm90ZXMvMi4yLjAudHh0WzIuMl0uCisKKyogbGluazp2Mi4xLjQvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAyLjEuNF0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzIuMS40LnR4dFsyLjEuNF0sCisgIGxpbms6UmVsTm90ZXMvMi4xLjMudHh0WzIuMS4zXSwKKyAgbGluazpSZWxOb3Rlcy8yLjEuMi50eHRbMi4xLjJdLAorICBsaW5rOlJlbE5vdGVzLzIuMS4xLnR4dFsyLjEuMV0sCisgIGxpbms6UmVsTm90ZXMvMi4xLjAudHh0WzIuMV0uCisKKyogbGluazp2Mi4wLjUvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAyLjAuNV0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzIuMC41LnR4dFsyLjAuNV0sCisgIGxpbms6UmVsTm90ZXMvMi4wLjQudHh0WzIuMC40XSwKKyAgbGluazpSZWxOb3Rlcy8yLjAuMy50eHRbMi4wLjNdLAorICBsaW5rOlJlbE5vdGVzLzIuMC4yLnR4dFsyLjAuMl0sCisgIGxpbms6UmVsTm90ZXMvMi4wLjEudHh0WzIuMC4xXSwKKyAgbGluazpSZWxOb3Rlcy8yLjAuMC50eHRbMi4wLjBdLgorCisqIGxpbms6djEuOS41L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS45LjVdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjkuNS50eHRbMS45LjVdLAorICBsaW5rOlJlbE5vdGVzLzEuOS40LnR4dFsxLjkuNF0sCisgIGxpbms6UmVsTm90ZXMvMS45LjMudHh0WzEuOS4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjkuMi50eHRbMS45LjJdLAorICBsaW5rOlJlbE5vdGVzLzEuOS4xLnR4dFsxLjkuMV0sCisgIGxpbms6UmVsTm90ZXMvMS45LjAudHh0WzEuOS4wXS4KKworKiBsaW5rOnYxLjguNS42L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS44LjUuNl0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuOC41LjYudHh0WzEuOC41LjZdLAorICBsaW5rOlJlbE5vdGVzLzEuOC41LjUudHh0WzEuOC41LjVdLAorICBsaW5rOlJlbE5vdGVzLzEuOC41LjQudHh0WzEuOC41LjRdLAorICBsaW5rOlJlbE5vdGVzLzEuOC41LjMudHh0WzEuOC41LjNdLAorICBsaW5rOlJlbE5vdGVzLzEuOC41LjIudHh0WzEuOC41LjJdLAorICBsaW5rOlJlbE5vdGVzLzEuOC41LjEudHh0WzEuOC41LjFdLAorICBsaW5rOlJlbE5vdGVzLzEuOC41LnR4dFsxLjguNV0uCisKKyogbGluazp2MS44LjQuNS9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuOC40LjVdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjguNC41LnR4dFsxLjguNC41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjguNC40LnR4dFsxLjguNC40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjguNC4zLnR4dFsxLjguNC4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjguNC4yLnR4dFsxLjguNC4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjguNC4xLnR4dFsxLjguNC4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjguNC50eHRbMS44LjRdLgorCisqIGxpbms6djEuOC4zLjQvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjguMy40XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS44LjMuNC50eHRbMS44LjMuNF0sCisgIGxpbms6UmVsTm90ZXMvMS44LjMuMy50eHRbMS44LjMuM10sCisgIGxpbms6UmVsTm90ZXMvMS44LjMuMi50eHRbMS44LjMuMl0sCisgIGxpbms6UmVsTm90ZXMvMS44LjMuMS50eHRbMS44LjMuMV0sCisgIGxpbms6UmVsTm90ZXMvMS44LjMudHh0WzEuOC4zXS4KKworKiBsaW5rOnYxLjguMi4zL2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS44LjIuM10KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuOC4yLjMudHh0WzEuOC4yLjNdLAorICBsaW5rOlJlbE5vdGVzLzEuOC4yLjIudHh0WzEuOC4yLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuOC4yLjEudHh0WzEuOC4yLjFdLAorICBsaW5rOlJlbE5vdGVzLzEuOC4yLnR4dFsxLjguMl0uCisKKyogbGluazp2MS44LjEuNi9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuOC4xLjZdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjguMS42LnR4dFsxLjguMS42XSwKKyAgbGluazpSZWxOb3Rlcy8xLjguMS41LnR4dFsxLjguMS41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjguMS40LnR4dFsxLjguMS40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjguMS4zLnR4dFsxLjguMS4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjguMS4yLnR4dFsxLjguMS4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjguMS4xLnR4dFsxLjguMS4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjguMS50eHRbMS44LjFdLgorCisqIGxpbms6djEuOC4wLjMvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjguMC4zXQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS44LjAuMy50eHRbMS44LjAuM10sCisgIGxpbms6UmVsTm90ZXMvMS44LjAuMi50eHRbMS44LjAuMl0sCisgIGxpbms6UmVsTm90ZXMvMS44LjAuMS50eHRbMS44LjAuMV0sCisgIGxpbms6UmVsTm90ZXMvMS44LjAudHh0WzEuOC4wXS4KKworKiBsaW5rOnYxLjcuMTIuNC9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNy4xMi40XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS43LjEyLjQudHh0WzEuNy4xMi40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTIuMy50eHRbMS43LjEyLjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4xMi4yLnR4dFsxLjcuMTIuMl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjEyLjEudHh0WzEuNy4xMi4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTIudHh0WzEuNy4xMl0uCisKKyogbGluazp2MS43LjExLjcvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjcuMTEuN10KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNy4xMS43LnR4dFsxLjcuMTEuN10sCisgIGxpbms6UmVsTm90ZXMvMS43LjExLjYudHh0WzEuNy4xMS42XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTEuNS50eHRbMS43LjExLjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4xMS40LnR4dFsxLjcuMTEuNF0sCisgIGxpbms6UmVsTm90ZXMvMS43LjExLjMudHh0WzEuNy4xMS4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTEuMi50eHRbMS43LjExLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4xMS4xLnR4dFsxLjcuMTEuMV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjExLnR4dFsxLjcuMTFdLgorCisqIGxpbms6djEuNy4xMC41L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS43LjEwLjVdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTAuNS50eHRbMS43LjEwLjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4xMC40LnR4dFsxLjcuMTAuNF0sCisgIGxpbms6UmVsTm90ZXMvMS43LjEwLjMudHh0WzEuNy4xMC4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMTAuMi50eHRbMS43LjEwLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4xMC4xLnR4dFsxLjcuMTAuMV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjEwLnR4dFsxLjcuMTBdLgorCisqIGxpbms6djEuNy45LjcvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjcuOS43XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS43LjkuNy50eHRbMS43LjkuN10sCisgIGxpbms6UmVsTm90ZXMvMS43LjkuNi50eHRbMS43LjkuNl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjkuNS50eHRbMS43LjkuNV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjkuNC50eHRbMS43LjkuNF0sCisgIGxpbms6UmVsTm90ZXMvMS43LjkuMy50eHRbMS43LjkuM10sCisgIGxpbms6UmVsTm90ZXMvMS43LjkuMi50eHRbMS43LjkuMl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjkuMS50eHRbMS43LjkuMV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjkudHh0WzEuNy45XS4KKworKiBsaW5rOnYxLjcuOC42L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS43LjguNl0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNy44LjYudHh0WzEuNy44LjZdLAorICBsaW5rOlJlbE5vdGVzLzEuNy44LjUudHh0WzEuNy44LjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNy44LjQudHh0WzEuNy44LjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNy44LjMudHh0WzEuNy44LjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNy44LjIudHh0WzEuNy44LjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNy44LjEudHh0WzEuNy44LjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNy44LnR4dFsxLjcuOF0uCisKKyogbGluazp2MS43LjcuNy9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNy43LjddCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjcuNy43LnR4dFsxLjcuNy43XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNy42LnR4dFsxLjcuNy42XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNy41LnR4dFsxLjcuNy41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNy40LnR4dFsxLjcuNy40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNy4zLnR4dFsxLjcuNy4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNy4yLnR4dFsxLjcuNy4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNy4xLnR4dFsxLjcuNy4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNy50eHRbMS43LjddLgorCisqIGxpbms6djEuNy42LjYvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjcuNi42XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS43LjYuNi50eHRbMS43LjYuNl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjYuNS50eHRbMS43LjYuNV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjYuNC50eHRbMS43LjYuNF0sCisgIGxpbms6UmVsTm90ZXMvMS43LjYuMy50eHRbMS43LjYuM10sCisgIGxpbms6UmVsTm90ZXMvMS43LjYuMi50eHRbMS43LjYuMl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjYuMS50eHRbMS43LjYuMV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjYudHh0WzEuNy42XS4KKworKiBsaW5rOnYxLjcuNS40L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS43LjUuNF0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNy41LjQudHh0WzEuNy41LjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNy41LjMudHh0WzEuNy41LjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNy41LjIudHh0WzEuNy41LjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNy41LjEudHh0WzEuNy41LjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNy41LnR4dFsxLjcuNV0uCisKKyogbGluazp2MS43LjQuNS9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNy40LjVdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjcuNC41LnR4dFsxLjcuNC41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNC40LnR4dFsxLjcuNC40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNC4zLnR4dFsxLjcuNC4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNC4yLnR4dFsxLjcuNC4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNC4xLnR4dFsxLjcuNC4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuNC50eHRbMS43LjRdLgorCisqIGxpbms6djEuNy4zLjUvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjcuMy41XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS43LjMuNS50eHRbMS43LjMuNV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjMuNC50eHRbMS43LjMuNF0sCisgIGxpbms6UmVsTm90ZXMvMS43LjMuMy50eHRbMS43LjMuM10sCisgIGxpbms6UmVsTm90ZXMvMS43LjMuMi50eHRbMS43LjMuMl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjMuMS50eHRbMS43LjMuMV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjMudHh0WzEuNy4zXS4KKworKiBsaW5rOnYxLjcuMi41L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS43LjIuNV0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNy4yLjUudHh0WzEuNy4yLjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4yLjQudHh0WzEuNy4yLjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4yLjMudHh0WzEuNy4yLjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4yLjIudHh0WzEuNy4yLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4yLjEudHh0WzEuNy4yLjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNy4yLnR4dFsxLjcuMl0uCisKKyogbGluazp2MS43LjEuNC9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNy4xLjRdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjcuMS40LnR4dFsxLjcuMS40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMS4zLnR4dFsxLjcuMS4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMS4yLnR4dFsxLjcuMS4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMS4xLnR4dFsxLjcuMS4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjcuMS50eHRbMS43LjFdLgorCisqIGxpbms6djEuNy4wLjkvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjcuMC45XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS43LjAuOS50eHRbMS43LjAuOV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjAuOC50eHRbMS43LjAuOF0sCisgIGxpbms6UmVsTm90ZXMvMS43LjAuNy50eHRbMS43LjAuN10sCisgIGxpbms6UmVsTm90ZXMvMS43LjAuNi50eHRbMS43LjAuNl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjAuNS50eHRbMS43LjAuNV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjAuNC50eHRbMS43LjAuNF0sCisgIGxpbms6UmVsTm90ZXMvMS43LjAuMy50eHRbMS43LjAuM10sCisgIGxpbms6UmVsTm90ZXMvMS43LjAuMi50eHRbMS43LjAuMl0sCisgIGxpbms6UmVsTm90ZXMvMS43LjAuMS50eHRbMS43LjAuMV0sCisgIGxpbms6UmVsTm90ZXMvMS43LjAudHh0WzEuNy4wXS4KKworKiBsaW5rOnYxLjYuNi4zL2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS42LjYuM10KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNi42LjMudHh0WzEuNi42LjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNi42LjIudHh0WzEuNi42LjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNi42LjEudHh0WzEuNi42LjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNi42LnR4dFsxLjYuNl0uCisKKyogbGluazp2MS42LjUuOS9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNi41LjldCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjYuNS45LnR4dFsxLjYuNS45XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNS44LnR4dFsxLjYuNS44XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNS43LnR4dFsxLjYuNS43XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNS42LnR4dFsxLjYuNS42XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNS41LnR4dFsxLjYuNS41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNS40LnR4dFsxLjYuNS40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNS4zLnR4dFsxLjYuNS4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNS4yLnR4dFsxLjYuNS4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNS4xLnR4dFsxLjYuNS4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuNS50eHRbMS42LjVdLgorCisqIGxpbms6djEuNi40LjUvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjYuNC41XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS42LjQuNS50eHRbMS42LjQuNV0sCisgIGxpbms6UmVsTm90ZXMvMS42LjQuNC50eHRbMS42LjQuNF0sCisgIGxpbms6UmVsTm90ZXMvMS42LjQuMy50eHRbMS42LjQuM10sCisgIGxpbms6UmVsTm90ZXMvMS42LjQuMi50eHRbMS42LjQuMl0sCisgIGxpbms6UmVsTm90ZXMvMS42LjQuMS50eHRbMS42LjQuMV0sCisgIGxpbms6UmVsTm90ZXMvMS42LjQudHh0WzEuNi40XS4KKworKiBsaW5rOnYxLjYuMy40L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS42LjMuNF0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNi4zLjQudHh0WzEuNi4zLjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4zLjMudHh0WzEuNi4zLjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4zLjIudHh0WzEuNi4zLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4zLjEudHh0WzEuNi4zLjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4zLnR4dFsxLjYuM10uCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjYuMi41LnR4dFsxLjYuMi41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMi40LnR4dFsxLjYuMi40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMi4zLnR4dFsxLjYuMi4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMi4yLnR4dFsxLjYuMi4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMi4xLnR4dFsxLjYuMi4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjYuMi50eHRbMS42LjJdLgorCisqIGxpbms6djEuNi4xLjMvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjYuMS4zXQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS42LjEuMy50eHRbMS42LjEuM10sCisgIGxpbms6UmVsTm90ZXMvMS42LjEuMi50eHRbMS42LjEuMl0sCisgIGxpbms6UmVsTm90ZXMvMS42LjEuMS50eHRbMS42LjEuMV0sCisgIGxpbms6UmVsTm90ZXMvMS42LjEudHh0WzEuNi4xXS4KKworKiBsaW5rOnYxLjYuMC42L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS42LjAuNl0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNi4wLjYudHh0WzEuNi4wLjZdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4wLjUudHh0WzEuNi4wLjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4wLjQudHh0WzEuNi4wLjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4wLjMudHh0WzEuNi4wLjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4wLjIudHh0WzEuNi4wLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4wLjEudHh0WzEuNi4wLjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNi4wLnR4dFsxLjYuMF0uCisKKyogbGluazp2MS41LjYuNi9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNS42LjZdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjUuNi42LnR4dFsxLjUuNi42XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNi41LnR4dFsxLjUuNi41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNi40LnR4dFsxLjUuNi40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNi4zLnR4dFsxLjUuNi4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNi4yLnR4dFsxLjUuNi4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNi4xLnR4dFsxLjUuNi4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuNi50eHRbMS41LjZdLgorCisqIGxpbms6djEuNS41LjYvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjUuNS42XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS41LjUuNi50eHRbMS41LjUuNl0sCisgIGxpbms6UmVsTm90ZXMvMS41LjUuNS50eHRbMS41LjUuNV0sCisgIGxpbms6UmVsTm90ZXMvMS41LjUuNC50eHRbMS41LjUuNF0sCisgIGxpbms6UmVsTm90ZXMvMS41LjUuMy50eHRbMS41LjUuM10sCisgIGxpbms6UmVsTm90ZXMvMS41LjUuMi50eHRbMS41LjUuMl0sCisgIGxpbms6UmVsTm90ZXMvMS41LjUuMS50eHRbMS41LjUuMV0sCisgIGxpbms6UmVsTm90ZXMvMS41LjUudHh0WzEuNS41XS4KKworKiBsaW5rOnYxLjUuNC43L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS41LjQuN10KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNS40LjcudHh0WzEuNS40LjddLAorICBsaW5rOlJlbE5vdGVzLzEuNS40LjYudHh0WzEuNS40LjZdLAorICBsaW5rOlJlbE5vdGVzLzEuNS40LjUudHh0WzEuNS40LjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNS40LjQudHh0WzEuNS40LjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNS40LjMudHh0WzEuNS40LjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNS40LjIudHh0WzEuNS40LjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNS40LjEudHh0WzEuNS40LjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNS40LnR4dFsxLjUuNF0uCisKKyogbGluazp2MS41LjMuOC9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNS4zLjhdCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjUuMy44LnR4dFsxLjUuMy44XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMy43LnR4dFsxLjUuMy43XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMy42LnR4dFsxLjUuMy42XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMy41LnR4dFsxLjUuMy41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMy40LnR4dFsxLjUuMy40XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMy4zLnR4dFsxLjUuMy4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMy4yLnR4dFsxLjUuMy4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMy4xLnR4dFsxLjUuMy4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMy50eHRbMS41LjNdLgorCisqIGxpbms6djEuNS4yLjUvZ2l0Lmh0bWxbZG9jdW1lbnRhdGlvbiBmb3IgcmVsZWFzZSAxLjUuMi41XQorCisqIHJlbGVhc2Ugbm90ZXMgZm9yCisgIGxpbms6UmVsTm90ZXMvMS41LjIuNS50eHRbMS41LjIuNV0sCisgIGxpbms6UmVsTm90ZXMvMS41LjIuNC50eHRbMS41LjIuNF0sCisgIGxpbms6UmVsTm90ZXMvMS41LjIuMy50eHRbMS41LjIuM10sCisgIGxpbms6UmVsTm90ZXMvMS41LjIuMi50eHRbMS41LjIuMl0sCisgIGxpbms6UmVsTm90ZXMvMS41LjIuMS50eHRbMS41LjIuMV0sCisgIGxpbms6UmVsTm90ZXMvMS41LjIudHh0WzEuNS4yXS4KKworKiBsaW5rOnYxLjUuMS42L2dpdC5odG1sW2RvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgMS41LjEuNl0KKworKiByZWxlYXNlIG5vdGVzIGZvcgorICBsaW5rOlJlbE5vdGVzLzEuNS4xLjYudHh0WzEuNS4xLjZdLAorICBsaW5rOlJlbE5vdGVzLzEuNS4xLjUudHh0WzEuNS4xLjVdLAorICBsaW5rOlJlbE5vdGVzLzEuNS4xLjQudHh0WzEuNS4xLjRdLAorICBsaW5rOlJlbE5vdGVzLzEuNS4xLjMudHh0WzEuNS4xLjNdLAorICBsaW5rOlJlbE5vdGVzLzEuNS4xLjIudHh0WzEuNS4xLjJdLAorICBsaW5rOlJlbE5vdGVzLzEuNS4xLjEudHh0WzEuNS4xLjFdLAorICBsaW5rOlJlbE5vdGVzLzEuNS4xLnR4dFsxLjUuMV0uCisKKyogbGluazp2MS41LjAuNy9naXQuaHRtbFtkb2N1bWVudGF0aW9uIGZvciByZWxlYXNlIDEuNS4wLjddCisKKyogcmVsZWFzZSBub3RlcyBmb3IKKyAgbGluazpSZWxOb3Rlcy8xLjUuMC43LnR4dFsxLjUuMC43XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMC42LnR4dFsxLjUuMC42XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMC41LnR4dFsxLjUuMC41XSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMC4zLnR4dFsxLjUuMC4zXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMC4yLnR4dFsxLjUuMC4yXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMC4xLnR4dFsxLjUuMC4xXSwKKyAgbGluazpSZWxOb3Rlcy8xLjUuMC50eHRbMS41LjBdLgorCisqIGRvY3VtZW50YXRpb24gZm9yIHJlbGVhc2UgbGluazp2MS40LjQuNC9naXQuaHRtbFsxLjQuNC40XSwKKyAgbGluazp2MS4zLjMvZ2l0Lmh0bWxbMS4zLjNdLAorICBsaW5rOnYxLjIuNi9naXQuaHRtbFsxLjIuNl0sCisgIGxpbms6djEuMC4xMy9naXQuaHRtbFsxLjAuMTNdLgorCis9PT09PT09PT09PT0KKworZW5kaWY6OnN0YWxlbm90ZXNbXQorCitPUFRJT05TCistLS0tLS0tCistLXZlcnNpb246OgorCVByaW50cyB0aGUgR2l0IHN1aXRlIHZlcnNpb24gdGhhdCB0aGUgJ2dpdCcgcHJvZ3JhbSBjYW1lIGZyb20uCisKKy0taGVscDo6CisJUHJpbnRzIHRoZSBzeW5vcHNpcyBhbmQgYSBsaXN0IG9mIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQKKwljb21tYW5kcy4gSWYgdGhlIG9wdGlvbiAnLS1hbGwnIG9yICctYScgaXMgZ2l2ZW4gdGhlbiBhbGwKKwlhdmFpbGFibGUgY29tbWFuZHMgYXJlIHByaW50ZWQuIElmIGEgR2l0IGNvbW1hbmQgaXMgbmFtZWQgdGhpcworCW9wdGlvbiB3aWxsIGJyaW5nIHVwIHRoZSBtYW51YWwgcGFnZSBmb3IgdGhhdCBjb21tYW5kLgorKworT3RoZXIgb3B0aW9ucyBhcmUgYXZhaWxhYmxlIHRvIGNvbnRyb2wgaG93IHRoZSBtYW51YWwgcGFnZSBpcworZGlzcGxheWVkLiBTZWUgbGlua2dpdDpnaXQtaGVscFsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiwKK2JlY2F1c2UgYGdpdCAtLWhlbHAgLi4uYCBpcyBjb252ZXJ0ZWQgaW50ZXJuYWxseSBpbnRvIGBnaXQKK2hlbHAgLi4uYC4KKworLUMgPHBhdGg+OjoKKwlSdW4gYXMgaWYgZ2l0IHdhcyBzdGFydGVkIGluICc8cGF0aD4nIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgd29ya2luZworCWRpcmVjdG9yeS4gIFdoZW4gbXVsdGlwbGUgYC1DYCBvcHRpb25zIGFyZSBnaXZlbiwgZWFjaCBzdWJzZXF1ZW50CisJbm9uLWFic29sdXRlIGAtQyA8cGF0aD5gIGlzIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZSBwcmVjZWRpbmcgYC1DCisJPHBhdGg+YC4KKysKK1RoaXMgb3B0aW9uIGFmZmVjdHMgb3B0aW9ucyB0aGF0IGV4cGVjdCBwYXRoIG5hbWUgbGlrZSBgLS1naXQtZGlyYCBhbmQKK2AtLXdvcmstdHJlZWAgaW4gdGhhdCB0aGVpciBpbnRlcnByZXRhdGlvbnMgb2YgdGhlIHBhdGggbmFtZXMgd291bGQgYmUKK21hZGUgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGNhdXNlZCBieSB0aGUgYC1DYCBvcHRpb24uIEZvcgorZXhhbXBsZSB0aGUgZm9sbG93aW5nIGludm9jYXRpb25zIGFyZSBlcXVpdmFsZW50OgorCisgICAgZ2l0IC0tZ2l0LWRpcj1hLmdpdCAtLXdvcmstdHJlZT1iIC1DIGMgc3RhdHVzCisgICAgZ2l0IC0tZ2l0LWRpcj1jL2EuZ2l0IC0td29yay10cmVlPWMvYiBzdGF0dXMKKworLWMgPG5hbWU+PTx2YWx1ZT46OgorCVBhc3MgYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0byB0aGUgY29tbWFuZC4gVGhlIHZhbHVlCisJZ2l2ZW4gd2lsbCBvdmVycmlkZSB2YWx1ZXMgZnJvbSBjb25maWd1cmF0aW9uIGZpbGVzLgorCVRoZSA8bmFtZT4gaXMgZXhwZWN0ZWQgaW4gdGhlIHNhbWUgZm9ybWF0IGFzIGxpc3RlZCBieQorCSdnaXQgY29uZmlnJyAoc3Via2V5cyBzZXBhcmF0ZWQgYnkgZG90cykuCisrCitOb3RlIHRoYXQgb21pdHRpbmcgdGhlIGA9YCBpbiBgZ2l0IC1jIGZvby5iYXIgLi4uYCBpcyBhbGxvd2VkIGFuZCBzZXRzCitgZm9vLmJhcmAgdG8gdGhlIGJvb2xlYW4gdHJ1ZSB2YWx1ZSAoanVzdCBsaWtlIGBbZm9vXWJhcmAgd291bGQgaW4gYQorY29uZmlnIGZpbGUpLiBJbmNsdWRpbmcgdGhlIGVxdWFscyBidXQgd2l0aCBhbiBlbXB0eSB2YWx1ZSAobGlrZSBgZ2l0IC1jCitmb28uYmFyPSAuLi5gKSBzZXRzIGBmb28uYmFyYCB0byB0aGUgZW1wdHkgc3RyaW5nLgorCistLWV4ZWMtcGF0aFs9PHBhdGg+XTo6CisJUGF0aCB0byB3aGVyZXZlciB5b3VyIGNvcmUgR2l0IHByb2dyYW1zIGFyZSBpbnN0YWxsZWQuCisJVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIGJ5IHNldHRpbmcgdGhlIEdJVF9FWEVDX1BBVEgKKwllbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgbm8gcGF0aCBpcyBnaXZlbiwgJ2dpdCcgd2lsbCBwcmludAorCXRoZSBjdXJyZW50IHNldHRpbmcgYW5kIHRoZW4gZXhpdC4KKworLS1odG1sLXBhdGg6OgorCVByaW50IHRoZSBwYXRoLCB3aXRob3V0IHRyYWlsaW5nIHNsYXNoLCB3aGVyZSBHaXQncyBIVE1MCisJZG9jdW1lbnRhdGlvbiBpcyBpbnN0YWxsZWQgYW5kIGV4aXQuCisKKy0tbWFuLXBhdGg6OgorCVByaW50IHRoZSBtYW5wYXRoIChzZWUgYG1hbigxKWApIGZvciB0aGUgbWFuIHBhZ2VzIGZvcgorCXRoaXMgdmVyc2lvbiBvZiBHaXQgYW5kIGV4aXQuCisKKy0taW5mby1wYXRoOjoKKwlQcmludCB0aGUgcGF0aCB3aGVyZSB0aGUgSW5mbyBmaWxlcyBkb2N1bWVudGluZyB0aGlzCisJdmVyc2lvbiBvZiBHaXQgYXJlIGluc3RhbGxlZCBhbmQgZXhpdC4KKworLXA6OgorLS1wYWdpbmF0ZTo6CisJUGlwZSBhbGwgb3V0cHV0IGludG8gJ2xlc3MnIChvciBpZiBzZXQsICRQQUdFUikgaWYgc3RhbmRhcmQKKwlvdXRwdXQgaXMgYSB0ZXJtaW5hbC4gIFRoaXMgb3ZlcnJpZGVzIHRoZSBgcGFnZXIuPGNtZD5gCisJY29uZmlndXJhdGlvbiBvcHRpb25zIChzZWUgdGhlICJDb25maWd1cmF0aW9uIE1lY2hhbmlzbSIgc2VjdGlvbgorCWJlbG93KS4KKworLS1uby1wYWdlcjo6CisJRG8gbm90IHBpcGUgR2l0IG91dHB1dCBpbnRvIGEgcGFnZXIuCisKKy0tZ2l0LWRpcj08cGF0aD46OgorCVNldCB0aGUgcGF0aCB0byB0aGUgcmVwb3NpdG9yeS4gVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIGJ5CisJc2V0dGluZyB0aGUgR0lUX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSXQgY2FuIGJlIGFuIGFic29sdXRlCisJcGF0aCBvciByZWxhdGl2ZSBwYXRoIHRvIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisKKy0td29yay10cmVlPTxwYXRoPjo6CisJU2V0IHRoZSBwYXRoIHRvIHRoZSB3b3JraW5nIHRyZWUuIEl0IGNhbiBiZSBhbiBhYnNvbHV0ZSBwYXRoCisJb3IgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorCVRoaXMgY2FuIGFsc28gYmUgY29udHJvbGxlZCBieSBzZXR0aW5nIHRoZSBHSVRfV09SS19UUkVFCisJZW52aXJvbm1lbnQgdmFyaWFibGUgYW5kIHRoZSBjb3JlLndvcmt0cmVlIGNvbmZpZ3VyYXRpb24KKwl2YXJpYWJsZSAoc2VlIGNvcmUud29ya3RyZWUgaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBhCisJbW9yZSBkZXRhaWxlZCBkaXNjdXNzaW9uKS4KKworLS1uYW1lc3BhY2U9PHBhdGg+OjoKKwlTZXQgdGhlIEdpdCBuYW1lc3BhY2UuICBTZWUgbGlua2dpdDpnaXRuYW1lc3BhY2VzWzddIGZvciBtb3JlCisJZGV0YWlscy4gIEVxdWl2YWxlbnQgdG8gc2V0dGluZyB0aGUgYEdJVF9OQU1FU1BBQ0VgIGVudmlyb25tZW50CisJdmFyaWFibGUuCisKKy0tYmFyZTo6CisJVHJlYXQgdGhlIHJlcG9zaXRvcnkgYXMgYSBiYXJlIHJlcG9zaXRvcnkuICBJZiBHSVRfRElSCisJZW52aXJvbm1lbnQgaXMgbm90IHNldCwgaXQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IHdvcmtpbmcKKwlkaXJlY3RvcnkuCisKKy0tbm8tcmVwbGFjZS1vYmplY3RzOjoKKwlEbyBub3QgdXNlIHJlcGxhY2VtZW50IHJlZnMgdG8gcmVwbGFjZSBHaXQgb2JqZWN0cy4gU2VlCisJbGlua2dpdDpnaXQtcmVwbGFjZVsxXSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworLS1saXRlcmFsLXBhdGhzcGVjczo6CisJVHJlYXQgcGF0aHNwZWNzIGxpdGVyYWxseSAoaS5lLiBubyBnbG9iYmluZywgbm8gcGF0aHNwZWMgbWFnaWMpLgorCVRoaXMgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIHRoZSBgR0lUX0xJVEVSQUxfUEFUSFNQRUNTYCBlbnZpcm9ubWVudAorCXZhcmlhYmxlIHRvIGAxYC4KKworLS1nbG9iLXBhdGhzcGVjczo6CisJQWRkICJnbG9iIiBtYWdpYyB0byBhbGwgcGF0aHNwZWMuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nCisJdGhlIGBHSVRfR0xPQl9QQVRIU1BFQ1NgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGAxYC4gRGlzYWJsaW5nCisJZ2xvYmJpbmcgb24gaW5kaXZpZHVhbCBwYXRoc3BlY3MgY2FuIGJlIGRvbmUgdXNpbmcgcGF0aHNwZWMKKwltYWdpYyAiOihsaXRlcmFsKSIKKworLS1ub2dsb2ItcGF0aHNwZWNzOjoKKwlBZGQgImxpdGVyYWwiIG1hZ2ljIHRvIGFsbCBwYXRoc3BlYy4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcKKwl0aGUgYEdJVF9OT0dMT0JfUEFUSFNQRUNTYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBgMWAuIEVuYWJsaW5nCisJZ2xvYmJpbmcgb24gaW5kaXZpZHVhbCBwYXRoc3BlY3MgY2FuIGJlIGRvbmUgdXNpbmcgcGF0aHNwZWMKKwltYWdpYyAiOihnbG9iKSIKKworLS1pY2FzZS1wYXRoc3BlY3M6OgorCUFkZCAiaWNhc2UiIG1hZ2ljIHRvIGFsbCBwYXRoc3BlYy4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcKKwl0aGUgYEdJVF9JQ0FTRV9QQVRIU1BFQ1NgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGAxYC4KKworR0lUIENPTU1BTkRTCistLS0tLS0tLS0tLS0KKworV2UgZGl2aWRlIEdpdCBpbnRvIGhpZ2ggbGV2ZWwgKCJwb3JjZWxhaW4iKSBjb21tYW5kcyBhbmQgbG93IGxldmVsCisoInBsdW1iaW5nIikgY29tbWFuZHMuCisKK0hpZ2gtbGV2ZWwgY29tbWFuZHMgKHBvcmNlbGFpbikKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2Ugc2VwYXJhdGUgdGhlIHBvcmNlbGFpbiBjb21tYW5kcyBpbnRvIHRoZSBtYWluIGNvbW1hbmRzIGFuZCBzb21lCithbmNpbGxhcnkgdXNlciB1dGlsaXRpZXMuCisKK01haW4gcG9yY2VsYWluIGNvbW1hbmRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitpbmNsdWRlOjpjbWRzLW1haW5wb3JjZWxhaW4udHh0W10KKworQW5jaWxsYXJ5IENvbW1hbmRzCit+fn5+fn5+fn5+fn5+fn5+fn4KK01hbmlwdWxhdG9yczoKKworaW5jbHVkZTo6Y21kcy1hbmNpbGxhcnltYW5pcHVsYXRvcnMudHh0W10KKworSW50ZXJyb2dhdG9yczoKKworaW5jbHVkZTo6Y21kcy1hbmNpbGxhcnlpbnRlcnJvZ2F0b3JzLnR4dFtdCisKKworSW50ZXJhY3Rpbmcgd2l0aCBPdGhlcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZXNlIGNvbW1hbmRzIGFyZSB0byBpbnRlcmFjdCB3aXRoIGZvcmVpZ24gU0NNIGFuZCB3aXRoIG90aGVyCitwZW9wbGUgdmlhIHBhdGNoIG92ZXIgZS1tYWlsLgorCitpbmNsdWRlOjpjbWRzLWZvcmVpZ25zY21pbnRlcmZhY2UudHh0W10KKworCitMb3ctbGV2ZWwgY29tbWFuZHMgKHBsdW1iaW5nKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0aG91Z2ggR2l0IGluY2x1ZGVzIGl0cworb3duIHBvcmNlbGFpbiBsYXllciwgaXRzIGxvdy1sZXZlbCBjb21tYW5kcyBhcmUgc3VmZmljaWVudCB0byBzdXBwb3J0CitkZXZlbG9wbWVudCBvZiBhbHRlcm5hdGl2ZSBwb3JjZWxhaW5zLiAgRGV2ZWxvcGVycyBvZiBzdWNoIHBvcmNlbGFpbnMKK21pZ2h0IHN0YXJ0IGJ5IHJlYWRpbmcgYWJvdXQgbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdIGFuZAorbGlua2dpdDpnaXQtcmVhZC10cmVlWzFdLgorCitUaGUgaW50ZXJmYWNlIChpbnB1dCwgb3V0cHV0LCBzZXQgb2Ygb3B0aW9ucyBhbmQgdGhlIHNlbWFudGljcykKK3RvIHRoZXNlIGxvdy1sZXZlbCBjb21tYW5kcyBhcmUgbWVhbnQgdG8gYmUgYSBsb3QgbW9yZSBzdGFibGUKK3RoYW4gUG9yY2VsYWluIGxldmVsIGNvbW1hbmRzLCBiZWNhdXNlIHRoZXNlIGNvbW1hbmRzIGFyZQorcHJpbWFyaWx5IGZvciBzY3JpcHRlZCB1c2UuICBUaGUgaW50ZXJmYWNlIHRvIFBvcmNlbGFpbiBjb21tYW5kcworb24gdGhlIG90aGVyIGhhbmQgYXJlIHN1YmplY3QgdG8gY2hhbmdlIGluIG9yZGVyIHRvIGltcHJvdmUgdGhlCitlbmQgdXNlciBleHBlcmllbmNlLgorCitUaGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uIGRpdmlkZXMKK3RoZSBsb3ctbGV2ZWwgY29tbWFuZHMgaW50byBjb21tYW5kcyB0aGF0IG1hbmlwdWxhdGUgb2JqZWN0cyAoaW4KK3RoZSByZXBvc2l0b3J5LCBpbmRleCwgYW5kIHdvcmtpbmcgdHJlZSksIGNvbW1hbmRzIHRoYXQgaW50ZXJyb2dhdGUgYW5kCitjb21wYXJlIG9iamVjdHMsIGFuZCBjb21tYW5kcyB0aGF0IG1vdmUgb2JqZWN0cyBhbmQgcmVmZXJlbmNlcyBiZXR3ZWVuCityZXBvc2l0b3JpZXMuCisKKworTWFuaXB1bGF0aW9uIGNvbW1hbmRzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworaW5jbHVkZTo6Y21kcy1wbHVtYmluZ21hbmlwdWxhdG9ycy50eHRbXQorCisKK0ludGVycm9nYXRpb24gY29tbWFuZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworaW5jbHVkZTo6Y21kcy1wbHVtYmluZ2ludGVycm9nYXRvcnMudHh0W10KKworSW4gZ2VuZXJhbCwgdGhlIGludGVycm9nYXRlIGNvbW1hbmRzIGRvIG5vdCB0b3VjaCB0aGUgZmlsZXMgaW4KK3RoZSB3b3JraW5nIHRyZWUuCisKKworU3luY2hpbmcgcmVwb3NpdG9yaWVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworaW5jbHVkZTo6Y21kcy1zeW5jaGluZ3JlcG9zaXRvcmllcy50eHRbXQorCitUaGUgZm9sbG93aW5nIGFyZSBoZWxwZXIgY29tbWFuZHMgdXNlZCBieSB0aGUgYWJvdmU7IGVuZCB1c2VycwordHlwaWNhbGx5IGRvIG5vdCB1c2UgdGhlbSBkaXJlY3RseS4KKworaW5jbHVkZTo6Y21kcy1zeW5jaGVscGVycy50eHRbXQorCisKK0ludGVybmFsIGhlbHBlciBjb21tYW5kcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZXNlIGFyZSBpbnRlcm5hbCBoZWxwZXIgY29tbWFuZHMgdXNlZCBieSBvdGhlciBjb21tYW5kczsgZW5kCit1c2VycyB0eXBpY2FsbHkgZG8gbm90IHVzZSB0aGVtIGRpcmVjdGx5LgorCitpbmNsdWRlOjpjbWRzLXB1cmVoZWxwZXJzLnR4dFtdCisKKworQ29uZmlndXJhdGlvbiBNZWNoYW5pc20KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCB1c2VzIGEgc2ltcGxlIHRleHQgZm9ybWF0IHRvIHN0b3JlIGN1c3RvbWl6YXRpb25zIHRoYXQgYXJlIHBlcgorcmVwb3NpdG9yeSBhbmQgYXJlIHBlciB1c2VyLiAgU3VjaCBhIGNvbmZpZ3VyYXRpb24gZmlsZSBtYXkgbG9vaworbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyMKKyMgQSAnIycgb3IgJzsnIGNoYXJhY3RlciBpbmRpY2F0ZXMgYSBjb21tZW50LgorIworCis7IGNvcmUgdmFyaWFibGVzCitbY29yZV0KKwk7IERvbid0IHRydXN0IGZpbGUgbW9kZXMKKwlmaWxlbW9kZSA9IGZhbHNlCisKKzsgdXNlciBpZGVudGl0eQorW3VzZXJdCisJbmFtZSA9ICJKdW5pbyBDIEhhbWFubyIKKwllbWFpbCA9ICJnaXRzdGVyQHBvYm94LmNvbSIKKworLS0tLS0tLS0tLS0tCisKK1ZhcmlvdXMgY29tbWFuZHMgcmVhZCBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kIGFkanVzdAordGhlaXIgb3BlcmF0aW9uIGFjY29yZGluZ2x5LiAgU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgYQorbGlzdCBhbmQgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbS4KKworCitJZGVudGlmaWVyIFRlcm1pbm9sb2d5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8b2JqZWN0Pjo6CisJSW5kaWNhdGVzIHRoZSBvYmplY3QgbmFtZSBmb3IgYW55IHR5cGUgb2Ygb2JqZWN0LgorCis8YmxvYj46OgorCUluZGljYXRlcyBhIGJsb2Igb2JqZWN0IG5hbWUuCisKKzx0cmVlPjo6CisJSW5kaWNhdGVzIGEgdHJlZSBvYmplY3QgbmFtZS4KKworPGNvbW1pdD46OgorCUluZGljYXRlcyBhIGNvbW1pdCBvYmplY3QgbmFtZS4KKworPHRyZWUtaXNoPjo6CisJSW5kaWNhdGVzIGEgdHJlZSwgY29tbWl0IG9yIHRhZyBvYmplY3QgbmFtZS4gIEEKKwljb21tYW5kIHRoYXQgdGFrZXMgYSA8dHJlZS1pc2g+IGFyZ3VtZW50IHVsdGltYXRlbHkgd2FudHMgdG8KKwlvcGVyYXRlIG9uIGEgPHRyZWU+IG9iamVjdCBidXQgYXV0b21hdGljYWxseSBkZXJlZmVyZW5jZXMKKwk8Y29tbWl0PiBhbmQgPHRhZz4gb2JqZWN0cyB0aGF0IHBvaW50IGF0IGEgPHRyZWU+LgorCis8Y29tbWl0LWlzaD46OgorCUluZGljYXRlcyBhIGNvbW1pdCBvciB0YWcgb2JqZWN0IG5hbWUuICBBCisJY29tbWFuZCB0aGF0IHRha2VzIGEgPGNvbW1pdC1pc2g+IGFyZ3VtZW50IHVsdGltYXRlbHkgd2FudHMgdG8KKwlvcGVyYXRlIG9uIGEgPGNvbW1pdD4gb2JqZWN0IGJ1dCBhdXRvbWF0aWNhbGx5IGRlcmVmZXJlbmNlcworCTx0YWc+IG9iamVjdHMgdGhhdCBwb2ludCBhdCBhIDxjb21taXQ+LgorCis8dHlwZT46OgorCUluZGljYXRlcyB0aGF0IGFuIG9iamVjdCB0eXBlIGlzIHJlcXVpcmVkLgorCUN1cnJlbnRseSBvbmUgb2Y6IGBibG9iYCwgYHRyZWVgLCBgY29tbWl0YCwgb3IgYHRhZ2AuCisKKzxmaWxlPjo6CisJSW5kaWNhdGVzIGEgZmlsZW5hbWUgLSBhbG1vc3QgYWx3YXlzIHJlbGF0aXZlIHRvIHRoZQorCXJvb3Qgb2YgdGhlIHRyZWUgc3RydWN0dXJlIGBHSVRfSU5ERVhfRklMRWAgZGVzY3JpYmVzLgorCitTeW1ib2xpYyBJZGVudGlmaWVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FueSBHaXQgY29tbWFuZCBhY2NlcHRpbmcgYW55IDxvYmplY3Q+IGNhbiBhbHNvIHVzZSB0aGUgZm9sbG93aW5nCitzeW1ib2xpYyBub3RhdGlvbjoKKworSEVBRDo6CisJaW5kaWNhdGVzIHRoZSBoZWFkIG9mIHRoZSBjdXJyZW50IGJyYW5jaC4KKworPHRhZz46OgorCWEgdmFsaWQgdGFnICduYW1lJworCShpLmUuIGEgYHJlZnMvdGFncy88dGFnPmAgcmVmZXJlbmNlKS4KKworPGhlYWQ+OjoKKwlhIHZhbGlkIGhlYWQgJ25hbWUnCisJKGkuZS4gYSBgcmVmcy9oZWFkcy88aGVhZD5gIHJlZmVyZW5jZSkuCisKK0ZvciBhIG1vcmUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvIHNwZWxsIG9iamVjdCBuYW1lcywgc2VlCisiU1BFQ0lGWUlORyBSRVZJU0lPTlMiIHNlY3Rpb24gaW4gbGlua2dpdDpnaXRyZXZpc2lvbnNbN10uCisKKworRmlsZS9EaXJlY3RvcnkgU3RydWN0dXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGxlYXNlIHNlZSB0aGUgbGlua2dpdDpnaXRyZXBvc2l0b3J5LWxheW91dFs1XSBkb2N1bWVudC4KKworUmVhZCBsaW5rZ2l0OmdpdGhvb2tzWzVdIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgZWFjaCBob29rLgorCitIaWdoZXIgbGV2ZWwgU0NNcyBtYXkgcHJvdmlkZSBhbmQgbWFuYWdlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGhlCitgJEdJVF9ESVJgLgorCisKK1Rlcm1pbm9sb2d5CistLS0tLS0tLS0tLQorUGxlYXNlIHNlZSBsaW5rZ2l0OmdpdGdsb3NzYXJ5WzddLgorCisKK0Vudmlyb25tZW50IFZhcmlhYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitWYXJpb3VzIEdpdCBjb21tYW5kcyB1c2UgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6CisKK1RoZSBHaXQgUmVwb3NpdG9yeQorfn5+fn5+fn5+fn5+fn5+fn5+CitUaGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXBwbHkgdG8gJ2FsbCcgY29yZSBHaXQgY29tbWFuZHMuIE5iOiBpdAoraXMgd29ydGggbm90aW5nIHRoYXQgdGhleSBtYXkgYmUgdXNlZC9vdmVycmlkZGVuIGJ5IFNDTVMgc2l0dGluZyBhYm92ZQorR2l0IHNvIHRha2UgY2FyZSBpZiB1c2luZyBhIGZvcmVpZ24gZnJvbnQtZW5kLgorCisnR0lUX0lOREVYX0ZJTEUnOjoKKwlUaGlzIGVudmlyb25tZW50IGFsbG93cyB0aGUgc3BlY2lmaWNhdGlvbiBvZiBhbiBhbHRlcm5hdGUKKwlpbmRleCBmaWxlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBvZiBgJEdJVF9ESVIvaW5kZXhgCisJaXMgdXNlZC4KKworJ0dJVF9JTkRFWF9WRVJTSU9OJzo6CisJVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gb2YgYW4gaW5kZXgKKwl2ZXJzaW9uIGZvciBuZXcgcmVwb3NpdG9yaWVzLiAgSXQgd29uJ3QgYWZmZWN0IGV4aXN0aW5nIGluZGV4CisJZmlsZXMuICBCeSBkZWZhdWx0IGluZGV4IGZpbGUgdmVyc2lvbiAyIG9yIDMgaXMgdXNlZC4gU2VlCisJbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisnR0lUX09CSkVDVF9ESVJFQ1RPUlknOjoKKwlJZiB0aGUgb2JqZWN0IHN0b3JhZ2UgZGlyZWN0b3J5IGlzIHNwZWNpZmllZCB2aWEgdGhpcworCWVudmlyb25tZW50IHZhcmlhYmxlIHRoZW4gdGhlIHNoYTEgZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQKKwl1bmRlcm5lYXRoIC0gb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGAkR0lUX0RJUi9vYmplY3RzYAorCWRpcmVjdG9yeSBpcyB1c2VkLgorCisnR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVMnOjoKKwlEdWUgdG8gdGhlIGltbXV0YWJsZSBuYXR1cmUgb2YgR2l0IG9iamVjdHMsIG9sZCBvYmplY3RzIGNhbiBiZQorCWFyY2hpdmVkIGludG8gc2hhcmVkLCByZWFkLW9ubHkgZGlyZWN0b3JpZXMuIFRoaXMgdmFyaWFibGUKKwlzcGVjaWZpZXMgYSAiOiIgc2VwYXJhdGVkIChvbiBXaW5kb3dzICI7IiBzZXBhcmF0ZWQpIGxpc3QKKwlvZiBHaXQgb2JqZWN0IGRpcmVjdG9yaWVzIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlYXJjaCBmb3IgR2l0CisJb2JqZWN0cy4gTmV3IG9iamVjdHMgd2lsbCBub3QgYmUgd3JpdHRlbiB0byB0aGVzZSBkaXJlY3Rvcmllcy4KKworJ0dJVF9ESVInOjoKKwlJZiB0aGUgJ0dJVF9ESVInIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB0aGVuIGl0CisJc3BlY2lmaWVzIGEgcGF0aCB0byB1c2UgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgLmdpdGAKKwlmb3IgdGhlIGJhc2Ugb2YgdGhlIHJlcG9zaXRvcnkuCisJVGhlICctLWdpdC1kaXInIGNvbW1hbmQtbGluZSBvcHRpb24gYWxzbyBzZXRzIHRoaXMgdmFsdWUuCisKKydHSVRfV09SS19UUkVFJzo6CisJU2V0IHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUuCisJVGhpcyBjYW4gYWxzbyBiZSBjb250cm9sbGVkIGJ5IHRoZSAnLS13b3JrLXRyZWUnIGNvbW1hbmQtbGluZQorCW9wdGlvbiBhbmQgdGhlIGNvcmUud29ya3RyZWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworJ0dJVF9OQU1FU1BBQ0UnOjoKKwlTZXQgdGhlIEdpdCBuYW1lc3BhY2U7IHNlZSBsaW5rZ2l0OmdpdG5hbWVzcGFjZXNbN10gZm9yIGRldGFpbHMuCisJVGhlICctLW5hbWVzcGFjZScgY29tbWFuZC1saW5lIG9wdGlvbiBhbHNvIHNldHMgdGhpcyB2YWx1ZS4KKworJ0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTJzo6CisJVGhpcyBzaG91bGQgYmUgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBhYnNvbHV0ZSBwYXRocy4gIElmCisJc2V0LCBpdCBpcyBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdCBHaXQgc2hvdWxkIG5vdCBjaGRpciB1cAorCWludG8gd2hpbGUgbG9va2luZyBmb3IgYSByZXBvc2l0b3J5IGRpcmVjdG9yeSAodXNlZnVsIGZvcgorCWV4Y2x1ZGluZyBzbG93LWxvYWRpbmcgbmV0d29yayBkaXJlY3RvcmllcykuICBJdCB3aWxsIG5vdAorCWV4Y2x1ZGUgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb3IgYSBHSVRfRElSIHNldCBvbiB0aGUKKwljb21tYW5kIGxpbmUgb3IgaW4gdGhlIGVudmlyb25tZW50LiAgTm9ybWFsbHksIEdpdCBoYXMgdG8gcmVhZAorCXRoZSBlbnRyaWVzIGluIHRoaXMgbGlzdCBhbmQgcmVzb2x2ZSBhbnkgc3ltbGluayB0aGF0CisJbWlnaHQgYmUgcHJlc2VudCBpbiBvcmRlciB0byBjb21wYXJlIHRoZW0gd2l0aCB0aGUgY3VycmVudAorCWRpcmVjdG9yeS4gIEhvd2V2ZXIsIGlmIGV2ZW4gdGhpcyBhY2Nlc3MgaXMgc2xvdywgeW91CisJY2FuIGFkZCBhbiBlbXB0eSBlbnRyeSB0byB0aGUgbGlzdCB0byB0ZWxsIEdpdCB0aGF0IHRoZQorCXN1YnNlcXVlbnQgZW50cmllcyBhcmUgbm90IHN5bWxpbmtzIGFuZCBuZWVkbid0IGJlIHJlc29sdmVkOworCWUuZy4sCisJJ0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPS9tYXliZS9zeW1saW5rOjovdmVyeS9zbG93L25vbi9zeW1saW5rJy4KKworJ0dJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0nOjoKKwlXaGVuIHJ1biBpbiBhIGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IGhhdmUgIi5naXQiIHJlcG9zaXRvcnkKKwlkaXJlY3RvcnksIEdpdCB0cmllcyB0byBmaW5kIHN1Y2ggYSBkaXJlY3RvcnkgaW4gdGhlIHBhcmVudAorCWRpcmVjdG9yaWVzIHRvIGZpbmQgdGhlIHRvcCBvZiB0aGUgd29ya2luZyB0cmVlLCBidXQgYnkgZGVmYXVsdCBpdAorCWRvZXMgbm90IGNyb3NzIGZpbGVzeXN0ZW0gYm91bmRhcmllcy4gIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUKKwljYW4gYmUgc2V0IHRvIHRydWUgdG8gdGVsbCBHaXQgbm90IHRvIHN0b3AgYXQgZmlsZXN5c3RlbQorCWJvdW5kYXJpZXMuICBMaWtlICdHSVRfQ0VJTElOR19ESVJFQ1RPUklFUycsIHRoaXMgd2lsbCBub3QgYWZmZWN0CisJYW4gZXhwbGljaXQgcmVwb3NpdG9yeSBkaXJlY3Rvcnkgc2V0IHZpYSAnR0lUX0RJUicgb3Igb24gdGhlCisJY29tbWFuZCBsaW5lLgorCisnR0lUX0NPTU1PTl9ESVInOjoKKwlJZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byBhIHBhdGgsIG5vbi13b3JrdHJlZSBmaWxlcyB0aGF0IGFyZQorCW5vcm1hbGx5IGluICRHSVRfRElSIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGlzIHBhdGgKKwlpbnN0ZWFkLiBXb3JrdHJlZS1zcGVjaWZpYyBmaWxlcyBzdWNoIGFzIEhFQUQgb3IgaW5kZXggYXJlCisJdGFrZW4gZnJvbSAkR0lUX0RJUi4gU2VlIGxpbmtnaXQ6Z2l0cmVwb3NpdG9yeS1sYXlvdXRbNV0gYW5kCisJbGlua2dpdDpnaXQtd29ya3RyZWVbMV0gZm9yCisJZGV0YWlscy4gVGhpcyB2YXJpYWJsZSBoYXMgbG93ZXIgcHJlY2VkZW5jZSB0aGFuIG90aGVyIHBhdGgKKwl2YXJpYWJsZXMgc3VjaCBhcyBHSVRfSU5ERVhfRklMRSwgR0lUX09CSkVDVF9ESVJFQ1RPUlkuLi4KKworR2l0IENvbW1pdHMKK35+fn5+fn5+fn5+CisnR0lUX0FVVEhPUl9OQU1FJzo6CisnR0lUX0FVVEhPUl9FTUFJTCc6OgorJ0dJVF9BVVRIT1JfREFURSc6OgorJ0dJVF9DT01NSVRURVJfTkFNRSc6OgorJ0dJVF9DT01NSVRURVJfRU1BSUwnOjoKKydHSVRfQ09NTUlUVEVSX0RBVEUnOjoKKydFTUFJTCc6OgorCXNlZSBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXQorCitHaXQgRGlmZnMKK35+fn5+fn5+fgorJ0dJVF9ESUZGX09QVFMnOjoKKwlPbmx5IHZhbGlkIHNldHRpbmcgaXMgIi0tdW5pZmllZD0/PyIgb3IgIi11Pz8iIHRvIHNldCB0aGUKKwludW1iZXIgb2YgY29udGV4dCBsaW5lcyBzaG93biB3aGVuIGEgdW5pZmllZCBkaWZmIGlzIGNyZWF0ZWQuCisJVGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgYW55ICItVSIgb3IgIi0tdW5pZmllZCIgb3B0aW9uCisJdmFsdWUgcGFzc2VkIG9uIHRoZSBHaXQgZGlmZiBjb21tYW5kIGxpbmUuCisKKydHSVRfRVhURVJOQUxfRElGRic6OgorCVdoZW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICdHSVRfRVhURVJOQUxfRElGRicgaXMgc2V0LCB0aGUKKwlwcm9ncmFtIG5hbWVkIGJ5IGl0IGlzIGNhbGxlZCwgaW5zdGVhZCBvZiB0aGUgZGlmZiBpbnZvY2F0aW9uCisJZGVzY3JpYmVkIGFib3ZlLiAgRm9yIGEgcGF0aCB0aGF0IGlzIGFkZGVkLCByZW1vdmVkLCBvciBtb2RpZmllZCwKKyAgICAgICAgJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBjYWxsZWQgd2l0aCA3IHBhcmFtZXRlcnM6CisKKwlwYXRoIG9sZC1maWxlIG9sZC1oZXggb2xkLW1vZGUgbmV3LWZpbGUgbmV3LWhleCBuZXctbW9kZQorKword2hlcmU6CisKKwk8b2xkfG5ldz4tZmlsZTo6IGFyZSBmaWxlcyBHSVRfRVhURVJOQUxfRElGRiBjYW4gdXNlIHRvIHJlYWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgb2YgPG9sZHxuZXc+LAorCTxvbGR8bmV3Pi1oZXg6OiBhcmUgdGhlIDQwLWhleGRpZ2l0IFNIQS0xIGhhc2hlcywKKwk8b2xkfG5ldz4tbW9kZTo6IGFyZSB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpbGUgbW9kZXMuCisrCitUaGUgZmlsZSBwYXJhbWV0ZXJzIGNhbiBwb2ludCBhdCB0aGUgdXNlcidzIHdvcmtpbmcgZmlsZQorKGUuZy4gYG5ldy1maWxlYCBpbiAiZ2l0LWRpZmYtZmlsZXMiKSwgYC9kZXYvbnVsbGAgKGUuZy4gYG9sZC1maWxlYAord2hlbiBhIG5ldyBmaWxlIGlzIGFkZGVkKSwgb3IgYSB0ZW1wb3JhcnkgZmlsZSAoZS5nLiBgb2xkLWZpbGVgIGluIHRoZQoraW5kZXgpLiAgJ0dJVF9FWFRFUk5BTF9ESUZGJyBzaG91bGQgbm90IHdvcnJ5IGFib3V0IHVubGlua2luZyB0aGUKK3RlbXBvcmFyeSBmaWxlIC0tLSBpdCBpcyByZW1vdmVkIHdoZW4gJ0dJVF9FWFRFUk5BTF9ESUZGJyBleGl0cy4KKysKK0ZvciBhIHBhdGggdGhhdCBpcyB1bm1lcmdlZCwgJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBjYWxsZWQgd2l0aCAxCitwYXJhbWV0ZXIsIDxwYXRoPi4KKysKK0ZvciBlYWNoIHBhdGggJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBjYWxsZWQsIHR3byBlbnZpcm9ubWVudCB2YXJpYWJsZXMsCisnR0lUX0RJRkZfUEFUSF9DT1VOVEVSJyBhbmQgJ0dJVF9ESUZGX1BBVEhfVE9UQUwnIGFyZSBzZXQuCisKKydHSVRfRElGRl9QQVRIX0NPVU5URVInOjoKKwlBIDEtYmFzZWQgY291bnRlciBpbmNyZW1lbnRlZCBieSBvbmUgZm9yIGV2ZXJ5IHBhdGguCisKKydHSVRfRElGRl9QQVRIX1RPVEFMJzo6CisJVGhlIHRvdGFsIG51bWJlciBvZiBwYXRocy4KKworb3RoZXIKK35+fn5+CisnR0lUX01FUkdFX1ZFUkJPU0lUWSc6OgorCUEgbnVtYmVyIGNvbnRyb2xsaW5nIHRoZSBhbW91bnQgb2Ygb3V0cHV0IHNob3duIGJ5CisJdGhlIHJlY3Vyc2l2ZSBtZXJnZSBzdHJhdGVneS4gIE92ZXJyaWRlcyBtZXJnZS52ZXJib3NpdHkuCisJU2VlIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdCisKKydHSVRfUEFHRVInOjoKKwlUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlcyBgJFBBR0VSYC4gSWYgaXQgaXMgc2V0CisJdG8gYW4gZW1wdHkgc3RyaW5nIG9yIHRvIHRoZSB2YWx1ZSAiY2F0IiwgR2l0IHdpbGwgbm90IGxhdW5jaAorCWEgcGFnZXIuICBTZWUgYWxzbyB0aGUgYGNvcmUucGFnZXJgIG9wdGlvbiBpbgorCWxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworJ0dJVF9FRElUT1InOjoKKwlUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIG92ZXJyaWRlcyBgJEVESVRPUmAgYW5kIGAkVklTVUFMYC4KKwlJdCBpcyB1c2VkIGJ5IHNldmVyYWwgR2l0IGNvbW1hbmRzIHdoZW4sIG9uIGludGVyYWN0aXZlIG1vZGUsCisJYW4gZWRpdG9yIGlzIHRvIGJlIGxhdW5jaGVkLiBTZWUgYWxzbyBsaW5rZ2l0OmdpdC12YXJbMV0KKwlhbmQgdGhlIGBjb3JlLmVkaXRvcmAgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXS4KKworJ0dJVF9TU0gnOjoKKydHSVRfU1NIX0NPTU1BTkQnOjoKKwlJZiBlaXRoZXIgb2YgdGhlc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIGlzIHNldCB0aGVuICdnaXQgZmV0Y2gnCisJYW5kICdnaXQgcHVzaCcgd2lsbCB1c2UgdGhlIHNwZWNpZmllZCBjb21tYW5kIGluc3RlYWQgb2YgJ3NzaCcKKwl3aGVuIHRoZXkgbmVlZCB0byBjb25uZWN0IHRvIGEgcmVtb3RlIHN5c3RlbS4KKwlUaGUgY29tbWFuZCB3aWxsIGJlIGdpdmVuIGV4YWN0bHkgdHdvIG9yIGZvdXIgYXJndW1lbnRzOiB0aGUKKwkndXNlcm5hbWVAaG9zdCcgKG9yIGp1c3QgJ2hvc3QnKSBmcm9tIHRoZSBVUkwgYW5kIHRoZSBzaGVsbAorCWNvbW1hbmQgdG8gZXhlY3V0ZSBvbiB0aGF0IHJlbW90ZSBzeXN0ZW0sIG9wdGlvbmFsbHkgcHJlY2VkZWQgYnkKKwknLXAnIChsaXRlcmFsbHkpIGFuZCB0aGUgJ3BvcnQnIGZyb20gdGhlIFVSTCB3aGVuIGl0IHNwZWNpZmllcworCXNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0IFNTSCBwb3J0LgorKworYCRHSVRfU1NIX0NPTU1BTkRgIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBgJEdJVF9TU0hgLCBhbmQgaXMgaW50ZXJwcmV0ZWQKK2J5IHRoZSBzaGVsbCwgd2hpY2ggYWxsb3dzIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGJlIGluY2x1ZGVkLgorYCRHSVRfU1NIYCBvbiB0aGUgb3RoZXIgaGFuZCBtdXN0IGJlIGp1c3QgdGhlIHBhdGggdG8gYSBwcm9ncmFtCisod2hpY2ggY2FuIGJlIGEgd3JhcHBlciBzaGVsbCBzY3JpcHQsIGlmIGFkZGl0aW9uYWwgYXJndW1lbnRzIGFyZQorbmVlZGVkKS4KKysKK1VzdWFsbHkgaXQgaXMgZWFzaWVyIHRvIGNvbmZpZ3VyZSBhbnkgZGVzaXJlZCBvcHRpb25zIHRocm91Z2ggeW91cgorcGVyc29uYWwgYC5zc2gvY29uZmlnYCBmaWxlLiAgUGxlYXNlIGNvbnN1bHQgeW91ciBzc2ggZG9jdW1lbnRhdGlvbgorZm9yIGZ1cnRoZXIgZGV0YWlscy4KKworJ0dJVF9BU0tQQVNTJzo6CisJSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIHRoZW4gR2l0IGNvbW1hbmRzIHdoaWNoIG5lZWQgdG8KKwlhY3F1aXJlIHBhc3N3b3JkcyBvciBwYXNzcGhyYXNlcyAoZS5nLiBmb3IgSFRUUCBvciBJTUFQIGF1dGhlbnRpY2F0aW9uKQorCXdpbGwgY2FsbCB0aGlzIHByb2dyYW0gd2l0aCBhIHN1aXRhYmxlIHByb21wdCBhcyBjb21tYW5kLWxpbmUgYXJndW1lbnQKKwlhbmQgcmVhZCB0aGUgcGFzc3dvcmQgZnJvbSBpdHMgU1RET1VULiBTZWUgYWxzbyB0aGUgJ2NvcmUuYXNrUGFzcycKKwlvcHRpb24gaW4gbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCisnR0lUX1RFUk1JTkFMX1BST01QVCc6OgorCUlmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGAwYCwgZ2l0IHdpbGwgbm90IHByb21wdAorCW9uIHRoZSB0ZXJtaW5hbCAoZS5nLiwgd2hlbiBhc2tpbmcgZm9yIEhUVFAgYXV0aGVudGljYXRpb24pLgorCisnR0lUX0NPTkZJR19OT1NZU1RFTSc6OgorCVdoZXRoZXIgdG8gc2tpcCByZWFkaW5nIHNldHRpbmdzIGZyb20gdGhlIHN5c3RlbS13aWRlCisJYCQocHJlZml4KS9ldGMvZ2l0Y29uZmlnYCBmaWxlLiAgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYW4KKwliZSB1c2VkIGFsb25nIHdpdGggYCRIT01FYCBhbmQgYCRYREdfQ09ORklHX0hPTUVgIHRvIGNyZWF0ZSBhCisJcHJlZGljdGFibGUgZW52aXJvbm1lbnQgZm9yIGEgcGlja3kgc2NyaXB0LCBvciB5b3UgY2FuIHNldCBpdAorCXRlbXBvcmFyaWx5IHRvIGF2b2lkIHVzaW5nIGEgYnVnZ3kgYC9ldGMvZ2l0Y29uZmlnYCBmaWxlIHdoaWxlCisJd2FpdGluZyBmb3Igc29tZW9uZSB3aXRoIHN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gZml4IGl0LgorCisnR0lUX0ZMVVNIJzo6CisJSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gIjEiLCB0aGVuIGNvbW1hbmRzIHN1Y2gKKwlhcyAnZ2l0IGJsYW1lJyAoaW4gaW5jcmVtZW50YWwgbW9kZSksICdnaXQgcmV2LWxpc3QnLCAnZ2l0IGxvZycsCisJJ2dpdCBjaGVjay1hdHRyJyBhbmQgJ2dpdCBjaGVjay1pZ25vcmUnIHdpbGwKKwlmb3JjZSBhIGZsdXNoIG9mIHRoZSBvdXRwdXQgc3RyZWFtIGFmdGVyIGVhY2ggcmVjb3JkIGhhdmUgYmVlbgorCWZsdXNoZWQuIElmIHRoaXMKKwl2YXJpYWJsZSBpcyBzZXQgdG8gIjAiLCB0aGUgb3V0cHV0IG9mIHRoZXNlIGNvbW1hbmRzIHdpbGwgYmUgZG9uZQorCXVzaW5nIGNvbXBsZXRlbHkgYnVmZmVyZWQgSS9PLiAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMKKwlub3Qgc2V0LCBHaXQgd2lsbCBjaG9vc2UgYnVmZmVyZWQgb3IgcmVjb3JkLW9yaWVudGVkIGZsdXNoaW5nCisJYmFzZWQgb24gd2hldGhlciBzdGRvdXQgYXBwZWFycyB0byBiZSByZWRpcmVjdGVkIHRvIGEgZmlsZSBvciBub3QuCisKKydHSVRfVFJBQ0UnOjoKKwlFbmFibGVzIGdlbmVyYWwgdHJhY2UgbWVzc2FnZXMsIGUuZy4gYWxpYXMgZXhwYW5zaW9uLCBidWlsdC1pbgorCWNvbW1hbmQgZXhlY3V0aW9uIGFuZCBleHRlcm5hbCBjb21tYW5kIGV4ZWN1dGlvbi4KKysKK0lmIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICIxIiwgIjIiIG9yICJ0cnVlIiAoY29tcGFyaXNvbgoraXMgY2FzZSBpbnNlbnNpdGl2ZSksIHRyYWNlIG1lc3NhZ2VzIHdpbGwgYmUgcHJpbnRlZCB0bworc3RkZXJyLgorKworSWYgdGhlIHZhcmlhYmxlIGlzIHNldCB0byBhbiBpbnRlZ2VyIHZhbHVlIGdyZWF0ZXIgdGhhbiAyCithbmQgbG93ZXIgdGhhbiAxMCAoc3RyaWN0bHkpIHRoZW4gR2l0IHdpbGwgaW50ZXJwcmV0IHRoaXMKK3ZhbHVlIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGFuZCB3aWxsIHRyeSB0byB3cml0ZSB0aGUKK3RyYWNlIG1lc3NhZ2VzIGludG8gdGhpcyBmaWxlIGRlc2NyaXB0b3IuCisrCitBbHRlcm5hdGl2ZWx5LCBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IHRvIGFuIGFic29sdXRlIHBhdGgKKyhzdGFydGluZyB3aXRoIGEgJy8nIGNoYXJhY3RlciksIEdpdCB3aWxsIGludGVycHJldCB0aGlzCithcyBhIGZpbGUgcGF0aCBhbmQgd2lsbCB0cnkgdG8gd3JpdGUgdGhlIHRyYWNlIG1lc3NhZ2VzCitpbnRvIGl0LgorKworVW5zZXR0aW5nIHRoZSB2YXJpYWJsZSwgb3Igc2V0dGluZyBpdCB0byBlbXB0eSwgIjAiIG9yCisiZmFsc2UiIChjYXNlIGluc2Vuc2l0aXZlKSBkaXNhYmxlcyB0cmFjZSBtZXNzYWdlcy4KKworJ0dJVF9UUkFDRV9QQUNLX0FDQ0VTUyc6OgorCUVuYWJsZXMgdHJhY2UgbWVzc2FnZXMgZm9yIGFsbCBhY2Nlc3NlcyB0byBhbnkgcGFja3MuIEZvciBlYWNoCisJYWNjZXNzLCB0aGUgcGFjayBmaWxlIG5hbWUgYW5kIGFuIG9mZnNldCBpbiB0aGUgcGFjayBpcworCXJlY29yZGVkLiBUaGlzIG1heSBiZSBoZWxwZnVsIGZvciB0cm91Ymxlc2hvb3Rpbmcgc29tZQorCXBhY2stcmVsYXRlZCBwZXJmb3JtYW5jZSBwcm9ibGVtcy4KKwlTZWUgJ0dJVF9UUkFDRScgZm9yIGF2YWlsYWJsZSB0cmFjZSBvdXRwdXQgb3B0aW9ucy4KKworJ0dJVF9UUkFDRV9QQUNLRVQnOjoKKwlFbmFibGVzIHRyYWNlIG1lc3NhZ2VzIGZvciBhbGwgcGFja2V0cyBjb21pbmcgaW4gb3Igb3V0IG9mIGEKKwlnaXZlbiBwcm9ncmFtLiBUaGlzIGNhbiBoZWxwIHdpdGggZGVidWdnaW5nIG9iamVjdCBuZWdvdGlhdGlvbgorCW9yIG90aGVyIHByb3RvY29sIGlzc3Vlcy4gVHJhY2luZyBpcyB0dXJuZWQgb2ZmIGF0IGEgcGFja2V0CisJc3RhcnRpbmcgd2l0aCAiUEFDSyIgKGJ1dCBzZWUgJ0dJVF9UUkFDRV9QQUNLRklMRScgYmVsb3cpLgorCVNlZSAnR0lUX1RSQUNFJyBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zLgorCisnR0lUX1RSQUNFX1BBQ0tGSUxFJzo6CisJRW5hYmxlcyB0cmFjaW5nIG9mIHBhY2tmaWxlcyBzZW50IG9yIHJlY2VpdmVkIGJ5IGEKKwlnaXZlbiBwcm9ncmFtLiBVbmxpa2Ugb3RoZXIgdHJhY2Ugb3V0cHV0LCB0aGlzIHRyYWNlIGlzCisJdmVyYmF0aW06IG5vIGhlYWRlcnMsIGFuZCBubyBxdW90aW5nIG9mIGJpbmFyeSBkYXRhLiBZb3UgYWxtb3N0CisJY2VydGFpbmx5IHdhbnQgdG8gZGlyZWN0IGludG8gYSBmaWxlIChlLmcuLAorCWBHSVRfVFJBQ0VfUEFDS0ZJTEU9L3RtcC9teS5wYWNrYCkgcmF0aGVyIHRoYW4gZGlzcGxheWluZyBpdCBvbgorCXRoZSB0ZXJtaW5hbCBvciBtaXhpbmcgaXQgd2l0aCBvdGhlciB0cmFjZSBvdXRwdXQuCisrCitOb3RlIHRoYXQgdGhpcyBpcyBjdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgdGhlIGNsaWVudCBzaWRlCitvZiBjbG9uZXMgYW5kIGZldGNoZXMuCisKKydHSVRfVFJBQ0VfUEVSRk9STUFOQ0UnOjoKKwlFbmFibGVzIHBlcmZvcm1hbmNlIHJlbGF0ZWQgdHJhY2UgbWVzc2FnZXMsIGUuZy4gdG90YWwgZXhlY3V0aW9uCisJdGltZSBvZiBlYWNoIEdpdCBjb21tYW5kLgorCVNlZSAnR0lUX1RSQUNFJyBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zLgorCisnR0lUX1RSQUNFX1NFVFVQJzo6CisJRW5hYmxlcyB0cmFjZSBtZXNzYWdlcyBwcmludGluZyB0aGUgLmdpdCwgd29ya2luZyB0cmVlIGFuZCBjdXJyZW50CisJd29ya2luZyBkaXJlY3RvcnkgYWZ0ZXIgR2l0IGhhcyBjb21wbGV0ZWQgaXRzIHNldHVwIHBoYXNlLgorCVNlZSAnR0lUX1RSQUNFJyBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zLgorCisnR0lUX1RSQUNFX1NIQUxMT1cnOjoKKwlFbmFibGVzIHRyYWNlIG1lc3NhZ2VzIHRoYXQgY2FuIGhlbHAgZGVidWdnaW5nIGZldGNoaW5nIC8KKwljbG9uaW5nIG9mIHNoYWxsb3cgcmVwb3NpdG9yaWVzLgorCVNlZSAnR0lUX1RSQUNFJyBmb3IgYXZhaWxhYmxlIHRyYWNlIG91dHB1dCBvcHRpb25zLgorCitHSVRfTElURVJBTF9QQVRIU1BFQ1M6OgorCVNldHRpbmcgdGhpcyB2YXJpYWJsZSB0byBgMWAgd2lsbCBjYXVzZSBHaXQgdG8gdHJlYXQgYWxsCisJcGF0aHNwZWNzIGxpdGVyYWxseSwgcmF0aGVyIHRoYW4gYXMgZ2xvYiBwYXR0ZXJucy4gRm9yIGV4YW1wbGUsCisJcnVubmluZyBgR0lUX0xJVEVSQUxfUEFUSFNQRUNTPTEgZ2l0IGxvZyAtLSAnKi5jJ2Agd2lsbCBzZWFyY2gKKwlmb3IgY29tbWl0cyB0aGF0IHRvdWNoIHRoZSBwYXRoIGAqLmNgLCBub3QgYW55IHBhdGhzIHRoYXQgdGhlCisJZ2xvYiBgKi5jYCBtYXRjaGVzLiBZb3UgbWlnaHQgd2FudCB0aGlzIGlmIHlvdSBhcmUgZmVlZGluZworCWxpdGVyYWwgcGF0aHMgdG8gR2l0IChlLmcuLCBwYXRocyBwcmV2aW91c2x5IGdpdmVuIHRvIHlvdSBieQorCWBnaXQgbHMtdHJlZWAsIGAtLXJhd2AgZGlmZiBvdXRwdXQsIGV0YykuCisKK0dJVF9HTE9CX1BBVEhTUEVDUzo6CisJU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGAxYCB3aWxsIGNhdXNlIEdpdCB0byB0cmVhdCBhbGwKKwlwYXRoc3BlY3MgYXMgZ2xvYiBwYXR0ZXJucyAoYWthICJnbG9iIiBtYWdpYykuCisKK0dJVF9OT0dMT0JfUEFUSFNQRUNTOjoKKwlTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gYDFgIHdpbGwgY2F1c2UgR2l0IHRvIHRyZWF0IGFsbAorCXBhdGhzcGVjcyBhcyBsaXRlcmFsIChha2EgImxpdGVyYWwiIG1hZ2ljKS4KKworR0lUX0lDQVNFX1BBVEhTUEVDUzo6CisJU2V0dGluZyB0aGlzIHZhcmlhYmxlIHRvIGAxYCB3aWxsIGNhdXNlIEdpdCB0byB0cmVhdCBhbGwKKwlwYXRoc3BlY3MgYXMgY2FzZS1pbnNlbnNpdGl2ZS4KKworJ0dJVF9SRUZMT0dfQUNUSU9OJzo6CisJV2hlbiBhIHJlZiBpcyB1cGRhdGVkLCByZWZsb2cgZW50cmllcyBhcmUgY3JlYXRlZCB0byBrZWVwCisJdHJhY2sgb2YgdGhlIHJlYXNvbiB3aHkgdGhlIHJlZiB3YXMgdXBkYXRlZCAod2hpY2ggaXMKKwl0eXBpY2FsbHkgdGhlIG5hbWUgb2YgdGhlIGhpZ2gtbGV2ZWwgY29tbWFuZCB0aGF0IHVwZGF0ZWQKKwl0aGUgcmVmKSwgaW4gYWRkaXRpb24gdG8gdGhlIG9sZCBhbmQgbmV3IHZhbHVlcyBvZiB0aGUgcmVmLgorCUEgc2NyaXB0ZWQgUG9yY2VsYWluIGNvbW1hbmQgY2FuIHVzZSBzZXRfcmVmbG9nX2FjdGlvbgorCWhlbHBlciBmdW5jdGlvbiBpbiBgZ2l0LXNoLXNldHVwYCB0byBzZXQgaXRzIG5hbWUgdG8gdGhpcworCXZhcmlhYmxlIHdoZW4gaXQgaXMgaW52b2tlZCBhcyB0aGUgdG9wIGxldmVsIGNvbW1hbmQgYnkgdGhlCisJZW5kIHVzZXIsIHRvIGJlIHJlY29yZGVkIGluIHRoZSBib2R5IG9mIHRoZSByZWZsb2cuCisKK2BHSVRfUkVGX1BBUkFOT0lBYDo6CisJSWYgc2V0IHRvIGAxYCwgaW5jbHVkZSBicm9rZW4gb3IgYmFkbHkgbmFtZWQgcmVmcyB3aGVuIGl0ZXJhdGluZworCW92ZXIgbGlzdHMgb2YgcmVmcy4gSW4gYSBub3JtYWwsIG5vbi1jb3JydXB0ZWQgcmVwb3NpdG9yeSwgdGhpcworCWRvZXMgbm90aGluZy4gSG93ZXZlciwgZW5hYmxpbmcgaXQgbWF5IGhlbHAgZ2l0IHRvIGRldGVjdCBhbmQKKwlhYm9ydCBzb21lIG9wZXJhdGlvbnMgaW4gdGhlIHByZXNlbmNlIG9mIGJyb2tlbiByZWZzLiBHaXQgc2V0cworCXRoaXMgdmFyaWFibGUgYXV0b21hdGljYWxseSB3aGVuIHBlcmZvcm1pbmcgZGVzdHJ1Y3RpdmUKKwlvcGVyYXRpb25zIGxpa2UgbGlua2dpdDpnaXQtcHJ1bmVbMV0uIFlvdSBzaG91bGQgbm90IG5lZWQgdG8gc2V0CisJaXQgeW91cnNlbGYgdW5sZXNzIHlvdSB3YW50IHRvIGJlIHBhcmFub2lkIGFib3V0IG1ha2luZyBzdXJlCisJYW4gb3BlcmF0aW9uIGhhcyB0b3VjaGVkIGV2ZXJ5IHJlZiAoZS5nLiwgYmVjYXVzZSB5b3UgYXJlCisJY2xvbmluZyBhIHJlcG9zaXRvcnkgdG8gbWFrZSBhIGJhY2t1cCkuCisKK2BHSVRfQUxMT1dfUFJPVE9DT0xgOjoKKwlJZiBzZXQsIHByb3ZpZGUgYSBjb2xvbi1zZXBhcmF0ZWQgbGlzdCBvZiBwcm90b2NvbHMgd2hpY2ggYXJlCisJYWxsb3dlZCB0byBiZSB1c2VkIHdpdGggZmV0Y2gvcHVzaC9jbG9uZS4gVGhpcyBpcyB1c2VmdWwgdG8KKwlyZXN0cmljdCByZWN1cnNpdmUgc3VibW9kdWxlIGluaXRpYWxpemF0aW9uIGZyb20gYW4gdW50cnVzdGVkCisJcmVwb3NpdG9yeS4gQW55IHByb3RvY29sIG5vdCBtZW50aW9uZWQgd2lsbCBiZSBkaXNhbGxvd2VkIChpLmUuLAorCXRoaXMgaXMgYSB3aGl0ZWxpc3QsIG5vdCBhIGJsYWNrbGlzdCkuIElmIHRoZSB2YXJpYWJsZSBpcyBub3QKKwlzZXQgYXQgYWxsLCBhbGwgcHJvdG9jb2xzIGFyZSBlbmFibGVkLiAgVGhlIHByb3RvY29sIG5hbWVzCisJY3VycmVudGx5IHVzZWQgYnkgZ2l0IGFyZToKKworCSAgLSBgZmlsZWA6IGFueSBsb2NhbCBmaWxlLWJhc2VkIHBhdGggKGluY2x1ZGluZyBgZmlsZTovL2AgVVJMcywKKwkgICAgb3IgbG9jYWwgcGF0aHMpCisKKwkgIC0gYGdpdGA6IHRoZSBhbm9ueW1vdXMgZ2l0IHByb3RvY29sIG92ZXIgYSBkaXJlY3QgVENQCisJICAgIGNvbm5lY3Rpb24gKG9yIHByb3h5LCBpZiBjb25maWd1cmVkKQorCisJICAtIGBzc2hgOiBnaXQgb3ZlciBzc2ggKGluY2x1ZGluZyBgaG9zdDpwYXRoYCBzeW50YXgsCisJICAgIGBnaXQrc3NoOi8vYCwgZXRjKS4KKworCSAgLSBgcnN5bmNgOiBnaXQgb3ZlciByc3luYworCisJICAtIGBodHRwYDogZ2l0IG92ZXIgaHR0cCwgYm90aCAic21hcnQgaHR0cCIgYW5kICJkdW1iIGh0dHAiLgorCSAgICBOb3RlIHRoYXQgdGhpcyBkb2VzIF9ub3RfIGluY2x1ZGUgYGh0dHBzYDsgaWYgeW91IHdhbnQgYm90aCwKKwkgICAgeW91IHNob3VsZCBzcGVjaWZ5IGJvdGggYXMgYGh0dHA6aHR0cHNgLgorCisJICAtIGFueSBleHRlcm5hbCBoZWxwZXJzIGFyZSBuYW1lZCBieSB0aGVpciBwcm90b2NvbCAoZS5nLiwgdXNlCisJICAgIGBoZ2AgdG8gYWxsb3cgdGhlIGBnaXQtcmVtb3RlLWhnYCBoZWxwZXIpCisKKworRGlzY3Vzc2lvbltbRGlzY3Vzc2lvbl1dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9yZSBkZXRhaWwgb24gdGhlIGZvbGxvd2luZyBpcyBhdmFpbGFibGUgZnJvbSB0aGUKK2xpbms6dXNlci1tYW51YWwuaHRtbCNnaXQtY29uY2VwdHNbR2l0IGNvbmNlcHRzIGNoYXB0ZXIgb2YgdGhlCit1c2VyLW1hbnVhbF0gYW5kIGxpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XS4KKworQSBHaXQgcHJvamVjdCBub3JtYWxseSBjb25zaXN0cyBvZiBhIHdvcmtpbmcgZGlyZWN0b3J5IHdpdGggYSAiLmdpdCIKK3N1YmRpcmVjdG9yeSBhdCB0aGUgdG9wIGxldmVsLiAgVGhlIC5naXQgZGlyZWN0b3J5IGNvbnRhaW5zLCBhbW9uZyBvdGhlcgordGhpbmdzLCBhIGNvbXByZXNzZWQgb2JqZWN0IGRhdGFiYXNlIHJlcHJlc2VudGluZyB0aGUgY29tcGxldGUgaGlzdG9yeQorb2YgdGhlIHByb2plY3QsIGFuICJpbmRleCIgZmlsZSB3aGljaCBsaW5rcyB0aGF0IGhpc3RvcnkgdG8gdGhlIGN1cnJlbnQKK2NvbnRlbnRzIG9mIHRoZSB3b3JraW5nIHRyZWUsIGFuZCBuYW1lZCBwb2ludGVycyBpbnRvIHRoYXQgaGlzdG9yeSBzdWNoCithcyB0YWdzIGFuZCBicmFuY2ggaGVhZHMuCisKK1RoZSBvYmplY3QgZGF0YWJhc2UgY29udGFpbnMgb2JqZWN0cyBvZiB0aHJlZSBtYWluIHR5cGVzOiBibG9icywgd2hpY2gKK2hvbGQgZmlsZSBkYXRhOyB0cmVlcywgd2hpY2ggcG9pbnQgdG8gYmxvYnMgYW5kIG90aGVyIHRyZWVzIHRvIGJ1aWxkIHVwCitkaXJlY3RvcnkgaGllcmFyY2hpZXM7IGFuZCBjb21taXRzLCB3aGljaCBlYWNoIHJlZmVyZW5jZSBhIHNpbmdsZSB0cmVlCithbmQgc29tZSBudW1iZXIgb2YgcGFyZW50IGNvbW1pdHMuCisKK1RoZSBjb21taXQsIGVxdWl2YWxlbnQgdG8gd2hhdCBvdGhlciBzeXN0ZW1zIGNhbGwgYSAiY2hhbmdlc2V0IiBvcgorInZlcnNpb24iLCByZXByZXNlbnRzIGEgc3RlcCBpbiB0aGUgcHJvamVjdCdzIGhpc3RvcnksIGFuZCBlYWNoIHBhcmVudAorcmVwcmVzZW50cyBhbiBpbW1lZGlhdGVseSBwcmVjZWRpbmcgc3RlcC4gIENvbW1pdHMgd2l0aCBtb3JlIHRoYW4gb25lCitwYXJlbnQgcmVwcmVzZW50IG1lcmdlcyBvZiBpbmRlcGVuZGVudCBsaW5lcyBvZiBkZXZlbG9wbWVudC4KKworQWxsIG9iamVjdHMgYXJlIG5hbWVkIGJ5IHRoZSBTSEEtMSBoYXNoIG9mIHRoZWlyIGNvbnRlbnRzLCBub3JtYWxseQord3JpdHRlbiBhcyBhIHN0cmluZyBvZiA0MCBoZXggZGlnaXRzLiAgU3VjaCBuYW1lcyBhcmUgZ2xvYmFsbHkgdW5pcXVlLgorVGhlIGVudGlyZSBoaXN0b3J5IGxlYWRpbmcgdXAgdG8gYSBjb21taXQgY2FuIGJlIHZvdWNoZWQgZm9yIGJ5IHNpZ25pbmcKK2p1c3QgdGhhdCBjb21taXQuICBBIGZvdXJ0aCBvYmplY3QgdHlwZSwgdGhlIHRhZywgaXMgcHJvdmlkZWQgZm9yIHRoaXMKK3B1cnBvc2UuCisKK1doZW4gZmlyc3QgY3JlYXRlZCwgb2JqZWN0cyBhcmUgc3RvcmVkIGluIGluZGl2aWR1YWwgZmlsZXMsIGJ1dCBmb3IKK2VmZmljaWVuY3kgbWF5IGxhdGVyIGJlIGNvbXByZXNzZWQgdG9nZXRoZXIgaW50byAicGFjayBmaWxlcyIuCisKK05hbWVkIHBvaW50ZXJzIGNhbGxlZCByZWZzIG1hcmsgaW50ZXJlc3RpbmcgcG9pbnRzIGluIGhpc3RvcnkuICBBIHJlZgorbWF5IGNvbnRhaW4gdGhlIFNIQS0xIG5hbWUgb2YgYW4gb2JqZWN0IG9yIHRoZSBuYW1lIG9mIGFub3RoZXIgcmVmLiAgUmVmcword2l0aCBuYW1lcyBiZWdpbm5pbmcgYHJlZi9oZWFkL2AgY29udGFpbiB0aGUgU0hBLTEgbmFtZSBvZiB0aGUgbW9zdAorcmVjZW50IGNvbW1pdCAob3IgImhlYWQiKSBvZiBhIGJyYW5jaCB1bmRlciBkZXZlbG9wbWVudC4gIFNIQS0xIG5hbWVzIG9mCit0YWdzIG9mIGludGVyZXN0IGFyZSBzdG9yZWQgdW5kZXIgYHJlZi90YWdzL2AuICBBIHNwZWNpYWwgcmVmIG5hbWVkCitgSEVBRGAgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2guCisKK1RoZSBpbmRleCBmaWxlIGlzIGluaXRpYWxpemVkIHdpdGggYSBsaXN0IG9mIGFsbCBwYXRocyBhbmQsIGZvciBlYWNoCitwYXRoLCBhIGJsb2Igb2JqZWN0IGFuZCBhIHNldCBvZiBhdHRyaWJ1dGVzLiAgVGhlIGJsb2Igb2JqZWN0IHJlcHJlc2VudHMKK3RoZSBjb250ZW50cyBvZiB0aGUgZmlsZSBhcyBvZiB0aGUgaGVhZCBvZiB0aGUgY3VycmVudCBicmFuY2guICBUaGUKK2F0dHJpYnV0ZXMgKGxhc3QgbW9kaWZpZWQgdGltZSwgc2l6ZSwgZXRjLikgYXJlIHRha2VuIGZyb20gdGhlCitjb3JyZXNwb25kaW5nIGZpbGUgaW4gdGhlIHdvcmtpbmcgdHJlZS4gIFN1YnNlcXVlbnQgY2hhbmdlcyB0byB0aGUKK3dvcmtpbmcgdHJlZSBjYW4gYmUgZm91bmQgYnkgY29tcGFyaW5nIHRoZXNlIGF0dHJpYnV0ZXMuICBUaGUgaW5kZXggbWF5CitiZSB1cGRhdGVkIHdpdGggbmV3IGNvbnRlbnQsIGFuZCBuZXcgY29tbWl0cyBtYXkgYmUgY3JlYXRlZCBmcm9tIHRoZQorY29udGVudCBzdG9yZWQgaW4gdGhlIGluZGV4LgorCitUaGUgaW5kZXggaXMgYWxzbyBjYXBhYmxlIG9mIHN0b3JpbmcgbXVsdGlwbGUgZW50cmllcyAoY2FsbGVkICJzdGFnZXMiKQorZm9yIGEgZ2l2ZW4gcGF0aG5hbWUuICBUaGVzZSBzdGFnZXMgYXJlIHVzZWQgdG8gaG9sZCB0aGUgdmFyaW91cwordW5tZXJnZWQgdmVyc2lvbiBvZiBhIGZpbGUgd2hlbiBhIG1lcmdlIGlzIGluIHByb2dyZXNzLgorCitGVVJUSEVSIERPQ1VNRU5UQVRJT04KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgdGhlIHJlZmVyZW5jZXMgaW4gdGhlICJkZXNjcmlwdGlvbiIgc2VjdGlvbiB0byBnZXQgc3RhcnRlZAordXNpbmcgR2l0LiAgVGhlIGZvbGxvd2luZyBpcyBwcm9iYWJseSBtb3JlIGRldGFpbCB0aGFuIG5lY2Vzc2FyeQorZm9yIGEgZmlyc3QtdGltZSB1c2VyLgorCitUaGUgbGluazp1c2VyLW1hbnVhbC5odG1sI2dpdC1jb25jZXB0c1tHaXQgY29uY2VwdHMgY2hhcHRlciBvZiB0aGUKK3VzZXItbWFudWFsXSBhbmQgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddIGJvdGggcHJvdmlkZQoraW50cm9kdWN0aW9ucyB0byB0aGUgdW5kZXJseWluZyBHaXQgYXJjaGl0ZWN0dXJlLgorCitTZWUgbGlua2dpdDpnaXR3b3JrZmxvd3NbN10gZm9yIGFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cy4KKworU2VlIGFsc28gdGhlIGxpbms6aG93dG8taW5kZXguaHRtbFtob3d0b10gZG9jdW1lbnRzIGZvciBzb21lIHVzZWZ1bAorZXhhbXBsZXMuCisKK1RoZSBpbnRlcm5hbHMgYXJlIGRvY3VtZW50ZWQgaW4gdGhlCitsaW5rOnRlY2huaWNhbC9hcGktaW5kZXguaHRtbFtHaXQgQVBJIGRvY3VtZW50YXRpb25dLgorCitVc2VycyBtaWdyYXRpbmcgZnJvbSBDVlMgbWF5IGFsc28gd2FudCB0bworcmVhZCBsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10uCisKKworQXV0aG9ycworLS0tLS0tLQorR2l0IHdhcyBzdGFydGVkIGJ5IExpbnVzIFRvcnZhbGRzLCBhbmQgaXMgY3VycmVudGx5IG1haW50YWluZWQgYnkgSnVuaW8KK0MgSGFtYW5vLiBOdW1lcm91cyBjb250cmlidXRpb25zIGhhdmUgY29tZSBmcm9tIHRoZSBHaXQgbWFpbGluZyBsaXN0Cis8Z2l0QHZnZXIua2VybmVsLm9yZz4uICBodHRwOi8vd3d3Lm9wZW5odWIubmV0L3AvZ2l0L2NvbnRyaWJ1dG9ycy9zdW1tYXJ5CitnaXZlcyB5b3UgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2YgY29udHJpYnV0b3JzLgorCitJZiB5b3UgaGF2ZSBhIGNsb25lIG9mIGdpdC5naXQgaXRzZWxmLCB0aGUKK291dHB1dCBvZiBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBhbmQgbGlua2dpdDpnaXQtYmxhbWVbMV0gY2FuIHNob3cgeW91Cit0aGUgYXV0aG9ycyBmb3Igc3BlY2lmaWMgcGFydHMgb2YgdGhlIHByb2plY3QuCisKK1JlcG9ydGluZyBCdWdzCistLS0tLS0tLS0tLS0tLQorCitSZXBvcnQgYnVncyB0byB0aGUgR2l0IG1haWxpbmcgbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4gd2hlcmUgdGhlCitkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgaXMgcHJpbWFyaWx5IGRvbmUuICBZb3UgZG8gbm90IGhhdmUgdG8gYmUKK3N1YnNjcmliZWQgdG8gdGhlIGxpc3QgdG8gc2VuZCBhIG1lc3NhZ2UgdGhlcmUuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwgbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRldmVyeWRheVs3XSwgbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwgbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRjbGlbN10sIGxpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdLAorbGlua2dpdDpnaXR3b3JrZmxvd3NbN10KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGF0dHJpYnV0ZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2IxZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRhdHRyaWJ1dGVzLnR4dApAQCAtMCwwICsxLDEwMDUgQEAKK2dpdGF0dHJpYnV0ZXMoNSkKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0YXR0cmlidXRlcyAtIGRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgKKworU1lOT1BTSVMKKy0tLS0tLS0tCiskR0lUX0RJUi9pbmZvL2F0dHJpYnV0ZXMsIC5naXRhdHRyaWJ1dGVzCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0EgYGdpdGF0dHJpYnV0ZXNgIGZpbGUgaXMgYSBzaW1wbGUgdGV4dCBmaWxlIHRoYXQgZ2l2ZXMKK2BhdHRyaWJ1dGVzYCB0byBwYXRobmFtZXMuCisKK0VhY2ggbGluZSBpbiBgZ2l0YXR0cmlidXRlc2AgZmlsZSBpcyBvZiBmb3JtOgorCisJcGF0dGVybglhdHRyMSBhdHRyMiAuLi4KKworVGhhdCBpcywgYSBwYXR0ZXJuIGZvbGxvd2VkIGJ5IGFuIGF0dHJpYnV0ZXMgbGlzdCwKK3NlcGFyYXRlZCBieSB3aGl0ZXNwYWNlcy4gIFdoZW4gdGhlIHBhdHRlcm4gbWF0Y2hlcyB0aGUKK3BhdGggaW4gcXVlc3Rpb24sIHRoZSBhdHRyaWJ1dGVzIGxpc3RlZCBvbiB0aGUgbGluZSBhcmUgZ2l2ZW4gdG8KK3RoZSBwYXRoLgorCitFYWNoIGF0dHJpYnV0ZSBjYW4gYmUgaW4gb25lIG9mIHRoZXNlIHN0YXRlcyBmb3IgYSBnaXZlbiBwYXRoOgorCitTZXQ6OgorCisJVGhlIHBhdGggaGFzIHRoZSBhdHRyaWJ1dGUgd2l0aCBzcGVjaWFsIHZhbHVlICJ0cnVlIjsKKwl0aGlzIGlzIHNwZWNpZmllZCBieSBsaXN0aW5nIG9ubHkgdGhlIG5hbWUgb2YgdGhlCisJYXR0cmlidXRlIGluIHRoZSBhdHRyaWJ1dGUgbGlzdC4KKworVW5zZXQ6OgorCisJVGhlIHBhdGggaGFzIHRoZSBhdHRyaWJ1dGUgd2l0aCBzcGVjaWFsIHZhbHVlICJmYWxzZSI7CisJdGhpcyBpcyBzcGVjaWZpZWQgYnkgbGlzdGluZyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlCisJcHJlZml4ZWQgd2l0aCBhIGRhc2ggYC1gIGluIHRoZSBhdHRyaWJ1dGUgbGlzdC4KKworU2V0IHRvIGEgdmFsdWU6OgorCisJVGhlIHBhdGggaGFzIHRoZSBhdHRyaWJ1dGUgd2l0aCBzcGVjaWZpZWQgc3RyaW5nIHZhbHVlOworCXRoaXMgaXMgc3BlY2lmaWVkIGJ5IGxpc3RpbmcgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZQorCWZvbGxvd2VkIGJ5IGFuIGVxdWFsIHNpZ24gYD1gIGFuZCBpdHMgdmFsdWUgaW4gdGhlCisJYXR0cmlidXRlIGxpc3QuCisKK1Vuc3BlY2lmaWVkOjoKKworCU5vIHBhdHRlcm4gbWF0Y2hlcyB0aGUgcGF0aCwgYW5kIG5vdGhpbmcgc2F5cyBpZgorCXRoZSBwYXRoIGhhcyBvciBkb2VzIG5vdCBoYXZlIHRoZSBhdHRyaWJ1dGUsIHRoZQorCWF0dHJpYnV0ZSBmb3IgdGhlIHBhdGggaXMgc2FpZCB0byBiZSBVbnNwZWNpZmllZC4KKworV2hlbiBtb3JlIHRoYW4gb25lIHBhdHRlcm4gbWF0Y2hlcyB0aGUgcGF0aCwgYSBsYXRlciBsaW5lCitvdmVycmlkZXMgYW4gZWFybGllciBsaW5lLiAgVGhpcyBvdmVycmlkaW5nIGlzIGRvbmUgcGVyCithdHRyaWJ1dGUuICBUaGUgcnVsZXMgaG93IHRoZSBwYXR0ZXJuIG1hdGNoZXMgcGF0aHMgYXJlIHRoZQorc2FtZSBhcyBpbiBgLmdpdGlnbm9yZWAgZmlsZXM7IHNlZSBsaW5rZ2l0OmdpdGlnbm9yZVs1XS4KK1VubGlrZSBgLmdpdGlnbm9yZWAsIG5lZ2F0aXZlIHBhdHRlcm5zIGFyZSBmb3JiaWRkZW4uCisKK1doZW4gZGVjaWRpbmcgd2hhdCBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCB0byBhIHBhdGgsIEdpdAorY29uc3VsdHMgYCRHSVRfRElSL2luZm8vYXR0cmlidXRlc2AgZmlsZSAod2hpY2ggaGFzIHRoZSBoaWdoZXN0CitwcmVjZWRlbmNlKSwgYC5naXRhdHRyaWJ1dGVzYCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKK3BhdGggaW4gcXVlc3Rpb24sIGFuZCBpdHMgcGFyZW50IGRpcmVjdG9yaWVzIHVwIHRvIHRoZSB0b3BsZXZlbCBvZiB0aGUKK3dvcmsgdHJlZSAodGhlIGZ1cnRoZXIgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGAuZ2l0YXR0cmlidXRlc2AKK2lzIGZyb20gdGhlIHBhdGggaW4gcXVlc3Rpb24sIHRoZSBsb3dlciBpdHMgcHJlY2VkZW5jZSkuIEZpbmFsbHkKK2dsb2JhbCBhbmQgc3lzdGVtLXdpZGUgZmlsZXMgYXJlIGNvbnNpZGVyZWQgKHRoZXkgaGF2ZSB0aGUgbG93ZXN0CitwcmVjZWRlbmNlKS4KKworV2hlbiB0aGUgYC5naXRhdHRyaWJ1dGVzYCBmaWxlIGlzIG1pc3NpbmcgZnJvbSB0aGUgd29yayB0cmVlLCB0aGUKK3BhdGggaW4gdGhlIGluZGV4IGlzIHVzZWQgYXMgYSBmYWxsLWJhY2suICBEdXJpbmcgY2hlY2tvdXQgcHJvY2VzcywKK2AuZ2l0YXR0cmlidXRlc2AgaW4gdGhlIGluZGV4IGlzIHVzZWQgYW5kIHRoZW4gdGhlIGZpbGUgaW4gdGhlCit3b3JraW5nIHRyZWUgaXMgdXNlZCBhcyBhIGZhbGwtYmFjay4KKworSWYgeW91IHdpc2ggdG8gYWZmZWN0IG9ubHkgYSBzaW5nbGUgcmVwb3NpdG9yeSAoaS5lLiwgdG8gYXNzaWduCithdHRyaWJ1dGVzIHRvIGZpbGVzIHRoYXQgYXJlIHBhcnRpY3VsYXIgdG8KK29uZSB1c2VyJ3Mgd29ya2Zsb3cgZm9yIHRoYXQgcmVwb3NpdG9yeSksIHRoZW4KK2F0dHJpYnV0ZXMgc2hvdWxkIGJlIHBsYWNlZCBpbiB0aGUgYCRHSVRfRElSL2luZm8vYXR0cmlidXRlc2AgZmlsZS4KK0F0dHJpYnV0ZXMgd2hpY2ggc2hvdWxkIGJlIHZlcnNpb24tY29udHJvbGxlZCBhbmQgZGlzdHJpYnV0ZWQgdG8gb3RoZXIKK3JlcG9zaXRvcmllcyAoaS5lLiwgYXR0cmlidXRlcyBvZiBpbnRlcmVzdCB0byBhbGwgdXNlcnMpIHNob3VsZCBnbyBpbnRvCitgLmdpdGF0dHJpYnV0ZXNgIGZpbGVzLiBBdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGFmZmVjdCBhbGwgcmVwb3NpdG9yaWVzCitmb3IgYSBzaW5nbGUgdXNlciBzaG91bGQgYmUgcGxhY2VkIGluIGEgZmlsZSBzcGVjaWZpZWQgYnkgdGhlCitgY29yZS5hdHRyaWJ1dGVzRmlsZWAgY29uZmlndXJhdGlvbiBvcHRpb24gKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorSXRzIGRlZmF1bHQgdmFsdWUgaXMgJFhER19DT05GSUdfSE9NRS9naXQvYXR0cmlidXRlcy4gSWYgJFhER19DT05GSUdfSE9NRQoraXMgZWl0aGVyIG5vdCBzZXQgb3IgZW1wdHksICRIT01FLy5jb25maWcvZ2l0L2F0dHJpYnV0ZXMgaXMgdXNlZCBpbnN0ZWFkLgorQXR0cmlidXRlcyBmb3IgYWxsIHVzZXJzIG9uIGEgc3lzdGVtIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlCitgJChwcmVmaXgpL2V0Yy9naXRhdHRyaWJ1dGVzYCBmaWxlLgorCitTb21ldGltZXMgeW91IHdvdWxkIG5lZWQgdG8gb3ZlcnJpZGUgYW4gc2V0dGluZyBvZiBhbiBhdHRyaWJ1dGUKK2ZvciBhIHBhdGggdG8gYFVuc3BlY2lmaWVkYCBzdGF0ZS4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgbGlzdGluZwordGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uIHBvaW50IGAhYC4KKworCitFRkZFQ1RTCistLS0tLS0tCisKK0NlcnRhaW4gb3BlcmF0aW9ucyBieSBHaXQgY2FuIGJlIGluZmx1ZW5jZWQgYnkgYXNzaWduaW5nCitwYXJ0aWN1bGFyIGF0dHJpYnV0ZXMgdG8gYSBwYXRoLiAgQ3VycmVudGx5LCB0aGUgZm9sbG93aW5nCitvcGVyYXRpb25zIGFyZSBhdHRyaWJ1dGVzLWF3YXJlLgorCitDaGVja2luZy1vdXQgYW5kIGNoZWNraW5nLWluCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZXNlIGF0dHJpYnV0ZXMgYWZmZWN0IGhvdyB0aGUgY29udGVudHMgc3RvcmVkIGluIHRoZQorcmVwb3NpdG9yeSBhcmUgY29waWVkIHRvIHRoZSB3b3JraW5nIHRyZWUgZmlsZXMgd2hlbiBjb21tYW5kcworc3VjaCBhcyAnZ2l0IGNoZWNrb3V0JyBhbmQgJ2dpdCBtZXJnZScgcnVuLiAgVGhleSBhbHNvIGFmZmVjdCBob3cKK0dpdCBzdG9yZXMgdGhlIGNvbnRlbnRzIHlvdSBwcmVwYXJlIGluIHRoZSB3b3JraW5nIHRyZWUgaW4gdGhlCityZXBvc2l0b3J5IHVwb24gJ2dpdCBhZGQnIGFuZCAnZ2l0IGNvbW1pdCcuCisKK2B0ZXh0YAorXl5eXl5eCisKK1RoaXMgYXR0cmlidXRlIGVuYWJsZXMgYW5kIGNvbnRyb2xzIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24uICBXaGVuIGEKK3RleHQgZmlsZSBpcyBub3JtYWxpemVkLCBpdHMgbGluZSBlbmRpbmdzIGFyZSBjb252ZXJ0ZWQgdG8gTEYgaW4gdGhlCityZXBvc2l0b3J5LiAgVG8gY29udHJvbCB3aGF0IGxpbmUgZW5kaW5nIHN0eWxlIGlzIHVzZWQgaW4gdGhlIHdvcmtpbmcKK2RpcmVjdG9yeSwgdXNlIHRoZSBgZW9sYCBhdHRyaWJ1dGUgZm9yIGEgc2luZ2xlIGZpbGUgYW5kIHRoZQorYGNvcmUuZW9sYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvciBhbGwgdGV4dCBmaWxlcy4KKworU2V0OjoKKworCVNldHRpbmcgdGhlIGB0ZXh0YCBhdHRyaWJ1dGUgb24gYSBwYXRoIGVuYWJsZXMgZW5kLW9mLWxpbmUKKwlub3JtYWxpemF0aW9uIGFuZCBtYXJrcyB0aGUgcGF0aCBhcyBhIHRleHQgZmlsZS4gIEVuZC1vZi1saW5lCisJY29udmVyc2lvbiB0YWtlcyBwbGFjZSB3aXRob3V0IGd1ZXNzaW5nIHRoZSBjb250ZW50IHR5cGUuCisKK1Vuc2V0OjoKKworCVVuc2V0dGluZyB0aGUgYHRleHRgIGF0dHJpYnV0ZSBvbiBhIHBhdGggdGVsbHMgR2l0IG5vdCB0bworCWF0dGVtcHQgYW55IGVuZC1vZi1saW5lIGNvbnZlcnNpb24gdXBvbiBjaGVja2luIG9yIGNoZWNrb3V0LgorCitTZXQgdG8gc3RyaW5nIHZhbHVlICJhdXRvIjo6CisKKwlXaGVuIGB0ZXh0YCBpcyBzZXQgdG8gImF1dG8iLCB0aGUgcGF0aCBpcyBtYXJrZWQgZm9yIGF1dG9tYXRpYworCWVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24uICBJZiBHaXQgZGVjaWRlcyB0aGF0IHRoZSBjb250ZW50IGlzCisJdGV4dCwgaXRzIGxpbmUgZW5kaW5ncyBhcmUgbm9ybWFsaXplZCB0byBMRiBvbiBjaGVja2luLgorCitVbnNwZWNpZmllZDo6CisKKwlJZiB0aGUgYHRleHRgIGF0dHJpYnV0ZSBpcyB1bnNwZWNpZmllZCwgR2l0IHVzZXMgdGhlCisJYGNvcmUuYXV0b2NybGZgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8gZGV0ZXJtaW5lIGlmIHRoZQorCWZpbGUgc2hvdWxkIGJlIGNvbnZlcnRlZC4KKworQW55IG90aGVyIHZhbHVlIGNhdXNlcyBHaXQgdG8gYWN0IGFzIGlmIGB0ZXh0YCBoYXMgYmVlbiBsZWZ0Cit1bnNwZWNpZmllZC4KKworYGVvbGAKK15eXl5eCisKK1RoaXMgYXR0cmlidXRlIHNldHMgYSBzcGVjaWZpYyBsaW5lLWVuZGluZyBzdHlsZSB0byBiZSB1c2VkIGluIHRoZQord29ya2luZyBkaXJlY3RvcnkuICBJdCBlbmFibGVzIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24gd2l0aG91dCBhbnkKK2NvbnRlbnQgY2hlY2tzLCBlZmZlY3RpdmVseSBzZXR0aW5nIHRoZSBgdGV4dGAgYXR0cmlidXRlLgorCitTZXQgdG8gc3RyaW5nIHZhbHVlICJjcmxmIjo6CisKKwlUaGlzIHNldHRpbmcgZm9yY2VzIEdpdCB0byBub3JtYWxpemUgbGluZSBlbmRpbmdzIGZvciB0aGlzCisJZmlsZSBvbiBjaGVja2luIGFuZCBjb252ZXJ0IHRoZW0gdG8gQ1JMRiB3aGVuIHRoZSBmaWxlIGlzCisJY2hlY2tlZCBvdXQuCisKK1NldCB0byBzdHJpbmcgdmFsdWUgImxmIjo6CisKKwlUaGlzIHNldHRpbmcgZm9yY2VzIEdpdCB0byBub3JtYWxpemUgbGluZSBlbmRpbmdzIHRvIExGIG9uCisJY2hlY2tpbiBhbmQgcHJldmVudHMgY29udmVyc2lvbiB0byBDUkxGIHdoZW4gdGhlIGZpbGUgaXMKKwljaGVja2VkIG91dC4KKworQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBgY3JsZmAgYXR0cmlidXRlCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgYGNybGZgIGF0dHJpYnV0ZSBpcyBpbnRlcnByZXRlZCBhcworZm9sbG93czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjcmxmCQl0ZXh0CistY3JsZgkJLXRleHQKK2NybGY9aW5wdXQJZW9sPWxmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRW5kLW9mLWxpbmUgY29udmVyc2lvbgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitXaGlsZSBHaXQgbm9ybWFsbHkgbGVhdmVzIGZpbGUgY29udGVudHMgYWxvbmUsIGl0IGNhbiBiZSBjb25maWd1cmVkIHRvCitub3JtYWxpemUgbGluZSBlbmRpbmdzIHRvIExGIGluIHRoZSByZXBvc2l0b3J5IGFuZCwgb3B0aW9uYWxseSwgdG8KK2NvbnZlcnQgdGhlbSB0byBDUkxGIHdoZW4gZmlsZXMgYXJlIGNoZWNrZWQgb3V0LgorCitIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCB3aWxsIG1ha2UgR2l0IG5vcm1hbGl6ZSAudHh0LCAudmNwcm9qIGFuZCAuc2gKK2ZpbGVzLCBlbnN1cmUgdGhhdCAudmNwcm9qIGZpbGVzIGhhdmUgQ1JMRiBhbmQgLnNoIGZpbGVzIGhhdmUgTEYgaW4KK3RoZSB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHByZXZlbnQgLmpwZyBmaWxlcyBmcm9tIGJlaW5nIG5vcm1hbGl6ZWQKK3JlZ2FyZGxlc3Mgb2YgdGhlaXIgY29udGVudC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLnR4dAkJdGV4dAorKi52Y3Byb2oJZW9sPWNybGYKKyouc2gJCWVvbD1sZgorKi5qcGcJCS10ZXh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3RoZXIgc291cmNlIGNvZGUgbWFuYWdlbWVudCBzeXN0ZW1zIG5vcm1hbGl6ZSBhbGwgdGV4dCBmaWxlcyBpbiB0aGVpcgorcmVwb3NpdG9yaWVzLCBhbmQgdGhlcmUgYXJlIHR3byB3YXlzIHRvIGVuYWJsZSBzaW1pbGFyIGF1dG9tYXRpYworbm9ybWFsaXphdGlvbiBpbiBHaXQuCisKK0lmIHlvdSBzaW1wbHkgd2FudCB0byBoYXZlIENSTEYgbGluZSBlbmRpbmdzIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkKK3JlZ2FyZGxlc3Mgb2YgdGhlIHJlcG9zaXRvcnkgeW91IGFyZSB3b3JraW5nIHdpdGgsIHlvdSBjYW4gc2V0IHRoZQorY29uZmlnIHZhcmlhYmxlICJjb3JlLmF1dG9jcmxmIiB3aXRob3V0IGNoYW5naW5nIGFueSBhdHRyaWJ1dGVzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tjb3JlXQorCWF1dG9jcmxmID0gdHJ1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZG9lcyBub3QgZm9yY2Ugbm9ybWFsaXphdGlvbiBvZiBhbGwgdGV4dCBmaWxlcywgYnV0IGRvZXMgZW5zdXJlCit0aGF0IHRleHQgZmlsZXMgdGhhdCB5b3UgaW50cm9kdWNlIHRvIHRoZSByZXBvc2l0b3J5IGhhdmUgdGhlaXIgbGluZQorZW5kaW5ncyBub3JtYWxpemVkIHRvIExGIHdoZW4gdGhleSBhcmUgYWRkZWQsIGFuZCB0aGF0IGZpbGVzIHRoYXQgYXJlCithbHJlYWR5IG5vcm1hbGl6ZWQgaW4gdGhlIHJlcG9zaXRvcnkgc3RheSBub3JtYWxpemVkLgorCitJZiB5b3Ugd2FudCB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIHNvdXJjZSBjb2RlIG1hbmFnZW1lbnQgc3lzdGVtIHRoYXQKK2VuZm9yY2VzIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24sIG9yIHlvdSBzaW1wbHkgd2FudCBhbGwgdGV4dCBmaWxlcworaW4geW91ciByZXBvc2l0b3J5IHRvIGJlIG5vcm1hbGl6ZWQsIHlvdSBzaG91bGQgaW5zdGVhZCBzZXQgdGhlIGB0ZXh0YAorYXR0cmlidXRlIHRvICJhdXRvIiBmb3IgX2FsbF8gZmlsZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKgl0ZXh0PWF1dG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGVuc3VyZXMgdGhhdCBhbGwgZmlsZXMgdGhhdCBHaXQgY29uc2lkZXJzIHRvIGJlIHRleHQgd2lsbCBoYXZlCitub3JtYWxpemVkIChMRikgbGluZSBlbmRpbmdzIGluIHRoZSByZXBvc2l0b3J5LiAgVGhlIGBjb3JlLmVvbGAKK2NvbmZpZ3VyYXRpb24gdmFyaWFibGUgY29udHJvbHMgd2hpY2ggbGluZSBlbmRpbmdzIEdpdCB3aWxsIHVzZSBmb3IKK25vcm1hbGl6ZWQgZmlsZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeTsgdGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZQorbmF0aXZlIGxpbmUgZW5kaW5nIGZvciB5b3VyIHBsYXRmb3JtLCBvciBDUkxGIGlmIGBjb3JlLmF1dG9jcmxmYCBpcworc2V0LgorCitOT1RFOiBXaGVuIGB0ZXh0PWF1dG9gIG5vcm1hbGl6YXRpb24gaXMgZW5hYmxlZCBpbiBhbiBleGlzdGluZworcmVwb3NpdG9yeSwgYW55IHRleHQgZmlsZXMgY29udGFpbmluZyBDUkxGcyBzaG91bGQgYmUgbm9ybWFsaXplZC4gIElmCit0aGV5IGFyZSBub3QgdGhleSB3aWxsIGJlIG5vcm1hbGl6ZWQgdGhlIG5leHQgdGltZSBzb21lb25lIHRyaWVzIHRvCitjaGFuZ2UgdGhlbSwgY2F1c2luZyB1bmZvcnR1bmF0ZSBtaXNhdHRyaWJ1dGlvbi4gIEZyb20gYSBjbGVhbiB3b3JraW5nCitkaXJlY3Rvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZWNobyAiKiB0ZXh0PWF1dG8iID4+LmdpdGF0dHJpYnV0ZXMKKyQgcm0gLmdpdC9pbmRleCAgICAgIyBSZW1vdmUgdGhlIGluZGV4IHRvIGZvcmNlIEdpdCB0bworJCBnaXQgcmVzZXQgICAgICAgICAjIHJlLXNjYW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5CiskIGdpdCBzdGF0dXMgICAgICAgICMgU2hvdyBmaWxlcyB0aGF0IHdpbGwgYmUgbm9ybWFsaXplZAorJCBnaXQgYWRkIC11CiskIGdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMKKyQgZ2l0IGNvbW1pdCAtbSAiSW50cm9kdWNlIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGFueSBmaWxlcyB0aGF0IHNob3VsZCBub3QgYmUgbm9ybWFsaXplZCBzaG93IHVwIGluICdnaXQgc3RhdHVzJywKK3Vuc2V0IHRoZWlyIGB0ZXh0YCBhdHRyaWJ1dGUgYmVmb3JlIHJ1bm5pbmcgJ2dpdCBhZGQgLXUnLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21hbnVhbC5wZGYJLXRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb252ZXJzZWx5LCB0ZXh0IGZpbGVzIHRoYXQgR2l0IGRvZXMgbm90IGRldGVjdCBjYW4gaGF2ZSBub3JtYWxpemF0aW9uCitlbmFibGVkIG1hbnVhbGx5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dlaXJkY2hhcnMudHh0CXRleHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBgY29yZS5zYWZlY3JsZmAgaXMgc2V0IHRvICJ0cnVlIiBvciAid2FybiIsIEdpdCB2ZXJpZmllcyBpZgordGhlIGNvbnZlcnNpb24gaXMgcmV2ZXJzaWJsZSBmb3IgdGhlIGN1cnJlbnQgc2V0dGluZyBvZgorYGNvcmUuYXV0b2NybGZgLiAgRm9yICJ0cnVlIiwgR2l0IHJlamVjdHMgaXJyZXZlcnNpYmxlCitjb252ZXJzaW9uczsgZm9yICJ3YXJuIiwgR2l0IG9ubHkgcHJpbnRzIGEgd2FybmluZyBidXQgYWNjZXB0cworYW4gaXJyZXZlcnNpYmxlIGNvbnZlcnNpb24uICBUaGUgc2FmZXR5IHRyaWdnZXJzIHRvIHByZXZlbnQgc3VjaAorYSBjb252ZXJzaW9uIGRvbmUgdG8gdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIGJ1dCB0aGVyZSBhcmUgYQorZmV3IGV4Y2VwdGlvbnMuICBFdmVuIHRob3VnaC4uLgorCistICdnaXQgYWRkJyBpdHNlbGYgZG9lcyBub3QgdG91Y2ggdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIHRoZQorICBuZXh0IGNoZWNrb3V0IHdvdWxkLCBzbyB0aGUgc2FmZXR5IHRyaWdnZXJzOworCistICdnaXQgYXBwbHknIHRvIHVwZGF0ZSBhIHRleHQgZmlsZSB3aXRoIGEgcGF0Y2ggZG9lcyB0b3VjaCB0aGUgZmlsZXMKKyAgaW4gdGhlIHdvcmsgdHJlZSwgYnV0IHRoZSBvcGVyYXRpb24gaXMgYWJvdXQgdGV4dCBmaWxlcyBhbmQgQ1JMRgorICBjb252ZXJzaW9uIGlzIGFib3V0IGZpeGluZyB0aGUgbGluZSBlbmRpbmcgaW5jb25zaXN0ZW5jaWVzLCBzbyB0aGUKKyAgc2FmZXR5IGRvZXMgbm90IHRyaWdnZXI7CisKKy0gJ2dpdCBkaWZmJyBpdHNlbGYgZG9lcyBub3QgdG91Y2ggdGhlIGZpbGVzIGluIHRoZSB3b3JrIHRyZWUsIGl0IGlzCisgIG9mdGVuIHJ1biB0byBpbnNwZWN0IHRoZSBjaGFuZ2VzIHlvdSBpbnRlbmQgdG8gbmV4dCAnZ2l0IGFkZCcuICBUbworICBjYXRjaCBwb3RlbnRpYWwgcHJvYmxlbXMgZWFybHksIHNhZmV0eSB0cmlnZ2Vycy4KKworCitgaWRlbnRgCiteXl5eXl5eCisKK1doZW4gdGhlIGF0dHJpYnV0ZSBgaWRlbnRgIGlzIHNldCBmb3IgYSBwYXRoLCBHaXQgcmVwbGFjZXMKK2AkSWQkYCBpbiB0aGUgYmxvYiBvYmplY3Qgd2l0aCBgJElkOmAsIGZvbGxvd2VkIGJ5IHRoZQorNDAtY2hhcmFjdGVyIGhleGFkZWNpbWFsIGJsb2Igb2JqZWN0IG5hbWUsIGZvbGxvd2VkIGJ5IGEgZG9sbGFyCitzaWduIGAkYCB1cG9uIGNoZWNrb3V0LiAgQW55IGJ5dGUgc2VxdWVuY2UgdGhhdCBiZWdpbnMgd2l0aAorYCRJZDpgIGFuZCBlbmRzIHdpdGggYCRgIGluIHRoZSB3b3JrdHJlZSBmaWxlIGlzIHJlcGxhY2VkCit3aXRoIGAkSWQkYCB1cG9uIGNoZWNrLWluLgorCisKK2BmaWx0ZXJgCiteXl5eXl5eXgorCitBIGBmaWx0ZXJgIGF0dHJpYnV0ZSBjYW4gYmUgc2V0IHRvIGEgc3RyaW5nIHZhbHVlIHRoYXQgbmFtZXMgYQorZmlsdGVyIGRyaXZlciBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uCisKK0EgZmlsdGVyIGRyaXZlciBjb25zaXN0cyBvZiBhIGBjbGVhbmAgY29tbWFuZCBhbmQgYSBgc211ZGdlYAorY29tbWFuZCwgZWl0aGVyIG9mIHdoaWNoIGNhbiBiZSBsZWZ0IHVuc3BlY2lmaWVkLiAgVXBvbgorY2hlY2tvdXQsIHdoZW4gdGhlIGBzbXVkZ2VgIGNvbW1hbmQgaXMgc3BlY2lmaWVkLCB0aGUgY29tbWFuZCBpcworZmVkIHRoZSBibG9iIG9iamVjdCBmcm9tIGl0cyBzdGFuZGFyZCBpbnB1dCwgYW5kIGl0cyBzdGFuZGFyZAorb3V0cHV0IGlzIHVzZWQgdG8gdXBkYXRlIHRoZSB3b3JrdHJlZSBmaWxlLiAgU2ltaWxhcmx5LCB0aGUKK2BjbGVhbmAgY29tbWFuZCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIGNvbnRlbnRzIG9mIHdvcmt0cmVlIGZpbGUKK3Vwb24gY2hlY2tpbi4KKworT25lIHVzZSBvZiB0aGUgY29udGVudCBmaWx0ZXJpbmcgaXMgdG8gbWFzc2FnZSB0aGUgY29udGVudCBpbnRvIGEgc2hhcGUKK3RoYXQgaXMgbW9yZSBjb252ZW5pZW50IGZvciB0aGUgcGxhdGZvcm0sIGZpbGVzeXN0ZW0sIGFuZCB0aGUgdXNlciB0byB1c2UuCitGb3IgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbiwgdGhlIGtleSBwaHJhc2UgaGVyZSBpcyAibW9yZSBjb252ZW5pZW50IiBhbmQKK25vdCAidHVybmluZyBzb21ldGhpbmcgdW51c2FibGUgaW50byB1c2FibGUiLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBpbnRlbnQKK2lzIHRoYXQgaWYgc29tZW9uZSB1bnNldHMgdGhlIGZpbHRlciBkcml2ZXIgZGVmaW5pdGlvbiwgb3IgZG9lcyBub3QgaGF2ZQordGhlIGFwcHJvcHJpYXRlIGZpbHRlciBwcm9ncmFtLCB0aGUgcHJvamVjdCBzaG91bGQgc3RpbGwgYmUgdXNhYmxlLgorCitBbm90aGVyIHVzZSBvZiB0aGUgY29udGVudCBmaWx0ZXJpbmcgaXMgdG8gc3RvcmUgdGhlIGNvbnRlbnQgdGhhdCBjYW5ub3QKK2JlIGRpcmVjdGx5IHVzZWQgaW4gdGhlIHJlcG9zaXRvcnkgKGUuZy4gYSBVVUlEIHRoYXQgcmVmZXJzIHRvIHRoZSB0cnVlCitjb250ZW50IHN0b3JlZCBvdXRzaWRlIEdpdCwgb3IgYW4gZW5jcnlwdGVkIGNvbnRlbnQpIGFuZCB0dXJuIGl0IGludG8gYQordXNhYmxlIGZvcm0gdXBvbiBjaGVja291dCAoZS5nLiBkb3dubG9hZCB0aGUgZXh0ZXJuYWwgY29udGVudCwgb3IgZGVjcnlwdAordGhlIGVuY3J5cHRlZCBjb250ZW50KS4KKworVGhlc2UgdHdvIGZpbHRlcnMgYmVoYXZlIGRpZmZlcmVudGx5LCBhbmQgYnkgZGVmYXVsdCwgYSBmaWx0ZXIgaXMgdGFrZW4gYXMKK3RoZSBmb3JtZXIsIG1hc3NhZ2luZyB0aGUgY29udGVudHMgaW50byBtb3JlIGNvbnZlbmllbnQgc2hhcGUuICBBIG1pc3NpbmcKK2ZpbHRlciBkcml2ZXIgZGVmaW5pdGlvbiBpbiB0aGUgY29uZmlnLCBvciBhIGZpbHRlciBkcml2ZXIgdGhhdCBleGl0cyB3aXRoCithIG5vbi16ZXJvIHN0YXR1cywgaXMgbm90IGFuIGVycm9yIGJ1dCBtYWtlcyB0aGUgZmlsdGVyIGEgbm8tb3AgcGFzc3RocnUuCisKK1lvdSBjYW4gZGVjbGFyZSB0aGF0IGEgZmlsdGVyIHR1cm5zIGEgY29udGVudCB0aGF0IGJ5IGl0c2VsZiBpcyB1bnVzYWJsZQoraW50byBhIHVzYWJsZSBjb250ZW50IGJ5IHNldHRpbmcgdGhlIGZpbHRlci48ZHJpdmVyPi5yZXF1aXJlZCBjb25maWd1cmF0aW9uCit2YXJpYWJsZSB0byBgdHJ1ZWAuCisKK0ZvciBleGFtcGxlLCBpbiAuZ2l0YXR0cmlidXRlcywgeW91IHdvdWxkIGFzc2lnbiB0aGUgYGZpbHRlcmAKK2F0dHJpYnV0ZSBmb3IgcGF0aHMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi5jCWZpbHRlcj1pbmRlbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIHlvdSB3b3VsZCBkZWZpbmUgYSAiZmlsdGVyLmluZGVudC5jbGVhbiIgYW5kICJmaWx0ZXIuaW5kZW50LnNtdWRnZSIKK2NvbmZpZ3VyYXRpb24gaW4geW91ciAuZ2l0L2NvbmZpZyB0byBzcGVjaWZ5IGEgcGFpciBvZiBjb21tYW5kcyB0bworbW9kaWZ5IHRoZSBjb250ZW50cyBvZiBDIHByb2dyYW1zIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgY2hlY2tlZAoraW4gKCJjbGVhbiIgaXMgcnVuKSBhbmQgY2hlY2tlZCBvdXQgKG5vIGNoYW5nZSBpcyBtYWRlIGJlY2F1c2UgdGhlCitjb21tYW5kIGlzICJjYXQiKS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZmlsdGVyICJpbmRlbnQiXQorCWNsZWFuID0gaW5kZW50CisJc211ZGdlID0gY2F0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGJlc3QgcmVzdWx0cywgYGNsZWFuYCBzaG91bGQgbm90IGFsdGVyIGl0cyBvdXRwdXQgZnVydGhlciBpZiBpdCBpcworcnVuIHR3aWNlICgiY2xlYW4tPmNsZWFuIiBzaG91bGQgYmUgZXF1aXZhbGVudCB0byAiY2xlYW4iKSwgYW5kCittdWx0aXBsZSBgc211ZGdlYCBjb21tYW5kcyBzaG91bGQgbm90IGFsdGVyIGBjbGVhbmAncyBvdXRwdXQKKygic211ZGdlLT5zbXVkZ2UtPmNsZWFuIiBzaG91bGQgYmUgZXF1aXZhbGVudCB0byAiY2xlYW4iKS4gIFNlZSB0aGUKK3NlY3Rpb24gb24gbWVyZ2luZyBiZWxvdy4KKworVGhlICJpbmRlbnQiIGZpbHRlciBpcyB3ZWxsLWJlaGF2ZWQgaW4gdGhpcyByZWdhcmQ6IGl0IHdpbGwgbm90IG1vZGlmeQoraW5wdXQgdGhhdCBpcyBhbHJlYWR5IGNvcnJlY3RseSBpbmRlbnRlZC4gIEluIHRoaXMgY2FzZSwgdGhlIGxhY2sgb2YgYQorc211ZGdlIGZpbHRlciBtZWFucyB0aGF0IHRoZSBjbGVhbiBmaWx0ZXIgX211c3RfIGFjY2VwdCBpdHMgb3duIG91dHB1dAord2l0aG91dCBtb2RpZnlpbmcgaXQuCisKK0lmIGEgZmlsdGVyIF9tdXN0XyBzdWNjZWVkIGluIG9yZGVyIHRvIG1ha2UgdGhlIHN0b3JlZCBjb250ZW50cyB1c2FibGUsCit5b3UgY2FuIGRlY2xhcmUgdGhhdCB0aGUgZmlsdGVyIGlzIGByZXF1aXJlZGAsIGluIHRoZSBjb25maWd1cmF0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tmaWx0ZXIgImNyeXB0Il0KKwljbGVhbiA9IG9wZW5zc2wgZW5jIC4uLgorCXNtdWRnZSA9IG9wZW5zc2wgZW5jIC1kIC4uLgorCXJlcXVpcmVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VxdWVuY2UgIiVmIiBvbiB0aGUgZmlsdGVyIGNvbW1hbmQgbGluZSBpcyByZXBsYWNlZCB3aXRoIHRoZSBuYW1lIG9mCit0aGUgZmlsZSB0aGUgZmlsdGVyIGlzIHdvcmtpbmcgb24uICBBIGZpbHRlciBtaWdodCB1c2UgdGhpcyBpbiBrZXl3b3JkCitzdWJzdGl0dXRpb24uICBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZmlsdGVyICJwNCJdCisJY2xlYW4gPSBnaXQtcDQtZmlsdGVyIC0tY2xlYW4gJWYKKwlzbXVkZ2UgPSBnaXQtcDQtZmlsdGVyIC0tc211ZGdlICVmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitJbnRlcmFjdGlvbiBiZXR3ZWVuIGNoZWNraW4vY2hlY2tvdXQgYXR0cmlidXRlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworSW4gdGhlIGNoZWNrLWluIGNvZGVwYXRoLCB0aGUgd29ya3RyZWUgZmlsZSBpcyBmaXJzdCBjb252ZXJ0ZWQKK3dpdGggYGZpbHRlcmAgZHJpdmVyIChpZiBzcGVjaWZpZWQgYW5kIGNvcnJlc3BvbmRpbmcgZHJpdmVyCitkZWZpbmVkKSwgdGhlbiB0aGUgcmVzdWx0IGlzIHByb2Nlc3NlZCB3aXRoIGBpZGVudGAgKGlmCitzcGVjaWZpZWQpLCBhbmQgdGhlbiBmaW5hbGx5IHdpdGggYHRleHRgIChhZ2FpbiwgaWYgc3BlY2lmaWVkCithbmQgYXBwbGljYWJsZSkuCisKK0luIHRoZSBjaGVjay1vdXQgY29kZXBhdGgsIHRoZSBibG9iIGNvbnRlbnQgaXMgZmlyc3QgY29udmVydGVkCit3aXRoIGB0ZXh0YCwgYW5kIHRoZW4gYGlkZW50YCBhbmQgZmVkIHRvIGBmaWx0ZXJgLgorCisKK01lcmdpbmcgYnJhbmNoZXMgd2l0aCBkaWZmZXJpbmcgY2hlY2tpbi9jaGVja291dCBhdHRyaWJ1dGVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitJZiB5b3UgaGF2ZSBhZGRlZCBhdHRyaWJ1dGVzIHRvIGEgZmlsZSB0aGF0IGNhdXNlIHRoZSBjYW5vbmljYWwKK3JlcG9zaXRvcnkgZm9ybWF0IGZvciB0aGF0IGZpbGUgdG8gY2hhbmdlLCBzdWNoIGFzIGFkZGluZyBhCitjbGVhbi9zbXVkZ2UgZmlsdGVyIG9yIHRleHQvZW9sL2lkZW50IGF0dHJpYnV0ZXMsIG1lcmdpbmcgYW55dGhpbmcKK3doZXJlIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGluIHBsYWNlIHdvdWxkIG5vcm1hbGx5IGNhdXNlIG1lcmdlCitjb25mbGljdHMuCisKK1RvIHByZXZlbnQgdGhlc2UgdW5uZWNlc3NhcnkgbWVyZ2UgY29uZmxpY3RzLCBHaXQgY2FuIGJlIHRvbGQgdG8gcnVuIGEKK3ZpcnR1YWwgY2hlY2stb3V0IGFuZCBjaGVjay1pbiBvZiBhbGwgdGhyZWUgc3RhZ2VzIG9mIGEgZmlsZSB3aGVuCityZXNvbHZpbmcgYSB0aHJlZS13YXkgbWVyZ2UgYnkgc2V0dGluZyB0aGUgYG1lcmdlLnJlbm9ybWFsaXplYAorY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIFRoaXMgcHJldmVudHMgY2hhbmdlcyBjYXVzZWQgYnkgY2hlY2staW4KK2NvbnZlcnNpb24gZnJvbSBjYXVzaW5nIHNwdXJpb3VzIG1lcmdlIGNvbmZsaWN0cyB3aGVuIGEgY29udmVydGVkIGZpbGUKK2lzIG1lcmdlZCB3aXRoIGFuIHVuY29udmVydGVkIGZpbGUuCisKK0FzIGxvbmcgYXMgYSAic211ZGdlLT5jbGVhbiIgcmVzdWx0cyBpbiB0aGUgc2FtZSBvdXRwdXQgYXMgYSAiY2xlYW4iCitldmVuIG9uIGZpbGVzIHRoYXQgYXJlIGFscmVhZHkgc211ZGdlZCwgdGhpcyBzdHJhdGVneSB3aWxsCithdXRvbWF0aWNhbGx5IHJlc29sdmUgYWxsIGZpbHRlci1yZWxhdGVkIGNvbmZsaWN0cy4gIEZpbHRlcnMgdGhhdCBkbworbm90IGFjdCBpbiB0aGlzIHdheSBtYXkgY2F1c2UgYWRkaXRpb25hbCBtZXJnZSBjb25mbGljdHMgdGhhdCBtdXN0IGJlCityZXNvbHZlZCBtYW51YWxseS4KKworCitHZW5lcmF0aW5nIGRpZmYgdGV4dAorfn5+fn5+fn5+fn5+fn5+fn5+fn4KKworYGRpZmZgCiteXl5eXl4KKworVGhlIGF0dHJpYnV0ZSBgZGlmZmAgYWZmZWN0cyBob3cgR2l0IGdlbmVyYXRlcyBkaWZmcyBmb3IgcGFydGljdWxhcgorZmlsZXMuIEl0IGNhbiB0ZWxsIEdpdCB3aGV0aGVyIHRvIGdlbmVyYXRlIGEgdGV4dHVhbCBwYXRjaCBmb3IgdGhlIHBhdGgKK29yIHRvIHRyZWF0IHRoZSBwYXRoIGFzIGEgYmluYXJ5IGZpbGUuICBJdCBjYW4gYWxzbyBhZmZlY3Qgd2hhdCBsaW5lIGlzCitzaG93biBvbiB0aGUgaHVuayBoZWFkZXIgYEBAIC1rLGwgK24sbSBAQGAgbGluZSwgdGVsbCBHaXQgdG8gdXNlIGFuCitleHRlcm5hbCBjb21tYW5kIHRvIGdlbmVyYXRlIHRoZSBkaWZmLCBvciBhc2sgR2l0IHRvIGNvbnZlcnQgYmluYXJ5CitmaWxlcyB0byBhIHRleHQgZm9ybWF0IGJlZm9yZSBnZW5lcmF0aW5nIHRoZSBkaWZmLgorCitTZXQ6OgorCisJQSBwYXRoIHRvIHdoaWNoIHRoZSBgZGlmZmAgYXR0cmlidXRlIGlzIHNldCBpcyB0cmVhdGVkCisJYXMgdGV4dCwgZXZlbiB3aGVuIHRoZXkgY29udGFpbiBieXRlIHZhbHVlcyB0aGF0CisJbm9ybWFsbHkgbmV2ZXIgYXBwZWFyIGluIHRleHQgZmlsZXMsIHN1Y2ggYXMgTlVMLgorCitVbnNldDo6CisKKwlBIHBhdGggdG8gd2hpY2ggdGhlIGBkaWZmYCBhdHRyaWJ1dGUgaXMgdW5zZXQgd2lsbAorCWdlbmVyYXRlIGBCaW5hcnkgZmlsZXMgZGlmZmVyYCAob3IgYSBiaW5hcnkgcGF0Y2gsIGlmCisJYmluYXJ5IHBhdGNoZXMgYXJlIGVuYWJsZWQpLgorCitVbnNwZWNpZmllZDo6CisKKwlBIHBhdGggdG8gd2hpY2ggdGhlIGBkaWZmYCBhdHRyaWJ1dGUgaXMgdW5zcGVjaWZpZWQKKwlmaXJzdCBnZXRzIGl0cyBjb250ZW50cyBpbnNwZWN0ZWQsIGFuZCBpZiBpdCBsb29rcyBsaWtlCisJdGV4dCBhbmQgaXMgc21hbGxlciB0aGFuIGNvcmUuYmlnRmlsZVRocmVzaG9sZCwgaXQgaXMgdHJlYXRlZAorCWFzIHRleHQuIE90aGVyd2lzZSBpdCB3b3VsZCBnZW5lcmF0ZSBgQmluYXJ5IGZpbGVzIGRpZmZlcmAuCisKK1N0cmluZzo6CisKKwlEaWZmIGlzIHNob3duIHVzaW5nIHRoZSBzcGVjaWZpZWQgZGlmZiBkcml2ZXIuICBFYWNoIGRyaXZlciBtYXkKKwlzcGVjaWZ5IG9uZSBvciBtb3JlIG9wdGlvbnMsIGFzIGRlc2NyaWJlZCBpbiB0aGUgZm9sbG93aW5nCisJc2VjdGlvbi4gVGhlIG9wdGlvbnMgZm9yIHRoZSBkaWZmIGRyaXZlciAiZm9vIiBhcmUgZGVmaW5lZAorCWJ5IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBpbiB0aGUgImRpZmYuZm9vIiBzZWN0aW9uIG9mIHRoZQorCUdpdCBjb25maWcgZmlsZS4KKworCitEZWZpbmluZyBhbiBleHRlcm5hbCBkaWZmIGRyaXZlcgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGRlZmluaXRpb24gb2YgYSBkaWZmIGRyaXZlciBpcyBkb25lIGluIGBnaXRjb25maWdgLCBub3QKK2BnaXRhdHRyaWJ1dGVzYCBmaWxlLCBzbyBzdHJpY3RseSBzcGVha2luZyB0aGlzIG1hbnVhbCBwYWdlIGlzIGEKK3dyb25nIHBsYWNlIHRvIHRhbGsgYWJvdXQgaXQuICBIb3dldmVyLi4uCisKK1RvIGRlZmluZSBhbiBleHRlcm5hbCBkaWZmIGRyaXZlciBgamNkaWZmYCwgYWRkIGEgc2VjdGlvbiB0byB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSkgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbZGlmZiAiamNkaWZmIl0KKwljb21tYW5kID0gai1jLWRpZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBHaXQgbmVlZHMgdG8gc2hvdyB5b3UgYSBkaWZmIGZvciB0aGUgcGF0aCB3aXRoIGBkaWZmYAorYXR0cmlidXRlIHNldCB0byBgamNkaWZmYCwgaXQgY2FsbHMgdGhlIGNvbW1hbmQgeW91IHNwZWNpZmllZAord2l0aCB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiwgaS5lLiBgai1jLWRpZmZgLCB3aXRoIDcKK3BhcmFtZXRlcnMsIGp1c3QgbGlrZSBgR0lUX0VYVEVSTkFMX0RJRkZgIHByb2dyYW0gaXMgY2FsbGVkLgorU2VlIGxpbmtnaXQ6Z2l0WzFdIGZvciBkZXRhaWxzLgorCisKK0RlZmluaW5nIGEgY3VzdG9tIGh1bmstaGVhZGVyCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitFYWNoIGdyb3VwIG9mIGNoYW5nZXMgKGNhbGxlZCBhICJodW5rIikgaW4gdGhlIHRleHR1YWwgZGlmZiBvdXRwdXQKK2lzIHByZWZpeGVkIHdpdGggYSBsaW5lIG9mIHRoZSBmb3JtOgorCisJQEAgLWssbCArbixtIEBAIFRFWFQKKworVGhpcyBpcyBjYWxsZWQgYSAnaHVuayBoZWFkZXInLiAgVGhlICJURVhUIiBwb3J0aW9uIGlzIGJ5IGRlZmF1bHQgYSBsaW5lCit0aGF0IGJlZ2lucyB3aXRoIGFuIGFscGhhYmV0LCBhbiB1bmRlcnNjb3JlIG9yIGEgZG9sbGFyIHNpZ247IHRoaXMKK21hdGNoZXMgd2hhdCBHTlUgJ2RpZmYgLXAnIG91dHB1dCB1c2VzLiAgVGhpcyBkZWZhdWx0IHNlbGVjdGlvbiBob3dldmVyCitpcyBub3Qgc3VpdGVkIGZvciBzb21lIGNvbnRlbnRzLCBhbmQgeW91IGNhbiB1c2UgYSBjdXN0b21pemVkIHBhdHRlcm4KK3RvIG1ha2UgYSBzZWxlY3Rpb24uCisKK0ZpcnN0LCBpbiAuZ2l0YXR0cmlidXRlcywgeW91IHdvdWxkIGFzc2lnbiB0aGUgYGRpZmZgIGF0dHJpYnV0ZQorZm9yIHBhdGhzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyoudGV4CWRpZmY9dGV4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlbiwgeW91IHdvdWxkIGRlZmluZSBhICJkaWZmLnRleC54ZnVuY25hbWUiIGNvbmZpZ3VyYXRpb24gdG8KK3NwZWNpZnkgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIGEgbGluZSB0aGF0IHlvdSB3b3VsZAord2FudCB0byBhcHBlYXIgYXMgdGhlIGh1bmsgaGVhZGVyICJURVhUIi4gQWRkIGEgc2VjdGlvbiB0byB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSkgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tkaWZmICJ0ZXgiXQorCXhmdW5jbmFtZSA9ICJeKFxcXFwoc3ViKSpzZWN0aW9uXFx7LiopJCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlLiAgQSBzaW5nbGUgbGV2ZWwgb2YgYmFja3NsYXNoZXMgYXJlIGVhdGVuIGJ5IHRoZQorY29uZmlndXJhdGlvbiBmaWxlIHBhcnNlciwgc28geW91IHdvdWxkIG5lZWQgdG8gZG91YmxlIHRoZQorYmFja3NsYXNoZXM7IHRoZSBwYXR0ZXJuIGFib3ZlIHBpY2tzIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoIGEKK2JhY2tzbGFzaCwgYW5kIHplcm8gb3IgbW9yZSBvY2N1cnJlbmNlcyBvZiBgc3ViYCBmb2xsb3dlZCBieQorYHNlY3Rpb25gIGZvbGxvd2VkIGJ5IG9wZW4gYnJhY2UsIHRvIHRoZSBlbmQgb2YgbGluZS4KKworVGhlcmUgYXJlIGEgZmV3IGJ1aWx0LWluIHBhdHRlcm5zIHRvIG1ha2UgdGhpcyBlYXNpZXIsIGFuZCBgdGV4YAoraXMgb25lIG9mIHRoZW0sIHNvIHlvdSBkbyBub3QgaGF2ZSB0byB3cml0ZSB0aGUgYWJvdmUgaW4geW91cgorY29uZmlndXJhdGlvbiBmaWxlICh5b3Ugc3RpbGwgbmVlZCB0byBlbmFibGUgdGhpcyB3aXRoIHRoZQorYXR0cmlidXRlIG1lY2hhbmlzbSwgdmlhIGAuZ2l0YXR0cmlidXRlc2ApLiAgVGhlIGZvbGxvd2luZyBidWlsdCBpbgorcGF0dGVybnMgYXJlIGF2YWlsYWJsZToKKworLSBgYWRhYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEFkYSBsYW5ndWFnZS4KKworLSBgYmlidGV4YCBzdWl0YWJsZSBmb3IgZmlsZXMgd2l0aCBCaWJUZVggY29kZWQgcmVmZXJlbmNlcy4KKworLSBgY3BwYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEMgYW5kIEMrKyBsYW5ndWFnZXMuCisKKy0gYGNzaGFycGAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBDIyBsYW5ndWFnZS4KKworLSBgZm9ydHJhbmAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBGb3J0cmFuIGxhbmd1YWdlLgorCistIGBmb3VudGFpbmAgc3VpdGFibGUgZm9yIEZvdW50YWluIGRvY3VtZW50cy4KKworLSBgaHRtbGAgc3VpdGFibGUgZm9yIEhUTUwvWEhUTUwgZG9jdW1lbnRzLgorCistIGBqYXZhYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIEphdmEgbGFuZ3VhZ2UuCisKKy0gYG1hdGxhYmAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBNQVRMQUIgbGFuZ3VhZ2UuCisKKy0gYG9iamNgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgT2JqZWN0aXZlLUMgbGFuZ3VhZ2UuCisKKy0gYHBhc2NhbGAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBQYXNjYWwvRGVscGhpIGxhbmd1YWdlLgorCistIGBwZXJsYCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgaW4gdGhlIFBlcmwgbGFuZ3VhZ2UuCisKKy0gYHBocGAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBQSFAgbGFuZ3VhZ2UuCisKKy0gYHB5dGhvbmAgc3VpdGFibGUgZm9yIHNvdXJjZSBjb2RlIGluIHRoZSBQeXRob24gbGFuZ3VhZ2UuCisKKy0gYHJ1YnlgIHN1aXRhYmxlIGZvciBzb3VyY2UgY29kZSBpbiB0aGUgUnVieSBsYW5ndWFnZS4KKworLSBgdGV4YCBzdWl0YWJsZSBmb3Igc291cmNlIGNvZGUgZm9yIExhVGVYIGRvY3VtZW50cy4KKworCitDdXN0b21pemluZyB3b3JkIGRpZmYKK15eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitZb3UgY2FuIGN1c3RvbWl6ZSB0aGUgcnVsZXMgdGhhdCBgZ2l0IGRpZmYgLS13b3JkLWRpZmZgIHVzZXMgdG8KK3NwbGl0IHdvcmRzIGluIGEgbGluZSwgYnkgc3BlY2lmeWluZyBhbiBhcHByb3ByaWF0ZSByZWd1bGFyIGV4cHJlc3Npb24KK2luIHRoZSAiZGlmZi4qLndvcmRSZWdleCIgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4gIEZvciBleGFtcGxlLCBpbiBUZVgKK2EgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGEgc2VxdWVuY2Ugb2YgbGV0dGVycyBmb3JtcyBhIGNvbW1hbmQsIGJ1dAorc2V2ZXJhbCBzdWNoIGNvbW1hbmRzIGNhbiBiZSBydW4gdG9nZXRoZXIgd2l0aG91dCBpbnRlcnZlbmluZword2hpdGVzcGFjZS4gIFRvIHNlcGFyYXRlIHRoZW0sIHVzZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSkgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tkaWZmICJ0ZXgiXQorCXdvcmRSZWdleCA9ICJcXFxcW2EtekEtWl0rfFt7fV18XFxcXC58W15cXHt9WzpzcGFjZTpdXSsiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBidWlsdC1pbiBwYXR0ZXJuIGlzIHByb3ZpZGVkIGZvciBhbGwgbGFuZ3VhZ2VzIGxpc3RlZCBpbiB0aGUKK3ByZXZpb3VzIHNlY3Rpb24uCisKKworUGVyZm9ybWluZyB0ZXh0IGRpZmZzIG9mIGJpbmFyeSBmaWxlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitTb21ldGltZXMgaXQgaXMgZGVzaXJhYmxlIHRvIHNlZSB0aGUgZGlmZiBvZiBhIHRleHQtY29udmVydGVkCit2ZXJzaW9uIG9mIHNvbWUgYmluYXJ5IGZpbGVzLiBGb3IgZXhhbXBsZSwgYSB3b3JkIHByb2Nlc3NvcgorZG9jdW1lbnQgY2FuIGJlIGNvbnZlcnRlZCB0byBhbiBBU0NJSSB0ZXh0IHJlcHJlc2VudGF0aW9uLCBhbmQKK3RoZSBkaWZmIG9mIHRoZSB0ZXh0IHNob3duLiBFdmVuIHRob3VnaCB0aGlzIGNvbnZlcnNpb24gbG9zZXMKK3NvbWUgaW5mb3JtYXRpb24sIHRoZSByZXN1bHRpbmcgZGlmZiBpcyB1c2VmdWwgZm9yIGh1bWFuCit2aWV3aW5nIChidXQgY2Fubm90IGJlIGFwcGxpZWQgZGlyZWN0bHkpLgorCitUaGUgYHRleHRjb252YCBjb25maWcgb3B0aW9uIGlzIHVzZWQgdG8gZGVmaW5lIGEgcHJvZ3JhbSBmb3IKK3BlcmZvcm1pbmcgc3VjaCBhIGNvbnZlcnNpb24uIFRoZSBwcm9ncmFtIHNob3VsZCB0YWtlIGEgc2luZ2xlCithcmd1bWVudCwgdGhlIG5hbWUgb2YgYSBmaWxlIHRvIGNvbnZlcnQsIGFuZCBwcm9kdWNlIHRoZQorcmVzdWx0aW5nIHRleHQgb24gc3Rkb3V0LgorCitGb3IgZXhhbXBsZSwgdG8gc2hvdyB0aGUgZGlmZiBvZiB0aGUgZXhpZiBpbmZvcm1hdGlvbiBvZiBhCitmaWxlIGluc3RlYWQgb2YgdGhlIGJpbmFyeSBpbmZvcm1hdGlvbiAoYXNzdW1pbmcgeW91IGhhdmUgdGhlCitleGlmIHRvb2wgaW5zdGFsbGVkKSwgYWRkIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiB0byB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2RpZmYgImpwZyJdCisJdGV4dGNvbnYgPSBleGlmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTk9URTogVGhlIHRleHQgY29udmVyc2lvbiBpcyBnZW5lcmFsbHkgYSBvbmUtd2F5IGNvbnZlcnNpb247CitpbiB0aGlzIGV4YW1wbGUsIHdlIGxvc2UgdGhlIGFjdHVhbCBpbWFnZSBjb250ZW50cyBhbmQgZm9jdXMKK2p1c3Qgb24gdGhlIHRleHQgZGF0YS4gVGhpcyBtZWFucyB0aGF0IGRpZmZzIGdlbmVyYXRlZCBieQordGV4dGNvbnYgYXJlIF9ub3RfIHN1aXRhYmxlIGZvciBhcHBseWluZy4gRm9yIHRoaXMgcmVhc29uLAorb25seSBgZ2l0IGRpZmZgIGFuZCB0aGUgYGdpdCBsb2dgIGZhbWlseSBvZiBjb21tYW5kcyAoaS5lLiwKK2xvZywgd2hhdGNoYW5nZWQsIHNob3cpIHdpbGwgcGVyZm9ybSB0ZXh0IGNvbnZlcnNpb24uIGBnaXQKK2Zvcm1hdC1wYXRjaGAgd2lsbCBuZXZlciBnZW5lcmF0ZSB0aGlzIG91dHB1dC4gSWYgeW91IHdhbnQgdG8KK3NlbmQgc29tZWJvZHkgYSB0ZXh0LWNvbnZlcnRlZCBkaWZmIG9mIGEgYmluYXJ5IGZpbGUgKGUuZy4sCitiZWNhdXNlIGl0IHF1aWNrbHkgY29udmV5cyB0aGUgY2hhbmdlcyB5b3UgaGF2ZSBtYWRlKSwgeW91CitzaG91bGQgZ2VuZXJhdGUgaXQgc2VwYXJhdGVseSBhbmQgc2VuZCBpdCBhcyBhIGNvbW1lbnQgX2luCithZGRpdGlvbiB0b18gdGhlIHVzdWFsIGJpbmFyeSBkaWZmIHRoYXQgeW91IG1pZ2h0IHNlbmQuCisKK0JlY2F1c2UgdGV4dCBjb252ZXJzaW9uIGNhbiBiZSBzbG93LCBlc3BlY2lhbGx5IHdoZW4gZG9pbmcgYQorbGFyZ2UgbnVtYmVyIG9mIHRoZW0gd2l0aCBgZ2l0IGxvZyAtcGAsIEdpdCBwcm92aWRlcyBhIG1lY2hhbmlzbQordG8gY2FjaGUgdGhlIG91dHB1dCBhbmQgdXNlIGl0IGluIGZ1dHVyZSBkaWZmcy4gIFRvIGVuYWJsZQorY2FjaGluZywgc2V0IHRoZSAiY2FjaGV0ZXh0Y29udiIgdmFyaWFibGUgaW4geW91ciBkaWZmIGRyaXZlcidzCitjb25maWcuIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tkaWZmICJqcGciXQorCXRleHRjb252ID0gZXhpZgorCWNhY2hldGV4dGNvbnYgPSB0cnVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGNhY2hlIHRoZSByZXN1bHQgb2YgcnVubmluZyAiZXhpZiIgb24gZWFjaCBibG9iCitpbmRlZmluaXRlbHkuIElmIHlvdSBjaGFuZ2UgdGhlIHRleHRjb252IGNvbmZpZyB2YXJpYWJsZSBmb3IgYQorZGlmZiBkcml2ZXIsIEdpdCB3aWxsIGF1dG9tYXRpY2FsbHkgaW52YWxpZGF0ZSB0aGUgY2FjaGUgZW50cmllcworYW5kIHJlLXJ1biB0aGUgdGV4dGNvbnYgZmlsdGVyLiBJZiB5b3Ugd2FudCB0byBpbnZhbGlkYXRlIHRoZQorY2FjaGUgbWFudWFsbHkgKGUuZy4sIGJlY2F1c2UgeW91ciB2ZXJzaW9uIG9mICJleGlmIiB3YXMgdXBkYXRlZAorYW5kIG5vdyBwcm9kdWNlcyBiZXR0ZXIgb3V0cHV0KSwgeW91IGNhbiByZW1vdmUgdGhlIGNhY2hlCittYW51YWxseSB3aXRoIGBnaXQgdXBkYXRlLXJlZiAtZCByZWZzL25vdGVzL3RleHRjb252L2pwZ2AgKHdoZXJlCisianBnIiBpcyB0aGUgbmFtZSBvZiB0aGUgZGlmZiBkcml2ZXIsIGFzIGluIHRoZSBleGFtcGxlIGFib3ZlKS4KKworQ2hvb3NpbmcgdGV4dGNvbnYgdmVyc3VzIGV4dGVybmFsIGRpZmYKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0lmIHlvdSB3YW50IHRvIHNob3cgZGlmZmVyZW5jZXMgYmV0d2VlbiBiaW5hcnkgb3Igc3BlY2lhbGx5LWZvcm1hdHRlZAorYmxvYnMgaW4geW91ciByZXBvc2l0b3J5LCB5b3UgY2FuIGNob29zZSB0byB1c2UgZWl0aGVyIGFuIGV4dGVybmFsIGRpZmYKK2NvbW1hbmQsIG9yIHRvIHVzZSB0ZXh0Y29udiB0byBjb252ZXJ0IHRoZW0gdG8gYSBkaWZmLWFibGUgdGV4dCBmb3JtYXQuCitXaGljaCBtZXRob2QgeW91IGNob29zZSBkZXBlbmRzIG9uIHlvdXIgZXhhY3Qgc2l0dWF0aW9uLgorCitUaGUgYWR2YW50YWdlIG9mIHVzaW5nIGFuIGV4dGVybmFsIGRpZmYgY29tbWFuZCBpcyBmbGV4aWJpbGl0eS4gWW91IGFyZQorbm90IGJvdW5kIHRvIGZpbmQgbGluZS1vcmllbnRlZCBjaGFuZ2VzLCBub3IgaXMgaXQgbmVjZXNzYXJ5IGZvciB0aGUKK291dHB1dCB0byByZXNlbWJsZSB1bmlmaWVkIGRpZmYuIFlvdSBhcmUgZnJlZSB0byBsb2NhdGUgYW5kIHJlcG9ydAorY2hhbmdlcyBpbiB0aGUgbW9zdCBhcHByb3ByaWF0ZSB3YXkgZm9yIHlvdXIgZGF0YSBmb3JtYXQuCisKK0EgdGV4dGNvbnYsIGJ5IGNvbXBhcmlzb24sIGlzIG11Y2ggbW9yZSBsaW1pdGluZy4gWW91IHByb3ZpZGUgYQordHJhbnNmb3JtYXRpb24gb2YgdGhlIGRhdGEgaW50byBhIGxpbmUtb3JpZW50ZWQgdGV4dCBmb3JtYXQsIGFuZCBHaXQKK3VzZXMgaXRzIHJlZ3VsYXIgZGlmZiB0b29scyB0byBnZW5lcmF0ZSB0aGUgb3V0cHV0LiBUaGVyZSBhcmUgc2V2ZXJhbAorYWR2YW50YWdlcyB0byBjaG9vc2luZyB0aGlzIG1ldGhvZDoKKworMS4gRWFzZSBvZiB1c2UuIEl0IGlzIG9mdGVuIG11Y2ggc2ltcGxlciB0byB3cml0ZSBhIGJpbmFyeSB0byB0ZXh0CisgICB0cmFuc2Zvcm1hdGlvbiB0aGFuIGl0IGlzIHRvIHBlcmZvcm0geW91ciBvd24gZGlmZi4gSW4gbWFueSBjYXNlcywKKyAgIGV4aXN0aW5nIHByb2dyYW1zIGNhbiBiZSB1c2VkIGFzIHRleHRjb252IGZpbHRlcnMgKGUuZy4sIGV4aWYsCisgICBvZHQydHh0KS4KKworMi4gR2l0IGRpZmYgZmVhdHVyZXMuIEJ5IHBlcmZvcm1pbmcgb25seSB0aGUgdHJhbnNmb3JtYXRpb24gc3RlcAorICAgeW91cnNlbGYsIHlvdSBjYW4gc3RpbGwgdXRpbGl6ZSBtYW55IG9mIEdpdCdzIGRpZmYgZmVhdHVyZXMsCisgICBpbmNsdWRpbmcgY29sb3JpemF0aW9uLCB3b3JkLWRpZmYsIGFuZCBjb21iaW5lZCBkaWZmcyBmb3IgbWVyZ2VzLgorCiszLiBDYWNoaW5nLiBUZXh0Y29udiBjYWNoaW5nIGNhbiBzcGVlZCB1cCByZXBlYXRlZCBkaWZmcywgc3VjaCBhcyB0aG9zZQorICAgeW91IG1pZ2h0IHRyaWdnZXIgYnkgcnVubmluZyBgZ2l0IGxvZyAtcGAuCisKKworTWFya2luZyBmaWxlcyBhcyBiaW5hcnkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0dpdCB1c3VhbGx5IGd1ZXNzZXMgY29ycmVjdGx5IHdoZXRoZXIgYSBibG9iIGNvbnRhaW5zIHRleHQgb3IgYmluYXJ5CitkYXRhIGJ5IGV4YW1pbmluZyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb250ZW50cy4gSG93ZXZlciwgc29tZXRpbWVzIHlvdQorbWF5IHdhbnQgdG8gb3ZlcnJpZGUgaXRzIGRlY2lzaW9uLCBlaXRoZXIgYmVjYXVzZSBhIGJsb2IgY29udGFpbnMgYmluYXJ5CitkYXRhIGxhdGVyIGluIHRoZSBmaWxlLCBvciBiZWNhdXNlIHRoZSBjb250ZW50LCB3aGlsZSB0ZWNobmljYWxseQorY29tcG9zZWQgb2YgdGV4dCBjaGFyYWN0ZXJzLCBpcyBvcGFxdWUgdG8gYSBodW1hbiByZWFkZXIuIEZvciBleGFtcGxlLAorbWFueSBwb3N0c2NyaXB0IGZpbGVzIGNvbnRhaW4gb25seSBBU0NJSSBjaGFyYWN0ZXJzLCBidXQgcHJvZHVjZSBub2lzeQorYW5kIG1lYW5pbmdsZXNzIGRpZmZzLgorCitUaGUgc2ltcGxlc3Qgd2F5IHRvIG1hcmsgYSBmaWxlIGFzIGJpbmFyeSBpcyB0byB1bnNldCB0aGUgZGlmZgorYXR0cmlidXRlIGluIHRoZSBgLmdpdGF0dHJpYnV0ZXNgIGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi5wcyAtZGlmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBjYXVzZSBHaXQgdG8gZ2VuZXJhdGUgYEJpbmFyeSBmaWxlcyBkaWZmZXJgIChvciBhIGJpbmFyeQorcGF0Y2gsIGlmIGJpbmFyeSBwYXRjaGVzIGFyZSBlbmFibGVkKSBpbnN0ZWFkIG9mIGEgcmVndWxhciBkaWZmLgorCitIb3dldmVyLCBvbmUgbWF5IGFsc28gd2FudCB0byBzcGVjaWZ5IG90aGVyIGRpZmYgZHJpdmVyIGF0dHJpYnV0ZXMuIEZvcgorZXhhbXBsZSwgeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGB0ZXh0Y29udmAgdG8gY29udmVydCBwb3N0c2NyaXB0IGZpbGVzIHRvCithbiBBU0NJSSByZXByZXNlbnRhdGlvbiBmb3IgaHVtYW4gdmlld2luZywgYnV0IG90aGVyd2lzZSB0cmVhdCB0aGVtIGFzCitiaW5hcnkgZmlsZXMuIFlvdSBjYW5ub3Qgc3BlY2lmeSBib3RoIGAtZGlmZmAgYW5kIGBkaWZmPXBzYCBhdHRyaWJ1dGVzLgorVGhlIHNvbHV0aW9uIGlzIHRvIHVzZSB0aGUgYGRpZmYuKi5iaW5hcnlgIGNvbmZpZyBvcHRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2RpZmYgInBzIl0KKyAgdGV4dGNvbnYgPSBwczJhc2NpaQorICBiaW5hcnkgPSB0cnVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGVyZm9ybWluZyBhIHRocmVlLXdheSBtZXJnZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitgbWVyZ2VgCiteXl5eXl5eCisKK1RoZSBhdHRyaWJ1dGUgYG1lcmdlYCBhZmZlY3RzIGhvdyB0aHJlZSB2ZXJzaW9ucyBvZiBhIGZpbGUgYXJlCittZXJnZWQgd2hlbiBhIGZpbGUtbGV2ZWwgbWVyZ2UgaXMgbmVjZXNzYXJ5IGR1cmluZyBgZ2l0IG1lcmdlYCwKK2FuZCBvdGhlciBjb21tYW5kcyBzdWNoIGFzIGBnaXQgcmV2ZXJ0YCBhbmQgYGdpdCBjaGVycnktcGlja2AuCisKK1NldDo6CisKKwlCdWlsdC1pbiAzLXdheSBtZXJnZSBkcml2ZXIgaXMgdXNlZCB0byBtZXJnZSB0aGUKKwljb250ZW50cyBpbiBhIHdheSBzaW1pbGFyIHRvICdtZXJnZScgY29tbWFuZCBvZiBgUkNTYAorCXN1aXRlLiAgVGhpcyBpcyBzdWl0YWJsZSBmb3Igb3JkaW5hcnkgdGV4dCBmaWxlcy4KKworVW5zZXQ6OgorCisJVGFrZSB0aGUgdmVyc2lvbiBmcm9tIHRoZSBjdXJyZW50IGJyYW5jaCBhcyB0aGUKKwl0ZW50YXRpdmUgbWVyZ2UgcmVzdWx0LCBhbmQgZGVjbGFyZSB0aGF0IHRoZSBtZXJnZSBoYXMKKwljb25mbGljdHMuICBUaGlzIGlzIHN1aXRhYmxlIGZvciBiaW5hcnkgZmlsZXMgdGhhdCBkbworCW5vdCBoYXZlIGEgd2VsbC1kZWZpbmVkIG1lcmdlIHNlbWFudGljcy4KKworVW5zcGVjaWZpZWQ6OgorCisJQnkgZGVmYXVsdCwgdGhpcyB1c2VzIHRoZSBzYW1lIGJ1aWx0LWluIDMtd2F5IG1lcmdlCisJZHJpdmVyIGFzIGlzIHRoZSBjYXNlIHdoZW4gdGhlIGBtZXJnZWAgYXR0cmlidXRlIGlzIHNldC4KKwlIb3dldmVyLCB0aGUgYG1lcmdlLmRlZmF1bHRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgY2FuIG5hbWUKKwlkaWZmZXJlbnQgbWVyZ2UgZHJpdmVyIHRvIGJlIHVzZWQgd2l0aCBwYXRocyBmb3Igd2hpY2ggdGhlCisJYG1lcmdlYCBhdHRyaWJ1dGUgaXMgdW5zcGVjaWZpZWQuCisKK1N0cmluZzo6CisKKwkzLXdheSBtZXJnZSBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlIHNwZWNpZmllZCBjdXN0b20KKwltZXJnZSBkcml2ZXIuICBUaGUgYnVpbHQtaW4gMy13YXkgbWVyZ2UgZHJpdmVyIGNhbiBiZQorCWV4cGxpY2l0bHkgc3BlY2lmaWVkIGJ5IGFza2luZyBmb3IgInRleHQiIGRyaXZlcjsgdGhlCisJYnVpbHQtaW4gInRha2UgdGhlIGN1cnJlbnQgYnJhbmNoIiBkcml2ZXIgY2FuIGJlCisJcmVxdWVzdGVkIHdpdGggImJpbmFyeSIuCisKKworQnVpbHQtaW4gbWVyZ2UgZHJpdmVycworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGVyZSBhcmUgYSBmZXcgYnVpbHQtaW4gbG93LWxldmVsIG1lcmdlIGRyaXZlcnMgZGVmaW5lZCB0aGF0CitjYW4gYmUgYXNrZWQgZm9yIHZpYSB0aGUgYG1lcmdlYCBhdHRyaWJ1dGUuCisKK3RleHQ6OgorCisJVXN1YWwgMy13YXkgZmlsZSBsZXZlbCBtZXJnZSBmb3IgdGV4dCBmaWxlcy4gIENvbmZsaWN0ZWQKKwlyZWdpb25zIGFyZSBtYXJrZWQgd2l0aCBjb25mbGljdCBtYXJrZXJzIGA8PDw8PDw8YCwKKwlgPT09PT09PWAgYW5kIGA+Pj4+Pj4+YC4gIFRoZSB2ZXJzaW9uIGZyb20geW91ciBicmFuY2gKKwlhcHBlYXJzIGJlZm9yZSB0aGUgYD09PT09PT1gIG1hcmtlciwgYW5kIHRoZSB2ZXJzaW9uCisJZnJvbSB0aGUgbWVyZ2VkIGJyYW5jaCBhcHBlYXJzIGFmdGVyIHRoZSBgPT09PT09PWAKKwltYXJrZXIuCisKK2JpbmFyeTo6CisKKwlLZWVwIHRoZSB2ZXJzaW9uIGZyb20geW91ciBicmFuY2ggaW4gdGhlIHdvcmsgdHJlZSwgYnV0CisJbGVhdmUgdGhlIHBhdGggaW4gdGhlIGNvbmZsaWN0ZWQgc3RhdGUgZm9yIHRoZSB1c2VyIHRvCisJc29ydCBvdXQuCisKK3VuaW9uOjoKKworCVJ1biAzLXdheSBmaWxlIGxldmVsIG1lcmdlIGZvciB0ZXh0IGZpbGVzLCBidXQgdGFrZQorCWxpbmVzIGZyb20gYm90aCB2ZXJzaW9ucywgaW5zdGVhZCBvZiBsZWF2aW5nIGNvbmZsaWN0CisJbWFya2Vycy4gIFRoaXMgdGVuZHMgdG8gbGVhdmUgdGhlIGFkZGVkIGxpbmVzIGluIHRoZQorCXJlc3VsdGluZyBmaWxlIGluIHJhbmRvbSBvcmRlciBhbmQgdGhlIHVzZXIgc2hvdWxkCisJdmVyaWZ5IHRoZSByZXN1bHQuIERvIG5vdCB1c2UgdGhpcyBpZiB5b3UgZG8gbm90CisJdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgorCisKK0RlZmluaW5nIGEgY3VzdG9tIG1lcmdlIGRyaXZlcgorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBkZWZpbml0aW9uIG9mIGEgbWVyZ2UgZHJpdmVyIGlzIGRvbmUgaW4gdGhlIGAuZ2l0L2NvbmZpZ2AKK2ZpbGUsIG5vdCBpbiB0aGUgYGdpdGF0dHJpYnV0ZXNgIGZpbGUsIHNvIHN0cmljdGx5IHNwZWFraW5nIHRoaXMKK21hbnVhbCBwYWdlIGlzIGEgd3JvbmcgcGxhY2UgdG8gdGFsayBhYm91dCBpdC4gIEhvd2V2ZXIuLi4KKworVG8gZGVmaW5lIGEgY3VzdG9tIG1lcmdlIGRyaXZlciBgZmlsZnJlYCwgYWRkIGEgc2VjdGlvbiB0byB5b3VyCitgJEdJVF9ESVIvY29uZmlnYCBmaWxlIChvciBgJEhPTUUvLmdpdGNvbmZpZ2AgZmlsZSkgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbbWVyZ2UgImZpbGZyZSJdCisJbmFtZSA9IGZlZWwtZnJlZSBtZXJnZSBkcml2ZXIKKwlkcml2ZXIgPSBmaWxmcmUgJU8gJUEgJUIgJUwgJVAKKwlyZWN1cnNpdmUgPSBiaW5hcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGBtZXJnZS4qLm5hbWVgIHZhcmlhYmxlIGdpdmVzIHRoZSBkcml2ZXIgYSBodW1hbi1yZWFkYWJsZQorbmFtZS4KKworVGhlIGBtZXJnZS4qLmRyaXZlcmAgdmFyaWFibGUncyB2YWx1ZSBpcyB1c2VkIHRvIGNvbnN0cnVjdCBhCitjb21tYW5kIHRvIHJ1biB0byBtZXJnZSBhbmNlc3RvcidzIHZlcnNpb24gKGAlT2ApLCBjdXJyZW50Cit2ZXJzaW9uIChgJUFgKSBhbmQgdGhlIG90aGVyIGJyYW5jaGVzJyB2ZXJzaW9uIChgJUJgKS4gIFRoZXNlCit0aHJlZSB0b2tlbnMgYXJlIHJlcGxhY2VkIHdpdGggdGhlIG5hbWVzIG9mIHRlbXBvcmFyeSBmaWxlcyB0aGF0Citob2xkIHRoZSBjb250ZW50cyBvZiB0aGVzZSB2ZXJzaW9ucyB3aGVuIHRoZSBjb21tYW5kIGxpbmUgaXMKK2J1aWx0LiBBZGRpdGlvbmFsbHksICVMIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgY29uZmxpY3QgbWFya2VyCitzaXplIChzZWUgYmVsb3cpLgorCitUaGUgbWVyZ2UgZHJpdmVyIGlzIGV4cGVjdGVkIHRvIGxlYXZlIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlIGluCit0aGUgZmlsZSBuYW1lZCB3aXRoIGAlQWAgYnkgb3ZlcndyaXRpbmcgaXQsIGFuZCBleGl0IHdpdGggemVybworc3RhdHVzIGlmIGl0IG1hbmFnZWQgdG8gbWVyZ2UgdGhlbSBjbGVhbmx5LCBvciBub24temVybyBpZiB0aGVyZQord2VyZSBjb25mbGljdHMuCisKK1RoZSBgbWVyZ2UuKi5yZWN1cnNpdmVgIHZhcmlhYmxlIHNwZWNpZmllcyB3aGF0IG90aGVyIG1lcmdlCitkcml2ZXIgdG8gdXNlIHdoZW4gdGhlIG1lcmdlIGRyaXZlciBpcyBjYWxsZWQgZm9yIGFuIGludGVybmFsCittZXJnZSBiZXR3ZWVuIGNvbW1vbiBhbmNlc3RvcnMsIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUuCitXaGVuIGxlZnQgdW5zcGVjaWZpZWQsIHRoZSBkcml2ZXIgaXRzZWxmIGlzIHVzZWQgZm9yIGJvdGgKK2ludGVybmFsIG1lcmdlIGFuZCB0aGUgZmluYWwgbWVyZ2UuCisKK1RoZSBtZXJnZSBkcml2ZXIgY2FuIGxlYXJuIHRoZSBwYXRobmFtZSBpbiB3aGljaCB0aGUgbWVyZ2VkIHJlc3VsdAord2lsbCBiZSBzdG9yZWQgdmlhIHBsYWNlaG9sZGVyIGAlUGAuCisKKworYGNvbmZsaWN0LW1hcmtlci1zaXplYAorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGlzIGF0dHJpYnV0ZSBjb250cm9scyB0aGUgbGVuZ3RoIG9mIGNvbmZsaWN0IG1hcmtlcnMgbGVmdCBpbgordGhlIHdvcmsgdHJlZSBmaWxlIGR1cmluZyBhIGNvbmZsaWN0ZWQgbWVyZ2UuICBPbmx5IHNldHRpbmcgdG8KK3RoZSB2YWx1ZSB0byBhIHBvc2l0aXZlIGludGVnZXIgaGFzIGFueSBtZWFuaW5nZnVsIGVmZmVjdC4KKworRm9yIGV4YW1wbGUsIHRoaXMgbGluZSBpbiBgLmdpdGF0dHJpYnV0ZXNgIGNhbiBiZSB1c2VkIHRvIHRlbGwgdGhlIG1lcmdlCittYWNoaW5lcnkgdG8gbGVhdmUgbXVjaCBsb25nZXIgKGluc3RlYWQgb2YgdGhlIHVzdWFsIDctY2hhcmFjdGVyLWxvbmcpCitjb25mbGljdCBtYXJrZXJzIHdoZW4gbWVyZ2luZyB0aGUgZmlsZSBgRG9jdW1lbnRhdGlvbi9naXQtbWVyZ2UudHh0YAorcmVzdWx0cyBpbiBhIGNvbmZsaWN0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RvY3VtZW50YXRpb24vZ2l0LW1lcmdlLnR4dAljb25mbGljdC1tYXJrZXItc2l6ZT0zMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQ2hlY2tpbmcgd2hpdGVzcGFjZSBlcnJvcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2B3aGl0ZXNwYWNlYAorXl5eXl5eXl5eXl5eCisKK1RoZSBgY29yZS53aGl0ZXNwYWNlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGFsbG93cyB5b3UgdG8gZGVmaW5lIHdoYXQKKydkaWZmJyBhbmQgJ2FwcGx5JyBzaG91bGQgY29uc2lkZXIgd2hpdGVzcGFjZSBlcnJvcnMgZm9yIGFsbCBwYXRocyBpbgordGhlIHByb2plY3QgKFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLiAgVGhpcyBhdHRyaWJ1dGUgZ2l2ZXMgeW91IGZpbmVyCitjb250cm9sIHBlciBwYXRoLgorCitTZXQ6OgorCisJTm90aWNlIGFsbCB0eXBlcyBvZiBwb3RlbnRpYWwgd2hpdGVzcGFjZSBlcnJvcnMga25vd24gdG8gR2l0LgorCVRoZSB0YWIgd2lkdGggaXMgdGFrZW4gZnJvbSB0aGUgdmFsdWUgb2YgdGhlIGBjb3JlLndoaXRlc3BhY2VgCisJY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworVW5zZXQ6OgorCisJRG8gbm90IG5vdGljZSBhbnl0aGluZyBhcyBlcnJvci4KKworVW5zcGVjaWZpZWQ6OgorCisJVXNlIHRoZSB2YWx1ZSBvZiB0aGUgYGNvcmUud2hpdGVzcGFjZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0bworCWRlY2lkZSB3aGF0IHRvIG5vdGljZSBhcyBlcnJvci4KKworU3RyaW5nOjoKKworCVNwZWNpZnkgYSBjb21tYSBzZXBhcmF0ZSBsaXN0IG9mIGNvbW1vbiB3aGl0ZXNwYWNlIHByb2JsZW1zIHRvCisJbm90aWNlIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgYGNvcmUud2hpdGVzcGFjZWAgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlLgorCisKK0NyZWF0aW5nIGFuIGFyY2hpdmUKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworYGV4cG9ydC1pZ25vcmVgCiteXl5eXl5eXl5eXl5eXl4KKworRmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdpdGggdGhlIGF0dHJpYnV0ZSBgZXhwb3J0LWlnbm9yZWAgd29uJ3QgYmUgYWRkZWQgdG8KK2FyY2hpdmUgZmlsZXMuCisKK2BleHBvcnQtc3Vic3RgCiteXl5eXl5eXl5eXl5eXgorCitJZiB0aGUgYXR0cmlidXRlIGBleHBvcnQtc3Vic3RgIGlzIHNldCBmb3IgYSBmaWxlIHRoZW4gR2l0IHdpbGwgZXhwYW5kCitzZXZlcmFsIHBsYWNlaG9sZGVycyB3aGVuIGFkZGluZyB0aGlzIGZpbGUgdG8gYW4gYXJjaGl2ZS4gIFRoZQorZXhwYW5zaW9uIGRlcGVuZHMgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiBhIGNvbW1pdCBJRCwgaS5lLiwgaWYKK2xpbmtnaXQ6Z2l0LWFyY2hpdmVbMV0gaGFzIGJlZW4gZ2l2ZW4gYSB0cmVlIGluc3RlYWQgb2YgYSBjb21taXQgb3IgYQordGFnIHRoZW4gbm8gcmVwbGFjZW1lbnQgd2lsbCBiZSBkb25lLiAgVGhlIHBsYWNlaG9sZGVycyBhcmUgdGhlIHNhbWUKK2FzIHRob3NlIGZvciB0aGUgb3B0aW9uIGAtLXByZXR0eT1mb3JtYXQ6YCBvZiBsaW5rZ2l0OmdpdC1sb2dbMV0sCitleGNlcHQgdGhhdCB0aGV5IG5lZWQgdG8gYmUgd3JhcHBlZCBsaWtlIHRoaXM6IGAkRm9ybWF0OlBMQUNFSE9MREVSUyRgCitpbiB0aGUgZmlsZS4gIEUuZy4gdGhlIHN0cmluZyBgJEZvcm1hdDolSCRgIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlCitjb21taXQgaGFzaC4KKworCitQYWNraW5nIG9iamVjdHMKK35+fn5+fn5+fn5+fn5+fgorCitgZGVsdGFgCiteXl5eXl5eCisKK0RlbHRhIGNvbXByZXNzaW9uIHdpbGwgbm90IGJlIGF0dGVtcHRlZCBmb3IgYmxvYnMgZm9yIHBhdGhzIHdpdGggdGhlCithdHRyaWJ1dGUgYGRlbHRhYCBzZXQgdG8gZmFsc2UuCisKKworVmlld2luZyBmaWxlcyBpbiBHVUkgdG9vbHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK2BlbmNvZGluZ2AKK15eXl5eXl5eXl4KKworVGhlIHZhbHVlIG9mIHRoaXMgYXR0cmlidXRlIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVyIGVuY29kaW5nIHRoYXQgc2hvdWxkCitiZSB1c2VkIGJ5IEdVSSB0b29scyAoZS5nLiBsaW5rZ2l0OmdpdGtbMV0gYW5kIGxpbmtnaXQ6Z2l0LWd1aVsxXSkgdG8KK2Rpc3BsYXkgdGhlIGNvbnRlbnRzIG9mIHRoZSByZWxldmFudCBmaWxlLiBOb3RlIHRoYXQgZHVlIHRvIHBlcmZvcm1hbmNlCitjb25zaWRlcmF0aW9ucyBsaW5rZ2l0OmdpdGtbMV0gZG9lcyBub3QgdXNlIHRoaXMgYXR0cmlidXRlIHVubGVzcyB5b3UKK21hbnVhbGx5IGVuYWJsZSBwZXItZmlsZSBlbmNvZGluZ3MgaW4gaXRzIG9wdGlvbnMuCisKK0lmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQgb3IgaGFzIGFuIGludmFsaWQgdmFsdWUsIHRoZSB2YWx1ZSBvZiB0aGUKK2BndWkuZW5jb2RpbmdgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgaXMgdXNlZCBpbnN0ZWFkCisoU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCisKKworVVNJTkcgTUFDUk8gQVRUUklCVVRFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgZG8gbm90IHdhbnQgYW55IGVuZC1vZi1saW5lIGNvbnZlcnNpb25zIGFwcGxpZWQgdG8sIG5vciB0ZXh0dWFsIGRpZmZzCitwcm9kdWNlZCBmb3IsIGFueSBiaW5hcnkgZmlsZSB5b3UgdHJhY2suICBZb3Ugd291bGQgbmVlZCB0byBzcGVjaWZ5IGUuZy4KKworLS0tLS0tLS0tLS0tCisqLmpwZyAtdGV4dCAtZGlmZgorLS0tLS0tLS0tLS0tCisKK2J1dCB0aGF0IG1heSBiZWNvbWUgY3VtYmVyc29tZSwgd2hlbiB5b3UgaGF2ZSBtYW55IGF0dHJpYnV0ZXMuICBVc2luZworbWFjcm8gYXR0cmlidXRlcywgeW91IGNhbiBkZWZpbmUgYW4gYXR0cmlidXRlIHRoYXQsIHdoZW4gc2V0LCBhbHNvCitzZXRzIG9yIHVuc2V0cyBhIG51bWJlciBvZiBvdGhlciBhdHRyaWJ1dGVzIGF0IHRoZSBzYW1lIHRpbWUuICBUaGUKK3N5c3RlbSBrbm93cyBhIGJ1aWx0LWluIG1hY3JvIGF0dHJpYnV0ZSwgYGJpbmFyeWA6CisKKy0tLS0tLS0tLS0tLQorKi5qcGcgYmluYXJ5CistLS0tLS0tLS0tLS0KKworU2V0dGluZyB0aGUgImJpbmFyeSIgYXR0cmlidXRlIGFsc28gdW5zZXRzIHRoZSAidGV4dCIgYW5kICJkaWZmIgorYXR0cmlidXRlcyBhcyBhYm92ZS4gIE5vdGUgdGhhdCBtYWNybyBhdHRyaWJ1dGVzIGNhbiBvbmx5IGJlICJTZXQiLAordGhvdWdoIHNldHRpbmcgb25lIG1pZ2h0IGhhdmUgdGhlIGVmZmVjdCBvZiBzZXR0aW5nIG9yIHVuc2V0dGluZyBvdGhlcgorYXR0cmlidXRlcyBvciBldmVuIHJldHVybmluZyBvdGhlciBhdHRyaWJ1dGVzIHRvIHRoZSAiVW5zcGVjaWZpZWQiCitzdGF0ZS4KKworCitERUZJTklORyBNQUNSTyBBVFRSSUJVVEVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0N1c3RvbSBtYWNybyBhdHRyaWJ1dGVzIGNhbiBiZSBkZWZpbmVkIG9ubHkgaW4gdG9wLWxldmVsIGdpdGF0dHJpYnV0ZXMKK2ZpbGVzIChgJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzYCwgdGhlIGAuZ2l0YXR0cmlidXRlc2AgZmlsZSBhdCB0aGUKK3RvcCBsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlLCBvciB0aGUgZ2xvYmFsIG9yIHN5c3RlbS13aWRlCitnaXRhdHRyaWJ1dGVzIGZpbGVzKSwgbm90IGluIGAuZ2l0YXR0cmlidXRlc2AgZmlsZXMgaW4gd29ya2luZyB0cmVlCitzdWJkaXJlY3Rvcmllcy4gIFRoZSBidWlsdC1pbiBtYWNybyBhdHRyaWJ1dGUgImJpbmFyeSIgaXMgZXF1aXZhbGVudAordG86CisKKy0tLS0tLS0tLS0tLQorW2F0dHJdYmluYXJ5IC1kaWZmIC1tZXJnZSAtdGV4dAorLS0tLS0tLS0tLS0tCisKKworRVhBTVBMRQorLS0tLS0tLQorCitJZiB5b3UgaGF2ZSB0aGVzZSB0aHJlZSBgZ2l0YXR0cmlidXRlc2AgZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKGluICRHSVRfRElSL2luZm8vYXR0cmlidXRlcykKKworYSoJZm9vICFiYXIgLWJhegorCisoaW4gLmdpdGF0dHJpYnV0ZXMpCithYmMJZm9vIGJhciBiYXoKKworKGluIHQvLmdpdGF0dHJpYnV0ZXMpCithYioJbWVyZ2U9ZmlsZnJlCithYmMJLWZvbyAtYmFyCisqLmMJZnJvdHoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGhlIGF0dHJpYnV0ZXMgZ2l2ZW4gdG8gcGF0aCBgdC9hYmNgIGFyZSBjb21wdXRlZCBhcyBmb2xsb3dzOgorCisxLiBCeSBleGFtaW5pbmcgYHQvLmdpdGF0dHJpYnV0ZXNgICh3aGljaCBpcyBpbiB0aGUgc2FtZQorICAgZGlyZWN0b3J5IGFzIHRoZSBwYXRoIGluIHF1ZXN0aW9uKSwgR2l0IGZpbmRzIHRoYXQgdGhlIGZpcnN0CisgICBsaW5lIG1hdGNoZXMuICBgbWVyZ2VgIGF0dHJpYnV0ZSBpcyBzZXQuICBJdCBhbHNvIGZpbmRzIHRoYXQKKyAgIHRoZSBzZWNvbmQgbGluZSBtYXRjaGVzLCBhbmQgYXR0cmlidXRlcyBgZm9vYCBhbmQgYGJhcmAKKyAgIGFyZSB1bnNldC4KKworMi4gVGhlbiBpdCBleGFtaW5lcyBgLmdpdGF0dHJpYnV0ZXNgICh3aGljaCBpcyBpbiB0aGUgcGFyZW50CisgICBkaXJlY3RvcnkpLCBhbmQgZmluZHMgdGhhdCB0aGUgZmlyc3QgbGluZSBtYXRjaGVzLCBidXQKKyAgIGB0Ly5naXRhdHRyaWJ1dGVzYCBmaWxlIGFscmVhZHkgZGVjaWRlZCBob3cgYG1lcmdlYCwgYGZvb2AKKyAgIGFuZCBgYmFyYCBhdHRyaWJ1dGVzIHNob3VsZCBiZSBnaXZlbiB0byB0aGlzIHBhdGgsIHNvIGl0CisgICBsZWF2ZXMgYGZvb2AgYW5kIGBiYXJgIHVuc2V0LiAgQXR0cmlidXRlIGBiYXpgIGlzIHNldC4KKworMy4gRmluYWxseSBpdCBleGFtaW5lcyBgJEdJVF9ESVIvaW5mby9hdHRyaWJ1dGVzYC4gIFRoaXMgZmlsZQorICAgaXMgdXNlZCB0byBvdmVycmlkZSB0aGUgaW4tdHJlZSBzZXR0aW5ncy4gIFRoZSBmaXJzdCBsaW5lIGlzCisgICBhIG1hdGNoLCBhbmQgYGZvb2AgaXMgc2V0LCBgYmFyYCBpcyByZXZlcnRlZCB0byB1bnNwZWNpZmllZAorICAgc3RhdGUsIGFuZCBgYmF6YCBpcyB1bnNldC4KKworQXMgdGhlIHJlc3VsdCwgdGhlIGF0dHJpYnV0ZXMgYXNzaWdubWVudCB0byBgdC9hYmNgIGJlY29tZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ZvbwlzZXQgdG8gdHJ1ZQorYmFyCXVuc3BlY2lmaWVkCitiYXoJc2V0IHRvIGZhbHNlCittZXJnZQlzZXQgdG8gc3RyaW5nIHZhbHVlICJmaWxmcmUiCitmcm90egl1bnNwZWNpZmllZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtY2hlY2stYXR0clsxXS4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGNsaS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGNsaS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZlN2Q4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0Y2xpLnR4dApAQCAtMCwwICsxLDIxNCBAQAorZ2l0Y2xpKDcpCis9PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0Y2xpIC0gR2l0IGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgYW5kIGNvbnZlbnRpb25zCisKK1NZTk9QU0lTCistLS0tLS0tLQorZ2l0Y2xpCisKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK1RoaXMgbWFudWFsIGRlc2NyaWJlcyB0aGUgY29udmVudGlvbiB1c2VkIHRocm91Z2hvdXQgR2l0IENMSS4KKworTWFueSBjb21tYW5kcyB0YWtlIHJldmlzaW9ucyAobW9zdCBvZnRlbiAiY29tbWl0cyIsIGJ1dCBzb21ldGltZXMKKyJ0cmVlLWlzaCIsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBhbmQgY29tbWFuZCkgYW5kIHBhdGhzIGFzIHRoZWlyCithcmd1bWVudHMuICBIZXJlIGFyZSB0aGUgcnVsZXM6CisKKyAqIFJldmlzaW9ucyBjb21lIGZpcnN0IGFuZCB0aGVuIHBhdGhzLgorICAgRS5nLiBpbiBgZ2l0IGRpZmYgdjEuMCB2Mi4wIGFyY2gveDg2IGluY2x1ZGUvYXNtLXg4NmAsCisgICBgdjEuMGAgYW5kIGB2Mi4wYCBhcmUgcmV2aXNpb25zIGFuZCBgYXJjaC94ODZgIGFuZCBgaW5jbHVkZS9hc20teDg2YAorICAgYXJlIHBhdGhzLgorCisgKiBXaGVuIGFuIGFyZ3VtZW50IGNhbiBiZSBtaXN1bmRlcnN0b29kIGFzIGVpdGhlciBhIHJldmlzaW9uIG9yIGEgcGF0aCwKKyAgIHRoZXkgY2FuIGJlIGRpc2FtYmlndWF0ZWQgYnkgcGxhY2luZyBgLS1gIGJldHdlZW4gdGhlbS4KKyAgIEUuZy4gYGdpdCBkaWZmIC0tIEhFQURgIGlzLCAiSSBoYXZlIGEgZmlsZSBjYWxsZWQgSEVBRCBpbiBteSB3b3JrCisgICB0cmVlLiAgUGxlYXNlIHNob3cgY2hhbmdlcyBiZXR3ZWVuIHRoZSB2ZXJzaW9uIEkgc3RhZ2VkIGluIHRoZSBpbmRleAorICAgYW5kIHdoYXQgSSBoYXZlIGluIHRoZSB3b3JrIHRyZWUgZm9yIHRoYXQgZmlsZSIsIG5vdCAic2hvdyBkaWZmZXJlbmNlCisgICBiZXR3ZWVuIHRoZSBIRUFEIGNvbW1pdCBhbmQgdGhlIHdvcmsgdHJlZSBhcyBhIHdob2xlIi4gIFlvdSBjYW4gc2F5CisgICBgZ2l0IGRpZmYgSEVBRCAtLWAgdG8gYXNrIGZvciB0aGUgbGF0dGVyLgorCisgKiBXaXRob3V0IGRpc2FtYmlndWF0aW5nIGAtLWAsIEdpdCBtYWtlcyBhIHJlYXNvbmFibGUgZ3Vlc3MsIGJ1dCBlcnJvcnMKKyAgIG91dCBhbmQgYXNraW5nIHlvdSB0byBkaXNhbWJpZ3VhdGUgd2hlbiBhbWJpZ3VvdXMuICBFLmcuIGlmIHlvdSBoYXZlIGEKKyAgIGZpbGUgY2FsbGVkIEhFQUQgaW4geW91ciB3b3JrIHRyZWUsIGBnaXQgZGlmZiBIRUFEYCBpcyBhbWJpZ3VvdXMsIGFuZAorICAgeW91IGhhdmUgdG8gc2F5IGVpdGhlciBgZ2l0IGRpZmYgSEVBRCAtLWAgb3IgYGdpdCBkaWZmIC0tIEhFQURgIHRvCisgICBkaXNhbWJpZ3VhdGUuCisrCitXaGVuIHdyaXRpbmcgYSBzY3JpcHQgdGhhdCBpcyBleHBlY3RlZCB0byBoYW5kbGUgcmFuZG9tIHVzZXItaW5wdXQsIGl0IGlzCithIGdvb2QgcHJhY3RpY2UgdG8gbWFrZSBpdCBleHBsaWNpdCB3aGljaCBhcmd1bWVudHMgYXJlIHdoaWNoIGJ5IHBsYWNpbmcKK2Rpc2FtYmlndWF0aW5nIGAtLWAgYXQgYXBwcm9wcmlhdGUgcGxhY2VzLgorCisgKiBNYW55IGNvbW1hbmRzIGFsbG93IHdpbGRjYXJkcyBpbiBwYXRocywgYnV0IHlvdSBuZWVkIHRvIHByb3RlY3QKKyAgIHRoZW0gZnJvbSBnZXR0aW5nIGdsb2JiZWQgYnkgdGhlIHNoZWxsLiAgVGhlc2UgdHdvIG1lYW4gZGlmZmVyZW50CisgICB0aGluZ3M6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLS0gKi5jCiskIGdpdCBjaGVja291dCAtLSBcKi5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworVGhlIGZvcm1lciBsZXRzIHlvdXIgc2hlbGwgZXhwYW5kIHRoZSBmaWxlZ2xvYiwgYW5kIHlvdSBhcmUgYXNraW5nCit0aGUgZG90LUMgZmlsZXMgaW4geW91ciB3b3JraW5nIHRyZWUgdG8gYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgdmVyc2lvbgoraW4gdGhlIGluZGV4LiAgVGhlIGxhdHRlciBwYXNzZXMgdGhlIGAqLmNgIHRvIEdpdCwgYW5kIHlvdSBhcmUgYXNraW5nCit0aGUgcGF0aHMgaW4gdGhlIGluZGV4IHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4gdG8gYmUgY2hlY2tlZCBvdXQgdG8geW91cgord29ya2luZyB0cmVlLiAgQWZ0ZXIgcnVubmluZyBgZ2l0IGFkZCBoZWxsby5jOyBybSBoZWxsby5jYCwgeW91IHdpbGwgX25vdF8KK3NlZSBgaGVsbG8uY2AgaW4geW91ciB3b3JraW5nIHRyZWUgd2l0aCB0aGUgZm9ybWVyLCBidXQgd2l0aCB0aGUgbGF0dGVyCit5b3Ugd2lsbC4KKworICogSnVzdCBhcyB0aGUgZmlsZXN5c3RlbSAnLicgKHBlcmlvZCkgcmVmZXJzIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwKKyAgIHVzaW5nIGEgJy4nIGFzIGEgcmVwb3NpdG9yeSBuYW1lIGluIEdpdCAoYSBkb3QtcmVwb3NpdG9yeSkgaXMgYSByZWxhdGl2ZQorICAgcGF0aCBhbmQgbWVhbnMgeW91ciBjdXJyZW50IHJlcG9zaXRvcnkuCisKK0hlcmUgYXJlIHRoZSBydWxlcyByZWdhcmRpbmcgdGhlICJmbGFncyIgdGhhdCB5b3Ugc2hvdWxkIGZvbGxvdyB3aGVuIHlvdSBhcmUKK3NjcmlwdGluZyBHaXQ6CisKKyAqIGl0J3MgcHJlZmVycmVkIHRvIHVzZSB0aGUgbm9uLWRhc2hlZCBmb3JtIG9mIEdpdCBjb21tYW5kcywgd2hpY2ggbWVhbnMgdGhhdAorICAgeW91IHNob3VsZCBwcmVmZXIgYGdpdCBmb29gIHRvIGBnaXQtZm9vYC4KKworICogc3BsaXR0aW5nIHNob3J0IG9wdGlvbnMgdG8gc2VwYXJhdGUgd29yZHMgKHByZWZlciBgZ2l0IGZvbyAtYSAtYmAKKyAgIHRvIGBnaXQgZm9vIC1hYmAsIHRoZSBsYXR0ZXIgbWF5IG5vdCBldmVuIHdvcmspLgorCisgKiB3aGVuIGEgY29tbWFuZC1saW5lIG9wdGlvbiB0YWtlcyBhbiBhcmd1bWVudCwgdXNlIHRoZSAnc3R1Y2snIGZvcm0uICBJbgorICAgb3RoZXIgd29yZHMsIHdyaXRlIGBnaXQgZm9vIC1vQXJnYCBpbnN0ZWFkIG9mIGBnaXQgZm9vIC1vIEFyZ2AgZm9yIHNob3J0CisgICBvcHRpb25zLCBhbmQgYGdpdCBmb28gLS1sb25nLW9wdD1BcmdgIGluc3RlYWQgb2YgYGdpdCBmb28gLS1sb25nLW9wdCBBcmdgCisgICBmb3IgbG9uZyBvcHRpb25zLiAgQW4gb3B0aW9uIHRoYXQgdGFrZXMgb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50IG11c3QgYmUKKyAgIHdyaXR0ZW4gaW4gdGhlICdzdHVjaycgZm9ybS4KKworICogd2hlbiB5b3UgZ2l2ZSBhIHJldmlzaW9uIHBhcmFtZXRlciB0byBhIGNvbW1hbmQsIG1ha2Ugc3VyZSB0aGUgcGFyYW1ldGVyIGlzCisgICBub3QgYW1iaWd1b3VzIHdpdGggYSBuYW1lIG9mIGEgZmlsZSBpbiB0aGUgd29yayB0cmVlLiAgRS5nLiBkbyBub3Qgd3JpdGUKKyAgIGBnaXQgbG9nIC0xIEhFQURgIGJ1dCB3cml0ZSBgZ2l0IGxvZyAtMSBIRUFEIC0tYDsgdGhlIGZvcm1lciB3aWxsIG5vdCB3b3JrCisgICBpZiB5b3UgaGFwcGVuIHRvIGhhdmUgYSBmaWxlIGNhbGxlZCBgSEVBRGAgaW4gdGhlIHdvcmsgdHJlZS4KKworICogbWFueSBjb21tYW5kcyBhbGxvdyBhIGxvbmcgb3B0aW9uIGAtLW9wdGlvbmAgdG8gYmUgYWJicmV2aWF0ZWQKKyAgIG9ubHkgdG8gdGhlaXIgdW5pcXVlIHByZWZpeCAoZS5nLiBpZiB0aGVyZSBpcyBubyBvdGhlciBvcHRpb24KKyAgIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYG9wdGAsIHlvdSBtYXkgYmUgYWJsZSB0byBzcGVsbCBgLS1vcHRgIHRvCisgICBpbnZva2UgdGhlIGAtLW9wdGlvbmAgZmxhZyksIGJ1dCB5b3Ugc2hvdWxkIGZ1bGx5IHNwZWxsIHRoZW0gb3V0CisgICB3aGVuIHdyaXRpbmcgeW91ciBzY3JpcHRzOyBsYXRlciB2ZXJzaW9ucyBvZiBHaXQgbWF5IGludHJvZHVjZSBhCisgICBuZXcgb3B0aW9uIHdob3NlIG5hbWUgc2hhcmVzIHRoZSBzYW1lIHByZWZpeCwgZS5nLiBgLS1vcHRpbWl6ZWAsCisgICB0byBtYWtlIGEgc2hvcnQgcHJlZml4IHRoYXQgdXNlZCB0byBiZSB1bmlxdWUgbm8gbG9uZ2VyIHVuaXF1ZS4KKworCitFTkhBTkNFRCBPUFRJT04gUEFSU0VSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGcm9tIHRoZSBHaXQgMS41LjQgc2VyaWVzIGFuZCBmdXJ0aGVyLCBtYW55IEdpdCBjb21tYW5kcyAobm90IGFsbCBvZiB0aGVtIGF0IHRoZQordGltZSBvZiB0aGUgd3JpdGluZyB0aG91Z2gpIGNvbWUgd2l0aCBhbiBlbmhhbmNlZCBvcHRpb24gcGFyc2VyLgorCitIZXJlIGlzIGEgbGlzdCBvZiB0aGUgZmFjaWxpdGllcyBwcm92aWRlZCBieSB0aGlzIG9wdGlvbiBwYXJzZXIuCisKKworTWFnaWMgT3B0aW9ucworfn5+fn5+fn5+fn5+fgorQ29tbWFuZHMgd2hpY2ggaGF2ZSB0aGUgZW5oYW5jZWQgb3B0aW9uIHBhcnNlciBhY3RpdmF0ZWQgYWxsIHVuZGVyc3RhbmQgYQorY291cGxlIG9mIG1hZ2ljIGNvbW1hbmQtbGluZSBvcHRpb25zOgorCistaDo6CisJZ2l2ZXMgYSBwcmV0dHkgcHJpbnRlZCB1c2FnZSBvZiB0aGUgY29tbWFuZC4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGVzY3JpYmUgLWgKK3VzYWdlOiBnaXQgZGVzY3JpYmUgW29wdGlvbnNdIDxjb21taXQtaXNoPioKKyAgIG9yOiBnaXQgZGVzY3JpYmUgW29wdGlvbnNdIC0tZGlydHkKKworICAgIC0tY29udGFpbnMgICAgICAgICAgICBmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0CisgICAgLS1kZWJ1ZyAgICAgICAgICAgICAgIGRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIKKyAgICAtLWFsbCAgICAgICAgICAgICAgICAgdXNlIGFueSByZWYKKyAgICAtLXRhZ3MgICAgICAgICAgICAgICAgdXNlIGFueSB0YWcsIGV2ZW4gdW5hbm5vdGF0ZWQKKyAgICAtLWxvbmcgICAgICAgICAgICAgICAgYWx3YXlzIHVzZSBsb25nIGZvcm1hdAorICAgIC0tYWJicmV2Wz08bj5dICAgICAgICB1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0taGVscC1hbGw6OgorCVNvbWUgR2l0IGNvbW1hbmRzIHRha2Ugb3B0aW9ucyB0aGF0IGFyZSBvbmx5IHVzZWQgZm9yIHBsdW1iaW5nIG9yIHRoYXQKKwlhcmUgZGVwcmVjYXRlZCwgYW5kIHN1Y2ggb3B0aW9ucyBhcmUgaGlkZGVuIGZyb20gdGhlIGRlZmF1bHQgdXNhZ2UuIFRoaXMKKwlvcHRpb24gZ2l2ZXMgdGhlIGZ1bGwgbGlzdCBvZiBvcHRpb25zLgorCisKK05lZ2F0aW5nIG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn4KK09wdGlvbnMgd2l0aCBsb25nIG9wdGlvbiBuYW1lcyBjYW4gYmUgbmVnYXRlZCBieSBwcmVmaXhpbmcgYC0tbm8tYC4gRm9yCitleGFtcGxlLCBgZ2l0IGJyYW5jaGAgaGFzIHRoZSBvcHRpb24gYC0tdHJhY2tgIHdoaWNoIGlzICdvbicgYnkgZGVmYXVsdC4gWW91CitjYW4gdXNlIGAtLW5vLXRyYWNrYCB0byBvdmVycmlkZSB0aGF0IGJlaGF2aW91ci4gVGhlIHNhbWUgZ29lcyBmb3IgYC0tY29sb3JgCithbmQgYC0tbm8tY29sb3JgLgorCisKK0FnZ3JlZ2F0aW5nIHNob3J0IG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0NvbW1hbmRzIHRoYXQgc3VwcG9ydCB0aGUgZW5oYW5jZWQgb3B0aW9uIHBhcnNlciBhbGxvdyB5b3UgdG8gYWdncmVnYXRlIHNob3J0CitvcHRpb25zLiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBmb3IgZXhhbXBsZSB1c2UgYGdpdCBybSAtcmZgIG9yCitgZ2l0IGNsZWFuIC1mZHhgLgorCisKK0FiYnJldmlhdGluZyBsb25nIG9wdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0NvbW1hbmRzIHRoYXQgc3VwcG9ydCB0aGUgZW5oYW5jZWQgb3B0aW9uIHBhcnNlciBhY2NlcHRzIHVuaXF1ZQorcHJlZml4IG9mIGEgbG9uZyBvcHRpb24gYXMgaWYgaXQgaXMgZnVsbHkgc3BlbGxlZCBvdXQsIGJ1dCB1c2UgdGhpcword2l0aCBhIGNhdXRpb24uICBGb3IgZXhhbXBsZSwgYGdpdCBjb21taXQgLS1hbWVuYCBiZWhhdmVzIGFzIGlmIHlvdQordHlwZWQgYGdpdCBjb21taXQgLS1hbWVuZGAsIGJ1dCB0aGF0IGlzIHRydWUgb25seSB1bnRpbCBhIGxhdGVyIHZlcnNpb24KK29mIEdpdCBpbnRyb2R1Y2VzIGFub3RoZXIgb3B0aW9uIHRoYXQgc2hhcmVzIHRoZSBzYW1lIHByZWZpeCwKK2UuZy4gYGdpdCBjb21taXQgLS1hbWVuaXR5YCBvcHRpb24uCisKKworU2VwYXJhdGluZyBhcmd1bWVudCBmcm9tIHRoZSBvcHRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitZb3UgY2FuIHdyaXRlIHRoZSBtYW5kYXRvcnkgb3B0aW9uIHBhcmFtZXRlciB0byBhbiBvcHRpb24gYXMgYSBzZXBhcmF0ZQord29yZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhhdCBtZWFucyB0aGF0IGFsbCB0aGUgZm9sbG93aW5nIHVzZXMgd29yazoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZm9vIC0tbG9uZy1vcHQ9QXJnCiskIGdpdCBmb28gLS1sb25nLW9wdCBBcmcKKyQgZ2l0IGZvbyAtb0FyZworJCBnaXQgZm9vIC1vIEFyZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIb3dldmVyLCB0aGlzIGlzICpOT1QqIGFsbG93ZWQgZm9yIHN3aXRjaGVzIHdpdGggYW4gb3B0aW9uYWwgdmFsdWUsIHdoZXJlIHRoZQorJ3N0dWNrJyBmb3JtIG11c3QgYmUgdXNlZDoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRlc2NyaWJlIC0tYWJicmV2IEhFQUQgICAgICMgY29ycmVjdAorJCBnaXQgZGVzY3JpYmUgLS1hYmJyZXY9MTAgSEVBRCAgIyBjb3JyZWN0CiskIGdpdCBkZXNjcmliZSAtLWFiYnJldiAxMCBIRUFEICAjIE5PVCBXSEFUIFlPVSBNRUFOVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK05PVEVTIE9OIEZSRVFVRU5UTFkgQ09ORlVTRUQgT1BUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01hbnkgY29tbWFuZHMgdGhhdCBjYW4gd29yayBvbiBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlCithbmQvb3IgaW4gdGhlIGluZGV4IGNhbiB0YWtlIGAtLWNhY2hlZGAgYW5kL29yIGAtLWluZGV4YAorb3B0aW9ucy4gIFNvbWV0aW1lcyBwZW9wbGUgaW5jb3JyZWN0bHkgdGhpbmsgdGhhdCwgYmVjYXVzZQordGhlIGluZGV4IHdhcyBvcmlnaW5hbGx5IGNhbGxlZCBjYWNoZSwgdGhlc2UgdHdvIGFyZQorc3lub255bXMuICBUaGV5IGFyZSAqbm90KiAtLSB0aGVzZSB0d28gb3B0aW9ucyBtZWFuIHZlcnkKK2RpZmZlcmVudCB0aGluZ3MuCisKKyAqIFRoZSBgLS1jYWNoZWRgIG9wdGlvbiBpcyB1c2VkIHRvIGFzayBhIGNvbW1hbmQgdGhhdAorICAgdXN1YWxseSB3b3JrcyBvbiBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRvICpvbmx5KiB3b3JrCisgICB3aXRoIHRoZSBpbmRleC4gIEZvciBleGFtcGxlLCBgZ2l0IGdyZXBgLCB3aGVuIHVzZWQKKyAgIHdpdGhvdXQgYSBjb21taXQgdG8gc3BlY2lmeSBmcm9tIHdoaWNoIGNvbW1pdCB0byBsb29rIGZvcgorICAgc3RyaW5ncyBpbiwgdXN1YWxseSB3b3JrcyBvbiBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLAorICAgYnV0IHdpdGggdGhlIGAtLWNhY2hlZGAgb3B0aW9uLCBpdCBsb29rcyBmb3Igc3RyaW5ncyBpbgorICAgdGhlIGluZGV4LgorCisgKiBUaGUgYC0taW5kZXhgIG9wdGlvbiBpcyB1c2VkIHRvIGFzayBhIGNvbW1hbmQgdGhhdAorICAgdXN1YWxseSB3b3JrcyBvbiBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIHRvICphbHNvKgorICAgYWZmZWN0IHRoZSBpbmRleC4gIEZvciBleGFtcGxlLCBgZ2l0IHN0YXNoIGFwcGx5YCB1c3VhbGx5CisgICBtZXJnZXMgY2hhbmdlcyByZWNvcmRlZCBpbiBhIHN0YXNoIHRvIHRoZSB3b3JraW5nIHRyZWUsCisgICBidXQgd2l0aCB0aGUgYC0taW5kZXhgIG9wdGlvbiwgaXQgYWxzbyBtZXJnZXMgY2hhbmdlcyB0bworICAgdGhlIGluZGV4IGFzIHdlbGwuCisKK2BnaXQgYXBwbHlgIGNvbW1hbmQgY2FuIGJlIHVzZWQgd2l0aCBgLS1jYWNoZWRgIGFuZAorYC0taW5kZXhgIChidXQgbm90IGF0IHRoZSBzYW1lIHRpbWUpLiAgVXN1YWxseSB0aGUgY29tbWFuZAorb25seSBhZmZlY3RzIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlLCBidXQgd2l0aAorYC0taW5kZXhgLCBpdCBwYXRjaGVzIGJvdGggdGhlIGZpbGVzIGFuZCB0aGVpciBpbmRleAorZW50cmllcywgYW5kIHdpdGggYC0tY2FjaGVkYCwgaXQgbW9kaWZpZXMgb25seSB0aGUgaW5kZXgKK2VudHJpZXMuCisKK1NlZSBhbHNvIGh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTE2NTYzMTM1NjIwMzU5IGFuZAoraHR0cDovL21hcmMuaW5mby8/bD1naXQmbT0xMTkxNTAzOTM2MjAyNzMgZm9yIGZ1cnRoZXIKK2luZm9ybWF0aW9uLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y29yZS10dXRvcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZTlhYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGNvcmUtdHV0b3JpYWwudHh0CkBAIC0wLDAgKzEsMTY3NSBAQAorZ2l0Y29yZS10dXRvcmlhbCg3KQorPT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRjb3JlLXR1dG9yaWFsIC0gQSBHaXQgY29yZSB0dXRvcmlhbCBmb3IgZGV2ZWxvcGVycworCitTWU5PUFNJUworLS0tLS0tLS0KK2dpdCAqCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIHR1dG9yaWFsIGV4cGxhaW5zIGhvdyB0byB1c2UgdGhlICJjb3JlIiBHaXQgY29tbWFuZHMgdG8gc2V0IHVwIGFuZAord29yayB3aXRoIGEgR2l0IHJlcG9zaXRvcnkuCisKK0lmIHlvdSBqdXN0IG5lZWQgdG8gdXNlIEdpdCBhcyBhIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtIHlvdSBtYXkgcHJlZmVyCit0byBzdGFydCB3aXRoICJBIFR1dG9yaWFsIEludHJvZHVjdGlvbiB0byBHaXQiIChsaW5rZ2l0OmdpdHR1dG9yaWFsWzddKSBvcgorbGluazp1c2VyLW1hbnVhbC5odG1sW3RoZSBHaXQgVXNlciBNYW51YWxdLgorCitIb3dldmVyLCBhbiB1bmRlcnN0YW5kaW5nIG9mIHRoZXNlIGxvdy1sZXZlbCB0b29scyBjYW4gYmUgaGVscGZ1bCBpZgoreW91IHdhbnQgdG8gdW5kZXJzdGFuZCBHaXQncyBpbnRlcm5hbHMuCisKK1RoZSBjb3JlIEdpdCBpcyBvZnRlbiBjYWxsZWQgInBsdW1iaW5nIiwgd2l0aCB0aGUgcHJldHRpZXIgdXNlcgoraW50ZXJmYWNlcyBvbiB0b3Agb2YgaXQgY2FsbGVkICJwb3JjZWxhaW4iLiBZb3UgbWF5IG5vdCB3YW50IHRvIHVzZSB0aGUKK3BsdW1iaW5nIGRpcmVjdGx5IHZlcnkgb2Z0ZW4sIGJ1dCBpdCBjYW4gYmUgZ29vZCB0byBrbm93IHdoYXQgdGhlCitwbHVtYmluZyBkb2VzIGZvciB3aGVuIHRoZSBwb3JjZWxhaW4gaXNuJ3QgZmx1c2hpbmcuCisKK0JhY2sgd2hlbiB0aGlzIGRvY3VtZW50IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4sIG1hbnkgcG9yY2VsYWluCitjb21tYW5kcyB3ZXJlIHNoZWxsIHNjcmlwdHMuIEZvciBzaW1wbGljaXR5LCBpdCBzdGlsbCB1c2VzIHRoZW0gYXMKK2V4YW1wbGVzIHRvIGlsbHVzdHJhdGUgaG93IHBsdW1iaW5nIGlzIGZpdCB0b2dldGhlciB0byBmb3JtIHRoZQorcG9yY2VsYWluIGNvbW1hbmRzLiBUaGUgc291cmNlIHRyZWUgaW5jbHVkZXMgc29tZSBvZiB0aGVzZSBzY3JpcHRzIGluCitjb250cmliL2V4YW1wbGVzLyBmb3IgcmVmZXJlbmNlLiBBbHRob3VnaCB0aGVzZSBhcmUgbm90IGltcGxlbWVudGVkIGFzCitzaGVsbCBzY3JpcHRzIGFueW1vcmUsIHRoZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBwbHVtYmluZyBsYXllcgorY29tbWFuZHMgZG8gaXMgc3RpbGwgdmFsaWQuCisKK1tOT1RFXQorRGVlcGVyIHRlY2huaWNhbCBkZXRhaWxzIGFyZSBvZnRlbiBtYXJrZWQgYXMgTm90ZXMsIHdoaWNoIHlvdSBjYW4KK3NraXAgb24geW91ciBmaXJzdCByZWFkaW5nLgorCisKK0NyZWF0aW5nIGEgR2l0IHJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3JlYXRpbmcgYSBuZXcgR2l0IHJlcG9zaXRvcnkgY291bGRuJ3QgYmUgZWFzaWVyOiBhbGwgR2l0IHJlcG9zaXRvcmllcyBzdGFydAorb3V0IGVtcHR5LCBhbmQgdGhlIG9ubHkgdGhpbmcgeW91IG5lZWQgdG8gZG8gaXMgZmluZCB5b3Vyc2VsZiBhCitzdWJkaXJlY3RvcnkgdGhhdCB5b3Ugd2FudCB0byB1c2UgYXMgYSB3b3JraW5nIHRyZWUgLSBlaXRoZXIgYW4gZW1wdHkKK29uZSBmb3IgYSB0b3RhbGx5IG5ldyBwcm9qZWN0LCBvciBhbiBleGlzdGluZyB3b3JraW5nIHRyZWUgdGhhdCB5b3Ugd2FudAordG8gaW1wb3J0IGludG8gR2l0LgorCitGb3Igb3VyIGZpcnN0IGV4YW1wbGUsIHdlJ3JlIGdvaW5nIHRvIHN0YXJ0IGEgdG90YWxseSBuZXcgcmVwb3NpdG9yeSBmcm9tCitzY3JhdGNoLCB3aXRoIG5vIHByZS1leGlzdGluZyBmaWxlcywgYW5kIHdlJ2xsIGNhbGwgaXQgJ2dpdC10dXRvcmlhbCcuCitUbyBzdGFydCB1cCwgY3JlYXRlIGEgc3ViZGlyZWN0b3J5IGZvciBpdCwgY2hhbmdlIGludG8gdGhhdAorc3ViZGlyZWN0b3J5LCBhbmQgaW5pdGlhbGl6ZSB0aGUgR2l0IGluZnJhc3RydWN0dXJlIHdpdGggJ2dpdCBpbml0JzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG1rZGlyIGdpdC10dXRvcmlhbAorJCBjZCBnaXQtdHV0b3JpYWwKKyQgZ2l0IGluaXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0byB3aGljaCBHaXQgd2lsbCByZXBseQorCistLS0tLS0tLS0tLS0tLS0tCitJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAuZ2l0LworLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBpcyBqdXN0IEdpdCdzIHdheSBvZiBzYXlpbmcgdGhhdCB5b3UgaGF2ZW4ndCBiZWVuIGRvaW5nIGFueXRoaW5nCitzdHJhbmdlLCBhbmQgdGhhdCBpdCB3aWxsIGhhdmUgY3JlYXRlZCBhIGxvY2FsIGAuZ2l0YCBkaXJlY3Rvcnkgc2V0dXAgZm9yCit5b3VyIG5ldyBwcm9qZWN0LiBZb3Ugd2lsbCBub3cgaGF2ZSBhIGAuZ2l0YCBkaXJlY3RvcnksIGFuZCB5b3UgY2FuCitpbnNwZWN0IHRoYXQgd2l0aCAnbHMnLiBGb3IgeW91ciBuZXcgZW1wdHkgcHJvamVjdCwgaXQgc2hvdWxkIHNob3cgeW91Cit0aHJlZSBlbnRyaWVzLCBhbW9uZyBvdGhlciB0aGluZ3M6CisKKyAtIGEgZmlsZSBjYWxsZWQgYEhFQURgLCB0aGF0IGhhcyBgcmVmOiByZWZzL2hlYWRzL21hc3RlcmAgaW4gaXQuCisgICBUaGlzIGlzIHNpbWlsYXIgdG8gYSBzeW1ib2xpYyBsaW5rIGFuZCBwb2ludHMgYXQKKyAgIGByZWZzL2hlYWRzL21hc3RlcmAgcmVsYXRpdmUgdG8gdGhlIGBIRUFEYCBmaWxlLgorKworRG9uJ3Qgd29ycnkgYWJvdXQgdGhlIGZhY3QgdGhhdCB0aGUgZmlsZSB0aGF0IHRoZSBgSEVBRGAgbGluayBwb2ludHMgdG8KK2RvZXNuJ3QgZXZlbiBleGlzdCB5ZXQgLS0geW91IGhhdmVuJ3QgY3JlYXRlZCB0aGUgY29tbWl0IHRoYXQgd2lsbAorc3RhcnQgeW91ciBgSEVBRGAgZGV2ZWxvcG1lbnQgYnJhbmNoIHlldC4KKworIC0gYSBzdWJkaXJlY3RvcnkgY2FsbGVkIGBvYmplY3RzYCwgd2hpY2ggd2lsbCBjb250YWluIGFsbCB0aGUKKyAgIG9iamVjdHMgb2YgeW91ciBwcm9qZWN0LiBZb3Ugc2hvdWxkIG5ldmVyIGhhdmUgYW55IHJlYWwgcmVhc29uIHRvCisgICBsb29rIGF0IHRoZSBvYmplY3RzIGRpcmVjdGx5LCBidXQgeW91IG1pZ2h0IHdhbnQgdG8ga25vdyB0aGF0IHRoZXNlCisgICBvYmplY3RzIGFyZSB3aGF0IGNvbnRhaW5zIGFsbCB0aGUgcmVhbCAnZGF0YScgaW4geW91ciByZXBvc2l0b3J5LgorCisgLSBhIHN1YmRpcmVjdG9yeSBjYWxsZWQgYHJlZnNgLCB3aGljaCBjb250YWlucyByZWZlcmVuY2VzIHRvIG9iamVjdHMuCisKK0luIHBhcnRpY3VsYXIsIHRoZSBgcmVmc2Agc3ViZGlyZWN0b3J5IHdpbGwgY29udGFpbiB0d28gb3RoZXIKK3N1YmRpcmVjdG9yaWVzLCBuYW1lZCBgaGVhZHNgIGFuZCBgdGFnc2AgcmVzcGVjdGl2ZWx5LiBUaGV5IGRvCitleGFjdGx5IHdoYXQgdGhlaXIgbmFtZXMgaW1wbHk6IHRoZXkgY29udGFpbiByZWZlcmVuY2VzIHRvIGFueSBudW1iZXIKK29mIGRpZmZlcmVudCAnaGVhZHMnIG9mIGRldmVsb3BtZW50IChha2EgJ2JyYW5jaGVzJyksIGFuZCB0byBhbnkKKyd0YWdzJyB0aGF0IHlvdSBoYXZlIGNyZWF0ZWQgdG8gbmFtZSBzcGVjaWZpYyB2ZXJzaW9ucyBpbiB5b3VyCityZXBvc2l0b3J5LgorCitPbmUgbm90ZTogdGhlIHNwZWNpYWwgYG1hc3RlcmAgaGVhZCBpcyB0aGUgZGVmYXVsdCBicmFuY2gsIHdoaWNoIGlzCit3aHkgdGhlIGAuZ2l0L0hFQURgIGZpbGUgd2FzIGNyZWF0ZWQgcG9pbnRzIHRvIGl0IGV2ZW4gaWYgaXQKK2RvZXNuJ3QgeWV0IGV4aXN0LiBCYXNpY2FsbHksIHRoZSBgSEVBRGAgbGluayBpcyBzdXBwb3NlZCB0byBhbHdheXMKK3BvaW50IHRvIHRoZSBicmFuY2ggeW91IGFyZSB3b3JraW5nIG9uIHJpZ2h0IG5vdywgYW5kIHlvdSBhbHdheXMKK3N0YXJ0IG91dCBleHBlY3RpbmcgdG8gd29yayBvbiB0aGUgYG1hc3RlcmAgYnJhbmNoLgorCitIb3dldmVyLCB0aGlzIGlzIG9ubHkgYSBjb252ZW50aW9uLCBhbmQgeW91IGNhbiBuYW1lIHlvdXIgYnJhbmNoZXMKK2FueXRoaW5nIHlvdSB3YW50LCBhbmQgZG9uJ3QgaGF2ZSB0byBldmVyIGV2ZW4gJ2hhdmUnIGEgYG1hc3RlcmAKK2JyYW5jaC4gQSBudW1iZXIgb2YgdGhlIEdpdCB0b29scyB3aWxsIGFzc3VtZSB0aGF0IGAuZ2l0L0hFQURgIGlzCit2YWxpZCwgdGhvdWdoLgorCitbTk9URV0KK0FuICdvYmplY3QnIGlzIGlkZW50aWZpZWQgYnkgaXRzIDE2MC1iaXQgU0hBLTEgaGFzaCwgYWthICdvYmplY3QgbmFtZScsCithbmQgYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0IGlzIGFsd2F5cyB0aGUgNDAtYnl0ZSBoZXgKK3JlcHJlc2VudGF0aW9uIG9mIHRoYXQgU0hBLTEgbmFtZS4gVGhlIGZpbGVzIGluIHRoZSBgcmVmc2AKK3N1YmRpcmVjdG9yeSBhcmUgZXhwZWN0ZWQgdG8gY29udGFpbiB0aGVzZSBoZXggcmVmZXJlbmNlcworKHVzdWFsbHkgd2l0aCBhIGZpbmFsIGBcbmAgYXQgdGhlIGVuZCksIGFuZCB5b3Ugc2hvdWxkIHRodXMKK2V4cGVjdCB0byBzZWUgYSBudW1iZXIgb2YgNDEtYnl0ZSBmaWxlcyBjb250YWluaW5nIHRoZXNlCityZWZlcmVuY2VzIGluIHRoZXNlIGByZWZzYCBzdWJkaXJlY3RvcmllcyB3aGVuIHlvdSBhY3R1YWxseSBzdGFydAorcG9wdWxhdGluZyB5b3VyIHRyZWUuCisKK1tOT1RFXQorQW4gYWR2YW5jZWQgdXNlciBtYXkgd2FudCB0byB0YWtlIGEgbG9vayBhdCBsaW5rZ2l0OmdpdHJlcG9zaXRvcnktbGF5b3V0WzVdCithZnRlciBmaW5pc2hpbmcgdGhpcyB0dXRvcmlhbC4KKworWW91IGhhdmUgbm93IGNyZWF0ZWQgeW91ciBmaXJzdCBHaXQgcmVwb3NpdG9yeS4gT2YgY291cnNlLCBzaW5jZSBpdCdzCitlbXB0eSwgdGhhdCdzIG5vdCB2ZXJ5IHVzZWZ1bCwgc28gbGV0J3Mgc3RhcnQgcG9wdWxhdGluZyBpdCB3aXRoIGRhdGEuCisKKworUG9wdWxhdGluZyBhIEdpdCByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2UnbGwga2VlcCB0aGlzIHNpbXBsZSBhbmQgc3R1cGlkLCBzbyB3ZSdsbCBzdGFydCBvZmYgd2l0aCBwb3B1bGF0aW5nIGEKK2ZldyB0cml2aWFsIGZpbGVzIGp1c3QgdG8gZ2V0IGEgZmVlbCBmb3IgaXQuCisKK1N0YXJ0IG9mZiB3aXRoIGp1c3QgY3JlYXRpbmcgYW55IHJhbmRvbSBmaWxlcyB0aGF0IHlvdSB3YW50IHRvIG1haW50YWluCitpbiB5b3VyIEdpdCByZXBvc2l0b3J5LiBXZSdsbCBzdGFydCBvZmYgd2l0aCBhIGZldyBiYWQgZXhhbXBsZXMsIGp1c3QgdG8KK2dldCBhIGZlZWwgZm9yIGhvdyB0aGlzIHdvcmtzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZWNobyAiSGVsbG8gV29ybGQiID5oZWxsbworJCBlY2hvICJTaWxseSBleGFtcGxlIiA+ZXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3lvdSBoYXZlIG5vdyBjcmVhdGVkIHR3byBmaWxlcyBpbiB5b3VyIHdvcmtpbmcgdHJlZSAoYWthICd3b3JraW5nIGRpcmVjdG9yeScpLAorYnV0IHRvIGFjdHVhbGx5IGNoZWNrIGluIHlvdXIgaGFyZCB3b3JrLCB5b3Ugd2lsbCBoYXZlIHRvIGdvIHRocm91Z2ggdHdvIHN0ZXBzOgorCisgLSBmaWxsIGluIHRoZSAnaW5kZXgnIGZpbGUgKGFrYSAnY2FjaGUnKSB3aXRoIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB5b3VyCisgICB3b3JraW5nIHRyZWUgc3RhdGUuCisKKyAtIGNvbW1pdCB0aGF0IGluZGV4IGZpbGUgYXMgYW4gb2JqZWN0LgorCitUaGUgZmlyc3Qgc3RlcCBpcyB0cml2aWFsOiB3aGVuIHlvdSB3YW50IHRvIHRlbGwgR2l0IGFib3V0IGFueSBjaGFuZ2VzCit0byB5b3VyIHdvcmtpbmcgdHJlZSwgeW91IHVzZSB0aGUgJ2dpdCB1cGRhdGUtaW5kZXgnIHByb2dyYW0uIFRoYXQKK3Byb2dyYW0gbm9ybWFsbHkganVzdCB0YWtlcyBhIGxpc3Qgb2YgZmlsZW5hbWVzIHlvdSB3YW50IHRvIHVwZGF0ZSwgYnV0Cit0byBhdm9pZCB0cml2aWFsIG1pc3Rha2VzLCBpdCByZWZ1c2VzIHRvIGFkZCBuZXcgZW50cmllcyB0byB0aGUgaW5kZXgKKyhvciByZW1vdmUgZXhpc3Rpbmcgb25lcykgdW5sZXNzIHlvdSBleHBsaWNpdGx5IHRlbGwgaXQgdGhhdCB5b3UncmUKK2FkZGluZyBhIG5ldyBlbnRyeSB3aXRoIHRoZSBgLS1hZGRgIGZsYWcgKG9yIHJlbW92aW5nIGFuIGVudHJ5IHdpdGggdGhlCitgLS1yZW1vdmVgKSBmbGFnLgorCitTbyB0byBwb3B1bGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUgdHdvIGZpbGVzIHlvdSBqdXN0IGNyZWF0ZWQsIHlvdSBjYW4gZG8KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgaGVsbG8gZXhhbXBsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB5b3UgaGF2ZSBub3cgdG9sZCBHaXQgdG8gdHJhY2sgdGhvc2UgdHdvIGZpbGVzLgorCitJbiBmYWN0LCBhcyB5b3UgZGlkIHRoYXQsIGlmIHlvdSBub3cgbG9vayBpbnRvIHlvdXIgb2JqZWN0IGRpcmVjdG9yeSwKK3lvdSdsbCBub3RpY2UgdGhhdCBHaXQgd2lsbCBoYXZlIGFkZGVkIHR3byBuZXcgb2JqZWN0cyB0byB0aGUgb2JqZWN0CitkYXRhYmFzZS4gSWYgeW91IGRpZCBleGFjdGx5IHRoZSBzdGVwcyBhYm92ZSwgeW91IHNob3VsZCBub3cgYmUgYWJsZSB0byBkbworCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgbHMgLmdpdC9vYmplY3RzLz8/LyoKKy0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHNlZSB0d28gZmlsZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0KKy5naXQvb2JqZWN0cy81NS83ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOAorLmdpdC9vYmplY3RzL2YyLzRjNzRhMmU1MDBmNWVlMTMzMmM4NmI5NDE5OWY1MmIxZDFkOTYyCistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIGNvcnJlc3BvbmQgd2l0aCB0aGUgb2JqZWN0cyB3aXRoIG5hbWVzIG9mIGA1NTdkYi4uLmAgYW5kCitgZjI0YzcuLi5gIHJlc3BlY3RpdmVseS4KKworSWYgeW91IHdhbnQgdG8sIHlvdSBjYW4gdXNlICdnaXQgY2F0LWZpbGUnIHRvIGxvb2sgYXQgdGhvc2Ugb2JqZWN0cywgYnV0Cit5b3UnbGwgaGF2ZSB0byB1c2UgdGhlIG9iamVjdCBuYW1lLCBub3QgdGhlIGZpbGVuYW1lIG9mIHRoZSBvYmplY3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIC10IDU1N2RiMDNkZTk5N2M4NmE0YTAyOGUxZWJkM2ExY2ViMjI1YmUyMzgKKy0tLS0tLS0tLS0tLS0tLS0KKword2hlcmUgdGhlIGAtdGAgdGVsbHMgJ2dpdCBjYXQtZmlsZScgdG8gdGVsbCB5b3Ugd2hhdCB0aGUgInR5cGUiIG9mIHRoZQorb2JqZWN0IGlzLiBHaXQgd2lsbCB0ZWxsIHlvdSB0aGF0IHlvdSBoYXZlIGEgImJsb2IiIG9iamVjdCAoaS5lLiwganVzdCBhCityZWd1bGFyIGZpbGUpLCBhbmQgeW91IGNhbiBzZWUgdGhlIGNvbnRlbnRzIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgYmxvYiA1NTdkYjAzCistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgcHJpbnQgb3V0ICJIZWxsbyBXb3JsZCIuIFRoZSBvYmplY3QgYDU1N2RiMDNgIGlzIG5vdGhpbmcKK21vcmUgdGhhbiB0aGUgY29udGVudHMgb2YgeW91ciBmaWxlIGBoZWxsb2AuCisKK1tOT1RFXQorRG9uJ3QgY29uZnVzZSB0aGF0IG9iamVjdCB3aXRoIHRoZSBmaWxlIGBoZWxsb2AgaXRzZWxmLiBUaGUKK29iamVjdCBpcyBsaXRlcmFsbHkganVzdCB0aG9zZSBzcGVjaWZpYyAqY29udGVudHMqIG9mIHRoZSBmaWxlLCBhbmQKK2hvd2V2ZXIgbXVjaCB5b3UgbGF0ZXIgY2hhbmdlIHRoZSBjb250ZW50cyBpbiBmaWxlIGBoZWxsb2AsIHRoZSBvYmplY3QKK3dlIGp1c3QgbG9va2VkIGF0IHdpbGwgbmV2ZXIgY2hhbmdlLiBPYmplY3RzIGFyZSBpbW11dGFibGUuCisKK1tOT1RFXQorVGhlIHNlY29uZCBleGFtcGxlIGRlbW9uc3RyYXRlcyB0aGF0IHlvdSBjYW4KK2FiYnJldmlhdGUgdGhlIG9iamVjdCBuYW1lIHRvIG9ubHkgdGhlIGZpcnN0IHNldmVyYWwKK2hleGFkZWNpbWFsIGRpZ2l0cyBpbiBtb3N0IHBsYWNlcy4KKworQW55d2F5LCBhcyB3ZSBtZW50aW9uZWQgcHJldmlvdXNseSwgeW91IG5vcm1hbGx5IG5ldmVyIGFjdHVhbGx5IHRha2UgYQorbG9vayBhdCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLCBhbmQgdHlwaW5nIGxvbmcgNDAtY2hhcmFjdGVyIGhleAorbmFtZXMgaXMgbm90IHNvbWV0aGluZyB5b3UnZCBub3JtYWxseSB3YW50IHRvIGRvLiBUaGUgYWJvdmUgZGlncmVzc2lvbgord2FzIGp1c3QgdG8gc2hvdyB0aGF0ICdnaXQgdXBkYXRlLWluZGV4JyBkaWQgc29tZXRoaW5nIG1hZ2ljYWwsIGFuZAorYWN0dWFsbHkgc2F2ZWQgYXdheSB0aGUgY29udGVudHMgb2YgeW91ciBmaWxlcyBpbnRvIHRoZSBHaXQgb2JqZWN0CitkYXRhYmFzZS4KKworVXBkYXRpbmcgdGhlIGluZGV4IGRpZCBzb21ldGhpbmcgZWxzZSB0b286IGl0IGNyZWF0ZWQgYSBgLmdpdC9pbmRleGAKK2ZpbGUuIFRoaXMgaXMgdGhlIGluZGV4IHRoYXQgZGVzY3JpYmVzIHlvdXIgY3VycmVudCB3b3JraW5nIHRyZWUsIGFuZAorc29tZXRoaW5nIHlvdSBzaG91bGQgYmUgdmVyeSBhd2FyZSBvZi4gQWdhaW4sIHlvdSBub3JtYWxseSBuZXZlciB3b3JyeQorYWJvdXQgdGhlIGluZGV4IGZpbGUgaXRzZWxmLCBidXQgeW91IHNob3VsZCBiZSBhd2FyZSBvZiB0aGUgZmFjdCB0aGF0Cit5b3UgaGF2ZSBub3QgYWN0dWFsbHkgcmVhbGx5ICJjaGVja2VkIGluIiB5b3VyIGZpbGVzIGludG8gR2l0IHNvIGZhciwKK3lvdSd2ZSBvbmx5ICp0b2xkKiBHaXQgYWJvdXQgdGhlbS4KKworSG93ZXZlciwgc2luY2UgR2l0IGtub3dzIGFib3V0IHRoZW0sIHlvdSBjYW4gbm93IHN0YXJ0IHVzaW5nIHNvbWUgb2YgdGhlCittb3N0IGJhc2ljIEdpdCBjb21tYW5kcyB0byBtYW5pcHVsYXRlIHRoZSBmaWxlcyBvciBsb29rIGF0IHRoZWlyIHN0YXR1cy4KKworSW4gcGFydGljdWxhciwgbGV0J3Mgbm90IGV2ZW4gY2hlY2sgaW4gdGhlIHR3byBmaWxlcyBpbnRvIEdpdCB5ZXQsIHdlJ2xsCitzdGFydCBvZmYgYnkgYWRkaW5nIGFub3RoZXIgbGluZSB0byBgaGVsbG9gIGZpcnN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZWNobyAiSXQncyBhIG5ldyBkYXkgZm9yIGdpdCIgPj5oZWxsbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB5b3UgY2FuIG5vdywgc2luY2UgeW91IHRvbGQgR2l0IGFib3V0IHRoZSBwcmV2aW91cyBzdGF0ZSBvZiBgaGVsbG9gLCBhc2sKK0dpdCB3aGF0IGhhcyBjaGFuZ2VkIGluIHRoZSB0cmVlIGNvbXBhcmVkIHRvIHlvdXIgb2xkIGluZGV4LCB1c2luZyB0aGUKKydnaXQgZGlmZi1maWxlcycgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmLWZpbGVzCistLS0tLS0tLS0tLS0KKworT29wcy4gVGhhdCB3YXNuJ3QgdmVyeSByZWFkYWJsZS4gSXQganVzdCBzcGl0IG91dCBpdHMgb3duIGludGVybmFsCit2ZXJzaW9uIG9mIGEgJ2RpZmYnLCBidXQgdGhhdCBpbnRlcm5hbCB2ZXJzaW9uIHJlYWxseSBqdXN0IHRlbGxzIHlvdQordGhhdCBpdCBoYXMgbm90aWNlZCB0aGF0ICJoZWxsbyIgaGFzIGJlZW4gbW9kaWZpZWQsIGFuZCB0aGF0IHRoZSBvbGQgb2JqZWN0Citjb250ZW50cyBpdCBoYWQgaGF2ZSBiZWVuIHJlcGxhY2VkIHdpdGggc29tZXRoaW5nIGVsc2UuCisKK1RvIG1ha2UgaXQgcmVhZGFibGUsIHdlIGNhbiB0ZWxsICdnaXQgZGlmZi1maWxlcycgdG8gb3V0cHV0IHRoZQorZGlmZmVyZW5jZXMgYXMgYSBwYXRjaCwgdXNpbmcgdGhlIGAtcGAgZmxhZzoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmLWZpbGVzIC1wCitkaWZmIC0tZ2l0IGEvaGVsbG8gYi9oZWxsbworaW5kZXggNTU3ZGIwMy4uMjYzNDE0ZiAxMDA2NDQKKy0tLSBhL2hlbGxvCisrKysgYi9oZWxsbworQEAgLTEgKzEsMiBAQAorIEhlbGxvIFdvcmxkCisrSXQncyBhIG5ldyBkYXkgZm9yIGdpdAorLS0tLS0tLS0tLS0tCisKK2kuZS4gdGhlIGRpZmYgb2YgdGhlIGNoYW5nZSB3ZSBjYXVzZWQgYnkgYWRkaW5nIGFub3RoZXIgbGluZSB0byBgaGVsbG9gLgorCitJbiBvdGhlciB3b3JkcywgJ2dpdCBkaWZmLWZpbGVzJyBhbHdheXMgc2hvd3MgdXMgdGhlIGRpZmZlcmVuY2UgYmV0d2Vlbgord2hhdCBpcyByZWNvcmRlZCBpbiB0aGUgaW5kZXgsIGFuZCB3aGF0IGlzIGN1cnJlbnRseSBpbiB0aGUgd29ya2luZwordHJlZS4gVGhhdCdzIHZlcnkgdXNlZnVsLgorCitBIGNvbW1vbiBzaG9ydGhhbmQgZm9yIGBnaXQgZGlmZi1maWxlcyAtcGAgaXMgdG8ganVzdCB3cml0ZSBgZ2l0CitkaWZmYCwgd2hpY2ggd2lsbCBkbyB0aGUgc2FtZSB0aGluZy4KKworLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmCitkaWZmIC0tZ2l0IGEvaGVsbG8gYi9oZWxsbworaW5kZXggNTU3ZGIwMy4uMjYzNDE0ZiAxMDA2NDQKKy0tLSBhL2hlbGxvCisrKysgYi9oZWxsbworQEAgLTEgKzEsMiBAQAorIEhlbGxvIFdvcmxkCisrSXQncyBhIG5ldyBkYXkgZm9yIGdpdAorLS0tLS0tLS0tLS0tCisKKworQ29tbWl0dGluZyBHaXQgc3RhdGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdywgd2Ugd2FudCB0byBnbyB0byB0aGUgbmV4dCBzdGFnZSBpbiBHaXQsIHdoaWNoIGlzIHRvIHRha2UgdGhlIGZpbGVzCit0aGF0IEdpdCBrbm93cyBhYm91dCBpbiB0aGUgaW5kZXgsIGFuZCBjb21taXQgdGhlbSBhcyBhIHJlYWwgdHJlZS4gV2UgZG8KK3RoYXQgaW4gdHdvIHBoYXNlczogY3JlYXRpbmcgYSAndHJlZScgb2JqZWN0LCBhbmQgY29tbWl0dGluZyB0aGF0ICd0cmVlJworb2JqZWN0IGFzIGEgJ2NvbW1pdCcgb2JqZWN0IHRvZ2V0aGVyIHdpdGggYW4gZXhwbGFuYXRpb24gb2Ygd2hhdCB0aGUKK3RyZWUgd2FzIGFsbCBhYm91dCwgYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBvZiBob3cgd2UgY2FtZSB0byB0aGF0IHN0YXRlLgorCitDcmVhdGluZyBhIHRyZWUgb2JqZWN0IGlzIHRyaXZpYWwsIGFuZCBpcyBkb25lIHdpdGggJ2dpdCB3cml0ZS10cmVlJy4KK1RoZXJlIGFyZSBubyBvcHRpb25zIG9yIG90aGVyIGlucHV0OiBgZ2l0IHdyaXRlLXRyZWVgIHdpbGwgdGFrZSB0aGUKK2N1cnJlbnQgaW5kZXggc3RhdGUsIGFuZCB3cml0ZSBhbiBvYmplY3QgdGhhdCBkZXNjcmliZXMgdGhhdCB3aG9sZQoraW5kZXguIEluIG90aGVyIHdvcmRzLCB3ZSdyZSBub3cgdHlpbmcgdG9nZXRoZXIgYWxsIHRoZSBkaWZmZXJlbnQKK2ZpbGVuYW1lcyB3aXRoIHRoZWlyIGNvbnRlbnRzIChhbmQgdGhlaXIgcGVybWlzc2lvbnMpLCBhbmQgd2UncmUKK2NyZWF0aW5nIHRoZSBlcXVpdmFsZW50IG9mIGEgR2l0ICJkaXJlY3RvcnkiIG9iamVjdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB3cml0ZS10cmVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoaXMgd2lsbCBqdXN0IG91dHB1dCB0aGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIHRyZWUsIGluIHRoaXMgY2FzZQorKGlmIHlvdSBoYXZlIGRvbmUgZXhhY3RseSBhcyBJJ3ZlIGRlc2NyaWJlZCkgaXQgc2hvdWxkIGJlCisKKy0tLS0tLS0tLS0tLS0tLS0KKzg5ODhkYTE1ZDA3N2Q0ODI5ZmM1MWQ4NTQ0YzA5N2RlZjY2NDRkYmIKKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggaXMgYW5vdGhlciBpbmNvbXByZWhlbnNpYmxlIG9iamVjdCBuYW1lLiBBZ2FpbiwgaWYgeW91IHdhbnQgdG8sCit5b3UgY2FuIHVzZSBgZ2l0IGNhdC1maWxlIC10IDg5ODhkLi4uYCB0byBzZWUgdGhhdCB0aGlzIHRpbWUgdGhlIG9iamVjdAoraXMgbm90IGEgImJsb2IiIG9iamVjdCwgYnV0IGEgInRyZWUiIG9iamVjdCAoeW91IGNhbiBhbHNvIHVzZQorYGdpdCBjYXQtZmlsZWAgdG8gYWN0dWFsbHkgb3V0cHV0IHRoZSByYXcgb2JqZWN0IGNvbnRlbnRzLCBidXQgeW91J2xsIHNlZQorbWFpbmx5IGEgYmluYXJ5IG1lc3MsIHNvIHRoYXQncyBsZXNzIGludGVyZXN0aW5nKS4KKworSG93ZXZlciAtLSBub3JtYWxseSB5b3UnZCBuZXZlciB1c2UgJ2dpdCB3cml0ZS10cmVlJyBvbiBpdHMgb3duLCBiZWNhdXNlCitub3JtYWxseSB5b3UgYWx3YXlzIGNvbW1pdCBhIHRyZWUgaW50byBhIGNvbW1pdCBvYmplY3QgdXNpbmcgdGhlCisnZ2l0IGNvbW1pdC10cmVlJyBjb21tYW5kLiBJbiBmYWN0LCBpdCdzIGVhc2llciB0byBub3QgYWN0dWFsbHkgdXNlCisnZ2l0IHdyaXRlLXRyZWUnIG9uIGl0cyBvd24gYXQgYWxsLCBidXQgdG8ganVzdCBwYXNzIGl0cyByZXN1bHQgaW4gYXMgYW4KK2FyZ3VtZW50IHRvICdnaXQgY29tbWl0LXRyZWUnLgorCisnZ2l0IGNvbW1pdC10cmVlJyBub3JtYWxseSB0YWtlcyBzZXZlcmFsIGFyZ3VtZW50cyAtLSBpdCB3YW50cyB0byBrbm93Cit3aGF0IHRoZSAncGFyZW50JyBvZiBhIGNvbW1pdCB3YXMsIGJ1dCBzaW5jZSB0aGlzIGlzIHRoZSBmaXJzdCBjb21taXQKK2V2ZXIgaW4gdGhpcyBuZXcgcmVwb3NpdG9yeSwgYW5kIGl0IGhhcyBubyBwYXJlbnRzLCB3ZSBvbmx5IG5lZWQgdG8gcGFzcyBpbgordGhlIG9iamVjdCBuYW1lIG9mIHRoZSB0cmVlLiBIb3dldmVyLCAnZ2l0IGNvbW1pdC10cmVlJyBhbHNvIHdhbnRzIHRvIGdldCBhCitjb21taXQgbWVzc2FnZSBvbiBpdHMgc3RhbmRhcmQgaW5wdXQsIGFuZCBpdCB3aWxsIHdyaXRlIG91dCB0aGUgcmVzdWx0aW5nCitvYmplY3QgbmFtZSBmb3IgdGhlIGNvbW1pdCB0byBpdHMgc3RhbmRhcmQgb3V0cHV0LgorCitBbmQgdGhpcyBpcyB3aGVyZSB3ZSBjcmVhdGUgdGhlIGAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyYCBmaWxlCit3aGljaCBpcyBwb2ludGVkIGF0IGJ5IGBIRUFEYC4gVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4KK3RoZSByZWZlcmVuY2UgdG8gdGhlIHRvcC1vZi10cmVlIG9mIHRoZSBtYXN0ZXIgYnJhbmNoLCBhbmQgc2luY2UKK3RoYXQncyBleGFjdGx5IHdoYXQgJ2dpdCBjb21taXQtdHJlZScgc3BpdHMgb3V0LCB3ZSBjYW4gZG8gdGhpcworYWxsIHdpdGggYSBzZXF1ZW5jZSBvZiBzaW1wbGUgc2hlbGwgY29tbWFuZHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpCiskIGNvbW1pdD0kKGVjaG8gJ0luaXRpYWwgY29tbWl0JyB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkKKyQgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhpcyBjYXNlIHRoaXMgY3JlYXRlcyBhIHRvdGFsbHkgbmV3IGNvbW1pdCB0aGF0IGlzIG5vdCByZWxhdGVkIHRvCithbnl0aGluZyBlbHNlLiBOb3JtYWxseSB5b3UgZG8gdGhpcyBvbmx5ICpvbmNlKiBmb3IgYSBwcm9qZWN0IGV2ZXIsIGFuZAorYWxsIGxhdGVyIGNvbW1pdHMgd2lsbCBiZSBwYXJlbnRlZCBvbiB0b3Agb2YgYW4gZWFybGllciBjb21taXQuCisKK0FnYWluLCBub3JtYWxseSB5b3UnZCBuZXZlciBhY3R1YWxseSBkbyB0aGlzIGJ5IGhhbmQuIFRoZXJlIGlzIGEKK2hlbHBmdWwgc2NyaXB0IGNhbGxlZCBgZ2l0IGNvbW1pdGAgdGhhdCB3aWxsIGRvIGFsbCBvZiB0aGlzIGZvciB5b3UuIFNvCit5b3UgY291bGQgaGF2ZSBqdXN0IHdyaXR0ZW4gYGdpdCBjb21taXRgCitpbnN0ZWFkLCBhbmQgaXQgd291bGQgaGF2ZSBkb25lIHRoZSBhYm92ZSBtYWdpYyBzY3JpcHRpbmcgZm9yIHlvdS4KKworCitNYWtpbmcgYSBjaGFuZ2UKKy0tLS0tLS0tLS0tLS0tLQorCitSZW1lbWJlciBob3cgd2UgZGlkIHRoZSAnZ2l0IHVwZGF0ZS1pbmRleCcgb24gZmlsZSBgaGVsbG9gIGFuZCB0aGVuIHdlCitjaGFuZ2VkIGBoZWxsb2AgYWZ0ZXJ3YXJkLCBhbmQgY291bGQgY29tcGFyZSB0aGUgbmV3IHN0YXRlIG9mIGBoZWxsb2Agd2l0aCB0aGUKK3N0YXRlIHdlIHNhdmVkIGluIHRoZSBpbmRleCBmaWxlPworCitGdXJ0aGVyLCByZW1lbWJlciBob3cgSSBzYWlkIHRoYXQgJ2dpdCB3cml0ZS10cmVlJyB3cml0ZXMgdGhlIGNvbnRlbnRzCitvZiB0aGUgKmluZGV4KiBmaWxlIHRvIHRoZSB0cmVlLCBhbmQgdGh1cyB3aGF0IHdlIGp1c3QgY29tbWl0dGVkIHdhcyBpbgorZmFjdCB0aGUgKm9yaWdpbmFsKiBjb250ZW50cyBvZiB0aGUgZmlsZSBgaGVsbG9gLCBub3QgdGhlIG5ldyBvbmVzLiBXZSBkaWQKK3RoYXQgb24gcHVycG9zZSwgdG8gc2hvdyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbmRleCBzdGF0ZSwgYW5kIHRoZQorc3RhdGUgaW4gdGhlIHdvcmtpbmcgdHJlZSwgYW5kIGhvdyB0aGV5IGRvbid0IGhhdmUgdG8gbWF0Y2gsIGV2ZW4KK3doZW4gd2UgY29tbWl0IHRoaW5ncy4KKworQXMgYmVmb3JlLCBpZiB3ZSBkbyBgZ2l0IGRpZmYtZmlsZXMgLXBgIGluIG91ciBnaXQtdHV0b3JpYWwgcHJvamVjdCwKK3dlJ2xsIHN0aWxsIHNlZSB0aGUgc2FtZSBkaWZmZXJlbmNlIHdlIHNhdyBsYXN0IHRpbWU6IHRoZSBpbmRleCBmaWxlCitoYXNuJ3QgY2hhbmdlZCBieSB0aGUgYWN0IG9mIGNvbW1pdHRpbmcgYW55dGhpbmcuIEhvd2V2ZXIsIG5vdyB0aGF0IHdlCitoYXZlIGNvbW1pdHRlZCBzb21ldGhpbmcsIHdlIGNhbiBhbHNvIGxlYXJuIHRvIHVzZSBhIG5ldyBjb21tYW5kOgorJ2dpdCBkaWZmLWluZGV4Jy4KKworVW5saWtlICdnaXQgZGlmZi1maWxlcycsIHdoaWNoIHNob3dlZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBpbmRleAorZmlsZSBhbmQgdGhlIHdvcmtpbmcgdHJlZSwgJ2dpdCBkaWZmLWluZGV4JyBzaG93cyB0aGUgZGlmZmVyZW5jZXMKK2JldHdlZW4gYSBjb21taXR0ZWQgKnRyZWUqIGFuZCBlaXRoZXIgdGhlIGluZGV4IGZpbGUgb3IgdGhlIHdvcmtpbmcKK3RyZWUuIEluIG90aGVyIHdvcmRzLCAnZ2l0IGRpZmYtaW5kZXgnIHdhbnRzIGEgdHJlZSB0byBiZSBkaWZmZWQKK2FnYWluc3QsIGFuZCBiZWZvcmUgd2UgZGlkIHRoZSBjb21taXQsIHdlIGNvdWxkbid0IGRvIHRoYXQsIGJlY2F1c2Ugd2UKK2RpZG4ndCBoYXZlIGFueXRoaW5nIHRvIGRpZmYgYWdhaW5zdC4KKworQnV0IG5vdyB3ZSBjYW4gZG8KKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZi1pbmRleCAtcCBIRUFECistLS0tLS0tLS0tLS0tLS0tCisKKyh3aGVyZSBgLXBgIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGl0IGRpZCBpbiAnZ2l0IGRpZmYtZmlsZXMnKSwgYW5kIGl0Cit3aWxsIHNob3cgdXMgdGhlIHNhbWUgZGlmZmVyZW5jZSwgYnV0IGZvciBhIHRvdGFsbHkgZGlmZmVyZW50IHJlYXNvbi4KK05vdyB3ZSdyZSBjb21wYXJpbmcgdGhlIHdvcmtpbmcgdHJlZSBub3QgYWdhaW5zdCB0aGUgaW5kZXggZmlsZSwKK2J1dCBhZ2FpbnN0IHRoZSB0cmVlIHdlIGp1c3Qgd3JvdGUuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRob3NlIHR3bworYXJlIG9idmlvdXNseSB0aGUgc2FtZSwgc28gd2UgZ2V0IHRoZSBzYW1lIHJlc3VsdC4KKworQWdhaW4sIGJlY2F1c2UgdGhpcyBpcyBhIGNvbW1vbiBvcGVyYXRpb24sIHlvdSBjYW4gYWxzbyBqdXN0IHNob3J0aGFuZAoraXQgd2l0aAorCistLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggZW5kcyB1cCBkb2luZyB0aGUgYWJvdmUgZm9yIHlvdS4KKworSW4gb3RoZXIgd29yZHMsICdnaXQgZGlmZi1pbmRleCcgbm9ybWFsbHkgY29tcGFyZXMgYSB0cmVlIGFnYWluc3QgdGhlCit3b3JraW5nIHRyZWUsIGJ1dCB3aGVuIGdpdmVuIHRoZSBgLS1jYWNoZWRgIGZsYWcsIGl0IGlzIHRvbGQgdG8KK2luc3RlYWQgY29tcGFyZSBhZ2FpbnN0IGp1c3QgdGhlIGluZGV4IGNhY2hlIGNvbnRlbnRzLCBhbmQgaWdub3JlIHRoZQorY3VycmVudCB3b3JraW5nIHRyZWUgc3RhdGUgZW50aXJlbHkuIFNpbmNlIHdlIGp1c3Qgd3JvdGUgdGhlIGluZGV4CitmaWxlIHRvIEhFQUQsIGRvaW5nIGBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtcCBIRUFEYCBzaG91bGQgdGh1cyByZXR1cm4KK2FuIGVtcHR5IHNldCBvZiBkaWZmZXJlbmNlcywgYW5kIHRoYXQncyBleGFjdGx5IHdoYXQgaXQgZG9lcy4KKworW05PVEVdCis9PT09PT09PT09PT09PT09CisnZ2l0IGRpZmYtaW5kZXgnIHJlYWxseSBhbHdheXMgdXNlcyB0aGUgaW5kZXggZm9yIGl0cworY29tcGFyaXNvbnMsIGFuZCBzYXlpbmcgdGhhdCBpdCBjb21wYXJlcyBhIHRyZWUgYWdhaW5zdCB0aGUgd29ya2luZwordHJlZSBpcyB0aHVzIG5vdCBzdHJpY3RseSBhY2N1cmF0ZS4gSW4gcGFydGljdWxhciwgdGhlIGxpc3Qgb2YKK2ZpbGVzIHRvIGNvbXBhcmUgKHRoZSAibWV0YS1kYXRhIikgKmFsd2F5cyogY29tZXMgZnJvbSB0aGUgaW5kZXggZmlsZSwKK3JlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgYC0tY2FjaGVkYCBmbGFnIGlzIHVzZWQgb3Igbm90LiBUaGUgYC0tY2FjaGVkYAorZmxhZyByZWFsbHkgb25seSBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZpbGUgKmNvbnRlbnRzKiB0byBiZSBjb21wYXJlZAorY29tZSBmcm9tIHRoZSB3b3JraW5nIHRyZWUgb3Igbm90LgorCitUaGlzIGlzIG5vdCBoYXJkIHRvIHVuZGVyc3RhbmQsIGFzIHNvb24gYXMgeW91IHJlYWxpemUgdGhhdCBHaXQgc2ltcGx5CituZXZlciBrbm93cyAob3IgY2FyZXMpIGFib3V0IGZpbGVzIHRoYXQgaXQgaXMgbm90IHRvbGQgYWJvdXQKK2V4cGxpY2l0bHkuIEdpdCB3aWxsIG5ldmVyIGdvICpsb29raW5nKiBmb3IgZmlsZXMgdG8gY29tcGFyZSwgaXQKK2V4cGVjdHMgeW91IHRvIHRlbGwgaXQgd2hhdCB0aGUgZmlsZXMgYXJlLCBhbmQgdGhhdCdzIHdoYXQgdGhlIGluZGV4CitpcyB0aGVyZSBmb3IuCis9PT09PT09PT09PT09PT09CisKK0hvd2V2ZXIsIG91ciBuZXh0IHN0ZXAgaXMgdG8gY29tbWl0IHRoZSAqY2hhbmdlKiB3ZSBkaWQsIGFuZCBhZ2FpbiwgdG8KK3VuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uLCBrZWVwIGluIG1pbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAid29ya2luZwordHJlZSBjb250ZW50cyIsICJpbmRleCBmaWxlIiBhbmQgImNvbW1pdHRlZCB0cmVlIi4gV2UgaGF2ZSBjaGFuZ2VzCitpbiB0aGUgd29ya2luZyB0cmVlIHRoYXQgd2Ugd2FudCB0byBjb21taXQsIGFuZCB3ZSBhbHdheXMgaGF2ZSB0bword29yayB0aHJvdWdoIHRoZSBpbmRleCBmaWxlLCBzbyB0aGUgZmlyc3QgdGhpbmcgd2UgbmVlZCB0byBkbyBpcyB0bwordXBkYXRlIHRoZSBpbmRleCBjYWNoZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB1cGRhdGUtaW5kZXggaGVsbG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisobm90ZSBob3cgd2UgZGlkbid0IG5lZWQgdGhlIGAtLWFkZGAgZmxhZyB0aGlzIHRpbWUsIHNpbmNlIEdpdCBrbmV3CithYm91dCB0aGUgZmlsZSBhbHJlYWR5KS4KKworTm90ZSB3aGF0IGhhcHBlbnMgdG8gdGhlIGRpZmZlcmVudCAnZ2l0IGRpZmYte2FzdGVyaXNrfScgdmVyc2lvbnMgaGVyZS4KK0FmdGVyIHdlJ3ZlIHVwZGF0ZWQgYGhlbGxvYCBpbiB0aGUgaW5kZXgsIGBnaXQgZGlmZi1maWxlcyAtcGAgbm93IHNob3dzIG5vCitkaWZmZXJlbmNlcywgYnV0IGBnaXQgZGlmZi1pbmRleCAtcCBIRUFEYCBzdGlsbCAqZG9lcyogc2hvdyB0aGF0IHRoZQorY3VycmVudCBzdGF0ZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc3RhdGUgd2UgY29tbWl0dGVkLiBJbiBmYWN0LCBub3cKKydnaXQgZGlmZi1pbmRleCcgc2hvd3MgdGhlIHNhbWUgZGlmZmVyZW5jZSB3aGV0aGVyIHdlIHVzZSB0aGUgYC0tY2FjaGVkYAorZmxhZyBvciBub3QsIHNpbmNlIG5vdyB0aGUgaW5kZXggaXMgY29oZXJlbnQgd2l0aCB0aGUgd29ya2luZyB0cmVlLgorCitOb3csIHNpbmNlIHdlJ3ZlIHVwZGF0ZWQgYGhlbGxvYCBpbiB0aGUgaW5kZXgsIHdlIGNhbiBjb21taXQgdGhlIG5ldwordmVyc2lvbi4gV2UgY291bGQgZG8gaXQgYnkgd3JpdGluZyB0aGUgdHJlZSBieSBoYW5kIGFnYWluLCBhbmQKK2NvbW1pdHRpbmcgdGhlIHRyZWUgKHRoaXMgdGltZSB3ZSdkIGhhdmUgdG8gdXNlIHRoZSBgLXAgSEVBRGAgZmxhZyB0bwordGVsbCBjb21taXQgdGhhdCB0aGUgSEVBRCB3YXMgdGhlICpwYXJlbnQqIG9mIHRoZSBuZXcgY29tbWl0LCBhbmQgdGhhdAordGhpcyB3YXNuJ3QgYW4gaW5pdGlhbCBjb21taXQgYW55IG1vcmUpLCBidXQgeW91J3ZlIGRvbmUgdGhhdCBvbmNlCithbHJlYWR5LCBzbyBsZXQncyBqdXN0IHVzZSB0aGUgaGVscGZ1bCBzY3JpcHQgdGhpcyB0aW1lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHN0YXJ0cyBhbiBlZGl0b3IgZm9yIHlvdSB0byB3cml0ZSB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIHRlbGxzIHlvdQorYSBiaXQgYWJvdXQgd2hhdCB5b3UgaGF2ZSBkb25lLgorCitXcml0ZSB3aGF0ZXZlciBtZXNzYWdlIHlvdSB3YW50LCBhbmQgYWxsIHRoZSBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggJyMnCit3aWxsIGJlIHBydW5lZCBvdXQsIGFuZCB0aGUgcmVzdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbW1pdCBtZXNzYWdlIGZvcgordGhlIGNoYW5nZS4gSWYgeW91IGRlY2lkZSB5b3UgZG9uJ3Qgd2FudCB0byBjb21taXQgYW55dGhpbmcgYWZ0ZXIgYWxsIGF0Cit0aGlzIHBvaW50ICh5b3UgY2FuIGNvbnRpbnVlIHRvIGVkaXQgdGhpbmdzIGFuZCB1cGRhdGUgdGhlIGluZGV4KSwgeW91CitjYW4ganVzdCBsZWF2ZSBhbiBlbXB0eSBtZXNzYWdlLiBPdGhlcndpc2UgYGdpdCBjb21taXRgIHdpbGwgY29tbWl0Cit0aGUgY2hhbmdlIGZvciB5b3UuCisKK1lvdSd2ZSBub3cgbWFkZSB5b3VyIGZpcnN0IHJlYWwgR2l0IGNvbW1pdC4gQW5kIGlmIHlvdSdyZSBpbnRlcmVzdGVkIGluCitsb29raW5nIGF0IHdoYXQgYGdpdCBjb21taXRgIHJlYWxseSBkb2VzLCBmZWVsIGZyZWUgdG8gaW52ZXN0aWdhdGU6CitpdCdzIGEgZmV3IHZlcnkgc2ltcGxlIHNoZWxsIHNjcmlwdHMgdG8gZ2VuZXJhdGUgdGhlIGhlbHBmdWwgKD8pIGNvbW1pdAorbWVzc2FnZSBoZWFkZXJzLCBhbmQgYSBmZXcgb25lLWxpbmVycyB0aGF0IGFjdHVhbGx5IGRvIHRoZQorY29tbWl0IGl0c2VsZiAoJ2dpdCBjb21taXQnKS4KKworCitJbnNwZWN0aW5nIENoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGlsZSBjcmVhdGluZyBjaGFuZ2VzIGlzIHVzZWZ1bCwgaXQncyBldmVuIG1vcmUgdXNlZnVsIGlmIHlvdSBjYW4gdGVsbAorbGF0ZXIgd2hhdCBjaGFuZ2VkLiBUaGUgbW9zdCB1c2VmdWwgY29tbWFuZCBmb3IgdGhpcyBpcyBhbm90aGVyIG9mIHRoZQorJ2RpZmYnIGZhbWlseSwgbmFtZWx5ICdnaXQgZGlmZi10cmVlJy4KKworJ2dpdCBkaWZmLXRyZWUnIGNhbiBiZSBnaXZlbiB0d28gYXJiaXRyYXJ5IHRyZWVzLCBhbmQgaXQgd2lsbCB0ZWxsIHlvdSB0aGUKK2RpZmZlcmVuY2VzIGJldHdlZW4gdGhlbS4gUGVyaGFwcyBldmVuIG1vcmUgY29tbW9ubHksIHRob3VnaCwgeW91IGNhbgorZ2l2ZSBpdCBqdXN0IGEgc2luZ2xlIGNvbW1pdCBvYmplY3QsIGFuZCBpdCB3aWxsIGZpZ3VyZSBvdXQgdGhlIHBhcmVudAorb2YgdGhhdCBjb21taXQgaXRzZWxmLCBhbmQgc2hvdyB0aGUgZGlmZmVyZW5jZSBkaXJlY3RseS4gVGh1cywgdG8gZ2V0Cit0aGUgc2FtZSBkaWZmIHRoYXQgd2UndmUgYWxyZWFkeSBzZWVuIHNldmVyYWwgdGltZXMsIHdlIGNhbiBub3cgZG8KKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZi10cmVlIC1wIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0KKworKGFnYWluLCBgLXBgIG1lYW5zIHRvIHNob3cgdGhlIGRpZmZlcmVuY2UgYXMgYSBodW1hbi1yZWFkYWJsZSBwYXRjaCksCithbmQgaXQgd2lsbCBzaG93IHdoYXQgdGhlIGxhc3QgY29tbWl0IChpbiBgSEVBRGApIGFjdHVhbGx5IGNoYW5nZWQuCisKK1tOT1RFXQorPT09PT09PT09PT09CitIZXJlIGlzIGFuIEFTQ0lJIGFydCBieSBKb24gTG9lbGlnZXIgdGhhdCBpbGx1c3RyYXRlcyBob3cKK3ZhcmlvdXMgJ2RpZmYte2FzdGVyaXNrfScgY29tbWFuZHMgY29tcGFyZSB0aGluZ3MuCisKKyAgICAgICAgICAgICAgICAgICAgICBkaWZmLXRyZWUKKyAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgViAgICBWCisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgfCBPYmplY3QgREIgfAorICAgICAgICAgICAgICAgICAgICB8ICBCYWNraW5nICB8CisgICAgICAgICAgICAgICAgICAgIHwgICBTdG9yZSAgIHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICAgIF4gICAgXgorICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgICAgICAgICAgICAgIHwgICAgfCAgZGlmZi1pbmRleCAtLWNhY2hlZAorICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAorICAgICAgICAgIGRpZmYtaW5kZXggIHwgICAgVgorICAgICAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICB8ICB8ICAgSW5kZXggICB8CisgICAgICAgICAgICAgICAgICAgICAgfCAgfCAgImNhY2hlIiAgfAorICAgICAgICAgICAgICAgICAgICAgIHwgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIF4KKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwgIGRpZmYtZmlsZXMKKyAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICBWICAgIFYKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICB8ICBXb3JraW5nICB8CisgICAgICAgICAgICAgICAgICAgIHwgRGlyZWN0b3J5IHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworPT09PT09PT09PT09CisKK01vcmUgaW50ZXJlc3RpbmdseSwgeW91IGNhbiBhbHNvIGdpdmUgJ2dpdCBkaWZmLXRyZWUnIHRoZSBgLS1wcmV0dHlgIGZsYWcsCit3aGljaCB0ZWxscyBpdCB0byBhbHNvIHNob3cgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBhdXRob3IgYW5kIGRhdGUgb2YgdGhlCitjb21taXQsIGFuZCB5b3UgY2FuIHRlbGwgaXQgdG8gc2hvdyBhIHdob2xlIHNlcmllcyBvZiBkaWZmcy4KK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gdGVsbCBpdCB0byBiZSAic2lsZW50IiwgYW5kIG5vdCBzaG93IHRoZSBkaWZmcyBhdAorYWxsLCBidXQganVzdCBzaG93IHRoZSBhY3R1YWwgY29tbWl0IG1lc3NhZ2UuCisKK0luIGZhY3QsIHRvZ2V0aGVyIHdpdGggdGhlICdnaXQgcmV2LWxpc3QnIHByb2dyYW0gKHdoaWNoIGdlbmVyYXRlcyBhCitsaXN0IG9mIHJldmlzaW9ucyksICdnaXQgZGlmZi10cmVlJyBlbmRzIHVwIGJlaW5nIGEgdmVyaXRhYmxlIGZvdW50IG9mCitjaGFuZ2VzLiAgWW91IGNhbiBlbXVsYXRlIGBnaXQgbG9nYCwgYGdpdCBsb2cgLXBgLCBldGMuIHdpdGggYSB0cml2aWFsCitzY3JpcHQgdGhhdCBwaXBlcyB0aGUgb3V0cHV0IG9mIGBnaXQgcmV2LWxpc3RgIHRvIGBnaXQgZGlmZi10cmVlIC0tc3RkaW5gLAord2hpY2ggd2FzIGV4YWN0bHkgaG93IGVhcmx5IHZlcnNpb25zIG9mIGBnaXQgbG9nYCB3ZXJlIGltcGxlbWVudGVkLgorCisKK1RhZ2dpbmcgYSB2ZXJzaW9uCistLS0tLS0tLS0tLS0tLS0tLQorCitJbiBHaXQsIHRoZXJlIGFyZSB0d28ga2luZHMgb2YgdGFncywgYSAibGlnaHQiIG9uZSwgYW5kIGFuICJhbm5vdGF0ZWQgdGFnIi4KKworQSAibGlnaHQiIHRhZyBpcyB0ZWNobmljYWxseSBub3RoaW5nIG1vcmUgdGhhbiBhIGJyYW5jaCwgZXhjZXB0IHdlIHB1dAoraXQgaW4gdGhlIGAuZ2l0L3JlZnMvdGFncy9gIHN1YmRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNhbGxpbmcgaXQgYSBgaGVhZGAuCitTbyB0aGUgc2ltcGxlc3QgZm9ybSBvZiB0YWcgaW52b2x2ZXMgbm90aGluZyBtb3JlIHRoYW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgbXktZmlyc3QtdGFnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2gganVzdCB3cml0ZXMgdGhlIGN1cnJlbnQgYEhFQURgIGludG8gdGhlIGAuZ2l0L3JlZnMvdGFncy9teS1maXJzdC10YWdgCitmaWxlLCBhZnRlciB3aGljaCBwb2ludCB5b3UgY2FuIHRoZW4gdXNlIHRoaXMgc3ltYm9saWMgbmFtZSBmb3IgdGhhdAorcGFydGljdWxhciBzdGF0ZS4gWW91IGNhbiwgZm9yIGV4YW1wbGUsIGRvCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgbXktZmlyc3QtdGFnCistLS0tLS0tLS0tLS0tLS0tCisKK3RvIGRpZmYgeW91ciBjdXJyZW50IHN0YXRlIGFnYWluc3QgdGhhdCB0YWcgd2hpY2ggYXQgdGhpcyBwb2ludCB3aWxsCitvYnZpb3VzbHkgYmUgYW4gZW1wdHkgZGlmZiwgYnV0IGlmIHlvdSBjb250aW51ZSB0byBkZXZlbG9wIGFuZCBjb21taXQKK3N0dWZmLCB5b3UgY2FuIHVzZSB5b3VyIHRhZyBhcyBhbiAiYW5jaG9yLXBvaW50IiB0byBzZWUgd2hhdCBoYXMgY2hhbmdlZAorc2luY2UgeW91IHRhZ2dlZCBpdC4KKworQW4gImFubm90YXRlZCB0YWciIGlzIGFjdHVhbGx5IGEgcmVhbCBHaXQgb2JqZWN0LCBhbmQgY29udGFpbnMgbm90IG9ubHkgYQorcG9pbnRlciB0byB0aGUgc3RhdGUgeW91IHdhbnQgdG8gdGFnLCBidXQgYWxzbyBhIHNtYWxsIHRhZyBuYW1lIGFuZAorbWVzc2FnZSwgYWxvbmcgd2l0aCBvcHRpb25hbGx5IGEgUEdQIHNpZ25hdHVyZSB0aGF0IHNheXMgdGhhdCB5ZXMsCit5b3UgcmVhbGx5IGRpZAordGhhdCB0YWcuIFlvdSBjcmVhdGUgdGhlc2UgYW5ub3RhdGVkIHRhZ3Mgd2l0aCBlaXRoZXIgdGhlIGAtYWAgb3IKK2Atc2AgZmxhZyB0byAnZ2l0IHRhZyc6CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHRhZyAtcyA8dGFnbmFtZT4KKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCBzaWduIHRoZSBjdXJyZW50IGBIRUFEYCAoYnV0IHlvdSBjYW4gYWxzbyBnaXZlIGl0IGFub3RoZXIKK2FyZ3VtZW50IHRoYXQgc3BlY2lmaWVzIHRoZSB0aGluZyB0byB0YWcsIGUuZy4sIHlvdSBjb3VsZCBoYXZlIHRhZ2dlZCB0aGUKK2N1cnJlbnQgYG15YnJhbmNoYCBwb2ludCBieSB1c2luZyBgZ2l0IHRhZyA8dGFnbmFtZT4gbXlicmFuY2hgKS4KKworWW91IG5vcm1hbGx5IG9ubHkgZG8gc2lnbmVkIHRhZ3MgZm9yIG1ham9yIHJlbGVhc2VzIG9yIHRoaW5ncworbGlrZSB0aGF0LCB3aGlsZSB0aGUgbGlnaHQtd2VpZ2h0IHRhZ3MgYXJlIHVzZWZ1bCBmb3IgYW55IG1hcmtpbmcgeW91Cit3YW50IHRvIGRvIC0tIGFueSB0aW1lIHlvdSBkZWNpZGUgdGhhdCB5b3Ugd2FudCB0byByZW1lbWJlciBhIGNlcnRhaW4KK3BvaW50LCBqdXN0IGNyZWF0ZSBhIHByaXZhdGUgdGFnIGZvciBpdCwgYW5kIHlvdSBoYXZlIGEgbmljZSBzeW1ib2xpYworbmFtZSBmb3IgdGhlIHN0YXRlIGF0IHRoYXQgcG9pbnQuCisKKworQ29weWluZyByZXBvc2l0b3JpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCByZXBvc2l0b3JpZXMgYXJlIG5vcm1hbGx5IHRvdGFsbHkgc2VsZi1zdWZmaWNpZW50IGFuZCByZWxvY2F0YWJsZS4KK1VubGlrZSBDVlMsIGZvciBleGFtcGxlLCB0aGVyZSBpcyBubyBzZXBhcmF0ZSBub3Rpb24gb2YKKyJyZXBvc2l0b3J5IiBhbmQgIndvcmtpbmcgdHJlZSIuIEEgR2l0IHJlcG9zaXRvcnkgbm9ybWFsbHkgKmlzKiB0aGUKK3dvcmtpbmcgdHJlZSwgd2l0aCB0aGUgbG9jYWwgR2l0IGluZm9ybWF0aW9uIGhpZGRlbiBpbiB0aGUgYC5naXRgCitzdWJkaXJlY3RvcnkuIFRoZXJlIGlzIG5vdGhpbmcgZWxzZS4gV2hhdCB5b3Ugc2VlIGlzIHdoYXQgeW91IGdvdC4KKworW05PVEVdCitZb3UgY2FuIHRlbGwgR2l0IHRvIHNwbGl0IHRoZSBHaXQgaW50ZXJuYWwgaW5mb3JtYXRpb24gZnJvbQordGhlIGRpcmVjdG9yeSB0aGF0IGl0IHRyYWNrcywgYnV0IHdlJ2xsIGlnbm9yZSB0aGF0IGZvciBub3c6IGl0J3Mgbm90Citob3cgbm9ybWFsIHByb2plY3RzIHdvcmssIGFuZCBpdCdzIHJlYWxseSBvbmx5IG1lYW50IGZvciBzcGVjaWFsIHVzZXMuCitTbyB0aGUgbWVudGFsIG1vZGVsIG9mICJ0aGUgR2l0IGluZm9ybWF0aW9uIGlzIGFsd2F5cyB0aWVkIGRpcmVjdGx5IHRvCit0aGUgd29ya2luZyB0cmVlIHRoYXQgaXQgZGVzY3JpYmVzIiBtYXkgbm90IGJlIHRlY2huaWNhbGx5IDEwMCUKK2FjY3VyYXRlLCBidXQgaXQncyBhIGdvb2QgbW9kZWwgZm9yIGFsbCBub3JtYWwgdXNlLgorCitUaGlzIGhhcyB0d28gaW1wbGljYXRpb25zOgorCisgLSBpZiB5b3UgZ3JvdyBib3JlZCB3aXRoIHRoZSB0dXRvcmlhbCByZXBvc2l0b3J5IHlvdSBjcmVhdGVkIChvciB5b3UndmUKKyAgIG1hZGUgYSBtaXN0YWtlIGFuZCB3YW50IHRvIHN0YXJ0IGFsbCBvdmVyKSwgeW91IGNhbiBqdXN0IGRvIHNpbXBsZQorKworLS0tLS0tLS0tLS0tLS0tLQorJCBybSAtcmYgZ2l0LXR1dG9yaWFsCistLS0tLS0tLS0tLS0tLS0tCisrCithbmQgaXQgd2lsbCBiZSBnb25lLiBUaGVyZSdzIG5vIGV4dGVybmFsIHJlcG9zaXRvcnksIGFuZCB0aGVyZSdzIG5vCitoaXN0b3J5IG91dHNpZGUgdGhlIHByb2plY3QgeW91IGNyZWF0ZWQuCisKKyAtIGlmIHlvdSB3YW50IHRvIG1vdmUgb3IgZHVwbGljYXRlIGEgR2l0IHJlcG9zaXRvcnksIHlvdSBjYW4gZG8gc28uIFRoZXJlCisgICBpcyAnZ2l0IGNsb25lJyBjb21tYW5kLCBidXQgaWYgYWxsIHlvdSB3YW50IHRvIGRvIGlzIGp1c3QgdG8KKyAgIGNyZWF0ZSBhIGNvcHkgb2YgeW91ciByZXBvc2l0b3J5ICh3aXRoIGFsbCB0aGUgZnVsbCBoaXN0b3J5IHRoYXQKKyAgIHdlbnQgYWxvbmcgd2l0aCBpdCksIHlvdSBjYW4gZG8gc28gd2l0aCBhIHJlZ3VsYXIKKyAgIGBjcCAtYSBnaXQtdHV0b3JpYWwgbmV3LWdpdC10dXRvcmlhbGAuCisrCitOb3RlIHRoYXQgd2hlbiB5b3UndmUgbW92ZWQgb3IgY29waWVkIGEgR2l0IHJlcG9zaXRvcnksIHlvdXIgR2l0IGluZGV4CitmaWxlICh3aGljaCBjYWNoZXMgdmFyaW91cyBpbmZvcm1hdGlvbiwgbm90YWJseSBzb21lIG9mIHRoZSAic3RhdCIKK2luZm9ybWF0aW9uIGZvciB0aGUgZmlsZXMgaW52b2x2ZWQpIHdpbGwgbGlrZWx5IG5lZWQgdG8gYmUgcmVmcmVzaGVkLgorU28gYWZ0ZXIgeW91IGRvIGEgYGNwIC1hYCB0byBjcmVhdGUgYSBuZXcgY29weSwgeW91J2xsIHdhbnQgdG8gZG8KKysKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKy0tLS0tLS0tLS0tLS0tLS0KKysKK2luIHRoZSBuZXcgcmVwb3NpdG9yeSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kZXggZmlsZSBpcyB1cC10by1kYXRlLgorCitOb3RlIHRoYXQgdGhlIHNlY29uZCBwb2ludCBpcyB0cnVlIGV2ZW4gYWNyb3NzIG1hY2hpbmVzLiBZb3UgY2FuCitkdXBsaWNhdGUgYSByZW1vdGUgR2l0IHJlcG9zaXRvcnkgd2l0aCAqYW55KiByZWd1bGFyIGNvcHkgbWVjaGFuaXNtLCBiZSBpdAorJ3NjcCcsICdyc3luYycgb3IgJ3dnZXQnLgorCitXaGVuIGNvcHlpbmcgYSByZW1vdGUgcmVwb3NpdG9yeSwgeW91J2xsIHdhbnQgdG8gYXQgYSBtaW5pbXVtIHVwZGF0ZSB0aGUKK2luZGV4IGNhY2hlIHdoZW4geW91IGRvIHRoaXMsIGFuZCBlc3BlY2lhbGx5IHdpdGggb3RoZXIgcGVvcGxlcycKK3JlcG9zaXRvcmllcyB5b3Ugb2Z0ZW4gd2FudCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kZXggY2FjaGUgaXMgaW4gc29tZQora25vd24gc3RhdGUgKHlvdSBkb24ndCBrbm93ICp3aGF0KiB0aGV5J3ZlIGRvbmUgYW5kIG5vdCB5ZXQgY2hlY2tlZCBpbiksCitzbyB1c3VhbGx5IHlvdSdsbCBwcmVjZWRlIHRoZSAnZ2l0IHVwZGF0ZS1pbmRleCcgd2l0aCBhCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IEhFQUQKKyQgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKy0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCBmb3JjZSBhIHRvdGFsIGluZGV4IHJlLWJ1aWxkIGZyb20gdGhlIHRyZWUgcG9pbnRlZCB0byBieSBgSEVBRGAuCitJdCByZXNldHMgdGhlIGluZGV4IGNvbnRlbnRzIHRvIGBIRUFEYCwgYW5kIHRoZW4gdGhlICdnaXQgdXBkYXRlLWluZGV4JworbWFrZXMgc3VyZSB0byBtYXRjaCB1cCBhbGwgaW5kZXggZW50cmllcyB3aXRoIHRoZSBjaGVja2VkLW91dCBmaWxlcy4KK0lmIHRoZSBvcmlnaW5hbCByZXBvc2l0b3J5IGhhZCB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIGl0cword29ya2luZyB0cmVlLCBgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2hgIG5vdGljZXMgdGhlbSBhbmQKK3RlbGxzIHlvdSB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KKworVGhlIGFib3ZlIGNhbiBhbHNvIGJlIHdyaXR0ZW4gYXMgc2ltcGx5CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc2V0CistLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBpbiBmYWN0IGEgbG90IG9mIHRoZSBjb21tb24gR2l0IGNvbW1hbmQgY29tYmluYXRpb25zIGNhbiBiZSBzY3JpcHRlZAord2l0aCB0aGUgYGdpdCB4eXpgIGludGVyZmFjZXMuICBZb3UgY2FuIGxlYXJuIHRoaW5ncyBieSBqdXN0IGxvb2tpbmcKK2F0IHdoYXQgdGhlIHZhcmlvdXMgZ2l0IHNjcmlwdHMgZG8uICBGb3IgZXhhbXBsZSwgYGdpdCByZXNldGAgdXNlZCB0byBiZQordGhlIGFib3ZlIHR3byBsaW5lcyBpbXBsZW1lbnRlZCBpbiAnZ2l0IHJlc2V0JywgYnV0IHNvbWUgdGhpbmdzIGxpa2UKKydnaXQgc3RhdHVzJyBhbmQgJ2dpdCBjb21taXQnIGFyZSBzbGlnaHRseSBtb3JlIGNvbXBsZXggc2NyaXB0cyBhcm91bmQKK3RoZSBiYXNpYyBHaXQgY29tbWFuZHMuCisKK01hbnkgKG1vc3Q/KSBwdWJsaWMgcmVtb3RlIHJlcG9zaXRvcmllcyB3aWxsIG5vdCBjb250YWluIGFueSBvZgordGhlIGNoZWNrZWQgb3V0IGZpbGVzIG9yIGV2ZW4gYW4gaW5kZXggZmlsZSwgYW5kIHdpbGwgKm9ubHkqIGNvbnRhaW4gdGhlCithY3R1YWwgY29yZSBHaXQgZmlsZXMuIFN1Y2ggYSByZXBvc2l0b3J5IHVzdWFsbHkgZG9lc24ndCBldmVuIGhhdmUgdGhlCitgLmdpdGAgc3ViZGlyZWN0b3J5LCBidXQgaGFzIGFsbCB0aGUgR2l0IGZpbGVzIGRpcmVjdGx5IGluIHRoZQorcmVwb3NpdG9yeS4KKworVG8gY3JlYXRlIHlvdXIgb3duIGxvY2FsIGxpdmUgY29weSBvZiBzdWNoIGEgInJhdyIgR2l0IHJlcG9zaXRvcnksIHlvdSdkCitmaXJzdCBjcmVhdGUgeW91ciBvd24gc3ViZGlyZWN0b3J5IGZvciB0aGUgcHJvamVjdCwgYW5kIHRoZW4gY29weSB0aGUKK3JhdyByZXBvc2l0b3J5IGNvbnRlbnRzIGludG8gdGhlIGAuZ2l0YCBkaXJlY3RvcnkuIEZvciBleGFtcGxlLCB0bworY3JlYXRlIHlvdXIgb3duIGNvcHkgb2YgdGhlIEdpdCByZXBvc2l0b3J5LCB5b3UnZCBkbyB0aGUgZm9sbG93aW5nCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgbWtkaXIgbXktZ2l0CiskIGNkIG15LWdpdAorJCByc3luYyAtckwgcnN5bmM6Ly9yc3luYy5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvIC5naXQKKy0tLS0tLS0tLS0tLS0tLS0KKworZm9sbG93ZWQgYnkKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVhZC10cmVlIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0KKwordG8gcG9wdWxhdGUgdGhlIGluZGV4LiBIb3dldmVyLCBub3cgeW91IGhhdmUgcG9wdWxhdGVkIHRoZSBpbmRleCwgYW5kCit5b3UgaGF2ZSBhbGwgdGhlIEdpdCBpbnRlcm5hbCBmaWxlcywgYnV0IHlvdSB3aWxsIG5vdGljZSB0aGF0IHlvdSBkb24ndAorYWN0dWFsbHkgaGF2ZSBhbnkgb2YgdGhlIHdvcmtpbmcgdHJlZSBmaWxlcyB0byB3b3JrIG9uLiBUbyBnZXQKK3Rob3NlLCB5b3UnZCBjaGVjayB0aGVtIG91dCB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1hCistLS0tLS0tLS0tLS0tLS0tCisKK3doZXJlIHRoZSBgLXVgIGZsYWcgbWVhbnMgdGhhdCB5b3Ugd2FudCB0aGUgY2hlY2tvdXQgdG8ga2VlcCB0aGUgaW5kZXgKK3VwLXRvLWRhdGUgKHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gcmVmcmVzaCBpdCBhZnRlcndhcmQpLCBhbmQgdGhlCitgLWFgIGZsYWcgbWVhbnMgImNoZWNrIG91dCBhbGwgZmlsZXMiIChpZiB5b3UgaGF2ZSBhIHN0YWxlIGNvcHkgb3IgYW4KK29sZGVyIHZlcnNpb24gb2YgYSBjaGVja2VkIG91dCB0cmVlIHlvdSBtYXkgYWxzbyBuZWVkIHRvIGFkZCB0aGUgYC1mYAorZmxhZyBmaXJzdCwgdG8gdGVsbCAnZ2l0IGNoZWNrb3V0LWluZGV4JyB0byAqZm9yY2UqIG92ZXJ3cml0aW5nIG9mIGFueSBvbGQKK2ZpbGVzKS4KKworQWdhaW4sIHRoaXMgY2FuIGFsbCBiZSBzaW1wbGlmaWVkIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgcnN5bmM6Ly9yc3luYy5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvIG15LWdpdAorJCBjZCBteS1naXQKKyQgZ2l0IGNoZWNrb3V0CistLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgZW5kIHVwIGRvaW5nIGFsbCBvZiB0aGUgYWJvdmUgZm9yIHlvdS4KKworWW91IGhhdmUgbm93IHN1Y2Nlc3NmdWxseSBjb3BpZWQgc29tZWJvZHkgZWxzZSdzIChtaW5lKSByZW1vdGUKK3JlcG9zaXRvcnksIGFuZCBjaGVja2VkIGl0IG91dC4KKworCitDcmVhdGluZyBhIG5ldyBicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCcmFuY2hlcyBpbiBHaXQgYXJlIHJlYWxseSBub3RoaW5nIG1vcmUgdGhhbiBwb2ludGVycyBpbnRvIHRoZSBHaXQKK29iamVjdCBkYXRhYmFzZSBmcm9tIHdpdGhpbiB0aGUgYC5naXQvcmVmcy9gIHN1YmRpcmVjdG9yeSwgYW5kIGFzIHdlCithbHJlYWR5IGRpc2N1c3NlZCwgdGhlIGBIRUFEYCBicmFuY2ggaXMgbm90aGluZyBidXQgYSBzeW1saW5rIHRvIG9uZSBvZgordGhlc2Ugb2JqZWN0IHBvaW50ZXJzLgorCitZb3UgY2FuIGF0IGFueSB0aW1lIGNyZWF0ZSBhIG5ldyBicmFuY2ggYnkganVzdCBwaWNraW5nIGFuIGFyYml0cmFyeQorcG9pbnQgaW4gdGhlIHByb2plY3QgaGlzdG9yeSwgYW5kIGp1c3Qgd3JpdGluZyB0aGUgU0hBLTEgbmFtZSBvZiB0aGF0CitvYmplY3QgaW50byBhIGZpbGUgdW5kZXIgYC5naXQvcmVmcy9oZWFkcy9gLiBZb3UgY2FuIHVzZSBhbnkgZmlsZW5hbWUgeW91Cit3YW50IChhbmQgaW5kZWVkLCBzdWJkaXJlY3RvcmllcyksIGJ1dCB0aGUgY29udmVudGlvbiBpcyB0aGF0IHRoZQorIm5vcm1hbCIgYnJhbmNoIGlzIGNhbGxlZCBgbWFzdGVyYC4gVGhhdCdzIGp1c3QgYSBjb252ZW50aW9uLCB0aG91Z2gsCithbmQgbm90aGluZyBlbmZvcmNlcyBpdC4KKworVG8gc2hvdyB0aGF0IGFzIGFuIGV4YW1wbGUsIGxldCdzIGdvIGJhY2sgdG8gdGhlIGdpdC10dXRvcmlhbCByZXBvc2l0b3J5IHdlCit1c2VkIGVhcmxpZXIsIGFuZCBjcmVhdGUgYSBicmFuY2ggaW4gaXQuIFlvdSBkbyB0aGF0IGJ5IHNpbXBseSBqdXN0CitzYXlpbmcgdGhhdCB5b3Ugd2FudCB0byBjaGVjayBvdXQgYSBuZXcgYnJhbmNoOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIG15YnJhbmNoCistLS0tLS0tLS0tLS0KKword2lsbCBjcmVhdGUgYSBuZXcgYnJhbmNoIGJhc2VkIGF0IHRoZSBjdXJyZW50IGBIRUFEYCBwb3NpdGlvbiwgYW5kIHN3aXRjaAordG8gaXQuCisKK1tOT1RFXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJZiB5b3UgbWFrZSB0aGUgZGVjaXNpb24gdG8gc3RhcnQgeW91ciBuZXcgYnJhbmNoIGF0IHNvbWUKK290aGVyIHBvaW50IGluIHRoZSBoaXN0b3J5IHRoYW4gdGhlIGN1cnJlbnQgYEhFQURgLCB5b3UgY2FuIGRvIHNvIGJ5CitqdXN0IHRlbGxpbmcgJ2dpdCBjaGVja291dCcgd2hhdCB0aGUgYmFzZSBvZiB0aGUgY2hlY2tvdXQgd291bGQgYmUuCitJbiBvdGhlciB3b3JkcywgaWYgeW91IGhhdmUgYW4gZWFybGllciB0YWcgb3IgYnJhbmNoLCB5b3UnZCBqdXN0IGRvCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2ggZWFybGllci1jb21taXQKKy0tLS0tLS0tLS0tLQorCithbmQgaXQgd291bGQgY3JlYXRlIHRoZSBuZXcgYnJhbmNoIGBteWJyYW5jaGAgYXQgdGhlIGVhcmxpZXIgY29tbWl0LAorYW5kIGNoZWNrIG91dCB0aGUgc3RhdGUgYXQgdGhhdCB0aW1lLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBjYW4gYWx3YXlzIGp1c3QganVtcCBiYWNrIHRvIHlvdXIgb3JpZ2luYWwgYG1hc3RlcmAgYnJhbmNoIGJ5IGRvaW5nCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbWFzdGVyCistLS0tLS0tLS0tLS0KKworKG9yIGFueSBvdGhlciBicmFuY2gtbmFtZSwgZm9yIHRoYXQgbWF0dGVyKSBhbmQgaWYgeW91IGZvcmdldCB3aGljaAorYnJhbmNoIHlvdSBoYXBwZW4gdG8gYmUgb24sIGEgc2ltcGxlCisKKy0tLS0tLS0tLS0tLQorJCBjYXQgLmdpdC9IRUFECistLS0tLS0tLS0tLS0KKword2lsbCB0ZWxsIHlvdSB3aGVyZSBpdCdzIHBvaW50aW5nLiAgVG8gZ2V0IHRoZSBsaXN0IG9mIGJyYW5jaGVzCit5b3UgaGF2ZSwgeW91IGNhbiBzYXkKKworLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2gKKy0tLS0tLS0tLS0tLQorCit3aGljaCB1c2VkIHRvIGJlIG5vdGhpbmcgbW9yZSB0aGFuIGEgc2ltcGxlIHNjcmlwdCBhcm91bmQgYGxzIC5naXQvcmVmcy9oZWFkc2AuCitUaGVyZSB3aWxsIGJlIGFuIGFzdGVyaXNrIGluIGZyb250IG9mIHRoZSBicmFuY2ggeW91IGFyZSBjdXJyZW50bHkgb24uCisKK1NvbWV0aW1lcyB5b3UgbWF5IHdpc2ggdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBfd2l0aG91dF8gYWN0dWFsbHkKK2NoZWNraW5nIGl0IG91dCBhbmQgc3dpdGNoaW5nIHRvIGl0LiBJZiBzbywganVzdCB1c2UgdGhlIGNvbW1hbmQKKworLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggPGJyYW5jaG5hbWU+IFtzdGFydGluZ3BvaW50XQorLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgc2ltcGx5IF9jcmVhdGVfIHRoZSBicmFuY2gsIGJ1dCB3aWxsIG5vdCBkbyBhbnl0aGluZyBmdXJ0aGVyLgorWW91IGNhbiB0aGVuIGxhdGVyIC0tIG9uY2UgeW91IGRlY2lkZSB0aGF0IHlvdSB3YW50IHRvIGFjdHVhbGx5IGRldmVsb3AKK29uIHRoYXQgYnJhbmNoIC0tIHN3aXRjaCB0byB0aGF0IGJyYW5jaCB3aXRoIGEgcmVndWxhciAnZ2l0IGNoZWNrb3V0Jword2l0aCB0aGUgYnJhbmNobmFtZSBhcyB0aGUgYXJndW1lbnQuCisKKworTWVyZ2luZyB0d28gYnJhbmNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uZSBvZiB0aGUgaWRlYXMgb2YgaGF2aW5nIGEgYnJhbmNoIGlzIHRoYXQgeW91IGRvIHNvbWUgKHBvc3NpYmx5CitleHBlcmltZW50YWwpIHdvcmsgaW4gaXQsIGFuZCBldmVudHVhbGx5IG1lcmdlIGl0IGJhY2sgdG8gdGhlIG1haW4KK2JyYW5jaC4gU28gYXNzdW1pbmcgeW91IGNyZWF0ZWQgdGhlIGFib3ZlIGBteWJyYW5jaGAgdGhhdCBzdGFydGVkIG91dAorYmVpbmcgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGBtYXN0ZXJgIGJyYW5jaCwgbGV0J3MgbWFrZSBzdXJlIHdlJ3JlIGluCit0aGF0IGJyYW5jaCwgYW5kIGRvIHNvbWUgd29yayB0aGVyZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCBteWJyYW5jaAorJCBlY2hvICJXb3JrLCB3b3JrLCB3b3JrIiA+PmhlbGxvCiskIGdpdCBjb21taXQgLW0gIlNvbWUgd29yay4iIC1pIGhlbGxvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSwgd2UganVzdCBhZGRlZCBhbm90aGVyIGxpbmUgdG8gYGhlbGxvYCwgYW5kIHdlIHVzZWQgYSBzaG9ydGhhbmQgZm9yCitkb2luZyBib3RoIGBnaXQgdXBkYXRlLWluZGV4IGhlbGxvYCBhbmQgYGdpdCBjb21taXRgIGJ5IGp1c3QgZ2l2aW5nIHRoZQorZmlsZW5hbWUgZGlyZWN0bHkgdG8gYGdpdCBjb21taXRgLCB3aXRoIGFuIGAtaWAgZmxhZyAoaXQgdGVsbHMKK0dpdCB0byAnaW5jbHVkZScgdGhhdCBmaWxlIGluIGFkZGl0aW9uIHRvIHdoYXQgeW91IGhhdmUgZG9uZSB0bwordGhlIGluZGV4IGZpbGUgc28gZmFyIHdoZW4gbWFraW5nIHRoZSBjb21taXQpLiAgVGhlIGAtbWAgZmxhZyBpcyB0byBnaXZlIHRoZQorY29tbWl0IGxvZyBtZXNzYWdlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKworTm93LCB0byBtYWtlIGl0IGEgYml0IG1vcmUgaW50ZXJlc3RpbmcsIGxldCdzIGFzc3VtZSB0aGF0IHNvbWVib2R5IGVsc2UKK2RvZXMgc29tZSB3b3JrIGluIHRoZSBvcmlnaW5hbCBicmFuY2gsIGFuZCBzaW11bGF0ZSB0aGF0IGJ5IGdvaW5nIGJhY2sKK3RvIHRoZSBtYXN0ZXIgYnJhbmNoLCBhbmQgZWRpdGluZyB0aGUgc2FtZSBmaWxlIGRpZmZlcmVudGx5IHRoZXJlOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorLS0tLS0tLS0tLS0tCisKK0hlcmUsIHRha2UgYSBtb21lbnQgdG8gbG9vayBhdCB0aGUgY29udGVudHMgb2YgYGhlbGxvYCwgYW5kIG5vdGljZSBob3cgdGhleQorZG9uJ3QgY29udGFpbiB0aGUgd29yayB3ZSBqdXN0IGRpZCBpbiBgbXlicmFuY2hgIC0tIGJlY2F1c2UgdGhhdCB3b3JrCitoYXNuJ3QgaGFwcGVuZWQgaW4gdGhlIGBtYXN0ZXJgIGJyYW5jaCBhdCBhbGwuIFRoZW4gZG8KKworLS0tLS0tLS0tLS0tCiskIGVjaG8gIlBsYXksIHBsYXksIHBsYXkiID4+aGVsbG8KKyQgZWNobyAiTG90cyBvZiBmdW4iID4+ZXhhbXBsZQorJCBnaXQgY29tbWl0IC1tICJTb21lIGZ1bi4iIC1pIGhlbGxvIGV4YW1wbGUKKy0tLS0tLS0tLS0tLQorCitzaW5jZSB0aGUgbWFzdGVyIGJyYW5jaCBpcyBvYnZpb3VzbHkgaW4gYSBtdWNoIGJldHRlciBtb29kLgorCitOb3csIHlvdSd2ZSBnb3QgdHdvIGJyYW5jaGVzLCBhbmQgeW91IGRlY2lkZSB0aGF0IHlvdSB3YW50IHRvIG1lcmdlIHRoZQord29yayBkb25lLiBCZWZvcmUgd2UgZG8gdGhhdCwgbGV0J3MgaW50cm9kdWNlIGEgY29vbCBncmFwaGljYWwgdG9vbCB0aGF0CitoZWxwcyB5b3UgdmlldyB3aGF0J3MgZ29pbmcgb246CisKKy0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayAtLWFsbAorLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHNob3cgeW91IGdyYXBoaWNhbGx5IGJvdGggb2YgeW91ciBicmFuY2hlcyAodGhhdCdzIHdoYXQgdGhlIGAtLWFsbGAKK21lYW5zOiBub3JtYWxseSBpdCB3aWxsIGp1c3Qgc2hvdyB5b3UgeW91ciBjdXJyZW50IGBIRUFEYCkgYW5kIHRoZWlyCitoaXN0b3JpZXMuIFlvdSBjYW4gYWxzbyBzZWUgZXhhY3RseSBob3cgdGhleSBjYW1lIHRvIGJlIGZyb20gYSBjb21tb24KK3NvdXJjZS4KKworQW55d2F5LCBsZXQncyBleGl0ICdnaXRrJyAoYF5RYCBvciB0aGUgRmlsZSBtZW51KSwgYW5kIGRlY2lkZSB0aGF0IHdlIHdhbnQKK3RvIG1lcmdlIHRoZSB3b3JrIHdlIGRpZCBvbiB0aGUgYG15YnJhbmNoYCBicmFuY2ggaW50byB0aGUgYG1hc3RlcmAKK2JyYW5jaCAod2hpY2ggaXMgY3VycmVudGx5IG91ciBgSEVBRGAgdG9vKS4gVG8gZG8gdGhhdCwgdGhlcmUncyBhIG5pY2UKK3NjcmlwdCBjYWxsZWQgJ2dpdCBtZXJnZScsIHdoaWNoIHdhbnRzIHRvIGtub3cgd2hpY2ggYnJhbmNoZXMgeW91IHdhbnQKK3RvIHJlc29sdmUgYW5kIHdoYXQgdGhlIG1lcmdlIGlzIGFsbCBhYm91dDoKKworLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSAtbSAiTWVyZ2Ugd29yayBpbiBteWJyYW5jaCIgbXlicmFuY2gKKy0tLS0tLS0tLS0tLQorCit3aGVyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgZ29pbmcgdG8gYmUgdXNlZCBhcyB0aGUgY29tbWl0IG1lc3NhZ2UgaWYKK3RoZSBtZXJnZSBjYW4gYmUgcmVzb2x2ZWQgYXV0b21hdGljYWxseS4KKworTm93LCBpbiB0aGlzIGNhc2Ugd2UndmUgaW50ZW50aW9uYWxseSBjcmVhdGVkIGEgc2l0dWF0aW9uIHdoZXJlIHRoZQorbWVyZ2Ugd2lsbCBuZWVkIHRvIGJlIGZpeGVkIHVwIGJ5IGhhbmQsIHRob3VnaCwgc28gR2l0IHdpbGwgZG8gYXMgbXVjaAorb2YgaXQgYXMgaXQgY2FuIGF1dG9tYXRpY2FsbHkgKHdoaWNoIGluIHRoaXMgY2FzZSBpcyBqdXN0IG1lcmdlIHRoZSBgZXhhbXBsZWAKK2ZpbGUsIHdoaWNoIGhhZCBubyBkaWZmZXJlbmNlcyBpbiB0aGUgYG15YnJhbmNoYCBicmFuY2gpLCBhbmQgc2F5OgorCistLS0tLS0tLS0tLS0tLS0tCisJQXV0by1tZXJnaW5nIGhlbGxvCisJQ09ORkxJQ1QgKGNvbnRlbnQpOiBNZXJnZSBjb25mbGljdCBpbiBoZWxsbworCUF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuCistLS0tLS0tLS0tLS0tLS0tCisKK0l0IHRlbGxzIHlvdSB0aGF0IGl0IGRpZCBhbiAiQXV0b21hdGljIG1lcmdlIiwgd2hpY2gKK2ZhaWxlZCBkdWUgdG8gY29uZmxpY3RzIGluIGBoZWxsb2AuCisKK05vdCB0byB3b3JyeS4gSXQgbGVmdCB0aGUgKHRyaXZpYWwpIGNvbmZsaWN0IGluIGBoZWxsb2AgaW4gdGhlIHNhbWUgZm9ybSB5b3UKK3Nob3VsZCBhbHJlYWR5IGJlIHdlbGwgdXNlZCB0byBpZiB5b3UndmUgZXZlciB1c2VkIENWUywgc28gbGV0J3MganVzdAorb3BlbiBgaGVsbG9gIGluIG91ciBlZGl0b3IgKHdoYXRldmVyIHRoYXQgbWF5IGJlKSwgYW5kIGZpeCBpdCB1cCBzb21laG93LgorSSdkIHN1Z2dlc3QganVzdCBtYWtpbmcgaXQgc28gdGhhdCBgaGVsbG9gIGNvbnRhaW5zIGFsbCBmb3VyIGxpbmVzOgorCistLS0tLS0tLS0tLS0KK0hlbGxvIFdvcmxkCitJdCdzIGEgbmV3IGRheSBmb3IgZ2l0CitQbGF5LCBwbGF5LCBwbGF5CitXb3JrLCB3b3JrLCB3b3JrCistLS0tLS0tLS0tLS0KKworYW5kIG9uY2UgeW91J3JlIGhhcHB5IHdpdGggeW91ciBtYW51YWwgbWVyZ2UsIGp1c3QgZG8gYQorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtaSBoZWxsbworLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgdmVyeSBsb3VkbHkgd2FybiB5b3UgdGhhdCB5b3UncmUgbm93IGNvbW1pdHRpbmcgYSBtZXJnZQorKHdoaWNoIGlzIGNvcnJlY3QsIHNvIG5ldmVyIG1pbmQpLCBhbmQgeW91IGNhbiB3cml0ZSBhIHNtYWxsIG1lcmdlCittZXNzYWdlIGFib3V0IHlvdXIgYWR2ZW50dXJlcyBpbiAnZ2l0IG1lcmdlJy1sYW5kLgorCitBZnRlciB5b3UncmUgZG9uZSwgc3RhcnQgdXAgYGdpdGsgLS1hbGxgIHRvIHNlZSBncmFwaGljYWxseSB3aGF0IHRoZQoraGlzdG9yeSBsb29rcyBsaWtlLiBOb3RpY2UgdGhhdCBgbXlicmFuY2hgIHN0aWxsIGV4aXN0cywgYW5kIHlvdSBjYW4KK3N3aXRjaCB0byBpdCwgYW5kIGNvbnRpbnVlIHRvIHdvcmsgd2l0aCBpdCBpZiB5b3Ugd2FudCB0by4gVGhlCitgbXlicmFuY2hgIGJyYW5jaCB3aWxsIG5vdCBjb250YWluIHRoZSBtZXJnZSwgYnV0IG5leHQgdGltZSB5b3UgbWVyZ2UgaXQKK2Zyb20gdGhlIGBtYXN0ZXJgIGJyYW5jaCwgR2l0IHdpbGwga25vdyBob3cgeW91IG1lcmdlZCBpdCwgc28geW91J2xsIG5vdAoraGF2ZSB0byBkbyBfdGhhdF8gbWVyZ2UgYWdhaW4uCisKK0Fub3RoZXIgdXNlZnVsIHRvb2wsIGVzcGVjaWFsbHkgaWYgeW91IGRvIG5vdCBhbHdheXMgd29yayBpbiBYLVdpbmRvdworZW52aXJvbm1lbnQsIGlzIGBnaXQgc2hvdy1icmFuY2hgLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoIC0tdG9wby1vcmRlciAtLW1vcmU9MSBtYXN0ZXIgbXlicmFuY2gKKyogW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorICEgW215YnJhbmNoXSBTb21lIHdvcmsuCistLQorLSAgW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorKisgW215YnJhbmNoXSBTb21lIHdvcmsuCisqICBbbWFzdGVyXl0gU29tZSBmdW4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IHR3byBsaW5lcyBpbmRpY2F0ZSB0aGF0IGl0IGlzIHNob3dpbmcgdGhlIHR3byBicmFuY2hlcword2l0aCB0aGUgdGl0bGVzIG9mIHRoZWlyIHRvcC1vZi10aGUtdHJlZSBjb21taXRzLCB5b3UgYXJlIGN1cnJlbnRseSBvbgorYG1hc3RlcmAgYnJhbmNoIChub3RpY2UgdGhlIGFzdGVyaXNrIGAqYCBjaGFyYWN0ZXIpLCBhbmQgdGhlIGZpcnN0Citjb2x1bW4gZm9yIHRoZSBsYXRlciBvdXRwdXQgbGluZXMgaXMgdXNlZCB0byBzaG93IGNvbW1pdHMgY29udGFpbmVkIGluIHRoZQorYG1hc3RlcmAgYnJhbmNoLCBhbmQgdGhlIHNlY29uZCBjb2x1bW4gZm9yIHRoZSBgbXlicmFuY2hgCiticmFuY2guIFRocmVlIGNvbW1pdHMgYXJlIHNob3duIGFsb25nIHdpdGggdGhlaXIgdGl0bGVzLgorQWxsIG9mIHRoZW0gaGF2ZSBub24gYmxhbmsgY2hhcmFjdGVycyBpbiB0aGUgZmlyc3QgY29sdW1uIChgKmAKK3Nob3dzIGFuIG9yZGluYXJ5IGNvbW1pdCBvbiB0aGUgY3VycmVudCBicmFuY2gsIGAtYCBpcyBhIG1lcmdlIGNvbW1pdCksIHdoaWNoCittZWFucyB0aGV5IGFyZSBub3cgcGFydCBvZiB0aGUgYG1hc3RlcmAgYnJhbmNoLiBPbmx5IHRoZSAiU29tZQord29yayIgY29tbWl0IGhhcyB0aGUgcGx1cyBgK2AgY2hhcmFjdGVyIGluIHRoZSBzZWNvbmQgY29sdW1uLAorYmVjYXVzZSBgbXlicmFuY2hgIGhhcyBub3QgYmVlbiBtZXJnZWQgdG8gaW5jb3Jwb3JhdGUgdGhlc2UKK2NvbW1pdHMgZnJvbSB0aGUgbWFzdGVyIGJyYW5jaC4gIFRoZSBzdHJpbmcgaW5zaWRlIGJyYWNrZXRzCitiZWZvcmUgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpcyBhIHNob3J0IG5hbWUgeW91IGNhbiB1c2UgdG8KK25hbWUgdGhlIGNvbW1pdC4gIEluIHRoZSBhYm92ZSBleGFtcGxlLCAnbWFzdGVyJyBhbmQgJ215YnJhbmNoJworYXJlIGJyYW5jaCBoZWFkcy4gICdtYXN0ZXJeJyBpcyB0aGUgZmlyc3QgcGFyZW50IG9mICdtYXN0ZXInCiticmFuY2ggaGVhZC4gIFBsZWFzZSBzZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10gaWYgeW91IHdhbnQgdG8KK3NlZSBtb3JlIGNvbXBsZXggY2FzZXMuCisKK1tOT1RFXQorV2l0aG91dCB0aGUgJy0tbW9yZT0xJyBvcHRpb24sICdnaXQgc2hvdy1icmFuY2gnIHdvdWxkIG5vdCBvdXRwdXQgdGhlCisnW21hc3Rlcl5dJyBjb21taXQsIGFzICdbbXlicmFuY2hdJyBjb21taXQgaXMgYSBjb21tb24gYW5jZXN0b3Igb2YKK2JvdGggJ21hc3RlcicgYW5kICdteWJyYW5jaCcgdGlwcy4gIFBsZWFzZSBzZWUgbGlua2dpdDpnaXQtc2hvdy1icmFuY2hbMV0KK2ZvciBkZXRhaWxzLgorCitbTk9URV0KK0lmIHRoZXJlIHdlcmUgbW9yZSBjb21taXRzIG9uIHRoZSAnbWFzdGVyJyBicmFuY2ggYWZ0ZXIgdGhlIG1lcmdlLCB0aGUKK21lcmdlIGNvbW1pdCBpdHNlbGYgd291bGQgbm90IGJlIHNob3duIGJ5ICdnaXQgc2hvdy1icmFuY2gnIGJ5CitkZWZhdWx0LiAgWW91IHdvdWxkIG5lZWQgdG8gcHJvdmlkZSAnLS1zcGFyc2UnIG9wdGlvbiB0byBtYWtlIHRoZQorbWVyZ2UgY29tbWl0IHZpc2libGUgaW4gdGhpcyBjYXNlLgorCitOb3csIGxldCdzIHByZXRlbmQgeW91IGFyZSB0aGUgb25lIHdobyBkaWQgYWxsIHRoZSB3b3JrIGluCitgbXlicmFuY2hgLCBhbmQgdGhlIGZydWl0IG9mIHlvdXIgaGFyZCB3b3JrIGhhcyBmaW5hbGx5IGJlZW4gbWVyZ2VkCit0byB0aGUgYG1hc3RlcmAgYnJhbmNoLiBMZXQncyBnbyBiYWNrIHRvIGBteWJyYW5jaGAsIGFuZCBydW4KKydnaXQgbWVyZ2UnIHRvIGdldCB0aGUgInVwc3RyZWFtIGNoYW5nZXMiIGJhY2sgdG8geW91ciBicmFuY2guCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbXlicmFuY2gKKyQgZ2l0IG1lcmdlIC1tICJNZXJnZSB1cHN0cmVhbSBjaGFuZ2VzLiIgbWFzdGVyCistLS0tLS0tLS0tLS0KKworVGhpcyBvdXRwdXRzIHNvbWV0aGluZyBsaWtlIHRoaXMgKHRoZSBhY3R1YWwgY29tbWl0IG9iamVjdCBuYW1lcword291bGQgYmUgZGlmZmVyZW50KQorCistLS0tLS0tLS0tLS0tLS0tCitVcGRhdGluZyBmcm9tIGFlM2EyZGEuLi4gdG8gYTgwYjRhYS4uLi4KK0Zhc3QtZm9yd2FyZCAobm8gY29tbWl0IGNyZWF0ZWQ7IC1tIG9wdGlvbiBpZ25vcmVkKQorIGV4YW1wbGUgfCAxICsKKyBoZWxsbyAgIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKy0tLS0tLS0tLS0tLS0tLS0KKworQmVjYXVzZSB5b3VyIGJyYW5jaCBkaWQgbm90IGNvbnRhaW4gYW55dGhpbmcgbW9yZSB0aGFuIHdoYXQgaGFkCithbHJlYWR5IGJlZW4gbWVyZ2VkIGludG8gdGhlIGBtYXN0ZXJgIGJyYW5jaCwgdGhlIG1lcmdlIG9wZXJhdGlvbiBkaWQKK25vdCBhY3R1YWxseSBkbyBhIG1lcmdlLiBJbnN0ZWFkLCBpdCBqdXN0IHVwZGF0ZWQgdGhlIHRvcCBvZgordGhlIHRyZWUgb2YgeW91ciBicmFuY2ggdG8gdGhhdCBvZiB0aGUgYG1hc3RlcmAgYnJhbmNoLiBUaGlzIGlzCitvZnRlbiBjYWxsZWQgJ2Zhc3QtZm9yd2FyZCcgbWVyZ2UuCisKK1lvdSBjYW4gcnVuIGBnaXRrIC0tYWxsYCBhZ2FpbiB0byBzZWUgaG93IHRoZSBjb21taXQgYW5jZXN0cnkKK2xvb2tzIGxpa2UsIG9yIHJ1biAnc2hvdy1icmFuY2gnLCB3aGljaCB0ZWxscyB5b3UgdGhpcy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCBtYXN0ZXIgbXlicmFuY2gKKyEgW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorICogW215YnJhbmNoXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCistLQorLS0gW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworTWVyZ2luZyBleHRlcm5hbCB3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQncyB1c3VhbGx5IG11Y2ggbW9yZSBjb21tb24gdGhhdCB5b3UgbWVyZ2Ugd2l0aCBzb21lYm9keSBlbHNlIHRoYW4KK21lcmdpbmcgd2l0aCB5b3VyIG93biBicmFuY2hlcywgc28gaXQncyB3b3J0aCBwb2ludGluZyBvdXQgdGhhdCBHaXQKK21ha2VzIHRoYXQgdmVyeSBlYXN5IHRvbywgYW5kIGluIGZhY3QsIGl0J3Mgbm90IHRoYXQgZGlmZmVyZW50IGZyb20KK2RvaW5nIGEgJ2dpdCBtZXJnZScuIEluIGZhY3QsIGEgcmVtb3RlIG1lcmdlIGVuZHMgdXAgYmVpbmcgbm90aGluZworbW9yZSB0aGFuICJmZXRjaCB0aGUgd29yayBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgaW50byBhIHRlbXBvcmFyeSB0YWciCitmb2xsb3dlZCBieSBhICdnaXQgbWVyZ2UnLgorCitGZXRjaGluZyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgaXMgZG9uZSBieSwgdW5zdXJwcmlzaW5nbHksCisnZ2l0IGZldGNoJzoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggPHJlbW90ZS1yZXBvc2l0b3J5PgorLS0tLS0tLS0tLS0tLS0tLQorCitPbmUgb2YgdGhlIGZvbGxvd2luZyB0cmFuc3BvcnRzIGNhbiBiZSB1c2VkIHRvIG5hbWUgdGhlCityZXBvc2l0b3J5IHRvIGRvd25sb2FkIGZyb206CisKK1JzeW5jOjoKKwlgcnN5bmM6Ly9yZW1vdGUubWFjaGluZS9wYXRoL3RvL3JlcG8uZ2l0L2AKKysKK1JzeW5jIHRyYW5zcG9ydCBpcyB1c2FibGUgZm9yIGJvdGggdXBsb2FkaW5nIGFuZCBkb3dubG9hZGluZywKK2J1dCBpcyBjb21wbGV0ZWx5IHVuYXdhcmUgb2Ygd2hhdCBnaXQgZG9lcywgYW5kIGNhbiBwcm9kdWNlCit1bmV4cGVjdGVkIHJlc3VsdHMgd2hlbiB5b3UgZG93bmxvYWQgZnJvbSB0aGUgcHVibGljIHJlcG9zaXRvcnkKK3doaWxlIHRoZSByZXBvc2l0b3J5IG93bmVyIGlzIHVwbG9hZGluZyBpbnRvIGl0IHZpYSBgcnN5bmNgCit0cmFuc3BvcnQuICBNb3N0IG5vdGFibHksIGl0IGNvdWxkIHVwZGF0ZSB0aGUgZmlsZXMgdW5kZXIKK2ByZWZzL2Agd2hpY2ggaG9sZHMgdGhlIG9iamVjdCBuYW1lIG9mIHRoZSB0b3Btb3N0IGNvbW1pdHMKK2JlZm9yZSB1cGxvYWRpbmcgdGhlIGZpbGVzIGluIGBvYmplY3RzL2AgLS0gdGhlIGRvd25sb2FkZXIgd291bGQKK29idGFpbiBoZWFkIGNvbW1pdCBvYmplY3QgbmFtZSB3aGlsZSB0aGF0IG9iamVjdCBpdHNlbGYgaXMgc3RpbGwKK25vdCBhdmFpbGFibGUgaW4gdGhlIHJlcG9zaXRvcnkuICBGb3IgdGhpcyByZWFzb24sIGl0IGlzCitjb25zaWRlcmVkIGRlcHJlY2F0ZWQuCisKK1NTSDo6CisJYHJlbW90ZS5tYWNoaW5lOi9wYXRoL3RvL3JlcG8uZ2l0L2Agb3IKKysKK2Bzc2g6Ly9yZW1vdGUubWFjaGluZS9wYXRoL3RvL3JlcG8uZ2l0L2AKKysKK1RoaXMgdHJhbnNwb3J0IGNhbiBiZSB1c2VkIGZvciBib3RoIHVwbG9hZGluZyBhbmQgZG93bmxvYWRpbmcsCithbmQgcmVxdWlyZXMgeW91IHRvIGhhdmUgYSBsb2ctaW4gcHJpdmlsZWdlIG92ZXIgYHNzaGAgdG8gdGhlCityZW1vdGUgbWFjaGluZS4gIEl0IGZpbmRzIG91dCB0aGUgc2V0IG9mIG9iamVjdHMgdGhlIG90aGVyIHNpZGUKK2xhY2tzIGJ5IGV4Y2hhbmdpbmcgdGhlIGhlYWQgY29tbWl0cyBib3RoIGVuZHMgaGF2ZSBhbmQKK3RyYW5zZmVycyAoY2xvc2UgdG8pIG1pbmltdW0gc2V0IG9mIG9iamVjdHMuICBJdCBpcyBieSBmYXIgdGhlCittb3N0IGVmZmljaWVudCB3YXkgdG8gZXhjaGFuZ2UgR2l0IG9iamVjdHMgYmV0d2VlbiByZXBvc2l0b3JpZXMuCisKK0xvY2FsIGRpcmVjdG9yeTo6CisJYC9wYXRoL3RvL3JlcG8uZ2l0L2AKKysKK1RoaXMgdHJhbnNwb3J0IGlzIHRoZSBzYW1lIGFzIFNTSCB0cmFuc3BvcnQgYnV0IHVzZXMgJ3NoJyB0byBydW4KK2JvdGggZW5kcyBvbiB0aGUgbG9jYWwgbWFjaGluZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgb3RoZXIgZW5kIG9uCit0aGUgcmVtb3RlIG1hY2hpbmUgdmlhICdzc2gnLgorCitHaXQgTmF0aXZlOjoKKwlgZ2l0Oi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC9gCisrCitUaGlzIHRyYW5zcG9ydCB3YXMgZGVzaWduZWQgZm9yIGFub255bW91cyBkb3dubG9hZGluZy4gIExpa2UgU1NICit0cmFuc3BvcnQsIGl0IGZpbmRzIG91dCB0aGUgc2V0IG9mIG9iamVjdHMgdGhlIGRvd25zdHJlYW0gc2lkZQorbGFja3MgYW5kIHRyYW5zZmVycyAoY2xvc2UgdG8pIG1pbmltdW0gc2V0IG9mIG9iamVjdHMuCisKK0hUVFAoUyk6OgorCWBodHRwOi8vcmVtb3RlLm1hY2hpbmUvcGF0aC90by9yZXBvLmdpdC9gCisrCitEb3dubG9hZGVyIGZyb20gaHR0cCBhbmQgaHR0cHMgVVJMCitmaXJzdCBvYnRhaW5zIHRoZSB0b3Btb3N0IGNvbW1pdCBvYmplY3QgbmFtZSBmcm9tIHRoZSByZW1vdGUgc2l0ZQorYnkgbG9va2luZyBhdCB0aGUgc3BlY2lmaWVkIHJlZm5hbWUgdW5kZXIgYHJlcG8uZ2l0L3JlZnMvYCBkaXJlY3RvcnksCithbmQgdGhlbiB0cmllcyB0byBvYnRhaW4gdGhlCitjb21taXQgb2JqZWN0IGJ5IGRvd25sb2FkaW5nIGZyb20gYHJlcG8uZ2l0L29iamVjdHMveHgveHh4Li4uYAordXNpbmcgdGhlIG9iamVjdCBuYW1lIG9mIHRoYXQgY29tbWl0IG9iamVjdC4gIFRoZW4gaXQgcmVhZHMgdGhlCitjb21taXQgb2JqZWN0IHRvIGZpbmQgb3V0IGl0cyBwYXJlbnQgY29tbWl0cyBhbmQgdGhlIGFzc29jaWF0ZQordHJlZSBvYmplY3Q7IGl0IHJlcGVhdHMgdGhpcyBwcm9jZXNzIHVudGlsIGl0IGdldHMgYWxsIHRoZQorbmVjZXNzYXJ5IG9iamVjdHMuICBCZWNhdXNlIG9mIHRoaXMgYmVoYXZpb3IsIHRoZXkgYXJlCitzb21ldGltZXMgYWxzbyBjYWxsZWQgJ2NvbW1pdCB3YWxrZXJzJy4KKysKK1RoZSAnY29tbWl0IHdhbGtlcnMnIGFyZSBzb21ldGltZXMgYWxzbyBjYWxsZWQgJ2R1bWIKK3RyYW5zcG9ydHMnLCBiZWNhdXNlIHRoZXkgZG8gbm90IHJlcXVpcmUgYW55IEdpdCBhd2FyZSBzbWFydAorc2VydmVyIGxpa2UgR2l0IE5hdGl2ZSB0cmFuc3BvcnQgZG9lcy4gIEFueSBzdG9jayBIVFRQIHNlcnZlcgordGhhdCBkb2VzIG5vdCBldmVuIHN1cHBvcnQgZGlyZWN0b3J5IGluZGV4IHdvdWxkIHN1ZmZpY2UuICBCdXQKK3lvdSBtdXN0IHByZXBhcmUgeW91ciByZXBvc2l0b3J5IHdpdGggJ2dpdCB1cGRhdGUtc2VydmVyLWluZm8nCit0byBoZWxwIGR1bWIgdHJhbnNwb3J0IGRvd25sb2FkZXJzLgorCitPbmNlIHlvdSBmZXRjaCBmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwgeW91IGBtZXJnZWAgdGhhdAord2l0aCB5b3VyIGN1cnJlbnQgYnJhbmNoLgorCitIb3dldmVyIC0tIGl0J3Mgc3VjaCBhIGNvbW1vbiB0aGluZyB0byBgZmV0Y2hgIGFuZCB0aGVuCitpbW1lZGlhdGVseSBgbWVyZ2VgLCB0aGF0IGl0J3MgY2FsbGVkIGBnaXQgcHVsbGAsIGFuZCB5b3UgY2FuCitzaW1wbHkgZG8KKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVsbCA8cmVtb3RlLXJlcG9zaXRvcnk+CistLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBvcHRpb25hbGx5IGdpdmUgYSBicmFuY2gtbmFtZSBmb3IgdGhlIHJlbW90ZSBlbmQgYXMgYSBzZWNvbmQKK2FyZ3VtZW50LgorCitbTk9URV0KK1lvdSBjb3VsZCBkbyB3aXRob3V0IHVzaW5nIGFueSBicmFuY2hlcyBhdCBhbGwsIGJ5CitrZWVwaW5nIGFzIG1hbnkgbG9jYWwgcmVwb3NpdG9yaWVzIGFzIHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUKK2JyYW5jaGVzLCBhbmQgbWVyZ2luZyBiZXR3ZWVuIHRoZW0gd2l0aCAnZ2l0IHB1bGwnLCBqdXN0IGxpa2UKK3lvdSBtZXJnZSBiZXR3ZWVuIGJyYW5jaGVzLiBUaGUgYWR2YW50YWdlIG9mIHRoaXMgYXBwcm9hY2ggaXMKK3RoYXQgaXQgbGV0cyB5b3Uga2VlcCBhIHNldCBvZiBmaWxlcyBmb3IgZWFjaCBgYnJhbmNoYCBjaGVja2VkCitvdXQgYW5kIHlvdSBtYXkgZmluZCBpdCBlYXNpZXIgdG8gc3dpdGNoIGJhY2sgYW5kIGZvcnRoIGlmIHlvdQoranVnZ2xlIG11bHRpcGxlIGxpbmVzIG9mIGRldmVsb3BtZW50IHNpbXVsdGFuZW91c2x5LiBPZgorY291cnNlLCB5b3Ugd2lsbCBwYXkgdGhlIHByaWNlIG9mIG1vcmUgZGlzayB1c2FnZSB0byBob2xkCittdWx0aXBsZSB3b3JraW5nIHRyZWVzLCBidXQgZGlzayBzcGFjZSBpcyBjaGVhcCB0aGVzZSBkYXlzLgorCitJdCBpcyBsaWtlbHkgdGhhdCB5b3Ugd2lsbCBiZSBwdWxsaW5nIGZyb20gdGhlIHNhbWUgcmVtb3RlCityZXBvc2l0b3J5IGZyb20gdGltZSB0byB0aW1lLiBBcyBhIHNob3J0IGhhbmQsIHlvdSBjYW4gc3RvcmUKK3RoZSByZW1vdGUgcmVwb3NpdG9yeSBVUkwgaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkncyBjb25maWcgZmlsZQorbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyByZW1vdGUubGludXMudXJsIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB1c2UgdGhlICJsaW51cyIga2V5d29yZCB3aXRoICdnaXQgcHVsbCcgaW5zdGVhZCBvZiB0aGUgZnVsbCBVUkwuCisKK0V4YW1wbGVzLgorCisuIGBnaXQgcHVsbCBsaW51c2AKKy4gYGdpdCBwdWxsIGxpbnVzIHRhZyB2MC45OS4xYAorCit0aGUgYWJvdmUgYXJlIGVxdWl2YWxlbnQgdG86CisKKy4gYGdpdCBwdWxsIGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0LyBIRUFEYAorLiBgZ2l0IHB1bGwgaHR0cDovL3d3dy5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQvIHRhZyB2MC45OS4xYAorCisKK0hvdyBkb2VzIHRoZSBtZXJnZSB3b3JrPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIHNhaWQgdGhpcyB0dXRvcmlhbCBzaG93cyB3aGF0IHBsdW1iaW5nIGRvZXMgdG8gaGVscCB5b3UgY29wZQord2l0aCB0aGUgcG9yY2VsYWluIHRoYXQgaXNuJ3QgZmx1c2hpbmcsIGJ1dCB3ZSBzbyBmYXIgZGlkIG5vdAordGFsayBhYm91dCBob3cgdGhlIG1lcmdlIHJlYWxseSB3b3Jrcy4gIElmIHlvdSBhcmUgZm9sbG93aW5nCit0aGlzIHR1dG9yaWFsIHRoZSBmaXJzdCB0aW1lLCBJJ2Qgc3VnZ2VzdCB0byBza2lwIHRvICJQdWJsaXNoaW5nCit5b3VyIHdvcmsiIHNlY3Rpb24gYW5kIGNvbWUgYmFjayBoZXJlIGxhdGVyLgorCitPSywgc3RpbGwgd2l0aCBtZT8gIFRvIGdpdmUgdXMgYW4gZXhhbXBsZSB0byBsb29rIGF0LCBsZXQncyBnbworYmFjayB0byB0aGUgZWFybGllciByZXBvc2l0b3J5IHdpdGggImhlbGxvIiBhbmQgImV4YW1wbGUiIGZpbGUsCithbmQgYnJpbmcgb3Vyc2VsdmVzIGJhY2sgdG8gdGhlIHByZS1tZXJnZSBzdGF0ZToKKworLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCAtLW1vcmU9MiBtYXN0ZXIgbXlicmFuY2gKKyEgW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorICogW215YnJhbmNoXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCistLQorLS0gW21hc3Rlcl0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorKyogW21hc3Rlcl4yXSBTb21lIHdvcmsuCisrKiBbbWFzdGVyXl0gU29tZSBmdW4uCistLS0tLS0tLS0tLS0KKworUmVtZW1iZXIsIGJlZm9yZSBydW5uaW5nICdnaXQgbWVyZ2UnLCBvdXIgYG1hc3RlcmAgaGVhZCB3YXMgYXQKKyJTb21lIGZ1bi4iIGNvbW1pdCwgd2hpbGUgb3VyIGBteWJyYW5jaGAgaGVhZCB3YXMgYXQgIlNvbWUKK3dvcmsuIiBjb21taXQuCisKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgbXlicmFuY2gKKyQgZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXJeMgorJCBnaXQgY2hlY2tvdXQgbWFzdGVyCiskIGdpdCByZXNldCAtLWhhcmQgbWFzdGVyXgorLS0tLS0tLS0tLS0tCisKK0FmdGVyIHJld2luZGluZywgdGhlIGNvbW1pdCBzdHJ1Y3R1cmUgc2hvdWxkIGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoCisqIFttYXN0ZXJdIFNvbWUgZnVuLgorICEgW215YnJhbmNoXSBTb21lIHdvcmsuCistLQorKiAgW21hc3Rlcl0gU29tZSBmdW4uCisgKyBbbXlicmFuY2hdIFNvbWUgd29yay4KKyorIFttYXN0ZXJeXSBJbml0aWFsIGNvbW1pdAorLS0tLS0tLS0tLS0tCisKK05vdyB3ZSBhcmUgcmVhZHkgdG8gZXhwZXJpbWVudCB3aXRoIHRoZSBtZXJnZSBieSBoYW5kLgorCitgZ2l0IG1lcmdlYCBjb21tYW5kLCB3aGVuIG1lcmdpbmcgdHdvIGJyYW5jaGVzLCB1c2VzIDMtd2F5IG1lcmdlCithbGdvcml0aG0uICBGaXJzdCwgaXQgZmluZHMgdGhlIGNvbW1vbiBhbmNlc3RvciBiZXR3ZWVuIHRoZW0uCitUaGUgY29tbWFuZCBpdCB1c2VzIGlzICdnaXQgbWVyZ2UtYmFzZSc6CisKKy0tLS0tLS0tLS0tLQorJCBtYj0kKGdpdCBtZXJnZS1iYXNlIEhFQUQgbXlicmFuY2gpCistLS0tLS0tLS0tLS0KKworVGhlIGNvbW1hbmQgd3JpdGVzIHRoZSBjb21taXQgb2JqZWN0IG5hbWUgb2YgdGhlIGNvbW1vbiBhbmNlc3RvcgordG8gdGhlIHN0YW5kYXJkIG91dHB1dCwgc28gd2UgY2FwdHVyZWQgaXRzIG91dHB1dCB0byBhIHZhcmlhYmxlLAorYmVjYXVzZSB3ZSB3aWxsIGJlIHVzaW5nIGl0IGluIHRoZSBuZXh0IHN0ZXAuICBCeSB0aGUgd2F5LCB0aGUgY29tbW9uCithbmNlc3RvciBjb21taXQgaXMgdGhlICJJbml0aWFsIGNvbW1pdCIgY29tbWl0IGluIHRoaXMgY2FzZS4gIFlvdSBjYW4KK3RlbGwgaXQgYnk6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbmFtZS1yZXYgLS1uYW1lLW9ubHkgLS10YWdzICRtYgorbXktZmlyc3QtdGFnCistLS0tLS0tLS0tLS0KKworQWZ0ZXIgZmluZGluZyBvdXQgYSBjb21tb24gYW5jZXN0b3IgY29tbWl0LCB0aGUgc2Vjb25kIHN0ZXAgaXMKK3RoaXM6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcmVhZC10cmVlIC1tIC11ICRtYiBIRUFEIG15YnJhbmNoCistLS0tLS0tLS0tLS0KKworVGhpcyBpcyB0aGUgc2FtZSAnZ2l0IHJlYWQtdHJlZScgY29tbWFuZCB3ZSBoYXZlIGFscmVhZHkgc2VlbiwKK2J1dCBpdCB0YWtlcyB0aHJlZSB0cmVlcywgdW5saWtlIHByZXZpb3VzIGV4YW1wbGVzLiAgVGhpcyByZWFkcwordGhlIGNvbnRlbnRzIG9mIGVhY2ggdHJlZSBpbnRvIGRpZmZlcmVudCAnc3RhZ2UnIGluIHRoZSBpbmRleAorZmlsZSAodGhlIGZpcnN0IHRyZWUgZ29lcyB0byBzdGFnZSAxLCB0aGUgc2Vjb25kIHRvIHN0YWdlIDIsCitldGMuKS4gIEFmdGVyIHJlYWRpbmcgdGhyZWUgdHJlZXMgaW50byB0aHJlZSBzdGFnZXMsIHRoZSBwYXRocwordGhhdCBhcmUgdGhlIHNhbWUgaW4gYWxsIHRocmVlIHN0YWdlcyBhcmUgJ2NvbGxhcHNlZCcgaW50byBzdGFnZQorMC4gIEFsc28gcGF0aHMgdGhhdCBhcmUgdGhlIHNhbWUgaW4gdHdvIG9mIHRocmVlIHN0YWdlcyBhcmUKK2NvbGxhcHNlZCBpbnRvIHN0YWdlIDAsIHRha2luZyB0aGUgU0hBLTEgZnJvbSBlaXRoZXIgc3RhZ2UgMiBvcgorc3RhZ2UgMywgd2hpY2hldmVyIGlzIGRpZmZlcmVudCBmcm9tIHN0YWdlIDEgKGkuZS4gb25seSBvbmUgc2lkZQorY2hhbmdlZCBmcm9tIHRoZSBjb21tb24gYW5jZXN0b3IpLgorCitBZnRlciAnY29sbGFwc2luZycgb3BlcmF0aW9uLCBwYXRocyB0aGF0IGFyZSBkaWZmZXJlbnQgaW4gdGhyZWUKK3RyZWVzIGFyZSBsZWZ0IGluIG5vbi16ZXJvIHN0YWdlcy4gIEF0IHRoaXMgcG9pbnQsIHlvdSBjYW4KK2luc3BlY3QgdGhlIGluZGV4IGZpbGUgd2l0aCB0aGlzIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbHMtZmlsZXMgLS1zdGFnZQorMTAwNjQ0IDdmOGIxNDFiNjVmZGNlZTQ3MzIxZTM5OWEyNTk4YTIzNWEwMzI0MjIgMAlleGFtcGxlCisxMDA2NDQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOCAxCWhlbGxvCisxMDA2NDQgYmE0MmEyYTk2ZTMwMjdmMzMzM2UxM2VkZTRjY2Y0NDk4YzNhZTk0MiAyCWhlbGxvCisxMDA2NDQgY2M0NGM3M2ViNzgzNTY1ZGE1ODMxYjRkODIwYzk2Mjk1NDAxOWI2OSAzCWhlbGxvCistLS0tLS0tLS0tLS0KKworSW4gb3VyIGV4YW1wbGUgb2Ygb25seSB0d28gZmlsZXMsIHdlIGRpZCBub3QgaGF2ZSB1bmNoYW5nZWQKK2ZpbGVzIHNvIG9ubHkgJ2V4YW1wbGUnIHJlc3VsdGVkIGluIGNvbGxhcHNpbmcuICBCdXQgaW4gcmVhbC1saWZlCitsYXJnZSBwcm9qZWN0cywgd2hlbiBvbmx5IGEgc21hbGwgbnVtYmVyIG9mIGZpbGVzIGNoYW5nZSBpbiBvbmUgY29tbWl0LAordGhpcyAnY29sbGFwc2luZycgdGVuZHMgdG8gdHJpdmlhbGx5IG1lcmdlIG1vc3Qgb2YgdGhlIHBhdGhzCitmYWlybHkgcXVpY2tseSwgbGVhdmluZyBvbmx5IGEgaGFuZGZ1bCBvZiByZWFsIGNoYW5nZXMgaW4gbm9uLXplcm8KK3N0YWdlcy4KKworVG8gbG9vayBhdCBvbmx5IG5vbi16ZXJvIHN0YWdlcywgdXNlIGAtLXVubWVyZ2VkYCBmbGFnOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQKKzEwMDY0NCA1NTdkYjAzZGU5OTdjODZhNGEwMjhlMWViZDNhMWNlYjIyNWJlMjM4IDEJaGVsbG8KKzEwMDY0NCBiYTQyYTJhOTZlMzAyN2YzMzMzZTEzZWRlNGNjZjQ0OThjM2FlOTQyIDIJaGVsbG8KKzEwMDY0NCBjYzQ0YzczZWI3ODM1NjVkYTU4MzFiNGQ4MjBjOTYyOTU0MDE5YjY5IDMJaGVsbG8KKy0tLS0tLS0tLS0tLQorCitUaGUgbmV4dCBzdGVwIG9mIG1lcmdpbmcgaXMgdG8gbWVyZ2UgdGhlc2UgdGhyZWUgdmVyc2lvbnMgb2YgdGhlCitmaWxlLCB1c2luZyAzLXdheSBtZXJnZS4gIFRoaXMgaXMgZG9uZSBieSBnaXZpbmcKKydnaXQgbWVyZ2Utb25lLWZpbGUnIGNvbW1hbmQgYXMgb25lIG9mIHRoZSBhcmd1bWVudHMgdG8KKydnaXQgbWVyZ2UtaW5kZXgnIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIGhlbGxvCitBdXRvLW1lcmdpbmcgaGVsbG8KK0VSUk9SOiBNZXJnZSBjb25mbGljdCBpbiBoZWxsbworZmF0YWw6IG1lcmdlIHByb2dyYW0gZmFpbGVkCistLS0tLS0tLS0tLS0KKworJ2dpdCBtZXJnZS1vbmUtZmlsZScgc2NyaXB0IGlzIGNhbGxlZCB3aXRoIHBhcmFtZXRlcnMgdG8KK2Rlc2NyaWJlIHRob3NlIHRocmVlIHZlcnNpb25zLCBhbmQgaXMgcmVzcG9uc2libGUgdG8gbGVhdmUgdGhlCittZXJnZSByZXN1bHRzIGluIHRoZSB3b3JraW5nIHRyZWUuCitJdCBpcyBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgc2hlbGwgc2NyaXB0LCBhbmQKK2V2ZW50dWFsbHkgY2FsbHMgJ21lcmdlJyBwcm9ncmFtIGZyb20gUkNTIHN1aXRlIHRvIHBlcmZvcm0gYQorZmlsZS1sZXZlbCAzLXdheSBtZXJnZS4gIEluIHRoaXMgY2FzZSwgJ21lcmdlJyBkZXRlY3RzCitjb25mbGljdHMsIGFuZCB0aGUgbWVyZ2UgcmVzdWx0IHdpdGggY29uZmxpY3QgbWFya3MgaXMgbGVmdCBpbgordGhlIHdvcmtpbmcgdHJlZS4uICBUaGlzIGNhbiBiZSBzZWVuIGlmIHlvdSBydW4gYGxzLWZpbGVzCistLXN0YWdlYCBhZ2FpbiBhdCB0aGlzIHBvaW50OgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UKKzEwMDY0NCA3ZjhiMTQxYjY1ZmRjZWU0NzMyMWUzOTlhMjU5OGEyMzVhMDMyNDIyIDAJZXhhbXBsZQorMTAwNjQ0IDU1N2RiMDNkZTk5N2M4NmE0YTAyOGUxZWJkM2ExY2ViMjI1YmUyMzggMQloZWxsbworMTAwNjQ0IGJhNDJhMmE5NmUzMDI3ZjMzMzNlMTNlZGU0Y2NmNDQ5OGMzYWU5NDIgMgloZWxsbworMTAwNjQ0IGNjNDRjNzNlYjc4MzU2NWRhNTgzMWI0ZDgyMGM5NjI5NTQwMTliNjkgMwloZWxsbworLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIHN0YXRlIG9mIHRoZSBpbmRleCBmaWxlIGFuZCB0aGUgd29ya2luZyBmaWxlIGFmdGVyCisnZ2l0IG1lcmdlJyByZXR1cm5zIGNvbnRyb2wgYmFjayB0byB5b3UsIGxlYXZpbmcgdGhlIGNvbmZsaWN0aW5nCittZXJnZSBmb3IgeW91IHRvIHJlc29sdmUuICBOb3RpY2UgdGhhdCB0aGUgcGF0aCBgaGVsbG9gIGlzIHN0aWxsCit1bm1lcmdlZCwgYW5kIHdoYXQgeW91IHNlZSB3aXRoICdnaXQgZGlmZicgYXQgdGhpcyBwb2ludCBpcworZGlmZmVyZW5jZXMgc2luY2Ugc3RhZ2UgMiAoaS5lLiB5b3VyIHZlcnNpb24pLgorCisKK1B1Ymxpc2hpbmcgeW91ciB3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTbywgd2UgY2FuIHVzZSBzb21lYm9keSBlbHNlJ3Mgd29yayBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnksIGJ1dAoraG93IGNhbiAqeW91KiBwcmVwYXJlIGEgcmVwb3NpdG9yeSB0byBsZXQgb3RoZXIgcGVvcGxlIHB1bGwgZnJvbQoraXQ/CisKK1lvdSBkbyB5b3VyIHJlYWwgd29yayBpbiB5b3VyIHdvcmtpbmcgdHJlZSB0aGF0IGhhcyB5b3VyCitwcmltYXJ5IHJlcG9zaXRvcnkgaGFuZ2luZyB1bmRlciBpdCBhcyBpdHMgYC5naXRgIHN1YmRpcmVjdG9yeS4KK1lvdSAqY291bGQqIG1ha2UgdGhhdCByZXBvc2l0b3J5IGFjY2Vzc2libGUgcmVtb3RlbHkgYW5kIGFzaworcGVvcGxlIHRvIHB1bGwgZnJvbSBpdCwgYnV0IGluIHByYWN0aWNlIHRoYXQgaXMgbm90IHRoZSB3YXkKK3RoaW5ncyBhcmUgdXN1YWxseSBkb25lLiBBIHJlY29tbWVuZGVkIHdheSBpcyB0byBoYXZlIGEgcHVibGljCityZXBvc2l0b3J5LCBtYWtlIGl0IHJlYWNoYWJsZSBieSBvdGhlciBwZW9wbGUsIGFuZCB3aGVuIHRoZQorY2hhbmdlcyB5b3UgbWFkZSBpbiB5b3VyIHByaW1hcnkgd29ya2luZyB0cmVlIGFyZSBpbiBnb29kIHNoYXBlLAordXBkYXRlIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBmcm9tIGl0LiBUaGlzIGlzIG9mdGVuIGNhbGxlZAorJ3B1c2hpbmcnLgorCitbTk9URV0KK1RoaXMgcHVibGljIHJlcG9zaXRvcnkgY291bGQgZnVydGhlciBiZSBtaXJyb3JlZCwgYW5kIHRoYXQgaXMKK2hvdyBHaXQgcmVwb3NpdG9yaWVzIGF0IGBrZXJuZWwub3JnYCBhcmUgbWFuYWdlZC4KKworUHVibGlzaGluZyB0aGUgY2hhbmdlcyBmcm9tIHlvdXIgbG9jYWwgKHByaXZhdGUpIHJlcG9zaXRvcnkgdG8KK3lvdXIgcmVtb3RlIChwdWJsaWMpIHJlcG9zaXRvcnkgcmVxdWlyZXMgYSB3cml0ZSBwcml2aWxlZ2Ugb24KK3RoZSByZW1vdGUgbWFjaGluZS4gWW91IG5lZWQgdG8gaGF2ZSBhbiBTU0ggYWNjb3VudCB0aGVyZSB0bworcnVuIGEgc2luZ2xlIGNvbW1hbmQsICdnaXQtcmVjZWl2ZS1wYWNrJy4KKworRmlyc3QsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhbiBlbXB0eSByZXBvc2l0b3J5IG9uIHRoZSByZW1vdGUKK21hY2hpbmUgdGhhdCB3aWxsIGhvdXNlIHlvdXIgcHVibGljIHJlcG9zaXRvcnkuIFRoaXMgZW1wdHkKK3JlcG9zaXRvcnkgd2lsbCBiZSBwb3B1bGF0ZWQgYW5kIGJlIGtlcHQgdXAtdG8tZGF0ZSBieSBwdXNoaW5nCitpbnRvIGl0IGxhdGVyLiBPYnZpb3VzbHksIHRoaXMgcmVwb3NpdG9yeSBjcmVhdGlvbiBuZWVkcyB0byBiZQorZG9uZSBvbmx5IG9uY2UuCisKK1tOT1RFXQorJ2dpdCBwdXNoJyB1c2VzIGEgcGFpciBvZiBjb21tYW5kcywKKydnaXQgc2VuZC1wYWNrJyBvbiB5b3VyIGxvY2FsIG1hY2hpbmUsIGFuZCAnZ2l0LXJlY2VpdmUtcGFjaycKK29uIHRoZSByZW1vdGUgbWFjaGluZS4gVGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdHdvIG92ZXIKK3RoZSBuZXR3b3JrIGludGVybmFsbHkgdXNlcyBhbiBTU0ggY29ubmVjdGlvbi4KKworWW91ciBwcml2YXRlIHJlcG9zaXRvcnkncyBHaXQgZGlyZWN0b3J5IGlzIHVzdWFsbHkgYC5naXRgLCBidXQKK3lvdXIgcHVibGljIHJlcG9zaXRvcnkgaXMgb2Z0ZW4gbmFtZWQgYWZ0ZXIgdGhlIHByb2plY3QgbmFtZSwKK2kuZS4gYDxwcm9qZWN0Pi5naXRgLiBMZXQncyBjcmVhdGUgc3VjaCBhIHB1YmxpYyByZXBvc2l0b3J5IGZvcgorcHJvamVjdCBgbXktZ2l0YC4gQWZ0ZXIgbG9nZ2luZyBpbnRvIHRoZSByZW1vdGUgbWFjaGluZSwgY3JlYXRlCithbiBlbXB0eSBkaXJlY3Rvcnk6CisKKy0tLS0tLS0tLS0tLQorJCBta2RpciBteS1naXQuZ2l0CistLS0tLS0tLS0tLS0KKworVGhlbiwgbWFrZSB0aGF0IGRpcmVjdG9yeSBpbnRvIGEgR2l0IHJlcG9zaXRvcnkgYnkgcnVubmluZworJ2dpdCBpbml0JywgYnV0IHRoaXMgdGltZSwgc2luY2UgaXRzIG5hbWUgaXMgbm90IHRoZSB1c3VhbAorYC5naXRgLCB3ZSBkbyB0aGluZ3Mgc2xpZ2h0bHkgZGlmZmVyZW50bHk6CisKKy0tLS0tLS0tLS0tLQorJCBHSVRfRElSPW15LWdpdC5naXQgZ2l0IGluaXQKKy0tLS0tLS0tLS0tLQorCitNYWtlIHN1cmUgdGhpcyBkaXJlY3RvcnkgaXMgYXZhaWxhYmxlIGZvciBvdGhlcnMgeW91IHdhbnQgeW91cgorY2hhbmdlcyB0byBiZSBwdWxsZWQgdmlhIHRoZSB0cmFuc3BvcnQgb2YgeW91ciBjaG9pY2UuIEFsc28KK3lvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSAnZ2l0LXJlY2VpdmUtcGFjaycKK3Byb2dyYW0gb24gdGhlIGAkUEFUSGAuCisKK1tOT1RFXQorTWFueSBpbnN0YWxsYXRpb25zIG9mIHNzaGQgZG8gbm90IGludm9rZSB5b3VyIHNoZWxsIGFzIHRoZSBsb2dpbgorc2hlbGwgd2hlbiB5b3UgZGlyZWN0bHkgcnVuIHByb2dyYW1zOyB3aGF0IHRoaXMgbWVhbnMgaXMgdGhhdCBpZgoreW91ciBsb2dpbiBzaGVsbCBpcyAnYmFzaCcsIG9ubHkgYC5iYXNocmNgIGlzIHJlYWQgYW5kIG5vdAorYC5iYXNoX3Byb2ZpbGVgLiBBcyBhIHdvcmthcm91bmQsIG1ha2Ugc3VyZSBgLmJhc2hyY2Agc2V0cyB1cAorYCRQQVRIYCBzbyB0aGF0IHlvdSBjYW4gcnVuICdnaXQtcmVjZWl2ZS1wYWNrJyBwcm9ncmFtLgorCitbTk9URV0KK0lmIHlvdSBwbGFuIHRvIHB1Ymxpc2ggdGhpcyByZXBvc2l0b3J5IHRvIGJlIGFjY2Vzc2VkIG92ZXIgaHR0cCwKK3lvdSBzaG91bGQgZG8gYG12IG15LWdpdC5naXQvaG9va3MvcG9zdC11cGRhdGUuc2FtcGxlCitteS1naXQuZ2l0L2hvb2tzL3Bvc3QtdXBkYXRlYCBhdCB0aGlzIHBvaW50LgorVGhpcyBtYWtlcyBzdXJlIHRoYXQgZXZlcnkgdGltZSB5b3UgcHVzaCBpbnRvIHRoaXMKK3JlcG9zaXRvcnksIGBnaXQgdXBkYXRlLXNlcnZlci1pbmZvYCBpcyBydW4uCisKK1lvdXIgInB1YmxpYyByZXBvc2l0b3J5IiBpcyBub3cgcmVhZHkgdG8gYWNjZXB0IHlvdXIgY2hhbmdlcy4KK0NvbWUgYmFjayB0byB0aGUgbWFjaGluZSB5b3UgaGF2ZSB5b3VyIHByaXZhdGUgcmVwb3NpdG9yeS4gRnJvbQordGhlcmUsIHJ1biB0aGlzIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCA8cHVibGljLWhvc3Q+Oi9wYXRoL3RvL215LWdpdC5naXQgbWFzdGVyCistLS0tLS0tLS0tLS0KKworVGhpcyBzeW5jaHJvbml6ZXMgeW91ciBwdWJsaWMgcmVwb3NpdG9yeSB0byBtYXRjaCB0aGUgbmFtZWQKK2JyYW5jaCBoZWFkIChpLmUuIGBtYXN0ZXJgIGluIHRoaXMgY2FzZSkgYW5kIG9iamVjdHMgcmVhY2hhYmxlCitmcm9tIHRoZW0gaW4geW91ciBjdXJyZW50IHJlcG9zaXRvcnkuCisKK0FzIGEgcmVhbCBleGFtcGxlLCB0aGlzIGlzIGhvdyBJIHVwZGF0ZSBteSBwdWJsaWMgR2l0CityZXBvc2l0b3J5LiBLZXJuZWwub3JnIG1pcnJvciBuZXR3b3JrIHRha2VzIGNhcmUgb2YgdGhlCitwcm9wYWdhdGlvbiB0byBvdGhlciBwdWJsaWNseSB2aXNpYmxlIG1hY2hpbmVzOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggbWFzdGVyLmtlcm5lbC5vcmc6L3B1Yi9zY20vZ2l0L2dpdC5naXQvCistLS0tLS0tLS0tLS0KKworCitQYWNraW5nIHlvdXIgcmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRWFybGllciwgd2Ugc2F3IHRoYXQgb25lIGZpbGUgdW5kZXIgYC5naXQvb2JqZWN0cy8/Py9gIGRpcmVjdG9yeQoraXMgc3RvcmVkIGZvciBlYWNoIEdpdCBvYmplY3QgeW91IGNyZWF0ZS4gVGhpcyByZXByZXNlbnRhdGlvbgoraXMgZWZmaWNpZW50IHRvIGNyZWF0ZSBhdG9taWNhbGx5IGFuZCBzYWZlbHksIGJ1dAorbm90IHNvIGNvbnZlbmllbnQgdG8gdHJhbnNwb3J0IG92ZXIgdGhlIG5ldHdvcmsuIFNpbmNlIEdpdCBvYmplY3RzIGFyZQoraW1tdXRhYmxlIG9uY2UgdGhleSBhcmUgY3JlYXRlZCwgdGhlcmUgaXMgYSB3YXkgdG8gb3B0aW1pemUgdGhlCitzdG9yYWdlIGJ5ICJwYWNraW5nIHRoZW0gdG9nZXRoZXIiLiBUaGUgY29tbWFuZAorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlcGFjaworLS0tLS0tLS0tLS0tCisKK3dpbGwgZG8gaXQgZm9yIHlvdS4gSWYgeW91IGZvbGxvd2VkIHRoZSB0dXRvcmlhbCBleGFtcGxlcywgeW91Cit3b3VsZCBoYXZlIGFjY3VtdWxhdGVkIGFib3V0IDE3IG9iamVjdHMgaW4gYC5naXQvb2JqZWN0cy8/Py9gCitkaXJlY3RvcmllcyBieSBub3cuICdnaXQgcmVwYWNrJyB0ZWxscyB5b3UgaG93IG1hbnkgb2JqZWN0cyBpdAorcGFja2VkLCBhbmQgc3RvcmVzIHRoZSBwYWNrZWQgZmlsZSBpbiBgLmdpdC9vYmplY3RzL3BhY2tgCitkaXJlY3RvcnkuCisKK1tOT1RFXQorWW91IHdpbGwgc2VlIHR3byBmaWxlcywgYHBhY2stKi5wYWNrYCBhbmQgYHBhY2stKi5pZHhgLAoraW4gYC5naXQvb2JqZWN0cy9wYWNrYCBkaXJlY3RvcnkuIFRoZXkgYXJlIGNsb3NlbHkgcmVsYXRlZCB0bworZWFjaCBvdGhlciwgYW5kIGlmIHlvdSBldmVyIGNvcHkgdGhlbSBieSBoYW5kIHRvIGEgZGlmZmVyZW50CityZXBvc2l0b3J5IGZvciB3aGF0ZXZlciByZWFzb24sIHlvdSBzaG91bGQgbWFrZSBzdXJlIHlvdSBjb3B5Cit0aGVtIHRvZ2V0aGVyLiBUaGUgZm9ybWVyIGhvbGRzIGFsbCB0aGUgZGF0YSBmcm9tIHRoZSBvYmplY3RzCitpbiB0aGUgcGFjaywgYW5kIHRoZSBsYXR0ZXIgaG9sZHMgdGhlIGluZGV4IGZvciByYW5kb20KK2FjY2Vzcy4KKworSWYgeW91IGFyZSBwYXJhbm9pZCwgcnVubmluZyAnZ2l0IHZlcmlmeS1wYWNrJyBjb21tYW5kIHdvdWxkCitkZXRlY3QgaWYgeW91IGhhdmUgYSBjb3JydXB0IHBhY2ssIGJ1dCBkbyBub3Qgd29ycnkgdG9vIG11Y2guCitPdXIgcHJvZ3JhbXMgYXJlIGFsd2F5cyBwZXJmZWN0IDstKS4KKworT25jZSB5b3UgaGF2ZSBwYWNrZWQgb2JqZWN0cywgeW91IGRvIG5vdCBuZWVkIHRvIGxlYXZlIHRoZQordW5wYWNrZWQgb2JqZWN0cyB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhlIHBhY2sgZmlsZSBhbnltb3JlLgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHBydW5lLXBhY2tlZAorLS0tLS0tLS0tLS0tCisKK3dvdWxkIHJlbW92ZSB0aGVtIGZvciB5b3UuCisKK1lvdSBjYW4gdHJ5IHJ1bm5pbmcgYGZpbmQgLmdpdC9vYmplY3RzIC10eXBlIGZgIGJlZm9yZSBhbmQgYWZ0ZXIKK3lvdSBydW4gYGdpdCBwcnVuZS1wYWNrZWRgIGlmIHlvdSBhcmUgY3VyaW91cy4gIEFsc28gYGdpdAorY291bnQtb2JqZWN0c2Agd291bGQgdGVsbCB5b3UgaG93IG1hbnkgdW5wYWNrZWQgb2JqZWN0cyBhcmUgaW4KK3lvdXIgcmVwb3NpdG9yeSBhbmQgaG93IG11Y2ggc3BhY2UgdGhleSBhcmUgY29uc3VtaW5nLgorCitbTk9URV0KK2BnaXQgcHVsbGAgaXMgc2xpZ2h0bHkgY3VtYmVyc29tZSBmb3IgSFRUUCB0cmFuc3BvcnQsIGFzIGEKK3BhY2tlZCByZXBvc2l0b3J5IG1heSBjb250YWluIHJlbGF0aXZlbHkgZmV3IG9iamVjdHMgaW4gYQorcmVsYXRpdmVseSBsYXJnZSBwYWNrLiBJZiB5b3UgZXhwZWN0IG1hbnkgSFRUUCBwdWxscyBmcm9tIHlvdXIKK3B1YmxpYyByZXBvc2l0b3J5IHlvdSBtaWdodCB3YW50IHRvIHJlcGFjayAmIHBydW5lIG9mdGVuLCBvcgorbmV2ZXIuCisKK0lmIHlvdSBydW4gYGdpdCByZXBhY2tgIGFnYWluIGF0IHRoaXMgcG9pbnQsIGl0IHdpbGwgc2F5CisiTm90aGluZyBuZXcgdG8gcGFjay4iLiBPbmNlIHlvdSBjb250aW51ZSB5b3VyIGRldmVsb3BtZW50IGFuZAorYWNjdW11bGF0ZSB0aGUgY2hhbmdlcywgcnVubmluZyBgZ2l0IHJlcGFja2AgYWdhaW4gd2lsbCBjcmVhdGUgYQorbmV3IHBhY2ssIHRoYXQgY29udGFpbnMgb2JqZWN0cyBjcmVhdGVkIHNpbmNlIHlvdSBwYWNrZWQgeW91cgorcmVwb3NpdG9yeSB0aGUgbGFzdCB0aW1lLiBXZSByZWNvbW1lbmQgdGhhdCB5b3UgcGFjayB5b3VyIHByb2plY3QKK3Nvb24gYWZ0ZXIgdGhlIGluaXRpYWwgaW1wb3J0ICh1bmxlc3MgeW91IGFyZSBzdGFydGluZyB5b3VyCitwcm9qZWN0IGZyb20gc2NyYXRjaCksIGFuZCB0aGVuIHJ1biBgZ2l0IHJlcGFja2AgZXZlcnkgb25jZSBpbiBhCit3aGlsZSwgZGVwZW5kaW5nIG9uIGhvdyBhY3RpdmUgeW91ciBwcm9qZWN0IGlzLgorCitXaGVuIGEgcmVwb3NpdG9yeSBpcyBzeW5jaHJvbml6ZWQgdmlhIGBnaXQgcHVzaGAgYW5kIGBnaXQgcHVsbGAKK29iamVjdHMgcGFja2VkIGluIHRoZSBzb3VyY2UgcmVwb3NpdG9yeSBhcmUgdXN1YWxseSBzdG9yZWQKK3VucGFja2VkIGluIHRoZSBkZXN0aW5hdGlvbiwgdW5sZXNzIHJzeW5jIHRyYW5zcG9ydCBpcyB1c2VkLgorV2hpbGUgdGhpcyBhbGxvd3MgeW91IHRvIHVzZSBkaWZmZXJlbnQgcGFja2luZyBzdHJhdGVnaWVzIG9uCitib3RoIGVuZHMsIGl0IGFsc28gbWVhbnMgeW91IG1heSBuZWVkIHRvIHJlcGFjayBib3RoCityZXBvc2l0b3JpZXMgZXZlcnkgb25jZSBpbiBhIHdoaWxlLgorCisKK1dvcmtpbmcgd2l0aCBPdGhlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0aG91Z2ggR2l0IGlzIGEgdHJ1bHkgZGlzdHJpYnV0ZWQgc3lzdGVtLCBpdCBpcyBvZnRlbgorY29udmVuaWVudCB0byBvcmdhbml6ZSB5b3VyIHByb2plY3Qgd2l0aCBhbiBpbmZvcm1hbCBoaWVyYXJjaHkKK29mIGRldmVsb3BlcnMuIExpbnV4IGtlcm5lbCBkZXZlbG9wbWVudCBpcyBydW4gdGhpcyB3YXkuIFRoZXJlCitpcyBhIG5pY2UgaWxsdXN0cmF0aW9uIChwYWdlIDE3LCAiTWVyZ2VzIHRvIE1haW5saW5lIikgaW4KK2h0dHA6Ly93d3cueGVub3RpbWUubmV0L2xpbnV4L21lbnRvci9saW51eC1tZW50b3JpbmctMjAwNi5wZGZbUmFuZHkgRHVubGFwJ3MgcHJlc2VudGF0aW9uXS4KKworSXQgc2hvdWxkIGJlIHN0cmVzc2VkIHRoYXQgdGhpcyBoaWVyYXJjaHkgaXMgcHVyZWx5ICppbmZvcm1hbCouCitUaGVyZSBpcyBub3RoaW5nIGZ1bmRhbWVudGFsIGluIEdpdCB0aGF0IGVuZm9yY2VzIHRoZSAiY2hhaW4gb2YKK3BhdGNoIGZsb3ciIHRoaXMgaGllcmFyY2h5IGltcGxpZXMuIFlvdSBkbyBub3QgaGF2ZSB0byBwdWxsCitmcm9tIG9ubHkgb25lIHJlbW90ZSByZXBvc2l0b3J5LgorCitBIHJlY29tbWVuZGVkIHdvcmtmbG93IGZvciBhICJwcm9qZWN0IGxlYWQiIGdvZXMgbGlrZSB0aGlzOgorCisxLiBQcmVwYXJlIHlvdXIgcHJpbWFyeSByZXBvc2l0b3J5IG9uIHlvdXIgbG9jYWwgbWFjaGluZS4gWW91cgorICAgd29yayBpcyBkb25lIHRoZXJlLgorCisyLiBQcmVwYXJlIGEgcHVibGljIHJlcG9zaXRvcnkgYWNjZXNzaWJsZSB0byBvdGhlcnMuCisrCitJZiBvdGhlciBwZW9wbGUgYXJlIHB1bGxpbmcgZnJvbSB5b3VyIHJlcG9zaXRvcnkgb3ZlciBkdW1iCit0cmFuc3BvcnQgcHJvdG9jb2xzIChIVFRQKSwgeW91IG5lZWQgdG8ga2VlcCB0aGlzIHJlcG9zaXRvcnkKKydkdW1iIHRyYW5zcG9ydCBmcmllbmRseScuICBBZnRlciBgZ2l0IGluaXRgLAorYCRHSVRfRElSL2hvb2tzL3Bvc3QtdXBkYXRlLnNhbXBsZWAgY29waWVkIGZyb20gdGhlIHN0YW5kYXJkIHRlbXBsYXRlcword291bGQgY29udGFpbiBhIGNhbGwgdG8gJ2dpdCB1cGRhdGUtc2VydmVyLWluZm8nCitidXQgeW91IG5lZWQgdG8gbWFudWFsbHkgZW5hYmxlIHRoZSBob29rIHdpdGgKK2BtdiBwb3N0LXVwZGF0ZS5zYW1wbGUgcG9zdC11cGRhdGVgLiAgVGhpcyBtYWtlcyBzdXJlCisnZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbycga2VlcHMgdGhlIG5lY2Vzc2FyeSBmaWxlcyB1cC10by1kYXRlLgorCiszLiBQdXNoIGludG8gdGhlIHB1YmxpYyByZXBvc2l0b3J5IGZyb20geW91ciBwcmltYXJ5CisgICByZXBvc2l0b3J5LgorCis0LiAnZ2l0IHJlcGFjaycgdGhlIHB1YmxpYyByZXBvc2l0b3J5LiBUaGlzIGVzdGFibGlzaGVzIGEgYmlnCisgICBwYWNrIHRoYXQgY29udGFpbnMgdGhlIGluaXRpYWwgc2V0IG9mIG9iamVjdHMgYXMgdGhlCisgICBiYXNlbGluZSwgYW5kIHBvc3NpYmx5ICdnaXQgcHJ1bmUnIGlmIHRoZSB0cmFuc3BvcnQKKyAgIHVzZWQgZm9yIHB1bGxpbmcgZnJvbSB5b3VyIHJlcG9zaXRvcnkgc3VwcG9ydHMgcGFja2VkCisgICByZXBvc2l0b3JpZXMuCisKKzUuIEtlZXAgd29ya2luZyBpbiB5b3VyIHByaW1hcnkgcmVwb3NpdG9yeS4gWW91ciBjaGFuZ2VzCisgICBpbmNsdWRlIG1vZGlmaWNhdGlvbnMgb2YgeW91ciBvd24sIHBhdGNoZXMgeW91IHJlY2VpdmUgdmlhCisgICBlLW1haWxzLCBhbmQgbWVyZ2VzIHJlc3VsdGluZyBmcm9tIHB1bGxpbmcgdGhlICJwdWJsaWMiCisgICByZXBvc2l0b3JpZXMgb2YgeW91ciAic3Vic3lzdGVtIG1haW50YWluZXJzIi4KKysKK1lvdSBjYW4gcmVwYWNrIHRoaXMgcHJpdmF0ZSByZXBvc2l0b3J5IHdoZW5ldmVyIHlvdSBmZWVsIGxpa2UuCisKKzYuIFB1c2ggeW91ciBjaGFuZ2VzIHRvIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSwgYW5kIGFubm91bmNlIGl0CisgICB0byB0aGUgcHVibGljLgorCis3LiBFdmVyeSBvbmNlIGluIGEgd2hpbGUsICdnaXQgcmVwYWNrJyB0aGUgcHVibGljIHJlcG9zaXRvcnkuCisgICBHbyBiYWNrIHRvIHN0ZXAgNS4gYW5kIGNvbnRpbnVlIHdvcmtpbmcuCisKKworQSByZWNvbW1lbmRlZCB3b3JrIGN5Y2xlIGZvciBhICJzdWJzeXN0ZW0gbWFpbnRhaW5lciIgd2hvIHdvcmtzCitvbiB0aGF0IHByb2plY3QgYW5kIGhhcyBhbiBvd24gInB1YmxpYyByZXBvc2l0b3J5IiBnb2VzIGxpa2UgdGhpczoKKworMS4gUHJlcGFyZSB5b3VyIHdvcmsgcmVwb3NpdG9yeSwgYnkgJ2dpdCBjbG9uZScgdGhlIHB1YmxpYworICAgcmVwb3NpdG9yeSBvZiB0aGUgInByb2plY3QgbGVhZCIuIFRoZSBVUkwgdXNlZCBmb3IgdGhlCisgICBpbml0aWFsIGNsb25pbmcgaXMgc3RvcmVkIGluIHRoZSByZW1vdGUub3JpZ2luLnVybAorICAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKworMi4gUHJlcGFyZSBhIHB1YmxpYyByZXBvc2l0b3J5IGFjY2Vzc2libGUgdG8gb3RoZXJzLCBqdXN0IGxpa2UKKyAgIHRoZSAicHJvamVjdCBsZWFkIiBwZXJzb24gZG9lcy4KKworMy4gQ29weSBvdmVyIHRoZSBwYWNrZWQgZmlsZXMgZnJvbSAicHJvamVjdCBsZWFkIiBwdWJsaWMKKyAgIHJlcG9zaXRvcnkgdG8geW91ciBwdWJsaWMgcmVwb3NpdG9yeSwgdW5sZXNzIHRoZSAicHJvamVjdAorICAgbGVhZCIgcmVwb3NpdG9yeSBsaXZlcyBvbiB0aGUgc2FtZSBtYWNoaW5lIGFzIHlvdXJzLiAgSW4gdGhlCisgICBsYXR0ZXIgY2FzZSwgeW91IGNhbiB1c2UgYG9iamVjdHMvaW5mby9hbHRlcm5hdGVzYCBmaWxlIHRvCisgICBwb2ludCBhdCB0aGUgcmVwb3NpdG9yeSB5b3UgYXJlIGJvcnJvd2luZyBmcm9tLgorCis0LiBQdXNoIGludG8gdGhlIHB1YmxpYyByZXBvc2l0b3J5IGZyb20geW91ciBwcmltYXJ5CisgICByZXBvc2l0b3J5LiBSdW4gJ2dpdCByZXBhY2snLCBhbmQgcG9zc2libHkgJ2dpdCBwcnVuZScgaWYgdGhlCisgICB0cmFuc3BvcnQgdXNlZCBmb3IgcHVsbGluZyBmcm9tIHlvdXIgcmVwb3NpdG9yeSBzdXBwb3J0cworICAgcGFja2VkIHJlcG9zaXRvcmllcy4KKworNS4gS2VlcCB3b3JraW5nIGluIHlvdXIgcHJpbWFyeSByZXBvc2l0b3J5LiBZb3VyIGNoYW5nZXMKKyAgIGluY2x1ZGUgbW9kaWZpY2F0aW9ucyBvZiB5b3VyIG93biwgcGF0Y2hlcyB5b3UgcmVjZWl2ZSB2aWEKKyAgIGUtbWFpbHMsIGFuZCBtZXJnZXMgcmVzdWx0aW5nIGZyb20gcHVsbGluZyB0aGUgInB1YmxpYyIKKyAgIHJlcG9zaXRvcmllcyBvZiB5b3VyICJwcm9qZWN0IGxlYWQiIGFuZCBwb3NzaWJseSB5b3VyCisgICAic3ViLXN1YnN5c3RlbSBtYWludGFpbmVycyIuCisrCitZb3UgY2FuIHJlcGFjayB0aGlzIHByaXZhdGUgcmVwb3NpdG9yeSB3aGVuZXZlciB5b3UgZmVlbAorbGlrZS4KKworNi4gUHVzaCB5b3VyIGNoYW5nZXMgdG8geW91ciBwdWJsaWMgcmVwb3NpdG9yeSwgYW5kIGFzayB5b3VyCisgICAicHJvamVjdCBsZWFkIiBhbmQgcG9zc2libHkgeW91ciAic3ViLXN1YnN5c3RlbQorICAgbWFpbnRhaW5lcnMiIHRvIHB1bGwgZnJvbSBpdC4KKworNy4gRXZlcnkgb25jZSBpbiBhIHdoaWxlLCAnZ2l0IHJlcGFjaycgdGhlIHB1YmxpYyByZXBvc2l0b3J5LgorICAgR28gYmFjayB0byBzdGVwIDUuIGFuZCBjb250aW51ZSB3b3JraW5nLgorCisKK0EgcmVjb21tZW5kZWQgd29yayBjeWNsZSBmb3IgYW4gImluZGl2aWR1YWwgZGV2ZWxvcGVyIiB3aG8gZG9lcworbm90IGhhdmUgYSAicHVibGljIiByZXBvc2l0b3J5IGlzIHNvbWV3aGF0IGRpZmZlcmVudC4gSXQgZ29lcworbGlrZSB0aGlzOgorCisxLiBQcmVwYXJlIHlvdXIgd29yayByZXBvc2l0b3J5LCBieSAnZ2l0IGNsb25lJyB0aGUgcHVibGljCisgICByZXBvc2l0b3J5IG9mIHRoZSAicHJvamVjdCBsZWFkIiAob3IgYSAic3Vic3lzdGVtCisgICBtYWludGFpbmVyIiwgaWYgeW91IHdvcmsgb24gYSBzdWJzeXN0ZW0pLiBUaGUgVVJMIHVzZWQgZm9yCisgICB0aGUgaW5pdGlhbCBjbG9uaW5nIGlzIHN0b3JlZCBpbiB0aGUgcmVtb3RlLm9yaWdpbi51cmwKKyAgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKzIuIERvIHlvdXIgd29yayBpbiB5b3VyIHJlcG9zaXRvcnkgb24gJ21hc3RlcicgYnJhbmNoLgorCiszLiBSdW4gYGdpdCBmZXRjaCBvcmlnaW5gIGZyb20gdGhlIHB1YmxpYyByZXBvc2l0b3J5IG9mIHlvdXIKKyAgIHVwc3RyZWFtIGV2ZXJ5IG9uY2UgaW4gYSB3aGlsZS4gVGhpcyBkb2VzIG9ubHkgdGhlIGZpcnN0CisgICBoYWxmIG9mIGBnaXQgcHVsbGAgYnV0IGRvZXMgbm90IG1lcmdlLiBUaGUgaGVhZCBvZiB0aGUKKyAgIHB1YmxpYyByZXBvc2l0b3J5IGlzIHN0b3JlZCBpbiBgLmdpdC9yZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcmAuCisKKzQuIFVzZSBgZ2l0IGNoZXJyeSBvcmlnaW5gIHRvIHNlZSB3aGljaCBvbmVzIG9mIHlvdXIgcGF0Y2hlcworICAgd2VyZSBhY2NlcHRlZCwgYW5kL29yIHVzZSBgZ2l0IHJlYmFzZSBvcmlnaW5gIHRvIHBvcnQgeW91cgorICAgdW5tZXJnZWQgY2hhbmdlcyBmb3J3YXJkIHRvIHRoZSB1cGRhdGVkIHVwc3RyZWFtLgorCis1LiBVc2UgYGdpdCBmb3JtYXQtcGF0Y2ggb3JpZ2luYCB0byBwcmVwYXJlIHBhdGNoZXMgZm9yIGUtbWFpbAorICAgc3VibWlzc2lvbiB0byB5b3VyIHVwc3RyZWFtIGFuZCBzZW5kIGl0IG91dC4gR28gYmFjayB0bworICAgc3RlcCAyLiBhbmQgY29udGludWUuCisKKworV29ya2luZyB3aXRoIE90aGVycywgU2hhcmVkIFJlcG9zaXRvcnkgU3R5bGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBhcmUgY29taW5nIGZyb20gQ1ZTIGJhY2tncm91bmQsIHRoZSBzdHlsZSBvZiBjb29wZXJhdGlvbgorc3VnZ2VzdGVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uIG1heSBiZSBuZXcgdG8geW91LiBZb3UgZG8gbm90CitoYXZlIHRvIHdvcnJ5LiBHaXQgc3VwcG9ydHMgInNoYXJlZCBwdWJsaWMgcmVwb3NpdG9yeSIgc3R5bGUgb2YKK2Nvb3BlcmF0aW9uIHlvdSBhcmUgcHJvYmFibHkgbW9yZSBmYW1pbGlhciB3aXRoIGFzIHdlbGwuCisKK1NlZSBsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10gZm9yIHRoZSBkZXRhaWxzLgorCitCdW5kbGluZyB5b3VyIHdvcmsgdG9nZXRoZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyBsaWtlbHkgdGhhdCB5b3Ugd2lsbCBiZSB3b3JraW5nIG9uIG1vcmUgdGhhbiBvbmUgdGhpbmcgYXQKK2EgdGltZS4gIEl0IGlzIGVhc3kgdG8gbWFuYWdlIHRob3NlIG1vcmUtb3ItbGVzcyBpbmRlcGVuZGVudCB0YXNrcwordXNpbmcgYnJhbmNoZXMgd2l0aCBHaXQuCisKK1dlIGhhdmUgYWxyZWFkeSBzZWVuIGhvdyBicmFuY2hlcyB3b3JrIHByZXZpb3VzbHksCit3aXRoICJmdW4gYW5kIHdvcmsiIGV4YW1wbGUgdXNpbmcgdHdvIGJyYW5jaGVzLiAgVGhlIGlkZWEgaXMgdGhlCitzYW1lIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gdHdvIGJyYW5jaGVzLiAgTGV0J3Mgc2F5IHlvdSBzdGFydGVkCitvdXQgZnJvbSAibWFzdGVyIiBoZWFkLCBhbmQgaGF2ZSBzb21lIG5ldyBjb2RlIGluIHRoZSAibWFzdGVyIgorYnJhbmNoLCBhbmQgdHdvIGluZGVwZW5kZW50IGZpeGVzIGluIHRoZSAiY29tbWl0LWZpeCIgYW5kCisiZGlmZi1maXgiIGJyYW5jaGVzOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoCishIFtjb21taXQtZml4XSBGaXggY29tbWl0IG1lc3NhZ2Ugbm9ybWFsaXphdGlvbi4KKyAhIFtkaWZmLWZpeF0gRml4IHJlbmFtZSBkZXRlY3Rpb24uCisgICogW21hc3Rlcl0gUmVsZWFzZSBjYW5kaWRhdGUgIzEKKy0tLQorICsgIFtkaWZmLWZpeF0gRml4IHJlbmFtZSBkZXRlY3Rpb24uCisgKyAgW2RpZmYtZml4fjFdIEJldHRlciBjb21tb24gc3Vic3RyaW5nIGFsZ29yaXRobS4KKysgICBbY29tbWl0LWZpeF0gRml4IGNvbW1pdCBtZXNzYWdlIG5vcm1hbGl6YXRpb24uCisgICogW21hc3Rlcl0gUmVsZWFzZSBjYW5kaWRhdGUgIzEKKysrKiBbZGlmZi1maXh+Ml0gUHJldHR5LXByaW50IG1lc3NhZ2VzLgorLS0tLS0tLS0tLS0tCisKK0JvdGggZml4ZXMgYXJlIHRlc3RlZCB3ZWxsLCBhbmQgYXQgdGhpcyBwb2ludCwgeW91IHdhbnQgdG8gbWVyZ2UKK2luIGJvdGggb2YgdGhlbS4gIFlvdSBjb3VsZCBtZXJnZSBpbiAnZGlmZi1maXgnIGZpcnN0IGFuZCB0aGVuCisnY29tbWl0LWZpeCcgbmV4dCwgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IG1lcmdlIC1tICJNZXJnZSBmaXggaW4gZGlmZi1maXgiIGRpZmYtZml4CiskIGdpdCBtZXJnZSAtbSAiTWVyZ2UgZml4IGluIGNvbW1pdC1maXgiIGNvbW1pdC1maXgKKy0tLS0tLS0tLS0tLQorCitXaGljaCB3b3VsZCByZXN1bHQgaW46CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdy1icmFuY2gKKyEgW2NvbW1pdC1maXhdIEZpeCBjb21taXQgbWVzc2FnZSBub3JtYWxpemF0aW9uLgorICEgW2RpZmYtZml4XSBGaXggcmVuYW1lIGRldGVjdGlvbi4KKyAgKiBbbWFzdGVyXSBNZXJnZSBmaXggaW4gY29tbWl0LWZpeAorLS0tCisgIC0gW21hc3Rlcl0gTWVyZ2UgZml4IGluIGNvbW1pdC1maXgKKysgKiBbY29tbWl0LWZpeF0gRml4IGNvbW1pdCBtZXNzYWdlIG5vcm1hbGl6YXRpb24uCisgIC0gW21hc3Rlcn4xXSBNZXJnZSBmaXggaW4gZGlmZi1maXgKKyArKiBbZGlmZi1maXhdIEZpeCByZW5hbWUgZGV0ZWN0aW9uLgorICsqIFtkaWZmLWZpeH4xXSBCZXR0ZXIgY29tbW9uIHN1YnN0cmluZyBhbGdvcml0aG0uCisgICogW21hc3Rlcn4yXSBSZWxlYXNlIGNhbmRpZGF0ZSAjMQorKysqIFttYXN0ZXJ+M10gUHJldHR5LXByaW50IG1lc3NhZ2VzLgorLS0tLS0tLS0tLS0tCisKK0hvd2V2ZXIsIHRoZXJlIGlzIG5vIHBhcnRpY3VsYXIgcmVhc29uIHRvIG1lcmdlIGluIG9uZSBicmFuY2gKK2ZpcnN0IGFuZCB0aGUgb3RoZXIgbmV4dCwgd2hlbiB3aGF0IHlvdSBoYXZlIGFyZSBhIHNldCBvZiB0cnVseQoraW5kZXBlbmRlbnQgY2hhbmdlcyAoaWYgdGhlIG9yZGVyIG1hdHRlcmVkLCB0aGVuIHRoZXkgYXJlIG5vdAoraW5kZXBlbmRlbnQgYnkgZGVmaW5pdGlvbikuICBZb3UgY291bGQgaW5zdGVhZCBtZXJnZSB0aG9zZSB0d28KK2JyYW5jaGVzIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoIGF0IG9uY2UuICBGaXJzdCBsZXQncyB1bmRvIHdoYXQKK3dlIGp1c3QgZGlkIGFuZCBzdGFydCBvdmVyLiAgV2Ugd291bGQgd2FudCB0byBnZXQgdGhlIG1hc3RlcgorYnJhbmNoIGJlZm9yZSB0aGVzZSB0d28gbWVyZ2VzIGJ5IHJlc2V0dGluZyBpdCB0byAnbWFzdGVyfjInOgorCistLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXJ+MgorLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gbWFrZSBzdXJlIGBnaXQgc2hvdy1icmFuY2hgIG1hdGNoZXMgdGhlIHN0YXRlIGJlZm9yZQordGhvc2UgdHdvICdnaXQgbWVyZ2UnIHlvdSBqdXN0IGRpZC4gIFRoZW4sIGluc3RlYWQgb2YgcnVubmluZwordHdvICdnaXQgbWVyZ2UnIGNvbW1hbmRzIGluIGEgcm93LCB5b3Ugd291bGQgbWVyZ2UgdGhlc2UgdHdvCiticmFuY2ggaGVhZHMgKHRoaXMgaXMga25vd24gYXMgJ21ha2luZyBhbiBPY3RvcHVzJyk6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UgY29tbWl0LWZpeCBkaWZmLWZpeAorJCBnaXQgc2hvdy1icmFuY2gKKyEgW2NvbW1pdC1maXhdIEZpeCBjb21taXQgbWVzc2FnZSBub3JtYWxpemF0aW9uLgorICEgW2RpZmYtZml4XSBGaXggcmVuYW1lIGRldGVjdGlvbi4KKyAgKiBbbWFzdGVyXSBPY3RvcHVzIG1lcmdlIG9mIGJyYW5jaGVzICdkaWZmLWZpeCcgYW5kICdjb21taXQtZml4JworLS0tCisgIC0gW21hc3Rlcl0gT2N0b3B1cyBtZXJnZSBvZiBicmFuY2hlcyAnZGlmZi1maXgnIGFuZCAnY29tbWl0LWZpeCcKKysgKiBbY29tbWl0LWZpeF0gRml4IGNvbW1pdCBtZXNzYWdlIG5vcm1hbGl6YXRpb24uCisgKyogW2RpZmYtZml4XSBGaXggcmVuYW1lIGRldGVjdGlvbi4KKyArKiBbZGlmZi1maXh+MV0gQmV0dGVyIGNvbW1vbiBzdWJzdHJpbmcgYWxnb3JpdGhtLgorICAqIFttYXN0ZXJ+MV0gUmVsZWFzZSBjYW5kaWRhdGUgIzEKKysrKiBbbWFzdGVyfjJdIFByZXR0eS1wcmludCBtZXNzYWdlcy4KKy0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgeW91IHNob3VsZCBub3QgZG8gT2N0b3B1cyBiZWNhdXNlIHlvdSBjYW4uICBBbiBvY3RvcHVzCitpcyBhIHZhbGlkIHRoaW5nIHRvIGRvIGFuZCBvZnRlbiBtYWtlcyBpdCBlYXNpZXIgdG8gdmlldyB0aGUKK2NvbW1pdCBoaXN0b3J5IGlmIHlvdSBhcmUgbWVyZ2luZyBtb3JlIHRoYW4gdHdvIGluZGVwZW5kZW50CitjaGFuZ2VzIGF0IHRoZSBzYW1lIHRpbWUuICBIb3dldmVyLCBpZiB5b3UgaGF2ZSBtZXJnZSBjb25mbGljdHMKK3dpdGggYW55IG9mIHRoZSBicmFuY2hlcyB5b3UgYXJlIG1lcmdpbmcgaW4gYW5kIG5lZWQgdG8gaGFuZAorcmVzb2x2ZSwgdGhhdCBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgdGhlIGRldmVsb3BtZW50IGhhcHBlbmVkIGluCit0aG9zZSBicmFuY2hlcyB3ZXJlIG5vdCBpbmRlcGVuZGVudCBhZnRlciBhbGwsIGFuZCB5b3Ugc2hvdWxkCittZXJnZSB0d28gYXQgYSB0aW1lLCBkb2N1bWVudGluZyBob3cgeW91IHJlc29sdmVkIHRoZSBjb25mbGljdHMsCithbmQgdGhlIHJlYXNvbiB3aHkgeW91IHByZWZlcnJlZCBjaGFuZ2VzIG1hZGUgaW4gb25lIHNpZGUgb3ZlcgordGhlIG90aGVyLiAgT3RoZXJ3aXNlIGl0IHdvdWxkIG1ha2UgdGhlIHByb2plY3QgaGlzdG9yeSBoYXJkZXIKK3RvIGZvbGxvdywgbm90IGVhc2llci4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHR1dG9yaWFsWzddLAorbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXQtaGVscFsxXSwKK2xpbmtnaXQ6Z2l0ZXZlcnlkYXlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGNyZWRlbnRpYWxzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Y3JlZGVudGlhbHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNzViZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGNyZWRlbnRpYWxzLnR4dApAQCAtMCwwICsxLDE4MyBAQAorZ2l0Y3JlZGVudGlhbHMoNykKKz09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGNyZWRlbnRpYWxzIC0gcHJvdmlkaW5nIHVzZXJuYW1lcyBhbmQgcGFzc3dvcmRzIHRvIEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLQorZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmh0dHBzOi8vZXhhbXBsZS5jb20udXNlcm5hbWUgbXl1c2VybmFtZQorZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAiJGhlbHBlciAkb3B0aW9ucyIKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2l0IHdpbGwgc29tZXRpbWVzIG5lZWQgY3JlZGVudGlhbHMgZnJvbSB0aGUgdXNlciBpbiBvcmRlciB0byBwZXJmb3JtCitvcGVyYXRpb25zOyBmb3IgZXhhbXBsZSwgaXQgbWF5IG5lZWQgdG8gYXNrIGZvciBhIHVzZXJuYW1lIGFuZCBwYXNzd29yZAoraW4gb3JkZXIgdG8gYWNjZXNzIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBIVFRQLiBUaGlzIG1hbnVhbCBkZXNjcmliZXMKK3RoZSBtZWNoYW5pc21zIEdpdCB1c2VzIHRvIHJlcXVlc3QgdGhlc2UgY3JlZGVudGlhbHMsIGFzIHdlbGwgYXMgc29tZQorZmVhdHVyZXMgdG8gYXZvaWQgaW5wdXR0aW5nIHRoZXNlIGNyZWRlbnRpYWxzIHJlcGVhdGVkbHkuCisKK1JFUVVFU1RJTkcgQ1JFREVOVElBTFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aG91dCBhbnkgY3JlZGVudGlhbCBoZWxwZXJzIGRlZmluZWQsIEdpdCB3aWxsIHRyeSB0aGUgZm9sbG93aW5nCitzdHJhdGVnaWVzIHRvIGFzayB0aGUgdXNlciBmb3IgdXNlcm5hbWVzIGFuZCBwYXNzd29yZHM6CisKKzEuIElmIHRoZSBgR0lUX0FTS1BBU1NgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgdGhlIHByb2dyYW0KKyAgIHNwZWNpZmllZCBieSB0aGUgdmFyaWFibGUgaXMgaW52b2tlZC4gQSBzdWl0YWJsZSBwcm9tcHQgaXMgcHJvdmlkZWQKKyAgIHRvIHRoZSBwcm9ncmFtIG9uIHRoZSBjb21tYW5kIGxpbmUsIGFuZCB0aGUgdXNlcidzIGlucHV0IGlzIHJlYWQKKyAgIGZyb20gaXRzIHN0YW5kYXJkIG91dHB1dC4KKworMi4gT3RoZXJ3aXNlLCBpZiB0aGUgYGNvcmUuYXNrUGFzc2AgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBzZXQsIGl0cworICAgdmFsdWUgaXMgdXNlZCBhcyBhYm92ZS4KKworMy4gT3RoZXJ3aXNlLCBpZiB0aGUgYFNTSF9BU0tQQVNTYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsIGl0cworICAgdmFsdWUgaXMgdXNlZCBhcyBhYm92ZS4KKworNC4gT3RoZXJ3aXNlLCB0aGUgdXNlciBpcyBwcm9tcHRlZCBvbiB0aGUgdGVybWluYWwuCisKK0FWT0lESU5HIFJFUEVUSVRJT04KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgY2FuIGJlIGN1bWJlcnNvbWUgdG8gaW5wdXQgdGhlIHNhbWUgY3JlZGVudGlhbHMgb3ZlciBhbmQgb3Zlci4gIEdpdAorcHJvdmlkZXMgdHdvIG1ldGhvZHMgdG8gcmVkdWNlIHRoaXMgYW5ub3lhbmNlOgorCisxLiBTdGF0aWMgY29uZmlndXJhdGlvbiBvZiB1c2VybmFtZXMgZm9yIGEgZ2l2ZW4gYXV0aGVudGljYXRpb24gY29udGV4dC4KKworMi4gQ3JlZGVudGlhbCBoZWxwZXJzIHRvIGNhY2hlIG9yIHN0b3JlIHBhc3N3b3Jkcywgb3IgdG8gaW50ZXJhY3Qgd2l0aAorICAgYSBzeXN0ZW0gcGFzc3dvcmQgd2FsbGV0IG9yIGtleWNoYWluLgorCitUaGUgZmlyc3QgaXMgc2ltcGxlIGFuZCBhcHByb3ByaWF0ZSBpZiB5b3UgZG8gbm90IGhhdmUgc2VjdXJlIHN0b3JhZ2UgYXZhaWxhYmxlCitmb3IgYSBwYXNzd29yZC4gSXQgaXMgZ2VuZXJhbGx5IGNvbmZpZ3VyZWQgYnkgYWRkaW5nIHRoaXMgdG8geW91ciBjb25maWc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2NyZWRlbnRpYWwgImh0dHBzOi8vZXhhbXBsZS5jb20iXQorCXVzZXJuYW1lID0gbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVkZW50aWFsIGhlbHBlcnMsIG9uIHRoZSBvdGhlciBoYW5kLCBhcmUgZXh0ZXJuYWwgcHJvZ3JhbXMgZnJvbSB3aGljaCBHaXQgY2FuCityZXF1ZXN0IGJvdGggdXNlcm5hbWVzIGFuZCBwYXNzd29yZHM7IHRoZXkgdHlwaWNhbGx5IGludGVyZmFjZSB3aXRoIHNlY3VyZQorc3RvcmFnZSBwcm92aWRlZCBieSB0aGUgT1Mgb3Igb3RoZXIgcHJvZ3JhbXMuCisKK1RvIHVzZSBhIGhlbHBlciwgeW91IG11c3QgZmlyc3Qgc2VsZWN0IG9uZSB0byB1c2UuIEdpdCBjdXJyZW50bHkKK2luY2x1ZGVzIHRoZSBmb2xsb3dpbmcgaGVscGVyczoKKworY2FjaGU6OgorCisJQ2FjaGUgY3JlZGVudGlhbHMgaW4gbWVtb3J5IGZvciBhIHNob3J0IHBlcmlvZCBvZiB0aW1lLiBTZWUKKwlsaW5rZ2l0OmdpdC1jcmVkZW50aWFsLWNhY2hlWzFdIGZvciBkZXRhaWxzLgorCitzdG9yZTo6CisKKwlTdG9yZSBjcmVkZW50aWFscyBpbmRlZmluaXRlbHkgb24gZGlzay4gU2VlCisJbGlua2dpdDpnaXQtY3JlZGVudGlhbC1zdG9yZVsxXSBmb3IgZGV0YWlscy4KKworWW91IG1heSBhbHNvIGhhdmUgdGhpcmQtcGFydHkgaGVscGVycyBpbnN0YWxsZWQ7IHNlYXJjaCBmb3IKK2BjcmVkZW50aWFsLSpgIGluIHRoZSBvdXRwdXQgb2YgYGdpdCBoZWxwIC1hYCwgYW5kIGNvbnN1bHQgdGhlCitkb2N1bWVudGF0aW9uIG9mIGluZGl2aWR1YWwgaGVscGVycy4gIE9uY2UgeW91IGhhdmUgc2VsZWN0ZWQgYSBoZWxwZXIsCit5b3UgY2FuIHRlbGwgR2l0IHRvIHVzZSBpdCBieSBwdXR0aW5nIGl0cyBuYW1lIGludG8gdGhlCitjcmVkZW50aWFsLmhlbHBlciB2YXJpYWJsZS4KKworMS4gRmluZCBhIGhlbHBlci4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGhlbHAgLWEgfCBncmVwIGNyZWRlbnRpYWwtCitjcmVkZW50aWFsLWZvbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisyLiBSZWFkIGl0cyBkZXNjcmlwdGlvbi4KKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGhlbHAgY3JlZGVudGlhbC1mb28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMy4gVGVsbCBHaXQgdG8gdXNlIGl0LgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIGNyZWRlbnRpYWwuaGVscGVyIGZvbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB0aGVyZSBhcmUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBgY3JlZGVudGlhbC5oZWxwZXJgIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlLCBlYWNoIGhlbHBlciB3aWxsIGJlIHRyaWVkIGluIHR1cm4sIGFuZCBtYXkgcHJvdmlkZSBhIHVzZXJuYW1lLAorcGFzc3dvcmQsIG9yIG5vdGhpbmcuIE9uY2UgR2l0IGhhcyBhY3F1aXJlZCBib3RoIGEgdXNlcm5hbWUgYW5kIGEKK3Bhc3N3b3JkLCBubyBtb3JlIGhlbHBlcnMgd2lsbCBiZSB0cmllZC4KKworCitDUkVERU5USUFMIENPTlRFWFRTCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCBjb25zaWRlcnMgZWFjaCBjcmVkZW50aWFsIHRvIGhhdmUgYSBjb250ZXh0IGRlZmluZWQgYnkgYSBVUkwuIFRoaXMgY29udGV4dAoraXMgdXNlZCB0byBsb29rIHVwIGNvbnRleHQtc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgYW5kIGlzIHBhc3NlZCB0byBhbnkKK2hlbHBlcnMsIHdoaWNoIG1heSB1c2UgaXQgYXMgYW4gaW5kZXggaW50byBzZWN1cmUgc3RvcmFnZS4KKworRm9yIGluc3RhbmNlLCBpbWFnaW5lIHdlIGFyZSBhY2Nlc3NpbmcgYGh0dHBzOi8vZXhhbXBsZS5jb20vZm9vLmdpdGAuIFdoZW4gR2l0Citsb29rcyBpbnRvIGEgY29uZmlnIGZpbGUgdG8gc2VlIGlmIGEgc2VjdGlvbiBtYXRjaGVzIHRoaXMgY29udGV4dCwgaXQgd2lsbAorY29uc2lkZXIgdGhlIHR3byBhIG1hdGNoIGlmIHRoZSBjb250ZXh0IGlzIGEgbW9yZS1zcGVjaWZpYyBzdWJzZXQgb2YgdGhlCitwYXR0ZXJuIGluIHRoZSBjb25maWcgZmlsZS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHRoaXMgaW4geW91ciBjb25maWcgZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tjcmVkZW50aWFsICJodHRwczovL2V4YW1wbGUuY29tIl0KKwl1c2VybmFtZSA9IGZvbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGhlbiB3ZSB3aWxsIG1hdGNoOiBib3RoIHByb3RvY29scyBhcmUgdGhlIHNhbWUsIGJvdGggaG9zdHMgYXJlIHRoZSBzYW1lLCBhbmQKK3RoZSAicGF0dGVybiIgVVJMIGRvZXMgbm90IGNhcmUgYWJvdXQgdGhlIHBhdGggY29tcG9uZW50IGF0IGFsbC4gSG93ZXZlciwgdGhpcworY29udGV4dCB3b3VsZCBub3QgbWF0Y2g6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbY3JlZGVudGlhbCAiaHR0cHM6Ly9rZXJuZWwub3JnIl0KKwl1c2VybmFtZSA9IGZvbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYmVjYXVzZSB0aGUgaG9zdG5hbWVzIGRpZmZlci4gTm9yIHdvdWxkIGl0IG1hdGNoIGBmb28uZXhhbXBsZS5jb21gOyBHaXQKK2NvbXBhcmVzIGhvc3RuYW1lcyBleGFjdGx5LCB3aXRob3V0IGNvbnNpZGVyaW5nIHdoZXRoZXIgdHdvIGhvc3RzIGFyZSBwYXJ0IG9mCit0aGUgc2FtZSBkb21haW4uIExpa2V3aXNlLCBhIGNvbmZpZyBlbnRyeSBmb3IgYGh0dHA6Ly9leGFtcGxlLmNvbWAgd291bGQgbm90CittYXRjaDogR2l0IGNvbXBhcmVzIHRoZSBwcm90b2NvbHMgZXhhY3RseS4KKworCitDT05GSUdVUkFUSU9OIE9QVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPcHRpb25zIGZvciBhIGNyZWRlbnRpYWwgY29udGV4dCBjYW4gYmUgY29uZmlndXJlZCBlaXRoZXIgaW4KK2BjcmVkZW50aWFsLipgICh3aGljaCBhcHBsaWVzIHRvIGFsbCBjcmVkZW50aWFscyksIG9yCitgY3JlZGVudGlhbC48dXJsPi4qYCwgd2hlcmUgPHVybD4gbWF0Y2hlcyB0aGUgY29udGV4dCBhcyBkZXNjcmliZWQKK2Fib3ZlLgorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBpbiBlaXRoZXIgbG9jYXRpb246CisKK2hlbHBlcjo6CisKKwlUaGUgbmFtZSBvZiBhbiBleHRlcm5hbCBjcmVkZW50aWFsIGhlbHBlciwgYW5kIGFueSBhc3NvY2lhdGVkIG9wdGlvbnMuCisJSWYgdGhlIGhlbHBlciBuYW1lIGlzIG5vdCBhbiBhYnNvbHV0ZSBwYXRoLCB0aGVuIHRoZSBzdHJpbmcgYGdpdAorCWNyZWRlbnRpYWwtYCBpcyBwcmVwZW5kZWQuIFRoZSByZXN1bHRpbmcgc3RyaW5nIGlzIGV4ZWN1dGVkIGJ5IHRoZQorCXNoZWxsIChzbywgZm9yIGV4YW1wbGUsIHNldHRpbmcgdGhpcyB0byBgZm9vIC0tb3B0aW9uPWJhcmAgd2lsbCBleGVjdXRlCisJYGdpdCBjcmVkZW50aWFsLWZvbyAtLW9wdGlvbj1iYXJgIHZpYSB0aGUgc2hlbGwuIFNlZSB0aGUgbWFudWFsIG9mCisJc3BlY2lmaWMgaGVscGVycyBmb3IgZXhhbXBsZXMgb2YgdGhlaXIgdXNlLgorCit1c2VybmFtZTo6CisKKwlBIGRlZmF1bHQgdXNlcm5hbWUsIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIFVSTC4KKwordXNlSHR0cFBhdGg6OgorCisJQnkgZGVmYXVsdCwgR2l0IGRvZXMgbm90IGNvbnNpZGVyIHRoZSAicGF0aCIgY29tcG9uZW50IG9mIGFuIGh0dHAgVVJMCisJdG8gYmUgd29ydGggbWF0Y2hpbmcgdmlhIGV4dGVybmFsIGhlbHBlcnMuIFRoaXMgbWVhbnMgdGhhdCBhIGNyZWRlbnRpYWwKKwlzdG9yZWQgZm9yIGBodHRwczovL2V4YW1wbGUuY29tL2Zvby5naXRgIHdpbGwgYWxzbyBiZSB1c2VkIGZvcgorCWBodHRwczovL2V4YW1wbGUuY29tL2Jhci5naXRgLiBJZiB5b3UgZG8gd2FudCB0byBkaXN0aW5ndWlzaCB0aGVzZQorCWNhc2VzLCBzZXQgdGhpcyBvcHRpb24gdG8gYHRydWVgLgorCisKK0NVU1RPTSBIRUxQRVJTCistLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHdyaXRlIHlvdXIgb3duIGN1c3RvbSBoZWxwZXJzIHRvIGludGVyZmFjZSB3aXRoIGFueSBzeXN0ZW0gaW4KK3doaWNoIHlvdSBrZWVwIGNyZWRlbnRpYWxzLiBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIEdpdCdzCitsaW5rOnRlY2huaWNhbC9hcGktY3JlZGVudGlhbHMuaHRtbFtjcmVkZW50aWFscyBBUEldIGZvciBkZXRhaWxzLgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0Y3ZzLW1pZ3JhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGN2cy1taWdyYXRpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNmU4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGN2cy1taWdyYXRpb24udHh0CkBAIC0wLDAgKzEsMjAyIEBACitnaXRjdnMtbWlncmF0aW9uKDcpCis9PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdGN2cy1taWdyYXRpb24gLSBHaXQgZm9yIENWUyB1c2VycworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgY3ZzaW1wb3J0JyAqCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitHaXQgZGlmZmVycyBmcm9tIENWUyBpbiB0aGF0IGV2ZXJ5IHdvcmtpbmcgdHJlZSBjb250YWlucyBhIHJlcG9zaXRvcnkgd2l0aAorYSBmdWxsIGNvcHkgb2YgdGhlIHByb2plY3QgaGlzdG9yeSwgYW5kIG5vIHJlcG9zaXRvcnkgaXMgaW5oZXJlbnRseSBtb3JlCitpbXBvcnRhbnQgdGhhbiBhbnkgb3RoZXIuICBIb3dldmVyLCB5b3UgY2FuIGVtdWxhdGUgdGhlIENWUyBtb2RlbCBieQorZGVzaWduYXRpbmcgYSBzaW5nbGUgc2hhcmVkIHJlcG9zaXRvcnkgd2hpY2ggcGVvcGxlIGNhbiBzeW5jaHJvbml6ZSB3aXRoOwordGhpcyBkb2N1bWVudCBleHBsYWlucyBob3cgdG8gZG8gdGhhdC4KKworU29tZSBiYXNpYyBmYW1pbGlhcml0eSB3aXRoIEdpdCBpcyByZXF1aXJlZC4gSGF2aW5nIGdvbmUgdGhyb3VnaAorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSBhbmQKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10gc2hvdWxkIGJlIHN1ZmZpY2llbnQuCisKK0RldmVsb3BpbmcgYWdhaW5zdCBhIHNoYXJlZCByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3NlIGEgc2hhcmVkIHJlcG9zaXRvcnkgaXMgc2V0IHVwIGluIC9wdWIvcmVwby5naXQgb24gdGhlIGhvc3QKK2Zvby5jb20uICBUaGVuIGFzIGFuIGluZGl2aWR1YWwgY29tbWl0dGVyIHlvdSBjYW4gY2xvbmUgdGhlIHNoYXJlZAorcmVwb3NpdG9yeSBvdmVyIHNzaCB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGZvby5jb206L3B1Yi9yZXBvLmdpdC8gbXktcHJvamVjdAorJCBjZCBteS1wcm9qZWN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIGhhY2sgYXdheS4gIFRoZSBlcXVpdmFsZW50IG9mICdjdnMgdXBkYXRlJyBpcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgb3JpZ2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggbWVyZ2VzIGluIGFueSB3b3JrIHRoYXQgb3RoZXJzIG1pZ2h0IGhhdmUgZG9uZSBzaW5jZSB0aGUgY2xvbmUKK29wZXJhdGlvbi4gIElmIHRoZXJlIGFyZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLCBjb21taXQKK3RoZW0gZmlyc3QgYmVmb3JlIHJ1bm5pbmcgZ2l0IHB1bGwuCisKK1tOT1RFXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1RoZSAncHVsbCcgY29tbWFuZCBrbm93cyB3aGVyZSB0byBnZXQgdXBkYXRlcyBmcm9tIGJlY2F1c2Ugb2YgY2VydGFpbgorY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCB3ZXJlIHNldCBieSB0aGUgZmlyc3QgJ2dpdCBjbG9uZScKK2NvbW1hbmQ7IHNlZSBgZ2l0IGNvbmZpZyAtbGAgYW5kIHRoZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gbWFuCitwYWdlIGZvciBkZXRhaWxzLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IGNhbiB1cGRhdGUgdGhlIHNoYXJlZCByZXBvc2l0b3J5IHdpdGggeW91ciBjaGFuZ2VzIGJ5IGZpcnN0IGNvbW1pdHRpbmcKK3lvdXIgY2hhbmdlcywgYW5kIHRoZW4gdXNpbmcgdGhlICdnaXQgcHVzaCcgY29tbWFuZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0byAicHVzaCIgdGhvc2UgY29tbWl0cyB0byB0aGUgc2hhcmVkIHJlcG9zaXRvcnkuICBJZiBzb21lb25lIGVsc2UgaGFzCit1cGRhdGVkIHRoZSByZXBvc2l0b3J5IG1vcmUgcmVjZW50bHksICdnaXQgcHVzaCcsIGxpa2UgJ2N2cyBjb21taXQnLCB3aWxsCitjb21wbGFpbiwgaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCBwdWxsIGFueSBjaGFuZ2VzIGJlZm9yZSBhdHRlbXB0aW5nIHRoZQorcHVzaCBhZ2Fpbi4KKworSW4gdGhlICdnaXQgcHVzaCcgY29tbWFuZCBhYm92ZSB3ZSBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSByZW1vdGUgYnJhbmNoCit0byB1cGRhdGUgKGBtYXN0ZXJgKS4gIElmIHdlIGxlYXZlIHRoYXQgb3V0LCAnZ2l0IHB1c2gnIHRyaWVzIHRvIHVwZGF0ZQorYW55IGJyYW5jaGVzIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeSB0aGF0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBhIGJyYW5jaAoraW4gdGhlIGxvY2FsIHJlcG9zaXRvcnkuICBTbyB0aGUgbGFzdCAncHVzaCcgY2FuIGJlIGRvbmUgd2l0aCBlaXRoZXIgb2Y6CisKKy0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCBvcmlnaW4KKyQgZ2l0IHB1c2ggZm9vLmNvbTovcHViL3Byb2plY3QuZ2l0LworLS0tLS0tLS0tLS0tCisKK2FzIGxvbmcgYXMgdGhlIHNoYXJlZCByZXBvc2l0b3J5IGRvZXMgbm90IGhhdmUgYW55IGJyYW5jaGVzCitvdGhlciB0aGFuIGBtYXN0ZXJgLgorCitTZXR0aW5nIFVwIGEgU2hhcmVkIFJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSBhc3N1bWUgeW91IGhhdmUgYWxyZWFkeSBjcmVhdGVkIGEgR2l0IHJlcG9zaXRvcnkgZm9yIHlvdXIgcHJvamVjdCwKK3Bvc3NpYmx5IGNyZWF0ZWQgZnJvbSBzY3JhdGNoIG9yIGZyb20gYSB0YXJiYWxsIChzZWUKK2xpbmtnaXQ6Z2l0dHV0b3JpYWxbN10pLCBvciBpbXBvcnRlZCBmcm9tIGFuIGFscmVhZHkgZXhpc3RpbmcgQ1ZTCityZXBvc2l0b3J5IChzZWUgdGhlIG5leHQgc2VjdGlvbikuCisKK0Fzc3VtZSB5b3VyIGV4aXN0aW5nIHJlcG8gaXMgYXQgL2hvbWUvYWxpY2UvbXlwcm9qZWN0LiAgQ3JlYXRlIGEgbmV3ICJiYXJlIgorcmVwb3NpdG9yeSAoYSByZXBvc2l0b3J5IHdpdGhvdXQgYSB3b3JraW5nIHRyZWUpIGFuZCBmZXRjaCB5b3VyIHByb2plY3QgaW50bworaXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBta2RpciAvcHViL215LXJlcG8uZ2l0CiskIGNkIC9wdWIvbXktcmVwby5naXQKKyQgZ2l0IC0tYmFyZSBpbml0IC0tc2hhcmVkCiskIGdpdCAtLWJhcmUgZmV0Y2ggL2hvbWUvYWxpY2UvbXlwcm9qZWN0IG1hc3RlcjptYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOZXh0LCBnaXZlIGV2ZXJ5IHRlYW0gbWVtYmVyIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoaXMgcmVwb3NpdG9yeS4gIE9uZQorZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB0byBnaXZlIGFsbCB0aGUgdGVhbSBtZW1iZXJzIHNzaCBhY2Nlc3MgdG8gdGhlCittYWNoaW5lIHdoZXJlIHRoZSByZXBvc2l0b3J5IGlzIGhvc3RlZC4gIElmIHlvdSBkb24ndCB3YW50IHRvIGdpdmUgdGhlbSBhCitmdWxsIHNoZWxsIG9uIHRoZSBtYWNoaW5lLCB0aGVyZSBpcyBhIHJlc3RyaWN0ZWQgc2hlbGwgd2hpY2ggb25seSBhbGxvd3MKK3VzZXJzIHRvIGRvIEdpdCBwdXNoZXMgYW5kIHB1bGxzOyBzZWUgbGlua2dpdDpnaXQtc2hlbGxbMV0uCisKK1B1dCBhbGwgdGhlIGNvbW1pdHRlcnMgaW4gdGhlIHNhbWUgZ3JvdXAsIGFuZCBtYWtlIHRoZSByZXBvc2l0b3J5Cit3cml0YWJsZSBieSB0aGF0IGdyb3VwOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2hncnAgLVIgJGdyb3VwIC9wdWIvbXktcmVwby5naXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNYWtlIHN1cmUgY29tbWl0dGVycyBoYXZlIGEgdW1hc2sgb2YgYXQgbW9zdCAwMjcsIHNvIHRoYXQgdGhlIGRpcmVjdG9yaWVzCit0aGV5IGNyZWF0ZSBhcmUgd3JpdGFibGUgYW5kIHNlYXJjaGFibGUgYnkgb3RoZXIgZ3JvdXAgbWVtYmVycy4KKworSW1wb3J0aW5nIGEgQ1ZTIGFyY2hpdmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0LCBpbnN0YWxsIHZlcnNpb24gMi4xIG9yIGhpZ2hlciBvZiBjdnNwcyBmcm9tCitodHRwOi8vd3d3LmNvYml0ZS5jb20vY3ZzcHMvW2h0dHA6Ly93d3cuY29iaXRlLmNvbS9jdnNwcy9dIGFuZCBtYWtlCitzdXJlIGl0IGlzIGluIHlvdXIgcGF0aC4gIFRoZW4gY2QgdG8gYSBjaGVja2VkIG91dCBDVlMgd29ya2luZyBkaXJlY3RvcnkKK29mIHRoZSBwcm9qZWN0IHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBhbmQgcnVuIGxpbmtnaXQ6Z2l0LWN2c2ltcG9ydFsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY3ZzaW1wb3J0IC1DIDxkZXN0aW5hdGlvbj4gPG1vZHVsZT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBwdXRzIGEgR2l0IGFyY2hpdmUgb2YgdGhlIG5hbWVkIENWUyBtb2R1bGUgaW4gdGhlIGRpcmVjdG9yeQorPGRlc3RpbmF0aW9uPiwgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGlmIG5lY2Vzc2FyeS4KKworVGhlIGltcG9ydCBjaGVja3Mgb3V0IGZyb20gQ1ZTIGV2ZXJ5IHJldmlzaW9uIG9mIGV2ZXJ5IGZpbGUuICBSZXBvcnRlZGx5CitjdnNpbXBvcnQgY2FuIGF2ZXJhZ2Ugc29tZSB0d2VudHkgcmV2aXNpb25zIHBlciBzZWNvbmQsIHNvIGZvciBhCittZWRpdW0tc2l6ZWQgcHJvamVjdCB0aGlzIHNob3VsZCBub3QgdGFrZSBtb3JlIHRoYW4gYSBjb3VwbGUgb2YgbWludXRlcy4KK0xhcmdlciBwcm9qZWN0cyBvciByZW1vdGUgcmVwb3NpdG9yaWVzIG1heSB0YWtlIGxvbmdlci4KKworVGhlIG1haW4gdHJ1bmsgaXMgc3RvcmVkIGluIHRoZSBHaXQgYnJhbmNoIG5hbWVkIGBvcmlnaW5gLCBhbmQgYWRkaXRpb25hbAorQ1ZTIGJyYW5jaGVzIGFyZSBzdG9yZWQgaW4gR2l0IGJyYW5jaGVzIHdpdGggdGhlIHNhbWUgbmFtZXMuICBUaGUgbW9zdAorcmVjZW50IHZlcnNpb24gb2YgdGhlIG1haW4gdHJ1bmsgaXMgYWxzbyBsZWZ0IGNoZWNrZWQgb3V0IG9uIHRoZSBgbWFzdGVyYAorYnJhbmNoLCBzbyB5b3UgY2FuIHN0YXJ0IGFkZGluZyB5b3VyIG93biBjaGFuZ2VzIHJpZ2h0IGF3YXkuCisKK1RoZSBpbXBvcnQgaXMgaW5jcmVtZW50YWwsIHNvIGlmIHlvdSBjYWxsIGl0IGFnYWluIG5leHQgbW9udGggaXQgd2lsbAorZmV0Y2ggYW55IENWUyB1cGRhdGVzIHRoYXQgaGF2ZSBiZWVuIG1hZGUgaW4gdGhlIG1lYW50aW1lLiAgRm9yIHRoaXMgdG8KK3dvcmssIHlvdSBtdXN0IG5vdCBtb2RpZnkgdGhlIGltcG9ydGVkIGJyYW5jaGVzOyBpbnN0ZWFkLCBjcmVhdGUgbmV3CiticmFuY2hlcyBmb3IgeW91ciBvd24gY2hhbmdlcywgYW5kIG1lcmdlIGluIHRoZSBpbXBvcnRlZCBicmFuY2hlcyBhcworbmVjZXNzYXJ5LgorCitJZiB5b3Ugd2FudCBhIHNoYXJlZCByZXBvc2l0b3J5LCB5b3Ugd2lsbCBuZWVkIHRvIG1ha2UgYSBiYXJlIGNsb25lCitvZiB0aGUgaW1wb3J0ZWQgZGlyZWN0b3J5LCBhcyBkZXNjcmliZWQgYWJvdmUuIFRoZW4gdHJlYXQgdGhlIGltcG9ydGVkCitkaXJlY3RvcnkgYXMgYW5vdGhlciBkZXZlbG9wbWVudCBjbG9uZSBmb3IgcHVycG9zZXMgb2YgbWVyZ2luZworaW5jcmVtZW50YWwgaW1wb3J0cy4KKworQWR2YW5jZWQgU2hhcmVkIFJlcG9zaXRvcnkgTWFuYWdlbWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHNjcmlwdHMgY2FsbGVkICJob29rcyIgdG8gYmUgcnVuIGF0IGNlcnRhaW4KK3BvaW50cy4gIFlvdSBjYW4gdXNlIHRoZXNlLCBmb3IgZXhhbXBsZSwgdG8gc2VuZCBhbGwgY29tbWl0cyB0byB0aGUgc2hhcmVkCityZXBvc2l0b3J5IHRvIGEgbWFpbGluZyBsaXN0LiAgU2VlIGxpbmtnaXQ6Z2l0aG9va3NbNV0uCisKK1lvdSBjYW4gZW5mb3JjZSBmaW5lciBncmFpbmVkIHBlcm1pc3Npb25zIHVzaW5nIHVwZGF0ZSBob29rcy4gIFNlZQorbGluazpob3d0by91cGRhdGUtaG9vay1leGFtcGxlLmh0bWxbQ29udHJvbGxpbmcgYWNjZXNzIHRvIGJyYW5jaGVzIHVzaW5nCit1cGRhdGUgaG9va3NdLgorCitQcm92aWRpbmcgQ1ZTIEFjY2VzcyB0byBhIEdpdCBSZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gcHJvdmlkZSB0cnVlIENWUyBhY2Nlc3MgdG8gYSBHaXQgcmVwb3NpdG9yeSwgc28KK3RoYXQgZGV2ZWxvcGVycyBjYW4gc3RpbGwgdXNlIENWUzsgc2VlIGxpbmtnaXQ6Z2l0LWN2c3NlcnZlclsxXSBmb3IKK2RldGFpbHMuCisKK0FsdGVybmF0aXZlIERldmVsb3BtZW50IE1vZGVscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NWUyB1c2VycyBhcmUgYWNjdXN0b21lZCB0byBnaXZpbmcgYSBncm91cCBvZiBkZXZlbG9wZXJzIGNvbW1pdCBhY2Nlc3MgdG8KK2EgY29tbW9uIHJlcG9zaXRvcnkuICBBcyB3ZSd2ZSBzZWVuLCB0aGlzIGlzIGFsc28gcG9zc2libGUgd2l0aCBHaXQuCitIb3dldmVyLCB0aGUgZGlzdHJpYnV0ZWQgbmF0dXJlIG9mIEdpdCBhbGxvd3Mgb3RoZXIgZGV2ZWxvcG1lbnQgbW9kZWxzLAorYW5kIHlvdSBtYXkgd2FudCB0byBmaXJzdCBjb25zaWRlciB3aGV0aGVyIG9uZSBvZiB0aGVtIG1pZ2h0IGJlIGEgYmV0dGVyCitmaXQgZm9yIHlvdXIgcHJvamVjdC4KKworRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hvb3NlIGEgc2luZ2xlIHBlcnNvbiB0byBtYWludGFpbiB0aGUgcHJvamVjdCdzCitwcmltYXJ5IHB1YmxpYyByZXBvc2l0b3J5LiAgT3RoZXIgZGV2ZWxvcGVycyB0aGVuIGNsb25lIHRoaXMgcmVwb3NpdG9yeQorYW5kIGVhY2ggd29yayBpbiB0aGVpciBvd24gY2xvbmUuICBXaGVuIHRoZXkgaGF2ZSBhIHNlcmllcyBvZiBjaGFuZ2VzIHRoYXQKK3RoZXkncmUgaGFwcHkgd2l0aCwgdGhleSBhc2sgdGhlIG1haW50YWluZXIgdG8gcHVsbCBmcm9tIHRoZSBicmFuY2gKK2NvbnRhaW5pbmcgdGhlIGNoYW5nZXMuICBUaGUgbWFpbnRhaW5lciByZXZpZXdzIHRoZWlyIGNoYW5nZXMgYW5kIHB1bGxzCit0aGVtIGludG8gdGhlIHByaW1hcnkgcmVwb3NpdG9yeSwgd2hpY2ggb3RoZXIgZGV2ZWxvcGVycyBwdWxsIGZyb20gYXMKK25lY2Vzc2FyeSB0byBzdGF5IGNvb3JkaW5hdGVkLiAgVGhlIExpbnV4IGtlcm5lbCBhbmQgb3RoZXIgcHJvamVjdHMgdXNlCit2YXJpYW50cyBvZiB0aGlzIG1vZGVsLgorCitXaXRoIGEgc21hbGwgZ3JvdXAsIGRldmVsb3BlcnMgbWF5IGp1c3QgcHVsbCBjaGFuZ2VzIGZyb20gZWFjaCBvdGhlcidzCityZXBvc2l0b3JpZXMgd2l0aG91dCB0aGUgbmVlZCBmb3IgYSBjZW50cmFsIG1haW50YWluZXIuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0dHV0b3JpYWwtMls3XSwKK2xpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRkaWZmY29yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGRpZmZjb3JlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTc5NTkzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRkaWZmY29yZS50eHQKQEAgLTAsMCArMSwyOTEgQEAKK2dpdGRpZmZjb3JlKDcpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRkaWZmY29yZSAtIFR3ZWFraW5nIGRpZmYgb3V0cHV0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBkaWZmJyAqCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGUgZGlmZiBjb21tYW5kcyAnZ2l0IGRpZmYtaW5kZXgnLCAnZ2l0IGRpZmYtZmlsZXMnLCBhbmQgJ2dpdCBkaWZmLXRyZWUnCitjYW4gYmUgdG9sZCB0byBtYW5pcHVsYXRlIGRpZmZlcmVuY2VzIHRoZXkgZmluZCBpbgordW5jb252ZW50aW9uYWwgd2F5cyBiZWZvcmUgc2hvd2luZyAnZGlmZicgb3V0cHV0LiAgVGhlIG1hbmlwdWxhdGlvbgoraXMgY29sbGVjdGl2ZWx5IGNhbGxlZCAiZGlmZmNvcmUgdHJhbnNmb3JtYXRpb24iLiAgVGhpcyBzaG9ydCBub3RlCitkZXNjcmliZXMgd2hhdCB0aGV5IGFyZSBhbmQgaG93IHRvIHVzZSB0aGVtIHRvIHByb2R1Y2UgJ2RpZmYnIG91dHB1dAordGhhdCBpcyBlYXNpZXIgdG8gdW5kZXJzdGFuZCB0aGFuIHRoZSBjb252ZW50aW9uYWwga2luZC4KKworCitUaGUgY2hhaW4gb2Ygb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAnZ2l0IGRpZmYte2FzdGVyaXNrfScgZmFtaWx5IHdvcmtzIGJ5IGZpcnN0IGNvbXBhcmluZyB0d28gc2V0cyBvZgorZmlsZXM6CisKKyAtICdnaXQgZGlmZi1pbmRleCcgY29tcGFyZXMgY29udGVudHMgb2YgYSAidHJlZSIgb2JqZWN0IGFuZCB0aGUKKyAgIHdvcmtpbmcgZGlyZWN0b3J5ICh3aGVuICctLWNhY2hlZCcgZmxhZyBpcyBub3QgdXNlZCkgb3IgYQorICAgInRyZWUiIG9iamVjdCBhbmQgdGhlIGluZGV4IGZpbGUgKHdoZW4gJy0tY2FjaGVkJyBmbGFnIGlzCisgICB1c2VkKTsKKworIC0gJ2dpdCBkaWZmLWZpbGVzJyBjb21wYXJlcyBjb250ZW50cyBvZiB0aGUgaW5kZXggZmlsZSBhbmQgdGhlCisgICB3b3JraW5nIGRpcmVjdG9yeTsKKworIC0gJ2dpdCBkaWZmLXRyZWUnIGNvbXBhcmVzIGNvbnRlbnRzIG9mIHR3byAidHJlZSIgb2JqZWN0czsKKworSW4gYWxsIG9mIHRoZXNlIGNhc2VzLCB0aGUgY29tbWFuZHMgdGhlbXNlbHZlcyBmaXJzdCBvcHRpb25hbGx5IGxpbWl0Cit0aGUgdHdvIHNldHMgb2YgZmlsZXMgYnkgYW55IHBhdGhzcGVjcyBnaXZlbiBvbiB0aGVpciBjb21tYW5kLWxpbmVzLAorYW5kIGNvbXBhcmUgY29ycmVzcG9uZGluZyBwYXRocyBpbiB0aGUgdHdvIHJlc3VsdGluZyBzZXRzIG9mIGZpbGVzLgorCitUaGUgcGF0aHNwZWNzIGFyZSB1c2VkIHRvIGxpbWl0IHRoZSB3b3JsZCBkaWZmIG9wZXJhdGVzIGluLiAgVGhleSByZW1vdmUKK3RoZSBmaWxlcGFpcnMgb3V0c2lkZSB0aGUgc3BlY2lmaWVkIHNldHMgb2YgcGF0aG5hbWVzLiAgRS5nLiBJZiB0aGUKK2lucHV0IHNldCBvZiBmaWxlcGFpcnMgaW5jbHVkZWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAxMDA2NDQgYmNkMTIzNC4uLiAwMTIzNDU2Li4uIE0ganVua2ZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitidXQgdGhlIGNvbW1hbmQgaW52b2NhdGlvbiB3YXMgYGdpdCBkaWZmLWZpbGVzIG15ZmlsZWAsIHRoZW4gdGhlCitqdW5rZmlsZSBlbnRyeSB3b3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QgYmVjYXVzZSBvbmx5ICJteWZpbGUiCitpcyB1bmRlciBjb25zaWRlcmF0aW9uLgorCitUaGUgcmVzdWx0IG9mIGNvbXBhcmlzb24gaXMgcGFzc2VkIGZyb20gdGhlc2UgY29tbWFuZHMgdG8gd2hhdCBpcworaW50ZXJuYWxseSBjYWxsZWQgImRpZmZjb3JlIiwgaW4gYSBmb3JtYXQgc2ltaWxhciB0byB3aGF0IGlzIG91dHB1dAord2hlbiB0aGUgLXAgb3B0aW9uIGlzIG5vdCB1c2VkLiAgRS5nLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2luLXBsYWNlIGVkaXQgIDoxMDA2NDQgMTAwNjQ0IGJjZDEyMzQuLi4gMDEyMzQ1Ni4uLiBNIGZpbGUwCitjcmVhdGUgICAgICAgICA6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDEyMzQ1NjcuLi4gQSBmaWxlNAorZGVsZXRlICAgICAgICAgOjEwMDY0NCAwMDAwMDAgMTIzNDU2Ny4uLiAwMDAwMDAwLi4uIEQgZmlsZTUKK3VubWVyZ2VkICAgICAgIDowMDAwMDAgMDAwMDAwIDAwMDAwMDAuLi4gMDAwMDAwMC4uLiBVIGZpbGU2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRpZmZjb3JlIG1lY2hhbmlzbSBpcyBmZWQgYSBsaXN0IG9mIHN1Y2ggY29tcGFyaXNvbiByZXN1bHRzCisoZWFjaCBvZiB3aGljaCBpcyBjYWxsZWQgImZpbGVwYWlyIiwgYWx0aG91Z2ggYXQgdGhpcyBwb2ludCBlYWNoCitvZiB0aGVtIHRhbGtzIGFib3V0IGEgc2luZ2xlIGZpbGUpLCBhbmQgdHJhbnNmb3JtcyBzdWNoIGEgbGlzdAoraW50byBhbm90aGVyIGxpc3QuICBUaGVyZSBhcmUgY3VycmVudGx5IDUgc3VjaCB0cmFuc2Zvcm1hdGlvbnM6CisKKy0gZGlmZmNvcmUtYnJlYWsKKy0gZGlmZmNvcmUtcmVuYW1lCistIGRpZmZjb3JlLW1lcmdlLWJyb2tlbgorLSBkaWZmY29yZS1waWNrYXhlCistIGRpZmZjb3JlLW9yZGVyCisKK1RoZXNlIGFyZSBhcHBsaWVkIGluIHNlcXVlbmNlLiAgVGhlIHNldCBvZiBmaWxlcGFpcnMgJ2dpdCBkaWZmLXthc3Rlcmlza30nCitjb21tYW5kcyBmaW5kIGFyZSB1c2VkIGFzIHRoZSBpbnB1dCB0byBkaWZmY29yZS1icmVhaywgYW5kCit0aGUgb3V0cHV0IGZyb20gZGlmZmNvcmUtYnJlYWsgaXMgdXNlZCBhcyB0aGUgaW5wdXQgdG8gdGhlCituZXh0IHRyYW5zZm9ybWF0aW9uLiAgVGhlIGZpbmFsIHJlc3VsdCBpcyB0aGVuIHBhc3NlZCB0byB0aGUKK291dHB1dCByb3V0aW5lIGFuZCBnZW5lcmF0ZXMgZWl0aGVyIGRpZmYtcmF3IGZvcm1hdCAoc2VlIE91dHB1dAorZm9ybWF0IHNlY3Rpb25zIG9mIHRoZSBtYW51YWwgZm9yICdnaXQgZGlmZi17YXN0ZXJpc2t9JyBjb21tYW5kcykgb3IKK2RpZmYtcGF0Y2ggZm9ybWF0LgorCisKK2RpZmZjb3JlLWJyZWFrOiBGb3IgU3BsaXR0aW5nIFVwICJDb21wbGV0ZSBSZXdyaXRlcyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHNlY29uZCB0cmFuc2Zvcm1hdGlvbiBpbiB0aGUgY2hhaW4gaXMgZGlmZmNvcmUtYnJlYWssIGFuZCBpcworY29udHJvbGxlZCBieSB0aGUgLUIgb3B0aW9uIHRvIHRoZSAnZ2l0IGRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMuICBUaGlzIGlzCit1c2VkIHRvIGRldGVjdCBhIGZpbGVwYWlyIHRoYXQgcmVwcmVzZW50cyAiY29tcGxldGUgcmV3cml0ZSIgYW5kCiticmVhayBzdWNoIGZpbGVwYWlyIGludG8gdHdvIGZpbGVwYWlycyB0aGF0IHJlcHJlc2VudCBkZWxldGUgYW5kCitjcmVhdGUuICBFLmcuICBJZiB0aGUgaW5wdXQgY29udGFpbmVkIHRoaXMgZmlsZXBhaXI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAxMDA2NDQgYmNkMTIzNC4uLiAwMTIzNDU2Li4uIE0gZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgaWYgaXQgZGV0ZWN0cyB0aGF0IHRoZSBmaWxlICJmaWxlMCIgaXMgY29tcGxldGVseSByZXdyaXR0ZW4sCitpdCBjaGFuZ2VzIGl0IHRvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzoxMDA2NDQgMDAwMDAwIGJjZDEyMzQuLi4gMDAwMDAwMC4uLiBEIGZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxMjM0NTYuLi4gQSBmaWxlMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciB0aGUgcHVycG9zZSBvZiBicmVha2luZyBhIGZpbGVwYWlyLCBkaWZmY29yZS1icmVhayBleGFtaW5lcwordGhlIGV4dGVudCBvZiBjaGFuZ2VzIGJldHdlZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcyBiZWZvcmUKK2FuZCBhZnRlciBtb2RpZmljYXRpb24gKGkuZS4gdGhlIGNvbnRlbnRzIHRoYXQgaGF2ZSAiYmNkMTIzNC4uLiIKK2FuZCAiMDEyMzQ1Ni4uLiIgYXMgdGhlaXIgU0hBLTEgY29udGVudCBJRCwgaW4gdGhlIGFib3ZlCitleGFtcGxlKS4gIFRoZSBhbW91bnQgb2YgZGVsZXRpb24gb2Ygb3JpZ2luYWwgY29udGVudHMgYW5kCitpbnNlcnRpb24gb2YgbmV3IG1hdGVyaWFsIGFyZSBhZGRlZCB0b2dldGhlciwgYW5kIGlmIGl0IGV4Y2VlZHMKK3RoZSAiYnJlYWsgc2NvcmUiLCB0aGUgZmlsZXBhaXIgaXMgYnJva2VuIGludG8gdHdvLiAgVGhlIGJyZWFrCitzY29yZSBkZWZhdWx0cyB0byA1MCUgb2YgdGhlIHNpemUgb2YgdGhlIHNtYWxsZXIgb2YgdGhlIG9yaWdpbmFsCithbmQgdGhlIHJlc3VsdCAoaS5lLiBpZiB0aGUgZWRpdCBzaHJpbmtzIHRoZSBmaWxlLCB0aGUgc2l6ZSBvZgordGhlIHJlc3VsdCBpcyB1c2VkOyBpZiB0aGUgZWRpdCBsZW5ndGhlbnMgdGhlIGZpbGUsIHRoZSBzaXplIG9mCit0aGUgb3JpZ2luYWwgaXMgdXNlZCksIGFuZCBjYW4gYmUgY3VzdG9taXplZCBieSBnaXZpbmcgYSBudW1iZXIKK2FmdGVyICItQiIgb3B0aW9uIChlLmcuICItQjc1IiB0byB0ZWxsIGl0IHRvIHVzZSA3NSUpLgorCisKK2RpZmZjb3JlLXJlbmFtZTogRm9yIERldGVjdGlvbiBSZW5hbWVzIGFuZCBDb3BpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB1c2VkIHRvIGRldGVjdCByZW5hbWVzIGFuZCBjb3BpZXMsIGFuZCBpcworY29udHJvbGxlZCBieSB0aGUgLU0gb3B0aW9uICh0byBkZXRlY3QgcmVuYW1lcykgYW5kIHRoZSAtQyBvcHRpb24KKyh0byBkZXRlY3QgY29waWVzIGFzIHdlbGwpIHRvIHRoZSAnZ2l0IGRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMuICBJZiB0aGUKK2lucHV0IGNvbnRhaW5lZCB0aGVzZSBmaWxlcGFpcnM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOjEwMDY0NCAwMDAwMDAgMDEyMzQ1Ni4uLiAwMDAwMDAwLi4uIEQgZmlsZVgKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMDEyMzQ1Ni4uLiBBIGZpbGUwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgZGVsZXRlZCBmaWxlIGZpbGVYIGlzIHNpbWlsYXIgZW5vdWdoIHRvCit0aGUgY29udGVudHMgb2YgdGhlIGNyZWF0ZWQgZmlsZSBmaWxlMCwgdGhlbiByZW5hbWUgZGV0ZWN0aW9uCittZXJnZXMgdGhlc2UgZmlsZXBhaXJzIGFuZCBjcmVhdGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzoxMDA2NDQgMTAwNjQ0IDAxMjM0NTYuLi4gMDEyMzQ1Ni4uLiBSMTAwIGZpbGVYIGZpbGUwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB0aGUgIi1DIiBvcHRpb24gaXMgdXNlZCwgdGhlIG9yaWdpbmFsIGNvbnRlbnRzIG9mIG1vZGlmaWVkIGZpbGVzLAorYW5kIGRlbGV0ZWQgZmlsZXMgKGFuZCBhbHNvIHVubW9kaWZpZWQgZmlsZXMsIGlmIHRoZQorIi0tZmluZC1jb3BpZXMtaGFyZGVyIiBvcHRpb24gaXMgdXNlZCkgYXJlIGNvbnNpZGVyZWQgYXMgY2FuZGlkYXRlcworb2YgdGhlIHNvdXJjZSBmaWxlcyBpbiByZW5hbWUvY29weSBvcGVyYXRpb24uICBJZiB0aGUgaW5wdXQgd2VyZSBsaWtlCit0aGVzZSBmaWxlcGFpcnMsIHRoYXQgdGFsayBhYm91dCBhIG1vZGlmaWVkIGZpbGUgZmlsZVkgYW5kIGEgbmV3bHkKK2NyZWF0ZWQgZmlsZSBmaWxlMDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDEwMDY0NCAwMTIzNDU2Li4uIDEyMzQ1NjcuLi4gTSBmaWxlWQorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiBiY2QzNDU2Li4uIEEgZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGUgb3JpZ2luYWwgY29udGVudHMgb2YgZmlsZVkgYW5kIHRoZSByZXN1bHRpbmcgY29udGVudHMgb2YKK2ZpbGUwIGFyZSBjb21wYXJlZCwgYW5kIGlmIHRoZXkgYXJlIHNpbWlsYXIgZW5vdWdoLCB0aGV5IGFyZQorY2hhbmdlZCB0bzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis6MTAwNjQ0IDEwMDY0NCAwMTIzNDU2Li4uIDEyMzQ1NjcuLi4gTSBmaWxlWQorOjEwMDY0NCAxMDA2NDQgMDEyMzQ1Ni4uLiBiY2QzNDU2Li4uIEMxMDAgZmlsZVkgZmlsZTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBib3RoIHJlbmFtZSBhbmQgY29weSBkZXRlY3Rpb24sIHRoZSBzYW1lICJleHRlbnQgb2YgY2hhbmdlcyIKK2FsZ29yaXRobSB1c2VkIGluIGRpZmZjb3JlLWJyZWFrIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHR3bworZmlsZXMgYXJlICJzaW1pbGFyIGVub3VnaCIsIGFuZCBjYW4gYmUgY3VzdG9taXplZCB0byB1c2UKK2Egc2ltaWxhcml0eSBzY29yZSBkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdCBvZiA1MCUgYnkgZ2l2aW5nIGEKK251bWJlciBhZnRlciB0aGUgIi1NIiBvciAiLUMiIG9wdGlvbiAoZS5nLiAiLU04IiB0byB0ZWxsIGl0IHRvIHVzZQorOC8xMCA9IDgwJSkuCisKK05vdGUuICBXaGVuIHRoZSAiLUMiIG9wdGlvbiBpcyB1c2VkIHdpdGggYC0tZmluZC1jb3BpZXMtaGFyZGVyYAorb3B0aW9uLCAnZ2l0IGRpZmYte2FzdGVyaXNrfScgY29tbWFuZHMgZmVlZCB1bm1vZGlmaWVkIGZpbGVwYWlycyB0bworZGlmZmNvcmUgbWVjaGFuaXNtIGFzIHdlbGwgYXMgbW9kaWZpZWQgb25lcy4gIFRoaXMgbGV0cyB0aGUgY29weQorZGV0ZWN0b3IgY29uc2lkZXIgdW5tb2RpZmllZCBmaWxlcyBhcyBjb3B5IHNvdXJjZSBjYW5kaWRhdGVzIGF0Cit0aGUgZXhwZW5zZSBvZiBtYWtpbmcgaXQgc2xvd2VyLiAgV2l0aG91dCBgLS1maW5kLWNvcGllcy1oYXJkZXJgLAorJ2dpdCBkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzIGNhbiBkZXRlY3QgY29waWVzIG9ubHkgaWYgdGhlIGZpbGUgdGhhdCB3YXMKK2NvcGllZCBoYXBwZW5lZCB0byBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gdGhlIHNhbWUgY2hhbmdlc2V0LgorCisKK2RpZmZjb3JlLW1lcmdlLWJyb2tlbjogRm9yIFB1dHRpbmcgIkNvbXBsZXRlIFJld3JpdGVzIiBCYWNrIFRvZ2V0aGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWQgdG8gbWVyZ2UgZmlsZXBhaXJzIGJyb2tlbiBieQorZGlmZmNvcmUtYnJlYWssIGFuZCBub3QgdHJhbnNmb3JtZWQgaW50byByZW5hbWUvY29weSBieQorZGlmZmNvcmUtcmVuYW1lLCBiYWNrIGludG8gYSBzaW5nbGUgbW9kaWZpY2F0aW9uLiAgVGhpcyBhbHdheXMKK3J1bnMgd2hlbiBkaWZmY29yZS1icmVhayBpcyB1c2VkLgorCitGb3IgdGhlIHB1cnBvc2Ugb2YgbWVyZ2luZyBicm9rZW4gZmlsZXBhaXJzIGJhY2ssIGl0IHVzZXMgYQorZGlmZmVyZW50ICJleHRlbnQgb2YgY2hhbmdlcyIgY29tcHV0YXRpb24gZnJvbSB0aGUgb25lcyB1c2VkIGJ5CitkaWZmY29yZS1icmVhayBhbmQgZGlmZmNvcmUtcmVuYW1lLiAgSXQgY291bnRzIG9ubHkgdGhlIGRlbGV0aW9uCitmcm9tIHRoZSBvcmlnaW5hbCwgYW5kIGRvZXMgbm90IGNvdW50IGluc2VydGlvbi4gIElmIHlvdSByZW1vdmVkCitvbmx5IDEwIGxpbmVzIGZyb20gYSAxMDAtbGluZSBkb2N1bWVudCwgZXZlbiBpZiB5b3UgYWRkZWQgOTEwCituZXcgbGluZXMgdG8gbWFrZSBhIG5ldyAxMDAwLWxpbmUgZG9jdW1lbnQsIHlvdSBkaWQgbm90IGRvIGEKK2NvbXBsZXRlIHJld3JpdGUuICBkaWZmY29yZS1icmVhayBicmVha3Mgc3VjaCBhIGNhc2UgaW4gb3JkZXIgdG8KK2hlbHAgZGlmZmNvcmUtcmVuYW1lIHRvIGNvbnNpZGVyIHN1Y2ggZmlsZXBhaXJzIGFzIGNhbmRpZGF0ZSBvZgorcmVuYW1lL2NvcHkgZGV0ZWN0aW9uLCBidXQgaWYgZmlsZXBhaXJzIGJyb2tlbiB0aGF0IHdheSB3ZXJlIG5vdAorbWF0Y2hlZCB3aXRoIG90aGVyIGZpbGVwYWlycyB0byBjcmVhdGUgcmVuYW1lL2NvcHksIHRoZW4gdGhpcwordHJhbnNmb3JtYXRpb24gbWVyZ2VzIHRoZW0gYmFjayBpbnRvIHRoZSBvcmlnaW5hbAorIm1vZGlmaWNhdGlvbiIuCisKK1RoZSAiZXh0ZW50IG9mIGNoYW5nZXMiIHBhcmFtZXRlciBjYW4gYmUgdHdlYWtlZCBmcm9tIHRoZQorZGVmYXVsdCA4MCUgKHRoYXQgaXMsIHVubGVzcyBtb3JlIHRoYW4gODAlIG9mIHRoZSBvcmlnaW5hbAorbWF0ZXJpYWwgaXMgZGVsZXRlZCwgdGhlIGJyb2tlbiBwYWlycyBhcmUgbWVyZ2VkIGJhY2sgaW50byBhCitzaW5nbGUgbW9kaWZpY2F0aW9uKSBieSBnaXZpbmcgYSBzZWNvbmQgbnVtYmVyIHRvIC1CIG9wdGlvbiwKK2xpa2UgdGhlc2U6CisKKyogLUI1MC82MCAoZ2l2ZSA1MCUgImJyZWFrIHNjb3JlIiB0byBkaWZmY29yZS1icmVhaywgdXNlIDYwJQorICBmb3IgZGlmZmNvcmUtbWVyZ2UtYnJva2VuKS4KKworKiAtQi82MCAodGhlIHNhbWUgYXMgYWJvdmUsIHNpbmNlIGRpZmZjb3JlLWJyZWFrIGRlZmF1bHRzIHRvIDUwJSkuCisKK05vdGUgdGhhdCBlYXJsaWVyIGltcGxlbWVudGF0aW9uIGxlZnQgYSBicm9rZW4gcGFpciBhcyBhIHNlcGFyYXRlCitjcmVhdGlvbiBhbmQgZGVsZXRpb24gcGF0Y2hlcy4gIFRoaXMgd2FzIGFuIHVubmVjZXNzYXJ5IGhhY2sgYW5kCit0aGUgbGF0ZXN0IGltcGxlbWVudGF0aW9uIGFsd2F5cyBtZXJnZXMgYWxsIHRoZSBicm9rZW4gcGFpcnMKK2JhY2sgaW50byBtb2RpZmljYXRpb25zLCBidXQgdGhlIHJlc3VsdGluZyBwYXRjaCBvdXRwdXQgaXMKK2Zvcm1hdHRlZCBkaWZmZXJlbnRseSBmb3IgZWFzaWVyIHJldmlldyBpbiBjYXNlIG9mIHN1Y2gKK2EgY29tcGxldGUgcmV3cml0ZSBieSBzaG93aW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2Ygb2xkIHZlcnNpb24KK3ByZWZpeGVkIHdpdGggJy0nLCBmb2xsb3dlZCBieSB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIG5ldwordmVyc2lvbiBwcmVmaXhlZCB3aXRoICcrJy4KKworCitkaWZmY29yZS1waWNrYXhlOiBGb3IgRGV0ZWN0aW5nIEFkZGl0aW9uL0RlbGV0aW9uIG9mIFNwZWNpZmllZCBTdHJpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHRyYW5zZm9ybWF0aW9uIGxpbWl0cyB0aGUgc2V0IG9mIGZpbGVwYWlycyB0byB0aG9zZSB0aGF0IGNoYW5nZQorc3BlY2lmaWVkIHN0cmluZ3MgYmV0d2VlbiB0aGUgcHJlaW1hZ2UgYW5kIHRoZSBwb3N0aW1hZ2UgaW4gYSBjZXJ0YWluCit3YXkuICAtUzxibG9jayBvZiB0ZXh0PiBhbmQgLUc8cmVndWxhciBleHByZXNzaW9uPiBvcHRpb25zIGFyZSB1c2VkIHRvCitzcGVjaWZ5IGRpZmZlcmVudCB3YXlzIHRoZXNlIHN0cmluZ3MgYXJlIHNvdWdodC4KKworIi1TPGJsb2NrIG9mIHRleHQ+IiBkZXRlY3RzIGZpbGVwYWlycyB3aG9zZSBwcmVpbWFnZSBhbmQgcG9zdGltYWdlCitoYXZlIGRpZmZlcmVudCBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhlIHNwZWNpZmllZCBibG9jayBvZiB0ZXh0LgorQnkgZGVmaW5pdGlvbiwgaXQgd2lsbCBub3QgZGV0ZWN0IGluLWZpbGUgbW92ZXMuICBBbHNvLCB3aGVuIGEKK2NoYW5nZXNldCBtb3ZlcyBhIGZpbGUgd2hvbGVzYWxlIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBpbnRlcmVzdGluZworc3RyaW5nLCBkaWZmY29yZS1yZW5hbWUga2lja3MgaW4gYXMgdXN1YWwsIGFuZCBgLVNgIG9taXRzIHRoZSBmaWxlcGFpcgorKHNpbmNlIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdGhhdCBzdHJpbmcgZGlkbid0IGNoYW5nZSBpbiB0aGF0CityZW5hbWUtZGV0ZWN0ZWQgZmlsZXBhaXIpLiAgV2hlbiB1c2VkIHdpdGggYC0tcGlja2F4ZS1yZWdleGAsIHRyZWF0Cit0aGUgPGJsb2NrIG9mIHRleHQ+IGFzIGFuIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCwKK2luc3RlYWQgb2YgYSBsaXRlcmFsIHN0cmluZy4KKworIi1HPHJlZ3VsYXIgZXhwcmVzc2lvbj4iIChtbmVtb25pYzogZ3JlcCkgZGV0ZWN0cyBmaWxlcGFpcnMgd2hvc2UKK3RleHR1YWwgZGlmZiBoYXMgYW4gYWRkZWQgb3IgYSBkZWxldGVkIGxpbmUgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbgorcmVndWxhciBleHByZXNzaW9uLiAgVGhpcyBtZWFucyB0aGF0IGl0IHdpbGwgZGV0ZWN0IGluLWZpbGUgKG9yIHdoYXQKK3JlbmFtZS1kZXRlY3Rpb24gY29uc2lkZXJzIHRoZSBzYW1lIGZpbGUpIG1vdmVzLCB3aGljaCBpcyBub2lzZS4gIFRoZQoraW1wbGVtZW50YXRpb24gcnVucyBkaWZmIHR3aWNlIGFuZCBncmVwcywgYW5kIHRoaXMgY2FuIGJlIHF1aXRlCitleHBlbnNpdmUuCisKK1doZW4gYC1TYCBvciBgLUdgIGFyZSB1c2VkIHdpdGhvdXQgYC0tcGlja2F4ZS1hbGxgLCBvbmx5IGZpbGVwYWlycwordGhhdCBtYXRjaCB0aGVpciByZXNwZWN0aXZlIGNyaXRlcmlvbiBhcmUga2VwdCBpbiB0aGUgb3V0cHV0LiAgV2hlbgorYC0tcGlja2F4ZS1hbGxgIGlzIHVzZWQsIGlmIGV2ZW4gb25lIGZpbGVwYWlyIG1hdGNoZXMgdGhlaXIgcmVzcGVjdGl2ZQorY3JpdGVyaW9uIGluIGEgY2hhbmdlc2V0LCB0aGUgZW50aXJlIGNoYW5nZXNldCBpcyBrZXB0LiAgVGhpcyBiZWhhdmlvcgoraXMgZGVzaWduZWQgdG8gbWFrZSByZXZpZXdpbmcgY2hhbmdlcyBpbiB0aGUgY29udGV4dCBvZiB0aGUgd2hvbGUKK2NoYW5nZXNldCBlYXNpZXIuCisKK2RpZmZjb3JlLW9yZGVyOiBGb3IgU29ydGluZyB0aGUgT3V0cHV0IEJhc2VkIG9uIEZpbGVuYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdXNlZCB0byByZW9yZGVyIHRoZSBmaWxlcGFpcnMgYWNjb3JkaW5nIHRvIHRoZSB1c2VyJ3MKKyhvciBwcm9qZWN0J3MpIHRhc3RlLCBhbmQgaXMgY29udHJvbGxlZCBieSB0aGUgLU8gb3B0aW9uIHRvIHRoZQorJ2dpdCBkaWZmLXthc3Rlcmlza30nIGNvbW1hbmRzLgorCitUaGlzIHRha2VzIGEgdGV4dCBmaWxlIGVhY2ggb2Ygd2hvc2UgbGluZXMgaXMgYSBzaGVsbCBnbG9iCitwYXR0ZXJuLiAgRmlsZXBhaXJzIHRoYXQgbWF0Y2ggYSBnbG9iIHBhdHRlcm4gb24gYW4gZWFybGllciBsaW5lCitpbiB0aGUgZmlsZSBhcmUgb3V0cHV0IGJlZm9yZSBvbmVzIHRoYXQgbWF0Y2ggYSBsYXRlciBsaW5lLCBhbmQKK2ZpbGVwYWlycyB0aGF0IGRvIG5vdCBtYXRjaCBhbnkgZ2xvYiBwYXR0ZXJuIGFyZSBvdXRwdXQgbGFzdC4KKworQXMgYW4gZXhhbXBsZSwgYSB0eXBpY2FsIG9yZGVyZmlsZSBmb3IgdGhlIGNvcmUgR2l0IHByb2JhYmx5Cit3b3VsZCBsb29rIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSRUFETUUKK01ha2VmaWxlCitEb2N1bWVudGF0aW9uCisqLmgKKyouYwordAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtZGlmZlsxXSwKK2xpbmtnaXQ6Z2l0LWRpZmYtZmlsZXNbMV0sCitsaW5rZ2l0OmdpdC1kaWZmLWluZGV4WzFdLAorbGlua2dpdDpnaXQtZGlmZi10cmVlWzFdLAorbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLAorbGlua2dpdDpnaXQtbG9nWzFdLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKK2xpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0ZXZlcnlkYXkudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRldmVyeWRheS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU0NzNhZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0ZXZlcnlkYXkudHh0CkBAIC0wLDAgKzEsNDU1IEBACitnaXRldmVyeWRheSg3KQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0ZXZlcnlkYXkgLSBBIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcyBmb3IgRXZlcnlkYXkgR2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorCitFdmVyeWRheSBHaXQgV2l0aCAyMCBDb21tYW5kcyBPciBTbworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2l0IHVzZXJzIGNhbiBicm9hZGx5IGJlIGdyb3VwZWQgaW50byBmb3VyIGNhdGVnb3JpZXMgZm9yIHRoZSBwdXJwb3NlcyBvZgorZGVzY3JpYmluZyBoZXJlIGEgc21hbGwgc2V0IG9mIHVzZWZ1bCBjb21tYW5kIGZvciBldmVyeWRheSBHaXQuCisKKyoJPDxTVEFOREFMT05FLEluZGl2aWR1YWwgRGV2ZWxvcGVyIChTdGFuZGFsb25lKT4+IGNvbW1hbmRzIGFyZSBlc3NlbnRpYWwKKwlmb3IgYW55Ym9keSB3aG8gbWFrZXMgYSBjb21taXQsIGV2ZW4gZm9yIHNvbWVib2R5IHdobyB3b3JrcyBhbG9uZS4KKworKglJZiB5b3Ugd29yayB3aXRoIG90aGVyIHBlb3BsZSwgeW91IHdpbGwgbmVlZCBjb21tYW5kcyBsaXN0ZWQgaW4KKwl0aGUgPDxQQVJUSUNJUEFOVCxJbmRpdmlkdWFsIERldmVsb3BlciAoUGFydGljaXBhbnQpPj4gc2VjdGlvbiBhcyB3ZWxsLgorCisqCVBlb3BsZSB3aG8gcGxheSB0aGUgPDxJTlRFR1JBVE9SLEludGVncmF0b3I+PiByb2xlIG5lZWQgdG8gbGVhcm4gc29tZQorCW1vcmUgY29tbWFuZHMgaW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLgorCisqCTw8QURNSU5JU1RSQVRJT04sUmVwb3NpdG9yeSBBZG1pbmlzdHJhdGlvbj4+IGNvbW1hbmRzIGFyZSBmb3Igc3lzdGVtCisJYWRtaW5pc3RyYXRvcnMgd2hvIGFyZSByZXNwb25zaWJsZSBmb3IgdGhlIGNhcmUgYW5kIGZlZWRpbmcKKwlvZiBHaXQgcmVwb3NpdG9yaWVzLgorCisKK0luZGl2aWR1YWwgRGV2ZWxvcGVyIChTdGFuZGFsb25lKVtbU1RBTkRBTE9ORV1dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHN0YW5kYWxvbmUgaW5kaXZpZHVhbCBkZXZlbG9wZXIgZG9lcyBub3QgZXhjaGFuZ2UgcGF0Y2hlcyB3aXRoCitvdGhlciBwZW9wbGUsIGFuZCB3b3JrcyBhbG9uZSBpbiBhIHNpbmdsZSByZXBvc2l0b3J5LCB1c2luZyB0aGUKK2ZvbGxvd2luZyBjb21tYW5kcy4KKworICAqIGxpbmtnaXQ6Z2l0LWluaXRbMV0gdG8gY3JlYXRlIGEgbmV3IHJlcG9zaXRvcnkuCisKKyAgKiBsaW5rZ2l0OmdpdC1sb2dbMV0gdG8gc2VlIHdoYXQgaGFwcGVuZWQuCisKKyAgKiBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSBhbmQgbGlua2dpdDpnaXQtYnJhbmNoWzFdIHRvIHN3aXRjaAorICAgIGJyYW5jaGVzLgorCisgICogbGlua2dpdDpnaXQtYWRkWzFdIHRvIG1hbmFnZSB0aGUgaW5kZXggZmlsZS4KKworICAqIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gYW5kIGxpbmtnaXQ6Z2l0LXN0YXR1c1sxXSB0byBzZWUgd2hhdAorICAgIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBkb2luZy4KKworICAqIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSB0byBhZHZhbmNlIHRoZSBjdXJyZW50IGJyYW5jaC4KKworICAqIGxpbmtnaXQ6Z2l0LXJlc2V0WzFdIGFuZCBsaW5rZ2l0OmdpdC1jaGVja291dFsxXSAod2l0aAorICAgIHBhdGhuYW1lIHBhcmFtZXRlcnMpIHRvIHVuZG8gY2hhbmdlcy4KKworICAqIGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIHRvIG1lcmdlIGJldHdlZW4gbG9jYWwgYnJhbmNoZXMuCisKKyAgKiBsaW5rZ2l0OmdpdC1yZWJhc2VbMV0gdG8gbWFpbnRhaW4gdG9waWMgYnJhbmNoZXMuCisKKyAgKiBsaW5rZ2l0OmdpdC10YWdbMV0gdG8gbWFyayBhIGtub3duIHBvaW50LgorCitFeGFtcGxlcworfn5+fn5+fn4KKworVXNlIGEgdGFyYmFsbCBhcyBhIHN0YXJ0aW5nIHBvaW50IGZvciBhIG5ldyByZXBvc2l0b3J5Ljo6CisrCistLS0tLS0tLS0tLS0KKyQgdGFyIHp4ZiBmcm90ei50YXIuZ3oKKyQgY2QgZnJvdHoKKyQgZ2l0IGluaXQKKyQgZ2l0IGFkZCAuIDwxPgorJCBnaXQgY29tbWl0IC1tICJpbXBvcnQgb2YgZnJvdHogc291cmNlIHRyZWUuIgorJCBnaXQgdGFnIHYyLjQzIDwyPgorLS0tLS0tLS0tLS0tCisrCis8MT4gYWRkIGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorPDI+IG1ha2UgYSBsaWdodHdlaWdodCwgdW5hbm5vdGF0ZWQgdGFnLgorCitDcmVhdGUgYSB0b3BpYyBicmFuY2ggYW5kIGRldmVsb3AuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgYWxzYS1hdWRpbyA8MT4KKyQgZWRpdC9jb21waWxlL3Rlc3QKKyQgZ2l0IGNoZWNrb3V0IC0tIGN1cnNlcy91eF9hdWRpb19vc3MuYyA8Mj4KKyQgZ2l0IGFkZCBjdXJzZXMvdXhfYXVkaW9fYWxzYS5jIDwzPgorJCBlZGl0L2NvbXBpbGUvdGVzdAorJCBnaXQgZGlmZiBIRUFEIDw0PgorJCBnaXQgY29tbWl0IC1hIC1zIDw1PgorJCBlZGl0L2NvbXBpbGUvdGVzdAorJCBnaXQgZGlmZiBIRUFEXiA8Nj4KKyQgZ2l0IGNvbW1pdCAtYSAtLWFtZW5kIDw3PgorJCBnaXQgY2hlY2tvdXQgbWFzdGVyIDw4PgorJCBnaXQgbWVyZ2UgYWxzYS1hdWRpbyA8OT4KKyQgZ2l0IGxvZyAtLXNpbmNlPSczIGRheXMgYWdvJyA8MTA+CiskIGdpdCBsb2cgdjIuNDMuLiBjdXJzZXMvIDwxMT4KKy0tLS0tLS0tLS0tLQorKworPDE+IGNyZWF0ZSBhIG5ldyB0b3BpYyBicmFuY2guCis8Mj4gcmV2ZXJ0IHlvdXIgYm90Y2hlZCBjaGFuZ2VzIGluIGBjdXJzZXMvdXhfYXVkaW9fb3NzLmNgLgorPDM+IHlvdSBuZWVkIHRvIHRlbGwgR2l0IGlmIHlvdSBhZGRlZCBhIG5ldyBmaWxlOyByZW1vdmFsIGFuZAorbW9kaWZpY2F0aW9uIHdpbGwgYmUgY2F1Z2h0IGlmIHlvdSBkbyBgZ2l0IGNvbW1pdCAtYWAgbGF0ZXIuCis8ND4gdG8gc2VlIHdoYXQgY2hhbmdlcyB5b3UgYXJlIGNvbW1pdHRpbmcuCis8NT4gY29tbWl0IGV2ZXJ5dGhpbmcsIGFzIHlvdSBoYXZlIHRlc3RlZCwgd2l0aCB5b3VyIHNpZ24tb2ZmLgorPDY+IGxvb2sgYXQgYWxsIHlvdXIgY2hhbmdlcyBpbmNsdWRpbmcgdGhlIHByZXZpb3VzIGNvbW1pdC4KKzw3PiBhbWVuZCB0aGUgcHJldmlvdXMgY29tbWl0LCBhZGRpbmcgYWxsIHlvdXIgbmV3IGNoYW5nZXMsCit1c2luZyB5b3VyIG9yaWdpbmFsIG1lc3NhZ2UuCis8OD4gc3dpdGNoIHRvIHRoZSBtYXN0ZXIgYnJhbmNoLgorPDk+IG1lcmdlIGEgdG9waWMgYnJhbmNoIGludG8geW91ciBtYXN0ZXIgYnJhbmNoLgorPDEwPiByZXZpZXcgY29tbWl0IGxvZ3M7IG90aGVyIGZvcm1zIHRvIGxpbWl0IG91dHB1dCBjYW4gYmUKK2NvbWJpbmVkIGFuZCBpbmNsdWRlIGAtMTBgICh0byBzaG93IHVwIHRvIDEwIGNvbW1pdHMpLAorYC0tdW50aWw9MjAwNS0xMi0xMGAsIGV0Yy4KKzwxMT4gdmlldyBvbmx5IHRoZSBjaGFuZ2VzIHRoYXQgdG91Y2ggd2hhdCdzIGluIGBjdXJzZXMvYAorZGlyZWN0b3J5LCBzaW5jZSBgdjIuNDNgIHRhZy4KKworCitJbmRpdmlkdWFsIERldmVsb3BlciAoUGFydGljaXBhbnQpW1tQQVJUSUNJUEFOVF1dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgZGV2ZWxvcGVyIHdvcmtpbmcgYXMgYSBwYXJ0aWNpcGFudCBpbiBhIGdyb3VwIHByb2plY3QgbmVlZHMgdG8KK2xlYXJuIGhvdyB0byBjb21tdW5pY2F0ZSB3aXRoIG90aGVycywgYW5kIHVzZXMgdGhlc2UgY29tbWFuZHMgaW4KK2FkZGl0aW9uIHRvIHRoZSBvbmVzIG5lZWRlZCBieSBhIHN0YW5kYWxvbmUgZGV2ZWxvcGVyLgorCisgICogbGlua2dpdDpnaXQtY2xvbmVbMV0gZnJvbSB0aGUgdXBzdHJlYW0gdG8gcHJpbWUgeW91ciBsb2NhbAorICAgIHJlcG9zaXRvcnkuCisKKyAgKiBsaW5rZ2l0OmdpdC1wdWxsWzFdIGFuZCBsaW5rZ2l0OmdpdC1mZXRjaFsxXSBmcm9tICJvcmlnaW4iCisgICAgdG8ga2VlcCB1cC10by1kYXRlIHdpdGggdGhlIHVwc3RyZWFtLgorCisgICogbGlua2dpdDpnaXQtcHVzaFsxXSB0byBzaGFyZWQgcmVwb3NpdG9yeSwgaWYgeW91IGFkb3B0IENWUworICAgIHN0eWxlIHNoYXJlZCByZXBvc2l0b3J5IHdvcmtmbG93LgorCisgICogbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHRvIHByZXBhcmUgZS1tYWlsIHN1Ym1pc3Npb24sIGlmCisgICAgeW91IGFkb3B0IExpbnV4IGtlcm5lbC1zdHlsZSBwdWJsaWMgZm9ydW0gd29ya2Zsb3cuCisKKyAgKiBsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdIHRvIHNlbmQgeW91ciBlLW1haWwgc3VibWlzc2lvbiB3aXRob3V0CisgICAgY29ycnVwdGlvbiBieSB5b3VyIE1VQS4KKworICAqIGxpbmtnaXQ6Z2l0LXJlcXVlc3QtcHVsbFsxXSB0byBjcmVhdGUgYSBzdW1tYXJ5IG9mIGNoYW5nZXMKKyAgICBmb3IgeW91ciB1cHN0cmVhbSB0byBwdWxsLgorCisKK0V4YW1wbGVzCit+fn5+fn5+fgorCitDbG9uZSB0aGUgdXBzdHJlYW0gYW5kIHdvcmsgb24gaXQuICBGZWVkIGNoYW5nZXMgdG8gdXBzdHJlYW0uOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS8uLi4vdG9ydmFsZHMvbGludXgtMi42IG15Mi42CiskIGNkIG15Mi42CiskIGdpdCBjaGVja291dCAtYiBtaW5lIG1hc3RlciA8MT4KKyQgZWRpdC9jb21waWxlL3Rlc3Q7IGdpdCBjb21taXQgLWEgLXMgPDI+CiskIGdpdCBmb3JtYXQtcGF0Y2ggbWFzdGVyIDwzPgorJCBnaXQgc2VuZC1lbWFpbCAtLXRvPSJwZXJzb24gPGVtYWlsQGV4YW1wbGUuY29tPiIgMDAqLnBhdGNoIDw0PgorJCBnaXQgY2hlY2tvdXQgbWFzdGVyIDw1PgorJCBnaXQgcHVsbCA8Nj4KKyQgZ2l0IGxvZyAtcCBPUklHX0hFQUQuLiBhcmNoL2kzODYgaW5jbHVkZS9hc20taTM4NiA8Nz4KKyQgZ2l0IGxzLXJlbW90ZSAtLWhlYWRzIGh0dHA6Ly9naXQua2VybmVsLm9yZy8uLi4vamdhcnppay9saWJhdGEtZGV2LmdpdCA8OD4KKyQgZ2l0IHB1bGwgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViLy4uLi9qZ2FyemlrL2xpYmF0YS1kZXYuZ2l0IEFMTCA8OT4KKyQgZ2l0IHJlc2V0IC0taGFyZCBPUklHX0hFQUQgPDEwPgorJCBnaXQgZ2MgPDExPgorLS0tLS0tLS0tLS0tCisrCis8MT4gY2hlY2tvdXQgYSBuZXcgYnJhbmNoIGBtaW5lYCBmcm9tIG1hc3Rlci4KKzwyPiByZXBlYXQgYXMgbmVlZGVkLgorPDM+IGV4dHJhY3QgcGF0Y2hlcyBmcm9tIHlvdXIgYnJhbmNoLCByZWxhdGl2ZSB0byBtYXN0ZXIsCis8ND4gYW5kIGVtYWlsIHRoZW0uCis8NT4gcmV0dXJuIHRvIGBtYXN0ZXJgLCByZWFkeSB0byBzZWUgd2hhdCdzIG5ldworPDY+IGBnaXQgcHVsbGAgZmV0Y2hlcyBmcm9tIGBvcmlnaW5gIGJ5IGRlZmF1bHQgYW5kIG1lcmdlcyBpbnRvIHRoZQorY3VycmVudCBicmFuY2guCis8Nz4gaW1tZWRpYXRlbHkgYWZ0ZXIgcHVsbGluZywgbG9vayBhdCB0aGUgY2hhbmdlcyBkb25lIHVwc3RyZWFtCitzaW5jZSBsYXN0IHRpbWUgd2UgY2hlY2tlZCwgb25seSBpbiB0aGUKK2FyZWEgd2UgYXJlIGludGVyZXN0ZWQgaW4uCis8OD4gY2hlY2sgdGhlIGJyYW5jaCBuYW1lcyBpbiBhbiBleHRlcm5hbCByZXBvc2l0b3J5IChpZiBub3Qga25vd24pLgorPDk+IGZldGNoIGZyb20gYSBzcGVjaWZpYyBicmFuY2ggYEFMTGAgZnJvbSBhIHNwZWNpZmljIHJlcG9zaXRvcnkKK2FuZCBtZXJnZSBpdC4KKzwxMD4gcmV2ZXJ0IHRoZSBwdWxsLgorPDExPiBnYXJiYWdlIGNvbGxlY3QgbGVmdG92ZXIgb2JqZWN0cyBmcm9tIHJldmVydGVkIHB1bGwuCisKKworUHVzaCBpbnRvIGFub3RoZXIgcmVwb3NpdG9yeS46OgorKworLS0tLS0tLS0tLS0tCitzYXRlbGxpdGUkIGdpdCBjbG9uZSBtb3RoZXJzaGlwOmZyb3R6IGZyb3R6IDwxPgorc2F0ZWxsaXRlJCBjZCBmcm90egorc2F0ZWxsaXRlJCBnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAnXihyZW1vdGV8YnJhbmNoKVwuJyA8Mj4KK3JlbW90ZS5vcmlnaW4udXJsIG1vdGhlcnNoaXA6ZnJvdHoKK3JlbW90ZS5vcmlnaW4uZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKgorYnJhbmNoLm1hc3Rlci5yZW1vdGUgb3JpZ2luCiticmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyCitzYXRlbGxpdGUkIGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5wdXNoIFwKKwkgICArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9zYXRlbGxpdGUvKiA8Mz4KK3NhdGVsbGl0ZSQgZWRpdC9jb21waWxlL3Rlc3QvY29tbWl0CitzYXRlbGxpdGUkIGdpdCBwdXNoIG9yaWdpbiA8ND4KKworbW90aGVyc2hpcCQgY2QgZnJvdHoKK21vdGhlcnNoaXAkIGdpdCBjaGVja291dCBtYXN0ZXIKK21vdGhlcnNoaXAkIGdpdCBtZXJnZSBzYXRlbGxpdGUvbWFzdGVyIDw1PgorLS0tLS0tLS0tLS0tCisrCis8MT4gbW90aGVyc2hpcCBtYWNoaW5lIGhhcyBhIGZyb3R6IHJlcG9zaXRvcnkgdW5kZXIgeW91ciBob21lCitkaXJlY3Rvcnk7IGNsb25lIGZyb20gaXQgdG8gc3RhcnQgYSByZXBvc2l0b3J5IG9uIHRoZSBzYXRlbGxpdGUKK21hY2hpbmUuCis8Mj4gY2xvbmUgc2V0cyB0aGVzZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBieSBkZWZhdWx0LgorSXQgYXJyYW5nZXMgYGdpdCBwdWxsYCB0byBmZXRjaCBhbmQgc3RvcmUgdGhlIGJyYW5jaGVzIG9mIG1vdGhlcnNoaXAKK21hY2hpbmUgdG8gbG9jYWwgYHJlbW90ZXMvb3JpZ2luLypgIHJlbW90ZS10cmFja2luZyBicmFuY2hlcy4KKzwzPiBhcnJhbmdlIGBnaXQgcHVzaGAgdG8gcHVzaCBhbGwgbG9jYWwgYnJhbmNoZXMgdG8KK3RoZWlyIGNvcnJlc3BvbmRpbmcgYnJhbmNoIG9mIHRoZSBtb3RoZXJzaGlwIG1hY2hpbmUuCis8ND4gcHVzaCB3aWxsIHN0YXNoIGFsbCBvdXIgd29yayBhd2F5IG9uIGByZW1vdGVzL3NhdGVsbGl0ZS8qYAorcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG9uIHRoZSBtb3RoZXJzaGlwIG1hY2hpbmUuICBZb3UgY291bGQgdXNlIHRoaXMKK2FzIGEgYmFjay11cCBtZXRob2QuIExpa2V3aXNlLCB5b3UgY2FuIHByZXRlbmQgdGhhdCBtb3RoZXJzaGlwCisiZmV0Y2hlZCIgZnJvbSB5b3UgKHVzZWZ1bCB3aGVuIGFjY2VzcyBpcyBvbmUgc2lkZWQpLgorPDU+IG9uIG1vdGhlcnNoaXAgbWFjaGluZSwgbWVyZ2UgdGhlIHdvcmsgZG9uZSBvbiB0aGUgc2F0ZWxsaXRlCittYWNoaW5lIGludG8gdGhlIG1hc3RlciBicmFuY2guCisKK0JyYW5jaCBvZmYgb2YgYSBzcGVjaWZpYyB0YWcuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgcHJpdmF0ZTIuNi4xNCB2Mi42LjE0IDwxPgorJCBlZGl0L2NvbXBpbGUvdGVzdDsgZ2l0IGNvbW1pdCAtYQorJCBnaXQgY2hlY2tvdXQgbWFzdGVyCiskIGdpdCBjaGVycnktcGljayB2Mi42LjE0Li5wcml2YXRlMi42LjE0IDwyPgorLS0tLS0tLS0tLS0tCisrCis8MT4gY3JlYXRlIGEgcHJpdmF0ZSBicmFuY2ggYmFzZWQgb24gYSB3ZWxsIGtub3duIChidXQgc29tZXdoYXQgYmVoaW5kKQordGFnLgorPDI+IGZvcndhcmQgcG9ydCBhbGwgY2hhbmdlcyBpbiBgcHJpdmF0ZTIuNi4xNGAgYnJhbmNoIHRvIGBtYXN0ZXJgIGJyYW5jaAord2l0aG91dCBhIGZvcm1hbCAibWVyZ2luZyIuIE9yIGxvbmdoYW5kICsKK2BnaXQgZm9ybWF0LXBhdGNoIC1rIC1tIC0tc3Rkb3V0IHYyLjYuMTQuLnByaXZhdGUyLjYuMTQgfAorICBnaXQgYW0gLTMgLWtgCisKK0FuIGFsdGVybmF0ZSBwYXJ0aWNpcGFudCBzdWJtaXNzaW9uIG1lY2hhbmlzbSBpcyB1c2luZyB0aGUKK2BnaXQgcmVxdWVzdC1wdWxsYCBvciBwdWxsLXJlcXVlc3QgbWVjaGFuaXNtcyAoZS5nIGFzIHVzZWQgb24KK0dpdEh1YiAod3d3LmdpdGh1Yi5jb20pIHRvIG5vdGlmeSB5b3VyIHVwc3RyZWFtIG9mIHlvdXIKK2NvbnRyaWJ1dGlvbi4KKworSW50ZWdyYXRvcltbSU5URUdSQVRPUl1dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBmYWlybHkgY2VudHJhbCBwZXJzb24gYWN0aW5nIGFzIHRoZSBpbnRlZ3JhdG9yIGluIGEgZ3JvdXAKK3Byb2plY3QgcmVjZWl2ZXMgY2hhbmdlcyBtYWRlIGJ5IG90aGVycywgcmV2aWV3cyBhbmQgaW50ZWdyYXRlcwordGhlbSBhbmQgcHVibGlzaGVzIHRoZSByZXN1bHQgZm9yIG90aGVycyB0byB1c2UsIHVzaW5nIHRoZXNlCitjb21tYW5kcyBpbiBhZGRpdGlvbiB0byB0aGUgb25lcyBuZWVkZWQgYnkgcGFydGljaXBhbnRzLgorCitUaGlzIHNlY3Rpb24gY2FuIGFsc28gYmUgdXNlZCBieSB0aG9zZSB3aG8gcmVzcG9uZCB0byBgZ2l0CityZXF1ZXN0LXB1bGxgIG9yIHB1bGwtcmVxdWVzdCBvbiBHaXRIdWIgKHd3dy5naXRodWIuY29tKSB0bworaW50ZWdyYXRlIHRoZSB3b3JrIG9mIG90aGVycyBpbnRvIHRoZWlyIGhpc3RvcnkuIEFuIHN1Yi1hcmVhCitsaWV1dGVuYW50IGZvciBhIHJlcG9zaXRvcnkgd2lsbCBhY3QgYm90aCBhcyBhIHBhcnRpY2lwYW50IGFuZAorYXMgYW4gaW50ZWdyYXRvci4KKworCisgICogbGlua2dpdDpnaXQtYW1bMV0gdG8gYXBwbHkgcGF0Y2hlcyBlLW1haWxlZCBpbiBmcm9tIHlvdXIKKyAgICBjb250cmlidXRvcnMuCisKKyAgKiBsaW5rZ2l0OmdpdC1wdWxsWzFdIHRvIG1lcmdlIGZyb20geW91ciB0cnVzdGVkIGxpZXV0ZW5hbnRzLgorCisgICogbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdIHRvIHByZXBhcmUgYW5kIHNlbmQgc3VnZ2VzdGVkCisgICAgYWx0ZXJuYXRpdmUgdG8gY29udHJpYnV0b3JzLgorCisgICogbGlua2dpdDpnaXQtcmV2ZXJ0WzFdIHRvIHVuZG8gYm90Y2hlZCBjb21taXRzLgorCisgICogbGlua2dpdDpnaXQtcHVzaFsxXSB0byBwdWJsaXNoIHRoZSBibGVlZGluZyBlZGdlLgorCisKK0V4YW1wbGVzCit+fn5+fn5+fgorCitBIHR5cGljYWwgaW50ZWdyYXRvcidzIEdpdCBkYXkuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgc3RhdHVzIDwxPgorJCBnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkIG1hc3RlciA8Mj4KKyQgbWFpbHggPDM+CismIHMgMiAzIDQgNSAuLyt0by1hcHBseQorJiBzIDcgOCAuLytob2xkLWxpbnVzCismIHEKKyQgZ2l0IGNoZWNrb3V0IC1iIHRvcGljL29uZSBtYXN0ZXIKKyQgZ2l0IGFtIC0zIC1pIC1zIC4vK3RvLWFwcGx5IDw0PgorJCBjb21waWxlL3Rlc3QKKyQgZ2l0IGNoZWNrb3V0IC1iIGhvbGQvbGludXMgJiYgZ2l0IGFtIC0zIC1pIC1zIC4vK2hvbGQtbGludXMgPDU+CiskIGdpdCBjaGVja291dCB0b3BpYy9vbmUgJiYgZ2l0IHJlYmFzZSBtYXN0ZXIgPDY+CiskIGdpdCBjaGVja291dCBwdSAmJiBnaXQgcmVzZXQgLS1oYXJkIG5leHQgPDc+CiskIGdpdCBtZXJnZSB0b3BpYy9vbmUgdG9waWMvdHdvICYmIGdpdCBtZXJnZSBob2xkL2xpbnVzIDw4PgorJCBnaXQgY2hlY2tvdXQgbWFpbnQKKyQgZ2l0IGNoZXJyeS1waWNrIG1hc3Rlcn40IDw5PgorJCBjb21waWxlL3Rlc3QKKyQgZ2l0IHRhZyAtcyAtbSAiR0lUIDAuOTkuOXgiIHYwLjk5Ljl4IDwxMD4KKyQgZ2l0IGZldGNoIGtvICYmIGZvciBicmFuY2ggaW4gbWFzdGVyIG1haW50IG5leHQgcHUgPDExPgorICAgIGRvCisJZ2l0IHNob3ctYnJhbmNoIGtvLyRicmFuY2ggJGJyYW5jaCA8MTI+CisgICAgZG9uZQorJCBnaXQgcHVzaCAtLWZvbGxvdy10YWdzIGtvIDwxMz4KKy0tLS0tLS0tLS0tLQorKworPDE+IHNlZSB3aGF0IHlvdSB3ZXJlIGluIHRoZSBtaWRkbGUgb2YgZG9pbmcsIGlmIGFueXRoaW5nLgorPDI+IHNlZSB3aGljaCBicmFuY2hlcyBoYXZlbid0IGJlZW4gbWVyZ2VkIGludG8gYG1hc3RlcmAgeWV0LgorTGlrZXdpc2UgZm9yIGFueSBvdGhlciBpbnRlZ3JhdGlvbiBicmFuY2hlcyBlLmcuIGBtYWludGAsIGBuZXh0YAorYW5kIGBwdWAgKHBvdGVudGlhbCB1cGRhdGVzKS4KKzwzPiByZWFkIG1haWxzLCBzYXZlIG9uZXMgdGhhdCBhcmUgYXBwbGljYWJsZSwgYW5kIHNhdmUgb3RoZXJzCit0aGF0IGFyZSBub3QgcXVpdGUgcmVhZHkgKG90aGVyIG1haWwgcmVhZGVycyBhcmUgYXZhaWxhYmxlKS4KKzw0PiBhcHBseSB0aGVtLCBpbnRlcmFjdGl2ZWx5LCB3aXRoIHlvdXIgc2lnbi1vZmZzLgorPDU+IGNyZWF0ZSB0b3BpYyBicmFuY2ggYXMgbmVlZGVkIGFuZCBhcHBseSwgYWdhaW4gd2l0aCBzaWduLW9mZnMuCis8Nj4gcmViYXNlIGludGVybmFsIHRvcGljIGJyYW5jaCB0aGF0IGhhcyBub3QgYmVlbiBtZXJnZWQgdG8gdGhlCittYXN0ZXIgb3IgZXhwb3NlZCBhcyBhIHBhcnQgb2YgYSBzdGFibGUgYnJhbmNoLgorPDc+IHJlc3RhcnQgYHB1YCBldmVyeSB0aW1lIGZyb20gdGhlIG5leHQuCis8OD4gYW5kIGJ1bmRsZSB0b3BpYyBicmFuY2hlcyBzdGlsbCBjb29raW5nLgorPDk+IGJhY2twb3J0IGEgY3JpdGljYWwgZml4LgorPDEwPiBjcmVhdGUgYSBzaWduZWQgdGFnLgorPDExPiBtYWtlIHN1cmUgbWFzdGVyIHdhcyBub3QgYWNjaWRlbnRhbGx5IHJld291bmQgYmV5b25kIHRoYXQKK2FscmVhZHkgcHVzaGVkIG91dC4gIGBrb2Agc2hvcnRoYW5kIHBvaW50cyBhdCB0aGUgR2l0IG1haW50YWluZXIncworcmVwb3NpdG9yeSBhdCBrZXJuZWwub3JnLCBhbmQgbG9va3MgbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tCisoaW4gLmdpdC9jb25maWcpCitbcmVtb3RlICJrbyJdCisJdXJsID0ga2VybmVsLm9yZzovcHViL3NjbS9naXQvZ2l0LmdpdAorCWZldGNoID0gcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9rby8qCisJcHVzaCA9IHJlZnMvaGVhZHMvbWFzdGVyCisJcHVzaCA9IHJlZnMvaGVhZHMvbmV4dAorCXB1c2ggPSArcmVmcy9oZWFkcy9wdQorCXB1c2ggPSByZWZzL2hlYWRzL21haW50CistLS0tLS0tLS0tLS0KKysKKzwxMj4gSW4gdGhlIG91dHB1dCBmcm9tIGBnaXQgc2hvdy1icmFuY2hgLCBgbWFzdGVyYCBzaG91bGQgaGF2ZQorZXZlcnl0aGluZyBga28vbWFzdGVyYCBoYXMsIGFuZCBgbmV4dGAgc2hvdWxkIGhhdmUKK2V2ZXJ5dGhpbmcgYGtvL25leHRgIGhhcywgZXRjLgorPDEzPiBwdXNoIG91dCB0aGUgYmxlZWRpbmcgZWRnZSwgdG9nZXRoZXIgd2l0aCBuZXcgdGFncyB0aGF0IHBvaW50CitpbnRvIHRoZSBwdXNoZWQgaGlzdG9yeS4KKworCitSZXBvc2l0b3J5IEFkbWluaXN0cmF0aW9uW1tBRE1JTklTVFJBVElPTl1dCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgcmVwb3NpdG9yeSBhZG1pbmlzdHJhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyB0b29scyB0byBzZXQgdXAKK2FuZCBtYWludGFpbiBhY2Nlc3MgdG8gdGhlIHJlcG9zaXRvcnkgYnkgZGV2ZWxvcGVycy4KKworICAqIGxpbmtnaXQ6Z2l0LWRhZW1vblsxXSB0byBhbGxvdyBhbm9ueW1vdXMgZG93bmxvYWQgZnJvbQorICAgIHJlcG9zaXRvcnkuCisKKyAgKiBsaW5rZ2l0OmdpdC1zaGVsbFsxXSBjYW4gYmUgdXNlZCBhcyBhICdyZXN0cmljdGVkIGxvZ2luIHNoZWxsJworICAgIGZvciBzaGFyZWQgY2VudHJhbCByZXBvc2l0b3J5IHVzZXJzLgorCisgICogbGlua2dpdDpnaXQtaHR0cC1iYWNrZW5kWzFdIHByb3ZpZGVzIGEgc2VydmVyIHNpZGUgaW1wbGVtZW50YXRpb24KKyAgICBvZiBHaXQtb3Zlci1IVFRQICgiU21hcnQgaHR0cCIpIGFsbG93aW5nIGJvdGggZmV0Y2ggYW5kIHB1c2ggc2VydmljZXMuCisKKyAgKiBsaW5rZ2l0OmdpdHdlYlsxXSBwcm92aWRlcyBhIHdlYiBmcm9udC1lbmQgdG8gR2l0IHJlcG9zaXRvcmllcywKKyAgICB3aGljaCBjYW4gYmUgc2V0LXVwIHVzaW5nIHRoZSBsaW5rZ2l0OmdpdC1pbnN0YXdlYlsxXSBzY3JpcHQuCisKK2xpbms6aG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS5odG1sW3VwZGF0ZSBob29rIGhvd3RvXSBoYXMgYSBnb29kCitleGFtcGxlIG9mIG1hbmFnaW5nIGEgc2hhcmVkIGNlbnRyYWwgcmVwb3NpdG9yeS4KKworSW4gYWRkaXRpb24gdGhlcmUgYXJlIGEgbnVtYmVyIG9mIG90aGVyIHdpZGVseSBkZXBsb3llZCBob3N0aW5nLCBicm93c2luZworYW5kIHJldmlld2luZyBzb2x1dGlvbnMgc3VjaCBhczoKKworICAqIGdpdG9saXRlLCBnZXJyaXQgY29kZSByZXZpZXcsIGNnaXQgYW5kIG90aGVycy4KKworRXhhbXBsZXMKK35+fn5+fn5+CitXZSBhc3N1bWUgdGhlIGZvbGxvd2luZyBpbiAvZXRjL3NlcnZpY2VzOjoKKysKKy0tLS0tLS0tLS0tLQorJCBncmVwIDk0MTggL2V0Yy9zZXJ2aWNlcworZ2l0CQk5NDE4L3RjcAkJIyBHaXQgVmVyc2lvbiBDb250cm9sIFN5c3RlbQorLS0tLS0tLS0tLS0tCisKK1J1biBnaXQtZGFlbW9uIHRvIHNlcnZlIC9wdWIvc2NtIGZyb20gaW5ldGQuOjoKKysKKy0tLS0tLS0tLS0tLQorJCBncmVwIGdpdCAvZXRjL2luZXRkLmNvbmYKK2dpdAlzdHJlYW0JdGNwCW5vd2FpdAlub2JvZHkgXAorICAvdXNyL2Jpbi9naXQtZGFlbW9uIGdpdC1kYWVtb24gLS1pbmV0ZCAtLWV4cG9ydC1hbGwgL3B1Yi9zY20KKy0tLS0tLS0tLS0tLQorKworVGhlIGFjdHVhbCBjb25maWd1cmF0aW9uIGxpbmUgc2hvdWxkIGJlIG9uIG9uZSBsaW5lLgorCitSdW4gZ2l0LWRhZW1vbiB0byBzZXJ2ZSAvcHViL3NjbSBmcm9tIHhpbmV0ZC46OgorKworLS0tLS0tLS0tLS0tCiskIGNhdCAvZXRjL3hpbmV0ZC5kL2dpdC1kYWVtb24KKyMgZGVmYXVsdDogb2ZmCisjIGRlc2NyaXB0aW9uOiBUaGUgR2l0IHNlcnZlciBvZmZlcnMgYWNjZXNzIHRvIEdpdCByZXBvc2l0b3JpZXMKK3NlcnZpY2UgZ2l0Cit7CisJZGlzYWJsZSA9IG5vCisJdHlwZSAgICAgICAgICAgID0gVU5MSVNURUQKKwlwb3J0ICAgICAgICAgICAgPSA5NDE4CisJc29ja2V0X3R5cGUgICAgID0gc3RyZWFtCisJd2FpdCAgICAgICAgICAgID0gbm8KKwl1c2VyICAgICAgICAgICAgPSBub2JvZHkKKwlzZXJ2ZXIgICAgICAgICAgPSAvdXNyL2Jpbi9naXQtZGFlbW9uCisJc2VydmVyX2FyZ3MgICAgID0gLS1pbmV0ZCAtLWV4cG9ydC1hbGwgLS1iYXNlLXBhdGg9L3B1Yi9zY20KKwlsb2dfb25fZmFpbHVyZSAgKz0gVVNFUklECit9CistLS0tLS0tLS0tLS0KKysKK0NoZWNrIHlvdXIgeGluZXRkKDgpIGRvY3VtZW50YXRpb24gYW5kIHNldHVwLCB0aGlzIGlzIGZyb20gYSBGZWRvcmEgc3lzdGVtLgorT3RoZXJzIG1pZ2h0IGJlIGRpZmZlcmVudC4KKworR2l2ZSBwdXNoL3B1bGwgb25seSBhY2Nlc3MgdG8gZGV2ZWxvcGVycyB1c2luZyBnaXQtb3Zlci1zc2guOjoKKworZS5nLiB0aG9zZSB1c2luZzoKK2AkIGdpdCBwdXNoL3B1bGwgc3NoOi8vaG9zdC54ei9wdWIvc2NtL3Byb2plY3RgCisrCistLS0tLS0tLS0tLS0KKyQgZ3JlcCBnaXQgL2V0Yy9wYXNzd2QgPDE+CithbGljZTp4OjEwMDA6MTAwMDo6L2hvbWUvYWxpY2U6L3Vzci9iaW4vZ2l0LXNoZWxsCitib2I6eDoxMDAxOjEwMDE6Oi9ob21lL2JvYjovdXNyL2Jpbi9naXQtc2hlbGwKK2NpbmR5Ong6MTAwMjoxMDAyOjovaG9tZS9jaW5keTovdXNyL2Jpbi9naXQtc2hlbGwKK2RhdmlkOng6MTAwMzoxMDAzOjovaG9tZS9kYXZpZDovdXNyL2Jpbi9naXQtc2hlbGwKKyQgZ3JlcCBnaXQgL2V0Yy9zaGVsbHMgPDI+CisvdXNyL2Jpbi9naXQtc2hlbGwKKy0tLS0tLS0tLS0tLQorKworPDE+IGxvZy1pbiBzaGVsbCBpcyBzZXQgdG8gL3Vzci9iaW4vZ2l0LXNoZWxsLCB3aGljaCBkb2VzIG5vdAorYWxsb3cgYW55dGhpbmcgYnV0IGBnaXQgcHVzaGAgYW5kIGBnaXQgcHVsbGAuICBUaGUgdXNlcnMgcmVxdWlyZQorc3NoIGFjY2VzcyB0byB0aGUgbWFjaGluZS4KKzwyPiBpbiBtYW55IGRpc3RyaWJ1dGlvbnMgL2V0Yy9zaGVsbHMgbmVlZHMgdG8gbGlzdCB3aGF0IGlzIHVzZWQKK2FzIHRoZSBsb2dpbiBzaGVsbC4KKworQ1ZTLXN0eWxlIHNoYXJlZCByZXBvc2l0b3J5Ljo6CisrCistLS0tLS0tLS0tLS0KKyQgZ3JlcCBnaXQgL2V0Yy9ncm91cCA8MT4KK2dpdDp4Ojk0MTg6YWxpY2UsYm9iLGNpbmR5LGRhdmlkCiskIGNkIC9ob21lL2Rldm8uZ2l0CiskIGxzIC1sIDwyPgorICBscnd4cnd4cnd4ICAgMSBkYXZpZCBnaXQgICAgMTcgRGVjICA0IDIyOjQwIEhFQUQgLT4gcmVmcy9oZWFkcy9tYXN0ZXIKKyAgZHJ3eHJ3c3IteCAgIDIgZGF2aWQgZ2l0ICA0MDk2IERlYyAgNCAyMjo0MCBicmFuY2hlcworICAtcnctcnctci0tICAgMSBkYXZpZCBnaXQgICAgODQgRGVjICA0IDIyOjQwIGNvbmZpZworICAtcnctcnctci0tICAgMSBkYXZpZCBnaXQgICAgNTggRGVjICA0IDIyOjQwIGRlc2NyaXB0aW9uCisgIGRyd3hyd3NyLXggICAyIGRhdmlkIGdpdCAgNDA5NiBEZWMgIDQgMjI6NDAgaG9va3MKKyAgLXJ3LXJ3LXItLSAgIDEgZGF2aWQgZ2l0IDM3NTA0IERlYyAgNCAyMjo0MCBpbmRleAorICBkcnd4cndzci14ICAgMiBkYXZpZCBnaXQgIDQwOTYgRGVjICA0IDIyOjQwIGluZm8KKyAgZHJ3eHJ3c3IteCAgIDQgZGF2aWQgZ2l0ICA0MDk2IERlYyAgNCAyMjo0MCBvYmplY3RzCisgIGRyd3hyd3NyLXggICA0IGRhdmlkIGdpdCAgNDA5NiBOb3YgIDcgMTQ6NTggcmVmcworICBkcnd4cndzci14ICAgMiBkYXZpZCBnaXQgIDQwOTYgRGVjICA0IDIyOjQwIHJlbW90ZXMKKyQgbHMgLWwgaG9va3MvdXBkYXRlIDwzPgorICAtci14ci14ci14ICAgMSBkYXZpZCBnaXQgIDM1MzYgRGVjICA0IDIyOjQwIHVwZGF0ZQorJCBjYXQgaW5mby9hbGxvd2VkLXVzZXJzIDw0PgorcmVmcy9oZWFkcy9tYXN0ZXIJYWxpY2VcfGNpbmR5CityZWZzL2hlYWRzL2RvYy11cGRhdGUJYm9iCityZWZzL3RhZ3MvdlswLTldKglkYXZpZAorLS0tLS0tLS0tLS0tCisrCis8MT4gcGxhY2UgdGhlIGRldmVsb3BlcnMgaW50byB0aGUgc2FtZSBnaXQgZ3JvdXAuCis8Mj4gYW5kIG1ha2UgdGhlIHNoYXJlZCByZXBvc2l0b3J5IHdyaXRhYmxlIGJ5IHRoZSBncm91cC4KKzwzPiB1c2UgdXBkYXRlLWhvb2sgZXhhbXBsZSBieSBDYXJsIGZyb20gRG9jdW1lbnRhdGlvbi9ob3d0by8KK2ZvciBicmFuY2ggcG9saWN5IGNvbnRyb2wuCis8ND4gYWxpY2UgYW5kIGNpbmR5IGNhbiBwdXNoIGludG8gbWFzdGVyLCBvbmx5IGJvYiBjYW4gcHVzaCBpbnRvIGRvYy11cGRhdGUuCitkYXZpZCBpcyB0aGUgcmVsZWFzZSBtYW5hZ2VyIGFuZCBpcyB0aGUgb25seSBwZXJzb24gd2hvIGNhbgorY3JlYXRlIGFuZCBwdXNoIHZlcnNpb24gdGFncy4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGdsb3NzYXJ5LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0Z2xvc3NhcnkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMmUyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdGdsb3NzYXJ5LnR4dApAQCAtMCwwICsxLDI3IEBACitnaXRnbG9zc2FyeSg3KQorPT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0Z2xvc3NhcnkgLSBBIEdpdCBHbG9zc2FyeQorCitTWU5PUFNJUworLS0tLS0tLS0KKyoKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK2luY2x1ZGU6Omdsb3NzYXJ5LWNvbnRlbnQudHh0W10KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHR1dG9yaWFsWzddLAorbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXRldmVyeWRheVs3XSwKK2xpbms6dXNlci1tYW51YWwuaHRtbFtUaGUgR2l0IFVzZXIncyBNYW51YWxdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0aG9va3MudHh0IGIvRG9jdW1lbnRhdGlvbi9naXRob29rcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhMGFjOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0aG9va3MudHh0CkBAIC0wLDAgKzEsNDE3IEBACitnaXRob29rcyg1KQorPT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0aG9va3MgLSBIb29rcyB1c2VkIGJ5IEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KKyRHSVRfRElSL2hvb2tzLyoKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworSG9va3MgYXJlIGxpdHRsZSBzY3JpcHRzIHlvdSBjYW4gcGxhY2UgaW4gYCRHSVRfRElSL2hvb2tzYAorZGlyZWN0b3J5IHRvIHRyaWdnZXIgYWN0aW9uIGF0IGNlcnRhaW4gcG9pbnRzLiAgV2hlbgorJ2dpdCBpbml0JyBpcyBydW4sIGEgaGFuZGZ1bCBvZiBleGFtcGxlIGhvb2tzIGFyZSBjb3BpZWQgaW50byB0aGUKK2Bob29rc2AgZGlyZWN0b3J5IG9mIHRoZSBuZXcgcmVwb3NpdG9yeSwgYnV0IGJ5IGRlZmF1bHQgdGhleSBhcmUKK2FsbCBkaXNhYmxlZC4gIFRvIGVuYWJsZSBhIGhvb2ssIHJlbmFtZSBpdCBieSByZW1vdmluZyBpdHMgYC5zYW1wbGVgCitzdWZmaXguCisKK05PVEU6IEl0IGlzIGFsc28gYSByZXF1aXJlbWVudCBmb3IgYSBnaXZlbiBob29rIHRvIGJlIGV4ZWN1dGFibGUuCitIb3dldmVyIC0gaW4gYSBmcmVzaGx5IGluaXRpYWxpemVkIHJlcG9zaXRvcnkgLSB0aGUgYC5zYW1wbGVgIGZpbGVzIGFyZQorZXhlY3V0YWJsZSBieSBkZWZhdWx0LgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgY3VycmVudGx5IGRlZmluZWQgaG9va3MuCisKK0hPT0tTCistLS0tLQorCithcHBseXBhdGNoLW1zZworfn5+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdCBhbScgc2NyaXB0LiAgSXQgdGFrZXMgYSBzaW5nbGUKK3BhcmFtZXRlciwgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBob2xkcyB0aGUgcHJvcG9zZWQgY29tbWl0Citsb2cgbWVzc2FnZS4gIEV4aXRpbmcgd2l0aCBub24temVybyBzdGF0dXMgY2F1c2VzCisnZ2l0IGFtJyB0byBhYm9ydCBiZWZvcmUgYXBwbHlpbmcgdGhlIHBhdGNoLgorCitUaGUgaG9vayBpcyBhbGxvd2VkIHRvIGVkaXQgdGhlIG1lc3NhZ2UgZmlsZSBpbiBwbGFjZSwgYW5kIGNhbgorYmUgdXNlZCB0byBub3JtYWxpemUgdGhlIG1lc3NhZ2UgaW50byBzb21lIHByb2plY3Qgc3RhbmRhcmQKK2Zvcm1hdCAoaWYgdGhlIHByb2plY3QgaGFzIG9uZSkuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gcmVmdXNlCit0aGUgY29tbWl0IGFmdGVyIGluc3BlY3RpbmcgdGhlIG1lc3NhZ2UgZmlsZS4KKworVGhlIGRlZmF1bHQgJ2FwcGx5cGF0Y2gtbXNnJyBob29rLCB3aGVuIGVuYWJsZWQsIHJ1bnMgdGhlCisnY29tbWl0LW1zZycgaG9vaywgaWYgdGhlIGxhdHRlciBpcyBlbmFibGVkLgorCitwcmUtYXBwbHlwYXRjaAorfn5+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdCBhbScuICBJdCB0YWtlcyBubyBwYXJhbWV0ZXIsIGFuZCBpcworaW52b2tlZCBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZCwgYnV0IGJlZm9yZSBhIGNvbW1pdCBpcyBtYWRlLgorCitJZiBpdCBleGl0cyB3aXRoIG5vbi16ZXJvIHN0YXR1cywgdGhlbiB0aGUgd29ya2luZyB0cmVlIHdpbGwgbm90IGJlCitjb21taXR0ZWQgYWZ0ZXIgYXBwbHlpbmcgdGhlIHBhdGNoLgorCitJdCBjYW4gYmUgdXNlZCB0byBpbnNwZWN0IHRoZSBjdXJyZW50IHdvcmtpbmcgdHJlZSBhbmQgcmVmdXNlIHRvCittYWtlIGEgY29tbWl0IGlmIGl0IGRvZXMgbm90IHBhc3MgY2VydGFpbiB0ZXN0LgorCitUaGUgZGVmYXVsdCAncHJlLWFwcGx5cGF0Y2gnIGhvb2ssIHdoZW4gZW5hYmxlZCwgcnVucyB0aGUKKydwcmUtY29tbWl0JyBob29rLCBpZiB0aGUgbGF0dGVyIGlzIGVuYWJsZWQuCisKK3Bvc3QtYXBwbHlwYXRjaAorfn5+fn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQgYW0nLiAgSXQgdGFrZXMgbm8gcGFyYW1ldGVyLAorYW5kIGlzIGludm9rZWQgYWZ0ZXIgdGhlIHBhdGNoIGlzIGFwcGxpZWQgYW5kIGEgY29tbWl0IGlzIG1hZGUuCisKK1RoaXMgaG9vayBpcyBtZWFudCBwcmltYXJpbHkgZm9yIG5vdGlmaWNhdGlvbiwgYW5kIGNhbm5vdCBhZmZlY3QKK3RoZSBvdXRjb21lIG9mICdnaXQgYW0nLgorCitwcmUtY29tbWl0Cit+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQgY29tbWl0JywgYW5kIGNhbiBiZSBieXBhc3NlZAord2l0aCBgLS1uby12ZXJpZnlgIG9wdGlvbi4gIEl0IHRha2VzIG5vIHBhcmFtZXRlciwgYW5kIGlzCitpbnZva2VkIGJlZm9yZSBvYnRhaW5pbmcgdGhlIHByb3Bvc2VkIGNvbW1pdCBsb2cgbWVzc2FnZSBhbmQKK21ha2luZyBhIGNvbW1pdC4gIEV4aXRpbmcgd2l0aCBub24temVybyBzdGF0dXMgZnJvbSB0aGlzIHNjcmlwdAorY2F1c2VzIHRoZSAnZ2l0IGNvbW1pdCcgdG8gYWJvcnQuCisKK1RoZSBkZWZhdWx0ICdwcmUtY29tbWl0JyBob29rLCB3aGVuIGVuYWJsZWQsIGNhdGNoZXMgaW50cm9kdWN0aW9uCitvZiBsaW5lcyB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2VzIGFuZCBhYm9ydHMgdGhlIGNvbW1pdCB3aGVuCitzdWNoIGEgbGluZSBpcyBmb3VuZC4KKworQWxsIHRoZSAnZ2l0IGNvbW1pdCcgaG9va3MgYXJlIGludm9rZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIGBHSVRfRURJVE9SPTpgIGlmIHRoZSBjb21tYW5kIHdpbGwgbm90IGJyaW5nIHVwIGFuIGVkaXRvcgordG8gbW9kaWZ5IHRoZSBjb21taXQgbWVzc2FnZS4KKworcHJlcGFyZS1jb21taXQtbXNnCit+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdCBjb21taXQnIHJpZ2h0IGFmdGVyIHByZXBhcmluZyB0aGUKK2RlZmF1bHQgbG9nIG1lc3NhZ2UsIGFuZCBiZWZvcmUgdGhlIGVkaXRvciBpcyBzdGFydGVkLgorCitJdCB0YWtlcyBvbmUgdG8gdGhyZWUgcGFyYW1ldGVycy4gIFRoZSBmaXJzdCBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZQordGhhdCBjb250YWlucyB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLiAgVGhlIHNlY29uZCBpcyB0aGUgc291cmNlIG9mIHRoZSBjb21taXQKK21lc3NhZ2UsIGFuZCBjYW4gYmU6IGBtZXNzYWdlYCAoaWYgYSBgLW1gIG9yIGAtRmAgb3B0aW9uIHdhcworZ2l2ZW4pOyBgdGVtcGxhdGVgIChpZiBhIGAtdGAgb3B0aW9uIHdhcyBnaXZlbiBvciB0aGUKK2NvbmZpZ3VyYXRpb24gb3B0aW9uIGBjb21taXQudGVtcGxhdGVgIGlzIHNldCk7IGBtZXJnZWAgKGlmIHRoZQorY29tbWl0IGlzIGEgbWVyZ2Ugb3IgYSBgLmdpdC9NRVJHRV9NU0dgIGZpbGUgZXhpc3RzKTsgYHNxdWFzaGAKKyhpZiBhIGAuZ2l0L1NRVUFTSF9NU0dgIGZpbGUgZXhpc3RzKTsgb3IgYGNvbW1pdGAsIGZvbGxvd2VkIGJ5CithIGNvbW1pdCBTSEEtMSAoaWYgYSBgLWNgLCBgLUNgIG9yIGAtLWFtZW5kYCBvcHRpb24gd2FzIGdpdmVuKS4KKworSWYgdGhlIGV4aXQgc3RhdHVzIGlzIG5vbi16ZXJvLCAnZ2l0IGNvbW1pdCcgd2lsbCBhYm9ydC4KKworVGhlIHB1cnBvc2Ugb2YgdGhlIGhvb2sgaXMgdG8gZWRpdCB0aGUgbWVzc2FnZSBmaWxlIGluIHBsYWNlLCBhbmQKK2l0IGlzIG5vdCBzdXBwcmVzc2VkIGJ5IHRoZSBgLS1uby12ZXJpZnlgIG9wdGlvbi4gIEEgbm9uLXplcm8gZXhpdAorbWVhbnMgYSBmYWlsdXJlIG9mIHRoZSBob29rIGFuZCBhYm9ydHMgdGhlIGNvbW1pdC4gIEl0IHNob3VsZCBub3QKK2JlIHVzZWQgYXMgcmVwbGFjZW1lbnQgZm9yIHByZS1jb21taXQgaG9vay4KKworVGhlIHNhbXBsZSBgcHJlcGFyZS1jb21taXQtbXNnYCBob29rIHRoYXQgY29tZXMgd2l0aCBHaXQgY29tbWVudHMKK291dCB0aGUgYENvbmZsaWN0czpgIHBhcnQgb2YgYSBtZXJnZSdzIGNvbW1pdCBtZXNzYWdlLgorCitjb21taXQtbXNnCit+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQgY29tbWl0JywgYW5kIGNhbiBiZSBieXBhc3NlZAord2l0aCBgLS1uby12ZXJpZnlgIG9wdGlvbi4gIEl0IHRha2VzIGEgc2luZ2xlIHBhcmFtZXRlciwgdGhlCituYW1lIG9mIHRoZSBmaWxlIHRoYXQgaG9sZHMgdGhlIHByb3Bvc2VkIGNvbW1pdCBsb2cgbWVzc2FnZS4KK0V4aXRpbmcgd2l0aCBub24temVybyBzdGF0dXMgY2F1c2VzIHRoZSAnZ2l0IGNvbW1pdCcgdG8KK2Fib3J0LgorCitUaGUgaG9vayBpcyBhbGxvd2VkIHRvIGVkaXQgdGhlIG1lc3NhZ2UgZmlsZSBpbiBwbGFjZSwgYW5kIGNhbgorYmUgdXNlZCB0byBub3JtYWxpemUgdGhlIG1lc3NhZ2UgaW50byBzb21lIHByb2plY3Qgc3RhbmRhcmQKK2Zvcm1hdCAoaWYgdGhlIHByb2plY3QgaGFzIG9uZSkuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gcmVmdXNlCit0aGUgY29tbWl0IGFmdGVyIGluc3BlY3RpbmcgdGhlIG1lc3NhZ2UgZmlsZS4KKworVGhlIGRlZmF1bHQgJ2NvbW1pdC1tc2cnIGhvb2ssIHdoZW4gZW5hYmxlZCwgZGV0ZWN0cyBkdXBsaWNhdGUKKyJTaWduZWQtb2ZmLWJ5IiBsaW5lcywgYW5kIGFib3J0cyB0aGUgY29tbWl0IGlmIG9uZSBpcyBmb3VuZC4KKworcG9zdC1jb21taXQKK35+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQgY29tbWl0Jy4gIEl0IHRha2VzIG5vCitwYXJhbWV0ZXIsIGFuZCBpcyBpbnZva2VkIGFmdGVyIGEgY29tbWl0IGlzIG1hZGUuCisKK1RoaXMgaG9vayBpcyBtZWFudCBwcmltYXJpbHkgZm9yIG5vdGlmaWNhdGlvbiwgYW5kIGNhbm5vdCBhZmZlY3QKK3RoZSBvdXRjb21lIG9mICdnaXQgY29tbWl0Jy4KKworcHJlLXJlYmFzZQorfn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgY2FsbGVkIGJ5ICdnaXQgcmViYXNlJyBhbmQgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBhCiticmFuY2ggZnJvbSBnZXR0aW5nIHJlYmFzZWQuICBUaGUgaG9vayBtYXkgYmUgY2FsbGVkIHdpdGggb25lIG9yCit0d28gcGFyYW1ldGVycy4gIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIHVwc3RyZWFtIGZyb20gd2hpY2gKK3RoZSBzZXJpZXMgd2FzIGZvcmtlZC4gIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBicmFuY2ggYmVpbmcKK3JlYmFzZWQsIGFuZCBpcyBub3Qgc2V0IHdoZW4gcmViYXNpbmcgdGhlIGN1cnJlbnQgYnJhbmNoLgorCitwb3N0LWNoZWNrb3V0Cit+fn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIHdoZW4gYSAnZ2l0IGNoZWNrb3V0JyBpcyBydW4gYWZ0ZXIgaGF2aW5nIHVwZGF0ZWQgdGhlCit3b3JrdHJlZS4gIFRoZSBob29rIGlzIGdpdmVuIHRocmVlIHBhcmFtZXRlcnM6IHRoZSByZWYgb2YgdGhlIHByZXZpb3VzIEhFQUQsCit0aGUgcmVmIG9mIHRoZSBuZXcgSEVBRCAod2hpY2ggbWF5IG9yIG1heSBub3QgaGF2ZSBjaGFuZ2VkKSwgYW5kIGEgZmxhZworaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjaGVja291dCB3YXMgYSBicmFuY2ggY2hlY2tvdXQgKGNoYW5naW5nIGJyYW5jaGVzLAorZmxhZz0xKSBvciBhIGZpbGUgY2hlY2tvdXQgKHJldHJpZXZpbmcgYSBmaWxlIGZyb20gdGhlIGluZGV4LCBmbGFnPTApLgorVGhpcyBob29rIGNhbm5vdCBhZmZlY3QgdGhlIG91dGNvbWUgb2YgJ2dpdCBjaGVja291dCcuCisKK0l0IGlzIGFsc28gcnVuIGFmdGVyICdnaXQgY2xvbmUnLCB1bmxlc3MgdGhlIC0tbm8tY2hlY2tvdXQgKC1uKSBvcHRpb24gaXMKK3VzZWQuIFRoZSBmaXJzdCBwYXJhbWV0ZXIgZ2l2ZW4gdG8gdGhlIGhvb2sgaXMgdGhlIG51bGwtcmVmLCB0aGUgc2Vjb25kIHRoZQorcmVmIG9mIHRoZSBuZXcgSEVBRCBhbmQgdGhlIGZsYWcgaXMgYWx3YXlzIDEuCisKK1RoaXMgaG9vayBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHJlcG9zaXRvcnkgdmFsaWRpdHkgY2hlY2tzLCBhdXRvLWRpc3BsYXkKK2RpZmZlcmVuY2VzIGZyb20gdGhlIHByZXZpb3VzIEhFQUQgaWYgZGlmZmVyZW50LCBvciBzZXQgd29ya2luZyBkaXIgbWV0YWRhdGEKK3Byb3BlcnRpZXMuCisKK3Bvc3QtbWVyZ2UKK35+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdCBtZXJnZScsIHdoaWNoIGhhcHBlbnMgd2hlbiBhICdnaXQgcHVsbCcKK2lzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5LiAgVGhlIGhvb2sgdGFrZXMgYSBzaW5nbGUgcGFyYW1ldGVyLCBhIHN0YXR1cworZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgb3Igbm90IHRoZSBtZXJnZSBiZWluZyBkb25lIHdhcyBhIHNxdWFzaCBtZXJnZS4KK1RoaXMgaG9vayBjYW5ub3QgYWZmZWN0IHRoZSBvdXRjb21lIG9mICdnaXQgbWVyZ2UnIGFuZCBpcyBub3QgZXhlY3V0ZWQsCitpZiB0aGUgbWVyZ2UgZmFpbGVkIGR1ZSB0byBjb25mbGljdHMuCisKK1RoaXMgaG9vayBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGEgY29ycmVzcG9uZGluZyBwcmUtY29tbWl0IGhvb2sgdG8KK3NhdmUgYW5kIHJlc3RvcmUgYW55IGZvcm0gb2YgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSB3b3JraW5nIHRyZWUKKyhlLmcuOiBwZXJtaXNzaW9ucy9vd25lcnNoaXAsIEFDTFMsIGV0YykuICBTZWUgY29udHJpYi9ob29rcy9zZXRnaXRwZXJtcy5wZXJsCitmb3IgYW4gZXhhbXBsZSBvZiBob3cgdG8gZG8gdGhpcy4KKworcHJlLXB1c2gKK35+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBjYWxsZWQgYnkgJ2dpdCBwdXNoJyBhbmQgY2FuIGJlIHVzZWQgdG8gcHJldmVudCBhIHB1c2ggZnJvbSB0YWtpbmcKK3BsYWNlLiAgVGhlIGhvb2sgaXMgY2FsbGVkIHdpdGggdHdvIHBhcmFtZXRlcnMgd2hpY2ggcHJvdmlkZSB0aGUgbmFtZSBhbmQKK2xvY2F0aW9uIG9mIHRoZSBkZXN0aW5hdGlvbiByZW1vdGUsIGlmIGEgbmFtZWQgcmVtb3RlIGlzIG5vdCBiZWluZyB1c2VkIGJvdGgKK3ZhbHVlcyB3aWxsIGJlIHRoZSBzYW1lLgorCitJbmZvcm1hdGlvbiBhYm91dCB3aGF0IGlzIHRvIGJlIHB1c2hlZCBpcyBwcm92aWRlZCBvbiB0aGUgaG9vaydzIHN0YW5kYXJkCitpbnB1dCB3aXRoIGxpbmVzIG9mIHRoZSBmb3JtOgorCisgIDxsb2NhbCByZWY+IFNQIDxsb2NhbCBzaGExPiBTUCA8cmVtb3RlIHJlZj4gU1AgPHJlbW90ZSBzaGExPiBMRgorCitGb3IgaW5zdGFuY2UsIGlmIHRoZSBjb21tYW5kICtnaXQgcHVzaCBvcmlnaW4gbWFzdGVyOmZvcmVpZ24rIHdlcmUgcnVuIHRoZQoraG9vayB3b3VsZCByZWNlaXZlIGEgbGluZSBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgcmVmcy9oZWFkcy9tYXN0ZXIgNjc4OTAgcmVmcy9oZWFkcy9mb3JlaWduIDEyMzQ1CisKK2FsdGhvdWdoIHRoZSBmdWxsLCA0MC1jaGFyYWN0ZXIgU0hBLTFzIHdvdWxkIGJlIHN1cHBsaWVkLiAgSWYgdGhlIGZvcmVpZ24gcmVmCitkb2VzIG5vdCB5ZXQgZXhpc3QgdGhlIGA8cmVtb3RlIFNIQS0xPmAgd2lsbCBiZSA0MCBgMGAuICBJZiBhIHJlZiBpcyB0byBiZQorZGVsZXRlZCwgdGhlIGA8bG9jYWwgcmVmPmAgd2lsbCBiZSBzdXBwbGllZCBhcyBgKGRlbGV0ZSlgIGFuZCB0aGUgYDxsb2NhbAorU0hBLTE+YCB3aWxsIGJlIDQwIGAwYC4gIElmIHRoZSBsb2NhbCBjb21taXQgd2FzIHNwZWNpZmllZCBieSBzb21ldGhpbmcgb3RoZXIKK3RoYW4gYSBuYW1lIHdoaWNoIGNvdWxkIGJlIGV4cGFuZGVkIChzdWNoIGFzIGBIRUFEfmAsIG9yIGEgU0hBLTEpIGl0IHdpbGwgYmUKK3N1cHBsaWVkIGFzIGl0IHdhcyBvcmlnaW5hbGx5IGdpdmVuLgorCitJZiB0aGlzIGhvb2sgZXhpdHMgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cywgJ2dpdCBwdXNoJyB3aWxsIGFib3J0IHdpdGhvdXQKK3B1c2hpbmcgYW55dGhpbmcuICBJbmZvcm1hdGlvbiBhYm91dCB3aHkgdGhlIHB1c2ggaXMgcmVqZWN0ZWQgbWF5IGJlIHNlbnQKK3RvIHRoZSB1c2VyIGJ5IHdyaXRpbmcgdG8gc3RhbmRhcmQgZXJyb3IuCisKK1tbcHJlLXJlY2VpdmVdXQorcHJlLXJlY2VpdmUKK35+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksCit3aGljaCBoYXBwZW5zIHdoZW4gYSAnZ2l0IHB1c2gnIGlzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5LgorSnVzdCBiZWZvcmUgc3RhcnRpbmcgdG8gdXBkYXRlIHJlZnMgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LCB0aGUKK3ByZS1yZWNlaXZlIGhvb2sgaXMgaW52b2tlZC4gIEl0cyBleGl0IHN0YXR1cyBkZXRlcm1pbmVzIHRoZSBzdWNjZXNzCitvciBmYWlsdXJlIG9mIHRoZSB1cGRhdGUuCisKK1RoaXMgaG9vayBleGVjdXRlcyBvbmNlIGZvciB0aGUgcmVjZWl2ZSBvcGVyYXRpb24uIEl0IHRha2VzIG5vCithcmd1bWVudHMsIGJ1dCBmb3IgZWFjaCByZWYgdG8gYmUgdXBkYXRlZCBpdCByZWNlaXZlcyBvbiBzdGFuZGFyZAoraW5wdXQgYSBsaW5lIG9mIHRoZSBmb3JtYXQ6CisKKyAgPG9sZC12YWx1ZT4gU1AgPG5ldy12YWx1ZT4gU1AgPHJlZi1uYW1lPiBMRgorCit3aGVyZSBgPG9sZC12YWx1ZT5gIGlzIHRoZSBvbGQgb2JqZWN0IG5hbWUgc3RvcmVkIGluIHRoZSByZWYsCitgPG5ldy12YWx1ZT5gIGlzIHRoZSBuZXcgb2JqZWN0IG5hbWUgdG8gYmUgc3RvcmVkIGluIHRoZSByZWYgYW5kCitgPHJlZi1uYW1lPmAgaXMgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgcmVmLgorV2hlbiBjcmVhdGluZyBhIG5ldyByZWYsIGA8b2xkLXZhbHVlPmAgaXMgNDAgYDBgLgorCitJZiB0aGUgaG9vayBleGl0cyB3aXRoIG5vbi16ZXJvIHN0YXR1cywgbm9uZSBvZiB0aGUgcmVmcyB3aWxsIGJlCit1cGRhdGVkLiBJZiB0aGUgaG9vayBleGl0cyB3aXRoIHplcm8sIHVwZGF0aW5nIG9mIGluZGl2aWR1YWwgcmVmcyBjYW4KK3N0aWxsIGJlIHByZXZlbnRlZCBieSB0aGUgPDx1cGRhdGUsJ3VwZGF0ZSc+PiBob29rLgorCitCb3RoIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGFyZSBmb3J3YXJkZWQgdG8KKydnaXQgc2VuZC1wYWNrJyBvbiB0aGUgb3RoZXIgZW5kLCBzbyB5b3UgY2FuIHNpbXBseSBgZWNob2AgbWVzc2FnZXMKK2ZvciB0aGUgdXNlci4KKworW1t1cGRhdGVdXQordXBkYXRlCit+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1yZWNlaXZlLXBhY2snIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwKK3doaWNoIGhhcHBlbnMgd2hlbiBhICdnaXQgcHVzaCcgaXMgZG9uZSBvbiBhIGxvY2FsIHJlcG9zaXRvcnkuCitKdXN0IGJlZm9yZSB1cGRhdGluZyB0aGUgcmVmIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwgdGhlIHVwZGF0ZSBob29rCitpcyBpbnZva2VkLiAgSXRzIGV4aXQgc3RhdHVzIGRldGVybWluZXMgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZgordGhlIHJlZiB1cGRhdGUuCisKK1RoZSBob29rIGV4ZWN1dGVzIG9uY2UgZm9yIGVhY2ggcmVmIHRvIGJlIHVwZGF0ZWQsIGFuZCB0YWtlcwordGhyZWUgcGFyYW1ldGVyczoKKworIC0gdGhlIG5hbWUgb2YgdGhlIHJlZiBiZWluZyB1cGRhdGVkLAorIC0gdGhlIG9sZCBvYmplY3QgbmFtZSBzdG9yZWQgaW4gdGhlIHJlZiwKKyAtIGFuZCB0aGUgbmV3IG9iamVjdCBuYW1lIHRvIGJlIHN0b3JlZCBpbiB0aGUgcmVmLgorCitBIHplcm8gZXhpdCBmcm9tIHRoZSB1cGRhdGUgaG9vayBhbGxvd3MgdGhlIHJlZiB0byBiZSB1cGRhdGVkLgorRXhpdGluZyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIHByZXZlbnRzICdnaXQtcmVjZWl2ZS1wYWNrJworZnJvbSB1cGRhdGluZyB0aGF0IHJlZi4KKworVGhpcyBob29rIGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgJ2ZvcmNlZCcgdXBkYXRlIG9uIGNlcnRhaW4gcmVmcyBieQorbWFraW5nIHN1cmUgdGhhdCB0aGUgb2JqZWN0IG5hbWUgaXMgYSBjb21taXQgb2JqZWN0IHRoYXQgaXMgYQorZGVzY2VuZGFudCBvZiB0aGUgY29tbWl0IG9iamVjdCBuYW1lZCBieSB0aGUgb2xkIG9iamVjdCBuYW1lLgorVGhhdCBpcywgdG8gZW5mb3JjZSBhICJmYXN0LWZvcndhcmQgb25seSIgcG9saWN5LgorCitJdCBjb3VsZCBhbHNvIGJlIHVzZWQgdG8gbG9nIHRoZSBvbGQuLm5ldyBzdGF0dXMuICBIb3dldmVyLCBpdAorZG9lcyBub3Qga25vdyB0aGUgZW50aXJlIHNldCBvZiBicmFuY2hlcywgc28gaXQgd291bGQgZW5kIHVwCitmaXJpbmcgb25lIGUtbWFpbCBwZXIgcmVmIHdoZW4gdXNlZCBuYWl2ZWx5LCB0aG91Z2guICBUaGUKKzw8cG9zdC1yZWNlaXZlLCdwb3N0LXJlY2VpdmUnPj4gaG9vayBpcyBtb3JlIHN1aXRlZCB0byB0aGF0LgorCitBbm90aGVyIHVzZSBzdWdnZXN0ZWQgb24gdGhlIG1haWxpbmcgbGlzdCBpcyB0byB1c2UgdGhpcyBob29rIHRvCitpbXBsZW1lbnQgYWNjZXNzIGNvbnRyb2wgd2hpY2ggaXMgZmluZXIgZ3JhaW5lZCB0aGFuIHRoZSBvbmUKK2Jhc2VkIG9uIGZpbGVzeXN0ZW0gZ3JvdXAuCisKK0JvdGggc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvciBvdXRwdXQgYXJlIGZvcndhcmRlZCB0bworJ2dpdCBzZW5kLXBhY2snIG9uIHRoZSBvdGhlciBlbmQsIHNvIHlvdSBjYW4gc2ltcGx5IGBlY2hvYCBtZXNzYWdlcworZm9yIHRoZSB1c2VyLgorCitUaGUgZGVmYXVsdCAndXBkYXRlJyBob29rLCB3aGVuIGVuYWJsZWQtLWFuZCB3aXRoCitgaG9va3MuYWxsb3d1bmFubm90YXRlZGAgY29uZmlnIG9wdGlvbiB1bnNldCBvciBzZXQgdG8gZmFsc2UtLXByZXZlbnRzCit1bmFubm90YXRlZCB0YWdzIHRvIGJlIHB1c2hlZC4KKworW1twb3N0LXJlY2VpdmVdXQorcG9zdC1yZWNlaXZlCit+fn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1yZWNlaXZlLXBhY2snIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwKK3doaWNoIGhhcHBlbnMgd2hlbiBhICdnaXQgcHVzaCcgaXMgZG9uZSBvbiBhIGxvY2FsIHJlcG9zaXRvcnkuCitJdCBleGVjdXRlcyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgb25jZSBhZnRlciBhbGwgdGhlIHJlZnMgaGF2ZQorYmVlbiB1cGRhdGVkLgorCitUaGlzIGhvb2sgZXhlY3V0ZXMgb25jZSBmb3IgdGhlIHJlY2VpdmUgb3BlcmF0aW9uLiAgSXQgdGFrZXMgbm8KK2FyZ3VtZW50cywgYnV0IGdldHMgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgdGhlCis8PHByZS1yZWNlaXZlLCdwcmUtcmVjZWl2ZSc+PgoraG9vayBkb2VzIG9uIGl0cyBzdGFuZGFyZCBpbnB1dC4KKworVGhpcyBob29rIGRvZXMgbm90IGFmZmVjdCB0aGUgb3V0Y29tZSBvZiAnZ2l0LXJlY2VpdmUtcGFjaycsIGFzIGl0CitpcyBjYWxsZWQgYWZ0ZXIgdGhlIHJlYWwgd29yayBpcyBkb25lLgorCitUaGlzIHN1cGVyc2VkZXMgdGhlIDw8cG9zdC11cGRhdGUsJ3Bvc3QtdXBkYXRlJz4+IGhvb2sgaW4gdGhhdCBpdCBnZXRzCitib3RoIG9sZCBhbmQgbmV3IHZhbHVlcyBvZiBhbGwgdGhlIHJlZnMgaW4gYWRkaXRpb24gdG8gdGhlaXIKK25hbWVzLgorCitCb3RoIHN0YW5kYXJkIG91dHB1dCBhbmQgc3RhbmRhcmQgZXJyb3Igb3V0cHV0IGFyZSBmb3J3YXJkZWQgdG8KKydnaXQgc2VuZC1wYWNrJyBvbiB0aGUgb3RoZXIgZW5kLCBzbyB5b3UgY2FuIHNpbXBseSBgZWNob2AgbWVzc2FnZXMKK2ZvciB0aGUgdXNlci4KKworVGhlIGRlZmF1bHQgJ3Bvc3QtcmVjZWl2ZScgaG9vayBpcyBlbXB0eSwgYnV0IHRoZXJlIGlzCithIHNhbXBsZSBzY3JpcHQgYHBvc3QtcmVjZWl2ZS1lbWFpbGAgcHJvdmlkZWQgaW4gdGhlIGBjb250cmliL2hvb2tzYAorZGlyZWN0b3J5IGluIEdpdCBkaXN0cmlidXRpb24sIHdoaWNoIGltcGxlbWVudHMgc2VuZGluZyBjb21taXQKK2VtYWlscy4KKworW1twb3N0LXVwZGF0ZV1dCitwb3N0LXVwZGF0ZQorfn5+fn5+fn5+fn4KKworVGhpcyBob29rIGlzIGludm9rZWQgYnkgJ2dpdC1yZWNlaXZlLXBhY2snIG9uIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwKK3doaWNoIGhhcHBlbnMgd2hlbiBhICdnaXQgcHVzaCcgaXMgZG9uZSBvbiBhIGxvY2FsIHJlcG9zaXRvcnkuCitJdCBleGVjdXRlcyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgb25jZSBhZnRlciBhbGwgdGhlIHJlZnMgaGF2ZQorYmVlbiB1cGRhdGVkLgorCitJdCB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBwYXJhbWV0ZXJzLCBlYWNoIG9mIHdoaWNoIGlzIHRoZQorbmFtZSBvZiByZWYgdGhhdCB3YXMgYWN0dWFsbHkgdXBkYXRlZC4KKworVGhpcyBob29rIGlzIG1lYW50IHByaW1hcmlseSBmb3Igbm90aWZpY2F0aW9uLCBhbmQgY2Fubm90IGFmZmVjdAordGhlIG91dGNvbWUgb2YgJ2dpdC1yZWNlaXZlLXBhY2snLgorCitUaGUgJ3Bvc3QtdXBkYXRlJyBob29rIGNhbiB0ZWxsIHdoYXQgYXJlIHRoZSBoZWFkcyB0aGF0IHdlcmUgcHVzaGVkLAorYnV0IGl0IGRvZXMgbm90IGtub3cgd2hhdCB0aGVpciBvcmlnaW5hbCBhbmQgdXBkYXRlZCB2YWx1ZXMgYXJlLAorc28gaXQgaXMgYSBwb29yIHBsYWNlIHRvIGRvIGxvZyBvbGQuLm5ldy4gVGhlCis8PHBvc3QtcmVjZWl2ZSwncG9zdC1yZWNlaXZlJz4+IGhvb2sgZG9lcyBnZXQgYm90aCBvcmlnaW5hbCBhbmQKK3VwZGF0ZWQgdmFsdWVzIG9mIHRoZSByZWZzLiBZb3UgbWlnaHQgY29uc2lkZXIgaXQgaW5zdGVhZCBpZiB5b3UgbmVlZAordGhlbS4KKworV2hlbiBlbmFibGVkLCB0aGUgZGVmYXVsdCAncG9zdC11cGRhdGUnIGhvb2sgcnVucworJ2dpdCB1cGRhdGUtc2VydmVyLWluZm8nIHRvIGtlZXAgdGhlIGluZm9ybWF0aW9uIHVzZWQgYnkgZHVtYgordHJhbnNwb3J0cyAoZS5nLiwgSFRUUCkgdXAtdG8tZGF0ZS4gIElmIHlvdSBhcmUgcHVibGlzaGluZworYSBHaXQgcmVwb3NpdG9yeSB0aGF0IGlzIGFjY2Vzc2libGUgdmlhIEhUVFAsIHlvdSBzaG91bGQKK3Byb2JhYmx5IGVuYWJsZSB0aGlzIGhvb2suCisKK0JvdGggc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvciBvdXRwdXQgYXJlIGZvcndhcmRlZCB0bworJ2dpdCBzZW5kLXBhY2snIG9uIHRoZSBvdGhlciBlbmQsIHNvIHlvdSBjYW4gc2ltcGx5IGBlY2hvYCBtZXNzYWdlcworZm9yIHRoZSB1c2VyLgorCitwdXNoLXRvLWNoZWNrb3V0Cit+fn5+fn5+fn5+fn5+fn5+CisKK1RoaXMgaG9vayBpcyBpbnZva2VkIGJ5ICdnaXQtcmVjZWl2ZS1wYWNrJyBvbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnksCit3aGljaCBoYXBwZW5zIHdoZW4gYSAnZ2l0IHB1c2gnIGlzIGRvbmUgb24gYSBsb2NhbCByZXBvc2l0b3J5LCB3aGVuCit0aGUgcHVzaCB0cmllcyB0byB1cGRhdGUgdGhlIGJyYW5jaCB0aGF0IGlzIGN1cnJlbnRseSBjaGVja2VkIG91dAorYW5kIHRoZSBgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBzZXQgdG8KK2B1cGRhdGVJbnN0ZWFkYC4gIFN1Y2ggYSBwdXNoIGJ5IGRlZmF1bHQgaXMgcmVmdXNlZCBpZiB0aGUgd29ya2luZwordHJlZSBhbmQgdGhlIGluZGV4IG9mIHRoZSByZW1vdGUgcmVwb3NpdG9yeSBoYXMgYW55IGRpZmZlcmVuY2UgZnJvbQordGhlIGN1cnJlbnRseSBjaGVja2VkIG91dCBjb21taXQ7IHdoZW4gYm90aCB0aGUgd29ya2luZyB0cmVlIGFuZCB0aGUKK2luZGV4IG1hdGNoIHRoZSBjdXJyZW50IGNvbW1pdCwgdGhleSBhcmUgdXBkYXRlZCB0byBtYXRjaCB0aGUgbmV3bHkKK3B1c2hlZCB0aXAgb2YgdGhlIGJyYW5jaC4gIFRoaXMgaG9vayBpcyB0byBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZQorZGVmYXVsdCBiZWhhdmlvdXIuCisKK1RoZSBob29rIHJlY2VpdmVzIHRoZSBjb21taXQgd2l0aCB3aGljaCB0aGUgdGlwIG9mIHRoZSBjdXJyZW50CiticmFuY2ggaXMgZ29pbmcgdG8gYmUgdXBkYXRlZC4gIEl0IGNhbiBleGl0IHdpdGggYSBub24temVybyBzdGF0dXMKK3RvIHJlZnVzZSB0aGUgcHVzaCAod2hlbiBpdCBkb2VzIHNvLCBpdCBtdXN0IG5vdCBtb2RpZnkgdGhlIGluZGV4IG9yCit0aGUgd29ya2luZyB0cmVlKS4gIE9yIGl0IGNhbiBtYWtlIGFueSBuZWNlc3NhcnkgY2hhbmdlcyB0byB0aGUKK3dvcmtpbmcgdHJlZSBhbmQgdG8gdGhlIGluZGV4IHRvIGJyaW5nIHRoZW0gdG8gdGhlIGRlc2lyZWQgc3RhdGUKK3doZW4gdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2ggaXMgdXBkYXRlZCB0byB0aGUgbmV3IGNvbW1pdCwgYW5kCitleGl0IHdpdGggYSB6ZXJvIHN0YXR1cy4KKworRm9yIGV4YW1wbGUsIHRoZSBob29rIGNhbiBzaW1wbHkgcnVuIGBnaXQgcmVhZC10cmVlIC11IC1tIEhFQUQgIiQxImAKK2luIG9yZGVyIHRvIGVtdWxhdGUgJ2dpdCBmZXRjaCcgdGhhdCBpcyBydW4gaW4gdGhlIHJldmVyc2UgZGlyZWN0aW9uCit3aXRoIGBnaXQgcHVzaGAsIGFzIHRoZSB0d28tdHJlZSBmb3JtIG9mIGByZWFkLXRyZWUgLXUgLW1gIGlzCitlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyBgZ2l0IGNoZWNrb3V0YCB0aGF0IHN3aXRjaGVzIGJyYW5jaGVzIHdoaWxlCitrZWVwaW5nIHRoZSBsb2NhbCBjaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCBkbyBub3QgaW50ZXJmZXJlCit3aXRoIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGJyYW5jaGVzLgorCisKK3ByZS1hdXRvLWdjCit+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSAnZ2l0IGdjIC0tYXV0bycuIEl0IHRha2VzIG5vIHBhcmFtZXRlciwgYW5kCitleGl0aW5nIHdpdGggbm9uLXplcm8gc3RhdHVzIGZyb20gdGhpcyBzY3JpcHQgY2F1c2VzIHRoZSAnZ2l0IGdjIC0tYXV0bycKK3RvIGFib3J0LgorCitwb3N0LXJld3JpdGUKK35+fn5+fn5+fn5+fgorCitUaGlzIGhvb2sgaXMgaW52b2tlZCBieSBjb21tYW5kcyB0aGF0IHJld3JpdGUgY29tbWl0cyAoYGdpdCBjb21taXQKKy0tYW1lbmRgLCAnZ2l0LXJlYmFzZSc7IGN1cnJlbnRseSAnZ2l0LWZpbHRlci1icmFuY2gnIGRvZXMgJ25vdCcgY2FsbAoraXQhKS4gIEl0cyBmaXJzdCBhcmd1bWVudCBkZW5vdGVzIHRoZSBjb21tYW5kIGl0IHdhcyBpbnZva2VkIGJ5OgorY3VycmVudGx5IG9uZSBvZiBgYW1lbmRgIG9yIGByZWJhc2VgLiAgRnVydGhlciBjb21tYW5kLWRlcGVuZGVudAorYXJndW1lbnRzIG1heSBiZSBwYXNzZWQgaW4gdGhlIGZ1dHVyZS4KKworVGhlIGhvb2sgcmVjZWl2ZXMgYSBsaXN0IG9mIHRoZSByZXdyaXR0ZW4gY29tbWl0cyBvbiBzdGRpbiwgaW4gdGhlCitmb3JtYXQKKworICA8b2xkLXNoYTE+IFNQIDxuZXctc2hhMT4gWyBTUCA8ZXh0cmEtaW5mbz4gXSBMRgorCitUaGUgJ2V4dHJhLWluZm8nIGlzIGFnYWluIGNvbW1hbmQtZGVwZW5kZW50LiAgSWYgaXQgaXMgZW1wdHksIHRoZQorcHJlY2VkaW5nIFNQIGlzIGFsc28gb21pdHRlZC4gIEN1cnJlbnRseSwgbm8gY29tbWFuZHMgcGFzcyBhbnkKKydleHRyYS1pbmZvJy4KKworVGhlIGhvb2sgYWx3YXlzIHJ1bnMgYWZ0ZXIgdGhlIGF1dG9tYXRpYyBub3RlIGNvcHlpbmcgKHNlZQorIm5vdGVzLnJld3JpdGUuPGNvbW1hbmQ+IiBpbiBsaW5rZ2l0OmdpdC1jb25maWcudHh0WzFdKSBoYXMgaGFwcGVuZWQsIGFuZAordGh1cyBoYXMgYWNjZXNzIHRvIHRoZXNlIG5vdGVzLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmQtc3BlY2lmaWMgY29tbWVudHMgYXBwbHk6CisKK3JlYmFzZTo6CisJRm9yIHRoZSAnc3F1YXNoJyBhbmQgJ2ZpeHVwJyBvcGVyYXRpb24sIGFsbCBjb21taXRzIHRoYXQgd2VyZQorCXNxdWFzaGVkIGFyZSBsaXN0ZWQgYXMgYmVpbmcgcmV3cml0dGVuIHRvIHRoZSBzcXVhc2hlZCBjb21taXQuCisJVGhpcyBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgc2V2ZXJhbCBsaW5lcyBzaGFyaW5nIHRoZSBzYW1lCisJJ25ldy1zaGExJy4KKysKK1RoZSBjb21taXRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGxpc3RlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHdlcmUKK3Byb2Nlc3NlZCBieSByZWJhc2UuCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdGlnbm9yZS50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdGlnbm9yZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhMTk0OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0aWdub3JlLnR4dApAQCAtMCwwICsxLDIyMyBAQAorZ2l0aWdub3JlKDUpCis9PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0aWdub3JlIC0gU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZQorCitTWU5PUFNJUworLS0tLS0tLS0KKyRIT01FLy5jb25maWcvZ2l0L2lnbm9yZSwgJEdJVF9ESVIvaW5mby9leGNsdWRlLCAuZ2l0aWdub3JlCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitBIGBnaXRpZ25vcmVgIGZpbGUgc3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRoYXQKK0dpdCBzaG91bGQgaWdub3JlLgorRmlsZXMgYWxyZWFkeSB0cmFja2VkIGJ5IEdpdCBhcmUgbm90IGFmZmVjdGVkOyBzZWUgdGhlIE5PVEVTCitiZWxvdyBmb3IgZGV0YWlscy4KKworRWFjaCBsaW5lIGluIGEgYGdpdGlnbm9yZWAgZmlsZSBzcGVjaWZpZXMgYSBwYXR0ZXJuLgorV2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIGlnbm9yZSBhIHBhdGgsIEdpdCBub3JtYWxseSBjaGVja3MKK2BnaXRpZ25vcmVgIHBhdHRlcm5zIGZyb20gbXVsdGlwbGUgc291cmNlcywgd2l0aCB0aGUgZm9sbG93aW5nCitvcmRlciBvZiBwcmVjZWRlbmNlLCBmcm9tIGhpZ2hlc3QgdG8gbG93ZXN0ICh3aXRoaW4gb25lIGxldmVsIG9mCitwcmVjZWRlbmNlLCB0aGUgbGFzdCBtYXRjaGluZyBwYXR0ZXJuIGRlY2lkZXMgdGhlIG91dGNvbWUpOgorCisgKiBQYXR0ZXJucyByZWFkIGZyb20gdGhlIGNvbW1hbmQgbGluZSBmb3IgdGhvc2UgY29tbWFuZHMgdGhhdCBzdXBwb3J0CisgICB0aGVtLgorCisgKiBQYXR0ZXJucyByZWFkIGZyb20gYSBgLmdpdGlnbm9yZWAgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyAgIGFzIHRoZSBwYXRoLCBvciBpbiBhbnkgcGFyZW50IGRpcmVjdG9yeSwgd2l0aCBwYXR0ZXJucyBpbiB0aGUKKyAgIGhpZ2hlciBsZXZlbCBmaWxlcyAodXAgdG8gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JrIHRyZWUpIGJlaW5nIG92ZXJyaWRkZW4KKyAgIGJ5IHRob3NlIGluIGxvd2VyIGxldmVsIGZpbGVzIGRvd24gdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBmaWxlLgorICAgVGhlc2UgcGF0dGVybnMgbWF0Y2ggcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZQorICAgYC5naXRpZ25vcmVgIGZpbGUuICBBIHByb2plY3Qgbm9ybWFsbHkgaW5jbHVkZXMgc3VjaAorICAgYC5naXRpZ25vcmVgIGZpbGVzIGluIGl0cyByZXBvc2l0b3J5LCBjb250YWluaW5nIHBhdHRlcm5zIGZvcgorICAgZmlsZXMgZ2VuZXJhdGVkIGFzIHBhcnQgb2YgdGhlIHByb2plY3QgYnVpbGQuCisKKyAqIFBhdHRlcm5zIHJlYWQgZnJvbSBgJEdJVF9ESVIvaW5mby9leGNsdWRlYC4KKworICogUGF0dGVybnMgcmVhZCBmcm9tIHRoZSBmaWxlIHNwZWNpZmllZCBieSB0aGUgY29uZmlndXJhdGlvbgorICAgdmFyaWFibGUgJ2NvcmUuZXhjbHVkZXNGaWxlJy4KKworV2hpY2ggZmlsZSB0byBwbGFjZSBhIHBhdHRlcm4gaW4gZGVwZW5kcyBvbiBob3cgdGhlIHBhdHRlcm4gaXMgbWVhbnQgdG8KK2JlIHVzZWQuCisKKyAqIFBhdHRlcm5zIHdoaWNoIHNob3VsZCBiZSB2ZXJzaW9uLWNvbnRyb2xsZWQgYW5kIGRpc3RyaWJ1dGVkIHRvCisgICBvdGhlciByZXBvc2l0b3JpZXMgdmlhIGNsb25lIChpLmUuLCBmaWxlcyB0aGF0IGFsbCBkZXZlbG9wZXJzIHdpbGwgd2FudAorICAgdG8gaWdub3JlKSBzaG91bGQgZ28gaW50byBhIGAuZ2l0aWdub3JlYCBmaWxlLgorCisgKiBQYXR0ZXJucyB3aGljaCBhcmUKKyAgIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciByZXBvc2l0b3J5IGJ1dCB3aGljaCBkbyBub3QgbmVlZCB0byBiZSBzaGFyZWQKKyAgIHdpdGggb3RoZXIgcmVsYXRlZCByZXBvc2l0b3JpZXMgKGUuZy4sIGF1eGlsaWFyeSBmaWxlcyB0aGF0IGxpdmUgaW5zaWRlCisgICB0aGUgcmVwb3NpdG9yeSBidXQgYXJlIHNwZWNpZmljIHRvIG9uZSB1c2VyJ3Mgd29ya2Zsb3cpIHNob3VsZCBnbyBpbnRvCisgICB0aGUgYCRHSVRfRElSL2luZm8vZXhjbHVkZWAgZmlsZS4KKworICogUGF0dGVybnMgd2hpY2ggYSB1c2VyIHdhbnRzIEdpdCB0bworICAgaWdub3JlIGluIGFsbCBzaXR1YXRpb25zIChlLmcuLCBiYWNrdXAgb3IgdGVtcG9yYXJ5IGZpbGVzIGdlbmVyYXRlZCBieQorICAgdGhlIHVzZXIncyBlZGl0b3Igb2YgY2hvaWNlKSBnZW5lcmFsbHkgZ28gaW50byBhIGZpbGUgc3BlY2lmaWVkIGJ5CisgICBgY29yZS5leGNsdWRlc0ZpbGVgIGluIHRoZSB1c2VyJ3MgYH4vLmdpdGNvbmZpZ2AuIEl0cyBkZWZhdWx0IHZhbHVlIGlzCisgICAkWERHX0NPTkZJR19IT01FL2dpdC9pZ25vcmUuIElmICRYREdfQ09ORklHX0hPTUUgaXMgZWl0aGVyIG5vdCBzZXQgb3IKKyAgIGVtcHR5LCAkSE9NRS8uY29uZmlnL2dpdC9pZ25vcmUgaXMgdXNlZCBpbnN0ZWFkLgorCitUaGUgdW5kZXJseWluZyBHaXQgcGx1bWJpbmcgdG9vbHMsIHN1Y2ggYXMKKydnaXQgbHMtZmlsZXMnIGFuZCAnZ2l0IHJlYWQtdHJlZScsIHJlYWQKK2BnaXRpZ25vcmVgIHBhdHRlcm5zIHNwZWNpZmllZCBieSBjb21tYW5kLWxpbmUgb3B0aW9ucywgb3IgZnJvbQorZmlsZXMgc3BlY2lmaWVkIGJ5IGNvbW1hbmQtbGluZSBvcHRpb25zLiAgSGlnaGVyLWxldmVsIEdpdAordG9vbHMsIHN1Y2ggYXMgJ2dpdCBzdGF0dXMnIGFuZCAnZ2l0IGFkZCcsCit1c2UgcGF0dGVybnMgZnJvbSB0aGUgc291cmNlcyBzcGVjaWZpZWQgYWJvdmUuCisKK1BBVFRFUk4gRk9STUFUCistLS0tLS0tLS0tLS0tLQorCisgLSBBIGJsYW5rIGxpbmUgbWF0Y2hlcyBubyBmaWxlcywgc28gaXQgY2FuIHNlcnZlIGFzIGEgc2VwYXJhdG9yCisgICBmb3IgcmVhZGFiaWxpdHkuCisKKyAtIEEgbGluZSBzdGFydGluZyB3aXRoICMgc2VydmVzIGFzIGEgY29tbWVudC4KKyAgIFB1dCBhIGJhY2tzbGFzaCAoImBcYCIpIGluIGZyb250IG9mIHRoZSBmaXJzdCBoYXNoIGZvciBwYXR0ZXJucworICAgdGhhdCBiZWdpbiB3aXRoIGEgaGFzaC4KKworIC0gVHJhaWxpbmcgc3BhY2VzIGFyZSBpZ25vcmVkIHVubGVzcyB0aGV5IGFyZSBxdW90ZWQgd2l0aCBiYWNrc2xhc2gKKyAgICgiYFxgIikuCisKKyAtIEFuIG9wdGlvbmFsIHByZWZpeCAiYCFgIiB3aGljaCBuZWdhdGVzIHRoZSBwYXR0ZXJuOyBhbnkKKyAgIG1hdGNoaW5nIGZpbGUgZXhjbHVkZWQgYnkgYSBwcmV2aW91cyBwYXR0ZXJuIHdpbGwgYmVjb21lCisgICBpbmNsdWRlZCBhZ2Fpbi4KKyAgIFB1dCBhIGJhY2tzbGFzaCAoImBcYCIpIGluIGZyb250IG9mIHRoZSBmaXJzdCAiYCFgIiBmb3IgcGF0dGVybnMKKyAgIHRoYXQgYmVnaW4gd2l0aCBhIGxpdGVyYWwgImAhYCIsIGZvciBleGFtcGxlLCAiYFwhaW1wb3J0YW50IS50eHRgIi4KKyAgIEl0IGlzIHBvc3NpYmxlIHRvIHJlLWluY2x1ZGUgYSBmaWxlIGlmIGEgcGFyZW50IGRpcmVjdG9yeSBvZiB0aGF0CisgICBmaWxlIGlzIGV4Y2x1ZGVkIGlmIGNlcnRhaW4gY29uZGl0aW9ucyBhcmUgbWV0LiBTZWUgc2VjdGlvbiBOT1RFUworICAgZm9yIGRldGFpbC4KKworIC0gSWYgdGhlIHBhdHRlcm4gZW5kcyB3aXRoIGEgc2xhc2gsIGl0IGlzIHJlbW92ZWQgZm9yIHRoZQorICAgcHVycG9zZSBvZiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uLCBidXQgaXQgd291bGQgb25seSBmaW5kCisgICBhIG1hdGNoIHdpdGggYSBkaXJlY3RvcnkuICBJbiBvdGhlciB3b3JkcywgYGZvby9gIHdpbGwgbWF0Y2ggYQorICAgZGlyZWN0b3J5IGBmb29gIGFuZCBwYXRocyB1bmRlcm5lYXRoIGl0LCBidXQgd2lsbCBub3QgbWF0Y2ggYQorICAgcmVndWxhciBmaWxlIG9yIGEgc3ltYm9saWMgbGluayBgZm9vYCAodGhpcyBpcyBjb25zaXN0ZW50CisgICB3aXRoIHRoZSB3YXkgaG93IHBhdGhzcGVjIHdvcmtzIGluIGdlbmVyYWwgaW4gR2l0KS4KKworIC0gSWYgdGhlIHBhdHRlcm4gZG9lcyBub3QgY29udGFpbiBhIHNsYXNoICcvJywgR2l0IHRyZWF0cyBpdCBhcworICAgYSBzaGVsbCBnbG9iIHBhdHRlcm4gYW5kIGNoZWNrcyBmb3IgYSBtYXRjaCBhZ2FpbnN0IHRoZQorICAgcGF0aG5hbWUgcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mIHRoZSBgLmdpdGlnbm9yZWAgZmlsZQorICAgKHJlbGF0aXZlIHRvIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29yayB0cmVlIGlmIG5vdCBmcm9tIGEKKyAgIGAuZ2l0aWdub3JlYCBmaWxlKS4KKworIC0gT3RoZXJ3aXNlLCBHaXQgdHJlYXRzIHRoZSBwYXR0ZXJuIGFzIGEgc2hlbGwgZ2xvYiBzdWl0YWJsZQorICAgZm9yIGNvbnN1bXB0aW9uIGJ5IGZubWF0Y2goMykgd2l0aCB0aGUgRk5NX1BBVEhOQU1FIGZsYWc6CisgICB3aWxkY2FyZHMgaW4gdGhlIHBhdHRlcm4gd2lsbCBub3QgbWF0Y2ggYSAvIGluIHRoZSBwYXRobmFtZS4KKyAgIEZvciBleGFtcGxlLCAiRG9jdW1lbnRhdGlvbi97YXN0ZXJpc2t9Lmh0bWwiIG1hdGNoZXMKKyAgICJEb2N1bWVudGF0aW9uL2dpdC5odG1sIiBidXQgbm90ICJEb2N1bWVudGF0aW9uL3BwYy9wcGMuaHRtbCIKKyAgIG9yICJ0b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi5odG1sIi4KKworIC0gQSBsZWFkaW5nIHNsYXNoIG1hdGNoZXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aG5hbWUuCisgICBGb3IgZXhhbXBsZSwgIi97YXN0ZXJpc2t9LmMiIG1hdGNoZXMgImNhdC1maWxlLmMiIGJ1dCBub3QKKyAgICJtb3ppbGxhLXNoYTEvc2hhMS5jIi4KKworVHdvIGNvbnNlY3V0aXZlIGFzdGVyaXNrcyAoImAqKmAiKSBpbiBwYXR0ZXJucyBtYXRjaGVkIGFnYWluc3QKK2Z1bGwgcGF0aG5hbWUgbWF5IGhhdmUgc3BlY2lhbCBtZWFuaW5nOgorCisgLSBBIGxlYWRpbmcgImAqKmAiIGZvbGxvd2VkIGJ5IGEgc2xhc2ggbWVhbnMgbWF0Y2ggaW4gYWxsCisgICBkaXJlY3Rvcmllcy4gRm9yIGV4YW1wbGUsICJgKiovZm9vYCIgbWF0Y2hlcyBmaWxlIG9yIGRpcmVjdG9yeQorICAgImBmb29gIiBhbnl3aGVyZSwgdGhlIHNhbWUgYXMgcGF0dGVybiAiYGZvb2AiLiAiYCoqL2Zvby9iYXJgIgorICAgbWF0Y2hlcyBmaWxlIG9yIGRpcmVjdG9yeSAiYGJhcmAiIGFueXdoZXJlIHRoYXQgaXMgZGlyZWN0bHkKKyAgIHVuZGVyIGRpcmVjdG9yeSAiYGZvb2AiLgorCisgLSBBIHRyYWlsaW5nICJgLyoqYCIgbWF0Y2hlcyBldmVyeXRoaW5nIGluc2lkZS4gRm9yIGV4YW1wbGUsCisgICAiYGFiYy8qKmAiIG1hdGNoZXMgYWxsIGZpbGVzIGluc2lkZSBkaXJlY3RvcnkgImBhYmNgIiwgcmVsYXRpdmUKKyAgIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgYC5naXRpZ25vcmVgIGZpbGUsIHdpdGggaW5maW5pdGUgZGVwdGguCisKKyAtIEEgc2xhc2ggZm9sbG93ZWQgYnkgdHdvIGNvbnNlY3V0aXZlIGFzdGVyaXNrcyB0aGVuIGEgc2xhc2gKKyAgIG1hdGNoZXMgemVybyBvciBtb3JlIGRpcmVjdG9yaWVzLiBGb3IgZXhhbXBsZSwgImBhLyoqL2JgIgorICAgbWF0Y2hlcyAiYGEvYmAiLCAiYGEveC9iYCIsICJgYS94L3kvYmAiIGFuZCBzbyBvbi4KKworIC0gT3RoZXIgY29uc2VjdXRpdmUgYXN0ZXJpc2tzIGFyZSBjb25zaWRlcmVkIGludmFsaWQuCisKK05PVEVTCistLS0tLQorCitUaGUgcHVycG9zZSBvZiBnaXRpZ25vcmUgZmlsZXMgaXMgdG8gZW5zdXJlIHRoYXQgY2VydGFpbiBmaWxlcworbm90IHRyYWNrZWQgYnkgR2l0IHJlbWFpbiB1bnRyYWNrZWQuCisKK1RvIHN0b3AgdHJhY2tpbmcgYSBmaWxlIHRoYXQgaXMgY3VycmVudGx5IHRyYWNrZWQsIHVzZQorJ2dpdCBybSAtLWNhY2hlZCcuCisKK1RvIHJlLWluY2x1ZGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMgd2hlbiB0aGVpciBwYXJlbnQgZGlyZWN0b3J5IGlzCitleGNsdWRlZCwgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3QgYmUgbWV0OgorCisgLSBUaGUgcnVsZXMgdG8gZXhjbHVkZSBhIGRpcmVjdG9yeSBhbmQgcmUtaW5jbHVkZSBhIHN1YnNldCBiYWNrIG11c3QKKyAgIGJlIGluIHRoZSBzYW1lIC5naXRpZ25vcmUgZmlsZS4KKworIC0gVGhlIGRpcmVjdG9yeSBwYXJ0IGluIHRoZSByZS1pbmNsdWRlIHJ1bGVzIG11c3QgYmUgbGl0ZXJhbCAoaS5lLiBubworICAgd2lsZGNhcmRzKQorCisgLSBUaGUgcnVsZXMgdG8gZXhjbHVkZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBtdXN0IG5vdCBlbmQgd2l0aCBhCisgICB0cmFpbGluZyBzbGFzaC4KKworIC0gVGhlIHJ1bGVzIHRvIGV4Y2x1ZGUgdGhlIHBhcmVudCBkaXJlY3RvcnkgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZQorICAgc2xhc2guCisKK0VYQU1QTEVTCistLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICQgZ2l0IHN0YXR1cworICAgIFsuLi5dCisgICAgIyBVbnRyYWNrZWQgZmlsZXM6CisgICAgWy4uLl0KKyAgICAjICAgICAgIERvY3VtZW50YXRpb24vZm9vLmh0bWwKKyAgICAjICAgICAgIERvY3VtZW50YXRpb24vZ2l0aWdub3JlLmh0bWwKKyAgICAjICAgICAgIGZpbGUubworICAgICMgICAgICAgbGliLmEKKyAgICAjICAgICAgIHNyYy9pbnRlcm5hbC5vCisgICAgWy4uLl0KKyAgICAkIGNhdCAuZ2l0L2luZm8vZXhjbHVkZQorICAgICMgaWdub3JlIG9iamVjdHMgYW5kIGFyY2hpdmVzLCBhbnl3aGVyZSBpbiB0aGUgdHJlZS4KKyAgICAqLltvYV0KKyAgICAkIGNhdCBEb2N1bWVudGF0aW9uLy5naXRpZ25vcmUKKyAgICAjIGlnbm9yZSBnZW5lcmF0ZWQgaHRtbCBmaWxlcywKKyAgICAqLmh0bWwKKyAgICAjIGV4Y2VwdCBmb28uaHRtbCB3aGljaCBpcyBtYWludGFpbmVkIGJ5IGhhbmQKKyAgICAhZm9vLmh0bWwKKyAgICAkIGdpdCBzdGF0dXMKKyAgICBbLi4uXQorICAgICMgVW50cmFja2VkIGZpbGVzOgorICAgIFsuLi5dCisgICAgIyAgICAgICBEb2N1bWVudGF0aW9uL2Zvby5odG1sCisgICAgWy4uLl0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Fub3RoZXIgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAkIGNhdCAuZ2l0aWdub3JlCisgICAgdm1saW51eCoKKyAgICAkIGxzIGFyY2gvZm9vL2tlcm5lbC92bSoKKyAgICBhcmNoL2Zvby9rZXJuZWwvdm1saW51eC5sZHMuUworICAgICQgZWNobyAnIS92bWxpbnV4KicgPmFyY2gvZm9vL2tlcm5lbC8uZ2l0aWdub3JlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgc2Vjb25kIC5naXRpZ25vcmUgcHJldmVudHMgR2l0IGZyb20gaWdub3JpbmcKK2BhcmNoL2Zvby9rZXJuZWwvdm1saW51eC5sZHMuU2AuCisKK0V4YW1wbGUgdG8gZXhjbHVkZSBldmVyeXRoaW5nIGV4Y2VwdCBhIHNwZWNpZmljIGRpcmVjdG9yeSBgZm9vL2JhcmAKKyhub3RlIHRoZSBgLypgIC0gd2l0aG91dCB0aGUgc2xhc2gsIHRoZSB3aWxkY2FyZCB3b3VsZCBhbHNvIGV4Y2x1ZGUKK2V2ZXJ5dGhpbmcgd2l0aGluIGBmb28vYmFyYCk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgJCBjYXQgLmdpdGlnbm9yZQorICAgICMgZXhjbHVkZSBldmVyeXRoaW5nIGV4Y2VwdCBkaXJlY3RvcnkgZm9vL2JhcgorICAgIC8qCisgICAgIS9mb28KKyAgICAvZm9vLyoKKyAgICAhL2Zvby9iYXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcm1bMV0sCitsaW5rZ2l0OmdpdHJlcG9zaXRvcnktbGF5b3V0WzVdLAorbGlua2dpdDpnaXQtY2hlY2staWdub3JlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRrLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0ay50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkZTAwMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0ay50eHQKQEAgLTAsMCArMSwyMDAgQEAKK2dpdGsoMSkKKz09PT09PT0KKworTkFNRQorLS0tLQorZ2l0ayAtIFRoZSBHaXQgcmVwb3NpdG9yeSBicm93c2VyCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdGsnIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24gcmFuZ2U+XSBbXC0tXSBbPHBhdGg+Li4uXQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0Rpc3BsYXlzIGNoYW5nZXMgaW4gYSByZXBvc2l0b3J5IG9yIGEgc2VsZWN0ZWQgc2V0IG9mIGNvbW1pdHMuIFRoaXMgaW5jbHVkZXMKK3Zpc3VhbGl6aW5nIHRoZSBjb21taXQgZ3JhcGgsIHNob3dpbmcgaW5mb3JtYXRpb24gcmVsYXRlZCB0byBlYWNoIGNvbW1pdCwgYW5kCit0aGUgZmlsZXMgaW4gdGhlIHRyZWVzIG9mIGVhY2ggcmV2aXNpb24uCisKK09QVElPTlMKKy0tLS0tLS0KKworVG8gY29udHJvbCB3aGljaCByZXZpc2lvbnMgdG8gc2hvdywgZ2l0ayBzdXBwb3J0cyBtb3N0IG9wdGlvbnMKK2FwcGxpY2FibGUgdG8gdGhlICdnaXQgcmV2LWxpc3QnIGNvbW1hbmQuICBJdCBhbHNvIHN1cHBvcnRzIGEgZmV3CitvcHRpb25zIGFwcGxpY2FibGUgdG8gdGhlICdnaXQgZGlmZi0qJyBjb21tYW5kcyB0byBjb250cm9sIGhvdyB0aGUKK2NoYW5nZXMgZWFjaCBjb21taXQgaW50cm9kdWNlcyBhcmUgc2hvd24uICBGaW5hbGx5LCBpdCBzdXBwb3J0cyBzb21lCitnaXRrLXNwZWNpZmljIG9wdGlvbnMuCisKK2dpdGsgZ2VuZXJhbGx5IG9ubHkgdW5kZXJzdGFuZHMgb3B0aW9ucyB3aXRoIGFyZ3VtZW50cyBpbiB0aGUKKydzdGlja2VkJyBmb3JtIChzZWUgbGlua2dpdDpnaXRjbGlbN10pIGR1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUKK2NvbW1hbmQtbGluZSBwYXJzZXIuCisKK3Jldi1saXN0IG9wdGlvbnMgYW5kIGFyZ3VtZW50cworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoaXMgbWFudWFsIHBhZ2UgZGVzY3JpYmVzIG9ubHkgdGhlIG1vc3QgZnJlcXVlbnRseSB1c2VkIG9wdGlvbnMuICBTZWUKK2xpbmtnaXQ6Z2l0LXJldi1saXN0WzFdIGZvciBhIGNvbXBsZXRlIGxpc3QuCisKKy0tYWxsOjoKKworCVNob3cgYWxsIHJlZnMgKGJyYW5jaGVzLCB0YWdzLCBldGMuKS4KKworLS1icmFuY2hlc1s9PHBhdHRlcm4+XTo6CistLXRhZ3NbPTxwYXR0ZXJuPl06OgorLS1yZW1vdGVzWz08cGF0dGVybj5dOjoKKworCVByZXRlbmQgYXMgaWYgYWxsIHRoZSBicmFuY2hlcyAodGFncywgcmVtb3RlIGJyYW5jaGVzLCByZXNwLikKKwlhcmUgbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4gSWYgJzxwYXR0ZXJuPicKKwlpcyBnaXZlbiwgbGltaXQgcmVmcyB0byBvbmVzIG1hdGNoaW5nIGdpdmVuIHNoZWxsIGdsb2IuIElmCisJcGF0dGVybiBsYWNrcyAnPycsICd7YXN0ZXJpc2t9Jywgb3IgJ1snLCAnL3thc3Rlcmlza30nIGF0IHRoZQorCWVuZCBpcyBpbXBsaWVkLgorCistLXNpbmNlPTxkYXRlPjo6CisKKwlTaG93IGNvbW1pdHMgbW9yZSByZWNlbnQgdGhhbiBhIHNwZWNpZmljIGRhdGUuCisKKy0tdW50aWw9PGRhdGU+OjoKKworCVNob3cgY29tbWl0cyBvbGRlciB0aGFuIGEgc3BlY2lmaWMgZGF0ZS4KKworLS1kYXRlLW9yZGVyOjoKKworCVNvcnQgY29tbWl0cyBieSBkYXRlIHdoZW4gcG9zc2libGUuCisKKy0tbWVyZ2U6OgorCisJQWZ0ZXIgYW4gYXR0ZW1wdCB0byBtZXJnZSBzdG9wcyB3aXRoIGNvbmZsaWN0cywgc2hvdyB0aGUgY29tbWl0cyBvbgorCXRoZSBoaXN0b3J5IGJldHdlZW4gdHdvIGJyYW5jaGVzIChpLmUuIHRoZSBIRUFEIGFuZCB0aGUgTUVSR0VfSEVBRCkKKwl0aGF0IG1vZGlmeSB0aGUgY29uZmxpY3RlZCBmaWxlcyBhbmQgZG8gbm90IGV4aXN0IG9uIGFsbCB0aGUgaGVhZHMKKwliZWluZyBtZXJnZWQuCisKKy0tbGVmdC1yaWdodDo6CisKKwlNYXJrIHdoaWNoIHNpZGUgb2YgYSBzeW1tZXRyaWMgZGlmZiBhIGNvbW1pdCBpcyByZWFjaGFibGUKKwlmcm9tLiAgQ29tbWl0cyBmcm9tIHRoZSBsZWZ0IHNpZGUgYXJlIHByZWZpeGVkIHdpdGggYSBgPGAKKwlzeW1ib2wgYW5kIHRob3NlIGZyb20gdGhlIHJpZ2h0IHdpdGggYSBgPmAgc3ltYm9sLgorCistLWZ1bGwtaGlzdG9yeTo6CisKKwlXaGVuIGZpbHRlcmluZyBoaXN0b3J5IHdpdGggJzxwYXRoPi4uLicsIGRvZXMgbm90IHBydW5lIHNvbWUKKwloaXN0b3J5LiAgKFNlZSAiSGlzdG9yeSBzaW1wbGlmaWNhdGlvbiIgaW4gbGlua2dpdDpnaXQtbG9nWzFdCisJZm9yIGEgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbi4pCisKKy0tc2ltcGxpZnktbWVyZ2VzOjoKKworCUFkZGl0aW9uYWwgb3B0aW9uIHRvICctLWZ1bGwtaGlzdG9yeScgdG8gcmVtb3ZlIHNvbWUgbmVlZGxlc3MKKwltZXJnZXMgZnJvbSB0aGUgcmVzdWx0aW5nIGhpc3RvcnksIGFzIHRoZXJlIGFyZSBubyBzZWxlY3RlZAorCWNvbW1pdHMgY29udHJpYnV0aW5nIHRvIHRoaXMgbWVyZ2UuICAoU2VlICJIaXN0b3J5CisJc2ltcGxpZmljYXRpb24iIGluIGxpbmtnaXQ6Z2l0LWxvZ1sxXSBmb3IgYSBtb3JlIGRldGFpbGVkCisJZXhwbGFuYXRpb24uKQorCistLWFuY2VzdHJ5LXBhdGg6OgorCisJV2hlbiBnaXZlbiBhIHJhbmdlIG9mIGNvbW1pdHMgdG8gZGlzcGxheQorCShlLmcuICdjb21taXQxLi5jb21taXQyJyBvciAnY29tbWl0MiB7Y2FyZXR9Y29tbWl0MScpLCBvbmx5CisJZGlzcGxheSBjb21taXRzIHRoYXQgZXhpc3QgZGlyZWN0bHkgb24gdGhlIGFuY2VzdHJ5IGNoYWluCisJYmV0d2VlbiB0aGUgJ2NvbW1pdDEnIGFuZCAnY29tbWl0MicsIGkuZS4gY29tbWl0cyB0aGF0IGFyZQorCWJvdGggZGVzY2VuZGFudHMgb2YgJ2NvbW1pdDEnLCBhbmQgYW5jZXN0b3JzIG9mICdjb21taXQyJy4KKwkoU2VlICJIaXN0b3J5IHNpbXBsaWZpY2F0aW9uIiBpbiBsaW5rZ2l0OmdpdC1sb2dbMV0gZm9yIGEgbW9yZQorCWRldGFpbGVkIGV4cGxhbmF0aW9uLikKKworLUw8c3RhcnQ+LDxlbmQ+OjxmaWxlPjo6CistTDo8ZnVuY25hbWU+OjxmaWxlPjo6CisKKwlUcmFjZSB0aGUgZXZvbHV0aW9uIG9mIHRoZSBsaW5lIHJhbmdlIGdpdmVuIGJ5ICI8c3RhcnQ+LDxlbmQ+IgorCShvciB0aGUgZnVuY3Rpb24gbmFtZSByZWdleCA8ZnVuY25hbWU+KSB3aXRoaW4gdGhlIDxmaWxlPi4gIFlvdSBtYXkKKwlub3QgZ2l2ZSBhbnkgcGF0aHNwZWMgbGltaXRlcnMuICBUaGlzIGlzIGN1cnJlbnRseSBsaW1pdGVkIHRvCisJYSB3YWxrIHN0YXJ0aW5nIGZyb20gYSBzaW5nbGUgcmV2aXNpb24sIGkuZS4sIHlvdSBtYXkgb25seQorCWdpdmUgemVybyBvciBvbmUgcG9zaXRpdmUgcmV2aXNpb24gYXJndW1lbnRzLgorCVlvdSBjYW4gc3BlY2lmeSB0aGlzIG9wdGlvbiBtb3JlIHRoYW4gb25jZS4KKysKKypOb3RlOiogZ2l0ayAodW5saWtlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSkgY3VycmVudGx5IG9ubHkgdW5kZXJzdGFuZHMKK3RoaXMgb3B0aW9uIGlmIHlvdSBzcGVjaWZ5IGl0ICJnbHVlZCB0b2dldGhlciIgd2l0aCBpdHMgYXJndW1lbnQuICBEbworKm5vdCogcHV0IGEgc3BhY2UgYWZ0ZXIgYC1MYC4KKysKK2luY2x1ZGU6OmxpbmUtcmFuZ2UtZm9ybWF0LnR4dFtdCisKKzxyZXZpc2lvbiByYW5nZT46OgorCisJTGltaXQgdGhlIHJldmlzaW9ucyB0byBzaG93LiBUaGlzIGNhbiBiZSBlaXRoZXIgYSBzaW5nbGUgcmV2aXNpb24KKwltZWFuaW5nIHNob3cgZnJvbSB0aGUgZ2l2ZW4gcmV2aXNpb24gYW5kIGJhY2ssIG9yIGl0IGNhbiBiZSBhIHJhbmdlIGluCisJdGhlIGZvcm0gIic8ZnJvbT4nLi4nPHRvPiciIHRvIHNob3cgYWxsIHJldmlzaW9ucyBiZXR3ZWVuICc8ZnJvbT4nIGFuZAorCWJhY2sgdG8gJzx0bz4nLiBOb3RlLCBtb3JlIGFkdmFuY2VkIHJldmlzaW9uIHNlbGVjdGlvbiBjYW4gYmUgYXBwbGllZC4KKwlGb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2Ygd2F5cyB0byBzcGVsbCBvYmplY3QgbmFtZXMsIHNlZQorCWxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddLgorCis8cGF0aD4uLi46OgorCisJTGltaXQgY29tbWl0cyB0byB0aGUgb25lcyB0b3VjaGluZyBmaWxlcyBpbiB0aGUgZ2l2ZW4gcGF0aHMuIE5vdGUsIHRvCisJYXZvaWQgYW1iaWd1aXR5IHdpdGggcmVzcGVjdCB0byByZXZpc2lvbiBuYW1lcyB1c2UgIi0tIiB0byBzZXBhcmF0ZSB0aGUgcGF0aHMKKwlmcm9tIGFueSBwcmVjZWRpbmcgb3B0aW9ucy4KKworZ2l0ay1zcGVjaWZpYyBvcHRpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLS1hcmdzY21kPTxjb21tYW5kPjo6CisKKwlDb21tYW5kIHRvIGJlIHJ1biBlYWNoIHRpbWUgZ2l0ayBoYXMgdG8gZGV0ZXJtaW5lIHRoZSByZXZpc2lvbgorCXJhbmdlIHRvIHNob3cuICBUaGUgY29tbWFuZCBpcyBleHBlY3RlZCB0byBwcmludCBvbiBpdHMKKwlzdGFuZGFyZCBvdXRwdXQgYSBsaXN0IG9mIGFkZGl0aW9uYWwgcmV2aXNpb25zIHRvIGJlIHNob3duLAorCW9uZSBwZXIgbGluZS4gIFVzZSB0aGlzIGluc3RlYWQgb2YgZXhwbGljaXRseSBzcGVjaWZ5aW5nIGEKKwknPHJldmlzaW9uIHJhbmdlPicgaWYgdGhlIHNldCBvZiBjb21taXRzIHRvIHNob3cgbWF5IHZhcnkKKwliZXR3ZWVuIHJlZnJlc2hlcy4KKworLS1zZWxlY3QtY29tbWl0PTxyZWY+OjoKKworCVNlbGVjdCB0aGUgc3BlY2lmaWVkIGNvbW1pdCBhZnRlciBsb2FkaW5nIHRoZSBncmFwaC4KKwlEZWZhdWx0IGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyAnLS1zZWxlY3QtY29tbWl0PUhFQUQnLgorCitFeGFtcGxlcworLS0tLS0tLS0KK2dpdGsgdjIuNi4xMi4uIGluY2x1ZGUvc2NzaSBkcml2ZXJzL3Njc2k6OgorCisJU2hvdyB0aGUgY2hhbmdlcyBzaW5jZSB2ZXJzaW9uICd2Mi42LjEyJyB0aGF0IGNoYW5nZWQgYW55CisJZmlsZSBpbiB0aGUgaW5jbHVkZS9zY3NpIG9yIGRyaXZlcnMvc2NzaSBzdWJkaXJlY3RvcmllcworCitnaXRrIC0tc2luY2U9IjIgd2Vla3MgYWdvIiBcLS0gZ2l0azo6CisKKwlTaG93IHRoZSBjaGFuZ2VzIGR1cmluZyB0aGUgbGFzdCB0d28gd2Vla3MgdG8gdGhlIGZpbGUgJ2dpdGsnLgorCVRoZSAiLS0iIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBjb25mdXNpb24gd2l0aCB0aGUgKmJyYW5jaCogbmFtZWQKKwknZ2l0aycKKworZ2l0ayAtLW1heC1jb3VudD0xMDAgLS1hbGwgXC0tIE1ha2VmaWxlOjoKKworCVNob3cgYXQgbW9zdCAxMDAgY2hhbmdlcyBtYWRlIHRvIHRoZSBmaWxlICdNYWtlZmlsZScuIEluc3RlYWQgb2Ygb25seQorCWxvb2tpbmcgZm9yIGNoYW5nZXMgaW4gdGhlIGN1cnJlbnQgYnJhbmNoIGxvb2sgaW4gYWxsIGJyYW5jaGVzLgorCitGaWxlcworLS0tLS0KK1VzZXIgY29uZmlndXJhdGlvbiBhbmQgcHJlZmVyZW5jZXMgYXJlIHN0b3JlZCBhdDoKKworKiAnJFhER19DT05GSUdfSE9NRS9naXQvZ2l0aycgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UKKyogJyRIT01FLy5naXRrJyBpZiBpdCBleGlzdHMKKworSWYgbmVpdGhlciBvZiB0aGUgYWJvdmUgZXhpc3QgdGhlbiAnJFhER19DT05GSUdfSE9NRS9naXQvZ2l0aycgaXMgY3JlYXRlZCBhbmQKK3VzZWQgYnkgZGVmYXVsdC4gSWYgJyRYREdfQ09ORklHX0hPTUUnIGlzIG5vdCBzZXQgaXQgZGVmYXVsdHMgdG8KKyckSE9NRS8uY29uZmlnJyBpbiBhbGwgY2FzZXMuCisKK0hpc3RvcnkKKy0tLS0tLS0KK0dpdGsgd2FzIHRoZSBmaXJzdCBncmFwaGljYWwgcmVwb3NpdG9yeSBicm93c2VyLiBJdCdzIHdyaXR0ZW4gaW4KK3RjbC90ayBhbmQgc3RhcnRlZCBvZmYgaW4gYSBzZXBhcmF0ZSByZXBvc2l0b3J5IGJ1dCB3YXMgbGF0ZXIgbWVyZ2VkCitpbnRvIHRoZSBtYWluIEdpdCByZXBvc2l0b3J5LgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorJ3FnaXQoMSknOjoKKwlBIHJlcG9zaXRvcnkgYnJvd3NlciB3cml0dGVuIGluIEMrKyB1c2luZyBRdC4KKworJ2dpdHZpZXcoMSknOjoKKwlBIHJlcG9zaXRvcnkgYnJvd3NlciB3cml0dGVuIGluIFB5dGhvbiB1c2luZyBHdGsuIEl0J3MgYmFzZWQgb24KKwknYnpyaygxKScgYW5kIGRpc3RyaWJ1dGVkIGluIHRoZSBjb250cmliIGFyZWEgb2YgdGhlIEdpdCByZXBvc2l0b3J5LgorCisndGlnKDEpJzo6CisJQSBtaW5pbWFsIHJlcG9zaXRvcnkgYnJvd3NlciBhbmQgR2l0IHRvb2wgb3V0cHV0IGhpZ2hsaWdodGVyIHdyaXR0ZW4KKwlpbiBDIHVzaW5nIE5jdXJzZXMuCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRtb2R1bGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM3MGVjYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0bW9kdWxlcy50eHQKQEAgLTAsMCArMSwxMDcgQEAKK2dpdG1vZHVsZXMoNSkKKz09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0bW9kdWxlcyAtIGRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzCisKK1NZTk9QU0lTCistLS0tLS0tLQorJEdJVF9XT1JLX0RJUi8uZ2l0bW9kdWxlcworCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGUgYC5naXRtb2R1bGVzYCBmaWxlLCBsb2NhdGVkIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIGEgR2l0Cit3b3JraW5nIHRyZWUsIGlzIGEgdGV4dCBmaWxlIHdpdGggYSBzeW50YXggbWF0Y2hpbmcgdGhlIHJlcXVpcmVtZW50cworb2YgbGlua2dpdDpnaXQtY29uZmlnWzFdLgorCitUaGUgZmlsZSBjb250YWlucyBvbmUgc3Vic2VjdGlvbiBwZXIgc3VibW9kdWxlLCBhbmQgdGhlIHN1YnNlY3Rpb24gdmFsdWUKK2lzIHRoZSBuYW1lIG9mIHRoZSBzdWJtb2R1bGUuIFRoZSBuYW1lIGlzIHNldCB0byB0aGUgcGF0aCB3aGVyZSB0aGUKK3N1Ym1vZHVsZSBoYXMgYmVlbiBhZGRlZCB1bmxlc3MgaXQgd2FzIGN1c3RvbWl6ZWQgd2l0aCB0aGUgJy0tbmFtZScKK29wdGlvbiBvZiAnZ2l0IHN1Ym1vZHVsZSBhZGQnLiBFYWNoIHN1Ym1vZHVsZSBzZWN0aW9uIGFsc28gY29udGFpbnMgdGhlCitmb2xsb3dpbmcgcmVxdWlyZWQga2V5czoKKworc3VibW9kdWxlLjxuYW1lPi5wYXRoOjoKKwlEZWZpbmVzIHRoZSBwYXRoLCByZWxhdGl2ZSB0byB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZiB0aGUgR2l0CisJd29ya2luZyB0cmVlLCB3aGVyZSB0aGUgc3VibW9kdWxlIGlzIGV4cGVjdGVkIHRvIGJlIGNoZWNrZWQgb3V0LgorCVRoZSBwYXRoIG5hbWUgbXVzdCBub3QgZW5kIHdpdGggYSBgL2AuIEFsbCBzdWJtb2R1bGUgcGF0aHMgbXVzdAorCWJlIHVuaXF1ZSB3aXRoaW4gdGhlIC5naXRtb2R1bGVzIGZpbGUuCisKK3N1Ym1vZHVsZS48bmFtZT4udXJsOjoKKwlEZWZpbmVzIGEgVVJMIGZyb20gd2hpY2ggdGhlIHN1Ym1vZHVsZSByZXBvc2l0b3J5IGNhbiBiZSBjbG9uZWQuCisJVGhpcyBtYXkgYmUgZWl0aGVyIGFuIGFic29sdXRlIFVSTCByZWFkeSB0byBiZSBwYXNzZWQgdG8KKwlsaW5rZ2l0OmdpdC1jbG9uZVsxXSBvciAoaWYgaXQgYmVnaW5zIHdpdGggLi8gb3IgLi4vKSBhIGxvY2F0aW9uCisJcmVsYXRpdmUgdG8gdGhlIHN1cGVycHJvamVjdCdzIG9yaWdpbiByZXBvc2l0b3J5LgorCitJbiBhZGRpdGlvbiwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIG9wdGlvbmFsIGtleXM6CisKK3N1Ym1vZHVsZS48bmFtZT4udXBkYXRlOjoKKwlEZWZpbmVzIHRoZSBkZWZhdWx0IHVwZGF0ZSBwcm9jZWR1cmUgZm9yIHRoZSBuYW1lZCBzdWJtb2R1bGUsCisJaS5lLiBob3cgdGhlIHN1Ym1vZHVsZSBpcyB1cGRhdGVkIGJ5ICJnaXQgc3VibW9kdWxlIHVwZGF0ZSIKKwljb21tYW5kIGluIHRoZSBzdXBlcnByb2plY3QuIFRoaXMgaXMgb25seSB1c2VkIGJ5IGBnaXQKKwlzdWJtb2R1bGUgaW5pdGAgdG8gaW5pdGlhbGl6ZSB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBvZgorCXRoZSBzYW1lIG5hbWUuIEFsbG93ZWQgdmFsdWVzIGhlcmUgYXJlICdjaGVja291dCcsICdyZWJhc2UnLAorCSdtZXJnZScgb3IgJ25vbmUnLiBTZWUgZGVzY3JpcHRpb24gb2YgJ3VwZGF0ZScgY29tbWFuZCBpbgorCWxpbmtnaXQ6Z2l0LXN1Ym1vZHVsZVsxXSBmb3IgdGhlaXIgbWVhbmluZy4gTm90ZSB0aGF0IHRoZQorCSchY29tbWFuZCcgZm9ybSBpcyBpbnRlbnRpb25hbGx5IGlnbm9yZWQgaGVyZSBmb3Igc2VjdXJpdHkKKwlyZWFzb25zLgorCitzdWJtb2R1bGUuPG5hbWU+LmJyYW5jaDo6CisJQSByZW1vdGUgYnJhbmNoIG5hbWUgZm9yIHRyYWNraW5nIHVwZGF0ZXMgaW4gdGhlIHVwc3RyZWFtIHN1Ym1vZHVsZS4KKwlJZiB0aGUgb3B0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvICdtYXN0ZXInLiAgU2VlIHRoZQorCWAtLXJlbW90ZWAgZG9jdW1lbnRhdGlvbiBpbiBsaW5rZ2l0OmdpdC1zdWJtb2R1bGVbMV0gZm9yIGRldGFpbHMuCisKK3N1Ym1vZHVsZS48bmFtZT4uZmV0Y2hSZWN1cnNlU3VibW9kdWxlczo6CisJVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2YgdGhpcworCXN1Ym1vZHVsZS4gSWYgdGhpcyBvcHRpb24gaXMgYWxzbyBwcmVzZW50IGluIHRoZSBzdWJtb2R1bGVzIGVudHJ5IGluCisJLmdpdC9jb25maWcgb2YgdGhlIHN1cGVycHJvamVjdCwgdGhlIHNldHRpbmcgdGhlcmUgd2lsbCBvdmVycmlkZSB0aGUKKwlvbmUgZm91bmQgaW4gLmdpdG1vZHVsZXMuCisJQm90aCBzZXR0aW5ncyBjYW4gYmUgb3ZlcnJpZGRlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGJ5IHVzaW5nIHRoZQorCSItLVtuby1dcmVjdXJzZS1zdWJtb2R1bGVzIiBvcHRpb24gdG8gImdpdCBmZXRjaCIgYW5kICJnaXQgcHVsbCIuCisKK3N1Ym1vZHVsZS48bmFtZT4uaWdub3JlOjoKKwlEZWZpbmVzIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyAiZ2l0IHN0YXR1cyIgYW5kIHRoZSBkaWZmIGZhbWlseSBzaG93CisJYSBzdWJtb2R1bGUgYXMgbW9kaWZpZWQuIFdoZW4gc2V0IHRvICJhbGwiLCBpdCB3aWxsIG5ldmVyIGJlIGNvbnNpZGVyZWQKKwltb2RpZmllZCAoYnV0IHdpbGwgbm9uZXRoZWxlc3Mgc2hvdyB1cCBpbiB0aGUgb3V0cHV0IG9mIHN0YXR1cyBhbmQKKwljb21taXQgd2hlbiBpdCBoYXMgYmVlbiBzdGFnZWQpLCAiZGlydHkiIHdpbGwgaWdub3JlIGFsbCBjaGFuZ2VzCisJdG8gdGhlIHN1Ym1vZHVsZXMgd29yayB0cmVlIGFuZAorCXRha2VzIG9ubHkgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgSEVBRCBvZiB0aGUgc3VibW9kdWxlIGFuZCB0aGUgY29tbWl0CisJcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCBpbnRvIGFjY291bnQuICJ1bnRyYWNrZWQiIHdpbGwgYWRkaXRpb25hbGx5CisJbGV0IHN1Ym1vZHVsZXMgd2l0aCBtb2RpZmllZCB0cmFja2VkIGZpbGVzIGluIHRoZWlyIHdvcmsgdHJlZSBzaG93IHVwLgorCVVzaW5nICJub25lIiAodGhlIGRlZmF1bHQgd2hlbiB0aGlzIG9wdGlvbiBpcyBub3Qgc2V0KSBhbHNvIHNob3dzCisJc3VibW9kdWxlcyB0aGF0IGhhdmUgdW50cmFja2VkIGZpbGVzIGluIHRoZWlyIHdvcmsgdHJlZSBhcyBjaGFuZ2VkLgorCUlmIHRoaXMgb3B0aW9uIGlzIGFsc28gcHJlc2VudCBpbiB0aGUgc3VibW9kdWxlcyBlbnRyeSBpbiAuZ2l0L2NvbmZpZyBvZgorCXRoZSBzdXBlcnByb2plY3QsIHRoZSBzZXR0aW5nIHRoZXJlIHdpbGwgb3ZlcnJpZGUgdGhlIG9uZSBmb3VuZCBpbgorCS5naXRtb2R1bGVzLgorCUJvdGggc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4gb24gdGhlIGNvbW1hbmQgbGluZSBieSB1c2luZyB0aGUKKwkiLS1pZ25vcmUtc3VibW9kdWxlIiBvcHRpb24uIFRoZSAnZ2l0IHN1Ym1vZHVsZScgY29tbWFuZHMgYXJlIG5vdAorCWFmZmVjdGVkIGJ5IHRoaXMgc2V0dGluZy4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworQ29uc2lkZXIgdGhlIGZvbGxvd2luZyAuZ2l0bW9kdWxlcyBmaWxlOgorCisJW3N1Ym1vZHVsZSAibGliZm9vIl0KKwkJcGF0aCA9IGluY2x1ZGUvZm9vCisJCXVybCA9IGdpdDovL2Zvby5jb20vZ2l0L2xpYi5naXQKKworCVtzdWJtb2R1bGUgImxpYmJhciJdCisJCXBhdGggPSBpbmNsdWRlL2JhcgorCQl1cmwgPSBnaXQ6Ly9iYXIuY29tL2dpdC9saWIuZ2l0CisKKworVGhpcyBkZWZpbmVzIHR3byBzdWJtb2R1bGVzLCBgbGliZm9vYCBhbmQgYGxpYmJhcmAuIFRoZXNlIGFyZSBleHBlY3RlZCB0bworYmUgY2hlY2tlZCBvdXQgaW4gdGhlIHBhdGhzICdpbmNsdWRlL2ZvbycgYW5kICdpbmNsdWRlL2JhcicsIGFuZCBmb3IgYm90aAorc3VibW9kdWxlcyBhIFVSTCBpcyBzcGVjaWZpZWQgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGNsb25pbmcgdGhlIHN1Ym1vZHVsZXMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtc3VibW9kdWxlWzFdIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0bmFtZXNwYWNlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdG5hbWVzcGFjZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ODVlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdG5hbWVzcGFjZXMudHh0CkBAIC0wLDAgKzEsODIgQEAKK2dpdG5hbWVzcGFjZXMoNykKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0bmFtZXNwYWNlcyAtIEdpdCBuYW1lc3BhY2VzCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorR0lUX05BTUVTUEFDRT08bmFtZXNwYWNlPiAnZ2l0IHVwbG9hZC1wYWNrJworR0lUX05BTUVTUEFDRT08bmFtZXNwYWNlPiAnZ2l0IHJlY2VpdmUtcGFjaycKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2l0IHN1cHBvcnRzIGRpdmlkaW5nIHRoZSByZWZzIG9mIGEgc2luZ2xlIHJlcG9zaXRvcnkgaW50byBtdWx0aXBsZQorbmFtZXNwYWNlcywgZWFjaCBvZiB3aGljaCBoYXMgaXRzIG93biBicmFuY2hlcywgdGFncywgYW5kIEhFQUQuICBHaXQgY2FuCitleHBvc2UgZWFjaCBuYW1lc3BhY2UgYXMgYW4gaW5kZXBlbmRlbnQgcmVwb3NpdG9yeSB0byBwdWxsIGZyb20gYW5kIHB1c2gKK3RvLCB3aGlsZSBzaGFyaW5nIHRoZSBvYmplY3Qgc3RvcmUsIGFuZCBleHBvc2luZyBhbGwgdGhlIHJlZnMgdG8KK29wZXJhdGlvbnMgc3VjaCBhcyBsaW5rZ2l0OmdpdC1nY1sxXS4KKworU3RvcmluZyBtdWx0aXBsZSByZXBvc2l0b3JpZXMgYXMgbmFtZXNwYWNlcyBvZiBhIHNpbmdsZSByZXBvc2l0b3J5Cithdm9pZHMgc3RvcmluZyBkdXBsaWNhdGUgY29waWVzIG9mIHRoZSBzYW1lIG9iamVjdHMsIHN1Y2ggYXMgd2hlbgorc3RvcmluZyBtdWx0aXBsZSBicmFuY2hlcyBvZiB0aGUgc2FtZSBzb3VyY2UuICBUaGUgYWx0ZXJuYXRlcyBtZWNoYW5pc20KK3Byb3ZpZGVzIHNpbWlsYXIgc3VwcG9ydCBmb3IgYXZvaWRpbmcgZHVwbGljYXRlcywgYnV0IGFsdGVybmF0ZXMgZG8gbm90CitwcmV2ZW50IGR1cGxpY2F0aW9uIGJldHdlZW4gbmV3IG9iamVjdHMgYWRkZWQgdG8gdGhlIHJlcG9zaXRvcmllcword2l0aG91dCBvbmdvaW5nIG1haW50ZW5hbmNlLCB3aGlsZSBuYW1lc3BhY2VzIGRvLgorCitUbyBzcGVjaWZ5IGEgbmFtZXNwYWNlLCBzZXQgdGhlIGBHSVRfTkFNRVNQQUNFYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0bwordGhlIG5hbWVzcGFjZS4gIEZvciBlYWNoIHJlZiBuYW1lc3BhY2UsIEdpdCBzdG9yZXMgdGhlIGNvcnJlc3BvbmRpbmcKK3JlZnMgaW4gYSBkaXJlY3RvcnkgdW5kZXIgYHJlZnMvbmFtZXNwYWNlcy9gLiAgRm9yIGV4YW1wbGUsCitgR0lUX05BTUVTUEFDRT1mb29gIHdpbGwgc3RvcmUgcmVmcyB1bmRlciBgcmVmcy9uYW1lc3BhY2VzL2Zvby9gLiAgWW91CitjYW4gYWxzbyBzcGVjaWZ5IG5hbWVzcGFjZXMgdmlhIHRoZSBgLS1uYW1lc3BhY2VgIG9wdGlvbiB0bworbGlua2dpdDpnaXRbMV0uCisKK05vdGUgdGhhdCBuYW1lc3BhY2VzIHdoaWNoIGluY2x1ZGUgYSBgL2Agd2lsbCBleHBhbmQgdG8gYSBoaWVyYXJjaHkgb2YKK25hbWVzcGFjZXM7IGZvciBleGFtcGxlLCBgR0lUX05BTUVTUEFDRT1mb28vYmFyYCB3aWxsIHN0b3JlIHJlZnMgdW5kZXIKK2ByZWZzL25hbWVzcGFjZXMvZm9vL3JlZnMvbmFtZXNwYWNlcy9iYXIvYC4gIFRoaXMgbWFrZXMgcGF0aHMgaW4KK2BHSVRfTkFNRVNQQUNFYCBiZWhhdmUgaGllcmFyY2hpY2FsbHksIHNvIHRoYXQgY2xvbmluZyB3aXRoCitgR0lUX05BTUVTUEFDRT1mb28vYmFyYCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQgYXMgY2xvbmluZyB3aXRoCitgR0lUX05BTUVTUEFDRT1mb29gIGFuZCBjbG9uaW5nIGZyb20gdGhhdCByZXBvIHdpdGggYEdJVF9OQU1FU1BBQ0U9YmFyYC4gIEl0CithbHNvIGF2b2lkcyBhbWJpZ3VpdHkgd2l0aCBzdHJhbmdlIG5hbWVzcGFjZSBwYXRocyBzdWNoIGFzIGBmb28vcmVmcy9oZWFkcy9gLAord2hpY2ggY291bGQgb3RoZXJ3aXNlIGdlbmVyYXRlIGRpcmVjdG9yeS9maWxlIGNvbmZsaWN0cyB3aXRoaW4gdGhlIGByZWZzYAorZGlyZWN0b3J5LgorCitsaW5rZ2l0OmdpdC11cGxvYWQtcGFja1sxXSBhbmQgbGlua2dpdDpnaXQtcmVjZWl2ZS1wYWNrWzFdIHJld3JpdGUgdGhlCituYW1lcyBvZiByZWZzIGFzIHNwZWNpZmllZCBieSBgR0lUX05BTUVTUEFDRWAuICBnaXQtdXBsb2FkLXBhY2sgYW5kCitnaXQtcmVjZWl2ZS1wYWNrIHdpbGwgaWdub3JlIGFsbCByZWZlcmVuY2VzIG91dHNpZGUgdGhlIHNwZWNpZmllZAorbmFtZXNwYWNlLgorCitUaGUgc21hcnQgSFRUUCBzZXJ2ZXIsIGxpbmtnaXQ6Z2l0LWh0dHAtYmFja2VuZFsxXSwgd2lsbCBwYXNzCitHSVRfTkFNRVNQQUNFIHRocm91Z2ggdG8gdGhlIGJhY2tlbmQgcHJvZ3JhbXM7IHNlZQorbGlua2dpdDpnaXQtaHR0cC1iYWNrZW5kWzFdIGZvciBzYW1wbGUgY29uZmlndXJhdGlvbiB0byBleHBvc2UKK3JlcG9zaXRvcnkgbmFtZXNwYWNlcyBhcyByZXBvc2l0b3JpZXMuCisKK0ZvciBhIHNpbXBsZSBsb2NhbCB0ZXN0LCB5b3UgY2FuIHVzZSBsaW5rZ2l0OmdpdC1yZW1vdGUtZXh0WzFdOgorCistLS0tLS0tLS0tCitnaXQgY2xvbmUgZXh0OjonZ2l0IC0tbmFtZXNwYWNlPWZvbyAlcyAvdG1wL3ByZWZpeGVkLmdpdCcKKy0tLS0tLS0tLS0KKworU0VDVVJJVFkKKy0tLS0tLS0tCisKK0FueW9uZSB3aXRoIGFjY2VzcyB0byBhbnkgbmFtZXNwYWNlIHdpdGhpbiBhIHJlcG9zaXRvcnkgY2FuIHBvdGVudGlhbGx5CithY2Nlc3Mgb2JqZWN0cyBmcm9tIGFueSBvdGhlciBuYW1lc3BhY2Ugc3RvcmVkIGluIHRoZSBzYW1lIHJlcG9zaXRvcnkuCitZb3UgY2FuJ3QgZGlyZWN0bHkgc2F5ICJnaXZlIG1lIG9iamVjdCBBQkNEIiBpZiB5b3UgZG9uJ3QgaGF2ZSBhIHJlZiB0bworaXQsIGJ1dCB5b3UgY2FuIGRvIHNvbWUgb3RoZXIgc25lYWt5IHRoaW5ncyBsaWtlOgorCisuIENsYWltaW5nIHRvIHB1c2ggQUJDRCwgYXQgd2hpY2ggcG9pbnQgdGhlIHNlcnZlciB3aWxsIG9wdGltaXplIG91dCB0aGUKKyAgbmVlZCBmb3IgeW91IHRvIGFjdHVhbGx5IHNlbmQgaXQuIE5vdyB5b3UgaGF2ZSBhIHJlZiB0byBBQkNEIGFuZCBjYW4KKyAgZmV0Y2ggaXQgKGNsYWltaW5nIG5vdCB0byBoYXZlIGl0LCBvZiBjb3Vyc2UpLgorCisuIFJlcXVlc3Rpbmcgb3RoZXIgcmVmcywgY2xhaW1pbmcgdGhhdCB5b3UgaGF2ZSBBQkNELCBhdCB3aGljaCBwb2ludCB0aGUKKyAgc2VydmVyIG1heSBnZW5lcmF0ZSBkZWx0YXMgYWdhaW5zdCBBQkNELgorCitOb25lIG9mIHRoaXMgY2F1c2VzIGEgcHJvYmxlbSBpZiB5b3Ugb25seSBob3N0IHB1YmxpYyByZXBvc2l0b3JpZXMsIG9yCitpZiBldmVyeW9uZSB3aG8gbWF5IHJlYWQgb25lIG5hbWVzcGFjZSBtYXkgYWxzbyByZWFkIGV2ZXJ5dGhpbmcgaW4gZXZlcnkKK290aGVyIG5hbWVzcGFjZSAoZm9yIGluc3RhbmNlLCBpZiBldmVyeW9uZSBpbiBhbiBvcmdhbml6YXRpb24gaGFzIHJlYWQKK3Blcm1pc3Npb24gdG8gZXZlcnkgcmVwb3NpdG9yeSkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHJlbW90ZS1oZWxwZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0cmVtb3RlLWhlbHBlcnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZTBiMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHJlbW90ZS1oZWxwZXJzLnR4dApAQCAtMCwwICsxLDQ2OCBAQAorZ2l0cmVtb3RlLWhlbHBlcnMoMSkKKz09PT09PT09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHJlbW90ZS1oZWxwZXJzIC0gSGVscGVyIHByb2dyYW1zIHRvIGludGVyYWN0IHdpdGggcmVtb3RlIHJlcG9zaXRvcmllcworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgcmVtb3RlLTx0cmFuc3BvcnQ+JyA8cmVwb3NpdG9yeT4gWzxVUkw+XQorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworUmVtb3RlIGhlbHBlciBwcm9ncmFtcyBhcmUgbm9ybWFsbHkgbm90IHVzZWQgZGlyZWN0bHkgYnkgZW5kIHVzZXJzLAorYnV0IHRoZXkgYXJlIGludm9rZWQgYnkgR2l0IHdoZW4gaXQgbmVlZHMgdG8gaW50ZXJhY3Qgd2l0aCByZW1vdGUKK3JlcG9zaXRvcmllcyBHaXQgZG9lcyBub3Qgc3VwcG9ydCBuYXRpdmVseS4gIEEgZ2l2ZW4gaGVscGVyIHdpbGwKK2ltcGxlbWVudCBhIHN1YnNldCBvZiB0aGUgY2FwYWJpbGl0aWVzIGRvY3VtZW50ZWQgaGVyZS4gV2hlbiBHaXQKK25lZWRzIHRvIGludGVyYWN0IHdpdGggYSByZXBvc2l0b3J5IHVzaW5nIGEgcmVtb3RlIGhlbHBlciwgaXQgc3Bhd25zCit0aGUgaGVscGVyIGFzIGFuIGluZGVwZW5kZW50IHByb2Nlc3MsIHNlbmRzIGNvbW1hbmRzIHRvIHRoZSBoZWxwZXIncworc3RhbmRhcmQgaW5wdXQsIGFuZCBleHBlY3RzIHJlc3VsdHMgZnJvbSB0aGUgaGVscGVyJ3Mgc3RhbmRhcmQKK291dHB1dC4gQmVjYXVzZSBhIHJlbW90ZSBoZWxwZXIgcnVucyBhcyBhbiBpbmRlcGVuZGVudCBwcm9jZXNzIGZyb20KK0dpdCwgdGhlcmUgaXMgbm8gbmVlZCB0byByZS1saW5rIEdpdCB0byBhZGQgYSBuZXcgaGVscGVyLCBub3IgYW55CituZWVkIHRvIGxpbmsgdGhlIGhlbHBlciB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQuCisKK0V2ZXJ5IGhlbHBlciBtdXN0IHN1cHBvcnQgdGhlICJjYXBhYmlsaXRpZXMiIGNvbW1hbmQsIHdoaWNoIEdpdAordXNlcyB0byBkZXRlcm1pbmUgd2hhdCBvdGhlciBjb21tYW5kcyB0aGUgaGVscGVyIHdpbGwgYWNjZXB0LiAgVGhvc2UKK290aGVyIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGRpc2NvdmVyIGFuZCB1cGRhdGUgcmVtb3RlIHJlZnMsCit0cmFuc3BvcnQgb2JqZWN0cyBiZXR3ZWVuIHRoZSBvYmplY3QgZGF0YWJhc2UgYW5kIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwKK2FuZCB1cGRhdGUgdGhlIGxvY2FsIG9iamVjdCBzdG9yZS4KKworR2l0IGNvbWVzIHdpdGggYSAiY3VybCIgZmFtaWx5IG9mIHJlbW90ZSBoZWxwZXJzLCB0aGF0IGhhbmRsZSB2YXJpb3VzCit0cmFuc3BvcnQgcHJvdG9jb2xzLCBzdWNoIGFzICdnaXQtcmVtb3RlLWh0dHAnLCAnZ2l0LXJlbW90ZS1odHRwcycsCisnZ2l0LXJlbW90ZS1mdHAnIGFuZCAnZ2l0LXJlbW90ZS1mdHBzJy4gVGhleSBpbXBsZW1lbnQgdGhlIGNhcGFiaWxpdGllcworJ2ZldGNoJywgJ29wdGlvbicsIGFuZCAncHVzaCcuCisKK0lOVk9DQVRJT04KKy0tLS0tLS0tLS0KKworUmVtb3RlIGhlbHBlciBwcm9ncmFtcyBhcmUgaW52b2tlZCB3aXRoIG9uZSBvciAob3B0aW9uYWxseSkgdHdvCithcmd1bWVudHMuIFRoZSBmaXJzdCBhcmd1bWVudCBzcGVjaWZpZXMgYSByZW1vdGUgcmVwb3NpdG9yeSBhcyBpbiBHaXQ7CitpdCBpcyBlaXRoZXIgdGhlIG5hbWUgb2YgYSBjb25maWd1cmVkIHJlbW90ZSBvciBhIFVSTC4gVGhlIHNlY29uZAorYXJndW1lbnQgc3BlY2lmaWVzIGEgVVJMOyBpdCBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtCisnPHRyYW5zcG9ydD46Ly88YWRkcmVzcz4nLCBidXQgYW55IGFyYml0cmFyeSBzdHJpbmcgaXMgcG9zc2libGUuCitUaGUgJ0dJVF9ESVInIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCB1cCBmb3IgdGhlIHJlbW90ZSBoZWxwZXIKK2FuZCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gc3RvcmUgYWRkaXRpb25hbCBkYXRhIG9yIGZyb20KK3doaWNoIGRpcmVjdG9yeSB0byBpbnZva2UgYXV4aWxpYXJ5IEdpdCBjb21tYW5kcy4KKworV2hlbiBHaXQgZW5jb3VudGVycyBhIFVSTCBvZiB0aGUgZm9ybSAnPHRyYW5zcG9ydD46Ly88YWRkcmVzcz4nLCB3aGVyZQorJzx0cmFuc3BvcnQ+JyBpcyBhIHByb3RvY29sIHRoYXQgaXQgY2Fubm90IGhhbmRsZSBuYXRpdmVseSwgaXQKK2F1dG9tYXRpY2FsbHkgaW52b2tlcyAnZ2l0IHJlbW90ZS08dHJhbnNwb3J0Picgd2l0aCB0aGUgZnVsbCBVUkwgYXMKK3RoZSBzZWNvbmQgYXJndW1lbnQuIElmIHN1Y2ggYSBVUkwgaXMgZW5jb3VudGVyZWQgZGlyZWN0bHkgb24gdGhlCitjb21tYW5kIGxpbmUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgc2FtZSBhcyB0aGUgc2Vjb25kLCBhbmQgaWYgaXQKK2lzIGVuY291bnRlcmVkIGluIGEgY29uZmlndXJlZCByZW1vdGUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbmFtZQorb2YgdGhhdCByZW1vdGUuCisKK0EgVVJMIG9mIHRoZSBmb3JtICc8dHJhbnNwb3J0Pjo6PGFkZHJlc3M+JyBleHBsaWNpdGx5IGluc3RydWN0cyBHaXQgdG8KK2ludm9rZSAnZ2l0IHJlbW90ZS08dHJhbnNwb3J0Picgd2l0aCAnPGFkZHJlc3M+JyBhcyB0aGUgc2Vjb25kCithcmd1bWVudC4gSWYgc3VjaCBhIFVSTCBpcyBlbmNvdW50ZXJlZCBkaXJlY3RseSBvbiB0aGUgY29tbWFuZCBsaW5lLAordGhlIGZpcnN0IGFyZ3VtZW50IGlzICc8YWRkcmVzcz4nLCBhbmQgaWYgaXQgaXMgZW5jb3VudGVyZWQgaW4gYQorY29uZmlndXJlZCByZW1vdGUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGF0IHJlbW90ZS4KKworQWRkaXRpb25hbGx5LCB3aGVuIGEgY29uZmlndXJlZCByZW1vdGUgaGFzICdyZW1vdGUuPG5hbWU+LnZjcycgc2V0IHRvCisnPHRyYW5zcG9ydD4nLCBHaXQgZXhwbGljaXRseSBpbnZva2VzICdnaXQgcmVtb3RlLTx0cmFuc3BvcnQ+JyB3aXRoCisnPG5hbWU+JyBhcyB0aGUgZmlyc3QgYXJndW1lbnQuIElmIHNldCwgdGhlIHNlY29uZCBhcmd1bWVudCBpcworJ3JlbW90ZS48bmFtZT4udXJsJzsgb3RoZXJ3aXNlLCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG9taXR0ZWQuCisKK0lOUFVUIEZPUk1BVAorLS0tLS0tLS0tLS0tCisKK0dpdCBzZW5kcyB0aGUgcmVtb3RlIGhlbHBlciBhIGxpc3Qgb2YgY29tbWFuZHMgb24gc3RhbmRhcmQgaW5wdXQsIG9uZQorcGVyIGxpbmUuICBUaGUgZmlyc3QgY29tbWFuZCBpcyBhbHdheXMgdGhlICdjYXBhYmlsaXRpZXMnIGNvbW1hbmQsIGluCityZXNwb25zZSB0byB3aGljaCB0aGUgcmVtb3RlIGhlbHBlciBtdXN0IHByaW50IGEgbGlzdCBvZiB0aGUKK2NhcGFiaWxpdGllcyBpdCBzdXBwb3J0cyAoc2VlIGJlbG93KSBmb2xsb3dlZCBieSBhIGJsYW5rIGxpbmUuICBUaGUKK3Jlc3BvbnNlIHRvIHRoZSBjYXBhYmlsaXRpZXMgY29tbWFuZCBkZXRlcm1pbmVzIHdoYXQgY29tbWFuZHMgR2l0IHVzZXMKK2luIHRoZSByZW1haW5kZXIgb2YgdGhlIGNvbW1hbmQgc3RyZWFtLgorCitUaGUgY29tbWFuZCBzdHJlYW0gaXMgdGVybWluYXRlZCBieSBhIGJsYW5rIGxpbmUuICBJbiBzb21lIGNhc2VzCisoaW5kaWNhdGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSByZWxldmFudCBjb21tYW5kcyksIHRoaXMgYmxhbmsKK2xpbmUgaXMgZm9sbG93ZWQgYnkgYSBwYXlsb2FkIGluIHNvbWUgb3RoZXIgcHJvdG9jb2wgKGUuZy4sIHRoZSBwYWNrCitwcm90b2NvbCksIHdoaWxlIGluIG90aGVycyBpdCBpbmRpY2F0ZXMgdGhlIGVuZCBvZiBpbnB1dC4KKworQ2FwYWJpbGl0aWVzCit+fn5+fn5+fn5+fn4KKworRWFjaCByZW1vdGUgaGVscGVyIGlzIGV4cGVjdGVkIHRvIHN1cHBvcnQgb25seSBhIHN1YnNldCBvZiBjb21tYW5kcy4KK1RoZSBvcGVyYXRpb25zIGEgaGVscGVyIHN1cHBvcnRzIGFyZSBkZWNsYXJlZCB0byBHaXQgaW4gdGhlIHJlc3BvbnNlCit0byB0aGUgYGNhcGFiaWxpdGllc2AgY29tbWFuZCAoc2VlIENPTU1BTkRTLCBiZWxvdykuCisKK0luIHRoZSBmb2xsb3dpbmcsIHdlIGxpc3QgYWxsIGRlZmluZWQgY2FwYWJpbGl0aWVzIGFuZCBmb3IKK2VhY2ggd2UgbGlzdCB3aGljaCBjb21tYW5kcyBhIGhlbHBlciB3aXRoIHRoYXQgY2FwYWJpbGl0eQorbXVzdCBwcm92aWRlLgorCitDYXBhYmlsaXRpZXMgZm9yIFB1c2hpbmcKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorJ2Nvbm5lY3QnOjoKKwlDYW4gYXR0ZW1wdCB0byBjb25uZWN0IHRvICdnaXQgcmVjZWl2ZS1wYWNrJyAoZm9yIHB1c2hpbmcpLAorCSdnaXQgdXBsb2FkLXBhY2snLCBldGMgZm9yIGNvbW11bmljYXRpb24gdXNpbmcKKwlnaXQncyBuYXRpdmUgcGFja2ZpbGUgcHJvdG9jb2wuIFRoaXMKKwlyZXF1aXJlcyBhIGJpZGlyZWN0aW9uYWwsIGZ1bGwtZHVwbGV4IGNvbm5lY3Rpb24uCisrCitTdXBwb3J0ZWQgY29tbWFuZHM6ICdjb25uZWN0Jy4KKworJ3B1c2gnOjoKKwlDYW4gZGlzY292ZXIgcmVtb3RlIHJlZnMgYW5kIHB1c2ggbG9jYWwgY29tbWl0cyBhbmQgdGhlCisJaGlzdG9yeSBsZWFkaW5nIHVwIHRvIHRoZW0gdG8gbmV3IG9yIGV4aXN0aW5nIHJlbW90ZSByZWZzLgorKworU3VwcG9ydGVkIGNvbW1hbmRzOiAnbGlzdCBmb3ItcHVzaCcsICdwdXNoJy4KKworJ2V4cG9ydCc6OgorCUNhbiBkaXNjb3ZlciByZW1vdGUgcmVmcyBhbmQgcHVzaCBzcGVjaWZpZWQgb2JqZWN0cyBmcm9tIGEKKwlmYXN0LWltcG9ydCBzdHJlYW0gdG8gcmVtb3RlIHJlZnMuCisrCitTdXBwb3J0ZWQgY29tbWFuZHM6ICdsaXN0IGZvci1wdXNoJywgJ2V4cG9ydCcuCisKK0lmIGEgaGVscGVyIGFkdmVydGlzZXMgJ2Nvbm5lY3QnLCBHaXQgd2lsbCB1c2UgaXQgaWYgcG9zc2libGUgYW5kCitmYWxsIGJhY2sgdG8gYW5vdGhlciBjYXBhYmlsaXR5IGlmIHRoZSBoZWxwZXIgcmVxdWVzdHMgc28gd2hlbgorY29ubmVjdGluZyAoc2VlIHRoZSAnY29ubmVjdCcgY29tbWFuZCB1bmRlciBDT01NQU5EUykuCitXaGVuIGNob29zaW5nIGJldHdlZW4gJ3B1c2gnIGFuZCAnZXhwb3J0JywgR2l0IHByZWZlcnMgJ3B1c2gnLgorT3RoZXIgZnJvbnRlbmRzIG1heSBoYXZlIHNvbWUgb3RoZXIgb3JkZXIgb2YgcHJlZmVyZW5jZS4KKworJ25vLXByaXZhdGUtdXBkYXRlJzo6CisJV2hlbiB1c2luZyB0aGUgJ3JlZnNwZWMnIGNhcGFiaWxpdHksIGdpdCBub3JtYWxseSB1cGRhdGVzIHRoZQorCXByaXZhdGUgcmVmIG9uIHN1Y2Nlc3NmdWwgcHVzaC4gVGhpcyB1cGRhdGUgaXMgZGlzYWJsZWQgd2hlbgorCXRoZSByZW1vdGUtaGVscGVyIGRlY2xhcmVzIHRoZSBjYXBhYmlsaXR5ICduby1wcml2YXRlLXVwZGF0ZScuCisKKworQ2FwYWJpbGl0aWVzIGZvciBGZXRjaGluZworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorJ2Nvbm5lY3QnOjoKKwlDYW4gdHJ5IHRvIGNvbm5lY3QgdG8gJ2dpdCB1cGxvYWQtcGFjaycgKGZvciBmZXRjaGluZyksCisJJ2dpdCByZWNlaXZlLXBhY2snLCBldGMgZm9yIGNvbW11bmljYXRpb24gdXNpbmcgdGhlCisJR2l0J3MgbmF0aXZlIHBhY2tmaWxlIHByb3RvY29sLiBUaGlzCisJcmVxdWlyZXMgYSBiaWRpcmVjdGlvbmFsLCBmdWxsLWR1cGxleCBjb25uZWN0aW9uLgorKworU3VwcG9ydGVkIGNvbW1hbmRzOiAnY29ubmVjdCcuCisKKydmZXRjaCc6OgorCUNhbiBkaXNjb3ZlciByZW1vdGUgcmVmcyBhbmQgdHJhbnNmZXIgb2JqZWN0cyByZWFjaGFibGUgZnJvbQorCXRoZW0gdG8gdGhlIGxvY2FsIG9iamVjdCBzdG9yZS4KKysKK1N1cHBvcnRlZCBjb21tYW5kczogJ2xpc3QnLCAnZmV0Y2gnLgorCisnaW1wb3J0Jzo6CisJQ2FuIGRpc2NvdmVyIHJlbW90ZSByZWZzIGFuZCBvdXRwdXQgb2JqZWN0cyByZWFjaGFibGUgZnJvbQorCXRoZW0gYXMgYSBzdHJlYW0gaW4gZmFzdC1pbXBvcnQgZm9ybWF0LgorKworU3VwcG9ydGVkIGNvbW1hbmRzOiAnbGlzdCcsICdpbXBvcnQnLgorCisnY2hlY2stY29ubmVjdGl2aXR5Jzo6CisJQ2FuIGd1YXJhbnRlZSB0aGF0IHdoZW4gYSBjbG9uZSBpcyByZXF1ZXN0ZWQsIHRoZSByZWNlaXZlZAorCXBhY2sgaXMgc2VsZiBjb250YWluZWQgYW5kIGlzIGNvbm5lY3RlZC4KKworSWYgYSBoZWxwZXIgYWR2ZXJ0aXNlcyAnY29ubmVjdCcsIEdpdCB3aWxsIHVzZSBpdCBpZiBwb3NzaWJsZSBhbmQKK2ZhbGwgYmFjayB0byBhbm90aGVyIGNhcGFiaWxpdHkgaWYgdGhlIGhlbHBlciByZXF1ZXN0cyBzbyB3aGVuCitjb25uZWN0aW5nIChzZWUgdGhlICdjb25uZWN0JyBjb21tYW5kIHVuZGVyIENPTU1BTkRTKS4KK1doZW4gY2hvb3NpbmcgYmV0d2VlbiAnZmV0Y2gnIGFuZCAnaW1wb3J0JywgR2l0IHByZWZlcnMgJ2ZldGNoJy4KK090aGVyIGZyb250ZW5kcyBtYXkgaGF2ZSBzb21lIG90aGVyIG9yZGVyIG9mIHByZWZlcmVuY2UuCisKK01pc2NlbGxhbmVvdXMgY2FwYWJpbGl0aWVzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisnb3B0aW9uJzo6CisJRm9yIHNwZWNpZnlpbmcgc2V0dGluZ3MgbGlrZSBgdmVyYm9zaXR5YCAoaG93IG11Y2ggb3V0cHV0IHRvCisJd3JpdGUgdG8gc3RkZXJyKSBhbmQgYGRlcHRoYCAoaG93IG11Y2ggaGlzdG9yeSBpcyB3YW50ZWQgaW4gdGhlCisJY2FzZSBvZiBhIHNoYWxsb3cgY2xvbmUpIHRoYXQgYWZmZWN0IGhvdyBvdGhlciBjb21tYW5kcyBhcmUKKwljYXJyaWVkIG91dC4KKworJ3JlZnNwZWMnIDxyZWZzcGVjPjo6CisJRm9yIHJlbW90ZSBoZWxwZXJzIHRoYXQgaW1wbGVtZW50ICdpbXBvcnQnIG9yICdleHBvcnQnLCB0aGlzIGNhcGFiaWxpdHkKKwlhbGxvd3MgdGhlIHJlZnMgdG8gYmUgY29uc3RyYWluZWQgdG8gYSBwcml2YXRlIG5hbWVzcGFjZSwgaW5zdGVhZCBvZgorCXdyaXRpbmcgdG8gcmVmcy9oZWFkcyBvciByZWZzL3JlbW90ZXMgZGlyZWN0bHkuCisJSXQgaXMgcmVjb21tZW5kZWQgdGhhdCBhbGwgaW1wb3J0ZXJzIHByb3ZpZGluZyB0aGUgJ2ltcG9ydCcKKwljYXBhYmlsaXR5IHVzZSB0aGlzLiBJdCdzIG1hbmRhdG9yeSBmb3IgJ2V4cG9ydCcuCisrCitBIGhlbHBlciBhZHZlcnRpc2luZyB0aGUgY2FwYWJpbGl0eQorYHJlZnNwZWMgcmVmcy9oZWFkcy8qOnJlZnMvc3ZuL29yaWdpbi9icmFuY2hlcy8qYAoraXMgc2F5aW5nIHRoYXQsIHdoZW4gaXQgaXMgYXNrZWQgdG8gYGltcG9ydCByZWZzL2hlYWRzL3RvcGljYCwgdGhlCitzdHJlYW0gaXQgb3V0cHV0cyB3aWxsIHVwZGF0ZSB0aGUgYHJlZnMvc3ZuL29yaWdpbi9icmFuY2hlcy90b3BpY2AKK3JlZi4KKysKK1RoaXMgY2FwYWJpbGl0eSBjYW4gYmUgYWR2ZXJ0aXNlZCBtdWx0aXBsZSB0aW1lcy4gIFRoZSBmaXJzdAorYXBwbGljYWJsZSByZWZzcGVjIHRha2VzIHByZWNlZGVuY2UuICBUaGUgbGVmdC1oYW5kIG9mIHJlZnNwZWNzCithZHZlcnRpc2VkIHdpdGggdGhpcyBjYXBhYmlsaXR5IG11c3QgY292ZXIgYWxsIHJlZnMgcmVwb3J0ZWQgYnkKK3RoZSBsaXN0IGNvbW1hbmQuICBJZiBubyAncmVmc3BlYycgY2FwYWJpbGl0eSBpcyBhZHZlcnRpc2VkLAordGhlcmUgaXMgYW4gaW1wbGllZCBgcmVmc3BlYyAqOipgLgorKworV2hlbiB3cml0aW5nIHJlbW90ZS1oZWxwZXJzIGZvciBkZWNlbnRyYWxpemVkIHZlcnNpb24gY29udHJvbAorc3lzdGVtcywgaXQgaXMgYWR2aXNlZCB0byBrZWVwIGEgbG9jYWwgY29weSBvZiB0aGUgcmVwb3NpdG9yeSB0bworaW50ZXJhY3Qgd2l0aCwgYW5kIHRvIGxldCB0aGUgcHJpdmF0ZSBuYW1lc3BhY2UgcmVmcyBwb2ludCB0byB0aGlzCitsb2NhbCByZXBvc2l0b3J5LCB3aGlsZSB0aGUgcmVmcy9yZW1vdGVzIG5hbWVzcGFjZSBpcyB1c2VkIHRvIHRyYWNrCit0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisKKydiaWRpLWltcG9ydCc6OgorCVRoaXMgbW9kaWZpZXMgdGhlICdpbXBvcnQnIGNhcGFiaWxpdHkuCisJVGhlIGZhc3QtaW1wb3J0IGNvbW1hbmRzICdjYXQtYmxvYicgYW5kICdscycgY2FuIGJlIHVzZWQgYnkgcmVtb3RlLWhlbHBlcnMKKwl0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBibG9icyBhbmQgdHJlZXMgdGhhdCBhbHJlYWR5IGV4aXN0IGluCisJZmFzdC1pbXBvcnQncyBtZW1vcnkuIFRoaXMgcmVxdWlyZXMgYSBjaGFubmVsIGZyb20gZmFzdC1pbXBvcnQgdG8gdGhlCisJcmVtb3RlLWhlbHBlci4KKwlJZiBpdCBpcyBhZHZlcnRpc2VkIGluIGFkZGl0aW9uIHRvICJpbXBvcnQiLCBHaXQgZXN0YWJsaXNoZXMgYSBwaXBlIGZyb20KKwlmYXN0LWltcG9ydCB0byB0aGUgcmVtb3RlLWhlbHBlcidzIHN0ZGluLgorCUl0IGZvbGxvd3MgdGhhdCBHaXQgYW5kIGZhc3QtaW1wb3J0IGFyZSBib3RoIGNvbm5lY3RlZCB0byB0aGUKKwlyZW1vdGUtaGVscGVyJ3Mgc3RkaW4uIEJlY2F1c2UgR2l0IGNhbiBzZW5kIG11bHRpcGxlIGNvbW1hbmRzIHRvCisJdGhlIHJlbW90ZS1oZWxwZXIgaXQgaXMgcmVxdWlyZWQgdGhhdCBoZWxwZXJzIHRoYXQgdXNlICdiaWRpLWltcG9ydCcKKwlidWZmZXIgYWxsICdpbXBvcnQnIGNvbW1hbmRzIG9mIGEgYmF0Y2ggYmVmb3JlIHNlbmRpbmcgZGF0YSB0byBmYXN0LWltcG9ydC4KKwlUaGlzIGlzIHRvIHByZXZlbnQgbWl4aW5nIGNvbW1hbmRzIGFuZCBmYXN0LWltcG9ydCByZXNwb25zZXMgb24gdGhlCisJaGVscGVyJ3Mgc3RkaW4uCisKKydleHBvcnQtbWFya3MnIDxmaWxlPjo6CisJVGhpcyBtb2RpZmllcyB0aGUgJ2V4cG9ydCcgY2FwYWJpbGl0eSwgaW5zdHJ1Y3RpbmcgR2l0IHRvIGR1bXAgdGhlCisJaW50ZXJuYWwgbWFya3MgdGFibGUgdG8gPGZpbGU+IHdoZW4gY29tcGxldGUuIEZvciBkZXRhaWxzLAorCXJlYWQgdXAgb24gJy0tZXhwb3J0LW1hcmtzPTxmaWxlPicgaW4gbGlua2dpdDpnaXQtZmFzdC1leHBvcnRbMV0uCisKKydpbXBvcnQtbWFya3MnIDxmaWxlPjo6CisJVGhpcyBtb2RpZmllcyB0aGUgJ2V4cG9ydCcgY2FwYWJpbGl0eSwgaW5zdHJ1Y3RpbmcgR2l0IHRvIGxvYWQgdGhlCisJbWFya3Mgc3BlY2lmaWVkIGluIDxmaWxlPiBiZWZvcmUgcHJvY2Vzc2luZyBhbnkgaW5wdXQuIEZvciBkZXRhaWxzLAorCXJlYWQgdXAgb24gJy0taW1wb3J0LW1hcmtzPTxmaWxlPicgaW4gbGlua2dpdDpnaXQtZmFzdC1leHBvcnRbMV0uCisKKydzaWduZWQtdGFncyc6OgorCVRoaXMgbW9kaWZpZXMgdGhlICdleHBvcnQnIGNhcGFiaWxpdHksIGluc3RydWN0aW5nIEdpdCB0byBwYXNzCisJJy0tc2lnbmVkLXRhZ3M9dmVyYmF0aW0nIHRvIGxpbmtnaXQ6Z2l0LWZhc3QtZXhwb3J0WzFdLiAgSW4gdGhlCisJYWJzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHksIEdpdCB3aWxsIHVzZSAnLS1zaWduZWQtdGFncz13YXJuLXN0cmlwJy4KKworCisKK0NPTU1BTkRTCistLS0tLS0tLQorCitDb21tYW5kcyBhcmUgZ2l2ZW4gYnkgdGhlIGNhbGxlciBvbiB0aGUgaGVscGVyJ3Mgc3RhbmRhcmQgaW5wdXQsIG9uZSBwZXIgbGluZS4KKworJ2NhcGFiaWxpdGllcyc6OgorCUxpc3RzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGhlbHBlciwgb25lIHBlciBsaW5lLCBlbmRpbmcKKwl3aXRoIGEgYmxhbmsgbGluZS4gRWFjaCBjYXBhYmlsaXR5IG1heSBiZSBwcmVjZWRlZCB3aXRoICcqJywKKwl3aGljaCBtYXJrcyB0aGVtIG1hbmRhdG9yeSBmb3IgR2l0IHZlcnNpb25zIHVzaW5nIHRoZSByZW1vdGUKKwloZWxwZXIgdG8gdW5kZXJzdGFuZC4gQW55IHVua25vd24gbWFuZGF0b3J5IGNhcGFiaWxpdHkgaXMgYQorCWZhdGFsIGVycm9yLgorKworU3VwcG9ydCBmb3IgdGhpcyBjb21tYW5kIGlzIG1hbmRhdG9yeS4KKworJ2xpc3QnOjoKKwlMaXN0cyB0aGUgcmVmcywgb25lIHBlciBsaW5lLCBpbiB0aGUgZm9ybWF0ICI8dmFsdWU+IDxuYW1lPgorCVs8YXR0cj4gLi4uXSIuIFRoZSB2YWx1ZSBtYXkgYmUgYSBoZXggc2hhMSBoYXNoLCAiQDxkZXN0PiIgZm9yCisJYSBzeW1yZWYsIG9yICI/IiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBoZWxwZXIgY291bGQgbm90IGdldCB0aGUKKwl2YWx1ZSBvZiB0aGUgcmVmLiBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXMgZm9sbG93cworCXRoZSBuYW1lOyB1bnJlY29nbml6ZWQgYXR0cmlidXRlcyBhcmUgaWdub3JlZC4gVGhlIGxpc3QgZW5kcworCXdpdGggYSBibGFuayBsaW5lLgorKworU2VlIFJFRiBMSVNUIEFUVFJJQlVURVMgZm9yIGEgbGlzdCBvZiBjdXJyZW50bHkgZGVmaW5lZCBhdHRyaWJ1dGVzLgorKworU3VwcG9ydGVkIGlmIHRoZSBoZWxwZXIgaGFzIHRoZSAiZmV0Y2giIG9yICJpbXBvcnQiIGNhcGFiaWxpdHkuCisKKydsaXN0IGZvci1wdXNoJzo6CisJU2ltaWxhciB0byAnbGlzdCcsIGV4Y2VwdCB0aGF0IGl0IGlzIHVzZWQgaWYgYW5kIG9ubHkgaWYKKwl0aGUgY2FsbGVyIHdhbnRzIHRvIHRoZSByZXN1bHRpbmcgcmVmIGxpc3QgdG8gcHJlcGFyZQorCXB1c2ggY29tbWFuZHMuCisJQSBoZWxwZXIgc3VwcG9ydGluZyBib3RoIHB1c2ggYW5kIGZldGNoIGNhbiB1c2UgdGhpcworCXRvIGRpc3Rpbmd1aXNoIGZvciB3aGljaCBvcGVyYXRpb24gdGhlIG91dHB1dCBvZiAnbGlzdCcKKwlpcyBnb2luZyB0byBiZSB1c2VkLCBwb3NzaWJseSByZWR1Y2luZyB0aGUgYW1vdW50CisJb2Ygd29yayB0aGF0IG5lZWRzIHRvIGJlIHBlcmZvcm1lZC4KKysKK1N1cHBvcnRlZCBpZiB0aGUgaGVscGVyIGhhcyB0aGUgInB1c2giIG9yICJleHBvcnQiIGNhcGFiaWxpdHkuCisKKydvcHRpb24nIDxuYW1lPiA8dmFsdWU+OjoKKwlTZXRzIHRoZSB0cmFuc3BvcnQgaGVscGVyIG9wdGlvbiA8bmFtZT4gdG8gPHZhbHVlPi4gIE91dHB1dHMgYQorCXNpbmdsZSBsaW5lIGNvbnRhaW5pbmcgb25lIG9mICdvaycgKG9wdGlvbiBzdWNjZXNzZnVsbHkgc2V0KSwKKwkndW5zdXBwb3J0ZWQnIChvcHRpb24gbm90IHJlY29nbml6ZWQpIG9yICdlcnJvciA8bXNnPicKKwkob3B0aW9uIDxuYW1lPiBpcyBzdXBwb3J0ZWQgYnV0IDx2YWx1ZT4gaXMgbm90IHZhbGlkCisJZm9yIGl0KS4gIE9wdGlvbnMgc2hvdWxkIGJlIHNldCBiZWZvcmUgb3RoZXIgY29tbWFuZHMsCisJYW5kIG1heSBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRob3NlIGNvbW1hbmRzLgorKworU2VlIE9QVElPTlMgZm9yIGEgbGlzdCBvZiBjdXJyZW50bHkgZGVmaW5lZCBvcHRpb25zLgorKworU3VwcG9ydGVkIGlmIHRoZSBoZWxwZXIgaGFzIHRoZSAib3B0aW9uIiBjYXBhYmlsaXR5LgorCisnZmV0Y2gnIDxzaGExPiA8bmFtZT46OgorCUZldGNoZXMgdGhlIGdpdmVuIG9iamVjdCwgd3JpdGluZyB0aGUgbmVjZXNzYXJ5IG9iamVjdHMKKwl0byB0aGUgZGF0YWJhc2UuICBGZXRjaCBjb21tYW5kcyBhcmUgc2VudCBpbiBhIGJhdGNoLCBvbmUKKwlwZXIgbGluZSwgdGVybWluYXRlZCB3aXRoIGEgYmxhbmsgbGluZS4KKwlPdXRwdXRzIGEgc2luZ2xlIGJsYW5rIGxpbmUgd2hlbiBhbGwgZmV0Y2ggY29tbWFuZHMgaW4gdGhlCisJc2FtZSBiYXRjaCBhcmUgY29tcGxldGUuIE9ubHkgb2JqZWN0cyB3aGljaCB3ZXJlIHJlcG9ydGVkCisJaW4gdGhlIG91dHB1dCBvZiAnbGlzdCcgd2l0aCBhIHNoYTEgbWF5IGJlIGZldGNoZWQgdGhpcyB3YXkuCisrCitPcHRpb25hbGx5IG1heSBvdXRwdXQgYSAnbG9jayA8ZmlsZT4nIGxpbmUgaW5kaWNhdGluZyBhIGZpbGUgdW5kZXIKK0dJVF9ESVIvb2JqZWN0cy9wYWNrIHdoaWNoIGlzIGtlZXBpbmcgYSBwYWNrIHVudGlsIHJlZnMgY2FuIGJlCitzdWl0YWJseSB1cGRhdGVkLgorKworSWYgb3B0aW9uICdjaGVjay1jb25uZWN0aXZpdHknIGlzIHJlcXVlc3RlZCwgdGhlIGhlbHBlciBtdXN0IG91dHB1dAorJ2Nvbm5lY3Rpdml0eS1vaycgaWYgdGhlIGNsb25lIGlzIHNlbGYtY29udGFpbmVkIGFuZCBjb25uZWN0ZWQuCisrCitTdXBwb3J0ZWQgaWYgdGhlIGhlbHBlciBoYXMgdGhlICJmZXRjaCIgY2FwYWJpbGl0eS4KKworJ3B1c2gnICs8c3JjPjo8ZHN0Pjo6CisJUHVzaGVzIHRoZSBnaXZlbiBsb2NhbCA8c3JjPiBjb21taXQgb3IgYnJhbmNoIHRvIHRoZQorCXJlbW90ZSBicmFuY2ggZGVzY3JpYmVkIGJ5IDxkc3Q+LiAgQSBiYXRjaCBzZXF1ZW5jZSBvZgorCW9uZSBvciBtb3JlICdwdXNoJyBjb21tYW5kcyBpcyB0ZXJtaW5hdGVkIHdpdGggYSBibGFuayBsaW5lCisJKGlmIHRoZXJlIGlzIG9ubHkgb25lIHJlZmVyZW5jZSB0byBwdXNoLCBhIHNpbmdsZSAncHVzaCcgY29tbWFuZAorCWlzIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSkuIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHdvdWxkCisJYmUgdHdvIGJhdGNoZXMgb2YgJ3B1c2gnLCB0aGUgZmlyc3QgYXNraW5nIHRoZSByZW1vdGUtaGVscGVyCisJdG8gcHVzaCB0aGUgbG9jYWwgcmVmICdtYXN0ZXInIHRvIHRoZSByZW1vdGUgcmVmICdtYXN0ZXInIGFuZAorCXRoZSBsb2NhbCAnSEVBRCcgdG8gdGhlIHJlbW90ZSAnYnJhbmNoJywgYW5kIHRoZSBzZWNvbmQKKwlhc2tpbmcgdG8gcHVzaCByZWYgJ2ZvbycgdG8gcmVmICdiYXInIChmb3JjZWQgdXBkYXRlIHJlcXVlc3RlZAorCWJ5IHRoZSAnKycpLgorKworLS0tLS0tLS0tLS0tCitwdXNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyCitwdXNoIEhFQUQ6cmVmcy9oZWFkcy9icmFuY2gKK1xuCitwdXNoICtyZWZzL2hlYWRzL2ZvbzpyZWZzL2hlYWRzL2JhcgorXG4KKy0tLS0tLS0tLS0tLQorKworWmVybyBvciBtb3JlIHByb3RvY29sIG9wdGlvbnMgbWF5IGJlIGVudGVyZWQgYWZ0ZXIgdGhlIGxhc3QgJ3B1c2gnCitjb21tYW5kLCBiZWZvcmUgdGhlIGJhdGNoJ3MgdGVybWluYXRpbmcgYmxhbmsgbGluZS4KKysKK1doZW4gdGhlIHB1c2ggaXMgY29tcGxldGUsIG91dHB1dHMgb25lIG9yIG1vcmUgJ29rIDxkc3Q+JyBvcgorJ2Vycm9yIDxkc3Q+IDx3aHk+PycgbGluZXMgdG8gaW5kaWNhdGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mCitlYWNoIHB1c2hlZCByZWYuICBUaGUgc3RhdHVzIHJlcG9ydCBvdXRwdXQgaXMgdGVybWluYXRlZCBieQorYSBibGFuayBsaW5lLiAgVGhlIG9wdGlvbiBmaWVsZCA8d2h5PiBtYXkgYmUgcXVvdGVkIGluIGEgQworc3R5bGUgc3RyaW5nIGlmIGl0IGNvbnRhaW5zIGFuIExGLgorKworU3VwcG9ydGVkIGlmIHRoZSBoZWxwZXIgaGFzIHRoZSAicHVzaCIgY2FwYWJpbGl0eS4KKworJ2ltcG9ydCcgPG5hbWU+OjoKKwlQcm9kdWNlcyBhIGZhc3QtaW1wb3J0IHN0cmVhbSB3aGljaCBpbXBvcnRzIHRoZSBjdXJyZW50IHZhbHVlCisJb2YgdGhlIG5hbWVkIHJlZi4gSXQgbWF5IGFkZGl0aW9uYWxseSBpbXBvcnQgb3RoZXIgcmVmcyBhcworCW5lZWRlZCB0byBjb25zdHJ1Y3QgdGhlIGhpc3RvcnkgZWZmaWNpZW50bHkuIFRoZSBzY3JpcHQgd3JpdGVzCisJdG8gYSBoZWxwZXItc3BlY2lmaWMgcHJpdmF0ZSBuYW1lc3BhY2UuIFRoZSB2YWx1ZSBvZiB0aGUgbmFtZWQKKwlyZWYgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gYSBsb2NhdGlvbiBpbiB0aGlzIG5hbWVzcGFjZSBkZXJpdmVkCisJYnkgYXBwbHlpbmcgdGhlIHJlZnNwZWNzIGZyb20gdGhlICJyZWZzcGVjIiBjYXBhYmlsaXR5IHRvIHRoZQorCW5hbWUgb2YgdGhlIHJlZi4KKysKK0VzcGVjaWFsbHkgdXNlZnVsIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggYSBmb3JlaWduIHZlcnNpb25pbmcKK3N5c3RlbS4KKysKK0p1c3QgbGlrZSAncHVzaCcsIGEgYmF0Y2ggc2VxdWVuY2Ugb2Ygb25lIG9yIG1vcmUgJ2ltcG9ydCcgaXMKK3Rlcm1pbmF0ZWQgd2l0aCBhIGJsYW5rIGxpbmUuIEZvciBlYWNoIGJhdGNoIG9mICdpbXBvcnQnLCB0aGUgcmVtb3RlCitoZWxwZXIgc2hvdWxkIHByb2R1Y2UgYSBmYXN0LWltcG9ydCBzdHJlYW0gdGVybWluYXRlZCBieSBhICdkb25lJworY29tbWFuZC4KKysKK05vdGUgdGhhdCBpZiB0aGUgJ2JpZGktaW1wb3J0JyBjYXBhYmlsaXR5IGlzIHVzZWQgdGhlIGNvbXBsZXRlIGJhdGNoCitzZXF1ZW5jZSBoYXMgdG8gYmUgYnVmZmVyZWQgYmVmb3JlIHN0YXJ0aW5nIHRvIHNlbmQgZGF0YSB0byBmYXN0LWltcG9ydAordG8gcHJldmVudCBtaXhpbmcgb2YgY29tbWFuZHMgYW5kIGZhc3QtaW1wb3J0IHJlc3BvbnNlcyBvbiB0aGUgaGVscGVyJ3MKK3N0ZGluLgorKworU3VwcG9ydGVkIGlmIHRoZSBoZWxwZXIgaGFzIHRoZSAiaW1wb3J0IiBjYXBhYmlsaXR5LgorCisnZXhwb3J0Jzo6CisJSW5zdHJ1Y3RzIHRoZSByZW1vdGUgaGVscGVyIHRoYXQgYW55IHN1YnNlcXVlbnQgaW5wdXQgaXMKKwlwYXJ0IG9mIGEgZmFzdC1pbXBvcnQgc3RyZWFtIChnZW5lcmF0ZWQgYnkgJ2dpdCBmYXN0LWV4cG9ydCcpCisJY29udGFpbmluZyBvYmplY3RzIHdoaWNoIHNob3VsZCBiZSBwdXNoZWQgdG8gdGhlIHJlbW90ZS4KKysKK0VzcGVjaWFsbHkgdXNlZnVsIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggYSBmb3JlaWduIHZlcnNpb25pbmcKK3N5c3RlbS4KKysKK1RoZSAnZXhwb3J0LW1hcmtzJyBhbmQgJ2ltcG9ydC1tYXJrcycgY2FwYWJpbGl0aWVzLCBpZiBzcGVjaWZpZWQsCithZmZlY3QgdGhpcyBjb21tYW5kIGluIHNvIGZhciBhcyB0aGV5IGFyZSBwYXNzZWQgb24gdG8gJ2dpdAorZmFzdC1leHBvcnQnLCB3aGljaCB0aGVuIHdpbGwgbG9hZC9zdG9yZSBhIHRhYmxlIG9mIG1hcmtzIGZvcgorbG9jYWwgb2JqZWN0cy4gVGhpcyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgZm9yIGluY3JlbWVudGFsCitvcGVyYXRpb25zLgorKworU3VwcG9ydGVkIGlmIHRoZSBoZWxwZXIgaGFzIHRoZSAiZXhwb3J0IiBjYXBhYmlsaXR5LgorCisnY29ubmVjdCcgPHNlcnZpY2U+OjoKKwlDb25uZWN0cyB0byBnaXZlbiBzZXJ2aWNlLiBTdGFuZGFyZCBpbnB1dCBhbmQgc3RhbmRhcmQgb3V0cHV0CisJb2YgaGVscGVyIGFyZSBjb25uZWN0ZWQgdG8gc3BlY2lmaWVkIHNlcnZpY2UgKGdpdCBwcmVmaXggaXMKKwlpbmNsdWRlZCBpbiBzZXJ2aWNlIG5hbWUgc28gZS5nLiBmZXRjaGluZyB1c2VzICdnaXQtdXBsb2FkLXBhY2snCisJYXMgc2VydmljZSkgb24gcmVtb3RlIHNpZGUuIFZhbGlkIHJlcGxpZXMgdG8gdGhpcyBjb21tYW5kIGFyZQorCWVtcHR5IGxpbmUgKGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQpLCAnZmFsbGJhY2snIChubyBzbWFydAorCXRyYW5zcG9ydCBzdXBwb3J0LCBmYWxsIGJhY2sgdG8gZHVtYiB0cmFuc3BvcnRzKSBhbmQganVzdAorCWV4aXRpbmcgd2l0aCBlcnJvciBtZXNzYWdlIHByaW50ZWQgKGNhbid0IGNvbm5lY3QsIGRvbid0CisJYm90aGVyIHRyeWluZyB0byBmYWxsIGJhY2spLiBBZnRlciBsaW5lIGZlZWQgdGVybWluYXRpbmcgdGhlCisJcG9zaXRpdmUgKGVtcHR5KSByZXNwb25zZSwgdGhlIG91dHB1dCBvZiBzZXJ2aWNlIHN0YXJ0cy4gQWZ0ZXIKKwl0aGUgY29ubmVjdGlvbiBlbmRzLCB0aGUgcmVtb3RlIGhlbHBlciBleGl0cy4KKysKK1N1cHBvcnRlZCBpZiB0aGUgaGVscGVyIGhhcyB0aGUgImNvbm5lY3QiIGNhcGFiaWxpdHkuCisKK0lmIGEgZmF0YWwgZXJyb3Igb2NjdXJzLCB0aGUgcHJvZ3JhbSB3cml0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgdG8KK3N0ZGVyciBhbmQgZXhpdHMuIFRoZSBjYWxsZXIgc2hvdWxkIGV4cGVjdCB0aGF0IGEgc3VpdGFibGUgZXJyb3IKK21lc3NhZ2UgaGFzIGJlZW4gcHJpbnRlZCBpZiB0aGUgY2hpbGQgY2xvc2VzIHRoZSBjb25uZWN0aW9uIHdpdGhvdXQKK2NvbXBsZXRpbmcgYSB2YWxpZCByZXNwb25zZSBmb3IgdGhlIGN1cnJlbnQgY29tbWFuZC4KKworQWRkaXRpb25hbCBjb21tYW5kcyBtYXkgYmUgc3VwcG9ydGVkLCBhcyBtYXkgYmUgZGV0ZXJtaW5lZCBmcm9tCitjYXBhYmlsaXRpZXMgcmVwb3J0ZWQgYnkgdGhlIGhlbHBlci4KKworUkVGIExJU1QgQVRUUklCVVRFUworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgJ2xpc3QnIGNvbW1hbmQgcHJvZHVjZXMgYSBsaXN0IG9mIHJlZnMgaW4gd2hpY2ggZWFjaCByZWYKK21heSBiZSBmb2xsb3dlZCBieSBhIGxpc3Qgb2YgYXR0cmlidXRlcy4gVGhlIGZvbGxvd2luZyByZWYgbGlzdAorYXR0cmlidXRlcyBhcmUgZGVmaW5lZC4KKworJ3VuY2hhbmdlZCc6OgorCVRoaXMgcmVmIGlzIHVuY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBpbXBvcnQgb3IgZmV0Y2gsIGFsdGhvdWdoCisJdGhlIGhlbHBlciBjYW5ub3QgbmVjZXNzYXJpbHkgZGV0ZXJtaW5lIHdoYXQgdmFsdWUgdGhhdCBwcm9kdWNlZC4KKworT1BUSU9OUworLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIGRlZmluZWQgYW5kICh1bmRlciBzdWl0YWJsZSBjaXJjdW1zdGFuY2VzKQorc2V0IGJ5IEdpdCBpZiB0aGUgcmVtb3RlIGhlbHBlciBoYXMgdGhlICdvcHRpb24nIGNhcGFiaWxpdHkuCisKKydvcHRpb24gdmVyYm9zaXR5JyA8bj46OgorCUNoYW5nZXMgdGhlIHZlcmJvc2l0eSBvZiBtZXNzYWdlcyBkaXNwbGF5ZWQgYnkgdGhlIGhlbHBlci4KKwlBIHZhbHVlIG9mIDAgZm9yIDxuPiBtZWFucyB0aGF0IHByb2Nlc3NlcyBvcGVyYXRlCisJcXVpZXRseSwgYW5kIHRoZSBoZWxwZXIgcHJvZHVjZXMgb25seSBlcnJvciBvdXRwdXQuCisJMSBpcyB0aGUgZGVmYXVsdCBsZXZlbCBvZiB2ZXJib3NpdHksIGFuZCBoaWdoZXIgdmFsdWVzCisJb2YgPG4+IGNvcnJlc3BvbmQgdG8gdGhlIG51bWJlciBvZiAtdiBmbGFncyBwYXNzZWQgb24gdGhlCisJY29tbWFuZCBsaW5lLgorCisnb3B0aW9uIHByb2dyZXNzJyB7J3RydWUnfCdmYWxzZSd9OjoKKwlFbmFibGVzIChvciBkaXNhYmxlcykgcHJvZ3Jlc3MgbWVzc2FnZXMgZGlzcGxheWVkIGJ5IHRoZQorCXRyYW5zcG9ydCBoZWxwZXIgZHVyaW5nIGEgY29tbWFuZC4KKworJ29wdGlvbiBkZXB0aCcgPGRlcHRoPjo6CisJRGVlcGVucyB0aGUgaGlzdG9yeSBvZiBhIHNoYWxsb3cgcmVwb3NpdG9yeS4KKworJ29wdGlvbiBmb2xsb3d0YWdzJyB7J3RydWUnfCdmYWxzZSd9OjoKKwlJZiBlbmFibGVkIHRoZSBoZWxwZXIgc2hvdWxkIGF1dG9tYXRpY2FsbHkgZmV0Y2ggYW5ub3RhdGVkCisJdGFnIG9iamVjdHMgaWYgdGhlIG9iamVjdCB0aGUgdGFnIHBvaW50cyBhdCB3YXMgdHJhbnNmZXJyZWQKKwlkdXJpbmcgdGhlIGZldGNoIGNvbW1hbmQuICBJZiB0aGUgdGFnIGlzIG5vdCBmZXRjaGVkIGJ5CisJdGhlIGhlbHBlciBhIHNlY29uZCBmZXRjaCBjb21tYW5kIHdpbGwgdXN1YWxseSBiZSBzZW50IHRvCisJYXNrIGZvciB0aGUgdGFnIHNwZWNpZmljYWxseS4gIFNvbWUgaGVscGVycyBtYXkgYmUgYWJsZSB0bworCXVzZSB0aGlzIG9wdGlvbiB0byBhdm9pZCBhIHNlY29uZCBuZXR3b3JrIGNvbm5lY3Rpb24uCisKKydvcHRpb24gZHJ5LXJ1bicgeyd0cnVlJ3wnZmFsc2UnfToKKwlJZiB0cnVlLCBwcmV0ZW5kIHRoZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwKKwlidXQgZG9uJ3QgYWN0dWFsbHkgY2hhbmdlIGFueSByZXBvc2l0b3J5IGRhdGEuCUZvciBtb3N0CisJaGVscGVycyB0aGlzIG9ubHkgYXBwbGllcyB0byB0aGUgJ3B1c2gnLCBpZiBzdXBwb3J0ZWQuCisKKydvcHRpb24gc2VydnBhdGggPGMtc3R5bGUtcXVvdGVkLXBhdGg+Jzo6CisJU2V0cyBzZXJ2aWNlIHBhdGggKC0tdXBsb2FkLXBhY2ssIC0tcmVjZWl2ZS1wYWNrIGV0Yy4pIGZvcgorCW5leHQgY29ubmVjdC4gUmVtb3RlIGhlbHBlciBtYXkgc3VwcG9ydCB0aGlzIG9wdGlvbiwgYnV0CisJbXVzdCBub3QgcmVseSBvbiB0aGlzIG9wdGlvbiBiZWluZyBzZXQgYmVmb3JlCisJY29ubmVjdCByZXF1ZXN0IG9jY3Vycy4KKworJ29wdGlvbiBjaGVjay1jb25uZWN0aXZpdHknIHsndHJ1ZSd8J2ZhbHNlJ306OgorCVJlcXVlc3QgdGhlIGhlbHBlciB0byBjaGVjayBjb25uZWN0aXZpdHkgb2YgYSBjbG9uZS4KKworJ29wdGlvbiBmb3JjZScgeyd0cnVlJ3wnZmFsc2UnfTo6CisJUmVxdWVzdCB0aGUgaGVscGVyIHRvIHBlcmZvcm0gYSBmb3JjZSB1cGRhdGUuICBEZWZhdWx0cyB0bworCSdmYWxzZScuCisKKydvcHRpb24gY2xvbmluZyB7J3RydWUnfCdmYWxzZSd9OjoKKwlOb3RpZnkgdGhlIGhlbHBlciB0aGlzIGlzIGEgY2xvbmUgcmVxdWVzdCAoaS5lLiB0aGUgY3VycmVudAorCXJlcG9zaXRvcnkgaXMgZ3VhcmFudGVlZCBlbXB0eSkuCisKKydvcHRpb24gdXBkYXRlLXNoYWxsb3cgeyd0cnVlJ3wnZmFsc2UnfTo6CisJQWxsb3cgdG8gZXh0ZW5kIC5naXQvc2hhbGxvdyBpZiB0aGUgbmV3IHJlZnMgcmVxdWlyZSBpdC4KKworJ29wdGlvbiBwdXNoY2VydCB7J3RydWUnfCdmYWxzZSd9OjoKKwlHUEcgc2lnbiBwdXNoZXMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcmVtb3RlWzFdCisKK2xpbmtnaXQ6Z2l0LXJlbW90ZS1leHRbMV0KKworbGlua2dpdDpnaXQtcmVtb3RlLWZkWzFdCisKK2xpbmtnaXQ6Z2l0LXJlbW90ZS10ZXN0Z2l0WzFdCisKK2xpbmtnaXQ6Z2l0LWZhc3QtaW1wb3J0WzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXRyZXBvc2l0b3J5LWxheW91dC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHJlcG9zaXRvcnktbGF5b3V0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzdlZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXRyZXBvc2l0b3J5LWxheW91dC50eHQKQEAgLTAsMCArMSwyOTIgQEAKK2dpdHJlcG9zaXRvcnktbGF5b3V0KDUpCis9PT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRyZXBvc2l0b3J5LWxheW91dCAtIEdpdCBSZXBvc2l0b3J5IExheW91dAorCitTWU5PUFNJUworLS0tLS0tLS0KKyRHSVRfRElSLyoKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0EgR2l0IHJlcG9zaXRvcnkgY29tZXMgaW4gdHdvIGRpZmZlcmVudCBmbGF2b3VyczoKKworICogYSBgLmdpdGAgZGlyZWN0b3J5IGF0IHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWU7CisKKyAqIGEgYDxwcm9qZWN0Pi5naXRgIGRpcmVjdG9yeSB0aGF0IGlzIGEgJ2JhcmUnIHJlcG9zaXRvcnkKKyAgIChpLmUuIHdpdGhvdXQgaXRzIG93biB3b3JraW5nIHRyZWUpLCB0aGF0IGlzIHR5cGljYWxseSB1c2VkIGZvcgorICAgZXhjaGFuZ2luZyBoaXN0b3JpZXMgd2l0aCBvdGhlcnMgYnkgcHVzaGluZyBpbnRvIGl0IGFuZCBmZXRjaGluZworICAgZnJvbSBpdC4KKworKk5vdGUqOiBBbHNvIHlvdSBjYW4gaGF2ZSBhIHBsYWluIHRleHQgZmlsZSBgLmdpdGAgYXQgdGhlIHJvb3Qgb2YKK3lvdXIgd29ya2luZyB0cmVlLCBjb250YWluaW5nIGBnaXRkaXI6IDxwYXRoPmAgdG8gcG9pbnQgYXQgdGhlIHJlYWwKK2RpcmVjdG9yeSB0aGF0IGhhcyB0aGUgcmVwb3NpdG9yeS4gIFRoaXMgbWVjaGFuaXNtIGlzIG9mdGVuIHVzZWQgZm9yCithIHdvcmtpbmcgdHJlZSBvZiBhIHN1Ym1vZHVsZSBjaGVja291dCwgdG8gYWxsb3cgeW91IGluIHRoZQorY29udGFpbmluZyBzdXBlcnByb2plY3QgdG8gYGdpdCBjaGVja291dGAgYSBicmFuY2ggdGhhdCBkb2VzIG5vdAoraGF2ZSB0aGUgc3VibW9kdWxlLiAgVGhlIGBjaGVja291dGAgaGFzIHRvIHJlbW92ZSB0aGUgZW50aXJlCitzdWJtb2R1bGUgd29ya2luZyB0cmVlLCB3aXRob3V0IGxvc2luZyB0aGUgc3VibW9kdWxlIHJlcG9zaXRvcnkuCisKK1RoZXNlIHRoaW5ncyBtYXkgZXhpc3QgaW4gYSBHaXQgcmVwb3NpdG9yeS4KKworb2JqZWN0czo6CisJT2JqZWN0IHN0b3JlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcG9zaXRvcnkuICBVc3VhbGx5CisJYW4gb2JqZWN0IHN0b3JlIGlzIHNlbGYgc3VmZmljaWVudCAoaS5lLiBhbGwgdGhlIG9iamVjdHMKKwl0aGF0IGFyZSByZWZlcnJlZCB0byBieSBhbiBvYmplY3QgZm91bmQgaW4gaXQgYXJlIGFsc28KKwlmb3VuZCBpbiBpdCksIGJ1dCB0aGVyZSBhcmUgYSBmZXcgd2F5cyB0byB2aW9sYXRlIGl0LgorKworLiBZb3UgY291bGQgaGF2ZSBhbiBpbmNvbXBsZXRlIGJ1dCBsb2NhbGx5IHVzYWJsZSByZXBvc2l0b3J5CitieSBjcmVhdGluZyBhIHNoYWxsb3cgY2xvbmUuICBTZWUgbGlua2dpdDpnaXQtY2xvbmVbMV0uCisuIFlvdSBjb3VsZCBiZSB1c2luZyB0aGUgYG9iamVjdHMvaW5mby9hbHRlcm5hdGVzYCBvcgorYCRHSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFU2AgbWVjaGFuaXNtcyB0byAnYm9ycm93Jworb2JqZWN0cyBmcm9tIG90aGVyIG9iamVjdCBzdG9yZXMuICBBIHJlcG9zaXRvcnkgd2l0aCB0aGlzIGtpbmQKK29mIGluY29tcGxldGUgb2JqZWN0IHN0b3JlIGlzIG5vdCBzdWl0YWJsZSB0byBiZSBwdWJsaXNoZWQgZm9yCit1c2Ugd2l0aCBkdW1iIHRyYW5zcG9ydHMgYnV0IG90aGVyd2lzZSBpcyBPSyBhcyBsb25nIGFzCitgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXNgIHBvaW50cyBhdCB0aGUgb2JqZWN0IHN0b3JlcyBpdAorYm9ycm93cyBmcm9tLgorKworVGhpcyBkaXJlY3RvcnkgaXMgaWdub3JlZCBpZiAkR0lUX0NPTU1PTl9ESVIgaXMgc2V0IGFuZAorIiRHSVRfQ09NTU9OX0RJUi9vYmplY3RzIiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKworb2JqZWN0cy9bMC05YS1mXVswLTlhLWZdOjoKKwlBIG5ld2x5IGNyZWF0ZWQgb2JqZWN0IGlzIHN0b3JlZCBpbiBpdHMgb3duIGZpbGUuCisJVGhlIG9iamVjdHMgYXJlIHNwbGF5ZWQgb3ZlciAyNTYgc3ViZGlyZWN0b3JpZXMgdXNpbmcKKwl0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgb2YgdGhlIHNoYTEgb2JqZWN0IG5hbWUgdG8KKwlrZWVwIHRoZSBudW1iZXIgb2YgZGlyZWN0b3J5IGVudHJpZXMgaW4gYG9iamVjdHNgCisJaXRzZWxmIHRvIGEgbWFuYWdlYWJsZSBudW1iZXIuIE9iamVjdHMgZm91bmQKKwloZXJlIGFyZSBvZnRlbiBjYWxsZWQgJ3VucGFja2VkJyAob3IgJ2xvb3NlJykgb2JqZWN0cy4KKworb2JqZWN0cy9wYWNrOjoKKwlQYWNrcyAoZmlsZXMgdGhhdCBzdG9yZSBtYW55IG9iamVjdCBpbiBjb21wcmVzc2VkIGZvcm0sCisJYWxvbmcgd2l0aCBpbmRleCBmaWxlcyB0byBhbGxvdyB0aGVtIHRvIGJlIHJhbmRvbWx5CisJYWNjZXNzZWQpIGFyZSBmb3VuZCBpbiB0aGlzIGRpcmVjdG9yeS4KKworb2JqZWN0cy9pbmZvOjoKKwlBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvYmplY3Qgc3RvcmUgaXMKKwlyZWNvcmRlZCBpbiB0aGlzIGRpcmVjdG9yeS4KKworb2JqZWN0cy9pbmZvL3BhY2tzOjoKKwlUaGlzIGZpbGUgaXMgdG8gaGVscCBkdW1iIHRyYW5zcG9ydHMgZGlzY292ZXIgd2hhdCBwYWNrcworCWFyZSBhdmFpbGFibGUgaW4gdGhpcyBvYmplY3Qgc3RvcmUuICBXaGVuZXZlciBhIHBhY2sgaXMKKwlhZGRlZCBvciByZW1vdmVkLCBgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mb2Agc2hvdWxkIGJlIHJ1bgorCXRvIGtlZXAgdGhpcyBmaWxlIHVwLXRvLWRhdGUgaWYgdGhlIHJlcG9zaXRvcnkgaXMKKwlwdWJsaXNoZWQgZm9yIGR1bWIgdHJhbnNwb3J0cy4gICdnaXQgcmVwYWNrJyBkb2VzIHRoaXMKKwlieSBkZWZhdWx0LgorCitvYmplY3RzL2luZm8vYWx0ZXJuYXRlczo6CisJVGhpcyBmaWxlIHJlY29yZHMgcGF0aHMgdG8gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMgdGhhdAorCXRoaXMgb2JqZWN0IHN0b3JlIGJvcnJvd3Mgb2JqZWN0cyBmcm9tLCBvbmUgcGF0aG5hbWUgcGVyCisJbGluZS4gTm90ZSB0aGF0IG5vdCBvbmx5IG5hdGl2ZSBHaXQgdG9vbHMgdXNlIGl0IGxvY2FsbHksCisJYnV0IHRoZSBIVFRQIGZldGNoZXIgYWxzbyB0cmllcyB0byB1c2UgaXQgcmVtb3RlbHk7IHRoaXMKKwl3aWxsIHVzdWFsbHkgd29yayBpZiB5b3UgaGF2ZSByZWxhdGl2ZSBwYXRocyAocmVsYXRpdmUKKwl0byB0aGUgb2JqZWN0IGRhdGFiYXNlLCBub3QgdG8gdGhlIHJlcG9zaXRvcnkhKSBpbiB5b3VyCisJYWx0ZXJuYXRlcyBmaWxlLCBidXQgaXQgd2lsbCBub3Qgd29yayBpZiB5b3UgdXNlIGFic29sdXRlCisJcGF0aHMgdW5sZXNzIHRoZSBhYnNvbHV0ZSBwYXRoIGluIGZpbGVzeXN0ZW0gYW5kIHdlYiBVUkwKKwlpcyB0aGUgc2FtZS4gU2VlIGFsc28gJ29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMnLgorCitvYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzOjoKKwlUaGlzIGZpbGUgcmVjb3JkcyBVUkxzIHRvIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmVzIHRoYXQKKwl0aGlzIG9iamVjdCBzdG9yZSBib3Jyb3dzIG9iamVjdHMgZnJvbSwgdG8gYmUgdXNlZCB3aGVuCisJdGhlIHJlcG9zaXRvcnkgaXMgZmV0Y2hlZCBvdmVyIEhUVFAuCisKK3JlZnM6OgorCVJlZmVyZW5jZXMgYXJlIHN0b3JlZCBpbiBzdWJkaXJlY3RvcmllcyBvZiB0aGlzCisJZGlyZWN0b3J5LiAgVGhlICdnaXQgcHJ1bmUnIGNvbW1hbmQga25vd3MgdG8gcHJlc2VydmUKKwlvYmplY3RzIHJlYWNoYWJsZSBmcm9tIHJlZnMgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnkgYW5kCisJaXRzIHN1YmRpcmVjdG9yaWVzLiBUaGlzIGRpcmVjdG9yeSBpcyBpZ25vcmVkIGlmICRHSVRfQ09NTU9OX0RJUgorCWlzIHNldCBhbmQgIiRHSVRfQ09NTU9OX0RJUi9yZWZzIiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKworcmVmcy9oZWFkcy9gbmFtZWA6OgorCXJlY29yZHMgdGlwLW9mLXRoZS10cmVlIGNvbW1pdCBvYmplY3RzIG9mIGJyYW5jaCBgbmFtZWAKKworcmVmcy90YWdzL2BuYW1lYDo6CisJcmVjb3JkcyBhbnkgb2JqZWN0IG5hbWUgKG5vdCBuZWNlc3NhcmlseSBhIGNvbW1pdAorCW9iamVjdCwgb3IgYSB0YWcgb2JqZWN0IHRoYXQgcG9pbnRzIGF0IGEgY29tbWl0IG9iamVjdCkuCisKK3JlZnMvcmVtb3Rlcy9gbmFtZWA6OgorCXJlY29yZHMgdGlwLW9mLXRoZS10cmVlIGNvbW1pdCBvYmplY3RzIG9mIGJyYW5jaGVzIGNvcGllZAorCWZyb20gYSByZW1vdGUgcmVwb3NpdG9yeS4KKworcmVmcy9yZXBsYWNlL2A8b2JqLXNoYTE+YDo6CisJcmVjb3JkcyB0aGUgU0hBLTEgb2YgdGhlIG9iamVjdCB0aGF0IHJlcGxhY2VzIGA8b2JqLXNoYTE+YC4KKwlUaGlzIGlzIHNpbWlsYXIgdG8gaW5mby9ncmFmdHMgYW5kIGlzIGludGVybmFsbHkgdXNlZCBhbmQKKwltYWludGFpbmVkIGJ5IGxpbmtnaXQ6Z2l0LXJlcGxhY2VbMV0uIFN1Y2ggcmVmcyBjYW4gYmUgZXhjaGFuZ2VkCisJYmV0d2VlbiByZXBvc2l0b3JpZXMgd2hpbGUgZ3JhZnRzIGFyZSBub3QuCisKK3BhY2tlZC1yZWZzOjoKKwlyZWNvcmRzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIHJlZnMvaGVhZHMvLCByZWZzL3RhZ3MvLAorCWFuZCBmcmllbmRzIHJlY29yZCBpbiBhIG1vcmUgZWZmaWNpZW50IHdheS4gIFNlZQorCWxpbmtnaXQ6Z2l0LXBhY2stcmVmc1sxXS4gVGhpcyBmaWxlIGlzIGlnbm9yZWQgaWYgJEdJVF9DT01NT05fRElSCisJaXMgc2V0IGFuZCAiJEdJVF9DT01NT05fRElSL3BhY2tlZC1yZWZzIiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKworSEVBRDo6CisJQSBzeW1yZWYgKHNlZSBnbG9zc2FyeSkgdG8gdGhlIGByZWZzL2hlYWRzL2AgbmFtZXNwYWNlCisJZGVzY3JpYmluZyB0aGUgY3VycmVudGx5IGFjdGl2ZSBicmFuY2guICBJdCBkb2VzIG5vdCBtZWFuCisJbXVjaCBpZiB0aGUgcmVwb3NpdG9yeSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSB3b3JraW5nIHRyZWUKKwkoaS5lLiBhICdiYXJlJyByZXBvc2l0b3J5KSwgYnV0IGEgdmFsaWQgR2l0IHJlcG9zaXRvcnkKKwkqbXVzdCogaGF2ZSB0aGUgSEVBRCBmaWxlOyBzb21lIHBvcmNlbGFpbnMgbWF5IHVzZSBpdCB0bworCWd1ZXNzIHRoZSBkZXNpZ25hdGVkICJkZWZhdWx0IiBicmFuY2ggb2YgdGhlIHJlcG9zaXRvcnkKKwkodXN1YWxseSAnbWFzdGVyJykuICBJdCBpcyBsZWdhbCBpZiB0aGUgbmFtZWQgYnJhbmNoCisJJ25hbWUnIGRvZXMgbm90ICh5ZXQpIGV4aXN0LiAgSW4gc29tZSBsZWdhY3kgc2V0dXBzLCBpdCBpcworCWEgc3ltYm9saWMgbGluayBpbnN0ZWFkIG9mIGEgc3ltcmVmIHRoYXQgcG9pbnRzIGF0IHRoZSBjdXJyZW50CisJYnJhbmNoLgorKworSEVBRCBjYW4gYWxzbyByZWNvcmQgYSBzcGVjaWZpYyBjb21taXQgZGlyZWN0bHksIGluc3RlYWQgb2YKK2JlaW5nIGEgc3ltcmVmIHRvIHBvaW50IGF0IHRoZSBjdXJyZW50IGJyYW5jaC4gIFN1Y2ggYSBzdGF0ZQoraXMgb2Z0ZW4gY2FsbGVkICdkZXRhY2hlZCBIRUFELicgIFNlZSBsaW5rZ2l0OmdpdC1jaGVja291dFsxXQorZm9yIGRldGFpbHMuCisKK2NvbmZpZzo6CisJUmVwb3NpdG9yeSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGUuIFRoaXMgZmlsZSBpcyBpZ25vcmVkCisJaWYgJEdJVF9DT01NT05fRElSIGlzIHNldCBhbmQgIiRHSVRfQ09NTU9OX0RJUi9jb25maWciIHdpbGwgYmUKKwl1c2VkIGluc3RlYWQuCisKK2JyYW5jaGVzOjoKKwlBIHNsaWdodGx5IGRlcHJlY2F0ZWQgd2F5IHRvIHN0b3JlIHNob3J0aGFuZHMgdG8gYmUgdXNlZAorCXRvIHNwZWNpZnkgYSBVUkwgdG8gJ2dpdCBmZXRjaCcsICdnaXQgcHVsbCcgYW5kICdnaXQgcHVzaCcuCisJQSBmaWxlIGNhbiBiZSBzdG9yZWQgYXMgYGJyYW5jaGVzLzxuYW1lPmAgYW5kIHRoZW4KKwknbmFtZScgY2FuIGJlIGdpdmVuIHRvIHRoZXNlIGNvbW1hbmRzIGluIHBsYWNlIG9mCisJJ3JlcG9zaXRvcnknIGFyZ3VtZW50LiAgU2VlIHRoZSBSRU1PVEVTIHNlY3Rpb24gaW4KKwlsaW5rZ2l0OmdpdC1mZXRjaFsxXSBmb3IgZGV0YWlscy4gIFRoaXMgbWVjaGFuaXNtIGlzIGxlZ2FjeQorCWFuZCBub3QgbGlrZWx5IHRvIGJlIGZvdW5kIGluIG1vZGVybiByZXBvc2l0b3JpZXMuIFRoaXMKKwlkaXJlY3RvcnkgaXMgaWdub3JlZCBpZiAkR0lUX0NPTU1PTl9ESVIgaXMgc2V0IGFuZAorCSIkR0lUX0NPTU1PTl9ESVIvYnJhbmNoZXMiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCisKK2hvb2tzOjoKKwlIb29rcyBhcmUgY3VzdG9taXphdGlvbiBzY3JpcHRzIHVzZWQgYnkgdmFyaW91cyBHaXQKKwljb21tYW5kcy4gIEEgaGFuZGZ1bCBvZiBzYW1wbGUgaG9va3MgYXJlIGluc3RhbGxlZCB3aGVuCisJJ2dpdCBpbml0JyBpcyBydW4sIGJ1dCBhbGwgb2YgdGhlbSBhcmUgZGlzYWJsZWQgYnkKKwlkZWZhdWx0LiAgVG8gZW5hYmxlLCB0aGUgYC5zYW1wbGVgIHN1ZmZpeCBoYXMgdG8gYmUKKwlyZW1vdmVkIGZyb20gdGhlIGZpbGVuYW1lIGJ5IHJlbmFtaW5nLgorCVJlYWQgbGlua2dpdDpnaXRob29rc1s1XSBmb3IgbW9yZSBkZXRhaWxzIGFib3V0CisJZWFjaCBob29rLiBUaGlzIGRpcmVjdG9yeSBpcyBpZ25vcmVkIGlmICRHSVRfQ09NTU9OX0RJUiBpcyBzZXQKKwlhbmQgIiRHSVRfQ09NTU9OX0RJUi9ob29rcyIgd2lsbCBiZSB1c2VkIGluc3RlYWQuCisKKworaW5kZXg6OgorCVRoZSBjdXJyZW50IGluZGV4IGZpbGUgZm9yIHRoZSByZXBvc2l0b3J5LiAgSXQgaXMKKwl1c3VhbGx5IG5vdCBmb3VuZCBpbiBhIGJhcmUgcmVwb3NpdG9yeS4KKworc2hhcmVkaW5kZXguPFNIQS0xPjo6CisJVGhlIHNoYXJlZCBpbmRleCBwYXJ0LCB0byBiZSByZWZlcmVuY2VkIGJ5ICRHSVRfRElSL2luZGV4IGFuZAorCW90aGVyIHRlbXBvcmFyeSBpbmRleCBmaWxlcy4gT25seSB2YWxpZCBpbiBzcGxpdCBpbmRleCBtb2RlLgorCitpbmZvOjoKKwlBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZXBvc2l0b3J5IGlzIHJlY29yZGVkCisJaW4gdGhpcyBkaXJlY3RvcnkuIFRoaXMgZGlyZWN0b3J5IGlzIGlnbm9yZWQgaWYgJEdJVF9DT01NT05fRElSCisJaXMgc2V0IGFuZCAiJEdJVF9DT01NT05fRElSL2luZGV4IiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKworaW5mby9yZWZzOjoKKwlUaGlzIGZpbGUgaGVscHMgZHVtYiB0cmFuc3BvcnRzIGRpc2NvdmVyIHdoYXQgcmVmcyBhcmUKKwlhdmFpbGFibGUgaW4gdGhpcyByZXBvc2l0b3J5LiAgSWYgdGhlIHJlcG9zaXRvcnkgaXMKKwlwdWJsaXNoZWQgZm9yIGR1bWIgdHJhbnNwb3J0cywgdGhpcyBmaWxlIHNob3VsZCBiZQorCXJlZ2VuZXJhdGVkIGJ5ICdnaXQgdXBkYXRlLXNlcnZlci1pbmZvJyBldmVyeSB0aW1lIGEgdGFnCisJb3IgYnJhbmNoIGlzIGNyZWF0ZWQgb3IgbW9kaWZpZWQuICBUaGlzIGlzIG5vcm1hbGx5IGRvbmUKKwlmcm9tIHRoZSBgaG9va3MvdXBkYXRlYCBob29rLCB3aGljaCBpcyBydW4gYnkgdGhlCisJJ2dpdC1yZWNlaXZlLXBhY2snIGNvbW1hbmQgd2hlbiB5b3UgJ2dpdCBwdXNoJyBpbnRvIHRoZQorCXJlcG9zaXRvcnkuCisKK2luZm8vZ3JhZnRzOjoKKwlUaGlzIGZpbGUgcmVjb3JkcyBmYWtlIGNvbW1pdCBhbmNlc3RyeSBpbmZvcm1hdGlvbiwgdG8KKwlwcmV0ZW5kIHRoZSBzZXQgb2YgcGFyZW50cyBhIGNvbW1pdCBoYXMgaXMgZGlmZmVyZW50CisJZnJvbSBob3cgdGhlIGNvbW1pdCB3YXMgYWN0dWFsbHkgY3JlYXRlZC4gIE9uZSByZWNvcmQKKwlwZXIgbGluZSBkZXNjcmliZXMgYSBjb21taXQgYW5kIGl0cyBmYWtlIHBhcmVudHMgYnkKKwlsaXN0aW5nIHRoZWlyIDQwLWJ5dGUgaGV4YWRlY2ltYWwgb2JqZWN0IG5hbWVzIHNlcGFyYXRlZAorCWJ5IGEgc3BhY2UgYW5kIHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLgorKworTm90ZSB0aGF0IHRoZSBncmFmdHMgbWVjaGFuaXNtIGlzIG91dGRhdGVkIGFuZCBjYW4gbGVhZCB0byBwcm9ibGVtcwordHJhbnNmZXJyaW5nIG9iamVjdHMgYmV0d2VlbiByZXBvc2l0b3JpZXM7IHNlZSBsaW5rZ2l0OmdpdC1yZXBsYWNlWzFdCitmb3IgYSBtb3JlIGZsZXhpYmxlIGFuZCByb2J1c3Qgc3lzdGVtIHRvIGRvIHRoZSBzYW1lIHRoaW5nLgorCitpbmZvL2V4Y2x1ZGU6OgorCVRoaXMgZmlsZSwgYnkgY29udmVudGlvbiBhbW9uZyBQb3JjZWxhaW5zLCBzdG9yZXMgdGhlCisJZXhjbHVkZSBwYXR0ZXJuIGxpc3QuIGAuZ2l0aWdub3JlYCBpcyB0aGUgcGVyLWRpcmVjdG9yeQorCWlnbm9yZSBmaWxlLiAgJ2dpdCBzdGF0dXMnLCAnZ2l0IGFkZCcsICdnaXQgcm0nIGFuZAorCSdnaXQgY2xlYW4nIGxvb2sgYXQgaXQgYnV0IHRoZSBjb3JlIEdpdCBjb21tYW5kcyBkbyBub3QgbG9vaworCWF0IGl0LiAgU2VlIGFsc286IGxpbmtnaXQ6Z2l0aWdub3JlWzVdLgorCitpbmZvL3NwYXJzZS1jaGVja291dDo6CisJVGhpcyBmaWxlIHN0b3JlcyBzcGFyc2UgY2hlY2tvdXQgcGF0dGVybnMuCisJU2VlIGFsc286IGxpbmtnaXQ6Z2l0LXJlYWQtdHJlZVsxXS4KKworcmVtb3Rlczo6CisJU3RvcmVzIHNob3J0aGFuZHMgZm9yIFVSTCBhbmQgZGVmYXVsdCByZWZuYW1lcyBmb3IgdXNlCisJd2hlbiBpbnRlcmFjdGluZyB3aXRoIHJlbW90ZSByZXBvc2l0b3JpZXMgdmlhICdnaXQgZmV0Y2gnLAorCSdnaXQgcHVsbCcgYW5kICdnaXQgcHVzaCcgY29tbWFuZHMuICBTZWUgdGhlIFJFTU9URVMgc2VjdGlvbgorCWluIGxpbmtnaXQ6Z2l0LWZldGNoWzFdIGZvciBkZXRhaWxzLiAgVGhpcyBtZWNoYW5pc20gaXMgbGVnYWN5CisJYW5kIG5vdCBsaWtlbHkgdG8gYmUgZm91bmQgaW4gbW9kZXJuIHJlcG9zaXRvcmllcy4gVGhpcworCWRpcmVjdG9yeSBpcyBpZ25vcmVkIGlmICRHSVRfQ09NTU9OX0RJUiBpcyBzZXQgYW5kCisJIiRHSVRfQ09NTU9OX0RJUi9yZW1vdGVzIiB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KKworbG9nczo6CisJUmVjb3JkcyBvZiBjaGFuZ2VzIG1hZGUgdG8gcmVmcyBhcmUgc3RvcmVkIGluIHRoaXMgZGlyZWN0b3J5LgorCVNlZSBsaW5rZ2l0OmdpdC11cGRhdGUtcmVmWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLiBUaGlzCisJZGlyZWN0b3J5IGlzIGlnbm9yZWQgaWYgJEdJVF9DT01NT05fRElSIGlzIHNldCBhbmQKKwkiJEdJVF9DT01NT05fRElSL2xvZ3MiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCitsb2dzL3JlZnMvaGVhZHMvYG5hbWVgOjoKKwlSZWNvcmRzIGFsbCBjaGFuZ2VzIG1hZGUgdG8gdGhlIGJyYW5jaCB0aXAgbmFtZWQgYG5hbWVgLgorCitsb2dzL3JlZnMvdGFncy9gbmFtZWA6OgorCVJlY29yZHMgYWxsIGNoYW5nZXMgbWFkZSB0byB0aGUgdGFnIG5hbWVkIGBuYW1lYC4KKworc2hhbGxvdzo6CisJVGhpcyBpcyBzaW1pbGFyIHRvIGBpbmZvL2dyYWZ0c2AgYnV0IGlzIGludGVybmFsbHkgdXNlZAorCWFuZCBtYWludGFpbmVkIGJ5IHNoYWxsb3cgY2xvbmUgbWVjaGFuaXNtLiAgU2VlIGAtLWRlcHRoYAorCW9wdGlvbiB0byBsaW5rZ2l0OmdpdC1jbG9uZVsxXSBhbmQgbGlua2dpdDpnaXQtZmV0Y2hbMV0uIFRoaXMKKwlmaWxlIGlzIGlnbm9yZWQgaWYgJEdJVF9DT01NT05fRElSIGlzIHNldCBhbmQKKwkiJEdJVF9DT01NT05fRElSL3NoYWxsb3ciIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCitjb21tb25kaXI6OgorCUlmIHRoaXMgZmlsZSBleGlzdHMsICRHSVRfQ09NTU9OX0RJUiAoc2VlIGxpbmtnaXQ6Z2l0WzFdKSB3aWxsCisJYmUgc2V0IHRvIHRoZSBwYXRoIHNwZWNpZmllZCBpbiB0aGlzIGZpbGUgaWYgaXQgaXMgbm90CisJZXhwbGljaXRseSBzZXQuIElmIHRoZSBzcGVjaWZpZWQgcGF0aCBpcyByZWxhdGl2ZSwgaXQgaXMKKwlyZWxhdGl2ZSB0byAkR0lUX0RJUi4gVGhlIHJlcG9zaXRvcnkgd2l0aCBjb21tb25kaXIgaXMKKwlpbmNvbXBsZXRlIHdpdGhvdXQgdGhlIHJlcG9zaXRvcnkgcG9pbnRlZCBieSAiY29tbW9uZGlyIi4KKworbW9kdWxlczo6CisJQ29udGFpbnMgdGhlIGdpdC1yZXBvc2l0b3JpZXMgb2YgdGhlIHN1Ym1vZHVsZXMuCisKK3dvcmt0cmVlczo6CisJQ29udGFpbnMgYWRtaW5pc3RyYXRpdmUgZGF0YSBmb3IgbGlua2VkCisJd29ya2luZyB0cmVlcy4gRWFjaCBzdWJkaXJlY3RvcnkgY29udGFpbnMgdGhlIHdvcmtpbmcgdHJlZS1yZWxhdGVkCisJcGFydCBvZiBhIGxpbmtlZCB3b3JraW5nIHRyZWUuIFRoaXMgZGlyZWN0b3J5IGlzIGlnbm9yZWQgaWYKKwkkR0lUX0NPTU1PTl9ESVIgaXMgc2V0LCBpbiB3aGljaCBjYXNlCisJIiRHSVRfQ09NTU9OX0RJUi93b3JrdHJlZXMiIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLgorCit3b3JrdHJlZXMvPGlkPi9naXRkaXI6OgorCUEgdGV4dCBmaWxlIGNvbnRhaW5pbmcgdGhlIGFic29sdXRlIHBhdGggYmFjayB0byB0aGUgLmdpdCBmaWxlCisJdGhhdCBwb2ludHMgdG8gaGVyZS4gVGhpcyBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBsaW5rZWQKKwlyZXBvc2l0b3J5IGhhcyBiZWVuIG1hbnVhbGx5IHJlbW92ZWQgYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8KKwlrZWVwIHRoaXMgZGlyZWN0b3J5IGFueSBtb3JlLiBUaGUgbXRpbWUgb2YgdGhpcyBmaWxlIHNob3VsZCBiZQorCXVwZGF0ZWQgZXZlcnkgdGltZSB0aGUgbGlua2VkIHJlcG9zaXRvcnkgaXMgYWNjZXNzZWQuCisKK3dvcmt0cmVlcy88aWQ+L2xvY2tlZDo6CisJSWYgdGhpcyBmaWxlIGV4aXN0cywgdGhlIGxpbmtlZCB3b3JraW5nIHRyZWUgbWF5IGJlIG9uIGEKKwlwb3J0YWJsZSBkZXZpY2UgYW5kIG5vdCBhdmFpbGFibGUuIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGZpbGUKKwlwcmV2ZW50cyBgd29ya3RyZWVzLzxpZD5gIGZyb20gYmVpbmcgcHJ1bmVkIGVpdGhlciBhdXRvbWF0aWNhbGx5CisJb3IgbWFudWFsbHkgYnkgYGdpdCB3b3JrdHJlZSBwcnVuZWAuIFRoZSBmaWxlIG1heSBjb250YWluIGEgc3RyaW5nCisJZXhwbGFpbmluZyB3aHkgdGhlIHJlcG9zaXRvcnkgaXMgbG9ja2VkLgorCit3b3JrdHJlZXMvPGlkPi9saW5rOjoKKwlJZiB0aGlzIGZpbGUgZXhpc3RzLCBpdCBpcyBhIGhhcmQgbGluayB0byB0aGUgbGlua2VkIC5naXQKKwlmaWxlLiBJdCBpcyB1c2VkIHRvIGRldGVjdCBpZiB0aGUgbGlua2VkIHJlcG9zaXRvcnkgaXMKKwltYW51YWxseSByZW1vdmVkLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0LWluaXRbMV0sCitsaW5rZ2l0OmdpdC1jbG9uZVsxXSwKK2xpbmtnaXQ6Z2l0LWZldGNoWzFdLAorbGlua2dpdDpnaXQtcGFjay1yZWZzWzFdLAorbGlua2dpdDpnaXQtZ2NbMV0sCitsaW5rZ2l0OmdpdC1jaGVja291dFsxXSwKK2xpbmtnaXQ6Z2l0Z2xvc3NhcnlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHJldmlzaW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHJldmlzaW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwM2ViNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0cmV2aXNpb25zLnR4dApAQCAtMCwwICsxLDM1IEBACitnaXRyZXZpc2lvbnMoNykKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXRyZXZpc2lvbnMgLSBzcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitnaXRyZXZpc2lvbnMKKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworTWFueSBHaXQgY29tbWFuZHMgdGFrZSByZXZpc2lvbiBwYXJhbWV0ZXJzIGFzIGFyZ3VtZW50cy4gRGVwZW5kaW5nIG9uCit0aGUgY29tbWFuZCwgdGhleSBkZW5vdGUgYSBzcGVjaWZpYyBjb21taXQgb3IsIGZvciBjb21tYW5kcyB3aGljaAord2FsayB0aGUgcmV2aXNpb24gZ3JhcGggKHN1Y2ggYXMgbGlua2dpdDpnaXQtbG9nWzFdKSwgYWxsIGNvbW1pdHMgd2hpY2ggY2FuCitiZSByZWFjaGVkIGZyb20gdGhhdCBjb21taXQuIEluIHRoZSBsYXR0ZXIgY2FzZSBvbmUgY2FuIGFsc28gc3BlY2lmeSBhCityYW5nZSBvZiByZXZpc2lvbnMgZXhwbGljaXRseS4KKworSW4gYWRkaXRpb24sIHNvbWUgR2l0IGNvbW1hbmRzIChzdWNoIGFzIGxpbmtnaXQ6Z2l0LXNob3dbMV0pIGFsc28gdGFrZQorcmV2aXNpb24gcGFyYW1ldGVycyB3aGljaCBkZW5vdGUgb3RoZXIgb2JqZWN0cyB0aGFuIGNvbW1pdHMsIGUuZy4gYmxvYnMKKygiZmlsZXMiKSBvciB0cmVlcyAoImRpcmVjdG9yaWVzIG9mIGZpbGVzIikuCisKK2luY2x1ZGU6OnJldmlzaW9ucy50eHRbXQorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXQtcmV2LXBhcnNlWzFdCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC0yLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBkMjExOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2l0dHV0b3JpYWwtMi50eHQKQEAgLTAsMCArMSw0MzYgQEAKK2dpdHR1dG9yaWFsLTIoNykKKz09PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0dHV0b3JpYWwtMiAtIEEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdDogcGFydCB0d28KKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitnaXQgKgorCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworWW91IHNob3VsZCB3b3JrIHRocm91Z2ggbGlua2dpdDpnaXR0dXRvcmlhbFs3XSBiZWZvcmUgcmVhZGluZyB0aGlzIHR1dG9yaWFsLgorCitUaGUgZ29hbCBvZiB0aGlzIHR1dG9yaWFsIGlzIHRvIGludHJvZHVjZSB0d28gZnVuZGFtZW50YWwgcGllY2VzIG9mCitHaXQncyBhcmNoaXRlY3R1cmUtLXRoZSBvYmplY3QgZGF0YWJhc2UgYW5kIHRoZSBpbmRleCBmaWxlLS1hbmQgdG8KK3Byb3ZpZGUgdGhlIHJlYWRlciB3aXRoIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgdGhlIHJlc3QKK29mIHRoZSBHaXQgZG9jdW1lbnRhdGlvbi4KKworVGhlIEdpdCBvYmplY3QgZGF0YWJhc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xldCdzIHN0YXJ0IGEgbmV3IHByb2plY3QgYW5kIGNyZWF0ZSBhIHNtYWxsIGFtb3VudCBvZiBoaXN0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbWtkaXIgdGVzdC1wcm9qZWN0CiskIGNkIHRlc3QtcHJvamVjdAorJCBnaXQgaW5pdAorSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gLmdpdC8KKyQgZWNobyAnaGVsbG8gd29ybGQnID4gZmlsZS50eHQKKyQgZ2l0IGFkZCAuCiskIGdpdCBjb21taXQgLWEgLW0gImluaXRpYWwgY29tbWl0IgorW21hc3RlciAocm9vdC1jb21taXQpIDU0MTk2Y2NdIGluaXRpYWwgY29tbWl0CisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUudHh0CiskIGVjaG8gJ2hlbGxvIHdvcmxkIScgPmZpbGUudHh0CiskIGdpdCBjb21taXQgLWEgLW0gImFkZCBlbXBoYXNpcyIKK1ttYXN0ZXIgYzRkNTlmM10gYWRkIGVtcGhhc2lzCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdCBhcmUgdGhlIDcgZGlnaXRzIG9mIGhleCB0aGF0IEdpdCByZXNwb25kZWQgdG8gdGhlIGNvbW1pdCB3aXRoPworCitXZSBzYXcgaW4gcGFydCBvbmUgb2YgdGhlIHR1dG9yaWFsIHRoYXQgY29tbWl0cyBoYXZlIG5hbWVzIGxpa2UgdGhpcy4KK0l0IHR1cm5zIG91dCB0aGF0IGV2ZXJ5IG9iamVjdCBpbiB0aGUgR2l0IGhpc3RvcnkgaXMgc3RvcmVkIHVuZGVyCithIDQwLWRpZ2l0IGhleCBuYW1lLiAgVGhhdCBuYW1lIGlzIHRoZSBTSEEtMSBoYXNoIG9mIHRoZSBvYmplY3QncworY29udGVudHM7IGFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBlbnN1cmVzIHRoYXQgR2l0IHdpbGwgbmV2ZXIgc3RvcmUKK3RoZSBzYW1lIGRhdGEgdHdpY2UgKHNpbmNlIGlkZW50aWNhbCBkYXRhIGlzIGdpdmVuIGFuIGlkZW50aWNhbCBTSEEtMQorbmFtZSksIGFuZCB0aGF0IHRoZSBjb250ZW50cyBvZiBhIEdpdCBvYmplY3Qgd2lsbCBuZXZlciBjaGFuZ2UgKHNpbmNlCit0aGF0IHdvdWxkIGNoYW5nZSB0aGUgb2JqZWN0J3MgbmFtZSBhcyB3ZWxsKS4gVGhlIDcgY2hhciBoZXggc3RyaW5ncworaGVyZSBhcmUgc2ltcGx5IHRoZSBhYmJyZXZpYXRpb24gb2Ygc3VjaCA0MCBjaGFyYWN0ZXIgbG9uZyBzdHJpbmdzLgorQWJicmV2aWF0aW9ucyBjYW4gYmUgdXNlZCBldmVyeXdoZXJlIHdoZXJlIHRoZSA0MCBjaGFyYWN0ZXIgc3RyaW5ncworY2FuIGJlIHVzZWQsIHNvIGxvbmcgYXMgdGhleSBhcmUgdW5hbWJpZ3VvdXMuCisKK0l0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGNvbnRlbnQgb2YgdGhlIGNvbW1pdCBvYmplY3QgeW91IGNyZWF0ZWQgd2hpbGUKK2ZvbGxvd2luZyB0aGUgZXhhbXBsZSBhYm92ZSBnZW5lcmF0ZXMgYSBkaWZmZXJlbnQgU0hBLTEgaGFzaCB0aGFuCit0aGUgb25lIHNob3duIGFib3ZlIGJlY2F1c2UgdGhlIGNvbW1pdCBvYmplY3QgcmVjb3JkcyB0aGUgdGltZSB3aGVuCitpdCB3YXMgY3JlYXRlZCBhbmQgdGhlIG5hbWUgb2YgdGhlIHBlcnNvbiBwZXJmb3JtaW5nIHRoZSBjb21taXQuCisKK1dlIGNhbiBhc2sgR2l0IGFib3V0IHRoaXMgcGFydGljdWxhciBvYmplY3Qgd2l0aCB0aGUgYGNhdC1maWxlYAorY29tbWFuZC4gRG9uJ3QgY29weSB0aGUgNDAgaGV4IGRpZ2l0cyBmcm9tIHRoaXMgZXhhbXBsZSBidXQgdXNlIHRob3NlCitmcm9tIHlvdXIgb3duIHZlcnNpb24uIE5vdGUgdGhhdCB5b3UgY2FuIHNob3J0ZW4gaXQgdG8gb25seSBhIGZldworY2hhcmFjdGVycyB0byBzYXZlIHlvdXJzZWxmIHR5cGluZyBhbGwgNDAgaGV4IGRpZ2l0czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSAtdCA1NDE5NmNjMgorY29tbWl0CiskIGdpdCBjYXQtZmlsZSBjb21taXQgNTQxOTZjYzIKK3RyZWUgOTJiOGI2OTRmZmIxNjc1ZTU5NzUxNDhlMTEyMTgxMDA4MWRiZGZmZQorYXV0aG9yIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE0NjY4IC0wNTAwCitjb21taXR0ZXIgSi4gQnJ1Y2UgRmllbGRzIDxiZmllbGRzQHB1enpsZS5maWVsZHNlcy5vcmc+IDExNDM0MTQ2NjggLTA1MDAKKworaW5pdGlhbCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHRyZWUgY2FuIHJlZmVyIHRvIG9uZSBvciBtb3JlICJibG9iIiBvYmplY3RzLCBlYWNoIGNvcnJlc3BvbmRpbmcgdG8KK2EgZmlsZS4gIEluIGFkZGl0aW9uLCBhIHRyZWUgY2FuIGFsc28gcmVmZXIgdG8gb3RoZXIgdHJlZSBvYmplY3RzLAordGh1cyBjcmVhdGluZyBhIGRpcmVjdG9yeSBoaWVyYXJjaHkuICBZb3UgY2FuIGV4YW1pbmUgdGhlIGNvbnRlbnRzIG9mCithbnkgdHJlZSB1c2luZyBscy10cmVlIChyZW1lbWJlciB0aGF0IGEgbG9uZyBlbm91Z2ggaW5pdGlhbCBwb3J0aW9uCitvZiB0aGUgU0hBLTEgd2lsbCBhbHNvIHdvcmspOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLXRyZWUgOTJiOGI2OTQKKzEwMDY0NCBibG9iIDNiMThlNTEyZGJhNzllNGM4MzAwZGQwOGFlYjM3ZjhlNzI4YjhkYWQgICAgZmlsZS50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaHVzIHdlIHNlZSB0aGF0IHRoaXMgdHJlZSBoYXMgb25lIGZpbGUgaW4gaXQuICBUaGUgU0hBLTEgaGFzaCBpcyBhCityZWZlcmVuY2UgdG8gdGhhdCBmaWxlJ3MgZGF0YToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSAtdCAzYjE4ZTUxMgorYmxvYgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgImJsb2IiIGlzIGp1c3QgZmlsZSBkYXRhLCB3aGljaCB3ZSBjYW4gYWxzbyBleGFtaW5lIHdpdGggY2F0LWZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgYmxvYiAzYjE4ZTUxMgoraGVsbG8gd29ybGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgdGhpcyBpcyB0aGUgb2xkIGZpbGUgZGF0YTsgc28gdGhlIG9iamVjdCB0aGF0IEdpdCBuYW1lZCBpbgoraXRzIHJlc3BvbnNlIHRvIHRoZSBpbml0aWFsIHRyZWUgd2FzIGEgdHJlZSB3aXRoIGEgc25hcHNob3Qgb2YgdGhlCitkaXJlY3Rvcnkgc3RhdGUgdGhhdCB3YXMgcmVjb3JkZWQgYnkgdGhlIGZpcnN0IGNvbW1pdC4KKworQWxsIG9mIHRoZXNlIG9iamVjdHMgYXJlIHN0b3JlZCB1bmRlciB0aGVpciBTSEEtMSBuYW1lcyBpbnNpZGUgdGhlIEdpdAorZGlyZWN0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZmluZCAuZ2l0L29iamVjdHMvCisuZ2l0L29iamVjdHMvCisuZ2l0L29iamVjdHMvcGFjaworLmdpdC9vYmplY3RzL2luZm8KKy5naXQvb2JqZWN0cy8zYgorLmdpdC9vYmplY3RzLzNiLzE4ZTUxMmRiYTc5ZTRjODMwMGRkMDhhZWIzN2Y4ZTcyOGI4ZGFkCisuZ2l0L29iamVjdHMvOTIKKy5naXQvb2JqZWN0cy85Mi9iOGI2OTRmZmIxNjc1ZTU5NzUxNDhlMTEyMTgxMDA4MWRiZGZmZQorLmdpdC9vYmplY3RzLzU0CisuZ2l0L29iamVjdHMvNTQvMTk2Y2MyNzAzZGMxNjVjYmQzNzNhNjVhNGRjZjIyZDUwYWU3ZjcKKy5naXQvb2JqZWN0cy9hMAorLmdpdC9vYmplY3RzL2EwLzQyMzg5Njk3MzY0NDc3MTQ5N2JkYzAzZWI5OWQ1MjgxNjE1YjUxCisuZ2l0L29iamVjdHMvZDAKKy5naXQvb2JqZWN0cy9kMC80OTJiMzY4YjY2YmRhYmYyYWMxZmQ4YzkyYjM5ZDNkYjkxNmU1OQorLmdpdC9vYmplY3RzL2M0CisuZ2l0L29iamVjdHMvYzQvZDU5ZjM5MGI5Y2ZkNDMxODExN2FmZGUxMWQ2MDFjMTA4NWYyNDEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhlIGNvbnRlbnRzIG9mIHRoZXNlIGZpbGVzIGlzIGp1c3QgdGhlIGNvbXByZXNzZWQgZGF0YSBwbHVzIGEKK2hlYWRlciBpZGVudGlmeWluZyB0aGVpciBsZW5ndGggYW5kIHRoZWlyIHR5cGUuICBUaGUgdHlwZSBpcyBlaXRoZXIgYQorYmxvYiwgYSB0cmVlLCBhIGNvbW1pdCwgb3IgYSB0YWcuCisKK1RoZSBzaW1wbGVzdCBjb21taXQgdG8gZmluZCBpcyB0aGUgSEVBRCBjb21taXQsIHdoaWNoIHdlIGNhbiBmaW5kCitmcm9tIC5naXQvSEVBRDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCAuZ2l0L0hFQUQKK3JlZjogcmVmcy9oZWFkcy9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB5b3UgY2FuIHNlZSwgdGhpcyB0ZWxscyB1cyB3aGljaCBicmFuY2ggd2UncmUgY3VycmVudGx5IG9uLCBhbmQgaXQKK3RlbGxzIHVzIHRoaXMgYnkgbmFtaW5nIGEgZmlsZSB1bmRlciB0aGUgLmdpdCBkaXJlY3RvcnksIHdoaWNoIGl0c2VsZgorY29udGFpbnMgYSBTSEEtMSBuYW1lIHJlZmVycmluZyB0byBhIGNvbW1pdCBvYmplY3QsIHdoaWNoIHdlIGNhbgorZXhhbWluZSB3aXRoIGNhdC1maWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2F0IC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIKK2M0ZDU5ZjM5MGI5Y2ZkNDMxODExN2FmZGUxMWQ2MDFjMTA4NWYyNDEKKyQgZ2l0IGNhdC1maWxlIC10IGM0ZDU5ZjM5Citjb21taXQKKyQgZ2l0IGNhdC1maWxlIGNvbW1pdCBjNGQ1OWYzOQordHJlZSBkMDQ5MmIzNjhiNjZiZGFiZjJhYzFmZDhjOTJiMzlkM2RiOTE2ZTU5CitwYXJlbnQgNTQxOTZjYzI3MDNkYzE2NWNiZDM3M2E2NWE0ZGNmMjJkNTBhZTdmNworYXV0aG9yIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE4NzAyIC0wNTAwCitjb21taXR0ZXIgSi4gQnJ1Y2UgRmllbGRzIDxiZmllbGRzQHB1enpsZS5maWVsZHNlcy5vcmc+IDExNDM0MTg3MDIgLTA1MDAKKworYWRkIGVtcGhhc2lzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJ0cmVlIiBvYmplY3QgaGVyZSByZWZlcnMgdG8gdGhlIG5ldyBzdGF0ZSBvZiB0aGUgdHJlZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBscy10cmVlIGQwNDkyYjM2CisxMDA2NDQgYmxvYiBhMDQyMzg5Njk3MzY0NDc3MTQ5N2JkYzAzZWI5OWQ1MjgxNjE1YjUxICAgIGZpbGUudHh0CiskIGdpdCBjYXQtZmlsZSBibG9iIGEwNDIzODk2CitoZWxsbyB3b3JsZCEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhlICJwYXJlbnQiIG9iamVjdCByZWZlcnMgdG8gdGhlIHByZXZpb3VzIGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBjb21taXQgNTQxOTZjYzIKK3RyZWUgOTJiOGI2OTRmZmIxNjc1ZTU5NzUxNDhlMTEyMTgxMDA4MWRiZGZmZQorYXV0aG9yIEouIEJydWNlIEZpZWxkcyA8YmZpZWxkc0BwdXp6bGUuZmllbGRzZXMub3JnPiAxMTQzNDE0NjY4IC0wNTAwCitjb21taXR0ZXIgSi4gQnJ1Y2UgRmllbGRzIDxiZmllbGRzQHB1enpsZS5maWVsZHNlcy5vcmc+IDExNDM0MTQ2NjggLTA1MDAKKworaW5pdGlhbCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdHJlZSBvYmplY3QgaXMgdGhlIHRyZWUgd2UgZXhhbWluZWQgZmlyc3QsIGFuZCB0aGlzIGNvbW1pdCBpcwordW51c3VhbCBpbiB0aGF0IGl0IGxhY2tzIGFueSBwYXJlbnQuCisKK01vc3QgY29tbWl0cyBoYXZlIG9ubHkgb25lIHBhcmVudCwgYnV0IGl0IGlzIGFsc28gY29tbW9uIGZvciBhIGNvbW1pdAordG8gaGF2ZSBtdWx0aXBsZSBwYXJlbnRzLiAgIEluIHRoYXQgY2FzZSB0aGUgY29tbWl0IHJlcHJlc2VudHMgYQorbWVyZ2UsIHdpdGggdGhlIHBhcmVudCByZWZlcmVuY2VzIHBvaW50aW5nIHRvIHRoZSBoZWFkcyBvZiB0aGUgbWVyZ2VkCiticmFuY2hlcy4KKworQmVzaWRlcyBibG9icywgdHJlZXMsIGFuZCBjb21taXRzLCB0aGUgb25seSByZW1haW5pbmcgdHlwZSBvZiBvYmplY3QKK2lzIGEgInRhZyIsIHdoaWNoIHdlIHdvbid0IGRpc2N1c3MgaGVyZTsgcmVmZXIgdG8gbGlua2dpdDpnaXQtdGFnWzFdCitmb3IgZGV0YWlscy4KKworU28gbm93IHdlIGtub3cgaG93IEdpdCB1c2VzIHRoZSBvYmplY3QgZGF0YWJhc2UgdG8gcmVwcmVzZW50IGEKK3Byb2plY3QncyBoaXN0b3J5OgorCisgICogImNvbW1pdCIgb2JqZWN0cyByZWZlciB0byAidHJlZSIgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlCisgICAgc25hcHNob3Qgb2YgYSBkaXJlY3RvcnkgdHJlZSBhdCBhIHBhcnRpY3VsYXIgcG9pbnQgaW4gdGhlCisgICAgaGlzdG9yeSwgYW5kIHJlZmVyIHRvICJwYXJlbnQiIGNvbW1pdHMgdG8gc2hvdyBob3cgdGhleSdyZQorICAgIGNvbm5lY3RlZCBpbnRvIHRoZSBwcm9qZWN0IGhpc3RvcnkuCisgICogInRyZWUiIG9iamVjdHMgcmVwcmVzZW50IHRoZSBzdGF0ZSBvZiBhIHNpbmdsZSBkaXJlY3RvcnksCisgICAgYXNzb2NpYXRpbmcgZGlyZWN0b3J5IG5hbWVzIHRvICJibG9iIiBvYmplY3RzIGNvbnRhaW5pbmcgZmlsZQorICAgIGRhdGEgYW5kICJ0cmVlIiBvYmplY3RzIGNvbnRhaW5pbmcgc3ViZGlyZWN0b3J5IGluZm9ybWF0aW9uLgorICAqICJibG9iIiBvYmplY3RzIGNvbnRhaW4gZmlsZSBkYXRhIHdpdGhvdXQgYW55IG90aGVyIHN0cnVjdHVyZS4KKyAgKiBSZWZlcmVuY2VzIHRvIGNvbW1pdCBvYmplY3RzIGF0IHRoZSBoZWFkIG9mIGVhY2ggYnJhbmNoIGFyZQorICAgIHN0b3JlZCBpbiBmaWxlcyB1bmRlciAuZ2l0L3JlZnMvaGVhZHMvLgorICAqIFRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBzdG9yZWQgaW4gLmdpdC9IRUFELgorCitOb3RlLCBieSB0aGUgd2F5LCB0aGF0IGxvdHMgb2YgY29tbWFuZHMgdGFrZSBhIHRyZWUgYXMgYW4gYXJndW1lbnQuCitCdXQgYXMgd2UgY2FuIHNlZSBhYm92ZSwgYSB0cmVlIGNhbiBiZSByZWZlcnJlZCB0byBpbiBtYW55IGRpZmZlcmVudAord2F5cy0tYnkgdGhlIFNIQS0xIG5hbWUgZm9yIHRoYXQgdHJlZSwgYnkgdGhlIG5hbWUgb2YgYSBjb21taXQgdGhhdAorcmVmZXJzIHRvIHRoZSB0cmVlLCBieSB0aGUgbmFtZSBvZiBhIGJyYW5jaCB3aG9zZSBoZWFkIHJlZmVycyB0byB0aGF0Cit0cmVlLCBldGMuLS1hbmQgbW9zdCBzdWNoIGNvbW1hbmRzIGNhbiBhY2NlcHQgYW55IG9mIHRoZXNlIG5hbWVzLgorCitJbiBjb21tYW5kIHN5bm9wc2VzLCB0aGUgd29yZCAidHJlZS1pc2giIGlzIHNvbWV0aW1lcyB1c2VkIHRvCitkZXNpZ25hdGUgc3VjaCBhbiBhcmd1bWVudC4KKworVGhlIGluZGV4IGZpbGUKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBwcmltYXJ5IHRvb2wgd2UndmUgYmVlbiB1c2luZyB0byBjcmVhdGUgY29tbWl0cyBpcyBgZ2l0LWNvbW1pdAorLWFgLCB3aGljaCBjcmVhdGVzIGEgY29tbWl0IGluY2x1ZGluZyBldmVyeSBjaGFuZ2UgeW91J3ZlIG1hZGUgdG8KK3lvdXIgd29ya2luZyB0cmVlLiAgQnV0IHdoYXQgaWYgeW91IHdhbnQgdG8gY29tbWl0IGNoYW5nZXMgb25seSB0bworY2VydGFpbiBmaWxlcz8gIE9yIG9ubHkgY2VydGFpbiBjaGFuZ2VzIHRvIGNlcnRhaW4gZmlsZXM/CisKK0lmIHdlIGxvb2sgYXQgdGhlIHdheSBjb21taXRzIGFyZSBjcmVhdGVkIHVuZGVyIHRoZSBjb3Zlciwgd2UnbGwgc2VlCit0aGF0IHRoZXJlIGFyZSBtb3JlIGZsZXhpYmxlIHdheXMgY3JlYXRpbmcgY29tbWl0cy4KKworQ29udGludWluZyB3aXRoIG91ciB0ZXN0LXByb2plY3QsIGxldCdzIG1vZGlmeSBmaWxlLnR4dCBhZ2FpbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gImhlbGxvIHdvcmxkLCBhZ2FpbiIgPj5maWxlLnR4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2J1dCB0aGlzIHRpbWUgaW5zdGVhZCBvZiBpbW1lZGlhdGVseSBtYWtpbmcgdGhlIGNvbW1pdCwgbGV0J3MgdGFrZSBhbgoraW50ZXJtZWRpYXRlIHN0ZXAsIGFuZCBhc2sgZm9yIGRpZmZzIGFsb25nIHRoZSB3YXkgdG8ga2VlcCB0cmFjayBvZgord2hhdCdzIGhhcHBlbmluZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmCistLS0gYS9maWxlLnR4dAorKysrIGIvZmlsZS50eHQKK0BAIC0xICsxLDIgQEAKKyBoZWxsbyB3b3JsZCEKKytoZWxsbyB3b3JsZCwgYWdhaW4KKyQgZ2l0IGFkZCBmaWxlLnR4dAorJCBnaXQgZGlmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsYXN0IGRpZmYgaXMgZW1wdHksIGJ1dCBubyBuZXcgY29tbWl0cyBoYXZlIGJlZW4gbWFkZSwgYW5kIHRoZQoraGVhZCBzdGlsbCBkb2Vzbid0IGNvbnRhaW4gdGhlIG5ldyBsaW5lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgSEVBRAorZGlmZiAtLWdpdCBhL2ZpbGUudHh0IGIvZmlsZS50eHQKK2luZGV4IGEwNDIzODkuLjUxM2ZlYmEgMTAwNjQ0CistLS0gYS9maWxlLnR4dAorKysrIGIvZmlsZS50eHQKK0BAIC0xICsxLDIgQEAKKyBoZWxsbyB3b3JsZCEKKytoZWxsbyB3b3JsZCwgYWdhaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTbyAnZ2l0IGRpZmYnIGlzIGNvbXBhcmluZyBhZ2FpbnN0IHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBoZWFkLgorVGhlIHRoaW5nIHRoYXQgaXQncyBjb21wYXJpbmcgYWdhaW5zdCBpcyBhY3R1YWxseSB0aGUgaW5kZXggZmlsZSwKK3doaWNoIGlzIHN0b3JlZCBpbiAuZ2l0L2luZGV4IGluIGEgYmluYXJ5IGZvcm1hdCwgYnV0IHdob3NlIGNvbnRlbnRzCit3ZSBjYW4gZXhhbWluZSB3aXRoIGxzLWZpbGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UKKzEwMDY0NCA1MTNmZWJhMmU1M2ViYmQyNTMyNDE5ZGVkODQ4YmExOWRlODhiYTAwIDAgICAgICAgZmlsZS50eHQKKyQgZ2l0IGNhdC1maWxlIC10IDUxM2ZlYmEyCitibG9iCiskIGdpdCBjYXQtZmlsZSBibG9iIDUxM2ZlYmEyCitoZWxsbyB3b3JsZCEKK2hlbGxvIHdvcmxkLCBhZ2FpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvIHdoYXQgb3VyICdnaXQgYWRkJyBkaWQgd2FzIHN0b3JlIGEgbmV3IGJsb2IgYW5kIHRoZW4gcHV0CithIHJlZmVyZW5jZSB0byBpdCBpbiB0aGUgaW5kZXggZmlsZS4gIElmIHdlIG1vZGlmeSB0aGUgZmlsZSBhZ2FpbiwKK3dlJ2xsIHNlZSB0aGF0IHRoZSBuZXcgbW9kaWZpY2F0aW9ucyBhcmUgcmVmbGVjdGVkIGluIHRoZSAnZ2l0IGRpZmYnCitvdXRwdXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBlY2hvICdhZ2Fpbj8nID4+ZmlsZS50eHQKKyQgZ2l0IGRpZmYKK2luZGV4IDUxM2ZlYmEuLmJhM2RhN2IgMTAwNjQ0CistLS0gYS9maWxlLnR4dAorKysrIGIvZmlsZS50eHQKK0BAIC0xLDIgKzEsMyBAQAorIGhlbGxvIHdvcmxkIQorIGhlbGxvIHdvcmxkLCBhZ2FpbgorK2FnYWluPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggdGhlIHJpZ2h0IGFyZ3VtZW50cywgJ2dpdCBkaWZmJyBjYW4gYWxzbyBzaG93IHVzIHRoZSBkaWZmZXJlbmNlCitiZXR3ZWVuIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGhlIGxhc3QgY29tbWl0LCBvciBiZXR3ZWVuIHRoZQoraW5kZXggYW5kIHRoZSBsYXN0IGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIEhFQUQKK2RpZmYgLS1naXQgYS9maWxlLnR4dCBiL2ZpbGUudHh0CitpbmRleCBhMDQyMzg5Li5iYTNkYTdiIDEwMDY0NAorLS0tIGEvZmlsZS50eHQKKysrKyBiL2ZpbGUudHh0CitAQCAtMSArMSwzIEBACisgaGVsbG8gd29ybGQhCisraGVsbG8gd29ybGQsIGFnYWluCisrYWdhaW4/CiskIGdpdCBkaWZmIC0tY2FjaGVkCitkaWZmIC0tZ2l0IGEvZmlsZS50eHQgYi9maWxlLnR4dAoraW5kZXggYTA0MjM4OS4uNTEzZmViYSAxMDA2NDQKKy0tLSBhL2ZpbGUudHh0CisrKysgYi9maWxlLnR4dAorQEAgLTEgKzEsMiBAQAorIGhlbGxvIHdvcmxkIQorK2hlbGxvIHdvcmxkLCBhZ2FpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F0IGFueSB0aW1lLCB3ZSBjYW4gY3JlYXRlIGEgbmV3IGNvbW1pdCB1c2luZyAnZ2l0IGNvbW1pdCcgKHdpdGhvdXQKK3RoZSAiLWEiIG9wdGlvbiksIGFuZCB2ZXJpZnkgdGhhdCB0aGUgc3RhdGUgY29tbWl0dGVkIG9ubHkgaW5jbHVkZXMgdGhlCitjaGFuZ2VzIHN0b3JlZCBpbiB0aGUgaW5kZXggZmlsZSwgbm90IHRoZSBhZGRpdGlvbmFsIGNoYW5nZSB0aGF0IGlzCitzdGlsbCBvbmx5IGluIG91ciB3b3JraW5nIHRyZWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC1tICJyZXBlYXQiCiskIGdpdCBkaWZmIEhFQUQKK2RpZmYgLS1naXQgYS9maWxlLnR4dCBiL2ZpbGUudHh0CitpbmRleCA1MTNmZWJhLi5iYTNkYTdiIDEwMDY0NAorLS0tIGEvZmlsZS50eHQKKysrKyBiL2ZpbGUudHh0CitAQCAtMSwyICsxLDMgQEAKKyBoZWxsbyB3b3JsZCEKKyBoZWxsbyB3b3JsZCwgYWdhaW4KKythZ2Fpbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTbyBieSBkZWZhdWx0ICdnaXQgY29tbWl0JyB1c2VzIHRoZSBpbmRleCB0byBjcmVhdGUgdGhlIGNvbW1pdCwgbm90Cit0aGUgd29ya2luZyB0cmVlOyB0aGUgIi1hIiBvcHRpb24gdG8gY29tbWl0IHRlbGxzIGl0IHRvIGZpcnN0IHVwZGF0ZQordGhlIGluZGV4IHdpdGggYWxsIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKworRmluYWxseSwgaXQncyB3b3J0aCBsb29raW5nIGF0IHRoZSBlZmZlY3Qgb2YgJ2dpdCBhZGQnIG9uIHRoZSBpbmRleAorZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gImdvb2RieWUsIHdvcmxkIiA+Y2xvc2luZy50eHQKKyQgZ2l0IGFkZCBjbG9zaW5nLnR4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBlZmZlY3Qgb2YgdGhlICdnaXQgYWRkJyB3YXMgdG8gYWRkIG9uZSBlbnRyeSB0byB0aGUgaW5kZXggZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBscy1maWxlcyAtLXN0YWdlCisxMDA2NDQgOGI5NzQzYjIwZDRiMTViZTM5NTVmYzhkNWNkMmIwOWNkMjMzNjEzOCAwICAgICAgIGNsb3NpbmcudHh0CisxMDA2NDQgNTEzZmViYTJlNTNlYmJkMjUzMjQxOWRlZDg0OGJhMTlkZTg4YmEwMCAwICAgICAgIGZpbGUudHh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW5kLCBhcyB5b3UgY2FuIHNlZSB3aXRoIGNhdC1maWxlLCB0aGlzIG5ldyBlbnRyeSByZWZlcnMgdG8gdGhlCitjdXJyZW50IGNvbnRlbnRzIG9mIHRoZSBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIGJsb2IgOGI5NzQzYjIKK2dvb2RieWUsIHdvcmxkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJzdGF0dXMiIGNvbW1hbmQgaXMgYSB1c2VmdWwgd2F5IHRvIGdldCBhIHF1aWNrIHN1bW1hcnkgb2YgdGhlCitzaXR1YXRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3RhdHVzCitPbiBicmFuY2ggbWFzdGVyCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCisJbmV3IGZpbGU6ICAgY2xvc2luZy50eHQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCisJbW9kaWZpZWQ6ICAgZmlsZS50eHQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpbmNlIHRoZSBjdXJyZW50IHN0YXRlIG9mIGNsb3NpbmcudHh0IGlzIGNhY2hlZCBpbiB0aGUgaW5kZXggZmlsZSwKK2l0IGlzIGxpc3RlZCBhcyAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQiLiAgU2luY2UgZmlsZS50eHQgaGFzCitjaGFuZ2VzIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB0aGF0IGFyZW4ndCByZWZsZWN0ZWQgaW4gdGhlIGluZGV4LAoraXQgaXMgbWFya2VkICJjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZCIuICBBdCB0aGlzIHBvaW50LCBydW5uaW5nICJnaXQKK2NvbW1pdCIgd291bGQgY3JlYXRlIGEgY29tbWl0IHRoYXQgYWRkZWQgY2xvc2luZy50eHQgKHdpdGggaXRzIG5ldworY29udGVudHMpLCBidXQgdGhhdCBkaWRuJ3QgbW9kaWZ5IGZpbGUudHh0LgorCitBbHNvLCBub3RlIHRoYXQgYSBiYXJlIGBnaXQgZGlmZmAgc2hvd3MgdGhlIGNoYW5nZXMgdG8gZmlsZS50eHQsIGJ1dAorbm90IHRoZSBhZGRpdGlvbiBvZiBjbG9zaW5nLnR4dCwgYmVjYXVzZSB0aGUgdmVyc2lvbiBvZiBjbG9zaW5nLnR4dAoraW4gdGhlIGluZGV4IGZpbGUgaXMgaWRlbnRpY2FsIHRvIHRoZSBvbmUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorCitJbiBhZGRpdGlvbiB0byBiZWluZyB0aGUgc3RhZ2luZyBhcmVhIGZvciBuZXcgY29tbWl0cywgdGhlIGluZGV4IGZpbGUKK2lzIGFsc28gcG9wdWxhdGVkIGZyb20gdGhlIG9iamVjdCBkYXRhYmFzZSB3aGVuIGNoZWNraW5nIG91dCBhCiticmFuY2gsIGFuZCBpcyB1c2VkIHRvIGhvbGQgdGhlIHRyZWVzIGludm9sdmVkIGluIGEgbWVyZ2Ugb3BlcmF0aW9uLgorU2VlIGxpbmtnaXQ6Z2l0Y29yZS10dXRvcmlhbFs3XSBhbmQgdGhlIHJlbGV2YW50IG1hbgorcGFnZXMgZm9yIGRldGFpbHMuCisKK1doYXQgbmV4dD8KKy0tLS0tLS0tLS0KKworQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIGtub3cgZXZlcnl0aGluZyBuZWNlc3NhcnkgdG8gcmVhZCB0aGUgbWFuCitwYWdlcyBmb3IgYW55IG9mIHRoZSBnaXQgY29tbWFuZHM7IG9uZSBnb29kIHBsYWNlIHRvIHN0YXJ0IHdvdWxkIGJlCit3aXRoIHRoZSBjb21tYW5kcyBtZW50aW9uZWQgaW4gbGlua2dpdDpnaXRldmVyeWRheVs3XS4gIFlvdQorc2hvdWxkIGJlIGFibGUgdG8gZmluZCBhbnkgdW5rbm93biBqYXJnb24gaW4gbGlua2dpdDpnaXRnbG9zc2FyeVs3XS4KKworVGhlIGxpbms6dXNlci1tYW51YWwuaHRtbFtHaXQgVXNlcidzIE1hbnVhbF0gcHJvdmlkZXMgYSBtb3JlCitjb21wcmVoZW5zaXZlIGludHJvZHVjdGlvbiB0byBHaXQuCisKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSBleHBsYWlucyBob3cgdG8KK2ltcG9ydCBhIENWUyByZXBvc2l0b3J5IGludG8gR2l0LCBhbmQgc2hvd3MgaG93IHRvIHVzZSBHaXQgaW4gYQorQ1ZTLWxpa2Ugd2F5LgorCitGb3Igc29tZSBpbnRlcmVzdGluZyBleGFtcGxlcyBvZiBHaXQgdXNlLCBzZWUgdGhlCitsaW5rOmhvd3RvLWluZGV4Lmh0bWxbaG93dG9zXS4KKworRm9yIEdpdCBkZXZlbG9wZXJzLCBsaW5rZ2l0OmdpdGNvcmUtdHV0b3JpYWxbN10gZ29lcworaW50byBkZXRhaWwgb24gdGhlIGxvd2VyLWxldmVsIEdpdCBtZWNoYW5pc21zIGludm9sdmVkIGluLCBmb3IKK2V4YW1wbGUsIGNyZWF0aW5nIGEgbmV3IGNvbW1pdC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKK2xpbmtnaXQ6Z2l0LWhlbHBbMV0sCitsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddLAorbGluazp1c2VyLW1hbnVhbC5odG1sW1RoZSBHaXQgVXNlcidzIE1hbnVhbF0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDBjNjdkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR0dXRvcmlhbC50eHQKQEAgLTAsMCArMSw2NzcgQEAKK2dpdHR1dG9yaWFsKDcpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXR0dXRvcmlhbCAtIEEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdAorCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KK2dpdCAqCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIHR1dG9yaWFsIGV4cGxhaW5zIGhvdyB0byBpbXBvcnQgYSBuZXcgcHJvamVjdCBpbnRvIEdpdCwgbWFrZQorY2hhbmdlcyB0byBpdCwgYW5kIHNoYXJlIGNoYW5nZXMgd2l0aCBvdGhlciBkZXZlbG9wZXJzLgorCitJZiB5b3UgYXJlIGluc3RlYWQgcHJpbWFyaWx5IGludGVyZXN0ZWQgaW4gdXNpbmcgR2l0IHRvIGZldGNoIGEgcHJvamVjdCwKK2ZvciBleGFtcGxlLCB0byB0ZXN0IHRoZSBsYXRlc3QgdmVyc2lvbiwgeW91IG1heSBwcmVmZXIgdG8gc3RhcnQgd2l0aAordGhlIGZpcnN0IHR3byBjaGFwdGVycyBvZiBsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXS4KKworRmlyc3QsIG5vdGUgdGhhdCB5b3UgY2FuIGdldCBkb2N1bWVudGF0aW9uIGZvciBhIGNvbW1hbmQgc3VjaCBhcworYGdpdCBsb2cgLS1ncmFwaGAgd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG1hbiBnaXQtbG9nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworb3I6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgaGVscCBsb2cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIHRoZSBsYXR0ZXIsIHlvdSBjYW4gdXNlIHRoZSBtYW51YWwgdmlld2VyIG9mIHlvdXIgY2hvaWNlOyBzZWUKK2xpbmtnaXQ6Z2l0LWhlbHBbMV0gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0l0IGlzIGEgZ29vZCBpZGVhIHRvIGludHJvZHVjZSB5b3Vyc2VsZiB0byBHaXQgd2l0aCB5b3VyIG5hbWUgYW5kCitwdWJsaWMgZW1haWwgYWRkcmVzcyBiZWZvcmUgZG9pbmcgYW55IG9wZXJhdGlvbi4gIFRoZSBlYXNpZXN0Cit3YXkgdG8gZG8gc28gaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAiWW91ciBOYW1lIENvbWVzIEhlcmUiCiskIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAeW91cmRvbWFpbi5leGFtcGxlLmNvbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworSW1wb3J0aW5nIGEgbmV3IHByb2plY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Fzc3VtZSB5b3UgaGF2ZSBhIHRhcmJhbGwgcHJvamVjdC50YXIuZ3ogd2l0aCB5b3VyIGluaXRpYWwgd29yay4gIFlvdQorY2FuIHBsYWNlIGl0IHVuZGVyIEdpdCByZXZpc2lvbiBjb250cm9sIGFzIGZvbGxvd3MuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCB0YXIgeHpmIHByb2plY3QudGFyLmd6CiskIGNkIHByb2plY3QKKyQgZ2l0IGluaXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgd2lsbCByZXBseQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0luaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIC5naXQvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91J3ZlIG5vdyBpbml0aWFsaXplZCB0aGUgd29ya2luZyBkaXJlY3RvcnktLXlvdSBtYXkgbm90aWNlIGEgbmV3CitkaXJlY3RvcnkgY3JlYXRlZCwgbmFtZWQgIi5naXQiLgorCitOZXh0LCB0ZWxsIEdpdCB0byB0YWtlIGEgc25hcHNob3Qgb2YgdGhlIGNvbnRlbnRzIG9mIGFsbCBmaWxlcyB1bmRlciB0aGUKK2N1cnJlbnQgZGlyZWN0b3J5IChub3RlIHRoZSAnLicpLCB3aXRoICdnaXQgYWRkJzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBhZGQgLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc25hcHNob3QgaXMgbm93IHN0b3JlZCBpbiBhIHRlbXBvcmFyeSBzdGFnaW5nIGFyZWEgd2hpY2ggR2l0IGNhbGxzCit0aGUgImluZGV4Ii4gIFlvdSBjYW4gcGVybWFuZW50bHkgc3RvcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSBpbmRleCBpbiB0aGUKK3JlcG9zaXRvcnkgd2l0aCAnZ2l0IGNvbW1pdCc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIHByb21wdCB5b3UgZm9yIGEgY29tbWl0IG1lc3NhZ2UuICBZb3UndmUgbm93IHN0b3JlZCB0aGUgZmlyc3QKK3ZlcnNpb24gb2YgeW91ciBwcm9qZWN0IGluIEdpdC4KKworTWFraW5nIGNoYW5nZXMKKy0tLS0tLS0tLS0tLS0tCisKK01vZGlmeSBzb21lIGZpbGVzLCB0aGVuIGFkZCB0aGVpciB1cGRhdGVkIGNvbnRlbnRzIHRvIHRoZSBpbmRleDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBhZGQgZmlsZTEgZmlsZTIgZmlsZTMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgYXJlIG5vdyByZWFkeSB0byBjb21taXQuICBZb3UgY2FuIHNlZSB3aGF0IGlzIGFib3V0IHRvIGJlIGNvbW1pdHRlZAordXNpbmcgJ2dpdCBkaWZmJyB3aXRoIHRoZSAtLWNhY2hlZCBvcHRpb246CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiAtLWNhY2hlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhXaXRob3V0IC0tY2FjaGVkLCAnZ2l0IGRpZmYnIHdpbGwgc2hvdyB5b3UgYW55IGNoYW5nZXMgdGhhdAoreW91J3ZlIG1hZGUgYnV0IG5vdCB5ZXQgYWRkZWQgdG8gdGhlIGluZGV4LikgIFlvdSBjYW4gYWxzbyBnZXQgYSBicmllZgorc3VtbWFyeSBvZiB0aGUgc2l0dWF0aW9uIHdpdGggJ2dpdCBzdGF0dXMnOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN0YXR1cworT24gYnJhbmNoIG1hc3RlcgorQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CitZb3VyIGJyYW5jaCBpcyB1cC10by1kYXRlIHdpdGggJ29yaWdpbi9tYXN0ZXInLgorICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisKKwltb2RpZmllZDogICBmaWxlMQorCW1vZGlmaWVkOiAgIGZpbGUyCisJbW9kaWZpZWQ6ICAgZmlsZTMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBuZWVkIHRvIG1ha2UgYW55IGZ1cnRoZXIgYWRqdXN0bWVudHMsIGRvIHNvIG5vdywgYW5kIHRoZW4gYWRkIGFueQorbmV3bHkgbW9kaWZpZWQgY29udGVudCB0byB0aGUgaW5kZXguICBGaW5hbGx5LCBjb21taXQgeW91ciBjaGFuZ2VzIHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB3aWxsIGFnYWluIHByb21wdCB5b3UgZm9yIGEgbWVzc2FnZSBkZXNjcmliaW5nIHRoZSBjaGFuZ2UsIGFuZCB0aGVuCityZWNvcmQgYSBuZXcgdmVyc2lvbiBvZiB0aGUgcHJvamVjdC4KKworQWx0ZXJuYXRpdmVseSwgaW5zdGVhZCBvZiBydW5uaW5nICdnaXQgYWRkJyBiZWZvcmVoYW5kLCB5b3UgY2FuIHVzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgYXV0b21hdGljYWxseSBub3RpY2UgYW55IG1vZGlmaWVkIChidXQgbm90IG5ldykgZmlsZXMsIGFkZAordGhlbSB0byB0aGUgaW5kZXgsIGFuZCBjb21taXQsIGFsbCBpbiBvbmUgc3RlcC4KKworQSBub3RlIG9uIGNvbW1pdCBtZXNzYWdlczogVGhvdWdoIG5vdCByZXF1aXJlZCwgaXQncyBhIGdvb2QgaWRlYSB0bworYmVnaW4gdGhlIGNvbW1pdCBtZXNzYWdlIHdpdGggYSBzaW5nbGUgc2hvcnQgKGxlc3MgdGhhbiA1MCBjaGFyYWN0ZXIpCitsaW5lIHN1bW1hcml6aW5nIHRoZSBjaGFuZ2UsIGZvbGxvd2VkIGJ5IGEgYmxhbmsgbGluZSBhbmQgdGhlbiBhIG1vcmUKK3Rob3JvdWdoIGRlc2NyaXB0aW9uLiBUaGUgdGV4dCB1cCB0byB0aGUgZmlyc3QgYmxhbmsgbGluZSBpbiBhIGNvbW1pdAorbWVzc2FnZSBpcyB0cmVhdGVkIGFzIHRoZSBjb21taXQgdGl0bGUsIGFuZCB0aGF0IHRpdGxlIGlzIHVzZWQKK3Rocm91Z2hvdXQgR2l0LiAgRm9yIGV4YW1wbGUsIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSB0dXJucyBhCitjb21taXQgaW50byBlbWFpbCwgYW5kIGl0IHVzZXMgdGhlIHRpdGxlIG9uIHRoZSBTdWJqZWN0IGxpbmUgYW5kIHRoZQorcmVzdCBvZiB0aGUgY29tbWl0IGluIHRoZSBib2R5LgorCitHaXQgdHJhY2tzIGNvbnRlbnQgbm90IGZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01hbnkgcmV2aXNpb24gY29udHJvbCBzeXN0ZW1zIHByb3ZpZGUgYW4gYGFkZGAgY29tbWFuZCB0aGF0IHRlbGxzIHRoZQorc3lzdGVtIHRvIHN0YXJ0IHRyYWNraW5nIGNoYW5nZXMgdG8gYSBuZXcgZmlsZS4gIEdpdCdzIGBhZGRgIGNvbW1hbmQKK2RvZXMgc29tZXRoaW5nIHNpbXBsZXIgYW5kIG1vcmUgcG93ZXJmdWw6ICdnaXQgYWRkJyBpcyB1c2VkIGJvdGggZm9yIG5ldworYW5kIG5ld2x5IG1vZGlmaWVkIGZpbGVzLCBhbmQgaW4gYm90aCBjYXNlcyBpdCB0YWtlcyBhIHNuYXBzaG90IG9mIHRoZQorZ2l2ZW4gZmlsZXMgYW5kIHN0YWdlcyB0aGF0IGNvbnRlbnQgaW4gdGhlIGluZGV4LCByZWFkeSBmb3IgaW5jbHVzaW9uIGluCit0aGUgbmV4dCBjb21taXQuCisKK1ZpZXdpbmcgcHJvamVjdCBoaXN0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBdCBhbnkgcG9pbnQgeW91IGNhbiB2aWV3IHRoZSBoaXN0b3J5IG9mIHlvdXIgY2hhbmdlcyB1c2luZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBhbHNvIHdhbnQgdG8gc2VlIGNvbXBsZXRlIGRpZmZzIGF0IGVhY2ggc3RlcCwgdXNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC1wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT2Z0ZW4gdGhlIG92ZXJ2aWV3IG9mIHRoZSBjaGFuZ2UgaXMgdXNlZnVsIHRvIGdldCBhIGZlZWwgb2YKK2VhY2ggc3RlcAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtLXN0YXQgLS1zdW1tYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFuYWdpbmcgYnJhbmNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0Egc2luZ2xlIEdpdCByZXBvc2l0b3J5IGNhbiBtYWludGFpbiBtdWx0aXBsZSBicmFuY2hlcyBvZgorZGV2ZWxvcG1lbnQuICBUbyBjcmVhdGUgYSBuZXcgYnJhbmNoIG5hbWVkICJleHBlcmltZW50YWwiLCB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggZXhwZXJpbWVudGFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IG5vdyBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit5b3UnbGwgZ2V0IGEgbGlzdCBvZiBhbGwgZXhpc3RpbmcgYnJhbmNoZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBleHBlcmltZW50YWwKKyogbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJleHBlcmltZW50YWwiIGJyYW5jaCBpcyB0aGUgb25lIHlvdSBqdXN0IGNyZWF0ZWQsIGFuZCB0aGUKKyJtYXN0ZXIiIGJyYW5jaCBpcyBhIGRlZmF1bHQgYnJhbmNoIHRoYXQgd2FzIGNyZWF0ZWQgZm9yIHlvdQorYXV0b21hdGljYWxseS4gIFRoZSBhc3RlcmlzayBtYXJrcyB0aGUgYnJhbmNoIHlvdSBhcmUgY3VycmVudGx5IG9uOwordHlwZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IGV4cGVyaW1lbnRhbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHN3aXRjaCB0byB0aGUgZXhwZXJpbWVudGFsIGJyYW5jaC4gIE5vdyBlZGl0IGEgZmlsZSwgY29tbWl0IHRoZQorY2hhbmdlLCBhbmQgc3dpdGNoIGJhY2sgdG8gdGhlIG1hc3RlciBicmFuY2g6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKGVkaXQgZmlsZSkKKyQgZ2l0IGNvbW1pdCAtYQorJCBnaXQgY2hlY2tvdXQgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hlY2sgdGhhdCB0aGUgY2hhbmdlIHlvdSBtYWRlIGlzIG5vIGxvbmdlciB2aXNpYmxlLCBzaW5jZSBpdCB3YXMKK21hZGUgb24gdGhlIGV4cGVyaW1lbnRhbCBicmFuY2ggYW5kIHlvdSdyZSBiYWNrIG9uIHRoZSBtYXN0ZXIgYnJhbmNoLgorCitZb3UgY2FuIG1ha2UgYSBkaWZmZXJlbnQgY2hhbmdlIG9uIHRoZSBtYXN0ZXIgYnJhbmNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyhlZGl0IGZpbGUpCiskIGdpdCBjb21taXQgLWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithdCB0aGlzIHBvaW50IHRoZSB0d28gYnJhbmNoZXMgaGF2ZSBkaXZlcmdlZCwgd2l0aCBkaWZmZXJlbnQgY2hhbmdlcworbWFkZSBpbiBlYWNoLiAgVG8gbWVyZ2UgdGhlIGNoYW5nZXMgbWFkZSBpbiBleHBlcmltZW50YWwgaW50byBtYXN0ZXIsIHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IG1lcmdlIGV4cGVyaW1lbnRhbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBjaGFuZ2VzIGRvbid0IGNvbmZsaWN0LCB5b3UncmUgZG9uZS4gIElmIHRoZXJlIGFyZSBjb25mbGljdHMsCittYXJrZXJzIHdpbGwgYmUgbGVmdCBpbiB0aGUgcHJvYmxlbWF0aWMgZmlsZXMgc2hvd2luZyB0aGUgY29uZmxpY3Q7CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgc2hvdyB0aGlzLiAgT25jZSB5b3UndmUgZWRpdGVkIHRoZSBmaWxlcyB0byByZXNvbHZlIHRoZQorY29uZmxpY3RzLAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtYQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgY29tbWl0IHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLiBGaW5hbGx5LAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0aworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgc2hvdyBhIG5pY2UgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXN1bHRpbmcgaGlzdG9yeS4KKworQXQgdGhpcyBwb2ludCB5b3UgY291bGQgZGVsZXRlIHRoZSBleHBlcmltZW50YWwgYnJhbmNoIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggLWQgZXhwZXJpbWVudGFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBjb21tYW5kIGVuc3VyZXMgdGhhdCB0aGUgY2hhbmdlcyBpbiB0aGUgZXhwZXJpbWVudGFsIGJyYW5jaCBhcmUKK2FscmVhZHkgaW4gdGhlIGN1cnJlbnQgYnJhbmNoLgorCitJZiB5b3UgZGV2ZWxvcCBvbiBhIGJyYW5jaCBjcmF6eS1pZGVhLCB0aGVuIHJlZ3JldCBpdCwgeW91IGNhbiBhbHdheXMKK2RlbGV0ZSB0aGUgYnJhbmNoIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1EIGNyYXp5LWlkZWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnJhbmNoZXMgYXJlIGNoZWFwIGFuZCBlYXN5LCBzbyB0aGlzIGlzIGEgZ29vZCB3YXkgdG8gdHJ5IHNvbWV0aGluZworb3V0LgorCitVc2luZyBHaXQgZm9yIGNvbGxhYm9yYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdXBwb3NlIHRoYXQgQWxpY2UgaGFzIHN0YXJ0ZWQgYSBuZXcgcHJvamVjdCB3aXRoIGEgR2l0IHJlcG9zaXRvcnkgaW4KKy9ob21lL2FsaWNlL3Byb2plY3QsIGFuZCB0aGF0IEJvYiwgd2hvIGhhcyBhIGhvbWUgZGlyZWN0b3J5IG9uIHRoZQorc2FtZSBtYWNoaW5lLCB3YW50cyB0byBjb250cmlidXRlLgorCitCb2IgYmVnaW5zIHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYm9iJCBnaXQgY2xvbmUgL2hvbWUvYWxpY2UvcHJvamVjdCBteXJlcG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNyZWF0ZXMgYSBuZXcgZGlyZWN0b3J5ICJteXJlcG8iIGNvbnRhaW5pbmcgYSBjbG9uZSBvZiBBbGljZSdzCityZXBvc2l0b3J5LiAgVGhlIGNsb25lIGlzIG9uIGFuIGVxdWFsIGZvb3Rpbmcgd2l0aCB0aGUgb3JpZ2luYWwKK3Byb2plY3QsIHBvc3Nlc3NpbmcgaXRzIG93biBjb3B5IG9mIHRoZSBvcmlnaW5hbCBwcm9qZWN0J3MgaGlzdG9yeS4KKworQm9iIHRoZW4gbWFrZXMgc29tZSBjaGFuZ2VzIGFuZCBjb21taXRzIHRoZW06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKGVkaXQgZmlsZXMpCitib2IkIGdpdCBjb21taXQgLWEKKyhyZXBlYXQgYXMgbmVjZXNzYXJ5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gaGUncyByZWFkeSwgaGUgdGVsbHMgQWxpY2UgdG8gcHVsbCBjaGFuZ2VzIGZyb20gdGhlIHJlcG9zaXRvcnkKK2F0IC9ob21lL2JvYi9teXJlcG8uICBTaGUgZG9lcyB0aGlzIHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGNkIC9ob21lL2FsaWNlL3Byb2plY3QKK2FsaWNlJCBnaXQgcHVsbCAvaG9tZS9ib2IvbXlyZXBvIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbWVyZ2VzIHRoZSBjaGFuZ2VzIGZyb20gQm9iJ3MgIm1hc3RlciIgYnJhbmNoIGludG8gQWxpY2UncworY3VycmVudCBicmFuY2guICBJZiBBbGljZSBoYXMgbWFkZSBoZXIgb3duIGNoYW5nZXMgaW4gdGhlIG1lYW50aW1lLAordGhlbiBzaGUgbWF5IG5lZWQgdG8gbWFudWFsbHkgZml4IGFueSBjb25mbGljdHMuCisKK1RoZSAicHVsbCIgY29tbWFuZCB0aHVzIHBlcmZvcm1zIHR3byBvcGVyYXRpb25zOiBpdCBmZXRjaGVzIGNoYW5nZXMKK2Zyb20gYSByZW1vdGUgYnJhbmNoLCB0aGVuIG1lcmdlcyB0aGVtIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLgorCitOb3RlIHRoYXQgaW4gZ2VuZXJhbCwgQWxpY2Ugd291bGQgd2FudCBoZXIgbG9jYWwgY2hhbmdlcyBjb21taXR0ZWQgYmVmb3JlCitpbml0aWF0aW5nIHRoaXMgInB1bGwiLiAgSWYgQm9iJ3Mgd29yayBjb25mbGljdHMgd2l0aCB3aGF0IEFsaWNlIGRpZCBzaW5jZQordGhlaXIgaGlzdG9yaWVzIGZvcmtlZCwgQWxpY2Ugd2lsbCB1c2UgaGVyIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IHRvCityZXNvbHZlIGNvbmZsaWN0cywgYW5kIGV4aXN0aW5nIGxvY2FsIGNoYW5nZXMgd2lsbCBpbnRlcmZlcmUgd2l0aCB0aGUKK2NvbmZsaWN0IHJlc29sdXRpb24gcHJvY2VzcyAoR2l0IHdpbGwgc3RpbGwgcGVyZm9ybSB0aGUgZmV0Y2ggYnV0IHdpbGwKK3JlZnVzZSB0byBtZXJnZSAtLS0gQWxpY2Ugd2lsbCBoYXZlIHRvIGdldCByaWQgb2YgaGVyIGxvY2FsIGNoYW5nZXMgaW4KK3NvbWUgd2F5IGFuZCBwdWxsIGFnYWluIHdoZW4gdGhpcyBoYXBwZW5zKS4KKworQWxpY2UgY2FuIHBlZWsgYXQgd2hhdCBCb2IgZGlkIHdpdGhvdXQgbWVyZ2luZyBmaXJzdCwgdXNpbmcgdGhlICJmZXRjaCIKK2NvbW1hbmQ7IHRoaXMgYWxsb3dzIEFsaWNlIHRvIGluc3BlY3Qgd2hhdCBCb2IgZGlkLCB1c2luZyBhIHNwZWNpYWwKK3N5bWJvbCAiRkVUQ0hfSEVBRCIsIGluIG9yZGVyIHRvIGRldGVybWluZSBpZiBoZSBoYXMgYW55dGhpbmcgd29ydGgKK3B1bGxpbmcsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGljZSQgZ2l0IGZldGNoIC9ob21lL2JvYi9teXJlcG8gbWFzdGVyCithbGljZSQgZ2l0IGxvZyAtcCBIRUFELi5GRVRDSF9IRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBvcGVyYXRpb24gaXMgc2FmZSBldmVuIGlmIEFsaWNlIGhhcyB1bmNvbW1pdHRlZCBsb2NhbCBjaGFuZ2VzLgorVGhlIHJhbmdlIG5vdGF0aW9uICJIRUFELi5GRVRDSF9IRUFEIiBtZWFucyAic2hvdyBldmVyeXRoaW5nIHRoYXQgaXMgcmVhY2hhYmxlCitmcm9tIHRoZSBGRVRDSF9IRUFEIGJ1dCBleGNsdWRlIGFueXRoaW5nIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gSEVBRCIuCitBbGljZSBhbHJlYWR5IGtub3dzIGV2ZXJ5dGhpbmcgdGhhdCBsZWFkcyB0byBoZXIgY3VycmVudCBzdGF0ZSAoSEVBRCksCithbmQgcmV2aWV3cyB3aGF0IEJvYiBoYXMgaW4gaGlzIHN0YXRlIChGRVRDSF9IRUFEKSB0aGF0IHNoZSBoYXMgbm90CitzZWVuIHdpdGggdGhpcyBjb21tYW5kLgorCitJZiBBbGljZSB3YW50cyB0byB2aXN1YWxpemUgd2hhdCBCb2IgZGlkIHNpbmNlIHRoZWlyIGhpc3RvcmllcyBmb3JrZWQKK3NoZSBjYW4gaXNzdWUgdGhlIGZvbGxvd2luZyBjb21tYW5kOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayBIRUFELi5GRVRDSF9IRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB1c2VzIHRoZSBzYW1lIHR3by1kb3QgcmFuZ2Ugbm90YXRpb24gd2Ugc2F3IGVhcmxpZXIgd2l0aCAnZ2l0IGxvZycuCisKK0FsaWNlIG1heSB3YW50IHRvIHZpZXcgd2hhdCBib3RoIG9mIHRoZW0gZGlkIHNpbmNlIHRoZXkgZm9ya2VkLgorU2hlIGNhbiB1c2UgdGhyZWUtZG90IGZvcm0gaW5zdGVhZCBvZiB0aGUgdHdvLWRvdCBmb3JtOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0ayBIRUFELi4uRkVUQ0hfSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbWVhbnMgInNob3cgZXZlcnl0aGluZyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGVpdGhlciBvbmUsIGJ1dAorZXhjbHVkZSBhbnl0aGluZyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGJvdGggb2YgdGhlbSIuCisKK1BsZWFzZSBub3RlIHRoYXQgdGhlc2UgcmFuZ2Ugbm90YXRpb24gY2FuIGJlIHVzZWQgd2l0aCBib3RoIGdpdGsKK2FuZCAiZ2l0IGxvZyIuCisKK0FmdGVyIGluc3BlY3Rpbmcgd2hhdCBCb2IgZGlkLCBpZiB0aGVyZSBpcyBub3RoaW5nIHVyZ2VudCwgQWxpY2UgbWF5CitkZWNpZGUgdG8gY29udGludWUgd29ya2luZyB3aXRob3V0IHB1bGxpbmcgZnJvbSBCb2IuICBJZiBCb2IncyBoaXN0b3J5Citkb2VzIGhhdmUgc29tZXRoaW5nIEFsaWNlIHdvdWxkIGltbWVkaWF0ZWx5IG5lZWQsIEFsaWNlIG1heSBjaG9vc2UgdG8KK3N0YXNoIGhlciB3b3JrLWluLXByb2dyZXNzIGZpcnN0LCBkbyBhICJwdWxsIiwgYW5kIHRoZW4gZmluYWxseSB1bnN0YXNoCitoZXIgd29yay1pbi1wcm9ncmVzcyBvbiB0b3Agb2YgdGhlIHJlc3VsdGluZyBoaXN0b3J5LgorCitXaGVuIHlvdSBhcmUgd29ya2luZyBpbiBhIHNtYWxsIGNsb3NlbHkga25pdCBncm91cCwgaXQgaXMgbm90Cit1bnVzdWFsIHRvIGludGVyYWN0IHdpdGggdGhlIHNhbWUgcmVwb3NpdG9yeSBvdmVyIGFuZCBvdmVyCithZ2Fpbi4gIEJ5IGRlZmluaW5nICdyZW1vdGUnIHJlcG9zaXRvcnkgc2hvcnRoYW5kLCB5b3UgY2FuIG1ha2UKK2l0IGVhc2llcjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbGljZSQgZ2l0IHJlbW90ZSBhZGQgYm9iIC9ob21lL2JvYi9teXJlcG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIHRoaXMsIEFsaWNlIGNhbiBwZXJmb3JtIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSAicHVsbCIgb3BlcmF0aW9uCithbG9uZSB1c2luZyB0aGUgJ2dpdCBmZXRjaCcgY29tbWFuZCB3aXRob3V0IG1lcmdpbmcgdGhlbSB3aXRoIGhlciBvd24KK2JyYW5jaCwgdXNpbmc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2FsaWNlJCBnaXQgZmV0Y2ggYm9iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VubGlrZSB0aGUgbG9uZ2hhbmQgZm9ybSwgd2hlbiBBbGljZSBmZXRjaGVzIGZyb20gQm9iIHVzaW5nIGEKK3JlbW90ZSByZXBvc2l0b3J5IHNob3J0aGFuZCBzZXQgdXAgd2l0aCAnZ2l0IHJlbW90ZScsIHdoYXQgd2FzCitmZXRjaGVkIGlzIHN0b3JlZCBpbiBhIHJlbW90ZS10cmFja2luZyBicmFuY2gsIGluIHRoaXMgY2FzZQorYGJvYi9tYXN0ZXJgLiAgU28gYWZ0ZXIgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBsb2cgLXAgbWFzdGVyLi5ib2IvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Nob3dzIGEgbGlzdCBvZiBhbGwgdGhlIGNoYW5nZXMgdGhhdCBCb2IgbWFkZSBzaW5jZSBoZSBicmFuY2hlZCBmcm9tCitBbGljZSdzIG1hc3RlciBicmFuY2guCisKK0FmdGVyIGV4YW1pbmluZyB0aG9zZSBjaGFuZ2VzLCBBbGljZQorY291bGQgbWVyZ2UgdGhlIGNoYW5nZXMgaW50byBoZXIgbWFzdGVyIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBtZXJnZSBib2IvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgYG1lcmdlYCBjYW4gYWxzbyBiZSBkb25lIGJ5ICdwdWxsaW5nIGZyb20gaGVyIG93biByZW1vdGUtdHJhY2tpbmcKK2JyYW5jaCcsIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWxpY2UkIGdpdCBwdWxsIC4gcmVtb3Rlcy9ib2IvbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCBnaXQgcHVsbCBhbHdheXMgbWVyZ2VzIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLAorcmVnYXJkbGVzcyBvZiB3aGF0IGVsc2UgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKworTGF0ZXIsIEJvYiBjYW4gdXBkYXRlIGhpcyByZXBvIHdpdGggQWxpY2UncyBsYXRlc3QgY2hhbmdlcyB1c2luZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBwdWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCBoZSBkb2Vzbid0IG5lZWQgdG8gZ2l2ZSB0aGUgcGF0aCB0byBBbGljZSdzIHJlcG9zaXRvcnk7Cit3aGVuIEJvYiBjbG9uZWQgQWxpY2UncyByZXBvc2l0b3J5LCBHaXQgc3RvcmVkIHRoZSBsb2NhdGlvbiBvZiBoZXIKK3JlcG9zaXRvcnkgaW4gdGhlIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgbG9jYXRpb24gaXMKK3VzZWQgZm9yIHB1bGxzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBjb25maWcgLS1nZXQgcmVtb3RlLm9yaWdpbi51cmwKKy9ob21lL2FsaWNlL3Byb2plY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKFRoZSBjb21wbGV0ZSBjb25maWd1cmF0aW9uIGNyZWF0ZWQgYnkgJ2dpdCBjbG9uZScgaXMgdmlzaWJsZSB1c2luZworYGdpdCBjb25maWcgLWxgLCBhbmQgdGhlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBtYW4gcGFnZQorZXhwbGFpbnMgdGhlIG1lYW5pbmcgb2YgZWFjaCBvcHRpb24uKQorCitHaXQgYWxzbyBrZWVwcyBhIHByaXN0aW5lIGNvcHkgb2YgQWxpY2UncyBtYXN0ZXIgYnJhbmNoIHVuZGVyIHRoZQorbmFtZSAib3JpZ2luL21hc3RlciI6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2JvYiQgZ2l0IGJyYW5jaCAtcgorICBvcmlnaW4vbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIEJvYiBsYXRlciBkZWNpZGVzIHRvIHdvcmsgZnJvbSBhIGRpZmZlcmVudCBob3N0LCBoZSBjYW4gc3RpbGwKK3BlcmZvcm0gY2xvbmVzIGFuZCBwdWxscyB1c2luZyB0aGUgc3NoIHByb3RvY29sOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitib2IkIGdpdCBjbG9uZSBhbGljZS5vcmc6L2hvbWUvYWxpY2UvcHJvamVjdCBteXJlcG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0ZXJuYXRpdmVseSwgR2l0IGhhcyBhIG5hdGl2ZSBwcm90b2NvbCwgb3IgY2FuIHVzZSByc3luYyBvciBodHRwOworc2VlIGxpbmtnaXQ6Z2l0LXB1bGxbMV0gZm9yIGRldGFpbHMuCisKK0dpdCBjYW4gYWxzbyBiZSB1c2VkIGluIGEgQ1ZTLWxpa2UgbW9kZSwgd2l0aCBhIGNlbnRyYWwgcmVwb3NpdG9yeQordGhhdCB2YXJpb3VzIHVzZXJzIHB1c2ggY2hhbmdlcyB0bzsgc2VlIGxpbmtnaXQ6Z2l0LXB1c2hbMV0gYW5kCitsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10uCisKK0V4cGxvcmluZyBoaXN0b3J5CistLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgaGlzdG9yeSBpcyByZXByZXNlbnRlZCBhcyBhIHNlcmllcyBvZiBpbnRlcnJlbGF0ZWQgY29tbWl0cy4gIFdlCitoYXZlIGFscmVhZHkgc2VlbiB0aGF0IHRoZSAnZ2l0IGxvZycgY29tbWFuZCBjYW4gbGlzdCB0aG9zZSBjb21taXRzLgorTm90ZSB0aGF0IGZpcnN0IGxpbmUgb2YgZWFjaCBnaXQgbG9nIGVudHJ5IGFsc28gZ2l2ZXMgYSBuYW1lIGZvciB0aGUKK2NvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nCitjb21taXQgYzgyYTIyYzM5Y2JjMzI1NzZmNjRmNWM2YjNmMjRiOTllYTgxNDljNworQXV0aG9yOiBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CitEYXRlOiAgIFR1ZSBNYXkgMTYgMTc6MTg6MjIgMjAwNiAtMDcwMAorCisgICAgbWVyZ2UtYmFzZTogQ2xhcmlmeSB0aGUgY29tbWVudHMgb24gcG9zdCBwcm9jZXNzaW5nLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXZSBjYW4gZ2l2ZSB0aGlzIG5hbWUgdG8gJ2dpdCBzaG93JyB0byBzZWUgdGhlIGRldGFpbHMgYWJvdXQgdGhpcworY29tbWl0LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IGM4MmEyMmMzOWNiYzMyNTc2ZjY0ZjVjNmIzZjI0Yjk5ZWE4MTQ5YzcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnV0IHRoZXJlIGFyZSBvdGhlciB3YXlzIHRvIHJlZmVyIHRvIGNvbW1pdHMuICBZb3UgY2FuIHVzZSBhbnkgaW5pdGlhbAorcGFydCBvZiB0aGUgbmFtZSB0aGF0IGlzIGxvbmcgZW5vdWdoIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgYzgyYTIyYzM5YwkjIHRoZSBmaXJzdCBmZXcgY2hhcmFjdGVycyBvZiB0aGUgbmFtZSBhcmUKKwkJCSMgdXN1YWxseSBlbm91Z2gKKyQgZ2l0IHNob3cgSEVBRAkJIyB0aGUgdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaAorJCBnaXQgc2hvdyBleHBlcmltZW50YWwJIyB0aGUgdGlwIG9mIHRoZSAiZXhwZXJpbWVudGFsIiBicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXZlcnkgY29tbWl0IHVzdWFsbHkgaGFzIG9uZSAicGFyZW50IiBjb21taXQKK3doaWNoIHBvaW50cyB0byB0aGUgcHJldmlvdXMgc3RhdGUgb2YgdGhlIHByb2plY3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgSEVBRF4gICMgdG8gc2VlIHRoZSBwYXJlbnQgb2YgSEVBRAorJCBnaXQgc2hvdyBIRUFEXl4gIyB0byBzZWUgdGhlIGdyYW5kcGFyZW50IG9mIEhFQUQKKyQgZ2l0IHNob3cgSEVBRH40ICMgdG8gc2VlIHRoZSBncmVhdC1ncmVhdCBncmFuZHBhcmVudCBvZiBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCBtZXJnZSBjb21taXRzIG1heSBoYXZlIG1vcmUgdGhhbiBvbmUgcGFyZW50OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IEhFQUReMSAjIHNob3cgdGhlIGZpcnN0IHBhcmVudCBvZiBIRUFEIChzYW1lIGFzIEhFQUReKQorJCBnaXQgc2hvdyBIRUFEXjIgIyBzaG93IHRoZSBzZWNvbmQgcGFyZW50IG9mIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHNvIGdpdmUgY29tbWl0cyBuYW1lcyBvZiB5b3VyIG93bjsgYWZ0ZXIgcnVubmluZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB0YWcgdjIuNSAxYjJlMWQ2M2ZmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3lvdSBjYW4gcmVmZXIgdG8gMWIyZTFkNjNmZiBieSB0aGUgbmFtZSAidjIuNSIuICBJZiB5b3UgaW50ZW5kIHRvCitzaGFyZSB0aGlzIG5hbWUgd2l0aCBvdGhlciBwZW9wbGUgKGZvciBleGFtcGxlLCB0byBpZGVudGlmeSBhIHJlbGVhc2UKK3ZlcnNpb24pLCB5b3Ugc2hvdWxkIGNyZWF0ZSBhICJ0YWciIG9iamVjdCwgYW5kIHBlcmhhcHMgc2lnbiBpdDsgc2VlCitsaW5rZ2l0OmdpdC10YWdbMV0gZm9yIGRldGFpbHMuCisKK0FueSBHaXQgY29tbWFuZCB0aGF0IG5lZWRzIHRvIGtub3cgYSBjb21taXQgY2FuIHRha2UgYW55IG9mIHRoZXNlCituYW1lcy4gIEZvciBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIHYyLjUgSEVBRAkgIyBjb21wYXJlIHRoZSBjdXJyZW50IEhFQUQgdG8gdjIuNQorJCBnaXQgYnJhbmNoIHN0YWJsZSB2Mi41ICMgc3RhcnQgYSBuZXcgYnJhbmNoIG5hbWVkICJzdGFibGUiIGJhc2VkCisJCQkgIyBhdCB2Mi41CiskIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gIyByZXNldCB5b3VyIGN1cnJlbnQgYnJhbmNoIGFuZCB3b3JraW5nCisJCQkgIyBkaXJlY3RvcnkgdG8gaXRzIHN0YXRlIGF0IEhFQUReCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlIGNhcmVmdWwgd2l0aCB0aGF0IGxhc3QgY29tbWFuZDogaW4gYWRkaXRpb24gdG8gbG9zaW5nIGFueSBjaGFuZ2VzCitpbiB0aGUgd29ya2luZyBkaXJlY3RvcnksIGl0IHdpbGwgYWxzbyByZW1vdmUgYWxsIGxhdGVyIGNvbW1pdHMgZnJvbQordGhpcyBicmFuY2guICBJZiB0aGlzIGJyYW5jaCBpcyB0aGUgb25seSBicmFuY2ggY29udGFpbmluZyB0aG9zZQorY29tbWl0cywgdGhleSB3aWxsIGJlIGxvc3QuICBBbHNvLCBkb24ndCB1c2UgJ2dpdCByZXNldCcgb24gYQorcHVibGljbHktdmlzaWJsZSBicmFuY2ggdGhhdCBvdGhlciBkZXZlbG9wZXJzIHB1bGwgZnJvbSwgYXMgaXQgd2lsbAorZm9yY2UgbmVlZGxlc3MgbWVyZ2VzIG9uIG90aGVyIGRldmVsb3BlcnMgdG8gY2xlYW4gdXAgdGhlIGhpc3RvcnkuCitJZiB5b3UgbmVlZCB0byB1bmRvIGNoYW5nZXMgdGhhdCB5b3UgaGF2ZSBwdXNoZWQsIHVzZSAnZ2l0IHJldmVydCcKK2luc3RlYWQuCisKK1RoZSAnZ2l0IGdyZXAnIGNvbW1hbmQgY2FuIHNlYXJjaCBmb3Igc3RyaW5ncyBpbiBhbnkgdmVyc2lvbiBvZiB5b3VyCitwcm9qZWN0LCBzbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBncmVwICJoZWxsbyIgdjIuNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzZWFyY2hlcyBmb3IgYWxsIG9jY3VycmVuY2VzIG9mICJoZWxsbyIgaW4gdjIuNS4KKworSWYgeW91IGxlYXZlIG91dCB0aGUgY29tbWl0IG5hbWUsICdnaXQgZ3JlcCcgd2lsbCBzZWFyY2ggYW55IG9mIHRoZQorZmlsZXMgaXQgbWFuYWdlcyBpbiB5b3VyIGN1cnJlbnQgZGlyZWN0b3J5LiAgU28KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZ3JlcCAiaGVsbG8iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lzIGEgcXVpY2sgd2F5IHRvIHNlYXJjaCBqdXN0IHRoZSBmaWxlcyB0aGF0IGFyZSB0cmFja2VkIGJ5IEdpdC4KKworTWFueSBHaXQgY29tbWFuZHMgYWxzbyB0YWtlIHNldHMgb2YgY29tbWl0cywgd2hpY2ggY2FuIGJlIHNwZWNpZmllZAoraW4gYSBudW1iZXIgb2Ygd2F5cy4gIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgd2l0aCAnZ2l0IGxvZyc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyB2Mi41Li52Mi42ICAgICAgICAgICAgIyBjb21taXRzIGJldHdlZW4gdjIuNSBhbmQgdjIuNgorJCBnaXQgbG9nIHYyLjUuLiAgICAgICAgICAgICAgICAjIGNvbW1pdHMgc2luY2UgdjIuNQorJCBnaXQgbG9nIC0tc2luY2U9IjIgd2Vla3MgYWdvIiAjIGNvbW1pdHMgZnJvbSB0aGUgbGFzdCAyIHdlZWtzCiskIGdpdCBsb2cgdjIuNS4uIE1ha2VmaWxlICAgICAgICMgY29tbWl0cyBzaW5jZSB2Mi41IHdoaWNoIG1vZGlmeQorCQkJCSMgTWFrZWZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhbHNvIGdpdmUgJ2dpdCBsb2cnIGEgInJhbmdlIiBvZiBjb21taXRzIHdoZXJlIHRoZSBmaXJzdCBpcyBub3QKK25lY2Vzc2FyaWx5IGFuIGFuY2VzdG9yIG9mIHRoZSBzZWNvbmQ7IGZvciBleGFtcGxlLCBpZiB0aGUgdGlwcyBvZgordGhlIGJyYW5jaGVzICJzdGFibGUiIGFuZCAibWFzdGVyIiBkaXZlcmdlZCBmcm9tIGEgY29tbW9uCitjb21taXQgc29tZSB0aW1lIGFnbywgdGhlbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgc3RhYmxlLi5tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBsaXN0IGNvbW1pdHMgbWFkZSBpbiB0aGUgbWFzdGVyIGJyYW5jaCBidXQgbm90IGluIHRoZQorc3RhYmxlIGJyYW5jaCwgd2hpbGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIG1hc3Rlci4uc3RhYmxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgc2hvdyB0aGUgbGlzdCBvZiBjb21taXRzIG1hZGUgb24gdGhlIHN0YWJsZSBicmFuY2ggYnV0IG5vdAordGhlIG1hc3RlciBicmFuY2guCisKK1RoZSAnZ2l0IGxvZycgY29tbWFuZCBoYXMgYSB3ZWFrbmVzczogaXQgbXVzdCBwcmVzZW50IGNvbW1pdHMgaW4gYQorbGlzdC4gIFdoZW4gdGhlIGhpc3RvcnkgaGFzIGxpbmVzIG9mIGRldmVsb3BtZW50IHRoYXQgZGl2ZXJnZWQgYW5kCit0aGVuIG1lcmdlZCBiYWNrIHRvZ2V0aGVyLCB0aGUgb3JkZXIgaW4gd2hpY2ggJ2dpdCBsb2cnIHByZXNlbnRzCit0aG9zZSBjb21taXRzIGlzIG1lYW5pbmdsZXNzLgorCitNb3N0IHByb2plY3RzIHdpdGggbXVsdGlwbGUgY29udHJpYnV0b3JzIChzdWNoIGFzIHRoZSBMaW51eCBrZXJuZWwsCitvciBHaXQgaXRzZWxmKSBoYXZlIGZyZXF1ZW50IG1lcmdlcywgYW5kICdnaXRrJyBkb2VzIGEgYmV0dGVyIGpvYiBvZgordmlzdWFsaXppbmcgdGhlaXIgaGlzdG9yeS4gIEZvciBleGFtcGxlLAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgLS1zaW5jZT0iMiB3ZWVrcyBhZ28iIGRyaXZlcnMvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FsbG93cyB5b3UgdG8gYnJvd3NlIGFueSBjb21taXRzIGZyb20gdGhlIGxhc3QgMiB3ZWVrcyBvZiBjb21taXRzCit0aGF0IG1vZGlmaWVkIGZpbGVzIHVuZGVyIHRoZSAiZHJpdmVycyIgZGlyZWN0b3J5LiAgKE5vdGU6IHlvdSBjYW4KK2FkanVzdCBnaXRrJ3MgZm9udHMgYnkgaG9sZGluZyBkb3duIHRoZSBjb250cm9sIGtleSB3aGlsZSBwcmVzc2luZworIi0iIG9yICIrIi4pCisKK0ZpbmFsbHksIG1vc3QgY29tbWFuZHMgdGhhdCB0YWtlIGZpbGVuYW1lcyB3aWxsIG9wdGlvbmFsbHkgYWxsb3cgeW91Cit0byBwcmVjZWRlIGFueSBmaWxlbmFtZSBieSBhIGNvbW1pdCwgdG8gc3BlY2lmeSBhIHBhcnRpY3VsYXIgdmVyc2lvbgorb2YgdGhlIGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgdjIuNTpNYWtlZmlsZSBIRUFEOk1ha2VmaWxlLmluCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWxzbyB1c2UgJ2dpdCBzaG93JyB0byBzZWUgYW55IHN1Y2ggZmlsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyB2Mi41Ok1ha2VmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05leHQgU3RlcHMKKy0tLS0tLS0tLS0KKworVGhpcyB0dXRvcmlhbCBzaG91bGQgYmUgZW5vdWdoIHRvIHBlcmZvcm0gYmFzaWMgZGlzdHJpYnV0ZWQgcmV2aXNpb24KK2NvbnRyb2wgZm9yIHlvdXIgcHJvamVjdHMuICBIb3dldmVyLCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBkZXB0aAorYW5kIHBvd2VyIG9mIEdpdCB5b3UgbmVlZCB0byB1bmRlcnN0YW5kIHR3byBzaW1wbGUgaWRlYXMgb24gd2hpY2ggaXQKK2lzIGJhc2VkOgorCisgICogVGhlIG9iamVjdCBkYXRhYmFzZSBpcyB0aGUgcmF0aGVyIGVsZWdhbnQgc3lzdGVtIHVzZWQgdG8KKyAgICBzdG9yZSB0aGUgaGlzdG9yeSBvZiB5b3VyIHByb2plY3QtLWZpbGVzLCBkaXJlY3RvcmllcywgYW5kCisgICAgY29tbWl0cy4KKworICAqIFRoZSBpbmRleCBmaWxlIGlzIGEgY2FjaGUgb2YgdGhlIHN0YXRlIG9mIGEgZGlyZWN0b3J5IHRyZWUsCisgICAgdXNlZCB0byBjcmVhdGUgY29tbWl0cywgY2hlY2sgb3V0IHdvcmtpbmcgZGlyZWN0b3JpZXMsIGFuZAorICAgIGhvbGQgdGhlIHZhcmlvdXMgdHJlZXMgaW52b2x2ZWQgaW4gYSBtZXJnZS4KKworUGFydCB0d28gb2YgdGhpcyB0dXRvcmlhbCBleHBsYWlucyB0aGUgb2JqZWN0CitkYXRhYmFzZSwgdGhlIGluZGV4IGZpbGUsIGFuZCBhIGZldyBvdGhlciBvZGRzIGFuZCBlbmRzIHRoYXQgeW91J2xsCituZWVkIHRvIG1ha2UgdGhlIG1vc3Qgb2YgR2l0LiBZb3UgY2FuIGZpbmQgaXQgYXQgbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLgorCitJZiB5b3UgZG9uJ3Qgd2FudCB0byBjb250aW51ZSB3aXRoIHRoYXQgcmlnaHQgYXdheSwgYSBmZXcgb3RoZXIKK2RpZ3Jlc3Npb25zIHRoYXQgbWF5IGJlIGludGVyZXN0aW5nIGF0IHRoaXMgcG9pbnQgYXJlOgorCisgICogbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLCBsaW5rZ2l0OmdpdC1hbVsxXTogVGhlc2UgY29udmVydAorICAgIHNlcmllcyBvZiBnaXQgY29tbWl0cyBpbnRvIGVtYWlsZWQgcGF0Y2hlcywgYW5kIHZpY2UgdmVyc2EsCisgICAgdXNlZnVsIGZvciBwcm9qZWN0cyBzdWNoIGFzIHRoZSBMaW51eCBrZXJuZWwgd2hpY2ggcmVseSBoZWF2aWx5CisgICAgb24gZW1haWxlZCBwYXRjaGVzLgorCisgICogbGlua2dpdDpnaXQtYmlzZWN0WzFdOiBXaGVuIHRoZXJlIGlzIGEgcmVncmVzc2lvbiBpbiB5b3VyCisgICAgcHJvamVjdCwgb25lIHdheSB0byB0cmFjayBkb3duIHRoZSBidWcgaXMgYnkgc2VhcmNoaW5nIHRocm91Z2gKKyAgICB0aGUgaGlzdG9yeSB0byBmaW5kIHRoZSBleGFjdCBjb21taXQgdGhhdCdzIHRvIGJsYW1lLiAgR2l0IGJpc2VjdAorICAgIGNhbiBoZWxwIHlvdSBwZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBmb3IgdGhhdCBjb21taXQuICBJdCBpcworICAgIHNtYXJ0IGVub3VnaCB0byBwZXJmb3JtIGEgY2xvc2UtdG8tb3B0aW1hbCBzZWFyY2ggZXZlbiBpbiB0aGUKKyAgICBjYXNlIG9mIGNvbXBsZXggbm9uLWxpbmVhciBoaXN0b3J5IHdpdGggbG90cyBvZiBtZXJnZWQgYnJhbmNoZXMuCisKKyAgKiBsaW5rZ2l0OmdpdHdvcmtmbG93c1s3XTogR2l2ZXMgYW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQKKyAgICB3b3JrZmxvd3MuCisKKyAgKiBsaW5rZ2l0OmdpdGV2ZXJ5ZGF5WzddOiBFdmVyeWRheSBHaXQgd2l0aCAyMCBDb21tYW5kcyBPciBTby4KKworICAqIGxpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XTogR2l0IGZvciBDVlMgdXNlcnMuCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbC0yWzddLAorbGlua2dpdDpnaXRjdnMtbWlncmF0aW9uWzddLAorbGlua2dpdDpnaXRjb3JlLXR1dG9yaWFsWzddLAorbGlua2dpdDpnaXRnbG9zc2FyeVs3XSwKK2xpbmtnaXQ6Z2l0LWhlbHBbMV0sCitsaW5rZ2l0OmdpdHdvcmtmbG93c1s3XSwKK2xpbmtnaXQ6Z2l0ZXZlcnlkYXlbN10sCitsaW5rOnVzZXItbWFudWFsLmh0bWxbVGhlIEdpdCBVc2VyJ3MgTWFudWFsXQorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdHdlYi5jb25mLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0d2ViLmNvbmYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDIyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHdlYi5jb25mLnR4dApAQCAtMCwwICsxLDk1OCBAQAorZ2l0d2ViLmNvbmYoNSkKKz09PT09PT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHdlYi5jb25mIC0gR2l0d2ViIChHaXQgd2ViIGludGVyZmFjZSkgY29uZmlndXJhdGlvbiBmaWxlCisKK1NZTk9QU0lTCistLS0tLS0tLQorL2V0Yy9naXR3ZWIuY29uZiwgL2V0Yy9naXR3ZWItY29tbW9uLmNvbmYsICRHSVRXRUJESVIvZ2l0d2ViX2NvbmZpZy5wZXJsCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGUgZ2l0d2ViIENHSSBzY3JpcHQgZm9yIHZpZXdpbmcgR2l0IHJlcG9zaXRvcmllcyBvdmVyIHRoZSB3ZWIgdXNlcyBhCitwZXJsIHNjcmlwdCBmcmFnbWVudCBhcyBpdHMgY29uZmlndXJhdGlvbiBmaWxlLiAgWW91IGNhbiBzZXQgdmFyaWFibGVzCit1c2luZyAiYG91ciAkdmFyaWFibGUgPSB2YWx1ZWAiOyB0ZXh0IGZyb20gYSAiIyIgY2hhcmFjdGVyIHVudGlsIHRoZQorZW5kIG9mIGEgbGluZSBpcyBpZ25vcmVkLiAgU2VlICpwZXJsc3luKigxKSBmb3IgZGV0YWlscy4KKworQW4gZXhhbXBsZToKKworICAgICMgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgaHR0cDovL2dpdC5leGFtcGxlLm9yZworICAgICMKKyAgICBvdXIgJHByb2plY3Ryb290ID0gIi9zcnYvZ2l0IjsgIyBGSFMgcmVjb21tZW5kYXRpb24KKyAgICBvdXIgJHNpdGVfbmFtZSA9ICdFeGFtcGxlLm9yZyA+PiBSZXBvcyc7CisKKworVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmdzIHRoYXQKK3dlcmUgYnVpbHQgaW50byBnaXR3ZWIgYXQgdGhlIHRpbWUgdGhlICdnaXR3ZWIuY2dpJyBzY3JpcHQgd2FzIGdlbmVyYXRlZC4KKworV2hpbGUgb25lIGNvdWxkIGp1c3QgYWx0ZXIgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaW4gdGhlIGdpdHdlYgorQ0dJIGl0c2VsZiwgdGhvc2UgY2hhbmdlcyB3b3VsZCBiZSBsb3N0IHVwb24gdXBncmFkZS4gIENvbmZpZ3VyYXRpb24KK3NldHRpbmdzIG1pZ2h0IGFsc28gYmUgcGxhY2VkIGludG8gYSBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUKK0NHSSBzY3JpcHQgd2l0aCB0aGUgZGVmYXVsdCBuYW1lICdnaXR3ZWJfY29uZmlnLnBlcmwnIC0tIGFsbG93aW5nCitvbmUgdG8gaGF2ZSBtdWx0aXBsZSBnaXR3ZWIgaW5zdGFuY2VzIHdpdGggZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zIGJ5Cit0aGUgdXNlIG9mIHN5bWxpbmtzLgorCitOb3RlIHRoYXQgc29tZSBjb25maWd1cmF0aW9uIGNhbiBiZSBjb250cm9sbGVkIG9uIHBlci1yZXBvc2l0b3J5IHJhdGhlciB0aGFuCitnaXR3ZWItd2lkZSBiYXNpczogc2VlICJQZXItcmVwb3NpdG9yeSBnaXR3ZWIgY29uZmlndXJhdGlvbiIgc3Vic2VjdGlvbiBvbgorbGlua2dpdDpnaXR3ZWJbMV0gbWFucGFnZS4KKworCitESVNDVVNTSU9OCistLS0tLS0tLS0tCitHaXR3ZWIgcmVhZHMgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2VzIGluIHRoZQorZm9sbG93aW5nIG9yZGVyOgorCisgKiBidWlsdC1pbiB2YWx1ZXMgKHNvbWUgc2V0IGR1cmluZyBidWlsZCBzdGFnZSksCisKKyAqIGNvbW1vbiBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvCisgICAnL2V0Yy9naXR3ZWItY29tbW9uLmNvbmYnKSwKKworICogZWl0aGVyIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uIGZpbGUgKGRlZmF1bHRzIHRvICdnaXR3ZWJfY29uZmlnLnBlcmwnCisgICBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGluc3RhbGxlZCBnaXR3ZWIpLCBvciBpZiBpdCBkb2VzIG5vdCBleGlzdHMKKyAgIHRoZW4gZmFsbGJhY2sgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlIChkZWZhdWx0cyB0byAnL2V0Yy9naXR3ZWIuY29uZicpLgorCitWYWx1ZXMgb2J0YWluZWQgaW4gbGF0ZXIgY29uZmlndXJhdGlvbiBmaWxlcyBvdmVycmlkZSB2YWx1ZXMgb2J0YWluZWQgZWFybGllcgoraW4gdGhlIGFib3ZlIHNlcXVlbmNlLgorCitMb2NhdGlvbnMgb2YgdGhlIGNvbW1vbiBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUsIHRoZSBmYWxsYmFjaworc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZCB0aGUgcGVyLWluc3RhbmNlIGNvbmZpZ3VyYXRpb24gZmlsZQorYXJlIGRlZmluZWQgYXQgY29tcGlsZSB0aW1lIHVzaW5nIGJ1aWxkLXRpbWUgTWFrZWZpbGUgY29uZmlndXJhdGlvbgordmFyaWFibGVzLCByZXNwZWN0aXZlbHkgYEdJVFdFQl9DT05GSUdfQ09NTU9OYCwgYEdJVFdFQl9DT05GSUdfU1lTVEVNYAorYW5kIGBHSVRXRUJfQ09ORklHYC4KKworWW91IGNhbiBhbHNvIG92ZXJyaWRlIGxvY2F0aW9ucyBvZiBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlcyBkdXJpbmcKK3J1bnRpbWUgYnkgc2V0dGluZyB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlczoKK2BHSVRXRUJfQ09ORklHX0NPTU1PTmAsIGBHSVRXRUJfQ09ORklHX1NZU1RFTWAgYW5kIGBHSVRXRUJfQ09ORklHYAordG8gYSBub24tZW1wdHkgdmFsdWUuCisKKworVGhlIHN5bnRheCBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBpcyB0aGF0IG9mIFBlcmwsIHNpbmNlIHRoZXNlIGZpbGVzIGFyZQoraGFuZGxlZCBieSBzb3VyY2luZyB0aGVtIGFzIGZyYWdtZW50cyBvZiBQZXJsIGNvZGUgKHRoZSBsYW5ndWFnZSB0aGF0CitnaXR3ZWIgaXRzZWxmIGlzIHdyaXR0ZW4gaW4pLiBWYXJpYWJsZXMgYXJlIHR5cGljYWxseSBzZXQgdXNpbmcgdGhlCitgb3VyYCBxdWFsaWZpZXIgKGFzIGluICJgb3VyICR2YXJpYWJsZSA9IDx2YWx1ZT47YCIpIHRvIGF2b2lkIHN5bnRheAorZXJyb3JzIGlmIGEgbmV3IHZlcnNpb24gb2YgZ2l0d2ViIG5vIGxvbmdlciB1c2VzIGEgdmFyaWFibGUgYW5kIHRoZXJlZm9yZQorc3RvcHMgZGVjbGFyaW5nIGl0LgorCitZb3UgY2FuIGluY2x1ZGUgb3RoZXIgY29uZmlndXJhdGlvbiBmaWxlIHVzaW5nIHJlYWRfY29uZmlnX2ZpbGUoKQorc3Vicm91dGluZS4gIEZvciBleGFtcGxlLCBvbmUgbWlnaHQgd2FudCB0byBwdXQgZ2l0d2ViIGNvbmZpZ3VyYXRpb24KK3JlbGF0ZWQgdG8gYWNjZXNzIGNvbnRyb2wgZm9yIHZpZXdpbmcgcmVwb3NpdG9yaWVzIHZpYSBHaXRvbGl0ZSAob25lCitvZiBHaXQgcmVwb3NpdG9yeSBtYW5hZ2VtZW50IHRvb2xzKSBpbiBhIHNlcGFyYXRlIGZpbGUsIGUuZy4gaW4KKycvZXRjL2dpdHdlYi1naXRvbGl0ZS5jb25mJy4gIFRvIGluY2x1ZGUgaXQsIHB1dAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVhZF9jb25maWdfZmlsZSgiL2V0Yy9naXR3ZWItZ2l0b2xpdGUuY29uZiIpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc29tZXdoZXJlIGluIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGUgdXNlZCwgZS5nLiBpbiBwZXItaW5zdGFsbGF0aW9uCitnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlLiAgTm90ZSB0aGF0IHJlYWRfY29uZmlnX2ZpbGUoKSBjaGVja3MgaXRzZWxmCit0aGF0IHRoZSBmaWxlIGl0IHJlYWRzIGV4aXN0cywgYW5kIGRvZXMgbm90aGluZyBpZiBpdCBpcyBub3QgZm91bmQuCitJdCBhbHNvIGhhbmRsZXMgZXJyb3JzIGluIGluY2x1ZGVkIGZpbGUuCisKKworVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiB3aXRoIG5vIGNvbmZpZ3VyYXRpb24gZmlsZSBhdCBhbGwgbWF5IHdvcmsKK3BlcmZlY3RseSB3ZWxsIGZvciBzb21lIGluc3RhbGxhdGlvbnMuICBTdGlsbCwgYSBjb25maWd1cmF0aW9uIGZpbGUgaXMKK3VzZWZ1bCBmb3IgY3VzdG9taXppbmcgb3IgdHdlYWtpbmcgdGhlIGJlaGF2aW9yIG9mIGdpdHdlYiBpbiBtYW55IHdheXMsIGFuZAorc29tZSBvcHRpb25hbCBmZWF0dXJlcyB3aWxsIG5vdCBiZSBwcmVzZW50IHVubGVzcyBleHBsaWNpdGx5IGVuYWJsZWQgdXNpbmcKK3RoZSBjb25maWd1cmFibGUgYCVmZWF0dXJlc2AgdmFyaWFibGUgKHNlZSBhbHNvICJDb25maWd1cmluZyBnaXR3ZWIKK2ZlYXR1cmVzIiBzZWN0aW9uIGJlbG93KS4KKworCitDT05GSUdVUkFUSU9OIFZBUklBQkxFUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1NvbWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgaGF2ZSB0aGVpciBkZWZhdWx0IHZhbHVlcyAoZW1iZWRkZWQgaW4gdGhlIENHSQorc2NyaXB0KSBzZXQgZHVyaW5nIGJ1aWxkaW5nIGdpdHdlYiAtLSBpZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGlzIGZhY3QgaXMgcHV0CitpbiB0aGVpciBkZXNjcmlwdGlvbi4gIFNlZSBnaXR3ZWIncyAnSU5TVEFMTCcgZmlsZSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGJ1aWxkaW5nCithbmQgaW5zdGFsbGluZyBnaXR3ZWIuCisKKworTG9jYXRpb24gb2YgcmVwb3NpdG9yaWVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBkZXNjcmliZWQgYmVsb3cgY29udHJvbCBob3cgZ2l0d2ViIGZpbmRzCitHaXQgcmVwb3NpdG9yaWVzLCBhbmQgaG93IHJlcG9zaXRvcmllcyBhcmUgZGlzcGxheWVkIGFuZCBhY2Nlc3NlZC4KKworU2VlIGFsc28gIlJlcG9zaXRvcmllcyIgYW5kIGxhdGVyIHN1YnNlY3Rpb25zIGluIGxpbmtnaXQ6Z2l0d2ViWzFdIG1hbnBhZ2UuCisKKyRwcm9qZWN0cm9vdDo6CisJQWJzb2x1dGUgZmlsZXN5c3RlbSBwYXRoIHdoaWNoIHdpbGwgYmUgcHJlcGVuZGVkIHRvIHByb2plY3QgcGF0aDsKKwl0aGUgcGF0aCB0byByZXBvc2l0b3J5IGlzIGAkcHJvamVjdHJvb3QvJHByb2plY3RgLiAgU2V0IHRvCisJYCRHSVRXRUJfUFJPSkVDVFJPT1RgIGR1cmluZyBpbnN0YWxsYXRpb24uICBUaGlzIHZhcmlhYmxlIGhhcyB0byBiZQorCXNldCBjb3JyZWN0bHkgZm9yIGdpdHdlYiB0byBmaW5kIHJlcG9zaXRvcmllcy4KKysKK0ZvciBleGFtcGxlLCBpZiBgJHByb2plY3Ryb290YCBpcyBzZXQgdG8gIi9zcnYvZ2l0IiBieSBwdXR0aW5nIHRoZSBmb2xsb3dpbmcKK2luIGdpdHdlYiBjb25maWcgZmlsZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291ciAkcHJvamVjdHJvb3QgPSAiL3Nydi9naXQiOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKwordGhlbgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitodHRwOi8vZ2l0LmV4YW1wbGUuY29tL2dpdHdlYi5jZ2k/cD1mb28vYmFyLmdpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCithbmQgaXRzIHBhdGhfaW5mbyBiYXNlZCBlcXVpdmFsZW50CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2h0dHA6Ly9naXQuZXhhbXBsZS5jb20vZ2l0d2ViLmNnaS9mb28vYmFyLmdpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCit3aWxsIG1hcCB0byB0aGUgcGF0aCAnL3Nydi9naXQvZm9vL2Jhci5naXQnIG9uIHRoZSBmaWxlc3lzdGVtLgorCiskcHJvamVjdHNfbGlzdDo6CisJTmFtZSBvZiBhIHBsYWluIHRleHQgZmlsZSBsaXN0aW5nIHByb2plY3RzLCBvciBhIG5hbWUgb2YgZGlyZWN0b3J5CisJdG8gYmUgc2Nhbm5lZCBmb3IgcHJvamVjdHMuCisrCitQcm9qZWN0IGxpc3QgZmlsZXMgc2hvdWxkIGxpc3Qgb25lIHByb2plY3QgcGVyIGxpbmUsIHdpdGggZWFjaCBsaW5lCitoYXZpbmcgdGhlIGZvbGxvd2luZyBmb3JtYXQKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8VVJJLWVuY29kZWQgZmlsZXN5c3RlbSBwYXRoIHRvIHJlcG9zaXRvcnk+IFNQIDxVUkktZW5jb2RlZCByZXBvc2l0b3J5IG93bmVyPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgdmFyaWFibGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgYEdJVFdFQl9MSVNUYAorbWFrZWZpbGUgdmFyaWFibGUgYXQgaW5zdGFsbGF0aW9uIHRpbWUuICBJZiB0aGlzIHZhcmlhYmxlIGlzIGVtcHR5LCBnaXR3ZWIKK3dpbGwgZmFsbCBiYWNrIHRvIHNjYW5uaW5nIHRoZSBgJHByb2plY3Ryb290YCBkaXJlY3RvcnkgZm9yIHJlcG9zaXRvcmllcy4KKworJHByb2plY3RfbWF4ZGVwdGg6OgorCUlmIGAkcHJvamVjdHNfbGlzdGAgdmFyaWFibGUgaXMgdW5zZXQsIGdpdHdlYiB3aWxsIHJlY3Vyc2l2ZWx5CisJc2NhbiBmaWxlc3lzdGVtIGZvciBHaXQgcmVwb3NpdG9yaWVzLiAgVGhlIGAkcHJvamVjdF9tYXhkZXB0aGAKKwlpcyB1c2VkIHRvIGxpbWl0IHRyYXZlcnNpbmcgZGVwdGgsIHJlbGF0aXZlIHRvIGAkcHJvamVjdHJvb3RgCisJKHN0YXJ0aW5nIHBvaW50KTsgaXQgbWVhbnMgdGhhdCBkaXJlY3RvcmllcyB3aGljaCBhcmUgZnVydGhlcgorCWZyb20gYCRwcm9qZWN0cm9vdGAgdGhhbiBgJHByb2plY3RfbWF4ZGVwdGhgIHdpbGwgYmUgc2tpcHBlZC4KKysKK0l0IGlzIHB1cmVseSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yaWdpbmFsbHkgaW50ZW5kZWQgZm9yIE1hY09TIFgsCit3aGVyZSByZWN1cnNpdmUgZGlyZWN0b3J5IHRyYXZlcnNhbCBpcyBzbG93LiAgR2l0d2ViIGZvbGxvd3Mgc3ltYm9saWMKK2xpbmtzLCBidXQgaXQgZGV0ZWN0cyBjeWNsZXMsIGlnbm9yaW5nIGFueSBkdXBsaWNhdGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgorKworVGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBidWlsZC10aW1lCitjb25maWd1cmF0aW9uIHZhcmlhYmxlIGBHSVRXRUJfUFJPSkVDVF9NQVhERVBUSGAsIHdoaWNoIGRlZmF1bHRzIHRvCisyMDA3LgorCiskZXhwb3J0X29rOjoKKwlTaG93IHJlcG9zaXRvcnkgb25seSBpZiB0aGlzIGZpbGUgZXhpc3RzIChpbiByZXBvc2l0b3J5KS4gIE9ubHkKKwllZmZlY3RpdmUgaWYgdGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdHJ1ZS4gIENhbiBiZSBzZXQgd2hlbgorCWJ1aWxkaW5nIGdpdHdlYiBieSBzZXR0aW5nIGBHSVRXRUJfRVhQT1JUX09LYC4gIFRoaXMgcGF0aCBpcworCXJlbGF0aXZlIHRvIGBHSVRfRElSYC4gIGdpdC1kYWVtb25bMV0gdXNlcyAnZ2l0LWRhZW1vbi1leHBvcnQtb2snLAorCXVubGVzcyBzdGFydGVkIHdpdGggYC0tZXhwb3J0LWFsbGAuICBCeSBkZWZhdWx0IHRoaXMgdmFyaWFibGUgaXMKKwlub3Qgc2V0LCB3aGljaCBtZWFucyB0aGF0IHRoaXMgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmLgorCiskZXhwb3J0X2F1dGhfaG9vazo6CisJRnVuY3Rpb24gdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggcmVwb3NpdG9yaWVzIHNob3VsZCBiZSBzaG93bi4KKwlUaGlzIHN1YnJvdXRpbmUgc2hvdWxkIHRha2Ugb25lIHBhcmFtZXRlciwgdGhlIGZ1bGwgcGF0aCB0bworCWEgcHJvamVjdCwgYW5kIGlmIGl0IHJldHVybnMgdHJ1ZSwgdGhhdCBwcm9qZWN0IHdpbGwgYmUgaW5jbHVkZWQKKwlpbiB0aGUgcHJvamVjdHMgbGlzdCBhbmQgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggZ2l0d2ViIGFzIGxvbmcKKwlhcyBpdCBmdWxmaWxscyB0aGUgb3RoZXIgcmVxdWlyZW1lbnRzIGRlc2NyaWJlZCBieSAkZXhwb3J0X29rLAorCSRwcm9qZWN0c19saXN0LCBhbmQgJHByb2plY3RzX21heGRlcHRoLiAgRXhhbXBsZToKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291ciAkZXhwb3J0X2F1dGhfaG9vayA9IHN1YiB7IHJldHVybiAtZSAiJF9bMF0vZ2l0LWRhZW1vbi1leHBvcnQtb2siOyB9OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKwordGhvdWdoIHRoZSBhYm92ZSBtaWdodCBiZSBkb25lIGJ5IHVzaW5nIGAkZXhwb3J0X29rYCBpbnN0ZWFkCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJGV4cG9ydF9vayA9ICJnaXQtZGFlbW9uLWV4cG9ydC1vayI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitJZiBub3Qgc2V0IChkZWZhdWx0KSwgaXQgbWVhbnMgdGhhdCB0aGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQuCisrCitTZWUgYWxzbyBtb3JlIGludm9sdmVkIGV4YW1wbGUgaW4gIkNvbnRyb2xsaW5nIGFjY2VzcyB0byBHaXQgcmVwb3NpdG9yaWVzIgorc3Vic2VjdGlvbiBvbiBsaW5rZ2l0OmdpdHdlYlsxXSBtYW5wYWdlLgorCiskc3RyaWN0X2V4cG9ydDo6CisJT25seSBhbGxvdyB2aWV3aW5nIG9mIHJlcG9zaXRvcmllcyBhbHNvIHNob3duIG9uIHRoZSBvdmVydmlldyBwYWdlLgorCVRoaXMgZm9yIGV4YW1wbGUgbWFrZXMgYCRnaXR3ZWJfZXhwb3J0X29rYCBmaWxlIGRlY2lkZSBpZiByZXBvc2l0b3J5IGlzCisJYXZhaWxhYmxlIGFuZCBub3Qgb25seSBpZiBpdCBpcyBzaG93bi4gIElmIGAkZ2l0d2ViX2xpc3RgIHBvaW50cyB0bworCWZpbGUgd2l0aCBsaXN0IG9mIHByb2plY3QsIG9ubHkgdGhvc2UgcmVwb3NpdG9yaWVzIGxpc3RlZCB3b3VsZCBiZQorCWF2YWlsYWJsZSBmb3IgZ2l0d2ViLiAgQ2FuIGJlIHNldCBkdXJpbmcgYnVpbGRpbmcgZ2l0d2ViIHZpYQorCWBHSVRXRUJfU1RSSUNUX0VYUE9SVGAuICBCeSBkZWZhdWx0IHRoaXMgdmFyaWFibGUgaXMgbm90IHNldCwgd2hpY2gKKwltZWFucyB0aGF0IHlvdSBjYW4gZGlyZWN0bHkgYWNjZXNzIHRob3NlIHJlcG9zaXRvcmllcyB0aGF0IGFyZSBoaWRkZW4KKwlmcm9tIHByb2plY3RzIGxpc3QgcGFnZSAoZS5nLiB0aGUgYXJlIG5vdCBsaXN0ZWQgaW4gdGhlICRwcm9qZWN0c19saXN0CisJZmlsZSkuCisKKworRmluZGluZyBmaWxlcworfn5+fn5+fn5+fn5+fgorVGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0ZWxsIGdpdHdlYiB3aGVyZSB0byBmaW5kIGZpbGVzLgorVGhlIHZhbHVlcyBvZiB0aGVzZSB2YXJpYWJsZXMgYXJlIHBhdGhzIG9uIHRoZSBmaWxlc3lzdGVtLgorCiskR0lUOjoKKwlDb3JlIGdpdCBleGVjdXRhYmxlIHRvIHVzZS4gIEJ5IGRlZmF1bHQgc2V0IHRvIGAkR0lUX0JJTkRJUi9naXRgLCB3aGljaAorCWluIHR1cm4gaXMgYnkgZGVmYXVsdCBzZXQgdG8gYCQoYmluZGlyKS9naXRgLiAgSWYgeW91IHVzZSBHaXQgaW5zdGFsbGVkCisJZnJvbSBhIGJpbmFyeSBwYWNrYWdlLCB5b3Ugc2hvdWxkIHVzdWFsbHkgc2V0IHRoaXMgdG8gIi91c3IvYmluL2dpdCIuCisJVGhpcyBjYW4ganVzdCBiZSAiZ2l0IiBpZiB5b3VyIHdlYiBzZXJ2ZXIgaGFzIGEgc2Vuc2libGUgUEFUSDsgZnJvbQorCXNlY3VyaXR5IHBvaW50IG9mIHZpZXcgaXQgaXMgYmV0dGVyIHRvIHVzZSBhYnNvbHV0ZSBwYXRoIHRvIGdpdCBiaW5hcnkuCisJSWYgeW91IGhhdmUgbXVsdGlwbGUgR2l0IHZlcnNpb25zIGluc3RhbGxlZCBpdCBjYW4gYmUgdXNlZCB0byBjaG9vc2UKKwl3aGljaCBvbmUgdG8gdXNlLiAgTXVzdCBiZSAoY29ycmVjdGx5KSBzZXQgZm9yIGdpdHdlYiB0byBiZSBhYmxlIHRvCisJd29yay4KKworJG1pbWV0eXBlc19maWxlOjoKKwlGaWxlIHRvIHVzZSBmb3IgKGZpbGVuYW1lIGV4dGVuc2lvbiBiYXNlZCkgZ3Vlc3Npbmcgb2YgTUlNRSB0eXBlcyBiZWZvcmUKKwl0cnlpbmcgJy9ldGMvbWltZS50eXBlcycuICAqTk9URSogdGhhdCB0aGlzIHBhdGgsIGlmIHJlbGF0aXZlLCBpcyB0YWtlbgorCWFzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IEdpdCByZXBvc2l0b3J5LCBub3QgdG8gQ0dJIHNjcmlwdC4gIElmIHVuc2V0LAorCW9ubHkgJy9ldGMvbWltZS50eXBlcycgaXMgdXNlZCAoaWYgcHJlc2VudCBvbiBmaWxlc3lzdGVtKS4gIElmIG5vIG1pbWV0eXBlcworCWZpbGUgaXMgZm91bmQsIG1pbWV0eXBlIGd1ZXNzaW5nIGJhc2VkIG9uIGV4dGVuc2lvbiBvZiBmaWxlIGlzIGRpc2FibGVkLgorCVVuc2V0IGJ5IGRlZmF1bHQuCisKKyRoaWdobGlnaHRfYmluOjoKKwlQYXRoIHRvIHRoZSBoaWdobGlnaHQgZXhlY3V0YWJsZSB0byB1c2UgKGl0IG11c3QgYmUgdGhlIG9uZSBmcm9tCisJaHR0cDovL3d3dy5hbmRyZS1zaW1vbi5kZVtdIGR1ZSB0byBhc3N1bXB0aW9ucyBhYm91dCBwYXJhbWV0ZXJzIGFuZCBvdXRwdXQpLgorCUJ5IGRlZmF1bHQgc2V0IHRvICdoaWdobGlnaHQnOyBzZXQgaXQgdG8gZnVsbCBwYXRoIHRvIGhpZ2hsaWdodAorCWV4ZWN1dGFibGUgaWYgaXQgaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyIHdlYiBzZXJ2ZXIncyBQQVRILgorCU5vdGUgdGhhdCAnaGlnaGxpZ2h0JyBmZWF0dXJlIG11c3QgYmUgc2V0IGZvciBnaXR3ZWIgdG8gYWN0dWFsbHkKKwl1c2Ugc3ludGF4IGhpZ2hsaWdodGluZy4KKysKKypOT1RFKjogaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIG5ldyBmaWxlIHR5cGUgKHN1cHBvcnRlZCBieQorImhpZ2hsaWdodCIgYnV0IG5vdCB1c2VkIGJ5IGdpdHdlYiksIHlvdSBuZWVkIHRvIG1vZGlmeSBgJWhpZ2hsaWdodF9leHRgCitvciBgJWhpZ2hsaWdodF9iYXNlbmFtZWAsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdSBkZXRlY3QgdHlwZSBvZiBmaWxlCitiYXNlZCBvbiBleHRlbnNpb24gKGZvciBleGFtcGxlICJzaCIpIG9yIG9uIGl0cyBiYXNlbmFtZSAoZm9yIGV4YW1wbGUKKyJNYWtlZmlsZSIpLiAgVGhlIGtleXMgb2YgdGhlc2UgaGFzaGVzIGFyZSBleHRlbnNpb24gYW5kIGJhc2VuYW1lLAorcmVzcGVjdGl2ZWx5LCBhbmQgdmFsdWUgZm9yIGdpdmVuIGtleSBpcyBuYW1lIG9mIHN5bnRheCB0byBiZSBwYXNzZWQgdmlhCitgLS1zeW50YXggPHN5bnRheD5gIHRvIGhpZ2hsaWdodGVyLgorKworRm9yIGV4YW1wbGUgaWYgcmVwb3NpdG9yaWVzIHlvdSBhcmUgaG9zdGluZyB1c2UgInBodG1sIiBleHRlbnNpb24gZm9yCitQSFAgZmlsZXMsIGFuZCB5b3Ugd2FudCB0byBoYXZlIGNvcnJlY3Qgc3ludGF4LWhpZ2hsaWdodGluZyBmb3IgdGhvc2UKK2ZpbGVzLCB5b3UgY2FuIGFkZCB0aGUgZm9sbG93aW5nIHRvIGdpdHdlYiBjb25maWd1cmF0aW9uOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJWhpZ2hsaWdodF9leHQ7CiskaGlnaGxpZ2h0X2V4dHsncGh0bWwnfSA9ICdwaHAnOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworTGlua3MgYW5kIHRoZWlyIHRhcmdldHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZGVzY3JpYmVkIGJlbG93IGNvbmZpZ3VyZSBzb21lIG9mIGdpdHdlYiBsaW5rczoKK3RoZWlyIHRhcmdldCBhbmQgdGhlaXIgbG9vayAodGV4dCBvciBpbWFnZSksIGFuZCB3aGVyZSB0byBmaW5kIHBhZ2UKK3ByZXJlcXVpc2l0ZXMgKHN0eWxlc2hlZXQsIGZhdmljb24sIGltYWdlcywgc2NyaXB0cykuICBVc3VhbGx5IHRoZXkgYXJlIGxlZnQKK2F0IHRoZWlyIGRlZmF1bHQgdmFsdWVzLCB3aXRoIHRoZSBwb3NzaWJsZSBleGNlcHRpb24gb2YgYEBzdHlsZXNoZWV0c2AKK3ZhcmlhYmxlLgorCitAc3R5bGVzaGVldHM6OgorCUxpc3Qgb2YgVVJJcyBvZiBzdHlsZXNoZWV0cyAocmVsYXRpdmUgdG8gdGhlIGJhc2UgVVJJIG9mIGEgcGFnZSkuIFlvdQorCW1pZ2h0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBzdHlsZXNoZWV0LCBmb3IgZXhhbXBsZSB0byB1c2UgImdpdHdlYi5jc3MiCisJYXMgYmFzZSB3aXRoIHNpdGUgc3BlY2lmaWMgbW9kaWZpY2F0aW9ucyBpbiBhIHNlcGFyYXRlIHN0eWxlc2hlZXQKKwl0byBtYWtlIGl0IGVhc2llciB0byB1cGdyYWRlIGdpdHdlYi4gIEZvciBleGFtcGxlLCB5b3UgY2FuIGFkZAorCWEgYHNpdGVgIHN0eWxlc2hlZXQgYnkgcHV0dGluZworKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHVzaCBAc3R5bGVzaGVldHMsICJnaXR3ZWItc2l0ZS5jc3MiOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworaW4gdGhlIGdpdHdlYiBjb25maWcgZmlsZS4gIFRob3NlIHZhbHVlcyB0aGF0IGFyZSByZWxhdGl2ZSBwYXRocyBhcmUKK3JlbGF0aXZlIHRvIGJhc2UgVVJJIG9mIGdpdHdlYi4KKysKK1RoaXMgbGlzdCBzaG91bGQgY29udGFpbiB0aGUgVVJJIG9mIGdpdHdlYidzIHN0YW5kYXJkIHN0eWxlc2hlZXQuICBUaGUgZGVmYXVsdAorVVJJIG9mIGdpdHdlYiBzdHlsZXNoZWV0IGNhbiBiZSBzZXQgYXQgYnVpbGQgdGltZSB1c2luZyB0aGUgYEdJVFdFQl9DU1NgCittYWtlZmlsZSB2YXJpYWJsZS4gIEl0cyBkZWZhdWx0IHZhbHVlIGlzICdzdGF0aWMvZ2l0d2ViLmNzcycKKyhvciAnc3RhdGljL2dpdHdlYi5taW4uY3NzJyBpZiB0aGUgYENTU01JTmAgdmFyaWFibGUgaXMgZGVmaW5lZCwKK2kuZS4gaWYgQ1NTIG1pbmlmaWVyIGlzIHVzZWQgZHVyaW5nIGJ1aWxkKS4KKysKKypOb3RlKjogdGhlcmUgaXMgYWxzbyBhIGxlZ2FjeSBgJHN0eWxlc2hlZXRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIHdoaWNoIHdhcwordXNlZCBieSBvbGRlciBnaXR3ZWIuICBJZiBgJHN0eWxlc2hlZXRgIHZhcmlhYmxlIGlzIGRlZmluZWQsIG9ubHkgQ1NTIHN0eWxlc2hlZXQKK2dpdmVuIGJ5IHRoaXMgdmFyaWFibGUgaXMgdXNlZCBieSBnaXR3ZWIuCisKKyRsb2dvOjoKKwlQb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHlvdSBwdXQgJ2dpdC1sb2dvLnBuZycgb24geW91ciB3ZWIKKwlzZXJ2ZXIsIG9yIHRvIGJlIG1vcmUgdGhlIGdlbmVyaWMgVVJJIG9mIGxvZ28sIDcyeDI3IHNpemUpLiAgVGhpcyBpbWFnZQorCWlzIGRpc3BsYXllZCBpbiB0aGUgdG9wIHJpZ2h0IGNvcm5lciBvZiBlYWNoIGdpdHdlYiBwYWdlIGFuZCB1c2VkIGFzCisJYSBsb2dvIGZvciB0aGUgQXRvbSBmZWVkLiAgUmVsYXRpdmUgdG8gdGhlIGJhc2UgVVJJIG9mIGdpdHdlYiAoYXMgYSBwYXRoKS4KKwlDYW4gYmUgYWRqdXN0ZWQgd2hlbiBidWlsZGluZyBnaXR3ZWIgdXNpbmcgYEdJVFdFQl9MT0dPYCB2YXJpYWJsZQorCUJ5IGRlZmF1bHQgc2V0IHRvICdzdGF0aWMvZ2l0LWxvZ28ucG5nJy4KKworJGZhdmljb246OgorCVBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgeW91IHB1dCAnZ2l0LWZhdmljb24ucG5nJyBvbiB5b3VyIHdlYgorCXNlcnZlciwgb3IgdG8gYmUgbW9yZSB0aGUgZ2VuZXJpYyBVUkkgb2YgZmF2aWNvbiwgd2hpY2ggd2lsbCBiZSBzZXJ2ZWQKKwlhcyAiaW1hZ2UvcG5nIiB0eXBlLiAgV2ViIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBmYXZpY29ucyAod2Vic2l0ZSBpY29ucykKKwltYXkgZGlzcGxheSB0aGVtIGluIHRoZSBicm93c2VyJ3MgVVJMIGJhciBhbmQgbmV4dCB0byB0aGUgc2l0ZSBuYW1lIGluCisJYm9va21hcmtzLiAgUmVsYXRpdmUgdG8gdGhlIGJhc2UgVVJJIG9mIGdpdHdlYi4gIENhbiBiZSBhZGp1c3RlZCBhdAorCWJ1aWxkIHRpbWUgdXNpbmcgYEdJVFdFQl9GQVZJQ09OYCB2YXJpYWJsZS4KKwlCeSBkZWZhdWx0IHNldCB0byAnc3RhdGljL2dpdC1mYXZpY29uLnBuZycuCisKKyRqYXZhc2NyaXB0OjoKKwlQb2ludHMgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHlvdSBwdXQgJ2dpdHdlYi5qcycgb24geW91ciB3ZWIgc2VydmVyLAorCW9yIHRvIGJlIG1vcmUgZ2VuZXJpYyB0aGUgVVJJIG9mIEphdmFTY3JpcHQgY29kZSB1c2VkIGJ5IGdpdHdlYi4KKwlSZWxhdGl2ZSB0byB0aGUgYmFzZSBVUkkgb2YgZ2l0d2ViLiAgQ2FuIGJlIHNldCBhdCBidWlsZCB0aW1lIHVzaW5nCisJdGhlIGBHSVRXRUJfSlNgIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKysKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIGVpdGhlciAnc3RhdGljL2dpdHdlYi5qcycsIG9yICdzdGF0aWMvZ2l0d2ViLm1pbi5qcycgaWYKK3RoZSBgSlNNSU5gIGJ1aWxkIHZhcmlhYmxlIHdhcyBkZWZpbmVkLCBpLmUuIGlmIEphdmFTY3JpcHQgbWluaWZpZXIgd2FzIHVzZWQKK2F0IGJ1aWxkIHRpbWUuICAqTm90ZSogdGhhdCB0aGlzIHNpbmdsZSBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIG11bHRpcGxlCitpbmRpdmlkdWFsIEphdmFTY3JpcHQgIm1vZHVsZXMiLgorCiskaG9tZV9saW5rOjoKKwlUYXJnZXQgb2YgdGhlIGhvbWUgbGluayBvbiB0aGUgdG9wIG9mIGFsbCBwYWdlcyAodGhlIGZpcnN0IHBhcnQgb2YgdmlldworCSJicmVhZGNydW1icyIpLiAgQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gdGhlIGFic29sdXRlIFVSSSBvZiBhIGN1cnJlbnQgcGFnZQorCSh0byB0aGUgdmFsdWUgb2YgYCRteV91cmlgIHZhcmlhYmxlLCBvciB0byAiLyIgaWYgYCRteV91cmlgIGlzIHVuZGVmaW5lZAorCW9yIGlzIGFuIGVtcHR5IHN0cmluZykuCisKKyRob21lX2xpbmtfc3RyOjoKKwlMYWJlbCBmb3IgdGhlICJob21lIGxpbmsiIGF0IHRoZSB0b3Agb2YgYWxsIHBhZ2VzLCBsZWFkaW5nIHRvIGAkaG9tZV9saW5rYAorCSh1c3VhbGx5IHRoZSBtYWluIGdpdHdlYiBwYWdlLCB3aGljaCBjb250YWlucyB0aGUgcHJvamVjdHMgbGlzdCkuICBJdCBpcworCXVzZWQgYXMgdGhlIGZpcnN0IGNvbXBvbmVudCBvZiBnaXR3ZWIncyAiYnJlYWRjcnVtYiB0cmFpbCI6CisJYDxob21lIGxpbms+IC8gPHByb2plY3Q+IC8gPGFjdGlvbj5gLiAgQ2FuIGJlIHNldCBhdCBidWlsZCB0aW1lIHVzaW5nCisJdGhlIGBHSVRXRUJfSE9NRV9MSU5LX1NUUmAgdmFyaWFibGUuICBCeSBkZWZhdWx0IGl0IGlzIHNldCB0byAicHJvamVjdHMiLAorCWFzIHRoaXMgbGluayBsZWFkcyB0byB0aGUgbGlzdCBvZiBwcm9qZWN0cy4gIEFub3RoZXIgcG9wdWxhciBjaG9pY2UgaXMgdG8KKwlzZXQgaXQgdG8gdGhlIG5hbWUgb2Ygc2l0ZS4gIE5vdGUgdGhhdCBpdCBpcyB0cmVhdGVkIGFzIHJhdyBIVE1MIHNvIGl0CisJc2hvdWxkIG5vdCBiZSBzZXQgZnJvbSB1bnRydXN0ZWQgc291cmNlcy4KKworQGV4dHJhX2JyZWFkY3J1bWJzOjoKKwlBZGRpdGlvbmFsIGxpbmtzIHRvIGJlIGFkZGVkIHRvIHRoZSBzdGFydCBvZiB0aGUgYnJlYWRjcnVtYiB0cmFpbCBiZWZvcmUKKwl0aGUgaG9tZSBsaW5rLCB0byBwYWdlcyB0aGF0IGFyZSBsb2dpY2FsbHkgImFib3ZlIiB0aGUgZ2l0d2ViIHByb2plY3RzCisJbGlzdCwgc3VjaCBhcyB0aGUgb3JnYW5pemF0aW9uIGFuZCBkZXBhcnRtZW50IHdoaWNoIGhvc3QgdGhlIGdpdHdlYgorCXNlcnZlci4gRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0IGlzIGEgcmVmZXJlbmNlIHRvIGFuIGFycmF5LCBpbiB3aGljaAorCWVsZW1lbnQgMCBpcyB0aGUgbGluayB0ZXh0IChlcXVpdmFsZW50IHRvIGAkaG9tZV9saW5rX3N0cmApIGFuZCBlbGVtZW50CisJMSBpcyB0aGUgdGFyZ2V0IFVSTCAoZXF1aXZhbGVudCB0byBgJGhvbWVfbGlua2ApLgorKworRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2V0dGluZyBwcm9kdWNlcyBhIGJyZWFkY3J1bWIgdHJhaWwgbGlrZQorImhvbWUgLyBkZXYgLyBwcm9qZWN0cyAvIC4uLiIgd2hlcmUgInByb2plY3RzIiBpcyB0aGUgaG9tZSBsaW5rLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIG91ciBAZXh0cmFfYnJlYWRjcnVtYnMgPSAoCisgICAgICBbICdob21lJyA9PiAnaHR0cHM6Ly93d3cuZXhhbXBsZS5vcmcvJyBdLAorICAgICAgWyAnZGV2JyAgPT4gJ2h0dHBzOi8vZGV2LmV4YW1wbGUub3JnLycgXSwKKyAgICApOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiskbG9nb191cmw6OgorJGxvZ29fbGFiZWw6OgorCVVSSSBhbmQgbGFiZWwgKHRpdGxlKSBmb3IgdGhlIEdpdCBsb2dvIGxpbmsgKG9yIHlvdXIgc2l0ZSBsb2dvLAorCWlmIHlvdSBjaG9zZSB0byB1c2UgZGlmZmVyZW50IGxvZ28gaW1hZ2UpLiBCeSBkZWZhdWx0LCB0aGVzZSBib3RoCisJcmVmZXIgdG8gR2l0IGhvbWVwYWdlLCBodHRwOi8vZ2l0LXNjbS5jb21bXTsgaW4gdGhlIHBhc3QsIHRoZXkgcG9pbnRlZAorCXRvIEdpdCBkb2N1bWVudGF0aW9uIGF0IGh0dHA6Ly93d3cua2VybmVsLm9yZ1tdLgorCisKK0NoYW5naW5nIGdpdHdlYidzIGxvb2sKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1lvdSBjYW4gYWRqdXN0IGhvdyBwYWdlcyBnZW5lcmF0ZWQgYnkgZ2l0d2ViIGxvb2sgdXNpbmcgdGhlIHZhcmlhYmxlcyBkZXNjcmliZWQKK2JlbG93LiAgWW91IGNhbiBjaGFuZ2UgdGhlIHNpdGUgbmFtZSwgYWRkIGNvbW1vbiBoZWFkZXJzIGFuZCBmb290ZXJzIGZvciBhbGwKK3BhZ2VzLCBhbmQgYWRkIGEgZGVzY3JpcHRpb24gb2YgdGhpcyBnaXR3ZWIgaW5zdGFsbGF0aW9uIG9uIGl0cyBtYWluIHBhZ2UKKyh3aGljaCBpcyB0aGUgcHJvamVjdHMgbGlzdCBwYWdlKSwgZXRjLgorCiskc2l0ZV9uYW1lOjoKKwlOYW1lIG9mIHlvdXIgc2l0ZSBvciBvcmdhbml6YXRpb24sIHRvIGFwcGVhciBpbiBwYWdlIHRpdGxlcy4gIFNldCBpdAorCXRvIHNvbWV0aGluZyBkZXNjcmlwdGl2ZSBmb3IgY2xlYXJlciBib29rbWFya3MgZXRjLiAgSWYgdGhpcyB2YXJpYWJsZQorCWlzIG5vdCBzZXQgb3IgaXMsIHRoZW4gZ2l0d2ViIHVzZXMgdGhlIHZhbHVlIG9mIHRoZSBgU0VSVkVSX05BTUVgCisJQ0dJIGVudmlyb25tZW50IHZhcmlhYmxlLCBzZXR0aW5nIHNpdGUgbmFtZSB0byAiJFNFUlZFUl9OQU1FIEdpdCIsCisJb3IgIlVudGl0bGVkIEdpdCIgaWYgdGhpcyB2YXJpYWJsZSBpcyBub3Qgc2V0IChlLmcuIGlmIHJ1bm5pbmcgZ2l0d2ViCisJYXMgc3RhbmRhbG9uZSBzY3JpcHQpLgorKworQ2FuIGJlIHNldCB1c2luZyB0aGUgYEdJVFdFQl9TSVRFTkFNRWAgYXQgYnVpbGQgdGltZS4gIFVuc2V0IGJ5IGRlZmF1bHQuCisKKyRzaXRlX2h0bWxfaGVhZF9zdHJpbmc6OgorCUhUTUwgc25pcHBldCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgPGhlYWQ+IHNlY3Rpb24gb2YgZWFjaCBwYWdlLgorCUNhbiBiZSBzZXQgdXNpbmcgYEdJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkdgIGF0IGJ1aWxkIHRpbWUuCisJTm8gZGVmYXVsdCB2YWx1ZS4KKworJHNpdGVfaGVhZGVyOjoKKwlOYW1lIG9mIGEgZmlsZSB3aXRoIEhUTUwgdG8gYmUgaW5jbHVkZWQgYXQgdGhlIHRvcCBvZiBlYWNoIHBhZ2UuCisJUmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAnZ2l0d2ViLmNnaScgc2NyaXB0LgorCUNhbiBiZSBzZXQgdXNpbmcgYEdJVFdFQl9TSVRFX0hFQURFUmAgYXQgYnVpbGQgdGltZS4gIE5vIGRlZmF1bHQKKwl2YWx1ZS4KKworJHNpdGVfZm9vdGVyOjoKKwlOYW1lIG9mIGEgZmlsZSB3aXRoIEhUTUwgdG8gYmUgaW5jbHVkZWQgYXQgdGhlIGJvdHRvbSBvZiBlYWNoIHBhZ2UuCisJUmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAnZ2l0d2ViLmNnaScgc2NyaXB0LgorCUNhbiBiZSBzZXQgdXNpbmcgYEdJVFdFQl9TSVRFX0ZPT1RFUmAgYXQgYnVpbGQgdGltZS4gIE5vIGRlZmF1bHQKKwl2YWx1ZS4KKworJGhvbWVfdGV4dDo6CisJTmFtZSBvZiBhIEhUTUwgZmlsZSB3aGljaCwgaWYgaXQgZXhpc3RzLCBpcyBpbmNsdWRlZCBvbiB0aGUKKwlnaXR3ZWIgcHJvamVjdHMgb3ZlcnZpZXcgcGFnZSAoInByb2plY3RzX2xpc3QiIHZpZXcpLiAgUmVsYXRpdmUgdG8KKwl0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGdpdHdlYi5jZ2kgc2NyaXB0LiAgRGVmYXVsdCB2YWx1ZQorCWNhbiBiZSBhZGp1c3RlZCBkdXJpbmcgYnVpbGQgdGltZSB1c2luZyBgR0lUV0VCX0hPTUVURVhUYCB2YXJpYWJsZS4KKwlCeSBkZWZhdWx0IHNldCB0byAnaW5kZXh0ZXh0Lmh0bWwnLgorCiskcHJvamVjdHNfbGlzdF9kZXNjcmlwdGlvbl93aWR0aDo6CisJVGhlIHdpZHRoIChpbiBjaGFyYWN0ZXJzKSBvZiB0aGUgIkRlc2NyaXB0aW9uIiBjb2x1bW4gb2YgdGhlIHByb2plY3RzIGxpc3QuCisJTG9uZ2VyIGRlc2NyaXB0aW9ucyB3aWxsIGJlIHRydW5jYXRlZCAodHJ5aW5nIHRvIGN1dCBhdCB3b3JkIGJvdW5kYXJ5KTsKKwl0aGUgZnVsbCBkZXNjcmlwdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlICd0aXRsZScgYXR0cmlidXRlICh1c3VhbGx5IHNob3duIG9uCisJbW91c2VvdmVyKS4gIFRoZSBkZWZhdWx0IGlzIDI1LCB3aGljaCBtaWdodCBiZSB0b28gc21hbGwgaWYgeW91CisJdXNlIGxvbmcgcHJvamVjdCBkZXNjcmlwdGlvbnMuCisKKyRkZWZhdWx0X3Byb2plY3RzX29yZGVyOjoKKwlEZWZhdWx0IHZhbHVlIG9mIG9yZGVyaW5nIG9mIHByb2plY3RzIG9uIHByb2plY3RzIGxpc3QgcGFnZSwgd2hpY2gKKwltZWFucyB0aGUgb3JkZXJpbmcgdXNlZCBpZiB5b3UgZG9uJ3QgZXhwbGljaXRseSBzb3J0IHByb2plY3RzIGxpc3QKKwkoaWYgdGhlcmUgaXMgbm8gIm8iIENHSSBxdWVyeSBwYXJhbWV0ZXIgaW4gdGhlIFVSTCkuICBWYWxpZCB2YWx1ZXMKKwlhcmUgIm5vbmUiICh1bnNvcnRlZCksICJwcm9qZWN0IiAocHJvamVjdHMgYXJlIGJ5IHByb2plY3QgbmFtZSwKKwlpLmUuIHBhdGggdG8gcmVwb3NpdG9yeSByZWxhdGl2ZSB0byBgJHByb2plY3Ryb290YCksICJkZXNjciIKKwkocHJvamVjdCBkZXNjcmlwdGlvbiksICJvd25lciIsIGFuZCAiYWdlIiAoYnkgZGF0ZSBvZiBtb3N0IGN1cnJlbnQKKwljb21taXQpLgorKworRGVmYXVsdCB2YWx1ZSBpcyAicHJvamVjdCIuICBVbmtub3duIHZhbHVlIG1lYW5zIHVuc29ydGVkLgorCisKK0NoYW5naW5nIGdpdHdlYidzIGJlaGF2aW9yCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlc2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgY29udHJvbCBfaW50ZXJuYWxfIGdpdHdlYiBiZWhhdmlvci4KKworJGRlZmF1bHRfYmxvYl9wbGFpbl9taW1ldHlwZTo6CisJRGVmYXVsdCBtaW1ldHlwZSBmb3IgdGhlIGJsb2JfcGxhaW4gKHJhdykgdmlldywgaWYgbWltZXR5cGUgY2hlY2tpbmcKKwlkb2Vzbid0IHJlc3VsdCBpbiBzb21lIG90aGVyIHR5cGU7IGJ5IGRlZmF1bHQgInRleHQvcGxhaW4iLgorCUdpdHdlYiBndWVzc2VzIG1pbWV0eXBlIG9mIGEgZmlsZSB0byBkaXNwbGF5IGJhc2VkIG9uIGV4dGVuc2lvbgorCW9mIGl0cyBmaWxlbmFtZSwgdXNpbmcgYCRtaW1ldHlwZXNfZmlsZWAgKGlmIHNldCBhbmQgZmlsZSBleGlzdHMpCisJYW5kICcvZXRjL21pbWUudHlwZXMnIGZpbGVzIChzZWUgKm1pbWUudHlwZXMqKDUpIG1hbnBhZ2U7IG9ubHkKKwlmaWxlbmFtZSBleHRlbnNpb24gcnVsZXMgYXJlIHN1cHBvcnRlZCBieSBnaXR3ZWIpLgorCiskZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQ6OgorCURlZmF1bHQgY2hhcnNldCBmb3IgdGV4dCBmaWxlcy4gSWYgdGhpcyBpcyBub3Qgc2V0LCB0aGUgd2ViIHNlcnZlcgorCWNvbmZpZ3VyYXRpb24gd2lsbCBiZSB1c2VkLiAgVW5zZXQgYnkgZGVmYXVsdC4KKworJGZhbGxiYWNrX2VuY29kaW5nOjoKKwlHaXR3ZWIgYXNzdW1lcyB0aGlzIGNoYXJzZXQgd2hlbiBhIGxpbmUgY29udGFpbnMgbm9uLVVURi04IGNoYXJhY3RlcnMuCisJVGhlIGZhbGxiYWNrIGRlY29kaW5nIGlzIHVzZWQgd2l0aG91dCBlcnJvciBjaGVja2luZywgc28gaXQgY2FuIGJlIGV2ZW4KKwkidXRmLTgiLiBUaGUgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGVuY29kaW5nOyBzZWUgdGhlICpFbmNvZGluZzo6U3VwcG9ydGVkKigzcG0pCisJbWFuIHBhZ2UgZm9yIGEgbGlzdC4gVGhlIGRlZmF1bHQgaXMgImxhdGluMSIsIGFrYS4gImlzby04ODU5LTEiLgorCitAZGlmZl9vcHRzOjoKKwlSZW5hbWUgZGV0ZWN0aW9uIG9wdGlvbnMgZm9yIGdpdC1kaWZmIGFuZCBnaXQtZGlmZi10cmVlLiBUaGUgZGVmYXVsdCBpcworCShcJy1NJyk7IHNldCBpdCB0byAoXCctQycpIG9yIChcJy1DJywgXCctQycpIHRvIGFsc28gZGV0ZWN0IGNvcGllcywKKwlvciBzZXQgaXQgdG8gKCkgaS5lLiBlbXB0eSBsaXN0IGlmIHlvdSBkb24ndCB3YW50IHRvIGhhdmUgcmVuYW1lcworCWRldGVjdGlvbi4KKysKKypOb3RlKiB0aGF0IHJlbmFtZSBhbmQgZXNwZWNpYWxseSBjb3B5IGRldGVjdGlvbiBjYW4gYmUgcXVpdGUKK0NQVS1pbnRlbnNpdmUuICBOb3RlIGFsc28gdGhhdCBub24gR2l0IHRvb2xzIGNhbiBoYXZlIHByb2JsZW1zIHdpdGgKK3BhdGNoZXMgZ2VuZXJhdGVkIHdpdGggb3B0aW9ucyBtZW50aW9uZWQgYWJvdmUsIGVzcGVjaWFsbHkgd2hlbiB0aGV5CitpbnZvbHZlIGZpbGUgY29waWVzIChcJy1DJykgb3IgY3Jpc3MtY3Jvc3MgcmVuYW1lcyAoXCctQicpLgorCisKK1NvbWUgb3B0aW9uYWwgZmVhdHVyZXMgYW5kIHBvbGljaWVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorTW9zdCBvZiBmZWF0dXJlcyBhcmUgY29uZmlndXJlZCB2aWEgYCVmZWF0dXJlYCBoYXNoOyBob3dldmVyIHNvbWUgb2YgZXh0cmEKK2dpdHdlYiBmZWF0dXJlcyBjYW4gYmUgdHVybmVkIG9uIGFuZCBjb25maWd1cmVkIHVzaW5nIHZhcmlhYmxlcyBkZXNjcmliZWQKK2JlbG93LiAgVGhpcyBsaXN0IGJlc2lkZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB0aGF0IGNvbnRyb2wgaG93IGdpdHdlYgorbG9va3MgZG9lcyBjb250YWluIHZhcmlhYmxlcyBjb25maWd1cmluZyBhZG1pbmlzdHJhdGl2ZSBzaWRlIG9mIGdpdHdlYgorKGUuZy4gY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgcHJldmVudGlvbjsgYWRtaXR0ZWRseSB0aGlzIGFzIHNpZGUgZWZmZWN0CithZmZlY3RzIGhvdyAic3VtbWFyeSIgcGFnZXMgbG9vayBsaWtlLCBvciBsb2FkIGxpbWl0aW5nKS4KKworQGdpdF9iYXNlX3VybF9saXN0OjoKKwlMaXN0IG9mIEdpdCBiYXNlIFVSTHMuICBUaGVzZSBVUkxzIGFyZSB1c2VkIHRvIGdlbmVyYXRlIFVSTHMKKwlkZXNjcmliaW5nIGZyb20gd2hlcmUgdG8gZmV0Y2ggYSBwcm9qZWN0LCB3aGljaCBhcmUgc2hvd24gb24KKwlwcm9qZWN0IHN1bW1hcnkgcGFnZS4gIFRoZSBmdWxsIGZldGNoIFVSTCBpcyAiYCRnaXRfYmFzZV91cmwvJHByb2plY3RgIiwKKwlmb3IgZWFjaCBlbGVtZW50IG9mIHRoaXMgbGlzdC4gWW91IGNhbiBzZXQgdXAgbXVsdGlwbGUgYmFzZSBVUkxzCisJKGZvciBleGFtcGxlIG9uZSBmb3IgYGdpdDovL2AgcHJvdG9jb2wsIGFuZCBvbmUgZm9yIGBodHRwOi8vYAorCXByb3RvY29sKS4KKysKK05vdGUgdGhhdCBwZXIgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIGNhbiBiZSBzZXQgaW4gJyRHSVRfRElSL2Nsb25ldXJsJworZmlsZSwgb3IgYXMgdmFsdWVzIG9mIG11bHRpLXZhbHVlIGBnaXR3ZWIudXJsYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGluCitwcm9qZWN0IGNvbmZpZy4gIFBlci1yZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHZhbHVlCitjb21wb3NlZCBmcm9tIGBAZ2l0X2Jhc2VfdXJsX2xpc3RgIGVsZW1lbnRzIGFuZCBwcm9qZWN0IG5hbWUuCisrCitZb3UgY2FuIHNldHVwIG9uZSBzaW5nbGUgdmFsdWUgKHNpbmdsZSBlbnRyeS9pdGVtIGluIHRoaXMgbGlzdCkgYXQgYnVpbGQKK3RpbWUgYnkgc2V0dGluZyB0aGUgYEdJVFdFQl9CQVNFX1VSTGAgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorQnkgZGVmYXVsdCBpdCBpcyBzZXQgdG8gKCksIGkuZS4gYW4gZW1wdHkgbGlzdC4gIFRoaXMgbWVhbnMgdGhhdCBnaXR3ZWIKK3dvdWxkIG5vdCB0cnkgdG8gY3JlYXRlIHByb2plY3QgVVJMICh0byBmZXRjaCkgZnJvbSBwcm9qZWN0IG5hbWUuCisKKyRwcm9qZWN0c19saXN0X2dyb3VwX2NhdGVnb3JpZXM6OgorCVdoZXRoZXIgdG8gZW5hYmxlIHRoZSBncm91cGluZyBvZiBwcm9qZWN0cyBieSBjYXRlZ29yeSBvbiB0aGUgcHJvamVjdAorCWxpc3QgcGFnZS4gVGhlIGNhdGVnb3J5IG9mIGEgcHJvamVjdCBpcyBkZXRlcm1pbmVkIGJ5IHRoZQorCWAkR0lUX0RJUi9jYXRlZ29yeWAgZmlsZSBvciB0aGUgYGdpdHdlYi5jYXRlZ29yeWAgdmFyaWFibGUgaW4gZWFjaAorCXJlcG9zaXRvcnkncyBjb25maWd1cmF0aW9uLiAgRGlzYWJsZWQgYnkgZGVmYXVsdCAoc2V0IHRvIDApLgorCiskcHJvamVjdF9saXN0X2RlZmF1bHRfY2F0ZWdvcnk6OgorCURlZmF1bHQgY2F0ZWdvcnkgZm9yIHByb2plY3RzIGZvciB3aGljaCBub25lIGlzIHNwZWNpZmllZC4gIElmIHRoaXMgaXMKKwlzZXQgdG8gdGhlIGVtcHR5IHN0cmluZywgc3VjaCBwcm9qZWN0cyB3aWxsIHJlbWFpbiB1bmNhdGVnb3JpemVkIGFuZAorCWxpc3RlZCBhdCB0aGUgdG9wLCBhYm92ZSBjYXRlZ29yaXplZCBwcm9qZWN0cy4gIFVzZWQgb25seSBpZiBwcm9qZWN0CisJY2F0ZWdvcmllcyBhcmUgZW5hYmxlZCwgd2hpY2ggbWVhbnMgaWYgYCRwcm9qZWN0c19saXN0X2dyb3VwX2NhdGVnb3JpZXNgCisJaXMgdHJ1ZS4gIEJ5IGRlZmF1bHQgc2V0IHRvICIiIChlbXB0eSBzdHJpbmcpLgorCiskcHJldmVudF94c3M6OgorCUlmIHRydWUsIHNvbWUgZ2l0d2ViIGZlYXR1cmVzIGFyZSBkaXNhYmxlZCB0byBwcmV2ZW50IGNvbnRlbnQgaW4KKwlyZXBvc2l0b3JpZXMgZnJvbSBsYXVuY2hpbmcgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgKFhTUykgYXR0YWNrcy4gIFNldCB0aGlzCisJdG8gdHJ1ZSBpZiB5b3UgZG9uJ3QgdHJ1c3QgdGhlIGNvbnRlbnQgb2YgeW91ciByZXBvc2l0b3JpZXMuCisJRmFsc2UgYnkgZGVmYXVsdCAoc2V0IHRvIDApLgorCiskbWF4bG9hZDo6CisJVXNlZCB0byBzZXQgdGhlIG1heGltdW0gbG9hZCB0aGF0IHdlIHdpbGwgc3RpbGwgcmVzcG9uZCB0byBnaXR3ZWIgcXVlcmllcy4KKwlJZiB0aGUgc2VydmVyIGxvYWQgZXhjZWVkcyB0aGlzIHZhbHVlIHRoZW4gZ2l0d2ViIHdpbGwgcmV0dXJuCisJIjUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlIiBlcnJvci4gIFRoZSBzZXJ2ZXIgbG9hZCBpcyB0YWtlbiB0byBiZSAwCisJaWYgZ2l0d2ViIGNhbm5vdCBkZXRlcm1pbmUgaXRzIHZhbHVlLiAgQ3VycmVudGx5IGl0IHdvcmtzIG9ubHkgb24gTGludXgsCisJd2hlcmUgaXQgdXNlcyAnL3Byb2MvbG9hZGF2Zyc7IHRoZSBsb2FkIHRoZXJlIGlzIHRoZSBudW1iZXIgb2YgYWN0aXZlCisJdGFza3Mgb24gdGhlIHN5c3RlbSAtLSBwcm9jZXNzZXMgdGhhdCBhcmUgYWN0dWFsbHkgcnVubmluZyAtLSBhdmVyYWdlZAorCW92ZXIgdGhlIGxhc3QgbWludXRlLgorKworU2V0IGAkbWF4bG9hZGAgdG8gdW5kZWZpbmVkIHZhbHVlIChgdW5kZWZgKSB0byB0dXJuIHRoaXMgZmVhdHVyZSBvZmYuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzMDAuCisKKyRvbWl0X2FnZV9jb2x1bW46OgorCUlmIHRydWUsIG9taXQgdGhlIGNvbHVtbiB3aXRoIGRhdGUgb2YgdGhlIG1vc3QgY3VycmVudCBjb21taXQgb24gdGhlCisJcHJvamVjdHMgbGlzdCBwYWdlLiBJdCBjYW4gc2F2ZSBhIGJpdCBvZiBJL08gYW5kIGEgZm9yayBwZXIgcmVwb3NpdG9yeS4KKworJG9taXRfb3duZXI6OgorCUlmIHRydWUgcHJldmVudHMgZGlzcGxheWluZyBpbmZvcm1hdGlvbiBhYm91dCByZXBvc2l0b3J5IG93bmVyLgorCiskcGVyX3JlcXVlc3RfY29uZmlnOjoKKwlJZiB0aGlzIGlzIHNldCB0byBjb2RlIHJlZmVyZW5jZSwgaXQgd2lsbCBiZSBydW4gb25jZSBmb3IgZWFjaCByZXF1ZXN0LgorCVlvdSBjYW4Jc2V0IHBhcnRzIG9mIGNvbmZpZ3VyYXRpb24gdGhhdCBjaGFuZ2UgcGVyIHNlc3Npb24gdGhpcyB3YXkuCisJRm9yIGV4YW1wbGUsIG9uZSBtaWdodCB1c2UgdGhlIGZvbGxvd2luZyBjb2RlIGluIGEgZ2l0d2ViIGNvbmZpZ3VyYXRpb24KKwlmaWxlCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3VyICRwZXJfcmVxdWVzdF9jb25maWcgPSBzdWIgeworCSRFTlZ7R0xfVVNFUn0gPSAkY2dpLT5yZW1vdGVfdXNlciB8fCAiZ2l0d2ViIjsKK307CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworSWYgYCRwZXJfcmVxdWVzdF9jb25maWdgIGlzIG5vdCBhIGNvZGUgcmVmZXJlbmNlLCBpdCBpcyBpbnRlcnByZXRlZCBhcyBib29sZWFuCit2YWx1ZS4gIElmIGl0IGlzIHRydWUgZ2l0d2ViIHdpbGwgcHJvY2VzcyBjb25maWcgZmlsZXMgb25jZSBwZXIgcmVxdWVzdCwKK2FuZCBpZiBpdCBpcyBmYWxzZSBnaXR3ZWIgd2lsbCBwcm9jZXNzIGNvbmZpZyBmaWxlcyBvbmx5IG9uY2UsIGVhY2ggdGltZSBpdAoraXMgZXhlY3V0ZWQuICBUcnVlIGJ5IGRlZmF1bHQgKHNldCB0byAxKS4KKysKKypOT1RFKjogYCRteV91cmxgLCBgJG15X3VyaWAsIGFuZCBgJGJhc2VfdXJsYCBhcmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGVpciBkZWZhdWx0Cit2YWx1ZXMgYmVmb3JlIGV2ZXJ5IHJlcXVlc3QsIHNvIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGVtLCBiZSBzdXJlIHRvIHNldAordGhpcyB2YXJpYWJsZSB0byB0cnVlIG9yIGEgY29kZSByZWZlcmVuY2UgZWZmZWN0aW5nIHRoZSBkZXNpcmVkIGNoYW5nZXMuCisrCitUaGlzIHZhcmlhYmxlIG1hdHRlcnMgb25seSB3aGVuIHVzaW5nIHBlcnNpc3RlbnQgd2ViIGVudmlyb25tZW50cyB0aGF0CitzZXJ2ZSBtdWx0aXBsZSByZXF1ZXN0cyB1c2luZyBzaW5nbGUgZ2l0d2ViIGluc3RhbmNlLCBsaWtlIG1vZF9wZXJsLAorRmFzdENHSSBvciBQbGFja3VwLgorCisKK090aGVyIHZhcmlhYmxlcworfn5+fn5+fn5+fn5+fn5+CitVc3VhbGx5IHlvdSBzaG91bGQgbm90IG5lZWQgdG8gY2hhbmdlIChhZGp1c3QpIGFueSBvZiBjb25maWd1cmF0aW9uCit2YXJpYWJsZXMgZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IHNldCBieSBnaXR3ZWIgdG8KK2NvcnJlY3QgdmFsdWUuCisKKworJHZlcnNpb246OgorCUdpdHdlYiB2ZXJzaW9uLCBzZXQgYXV0b21hdGljYWxseSB3aGVuIGNyZWF0aW5nIGdpdHdlYi5jZ2kgZnJvbQorCWdpdHdlYi5wZXJsLiBZb3UgbWlnaHQgd2FudCB0byBtb2RpZnkgaXQgaWYgeW91IGFyZSBydW5uaW5nIG1vZGlmaWVkCisJZ2l0d2ViLCBmb3IgZXhhbXBsZQorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJHZlcnNpb24gLj0gIiB3aXRoIGNhY2hpbmciOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitpZiB5b3UgcnVuIG1vZGlmaWVkIHZlcnNpb24gb2YgZ2l0d2ViIHdpdGggY2FjaGluZyBzdXBwb3J0LiAgVGhpcyB2YXJpYWJsZQoraXMgcHVyZWx5IGluZm9ybWF0aW9uYWwsIHVzZWQgZS5nLiBpbiB0aGUgImdlbmVyYXRvciIgbWV0YSBoZWFkZXIgaW4gSFRNTAoraGVhZGVyLgorCiskbXlfdXJsOjoKKyRteV91cmk6OgorCUZ1bGwgVVJMIGFuZCBhYnNvbHV0ZSBVUkwgb2YgdGhlIGdpdHdlYiBzY3JpcHQ7CisJaW4gZWFybGllciB2ZXJzaW9ucyBvZiBnaXR3ZWIgeW91IG1pZ2h0IGhhdmUgbmVlZCB0byBzZXQgdGhvc2UKKwl2YXJpYWJsZXMsIGJ1dCBub3cgdGhlcmUgc2hvdWxkIGJlIG5vIG5lZWQgdG8gZG8gaXQuICBTZWUKKwlgJHBlcl9yZXF1ZXN0X2NvbmZpZ2AgaWYgeW91IG5lZWQgdG8gc2V0IHRoZW0gc3RpbGwuCisKKyRiYXNlX3VybDo6CisJQmFzZSBVUkwgZm9yIHJlbGF0aXZlIFVSTHMgaW4gcGFnZXMgZ2VuZXJhdGVkIGJ5IGdpdHdlYiwKKwkoZS5nLiBgJGxvZ29gLCBgJGZhdmljb25gLCBgQHN0eWxlc2hlZXRzYCBpZiB0aGV5IGFyZSByZWxhdGl2ZSBVUkxzKSwKKwluZWVkZWQgYW5kIHVzZWQgJzxiYXNlIGhyZWY9IiRiYXNlX3VybCI+JyBvbmx5IGZvciBVUkxzIHdpdGggbm9uZW1wdHkKKwlQQVRIX0lORk8uICBVc3VhbGx5IGdpdHdlYiBzZXRzIGl0cyB2YWx1ZSBjb3JyZWN0bHksCisJYW5kIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2V0IHRoaXMgdmFyaWFibGUsIGUuZy4gdG8gJG15X3VyaSBvciAiLyIuCisJU2VlIGAkcGVyX3JlcXVlc3RfY29uZmlnYCBpZiB5b3UgbmVlZCB0byBvdmVycmlkZSBpdCBhbnl3YXkuCisKKworQ09ORklHVVJJTkcgR0lUV0VCIEZFQVRVUkVTCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01hbnkgZ2l0d2ViIGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIChvciBkaXNhYmxlZCkgYW5kIGNvbmZpZ3VyZWQgdXNpbmcgdGhlCitgJWZlYXR1cmVgIGhhc2guICBOYW1lcyBvZiBnaXR3ZWIgZmVhdHVyZXMgYXJlIGtleXMgb2YgdGhpcyBoYXNoLgorCitFYWNoIGAlZmVhdHVyZWAgaGFzaCBlbGVtZW50IGlzIGEgaGFzaCByZWZlcmVuY2UgYW5kIGhhcyB0aGUgZm9sbG93aW5nCitzdHJ1Y3R1cmU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisiPGZlYXR1cmVfbmFtZT4iID0+IHsKKwkic3ViIiA9PiA8ZmVhdHVyZS1zdWIgKHN1YnJvdXRpbmUpPiwKKwkib3ZlcnJpZGUiID0+IDxhbGxvdy1vdmVycmlkZSAoYm9vbGVhbik+LAorCSJkZWZhdWx0IiA9PiBbIDxvcHRpb25zPi4uLiBdCit9LAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU29tZSBmZWF0dXJlcyBjYW5ub3QgYmUgb3ZlcnJpZGRlbiBwZXIgcHJvamVjdC4gIEZvciB0aG9zZQorZmVhdHVyZXMgdGhlIHN0cnVjdHVyZSBvZiBhcHByb3ByaWF0ZSBgJWZlYXR1cmVgIGhhc2ggZWxlbWVudCBoYXMgYSBzaW1wbGVyCitmb3JtOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIjxmZWF0dXJlX25hbWU+IiA9PiB7CisJIm92ZXJyaWRlIiA9PiAwLAorCSJkZWZhdWx0IiA9PiBbIDxvcHRpb25zPi4uLiBdCit9LAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXMgb25lIGNhbiBzZWUgaXQgbGFja3MgdGhlIFwnc3ViJyBlbGVtZW50LgorCitUaGUgbWVhbmluZyBvZiBlYWNoIHBhcnQgb2YgZmVhdHVyZSBjb25maWd1cmF0aW9uIGlzIGRlc2NyaWJlZAorYmVsb3c6CisKK2RlZmF1bHQ6OgorCUxpc3QgKGFycmF5IHJlZmVyZW5jZSkgb2YgZmVhdHVyZSBwYXJhbWV0ZXJzIChpZiB0aGVyZSBhcmUgYW55KSwKKwl1c2VkIGFsc28gdG8gdG9nZ2xlIChlbmFibGUgb3IgZGlzYWJsZSkgZ2l2ZW4gZmVhdHVyZS4KKysKK05vdGUgdGhhdCBpdCBpcyBjdXJyZW50bHkgKmFsd2F5cyogYW4gYXJyYXkgcmVmZXJlbmNlLCBldmVuIGlmCitmZWF0dXJlIGRvZXNuJ3QgYWNjZXB0IGFueSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMsIGFuZCBcJ2RlZmF1bHQnCitpcyB1c2VkIG9ubHkgdG8gdHVybiBpdCBvbiBvciBvZmYuICBJbiBzdWNoIGNhc2UgeW91IHR1cm4gZmVhdHVyZSBvbgorYnkgc2V0dGluZyB0aGlzIGVsZW1lbnQgdG8gYFsxXWAsIGFuZCB0b3JuIGl0IG9mZiBieSBzZXR0aW5nIGl0IHRvCitgWzBdYC4gIFNlZSBhbHNvIHRoZSBwYXNzYWdlIGFib3V0IHRoZSAiYmxhbWUiIGZlYXR1cmUgaW4gdGhlICJFeGFtcGxlcyIKK3NlY3Rpb24uCisrCitUbyBkaXNhYmxlIGZlYXR1cmVzIHRoYXQgYWNjZXB0IHBhcmFtZXRlcnMgKGFyZSBjb25maWd1cmFibGUpLCB5b3UKK25lZWQgdG8gc2V0IHRoaXMgZWxlbWVudCB0byBlbXB0eSBsaXN0IGkuZS4gYFtdYC4KKworb3ZlcnJpZGU6OgorCUlmIHRoaXMgZmllbGQgaGFzIGEgdHJ1ZSB2YWx1ZSB0aGVuIHRoZSBnaXZlbiBmZWF0dXJlIGlzCisJb3ZlcnJpZGFibGUsIHdoaWNoIG1lYW5zIHRoYXQgaXQgY2FuIGJlIGNvbmZpZ3VyZWQKKwkob3IgZW5hYmxlZC9kaXNhYmxlZCkgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcy4KKysKK1VzdWFsbHkgZ2l2ZW4gIjxmZWF0dXJlPiIgaXMgY29uZmlndXJhYmxlIHZpYSB0aGUgYGdpdHdlYi48ZmVhdHVyZT5gCitjb25maWcgdmFyaWFibGUgaW4gdGhlIHBlci1yZXBvc2l0b3J5IEdpdCBjb25maWd1cmF0aW9uIGZpbGUuCisrCisqTm90ZSogdGhhdCBubyBmZWF0dXJlIGlzIG92ZXJyaWRhYmxlIGJ5IGRlZmF1bHQuCisKK3N1Yjo6CisJSW50ZXJuYWwgZGV0YWlsIG9mIGltcGxlbWVudGF0aW9uLiAgV2hhdCBpcyBpbXBvcnRhbnQgaXMgdGhhdAorCWlmIHRoaXMgZmllbGQgaXMgbm90IHByZXNlbnQgdGhlbiBwZXItcmVwb3NpdG9yeSBvdmVycmlkZSBmb3IKKwlnaXZlbiBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQuCisrCitZb3Ugd291bGRuJ3QgbmVlZCB0byBldmVyIGNoYW5nZSBpdCBpbiBnaXR3ZWIgY29uZmlnIGZpbGUuCisKKworRmVhdHVyZXMgaW4gYCVmZWF0dXJlYAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorVGhlIGdpdHdlYiBmZWF0dXJlcyB0aGF0IGFyZSBjb25maWd1cmFibGUgdmlhIGAlZmVhdHVyZWAgaGFzaCBhcmUgbGlzdGVkCitiZWxvdy4gIFRoaXMgc2hvdWxkIGJlIGEgY29tcGxldGUgbGlzdCwgYnV0IHVsdGltYXRlbHkgdGhlIGF1dGhvcml0YXRpdmUKK2FuZCBjb21wbGV0ZSBsaXN0IGlzIGluIGdpdHdlYi5jZ2kgc291cmNlIGNvZGUsIHdpdGggZmVhdHVyZXMgZGVzY3JpYmVkCitpbiB0aGUgY29tbWVudHMuCisKK2JsYW1lOjoKKwlFbmFibGUgdGhlICJibGFtZSIgYW5kICJibGFtZV9pbmNyZW1lbnRhbCIgYmxvYiB2aWV3cywgc2hvd2luZyBmb3IKKwllYWNoIGxpbmUgdGhlIGxhc3QgY29tbWl0IHRoYXQgbW9kaWZpZWQgaXQ7IHNlZSBsaW5rZ2l0OmdpdC1ibGFtZVsxXS4KKwlUaGlzIGNhbiBiZSB2ZXJ5IENQVS1pbnRlbnNpdmUgYW5kIGlzIHRoZXJlZm9yZSBkaXNhYmxlZCBieSBkZWZhdWx0LgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5ibGFtZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoYm9vbGVhbikuCisKK3NuYXBzaG90OjoKKwlFbmFibGUgYW5kIGNvbmZpZ3VyZSB0aGUgInNuYXBzaG90IiBhY3Rpb24sIHdoaWNoIGFsbG93cyB1c2VyIHRvCisJZG93bmxvYWQgYSBjb21wcmVzc2VkIGFyY2hpdmUgb2YgYW55IHRyZWUgb3IgY29tbWl0LCBhcyBwcm9kdWNlZAorCWJ5IGxpbmtnaXQ6Z2l0LWFyY2hpdmVbMV0gYW5kIHBvc3NpYmx5IGFkZGl0aW9uYWxseSBjb21wcmVzc2VkLgorCVRoaXMgY2FuIHBvdGVudGlhbGx5IGdlbmVyYXRlIGhpZ2ggdHJhZmZpYyBpZiB5b3UgaGF2ZSBsYXJnZSBwcm9qZWN0LgorKworVGhlIHZhbHVlIG9mIFwnZGVmYXVsdCcgaXMgYSBsaXN0IG9mIG5hbWVzIG9mIHNuYXBzaG90IGZvcm1hdHMsCitkZWZpbmVkIGluIGAla25vd25fc25hcHNob3RfZm9ybWF0c2AgaGFzaCwgdGhhdCB5b3Ugd2lzaCB0byBvZmZlci4KK1N1cHBvcnRlZCBmb3JtYXRzIGluY2x1ZGUgInRneiIsICJ0YnoyIiwgInR4eiIgKGd6aXAvYnppcDIveHoKK2NvbXByZXNzZWQgdGFyIGFyY2hpdmUpIGFuZCAiemlwIjsgcGxlYXNlIGNvbnN1bHQgZ2l0d2ViIHNvdXJjZXMgZm9yCithIGRlZmluaXRpdmUgbGlzdC4gIEJ5IGRlZmF1bHQgb25seSAidGd6IiBpcyBvZmZlcmVkLgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5ibGFtZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgd2hpY2ggY29udGFpbnMKK2EgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZm9ybWF0cyBvciAibm9uZSIgdG8gZGlzYWJsZSBzbmFwc2hvdHMuCitVbmtub3duIHZhbHVlcyBhcmUgaWdub3JlZC4KKworZ3JlcDo6CisJRW5hYmxlIGdyZXAgc2VhcmNoLCB3aGljaCBsaXN0cyB0aGUgZmlsZXMgaW4gY3VycmVudGx5IHNlbGVjdGVkCisJdHJlZSAoZGlyZWN0b3J5KSBjb250YWluaW5nIHRoZSBnaXZlbiBzdHJpbmc7IHNlZSBsaW5rZ2l0OmdpdC1ncmVwWzFdLgorCVRoaXMgY2FuIGJlIHBvdGVudGlhbGx5IENQVS1pbnRlbnNpdmUsIG9mIGNvdXJzZS4gIEVuYWJsZWQgYnkgZGVmYXVsdC4KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIHZpYQorcmVwb3NpdG9yeSdzIGBnaXR3ZWIuZ3JlcGAgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoYm9vbGVhbikuCisKK3BpY2theGU6OgorCUVuYWJsZSB0aGUgc28gY2FsbGVkIHBpY2theGUgc2VhcmNoLCB3aGljaCB3aWxsIGxpc3QgdGhlIGNvbW1pdHMKKwl0aGF0IGludHJvZHVjZWQgb3IgcmVtb3ZlZCBhIGdpdmVuIHN0cmluZyBpbiBhIGZpbGUuICBUaGlzIGNhbiBiZQorCXByYWN0aWNhbCBhbmQgcXVpdGUgZmFzdGVyIGFsdGVybmF0aXZlIHRvICJibGFtZSIgYWN0aW9uLCBidXQgaXQgaXMKKwlzdGlsbCBwb3RlbnRpYWxseSBDUFUtaW50ZW5zaXZlLiAgRW5hYmxlZCBieSBkZWZhdWx0LgorKworVGhlIHBpY2theGUgc2VhcmNoIGlzIGRlc2NyaWJlZCBpbiBsaW5rZ2l0OmdpdC1sb2dbMV0gKHRoZQorZGVzY3JpcHRpb24gb2YgYC1TPHN0cmluZz5gIG9wdGlvbiwgd2hpY2ggcmVmZXJzIHRvIHBpY2theGUgZW50cnkgaW4KK2xpbmtnaXQ6Z2l0ZGlmZmNvcmVbN10gZm9yIG1vcmUgZGV0YWlscykuCisrCitUaGlzIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyBieSBzZXR0aW5nCityZXBvc2l0b3J5J3MgYGdpdHdlYi5waWNrYXhlYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChib29sZWFuKS4KKworc2hvdy1zaXplczo6CisJRW5hYmxlIHNob3dpbmcgc2l6ZSBvZiBibG9icyAob3JkaW5hcnkgZmlsZXMpIGluIGEgInRyZWUiIHZpZXcsIGluIGEKKwlzZXBhcmF0ZSBjb2x1bW4sIHNpbWlsYXIgdG8gd2hhdCBgbHMgLWxgIGRvZXM7IHNlZSBkZXNjcmlwdGlvbiBvZgorCWAtbGAgb3B0aW9uIGluIGxpbmtnaXQ6Z2l0LWxzLXRyZWVbMV0gbWFucGFnZS4gIFRoaXMgY29zdHMgYSBiaXQgb2YKKwlJL08uICBFbmFibGVkIGJ5IGRlZmF1bHQuCisrCitUaGlzIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcyB2aWEKK3JlcG9zaXRvcnkncyBgZ2l0d2ViLnNob3dTaXplc2AgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoYm9vbGVhbikuCisKK3BhdGNoZXM6OgorCUVuYWJsZSBhbmQgY29uZmlndXJlICJwYXRjaGVzIiB2aWV3LCB3aGljaCBkaXNwbGF5cyBsaXN0IG9mIGNvbW1pdHMgaW4gZW1haWwKKwkocGxhaW4gdGV4dCkgb3V0cHV0IGZvcm1hdDsgc2VlIGFsc28gbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdLgorCVRoZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGF0Y2hlcyBpbiBhIHBhdGNoc2V0IGdlbmVyYXRlZAorCWluICJwYXRjaGVzIiB2aWV3LiAgU2V0IHRoZSAnZGVmYXVsdCcgZmllbGQgdG8gYSBsaXN0IGNvbnRhaW5pbmcgc2luZ2xlCisJaXRlbSBvZiBvciB0byBhbiBlbXB0eSBsaXN0IHRvIGRpc2FibGUgcGF0Y2ggdmlldywgb3IgdG8gYSBsaXN0CisJY29udGFpbmluZyBhIHNpbmdsZSBuZWdhdGl2ZSBudW1iZXIgdG8gcmVtb3ZlIGFueSBsaW1pdC4KKwlEZWZhdWx0IHZhbHVlIGlzIDE2LgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5wYXRjaGVzYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChpbnRlZ2VyKS4KKworYXZhdGFyOjoKKwlBdmF0YXIgc3VwcG9ydC4gIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHZpZXdzIHN1Y2ggYXMKKwkic2hvcnRsb2ciIG9yICJjb21taXQiIHdpbGwgZGlzcGxheSBhbiBhdmF0YXIgYXNzb2NpYXRlZCB3aXRoCisJdGhlIGVtYWlsIG9mIGVhY2ggY29tbWl0dGVyIGFuZCBhdXRob3IuCisrCitDdXJyZW50bHkgYXZhaWxhYmxlIHByb3ZpZGVycyBhcmUgKiJncmF2YXRhciIqIGFuZCAqInBpY29uIiouCitPbmx5IG9uZSBwcm92aWRlciBhdCBhIHRpbWUgY2FuIGJlIHNlbGVjdGVkICgnZGVmYXVsdCcgaXMgb25lIGVsZW1lbnQgbGlzdCkuCitJZiBhbiB1bmtub3duIHByb3ZpZGVyIGlzIHNwZWNpZmllZCwgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQuCisqTm90ZSogdGhhdCBzb21lIHByb3ZpZGVycyBtaWdodCByZXF1aXJlIGV4dHJhIFBlcmwgcGFja2FnZXMgdG8gYmUKK2luc3RhbGxlZDsgc2VlICdnaXR3ZWIvSU5TVEFMTCcgZm9yIG1vcmUgZGV0YWlscy4KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIHZpYQorcmVwb3NpdG9yeSdzIGBnaXR3ZWIuYXZhdGFyYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorKworU2VlIGFsc28gYCVhdmF0YXJfc2l6ZWAgd2l0aCBwaXhlbCBzaXplcyBmb3IgaWNvbnMgYW5kIGF2YXRhcnMKKygiZGVmYXVsdCIgaXMgdXNlZCBmb3Igb25lLWxpbmUgbGlrZSAibG9nIiBhbmQgInNob3J0bG9nIiwgImRvdWJsZSIKK2lzIHVzZWQgZm9yIHR3by1saW5lIGxpa2UgImNvbW1pdCIsICJjb21taXRkaWZmIiBvciAidGFnIikuICBJZiB0aGUKK2RlZmF1bHQgZm9udCBzaXplcyBvciBsaW5laGVpZ2h0cyBhcmUgY2hhbmdlZCAoZS5nLiB2aWEgYWRkaW5nIGV4dHJhCitDU1Mgc3R5bGVzaGVldCBpbiBgQHN0eWxlc2hlZXRzYCksIGl0IG1heSBiZSBhcHByb3ByaWF0ZSB0byBjaGFuZ2UKK3RoZXNlIHZhbHVlcy4KKworaGlnaGxpZ2h0OjoKKwlTZXJ2ZXItc2lkZSBzeW50YXggaGlnaGxpZ2h0IHN1cHBvcnQgaW4gImJsb2IiIHZpZXcuICBJdCByZXF1aXJlcworCWAkaGlnaGxpZ2h0X2JpbmAgcHJvZ3JhbSB0byBiZSBhdmFpbGFibGUgKHNlZSB0aGUgZGVzY3JpcHRpb24gb2YKKwl0aGlzIHZhcmlhYmxlIGluIHRoZSAiQ29uZmlndXJhdGlvbiB2YXJpYWJsZXMiIHNlY3Rpb24gYWJvdmUpLAorCWFuZCB0aGVyZWZvcmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKysKK1RoaXMgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIHZpYQorcmVwb3NpdG9yeSdzIGBnaXR3ZWIuaGlnaGxpZ2h0YCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChib29sZWFuKS4KKworcmVtb3RlX2hlYWRzOjoKKwlFbmFibGUgZGlzcGxheWluZyByZW1vdGUgaGVhZHMgKHJlbW90ZS10cmFja2luZyBicmFuY2hlcykgaW4gdGhlICJoZWFkcyIKKwlsaXN0LiAgSW4gbW9zdCBjYXNlcyB0aGUgbGlzdCBvZiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgaXMgYW4KKwl1bm5lY2Vzc2FyeSBpbnRlcm5hbCBwcml2YXRlIGRldGFpbCwgYW5kIHRoaXMgZmVhdHVyZSBpcyB0aGVyZWZvcmUKKwlkaXNhYmxlZCBieSBkZWZhdWx0LiAgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0sIHdoaWNoIGlzIHVzdWFsbHkgdXNlZAorCXRvIGJyb3dzZSBsb2NhbCByZXBvc2l0b3JpZXMsIGVuYWJsZXMgYW5kIHVzZXMgdGhpcyBmZWF0dXJlLgorKworVGhpcyBmZWF0dXJlIGNhbiBiZSBjb25maWd1cmVkIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgdmlhCityZXBvc2l0b3J5J3MgYGdpdHdlYi5yZW1vdGVfaGVhZHNgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKGJvb2xlYW4pLgorCisKK1RoZSByZW1haW5pbmcgZmVhdHVyZXMgY2Fubm90IGJlIG92ZXJyaWRkZW4gb24gYSBwZXIgcHJvamVjdCBiYXNpcy4KKworc2VhcmNoOjoKKwlFbmFibGUgdGV4dCBzZWFyY2gsIHdoaWNoIHdpbGwgbGlzdCB0aGUgY29tbWl0cyB3aGljaCBtYXRjaCBhdXRob3IsCisJY29tbWl0dGVyIG9yIGNvbW1pdCB0ZXh0IHRvIGEgZ2l2ZW4gc3RyaW5nOyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mCisJYC0tYXV0aG9yYCwgYC0tY29tbWl0dGVyYCBhbmQgYC0tZ3JlcGAgb3B0aW9ucyBpbiBsaW5rZ2l0OmdpdC1sb2dbMV0KKwltYW5wYWdlLiAgRW5hYmxlZCBieSBkZWZhdWx0LgorKworUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCitmb3Jrczo6CisJSWYgdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIGdpdHdlYiBjb25zaWRlcnMgcHJvamVjdHMgaW4KKwlzdWJkaXJlY3RvcmllcyBvZiBwcm9qZWN0IHJvb3QgKGJhc2VuYW1lKSB0byBiZSBmb3JrcyBvZiBleGlzdGluZworCXByb2plY3RzLiAgRm9yIGVhY2ggcHJvamVjdCArJHByb2puYW1lLmdpdCssIHByb2plY3RzIGluIHRoZQorCSskcHJvam5hbWUvKyBkaXJlY3RvcnkgYW5kIGl0cyBzdWJkaXJlY3RvcmllcyB3aWxsIG5vdCBiZQorCXNob3duIGluIHRoZSBtYWluIHByb2plY3RzIGxpc3QuICBJbnN0ZWFkLCBhIFwnXCsnIG1hcmsgaXMgc2hvd24KKwluZXh0IHRvICskcHJvam5hbWUrLCB3aGljaCBsaW5rcyB0byBhICJmb3JrcyIgdmlldyB0aGF0IGxpc3RzIGFsbAorCXRoZSBmb3JrcyAoYWxsIHByb2plY3RzIGluICskcHJvam5hbWUvKyBzdWJkaXJlY3RvcnkpLiAgQWRkaXRpb25hbGx5CisJYSAiZm9ya3MiIHZpZXcgZm9yIGEgcHJvamVjdCBpcyBsaW5rZWQgZnJvbSBwcm9qZWN0IHN1bW1hcnkgcGFnZS4KKysKK0lmIHRoZSBwcm9qZWN0IGxpc3QgaXMgdGFrZW4gZnJvbSBhIGZpbGUgKCskcHJvamVjdHNfbGlzdCsgcG9pbnRzIHRvIGEKK2ZpbGUpLCBmb3JrcyBhcmUgb25seSByZWNvZ25pemVkIGlmIHRoZXkgYXJlIGxpc3RlZCBhZnRlciB0aGUgbWFpbiBwcm9qZWN0CitpbiB0aGF0IGZpbGUuCisrCitQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisKK2FjdGlvbnM6OgorCUluc2VydCBjdXN0b20gbGlua3MgdG8gdGhlIGFjdGlvbiBiYXIgb2YgYWxsIHByb2plY3QgcGFnZXMuICBUaGlzCisJYWxsb3dzIHlvdSB0byBsaW5rIHRvIHRoaXJkLXBhcnR5IHNjcmlwdHMgaW50ZWdyYXRpbmcgaW50byBnaXR3ZWIuCisrCitUaGUgImRlZmF1bHQiIHZhbHVlIGNvbnNpc3RzIG9mIGEgbGlzdCBvZiB0cmlwbGV0cyBpbiB0aGUgZm9ybQorYCgiPGxhYmVsPiIsICI8bGluaz4iLCAiPHBvc2l0aW9uPiIpYCB3aGVyZSAicG9zaXRpb24iIGlzIHRoZSBsYWJlbAorYWZ0ZXIgd2hpY2ggdG8gaW5zZXJ0IHRoZSBsaW5rLCAibGluayIgaXMgYSBmb3JtYXQgc3RyaW5nIHdoZXJlIGAlbmAKK2V4cGFuZHMgdG8gdGhlIHByb2plY3QgbmFtZSwgYCVmYCB0byB0aGUgcHJvamVjdCBwYXRoIHdpdGhpbiB0aGUKK2ZpbGVzeXN0ZW0gKGkuZS4gIiRwcm9qZWN0cm9vdC8kcHJvamVjdCIpLCBgJWhgIHRvIHRoZSBjdXJyZW50IGhhc2gKKyhcJ2gnIGdpdHdlYiBwYXJhbWV0ZXIpIGFuZCBgJWJgIHRvIHRoZSBjdXJyZW50IGhhc2ggYmFzZQorKFwnaGInIGdpdHdlYiBwYXJhbWV0ZXIpOyBgJSVgIGV4cGFuZHMgdG8gXCclJy4KKysKK0ZvciBleGFtcGxlLCBhdCB0aGUgdGltZSB0aGlzIHBhZ2Ugd2FzIHdyaXR0ZW4sIHRoZSBodHRwOi8vcmVwby5vci5jeltdCitHaXQgaG9zdGluZyBzaXRlIHNldCBpdCB0byB0aGUgZm9sbG93aW5nIHRvIGVuYWJsZSBncmFwaGljYWwgbG9nCisodXNpbmcgdGhlIHRoaXJkIHBhcnR5IHRvb2wgKmdpdC1icm93c2VyKik6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskZmVhdHVyZXsnYWN0aW9ucyd9eydkZWZhdWx0J30gPQorCVsgKCdncmFwaGljbG9nJywgJy9naXQtYnJvd3Nlci9ieS1jb21taXQuaHRtbD9yPSVuJywgJ3N1bW1hcnknKV07CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGFkZHMgYSBsaW5rIHRpdGxlZCAiZ3JhcGhpY2xvZyIgYWZ0ZXIgdGhlICJzdW1tYXJ5IiBsaW5rLCBsZWFkaW5nIHRvCitgZ2l0LWJyb3dzZXJgIHNjcmlwdCwgcGFzc2luZyBgcj08cHJvamVjdD5gIGFzIGEgcXVlcnkgcGFyYW1ldGVyLgorKworUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCit0aW1lZDo6CisJRW5hYmxlIGRpc3BsYXlpbmcgaG93IG11Y2ggdGltZSBhbmQgaG93IG1hbnkgR2l0IGNvbW1hbmRzIGl0IHRvb2sgdG8KKwlnZW5lcmF0ZSBhbmQgZGlzcGxheSBlYWNoIHBhZ2UgaW4gdGhlIHBhZ2UgZm9vdGVyIChhdCB0aGUgYm90dG9tIG9mCisJcGFnZSkuICBGb3IgZXhhbXBsZSB0aGUgZm9vdGVyIG1pZ2h0IGNvbnRhaW46ICJUaGlzIHBhZ2UgdG9vayA2LjUzMzI1CisJc2Vjb25kcyBhbmQgMTMgR2l0IGNvbW1hbmRzIHRvIGdlbmVyYXRlLiIgIERpc2FibGVkIGJ5IGRlZmF1bHQuCisrCitQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisKK2phdmFzY3JpcHQtdGltZXpvbmU6OgorCUVuYWJsZSBhbmQgY29uZmlndXJlIHRoZSBhYmlsaXR5IHRvIGNoYW5nZSBhIGNvbW1vbiB0aW1lIHpvbmUgZm9yIGRhdGVzCisJaW4gZ2l0d2ViIG91dHB1dCB2aWEgSmF2YVNjcmlwdC4gIERhdGVzIGluIGdpdHdlYiBvdXRwdXQgaW5jbHVkZQorCWF1dGhvcmRhdGUgYW5kIGNvbW1pdHRlcmRhdGUgaW4gImNvbW1pdCIsICJjb21taXRkaWZmIiBhbmQgImxvZyIKKwl2aWV3cywgYW5kIHRhZ2dlcmRhdGUgaW4gInRhZyIgdmlldy4gIEVuYWJsZWQgYnkgZGVmYXVsdC4KKysKK1RoZSB2YWx1ZSBpcyBhIGxpc3Qgb2YgdGhyZWUgdmFsdWVzOiBhIGRlZmF1bHQgdGltZSB6b25lIChmb3IgaWYgdGhlIGNsaWVudAoraGFzbid0IHNlbGVjdGVkIHNvbWUgb3RoZXIgdGltZSB6b25lIGFuZCBzYXZlZCBpdCBpbiBhIGNvb2tpZSksIGEgbmFtZSBvZiBjb29raWUKK3doZXJlIHRvIHN0b3JlIHNlbGVjdGVkIHRpbWUgem9uZSwgYW5kIGEgQ1NTIGNsYXNzIHVzZWQgdG8gbWFyayB1cAorZGF0ZXMgZm9yIG1hbmlwdWxhdGlvbi4gIElmIHlvdSB3YW50IHRvIHR1cm4gdGhpcyBmZWF0dXJlIG9mZiwgc2V0ICJkZWZhdWx0IgordG8gZW1wdHkgbGlzdDogYFtdYC4KKysKK1R5cGljYWwgZ2l0d2ViIGNvbmZpZyBmaWxlcyB3aWxsIG9ubHkgY2hhbmdlIHN0YXJ0aW5nIChkZWZhdWx0KSB0aW1lIHpvbmUsCithbmQgbGVhdmUgb3RoZXIgZWxlbWVudHMgYXQgdGhlaXIgZGVmYXVsdCB2YWx1ZXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyRmZWF0dXJleydqYXZhc2NyaXB0LXRpbWV6b25lJ317J2RlZmF1bHQnfVswXSA9ICJ1dGMiOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGUgZXhhbXBsZSBjb25maWd1cmF0aW9uIHByZXNlbnRlZCBoZXJlIGlzIGd1YXJhbnRlZWQgdG8gYmUgYmFja3dhcmRzCithbmQgZm9yd2FyZCBjb21wYXRpYmxlLgorKworVGltZSB6b25lIHZhbHVlcyBjYW4gYmUgImxvY2FsIiAoZm9yIGxvY2FsIHRpbWUgem9uZSB0aGF0IGJyb3dzZXIgdXNlcyksICJ1dGMiCisod2hhdCBnaXR3ZWIgdXNlcyB3aGVuIEphdmFTY3JpcHQgb3IgdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkKSwgb3IgbnVtZXJpY2FsCit0aW1lIHpvbmVzIGluIHRoZSBmb3JtIG9mICIrLy1ISE1NIiwgc3VjaCBhcyAiKzAyMDAiLgorKworUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCitleHRyYS1icmFuY2gtcmVmczo6CisJTGlzdCBvZiBhZGRpdGlvbmFsIGRpcmVjdG9yaWVzIHVuZGVyICJyZWZzIiB3aGljaCBhcmUgZ29pbmcgdG8KKwliZSB1c2VkIGFzIGJyYW5jaCByZWZzLiBGb3IgZXhhbXBsZSBpZiB5b3UgaGF2ZSBhIGdlcnJpdCBzZXR1cAorCXdoZXJlIGFsbCBicmFuY2hlcyB1bmRlciByZWZzL2hlYWRzLyBhcmUgb2ZmaWNpYWwsCisJcHVzaC1hZnRlci1yZXZpZXcgb25lcyBhbmQgYnJhbmNoZXMgdW5kZXIgcmVmcy9zYW5kYm94LywKKwlyZWZzL3dpcCBhbmQgcmVmcy9vdGhlciBhcmUgdXNlciBvbmVzIHdoZXJlIHBlcm1pc3Npb25zIGFyZQorCW11Y2ggd2lkZXIsIHRoZW4geW91IG1pZ2h0IHdhbnQgdG8gc2V0IHRoaXMgdmFyaWFibGUgYXMKKwlmb2xsb3dzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyRmZWF0dXJleydleHRyYS1icmFuY2gtcmVmcyd9eydkZWZhdWx0J30gPQorCVsnc2FuZGJveCcsICd3aXAnLCAnb3RoZXInXTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitUaGlzIGZlYXR1cmUgY2FuIGJlIGNvbmZpZ3VyZWQgb24gcGVyLXJlcG9zaXRvcnkgYmFzaXMgYWZ0ZXIgc2V0dGluZworJGZlYXR1cmV7J2V4dHJhLWJyYW5jaC1yZWZzJ317J292ZXJyaWRlJ30gdG8gdHJ1ZSwgdmlhIHJlcG9zaXRvcnkncworYGdpdHdlYi5leHRyYUJyYW5jaFJlZnNgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIHdoaWNoIGNvbnRhaW5zIGEKK3NwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIHJlZnMuIEFuIGV4YW1wbGU6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW2dpdHdlYl0KKwlleHRyYUJyYW5jaFJlZnMgPSBzYW5kYm94IHdpcCBvdGhlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK1RoZSBnaXR3ZWIuZXh0cmFCcmFuY2hSZWZzIGlzIGFjdHVhbGx5IGEgbXVsdGktdmFsdWVkIGNvbmZpZ3VyYXRpb24KK3ZhcmlhYmxlLCBzbyBmb2xsb3dpbmcgZXhhbXBsZSBpcyBhbHNvIGNvcnJlY3QgYW5kIHRoZSByZXN1bHQgaXMgdGhlCitzYW1lIGFzIG9mIHRoZSBzbmlwcGV0IGFib3ZlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tnaXR3ZWJdCisJZXh0cmFCcmFuY2hSZWZzID0gc2FuZGJveAorCWV4dHJhQnJhbmNoUmVmcyA9IHdpcCBvdGhlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK0l0IGlzIGFuIGVycm9yIHRvIHNwZWNpZnkgYSByZWYgdGhhdCBkb2VzIG5vdCBwYXNzICJnaXQgY2hlY2stcmVmLWZvcm1hdCIKK3NjcnV0aW55LiBEdXBsaWNhdGVkIHZhbHVlcyBhcmUgZmlsdGVyZWQuCisKKworRVhBTVBMRVMKKy0tLS0tLS0tCisKK1RvIGVuYWJsZSBibGFtZSwgcGlja2F4ZSBzZWFyY2gsIGFuZCBzbmFwc2hvdCBzdXBwb3J0IChhbGxvd2luZyAidGFyLmd6IiBhbmQKKyJ6aXAiIHNuYXBzaG90cyksIHdoaWxlIGFsbG93aW5nIGluZGl2aWR1YWwgcHJvamVjdHMgdG8gdHVybiB0aGVtIG9mZiwgcHV0Cit0aGUgZm9sbG93aW5nIGluIHlvdXIgR0lUV0VCX0NPTkZJRyBmaWxlOgorCisJJGZlYXR1cmV7J2JsYW1lJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkkZmVhdHVyZXsnYmxhbWUnfXsnb3ZlcnJpZGUnfSA9IDE7CisKKwkkZmVhdHVyZXsncGlja2F4ZSd9eydkZWZhdWx0J30gPSBbMV07CisJJGZlYXR1cmV7J3BpY2theGUnfXsnb3ZlcnJpZGUnfSA9IDE7CisKKwkkZmVhdHVyZXsnc25hcHNob3QnfXsnZGVmYXVsdCd9ID0gWyd6aXAnLCAndGd6J107CisJJGZlYXR1cmV7J3NuYXBzaG90J317J292ZXJyaWRlJ30gPSAxOworCitJZiB5b3UgYWxsb3cgb3ZlcnJpZGluZyBmb3IgdGhlIHNuYXBzaG90IGZlYXR1cmUsIHlvdSBjYW4gc3BlY2lmeSB3aGljaAorc25hcHNob3QgZm9ybWF0cyBhcmUgZ2xvYmFsbHkgZGlzYWJsZWQuIFlvdSBjYW4gYWxzbyBhZGQgYW55IGNvbW1hbmQtbGluZQorb3B0aW9ucyB5b3Ugd2FudCAoc3VjaCBhcyBzZXR0aW5nIHRoZSBjb21wcmVzc2lvbiBsZXZlbCkuIEZvciBpbnN0YW5jZSwgeW91CitjYW4gZGlzYWJsZSBaaXAgY29tcHJlc3NlZCBzbmFwc2hvdHMgYW5kIHNldCAqZ3ppcCooMSkgdG8gcnVuIGF0IGxldmVsIDYgYnkKK2FkZGluZyB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHlvdXIgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZToKKworCSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd6aXAnfXsnZGlzYWJsZWQnfSA9IDE7CisJJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7J3Rneid9eydjb21wcmVzc29yJ30gPSBbJ2d6aXAnLCctNiddOworCitCVUdTCistLS0tCitEZWJ1Z2dpbmcgd291bGQgYmUgZWFzaWVyIGlmIHRoZSBmYWxsYmFjayBjb25maWd1cmF0aW9uIGZpbGUKKyhgL2V0Yy9naXR3ZWIuY29uZmApIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycmlkZSBpdHMgbG9jYXRpb24KKygnR0lUV0VCX0NPTkZJR19TWVNURU0nKSBoYWQgbmFtZXMgcmVmbGVjdGluZyB0aGVpciAiZmFsbGJhY2siIHJvbGUuCitUaGUgY3VycmVudCBuYW1lcyBhcmUga2VwdCB0byBhdm9pZCBicmVha2luZyB3b3JraW5nIHNldHVwcy4KKworRU5WSVJPTk1FTlQKKy0tLS0tLS0tLS0tCitUaGUgbG9jYXRpb24gb2YgcGVyLWluc3RhbmNlIGFuZCBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGVzIGNhbiBiZQorb3ZlcnJpZGRlbiB1c2luZyB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlczoKKworR0lUV0VCX0NPTkZJRzo6CisJU2V0cyBsb2NhdGlvbiBvZiBwZXItaW5zdGFuY2UgY29uZmlndXJhdGlvbiBmaWxlLgorR0lUV0VCX0NPTkZJR19TWVNURU06OgorCVNldHMgbG9jYXRpb24gb2YgZmFsbGJhY2sgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLgorCVRoaXMgZmlsZSBpcyByZWFkIG9ubHkgaWYgcGVyLWluc3RhbmNlIG9uZSBkb2VzIG5vdCBleGlzdC4KK0dJVFdFQl9DT05GSUdfQ09NTU9OOjoKKwlTZXRzIGxvY2F0aW9uIG9mIGNvbW1vbiBzeXN0ZW0td2lkZSBjb25maWd1cmF0aW9uIGZpbGUuCisKKworRklMRVMKKy0tLS0tCitnaXR3ZWJfY29uZmlnLnBlcmw6OgorCVRoaXMgaXMgZGVmYXVsdCBuYW1lIG9mIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uIGZpbGUuICBUaGUKKwlmb3JtYXQgb2YgdGhpcyBmaWxlIGlzIGRlc2NyaWJlZCBhYm92ZS4KKy9ldGMvZ2l0d2ViLmNvbmY6OgorCVRoaXMgaXMgZGVmYXVsdCBuYW1lIG9mIGZhbGxiYWNrIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24KKwlmaWxlLiAgVGhpcyBmaWxlIGlzIHVzZWQgb25seSBpZiBwZXItaW5zdGFuY2UgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlIGlzIG5vdCBmb3VuZC4KKy9ldGMvZ2l0d2ViLWNvbW1vbi5jb25mOjoKKwlUaGlzIGlzIGRlZmF1bHQgbmFtZSBvZiBjb21tb24gc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbgorCWZpbGUuCisKKworU0VFIEFMU08KKy0tLS0tLS0tCitsaW5rZ2l0OmdpdHdlYlsxXSwgbGlua2dpdDpnaXQtaW5zdGF3ZWJbMV0KKworJ2dpdHdlYi9SRUFETUUnLCAnZ2l0d2ViL0lOU1RBTEwnCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXR3ZWIudHh0IGIvRG9jdW1lbnRhdGlvbi9naXR3ZWIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWM4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2dpdHdlYi50eHQKQEAgLTAsMCArMSw3MDQgQEAKK2dpdHdlYigxKQorPT09PT09PT09CisKK05BTUUKKy0tLS0KK2dpdHdlYiAtIEdpdCB3ZWIgaW50ZXJmYWNlICh3ZWIgZnJvbnRlbmQgdG8gR2l0IHJlcG9zaXRvcmllcykKKworU1lOT1BTSVMKKy0tLS0tLS0tCitUbyBnZXQgc3RhcnRlZCB3aXRoIGdpdHdlYiwgcnVuIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdIGZyb20gYSBHaXQgcmVwb3NpdG9yeS4KK1RoaXMgd291bGQgY29uZmlndXJlIGFuZCBzdGFydCB5b3VyIHdlYiBzZXJ2ZXIsIGFuZCBydW4gd2ViIGJyb3dzZXIgcG9pbnRpbmcgdG8KK2dpdHdlYi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0dpdHdlYiBwcm92aWRlcyBhIHdlYiBpbnRlcmZhY2UgdG8gR2l0IHJlcG9zaXRvcmllcy4gIEl0cyBmZWF0dXJlcyBpbmNsdWRlOgorCisqIFZpZXdpbmcgbXVsdGlwbGUgR2l0IHJlcG9zaXRvcmllcyB3aXRoIGNvbW1vbiByb290LgorKiBCcm93c2luZyBldmVyeSByZXZpc2lvbiBvZiB0aGUgcmVwb3NpdG9yeS4KKyogVmlld2luZyB0aGUgY29udGVudHMgb2YgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgYXQgYW55IHJldmlzaW9uLgorKiBWaWV3aW5nIHRoZSByZXZpc2lvbiBsb2cgb2YgYnJhbmNoZXMsIGhpc3Rvcnkgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLAorICBzZWUgd2hhdCB3YXMgY2hhbmdlZCB3aGVuLCBieSB3aG8uCisqIFZpZXdpbmcgdGhlIGJsYW1lL2Fubm90YXRpb24gZGV0YWlscyBvZiBhbnkgZmlsZSAoaWYgZW5hYmxlZCkuCisqIEdlbmVyYXRpbmcgUlNTIGFuZCBBdG9tIGZlZWRzIG9mIGNvbW1pdHMsIGZvciBhbnkgYnJhbmNoLgorICBUaGUgZmVlZHMgYXJlIGF1dG8tZGlzY292ZXJhYmxlIGluIG1vZGVybiB3ZWIgYnJvd3NlcnMuCisqIFZpZXdpbmcgZXZlcnl0aGluZyB0aGF0IHdhcyBjaGFuZ2VkIGluIGEgcmV2aXNpb24sIGFuZCBzdGVwIHRocm91Z2gKKyAgcmV2aXNpb25zIG9uZSBhdCBhIHRpbWUsIHZpZXdpbmcgdGhlIGhpc3Rvcnkgb2YgdGhlIHJlcG9zaXRvcnkuCisqIEZpbmRpbmcgY29tbWl0cyB3aGljaCBjb21taXQgbWVzc2FnZXMgbWF0Y2hlcyBnaXZlbiBzZWFyY2ggdGVybS4KKworU2VlIGh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1naXQvZ2l0LmdpdDthPXRyZWU7Zj1naXR3ZWJbXSBvcgoraHR0cDovL3JlcG8ub3IuY3ovdy9naXQuZ2l0L3RyZWUvSEVBRDovZ2l0d2ViL1tdIGZvciBnaXR3ZWIgc291cmNlIGNvZGUsCiticm93c2VkIHVzaW5nIGdpdHdlYiBpdHNlbGYuCisKKworQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLQorVmFyaW91cyBhc3BlY3RzIG9mIGdpdHdlYidzIGJlaGF2aW9yIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggdGhlIGNvbmZpZ3VyYXRpb24KK2ZpbGUgJ2dpdHdlYl9jb25maWcucGVybCcgb3IgJy9ldGMvZ2l0d2ViLmNvbmYnLiAgU2VlIHRoZSBsaW5rZ2l0OmdpdHdlYi5jb25mWzVdCitmb3IgZGV0YWlscy4KKworUmVwb3NpdG9yaWVzCit+fn5+fn5+fn5+fn4KK0dpdHdlYiBjYW4gc2hvdyBpbmZvcm1hdGlvbiBmcm9tIG9uZSBvciBtb3JlIEdpdCByZXBvc2l0b3JpZXMuICBUaGVzZQorcmVwb3NpdG9yaWVzIGhhdmUgdG8gYmUgYWxsIG9uIGxvY2FsIGZpbGVzeXN0ZW0sIGFuZCBoYXZlIHRvIHNoYXJlIGNvbW1vbgorcmVwb3NpdG9yeSByb290LCBpLmUuIGJlIGFsbCB1bmRlciBhIHNpbmdsZSBwYXJlbnQgcmVwb3NpdG9yeSAoYnV0IHNlZSBhbHNvCisiQWR2YW5jZWQgd2ViIHNlcnZlciBzZXR1cCIgc2VjdGlvbiwgIldlYnNlcnZlciBjb25maWd1cmF0aW9uIHdpdGggbXVsdGlwbGUKK3Byb2plY3RzJyByb290IiBzdWJzZWN0aW9uKS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291ciAkcHJvamVjdHJvb3QgPSAnL3BhdGgvdG8vcGFyZW50L2RpcmVjdG9yeSc7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgYCRwcm9qZWN0cm9vdGAgaXMgJy9wdWIvZ2l0Jy4gIFlvdSBjYW4gY2hhbmdlIGl0IGR1cmluZworYnVpbGRpbmcgZ2l0d2ViIHZpYSBgR0lUV0VCX1BST0pFQ1RST09UYCBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCitCeSBkZWZhdWx0IGFsbCBHaXQgcmVwb3NpdG9yaWVzIHVuZGVyIGAkcHJvamVjdHJvb3RgIGFyZSB2aXNpYmxlIGFuZCBhdmFpbGFibGUKK3RvIGdpdHdlYi4gIFRoZSBsaXN0IG9mIHByb2plY3RzIGlzIGdlbmVyYXRlZCBieSBkZWZhdWx0IGJ5IHNjYW5uaW5nIHRoZQorYCRwcm9qZWN0cm9vdGAgZGlyZWN0b3J5IGZvciBHaXQgcmVwb3NpdG9yaWVzIChmb3Igb2JqZWN0IGRhdGFiYXNlcyB0byBiZQorbW9yZSBleGFjdDsgZ2l0d2ViIGlzIG5vdCBpbnRlcmVzdGVkIGluIGEgd29ya2luZyBhcmVhLCBhbmQgaXMgYmVzdCBzdWl0ZWQKK3RvIHNob3dpbmcgImJhcmUiIHJlcG9zaXRvcmllcykuCisKK1RoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IGluIGdpdHdlYiBpcyB0aGUgcGF0aCB0byBpdHMgYCRHSVRfRElSYCAoaXRzIG9iamVjdAorZGF0YWJhc2UpIHJlbGF0aXZlIHRvIGAkcHJvamVjdHJvb3RgLiAgVGhlcmVmb3JlIHRoZSByZXBvc2l0b3J5ICRyZXBvIGNhbiBiZQorZm91bmQgYXQgIiRwcm9qZWN0cm9vdC8kcmVwbyIuCisKKworUHJvamVjdHMgbGlzdCBmaWxlIGZvcm1hdAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSW5zdGVhZCBvZiBoYXZpbmcgZ2l0d2ViIGZpbmQgcmVwb3NpdG9yaWVzIGJ5IHNjYW5uaW5nIGZpbGVzeXN0ZW0KK3N0YXJ0aW5nIGZyb20gJHByb2plY3Ryb290LCB5b3UgY2FuIHByb3ZpZGUgYSBwcmUtZ2VuZXJhdGVkIGxpc3Qgb2YKK3Zpc2libGUgcHJvamVjdHMgYnkgc2V0dGluZyBgJHByb2plY3RzX2xpc3RgIHRvIHBvaW50IHRvIGEgcGxhaW4gdGV4dAorZmlsZSB3aXRoIGEgbGlzdCBvZiBwcm9qZWN0cyAod2l0aCBzb21lIGFkZGl0aW9uYWwgaW5mbykuCisKK1RoaXMgZmlsZSB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCisqIE9uZSByZWNvcmQgKGZvciBwcm9qZWN0IC8gcmVwb3NpdG9yeSkgcGVyIGxpbmU7IGRvZXMgbm90IHN1cHBvcnQgbGluZQorY29udGludWF0aW9uIChuZXdsaW5lIGVzY2FwaW5nKS4KKworKiBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFyZSBpZ25vcmVkLgorCisqIFdoaXRlc3BhY2Ugc2VwYXJhdGVkIGZpZWxkczsgYW55IHJ1biBvZiB3aGl0ZXNwYWNlIGNhbiBiZSB1c2VkIGFzIGZpZWxkCitzZXBhcmF0b3IgKHJ1bGVzIGZvciBQZXJsJ3MgImBzcGxpdCgiICIsICRsaW5lKWAiKS4KKworKiBGaWVsZHMgdXNlIG1vZGlmaWVkIFVSSSBlbmNvZGluZywgZGVmaW5lZCBpbiBSRkMgMzk4Niwgc2VjdGlvbiAyLjEKKyhQZXJjZW50LUVuY29kaW5nKSwgb3IgcmF0aGVyICJRdWVyeSBzdHJpbmcgZW5jb2RpbmciIChzZWUKK2h0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVlcnlfc3RyaW5nI1VSTF9lbmNvZGluZ1tdKSwgdGhlIGRpZmZlcmVuY2UKK2JlaW5nIHRoYXQgU1AgKCIgIikgY2FuIGJlIGVuY29kZWQgYXMgIntwbHVzfSIgKGFuZCB0aGVyZWZvcmUgIntwbHVzfSIgaGFzIHRvIGJlCithbHNvIHBlcmNlbnQtZW5jb2RlZCkuCisrCitSZXNlcnZlZCBjaGFyYWN0ZXJzIGFyZTogIiUiICh1c2VkIGZvciBlbmNvZGluZyksICJ7cGx1c30iIChjYW4gYmUgdXNlZCB0bworZW5jb2RlIFNQQUNFKSwgYWxsIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBhcyBkZWZpbmVkIGluIFBlcmwsIGluY2x1ZGluZyBTUCwKK1RBQiBhbmQgTEYsICh1c2VkIHRvIHNlcGFyYXRlIGZpZWxkcyBpbiBhIHJlY29yZCkuCisKKyogQ3VycmVudGx5IHJlY29nbml6ZWQgZmllbGRzIGFyZToKKzxyZXBvc2l0b3J5IHBhdGg+OjoKKwlwYXRoIHRvIHJlcG9zaXRvcnkgR0lUX0RJUiwgcmVsYXRpdmUgdG8gYCRwcm9qZWN0cm9vdGAKKzxyZXBvc2l0b3J5IG93bmVyPjo6CisJZGlzcGxheWVkIGFzIHJlcG9zaXRvcnkgb3duZXIsIHByZWZlcmFibHkgZnVsbCBuYW1lLCBvciBlbWFpbCwKKwlvciBib3RoCisKK1lvdSBjYW4gZ2VuZXJhdGUgdGhlIHByb2plY3RzIGxpc3QgaW5kZXggZmlsZSB1c2luZyB0aGUgcHJvamVjdF9pbmRleCBhY3Rpb24KKyh0aGUgJ1RYVCcgbGluayBvbiBwcm9qZWN0cyBsaXN0IHBhZ2UpIGRpcmVjdGx5IGZyb20gZ2l0d2ViOyBzZWUgYWxzbworIkdlbmVyYXRpbmcgcHJvamVjdHMgbGlzdCB1c2luZyBnaXR3ZWIiIHNlY3Rpb24gYmVsb3cuCisKK0V4YW1wbGUgY29udGVudHM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZm9vLmdpdCAgICAgICBKb2UrUitIYWNrZXIrPGpvZUBleGFtcGxlLmNvbT4KK2Zvby9iYXIuZ2l0ICAgTytXK05lcis8b3duZXJAZXhhbXBsZS5vcmc+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0J5IGRlZmF1bHQgdGhpcyBmaWxlIGNvbnRyb2xzIG9ubHkgd2hpY2ggcHJvamVjdHMgYXJlICp2aXNpYmxlKiBvbiBwcm9qZWN0cworbGlzdCBwYWdlIChub3RlIHRoYXQgZW50cmllcyB0aGF0IGRvIG5vdCBwb2ludCB0byBjb3JyZWN0bHkgcmVjb2duaXplZCBHaXQKK3JlcG9zaXRvcmllcyB3b24ndCBiZSBkaXNwbGF5ZWQgYnkgZ2l0d2ViKS4gIEV2ZW4gaWYgYSBwcm9qZWN0IGlzIG5vdAordmlzaWJsZSBvbiBwcm9qZWN0cyBsaXN0IHBhZ2UsIHlvdSBjYW4gdmlldyBpdCBuZXZlcnRoZWxlc3MgYnkgaGFuZC1jcmFmdGluZworYSBnaXR3ZWIgVVJMLiAgQnkgc2V0dGluZyBgJHN0cmljdF9leHBvcnRgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgKHNlZQorbGlua2dpdDpnaXR3ZWIuY29uZls1XSkgdG8gdHJ1ZSB2YWx1ZSB5b3UgY2FuIGFsbG93IHZpZXdpbmcgb25seSBvZgorcmVwb3NpdG9yaWVzIGFsc28gc2hvd24gb24gdGhlIG92ZXJ2aWV3IHBhZ2UgKGkuZS4gb25seSBwcm9qZWN0cyBleHBsaWNpdGx5CitsaXN0ZWQgaW4gcHJvamVjdHMgbGlzdCBmaWxlIHdpbGwgYmUgYWNjZXNzaWJsZSkuCisKKworR2VuZXJhdGluZyBwcm9qZWN0cyBsaXN0IHVzaW5nIGdpdHdlYgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitXZSBhc3N1bWUgdGhhdCBHSVRXRUJfQ09ORklHIGhhcyBpdHMgZGVmYXVsdCBNYWtlZmlsZSB2YWx1ZSwgbmFtZWx5CisnZ2l0d2ViX2NvbmZpZy5wZXJsJy4gUHV0IHRoZSBmb2xsb3dpbmcgaW4gJ2dpdHdlYl9tYWtlX2luZGV4LnBlcmwnIGZpbGU6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWFkX2NvbmZpZ19maWxlKCJnaXR3ZWJfY29uZmlnLnBlcmwiKTsKKyRwcm9qZWN0c19saXN0ID0gJHByb2plY3Ryb290OworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHNjcmlwdCB0byBnZXQgbGlzdCBvZiBwcm9qZWN0IGluIHRoZSBmb3JtYXQKK3N1aXRhYmxlIGZvciBHSVRXRUJfTElTVCBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIChvcgorYCRwcm9qZWN0c19saXN0YCB2YXJpYWJsZSBpbiBnaXR3ZWIgY29uZmlnKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyEvYmluL3NoCisKK2V4cG9ydCBHSVRXRUJfQ09ORklHPSJnaXR3ZWJfbWFrZV9pbmRleC5wZXJsIgorZXhwb3J0IEdBVEVXQVlfSU5URVJGQUNFPSJDR0kvMS4xIgorZXhwb3J0IEhUVFBfQUNDRVBUPSIqLyoiCitleHBvcnQgUkVRVUVTVF9NRVRIT0Q9IkdFVCIKK2V4cG9ydCBRVUVSWV9TVFJJTkc9ImE9cHJvamVjdF9pbmRleCIKKworcGVybCAtLSAvdmFyL3d3dy9jZ2ktYmluL2dpdHdlYi5jZ2kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUnVuIHRoaXMgc2NyaXB0IGFuZCBzYXZlIGl0cyBvdXRwdXQgdG8gYSBmaWxlLiAgVGhpcyBmaWxlIGNvdWxkIHRoZW4gYmUgdXNlZAorYXMgcHJvamVjdHMgbGlzdCBmaWxlLCB3aGljaCBtZWFucyB0aGF0IHlvdSBjYW4gc2V0IGAkcHJvamVjdHNfbGlzdGAgdG8gaXRzCitmaWxlbmFtZS4KKworCitDb250cm9sbGluZyBhY2Nlc3MgdG8gR2l0IHJlcG9zaXRvcmllcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0J5IGRlZmF1bHQgYWxsIEdpdCByZXBvc2l0b3JpZXMgdW5kZXIgYCRwcm9qZWN0cm9vdGAgYXJlIHZpc2libGUgYW5kCithdmFpbGFibGUgdG8gZ2l0d2ViLiAgWW91IGNhbiBob3dldmVyIGNvbmZpZ3VyZSBob3cgZ2l0d2ViIGNvbnRyb2xzIGFjY2VzcwordG8gcmVwb3NpdG9yaWVzLgorCisqIEFzIGRlc2NyaWJlZCBpbiAiUHJvamVjdHMgbGlzdCBmaWxlIGZvcm1hdCIgc2VjdGlvbiwgeW91IGNhbiBjb250cm9sIHdoaWNoCitwcm9qZWN0cyBhcmUgKnZpc2libGUqIGJ5IHNlbGVjdGl2ZWx5IGluY2x1ZGluZyByZXBvc2l0b3JpZXMgaW4gcHJvamVjdHMKK2xpc3QgZmlsZSwgYW5kIHNldHRpbmcgYCRwcm9qZWN0c19saXN0YCBnaXR3ZWIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0bworcG9pbnQgdG8gaXQuICBXaXRoIGAkc3RyaWN0X2V4cG9ydGAgc2V0LCBwcm9qZWN0cyBsaXN0IGZpbGUgY2FuIGJlIHVzZWQgdG8KK2NvbnRyb2wgd2hpY2ggcmVwb3NpdG9yaWVzIGFyZSAqYXZhaWxhYmxlKiBhcyB3ZWxsLgorCisqIFlvdSBjYW4gY29uZmlndXJlIGdpdHdlYiB0byBvbmx5IGxpc3QgYW5kIGFsbG93IHZpZXdpbmcgb2YgdGhlIGV4cGxpY2l0bHkKK2V4cG9ydGVkIHJlcG9zaXRvcmllcywgdmlhIGAkZXhwb3J0X29rYCB2YXJpYWJsZSBpbiBnaXR3ZWIgY29uZmlnIGZpbGU7IHNlZQorbGlua2dpdDpnaXR3ZWIuY29uZls1XSBtYW5wYWdlLiAgSWYgaXQgZXZhbHVhdGVzIHRvIHRydWUsIGdpdHdlYiBzaG93cworcmVwb3NpdG9yaWVzIG9ubHkgaWYgdGhpcyBmaWxlIG5hbWVkIGJ5IGAkZXhwb3J0X29rYCBleGlzdHMgaW4gaXRzIG9iamVjdAorZGF0YWJhc2UgKGlmIGRpcmVjdG9yeSBoYXMgdGhlIG1hZ2ljIGZpbGUgbmFtZWQgYCRleHBvcnRfb2tgKS4KKysKK0ZvciBleGFtcGxlIGxpbmtnaXQ6Z2l0LWRhZW1vblsxXSBieSBkZWZhdWx0ICh1bmxlc3MgYC0tZXhwb3J0LWFsbGAgb3B0aW9uCitpcyB1c2VkKSBhbGxvd3MgcHVsbGluZyBvbmx5IGZvciB0aG9zZSByZXBvc2l0b3JpZXMgdGhhdCBoYXZlCisnZ2l0LWRhZW1vbi1leHBvcnQtb2snIGZpbGUuICBBZGRpbmcKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitvdXIgJGV4cG9ydF9vayA9ICJnaXQtZGFlbW9uLWV4cG9ydC1vayI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworbWFrZXMgZ2l0d2ViIHNob3cgYW5kIGFsbG93IGFjY2VzcyBvbmx5IHRvIHRob3NlIHJlcG9zaXRvcmllcyB0aGF0IGNhbiBiZQorZmV0Y2hlZCBmcm9tIHZpYSBgZ2l0Oi8vYCBwcm90b2NvbC4KKworKiBGaW5hbGx5LCBpdCBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IGFuIGFyYml0cmFyeSBwZXJsIHN1YnJvdXRpbmUgdGhhdCB3aWxsCitiZSBjYWxsZWQgZm9yIGVhY2ggcmVwb3NpdG9yeSB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIGJlIGV4cG9ydGVkLiAgVGhlCitzdWJyb3V0aW5lIHJlY2VpdmVzIGFuIGFic29sdXRlIHBhdGggdG8gdGhlIHByb2plY3QgKHJlcG9zaXRvcnkpIGFzIGl0cyBvbmx5CitwYXJhbWV0ZXIgKGkuZS4gIiRwcm9qZWN0cm9vdC8kcHJvamVjdCIpLgorKworRm9yIGV4YW1wbGUsIGlmIHlvdSB1c2UgbW9kX3BlcmwgdG8gcnVuIHRoZSBzY3JpcHQsIGFuZCBoYXZlIGR1bWIKK0hUVFAgcHJvdG9jb2wgYXV0aGVudGljYXRpb24gY29uZmlndXJlZCBmb3IgeW91ciByZXBvc2l0b3JpZXMsIHlvdQorY2FuIHVzZSB0aGUgZm9sbG93aW5nIGhvb2sgdG8gYWxsb3cgYWNjZXNzIG9ubHkgaWYgdGhlIHVzZXIgaXMKK2F1dGhvcml6ZWQgdG8gcmVhZCB0aGUgZmlsZXM6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJGV4cG9ydF9hdXRoX2hvb2sgPSBzdWIgeworCXVzZSBBcGFjaGUyOjpTdWJSZXF1ZXN0ICgpOworCXVzZSBBcGFjaGUyOjpDb25zdCAtY29tcGlsZSA9PiBxdyhIVFRQX09LKTsKKwlteSAkcGF0aCA9ICIkX1swXS9IRUFEIjsKKwlteSAkciAgICA9IEFwYWNoZTI6OlJlcXVlc3RVdGlsLT5yZXF1ZXN0OworCW15ICRzdWIgID0gJHItPmxvb2t1cF9maWxlKCRwYXRoKTsKKwlyZXR1cm4gJHN1Yi0+ZmlsZW5hbWUgZXEgJHBhdGgKKwkgICAgJiYgJHN1Yi0+c3RhdHVzID09IEFwYWNoZTI6OkNvbnN0OjpIVFRQX09LOworfTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworUGVyLXJlcG9zaXRvcnkgZ2l0d2ViIGNvbmZpZ3VyYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitZb3UgY2FuIGNvbmZpZ3VyZSBpbmRpdmlkdWFsIHJlcG9zaXRvcmllcyBzaG93biBpbiBnaXR3ZWIgYnkgY3JlYXRpbmcgZmlsZQoraW4gdGhlICdHSVRfRElSJyBvZiBHaXQgcmVwb3NpdG9yeSwgb3IgYnkgc2V0dGluZyBzb21lIHJlcG8gY29uZmlndXJhdGlvbgordmFyaWFibGUgKGluICdHSVRfRElSL2NvbmZpZycsIHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCitZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGZpbGVzIGluIHJlcG9zaXRvcnk6CisKK1JFQURNRS5odG1sOjoKKwlBIGh0bWwgZmlsZSAoSFRNTCBmcmFnbWVudCkgd2hpY2ggaXMgaW5jbHVkZWQgb24gdGhlIGdpdHdlYiBwcm9qZWN0CisJInN1bW1hcnkiIHBhZ2UgaW5zaWRlIGA8ZGl2PmAgYmxvY2sgZWxlbWVudC4gWW91IGNhbiB1c2UgaXQgZm9yIGxvbmdlcgorCWRlc2NyaXB0aW9uIG9mIGEgcHJvamVjdCwgdG8gcHJvdmlkZSBsaW5rcyAoZm9yIGV4YW1wbGUgdG8gcHJvamVjdCdzCisJaG9tZXBhZ2UpLCBldGMuIFRoaXMgaXMgcmVjb2duaXplZCBvbmx5IGlmIFhTUyBwcmV2ZW50aW9uIGlzIG9mZgorCShgJHByZXZlbnRfeHNzYCBpcyBmYWxzZSwgc2VlIGxpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0pOyBhIHdheSB0byBpbmNsdWRlCisJYSBSRUFETUUgc2FmZWx5IHdoZW4gWFNTIHByZXZlbnRpb24gaXMgb24gbWF5IGJlIHdvcmtlZCBvdXQgaW4gdGhlCisJZnV0dXJlLgorCitkZXNjcmlwdGlvbiAob3IgYGdpdHdlYi5kZXNjcmlwdGlvbmApOjoKKwlTaG9ydCAoc2hvcnRlbmVkIHRvIGAkcHJvamVjdHNfbGlzdF9kZXNjcmlwdGlvbl93aWR0aGAgaW4gdGhlIHByb2plY3RzCisJbGlzdCBwYWdlLCB3aGljaCBpcyAyNSBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQ7IHNlZQorCWxpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0pIHNpbmdsZSBsaW5lIGRlc2NyaXB0aW9uIG9mIGEgcHJvamVjdCAob2YgYQorCXJlcG9zaXRvcnkpLiAgUGxhaW4gdGV4dCBmaWxlOyBIVE1MIHdpbGwgYmUgZXNjYXBlZC4gIEJ5IGRlZmF1bHQgc2V0IHRvCisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitVbm5hbWVkIHJlcG9zaXRvcnk7IGVkaXQgdGhpcyBmaWxlIHRvIG5hbWUgaXQgZm9yIGdpdHdlYi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK2Zyb20gdGhlIHRlbXBsYXRlIGR1cmluZyByZXBvc2l0b3J5IGNyZWF0aW9uLCB1c3VhbGx5IGluc3RhbGxlZCBpbgorJy91c3Ivc2hhcmUvZ2l0LWNvcmUvdGVtcGxhdGVzLycuICBZb3UgY2FuIHVzZSB0aGUgYGdpdHdlYi5kZXNjcmlwdGlvbmAgcmVwbworY29uZmlndXJhdGlvbiB2YXJpYWJsZSwgYnV0IHRoZSBmaWxlIHRha2VzIHByZWNlZGVuY2UuCisKK2NhdGVnb3J5IChvciBgZ2l0d2ViLmNhdGVnb3J5YCk6OgorCVNpbmdlIGxpbmUgY2F0ZWdvcnkgb2YgYSBwcm9qZWN0LCB1c2VkIHRvIGdyb3VwIHByb2plY3RzIGlmCisJYCRwcm9qZWN0c19saXN0X2dyb3VwX2NhdGVnb3JpZXNgIGlzIGVuYWJsZWQuICBCeSBkZWZhdWx0IChmaWxlIGFuZAorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYWJzZW50KSwgdW5jYXRlZ29yaXplZCBwcm9qZWN0cyBhcmUgcHV0IGluIHRoZQorCWAkcHJvamVjdF9saXN0X2RlZmF1bHRfY2F0ZWdvcnlgIGNhdGVnb3J5LiAgWW91IGNhbiB1c2UgdGhlCisJYGdpdHdlYi5jYXRlZ29yeWAgcmVwbyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBidXQgdGhlIGZpbGUgdGFrZXMKKwlwcmVjZWRlbmNlLgorKworVGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGAkcHJvamVjdHNfbGlzdF9ncm91cF9jYXRlZ29yaWVzYCBhbmQKK2AkcHJvamVjdF9saXN0X2RlZmF1bHRfY2F0ZWdvcnlgIGFyZSBkZXNjcmliZWQgaW4gbGlua2dpdDpnaXR3ZWIuY29uZls1XQorCitjbG9uZXVybCAob3IgbXVsdGlwbGUtdmFsdWVkIGBnaXR3ZWIudXJsYCk6OgorCUZpbGUgd2l0aCByZXBvc2l0b3J5IFVSTCAodXNlZCBmb3IgY2xvbmUgYW5kIGZldGNoKSwgb25lIHBlciBsaW5lLgorCURpc3BsYXllZCBpbiB0aGUgcHJvamVjdCBzdW1tYXJ5IHBhZ2UuIFlvdSBjYW4gdXNlIG11bHRpcGxlLXZhbHVlZAorCWBnaXR3ZWIudXJsYCByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yIHRoYXQsIGJ1dCB0aGUgZmlsZQorCXRha2VzIHByZWNlZGVuY2UuCisrCitUaGlzIGlzIHBlci1yZXBvc2l0b3J5IGVuaGFuY2VtZW50IC8gdmVyc2lvbiBvZiBnbG9iYWwgcHJlZml4LWJhc2VkCitgQGdpdF9iYXNlX3VybF9saXN0YCBnaXR3ZWIgY29uZmlndXJhdGlvbiB2YXJpYWJsZSAoc2VlCitsaW5rZ2l0OmdpdHdlYi5jb25mWzVdKS4KKworZ2l0d2ViLm93bmVyOjoKKwlZb3UgY2FuIHVzZSB0aGUgYGdpdHdlYi5vd25lcmAgcmVwb3NpdG9yeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRvIHNldAorCXJlcG9zaXRvcnkncyBvd25lci4gIEl0IGlzIGRpc3BsYXllZCBpbiB0aGUgcHJvamVjdCBsaXN0IGFuZCBzdW1tYXJ5CisJcGFnZS4KKysKK0lmIGl0J3Mgbm90IHNldCwgZmlsZXN5c3RlbSBkaXJlY3RvcnkncyBvd25lciBpcyB1c2VkICh2aWEgR0VDT1MgZmllbGQsCitpLmUuIHJlYWwgbmFtZSBmaWVsZCBmcm9tICpnZXRwd3VpZCooMykpIGlmIGAkcHJvamVjdHNfbGlzdGAgaXMgdW5zZXQKKyhnaXR3ZWIgc2NhbnMgYCRwcm9qZWN0cm9vdGAgZm9yIHJlcG9zaXRvcmllcyk7IGlmIGAkcHJvamVjdHNfbGlzdGAKK3BvaW50cyB0byBmaWxlIHdpdGggbGlzdCBvZiByZXBvc2l0b3JpZXMsIHRoZW4gcHJvamVjdCBvd25lciBkZWZhdWx0cyB0bwordmFsdWUgZnJvbSB0aGlzIGZpbGUgZm9yIGdpdmVuIHJlcG9zaXRvcnkuCisKK3ZhcmlvdXMgYGdpdHdlYi4qYCBjb25maWcgdmFyaWFibGVzIChpbiBjb25maWcpOjoKKwlSZWFkIGRlc2NyaXB0aW9uIG9mIGAlZmVhdHVyZWAgaGFzaCBmb3IgZGV0YWlsZWQgbGlzdCwgYW5kIGRlc2NyaXB0aW9ucy4KKwlTZWUgYWxzbyAiQ29uZmlndXJpbmcgZ2l0d2ViIGZlYXR1cmVzIiBzZWN0aW9uIGluIGxpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0KKworCitBQ1RJT05TLCBBTkQgVVJMUworLS0tLS0tLS0tLS0tLS0tLS0KK0dpdHdlYiBjYW4gdXNlIHBhdGhfaW5mbyAoY29tcG9uZW50KSBiYXNlZCBVUkxzLCBvciBpdCBjYW4gcGFzcyBhbGwgbmVjZXNzYXJ5CitpbmZvcm1hdGlvbiB2aWEgcXVlcnkgcGFyYW1ldGVycy4gIFRoZSB0eXBpY2FsIGdpdHdlYiBVUkxzIGFyZSBicm9rZW4gZG93biBpbiB0bworZml2ZSBjb21wb25lbnRzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLi4uL2dpdHdlYi5jZ2kvPHJlcG8+LzxhY3Rpb24+LzxyZXZpc2lvbj46LzxwYXRoPj88YXJndW1lbnRzPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcmVwbzo6CisJVGhlIHJlcG9zaXRvcnkgdGhlIGFjdGlvbiB3aWxsIGJlIHBlcmZvcm1lZCBvbi4KKysKK0FsbCBhY3Rpb25zIGV4Y2VwdCBmb3IgdGhvc2UgdGhhdCBsaXN0IGFsbCBhdmFpbGFibGUgcHJvamVjdHMsCitpbiB3aGF0ZXZlciBmb3JtLCByZXF1aXJlIHRoaXMgcGFyYW1ldGVyLgorCithY3Rpb246OgorCVRoZSBhY3Rpb24gdGhhdCB3aWxsIGJlIHJ1bi4gIERlZmF1bHRzIHRvICdwcm9qZWN0c19saXN0JyBpZiByZXBvCisJaXMgbm90IHNldCwgYW5kIHRvICdzdW1tYXJ5JyBvdGhlcndpc2UuCisKK3JldmlzaW9uOjoKKwlSZXZpc2lvbiBzaG93bi4gIERlZmF1bHRzIHRvIEhFQUQuCisKK3BhdGg6OgorCVRoZSBwYXRoIHdpdGhpbiB0aGUgPHJlcG9zaXRvcnk+IHRoYXQgdGhlIGFjdGlvbiBpcyBwZXJmb3JtZWQgb24sCisJZm9yIHRob3NlIGFjdGlvbnMgdGhhdCByZXF1aXJlIGl0LgorCithcmd1bWVudHM6OgorCUFueSBhcmd1bWVudHMgdGhhdCBjb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGFjdGlvbi4KKworU29tZSBhY3Rpb25zIHJlcXVpcmUgb3IgYWxsb3cgdG8gc3BlY2lmeSB0d28gcmV2aXNpb25zLCBhbmQgc29tZXRpbWVzIGV2ZW4gdHdvCitwYXRobmFtZXMuICBJbiBtb3N0IGdlbmVyYWwgZm9ybSBzdWNoIHBhdGhfaW5mbyAoY29tcG9uZW50KSBiYXNlZCBnaXR3ZWIgVVJMCitsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuLi4vZ2l0d2ViLmNnaS88cmVwbz4vPGFjdGlvbj4vPHJldmlzaW9uX2Zyb20+Oi88cGF0aF9mcm9tPi4uPHJldmlzaW9uX3RvPjovPHBhdGhfdG8+Pzxhcmd1bWVudHM+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0VhY2ggYWN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgc3Vicm91dGluZSwgYW5kIG11c3QgYmUgcHJlc2VudCBpbiAlYWN0aW9ucworaGFzaC4gIFNvbWUgYWN0aW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCwgYW5kIG11c3QgYmUgdHVybmVkIG9uIHZpYSBmZWF0dXJlCittZWNoYW5pc20uICBGb3IgZXhhbXBsZSB0byBlbmFibGUgJ2JsYW1lJyB2aWV3IGFkZCB0aGUgZm9sbG93aW5nIHRvIGdpdHdlYgorY29uZmlndXJhdGlvbiBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJGZlYXR1cmV7J2JsYW1lJ317J2RlZmF1bHQnfSA9IFsxXTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQWN0aW9uczoKK35+fn5+fn5+CitUaGUgc3RhbmRhcmQgYWN0aW9ucyBhcmU6CisKK3Byb2plY3RfbGlzdDo6CisJTGlzdHMgdGhlIGF2YWlsYWJsZSBHaXQgcmVwb3NpdG9yaWVzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb21tYW5kIGlmIG5vCisJcmVwb3NpdG9yeSBpcyBzcGVjaWZpZWQgaW4gdGhlIFVSTC4KKworc3VtbWFyeTo6CisJRGlzcGxheXMgc3VtbWFyeSBhYm91dCBnaXZlbiByZXBvc2l0b3J5LiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb21tYW5kIGlmCisJbm8gYWN0aW9uIGlzIHNwZWNpZmllZCBpbiBVUkwsIGFuZCBvbmx5IHJlcG9zaXRvcnkgaXMgc3BlY2lmaWVkLgorCitoZWFkczo6CityZW1vdGVzOjoKKwlMaXN0cyBhbGwgbG9jYWwgb3IgYWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBpbiBnaXZlbiByZXBvc2l0b3J5LgorKworVGhlIGxhdHRlciBpcyBub3QgYXZhaWxhYmxlIGJ5IGRlZmF1bHQsIHVubGVzcyBjb25maWd1cmVkLgorCit0YWdzOjoKKwlMaXN0IGFsbCB0YWdzIChsaWdodHdlaWdodCBhbmQgYW5ub3RhdGVkKSBpbiBnaXZlbiByZXBvc2l0b3J5LgorCitibG9iOjoKK3RyZWU6OgorCVNob3dzIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgaW4gYSBnaXZlbiByZXBvc2l0b3J5IHBhdGgsIGF0IGdpdmVuCisJcmV2aXNpb24uICBUaGlzIGlzIGRlZmF1bHQgY29tbWFuZCBpZiBubyBhY3Rpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBVUkwsCisJYW5kIHBhdGggaXMgZ2l2ZW4uCisKK2Jsb2JfcGxhaW46OgorCVJldHVybnMgdGhlIHJhdyBkYXRhIGZvciB0aGUgZmlsZSBpbiBnaXZlbiByZXBvc2l0b3J5LCBhdCBnaXZlbiBwYXRoIGFuZAorCXJldmlzaW9uLiAgTGlua3MgdG8gdGhpcyBhY3Rpb24gYXJlIG1hcmtlZCAncmF3Jy4KKworYmxvYmRpZmY6OgorCVNob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIHJldmlzaW9ucyBvZiB0aGUgc2FtZSBmaWxlLgorCitibGFtZTo6CitibGFtZV9pbmNyZW1lbnRhbDo6CisJU2hvd3MgdGhlIGJsYW1lIChhbHNvIGNhbGxlZCBhbm5vdGF0aW9uKSBpbmZvcm1hdGlvbiBmb3IgYSBmaWxlLiBPbiBhCisJcGVyIGxpbmUgYmFzaXMgaXQgc2hvd3MgdGhlIHJldmlzaW9uIGluIHdoaWNoIHRoYXQgbGluZSB3YXMgbGFzdCBjaGFuZ2VkCisJYW5kIHRoZSB1c2VyIHRoYXQgY29tbWl0dGVkIHRoZSBjaGFuZ2UuICBUaGUgaW5jcmVtZW50YWwgdmVyc2lvbiAod2hpY2gKKwlpZiBjb25maWd1cmVkIGlzIHVzZWQgYXV0b21hdGljYWxseSB3aGVuIEphdmFTY3JpcHQgaXMgZW5hYmxlZCkgdXNlcworCUFqYXggdG8gaW5jcmVtZW50YWxseSBhZGQgYmxhbWUgaW5mbyB0byB0aGUgY29udGVudHMgb2YgZ2l2ZW4gZmlsZS4KKysKK1RoaXMgYWN0aW9uIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCisKK2NvbW1pdDo6Citjb21taXRkaWZmOjoKKwlTaG93cyBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIGNvbW1pdCBpbiBhIHJlcG9zaXRvcnkuICBUaGUgJ2NvbW1pdCcKKwl2aWV3IHNob3dzIGluZm9ybWF0aW9uIGFib3V0IGNvbW1pdCBpbiBtb3JlIGRldGFpbCwgdGhlICdjb21taXRkaWZmJworCWFjdGlvbiBzaG93cyBjaGFuZ2VzZXQgZm9yIGdpdmVuIGNvbW1pdC4KKworcGF0Y2g6OgorCVJldHVybnMgdGhlIGNvbW1pdCBpbiBwbGFpbiB0ZXh0IG1haWwgZm9ybWF0LCBzdWl0YWJsZSBmb3IgYXBwbHlpbmcgd2l0aAorCWxpbmtnaXQ6Z2l0LWFtWzFdLgorCit0YWc6OgorCURpc3BsYXkgc3BlY2lmaWMgYW5ub3RhdGVkIHRhZyAodGFnIG9iamVjdCkuCisKK2xvZzo6CitzaG9ydGxvZzo6CisJU2hvd3MgbG9nIGluZm9ybWF0aW9uIChjb21taXQgbWVzc2FnZSBvciBqdXN0IGNvbW1pdCBzdWJqZWN0KSBmb3IgYQorCWdpdmVuIGJyYW5jaCAoc3RhcnRpbmcgZnJvbSBnaXZlbiByZXZpc2lvbikuCisrCitUaGUgJ3Nob3J0bG9nJyB2aWV3IGlzIG1vcmUgY29tcGFjdDsgaXQgc2hvd3Mgb25lIGNvbW1pdCBwZXIgbGluZS4KKworaGlzdG9yeTo6CisJU2hvd3MgaGlzdG9yeSBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgaW4gYSBnaXZlbiByZXBvc2l0b3J5IHBhdGgsCisJc3RhcnRpbmcgZnJvbSBnaXZlbiByZXZpc2lvbiAoZGVmYXVsdHMgdG8gSEVBRCwgaS5lLiBkZWZhdWx0IGJyYW5jaCkuCisrCitUaGlzIHZpZXcgaXMgc2ltaWxhciB0byAnc2hvcnRsb2cnIHZpZXcuCisKK3Jzczo6CithdG9tOjoKKwlHZW5lcmF0ZXMgYW4gUlNTIChvciBBdG9tKSBmZWVkIG9mIGNoYW5nZXMgdG8gcmVwb3NpdG9yeS4KKworCitXRUJTRVJWRVIgQ09ORklHVVJBVElPTgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgc2VjdGlvbiBleHBsYWlucyBob3cgdG8gY29uZmlndXJlIHNvbWUgY29tbW9uIHdlYnNlcnZlcnMgdG8gcnVuIGdpdHdlYi4gSW4KK2FsbCBjYXNlcywgYC9wYXRoL3RvL2dpdHdlYmAgaW4gdGhlIGV4YW1wbGVzIGlzIHRoZSBkaXJlY3RvcnkgeW91IHJhbiBpbnN0YWxsZWQKK2dpdHdlYiBpbiwgYW5kIGNvbnRhaW5zIGBnaXR3ZWJfY29uZmlnLnBlcmxgLgorCitJZiB5b3UndmUgY29uZmlndXJlZCBhIHdlYiBzZXJ2ZXIgdGhhdCBpc24ndCBsaXN0ZWQgaGVyZSBmb3IgZ2l0d2ViLCBwbGVhc2Ugc2VuZAoraW4gdGhlIGluc3RydWN0aW9ucyBzbyB0aGV5IGNhbiBiZSBpbmNsdWRlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgorCitBcGFjaGUgYXMgQ0dJCit+fn5+fn5+fn5+fn5+CitBcGFjaGUgbXVzdCBiZSBjb25maWd1cmVkIHRvIHN1cHBvcnQgQ0dJIHNjcmlwdHMgaW4gdGhlIGRpcmVjdG9yeSBpbgord2hpY2ggZ2l0d2ViIGlzIGluc3RhbGxlZC4gIExldCdzIGFzc3VtZSB0aGF0IGl0IGlzICcvdmFyL3d3dy9jZ2ktYmluJworZGlyZWN0b3J5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU2NyaXB0QWxpYXMgL2NnaS1iaW4vICIvdmFyL3d3dy9jZ2ktYmluLyIKKworPERpcmVjdG9yeSAiL3Zhci93d3cvY2dpLWJpbiI+CisgICAgT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bWxpbmtzIEV4ZWNDR0kKKyAgICBBbGxvd092ZXJyaWRlIE5vbmUKKyAgICBPcmRlciBhbGxvdyxkZW55CisgICAgQWxsb3cgZnJvbSBhbGwKKzwvRGlyZWN0b3J5PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGF0IGNvbmZpZ3VyYXRpb24gdGhlIGZ1bGwgcGF0aCB0byBicm93c2UgcmVwb3NpdG9yaWVzIHdvdWxkIGJlOgorCisgIGh0dHA6Ly9zZXJ2ZXIvY2dpLWJpbi9naXR3ZWIuY2dpCisKK0FwYWNoZSB3aXRoIG1vZF9wZXJsLCB2aWEgTW9kUGVybDo6UmVnaXN0cnkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1lvdSBjYW4gdXNlIG1vZF9wZXJsIHdpdGggZ2l0d2ViLiAgWW91IG11c3QgaW5zdGFsbCBBcGFjaGU6OlJlZ2lzdHJ5CisoZm9yIG1vZF9wZXJsIDEueCkgb3IgTW9kUGVybDo6UmVnaXN0cnkgKGZvciBtb2RfcGVybCAyLngpIHRvIGVuYWJsZQordGhpcyBzdXBwb3J0LgorCitBc3N1bWluZyB0aGF0IGdpdHdlYiBpcyBpbnN0YWxsZWQgdG8gJy92YXIvd3d3L3BlcmwnLCB0aGUgZm9sbG93aW5nCitBcGFjaGUgY29uZmlndXJhdGlvbiAoZm9yIG1vZF9wZXJsIDIueCkgaXMgc3VpdGFibGUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBbGlhcyAvcGVybCAiL3Zhci93d3cvcGVybCIKKworPERpcmVjdG9yeSAiL3Zhci93d3cvcGVybCI+CisgICAgU2V0SGFuZGxlciBwZXJsLXNjcmlwdAorICAgIFBlcmxSZXNwb25zZUhhbmRsZXIgTW9kUGVybDo6UmVnaXN0cnkKKyAgICBQZXJsT3B0aW9ucyArUGFyc2VIZWFkZXJzCisgICAgT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bWxpbmtzICtFeGVjQ0dJCisgICAgQWxsb3dPdmVycmlkZSBOb25lCisgICAgT3JkZXIgYWxsb3csZGVueQorICAgIEFsbG93IGZyb20gYWxsCis8L0RpcmVjdG9yeT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dpdGggdGhhdCBjb25maWd1cmF0aW9uIHRoZSBmdWxsIHBhdGggdG8gYnJvd3NlIHJlcG9zaXRvcmllcyB3b3VsZCBiZToKKworICBodHRwOi8vc2VydmVyL3BlcmwvZ2l0d2ViLmNnaQorCitBcGFjaGUgd2l0aCBGYXN0Q0dJCit+fn5+fn5+fn5+fn5+fn5+fn5+CitHaXR3ZWIgd29ya3Mgd2l0aCBBcGFjaGUgYW5kIEZhc3RDR0kuICBGaXJzdCB5b3UgbmVlZCB0byByZW5hbWUsIGNvcHkKK29yIHN5bWxpbmsgZ2l0d2ViLmNnaSB0byBnaXR3ZWIuZmNnaS4gIExldCdzIGFzc3VtZSB0aGF0IGdpdHdlYiBpcworaW5zdGFsbGVkIGluICcvdXNyL3NoYXJlL2dpdHdlYicgZGlyZWN0b3J5LiAgVGhlIGZvbGxvd2luZyBBcGFjaGUKK2NvbmZpZ3VyYXRpb24gaXMgc3VpdGFibGUgKFVOVEVTVEVEISkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0Zhc3RDZ2lTZXJ2ZXIgL3Vzci9zaGFyZS9naXR3ZWIvZ2l0d2ViLmNnaQorU2NyaXB0QWxpYXMgL2dpdHdlYiAvdXNyL3NoYXJlL2dpdHdlYi9naXR3ZWIuY2dpCisKK0FsaWFzIC9naXR3ZWIvc3RhdGljIC91c3Ivc2hhcmUvZ2l0d2ViL3N0YXRpYworPERpcmVjdG9yeSAvdXNyL3NoYXJlL2dpdHdlYi9zdGF0aWM+CisgICAgU2V0SGFuZGxlciBkZWZhdWx0LWhhbmRsZXIKKzwvRGlyZWN0b3J5PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGF0IGNvbmZpZ3VyYXRpb24gdGhlIGZ1bGwgcGF0aCB0byBicm93c2UgcmVwb3NpdG9yaWVzIHdvdWxkIGJlOgorCisgIGh0dHA6Ly9zZXJ2ZXIvZ2l0d2ViCisKKworQURWQU5DRUQgV0VCIFNFUlZFUiBTRVRVUAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQWxsIG9mIHRob3NlIGV4YW1wbGVzIHVzZSByZXF1ZXN0IHJld3JpdGluZywgYW5kIG5lZWQgYG1vZF9yZXdyaXRlYAorKG9yIGVxdWl2YWxlbnQ7IGV4YW1wbGVzIGJlbG93IGFyZSB3cml0dGVuIGZvciBBcGFjaGUpLgorCitTaW5nbGUgVVJMIGZvciBnaXR3ZWIgYW5kIGZvciBmZXRjaGluZworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK0lmIHlvdSB3YW50IHRvIGhhdmUgb25lIFVSTCBmb3IgYm90aCBnaXR3ZWIgYW5kIHlvdXIgYGh0dHA6Ly9gCityZXBvc2l0b3JpZXMsIHlvdSBjYW4gY29uZmlndXJlIEFwYWNoZSBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8VmlydHVhbEhvc3QgKjo4MD4KKyAgICBTZXJ2ZXJOYW1lICAgIGdpdC5leGFtcGxlLm9yZworICAgIERvY3VtZW50Um9vdCAgL3B1Yi9naXQKKyAgICBTZXRFbnYgICAgICAgIEdJVFdFQl9DT05GSUcgICAvZXRjL2dpdHdlYi5jb25mCisKKyAgICAjIHR1cm5pbmcgb24gbW9kIHJld3JpdGUKKyAgICBSZXdyaXRlRW5naW5lIG9uCisKKyAgICAjIG1ha2UgdGhlIGZyb250IHBhZ2UgYW4gaW50ZXJuYWwgcmV3cml0ZSB0byB0aGUgZ2l0d2ViIHNjcmlwdAorICAgIFJld3JpdGVSdWxlIF4vJCAgL2NnaS1iaW4vZ2l0d2ViLmNnaQorCisgICAgIyBtYWtlIGFjY2VzcyBmb3IgImR1bWIgY2xpZW50cyIgd29yaworICAgIFJld3JpdGVSdWxlIF4vKC4qXC5naXQvKD8hLz8oSEVBRHxpbmZvfG9iamVjdHN8cmVmcykpLiopPyQgXAorCQkvY2dpLWJpbi9naXR3ZWIuY2dpJXtSRVFVRVNUX1VSSX0gIFtMLFBUXQorPC9WaXJ0dWFsSG9zdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBhYm92ZSBjb25maWd1cmF0aW9uIGV4cGVjdHMgeW91ciBwdWJsaWMgcmVwb3NpdG9yaWVzIHRvIGxpdmUgdW5kZXIKKycvcHViL2dpdCcgYW5kIHdpbGwgc2VydmUgdGhlbSBhcyBgaHR0cDovL2dpdC5kb21haW4ub3JnL2Rpci11bmRlci1wdWItZ2l0YCwKK2JvdGggYXMgY2xvbmFibGUgR2l0IFVSTCBhbmQgYXMgYnJvd3NlYWJsZSBnaXR3ZWIgaW50ZXJmYWNlLiAgSWYgeW91IHRoZW4KK3N0YXJ0IHlvdXIgbGlua2dpdDpnaXQtZGFlbW9uWzFdIHdpdGggYC0tYmFzZS1wYXRoPS9wdWIvZ2l0IC0tZXhwb3J0LWFsbGAKK3RoZW4geW91IGNhbiBldmVuIHVzZSB0aGUgYGdpdDovL2AgVVJMIHdpdGggZXhhY3RseSB0aGUgc2FtZSBwYXRoLgorCitTZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgR0lUV0VCX0NPTkZJR2Agd2lsbCB0ZWxsIGdpdHdlYiB0byB1c2UgdGhlCituYW1lZCBmaWxlIChpLmUuIGluIHRoaXMgZXhhbXBsZSAnL2V0Yy9naXR3ZWIuY29uZicpIGFzIGEgY29uZmlndXJhdGlvbiBmb3IKK2dpdHdlYi4gIFlvdSBkb24ndCByZWFsbHkgbmVlZCBpdCBpbiBhYm92ZSBleGFtcGxlOyBpdCBpcyByZXF1aXJlZCBvbmx5IGlmCit5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBpbiBkaWZmZXJlbnQgcGxhY2UgdGhhbiBidWlsdC1pbiAoZHVyaW5nCitjb21waWxpbmcgZ2l0d2ViKSAnZ2l0d2ViX2NvbmZpZy5wZXJsJyBvciAnL2V0Yy9naXR3ZWIuY29uZicuICBTZWUKK2xpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0gZm9yIGRldGFpbHMsIGVzcGVjaWFsbHkgaW5mb3JtYXRpb24gYWJvdXQgcHJlY2VkZW5jZQorcnVsZXMuCisKK0lmIHlvdSB1c2UgdGhlIHJld3JpdGUgcnVsZXMgZnJvbSB0aGUgZXhhbXBsZSB5b3UgKm1pZ2h0KiBhbHNvIG5lZWQKK3NvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgaW4geW91ciBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlCisoJy9ldGMvZ2l0d2ViLmNvbmYnIGZvbGxvd2luZyBleGFtcGxlKToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0BzdHlsZXNoZWV0cyA9ICgiL3NvbWUvYWJzb2x1dGUvcGF0aC9naXR3ZWIuY3NzIik7CiskbXlfdXJpICAgID0gIi8iOworJGhvbWVfbGluayA9ICIvIjsKKyRwZXJfcmVxdWVzdF9jb25maWcgPSAxOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTm93YWRheXMgdGhvdWdoIGdpdHdlYiBzaG91bGQgY3JlYXRlIEhUTUwgYmFzZSB0YWcgd2hlbiBuZWVkZWQgKHRvIHNldCBiYXNlCitVUkkgZm9yIHJlbGF0aXZlIGxpbmtzKSwgc28gaXQgc2hvdWxkIHdvcmsgYXV0b21hdGljYWxseS4KKworCitXZWJzZXJ2ZXIgY29uZmlndXJhdGlvbiB3aXRoIG11bHRpcGxlIHByb2plY3RzJyByb290Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitJZiB5b3Ugd2FudCB0byB1c2UgZ2l0d2ViIHdpdGggc2V2ZXJhbCBwcm9qZWN0IHJvb3RzIHlvdSBjYW4gZWRpdCB5b3VyCitBcGFjaGUgdmlydHVhbCBob3N0IGFuZCBnaXR3ZWIgY29uZmlndXJhdGlvbiBmaWxlcyBpbiB0aGUgZm9sbG93aW5nIHdheS4KKworVGhlIHZpcnR1YWwgaG9zdCBjb25maWd1cmF0aW9uIChpbiBBcGFjaGUgY29uZmlndXJhdGlvbiBmaWxlKSBzaG91bGQgbG9vaworbGlrZSB0aGlzOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxWaXJ0dWFsSG9zdCAqOjgwPgorICAgIFNlcnZlck5hbWUgICAgZ2l0LmV4YW1wbGUub3JnCisgICAgRG9jdW1lbnRSb290ICAvcHViL2dpdAorICAgIFNldEVudiAgICAgICAgR0lUV0VCX0NPTkZJRyAgL2V0Yy9naXR3ZWIuY29uZgorCisgICAgIyB0dXJuaW5nIG9uIG1vZCByZXdyaXRlCisgICAgUmV3cml0ZUVuZ2luZSBvbgorCisgICAgIyBtYWtlIHRoZSBmcm9udCBwYWdlIGFuIGludGVybmFsIHJld3JpdGUgdG8gdGhlIGdpdHdlYiBzY3JpcHQKKyAgICBSZXdyaXRlUnVsZSBeLyQgIC9jZ2ktYmluL2dpdHdlYi5jZ2kgIFtRU0EsTCxQVF0KKworICAgICMgbG9vayBmb3IgYSBwdWJsaWNfZ2l0IGZvbGRlciBpbiB1bml4IHVzZXJzJyBob21lCisgICAgIyBodHRwOi8vZ2l0LmV4YW1wbGUub3JnL348dXNlcj4vCisgICAgUmV3cml0ZVJ1bGUgXi9cfihbXlwvXSspKC98L2dpdHdlYi5jZ2kpPyQJL2NnaS1iaW4vZ2l0d2ViLmNnaSBcCisJCVtRU0EsRT1HSVRXRUJfUFJPSkVDVFJPT1Q6L2hvbWUvJDEvcHVibGljX2dpdC8sTCxQVF0KKworICAgICMgaHR0cDovL2dpdC5leGFtcGxlLm9yZy8rPHVzZXI+LworICAgICNSZXdyaXRlUnVsZSBeL1wrKFteXC9dKykoL3wvZ2l0d2ViLmNnaSk/JAkvY2dpLWJpbi9naXR3ZWIuY2dpIFwKKwkJIFtRU0EsRT1HSVRXRUJfUFJPSkVDVFJPT1Q6L2hvbWUvJDEvcHVibGljX2dpdC8sTCxQVF0KKworICAgICMgaHR0cDovL2dpdC5leGFtcGxlLm9yZy91c2VyLzx1c2VyPi8KKyAgICAjUmV3cml0ZVJ1bGUgXi91c2VyLyhbXlwvXSspLyhnaXR3ZWIuY2dpKT8kCS9jZ2ktYmluL2dpdHdlYi5jZ2kgXAorCQkgW1FTQSxFPUdJVFdFQl9QUk9KRUNUUk9PVDovaG9tZS8kMS9wdWJsaWNfZ2l0LyxMLFBUXQorCisgICAgIyBkZWZpbmVkIGxpc3Qgb2YgcHJvamVjdCByb290cworICAgIFJld3JpdGVSdWxlIF4vc2NtKC98L2dpdHdlYi5jZ2kpPyQgL2NnaS1iaW4vZ2l0d2ViLmNnaSBcCisJCVtRU0EsRT1HSVRXRUJfUFJPSkVDVFJPT1Q6L3B1Yi9zY20vLEwsUFRdCisgICAgUmV3cml0ZVJ1bGUgXi92YXIoL3wvZ2l0d2ViLmNnaSk/JCAvY2dpLWJpbi9naXR3ZWIuY2dpIFwKKwkJW1FTQSxFPUdJVFdFQl9QUk9KRUNUUk9PVDovdmFyL2dpdC8sTCxQVF0KKworICAgICMgbWFrZSBhY2Nlc3MgZm9yICJkdW1iIGNsaWVudHMiIHdvcmsKKyAgICBSZXdyaXRlUnVsZSBeLyguKlwuZ2l0Lyg/IS8/KEhFQUR8aW5mb3xvYmplY3RzfHJlZnMpKS4qKT8kIFwKKwkJL2NnaS1iaW4vZ2l0d2ViLmNnaSV7UkVRVUVTVF9VUkl9ICBbTCxQVF0KKzwvVmlydHVhbEhvc3Q+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIZXJlIGFjdHVhbCBwcm9qZWN0IHJvb3QgaXMgcGFzc2VkIHRvIGdpdHdlYiB2aWEgYEdJVFdFQl9QUk9KRUNUX1JPT1RgCitlbnZpcm9ubWVudCB2YXJpYWJsZSBmcm9tIGEgd2ViIHNlcnZlciwgc28geW91IG5lZWQgdG8gcHV0IHRoZSBmb2xsb3dpbmcKK2xpbmUgaW4gZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZmlsZSAoJy9ldGMvZ2l0d2ViLmNvbmYnIGluIGFib3ZlIGV4YW1wbGUpOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyRwcm9qZWN0cm9vdCA9ICRFTlZ7J0dJVFdFQl9QUk9KRUNUUk9PVCd9IHx8ICIvcHViL2dpdCI7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKk5vdGUqIHRoYXQgdGhpcyByZXF1aXJlcyB0byBiZSBzZXQgZm9yIGVhY2ggcmVxdWVzdCwgc28gZWl0aGVyCitgJHBlcl9yZXF1ZXN0X2NvbmZpZ2AgbXVzdCBiZSBmYWxzZSwgb3IgdGhlIGFib3ZlIG11c3QgYmUgcHV0IGluIGNvZGUKK3JlZmVyZW5jZWQgYnkgYCRwZXJfcmVxdWVzdF9jb25maWdgOworCitUaGVzZSBjb25maWd1cmF0aW9ucyBlbmFibGUgdHdvIHRoaW5ncy4gRmlyc3QsIGVhY2ggdW5peCB1c2VyIChgPHVzZXI+YCkgb2YKK3RoZSBzZXJ2ZXIgd2lsbCBiZSBhYmxlIHRvIGJyb3dzZSB0aHJvdWdoIGdpdHdlYiBHaXQgcmVwb3NpdG9yaWVzIGZvdW5kIGluCisnfi9wdWJsaWNfZ2l0Lycgd2l0aCB0aGUgZm9sbG93aW5nIHVybDoKKworICBodHRwOi8vZ2l0LmV4YW1wbGUub3JnL348dXNlcj4vCisKK0lmIHlvdSBkbyBub3Qgd2FudCB0aGlzIGZlYXR1cmUgb24geW91ciBzZXJ2ZXIganVzdCByZW1vdmUgdGhlIHNlY29uZAorcmV3cml0ZSBydWxlLgorCitJZiB5b3UgYWxyZWFkeSB1c2UgYG1vZF91c2VyZGlyYCBpbiB5b3VyIHZpcnR1YWwgaG9zdCBvciB5b3UgZG9uJ3Qgd2FudCB0bwordXNlIHRoZSBcJ34nIGFzIGZpcnN0IGNoYXJhY3RlciwganVzdCBjb21tZW50IG9yIHJlbW92ZSB0aGUgc2Vjb25kIHJld3JpdGUKK3J1bGUsIGFuZCB1bmNvbW1lbnQgb25lIG9mIHRoZSBmb2xsb3dpbmcgYWNjb3JkaW5nIHRvIHdoYXQgeW91IHdhbnQuCisKK1NlY29uZCwgcmVwb3NpdG9yaWVzIGZvdW5kIGluICcvcHViL3NjbS8nIGFuZCAnL3Zhci9naXQvJyB3aWxsIGJlIGFjY2Vzc2libGUKK3Rocm91Z2ggYGh0dHA6Ly9naXQuZXhhbXBsZS5vcmcvc2NtL2AgYW5kIGBodHRwOi8vZ2l0LmV4YW1wbGUub3JnL3Zhci9gLgorWW91IGNhbiBhZGQgYXMgbWFueSBwcm9qZWN0IHJvb3RzIGFzIHlvdSB3YW50IGJ5IGFkZGluZyByZXdyaXRlIHJ1bGVzIGxpa2UKK3RoZSB0aGlyZCBhbmQgdGhlIGZvdXJ0aC4KKworCitQQVRIX0lORk8gdXNhZ2UKK35+fn5+fn5+fn5+fn5+fgorSWYgeW91IGVuYWJsZSBQQVRIX0lORk8gdXNhZ2UgaW4gZ2l0d2ViIGJ5IHB1dHRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyRmZWF0dXJleydwYXRoaW5mbyd9eydkZWZhdWx0J30gPSBbMV07CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbiB5b3VyIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHNldCB1cCB5b3VyIHNlcnZlciBzbwordGhhdCBpdCBjb25zdW1lcyBhbmQgcHJvZHVjZXMgVVJMcyBpbiB0aGUgZm9ybQorCisgIGh0dHA6Ly9naXQuZXhhbXBsZS5jb20vcHJvamVjdC5naXQvc2hvcnRsb2cvc29tZXRhZworCitpLmUuIHdpdGhvdXQgJ2dpdHdlYi5jZ2knIHBhcnQsIGJ5IHVzaW5nIGEgY29uZmlndXJhdGlvbiBzdWNoIGFzIHRoZQorZm9sbG93aW5nLiAgVGhpcyBjb25maWd1cmF0aW9uIGFzc3VtZXMgdGhhdCAnL3Zhci93d3cvZ2l0d2ViJyBpcyB0aGUKK0RvY3VtZW50Um9vdCBvZiB5b3VyIHdlYnNlcnZlciwgY29udGFpbnMgdGhlIGdpdHdlYi5jZ2kgc2NyaXB0IGFuZAorY29tcGxlbWVudGFyeSBzdGF0aWMgZmlsZXMgKHN0eWxlc2hlZXQsIGZhdmljb24sIEphdmFTY3JpcHQpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis8VmlydHVhbEhvc3QgKjo4MD4KKwlTZXJ2ZXJBbGlhcyBnaXQuZXhhbXBsZS5jb20KKworCURvY3VtZW50Um9vdCAvdmFyL3d3dy9naXR3ZWIKKworCTxEaXJlY3RvcnkgL3Zhci93d3cvZ2l0d2ViPgorCQlPcHRpb25zIEV4ZWNDR0kKKwkJQWRkSGFuZGxlciBjZ2ktc2NyaXB0IGNnaQorCisJCURpcmVjdG9yeUluZGV4IGdpdHdlYi5jZ2kKKworCQlSZXdyaXRlRW5naW5lIE9uCisJCVJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1mCisJCVJld3JpdGVDb25kICV7UkVRVUVTVF9GSUxFTkFNRX0gIS1kCisJCVJld3JpdGVSdWxlIF4uKiAvZ2l0d2ViLmNnaS8kMCBbTCxQVF0KKwk8L0RpcmVjdG9yeT4KKzwvVmlydHVhbEhvc3Q+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgcmV3cml0ZSBydWxlIGd1YXJhbnRlZXMgdGhhdCBleGlzdGluZyBzdGF0aWMgZmlsZXMgd2lsbCBiZSBwcm9wZXJseQorc2VydmVkLCB3aGVyZWFzIGFueSBvdGhlciBVUkwgd2lsbCBiZSBwYXNzZWQgdG8gZ2l0d2ViIGFzIFBBVEhfSU5GTworcGFyYW1ldGVyLgorCisqTm90aWNlKiB0aGF0IGluIHRoaXMgY2FzZSB5b3UgZG9uJ3QgbmVlZCBzcGVjaWFsIHNldHRpbmdzIGZvcgorYEBzdHlsZXNoZWV0c2AsIGAkbXlfdXJpYCBhbmQgYCRob21lX2xpbmtgLCBidXQgeW91IGxvc2UgImR1bWIgY2xpZW50IgorYWNjZXNzIHRvIHlvdXIgcHJvamVjdCAuZ2l0IGRpcnMgKGRlc2NyaWJlZCBpbiAiU2luZ2xlIFVSTCBmb3IgZ2l0d2ViIGFuZAorZm9yIGZldGNoaW5nIiBzZWN0aW9uKS4gIEEgcG9zc2libGUgd29ya2Fyb3VuZCBmb3IgdGhlIGxhdHRlciBpcyB0aGUKK2ZvbGxvd2luZzogaW4geW91ciBwcm9qZWN0IHJvb3QgZGlyIChlLmcuICcvcHViL2dpdCcpIGhhdmUgdGhlIHByb2plY3RzCituYW1lZCAqd2l0aG91dCogYSAuZ2l0IGV4dGVuc2lvbiAoZS5nLiAnL3B1Yi9naXQvcHJvamVjdCcgaW5zdGVhZCBvZgorJy9wdWIvZ2l0L3Byb2plY3QuZ2l0JykgYW5kIGNvbmZpZ3VyZSBBcGFjaGUgYXMgZm9sbG93czoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxWaXJ0dWFsSG9zdCAqOjgwPgorCVNlcnZlckFsaWFzIGdpdC5leGFtcGxlLmNvbQorCisJRG9jdW1lbnRSb290IC92YXIvd3d3L2dpdHdlYgorCisJQWxpYXNNYXRjaCBeKC8uKj8pKFwuZ2l0KSgvLiopPyQgL3B1Yi9naXQkMSQzCisJPERpcmVjdG9yeSAvdmFyL3d3dy9naXR3ZWI+CisJCU9wdGlvbnMgRXhlY0NHSQorCQlBZGRIYW5kbGVyIGNnaS1zY3JpcHQgY2dpCisKKwkJRGlyZWN0b3J5SW5kZXggZ2l0d2ViLmNnaQorCisJCVJld3JpdGVFbmdpbmUgT24KKwkJUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWYKKwkJUmV3cml0ZUNvbmQgJXtSRVFVRVNUX0ZJTEVOQU1FfSAhLWQKKwkJUmV3cml0ZVJ1bGUgXi4qIC9naXR3ZWIuY2dpLyQwIFtMLFBUXQorCTwvRGlyZWN0b3J5PgorPC9WaXJ0dWFsSG9zdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGFkZGl0aW9uYWwgQWxpYXNNYXRjaCBtYWtlcyBpdCBzbyB0aGF0CisKKyAgaHR0cDovL2dpdC5leGFtcGxlLmNvbS9wcm9qZWN0LmdpdAorCit3aWxsIGdpdmUgcmF3IGFjY2VzcyB0byB0aGUgcHJvamVjdCdzIEdpdCBkaXIgKHNvIHRoYXQgdGhlIHByb2plY3QgY2FuIGJlCitjbG9uZWQpLCB3aGlsZQorCisgIGh0dHA6Ly9naXQuZXhhbXBsZS5jb20vcHJvamVjdAorCit3aWxsIHByb3ZpZGUgaHVtYW4tZnJpZW5kbHkgZ2l0d2ViIGFjY2Vzcy4KKworVGhpcyBzb2x1dGlvbiBpcyBub3QgMTAwJSBidWxsZXRwcm9vZiwgaW4gdGhlIHNlbnNlIHRoYXQgaWYgc29tZSBwcm9qZWN0IGhhcworYSBuYW1lZCByZWYgKGJyYW5jaCwgdGFnKSBzdGFydGluZyB3aXRoICdnaXQvJywgdGhlbiBwYXRocyBzdWNoIGFzCisKKyAgaHR0cDovL2dpdC5leGFtcGxlLmNvbS9wcm9qZWN0L2NvbW1hbmQvYWJyYW5jaC4uZ2l0L2FicmFuY2gKKword2lsbCBmYWlsIHdpdGggYSA0MDQgZXJyb3IuCisKKworQlVHUworLS0tLQorUGxlYXNlIHJlcG9ydCBhbnkgYnVncyBvciBmZWF0dXJlIHJlcXVlc3RzIHRvIGdpdEB2Z2VyLmtlcm5lbC5vcmcsCitwdXR0aW5nICJnaXR3ZWIiIGluIHRoZSBzdWJqZWN0IG9mIGVtYWlsLgorCitTRUUgQUxTTworLS0tLS0tLS0KK2xpbmtnaXQ6Z2l0d2ViLmNvbmZbNV0sIGxpbmtnaXQ6Z2l0LWluc3Rhd2ViWzFdCisKKydnaXR3ZWIvUkVBRE1FJywgJ2dpdHdlYi9JTlNUQUxMJworCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbMV0gc3VpdGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ2l0d29ya2Zsb3dzLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0d29ya2Zsb3dzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTZjNDE0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9naXR3b3JrZmxvd3MudHh0CkBAIC0wLDAgKzEsNDgwIEBACitnaXR3b3JrZmxvd3MoNykKKz09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXR3b3JrZmxvd3MgLSBBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCitnaXQgKgorCisKK0RFU0NSSVBUSU9OCistLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IGF0dGVtcHRzIHRvIHdyaXRlIGRvd24gYW5kIG1vdGl2YXRlIHNvbWUgb2YgdGhlIHdvcmtmbG93CitlbGVtZW50cyB1c2VkIGZvciBgZ2l0LmdpdGAgaXRzZWxmLiAgTWFueSBpZGVhcyBhcHBseSBpbiBnZW5lcmFsLAordGhvdWdoIHRoZSBmdWxsIHdvcmtmbG93IGlzIHJhcmVseSByZXF1aXJlZCBmb3Igc21hbGxlciBwcm9qZWN0cyB3aXRoCitmZXdlciBwZW9wbGUgaW52b2x2ZWQuCisKK1dlIGZvcm11bGF0ZSBhIHNldCBvZiAncnVsZXMnIGZvciBxdWljayByZWZlcmVuY2UsIHdoaWxlIHRoZSBwcm9zZQordHJpZXMgdG8gbW90aXZhdGUgZWFjaCBvZiB0aGVtLiAgRG8gbm90IGFsd2F5cyB0YWtlIHRoZW0gbGl0ZXJhbGx5OworeW91IHNob3VsZCB2YWx1ZSBnb29kIHJlYXNvbnMgZm9yIHlvdXIgYWN0aW9ucyBoaWdoZXIgdGhhbiBtYW5wYWdlcworc3VjaCBhcyB0aGlzIG9uZS4KKworCitTRVBBUkFURSBDSEFOR0VTCistLS0tLS0tLS0tLS0tLS0tCisKK0FzIGEgZ2VuZXJhbCBydWxlLCB5b3Ugc2hvdWxkIHRyeSB0byBzcGxpdCB5b3VyIGNoYW5nZXMgaW50byBzbWFsbAorbG9naWNhbCBzdGVwcywgYW5kIGNvbW1pdCBlYWNoIG9mIHRoZW0uICBUaGV5IHNob3VsZCBiZSBjb25zaXN0ZW50LAord29ya2luZyBpbmRlcGVuZGVudGx5IG9mIGFueSBsYXRlciBjb21taXRzLCBwYXNzIHRoZSB0ZXN0IHN1aXRlLCBldGMuCitUaGlzIG1ha2VzIHRoZSByZXZpZXcgcHJvY2VzcyBtdWNoIGVhc2llciwgYW5kIHRoZSBoaXN0b3J5IG11Y2ggbW9yZQordXNlZnVsIGZvciBsYXRlciBpbnNwZWN0aW9uIGFuZCBhbmFseXNpcywgZm9yIGV4YW1wbGUgd2l0aAorbGlua2dpdDpnaXQtYmxhbWVbMV0gYW5kIGxpbmtnaXQ6Z2l0LWJpc2VjdFsxXS4KKworVG8gYWNoaWV2ZSB0aGlzLCB0cnkgdG8gc3BsaXQgeW91ciB3b3JrIGludG8gc21hbGwgc3RlcHMgZnJvbSB0aGUgdmVyeQorYmVnaW5uaW5nLiBJdCBpcyBhbHdheXMgZWFzaWVyIHRvIHNxdWFzaCBhIGZldyBjb21taXRzIHRvZ2V0aGVyIHRoYW4KK3RvIHNwbGl0IG9uZSBiaWcgY29tbWl0IGludG8gc2V2ZXJhbC4gIERvbid0IGJlIGFmcmFpZCBvZiBtYWtpbmcgdG9vCitzbWFsbCBvciBpbXBlcmZlY3Qgc3RlcHMgYWxvbmcgdGhlIHdheS4gWW91IGNhbiBhbHdheXMgZ28gYmFjayBsYXRlcgorYW5kIGVkaXQgdGhlIGNvbW1pdHMgd2l0aCBgZ2l0IHJlYmFzZSAtLWludGVyYWN0aXZlYCBiZWZvcmUgeW91CitwdWJsaXNoIHRoZW0uICBZb3UgY2FuIHVzZSBgZ2l0IHN0YXNoIHNhdmUgLS1rZWVwLWluZGV4YCB0byBydW4gdGhlCit0ZXN0IHN1aXRlIGluZGVwZW5kZW50IG9mIG90aGVyIHVuY29tbWl0dGVkIGNoYW5nZXM7IHNlZSB0aGUgRVhBTVBMRVMKK3NlY3Rpb24gb2YgbGlua2dpdDpnaXQtc3Rhc2hbMV0uCisKKworTUFOQUdJTkcgQlJBTkNIRVMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSB0d28gbWFpbiB0b29scyB0aGF0IGNhbiBiZSB1c2VkIHRvIGluY2x1ZGUgY2hhbmdlcyBmcm9tIG9uZQorYnJhbmNoIG9uIGFub3RoZXI6IGxpbmtnaXQ6Z2l0LW1lcmdlWzFdIGFuZAorbGlua2dpdDpnaXQtY2hlcnJ5LXBpY2tbMV0uCisKK01lcmdlcyBoYXZlIG1hbnkgYWR2YW50YWdlcywgc28gd2UgdHJ5IHRvIHNvbHZlIGFzIG1hbnkgcHJvYmxlbXMgYXMKK3Bvc3NpYmxlIHdpdGggbWVyZ2VzIGFsb25lLiAgQ2hlcnJ5LXBpY2tpbmcgaXMgc3RpbGwgb2NjYXNpb25hbGx5Cit1c2VmdWw7IHNlZSAiTWVyZ2luZyB1cHdhcmRzIiBiZWxvdyBmb3IgYW4gZXhhbXBsZS4KKworTW9zdCBpbXBvcnRhbnRseSwgbWVyZ2luZyB3b3JrcyBhdCB0aGUgYnJhbmNoIGxldmVsLCB3aGlsZQorY2hlcnJ5LXBpY2tpbmcgd29ya3MgYXQgdGhlIGNvbW1pdCBsZXZlbC4gIFRoaXMgbWVhbnMgdGhhdCBhIG1lcmdlIGNhbgorY2Fycnkgb3ZlciB0aGUgY2hhbmdlcyBmcm9tIDEsIDEwLCBvciAxMDAwIGNvbW1pdHMgd2l0aCBlcXVhbCBlYXNlLAord2hpY2ggaW4gdHVybiBtZWFucyB0aGUgd29ya2Zsb3cgc2NhbGVzIG11Y2ggYmV0dGVyIHRvIGEgbGFyZ2UgbnVtYmVyCitvZiBjb250cmlidXRvcnMgKGFuZCBjb250cmlidXRpb25zKS4gIE1lcmdlcyBhcmUgYWxzbyBlYXNpZXIgdG8KK3VuZGVyc3RhbmQgYmVjYXVzZSBhIG1lcmdlIGNvbW1pdCBpcyBhICJwcm9taXNlIiB0aGF0IGFsbCBjaGFuZ2VzIGZyb20KK2FsbCBpdHMgcGFyZW50cyBhcmUgbm93IGluY2x1ZGVkLgorCitUaGVyZSBpcyBhIHRyYWRlb2ZmIG9mIGNvdXJzZTogbWVyZ2VzIHJlcXVpcmUgYSBtb3JlIGNhcmVmdWwgYnJhbmNoCittYW5hZ2VtZW50LiAgVGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucyBkaXNjdXNzIHRoZSBpbXBvcnRhbnQgcG9pbnRzLgorCisKK0dyYWR1YXRpb24KK35+fn5+fn5+fn4KKworQXMgYSBnaXZlbiBmZWF0dXJlIGdvZXMgZnJvbSBleHBlcmltZW50YWwgdG8gc3RhYmxlLCBpdCBhbHNvCisiZ3JhZHVhdGVzIiBiZXR3ZWVuIHRoZSBjb3JyZXNwb25kaW5nIGJyYW5jaGVzIG9mIHRoZSBzb2Z0d2FyZS4KK2BnaXQuZ2l0YCB1c2VzIHRoZSBmb2xsb3dpbmcgJ2ludGVncmF0aW9uIGJyYW5jaGVzJzoKKworKiAnbWFpbnQnIHRyYWNrcyB0aGUgY29tbWl0cyB0aGF0IHNob3VsZCBnbyBpbnRvIHRoZSBuZXh0ICJtYWludGVuYW5jZQorICByZWxlYXNlIiwgaS5lLiwgdXBkYXRlIG9mIHRoZSBsYXN0IHJlbGVhc2VkIHN0YWJsZSB2ZXJzaW9uOworCisqICdtYXN0ZXInIHRyYWNrcyB0aGUgY29tbWl0cyB0aGF0IHNob3VsZCBnbyBpbnRvIHRoZSBuZXh0IHJlbGVhc2U7CisKKyogJ25leHQnIGlzIGludGVuZGVkIGFzIGEgdGVzdGluZyBicmFuY2ggZm9yIHRvcGljcyBiZWluZyB0ZXN0ZWQgZm9yCisgIHN0YWJpbGl0eSBmb3IgbWFzdGVyLgorCitUaGVyZSBpcyBhIGZvdXJ0aCBvZmZpY2lhbCBicmFuY2ggdGhhdCBpcyB1c2VkIHNsaWdodGx5IGRpZmZlcmVudGx5OgorCisqICdwdScgKHByb3Bvc2VkIHVwZGF0ZXMpIGlzIGFuIGludGVncmF0aW9uIGJyYW5jaCBmb3IgdGhpbmdzIHRoYXQgYXJlCisgIG5vdCBxdWl0ZSByZWFkeSBmb3IgaW5jbHVzaW9uIHlldCAoc2VlICJJbnRlZ3JhdGlvbiBCcmFuY2hlcyIKKyAgYmVsb3cpLgorCitFYWNoIG9mIHRoZSBmb3VyIGJyYW5jaGVzIGlzIHVzdWFsbHkgYSBkaXJlY3QgZGVzY2VuZGFudCBvZiB0aGUgb25lCithYm92ZSBpdC4KKworQ29uY2VwdHVhbGx5LCB0aGUgZmVhdHVyZSBlbnRlcnMgYXQgYW4gdW5zdGFibGUgYnJhbmNoICh1c3VhbGx5ICduZXh0Jworb3IgJ3B1JyksIGFuZCAiZ3JhZHVhdGVzIiB0byAnbWFzdGVyJyBmb3IgdGhlIG5leHQgcmVsZWFzZSBvbmNlIGl0IGlzCitjb25zaWRlcmVkIHN0YWJsZSBlbm91Z2guCisKKworTWVyZ2luZyB1cHdhcmRzCit+fn5+fn5+fn5+fn5+fn4KKworVGhlICJkb3dud2FyZHMgZ3JhZHVhdGlvbiIgZGlzY3Vzc2VkIGFib3ZlIGNhbm5vdCBiZSBkb25lIGJ5IGFjdHVhbGx5CittZXJnaW5nIGRvd253YXJkcywgaG93ZXZlciwgc2luY2UgdGhhdCB3b3VsZCBtZXJnZSAnYWxsJyBjaGFuZ2VzIG9uCit0aGUgdW5zdGFibGUgYnJhbmNoIGludG8gdGhlIHN0YWJsZSBvbmUuICBIZW5jZSB0aGUgZm9sbG93aW5nOgorCisuTWVyZ2UgdXB3YXJkcworW2NhcHRpb249IlJ1bGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitBbHdheXMgY29tbWl0IHlvdXIgZml4ZXMgdG8gdGhlIG9sZGVzdCBzdXBwb3J0ZWQgYnJhbmNoIHRoYXQgcmVxdWlyZQordGhlbS4gIFRoZW4gKHBlcmlvZGljYWxseSkgbWVyZ2UgdGhlIGludGVncmF0aW9uIGJyYW5jaGVzIHVwd2FyZHMgaW50byBlYWNoCitvdGhlci4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBnaXZlcyBhIHZlcnkgY29udHJvbGxlZCBmbG93IG9mIGZpeGVzLiAgSWYgeW91IG5vdGljZSB0aGF0IHlvdQoraGF2ZSBhcHBsaWVkIGEgZml4IHRvIGUuZy4gJ21hc3RlcicgdGhhdCBpcyBhbHNvIHJlcXVpcmVkIGluICdtYWludCcsCit5b3Ugd2lsbCBuZWVkIHRvIGNoZXJyeS1waWNrIGl0ICh1c2luZyBsaW5rZ2l0OmdpdC1jaGVycnktcGlja1sxXSkKK2Rvd253YXJkcy4gIFRoaXMgd2lsbCBoYXBwZW4gYSBmZXcgdGltZXMgYW5kIGlzIG5vdGhpbmcgdG8gd29ycnkgYWJvdXQKK3VubGVzcyB5b3UgZG8gaXQgdmVyeSBmcmVxdWVudGx5LgorCisKK1RvcGljIGJyYW5jaGVzCit+fn5+fn5+fn5+fn5+fgorCitBbnkgbm9udHJpdmlhbCBmZWF0dXJlIHdpbGwgcmVxdWlyZSBzZXZlcmFsIHBhdGNoZXMgdG8gaW1wbGVtZW50LCBhbmQKK21heSBnZXQgZXh0cmEgYnVnZml4ZXMgb3IgaW1wcm92ZW1lbnRzIGR1cmluZyBpdHMgbGlmZXRpbWUuCisKK0NvbW1pdHRpbmcgZXZlcnl0aGluZyBkaXJlY3RseSBvbiB0aGUgaW50ZWdyYXRpb24gYnJhbmNoZXMgbGVhZHMgdG8gbWFueQorcHJvYmxlbXM6IEJhZCBjb21taXRzIGNhbm5vdCBiZSB1bmRvbmUsIHNvIHRoZXkgbXVzdCBiZSByZXZlcnRlZCBvbmUKK2J5IG9uZSwgd2hpY2ggY3JlYXRlcyBjb25mdXNpbmcgaGlzdG9yaWVzIGFuZCBmdXJ0aGVyIGVycm9yIHBvdGVudGlhbAord2hlbiB5b3UgZm9yZ2V0IHRvIHJldmVydCBwYXJ0IG9mIGEgZ3JvdXAgb2YgY2hhbmdlcy4gIFdvcmtpbmcgaW4KK3BhcmFsbGVsIG1peGVzIHVwIHRoZSBjaGFuZ2VzLCBjcmVhdGluZyBmdXJ0aGVyIGNvbmZ1c2lvbi4KKworVXNlIG9mICJ0b3BpYyBicmFuY2hlcyIgc29sdmVzIHRoZXNlIHByb2JsZW1zLiAgVGhlIG5hbWUgaXMgcHJldHR5CitzZWxmIGV4cGxhbmF0b3J5LCB3aXRoIGEgY2F2ZWF0IHRoYXQgY29tZXMgZnJvbSB0aGUgIm1lcmdlIHVwd2FyZHMiCitydWxlIGFib3ZlOgorCisuVG9waWMgYnJhbmNoZXMKK1tjYXB0aW9uPSJSdWxlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTWFrZSBhIHNpZGUgYnJhbmNoIGZvciBldmVyeSB0b3BpYyAoZmVhdHVyZSwgYnVnZml4LCAuLi4pLiBGb3JrIGl0IG9mZgorYXQgdGhlIG9sZGVzdCBpbnRlZ3JhdGlvbiBicmFuY2ggdGhhdCB5b3Ugd2lsbCBldmVudHVhbGx5IHdhbnQgdG8gbWVyZ2UgaXQKK2ludG8uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK01hbnkgdGhpbmdzIGNhbiB0aGVuIGJlIGRvbmUgdmVyeSBuYXR1cmFsbHk6CisKKyogVG8gZ2V0IHRoZSBmZWF0dXJlL2J1Z2ZpeCBpbnRvIGFuIGludGVncmF0aW9uIGJyYW5jaCwgc2ltcGx5IG1lcmdlCisgIGl0LiAgSWYgdGhlIHRvcGljIGhhcyBldm9sdmVkIGZ1cnRoZXIgaW4gdGhlIG1lYW50aW1lLCBtZXJnZSBhZ2Fpbi4KKyAgKE5vdGUgdGhhdCB5b3UgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gbWVyZ2UgaXQgdG8gdGhlIG9sZGVzdAorICBpbnRlZ3JhdGlvbiBicmFuY2ggZmlyc3QuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBmaXJzdCBtZXJnZSBhIGJ1Z2ZpeAorICB0byAnbmV4dCcsIGdpdmUgaXQgc29tZSB0ZXN0aW5nIHRpbWUsIGFuZCBtZXJnZSB0byAnbWFpbnQnIHdoZW4geW91CisgIGtub3cgaXQgaXMgc3RhYmxlLikKKworKiBJZiB5b3UgZmluZCB5b3UgbmVlZCBuZXcgZmVhdHVyZXMgZnJvbSB0aGUgYnJhbmNoICdvdGhlcicgdG8gY29udGludWUKKyAgd29ya2luZyBvbiB5b3VyIHRvcGljLCBtZXJnZSAnb3RoZXInIHRvICd0b3BpYycuICAoSG93ZXZlciwgZG8gbm90CisgIGRvIHRoaXMgImp1c3QgaGFiaXR1YWxseSIsIHNlZSBiZWxvdy4pCisKKyogSWYgeW91IGZpbmQgeW91IGZvcmtlZCBvZmYgdGhlIHdyb25nIGJyYW5jaCBhbmQgd2FudCB0byBtb3ZlIGl0CisgICJiYWNrIGluIHRpbWUiLCB1c2UgbGlua2dpdDpnaXQtcmViYXNlWzFdLgorCitOb3RlIHRoYXQgdGhlIGxhc3QgcG9pbnQgY2xhc2hlcyB3aXRoIHRoZSBvdGhlciB0d286IGEgdG9waWMgdGhhdCBoYXMKK2JlZW4gbWVyZ2VkIGVsc2V3aGVyZSBzaG91bGQgbm90IGJlIHJlYmFzZWQuICBTZWUgdGhlIHNlY3Rpb24gb24KK1JFQ09WRVJJTkcgRlJPTSBVUFNUUkVBTSBSRUJBU0UgaW4gbGlua2dpdDpnaXQtcmViYXNlWzFdLgorCitXZSBzaG91bGQgcG9pbnQgb3V0IHRoYXQgImhhYml0dWFsbHkiIChyZWd1bGFybHkgZm9yIG5vIHJlYWwgcmVhc29uKQorbWVyZ2luZyBhbiBpbnRlZ3JhdGlvbiBicmFuY2ggaW50byB5b3VyIHRvcGljcyAtLSBhbmQgYnkgZXh0ZW5zaW9uLAorbWVyZ2luZyBhbnl0aGluZyB1cHN0cmVhbSBpbnRvIGFueXRoaW5nIGRvd25zdHJlYW0gb24gYSByZWd1bGFyIGJhc2lzCistLSBpcyBmcm93bmVkIHVwb246CisKKy5NZXJnZSB0byBkb3duc3RyZWFtIG9ubHkgYXQgd2VsbC1kZWZpbmVkIHBvaW50cworW2NhcHRpb249IlJ1bGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitEbyBub3QgbWVyZ2UgdG8gZG93bnN0cmVhbSBleGNlcHQgd2l0aCBhIGdvb2QgcmVhc29uOiB1cHN0cmVhbSBBUEkKK2NoYW5nZXMgYWZmZWN0IHlvdXIgYnJhbmNoOyB5b3VyIGJyYW5jaCBubyBsb25nZXIgbWVyZ2VzIHRvIHVwc3RyZWFtCitjbGVhbmx5OyBldGMuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK090aGVyd2lzZSwgdGhlIHRvcGljIHRoYXQgd2FzIG1lcmdlZCB0byBzdWRkZW5seSBjb250YWlucyBtb3JlIHRoYW4gYQorc2luZ2xlICh3ZWxsLXNlcGFyYXRlZCkgY2hhbmdlLiAgVGhlIG1hbnkgcmVzdWx0aW5nIHNtYWxsIG1lcmdlcyB3aWxsCitncmVhdGx5IGNsdXR0ZXIgdXAgaGlzdG9yeS4gIEFueW9uZSB3aG8gbGF0ZXIgaW52ZXN0aWdhdGVzIHRoZSBoaXN0b3J5CitvZiBhIGZpbGUgd2lsbCBoYXZlIHRvIGZpbmQgb3V0IHdoZXRoZXIgdGhhdCBtZXJnZSBhZmZlY3RlZCB0aGUgdG9waWMKK2luIGRldmVsb3BtZW50LiAgQW4gdXBzdHJlYW0gbWlnaHQgZXZlbiBpbmFkdmVydGVudGx5IGJlIG1lcmdlZCBpbnRvIGEKKyJtb3JlIHN0YWJsZSIgYnJhbmNoLiAgQW5kIHNvIG9uLgorCisKK1Rocm93LWF3YXkgaW50ZWdyYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgeW91IGZvbGxvd2VkIHRoZSBsYXN0IHBhcmFncmFwaCwgeW91IHdpbGwgbm93IGhhdmUgbWFueSBzbWFsbCB0b3BpYworYnJhbmNoZXMsIGFuZCBvY2Nhc2lvbmFsbHkgd29uZGVyIGhvdyB0aGV5IGludGVyYWN0LiAgUGVyaGFwcyB0aGUKK3Jlc3VsdCBvZiBtZXJnaW5nIHRoZW0gZG9lcyBub3QgZXZlbiB3b3JrPyAgQnV0IG9uIHRoZSBvdGhlciBoYW5kLCB3ZQord2FudCB0byBhdm9pZCBtZXJnaW5nIHRoZW0gYW55d2hlcmUgInN0YWJsZSIgYmVjYXVzZSBzdWNoIG1lcmdlcworY2Fubm90IGVhc2lseSBiZSB1bmRvbmUuCisKK1RoZSBzb2x1dGlvbiwgb2YgY291cnNlLCBpcyB0byBtYWtlIGEgbWVyZ2UgdGhhdCB3ZSBjYW4gdW5kbzogbWVyZ2UKK2ludG8gYSB0aHJvdy1hd2F5IGJyYW5jaC4KKworLlRocm93LWF3YXkgaW50ZWdyYXRpb24gYnJhbmNoZXMKK1tjYXB0aW9uPSJSdWxlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVG8gdGVzdCB0aGUgaW50ZXJhY3Rpb24gb2Ygc2V2ZXJhbCB0b3BpY3MsIG1lcmdlIHRoZW0gaW50byBhCit0aHJvdy1hd2F5IGJyYW5jaC4gIFlvdSBtdXN0IG5ldmVyIGJhc2UgYW55IHdvcmsgb24gc3VjaCBhIGJyYW5jaCEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IG1ha2UgaXQgKHZlcnkpIGNsZWFyIHRoYXQgdGhpcyBicmFuY2ggaXMgZ29pbmcgdG8gYmUgZGVsZXRlZAorcmlnaHQgYWZ0ZXIgdGhlIHRlc3RpbmcsIHlvdSBjYW4gZXZlbiBwdWJsaXNoIHRoaXMgYnJhbmNoLCBmb3IgZXhhbXBsZQordG8gZ2l2ZSB0aGUgdGVzdGVycyBhIGNoYW5jZSB0byB3b3JrIHdpdGggaXQsIG9yIG90aGVyIGRldmVsb3BlcnMgYQorY2hhbmNlIHRvIHNlZSBpZiB0aGVpciBpbi1wcm9ncmVzcyB3b3JrIHdpbGwgYmUgY29tcGF0aWJsZS4gIGBnaXQuZ2l0YAoraGFzIHN1Y2ggYW4gb2ZmaWNpYWwgdGhyb3ctYXdheSBpbnRlZ3JhdGlvbiBicmFuY2ggY2FsbGVkICdwdScuCisKKworQnJhbmNoIG1hbmFnZW1lbnQgZm9yIGEgcmVsZWFzZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBc3N1bWluZyB5b3UgYXJlIHVzaW5nIHRoZSBtZXJnZSBhcHByb2FjaCBkaXNjdXNzZWQgYWJvdmUsIHdoZW4geW91CithcmUgcmVsZWFzaW5nIHlvdXIgcHJvamVjdCB5b3Ugd2lsbCBuZWVkIHRvIGRvIHNvbWUgYWRkaXRpb25hbCBicmFuY2gKK21hbmFnZW1lbnQgd29yay4KKworQSBmZWF0dXJlIHJlbGVhc2UgaXMgY3JlYXRlZCBmcm9tIHRoZSAnbWFzdGVyJyBicmFuY2gsIHNpbmNlICdtYXN0ZXInCit0cmFja3MgdGhlIGNvbW1pdHMgdGhhdCBzaG91bGQgZ28gaW50byB0aGUgbmV4dCBmZWF0dXJlIHJlbGVhc2UuCisKK1RoZSAnbWFzdGVyJyBicmFuY2ggaXMgc3VwcG9zZWQgdG8gYmUgYSBzdXBlcnNldCBvZiAnbWFpbnQnLiBJZiB0aGlzCitjb25kaXRpb24gZG9lcyBub3QgaG9sZCwgdGhlbiAnbWFpbnQnIGNvbnRhaW5zIHNvbWUgY29tbWl0cyB0aGF0CithcmUgbm90IGluY2x1ZGVkIG9uICdtYXN0ZXInLiBUaGUgZml4ZXMgcmVwcmVzZW50ZWQgYnkgdGhvc2UgY29tbWl0cword2lsbCB0aGVyZWZvcmUgbm90IGJlIGluY2x1ZGVkIGluIHlvdXIgZmVhdHVyZSByZWxlYXNlLgorCitUbyB2ZXJpZnkgdGhhdCAnbWFzdGVyJyBpcyBpbmRlZWQgYSBzdXBlcnNldCBvZiAnbWFpbnQnLCB1c2UgZ2l0IGxvZzoKKworLlZlcmlmeSAnbWFzdGVyJyBpcyBhIHN1cGVyc2V0IG9mICdtYWludCcKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitgZ2l0IGxvZyBtYXN0ZXIuLm1haW50YAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGNvbW1hbmQgc2hvdWxkIG5vdCBsaXN0IGFueSBjb21taXRzLiAgT3RoZXJ3aXNlLCBjaGVjayBvdXQKKydtYXN0ZXInIGFuZCBtZXJnZSAnbWFpbnQnIGludG8gaXQuCisKK05vdyB5b3UgY2FuIHByb2NlZWQgd2l0aCB0aGUgY3JlYXRpb24gb2YgdGhlIGZlYXR1cmUgcmVsZWFzZS4gQXBwbHkgYQordGFnIHRvIHRoZSB0aXAgb2YgJ21hc3RlcicgaW5kaWNhdGluZyB0aGUgcmVsZWFzZSB2ZXJzaW9uOgorCisuUmVsZWFzZSB0YWdnaW5nCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCB0YWcgLXMgLW0gIkdpdCBYLlkuWiIgdlguWS5aIG1hc3RlcmAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IG5lZWQgdG8gcHVzaCB0aGUgbmV3IHRhZyB0byBhIHB1YmxpYyBHaXQgc2VydmVyIChzZWUKKyJESVNUUklCVVRFRCBXT1JLRkxPV1MiIGJlbG93KS4gVGhpcyBtYWtlcyB0aGUgdGFnIGF2YWlsYWJsZSB0bworb3RoZXJzIHRyYWNraW5nIHlvdXIgcHJvamVjdC4gVGhlIHB1c2ggY291bGQgYWxzbyB0cmlnZ2VyIGEKK3Bvc3QtdXBkYXRlIGhvb2sgdG8gcGVyZm9ybSByZWxlYXNlLXJlbGF0ZWQgaXRlbXMgc3VjaCBhcyBidWlsZGluZworcmVsZWFzZSB0YXJiYWxscyBhbmQgcHJlZm9ybWF0dGVkIGRvY3VtZW50YXRpb24gcGFnZXMuCisKK1NpbWlsYXJseSwgZm9yIGEgbWFpbnRlbmFuY2UgcmVsZWFzZSwgJ21haW50JyBpcyB0cmFja2luZyB0aGUgY29tbWl0cwordG8gYmUgcmVsZWFzZWQuIFRoZXJlZm9yZSwgaW4gdGhlIHN0ZXBzIGFib3ZlIHNpbXBseSB0YWcgYW5kIHB1c2gKKydtYWludCcgcmF0aGVyIHRoYW4gJ21hc3RlcicuCisKKworTWFpbnRlbmFuY2UgYnJhbmNoIG1hbmFnZW1lbnQgYWZ0ZXIgYSBmZWF0dXJlIHJlbGVhc2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FmdGVyIGEgZmVhdHVyZSByZWxlYXNlLCB5b3UgbmVlZCB0byBtYW5hZ2UgeW91ciBtYWludGVuYW5jZSBicmFuY2hlcy4KKworRmlyc3QsIGlmIHlvdSB3aXNoIHRvIGNvbnRpbnVlIHRvIHJlbGVhc2UgbWFpbnRlbmFuY2UgZml4ZXMgZm9yIHRoZQorZmVhdHVyZSByZWxlYXNlIG1hZGUgYmVmb3JlIHRoZSByZWNlbnQgb25lLCB0aGVuIHlvdSBtdXN0IGNyZWF0ZQorYW5vdGhlciBicmFuY2ggdG8gdHJhY2sgY29tbWl0cyBmb3IgdGhhdCBwcmV2aW91cyByZWxlYXNlLgorCitUbyBkbyB0aGlzLCB0aGUgY3VycmVudCBtYWludGVuYW5jZSBicmFuY2ggaXMgY29waWVkIHRvIGFub3RoZXIgYnJhbmNoCituYW1lZCB3aXRoIHRoZSBwcmV2aW91cyByZWxlYXNlIHZlcnNpb24gbnVtYmVyIChlLmcuIG1haW50LVguWS4oWi0xKQord2hlcmUgWC5ZLlogaXMgdGhlIGN1cnJlbnQgcmVsZWFzZSkuCisKKy5Db3B5IG1haW50CitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCBicmFuY2ggbWFpbnQtWC5ZLihaLTEpIG1haW50YAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgJ21haW50JyBicmFuY2ggc2hvdWxkIG5vdyBiZSBmYXN0LWZvcndhcmRlZCB0byB0aGUgbmV3bHkgcmVsZWFzZWQKK2NvZGUgc28gdGhhdCBtYWludGVuYW5jZSBmaXhlcyBjYW4gYmUgdHJhY2tlZCBmb3IgdGhlIGN1cnJlbnQgcmVsZWFzZToKKworLlVwZGF0ZSBtYWludCB0byBuZXcgcmVsZWFzZQorW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogYGdpdCBjaGVja291dCBtYWludGAKKyogYGdpdCBtZXJnZSAtLWZmLW9ubHkgbWFzdGVyYAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB0aGUgbWVyZ2UgZmFpbHMgYmVjYXVzZSBpdCBpcyBub3QgYSBmYXN0LWZvcndhcmQsIHRoZW4gaXQgaXMKK3Bvc3NpYmxlIHNvbWUgZml4ZXMgb24gJ21haW50JyB3ZXJlIG1pc3NlZCBpbiB0aGUgZmVhdHVyZSByZWxlYXNlLgorVGhpcyB3aWxsIG5vdCBoYXBwZW4gaWYgdGhlIGNvbnRlbnQgb2YgdGhlIGJyYW5jaGVzIHdhcyB2ZXJpZmllZCBhcworZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLgorCisKK0JyYW5jaCBtYW5hZ2VtZW50IGZvciBuZXh0IGFuZCBwdSBhZnRlciBhIGZlYXR1cmUgcmVsZWFzZQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0FmdGVyIGEgZmVhdHVyZSByZWxlYXNlLCB0aGUgaW50ZWdyYXRpb24gYnJhbmNoICduZXh0JyBtYXkgb3B0aW9uYWxseSBiZQorcmV3b3VuZCBhbmQgcmVidWlsdCBmcm9tIHRoZSB0aXAgb2YgJ21hc3RlcicgdXNpbmcgdGhlIHN1cnZpdmluZwordG9waWNzIG9uICduZXh0JzoKKworLlJld2luZCBhbmQgcmVidWlsZCBuZXh0CitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorKiBgZ2l0IGNoZWNrb3V0IG5leHRgCisqIGBnaXQgcmVzZXQgLS1oYXJkIG1hc3RlcmAKKyogYGdpdCBtZXJnZSBhaS90b3BpY19pbl9uZXh0MWAKKyogYGdpdCBtZXJnZSBhaS90b3BpY19pbl9uZXh0MmAKKyogLi4uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBhZHZhbnRhZ2Ugb2YgZG9pbmcgdGhpcyBpcyB0aGF0IHRoZSBoaXN0b3J5IG9mICduZXh0JyB3aWxsIGJlCitjbGVhbi4gRm9yIGV4YW1wbGUsIHNvbWUgdG9waWNzIG1lcmdlZCBpbnRvICduZXh0JyBtYXkgaGF2ZSBpbml0aWFsbHkKK2xvb2tlZCBwcm9taXNpbmcsIGJ1dCB3ZXJlIGxhdGVyIGZvdW5kIHRvIGJlIHVuZGVzaXJhYmxlIG9yIHByZW1hdHVyZS4KK0luIHN1Y2ggYSBjYXNlLCB0aGUgdG9waWMgaXMgcmV2ZXJ0ZWQgb3V0IG9mICduZXh0JyBidXQgdGhlIGZhY3QKK3JlbWFpbnMgaW4gdGhlIGhpc3RvcnkgdGhhdCBpdCB3YXMgb25jZSBtZXJnZWQgYW5kIHJldmVydGVkLiBCeQorcmVjcmVhdGluZyAnbmV4dCcsIHlvdSBnaXZlIGFub3RoZXIgaW5jYXJuYXRpb24gb2Ygc3VjaCB0b3BpY3MgYSBjbGVhbgorc2xhdGUgdG8gcmV0cnksIGFuZCBhIGZlYXR1cmUgcmVsZWFzZSBpcyBhIGdvb2QgcG9pbnQgaW4gaGlzdG9yeSB0byBkbworc28uCisKK0lmIHlvdSBkbyB0aGlzLCB0aGVuIHlvdSBzaG91bGQgbWFrZSBhIHB1YmxpYyBhbm5vdW5jZW1lbnQgaW5kaWNhdGluZwordGhhdCAnbmV4dCcgd2FzIHJld291bmQgYW5kIHJlYnVpbHQuCisKK1RoZSBzYW1lIHJld2luZCBhbmQgcmVidWlsZCBwcm9jZXNzIG1heSBiZSBmb2xsb3dlZCBmb3IgJ3B1Jy4gQSBwdWJsaWMKK2Fubm91bmNlbWVudCBpcyBub3QgbmVjZXNzYXJ5IHNpbmNlICdwdScgaXMgYSB0aHJvdy1hd2F5IGJyYW5jaCwgYXMKK2Rlc2NyaWJlZCBhYm92ZS4KKworCitESVNUUklCVVRFRCBXT1JLRkxPV1MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZnRlciB0aGUgbGFzdCBzZWN0aW9uLCB5b3Ugc2hvdWxkIGtub3cgaG93IHRvIG1hbmFnZSB0b3BpY3MuICBJbgorZ2VuZXJhbCwgeW91IHdpbGwgbm90IGJlIHRoZSBvbmx5IHBlcnNvbiB3b3JraW5nIG9uIHRoZSBwcm9qZWN0LCBzbworeW91IHdpbGwgaGF2ZSB0byBzaGFyZSB5b3VyIHdvcmsuCisKK1JvdWdobHkgc3BlYWtpbmcsIHRoZXJlIGFyZSB0d28gaW1wb3J0YW50IHdvcmtmbG93czogbWVyZ2UgYW5kIHBhdGNoLgorVGhlIGltcG9ydGFudCBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIG1lcmdlIHdvcmtmbG93IGNhbiBwcm9wYWdhdGUgZnVsbAoraGlzdG9yeSwgaW5jbHVkaW5nIG1lcmdlcywgd2hpbGUgcGF0Y2hlcyBjYW5ub3QuICBCb3RoIHdvcmtmbG93cyBjYW4KK2JlIHVzZWQgaW4gcGFyYWxsZWw6IGluIGBnaXQuZ2l0YCwgb25seSBzdWJzeXN0ZW0gbWFpbnRhaW5lcnMgdXNlCit0aGUgbWVyZ2Ugd29ya2Zsb3csIHdoaWxlIGV2ZXJ5b25lIGVsc2Ugc2VuZHMgcGF0Y2hlcy4KKworTm90ZSB0aGF0IHRoZSBtYWludGFpbmVyKHMpIG1heSBpbXBvc2UgcmVzdHJpY3Rpb25zLCBzdWNoIGFzCisiU2lnbmVkLW9mZi1ieSIgcmVxdWlyZW1lbnRzLCB0aGF0IGFsbCBjb21taXRzL3BhdGNoZXMgc3VibWl0dGVkIGZvcgoraW5jbHVzaW9uIG11c3QgYWRoZXJlIHRvLiAgQ29uc3VsdCB5b3VyIHByb2plY3QncyBkb2N1bWVudGF0aW9uIGZvcgorbW9yZSBpbmZvcm1hdGlvbi4KKworCitNZXJnZSB3b3JrZmxvdworfn5+fn5+fn5+fn5+fn4KKworVGhlIG1lcmdlIHdvcmtmbG93IHdvcmtzIGJ5IGNvcHlpbmcgYnJhbmNoZXMgYmV0d2VlbiB1cHN0cmVhbSBhbmQKK2Rvd25zdHJlYW0uICBVcHN0cmVhbSBjYW4gbWVyZ2UgY29udHJpYnV0aW9ucyBpbnRvIHRoZSBvZmZpY2lhbAoraGlzdG9yeTsgZG93bnN0cmVhbSBiYXNlIHRoZWlyIHdvcmsgb24gdGhlIG9mZmljaWFsIGhpc3RvcnkuCisKK1RoZXJlIGFyZSB0aHJlZSBtYWluIHRvb2xzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRoaXM6CisKKyogbGlua2dpdDpnaXQtcHVzaFsxXSBjb3BpZXMgeW91ciBicmFuY2hlcyB0byBhIHJlbW90ZSByZXBvc2l0b3J5LAorICB1c3VhbGx5IHRvIG9uZSB0aGF0IGNhbiBiZSByZWFkIGJ5IGFsbCBpbnZvbHZlZCBwYXJ0aWVzOworCisqIGxpbmtnaXQ6Z2l0LWZldGNoWzFdIHRoYXQgY29waWVzIHJlbW90ZSBicmFuY2hlcyB0byB5b3VyIHJlcG9zaXRvcnk7CisgIGFuZAorCisqIGxpbmtnaXQ6Z2l0LXB1bGxbMV0gdGhhdCBkb2VzIGZldGNoIGFuZCBtZXJnZSBpbiBvbmUgZ28uCisKK05vdGUgdGhlIGxhc3QgcG9pbnQuICBEbyAnbm90JyB1c2UgJ2dpdCBwdWxsJyB1bmxlc3MgeW91IGFjdHVhbGx5IHdhbnQKK3RvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoLgorCitHZXR0aW5nIGNoYW5nZXMgb3V0IGlzIGVhc3k6CisKKy5QdXNoL3B1bGw6IFB1Ymxpc2hpbmcgYnJhbmNoZXMvdG9waWNzCitbY2FwdGlvbj0iUmVjaXBlOiAiXQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorYGdpdCBwdXNoIDxyZW1vdGU+IDxicmFuY2g+YCBhbmQgdGVsbCBldmVyeW9uZSB3aGVyZSB0aGV5IGNhbiBmZXRjaAorZnJvbS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IHdpbGwgc3RpbGwgaGF2ZSB0byB0ZWxsIHBlb3BsZSBieSBvdGhlciBtZWFucywgc3VjaCBhcyBtYWlsLiAgKEdpdAorcHJvdmlkZXMgdGhlIGxpbmtnaXQ6Z2l0LXJlcXVlc3QtcHVsbFsxXSB0byBzZW5kIHByZWZvcm1hdHRlZCBwdWxsCityZXF1ZXN0cyB0byB1cHN0cmVhbSBtYWludGFpbmVycyB0byBzaW1wbGlmeSB0aGlzIHRhc2suKQorCitJZiB5b3UganVzdCB3YW50IHRvIGdldCB0aGUgbmV3ZXN0IGNvcGllcyBvZiB0aGUgaW50ZWdyYXRpb24gYnJhbmNoZXMsCitzdGF5aW5nIHVwIHRvIGRhdGUgaXMgZWFzeSB0b286CisKKy5QdXNoL3B1bGw6IFN0YXlpbmcgdXAgdG8gZGF0ZQorW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1VzZSBgZ2l0IGZldGNoIDxyZW1vdGU+YCBvciBgZ2l0IHJlbW90ZSB1cGRhdGVgIHRvIHN0YXkgdXAgdG8gZGF0ZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlbiBzaW1wbHkgZm9yayB5b3VyIHRvcGljIGJyYW5jaGVzIGZyb20gdGhlIHN0YWJsZSByZW1vdGVzIGFzCitleHBsYWluZWQgZWFybGllci4KKworSWYgeW91IGFyZSBhIG1haW50YWluZXIgYW5kIHdvdWxkIGxpa2UgdG8gbWVyZ2Ugb3RoZXIgcGVvcGxlJ3MgdG9waWMKK2JyYW5jaGVzIHRvIHRoZSBpbnRlZ3JhdGlvbiBicmFuY2hlcywgdGhleSB3aWxsIHR5cGljYWxseSBzZW5kIGEKK3JlcXVlc3QgdG8gZG8gc28gYnkgbWFpbC4gIFN1Y2ggYSByZXF1ZXN0IGxvb2tzIGxpa2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGxlYXNlIHB1bGwgZnJvbQorICAgIDx1cmw+IDxicmFuY2g+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoYXQgY2FzZSwgJ2dpdCBwdWxsJyBjYW4gZG8gdGhlIGZldGNoIGFuZCBtZXJnZSBpbiBvbmUgZ28sIGFzCitmb2xsb3dzLgorCisuUHVzaC9wdWxsOiBNZXJnaW5nIHJlbW90ZSB0b3BpY3MKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitgZ2l0IHB1bGwgPHVybD4gPGJyYW5jaD5gCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK09jY2FzaW9uYWxseSwgdGhlIG1haW50YWluZXIgbWF5IGdldCBtZXJnZSBjb25mbGljdHMgd2hlbiBoZSB0cmllcyB0bworcHVsbCBjaGFuZ2VzIGZyb20gZG93bnN0cmVhbS4gIEluIHRoaXMgY2FzZSwgaGUgY2FuIGFzayBkb3duc3RyZWFtIHRvCitkbyB0aGUgbWVyZ2UgYW5kIHJlc29sdmUgdGhlIGNvbmZsaWN0cyB0aGVtc2VsdmVzIChwZXJoYXBzIHRoZXkgd2lsbAora25vdyBiZXR0ZXIgaG93IHRvIHJlc29sdmUgdGhlbSkuICBJdCBpcyBvbmUgb2YgdGhlIHJhcmUgY2FzZXMgd2hlcmUKK2Rvd25zdHJlYW0gJ3Nob3VsZCcgbWVyZ2UgZnJvbSB1cHN0cmVhbS4KKworCitQYXRjaCB3b3JrZmxvdworfn5+fn5+fn5+fn5+fn4KKworSWYgeW91IGFyZSBhIGNvbnRyaWJ1dG9yIHRoYXQgc2VuZHMgY2hhbmdlcyB1cHN0cmVhbSBpbiB0aGUgZm9ybSBvZgorZW1haWxzLCB5b3Ugc2hvdWxkIHVzZSB0b3BpYyBicmFuY2hlcyBhcyB1c3VhbCAoc2VlIGFib3ZlKS4gIFRoZW4gdXNlCitsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0gdG8gZ2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcgZW1haWxzCisoaGlnaGx5IHJlY29tbWVuZGVkIG92ZXIgbWFudWFsbHkgZm9ybWF0dGluZyB0aGVtIGJlY2F1c2UgaXQgbWFrZXMgdGhlCittYWludGFpbmVyJ3MgbGlmZSBlYXNpZXIpLgorCisuZm9ybWF0LXBhdGNoL2FtOiBQdWJsaXNoaW5nIGJyYW5jaGVzL3RvcGljcworW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyogYGdpdCBmb3JtYXQtcGF0Y2ggLU0gdXBzdHJlYW0uLnRvcGljYCB0byB0dXJuIHRoZW0gaW50byBwcmVmb3JtYXR0ZWQKKyAgcGF0Y2ggZmlsZXMKKyogYGdpdCBzZW5kLWVtYWlsIC0tdG89PHJlY2lwaWVudD4gPHBhdGNoZXM+YAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTZWUgdGhlIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSBhbmQgbGlua2dpdDpnaXQtc2VuZC1lbWFpbFsxXQorbWFucGFnZXMgZm9yIGZ1cnRoZXIgdXNhZ2Ugbm90ZXMuCisKK0lmIHRoZSBtYWludGFpbmVyIHRlbGxzIHlvdSB0aGF0IHlvdXIgcGF0Y2ggbm8gbG9uZ2VyIGFwcGxpZXMgdG8gdGhlCitjdXJyZW50IHVwc3RyZWFtLCB5b3Ugd2lsbCBoYXZlIHRvIHJlYmFzZSB5b3VyIHRvcGljICh5b3UgY2Fubm90IHVzZSBhCittZXJnZSBiZWNhdXNlIHlvdSBjYW5ub3QgZm9ybWF0LXBhdGNoIG1lcmdlcyk6CisKKy5mb3JtYXQtcGF0Y2gvYW06IEtlZXBpbmcgdG9waWNzIHVwIHRvIGRhdGUKK1tjYXB0aW9uPSJSZWNpcGU6ICJdCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitgZ2l0IHB1bGwgLS1yZWJhc2UgPHVybD4gPGJyYW5jaD5gCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBjYW4gdGhlbiBmaXggdGhlIGNvbmZsaWN0cyBkdXJpbmcgdGhlIHJlYmFzZS4gIFByZXN1bWFibHkgeW91IGhhdmUKK25vdCBwdWJsaXNoZWQgeW91ciB0b3BpYyBvdGhlciB0aGFuIGJ5IG1haWwsIHNvIHJlYmFzaW5nIGl0IGlzIG5vdCBhCitwcm9ibGVtLgorCitJZiB5b3UgcmVjZWl2ZSBzdWNoIGEgcGF0Y2ggc2VyaWVzIChhcyBtYWludGFpbmVyLCBvciBwZXJoYXBzIGFzIGEKK3JlYWRlciBvZiB0aGUgbWFpbGluZyBsaXN0IGl0IHdhcyBzZW50IHRvKSwgc2F2ZSB0aGUgbWFpbHMgdG8gZmlsZXMsCitjcmVhdGUgYSBuZXcgdG9waWMgYnJhbmNoIGFuZCB1c2UgJ2dpdCBhbScgdG8gaW1wb3J0IHRoZSBjb21taXRzOgorCisuZm9ybWF0LXBhdGNoL2FtOiBJbXBvcnRpbmcgcGF0Y2hlcworW2NhcHRpb249IlJlY2lwZTogIl0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BnaXQgYW0gPCBwYXRjaGAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT25lIGZlYXR1cmUgd29ydGggcG9pbnRpbmcgb3V0IGlzIHRoZSB0aHJlZS13YXkgbWVyZ2UsIHdoaWNoIGNhbiBoZWxwCitpZiB5b3UgZ2V0IGNvbmZsaWN0czogYGdpdCBhbSAtM2Agd2lsbCB1c2UgaW5kZXggaW5mb3JtYXRpb24gY29udGFpbmVkCitpbiBwYXRjaGVzIHRvIGZpZ3VyZSBvdXQgdGhlIG1lcmdlIGJhc2UuICBTZWUgbGlua2dpdDpnaXQtYW1bMV0gZm9yCitvdGhlciBvcHRpb25zLgorCisKK1NFRSBBTFNPCistLS0tLS0tLQorbGlua2dpdDpnaXR0dXRvcmlhbFs3XSwKK2xpbmtnaXQ6Z2l0LXB1c2hbMV0sCitsaW5rZ2l0OmdpdC1wdWxsWzFdLAorbGlua2dpdDpnaXQtbWVyZ2VbMV0sCitsaW5rZ2l0OmdpdC1yZWJhc2VbMV0sCitsaW5rZ2l0OmdpdC1mb3JtYXQtcGF0Y2hbMV0sCitsaW5rZ2l0OmdpdC1zZW5kLWVtYWlsWzFdLAorbGlua2dpdDpnaXQtYW1bMV0KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9nbG9zc2FyeS1jb250ZW50LnR4dCBiL0RvY3VtZW50YXRpb24vZ2xvc3NhcnktY29udGVudC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyNTk3NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZ2xvc3NhcnktY29udGVudC50eHQKQEAgLTAsMCArMSw2MjggQEAKK1tbZGVmX2FsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2VdXWFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2U6OgorCVZpYSB0aGUgYWx0ZXJuYXRlcyBtZWNoYW5pc20sIGEgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4KKwljYW4gaW5oZXJpdCBwYXJ0IG9mIGl0cyA8PGRlZl9vYmplY3RfZGF0YWJhc2Usb2JqZWN0IGRhdGFiYXNlPj4KKwlmcm9tIGFub3RoZXIgb2JqZWN0IGRhdGFiYXNlLCB3aGljaCBpcyBjYWxsZWQgYW4gImFsdGVybmF0ZSIuCisKK1tbZGVmX2JhcmVfcmVwb3NpdG9yeV1dYmFyZSByZXBvc2l0b3J5OjoKKwlBIGJhcmUgcmVwb3NpdG9yeSBpcyBub3JtYWxseSBhbiBhcHByb3ByaWF0ZWx5CisJbmFtZWQgPDxkZWZfZGlyZWN0b3J5LGRpcmVjdG9yeT4+IHdpdGggYSBgLmdpdGAgc3VmZml4IHRoYXQgZG9lcyBub3QKKwloYXZlIGEgbG9jYWxseSBjaGVja2VkLW91dCBjb3B5IG9mIGFueSBvZiB0aGUgZmlsZXMgdW5kZXIKKwlyZXZpc2lvbiBjb250cm9sLiBUaGF0IGlzLCBhbGwgb2YgdGhlIEdpdAorCWFkbWluaXN0cmF0aXZlIGFuZCBjb250cm9sIGZpbGVzIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgcHJlc2VudCBpbiB0aGUKKwloaWRkZW4gYC5naXRgIHN1Yi1kaXJlY3RvcnkgYXJlIGRpcmVjdGx5IHByZXNlbnQgaW4gdGhlCisJYHJlcG9zaXRvcnkuZ2l0YCBkaXJlY3RvcnkgaW5zdGVhZCwKKwlhbmQgbm8gb3RoZXIgZmlsZXMgYXJlIHByZXNlbnQgYW5kIGNoZWNrZWQgb3V0LiBVc3VhbGx5IHB1Ymxpc2hlcnMgb2YKKwlwdWJsaWMgcmVwb3NpdG9yaWVzIG1ha2UgYmFyZSByZXBvc2l0b3JpZXMgYXZhaWxhYmxlLgorCitbW2RlZl9ibG9iX29iamVjdF1dYmxvYiBvYmplY3Q6OgorCVVudHlwZWQgPDxkZWZfb2JqZWN0LG9iamVjdD4+LCBlLmcuIHRoZSBjb250ZW50cyBvZiBhIGZpbGUuCisKK1tbZGVmX2JyYW5jaF1dYnJhbmNoOjoKKwlBICJicmFuY2giIGlzIGFuIGFjdGl2ZSBsaW5lIG9mIGRldmVsb3BtZW50LiAgVGhlIG1vc3QgcmVjZW50CisJPDxkZWZfY29tbWl0LGNvbW1pdD4+IG9uIGEgYnJhbmNoIGlzIHJlZmVycmVkIHRvIGFzIHRoZSB0aXAgb2YKKwl0aGF0IGJyYW5jaC4gIFRoZSB0aXAgb2YgdGhlIGJyYW5jaCBpcyByZWZlcmVuY2VkIGJ5IGEgYnJhbmNoCisJPDxkZWZfaGVhZCxoZWFkPj4sIHdoaWNoIG1vdmVzIGZvcndhcmQgYXMgYWRkaXRpb25hbCBkZXZlbG9wbWVudAorCWlzIGRvbmUgb24gdGhlIGJyYW5jaC4gIEEgc2luZ2xlIEdpdAorCTw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+IGNhbiB0cmFjayBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mCisJYnJhbmNoZXMsIGJ1dCB5b3VyIDw8ZGVmX3dvcmtpbmdfdHJlZSx3b3JraW5nIHRyZWU+PiBpcworCWFzc29jaWF0ZWQgd2l0aCBqdXN0IG9uZSBvZiB0aGVtICh0aGUgImN1cnJlbnQiIG9yICJjaGVja2VkIG91dCIKKwlicmFuY2gpLCBhbmQgPDxkZWZfSEVBRCxIRUFEPj4gcG9pbnRzIHRvIHRoYXQgYnJhbmNoLgorCitbW2RlZl9jYWNoZV1dY2FjaGU6OgorCU9ic29sZXRlIGZvcjogPDxkZWZfaW5kZXgsaW5kZXg+Pi4KKworW1tkZWZfY2hhaW5dXWNoYWluOjoKKwlBIGxpc3Qgb2Ygb2JqZWN0cywgd2hlcmUgZWFjaCA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4gaW4gdGhlIGxpc3QgY29udGFpbnMKKwlhIHJlZmVyZW5jZSB0byBpdHMgc3VjY2Vzc29yIChmb3IgZXhhbXBsZSwgdGhlIHN1Y2Nlc3NvciBvZiBhCisJPDxkZWZfY29tbWl0LGNvbW1pdD4+IGNvdWxkIGJlIG9uZSBvZiBpdHMgPDxkZWZfcGFyZW50LHBhcmVudHM+PikuCisKK1tbZGVmX2NoYW5nZXNldF1dY2hhbmdlc2V0OjoKKwlCaXRLZWVwZXIvY3ZzcHMgc3BlYWsgZm9yICI8PGRlZl9jb21taXQsY29tbWl0Pj4iLiBTaW5jZSBHaXQgZG9lcyBub3QKKwlzdG9yZSBjaGFuZ2VzLCBidXQgc3RhdGVzLCBpdCByZWFsbHkgZG9lcyBub3QgbWFrZSBzZW5zZSB0byB1c2UgdGhlIHRlcm0KKwkiY2hhbmdlc2V0cyIgd2l0aCBHaXQuCisKK1tbZGVmX2NoZWNrb3V0XV1jaGVja291dDo6CisJVGhlIGFjdGlvbiBvZiB1cGRhdGluZyBhbGwgb3IgcGFydCBvZiB0aGUKKwk8PGRlZl93b3JraW5nX3RyZWUsd29ya2luZyB0cmVlPj4gd2l0aCBhIDw8ZGVmX3RyZWVfb2JqZWN0LHRyZWUgb2JqZWN0Pj4KKwlvciA8PGRlZl9ibG9iX29iamVjdCxibG9iPj4gZnJvbSB0aGUKKwk8PGRlZl9vYmplY3RfZGF0YWJhc2Usb2JqZWN0IGRhdGFiYXNlPj4sIGFuZCB1cGRhdGluZyB0aGUKKwk8PGRlZl9pbmRleCxpbmRleD4+IGFuZCA8PGRlZl9IRUFELEhFQUQ+PiBpZiB0aGUgd2hvbGUgd29ya2luZyB0cmVlIGhhcworCWJlZW4gcG9pbnRlZCBhdCBhIG5ldyA8PGRlZl9icmFuY2gsYnJhbmNoPj4uCisKK1tbZGVmX2NoZXJyeS1waWNraW5nXV1jaGVycnktcGlja2luZzo6CisJSW4gPDxkZWZfU0NNLFNDTT4+IGphcmdvbiwgImNoZXJyeSBwaWNrIiBtZWFucyB0byBjaG9vc2UgYSBzdWJzZXQgb2YKKwljaGFuZ2VzIG91dCBvZiBhIHNlcmllcyBvZiBjaGFuZ2VzICh0eXBpY2FsbHkgY29tbWl0cykgYW5kIHJlY29yZCB0aGVtCisJYXMgYSBuZXcgc2VyaWVzIG9mIGNoYW5nZXMgb24gdG9wIG9mIGEgZGlmZmVyZW50IGNvZGViYXNlLiBJbiBHaXQsIHRoaXMgaXMKKwlwZXJmb3JtZWQgYnkgdGhlICJnaXQgY2hlcnJ5LXBpY2siIGNvbW1hbmQgdG8gZXh0cmFjdCB0aGUgY2hhbmdlIGludHJvZHVjZWQKKwlieSBhbiBleGlzdGluZyA8PGRlZl9jb21taXQsY29tbWl0Pj4gYW5kIHRvIHJlY29yZCBpdCBiYXNlZCBvbiB0aGUgdGlwCisJb2YgdGhlIGN1cnJlbnQgPDxkZWZfYnJhbmNoLGJyYW5jaD4+IGFzIGEgbmV3IGNvbW1pdC4KKworW1tkZWZfY2xlYW5dXWNsZWFuOjoKKwlBIDw8ZGVmX3dvcmtpbmdfdHJlZSx3b3JraW5nIHRyZWU+PiBpcyBjbGVhbiwgaWYgaXQKKwljb3JyZXNwb25kcyB0byB0aGUgPDxkZWZfcmV2aXNpb24scmV2aXNpb24+PiByZWZlcmVuY2VkIGJ5IHRoZSBjdXJyZW50CisJPDxkZWZfaGVhZCxoZWFkPj4uIEFsc28gc2VlICI8PGRlZl9kaXJ0eSxkaXJ0eT4+Ii4KKworW1tkZWZfY29tbWl0XV1jb21taXQ6OgorCUFzIGEgbm91bjogQSBzaW5nbGUgcG9pbnQgaW4gdGhlCisJR2l0IGhpc3Rvcnk7IHRoZSBlbnRpcmUgaGlzdG9yeSBvZiBhIHByb2plY3QgaXMgcmVwcmVzZW50ZWQgYXMgYQorCXNldCBvZiBpbnRlcnJlbGF0ZWQgY29tbWl0cy4gIFRoZSB3b3JkICJjb21taXQiIGlzIG9mdGVuCisJdXNlZCBieSBHaXQgaW4gdGhlIHNhbWUgcGxhY2VzIG90aGVyIHJldmlzaW9uIGNvbnRyb2wgc3lzdGVtcworCXVzZSB0aGUgd29yZHMgInJldmlzaW9uIiBvciAidmVyc2lvbiIuICBBbHNvIHVzZWQgYXMgYSBzaG9ydAorCWhhbmQgZm9yIDw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdD4+LgorKworQXMgYSB2ZXJiOiBUaGUgYWN0aW9uIG9mIHN0b3JpbmcgYSBuZXcgc25hcHNob3Qgb2YgdGhlIHByb2plY3Qncworc3RhdGUgaW4gdGhlIEdpdCBoaXN0b3J5LCBieSBjcmVhdGluZyBhIG5ldyBjb21taXQgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50CitzdGF0ZSBvZiB0aGUgPDxkZWZfaW5kZXgsaW5kZXg+PiBhbmQgYWR2YW5jaW5nIDw8ZGVmX0hFQUQsSEVBRD4+Cit0byBwb2ludCBhdCB0aGUgbmV3IGNvbW1pdC4KKworW1tkZWZfY29tbWl0X29iamVjdF1dY29tbWl0IG9iamVjdDo6CisJQW4gPDxkZWZfb2JqZWN0LG9iamVjdD4+IHdoaWNoIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhCisJcGFydGljdWxhciA8PGRlZl9yZXZpc2lvbixyZXZpc2lvbj4+LCBzdWNoIGFzIDw8ZGVmX3BhcmVudCxwYXJlbnRzPj4sIGNvbW1pdHRlciwKKwlhdXRob3IsIGRhdGUgYW5kIHRoZSA8PGRlZl90cmVlX29iamVjdCx0cmVlIG9iamVjdD4+IHdoaWNoIGNvcnJlc3BvbmRzCisJdG8gdGhlIHRvcCA8PGRlZl9kaXJlY3RvcnksZGlyZWN0b3J5Pj4gb2YgdGhlIHN0b3JlZAorCXJldmlzaW9uLgorCitbW2RlZl9jb21taXQtaXNoXV1jb21taXQtaXNoIChhbHNvIGNvbW1pdHRpc2gpOjoKKwlBIDw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdD4+IG9yIGFuCisJPDxkZWZfb2JqZWN0LG9iamVjdD4+IHRoYXQgY2FuIGJlIHJlY3Vyc2l2ZWx5IGRlcmVmZXJlbmNlZCB0bworCWEgY29tbWl0IG9iamVjdC4KKwlUaGUgZm9sbG93aW5nIGFyZSBhbGwgY29tbWl0LWlzaGVzOgorCWEgY29tbWl0IG9iamVjdCwKKwlhIDw8ZGVmX3RhZ19vYmplY3QsdGFnIG9iamVjdD4+IHRoYXQgcG9pbnRzIHRvIGEgY29tbWl0CisJb2JqZWN0LAorCWEgdGFnIG9iamVjdCB0aGF0IHBvaW50cyB0byBhIHRhZyBvYmplY3QgdGhhdCBwb2ludHMgdG8gYQorCWNvbW1pdCBvYmplY3QsCisJZXRjLgorCitbW2RlZl9jb3JlX2dpdF1dY29yZSBHaXQ6OgorCUZ1bmRhbWVudGFsIGRhdGEgc3RydWN0dXJlcyBhbmQgdXRpbGl0aWVzIG9mIEdpdC4gRXhwb3NlcyBvbmx5IGxpbWl0ZWQKKwlzb3VyY2UgY29kZSBtYW5hZ2VtZW50IHRvb2xzLgorCitbW2RlZl9EQUddXURBRzo6CisJRGlyZWN0ZWQgYWN5Y2xpYyBncmFwaC4gVGhlIDw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdHM+PiBmb3JtIGEKKwlkaXJlY3RlZCBhY3ljbGljIGdyYXBoLCBiZWNhdXNlIHRoZXkgaGF2ZSBwYXJlbnRzIChkaXJlY3RlZCksIGFuZCB0aGUKKwlncmFwaCBvZiBjb21taXQgb2JqZWN0cyBpcyBhY3ljbGljICh0aGVyZSBpcyBubyA8PGRlZl9jaGFpbixjaGFpbj4+CisJd2hpY2ggYmVnaW5zIGFuZCBlbmRzIHdpdGggdGhlIHNhbWUgPDxkZWZfb2JqZWN0LG9iamVjdD4+KS4KKworW1tkZWZfZGFuZ2xpbmdfb2JqZWN0XV1kYW5nbGluZyBvYmplY3Q6OgorCUFuIDw8ZGVmX3VucmVhY2hhYmxlX29iamVjdCx1bnJlYWNoYWJsZSBvYmplY3Q+PiB3aGljaCBpcyBub3QKKwk8PGRlZl9yZWFjaGFibGUscmVhY2hhYmxlPj4gZXZlbiBmcm9tIG90aGVyIHVucmVhY2hhYmxlIG9iamVjdHM7IGEKKwlkYW5nbGluZyBvYmplY3QgaGFzIG5vIHJlZmVyZW5jZXMgdG8gaXQgZnJvbSBhbnkKKwlyZWZlcmVuY2Ugb3IgPDxkZWZfb2JqZWN0LG9iamVjdD4+IGluIHRoZSA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+Pi4KKworW1tkZWZfZGV0YWNoZWRfSEVBRF1dZGV0YWNoZWQgSEVBRDo6CisJTm9ybWFsbHkgdGhlIDw8ZGVmX0hFQUQsSEVBRD4+IHN0b3JlcyB0aGUgbmFtZSBvZiBhCisJPDxkZWZfYnJhbmNoLGJyYW5jaD4+LCBhbmQgY29tbWFuZHMgdGhhdCBvcGVyYXRlIG9uIHRoZQorCWhpc3RvcnkgSEVBRCByZXByZXNlbnRzIG9wZXJhdGUgb24gdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUKKwl0aXAgb2YgdGhlIGJyYW5jaCB0aGUgSEVBRCBwb2ludHMgYXQuICBIb3dldmVyLCBHaXQgYWxzbworCWFsbG93cyB5b3UgdG8gPDxkZWZfY2hlY2tvdXQsY2hlY2sgb3V0Pj4gYW4gYXJiaXRyYXJ5CisJPDxkZWZfY29tbWl0LGNvbW1pdD4+IHRoYXQgaXNuJ3QgbmVjZXNzYXJpbHkgdGhlIHRpcCBvZiBhbnkKKwlwYXJ0aWN1bGFyIGJyYW5jaC4gIFRoZSBIRUFEIGluIHN1Y2ggYSBzdGF0ZSBpcyBjYWxsZWQKKwkiZGV0YWNoZWQiLgorKworTm90ZSB0aGF0IGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0aGUgaGlzdG9yeSBvZiB0aGUgY3VycmVudCBicmFuY2gKKyhlLmcuIGBnaXQgY29tbWl0YCB0byBidWlsZCBhIG5ldyBoaXN0b3J5IG9uIHRvcCBvZiBpdCkgc3RpbGwgd29yaword2hpbGUgdGhlIEhFQUQgaXMgZGV0YWNoZWQuIFRoZXkgdXBkYXRlIHRoZSBIRUFEIHRvIHBvaW50IGF0IHRoZSB0aXAKK29mIHRoZSB1cGRhdGVkIGhpc3Rvcnkgd2l0aG91dCBhZmZlY3RpbmcgYW55IGJyYW5jaC4gIENvbW1hbmRzIHRoYXQKK3VwZGF0ZSBvciBpbnF1aXJlIGluZm9ybWF0aW9uIF9hYm91dF8gdGhlIGN1cnJlbnQgYnJhbmNoIChlLmcuIGBnaXQKK2JyYW5jaCAtLXNldC11cHN0cmVhbS10b2AgdGhhdCBzZXRzIHdoYXQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCB0aGUKK2N1cnJlbnQgYnJhbmNoIGludGVncmF0ZXMgd2l0aCkgb2J2aW91c2x5IGRvIG5vdCB3b3JrLCBhcyB0aGVyZSBpcyBubworKHJlYWwpIGN1cnJlbnQgYnJhbmNoIHRvIGFzayBhYm91dCBpbiB0aGlzIHN0YXRlLgorCitbW2RlZl9kaXJlY3RvcnldXWRpcmVjdG9yeTo6CisJVGhlIGxpc3QgeW91IGdldCB3aXRoICJscyIgOi0pCisKK1tbZGVmX2RpcnR5XV1kaXJ0eTo6CisJQSA8PGRlZl93b3JraW5nX3RyZWUsd29ya2luZyB0cmVlPj4gaXMgc2FpZCB0byBiZSAiZGlydHkiIGlmCisJaXQgY29udGFpbnMgbW9kaWZpY2F0aW9ucyB3aGljaCBoYXZlIG5vdCBiZWVuIDw8ZGVmX2NvbW1pdCxjb21taXR0ZWQ+PiB0byB0aGUgY3VycmVudAorCTw8ZGVmX2JyYW5jaCxicmFuY2g+Pi4KKworW1tkZWZfZXZpbF9tZXJnZV1dZXZpbCBtZXJnZTo6CisJQW4gZXZpbCBtZXJnZSBpcyBhIDw8ZGVmX21lcmdlLG1lcmdlPj4gdGhhdCBpbnRyb2R1Y2VzIGNoYW5nZXMgdGhhdAorCWRvIG5vdCBhcHBlYXIgaW4gYW55IDw8ZGVmX3BhcmVudCxwYXJlbnQ+Pi4KKworW1tkZWZfZmFzdF9mb3J3YXJkXV1mYXN0LWZvcndhcmQ6OgorCUEgZmFzdC1mb3J3YXJkIGlzIGEgc3BlY2lhbCB0eXBlIG9mIDw8ZGVmX21lcmdlLG1lcmdlPj4gd2hlcmUgeW91IGhhdmUgYQorCTw8ZGVmX3JldmlzaW9uLHJldmlzaW9uPj4gYW5kIHlvdSBhcmUgIm1lcmdpbmciIGFub3RoZXIKKwk8PGRlZl9icmFuY2gsYnJhbmNoPj4ncyBjaGFuZ2VzIHRoYXQgaGFwcGVuIHRvIGJlIGEgZGVzY2VuZGFudCBvZiB3aGF0CisJeW91IGhhdmUuIEluIHN1Y2ggdGhlc2UgY2FzZXMsIHlvdSBkbyBub3QgbWFrZSBhIG5ldyA8PGRlZl9tZXJnZSxtZXJnZT4+CisJPDxkZWZfY29tbWl0LGNvbW1pdD4+IGJ1dCBpbnN0ZWFkIGp1c3QgdXBkYXRlIHRvIGhpcworCXJldmlzaW9uLiBUaGlzIHdpbGwgaGFwcGVuIGZyZXF1ZW50bHkgb24gYQorCTw8ZGVmX3JlbW90ZV90cmFja2luZ19icmFuY2gscmVtb3RlLXRyYWNraW5nIGJyYW5jaD4+IG9mIGEgcmVtb3RlCisJPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4uCisKK1tbZGVmX2ZldGNoXV1mZXRjaDo6CisJRmV0Y2hpbmcgYSA8PGRlZl9icmFuY2gsYnJhbmNoPj4gbWVhbnMgdG8gZ2V0IHRoZQorCWJyYW5jaCdzIDw8ZGVmX2hlYWRfcmVmLGhlYWQgcmVmPj4gZnJvbSBhIHJlbW90ZQorCTw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LCB0byBmaW5kIG91dCB3aGljaCBvYmplY3RzIGFyZQorCW1pc3NpbmcgZnJvbSB0aGUgbG9jYWwgPDxkZWZfb2JqZWN0X2RhdGFiYXNlLG9iamVjdCBkYXRhYmFzZT4+LAorCWFuZCB0byBnZXQgdGhlbSwgdG9vLiAgU2VlIGFsc28gbGlua2dpdDpnaXQtZmV0Y2hbMV0uCisKK1tbZGVmX2ZpbGVfc3lzdGVtXV1maWxlIHN5c3RlbTo6CisJTGludXMgVG9ydmFsZHMgb3JpZ2luYWxseSBkZXNpZ25lZCBHaXQgdG8gYmUgYSB1c2VyIHNwYWNlIGZpbGUgc3lzdGVtLAorCWkuZS4gdGhlIGluZnJhc3RydWN0dXJlIHRvIGhvbGQgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLiBUaGF0IGVuc3VyZWQgdGhlCisJZWZmaWNpZW5jeSBhbmQgc3BlZWQgb2YgR2l0LgorCitbW2RlZl9naXRfYXJjaGl2ZV1dR2l0IGFyY2hpdmU6OgorCVN5bm9ueW0gZm9yIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+IChmb3IgYXJjaCBwZW9wbGUpLgorCitbW2RlZl9naXRmaWxlXV1naXRmaWxlOjoKKwlBIHBsYWluIGZpbGUgYC5naXRgIGF0IHRoZSByb290IG9mIGEgd29ya2luZyB0cmVlIHRoYXQKKwlwb2ludHMgYXQgdGhlIGRpcmVjdG9yeSB0aGF0IGlzIHRoZSByZWFsIHJlcG9zaXRvcnkuCisKK1tbZGVmX2dyYWZ0c11dZ3JhZnRzOjoKKwlHcmFmdHMgZW5hYmxlcyB0d28gb3RoZXJ3aXNlIGRpZmZlcmVudCBsaW5lcyBvZiBkZXZlbG9wbWVudCB0byBiZSBqb2luZWQKKwl0b2dldGhlciBieSByZWNvcmRpbmcgZmFrZSBhbmNlc3RyeSBpbmZvcm1hdGlvbiBmb3IgY29tbWl0cy4gVGhpcyB3YXkKKwl5b3UgY2FuIG1ha2UgR2l0IHByZXRlbmQgdGhlIHNldCBvZiA8PGRlZl9wYXJlbnQscGFyZW50cz4+IGEgPDxkZWZfY29tbWl0LGNvbW1pdD4+IGhhcworCWlzIGRpZmZlcmVudCBmcm9tIHdoYXQgd2FzIHJlY29yZGVkIHdoZW4gdGhlIGNvbW1pdCB3YXMKKwljcmVhdGVkLiBDb25maWd1cmVkIHZpYSB0aGUgYC5naXQvaW5mby9ncmFmdHNgIGZpbGUuCisrCitOb3RlIHRoYXQgdGhlIGdyYWZ0cyBtZWNoYW5pc20gaXMgb3V0ZGF0ZWQgYW5kIGNhbiBsZWFkIHRvIHByb2JsZW1zCit0cmFuc2ZlcnJpbmcgb2JqZWN0cyBiZXR3ZWVuIHJlcG9zaXRvcmllczsgc2VlIGxpbmtnaXQ6Z2l0LXJlcGxhY2VbMV0KK2ZvciBhIG1vcmUgZmxleGlibGUgYW5kIHJvYnVzdCBzeXN0ZW0gdG8gZG8gdGhlIHNhbWUgdGhpbmcuCisKK1tbZGVmX2hhc2hdXWhhc2g6OgorCUluIEdpdCdzIGNvbnRleHQsIHN5bm9ueW0gZm9yIDw8ZGVmX29iamVjdF9uYW1lLG9iamVjdCBuYW1lPj4uCisKK1tbZGVmX2hlYWRdXWhlYWQ6OgorCUEgPDxkZWZfcmVmLG5hbWVkIHJlZmVyZW5jZT4+IHRvIHRoZSA8PGRlZl9jb21taXQsY29tbWl0Pj4gYXQgdGhlIHRpcCBvZiBhCisJPDxkZWZfYnJhbmNoLGJyYW5jaD4+LiAgSGVhZHMgYXJlIHN0b3JlZCBpbiBhIGZpbGUgaW4KKwlgJEdJVF9ESVIvcmVmcy9oZWFkcy9gIGRpcmVjdG9yeSwgZXhjZXB0IHdoZW4gdXNpbmcgcGFja2VkIHJlZnMuIChTZWUKKwlsaW5rZ2l0OmdpdC1wYWNrLXJlZnNbMV0uKQorCitbW2RlZl9IRUFEXV1IRUFEOjoKKwlUaGUgY3VycmVudCA8PGRlZl9icmFuY2gsYnJhbmNoPj4uICBJbiBtb3JlIGRldGFpbDogWW91ciA8PGRlZl93b3JraW5nX3RyZWUsCisJd29ya2luZyB0cmVlPj4gaXMgbm9ybWFsbHkgZGVyaXZlZCBmcm9tIHRoZSBzdGF0ZSBvZiB0aGUgdHJlZQorCXJlZmVycmVkIHRvIGJ5IEhFQUQuICBIRUFEIGlzIGEgcmVmZXJlbmNlIHRvIG9uZSBvZiB0aGUKKwk8PGRlZl9oZWFkLGhlYWRzPj4gaW4geW91ciByZXBvc2l0b3J5LCBleGNlcHQgd2hlbiB1c2luZyBhCisJPDxkZWZfZGV0YWNoZWRfSEVBRCxkZXRhY2hlZCBIRUFEPj4sIGluIHdoaWNoIGNhc2UgaXQgZGlyZWN0bHkKKwlyZWZlcmVuY2VzIGFuIGFyYml0cmFyeSBjb21taXQuCisKK1tbZGVmX2hlYWRfcmVmXV1oZWFkIHJlZjo6CisJQSBzeW5vbnltIGZvciA8PGRlZl9oZWFkLGhlYWQ+Pi4KKworW1tkZWZfaG9va11daG9vazo6CisJRHVyaW5nIHRoZSBub3JtYWwgZXhlY3V0aW9uIG9mIHNldmVyYWwgR2l0IGNvbW1hbmRzLCBjYWxsLW91dHMgYXJlIG1hZGUKKwl0byBvcHRpb25hbCBzY3JpcHRzIHRoYXQgYWxsb3cgYSBkZXZlbG9wZXIgdG8gYWRkIGZ1bmN0aW9uYWxpdHkgb3IKKwljaGVja2luZy4gVHlwaWNhbGx5LCB0aGUgaG9va3MgYWxsb3cgZm9yIGEgY29tbWFuZCB0byBiZSBwcmUtdmVyaWZpZWQKKwlhbmQgcG90ZW50aWFsbHkgYWJvcnRlZCwgYW5kIGFsbG93IGZvciBhIHBvc3Qtbm90aWZpY2F0aW9uIGFmdGVyIHRoZQorCW9wZXJhdGlvbiBpcyBkb25lLiBUaGUgaG9vayBzY3JpcHRzIGFyZSBmb3VuZCBpbiB0aGUKKwlgJEdJVF9ESVIvaG9va3MvYCBkaXJlY3RvcnksIGFuZCBhcmUgZW5hYmxlZCBieSBzaW1wbHkKKwlyZW1vdmluZyB0aGUgYC5zYW1wbGVgIHN1ZmZpeCBmcm9tIHRoZSBmaWxlbmFtZS4gSW4gZWFybGllciB2ZXJzaW9ucworCW9mIEdpdCB5b3UgaGFkIHRvIG1ha2UgdGhlbSBleGVjdXRhYmxlLgorCitbW2RlZl9pbmRleF1daW5kZXg6OgorCUEgY29sbGVjdGlvbiBvZiBmaWxlcyB3aXRoIHN0YXQgaW5mb3JtYXRpb24sIHdob3NlIGNvbnRlbnRzIGFyZSBzdG9yZWQKKwlhcyBvYmplY3RzLiBUaGUgaW5kZXggaXMgYSBzdG9yZWQgdmVyc2lvbiBvZiB5b3VyCisJPDxkZWZfd29ya2luZ190cmVlLHdvcmtpbmcgdHJlZT4+LiBUcnV0aCBiZSB0b2xkLCBpdCBjYW4gYWxzbyBjb250YWluIGEgc2Vjb25kLCBhbmQgZXZlbgorCWEgdGhpcmQgdmVyc2lvbiBvZiBhIHdvcmtpbmcgdHJlZSwgd2hpY2ggYXJlIHVzZWQKKwl3aGVuIDw8ZGVmX21lcmdlLG1lcmdpbmc+Pi4KKworW1tkZWZfaW5kZXhfZW50cnldXWluZGV4IGVudHJ5OjoKKwlUaGUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGEgcGFydGljdWxhciBmaWxlLCBzdG9yZWQgaW4gdGhlCisJPDxkZWZfaW5kZXgsaW5kZXg+Pi4gQW4gaW5kZXggZW50cnkgY2FuIGJlIHVubWVyZ2VkLCBpZiBhCisJPDxkZWZfbWVyZ2UsbWVyZ2U+PiB3YXMgc3RhcnRlZCwgYnV0IG5vdCB5ZXQgZmluaXNoZWQgKGkuZS4gaWYKKwl0aGUgaW5kZXggY29udGFpbnMgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhhdCBmaWxlKS4KKworW1tkZWZfbWFzdGVyXV1tYXN0ZXI6OgorCVRoZSBkZWZhdWx0IGRldmVsb3BtZW50IDw8ZGVmX2JyYW5jaCxicmFuY2g+Pi4gV2hlbmV2ZXIgeW91CisJY3JlYXRlIGEgR2l0IDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LCBhIGJyYW5jaCBuYW1lZAorCSJtYXN0ZXIiIGlzIGNyZWF0ZWQsIGFuZCBiZWNvbWVzIHRoZSBhY3RpdmUgYnJhbmNoLiBJbiBtb3N0CisJY2FzZXMsIHRoaXMgY29udGFpbnMgdGhlIGxvY2FsIGRldmVsb3BtZW50LCB0aG91Z2ggdGhhdCBpcworCXB1cmVseSBieSBjb252ZW50aW9uIGFuZCBpcyBub3QgcmVxdWlyZWQuCisKK1tbZGVmX21lcmdlXV1tZXJnZTo6CisJQXMgYSB2ZXJiOiBUbyBicmluZyB0aGUgY29udGVudHMgb2YgYW5vdGhlcgorCTw8ZGVmX2JyYW5jaCxicmFuY2g+PiAocG9zc2libHkgZnJvbSBhbiBleHRlcm5hbAorCTw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+KSBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4gIEluIHRoZQorCWNhc2Ugd2hlcmUgdGhlIG1lcmdlZC1pbiBicmFuY2ggaXMgZnJvbSBhIGRpZmZlcmVudCByZXBvc2l0b3J5LAorCXRoaXMgaXMgZG9uZSBieSBmaXJzdCA8PGRlZl9mZXRjaCxmZXRjaGluZz4+IHRoZSByZW1vdGUgYnJhbmNoCisJYW5kIHRoZW4gbWVyZ2luZyB0aGUgcmVzdWx0IGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLiAgVGhpcworCWNvbWJpbmF0aW9uIG9mIGZldGNoIGFuZCBtZXJnZSBvcGVyYXRpb25zIGlzIGNhbGxlZCBhCisJPDxkZWZfcHVsbCxwdWxsPj4uICBNZXJnaW5nIGlzIHBlcmZvcm1lZCBieSBhbiBhdXRvbWF0aWMgcHJvY2VzcworCXRoYXQgaWRlbnRpZmllcyBjaGFuZ2VzIG1hZGUgc2luY2UgdGhlIGJyYW5jaGVzIGRpdmVyZ2VkLCBhbmQKKwl0aGVuIGFwcGxpZXMgYWxsIHRob3NlIGNoYW5nZXMgdG9nZXRoZXIuICBJbiBjYXNlcyB3aGVyZSBjaGFuZ2VzCisJY29uZmxpY3QsIG1hbnVhbCBpbnRlcnZlbnRpb24gbWF5IGJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHRoZQorCW1lcmdlLgorKworQXMgYSBub3VuOiB1bmxlc3MgaXQgaXMgYSA8PGRlZl9mYXN0X2ZvcndhcmQsZmFzdC1mb3J3YXJkPj4sIGEKK3N1Y2Nlc3NmdWwgbWVyZ2UgcmVzdWx0cyBpbiB0aGUgY3JlYXRpb24gb2YgYSBuZXcgPDxkZWZfY29tbWl0LGNvbW1pdD4+CityZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UsIGFuZCBoYXZpbmcgYXMKKzw8ZGVmX3BhcmVudCxwYXJlbnRzPj4gdGhlIHRpcHMgb2YgdGhlIG1lcmdlZCA8PGRlZl9icmFuY2gsYnJhbmNoZXM+Pi4KK1RoaXMgY29tbWl0IGlzIHJlZmVycmVkIHRvIGFzIGEgIm1lcmdlIGNvbW1pdCIsIG9yIHNvbWV0aW1lcyBqdXN0IGEKKyJtZXJnZSIuCisKK1tbZGVmX29iamVjdF1db2JqZWN0OjoKKwlUaGUgdW5pdCBvZiBzdG9yYWdlIGluIEdpdC4gSXQgaXMgdW5pcXVlbHkgaWRlbnRpZmllZCBieSB0aGUKKwk8PGRlZl9TSEExLFNIQS0xPj4gb2YgaXRzIGNvbnRlbnRzLiBDb25zZXF1ZW50bHksIGFuCisJb2JqZWN0IGNhbiBub3QgYmUgY2hhbmdlZC4KKworW1tkZWZfb2JqZWN0X2RhdGFiYXNlXV1vYmplY3QgZGF0YWJhc2U6OgorCVN0b3JlcyBhIHNldCBvZiAib2JqZWN0cyIsIGFuZCBhbiBpbmRpdmlkdWFsIDw8ZGVmX29iamVjdCxvYmplY3Q+PiBpcworCWlkZW50aWZpZWQgYnkgaXRzIDw8ZGVmX29iamVjdF9uYW1lLG9iamVjdCBuYW1lPj4uIFRoZSBvYmplY3RzIHVzdWFsbHkKKwlsaXZlIGluIGAkR0lUX0RJUi9vYmplY3RzL2AuCisKK1tbZGVmX29iamVjdF9pZGVudGlmaWVyXV1vYmplY3QgaWRlbnRpZmllcjo6CisJU3lub255bSBmb3IgPDxkZWZfb2JqZWN0X25hbWUsb2JqZWN0IG5hbWU+Pi4KKworW1tkZWZfb2JqZWN0X25hbWVdXW9iamVjdCBuYW1lOjoKKwlUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgYW4gPDxkZWZfb2JqZWN0LG9iamVjdD4+LiAgVGhlCisJb2JqZWN0IG5hbWUgaXMgdXN1YWxseSByZXByZXNlbnRlZCBieSBhIDQwIGNoYXJhY3RlcgorCWhleGFkZWNpbWFsIHN0cmluZy4gIEFsc28gY29sbG9xdWlhbGx5IGNhbGxlZCA8PGRlZl9TSEExLFNIQS0xPj4uCisKK1tbZGVmX29iamVjdF90eXBlXV1vYmplY3QgdHlwZTo6CisJT25lIG9mIHRoZSBpZGVudGlmaWVycyAiPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQ+PiIsCisJIjw8ZGVmX3RyZWVfb2JqZWN0LHRyZWU+PiIsICI8PGRlZl90YWdfb2JqZWN0LHRhZz4+IiBvcgorCSI8PGRlZl9ibG9iX29iamVjdCxibG9iPj4iIGRlc2NyaWJpbmcgdGhlIHR5cGUgb2YgYW4KKwk8PGRlZl9vYmplY3Qsb2JqZWN0Pj4uCisKK1tbZGVmX29jdG9wdXNdXW9jdG9wdXM6OgorCVRvIDw8ZGVmX21lcmdlLG1lcmdlPj4gbW9yZSB0aGFuIHR3byA8PGRlZl9icmFuY2gsYnJhbmNoZXM+Pi4KKworW1tkZWZfb3JpZ2luXV1vcmlnaW46OgorCVRoZSBkZWZhdWx0IHVwc3RyZWFtIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+LiBNb3N0IHByb2plY3RzIGhhdmUKKwlhdCBsZWFzdCBvbmUgdXBzdHJlYW0gcHJvamVjdCB3aGljaCB0aGV5IHRyYWNrLiBCeSBkZWZhdWx0CisJJ29yaWdpbicgaXMgdXNlZCBmb3IgdGhhdCBwdXJwb3NlLiBOZXcgdXBzdHJlYW0gdXBkYXRlcworCXdpbGwgYmUgZmV0Y2hlZCBpbnRvIDw8ZGVmX3JlbW90ZV90cmFja2luZ19icmFuY2gscmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzPj4gbmFtZWQKKwlvcmlnaW4vbmFtZS1vZi11cHN0cmVhbS1icmFuY2gsIHdoaWNoIHlvdSBjYW4gc2VlIHVzaW5nCisJYGdpdCBicmFuY2ggLXJgLgorCitbW2RlZl9wYWNrXV1wYWNrOjoKKwlBIHNldCBvZiBvYmplY3RzIHdoaWNoIGhhdmUgYmVlbiBjb21wcmVzc2VkIGludG8gb25lIGZpbGUgKHRvIHNhdmUgc3BhY2UKKwlvciB0byB0cmFuc21pdCB0aGVtIGVmZmljaWVudGx5KS4KKworW1tkZWZfcGFja19pbmRleF1dcGFjayBpbmRleDo6CisJVGhlIGxpc3Qgb2YgaWRlbnRpZmllcnMsIGFuZCBvdGhlciBpbmZvcm1hdGlvbiwgb2YgdGhlIG9iamVjdHMgaW4gYQorCTw8ZGVmX3BhY2sscGFjaz4+LCB0byBhc3Npc3QgaW4gZWZmaWNpZW50bHkgYWNjZXNzaW5nIHRoZSBjb250ZW50cyBvZiBhCisJcGFjay4KKworW1tkZWZfcGF0aHNwZWNdXXBhdGhzcGVjOjoKKwlQYXR0ZXJuIHVzZWQgdG8gbGltaXQgcGF0aHMgaW4gR2l0IGNvbW1hbmRzLgorKworUGF0aHNwZWNzIGFyZSB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgb2YgImdpdCBscy1maWxlcyIsICJnaXQKK2xzLXRyZWUiLCAiZ2l0IGFkZCIsICJnaXQgZ3JlcCIsICJnaXQgZGlmZiIsICJnaXQgY2hlY2tvdXQiLAorYW5kIG1hbnkgb3RoZXIgY29tbWFuZHMgdG8KK2xpbWl0IHRoZSBzY29wZSBvZiBvcGVyYXRpb25zIHRvIHNvbWUgc3Vic2V0IG9mIHRoZSB0cmVlIG9yCit3b3JrdHJlZS4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBlYWNoIGNvbW1hbmQgZm9yIHdoZXRoZXIKK3BhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb3IgdG9wbGV2ZWwuICBUaGUKK3BhdGhzcGVjIHN5bnRheCBpcyBhcyBmb2xsb3dzOgorKworLS0KKworKiBhbnkgcGF0aCBtYXRjaGVzIGl0c2VsZgorKiB0aGUgcGF0aHNwZWMgdXAgdG8gdGhlIGxhc3Qgc2xhc2ggcmVwcmVzZW50cyBhCisgIGRpcmVjdG9yeSBwcmVmaXguICBUaGUgc2NvcGUgb2YgdGhhdCBwYXRoc3BlYyBpcworICBsaW1pdGVkIHRvIHRoYXQgc3VidHJlZS4KKyogdGhlIHJlc3Qgb2YgdGhlIHBhdGhzcGVjIGlzIGEgcGF0dGVybiBmb3IgdGhlIHJlbWFpbmRlcgorICBvZiB0aGUgcGF0aG5hbWUuICBQYXRocyByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5CisgIHByZWZpeCB3aWxsIGJlIG1hdGNoZWQgYWdhaW5zdCB0aGF0IHBhdHRlcm4gdXNpbmcgZm5tYXRjaCgzKTsKKyAgaW4gcGFydGljdWxhciwgJyonIGFuZCAnPycgX2Nhbl8gbWF0Y2ggZGlyZWN0b3J5IHNlcGFyYXRvcnMuCisKKy0tCisrCitGb3IgZXhhbXBsZSwgRG9jdW1lbnRhdGlvbi8qLmpwZyB3aWxsIG1hdGNoIGFsbCAuanBnIGZpbGVzCitpbiB0aGUgRG9jdW1lbnRhdGlvbiBzdWJ0cmVlLAoraW5jbHVkaW5nIERvY3VtZW50YXRpb24vY2hhcHRlcl8xL2ZpZ3VyZV8xLmpwZy4KKysKK0EgcGF0aHNwZWMgdGhhdCBiZWdpbnMgd2l0aCBhIGNvbG9uIGA6YCBoYXMgc3BlY2lhbCBtZWFuaW5nLiAgSW4gdGhlCitzaG9ydCBmb3JtLCB0aGUgbGVhZGluZyBjb2xvbiBgOmAgaXMgZm9sbG93ZWQgYnkgemVybyBvciBtb3JlICJtYWdpYworc2lnbmF0dXJlIiBsZXR0ZXJzICh3aGljaCBvcHRpb25hbGx5IGlzIHRlcm1pbmF0ZWQgYnkgYW5vdGhlciBjb2xvbiBgOmApLAorYW5kIHRoZSByZW1haW5kZXIgaXMgdGhlIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgcGF0aC4KK1RoZSAibWFnaWMgc2lnbmF0dXJlIiBjb25zaXN0cyBvZiBBU0NJSSBzeW1ib2xzIHRoYXQgYXJlIG5laXRoZXIKK2FscGhhbnVtZXJpYywgZ2xvYiwgcmVnZXggc3BlY2lhbCBjaGFyYWN0ZXJzIG5vciBjb2xvbi4KK1RoZSBvcHRpb25hbCBjb2xvbiB0aGF0IHRlcm1pbmF0ZXMgdGhlICJtYWdpYyBzaWduYXR1cmUiIGNhbiBiZQorb21pdHRlZCBpZiB0aGUgcGF0dGVybiBiZWdpbnMgd2l0aCBhIGNoYXJhY3RlciB0aGF0IGRvZXMgbm90IGJlbG9uZyB0bworIm1hZ2ljIHNpZ25hdHVyZSIgc3ltYm9sIHNldCBhbmQgaXMgbm90IGEgY29sb24uCisrCitJbiB0aGUgbG9uZyBmb3JtLCB0aGUgbGVhZGluZyBjb2xvbiBgOmAgaXMgZm9sbG93ZWQgYnkgYSBvcGVuCitwYXJlbnRoZXNpcyBgKGAsIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgemVybyBvciBtb3JlICJtYWdpYyB3b3JkcyIsCithbmQgYSBjbG9zZSBwYXJlbnRoZXNlcyBgKWAsIGFuZCB0aGUgcmVtYWluZGVyIGlzIHRoZSBwYXR0ZXJuIHRvIG1hdGNoCithZ2FpbnN0IHRoZSBwYXRoLgorKworQSBwYXRoc3BlYyB3aXRoIG9ubHkgYSBjb2xvbiBtZWFucyAidGhlcmUgaXMgbm8gcGF0aHNwZWMiLiBUaGlzIGZvcm0KK3Nob3VsZCBub3QgYmUgY29tYmluZWQgd2l0aCBvdGhlciBwYXRoc3BlYy4KKysKKy0tCit0b3A7OworCVRoZSBtYWdpYyB3b3JkIGB0b3BgIChtYWdpYyBzaWduYXR1cmU6IGAvYCkgbWFrZXMgdGhlIHBhdHRlcm4KKwltYXRjaCBmcm9tIHRoZSByb290IG9mIHRoZSB3b3JraW5nIHRyZWUsIGV2ZW4gd2hlbiB5b3UgYXJlCisJcnVubmluZyB0aGUgY29tbWFuZCBmcm9tIGluc2lkZSBhIHN1YmRpcmVjdG9yeS4KKworbGl0ZXJhbDs7CisJV2lsZGNhcmRzIGluIHRoZSBwYXR0ZXJuIHN1Y2ggYXMgYCpgIG9yIGA/YCBhcmUgdHJlYXRlZAorCWFzIGxpdGVyYWwgY2hhcmFjdGVycy4KKworaWNhc2U7OworCUNhc2UgaW5zZW5zaXRpdmUgbWF0Y2guCisKK2dsb2I7OworCUdpdCB0cmVhdHMgdGhlIHBhdHRlcm4gYXMgYSBzaGVsbCBnbG9iIHN1aXRhYmxlIGZvcgorCWNvbnN1bXB0aW9uIGJ5IGZubWF0Y2goMykgd2l0aCB0aGUgRk5NX1BBVEhOQU1FIGZsYWc6CisJd2lsZGNhcmRzIGluIHRoZSBwYXR0ZXJuIHdpbGwgbm90IG1hdGNoIGEgLyBpbiB0aGUgcGF0aG5hbWUuCisJRm9yIGV4YW1wbGUsICJEb2N1bWVudGF0aW9uL3thc3Rlcmlza30uaHRtbCIgbWF0Y2hlcworCSJEb2N1bWVudGF0aW9uL2dpdC5odG1sIiBidXQgbm90ICJEb2N1bWVudGF0aW9uL3BwYy9wcGMuaHRtbCIKKwlvciAidG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYuaHRtbCIuCisrCitUd28gY29uc2VjdXRpdmUgYXN0ZXJpc2tzICgiYCoqYCIpIGluIHBhdHRlcm5zIG1hdGNoZWQgYWdhaW5zdAorZnVsbCBwYXRobmFtZSBtYXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmc6CisKKyAtIEEgbGVhZGluZyAiYCoqYCIgZm9sbG93ZWQgYnkgYSBzbGFzaCBtZWFucyBtYXRjaCBpbiBhbGwKKyAgIGRpcmVjdG9yaWVzLiBGb3IgZXhhbXBsZSwgImAqKi9mb29gIiBtYXRjaGVzIGZpbGUgb3IgZGlyZWN0b3J5CisgICAiYGZvb2AiIGFueXdoZXJlLCB0aGUgc2FtZSBhcyBwYXR0ZXJuICJgZm9vYCIuICJgKiovZm9vL2JhcmAiCisgICBtYXRjaGVzIGZpbGUgb3IgZGlyZWN0b3J5ICJgYmFyYCIgYW55d2hlcmUgdGhhdCBpcyBkaXJlY3RseQorICAgdW5kZXIgZGlyZWN0b3J5ICJgZm9vYCIuCisKKyAtIEEgdHJhaWxpbmcgImAvKipgIiBtYXRjaGVzIGV2ZXJ5dGhpbmcgaW5zaWRlLiBGb3IgZXhhbXBsZSwKKyAgICJgYWJjLyoqYCIgbWF0Y2hlcyBhbGwgZmlsZXMgaW5zaWRlIGRpcmVjdG9yeSAiYWJjIiwgcmVsYXRpdmUKKyAgIHRvIHRoZSBsb2NhdGlvbiBvZiB0aGUgYC5naXRpZ25vcmVgIGZpbGUsIHdpdGggaW5maW5pdGUgZGVwdGguCisKKyAtIEEgc2xhc2ggZm9sbG93ZWQgYnkgdHdvIGNvbnNlY3V0aXZlIGFzdGVyaXNrcyB0aGVuIGEgc2xhc2gKKyAgIG1hdGNoZXMgemVybyBvciBtb3JlIGRpcmVjdG9yaWVzLiBGb3IgZXhhbXBsZSwgImBhLyoqL2JgIgorICAgbWF0Y2hlcyAiYGEvYmAiLCAiYGEveC9iYCIsICJgYS94L3kvYmAiIGFuZCBzbyBvbi4KKworIC0gT3RoZXIgY29uc2VjdXRpdmUgYXN0ZXJpc2tzIGFyZSBjb25zaWRlcmVkIGludmFsaWQuCisrCitHbG9iIG1hZ2ljIGlzIGluY29tcGF0aWJsZSB3aXRoIGxpdGVyYWwgbWFnaWMuCisKK2V4Y2x1ZGU7OworCUFmdGVyIGEgcGF0aCBtYXRjaGVzIGFueSBub24tZXhjbHVkZSBwYXRoc3BlYywgaXQgd2lsbCBiZSBydW4KKwl0aHJvdWdoIGFsbCBleGNsdWRlIHBhdGhzcGVjIChtYWdpYyBzaWduYXR1cmU6IGAhYCkuIElmIGl0CisJbWF0Y2hlcywgdGhlIHBhdGggaXMgaWdub3JlZC4KKy0tCisKK1tbZGVmX3BhcmVudF1dcGFyZW50OjoKKwlBIDw8ZGVmX2NvbW1pdF9vYmplY3QsY29tbWl0IG9iamVjdD4+IGNvbnRhaW5zIGEgKHBvc3NpYmx5IGVtcHR5KSBsaXN0CisJb2YgdGhlIGxvZ2ljYWwgcHJlZGVjZXNzb3IocykgaW4gdGhlIGxpbmUgb2YgZGV2ZWxvcG1lbnQsIGkuZS4gaXRzCisJcGFyZW50cy4KKworW1tkZWZfcGlja2F4ZV1dcGlja2F4ZTo6CisJVGhlIHRlcm0gPDxkZWZfcGlja2F4ZSxwaWNrYXhlPj4gcmVmZXJzIHRvIGFuIG9wdGlvbiB0byB0aGUgZGlmZmNvcmUKKwlyb3V0aW5lcyB0aGF0IGhlbHAgc2VsZWN0IGNoYW5nZXMgdGhhdCBhZGQgb3IgZGVsZXRlIGEgZ2l2ZW4gdGV4dAorCXN0cmluZy4gV2l0aCB0aGUgYC0tcGlja2F4ZS1hbGxgIG9wdGlvbiwgaXQgY2FuIGJlIHVzZWQgdG8gdmlldyB0aGUgZnVsbAorCTw8ZGVmX2NoYW5nZXNldCxjaGFuZ2VzZXQ+PiB0aGF0IGludHJvZHVjZWQgb3IgcmVtb3ZlZCwgc2F5LCBhCisJcGFydGljdWxhciBsaW5lIG9mIHRleHQuIFNlZSBsaW5rZ2l0OmdpdC1kaWZmWzFdLgorCitbW2RlZl9wbHVtYmluZ11dcGx1bWJpbmc6OgorCUN1dGUgbmFtZSBmb3IgPDxkZWZfY29yZV9naXQsY29yZSBHaXQ+Pi4KKworW1tkZWZfcG9yY2VsYWluXV1wb3JjZWxhaW46OgorCUN1dGUgbmFtZSBmb3IgcHJvZ3JhbXMgYW5kIHByb2dyYW0gc3VpdGVzIGRlcGVuZGluZyBvbgorCTw8ZGVmX2NvcmVfZ2l0LGNvcmUgR2l0Pj4sIHByZXNlbnRpbmcgYSBoaWdoIGxldmVsIGFjY2VzcyB0bworCWNvcmUgR2l0LiBQb3JjZWxhaW5zIGV4cG9zZSBtb3JlIG9mIGEgPDxkZWZfU0NNLFNDTT4+CisJaW50ZXJmYWNlIHRoYW4gdGhlIDw8ZGVmX3BsdW1iaW5nLHBsdW1iaW5nPj4uCisKK1tbZGVmX3Blcl93b3JrdHJlZV9yZWZdXXBlci13b3JrdHJlZSByZWY6OgorCVJlZnMgdGhhdCBhcmUgcGVyLTw8ZGVmX3dvcmtpbmdfdHJlZSx3b3JrdHJlZT4+LCByYXRoZXIgdGhhbgorCWdsb2JhbC4gIFRoaXMgaXMgcHJlc2VudGx5IG9ubHkgPDxkZWZfSEVBRCxIRUFEPj4gYW5kIGFueSByZWZzCisJdGhhdCBzdGFydCB3aXRoIGByZWZzL2Jpc2VjdC9gLCBidXQgbWlnaHQgbGF0ZXIgaW5jbHVkZSBvdGhlcgorCXVudXN1YWwgcmVmcy4KKworW1tkZWZfcHNldWRvcmVmXV1wc2V1ZG9yZWY6OgorCVBzZXVkb3JlZnMgYXJlIGEgY2xhc3Mgb2YgZmlsZXMgdW5kZXIgYCRHSVRfRElSYCB3aGljaCBiZWhhdmUKKwlsaWtlIHJlZnMgZm9yIHRoZSBwdXJwb3NlcyBvZiByZXYtcGFyc2UsIGJ1dCB3aGljaCBhcmUgdHJlYXRlZAorCXNwZWNpYWxseSBieSBnaXQuICBQc2V1ZG9yZWZzIGJvdGggaGF2ZSBuYW1lcyB0aGF0IGFyZSBhbGwtY2FwcywKKwlhbmQgYWx3YXlzIHN0YXJ0IHdpdGggYSBsaW5lIGNvbnNpc3Rpbmcgb2YgYQorCTw8ZGVmX1NIQTEsU0hBLTE+PiBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLiAgU28sIEhFQUQgaXMgbm90IGEKKwlwc2V1ZG9yZWYsIGJlY2F1c2UgaXQgaXMgc29tZXRpbWVzIGEgc3ltYm9saWMgcmVmLiAgVGhleSBtaWdodAorCW9wdGlvbmFsbHkgY29udGFpbiBzb21lIGFkZGl0aW9uYWwgZGF0YS4gIGBNRVJHRV9IRUFEYCBhbmQKKwlgQ0hFUlJZX1BJQ0tfSEVBRGAgYXJlIGV4YW1wbGVzLiAgVW5saWtlCisJPDxkZWZfcGVyX3dvcmt0cmVlX3JlZixwZXItd29ya3RyZWUgcmVmcz4+LCB0aGVzZSBmaWxlcyBjYW5ub3QKKwliZSBzeW1ib2xpYyByZWZzLCBhbmQgbmV2ZXIgaGF2ZSByZWZsb2dzLiAgVGhleSBhbHNvIGNhbm5vdCBiZQorCXVwZGF0ZWQgdGhyb3VnaCB0aGUgbm9ybWFsIHJlZiB1cGRhdGUgbWFjaGluZXJ5LiAgSW5zdGVhZCwKKwl0aGV5IGFyZSB1cGRhdGVkIGJ5IGRpcmVjdGx5IHdyaXRpbmcgdG8gdGhlIGZpbGVzLiAgSG93ZXZlciwKKwl0aGV5IGNhbiBiZSByZWFkIGFzIGlmIHRoZXkgd2VyZSByZWZzLCBzbyBgZ2l0IHJldi1wYXJzZQorCU1FUkdFX0hFQURgIHdpbGwgd29yay4KKworW1tkZWZfcHVsbF1dcHVsbDo6CisJUHVsbGluZyBhIDw8ZGVmX2JyYW5jaCxicmFuY2g+PiBtZWFucyB0byA8PGRlZl9mZXRjaCxmZXRjaD4+IGl0IGFuZAorCTw8ZGVmX21lcmdlLG1lcmdlPj4gaXQuICBTZWUgYWxzbyBsaW5rZ2l0OmdpdC1wdWxsWzFdLgorCitbW2RlZl9wdXNoXV1wdXNoOjoKKwlQdXNoaW5nIGEgPDxkZWZfYnJhbmNoLGJyYW5jaD4+IG1lYW5zIHRvIGdldCB0aGUgYnJhbmNoJ3MKKwk8PGRlZl9oZWFkX3JlZixoZWFkIHJlZj4+IGZyb20gYSByZW1vdGUgPDxkZWZfcmVwb3NpdG9yeSxyZXBvc2l0b3J5Pj4sCisJZmluZCBvdXQgaWYgaXQgaXMgYSBkaXJlY3QgYW5jZXN0b3IgdG8gdGhlIGJyYW5jaCdzIGxvY2FsCisJaGVhZCByZWYsIGFuZCBpbiB0aGF0IGNhc2UsIHB1dHRpbmcgYWxsCisJb2JqZWN0cywgd2hpY2ggYXJlIDw8ZGVmX3JlYWNoYWJsZSxyZWFjaGFibGU+PiBmcm9tIHRoZSBsb2NhbAorCWhlYWQgcmVmLCBhbmQgd2hpY2ggYXJlIG1pc3NpbmcgZnJvbSB0aGUgcmVtb3RlCisJcmVwb3NpdG9yeSwgaW50byB0aGUgcmVtb3RlCisJPDxkZWZfb2JqZWN0X2RhdGFiYXNlLG9iamVjdCBkYXRhYmFzZT4+LCBhbmQgdXBkYXRpbmcgdGhlIHJlbW90ZQorCWhlYWQgcmVmLiBJZiB0aGUgcmVtb3RlIDw8ZGVmX2hlYWQsaGVhZD4+IGlzIG5vdCBhbgorCWFuY2VzdG9yIHRvIHRoZSBsb2NhbCBoZWFkLCB0aGUgcHVzaCBmYWlscy4KKworW1tkZWZfcmVhY2hhYmxlXV1yZWFjaGFibGU6OgorCUFsbCBvZiB0aGUgYW5jZXN0b3JzIG9mIGEgZ2l2ZW4gPDxkZWZfY29tbWl0LGNvbW1pdD4+IGFyZSBzYWlkIHRvIGJlCisJInJlYWNoYWJsZSIgZnJvbSB0aGF0IGNvbW1pdC4gTW9yZQorCWdlbmVyYWxseSwgb25lIDw8ZGVmX29iamVjdCxvYmplY3Q+PiBpcyByZWFjaGFibGUgZnJvbQorCWFub3RoZXIgaWYgd2UgY2FuIHJlYWNoIHRoZSBvbmUgZnJvbSB0aGUgb3RoZXIgYnkgYSA8PGRlZl9jaGFpbixjaGFpbj4+CisJdGhhdCBmb2xsb3dzIDw8ZGVmX3RhZyx0YWdzPj4gdG8gd2hhdGV2ZXIgdGhleSB0YWcsCisJPDxkZWZfY29tbWl0X29iamVjdCxjb21taXRzPj4gdG8gdGhlaXIgcGFyZW50cyBvciB0cmVlcywgYW5kCisJPDxkZWZfdHJlZV9vYmplY3QsdHJlZXM+PiB0byB0aGUgdHJlZXMgb3IgPDxkZWZfYmxvYl9vYmplY3QsYmxvYnM+PgorCXRoYXQgdGhleSBjb250YWluLgorCitbW2RlZl9yZWJhc2VdXXJlYmFzZTo6CisJVG8gcmVhcHBseSBhIHNlcmllcyBvZiBjaGFuZ2VzIGZyb20gYSA8PGRlZl9icmFuY2gsYnJhbmNoPj4gdG8gYQorCWRpZmZlcmVudCBiYXNlLCBhbmQgcmVzZXQgdGhlIDw8ZGVmX2hlYWQsaGVhZD4+IG9mIHRoYXQgYnJhbmNoCisJdG8gdGhlIHJlc3VsdC4KKworW1tkZWZfcmVmXV1yZWY6OgorCUEgbmFtZSB0aGF0IGJlZ2lucyB3aXRoIGByZWZzL2AgKGUuZy4gYHJlZnMvaGVhZHMvbWFzdGVyYCkKKwl0aGF0IHBvaW50cyB0byBhbiA8PGRlZl9vYmplY3RfbmFtZSxvYmplY3QgbmFtZT4+IG9yIGFub3RoZXIKKwlyZWYgKHRoZSBsYXR0ZXIgaXMgY2FsbGVkIGEgPDxkZWZfc3ltcmVmLHN5bWJvbGljIHJlZj4+KS4KKwlGb3IgY29udmVuaWVuY2UsIGEgcmVmIGNhbiBzb21ldGltZXMgYmUgYWJicmV2aWF0ZWQgd2hlbiB1c2VkCisJYXMgYW4gYXJndW1lbnQgdG8gYSBHaXQgY29tbWFuZDsgc2VlIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddCisJZm9yIGRldGFpbHMuCisJUmVmcyBhcmUgc3RvcmVkIGluIHRoZSA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+Pi4KKysKK1RoZSByZWYgbmFtZXNwYWNlIGlzIGhpZXJhcmNoaWNhbC4KK0RpZmZlcmVudCBzdWJoaWVyYXJjaGllcyBhcmUgdXNlZCBmb3IgZGlmZmVyZW50IHB1cnBvc2VzIChlLmcuIHRoZQorYHJlZnMvaGVhZHMvYCBoaWVyYXJjaHkgaXMgdXNlZCB0byByZXByZXNlbnQgbG9jYWwgYnJhbmNoZXMpLgorKworVGhlcmUgYXJlIGEgZmV3IHNwZWNpYWwtcHVycG9zZSByZWZzIHRoYXQgZG8gbm90IGJlZ2luIHdpdGggYHJlZnMvYC4KK1RoZSBtb3N0IG5vdGFibGUgZXhhbXBsZSBpcyBgSEVBRGAuCisKK1tbZGVmX3JlZmxvZ11dcmVmbG9nOjoKKwlBIHJlZmxvZyBzaG93cyB0aGUgbG9jYWwgImhpc3RvcnkiIG9mIGEgcmVmLiAgSW4gb3RoZXIgd29yZHMsCisJaXQgY2FuIHRlbGwgeW91IHdoYXQgdGhlIDNyZCBsYXN0IHJldmlzaW9uIGluIF90aGlzXyByZXBvc2l0b3J5CisJd2FzLCBhbmQgd2hhdCB3YXMgdGhlIGN1cnJlbnQgc3RhdGUgaW4gX3RoaXNfIHJlcG9zaXRvcnksCisJeWVzdGVyZGF5IDk6MTRwbS4gIFNlZSBsaW5rZ2l0OmdpdC1yZWZsb2dbMV0gZm9yIGRldGFpbHMuCisKK1tbZGVmX3JlZnNwZWNdXXJlZnNwZWM6OgorCUEgInJlZnNwZWMiIGlzIHVzZWQgYnkgPDxkZWZfZmV0Y2gsZmV0Y2g+PiBhbmQKKwk8PGRlZl9wdXNoLHB1c2g+PiB0byBkZXNjcmliZSB0aGUgbWFwcGluZyBiZXR3ZWVuIHJlbW90ZQorCTw8ZGVmX3JlZixyZWY+PiBhbmQgbG9jYWwgcmVmLgorCitbW2RlZl9yZW1vdGVdXXJlbW90ZSByZXBvc2l0b3J5OjoKKwlBIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+IHdoaWNoIGlzIHVzZWQgdG8gdHJhY2sgdGhlIHNhbWUKKwlwcm9qZWN0IGJ1dCByZXNpZGVzIHNvbWV3aGVyZSBlbHNlLiBUbyBjb21tdW5pY2F0ZSB3aXRoIHJlbW90ZXMsCisJc2VlIDw8ZGVmX2ZldGNoLGZldGNoPj4gb3IgPDxkZWZfcHVzaCxwdXNoPj4uCisKK1tbZGVmX3JlbW90ZV90cmFja2luZ19icmFuY2hdXXJlbW90ZS10cmFja2luZyBicmFuY2g6OgorCUEgPDxkZWZfcmVmLHJlZj4+IHRoYXQgaXMgdXNlZCB0byBmb2xsb3cgY2hhbmdlcyBmcm9tIGFub3RoZXIKKwk8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+Pi4gSXQgdHlwaWNhbGx5IGxvb2tzIGxpa2UKKwkncmVmcy9yZW1vdGVzL2Zvby9iYXInIChpbmRpY2F0aW5nIHRoYXQgaXQgdHJhY2tzIGEgYnJhbmNoIG5hbWVkCisJJ2JhcicgaW4gYSByZW1vdGUgbmFtZWQgJ2ZvbycpLCBhbmQgbWF0Y2hlcyB0aGUgcmlnaHQtaGFuZC1zaWRlIG9mCisJYSBjb25maWd1cmVkIGZldGNoIDw8ZGVmX3JlZnNwZWMscmVmc3BlYz4+LiBBIHJlbW90ZS10cmFja2luZworCWJyYW5jaCBzaG91bGQgbm90IGNvbnRhaW4gZGlyZWN0IG1vZGlmaWNhdGlvbnMgb3IgaGF2ZSBsb2NhbAorCWNvbW1pdHMgbWFkZSB0byBpdC4KKworW1tkZWZfcmVwb3NpdG9yeV1dcmVwb3NpdG9yeTo6CisJQSBjb2xsZWN0aW9uIG9mIDw8ZGVmX3JlZixyZWZzPj4gdG9nZXRoZXIgd2l0aCBhbgorCTw8ZGVmX29iamVjdF9kYXRhYmFzZSxvYmplY3QgZGF0YWJhc2U+PiBjb250YWluaW5nIGFsbCBvYmplY3RzCisJd2hpY2ggYXJlIDw8ZGVmX3JlYWNoYWJsZSxyZWFjaGFibGU+PiBmcm9tIHRoZSByZWZzLCBwb3NzaWJseQorCWFjY29tcGFuaWVkIGJ5IG1ldGEgZGF0YSBmcm9tIG9uZSBvciBtb3JlIDw8ZGVmX3BvcmNlbGFpbixwb3JjZWxhaW5zPj4uIEEKKwlyZXBvc2l0b3J5IGNhbiBzaGFyZSBhbiBvYmplY3QgZGF0YWJhc2Ugd2l0aCBvdGhlciByZXBvc2l0b3JpZXMKKwl2aWEgPDxkZWZfYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSxhbHRlcm5hdGVzIG1lY2hhbmlzbT4+LgorCitbW2RlZl9yZXNvbHZlXV1yZXNvbHZlOjoKKwlUaGUgYWN0aW9uIG9mIGZpeGluZyB1cCBtYW51YWxseSB3aGF0IGEgZmFpbGVkIGF1dG9tYXRpYworCTw8ZGVmX21lcmdlLG1lcmdlPj4gbGVmdCBiZWhpbmQuCisKK1tbZGVmX3JldmlzaW9uXV1yZXZpc2lvbjo6CisJU3lub255bSBmb3IgPDxkZWZfY29tbWl0LGNvbW1pdD4+ICh0aGUgbm91bikuCisKK1tbZGVmX3Jld2luZF1dcmV3aW5kOjoKKwlUbyB0aHJvdyBhd2F5IHBhcnQgb2YgdGhlIGRldmVsb3BtZW50LCBpLmUuIHRvIGFzc2lnbiB0aGUKKwk8PGRlZl9oZWFkLGhlYWQ+PiB0byBhbiBlYXJsaWVyIDw8ZGVmX3JldmlzaW9uLHJldmlzaW9uPj4uCisKK1tbZGVmX1NDTV1dU0NNOjoKKwlTb3VyY2UgY29kZSBtYW5hZ2VtZW50ICh0b29sKS4KKworW1tkZWZfU0hBMV1dU0hBLTE6OgorCSJTZWN1cmUgSGFzaCBBbGdvcml0aG0gMSI7IGEgY3J5cHRvZ3JhcGhpYyBoYXNoIGZ1bmN0aW9uLgorCUluIHRoZSBjb250ZXh0IG9mIEdpdCB1c2VkIGFzIGEgc3lub255bSBmb3IgPDxkZWZfb2JqZWN0X25hbWUsb2JqZWN0IG5hbWU+Pi4KKworW1tkZWZfc2hhbGxvd19yZXBvc2l0b3J5XV1zaGFsbG93IHJlcG9zaXRvcnk6OgorCUEgc2hhbGxvdyA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+PiBoYXMgYW4gaW5jb21wbGV0ZQorCWhpc3Rvcnkgc29tZSBvZiB3aG9zZSA8PGRlZl9jb21taXQsY29tbWl0cz4+IGhhdmUgPDxkZWZfcGFyZW50LHBhcmVudHM+PiBjYXV0ZXJpemVkIGF3YXkgKGluIG90aGVyCisJd29yZHMsIEdpdCBpcyB0b2xkIHRvIHByZXRlbmQgdGhhdCB0aGVzZSBjb21taXRzIGRvIG5vdCBoYXZlIHRoZQorCXBhcmVudHMsIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHJlY29yZGVkIGluIHRoZSA8PGRlZl9jb21taXRfb2JqZWN0LGNvbW1pdAorCW9iamVjdD4+KS4gVGhpcyBpcyBzb21ldGltZXMgdXNlZnVsIHdoZW4geW91IGFyZSBpbnRlcmVzdGVkIG9ubHkgaW4gdGhlCisJcmVjZW50IGhpc3Rvcnkgb2YgYSBwcm9qZWN0IGV2ZW4gdGhvdWdoIHRoZSByZWFsIGhpc3RvcnkgcmVjb3JkZWQgaW4gdGhlCisJdXBzdHJlYW0gaXMgbXVjaCBsYXJnZXIuIEEgc2hhbGxvdyByZXBvc2l0b3J5CisJaXMgY3JlYXRlZCBieSBnaXZpbmcgdGhlIGAtLWRlcHRoYCBvcHRpb24gdG8gbGlua2dpdDpnaXQtY2xvbmVbMV0sIGFuZAorCWl0cyBoaXN0b3J5IGNhbiBiZSBsYXRlciBkZWVwZW5lZCB3aXRoIGxpbmtnaXQ6Z2l0LWZldGNoWzFdLgorCitbW2RlZl9zdWJtb2R1bGVdXXN1Ym1vZHVsZTo6CisJQSA8PGRlZl9yZXBvc2l0b3J5LHJlcG9zaXRvcnk+PiB0aGF0IGhvbGRzIHRoZSBoaXN0b3J5IG9mIGEKKwlzZXBhcmF0ZSBwcm9qZWN0IGluc2lkZSBhbm90aGVyIHJlcG9zaXRvcnkgKHRoZSBsYXR0ZXIgb2YKKwl3aGljaCBpcyBjYWxsZWQgPDxkZWZfc3VwZXJwcm9qZWN0LCBzdXBlcnByb2plY3Q+PikuCisKK1tbZGVmX3N1cGVycHJvamVjdF1dc3VwZXJwcm9qZWN0OjoKKwlBIDw8ZGVmX3JlcG9zaXRvcnkscmVwb3NpdG9yeT4+IHRoYXQgcmVmZXJlbmNlcyByZXBvc2l0b3JpZXMKKwlvZiBvdGhlciBwcm9qZWN0cyBpbiBpdHMgd29ya2luZyB0cmVlIGFzIDw8ZGVmX3N1Ym1vZHVsZSxzdWJtb2R1bGVzPj4uCisJVGhlIHN1cGVycHJvamVjdCBrbm93cyBhYm91dCB0aGUgbmFtZXMgb2YgKGJ1dCBkb2VzIG5vdCBob2xkCisJY29waWVzIG9mKSBjb21taXQgb2JqZWN0cyBvZiB0aGUgY29udGFpbmVkIHN1Ym1vZHVsZXMuCisKK1tbZGVmX3N5bXJlZl1dc3ltcmVmOjoKKwlTeW1ib2xpYyByZWZlcmVuY2U6IGluc3RlYWQgb2YgY29udGFpbmluZyB0aGUgPDxkZWZfU0hBMSxTSEEtMT4+CisJaWQgaXRzZWxmLCBpdCBpcyBvZiB0aGUgZm9ybWF0ICdyZWY6IHJlZnMvc29tZS90aGluZycgYW5kIHdoZW4KKwlyZWZlcmVuY2VkLCBpdCByZWN1cnNpdmVseSBkZXJlZmVyZW5jZXMgdG8gdGhpcyByZWZlcmVuY2UuCisJJzw8ZGVmX0hFQUQsSEVBRD4+JyBpcyBhIHByaW1lIGV4YW1wbGUgb2YgYSBzeW1yZWYuIFN5bWJvbGljCisJcmVmZXJlbmNlcyBhcmUgbWFuaXB1bGF0ZWQgd2l0aCB0aGUgbGlua2dpdDpnaXQtc3ltYm9saWMtcmVmWzFdCisJY29tbWFuZC4KKworW1tkZWZfdGFnXV10YWc6OgorCUEgPDxkZWZfcmVmLHJlZj4+IHVuZGVyIGByZWZzL3RhZ3MvYCBuYW1lc3BhY2UgdGhhdCBwb2ludHMgdG8gYW4KKwlvYmplY3Qgb2YgYW4gYXJiaXRyYXJ5IHR5cGUgKHR5cGljYWxseSBhIHRhZyBwb2ludHMgdG8gZWl0aGVyIGEKKwk8PGRlZl90YWdfb2JqZWN0LHRhZz4+IG9yIGEgPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQgb2JqZWN0Pj4pLgorCUluIGNvbnRyYXN0IHRvIGEgPDxkZWZfaGVhZCxoZWFkPj4sIGEgdGFnIGlzIG5vdCB1cGRhdGVkIGJ5CisJdGhlIGBjb21taXRgIGNvbW1hbmQuIEEgR2l0IHRhZyBoYXMgbm90aGluZyB0byBkbyB3aXRoIGEgTGlzcAorCXRhZyAod2hpY2ggd291bGQgYmUgY2FsbGVkIGFuIDw8ZGVmX29iamVjdF90eXBlLG9iamVjdCB0eXBlPj4KKwlpbiBHaXQncyBjb250ZXh0KS4gQSB0YWcgaXMgbW9zdCB0eXBpY2FsbHkgdXNlZCB0byBtYXJrIGEgcGFydGljdWxhcgorCXBvaW50IGluIHRoZSBjb21taXQgYW5jZXN0cnkgPDxkZWZfY2hhaW4sY2hhaW4+Pi4KKworW1tkZWZfdGFnX29iamVjdF1ddGFnIG9iamVjdDo6CisJQW4gPDxkZWZfb2JqZWN0LG9iamVjdD4+IGNvbnRhaW5pbmcgYSA8PGRlZl9yZWYscmVmPj4gcG9pbnRpbmcgdG8KKwlhbm90aGVyIG9iamVjdCwgd2hpY2ggY2FuIGNvbnRhaW4gYSBtZXNzYWdlIGp1c3QgbGlrZSBhCisJPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQgb2JqZWN0Pj4uIEl0IGNhbiBhbHNvIGNvbnRhaW4gYSAoUEdQKQorCXNpZ25hdHVyZSwgaW4gd2hpY2ggY2FzZSBpdCBpcyBjYWxsZWQgYSAic2lnbmVkIHRhZyBvYmplY3QiLgorCitbW2RlZl90b3BpY19icmFuY2hdXXRvcGljIGJyYW5jaDo6CisJQSByZWd1bGFyIEdpdCA8PGRlZl9icmFuY2gsYnJhbmNoPj4gdGhhdCBpcyB1c2VkIGJ5IGEgZGV2ZWxvcGVyIHRvCisJaWRlbnRpZnkgYSBjb25jZXB0dWFsIGxpbmUgb2YgZGV2ZWxvcG1lbnQuIFNpbmNlIGJyYW5jaGVzIGFyZSB2ZXJ5IGVhc3kKKwlhbmQgaW5leHBlbnNpdmUsIGl0IGlzIG9mdGVuIGRlc2lyYWJsZSB0byBoYXZlIHNldmVyYWwgc21hbGwgYnJhbmNoZXMKKwl0aGF0IGVhY2ggY29udGFpbiB2ZXJ5IHdlbGwgZGVmaW5lZCBjb25jZXB0cyBvciBzbWFsbCBpbmNyZW1lbnRhbCB5ZXQKKwlyZWxhdGVkIGNoYW5nZXMuCisKK1tbZGVmX3RyZWVdXXRyZWU6OgorCUVpdGhlciBhIDw8ZGVmX3dvcmtpbmdfdHJlZSx3b3JraW5nIHRyZWU+Piwgb3IgYSA8PGRlZl90cmVlX29iamVjdCx0cmVlCisJb2JqZWN0Pj4gdG9nZXRoZXIgd2l0aCB0aGUgZGVwZW5kZW50IDw8ZGVmX2Jsb2Jfb2JqZWN0LGJsb2I+PiBhbmQgdHJlZSBvYmplY3RzCisJKGkuZS4gYSBzdG9yZWQgcmVwcmVzZW50YXRpb24gb2YgYSB3b3JraW5nIHRyZWUpLgorCitbW2RlZl90cmVlX29iamVjdF1ddHJlZSBvYmplY3Q6OgorCUFuIDw8ZGVmX29iamVjdCxvYmplY3Q+PiBjb250YWluaW5nIGEgbGlzdCBvZiBmaWxlIG5hbWVzIGFuZCBtb2RlcyBhbG9uZworCXdpdGggcmVmcyB0byB0aGUgYXNzb2NpYXRlZCBibG9iIGFuZC9vciB0cmVlIG9iamVjdHMuIEEKKwk8PGRlZl90cmVlLHRyZWU+PiBpcyBlcXVpdmFsZW50IHRvIGEgPDxkZWZfZGlyZWN0b3J5LGRpcmVjdG9yeT4+LgorCitbW2RlZl90cmVlLWlzaF1ddHJlZS1pc2ggKGFsc28gdHJlZWlzaCk6OgorCUEgPDxkZWZfdHJlZV9vYmplY3QsdHJlZSBvYmplY3Q+PiBvciBhbiA8PGRlZl9vYmplY3Qsb2JqZWN0Pj4KKwl0aGF0IGNhbiBiZSByZWN1cnNpdmVseSBkZXJlZmVyZW5jZWQgdG8gYSB0cmVlIG9iamVjdC4KKwlEZXJlZmVyZW5jaW5nIGEgPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQgb2JqZWN0Pj4geWllbGRzIHRoZQorCXRyZWUgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIDw8ZGVmX3JldmlzaW9uLHJldmlzaW9uPj4ncworCXRvcCA8PGRlZl9kaXJlY3RvcnksZGlyZWN0b3J5Pj4uCisJVGhlIGZvbGxvd2luZyBhcmUgYWxsIHRyZWUtaXNoZXM6CisJYSA8PGRlZl9jb21taXQtaXNoLGNvbW1pdC1pc2g+PiwKKwlhIHRyZWUgb2JqZWN0LAorCWEgPDxkZWZfdGFnX29iamVjdCx0YWcgb2JqZWN0Pj4gdGhhdCBwb2ludHMgdG8gYSB0cmVlIG9iamVjdCwKKwlhIHRhZyBvYmplY3QgdGhhdCBwb2ludHMgdG8gYSB0YWcgb2JqZWN0IHRoYXQgcG9pbnRzIHRvIGEgdHJlZQorCW9iamVjdCwKKwlldGMuCisKK1tbZGVmX3VubWVyZ2VkX2luZGV4XV11bm1lcmdlZCBpbmRleDo6CisJQW4gPDxkZWZfaW5kZXgsaW5kZXg+PiB3aGljaCBjb250YWlucyB1bm1lcmdlZAorCTw8ZGVmX2luZGV4X2VudHJ5LGluZGV4IGVudHJpZXM+Pi4KKworW1tkZWZfdW5yZWFjaGFibGVfb2JqZWN0XV11bnJlYWNoYWJsZSBvYmplY3Q6OgorCUFuIDw8ZGVmX29iamVjdCxvYmplY3Q+PiB3aGljaCBpcyBub3QgPDxkZWZfcmVhY2hhYmxlLHJlYWNoYWJsZT4+IGZyb20gYQorCTw8ZGVmX2JyYW5jaCxicmFuY2g+PiwgPDxkZWZfdGFnLHRhZz4+LCBvciBhbnkgb3RoZXIgcmVmZXJlbmNlLgorCitbW2RlZl91cHN0cmVhbV9icmFuY2hdXXVwc3RyZWFtIGJyYW5jaDo6CisJVGhlIGRlZmF1bHQgPDxkZWZfYnJhbmNoLGJyYW5jaD4+IHRoYXQgaXMgbWVyZ2VkIGludG8gdGhlIGJyYW5jaCBpbgorCXF1ZXN0aW9uIChvciB0aGUgYnJhbmNoIGluIHF1ZXN0aW9uIGlzIHJlYmFzZWQgb250bykuIEl0IGlzIGNvbmZpZ3VyZWQKKwl2aWEgYnJhbmNoLjxuYW1lPi5yZW1vdGUgYW5kIGJyYW5jaC48bmFtZT4ubWVyZ2UuIElmIHRoZSB1cHN0cmVhbSBicmFuY2gKKwlvZiAnQScgaXMgJ29yaWdpbi9CJyBzb21ldGltZXMgd2Ugc2F5ICInQScgaXMgdHJhY2tpbmcgJ29yaWdpbi9CJyIuCisKK1tbZGVmX3dvcmtpbmdfdHJlZV1dd29ya2luZyB0cmVlOjoKKwlUaGUgdHJlZSBvZiBhY3R1YWwgY2hlY2tlZCBvdXQgZmlsZXMuICBUaGUgd29ya2luZyB0cmVlIG5vcm1hbGx5CisJY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIHRoZSA8PGRlZl9IRUFELEhFQUQ+PiBjb21taXQncyB0cmVlLAorCXBsdXMgYW55IGxvY2FsIGNoYW5nZXMgdGhhdCB5b3UgaGF2ZSBtYWRlIGJ1dCBub3QgeWV0IGNvbW1pdHRlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8taW5kZXguc2ggYi9Eb2N1bWVudGF0aW9uL2hvd3RvLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE2N2IzNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvLWluZGV4LnNoCkBAIC0wLDAgKzEsNTYgQEAKKyMhL2Jpbi9zaAorCitjYXQgPDxcRU9GCitHaXQgSG93dG8gSW5kZXgKKz09PT09PT09PT09PT09PQorCitIZXJlIGlzIGEgY29sbGVjdGlvbiBvZiBtYWlsaW5nIGxpc3QgcG9zdGluZ3MgbWFkZSBieSB2YXJpb3VzCitwZW9wbGUgZGVzY3JpYmluZyBob3cgdGhleSB1c2UgR2l0IGluIHRoZWlyIHdvcmtmbG93LgorCitFT0YKKworZm9yIHR4dAorZG8KKwl0aXRsZT0kKGV4cHIgIiR0eHQiIDogJy4qL1woLipcKVwudHh0JCcpCisJZnJvbT0kKHNlZCAtbmUgJworCS9eJC9xCisJL15Gcm9tOlsgCV0veworCQlzLy8vCisJCXMvXlsgCV0qLy8KKwkJcy9bIAldKiQvLworCQlzL14vYnkgLworCQlwCisJfQorCScgIiR0eHQiKQorCisJYWJzdHJhY3Q9JChzZWQgLW5lICcKKwkvXkFic3RyYWN0OlsgCV0veworCQlzL15bXiAJXSovLworCQl4CisJCXMvLiovLworCQl4CisJCTogYWdhaW4KKwkJL15bIAldL3sKKwkJCXMvXlsgCV0qLy8KKwkJCUgKKwkJCW4KKwkJCWIgYWdhaW4KKwkJfQorCQl4CisJCXAKKwkJcQorCX0nICIkdHh0IikKKworCWlmIGdyZXAgJ0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYycgPi9kZXYvbnVsbCAkdHh0CisJdGhlbgorCQlmaWxlPSQoZXhwciAiJHR4dCIgOiAnXCguKlwpXC50eHQkJykuaHRtbAorCWVsc2UKKwkJZmlsZT0iJHR4dCIKKwlmaQorCisJZWNobyAiKiBsaW5rOiRmaWxlWyR0aXRsZV0gJGZyb20KKyRhYnN0cmFjdAorCisiCisKK2RvbmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8va2VlcC1jYW5vbmljYWwtaGlzdG9yeS1jb3JyZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8va2VlcC1jYW5vbmljYWwtaGlzdG9yeS1jb3JyZWN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWQ0OGVmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9rZWVwLWNhbm9uaWNhbC1oaXN0b3J5LWNvcnJlY3QudHh0CkBAIC0wLDAgKzEsMjE2IEBACitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitEYXRlOiBXZWQsIDA3IE1heSAyMDE0IDEzOjE1OjM5IC0wNzAwCitTdWJqZWN0OiBCZWdpbm5lciBxdWVzdGlvbiBvbiAiUHVsbCBpcyBtb3N0bHkgZXZpbCIKK0Fic3RyYWN0OiBUaGlzIGhvdy10byBleHBsYWlucyBhIG1ldGhvZCBmb3Iga2VlcGluZyBhCisgcHJvamVjdCdzIGhpc3RvcnkgY29ycmVjdCB3aGVuIHVzaW5nIGdpdCBwdWxsLgorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0tlZXAgYXV0aG9yaXRhdGl2ZSBjYW5vbmljYWwgaGlzdG9yeSBjb3JyZWN0IHdpdGggZ2l0IHB1bGwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU29tZXRpbWVzIGEgbmV3IHByb2plY3QgaW50ZWdyYXRvciB3aWxsIGVuZCB1cCB3aXRoIHByb2plY3QgaGlzdG9yeQordGhhdCBhcHBlYXJzIHRvIGJlICJiYWNrd2FyZHMiIGZyb20gd2hhdCBvdGhlciBwcm9qZWN0IGRldmVsb3BlcnMKK2V4cGVjdC4gVGhpcyBob3d0byBwcmVzZW50cyBhIHN1Z2dlc3RlZCBpbnRlZ3JhdGlvbiB3b3JrZmxvdyBmb3IKK21haW50YWluaW5nIGEgY2VudHJhbCByZXBvc2l0b3J5LgorCitTdXBwb3NlIHRoYXQgdGhhdCBjZW50cmFsIHJlcG9zaXRvcnkgaGFzIHRoaXMgaGlzdG9yeToKKworLS0tLS0tLS0tLS0tCisgICAgLS0tby0tLW8tLS1BCistLS0tLS0tLS0tLS0KKword2hpY2ggZW5kcyBhdCBjb21taXQgYEFgICh0aW1lIGZsb3dzIGZyb20gbGVmdCB0byByaWdodCBhbmQgZWFjaCBub2RlCitpbiB0aGUgZ3JhcGggaXMgYSBjb21taXQsIGxpbmVzIGJldHdlZW4gdGhlbSBpbmRpY2F0aW5nIHBhcmVudC1jaGlsZAorcmVsYXRpb25zaGlwKS4KKworVGhlbiB5b3UgY2xvbmUgaXQgYW5kIHdvcmsgb24geW91ciBvd24gY29tbWl0cywgd2hpY2ggbGVhZHMgeW91IHRvCitoYXZlIHRoaXMgaGlzdG9yeSBpbiAqeW91ciogcmVwb3NpdG9yeToKKworLS0tLS0tLS0tLS0tCisgICAgLS0tby0tLW8tLS1BLS0tQi0tLUMKKy0tLS0tLS0tLS0tLQorCitJbWFnaW5lIHlvdXIgY293b3JrZXIgZGlkIHRoZSBzYW1lIGFuZCBidWlsdCBvbiB0b3Agb2YgYEFgIGluICpoaXMqCityZXBvc2l0b3J5IGluIHRoZSBtZWFudGltZSwgYW5kIHRoZW4gcHVzaGVkIGl0IHRvIHRoZQorY2VudHJhbCByZXBvc2l0b3J5OgorCistLS0tLS0tLS0tLS0KKyAgICAtLS1vLS0tby0tLUEtLS1YLS0tWS0tLVoKKy0tLS0tLS0tLS0tLQorCitOb3csIGlmIHlvdSBgZ2l0IHB1c2hgIGF0IHRoaXMgcG9pbnQsIGJlY2F1c2UgeW91ciBoaXN0b3J5IHRoYXQgbGVhZHMKK3RvIGBDYCBsYWNrcyBgWGAsIGBZYCBhbmQgYFpgLCBpdCB3aWxsIGZhaWwuICBZb3UgbmVlZCB0byBzb21laG93IG1ha2UKK3RoZSB0aXAgb2YgeW91ciBoaXN0b3J5IGEgZGVzY2VuZGFudCBvZiBgWmAuCisKK09uZSBzdWdnZXN0ZWQgd2F5IHRvIHNvbHZlIHRoZSBwcm9ibGVtIGlzICJmZXRjaCBhbmQgdGhlbiBtZXJnZSIsIGFrYQorYGdpdCBwdWxsYC4gV2hlbiB5b3UgZmV0Y2gsIHlvdXIgcmVwb3NpdG9yeSB3aWxsIGhhdmUgYSBoaXN0b3J5IGxpa2UKK3RoaXM6CisKKy0tLS0tLS0tLS0tLQorICAgIC0tLW8tLS1vLS0tQS0tLUItLS1DCisJCVwKKwkJIFgtLS1ZLS0tWgorLS0tLS0tLS0tLS0tCisKK09uY2UgeW91IHJ1biBtZXJnZSBhZnRlciB0aGF0LCB3aGlsZSBzdGlsbCBvbiAqeW91ciogYnJhbmNoLCBpLmUuIGBDYCwKK3lvdSB3aWxsIGNyZWF0ZSBhIG1lcmdlIGBNYCBhbmQgbWFrZSB0aGUgaGlzdG9yeSBsb29rIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisgICAgLS0tby0tLW8tLS1BLS0tQi0tLUMtLS1NCisJCVwgICAgICAgICAvCisJCSBYLS0tWS0tLVoKKy0tLS0tLS0tLS0tLQorCitgTWAgaXMgYSBkZXNjZW5kYW50IG9mIGBaYCwgc28geW91IGNhbiBwdXNoIHRvIHVwZGF0ZSB0aGUgY2VudHJhbAorcmVwb3NpdG9yeS4gIFN1Y2ggYSBtZXJnZSBgTWAgZG9lcyBub3QgbG9zZSBhbnkgY29tbWl0IGluIGJvdGgKK2hpc3Rvcmllcywgc28gaW4gdGhhdCBzZW5zZSBpdCBtYXkgbm90IGJlIHdyb25nLCBidXQgd2hlbiBwZW9wbGUgd2FudAordG8gdGFsayBhYm91dCAidGhlIGF1dGhvcml0YXRpdmUgY2Fub25pY2FsIGhpc3RvcnkgdGhhdCBpcyBzaGFyZWQKK2Ftb25nIHRoZSBwcm9qZWN0IHBhcnRpY2lwYW50cyIsIGkuZS4gInRoZSB0cnVuayIsIHRoZXkgb2Z0ZW4gdmlldworaXQgYXMgImNvbW1pdHMgeW91IHNlZSBieSBmb2xsb3dpbmcgdGhlIGZpcnN0LXBhcmVudCBjaGFpbiIsIGFuZCB1c2UKK3RoaXMgY29tbWFuZCB0byB2aWV3IGl0OgorCistLS0tLS0tLS0tLS0KKyAgICAkIGdpdCBsb2cgLS1maXJzdC1wYXJlbnQKKy0tLS0tLS0tLS0tLQorCitGb3IgYWxsIG90aGVyIHBlb3BsZSB3aG8gb2JzZXJ2ZWQgdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSBhZnRlciB5b3VyCitjb3dvcmtlciBwdXNoZWQgYFpgIGJ1dCBiZWZvcmUgeW91IHB1c2hlZCBgTWAsIHRoZSBjb21taXQgb24gdGhlIHRydW5rCit1c2VkIHRvIGJlIGBvLW8tQS1YLVktWmAuICBCdXQgYmVjYXVzZSB5b3UgbWFkZSBgTWAgd2hpbGUgeW91IHdlcmUgb24KK2BDYCwgYE1gJ3MgZmlyc3QgcGFyZW50IGlzIGBDYCwgc28gYnkgcHVzaGluZyBgTWAgdG8gYWR2YW5jZSB0aGUKK2NlbnRyYWwgcmVwb3NpdG9yeSwgeW91IG1hZGUgYFgtWS1aYCBhIHNpZGUgYnJhbmNoLCBub3Qgb24gdGhlIHRydW5rLgorCitZb3Ugd291bGQgcmF0aGVyIHdhbnQgdG8gaGF2ZSBhIGhpc3Rvcnkgb2YgdGhpcyBzaGFwZToKKworLS0tLS0tLS0tLS0tCisgICAgLS0tby0tLW8tLS1BLS0tWC0tLVktLS1aLS0tTScKKwkJXCAgICAgICAgICAgICAvCisJCSBCLS0tLS0tLS0tLS1DCistLS0tLS0tLS0tLS0KKworc28gdGhhdCBpbiB0aGUgZmlyc3QtcGFyZW50IGNoYWluLCBpdCBpcyBjbGVhciB0aGF0IHRoZSBwcm9qZWN0IGZpcnN0CitkaWQgYFhgIGFuZCB0aGVuIGBZYCBhbmQgdGhlbiBgWmAgYW5kIG1lcmdlZCBhIGNoYW5nZSB0aGF0IGNvbnNpc3RzIG9mCit0d28gY29tbWl0cyBgQmAgYW5kIGBDYCB0aGF0IGFjaGlldmVzIGEgc2luZ2xlIGdvYWwuICBZb3UgbWF5IGhhdmUKK3dvcmtlZCBvbiBmaXhpbmcgdGhlIGJ1ZyAjMTIzNDUgd2l0aCB0aGVzZSB0d28gcGF0Y2hlcywgYW5kIHRoZSBtZXJnZQorYE0nYCB3aXRoIHN3YXBwZWQgcGFyZW50cyBjYW4gc2F5IGluIGl0cyBsb2cgbWVzc2FnZSAiTWVyZ2UKK2ZpeC1idWctMTIzNDUiLiBIYXZpbmcgYSB3YXkgdG8gdGVsbCBgZ2l0IHB1bGxgIHRvIGNyZWF0ZSBhIG1lcmdlCitidXQgcmVjb3JkIHRoZSBwYXJlbnRzIGluIHJldmVyc2Ugb3JkZXIgbWF5IGJlIGEgd2F5IHRvIGRvIHNvLgorCitOb3RlIHRoYXQgSSBzYWlkICJhY2hpZXZlcyBhIHNpbmdsZSBnb2FsIiBhYm92ZSwgYmVjYXVzZSB0aGlzIGlzCitpbXBvcnRhbnQuICAiU3dhcHBpbmcgdGhlIG1lcmdlIG9yZGVyIiBvbmx5IGNvdmVycyBhIHNwZWNpYWwgY2FzZQord2hlcmUgdGhlIHByb2plY3QgZG9lcyBub3QgY2FyZSB0b28gbXVjaCBhYm91dCBoYXZpbmcgdW5yZWxhdGVkCit0aGluZ3MgZG9uZSBvbiBhIHNpbmdsZSBtZXJnZSBidXQgY2FyZXMgYSBsb3QgYWJvdXQgZmlyc3QtcGFyZW50CitjaGFpbi4KKworVGhlcmUgYXJlIG11bHRpcGxlIHNjaG9vbHMgb2YgdGhvdWdodCBhYm91dCB0aGUgInRydW5rIiBtYW5hZ2VtZW50LgorCisgMS4gU29tZSBwcm9qZWN0cyB3YW50IHRvIGtlZXAgYSBjb21wbGV0ZWx5IGxpbmVhciBoaXN0b3J5IHdpdGhvdXQgYW55CisgICAgbWVyZ2VzLiAgT2J2aW91c2x5LCBzd2FwcGluZyB0aGUgbWVyZ2Ugb3JkZXIgd291bGQgbm90IG1hdGNoIHRoZWlyCisgICAgdGFzdGUuICBZb3Ugd291bGQgbmVlZCB0byBmbGF0dGVuIHlvdXIgaGlzdG9yeSBvbiB0b3Agb2YgdGhlCisgICAgdXBkYXRlZCB1cHN0cmVhbSB0byByZXN1bHQgaW4gYSBoaXN0b3J5IG9mIHRoaXMgc2hhcGUgaW5zdGVhZDoKKysKKy0tLS0tLS0tLS0tLQorICAgIC0tLW8tLS1vLS0tQS0tLVgtLS1ZLS0tWi0tLUItLS1DCistLS0tLS0tLS0tLS0KKysKK3dpdGggYGdpdCBwdWxsIC0tcmViYXNlYCBvciBzb21ldGhpbmcuCisKKyAyLiBTb21lIHByb2plY3RzIHRvbGVyYXRlIG1lcmdlcyBpbiB0aGVpciBoaXN0b3J5LCBidXQgZG8gbm90IHdvcnJ5CisgICAgdG9vIG11Y2ggYWJvdXQgdGhlIGZpcnN0LXBhcmVudCBvcmRlciwgYW5kIGFsbG93IGZhc3QtZm9yd2FyZAorICAgIG1lcmdlcy4gIFRvIHRoZW0sIHN3YXBwaW5nIHRoZSBtZXJnZSBvcmRlciBkb2VzIG5vdCBodXJ0LCBidXQKKyAgICBpdCBpcyB1bm5lY2Vzc2FyeS4KKworIDMuIFNvbWUgcHJvamVjdHMgd2FudCBlYWNoIGNvbW1pdCBvbiB0aGUgInRydW5rIiB0byBkbyBvbmUgc2luZ2xlCisgICAgdGhpbmcuICBUaGUgb3V0cHV0IG9mIGBnaXQgbG9nIC0tZmlyc3QtcGFyZW50YCBpbiBzdWNoIGEgcHJvamVjdAorICAgIHdvdWxkIHNob3cgZWl0aGVyIGEgbWVyZ2Ugb2YgYSBzaWRlIGJyYW5jaCB0aGF0IGNvbXBsZXRlcyBhIHNpbmdsZQorICAgIHRoZW1lLCBvciBhIHNpbmdsZSBjb21taXQgdGhhdCBjb21wbGV0ZXMgYSBzaW5nbGUgdGhlbWUgYnkgaXRzZWxmLgorICAgIElmIHlvdXIgdHdvIGNvbW1pdHMgYEJgIGFuZCBgQ2AgKG9yIHRoZXkgbWF5IGV2ZW4gYmUgdHdvIGdyb3VwcyBvZgorICAgIGNvbW1pdHMpIHdlcmUgc29sdmluZyB0d28gaW5kZXBlbmRlbnQgaXNzdWVzLCB0aGVuIHRoZSBtZXJnZSBgTSdgCisgICAgd2UgbWFkZSBpbiB0aGUgZWFybGllciBleGFtcGxlIGJ5IHN3YXBwaW5nIHRoZSBtZXJnZSBvcmRlciBpcworICAgIHN0aWxsIG5vdCB1cCB0byB0aGUgcHJvamVjdCBzdGFuZGFyZC4gIEl0IG1lcmdlcyB0d28gdW5yZWxhdGVkCisgICAgZWZmb3J0cyBgQmAgYW5kIGBDYCBhdCB0aGUgc2FtZSB0aW1lLgorCitGb3IgcHJvamVjdHMgaW4gdGhlIGxhc3QgY2F0ZWdvcnkgKEdpdCBpdHNlbGYgaXMgb25lIG9mIHRoZW0pLAoraW5kaXZpZHVhbCBkZXZlbG9wZXJzIHdvdWxkIHdhbnQgdG8gcHJlcGFyZSBhIGhpc3RvcnkgbW9yZSBsaWtlCit0aGlzOgorCistLS0tLS0tLS0tLS0KKwkJIEMwLS1DMS0tQzIgICAgIHRvcGljLWMKKwkJLworICAgIC0tLW8tLS1vLS0tQSAgICAgICAgICAgICAgICBtYXN0ZXIKKwkJXAorCQkgQjAtLUIxLS1CMiAgICAgdG9waWMtYgorLS0tLS0tLS0tLS0tCisKK1RoYXQgaXMsIGtlZXBpbmcgc2VwYXJhdGUgdG9waWNzIG9uIHNlcGFyYXRlIGJyYW5jaGVzLCBwZXJoYXBzIGxpa2UKK3NvOgorCistLS0tLS0tLS0tLS0KKyAgICAkIGdpdCBjbG9uZSAkVVJMIHdvcmsgJiYgY2Qgd29yaworICAgICQgZ2l0IGNoZWNrb3V0IC1iIHRvcGljLWIgbWFzdGVyCisgICAgJCAuLi4gd29yayB0byBjcmVhdGUgQjAsIEIxIGFuZCBCMiB0byBjb21wbGV0ZSBvbmUgdGhlbWUKKyAgICAkIGdpdCBjaGVja291dCAtYiB0b3BpYy1jIG1hc3RlcgorICAgICQgLi4uIHNhbWUgZm9yIHRoZSB0aGVtZSBvZiB0b3BpYy1jCistLS0tLS0tLS0tLS0KKworQW5kIHRoZW4KKworLS0tLS0tLS0tLS0tCisgICAgJCBnaXQgY2hlY2tvdXQgbWFzdGVyCisgICAgJCBnaXQgcHVsbCAtLWZmLW9ubHkKKy0tLS0tLS0tLS0tLQorCit3b3VsZCBncmFiIGBYYCwgYFlgIGFuZCBgWmAgZnJvbSB0aGUgdXBzdHJlYW0gYW5kIGFkdmFuY2UgeW91ciBtYXN0ZXIKK2JyYW5jaDoKKworLS0tLS0tLS0tLS0tCisJCSBDMC0tQzEtLUMyICAgICB0b3BpYy1jCisJCS8KKyAgICAtLS1vLS0tby0tLUEtLS1YLS0tWS0tLVogICAgbWFzdGVyCisJCVwKKwkJIEIwLS1CMS0tQjIgICAgIHRvcGljLWIKKy0tLS0tLS0tLS0tLQorCitBbmQgdGhlbiB5b3Ugd291bGQgbWVyZ2UgdGhlc2UgdHdvIGJyYW5jaGVzIHNlcGFyYXRlbHk6CisKKy0tLS0tLS0tLS0tLQorICAgICQgZ2l0IG1lcmdlIHRvcGljLWIKKyAgICAkIGdpdCBtZXJnZSB0b3BpYy1jCistLS0tLS0tLS0tLS0KKwordG8gcmVzdWx0IGluCisKKy0tLS0tLS0tLS0tLQorCQkgQzAtLUMxLS0tLS0tLS0tQzIKKwkJLyAgICAgICAgICAgICAgICAgXAorICAgIC0tLW8tLS1vLS0tQS0tLVgtLS1ZLS0tWi0tLU0tLS1OCisJCVwgICAgICAgICAgICAgLworCQkgQjAtLUIxLS0tLS1CMgorLS0tLS0tLS0tLS0tCisKK2FuZCBwdXNoIGl0IGJhY2sgdG8gdGhlIGNlbnRyYWwgcmVwb3NpdG9yeS4KKworSXQgaXMgdmVyeSBtdWNoIHBvc3NpYmxlIHRoYXQgd2hpbGUgeW91IGFyZSBtZXJnaW5nIHRvcGljLWIgYW5kCit0b3BpYy1jLCBzb21lYm9keSBhZ2FpbiBhZHZhbmNlZCB0aGUgaGlzdG9yeSBpbiB0aGUgY2VudHJhbCByZXBvc2l0b3J5Cit0byBwdXQgYFdgIG9uIHRvcCBvZiBgWmAsIGFuZCBtYWtlIHlvdXIgYGdpdCBwdXNoYCBmYWlsLgorCitJbiBzdWNoIGEgY2FzZSwgeW91IHdvdWxkIHJld2luZCB0byBkaXNjYXJkIGBNYCBhbmQgYE5gLCB1cGRhdGUgdGhlCit0aXAgb2YgeW91ciAnbWFzdGVyJyBhZ2FpbiBhbmQgcmVkbyB0aGUgdHdvIG1lcmdlczoKKworLS0tLS0tLS0tLS0tCisgICAgJCBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXIKKyAgICAkIGdpdCBwdWxsIC0tZmYtb25seQorICAgICQgZ2l0IG1lcmdlIHRvcGljLWIKKyAgICAkIGdpdCBtZXJnZSB0b3BpYy1jCistLS0tLS0tLS0tLS0KKworVGhlIHByb2NlZHVyZSB3aWxsIHJlc3VsdCBpbiBhIGhpc3RvcnkgdGhhdCBsb29rcyBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLQorCQkgQzAtLUMxLS0tLS0tLS0tLS0tLS1DMgorCQkvICAgICAgICAgICAgICAgICAgICAgXAorICAgIC0tLW8tLS1vLS0tQS0tLVgtLS1ZLS0tWi0tLVctLS1NJy0tTicKKwkJXCAgICAgICAgICAgICAgICAgLworCQkgQjAtLUIxLS0tLS0tLS0tQjIKKy0tLS0tLS0tLS0tLQorCitTZWUgYWxzbyBodHRwOi8vZ2l0LWJsYW1lLmJsb2dzcG90LmNvbS8yMDEzLzA5L2Z1bi13aXRoLWZpcnN0LXBhcmVudC1oaXN0b3J5Lmh0bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vbWFpbnRhaW4tZ2l0LnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vbWFpbnRhaW4tZ2l0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTQzNzg3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9tYWludGFpbi1naXQudHh0CkBAIC0wLDAgKzEsNDQ5IEBACitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitEYXRlOiBXZWQsIDIxIE5vdiAyMDA3IDE2OjMyOjU1IC0wODAwCitTdWJqZWN0OiBBZGRlbmR1bSB0byAiTWFpbnROb3RlcyIKK0Fic3RyYWN0OiBJbWFnaW5lIHRoYXQgR2l0IGRldmVsb3BtZW50IGlzIHJhY2luZyBhbG9uZyBhcyB1c3VhbCwgd2hlbiBvdXIgZnJpZW5kbHkKKyBuZWlnaGJvcmhvb2QgbWFpbnRhaW5lciBpcyBzdHJ1Y2sgZG93biBieSBhIHdheXdhcmQgYnVzLiBPdXQgb2YgdGhlCisgaG9yZGVzIG9mIHN1Y2tlcnMgKGxveWFsIGRldmVsb3BlcnMpLCB5b3UgaGF2ZSBiZWVuIHRyaWNrZWQgKGNob3NlbikgdG8KKyBzdGVwIHVwIGFzIHRoZSBuZXcgbWFpbnRhaW5lci4gVGhpcyBob3d0byB3aWxsIHNob3cgeW91ICJob3cgdG8iIGRvIGl0LgorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0hvdyB0byBtYWludGFpbiBHaXQKKz09PT09PT09PT09PT09PT09PT0KKworQWN0aXZpdGllcworLS0tLS0tLS0tLQorCitUaGUgbWFpbnRhaW5lcidzIEdpdCB0aW1lIGlzIHNwZW50IG9uIHRocmVlIGFjdGl2aXRpZXMuCisKKyAtIENvbW11bmljYXRpb24gKDQ1JSkKKworICAgTWFpbGluZyBsaXN0IGRpc2N1c3Npb25zIG9uIGdlbmVyYWwgZGVzaWduLCBmaWVsZGluZyB1c2VyCisgICBxdWVzdGlvbnMsIGRpYWdub3NpbmcgYnVnIHJlcG9ydHM7IHJldmlld2luZywgY29tbWVudGluZyBvbiwKKyAgIHN1Z2dlc3RpbmcgYWx0ZXJuYXRpdmVzIHRvLCBhbmQgcmVqZWN0aW5nIHBhdGNoZXMuCisKKyAtIEludGVncmF0aW9uICg1MCUpCisKKyAgIEFwcGx5aW5nIG5ldyBwYXRjaGVzIGZyb20gdGhlIGNvbnRyaWJ1dG9ycyB3aGlsZSBzcG90dGluZyBhbmQKKyAgIGNvcnJlY3RpbmcgbWlub3IgbWlzdGFrZXMsIHNodWZmbGluZyB0aGUgaW50ZWdyYXRpb24gYW5kCisgICB0ZXN0aW5nIGJyYW5jaGVzLCBwdXNoaW5nIHRoZSByZXN1bHRzIG91dCwgY3V0dGluZyB0aGUKKyAgIHJlbGVhc2VzLCBhbmQgbWFraW5nIGFubm91bmNlbWVudHMuCisKKyAtIE93biBkZXZlbG9wbWVudCAoNSUpCisKKyAgIFNjcmF0Y2hpbmcgbXkgb3duIGl0Y2ggYW5kIHNlbmRpbmcgcHJvcG9zZWQgcGF0Y2ggc2VyaWVzIG91dC4KKworVGhlIFBvbGljeQorLS0tLS0tLS0tLQorCitUaGUgcG9saWN5IG9uIEludGVncmF0aW9uIGlzIGluZm9ybWFsbHkgbWVudGlvbmVkIGluICJBIE5vdGUKK2Zyb20gdGhlIG1haW50YWluZXIiIG1lc3NhZ2UsIHdoaWNoIGlzIHBlcmlvZGljYWxseSBwb3N0ZWQgdG8KK3RoaXMgbWFpbGluZyBsaXN0IGFmdGVyIGVhY2ggZmVhdHVyZSByZWxlYXNlIGlzIG1hZGUuCisKKyAtIEZlYXR1cmUgcmVsZWFzZXMgYXJlIG51bWJlcmVkIGFzIHZYLlkuMCBhbmQgYXJlIG1lYW50IHRvCisgICBjb250YWluIGJ1Z2ZpeGVzIGFuZCBlbmhhbmNlbWVudHMgaW4gYW55IGFyZWEsIGluY2x1ZGluZworICAgZnVuY3Rpb25hbGl0eSwgcGVyZm9ybWFuY2UgYW5kIHVzYWJpbGl0eSwgd2l0aG91dCByZWdyZXNzaW9uLgorCisgLSBPbmUgcmVsZWFzZSBjeWNsZSBmb3IgYSBmZWF0dXJlIHJlbGVhc2UgaXMgZXhwZWN0ZWQgdG8gbGFzdCBmb3IKKyAgIGVpZ2h0IHRvIHRlbiB3ZWVrcy4KKworIC0gTWFpbnRlbmFuY2UgcmVsZWFzZXMgYXJlIG51bWJlcmVkIGFzIHZYLlkuWiBhbmQgYXJlIG1lYW50CisgICB0byBjb250YWluIG9ubHkgYnVnZml4ZXMgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHZYLlkuMCBmZWF0dXJlCisgICByZWxlYXNlIGFuZCBlYXJsaWVyIG1haW50ZW5hbmNlIHJlbGVhc2VzIHZYLlkuVyAoVyA8IFopLgorCisgLSAnbWFzdGVyJyBicmFuY2ggaXMgdXNlZCB0byBwcmVwYXJlIGZvciB0aGUgbmV4dCBmZWF0dXJlCisgICByZWxlYXNlLiBJbiBvdGhlciB3b3JkcywgYXQgc29tZSBwb2ludCwgdGhlIHRpcCBvZiAnbWFzdGVyJworICAgYnJhbmNoIGlzIHRhZ2dlZCB3aXRoIHZYLlkuMC4KKworIC0gJ21haW50JyBicmFuY2ggaXMgdXNlZCB0byBwcmVwYXJlIGZvciB0aGUgbmV4dCBtYWludGVuYW5jZQorICAgcmVsZWFzZS4gIEFmdGVyIHRoZSBmZWF0dXJlIHJlbGVhc2UgdlguWS4wIGlzIG1hZGUsIHRoZSB0aXAKKyAgIG9mICdtYWludCcgYnJhbmNoIGlzIHNldCB0byB0aGF0IHJlbGVhc2UsIGFuZCBidWdmaXhlcyB3aWxsCisgICBhY2N1bXVsYXRlIG9uIHRoZSBicmFuY2gsIGFuZCBhdCBzb21lIHBvaW50LCB0aGUgdGlwIG9mIHRoZQorICAgYnJhbmNoIGlzIHRhZ2dlZCB3aXRoIHZYLlkuMSwgdlguWS4yLCBhbmQgc28gb24uCisKKyAtICduZXh0JyBicmFuY2ggaXMgdXNlZCB0byBwdWJsaXNoIGNoYW5nZXMgKGJvdGggZW5oYW5jZW1lbnRzCisgICBhbmQgZml4ZXMpIHRoYXQgKDEpIGhhdmUgd29ydGh3aGlsZSBnb2FsLCAoMikgYXJlIGluIGEgZmFpcmx5CisgICBnb29kIHNoYXBlIHN1aXRhYmxlIGZvciBldmVyeWRheSB1c2UsICgzKSBidXQgaGF2ZSBub3QgeWV0CisgICBkZW1vbnN0cmF0ZWQgdG8gYmUgcmVncmVzc2lvbiBmcmVlLiAgTmV3IGNoYW5nZXMgYXJlIHRlc3RlZAorICAgaW4gJ25leHQnIGJlZm9yZSBtZXJnZWQgdG8gJ21hc3RlcicuCisKKyAtICdwdScgYnJhbmNoIGlzIHVzZWQgdG8gcHVibGlzaCBvdGhlciBwcm9wb3NlZCBjaGFuZ2VzIHRoYXQgZG8KKyAgIG5vdCB5ZXQgcGFzcyB0aGUgY3JpdGVyaWEgc2V0IGZvciAnbmV4dCcuCisKKyAtIFRoZSB0aXBzIG9mICdtYXN0ZXInIGFuZCAnbWFpbnQnIGJyYW5jaGVzIHdpbGwgbm90IGJlIHJld291bmQgdG8KKyAgIGFsbG93IHBlb3BsZSB0byBidWlsZCB0aGVpciBvd24gY3VzdG9taXphdGlvbiBvbiB0b3Agb2YgdGhlbS4KKyAgIEVhcmx5IGluIGEgbmV3IGRldmVsb3BtZW50IGN5Y2xlLCAnbmV4dCcgaXMgcmV3b3VuZCB0byB0aGUgdGlwIG9mCisgICAnbWFzdGVyJyBvbmNlLCBidXQgb3RoZXJ3aXNlIGl0IHdpbGwgbm90IGJlIHJld291bmQgdW50aWwgdGhlIGVuZAorICAgb2YgdGhlIGN5Y2xlLgorCisgLSBVc3VhbGx5ICdtYXN0ZXInIGNvbnRhaW5zIGFsbCBvZiAnbWFpbnQnIGFuZCAnbmV4dCcgY29udGFpbnMgYWxsCisgICBvZiAnbWFzdGVyJy4gICdwdScgY29udGFpbnMgYWxsIHRoZSB0b3BpY3MgbWVyZ2VkIHRvICduZXh0JywgYnV0CisgICBpcyByZWJ1aWx0IGRpcmVjdGx5IG9uICdtYXN0ZXInLgorCisgLSBUaGUgdGlwIG9mICdtYXN0ZXInIGlzIG1lYW50IHRvIGJlIG1vcmUgc3RhYmxlIHRoYW4gYW55CisgICB0YWdnZWQgcmVsZWFzZXMsIGFuZCB0aGUgdXNlcnMgYXJlIGVuY291cmFnZWQgdG8gZm9sbG93IGl0LgorCisgLSBUaGUgJ25leHQnIGJyYW5jaCBpcyB3aGVyZSBuZXcgYWN0aW9uIHRha2VzIHBsYWNlLCBhbmQgdGhlCisgICB1c2VycyBhcmUgZW5jb3VyYWdlZCB0byB0ZXN0IGl0IHNvIHRoYXQgcmVncmVzc2lvbnMgYW5kIGJ1Z3MKKyAgIGFyZSBmb3VuZCBiZWZvcmUgbmV3IHRvcGljcyBhcmUgbWVyZ2VkIHRvICdtYXN0ZXInLgorCitOb3RlIHRoYXQgYmVmb3JlIHYxLjkuMCByZWxlYXNlLCB0aGUgdmVyc2lvbiBudW1iZXJzIHVzZWQgdG8gYmUKK3N0cnVjdHVyZWQgc2xpZ2h0bHkgZGlmZmVyZW50bHkuICB2WC5ZLlogd2VyZSBmZWF0dXJlIHJlbGVhc2VzIHdoaWxlCit2WC5ZLlouVyB3ZXJlIG1haW50ZW5hbmNlIHJlbGVhc2VzIGZvciB2WC5ZLlouCisKKworQSBUeXBpY2FsIEdpdCBEYXkKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0EgdHlwaWNhbCBHaXQgZGF5IGZvciB0aGUgbWFpbnRhaW5lciBpbXBsZW1lbnRzIHRoZSBhYm92ZSBwb2xpY3kKK2J5IGRvaW5nIHRoZSBmb2xsb3dpbmc6CisKKyAtIFNjYW4gbWFpbGluZyBsaXN0LiAgUmVzcG9uZCB3aXRoIHJldmlldyBjb21tZW50cywgc3VnZ2VzdGlvbnMKKyAgIGV0Yy4gIEtpYml0ei4gIENvbGxlY3QgcG90ZW50aWFsbHkgdXNhYmxlIHBhdGNoZXMgZnJvbSB0aGUKKyAgIG1haWxpbmcgbGlzdC4gIFBhdGNoZXMgYWJvdXQgYSBzaW5nbGUgdG9waWMgZ28gdG8gb25lIG1haWxib3ggKEkKKyAgIHJlYWQgbXkgbWFpbCBpbiBHbnVzLCBhbmQgdHlwZSBcQy1vIHRvIHNhdmUvYXBwZW5kIG1lc3NhZ2VzIGluCisgICBmaWxlcyBpbiBtYm94IGZvcm1hdCkuCisKKyAtIFdyaXRlIGhpcyBvd24gcGF0Y2hlcyB0byBhZGRyZXNzIGlzc3VlcyByYWlzZWQgb24gdGhlIGxpc3QgYnV0CisgICBub2JvZHkgaGFzIHN0ZXBwZWQgdXAgc29sdmluZy4gIFNlbmQgaXQgb3V0IGp1c3QgbGlrZSBvdGhlcgorICAgY29udHJpYnV0b3JzIGRvLCBhbmQgcGljayB0aGVtIHVwIGp1c3QgbGlrZSBwYXRjaGVzIGZyb20gb3RoZXIKKyAgIGNvbnRyaWJ1dG9ycyAoc2VlIGFib3ZlKS4KKworIC0gUmV2aWV3IHRoZSBwYXRjaGVzIGluIHRoZSBzYXZlZCBtYWlsYm94ZXMuICBFZGl0IHByb3Bvc2VkIGxvZworICAgbWVzc2FnZSBmb3IgdHlwb2ZpeGVzIGFuZCBjbGFyaWZpY2F0aW9ucywgYW5kIGFkZCBBY2tzCisgICBjb2xsZWN0ZWQgZnJvbSB0aGUgbGlzdC4gIEVkaXQgcGF0Y2ggdG8gaW5jb3Jwb3JhdGUgIk9vcHMsCisgICB0aGF0IHNob3VsZCBoYXZlIGJlZW4gbGlrZSB0aGlzIiBmaXhlcyBmcm9tIHRoZSBkaXNjdXNzaW9uLgorCisgLSBDbGFzc2lmeSB0aGUgY29sbGVjdGVkIHBhdGNoZXMgYW5kIGhhbmRsZSAnbWFzdGVyJyBhbmQKKyAgICdtYWludCcgdXBkYXRlczoKKworICAgLSBPYnZpb3VzbHkgY29ycmVjdCBmaXhlcyB0aGF0IHBlcnRhaW4gdG8gdGhlIHRpcCBvZiAnbWFpbnQnCisgICAgIGFyZSBkaXJlY3RseSBhcHBsaWVkIHRvICdtYWludCcuCisKKyAgIC0gT2J2aW91c2x5IGNvcnJlY3QgZml4ZXMgdGhhdCBwZXJ0YWluIHRvIHRoZSB0aXAgb2YgJ21hc3RlcicKKyAgICAgYXJlIGRpcmVjdGx5IGFwcGxpZWQgdG8gJ21hc3RlcicuCisKKyAgIC0gT3RoZXIgdG9waWNzIGFyZSBub3QgaGFuZGxlZCBpbiB0aGlzIHN0ZXAuCisKKyAgIFRoaXMgc3RlcCBpcyBkb25lIHdpdGggImdpdCBhbSIuCisKKyAgICAgJCBnaXQgY2hlY2tvdXQgbWFzdGVyICAgIDsjIG9yICJnaXQgY2hlY2tvdXQgbWFpbnQiCisgICAgICQgZ2l0IGFtIC1zYzMgbWFpbGJveAorICAgICAkIG1ha2UgdGVzdAorCisgICBJbiBwcmFjdGljZSwgYWxtb3N0IG5vIHBhdGNoIGRpcmVjdGx5IGdvZXMgdG8gJ21hc3Rlcicgb3IKKyAgICdtYWludCcuCisKKyAtIFJldmlldyB0aGUgbGFzdCBpc3N1ZSBvZiAiV2hhdCdzIGNvb2tpbmciIG1lc3NhZ2UsIHJldmlldyB0aGUKKyAgIHRvcGljcyByZWFkeSBmb3IgbWVyZ2luZyAodG9waWMtPm1hc3RlciBhbmQgdG9waWMtPm1haW50KS4gIFVzZQorICAgIk1ldGEvY29vayAtdyIgc2NyaXB0ICh3aGVyZSBNZXRhLyBjb250YWlucyBhIGNoZWNrb3V0IG9mIHRoZQorICAgJ3RvZG8nIGJyYW5jaCkgdG8gYWlkIHRoaXMgc3RlcC4KKworICAgQW5kIHBlcmZvcm0gdGhlIG1lcmdlLiAgVXNlICJNZXRhL1JlaW50ZWdyYXRlIC1lIiBzY3JpcHQgKHNlZQorICAgbGF0ZXIpIHRvIGFpZCB0aGlzIHN0ZXAuCisKKyAgICAgJCBNZXRhL2Nvb2sgLXcgbGFzdC1pc3N1ZS1vZi13aGF0cy1jb29raW5nLm1ib3gKKworICAgICAkIGdpdCBjaGVja291dCBtYXN0ZXIgICAgOyMgb3IgImdpdCBjaGVja291dCBtYWludCIKKyAgICAgJCBlY2hvIGFpL3RvcGljIHwgTWV0YS9SZWludGVncmF0ZSAtZSA7IyAiZ2l0IG1lcmdlIGFpL3RvcGljIgorICAgICAkIGdpdCBsb2cgLXAgT1JJR19IRUFELi4gOyMgZmluYWwgcmV2aWV3CisgICAgICQgZ2l0IGRpZmYgT1JJR19IRUFELi4gICA7IyBmaW5hbCByZXZpZXcKKyAgICAgJCBtYWtlIHRlc3QgICAgICAgICAgICAgIDsjIGZpbmFsIHJldmlldworCisgLSBIYW5kbGUgdGhlIHJlbWFpbmluZyBwYXRjaGVzOgorCisgICAtIEFueXRoaW5nIHVub2J2aW91cyB0aGF0IGlzIGFwcGxpY2FibGUgdG8gJ21hc3RlcicgKGluIG90aGVyCisgICAgIHdvcmRzLCBkb2VzIG5vdCBkZXBlbmQgb24gYW55dGhpbmcgdGhhdCBpcyBzdGlsbCBpbiAnbmV4dCcKKyAgICAgYW5kIG5vdCBpbiAnbWFzdGVyJykgaXMgYXBwbGllZCB0byBhIG5ldyB0b3BpYyBicmFuY2ggdGhhdAorICAgICBpcyBmb3JrZWQgZnJvbSB0aGUgdGlwIG9mICdtYXN0ZXInLiAgVGhpcyBpbmNsdWRlcyBib3RoCisgICAgIGVuaGFuY2VtZW50cyBhbmQgdW5vYnZpb3VzIGZpeGVzIHRvICdtYXN0ZXInLiAgQSB0b3BpYworICAgICBicmFuY2ggaXMgbmFtZWQgYXMgYWkvdG9waWMgd2hlcmUgImFpIiBpcyB0d28tbGV0dGVyIHN0cmluZworICAgICBuYW1lZCBhZnRlciBhdXRob3IncyBpbml0aWFsIGFuZCAidG9waWMiIGlzIGEgZGVzY3JpcHRpdmUgbmFtZQorICAgICBvZiB0aGUgdG9waWMgKGluIG90aGVyIHdvcmRzLCAid2hhdCdzIHRoZSBzZXJpZXMgaXMgYWJvdXQiKS4KKworICAgLSBBbiB1bm9idmlvdXMgZml4IG1lYW50IGZvciAnbWFpbnQnIGlzIGFwcGxpZWQgdG8gYSBuZXcKKyAgICAgdG9waWMgYnJhbmNoIHRoYXQgaXMgZm9ya2VkIGZyb20gdGhlIHRpcCBvZiAnbWFpbnQnLiAgVGhlCisgICAgIHRvcGljIGlzIG5hbWVkIGFzIGFpL21haW50LXRvcGljLgorCisgICAtIENoYW5nZXMgdGhhdCBwZXJ0YWluIHRvIGFuIGV4aXN0aW5nIHRvcGljIGFyZSBhcHBsaWVkIHRvCisgICAgIHRoZSBicmFuY2gsIGJ1dDoKKworICAgICAtIG9idmlvdXNseSBjb3JyZWN0IG9uZXMgYXJlIGFwcGxpZWQgZmlyc3Q7CisKKyAgICAgLSBxdWVzdGlvbmFibGUgb25lcyBhcmUgZGlzY2FyZGVkIG9yIGFwcGxpZWQgdG8gbmVhciB0aGUgdGlwOworCisgICAtIFJlcGxhY2VtZW50IHBhdGNoZXMgdG8gYW4gZXhpc3RpbmcgdG9waWMgYXJlIGFjY2VwdGVkIG9ubHkKKyAgICAgZm9yIGNvbW1pdHMgbm90IGluICduZXh0Jy4KKworICAgVGhlIGFib3ZlIGV4Y2VwdCB0aGUgInJlcGxhY2VtZW50IiBhcmUgYWxsIGRvbmUgd2l0aDoKKworICAgICAkIGdpdCBjaGVja291dCBhaS90b3BpYyA7IyBvciAiZ2l0IGNoZWNrb3V0IC1iIGFpL3RvcGljIG1hc3RlciIKKyAgICAgJCBnaXQgYW0gLXNjMyBtYWlsYm94CisKKyAgIHdoaWxlIHBhdGNoIHJlcGxhY2VtZW50IGlzIG9mdGVuIGRvbmUgYnk6CisKKyAgICAgJCBnaXQgZm9ybWF0LXBhdGNoIGFpL3RvcGljfiRuLi5haS90b3BpYyA7IyBleHBvcnQgZXhpc3RpbmcKKworICAgdGhlbiByZXBsYWNlIHNvbWUgcGFydHMgd2l0aCB0aGUgbmV3IHBhdGNoLCBhbmQgcmVhcHBseWluZzoKKworICAgICAkIGdpdCBjaGVja291dCBhaS90b3BpYworICAgICAkIGdpdCByZXNldCAtLWhhcmQgYWkvdG9waWN+JG4KKyAgICAgJCBnaXQgYW0gLXNjMyAtcyAwMDAqLnR4dAorCisgICBUaGUgZnVsbCB0ZXN0IHN1aXRlIGlzIGFsd2F5cyBydW4gZm9yICdtYWludCcgYW5kICdtYXN0ZXInCisgICBhZnRlciBwYXRjaCBhcHBsaWNhdGlvbjsgZm9yIHRvcGljIGJyYW5jaGVzIHRoZSB0ZXN0cyBhcmUgcnVuCisgICBhcyB0aW1lIHBlcm1pdHMuCisKKyAtIE1lcmdlIG1haW50IHRvIG1hc3RlciBhcyBuZWVkZWQ6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgbWFzdGVyCisgICAgICQgZ2l0IG1lcmdlIG1haW50CisgICAgICQgbWFrZSB0ZXN0CisKKyAtIE1lcmdlIG1hc3RlciB0byBuZXh0IGFzIG5lZWRlZDoKKworICAgICAkIGdpdCBjaGVja291dCBuZXh0CisgICAgICQgZ2l0IG1lcmdlIG1hc3RlcgorICAgICAkIG1ha2UgdGVzdAorCisgLSBSZXZpZXcgdGhlIGxhc3QgaXNzdWUgb2YgIldoYXQncyBjb29raW5nIiBhZ2FpbiBhbmQgc2VlIGlmIHRvcGljcworICAgdGhhdCBhcmUgcmVhZHkgdG8gYmUgbWVyZ2VkIHRvICduZXh0JyBhcmUgc3RpbGwgaW4gZ29vZCBzaGFwZQorICAgKGUuZy4gaGFzIHRoZXJlIGFueSBuZXcgaXNzdWUgaWRlbnRpZmllZCBvbiB0aGUgbGlzdCB3aXRoIHRoZQorICAgc2VyaWVzPykKKworIC0gUHJlcGFyZSAnamNoJyBicmFuY2gsIHdoaWNoIGlzIHVzZWQgdG8gcmVwcmVzZW50IHNvbWV3aGVyZQorICAgYmV0d2VlbiAnbWFzdGVyJyBhbmQgJ3B1JyBhbmQgb2Z0ZW4gaXMgc2xpZ2h0bHkgYWhlYWQgb2YgJ25leHQnLgorCisgICAgICQgTWV0YS9SZWludGVncmF0ZSBtYXN0ZXIuLnB1ID5NZXRhL3JlZG8tamNoLnNoCisKKyAgIFRoZSByZXN1bHQgaXMgYSBzY3JpcHQgdGhhdCBsaXN0cyB0b3BpY3MgdG8gYmUgbWVyZ2VkIGluIG9yZGVyIHRvCisgICByZWJ1aWxkICdwdScgYXMgdGhlIGlucHV0IHRvIE1ldGEvUmVpbnRlZ3JhdGUgc2NyaXB0LiAgUmVtb3ZlCisgICBsYXRlciB0b3BpY3MgdGhhdCBzaG91bGQgbm90IGJlIGluICdqY2gnIHlldC4gIEFkZCBhIGxpbmUgdGhhdAorICAgY29uc2lzdHMgb2YgJyMjIyBtYXRjaCBuZXh0JyBiZWZvcmUgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IHRvcGljCisgICBpbiB0aGUgb3V0cHV0IHRoYXQgc2hvdWxkIGJlIGluICdqY2gnIGJ1dCBub3QgaW4gJ25leHQnIHlldC4KKworIC0gTm93IHdlIGFyZSByZWFkeSB0byBzdGFydCBtZXJnaW5nIHRvcGljcyB0byAnbmV4dCcuICBGb3IgZWFjaAorICAgYnJhbmNoIHdob3NlIHRpcCBpcyBub3QgbWVyZ2VkIHRvICduZXh0Jywgb25lIG9mIHRocmVlIHRoaW5ncyBjYW4KKyAgIGhhcHBlbjoKKworICAgLSBUaGUgY29tbWl0cyBhcmUgYWxsIG5leHQtd29ydGh5OyBtZXJnZSB0aGUgdG9waWMgdG8gbmV4dDsKKyAgIC0gVGhlIG5ldyBwYXJ0cyBhcmUgb2YgbWl4ZWQgcXVhbGl0eSwgYnV0IGVhcmxpZXIgb25lcyBhcmUKKyAgICAgbmV4dC13b3J0aHk7IG1lcmdlIHRoZSBlYXJseSBwYXJ0cyB0byBuZXh0OworICAgLSBOb3RoaW5nIGlzIG5leHQtd29ydGh5OyBkbyBub3QgZG8gYW55dGhpbmcuCisKKyAgIFRoaXMgc3RlcCBpcyBhaWRlZCB3aXRoIE1ldGEvcmVkby1qY2guc2ggc2NyaXB0IGNyZWF0ZWQgZWFybGllci4KKyAgIElmIGEgdG9waWMgdGhhdCB3YXMgYWxyZWFkeSBpbiAnbmV4dCcgZ2FpbmVkIGEgcGF0Y2gsIHRoZSBzY3JpcHQKKyAgIHdvdWxkIGxpc3QgaXQgYXMgImFpL3RvcGljfjEiLiAgVG8gaW5jbHVkZSB0aGUgbmV3IHBhdGNoIHRvIHRoZQorICAgdXBkYXRlZCAnbmV4dCcsIGRyb3AgdGhlICJ+MSIgcGFydDsgdG8ga2VlcCBpdCBleGNsdWRlZCwgZG8gbm90CisgICB0b3VjaCB0aGUgbGluZS4gIElmIGEgdG9waWMgdGhhdCB3YXMgbm90IGluICduZXh0JyBzaG91bGQgYmUKKyAgIG1lcmdlZCB0byAnbmV4dCcsIGFkZCBpdCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LiAgVGhlbjoKKworICAgICAkIGdpdCBjaGVja291dCAtQiBqY2ggbWFzdGVyCisgICAgICQgTWV0YS9yZWRvLWpjaC5zaCAtYzEKKworICAgdG8gcmVidWlsZCB0aGUgJ2pjaCcgYnJhbmNoIGZyb20gc2NyYXRjaC4gICItYzEiIHRlbGxzIHRoZSBzY3JpcHQKKyAgIHRvIHN0b3AgbWVyZ2luZyBhdCB0aGUgZmlyc3QgbGluZSB0aGF0IGJlZ2lucyB3aXRoICcjIyMnCisgICAoaS5lLiB0aGUgIiMjIyBtYXRjaCBuZXh0IiBsaW5lIHlvdSBhZGRlZCBlYXJsaWVyKS4KKworICAgQXQgdGhpcyBwb2ludCwgYnVpbGQtdGVzdCB0aGUgcmVzdWx0LiAgSXQgbWF5IHJldmVhbCBzZW1hbnRpYworICAgY29uZmxpY3RzIChlLmcuIGEgdG9waWMgcmVuYW1lZCBhIHZhcmlhYmxlLCBhbm90aGVyIGFkZGVkIGEgbmV3CisgICByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIHVuZGVyIGl0cyBvbGQgbmFtZSksIGluIHdoaWNoIGNhc2UKKyAgIHByZXBhcmUgYW4gYXBwcm9wcmlhdGUgbWVyZ2UtZml4IGZpcnN0IChzZWUgYXBwZW5kaXgpLCBhbmQKKyAgIHJlYnVpbGQgdGhlICdqY2gnIGJyYW5jaCBmcm9tIHNjcmF0Y2gsIHN0YXJ0aW5nIGF0IHRoZSB0aXAgb2YKKyAgICdtYXN0ZXInLgorCisgICBUaGVuIGRvIHRoZSBzYW1lIHRvICduZXh0JworCisgICAgICQgZ2l0IGNoZWNrb3V0IG5leHQKKyAgICAgJCBzaCBNZXRhL3JlZG8tamNoLnNoIC1jMSAtZQorCisgICBUaGUgIi1lIiBvcHRpb24gYWxsb3dzIHRoZSBtZXJnZSBtZXNzYWdlIHRoYXQgY29tZXMgZnJvbSB0aGUKKyAgIGhpc3Rvcnkgb2YgdGhlIHRvcGljIGFuZCB0aGUgY29tbWVudHMgaW4gdGhlICJXaGF0J3MgY29va2luZyIgdG8KKyAgIGJlIGVkaXRlZC4gIFRoZSByZXN1bHRpbmcgdHJlZSBzaG91bGQgbWF0Y2ggJ2pjaCcgYXMgdGhlIHNhbWUgc2V0CisgICBvZiB0b3BpY3MgYXJlIG1lcmdlZCBvbiAnbWFzdGVyJzsgb3RoZXJ3aXNlIHRoZXJlIGlzIGEgbWlzbWVyZ2UuCisgICBJbnZlc3RpZ2F0ZSB3aHkgYW5kIGRvIG5vdCBwcm9jZWVkIHVudGlsIHRoZSBtaXNtZXJnZSBpcyBmb3VuZAorICAgYW5kIHJlY3RpZmllZC4KKworICAgICAkIGdpdCBkaWZmIGpjaCBuZXh0CisKKyAgIFdoZW4gYWxsIGlzIHdlbGwsIGNsZWFuIHVwIHRoZSByZWRvLWpjaC5zaCBzY3JpcHQgd2l0aAorCisgICAgICQgc2ggTWV0YS9yZWRvLWpjaC5zaCAtdQorCisgICBUaGlzIHJlbW92ZXMgdG9waWNzIGxpc3RlZCBpbiB0aGUgc2NyaXB0IHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4KKyAgIG1lcmdlZCB0byAnbWFzdGVyJy4gIFRoaXMgbWF5IGxvc2UgJyMjIyBtYXRjaCBuZXh0JyBtYXJrZXI7CisgICBhZGQgaXQgYWdhaW4gdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlIHdoZW4gaXQgaGFwcGVucy4KKworIC0gUmVidWlsZCAncHUnLgorCisgICAgICQgTWV0YS9SZWludGVncmF0ZSBtYXN0ZXIuLnB1ID5NZXRhL3JlZG8tcHUuc2gKKworICAgRWRpdCB0aGUgcmVzdWx0IGJ5IGFkZGluZyBuZXcgdG9waWNzIHRoYXQgYXJlIG5vdCBzdGlsbCBpbiAncHUnCisgICBpbiB0aGUgc2NyaXB0LiAgVGhlbgorCisgICAgICQgZ2l0IGNoZWNrb3V0IC1CIHB1IGpjaAorICAgICAkIHNoIE1ldGEvcmVkby1wdS5zaAorCisgICBXaGVuIGFsbCBpcyB3ZWxsLCBjbGVhbiB1cCB0aGUgcmVkby1wdS5zaCBzY3JpcHQgd2l0aAorCisgICAgICQgc2ggTWV0YS9yZWRvLXB1LnNoIC11CisKKyAgIERvdWJsZSBjaGVjayBieSBydW5uaW5nCisKKyAgICAgJCBnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkIHB1CisKKyAgIHRvIHNlZSB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIGxlZnRvdmVyIHRvcGljcy4KKworICAgQXQgdGhpcyBwb2ludCwgYnVpbGQtdGVzdCB0aGUgcmVzdWx0IGZvciBzZW1hbnRpYyBjb25mbGljdHMsIGFuZAorICAgaWYgdGhlcmUgYXJlLCBwcmVwYXJlIGFuIGFwcHJvcHJpYXRlIG1lcmdlLWZpeCBmaXJzdCAoc2VlCisgICBhcHBlbmRpeCksIGFuZCByZWJ1aWxkIHRoZSAncHUnIGJyYW5jaCBmcm9tIHNjcmF0Y2gsIHN0YXJ0aW5nIGF0CisgICB0aGUgdGlwIG9mICdqY2gnLgorCisgLSBVcGRhdGUgIldoYXQncyBjb29raW5nIiBtZXNzYWdlIHRvIHJldmlldyB0aGUgdXBkYXRlcyB0bworICAgZXhpc3RpbmcgdG9waWNzLCBuZXdseSBhZGRlZCB0b3BpY3MgYW5kIGdyYWR1YXRlZCB0b3BpY3MuCisKKyAgIFRoaXMgc3RlcCBpcyBoZWxwZWQgd2l0aCBNZXRhL2Nvb2sgc2NyaXB0LgorCisgICAgICQgTWV0YS9jb29rCisKKyAgIFRoaXMgc2NyaXB0IGluc3BlY3RzIHRoZSBoaXN0b3J5IGJldHdlZW4gbWFzdGVyLi5wdSwgZmluZHMgdGlwcworICAgb2YgdG9waWMgYnJhbmNoZXMsIGNvbXBhcmVzIHdoYXQgaXQgZm91bmQgd2l0aCB0aGUgY3VycmVudAorICAgY29udGVudHMgaW4gTWV0YS93aGF0cy1jb29raW5nLnR4dCwgYW5kIHVwZGF0ZXMgdGhhdCBmaWxlLgorICAgVG9waWNzIG5vdCBsaXN0ZWQgaW4gdGhlIGZpbGUgYnV0IGFyZSBmb3VuZCBpbiBtYXN0ZXIuLnB1IGFyZQorICAgYWRkZWQgdG8gdGhlICJOZXcgdG9waWNzIiBzZWN0aW9uLCB0b3BpY3MgbGlzdGVkIGluIHRoZSBmaWxlIHRoYXQKKyAgIGFyZSBubyBsb25nZXIgZm91bmQgaW4gbWFzdGVyLi5wdSBhcmUgbW92ZWQgdG8gdGhlICJHcmFkdWF0ZWQgdG8KKyAgIG1hc3RlciIgc2VjdGlvbiwgYW5kIHRvcGljcyB3aG9zZSBjb21taXRzIGNoYW5nZWQgdGhlaXIgc3RhdGVzCisgICAoZS5nLiB1c2VkIHRvIGJlIG9ubHkgaW4gJ3B1Jywgbm93IG1lcmdlZCB0byAnbmV4dCcpIGFyZSB1cGRhdGVkCisgICB3aXRoIGNoYW5nZSBtYXJrZXJzICI8PCIgYW5kICI+PiIuCisKKyAgIExvb2sgZm9yIGxpbmVzIGVuY2xvc2VkIGluICI8PCIgYW5kICI+PiI7IHRoZXkgaG9sZCBjb250ZW50cyBmcm9tCisgICBvbGQgZmlsZSB0aGF0IGFyZSByZXBsYWNlZCBieSB0aGlzIGludGVncmF0aW9uIHJvdW5kLiAgQWZ0ZXIKKyAgIHZlcmlmeWluZyB0aGVtLCByZW1vdmUgdGhlIG9sZCBwYXJ0LiAgUmV2aWV3IHRoZSBkZXNjcmlwdGlvbiBmb3IKKyAgIGVhY2ggdG9waWMgYW5kIHVwZGF0ZSBpdHMgZG9uZW5lc3MgYW5kIHBsYW4gYXMgbmVlZGVkLiAgVG8gcmV2aWV3CisgICB0aGUgdXBkYXRlZCBwbGFuLCBydW4KKworICAgICAkIE1ldGEvY29vayAtdworCisgICB3aGljaCB3aWxsIHBpY2sgdXAgY29tbWVudHMgZ2l2ZW4gdG8gdGhlIHRvcGljcywgc3VjaCBhcyAiV2lsbAorICAgbWVyZ2UgdG8gJ25leHQnIiwgZXRjLiAoc2VlIE1ldGEvY29vayBzY3JpcHQgdG8gbGVhcm4gd2hhdCBraW5kCisgICBvZiBwaHJhc2VzIGFyZSBzdXBwb3J0ZWQpLgorCisgLSBDb21waWxlLCB0ZXN0IGFuZCBpbnN0YWxsIGFsbCBmb3VyIChmaXZlKSBpbnRlZ3JhdGlvbiBicmFuY2hlczsKKyAgIE1ldGEvRG90aGVtIHNjcmlwdCBtYXkgYWlkIHRoaXMgc3RlcC4KKworIC0gRm9ybWF0IGRvY3VtZW50YXRpb24gaWYgdGhlICdtYXN0ZXInIGJyYW5jaCB3YXMgdXBkYXRlZDsKKyAgIE1ldGEvZG9kb2Muc2ggc2NyaXB0IG1heSBhaWQgdGhpcyBzdGVwLgorCisgLSBQdXNoIHRoZSBpbnRlZ3JhdGlvbiBicmFuY2hlcyBvdXQgdG8gcHVibGljIHBsYWNlczsgTWV0YS9wdXNoYWxsCisgICBzY3JpcHQgbWF5IGFpZCB0aGlzIHN0ZXAuCisKK09ic2VydmF0aW9ucworLS0tLS0tLS0tLS0tCisKK1NvbWUgb2JzZXJ2YXRpb25zIHRvIGJlIG1hZGUuCisKKyAqIEVhY2ggdG9waWMgaXMgdGVzdGVkIGluZGl2aWR1YWxseSwgYW5kIGFsc28gdG9nZXRoZXIgd2l0aCBvdGhlcgorICAgdG9waWNzIGNvb2tpbmcgZmlyc3QgaW4gJ3B1JywgdGhlbiBpbiAnamNoJyBhbmQgdGhlbiBpbiAnbmV4dCcuCisgICBVbnRpbCBpdCBtYXR1cmVzLCBubyBwYXJ0IG9mIGl0IGlzIG1lcmdlZCB0byAnbWFzdGVyJy4KKworICogQSB0b3BpYyBhbHJlYWR5IGluICduZXh0JyBjYW4gZ2V0IGZpeGVzIHdoaWxlIHN0aWxsIGluCisgICAnbmV4dCcuICBTdWNoIGEgdG9waWMgd2lsbCBoYXZlIG1hbnkgbWVyZ2VzIHRvICduZXh0JyAoaW4KKyAgIG90aGVyIHdvcmRzLCAiZ2l0IGxvZyAtLWZpcnN0LXBhcmVudCBuZXh0IiB3aWxsIHNob3cgbWFueQorICAgIk1lcmdlIGJyYW5jaCAnYWkvdG9waWMnIHRvIG5leHQiIGZvciB0aGUgc2FtZSB0b3BpYy4KKworICogQW4gdW5vYnZpb3VzIGZpeCBmb3IgJ21haW50JyBpcyBjb29rZWQgaW4gJ25leHQnIGFuZCB0aGVuCisgICBtZXJnZWQgdG8gJ21hc3RlcicgdG8gbWFrZSBleHRyYSBzdXJlIGl0IGlzIE9rIGFuZCB0aGVuCisgICBtZXJnZWQgdG8gJ21haW50Jy4KKworICogRXZlbiB3aGVuICduZXh0JyBiZWNvbWVzIGVtcHR5IChpbiBvdGhlciB3b3JkcywgYWxsIHRvcGljcworICAgcHJvdmUgc3RhYmxlIGFuZCBhcmUgbWVyZ2VkIHRvICdtYXN0ZXInIGFuZCAiZ2l0IGRpZmYgbWFzdGVyCisgICBuZXh0IiBzaG93cyBlbXB0eSksIGl0IGhhcyB0b25zIG9mIG1lcmdlIGNvbW1pdHMgdGhhdCB3aWxsCisgICBuZXZlciBiZSBpbiAnbWFzdGVyJy4KKworICogSW4gcHJpbmNpcGxlLCAiZ2l0IGxvZyAtLWZpcnN0LXBhcmVudCBtYXN0ZXIuLm5leHQiIHNob3VsZAorICAgc2hvdyBub3RoaW5nIGJ1dCBtZXJnZXMgKGluIHByYWN0aWNlLCB0aGVyZSBhcmUgZml4dXAgY29tbWl0cworICAgYW5kIHJldmVydHMgdGhhdCBhcmUgbm90IG1lcmdlcykuCisKKyAqIENvbW1pdHMgbmVhciB0aGUgdGlwIG9mIGEgdG9waWMgYnJhbmNoIHRoYXQgYXJlIG5vdCBpbiAnbmV4dCcKKyAgIGFyZSBmYWlyIGdhbWUgdG8gYmUgZGlzY2FyZGVkLCByZXBsYWNlZCBvciByZXdyaXR0ZW4uCisgICBDb21taXRzIGFscmVhZHkgbWVyZ2VkIHRvICduZXh0JyB3aWxsIG5vdCBiZS4KKworICogQmVpbmcgaW4gdGhlICduZXh0JyBicmFuY2ggaXMgbm90IGEgZ3VhcmFudGVlIGZvciBhIHRvcGljIHRvCisgICBiZSBpbmNsdWRlZCBpbiB0aGUgbmV4dCBmZWF0dXJlIHJlbGVhc2UuICBCZWluZyBpbiB0aGUKKyAgICdtYXN0ZXInIGJyYW5jaCB0eXBpY2FsbHkgaXMuCisKKworQXBwZW5kaXgKKy0tLS0tLS0tCisKK1ByZXBhcmluZyBhICJtZXJnZS1maXgiCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBIG1lcmdlIG9mIHR3byB0b3BpY3MgbWF5IG5vdCB0ZXh0dWFsbHkgY29uZmxpY3QgYnV0IHN0aWxsIGhhdmUKK2NvbmZsaWN0IGF0IHRoZSBzZW1hbnRpYyBsZXZlbC4gQSBjbGFzc2ljIGV4YW1wbGUgaXMgZm9yIG9uZSB0b3BpYwordG8gcmVuYW1lIGFuIHZhcmlhYmxlIGFuZCBhbGwgaXRzIHVzZXMsIHdoaWxlIGFub3RoZXIgdG9waWMgYWRkcyBhCituZXcgdXNlIG9mIHRoZSB2YXJpYWJsZSB1bmRlciBpdHMgb2xkIG5hbWUuIFdoZW4gdGhlc2UgdHdvIHRvcGljcworYXJlIG1lcmdlZCB0b2dldGhlciwgdGhlIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgbmV3bHkgYWRkZWQgYnkKK3RoZSBsYXR0ZXIgdG9waWMgd2lsbCBzdGlsbCB1c2UgdGhlIG9sZCBuYW1lIGluIHRoZSByZXN1bHQuCisKK1RoZSBNZXRhL1JlaW50ZWdyYXRlIHNjcmlwdCB0aGF0IGlzIHVzZWQgYnkgcmVkby1qY2ggYW5kIHJlZG8tcHUKK3NjcmlwdHMgaW1wbGVtZW50cyBhIGNydWRlIGJ1dCB1c2FibGUgd2F5IHRvIHdvcmsgdGhpcyBpc3N1ZSBhcm91bmQuCitXaGVuIHRoZSBzY3JpcHQgbWVyZ2VzIGJyYW5jaCAkWCwgaXQgY2hlY2tzIGlmICJyZWZzL21lcmdlLWZpeC8kWCIKK2V4aXN0cywgYW5kIGlmIHNvLCB0aGUgZWZmZWN0IG9mIGl0IGlzIHNxdWFzaGVkIGludG8gdGhlIHJlc3VsdCBvZgordGhlIG1lY2hhbmljYWwgbWVyZ2UuICBJbiBvdGhlciB3b3JkcywKKworICAgICAkIGVjaG8gJFggfCBNZXRhL1JlaW50ZWdyYXRlCisKK2lzIHJvdWdobHkgZXF1aXZhbGVudCB0byB0aGlzIHNlcXVlbmNlOgorCisgICAgICQgZ2l0IG1lcmdlIC0tcmVyZXJlLWF1dG91cGRhdGUgJFgKKyAgICAgJCBnaXQgY29tbWl0CisgICAgICQgZ2l0IGNoZXJyeS1waWNrIC1uIHJlZnMvbWVyZ2UtZml4LyRYCisgICAgICQgZ2l0IGNvbW1pdCAtLWFtZW5kCisKK1RoZSBnb2FsIG9mIHRoaXMgInByZXBhcmUgYSBtZXJnZS1maXgiIHN0ZXAgaXMgdG8gY29tZSB1cCB3aXRoIGEKK2NvbW1pdCB0aGF0IGNhbiBiZSBzcXVhc2hlZCBpbnRvIGEgcmVzdWx0IG9mIG1lY2hhbmljYWwgbWVyZ2UgdG8KK2NvcnJlY3Qgc2VtYW50aWMgY29uZmxpY3RzLgorCitBZnRlciBmaW5kaW5nIHRoYXQgdGhlIHJlc3VsdCBvZiBtZXJnaW5nIGJyYW5jaCAiYWkvdG9waWMiIHRvIGFuCitpbnRlZ3JhdGlvbiBicmFuY2ggaGFkIHN1Y2ggYSBzZW1hbnRpYyBjb25mbGljdCwgc2F5IHB1fjQsIGNoZWNrIHRoZQorcHJvYmxlbWF0aWMgbWVyZ2Ugb3V0IG9uIGEgZGV0YWNoZWQgSEVBRCwgZWRpdCB0aGUgd29ya2luZyB0cmVlIHRvCitmaXggdGhlIHNlbWFudGljIGNvbmZsaWN0LCBhbmQgbWFrZSBhIHNlcGFyYXRlIGNvbW1pdCB0byByZWNvcmQgdGhlCitmaXgtdXA6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgcHV+NAorICAgICAkIGdpdCBzaG93IC1zIC0tcHJldHR5PSVzIDsjIGRvdWJsZSBjaGVjaworICAgICBNZXJnZSBicmFuY2ggJ2FpL3RvcGljJyB0byBwdQorICAgICAkIGVkaXQKKyAgICAgJCBnaXQgY29tbWl0IC1tICdtZXJnZS1maXgvYWkvdG9waWMnIC1hCisKK1RoZW4gbWFrZSBhIHJlZmVyZW5jZSAicmVmcy9tZXJnZS1maXgvYWkvdG9waWMiIHRvIHBvaW50IGF0IHRoaXMKK3Jlc3VsdDoKKworICAgICAkIGdpdCB1cGRhdGUtcmVmIHJlZnMvbWVyZ2UtZml4L2FpL3RvcGljIEhFQUQKKworVGhlbiBkb3VibGUgY2hlY2sgdGhlIHJlc3VsdCBieSBhc2tpbmcgTWV0YS9SZWludGVncmF0ZSB0byByZWRvIHRoZQorbWVyZ2U6CisKKyAgICAgJCBnaXQgY2hlY2tvdXQgcHV+NSA7IyB0aGUgcGFyZW50IG9mIHRoZSBwcm9ibGVtIG1lcmdlCisgICAgICQgZWNobyBhaS90b3BpYyB8IE1ldGEvUmVpbnRlZ3JhdGUKKyAgICAgJCBnaXQgZGlmZiBwdX40CisKK1RoaXMgdGltZSwgYmVjYXVzZSB5b3UgcHJlcGFyZWQgcmVmcy9tZXJnZS1maXgvYWkvdG9waWMsIHRoZQorcmVzdWx0aW5nIG1lcmdlIHNob3VsZCBoYXZlIGJlZW4gdHdlYWtlZCB0byBpbmNsdWRlIHRoZSBmaXggZm9yIHRoZQorc2VtYW50aWMgY29uZmxpY3QuCisKK05vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhhdCB0aGUgb3JkZXIgaW4gd2hpY2ggY29uZmxpY3RpbmcgYnJhbmNoZXMKK2FyZSBtZXJnZWQgZG9lcyBub3QgY2hhbmdlLiAgSWYgdGhlIHJlYXNvbiB3aHkgbWVyZ2luZyBhaS90b3BpYworYnJhbmNoIG5lZWRzIHRoaXMgbWVyZ2UtZml4IGlzIGJlY2F1c2UgYW5vdGhlciBicmFuY2ggbWVyZ2VkIGVhcmxpZXIKK3RvIHRoZSBpbnRlZ3JhdGlvbiBicmFuY2ggY2hhbmdlZCB0aGUgdW5kZXJseWluZyBhc3N1bXB0aW9uIGFpL3RvcGljCiticmFuY2ggbWFkZSAoZS5nLiBhaS90b3BpYyBicmFuY2ggYWRkZWQgYSBzaXRlIHRvIHJlZmVyIHRvIGEKK3ZhcmlhYmxlLCB3aGlsZSB0aGUgb3RoZXIgYnJhbmNoIHJlbmFtZWQgdGhhdCB2YXJpYWJsZSBhbmQgYWRqdXN0ZWQKK2V4aXN0aW5nIHVzZSBzaXRlcyksIGFuZCBpZiB5b3UgY2hhbmdlZCByZWRvLWpjaCAob3IgcmVkby1wdSkgc2NyaXB0Cit0byBtZXJnZSBhaS90b3BpYyBicmFuY2ggYmVmb3JlIHRoZSBvdGhlciBicmFuY2gsIHRoZW4gdGhlIGFib3ZlCittZXJnZS1maXggc2hvdWxkIG5vdCBiZSBhcHBsaWVkIHdoaWxlIG1lcmdpbmcgYWkvdG9waWMsIGJ1dCBzaG91bGQKK2luc3RlYWQgYmUgYXBwbGllZCB3aGlsZSBtZXJnaW5nIHRoZSBvdGhlciBicmFuY2guICBZb3Ugd291bGQgbmVlZAordG8gbW92ZSB0aGUgZml4IHRvIGFwcGx5IHRvIHRoZSBvdGhlciBicmFuY2gsIHBlcmhhcHMgbGlrZSB0aGlzOgorCisgICAgICAkIG1mPXJlZnMvbWVyZ2UtZml4CisgICAgICAkIGdpdCB1cGRhdGUtcmVmICRtZi8kdGhlX290aGVyX2JyYW5jaCAkbWYvYWkvdG9waWMKKyAgICAgICQgZ2l0IHVwZGF0ZS1yZWYgLWQgJG1mL2FpL3RvcGljCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL25ldy1jb21tYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vbmV3LWNvbW1hbmQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNzcyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL25ldy1jb21tYW5kLnR4dApAQCAtMCwwICsxLDEwNiBAQAorRnJvbTogRXJpYyBTLiBSYXltb25kIDxlc3JAdGh5cnN1cy5jb20+CitBYnN0cmFjdDogVGhpcyBpcyBob3ctdG8gZG9jdW1lbnRhdGlvbiBmb3IgcGVvcGxlIHdobyB3YW50IHRvIGFkZCBleHRlbnNpb24KKyBjb21tYW5kcyB0byBHaXQuICBJdCBzaG91bGQgYmUgcmVhZCBhbG9uZ3NpZGUgYXBpLWJ1aWx0aW4udHh0LgorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0hvdyB0byBpbnRlZ3JhdGUgbmV3IHN1YmNvbW1hbmRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIGhvdy10byBkb2N1bWVudGF0aW9uIGZvciBwZW9wbGUgd2hvIHdhbnQgdG8gYWRkIGV4dGVuc2lvbgorY29tbWFuZHMgdG8gR2l0LiAgSXQgc2hvdWxkIGJlIHJlYWQgYWxvbmdzaWRlIGFwaS1idWlsdGluLnR4dC4KKworUnVudGltZSBlbnZpcm9ubWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgc3ViY29tbWFuZHMgYXJlIHN0YW5kYWxvbmUgZXhlY3V0YWJsZXMgdGhhdCBsaXZlIGluIHRoZSBHaXQgZXhlYworcGF0aCwgbm9ybWFsbHkgL3Vzci9saWIvZ2l0LWNvcmUuICBUaGUgZ2l0IGV4ZWN1dGFibGUgaXRzZWxmIGlzIGEKK3RoaW4gd3JhcHBlciB0aGF0IGtub3dzIHdoZXJlIHRoZSBzdWJjb21tYW5kcyBsaXZlLCBhbmQgcnVucyB0aGVtIGJ5CitwYXNzaW5nIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdG8gdGhlbS4KKworKElmICJnaXQgZm9vIiBpcyBub3QgZm91bmQgaW4gdGhlIEdpdCBleGVjIHBhdGgsIHRoZSB3cmFwcGVyCit3aWxsIGxvb2sgaW4gdGhlIHJlc3Qgb2YgeW91ciAkUEFUSCBmb3IgaXQuICBUaHVzLCBpdCdzIHBvc3NpYmxlCit0byB3cml0ZSBsb2NhbCBHaXQgZXh0ZW5zaW9ucyB0aGF0IGRvbid0IGxpdmUgaW4gc3lzdGVtIHNwYWNlLikKKworSW1wbGVtZW50YXRpb24gbGFuZ3VhZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9zdCBzdWJjb21tYW5kcyBhcmUgd3JpdHRlbiBpbiBDIG9yIHNoZWxsLiAgQSBmZXcgYXJlIHdyaXR0ZW4gaW4KK1BlcmwuCisKK1doaWxlIHdlIHN0cm9uZ2x5IGVuY291cmFnZSBjb2RpbmcgaW4gcG9ydGFibGUgQyBmb3IgcG9ydGFiaWxpdHksCit0aGVzZSBzcGVjaWZpYyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGFyZSBhbHNvIGFjY2VwdGFibGUuICBXZSB3b24ndAorYWNjZXB0IG1vcmUgd2l0aG91dCBhIHZlcnkgc3Ryb25nIHRlY2huaWNhbCBjYXNlLCBhcyB3ZSBkb24ndCB3YW50Cit0byBicm9hZGVuIHRoZSBHaXQgc3VpdGUncyByZXF1aXJlZCBkZXBlbmRlbmNpZXMuICBJbXBvcnQgdXRpbGl0aWVzLAorc3VyZ2ljYWwgdG9vbHMsIHJlbW90ZSBoZWxwZXJzIGFuZCBvdGhlciBjb2RlIGF0IHRoZSBlZGdlcyBvZiB0aGUKK0dpdCBzdWl0ZSBhcmUgbW9yZSBsZW5pZW50IGFuZCB3ZSBhbGxvdyBQeXRob24gKGFuZCBldmVuIFRjbC90ayksCitidXQgdGhleSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGNvcmUgZnVuY3Rpb25zLgorCitUaGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4gIEVzcGVjaWFsbHkgUHl0aG9uIGlzIG5vdCBhbGxvd2VkIGluCitjb3JlIGJlY2F1c2Ugd2UgbmVlZCBiZXR0ZXIgUHl0aG9uIGludGVncmF0aW9uIGluIHRoZSBHaXQgV2luZG93cworaW5zdGFsbGVyIGJlZm9yZSB3ZSBjYW4gYmUgY29uZmlkZW50IHBlb3BsZSBpbiB0aGF0IGVudmlyb25tZW50Cit3b24ndCBleHBlcmllbmNlIGFuIHVuYWNjZXB0YWJseSBsYXJnZSBsb3NzIG9mIGNhcGFiaWxpdHkuCisKK0MgY29tbWFuZHMgYXJlIG5vcm1hbGx5IHdyaXR0ZW4gYXMgc2luZ2xlIG1vZHVsZXMsIG5hbWVkIGFmdGVyIHRoZQorY29tbWFuZCwgdGhhdCBsaW5rIGEgY29sbGVjdGlvbiBvZiBmdW5jdGlvbnMgY2FsbGVkIGxpYmdpdC4gIFRodXMsCit5b3VyIGNvbW1hbmQgJ2dpdC1mb28nIHdvdWxkIG5vcm1hbGx5IGJlIGltcGxlbWVudGVkIGFzIGEgc2luZ2xlCisiZ2l0LWZvby5jIiAob3IgImJ1aWx0aW4vZm9vLmMiIGlmIGl0IGlzIHRvIGJlIGxpbmtlZCB0byB0aGUgbWFpbgorYmluYXJ5KTsgdGhpcyBvcmdhbml6YXRpb24gbWFrZXMgaXQgZWFzeSBmb3IgcGVvcGxlIHJlYWRpbmcgdGhlIGNvZGUKK3RvIGZpbmQgdGhpbmdzLgorCitTZWUgdGhlIENvZGluZ0d1aWRlbGluZXMgZG9jdW1lbnQgZm9yIG90aGVyIGd1aWRhbmNlIG9uIHdoYXQgd2UgY29uc2lkZXIKK2dvb2QgcHJhY3RpY2UgaW4gQyBhbmQgc2hlbGwsIGFuZCBhcGktYnVpbHRpbi50eHQgZm9yIHRoZSBzdXBwb3J0CitmdW5jdGlvbnMgYXZhaWxhYmxlIHRvIGJ1aWx0LWluIGNvbW1hbmRzIHdyaXR0ZW4gaW4gQy4KKworV2hhdCBldmVyeSBleHRlbnNpb24gY29tbWFuZCBuZWVkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgbXVzdCBoYXZlIGEgbWFuIHBhZ2UsIHdyaXR0ZW4gaW4gYXNjaWlkb2MgKHRoaXMgaXMgd2hhdCBHaXQgaGVscAorZm9sbG93ZWQgYnkgeW91ciBzdWJjb21tYW5kIG5hbWUgd2lsbCBkaXNwbGF5KS4gIEJlIGF3YXJlIHRoYXQgdGhlcmUgaXMKK2EgbG9jYWwgYXNjaWlkb2MgY29uZmlndXJhdGlvbiBhbmQgbWFjcm9zIHdoaWNoIHlvdSBzaG91bGQgdXNlLiAgSXQncworb2Z0ZW4gaGVscGZ1bCB0byBzdGFydCBieSBjbG9uaW5nIGFuIGV4aXN0aW5nIHBhZ2UgYW5kIHJlcGxhY2luZyB0aGUKK3RleHQgY29udGVudC4KKworWW91IG11c3QgaGF2ZSBhIHRlc3QsIHdyaXR0ZW4gdG8gcmVwb3J0IGluIFRBUCAoVGVzdCBBbnl0aGluZyBQcm90b2NvbCkuCitUZXN0cyBhcmUgZXhlY3V0YWJsZXMgKHVzdWFsbHkgc2hlbGwgc2NyaXB0cykgdGhhdCBsaXZlIGluIHRoZSAndCcKK3N1YmRpcmVjdG9yeSBvZiB0aGUgdHJlZS4gIEVhY2ggdGVzdCBuYW1lIGJlZ2lucyB3aXRoICd0JyBhbmQgYSBzZXF1ZW5jZQorbnVtYmVyIHRoYXQgY29udHJvbHMgd2hlcmUgaW4gdGhlIHRlc3Qgc2VxdWVuY2UgaXQgd2lsbCBiZSBleGVjdXRlZDsKK2NvbnZlbnRpb25hbGx5IHRoZSByZXN0IG9mIHRoZSBuYW1lIHN0ZW0gaXMgdGhhdCBvZiB0aGUgY29tbWFuZAorYmVpbmcgdGVzdGVkLgorCitSZWFkIHRoZSBmaWxlIHQvUkVBRE1FIHRvIGxlYXJuIG1vcmUgYWJvdXQgdGhlIGNvbnZlbnRpb25zIHRvIGJlIHVzZWQKK2luIHdyaXRpbmcgdGVzdHMsIGFuZCB0aGUgdGVzdCBzdXBwb3J0IGxpYnJhcnkuCisKK0ludGVncmF0aW5nIGEgY29tbWFuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hlcmUgYXJlIHRoZSB0aGluZ3MgeW91IG5lZWQgdG8gZG8gd2hlbiB5b3Ugd2FudCB0byBtZXJnZSBhIG5ldworc3ViY29tbWFuZCBpbnRvIHRoZSBHaXQgdHJlZS4KKworMS4gRG9uJ3QgZm9yZ2V0IHRvIHNpZ24gb2ZmIHlvdXIgcGF0Y2ghCisKKzIuIEFwcGVuZCB5b3VyIGNvbW1hbmQgbmFtZSB0byBvbmUgb2YgdGhlIHZhcmlhYmxlcyBCVUlMVElOX09CSlMsCitFWFRSQV9QUk9HUkFNUywgU0NSSVBUX1NILCBTQ1JJUFRfUEVSTCBvciBTQ1JJUFRfUFlUSE9OLgorCiszLiBEcm9wIGl0cyB0ZXN0IGluIHRoZSB0IGRpcmVjdG9yeS4KKworNC4gSWYgeW91ciBjb21tYW5kIGlzIGltcGxlbWVudGVkIGluIGFuIGludGVycHJldGVkIGxhbmd1YWdlIHdpdGggYQorcC1jb2RlIGludGVybWVkaWF0ZSBmb3JtLCBtYWtlIHN1cmUgLmdpdGlnbm9yZSBpbiB0aGUgbWFpbiBkaXJlY3RvcnkKK2luY2x1ZGVzIGEgcGF0dGVybiBlbnRyeSB0aGF0IGlnbm9yZXMgc3VjaCBmaWxlcy4gIFB5dGhvbiAucHljIGFuZAorLnB5byBmaWxlcyB3aWxsIGFscmVhZHkgYmUgY292ZXJlZC4KKworNS4gSWYgeW91ciBjb21tYW5kIGhhcyBhbnkgZGVwZW5kZW5jeSBvbiBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZgoreW91ciBsYW5ndWFnZSwgZG9jdW1lbnQgaXQgaW4gdGhlIElOU1RBTEwgZmlsZS4KKworNi4gVGhlcmUgaXMgYSBmaWxlIGNvbW1hbmQtbGlzdC50eHQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBtYWluIGRpcmVjdG9yeQordGhhdCBjYXRlZ29yaXplcyBjb21tYW5kcyBieSB0eXBlLCBzbyB0aGV5IGNhbiBiZSBsaXN0ZWQgaW4gYXBwcm9wcmlhdGUKK3N1YnNlY3Rpb25zIGluIHRoZSBkb2N1bWVudGF0aW9uJ3Mgc3VtbWFyeSBjb21tYW5kIGxpc3QuICBBZGQgYW4gZW50cnkKK2ZvciB5b3Vycy4gIFRvIHVuZGVyc3RhbmQgdGhlIGNhdGVnb3JpZXMsIGxvb2sgYXQgZ2l0LWNvbW1hbmRzLnR4dAoraW4gdGhlIG1haW4gZGlyZWN0b3J5LiAgSWYgdGhlIG5ldyBjb21tYW5kIGlzIHBhcnQgb2YgdGhlIHR5cGljYWwgR2l0Cit3b3JrZmxvdyBhbmQgeW91IGJlbGlldmUgaXQgY29tbW9uIGVub3VnaCB0byBiZSBtZW50aW9uZWQgaW4gJ2dpdCBoZWxwJywKK21hcCB0aGlzIGNvbW1hbmQgdG8gYSBjb21tb24gZ3JvdXAgaW4gdGhlIGNvbHVtbiBbY29tbW9uXS4KKworNy4gR2l2ZSB0aGUgbWFpbnRhaW5lciBvbmUgcGFyYWdyYXBoIHRvIGluY2x1ZGUgaW4gdGhlIFJlbE5vdGVzIGZpbGUKK3RvIGRlc2NyaWJlIHRoZSBuZXcgZmVhdHVyZTsgYSBnb29kIHBsYWNlIHRvIGRvIHNvIGlzIGluIHRoZSBjb3ZlcgorbGV0dGVyIFtQQVRDSCAwL25dLgorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJhc2UtZnJvbS1pbnRlcm5hbC1icmFuY2gudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyY2I1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlYmFzZS1mcm9tLWludGVybmFsLWJyYW5jaC50eHQKQEAgLTAsMCArMSwxNjQgQEAKK0Zyb206CUp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KK1RvOglnaXRAdmdlci5rZXJuZWwub3JnCitDYzoJUGV0ciBCYXVkaXMgPHBhc2t5QHN1c2UuY3o+LCBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CitTdWJqZWN0OiBSZTogc2VuZGluZyBjaGFuZ2VzZXRzIGZyb20gdGhlIG1pZGRsZSBvZiBhIGdpdCB0cmVlCitEYXRlOglTdW4sIDE0IEF1ZyAyMDA1IDE4OjM3OjM5IC0wNzAwCitBYnN0cmFjdDogSW4gdGhpcyBhcnRpY2xlLCBKQyB0YWxrcyBhYm91dCBob3cgaGUgcmViYXNlcyB0aGUKKyBwdWJsaWMgInB1IiBicmFuY2ggdXNpbmcgdGhlIGNvcmUgR2l0IHRvb2xzIHdoZW4gaGUgdXBkYXRlcworIHRoZSAibWFzdGVyIiBicmFuY2gsIGFuZCBob3cgInJlYmFzZSIgd29ya3MuICBBbHNvIGRpc2N1c3NlZAorIGlzIGhvdyB0aGlzIGFwcGxpZXMgdG8gaW5kaXZpZHVhbCBkZXZlbG9wZXJzIHdobyBzZW5kcyBwYXRjaGVzCisgdXBzdHJlYW0uCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworSG93IHRvIHJlYmFzZSBmcm9tIGFuIGludGVybmFsIGJyYW5jaAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUGV0ciBCYXVkaXMgPHBhc2t5QHN1c2UuY3o+IHdyaXRlczoKKworPiBEZWFyIGRpYXJ5LCBvbiBTdW4sIEF1ZyAxNCwgMjAwNSBhdCAwOTo1NzoxM0FNIENFU1QsIEkgZ290IGEgbGV0dGVyCis+IHdoZXJlIEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4gdG9sZCBtZSB0aGF0Li4uCis+PiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+IHdyaXRlczoKKz4+Cis+PiA+IEp1bmlvLCBtYXliZSB5b3Ugd2FudCB0byB0YWxrIGFib3V0IGhvdyB5b3UgbW92ZSBwYXRjaGVzIGZyb20geW91ciAicHUiCis+PiA+IGJyYW5jaCB0byB0aGUgcmVhbCBicmFuY2hlcy4KKz4+Cis+IEFjdHVhbGx5LCB3b3VsZG4ndCB0aGlzIGJlIGFsc28gcHJlY2lzZWx5IGZvciB3aGF0IFN0R0lUIGlzIGludGVuZGVkIHRvPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXhhY3RseSBteSBmZWVsaW5nLiAgSSB3YXMgc29ydCBvZiB3YWl0aW5nIGZvciBDYXRhbGluIHRvIHNwZWFrCit1cC4gIFdpdGggaXRzIGJhc2luZyBwaGlsb3NvcGhpY2FsIGFuY2VzdHJ5IG9uIHF1aWx0LCB0aGlzIGlzCit0aGUga2luZCBvZiB0YXNrIFN0R0lUIGlzIGRlc2lnbmVkIHRvIGRvLgorCitJIGp1c3QgaGF2ZSBkb25lIGEgc2ltcGxlciBvbmUsIHRoaXMgdGltZSB1c2luZyBvbmx5IHRoZSBjb3JlCitHaXQgdG9vbHMuCisKK0kgaGFkIGEgaGFuZGZ1bCBvZiBjb21taXRzIHRoYXQgd2VyZSBhaGVhZCBvZiBtYXN0ZXIgaW4gcHUsIGFuZCBJCit3YW50ZWQgdG8gYWRkIHNvbWUgZG9jdW1lbnRhdGlvbiBieXBhc3NpbmcgbXkgdXN1YWwgaGFiaXQgb2YKK3BsYWNpbmcgbmV3IHRoaW5ncyBpbiBwdSBmaXJzdC4gIEF0IHRoZSBiZWdpbm5pbmcsIHRoZSBjb21taXQKK2FuY2VzdHJ5IGdyYXBoIGxvb2tlZCBsaWtlIHRoaXM6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiJwdSIgaGVhZAorICAgIG1hc3RlciAtLT4gIzEgLS0+ICMyIC0tPiAjMworCitTbyBJIHN0YXJ0ZWQgZnJvbSBtYXN0ZXIsIG1hZGUgYSBidW5jaCBvZiBlZGl0cywgYW5kIGNvbW1pdHRlZDoKKworICAgICQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorICAgICQgY2QgRG9jdW1lbnRhdGlvbjsgZWQgZ2l0LnR4dCAuLi4KKyAgICAkIGNkIC4uOyBnaXQgYWRkIERvY3VtZW50YXRpb24vKi50eHQKKyAgICAkIGdpdCBjb21taXQgLXMKKworQWZ0ZXIgdGhlIGNvbW1pdCwgdGhlIGFuY2VzdHJ5IGdyYXBoIHdvdWxkIGxvb2sgbGlrZSB0aGlzOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqInB1IiBoZWFkCisgICAgbWFzdGVyXiAtLT4gIzEgLS0+ICMyIC0tPiAjMworICAgICAgICAgIFwKKyAgICAgICAgICAgIFwtLS0+IG1hc3RlcgorCitUaGUgb2xkIG1hc3RlciBpcyBub3cgbWFzdGVyXiAodGhlIGZpcnN0IHBhcmVudCBvZiB0aGUgbWFzdGVyKS4KK1RoZSBuZXcgbWFzdGVyIGNvbW1pdCBob2xkcyBteSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKK05vdyBJIGhhdmUgdG8gZGVhbCB3aXRoICJwdSIgYnJhbmNoLgorCitUaGlzIGlzIHRoZSBraW5kIG9mIHNpdHVhdGlvbiBJIHVzZWQgdG8gaGF2ZSBhbGwgdGhlIHRpbWUgd2hlbgorTGludXMgd2FzIHRoZSBtYWludGFpbmVyIGFuZCBJIHdhcyBhIGNvbnRyaWJ1dG9yLCB3aGVuIHlvdSBsb29rCithdCAibWFzdGVyIiBicmFuY2ggYmVpbmcgdGhlICJtYWludGFpbmVyIiBicmFuY2gsIGFuZCAicHUiCiticmFuY2ggYmVpbmcgdGhlICJjb250cmlidXRvciIgYnJhbmNoLiAgWW91ciB3b3JrIHN0YXJ0ZWQgYXQgdGhlCit0aXAgb2YgdGhlICJtYWludGFpbmVyIiBicmFuY2ggc29tZSB0aW1lIGFnbywgeW91IG1hZGUgYSBsb3Qgb2YKK3Byb2dyZXNzIGluIHRoZSBtZWFudGltZSwgYW5kIG5vdyB0aGUgbWFpbnRhaW5lciBicmFuY2ggaGFzIHNvbWUKK290aGVyIGNvbW1pdHMgeW91IGRvIG5vdCBoYXZlIHlldC4gIEFuZCAiZ2l0IHJlYmFzZSIgd2FzIHdyaXR0ZW4KK3dpdGggdGhlIGV4cGxpY2l0IHB1cnBvc2Ugb2YgaGVscGluZyB0byBtYWludGFpbiBicmFuY2hlcyBsaWtlCisicHUiLiAgWW91IF9jb3VsZF8gbWVyZ2UgbWFzdGVyIHRvIHB1IGFuZCBrZWVwIGdvaW5nLCBidXQgaWYgeW91CitldmVudHVhbGx5IHdhbnQgdG8gY2hlcnJ5cGljayBhbmQgbWVyZ2Ugc29tZSBidXQgbm90IG5lY2Vzc2FyaWx5CithbGwgY2hhbmdlcyBiYWNrIHRvIHRoZSBtYXN0ZXIgYnJhbmNoLCBpdCBvZnRlbiBtYWtlcyBsYXRlcgorb3BlcmF0aW9ucyBmb3IgX3lvdV8gZWFzaWVyIGlmIHlvdSByZWJhc2UgKGkuZS4gY2FycnkgZm9yd2FyZAoreW91ciBjaGFuZ2VzKSAicHUiIHJhdGhlciB0aGFuIG1lcmdlLiAgU28gSSByYW4gImdpdCByZWJhc2UiOgorCisgICAgJCBnaXQgY2hlY2tvdXQgcHUKKyAgICAkIGdpdCByZWJhc2UgbWFzdGVyIHB1CisKK1doYXQgdGhpcyBkb2VzIGlzIHRvIHBpY2sgYWxsIHRoZSBjb21taXRzIHNpbmNlIHRoZSBjdXJyZW50CiticmFuY2ggKG5vdGUgdGhhdCBJIG5vdyBhbSBvbiAicHUiIGJyYW5jaCkgZm9ya2VkIGZyb20gdGhlCittYXN0ZXIgYnJhbmNoLCBhbmQgZm9yd2FyZCBwb3J0IHRoZXNlIGNoYW5nZXMuCisKKyAgICBtYXN0ZXJeIC0tPiAjMSAtLT4gIzIgLS0+ICMzCisgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqInB1IiBoZWFkCisgICAgICAgICAgICBcLS0tPiBtYXN0ZXIgLS0+ICMxJyAtLT4gIzInIC0tPiAjMycKKworVGhlIGRpZmYgYmV0d2VlbiBtYXN0ZXJeIGFuZCAjMSBpcyBhcHBsaWVkIHRvIG1hc3RlciBhbmQKK2NvbW1pdHRlZCB0byBjcmVhdGUgIzEnIGNvbW1pdCB3aXRoIHRoZSBjb21taXQgaW5mb3JtYXRpb24gKGxvZywKK2F1dGhvciBhbmQgZGF0ZSkgdGFrZW4gZnJvbSBjb21taXQgIzEuICBPbiB0b3Agb2YgdGhhdCAjMicgYW5kICMzJworY29tbWl0cyBhcmUgbWFkZSBzaW1pbGFybHkgb3V0IG9mICMyIGFuZCAjMyBjb21taXRzLgorCitPbGQgIzMgaXMgbm90IHJlY29yZGVkIGluIGFueSBvZiB0aGUgLmdpdC9yZWZzL2hlYWRzLyBmaWxlCithbnltb3JlLCBzbyBhZnRlciBkb2luZyB0aGlzIHlvdSB3aWxsIGhhdmUgZGFuZ2xpbmcgY29tbWl0IGlmCit5b3UgcmFuIGZzY2stY2FjaGUsIHdoaWNoIGlzIG5vcm1hbC4gIEFmdGVyIHRlc3RpbmcgInB1IiwgeW91CitjYW4gcnVuICJnaXQgcHJ1bmUiIHRvIGdldCByaWQgb2YgdGhvc2Ugb3JpZ2luYWwgdGhyZWUgY29tbWl0cy4KKworV2hpbGUgSSBhbSB0YWxraW5nIGFib3V0ICJnaXQgcmViYXNlIiwgSSBzaG91bGQgdGFsayBhYm91dCBob3cKK3RvIGRvIGNoZXJyeXBpY2tpbmcgdXNpbmcgb25seSB0aGUgY29yZSBHaXQgdG9vbHMuCisKK0xldCdzIGdvIGJhY2sgdG8gdGhlIGVhcmxpZXIgcGljdHVyZSwgd2l0aCBkaWZmZXJlbnQgbGFiZWxzLgorCitZb3UsIGFzIGFuIGluZGl2aWR1YWwgZGV2ZWxvcGVyLCBjbG9uZWQgdXBzdHJlYW0gcmVwb3NpdG9yeSBhbmQKK21hZGUgYSBjb3VwbGUgb2YgY29tbWl0cyBvbiB0b3Agb2YgaXQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5b3VyICJtYXN0ZXIiIGhlYWQKKyAgIHVwc3RyZWFtIC0tPiAjMSAtLT4gIzIgLS0+ICMzCisKK1lvdSB3b3VsZCB3YW50IGNoYW5nZXMgIzIgYW5kICMzIGluY29ycG9yYXRlZCBpbiB0aGUgdXBzdHJlYW0sCit3aGlsZSB5b3UgZmVlbCB0aGF0ICMxIG1heSBuZWVkIGZ1cnRoZXIgaW1wcm92ZW1lbnRzLiAgU28geW91CitwcmVwYXJlICMyIGFuZCAjMyBmb3IgZS1tYWlsIHN1Ym1pc3Npb24uCisKKyAgICAkIGdpdCBmb3JtYXQtcGF0Y2ggbWFzdGVyXl4gbWFzdGVyCisKK1RoaXMgY3JlYXRlcyB0d28gZmlsZXMsIDAwMDEtWFhYWC5wYXRjaCBhbmQgMDAwMi1YWFhYLnBhdGNoLiAgU2VuZAordGhlbSBvdXQgIlRvOiAiIHlvdXIgcHJvamVjdCBtYWludGFpbmVyIGFuZCAiQ2M6ICIgeW91ciBtYWlsaW5nCitsaXN0LiAgWW91IGNvdWxkIHVzZSBjb250cmlidXRlZCBzY3JpcHQgZ2l0LXNlbmQtZW1haWwgaWYKK3lvdXIgaG9zdCBoYXMgbmVjZXNzYXJ5IHBlcmwgbW9kdWxlcyBmb3IgdGhpcywgYnV0IHlvdXIgdXN1YWwKK01VQSB3b3VsZCBkbyBhcyBsb25nIGFzIGl0IGRvZXMgbm90IGNvcnJ1cHQgd2hpdGVzcGFjZXMgaW4gdGhlCitwYXRjaC4KKworVGhlbiB5b3Ugd291bGQgd2FpdCwgYW5kIHlvdSBmaW5kIG91dCB0aGF0IHRoZSB1cHN0cmVhbSBwaWNrZWQKK3VwIHlvdXIgY2hhbmdlcywgYWxvbmcgd2l0aCBvdGhlciBjaGFuZ2VzLgorCisgICB3aGVyZSAgICAgICAgICAgICAgICAgICAgICAqeW91ciAibWFzdGVyIiBoZWFkCisgIHVwc3RyZWFtIC0tPiAjMSAtLT4gIzIgLS0+ICMzCisgICAgdXNlZCAgIFwKKyAgIHRvIGJlICAgICBcLS0+ICNBIC0tPiAjMicgLS0+ICMzJyAtLT4gI0IgLS0+ICNDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXBzdHJlYW0gaGVhZAorCitUaGUgdHdvIGNvbW1pdHMgIzInIGFuZCAjMycgaW4gdGhlIGFib3ZlIHBpY3R1cmUgcmVjb3JkIHRoZSBzYW1lCitjaGFuZ2VzIHlvdXIgZS1tYWlsIHN1Ym1pc3Npb24gZm9yICMyIGFuZCAjMyBjb250YWluZWQsIGJ1dAorcHJvYmFibHkgd2l0aCB0aGUgbmV3IHNpZ24tb2ZmIGxpbmUgYWRkZWQgYnkgdGhlIHVwc3RyZWFtCittYWludGFpbmVyIGFuZCBkZWZpbml0ZWx5IHdpdGggZGlmZmVyZW50IGNvbW1pdHRlciBhbmQgYW5jZXN0cnkKK2luZm9ybWF0aW9uLCB0aGV5IGFyZSBkaWZmZXJlbnQgb2JqZWN0cyBmcm9tICMyIGFuZCAjMyBjb21taXRzLgorCitZb3UgZmV0Y2ggZnJvbSB1cHN0cmVhbSwgYnV0IG5vdCBtZXJnZS4KKworICAgICQgZ2l0IGZldGNoIHVwc3RyZWFtCisKK1RoaXMgbGVhdmVzIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQgaW4gLmdpdC9GRVRDSF9IRUFEIGJ1dAorZG9lcyBub3QgdG91Y2ggeW91ciAuZ2l0L0hFQUQgb3IgLmdpdC9yZWZzL2hlYWRzL21hc3Rlci4KK1lvdSBydW4gImdpdCByZWJhc2UiIG5vdy4KKworICAgICQgZ2l0IHJlYmFzZSBGRVRDSF9IRUFEIG1hc3RlcgorCitFYXJsaWVyLCBJIHNhaWQgdGhhdCByZWJhc2UgYXBwbGllcyBhbGwgdGhlIGNvbW1pdHMgZnJvbSB5b3VyCiticmFuY2ggb24gdG9wIG9mIHRoZSB1cHN0cmVhbSBoZWFkLiAgV2VsbCwgSSBsaWVkLiAgImdpdCByZWJhc2UiCitpcyBhIGJpdCBzbWFydGVyIHRoYW4gdGhhdCBhbmQgbm90aWNlcyB0aGF0ICMyIGFuZCAjMyBuZWVkIG5vdAorYmUgYXBwbGllZCwgc28gaXQgb25seSBhcHBsaWVzICMxLiAgVGhlIGNvbW1pdCBhbmNlc3RyeSBncmFwaAorYmVjb21lcyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisgICB3aGVyZSAgICAgICAgICAgICAgICAgICAgICp5b3VyIG9sZCAibWFzdGVyIiBoZWFkCisgIHVwc3RyZWFtIC0tPiAjMSAtLT4gIzIgLS0+ICMzCisgICAgdXNlZCAgIFwgICAgICAgICAgICAgICAgICAgICAgeW91ciBuZXcgIm1hc3RlciIgaGVhZCoKKyAgIHRvIGJlICAgICBcLS0+ICNBIC0tPiAjMicgLS0+ICMzJyAtLT4gI0IgLS0+ICNDIC0tPiAjMScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1cHN0cmVhbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZAorCitBZ2FpbiwgImdpdCBwcnVuZSIgd291bGQgZGlzY2FyZCB0aGUgZGlzdXNlZCBjb21taXRzICMxLSMzIGFuZAoreW91IGNvbnRpbnVlIG9uIHN0YXJ0aW5nIGZyb20gdGhlIG5ldyAibWFzdGVyIiBoZWFkLCB3aGljaCBpcwordGhlICMxJyBjb21taXQuCisKKy1qYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJ1aWxkLWZyb20tdXBkYXRlLWhvb2sudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWJ1aWxkLWZyb20tdXBkYXRlLWhvb2sudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Mzc4ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlYnVpbGQtZnJvbS11cGRhdGUtaG9vay50eHQKQEAgLTAsMCArMSw5MCBAQAorU3ViamVjdDogW0hPV1RPXSBVc2luZyBwb3N0LXVwZGF0ZSBob29rCitNZXNzYWdlLUlEOiA8N3Z5ODZvNnVzeC5mc2ZAYXNzaWduZWQtYnktZGhjcC5jb3gubmV0PgorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorRGF0ZTogRnJpLCAyNiBBdWcgMjAwNSAxODoxOToxMCAtMDcwMAorQWJzdHJhY3Q6IEluIHRoaXMgaG93LXRvIGFydGljbGUsIEpDIHRhbGtzIGFib3V0IGhvdyBoZQorIHVzZXMgdGhlIHBvc3QtdXBkYXRlIGhvb2sgdG8gYXV0b21hdGUgR2l0IGRvY3VtZW50YXRpb24gcGFnZQorIHNob3duIGF0IGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzLy4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gcmVidWlsZCBmcm9tIHVwZGF0ZSBob29rCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBwYWdlcyB1bmRlciBodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy8KK2FyZSBidWlsdCBmcm9tIERvY3VtZW50YXRpb24vIGRpcmVjdG9yeSBvZiB0aGUgZ2l0LmdpdCBwcm9qZWN0CithbmQgbmVlZGVkIHRvIGJlIGtlcHQgdXAtdG8tZGF0ZS4gIFRoZSB3d3cua2VybmVsLm9yZy8gc2VydmVycworYXJlIG1pcnJvcmVkIGFuZCBJIHdhcyB0b2xkIHRoYXQgdGhlIG9yaWdpbiBvZiB0aGUgbWlycm9yIGlzIG9uCit0aGUgbWFjaGluZSAkc29tZS5rZXJuZWwub3JnLCBvbiB3aGljaCBJIHdhcyBnaXZlbiBhbiBhY2NvdW50Cit3aGVuIEkgdG9vayBvdmVyIEdpdCBtYWludGFpbmVyc2hpcCBmcm9tIExpbnVzLgorCitUaGUgZGlyZWN0b3JpZXMgcmVsZXZhbnQgdG8gdGhpcyBob3ctdG8gYXJlIHRoZXNlIHR3bzoKKworICAgIC9wdWIvc2NtL2dpdC9naXQuZ2l0LwlUaGUgcHVibGljIEdpdCByZXBvc2l0b3J5LgorICAgIC9wdWIvc29mdHdhcmUvc2NtL2dpdC9kb2NzLwlUaGUgSFRNTCBkb2N1bWVudGF0aW9uIHBhZ2UuCisKK1NvIEkgbWFkZSBhIHJlcG9zaXRvcnkgdG8gZ2VuZXJhdGUgdGhlIGRvY3VtZW50YXRpb24gdW5kZXIgbXkKK2hvbWUgZGlyZWN0b3J5IG92ZXIgdGhlcmUuCisKKyAgICAkIGNkCisgICAgJCBta2RpciBkb2MtZ2l0ICYmIGNkIGRvYy1naXQKKyAgICAkIGdpdCBjbG9uZSAvcHViL3NjbS9naXQvZ2l0LmdpdC8gZG9jZ2VuCisKK1doYXQgbmVlZHMgdG8gaGFwcGVuIGlzIHRvIHVwZGF0ZSB0aGUgJEhPTUUvZG9jLWdpdC9kb2NnZW4vCit3b3JraW5nIHRyZWUsIGJ1aWxkIEhUTUwgZG9jcyB0aGVyZSBhbmQgaW5zdGFsbCB0aGUgcmVzdWx0IGluCisvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy8gZGlyZWN0b3J5LiAgU28gSSB3cm90ZSBhIGxpdHRsZQorc2NyaXB0OgorCisgICAgJCBjYXQgPmRvZG9kb2Muc2ggPDxcRU9GCisgICAgIyEvYmluL3NoCisgICAgY2QgJEhPTUUvZG9jLWdpdC9kb2NnZW4gfHwgZXhpdAorCisgICAgdW5zZXQgR0lUX0RJUgorCisgICAgZ2l0IHB1bGwgL3B1Yi9zY20vZ2l0L2dpdC5naXQvIG1hc3RlciAmJgorICAgIGNkIERvY3VtZW50YXRpb24gJiYKKyAgICBtYWtlIGluc3RhbGwtd2ViZG9jCisgICAgRU9GCisKK0luaXRpYWxseSBJIHVzZWQgdG8gcnVuIHRoaXMgYnkgaGFuZCB3aGVuZXZlciBJIHB1c2ggaW50byB0aGUKK3B1YmxpYyBHaXQgcmVwb3NpdG9yeS4gIFRoZW4gSSBkaWQgYSBjcm9uIGpvYiB0aGF0IHJhbiB0d2ljZSBhCitkYXkuICBUaGUgY3VycmVudCByb3VuZCB1c2VzIHRoZSBwb3N0LXVwZGF0ZSBob29rIG1lY2hhbmlzbSwKK2xpa2UgdGhpczoKKworICAgICQgY2F0ID4vcHViL3NjbS9naXQvZ2l0LmdpdC9ob29rcy9wb3N0LXVwZGF0ZSA8PFxFT0YKKyAgICAjIS9iaW4vc2gKKyAgICAjCisgICAgIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHByZXBhcmUgYSBwYWNrZWQgcmVwb3NpdG9yeSBmb3IgdXNlIG92ZXIKKyAgICAjIGR1bWIgdHJhbnNwb3J0cy4KKyAgICAjCisgICAgIyBUbyBlbmFibGUgdGhpcyBob29rLCBtYWtlIHRoaXMgZmlsZSBleGVjdXRhYmxlIGJ5ICJjaG1vZCAreCBwb3N0LXVwZGF0ZSIuCisKKyAgICBjYXNlICIgJCogIiBpbgorICAgIConIHJlZnMvaGVhZHMvbWFzdGVyICcqKQorICAgICAgICAgICAgZWNobyAkSE9NRS9kb2MtZ2l0L2RvZG9kb2Muc2ggfCBhdCBub3cKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworICAgIGV4ZWMgZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbworICAgIEVPRgorICAgICQgY2htb2QgK3ggL3B1Yi9zY20vZ2l0L2dpdC5naXQvaG9va3MvcG9zdC11cGRhdGUKKworVGhlcmUgYXJlIGZvdXIgdGhpbmdzIHdvcnRoIG1lbnRpb25pbmc6CisKKyAtIFRoZSB1cGRhdGUtaG9vayBpcyBydW4gYWZ0ZXIgdGhlIHJlcG9zaXRvcnkgYWNjZXB0cyBhICJnaXQKKyAgIHB1c2giLCB1bmRlciBteSB1c2VyIHByaXZpbGVnZS4gIEl0IGlzIGdpdmVuIHRoZSBmdWxsIG5hbWVzCisgICBvZiByZWZzIHRoYXQgaGF2ZSBiZWVuIHVwZGF0ZWQgYXMgYXJndW1lbnRzLiAgTXkgcG9zdC11cGRhdGUKKyAgIHJ1bnMgdGhlIGRvZG9kb2Muc2ggc2NyaXB0IG9ubHkgd2hlbiB0aGUgbWFzdGVyIGhlYWQgaXMKKyAgIHVwZGF0ZWQuCisKKyAtIFdoZW4gdXBkYXRlLWhvb2sgaXMgcnVuLCBHSVRfRElSIGlzIHNldCB0byAnLicgYnkgdGhlIGNhbGxpbmcKKyAgIHJlY2VpdmUtcGFjay4gIFRoaXMgaXMgaW5oZXJpdGVkIGJ5IHRoZSBkb2RvZG9jLnNoIHJ1biB2aWEKKyAgIHRoZSAiYXQiIGNvbW1hbmQsIGFuZCBuZWVkcyB0byBiZSB1bnNldDsgb3RoZXJ3aXNlLCAiZ2l0CisgICBwdWxsIiBpdCBkb2VzIGludG8gJEhPTUUvZG9jLWdpdC9kb2NnZW4vIHJlcG9zaXRvcnkgd291bGQgbm90CisgICB3b3JrIGNvcnJlY3RseS4KKworIC0gVGhlIHN0ZG91dCBvZiB1cGRhdGUgaG9vayBzY3JpcHQgaXMgbm90IGNvbm5lY3RlZCB0byBnaXQKKyAgIHB1c2g7IEkgcnVuIHRoZSBoZWF2eSBwYXJ0IG9mIHRoZSBjb21tYW5kIGluc2lkZSAiYXQiLCB0bworICAgcmVjZWl2ZSB0aGUgZXhlY3V0aW9uIHJlcG9ydCB2aWEgZS1tYWlsLgorCisgLSBUaGlzIGlzIHN0aWxsIGNydWRlIGFuZCBkb2VzIG5vdCBwcm90ZWN0IGFnYWluc3Qgc2ltdWx0YW5lb3VzCisgICBtYWtlIGludm9jYXRpb25zIHN0b21waW5nIG9uIGVhY2ggb3RoZXIuICBJIHdvdWxkIG5lZWQgdG8gYWRkCisgICBzb21lIGxvY2tpbmcgbWVjaGFuaXNtIGZvciB0aGlzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1ibG9iLW9iamVjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JlY292ZXItY29ycnVwdGVkLWJsb2Itb2JqZWN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjNiMTg4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1ibG9iLW9iamVjdC50eHQKQEAgLTAsMCArMSwxNDQgQEAKK0RhdGU6IEZyaSwgOSBOb3YgMjAwNyAwODoyODozOCAtMDgwMCAoUFNUKQorRnJvbTogTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQGxpbnV4LWZvdW5kYXRpb24ub3JnPgorU3ViamVjdDogY29ycnVwdCBvYmplY3Qgb24gZ2l0LWdjCitBYnN0cmFjdDogU29tZSB0cmlja3MgdG8gcmVjb25zdHJ1Y3QgYmxvYiBvYmplY3RzIGluIG9yZGVyIHRvIGZpeAorIGEgY29ycnVwdGVkIHJlcG9zaXRvcnkuCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworSG93IHRvIHJlY292ZXIgYSBjb3JydXB0ZWQgYmxvYiBvYmplY3QKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitPbiBGcmksIDkgTm92IDIwMDcsIFlvc3NpIExleWJvdmljaCB3cm90ZToKKz4KKz4gRGlkIG5vdCBoZWxwIHN0aWxsIHRoZSByZXBvc2l0b3J5IGxvb2sgZm9yIHRoaXMgb2JqZWN0PworPiBBbnkgb25lIGtub3cgaG93IGNhbiBJIHRyYWNrIHRoaXMgb2JqZWN0IGFuZCB1bmRlcnN0YW5kIHdoaWNoIGZpbGUgaXMgaXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvIGV4YWN0bHkgKmJlY2F1c2UqIHRoZSBTSEEtMSBoYXNoIGlzIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSwgdGhlIGhhc2gKK2l0c2VsZiBkb2Vzbid0IGFjdHVhbGx5IHRlbGwgeW91IGFueXRoaW5nLCBpbiBvcmRlciB0byBmaXggYSBjb3JydXB0CitvYmplY3QgeW91IGJhc2ljYWxseSBoYXZlIHRvIGZpbmQgdGhlICJvcmlnaW5hbCBzb3VyY2UiIGZvciBpdC4KKworVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQgaXMgYWxtb3N0IGFsd2F5cyB0byBoYXZlIGJhY2t1cHMsIGFuZCBmaW5kIHRoZQorc2FtZSBvYmplY3Qgc29tZXdoZXJlIGVsc2UuIEJhY2t1cHMgcmVhbGx5IGFyZSBhIGdvb2QgaWRlYSwgYW5kIEdpdCBtYWtlcworaXQgcHJldHR5IGVhc3kgKGlmIG5vdGhpbmcgZWxzZSwganVzdCBjbG9uZSB0aGUgcmVwb3NpdG9yeSBzb21ld2hlcmUgZWxzZSwKK2FuZCBtYWtlIHN1cmUgdGhhdCB5b3UgZG8gKm5vdCogdXNlIGEgaGFyZC1saW5rZWQgY2xvbmUsIGFuZCBwcmVmZXJhYmx5Citub3QgdGhlIHNhbWUgZGlzay9tYWNoaW5lKS4KKworQnV0IHNpbmNlIHlvdSBkb24ndCBzZWVtIHRvIGhhdmUgYmFja3VwcyByaWdodCBub3csIHRoZSBnb29kIG5ld3MgaXMgdGhhdAorZXNwZWNpYWxseSB3aXRoIGEgc2luZ2xlIGJsb2IgYmVpbmcgY29ycnVwdCwgdGhlc2UgdGhpbmdzICphcmUqIHNvbWV3aGF0CitkZWJ1Z2dhYmxlLgorCitGaXJzdCBvZmYsIG1vdmUgdGhlIGNvcnJ1cHQgb2JqZWN0IGF3YXksIGFuZCAqc2F2ZSogaXQuIFRoZSBtb3N0IGNvbW1vbgorY2F1c2Ugb2YgY29ycnVwdGlvbiBzbyBmYXIgaGFzIGJlZW4gbWVtb3J5IGNvcnJ1cHRpb24sIGJ1dCBldmVuIHNvLCB0aGVyZQorYXJlIHBlb3BsZSB3aG8gd291bGQgYmUgaW50ZXJlc3RlZCBpbiBzZWVpbmcgdGhlIGNvcnJ1cHRpb24gLSBidXQgaXQncworYmFzaWNhbGx5IGltcG9zc2libGUgdG8ganVkZ2UgdGhlIGNvcnJ1cHRpb24gdW50aWwgd2UgY2FuIGFsc28gc2VlIHRoZQorb3JpZ2luYWwgb2JqZWN0LCBzbyByaWdodCBub3cgdGhlIGNvcnJ1cHQgb2JqZWN0IGlzIHVzZWxlc3MsIGJ1dCBpdCdzIHZlcnkKK2ludGVyZXN0aW5nIGZvciB0aGUgZnV0dXJlLCBpbiB0aGUgaG9wZSB0aGF0IHlvdSBjYW4gcmUtY3JlYXRlIGEKK25vbi1jb3JydXB0IHZlcnNpb24uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTbzoKKworPiBpYl0kIG12IC5naXQvb2JqZWN0cy80Yi85NDU4YjM3ODYyMjgzNjljNjM5MzZkYjY1ODI3ZGUzY2MwNjIwMCAuLi8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBhbHRob3VnaCBpdCdzIHVzdWFsbHkgYmVzdCB0byBzYXZlIGl0IHVuZGVyCitpdCdzIGZ1bGwgU0hBLTEgbmFtZSAoeW91IGp1c3QgZHJvcHBlZCB0aGUgIjRiIiBmcm9tIHRoZSByZXN1bHQgOykuCisKK0xldCdzIHNlZSB3aGF0IHRoYXQgdGVsbHMgdXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis+IGliXSQgZ2l0LWZzY2sgLS1mdWxsCis+IGJyb2tlbiBsaW5rIGZyb20gICAgdHJlZSAyZDkyNjNjNmQyMzU5NWU3Y2IyYTIxZTVlYmJiNTM2NTUyNzhkZmY4Cis+ICAgICAgICAgICAgICB0byAgICBibG9iIDRiOTQ1OGIzNzg2MjI4MzY5YzYzOTM2ZGI2NTgyN2RlM2NjMDYyMDAKKz4gbWlzc2luZyBibG9iIDRiOTQ1OGIzNzg2MjI4MzY5YzYzOTM2ZGI2NTgyN2RlM2NjMDYyMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09rLCBJIHJlbW92ZWQgdGhlICJkYW5nbGluZyBjb21taXQiIG1lc3NhZ2VzLCBiZWNhdXNlIHRoZXkgYXJlIGp1c3QKK21lc3NhZ2VzIGFib3V0IHRoZSBmYWN0IHRoYXQgeW91IHByb2JhYmx5IGhhdmUgcmViYXNlZCBldGMsIHNvIHRoZXkncmUgbm90CithdCBhbGwgaW50ZXJlc3RpbmcuIEJ1dCB3aGF0IHJlbWFpbnMgaXMgc3RpbGwgdmVyeSB1c2VmdWwuIEluIHBhcnRpY3VsYXIsCit3ZSBub3cga25vdyB3aGljaCB0cmVlIHBvaW50cyB0byBpdCEKKworTm93IHlvdSBjYW4gZG8KKworCWdpdCBscy10cmVlIDJkOTI2M2M2ZDIzNTk1ZTdjYjJhMjFlNWViYmI1MzY1NTI3OGRmZjgKKword2hpY2ggd2lsbCBzaG93IHNvbWV0aGluZyBsaWtlCisKKwkxMDA2NDQgYmxvYiA4ZDE0NTMxODQ2Yjk1YmZhMzU2NGI1OGNjZmI3OTEzYTAzNDMyM2I4ICAgIC5naXRpZ25vcmUKKwkxMDA2NDQgYmxvYiBlYmY5YmY4NGRhMGFhYjVlZDk0NDI2NGE1ZGIyYTY1ZmUzYTNlODgzICAgIC5tYWlsbWFwCisJMTAwNjQ0IGJsb2IgY2E0NDJkMzEzZDg2ZGM2N2UwYTJlNWQ1ODRiNDY1YmQzODJjYmY1YyAgICBDT1BZSU5HCisJMTAwNjQ0IGJsb2IgZWU5MDlmMmNjNDllNTRmMDc5OWE0NzM5ZDI0YzRjYjkxNTFhZTQ1MyAgICBDUkVESVRTCisJMDQwMDAwIHRyZWUgMGY1ZjcwOWMxN2FkODllNzJiZGJiZWY2ZWEyMjFjNjk4MDcwMDlmNiAgICBEb2N1bWVudGF0aW9uCisJMTAwNjQ0IGJsb2IgMTU3MGQyNDhhZDkyMzdlNGZhNmU0ZDA3OTMzNmI5ZGE2MmQ5YmEzMiAgICBLYnVpbGQKKwkxMDA2NDQgYmxvYiAxYzdjMjI5YTA5MjY2NWIxMWNkNDZhMjVkYmQ0MGZlZWIzMTY2MWQ5ICAgIE1BSU5UQUlORVJTCisJLi4uCisKK2FuZCB5b3Ugc2hvdWxkIG5vdyBoYXZlIGEgbGluZSB0aGF0IGxvb2tzIGxpa2UKKworCTEwMDY0IGJsb2IgNGI5NDU4YjM3ODYyMjgzNjljNjM5MzZkYjY1ODI3ZGUzY2MwNjIwMAlteS1tYWdpYy1maWxlCisKK2luIHRoZSBvdXRwdXQuIFRoaXMgYWxyZWFkeSB0ZWxscyB5b3UgYSAqbG90KiBpdCB0ZWxscyB5b3Ugd2hhdCBmaWxlIHRoZQorY29ycnVwdCBibG9iIGNhbWUgZnJvbSEKKworTm93LCBpdCBkb2Vzbid0IHRlbGwgeW91IHF1aXRlIGVub3VnaCwgdGhvdWdoOiBpdCBkb2Vzbid0IHRlbGwgd2hhdAorKnZlcnNpb24qIG9mIHRoZSBmaWxlIGRpZG4ndCBnZXQgY29ycmVjdGx5IHdyaXR0ZW4hIFlvdSBtaWdodCBiZSByZWFsbHkKK2x1Y2t5LCBhbmQgaXQgbWF5IGJlIHRoZSB2ZXJzaW9uIHRoYXQgeW91IGFscmVhZHkgaGF2ZSBjaGVja2VkIG91dCBpbiB5b3VyCit3b3JraW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgZml4aW5nIHRoaXMgcHJvYmxlbSBpcyByZWFsbHkgc2ltcGxlLCBqdXN0IGRvCisKKwlnaXQgaGFzaC1vYmplY3QgLXcgbXktbWFnaWMtZmlsZQorCithZ2FpbiwgYW5kIGlmIGl0IG91dHB1dHMgdGhlIG1pc3NpbmcgU0hBLTEgKDRiOTQ1Li4pIHlvdSdyZSBub3cgYWxsIGRvbmUhCisKK0J1dCB0aGF0J3MgdGhlIHJlYWxseSBsdWNreSBjYXNlLCBzbyBsZXQncyBhc3N1bWUgdGhhdCBpdCB3YXMgc29tZSBvbGRlcgordmVyc2lvbiB0aGF0IHdhcyBicm9rZW4uIEhvdyBkbyB5b3UgdGVsbCB3aGljaCB2ZXJzaW9uIGl0IHdhcz8KKworVGhlIGVhc2llc3Qgd2F5IHRvIGRvIGl0IGlzIHRvIGRvCisKKwlnaXQgbG9nIC0tcmF3IC0tYWxsIC0tZnVsbC1oaXN0b3J5IC0tIHN1YmRpcmVjdG9yeS9teS1tYWdpYy1maWxlCisKK2FuZCB0aGF0IHdpbGwgc2hvdyB5b3UgdGhlIHdob2xlIGxvZyBmb3IgdGhhdCBmaWxlIChwbGVhc2UgcmVhbGl6ZSB0aGF0Cit0aGUgdHJlZSB5b3UgaGFkIG1heSBub3QgYmUgdGhlIHRvcC1sZXZlbCB0cmVlLCBzbyB5b3UgbmVlZCB0byBmaWd1cmUgb3V0Cit3aGljaCBzdWJkaXJlY3RvcnkgaXQgd2FzIGluIG9uIHlvdXIgb3duKSwgYW5kIGJlY2F1c2UgeW91J3JlIGFza2luZyBmb3IKK3JhdyBvdXRwdXQsIHlvdSdsbCBub3cgZ2V0IHNvbWV0aGluZyBsaWtlCisKKwljb21taXQgYWJjCisJQXV0aG9yOgorCURhdGU6CisJICAuLgorCToxMDA2NDQgMTAwNjQ0IDRiOTQ1OGIuLi4gbmV3c2hhLi4uIE0gIHNvbWVkaXJlY3RvcnkvbXktbWFnaWMtZmlsZQorCisKKwljb21taXQgeHl6CisJQXV0aG9yOgorCURhdGU6CisKKwkgIC4uCisJOjEwMDY0NCAxMDA2NDQgb2xkc2hhLi4uIDRiOTQ1OGIuLi4gTQlzb21lZGlyZWN0b3J5L215LW1hZ2ljLWZpbGUKKworYW5kIHRoaXMgYWN0dWFsbHkgdGVsbHMgeW91IHdoYXQgdGhlICpwcmV2aW91cyogYW5kICpzdWJzZXF1ZW50KiB2ZXJzaW9ucworb2YgdGhhdCBmaWxlIHdlcmUhIFNvIG5vdyB5b3UgY2FuIGxvb2sgYXQgdGhvc2UgKCJvbGRzaGEiIGFuZCAibmV3c2hhIgorcmVzcGVjdGl2ZWx5KSwgYW5kIGhvcGVmdWxseSB5b3UgaGF2ZSBkb25lIGNvbW1pdHMgb2Z0ZW4sIGFuZCBjYW4KK3JlLWNyZWF0ZSB0aGUgbWlzc2luZyBteS1tYWdpYy1maWxlIHZlcnNpb24gYnkgbG9va2luZyBhdCB0aG9zZSBvbGRlciBhbmQKK25ld2VyIHZlcnNpb25zIQorCitJZiB5b3UgY2FuIGRvIHRoYXQsIHlvdSBjYW4gbm93IHJlY3JlYXRlIHRoZSBtaXNzaW5nIG9iamVjdCB3aXRoCisKKwlnaXQgaGFzaC1vYmplY3QgLXcgPHJlY3JlYXRlZC1maWxlPgorCithbmQgeW91ciByZXBvc2l0b3J5IGlzIGdvb2QgYWdhaW4hCisKKyhCdHcsIHlvdSBjb3VsZCBoYXZlIGlnbm9yZWQgdGhlIGZzY2ssIGFuZCBzdGFydGVkIHdpdGggZG9pbmcgYQorCisJZ2l0IGxvZyAtLXJhdyAtLWFsbAorCithbmQganVzdCBsb29rZWQgZm9yIHRoZSBzaGEgb2YgdGhlIG1pc3Npbmcgb2JqZWN0ICg0Yjk0NThiLi4pIGluIHRoYXQKK3dob2xlIHRoaW5nLiBJdCdzIHVwIHRvIHlvdSAtIEdpdCBkb2VzICpoYXZlKiBhIGxvdCBvZiBpbmZvcm1hdGlvbiwgaXQgaXMKK2p1c3QgbWlzc2luZyBvbmUgcGFydGljdWxhciBibG9iIHZlcnNpb24uCisKK1RyeWluZyB0byByZWNyZWF0ZSB0cmVlcyBhbmQgZXNwZWNpYWxseSBjb21taXRzIGlzICptdWNoKiBoYXJkZXIuIFNvIHlvdQord2VyZSBsdWNreSB0aGF0IGl0J3MgYSBibG9iLiBJdCdzIHF1aXRlIHBvc3NpYmxlIHRoYXQgeW91IGNhbiByZWNyZWF0ZSB0aGUKK3RoaW5nLgorCisJCQlMaW51cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZWNvdmVyLWNvcnJ1cHRlZC1vYmplY3QtaGFyZGVyLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vcmVjb3Zlci1jb3JydXB0ZWQtb2JqZWN0LWhhcmRlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM0Y2QwOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vcmVjb3Zlci1jb3JydXB0ZWQtb2JqZWN0LWhhcmRlci50eHQKQEAgLTAsMCArMSw0NzkgQEAKK0RhdGU6IFdlZCwgMTYgT2N0IDIwMTMgMDQ6MzQ6MDEgLTA0MDAKK0Zyb206IEplZmYgS2luZyA8cGVmZkBwZWZmLm5ldD4KK1N1YmplY3Q6IHBhY2sgY29ycnVwdGlvbiBwb3N0LW1vcnRlbQorQWJzdHJhY3Q6IFJlY292ZXJpbmcgYSBjb3JydXB0ZWQgb2JqZWN0IHdoZW4gbm8gZ29vZCBjb3B5IGlzIGF2YWlsYWJsZS4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gcmVjb3ZlciBhbiBvYmplY3QgZnJvbSBzY3JhdGNoCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0kgd2FzIHJlY2VudGx5IHByZXNlbnRlZCB3aXRoIGEgcmVwb3NpdG9yeSB3aXRoIGEgY29ycnVwdGVkIHBhY2tmaWxlLAorYW5kIHdhcyBhc2tlZCBpZiB0aGUgZGF0YSB3YXMgcmVjb3ZlcmFibGUuIFRoaXMgcG9zdC1tb3J0ZW0gZGVzY3JpYmVzCit0aGUgc3RlcHMgSSB0b29rIHRvIGludmVzdGlnYXRlIGFuZCBmaXggdGhlIHByb2JsZW0uIEkgdGhvdWdodCBvdGhlcnMKK21pZ2h0IGZpbmQgdGhlIHByb2Nlc3MgaW50ZXJlc3RpbmcsIGFuZCBpdCBtaWdodCBoZWxwIHNvbWVib2R5IGluIHRoZQorc2FtZSBzaXR1YXRpb24uCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitOb3RlOiBJbiB0aGlzIGNhc2UsIG5vIGdvb2QgY29weSBvZiB0aGUgcmVwb3NpdG9yeSB3YXMgYXZhaWxhYmxlLiBGb3IKK3RoZSBtdWNoIGVhc2llciBjYXNlIHdoZXJlIHlvdSBjYW4gZ2V0IHRoZSBjb3JydXB0ZWQgb2JqZWN0IGZyb20KK2Vsc2V3aGVyZSwgc2VlIGxpbms6cmVjb3Zlci1jb3JydXB0ZWQtYmxvYi1vYmplY3QuaHRtbFt0aGlzIGhvd3RvXS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0kgc3RhcnRlZCB3aXRoIGFuIGZzY2ssIHdoaWNoIGZvdW5kIGEgcHJvYmxlbSB3aXRoIGV4YWN0bHkgb25lIG9iamVjdAorKEkndmUgdXNlZCAkcGFjayBhbmQgJG9iaiBiZWxvdyB0byBrZWVwIHRoZSBvdXRwdXQgcmVhZGFibGUsIGFuZCBhbHNvCitiZWNhdXNlIEknbGwgcmVmZXIgdG8gdGhlbSBsYXRlcik6CisKKy0tLS0tLS0tLS0tCisgICAgJCBnaXQgZnNjaworICAgIGVycm9yOiAkcGFjayBTSEExIGNoZWNrc3VtIG1pc21hdGNoCisgICAgZXJyb3I6IGluZGV4IENSQyBtaXNtYXRjaCBmb3Igb2JqZWN0ICRvYmogZnJvbSAkcGFjayBhdCBvZmZzZXQgNTE2NTM4NzMKKyAgICBlcnJvcjogaW5mbGF0ZTogZGF0YSBzdHJlYW0gZXJyb3IgKGluY29ycmVjdCBkYXRhIGNoZWNrKQorICAgIGVycm9yOiBjYW5ub3QgdW5wYWNrICRvYmogZnJvbSAkcGFjayBhdCBvZmZzZXQgNTE2NTM4NzMKKy0tLS0tLS0tLS0tCisKK1RoZSBwYWNrIGNoZWNrc3VtIGZhaWxpbmcgbWVhbnMgYSBieXRlIGlzIG11bmdlZCBzb21ld2hlcmUsIGFuZCBpdCBpcworcHJlc3VtYWJseSBpbiB0aGUgb2JqZWN0IG1lbnRpb25lZCAoc2luY2UgYm90aCB0aGUgaW5kZXggY2hlY2tzdW0gYW5kCit6bGliIHdlcmUgZmFpbGluZykuCisKK1JlYWRpbmcgdGhlIHpsaWIgc291cmNlIGNvZGUsIEkgZm91bmQgdGhhdCAiaW5jb3JyZWN0IGRhdGEgY2hlY2siIG1lYW5zCit0aGF0IHRoZSBhZGxlci0zMiBjaGVja3N1bSBhdCB0aGUgZW5kIG9mIHRoZSB6bGliIGRhdGEgZGlkIG5vdCBtYXRjaCB0aGUKK2luZmxhdGVkIGRhdGEuIFNvIHN0ZXBwaW5nIHRoZSBkYXRhIHRocm91Z2ggemxpYiB3b3VsZCBub3QgaGVscCwgYXMgaXQKK2RpZCBub3QgZmFpbCB1bnRpbCB0aGUgdmVyeSBlbmQsIHdoZW4gd2UgcmVhbGl6ZSB0aGUgQ1JDIGRvZXMgbm90IG1hdGNoLgorVGhlIHByb2JsZW1hdGljIGJ5dGVzIGNvdWxkIGJlIGFueXdoZXJlIGluIHRoZSBvYmplY3QgZGF0YS4KKworVGhlIGZpcnN0IHRoaW5nIEkgZGlkIHdhcyBwdWxsIHRoZSBicm9rZW4gZGF0YSBvdXQgb2YgdGhlIHBhY2tmaWxlLiBJCituZWVkZWQgdG8ga25vdyBob3cgYmlnIHRoZSBvYmplY3Qgd2FzLCB3aGljaCBJIGZvdW5kIG91dCB3aXRoOgorCistLS0tLS0tLS0tLS0KKyAgICAkIGdpdCBzaG93LWluZGV4IDwkaWR4IHwgY3V0IC1kJyAnIC1mMSB8IHNvcnQgLW4gfCBncmVwIC1BMSA1MTY1Mzg3MworICAgIDUxNjUzODczCisgICAgNTE2NjQ3MzYKKy0tLS0tLS0tLS0tLQorCitTaG93LWluZGV4IGdpdmVzIHVzIHRoZSBsaXN0IG9mIG9iamVjdHMgYW5kIHRoZWlyIG9mZnNldHMuIFdlIHRocm93IGF3YXkKK2V2ZXJ5dGhpbmcgYnV0IHRoZSBvZmZzZXRzLCBhbmQgdGhlbiBzb3J0IHRoZW0gc28gdGhhdCBvdXIgaW50ZXJlc3RpbmcKK29mZnNldCAod2hpY2ggd2UgZ290IGZyb20gdGhlIGZzY2sgb3V0cHV0IGFib3ZlKSBpcyBmb2xsb3dlZCBpbW1lZGlhdGVseQorYnkgdGhlIG9mZnNldCBvZiB0aGUgbmV4dCBvYmplY3QuIE5vdyB3ZSBrbm93IHRoYXQgdGhlIG9iamVjdCBkYXRhIGlzCisxMDg2MyBieXRlcyBsb25nLCBhbmQgd2UgY2FuIGdyYWIgaXQgd2l0aDoKKworLS0tLS0tLS0tLS0tCisgIGRkIGlmPSRwYWNrIG9mPW9iamVjdCBicz0xIHNraXA9NTE2NTM4NzMgY291bnQ9MTA4NjMKKy0tLS0tLS0tLS0tLQorCitJIGluc3BlY3RlZCBhIGhleGR1bXAgb2YgdGhlIGRhdGEsIGxvb2tpbmcgZm9yIGFueSBvYnZpb3VzIGJvZ29zaXR5CisoZS5nLiwgYSA0SyBydW4gb2YgemVyb2VzIHdvdWxkIGJlIGEgZ29vZCBzaWduIG9mIGZpbGVzeXN0ZW0KK2NvcnJ1cHRpb24pLiBCdXQgZXZlcnl0aGluZyBsb29rZWQgcHJldHR5IHJlYXNvbmFibGUuCisKK05vdGUgdGhhdCB0aGUgIm9iamVjdCIgZmlsZSBpc24ndCBmaXQgZm9yIGZlZWRpbmcgc3RyYWlnaHQgdG8gemxpYjsgaXQKK2hhcyB0aGUgZ2l0IHBhY2tlZCBvYmplY3QgaGVhZGVyLCB3aGljaCBpcyB2YXJpYWJsZS1sZW5ndGguIFdlIHdhbnQgdG8KK3N0cmlwIHRoYXQgb2ZmIHNvIHdlIGNhbiBzdGFydCBwbGF5aW5nIHdpdGggdGhlIHpsaWIgZGF0YSBkaXJlY3RseS4gWW91CitjYW4gZWl0aGVyIHdvcmsgeW91ciB3YXkgdGhyb3VnaCBpdCBtYW51YWxseSAodGhlIGZvcm1hdCBpcyBkZXNjcmliZWQgaW4KK2xpbms6Li4vdGVjaG5pY2FsL3BhY2stZm9ybWF0Lmh0bWxbRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1mb3JtYXQudHh0XSksCitvciB5b3UgY2FuIHdhbGsgdGhyb3VnaCBpdCBpbiBhIGRlYnVnZ2VyLiBJIGRpZCB0aGUgbGF0dGVyLCBjcmVhdGluZyBhCit2YWxpZCBwYWNrIGxpa2U6CisKKy0tLS0tLS0tLS0tLQorICAgICMgcGFjayBtYWdpYyBhbmQgdmVyc2lvbgorICAgIHByaW50ZiAnUEFDS1wwXDBcMFwyJyA+dG1wLnBhY2sKKyAgICAjIHBhY2sgaGFzIG9uZSBvYmplY3QKKyAgICBwcmludGYgJ1wwXDBcMFwxJyA+PnRtcC5wYWNrCisgICAgIyBub3cgYWRkIG91ciBvYmplY3QgZGF0YQorICAgIGNhdCBvYmplY3QgPj50bXAucGFjaworICAgICMgYW5kIHRoZW4gYXBwZW5kIHRoZSBwYWNrIHRyYWlsZXIKKyAgICAvcGF0aC90by9naXQuZ2l0L3Rlc3Qtc2hhMSAtYiA8dG1wLnBhY2sgPnRyYWlsZXIKKyAgICBjYXQgdHJhaWxlciA+PnRtcC5wYWNrCistLS0tLS0tLS0tLS0KKworYW5kIHRoZW4gcnVubmluZyAiZ2l0IGluZGV4LXBhY2sgdG1wLnBhY2siIGluIHRoZSBkZWJ1Z2dlciAoc3RvcCBhdAordW5wYWNrX3Jhd19lbnRyeSkuIERvaW5nIHRoaXMsIEkgZm91bmQgdGhhdCB0aGVyZSB3ZXJlIDMgYnl0ZXMgb2YgaGVhZGVyCisoYW5kIHRoZSBoZWFkZXIgaXRzZWxmIGhhZCBhIHNhbmUgdHlwZSBhbmQgc2l6ZSkuIFNvIEkgc3RyaXBwZWQgdGhvc2UKK29mZiB3aXRoOgorCistLS0tLS0tLS0tLS0KKyAgICBkZCBpZj1vYmplY3Qgb2Y9emxpYiBicz0xIHNraXA9MworLS0tLS0tLS0tLS0tCisKK0kgcmFuIHRoZSByZXN1bHQgdGhyb3VnaCB6bGliJ3MgaW5mbGF0ZSB1c2luZyBhIGN1c3RvbSBDIHByb2dyYW0uIEFuZAord2hpbGUgaXQgZGlkIHJlcG9ydCB0aGUgZXJyb3IsIEkgZGlkIGdldCB0aGUgcmlnaHQgbnVtYmVyIG9mIG91dHB1dAorYnl0ZXMgKGkuZS4sIGl0IG1hdGNoZWQgZ2l0J3Mgc2l6ZSBoZWFkZXIgdGhhdCB3ZSBkZWNvZGVkIGFib3ZlKS4gQnV0CitmZWVkaW5nIHRoZSByZXN1bHQgYmFjayB0byAiZ2l0IGhhc2gtb2JqZWN0IiBkaWRuJ3QgcHJvZHVjZSB0aGUgc2FtZQorc2hhMS4gU28gdGhlcmUgd2VyZSBzb21lIHdyb25nIGJ5dGVzLCBidXQgSSBkaWRuJ3Qga25vdyB3aGljaC4gVGhlIGZpbGUKK2hhcHBlbmVkIHRvIGJlIEMgc291cmNlIGNvZGUsIHNvIEkgaG9wZWQgSSBjb3VsZCBub3RpY2Ugc29tZXRoaW5nCitvYnZpb3VzbHkgd3Jvbmcgd2l0aCBpdCwgYnV0IEkgZGlkbid0LiBJIGV2ZW4gZ290IGl0IHRvIGNvbXBpbGUhCisKK0kgYWxzbyB0cmllZCBjb21wYXJpbmcgaXQgdG8gb3RoZXIgdmVyc2lvbnMgb2YgdGhlIHNhbWUgcGF0aCBpbiB0aGUKK3JlcG9zaXRvcnksIGhvcGluZyB0aGF0IHRoZXJlIHdvdWxkIGJlIHNvbWUgcGFydCBvZiB0aGUgZGlmZiB0aGF0IGRpZG4ndAorbWFrZSBzZW5zZS4gVW5mb3J0dW5hdGVseSwgdGhpcyBoYXBwZW5lZCB0byBiZSB0aGUgb25seSByZXZpc2lvbiBvZiB0aGlzCitwYXJ0aWN1bGFyIGZpbGUgaW4gdGhlIHJlcG9zaXRvcnksIHNvIEkgaGFkIG5vdGhpbmcgdG8gY29tcGFyZSBhZ2FpbnN0LgorCitTbyBJIHRvb2sgYSBkaWZmZXJlbnQgYXBwcm9hY2guIFdvcmtpbmcgdW5kZXIgdGhlIGd1ZXNzIHRoYXQgdGhlCitjb3JydXB0aW9uIHdhcyBsaW1pdGVkIHRvIGEgc2luZ2xlIGJ5dGUsIEkgd3JvdGUgYSBwcm9ncmFtIHRvIG11bmdlIGVhY2gKK2J5dGUgaW5kaXZpZHVhbGx5LCBhbmQgdHJ5IGluZmxhdGluZyB0aGUgcmVzdWx0LiBTaW5jZSB0aGUgb2JqZWN0IHdhcworb25seSAxMEsgY29tcHJlc3NlZCwgdGhhdCB3b3JrZWQgb3V0IHRvIGFib3V0IDIuNU0gYXR0ZW1wdHMsIHdoaWNoIHRvb2sKK2EgZmV3IG1pbnV0ZXMuCisKK1RoZSBwcm9ncmFtIEkgdXNlZCBpcyBoZXJlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx6bGliLmg+CisKK3N0YXRpYyBpbnQgdHJ5X3psaWIodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCS8qIG1ha2UgdGhpcyBhYnN1cmRseSBsYXJnZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGxvb3AgKi8KKwlzdGF0aWMgdW5zaWduZWQgY2hhciBvdXRbMTAyNCoxMDI0XTsKKwl6X3N0cmVhbSB6OworCWludCByZXQ7CisKKwltZW1zZXQoJnosIDAsIHNpemVvZih6KSk7CisJaW5mbGF0ZUluaXQoJnopOworCisJei5uZXh0X2luID0gYnVmOworCXouYXZhaWxfaW4gPSBsZW47CisJei5uZXh0X291dCA9IG91dDsKKwl6LmF2YWlsX291dCA9IHNpemVvZihvdXQpOworCisJcmV0ID0gaW5mbGF0ZSgmeiwgMCk7CisJaW5mbGF0ZUVuZCgmeik7CisJcmV0dXJuIHJldCA+PSAwOworfQorCisvKiBleWUgY2FuZHkgKi8KK3N0YXRpYyBpbnQgY291bnRlciA9IDA7CitzdGF0aWMgdm9pZCBwcm9ncmVzcyhpbnQgc2lnKQoreworCWZwcmludGYoc3RkZXJyLCAiXHIlZCIsIGNvdW50ZXIpOworCWFsYXJtKDEpOworfQorCitpbnQgbWFpbih2b2lkKQoreworCS8qIG92ZXJzaXplZCBzbyB3ZSBjYW4gcmVhZCB0aGUgd2hvbGUgYnVmZmVyIGluICovCisJdW5zaWduZWQgY2hhciBidWZbMTAyNCoxMDI0XTsKKwlpbnQgbGVuOworCXVuc2lnbmVkIGksIGo7CisKKwlzaWduYWwoU0lHQUxSTSwgcHJvZ3Jlc3MpOworCWFsYXJtKDEpOworCisJbGVuID0gcmVhZCgwLCBidWYsIHNpemVvZihidWYpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciBjID0gYnVmW2ldOworCQlmb3IgKGogPSAwOyBqIDw9IDB4ZmY7IGorKykgeworCQkJYnVmW2ldID0gajsKKworCQkJY291bnRlcisrOworCQkJaWYgKHRyeV96bGliKGJ1ZiwgbGVuKSkKKwkJCQlwcmludGYoImk9JWQsIGo9JXhcbiIsIGksIGopOworCQl9CisJCWJ1ZltpXSA9IGM7CisJfQorCisJYWxhcm0oMCk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCXJldHVybiAwOworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJIGNvbXBpbGVkIGFuZCByYW4gd2l0aDoKKworLS0tLS0tLQorICBnY2MgLVdhbGwgLVdlcnJvciAtTzMgbXVuZ2UuYyAtbyBtdW5nZSAtbHoKKyAgLi9tdW5nZSA8emxpYgorLS0tLS0tLQorCisKK1RoZXJlIHdlcmUgYSBmZXcgZmFsc2UgcG9zaXRpdmVzIGVhcmx5IG9uIChpZiB5b3Ugd3JpdGUgIm5vIGRhdGEiIGluIHRoZQoremxpYiBoZWFkZXIsIHpsaWIgdGhpbmtzIGl0J3MganVzdCBmaW5lIDopICkuIEJ1dCBJIGdvdCBhIGhpdCBhYm91dAoraGFsZndheSB0aHJvdWdoOgorCistLS0tLS0tCisgIGk9NTY0Miwgaj1jNworLS0tLS0tLQorCitJIGxldCBpdCBydW4gdG8gY29tcGxldGlvbiwgYW5kIGdvdCBhIGZldyBtb3JlIGhpdHMgYXQgdGhlIGVuZCAod2hlcmUgaXQKK3dhcyBtdW5naW5nIHRoZSBDUkMgdG8gbWF0Y2ggb3VyIGJyb2tlbiBkYXRhKS4gU28gdGhlcmUgd2FzIGEgZ29vZAorY2hhbmNlIHRoaXMgbWlkZGxlIGhpdCB3YXMgdGhlIHNvdXJjZSBvZiB0aGUgcHJvYmxlbS4KKworSSBjb25maXJtZWQgYnkgdHdlYWtpbmcgdGhlIGJ5dGUgaW4gYSBoZXggZWRpdG9yLCB6bGliIGluZmxhdGluZyB0aGUKK3Jlc3VsdCAobm8gZXJyb3JzISksIGFuZCB0aGVuIHBpcGluZyB0aGUgb3V0cHV0IGludG8gImdpdCBoYXNoLW9iamVjdCIsCit3aGljaCByZXBvcnRlZCB0aGUgc2hhMSBvZiB0aGUgYnJva2VuIG9iamVjdC4gU3VjY2VzcyEKKworSSBmaXhlZCB0aGUgcGFja2ZpbGUgaXRzZWxmIHdpdGg6CisKKy0tLS0tLS0KKyAgY2htb2QgK3cgJHBhY2sKKyAgcHJpbnRmICdceGM3JyB8IGRkIG9mPSRwYWNrIGJzPTEgc2Vlaz01MTY1OTUxOCBjb252PW5vdHJ1bmMKKyAgY2htb2QgLXcgJHBhY2sKKy0tLS0tLS0KKworVGhlIGBceGM3YCBjb21lcyBmcm9tIHRoZSByZXBsYWNlbWVudCBieXRlIG91ciAibXVuZ2UiIHByb2dyYW0gZm91bmQuCitUaGUgb2Zmc2V0IDUxNjU5NTE4IGlzIGRlcml2ZWQgYnkgdGFraW5nIHRoZSBvcmlnaW5hbCBvYmplY3Qgb2Zmc2V0CisoNTE2NTM4NzMpLCBhZGRpbmcgdGhlIHJlcGxhY2VtZW50IG9mZnNldCBmb3VuZCBieSAibXVuZ2UiICg1NjQyKSwgYW5kCit0aGVuIGFkZGluZyBiYWNrIGluIHRoZSAzIGJ5dGVzIG9mIGdpdCBoZWFkZXIgd2Ugc3RyaXBwZWQuCisKK0FmdGVyIHRoYXQsICJnaXQgZnNjayIgcmFuIGNsZWFuLgorCitBcyBmb3IgdGhlIGNvcnJ1cHRpb24gaXRzZWxmLCBJIHdhcyBsdWNreSB0aGF0IGl0IHdhcyBpbmRlZWQgYSBzaW5nbGUKK2J5dGUuIEluIGZhY3QsIGl0IHR1cm5lZCBvdXQgdG8gYmUgYSBzaW5nbGUgYml0LiBUaGUgYnl0ZSAweGM3IHdhcworY29ycnVwdGVkIHRvIDB4YzUuIFNvIHByZXN1bWFibHkgaXQgd2FzIGNhdXNlZCBieSBmYXVsdHkgaGFyZHdhcmUsIG9yIGEKK2Nvc21pYyByYXkuCisKK0FuZCB0aGUgYWJvcnRlZCBhdHRlbXB0IHRvIGxvb2sgYXQgdGhlIGluZmxhdGVkIG91dHB1dCB0byBzZWUgd2hhdCB3YXMKK3dyb25nPyBJIGNvdWxkIGhhdmUgbG9va2VkIGZvcmV2ZXIgYW5kIG5ldmVyIGZvdW5kIGl0LiBIZXJlJ3MgdGhlIGRpZmYKK2JldHdlZW4gd2hhdCB0aGUgY29ycnVwdGVkIGRhdGEgaW5mbGF0ZXMgdG8sIHZlcnN1cyB0aGUgcmVhbCBkYXRhOgorCistLS0tLS0tLS0tLS0tLQorICAtICAgICAgIGNwID0gc3RydG9rIChhcmcsICIrIik7CisgICsgICAgICAgY3AgPSBzdHJ0b2sgKGFyZywgIi4iKTsKKy0tLS0tLS0tLS0tLS0tCisKK0l0IHR3ZWFrZWQgb25lIGJ5dGUgYW5kIHN0aWxsIGVuZGVkIHVwIGFzIHZhbGlkLCByZWFkYWJsZSBDIHRoYXQganVzdAoraGFwcGVuZWQgdG8gZG8gc29tZXRoaW5nIHRvdGFsbHkgZGlmZmVyZW50ISBPbmUgdGFrZWF3YXkgaXMgdGhhdCBvbiBhCitsZXNzIHVubHVja3kgZGF5LCBsb29raW5nIGF0IHRoZSB6bGliIG91dHB1dCBtaWdodCBoYXZlIGFjdHVhbGx5IGJlZW4KK2hlbHBmdWwsIGFzIG1vc3QgcmFuZG9tIGNoYW5nZXMgd291bGQgYWN0dWFsbHkgYnJlYWsgdGhlIEMgY29kZS4KKworQnV0IG1vcmUgaW1wb3J0YW50bHksIGdpdCdzIGhhc2hpbmcgYW5kIGNoZWNrc3VtbWluZyBub3RpY2VkIGEgcHJvYmxlbQordGhhdCBlYXNpbHkgY291bGQgaGF2ZSBnb25lIHVuZGV0ZWN0ZWQgaW4gYW5vdGhlciBzeXN0ZW0uIFRoZSByZXN1bHQKK3N0aWxsIGNvbXBpbGVkLCBidXQgd291bGQgaGF2ZSBjYXVzZWQgYW4gaW50ZXJlc3RpbmcgYnVnICh0aGF0IHdvdWxkCitoYXZlIGJlZW4gYmxhbWVkIG9uIHNvbWUgcmFuZG9tIGNvbW1pdCkuCisKKworVGhlIGFkdmVudHVyZSBjb250aW51ZXMuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0kgZW5kZWQgdXAgZG9pbmcgdGhpcyBhZ2FpbiEgU2FtZSBlbnRpdHksIG5ldyBoYXJkd2FyZS4gVGhlIGFzc3VtcHRpb24KK2F0IHRoaXMgcG9pbnQgaXMgdGhhdCB0aGUgb2xkIGRpc2sgY29ycnVwdGVkIHRoZSBwYWNrZmlsZSwgYW5kIHRoZW4gdGhlCitjb3JydXB0aW9uIHdhcyBtaWdyYXRlZCB0byB0aGUgbmV3IGhhcmR3YXJlIChiZWNhdXNlIGl0IHdhcyBkb25lIGJ5Cityc3luYyBvciBzaW1pbGFyLCBhbmQgbm8gZnNjayB3YXMgZG9uZSBhdCB0aGUgdGltZSBvZiBtaWdyYXRpb24pLgorCitUaGlzIHRpbWUsIHRoZSBhZmZlY3RlZCBibG9iIHdhcyBvdmVyIDIwIG1lZ2FieXRlcywgd2hpY2ggd2FzIGZhciB0b28KK2xhcmdlIHRvIGRvIGEgYnJ1dGUtZm9yY2Ugb24uIEkgZm9sbG93ZWQgdGhlIGluc3RydWN0aW9ucyBhYm92ZSB0bworY3JlYXRlIHRoZSBgemxpYmAgZmlsZS4gSSB0aGVuIHVzZWQgdGhlIGBpbmZsYXRlYCBwcm9ncmFtIGJlbG93IHRvIHB1bGwKK3RoZSBjb3JydXB0ZWQgZGF0YSBmcm9tIHRoYXQuIEV4YW1pbmluZyB0aGF0IG91dHB1dCBnYXZlIG1lIGEgaGludCBhYm91dAord2hlcmUgaW4gdGhlIGZpbGUgdGhlIGNvcnJ1cHRpb24gd2FzLiBCdXQgbm93IEkgd2FzIHdvcmtpbmcgd2l0aCB0aGUKK2ZpbGUgaXRzZWxmLCBub3QgdGhlIHpsaWIgY29udGVudHMuIFNvIGtub3dpbmcgdGhlIHNoYTEgb2YgdGhlIG9iamVjdAorYW5kIHRoZSBhcHByb3hpbWF0ZSBhcmVhIG9mIHRoZSBjb3JydXB0aW9uLCBJIHVzZWQgdGhlIGBzaGExLW11bmdlYAorcHJvZ3JhbSBiZWxvdyB0byBicnV0ZS1mb3JjZSB0aGUgY29ycmVjdCBieXRlLgorCitIZXJlJ3MgdGhlIGluZmxhdGUgcHJvZ3JhbSAoaXQncyBlc3NlbnRpYWxseSBgZ3VuemlwYCBidXQgd2l0aG91dCB0aGUKK2AuZ3pgIGhlYWRlciBwcm9jZXNzaW5nKToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHpsaWIuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCS8qCisJICogb3ZlcnNpemVkIHNvIHdlIGNhbiByZWFkIHRoZSB3aG9sZSBidWZmZXIgaW47CisJICogdGhpcyBjb3VsZCBhY3R1YWxseSBiZSBzd2l0Y2hlZCB0byBzdHJlYW1pbmcKKwkgKiB0byBhdm9pZCBhbnkgbWVtb3J5IGxpbWl0YXRpb25zCisJICovCisJc3RhdGljIHVuc2lnbmVkIGNoYXIgYnVmWzI1ICogMTAyNCAqIDEwMjRdOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIG91dFsyNSAqIDEwMjQgKiAxMDI0XTsKKwlpbnQgbGVuOworCXpfc3RyZWFtIHo7CisJaW50IHJldDsKKworCWxlbiA9IHJlYWQoMCwgYnVmLCBzaXplb2YoYnVmKSk7CisJbWVtc2V0KCZ6LCAwLCBzaXplb2YoeikpOworCWluZmxhdGVJbml0KCZ6KTsKKworCXoubmV4dF9pbiA9IGJ1ZjsKKwl6LmF2YWlsX2luID0gbGVuOworCXoubmV4dF9vdXQgPSBvdXQ7CisJei5hdmFpbF9vdXQgPSBzaXplb2Yob3V0KTsKKworCXJldCA9IGluZmxhdGUoJnosIDApOworCWlmIChyZXQgIT0gWl9PSyAmJiByZXQgIT0gWl9TVFJFQU1fRU5EKQorCQlmcHJpbnRmKHN0ZGVyciwgImluaXRpYWwgaW5mbGF0ZSBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKworCWZwcmludGYoc3RkZXJyLCAib3V0cHV0dGluZyAlbHUgYnl0ZXMiLCB6LnRvdGFsX291dCk7CisJZndyaXRlKG91dCwgMSwgei50b3RhbF9vdXQsIHN0ZG91dCk7CisJcmV0dXJuIDA7Cit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbmQgaGVyZSBpcyB0aGUgYHNoYTEtbXVuZ2VgIHByb2dyYW06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBleWUgY2FuZHkgKi8KK3N0YXRpYyBpbnQgY291bnRlciA9IDA7CitzdGF0aWMgdm9pZCBwcm9ncmVzcyhpbnQgc2lnKQoreworCWZwcmludGYoc3RkZXJyLCAiXHIlZCIsIGNvdW50ZXIpOworCWFsYXJtKDEpOworfQorCitzdGF0aWMgY29uc3Qgc2lnbmVkIGNoYXIgaGV4dmFsX3RhYmxlWzI1Nl0gPSB7CisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDAwLTA3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDA4LTBmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDEwLTE3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDE4LTFmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDIwLTI3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDI4LTJmICovCisJICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywJCS8qIDMwLTM3ICovCisJICA4LCAgOSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDM4LTNmICovCisJIC0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwJCS8qIDQwLTQ3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDQ4LTRmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDUwLTU3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDU4LTVmICovCisJIC0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwJCS8qIDYwLTY3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDY4LTY3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDcwLTc3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDc4LTdmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDgwLTg3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDg4LThmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDkwLTk3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIDk4LTlmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGEwLWE3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGE4LWFmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGIwLWI3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGI4LWJmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGMwLWM3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGM4LWNmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGQwLWQ3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGQ4LWRmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGUwLWU3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGU4LWVmICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGYwLWY3ICovCisJIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwJCS8qIGY4LWZmICovCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBoZXh2YWwodW5zaWduZWQgY2hhciBjKQoreworcmV0dXJuIGhleHZhbF90YWJsZVtjXTsKK30KKworc3RhdGljIGludCBnZXRfc2hhMV9oZXgoY29uc3QgY2hhciAqaGV4LCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB2YWw7CisJCS8qCisJCSAqIGhleFsxXT09J1wwJyBpcyBjYXVnaHQgd2hlbiB2YWwgaXMgY2hlY2tlZCBiZWxvdywKKwkJICogYnV0IGlmIGhleFswXSBpcyBOVUwgd2UgaGF2ZSB0byBhdm9pZCByZWFkaW5nCisJCSAqIHBhc3QgdGhlIGVuZCBvZiB0aGUgc3RyaW5nOgorCQkgKi8KKwkJaWYgKCFoZXhbMF0pCisJCQlyZXR1cm4gLTE7CisJCXZhbCA9IChoZXh2YWwoaGV4WzBdKSA8PCA0KSB8IGhleHZhbChoZXhbMV0pOworCQlpZiAodmFsICYgfjB4ZmYpCisJCQlyZXR1cm4gLTE7CisJCSpzaGExKysgPSB2YWw7CisJCWhleCArPSAyOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCS8qIG92ZXJzaXplZCBzbyB3ZSBjYW4gcmVhZCB0aGUgd2hvbGUgYnVmZmVyIGluICovCisJc3RhdGljIHVuc2lnbmVkIGNoYXIgYnVmWzI1ICogMTAyNCAqIDEwMjRdOworCWNoYXIgaGVhZGVyWzMyXTsKKwlpbnQgaGVhZGVyX2xlbjsKKwl1bnNpZ25lZCBjaGFyIGhhdmVbMjBdLCB3YW50WzIwXTsKKwlpbnQgc3RhcnQsIGxlbjsKKwlTSEFfQ1RYIG9yaWc7CisJdW5zaWduZWQgaSwgajsKKworCWlmICghYXJndlsxXSB8fCBnZXRfc2hhMV9oZXgoYXJndlsxXSwgd2FudCkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogc2hhMS1tdW5nZSA8c2hhMT4gW3N0YXJ0XSA8ZmlsZS5pblxuIik7CisJCXJldHVybiAxOworCX0KKworCWlmIChhcmd2WzJdKQorCQlzdGFydCA9IGF0b2koYXJndlsyXSk7CisJZWxzZQorCQlzdGFydCA9IDA7CisKKwlsZW4gPSByZWFkKDAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWhlYWRlcl9sZW4gPSBzcHJpbnRmKGhlYWRlciwgImJsb2IgJWQiLCBsZW4pICsgMTsKKwlmcHJpbnRmKHN0ZGVyciwgInVzaW5nIGhlYWRlcjogJXNcbiIsIGhlYWRlcik7CisKKwkvKgorCSAqIFdlIGtlZXAgYSBydW5uaW5nIHNoYTEgc28gdGhhdCBpZiB5b3UgYXJlIG11bmdpbmcKKwkgKiBuZWFyIHRoZSBlbmQgb2YgdGhlIGZpbGUsIHdlIGRvIG5vdCBoYXZlIHRvIHJlLXNoYTEKKwkgKiB0aGUgdW5jaGFuZ2VkIGVhcmxpZXIgYnl0ZXMKKwkgKi8KKwlTSEExX0luaXQoJm9yaWcpOworCVNIQTFfVXBkYXRlKCZvcmlnLCBoZWFkZXIsIGhlYWRlcl9sZW4pOworCWlmIChzdGFydCkKKwkJU0hBMV9VcGRhdGUoJm9yaWcsIGJ1Ziwgc3RhcnQpOworCisJc2lnbmFsKFNJR0FMUk0sIHByb2dyZXNzKTsKKwlhbGFybSgxKTsKKworCWZvciAoaSA9IHN0YXJ0OyBpIDwgbGVuOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciBjOworCQlTSEFfQ1RYIHg7CisKKyNpZiAwCisJCS8qCisJCSAqIGRlbGV0aW9uIC0tIHRoaXMgd291bGQgbm90IGFjdHVhbGx5IHdvcmsgaW4gcHJhY3RpY2UsCisJCSAqIEkgdGhpbmssIGJlY2F1c2Ugd2UndmUgYWxyZWFkeSBjb21taXR0ZWQgdG8gYQorCQkgKiBwYXJ0aWN1bGFyIHNpemUgaW4gdGhlIGhlYWRlci4gRGl0dG8gZm9yIGFkZGl0aW9uCisJCSAqIGJlbG93LiBJbiB0aG9zZSBjYXNlcywgeW91J2QgaGF2ZSB0byBkbyB0aGUgd2hvbGUKKwkJICogc2hhMSBmcm9tIHNjcmF0Y2gsIG9yIHBvc3NpYmx5IGtlZXAgdGhyZWUgcnVubmluZworCQkgKiAib3JpZyIgc2hhMSBjb21wdXRhdGlvbnMgZ29pbmcuCisJCSAqLworCQltZW1jcHkoJngsICZvcmlnLCBzaXplb2YoeCkpOworCQlTSEExX1VwZGF0ZSgmeCwgYnVmICsgaSArIDEsIGxlbiAtIGkgLSAxKTsKKwkJU0hBMV9GaW5hbChoYXZlLCAmeCk7CisJCWlmICghbWVtY21wKGhhdmUsIHdhbnQsIDIwKSkKKwkJCXByaW50ZigiaT0lZCwgZGVsZXRpb25cbiIsIGkpOworI2VuZGlmCisKKwkJLyoKKwkJICogcmVwbGFjZW1lbnQgLS0gbm90ZSB0aGF0IHRoaXMgdHJpZXMgZWFjaCBvZiB0aGUgMjU2CisJCSAqIHBvc3NpYmxlIGJ5dGVzLiBJZiB5b3Ugc3VzcGVjdCBhIHNpbmdsZS1iaXQgZmxpcCwKKwkJICogaXQgd291bGQgYmUgbXVjaCBzaG9ydGVyIHRvIGp1c3QgdHJ5IHRoZSA4CisJCSAqIGJpdC1mbGlwcGVkIHZhcmlhbnRzLgorCQkgKi8KKwkJYyA9IGJ1ZltpXTsKKwkJZm9yIChqID0gMDsgaiA8PSAweGZmOyBqKyspIHsKKwkJCWJ1ZltpXSA9IGo7CisKKwkJCW1lbWNweSgmeCwgJm9yaWcsIHNpemVvZih4KSk7CisJCQlTSEExX1VwZGF0ZSgmeCwgYnVmICsgaSwgbGVuIC0gaSk7CisJCQlTSEExX0ZpbmFsKGhhdmUsICZ4KTsKKwkJCWlmICghbWVtY21wKGhhdmUsIHdhbnQsIDIwKSkKKwkJCQlwcmludGYoImk9JWQsIGo9JTAyeFxuIiwgaSwgaik7CisJCX0KKwkJYnVmW2ldID0gYzsKKworI2lmIDAKKwkJLyogYWRkaXRpb24gKi8KKwkJZm9yIChqID0gMDsgaiA8PSAweGZmOyBqKyspIHsKKwkJCXVuc2lnbmVkIGNoYXIgZXh0cmEgPSBqOworCQkJbWVtY3B5KCZ4LCAmb3JpZywgc2l6ZW9mKHgpKTsKKwkJCVNIQTFfVXBkYXRlKCZ4LCAmZXh0cmEsIDEpOworCQkJU0hBMV9VcGRhdGUoJngsIGJ1ZiArIGksIGxlbiAtIGkpOworCQkJU0hBMV9GaW5hbChoYXZlLCAmeCk7CisJCQlpZiAoIW1lbWNtcChoYXZlLCB3YW50LCAyMCkpCisJCQkJcHJpbnRmKCJpPSVkLCBhZGRpdGlvbj0lMDJ4IiwgaSwgaik7CisJCX0KKyNlbmRpZgorCisJCVNIQTFfVXBkYXRlKCZvcmlnLCBidWYgKyBpLCAxKTsKKwkJY291bnRlcisrOworCX0KKworCWFsYXJtKDApOworCWZwcmludGYoc3RkZXJyLCAiXHIlZFxuIiwgY291bnRlcik7CisJcmV0dXJuIDA7Cit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYS1mYXVsdHktbWVyZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYS1mYXVsdHktbWVyZ2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MjI1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3JldmVydC1hLWZhdWx0eS1tZXJnZS50eHQKQEAgLTAsMCArMSwyNzMgQEAKK0RhdGU6IEZyaSwgMTkgRGVjIDIwMDggMDA6NDU6MTkgLTA4MDAKK0Zyb206IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BsaW51eC1mb3VuZGF0aW9uLm9yZz4sIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KK1N1YmplY3Q6IFJlOiBPZGQgbWVyZ2UgYmVoYXZpb3VyIGludm9sdmluZyByZXZlcnRzCitBYnN0cmFjdDogU29tZXRpbWVzIGEgYnJhbmNoIHRoYXQgd2FzIGFscmVhZHkgbWVyZ2VkIHRvIHRoZSBtYWlubGluZQorIGlzIGxhdGVyIGZvdW5kIHRvIGJlIGZhdWx0eS4gIExpbnVzIGFuZCBKdW5pbyBnaXZlIGd1aWRhbmNlIG9uCisgcmVjb3ZlcmluZyBmcm9tIHN1Y2ggYSBwcmVtYXR1cmUgbWVyZ2UgYW5kIGNvbnRpbnVpbmcgZGV2ZWxvcG1lbnQKKyBhZnRlciB0aGUgb2ZmZW5kaW5nIGJyYW5jaCBpcyBmaXhlZC4KK01lc3NhZ2UtSUQ6IDw3dm9jejhhNnprLmZzZkBnaXRzdGVyLnNpYW1lc2UuZHluZG5zLm9yZz4KK1JlZmVyZW5jZXM6IDxhbHBpbmUuTEZELjIuMDAuMDgxMjE4MTk0OTQ1MC4xNDAxNEBsb2NhbGhvc3QubG9jYWxkb21haW4+CitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworSG93IHRvIHJldmVydCBhIGZhdWx0eSBtZXJnZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBbGFuIDxhbGFuQGNsdWVzZXJ2ZXIub3JnPiBzYWlkOgorCisgICAgSSBoYXZlIGEgbWFzdGVyIGJyYW5jaC4gIFdlIGhhdmUgYSBicmFuY2ggb2ZmIG9mIHRoYXQgdGhhdCBzb21lCisgICAgZGV2ZWxvcGVycyBhcmUgZG9pbmcgd29yayBvbi4gIFRoZXkgY2xhaW0gaXQgaXMgcmVhZHkuIFdlIG1lcmdlIGl0CisgICAgaW50byB0aGUgbWFzdGVyIGJyYW5jaC4gIEl0IGJyZWFrcyBzb21ldGhpbmcgc28gd2UgcmV2ZXJ0IHRoZSBtZXJnZS4KKyAgICBUaGV5IG1ha2UgY2hhbmdlcyB0byB0aGUgY29kZS4gIHRoZXkgZ2V0IGl0IHRvIGEgcG9pbnQgd2hlcmUgdGhleSBzYXkKKyAgICBpdCBpcyBvayBhbmQgd2UgbWVyZ2UgYWdhaW4uCisKKyAgICBXaGVuIGV4YW1pbmVkLCB3ZSBmaW5kIHRoYXQgY29kZSBjaGFuZ2VzIG1hZGUgYmVmb3JlIHRoZSByZXZlcnQgYXJlCisgICAgbm90IGluIHRoZSBtYXN0ZXIgYnJhbmNoLCBidXQgY29kZSBjaGFuZ2VzIGFmdGVyIGFyZSBpbiB0aGUgbWFzdGVyCisgICAgYnJhbmNoLgorCithbmQgYXNrZWQgZm9yIGhlbHAgcmVjb3ZlcmluZyBmcm9tIHRoaXMgc2l0dWF0aW9uLgorCitUaGUgaGlzdG9yeSBpbW1lZGlhdGVseSBhZnRlciB0aGUgInJldmVydCBvZiB0aGUgbWVyZ2UiIHdvdWxkIGxvb2sgbGlrZQordGhpczoKKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLVcKKwkgICAgICAgLworICAgICAgIC0tLUEtLS1CCisKK3doZXJlIEEgYW5kIEIgYXJlIG9uIHRoZSBzaWRlIGRldmVsb3BtZW50IHRoYXQgd2FzIG5vdCBzbyBnb29kLCBNIGlzIHRoZQorbWVyZ2UgdGhhdCBicmluZ3MgdGhlc2UgcHJlbWF0dXJlIGNoYW5nZXMgaW50byB0aGUgbWFpbmxpbmUsIHggYXJlIGNoYW5nZXMKK3VucmVsYXRlZCB0byB3aGF0IHRoZSBzaWRlIGJyYW5jaCBkaWQgYW5kIGFscmVhZHkgbWFkZSBvbiB0aGUgbWFpbmxpbmUsCithbmQgVyBpcyB0aGUgInJldmVydCBvZiB0aGUgbWVyZ2UgTSIgKGRvZXNuJ3QgVyBsb29rIE0gdXBzaWRlIGRvd24/KS4KK0lPVywgYCJkaWZmIFdeLi5XImAgaXMgc2ltaWxhciB0byBgImRpZmYgLVIgTV4uLk0iYC4KKworU3VjaCBhICJyZXZlcnQiIG9mIGEgbWVyZ2UgY2FuIGJlIG1hZGUgd2l0aDoKKworICAgICQgZ2l0IHJldmVydCAtbSAxIE0KKworQWZ0ZXIgdGhlIGRldmVsb3BlcnMgb2YgdGhlIHNpZGUgYnJhbmNoIGZpeCB0aGVpciBtaXN0YWtlcywgdGhlIGhpc3RvcnkKK21heSBsb29rIGxpa2UgdGhpczoKKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14CisJICAgICAgIC8KKyAgICAgICAtLS1BLS0tQi0tLS0tLS0tLS0tLS0tLS0tLS1DLS0tRAorCit3aGVyZSBDIGFuZCBEIGFyZSB0byBmaXggd2hhdCB3YXMgYnJva2VuIGluIEEgYW5kIEIsIGFuZCB5b3UgbWF5IGFscmVhZHkKK2hhdmUgc29tZSBvdGhlciBjaGFuZ2VzIG9uIHRoZSBtYWlubGluZSBhZnRlciBXLgorCitJZiB5b3UgbWVyZ2UgdGhlIHVwZGF0ZWQgc2lkZSBicmFuY2ggKHdpdGggRCBhdCBpdHMgdGlwKSwgbm9uZSBvZiB0aGUKK2NoYW5nZXMgbWFkZSBpbiBBIG9yIEIgd2lsbCBiZSBpbiB0aGUgcmVzdWx0LCBiZWNhdXNlIHRoZXkgd2VyZSByZXZlcnRlZAorYnkgVy4gIFRoYXQgaXMgd2hhdCBBbGFuIHNhdy4KKworTGludXMgZXhwbGFpbnMgdGhlIHNpdHVhdGlvbjoKKworICAgIFJldmVydGluZyBhIHJlZ3VsYXIgY29tbWl0IGp1c3QgZWZmZWN0aXZlbHkgdW5kb2VzIHdoYXQgdGhhdCBjb21taXQKKyAgICBkaWQsIGFuZCBpcyBmYWlybHkgc3RyYWlnaHRmb3J3YXJkLiBCdXQgcmV2ZXJ0aW5nIGEgbWVyZ2UgY29tbWl0IGFsc28KKyAgICB1bmRvZXMgdGhlIF9kYXRhXyB0aGF0IHRoZSBjb21taXQgY2hhbmdlZCwgYnV0IGl0IGRvZXMgYWJzb2x1dGVseQorICAgIG5vdGhpbmcgdG8gdGhlIGVmZmVjdHMgb24gX2hpc3RvcnlfIHRoYXQgdGhlIG1lcmdlIGhhZC4KKworICAgIFNvIHRoZSBtZXJnZSB3aWxsIHN0aWxsIGV4aXN0LCBhbmQgaXQgd2lsbCBzdGlsbCBiZSBzZWVuIGFzIGpvaW5pbmcKKyAgICB0aGUgdHdvIGJyYW5jaGVzIHRvZ2V0aGVyLCBhbmQgZnV0dXJlIG1lcmdlcyB3aWxsIHNlZSB0aGF0IG1lcmdlIGFzCisgICAgdGhlIGxhc3Qgc2hhcmVkIHN0YXRlIC0gYW5kIHRoZSByZXZlcnQgdGhhdCByZXZlcnRlZCB0aGUgbWVyZ2UgYnJvdWdodAorICAgIGluIHdpbGwgbm90IGFmZmVjdCB0aGF0IGF0IGFsbC4KKworICAgIFNvIGEgInJldmVydCIgdW5kb2VzIHRoZSBkYXRhIGNoYW5nZXMsIGJ1dCBpdCdzIHZlcnkgbXVjaCBfbm90XyBhbgorICAgICJ1bmRvIiBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2Vzbid0IHVuZG8gdGhlIGVmZmVjdHMgb2YgYSBjb21taXQgb24KKyAgICB0aGUgcmVwb3NpdG9yeSBoaXN0b3J5LgorCisgICAgU28gaWYgeW91IHRoaW5rIG9mICJyZXZlcnQiIGFzICJ1bmRvIiwgdGhlbiB5b3UncmUgZ29pbmcgdG8gYWx3YXlzCisgICAgbWlzcyB0aGlzIHBhcnQgb2YgcmV2ZXJ0cy4gWWVzLCBpdCB1bmRvZXMgdGhlIGRhdGEsIGJ1dCBubywgaXQgZG9lc24ndAorICAgIHVuZG8gaGlzdG9yeS4KKworSW4gc3VjaCBhIHNpdHVhdGlvbiwgeW91IHdvdWxkIHdhbnQgdG8gZmlyc3QgcmV2ZXJ0IHRoZSBwcmV2aW91cyByZXZlcnQsCit3aGljaCB3b3VsZCBtYWtlIHRoZSBoaXN0b3J5IGxvb2sgbGlrZSB0aGlzOgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgtLS1ZCisJICAgICAgIC8KKyAgICAgICAtLS1BLS0tQi0tLS0tLS0tLS0tLS0tLS0tLS1DLS0tRAorCit3aGVyZSBZIGlzIHRoZSByZXZlcnQgb2YgVy4gIFN1Y2ggYSAicmV2ZXJ0IG9mIHRoZSByZXZlcnQiIGNhbiBiZSBkb25lCit3aXRoOgorCisgICAgJCBnaXQgcmV2ZXJ0IFcKKworVGhpcyBoaXN0b3J5IHdvdWxkIChpZ25vcmluZyBwb3NzaWJsZSBjb25mbGljdHMgYmV0d2VlbiB3aGF0IFcgYW5kIFcuLlkKK2NoYW5nZWQpIGJlIGVxdWl2YWxlbnQgdG8gbm90IGhhdmluZyBXIG9yIFkgYXQgYWxsIGluIHRoZSBoaXN0b3J5OgorCisgLS0tby0tLW8tLS1vLS0tTS0tLXgtLS14LS0tLS0tLXgtLS0tCisJICAgICAgIC8KKyAgICAgICAtLS1BLS0tQi0tLS0tLS0tLS0tLS0tLS0tLS1DLS0tRAorCithbmQgbWVyZ2luZyB0aGUgc2lkZSBicmFuY2ggYWdhaW4gd2lsbCBub3QgaGF2ZSBjb25mbGljdCBhcmlzaW5nIGZyb20gYW4KK2VhcmxpZXIgcmV2ZXJ0IGFuZCByZXZlcnQgb2YgdGhlIHJldmVydC4KKworIC0tLW8tLS1vLS0tby0tLU0tLS14LS0teC0tLS0tLS14LS0tLS0tLSoKKwkgICAgICAgLyAgICAgICAgICAgICAgICAgICAgICAgLworICAgICAgIC0tLUEtLS1CLS0tLS0tLS0tLS0tLS0tLS0tLUMtLS1ECisKK09mIGNvdXJzZSB0aGUgY2hhbmdlcyBtYWRlIGluIEMgYW5kIEQgc3RpbGwgY2FuIGNvbmZsaWN0IHdpdGggd2hhdCB3YXMKK2RvbmUgYnkgYW55IG9mIHRoZSB4LCBidXQgdGhhdCBpcyBqdXN0IGEgbm9ybWFsIG1lcmdlIGNvbmZsaWN0LgorCitPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlIGRldmVsb3BlcnMgb2YgdGhlIHNpZGUgYnJhbmNoIGRpc2NhcmRlZCB0aGVpcgorZmF1bHR5IEEgYW5kIEIsIGFuZCByZWRvbmUgdGhlIGNoYW5nZXMgb24gdG9wIG9mIHRoZSB1cGRhdGVkIG1haW5saW5lCithZnRlciB0aGUgcmV2ZXJ0LCB0aGUgaGlzdG9yeSB3b3VsZCBoYXZlIGxvb2tlZCBsaWtlIHRoaXM6CisKKyAtLS1vLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teC0tLXgKKwkgICAgICAgLyAgICAgICAgICAgICAgICAgXAorICAgICAgIC0tLUEtLS1CICAgICAgICAgICAgICAgICAgIEEnLS1CJy0tQycKKworSWYgeW91IHJldmVydGVkIHRoZSByZXZlcnQgaW4gc3VjaCBhIGNhc2UgYXMgaW4gdGhlIHByZXZpb3VzIGV4YW1wbGU6CisKKyAtLS1vLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teC0tLXgtLS1ZLS0tKgorCSAgICAgICAvICAgICAgICAgICAgICAgICBcICAgICAgICAgLworICAgICAgIC0tLUEtLS1CICAgICAgICAgICAgICAgICAgIEEnLS1CJy0tQycKKword2hlcmUgWSBpcyB0aGUgcmV2ZXJ0IG9mIFcsIEEnIGFuZCBCJyBhcmUgcmVyb2xsZWQgQSBhbmQgQiwgYW5kIHRoZXJlIG1heQorYWxzbyBiZSBhIGZ1cnRoZXIgZml4LXVwIEMnIG9uIHRoZSBzaWRlIGJyYW5jaC4gIGAiZGlmZiBZXi4uWSJgIGlzIHNpbWlsYXIKK3RvIGAiZGlmZiAtUiBXXi4uVyJgICh3aGljaCBpbiB0dXJuIG1lYW5zIGl0IGlzIHNpbWlsYXIgdG8gYCJkaWZmIE1eLi5NImApLAorYW5kIGAiZGlmZiBBJ14uLkMnImAgYnkgZGVmaW5pdGlvbiB3b3VsZCBiZSBzaW1pbGFyIGJ1dCBkaWZmZXJlbnQgZnJvbSB0aGF0LAorYmVjYXVzZSBpdCBpcyBhIHJlcm9sbGVkIHNlcmllcyBvZiB0aGUgZWFybGllciBjaGFuZ2UuICBUaGVyZSB3aWxsIGJlIGEKK2xvdCBvZiBvdmVybGFwcGluZyBjaGFuZ2VzIHRoYXQgcmVzdWx0IGluIGNvbmZsaWN0cy4gIFNvIGRvIG5vdCBkbyAicmV2ZXJ0CitvZiByZXZlcnQiIGJsaW5kbHkgd2l0aG91dCB0aGlua2luZy4uCisKKyAtLS1vLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teC0tLXgKKwkgICAgICAgLyAgICAgICAgICAgICAgICAgXAorICAgICAgIC0tLUEtLS1CICAgICAgICAgICAgICAgICAgIEEnLS1CJy0tQycKKworSW4gdGhlIGhpc3Rvcnkgd2l0aCByZWJhc2VkIHNpZGUgYnJhbmNoLCBXIChhbmQgTSkgYXJlIGJlaGluZCB0aGUgbWVyZ2UKK2Jhc2Ugb2YgdGhlIHVwZGF0ZWQgYnJhbmNoIGFuZCB0aGUgdGlwIG9mIHRoZSBtYWlubGluZSwgYW5kIHRoZXkgc2hvdWxkCittZXJnZSB3aXRob3V0IHRoZSBwYXN0IGZhdWx0eSBtZXJnZSBhbmQgaXRzIHJldmVydCBnZXR0aW5nIGluIHRoZSB3YXkuCisKK1RvIHJlY2FwLCB0aGVzZSBhcmUgdHdvIHZlcnkgZGlmZmVyZW50IHNjZW5hcmlvcywgYW5kIHRoZXkgd2FudCB0d28gdmVyeQorZGlmZmVyZW50IHJlc29sdXRpb24gc3RyYXRlZ2llczoKKworIC0gSWYgdGhlIGZhdWx0eSBzaWRlIGJyYW5jaCB3YXMgZml4ZWQgYnkgYWRkaW5nIGNvcnJlY3Rpb25zIG9uIHRvcCwgdGhlbgorICAgZG9pbmcgYSByZXZlcnQgb2YgdGhlIHByZXZpb3VzIHJldmVydCB3b3VsZCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8uCisKKyAtIElmIHRoZSBmYXVsdHkgc2lkZSBicmFuY2ggd2hvc2UgZWZmZWN0cyB3ZXJlIGRpc2NhcmRlZCBieSBhbiBlYXJsaWVyCisgICByZXZlcnQgb2YgYSBtZXJnZSB3YXMgcmVidWlsdCBmcm9tIHNjcmF0Y2ggKGkuZS4gcmViYXNpbmcgYW5kIGZpeGluZywKKyAgIGFzIHlvdSBzZWVtIHRvIGhhdmUgaW50ZXJwcmV0ZWQpLCB0aGVuIHJlLW1lcmdpbmcgdGhlIHJlc3VsdCB3aXRob3V0CisgICBkb2luZyBhbnl0aGluZyBlbHNlIGZhbmN5IHdvdWxkIGJlIHRoZSByaWdodCB0aGluZyB0byBkby4KKyAgIChTZWUgdGhlIEFEREVORFVNIGJlbG93IGZvciBob3cgdG8gcmVidWlsZCBhIGJyYW5jaCBmcm9tIHNjcmF0Y2gKKyAgIHdpdGhvdXQgY2hhbmdpbmcgaXRzIG9yaWdpbmFsIGJyYW5jaGluZy1vZmYgcG9pbnQuKQorCitIb3dldmVyLCB0aGVyZSBhcmUgdGhpbmdzIHRvIGtlZXAgaW4gbWluZCB3aGVuIHJldmVydGluZyBhIG1lcmdlIChhbmQKK3JldmVydGluZyBzdWNoIGEgcmV2ZXJ0KS4KKworRm9yIGV4YW1wbGUsIHRoaW5rIGFib3V0IHdoYXQgcmV2ZXJ0aW5nIGEgbWVyZ2UgKGFuZCB0aGVuIHJldmVydGluZyB0aGUKK3JldmVydCkgZG9lcyB0byBiaXNlY3RhYmlsaXR5LiBJZ25vcmUgdGhlIGZhY3QgdGhhdCB0aGUgcmV2ZXJ0IG9mIGEgcmV2ZXJ0CitpcyB1bmRvaW5nIGl0IC0ganVzdCB0aGluayBvZiBpdCBhcyBhICJzaW5nbGUgY29tbWl0IHRoYXQgZG9lcyBhIGxvdCIuCitCZWNhdXNlIHRoYXQgaXMgd2hhdCBpdCBkb2VzLgorCitXaGVuIHlvdSBoYXZlIGEgcHJvYmxlbSB5b3UgYXJlIGNoYXNpbmcgZG93biwgYW5kIHlvdSBoaXQgYSAicmV2ZXJ0IHRoaXMKK21lcmdlIiwgd2hhdCB5b3UncmUgaGl0dGluZyBpcyBlc3NlbnRpYWxseSBhIHNpbmdsZSBjb21taXQgdGhhdCBjb250YWlucworYWxsIHRoZSBjaGFuZ2VzIChidXQgb2J2aW91c2x5IGluIHJldmVyc2UpIG9mIGFsbCB0aGUgY29tbWl0cyB0aGF0IGdvdAorbWVyZ2VkLiBTbyBpdCdzIGRlYnVnZ2luZyBoZWxsLCBiZWNhdXNlIG5vdyB5b3UgZG9uJ3QgaGF2ZSBsb3RzIG9mIHNtYWxsCitjaGFuZ2VzIHRoYXQgeW91IGNhbiB0cnkgdG8gcGlucG9pbnQgd2hpY2ggX3BhcnRfIG9mIGl0IGNoYW5nZXMuCisKK0J1dCBkb2VzIGl0IGFsbCB3b3JrPyBTdXJlIGl0IGRvZXMuIFlvdSBjYW4gcmV2ZXJ0IGEgbWVyZ2UsIGFuZCBmcm9tIGEKK3B1cmVseSB0ZWNobmljYWwgYW5nbGUsIEdpdCBkaWQgaXQgdmVyeSBuYXR1cmFsbHkgYW5kIGhhZCBubyByZWFsCit0cm91Ymxlcy4gSXQganVzdCBjb25zaWRlcmVkIGl0IGEgY2hhbmdlIGZyb20gInN0YXRlIGJlZm9yZSBtZXJnZSIgdG8KKyJzdGF0ZSBhZnRlciBtZXJnZSIsIGFuZCB0aGF0IHdhcyBpdC4gTm90aGluZyBjb21wbGljYXRlZCwgbm90aGluZyBvZGQsCitub3RoaW5nIHJlYWxseSBkYW5nZXJvdXMuIEdpdCB3aWxsIGRvIGl0IHdpdGhvdXQgZXZlbiB0aGlua2luZyBhYm91dCBpdC4KKworU28gZnJvbSBhIHRlY2huaWNhbCBhbmdsZSwgdGhlcmUncyBub3RoaW5nIHdyb25nIHdpdGggcmV2ZXJ0aW5nIGEgbWVyZ2UsCitidXQgZnJvbSBhIHdvcmtmbG93IGFuZ2xlIGl0J3Mgc29tZXRoaW5nIHRoYXQgeW91IGdlbmVyYWxseSBzaG91bGQgdHJ5IHRvCithdm9pZC4KKworSWYgYXQgYWxsIHBvc3NpYmxlLCBmb3IgZXhhbXBsZSwgaWYgeW91IGZpbmQgYSBwcm9ibGVtIHRoYXQgZ290IG1lcmdlZAoraW50byB0aGUgbWFpbiB0cmVlLCByYXRoZXIgdGhhbiByZXZlcnQgdGhlIG1lcmdlLCB0cnkgX3JlYWxseV8gaGFyZCB0bworYmlzZWN0IHRoZSBwcm9ibGVtIGRvd24gaW50byB0aGUgYnJhbmNoIHlvdSBtZXJnZWQsIGFuZCBqdXN0IGZpeCBpdCwgb3IKK3RyeSB0byByZXZlcnQgdGhlIGluZGl2aWR1YWwgY29tbWl0IHRoYXQgY2F1c2VkIGl0LgorCitZZXMsIGl0J3MgbW9yZSBjb21wbGV4LCBhbmQgbm8sIGl0J3Mgbm90IGFsd2F5cyBnb2luZyB0byB3b3JrIChzb21ldGltZXMKK3RoZSBhbnN3ZXIgaXM6ICJvb3BzLCBJIHJlYWxseSBzaG91bGRuJ3QgaGF2ZSBtZXJnZWQgaXQsIGJlY2F1c2UgaXQgd2Fzbid0CityZWFkeSB5ZXQsIGFuZCBJIHJlYWxseSBuZWVkIHRvIHVuZG8gX2FsbF8gb2YgdGhlIG1lcmdlIikuIFNvIHRoZW4geW91CityZWFsbHkgc2hvdWxkIHJldmVydCB0aGUgbWVyZ2UsIGJ1dCB3aGVuIHlvdSB3YW50IHRvIHJlLWRvIHRoZSBtZXJnZSwgeW91Citub3cgbmVlZCB0byBkbyBpdCBieSByZXZlcnRpbmcgdGhlIHJldmVydC4KKworQURERU5EVU0KKworU29tZXRpbWVzIHlvdSBoYXZlIHRvIHJld3JpdGUgb25lIG9mIGEgdG9waWMgYnJhbmNoJ3MgY29tbWl0cyAqYW5kKiB5b3UgY2FuJ3QKK2NoYW5nZSB0aGUgdG9waWMncyBicmFuY2hpbmctb2ZmIHBvaW50LiAgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBzaXR1YXRpb246CisKKyBQLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teAorICBcICAgICAgICAgLworICAgQS0tLUItLS1DCisKK3doZXJlIGNvbW1pdCBXIHJldmVydGVkIGNvbW1pdCBNIGJlY2F1c2UgaXQgdHVybmVkIG91dCB0aGF0IGNvbW1pdCBCIHdhcyB3cm9uZworYW5kIG5lZWRzIHRvIGJlIHJld3JpdHRlbiwgYnV0IHlvdSBuZWVkIHRoZSByZXdyaXR0ZW4gdG9waWMgdG8gc3RpbGwgYnJhbmNoCitmcm9tIGNvbW1pdCBQIChwZXJoYXBzIFAgaXMgYSBicmFuY2hpbmctb2ZmIHBvaW50IGZvciB5ZXQgYW5vdGhlciBicmFuY2gsIGFuZAoreW91IHdhbnQgYmUgYWJsZSB0byBtZXJnZSB0aGUgdG9waWMgaW50byBib3RoIGJyYW5jaGVzKS4KKworVGhlIG5hdHVyYWwgdGhpbmcgdG8gZG8gaW4gdGhpcyBjYXNlIGlzIHRvIGNoZWNrb3V0IHRoZSBBLUItQyBicmFuY2ggYW5kIHVzZQorInJlYmFzZSAtaSBQIiB0byBjaGFuZ2UgY29tbWl0IEIuICBIb3dldmVyIHRoaXMgZG9lcyBub3QgcmV3cml0ZSBjb21taXQgQSwKK2JlY2F1c2UgInJlYmFzZSAtaSIgYnkgZGVmYXVsdCBmYXN0LWZvcndhcmRzIG92ZXIgYW55IGluaXRpYWwgY29tbWl0cyBzZWxlY3RlZAord2l0aCB0aGUgInBpY2siIGNvbW1hbmQuICBTbyB5b3UgZW5kIHVwIHdpdGggdGhpczoKKworIFAtLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14CisgIFwgICAgICAgICAvCisgICBBLS0tQi0tLUMgICA8LS0gb2xkIGJyYW5jaAorICAgIFwKKyAgICAgQictLS1DJyAgIDwtLSBuYWl2ZWx5IHJld3JpdHRlbiBicmFuY2gKKworVG8gbWVyZ2UgQS1CJy1DJyBpbnRvIHRoZSBtYWlubGluZSBicmFuY2ggeW91IHdvdWxkIHN0aWxsIGhhdmUgdG8gZmlyc3QgcmV2ZXJ0Citjb21taXQgVyBpbiBvcmRlciB0byBwaWNrIHVwIHRoZSBjaGFuZ2VzIGluIEEsIGJ1dCB0aGVuIGl0J3MgbGlrZWx5IHRoYXQgdGhlCitjaGFuZ2VzIGluIEInIHdpbGwgY29uZmxpY3Qgd2l0aCB0aGUgb3JpZ2luYWwgQiBjaGFuZ2VzIHJlLWludHJvZHVjZWQgYnkgdGhlCityZXZlcnNpb24gb2YgVy4KKworSG93ZXZlciwgeW91IGNhbiBhdm9pZCB0aGVzZSBwcm9ibGVtcyBpZiB5b3UgcmVjcmVhdGUgdGhlIGVudGlyZSBicmFuY2gsCitpbmNsdWRpbmcgY29tbWl0IEE6CisKKyAgIEEnLS0tQictLS1DJyAgPC0tIGNvbXBsZXRlbHkgcmV3cml0dGVuIGJyYW5jaAorICAvCisgUC0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgKKyAgXCAgICAgICAgIC8KKyAgIEEtLS1CLS0tQworCitZb3UgY2FuIG1lcmdlIEEnLUInLUMnIGludG8gdGhlIG1haW5saW5lIGJyYW5jaCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IGZpcnN0CityZXZlcnRpbmcgVy4gIE1haW5saW5lJ3MgaGlzdG9yeSB3b3VsZCBsb29rIGxpa2UgdGhpczoKKworICAgQSctLS1CJy0tLUMnLS0tLS0tLS0tLS0tLS0tLS0tCisgIC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgUC0tLW8tLS1vLS0tTS0tLXgtLS14LS0tVy0tLXgtLS1NMgorICBcICAgICAgICAgLworICAgQS0tLUItLS1DCisKK0J1dCBpZiB5b3UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0byBjaGFuZ2UgY29tbWl0IEEsIHRoZW4geW91IG5lZWQgc29tZSB3YXkgdG8KK3JlY3JlYXRlIGl0IGFzIGEgbmV3IGNvbW1pdCB3aXRoIHRoZSBzYW1lIGNoYW5nZXMgaW4gaXQuICBUaGUgcmViYXNlIGNvbW1hbmQncworLS1uby1mZiBvcHRpb24gcHJvdmlkZXMgYSB3YXkgdG8gZG8gdGhpczoKKworICAgICQgZ2l0IHJlYmFzZSBbLWldIC0tbm8tZmYgUAorCitUaGUgLS1uby1mZiBvcHRpb24gY3JlYXRlcyBhIG5ldyBicmFuY2ggQSctQictQycgd2l0aCBhbGwtbmV3IGNvbW1pdHMgKGFsbCB0aGUKK1NIQSBJRHMgd2lsbCBiZSBkaWZmZXJlbnQpIGV2ZW4gaWYgaW4gdGhlIGludGVyYWN0aXZlIGNhc2UgeW91IG9ubHkgYWN0dWFsbHkKK21vZGlmeSBjb21taXQgQi4gIFlvdSBjYW4gdGhlbiBtZXJnZSB0aGlzIG5ldyBicmFuY2ggZGlyZWN0bHkgaW50byB0aGUgbWFpbmxpbmUKK2JyYW5jaCBhbmQgYmUgc3VyZSB5b3UnbGwgZ2V0IGFsbCBvZiB0aGUgYnJhbmNoJ3MgY2hhbmdlcy4KKworWW91IGNhbiBhbHNvIHVzZSAtLW5vLWZmIGluIGNhc2VzIHdoZXJlIHlvdSBqdXN0IGFkZCBleHRyYSBjb21taXRzIHRvIHRoZSB0b3BpYwordG8gZml4IGl0IHVwLiAgTGV0J3MgcmV2aXNpdCB0aGUgc2l0dWF0aW9uIGRpc2N1c3NlZCBhdCB0aGUgc3RhcnQgb2YgdGhpcyBob3d0bzoKKworIFAtLS1vLS0tby0tLU0tLS14LS0teC0tLVctLS14CisgIFwgICAgICAgICAvCisgICBBLS0tQi0tLUMtLS0tLS0tLS0tLS0tLS0tRC0tLUUgICA8LS0gZml4ZWQtdXAgdG9waWMgYnJhbmNoCisKK0F0IHRoaXMgcG9pbnQsIHlvdSBjYW4gdXNlIC0tbm8tZmYgdG8gcmVjcmVhdGUgdGhlIHRvcGljIGJyYW5jaDoKKworICAgICQgZ2l0IGNoZWNrb3V0IEUKKyAgICAkIGdpdCByZWJhc2UgLS1uby1mZiBQCisKK3lpZWxkaW5nCisKKyAgIEEnLS0tQictLS1DJy0tLS0tLS0tLS0tLUQnLS0tRScgIDwtLSByZWNyZWF0ZWQgdG9waWMgYnJhbmNoCisgIC8KKyBQLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teAorICBcICAgICAgICAgLworICAgQS0tLUItLS1DLS0tLS0tLS0tLS0tLS0tLUQtLS1FCisKK1lvdSBjYW4gbWVyZ2UgdGhlIHJlY3JlYXRlZCBicmFuY2ggaW50byB0aGUgbWFpbmxpbmUgd2l0aG91dCByZXZlcnRpbmcgY29tbWl0IFcsCithbmQgbWFpbmxpbmUncyBoaXN0b3J5IHdpbGwgbG9vayBsaWtlIHRoaXM6CisKKyAgIEEnLS0tQictLS1DJy0tLS0tLS0tLS0tLUQnLS0tRScKKyAgLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyBQLS0tby0tLW8tLS1NLS0teC0tLXgtLS1XLS0teC0tLU0yCisgIFwgICAgICAgICAvCisgICBBLS0tQi0tLUMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9yZXZlcnQtYnJhbmNoLXJlYmFzZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ5NTA4ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vcmV2ZXJ0LWJyYW5jaC1yZWJhc2UudHh0CkBAIC0wLDAgKzEsMTg3IEBACitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitUbzogZ2l0QHZnZXIua2VybmVsLm9yZworU3ViamVjdDogW0hPV1RPXSBSZXZlcnRpbmcgYW4gZXhpc3RpbmcgY29tbWl0CitBYnN0cmFjdDogSW4gdGhpcyBhcnRpY2xlLCBKQyBnaXZlcyBhIHNtYWxsIHJlYWwtbGlmZSBleGFtcGxlIG9mIHVzaW5nCisgJ2dpdCByZXZlcnQnIGNvbW1hbmQsIGFuZCB1c2luZyBhIHRlbXBvcmFyeSBicmFuY2ggYW5kIHRhZyBmb3Igc2FmZXR5CisgYW5kIGVhc2llciBzYW5pdHkgY2hlY2tpbmcuCitEYXRlOiBNb24sIDI5IEF1ZyAyMDA1IDIxOjM5OjAyIC0wNzAwCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKK01lc3NhZ2UtSUQ6IDw3dm9lN2czdW9wLmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQ+CisKK0hvdyB0byByZXZlcnQgYW4gZXhpc3RpbmcgY29tbWl0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitPbmUgb2YgdGhlIGNoYW5nZXMgSSBwdWxsZWQgaW50byB0aGUgJ21hc3RlcicgYnJhbmNoIHR1cm5zIG91dCB0bworYnJlYWsgYnVpbGRpbmcgR2l0IHdpdGggR0NDIDIuOTUuICBXaGlsZSB0aGV5IHdlcmUgd2VsbC1pbnRlbnRpb25lZAorcG9ydGFiaWxpdHkgZml4ZXMsIGtlZXBpbmcgdGhpbmdzIHdvcmtpbmcgd2l0aCBnY2MtMi45NSB3YXMgYWxzbworaW1wb3J0YW50LiAgSGVyZSBpcyB3aGF0IEkgZGlkIHRvIHJldmVydCB0aGUgY2hhbmdlIGluIHRoZSAnbWFzdGVyJworYnJhbmNoIGFuZCB0byBhZGp1c3QgdGhlICdwdScgYnJhbmNoLCB1c2luZyBjb3JlIEdpdCB0b29scyBhbmQKK2JhcmVib25lIFBvcmNlbGFpbi4KKworRmlyc3QsIHByZXBhcmUgYSB0aHJvdy1hd2F5IGJyYW5jaCBpbiBjYXNlIEkgc2NyZXcgdGhpbmdzIHVwLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIHJldmVydC1jOTkgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm93IEkgYW0gb24gdGhlICdyZXZlcnQtYzk5JyBicmFuY2guICBMZXQncyBmaWd1cmUgb3V0IHdoaWNoIGNvbW1pdCB0bworcmV2ZXJ0LiAgSSBoYXBwZW4gdG8ga25vdyB0aGF0IHRoZSB0b3Agb2YgdGhlICdtYXN0ZXInIGJyYW5jaCBpcyBhCittZXJnZSwgYW5kIGl0cyBzZWNvbmQgcGFyZW50IChpLmUuIGZvcmVpZ24gY29tbWl0IEkgbWVyZ2VkIGZyb20pIGhhcwordGhlIGNoYW5nZSBJIHdvdWxkIHdhbnQgdG8gdW5kby4gIEZ1cnRoZXIgSSBoYXBwZW4gdG8ga25vdyB0aGF0IHRoYXQKK21lcmdlIGludHJvZHVjZWQgNSBjb21taXRzIG9yIHNvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctYnJhbmNoIC0tbW9yZT00IG1hc3RlciBtYXN0ZXJeMiB8IGhlYWQKKyogW21hc3Rlcl0gTWVyZ2UgcmVmcy9oZWFkcy9wb3J0YWJsZSBmcm9tIGh0dHA6Ly93d3cuY3MuYmVya2VsZXkuLi4uCisgISBbbWFzdGVyXjJdIFJlcGxhY2UgQzk5IGFycmF5IGluaXRpYWxpemVycyB3aXRoIGNvZGUuCistLQorLSAgW21hc3Rlcl0gTWVyZ2UgcmVmcy9oZWFkcy9wb3J0YWJsZSBmcm9tIGh0dHA6Ly93d3cuY3MuYmVya2VsZXkuLi4uCisqKyBbbWFzdGVyXjJdIFJlcGxhY2UgQzk5IGFycmF5IGluaXRpYWxpemVycyB3aXRoIGNvZGUuCisqKyBbbWFzdGVyXjJ+MV0gUmVwbGFjZSB1bnNldGVudigpIGFuZCBzZXRlbnYoKSB3aXRoIG9sZGVyIHB1dGVudigpLgorKisgW21hc3Rlcl4yfjJdIEluY2x1ZGUgc3lzL3RpbWUuaCBpbiBkYWVtb24uYy4KKyorIFttYXN0ZXJeMn4zXSBGaXggPzogc3RhdGVtZW50cy4KKyorIFttYXN0ZXJeMn40XSBSZXBsYWNlIHplcm8tbGVuZ3RoIGFycmF5IGRlY2xzIHdpdGggW10uCisqICBbbWFzdGVyfjFdIHR1dG9yaWFsIG5vdGUgYWJvdXQgZ2l0IGJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAnLS1tb3JlPTQnIGFib3ZlIG1lYW5zICJhZnRlciB3ZSByZWFjaCB0aGUgbWVyZ2UgYmFzZSBvZiByZWZzLAorc2hvdyB1bnRpbCB3ZSBkaXNwbGF5IGZvdXIgbW9yZSBjb21tb24gY29tbWl0cyIuICBUaGF0IGxhc3QgY29tbWl0Cit3b3VsZCBoYXZlIGJlZW4gd2hlcmUgdGhlICJwb3J0YWJsZSIgYnJhbmNoIHdhcyBmb3JrZWQgZnJvbSB0aGUgbWFpbgorZ2l0LmdpdCByZXBvc2l0b3J5LCBzbyB0aGlzIHdvdWxkIHNob3cgZXZlcnl0aGluZyBvbiBib3RoIGJyYW5jaGVzCitzaW5jZSB0aGVuLiAgSSBqdXN0IGxpbWl0ZWQgdGhlIG91dHB1dCB0byB0aGUgZmlyc3QgaGFuZGZ1bCB1c2luZworJ2hlYWQnLgorCitOb3cgSSBrbm93ICdtYXN0ZXJeMn40JyAocHJvbm91bmNlIGl0IGFzICJmaW5kIHRoZSBzZWNvbmQgcGFyZW50IG9mCit0aGUgJ21hc3RlcicsIGFuZCB0aGVuIGdvIGZvdXIgZ2VuZXJhdGlvbnMgYmFjayBmb2xsb3dpbmcgdGhlIGZpcnN0CitwYXJlbnQiKSBpcyB0aGUgb25lIEkgd291bGQgd2FudCB0byByZXZlcnQuICBTaW5jZSBJIGFsc28gd2FudCB0byBzYXkKK3doeSBJIGFtIHJldmVydGluZyBpdCwgdGhlICctbicgZmxhZyBpcyBnaXZlbiB0byAnZ2l0IHJldmVydCcuICBUaGlzCitwcmV2ZW50cyBpdCBmcm9tIGFjdHVhbGx5IG1ha2luZyBhIGNvbW1pdCwgYW5kIGluc3RlYWQgJ2dpdCByZXZlcnQnCitsZWF2ZXMgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBpdCB3YW50ZWQgdG8gdXNlIGluICcubXNnJyBmaWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJldmVydCAtbiBtYXN0ZXJeMn40CiskIGNhdCAubXNnCitSZXZlcnQgIlJlcGxhY2UgemVyby1sZW5ndGggYXJyYXkgZGVjbHMgd2l0aCBbXS4iCisKK1RoaXMgcmV2ZXJ0cyA2YzVmOWJhYTNiYzBkNjNlMTQxZTBhZmMyMzExMDIwNTM3OTkwNWE0IGNvbW1pdC4KKyQgZ2l0IGRpZmYgSEVBRCA7IyB0byBtYWtlIHN1cmUgd2hhdCB3ZSBhcmUgcmV2ZXJ0aW5nIG1ha2VzIHNlbnNlLgorJCBtYWtlIENDPWdjYy0yLjk1IGNsZWFuIHRlc3QgOyMgbWFrZSBzdXJlIGl0IGZpeGVkIHRoZSBicmVha2FnZS4KKyQgbWFrZSBjbGVhbiB0ZXN0IDsjIG1ha2Ugc3VyZSBpdCBkaWQgbm90IGNhdXNlIG90aGVyIGJyZWFrYWdlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZXZlcnRlZCBjaGFuZ2UgbWFrZXMgc2Vuc2UgKGZyb20gcmVhZGluZyB0aGUgJ2RpZmYnIG91dHB1dCksIGRvZXMKK2ZpeCB0aGUgcHJvYmxlbSAoZnJvbSAnbWFrZSBDQz1nY2MtMi45NScgdGVzdCksIGFuZCBkb2VzIG5vdCBjYXVzZSBuZXcKK2JyZWFrYWdlIChmcm9tIHRoZSBsYXN0ICdtYWtlIHRlc3QnKS4gIEknbSByZWFkeSB0byBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC1hIC1zIDsjIHJlYWQgLm1zZyBpbnRvIHRoZSBsb2csCisgICAgICAgICAgICAgICAgICAgICMgYW5kIGV4cGxhaW4gd2h5IEkgYW0gcmV2ZXJ0aW5nLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0kgY291bGQgaGF2ZSBzY3Jld2VkIHVwIGluIGFueSBvZiB0aGUgYWJvdmUgc3RlcHMsIGJ1dCBpbiB0aGUgd29yc3QKK2Nhc2UgSSBjb3VsZCBqdXN0IGhhdmUgZG9uZSAnZ2l0IGNoZWNrb3V0IG1hc3RlcicgdG8gc3RhcnQgb3Zlci4KK0ZvcnR1bmF0ZWx5IEkgZGlkIG5vdCBoYXZlIHRvOyB3aGF0IEkgaGF2ZSBpbiB0aGUgY3VycmVudCBicmFuY2gKKydyZXZlcnQtYzk5JyBpcyB3aGF0IEkgd2FudC4gIFNvIG1lcmdlIHRoYXQgYmFjayBpbnRvICdtYXN0ZXInOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorJCBnaXQgbWVyZ2UgcmV2ZXJ0LWM5OSA7IyB0aGlzIHNob3VsZCBiZSBhIGZhc3QtZm9yd2FyZAorVXBkYXRpbmcgZnJvbSAxMGQ3ODFiOWNhYTRmNzE0OTVjN2IzNDk2M2JlZjEzNzIxNmY4NmE4IHRvIGUzYTY5M2MuLi4KKyBjYWNoZS5oICAgICAgICB8ICAgIDggKysrKy0tLS0KKyBjb21taXQuYyAgICAgICB8ICAgIDIgKy0KKyBscy1maWxlcy5jICAgICB8ICAgIDIgKy0KKyByZWNlaXZlLXBhY2suYyB8ICAgIDIgKy0KKyBzZXJ2ZXItaW5mby5jICB8ICAgIDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBubyBuZWVkIHRvIHJlZG8gdGhlIHRlc3QgYXQgdGhpcyBwb2ludC4gIFdlIGZhc3QtZm9yd2FyZGVkCithbmQgd2Uga25vdyAnbWFzdGVyJyBtYXRjaGVzICdyZXZlcnQtYzk5JyBleGFjdGx5LiAgSW4gZmFjdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIG1hc3Rlci4ucmV2ZXJ0LWM5OQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3NheXMgbm90aGluZy4KKworVGhlbiB3ZSByZWJhc2UgdGhlICdwdScgYnJhbmNoIGFzIHVzdWFsLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IHB1CiskIGdpdCB0YWcgcHUtYW5jaG9yIHB1CiskIGdpdCByZWJhc2UgbWFzdGVyCisqIEFwcGx5aW5nOiBSZWRvICJyZXZlcnQiIHVzaW5nIHRocmVlLXdheSBtZXJnZSBtYWNoaW5lcnkuCitGaXJzdCB0cnlpbmcgc2ltcGxlIG1lcmdlIHN0cmF0ZWd5IHRvIGNoZXJyeS1waWNrLgorKiBBcHBseWluZzogUmVtb3ZlIGdpdC1hcHBseS1wYXRjaC1zY3JpcHQuCitGaXJzdCB0cnlpbmcgc2ltcGxlIG1lcmdlIHN0cmF0ZWd5IHRvIGNoZXJyeS1waWNrLgorU2ltcGxlIGNoZXJyeS1waWNrIGZhaWxzOyB0cnlpbmcgQXV0b21hdGljIGNoZXJyeS1waWNrLgorUmVtb3ZpbmcgRG9jdW1lbnRhdGlvbi9naXQtYXBwbHktcGF0Y2gtc2NyaXB0LnR4dAorUmVtb3ZpbmcgZ2l0LWFwcGx5LXBhdGNoLXNjcmlwdAorKiBBcHBseWluZzogRG9jdW1lbnQgImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IgorRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKyogQXBwbHlpbmc6IG1haWxpbmZvIGFuZCBhcHBseW1ib3ggdXBkYXRlcworRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKyogQXBwbHlpbmc6IFNob3cgY29tbWl0cyBpbiB0b3BvIG9yZGVyIGFuZCBuYW1lIGFsbCBjb21taXRzLgorRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKyogQXBwbHlpbmc6IE1vcmUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLgorRmlyc3QgdHJ5aW5nIHNpbXBsZSBtZXJnZSBzdHJhdGVneSB0byBjaGVycnktcGljay4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdGVtcG9yYXJ5IHRhZyAncHUtYW5jaG9yJyBpcyBtZSBqdXN0IGJlaW5nIGNhcmVmdWwsIGluIGNhc2UgJ2dpdAorcmViYXNlJyBzY3Jld3MgdXAuICBBZnRlciB0aGlzLCBJIGNhbiBkbyB0aGVzZSBmb3Igc2FuaXR5IGNoZWNrOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgcHUtYW5jaG9yLi5wdSA7IyBtYWtlIHN1cmUgd2UgZ290IHRoZSBtYXN0ZXIgZml4LgorJCBtYWtlIENDPWdjYy0yLjk1IGNsZWFuIHRlc3QgOyMgbWFrZSBzdXJlIGl0IGZpeGVkIHRoZSBicmVha2FnZS4KKyQgbWFrZSBjbGVhbiB0ZXN0IDsjIG1ha2Ugc3VyZSBpdCBkaWQgbm90IGNhdXNlIG90aGVyIGJyZWFrYWdlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V2ZXJ5dGhpbmcgaXMgaW4gdGhlIGdvb2Qgb3JkZXIuICBJIGRvIG5vdCBuZWVkIHRoZSB0ZW1wb3JhcnkgYnJhbmNoCitvciB0YWcgYW55bW9yZSwgc28gcmVtb3ZlIHRoZW06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBybSAtZiAuZ2l0L3JlZnMvdGFncy9wdS1hbmNob3IKKyQgZ2l0IGJyYW5jaCAtZCByZXZlcnQtYzk5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgd2FzIGFuIGVtZXJnZW5jeSBmaXgsIHNvIHdlIG1pZ2h0IGFzIHdlbGwgbWVyZ2UgaXQgaW50byB0aGUKKydyZWxlYXNlIGNhbmRpZGF0ZScgYnJhbmNoLCBhbHRob3VnaCBJIGV4cGVjdCB0aGUgbmV4dCByZWxlYXNlIHdvdWxkCitiZSBzb21lIGRheXMgb2ZmOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IHJjCiskIGdpdCBwdWxsIC4gbWFzdGVyCitQYWNraW5nIDAgb2JqZWN0cworVW5wYWNraW5nIDAgb2JqZWN0cworCisqIGNvbW1pdC1pc2g6IGUzYTY5M2MuLi4JcmVmcy9oZWFkcy9tYXN0ZXIgZnJvbSAuCitUcnlpbmcgdG8gbWVyZ2UgZTNhNjkzYy4uLiBpbnRvIDhjMWY1ZjAuLi4gdXNpbmcgMTBkNzgxYi4uLgorQ29tbWl0dGVkIG1lcmdlIDdmYjliNzI2MmExZDFlMGE0N2JiZmRjYmJjZjUwY2UwNjM1ZDNmOGYKKyBjYWNoZS5oICAgICAgICB8ICAgIDggKysrKy0tLS0KKyBjb21taXQuYyAgICAgICB8ICAgIDIgKy0KKyBscy1maWxlcy5jICAgICB8ICAgIDIgKy0KKyByZWNlaXZlLXBhY2suYyB8ICAgIDIgKy0KKyBzZXJ2ZXItaW5mby5jICB8ICAgIDIgKy0KKyA1IGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbmQgdGhlIGZpbmFsIHJlcG9zaXRvcnkgc3RhdHVzIGxvb2tzIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCAtLW1vcmU9MSBtYXN0ZXIgcHUgcmMKKyEgW21hc3Rlcl0gUmV2ZXJ0ICJSZXBsYWNlIHplcm8tbGVuZ3RoIGFycmF5IGRlY2xzIHdpdGggW10uIgorICEgW3B1XSBnaXQtcmVwYWNrOiBBZGQgb3B0aW9uIHRvIHJlcGFjayBhbGwgb2JqZWN0cy4KKyAgKiBbcmNdIE1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyIGZyb20gLgorLS0tCisgKyAgW3B1XSBnaXQtcmVwYWNrOiBBZGQgb3B0aW9uIHRvIHJlcGFjayBhbGwgb2JqZWN0cy4KKyArICBbcHV+MV0gTW9yZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisgKyAgW3B1fjJdIFNob3cgY29tbWl0cyBpbiB0b3BvIG9yZGVyIGFuZCBuYW1lIGFsbCBjb21taXRzLgorICsgIFtwdX4zXSBtYWlsaW5mbyBhbmQgYXBwbHltYm94IHVwZGF0ZXMKKyArICBbcHV+NF0gRG9jdW1lbnQgImdpdCBjaGVycnktcGljayIgYW5kICJnaXQgcmV2ZXJ0IgorICsgIFtwdX41XSBSZW1vdmUgZ2l0LWFwcGx5LXBhdGNoLXNjcmlwdC4KKyArICBbcHV+Nl0gUmVkbyAicmV2ZXJ0IiB1c2luZyB0aHJlZS13YXkgbWVyZ2UgbWFjaGluZXJ5LgorICAtIFtyY10gTWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgZnJvbSAuCisrKyogW21hc3Rlcl0gUmV2ZXJ0ICJSZXBsYWNlIHplcm8tbGVuZ3RoIGFycmF5IGRlY2xzIHdpdGggW10uIgorICAtIFtyY34xXSBNZXJnZSByZWZzL2hlYWRzL21hc3RlciBmcm9tIC4KKy4uLiBbbWFzdGVyfjFdIE1lcmdlIHJlZnMvaGVhZHMvcG9ydGFibGUgZnJvbSBodHRwOi8vd3d3LmNzLmJlcmtlbGV5Li4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2hvd3RvL3NlcGFyYXRpbmctdG9waWMtYnJhbmNoZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDEwMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXBhcmF0aW5nLXRvcGljLWJyYW5jaGVzLnR4dApAQCAtMCwwICsxLDk0IEBACitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitTdWJqZWN0OiBTZXBhcmF0aW5nIHRvcGljIGJyYW5jaGVzCitBYnN0cmFjdDogSW4gdGhpcyBhcnRpY2xlLCBKQyBkZXNjcmliZXMgaG93IHRvIHNlcGFyYXRlIHRvcGljIGJyYW5jaGVzLgorQ29udGVudC10eXBlOiB0ZXh0L2FzY2lpZG9jCisKK0hvdyB0byBzZXBhcmF0ZSB0b3BpYyBicmFuY2hlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgdGV4dCB3YXMgb3JpZ2luYWxseSBhIGZvb3Rub3RlIHRvIGEgZGlzY3Vzc2lvbiBhYm91dCB0aGUKK2JlaGF2aW91ciBvZiB0aGUgZ2l0IGRpZmYgY29tbWFuZHMuCisKK09mdGVuIEkgZmluZCBteXNlbGYgZG9pbmcgdGhhdCBbcnVubmluZyBkaWZmIGFnYWluc3Qgc29tZXRoaW5nIG90aGVyCit0aGFuIEhFQURdIHdoaWxlIHJld3JpdGluZyBtZXNzeSBkZXZlbG9wbWVudCBoaXN0b3J5LiAgRm9yIGV4YW1wbGUsIEkKK3N0YXJ0IGRvaW5nIHNvbWUgd29yayB3aXRob3V0IGtub3dpbmcgZXhhY3RseSB3aGVyZSBpdCBsZWFkcywgYW5kIGVuZAordXAgd2l0aCBhIGhpc3RvcnkgbGlrZSB0aGlzOgorCisgICAgICAgICAgICAibWFzdGVyIgorICAgICAgICBvLS0tbworICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICJ0b3BpYyIKKyAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vCisKK0F0IHRoaXMgcG9pbnQsICJ0b3BpYyIgY29udGFpbnMgc29tZXRoaW5nIEkga25vdyBJIHdhbnQsIGJ1dCBpdAorY29udGFpbnMgdHdvIGNvbmNlcHRzIHRoYXQgdHVybmVkIG91dCB0byBiZSBjb21wbGV0ZWx5IGluZGVwZW5kZW50LgorQW5kIG9mdGVuLCBvbmUgdG9waWMgY29tcG9uZW50IGlzIGxhcmdlciB0aGFuIHRoZSBvdGhlci4gIEl0IG1heQorY29udGFpbiBtb3JlIHRoYW4gdHdvIHRvcGljcy4KKworSW4gb3JkZXIgdG8gcmV3cml0ZSB0aGlzIG1lc3MgdG8gYmUgbW9yZSBtYW5hZ2VhYmxlLCBJIHdvdWxkIGZpcnN0IGRvCisiZGlmZiBtYXN0ZXIuLnRvcGljIiwgdG8gZXh0cmFjdCB0aGUgY2hhbmdlcyBpbnRvIGEgc2luZ2xlIHBhdGNoLCBzdGFydAorcGlja2luZyBwaWVjZXMgZnJvbSBpdCB0byBnZXQgbG9naWNhbGx5IHNlbGYtY29udGFpbmVkIHVuaXRzLCBhbmQKK3N0YXJ0IGJ1aWxkaW5nIG9uIHRvcCBvZiAibWFzdGVyIjoKKworICAgICAgICAkIGdpdCBkaWZmIG1hc3Rlci4udG9waWMgPlAuZGlmZgorICAgICAgICAkIGdpdCBjaGVja291dCAtYiB0b3BpY0EgbWFzdGVyCisgICAgICAgIC4uLiBwaWNrIGFuZCBhcHBseSBwaWVjZXMgZnJvbSBQLmRpZmYgdG8gYnVpbGQKKyAgICAgICAgLi4uIGNvbW1pdHMgb24gdG9waWNBIGJyYW5jaC4KKworICAgICAgICAgICAgICBvLS0tby0tLW8KKyAgICAgICAgICAgICAvICAgICAgICAidG9waWNBIgorICAgICAgICBvLS0tbyJtYXN0ZXIiCisgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgInRvcGljIgorICAgICAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8KKworQmVmb3JlIGRvaW5nIGVhY2ggY29tbWl0IG9uICJ0b3BpY0EiIEhFQUQsIEkgcnVuICJkaWZmIEhFQUQiCitiZWZvcmUgdXBkYXRlLWluZGV4IHRoZSBhZmZlY3RlZCBwYXRocywgb3IgImRpZmYgLS1jYWNoZWQgSEVBRCIKK2FmdGVyLiAgQWxzbyBJIHdvdWxkIHJ1biAiZGlmZiAtLWNhY2hlZCBtYXN0ZXIiIHRvIG1ha2Ugc3VyZQordGhhdCB0aGUgY2hhbmdlcyBhcmUgb25seSB0aGUgb25lcyByZWxhdGVkIHRvICJ0b3BpY0EiLiAgVXN1YWxseQorSSBkbyB0aGlzIGZvciBzbWFsbGVyIHRvcGljcyBmaXJzdC4KKworQWZ0ZXIgdGhhdCwgSSdkIGRvIHRoZSByZW1haW5kZXIgb2YgdGhlIG9yaWdpbmFsICJ0b3BpYyIsIGJ1dAorZm9yIHRoYXQsIEkgZG8gbm90IHN0YXJ0IGZyb20gdGhlIHBhdGNoZmlsZSBJIGV4dHJhY3RlZCBieQorY29tcGFyaW5nICJtYXN0ZXIiIGFuZCAidG9waWMiIEkgdXNlZCBpbml0aWFsbHkuICBTdGlsbCBvbgorInRvcGljQSIsIEkgZXh0cmFjdCAiZGlmZiB0b3BpYyIsIGFuZCB1c2UgaXQgdG8gcmVidWlsZCB0aGUKK290aGVyIHRvcGljOgorCisgICAgICAgICQgZ2l0IGRpZmYgLVIgdG9waWMgPlAuZGlmZiA7IyAtLWNhY2hlZCBhbHNvIHdvdWxkIHdvcmsgZmluZQorICAgICAgICAkIGdpdCBjaGVja291dCAtYiB0b3BpY0IgbWFzdGVyCisgICAgICAgIC4uLiBwaWNrIGFuZCBhcHBseSBwaWVjZXMgZnJvbSBQLmRpZmYgdG8gYnVpbGQKKyAgICAgICAgLi4uIGNvbW1pdHMgb24gdG9waWNCIGJyYW5jaC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9waWNCIgorICAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8KKyAgICAgICAgICAgICAgLworICAgICAgICAgICAgIC9vLS0tby0tLW8KKyAgICAgICAgICAgIHwvICAgICAgICAidG9waWNBIgorICAgICAgICBvLS0tbyJtYXN0ZXIiCisgICAgICAgICAgICAgXCAgICAgICAgICAgICAgICAgICAgInRvcGljIgorICAgICAgICAgICAgICBvLS0tby0tLW8tLS1vLS0tby0tLW8KKworQWZ0ZXIgSSBhbSBkb25lLCBJJ2QgdHJ5IGEgcHJldGVuZC1tZXJnZSBiZXR3ZWVuICJ0b3BpY0EiIGFuZAorInRvcGljQiIgaW4gb3JkZXIgdG8gbWFrZSBzdXJlIEkgaGF2ZSBub3QgbWlzc2VkIGFueXRoaW5nOgorCisgICAgICAgICQgZ2l0IHB1bGwgLiB0b3BpY0EgOyMgbWVyZ2UgaXQgaW50byBjdXJyZW50ICJ0b3BpY0IiCisgICAgICAgICQgZ2l0IGRpZmYgdG9waWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvcGljQiIKKyAgICAgICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vLS0tKiAocHJldGVuZCBtZXJnZSkKKyAgICAgICAgICAgICAgLyAgICAgICAgICAgICAgICAgICAvCisgICAgICAgICAgICAgL28tLS1vLS0tby0tLS0tLS0tLS0nCisgICAgICAgICAgICB8LyAgICAgICAgInRvcGljQSIKKyAgICAgICAgby0tLW8ibWFzdGVyIgorICAgICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICJ0b3BpYyIKKyAgICAgICAgICAgICAgby0tLW8tLS1vLS0tby0tLW8tLS1vCisKK1RoZSBsYXN0IGRpZmYgYmV0dGVyIG5vdCB0byBzaG93IGFueXRoaW5nIG90aGVyIHRoYW4gY2xlYW51cHMKK2ZvciBjcnVmdHMuICBUaGVuIEkgY2FuIGZpbmFsbHkgY2xlYW4gdGhpbmdzIHVwOgorCisgICAgICAgICQgZ2l0IGJyYW5jaCAtRCB0b3BpYworICAgICAgICAkIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gOyMgbnVrZSBwcmV0ZW5kIG1lcmdlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvcGljQiIKKyAgICAgICAgICAgICAgIG8tLS1vLS0tby0tLW8tLS1vCisgICAgICAgICAgICAgIC8KKyAgICAgICAgICAgICAvby0tLW8tLS1vCisgICAgICAgICAgICB8LyAgICAgICAgInRvcGljQSIKKyAgICAgICAgby0tLW8ibWFzdGVyIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXR1cC1naXQtc2VydmVyLW92ZXItaHR0cC50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3NldHVwLWdpdC1zZXJ2ZXItb3Zlci1odHRwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDRlNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9ob3d0by9zZXR1cC1naXQtc2VydmVyLW92ZXItaHR0cC50eHQKQEAgLTAsMCArMSwyODUgQEAKK0Zyb206IFJ1dGdlciBOaWpsdW5zaW5nIDxydXRnZXJAbm9zcGFtLmNvbT4KK1N1YmplY3Q6IFNldHRpbmcgdXAgYSBHaXQgcmVwb3NpdG9yeSB3aGljaCBjYW4gYmUgcHVzaGVkIGludG8gYW5kIHB1bGxlZCBmcm9tIG92ZXIgSFRUUChTKS4KK0RhdGU6IFRodSwgMTAgQXVnIDIwMDYgMjI6MDA6MjYgKzAyMDAKK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gc2V0dXAgR2l0IHNlcnZlciBvdmVyIGh0dHAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOT1RFOiBUaGlzIGRvY3VtZW50IGlzIGZyb20gMjAwNi4gIEEgbG90IGhhcyBoYXBwZW5lZCBzaW5jZSB0aGVuLCBhbmQgdGhpcworZG9jdW1lbnQgaXMgbm93IHJlbGV2YW50IG1haW5seSBpZiB5b3VyIHdlYiBob3N0IGlzIG5vdCBDR0kgY2FwYWJsZS4KK0FsbW9zdCBldmVyeW9uZSBlbHNlIHNob3VsZCBpbnN0ZWFkIGxvb2sgYXQgbGlua2dpdDpnaXQtaHR0cC1iYWNrZW5kWzFdLgorCitTaW5jZSBBcGFjaGUgaXMgb25lIG9mIHRob3NlIHBhY2thZ2VzIHBlb3BsZSBsaWtlIHRvIGNvbXBpbGUKK3RoZW1zZWx2ZXMgd2hpbGUgb3RoZXJzIHByZWZlciB0aGUgYnVyZWF1Y3JhdCdzIGRyZWFtIERlYmlhbiwgaXQgaXMKK2ltcG9zc2libGUgdG8gZ2l2ZSBndWlkZWxpbmVzIHdoaWNoIHdpbGwgd29yayBmb3IgZXZlcnlvbmUuIEp1c3Qgc2VuZAorc29tZSBmZWVkYmFjayB0byB0aGUgbWFpbGluZyBsaXN0IGF0IGdpdEB2Z2VyLmtlcm5lbC5vcmcgdG8gZ2V0IHRoaXMKK2RvY3VtZW50IHRhaWxvcmVkIHRvIHlvdXIgZmF2b3JpdGUgZGlzdHJvLgorCisKK1doYXQncyBuZWVkZWQ6CisKKy0gSGF2ZSBhbiBBcGFjaGUgd2ViLXNlcnZlcgorCisgIE9uIERlYmlhbjoKKyAgICAkIGFwdC1nZXQgaW5zdGFsbCBhcGFjaGUyCisgICAgVG8gZ2V0IGFwYWNoZTIgYnkgZGVmYXVsdCBzdGFydGVkLAorICAgIGVkaXQgL2V0Yy9kZWZhdWx0L2FwYWNoZTIgYW5kIHNldCBOT19TVEFSVD0wCisKKy0gY2FuIGVkaXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgaXQuCisKKyAgVGhpcyBjb3VsZCBiZSBmb3VuZCB1bmRlciAvZXRjL2h0dHBkLCBvciByZWZlciB0byB5b3VyIEFwYWNoZSBkb2N1bWVudGF0aW9uLgorCisgIE9uIERlYmlhbjogdGhpcyBtZWFucyBiZWluZyBhYmxlIHRvIGVkaXQgZmlsZXMgdW5kZXIgL2V0Yy9hcGFjaGUyCisKKy0gY2FuIHJlc3RhcnQgaXQuCisKKyAgJ2FwYWNoZWN0bCAtLWdyYWNlZnVsJyBtaWdodCBkby4gSWYgaXQgZG9lc24ndCwganVzdCBzdG9wIGFuZAorICByZXN0YXJ0IGFwYWNoZS4gQmUgd2FybmluZyB0aGF0IGFjdGl2ZSBjb25uZWN0aW9ucyB0byB5b3VyIHNlcnZlcgorICBtaWdodCBiZSBhYm9ydGVkIGJ5IHRoaXMuCisKKyAgT24gRGViaWFuOgorICAgICQgL2V0Yy9pbml0LmQvYXBhY2hlMiByZXN0YXJ0CisgIG9yCisgICAgJCAvZXRjL2luaXQuZC9hcGFjaGUyIGZvcmNlLXJlbG9hZAorICAgICh3aGljaCBzZWVtcyB0byBkbyB0aGUgc2FtZSkKKyAgVGhpcyBhZGRzIHN5bWxpbmtzIGZyb20gdGhlIC9ldGMvYXBhY2hlMi9tb2RzLWVuYWJsZWQgdG8KKyAgL2V0Yy9hcGFjaGUyL21vZHMtYXZhaWxhYmxlLgorCistIGhhdmUgcGVybWlzc2lvbnMgdG8gY2hvd24gYSBkaXJlY3RvcnkKKworLSBoYXZlIEdpdCBpbnN0YWxsZWQgb24gdGhlIGNsaWVudCwgYW5kCisKKy0gZWl0aGVyIGhhdmUgR2l0IGluc3RhbGxlZCBvbiB0aGUgc2VydmVyIG9yIGhhdmUgYSB3ZWJkYXYgY2xpZW50IG9uCisgIHRoZSBjbGllbnQuCisKK0luIGVmZmVjdCwgdGhpcyBtZWFucyB5b3UncmUgZ29pbmcgdG8gYmUgcm9vdCwgb3IgdGhhdCB5b3UncmUgdXNpbmcgYQorcHJlY29uZmlndXJlZCBXZWJEQVYgc2VydmVyLgorCisKK1N0ZXAgMTogc2V0dXAgYSBiYXJlIEdpdCByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBdCB0aGUgdGltZSBvZiB3cml0aW5nLCBnaXQtaHR0cC1wdXNoIGNhbm5vdCByZW1vdGVseSBjcmVhdGUgYSBHaXQKK3JlcG9zaXRvcnkuIFNvIHdlIGhhdmUgdG8gZG8gdGhhdCBhdCB0aGUgc2VydmVyIHNpZGUgd2l0aCBHaXQuIEFub3RoZXIKK29wdGlvbiBpcyB0byBnZW5lcmF0ZSBhbiBlbXB0eSBiYXJlIHJlcG9zaXRvcnkgYXQgdGhlIGNsaWVudCBhbmQgY29weQoraXQgdG8gdGhlIHNlcnZlciB3aXRoIGEgV2ViREFWIGNsaWVudCAod2hpY2ggaXMgdGhlIG9ubHkgb3B0aW9uIGlmIEdpdAoraXMgbm90IGluc3RhbGxlZCBvbiB0aGUgc2VydmVyKS4KKworQ3JlYXRlIHRoZSBkaXJlY3RvcnkgdW5kZXIgdGhlIERvY3VtZW50Um9vdCBvZiB0aGUgZGlyZWN0b3JpZXMgc2VydmVkCitieSBBcGFjaGUuIEFzIGFuIGV4YW1wbGUgd2UgdGFrZSAvdXNyL2xvY2FsL2FwYWNoZTIsIGJ1dCB0cnkgImdyZXAKK0RvY3VtZW50Um9vdCAvd2hlcmUvZXZlci9odHRwZC5jb25mIiB0byBmaW5kIHlvdXIgcm9vdDoKKworICAgICQgY2QgL3Vzci9sb2NhbC9hcGFjaGUvaHRkb2NzCisgICAgJCBta2RpciBteS1uZXctcmVwby5naXQKKworICBPbiBEZWJpYW46CisKKyAgICAkIGNkIC92YXIvd3d3CisgICAgJCBta2RpciBteS1uZXctcmVwby5naXQKKworCitJbml0aWFsaXplIGEgYmFyZSByZXBvc2l0b3J5CisKKyAgICAkIGNkIG15LW5ldy1yZXBvLmdpdAorICAgICQgZ2l0IC0tYmFyZSBpbml0CisKKworQ2hhbmdlIHRoZSBvd25lcnNoaXAgdG8geW91ciB3ZWItc2VydmVyJ3MgY3JlZGVudGlhbHMuIFVzZSBgImdyZXAgXlVzZXIKK2h0dHBkLmNvbmYiYCBhbmQgYCJncmVwIF5Hcm91cCBodHRwZC5jb25mImAgdG8gZmluZCBvdXQ6CisKKyAgICAkIGNob3duIC1SIHd3dy53d3cgLgorCisgIE9uIERlYmlhbjoKKworICAgICQgY2hvd24gLVIgd3d3LWRhdGEud3d3LWRhdGEgLgorCisKK0lmIHlvdSBkbyBub3Qga25vdyB3aGljaCB1c2VyIEFwYWNoZSBydW5zIGFzLCB5b3UgY2FuIGFsdGVybmF0aXZlbHkgZG8KK2EgImNobW9kIC1SIGErdyAuIiwgaW5zcGVjdCB0aGUgZmlsZXMgd2hpY2ggYXJlIGNyZWF0ZWQgbGF0ZXIgb24sIGFuZAorc2V0IHRoZSBwZXJtaXNzaW9ucyBhcHByb3ByaWF0ZWx5LgorCitSZXN0YXJ0IGFwYWNoZTIsIGFuZCBjaGVjayB3aGV0aGVyIGh0dHA6Ly9zZXJ2ZXIvbXktbmV3LXJlcG8uZ2l0IGdpdmVzCithIGRpcmVjdG9yeSBsaXN0aW5nLiBJZiBub3QsIGNoZWNrIHdoZXRoZXIgYXBhY2hlIHN0YXJ0ZWQgdXAKK3N1Y2Nlc3NmdWxseS4KKworCitTdGVwIDI6IGVuYWJsZSBEQVYgb24gdGhpcyByZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpcnN0IG1ha2Ugc3VyZSB0aGUgZGF2X21vZHVsZSBpcyBsb2FkZWQuIEZvciB0aGlzLCBpbnNlcnQgaW4gaHR0cGQuY29uZjoKKworICAgIExvYWRNb2R1bGUgZGF2X21vZHVsZSBsaWJleGVjL2h0dHBkL2xpYmRhdi5zbworICAgIEFkZE1vZHVsZSBtb2RfZGF2LmMKKworQWxzbyBtYWtlIHN1cmUgdGhhdCB0aGlzIGxpbmUgZXhpc3RzIHdoaWNoIGlzIHRoZSBmaWxlIHVzZWQgZm9yCitsb2NraW5nIERBViBvcGVyYXRpb25zOgorCisgIERBVkxvY2tEQiAiL3Vzci9sb2NhbC9hcGFjaGUyL3RlbXAvREFWLmxvY2siCisKKyAgT24gRGViaWFuIHRoZXNlIHN0ZXBzIGNhbiBiZSBwZXJmb3JtZWQgd2l0aDoKKworICAgIEVuYWJsZSB0aGUgZGF2IGFuZCBkYXZfZnMgbW9kdWxlcyBvZiBhcGFjaGU6CisgICAgJCBhMmVubW9kIGRhdl9mcworICAgIChqdXN0IHRvIGJlIHN1cmUuIGRhdl9mcyBtaWdodCBiZSB1bm5lZWRlZCwgSSBkb24ndCBrbm93KQorICAgICQgYTJlbm1vZCBkYXYKKyAgICBUaGUgREFWIGxvY2sgaXMgbG9jYXRlZCBpbiAvZXRjL2FwYWNoZTIvbW9kcy1hdmFpbGFibGUvZGF2X2ZzLmNvbmY6CisgICAgICBEQVZMb2NrREIgL3Zhci9sb2NrL2FwYWNoZTIvREFWTG9jaworCitPZiBjb3Vyc2UsIGl0IGNhbiBwb2ludCBzb21ld2hlcmUgZWxzZSwgYnV0IHRoZSBzdHJpbmcgaXMgYWN0dWFsbHkganVzdCBhCitwcmVmaXggaW4gc29tZSBBcGFjaGUgY29uZmlndXJhdGlvbnMsIGFuZCB0aGVyZWZvcmUgdGhlIF9kaXJlY3RvcnlfIGhhcyB0bworYmUgd3JpdGFibGUgYnkgdGhlIHVzZXIgQXBhY2hlIHJ1bnMgYXMuCisKK1RoZW4sIGFkZCBzb21ldGhpbmcgbGlrZSB0aGlzIHRvIHlvdXIgaHR0cGQuY29uZgorCisgIDxMb2NhdGlvbiAvbXktbmV3LXJlcG8uZ2l0PgorICAgICBEQVYgb24KKyAgICAgQXV0aFR5cGUgQmFzaWMKKyAgICAgQXV0aE5hbWUgIkdpdCIKKyAgICAgQXV0aFVzZXJGaWxlIC91c3IvbG9jYWwvYXBhY2hlMi9jb25mL3Bhc3N3ZC5naXQKKyAgICAgUmVxdWlyZSB2YWxpZC11c2VyCisgIDwvTG9jYXRpb24+CisKKyAgT24gRGViaWFuOgorICAgIENyZWF0ZSAob3IgYWRkIHRvKSAvZXRjL2FwYWNoZTIvY29uZi5kL2dpdC5jb25mIDoKKworICAgIDxMb2NhdGlvbiAvbXktbmV3LXJlcG8uZ2l0PgorICAgICAgIERBViBvbgorICAgICAgIEF1dGhUeXBlIEJhc2ljCisgICAgICAgQXV0aE5hbWUgIkdpdCIKKyAgICAgICBBdXRoVXNlckZpbGUgL2V0Yy9hcGFjaGUyL3Bhc3N3ZC5naXQKKyAgICAgICBSZXF1aXJlIHZhbGlkLXVzZXIKKyAgICA8L0xvY2F0aW9uPgorCisgICAgRGViaWFuIGF1dG9tYXRpY2FsbHkgcmVhZHMgYWxsIGZpbGVzIHVuZGVyIC9ldGMvYXBhY2hlMi9jb25mLmQuCisKK1RoZSBwYXNzd29yZCBmaWxlIGNhbiBiZSBzb21ld2hlcmUgZWxzZSwgYnV0IGl0IGhhcyB0byBiZSByZWFkYWJsZSBieQorQXBhY2hlIGFuZCBwcmVmZXJhYmx5IG5vdCByZWFkYWJsZSBieSB0aGUgd29ybGQuCisKK0NyZWF0ZSB0aGlzIGZpbGUgYnkKKyAgICAkIGh0cGFzc3dkIC1jIC91c3IvbG9jYWwvYXBhY2hlMi9jb25mL3Bhc3N3ZC5naXQgPHVzZXI+CisKKyAgICBPbiBEZWJpYW46CisgICAgICAkIGh0cGFzc3dkIC1jIC9ldGMvYXBhY2hlMi9wYXNzd2QuZ2l0IDx1c2VyPgorCitZb3Ugd2lsbCBiZSBhc2tlZCBhIHBhc3N3b3JkLCBhbmQgdGhlIGZpbGUgaXMgY3JlYXRlZC4gU3Vic2VxdWVudCBjYWxscwordG8gaHRwYXNzd2Qgc2hvdWxkIG9taXQgdGhlICctYycgb3B0aW9uLCBzaW5jZSB5b3Ugd2FudCB0byBhcHBlbmQgdG8gdGhlCitleGlzdGluZyBmaWxlLgorCitZb3UgbmVlZCB0byByZXN0YXJ0IEFwYWNoZS4KKworTm93IGdvIHRvIGh0dHA6Ly88dXNlcm5hbWU+QDxzZXJ2ZXJuYW1lPi9teS1uZXctcmVwby5naXQgaW4geW91cgorYnJvd3NlciB0byBjaGVjayB3aGV0aGVyIGl0IGFza3MgZm9yIGEgcGFzc3dvcmQgYW5kIGFjY2VwdHMgdGhlIHJpZ2h0CitwYXNzd29yZC4KKworT24gRGViaWFuOgorCisgICBUbyB0ZXN0IHRoZSBXZWJEQVYgcGFydCwgZG86CisKKyAgICQgYXB0LWdldCBpbnN0YWxsIGxpdG11cworICAgJCBsaXRtdXMgaHR0cDovLzxzZXJ2ZXJuYW1lPi9teS1uZXctcmVwby5naXQgPHVzZXJuYW1lPiA8cGFzc3dvcmQ+CisKKyAgIE1vc3QgdGVzdHMgc2hvdWxkIHBhc3MuCisKK0EgY29tbWFuZC1saW5lIHRvb2wgdG8gdGVzdCBXZWJEQVYgaXMgY2FkYXZlci4gSWYgeW91IHByZWZlciBHVUlzLCBmb3IKK2V4YW1wbGUsIGtvbnF1ZXJvciBjYW4gb3BlbiBXZWJEQVYgVVJMcyBhcyAid2ViZGF2Oi8vLi4uIiBvcgorIndlYmRhdnM6Ly8uLi4iLgorCitJZiB5b3UncmUgaW50byBXaW5kb3dzLCBmcm9tIFhQIG9ud2FyZHMgSW50ZXJuZXQgRXhwbG9yZXIgc3VwcG9ydHMKK1dlYkRBVi4gRm9yIHRoaXMsIGRvIEludGVybmV0IEV4cGxvcmVyIC0+IE9wZW4gTG9jYXRpb24gLT4KK2h0dHA6Ly88c2VydmVybmFtZT4vbXktbmV3LXJlcG8uZ2l0IFt4XSBPcGVuIGFzIHdlYmZvbGRlciAtPiBsb2dpbiAuCisKKworU3RlcCAzOiBzZXR1cCB0aGUgY2xpZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgSFRUUCBzdXBwb3J0LCBpLmUuIHlvdXIgR2l0IHdhcyBidWlsdCB3aXRoCitsaWJjdXJsICh2ZXJzaW9uIG1vcmUgcmVjZW50IHRoYW4gNy4xMCkuIFRoZSBjb21tYW5kICdnaXQgaHR0cC1wdXNoJyB3aXRoCitubyBhcmd1bWVudCBzaG91bGQgZGlzcGxheSBhIHVzYWdlIG1lc3NhZ2UuCisKK1RoZW4sIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgJEhPTUUvLm5ldHJjICh5b3UgY2FuIGRvIHdpdGhvdXQsIGJ1dCB3aWxsIGJlCithc2tlZCB0byBpbnB1dCB5b3VyIHBhc3N3b3JkIGEgX2xvdF8gb2YgdGltZXMpOgorCisgICAgbWFjaGluZSA8c2VydmVybmFtZT4KKyAgICBsb2dpbiA8dXNlcm5hbWU+CisgICAgcGFzc3dvcmQgPHBhc3N3b3JkPgorCisuLi5hbmQgc2V0IHBlcm1pc3Npb25zOgorICAgICBjaG1vZCA2MDAgfi8ubmV0cmMKKworSWYgeW91IHdhbnQgdG8gYWNjZXNzIHRoZSB3ZWItc2VydmVyIGJ5IGl0cyBJUCwgeW91IGhhdmUgdG8gdHlwZSB0aGF0IGluLAoraW5zdGVhZCBvZiB0aGUgc2VydmVyIG5hbWUuCisKK1RvIGNoZWNrIHdoZXRoZXIgYWxsIGlzIE9LLCBkbzoKKworICAgY3VybCAtLW5ldHJjIC0tbG9jYXRpb24gLXYgaHR0cDovLzx1c2VybmFtZT5APHNlcnZlcm5hbWU+L215LW5ldy1yZXBvLmdpdC9IRUFECisKKy4uLnRoaXMgc2hvdWxkIGdpdmUgc29tZXRoaW5nIGxpa2UgJ3JlZjogcmVmcy9oZWFkcy9tYXN0ZXInLCB3aGljaCBpcwordGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgSEVBRCBvbiB0aGUgc2VydmVyLgorCitOb3csIGFkZCB0aGUgcmVtb3RlIGluIHlvdXIgZXhpc3RpbmcgcmVwb3NpdG9yeSB3aGljaCBjb250YWlucyB0aGUgcHJvamVjdAoreW91IHdhbnQgdG8gZXhwb3J0OgorCisgICAkIGdpdC1jb25maWcgcmVtb3RlLnVwbG9hZC51cmwgXAorICAgICAgIGh0dHA6Ly88dXNlcm5hbWU+QDxzZXJ2ZXJuYW1lPi9teS1uZXctcmVwby5naXQvCisKK0l0IGlzIGltcG9ydGFudCB0byBwdXQgdGhlIGxhc3QgJy8nOyBXaXRob3V0IGl0LCB0aGUgc2VydmVyIHdpbGwgc2VuZAorYSByZWRpcmVjdCB3aGljaCBnaXQtaHR0cC1wdXNoIGRvZXMgbm90ICh5ZXQpIHVuZGVyc3RhbmQsIGFuZCBnaXQtaHR0cC1wdXNoCit3aWxsIHJlcGVhdCB0aGUgcmVxdWVzdCBpbmZpbml0ZWx5LgorCisKK1N0ZXAgNDogbWFrZSB0aGUgaW5pdGlhbCBwdXNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcm9tIHlvdXIgY2xpZW50IHJlcG9zaXRvcnksIGRvCisKKyAgICQgZ2l0IHB1c2ggdXBsb2FkIG1hc3RlcgorCitUaGlzIHB1c2hlcyBicmFuY2ggJ21hc3RlcicgKHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgdGhlIGJyYW5jaCB5b3UKK3dhbnQgdG8gZXhwb3J0KSB0byByZXBvc2l0b3J5IGNhbGxlZCAndXBsb2FkJywgd2hpY2ggd2UgcHJldmlvdXNseQorZGVmaW5lZCB3aXRoIGdpdC1jb25maWcuCisKKworVXNpbmcgYSBwcm94eToKKy0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBoYXZlIHRvIGFjY2VzcyB0aGUgV2ViREFWIHNlcnZlciBmcm9tIGJlaGluZCBhbiBIVFRQKFMpIHByb3h5LAorc2V0IHRoZSB2YXJpYWJsZSAnYWxsX3Byb3h5JyB0byAnaHR0cDovL3Byb3h5LWhvc3QuY29tOnBvcnQnLCBvcgorJ2h0dHA6Ly9sb2dpbi1vbi1wcm94eTpwYXNzd2Qtb24tcHJveHlAcHJveHktaG9zdC5jb206cG9ydCcuIFNlZSAnbWFuCitjdXJsJyBmb3IgZGV0YWlscy4KKworCitUcm91Ymxlc2hvb3Rpbmc6CistLS0tLS0tLS0tLS0tLS0tCisKK0lmIGdpdC1odHRwLXB1c2ggc2F5cworCisgICBFcnJvcjogbm8gREFWIGxvY2tpbmcgc3VwcG9ydCBvbiByZW1vdGUgcmVwbyBodHRwOi8vLi4uCisKK3RoZW4gaXQgbWVhbnMgdGhlIHdlYi1zZXJ2ZXIgZGlkIG5vdCBhY2NlcHQgeW91ciBhdXRoZW50aWNhdGlvbi4gTWFrZSBzdXJlCit0aGF0IHRoZSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkIG1hdGNoZXMgaW4gaHR0cGQuY29uZiwgLm5ldHJjIGFuZCB0aGUgVVJMCit5b3UgYXJlIHVwbG9hZGluZyB0by4KKworSWYgZ2l0LWh0dHAtcHVzaCBzaG93cyB5b3UgYW4gZXJyb3IgKDIyLzUwMikgd2hlbiB0cnlpbmcgdG8gTU9WRSBhIGJsb2IsCitpdCBtZWFucyB0aGF0IHlvdXIgd2ViLXNlcnZlciBzb21laG93IGRvZXMgbm90IHJlY29nbml6ZSBpdHMgbmFtZSBpbiB0aGUKK3JlcXVlc3Q7IFRoaXMgY2FuIGhhcHBlbiB3aGVuIHlvdSBzdGFydCBBcGFjaGUsIGJ1dCB0aGVuIGRpc2FibGUgdGhlCituZXR3b3JrIGludGVyZmFjZS4gQSBzaW1wbGUgcmVzdGFydCBvZiBBcGFjaGUgaGVscHMuCisKK0Vycm9ycyBsaWtlICgyMi81MDIpIGFyZSBvZiBmb3JtYXQgKGN1cmwgZXJyb3IgY29kZS9odHRwIGVycm9yCitjb2RlKS4gU28gKDIyLzQwNCkgbWVhbnMgc29tZXRoaW5nIGxpa2UgJ25vdCBmb3VuZCcgYXQgdGhlIHNlcnZlci4KKworUmVhZGluZyAvdXNyL2xvY2FsL2FwYWNoZTIvbG9ncy9lcnJvcl9sb2cgaXMgb2Z0ZW4gaGVscGZ1bC4KKworICBPbiBEZWJpYW46IFJlYWQgL3Zhci9sb2cvYXBhY2hlMi9lcnJvci5sb2cgaW5zdGVhZC4KKworSWYgeW91IGFjY2VzcyBIVFRQUyBsb2NhdGlvbnMsIEdpdCBtYXkgZmFpbCB2ZXJpZnlpbmcgdGhlIFNTTAorY2VydGlmaWNhdGUgKHRoaXMgaXMgcmV0dXJuIGNvZGUgNjApLiBTZXR0aW5nIGh0dHAuc3NsVmVyaWZ5PWZhbHNlIGNhbgoraGVscCBkaWFnbm9zaW5nIHRoZSBwcm9ibGVtLCBidXQgcmVtb3ZlcyBzZWN1cml0eSBjaGVja3MuCisKKworRGViaWFuIFJlZmVyZW5jZXM6IGh0dHA6Ly93d3cuZGViaWFuLWFkbWluaXN0cmF0aW9uLm9yZy9hcnRpY2xlcy8yODUKKworQXV0aG9ycworICBKb2hhbm5lcyBTY2hpbmRlbGluIDxKb2hhbm5lcy5TY2hpbmRlbGluQGdteC5kZT4KKyAgUnV0Z2VyIE5pamx1bnNpbmcgPGdpdEB3aW5nZGluZy5kZW1vbi5ubD4KKyAgTWF0dGhpZXUgTW95IDxNYXR0aGlldS5Nb3lAaW1hZy5mcj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vdXBkYXRlLWhvb2stZXhhbXBsZS50eHQgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MTkzYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2hvd3RvL3VwZGF0ZS1ob29rLWV4YW1wbGUudHh0CkBAIC0wLDAgKzEsMTkyIEBACitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IGFuZCBDYXJsIEJhbGR3aW4gPGNuYkBmYy5ocC5jb20+CitTdWJqZWN0OiBjb250cm9sIGFjY2VzcyB0byBicmFuY2hlcy4KK0RhdGU6IFRodSwgMTcgTm92IDIwMDUgMjM6NTU6MzIgLTA4MDAKK01lc3NhZ2UtSUQ6IDw3dmZ5cHVtbHUzLmZzZkBhc3NpZ25lZC1ieS1kaGNwLmNveC5uZXQ+CitBYnN0cmFjdDogQW4gZXhhbXBsZSBob29rcy91cGRhdGUgc2NyaXB0IGlzIHByZXNlbnRlZCB0bworIGltcGxlbWVudCByZXBvc2l0b3J5IG1haW50ZW5hbmNlIHBvbGljaWVzLCBzdWNoIGFzIHdobyBjYW4gcHVzaAorIGludG8gd2hpY2ggYnJhbmNoIGFuZCB3aG8gY2FuIG1ha2UgYSB0YWcuCitDb250ZW50LXR5cGU6IHRleHQvYXNjaWlkb2MKKworSG93IHRvIHVzZSB0aGUgdXBkYXRlIGhvb2sKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doZW4geW91ciBkZXZlbG9wZXIgcnVucyBnaXQtcHVzaCBpbnRvIHRoZSByZXBvc2l0b3J5LAorZ2l0LXJlY2VpdmUtcGFjayBpcyBydW4gKGVpdGhlciBsb2NhbGx5IG9yIG92ZXIgc3NoKSBhcyB0aGF0CitkZXZlbG9wZXIsIHNvIGlzIGhvb2tzL3VwZGF0ZSBzY3JpcHQuICBRdW90aW5nIGZyb20gdGhlIHJlbGV2YW50CitzZWN0aW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uOgorCisgICAgQmVmb3JlIGVhY2ggcmVmIGlzIHVwZGF0ZWQsIGlmICRHSVRfRElSL2hvb2tzL3VwZGF0ZSBmaWxlIGV4aXN0cworICAgIGFuZCBleGVjdXRhYmxlLCBpdCBpcyBjYWxsZWQgd2l0aCB0aHJlZSBwYXJhbWV0ZXJzOgorCisgICAgICAgICAgICRHSVRfRElSL2hvb2tzL3VwZGF0ZSByZWZuYW1lIHNoYTEtb2xkIHNoYTEtbmV3CisKKyAgICBUaGUgcmVmbmFtZSBwYXJhbWV0ZXIgaXMgcmVsYXRpdmUgdG8gJEdJVF9ESVI7IGUuZy4gZm9yIHRoZQorICAgIG1hc3RlciBoZWFkIHRoaXMgaXMgInJlZnMvaGVhZHMvbWFzdGVyIi4gIFR3byBzaGExIGFyZSB0aGUKKyAgICBvYmplY3QgbmFtZXMgZm9yIHRoZSByZWZuYW1lIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHVwZGF0ZS4gIE5vdGUKKyAgICB0aGF0IHRoZSBob29rIGlzIGNhbGxlZCBiZWZvcmUgdGhlIHJlZm5hbWUgaXMgdXBkYXRlZCwgc28gZWl0aGVyCisgICAgc2hhMS1vbGQgaXMgMHs0MH0gKG1lYW5pbmcgdGhlcmUgaXMgbm8gc3VjaCByZWYgeWV0KSwgb3IgaXQKKyAgICBzaG91bGQgbWF0Y2ggd2hhdCBpcyByZWNvcmRlZCBpbiByZWZuYW1lLgorCitTbyBpZiB5b3VyIHBvbGljeSBpcyAoMSkgYWx3YXlzIHJlcXVpcmUgZmFzdC1mb3J3YXJkIHB1c2gKKyhpLmUuIG5ldmVyIGFsbG93ICJnaXQtcHVzaCByZXBvICticmFuY2g6YnJhbmNoIiksICgyKSB5b3UKK2hhdmUgYSBsaXN0IG9mIHVzZXJzIGFsbG93ZWQgdG8gdXBkYXRlIGVhY2ggYnJhbmNoLCBhbmQgKDMpIHlvdQorZG8gbm90IGxldCB0YWdzIHRvIGJlIG92ZXJ3cml0dGVuLCB0aGVuIHlvdSBjYW4gdXNlIHNvbWV0aGluZworbGlrZSB0aGlzIGFzIHlvdXIgaG9va3MvdXBkYXRlIHNjcmlwdC4KKworW2pjOiBlZGl0b3JpYWwgbm90ZS4gIFRoaXMgaXMgYSBtdWNoIGltcHJvdmVkIHZlcnNpb24gYnkgQ2FybAorc2luY2UgSSBwb3N0ZWQgdGhlIG9yaWdpbmFsIG91dGxpbmVdCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMhL2Jpbi9iYXNoCisKK3VtYXNrIDAwMgorCisjIElmIHlvdSBhcmUgaGF2aW5nIHRyb3VibGUgd2l0aCB0aGlzIGFjY2VzcyBjb250cm9sIGhvb2sgc2NyaXB0CisjIHlvdSBjYW4gdHJ5IHNldHRpbmcgdGhpcyB0byB0cnVlLiAgSXQgd2lsbCB0ZWxsIHlvdSBleGFjdGx5CisjIHdoeSBhIHVzZXIgaXMgYmVpbmcgYWxsb3dlZC9kZW5pZWQgYWNjZXNzLgorCit2ZXJib3NlPWZhbHNlCisKKyMgRGVmYXVsdCBzaGVsbCBnbG9iYmluZyBtZXNzZXMgdGhpbmdzIHVwIGRvd25zdHJlYW0KK0dMT0JJR05PUkU9KgorCitmdW5jdGlvbiBncmFudCB7CisgICR2ZXJib3NlICYmIGVjaG8gPiYyICItR3JhbnQtCQkkMSIKKyAgZWNobyBncmFudAorICBleGl0IDAKK30KKworZnVuY3Rpb24gZGVueSB7CisgICR2ZXJib3NlICYmIGVjaG8gPiYyICItRGVueS0JCSQxIgorICBlY2hvIGRlbnkKKyAgZXhpdCAxCit9CisKK2Z1bmN0aW9uIGluZm8geworICAkdmVyYm9zZSAmJiBlY2hvID4mMiAiLUluZm8tCQkkMSIKK30KKworIyBJbXBsZW1lbnQgZ2VuZXJpYyBicmFuY2ggYW5kIHRhZyBwb2xpY2llcy4KKyMgLSBUYWdzIHNob3VsZCBub3QgYmUgdXBkYXRlZCBvbmNlIGNyZWF0ZWQuCisjIC0gQnJhbmNoZXMgc2hvdWxkIG9ubHkgYmUgZmFzdC1mb3J3YXJkZWQgdW5sZXNzIHRoZWlyIHBhdHRlcm4gc3RhcnRzIHdpdGggJysnCitjYXNlICIkMSIgaW4KKyAgcmVmcy90YWdzLyopCisgICAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAiJDEiICYmCisgICAgZGVueSA+L2Rldi9udWxsICJZb3UgY2FuJ3Qgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIHRhZyIKKyAgICA7OworICByZWZzL2hlYWRzLyopCisgICAgIyBObyByZWJhc2luZyBvciByZXdpbmRpbmcKKyAgICBpZiBleHByICIkMiIgOiAnMCokJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBpbmZvICJUaGUgYnJhbmNoICckMScgaXMgbmV3Li4uIgorICAgIGVsc2UKKyAgICAgICMgdXBkYXRpbmcgLS0gbWFrZSBzdXJlIGl0IGlzIGEgZmFzdC1mb3J3YXJkCisgICAgICBtYj0kKGdpdC1tZXJnZS1iYXNlICIkMiIgIiQzIikKKyAgICAgIGNhc2UgIiRtYiwkMiIgaW4KKyAgICAgICAgIiQyLCRtYiIpIGluZm8gIlVwZGF0ZSBpcyBmYXN0LWZvcndhcmQiIDs7CisJKikJICBub2ZmPXk7IGluZm8gIlRoaXMgaXMgbm90IGEgZmFzdC1mb3J3YXJkIHVwZGF0ZS4iOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgICopCisgICAgZGVueSA+L2Rldi9udWxsIFwKKyAgICAiQnJhbmNoIGlzIG5vdCB1bmRlciByZWZzL2hlYWRzIG9yIHJlZnMvdGFncy4gIFdoYXQgYXJlIHlvdSB0cnlpbmcgdG8gZG8/IgorICAgIDs7Citlc2FjCisKKyMgSW1wbGVtZW50IHBlci1icmFuY2ggY29udHJvbHMgYmFzZWQgb24gdXNlcm5hbWUKK2FsbG93ZWRfdXNlcnNfZmlsZT0kR0lUX0RJUi9pbmZvL2FsbG93ZWQtdXNlcnMKK3VzZXJuYW1lPSQoaWQgLXUgLW4pCitpbmZvICJUaGUgdXNlciBpczogJyR1c2VybmFtZSciCisKK2lmIHRlc3QgLWYgIiRhbGxvd2VkX3VzZXJzX2ZpbGUiCit0aGVuCisgIHJjPSQoY2F0ICRhbGxvd2VkX3VzZXJzX2ZpbGUgfCBncmVwIC12ICdeIycgfCBncmVwIC12ICdeJCcgfAorICAgIHdoaWxlIHJlYWQgaGVhZHMgdXNlcl9wYXR0ZXJucworICAgIGRvCisgICAgICAjIGRvZXMgdGhpcyBydWxlIGFwcGx5IHRvIHVzPworICAgICAgaGVhZF9wYXR0ZXJuPSR7aGVhZHMjK30KKyAgICAgIG1hdGNobGVuPSQoZXhwciAiJDEiIDogIiR7aGVhZF9wYXR0ZXJuIyt9IikKKyAgICAgIHRlc3QgIiRtYXRjaGxlbiIgPSAkeyMxfSB8fCBjb250aW51ZQorCisgICAgICAjIGlmIG5vbi1mZiwgJGhlYWRzIG11c3QgYmUgd2l0aCB0aGUgJysnIHByZWZpeAorICAgICAgdGVzdCAtbiAiJG5vZmYiICYmCisgICAgICB0ZXN0ICIkaGVhZF9wYXR0ZXJuIiA9ICIkaGVhZHMiICYmIGNvbnRpbnVlCisKKyAgICAgIGluZm8gIkZvdW5kIG1hdGNoaW5nIGhlYWQgcGF0dGVybjogJyRoZWFkX3BhdHRlcm4nIgorICAgICAgZm9yIHVzZXJfcGF0dGVybiBpbiAkdXNlcl9wYXR0ZXJuczsgZG8KKyAgICAgICAgaW5mbyAiQ2hlY2tpbmcgdXNlcjogJyR1c2VybmFtZScgYWdhaW5zdCBwYXR0ZXJuOiAnJHVzZXJfcGF0dGVybiciCisgICAgICAgIG1hdGNobGVuPSQoZXhwciAiJHVzZXJuYW1lIiA6ICIkdXNlcl9wYXR0ZXJuIikKKyAgICAgICAgaWYgdGVzdCAiJG1hdGNobGVuIiA9ICIkeyN1c2VybmFtZX0iCisgICAgICAgIHRoZW4KKyAgICAgICAgICBncmFudCAiQWxsb3dpbmcgdXNlcjogJyR1c2VybmFtZScgd2l0aCBwYXR0ZXJuOiAnJHVzZXJfcGF0dGVybiciCisgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBkZW55ICJUaGUgdXNlciBpcyBub3QgaW4gdGhlIGFjY2VzcyBsaXN0IGZvciB0aGlzIGJyYW5jaCIKKyAgICBkb25lCisgICkKKyAgY2FzZSAiJHJjIiBpbgorICAgIGdyYW50KSBncmFudCA+L2Rldi9udWxsICJHcmFudGluZyBhY2Nlc3MgYmFzZWQgb24gJGFsbG93ZWRfdXNlcnNfZmlsZSIgOzsKKyAgICBkZW55KSAgZGVueSAgPi9kZXYvbnVsbCAiRGVueWluZyAgYWNjZXNzIGJhc2VkIG9uICRhbGxvd2VkX3VzZXJzX2ZpbGUiIDs7CisgICAgKikgOzsKKyAgZXNhYworZmkKKworYWxsb3dlZF9ncm91cHNfZmlsZT0kR0lUX0RJUi9pbmZvL2FsbG93ZWQtZ3JvdXBzCitncm91cHM9JChpZCAtRyAtbikKK2luZm8gIlRoZSB1c2VyIGJlbG9uZ3MgdG8gdGhlIGZvbGxvd2luZyBncm91cHM6IgoraW5mbyAiJyRncm91cHMnIgorCitpZiB0ZXN0IC1mICIkYWxsb3dlZF9ncm91cHNfZmlsZSIKK3RoZW4KKyAgcmM9JChjYXQgJGFsbG93ZWRfZ3JvdXBzX2ZpbGUgfCBncmVwIC12ICdeIycgfCBncmVwIC12ICdeJCcgfAorICAgIHdoaWxlIHJlYWQgaGVhZHMgZ3JvdXBfcGF0dGVybnMKKyAgICBkbworICAgICAgIyBkb2VzIHRoaXMgcnVsZSBhcHBseSB0byB1cz8KKyAgICAgIGhlYWRfcGF0dGVybj0ke2hlYWRzIyt9CisgICAgICBtYXRjaGxlbj0kKGV4cHIgIiQxIiA6ICIke2hlYWRfcGF0dGVybiMrfSIpCisgICAgICB0ZXN0ICIkbWF0Y2hsZW4iID0gJHsjMX0gfHwgY29udGludWUKKworICAgICAgIyBpZiBub24tZmYsICRoZWFkcyBtdXN0IGJlIHdpdGggdGhlICcrJyBwcmVmaXgKKyAgICAgIHRlc3QgLW4gIiRub2ZmIiAmJgorICAgICAgdGVzdCAiJGhlYWRfcGF0dGVybiIgPSAiJGhlYWRzIiAmJiBjb250aW51ZQorCisgICAgICBpbmZvICJGb3VuZCBtYXRjaGluZyBoZWFkIHBhdHRlcm46ICckaGVhZF9wYXR0ZXJuJyIKKyAgICAgIGZvciBncm91cF9wYXR0ZXJuIGluICRncm91cF9wYXR0ZXJuczsgZG8KKyAgICAgICAgZm9yIGdyb3VwbmFtZSBpbiAkZ3JvdXBzOyBkbworICAgICAgICAgIGluZm8gIkNoZWNraW5nIGdyb3VwOiAnJGdyb3VwbmFtZScgYWdhaW5zdCBwYXR0ZXJuOiAnJGdyb3VwX3BhdHRlcm4nIgorICAgICAgICAgIG1hdGNobGVuPSQoZXhwciAiJGdyb3VwbmFtZSIgOiAiJGdyb3VwX3BhdHRlcm4iKQorICAgICAgICAgIGlmIHRlc3QgIiRtYXRjaGxlbiIgPSAiJHsjZ3JvdXBuYW1lfSIKKyAgICAgICAgICB0aGVuCisgICAgICAgICAgICBncmFudCAiQWxsb3dpbmcgZ3JvdXA6ICckZ3JvdXBuYW1lJyB3aXRoIHBhdHRlcm46ICckZ3JvdXBfcGF0dGVybiciCisgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgZG9uZQorICAgICAgZGVueSAiTm9uZSBvZiB0aGUgdXNlcidzIGdyb3VwcyBhcmUgaW4gdGhlIGFjY2VzcyBsaXN0IGZvciB0aGlzIGJyYW5jaCIKKyAgICBkb25lCisgICkKKyAgY2FzZSAiJHJjIiBpbgorICAgIGdyYW50KSBncmFudCA+L2Rldi9udWxsICJHcmFudGluZyBhY2Nlc3MgYmFzZWQgb24gJGFsbG93ZWRfZ3JvdXBzX2ZpbGUiIDs7CisgICAgZGVueSkgIGRlbnkgID4vZGV2L251bGwgIkRlbnlpbmcgIGFjY2VzcyBiYXNlZCBvbiAkYWxsb3dlZF9ncm91cHNfZmlsZSIgOzsKKyAgICAqKSA7OworICBlc2FjCitmaQorCitkZW55ID4vZGV2L251bGwgIlRoZXJlIGFyZSBubyBtb3JlIHJ1bGVzIHRvIGNoZWNrLiAgRGVueWluZyBhY2Nlc3MiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdXNlcyB0d28gZmlsZXMsICRHSVRfRElSL2luZm8vYWxsb3dlZC11c2VycyBhbmQKK2FsbG93ZWQtZ3JvdXBzLCB0byBkZXNjcmliZSB3aGljaCBoZWFkcyBjYW4gYmUgcHVzaGVkIGludG8gYnkKK3dob20uICBUaGUgZm9ybWF0IG9mIGVhY2ggZmlsZSB3b3VsZCBsb29rIGxpa2UgdGhpczoKKworICAgIHJlZnMvaGVhZHMvbWFzdGVyICAganVuaW8KKyAgICArcmVmcy9oZWFkcy9wdSAgICAgIGp1bmlvCisgICAgcmVmcy9oZWFkcy9jb2dpdG8kICBwYXNreQorICAgIHJlZnMvaGVhZHMvYncvLiogICAgbGludXMKKyAgICByZWZzL2hlYWRzL3RtcC8uKiAgIC4qCisgICAgcmVmcy90YWdzL3ZbMC05XS4qICBqdW5pbworCitXaXRoIHRoaXMsIExpbnVzIGNhbiBwdXNoIG9yIGNyZWF0ZSAiYncvcGVuZ3VpbiIgb3IgImJ3L3plYnJhIgorb3IgImJ3L3BhbmRhIiBicmFuY2hlcywgUGFza3kgY2FuIGRvIG9ubHkgImNvZ2l0byIsIGFuZCBKQyBjYW4KK2RvIG1hc3RlciBhbmQgcHUgYnJhbmNoZXMgYW5kIG1ha2UgdmVyc2lvbmVkIHRhZ3MuICBBbmQgYW55Ym9keQorY2FuIGRvIHRtcC9ibGFoIGJyYW5jaGVzLiBUaGUgJysnIHNpZ24gYXQgdGhlIHB1IHJlY29yZCBtZWFucwordGhhdCBKQyBjYW4gbWFrZSBub24tZmFzdC1mb3J3YXJkIHB1c2hlcyBvbiBpdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vdXNlLWdpdC1kYWVtb24udHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by91c2UtZ2l0LWRhZW1vbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FmMmU1MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vdXNlLWdpdC1kYWVtb24udHh0CkBAIC0wLDAgKzEsNTQgQEAKK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gdXNlIGdpdC1kYWVtb24KKz09PT09PT09PT09PT09PT09PT09PQorCitHaXQgY2FuIGJlIHJ1biBpbiBpbmV0ZCBtb2RlIGFuZCBpbiBzdGFuZCBhbG9uZSBtb2RlLiBCdXQgYWxsIHlvdSB3YW50IGlzCitsZXQgYSBjb3dvcmtlciBwdWxsIGZyb20geW91LCBhbmQgdGhlcmVmb3JlIG5lZWQgdG8gc2V0IHVwIGEgR2l0IHNlcnZlcgorcmVhbCBxdWljaywgcmlnaHQ/CisKK05vdGUgdGhhdCBnaXQtZGFlbW9uIGlzIG5vdCByZWFsbHkgY2hhdHR5IGF0IHRoZSBtb21lbnQsIGVzcGVjaWFsbHkgd2hlbgordGhpbmdzIGRvIG5vdCBnbyBhY2NvcmRpbmcgdG8gcGxhbiAoZS5nLiBhIHNvY2tldCBjb3VsZCBub3QgYmUgYm91bmQpLgorCitBbm90aGVyIHdvcmQgb2Ygd2FybmluZzogaWYgeW91IHJ1bgorCisJJCBnaXQgbHMtcmVtb3RlIGdpdDovLzEyNy4wLjAuMS9ydWxlLXRoZS13b3JsZC5naXQKKworYW5kIHlvdSBzZWUgYSBtZXNzYWdlIGxpa2UKKworCWZhdGFsOiBUaGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseQorCitpdCBvbmx5IG1lYW5zIHRoYXQgX3NvbWV0aGluZ18gd2VudCB3cm9uZy4gVG8gZmluZCBvdXQgX3doYXRfIHdlbnQgd3JvbmcsCit5b3UgaGF2ZSB0byBhc2sgdGhlIHNlcnZlci4gKEdpdCByZWZ1c2VzIHRvIGJlIG1vcmUgcHJlY2lzZSBmb3IgeW91cgorc2VjdXJpdHkgb25seS4gVGFrZSBvZmYgeW91ciBzaG9lcyBub3cuIFlvdSBoYXZlIGFueSBjb2lucyBpbiB5b3VyIHBvY2tldHM/CitTb3JyeSwgbm90IGFsbG93ZWQgLS0gd2hvIGtub3dzIHdoYXQgeW91IHBsYW5uZWQgdG8gZG8gd2l0aCB0aGVtPykKKworV2l0aCB0aGVzZSB0d28gY2F2ZWF0cywgbGV0J3Mgc2VlIGFuIGV4YW1wbGU6CisKKwkkIGdpdCBkYWVtb24gLS1yZXVzZWFkZHIgLS12ZXJib3NlIC0tYmFzZS1wYXRoPS9ob21lL2dpdHRlL2dpdCBcCisJICAtLWV4cG9ydC1hbGwgLS0gL2hvbWUvZ2l0dGUvZ2l0L3J1bGUtdGhlLXdvcmxkLmdpdAorCisoT2YgY291cnNlLCB1bmxlc3MgeW91ciB1c2VyIG5hbWUgaXMgYGdpdHRlYCBfYW5kXyB5b3VyIHJlcG9zaXRvcnkgaXMgaW4KK34vcnVsZS10aGUtd29ybGQuZ2l0LCB5b3UgaGF2ZSB0byBhZGp1c3QgdGhlIHBhdGhzLiBJZiB5b3VyIHJlcG9zaXRvcnkgaXMKK25vdCBiYXJlLCBiZSBhd2FyZSB0aGF0IHlvdSBoYXZlIHRvIHR5cGUgdGhlIHBhdGggdG8gdGhlIC5naXQgZGlyZWN0b3J5ISkKKworVGhpcyBpbnZvY2F0aW9uIHRyaWVzIHRvIHJldXNlIHRoZSBhZGRyZXNzIGlmIGl0IGlzIGFscmVhZHkgdGFrZW4KKyh0aGlzIGNhbiBzYXZlIHlvdSBzb21lIGRlYnVnZ2luZywgYmVjYXVzZSBvdGhlcndpc2Uga2lsbGluZyBhbmQgcmVzdGFydGluZworZ2l0LWRhZW1vbiBjb3VsZCBqdXN0IHNpbGVudGx5IGZhaWwgdG8gYmluZCB0byBhIHNvY2tldCkuCisKK0Fsc28sIGl0IGlzIChyZWxhdGl2ZWx5KSB2ZXJib3NlIHdoZW4gc29tZWJvZHkgYWN0dWFsbHkgY29ubmVjdHMgdG8gaXQuCitJdCBhbHNvIHNldHMgdGhlIGJhc2UgcGF0aCwgd2hpY2ggbWVhbnMgdGhhdCBhbGwgdGhlIHByb2plY3RzIHdoaWNoIGNhbiBiZQorYWNjZXNzZWQgdXNpbmcgdGhpcyBkYWVtb24gaGF2ZSB0byByZXNpZGUgaW4gb3IgdW5kZXIgdGhhdCBwYXRoLgorCitUaGUgb3B0aW9uIGAtLWV4cG9ydC1hbGxgIGp1c3QgbWVhbnMgdGhhdCB5b3UgX2Rvbid0XyBoYXZlIHRvIGNyZWF0ZSBhCitmaWxlIG5hbWVkIGBnaXQtZGFlbW9uLWV4cG9ydC1va2AgaW4gZWFjaCBleHBvcnRlZCByZXBvc2l0b3J5LiAoT3RoZXJ3aXNlLAorZ2l0LWRhZW1vbiB3b3VsZCBjb21wbGFpbiBsb3VkbHksIGFuZCByZWZ1c2UgdG8gY29vcGVyYXRlLikKKworTGFzdCBvZiBhbGwsIHRoZSByZXBvc2l0b3J5IHdoaWNoIHNob3VsZCBiZSBleHBvcnRlZCBpcyBzcGVjaWZpZWQuIEl0IGlzCithIGdvb2QgcHJhY3RpY2UgdG8gcHV0IHRoZSBwYXRocyBhZnRlciBhICItLSIgc2VwYXJhdG9yLgorCitOb3csIHRlc3QgeW91ciBkYWVtb24gd2l0aAorCisJJCBnaXQgbHMtcmVtb3RlIGdpdDovLzEyNy4wLjAuMS9ydWxlLXRoZS13b3JsZC5naXQKKworSWYgdGhpcyBkb2VzIG5vdCB3b3JrLCBmaW5kIG91dCB3aHksIGFuZCBzdWJtaXQgYSBwYXRjaCB0byB0aGlzIGRvY3VtZW50LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ob3d0by91c2luZy1tZXJnZS1zdWJ0cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctbWVyZ2Utc3VidHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlOGQxMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctbWVyZ2Utc3VidHJlZS50eHQKQEAgLTAsMCArMSw3NSBAQAorRGF0ZTogU2F0LCA1IEphbiAyMDA4IDIwOjE3OjQwIC0wNTAwCitGcm9tOiBTZWFuIDxzZWFubGttbEBzeW1wYXRpY28uY2E+CitUbzogTWlrbG9zIFZham5hIDx2bWlrbG9zQGZydWdhbHdhcmUub3JnPgorQ2M6IGdpdEB2Z2VyLmtlcm5lbC5vcmcKK1N1YmplY3Q6IGhvdyB0byB1c2UgZ2l0IG1lcmdlIC1zIHN1YnRyZWU/CitBYnN0cmFjdDogSW4gdGhpcyBhcnRpY2xlLCBTZWFuIGRlbW9uc3RyYXRlcyBob3cgb25lIGNhbiB1c2UgdGhlIHN1YnRyZWUgbWVyZ2UKKyBzdHJhdGVneS4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworTWVzc2FnZS1JRDogPEJBWUMxLVBBU01UUDEyMzc0QjU0QkEzNzBBMUUxQzZFNzhBRTRFMEBDRVouSUNFPgorCitIb3cgdG8gdXNlIHRoZSBzdWJ0cmVlIG1lcmdlIHN0cmF0ZWd5Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZXJlIGFyZSBzaXR1YXRpb25zIHdoZXJlIHlvdSB3YW50IHRvIGluY2x1ZGUgY29udGVudHMgaW4geW91ciBwcm9qZWN0Citmcm9tIGFuIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIHByb2plY3QuIFlvdSBjYW4ganVzdCBwdWxsIGZyb20gdGhlCitvdGhlciBwcm9qZWN0IGFzIGxvbmcgYXMgdGhlcmUgYXJlIG5vIGNvbmZsaWN0aW5nIHBhdGhzLgorCitUaGUgcHJvYmxlbWF0aWMgY2FzZSBpcyB3aGVuIHRoZXJlIGFyZSBjb25mbGljdGluZyBmaWxlcy4gUG90ZW50aWFsCitjYW5kaWRhdGVzIGFyZSBNYWtlZmlsZXMgYW5kIG90aGVyIHN0YW5kYXJkIGZpbGVuYW1lcy4gWW91IGNvdWxkIG1lcmdlCit0aGVzZSBmaWxlcyBidXQgcHJvYmFibHkgeW91IGRvIG5vdCB3YW50IHRvLiAgQSBiZXR0ZXIgc29sdXRpb24gZm9yIHRoaXMKK3Byb2JsZW0gY2FuIGJlIHRvIG1lcmdlIHRoZSBwcm9qZWN0IGFzIGl0cyBvd24gc3ViZGlyZWN0b3J5LiBUaGlzIGlzIG5vdAorc3VwcG9ydGVkIGJ5IHRoZSAncmVjdXJzaXZlJyBtZXJnZSBzdHJhdGVneSwgc28ganVzdCBwdWxsaW5nIHdvbid0IHdvcmsuCisKK1doYXQgeW91IHdhbnQgaXMgdGhlICdzdWJ0cmVlJyBtZXJnZSBzdHJhdGVneSwgd2hpY2ggaGVscHMgeW91IGluIHN1Y2ggYQorc2l0dWF0aW9uLgorCitJbiB0aGlzIGV4YW1wbGUsIGxldCdzIHNheSB5b3UgaGF2ZSB0aGUgcmVwb3NpdG9yeSBhdCBgL3BhdGgvdG8vQmAgKGJ1dAoraXQgY2FuIGJlIGEgVVJMIGFzIHdlbGwsIGlmIHlvdSB3YW50KS4gWW91IHdhbnQgdG8gbWVyZ2UgdGhlICdtYXN0ZXInCiticmFuY2ggb2YgdGhhdCByZXBvc2l0b3J5IHRvIHRoZSBgZGlyLUJgIHN1YmRpcmVjdG9yeSBpbiB5b3VyIGN1cnJlbnQKK2JyYW5jaC4KKworSGVyZSBpcyB0aGUgY29tbWFuZCBzZXF1ZW5jZSB5b3UgbmVlZDoKKworLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVtb3RlIGFkZCAtZiBCcHJvamVjdCAvcGF0aC90by9CIDwxPgorJCBnaXQgbWVyZ2UgLXMgb3VycyAtLW5vLWNvbW1pdCBCcHJvamVjdC9tYXN0ZXIgPDI+CiskIGdpdCByZWFkLXRyZWUgLS1wcmVmaXg9ZGlyLUIvIC11IEJwcm9qZWN0L21hc3RlciA8Mz4KKyQgZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgQiBwcm9qZWN0IGFzIG91ciBzdWJkaXJlY3RvcnkiIDw0PgorCiskIGdpdCBwdWxsIC1zIHN1YnRyZWUgQnByb2plY3QgbWFzdGVyIDw1PgorLS0tLS0tLS0tLS0tLS0tLQorPDE+IG5hbWUgdGhlIG90aGVyIHByb2plY3QgIkJwcm9qZWN0IiwgYW5kIGZldGNoLgorPDI+IHByZXBhcmUgZm9yIHRoZSBsYXRlciBzdGVwIHRvIHJlY29yZCB0aGUgcmVzdWx0IGFzIGEgbWVyZ2UuCis8Mz4gcmVhZCAibWFzdGVyIiBicmFuY2ggb2YgQnByb2plY3QgdG8gdGhlIHN1YmRpcmVjdG9yeSAiZGlyLUIiLgorPDQ+IHJlY29yZCB0aGUgbWVyZ2UgcmVzdWx0LgorPDU+IG1haW50YWluIHRoZSByZXN1bHQgd2l0aCBzdWJzZXF1ZW50IG1lcmdlcyB1c2luZyAic3VidHJlZSIKKworVGhlIGZpcnN0IGZvdXIgY29tbWFuZHMgYXJlIHVzZWQgZm9yIHRoZSBpbml0aWFsIG1lcmdlLCB3aGlsZSB0aGUgbGFzdAorb25lIGlzIHRvIG1lcmdlIHVwZGF0ZXMgZnJvbSAnQiBwcm9qZWN0Jy4KKworQ29tcGFyaW5nICdzdWJ0cmVlJyBtZXJnZSB3aXRoIHN1Ym1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gVGhlIGJlbmVmaXQgb2YgdXNpbmcgc3VidHJlZSBtZXJnZSBpcyB0aGF0IGl0IHJlcXVpcmVzIGxlc3MKKyAgYWRtaW5pc3RyYXRpdmUgYnVyZGVuIGZyb20gdGhlIHVzZXJzIG9mIHlvdXIgcmVwb3NpdG9yeS4gSXQgd29ya3Mgd2l0aAorICBvbGRlciAoYmVmb3JlIEdpdCB2MS41LjIpIGNsaWVudHMgYW5kIHlvdSBoYXZlIHRoZSBjb2RlIHJpZ2h0IGFmdGVyCisgIGNsb25lLgorCistIEhvd2V2ZXIgaWYgeW91IHVzZSBzdWJtb2R1bGVzIHRoZW4geW91IGNhbiBjaG9vc2Ugbm90IHRvIHRyYW5zZmVyIHRoZQorICBzdWJtb2R1bGUgb2JqZWN0cy4gVGhpcyBtYXkgYmUgYSBwcm9ibGVtIHdpdGggdGhlIHN1YnRyZWUgbWVyZ2UuCisKKy0gQWxzbywgaW4gY2FzZSB5b3UgbWFrZSBjaGFuZ2VzIHRvIHRoZSBvdGhlciBwcm9qZWN0LCBpdCBpcyBlYXNpZXIgdG8KKyAgc3VibWl0IGNoYW5nZXMgaWYgeW91IGp1c3QgdXNlIHN1Ym1vZHVsZXMuCisKK0FkZGl0aW9uYWwgdGlwcworLS0tLS0tLS0tLS0tLS0tCisKKy0gSWYgeW91IG1hZGUgY2hhbmdlcyB0byB0aGUgb3RoZXIgcHJvamVjdCBpbiB5b3VyIHJlcG9zaXRvcnksIHRoZXkgbWF5CisgIHdhbnQgdG8gbWVyZ2UgZnJvbSB5b3VyIHByb2plY3QuIFRoaXMgaXMgcG9zc2libGUgdXNpbmcgc3VidHJlZSAtLSBpdAorICBjYW4gc2hpZnQgdXAgdGhlIHBhdGhzIGluIHlvdXIgdHJlZSBhbmQgdGhlbiB0aGV5IGNhbiBtZXJnZSBvbmx5IHRoZQorICByZWxldmFudCBwYXJ0cyBvZiB5b3VyIHRyZWUuCisKKy0gUGxlYXNlIG5vdGUgdGhhdCBpZiB0aGUgb3RoZXIgcHJvamVjdCBtZXJnZXMgZnJvbSB5b3UsIHRoZW4gaXQgd2lsbAorICBjb25uZWN0IGl0cyBoaXN0b3J5IHRvIHlvdXJzLCB3aGljaCBjYW4gYmUgc29tZXRoaW5nIHRoZXkgZG9uJ3Qgd2FudAorICB0by4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctc2lnbmVkLXRhZy1pbi1wdWxsLXJlcXVlc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9ob3d0by91c2luZy1zaWduZWQtdGFnLWluLXB1bGwtcmVxdWVzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmMDQwZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaG93dG8vdXNpbmctc2lnbmVkLXRhZy1pbi1wdWxsLXJlcXVlc3QudHh0CkBAIC0wLDAgKzEsMjE3IEBACitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CitEYXRlOiBUdWUsIDE3IEphbiAyMDExIDEzOjAwOjAwIC0wODAwCitTdWJqZWN0OiBVc2luZyBzaWduZWQgdGFnIGluIHB1bGwgcmVxdWVzdHMKK0Fic3RyYWN0OiBCZWdpbm5pbmcgdjEuNy45LCBhIGNvbnRyaWJ1dG9yIGNhbiBwdXNoIGEgc2lnbmVkIHRhZyB0byBoZXIKKyBwdWJsaXNoaW5nIHJlcG9zaXRvcnkgYW5kIGFzayBoZXIgaW50ZWdyYXRvciB0byBwdWxsIGl0LiBUaGlzIGFzc3VyZXMgdGhlCisgaW50ZWdyYXRvciB0aGF0IHRoZSBwdWxsZWQgaGlzdG9yeSBpcyBhdXRoZW50aWMgYW5kIGFsbG93cyBvdGhlcnMgdG8KKyBsYXRlciB2YWxpZGF0ZSBpdC4KK0NvbnRlbnQtdHlwZTogdGV4dC9hc2NpaWRvYworCitIb3cgdG8gdXNlIGEgc2lnbmVkIHRhZyBpbiBwdWxsIHJlcXVlc3RzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0EgdHlwaWNhbCBkaXN0cmlidXRlZCB3b3JrZmxvdyB1c2luZyBHaXQgaXMgZm9yIGEgY29udHJpYnV0b3IgdG8gZm9yayBhCitwcm9qZWN0LCBidWlsZCBvbiBpdCwgcHVibGlzaCB0aGUgcmVzdWx0IHRvIGhlciBwdWJsaWMgcmVwb3NpdG9yeSwgYW5kIGFzawordGhlICJ1cHN0cmVhbSIgcGVyc29uIChvZnRlbiB0aGUgb3duZXIgb2YgdGhlIHByb2plY3Qgd2hlcmUgc2hlIGZvcmtlZAorZnJvbSkgdG8gcHVsbCBmcm9tIGhlciBwdWJsaWMgcmVwb3NpdG9yeS4gUmVxdWVzdGluZyBzdWNoIGEgInB1bGwiIGlzIG1hZGUKK2Vhc3kgYnkgdGhlIGBnaXQgcmVxdWVzdC1wdWxsYCBjb21tYW5kLgorCitFYXJsaWVyLCBhIHR5cGljYWwgcHVsbCByZXF1ZXN0IG1heSBoYXZlIHN0YXJ0ZWQgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyBUaGUgZm9sbG93aW5nIGNoYW5nZXMgc2luY2UgY29tbWl0IDQwNmRhNzgwMzIxNzkuLi46CisKKyAgIEZyb2JveiAzLjIgKDIwMTEtMDktMzAgMTQ6MjA6NTcgLTA3MDApCisKKyBhcmUgYXZhaWxhYmxlIGluIHRoZSBHaXQgcmVwb3NpdG9yeSBhdDoKKworICAgZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0IGZvci14eXp6eQorLS0tLS0tLS0tLS0tCisKK2ZvbGxvd2VkIGJ5IGEgc2hvcnRsb2cgb2YgdGhlIGNoYW5nZXMgYW5kIGEgZGlmZnN0YXQuCisKK1RoZSByZXF1ZXN0IHdhcyBmb3IgYSBicmFuY2ggbmFtZSAoZS5nLiBgZm9yLXh5enp5YCkgaW4gdGhlIHB1YmxpYworcmVwb3NpdG9yeSBvZiB0aGUgY29udHJpYnV0b3IsIGFuZCBldmVuIHRob3VnaCBpdCBzdGF0ZWQgd2hlcmUgdGhlCitjb250cmlidXRvciBmb3JrZWQgaGVyIHdvcmsgZnJvbSwgdGhlIG1lc3NhZ2UgZGlkIG5vdCBzYXkgYW55dGhpbmcgYWJvdXQKK3RoZSBjb21taXQgdG8gZXhwZWN0IGF0IHRoZSB0aXAgb2YgdGhlIGZvci14eXp6eSBicmFuY2guIElmIHRoZSBzaXRlIHRoYXQKK2hvc3RzIHRoZSBwdWJsaWMgcmVwb3NpdG9yeSBvZiB0aGUgY29udHJpYnV0b3IgY2Fubm90IGJlIGZ1bGx5IHRydXN0ZWQsIGl0Cit3YXMgdW5uZWNlc3NhcmlseSBoYXJkIHRvIG1ha2Ugc3VyZSB3aGF0IHdhcyBwdWxsZWQgYnkgdGhlIGludGVncmF0b3Igd2FzCitnZW51aW5lbHkgd2hhdCB0aGUgY29udHJpYnV0b3IgaGFkIHByb2R1Y2VkIGZvciB0aGUgcHJvamVjdC4gQWxzbyB0aGVyZQord2FzIG5vIGVhc3kgd2F5IGZvciB0aGlyZC1wYXJ0eSBhdWRpdG9ycyB0byBsYXRlciB2ZXJpZnkgdGhlIHJlc3VsdGluZworaGlzdG9yeS4KKworU3RhcnRpbmcgZnJvbSBHaXQgcmVsZWFzZSB2MS43LjksIGEgY29udHJpYnV0b3IgY2FuIGFkZCBhIHNpZ25lZCB0YWcgdG8KK3RoZSBjb21taXQgYXQgdGhlIHRpcCBvZiB0aGUgaGlzdG9yeSBhbmQgYXNrIHRoZSBpbnRlZ3JhdG9yIHRvIHB1bGwgdGhhdAorc2lnbmVkIHRhZy4gV2hlbiB0aGUgaW50ZWdyYXRvciBydW5zIGBnaXQgcHVsbGAsIHRoZSBzaWduZWQgdGFnIGlzCithdXRvbWF0aWNhbGx5IHZlcmlmaWVkIHRvIGFzc3VyZSB0aGF0IHRoZSBoaXN0b3J5IGlzIG5vdCB0YW1wZXJlZCB3aXRoLgorSW4gYWRkaXRpb24sIHRoZSByZXN1bHRpbmcgbWVyZ2UgY29tbWl0IHJlY29yZHMgdGhlIGNvbnRlbnQgb2YgdGhlIHNpZ25lZAordGFnLCBzbyB0aGF0IG90aGVyIHBlb3BsZSBjYW4gdmVyaWZ5IHRoYXQgdGhlIGJyYW5jaCBtZXJnZWQgYnkgdGhlCitpbnRlZ3JhdG9yIHdhcyBzaWduZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aXRob3V0IGZldGNoaW5nIHRoZSBzaWduZWQgdGFnCit1c2VkIHRvIHZhbGlkYXRlIHRoZSBwdWxsIHJlcXVlc3Qgc2VwYXJhdGVseSBhbmQga2VlcGluZyBpdCBpbiB0aGUgcmVmcworbmFtZXNwYWNlLgorCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgd29ya2Zsb3cgYmV0d2VlbiB0aGUgY29udHJpYnV0b3IgYW5kIHRoZQoraW50ZWdyYXRvciwgdXNpbmcgR2l0IHYxLjcuOSBvciBsYXRlci4KKworCitBIGNvbnRyaWJ1dG9yIG9yIGEgbGlldXRlbmFudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgcHJlcGFyaW5nIGhlciB3b3JrIHRvIGJlIHB1bGxlZCwgdGhlIGNvbnRyaWJ1dG9yIHVzZXMgYGdpdCB0YWcgLXNgCit0byBjcmVhdGUgYSBzaWduZWQgdGFnOgorCistLS0tLS0tLS0tLS0KKyAkIGdpdCBjaGVja291dCB3b3JrCisgJCAuLi4gImdpdCBwdWxsIiBmcm9tIHN1YmxpZXV0ZW5hbnRzLCAiZ2l0IGNvbW1pdCIgeW91ciBvd24gd29yayAuLi4KKyAkIGdpdCB0YWcgLXMgLW0gIkNvbXBsZXRlZCBmcm90eiBmZWF0dXJlIiBmcm90ei1mb3IteHl6enkgd29yaworLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCB0aGlzIGV4YW1wbGUgdXNlcyB0aGUgYC1tYCBvcHRpb24gdG8gY3JlYXRlIGEgc2lnbmVkIHRhZyB3aXRoCitqdXN0IGEgb25lLWxpbmVyIG1lc3NhZ2UsIGJ1dCB0aGlzIGlzIGZvciBpbGx1c3RyYXRpb24gcHVycG9zZXMgb25seS4gSXQKK2lzIGFkdmlzYWJsZSB0byBjb21wb3NlIGEgd2VsbC13cml0dGVuIGV4cGxhbmF0aW9uIG9mIHdoYXQgdGhlIHRvcGljIGRvZXMKK3RvIGp1c3RpZnkgd2h5IGl0IGlzIHdvcnRod2hpbGUgZm9yIHRoZSBpbnRlZ3JhdG9yIHRvIHB1bGwgaXQsIGFzIHRoaXMKK21lc3NhZ2Ugd2lsbCBldmVudHVhbGx5IGJlY29tZSBwYXJ0IG9mIHRoZSBmaW5hbCBoaXN0b3J5IGFmdGVyIHRoZQoraW50ZWdyYXRvciByZXNwb25kcyB0byB0aGUgcHVsbCByZXF1ZXN0IChhcyB3ZSB3aWxsIHNlZSBsYXRlcikuCisKK1RoZW4gc2hlIHB1c2hlcyB0aGUgdGFnIG91dCB0byBoZXIgcHVibGljIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLQorICQgZ2l0IHB1c2ggZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0LyArZnJvdHotZm9yLXh5enp5CistLS0tLS0tLS0tLS0KKworVGhlcmUgaXMgbm8gbmVlZCB0byBwdXNoIHRoZSBgd29ya2AgYnJhbmNoIG9yIGFueXRoaW5nIGVsc2UuCisKK05vdGUgdGhhdCB0aGUgYWJvdmUgY29tbWFuZCBsaW5lIHVzZWQgYSBwbHVzIHNpZ24gYXQgdGhlIGJlZ2lubmluZyBvZgorYCtmcm90ei1mb3IteHl6enlgIHRvIGFsbG93IGZvcmNpbmcgdGhlIHVwZGF0ZSBvZiBhIHRhZywgYXMgdGhlIHNhbWUKK2NvbnRyaWJ1dG9yIG1heSB3YW50IHRvIHJldXNlIGEgc2lnbmVkIHRhZyB3aXRoIHRoZSBzYW1lIG5hbWUgYWZ0ZXIgdGhlCitwcmV2aW91cyBwdWxsIHJlcXVlc3QgaGFzIGFscmVhZHkgYmVlbiByZXNwb25kZWQgdG8uCisKK1RoZSBjb250cmlidXRvciB0aGVuIHByZXBhcmVzIGEgbWVzc2FnZSB0byByZXF1ZXN0IGEgInB1bGwiOgorCistLS0tLS0tLS0tLS0KKyAkIGdpdCByZXF1ZXN0LXB1bGwgdjMuMiBleGFtcGxlLmNvbTovZ2l0L2Zyb2Jvei5naXQvIGZyb3R6LWZvci14eXp6eSA+bXNnLnR4dAorLS0tLS0tLS0tLS0tCisKK1RoZSBhcmd1bWVudHMgYXJlOgorCisuIHRoZSB2ZXJzaW9uIG9mIHRoZSBpbnRlZ3JhdG9yJ3MgY29tbWl0IHRoZSBjb250cmlidXRvciBiYXNlZCBoZXIgd29yayBvbjsKKy4gdGhlIFVSTCBvZiB0aGUgcmVwb3NpdG9yeSwgdG8gd2hpY2ggdGhlIGNvbnRyaWJ1dG9yIGhhcyBwdXNoZWQgd2hhdCBzaGUKKyAgd2FudHMgdG8gZ2V0IHB1bGxlZDsgYW5kCisuIHRoZSBuYW1lIG9mIHRoZSB0YWcgdGhlIGNvbnRyaWJ1dG9yIHdhbnRzIHRvIGdldCBwdWxsZWQgKGVhcmxpZXIsIHNoZSBjb3VsZAorICB3cml0ZSBvbmx5IGEgYnJhbmNoIG5hbWUgaGVyZSkuCisKK1RoZSByZXN1bHRpbmcgbXNnLnR4dCBmaWxlIGJlZ2lucyBsaWtlIHNvOgorCistLS0tLS0tLS0tLS0KKyBUaGUgZm9sbG93aW5nIGNoYW5nZXMgc2luY2UgY29tbWl0IDQwNmRhNzgwMzIxNzkuLi46CisKKyAgIEZyb2JveiAzLjIgKDIwMTEtMDktMzAgMTQ6MjA6NTcgLTA3MDApCisKKyBhcmUgYXZhaWxhYmxlIGluIHRoZSBHaXQgcmVwb3NpdG9yeSBhdDoKKworICAgZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0IHRhZ3MvZnJvdHotZm9yLXh5enp5CisKKyBmb3IgeW91IHRvIGZldGNoIGNoYW5nZXMgdXAgdG8gNzAzZjA1YWQ1ODM1Yy4uLjoKKworICAgQWRkIHRlc3RzIGFuZCBkb2N1bWVudGF0aW9uIGZvciBmcm90eiAoMjAxMS0xMi0wMiAxMDowMjo1MiAtMDgwMCkKKworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ29tcGxldGVkIGZyb3R6IGZlYXR1cmUKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0tLS0tLS0tLS0tCisKK2ZvbGxvd2VkIGJ5IGEgc2hvcnRsb2cgb2YgdGhlIGNoYW5nZXMgYW5kIGEgZGlmZnN0YXQuICBDb21wYXJpbmcgdGhpcyB3aXRoCit0aGUgZWFybGllciBpbGx1c3RyYXRpb24gb2YgdGhlIG91dHB1dCBmcm9tIHRoZSB0cmFkaXRpb25hbCBgZ2l0IHJlcXVlc3QtcHVsbGAKK2NvbW1hbmQsIHRoZSByZWFkZXIgc2hvdWxkIG5vdGljZSB0aGF0OgorCisuIFRoZSB0aXAgY29tbWl0IHRvIGV4cGVjdCBpcyBzaG93biB0byB0aGUgaW50ZWdyYXRvcjsgYW5kCisuIFRoZSBzaWduZWQgdGFnIG1lc3NhZ2UgaXMgc2hvd24gcHJvbWluZW50bHkgYmV0d2VlbiB0aGUgZGFzaGVkIGxpbmVzCisgIGJlZm9yZSB0aGUgc2hvcnRsb2cuCisKK1RoZSBsYXR0ZXIgaXMgd2h5IHRoZSBjb250cmlidXRvciB3b3VsZCB3YW50IHRvIGp1c3RpZnkgd2h5IHB1bGxpbmcgaGVyCit3b3JrIGlzIHdvcnRod2hpbGUgd2hlbiBjcmVhdGluZyB0aGUgc2lnbmVkIHRhZy4gIFRoZSBjb250cmlidXRvciB0aGVuCitvcGVucyBoZXIgZmF2b3JpdGUgTVVBLCByZWFkcyBtc2cudHh0LCBlZGl0cyBhbmQgc2VuZHMgaXQgdG8gaGVyIHVwc3RyZWFtCitpbnRlZ3JhdG9yLgorCisKK0ludGVncmF0b3IKKy0tLS0tLS0tLS0KKworQWZ0ZXIgcmVjZWl2aW5nIHN1Y2ggYSBwdWxsIHJlcXVlc3QgbWVzc2FnZSwgdGhlIGludGVncmF0b3IgZmV0Y2hlcyBhbmQKK2ludGVncmF0ZXMgdGhlIHRhZyBuYW1lZCBpbiB0aGUgcmVxdWVzdCwgd2l0aDoKKworLS0tLS0tLS0tLS0tCisgJCBnaXQgcHVsbCBleGFtcGxlLmNvbTovZ2l0L2Zyb2Jvei5naXQvIHRhZ3MvZnJvdHotZm9yLXh5enp5CistLS0tLS0tLS0tLS0KKworVGhpcyBvcGVyYXRpb24gd2lsbCBhbHdheXMgb3BlbiBhbiBlZGl0b3IgdG8gYWxsb3cgdGhlIGludGVncmF0b3IgdG8gZmluZQordHVuZSB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIHdoZW4gbWVyZ2luZyBhIHNpZ25lZCB0YWcuICBBbHNvLCBwdWxsaW5nIGEKK3NpZ25lZCB0YWcgd2lsbCBhbHdheXMgY3JlYXRlIGEgbWVyZ2UgY29tbWl0IGV2ZW4gd2hlbiB0aGUgaW50ZWdyYXRvciBkb2VzCitub3QgaGF2ZSBhbnkgbmV3IGNvbW1pdCBzaW5jZSB0aGUgY29udHJpYnV0b3IncyB3b3JrIGZvcmtlZCAoaS5lLiAnZmFzdAorZm9yd2FyZCcpLCBzbyB0aGF0IHRoZSBpbnRlZ3JhdG9yIGNhbiBwcm9wZXJseSBleHBsYWluIHdoYXQgdGhlIG1lcmdlIGlzCithYm91dCBhbmQgd2h5IGl0IHdhcyBtYWRlLgorCitJbiB0aGUgZWRpdG9yLCB0aGUgaW50ZWdyYXRvciB3aWxsIHNlZSBzb21ldGhpbmcgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0KKyBNZXJnZSB0YWcgJ2Zyb3R6LWZvci14eXp6eScgb2YgZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0LworCisgQ29tcGxldGVkIGZyb3R6IGZlYXR1cmUKKyAjIGdwZzogU2lnbmF0dXJlIG1hZGUgRnJpIDAyIERlYyAyMDExIDEwOjAzOjAxIEFNIFBTVCB1c2luZyBSU0Ega2V5IElEIDk2QUZFNkNCCisgIyBncGc6IEdvb2Qgc2lnbmF0dXJlIGZyb20gIkNvbiBUcmlidXRvciA8bml0Zm9sQGV4YW1wbGUuY29tPiIKKy0tLS0tLS0tLS0tLQorCitOb3RpY2UgdGhhdCB0aGUgbWVzc2FnZSByZWNvcmRlZCBpbiB0aGUgc2lnbmVkIHRhZyAiQ29tcGxldGVkIGZyb3R6CitmZWF0dXJlIiBhcHBlYXJzIGhlcmUsIGFuZCBhZ2FpbiB0aGF0IGlzIHdoeSBpdCBpcyBpbXBvcnRhbnQgZm9yIHRoZQorY29udHJpYnV0b3IgdG8gZXhwbGFpbiBoZXIgd29yayB3ZWxsIHdoZW4gY3JlYXRpbmcgdGhlIHNpZ25lZCB0YWcuCisKK0FzIHVzdWFsLCB0aGUgbGluZXMgY29tbWVudGVkIHdpdGggYCNgIGFyZSBzdHJpcHBlZCBvdXQuIFRoZSByZXN1bHRpbmcKK2NvbW1pdCByZWNvcmRzIHRoZSBzaWduZWQgdGFnIHVzZWQgZm9yIHRoaXMgdmFsaWRhdGlvbiBpbiBhIGhpZGRlbiBmaWVsZAorc28gdGhhdCBpdCBjYW4gbGF0ZXIgYmUgdXNlZCBieSBvdGhlcnMgdG8gYXVkaXQgdGhlIGhpc3RvcnkuIFRoZXJlIGlzIG5vCituZWVkIGZvciB0aGUgaW50ZWdyYXRvciB0byBrZWVwIGEgc2VwYXJhdGUgY29weSBvZiB0aGUgdGFnIGluIGhpcworcmVwb3NpdG9yeSAoaS5lLiBgZ2l0IHRhZyAtbGAgd29uJ3QgbGlzdCB0aGUgYGZyb3R6LWZvci14eXp6eWAgdGFnIGluIHRoZQorYWJvdmUgZXhhbXBsZSksIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIHB1Ymxpc2ggdGhlIHRhZyB0byBoaXMgcHVibGljCityZXBvc2l0b3J5LCBlaXRoZXIuCisKK0FmdGVyIHRoZSBpbnRlZ3JhdG9yIHJlc3BvbmRzIHRvIHRoZSBwdWxsIHJlcXVlc3QgYW5kIGhlciB3b3JrIGJlY29tZXMKK3BhcnQgb2YgdGhlIHBlcm1hbmVudCBoaXN0b3J5LCB0aGUgY29udHJpYnV0b3IgY2FuIHJlbW92ZSB0aGUgdGFnIGZyb20KK2hlciBwdWJsaWMgcmVwb3NpdG9yeSwgaWYgc2hlIGNob29zZXMsIGluIG9yZGVyIHRvIGtlZXAgdGhlIHRhZyBuYW1lc3BhY2UKK29mIGhlciBwdWJsaWMgcmVwb3NpdG9yeSBjbGVhbiwgd2l0aDoKKworLS0tLS0tLS0tLS0tCisgJCBnaXQgcHVzaCBleGFtcGxlLmNvbTovZ2l0L2Zyb2Jvei5naXQgOmZyb3R6LWZvci14eXp6eQorLS0tLS0tLS0tLS0tCisKKworQXVkaXRvcnMKKy0tLS0tLS0tCisKK1RoZSBgLS1zaG93LXNpZ25hdHVyZWAgb3B0aW9uIGNhbiBiZSBnaXZlbiB0byBgZ2l0IGxvZ2Agb3IgYGdpdCBzaG93YCBhbmQKK3Nob3dzIHRoZSB2ZXJpZmljYXRpb24gc3RhdHVzIG9mIHRoZSBlbWJlZGRlZCBzaWduZWQgdGFnIGluIG1lcmdlIGNvbW1pdHMKK2NyZWF0ZWQgd2hlbiB0aGUgaW50ZWdyYXRvciByZXNwb25kZWQgdG8gYSBwdWxsIHJlcXVlc3Qgb2YgYSBzaWduZWQgdGFnLgorCitBIHR5cGljYWwgb3V0cHV0IGZyb20gYGdpdCBzaG93IC0tc2hvdy1zaWduYXR1cmVgIG1heSBsb29rIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisgJCBnaXQgc2hvdyAtLXNob3ctc2lnbmF0dXJlCisgY29tbWl0IDAyMzA2ZWY2YTM0OThhMzkxMThhZWY5ZGY3OTc1YmRiNTAwOTE1ODUKKyBtZXJnZWQgdGFnICdmcm90ei1mb3IteHl6enknCisgZ3BnOiBTaWduYXR1cmUgbWFkZSBGcmkgMDYgSmFuIDIwMTIgMTI6NDE6NDkgUE0gUFNUIHVzaW5nIFJTQSBrZXkgSUQgOTZBRkU2Q0IKKyBncGc6IEdvb2Qgc2lnbmF0dXJlIGZyb20gIkNvbiBUcmlidXRvciA8bml0Zm9sQGV4YW1wbGUuY29tPiIKKyBNZXJnZTogNDA2ZGE3OCA3MDNmMDVhCisgQXV0aG9yOiBJbnRlIEdyYXRvciA8eHl6enlAZXhhbXBsZS5jb20+CisgRGF0ZTogICBUdWUgSmFuIDE3IDEzOjQ5OjQxIDIwMTIgLTA4MDAKKworICAgICBNZXJnZSB0YWcgJ2Zyb3R6LWZvci14eXp6eScgb2YgZXhhbXBsZS5jb206L2dpdC9mcm9ib3ouZ2l0LworCisgICAgIENvbXBsZXRlZCBmcm90eiBmZWF0dXJlCisKKyAgICAgKiB0YWcgJ2Zyb3R6LWZvci14eXp6eScgKDEwMCBjb21taXRzKQorICAgICAgIEFkZCB0ZXN0cyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgZnJvdHoKKyAgICAgICAuLi4KKy0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBubyBuZWVkIGZvciB0aGUgYXVkaXRvciB0byBleHBsaWNpdGx5IGZldGNoIHRoZSBjb250cmlidXRvcidzCitzaWduYXR1cmUsIG9yIHRvIGV2ZW4gYmUgYXdhcmUgb2Ygd2hhdCB0YWcocykgdGhlIGNvbnRyaWJ1dG9yIGFuZCBpbnRlZ3JhdG9yCit1c2VkIHRvIGNvbW11bmljYXRlIHRoZSBzaWduYXR1cmUuICBBbGwgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uIGlzIHJlY29yZGVkCithcyBwYXJ0IG9mIHRoZSBtZXJnZSBjb21taXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kxOG4udHh0IGIvRG9jdW1lbnRhdGlvbi9pMThuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ3OWRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9pMThuLnR4dApAQCAtMCwwICsxLDcwIEBACitHaXQgaXMgdG8gc29tZSBleHRlbnQgY2hhcmFjdGVyIGVuY29kaW5nIGFnbm9zdGljLgorCisgLSBUaGUgY29udGVudHMgb2YgdGhlIGJsb2Igb2JqZWN0cyBhcmUgdW5pbnRlcnByZXRlZCBzZXF1ZW5jZXMKKyAgIG9mIGJ5dGVzLiAgVGhlcmUgaXMgbm8gZW5jb2RpbmcgdHJhbnNsYXRpb24gYXQgdGhlIGNvcmUKKyAgIGxldmVsLgorCisgLSBQYXRoIG5hbWVzIGFyZSBlbmNvZGVkIGluIFVURi04IG5vcm1hbGl6YXRpb24gZm9ybSBDLiBUaGlzCisgICBhcHBsaWVzIHRvIHRyZWUgb2JqZWN0cywgdGhlIGluZGV4IGZpbGUsIHJlZiBuYW1lcywgYXMgd2VsbCBhcworICAgcGF0aCBuYW1lcyBpbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgIGFuZCBjb25maWcgZmlsZXMgKGAuZ2l0L2NvbmZpZ2AgKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLAorICAgbGlua2dpdDpnaXRpZ25vcmVbNV0sIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBhbmQKKyAgIGxpbmtnaXQ6Z2l0bW9kdWxlc1s1XSkuCisrCitOb3RlIHRoYXQgR2l0IGF0IHRoZSBjb3JlIGxldmVsIHRyZWF0cyBwYXRoIG5hbWVzIHNpbXBseSBhcworc2VxdWVuY2VzIG9mIG5vbi1OVUwgYnl0ZXMsIHRoZXJlIGFyZSBubyBwYXRoIG5hbWUgZW5jb2RpbmcKK2NvbnZlcnNpb25zIChleGNlcHQgb24gTWFjIGFuZCBXaW5kb3dzKS4gVGhlcmVmb3JlLCB1c2luZworbm9uLUFTQ0lJIHBhdGggbmFtZXMgd2lsbCBtb3N0bHkgd29yayBldmVuIG9uIHBsYXRmb3JtcyBhbmQgZmlsZQorc3lzdGVtcyB0aGF0IHVzZSBsZWdhY3kgZXh0ZW5kZWQgQVNDSUkgZW5jb2RpbmdzLiBIb3dldmVyLAorcmVwb3NpdG9yaWVzIGNyZWF0ZWQgb24gc3VjaCBzeXN0ZW1zIHdpbGwgbm90IHdvcmsgcHJvcGVybHkgb24KK1VURi04LWJhc2VkIHN5c3RlbXMgKGUuZy4gTGludXgsIE1hYywgV2luZG93cykgYW5kIHZpY2UgdmVyc2EuCitBZGRpdGlvbmFsbHksIG1hbnkgR2l0LWJhc2VkIHRvb2xzIHNpbXBseSBhc3N1bWUgcGF0aCBuYW1lcyB0bworYmUgVVRGLTggYW5kIHdpbGwgZmFpbCB0byBkaXNwbGF5IG90aGVyIGVuY29kaW5ncyBjb3JyZWN0bHkuCisKKyAtIENvbW1pdCBsb2cgbWVzc2FnZXMgYXJlIHR5cGljYWxseSBlbmNvZGVkIGluIFVURi04LCBidXQgb3RoZXIKKyAgIGV4dGVuZGVkIEFTQ0lJIGVuY29kaW5ncyBhcmUgYWxzbyBzdXBwb3J0ZWQuIFRoaXMgaW5jbHVkZXMKKyAgIElTTy04ODU5LXgsIENQMTI1eCBhbmQgbWFueSBvdGhlcnMsIGJ1dCBfbm90XyBVVEYtMTYvMzIsCisgICBFQkNESUMgYW5kIENKSyBtdWx0aS1ieXRlIGVuY29kaW5ncyAoR0JLLCBTaGlmdC1KSVMsIEJpZzUsCisgICBFVUMteCwgQ1A5eHggZXRjLikuCisKK0FsdGhvdWdoIHdlIGVuY291cmFnZSB0aGF0IHRoZSBjb21taXQgbG9nIG1lc3NhZ2VzIGFyZSBlbmNvZGVkCitpbiBVVEYtOCwgYm90aCB0aGUgY29yZSBhbmQgR2l0IFBvcmNlbGFpbiBhcmUgZGVzaWduZWQgbm90IHRvCitmb3JjZSBVVEYtOCBvbiBwcm9qZWN0cy4gIElmIGFsbCBwYXJ0aWNpcGFudHMgb2YgYSBwYXJ0aWN1bGFyCitwcm9qZWN0IGZpbmQgaXQgbW9yZSBjb252ZW5pZW50IHRvIHVzZSBsZWdhY3kgZW5jb2RpbmdzLCBHaXQKK2RvZXMgbm90IGZvcmJpZCBpdC4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIGZldyB0aGluZ3MgdG8ga2VlcCBpbgorbWluZC4KKworLiAnZ2l0IGNvbW1pdCcgYW5kICdnaXQgY29tbWl0LXRyZWUnIGlzc3VlcworICBhIHdhcm5pbmcgaWYgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSBnaXZlbiB0byBpdCBkb2VzIG5vdCBsb29rCisgIGxpa2UgYSB2YWxpZCBVVEYtOCBzdHJpbmcsIHVubGVzcyB5b3UgZXhwbGljaXRseSBzYXkgeW91cgorICBwcm9qZWN0IHVzZXMgYSBsZWdhY3kgZW5jb2RpbmcuICBUaGUgd2F5IHRvIHNheSB0aGlzIGlzIHRvCisgIGhhdmUgaTE4bi5jb21taXRlbmNvZGluZyBpbiBgLmdpdC9jb25maWdgIGZpbGUsIGxpa2UgdGhpczoKKysKKy0tLS0tLS0tLS0tLQorW2kxOG5dCisJY29tbWl0ZW5jb2RpbmcgPSBJU08tODg1OS0xCistLS0tLS0tLS0tLS0KKysKK0NvbW1pdCBvYmplY3RzIGNyZWF0ZWQgd2l0aCB0aGUgYWJvdmUgc2V0dGluZyByZWNvcmQgdGhlIHZhbHVlCitvZiBgaTE4bi5jb21taXRlbmNvZGluZ2AgaW4gaXRzIGBlbmNvZGluZ2AgaGVhZGVyLiAgVGhpcyBpcyB0bworaGVscCBvdGhlciBwZW9wbGUgd2hvIGxvb2sgYXQgdGhlbSBsYXRlci4gIExhY2sgb2YgdGhpcyBoZWFkZXIKK2ltcGxpZXMgdGhhdCB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGlzIGVuY29kZWQgaW4gVVRGLTguCisKKy4gJ2dpdCBsb2cnLCAnZ2l0IHNob3cnLCAnZ2l0IGJsYW1lJyBhbmQgZnJpZW5kcyBsb29rIGF0IHRoZQorICBgZW5jb2RpbmdgIGhlYWRlciBvZiBhIGNvbW1pdCBvYmplY3QsIGFuZCB0cnkgdG8gcmUtY29kZSB0aGUKKyAgbG9nIG1lc3NhZ2UgaW50byBVVEYtOCB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4gIFlvdSBjYW4KKyAgc3BlY2lmeSB0aGUgZGVzaXJlZCBvdXRwdXQgZW5jb2Rpbmcgd2l0aAorICBgaTE4bi5sb2dvdXRwdXRlbmNvZGluZ2AgaW4gYC5naXQvY29uZmlnYCBmaWxlLCBsaWtlIHRoaXM6CisrCistLS0tLS0tLS0tLS0KK1tpMThuXQorCWxvZ291dHB1dGVuY29kaW5nID0gSVNPLTg4NTktMQorLS0tLS0tLS0tLS0tCisrCitJZiB5b3UgZG8gbm90IGhhdmUgdGhpcyBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCB0aGUgdmFsdWUgb2YKK2BpMThuLmNvbW1pdGVuY29kaW5nYCBpcyB1c2VkIGluc3RlYWQuCisKK05vdGUgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgY2hvc2Ugbm90IHRvIHJlLWNvZGUgdGhlIGNvbW1pdCBsb2cKK21lc3NhZ2Ugd2hlbiBhIGNvbW1pdCBpcyBtYWRlIHRvIGZvcmNlIFVURi04IGF0IHRoZSBjb21taXQKK29iamVjdCBsZXZlbCwgYmVjYXVzZSByZS1jb2RpbmcgdG8gVVRGLTggaXMgbm90IG5lY2Vzc2FyaWx5IGEKK3JldmVyc2libGUgb3BlcmF0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnN0YWxsLWRvYy1xdWljay5zaCBiL0RvY3VtZW50YXRpb24vaW5zdGFsbC1kb2MtcXVpY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzI3ZjY5YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5zdGFsbC1kb2MtcXVpY2suc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisjIFRoaXMgcmVxdWlyZXMgZ2l0LW1hbnBhZ2VzIGFuZC9vciBnaXQtaHRtbGRvY3MgcmVwb3NpdG9yaWVzCisKK3JlcG9zaXRvcnk9JHsxP3JlcG9zaXRvcnl9CitkZXN0ZGlyPSR7Mj9kZXN0aW5hdGlvbn0KKworaGVhZD1tYXN0ZXIgR0lUX0RJUj0KK2ZvciBkIGluICIkcmVwb3NpdG9yeS8uZ2l0IiAiJHJlcG9zaXRvcnkiCitkbworCWlmIEdJVF9ESVI9IiRkIiBnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJR0lUX0RJUj0iJGQiCisJCWV4cG9ydCBHSVRfRElSCisJCWJyZWFrCisJZmkKK2RvbmUKKworaWYgdGVzdCAteiAiJEdJVF9ESVIiCit0aGVuCisJZWNobyA+JjIgIk5laXRoZXIgJHJlcG9zaXRvcnkgbm9yICRyZXBvc2l0b3J5Ly5naXQgaXMgYSByZXBvc2l0b3J5IgorCWV4aXQgMQorZmkKKworR0lUX1dPUktfVFJFRT0kKHB3ZCkKK0dJVF9JTkRFWF9GSUxFPSQocHdkKS8ucXVpY2stZG9jLiQkCitleHBvcnQgR0lUX0lOREVYX0ZJTEUgR0lUX1dPUktfVFJFRQorcm0gLWYgIiRHSVRfSU5ERVhfRklMRSIKK3RyYXAgJ3JtIC1mICIkR0lUX0lOREVYX0ZJTEUiJyAwCisKK2dpdCByZWFkLXRyZWUgJGhlYWQKK2dpdCBjaGVja291dC1pbmRleCAtYSAtZiAtLXByZWZpeD0iJGRlc3RkaXIiLworCitpZiB0ZXN0IC1uICIkR1oiCit0aGVuCisJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgJGhlYWQgfAorCXhhcmdzIHByaW50ZiAiJGRlc3RkaXIvJXNcbiIgfAorCXhhcmdzIGd6aXAgLWYKK2ZpCitybSAtZiAiJEdJVF9JTkRFWF9GSUxFIgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnN0YWxsLXdlYmRvYy5zaCBiL0RvY3VtZW50YXRpb24vaW5zdGFsbC13ZWJkb2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWQ4YjRmZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5zdGFsbC13ZWJkb2Muc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKK1Q9IiQxIgorCitmb3IgaCBpbiBcCisJKi50eHQgKi5odG1sIFwKKwlob3d0by8qLnR4dCBob3d0by8qLmh0bWwgXAorCXRlY2huaWNhbC8qLnR4dCB0ZWNobmljYWwvKi5odG1sIFwKKwlSZWxOb3Rlcy8qLnR4dCAqLmNzcworZG8KKwlpZiB0ZXN0ICEgLWYgIiRoIgorCXRoZW4KKwkJOiBkaWQgbm90IG1hdGNoCisJZWxpZiB0ZXN0IC1mICIkVC8kaCIgJiYKKwkJJERJRkYgLXUgLUknXkxhc3QgdXBkYXRlZCAnICIkVC8kaCIgIiRoIgorCXRoZW4KKwkJOjsgIyB1cCB0byBkYXRlCisJZWxzZQorCQllY2hvID4mMiAiIyBpbnN0YWxsICRoICRULyRoIgorCQlybSAtZiAiJFQvJGgiCisJCW1rZGlyIC1wICQoZGlybmFtZSAiJFQvJGgiKQorCQljcCAiJGgiICIkVC8kaCIKKwlmaQorZG9uZQorc3RyaXBfbGVhZGluZz0kKGVjaG8gIiRULyIgfCBzZWQgLWUgJ3N8LnwufGcnKQorZm9yIHRoIGluIFwKKwkiJFQiLyouaHRtbCAiJFQiLyoudHh0IFwKKwkiJFQiL2hvd3RvLyoudHh0ICIkVCIvaG93dG8vKi5odG1sIFwKKwkiJFQiL3RlY2huaWNhbC8qLnR4dCAiJFQiL3RlY2huaWNhbC8qLmh0bWwKK2RvCisJaD0kKGV4cHIgIiR0aCIgOiAiJHN0cmlwX2xlYWRpbmciJ1woLipcKScpCisJY2FzZSAiJGgiIGluCisJUmVsTm90ZXMtKi50eHQgfCBpbmRleC5odG1sKSBjb250aW51ZSA7OworCWVzYWMKKwl0ZXN0IC1mICIkaCIgJiYgY29udGludWUKKwllY2hvID4mMiAiIyBybSAtZiAkdGgiCisJcm0gLWYgIiR0aCIKK2RvbmUKK2xuIC1zZiBnaXQuaHRtbCAiJFQvaW5kZXguaHRtbCIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGluZS1yYW5nZS1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9saW5lLXJhbmdlLWZvcm1hdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5Njc2ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbGluZS1yYW5nZS1mb3JtYXQudHh0CkBAIC0wLDAgKzEsMzAgQEAKKzxzdGFydD4gYW5kIDxlbmQ+IGNhbiB0YWtlIG9uZSBvZiB0aGVzZSBmb3JtczoKKworLSBudW1iZXIKKysKK0lmIDxzdGFydD4gb3IgPGVuZD4gaXMgYSBudW1iZXIsIGl0IHNwZWNpZmllcyBhbgorYWJzb2x1dGUgbGluZSBudW1iZXIgKGxpbmVzIGNvdW50IGZyb20gMSkuCisrCisKKy0gL3JlZ2V4LworKworVGhpcyBmb3JtIHdpbGwgdXNlIHRoZSBmaXJzdCBsaW5lIG1hdGNoaW5nIHRoZSBnaXZlbgorUE9TSVggcmVnZXguIElmIDxzdGFydD4gaXMgYSByZWdleCwgaXQgd2lsbCBzZWFyY2ggZnJvbSB0aGUgZW5kIG9mCit0aGUgcHJldmlvdXMgYC1MYCByYW5nZSwgaWYgYW55LCBvdGhlcndpc2UgZnJvbSB0aGUgc3RhcnQgb2YgZmlsZS4KK0lmIDxzdGFydD4gaXMgYGBeL3JlZ2V4LycnLCBpdCB3aWxsIHNlYXJjaCBmcm9tIHRoZSBzdGFydCBvZiBmaWxlLgorSWYgPGVuZD4gaXMgYSByZWdleCwgaXQgd2lsbCBzZWFyY2gKK3N0YXJ0aW5nIGF0IHRoZSBsaW5lIGdpdmVuIGJ5IDxzdGFydD4uCisrCisKKy0gK29mZnNldCBvciAtb2Zmc2V0CisrCitUaGlzIGlzIG9ubHkgdmFsaWQgZm9yIDxlbmQ+IGFuZCB3aWxsIHNwZWNpZnkgYSBudW1iZXIKK29mIGxpbmVzIGJlZm9yZSBvciBhZnRlciB0aGUgbGluZSBnaXZlbiBieSA8c3RhcnQ+LgorCisrCitJZiBgYDo8ZnVuY25hbWU+JycgaXMgZ2l2ZW4gaW4gcGxhY2Ugb2YgPHN0YXJ0PiBhbmQgPGVuZD4sIGl0IGlzIGEKK3JlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGRlbm90ZXMgdGhlIHJhbmdlIGZyb20gdGhlIGZpcnN0IGZ1bmNuYW1lIGxpbmUKK3RoYXQgbWF0Y2hlcyA8ZnVuY25hbWU+LCB1cCB0byB0aGUgbmV4dCBmdW5jbmFtZSBsaW5lLiBgYDo8ZnVuY25hbWU+JycKK3NlYXJjaGVzIGZyb20gdGhlIGVuZCBvZiB0aGUgcHJldmlvdXMgYC1MYCByYW5nZSwgaWYgYW55LCBvdGhlcndpc2UKK2Zyb20gdGhlIHN0YXJ0IG9mIGZpbGUuIGBgXjo8ZnVuY25hbWU+Jycgc2VhcmNoZXMgZnJvbSB0aGUgc3RhcnQgb2YKK2ZpbGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21haWxtYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9tYWlsbWFwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YThjMjc2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYWlsbWFwLnR4dApAQCAtMCwwICsxLDc1IEBACitJZiB0aGUgZmlsZSBgLm1haWxtYXBgIGV4aXN0cyBhdCB0aGUgdG9wbGV2ZWwgb2YgdGhlIHJlcG9zaXRvcnksIG9yIGF0Cit0aGUgbG9jYXRpb24gcG9pbnRlZCB0byBieSB0aGUgbWFpbG1hcC5maWxlIG9yIG1haWxtYXAuYmxvYgorY29uZmlndXJhdGlvbiBvcHRpb25zLCBpdAoraXMgdXNlZCB0byBtYXAgYXV0aG9yIGFuZCBjb21taXR0ZXIgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3NlcyB0bworY2Fub25pY2FsIHJlYWwgbmFtZXMgYW5kIGVtYWlsIGFkZHJlc3Nlcy4KKworSW4gdGhlIHNpbXBsZSBmb3JtLCBlYWNoIGxpbmUgaW4gdGhlIGZpbGUgY29uc2lzdHMgb2YgdGhlIGNhbm9uaWNhbAorcmVhbCBuYW1lIG9mIGFuIGF1dGhvciwgd2hpdGVzcGFjZSwgYW5kIGFuIGVtYWlsIGFkZHJlc3MgdXNlZCBpbiB0aGUKK2NvbW1pdCAoZW5jbG9zZWQgYnkgJzwnIGFuZCAnPicpIHRvIG1hcCB0byB0aGUgbmFtZS4gRm9yIGV4YW1wbGU6CistLQorCVByb3BlciBOYW1lIDxjb21taXRAZW1haWwueHg+CistLQorCitUaGUgbW9yZSBjb21wbGV4IGZvcm1zIGFyZToKKy0tCisJPHByb3BlckBlbWFpbC54eD4gPGNvbW1pdEBlbWFpbC54eD4KKy0tCit3aGljaCBhbGxvd3MgbWFpbG1hcCB0byByZXBsYWNlIG9ubHkgdGhlIGVtYWlsIHBhcnQgb2YgYSBjb21taXQsIGFuZDoKKy0tCisJUHJvcGVyIE5hbWUgPHByb3BlckBlbWFpbC54eD4gPGNvbW1pdEBlbWFpbC54eD4KKy0tCit3aGljaCBhbGxvd3MgbWFpbG1hcCB0byByZXBsYWNlIGJvdGggdGhlIG5hbWUgYW5kIHRoZSBlbWFpbCBvZiBhCitjb21taXQgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBjb21taXQgZW1haWwgYWRkcmVzcywgYW5kOgorLS0KKwlQcm9wZXIgTmFtZSA8cHJvcGVyQGVtYWlsLnh4PiBDb21taXQgTmFtZSA8Y29tbWl0QGVtYWlsLnh4PgorLS0KK3doaWNoIGFsbG93cyBtYWlsbWFwIHRvIHJlcGxhY2UgYm90aCB0aGUgbmFtZSBhbmQgdGhlIGVtYWlsIG9mIGEKK2NvbW1pdCBtYXRjaGluZyBib3RoIHRoZSBzcGVjaWZpZWQgY29tbWl0IG5hbWUgYW5kIGVtYWlsIGFkZHJlc3MuCisKK0V4YW1wbGUgMTogWW91ciBoaXN0b3J5IGNvbnRhaW5zIGNvbW1pdHMgYnkgdHdvIGF1dGhvcnMsIEphbmUKK2FuZCBKb2UsIHdob3NlIG5hbWVzIGFwcGVhciBpbiB0aGUgcmVwb3NpdG9yeSB1bmRlciBzZXZlcmFsIGZvcm1zOgorCistLS0tLS0tLS0tLS0KK0pvZSBEZXZlbG9wZXIgPGpvZUBleGFtcGxlLmNvbT4KK0pvZSBSLiBEZXZlbG9wZXIgPGpvZUBleGFtcGxlLmNvbT4KK0phbmUgRG9lIDxqYW5lQGV4YW1wbGUuY29tPgorSmFuZSBEb2UgPGphbmVAbGFwdG9wLihub25lKT4KK0phbmUgRC4gPGphbmVAZGVza3RvcC4obm9uZSk+CistLS0tLS0tLS0tLS0KKworTm93IHN1cHBvc2UgdGhhdCBKb2Ugd2FudHMgaGlzIG1pZGRsZSBuYW1lIGluaXRpYWwgdXNlZCwgYW5kIEphbmUKK3ByZWZlcnMgaGVyIGZhbWlseSBuYW1lIGZ1bGx5IHNwZWxsZWQgb3V0LiBBIHByb3BlciBgLm1haWxtYXBgIGZpbGUKK3dvdWxkIGxvb2sgbGlrZToKKworLS0tLS0tLS0tLS0tCitKYW5lIERvZSAgICAgICAgIDxqYW5lQGRlc2t0b3AuKG5vbmUpPgorSm9lIFIuIERldmVsb3BlciA8am9lQGV4YW1wbGUuY29tPgorLS0tLS0tLS0tLS0tCisKK05vdGUgaG93IHRoZXJlIGlzIG5vIG5lZWQgZm9yIGFuIGVudHJ5IGZvciBgPGphbmVAbGFwdG9wLihub25lKT5gLCBiZWNhdXNlIHRoZQorcmVhbCBuYW1lIG9mIHRoYXQgYXV0aG9yIGlzIGFscmVhZHkgY29ycmVjdC4KKworRXhhbXBsZSAyOiBZb3VyIHJlcG9zaXRvcnkgY29udGFpbnMgY29tbWl0cyBmcm9tIHRoZSBmb2xsb3dpbmcKK2F1dGhvcnM6CisKKy0tLS0tLS0tLS0tLQorbmljazEgPGJ1Z3NAY29tcGFueS54eD4KK25pY2syIDxidWdzQGNvbXBhbnkueHg+CituaWNrMiA8bmljazJAY29tcGFueS54eD4KK3NhbnRhIDxtZUBjb21wYW55Lnh4PgorY2xhdXMgPG1lQGNvbXBhbnkueHg+CitDVE8gPGN0b0Bjb29tcGFueS54eD4KKy0tLS0tLS0tLS0tLQorCitUaGVuIHlvdSBtaWdodCB3YW50IGEgYC5tYWlsbWFwYCBmaWxlIHRoYXQgbG9va3MgbGlrZToKKy0tLS0tLS0tLS0tLQorPGN0b0Bjb21wYW55Lnh4PiAgICAgICAgICAgICAgICAgICAgICAgPGN0b0Bjb29tcGFueS54eD4KK1NvbWUgRHVkZSA8c29tZUBkdWRlLnh4PiAgICAgICAgIG5pY2sxIDxidWdzQGNvbXBhbnkueHg+CitPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4gICBuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PgorT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+ICAgICAgICAgPG5pY2syQGNvbXBhbnkueHg+CitTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PiA8bWVAY29tcGFueS54eD4KKy0tLS0tLS0tLS0tLQorCitVc2UgaGFzaCAnIycgZm9yIGNvbW1lbnRzIHRoYXQgYXJlIGVpdGhlciBvbiB0aGVpciBvd24gbGluZSwgb3IgYWZ0ZXIKK3RoZSBlbWFpbCBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLTEuNzIueHNsIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLTEuNzIueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZDMxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtMS43Mi54c2wKQEAgLTAsMCArMSwxNCBAQAorPCEtLSBtYW5wYWdlLTEuNzIueHNsOgorICAgICBzcGVjaWFsIHNldHRpbmdzIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIGFzY2lpZG9jK2RvY2Jvb2sKKyAgICAgaGFuZGxlcyBwZWN1bGlhcml0aWVzIGluIGRvY2Jvb2steHNsIDEuNzIuMCAtLT4KKzx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSIKKwkJdmVyc2lvbj0iMS4wIj4KKworPHhzbDppbXBvcnQgaHJlZj0ibWFucGFnZS1iYXNlLnhzbCIvPgorCis8IS0tIHRoZXNlIGFyZSB0aGUgc3BlY2lhbCB2YWx1ZXMgZm9yIHRoZSByb2ZmIGNvbnRyb2wgY2hhcmFjdGVycworICAgICBuZWVkZWQgZm9yIGRvY2Jvb2steHNsIDEuNzIuMCAtLT4KKzx4c2w6cGFyYW0gbmFtZT0iZ2l0LmRvY2Jvb2suYmFja3NsYXNoIj4mI3gyNTkzOzwveHNsOnBhcmFtPgorPHhzbDpwYXJhbSBuYW1lPSJnaXQuZG9jYm9vay5kb3QiICAgICAgPiYjeDIzMDI7PC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYmFzZS11cmwueHNsLmluIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJhc2UtdXJsLnhzbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODAwOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLWJhc2UtdXJsLnhzbC5pbgpAQCAtMCwwICsxLDEwIEBACis8IS0tIG1hbnBhZ2UtYmFzZS11cmwueHNsOgorICAgICBzcGVjaWFsIHNldHRpbmdzIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIG5ld2VyIGRvY2Jvb2sgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gc2V0IGEgYmFzZSBVUkwgZm9yIHJlbGF0aXZlIGxpbmtzIC0tPgorPHhzbDpwYXJhbSBuYW1lPSJtYW4uYmFzZS51cmwuZm9yLnJlbGF0aXZlLmxpbmtzIgorCT5AQE1BTl9CQVNFX1VSTEBAPC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYmFzZS54c2wgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYmFzZS54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2NGZhNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1iYXNlLnhzbApAQCAtMCwwICsxLDM1IEBACis8IS0tIG1hbnBhZ2UtYmFzZS54c2w6CisgICAgIHNwZWNpYWwgZm9ybWF0dGluZyBmb3IgbWFucGFnZXMgcmVuZGVyZWQgZnJvbSBhc2NpaWRvYytkb2Nib29rIC0tPgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCQl2ZXJzaW9uPSIxLjAiPgorCis8IS0tIHRoZXNlIHBhcmFtcyBzaWxlbmNlIHNvbWUgb3V0cHV0IGZyb20geG1sdG8gLS0+Cis8eHNsOnBhcmFtIG5hbWU9Im1hbi5vdXRwdXQucXVpZXRseSIgc2VsZWN0PSIxIi8+Cis8eHNsOnBhcmFtIG5hbWU9InJlZmVudHJ5Lm1ldGEuZ2V0LnF1aWV0bHkiIHNlbGVjdD0iMSIvPgorCis8IS0tIGNvbnZlcnQgYXNjaWlkb2MgY2FsbG91dHMgdG8gbWFuIHBhZ2UgZm9ybWF0OworICAgICBnaXQuZG9jYm9vay5iYWNrc2xhc2ggYW5kIGdpdC5kb2Nib29rLmRvdCBwYXJhbXMKKyAgICAgbXVzdCBiZSBzdXBwbGllZCBieSBhbm90aGVyIFhTTCBmaWxlIG9yIG90aGVyIG1lYW5zIC0tPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY28iPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJjb25jYXQoCisJCQkgICAgICAkZ2l0LmRvY2Jvb2suYmFja3NsYXNoLCdmQignLAorCQkJICAgICAgc3Vic3RyaW5nLWFmdGVyKEBpZCwnLScpLCcpJywKKwkJCSAgICAgICRnaXQuZG9jYm9vay5iYWNrc2xhc2gsJ2ZSJykiLz4KKzwveHNsOnRlbXBsYXRlPgorPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2FsbG91dGxpc3QiPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZ2l0LmRvY2Jvb2suZG90Ii8+CisJPHhzbDp0ZXh0PnNwJiMxMDs8L3hzbDp0ZXh0PgorCTx4c2w6YXBwbHktdGVtcGxhdGVzLz4KKwk8eHNsOnRleHQ+JiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJjYWxsb3V0Ij4KKwk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iY29uY2F0KAorCQkJICAgICAgJGdpdC5kb2Nib29rLmJhY2tzbGFzaCwnZkInLAorCQkJICAgICAgc3Vic3RyaW5nLWFmdGVyKEBhcmVhcmVmcywnLScpLAorCQkJICAgICAgJy4gJywkZ2l0LmRvY2Jvb2suYmFja3NsYXNoLCdmUicpIi8+CisJPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZ2l0LmRvY2Jvb2suZG90Ii8+CisJPHhzbDp0ZXh0PmJyJiMxMDs8L3hzbDp0ZXh0PgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbCBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1ib2xkLWxpdGVyYWwueHNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOGViNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbApAQCAtMCwwICsxLDE3IEBACis8IS0tIG1hbnBhZ2UtYm9sZC1saXRlcmFsLnhzbDoKKyAgICAgc3BlY2lhbCBmb3JtYXR0aW5nIGZvciBtYW5wYWdlcyByZW5kZXJlZCBmcm9tIGFzY2lpZG9jK2RvY2Jvb2sgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gcmVuZGVyIGxpdGVyYWwgdGV4dCBhcyBib2xkIChpbnN0ZWFkIG9mIHBsYWluIG9yIG1vbm9zcGFjZSk7CisgICAgIHRoaXMgbWFrZXMgbGl0ZXJhbCB0ZXh0IGVhc2llciB0byBkaXN0aW5ndWlzaCBpbiBtYW5wYWdlcworICAgICB2aWV3ZWQgb24gYSB0dHkgLS0+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJsaXRlcmFsIj4KKwk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJGdpdC5kb2Nib29rLmJhY2tzbGFzaCIvPgorCTx4c2w6dGV4dD5mQjwveHNsOnRleHQ+CisJPHhzbDphcHBseS10ZW1wbGF0ZXMvPgorCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkZ2l0LmRvY2Jvb2suYmFja3NsYXNoIi8+CisJPHhzbDp0ZXh0PmZSPC94c2w6dGV4dD4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLW5vcm1hbC54c2wgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2Utbm9ybWFsLnhzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDhmNWIxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLW5vcm1hbC54c2wKQEAgLTAsMCArMSwxMyBAQAorPCEtLSBtYW5wYWdlLW5vcm1hbC54c2w6CisgICAgIHNwZWNpYWwgc2V0dGluZ3MgZm9yIG1hbnBhZ2VzIHJlbmRlcmVkIGZyb20gYXNjaWlkb2MrZG9jYm9vaworICAgICBoYW5kbGVzIGFueXRoaW5nIHdlIHdhbnQgdG8ga2VlcCBhd2F5IGZyb20gZG9jYm9vay14c2wgMS43Mi4wIC0tPgorPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgorCQl2ZXJzaW9uPSIxLjAiPgorCis8eHNsOmltcG9ydCBocmVmPSJtYW5wYWdlLWJhc2UueHNsIi8+CisKKzwhLS0gdGhlc2UgYXJlIHRoZSBub3JtYWwgdmFsdWVzIGZvciB0aGUgcm9mZiBjb250cm9sIGNoYXJhY3RlcnMgLS0+Cis8eHNsOnBhcmFtIG5hbWU9ImdpdC5kb2Nib29rLmJhY2tzbGFzaCI+XDwveHNsOnBhcmFtPgorPHhzbDpwYXJhbSBuYW1lPSJnaXQuZG9jYm9vay5kb3QiCT4uPC94c2w6cGFyYW0+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtcXVvdGUtYXBvcy54c2wgYi9Eb2N1bWVudGF0aW9uL21hbnBhZ2UtcXVvdGUtYXBvcy54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViODgzOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1xdW90ZS1hcG9zLnhzbApAQCAtMCwwICsxLDE2IEBACis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gd29yayBhcm91bmQgbmV3ZXIgZ3JvZmYvbWFuIHNldHVwcyB1c2luZyBhIHByZXR0aWVyIGFwb3N0cm9waGUKKyAgICAgdGhhdCB1bmZvcnR1bmF0ZWx5IGRvZXMgbm90IHF1b3RlIGFueXRoaW5nIHdoZW4gY3V0JnBhc3RpbmcKKyAgICAgZXhhbXBsZXMgdG8gdGhlIHNoZWxsIC0tPgorPHhzbDp0ZW1wbGF0ZSBuYW1lPSJlc2NhcGUuYXBvc3Ryb3BoZSI+CisgIDx4c2w6cGFyYW0gbmFtZT0iY29udGVudCIvPgorICA8eHNsOmNhbGwtdGVtcGxhdGUgbmFtZT0ic3RyaW5nLnN1YnN0Ij4KKyAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT0ic3RyaW5nIiBzZWxlY3Q9IiRjb250ZW50Ii8+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InRhcmdldCI+JzwveHNsOndpdGgtcGFyYW0+CisgICAgPHhzbDp3aXRoLXBhcmFtIG5hbWU9InJlcGxhY2VtZW50Ij5cKGFxPC94c2w6d2l0aC1wYXJhbT4KKyAgPC94c2w6Y2FsbC10ZW1wbGF0ZT4KKzwveHNsOnRlbXBsYXRlPgorCis8L3hzbDpzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYW5wYWdlLXN1cHByZXNzLXNwLnhzbCBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1zdXBwcmVzcy1zcC54c2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYzYzc2MwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFucGFnZS1zdXBwcmVzcy1zcC54c2wKQEAgLTAsMCArMSwyMSBAQAorPCEtLSBtYW5wYWdlLXN1cHByZXNzLXNwLnhzbDoKKyAgICAgc3BlY2lhbCBzZXR0aW5ncyBmb3IgbWFucGFnZXMgcmVuZGVyZWQgZnJvbSBhc2NpaWRvYytkb2Nib29rCisgICAgIGhhbmRsZXMgZXJyb25lb3VzLCBpbmxpbmUgLnNwIGluIG1hbnBhZ2Ugb3V0cHV0IG9mIHNvbWUKKyAgICAgdmVyc2lvbnMgb2YgZG9jYm9vay14c2wgLS0+Cis8eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iCisJCXZlcnNpb249IjEuMCI+CisKKzwhLS0gYXR0ZW1wdCB0byB3b3JrIGFyb3VuZCBzcHVyaW91cyAuc3AgYXQgdGhlIHRhaWwgb2YgdGhlIGxpbmUKKyAgICAgdGhhdCBzb21lIHZlcnNpb25zIG9mIGRvY2Jvb2sgc3R5bGVzaGVldHMgc2VlbSB0byBhZGQgLS0+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSJzaW1wYXJhIj4KKyAgPHhzbDp2YXJpYWJsZSBuYW1lPSJjb250ZW50Ij4KKyAgICA8eHNsOmFwcGx5LXRlbXBsYXRlcy8+CisgIDwveHNsOnZhcmlhYmxlPgorICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0ibm9ybWFsaXplLXNwYWNlKCRjb250ZW50KSIvPgorICA8eHNsOmlmIHRlc3Q9Im5vdChhbmNlc3Rvcjo6YXV0aG9yYmx1cmIpIGFuZAorICAgICAgICAgICAgICAgIG5vdChhbmNlc3Rvcjo6cGVyc29uYmx1cmIpIj4KKyAgICA8eHNsOnRleHQ+JiMxMDsmIzEwOzwveHNsOnRleHQ+CisgIDwveHNsOmlmPgorPC94c2w6dGVtcGxhdGU+CisKKzwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21lcmdlLWNvbmZpZy50eHQgYi9Eb2N1bWVudGF0aW9uL21lcmdlLWNvbmZpZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAyY2E1OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2UtY29uZmlnLnR4dApAQCAtMCwwICsxLDc3IEBACittZXJnZS5jb25mbGljdFN0eWxlOjoKKwlTcGVjaWZ5IHRoZSBzdHlsZSBpbiB3aGljaCBjb25mbGljdGVkIGh1bmtzIGFyZSB3cml0dGVuIG91dCB0bworCXdvcmtpbmcgdHJlZSBmaWxlcyB1cG9uIG1lcmdlLiAgVGhlIGRlZmF1bHQgaXMgIm1lcmdlIiwgd2hpY2gKKwlzaG93cyBhIGA8PDw8PDw8YCBjb25mbGljdCBtYXJrZXIsIGNoYW5nZXMgbWFkZSBieSBvbmUgc2lkZSwKKwlhIGA9PT09PT09YCBtYXJrZXIsIGNoYW5nZXMgbWFkZSBieSB0aGUgb3RoZXIgc2lkZSwgYW5kIHRoZW4KKwlhIGA+Pj4+Pj4+YCBtYXJrZXIuICBBbiBhbHRlcm5hdGUgc3R5bGUsICJkaWZmMyIsIGFkZHMgYSBgfHx8fHx8fGAKKwltYXJrZXIgYW5kIHRoZSBvcmlnaW5hbCB0ZXh0IGJlZm9yZSB0aGUgYD09PT09PT1gIG1hcmtlci4KKworbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW06OgorCUlmIG1lcmdlIGlzIGNhbGxlZCB3aXRob3V0IGFueSBjb21taXQgYXJndW1lbnQsIG1lcmdlIHRoZSB1cHN0cmVhbQorCWJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCBieSB1c2luZyB0aGVpciBsYXN0CisJb2JzZXJ2ZWQgdmFsdWVzIHN0b3JlZCBpbiB0aGVpciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMuCisJVGhlIHZhbHVlcyBvZiB0aGUgYGJyYW5jaC48Y3VycmVudCBicmFuY2g+Lm1lcmdlYCB0aGF0IG5hbWUgdGhlCisJYnJhbmNoZXMgYXQgdGhlIHJlbW90ZSBuYW1lZCBieSBgYnJhbmNoLjxjdXJyZW50IGJyYW5jaD4ucmVtb3RlYAorCWFyZSBjb25zdWx0ZWQsIGFuZCB0aGVuIHRoZXkgYXJlIG1hcHBlZCB2aWEgYHJlbW90ZS48cmVtb3RlPi5mZXRjaGAKKwl0byB0aGVpciBjb3JyZXNwb25kaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywgYW5kIHRoZSB0aXBzIG9mCisJdGhlc2UgdHJhY2tpbmcgYnJhbmNoZXMgYXJlIG1lcmdlZC4KKworbWVyZ2UuZmY6OgorCUJ5IGRlZmF1bHQsIEdpdCBkb2VzIG5vdCBjcmVhdGUgYW4gZXh0cmEgbWVyZ2UgY29tbWl0IHdoZW4gbWVyZ2luZworCWEgY29tbWl0IHRoYXQgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IGNvbW1pdC4gSW5zdGVhZCwgdGhlCisJdGlwIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBmYXN0LWZvcndhcmRlZC4gV2hlbiBzZXQgdG8gYGZhbHNlYCwKKwl0aGlzIHZhcmlhYmxlIHRlbGxzIEdpdCB0byBjcmVhdGUgYW4gZXh0cmEgbWVyZ2UgY29tbWl0IGluIHN1Y2gKKwlhIGNhc2UgKGVxdWl2YWxlbnQgdG8gZ2l2aW5nIHRoZSBgLS1uby1mZmAgb3B0aW9uIGZyb20gdGhlIGNvbW1hbmQKKwlsaW5lKS4gV2hlbiBzZXQgdG8gYG9ubHlgLCBvbmx5IHN1Y2ggZmFzdC1mb3J3YXJkIG1lcmdlcyBhcmUKKwlhbGxvd2VkIChlcXVpdmFsZW50IHRvIGdpdmluZyB0aGUgYC0tZmYtb25seWAgb3B0aW9uIGZyb20gdGhlCisJY29tbWFuZCBsaW5lKS4KKworaW5jbHVkZTo6Zm10LW1lcmdlLW1zZy1jb25maWcudHh0W10KKworbWVyZ2UucmVuYW1lTGltaXQ6OgorCVRoZSBudW1iZXIgb2YgZmlsZXMgdG8gY29uc2lkZXIgd2hlbiBwZXJmb3JtaW5nIHJlbmFtZSBkZXRlY3Rpb24KKwlkdXJpbmcgYSBtZXJnZTsgaWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mCisJZGlmZi5yZW5hbWVMaW1pdC4KKworbWVyZ2UucmVub3JtYWxpemU6OgorCVRlbGwgR2l0IHRoYXQgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIG9mIGZpbGVzIGluIHRoZQorCXJlcG9zaXRvcnkgaGFzIGNoYW5nZWQgb3ZlciB0aW1lIChlLmcuIGVhcmxpZXIgY29tbWl0cyByZWNvcmQKKwl0ZXh0IGZpbGVzIHdpdGggQ1JMRiBsaW5lIGVuZGluZ3MsIGJ1dCByZWNlbnQgb25lcyB1c2UgTEYgbGluZQorCWVuZGluZ3MpLiAgSW4gc3VjaCBhIHJlcG9zaXRvcnksIEdpdCBjYW4gY29udmVydCB0aGUgZGF0YQorCXJlY29yZGVkIGluIGNvbW1pdHMgdG8gYSBjYW5vbmljYWwgZm9ybSBiZWZvcmUgcGVyZm9ybWluZyBhCisJbWVyZ2UgdG8gcmVkdWNlIHVubmVjZXNzYXJ5IGNvbmZsaWN0cy4gIEZvciBtb3JlIGluZm9ybWF0aW9uLAorCXNlZSBzZWN0aW9uICJNZXJnaW5nIGJyYW5jaGVzIHdpdGggZGlmZmVyaW5nIGNoZWNraW4vY2hlY2tvdXQKKwlhdHRyaWJ1dGVzIiBpbiBsaW5rZ2l0OmdpdGF0dHJpYnV0ZXNbNV0uCisKK21lcmdlLnN0YXQ6OgorCVdoZXRoZXIgdG8gcHJpbnQgdGhlIGRpZmZzdGF0IGJldHdlZW4gT1JJR19IRUFEIGFuZCB0aGUgbWVyZ2UgcmVzdWx0CisJYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UuICBUcnVlIGJ5IGRlZmF1bHQuCisKK21lcmdlLnRvb2w6OgorCUNvbnRyb2xzIHdoaWNoIG1lcmdlIHRvb2wgaXMgdXNlZCBieSBsaW5rZ2l0OmdpdC1tZXJnZXRvb2xbMV0uCisJVGhlIGxpc3QgYmVsb3cgc2hvd3MgdGhlIHZhbGlkIGJ1aWx0LWluIHZhbHVlcy4KKwlBbnkgb3RoZXIgdmFsdWUgaXMgdHJlYXRlZCBhcyBhIGN1c3RvbSBtZXJnZSB0b29sIGFuZCByZXF1aXJlcworCXRoYXQgYSBjb3JyZXNwb25kaW5nIG1lcmdldG9vbC48dG9vbD4uY21kIHZhcmlhYmxlIGlzIGRlZmluZWQuCisKK2luY2x1ZGU6Om1lcmdldG9vbHMtbWVyZ2UudHh0W10KKworbWVyZ2UudmVyYm9zaXR5OjoKKwlDb250cm9scyB0aGUgYW1vdW50IG9mIG91dHB1dCBzaG93biBieSB0aGUgcmVjdXJzaXZlIG1lcmdlCisJc3RyYXRlZ3kuICBMZXZlbCAwIG91dHB1dHMgbm90aGluZyBleGNlcHQgYSBmaW5hbCBlcnJvcgorCW1lc3NhZ2UgaWYgY29uZmxpY3RzIHdlcmUgZGV0ZWN0ZWQuIExldmVsIDEgb3V0cHV0cyBvbmx5CisJY29uZmxpY3RzLCAyIG91dHB1dHMgY29uZmxpY3RzIGFuZCBmaWxlIGNoYW5nZXMuICBMZXZlbCA1IGFuZAorCWFib3ZlIG91dHB1dHMgZGVidWdnaW5nIGluZm9ybWF0aW9uLiAgVGhlIGRlZmF1bHQgaXMgbGV2ZWwgMi4KKwlDYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgJ0dJVF9NRVJHRV9WRVJCT1NJVFknIGVudmlyb25tZW50IHZhcmlhYmxlLgorCittZXJnZS48ZHJpdmVyPi5uYW1lOjoKKwlEZWZpbmVzIGEgaHVtYW4tcmVhZGFibGUgbmFtZSBmb3IgYSBjdXN0b20gbG93LWxldmVsCisJbWVyZ2UgZHJpdmVyLiAgU2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSBmb3IgZGV0YWlscy4KKworbWVyZ2UuPGRyaXZlcj4uZHJpdmVyOjoKKwlEZWZpbmVzIHRoZSBjb21tYW5kIHRoYXQgaW1wbGVtZW50cyBhIGN1c3RvbSBsb3ctbGV2ZWwKKwltZXJnZSBkcml2ZXIuICBTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCittZXJnZS48ZHJpdmVyPi5yZWN1cnNpdmU6OgorCU5hbWVzIGEgbG93LWxldmVsIG1lcmdlIGRyaXZlciB0byBiZSB1c2VkIHdoZW4KKwlwZXJmb3JtaW5nIGFuIGludGVybmFsIG1lcmdlIGJldHdlZW4gY29tbW9uIGFuY2VzdG9ycy4KKwlTZWUgbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZXJnZS1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA4ZTliOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWVyZ2Utb3B0aW9ucy50eHQKQEAgLTAsMCArMSwxMTYgQEAKKy0tY29tbWl0OjoKKy0tbm8tY29tbWl0OjoKKwlQZXJmb3JtIHRoZSBtZXJnZSBhbmQgY29tbWl0IHRoZSByZXN1bHQuIFRoaXMgb3B0aW9uIGNhbgorCWJlIHVzZWQgdG8gb3ZlcnJpZGUgLS1uby1jb21taXQuCisrCitXaXRoIC0tbm8tY29tbWl0IHBlcmZvcm0gdGhlIG1lcmdlIGJ1dCBwcmV0ZW5kIHRoZSBtZXJnZQorZmFpbGVkIGFuZCBkbyBub3QgYXV0b2NvbW1pdCwgdG8gZ2l2ZSB0aGUgdXNlciBhIGNoYW5jZSB0bworaW5zcGVjdCBhbmQgZnVydGhlciB0d2VhayB0aGUgbWVyZ2UgcmVzdWx0IGJlZm9yZSBjb21taXR0aW5nLgorCistLWVkaXQ6OgorLWU6OgorLS1uby1lZGl0OjoKKwlJbnZva2UgYW4gZWRpdG9yIGJlZm9yZSBjb21taXR0aW5nIHN1Y2Nlc3NmdWwgbWVjaGFuaWNhbCBtZXJnZSB0bworCWZ1cnRoZXIgZWRpdCB0aGUgYXV0by1nZW5lcmF0ZWQgbWVyZ2UgbWVzc2FnZSwgc28gdGhhdCB0aGUgdXNlcgorCWNhbiBleHBsYWluIGFuZCBqdXN0aWZ5IHRoZSBtZXJnZS4gVGhlIGAtLW5vLWVkaXRgIG9wdGlvbiBjYW4gYmUKKwl1c2VkIHRvIGFjY2VwdCB0aGUgYXV0by1nZW5lcmF0ZWQgbWVzc2FnZSAodGhpcyBpcyBnZW5lcmFsbHkKKwlkaXNjb3VyYWdlZCkuCitpZm5kZWY6OmdpdC1wdWxsW10KK1RoZSBgLS1lZGl0YCAob3IgYC1lYCkgb3B0aW9uIGlzIHN0aWxsIHVzZWZ1bCBpZiB5b3UgYXJlCitnaXZpbmcgYSBkcmFmdCBtZXNzYWdlIHdpdGggdGhlIGAtbWAgb3B0aW9uIGZyb20gdGhlIGNvbW1hbmQgbGluZQorYW5kIHdhbnQgdG8gZWRpdCBpdCBpbiB0aGUgZWRpdG9yLgorZW5kaWY6OmdpdC1wdWxsW10KKysKK09sZGVyIHNjcmlwdHMgbWF5IGRlcGVuZCBvbiB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXIgb2Ygbm90IGFsbG93aW5nIHRoZQordXNlciB0byBlZGl0IHRoZSBtZXJnZSBsb2cgbWVzc2FnZS4gVGhleSB3aWxsIHNlZSBhbiBlZGl0b3Igb3BlbmVkIHdoZW4KK3RoZXkgcnVuIGBnaXQgbWVyZ2VgLiBUbyBtYWtlIGl0IGVhc2llciB0byBhZGp1c3Qgc3VjaCBzY3JpcHRzIHRvIHRoZQordXBkYXRlZCBiZWhhdmlvdXIsIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgR0lUX01FUkdFX0FVVE9FRElUYCBjYW4gYmUKK3NldCB0byBgbm9gIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlbS4KKworLS1mZjo6CisJV2hlbiB0aGUgbWVyZ2UgcmVzb2x2ZXMgYXMgYSBmYXN0LWZvcndhcmQsIG9ubHkgdXBkYXRlIHRoZSBicmFuY2gKKwlwb2ludGVyLCB3aXRob3V0IGNyZWF0aW5nIGEgbWVyZ2UgY29tbWl0LiAgVGhpcyBpcyB0aGUgZGVmYXVsdAorCWJlaGF2aW9yLgorCistLW5vLWZmOjoKKwlDcmVhdGUgYSBtZXJnZSBjb21taXQgZXZlbiB3aGVuIHRoZSBtZXJnZSByZXNvbHZlcyBhcyBhCisJZmFzdC1mb3J3YXJkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgd2hlbiBtZXJnaW5nIGFuCisJYW5ub3RhdGVkIChhbmQgcG9zc2libHkgc2lnbmVkKSB0YWcuCisKKy0tZmYtb25seTo6CisJUmVmdXNlIHRvIG1lcmdlIGFuZCBleGl0IHdpdGggYSBub24temVybyBzdGF0dXMgdW5sZXNzIHRoZQorCWN1cnJlbnQgYEhFQURgIGlzIGFscmVhZHkgdXAtdG8tZGF0ZSBvciB0aGUgbWVyZ2UgY2FuIGJlCisJcmVzb2x2ZWQgYXMgYSBmYXN0LWZvcndhcmQuCisKKy0tbG9nWz08bj5dOjoKKy0tbm8tbG9nOjoKKwlJbiBhZGRpdGlvbiB0byBicmFuY2ggbmFtZXMsIHBvcHVsYXRlIHRoZSBsb2cgbWVzc2FnZSB3aXRoCisJb25lLWxpbmUgZGVzY3JpcHRpb25zIGZyb20gYXQgbW9zdCA8bj4gYWN0dWFsIGNvbW1pdHMgdGhhdCBhcmUgYmVpbmcKKwltZXJnZWQuIFNlZSBhbHNvIGxpbmtnaXQ6Z2l0LWZtdC1tZXJnZS1tc2dbMV0uCisrCitXaXRoIC0tbm8tbG9nIGRvIG5vdCBsaXN0IG9uZS1saW5lIGRlc2NyaXB0aW9ucyBmcm9tIHRoZQorYWN0dWFsIGNvbW1pdHMgYmVpbmcgbWVyZ2VkLgorCisKKy0tc3RhdDo6Cistbjo6CistLW5vLXN0YXQ6OgorCVNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZS4gVGhlIGRpZmZzdGF0IGlzIGFsc28KKwljb250cm9sbGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBtZXJnZS5zdGF0LgorKworV2l0aCAtbiBvciAtLW5vLXN0YXQgZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZQorbWVyZ2UuCisKKy0tc3F1YXNoOjoKKy0tbm8tc3F1YXNoOjoKKwlQcm9kdWNlIHRoZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHN0YXRlIGFzIGlmIGEgcmVhbCBtZXJnZQorCWhhcHBlbmVkIChleGNlcHQgZm9yIHRoZSBtZXJnZSBpbmZvcm1hdGlvbiksIGJ1dCBkbyBub3QgYWN0dWFsbHkKKwltYWtlIGEgY29tbWl0LCBtb3ZlIHRoZSBgSEVBRGAsIG9yIHJlY29yZCBgJEdJVF9ESVIvTUVSR0VfSEVBRGAKKwkodG8gY2F1c2UgdGhlIG5leHQgYGdpdCBjb21taXRgIGNvbW1hbmQgdG8gY3JlYXRlIGEgbWVyZ2UKKwljb21taXQpLiAgVGhpcyBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIHNpbmdsZSBjb21taXQgb24gdG9wIG9mCisJdGhlIGN1cnJlbnQgYnJhbmNoIHdob3NlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBtZXJnaW5nIGFub3RoZXIKKwlicmFuY2ggKG9yIG1vcmUgaW4gY2FzZSBvZiBhbiBvY3RvcHVzKS4KKysKK1dpdGggLS1uby1zcXVhc2ggcGVyZm9ybSB0aGUgbWVyZ2UgYW5kIGNvbW1pdCB0aGUgcmVzdWx0LiBUaGlzCitvcHRpb24gY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgLS1zcXVhc2guCisKKy1zIDxzdHJhdGVneT46OgorLS1zdHJhdGVneT08c3RyYXRlZ3k+OjoKKwlVc2UgdGhlIGdpdmVuIG1lcmdlIHN0cmF0ZWd5OyBjYW4gYmUgc3VwcGxpZWQgbW9yZSB0aGFuCisJb25jZSB0byBzcGVjaWZ5IHRoZW0gaW4gdGhlIG9yZGVyIHRoZXkgc2hvdWxkIGJlIHRyaWVkLgorCUlmIHRoZXJlIGlzIG5vIGAtc2Agb3B0aW9uLCBhIGJ1aWx0LWluIGxpc3Qgb2Ygc3RyYXRlZ2llcworCWlzIHVzZWQgaW5zdGVhZCAoJ2dpdCBtZXJnZS1yZWN1cnNpdmUnIHdoZW4gbWVyZ2luZyBhIHNpbmdsZQorCWhlYWQsICdnaXQgbWVyZ2Utb2N0b3B1cycgb3RoZXJ3aXNlKS4KKworLVggPG9wdGlvbj46OgorLS1zdHJhdGVneS1vcHRpb249PG9wdGlvbj46OgorCVBhc3MgbWVyZ2Ugc3RyYXRlZ3kgc3BlY2lmaWMgb3B0aW9uIHRocm91Z2ggdG8gdGhlIG1lcmdlCisJc3RyYXRlZ3kuCisKKy0tdmVyaWZ5LXNpZ25hdHVyZXM6OgorLS1uby12ZXJpZnktc2lnbmF0dXJlczo6CisJVmVyaWZ5IHRoYXQgdGhlIGNvbW1pdHMgYmVpbmcgbWVyZ2VkIGhhdmUgZ29vZCBhbmQgdHJ1c3RlZCBHUEcgc2lnbmF0dXJlcworCWFuZCBhYm9ydCB0aGUgbWVyZ2UgaW4gY2FzZSB0aGV5IGRvIG5vdC4KKworLS1zdW1tYXJ5OjoKKy0tbm8tc3VtbWFyeTo6CisJU3lub255bXMgdG8gLS1zdGF0IGFuZCAtLW5vLXN0YXQ7IHRoZXNlIGFyZSBkZXByZWNhdGVkIGFuZCB3aWxsIGJlCisJcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLgorCitpZm5kZWY6OmdpdC1wdWxsW10KKy1xOjoKKy0tcXVpZXQ6OgorCU9wZXJhdGUgcXVpZXRseS4gSW1wbGllcyAtLW5vLXByb2dyZXNzLgorCistdjo6CistLXZlcmJvc2U6OgorCUJlIHZlcmJvc2UuCisKKy0tcHJvZ3Jlc3M6OgorLS1uby1wcm9ncmVzczo6CisJVHVybiBwcm9ncmVzcyBvbi9vZmYgZXhwbGljaXRseS4gSWYgbmVpdGhlciBpcyBzcGVjaWZpZWQsCisJcHJvZ3Jlc3MgaXMgc2hvd24gaWYgc3RhbmRhcmQgZXJyb3IgaXMgY29ubmVjdGVkIHRvIGEgdGVybWluYWwuCisJTm90ZSB0aGF0IG5vdCBhbGwgbWVyZ2Ugc3RyYXRlZ2llcyBtYXkgc3VwcG9ydCBwcm9ncmVzcworCXJlcG9ydGluZy4KKworZW5kaWY6OmdpdC1wdWxsW10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVyZ2Utc3RyYXRlZ2llcy50eHQgYi9Eb2N1bWVudGF0aW9uL21lcmdlLXN0cmF0ZWdpZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYmQxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL21lcmdlLXN0cmF0ZWdpZXMudHh0CkBAIC0wLDAgKzEsMTIzIEBACitNRVJHRSBTVFJBVEVHSUVTCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZXJnZSBtZWNoYW5pc20gKGBnaXQgbWVyZ2VgIGFuZCBgZ2l0IHB1bGxgIGNvbW1hbmRzKSBhbGxvd3MgdGhlCitiYWNrZW5kICdtZXJnZSBzdHJhdGVnaWVzJyB0byBiZSBjaG9zZW4gd2l0aCBgLXNgIG9wdGlvbi4gIFNvbWUgc3RyYXRlZ2llcworY2FuIGFsc28gdGFrZSB0aGVpciBvd24gb3B0aW9ucywgd2hpY2ggY2FuIGJlIHBhc3NlZCBieSBnaXZpbmcgYC1YPG9wdGlvbj5gCithcmd1bWVudHMgdG8gYGdpdCBtZXJnZWAgYW5kL29yIGBnaXQgcHVsbGAuCisKK3Jlc29sdmU6OgorCVRoaXMgY2FuIG9ubHkgcmVzb2x2ZSB0d28gaGVhZHMgKGkuZS4gdGhlIGN1cnJlbnQgYnJhbmNoCisJYW5kIGFub3RoZXIgYnJhbmNoIHlvdSBwdWxsZWQgZnJvbSkgdXNpbmcgYSAzLXdheSBtZXJnZQorCWFsZ29yaXRobS4gIEl0IHRyaWVzIHRvIGNhcmVmdWxseSBkZXRlY3QgY3Jpc3MtY3Jvc3MKKwltZXJnZSBhbWJpZ3VpdGllcyBhbmQgaXMgY29uc2lkZXJlZCBnZW5lcmFsbHkgc2FmZSBhbmQKKwlmYXN0LgorCityZWN1cnNpdmU6OgorCVRoaXMgY2FuIG9ubHkgcmVzb2x2ZSB0d28gaGVhZHMgdXNpbmcgYSAzLXdheSBtZXJnZQorCWFsZ29yaXRobS4gIFdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjb21tb24KKwlhbmNlc3RvciB0aGF0IGNhbiBiZSB1c2VkIGZvciAzLXdheSBtZXJnZSwgaXQgY3JlYXRlcyBhCisJbWVyZ2VkIHRyZWUgb2YgdGhlIGNvbW1vbiBhbmNlc3RvcnMgYW5kIHVzZXMgdGhhdCBhcworCXRoZSByZWZlcmVuY2UgdHJlZSBmb3IgdGhlIDMtd2F5IG1lcmdlLiAgVGhpcyBoYXMgYmVlbgorCXJlcG9ydGVkIHRvIHJlc3VsdCBpbiBmZXdlciBtZXJnZSBjb25mbGljdHMgd2l0aG91dAorCWNhdXNpbmcgbWlzbWVyZ2VzIGJ5IHRlc3RzIGRvbmUgb24gYWN0dWFsIG1lcmdlIGNvbW1pdHMKKwl0YWtlbiBmcm9tIExpbnV4IDIuNiBrZXJuZWwgZGV2ZWxvcG1lbnQgaGlzdG9yeS4KKwlBZGRpdGlvbmFsbHkgdGhpcyBjYW4gZGV0ZWN0IGFuZCBoYW5kbGUgbWVyZ2VzIGludm9sdmluZworCXJlbmFtZXMuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1lcmdlIHN0cmF0ZWd5IHdoZW4KKwlwdWxsaW5nIG9yIG1lcmdpbmcgb25lIGJyYW5jaC4KKysKK1RoZSAncmVjdXJzaXZlJyBzdHJhdGVneSBjYW4gdGFrZSB0aGUgZm9sbG93aW5nIG9wdGlvbnM6CisKK291cnM7OworCVRoaXMgb3B0aW9uIGZvcmNlcyBjb25mbGljdGluZyBodW5rcyB0byBiZSBhdXRvLXJlc29sdmVkIGNsZWFubHkgYnkKKwlmYXZvcmluZyAnb3VyJyB2ZXJzaW9uLiAgQ2hhbmdlcyBmcm9tIHRoZSBvdGhlciB0cmVlIHRoYXQgZG8gbm90CisJY29uZmxpY3Qgd2l0aCBvdXIgc2lkZSBhcmUgcmVmbGVjdGVkIHRvIHRoZSBtZXJnZSByZXN1bHQuCisJRm9yIGEgYmluYXJ5IGZpbGUsIHRoZSBlbnRpcmUgY29udGVudHMgYXJlIHRha2VuIGZyb20gb3VyIHNpZGUuCisrCitUaGlzIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCB0aGUgJ291cnMnIG1lcmdlIHN0cmF0ZWd5LCB3aGljaCBkb2VzIG5vdAorZXZlbiBsb29rIGF0IHdoYXQgdGhlIG90aGVyIHRyZWUgY29udGFpbnMgYXQgYWxsLiAgSXQgZGlzY2FyZHMgZXZlcnl0aGluZwordGhlIG90aGVyIHRyZWUgZGlkLCBkZWNsYXJpbmcgJ291cicgaGlzdG9yeSBjb250YWlucyBhbGwgdGhhdCBoYXBwZW5lZCBpbiBpdC4KKwordGhlaXJzOzsKKwlUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiAnb3VycycuCisKK3BhdGllbmNlOzsKKwlXaXRoIHRoaXMgb3B0aW9uLCAnbWVyZ2UtcmVjdXJzaXZlJyBzcGVuZHMgYSBsaXR0bGUgZXh0cmEgdGltZQorCXRvIGF2b2lkIG1pc21lcmdlcyB0aGF0IHNvbWV0aW1lcyBvY2N1ciBkdWUgdG8gdW5pbXBvcnRhbnQKKwltYXRjaGluZyBsaW5lcyAoZS5nLiwgYnJhY2VzIGZyb20gZGlzdGluY3QgZnVuY3Rpb25zKS4gIFVzZQorCXRoaXMgd2hlbiB0aGUgYnJhbmNoZXMgdG8gYmUgbWVyZ2VkIGhhdmUgZGl2ZXJnZWQgd2lsZGx5LgorCVNlZSBhbHNvIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gYC0tcGF0aWVuY2VgLgorCitkaWZmLWFsZ29yaXRobT1bcGF0aWVuY2V8bWluaW1hbHxoaXN0b2dyYW18bXllcnNdOzsKKwlUZWxscyAnbWVyZ2UtcmVjdXJzaXZlJyB0byB1c2UgYSBkaWZmZXJlbnQgZGlmZiBhbGdvcml0aG0sIHdoaWNoCisJY2FuIGhlbHAgYXZvaWQgbWlzbWVyZ2VzIHRoYXQgb2NjdXIgZHVlIHRvIHVuaW1wb3J0YW50IG1hdGNoaW5nCisJbGluZXMgKHN1Y2ggYXMgYnJhY2VzIGZyb20gZGlzdGluY3QgZnVuY3Rpb25zKS4gIFNlZSBhbHNvCisJbGlua2dpdDpnaXQtZGlmZlsxXSBgLS1kaWZmLWFsZ29yaXRobWAuCisKK2lnbm9yZS1zcGFjZS1jaGFuZ2U7OworaWdub3JlLWFsbC1zcGFjZTs7CitpZ25vcmUtc3BhY2UtYXQtZW9sOzsKKwlUcmVhdHMgbGluZXMgd2l0aCB0aGUgaW5kaWNhdGVkIHR5cGUgb2Ygd2hpdGVzcGFjZSBjaGFuZ2UgYXMKKwl1bmNoYW5nZWQgZm9yIHRoZSBzYWtlIG9mIGEgdGhyZWUtd2F5IG1lcmdlLiAgV2hpdGVzcGFjZQorCWNoYW5nZXMgbWl4ZWQgd2l0aCBvdGhlciBjaGFuZ2VzIHRvIGEgbGluZSBhcmUgbm90IGlnbm9yZWQuCisJU2VlIGFsc28gbGlua2dpdDpnaXQtZGlmZlsxXSBgLWJgLCBgLXdgLCBhbmQKKwlgLS1pZ25vcmUtc3BhY2UtYXQtZW9sYC4KKysKKyogSWYgJ3RoZWlyJyB2ZXJzaW9uIG9ubHkgaW50cm9kdWNlcyB3aGl0ZXNwYWNlIGNoYW5nZXMgdG8gYSBsaW5lLAorICAnb3VyJyB2ZXJzaW9uIGlzIHVzZWQ7CisqIElmICdvdXInIHZlcnNpb24gaW50cm9kdWNlcyB3aGl0ZXNwYWNlIGNoYW5nZXMgYnV0ICd0aGVpcicKKyAgdmVyc2lvbiBpbmNsdWRlcyBhIHN1YnN0YW50aWFsIGNoYW5nZSwgJ3RoZWlyJyB2ZXJzaW9uIGlzIHVzZWQ7CisqIE90aGVyd2lzZSwgdGhlIG1lcmdlIHByb2NlZWRzIGluIHRoZSB1c3VhbCB3YXkuCisKK3Jlbm9ybWFsaXplOzsKKwlUaGlzIHJ1bnMgYSB2aXJ0dWFsIGNoZWNrLW91dCBhbmQgY2hlY2staW4gb2YgYWxsIHRocmVlIHN0YWdlcworCW9mIGEgZmlsZSB3aGVuIHJlc29sdmluZyBhIHRocmVlLXdheSBtZXJnZS4gIFRoaXMgb3B0aW9uIGlzCisJbWVhbnQgdG8gYmUgdXNlZCB3aGVuIG1lcmdpbmcgYnJhbmNoZXMgd2l0aCBkaWZmZXJlbnQgY2xlYW4KKwlmaWx0ZXJzIG9yIGVuZC1vZi1saW5lIG5vcm1hbGl6YXRpb24gcnVsZXMuICBTZWUgIk1lcmdpbmcKKwlicmFuY2hlcyB3aXRoIGRpZmZlcmluZyBjaGVja2luL2NoZWNrb3V0IGF0dHJpYnV0ZXMiIGluCisJbGlua2dpdDpnaXRhdHRyaWJ1dGVzWzVdIGZvciBkZXRhaWxzLgorCituby1yZW5vcm1hbGl6ZTs7CisJRGlzYWJsZXMgdGhlIGByZW5vcm1hbGl6ZWAgb3B0aW9uLiAgVGhpcyBvdmVycmlkZXMgdGhlCisJYG1lcmdlLnJlbm9ybWFsaXplYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLgorCityZW5hbWUtdGhyZXNob2xkPTxuPjs7CisJQ29udHJvbHMgdGhlIHNpbWlsYXJpdHkgdGhyZXNob2xkIHVzZWQgZm9yIHJlbmFtZSBkZXRlY3Rpb24uCisJU2VlIGFsc28gbGlua2dpdDpnaXQtZGlmZlsxXSBgLU1gLgorCitzdWJ0cmVlWz08cGF0aD5dOzsKKwlUaGlzIG9wdGlvbiBpcyBhIG1vcmUgYWR2YW5jZWQgZm9ybSBvZiAnc3VidHJlZScgc3RyYXRlZ3ksIHdoZXJlCisJdGhlIHN0cmF0ZWd5IG1ha2VzIGEgZ3Vlc3Mgb24gaG93IHR3byB0cmVlcyBtdXN0IGJlIHNoaWZ0ZWQgdG8KKwltYXRjaCB3aXRoIGVhY2ggb3RoZXIgd2hlbiBtZXJnaW5nLiAgSW5zdGVhZCwgdGhlIHNwZWNpZmllZCBwYXRoCisJaXMgcHJlZml4ZWQgKG9yIHN0cmlwcGVkIGZyb20gdGhlIGJlZ2lubmluZykgdG8gbWFrZSB0aGUgc2hhcGUgb2YKKwl0d28gdHJlZXMgdG8gbWF0Y2guCisKK29jdG9wdXM6OgorCVRoaXMgcmVzb2x2ZXMgY2FzZXMgd2l0aCBtb3JlIHRoYW4gdHdvIGhlYWRzLCBidXQgcmVmdXNlcyB0byBkbworCWEgY29tcGxleCBtZXJnZSB0aGF0IG5lZWRzIG1hbnVhbCByZXNvbHV0aW9uLiAgSXQgaXMKKwlwcmltYXJpbHkgbWVhbnQgdG8gYmUgdXNlZCBmb3IgYnVuZGxpbmcgdG9waWMgYnJhbmNoCisJaGVhZHMgdG9nZXRoZXIuICBUaGlzIGlzIHRoZSBkZWZhdWx0IG1lcmdlIHN0cmF0ZWd5IHdoZW4KKwlwdWxsaW5nIG9yIG1lcmdpbmcgbW9yZSB0aGFuIG9uZSBicmFuY2guCisKK291cnM6OgorCVRoaXMgcmVzb2x2ZXMgYW55IG51bWJlciBvZiBoZWFkcywgYnV0IHRoZSByZXN1bHRpbmcgdHJlZSBvZiB0aGUKKwltZXJnZSBpcyBhbHdheXMgdGhhdCBvZiB0aGUgY3VycmVudCBicmFuY2ggaGVhZCwgZWZmZWN0aXZlbHkKKwlpZ25vcmluZyBhbGwgY2hhbmdlcyBmcm9tIGFsbCBvdGhlciBicmFuY2hlcy4gIEl0IGlzIG1lYW50IHRvCisJYmUgdXNlZCB0byBzdXBlcnNlZGUgb2xkIGRldmVsb3BtZW50IGhpc3Rvcnkgb2Ygc2lkZQorCWJyYW5jaGVzLiAgTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIC1Yb3VycyBvcHRpb24gdG8KKwl0aGUgJ3JlY3Vyc2l2ZScgbWVyZ2Ugc3RyYXRlZ3kuCisKK3N1YnRyZWU6OgorCVRoaXMgaXMgYSBtb2RpZmllZCByZWN1cnNpdmUgc3RyYXRlZ3kuIFdoZW4gbWVyZ2luZyB0cmVlcyBBIGFuZAorCUIsIGlmIEIgY29ycmVzcG9uZHMgdG8gYSBzdWJ0cmVlIG9mIEEsIEIgaXMgZmlyc3QgYWRqdXN0ZWQgdG8KKwltYXRjaCB0aGUgdHJlZSBzdHJ1Y3R1cmUgb2YgQSwgaW5zdGVhZCBvZiByZWFkaW5nIHRoZSB0cmVlcyBhdAorCXRoZSBzYW1lIGxldmVsLiBUaGlzIGFkanVzdG1lbnQgaXMgYWxzbyBkb25lIHRvIHRoZSBjb21tb24KKwlhbmNlc3RvciB0cmVlLgorCitXaXRoIHRoZSBzdHJhdGVnaWVzIHRoYXQgdXNlIDMtd2F5IG1lcmdlIChpbmNsdWRpbmcgdGhlIGRlZmF1bHQsICdyZWN1cnNpdmUnKSwKK2lmIGEgY2hhbmdlIGlzIG1hZGUgb24gYm90aCBicmFuY2hlcywgYnV0IGxhdGVyIHJldmVydGVkIG9uIG9uZSBvZiB0aGUKK2JyYW5jaGVzLCB0aGF0IGNoYW5nZSB3aWxsIGJlIHByZXNlbnQgaW4gdGhlIG1lcmdlZCByZXN1bHQ7IHNvbWUgcGVvcGxlIGZpbmQKK3RoaXMgYmVoYXZpb3IgY29uZnVzaW5nLiAgSXQgb2NjdXJzIGJlY2F1c2Ugb25seSB0aGUgaGVhZHMgYW5kIHRoZSBtZXJnZSBiYXNlCithcmUgY29uc2lkZXJlZCB3aGVuIHBlcmZvcm1pbmcgYSBtZXJnZSwgbm90IHRoZSBpbmRpdmlkdWFsIGNvbW1pdHMuICBUaGUgbWVyZ2UKK2FsZ29yaXRobSB0aGVyZWZvcmUgY29uc2lkZXJzIHRoZSByZXZlcnRlZCBjaGFuZ2UgYXMgbm8gY2hhbmdlIGF0IGFsbCwgYW5kCitzdWJzdGl0dXRlcyB0aGUgY2hhbmdlZCB2ZXJzaW9uIGluc3RlYWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dCBiL0RvY3VtZW50YXRpb24vcHJldHR5LWZvcm1hdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MWNlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ByZXR0eS1mb3JtYXRzLnR4dApAQCAtMCwwICsxLDIzOCBAQAorUFJFVFRZIEZPUk1BVFMKKy0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSBjb21taXQgaXMgYSBtZXJnZSwgYW5kIGlmIHRoZSBwcmV0dHktZm9ybWF0CitpcyBub3QgJ29uZWxpbmUnLCAnZW1haWwnIG9yICdyYXcnLCBhbiBhZGRpdGlvbmFsIGxpbmUgaXMKK2luc2VydGVkIGJlZm9yZSB0aGUgJ0F1dGhvcjonIGxpbmUuICBUaGlzIGxpbmUgYmVnaW5zIHdpdGgKKyJNZXJnZTogIiBhbmQgdGhlIHNoYTFzIG9mIGFuY2VzdHJhbCBjb21taXRzIGFyZSBwcmludGVkLAorc2VwYXJhdGVkIGJ5IHNwYWNlcy4gIE5vdGUgdGhhdCB0aGUgbGlzdGVkIGNvbW1pdHMgbWF5IG5vdAorbmVjZXNzYXJpbHkgYmUgdGhlIGxpc3Qgb2YgdGhlICpkaXJlY3QqIHBhcmVudCBjb21taXRzIGlmIHlvdQoraGF2ZSBsaW1pdGVkIHlvdXIgdmlldyBvZiBoaXN0b3J5OiBmb3IgZXhhbXBsZSwgaWYgeW91IGFyZQorb25seSBpbnRlcmVzdGVkIGluIGNoYW5nZXMgcmVsYXRlZCB0byBhIGNlcnRhaW4gZGlyZWN0b3J5IG9yCitmaWxlLgorCitUaGVyZSBhcmUgc2V2ZXJhbCBidWlsdC1pbiBmb3JtYXRzLCBhbmQgeW91IGNhbiBkZWZpbmUKK2FkZGl0aW9uYWwgZm9ybWF0cyBieSBzZXR0aW5nIGEgcHJldHR5LjxuYW1lPgorY29uZmlnIG9wdGlvbiB0byBlaXRoZXIgYW5vdGhlciBmb3JtYXQgbmFtZSwgb3IgYQorJ2Zvcm1hdDonIHN0cmluZywgYXMgZGVzY3JpYmVkIGJlbG93IChzZWUKK2xpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuIEhlcmUgYXJlIHRoZSBkZXRhaWxzIG9mIHRoZQorYnVpbHQtaW4gZm9ybWF0czoKKworKiAnb25lbGluZScKKworCSAgPHNoYTE+IDx0aXRsZSBsaW5lPgorKworVGhpcyBpcyBkZXNpZ25lZCB0byBiZSBhcyBjb21wYWN0IGFzIHBvc3NpYmxlLgorCisqICdzaG9ydCcKKworCSAgY29tbWl0IDxzaGExPgorCSAgQXV0aG9yOiA8YXV0aG9yPgorCisJICAgICAgPHRpdGxlIGxpbmU+CisKKyogJ21lZGl1bScKKworCSAgY29tbWl0IDxzaGExPgorCSAgQXV0aG9yOiA8YXV0aG9yPgorCSAgRGF0ZTogICA8YXV0aG9yIGRhdGU+CisKKwkgICAgICA8dGl0bGUgbGluZT4KKworCSAgICAgIDxmdWxsIGNvbW1pdCBtZXNzYWdlPgorCisqICdmdWxsJworCisJICBjb21taXQgPHNoYTE+CisJICBBdXRob3I6IDxhdXRob3I+CisJICBDb21taXQ6IDxjb21taXR0ZXI+CisKKwkgICAgICA8dGl0bGUgbGluZT4KKworCSAgICAgIDxmdWxsIGNvbW1pdCBtZXNzYWdlPgorCisqICdmdWxsZXInCisKKwkgIGNvbW1pdCA8c2hhMT4KKwkgIEF1dGhvcjogICAgIDxhdXRob3I+CisJICBBdXRob3JEYXRlOiA8YXV0aG9yIGRhdGU+CisJICBDb21taXQ6ICAgICA8Y29tbWl0dGVyPgorCSAgQ29tbWl0RGF0ZTogPGNvbW1pdHRlciBkYXRlPgorCisJICAgICAgIDx0aXRsZSBsaW5lPgorCisJICAgICAgIDxmdWxsIGNvbW1pdCBtZXNzYWdlPgorCisqICdlbWFpbCcKKworCSAgRnJvbSA8c2hhMT4gPGRhdGU+CisJICBGcm9tOiA8YXV0aG9yPgorCSAgRGF0ZTogPGF1dGhvciBkYXRlPgorCSAgU3ViamVjdDogW1BBVENIXSA8dGl0bGUgbGluZT4KKworCSAgPGZ1bGwgY29tbWl0IG1lc3NhZ2U+CisKKyogJ3JhdycKKysKK1RoZSAncmF3JyBmb3JtYXQgc2hvd3MgdGhlIGVudGlyZSBjb21taXQgZXhhY3RseSBhcworc3RvcmVkIGluIHRoZSBjb21taXQgb2JqZWN0LiAgTm90YWJseSwgdGhlIFNIQS0xcyBhcmUKK2Rpc3BsYXllZCBpbiBmdWxsLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgLS1hYmJyZXYgb3IKKy0tbm8tYWJicmV2IGFyZSB1c2VkLCBhbmQgJ3BhcmVudHMnIGluZm9ybWF0aW9uIHNob3cgdGhlCit0cnVlIHBhcmVudCBjb21taXRzLCB3aXRob3V0IHRha2luZyBncmFmdHMgb3IgaGlzdG9yeQorc2ltcGxpZmljYXRpb24gaW50byBhY2NvdW50LiBOb3RlIHRoYXQgdGhpcyBmb3JtYXQgYWZmZWN0cyB0aGUgd2F5Citjb21taXRzIGFyZSBkaXNwbGF5ZWQsIGJ1dCBub3QgdGhlIHdheSB0aGUgZGlmZiBpcyBzaG93biBlLmcuIHdpdGgKK2BnaXQgbG9nIC0tcmF3YC4gVG8gZ2V0IGZ1bGwgb2JqZWN0IG5hbWVzIGluIGEgcmF3IGRpZmYgZm9ybWF0LAordXNlIGAtLW5vLWFiYnJldmAuCisKKyogJ2Zvcm1hdDo8c3RyaW5nPicKKysKK1RoZSAnZm9ybWF0OjxzdHJpbmc+JyBmb3JtYXQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoaWNoIGluZm9ybWF0aW9uCit5b3Ugd2FudCB0byBzaG93LiBJdCB3b3JrcyBhIGxpdHRsZSBiaXQgbGlrZSBwcmludGYgZm9ybWF0LAord2l0aCB0aGUgbm90YWJsZSBleGNlcHRpb24gdGhhdCB5b3UgZ2V0IGEgbmV3bGluZSB3aXRoICclbicKK2luc3RlYWQgb2YgJ1xuJy4KKysKK0UuZywgJ2Zvcm1hdDoiVGhlIGF1dGhvciBvZiAlaCB3YXMgJWFuLCAlYXIlblRoZSB0aXRsZSB3YXMgPj4lczw8JW4iJword291bGQgc2hvdyBzb21ldGhpbmcgbGlrZSB0aGlzOgorKworLS0tLS0tLQorVGhlIGF1dGhvciBvZiBmZTZlMGVlIHdhcyBKdW5pbyBDIEhhbWFubywgMjMgaG91cnMgYWdvCitUaGUgdGl0bGUgd2FzID4+dDQxMTk6IHRlc3QgYXV0b2NvbXB1dGluZyAtcDxuPiBmb3IgdHJhZGl0aW9uYWwgZGlmZiBpbnB1dC48PAorCistLS0tLS0tCisrCitUaGUgcGxhY2Vob2xkZXJzIGFyZToKKworLSAnJUgnOiBjb21taXQgaGFzaAorLSAnJWgnOiBhYmJyZXZpYXRlZCBjb21taXQgaGFzaAorLSAnJVQnOiB0cmVlIGhhc2gKKy0gJyV0JzogYWJicmV2aWF0ZWQgdHJlZSBoYXNoCistICclUCc6IHBhcmVudCBoYXNoZXMKKy0gJyVwJzogYWJicmV2aWF0ZWQgcGFyZW50IGhhc2hlcworLSAnJWFuJzogYXV0aG9yIG5hbWUKKy0gJyVhTic6IGF1dGhvciBuYW1lIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUgbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0KKyAgb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCistICclYWUnOiBhdXRob3IgZW1haWwKKy0gJyVhRSc6IGF1dGhvciBlbWFpbCAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlCisgIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQorLSAnJWFkJzogYXV0aG9yIGRhdGUgKGZvcm1hdCByZXNwZWN0cyAtLWRhdGU9IG9wdGlvbikKKy0gJyVhRCc6IGF1dGhvciBkYXRlLCBSRkMyODIyIHN0eWxlCistICclYXInOiBhdXRob3IgZGF0ZSwgcmVsYXRpdmUKKy0gJyVhdCc6IGF1dGhvciBkYXRlLCBVTklYIHRpbWVzdGFtcAorLSAnJWFpJzogYXV0aG9yIGRhdGUsIElTTyA4NjAxLWxpa2UgZm9ybWF0CistICclYUknOiBhdXRob3IgZGF0ZSwgc3RyaWN0IElTTyA4NjAxIGZvcm1hdAorLSAnJWNuJzogY29tbWl0dGVyIG5hbWUKKy0gJyVjTic6IGNvbW1pdHRlciBuYW1lIChyZXNwZWN0aW5nIC5tYWlsbWFwLCBzZWUKKyAgbGlua2dpdDpnaXQtc2hvcnRsb2dbMV0gb3IgbGlua2dpdDpnaXQtYmxhbWVbMV0pCistICclY2UnOiBjb21taXR0ZXIgZW1haWwKKy0gJyVjRSc6IGNvbW1pdHRlciBlbWFpbCAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlCisgIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQorLSAnJWNkJzogY29tbWl0dGVyIGRhdGUgKGZvcm1hdCByZXNwZWN0cyAtLWRhdGU9IG9wdGlvbikKKy0gJyVjRCc6IGNvbW1pdHRlciBkYXRlLCBSRkMyODIyIHN0eWxlCistICclY3InOiBjb21taXR0ZXIgZGF0ZSwgcmVsYXRpdmUKKy0gJyVjdCc6IGNvbW1pdHRlciBkYXRlLCBVTklYIHRpbWVzdGFtcAorLSAnJWNpJzogY29tbWl0dGVyIGRhdGUsIElTTyA4NjAxLWxpa2UgZm9ybWF0CistICclY0knOiBjb21taXR0ZXIgZGF0ZSwgc3RyaWN0IElTTyA4NjAxIGZvcm1hdAorLSAnJWQnOiByZWYgbmFtZXMsIGxpa2UgdGhlIC0tZGVjb3JhdGUgb3B0aW9uIG9mIGxpbmtnaXQ6Z2l0LWxvZ1sxXQorLSAnJUQnOiByZWYgbmFtZXMgd2l0aG91dCB0aGUgIiAoIiwgIikiIHdyYXBwaW5nLgorLSAnJWUnOiBlbmNvZGluZworLSAnJXMnOiBzdWJqZWN0CistICclZic6IHNhbml0aXplZCBzdWJqZWN0IGxpbmUsIHN1aXRhYmxlIGZvciBhIGZpbGVuYW1lCistICclYic6IGJvZHkKKy0gJyVCJzogcmF3IGJvZHkgKHVud3JhcHBlZCBzdWJqZWN0IGFuZCBib2R5KQoraWZuZGVmOjpnaXQtcmV2LWxpc3RbXQorLSAnJU4nOiBjb21taXQgbm90ZXMKK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorLSAnJUdHJzogcmF3IHZlcmlmaWNhdGlvbiBtZXNzYWdlIGZyb20gR1BHIGZvciBhIHNpZ25lZCBjb21taXQKKy0gJyVHPyc6IHNob3cgIkciIGZvciBhIEdvb2Qgc2lnbmF0dXJlLCAiQiIgZm9yIGEgQmFkIHNpZ25hdHVyZSwgIlUiIGZvciBhIGdvb2QsCisgIHVudHJ1c3RlZCBzaWduYXR1cmUgYW5kICJOIiBmb3Igbm8gc2lnbmF0dXJlCistICclR1MnOiBzaG93IHRoZSBuYW1lIG9mIHRoZSBzaWduZXIgZm9yIGEgc2lnbmVkIGNvbW1pdAorLSAnJUdLJzogc2hvdyB0aGUga2V5IHVzZWQgdG8gc2lnbiBhIHNpZ25lZCBjb21taXQKKy0gJyVnRCc6IHJlZmxvZyBzZWxlY3RvciwgZS5nLiwgYHJlZnMvc3Rhc2hAezF9YAorLSAnJWdkJzogc2hvcnRlbmVkIHJlZmxvZyBzZWxlY3RvciwgZS5nLiwgYHN0YXNoQHsxfWAKKy0gJyVnbic6IHJlZmxvZyBpZGVudGl0eSBuYW1lCistICclZ04nOiByZWZsb2cgaWRlbnRpdHkgbmFtZSAocmVzcGVjdGluZyAubWFpbG1hcCwgc2VlCisgIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdIG9yIGxpbmtnaXQ6Z2l0LWJsYW1lWzFdKQorLSAnJWdlJzogcmVmbG9nIGlkZW50aXR5IGVtYWlsCistICclZ0UnOiByZWZsb2cgaWRlbnRpdHkgZW1haWwgKHJlc3BlY3RpbmcgLm1haWxtYXAsIHNlZQorICBsaW5rZ2l0OmdpdC1zaG9ydGxvZ1sxXSBvciBsaW5rZ2l0OmdpdC1ibGFtZVsxXSkKKy0gJyVncyc6IHJlZmxvZyBzdWJqZWN0CistICclQ3JlZCc6IHN3aXRjaCBjb2xvciB0byByZWQKKy0gJyVDZ3JlZW4nOiBzd2l0Y2ggY29sb3IgdG8gZ3JlZW4KKy0gJyVDYmx1ZSc6IHN3aXRjaCBjb2xvciB0byBibHVlCistICclQ3Jlc2V0JzogcmVzZXQgY29sb3IKKy0gJyVDKC4uLiknOiBjb2xvciBzcGVjaWZpY2F0aW9uLCBhcyBkZXNjcmliZWQgaW4gY29sb3IuYnJhbmNoLiogY29uZmlnIG9wdGlvbjsKKyAgYWRkaW5nIGBhdXRvLGAgYXQgdGhlIGJlZ2lubmluZyB3aWxsIGVtaXQgY29sb3Igb25seSB3aGVuIGNvbG9ycyBhcmUKKyAgZW5hYmxlZCBmb3IgbG9nIG91dHB1dCAoYnkgYGNvbG9yLmRpZmZgLCBgY29sb3IudWlgLCBvciBgLS1jb2xvcmAsIGFuZAorICByZXNwZWN0aW5nIHRoZSBgYXV0b2Agc2V0dGluZ3Mgb2YgdGhlIGZvcm1lciBpZiB3ZSBhcmUgZ29pbmcgdG8gYQorICB0ZXJtaW5hbCkuIGBhdXRvYCBhbG9uZSAoaS5lLiBgJUMoYXV0bylgKSB3aWxsIHR1cm4gb24gYXV0byBjb2xvcmluZworICBvbiB0aGUgbmV4dCBwbGFjZWhvbGRlcnMgdW50aWwgdGhlIGNvbG9yIGlzIHN3aXRjaGVkIGFnYWluLgorLSAnJW0nOiBsZWZ0LCByaWdodCBvciBib3VuZGFyeSBtYXJrCistICclbic6IG5ld2xpbmUKKy0gJyUlJzogYSByYXcgJyUnCistICcleDAwJzogcHJpbnQgYSBieXRlIGZyb20gYSBoZXggY29kZQorLSAnJXcoWzx3PlssPGkxPlssPGkyPl1dXSknOiBzd2l0Y2ggbGluZSB3cmFwcGluZywgbGlrZSB0aGUgLXcgb3B0aW9uIG9mCisgIGxpbmtnaXQ6Z2l0LXNob3J0bG9nWzFdLgorLSAnJTwoPE4+Wyx0cnVuY3xsdHJ1bmN8bXRydW5jXSknOiBtYWtlIHRoZSBuZXh0IHBsYWNlaG9sZGVyIHRha2UgYXQKKyAgbGVhc3QgTiBjb2x1bW5zLCBwYWRkaW5nIHNwYWNlcyBvbiB0aGUgcmlnaHQgaWYgbmVjZXNzYXJ5LgorICBPcHRpb25hbGx5IHRydW5jYXRlIGF0IHRoZSBiZWdpbm5pbmcgKGx0cnVuYyksIHRoZSBtaWRkbGUgKG10cnVuYykKKyAgb3IgdGhlIGVuZCAodHJ1bmMpIGlmIHRoZSBvdXRwdXQgaXMgbG9uZ2VyIHRoYW4gTiBjb2x1bW5zLgorICBOb3RlIHRoYXQgdHJ1bmNhdGluZyBvbmx5IHdvcmtzIGNvcnJlY3RseSB3aXRoIE4gPj0gMi4KKy0gJyU8fCg8Tj4pJzogbWFrZSB0aGUgbmV4dCBwbGFjZWhvbGRlciB0YWtlIGF0IGxlYXN0IHVudGlsIE50aAorICBjb2x1bW5zLCBwYWRkaW5nIHNwYWNlcyBvbiB0aGUgcmlnaHQgaWYgbmVjZXNzYXJ5CistICclPig8Tj4pJywgJyU+fCg8Tj4pJzogc2ltaWxhciB0byAnJTwoPE4+KScsICclPHwoPE4+KScKKyAgcmVzcGVjdGl2ZWx5LCBidXQgcGFkZGluZyBzcGFjZXMgb24gdGhlIGxlZnQKKy0gJyU+Pig8Tj4pJywgJyU+PnwoPE4+KSc6IHNpbWlsYXIgdG8gJyU+KDxOPiknLCAnJT58KDxOPiknCisgIHJlc3BlY3RpdmVseSwgZXhjZXB0IHRoYXQgaWYgdGhlIG5leHQgcGxhY2Vob2xkZXIgdGFrZXMgbW9yZSBzcGFjZXMKKyAgdGhhbiBnaXZlbiBhbmQgdGhlcmUgYXJlIHNwYWNlcyBvbiBpdHMgbGVmdCwgdXNlIHRob3NlIHNwYWNlcworLSAnJT48KDxOPiknLCAnJT48fCg8Tj4pJzogc2ltaWxhciB0byAnJSA8KDxOPiknLCAnJTx8KDxOPiknCisgIHJlc3BlY3RpdmVseSwgYnV0IHBhZGRpbmcgYm90aCBzaWRlcyAoaS5lLiB0aGUgdGV4dCBpcyBjZW50ZXJlZCkKKworTk9URTogU29tZSBwbGFjZWhvbGRlcnMgbWF5IGRlcGVuZCBvbiBvdGhlciBvcHRpb25zIGdpdmVuIHRvIHRoZQorcmV2aXNpb24gdHJhdmVyc2FsIGVuZ2luZS4gRm9yIGV4YW1wbGUsIHRoZSBgJWcqYCByZWZsb2cgb3B0aW9ucyB3aWxsCitpbnNlcnQgYW4gZW1wdHkgc3RyaW5nIHVubGVzcyB3ZSBhcmUgdHJhdmVyc2luZyByZWZsb2cgZW50cmllcyAoZS5nLiwgYnkKK2BnaXQgbG9nIC1nYCkuIFRoZSBgJWRgIGFuZCBgJURgIHBsYWNlaG9sZGVycyB3aWxsIHVzZSB0aGUgInNob3J0IgorZGVjb3JhdGlvbiBmb3JtYXQgaWYgYC0tZGVjb3JhdGVgIHdhcyBub3QgYWxyZWFkeSBwcm92aWRlZCBvbiB0aGUgY29tbWFuZAorbGluZS4KKworSWYgeW91IGFkZCBhIGArYCAocGx1cyBzaWduKSBhZnRlciAnJScgb2YgYSBwbGFjZWhvbGRlciwgYSBsaW5lLWZlZWQKK2lzIGluc2VydGVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZXhwYW5zaW9uIGlmIGFuZCBvbmx5IGlmIHRoZQorcGxhY2Vob2xkZXIgZXhwYW5kcyB0byBhIG5vbi1lbXB0eSBzdHJpbmcuCisKK0lmIHlvdSBhZGQgYSBgLWAgKG1pbnVzIHNpZ24pIGFmdGVyICclJyBvZiBhIHBsYWNlaG9sZGVyLCBsaW5lLWZlZWRzIHRoYXQKK2ltbWVkaWF0ZWx5IHByZWNlZGUgdGhlIGV4cGFuc2lvbiBhcmUgZGVsZXRlZCBpZiBhbmQgb25seSBpZiB0aGUKK3BsYWNlaG9sZGVyIGV4cGFuZHMgdG8gYW4gZW1wdHkgc3RyaW5nLgorCitJZiB5b3UgYWRkIGEgYCBgIChzcGFjZSkgYWZ0ZXIgJyUnIG9mIGEgcGxhY2Vob2xkZXIsIGEgc3BhY2UKK2lzIGluc2VydGVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZXhwYW5zaW9uIGlmIGFuZCBvbmx5IGlmIHRoZQorcGxhY2Vob2xkZXIgZXhwYW5kcyB0byBhIG5vbi1lbXB0eSBzdHJpbmcuCisKKyogJ3Rmb3JtYXQ6JworKworVGhlICd0Zm9ybWF0OicgZm9ybWF0IHdvcmtzIGV4YWN0bHkgbGlrZSAnZm9ybWF0OicsIGV4Y2VwdCB0aGF0IGl0Citwcm92aWRlcyAidGVybWluYXRvciIgc2VtYW50aWNzIGluc3RlYWQgb2YgInNlcGFyYXRvciIgc2VtYW50aWNzLiBJbgorb3RoZXIgd29yZHMsIGVhY2ggY29tbWl0IGhhcyB0aGUgbWVzc2FnZSB0ZXJtaW5hdG9yIGNoYXJhY3RlciAodXN1YWxseSBhCituZXdsaW5lKSBhcHBlbmRlZCwgcmF0aGVyIHRoYW4gYSBzZXBhcmF0b3IgcGxhY2VkIGJldHdlZW4gZW50cmllcy4KK1RoaXMgbWVhbnMgdGhhdCB0aGUgZmluYWwgZW50cnkgb2YgYSBzaW5nbGUtbGluZSBmb3JtYXQgd2lsbCBiZSBwcm9wZXJseQordGVybWluYXRlZCB3aXRoIGEgbmV3IGxpbmUsIGp1c3QgYXMgdGhlICJvbmVsaW5lIiBmb3JtYXQgZG9lcy4KK0ZvciBleGFtcGxlOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLTIgLS1wcmV0dHk9Zm9ybWF0OiVoIDRkYTQ1YmVmIFwKKyAgfCBwZXJsIC1wZSAnJF8gLj0gIiAtLSBOTyBORVdMSU5FXG4iIHVubGVzcyAvXG4vJworNGRhNDViZQorNzEzNDk3MyAtLSBOTyBORVdMSU5FCisKKyQgZ2l0IGxvZyAtMiAtLXByZXR0eT10Zm9ybWF0OiVoIDRkYTQ1YmVmIFwKKyAgfCBwZXJsIC1wZSAnJF8gLj0gIiAtLSBOTyBORVdMSU5FXG4iIHVubGVzcyAvXG4vJworNGRhNDViZQorNzEzNDk3MworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitJbiBhZGRpdGlvbiwgYW55IHVucmVjb2duaXplZCBzdHJpbmcgdGhhdCBoYXMgYSBgJWAgaW4gaXQgaXMgaW50ZXJwcmV0ZWQKK2FzIGlmIGl0IGhhcyBgdGZvcm1hdDpgIGluIGZyb250IG9mIGl0LiAgRm9yIGV4YW1wbGUsIHRoZXNlIHR3byBhcmUKK2VxdWl2YWxlbnQ6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtMiAtLXByZXR0eT10Zm9ybWF0OiVoIDRkYTQ1YmVmCiskIGdpdCBsb2cgLTIgLS1wcmV0dHk9JWggNGRhNDViZWYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3ByZXR0eS1vcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjY1OWFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wcmV0dHktb3B0aW9ucy50eHQKQEAgLTAsMCArMSw4MiBAQAorLS1wcmV0dHlbPTxmb3JtYXQ+XTo6CistLWZvcm1hdD08Zm9ybWF0Pjo6CisKKwlQcmV0dHktcHJpbnQgdGhlIGNvbnRlbnRzIG9mIHRoZSBjb21taXQgbG9ncyBpbiBhIGdpdmVuIGZvcm1hdCwKKwl3aGVyZSAnPGZvcm1hdD4nIGNhbiBiZSBvbmUgb2YgJ29uZWxpbmUnLCAnc2hvcnQnLCAnbWVkaXVtJywKKwknZnVsbCcsICdmdWxsZXInLCAnZW1haWwnLCAncmF3JywgJ2Zvcm1hdDo8c3RyaW5nPicKKwlhbmQgJ3Rmb3JtYXQ6PHN0cmluZz4nLiAgV2hlbiAnPGZvcm1hdD4nIGlzIG5vbmUgb2YgdGhlIGFib3ZlLAorCWFuZCBoYXMgJyVwbGFjZWhvbGRlcicgaW4gaXQsIGl0IGFjdHMgYXMgaWYKKwknLS1wcmV0dHk9dGZvcm1hdDo8Zm9ybWF0Picgd2VyZSBnaXZlbi4KKysKK1NlZSB0aGUgIlBSRVRUWSBGT1JNQVRTIiBzZWN0aW9uIGZvciBzb21lIGFkZGl0aW9uYWwgZGV0YWlscyBmb3IgZWFjaAorZm9ybWF0LiAgV2hlbiAnPTxmb3JtYXQ+JyBwYXJ0IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICdtZWRpdW0nLgorKworTm90ZTogeW91IGNhbiBzcGVjaWZ5IHRoZSBkZWZhdWx0IHByZXR0eSBmb3JtYXQgaW4gdGhlIHJlcG9zaXRvcnkKK2NvbmZpZ3VyYXRpb24gKHNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0pLgorCistLWFiYnJldi1jb21taXQ6OgorCUluc3RlYWQgb2Ygc2hvd2luZyB0aGUgZnVsbCA0MC1ieXRlIGhleGFkZWNpbWFsIGNvbW1pdCBvYmplY3QKKwluYW1lLCBzaG93IG9ubHkgYSBwYXJ0aWFsIHByZWZpeC4gIE5vbiBkZWZhdWx0IG51bWJlciBvZgorCWRpZ2l0cyBjYW4gYmUgc3BlY2lmaWVkIHdpdGggIi0tYWJicmV2PTxuPiIgKHdoaWNoIGFsc28gbW9kaWZpZXMKKwlkaWZmIG91dHB1dCwgaWYgaXQgaXMgZGlzcGxheWVkKS4KKysKK1RoaXMgc2hvdWxkIG1ha2UgIi0tcHJldHR5PW9uZWxpbmUiIGEgd2hvbGUgbG90IG1vcmUgcmVhZGFibGUgZm9yCitwZW9wbGUgdXNpbmcgODAtY29sdW1uIHRlcm1pbmFscy4KKworLS1uby1hYmJyZXYtY29tbWl0OjoKKwlTaG93IHRoZSBmdWxsIDQwLWJ5dGUgaGV4YWRlY2ltYWwgY29tbWl0IG9iamVjdCBuYW1lLiBUaGlzIG5lZ2F0ZXMKKwlgLS1hYmJyZXYtY29tbWl0YCBhbmQgdGhvc2Ugb3B0aW9ucyB3aGljaCBpbXBseSBpdCBzdWNoIGFzCisJIi0tb25lbGluZSIuIEl0IGFsc28gb3ZlcnJpZGVzIHRoZSAnbG9nLmFiYnJldkNvbW1pdCcgdmFyaWFibGUuCisKKy0tb25lbGluZTo6CisJVGhpcyBpcyBhIHNob3J0aGFuZCBmb3IgIi0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IgorCXVzZWQgdG9nZXRoZXIuCisKKy0tZW5jb2Rpbmc9PGVuY29kaW5nPjo6CisJVGhlIGNvbW1pdCBvYmplY3RzIHJlY29yZCB0aGUgZW5jb2RpbmcgdXNlZCBmb3IgdGhlIGxvZyBtZXNzYWdlCisJaW4gdGhlaXIgZW5jb2RpbmcgaGVhZGVyOyB0aGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZQorCWNvbW1hbmQgdG8gcmUtY29kZSB0aGUgY29tbWl0IGxvZyBtZXNzYWdlIGluIHRoZSBlbmNvZGluZworCXByZWZlcnJlZCBieSB0aGUgdXNlci4gIEZvciBub24gcGx1bWJpbmcgY29tbWFuZHMgdGhpcworCWRlZmF1bHRzIHRvIFVURi04LiBOb3RlIHRoYXQgaWYgYW4gb2JqZWN0IGNsYWltcyB0byBiZSBlbmNvZGVkCisJaW4gYFhgIGFuZCB3ZSBhcmUgb3V0cHV0dGluZyBpbiBgWGAsIHdlIHdpbGwgb3V0cHV0IHRoZSBvYmplY3QKKwl2ZXJiYXRpbTsgdGhpcyBtZWFucyB0aGF0IGludmFsaWQgc2VxdWVuY2VzIGluIHRoZSBvcmlnaW5hbAorCWNvbW1pdCBtYXkgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQuCisKK2lmbmRlZjo6Z2l0LXJldi1saXN0W10KKy0tbm90ZXNbPTxyZWY+XTo6CisJU2hvdyB0aGUgbm90ZXMgKHNlZSBsaW5rZ2l0OmdpdC1ub3Rlc1sxXSkgdGhhdCBhbm5vdGF0ZSB0aGUKKwljb21taXQsIHdoZW4gc2hvd2luZyB0aGUgY29tbWl0IGxvZyBtZXNzYWdlLiAgVGhpcyBpcyB0aGUgZGVmYXVsdAorCWZvciBgZ2l0IGxvZ2AsIGBnaXQgc2hvd2AgYW5kIGBnaXQgd2hhdGNoYW5nZWRgIGNvbW1hbmRzIHdoZW4KKwl0aGVyZSBpcyBubyBgLS1wcmV0dHlgLCBgLS1mb3JtYXRgLCBvciBgLS1vbmVsaW5lYCBvcHRpb24gZ2l2ZW4KKwlvbiB0aGUgY29tbWFuZCBsaW5lLgorKworQnkgZGVmYXVsdCwgdGhlIG5vdGVzIHNob3duIGFyZSBmcm9tIHRoZSBub3RlcyByZWZzIGxpc3RlZCBpbiB0aGUKKydjb3JlLm5vdGVzUmVmJyBhbmQgJ25vdGVzLmRpc3BsYXlSZWYnIHZhcmlhYmxlcyAob3IgY29ycmVzcG9uZGluZworZW52aXJvbm1lbnQgb3ZlcnJpZGVzKS4gU2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSBmb3IgbW9yZSBkZXRhaWxzLgorKworV2l0aCBhbiBvcHRpb25hbCAnPHJlZj4nIGFyZ3VtZW50LCBzaG93IHRoaXMgbm90ZXMgcmVmIGluc3RlYWQgb2YgdGhlCitkZWZhdWx0IG5vdGVzIHJlZihzKS4gVGhlIHJlZiBzcGVjaWZpZXMgdGhlIGZ1bGwgcmVmbmFtZSB3aGVuIGl0IGJlZ2lucword2l0aCBgcmVmcy9ub3Rlcy9gOyB3aGVuIGl0IGJlZ2lucyB3aXRoIGBub3Rlcy9gLCBgcmVmcy9gIGFuZCBvdGhlcndpc2UKK2ByZWZzL25vdGVzL2AgaXMgcHJlZml4ZWQgdG8gZm9ybSBhIGZ1bGwgbmFtZSBvZiB0aGUgcmVmLgorKworTXVsdGlwbGUgLS1ub3RlcyBvcHRpb25zIGNhbiBiZSBjb21iaW5lZCB0byBjb250cm9sIHdoaWNoIG5vdGVzIGFyZQorYmVpbmcgZGlzcGxheWVkLiBFeGFtcGxlczogIi0tbm90ZXM9Zm9vIiB3aWxsIHNob3cgb25seSBub3RlcyBmcm9tCisicmVmcy9ub3Rlcy9mb28iOyAiLS1ub3Rlcz1mb28gLS1ub3RlcyIgd2lsbCBzaG93IGJvdGggbm90ZXMgZnJvbQorInJlZnMvbm90ZXMvZm9vIiBhbmQgZnJvbSB0aGUgZGVmYXVsdCBub3RlcyByZWYocykuCisKKy0tbm8tbm90ZXM6OgorCURvIG5vdCBzaG93IG5vdGVzLiBUaGlzIG5lZ2F0ZXMgdGhlIGFib3ZlIGAtLW5vdGVzYCBvcHRpb24sIGJ5CisJcmVzZXR0aW5nIHRoZSBsaXN0IG9mIG5vdGVzIHJlZnMgZnJvbSB3aGljaCBub3RlcyBhcmUgc2hvd24uCisJT3B0aW9ucyBhcmUgcGFyc2VkIGluIHRoZSBvcmRlciBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCBzbyBlLmcuCisJIi0tbm90ZXMgLS1ub3Rlcz1mb28gLS1uby1ub3RlcyAtLW5vdGVzPWJhciIgd2lsbCBvbmx5IHNob3cgbm90ZXMKKwlmcm9tICJyZWZzL25vdGVzL2JhciIuCisKKy0tc2hvdy1ub3Rlc1s9PHJlZj5dOjoKKy0tW25vLV1zdGFuZGFyZC1ub3Rlczo6CisJVGhlc2Ugb3B0aW9ucyBhcmUgZGVwcmVjYXRlZC4gVXNlIHRoZSBhYm92ZSAtLW5vdGVzLy0tbm8tbm90ZXMKKwlvcHRpb25zIGluc3RlYWQuCitlbmRpZjo6Z2l0LXJldi1saXN0W10KKworLS1zaG93LXNpZ25hdHVyZTo6CisJQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIGEgc2lnbmVkIGNvbW1pdCBvYmplY3QgYnkgcGFzc2luZyB0aGUgc2lnbmF0dXJlCisJdG8gYGdwZyAtLXZlcmlmeWAgYW5kIHNob3cgdGhlIG91dHB1dC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcHVsbC1mZXRjaC1wYXJhbS50eHQgYi9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYmJmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3B1bGwtZmV0Y2gtcGFyYW0udHh0CkBAIC0wLDAgKzEsNzEgQEAKKzxyZXBvc2l0b3J5Pjo6CisJVGhlICJyZW1vdGUiIHJlcG9zaXRvcnkgdGhhdCBpcyB0aGUgc291cmNlIG9mIGEgZmV0Y2gKKwlvciBwdWxsIG9wZXJhdGlvbi4gIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBlaXRoZXIgYSBVUkwKKwkoc2VlIHRoZSBzZWN0aW9uIDw8VVJMUyxHSVQgVVJMUz4+IGJlbG93KSBvciB0aGUgbmFtZQorCW9mIGEgcmVtb3RlIChzZWUgdGhlIHNlY3Rpb24gPDxSRU1PVEVTLFJFTU9URVM+PiBiZWxvdykuCisKK2lmbmRlZjo6Z2l0LXB1bGxbXQorPGdyb3VwPjo6CisJQSBuYW1lIHJlZmVycmluZyB0byBhIGxpc3Qgb2YgcmVwb3NpdG9yaWVzIGFzIHRoZSB2YWx1ZQorCW9mIHJlbW90ZXMuPGdyb3VwPiBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCShTZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKS4KK2VuZGlmOjpnaXQtcHVsbFtdCisKKzxyZWZzcGVjPjo6CisJU3BlY2lmaWVzIHdoaWNoIHJlZnMgdG8gZmV0Y2ggYW5kIHdoaWNoIGxvY2FsIHJlZnMgdG8gdXBkYXRlLgorCVdoZW4gbm8gPHJlZnNwZWM+cyBhcHBlYXIgb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlIHJlZnMgdG8gZmV0Y2gKKwlhcmUgcmVhZCBmcm9tIGByZW1vdGUuPHJlcG9zaXRvcnk+LmZldGNoYCB2YXJpYWJsZXMgaW5zdGVhZAoraWZuZGVmOjpnaXQtcHVsbFtdCisJKHNlZSA8PENSVEIsQ09ORklHVVJFRCBSRU1PVEUtVFJBQ0tJTkcgQlJBTkNIRVM+PiBiZWxvdykuCitlbmRpZjo6Z2l0LXB1bGxbXQoraWZkZWY6OmdpdC1wdWxsW10KKwkoc2VlIGxpbmtnaXQ6Z2l0LWZldGNoWzFdKS4KK2VuZGlmOjpnaXQtcHVsbFtdCisrCitUaGUgZm9ybWF0IG9mIGEgPHJlZnNwZWM+IHBhcmFtZXRlciBpcyBhbiBvcHRpb25hbCBwbHVzCitgK2AsIGZvbGxvd2VkIGJ5IHRoZSBzb3VyY2UgcmVmIDxzcmM+LCBmb2xsb3dlZAorYnkgYSBjb2xvbiBgOmAsIGZvbGxvd2VkIGJ5IHRoZSBkZXN0aW5hdGlvbiByZWYgPGRzdD4uCitUaGUgY29sb24gY2FuIGJlIG9taXR0ZWQgd2hlbiA8ZHN0PiBpcyBlbXB0eS4KKysKK2B0YWcgPHRhZz5gIG1lYW5zIHRoZSBzYW1lIGFzIGByZWZzL3RhZ3MvPHRhZz46cmVmcy90YWdzLzx0YWc+YDsKK2l0IHJlcXVlc3RzIGZldGNoaW5nIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGdpdmVuIHRhZy4KKysKK1RoZSByZW1vdGUgcmVmIHRoYXQgbWF0Y2hlcyA8c3JjPgoraXMgZmV0Y2hlZCwgYW5kIGlmIDxkc3Q+IGlzIG5vdCBlbXB0eSBzdHJpbmcsIHRoZSBsb2NhbAorcmVmIHRoYXQgbWF0Y2hlcyBpdCBpcyBmYXN0LWZvcndhcmRlZCB1c2luZyA8c3JjPi4KK0lmIHRoZSBvcHRpb25hbCBwbHVzIGArYCBpcyB1c2VkLCB0aGUgbG9jYWwgcmVmCitpcyB1cGRhdGVkIGV2ZW4gaWYgaXQgZG9lcyBub3QgcmVzdWx0IGluIGEgZmFzdC1mb3J3YXJkCit1cGRhdGUuCisrCitbTk9URV0KK1doZW4gdGhlIHJlbW90ZSBicmFuY2ggeW91IHdhbnQgdG8gZmV0Y2ggaXMga25vd24gdG8KK2JlIHJld291bmQgYW5kIHJlYmFzZWQgcmVndWxhcmx5LCBpdCBpcyBleHBlY3RlZCB0aGF0CitpdHMgbmV3IHRpcCB3aWxsIG5vdCBiZSBkZXNjZW5kYW50IG9mIGl0cyBwcmV2aW91cyB0aXAKKyhhcyBzdG9yZWQgaW4geW91ciByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIHRoZSBsYXN0IHRpbWUKK3lvdSBmZXRjaGVkKS4gIFlvdSB3b3VsZCB3YW50Cit0byB1c2UgdGhlIGArYCBzaWduIHRvIGluZGljYXRlIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcword2lsbCBiZSBuZWVkZWQgZm9yIHN1Y2ggYnJhbmNoZXMuICBUaGVyZSBpcyBubyB3YXkgdG8KK2RldGVybWluZSBvciBkZWNsYXJlIHRoYXQgYSBicmFuY2ggd2lsbCBiZSBtYWRlIGF2YWlsYWJsZQoraW4gYSByZXBvc2l0b3J5IHdpdGggdGhpcyBiZWhhdmlvcjsgdGhlIHB1bGxpbmcgdXNlciBzaW1wbHkKK211c3Qga25vdyB0aGlzIGlzIHRoZSBleHBlY3RlZCB1c2FnZSBwYXR0ZXJuIGZvciBhIGJyYW5jaC4KK2lmZGVmOjpnaXQtcHVsbFtdCisrCitbTk9URV0KK1RoZXJlIGlzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGxpc3RpbmcgbXVsdGlwbGUgPHJlZnNwZWM+CitkaXJlY3RseSBvbiAnZ2l0IHB1bGwnIGNvbW1hbmQgbGluZSBhbmQgaGF2aW5nIG11bHRpcGxlCitgcmVtb3RlLjxyZXBvc2l0b3J5Pi5mZXRjaGAgZW50cmllcyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24KK2ZvciBhIDxyZXBvc2l0b3J5PiBhbmQgcnVubmluZyBhCisnZ2l0IHB1bGwnIGNvbW1hbmQgd2l0aG91dCBhbnkgZXhwbGljaXQgPHJlZnNwZWM+IHBhcmFtZXRlcnMuCis8cmVmc3BlYz5zIGxpc3RlZCBleHBsaWNpdGx5IG9uIHRoZSBjb21tYW5kIGxpbmUgYXJlIGFsd2F5cworbWVyZ2VkIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoIGFmdGVyIGZldGNoaW5nLiAgSW4gb3RoZXIgd29yZHMsCitpZiB5b3UgbGlzdCBtb3JlIHRoYW4gb25lIHJlbW90ZSByZWYsICdnaXQgcHVsbCcgd2lsbCBjcmVhdGUKK2FuIE9jdG9wdXMgbWVyZ2UuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IGRvIG5vdCBsaXN0IGFueQorZXhwbGljaXQgPHJlZnNwZWM+IHBhcmFtZXRlciBvbiB0aGUgY29tbWFuZCBsaW5lLCAnZ2l0IHB1bGwnCit3aWxsIGZldGNoIGFsbCB0aGUgPHJlZnNwZWM+cyBpdCBmaW5kcyBpbiB0aGUKK2ByZW1vdGUuPHJlcG9zaXRvcnk+LmZldGNoYCBjb25maWd1cmF0aW9uIGFuZCBtZXJnZQorb25seSB0aGUgZmlyc3QgPHJlZnNwZWM+IGZvdW5kIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLgorVGhpcyBpcyBiZWNhdXNlIG1ha2luZyBhbgorT2N0b3B1cyBmcm9tIHJlbW90ZSByZWZzIGlzIHJhcmVseSBkb25lLCB3aGlsZSBrZWVwaW5nIHRyYWNrCitvZiBtdWx0aXBsZSByZW1vdGUgaGVhZHMgaW4gb25lLWdvIGJ5IGZldGNoaW5nIG1vcmUgdGhhbiBvbmUKK2lzIG9mdGVuIHVzZWZ1bC4KK2VuZGlmOjpnaXQtcHVsbFtdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Jldi1saXN0LW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjAwOWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9yZXYtbGlzdC1vcHRpb25zLnR4dApAQCAtMCwwICsxLDg2MSBAQAorQ29tbWl0IExpbWl0aW5nCit+fn5+fn5+fn5+fn5+fn4KKworQmVzaWRlcyBzcGVjaWZ5aW5nIGEgcmFuZ2Ugb2YgY29tbWl0cyB0aGF0IHNob3VsZCBiZSBsaXN0ZWQgdXNpbmcgdGhlCitzcGVjaWFsIG5vdGF0aW9ucyBleHBsYWluZWQgaW4gdGhlIGRlc2NyaXB0aW9uLCBhZGRpdGlvbmFsIGNvbW1pdAorbGltaXRpbmcgbWF5IGJlIGFwcGxpZWQuCisKK1VzaW5nIG1vcmUgb3B0aW9ucyBnZW5lcmFsbHkgZnVydGhlciBsaW1pdHMgdGhlIG91dHB1dCAoZS5nLgorYC0tc2luY2U9PGRhdGUxPmAgbGltaXRzIHRvIGNvbW1pdHMgbmV3ZXIgdGhhbiBgPGRhdGUxPmAsIGFuZCB1c2luZyBpdAord2l0aCBgLS1ncmVwPTxwYXR0ZXJuPmAgZnVydGhlciBsaW1pdHMgdG8gY29tbWl0cyB3aG9zZSBsb2cgbWVzc2FnZQoraGFzIGEgbGluZSB0aGF0IG1hdGNoZXMgYDxwYXR0ZXJuPmApLCB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgorCitOb3RlIHRoYXQgdGhlc2UgYXJlIGFwcGxpZWQgYmVmb3JlIGNvbW1pdAorb3JkZXJpbmcgYW5kIGZvcm1hdHRpbmcgb3B0aW9ucywgc3VjaCBhcyBgLS1yZXZlcnNlYC4KKworLS0KKworLTxudW1iZXI+OjoKKy1uIDxudW1iZXI+OjoKKy0tbWF4LWNvdW50PTxudW1iZXI+OjoKKwlMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgdG8gb3V0cHV0LgorCistLXNraXA9PG51bWJlcj46OgorCVNraXAgJ251bWJlcicgY29tbWl0cyBiZWZvcmUgc3RhcnRpbmcgdG8gc2hvdyB0aGUgY29tbWl0IG91dHB1dC4KKworLS1zaW5jZT08ZGF0ZT46OgorLS1hZnRlcj08ZGF0ZT46OgorCVNob3cgY29tbWl0cyBtb3JlIHJlY2VudCB0aGFuIGEgc3BlY2lmaWMgZGF0ZS4KKworLS11bnRpbD08ZGF0ZT46OgorLS1iZWZvcmU9PGRhdGU+OjoKKwlTaG93IGNvbW1pdHMgb2xkZXIgdGhhbiBhIHNwZWNpZmljIGRhdGUuCisKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQorLS1tYXgtYWdlPTx0aW1lc3RhbXA+OjoKKy0tbWluLWFnZT08dGltZXN0YW1wPjo6CisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIHNwZWNpZmllZCB0aW1lIHJhbmdlLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKKy0tYXV0aG9yPTxwYXR0ZXJuPjo6CistLWNvbW1pdHRlcj08cGF0dGVybj46OgorCUxpbWl0IHRoZSBjb21taXRzIG91dHB1dCB0byBvbmVzIHdpdGggYXV0aG9yL2NvbW1pdHRlcgorCWhlYWRlciBsaW5lcyB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgcGF0dGVybiAocmVndWxhcgorCWV4cHJlc3Npb24pLiAgV2l0aCBtb3JlIHRoYW4gb25lIGAtLWF1dGhvcj08cGF0dGVybj5gLAorCWNvbW1pdHMgd2hvc2UgYXV0aG9yIG1hdGNoZXMgYW55IG9mIHRoZSBnaXZlbiBwYXR0ZXJucyBhcmUKKwljaG9zZW4gKHNpbWlsYXJseSBmb3IgbXVsdGlwbGUgYC0tY29tbWl0dGVyPTxwYXR0ZXJuPmApLgorCistLWdyZXAtcmVmbG9nPTxwYXR0ZXJuPjo6CisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgd2l0aCByZWZsb2cgZW50cmllcyB0aGF0CisJbWF0Y2ggdGhlIHNwZWNpZmllZCBwYXR0ZXJuIChyZWd1bGFyIGV4cHJlc3Npb24pLiBXaXRoCisJbW9yZSB0aGFuIG9uZSBgLS1ncmVwLXJlZmxvZ2AsIGNvbW1pdHMgd2hvc2UgcmVmbG9nIG1lc3NhZ2UKKwltYXRjaGVzIGFueSBvZiB0aGUgZ2l2ZW4gcGF0dGVybnMgYXJlIGNob3Nlbi4gIEl0IGlzIGFuCisJZXJyb3IgdG8gdXNlIHRoaXMgb3B0aW9uIHVubGVzcyBgLS13YWxrLXJlZmxvZ3NgIGlzIGluIHVzZS4KKworLS1ncmVwPTxwYXR0ZXJuPjo6CisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgd2l0aCBsb2cgbWVzc2FnZSB0aGF0CisJbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHBhdHRlcm4gKHJlZ3VsYXIgZXhwcmVzc2lvbikuICBXaXRoCisJbW9yZSB0aGFuIG9uZSBgLS1ncmVwPTxwYXR0ZXJuPmAsIGNvbW1pdHMgd2hvc2UgbWVzc2FnZQorCW1hdGNoZXMgYW55IG9mIHRoZSBnaXZlbiBwYXR0ZXJucyBhcmUgY2hvc2VuIChidXQgc2VlCisJYC0tYWxsLW1hdGNoYCkuCitpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCisrCitXaGVuIGAtLXNob3ctbm90ZXNgIGlzIGluIGVmZmVjdCwgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgbm90ZXMgaXMKK21hdGNoZWQgYXMgaWYgaXQgd2VyZSBwYXJ0IG9mIHRoZSBsb2cgbWVzc2FnZS4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLWFsbC1tYXRjaDo6CisJTGltaXQgdGhlIGNvbW1pdHMgb3V0cHV0IHRvIG9uZXMgdGhhdCBtYXRjaCBhbGwgZ2l2ZW4gYC0tZ3JlcGAsCisJaW5zdGVhZCBvZiBvbmVzIHRoYXQgbWF0Y2ggYXQgbGVhc3Qgb25lLgorCistLWludmVydC1ncmVwOjoKKwlMaW1pdCB0aGUgY29tbWl0cyBvdXRwdXQgdG8gb25lcyB3aXRoIGxvZyBtZXNzYWdlIHRoYXQgZG8gbm90CisJbWF0Y2ggdGhlIHBhdHRlcm4gc3BlY2lmaWVkIHdpdGggYC0tZ3JlcD08cGF0dGVybj5gLgorCistaTo6CistLXJlZ2V4cC1pZ25vcmUtY2FzZTo6CisJTWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaW1pdGluZyBwYXR0ZXJucyB3aXRob3V0IHJlZ2FyZCB0byBsZXR0ZXIKKwljYXNlLgorCistLWJhc2ljLXJlZ2V4cDo6CisJQ29uc2lkZXIgdGhlIGxpbWl0aW5nIHBhdHRlcm5zIHRvIGJlIGJhc2ljIHJlZ3VsYXIgZXhwcmVzc2lvbnM7CisJdGhpcyBpcyB0aGUgZGVmYXVsdC4KKworLUU6OgorLS1leHRlbmRlZC1yZWdleHA6OgorCUNvbnNpZGVyIHRoZSBsaW1pdGluZyBwYXR0ZXJucyB0byBiZSBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb25zCisJaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBiYXNpYyByZWd1bGFyIGV4cHJlc3Npb25zLgorCistRjo6CistLWZpeGVkLXN0cmluZ3M6OgorCUNvbnNpZGVyIHRoZSBsaW1pdGluZyBwYXR0ZXJucyB0byBiZSBmaXhlZCBzdHJpbmdzIChkb24ndCBpbnRlcnByZXQKKwlwYXR0ZXJuIGFzIGEgcmVndWxhciBleHByZXNzaW9uKS4KKworLS1wZXJsLXJlZ2V4cDo6CisJQ29uc2lkZXIgdGhlIGxpbWl0aW5nIHBhdHRlcm5zIHRvIGJlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zLgorCVJlcXVpcmVzIGxpYnBjcmUgdG8gYmUgY29tcGlsZWQgaW4uCisKKy0tcmVtb3ZlLWVtcHR5OjoKKwlTdG9wIHdoZW4gYSBnaXZlbiBwYXRoIGRpc2FwcGVhcnMgZnJvbSB0aGUgdHJlZS4KKworLS1tZXJnZXM6OgorCVByaW50IG9ubHkgbWVyZ2UgY29tbWl0cy4gVGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIGAtLW1pbi1wYXJlbnRzPTJgLgorCistLW5vLW1lcmdlczo6CisJRG8gbm90IHByaW50IGNvbW1pdHMgd2l0aCBtb3JlIHRoYW4gb25lIHBhcmVudC4gVGhpcyBpcworCWV4YWN0bHkgdGhlIHNhbWUgYXMgYC0tbWF4LXBhcmVudHM9MWAuCisKKy0tbWluLXBhcmVudHM9PG51bWJlcj46OgorLS1tYXgtcGFyZW50cz08bnVtYmVyPjo6CistLW5vLW1pbi1wYXJlbnRzOjoKKy0tbm8tbWF4LXBhcmVudHM6OgorCVNob3cgb25seSBjb21taXRzIHdoaWNoIGhhdmUgYXQgbGVhc3QgKG9yIGF0IG1vc3QpIHRoYXQgbWFueSBwYXJlbnQKKwljb21taXRzLiBJbiBwYXJ0aWN1bGFyLCBgLS1tYXgtcGFyZW50cz0xYCBpcyB0aGUgc2FtZSBhcyBgLS1uby1tZXJnZXNgLAorCWAtLW1pbi1wYXJlbnRzPTJgIGlzIHRoZSBzYW1lIGFzIGAtLW1lcmdlc2AuICBgLS1tYXgtcGFyZW50cz0wYAorCWdpdmVzIGFsbCByb290IGNvbW1pdHMgYW5kIGAtLW1pbi1wYXJlbnRzPTNgIGFsbCBvY3RvcHVzIG1lcmdlcy4KKysKK2AtLW5vLW1pbi1wYXJlbnRzYCBhbmQgYC0tbm8tbWF4LXBhcmVudHNgIHJlc2V0IHRoZXNlIGxpbWl0cyAodG8gbm8gbGltaXQpCithZ2Fpbi4gIEVxdWl2YWxlbnQgZm9ybXMgYXJlIGAtLW1pbi1wYXJlbnRzPTBgIChhbnkgY29tbWl0IGhhcyAwIG9yIG1vcmUKK3BhcmVudHMpIGFuZCBgLS1tYXgtcGFyZW50cz0tMWAgKG5lZ2F0aXZlIG51bWJlcnMgZGVub3RlIG5vIHVwcGVyIGxpbWl0KS4KKworLS1maXJzdC1wYXJlbnQ6OgorCUZvbGxvdyBvbmx5IHRoZSBmaXJzdCBwYXJlbnQgY29tbWl0IHVwb24gc2VlaW5nIGEgbWVyZ2UKKwljb21taXQuICBUaGlzIG9wdGlvbiBjYW4gZ2l2ZSBhIGJldHRlciBvdmVydmlldyB3aGVuCisJdmlld2luZyB0aGUgZXZvbHV0aW9uIG9mIGEgcGFydGljdWxhciB0b3BpYyBicmFuY2gsCisJYmVjYXVzZSBtZXJnZXMgaW50byBhIHRvcGljIGJyYW5jaCB0ZW5kIHRvIGJlIG9ubHkgYWJvdXQKKwlhZGp1c3RpbmcgdG8gdXBkYXRlZCB1cHN0cmVhbSBmcm9tIHRpbWUgdG8gdGltZSwgYW5kCisJdGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBpZ25vcmUgdGhlIGluZGl2aWR1YWwgY29tbWl0cworCWJyb3VnaHQgaW4gdG8geW91ciBoaXN0b3J5IGJ5IHN1Y2ggYSBtZXJnZS4gQ2Fubm90IGJlCisJY29tYmluZWQgd2l0aCAtLWJpc2VjdC4KKworLS1ub3Q6OgorCVJldmVyc2VzIHRoZSBtZWFuaW5nIG9mIHRoZSAne2NhcmV0fScgcHJlZml4IChvciBsYWNrIHRoZXJlb2YpCisJZm9yIGFsbCBmb2xsb3dpbmcgcmV2aXNpb24gc3BlY2lmaWVycywgdXAgdG8gdGhlIG5leHQgYC0tbm90YC4KKworLS1hbGw6OgorCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIGluIGByZWZzL2AgYXJlIGxpc3RlZCBvbiB0aGUKKwljb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4KKworLS1icmFuY2hlc1s9PHBhdHRlcm4+XTo6CisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIHJlZnMgaW4gYHJlZnMvaGVhZHNgIGFyZSBsaXN0ZWQKKwlvbiB0aGUgY29tbWFuZCBsaW5lIGFzICc8Y29tbWl0PicuIElmICc8cGF0dGVybj4nIGlzIGdpdmVuLCBsaW1pdAorCWJyYW5jaGVzIHRvIG9uZXMgbWF0Y2hpbmcgZ2l2ZW4gc2hlbGwgZ2xvYi4gSWYgcGF0dGVybiBsYWNrcyAnPycsCisJJ3thc3Rlcmlza30nLCBvciAnWycsICcve2FzdGVyaXNrfScgYXQgdGhlIGVuZCBpcyBpbXBsaWVkLgorCistLXRhZ3NbPTxwYXR0ZXJuPl06OgorCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIGluIGByZWZzL3RhZ3NgIGFyZSBsaXN0ZWQKKwlvbiB0aGUgY29tbWFuZCBsaW5lIGFzICc8Y29tbWl0PicuIElmICc8cGF0dGVybj4nIGlzIGdpdmVuLCBsaW1pdAorCXRhZ3MgdG8gb25lcyBtYXRjaGluZyBnaXZlbiBzaGVsbCBnbG9iLiBJZiBwYXR0ZXJuIGxhY2tzICc/JywgJ3thc3Rlcmlza30nLAorCW9yICdbJywgJy97YXN0ZXJpc2t9JyBhdCB0aGUgZW5kIGlzIGltcGxpZWQuCisKKy0tcmVtb3Rlc1s9PHBhdHRlcm4+XTo6CisJUHJldGVuZCBhcyBpZiBhbGwgdGhlIHJlZnMgaW4gYHJlZnMvcmVtb3Rlc2AgYXJlIGxpc3RlZAorCW9uIHRoZSBjb21tYW5kIGxpbmUgYXMgJzxjb21taXQ+Jy4gSWYgJzxwYXR0ZXJuPicgaXMgZ2l2ZW4sIGxpbWl0CisJcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIHRvIG9uZXMgbWF0Y2hpbmcgZ2l2ZW4gc2hlbGwgZ2xvYi4KKwlJZiBwYXR0ZXJuIGxhY2tzICc/JywgJ3thc3Rlcmlza30nLCBvciAnWycsICcve2FzdGVyaXNrfScgYXQgdGhlIGVuZCBpcyBpbXBsaWVkLgorCistLWdsb2I9PGdsb2ItcGF0dGVybj46OgorCVByZXRlbmQgYXMgaWYgYWxsIHRoZSByZWZzIG1hdGNoaW5nIHNoZWxsIGdsb2IgJzxnbG9iLXBhdHRlcm4+JworCWFyZSBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSBhcyAnPGNvbW1pdD4nLiBMZWFkaW5nICdyZWZzLycsCisJaXMgYXV0b21hdGljYWxseSBwcmVwZW5kZWQgaWYgbWlzc2luZy4gSWYgcGF0dGVybiBsYWNrcyAnPycsICd7YXN0ZXJpc2t9JywKKwlvciAnWycsICcve2FzdGVyaXNrfScgYXQgdGhlIGVuZCBpcyBpbXBsaWVkLgorCistLWV4Y2x1ZGU9PGdsb2ItcGF0dGVybj46OgorCisJRG8gbm90IGluY2x1ZGUgcmVmcyBtYXRjaGluZyAnPGdsb2ItcGF0dGVybj4nIHRoYXQgdGhlIG5leHQgYC0tYWxsYCwKKwlgLS1icmFuY2hlc2AsIGAtLXRhZ3NgLCBgLS1yZW1vdGVzYCwgb3IgYC0tZ2xvYmAgd291bGQgb3RoZXJ3aXNlCisJY29uc2lkZXIuIFJlcGV0aXRpb25zIG9mIHRoaXMgb3B0aW9uIGFjY3VtdWxhdGUgZXhjbHVzaW9uIHBhdHRlcm5zCisJdXAgdG8gdGhlIG5leHQgYC0tYWxsYCwgYC0tYnJhbmNoZXNgLCBgLS10YWdzYCwgYC0tcmVtb3Rlc2AsIG9yCisJYC0tZ2xvYmAgb3B0aW9uIChvdGhlciBvcHRpb25zIG9yIGFyZ3VtZW50cyBkbyBub3QgY2xlYXIKKwlhY2N1bXVsYXRlZCBwYXR0ZXJucykuCisrCitUaGUgcGF0dGVybnMgZ2l2ZW4gc2hvdWxkIG5vdCBiZWdpbiB3aXRoIGByZWZzL2hlYWRzYCwgYHJlZnMvdGFnc2AsIG9yCitgcmVmcy9yZW1vdGVzYCB3aGVuIGFwcGxpZWQgdG8gYC0tYnJhbmNoZXNgLCBgLS10YWdzYCwgb3IgYC0tcmVtb3Rlc2AsCityZXNwZWN0aXZlbHksIGFuZCB0aGV5IG11c3QgYmVnaW4gd2l0aCBgcmVmcy9gIHdoZW4gYXBwbGllZCB0byBgLS1nbG9iYAorb3IgYC0tYWxsYC4gSWYgYSB0cmFpbGluZyAnL3thc3Rlcmlza30nIGlzIGludGVuZGVkLCBpdCBtdXN0IGJlIGdpdmVuCitleHBsaWNpdGx5LgorCistLXJlZmxvZzo6CisJUHJldGVuZCBhcyBpZiBhbGwgb2JqZWN0cyBtZW50aW9uZWQgYnkgcmVmbG9ncyBhcmUgbGlzdGVkIG9uIHRoZQorCWNvbW1hbmQgbGluZSBhcyBgPGNvbW1pdD5gLgorCistLWlnbm9yZS1taXNzaW5nOjoKKwlVcG9uIHNlZWluZyBhbiBpbnZhbGlkIG9iamVjdCBuYW1lIGluIHRoZSBpbnB1dCwgcHJldGVuZCBhcyBpZgorCXRoZSBiYWQgaW5wdXQgd2FzIG5vdCBnaXZlbi4KKworaWZuZGVmOjpnaXQtcmV2LWxpc3RbXQorLS1iaXNlY3Q6OgorCVByZXRlbmQgYXMgaWYgdGhlIGJhZCBiaXNlY3Rpb24gcmVmIGByZWZzL2Jpc2VjdC9iYWRgCisJd2FzIGxpc3RlZCBhbmQgYXMgaWYgaXQgd2FzIGZvbGxvd2VkIGJ5IGAtLW5vdGAgYW5kIHRoZSBnb29kCisJYmlzZWN0aW9uIHJlZnMgYHJlZnMvYmlzZWN0L2dvb2QtKmAgb24gdGhlIGNvbW1hbmQKKwlsaW5lLiBDYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtLWZpcnN0LXBhcmVudC4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLXN0ZGluOjoKKwlJbiBhZGRpdGlvbiB0byB0aGUgJzxjb21taXQ+JyBsaXN0ZWQgb24gdGhlIGNvbW1hbmQKKwlsaW5lLCByZWFkIHRoZW0gZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQuIElmIGEgJy0tJyBzZXBhcmF0b3IgaXMKKwlzZWVuLCBzdG9wIHJlYWRpbmcgY29tbWl0cyBhbmQgc3RhcnQgcmVhZGluZyBwYXRocyB0byBsaW1pdCB0aGUKKwlyZXN1bHQuCisKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQorLS1xdWlldDo6CisJRG9uJ3QgcHJpbnQgYW55dGhpbmcgdG8gc3RhbmRhcmQgb3V0cHV0LiAgVGhpcyBmb3JtCisJaXMgcHJpbWFyaWx5IG1lYW50IHRvIGFsbG93IHRoZSBjYWxsZXIgdG8KKwl0ZXN0IHRoZSBleGl0IHN0YXR1cyB0byBzZWUgaWYgYSByYW5nZSBvZiBvYmplY3RzIGlzIGZ1bGx5CisJY29ubmVjdGVkIChvciBub3QpLiAgSXQgaXMgZmFzdGVyIHRoYW4gcmVkaXJlY3Rpbmcgc3Rkb3V0CisJdG8gYC9kZXYvbnVsbGAgYXMgdGhlIG91dHB1dCBkb2VzIG5vdCBoYXZlIHRvIGJlIGZvcm1hdHRlZC4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLWNoZXJyeS1tYXJrOjoKKwlMaWtlIGAtLWNoZXJyeS1waWNrYCAoc2VlIGJlbG93KSBidXQgbWFyayBlcXVpdmFsZW50IGNvbW1pdHMKKwl3aXRoIGA9YCByYXRoZXIgdGhhbiBvbWl0dGluZyB0aGVtLCBhbmQgaW5lcXVpdmFsZW50IG9uZXMgd2l0aCBgK2AuCisKKy0tY2hlcnJ5LXBpY2s6OgorCU9taXQgYW55IGNvbW1pdCB0aGF0IGludHJvZHVjZXMgdGhlIHNhbWUgY2hhbmdlIGFzCisJYW5vdGhlciBjb21taXQgb24gdGhlIGBgb3RoZXIgc2lkZScnIHdoZW4gdGhlIHNldCBvZgorCWNvbW1pdHMgYXJlIGxpbWl0ZWQgd2l0aCBzeW1tZXRyaWMgZGlmZmVyZW5jZS4KKysKK0ZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gYnJhbmNoZXMsIGBBYCBhbmQgYEJgLCBhIHVzdWFsIHdheQordG8gbGlzdCBhbGwgY29tbWl0cyBvbiBvbmx5IG9uZSBzaWRlIG9mIHRoZW0gaXMgd2l0aAorYC0tbGVmdC1yaWdodGAgKHNlZSB0aGUgZXhhbXBsZSBiZWxvdyBpbiB0aGUgZGVzY3JpcHRpb24gb2YKK3RoZSBgLS1sZWZ0LXJpZ2h0YCBvcHRpb24pLiBIb3dldmVyLCBpdCBzaG93cyB0aGUgY29tbWl0cyB0aGF0IHdlcmUKK2NoZXJyeS1waWNrZWQgZnJvbSB0aGUgb3RoZXIgYnJhbmNoIChmb3IgZXhhbXBsZSwgYGAzcmQgb24gYicnIG1heSBiZQorY2hlcnJ5LXBpY2tlZCBmcm9tIGJyYW5jaCBBKS4gV2l0aCB0aGlzIG9wdGlvbiwgc3VjaCBwYWlycyBvZiBjb21taXRzIGFyZQorZXhjbHVkZWQgZnJvbSB0aGUgb3V0cHV0LgorCistLWxlZnQtb25seTo6CistLXJpZ2h0LW9ubHk6OgorCUxpc3Qgb25seSBjb21taXRzIG9uIHRoZSByZXNwZWN0aXZlIHNpZGUgb2YgYSBzeW1tZXRyaWMgcmFuZ2UsCisJaS5lLiBvbmx5IHRob3NlIHdoaWNoIHdvdWxkIGJlIG1hcmtlZCBgPGAgcmVzcC4gYD5gIGJ5CisJYC0tbGVmdC1yaWdodGAuCisrCitGb3IgZXhhbXBsZSwgYC0tY2hlcnJ5LXBpY2sgLS1yaWdodC1vbmx5IEEuLi5CYCBvbWl0cyB0aG9zZQorY29tbWl0cyBmcm9tIGBCYCB3aGljaCBhcmUgaW4gYEFgIG9yIGFyZSBwYXRjaC1lcXVpdmFsZW50IHRvIGEgY29tbWl0IGluCitgQWAuIEluIG90aGVyIHdvcmRzLCB0aGlzIGxpc3RzIHRoZSBgK2AgY29tbWl0cyBmcm9tIGBnaXQgY2hlcnJ5IEEgQmAuCitNb3JlIHByZWNpc2VseSwgYC0tY2hlcnJ5LXBpY2sgLS1yaWdodC1vbmx5IC0tbm8tbWVyZ2VzYCBnaXZlcyB0aGUgZXhhY3QKK2xpc3QuCisKKy0tY2hlcnJ5OjoKKwlBIHN5bm9ueW0gZm9yIGAtLXJpZ2h0LW9ubHkgLS1jaGVycnktbWFyayAtLW5vLW1lcmdlc2A7IHVzZWZ1bCB0bworCWxpbWl0IHRoZSBvdXRwdXQgdG8gdGhlIGNvbW1pdHMgb24gb3VyIHNpZGUgYW5kIG1hcmsgdGhvc2UgdGhhdAorCWhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoZSBvdGhlciBzaWRlIG9mIGEgZm9ya2VkIGhpc3Rvcnkgd2l0aAorCWBnaXQgbG9nIC0tY2hlcnJ5IHVwc3RyZWFtLi4ubXlicmFuY2hgLCBzaW1pbGFyIHRvCisJYGdpdCBjaGVycnkgdXBzdHJlYW0gbXlicmFuY2hgLgorCistZzo6CistLXdhbGstcmVmbG9nczo6CisJSW5zdGVhZCBvZiB3YWxraW5nIHRoZSBjb21taXQgYW5jZXN0cnkgY2hhaW4sIHdhbGsKKwlyZWZsb2cgZW50cmllcyBmcm9tIHRoZSBtb3N0IHJlY2VudCBvbmUgdG8gb2xkZXIgb25lcy4KKwlXaGVuIHRoaXMgb3B0aW9uIGlzIHVzZWQgeW91IGNhbm5vdCBzcGVjaWZ5IGNvbW1pdHMgdG8KKwlleGNsdWRlICh0aGF0IGlzLCAne2NhcmV0fWNvbW1pdCcsICdjb21taXQxLi5jb21taXQyJywKKwlhbmQgJ2NvbW1pdDFcLi4uY29tbWl0Micgbm90YXRpb25zIGNhbm5vdCBiZSB1c2VkKS4KKysKK1dpdGggYC0tcHJldHR5YCBmb3JtYXQgb3RoZXIgdGhhbiBgb25lbGluZWAgKGZvciBvYnZpb3VzIHJlYXNvbnMpLAordGhpcyBjYXVzZXMgdGhlIG91dHB1dCB0byBoYXZlIHR3byBleHRyYSBsaW5lcyBvZiBpbmZvcm1hdGlvbgordGFrZW4gZnJvbSB0aGUgcmVmbG9nLiAgQnkgZGVmYXVsdCwgJ2NvbW1pdEBce050aH0nIG5vdGF0aW9uIGlzCit1c2VkIGluIHRoZSBvdXRwdXQuICBXaGVuIHRoZSBzdGFydGluZyBjb21taXQgaXMgc3BlY2lmaWVkIGFzCisnY29tbWl0QFx7bm93fScsIG91dHB1dCBhbHNvIHVzZXMgJ2NvbW1pdEBce3RpbWVzdGFtcH0nIG5vdGF0aW9uCitpbnN0ZWFkLiAgVW5kZXIgYC0tcHJldHR5PW9uZWxpbmVgLCB0aGUgY29tbWl0IG1lc3NhZ2UgaXMKK3ByZWZpeGVkIHdpdGggdGhpcyBpbmZvcm1hdGlvbiBvbiB0aGUgc2FtZSBsaW5lLgorVGhpcyBvcHRpb24gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0tcmV2ZXJzZWAuCitTZWUgYWxzbyBsaW5rZ2l0OmdpdC1yZWZsb2dbMV0uCisKKy0tbWVyZ2U6OgorCUFmdGVyIGEgZmFpbGVkIG1lcmdlLCBzaG93IHJlZnMgdGhhdCB0b3VjaCBmaWxlcyBoYXZpbmcgYQorCWNvbmZsaWN0IGFuZCBkb24ndCBleGlzdCBvbiBhbGwgaGVhZHMgdG8gbWVyZ2UuCisKKy0tYm91bmRhcnk6OgorCU91dHB1dCBleGNsdWRlZCBib3VuZGFyeSBjb21taXRzLiBCb3VuZGFyeSBjb21taXRzIGFyZQorCXByZWZpeGVkIHdpdGggYC1gLgorCitpZmRlZjo6Z2l0LXJldi1saXN0W10KKy0tdXNlLWJpdG1hcC1pbmRleDo6CisKKwlUcnkgdG8gc3BlZWQgdXAgdGhlIHRyYXZlcnNhbCB1c2luZyB0aGUgcGFjayBiaXRtYXAgaW5kZXggKGlmCisJb25lIGlzIGF2YWlsYWJsZSkuIE5vdGUgdGhhdCB3aGVuIHRyYXZlcnNpbmcgd2l0aCBgLS1vYmplY3RzYCwKKwl0cmVlcyBhbmQgYmxvYnMgd2lsbCBub3QgaGF2ZSB0aGVpciBhc3NvY2lhdGVkIHBhdGggcHJpbnRlZC4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLQorCitIaXN0b3J5IFNpbXBsaWZpY2F0aW9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NvbWV0aW1lcyB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBwYXJ0cyBvZiB0aGUgaGlzdG9yeSwgZm9yIGV4YW1wbGUgdGhlCitjb21taXRzIG1vZGlmeWluZyBhIHBhcnRpY3VsYXIgPHBhdGg+LiBCdXQgdGhlcmUgYXJlIHR3byBwYXJ0cyBvZgorJ0hpc3RvcnkgU2ltcGxpZmljYXRpb24nLCBvbmUgcGFydCBpcyBzZWxlY3RpbmcgdGhlIGNvbW1pdHMgYW5kIHRoZSBvdGhlcgoraXMgaG93IHRvIGRvIGl0LCBhcyB0aGVyZSBhcmUgdmFyaW91cyBzdHJhdGVnaWVzIHRvIHNpbXBsaWZ5IHRoZSBoaXN0b3J5LgorCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgc2VsZWN0IHRoZSBjb21taXRzIHRvIGJlIHNob3duOgorCis8cGF0aHM+OjoKKwlDb21taXRzIG1vZGlmeWluZyB0aGUgZ2l2ZW4gPHBhdGhzPiBhcmUgc2VsZWN0ZWQuCisKKy0tc2ltcGxpZnktYnktZGVjb3JhdGlvbjo6CisJQ29tbWl0cyB0aGF0IGFyZSByZWZlcnJlZCBieSBzb21lIGJyYW5jaCBvciB0YWcgYXJlIHNlbGVjdGVkLgorCitOb3RlIHRoYXQgZXh0cmEgY29tbWl0cyBjYW4gYmUgc2hvd24gdG8gZ2l2ZSBhIG1lYW5pbmdmdWwgaGlzdG9yeS4KKworVGhlIGZvbGxvd2luZyBvcHRpb25zIGFmZmVjdCB0aGUgd2F5IHRoZSBzaW1wbGlmaWNhdGlvbiBpcyBwZXJmb3JtZWQ6CisKK0RlZmF1bHQgbW9kZTo6CisJU2ltcGxpZmllcyB0aGUgaGlzdG9yeSB0byB0aGUgc2ltcGxlc3QgaGlzdG9yeSBleHBsYWluaW5nIHRoZQorCWZpbmFsIHN0YXRlIG9mIHRoZSB0cmVlLiBTaW1wbGVzdCBiZWNhdXNlIGl0IHBydW5lcyBzb21lIHNpZGUKKwlicmFuY2hlcyBpZiB0aGUgZW5kIHJlc3VsdCBpcyB0aGUgc2FtZSAoaS5lLiBtZXJnaW5nIGJyYW5jaGVzCisJd2l0aCB0aGUgc2FtZSBjb250ZW50KQorCistLWZ1bGwtaGlzdG9yeTo6CisJU2FtZSBhcyB0aGUgZGVmYXVsdCBtb2RlLCBidXQgZG9lcyBub3QgcHJ1bmUgc29tZSBoaXN0b3J5LgorCistLWRlbnNlOjoKKwlPbmx5IHRoZSBzZWxlY3RlZCBjb21taXRzIGFyZSBzaG93biwgcGx1cyBzb21lIHRvIGhhdmUgYQorCW1lYW5pbmdmdWwgaGlzdG9yeS4KKworLS1zcGFyc2U6OgorCUFsbCBjb21taXRzIGluIHRoZSBzaW1wbGlmaWVkIGhpc3RvcnkgYXJlIHNob3duLgorCistLXNpbXBsaWZ5LW1lcmdlczo6CisJQWRkaXRpb25hbCBvcHRpb24gdG8gYC0tZnVsbC1oaXN0b3J5YCB0byByZW1vdmUgc29tZSBuZWVkbGVzcworCW1lcmdlcyBmcm9tIHRoZSByZXN1bHRpbmcgaGlzdG9yeSwgYXMgdGhlcmUgYXJlIG5vIHNlbGVjdGVkCisJY29tbWl0cyBjb250cmlidXRpbmcgdG8gdGhpcyBtZXJnZS4KKworLS1hbmNlc3RyeS1wYXRoOjoKKwlXaGVuIGdpdmVuIGEgcmFuZ2Ugb2YgY29tbWl0cyB0byBkaXNwbGF5IChlLmcuICdjb21taXQxLi5jb21taXQyJworCW9yICdjb21taXQyIHtjYXJldH1jb21taXQxJyksIG9ubHkgZGlzcGxheSBjb21taXRzIHRoYXQgZXhpc3QKKwlkaXJlY3RseSBvbiB0aGUgYW5jZXN0cnkgY2hhaW4gYmV0d2VlbiB0aGUgJ2NvbW1pdDEnIGFuZAorCSdjb21taXQyJywgaS5lLiBjb21taXRzIHRoYXQgYXJlIGJvdGggZGVzY2VuZGFudHMgb2YgJ2NvbW1pdDEnLAorCWFuZCBhbmNlc3RvcnMgb2YgJ2NvbW1pdDInLgorCitBIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb24gZm9sbG93cy4KKworU3VwcG9zZSB5b3Ugc3BlY2lmaWVkIGBmb29gIGFzIHRoZSA8cGF0aHM+LiAgV2Ugc2hhbGwgY2FsbCBjb21taXRzCit0aGF0IG1vZGlmeSBgZm9vYCAhVFJFRVNBTUUsIGFuZCB0aGUgcmVzdCBUUkVFU0FNRS4gIChJbiBhIGRpZmYKK2ZpbHRlcmVkIGZvciBgZm9vYCwgdGhleSBsb29rIGRpZmZlcmVudCBhbmQgZXF1YWwsIHJlc3BlY3RpdmVseS4pCisKK0luIHRoZSBmb2xsb3dpbmcsIHdlIHdpbGwgYWx3YXlzIHJlZmVyIHRvIHRoZSBzYW1lIGV4YW1wbGUgaGlzdG9yeSB0bworaWxsdXN0cmF0ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBzaW1wbGlmaWNhdGlvbiBzZXR0aW5ncy4gIFdlIGFzc3VtZQordGhhdCB5b3UgYXJlIGZpbHRlcmluZyBmb3IgYSBmaWxlIGBmb29gIGluIHRoaXMgY29tbWl0IGdyYXBoOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgIC4tQS0tLU0tLS1OLS0tTy0tLVAtLS1RCisJIC8gICAgIC8gICAvICAgLyAgIC8gICAvCisJSSAgICAgQiAgIEMgICBEICAgRSAgIFkKKwkgXCAgIC8gICAvICAgLyAgIC8gICAvCisJICBgLS0tLS0tLS0tLS0tLScgICBYCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGhvcml6b250YWwgbGluZSBvZiBoaXN0b3J5IEEtLS1RIGlzIHRha2VuIHRvIGJlIHRoZSBmaXJzdCBwYXJlbnQgb2YKK2VhY2ggbWVyZ2UuICBUaGUgY29tbWl0cyBhcmU6CisKKyogYElgIGlzIHRoZSBpbml0aWFsIGNvbW1pdCwgaW4gd2hpY2ggYGZvb2AgZXhpc3RzIHdpdGggY29udGVudHMKKyAgYGBhc2RmJycsIGFuZCBhIGZpbGUgYHF1dXhgIGV4aXN0cyB3aXRoIGNvbnRlbnRzIGBgcXV1eCcnLiBJbml0aWFsCisgIGNvbW1pdHMgYXJlIGNvbXBhcmVkIHRvIGFuIGVtcHR5IHRyZWUsIHNvIGBJYCBpcyAhVFJFRVNBTUUuCisKKyogSW4gYEFgLCBgZm9vYCBjb250YWlucyBqdXN0IGBgZm9vJycuCisKKyogYEJgIGNvbnRhaW5zIHRoZSBzYW1lIGNoYW5nZSBhcyBgQWAuICBJdHMgbWVyZ2UgYE1gIGlzIHRyaXZpYWwgYW5kCisgIGhlbmNlIFRSRUVTQU1FIHRvIGFsbCBwYXJlbnRzLgorCisqIGBDYCBkb2VzIG5vdCBjaGFuZ2UgYGZvb2AsIGJ1dCBpdHMgbWVyZ2UgYE5gIGNoYW5nZXMgaXQgdG8gYGBmb29iYXInJywKKyAgc28gaXQgaXMgbm90IFRSRUVTQU1FIHRvIGFueSBwYXJlbnQuCisKKyogYERgIHNldHMgYGZvb2AgdG8gYGBiYXonJy4gSXRzIG1lcmdlIGBPYCBjb21iaW5lcyB0aGUgc3RyaW5ncyBmcm9tCisgIGBOYCBhbmQgYERgIHRvIGBgZm9vYmFyYmF6Jyc7IGkuZS4sIGl0IGlzIG5vdCBUUkVFU0FNRSB0byBhbnkgcGFyZW50LgorCisqIGBFYCBjaGFuZ2VzIGBxdXV4YCB0byBgYHh5enp5JycsIGFuZCBpdHMgbWVyZ2UgYFBgIGNvbWJpbmVzIHRoZQorICBzdHJpbmdzIHRvIGBgcXV1eCB4eXp6eScnLiBgUGAgaXMgVFJFRVNBTUUgdG8gYE9gLCBidXQgbm90IHRvIGBFYC4KKworKiBgWGAgaXMgYW4gaW5kZXBlbmRlbnQgcm9vdCBjb21taXQgdGhhdCBhZGRlZCBhIG5ldyBmaWxlIGBzaWRlYCwgYW5kIGBZYAorICBtb2RpZmllZCBpdC4gYFlgIGlzIFRSRUVTQU1FIHRvIGBYYC4gSXRzIG1lcmdlIGBRYCBhZGRlZCBgc2lkZWAgdG8gYFBgLCBhbmQKKyAgYFFgIGlzIFRSRUVTQU1FIHRvIGBQYCwgYnV0IG5vdCB0byBgWWAuCisKK2ByZXYtbGlzdGAgd2Fsa3MgYmFja3dhcmRzIHRocm91Z2ggaGlzdG9yeSwgaW5jbHVkaW5nIG9yIGV4Y2x1ZGluZworY29tbWl0cyBiYXNlZCBvbiB3aGV0aGVyIGAtLWZ1bGwtaGlzdG9yeWAgYW5kL29yIHBhcmVudCByZXdyaXRpbmcKKyh2aWEgYC0tcGFyZW50c2Agb3IgYC0tY2hpbGRyZW5gKSBhcmUgdXNlZC4gVGhlIGZvbGxvd2luZyBzZXR0aW5ncworYXJlIGF2YWlsYWJsZS4KKworRGVmYXVsdCBtb2RlOjoKKwlDb21taXRzIGFyZSBpbmNsdWRlZCBpZiB0aGV5IGFyZSBub3QgVFJFRVNBTUUgdG8gYW55IHBhcmVudAorCSh0aG91Z2ggdGhpcyBjYW4gYmUgY2hhbmdlZCwgc2VlIGAtLXNwYXJzZWAgYmVsb3cpLiAgSWYgdGhlCisJY29tbWl0IHdhcyBhIG1lcmdlLCBhbmQgaXQgd2FzIFRSRUVTQU1FIHRvIG9uZSBwYXJlbnQsIGZvbGxvdworCW9ubHkgdGhhdCBwYXJlbnQuICAoRXZlbiBpZiB0aGVyZSBhcmUgc2V2ZXJhbCBUUkVFU0FNRQorCXBhcmVudHMsIGZvbGxvdyBvbmx5IG9uZSBvZiB0aGVtLikgIE90aGVyd2lzZSwgZm9sbG93IGFsbAorCXBhcmVudHMuCisrCitUaGlzIHJlc3VsdHMgaW46CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgLi1BLS0tTi0tLU8KKwkgLyAgICAgLyAgIC8KKwlJLS0tLS0tLS0tRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK05vdGUgaG93IHRoZSBydWxlIHRvIG9ubHkgZm9sbG93IHRoZSBUUkVFU0FNRSBwYXJlbnQsIGlmIG9uZSBpcworYXZhaWxhYmxlLCByZW1vdmVkIGBCYCBmcm9tIGNvbnNpZGVyYXRpb24gZW50aXJlbHkuICBgQ2Agd2FzCitjb25zaWRlcmVkIHZpYSBgTmAsIGJ1dCBpcyBUUkVFU0FNRS4gIFJvb3QgY29tbWl0cyBhcmUgY29tcGFyZWQgdG8gYW4KK2VtcHR5IHRyZWUsIHNvIGBJYCBpcyAhVFJFRVNBTUUuCisrCitQYXJlbnQvY2hpbGQgcmVsYXRpb25zIGFyZSBvbmx5IHZpc2libGUgd2l0aCBgLS1wYXJlbnRzYCwgYnV0IHRoYXQgZG9lcworbm90IGFmZmVjdCB0aGUgY29tbWl0cyBzZWxlY3RlZCBpbiBkZWZhdWx0IG1vZGUsIHNvIHdlIGhhdmUgc2hvd24gdGhlCitwYXJlbnQgbGluZXMuCisKKy0tZnVsbC1oaXN0b3J5IHdpdGhvdXQgcGFyZW50IHJld3JpdGluZzo6CisJVGhpcyBtb2RlIGRpZmZlcnMgZnJvbSB0aGUgZGVmYXVsdCBpbiBvbmUgcG9pbnQ6IGFsd2F5cyBmb2xsb3cKKwlhbGwgcGFyZW50cyBvZiBhIG1lcmdlLCBldmVuIGlmIGl0IGlzIFRSRUVTQU1FIHRvIG9uZSBvZiB0aGVtLgorCUV2ZW4gaWYgbW9yZSB0aGFuIG9uZSBzaWRlIG9mIHRoZSBtZXJnZSBoYXMgY29tbWl0cyB0aGF0IGFyZQorCWluY2x1ZGVkLCB0aGlzIGRvZXMgbm90IGltcGx5IHRoYXQgdGhlIG1lcmdlIGl0c2VsZiBpcyEgIEluCisJdGhlIGV4YW1wbGUsIHdlIGdldAorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlJICBBICBCICBOICBEICBPICBQICBRCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworYE1gIHdhcyBleGNsdWRlZCBiZWNhdXNlIGl0IGlzIFRSRUVTQU1FIHRvIGJvdGggcGFyZW50cy4gIGBFYCwKK2BDYCBhbmQgYEJgIHdlcmUgYWxsIHdhbGtlZCwgYnV0IG9ubHkgYEJgIHdhcyAhVFJFRVNBTUUsIHNvIHRoZSBvdGhlcnMKK2RvIG5vdCBhcHBlYXIuCisrCitOb3RlIHRoYXQgd2l0aG91dCBwYXJlbnQgcmV3cml0aW5nLCBpdCBpcyBub3QgcmVhbGx5IHBvc3NpYmxlIHRvIHRhbGsKK2Fib3V0IHRoZSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHRoZSBjb21taXRzLCBzbyB3ZSBzaG93Cit0aGVtIGRpc2Nvbm5lY3RlZC4KKworLS1mdWxsLWhpc3Rvcnkgd2l0aCBwYXJlbnQgcmV3cml0aW5nOjoKKwlPcmRpbmFyeSBjb21taXRzIGFyZSBvbmx5IGluY2x1ZGVkIGlmIHRoZXkgYXJlICFUUkVFU0FNRQorCSh0aG91Z2ggdGhpcyBjYW4gYmUgY2hhbmdlZCwgc2VlIGAtLXNwYXJzZWAgYmVsb3cpLgorKworTWVyZ2VzIGFyZSBhbHdheXMgaW5jbHVkZWQuICBIb3dldmVyLCB0aGVpciBwYXJlbnQgbGlzdCBpcyByZXdyaXR0ZW46CitBbG9uZyBlYWNoIHBhcmVudCwgcHJ1bmUgYXdheSBjb21taXRzIHRoYXQgYXJlIG5vdCBpbmNsdWRlZAordGhlbXNlbHZlcy4gIFRoaXMgcmVzdWx0cyBpbgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgIC4tQS0tLU0tLS1OLS0tTy0tLVAtLS1RCisJIC8gICAgIC8gICAvICAgLyAgIC8KKwlJICAgICBCICAgLyAgIEQgICAvCisJIFwgICAvICAgLyAgIC8gICAvCisJICBgLS0tLS0tLS0tLS0tLScKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCitDb21wYXJlIHRvIGAtLWZ1bGwtaGlzdG9yeWAgd2l0aG91dCByZXdyaXRpbmcgYWJvdmUuICBOb3RlIHRoYXQgYEVgCit3YXMgcHJ1bmVkIGF3YXkgYmVjYXVzZSBpdCBpcyBUUkVFU0FNRSwgYnV0IHRoZSBwYXJlbnQgbGlzdCBvZiBQIHdhcworcmV3cml0dGVuIHRvIGNvbnRhaW4gYEVgJ3MgcGFyZW50IGBJYC4gIFRoZSBzYW1lIGhhcHBlbmVkIGZvciBgQ2AgYW5kCitgTmAsIGFuZCBgWGAsIGBZYCBhbmQgYFFgLgorCitJbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgc2V0dGluZ3MsIHlvdSBjYW4gY2hhbmdlIHdoZXRoZXIgVFJFRVNBTUUKK2FmZmVjdHMgaW5jbHVzaW9uOgorCistLWRlbnNlOjoKKwlDb21taXRzIHRoYXQgYXJlIHdhbGtlZCBhcmUgaW5jbHVkZWQgaWYgdGhleSBhcmUgbm90IFRSRUVTQU1FCisJdG8gYW55IHBhcmVudC4KKworLS1zcGFyc2U6OgorCUFsbCBjb21taXRzIHRoYXQgYXJlIHdhbGtlZCBhcmUgaW5jbHVkZWQuCisrCitOb3RlIHRoYXQgd2l0aG91dCBgLS1mdWxsLWhpc3RvcnlgLCB0aGlzIHN0aWxsIHNpbXBsaWZpZXMgbWVyZ2VzOiBpZgorb25lIG9mIHRoZSBwYXJlbnRzIGlzIFRSRUVTQU1FLCB3ZSBmb2xsb3cgb25seSB0aGF0IG9uZSwgc28gdGhlIG90aGVyCitzaWRlcyBvZiB0aGUgbWVyZ2UgYXJlIG5ldmVyIHdhbGtlZC4KKworLS1zaW1wbGlmeS1tZXJnZXM6OgorCUZpcnN0LCBidWlsZCBhIGhpc3RvcnkgZ3JhcGggaW4gdGhlIHNhbWUgd2F5IHRoYXQKKwlgLS1mdWxsLWhpc3RvcnlgIHdpdGggcGFyZW50IHJld3JpdGluZyBkb2VzIChzZWUgYWJvdmUpLgorKworVGhlbiBzaW1wbGlmeSBlYWNoIGNvbW1pdCBgQ2AgdG8gaXRzIHJlcGxhY2VtZW50IGBDJ2AgaW4gdGhlIGZpbmFsCitoaXN0b3J5IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOgorKworLS0KKyogU2V0IGBDJ2AgdG8gYENgLgorKworKiBSZXBsYWNlIGVhY2ggcGFyZW50IGBQYCBvZiBgQydgIHdpdGggaXRzIHNpbXBsaWZpY2F0aW9uIGBQJ2AuICBJbgorICB0aGUgcHJvY2VzcywgZHJvcCBwYXJlbnRzIHRoYXQgYXJlIGFuY2VzdG9ycyBvZiBvdGhlciBwYXJlbnRzIG9yIHRoYXQgYXJlCisgIHJvb3QgY29tbWl0cyBUUkVFU0FNRSB0byBhbiBlbXB0eSB0cmVlLCBhbmQgcmVtb3ZlIGR1cGxpY2F0ZXMsIGJ1dCB0YWtlIGNhcmUKKyAgdG8gbmV2ZXIgZHJvcCBhbGwgcGFyZW50cyB0aGF0IHdlIGFyZSBUUkVFU0FNRSB0by4KKysKKyogSWYgYWZ0ZXIgdGhpcyBwYXJlbnQgcmV3cml0aW5nLCBgQydgIGlzIGEgcm9vdCBvciBtZXJnZSBjb21taXQgKGhhcworICB6ZXJvIG9yID4xIHBhcmVudHMpLCBhIGJvdW5kYXJ5IGNvbW1pdCwgb3IgIVRSRUVTQU1FLCBpdCByZW1haW5zLgorICBPdGhlcndpc2UsIGl0IGlzIHJlcGxhY2VkIHdpdGggaXRzIG9ubHkgcGFyZW50LgorLS0KKysKK1RoZSBlZmZlY3Qgb2YgdGhpcyBpcyBiZXN0IHNob3duIGJ5IHdheSBvZiBjb21wYXJpbmcgdG8KK2AtLWZ1bGwtaGlzdG9yeWAgd2l0aCBwYXJlbnQgcmV3cml0aW5nLiAgVGhlIGV4YW1wbGUgdHVybnMgaW50bzoKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICAuLUEtLS1NLS0tTi0tLU8KKwkgLyAgICAgLyAgICAgICAvCisJSSAgICAgQiAgICAgICBECisJIFwgICAvICAgICAgIC8KKwkgIGAtLS0tLS0tLS0nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworTm90ZSB0aGUgbWFqb3IgZGlmZmVyZW5jZXMgaW4gYE5gLCBgUGAsIGFuZCBgUWAgb3ZlciBgLS1mdWxsLWhpc3RvcnlgOgorKworLS0KKyogYE5gJ3MgcGFyZW50IGxpc3QgaGFkIGBJYCByZW1vdmVkLCBiZWNhdXNlIGl0IGlzIGFuIGFuY2VzdG9yIG9mIHRoZQorICBvdGhlciBwYXJlbnQgYE1gLiAgU3RpbGwsIGBOYCByZW1haW5lZCBiZWNhdXNlIGl0IGlzICFUUkVFU0FNRS4KKysKKyogYFBgJ3MgcGFyZW50IGxpc3Qgc2ltaWxhcmx5IGhhZCBgSWAgcmVtb3ZlZC4gIGBQYCB3YXMgdGhlbgorICByZW1vdmVkIGNvbXBsZXRlbHksIGJlY2F1c2UgaXQgaGFkIG9uZSBwYXJlbnQgYW5kIGlzIFRSRUVTQU1FLgorKworKiBgUWAncyBwYXJlbnQgbGlzdCBoYWQgYFlgIHNpbXBsaWZpZWQgdG8gYFhgLiBgWGAgd2FzIHRoZW4gcmVtb3ZlZCwgYmVjYXVzZSBpdAorICB3YXMgYSBUUkVFU0FNRSByb290LiBgUWAgd2FzIHRoZW4gcmVtb3ZlZCBjb21wbGV0ZWx5LCBiZWNhdXNlIGl0IGhhZCBvbmUKKyAgcGFyZW50IGFuZCBpcyBUUkVFU0FNRS4KKy0tCisKK0ZpbmFsbHksIHRoZXJlIGlzIGEgZmlmdGggc2ltcGxpZmljYXRpb24gbW9kZSBhdmFpbGFibGU6CisKKy0tYW5jZXN0cnktcGF0aDo6CisJTGltaXQgdGhlIGRpc3BsYXllZCBjb21taXRzIHRvIHRob3NlIGRpcmVjdGx5IG9uIHRoZSBhbmNlc3RyeQorCWNoYWluIGJldHdlZW4gdGhlIGBgZnJvbScnIGFuZCBgYHRvJycgY29tbWl0cyBpbiB0aGUgZ2l2ZW4gY29tbWl0CisJcmFuZ2UuIEkuZS4gb25seSBkaXNwbGF5IGNvbW1pdHMgdGhhdCBhcmUgYW5jZXN0b3Igb2YgdGhlIGBgdG8nJworCWNvbW1pdCBhbmQgZGVzY2VuZGFudHMgb2YgdGhlIGBgZnJvbScnIGNvbW1pdC4KKysKK0FzIGFuIGV4YW1wbGUgdXNlIGNhc2UsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29tbWl0IGhpc3Rvcnk6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICBELS0tRS0tLS0tLS1GCisJICAgLyAgICAgXCAgICAgICBcCisJICBCLS0tQy0tLUctLS1ILS0tSS0tLUoKKwkgLyAgICAgICAgICAgICAgICAgICAgIFwKKwlBLS0tLS0tLUstLS0tLS0tLS0tLS0tLS1MLS1NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworQSByZWd1bGFyICdELi5NJyBjb21wdXRlcyB0aGUgc2V0IG9mIGNvbW1pdHMgdGhhdCBhcmUgYW5jZXN0b3JzIG9mIGBNYCwKK2J1dCBleGNsdWRlcyB0aGUgb25lcyB0aGF0IGFyZSBhbmNlc3RvcnMgb2YgYERgLiBUaGlzIGlzIHVzZWZ1bCB0byBzZWUKK3doYXQgaGFwcGVuZWQgdG8gdGhlIGhpc3RvcnkgbGVhZGluZyB0byBgTWAgc2luY2UgYERgLCBpbiB0aGUgc2Vuc2UKK3RoYXQgYGB3aGF0IGRvZXMgYE1gIGhhdmUgdGhhdCBkaWQgbm90IGV4aXN0IGluIGBEYCcnLiBUaGUgcmVzdWx0IGluIHRoaXMKK2V4YW1wbGUgd291bGQgYmUgYWxsIHRoZSBjb21taXRzLCBleGNlcHQgYEFgIGFuZCBgQmAgKGFuZCBgRGAgaXRzZWxmLAorb2YgY291cnNlKS4KKysKK1doZW4gd2Ugd2FudCB0byBmaW5kIG91dCB3aGF0IGNvbW1pdHMgaW4gYE1gIGFyZSBjb250YW1pbmF0ZWQgd2l0aCB0aGUKK2J1ZyBpbnRyb2R1Y2VkIGJ5IGBEYCBhbmQgbmVlZCBmaXhpbmcsIGhvd2V2ZXIsIHdlIG1pZ2h0IHdhbnQgdG8gdmlldworb25seSB0aGUgc3Vic2V0IG9mICdELi5NJyB0aGF0IGFyZSBhY3R1YWxseSBkZXNjZW5kYW50cyBvZiBgRGAsIGkuZS4KK2V4Y2x1ZGluZyBgQ2AgYW5kIGBLYC4gVGhpcyBpcyBleGFjdGx5IHdoYXQgdGhlIGAtLWFuY2VzdHJ5LXBhdGhgCitvcHRpb24gZG9lcy4gQXBwbGllZCB0byB0aGUgJ0QuLk0nIHJhbmdlLCBpdCByZXN1bHRzIGluOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJRS0tLS0tLS1GCisJCSBcICAgICAgIFwKKwkJICBHLS0tSC0tLUktLS1KCisJCQkgICAgICAgXAorCQkJCUwtLU0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uYCBvcHRpb24gYWxsb3dzIHlvdSB0byB2aWV3IG9ubHkgdGhlCitiaWcgcGljdHVyZSBvZiB0aGUgdG9wb2xvZ3kgb2YgdGhlIGhpc3RvcnksIGJ5IG9taXR0aW5nIGNvbW1pdHMKK3RoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGJ5IHRhZ3MuICBDb21taXRzIGFyZSBtYXJrZWQgYXMgIVRSRUVTQU1FCisoaW4gb3RoZXIgd29yZHMsIGtlcHQgYWZ0ZXIgaGlzdG9yeSBzaW1wbGlmaWNhdGlvbiBydWxlcyBkZXNjcmliZWQKK2Fib3ZlKSBpZiAoMSkgdGhleSBhcmUgcmVmZXJlbmNlZCBieSB0YWdzLCBvciAoMikgdGhleSBjaGFuZ2UgdGhlCitjb250ZW50cyBvZiB0aGUgcGF0aHMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gIEFsbCBvdGhlcgorY29tbWl0cyBhcmUgbWFya2VkIGFzIFRSRUVTQU1FIChzdWJqZWN0IHRvIGJlIHNpbXBsaWZpZWQgYXdheSkuCisKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQorQmlzZWN0aW9uIEhlbHBlcnMKK35+fn5+fn5+fn5+fn5+fn5+CisKKy0tYmlzZWN0OjoKKwlMaW1pdCBvdXRwdXQgdG8gdGhlIG9uZSBjb21taXQgb2JqZWN0IHdoaWNoIGlzIHJvdWdobHkgaGFsZndheSBiZXR3ZWVuCisJaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkIGNvbW1pdHMuIE5vdGUgdGhhdCB0aGUgYmFkIGJpc2VjdGlvbiByZWYKKwlgcmVmcy9iaXNlY3QvYmFkYCBpcyBhZGRlZCB0byB0aGUgaW5jbHVkZWQgY29tbWl0cyAoaWYgaXQKKwlleGlzdHMpIGFuZCB0aGUgZ29vZCBiaXNlY3Rpb24gcmVmcyBgcmVmcy9iaXNlY3QvZ29vZC0qYCBhcmUKKwlhZGRlZCB0byB0aGUgZXhjbHVkZWQgY29tbWl0cyAoaWYgdGhleSBleGlzdCkuIFRodXMsIHN1cHBvc2luZyB0aGVyZQorCWFyZSBubyByZWZzIGluIGByZWZzL2Jpc2VjdC9gLCBpZgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkkIGdpdCByZXYtbGlzdCAtLWJpc2VjdCBmb28gXmJhciBeYmF6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworb3V0cHV0cyAnbWlkcG9pbnQnLCB0aGUgb3V0cHV0IG9mIHRoZSB0d28gY29tbWFuZHMKKysKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJJCBnaXQgcmV2LWxpc3QgZm9vIF5taWRwb2ludAorCSQgZ2l0IHJldi1saXN0IG1pZHBvaW50IF5iYXIgXmJhegorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysKK3dvdWxkIGJlIG9mIHJvdWdobHkgdGhlIHNhbWUgbGVuZ3RoLiAgRmluZGluZyB0aGUgY2hhbmdlIHdoaWNoCitpbnRyb2R1Y2VzIGEgcmVncmVzc2lvbiBpcyB0aHVzIHJlZHVjZWQgdG8gYSBiaW5hcnkgc2VhcmNoOiByZXBlYXRlZGx5CitnZW5lcmF0ZSBhbmQgdGVzdCBuZXcgJ21pZHBvaW50J3MgdW50aWwgdGhlIGNvbW1pdCBjaGFpbiBpcyBvZiBsZW5ndGgKK29uZS4gQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLS1maXJzdC1wYXJlbnQuCisKKy0tYmlzZWN0LXZhcnM6OgorCVRoaXMgY2FsY3VsYXRlcyB0aGUgc2FtZSBhcyBgLS1iaXNlY3RgLCBleGNlcHQgdGhhdCByZWZzIGluCisJYHJlZnMvYmlzZWN0L2AgYXJlIG5vdCB1c2VkLCBhbmQgZXhjZXB0IHRoYXQgdGhpcyBvdXRwdXRzCisJdGV4dCByZWFkeSB0byBiZSBldmFsJ2VkIGJ5IHRoZSBzaGVsbC4gVGhlc2UgbGluZXMgd2lsbCBhc3NpZ24gdGhlCisJbmFtZSBvZiB0aGUgbWlkcG9pbnQgcmV2aXNpb24gdG8gdGhlIHZhcmlhYmxlIGBiaXNlY3RfcmV2YCwgYW5kIHRoZQorCWV4cGVjdGVkIG51bWJlciBvZiBjb21taXRzIHRvIGJlIHRlc3RlZCBhZnRlciBgYmlzZWN0X3JldmAgaXMgdGVzdGVkCisJdG8gYGJpc2VjdF9ucmAsIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgY29tbWl0cyB0byBiZSB0ZXN0ZWQgaWYKKwlgYmlzZWN0X3JldmAgdHVybnMgb3V0IHRvIGJlIGdvb2QgdG8gYGJpc2VjdF9nb29kYCwgdGhlIGV4cGVjdGVkCisJbnVtYmVyIG9mIGNvbW1pdHMgdG8gYmUgdGVzdGVkIGlmIGBiaXNlY3RfcmV2YCB0dXJucyBvdXQgdG8gYmUgYmFkIHRvCisJYGJpc2VjdF9iYWRgLCBhbmQgdGhlIG51bWJlciBvZiBjb21taXRzIHdlIGFyZSBiaXNlY3RpbmcgcmlnaHQgbm93IHRvCisJYGJpc2VjdF9hbGxgLgorCistLWJpc2VjdC1hbGw6OgorCVRoaXMgb3V0cHV0cyBhbGwgdGhlIGNvbW1pdCBvYmplY3RzIGJldHdlZW4gdGhlIGluY2x1ZGVkIGFuZCBleGNsdWRlZAorCWNvbW1pdHMsIG9yZGVyZWQgYnkgdGhlaXIgZGlzdGFuY2UgdG8gdGhlIGluY2x1ZGVkIGFuZCBleGNsdWRlZAorCWNvbW1pdHMuIFJlZnMgaW4gYHJlZnMvYmlzZWN0L2AgYXJlIG5vdCB1c2VkLiBUaGUgZmFydGhlc3QKKwlmcm9tIHRoZW0gaXMgZGlzcGxheWVkIGZpcnN0LiAoVGhpcyBpcyB0aGUgb25seSBvbmUgZGlzcGxheWVkIGJ5CisJYC0tYmlzZWN0YC4pCisrCitUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGl0IG1ha2VzIGl0IGVhc3kgdG8gY2hvb3NlIGEgZ29vZCBjb21taXQgdG8KK3Rlc3Qgd2hlbiB5b3Ugd2FudCB0byBhdm9pZCB0byB0ZXN0IHNvbWUgb2YgdGhlbSBmb3Igc29tZSByZWFzb24gKHRoZXkKK21heSBub3QgY29tcGlsZSBmb3IgZXhhbXBsZSkuCisrCitUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBhbG9uZyB3aXRoIGAtLWJpc2VjdC12YXJzYCwgaW4gdGhpcyBjYXNlLAorYWZ0ZXIgYWxsIHRoZSBzb3J0ZWQgY29tbWl0IG9iamVjdHMsIHRoZXJlIHdpbGwgYmUgdGhlIHNhbWUgdGV4dCBhcyBpZgorYC0tYmlzZWN0LXZhcnNgIGhhZCBiZWVuIHVzZWQgYWxvbmUuCitlbmRpZjo6Z2l0LXJldi1saXN0W10KKworCitDb21taXQgT3JkZXJpbmcKK35+fn5+fn5+fn5+fn5+fgorCitCeSBkZWZhdWx0LCB0aGUgY29tbWl0cyBhcmUgc2hvd24gaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgorCistLWRhdGUtb3JkZXI6OgorCVNob3cgbm8gcGFyZW50cyBiZWZvcmUgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcmUgc2hvd24sIGJ1dAorCW90aGVyd2lzZSBzaG93IGNvbW1pdHMgaW4gdGhlIGNvbW1pdCB0aW1lc3RhbXAgb3JkZXIuCisKKy0tYXV0aG9yLWRhdGUtb3JkZXI6OgorCVNob3cgbm8gcGFyZW50cyBiZWZvcmUgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcmUgc2hvd24sIGJ1dAorCW90aGVyd2lzZSBzaG93IGNvbW1pdHMgaW4gdGhlIGF1dGhvciB0aW1lc3RhbXAgb3JkZXIuCisKKy0tdG9wby1vcmRlcjo6CisJU2hvdyBubyBwYXJlbnRzIGJlZm9yZSBhbGwgb2YgaXRzIGNoaWxkcmVuIGFyZSBzaG93biwgYW5kCisJYXZvaWQgc2hvd2luZyBjb21taXRzIG9uIG11bHRpcGxlIGxpbmVzIG9mIGhpc3RvcnkKKwlpbnRlcm1peGVkLgorKworRm9yIGV4YW1wbGUsIGluIGEgY29tbWl0IGhpc3RvcnkgbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLS0tMS0tLS0yLS0tLTQtLS0tNworCVwJICAgICAgIFwKKwkgMy0tLS01LS0tLTYtLS0tOC0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrCit3aGVyZSB0aGUgbnVtYmVycyBkZW5vdGUgdGhlIG9yZGVyIG9mIGNvbW1pdCB0aW1lc3RhbXBzLCBgZ2l0CityZXYtbGlzdGAgYW5kIGZyaWVuZHMgd2l0aCBgLS1kYXRlLW9yZGVyYCBzaG93IHRoZSBjb21taXRzIGluIHRoZQordGltZXN0YW1wIG9yZGVyOiA4IDcgNiA1IDQgMyAyIDEuCisrCitXaXRoIGAtLXRvcG8tb3JkZXJgLCB0aGV5IHdvdWxkIHNob3cgOCA2IDUgMyA3IDQgMiAxIChvciA4IDcgNCAyIDYgNQorMyAxKTsgc29tZSBvbGRlciBjb21taXRzIGFyZSBzaG93biBiZWZvcmUgbmV3ZXIgb25lcyBpbiBvcmRlciB0bworYXZvaWQgc2hvd2luZyB0aGUgY29tbWl0cyBmcm9tIHR3byBwYXJhbGxlbCBkZXZlbG9wbWVudCB0cmFjayBtaXhlZAordG9nZXRoZXIuCisKKy0tcmV2ZXJzZTo6CisJT3V0cHV0IHRoZSBjb21taXRzIGluIHJldmVyc2Ugb3JkZXIuCisJQ2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYC0td2Fsay1yZWZsb2dzYC4KKworT2JqZWN0IFRyYXZlcnNhbAorfn5+fn5+fn5+fn5+fn5+fgorCitUaGVzZSBvcHRpb25zIGFyZSBtb3N0bHkgdGFyZ2V0ZWQgZm9yIHBhY2tpbmcgb2YgR2l0IHJlcG9zaXRvcmllcy4KKworaWZkZWY6OmdpdC1yZXYtbGlzdFtdCistLW9iamVjdHM6OgorCVByaW50IHRoZSBvYmplY3QgSURzIG9mIGFueSBvYmplY3QgcmVmZXJlbmNlZCBieSB0aGUgbGlzdGVkCisJY29tbWl0cy4gIGAtLW9iamVjdHMgZm9vIF5iYXJgIHRodXMgbWVhbnMgYGBzZW5kIG1lCisJYWxsIG9iamVjdCBJRHMgd2hpY2ggSSBuZWVkIHRvIGRvd25sb2FkIGlmIEkgaGF2ZSB0aGUgY29tbWl0CisJb2JqZWN0IF9iYXJfIGJ1dCBub3QgX2Zvb18nJy4KKworLS1vYmplY3RzLWVkZ2U6OgorCVNpbWlsYXIgdG8gYC0tb2JqZWN0c2AsIGJ1dCBhbHNvIHByaW50IHRoZSBJRHMgb2YgZXhjbHVkZWQKKwljb21taXRzIHByZWZpeGVkIHdpdGggYSBgYC0nJyBjaGFyYWN0ZXIuICBUaGlzIGlzIHVzZWQgYnkKKwlsaW5rZ2l0OmdpdC1wYWNrLW9iamVjdHNbMV0gdG8gYnVpbGQgYSBgYHRoaW4nJyBwYWNrLCB3aGljaCByZWNvcmRzCisJb2JqZWN0cyBpbiBkZWx0aWZpZWQgZm9ybSBiYXNlZCBvbiBvYmplY3RzIGNvbnRhaW5lZCBpbiB0aGVzZQorCWV4Y2x1ZGVkIGNvbW1pdHMgdG8gcmVkdWNlIG5ldHdvcmsgdHJhZmZpYy4KKworLS1vYmplY3RzLWVkZ2UtYWdncmVzc2l2ZTo6CisJU2ltaWxhciB0byBgLS1vYmplY3RzLWVkZ2VgLCBidXQgaXQgdHJpZXMgaGFyZGVyIHRvIGZpbmQgZXhjbHVkZWQKKwljb21taXRzIGF0IHRoZSBjb3N0IG9mIGluY3JlYXNlZCB0aW1lLiAgVGhpcyBpcyB1c2VkIGluc3RlYWQgb2YKKwlgLS1vYmplY3RzLWVkZ2VgIHRvIGJ1aWxkIGBgdGhpbicnIHBhY2tzIGZvciBzaGFsbG93IHJlcG9zaXRvcmllcy4KKworLS1pbmRleGVkLW9iamVjdHM6OgorCVByZXRlbmQgYXMgaWYgYWxsIHRyZWVzIGFuZCBibG9icyB1c2VkIGJ5IHRoZSBpbmRleCBhcmUgbGlzdGVkCisJb24gdGhlIGNvbW1hbmQgbGluZS4gIE5vdGUgdGhhdCB5b3UgcHJvYmFibHkgd2FudCB0byB1c2UKKwlgLS1vYmplY3RzYCwgdG9vLgorCistLXVucGFja2VkOjoKKwlPbmx5IHVzZWZ1bCB3aXRoIGAtLW9iamVjdHNgOyBwcmludCB0aGUgb2JqZWN0IElEcyB0aGF0IGFyZSBub3QKKwlpbiBwYWNrcy4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLW5vLXdhbGtbPShzb3J0ZWR8dW5zb3J0ZWQpXTo6CisJT25seSBzaG93IHRoZSBnaXZlbiBjb21taXRzLCBidXQgZG8gbm90IHRyYXZlcnNlIHRoZWlyIGFuY2VzdG9ycy4KKwlUaGlzIGhhcyBubyBlZmZlY3QgaWYgYSByYW5nZSBpcyBzcGVjaWZpZWQuIElmIHRoZSBhcmd1bWVudAorCWB1bnNvcnRlZGAgaXMgZ2l2ZW4sIHRoZSBjb21taXRzIGFyZSBzaG93biBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlCisJZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gT3RoZXJ3aXNlIChpZiBgc29ydGVkYCBvciBubyBhcmd1bWVudAorCXdhcyBnaXZlbiksIHRoZSBjb21taXRzIGFyZSBzaG93biBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIKKwlieSBjb21taXQgdGltZS4KKwlDYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgLS1ncmFwaGAuCisKKy0tZG8td2Fsazo6CisJT3ZlcnJpZGVzIGEgcHJldmlvdXMgYC0tbm8td2Fsa2AuCisKK0NvbW1pdCBGb3JtYXR0aW5nCit+fn5+fn5+fn5+fn5+fn5+fgorCitpZmRlZjo6Z2l0LXJldi1saXN0W10KK1VzaW5nIHRoZXNlIG9wdGlvbnMsIGxpbmtnaXQ6Z2l0LXJldi1saXN0WzFdIHdpbGwgYWN0IHNpbWlsYXIgdG8gdGhlCittb3JlIHNwZWNpYWxpemVkIGZhbWlseSBvZiBjb21taXQgbG9nIHRvb2xzOiBsaW5rZ2l0OmdpdC1sb2dbMV0sCitsaW5rZ2l0OmdpdC1zaG93WzFdLCBhbmQgbGlua2dpdDpnaXQtd2hhdGNoYW5nZWRbMV0KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCitpbmNsdWRlOjpwcmV0dHktb3B0aW9ucy50eHRbXQorCistLXJlbGF0aXZlLWRhdGU6OgorCVN5bm9ueW0gZm9yIGAtLWRhdGU9cmVsYXRpdmVgLgorCistLWRhdGU9PGZvcm1hdD46OgorCU9ubHkgdGFrZXMgZWZmZWN0IGZvciBkYXRlcyBzaG93biBpbiBodW1hbi1yZWFkYWJsZSBmb3JtYXQsIHN1Y2gKKwlhcyB3aGVuIHVzaW5nIGAtLXByZXR0eWAuIGBsb2cuZGF0ZWAgY29uZmlnIHZhcmlhYmxlIHNldHMgYSBkZWZhdWx0CisJdmFsdWUgZm9yIHRoZSBsb2cgY29tbWFuZCdzIGAtLWRhdGVgIG9wdGlvbi4gQnkgZGVmYXVsdCwgZGF0ZXMKKwlhcmUgc2hvd24gaW4gdGhlIG9yaWdpbmFsIHRpbWUgem9uZSAoZWl0aGVyIGNvbW1pdHRlcidzIG9yCisJYXV0aG9yJ3MpLiBJZiBgLWxvY2FsYCBpcyBhcHBlbmRlZCB0byB0aGUgZm9ybWF0IChlLmcuLAorCWBpc28tbG9jYWxgKSwgdGhlIHVzZXIncyBsb2NhbCB0aW1lIHpvbmUgaXMgdXNlZCBpbnN0ZWFkLgorKworYC0tZGF0ZT1yZWxhdGl2ZWAgc2hvd3MgZGF0ZXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZSwKK2UuZy4gYGAyIGhvdXJzIGFnbycnLiBUaGUgYC1sb2NhbGAgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGgKK2AtLXJhd2Agb3IgYC0tcmVsYXRpdmVgLgorKworYC0tZGF0ZT1sb2NhbGAgaXMgYW4gYWxpYXMgZm9yIGAtLWRhdGU9ZGVmYXVsdC1sb2NhbGAuCisrCitgLS1kYXRlPWlzb2AgKG9yIGAtLWRhdGU9aXNvODYwMWApIHNob3dzIHRpbWVzdGFtcHMgaW4gYSBJU08gODYwMS1saWtlIGZvcm1hdC4KK1RoZSBkaWZmZXJlbmNlcyB0byB0aGUgc3RyaWN0IElTTyA4NjAxIGZvcm1hdCBhcmU6CisKKwktIGEgc3BhY2UgaW5zdGVhZCBvZiB0aGUgYFRgIGRhdGUvdGltZSBkZWxpbWl0ZXIKKwktIGEgc3BhY2UgYmV0d2VlbiB0aW1lIGFuZCB0aW1lIHpvbmUKKwktIG5vIGNvbG9uIGJldHdlZW4gaG91cnMgYW5kIG1pbnV0ZXMgb2YgdGhlIHRpbWUgem9uZQorCisrCitgLS1kYXRlPWlzby1zdHJpY3RgIChvciBgLS1kYXRlPWlzbzg2MDEtc3RyaWN0YCkgc2hvd3MgdGltZXN0YW1wcyBpbiBzdHJpY3QKK0lTTyA4NjAxIGZvcm1hdC4KKysKK2AtLWRhdGU9cmZjYCAob3IgYC0tZGF0ZT1yZmMyODIyYCkgc2hvd3MgdGltZXN0YW1wcyBpbiBSRkMgMjgyMgorZm9ybWF0LCBvZnRlbiBmb3VuZCBpbiBlbWFpbCBtZXNzYWdlcy4KKysKK2AtLWRhdGU9c2hvcnRgIHNob3dzIG9ubHkgdGhlIGRhdGUsIGJ1dCBub3QgdGhlIHRpbWUsIGluIGBZWVlZLU1NLUREYCBmb3JtYXQuCisrCitgLS1kYXRlPXJhd2Agc2hvd3MgdGhlIGRhdGUgaW4gdGhlIGludGVybmFsIHJhdyBHaXQgZm9ybWF0IGAlcyAlemAgZm9ybWF0LgorKworYC0tZGF0ZT1mb3JtYXQ6Li4uYCBmZWVkcyB0aGUgZm9ybWF0IGAuLi5gIHRvIHlvdXIgc3lzdGVtIGBzdHJmdGltZWAuCitVc2UgYC0tZGF0ZT1mb3JtYXQ6JWNgIHRvIHNob3cgdGhlIGRhdGUgaW4geW91ciBzeXN0ZW0gbG9jYWxlJ3MKK3ByZWZlcnJlZCBmb3JtYXQuICBTZWUgdGhlIGBzdHJmdGltZWAgbWFudWFsIGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YKK2Zvcm1hdCBwbGFjZWhvbGRlcnMuIFdoZW4gdXNpbmcgYC1sb2NhbGAsIHRoZSBjb3JyZWN0IHN5bnRheCBpcworYC0tZGF0ZT1mb3JtYXQtbG9jYWw6Li4uYC4KKysKK2AtLWRhdGU9ZGVmYXVsdGAgaXMgdGhlIGRlZmF1bHQgZm9ybWF0LCBhbmQgaXMgc2ltaWxhciB0bworYC0tZGF0ZT1yZmMyODIyYCwgd2l0aCBhIGZldyBleGNlcHRpb25zOgorCisJLSB0aGVyZSBpcyBubyBjb21tYSBhZnRlciB0aGUgZGF5LW9mLXdlZWsKKworCS0gdGhlIHRpbWUgem9uZSBpcyBvbWl0dGVkIHdoZW4gdGhlIGxvY2FsIHRpbWUgem9uZSBpcyB1c2VkCisKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQorLS1oZWFkZXI6OgorCVByaW50IHRoZSBjb250ZW50cyBvZiB0aGUgY29tbWl0IGluIHJhdy1mb3JtYXQ7IGVhY2ggcmVjb3JkIGlzCisJc2VwYXJhdGVkIHdpdGggYSBOVUwgY2hhcmFjdGVyLgorZW5kaWY6OmdpdC1yZXYtbGlzdFtdCisKKy0tcGFyZW50czo6CisJUHJpbnQgYWxzbyB0aGUgcGFyZW50cyBvZiB0aGUgY29tbWl0IChpbiB0aGUgZm9ybSAiY29tbWl0IHBhcmVudC4uLiIpLgorCUFsc28gZW5hYmxlcyBwYXJlbnQgcmV3cml0aW5nLCBzZWUgJ0hpc3RvcnkgU2ltcGxpZmljYXRpb24nIGJlbG93LgorCistLWNoaWxkcmVuOjoKKwlQcmludCBhbHNvIHRoZSBjaGlsZHJlbiBvZiB0aGUgY29tbWl0IChpbiB0aGUgZm9ybSAiY29tbWl0IGNoaWxkLi4uIikuCisJQWxzbyBlbmFibGVzIHBhcmVudCByZXdyaXRpbmcsIHNlZSAnSGlzdG9yeSBTaW1wbGlmaWNhdGlvbicgYmVsb3cuCisKK2lmZGVmOjpnaXQtcmV2LWxpc3RbXQorLS10aW1lc3RhbXA6OgorCVByaW50IHRoZSByYXcgY29tbWl0IHRpbWVzdGFtcC4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCistLWxlZnQtcmlnaHQ6OgorCU1hcmsgd2hpY2ggc2lkZSBvZiBhIHN5bW1ldHJpYyBkaWZmIGEgY29tbWl0IGlzIHJlYWNoYWJsZSBmcm9tLgorCUNvbW1pdHMgZnJvbSB0aGUgbGVmdCBzaWRlIGFyZSBwcmVmaXhlZCB3aXRoIGA8YCBhbmQgdGhvc2UgZnJvbQorCXRoZSByaWdodCB3aXRoIGA+YC4gIElmIGNvbWJpbmVkIHdpdGggYC0tYm91bmRhcnlgLCB0aG9zZQorCWNvbW1pdHMgYXJlIHByZWZpeGVkIHdpdGggYC1gLgorKworRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHRoaXMgdG9wb2xvZ3k6CisrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAgICAgeS0tLWItLS1iICBicmFuY2ggQgorCSAgICAvIFwgLworCSAgIC8gICAuCisJICAvICAgLyBcCisJIG8tLS14LS0tYS0tLWEgIGJyYW5jaCBBCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworeW91IHdvdWxkIGdldCBhbiBvdXRwdXQgbGlrZSB0aGlzOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkkIGdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1ib3VuZGFyeSAtLXByZXR0eT1vbmVsaW5lIEEuLi5CCisKKwk+YmJiYmJiYi4uLiAzcmQgb24gYgorCT5iYmJiYmJiLi4uIDJuZCBvbiBiCisJPGFhYWFhYWEuLi4gM3JkIG9uIGEKKwk8YWFhYWFhYS4uLiAybmQgb24gYQorCS15eXl5eXl5Li4uIDFzdCBvbiBiCisJLXh4eHh4eHguLi4gMXN0IG9uIGEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tZ3JhcGg6OgorCURyYXcgYSB0ZXh0LWJhc2VkIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tbWl0IGhpc3RvcnkKKwlvbiB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgdGhlIG91dHB1dC4gIFRoaXMgbWF5IGNhdXNlIGV4dHJhIGxpbmVzCisJdG8gYmUgcHJpbnRlZCBpbiBiZXR3ZWVuIGNvbW1pdHMsIGluIG9yZGVyIGZvciB0aGUgZ3JhcGggaGlzdG9yeQorCXRvIGJlIGRyYXduIHByb3Blcmx5LgorCUNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGAtLW5vLXdhbGtgLgorKworVGhpcyBlbmFibGVzIHBhcmVudCByZXdyaXRpbmcsIHNlZSAnSGlzdG9yeSBTaW1wbGlmaWNhdGlvbicgYmVsb3cuCisrCitUaGlzIGltcGxpZXMgdGhlIGAtLXRvcG8tb3JkZXJgIG9wdGlvbiBieSBkZWZhdWx0LCBidXQgdGhlCitgLS1kYXRlLW9yZGVyYCBvcHRpb24gbWF5IGFsc28gYmUgc3BlY2lmaWVkLgorCistLXNob3ctbGluZWFyLWJyZWFrWz08YmFycmllcj5dOjoKKwlXaGVuIC0tZ3JhcGggaXMgbm90IHVzZWQsIGFsbCBoaXN0b3J5IGJyYW5jaGVzIGFyZSBmbGF0dGVuZWQKKwl3aGljaCBjYW4gbWFrZSBpdCBoYXJkIHRvIHNlZSB0aGF0IHRoZSB0d28gY29uc2VjdXRpdmUgY29tbWl0cworCWRvIG5vdCBiZWxvbmcgdG8gYSBsaW5lYXIgYnJhbmNoLiBUaGlzIG9wdGlvbiBwdXRzIGEgYmFycmllcgorCWluIGJldHdlZW4gdGhlbSBpbiB0aGF0IGNhc2UuIElmIGA8YmFycmllcj5gIGlzIHNwZWNpZmllZCwgaXQKKwlpcyB0aGUgc3RyaW5nIHRoYXQgd2lsbCBiZSBzaG93biBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IG9uZS4KKworaWZkZWY6OmdpdC1yZXYtbGlzdFtdCistLWNvdW50OjoKKwlQcmludCBhIG51bWJlciBzdGF0aW5nIGhvdyBtYW55IGNvbW1pdHMgd291bGQgaGF2ZSBiZWVuCisJbGlzdGVkLCBhbmQgc3VwcHJlc3MgYWxsIG90aGVyIG91dHB1dC4gIFdoZW4gdXNlZCB0b2dldGhlcgorCXdpdGggYC0tbGVmdC1yaWdodGAsIGluc3RlYWQgcHJpbnQgdGhlIGNvdW50cyBmb3IgbGVmdCBhbmQKKwlyaWdodCBjb21taXRzLCBzZXBhcmF0ZWQgYnkgYSB0YWIuIFdoZW4gdXNlZCB0b2dldGhlciB3aXRoCisJYC0tY2hlcnJ5LW1hcmtgLCBvbWl0IHBhdGNoIGVxdWl2YWxlbnQgY29tbWl0cyBmcm9tIHRoZXNlCisJY291bnRzIGFuZCBwcmludCB0aGUgY291bnQgZm9yIGVxdWl2YWxlbnQgY29tbWl0cyBzZXBhcmF0ZWQKKwlieSBhIHRhYi4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQorCitpZm5kZWY6OmdpdC1yZXYtbGlzdFtdCitEaWZmIEZvcm1hdHRpbmcKK35+fn5+fn5+fn5+fn5+fgorCitMaXN0ZWQgYmVsb3cgYXJlIG9wdGlvbnMgdGhhdCBjb250cm9sIHRoZSBmb3JtYXR0aW5nIG9mIGRpZmYgb3V0cHV0LgorU29tZSBvZiB0aGVtIGFyZSBzcGVjaWZpYyB0byBsaW5rZ2l0OmdpdC1yZXYtbGlzdFsxXSwgaG93ZXZlciBvdGhlciBkaWZmCitvcHRpb25zIG1heSBiZSBnaXZlbi4gU2VlIGxpbmtnaXQ6Z2l0LWRpZmYtZmlsZXNbMV0gZm9yIG1vcmUgb3B0aW9ucy4KKworLWM6OgorCVdpdGggdGhpcyBvcHRpb24sIGRpZmYgb3V0cHV0IGZvciBhIG1lcmdlIGNvbW1pdAorCXNob3dzIHRoZSBkaWZmZXJlbmNlcyBmcm9tIGVhY2ggb2YgdGhlIHBhcmVudHMgdG8gdGhlIG1lcmdlIHJlc3VsdAorCXNpbXVsdGFuZW91c2x5IGluc3RlYWQgb2Ygc2hvd2luZyBwYWlyd2lzZSBkaWZmIGJldHdlZW4gYSBwYXJlbnQKKwlhbmQgdGhlIHJlc3VsdCBvbmUgYXQgYSB0aW1lLiBGdXJ0aGVybW9yZSwgaXQgbGlzdHMgb25seSBmaWxlcworCXdoaWNoIHdlcmUgbW9kaWZpZWQgZnJvbSBhbGwgcGFyZW50cy4KKworLS1jYzo6CisJVGhpcyBmbGFnIGltcGxpZXMgdGhlIGAtY2Agb3B0aW9uIGFuZCBmdXJ0aGVyIGNvbXByZXNzZXMgdGhlCisJcGF0Y2ggb3V0cHV0IGJ5IG9taXR0aW5nIHVuaW50ZXJlc3RpbmcgaHVua3Mgd2hvc2UgY29udGVudHMgaW4KKwl0aGUgcGFyZW50cyBoYXZlIG9ubHkgdHdvIHZhcmlhbnRzIGFuZCB0aGUgbWVyZ2UgcmVzdWx0IHBpY2tzCisJb25lIG9mIHRoZW0gd2l0aG91dCBtb2RpZmljYXRpb24uCisKKy1tOjoKKwlUaGlzIGZsYWcgbWFrZXMgdGhlIG1lcmdlIGNvbW1pdHMgc2hvdyB0aGUgZnVsbCBkaWZmIGxpa2UKKwlyZWd1bGFyIGNvbW1pdHM7IGZvciBlYWNoIG1lcmdlIHBhcmVudCwgYSBzZXBhcmF0ZSBsb2cgZW50cnkKKwlhbmQgZGlmZiBpcyBnZW5lcmF0ZWQuIEFuIGV4Y2VwdGlvbiBpcyB0aGF0IG9ubHkgZGlmZiBhZ2FpbnN0CisJdGhlIGZpcnN0IHBhcmVudCBpcyBzaG93biB3aGVuIGAtLWZpcnN0LXBhcmVudGAgb3B0aW9uIGlzIGdpdmVuOworCWluIHRoYXQgY2FzZSwgdGhlIG91dHB1dCByZXByZXNlbnRzIHRoZSBjaGFuZ2VzIHRoZSBtZXJnZQorCWJyb3VnaHQgX2ludG9fIHRoZSB0aGVuLWN1cnJlbnQgYnJhbmNoLgorCistcjo6CisJU2hvdyByZWN1cnNpdmUgZGlmZnMuCisKKy10OjoKKwlTaG93IHRoZSB0cmVlIG9iamVjdHMgaW4gdGhlIGRpZmYgb3V0cHV0LiBUaGlzIGltcGxpZXMgYC1yYC4KK2VuZGlmOjpnaXQtcmV2LWxpc3RbXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi9yZXZpc2lvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NWUzMDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3JldmlzaW9ucy50eHQKQEAgLTAsMCArMSwzMTQgQEAKK1NQRUNJRllJTkcgUkVWSVNJT05TCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIHJldmlzaW9uIHBhcmFtZXRlciAnPHJldj4nIHR5cGljYWxseSwgYnV0IG5vdCBuZWNlc3NhcmlseSwgbmFtZXMgYQorY29tbWl0IG9iamVjdC4gIEl0IHVzZXMgd2hhdCBpcyBjYWxsZWQgYW4gJ2V4dGVuZGVkIFNIQS0xJworc3ludGF4LiAgSGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIHNwZWxsIG9iamVjdCBuYW1lcy4gIFRoZQorb25lcyBsaXN0ZWQgbmVhciB0aGUgZW5kIG9mIHRoaXMgbGlzdCBuYW1lIHRyZWVzIGFuZAorYmxvYnMgY29udGFpbmVkIGluIGEgY29tbWl0LgorCisnPHNoYTE+JywgZS5nLiAnZGFlODZlMTk1MGIxMjc3ZTU0NWNlZTE4MDU1MTc1MDAyOWNmZTczNScsICdkYWU4NmUnOjoKKyAgVGhlIGZ1bGwgU0hBLTEgb2JqZWN0IG5hbWUgKDQwLWJ5dGUgaGV4YWRlY2ltYWwgc3RyaW5nKSwgb3IKKyAgYSBsZWFkaW5nIHN1YnN0cmluZyB0aGF0IGlzIHVuaXF1ZSB3aXRoaW4gdGhlIHJlcG9zaXRvcnkuCisgIEUuZy4gZGFlODZlMTk1MGIxMjc3ZTU0NWNlZTE4MDU1MTc1MDAyOWNmZTczNSBhbmQgZGFlODZlIGJvdGgKKyAgbmFtZSB0aGUgc2FtZSBjb21taXQgb2JqZWN0IGlmIHRoZXJlIGlzIG5vIG90aGVyIG9iamVjdCBpbgorICB5b3VyIHJlcG9zaXRvcnkgd2hvc2Ugb2JqZWN0IG5hbWUgc3RhcnRzIHdpdGggZGFlODZlLgorCisnPGRlc2NyaWJlT3V0cHV0PicsIGUuZy4gJ3YxLjcuNC4yLTY3OS1nM2JlZTdmYic6OgorICBPdXRwdXQgZnJvbSBgZ2l0IGRlc2NyaWJlYDsgaS5lLiBhIGNsb3Nlc3QgdGFnLCBvcHRpb25hbGx5CisgIGZvbGxvd2VkIGJ5IGEgZGFzaCBhbmQgYSBudW1iZXIgb2YgY29tbWl0cywgZm9sbG93ZWQgYnkgYSBkYXNoLCBhCisgICdnJywgYW5kIGFuIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lLgorCisnPHJlZm5hbWU+JywgZS5nLiAnbWFzdGVyJywgJ2hlYWRzL21hc3RlcicsICdyZWZzL2hlYWRzL21hc3Rlcic6OgorICBBIHN5bWJvbGljIHJlZiBuYW1lLiAgRS5nLiAnbWFzdGVyJyB0eXBpY2FsbHkgbWVhbnMgdGhlIGNvbW1pdAorICBvYmplY3QgcmVmZXJlbmNlZCBieSAncmVmcy9oZWFkcy9tYXN0ZXInLiAgSWYgeW91CisgIGhhcHBlbiB0byBoYXZlIGJvdGggJ2hlYWRzL21hc3RlcicgYW5kICd0YWdzL21hc3RlcicsIHlvdSBjYW4KKyAgZXhwbGljaXRseSBzYXkgJ2hlYWRzL21hc3RlcicgdG8gdGVsbCBHaXQgd2hpY2ggb25lIHlvdSBtZWFuLgorICBXaGVuIGFtYmlndW91cywgYSAnPHJlZm5hbWU+JyBpcyBkaXNhbWJpZ3VhdGVkIGJ5IHRha2luZyB0aGUKKyAgZmlyc3QgbWF0Y2ggaW4gdGhlIGZvbGxvd2luZyBydWxlczoKKworICAuIElmICckR0lUX0RJUi88cmVmbmFtZT4nIGV4aXN0cywgdGhhdCBpcyB3aGF0IHlvdSBtZWFuICh0aGlzIGlzIHVzdWFsbHkKKyAgICB1c2VmdWwgb25seSBmb3IgJ0hFQUQnLCAnRkVUQ0hfSEVBRCcsICdPUklHX0hFQUQnLCAnTUVSR0VfSEVBRCcKKyAgICBhbmQgJ0NIRVJSWV9QSUNLX0hFQUQnKTsKKworICAuIG90aGVyd2lzZSwgJ3JlZnMvPHJlZm5hbWU+JyBpZiBpdCBleGlzdHM7CisKKyAgLiBvdGhlcndpc2UsICdyZWZzL3RhZ3MvPHJlZm5hbWU+JyBpZiBpdCBleGlzdHM7CisKKyAgLiBvdGhlcndpc2UsICdyZWZzL2hlYWRzLzxyZWZuYW1lPicgaWYgaXQgZXhpc3RzOworCisgIC4gb3RoZXJ3aXNlLCAncmVmcy9yZW1vdGVzLzxyZWZuYW1lPicgaWYgaXQgZXhpc3RzOworCisgIC4gb3RoZXJ3aXNlLCAncmVmcy9yZW1vdGVzLzxyZWZuYW1lPi9IRUFEJyBpZiBpdCBleGlzdHMuCisrCisnSEVBRCcgbmFtZXMgdGhlIGNvbW1pdCBvbiB3aGljaCB5b3UgYmFzZWQgdGhlIGNoYW5nZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKydGRVRDSF9IRUFEJyByZWNvcmRzIHRoZSBicmFuY2ggd2hpY2ggeW91IGZldGNoZWQgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5Cit3aXRoIHlvdXIgbGFzdCBgZ2l0IGZldGNoYCBpbnZvY2F0aW9uLgorJ09SSUdfSEVBRCcgaXMgY3JlYXRlZCBieSBjb21tYW5kcyB0aGF0IG1vdmUgeW91ciAnSEVBRCcgaW4gYSBkcmFzdGljCit3YXksIHRvIHJlY29yZCB0aGUgcG9zaXRpb24gb2YgdGhlICdIRUFEJyBiZWZvcmUgdGhlaXIgb3BlcmF0aW9uLCBzbyB0aGF0Cit5b3UgY2FuIGVhc2lseSBjaGFuZ2UgdGhlIHRpcCBvZiB0aGUgYnJhbmNoIGJhY2sgdG8gdGhlIHN0YXRlIGJlZm9yZSB5b3UgcmFuCit0aGVtLgorJ01FUkdFX0hFQUQnIHJlY29yZHMgdGhlIGNvbW1pdChzKSB3aGljaCB5b3UgYXJlIG1lcmdpbmcgaW50byB5b3VyIGJyYW5jaAord2hlbiB5b3UgcnVuIGBnaXQgbWVyZ2VgLgorJ0NIRVJSWV9QSUNLX0hFQUQnIHJlY29yZHMgdGhlIGNvbW1pdCB3aGljaCB5b3UgYXJlIGNoZXJyeS1waWNraW5nCit3aGVuIHlvdSBydW4gYGdpdCBjaGVycnktcGlja2AuCisrCitOb3RlIHRoYXQgYW55IG9mIHRoZSAncmVmcy8qJyBjYXNlcyBhYm92ZSBtYXkgY29tZSBlaXRoZXIgZnJvbQordGhlICckR0lUX0RJUi9yZWZzJyBkaXJlY3Rvcnkgb3IgZnJvbSB0aGUgJyRHSVRfRElSL3BhY2tlZC1yZWZzJyBmaWxlLgorV2hpbGUgdGhlIHJlZiBuYW1lIGVuY29kaW5nIGlzIHVuc3BlY2lmaWVkLCBVVEYtOCBpcyBwcmVmZXJyZWQgYXMKK3NvbWUgb3V0cHV0IHByb2Nlc3NpbmcgbWF5IGFzc3VtZSByZWYgbmFtZXMgaW4gVVRGLTguCisKKydAJzo6CisgICdAJyBhbG9uZSBpcyBhIHNob3J0Y3V0IGZvciAnSEVBRCcuCisKKyc8cmVmbmFtZT5AXHs8ZGF0ZT5cfScsIGUuZy4gJ21hc3RlckBce3llc3RlcmRheVx9JywgJ0hFQURAXHs1IG1pbnV0ZXMgYWdvXH0nOjoKKyAgQSByZWYgZm9sbG93ZWQgYnkgdGhlIHN1ZmZpeCAnQCcgd2l0aCBhIGRhdGUgc3BlY2lmaWNhdGlvbgorICBlbmNsb3NlZCBpbiBhIGJyYWNlCisgIHBhaXIgKGUuZy4gJ1x7eWVzdGVyZGF5XH0nLCAnXHsxIG1vbnRoIDIgd2Vla3MgMyBkYXlzIDEgaG91ciAxCisgIHNlY29uZCBhZ29cfScgb3IgJ1x7MTk3OS0wMi0yNiAxODozMDowMFx9Jykgc3BlY2lmaWVzIHRoZSB2YWx1ZQorICBvZiB0aGUgcmVmIGF0IGEgcHJpb3IgcG9pbnQgaW4gdGltZS4gIFRoaXMgc3VmZml4IG1heSBvbmx5IGJlCisgIHVzZWQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgcmVmIG5hbWUgYW5kIHRoZSByZWYgbXVzdCBoYXZlIGFuCisgIGV4aXN0aW5nIGxvZyAoJyRHSVRfRElSL2xvZ3MvPHJlZj4nKS4gTm90ZSB0aGF0IHRoaXMgbG9va3MgdXAgdGhlIHN0YXRlCisgIG9mIHlvdXIgKmxvY2FsKiByZWYgYXQgYSBnaXZlbiB0aW1lOyBlLmcuLCB3aGF0IHdhcyBpbiB5b3VyIGxvY2FsCisgICdtYXN0ZXInIGJyYW5jaCBsYXN0IHdlZWsuIElmIHlvdSB3YW50IHRvIGxvb2sgYXQgY29tbWl0cyBtYWRlIGR1cmluZworICBjZXJ0YWluIHRpbWVzLCBzZWUgJy0tc2luY2UnIGFuZCAnLS11bnRpbCcuCisKKyc8cmVmbmFtZT5AXHs8bj5cfScsIGUuZy4gJ21hc3RlckBcezFcfSc6OgorICBBIHJlZiBmb2xsb3dlZCBieSB0aGUgc3VmZml4ICdAJyB3aXRoIGFuIG9yZGluYWwgc3BlY2lmaWNhdGlvbgorICBlbmNsb3NlZCBpbiBhIGJyYWNlIHBhaXIgKGUuZy4gJ1x7MVx9JywgJ1x7MTVcfScpIHNwZWNpZmllcworICB0aGUgbi10aCBwcmlvciB2YWx1ZSBvZiB0aGF0IHJlZi4gIEZvciBleGFtcGxlICdtYXN0ZXJAXHsxXH0nCisgIGlzIHRoZSBpbW1lZGlhdGUgcHJpb3IgdmFsdWUgb2YgJ21hc3Rlcicgd2hpbGUgJ21hc3RlckBcezVcfScKKyAgaXMgdGhlIDV0aCBwcmlvciB2YWx1ZSBvZiAnbWFzdGVyJy4gVGhpcyBzdWZmaXggbWF5IG9ubHkgYmUgdXNlZAorICBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSByZWYgbmFtZSBhbmQgdGhlIHJlZiBtdXN0IGhhdmUgYW4gZXhpc3RpbmcKKyAgbG9nICgnJEdJVF9ESVIvbG9ncy88cmVmbmFtZT4nKS4KKworJ0BcezxuPlx9JywgZS5nLiAnQFx7MVx9Jzo6CisgIFlvdSBjYW4gdXNlIHRoZSAnQCcgY29uc3RydWN0IHdpdGggYW4gZW1wdHkgcmVmIHBhcnQgdG8gZ2V0IGF0IGEKKyAgcmVmbG9nIGVudHJ5IG9mIHRoZSBjdXJyZW50IGJyYW5jaC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgb24KKyAgYnJhbmNoICdibGFibGEnIHRoZW4gJ0BcezFcfScgbWVhbnMgdGhlIHNhbWUgYXMgJ2JsYWJsYUBcezFcfScuCisKKydAXHstPG4+XH0nLCBlLmcuICdAXHstMVx9Jzo6CisgIFRoZSBjb25zdHJ1Y3QgJ0Bcey08bj5cfScgbWVhbnMgdGhlIDxuPnRoIGJyYW5jaC9jb21taXQgY2hlY2tlZCBvdXQKKyAgYmVmb3JlIHRoZSBjdXJyZW50IG9uZS4KKworJzxicmFuY2huYW1lPkBce3Vwc3RyZWFtXH0nLCBlLmcuICdtYXN0ZXJAXHt1cHN0cmVhbVx9JywgJ0Bce3VcfSc6OgorICBUaGUgc3VmZml4ICdAXHt1cHN0cmVhbVx9JyB0byBhIGJyYW5jaG5hbWUgKHNob3J0IGZvcm0gJzxicmFuY2huYW1lPkBce3VcfScpCisgIHJlZmVycyB0byB0aGUgYnJhbmNoIHRoYXQgdGhlIGJyYW5jaCBzcGVjaWZpZWQgYnkgYnJhbmNobmFtZSBpcyBzZXQgdG8gYnVpbGQgb24KKyAgdG9wIG9mIChjb25maWd1cmVkIHdpdGggYGJyYW5jaC48bmFtZT4ucmVtb3RlYCBhbmQKKyAgYGJyYW5jaC48bmFtZT4ubWVyZ2VgKS4gIEEgbWlzc2luZyBicmFuY2huYW1lIGRlZmF1bHRzIHRvIHRoZQorICBjdXJyZW50IG9uZS4KKworJzxicmFuY2huYW1lPkBce3B1c2hcfScsIGUuZy4gJ21hc3RlckBce3B1c2hcfScsICdAXHtwdXNoXH0nOjoKKyAgVGhlIHN1ZmZpeCAnQFx7cHVzaH0nIHJlcG9ydHMgdGhlIGJyYW5jaCAid2hlcmUgd2Ugd291bGQgcHVzaCB0byIgaWYKKyAgYGdpdCBwdXNoYCB3ZXJlIHJ1biB3aGlsZSBgYnJhbmNobmFtZWAgd2FzIGNoZWNrZWQgb3V0IChvciB0aGUgY3VycmVudAorICAnSEVBRCcgaWYgbm8gYnJhbmNobmFtZSBpcyBzcGVjaWZpZWQpLiBTaW5jZSBvdXIgcHVzaCBkZXN0aW5hdGlvbiBpcworICBpbiBhIHJlbW90ZSByZXBvc2l0b3J5LCBvZiBjb3Vyc2UsIHdlIHJlcG9ydCB0aGUgbG9jYWwgdHJhY2tpbmcgYnJhbmNoCisgIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhhdCBicmFuY2ggKGkuZS4sIHNvbWV0aGluZyBpbiAncmVmcy9yZW1vdGVzLycpLgorKworSGVyZSdzIGFuIGV4YW1wbGUgdG8gbWFrZSBpdCBtb3JlIGNsZWFyOgorKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgcHVzaC5kZWZhdWx0IGN1cnJlbnQKKyQgZ2l0IGNvbmZpZyByZW1vdGUucHVzaGRlZmF1bHQgbXlmb3JrCiskIGdpdCBjaGVja291dCAtYiBteWJyYW5jaCBvcmlnaW4vbWFzdGVyCisKKyQgZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBAe3Vwc3RyZWFtfQorcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKworJCBnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEB7cHVzaH0KK3JlZnMvcmVtb3Rlcy9teWZvcmsvbXlicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKworTm90ZSBpbiB0aGUgZXhhbXBsZSB0aGF0IHdlIHNldCB1cCBhIHRyaWFuZ3VsYXIgd29ya2Zsb3csIHdoZXJlIHdlIHB1bGwKK2Zyb20gb25lIGxvY2F0aW9uIGFuZCBwdXNoIHRvIGFub3RoZXIuIEluIGEgbm9uLXRyaWFuZ3VsYXIgd29ya2Zsb3csCisnQFx7cHVzaH0nIGlzIHRoZSBzYW1lIGFzICdAXHt1cHN0cmVhbX0nLCBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgaXQuCisKKyc8cmV2PntjYXJldH0nLCBlLmcuICdIRUFEe2NhcmV0fSwgdjEuNS4xe2NhcmV0fTAnOjoKKyAgQSBzdWZmaXggJ3tjYXJldH0nIHRvIGEgcmV2aXNpb24gcGFyYW1ldGVyIG1lYW5zIHRoZSBmaXJzdCBwYXJlbnQgb2YKKyAgdGhhdCBjb21taXQgb2JqZWN0LiAgJ3tjYXJldH08bj4nIG1lYW5zIHRoZSA8bj50aCBwYXJlbnQgKGkuZS4KKyAgJzxyZXY+e2NhcmV0fScKKyAgaXMgZXF1aXZhbGVudCB0byAnPHJldj57Y2FyZXR9MScpLiAgQXMgYSBzcGVjaWFsIHJ1bGUsCisgICc8cmV2PntjYXJldH0wJyBtZWFucyB0aGUgY29tbWl0IGl0c2VsZiBhbmQgaXMgdXNlZCB3aGVuICc8cmV2PicgaXMgdGhlCisgIG9iamVjdCBuYW1lIG9mIGEgdGFnIG9iamVjdCB0aGF0IHJlZmVycyB0byBhIGNvbW1pdCBvYmplY3QuCisKKyc8cmV2Pnt0aWxkZX08bj4nLCBlLmcuICdtYXN0ZXJ7dGlsZGV9Myc6OgorICBBIHN1ZmZpeCAne3RpbGRlfTxuPicgdG8gYSByZXZpc2lvbiBwYXJhbWV0ZXIgbWVhbnMgdGhlIGNvbW1pdAorICBvYmplY3QgdGhhdCBpcyB0aGUgPG4+dGggZ2VuZXJhdGlvbiBhbmNlc3RvciBvZiB0aGUgbmFtZWQKKyAgY29tbWl0IG9iamVjdCwgZm9sbG93aW5nIG9ubHkgdGhlIGZpcnN0IHBhcmVudHMuICBJLmUuICc8cmV2Pnt0aWxkZX0zJyBpcworICBlcXVpdmFsZW50IHRvICc8cmV2PntjYXJldH17Y2FyZXR9e2NhcmV0fScgd2hpY2ggaXMgZXF1aXZhbGVudCB0bworICAnPHJldj57Y2FyZXR9MXtjYXJldH0xe2NhcmV0fTEnLiAgU2VlIGJlbG93IGZvciBhbiBpbGx1c3RyYXRpb24gb2YKKyAgdGhlIHVzYWdlIG9mIHRoaXMgZm9ybS4KKworJzxyZXY+e2NhcmV0fVx7PHR5cGU+XH0nLCBlLmcuICd2MC45OS44e2NhcmV0fVx7Y29tbWl0XH0nOjoKKyAgQSBzdWZmaXggJ3tjYXJldH0nIGZvbGxvd2VkIGJ5IGFuIG9iamVjdCB0eXBlIG5hbWUgZW5jbG9zZWQgaW4KKyAgYnJhY2UgcGFpciBtZWFucyBkZXJlZmVyZW5jZSB0aGUgb2JqZWN0IGF0ICc8cmV2PicgcmVjdXJzaXZlbHkgdW50aWwKKyAgYW4gb2JqZWN0IG9mIHR5cGUgJzx0eXBlPicgaXMgZm91bmQgb3IgdGhlIG9iamVjdCBjYW5ub3QgYmUKKyAgZGVyZWZlcmVuY2VkIGFueW1vcmUgKGluIHdoaWNoIGNhc2UsIGJhcmYpLgorICBGb3IgZXhhbXBsZSwgaWYgJzxyZXY+JyBpcyBhIGNvbW1pdC1pc2gsICc8cmV2PntjYXJldH1ce2NvbW1pdFx9JworICBkZXNjcmliZXMgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWl0IG9iamVjdC4KKyAgU2ltaWxhcmx5LCBpZiAnPHJldj4nIGlzIGEgdHJlZS1pc2gsICc8cmV2PntjYXJldH1ce3RyZWVcfScKKyAgZGVzY3JpYmVzIHRoZSBjb3JyZXNwb25kaW5nIHRyZWUgb2JqZWN0LgorICAnPHJldj57Y2FyZXR9MCcKKyAgaXMgYSBzaG9ydC1oYW5kIGZvciAnPHJldj57Y2FyZXR9XHtjb21taXRcfScuCisrCisncmV2e2NhcmV0fVx7b2JqZWN0XH0nIGNhbiBiZSB1c2VkIHRvIG1ha2Ugc3VyZSAncmV2JyBuYW1lcyBhbgorb2JqZWN0IHRoYXQgZXhpc3RzLCB3aXRob3V0IHJlcXVpcmluZyAncmV2JyB0byBiZSBhIHRhZywgYW5kCit3aXRob3V0IGRlcmVmZXJlbmNpbmcgJ3Jldic7IGJlY2F1c2UgYSB0YWcgaXMgYWxyZWFkeSBhbiBvYmplY3QsCitpdCBkb2VzIG5vdCBoYXZlIHRvIGJlIGRlcmVmZXJlbmNlZCBldmVuIG9uY2UgdG8gZ2V0IHRvIGFuIG9iamVjdC4KKysKKydyZXZ7Y2FyZXR9XHt0YWdcfScgY2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgJ3JldicgaWRlbnRpZmllcyBhbgorZXhpc3RpbmcgdGFnIG9iamVjdC4KKworJzxyZXY+e2NhcmV0fVx7XH0nLCBlLmcuICd2MC45OS44e2NhcmV0fVx7XH0nOjoKKyAgQSBzdWZmaXggJ3tjYXJldH0nIGZvbGxvd2VkIGJ5IGFuIGVtcHR5IGJyYWNlIHBhaXIKKyAgbWVhbnMgdGhlIG9iamVjdCBjb3VsZCBiZSBhIHRhZywKKyAgYW5kIGRlcmVmZXJlbmNlIHRoZSB0YWcgcmVjdXJzaXZlbHkgdW50aWwgYSBub24tdGFnIG9iamVjdCBpcworICBmb3VuZC4KKworJzxyZXY+e2NhcmV0fVx7Lzx0ZXh0Plx9JywgZS5nLiAnSEVBRF57L2ZpeCBuYXN0eSBidWd9Jzo6CisgIEEgc3VmZml4ICd7Y2FyZXR9JyB0byBhIHJldmlzaW9uIHBhcmFtZXRlciwgZm9sbG93ZWQgYnkgYSBicmFjZQorICBwYWlyIHRoYXQgY29udGFpbnMgYSB0ZXh0IGxlZCBieSBhIHNsYXNoLAorICBpcyB0aGUgc2FtZSBhcyB0aGUgJzovZml4IG5hc3R5IGJ1Zycgc3ludGF4IGJlbG93IGV4Y2VwdCB0aGF0CisgIGl0IHJldHVybnMgdGhlIHlvdW5nZXN0IG1hdGNoaW5nIGNvbW1pdCB3aGljaCBpcyByZWFjaGFibGUgZnJvbQorICB0aGUgJzxyZXY+JyBiZWZvcmUgJ3tjYXJldH0nLgorCisnOi88dGV4dD4nLCBlLmcuICc6L2ZpeCBuYXN0eSBidWcnOjoKKyAgQSBjb2xvbiwgZm9sbG93ZWQgYnkgYSBzbGFzaCwgZm9sbG93ZWQgYnkgYSB0ZXh0LCBuYW1lcworICBhIGNvbW1pdCB3aG9zZSBjb21taXQgbWVzc2FnZSBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcmVndWxhciBleHByZXNzaW9uLgorICBUaGlzIG5hbWUgcmV0dXJucyB0aGUgeW91bmdlc3QgbWF0Y2hpbmcgY29tbWl0IHdoaWNoIGlzCisgIHJlYWNoYWJsZSBmcm9tIGFueSByZWYuICBJZiB0aGUgY29tbWl0IG1lc3NhZ2Ugc3RhcnRzIHdpdGggYQorICAnIScgeW91IGhhdmUgdG8gcmVwZWF0IHRoYXQ7ICB0aGUgc3BlY2lhbCBzZXF1ZW5jZSAnOi8hJywKKyAgZm9sbG93ZWQgYnkgc29tZXRoaW5nIGVsc2UgdGhhbiAnIScsIGlzIHJlc2VydmVkIGZvciBub3cuCisgIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gY2FuIG1hdGNoIGFueSBwYXJ0IG9mIHRoZSBjb21taXQgbWVzc2FnZS4gVG8KKyAgbWF0Y2ggbWVzc2FnZXMgc3RhcnRpbmcgd2l0aCBhIHN0cmluZywgb25lIGNhbiB1c2UgZS5nLiAnOi9eZm9vJy4KKworJzxyZXY+OjxwYXRoPicsIGUuZy4gJ0hFQUQ6UkVBRE1FJywgJzpSRUFETUUnLCAnbWFzdGVyOi4vUkVBRE1FJzo6CisgIEEgc3VmZml4ICc6JyBmb2xsb3dlZCBieSBhIHBhdGggbmFtZXMgdGhlIGJsb2Igb3IgdHJlZQorICBhdCB0aGUgZ2l2ZW4gcGF0aCBpbiB0aGUgdHJlZS1pc2ggb2JqZWN0IG5hbWVkIGJ5IHRoZSBwYXJ0CisgIGJlZm9yZSB0aGUgY29sb24uCisgICc6cGF0aCcgKHdpdGggYW4gZW1wdHkgcGFydCBiZWZvcmUgdGhlIGNvbG9uKQorICBpcyBhIHNwZWNpYWwgY2FzZSBvZiB0aGUgc3ludGF4IGRlc2NyaWJlZCBuZXh0OiBjb250ZW50CisgIHJlY29yZGVkIGluIHRoZSBpbmRleCBhdCB0aGUgZ2l2ZW4gcGF0aC4KKyAgQSBwYXRoIHN0YXJ0aW5nIHdpdGggJy4vJyBvciAnLi4vJyBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAgVGhlIGdpdmVuIHBhdGggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgdHJlZSdzIHJvb3QgZGlyZWN0b3J5LgorICBUaGlzIGlzIG1vc3QgdXNlZnVsIHRvIGFkZHJlc3MgYSBibG9iIG9yIHRyZWUgZnJvbSBhIGNvbW1pdCBvciB0cmVlIHRoYXQgaGFzCisgIHRoZSBzYW1lIHRyZWUgc3RydWN0dXJlIGFzIHRoZSB3b3JraW5nIHRyZWUuCisKKyc6PG4+OjxwYXRoPicsIGUuZy4gJzowOlJFQURNRScsICc6UkVBRE1FJzo6CisgIEEgY29sb24sIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBzdGFnZSBudW1iZXIgKDAgdG8gMykgYW5kIGEKKyAgY29sb24sIGZvbGxvd2VkIGJ5IGEgcGF0aCwgbmFtZXMgYSBibG9iIG9iamVjdCBpbiB0aGUKKyAgaW5kZXggYXQgdGhlIGdpdmVuIHBhdGguIEEgbWlzc2luZyBzdGFnZSBudW1iZXIgKGFuZCB0aGUgY29sb24KKyAgdGhhdCBmb2xsb3dzIGl0KSBuYW1lcyBhIHN0YWdlIDAgZW50cnkuIER1cmluZyBhIG1lcmdlLCBzdGFnZQorICAxIGlzIHRoZSBjb21tb24gYW5jZXN0b3IsIHN0YWdlIDIgaXMgdGhlIHRhcmdldCBicmFuY2gncyB2ZXJzaW9uCisgICh0eXBpY2FsbHkgdGhlIGN1cnJlbnQgYnJhbmNoKSwgYW5kIHN0YWdlIDMgaXMgdGhlIHZlcnNpb24gZnJvbQorICB0aGUgYnJhbmNoIHdoaWNoIGlzIGJlaW5nIG1lcmdlZC4KKworSGVyZSBpcyBhbiBpbGx1c3RyYXRpb24sIGJ5IEpvbiBMb2VsaWdlci4gIEJvdGggY29tbWl0IG5vZGVzIEIKK2FuZCBDIGFyZSBwYXJlbnRzIG9mIGNvbW1pdCBub2RlIEEuICBQYXJlbnQgY29tbWl0cyBhcmUgb3JkZXJlZAorbGVmdC10by1yaWdodC4KKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorRyAgIEggICBJICAgSgorIFwgLyAgICAgXCAvCisgIEQgICBFICAgRgorICAgXCAgfCAgLyBcCisgICAgXCB8IC8gICB8CisgICAgIFx8LyAgICB8CisgICAgICBCICAgICBDCisgICAgICAgXCAgIC8KKyAgICAgICAgXCAvCisgICAgICAgICBBCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKKyAgICBBID0gICAgICA9IEFeMAorICAgIEIgPSBBXiAgID0gQV4xICAgICA9IEF+MQorICAgIEMgPSBBXjIgID0gQV4yCisgICAgRCA9IEFeXiAgPSBBXjFeMSAgID0gQX4yCisgICAgRSA9IEJeMiAgPSBBXl4yCisgICAgRiA9IEJeMyAgPSBBXl4zCisgICAgRyA9IEFeXl4gPSBBXjFeMV4xID0gQX4zCisgICAgSCA9IEReMiAgPSBCXl4yICAgID0gQV5eXjIgID0gQX4yXjIKKyAgICBJID0gRl4gICA9IEJeM14gICAgPSBBXl4zXgorICAgIEogPSBGXjIgID0gQl4zXjIgICA9IEFeXjNeMgorCisKK1NQRUNJRllJTkcgUkFOR0VTCistLS0tLS0tLS0tLS0tLS0tLQorCitIaXN0b3J5IHRyYXZlcnNpbmcgY29tbWFuZHMgc3VjaCBhcyBgZ2l0IGxvZ2Agb3BlcmF0ZSBvbiBhIHNldAorb2YgY29tbWl0cywgbm90IGp1c3QgYSBzaW5nbGUgY29tbWl0LiAgVG8gdGhlc2UgY29tbWFuZHMsCitzcGVjaWZ5aW5nIGEgc2luZ2xlIHJldmlzaW9uIHdpdGggdGhlIG5vdGF0aW9uIGRlc2NyaWJlZCBpbiB0aGUKK3ByZXZpb3VzIHNlY3Rpb24gbWVhbnMgdGhlIHNldCBvZiBjb21taXRzIHJlYWNoYWJsZSBmcm9tIHRoYXQKK2NvbW1pdCwgZm9sbG93aW5nIHRoZSBjb21taXQgYW5jZXN0cnkgY2hhaW4uCisKK1RvIGV4Y2x1ZGUgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhIGNvbW1pdCwgYSBwcmVmaXggJ3tjYXJldH0nCitub3RhdGlvbiBpcyB1c2VkLiAgRS5nLiAne2NhcmV0fXIxIHIyJyBtZWFucyBjb21taXRzIHJlYWNoYWJsZQorZnJvbSAncjInIGJ1dCBleGNsdWRlIHRoZSBvbmVzIHJlYWNoYWJsZSBmcm9tICdyMScuCisKK1RoaXMgc2V0IG9wZXJhdGlvbiBhcHBlYXJzIHNvIG9mdGVuIHRoYXQgdGhlcmUgaXMgYSBzaG9ydGhhbmQKK2ZvciBpdC4gIFdoZW4geW91IGhhdmUgdHdvIGNvbW1pdHMgJ3IxJyBhbmQgJ3IyJyAobmFtZWQgYWNjb3JkaW5nCit0byB0aGUgc3ludGF4IGV4cGxhaW5lZCBpbiBTUEVDSUZZSU5HIFJFVklTSU9OUyBhYm92ZSksIHlvdSBjYW4gYXNrCitmb3IgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSByMiBleGNsdWRpbmcgdGhvc2UgdGhhdCBhcmUgcmVhY2hhYmxlCitmcm9tIHIxIGJ5ICd7Y2FyZXR9cjEgcjInIGFuZCBpdCBjYW4gYmUgd3JpdHRlbiBhcyAncjEuLnIyJy4KKworQSBzaW1pbGFyIG5vdGF0aW9uICdyMVwuLi5yMicgaXMgY2FsbGVkIHN5bW1ldHJpYyBkaWZmZXJlbmNlCitvZiAncjEnIGFuZCAncjInIGFuZCBpcyBkZWZpbmVkIGFzCisncjEgcjIgLS1ub3QgJChnaXQgbWVyZ2UtYmFzZSAtLWFsbCByMSByMiknLgorSXQgaXMgdGhlIHNldCBvZiBjb21taXRzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGVpdGhlciBvbmUgb2YKKydyMScgb3IgJ3IyJyBidXQgbm90IGZyb20gYm90aC4KKworSW4gdGhlc2UgdHdvIHNob3J0aGFuZHMsIHlvdSBjYW4gb21pdCBvbmUgZW5kIGFuZCBsZXQgaXQgZGVmYXVsdCB0byBIRUFELgorRm9yIGV4YW1wbGUsICdvcmlnaW4uLicgaXMgYSBzaG9ydGhhbmQgZm9yICdvcmlnaW4uLkhFQUQnIGFuZCBhc2tzICJXaGF0CitkaWQgSSBkbyBzaW5jZSBJIGZvcmtlZCBmcm9tIHRoZSBvcmlnaW4gYnJhbmNoPyIgIFNpbWlsYXJseSwgJy4ub3JpZ2luJworaXMgYSBzaG9ydGhhbmQgZm9yICdIRUFELi5vcmlnaW4nIGFuZCBhc2tzICJXaGF0IGRpZCB0aGUgb3JpZ2luIGRvIHNpbmNlCitJIGZvcmtlZCBmcm9tIHRoZW0/IiAgTm90ZSB0aGF0ICcuLicgd291bGQgbWVhbiAnSEVBRC4uSEVBRCcgd2hpY2ggaXMgYW4KK2VtcHR5IHJhbmdlIHRoYXQgaXMgYm90aCByZWFjaGFibGUgYW5kIHVucmVhY2hhYmxlIGZyb20gSEVBRC4KKworVHdvIG90aGVyIHNob3J0aGFuZHMgZm9yIG5hbWluZyBhIHNldCB0aGF0IGlzIGZvcm1lZCBieSBhIGNvbW1pdAorYW5kIGl0cyBwYXJlbnQgY29tbWl0cyBleGlzdC4gIFRoZSAncjF7Y2FyZXR9QCcgbm90YXRpb24gbWVhbnMgYWxsCitwYXJlbnRzIG9mICdyMScuICAncjF7Y2FyZXR9IScgaW5jbHVkZXMgY29tbWl0ICdyMScgYnV0IGV4Y2x1ZGVzCithbGwgb2YgaXRzIHBhcmVudHMuCisKK1RvIHN1bW1hcml6ZToKKworJzxyZXY+Jzo6CisJSW5jbHVkZSBjb21taXRzIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIChpLmUuIGFuY2VzdG9ycyBvZikKKwk8cmV2Pi4KKworJ3tjYXJldH08cmV2Pic6OgorCUV4Y2x1ZGUgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSAoaS5lLiBhbmNlc3RvcnMgb2YpCisJPHJldj4uCisKKyc8cmV2MT4uLjxyZXYyPic6OgorCUluY2x1ZGUgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSA8cmV2Mj4gYnV0IGV4Y2x1ZGUKKwl0aG9zZSB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSA8cmV2MT4uICBXaGVuIGVpdGhlciA8cmV2MT4gb3IKKwk8cmV2Mj4gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ0hFQUQnLgorCisnPHJldjE+XC4uLjxyZXYyPic6OgorCUluY2x1ZGUgY29tbWl0cyB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSBlaXRoZXIgPHJldjE+IG9yCisJPHJldjI+IGJ1dCBleGNsdWRlIHRob3NlIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIGJvdGguICBXaGVuCisJZWl0aGVyIDxyZXYxPiBvciA8cmV2Mj4gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ0hFQUQnLgorCisnPHJldj57Y2FyZXR9QCcsIGUuZy4gJ0hFQUR7Y2FyZXR9QCc6OgorICBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gYXQgc2lnbiBpcyB0aGUgc2FtZSBhcyBsaXN0aW5nCisgIGFsbCBwYXJlbnRzIG9mICc8cmV2PicgKG1lYW5pbmcsIGluY2x1ZGUgYW55dGhpbmcgcmVhY2hhYmxlIGZyb20KKyAgaXRzIHBhcmVudHMsIGJ1dCBub3QgdGhlIGNvbW1pdCBpdHNlbGYpLgorCisnPHJldj57Y2FyZXR9IScsIGUuZy4gJ0hFQUR7Y2FyZXR9ISc6OgorICBBIHN1ZmZpeCAne2NhcmV0fScgZm9sbG93ZWQgYnkgYW4gZXhjbGFtYXRpb24gbWFyayBpcyB0aGUgc2FtZQorICBhcyBnaXZpbmcgY29tbWl0ICc8cmV2PicgYW5kIHRoZW4gYWxsIGl0cyBwYXJlbnRzIHByZWZpeGVkIHdpdGgKKyAgJ3tjYXJldH0nIHRvIGV4Y2x1ZGUgdGhlbSAoYW5kIHRoZWlyIGFuY2VzdG9ycykuCisKK0hlcmUgYXJlIGEgaGFuZGZ1bCBvZiBleGFtcGxlczoKKworICAgRCAgICAgICAgICAgICAgICBHIEggRAorICAgRCBGICAgICAgICAgICAgICBHIEggSSBKIEQgRgorICAgXkcgRCAgICAgICAgICAgICBIIEQKKyAgIF5EIEIgICAgICAgICAgICAgRSBJIEogRiBCCisgICBCLi5DICAgICAgICAgICAgIEMKKyAgIEIuLi5DICAgICAgICAgICAgRyBIIEQgRSBCIEMKKyAgIF5EIEIgQyAgICAgICAgICAgRSBJIEogRiBCIEMKKyAgIEMgICAgICAgICAgICAgICAgSSBKIEYgQworICAgQ15AICAgICAgICAgICAgICBJIEogRgorICAgQ14hICAgICAgICAgICAgICBDCisgICBGXiEgRCAgICAgICAgICAgIEcgSCBEIEYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2VxdWVuY2VyLnR4dCBiL0RvY3VtZW50YXRpb24vc2VxdWVuY2VyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzQ3ZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zZXF1ZW5jZXIudHh0CkBAIC0wLDAgKzEsMTIgQEAKKy0tY29udGludWU6OgorCUNvbnRpbnVlIHRoZSBvcGVyYXRpb24gaW4gcHJvZ3Jlc3MgdXNpbmcgdGhlIGluZm9ybWF0aW9uIGluCisJJy5naXQvc2VxdWVuY2VyJy4gIENhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFmdGVyIHJlc29sdmluZworCWNvbmZsaWN0cyBpbiBhIGZhaWxlZCBjaGVycnktcGljayBvciByZXZlcnQuCisKKy0tcXVpdDo6CisJRm9yZ2V0IGFib3V0IHRoZSBjdXJyZW50IG9wZXJhdGlvbiBpbiBwcm9ncmVzcy4gIENhbiBiZSB1c2VkCisJdG8gY2xlYXIgdGhlIHNlcXVlbmNlciBzdGF0ZSBhZnRlciBhIGZhaWxlZCBjaGVycnktcGljayBvcgorCXJldmVydC4KKworLS1hYm9ydDo6CisJQ2FuY2VsIHRoZSBvcGVyYXRpb24gYW5kIHJldHVybiB0byB0aGUgcHJlLXNlcXVlbmNlIHN0YXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvLmdpdGlnbm9yZSBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhODkxZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorYXBpLWluZGV4LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWFsbG9jYXRpb24tZ3Jvd2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYWxsb2NhdGlvbi1ncm93aW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTU5YjU0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWFsbG9jYXRpb24tZ3Jvd2luZy50eHQKQEAgLTAsMCArMSwzOSBAQAorYWxsb2NhdGlvbiBncm93aW5nIEFQSQorPT09PT09PT09PT09PT09PT09PT09PQorCitEeW5hbWljYWxseSBncm93aW5nIGFuIGFycmF5IHVzaW5nIHJlYWxsb2MoKSBpcyBlcnJvciBwcm9uZSBhbmQgYm9yaW5nLgorCitEZWZpbmUgeW91ciBhcnJheSB3aXRoOgorCisqIGEgcG9pbnRlciAoYGl0ZW1gKSB0aGF0IHBvaW50cyBhdCB0aGUgYXJyYXksIGluaXRpYWxpemVkIHRvIGBOVUxMYAorICAoYWx0aG91Z2ggcGxlYXNlIG5hbWUgdGhlIHZhcmlhYmxlIGJhc2VkIG9uIGl0cyBjb250ZW50cywgbm90IG9uIGl0cworICB0eXBlKTsKKworKiBhbiBpbnRlZ2VyIHZhcmlhYmxlIChgYWxsb2NgKSB0aGF0IGtlZXBzIHRyYWNrIG9mIGhvdyBiaWcgdGhlIGN1cnJlbnQKKyAgYWxsb2NhdGlvbiBpcywgaW5pdGlhbGl6ZWQgdG8gYDBgOworCisqIGFub3RoZXIgaW50ZWdlciB2YXJpYWJsZSAoYG5yYCkgdG8ga2VlcCB0cmFjayBvZiBob3cgbWFueSBlbGVtZW50cyB0aGUKKyAgYXJyYXkgY3VycmVudGx5IGhhcywgaW5pdGlhbGl6ZWQgdG8gYDBgLgorCitUaGVuIGJlZm9yZSBhZGRpbmcgYG5gdGggZWxlbWVudCB0byB0aGUgaXRlbSwgY2FsbCBgQUxMT0NfR1JPVyhpdGVtLCBuLAorYWxsb2MpYC4gIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBhcnJheSBjYW4gaG9sZCBhdCBsZWFzdCBgbmAgZWxlbWVudHMgYnkKK2NhbGxpbmcgYHJlYWxsb2MoMylgIGFuZCBhZGp1c3RpbmcgYGFsbG9jYCB2YXJpYWJsZS4KKworLS0tLS0tLS0tLS0tCitzb21ldHlwZSAqaXRlbTsKK3NpemVfdCBucjsKK3NpemVfdCBhbGxvYworCitmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwlpZiAod2UgbGlrZSBpdGVtW2ldIGFscmVhZHkpCisJCXJldHVybjsKKworLyogd2UgZGlkIG5vdCBsaWtlIGFueSBleGlzdGluZyBvbmUsIHNvIGFkZCBvbmUgKi8KK0FMTE9DX0dST1coaXRlbSwgbnIgKyAxLCBhbGxvYyk7CitpdGVtW25yKytdID0gdmFsdWUgeW91IGxpa2U7CistLS0tLS0tLS0tLS0KKworWW91IGFyZSByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgdGhlIGBucmAgdmFyaWFibGUuCisKK0lmIHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0byBhbGxvY2F0ZSBleHBsaWNpdGx5Cit0aGVuIHVzZSB0aGUgbWFjcm8gYFJFQUxMT0NfQVJSQVkoaXRlbSwgYWxsb2MpYCBpbnN0ZWFkIG9mIGBBTExPQ19HUk9XYC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1hcmd2LWFycmF5LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1hcmd2LWFycmF5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDc2MTcyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWFyZ3YtYXJyYXkudHh0CkBAIC0wLDAgKzEsNTggQEAKK2FyZ3YtYXJyYXkgQVBJCis9PT09PT09PT09PT09PQorCitUaGUgYXJndi1hcnJheSBBUEkgYWxsb3dzIG9uZSB0byBkeW5hbWljYWxseSBidWlsZCBhbmQgc3RvcmUKK05VTEwtdGVybWluYXRlZCBsaXN0cy4gIEFuIGFyZ3YtYXJyYXkgbWFpbnRhaW5zIHRoZSBpbnZhcmlhbnQgdGhhdCB0aGUKK2Bhcmd2YCBtZW1iZXIgYWx3YXlzIHBvaW50cyB0byBhIG5vbi1OVUxMIGFycmF5LCBhbmQgdGhhdCB0aGUgYXJyYXkgaXMKK2Fsd2F5cyBOVUxMLXRlcm1pbmF0ZWQgYXQgdGhlIGVsZW1lbnQgcG9pbnRlZCB0byBieSBgYXJndlthcmdjXWAuIFRoaXMKK21ha2VzIHRoZSByZXN1bHQgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gZnVuY3Rpb25zIGV4cGVjdGluZyB0byByZWNlaXZlCithcmd2IGZyb20gbWFpbigpLCBvciB0aGUgbGluazphcGktcnVuLWNvbW1hbmQuaHRtbFtydW4tY29tbWFuZCBBUEldLgorCitUaGUgbGluazphcGktc3RyaW5nLWxpc3QuaHRtbFtzdHJpbmctbGlzdCBBUEldIGlzIHNpbWlsYXIsIGJ1dCBjYW5ub3QgYmUKK3VzZWQgZm9yIHRoZXNlIHB1cnBvc2VzOyBpbnN0ZWFkIG9mIHN0b3JpbmcgYSBzdHJhaWdodCBzdHJpbmcgcG9pbnRlciwKK2l0IGNvbnRhaW5zIGFuIGl0ZW0gc3RydWN0dXJlIHdpdGggYSBgdXRpbGAgZmllbGQgdGhhdCBpcyBub3QgY29tcGF0aWJsZQord2l0aCB0aGUgdHJhZGl0aW9uYWwgYXJndiBpbnRlcmZhY2UuCisKK0VhY2ggYGFyZ3ZfYXJyYXlgIG1hbmFnZXMgaXRzIG93biBtZW1vcnkuIEFueSBzdHJpbmdzIHB1c2hlZCBpbnRvIHRoZQorYXJyYXkgYXJlIGR1cGxpY2F0ZWQsIGFuZCBhbGwgbWVtb3J5IGlzIGZyZWVkIGJ5IGFyZ3ZfYXJyYXlfY2xlYXIoKS4KKworRGF0YSBTdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworYHN0cnVjdCBhcmd2X2FycmF5YDo6CisKKwlBIHNpbmdsZSBhcnJheS4gVGhpcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYnkgYXNzaWdubWVudCBmcm9tCisJYEFSR1ZfQVJSQVlfSU5JVGAsIG9yIGJ5IGNhbGxpbmcgYGFyZ3ZfYXJyYXlfaW5pdGAuIFRoZSBgYXJndmAKKwltZW1iZXIgY29udGFpbnMgdGhlIGFjdHVhbCBhcnJheTsgdGhlIGBhcmdjYCBtZW1iZXIgY29udGFpbnMgdGhlCisJbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheSwgbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcKKwlOVUxMLgorCitGdW5jdGlvbnMKKy0tLS0tLS0tLQorCitgYXJndl9hcnJheV9pbml0YDo6CisJSW5pdGlhbGl6ZSBhbiBhcnJheS4gVGhpcyBpcyBubyBkaWZmZXJlbnQgdGhhbiBhc3NpZ25pbmcgZnJvbQorCWBBUkdWX0FSUkFZX0lOSVRgLgorCitgYXJndl9hcnJheV9wdXNoYDo6CisJUHVzaCBhIGNvcHkgb2YgYSBzdHJpbmcgb250byB0aGUgZW5kIG9mIHRoZSBhcnJheS4KKworYGFyZ3ZfYXJyYXlfcHVzaGxgOjoKKwlQdXNoIGEgbGlzdCBvZiBzdHJpbmdzIG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuIFRoZSBhcmd1bWVudHMKKwlzaG91bGQgYmUgYSBsaXN0IG9mIGBjb25zdCBjaGFyICpgIHN0cmluZ3MsIHRlcm1pbmF0ZWQgYnkgYSBOVUxMCisJYXJndW1lbnQuCisKK2Bhcmd2X2FycmF5X3B1c2hmYDo6CisJRm9ybWF0IGEgc3RyaW5nIGFuZCBwdXNoIGl0IG9udG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkuIFRoaXMgaXMgYQorCWNvbnZlbmllbmNlIHdyYXBwZXIgY29tYmluaW5nIGBzdHJidWZfYWRkZmAgYW5kIGBhcmd2X2FycmF5X3B1c2hgLgorCitgYXJndl9hcnJheV9wdXNodmA6OgorCVB1c2ggYSBudWxsLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RyaW5ncyBvbnRvIHRoZSBlbmQgb2YgdGhlIGFycmF5LgorCitgYXJndl9hcnJheV9wb3BgOjoKKwlSZW1vdmUgdGhlIGZpbmFsIGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuIElmIHRoZXJlIGFyZSBubworCWVsZW1lbnRzIGluIHRoZSBhcnJheSwgZG8gbm90aGluZy4KKworYGFyZ3ZfYXJyYXlfY2xlYXJgOjoKKwlGcmVlIGFsbCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcnJheSBhbmQgcmV0dXJuIGl0IHRvIHRoZQorCWluaXRpYWwsIGVtcHR5IHN0YXRlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWJ1aWx0aW4udHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWJ1aWx0aW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYTM5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktYnVpbHRpbi50eHQKQEAgLTAsMCArMSw3MyBAQAorYnVpbHRpbiBBUEkKKz09PT09PT09PT09CisKK0FkZGluZyBhIG5ldyBidWlsdC1pbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSA0IHRoaW5ncyB0byBkbyB0byBhZGQgYSBidWlsdC1pbiBjb21tYW5kIGltcGxlbWVudGF0aW9uIHRvCitHaXQ6CisKKy4gRGVmaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYnVpbHQtaW4gY29tbWFuZCBgZm9vYCB3aXRoCisgIHNpZ25hdHVyZToKKworCWludCBjbWRfZm9vKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKKworLiBBZGQgdGhlIGV4dGVybmFsIGRlY2xhcmF0aW9uIGZvciB0aGUgZnVuY3Rpb24gdG8gYGJ1aWx0aW4uaGAuCisKKy4gQWRkIHRoZSBjb21tYW5kIHRvIHRoZSBgY29tbWFuZHNbXWAgdGFibGUgZGVmaW5lZCBpbiBgZ2l0LmNgLgorICBUaGUgZW50cnkgc2hvdWxkIGxvb2sgbGlrZToKKworCXsgImZvbyIsIGNtZF9mb28sIDxvcHRpb25zPiB9LAorKword2hlcmUgb3B0aW9ucyBpcyB0aGUgYml0d2lzZS1vciBvZjoKKworYFJVTl9TRVRVUGA6OgorCUlmIHRoZXJlIGlzIG5vdCBhIEdpdCBkaXJlY3RvcnkgdG8gd29yayBvbiwgYWJvcnQuICBJZiB0aGVyZQorCWlzIGEgd29yayB0cmVlLCBjaGRpciB0byB0aGUgdG9wIG9mIGl0IGlmIHRoZSBjb21tYW5kIHdhcworCWludm9rZWQgaW4gYSBzdWJkaXJlY3RvcnkuICBJZiB0aGVyZSBpcyBubyB3b3JrIHRyZWUsIG5vCisJY2hkaXIoKSBpcyBkb25lLgorCitgUlVOX1NFVFVQX0dFTlRMWWA6OgorCUlmIHRoZXJlIGlzIGEgR2l0IGRpcmVjdG9yeSwgY2hkaXIgYXMgcGVyIFJVTl9TRVRVUCwgb3RoZXJ3aXNlLAorCWRvbid0IGNoZGlyIGFueXdoZXJlLgorCitgVVNFX1BBR0VSYDo6CisKKwlJZiB0aGUgc3RhbmRhcmQgb3V0cHV0IGlzIGNvbm5lY3RlZCB0byBhIHR0eSwgc3Bhd24gYSBwYWdlciBhbmQKKwlmZWVkIG91ciBvdXRwdXQgdG8gaXQuCisKK2BORUVEX1dPUktfVFJFRWA6OgorCisJTWFrZSBzdXJlIHRoZXJlIGlzIGEgd29yayB0cmVlLCBpLmUuIHRoZSBjb21tYW5kIGNhbm5vdCBhY3QKKwlvbiBiYXJlIHJlcG9zaXRvcmllcy4KKwlUaGlzIG9ubHkgbWFrZXMgc2Vuc2Ugd2hlbiBgUlVOX1NFVFVQYCBpcyBhbHNvIHNldC4KKworLiBBZGQgYGJ1aWx0aW4vZm9vLm9gIHRvIGBCVUlMVElOX09CSlNgIGluIGBNYWtlZmlsZWAuCisKK0FkZGl0aW9uYWxseSwgaWYgYGZvb2AgaXMgYSBuZXcgY29tbWFuZCwgdGhlcmUgYXJlIDMgbW9yZSB0aGluZ3MgdG8gZG86CisKKy4gQWRkIHRlc3RzIHRvIGB0L2AgZGlyZWN0b3J5LgorCisuIFdyaXRlIGRvY3VtZW50YXRpb24gaW4gYERvY3VtZW50YXRpb24vZ2l0LWZvby50eHRgLgorCisuIEFkZCBhbiBlbnRyeSBmb3IgYGdpdC1mb29gIHRvIGBjb21tYW5kLWxpc3QudHh0YC4KKworLiBBZGQgYW4gZW50cnkgZm9yIGAvZ2l0LWZvb2AgdG8gYC5naXRpZ25vcmVgLgorCisKK0hvdyBhIGJ1aWx0LWluIGlzIGNhbGxlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBgY21kX2ZvbygpYCB0YWtlcyB0aHJlZSBwYXJhbWV0ZXJzLCBgYXJnY2AsIGBhcmd2LAorYW5kIGBwcmVmaXhgLiAgVGhlIGZpcnN0IHR3byBhcmUgc2ltaWxhciB0byB3aGF0IGBtYWluKClgIG9mIGEKK3N0YW5kYWxvbmUgY29tbWFuZCB3b3VsZCBiZSBjYWxsZWQgd2l0aC4KKworV2hlbiBgUlVOX1NFVFVQYCBpcyBzcGVjaWZpZWQgaW4gdGhlIGBjb21tYW5kc1tdYCB0YWJsZSwgYW5kIHdoZW4geW91Cit3ZXJlIHN0YXJ0ZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgd29yayB0cmVlLCBgY21kX2ZvbygpYCBpcyBjYWxsZWQKK2FmdGVyIGNoZGlyKDIpIHRvIHRoZSB0b3Agb2YgdGhlIHdvcmsgdHJlZSwgYW5kIGBwcmVmaXhgIGdldHMgdGhlIHBhdGgKK3RvIHRoZSBzdWJkaXJlY3RvcnkgdGhlIGNvbW1hbmQgc3RhcnRlZCBmcm9tLiAgVGhpcyBhbGxvd3MgeW91IHRvCitjb252ZXJ0IGEgdXNlci1zdXBwbGllZCBwYXRobmFtZSAodHlwaWNhbGx5IHJlbGF0aXZlIHRvIHRoYXQgZGlyZWN0b3J5KQordG8gYSBwYXRobmFtZSByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSB3b3JrIHRyZWUuCisKK1RoZSByZXR1cm4gdmFsdWUgZnJvbSBgY21kX2ZvbygpYCBiZWNvbWVzIHRoZSBleGl0IHN0YXR1cyBvZiB0aGUKK2NvbW1hbmQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1jb25maWcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOGI5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY29uZmlnLnR4dApAQCAtMCwwICsxLDMyNCBAQAorY29uZmlnIEFQSQorPT09PT09PT09PQorCitUaGUgY29uZmlnIEFQSSBnaXZlcyBjYWxsZXJzIGEgd2F5IHRvIGFjY2VzcyBHaXQgY29uZmlndXJhdGlvbiBmaWxlcworKGFuZCBmaWxlcyB3aGljaCBoYXZlIHRoZSBzYW1lIHN5bnRheCkuIFNlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIGEKK2Rpc2N1c3Npb24gb2YgdGhlIGNvbmZpZyBmaWxlIHN5bnRheC4KKworR2VuZXJhbCBVc2FnZQorLS0tLS0tLS0tLS0tLQorCitDb25maWcgZmlsZXMgYXJlIHBhcnNlZCBsaW5lYXJseSwgYW5kIGVhY2ggdmFyaWFibGUgZm91bmQgaXMgcGFzc2VkIHRvIGEKK2NhbGxlci1wcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbi4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlCitmb3IgYW55IGFjdGlvbnMgdG8gYmUgdGFrZW4gb24gdGhlIGNvbmZpZyBvcHRpb24sIGFuZCBpcyBmcmVlIHRvIGlnbm9yZQorc29tZSBvcHRpb25zLiBJdCBpcyBub3QgdW5jb21tb24gZm9yIHRoZSBjb25maWd1cmF0aW9uIHRvIGJlIHBhcnNlZAorc2V2ZXJhbCB0aW1lcyBkdXJpbmcgdGhlIHJ1biBvZiBhIEdpdCBwcm9ncmFtLCB3aXRoIGRpZmZlcmVudCBjYWxsYmFja3MKK3BpY2tpbmcgb3V0IGRpZmZlcmVudCB2YXJpYWJsZXMgdXNlZnVsIHRvIHRoZW1zZWx2ZXMuCisKK0EgY29uZmlnIGNhbGxiYWNrIGZ1bmN0aW9uIHRha2VzIHRocmVlIHBhcmFtZXRlcnM6CisKKy0gdGhlIG5hbWUgb2YgdGhlIHBhcnNlZCB2YXJpYWJsZS4gVGhpcyBpcyBpbiBjYW5vbmljYWwgImZsYXQiIGZvcm06IHRoZQorICBzZWN0aW9uLCBzdWJzZWN0aW9uLCBhbmQgdmFyaWFibGUgc2VnbWVudHMgd2lsbCBiZSBzZXBhcmF0ZWQgYnkgZG90cywKKyAgYW5kIHRoZSBzZWN0aW9uIGFuZCB2YXJpYWJsZSBzZWdtZW50cyB3aWxsIGJlIGFsbCBsb3dlcmNhc2UuIEUuZy4sCisgIGBjb3JlLmlnbm9yZWNhc2VgLCBgZGlmZi5Tb21lVHlwZS50ZXh0Y29udmAuCisKKy0gdGhlIHZhbHVlIG9mIHRoZSBmb3VuZCB2YXJpYWJsZSwgYXMgYSBzdHJpbmcuIElmIHRoZSB2YXJpYWJsZSBoYWQgbm8KKyAgdmFsdWUgc3BlY2lmaWVkLCB0aGUgdmFsdWUgd2lsbCBiZSBOVUxMICh0eXBpY2FsbHkgdGhpcyBtZWFucyBpdAorICBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgYm9vbGVhbiB0cnVlKS4KKworLSBhIHZvaWQgcG9pbnRlciBwYXNzZWQgaW4gYnkgdGhlIGNhbGxlciBvZiB0aGUgY29uZmlnIEFQSTsgdGhpcyBjYW4KKyAgY29udGFpbiBjYWxsYmFjay1zcGVjaWZpYyBkYXRhCisKK0EgY29uZmlnIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gMCBmb3Igc3VjY2Vzcywgb3IgLTEgaWYgdGhlIHZhcmlhYmxlCitjb3VsZCBub3QgYmUgcGFyc2VkIHByb3Blcmx5LgorCitCYXNpYyBDb25maWcgUXVlcnlpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb3N0IHByb2dyYW1zIHdpbGwgc2ltcGx5IHdhbnQgdG8gbG9vayB1cCB2YXJpYWJsZXMgaW4gYWxsIGNvbmZpZyBmaWxlcwordGhhdCBHaXQga25vd3MgYWJvdXQsIHVzaW5nIHRoZSBub3JtYWwgcHJlY2VkZW5jZSBydWxlcy4gVG8gZG8gdGhpcywKK2NhbGwgYGdpdF9jb25maWdgIHdpdGggYSBjYWxsYmFjayBmdW5jdGlvbiBhbmQgdm9pZCBkYXRhIHBvaW50ZXIuCisKK2BnaXRfY29uZmlnYCB3aWxsIHJlYWQgYWxsIGNvbmZpZyBzb3VyY2VzIGluIG9yZGVyIG9mIGluY3JlYXNpbmcKK3ByaW9yaXR5LiBUaHVzIGEgY2FsbGJhY2sgc2hvdWxkIHR5cGljYWxseSBvdmVyd3JpdGUgcHJldmlvdXNseS1zZWVuCitlbnRyaWVzIHdpdGggbmV3IG9uZXMgKGUuZy4sIGlmIGJvdGggdGhlIHVzZXItd2lkZSBgfi8uZ2l0Y29uZmlnYCBhbmQKK3JlcG8tc3BlY2lmaWMgYC5naXQvY29uZmlnYCBjb250YWluIGBjb2xvci51aWAsIHRoZSBjb25maWcgbWFjaGluZXJ5Cit3aWxsIGZpcnN0IGZlZWQgdGhlIHVzZXItd2lkZSBvbmUgdG8gdGhlIGNhbGxiYWNrLCBhbmQgdGhlbiB0aGUKK3JlcG8tc3BlY2lmaWMgb25lOyBieSBvdmVyd3JpdGluZywgdGhlIGhpZ2hlci1wcmlvcml0eSByZXBvLXNwZWNpZmljCit2YWx1ZSBpcyBsZWZ0IGF0IHRoZSBlbmQpLgorCitUaGUgYGdpdF9jb25maWdfd2l0aF9vcHRpb25zYCBmdW5jdGlvbiBsZXRzIHRoZSBjYWxsZXIgZXhhbWluZSBjb25maWcKK3doaWxlIGFkanVzdGluZyBzb21lIG9mIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGBnaXRfY29uZmlnYC4gSXQgc2hvdWxkCithbG1vc3QgbmV2ZXIgYmUgdXNlZCBieSAicmVndWxhciIgR2l0IGNvZGUgdGhhdCBpcyBsb29raW5nIHVwCitjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gSXQgaXMgaW50ZW5kZWQgZm9yIGFkdmFuY2VkIGNhbGxlcnMgbGlrZQorYGdpdC1jb25maWdgLCB3aGljaCBhcmUgaW50ZW50aW9uYWxseSB0d2Vha2luZyB0aGUgbm9ybWFsIGNvbmZpZy1sb29rdXAKK3Byb2Nlc3MuIEl0IHRha2VzIHR3byBleHRyYSBwYXJhbWV0ZXJzOgorCitgZmlsZW5hbWVgOjoKK0lmIHRoaXMgcGFyYW1ldGVyIGlzIG5vbi1OVUxMLCBpdCBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgYSBmaWxlIHRvCitwYXJzZSBmb3IgY29uZmlndXJhdGlvbiwgcmF0aGVyIHRoYW4gbG9va2luZyBpbiB0aGUgdXN1YWwgZmlsZXMuIFJlZ3VsYXIKK2BnaXRfY29uZmlnYCBkZWZhdWx0cyB0byBgTlVMTGAuCisKK2ByZXNwZWN0X2luY2x1ZGVzYDo6CitTcGVjaWZ5IHdoZXRoZXIgaW5jbHVkZSBkaXJlY3RpdmVzIHNob3VsZCBiZSBmb2xsb3dlZCBpbiBwYXJzZWQgZmlsZXMuCitSZWd1bGFyIGBnaXRfY29uZmlnYCBkZWZhdWx0cyB0byBgMWAuCisKK1RoZXJlIGlzIGEgc3BlY2lhbCB2ZXJzaW9uIG9mIGBnaXRfY29uZmlnYCBjYWxsZWQgYGdpdF9jb25maWdfZWFybHlgLgorVGhpcyB2ZXJzaW9uIHRha2VzIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIHJlcG9zaXRvcnkKK2NvbmZpZywgaW5zdGVhZCBvZiBoYXZpbmcgaXQgbG9va2VkIHVwIHZpYSBgZ2l0X3BhdGhgLiBUaGlzIGlzIHVzZWZ1bAorZWFybHkgaW4gYSBHaXQgcHJvZ3JhbSBiZWZvcmUgdGhlIHJlcG9zaXRvcnkgaGFzIGJlZW4gZm91bmQuIFVubGVzcworeW91J3JlIHdvcmtpbmcgd2l0aCBlYXJseSBzZXR1cCBjb2RlLCB5b3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byB1c2UKK3RoaXMuCisKK1JlYWRpbmcgU3BlY2lmaWMgRmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gcmVhZCBhIHNwZWNpZmljIGZpbGUgaW4gZ2l0LWNvbmZpZyBmb3JtYXQsIHVzZQorYGdpdF9jb25maWdfZnJvbV9maWxlYC4gVGhpcyB0YWtlcyB0aGUgc2FtZSBjYWxsYmFjayBhbmQgZGF0YSBwYXJhbWV0ZXJzCithcyBgZ2l0X2NvbmZpZ2AuCisKK1F1ZXJ5aW5nIEZvciBTcGVjaWZpYyBWYXJpYWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIHByb2dyYW1zIHdhbnRpbmcgdG8gcXVlcnkgZm9yIHNwZWNpZmljIHZhcmlhYmxlcyBpbiBhIG5vbi1jYWxsYmFjaworbWFubmVyLCB0aGUgY29uZmlnIEFQSSBwcm92aWRlcyB0d28gZnVuY3Rpb25zIGBnaXRfY29uZmlnX2dldF92YWx1ZWAKK2FuZCBgZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGlgLiBUaGV5IGJvdGggcmVhZCB2YWx1ZXMgZnJvbSBhbiBpbnRlcm5hbAorY2FjaGUgZ2VuZXJhdGVkIHByZXZpb3VzbHkgZnJvbSByZWFkaW5nIHRoZSBjb25maWcgZmlsZXMuCisKK2BpbnQgZ2l0X2NvbmZpZ19nZXRfdmFsdWUoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqdmFsdWUpYDo6CisKKwlGaW5kcyB0aGUgaGlnaGVzdC1wcmlvcml0eSB2YWx1ZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAsCisJc3RvcmVzIHRoZSBwb2ludGVyIHRvIGl0IGluIGB2YWx1ZWAgYW5kIHJldHVybnMgMC4gV2hlbiB0aGUKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyAxIHdpdGhvdXQgdG91Y2hpbmcKKwlgdmFsdWVgLiBUaGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkgYHZhbHVlYCwgYXMgaXQgaXMgb3duZWQKKwlieSB0aGUgY2FjaGUuCisKK2Bjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpKGNvbnN0IGNoYXIgKmtleSlgOjoKKworCUZpbmRzIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBsaXN0LCBzb3J0ZWQgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBwcmlvcml0eQorCWZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YC4gV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorCWBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBOVUxMLiBUaGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSBvciBtb2RpZnkKKwl0aGUgcmV0dXJuZWQgcG9pbnRlciwgYXMgaXQgaXMgb3duZWQgYnkgdGhlIGNhY2hlLgorCitgdm9pZCBnaXRfY29uZmlnX2NsZWFyKHZvaWQpYDo6CisKKwlSZXNldHMgYW5kIGludmFsaWRhdGVzIHRoZSBjb25maWcgY2FjaGUuCisKK1RoZSBjb25maWcgQVBJIGFsc28gcHJvdmlkZXMgdHlwZSBzcGVjaWZpYyBBUEkgZnVuY3Rpb25zIHdoaWNoIGRvIGNvbnZlcnNpb24KK2FzIHdlbGwgYXMgcmV0cmlldmFsIGZvciB0aGUgcXVlcmllZCB2YXJpYWJsZSwgaW5jbHVkaW5nOgorCitgaW50IGdpdF9jb25maWdfZ2V0X2ludChjb25zdCBjaGFyICprZXksIGludCAqZGVzdClgOjoKKworCUZpbmRzIGFuZCBwYXJzZXMgdGhlIHZhbHVlIHRvIGFuIGludGVnZXIgZm9yIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlCisJYGtleWAuIERpZXMgb24gZXJyb3I7IG90aGVyd2lzZSwgc3RvcmVzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyc2VkIGludGVnZXIgaW4KKwlgZGVzdGAgYW5kIHJldHVybnMgMC4gV2hlbiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YCBpcyBub3QgZm91bmQsCisJcmV0dXJucyAxIHdpdGhvdXQgdG91Y2hpbmcgYGRlc3RgLgorCitgaW50IGdpdF9jb25maWdfZ2V0X3Vsb25nKGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyAqZGVzdClgOjoKKworCVNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X2ludGAgYnV0IGZvciB1bnNpZ25lZCBsb25ncy4KKworYGludCBnaXRfY29uZmlnX2dldF9ib29sKGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KWA6OgorCisJRmluZHMgYW5kIHBhcnNlcyB0aGUgdmFsdWUgaW50byBhIGJvb2xlYW4gdmFsdWUsIGZvciB0aGUgY29uZmlndXJhdGlvbgorCXZhcmlhYmxlIGBrZXlgIHJlc3BlY3Rpbmcga2V5d29yZHMgbGlrZSAidHJ1ZSIgYW5kICJmYWxzZSIuIEludGVnZXIKKwl2YWx1ZXMgYXJlIGNvbnZlcnRlZCBpbnRvIHRydWUvZmFsc2UgdmFsdWVzICh3aGVuIHRoZXkgYXJlIG5vbi16ZXJvIG9yCisJemVybywgcmVzcGVjdGl2ZWx5KS4gT3RoZXIgdmFsdWVzIGNhdXNlIGEgZGllKCkuIElmIHBhcnNpbmcgaXMgc3VjY2Vzc2Z1bCwKKwlzdG9yZXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJzZWQgcmVzdWx0IGluIGBkZXN0YCBhbmQgcmV0dXJucyAwLiBXaGVuIHRoZQorCWNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dCB0b3VjaGluZworCWBkZXN0YC4KKworYGludCBnaXRfY29uZmlnX2dldF9ib29sX29yX2ludChjb25zdCBjaGFyICprZXksIGludCAqaXNfYm9vbCwgaW50ICpkZXN0KWA6OgorCisJU2ltaWxhciB0byBgZ2l0X2NvbmZpZ19nZXRfYm9vbGAsIGV4Y2VwdCB0aGF0IGludGVnZXJzIGFyZSBjb3BpZWQgYXMtaXMsCisJYW5kIGBpc19ib29sYCBmbGFnIGlzIHVuc2V0LgorCitgaW50IGdpdF9jb25maWdfZ2V0X21heWJlX2Jvb2woY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpYDo6CisKKwlTaW1pbGFyIHRvIGBnaXRfY29uZmlnX2dldF9ib29sYCwgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyAtMSBvbiBlcnJvcgorCXJhdGhlciB0aGFuIGR5aW5nLgorCitgaW50IGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KWA6OgorCisJQWxsb2NhdGVzIGFuZCBjb3BpZXMgdGhlIHJldHJpZXZlZCBzdHJpbmcgaW50byB0aGUgYGRlc3RgIHBhcmFtZXRlciBmb3IKKwl0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YDsgaWYgTlVMTCBzdHJpbmcgaXMgZ2l2ZW4sIHByaW50cyBhbgorCWVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMgLTEuIFdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMKKwlub3QgZm91bmQsIHJldHVybnMgMSB3aXRob3V0IHRvdWNoaW5nIGBkZXN0YC4KKworYGludCBnaXRfY29uZmlnX2dldF9zdHJpbmcoY29uc3QgY2hhciAqa2V5LCBjaGFyICoqZGVzdClgOjoKKworCVNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdGAsIGV4Y2VwdCB0aGF0IHJldHJpZXZlZCB2YWx1ZQorCWNvcGllZCBpbnRvIHRoZSBgZGVzdGAgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBzdHJpbmcuCisKK2BpbnQgZ2l0X2NvbmZpZ19nZXRfcGF0aG5hbWUoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdClgOjoKKworCVNpbWlsYXIgdG8gYGdpdF9jb25maWdfZ2V0X3N0cmluZ2AsIGJ1dCBleHBhbmRzIGB+YCBvciBgfnVzZXJgIGludG8KKwl0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IHdoZW4gZm91bmQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcGF0aC4KKworYGdpdF9kaWVfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZXJyLCAuLi4pYDo6CisKKwlGaXJzdCBwcmludHMgdGhlIGVycm9yIG1lc3NhZ2Ugc3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIgaW4gYGVycmAgYW5kIHRoZW4KKwlkaWVzIHByaW50aW5nIHRoZSBsaW5lIG51bWJlciBhbmQgdGhlIGZpbGUgbmFtZSBvZiB0aGUgaGlnaGVzdCBwcmlvcml0eQorCXZhbHVlIGZvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBga2V5YC4KKworYHZvaWQgZ2l0X2RpZV9jb25maWdfbGluZW5yKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbnIpYDo6CisKKwlIZWxwZXIgZnVuY3Rpb24gd2hpY2ggZm9ybWF0cyB0aGUgZGllIGVycm9yIG1lc3NhZ2UgYWNjb3JkaW5nIHRvIHRoZQorCXBhcmFtZXRlcnMgZW50ZXJlZC4gVXNlZCBieSBgZ2l0X2RpZV9jb25maWcoKWAuIEl0IGNhbiBiZSB1c2VkIGJ5IGNhbGxlcnMKKwloYW5kbGluZyBgZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoKWAgdG8gcHJpbnQgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZQorCWZvciB0aGUgZGVzaXJlZCB2YWx1ZS4KKworU2VlIHRlc3QtY29uZmlnLmMgZm9yIHVzYWdlIGV4YW1wbGVzLgorCitWYWx1ZSBQYXJzaW5nIEhlbHBlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBhaWQgaW4gcGFyc2luZyBzdHJpbmcgdmFsdWVzLCB0aGUgY29uZmlnIEFQSSBwcm92aWRlcyBjYWxsYmFja3Mgd2l0aAorYSBudW1iZXIgb2YgaGVscGVyIGZ1bmN0aW9ucywgaW5jbHVkaW5nOgorCitgZ2l0X2NvbmZpZ19pbnRgOjoKK1BhcnNlIHRoZSBzdHJpbmcgdG8gYW4gaW50ZWdlciwgaW5jbHVkaW5nIHVuaXQgZmFjdG9ycy4gRGllcyBvbiBlcnJvcjsKK290aGVyd2lzZSwgcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC4KKworYGdpdF9jb25maWdfdWxvbmdgOjoKK0lkZW50aWNhbCB0byBgZ2l0X2NvbmZpZ19pbnRgLCBidXQgZm9yIHVuc2lnbmVkIGxvbmdzLgorCitgZ2l0X2NvbmZpZ19ib29sYDo6CitQYXJzZSBhIHN0cmluZyBpbnRvIGEgYm9vbGVhbiB2YWx1ZSwgcmVzcGVjdGluZyBrZXl3b3JkcyBsaWtlICJ0cnVlIiBhbmQKKyJmYWxzZSIuIEludGVnZXIgdmFsdWVzIGFyZSBjb252ZXJ0ZWQgaW50byB0cnVlL2ZhbHNlIHZhbHVlcyAod2hlbiB0aGV5CithcmUgbm9uLXplcm8gb3IgemVybywgcmVzcGVjdGl2ZWx5KS4gT3RoZXIgdmFsdWVzIGNhdXNlIGEgZGllKCkuIElmCitwYXJzaW5nIGlzIHN1Y2Nlc3NmdWwsIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJlc3VsdC4KKworYGdpdF9jb25maWdfYm9vbF9vcl9pbnRgOjoKK1NhbWUgYXMgYGdpdF9jb25maWdfYm9vbGAsIGV4Y2VwdCB0aGF0IGludGVnZXJzIGFyZSByZXR1cm5lZCBhcy1pcywgYW5kCithbiBgaXNfYm9vbGAgZmxhZyBpcyB1bnNldC4KKworYGdpdF9jb25maWdfbWF5YmVfYm9vbGA6OgorU2FtZSBhcyBgZ2l0X2NvbmZpZ19ib29sYCwgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyAtMSBvbiBlcnJvciByYXRoZXIKK3RoYW4gZHlpbmcuCisKK2BnaXRfY29uZmlnX3N0cmluZ2A6OgorQWxsb2NhdGVzIGFuZCBjb3BpZXMgdGhlIHZhbHVlIHN0cmluZyBpbnRvIHRoZSBgZGVzdGAgcGFyYW1ldGVyOyBpZiBubworc3RyaW5nIGlzIGdpdmVuLCBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmV0dXJucyAtMS4KKworYGdpdF9jb25maWdfcGF0aG5hbWVgOjoKK1NpbWlsYXIgdG8gYGdpdF9jb25maWdfc3RyaW5nYCwgYnV0IGV4cGFuZHMgYH5gIG9yIGB+dXNlcmAgaW50byB0aGUKK3VzZXIncyBob21lIGRpcmVjdG9yeSB3aGVuIGZvdW5kIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhdGguCisKK0luY2x1ZGUgRGlyZWN0aXZlcworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIHRoZSBjb25maWcgcGFyc2VyIGRvZXMgbm90IHJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzLgorSG93ZXZlciwgYSBjYWxsZXIgY2FuIHVzZSB0aGUgc3BlY2lhbCBgZ2l0X2NvbmZpZ19pbmNsdWRlYCB3cmFwcGVyCitjYWxsYmFjayB0byBzdXBwb3J0IHRoZW0uIFRvIGRvIHNvLCB5b3Ugc2ltcGx5IHdyYXAgeW91ciAicmVhbCIgY2FsbGJhY2sKK2Z1bmN0aW9uIGFuZCBkYXRhIHBvaW50ZXIgaW4gYSBgc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGFgLCBhbmQgcGFzcwordGhlIHdyYXBwZXIgdG8gdGhlIHJlZ3VsYXIgY29uZmlnLXJlYWRpbmcgZnVuY3Rpb25zLiBGb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IHJlYWRfZmlsZV93aXRoX2luY2x1ZGUoY29uc3QgY2hhciAqZmlsZSwgY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGEgaW5jID0gQ09ORklHX0lOQ0xVREVfSU5JVDsKKwlpbmMuZm4gPSBmbjsKKwlpbmMuZGF0YSA9IGRhdGE7CisJcmV0dXJuIGdpdF9jb25maWdfZnJvbV9maWxlKGdpdF9jb25maWdfaW5jbHVkZSwgZmlsZSwgJmluYyk7Cit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BnaXRfY29uZmlnYCByZXNwZWN0cyBpbmNsdWRlcyBhdXRvbWF0aWNhbGx5LiBUaGUgbG93ZXItbGV2ZWwKK2BnaXRfY29uZmlnX2Zyb21fZmlsZWAgZG9lcyBub3QuCisKK0N1c3RvbSBDb25maWdzZXRzCistLS0tLS0tLS0tLS0tLS0tLQorCitBIGBjb25maWdfc2V0YCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgYW4gaW4tbWVtb3J5IGNhY2hlIGZvcgorY29uZmlnLWxpa2UgZmlsZXMgdGhhdCB0aGUgY2FsbGVyIHNwZWNpZmllcyAoaS5lLiwgZmlsZXMgbGlrZSBgLmdpdG1vZHVsZXNgLAorYH4vLmdpdGNvbmZpZ2AgZXRjLikuIEZvciBleGFtcGxlLAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0cnVjdCBjb25maWdfc2V0IGdtX2NvbmZpZzsKK2dpdF9jb25maWdzZXRfaW5pdCgmZ21fY29uZmlnKTsKK2ludCBiOworLyogd2UgYWRkIGNvbmZpZyBmaWxlcyB0byB0aGUgY29uZmlnX3NldCAqLworZ2l0X2NvbmZpZ3NldF9hZGRfZmlsZSgmZ21fY29uZmlnLCAiLmdpdG1vZHVsZXMiKTsKK2dpdF9jb25maWdzZXRfYWRkX2ZpbGUoJmdtX2NvbmZpZywgIi5naXRtb2R1bGVzX2FsdCIpOworCitpZiAoIWdpdF9jb25maWdzZXRfZ2V0X2Jvb2woZ21fY29uZmlnLCAic3VibW9kdWxlLmZyb3R6Lmlnbm9yZSIsICZiKSkgeworCS8qIGhhY2sgaGFjayBoYWNrICovCit9CisKKy8qIHdoZW4gd2UgYXJlIGRvbmUgd2l0aCB0aGUgY29uZmlnc2V0ICovCitnaXRfY29uZmlnc2V0X2NsZWFyKCZnbV9jb25maWcpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb25maWdzZXQgQVBJIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgdGhlIGFib3ZlIG1lbnRpb25lZCB3b3JrIGZsb3csIGluY2x1ZGluZzoKKworYHZvaWQgZ2l0X2NvbmZpZ3NldF9pbml0KHN0cnVjdCBjb25maWdfc2V0ICpjcylgOjoKKworCUluaXRpYWxpemVzIHRoZSBjb25maWdfc2V0IGBjc2AuCisKK2BpbnQgZ2l0X2NvbmZpZ3NldF9hZGRfZmlsZShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKWA6OgorCisJUGFyc2VzIHRoZSBmaWxlIGFuZCBhZGRzIHRoZSB2YXJpYWJsZS12YWx1ZSBwYWlycyB0byB0aGUgYGNvbmZpZ19zZXRgLAorCWRpZXMgaWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gcGFyc2luZyB0aGUgZmlsZS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yCisJLTEgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgaXMgaW5hY2Nlc3NpYmxlLiBUaGUgdXNlciBoYXMgdG8gZGVjaWRlCisJaWYgaGUgd2FudHMgdG8gZnJlZSB0aGUgaW5jb21wbGV0ZSBjb25maWdzZXQgb3IgY29udGludWUgdXNpbmcgaXQgd2hlbgorCXRoZSBmdW5jdGlvbiByZXR1cm5zIC0xLgorCitgaW50IGdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqdmFsdWUpYDo6CisKKwlGaW5kcyB0aGUgaGlnaGVzdC1wcmlvcml0eSB2YWx1ZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAKKwlhbmQgY29uZmlnIHNldCBgY3NgLCBzdG9yZXMgdGhlIHBvaW50ZXIgdG8gaXQgaW4gYHZhbHVlYCBhbmQgcmV0dXJucyAwLgorCVdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgaXMgbm90IGZvdW5kLCByZXR1cm5zIDEgd2l0aG91dAorCXRvdWNoaW5nIGB2YWx1ZWAuIFRoZSBjYWxsZXIgc2hvdWxkIG5vdCBmcmVlIG9yIG1vZGlmeSBgdmFsdWVgLCBhcyBpdAorCWlzIG93bmVkIGJ5IHRoZSBjYWNoZS4KKworYGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWVfbXVsdGkoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXkpYDo6CisKKwlGaW5kcyBhbmQgcmV0dXJucyB0aGUgdmFsdWUgbGlzdCwgc29ydGVkIGluIG9yZGVyIG9mIGluY3JlYXNpbmcgcHJpb3JpdHkKKwlmb3IgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgYGtleWAgYW5kIGNvbmZpZyBzZXQgYGNzYC4gV2hlbiB0aGUKKwljb25maWd1cmF0aW9uIHZhcmlhYmxlIGBrZXlgIGlzIG5vdCBmb3VuZCwgcmV0dXJucyBOVUxMLiBUaGUgY2FsbGVyCisJc2hvdWxkIG5vdCBmcmVlIG9yIG1vZGlmeSB0aGUgcmV0dXJuZWQgcG9pbnRlciwgYXMgaXQgaXMgb3duZWQgYnkgdGhlIGNhY2hlLgorCitgdm9pZCBnaXRfY29uZmlnc2V0X2NsZWFyKHN0cnVjdCBjb25maWdfc2V0ICpjcylgOjoKKworCUNsZWFycyBgY29uZmlnX3NldGAgc3RydWN0dXJlLCByZW1vdmVzIGFsbCBzYXZlZCB2YXJpYWJsZS12YWx1ZSBwYWlycy4KKworSW4gYWRkaXRpb24gdG8gYWJvdmUgZnVuY3Rpb25zLCB0aGUgYGNvbmZpZ19zZXRgIEFQSSBwcm92aWRlcyB0eXBlIHNwZWNpZmljCitmdW5jdGlvbnMgaW4gdGhlIHZlaW4gb2YgYGdpdF9jb25maWdfZ2V0X2ludGAgYW5kIGZhbWlseSBidXQgd2l0aCBhbiBleHRyYQorcGFyYW1ldGVyLCBwb2ludGVyIHRvIHN0cnVjdCBgY29uZmlnX3NldGAuCitUaGV5IGFsbCBiZWhhdmUgc2ltaWxhcmx5IHRvIHRoZSBgZ2l0X2NvbmZpZ19nZXQqKClgIGZhbWlseSBkZXNjcmliZWQgaW4KKyJRdWVyeWluZyBGb3IgU3BlY2lmaWMgVmFyaWFibGVzIiBhYm92ZS4KKworV3JpdGluZyBDb25maWcgRmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCBnaXZlcyBtdWx0aXBsZSBlbnRyeSBwb2ludHMgaW4gdGhlIENvbmZpZyBBUEkgdG8gd3JpdGUgY29uZmlnIHZhbHVlcyB0bworZmlsZXMgbmFtZWx5IGBnaXRfY29uZmlnX3NldF9pbl9maWxlYCBhbmQgYGdpdF9jb25maWdfc2V0YCwgd2hpY2ggd3JpdGUgdG8KK2Egc3BlY2lmaWMgY29uZmlnIGZpbGUgb3IgdG8gYC5naXQvY29uZmlnYCByZXNwZWN0aXZlbHkuIFRoZXkgYm90aCB0YWtlIGEKK2tleS92YWx1ZSBwYWlyIGFzIHBhcmFtZXRlci4KK0luIHRoZSBlbmQgdGhleSBib3RoIGNhbGwgYGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGVgIHdoaWNoIHRha2VzIGZvdXIKK3BhcmFtZXRlcnM6CisKKy0gdGhlIG5hbWUgb2YgdGhlIGZpbGUsIGFzIGEgc3RyaW5nLCB0byB3aGljaCBrZXkvdmFsdWUgcGFpcnMgd2lsbCBiZSB3cml0dGVuLgorCistIHRoZSBuYW1lIG9mIGtleSwgYXMgYSBzdHJpbmcuIFRoaXMgaXMgaW4gY2Fub25pY2FsICJmbGF0IiBmb3JtOiB0aGUgc2VjdGlvbiwKKyAgc3Vic2VjdGlvbiwgYW5kIHZhcmlhYmxlIHNlZ21lbnRzIHdpbGwgYmUgc2VwYXJhdGVkIGJ5IGRvdHMsIGFuZCB0aGUgc2VjdGlvbgorICBhbmQgdmFyaWFibGUgc2VnbWVudHMgd2lsbCBiZSBhbGwgbG93ZXJjYXNlLgorICBFLmcuLCBgY29yZS5pZ25vcmVjYXNlYCwgYGRpZmYuU29tZVR5cGUudGV4dGNvbnZgLgorCistIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUsIGFzIGEgc3RyaW5nLiBJZiB2YWx1ZSBpcyBlcXVhbCB0byBOVUxMLCBpdCB3aWxsCisgIHJlbW92ZSB0aGUgbWF0Y2hpbmcga2V5IGZyb20gdGhlIGNvbmZpZyBmaWxlLgorCistIHRoZSB2YWx1ZSByZWdleCwgYXMgYSBzdHJpbmcuIEl0IHdpbGwgZGlzcmVnYXJkIGtleS92YWx1ZSBwYWlycyB3aGVyZSB2YWx1ZQorICBkb2VzIG5vdCBtYXRjaC4KKworLSBhIG11bHRpX3JlcGxhY2UgdmFsdWUsIGFzIGFuIGludC4gSWYgdmFsdWUgaXMgZXF1YWwgdG8gemVybywgbm90aGluZyBvciBvbmx5CisgIG9uZSBtYXRjaGluZyBrZXkvdmFsdWUgaXMgcmVwbGFjZWQsIGVsc2UgYWxsIG1hdGNoaW5nIGtleS92YWx1ZXMgKHJlZ2FyZGxlc3MKKyAgaG93IG1hbnkpIGFyZSByZW1vdmVkLCBiZWZvcmUgdGhlIG5ldyBwYWlyIGlzIHdyaXR0ZW4uCisKK0l0IHJldHVybnMgMCBvbiBzdWNjZXNzLgorCitBbHNvLCB0aGVyZSBhcmUgZnVuY3Rpb25zIGBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uYCBhbmQKK2BnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGVgIHdpdGggcGFyYW1ldGVycyBgb2xkX25hbWVgIGFuZCBgbmV3X25hbWVgCitmb3IgcmVuYW1pbmcgb3IgcmVtb3Zpbmcgc2VjdGlvbnMgaW4gdGhlIGNvbmZpZyBmaWxlcy4gSWYgTlVMTCBpcyBwYXNzZWQKK3Rocm91Z2ggYG5ld19uYW1lYCBwYXJhbWV0ZXIsIHRoZSBzZWN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjb25maWcgZmlsZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1jcmVkZW50aWFscy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY3JlZGVudGlhbHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NDQyNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktY3JlZGVudGlhbHMudHh0CkBAIC0wLDAgKzEsMjcxIEBACitjcmVkZW50aWFscyBBUEkKKz09PT09PT09PT09PT09PQorCitUaGUgY3JlZGVudGlhbHMgQVBJIHByb3ZpZGVzIGFuIGFic3RyYWN0ZWQgd2F5IG9mIGdhdGhlcmluZyB1c2VybmFtZSBhbmQKK3Bhc3N3b3JkIGNyZWRlbnRpYWxzIGZyb20gdGhlIHVzZXIgKGV2ZW4gdGhvdWdoIGNyZWRlbnRpYWxzIGluIHRoZSB3aWRlcgord29ybGQgY2FuIHRha2UgbWFueSBmb3JtcywgaW4gdGhpcyBkb2N1bWVudCB0aGUgd29yZCAiY3JlZGVudGlhbCIgYWx3YXlzCityZWZlcnMgdG8gYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgcGFpcikuCisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHR3byBpbnRlcmZhY2VzOiB0aGUgQyBBUEkgdGhhdCB0aGUgY3JlZGVudGlhbAorc3Vic3lzdGVtIHByb3ZpZGVzIHRvIHRoZSByZXN0IG9mIEdpdCwgYW5kIHRoZSBwcm90b2NvbCB0aGF0IEdpdCB1c2VzIHRvCitjb21tdW5pY2F0ZSB3aXRoIHN5c3RlbS1zcGVjaWZpYyAiY3JlZGVudGlhbCBoZWxwZXJzIi4gSWYgeW91IGFyZQord3JpdGluZyBHaXQgY29kZSB0aGF0IHdhbnRzIHRvIGxvb2sgdXAgb3IgcHJvbXB0IGZvciBjcmVkZW50aWFscywgc2VlCit0aGUgc2VjdGlvbiAiQyBBUEkiIGJlbG93LiBJZiB5b3Ugd2FudCB0byB3cml0ZSB5b3VyIG93biBoZWxwZXIsIHNlZQordGhlIHNlY3Rpb24gb24gIkNyZWRlbnRpYWwgSGVscGVycyIgYmVsb3cuCisKK1R5cGljYWwgc2V0dXAKKy0tLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEdpdCBjb2RlIChDKSAgICAgICAgICB8LS0tIHRvIHNlcnZlciByZXF1aXJpbmcgLS0tPgorfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgYXV0aGVudGljYXRpb24KK3wuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLnwKK3wgQyBjcmVkZW50aWFsIEFQSSAgICAgIHwtLS0gcHJvbXB0IC0tLT4gVXNlcgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCV4gICAgICB8CisJfCBwaXBlIHwKKwl8ICAgICAgdgorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBHaXQgY3JlZGVudGlhbCBoZWxwZXIgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworLS0tLS0tLS0tLS0tCisKK1RoZSBHaXQgY29kZSAodHlwaWNhbGx5IGEgcmVtb3RlLWhlbHBlcikgd2lsbCBjYWxsIHRoZSBDIEFQSSB0byBvYnRhaW4KK2NyZWRlbnRpYWwgZGF0YSBsaWtlIGEgbG9naW4vcGFzc3dvcmQgcGFpciAoY3JlZGVudGlhbF9maWxsKS4gVGhlCitBUEkgd2lsbCBpdHNlbGYgY2FsbCBhIHJlbW90ZSBoZWxwZXIgKGUuZy4gImdpdCBjcmVkZW50aWFsLWNhY2hlIiBvcgorImdpdCBjcmVkZW50aWFsLXN0b3JlIikgdGhhdCBtYXkgcmV0cmlldmUgY3JlZGVudGlhbCBkYXRhIGZyb20gYQorc3RvcmUuIElmIHRoZSBjcmVkZW50aWFsIGhlbHBlciBjYW5ub3QgZmluZCB0aGUgaW5mb3JtYXRpb24sIHRoZSBDIEFQSQord2lsbCBwcm9tcHQgdGhlIHVzZXIuIFRoZW4sIHRoZSBjYWxsZXIgb2YgdGhlIEFQSSB0YWtlcyBjYXJlIG9mCitjb250YWN0aW5nIHRoZSBzZXJ2ZXIsIGFuZCBkb2VzIHRoZSBhY3R1YWwgYXV0aGVudGljYXRpb24uCisKK0MgQVBJCistLS0tLQorCitUaGUgY3JlZGVudGlhbCBDIEFQSSBpcyBtZWFudCB0byBiZSBjYWxsZWQgYnkgR2l0IGNvZGUgd2hpY2ggbmVlZHMgdG8KK2FjcXVpcmUgb3Igc3RvcmUgYSBjcmVkZW50aWFsLiBJdCBpcyBjZW50ZXJlZCBhcm91bmQgYW4gb2JqZWN0CityZXByZXNlbnRpbmcgYSBzaW5nbGUgY3JlZGVudGlhbCBhbmQgcHJvdmlkZXMgdGhyZWUgYmFzaWMgb3BlcmF0aW9uczoKK2ZpbGwgKGFjcXVpcmUgY3JlZGVudGlhbHMgYnkgY2FsbGluZyBoZWxwZXJzIGFuZC9vciBwcm9tcHRpbmcgdGhlIHVzZXIpLAorYXBwcm92ZSAobWFyayBhIGNyZWRlbnRpYWwgYXMgc3VjY2Vzc2Z1bGx5IHVzZWQgc28gdGhhdCBpdCBjYW4gYmUgc3RvcmVkCitmb3IgbGF0ZXIgdXNlKSwgYW5kIHJlamVjdCAobWFyayBhIGNyZWRlbnRpYWwgYXMgdW5zdWNjZXNzZnVsIHNvIHRoYXQgaXQKK2NhbiBiZSBlcmFzZWQgZnJvbSBhbnkgcGVyc2lzdGVudCBzdG9yYWdlKS4KKworRGF0YSBTdHJ1Y3R1cmVzCit+fn5+fn5+fn5+fn5+fn4KKworYHN0cnVjdCBjcmVkZW50aWFsYDo6CisKKwlUaGlzIHN0cnVjdCByZXByZXNlbnRzIGEgc2luZ2xlIHVzZXJuYW1lL3Bhc3N3b3JkIGNvbWJpbmF0aW9uCisJYWxvbmcgd2l0aCBhbnkgYXNzb2NpYXRlZCBjb250ZXh0LiBBbGwgc3RyaW5nIGZpZWxkcyBzaG91bGQgYmUKKwloZWFwLWFsbG9jYXRlZCAob3IgTlVMTCBpZiB0aGV5IGFyZSBub3Qga25vd24gb3Igbm90IGFwcGxpY2FibGUpLgorCVRoZSBtZWFuaW5nIG9mIHRoZSBpbmRpdmlkdWFsIGNvbnRleHQgZmllbGRzIGlzIHRoZSBzYW1lIGFzCisJdGhlaXIgY291bnRlcnBhcnRzIGluIHRoZSBoZWxwZXIgcHJvdG9jb2w7IHNlZSB0aGUgc2VjdGlvbiBiZWxvdworCWZvciBhIGRlc2NyaXB0aW9uIG9mIGVhY2ggZmllbGQuCisrCitUaGUgYGhlbHBlcnNgIG1lbWJlciBvZiB0aGUgc3RydWN0IGlzIGEgYHN0cmluZ19saXN0YCBvZiBoZWxwZXJzLiAgRWFjaAorc3RyaW5nIHNwZWNpZmllcyBhbiBleHRlcm5hbCBoZWxwZXIgd2hpY2ggd2lsbCBiZSBydW4sIGluIG9yZGVyLCB0bworZWl0aGVyIGFjcXVpcmUgb3Igc3RvcmUgY3JlZGVudGlhbHMuIFNlZSB0aGUgc2VjdGlvbiBvbiBjcmVkZW50aWFsCitoZWxwZXJzIGJlbG93LiBUaGlzIGxpc3QgaXMgZmlsbGVkLWluIGJ5IHRoZSBBUEkgZnVuY3Rpb25zCithY2NvcmRpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgYmVmb3JlCitjb25zdWx0aW5nIGhlbHBlcnMsIHNvIHRoZXJlIHVzdWFsbHkgaXMgbm8gbmVlZCBmb3IgYSBjYWxsZXIgdG8KK21vZGlmeSB0aGUgaGVscGVycyBmaWVsZCBhdCBhbGwuCisrCitUaGlzIHN0cnVjdCBzaG91bGQgYWx3YXlzIGJlIGluaXRpYWxpemVkIHdpdGggYENSRURFTlRJQUxfSU5JVGAgb3IKK2BjcmVkZW50aWFsX2luaXRgLgorCisKK0Z1bmN0aW9ucworfn5+fn5+fn5+CisKK2BjcmVkZW50aWFsX2luaXRgOjoKKworCUluaXRpYWxpemUgYSBjcmVkZW50aWFsIHN0cnVjdHVyZSwgc2V0dGluZyBhbGwgZmllbGRzIHRvIGVtcHR5LgorCitgY3JlZGVudGlhbF9jbGVhcmA6OgorCisJRnJlZSBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3JlZGVudGlhbCBzdHJ1Y3R1cmUsCisJcmV0dXJuaW5nIGl0IHRvIGEgcHJpc3RpbmUgaW5pdGlhbGl6ZWQgc3RhdGUuCisKK2BjcmVkZW50aWFsX2ZpbGxgOjoKKworCUluc3RydWN0IHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSB0byBmaWxsIHRoZSB1c2VybmFtZSBhbmQKKwlwYXNzd29yZCBmaWVsZHMgb2YgdGhlIHBhc3NlZCBjcmVkZW50aWFsIHN0cnVjdCBieSBmaXJzdAorCWNvbnN1bHRpbmcgaGVscGVycywgdGhlbiBhc2tpbmcgdGhlIHVzZXIuIEFmdGVyIHRoaXMgZnVuY3Rpb24KKwlyZXR1cm5zLCB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcyBvZiB0aGUgY3JlZGVudGlhbCBhcmUKKwlndWFyYW50ZWVkIHRvIGJlIG5vbi1OVUxMLiBJZiBhbiBlcnJvciBvY2N1cnMsIHRoZSBmdW5jdGlvbiB3aWxsCisJZGllKCkuCisKK2BjcmVkZW50aWFsX3JlamVjdGA6OgorCisJSW5mb3JtIHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSB0aGF0IHRoZSBwcm92aWRlZCBjcmVkZW50aWFscworCWhhdmUgYmVlbiByZWplY3RlZC4gVGhpcyB3aWxsIGNhdXNlIHRoZSBjcmVkZW50aWFsIHN1YnN5c3RlbSB0bworCW5vdGlmeSBhbnkgaGVscGVycyBvZiB0aGUgcmVqZWN0aW9uICh3aGljaCBhbGxvd3MgdGhlbSwgZm9yCisJZXhhbXBsZSwgdG8gcHVyZ2UgdGhlIGludmFsaWQgY3JlZGVudGlhbHMgZnJvbSBzdG9yYWdlKS4gIEl0CisJd2lsbCBhbHNvIGZyZWUoKSB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcyBvZiB0aGUKKwljcmVkZW50aWFsIGFuZCBzZXQgdGhlbSB0byBOVUxMIChyZWFkeWluZyB0aGUgY3JlZGVudGlhbCBmb3IKKwlhbm90aGVyIGNhbGwgdG8gYGNyZWRlbnRpYWxfZmlsbGApLiBBbnkgZXJyb3JzIGZyb20gaGVscGVycyBhcmUKKwlpZ25vcmVkLgorCitgY3JlZGVudGlhbF9hcHByb3ZlYDo6CisKKwlJbmZvcm0gdGhlIGNyZWRlbnRpYWwgc3Vic3lzdGVtIHRoYXQgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzCisJd2VyZSBzdWNjZXNzZnVsbHkgdXNlZCBmb3IgYXV0aGVudGljYXRpb24uICBUaGlzIHdpbGwgY2F1c2UgdGhlCisJY3JlZGVudGlhbCBzdWJzeXN0ZW0gdG8gbm90aWZ5IGFueSBoZWxwZXJzIG9mIHRoZSBhcHByb3ZhbCwgc28KKwl0aGF0IHRoZXkgbWF5IHN0b3JlIHRoZSByZXN1bHQgdG8gYmUgdXNlZCBhZ2Fpbi4gIEFueSBlcnJvcnMKKwlmcm9tIGhlbHBlcnMgYXJlIGlnbm9yZWQuCisKK2BjcmVkZW50aWFsX2Zyb21fdXJsYDo6CisKKwlQYXJzZSBhIFVSTCBpbnRvIGJyb2tlbi1kb3duIGNyZWRlbnRpYWwgZmllbGRzLgorCitFeGFtcGxlCit+fn5+fn5+CisKK1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyB0aGUgZnVuY3Rpb25zIG9mIHRoZSBjcmVkZW50aWFsIEFQSSBjb3VsZCBiZQordXNlZCB0byBsb2dpbiB0byBhIGZpY3RpdGlvdXMgImZvbyIgc2VydmljZSBvbiBhIHJlbW90ZSBob3N0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IGZvb19sb2dpbihzdHJ1Y3QgZm9vX2Nvbm5lY3Rpb24gKmYpCit7CisJaW50IHN0YXR1czsKKwkvKgorCSAqIENyZWF0ZSBhIGNyZWRlbnRpYWwgd2l0aCBzb21lIGNvbnRleHQ7IHdlIGRvbid0IHlldCBrbm93IHRoZQorCSAqIHVzZXJuYW1lIG9yIHBhc3N3b3JkLgorCSAqLworCisJc3RydWN0IGNyZWRlbnRpYWwgYyA9IENSRURFTlRJQUxfSU5JVDsKKwljLnByb3RvY29sID0geHN0cmR1cCgiZm9vIik7CisJYy5ob3N0ID0geHN0cmR1cChmLT5ob3N0bmFtZSk7CisKKwkvKgorCSAqIEZpbGwgaW4gdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZHMgYnkgY29udGFjdGluZworCSAqIGhlbHBlcnMgYW5kL29yIGFza2luZyB0aGUgdXNlci4gVGhlIGZ1bmN0aW9uIHdpbGwgZGllIGlmIGl0CisJICogZmFpbHMuCisJICovCisJY3JlZGVudGlhbF9maWxsKCZjKTsKKworCS8qCisJICogT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLiBUcnkgdG8gdXNlIGl0LgorCSAqLworCXN0YXR1cyA9IHNlbmRfZm9vX2xvZ2luKGYsIGMudXNlcm5hbWUsIGMucGFzc3dvcmQpOworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBGT09fT0s6CisJCS8qIEl0IHdvcmtlZC4gU3RvcmUgdGhlIGNyZWRlbnRpYWwgZm9yIGxhdGVyIHVzZS4gKi8KKwkJY3JlZGVudGlhbF9hY2NlcHQoJmMpOworCQlicmVhazsKKwljYXNlIEZPT19CQURfTE9HSU46CisJCS8qIEVyYXNlIHRoZSBjcmVkZW50aWFsIGZyb20gc3RvcmFnZSBzbyB3ZSBkb24ndCB0cnkgaXQKKwkJICogYWdhaW4uICovCisJCWNyZWRlbnRpYWxfcmVqZWN0KCZjKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyoKKwkJICogU29tZSBvdGhlciBlcnJvciBvY2N1cnJlZC4gV2UgZG9uJ3Qga25vdyBpZiB0aGUKKwkJICogY3JlZGVudGlhbCBpcyBnb29kIG9yIGJhZCwgc28gcmVwb3J0IG5vdGhpbmcgdG8gdGhlCisJCSAqIGNyZWRlbnRpYWwgc3Vic3lzdGVtLgorCQkgKi8KKwl9CisKKwkvKiBGcmVlIGFueSBhc3NvY2lhdGVkIHJlc291cmNlcy4gKi8KKwljcmVkZW50aWFsX2NsZWFyKCZjKTsKKworCXJldHVybiBzdGF0dXM7Cit9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0NyZWRlbnRpYWwgSGVscGVycworLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWRlbnRpYWwgaGVscGVycyBhcmUgcHJvZ3JhbXMgZXhlY3V0ZWQgYnkgR2l0IHRvIGZldGNoIG9yIHNhdmUKK2NyZWRlbnRpYWxzIGZyb20gYW5kIHRvIGxvbmctdGVybSBzdG9yYWdlICh3aGVyZSAibG9uZy10ZXJtIiBpcyBzaW1wbHkKK2xvbmdlciB0aGFuIGEgc2luZ2xlIEdpdCBwcm9jZXNzOyBlLmcuLCBjcmVkZW50aWFscyBtYXkgYmUgc3RvcmVkCitpbi1tZW1vcnkgZm9yIGEgZmV3IG1pbnV0ZXMsIG9yIGluZGVmaW5pdGVseSBvbiBkaXNrKS4KKworRWFjaCBoZWxwZXIgaXMgc3BlY2lmaWVkIGJ5IGEgc2luZ2xlIHN0cmluZyBpbiB0aGUgY29uZmlndXJhdGlvbgordmFyaWFibGUgYGNyZWRlbnRpYWwuaGVscGVyYCAoYW5kIG90aGVycywgc2VlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXSkuCitUaGUgc3RyaW5nIGlzIHRyYW5zZm9ybWVkIGJ5IEdpdCBpbnRvIGEgY29tbWFuZCB0byBiZSBleGVjdXRlZCB1c2luZwordGhlc2UgcnVsZXM6CisKKyAgMS4gSWYgdGhlIGhlbHBlciBzdHJpbmcgYmVnaW5zIHdpdGggIiEiLCBpdCBpcyBjb25zaWRlcmVkIGEgc2hlbGwKKyAgICAgc25pcHBldCwgYW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlICIhIiBiZWNvbWVzIHRoZSBjb21tYW5kLgorCisgIDIuIE90aGVyd2lzZSwgaWYgdGhlIGhlbHBlciBzdHJpbmcgYmVnaW5zIHdpdGggYW4gYWJzb2x1dGUgcGF0aCwgdGhlCisgICAgIHZlcmJhdGltIGhlbHBlciBzdHJpbmcgYmVjb21lcyB0aGUgY29tbWFuZC4KKworICAzLiBPdGhlcndpc2UsIHRoZSBzdHJpbmcgImdpdCBjcmVkZW50aWFsLSIgaXMgcHJlcGVuZGVkIHRvIHRoZSBoZWxwZXIKKyAgICAgc3RyaW5nLCBhbmQgdGhlIHJlc3VsdCBiZWNvbWVzIHRoZSBjb21tYW5kLgorCitUaGUgcmVzdWx0aW5nIGNvbW1hbmQgdGhlbiBoYXMgYW4gIm9wZXJhdGlvbiIgYXJndW1lbnQgYXBwZW5kZWQgdG8gaXQKKyhzZWUgYmVsb3cgZm9yIGRldGFpbHMpLCBhbmQgdGhlIHJlc3VsdCBpcyBleGVjdXRlZCBieSB0aGUgc2hlbGwuCisKK0hlcmUgYXJlIHNvbWUgZXhhbXBsZSBzcGVjaWZpY2F0aW9uczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBydW4gImdpdCBjcmVkZW50aWFsLWZvbyIKK2ZvbworCisjIHNhbWUgYXMgYWJvdmUsIGJ1dCBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSBoZWxwZXIKK2ZvbyAtLWJhcj1iYXoKKworIyB0aGUgYXJndW1lbnRzIGFyZSBwYXJzZWQgYnkgdGhlIHNoZWxsLCBzbyB1c2Ugc2hlbGwKKyMgcXVvdGluZyBpZiBuZWNlc3NhcnkKK2ZvbyAtLWJhcj0id2hpdGVzcGFjZSBhcmciCisKKyMgeW91IGNhbiBhbHNvIHVzZSBhbiBhYnNvbHV0ZSBwYXRoLCB3aGljaCB3aWxsIG5vdCB1c2UgdGhlIGdpdCB3cmFwcGVyCisvcGF0aC90by9teS9oZWxwZXIgLS13aXRoLWFyZ3VtZW50cworCisjIG9yIHlvdSBjYW4gc3BlY2lmeSB5b3VyIG93biBzaGVsbCBzbmlwcGV0CishZigpIHsgZWNobyAicGFzc3dvcmQ9YGNhdCAkSE9NRS8uc2VjcmV0YCI7IH07IGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2VuZXJhbGx5IHNwZWFraW5nLCBydWxlICgzKSBhYm92ZSBpcyB0aGUgc2ltcGxlc3QgZm9yIHVzZXJzIHRvIHNwZWNpZnkuCitBdXRob3JzIG9mIGNyZWRlbnRpYWwgaGVscGVycyBzaG91bGQgbWFrZSBhbiBlZmZvcnQgdG8gYXNzaXN0IHRoZWlyCit1c2VycyBieSBuYW1pbmcgdGhlaXIgcHJvZ3JhbSAiZ2l0LWNyZWRlbnRpYWwtJE5BTUUiLCBhbmQgcHV0dGluZyBpdCBpbgordGhlICRQQVRIIG9yICRHSVRfRVhFQ19QQVRIIGR1cmluZyBpbnN0YWxsYXRpb24sIHdoaWNoIHdpbGwgYWxsb3cgYSB1c2VyCit0byBlbmFibGUgaXQgd2l0aCBgZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAkTkFNRWAuCisKK1doZW4gYSBoZWxwZXIgaXMgZXhlY3V0ZWQsIGl0IHdpbGwgaGF2ZSBvbmUgIm9wZXJhdGlvbiIgYXJndW1lbnQKK2FwcGVuZGVkIHRvIGl0cyBjb21tYW5kIGxpbmUsIHdoaWNoIGlzIG9uZSBvZjoKKworYGdldGA6OgorCisJUmV0dXJuIGEgbWF0Y2hpbmcgY3JlZGVudGlhbCwgaWYgYW55IGV4aXN0cy4KKworYHN0b3JlYDo6CisKKwlTdG9yZSB0aGUgY3JlZGVudGlhbCwgaWYgYXBwbGljYWJsZSB0byB0aGUgaGVscGVyLgorCitgZXJhc2VgOjoKKworCVJlbW92ZSBhIG1hdGNoaW5nIGNyZWRlbnRpYWwsIGlmIGFueSwgZnJvbSB0aGUgaGVscGVyJ3Mgc3RvcmFnZS4KKworVGhlIGRldGFpbHMgb2YgdGhlIGNyZWRlbnRpYWwgd2lsbCBiZSBwcm92aWRlZCBvbiB0aGUgaGVscGVyJ3Mgc3RkaW4KK3N0cmVhbS4gVGhlIGV4YWN0IGZvcm1hdCBpcyB0aGUgc2FtZSBhcyB0aGUgaW5wdXQvb3V0cHV0IGZvcm1hdCBvZiB0aGUKK2BnaXQgY3JlZGVudGlhbGAgcGx1bWJpbmcgY29tbWFuZCAoc2VlIHRoZSBzZWN0aW9uIGBJTlBVVC9PVVRQVVQKK0ZPUk1BVGAgaW4gbGlua2dpdDpnaXQtY3JlZGVudGlhbFs3XSBmb3IgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uKS4KKworRm9yIGEgYGdldGAgb3BlcmF0aW9uLCB0aGUgaGVscGVyIHNob3VsZCBwcm9kdWNlIGEgbGlzdCBvZiBhdHRyaWJ1dGVzCitvbiBzdGRvdXQgaW4gdGhlIHNhbWUgZm9ybWF0LiBBIGhlbHBlciBpcyBmcmVlIHRvIHByb2R1Y2UgYSBzdWJzZXQsIG9yCitldmVuIG5vIHZhbHVlcyBhdCBhbGwgaWYgaXQgaGFzIG5vdGhpbmcgdXNlZnVsIHRvIHByb3ZpZGUuIEFueSBwcm92aWRlZAorYXR0cmlidXRlcyB3aWxsIG92ZXJ3cml0ZSB0aG9zZSBhbHJlYWR5IGtub3duIGFib3V0IGJ5IEdpdC4gIElmIGEgaGVscGVyCitvdXRwdXRzIGEgYHF1aXRgIGF0dHJpYnV0ZSB3aXRoIGEgdmFsdWUgb2YgYHRydWVgIG9yIGAxYCwgbm8gZnVydGhlcgoraGVscGVycyB3aWxsIGJlIGNvbnN1bHRlZCwgbm9yIHdpbGwgdGhlIHVzZXIgYmUgcHJvbXB0ZWQgKGlmIG5vCitjcmVkZW50aWFsIGhhcyBiZWVuIHByb3ZpZGVkLCB0aGUgb3BlcmF0aW9uIHdpbGwgdGhlbiBmYWlsKS4KKworRm9yIGEgYHN0b3JlYCBvciBgZXJhc2VgIG9wZXJhdGlvbiwgdGhlIGhlbHBlcidzIG91dHB1dCBpcyBpZ25vcmVkLgorSWYgaXQgZmFpbHMgdG8gcGVyZm9ybSB0aGUgcmVxdWVzdGVkIG9wZXJhdGlvbiwgaXQgbWF5IGNvbXBsYWluIHRvCitzdGRlcnIgdG8gaW5mb3JtIHRoZSB1c2VyLiBJZiBpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1ZXN0ZWQKK29wZXJhdGlvbiAoZS5nLiwgYSByZWFkLW9ubHkgc3RvcmUpLCBpdCBzaG91bGQgc2lsZW50bHkgaWdub3JlIHRoZQorcmVxdWVzdC4KKworSWYgYSBoZWxwZXIgcmVjZWl2ZXMgYW55IG90aGVyIG9wZXJhdGlvbiwgaXQgc2hvdWxkIHNpbGVudGx5IGlnbm9yZSB0aGUKK3JlcXVlc3QuIFRoaXMgbGVhdmVzIHJvb20gZm9yIGZ1dHVyZSBvcGVyYXRpb25zIHRvIGJlIGFkZGVkIChvbGRlcgoraGVscGVycyB3aWxsIGp1c3QgaWdub3JlIHRoZSBuZXcgcmVxdWVzdHMpLgorCitTZWUgYWxzbworLS0tLS0tLS0KKworbGlua2dpdDpnaXRjcmVkZW50aWFsc1s3XQorCitsaW5rZ2l0OmdpdC1jb25maWdbNV0gKFNlZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBgY3JlZGVudGlhbC4qYCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kZWNvcmF0ZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGVjb3JhdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNTJhNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGVjb3JhdGUudHh0CkBAIC0wLDAgKzEsNiBAQAorZGVjb3JhdGUgQVBJCis9PT09PT09PT09PT0KKworVGFsayBhYm91dCA8ZGVjb3JhdGUuaD4KKworKExpbnVzKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWRpZmYudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWRpZmYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDAxZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlmZi50eHQKQEAgLTAsMCArMSwxNzQgQEAKK2RpZmYgQVBJCis9PT09PT09PQorCitUaGUgZGlmZiBBUEkgaXMgZm9yIHByb2dyYW1zIHRoYXQgY29tcGFyZSB0d28gc2V0cyBvZiBmaWxlcyAoZS5nLiB0d28KK3RyZWVzLCBvbmUgdHJlZSBhbmQgdGhlIGluZGV4KSBhbmQgcHJlc2VudCB0aGUgZm91bmQgZGlmZmVyZW5jZSBpbgordmFyaW91cyB3YXlzLiAgVGhlIGNhbGxpbmcgcHJvZ3JhbSBpcyByZXNwb25zaWJsZSBmb3IgZmVlZGluZyB0aGUgQVBJCitwYWlycyBvZiBmaWxlcywgb25lIGZyb20gdGhlICJvbGQiIHNldCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgb25lIGZyb20KKyJuZXciIHNldCwgdGhhdCBhcmUgZGlmZmVyZW50LiAgVGhlIGxpYnJhcnkgY2FsbGVkIHRocm91Z2ggdGhpcyBBUEkgaXMKK2NhbGxlZCBkaWZmY29yZSwgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciB0d28gdGhpbmdzLgorCisqIGZpbmRpbmcgdG90YWwgcmV3cml0ZXMgKGAtQmApLCByZW5hbWVzIChgLU1gKSBhbmQgY29waWVzIChgLUNgKSwgYW5kCisgIGNoYW5nZXMgdGhhdCB0b3VjaCBhIHN0cmluZyAoYC1TYCksIGFzIHNwZWNpZmllZCBieSB0aGUgY2FsbGVyLgorCisqIG91dHB1dHRpbmcgdGhlIGRpZmZlcmVuY2VzIGluIHZhcmlvdXMgZm9ybWF0cywgYXMgc3BlY2lmaWVkIGJ5IHRoZQorICBjYWxsZXIuCisKK0NhbGxpbmcgc2VxdWVuY2UKKy0tLS0tLS0tLS0tLS0tLS0KKworKiBQcmVwYXJlIGBzdHJ1Y3QgZGlmZl9vcHRpb25zYCB0byByZWNvcmQgdGhlIHNldCBvZiBkaWZmIG9wdGlvbnMsIGFuZAorICB0aGVuIGNhbGwgYGRpZmZfc2V0dXAoKWAgdG8gaW5pdGlhbGl6ZSB0aGlzIHN0cnVjdHVyZS4gIFRoaXMgc2V0cyB1cAorICB0aGUgdmFuaWxsYSBkZWZhdWx0LgorCisqIEZpbGwgaW4gdGhlIG9wdGlvbnMgc3RydWN0dXJlIHRvIHNwZWNpZnkgZGVzaXJlZCBvdXRwdXQgZm9ybWF0LCByZW5hbWUKKyAgZGV0ZWN0aW9uLCBldGMuICBgZGlmZl9vcHRfcGFyc2UoKWAgY2FuIGJlIHVzZWQgdG8gcGFyc2Ugb3B0aW9ucyBnaXZlbgorICBmcm9tIHRoZSBjb21tYW5kIGxpbmUgaW4gYSB3YXkgY29uc2lzdGVudCB3aXRoIGV4aXN0aW5nIGdpdC1kaWZmCisgIGZhbWlseSBvZiBwcm9ncmFtcy4KKworKiBDYWxsIGBkaWZmX3NldHVwX2RvbmUoKWA7IHRoaXMgaW5zcGVjdHMgdGhlIG9wdGlvbnMgc2V0IHVwIHNvIGZhciBmb3IKKyAgaW50ZXJuYWwgY29uc2lzdGVuY3kgYW5kIG1ha2UgbmVjZXNzYXJ5IHR3ZWFraW5nIHRvIGl0IChlLmcuIGlmCisgIHRleHR1YWwgcGF0Y2ggb3V0cHV0IHdhcyBhc2tlZCwgcmVjdXJzaXZlIGJlaGF2aW91ciBpcyB0dXJuZWQgb24pOworICB0aGUgY2FsbGJhY2sgc2V0X2RlZmF1bHQgaW4gZGlmZl9vcHRpb25zIGNhbiBiZSB1c2VkIHRvIHR3ZWFrIHRoaXMgbW9yZS4KKworKiBBcyB5b3UgZmluZCBkaWZmZXJlbnQgcGFpcnMgb2YgZmlsZXMsIGNhbGwgYGRpZmZfY2hhbmdlKClgIHRvIGZlZWQKKyAgbW9kaWZpZWQgZmlsZXMsIGBkaWZmX2FkZHJlbW92ZSgpYCB0byBmZWVkIGNyZWF0ZWQgb3IgZGVsZXRlZCBmaWxlcywKKyAgb3IgYGRpZmZfdW5tZXJnZSgpYCB0byBmZWVkIGEgZmlsZSB3aG9zZSBzdGF0ZSBpcyAndW5tZXJnZWQnIHRvIHRoZQorICBBUEkuICBUaGVzZSBhcmUgdGhpbiB3cmFwcGVycyB0byBhIGxvd2VyLWxldmVsIGBkaWZmX3F1ZXVlKClgIGZ1bmN0aW9uCisgIHRoYXQgaXMgZmxleGlibGUgZW5vdWdoIHRvIHJlY29yZCBhbnkgb2YgdGhlc2Uga2luZHMgb2YgY2hhbmdlcy4KKworKiBPbmNlIHlvdSBmaW5pc2ggZmVlZGluZyB0aGUgcGFpcnMgb2YgZmlsZXMsIGNhbGwgYGRpZmZjb3JlX3N0ZCgpYC4KKyAgVGhpcyB3aWxsIHRlbGwgdGhlIGRpZmZjb3JlIGxpYnJhcnkgdG8gZ28gYWhlYWQgYW5kIGRvIGl0cyB3b3JrLgorCisqIENhbGxpbmcgYGRpZmZfZmx1c2goKWAgd2lsbCBwcm9kdWNlIHRoZSBvdXRwdXQuCisKKworRGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworKiBgc3RydWN0IGRpZmZfZmlsZXNwZWNgCisKK1RoaXMgaXMgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGZvciBhIHNpbmdsZSBmaWxlIChibG9iKS4gIEl0CityZWNvcmRzIHRoZSBibG9iIG9iamVjdCBuYW1lIChpZiBrbm93biAtLSBmb3IgYSB3b3JrIHRyZWUgZmlsZSBpdAordHlwaWNhbGx5IGlzIGEgTlVMIFNIQS0xKSwgZmlsZW1vZGUgYW5kIHBhdGhuYW1lLiAgVGhpcyBpcyB3aGF0IHRoZQorYGRpZmZfYWRkcmVtb3ZlKClgLCBgZGlmZl9jaGFuZ2UoKWAgYW5kIGBkaWZmX3VubWVyZ2UoKWAgc3ludGhlc2l6ZSBhbmQKK2ZlZWQgYGRpZmZfcXVldWUoKWAgZnVuY3Rpb24gd2l0aC4KKworKiBgc3RydWN0IGRpZmZfZmlsZXBhaXJgCisKK1RoaXMgcmVjb3JkcyBhIHBhaXIgb2YgYHN0cnVjdCBkaWZmX2ZpbGVzcGVjYDsgdGhlIGZpbGVzcGVjIGZvciBhIGZpbGUKK2luIHRoZSAib2xkIiBzZXQgKGkuZS4gcHJlaW1hZ2UpIGlzIGNhbGxlZCBgb25lYCwgYW5kIHRoZSBmaWxlc3BlYyBmb3IgYQorZmlsZSBpbiB0aGUgIm5ldyIgc2V0IChpLmUuIHBvc3RpbWFnZSkgaXMgY2FsbGVkIGB0d29gLiAgQSBjaGFuZ2UgdGhhdAorcmVwcmVzZW50cyBmaWxlIGNyZWF0aW9uIGhhcyBOVUxMIGluIGBvbmVgLCBhbmQgZmlsZSBkZWxldGlvbiBoYXMgTlVMTAoraW4gYHR3b2AuCisKK0EgYGZpbGVwYWlyYCBzdGFydHMgcG9pbnRpbmcgYXQgYG9uZWAgYW5kIGB0d29gIHRoYXQgYXJlIGZyb20gdGhlIHNhbWUKK2ZpbGVuYW1lLCBidXQgYGRpZmZjb3JlX3N0ZCgpYCBjYW4gYnJlYWsgcGFpcnMgYW5kIG1hdGNoIGNvbXBvbmVudAorZmlsZXNwZWNzIHdpdGggb3RoZXIgZmlsZXNwZWNzIGZyb20gYSBkaWZmZXJlbnQgZmlsZXBhaXIgdG8gZm9ybSBuZXcKK2ZpbGVwYWlyLiAgVGhpcyBpcyBjYWxsZWQgJ3JlbmFtZSBkZXRlY3Rpb24nLgorCisqIGBzdHJ1Y3QgZGlmZl9xdWV1ZWAKKworVGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgZmlsZXBhaXJzLiAgTm90YWJsZSBtZW1iZXJzIGFyZToKKworYHF1ZXVlYDo6CisKKwlBbiBhcnJheSBvZiBwb2ludGVycyB0byBgc3RydWN0IGRpZmZfZmlsZXBhaXJgLiAgVGhpcworCWR5bmFtaWNhbGx5IGdyb3dzIGFzIHlvdSBhZGQgZmlsZXBhaXJzOworCitgYWxsb2NgOjoKKworCVRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiB0aGUgYHF1ZXVlYCBhcnJheTsKKworYG5yYDo6CisKKwlUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBgcXVldWVgIGFycmF5LgorCisKKyogYHN0cnVjdCBkaWZmX29wdGlvbnNgCisKK1RoaXMgZGVzY3JpYmVzIHRoZSBzZXQgb2Ygb3B0aW9ucyB0aGUgY2FsbGluZyBwcm9ncmFtIHdhbnRzIHRvIGFmZmVjdAordGhlIG9wZXJhdGlvbiBvZiBkaWZmY29yZSBsaWJyYXJ5IHdpdGguCisKK05vdGFibGUgbWVtYmVycyBhcmU6CisKK2BvdXRwdXRfZm9ybWF0YDo6CisJVGhlIG91dHB1dCBmb3JtYXQgdXNlZCB3aGVuIGBkaWZmX2ZsdXNoKClgIGlzIHJ1bi4KKworYGNvbnRleHRgOjoKKwlOdW1iZXIgb2YgY29udGV4dCBsaW5lcyB0byBnZW5lcmF0ZSBpbiBwYXRjaCBvdXRwdXQuCisKK2BicmVha19vcHRgLCBgZGV0ZWN0X3JlbmFtZWAsIGByZW5hbWUtc2NvcmVgLCBgcmVuYW1lX2xpbWl0YDo6CisJQWZmZWN0cyB0aGUgd2F5IGRldGVjdGlvbiBsb2dpYyBmb3IgY29tcGxldGUgcmV3cml0ZXMsIHJlbmFtZXMKKwlhbmQgY29waWVzLgorCitgYWJicmV2YDo6CisJTnVtYmVyIG9mIGhleGRpZ2l0cyB0byBhYmJyZXZpYXRlIHJhdyBmb3JtYXQgb3V0cHV0IHRvLgorCitgcGlja2F4ZWA6OgorCUEgY29uc3RhbnQgc3RyaW5nIChjYW4gYW5kIHR5cGljYWxseSBkb2VzIGNvbnRhaW4gbmV3bGluZXMgdG8KKwlsb29rIGZvciBhIGJsb2NrIG9mIHRleHQsIG5vdCBqdXN0IGEgc2luZ2xlIGxpbmUpIHRvIGZpbHRlciBvdXQKKwl0aGUgZmlsZXBhaXJzIHRoYXQgZG8gbm90IGNoYW5nZSB0aGUgbnVtYmVyIG9mIHN0cmluZ3MgY29udGFpbmVkCisJaW4gaXRzIHByZWltYWdlIGFuZCBwb3N0aW1hZ2Ugb2YgdGhlIGRpZmZfcXVldWUuCisKK2BmbGFnc2A6OgorCVRoaXMgaXMgbW9zdGx5IGEgY29sbGVjdGlvbiBvZiBib29sZWFuIG9wdGlvbnMgdGhhdCBhZmZlY3RzIHRoZQorCW9wZXJhdGlvbiwgYnV0IHNvbWUgZG8gbm90IGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCB0aGUgZGlmZmNvcmUKKwlsaWJyYXJ5LgorCitgdG91Y2hlZF9mbGFnc2A6OgorCVJlY29yZHMgd2hldGhlciBhIGZsYWcgaGFzIGJlZW4gY2hhbmdlZCBkdWUgdG8gdXNlciByZXF1ZXN0CisJKHJhdGhlciB0aGFuIGp1c3Qgc2V0L3Vuc2V0IGJ5IGRlZmF1bHQpLgorCitgc2V0X2RlZmF1bHRgOjoKKwlDYWxsYmFjayB3aGljaCBhbGxvd3MgdHdlYWtpbmcgdGhlIG9wdGlvbnMgaW4gZGlmZl9zZXR1cF9kb25lKCkuCisKK0JJTkFSWSwgVEVYVDs7CisJQWZmZWN0cyB0aGUgd2F5IGhvdyBhIGZpbGUgdGhhdCBpcyBzZWVtaW5nbHkgYmluYXJ5IGlzIHRyZWF0ZWQuCisKK0ZVTExfSU5ERVg7OworCVRlbGxzIHRoZSBwYXRjaCBvdXRwdXQgZm9ybWF0IG5vdCB0byB1c2UgYWJicmV2aWF0ZWQgb2JqZWN0CisJbmFtZXMgb24gdGhlICJpbmRleCIgbGluZXMuCisKK0ZJTkRfQ09QSUVTX0hBUkRFUjs7CisJVGVsbHMgdGhlIGRpZmZjb3JlIGxpYnJhcnkgdGhhdCB0aGUgY2FsbGVyIGlzIGZlZWRpbmcgdW5jaGFuZ2VkCisJZmlsZXBhaXJzIHRvIGFsbG93IGNvcGllcyBmcm9tIHVubW9kaWZpZWQgZmlsZXMgYmUgZGV0ZWN0ZWQuCisKK0NPTE9SX0RJRkY7OworCU91dHB1dCBzaG91bGQgYmUgY29sb3JlZC4KKworQ09MT1JfRElGRl9XT1JEUzs7CisJT3V0cHV0IGlzIGEgY29sb3JlZCB3b3JkLWRpZmYuCisKK05PX0lOREVYOzsKKwlUZWxscyBkaWZmLWZpbGVzIHRoYXQgdGhlIGlucHV0IGlzIG5vdCB0cmFja2VkIGZpbGVzIGJ1dCBmaWxlcworCWluIHJhbmRvbSBsb2NhdGlvbnMgb24gdGhlIGZpbGVzeXN0ZW0uCisKK0FMTE9XX0VYVEVSTkFMOzsKKwlUZWxscyBvdXRwdXQgcm91dGluZSB0aGF0IGl0IGlzIE9rIHRvIGNhbGwgdXNlciBzcGVjaWZpZWQgcGF0Y2gKKwlvdXRwdXQgcm91dGluZS4gIFBsdW1iaW5nIGRpc2FibGVzIHRoaXMgdG8gZW5zdXJlIHN0YWJsZSBvdXRwdXQuCisKK1FVSUVUOzsKKwlEbyBub3Qgc2hvdyBhbnkgb3V0cHV0LgorCitSRVZFUlNFX0RJRkY7OworCVRlbGxzIHRoZSBsaWJyYXJ5IHRoYXQgdGhlIGNhbGxpbmcgcHJvZ3JhbSBpcyBmZWVkaW5nIHRoZQorCWZpbGVwYWlycyByZXZlcnNlZDsgYG9uZWAgaXMgdHdvLCBhbmQgYHR3b2AgaXMgb25lLgorCitFWElUX1dJVEhfU1RBVFVTOzsKKwlGb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBjYWxsaW5nIHByb2dyYW0gYW5kIHRoZSBvcHRpb25zCisJcGFyc2VyOyB0ZWxsIHRoZSBjYWxsaW5nIHByb2dyYW0gdG8gc2lnbmFsIHRoZSBwcmVzZW5jZSBvZgorCWRpZmZlcmVuY2UgdXNpbmcgcHJvZ3JhbSBleGl0IGNvZGUuCisKK0hBU19DSEFOR0VTOzsKKwlJbnRlcm5hbDsgdXNlZCBmb3Igb3B0aW1pemF0aW9uIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgY2hhbmdlLgorCitTSUxFTlRfT05fUkVNT1ZFOzsKKwlBZmZlY3RzIGlmIGRpZmYtZmlsZXMgc2hvd3MgcmVtb3ZlZCBmaWxlcy4KKworUkVDVVJTSVZFLCBUUkVFX0lOX1JFQ1VSU0lWRTs7CisJVGVsbHMgaWYgdHJlZSB0cmF2ZXJzYWwgZG9uZSBieSB0cmVlLWRpZmYgc2hvdWxkIHJlY3Vyc2l2ZWx5CisJZGVzY2VuZCBpbnRvIGEgdHJlZSBvYmplY3QgcGFpciB0aGF0IGFyZSBkaWZmZXJlbnQgaW4gcHJlaW1hZ2UKKwlhbmQgcG9zdGltYWdlIHNldC4KKworKEpDKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWRpcmVjdG9yeS1saXN0aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaXJlY3RvcnktbGlzdGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4ZTc4ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1kaXJlY3RvcnktbGlzdGluZy50eHQKQEAgLTAsMCArMSwxMDUgQEAKK2RpcmVjdG9yeSBsaXN0aW5nIEFQSQorPT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBkaXJlY3RvcnkgbGlzdGluZyBBUEkgaXMgdXNlZCB0byBlbnVtZXJhdGUgcGF0aHMgaW4gdGhlIHdvcmsgdHJlZSwKK29wdGlvbmFsbHkgdGFraW5nIGAuZ2l0L2luZm8vZXhjbHVkZWAgYW5kIGAuZ2l0aWdub3JlYCBmaWxlcyBwZXIKK2RpcmVjdG9yeSBpbnRvIGFjY291bnQuCisKK0RhdGEgc3RydWN0dXJlCistLS0tLS0tLS0tLS0tLQorCitgc3RydWN0IGRpcl9zdHJ1Y3RgIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHBhc3MgZGlyZWN0b3J5IHRyYXZlcnNhbAorb3B0aW9ucyB0byB0aGUgbGlicmFyeSBhbmQgdG8gcmVjb3JkIHRoZSBwYXRocyBkaXNjb3ZlcmVkLiAgQSBzaW5nbGUKK2BzdHJ1Y3QgZGlyX3N0cnVjdGAgaXMgdXNlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZSB0cmF2ZXJzYWwKK3JlY3Vyc2l2ZWx5IGRlc2NlbmRzIGludG8gc3ViZGlyZWN0b3JpZXMuCisKK1RoZSBub3RhYmxlIG9wdGlvbnMgYXJlOgorCitgZXhjbHVkZV9wZXJfZGlyYDo6CisKKwlUaGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSByZWFkIGluIGVhY2ggZGlyZWN0b3J5IGZvciBleGNsdWRlZAorCWZpbGVzICh0eXBpY2FsbHkgYC5naXRpZ25vcmVgKS4KKworYGZsYWdzYDo6CisKKwlBIGJpdC1maWVsZCBvZiBvcHRpb25zICh0aGUgYCpJR05PUkVEKmAgZmxhZ3MgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSk6CisKK2BESVJfU0hPV19JR05PUkVEYDo6OgorCisJUmV0dXJuIGp1c3QgaWdub3JlZCBmaWxlcyBpbiBgZW50cmllc1tdYCwgbm90IHVudHJhY2tlZCBmaWxlcy4KKworYERJUl9TSE9XX0lHTk9SRURfVE9PYDo6OgorCisJU2ltaWxhciB0byBgRElSX1NIT1dfSUdOT1JFRGAsIGJ1dCByZXR1cm4gaWdub3JlZCBmaWxlcyBpbiBgaWdub3JlZFtdYAorCWluIGFkZGl0aW9uIHRvIHVudHJhY2tlZCBmaWxlcyBpbiBgZW50cmllc1tdYC4KKworYERJUl9DT0xMRUNUX0lHTk9SRURgOjo6CisKKwlTcGVjaWFsIG1vZGUgZm9yIGdpdC1hZGQuIFJldHVybiBpZ25vcmVkIGZpbGVzIGluIGBpZ25vcmVkW11gIGFuZAorCXVudHJhY2tlZCBmaWxlcyBpbiBgZW50cmllc1tdYC4gT25seSByZXR1cm5zIGlnbm9yZWQgZmlsZXMgdGhhdCBtYXRjaAorCXBhdGhzcGVjIGV4YWN0bHkgKG5vIHdpbGRjYXJkcykuIERvZXMgbm90IHJlY3Vyc2UgaW50byBpZ25vcmVkCisJZGlyZWN0b3JpZXMuCisKK2BESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFU2A6OjoKKworCUluY2x1ZGUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgdHJhY2tlZC4KKworYERJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTYDo6OgorCisJRG8gbm90IGluY2x1ZGUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgdHJhY2tlZCBhbmQgaXMgZW1wdHkuCisKK2BESVJfTk9fR0lUTElOS1NgOjo6CisKKwlJZiBzZXQsIHJlY3Vyc2UgaW50byBhIGRpcmVjdG9yeSB0aGF0IGxvb2tzIGxpa2UgYSBHaXQKKwlkaXJlY3RvcnkuICBPdGhlcndpc2UgaXQgaXMgc2hvd24gYXMgYSBkaXJlY3RvcnkuCisKK1RoZSByZXN1bHQgb2YgdGhlIGVudW1lcmF0aW9uIGlzIGxlZnQgaW4gdGhlc2UgZmllbGRzOgorCitgZW50cmllc1tdYDo6CisKKwlBbiBhcnJheSBvZiBgc3RydWN0IGRpcl9lbnRyeWAsIGVhY2ggZWxlbWVudCBvZiB3aGljaCBkZXNjcmliZXMKKwlhIHBhdGguCisKK2BucmA6OgorCisJVGhlIG51bWJlciBvZiBtZW1iZXJzIGluIGBlbnRyaWVzW11gIGFycmF5LgorCitgYWxsb2NgOjoKKworCUludGVybmFsIHVzZTsga2VlcHMgdHJhY2sgb2YgYWxsb2NhdGlvbiBvZiBgZW50cmllc1tdYCBhcnJheS4KKworYGlnbm9yZWRbXWA6OgorCisJQW4gYXJyYXkgb2YgYHN0cnVjdCBkaXJfZW50cnlgLCB1c2VkIGZvciBpZ25vcmVkIHBhdGhzIHdpdGggdGhlCisJYERJUl9TSE9XX0lHTk9SRURfVE9PYCBhbmQgYERJUl9DT0xMRUNUX0lHTk9SRURgIGZsYWdzLgorCitgaWdub3JlZF9ucmA6OgorCisJVGhlIG51bWJlciBvZiBtZW1iZXJzIGluIGBpZ25vcmVkW11gIGFycmF5LgorCitDYWxsaW5nIHNlcXVlbmNlCistLS0tLS0tLS0tLS0tLS0tCisKK05vdGU6IGluZGV4IG1heSBiZSBsb29rZWQgYXQgZm9yIC5naXRpZ25vcmUgZmlsZXMgdGhhdCBhcmUgQ0VfU0tJUF9XT1JLVFJFRQorbWFya2VkLiBJZiB5b3UgdG8gZXhjbHVkZSBmaWxlcywgbWFrZSBzdXJlIHlvdSBoYXZlIGxvYWRlZCBpbmRleCBmaXJzdC4KKworKiBQcmVwYXJlIGBzdHJ1Y3QgZGlyX3N0cnVjdCBkaXJgIGFuZCBjbGVhciBpdCB3aXRoIGBtZW1zZXQoJmRpciwgMCwKKyAgc2l6ZW9mKGRpcikpYC4KKworKiBUbyBhZGQgc2luZ2xlIGV4Y2x1ZGUgcGF0dGVybiwgY2FsbCBgYWRkX2V4Y2x1ZGVfbGlzdCgpYCBhbmQgdGhlbgorICBgYWRkX2V4Y2x1ZGUoKWAuCisKKyogVG8gYWRkIHBhdHRlcm5zIGZyb20gYSBmaWxlIChlLmcuIGAuZ2l0L2luZm8vZXhjbHVkZWApLCBjYWxsCisgIGBhZGRfZXhjbHVkZXNfZnJvbV9maWxlKClgICwgYW5kL29yIHNldCBgZGlyLmV4Y2x1ZGVfcGVyX2RpcmAuICBBCisgIHNob3J0LWhhbmQgZnVuY3Rpb24gYHNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKClgIGNhbiBiZSB1c2VkIHRvIHNldAorICB1cCB0aGUgc3RhbmRhcmQgc2V0IG9mIGV4Y2x1ZGUgc2V0dGluZ3MuCisKKyogU2V0IG9wdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBEYXRhIFN0cnVjdHVyZSBzZWN0aW9uIGFib3ZlLgorCisqIENhbGwgYHJlYWRfZGlyZWN0b3J5KClgLgorCisqIFVzZSBgZGlyLmVudHJpZXNbXWAuCisKKyogQ2FsbCBgY2xlYXJfZGlyZWN0b3J5KClgIHdoZW4gbm9uZSBvZiB0aGUgY29udGFpbmVkIGVsZW1lbnRzIGFyZSBubyBsb25nZXIgaW4gdXNlLgorCisoSkMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZXJyb3ItaGFuZGxpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWVycm9yLWhhbmRsaW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWVlZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWVycm9yLWhhbmRsaW5nLnR4dApAQCAtMCwwICsxLDc1IEBACitFcnJvciByZXBvcnRpbmcgaW4gZ2l0Cis9PT09PT09PT09PT09PT09PT09PT09CisKK2BkaWVgLCBgdXNhZ2VgLCBgZXJyb3JgLCBhbmQgYHdhcm5pbmdgIHJlcG9ydCBlcnJvcnMgb2YgdmFyaW91cwora2luZHMuCisKKy0gYGRpZWAgaXMgZm9yIGZhdGFsIGFwcGxpY2F0aW9uIGVycm9ycy4gIEl0IHByaW50cyBhIG1lc3NhZ2UgdG8KKyAgdGhlIHVzZXIgYW5kIGV4aXRzIHdpdGggc3RhdHVzIDEyOC4KKworLSBgdXNhZ2VgIGlzIGZvciBlcnJvcnMgaW4gY29tbWFuZCBsaW5lIHVzYWdlLiAgQWZ0ZXIgcHJpbnRpbmcgaXRzCisgIG1lc3NhZ2UsIGl0IGV4aXRzIHdpdGggc3RhdHVzIDEyOS4gIChTZWUgYWxzbyBgdXNhZ2Vfd2l0aF9vcHRpb25zYAorICBpbiB0aGUgbGluazphcGktcGFyc2Utb3B0aW9ucy5odG1sW3BhcnNlLW9wdGlvbnMgQVBJXS4pCisKKy0gYGVycm9yYCBpcyBmb3Igbm9uLWZhdGFsIGxpYnJhcnkgZXJyb3JzLiAgSXQgcHJpbnRzIGEgbWVzc2FnZQorICB0byB0aGUgdXNlciBhbmQgcmV0dXJucyAtMSBmb3IgY29udmVuaWVuY2UgaW4gc2lnbmFsaW5nIHRoZSBlcnJvcgorICB0byB0aGUgY2FsbGVyLgorCistIGB3YXJuaW5nYCBpcyBmb3IgcmVwb3J0aW5nIHNpdHVhdGlvbnMgdGhhdCBwcm9iYWJseSBzaG91bGQgbm90CisgIG9jY3VyIGJ1dCB3aGljaCB0aGUgdXNlciAoYW5kIEdpdCkgY2FuIGNvbnRpbnVlIHRvIHdvcmsgYXJvdW5kCisgIHdpdGhvdXQgcnVubmluZyBpbnRvIHRvbyBtYW55IHByb2JsZW1zLiAgTGlrZSBgZXJyb3JgLCBpdAorICByZXR1cm5zIC0xIGFmdGVyIHJlcG9ydGluZyB0aGUgc2l0dWF0aW9uIHRvIHRoZSBjYWxsZXIuCisKK0N1c3RvbWl6YWJsZSBlcnJvciBoYW5kbGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIGBkaWVgIGFuZCBgZXJyb3JgIGlzIHRvIHdyaXRlIGEgbWVzc2FnZSB0bworc3RkZXJyIGFuZCB0aGVuIGV4aXQgb3IgcmV0dXJuIGFzIGFwcHJvcHJpYXRlLiAgVGhpcyBiZWhhdmlvciBjYW4gYmUKK292ZXJyaWRkZW4gdXNpbmcgYHNldF9kaWVfcm91dGluZWAgYW5kIGBzZXRfZXJyb3Jfcm91dGluZWAuICBGb3IKK2V4YW1wbGUsICJnaXQgZGFlbW9uIiB1c2VzIHNldF9kaWVfcm91dGluZSB0byB3cml0ZSB0aGUgcmVhc29uIGBkaWVgCit3YXMgY2FsbGVkIHRvIHN5c2xvZyBiZWZvcmUgZXhpdGluZy4KKworTGlicmFyeSBlcnJvcnMKKy0tLS0tLS0tLS0tLS0tCisKK0Z1bmN0aW9ucyByZXR1cm4gYSBuZWdhdGl2ZSBpbnRlZ2VyIG9uIGVycm9yLiAgRGV0YWlscyBiZXlvbmQgdGhhdAordmFyeSBmcm9tIGZ1bmN0aW9uIHRvIGZ1bmN0aW9uOgorCistIFNvbWUgZnVuY3Rpb25zIHJldHVybiAtMSBmb3IgYWxsIGVycm9ycy4gIE90aGVycyByZXR1cm4gYSBtb3JlCisgIHNwZWNpZmljIHZhbHVlIGRlcGVuZGluZyBvbiBob3cgdGhlIGNhbGxlciBtaWdodCB3YW50IHRvIHJlYWN0CisgIHRvIHRoZSBlcnJvci4KKworLSBTb21lIGZ1bmN0aW9ucyByZXBvcnQgdGhlIGVycm9yIHRvIHN0ZGVyciB3aXRoIGBlcnJvcmAsCisgIHdoaWxlIG90aGVycyBsZWF2ZSB0aGF0IGZvciB0aGUgY2FsbGVyIHRvIGRvLgorCistIGVycm5vIGlzIG5vdCBtZWFuaW5nZnVsIG9uIHJldHVybiBmcm9tIG1vc3QgZnVuY3Rpb25zIChleGNlcHQKKyAgZm9yIHRoaW4gd3JhcHBlcnMgZm9yIHN5c3RlbSBjYWxscykuCisKK0NoZWNrIHRoZSBmdW5jdGlvbidzIEFQSSBkb2N1bWVudGF0aW9uIHRvIGJlIHN1cmUuCisKK0NhbGxlci1oYW5kbGVkIGVycm9ycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGluY3JlYXNpbmcgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0YWtlIGEgcGFyYW1ldGVyICdzdHJ1Y3Qgc3RyYnVmICplcnInLgorT24gZXJyb3IsIHN1Y2ggZnVuY3Rpb25zIGFwcGVuZCBhIG1lc3NhZ2UgYWJvdXQgd2hhdCB3ZW50IHdyb25nIHRvIHRoZQorJ2Vycicgc3RyYnVmLiAgVGhlIG1lc3NhZ2UgaXMgbWVhbnQgdG8gYmUgY29tcGxldGUgZW5vdWdoIHRvIGJlIHBhc3NlZAordG8gYGRpZWAgb3IgYGVycm9yYCBhcy1pcy4gIEZvciBleGFtcGxlOgorCisJaWYgKHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisKK1RoZSAnZXJyJyBwYXJhbWV0ZXIgd2lsbCBiZSB1bnRvdWNoZWQgaWYgbm8gZXJyb3Igb2NjdXJyZWQsIHNvIG11bHRpcGxlCitmdW5jdGlvbiBjYWxscyBjYW4gYmUgY2hhaW5lZDoKKworCXQgPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0IHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl91cGRhdGUodCwgIkhFQUQiLCAuLi4sICZlcnIpIHx8CisJICAgIHJldF90cmFuc2FjdGlvbl9jb21taXQodCwgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworVGhlICdlcnInIHBhcmFtZXRlciBtdXN0IGJlIGEgcG9pbnRlciB0byBhIHZhbGlkIHN0cmJ1Zi4gIFRvIHNpbGVuY2UKK2EgbWVzc2FnZSwgcGFzcyBhIHN0cmJ1ZiB0aGF0IGlzIGV4cGxpY2l0bHkgaWdub3JlZDoKKworCWlmICh0aGluZ190aGF0X2Nhbl9mYWlsX2luX2FuX2lnbm9yYWJsZV93YXkoLi4uLCAmZXJyKSkKKwkJLyogVGhpcyBmYWlsdXJlIGlzIG9rYXkuICovCisJCXN0cmJ1Zl9yZXNldCgmZXJyKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1naXRhdHRyaWJ1dGVzLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1naXRhdHRyaWJ1dGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjAyNjY4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWdpdGF0dHJpYnV0ZXMudHh0CkBAIC0wLDAgKzEsMTI4IEBACitnaXRhdHRyaWJ1dGVzIEFQSQorPT09PT09PT09PT09PT09PT0KKworZ2l0YXR0cmlidXRlcyBtZWNoYW5pc20gZ2l2ZXMgYSB1bmlmb3JtIHdheSB0byBhc3NvY2lhdGUgdmFyaW91cworYXR0cmlidXRlcyB0byBzZXQgb2YgcGF0aHMuCisKKworRGF0YSBTdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tCisKK2BzdHJ1Y3QgZ2l0X2F0dHJgOjoKKworCUFuIGF0dHJpYnV0ZSBpcyBhbiBvcGFxdWUgb2JqZWN0IHRoYXQgaXMgaWRlbnRpZmllZCBieSBpdHMgbmFtZS4KKwlQYXNzIHRoZSBuYW1lIHRvIGBnaXRfYXR0cigpYCBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIG9iamVjdCBvZgorCXRoaXMgdHlwZS4gIFRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHN0cnVjdHVyZSBpcworCW9mIG5vIGludGVyZXN0IHRvIHRoZSBjYWxsaW5nIHByb2dyYW1zLiAgVGhlIG5hbWUgb2YgdGhlCisJYXR0cmlidXRlIGNhbiBiZSByZXRyaWV2ZWQgYnkgY2FsbGluZyBgZ2l0X2F0dHJfbmFtZSgpYC4KKworYHN0cnVjdCBnaXRfYXR0cl9jaGVja2A6OgorCisJVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIHNldCBvZiBhdHRyaWJ1dGVzIHRvIGNoZWNrIGluIGEgY2FsbAorCXRvIGBnaXRfY2hlY2tfYXR0cigpYCBmdW5jdGlvbiwgYW5kIHJlY2VpdmVzIHRoZSByZXN1bHRzLgorCisKK0F0dHJpYnV0ZSBWYWx1ZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworQW4gYXR0cmlidXRlIGZvciBhIHBhdGggY2FuIGJlIGluIG9uZSBvZiBmb3VyIHN0YXRlczogU2V0LCBVbnNldCwKK1Vuc3BlY2lmaWVkIG9yIHNldCB0byBhIHN0cmluZywgYW5kIGAudmFsdWVgIG1lbWJlciBvZiBgc3RydWN0CitnaXRfYXR0cl9jaGVja2AgcmVjb3JkcyBpdC4gIFRoZXJlIGFyZSB0aHJlZSBtYWNyb3MgdG8gY2hlY2sgdGhlc2U6CisKK2BBVFRSX1RSVUUoKWA6OgorCisJUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgU2V0IGZvciB0aGUgcGF0aC4KKworYEFUVFJfRkFMU0UoKWA6OgorCisJUmV0dXJucyB0cnVlIGlmIHRoZSBhdHRyaWJ1dGUgaXMgVW5zZXQgZm9yIHRoZSBwYXRoLgorCitgQVRUUl9VTlNFVCgpYDo6CisKKwlSZXR1cm5zIHRydWUgaWYgdGhlIGF0dHJpYnV0ZSBpcyBVbnNwZWNpZmllZCBmb3IgdGhlIHBhdGguCisKK0lmIG5vbmUgb2YgdGhlIGFib3ZlIHJldHVybnMgdHJ1ZSwgYC52YWx1ZWAgbWVtYmVyIHBvaW50cyBhdCBhIHN0cmluZwordmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBmb3IgdGhlIHBhdGguCisKKworUXVlcnlpbmcgU3BlY2lmaWMgQXR0cmlidXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFByZXBhcmUgYW4gYXJyYXkgb2YgYHN0cnVjdCBnaXRfYXR0cl9jaGVja2AgdG8gZGVmaW5lIHRoZSBsaXN0IG9mCisgIGF0dHJpYnV0ZXMgeW91IHdvdWxkIHdhbnQgdG8gY2hlY2suICBUbyBwb3B1bGF0ZSB0aGlzIGFycmF5LCB5b3Ugd291bGQKKyAgbmVlZCB0byBkZWZpbmUgbmVjZXNzYXJ5IGF0dHJpYnV0ZXMgYnkgY2FsbGluZyBgZ2l0X2F0dHIoKWAgZnVuY3Rpb24uCisKKyogQ2FsbCBgZ2l0X2NoZWNrX2F0dHIoKWAgdG8gY2hlY2sgdGhlIGF0dHJpYnV0ZXMgZm9yIHRoZSBwYXRoLgorCisqIEluc3BlY3QgYGdpdF9hdHRyX2NoZWNrYCBzdHJ1Y3R1cmUgdG8gc2VlIGhvdyBlYWNoIG9mIHRoZSBhdHRyaWJ1dGUgaW4KKyAgdGhlIGFycmF5IGlzIGRlZmluZWQgZm9yIHRoZSBwYXRoLgorCisKK0V4YW1wbGUKKy0tLS0tLS0KKworVG8gc2VlIGhvdyBhdHRyaWJ1dGVzICJjcmxmIiBhbmQgImluZGVudCIgYXJlIHNldCBmb3IgZGlmZmVyZW50IHBhdGhzLgorCisuIFByZXBhcmUgYW4gYXJyYXkgb2YgYHN0cnVjdCBnaXRfYXR0cl9jaGVja2Agd2l0aCB0d28gZWxlbWVudHMgKGJlY2F1c2UKKyAgd2UgYXJlIGNoZWNraW5nIHR3byBhdHRyaWJ1dGVzKS4gIEluaXRpYWxpemUgdGhlaXIgYGF0dHJgIG1lbWJlciB3aXRoCisgIHBvaW50ZXJzIHRvIGBzdHJ1Y3QgZ2l0X2F0dHJgIG9idGFpbmVkIGJ5IGNhbGxpbmcgYGdpdF9hdHRyKClgOgorCistLS0tLS0tLS0tLS0KK3N0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgY2hlY2tbMl07CitzdGF0aWMgdm9pZCBzZXR1cF9jaGVjayh2b2lkKQoreworCWlmIChjaGVja1swXS5hdHRyKQorCQlyZXR1cm47IC8qIGFscmVhZHkgZG9uZSAqLworCWNoZWNrWzBdLmF0dHIgPSBnaXRfYXR0cigiY3JsZiIpOworCWNoZWNrWzFdLmF0dHIgPSBnaXRfYXR0cigiaWRlbnQiKTsKK30KKy0tLS0tLS0tLS0tLQorCisuIENhbGwgYGdpdF9jaGVja19hdHRyKClgIHdpdGggdGhlIHByZXBhcmVkIGFycmF5IG9mIGBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2tgOgorCistLS0tLS0tLS0tLS0KKwljb25zdCBjaGFyICpwYXRoOworCisJc2V0dXBfY2hlY2soKTsKKwlnaXRfY2hlY2tfYXR0cihwYXRoLCBBUlJBWV9TSVpFKGNoZWNrKSwgY2hlY2spOworLS0tLS0tLS0tLS0tCisKKy4gQWN0IG9uIGAudmFsdWVgIG1lbWJlciBvZiB0aGUgcmVzdWx0LCBsZWZ0IGluIGBjaGVja1tdYDoKKworLS0tLS0tLS0tLS0tCisJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVja1swXS52YWx1ZTsKKworCWlmIChBVFRSX1RSVUUodmFsdWUpKSB7CisJCVRoZSBhdHRyaWJ1dGUgaXMgU2V0LCBieSBsaXN0aW5nIG9ubHkgdGhlIG5hbWUgb2YgdGhlCisJCWF0dHJpYnV0ZSBpbiB0aGUgZ2l0YXR0cmlidXRlcyBmaWxlIGZvciB0aGUgcGF0aC4KKwl9IGVsc2UgaWYgKEFUVFJfRkFMU0UodmFsdWUpKSB7CisJCVRoZSBhdHRyaWJ1dGUgaXMgVW5zZXQsIGJ5IGxpc3RpbmcgdGhlIG5hbWUgb2YgdGhlCisJCWF0dHJpYnV0ZSBwcmVmaXhlZCB3aXRoIGEgZGFzaCAtIGZvciB0aGUgcGF0aC4KKwl9IGVsc2UgaWYgKEFUVFJfVU5TRVQodmFsdWUpKSB7CisJCVRoZSBhdHRyaWJ1dGUgaXMgbmVpdGhlciBzZXQgbm9yIHVuc2V0IGZvciB0aGUgcGF0aC4KKwl9IGVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJpbnB1dCIpKSB7CisJCUlmIG5vbmUgb2YgQVRUUl9UUlVFKCksIEFUVFJfRkFMU0UoKSwgb3IgQVRUUl9VTlNFVCgpIGlzCisJCXRydWUsIHRoZSB2YWx1ZSBpcyBhIHN0cmluZyBzZXQgaW4gdGhlIGdpdGF0dHJpYnV0ZXMKKwkJZmlsZSBmb3IgdGhlIHBhdGggYnkgc2F5aW5nICJhdHRyPXZhbHVlIi4KKwl9IGVsc2UgaWYgKC4uLiBvdGhlciBjaGVjayB1c2luZyB2YWx1ZSBhcyBzdHJpbmcgLi4uKSB7CisJCS4uLgorCX0KKy0tLS0tLS0tLS0tLQorCisKK1F1ZXJ5aW5nIEFsbCBBdHRyaWJ1dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBnZXQgdGhlIHZhbHVlcyBvZiBhbGwgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggYSBmaWxlOgorCisqIENhbGwgYGdpdF9hbGxfYXR0cnMoKWAsIHdoaWNoIHJldHVybnMgYW4gYXJyYXkgb2YgYGdpdF9hdHRyX2NoZWNrYAorICBzdHJ1Y3R1cmVzLgorCisqIEl0ZXJhdGUgb3ZlciB0aGUgYGdpdF9hdHRyX2NoZWNrYCBhcnJheSB0byBleGFtaW5lIHRoZSBhdHRyaWJ1dGUKKyAgbmFtZXMgYW5kIHZhbHVlcy4gIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgZGVzY3JpYmVkIGJ5IGEKKyAgYGdpdF9hdHRyX2NoZWNrYCBvYmplY3QgY2FuIGJlIHJldHJpZXZlZCB2aWEKKyAgYGdpdF9hdHRyX25hbWUoY2hlY2tbaV0uYXR0cilgLiAgKFBsZWFzZSBub3RlIHRoYXQgbm8gaXRlbXMgd2lsbCBiZQorICByZXR1cm5lZCBmb3IgdW5zZXQgYXR0cmlidXRlcywgc28gYEFUVFJfVU5TRVQoKWAgd2lsbCByZXR1cm4gZmFsc2UKKyAgZm9yIGFsbCByZXR1cm5lZCBgZ2l0X2FycmF5X2NoZWNrYCBvYmplY3RzLikKKworKiBGcmVlIHRoZSBgZ2l0X2FycmF5X2NoZWNrYCBhcnJheS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ncmVwLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ncmVwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjljYzg5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWdyZXAudHh0CkBAIC0wLDAgKzEsOCBAQAorZ3JlcCBBUEkKKz09PT09PT09CisKK1RhbGsgYWJvdXQgPGdyZXAuaD4sIHRoaW5ncyBsaWtlOgorCisqIGdyZXBfYnVmZmVyKCkKKworKEpDKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhhc2htYXAudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWhhc2htYXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkN2E1YmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGFzaG1hcC50eHQKQEAgLTAsMCArMSwyODAgQEAKK2hhc2htYXAgQVBJCis9PT09PT09PT09PQorCitUaGUgaGFzaG1hcCBBUEkgaXMgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIGhhc2gtYmFzZWQga2V5LXZhbHVlIG1hcHBpbmdzLgorCitEYXRhIFN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLQorCitgc3RydWN0IGhhc2htYXBgOjoKKworCVRoZSBoYXNoIHRhYmxlIHN0cnVjdHVyZS4gTWVtYmVycyBjYW4gYmUgdXNlZCBhcyBmb2xsb3dzLCBidXQgc2hvdWxkCisJbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5OgorKworVGhlIGBzaXplYCBtZW1iZXIga2VlcHMgdHJhY2sgb2YgdGhlIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzICgwIG1lYW5zIHRoZQoraGFzaG1hcCBpcyBlbXB0eSkuCisrCitgdGFibGVzaXplYCBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgdGhlIGhhc2ggdGFibGUuIEEgbm9uLTAgdmFsdWUgaW5kaWNhdGVzCit0aGF0IHRoZSBoYXNobWFwIGlzIGluaXRpYWxpemVkLiBJdCBtYXkgYWxzbyBiZSB1c2VmdWwgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzCisoaS5lLiBgc2l6ZSAvIHRhYmxlc2l6ZWAgaXMgdGhlIGN1cnJlbnQgbG9hZCBmYWN0b3IpLgorKworYGNtcGZuYCBzdG9yZXMgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gc3BlY2lmaWVkIGluIGBoYXNobWFwX2luaXQoKWAuIEluCithZHZhbmNlZCBzY2VuYXJpb3MsIGl0IG1heSBiZSB1c2VmdWwgdG8gY2hhbmdlIHRoaXMsIGUuZy4gdG8gc3dpdGNoIGJldHdlZW4KK2Nhc2Utc2Vuc2l0aXZlIGFuZCBjYXNlLWluc2Vuc2l0aXZlIGxvb2t1cC4KKworYHN0cnVjdCBoYXNobWFwX2VudHJ5YDo6CisKKwlBbiBvcGFxdWUgc3RydWN0dXJlIHJlcHJlc2VudGluZyBhbiBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZSwgd2hpY2ggbXVzdAorCWJlIHVzZWQgYXMgZmlyc3QgbWVtYmVyIG9mIHVzZXIgZGF0YSBzdHJ1Y3R1cmVzLiBJZGVhbGx5IGl0IHNob3VsZCBiZQorCWZvbGxvd2VkIGJ5IGFuIGludC1zaXplZCBtZW1iZXIgdG8gcHJldmVudCB1bnVzZWQgbWVtb3J5IG9uIDY0LWJpdAorCXN5c3RlbXMgZHVlIHRvIGFsaWdubWVudC4KKysKK1RoZSBgaGFzaGAgbWVtYmVyIGlzIHRoZSBlbnRyeSdzIGhhc2ggY29kZSBhbmQgdGhlIGBuZXh0YCBtZW1iZXIgcG9pbnRzIHRvIHRoZQorbmV4dCBlbnRyeSBpbiBjYXNlIG9mIGNvbGxpc2lvbnMgKGkuZS4gaWYgbXVsdGlwbGUgZW50cmllcyBtYXAgdG8gdGhlIHNhbWUKK2J1Y2tldCkuCisKK2BzdHJ1Y3QgaGFzaG1hcF9pdGVyYDo6CisKKwlBbiBpdGVyYXRvciBzdHJ1Y3R1cmUsIHRvIGJlIHVzZWQgd2l0aCBoYXNobWFwX2l0ZXJfKiBmdW5jdGlvbnMuCisKK1R5cGVzCistLS0tLQorCitgaW50ICgqaGFzaG1hcF9jbXBfZm4pKGNvbnN0IHZvaWQgKmVudHJ5LCBjb25zdCB2b2lkICplbnRyeV9vcl9rZXksIGNvbnN0IHZvaWQgKmtleWRhdGEpYDo6CisKKwlVc2VyLXN1cHBsaWVkIGZ1bmN0aW9uIHRvIHRlc3QgdHdvIGhhc2htYXAgZW50cmllcyBmb3IgZXF1YWxpdHkuIFNoYWxsCisJcmV0dXJuIDAgaWYgdGhlIGVudHJpZXMgYXJlIGVxdWFsLgorKworVGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgY2FsbGVkIHdpdGggbm9uLU5VTEwgYGVudHJ5YCAvIGBlbnRyeV9vcl9rZXlgCitwYXJhbWV0ZXJzIHRoYXQgaGF2ZSB0aGUgc2FtZSBoYXNoIGNvZGUuIFdoZW4gbG9va2luZyB1cCBhbiBlbnRyeSwgdGhlIGBrZXlgCithbmQgYGtleWRhdGFgIHBhcmFtZXRlcnMgdG8gaGFzaG1hcF9nZXQgYW5kIGhhc2htYXBfcmVtb3ZlIGFyZSBhbHdheXMgcGFzc2VkCithcyBzZWNvbmQgYW5kIHRoaXJkIGFyZ3VtZW50LCByZXNwZWN0aXZlbHkuIE90aGVyd2lzZSwgYGtleWRhdGFgIGlzIE5VTEwuCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKK2B1bnNpZ25lZCBpbnQgc3RyaGFzaChjb25zdCBjaGFyICpidWYpYDo6CitgdW5zaWduZWQgaW50IHN0cmloYXNoKGNvbnN0IGNoYXIgKmJ1ZilgOjoKK2B1bnNpZ25lZCBpbnQgbWVtaGFzaChjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pYDo6CitgdW5zaWduZWQgaW50IG1lbWloYXNoKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbilgOjoKKworCVJlYWR5LXRvLXVzZSBoYXNoIGZ1bmN0aW9ucyBmb3Igc3RyaW5ncywgdXNpbmcgdGhlIEZOVi0xIGFsZ29yaXRobSAoc2VlCisJaHR0cDovL3d3dy5pc3RoZS5jb20vY2hvbmdvL3RlY2gvY29tcC9mbnYpLgorKworYHN0cmhhc2hgIGFuZCBgc3RyaWhhc2hgIHRha2UgMC10ZXJtaW5hdGVkIHN0cmluZ3MsIHdoaWxlIGBtZW1oYXNoYCBhbmQKK2BtZW1paGFzaGAgb3BlcmF0ZSBvbiBhcmJpdHJhcnktbGVuZ3RoIG1lbW9yeS4KKysKK2BzdHJpaGFzaGAgYW5kIGBtZW1paGFzaGAgYXJlIGNhc2UgaW5zZW5zaXRpdmUgdmVyc2lvbnMuCisKK2B1bnNpZ25lZCBpbnQgc2hhMWhhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSlgOjoKKworCUNvbnZlcnRzIGEgY3J5cHRvZ3JhcGhpYyBoYXNoIChlLmcuIFNIQS0xKSBpbnRvIGFuIGludC1zaXplZCBoYXNoIGNvZGUKKwlmb3IgdXNlIGluIGhhc2ggdGFibGVzLiBDcnlwdG9ncmFwaGljIGhhc2hlcyBhcmUgc3VwcG9zZWQgdG8gaGF2ZQorCXVuaWZvcm0gZGlzdHJpYnV0aW9uLCBzbyBpbiBjb250cmFzdCB0byBgbWVtaGFzaCgpYCwgdGhpcyBqdXN0IGNvcGllcworCXRoZSBmaXJzdCBgc2l6ZW9mKGludClgIGJ5dGVzIHdpdGhvdXQgc2h1ZmZsaW5nIGFueSBiaXRzLiBOb3RlIHRoYXQKKwl0aGUgcmVzdWx0cyB3aWxsIGJlIGRpZmZlcmVudCBvbiBiaWctZW5kaWFuIGFuZCBsaXR0bGUtZW5kaWFuCisJcGxhdGZvcm1zLCBzbyB0aGV5IHNob3VsZCBub3QgYmUgc3RvcmVkIG9yIHRyYW5zZmVycmVkIG92ZXIgdGhlIG5ldC4KKworYHZvaWQgaGFzaG1hcF9pbml0KHN0cnVjdCBoYXNobWFwICptYXAsIGhhc2htYXBfY21wX2ZuIGVxdWFsc19mdW5jdGlvbiwgc2l6ZV90IGluaXRpYWxfc2l6ZSlgOjoKKworCUluaXRpYWxpemVzIGEgaGFzaG1hcCBzdHJ1Y3R1cmUuCisrCitgbWFwYCBpcyB0aGUgaGFzaG1hcCB0byBpbml0aWFsaXplLgorKworVGhlIGBlcXVhbHNfZnVuY3Rpb25gIGNhbiBiZSBzcGVjaWZpZWQgdG8gY29tcGFyZSB0d28gZW50cmllcyBmb3IgZXF1YWxpdHkuCitJZiBOVUxMLCBlbnRyaWVzIGFyZSBjb25zaWRlcmVkIGVxdWFsIGlmIHRoZWlyIGhhc2ggY29kZXMgYXJlIGVxdWFsLgorKworSWYgdGhlIHRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGlzIGtub3duIGluIGFkdmFuY2UsIHRoZSBgaW5pdGlhbF9zaXplYAorcGFyYW1ldGVyIG1heSBiZSB1c2VkIHRvIHByZWFsbG9jYXRlIGEgc3VmZmljaWVudGx5IGxhcmdlIHRhYmxlIGFuZCB0aHVzCitwcmV2ZW50IGV4cGVuc2l2ZSByZXNpemluZy4gSWYgMCwgdGhlIHRhYmxlIGlzIGR5bmFtaWNhbGx5IHJlc2l6ZWQuCisKK2B2b2lkIGhhc2htYXBfZnJlZShzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBpbnQgZnJlZV9lbnRyaWVzKWA6OgorCisJRnJlZXMgYSBoYXNobWFwIHN0cnVjdHVyZSBhbmQgYWxsb2NhdGVkIG1lbW9yeS4KKysKK2BtYXBgIGlzIHRoZSBoYXNobWFwIHRvIGZyZWUuCisrCitJZiBgZnJlZV9lbnRyaWVzYCBpcyB0cnVlLCBlYWNoIGhhc2htYXBfZW50cnkgaW4gdGhlIG1hcCBpcyBmcmVlZCBhcyB3ZWxsCisodXNpbmcgc3RkbGliJ3MgZnJlZSgpKS4KKworYHZvaWQgaGFzaG1hcF9lbnRyeV9pbml0KHZvaWQgKmVudHJ5LCB1bnNpZ25lZCBpbnQgaGFzaClgOjoKKworCUluaXRpYWxpemVzIGEgaGFzaG1hcF9lbnRyeSBzdHJ1Y3R1cmUuCisrCitgZW50cnlgIHBvaW50cyB0byB0aGUgZW50cnkgdG8gaW5pdGlhbGl6ZS4KKysKK2BoYXNoYCBpcyB0aGUgaGFzaCBjb2RlIG9mIHRoZSBlbnRyeS4KKworYHZvaWQgKmhhc2htYXBfZ2V0KGNvbnN0IHN0cnVjdCBoYXNobWFwICptYXAsIGNvbnN0IHZvaWQgKmtleSwgY29uc3Qgdm9pZCAqa2V5ZGF0YSlgOjoKKworCVJldHVybnMgdGhlIGhhc2htYXAgZW50cnkgZm9yIHRoZSBzcGVjaWZpZWQga2V5LCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKysKK2BtYXBgIGlzIHRoZSBoYXNobWFwIHN0cnVjdHVyZS4KKysKK2BrZXlgIGlzIGEgaGFzaG1hcF9lbnRyeSBzdHJ1Y3R1cmUgKG9yIHVzZXIgZGF0YSBzdHJ1Y3R1cmUgdGhhdCBzdGFydHMgd2l0aAoraGFzaG1hcF9lbnRyeSkgdGhhdCBoYXMgYXQgbGVhc3QgYmVlbiBpbml0aWFsaXplZCB3aXRoIHRoZSBwcm9wZXIgaGFzaCBjb2RlCisodmlhIGBoYXNobWFwX2VudHJ5X2luaXRgKS4KKysKK0lmIGFuIGVudHJ5IHdpdGggbWF0Y2hpbmcgaGFzaCBjb2RlIGlzIGZvdW5kLCBga2V5YCBhbmQgYGtleWRhdGFgIGFyZSBwYXNzZWQKK3RvIGBoYXNobWFwX2NtcF9mbmAgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGVudHJ5IG1hdGNoZXMgdGhlIGtleS4KKworYHZvaWQgKmhhc2htYXBfZ2V0X2Zyb21faGFzaChjb25zdCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLCB1bnNpZ25lZCBpbnQgaGFzaCwgY29uc3Qgdm9pZCAqa2V5ZGF0YSlgOjoKKworCVJldHVybnMgdGhlIGhhc2htYXAgZW50cnkgZm9yIHRoZSBzcGVjaWZpZWQgaGFzaCBjb2RlIGFuZCBrZXkgZGF0YSwKKwlvciBOVUxMIGlmIG5vdCBmb3VuZC4KKysKK2BtYXBgIGlzIHRoZSBoYXNobWFwIHN0cnVjdHVyZS4KKysKK2BoYXNoYCBpcyB0aGUgaGFzaCBjb2RlIG9mIHRoZSBlbnRyeSB0byBsb29rIHVwLgorKworSWYgYW4gZW50cnkgd2l0aCBtYXRjaGluZyBoYXNoIGNvZGUgaXMgZm91bmQsIGBrZXlkYXRhYCBpcyBwYXNzZWQgdG8KK2BoYXNobWFwX2NtcF9mbmAgdG8gZGVjaWRlIHdoZXRoZXIgdGhlIGVudHJ5IG1hdGNoZXMgdGhlIGtleS4gVGhlCitgZW50cnlfb3Jfa2V5YCBwYXJhbWV0ZXIgcG9pbnRzIHRvIGEgYm9ndXMgaGFzaG1hcF9lbnRyeSBzdHJ1Y3R1cmUgdGhhdAorc2hvdWxkIG5vdCBiZSB1c2VkIGluIHRoZSBjb21wYXJpc29uLgorCitgdm9pZCAqaGFzaG1hcF9nZXRfbmV4dChjb25zdCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBjb25zdCB2b2lkICplbnRyeSlgOjoKKworCVJldHVybnMgdGhlIG5leHQgZXF1YWwgaGFzaG1hcCBlbnRyeSwgb3IgTlVMTCBpZiBub3QgZm91bmQuIFRoaXMgY2FuIGJlCisJdXNlZCB0byBpdGVyYXRlIG92ZXIgZHVwbGljYXRlIGVudHJpZXMgKHNlZSBgaGFzaG1hcF9hZGRgKS4KKysKK2BtYXBgIGlzIHRoZSBoYXNobWFwIHN0cnVjdHVyZS4KKysKK2BlbnRyeWAgaXMgdGhlIGhhc2htYXBfZW50cnkgdG8gc3RhcnQgdGhlIHNlYXJjaCBmcm9tLCBvYnRhaW5lZCB2aWEgYSBwcmV2aW91cworY2FsbCB0byBgaGFzaG1hcF9nZXRgIG9yIGBoYXNobWFwX2dldF9uZXh0YC4KKworYHZvaWQgaGFzaG1hcF9hZGQoc3RydWN0IGhhc2htYXAgKm1hcCwgdm9pZCAqZW50cnkpYDo6CisKKwlBZGRzIGEgaGFzaG1hcCBlbnRyeS4gVGhpcyBhbGxvd3MgdG8gYWRkIGR1cGxpY2F0ZSBlbnRyaWVzIChpLmUuCisJc2VwYXJhdGUgdmFsdWVzIHdpdGggdGhlIHNhbWUga2V5IGFjY29yZGluZyB0byBoYXNobWFwX2NtcF9mbikuCisrCitgbWFwYCBpcyB0aGUgaGFzaG1hcCBzdHJ1Y3R1cmUuCisrCitgZW50cnlgIGlzIHRoZSBlbnRyeSB0byBhZGQuCisKK2B2b2lkICpoYXNobWFwX3B1dChzdHJ1Y3QgaGFzaG1hcCAqbWFwLCB2b2lkICplbnRyeSlgOjoKKworCUFkZHMgb3IgcmVwbGFjZXMgYSBoYXNobWFwIGVudHJ5LiBJZiB0aGUgaGFzaG1hcCBjb250YWlucyBkdXBsaWNhdGUKKwllbnRyaWVzIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQgZW50cnksIG9ubHkgb25lIG9mIHRoZW0gd2lsbCBiZSByZXBsYWNlZC4KKysKK2BtYXBgIGlzIHRoZSBoYXNobWFwIHN0cnVjdHVyZS4KKysKK2BlbnRyeWAgaXMgdGhlIGVudHJ5IHRvIGFkZCBvciByZXBsYWNlLgorKworUmV0dXJucyB0aGUgcmVwbGFjZWQgZW50cnksIG9yIE5VTEwgaWYgbm90IGZvdW5kIChpLmUuIHRoZSBlbnRyeSB3YXMgYWRkZWQpLgorCitgdm9pZCAqaGFzaG1hcF9yZW1vdmUoc3RydWN0IGhhc2htYXAgKm1hcCwgY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICprZXlkYXRhKWA6OgorCisJUmVtb3ZlcyBhIGhhc2htYXAgZW50cnkgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBrZXkuIElmIHRoZSBoYXNobWFwCisJY29udGFpbnMgZHVwbGljYXRlIGVudHJpZXMgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCBrZXksIG9ubHkgb25lIG9mCisJdGhlbSB3aWxsIGJlIHJlbW92ZWQuCisrCitgbWFwYCBpcyB0aGUgaGFzaG1hcCBzdHJ1Y3R1cmUuCisrCitga2V5YCBpcyBhIGhhc2htYXBfZW50cnkgc3RydWN0dXJlIChvciB1c2VyIGRhdGEgc3RydWN0dXJlIHRoYXQgc3RhcnRzIHdpdGgKK2hhc2htYXBfZW50cnkpIHRoYXQgaGFzIGF0IGxlYXN0IGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCB0aGUgcHJvcGVyIGhhc2ggY29kZQorKHZpYSBgaGFzaG1hcF9lbnRyeV9pbml0YCkuCisrCitJZiBhbiBlbnRyeSB3aXRoIG1hdGNoaW5nIGhhc2ggY29kZSBpcyBmb3VuZCwgYGtleWAgYW5kIGBrZXlkYXRhYCBhcmUKK3Bhc3NlZCB0byBgaGFzaG1hcF9jbXBfZm5gIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBlbnRyeSBtYXRjaGVzIHRoZSBrZXkuCisrCitSZXR1cm5zIHRoZSByZW1vdmVkIGVudHJ5LCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKworYHZvaWQgaGFzaG1hcF9pdGVyX2luaXQoc3RydWN0IGhhc2htYXAgKm1hcCwgc3RydWN0IGhhc2htYXBfaXRlciAqaXRlcilgOjoKK2B2b2lkICpoYXNobWFwX2l0ZXJfbmV4dChzdHJ1Y3QgaGFzaG1hcF9pdGVyICppdGVyKWA6OgorYHZvaWQgKmhhc2htYXBfaXRlcl9maXJzdChzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBzdHJ1Y3QgaGFzaG1hcF9pdGVyICppdGVyKWA6OgorCisJVXNlZCB0byBpdGVyYXRlIG92ZXIgYWxsIGVudHJpZXMgb2YgYSBoYXNobWFwLgorKworYGhhc2htYXBfaXRlcl9pbml0YCBpbml0aWFsaXplcyBhIGBoYXNobWFwX2l0ZXJgIHN0cnVjdHVyZS4KKysKK2BoYXNobWFwX2l0ZXJfbmV4dGAgcmV0dXJucyB0aGUgbmV4dCBoYXNobWFwX2VudHJ5LCBvciBOVUxMIGlmIHRoZXJlIGFyZSBubworbW9yZSBlbnRyaWVzLgorKworYGhhc2htYXBfaXRlcl9maXJzdGAgaXMgYSBjb21iaW5hdGlvbiBvZiBib3RoIChpLmUuIGluaXRpYWxpemVzIHRoZSBpdGVyYXRvcgorYW5kIHJldHVybnMgdGhlIGZpcnN0IGVudHJ5LCBpZiBhbnkpLgorCitgY29uc3QgY2hhciAqc3RyaW50ZXJuKGNvbnN0IGNoYXIgKnN0cmluZylgOjoKK2Bjb25zdCB2b2lkICptZW1pbnRlcm4oY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbilgOjoKKworCVJldHVybnMgdGhlIHVuaXF1ZSwgaW50ZXJuZWQgdmVyc2lvbiBvZiB0aGUgc3BlY2lmaWVkIHN0cmluZyBvciBkYXRhLAorCXNpbWlsYXIgdG8gdGhlIGBTdHJpbmcuaW50ZXJuYCBBUEkgaW4gSmF2YSBhbmQgLk5FVCwgcmVzcGVjdGl2ZWx5LgorCUludGVybmVkIHN0cmluZ3MgcmVtYWluIHZhbGlkIGZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIHRoZSBwcm9jZXNzLgorKworQ2FuIGJlIHVzZWQgYXMgYFt4XXN0cmR1cCgpYCBvciBgeG1lbWR1cHpgIHJlcGxhY2VtZW50LCBleGNlcHQgdGhhdCBpbnRlcm5lZAorc3RyaW5ncyAvIGRhdGEgbXVzdCBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQuCisrCitJbnRlcm5lZCBzdHJpbmdzIGFyZSBiZXN0IHVzZWQgZm9yIHNob3J0IHN0cmluZ3Mgd2l0aCBoaWdoIHByb2JhYmlsaXR5IG9mCitkdXBsaWNhdGVzLgorKworVXNlcyBhIGhhc2htYXAgdG8gc3RvcmUgdGhlIHBvb2wgb2YgaW50ZXJuZWQgc3RyaW5ncy4KKworVXNhZ2UgZXhhbXBsZQorLS0tLS0tLS0tLS0tLQorCitIZXJlJ3MgYSBzaW1wbGUgdXNhZ2UgZXhhbXBsZSB0aGF0IG1hcHMgbG9uZyBrZXlzIHRvIGRvdWJsZSB2YWx1ZXMuCistLS0tLS0tLS0tLS0KK3N0cnVjdCBoYXNobWFwIG1hcDsKKworc3RydWN0IGxvbmcyZG91YmxlIHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7IC8qIG11c3QgYmUgdGhlIGZpcnN0IG1lbWJlciEgKi8KKwlsb25nIGtleTsKKwlkb3VibGUgdmFsdWU7Cit9OworCitzdGF0aWMgaW50IGxvbmcyZG91YmxlX2NtcChjb25zdCBzdHJ1Y3QgbG9uZzJkb3VibGUgKmUxLCBjb25zdCBzdHJ1Y3QgbG9uZzJkb3VibGUgKmUyLCBjb25zdCB2b2lkICp1bnVzZWQpCit7CisJcmV0dXJuICEoZTEtPmtleSA9PSBlMi0+a2V5KTsKK30KKwordm9pZCBsb25nMmRvdWJsZV9pbml0KHZvaWQpCit7CisJaGFzaG1hcF9pbml0KCZtYXAsIChoYXNobWFwX2NtcF9mbikgbG9uZzJkb3VibGVfY21wLCAwKTsKK30KKwordm9pZCBsb25nMmRvdWJsZV9mcmVlKHZvaWQpCit7CisJaGFzaG1hcF9mcmVlKCZtYXAsIDEpOworfQorCitzdGF0aWMgc3RydWN0IGxvbmcyZG91YmxlICpmaW5kX2VudHJ5KGxvbmcga2V5KQoreworCXN0cnVjdCBsb25nMmRvdWJsZSBrOworCWhhc2htYXBfZW50cnlfaW5pdCgmaywgbWVtaGFzaCgma2V5LCBzaXplb2YobG9uZykpKTsKKwlrLmtleSA9IGtleTsKKwlyZXR1cm4gaGFzaG1hcF9nZXQoJm1hcCwgJmssIE5VTEwpOworfQorCitkb3VibGUgZ2V0X3ZhbHVlKGxvbmcga2V5KQoreworCXN0cnVjdCBsb25nMmRvdWJsZSAqZSA9IGZpbmRfZW50cnkoa2V5KTsKKwlyZXR1cm4gZSA/IGUtPnZhbHVlIDogMDsKK30KKwordm9pZCBzZXRfdmFsdWUobG9uZyBrZXksIGRvdWJsZSB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbG9uZzJkb3VibGUgKmUgPSBmaW5kX2VudHJ5KGtleSk7CisJaWYgKCFlKSB7CisJCWUgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsb25nMmRvdWJsZSkpOworCQloYXNobWFwX2VudHJ5X2luaXQoZSwgbWVtaGFzaCgma2V5LCBzaXplb2YobG9uZykpKTsKKwkJZS0+a2V5ID0ga2V5OworCQloYXNobWFwX2FkZCgmbWFwLCBlKTsKKwl9CisJZS0+dmFsdWUgPSB2YWx1ZTsKK30KKy0tLS0tLS0tLS0tLQorCitVc2luZyB2YXJpYWJsZS1zaXplZCBrZXlzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgaGFzaG1hcF9lbnRyeV9nZXRgIGFuZCBgaGFzaG1hcF9lbnRyeV9yZW1vdmVgIGZ1bmN0aW9ucyBleHBlY3QgYW4gb3JkaW5hcnkKK2BoYXNobWFwX2VudHJ5YCBzdHJ1Y3R1cmUgYXMga2V5IHRvIGZpbmQgdGhlIGNvcnJlY3QgZW50cnkuIElmIHRoZSBrZXkgZGF0YSBpcwordmFyaWFibGUtc2l6ZWQgKGUuZy4gYSBGTEVYX0FSUkFZIHN0cmluZykgb3IgcXVpdGUgbGFyZ2UsIGl0IGlzIHVuZGVzaXJhYmxlCit0byBjcmVhdGUgYSBmdWxsLWZsZWRnZWQgZW50cnkgc3RydWN0dXJlIG9uIHRoZSBoZWFwIGFuZCBjb3B5IGFsbCB0aGUga2V5IGRhdGEKK2ludG8gdGhlIHN0cnVjdHVyZS4KKworSW4gdGhpcyBjYXNlLCB0aGUgYGtleWRhdGFgIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBwYXNzCit2YXJpYWJsZS1zaXplZCBrZXkgZGF0YSBkaXJlY3RseSB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiwgYW5kIHRoZSBga2V5YAorcGFyYW1ldGVyIGNhbiBiZSBhIHN0cmlwcGVkLWRvd24sIGZpeGVkIHNpemUgZW50cnkgc3RydWN0dXJlIGFsbG9jYXRlZCBvbiB0aGUKK3N0YWNrLgorCitTZWUgdGVzdC1oYXNobWFwLmMgZm9yIGFuIGV4YW1wbGUgdXNpbmcgYXJiaXRyYXJ5LWxlbmd0aCBzdHJpbmdzIGFzIGtleXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGlzdG9yeS1ncmFwaC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaGlzdG9yeS1ncmFwaC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgxNDJiNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1oaXN0b3J5LWdyYXBoLnR4dApAQCAtMCwwICsxLDE3NCBAQAoraGlzdG9yeSBncmFwaCBBUEkKKz09PT09PT09PT09PT09PT09CisKK1RoZSBncmFwaCBBUEkgaXMgdXNlZCB0byBkcmF3IGEgdGV4dC1iYXNlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tbWl0CitoaXN0b3J5LiAgVGhlIEFQSSBnZW5lcmF0ZXMgdGhlIGdyYXBoIGluIGEgbGluZS1ieS1saW5lIGZhc2hpb24uCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKK0NvcmUgZnVuY3Rpb25zOgorCisqIGBncmFwaF9pbml0KClgIGNyZWF0ZXMgYSBuZXcgYHN0cnVjdCBnaXRfZ3JhcGhgCisKKyogYGdyYXBoX3VwZGF0ZSgpYCBtb3ZlcyB0aGUgZ3JhcGggdG8gYSBuZXcgY29tbWl0LgorCisqIGBncmFwaF9uZXh0X2xpbmUoKWAgb3V0cHV0cyB0aGUgbmV4dCBsaW5lIG9mIHRoZSBncmFwaCBpbnRvIGEgc3RyYnVmLiAgSXQKKyAgZG9lcyBub3QgYWRkIGEgdGVybWluYXRpbmcgbmV3bGluZS4KKworKiBgZ3JhcGhfcGFkZGluZ19saW5lKClgIG91dHB1dHMgYSBsaW5lIG9mIHZlcnRpY2FsIHBhZGRpbmcgaW4gdGhlIGdyYXBoLiAgSXQKKyAgaXMgc2ltaWxhciB0byBgZ3JhcGhfbmV4dF9saW5lKClgLCBidXQgaXMgZ3VhcmFudGVlZCB0byBuZXZlciBwcmludCB0aGUgbGluZQorICBjb250YWluaW5nIHRoZSBjdXJyZW50IGNvbW1pdC4gIFdoZXJlIGBncmFwaF9uZXh0X2xpbmUoKWAgd291bGQgcHJpbnQgdGhlCisgIGNvbW1pdCBsaW5lIG5leHQsIGBncmFwaF9wYWRkaW5nX2xpbmUoKWAgcHJpbnRzIGEgbGluZSB0aGF0IHNpbXBseSBleHRlbmRzCisgIGFsbCBicmFuY2ggbGluZXMgZG93bndhcmRzIG9uZSByb3csIGxlYXZpbmcgdGhlaXIgcG9zaXRpb25zIHVuY2hhbmdlZC4KKworKiBgZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKClgIGRldGVybWluZXMgaWYgdGhlIGdyYXBoIGhhcyBvdXRwdXQgYWxsIGxpbmVzCisgIG5lY2Vzc2FyeSBmb3IgdGhlIGN1cnJlbnQgY29tbWl0LiAgSWYgYGdyYXBoX3VwZGF0ZSgpYCBpcyBjYWxsZWQgYmVmb3JlIGFsbAorICBsaW5lcyBmb3IgdGhlIGN1cnJlbnQgY29tbWl0IGhhdmUgYmVlbiBwcmludGVkLCB0aGUgbmV4dCBjYWxsIHRvCisgIGBncmFwaF9uZXh0X2xpbmUoKWAgd2lsbCBvdXRwdXQgYW4gZWxsaXBzaXMsIHRvIGluZGljYXRlIHRoYXQgYSBwb3J0aW9uIG9mCisgIHRoZSBncmFwaCB3YXMgb21pdHRlZC4KKworVGhlIGZvbGxvd2luZyB1dGlsaXR5IGZ1bmN0aW9ucyBhcmUgd3JhcHBlcnMgYXJvdW5kIGBncmFwaF9uZXh0X2xpbmUoKWAgYW5kCitgZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKClgLiAgVGhleSBhbHdheXMgcHJpbnQgdGhlIG91dHB1dCB0byBzdGRvdXQuCitUaGV5IGNhbiBhbGwgYmUgY2FsbGVkIHdpdGggYSBOVUxMIGdyYXBoIGFyZ3VtZW50LCBpbiB3aGljaCBjYXNlIG5vIGdyYXBoCitvdXRwdXQgd2lsbCBiZSBwcmludGVkLgorCisqIGBncmFwaF9zaG93X2NvbW1pdCgpYCBjYWxscyBgZ3JhcGhfbmV4dF9saW5lKClgIGFuZAorICBgZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKClgIHVudGlsIG9uZSBvZiB0aGVtIHJldHVybiBub24temVyby4gIFRoaXMgcHJpbnRzCisgIGFsbCBncmFwaCBsaW5lcyB1cCB0bywgYW5kIGluY2x1ZGluZywgdGhlIGxpbmUgY29udGFpbmluZyB0aGlzIGNvbW1pdC4KKyAgT3V0cHV0IGlzIHByaW50ZWQgdG8gc3Rkb3V0LiAgVGhlIGxhc3QgbGluZSBwcmludGVkIGRvZXMgbm90IGNvbnRhaW4gYQorICB0ZXJtaW5hdGluZyBuZXdsaW5lLgorCisqIGBncmFwaF9zaG93X29uZWxpbmUoKWAgY2FsbHMgYGdyYXBoX25leHRfbGluZSgpYCBhbmQgcHJpbnRzIHRoZSByZXN1bHQgdG8KKyAgc3Rkb3V0LiAgVGhlIGxpbmUgcHJpbnRlZCBkb2VzIG5vdCBjb250YWluIGEgdGVybWluYXRpbmcgbmV3bGluZS4KKworKiBgZ3JhcGhfc2hvd19wYWRkaW5nKClgIGNhbGxzIGBncmFwaF9wYWRkaW5nX2xpbmUoKWAgYW5kIHByaW50cyB0aGUgcmVzdWx0IHRvCisgIHN0ZG91dC4gIFRoZSBsaW5lIHByaW50ZWQgZG9lcyBub3QgY29udGFpbiBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuCisKKyogYGdyYXBoX3Nob3dfcmVtYWluZGVyKClgIGNhbGxzIGBncmFwaF9uZXh0X2xpbmUoKWAgdW50aWwKKyAgYGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZCgpYCByZXR1cm5zIG5vbi16ZXJvLiAgT3V0cHV0IGlzIHByaW50ZWQgdG8gc3Rkb3V0LgorICBUaGUgbGFzdCBsaW5lIHByaW50ZWQgZG9lcyBub3QgY29udGFpbiBhIHRlcm1pbmF0aW5nIG5ld2xpbmUuICBSZXR1cm5zIDEgaWYKKyAgb3V0cHV0IHdhcyBwcmludGVkLCBhbmQgMCBpZiBubyBvdXRwdXQgd2FzIG5lY2Vzc2FyeS4KKworKiBgZ3JhcGhfc2hvd19zdHJidWYoKWAgcHJpbnRzIHRoZSBzcGVjaWZpZWQgc3RyYnVmIHRvIHN0ZG91dCwgcHJlZml4aW5nIGFsbAorICBsaW5lcyBidXQgdGhlIGZpcnN0IHdpdGggYSBncmFwaCBsaW5lLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKyAgZW5zdXJpbmcgZ3JhcGggb3V0cHV0IGZvciB0aGUgZmlyc3QgbGluZSBoYXMgYWxyZWFkeSBiZWVuIHByaW50ZWQgdG8gc3Rkb3V0LgorICAoVGhpcyBjYW4gYmUgZG9uZSB3aXRoIGBncmFwaF9zaG93X2NvbW1pdCgpYCBvciBgZ3JhcGhfc2hvd19vbmVsaW5lKClgLikgIElmCisgIGEgTlVMTCBncmFwaCBpcyBzdXBwbGllZCwgdGhlIHN0cmJ1ZiBpcyBwcmludGVkIGFzLWlzLgorCisqIGBncmFwaF9zaG93X2NvbW1pdF9tc2coKWAgaXMgc2ltaWxhciB0byBgZ3JhcGhfc2hvd19zdHJidWYoKWAsIGJ1dCBpdCBhbHNvCisgIHByaW50cyB0aGUgcmVtYWluZGVyIG9mIHRoZSBncmFwaCwgaWYgbW9yZSBsaW5lcyBhcmUgbmVlZGVkIGFmdGVyIHRoZSBzdHJidWYKKyAgZW5kcy4gIEl0IGlzIGJldHRlciB0aGFuIGRpcmVjdGx5IGNhbGxpbmcgYGdyYXBoX3Nob3dfc3RyYnVmKClgIGZvbGxvd2VkIGJ5CisgIGBncmFwaF9zaG93X3JlbWFpbmRlcigpYCBzaW5jZSBpdCBwcm9wZXJseSBoYW5kbGVzIGJ1ZmZlcnMgdGhhdCBkbyBub3QgZW5kIGluCisgIGEgdGVybWluYXRpbmcgbmV3bGluZS4gIFRoZSBvdXRwdXQgcHJpbnRlZCBieSBgZ3JhcGhfc2hvd19jb21taXRfbXNnKClgIHdpbGwKKyAgZW5kIGluIGEgbmV3bGluZSBpZiBhbmQgb25seSBpZiB0aGUgc3RyYnVmIGVuZHMgaW4gYSBuZXdsaW5lLgorCitEYXRhIHN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0KK2BzdHJ1Y3QgZ2l0X2dyYXBoYCBpcyBhbiBvcGFxdWUgZGF0YSB0eXBlIHVzZWQgdG8gc3RvcmUgdGhlIGN1cnJlbnQgZ3JhcGgKK3N0YXRlLgorCitDYWxsaW5nIHNlcXVlbmNlCistLS0tLS0tLS0tLS0tLS0tCisKKyogQ3JlYXRlIGEgYHN0cnVjdCBnaXRfZ3JhcGhgIGJ5IGNhbGxpbmcgYGdyYXBoX2luaXQoKWAuICBXaGVuIHVzaW5nIHRoZQorICByZXZpc2lvbiB3YWxraW5nIEFQSSwgdGhpcyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYnkgYHNldHVwX3JldmlzaW9ucygpYCBpZgorICB0aGUgJy0tZ3JhcGgnIG9wdGlvbiBpcyBzdXBwbGllZC4KKworKiBVc2UgdGhlIHJldmlzaW9uIHdhbGtpbmcgQVBJIHRvIHdhbGsgdGhyb3VnaCBhIGdyb3VwIG9mIGNvbnRpZ3VvdXMgY29tbWl0cy4KKyAgVGhlIGBnZXRfcmV2aXNpb24oKWAgZnVuY3Rpb24gYXV0b21hdGljYWxseSBjYWxscyBgZ3JhcGhfdXBkYXRlKClgIGVhY2ggdGltZQorICBpdCBpcyBpbnZva2VkLgorCisqIEZvciBlYWNoIGNvbW1pdCwgY2FsbCBgZ3JhcGhfbmV4dF9saW5lKClgIHJlcGVhdGVkbHksIHVudGlsCisgIGBncmFwaF9pc19jb21taXRfZmluaXNoZWQoKWAgcmV0dXJucyBub24temVyby4gIEVhY2ggY2FsbCBnbworICBgZ3JhcGhfbmV4dF9saW5lKClgIHdpbGwgb3V0cHV0IGEgc2luZ2xlIGxpbmUgb2YgdGhlIGdyYXBoLiAgVGhlIHJlc3VsdGluZworICBsaW5lcyB3aWxsIG5vdCBjb250YWluIGFueSBuZXdsaW5lcy4gIGBncmFwaF9uZXh0X2xpbmUoKWAgcmV0dXJucyAxIGlmIHRoZQorICByZXN1bHRpbmcgbGluZSBjb250YWlucyB0aGUgY3VycmVudCBjb21taXQsIG9yIDAgaWYgdGhpcyBpcyBtZXJlbHkgYSBsaW5lCisgIG5lZWRlZCB0byBhZGp1c3QgdGhlIGdyYXBoIGJlZm9yZSBvciBhZnRlciB0aGUgY3VycmVudCBjb21taXQuICBUaGlzIHJldHVybgorICB2YWx1ZSBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hlcmUgdG8gcHJpbnQgdGhlIGNvbW1pdCBzdW1tYXJ5IGluZm9ybWF0aW9uCisgIGFsb25nc2lkZSB0aGUgZ3JhcGggb3V0cHV0LgorCitMaW1pdGF0aW9ucworLS0tLS0tLS0tLS0KKworKiBgZ3JhcGhfdXBkYXRlKClgIG11c3QgYmUgY2FsbGVkIHdpdGggY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlci4gIEl0IHNob3VsZAorICBub3QgYmUgY2FsbGVkIG9uIGEgY29tbWl0IGlmIGl0IGhhcyBhbHJlYWR5IGJlZW4gaW52b2tlZCB3aXRoIGFuIGFuY2VzdG9yIG9mCisgIHRoYXQgY29tbWl0LCBvciB0aGUgZ3JhcGggb3V0cHV0IHdpbGwgYmUgaW5jb3JyZWN0LgorCisqIGBncmFwaF91cGRhdGUoKWAgbXVzdCBiZSBjYWxsZWQgb24gYSBjb250aWd1b3VzIGdyb3VwIG9mIGNvbW1pdHMuICBJZgorICBgZ3JhcGhfdXBkYXRlKClgIGlzIGNhbGxlZCBvbiBhIHBhcnRpY3VsYXIgY29tbWl0LCBpdCBzaG91bGQgbGF0ZXIgYmUgY2FsbGVkCisgIG9uIGFsbCBwYXJlbnRzIG9mIHRoYXQgY29tbWl0LiAgUGFyZW50cyBtdXN0IG5vdCBiZSBza2lwcGVkLCBvciB0aGUgZ3JhcGgKKyAgb3V0cHV0IHdpbGwgYXBwZWFyIGluY29ycmVjdC4KKysKK2BncmFwaF91cGRhdGUoKWAgbWF5IGJlIHVzZWQgb24gYSBwcnVuZWQgc2V0IG9mIGNvbW1pdHMgb25seSBpZiB0aGUgcGFyZW50IGxpc3QKK2hhcyBiZWVuIHJld3JpdHRlbiBzbyBhcyB0byBpbmNsdWRlIG9ubHkgYW5jZXN0b3JzIGZyb20gdGhlIHBydW5lZCBzZXQuCisKKyogVGhlIGdyYXBoIEFQSSBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCByZXZlcnNlIGNvbW1pdCBvcmRlcmluZy4gIEluCisgIG9yZGVyIHRvIGltcGxlbWVudCByZXZlcnNlIG9yZGVyaW5nLCB0aGUgZ3JhcGhpbmcgQVBJIG5lZWRzIGFuCisgIChlZmZpY2llbnQpIG1lY2hhbmlzbSB0byBmaW5kIHRoZSBjaGlsZHJlbiBvZiBhIGNvbW1pdC4KKworU2FtcGxlIHVzYWdlCistLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tCitzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CitzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCA9IGdyYXBoX2luaXQob3B0cyk7CisKK3doaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKG9wdHMpKSAhPSBOVUxMKSB7CisJZ3JhcGhfdXBkYXRlKGdyYXBoLCBjb21taXQpOworCXdoaWxlICghZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKGdyYXBoKSkKKwl7CisJCXN0cnVjdCBzdHJidWYgc2I7CisJCWludCBpc19jb21taXRfbGluZTsKKworCQlzdHJidWZfaW5pdCgmc2IsIDApOworCQlpc19jb21taXRfbGluZSA9IGdyYXBoX25leHRfbGluZShncmFwaCwgJnNiKTsKKwkJZnB1dHMoc2IuYnVmLCBzdGRvdXQpOworCisJCWlmIChpc19jb21taXRfbGluZSkKKwkJCWxvZ190cmVlX2NvbW1pdChvcHRzLCBjb21taXQpOworCQllbHNlCisJCQlwdXRjaGFyKG9wdHMtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbik7CisJfQorfQorLS0tLS0tLS0tLS0tCisKK1NhbXBsZSBvdXRwdXQKKy0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIG9mIHRoZSBvdXRwdXQgZnJvbSB0aGUgZ3JhcGggQVBJLiAgVGhpcyBvdXRwdXQgZG9lcworbm90IGluY2x1ZGUgYW55IGNvbW1pdCBzdW1tYXJ5IGluZm9ybWF0aW9uLS1jYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IKK291dHB1dHRpbmcgdGhhdCBpbmZvcm1hdGlvbiwgaWYgZGVzaXJlZC4KKworLS0tLS0tLS0tLS0tCisqCisqCisqCit8XAorKiB8Cit8IHwgKgorfCBcIFwKK3wgIFwgXAorKi0uIFwgXAorfFwgXCBcIFwKK3wgfCAqIHwgfAorfCB8IHwgfCB8ICoKK3wgfCB8IHwgfCAqCit8IHwgfCB8IHwgKgorfCB8IHwgfCB8IHxcCit8IHwgfCB8IHwgfCAqCit8ICogfCB8IHwgfCB8Cit8IHwgfCB8IHwgKiAgXAorfCB8IHwgfCB8IHxcICB8Cit8IHwgfCB8ICogfCB8IHwKK3wgfCB8IHwgKiB8IHwgfAorKiB8IHwgfCB8IHwgfCB8Cit8IHwvIC8gLyAvIC8gLworfC98IC8gLyAvIC8gLworKiB8IHwgfCB8IHwgfAorfC8gLyAvIC8gLyAvCisqIHwgfCB8IHwgfAorfCB8IHwgfCB8ICoKK3wgfCB8IHwgfC8KK3wgfCB8IHwgKgorLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaW4tY29yZS1pbmRleC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaW4tY29yZS1pbmRleC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiZGJmNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1pbi1jb3JlLWluZGV4LnR4dApAQCAtMCwwICsxLDIxIEBACitpbi1jb3JlIGluZGV4IEFQSQorPT09PT09PT09PT09PT09PT0KKworVGFsayBhYm91dCA8cmVhZC1jYWNoZS5jPiBhbmQgPGNhY2hlLXRyZWUuYz4sIHRoaW5ncyBsaWtlOgorCisqIGNhY2hlIC0+IHRoZV9pbmRleCBtYWNyb3MKKyogcmVhZF9pbmRleCgpCisqIHdyaXRlX2luZGV4KCkKKyogaWVfbWF0Y2hfc3RhdCgpIGFuZCBpZV9tb2RpZmllZCgpOyBob3cgdGhleSBhcmUgZGlmZmVyZW50IGFuZCB3aGVuIHRvCisgIHVzZSB3aGljaC4KKyogaW5kZXhfbmFtZV9wb3MoKQorKiByZW1vdmVfaW5kZXhfZW50cnlfYXQoKQorKiByZW1vdmVfZmlsZV9mcm9tX2luZGV4KCkKKyogYWRkX2ZpbGVfdG9faW5kZXgoKQorKiBhZGRfaW5kZXhfZW50cnkoKQorKiByZWZyZXNoX2luZGV4KCkKKyogZGlzY2FyZF9pbmRleCgpCisqIGNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKCkKKyogY2FjaGVfdHJlZV91cGRhdGUoKQorCisoSkMsIExpbnVzKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWluZGV4LXNrZWwudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWluZGV4LXNrZWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYThjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaW5kZXgtc2tlbC50eHQKQEAgLTAsMCArMSwxMyBAQAorR2l0IEFQSSBEb2N1bWVudHMKKz09PT09PT09PT09PT09PT09CisKK0dpdCBoYXMgZ3Jvd24gYSBzZXQgb2YgaW50ZXJuYWwgQVBJIG92ZXIgdGltZS4gIFRoaXMgY29sbGVjdGlvbgorZG9jdW1lbnRzIHRoZW0uCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIHRhYmxlIG9mIGNvbnRlbnRzIGJlZ2luCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIHRhYmxlIG9mIGNvbnRlbnRzIGVuZAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWluZGV4LnNoIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjljM2Y0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktaW5kZXguc2gKQEAgLTAsMCArMSwyOCBAQAorIyEvYmluL3NoCisKKygKKwljPS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwlza2VsPWFwaS1pbmRleC1za2VsLnR4dAorCXNlZCAtZSAnL15cL1wvIHRhYmxlIG9mIGNvbnRlbnRzIGJlZ2luL3EnICIkc2tlbCIKKwllY2hvICIkYyIKKworCWxzIGFwaS0qLnR4dCB8CisJd2hpbGUgcmVhZCBmaWxlbmFtZQorCWRvCisJCWNhc2UgIiRmaWxlbmFtZSIgaW4KKwkJYXBpLWluZGV4LXNrZWwudHh0IHwgYXBpLWluZGV4LnR4dCkgY29udGludWUgOzsKKwkJZXNhYworCQl0aXRsZT0kKHNlZCAtZSAxcSAiJGZpbGVuYW1lIikKKwkJaHRtbD0ke2ZpbGVuYW1lJS50eHR9Lmh0bWwKKwkJZWNobyAiKiBsaW5rOiRodG1sWyR0aXRsZV0iCisJZG9uZQorCWVjaG8gIiRjIgorCXNlZCAtbiAtZSAnL15cL1wvIHRhYmxlIG9mIGNvbnRlbnRzIGVuZC8sJHAnICIkc2tlbCIKKykgPmFwaS1pbmRleC50eHQrCisKK2lmIHRlc3QgLWYgYXBpLWluZGV4LnR4dCAmJiBjbXAgYXBpLWluZGV4LnR4dCBhcGktaW5kZXgudHh0KyA+L2Rldi9udWxsCit0aGVuCisJcm0gLWYgYXBpLWluZGV4LnR4dCsKK2Vsc2UKKwltdiBhcGktaW5kZXgudHh0KyBhcGktaW5kZXgudHh0CitmaQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW1lcmdlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1tZXJnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRjMWJlZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1tZXJnZS50eHQKQEAgLTAsMCArMSwxMDQgQEAKK21lcmdlIEFQSQorPT09PT09PT09CisKK1RoZSBtZXJnZSBBUEkgaGVscHMgYSBwcm9ncmFtIHRvIHJlY29uY2lsZSB0d28gY29tcGV0aW5nIHNldHMgb2YKK2ltcHJvdmVtZW50cyB0byBzb21lIGZpbGVzIChlLmcuLCB1bnJlZ2lzdGVyZWQgY2hhbmdlcyBmcm9tIHRoZSB3b3JrCit0cmVlIHZlcnN1cyBjaGFuZ2VzIGludm9sdmVkIGluIHN3aXRjaGluZyB0byBhIG5ldyBicmFuY2gpLCByZXBvcnRpbmcKK2NvbmZsaWN0cyBpZiBmb3VuZC4gIFRoZSBsaWJyYXJ5IGNhbGxlZCB0aHJvdWdoIHRoaXMgQVBJIGlzCityZXNwb25zaWJsZSBmb3IgYSBmZXcgdGhpbmdzLgorCisgKiBkZXRlcm1pbmluZyB3aGljaCB0cmVlcyB0byBtZXJnZSAocmVjdXJzaXZlIGFuY2VzdG9yIGNvbnNvbGlkYXRpb24pOworCisgKiBsaW5pbmcgdXAgY29ycmVzcG9uZGluZyBmaWxlcyBpbiB0aGUgdHJlZXMgdG8gYmUgbWVyZ2VkIChyZW5hbWUKKyAgIGRldGVjdGlvbiwgc3VidHJlZSBzaGlmdGluZyksIHJlcG9ydGluZyBlZGdlIGNhc2VzIGxpa2UgYWRkL2FkZAorICAgYW5kIHJlbmFtZS9yZW5hbWUgY29uZmxpY3RzIHRvIHRoZSB1c2VyOworCisgKiBwZXJmb3JtaW5nIGEgdGhyZWUtd2F5IG1lcmdlIG9mIGNvcnJlc3BvbmRpbmcgZmlsZXMsIHRha2luZworICAgcGF0aC1zcGVjaWZpYyBtZXJnZSBkcml2ZXJzIChzcGVjaWZpZWQgaW4gYC5naXRhdHRyaWJ1dGVzYCkKKyAgIGludG8gYWNjb3VudC4KKworRGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworKiBgbW1idWZmZXJfdGAsIGBtbWZpbGVfdGAKKworVGhlc2Ugc3RvcmUgZGF0YSB1c2FibGUgZm9yIHVzZSBieSB0aGUgeGRpZmYgYmFja2VuZCwgZm9yIHdyaXRpbmcgYW5kCitmb3IgcmVhZGluZywgcmVzcGVjdGl2ZWx5LiAgU2VlIGB4ZGlmZi94ZGlmZi5oYCBmb3IgdGhlIGRlZmluaXRpb25zCithbmQgYGRpZmYuY2AgZm9yIGV4YW1wbGVzLgorCisqIGBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9uc2AKKworVGhpcyBkZXNjcmliZXMgdGhlIHNldCBvZiBvcHRpb25zIHRoZSBjYWxsaW5nIHByb2dyYW0gd2FudHMgdG8gYWZmZWN0Cit0aGUgb3BlcmF0aW9uIG9mIGEgbG93LWxldmVsIChzaW5nbGUgZmlsZSkgbWVyZ2UuICBTb21lIG9wdGlvbnM6CisKK2B2aXJ0dWFsX2FuY2VzdG9yYDo6CisJQmVoYXZlIGFzIHRob3VnaCB0aGlzIHdlcmUgcGFydCBvZiBhIG1lcmdlIGJldHdlZW4gY29tbW9uCisJYW5jZXN0b3JzIGluIGEgcmVjdXJzaXZlIG1lcmdlLgorCUlmIGEgaGVscGVyIHByb2dyYW0gaXMgc3BlY2lmaWVkIGJ5IHRoZQorCWBbbWVyZ2UgIjxkcml2ZXI+Il0gcmVjdXJzaXZlYCBjb25maWd1cmF0aW9uLCBpdCB3aWxsCisJYmUgdXNlZCAoc2VlIGxpbmtnaXQ6Z2l0YXR0cmlidXRlc1s1XSkuCisKK2B2YXJpYW50YDo6CisJUmVzb2x2ZSBsb2NhbCBjb25mbGljdHMgYXV0b21hdGljYWxseSBpbiBmYXZvcgorCW9mIG9uZSBzaWRlIG9yIHRoZSBvdGhlciAoYXMgaW4gJ2dpdCBtZXJnZS1maWxlJworCWAtLW91cnNgL2AtLXRoZWlyc2AvYC0tdW5pb25gKS4gIENhbiBiZSBgMGAsCisJYFhETF9NRVJHRV9GQVZPUl9PVVJTYCwgYFhETF9NRVJHRV9GQVZPUl9USEVJUlNgLCBvcgorCWBYRExfTUVSR0VfRkFWT1JfVU5JT05gLgorCitgcmVub3JtYWxpemVgOjoKKwlSZXNtdWRnZSBhbmQgY2xlYW4gdGhlICJiYXNlIiwgInRoZWlycyIgYW5kICJvdXJzIiBmaWxlcworCWJlZm9yZSBtZXJnaW5nLiAgVXNlIHRoaXMgd2hlbiB0aGUgbWVyZ2UgaXMgbGlrZWx5IHRvIGhhdmUKKwlvdmVybGFwcGVkIHdpdGggYSBjaGFuZ2UgaW4gc211ZGdlL2NsZWFuIG9yIGVuZC1vZi1saW5lCisJbm9ybWFsaXphdGlvbiBydWxlcy4KKworTG93LWxldmVsIChzaW5nbGUgZmlsZSkgbWVyZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BsbF9tZXJnZWA6OgorCisJUGVyZm9ybSBhIHRocmVlLXdheSBzaW5nbGUtZmlsZSBtZXJnZSBpbiBjb3JlLiAgVGhpcyBpcworCWEgdGhpbiB3cmFwcGVyIGFyb3VuZCBgeGRsX21lcmdlYCB0aGF0IHRha2VzIHRoZSBwYXRoIGFuZAorCWFueSBtZXJnZSBiYWNrZW5kIHNwZWNpZmllZCBpbiBgLmdpdGF0dHJpYnV0ZXNgIG9yCisJYC5naXQvaW5mby9hdHRyaWJ1dGVzYCBpbnRvIGFjY291bnQuICBSZXR1cm5zIDAgZm9yIGEKKwljbGVhbiBtZXJnZS4KKworQ2FsbGluZyBzZXF1ZW5jZToKKworKiBQcmVwYXJlIGEgYHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zYCB0byByZWNvcmQgb3B0aW9ucy4KKyAgSWYgeW91IGhhdmUgbm8gc3BlY2lhbCByZXF1ZXN0cywgc2tpcCB0aGlzIGFuZCBwYXNzIGBOVUxMYAorICBhcyB0aGUgYG9wdHNgIHBhcmFtZXRlciB0byB1c2UgdGhlIGRlZmF1bHQgb3B0aW9ucy4KKworKiBBbGxvY2F0ZSBhbiBtbWJ1ZmZlcl90IHZhcmlhYmxlIGZvciB0aGUgcmVzdWx0LgorCisqIEFsbG9jYXRlIGFuZCBmaWxsIHZhcmlhYmxlcyB3aXRoIHRoZSBmaWxlJ3Mgb3JpZ2luYWwgY29udGVudAorICBhbmQgdHdvIG1vZGlmaWVkIHZlcnNpb25zICh1c2luZyBgcmVhZF9tbWZpbGVgLCBmb3IgZXhhbXBsZSkuCisKKyogQ2FsbCBgbGxfbWVyZ2UoKWAuCisKKyogUmVhZCB0aGUgbWVyZ2VkIGNvbnRlbnQgZnJvbSBgcmVzdWx0X2J1Zi5wdHJgIGFuZCBgcmVzdWx0X2J1Zi5zaXplYC4KKworKiBSZWxlYXNlIGJ1ZmZlcnMgd2hlbiBmaW5pc2hlZC4gIEEgc2ltcGxlCisgIGBmcmVlKGFuY2VzdG9yLnB0cik7IGZyZWUob3Vycy5wdHIpOyBmcmVlKHRoZWlycy5wdHIpOworICBmcmVlKHJlc3VsdF9idWYucHRyKTtgIHdpbGwgZG8uCisKK0lmIHRoZSBtb2RpZmljYXRpb25zIGRvIG5vdCBtZXJnZSBjbGVhbmx5LCBgbGxfbWVyZ2VgIHdpbGwgcmV0dXJuIGEKK25vbnplcm8gdmFsdWUgYW5kIGByZXN1bHRfYnVmYCB3aWxsIGdlbmVyYWxseSBpbmNsdWRlIGEgZGVzY3JpcHRpb24gb2YKK3RoZSBjb25mbGljdCBicmFja2V0ZWQgYnkgbWFya2VycyBzdWNoIGFzIHRoZSB0cmFkaXRpb25hbCBgPDw8PDw8PGAKK2FuZCBgPj4+Pj4+PmAuCisKK1RoZSBgYW5jZXN0b3JfbGFiZWxgLCBgb3VyX2xhYmVsYCwgYW5kIGB0aGVpcl9sYWJlbGAgcGFyYW1ldGVycyBhcmUKK3VzZWQgdG8gbGFiZWwgdGhlIGRpZmZlcmVudCBzaWRlcyBvZiBhIGNvbmZsaWN0IGlmIHRoZSBtZXJnZSBkcml2ZXIKK3N1cHBvcnRzIHRoaXMuCisKK0V2ZXJ5dGhpbmcgZWxzZQorLS0tLS0tLS0tLS0tLS0tCisKK1RhbGsgYWJvdXQgPG1lcmdlLXJlY3Vyc2l2ZS5oPiBhbmQgbWVyZ2VfZmlsZSgpOgorCisgLSBtZXJnZV90cmVlcygpIHRvIG1lcmdlIHdpdGggcmVuYW1lIGRldGVjdGlvbgorIC0gbWVyZ2VfcmVjdXJzaXZlKCkgZm9yIGFuY2VzdG9yIGNvbnNvbGlkYXRpb24KKyAtIHRyeV9tZXJnZV9jb21tYW5kKCkgZm9yIG90aGVyIHN0cmF0ZWdpZXMKKyAtIGNvbmZsaWN0IGZvcm1hdAorIC0gbWVyZ2Ugb3B0aW9ucworCisoRGFuaWVsLCBNaWtsb3MsIFN0ZXBoYW4sIEpDKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW9iamVjdC1hY2Nlc3MudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLW9iamVjdC1hY2Nlc3MudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYmIwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktb2JqZWN0LWFjY2Vzcy50eHQKQEAgLTAsMCArMSwxNSBAQAorb2JqZWN0IGFjY2VzcyBBUEkKKz09PT09PT09PT09PT09PT09CisKK1RhbGsgYWJvdXQgPHNoYTFfZmlsZS5jPiBhbmQgPG9iamVjdC5oPiBmYW1pbHksIHRoaW5ncyBsaWtlCisKKyogcmVhZF9zaGExX2ZpbGUoKQorKiByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSgpCisqIGhhc19zaGExX2ZpbGUoKQorKiB3cml0ZV9zaGExX2ZpbGUoKQorKiBwcmV0ZW5kX3NoYTFfZmlsZSgpCisqIGxvb2t1cF97b2JqZWN0LGNvbW1pdCx0YWcsYmxvYix0cmVlfQorKiBwYXJzZV97b2JqZWN0LGNvbW1pdCx0YWcsYmxvYix0cmVlfQorKiBVc2Ugb2Ygb2JqZWN0IGZsYWdzCisKKyhKQywgU2hhd24sIERhbmllbCwgRHNjaG8sIExpbnVzKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXBhcnNlLW9wdGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMDc1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcGFyc2Utb3B0aW9ucy50eHQKQEAgLTAsMCArMSwyOTkgQEAKK3BhcnNlLW9wdGlvbnMgQVBJCis9PT09PT09PT09PT09PT09PQorCitUaGUgcGFyc2Utb3B0aW9ucyBBUEkgaXMgdXNlZCB0byBwYXJzZSBhbmQgbWFzc2FnZSBvcHRpb25zIGluIEdpdAorYW5kIHRvIHByb3ZpZGUgYSB1c2FnZSBoZWxwIHdpdGggY29uc2lzdGVudCBsb29rLgorCitCYXNpY3MKKy0tLS0tLQorCitUaGUgYXJndW1lbnQgdmVjdG9yIGBhcmd2W11gIG1heSB1c3VhbGx5IGNvbnRhaW4gbWFuZGF0b3J5IG9yIG9wdGlvbmFsCisnbm9uLW9wdGlvbiBhcmd1bWVudHMnLCBlLmcuIGEgZmlsZW5hbWUgb3IgYSBicmFuY2gsIGFuZCAnb3B0aW9ucycuCitPcHRpb25zIGFyZSBvcHRpb25hbCBhcmd1bWVudHMgdGhhdCBzdGFydCB3aXRoIGEgZGFzaCBhbmQKK3RoYXQgYWxsb3cgdG8gY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBhIGNvbW1hbmQuCisKKyogVGhlcmUgYXJlIGJhc2ljYWxseSB0aHJlZSB0eXBlcyBvZiBvcHRpb25zOgorICAnYm9vbGVhbicgb3B0aW9ucywKKyAgb3B0aW9ucyB3aXRoIChtYW5kYXRvcnkpICdhcmd1bWVudHMnIGFuZAorICBvcHRpb25zIHdpdGggJ29wdGlvbmFsIGFyZ3VtZW50cycKKyAgKGkuZS4gYSBib29sZWFuIG9wdGlvbiB0aGF0IGNhbiBiZSBhZGp1c3RlZCkuCisKKyogVGhlcmUgYXJlIGJhc2ljYWxseSB0d28gZm9ybXMgb2Ygb3B0aW9uczoKKyAgJ1Nob3J0IG9wdGlvbnMnIGNvbnNpc3Qgb2Ygb25lIGRhc2ggKGAtYCkgYW5kIG9uZSBhbHBoYW51bWVyaWMKKyAgY2hhcmFjdGVyLgorICAnTG9uZyBvcHRpb25zJyBiZWdpbiB3aXRoIHR3byBkYXNoZXMgKGAtLWApIGFuZCBzb21lCisgIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLgorCisqIE9wdGlvbnMgYXJlIGNhc2Utc2Vuc2l0aXZlLgorICBQbGVhc2UgZGVmaW5lICdsb3dlci1jYXNlIGxvbmcgb3B0aW9ucycgb25seS4KKworVGhlIHBhcnNlLW9wdGlvbnMgQVBJIGFsbG93czoKKworKiAnc3R1Y2snIGFuZCAnc2VwYXJhdGUgZm9ybScgb2Ygb3B0aW9ucyB3aXRoIGFyZ3VtZW50cy4KKyAgYC1vQXJnYCBpcyBzdHVjaywgYC1vIEFyZ2AgaXMgc2VwYXJhdGUgZm9ybS4KKyAgYC0tb3B0aW9uPUFyZ2AgaXMgc3R1Y2ssIGAtLW9wdGlvbiBBcmdgIGlzIHNlcGFyYXRlIGZvcm0uCisKKyogTG9uZyBvcHRpb25zIG1heSBiZSAnYWJicmV2aWF0ZWQnLCBhcyBsb25nIGFzIHRoZSBhYmJyZXZpYXRpb24KKyAgaXMgdW5hbWJpZ3VvdXMuCisKKyogU2hvcnQgb3B0aW9ucyBtYXkgYmUgYnVuZGxlZCwgZS5nLiBgLWEgLWJgIGNhbiBiZSBzcGVjaWZpZWQgYXMgYC1hYmAuCisKKyogQm9vbGVhbiBsb25nIG9wdGlvbnMgY2FuIGJlICduZWdhdGVkJyAob3IgJ3Vuc2V0JykgYnkgcHJlcGVuZGluZworICBgbm8tYCwgZS5nLiBgLS1uby1hYmJyZXZgIGluc3RlYWQgb2YgYC0tYWJicmV2YC4gQ29udmVyc2VseSwKKyAgb3B0aW9ucyB0aGF0IGJlZ2luIHdpdGggYG5vLWAgY2FuIGJlICduZWdhdGVkJyBieSByZW1vdmluZyBpdC4KKyAgT3RoZXIgbG9uZyBvcHRpb25zIGNhbiBiZSB1bnNldCAoZS5nLiwgc2V0IHN0cmluZyB0byBOVUxMLCBzZXQKKyAgaW50ZWdlciB0byAwKSBieSBwcmVwZW5kaW5nIGBuby1gLgorCisqIE9wdGlvbnMgYW5kIG5vbi1vcHRpb24gYXJndW1lbnRzIGNhbiBjbGVhcmx5IGJlIHNlcGFyYXRlZCB1c2luZyB0aGUgYC0tYAorICBvcHRpb24sIGUuZy4gYC1hIC1iIC0tb3B0aW9uIC0tIC0tdGhpcy1pcy1hLWZpbGVgIGluZGljYXRlcyB0aGF0CisgIGAtLXRoaXMtaXMtYS1maWxlYCBtdXN0IG5vdCBiZSBwcm9jZXNzZWQgYXMgYW4gb3B0aW9uLgorCitTdGVwcyB0byBwYXJzZSBvcHRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4gYCNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiYAorCisuIGRlZmluZSBhIE5VTEwtdGVybWluYXRlZAorICBgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2Zvb191c2FnZVtdYCBhcnJheQorICBjb250YWluaW5nIGFsdGVybmF0aXZlIHVzYWdlIHN0cmluZ3MKKworLiBkZWZpbmUgYGJ1aWx0aW5fZm9vX29wdGlvbnNgIGFycmF5IGFzIGRlc2NyaWJlZCBiZWxvdworICBpbiBzZWN0aW9uICdEYXRhIFN0cnVjdHVyZScuCisKKy4gaW4gYGNtZF9mb28oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpYAorICBjYWxsCisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fZm9vX29wdGlvbnMsIGJ1aWx0aW5fZm9vX3VzYWdlLCBmbGFncyk7CisrCitgcGFyc2Vfb3B0aW9ucygpYCB3aWxsIGZpbHRlciBvdXQgdGhlIHByb2Nlc3NlZCBvcHRpb25zIG9mIGBhcmd2W11gIGFuZCBsZWF2ZSB0aGUKK25vbi1vcHRpb24gYXJndW1lbnRzIGluIGBhcmd2W11gLgorYGFyZ2NgIGlzIHVwZGF0ZWQgYXBwcm9wcmlhdGVseSBiZWNhdXNlIG9mIHRoZSBhc3NpZ25tZW50LgorKworWW91IGNhbiBhbHNvIHBhc3MgTlVMTCBpbnN0ZWFkIG9mIGEgdXNhZ2UgYXJyYXkgYXMgdGhlIGZpZnRoIHBhcmFtZXRlciBvZgorcGFyc2Vfb3B0aW9ucygpLCB0byBhdm9pZCBkaXNwbGF5aW5nIGEgaGVscCBzY3JlZW4gd2l0aCB1c2FnZSBpbmZvIGFuZAorb3B0aW9uIGxpc3QuICBUaGlzIHNob3VsZCBvbmx5IGJlIGRvbmUgaWYgbmVjZXNzYXJ5LCBlLmcuIHRvIGltcGxlbWVudAorYSBsaW1pdGVkIHBhcnNlciBmb3Igb25seSBhIHN1YnNldCBvZiB0aGUgb3B0aW9ucyB0aGF0IG5lZWRzIHRvIGJlIHJ1bgorYmVmb3JlIHRoZSBmdWxsIHBhcnNlciwgd2hpY2ggaW4gdHVybiBzaG93cyB0aGUgZnVsbCBoZWxwIG1lc3NhZ2UuCisrCitGbGFncyBhcmUgdGhlIGJpdHdpc2Utb3Igb2Y6CisKK2BQQVJTRV9PUFRfS0VFUF9EQVNIREFTSGA6OgorCUtlZXAgdGhlIGAtLWAgdGhhdCB1c3VhbGx5IHNlcGFyYXRlcyBvcHRpb25zIGZyb20KKwlub24tb3B0aW9uIGFyZ3VtZW50cy4KKworYFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT05gOjoKKwlVc3VhbGx5IHRoZSB3aG9sZSBhcmd1bWVudCB2ZWN0b3IgaXMgbWFzc2FnZWQgYW5kIHJlb3JkZXJlZC4KKwlVc2luZyB0aGlzIGZsYWcsIHByb2Nlc3NpbmcgaXMgc3RvcHBlZCBhdCB0aGUgZmlyc3Qgbm9uLW9wdGlvbgorCWFyZ3VtZW50LgorCitgUEFSU0VfT1BUX0tFRVBfQVJHVjBgOjoKKwlLZWVwIHRoZSBmaXJzdCBhcmd1bWVudCwgd2hpY2ggY29udGFpbnMgdGhlIHByb2dyYW0gbmFtZS4gIEl0J3MKKwlyZW1vdmVkIGZyb20gYXJndltdIGJ5IGRlZmF1bHQuCisKK2BQQVJTRV9PUFRfS0VFUF9VTktOT1dOYDo6CisJS2VlcCB1bmtub3duIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGVycm9yaW5nIG91dC4gIFRoaXMgZG9lc24ndAorCXdvcmsgZm9yIGFsbCBjb21iaW5hdGlvbnMgb2YgYXJndW1lbnRzIGFzIHVzZXJzIG1pZ2h0IGV4cGVjdAorCWl0IHRvIGRvLiAgRS5nLiBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaW4gYC0tdW5rbm93biAtLWtub3duYAorCXRha2VzIGEgdmFsdWUgKHdoaWNoIHdlIGNhbid0IGtub3cpLCB0aGUgc2Vjb25kIG9uZSBpcworCW1pc3Rha2VubHkgaW50ZXJwcmV0ZWQgYXMgYSBrbm93biBvcHRpb24uICBTaW1pbGFybHksIGlmCisJYFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT05gIGlzIHNldCwgdGhlIHNlY29uZCBhcmd1bWVudCBpbgorCWAtLXVua25vd24gdmFsdWVgIHdpbGwgYmUgbWlzdGFrZW5seSBpbnRlcnByZXRlZCBhcyBhCisJbm9uLW9wdGlvbiwgbm90IGFzIGEgdmFsdWUgYmVsb25naW5nIHRvIHRoZSB1bmtub3duIG9wdGlvbiwKKwl0aGUgcGFyc2VyIGVhcmx5LiAgVGhhdCdzIHdoeSBwYXJzZV9vcHRpb25zKCkgZXJyb3JzIG91dCBpZgorCWJvdGggb3B0aW9ucyBhcmUgc2V0LgorCitgUEFSU0VfT1BUX05PX0lOVEVSTkFMX0hFTFBgOjoKKwlCeSBkZWZhdWx0LCBwYXJzZV9vcHRpb25zKCkgaGFuZGxlcyBgLWhgLCBgLS1oZWxwYCBhbmQKKwlgLS1oZWxwLWFsbGAgaW50ZXJuYWxseSwgYnkgc2hvd2luZyBhIGhlbHAgc2NyZWVuLiAgVGhpcyBvcHRpb24KKwl0dXJucyBpdCBvZmYgYW5kIGFsbG93cyBvbmUgdG8gYWRkIGN1c3RvbSBoYW5kbGVycyBmb3IgdGhlc2UKKwlvcHRpb25zLCBvciB0byBqdXN0IGxlYXZlIHRoZW0gdW5rbm93bi4KKworRGF0YSBTdHJ1Y3R1cmUKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBtYWluIGRhdGEgc3RydWN0dXJlIGlzIGFuIGFycmF5IG9mIHRoZSBgb3B0aW9uYCBzdHJ1Y3QsCitzYXkgYHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fYWRkX29wdGlvbnNbXWAuCitUaGVyZSBhcmUgc29tZSBtYWNyb3MgdG8gZWFzaWx5IGRlZmluZSBvcHRpb25zOgorCitgT1BUX19BQkJSRVYoJmludF92YXIpYDo6CisJQWRkIGAtLWFiYnJldls9PG4+XWAuCisKK2BPUFRfX0NPTE9SKCZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlBZGQgYC0tY29sb3JbPTx3aGVuPl1gIGFuZCBgLS1uby1jb2xvcmAuCisKK2BPUFRfX0RSWV9SVU4oJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUFkZCBgLW4sIC0tZHJ5LXJ1bmAuCisKK2BPUFRfX0ZPUkNFKCZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlBZGQgYC1mLCAtLWZvcmNlYC4KKworYE9QVF9fUVVJRVQoJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUFkZCBgLXEsIC0tcXVpZXRgLgorCitgT1BUX19WRVJCT1NFKCZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlBZGQgYC12LCAtLXZlcmJvc2VgLgorCitgT1BUX0dST1VQKGRlc2NyaXB0aW9uKWA6OgorCVN0YXJ0IGFuIG9wdGlvbiBncm91cC4gYGRlc2NyaXB0aW9uYCBpcyBhIHNob3J0IHN0cmluZyB0aGF0CisJZGVzY3JpYmVzIHRoZSBncm91cCBvciBhbiBlbXB0eSBzdHJpbmcuCisJU3RhcnQgdGhlIGRlc2NyaXB0aW9uIHdpdGggYW4gdXBwZXItY2FzZSBsZXR0ZXIuCisKK2BPUFRfQk9PTChzaG9ydCwgbG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhIGJvb2xlYW4gb3B0aW9uLiBgaW50X3ZhcmAgaXMgc2V0IHRvIG9uZSB3aXRoCisJYC0tb3B0aW9uYCBhbmQgc2V0IHRvIHplcm8gd2l0aCBgLS1uby1vcHRpb25gLgorCitgT1BUX0NPVU5UVVAoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYSBjb3VudC11cCBvcHRpb24uCisJYGludF92YXJgIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggdXNlIG9mIGAtLW9wdGlvbmAsIGFuZAorCXJlc2V0IHRvIHplcm8gd2l0aCBgLS1uby1vcHRpb25gLgorCitgT1BUX0JJVChzaG9ydCwgbG9uZywgJmludF92YXIsIGRlc2NyaXB0aW9uLCBtYXNrKWA6OgorCUludHJvZHVjZSBhIGJvb2xlYW4gb3B0aW9uLgorCUlmIHVzZWQsIGBpbnRfdmFyYCBpcyBiaXR3aXNlLW9yZWQgd2l0aCBgbWFza2AuCisKK2BPUFRfTkVHQklUKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24sIG1hc2spYDo6CisJSW50cm9kdWNlIGEgYm9vbGVhbiBvcHRpb24uCisJSWYgdXNlZCwgYGludF92YXJgIGlzIGJpdHdpc2UtYW5kZWQgd2l0aCB0aGUgaW52ZXJ0ZWQgYG1hc2tgLgorCitgT1BUX1NFVF9JTlQoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbiwgaW50ZWdlcilgOjoKKwlJbnRyb2R1Y2UgYW4gaW50ZWdlciBvcHRpb24uCisJYGludF92YXJgIGlzIHNldCB0byBgaW50ZWdlcmAgd2l0aCBgLS1vcHRpb25gLCBhbmQKKwlyZXNldCB0byB6ZXJvIHdpdGggYC0tbm8tb3B0aW9uYC4KKworYE9QVF9TVFJJTkcoc2hvcnQsIGxvbmcsICZzdHJfdmFyLCBhcmdfc3RyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50LgorCVRoZSBzdHJpbmcgYXJndW1lbnQgaXMgcHV0IGludG8gYHN0cl92YXJgLgorCitgT1BUX0lOVEVHRVIoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggaW50ZWdlciBhcmd1bWVudC4KKwlUaGUgaW50ZWdlciBpcyBwdXQgaW50byBgaW50X3ZhcmAuCisKK2BPUFRfTUFHTklUVURFKHNob3J0LCBsb25nLCAmdW5zaWduZWRfbG9uZ192YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2l0aCBhIHNpemUgYXJndW1lbnQuIFRoZSBhcmd1bWVudCBtdXN0IGJlIGEKKwlub24tbmVnYXRpdmUgaW50ZWdlciBhbmQgbWF5IGluY2x1ZGUgYSBzdWZmaXggb2YgJ2snLCAnbScgb3IgJ2cnIHRvCisJc2NhbGUgdGhlIHByb3ZpZGVkIHZhbHVlIGJ5IDEwMjQsIDEwMjReMiBvciAxMDI0XjMgcmVzcGVjdGl2ZWx5LgorCVRoZSBzY2FsZWQgdmFsdWUgaXMgcHV0IGludG8gYHVuc2lnbmVkX2xvbmdfdmFyYC4KKworYE9QVF9EQVRFKHNob3J0LCBsb25nLCAmaW50X3ZhciwgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB3aXRoIGRhdGUgYXJndW1lbnQsIHNlZSBgYXBwcm94aWRhdGUoKWAuCisJVGhlIHRpbWVzdGFtcCBpcyBwdXQgaW50byBgaW50X3ZhcmAuCisKK2BPUFRfRVhQSVJZX0RBVEUoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggZXhwaXJ5IGRhdGUgYXJndW1lbnQsIHNlZSBgcGFyc2VfZXhwaXJ5X2RhdGUoKWAuCisJVGhlIHRpbWVzdGFtcCBpcyBwdXQgaW50byBgaW50X3ZhcmAuCisKK2BPUFRfQ0FMTEJBQ0soc2hvcnQsIGxvbmcsICZ2YXIsIGFyZ19zdHIsIGRlc2NyaXB0aW9uLCBmdW5jX3B0cilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHdpdGggYXJndW1lbnQuCisJVGhlIGFyZ3VtZW50IHdpbGwgYmUgZmVkIGludG8gdGhlIGZ1bmN0aW9uIGdpdmVuIGJ5IGBmdW5jX3B0cmAKKwlhbmQgdGhlIHJlc3VsdCB3aWxsIGJlIHB1dCBpbnRvIGB2YXJgLgorCVNlZSAnT3B0aW9uIENhbGxiYWNrcycgYmVsb3cgZm9yIGEgbW9yZSBlbGFib3JhdGUgZGVzY3JpcHRpb24uCisKK2BPUFRfRklMRU5BTUUoc2hvcnQsIGxvbmcsICZ2YXIsIGRlc2NyaXB0aW9uKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gd2l0aCBhIGZpbGVuYW1lIGFyZ3VtZW50LgorCVRoZSBmaWxlbmFtZSB3aWxsIGJlIHByZWZpeGVkIGJ5IHBhc3NpbmcgdGhlIGZpbGVuYW1lIGFsb25nIHdpdGgKKwl0aGUgcHJlZml4IGFyZ3VtZW50IG9mIGBwYXJzZV9vcHRpb25zKClgIHRvIGBwcmVmaXhfZmlsZW5hbWUoKWAuCisKK2BPUFRfQVJHVU1FTlQobG9uZywgZGVzY3JpcHRpb24pYDo6CisJSW50cm9kdWNlIGEgbG9uZy1vcHRpb24gYXJndW1lbnQgdGhhdCB3aWxsIGJlIGtlcHQgaW4gYGFyZ3ZbXWAuCisKK2BPUFRfTlVNQkVSX0NBTExCQUNLKCZ2YXIsIGRlc2NyaXB0aW9uLCBmdW5jX3B0cilgOjoKKwlSZWNvZ25pemUgbnVtZXJpY2FsIG9wdGlvbnMgbGlrZSAtMTIzIGFuZCBmZWVkIHRoZSBpbnRlZ2VyIGFzCisJaWYgaXQgd2FzIGFuIGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbiBnaXZlbiBieSBgZnVuY19wdHJgLgorCVRoZSByZXN1bHQgd2lsbCBiZSBwdXQgaW50byBgdmFyYC4gIFRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdWNoCisJb3B0aW9uIGRlZmluaXRpb24uICBJdCBjYW5ub3QgYmUgbmVnYXRlZCBhbmQgaXQgdGFrZXMgbm8KKwlhcmd1bWVudHMuICBTaG9ydCBvcHRpb25zIHRoYXQgaGFwcGVuIHRvIGJlIGRpZ2l0cyB0YWtlCisJcHJlY2VkZW5jZSBvdmVyIGl0LgorCitgT1BUX0NPTE9SX0ZMQUcoc2hvcnQsIGxvbmcsICZpbnRfdmFyLCBkZXNjcmlwdGlvbilgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHRoYXQgdGFrZXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgdGhhdCBjYW4KKwloYXZlIG9uZSBvZiB0aHJlZSB2YWx1ZXM6ICJhbHdheXMiLCAibmV2ZXIiLCBvciAiYXV0byIuICBJZiB0aGUKKwlhcmd1bWVudCBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvICJhbHdheXMiLiAgVGhlIGAtLW5vLWAgZm9ybQorCXdvcmtzIGxpa2UgYC0tbG9uZz1uZXZlcmA7IGl0IGNhbm5vdCB0YWtlIGFuIGFyZ3VtZW50LiAgSWYKKwkiYWx3YXlzIiwgc2V0IGBpbnRfdmFyYCB0byAxOyBpZiAibmV2ZXIiLCBzZXQgYGludF92YXJgIHRvIDA7IGlmCisJImF1dG8iLCBzZXQgYGludF92YXJgIHRvIDEgaWYgc3Rkb3V0IGlzIGEgdHR5IG9yIGEgcGFnZXIsCisJMCBvdGhlcndpc2UuCisKK2BPUFRfTk9PUF9OT0FSRyhzaG9ydCwgbG9uZylgOjoKKwlJbnRyb2R1Y2UgYW4gb3B0aW9uIHRoYXQgaGFzIG5vIGVmZmVjdCBhbmQgdGFrZXMgbm8gYXJndW1lbnRzLgorCVVzZSBpdCB0byBoaWRlIGRlcHJlY2F0ZWQgb3B0aW9ucyB0aGF0IGFyZSBzdGlsbCB0byBiZSByZWNvZ25pemVkCisJYW5kIGlnbm9yZWQgc2lsZW50bHkuCisKK2BPUFRfUEFTU1RIUlUoc2hvcnQsIGxvbmcsICZjaGFyX3ZhciwgYXJnX3N0ciwgZGVzY3JpcHRpb24sIGZsYWdzKWA6OgorCUludHJvZHVjZSBhbiBvcHRpb24gdGhhdCB3aWxsIGJlIHJlY29uc3RydWN0ZWQgaW50byBhIGNoYXIqIHN0cmluZywKKwl3aGljaCBtdXN0IGJlIGluaXRpYWxpemVkIHRvIE5VTEwuIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IG5lZWQgdG8KKwlwYXNzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIHRvIGFub3RoZXIgY29tbWFuZC4gQW55IHByZXZpb3VzIHZhbHVlCisJd2lsbCBiZSBvdmVyd3JpdHRlbiwgc28gdGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGZvciBvcHRpb25zIHdoZXJlCisJdGhlIGxhc3Qgb25lIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIHdpbnMuCisKK2BPUFRfUEFTU1RIUlVfQVJHVihzaG9ydCwgbG9uZywgJmFyZ3ZfYXJyYXlfdmFyLCBhcmdfc3RyLCBkZXNjcmlwdGlvbiwgZmxhZ3MpYDo6CisJSW50cm9kdWNlIGFuIG9wdGlvbiB3aGVyZSBhbGwgaW5zdGFuY2VzIG9mIGl0IG9uIHRoZSBjb21tYW5kLWxpbmUgd2lsbAorCWJlIHJlY29uc3RydWN0ZWQgaW50byBhbiBhcmd2X2FycmF5LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBuZWVkIHRvCisJcGFzcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiwgd2hpY2ggY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcywKKwl0byBhbm90aGVyIGNvbW1hbmQuCisKKworVGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgYXJyYXkgbXVzdCBiZSBgT1BUX0VORCgpYC4KKworSWYgbm90IHN0YXRlZCBvdGhlcndpc2UsIGludGVycHJldCB0aGUgYXJndW1lbnRzIGFzIGZvbGxvd3M6CisKKyogYHNob3J0YCBpcyBhIGNoYXJhY3RlciBmb3IgdGhlIHNob3J0IG9wdGlvbgorICAoZS5nLiBgJ2UnYCBmb3IgYC1lYCwgdXNlIGAwYCB0byBvbWl0KSwKKworKiBgbG9uZ2AgaXMgYSBzdHJpbmcgZm9yIHRoZSBsb25nIG9wdGlvbgorICAoZS5nLiBgImV4YW1wbGUiYCBmb3IgYC0tZXhhbXBsZWAsIHVzZSBgTlVMTGAgdG8gb21pdCksCisKKyogYGludF92YXJgIGlzIGFuIGludGVnZXIgdmFyaWFibGUsCisKKyogYHN0cl92YXJgIGlzIGEgc3RyaW5nIHZhcmlhYmxlIChgY2hhciAqYCksCisKKyogYGFyZ19zdHJgIGlzIHRoZSBzdHJpbmcgdGhhdCBpcyBzaG93biBhcyBhcmd1bWVudAorICAoZS5nLiBgImJyYW5jaCJgIHdpbGwgcmVzdWx0IGluIGA8YnJhbmNoPmApLgorICBJZiBzZXQgdG8gYE5VTExgLCB0aHJlZSBkb3RzIChgLi4uYCkgd2lsbCBiZSBkaXNwbGF5ZWQuCisKKyogYGRlc2NyaXB0aW9uYCBpcyBhIHNob3J0IHN0cmluZyB0byBkZXNjcmliZSB0aGUgZWZmZWN0IG9mIHRoZSBvcHRpb24uCisgIEl0IHNoYWxsIGJlZ2luIHdpdGggYSBsb3dlci1jYXNlIGxldHRlciBhbmQgYSBmdWxsIHN0b3AgKGAuYCkgc2hhbGwgYmUKKyAgb21pdHRlZCBhdCB0aGUgZW5kLgorCitPcHRpb24gQ2FsbGJhY2tzCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmdW5jdGlvbiBtdXN0IGJlIGRlZmluZWQgaW4gdGhpcyBmb3JtOgorCisJaW50IGZ1bmMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKKworVGhlIGNhbGxiYWNrIG1lY2hhbmlzbSBpcyBhcyBmb2xsb3dzOgorCisqIEluc2lkZSBgZnVuY2AsIHRoZSBvbmx5IGludGVyZXN0aW5nIG1lbWJlciBvZiB0aGUgc3RydWN0dXJlCisgIGdpdmVuIGJ5IGBvcHRgIGlzIHRoZSB2b2lkIHBvaW50ZXIgYG9wdC0+dmFsdWVgLgorICBgKm9wdC0+dmFsdWVgIHdpbGwgYmUgdGhlIHZhbHVlIHRoYXQgaXMgc2F2ZWQgaW50byBgdmFyYCwgaWYgeW91CisgIHVzZSBgT1BUX0NBTExCQUNLKClgLgorICBGb3IgZXhhbXBsZSwgZG8gYCoodW5zaWduZWQgbG9uZyAqKW9wdC0+dmFsdWUgPSA0MjtgIHRvIGdldCA0MgorICBpbnRvIGFuIGB1bnNpZ25lZCBsb25nYCB2YXJpYWJsZS4KKworKiBSZXR1cm4gdmFsdWUgYDBgIGluZGljYXRlcyBzdWNjZXNzIGFuZCBub24temVybyByZXR1cm4KKyAgdmFsdWUgd2lsbCBpbnZva2UgYHVzYWdlX3dpdGhfb3B0aW9ucygpYCBhbmQsIHRodXMsIGRpZS4KKworKiBJZiB0aGUgdXNlciBuZWdhdGVzIHRoZSBvcHRpb24sIGBhcmdgIGlzIGBOVUxMYCBhbmQgYHVuc2V0YCBpcyAxLgorCitTb3BoaXN0aWNhdGVkIG9wdGlvbiBwYXJzaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBuZWVkLCBmb3IgZXhhbXBsZSwgb3B0aW9uIGNhbGxiYWNrcyB3aXRoIG9wdGlvbmFsIGFyZ3VtZW50cworb3Igd2l0aG91dCBhcmd1bWVudHMgYXQgYWxsLCBvciBpZiB5b3UgbmVlZCBvdGhlciBzcGVjaWFsIGNhc2VzLAordGhhdCBhcmUgbm90IGhhbmRsZWQgYnkgdGhlIG1hY3JvcyBhYm92ZSwgeW91IG5lZWQgdG8gc3BlY2lmeSB0aGUKK21lbWJlcnMgb2YgdGhlIGBvcHRpb25gIHN0cnVjdHVyZSBtYW51YWxseS4KKworVGhpcyBpcyBub3QgY292ZXJlZCBpbiB0aGlzIGRvY3VtZW50LCBidXQgd2VsbCBkb2N1bWVudGVkCitpbiBgcGFyc2Utb3B0aW9ucy5oYCBpdHNlbGYuCisKK0V4YW1wbGVzCistLS0tLS0tLQorCitTZWUgYHRlc3QtcGFyc2Utb3B0aW9ucy5jYCBhbmQKK2BidWlsdGluL2FkZC5jYCwKK2BidWlsdGluL2Nsb25lLmNgLAorYGJ1aWx0aW4vY29tbWl0LmNgLAorYGJ1aWx0aW4vZmV0Y2guY2AsCitgYnVpbHRpbi9mc2NrLmNgLAorYGJ1aWx0aW4vcm0uY2AKK2ZvciByZWFsLXdvcmxkIGV4YW1wbGVzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXF1b3RlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1xdW90ZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhMWJjZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1xdW90ZS50eHQKQEAgLTAsMCArMSwxMCBAQAorcXVvdGUgQVBJCis9PT09PT09PT0KKworVGFsayBhYm91dCA8cXVvdGUuaD4sIHRoaW5ncyBsaWtlCisKKyogc3FfcXVvdGUgYW5kIHVucXVvdGUKKyogY19zdHlsZSBxdW90ZSBhbmQgdW5xdW90ZQorKiBxdW90aW5nIGZvciBmb3JlaWduIGxhbmd1YWdlcworCisoSkMpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmVmLWl0ZXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmVmLWl0ZXJhdGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczNzlkOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZWYtaXRlcmF0aW9uLnR4dApAQCAtMCwwICsxLDgxIEBACityZWYgaXRlcmF0aW9uIEFQSQorPT09PT09PT09PT09PT09PT0KKworCitJdGVyYXRpb24gb2YgcmVmcyBpcyBkb25lIGJ5IHVzaW5nIGFuIGl0ZXJhdGUgZnVuY3Rpb24gd2hpY2ggd2lsbCBjYWxsIGEKK2NhbGxiYWNrIGZ1bmN0aW9uIGZvciBldmVyeSByZWYuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBoYXMgdGhpcworc2lnbmF0dXJlOgorCisJaW50IGhhbmRsZV9vbmVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSk7CisKK1RoZXJlIGFyZSBkaWZmZXJlbnQga2luZHMgb2YgaXRlcmF0ZSBmdW5jdGlvbnMgd2hpY2ggYWxsIHRha2UgYQorY2FsbGJhY2sgb2YgdGhpcyB0eXBlLiBUaGUgY2FsbGJhY2sgaXMgdGhlbiBjYWxsZWQgZm9yIGVhY2ggZm91bmQgcmVmCit1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucyBub256ZXJvLiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgdGhlbiBhbHNvCityZXR1cm5lZCBieSB0aGUgaXRlcmF0ZSBmdW5jdGlvbi4KKworSXRlcmF0aW9uIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIGBoZWFkX3JlZigpYCBqdXN0IGl0ZXJhdGVzIHRoZSBoZWFkIHJlZi4KKworKiBgZm9yX2VhY2hfcmVmKClgIGl0ZXJhdGVzIGFsbCByZWZzLgorCisqIGBmb3JfZWFjaF9yZWZfaW4oKWAgaXRlcmF0ZXMgYWxsIHJlZnMgd2hpY2ggaGF2ZSBhIGRlZmluZWQgcHJlZml4IGFuZAorICBzdHJpcHMgdGhhdCBwcmVmaXggZnJvbSB0aGUgcGFzc2VkIHZhcmlhYmxlIHJlZm5hbWUuCisKKyogYGZvcl9lYWNoX3RhZ19yZWYoKWAsIGBmb3JfZWFjaF9icmFuY2hfcmVmKClgLCBgZm9yX2VhY2hfcmVtb3RlX3JlZigpYCwKKyAgYGZvcl9lYWNoX3JlcGxhY2VfcmVmKClgIGl0ZXJhdGUgcmVmcyBmcm9tIHRoZSByZXNwZWN0aXZlIGFyZWEuCisKKyogYGZvcl9lYWNoX2dsb2JfcmVmKClgIGl0ZXJhdGVzIGFsbCByZWZzIHRoYXQgbWF0Y2ggdGhlIHNwZWNpZmllZCBnbG9iCisgIHBhdHRlcm4uCisKKyogYGZvcl9lYWNoX2dsb2JfcmVmX2luKClgIHRoZSBwcmV2aW91cyBhbmQgYGZvcl9lYWNoX3JlZl9pbigpYCBjb21iaW5lZC4KKworKiBgaGVhZF9yZWZfc3VibW9kdWxlKClgLCBgZm9yX2VhY2hfcmVmX3N1Ym1vZHVsZSgpYCwKKyAgYGZvcl9lYWNoX3JlZl9pbl9zdWJtb2R1bGUoKWAsIGBmb3JfZWFjaF90YWdfcmVmX3N1Ym1vZHVsZSgpYCwKKyAgYGZvcl9lYWNoX2JyYW5jaF9yZWZfc3VibW9kdWxlKClgLCBgZm9yX2VhY2hfcmVtb3RlX3JlZl9zdWJtb2R1bGUoKWAKKyAgZG8gdGhlIHNhbWUgYXMgdGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQgYWJvdmUgYnV0IGZvciBhIHNwZWNpZmllZAorICBzdWJtb2R1bGUuCisKKyogYGZvcl9lYWNoX3Jhd3JlZigpYCBjYW4gYmUgdXNlZCB0byBsZWFybiBhYm91dCBicm9rZW4gcmVmIGFuZCBzeW1yZWYuCisKKyogYGZvcl9lYWNoX3JlZmxvZygpYCBpdGVyYXRlcyBlYWNoIHJlZmxvZyBmaWxlLgorCitTdWJtb2R1bGVzCistLS0tLS0tLS0tCisKK0lmIHlvdSB3YW50IHRvIGl0ZXJhdGUgdGhlIHJlZnMgb2YgYSBzdWJtb2R1bGUgeW91IGZpcnN0IG5lZWQgdG8gYWRkIHRoZQorc3VibW9kdWxlcyBvYmplY3QgZGF0YWJhc2UuIFlvdSBjYW4gZG8gdGhpcyBieSBhIGNvZGUtc25pcHBldCBsaWtlCit0aGlzOgorCisJY29uc3QgY2hhciAqcGF0aCA9ICJwYXRoL3RvL3N1Ym1vZHVsZSIKKwlpZiAoYWRkX3N1Ym1vZHVsZV9vZGIocGF0aCkpCisJCWRpZSgiRXJyb3Igc3VibW9kdWxlICclcycgbm90IHBvcHVsYXRlZC4iLCBwYXRoKTsKKworYGFkZF9zdWJtb2R1bGVfb2RiKClgIHdpbGwgcmV0dXJuIHplcm8gb24gc3VjY2Vzcy4gSWYgeW91CitkbyBub3QgZG8gdGhpcyB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgZm9yIGVhY2ggcmVmIHRoYXQgaXQgZG9lcyBub3QgcG9pbnQKK3RvIGEgdmFsaWQgb2JqZWN0LgorCitOb3RlOiBBcyBhIHNpZGUtZWZmZWN0IG9mIHRoaXMgeW91IGNhbiBub3Qgc2FmZWx5IGFzc3VtZSB0aGF0IGFsbAorb2JqZWN0cyB5b3UgbG9va3VwIGFyZSBhdmFpbGFibGUgaW4gc3VwZXJwcm9qZWN0LiBBbGwgc3VibW9kdWxlIG9iamVjdHMKK3dpbGwgYmUgYXZhaWxhYmxlIHRoZSBzYW1lIHdheSBhcyB0aGUgc3VwZXJwcm9qZWN0cyBvYmplY3RzLgorCitFeGFtcGxlOgorLS0tLS0tLS0KKworLS0tLQorc3RhdGljIGludCBoYW5kbGVfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiAqb3V0cHV0ID0gY2JfZGF0YTsKKwlzdHJidWZfYWRkZihvdXRwdXQsICIlc1xuIiwgcmVmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKKy4uLgorCisJc3RydWN0IHN0cmJ1ZiBvdXRwdXQgPSBTVFJCVUZfSU5JVDsKKwlmb3JfZWFjaF9yZW1vdGVfcmVmKGhhbmRsZV9yZW1vdGVfcmVmLCAmb3V0cHV0KTsKKwlwcmludGYoIiVzIiwgb3V0cHV0LmJ1Zik7CistLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmVtb3RlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZW1vdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZmRkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmVtb3RlLnR4dApAQCAtMCwwICsxLDEyMyBAQAorUmVtb3RlcyBjb25maWd1cmF0aW9uIEFQSQorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgQVBJIGluIHJlbW90ZS5oIGdpdmVzIGFjY2VzcyB0byB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvCityZW1vdGVzLiBJdCBoYW5kbGVzIGFsbCB0aHJlZSBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMgaGlzdG9yaWNhbGx5CithbmQgY3VycmVudGx5IHVzZWQgYnkgR2l0LCBhbmQgcHJlc2VudHMgdGhlIGluZm9ybWF0aW9uIGluIGEgdW5pZm9ybQorZmFzaGlvbi4gTm90ZSB0aGF0IHRoZSBjb2RlIGFsc28gaGFuZGxlcyBwbGFpbiBVUkxzIHdpdGhvdXQgYW55Citjb25maWd1cmF0aW9uLCBnaXZpbmcgdGhlbSBqdXN0IHRoZSBkZWZhdWx0IGluZm9ybWF0aW9uLgorCitzdHJ1Y3QgcmVtb3RlCistLS0tLS0tLS0tLS0tCisKK2BuYW1lYDo6CisKKwlUaGUgdXNlcidzIG5pY2tuYW1lIGZvciB0aGUgcmVtb3RlCisKK2B1cmxgOjoKKworCUFuIGFycmF5IG9mIGFsbCBvZiB0aGUgdXJsX25yIFVSTHMgY29uZmlndXJlZCBmb3IgdGhlIHJlbW90ZQorCitgcHVzaHVybGA6OgorCisJQW4gYXJyYXkgb2YgYWxsIG9mIHRoZSBwdXNodXJsX25yIHB1c2ggVVJMcyBjb25maWd1cmVkIGZvciB0aGUgcmVtb3RlCisKK2BwdXNoYDo6CisKKwkgQW4gYXJyYXkgb2YgcmVmc3BlY3MgY29uZmlndXJlZCBmb3IgcHVzaGluZywgd2l0aAorCSBwdXNoX3JlZnNwZWMgYmVpbmcgdGhlIGxpdGVyYWwgc3RyaW5ncywgYW5kIHB1c2hfcmVmc3BlY19ucgorCSBiZWluZyB0aGUgcXVhbnRpdHkuCisKK2BmZXRjaGA6OgorCisJQW4gYXJyYXkgb2YgcmVmc3BlY3MgY29uZmlndXJlZCBmb3IgZmV0Y2hpbmcsIHdpdGgKKwlmZXRjaF9yZWZzcGVjIGJlaW5nIHRoZSBsaXRlcmFsIHN0cmluZ3MsIGFuZCBmZXRjaF9yZWZzcGVjX25yCisJYmVpbmcgdGhlIHF1YW50aXR5LgorCitgZmV0Y2hfdGFnc2A6OgorCisJVGhlIHNldHRpbmcgZm9yIHdoZXRoZXIgdG8gZmV0Y2ggdGFncyAoYXMgYSBzZXBhcmF0ZSBydWxlIGZyb20KKwl0aGUgY29uZmlndXJlZCByZWZzcGVjcyk7IC0xIG1lYW5zIG5ldmVyIHRvIGZldGNoIHRhZ3MsIDAKKwltZWFucyB0byBhdXRvLWZvbGxvdyB0YWdzIGJhc2VkIG9uIHRoZSBkZWZhdWx0IGhldXJpc3RpYywgMQorCW1lYW5zIHRvIGFsd2F5cyBhdXRvLWZvbGxvdyB0YWdzLCBhbmQgMiBtZWFucyB0byBmZXRjaCBhbGwKKwl0YWdzLgorCitgcmVjZWl2ZXBhY2tgLCBgdXBsb2FkcGFja2A6OgorCisJVGhlIGNvbmZpZ3VyZWQgaGVscGVyIHByb2dyYW1zIHRvIHJ1biBvbiB0aGUgcmVtb3RlIHNpZGUsIGZvcgorCUdpdC1uYXRpdmUgcHJvdG9jb2xzLgorCitgaHR0cF9wcm94eWA6OgorCisJVGhlIHByb3h5IHRvIHVzZSBmb3IgY3VybCAoaHR0cCwgaHR0cHMsIGZ0cCwgZXRjLikgVVJMcy4KKworc3RydWN0IHJlbW90ZXMgY2FuIGJlIGZvdW5kIGJ5IG5hbWUgd2l0aCByZW1vdGVfZ2V0KCksIGFuZCBpdGVyYXRlZAordGhyb3VnaCB3aXRoIGZvcl9lYWNoX3JlbW90ZSgpLiByZW1vdGVfZ2V0KE5VTEwpIHdpbGwgcmV0dXJuIHRoZQorZGVmYXVsdCByZW1vdGUsIGdpdmVuIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgY29uZmlndXJhdGlvbi4KKworc3RydWN0IHJlZnNwZWMKKy0tLS0tLS0tLS0tLS0tCisKK0Egc3RydWN0IHJlZnNwZWMgaG9sZHMgdGhlIHBhcnNlZCBpbnRlcnByZXRhdGlvbiBvZiBhIHJlZnNwZWMuICBJZiBpdAord2lsbCBmb3JjZSB1cGRhdGVzIChzdGFydHMgd2l0aCBhICcrJyksIGZvcmNlIGlzIHRydWUuICBJZiBpdCBpcyBhCitwYXR0ZXJuIChzaWRlcyBlbmQgd2l0aCAnKicpIHBhdHRlcm4gaXMgdHJ1ZS4gIHNyYyBhbmQgZGVzdCBhcmUgdGhlCit0d28gc2lkZXMgKGluY2x1ZGluZyAnKicgY2hhcmFjdGVycyBpZiBwcmVzZW50KTsgaWYgdGhlcmUgaXMgb25seSBvbmUKK3NpZGUsIGl0IGlzIHNyYywgYW5kIGRzdCBpcyBOVUxMOyBpZiBzaWRlcyBleGlzdCBidXQgYXJlIGVtcHR5IChpLmUuLAordGhlIHJlZnNwZWMgZWl0aGVyIHN0YXJ0cyBvciBlbmRzIHdpdGggJzonKSwgdGhlIGNvcnJlc3BvbmRpbmcgc2lkZSBpcworIiIuCisKK0FuIGFycmF5IG9mIHN0cmluZ3MgY2FuIGJlIHBhcnNlZCBpbnRvIGFuIGFycmF5IG9mIHN0cnVjdCByZWZzcGVjcwordXNpbmcgcGFyc2VfZmV0Y2hfcmVmc3BlYygpIG9yIHBhcnNlX3B1c2hfcmVmc3BlYygpLgorCityZW1vdGVfZmluZF90cmFja2luZygpLCBnaXZlbiBhIHJlbW90ZSBhbmQgYSBzdHJ1Y3QgcmVmc3BlYyB3aXRoCitlaXRoZXIgc3JjIG9yIGRzdCBmaWxsZWQgb3V0LCB3aWxsIGZpbGwgb3V0IHRoZSBvdGhlciBzdWNoIHRoYXQgdGhlCityZXN1bHQgaXMgaW4gdGhlICJmZXRjaCIgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIHJlbW90ZSAobm90ZSB0aGF0IHRoaXMKK2V2YWx1YXRlcyBwYXR0ZXJucyBhbmQgcmV0dXJucyBhIHNpbmdsZSByZXN1bHQpLgorCitzdHJ1Y3QgYnJhbmNoCistLS0tLS0tLS0tLS0tCisKK05vdGUgdGhhdCB0aGlzIG1heSBlbmQgdXAgbW92aW5nIHRvIGJyYW5jaC5oCisKK3N0cnVjdCBicmFuY2ggaG9sZHMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGEgYnJhbmNoLiBJdCBjYW4gYmUgbG9va2VkCit1cCB3aXRoIGJyYW5jaF9nZXQobmFtZSkgZm9yICJyZWZzL2hlYWRzL3tuYW1lfSIsIG9yIHdpdGgKK2JyYW5jaF9nZXQoTlVMTCkgZm9yIEhFQUQuCisKK0l0IGNvbnRhaW5zOgorCitgbmFtZWA6OgorCisJVGhlIHNob3J0IG5hbWUgb2YgdGhlIGJyYW5jaC4KKworYHJlZm5hbWVgOjoKKworCVRoZSBmdWxsIHBhdGggZm9yIHRoZSBicmFuY2ggcmVmLgorCitgcmVtb3RlX25hbWVgOjoKKworCVRoZSBuYW1lIG9mIHRoZSByZW1vdGUgbGlzdGVkIGluIHRoZSBjb25maWd1cmF0aW9uLgorCitgbWVyZ2VfbmFtZWA6OgorCisJQW4gYXJyYXkgb2YgdGhlICJtZXJnZSIgbGluZXMgaW4gdGhlIGNvbmZpZ3VyYXRpb24uCisKK2BtZXJnZWA6OgorCisJQW4gYXJyYXkgb2YgdGhlIHN0cnVjdCByZWZzcGVjcyB1c2VkIGZvciB0aGUgbWVyZ2UgbGluZXMuIFRoYXQKKwlpcywgbWVyZ2VbaV0tPmRzdCBpcyBhIGxvY2FsIHRyYWNraW5nIHJlZiB3aGljaCBzaG91bGQgYmUKKwltZXJnZWQgaW50byB0aGlzIGJyYW5jaCBieSBkZWZhdWx0LgorCitgbWVyZ2VfbnJgOjoKKworCVRoZSBudW1iZXIgb2YgbWVyZ2UgY29uZmlndXJhdGlvbnMKKworYnJhbmNoX2hhc19tZXJnZV9jb25maWcoKSByZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGJyYW5jaCBoYXMgbWVyZ2UKK2NvbmZpZ3VyYXRpb24gZ2l2ZW4uCisKK090aGVyIHN0dWZmCistLS0tLS0tLS0tLQorCitUaGVyZSBpcyBvdGhlciBzdHVmZiBpbiByZW1vdGUuaCB0aGF0IGlzIHJlbGF0ZWQsIGluIGdlbmVyYWwsIHRvIHRoZQorcHJvY2VzcyBvZiBpbnRlcmFjdGluZyB3aXRoIHJlbW90ZXMuCisKKyhEYW5pZWwgQmFya2Fsb3cpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmV2aXNpb24td2Fsa2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktcmV2aXNpb24td2Fsa2luZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViODc4YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1yZXZpc2lvbi13YWxraW5nLnR4dApAQCAtMCwwICsxLDcyIEBACityZXZpc2lvbiB3YWxraW5nIEFQSQorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIHJldmlzaW9uIHdhbGtpbmcgQVBJIG9mZmVycyBmdW5jdGlvbnMgdG8gYnVpbGQgYSBsaXN0IG9mIHJldmlzaW9ucworYW5kIHRoZW4gaXRlcmF0ZSBvdmVyIHRoYXQgbGlzdC4KKworQ2FsbGluZyBzZXF1ZW5jZQorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgd2Fsa2luZyBBUEkgaGFzIGEgZ2l2ZW4gY2FsbGluZyBzZXF1ZW5jZTogZmlyc3QgeW91IG5lZWQgdG8KK2luaXRpYWxpemUgYSByZXZfaW5mbyBzdHJ1Y3R1cmUsIHRoZW4gYWRkIHJldmlzaW9ucyB0byBjb250cm9sIHdoYXQga2luZAorb2YgcmV2aXNpb24gbGlzdCBkbyB5b3Ugd2FudCB0byBnZXQsIGZpbmFsbHkgeW91IGNhbiBpdGVyYXRlIG92ZXIgdGhlCityZXZpc2lvbiBsaXN0LgorCitGdW5jdGlvbnMKKy0tLS0tLS0tLQorCitgaW5pdF9yZXZpc2lvbnNgOjoKKworCUluaXRpYWxpemUgYSByZXZfaW5mbyBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcy4gVGhlIHNlY29uZAorCXBhcmFtZXRlciBtYXkgYmUgTlVMTCBvciBjYW4gYmUgcHJlZml4IHBhdGgsIGFuZCB0aGVuIHRoZSBgLnByZWZpeGAKKwl2YXJpYWJsZSB3aWxsIGJlIHNldCB0byBpdC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIGZpcnN0IGZ1bmN0aW9uIHlvdQorCXdhbnQgdG8gY2FsbCB3aGVuIHlvdSB3YW50IHRvIGRlYWwgd2l0aCBhIHJldmlzaW9uIGxpc3QuIEFmdGVyIGNhbGxpbmcKKwl0aGlzIGZ1bmN0aW9uLCB5b3UgYXJlIGZyZWUgdG8gY3VzdG9taXplIG9wdGlvbnMsIGxpa2Ugc2V0CisJYC5pZ25vcmVfbWVyZ2VzYCB0byAwIGlmIHlvdSBkb24ndCB3YW50IHRvIGlnbm9yZSBtZXJnZXMsIGFuZCBzbyBvbi4gU2VlCisJYHJldmlzaW9uLmhgIGZvciBhIGNvbXBsZXRlIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbnMuCisKK2BhZGRfcGVuZGluZ19vYmplY3RgOjoKKworCVRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gYWRkIGNvbW1pdCBvYmplY3RzIGFzIHJldmlzaW9uCisJaW5mb3JtYXRpb24uIFlvdSBjYW4gdXNlIHRoZSBgVU5JTlRFUkVTVElOR2Agb2JqZWN0IGZsYWcgdG8gaW5kaWNhdGUgaWYKKwl5b3Ugd2FudCB0byBpbmNsdWRlIG9yIGV4Y2x1ZGUgdGhlIGdpdmVuIGNvbW1pdCAoYW5kIGNvbW1pdHMgcmVhY2hhYmxlCisJZnJvbSB0aGUgZ2l2ZW4gY29tbWl0KSBmcm9tIHRoZSByZXZpc2lvbiBsaXN0LgorKworTk9URTogSWYgeW91IGhhdmUgdGhlIGNvbW1pdHMgYXMgYSBzdHJpbmcgbGlzdCB0aGVuIHlvdSBwcm9iYWJseSB3YW50IHRvCit1c2Ugc2V0dXBfcmV2aXNpb25zKCksIGluc3RlYWQgb2YgcGFyc2luZyBlYWNoIHN0cmluZyBhbmQgdXNpbmcgdGhpcworZnVuY3Rpb24uCisKK2BzZXR1cF9yZXZpc2lvbnNgOjoKKworCVBhcnNlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBmaWxsaW5nIGluIHRoZSBgcmV2X2luZm9gIHN0cnVjdHVyZSwgYW5kCisJcmVtb3ZpbmcgdGhlIHVzZWQgYXJndW1lbnRzIGZyb20gdGhlIGFyZ3VtZW50IGxpc3QuIFJldHVybnMgdGhlIG51bWJlcgorCW9mIGFyZ3VtZW50cyBsZWZ0IHRoYXQgd2VyZW4ndCByZWNvZ25pemVkLCB3aGljaCBhcmUgYWxzbyBtb3ZlZCB0byB0aGUKKwloZWFkIG9mIHRoZSBhcmd1bWVudCBsaXN0LiBUaGUgbGFzdCBwYXJhbWV0ZXIgaXMgdXNlZCBpbiBjYXNlIG5vCisJcGFyYW1ldGVyIGdpdmVuIGJ5IHRoZSBmaXJzdCB0d28gYXJndW1lbnRzLgorCitgcHJlcGFyZV9yZXZpc2lvbl93YWxrYDo6CisKKwlQcmVwYXJlcyB0aGUgcmV2X2luZm8gc3RydWN0dXJlIGZvciBhIHdhbGsuIFlvdSBzaG91bGQgY2hlY2sgaWYgaXQKKwlyZXR1cm5zIGFueSBlcnJvciAobm9uLXplcm8gcmV0dXJuIGNvZGUpIGFuZCBpZiBpdCBkb2VzIG5vdCwgeW91IGNhbgorCXN0YXJ0IHVzaW5nIGdldF9yZXZpc2lvbigpIHRvIGRvIHRoZSBpdGVyYXRpb24uCisKK2BnZXRfcmV2aXNpb25gOjoKKworCVRha2VzIGEgcG9pbnRlciB0byBhIGByZXZfaW5mb2Agc3RydWN0dXJlIGFuZCBpdGVyYXRlcyBvdmVyIGl0LAorCXJldHVybmluZyBhIGBzdHJ1Y3QgY29tbWl0ICpgIGVhY2ggdGltZSB5b3UgY2FsbCBpdC4gVGhlIGVuZCBvZiB0aGUKKwlyZXZpc2lvbiBsaXN0IGlzIGluZGljYXRlZCBieSByZXR1cm5pbmcgYSBOVUxMIHBvaW50ZXIuCisKK2ByZXNldF9yZXZpc2lvbl93YWxrYDo6CisKKwlSZXNldCB0aGUgZmxhZ3MgdXNlZCBieSB0aGUgcmV2aXNpb24gd2Fsa2luZyBhcGkuIFlvdSBjYW4gdXNlCisJdGhpcyB0byBkbyBtdWx0aXBsZSBzZXF1ZW50aWFsIHJldmlzaW9uIHdhbGtzLgorCitEYXRhIHN0cnVjdHVyZXMKKy0tLS0tLS0tLS0tLS0tLQorCitUYWxrIGFib3V0IDxyZXZpc2lvbi5oPiwgdGhpbmdzIGxpa2U6CisKKyogdHdvIGRpZmZfb3B0aW9ucywgb25lIGZvciBwYXRoIGxpbWl0aW5nLCBhbm90aGVyIGZvciBvdXRwdXQ7CisqIHJlbWFpbmluZyBmdW5jdGlvbnM7CisKKyhMaW51cywgSkMsIERzY2hvKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXJ1bi1jb21tYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ydW4tY29tbWFuZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmZGI0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1ydW4tY29tbWFuZC50eHQKQEAgLTAsMCArMSwyNTcgQEAKK3J1bi1jb21tYW5kIEFQSQorPT09PT09PT09PT09PT09CisKK1RoZSBydW4tY29tbWFuZCBBUEkgb2ZmZXJzIGEgdmVyc2F0aWxlIHRvb2wgdG8gcnVuIHN1Yi1wcm9jZXNzZXMgd2l0aAorcmVkaXJlY3RlZCBpbnB1dCBhbmQgb3V0cHV0IGFzIHdlbGwgYXMgd2l0aCBhIG1vZGlmaWVkIGVudmlyb25tZW50CithbmQgYW4gYWx0ZXJuYXRlIGN1cnJlbnQgZGlyZWN0b3J5LgorCitBIHNpbWlsYXIgQVBJIG9mZmVycyB0aGUgY2FwYWJpbGl0eSB0byBydW4gYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseSwKK3doaWNoIGlzIHByaW1hcmlseSB1c2VkIHRvIGNhcHR1cmUgdGhlIG91dHB1dCB0aGF0IHRoZSBmdW5jdGlvbgorcHJvZHVjZXMgaW4gdGhlIGNhbGxlciBpbiBvcmRlciB0byBwcm9jZXNzIGl0LgorCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKK2BjaGlsZF9wcm9jZXNzX2luaXRgOjoKKworCUluaXRpYWxpemUgYSBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyB2YXJpYWJsZS4KKworYHN0YXJ0X2NvbW1hbmRgOjoKKworCVN0YXJ0IGEgc3ViLXByb2Nlc3MuIFRha2VzIGEgcG9pbnRlciB0byBhIGBzdHJ1Y3QgY2hpbGRfcHJvY2Vzc2AKKwl0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBhbmQgcmV0dXJucyBwaXBlIEZEcyAoaWYgcmVxdWVzdGVkKS4KKwlTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisKK2BmaW5pc2hfY29tbWFuZGA6OgorCisJV2FpdCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgYSBzdWItcHJvY2VzcyB0aGF0IHdhcyBzdGFydGVkIHdpdGgKKwlzdGFydF9jb21tYW5kKCkuCisKK2BydW5fY29tbWFuZGA6OgorCisJQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IGVuY2Fwc3VsYXRlcyBhIHNlcXVlbmNlIG9mCisJc3RhcnRfY29tbWFuZCgpIGZvbGxvd2VkIGJ5IGZpbmlzaF9jb21tYW5kKCkuIFRha2VzIGEgcG9pbnRlcgorCXRvIGEgYHN0cnVjdCBjaGlsZF9wcm9jZXNzYCB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscy4KKworYHJ1bl9jb21tYW5kX3Zfb3B0YCwgYHJ1bl9jb21tYW5kX3Zfb3B0X2NkX2VudmA6OgorCisJQ29udmVuaWVuY2UgZnVuY3Rpb25zIHRoYXQgZW5jYXBzdWxhdGUgYSBzZXF1ZW5jZSBvZgorCXN0YXJ0X2NvbW1hbmQoKSBmb2xsb3dlZCBieSBmaW5pc2hfY29tbWFuZCgpLiBUaGUgYXJndW1lbnQgYXJndgorCXNwZWNpZmllcyB0aGUgcHJvZ3JhbSBhbmQgaXRzIGFyZ3VtZW50cy4gVGhlIGFyZ3VtZW50IG9wdCBpcyB6ZXJvCisJb3IgbW9yZSBvZiB0aGUgZmxhZ3MgYFJVTl9DT01NQU5EX05PX1NURElOYCwgYFJVTl9HSVRfQ01EYCwKKwlgUlVOX0NPTU1BTkRfU1RET1VUX1RPX1NUREVSUmAsIG9yIGBSVU5fU0lMRU5UX0VYRUNfRkFJTFVSRWAKKwl0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIG1lbWJlcnMgLm5vX3N0ZGluLCAuZ2l0X2NtZCwKKwkuc3Rkb3V0X3RvX3N0ZGVyciwgLnNpbGVudF9leGVjX2ZhaWx1cmUgb2YgYHN0cnVjdCBjaGlsZF9wcm9jZXNzYC4KKwlUaGUgYXJndW1lbnQgZGlyIGNvcnJlc3BvbmRzIHRoZSBtZW1iZXIgLmRpci4gVGhlIGFyZ3VtZW50IGVudgorCWNvcnJlc3BvbmRzIHRvIHRoZSBtZW1iZXIgLmVudi4KKworVGhlIGZ1bmN0aW9ucyBhYm92ZSBkbyB0aGUgZm9sbG93aW5nOgorCisuIElmIGEgc3lzdGVtIGNhbGwgZmFpbGVkLCBlcnJubyBpcyBzZXQgYW5kIC0xIGlzIHJldHVybmVkLiBBIGRpYWdub3N0aWMKKyAgaXMgcHJpbnRlZC4KKworLiBJZiB0aGUgcHJvZ3JhbSB3YXMgbm90IGZvdW5kLCB0aGVuIC0xIGlzIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQgdG8KKyAgRU5PRU5UOyBhIGRpYWdub3N0aWMgaXMgcHJpbnRlZCBvbmx5IGlmIC5zaWxlbnRfZXhlY19mYWlsdXJlIGlzIDAuCisKKy4gT3RoZXJ3aXNlLCB0aGUgcHJvZ3JhbSBpcyBydW4uIElmIGl0IHRlcm1pbmF0ZXMgcmVndWxhcmx5LCBpdHMgZXhpdAorICBjb2RlIGlzIHJldHVybmVkLiBObyBkaWFnbm9zdGljIGlzIHByaW50ZWQsIGV2ZW4gaWYgdGhlIGV4aXQgY29kZSBpcworICBub24temVyby4KKworLiBJZiB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbCwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZQorICBzaWduYWwgbnVtYmVyICsgMTI4LCBpZS4gdGhlIHNhbWUgdmFsdWUgdGhhdCBhIFBPU0lYIHNoZWxsJ3MgJD8gd291bGQKKyAgcmVwb3J0LiAgQSBkaWFnbm9zdGljIGlzIHByaW50ZWQuCisKKworYHN0YXJ0X2FzeW5jYDo6CisKKwlSdW4gYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseS4gVGFrZXMgYSBwb2ludGVyIHRvIGEgYHN0cnVjdAorCWFzeW5jYCB0aGF0IHNwZWNpZmllcyB0aGUgZGV0YWlscyBhbmQgcmV0dXJucyBhIHNldCBvZiBwaXBlIEZEcworCWZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZ1bmN0aW9uLiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisKK2BmaW5pc2hfYXN5bmNgOjoKKworCVdhaXQgZm9yIHRoZSBjb21wbGV0aW9uIG9mIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IHdhcworCXN0YXJ0ZWQgd2l0aCBzdGFydF9hc3luYygpLgorCitgcnVuX2hvb2tgOjoKKworCVJ1biBhIGhvb2suCisJVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgcGF0aG5hbWUgdG8gYW4gaW5kZXggZmlsZSwgb3IgTlVMTAorCWlmIHRoZSBob29rIHVzZXMgdGhlIGRlZmF1bHQgaW5kZXggZmlsZSBvciBubyBpbmRleCBpcyBuZWVkZWQuCisJVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgaG9vay4KKwlUaGUgZnVydGhlciBhcmd1bWVudHMgY29ycmVzcG9uZCB0byB0aGUgaG9vayBhcmd1bWVudHMuCisJVGhlIGxhc3QgYXJndW1lbnQgaGFzIHRvIGJlIE5VTEwgdG8gdGVybWluYXRlIHRoZSBhcmd1bWVudHMgbGlzdC4KKwlJZiB0aGUgaG9vayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgZXhlY3V0YWJsZSwgdGhlIHJldHVybgorCXZhbHVlIHdpbGwgYmUgemVyby4KKwlJZiBpdCBpcyBleGVjdXRhYmxlLCB0aGUgaG9vayB3aWxsIGJlIGV4ZWN1dGVkIGFuZCB0aGUgZXhpdAorCXN0YXR1cyBvZiB0aGUgaG9vayBpcyByZXR1cm5lZC4KKwlPbiBleGVjdXRpb24sIC5zdGRvdXRfdG9fc3RkZXJyIGFuZCAubm9fc3RkaW4gd2lsbCBiZSBzZXQuCisJKFNlZSBiZWxvdy4pCisKKworRGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworKiBgc3RydWN0IGNoaWxkX3Byb2Nlc3NgCisKK1RoaXMgZGVzY3JpYmVzIHRoZSBhcmd1bWVudHMsIHJlZGlyZWN0aW9ucywgYW5kIGVudmlyb25tZW50IG9mIGEKK2NvbW1hbmQgdG8gcnVuIGluIGEgc3ViLXByb2Nlc3MuCisKK1RoZSBjYWxsZXI6CisKKzEuIGFsbG9jYXRlcyBhbmQgY2xlYXJzICh1c2luZyBjaGlsZF9wcm9jZXNzX2luaXQoKSBvcgorICAgQ0hJTERfUFJPQ0VTU19JTklUKSBhIHN0cnVjdCBjaGlsZF9wcm9jZXNzIHZhcmlhYmxlOworMi4gaW5pdGlhbGl6ZXMgdGhlIG1lbWJlcnM7CiszLiBjYWxscyBzdGFydF9jb21tYW5kKCk7Cis0LiBwcm9jZXNzZXMgdGhlIGRhdGE7Cis1LiBjbG9zZXMgZmlsZSBkZXNjcmlwdG9ycyAoaWYgbmVjZXNzYXJ5OyBzZWUgYmVsb3cpOworNi4gY2FsbHMgZmluaXNoX2NvbW1hbmQoKS4KKworVGhlIC5hcmd2IG1lbWJlciBpcyBzZXQgdXAgYXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHBvaW50ZXJzIChOVUxMCit0ZXJtaW5hdGVkKSwgb2Ygd2hpY2ggLmFyZ3ZbMF0gaXMgdGhlIHByb2dyYW0gbmFtZSB0byBydW4gKHVzdWFsbHkKK3dpdGhvdXQgYSBwYXRoKS4gSWYgdGhlIGNvbW1hbmQgdG8gcnVuIGlzIGEgZ2l0IGNvbW1hbmQsIHNldCBhcmd2WzBdIHRvCit0aGUgY29tbWFuZCBuYW1lIHdpdGhvdXQgdGhlICdnaXQtJyBwcmVmaXggYW5kIHNldCAuZ2l0X2NtZCA9IDEuCisKK05vdGUgdGhhdCB0aGUgb3duZXJzaGlwIG9mIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSAuYXJndiBzdGF5cyB3aXRoIHRoZQorY2FsbGVyLCBidXQgaXQgc2hvdWxkIHN1cnZpdmUgdW50aWwgYGZpbmlzaF9jb21tYW5kYCBjb21wbGV0ZXMuIElmIHRoZQorLmFyZ3YgbWVtYmVyIGlzIE5VTEwsIGBzdGFydF9jb21tYW5kYCB3aWxsIHBvaW50IGl0IGF0IHRoZSAuYXJncworYGFyZ3ZfYXJyYXlgIChzbyB5b3UgbWF5IHVzZSBvbmUgb3IgdGhlIG90aGVyLCBidXQgeW91IG11c3QgdXNlIGV4YWN0bHkKK29uZSkuIFRoZSBtZW1vcnkgaW4gLmFyZ3Mgd2lsbCBiZSBjbGVhbmVkIHVwIGF1dG9tYXRpY2FsbHkgZHVyaW5nCitgZmluaXNoX2NvbW1hbmRgIChvciBkdXJpbmcgYHN0YXJ0X2NvbW1hbmRgIHdoZW4gaXQgaXMgdW5zdWNjZXNzZnVsKS4KKworVGhlIG1lbWJlcnMgLmluLCAub3V0LCAuZXJyIGFyZSB1c2VkIHRvIHJlZGlyZWN0IHN0ZGluLCBzdGRvdXQsCitzdGRlcnIgYXMgZm9sbG93czoKKworLiBTcGVjaWZ5IDAgdG8gcmVxdWVzdCBubyBzcGVjaWFsIHJlZGlyZWN0aW9uLiBObyBuZXcgZmlsZSBkZXNjcmlwdG9yCisgIGlzIGFsbG9jYXRlZC4gVGhlIGNoaWxkIHByb2Nlc3Mgc2ltcGx5IGluaGVyaXRzIHRoZSBjaGFubmVsIGZyb20gdGhlCisgIHBhcmVudC4KKworLiBTcGVjaWZ5IC0xIHRvIGhhdmUgYSBwaXBlIGFsbG9jYXRlZDsgc3RhcnRfY29tbWFuZCgpIHJlcGxhY2VzIC0xCisgIGJ5IHRoZSBwaXBlIEZEIGluIHRoZSBmb2xsb3dpbmcgd2F5OgorCisJLmluOiBSZXR1cm5zIHRoZSB3cml0YWJsZSBwaXBlIGVuZCBpbnRvIHdoaWNoIHRoZSBjYWxsZXIgd3JpdGVzOworCQl0aGUgcmVhZGFibGUgZW5kIG9mIHRoZSBwaXBlIGJlY29tZXMgdGhlIGNoaWxkJ3Mgc3RkaW4uCisKKwkub3V0LCAuZXJyOiBSZXR1cm5zIHRoZSByZWFkYWJsZSBwaXBlIGVuZCBmcm9tIHdoaWNoIHRoZSBjYWxsZXIKKwkJcmVhZHM7IHRoZSB3cml0YWJsZSBlbmQgb2YgdGhlIHBpcGUgZW5kIGJlY29tZXMgY2hpbGQncworCQlzdGRvdXQvc3RkZXJyLgorCisgIFRoZSBjYWxsZXIgb2Ygc3RhcnRfY29tbWFuZCgpIG11c3QgY2xvc2UgdGhlIHNvIHJldHVybmVkIEZEcworICBhZnRlciBpdCBoYXMgY29tcGxldGVkIHJlYWRpbmcgZnJvbS93cml0aW5nIHRvIGl0IQorCisuIFNwZWNpZnkgYSBmaWxlIGRlc2NyaXB0b3IgPiAwIHRvIGJlIHVzZWQgYnkgdGhlIGNoaWxkOgorCisJLmluOiBUaGUgRkQgbXVzdCBiZSByZWFkYWJsZTsgaXQgYmVjb21lcyBjaGlsZCdzIHN0ZGluLgorCS5vdXQ6IFRoZSBGRCBtdXN0IGJlIHdyaXRhYmxlOyBpdCBiZWNvbWVzIGNoaWxkJ3Mgc3Rkb3V0LgorCS5lcnI6IFRoZSBGRCBtdXN0IGJlIHdyaXRhYmxlOyBpdCBiZWNvbWVzIGNoaWxkJ3Mgc3RkZXJyLgorCisgIFRoZSBzcGVjaWZpZWQgRkQgaXMgY2xvc2VkIGJ5IHN0YXJ0X2NvbW1hbmQoKSwgZXZlbiBpZiBpdCBmYWlscyB0bworICBydW4gdGhlIHN1Yi1wcm9jZXNzIQorCisuIFNwZWNpYWwgZm9ybXMgb2YgcmVkaXJlY3Rpb24gYXJlIGF2YWlsYWJsZSBieSBzZXR0aW5nIHRoZXNlIG1lbWJlcnMKKyAgdG8gMToKKworCS5ub19zdGRpbiwgLm5vX3N0ZG91dCwgLm5vX3N0ZGVycjogVGhlIHJlc3BlY3RpdmUgY2hhbm5lbCBpcworCQlyZWRpcmVjdGVkIHRvIC9kZXYvbnVsbC4KKworCS5zdGRvdXRfdG9fc3RkZXJyOiBzdGRvdXQgb2YgdGhlIGNoaWxkIGlzIHJlZGlyZWN0ZWQgdG8gaXRzCisJCXN0ZGVyci4gVGhpcyBoYXBwZW5zIGFmdGVyIHN0ZGVyciBpcyBpdHNlbGYgcmVkaXJlY3RlZC4KKwkJU28gc3Rkb3V0IHdpbGwgZm9sbG93IHN0ZGVyciB0byB3aGVyZXZlciBpdCBpcworCQlyZWRpcmVjdGVkLgorCitUbyBtb2RpZnkgdGhlIGVudmlyb25tZW50IG9mIHRoZSBzdWItcHJvY2Vzcywgc3BlY2lmeSBhbiBhcnJheSBvZgorc3RyaW5nIHBvaW50ZXJzIChOVUxMIHRlcm1pbmF0ZWQpIGluIC5lbnY6CisKKy4gSWYgdGhlIHN0cmluZyBpcyBvZiB0aGUgZm9ybSAiVkFSPXZhbHVlIiwgaS5lLiBpdCBjb250YWlucyAnPScKKyAgdGhlIHZhcmlhYmxlIGlzIGFkZGVkIHRvIHRoZSBjaGlsZCBwcm9jZXNzJ3MgZW52aXJvbm1lbnQuCisKKy4gSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluICc9JywgaXQgbmFtZXMgYW4gZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgdGhhdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcydzIGVudmlyb25tZW50LgorCitJZiB0aGUgLmVudiBtZW1iZXIgaXMgTlVMTCwgYHN0YXJ0X2NvbW1hbmRgIHdpbGwgcG9pbnQgaXQgYXQgdGhlCisuZW52X2FycmF5IGBhcmd2X2FycmF5YCAoc28geW91IG1heSB1c2Ugb25lIG9yIHRoZSBvdGhlciwgYnV0IG5vdCBib3RoKS4KK1RoZSBtZW1vcnkgaW4gLmVudl9hcnJheSB3aWxsIGJlIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseSBkdXJpbmcKK2BmaW5pc2hfY29tbWFuZGAgKG9yIGR1cmluZyBgc3RhcnRfY29tbWFuZGAgd2hlbiBpdCBpcyB1bnN1Y2Nlc3NmdWwpLgorCitUbyBzcGVjaWZ5IGEgbmV3IGluaXRpYWwgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoZSBzdWItcHJvY2VzcywKK3NwZWNpZnkgaXQgaW4gdGhlIC5kaXIgbWVtYmVyLgorCitJZiB0aGUgcHJvZ3JhbSBjYW5ub3QgYmUgZm91bmQsIHRoZSBmdW5jdGlvbnMgcmV0dXJuIC0xIGFuZCBzZXQKK2Vycm5vIHRvIEVOT0VOVC4gTm9ybWFsbHksIGFuIGVycm9yIG1lc3NhZ2UgaXMgcHJpbnRlZCwgYnV0IGlmCisuc2lsZW50X2V4ZWNfZmFpbHVyZSBpcyBzZXQgdG8gMSwgbm8gbWVzc2FnZSBpcyBwcmludGVkIGZvciB0aGlzCitzcGVjaWFsIGVycm9yIGNvbmRpdGlvbi4KKworCisqIGBzdHJ1Y3QgYXN5bmNgCisKK1RoaXMgZGVzY3JpYmVzIGEgZnVuY3Rpb24gdG8gcnVuIGFzeW5jaHJvbm91c2x5LCB3aG9zZSBwdXJwb3NlIGlzCit0byBwcm9kdWNlIG91dHB1dCB0aGF0IHRoZSBjYWxsZXIgcmVhZHMuCisKK1RoZSBjYWxsZXI6CisKKzEuIGFsbG9jYXRlcyBhbmQgY2xlYXJzIChtZW1zZXQoJmFzeSwgMCwgc2l6ZW9mKGFzeSkpOykgYQorICAgc3RydWN0IGFzeW5jIHZhcmlhYmxlOworMi4gaW5pdGlhbGl6ZXMgLnByb2MgYW5kIC5kYXRhOworMy4gY2FsbHMgc3RhcnRfYXN5bmMoKTsKKzQuIHByb2Nlc3NlcyBjb21tdW5pY2F0ZXMgd2l0aCBwcm9jIHRocm91Z2ggLmluIGFuZCAub3V0OworNS4gY2xvc2VzIC5pbiBhbmQgLm91dDsKKzYuIGNhbGxzIGZpbmlzaF9hc3luYygpLgorCitUaGUgbWVtYmVycyAuaW4sIC5vdXQgYXJlIHVzZWQgdG8gcHJvdmlkZSBhIHNldCBvZiBmZCdzIGZvcgorY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBjYWxsZXIgYW5kIHRoZSBjYWxsZWUgYXMgZm9sbG93czoKKworLiBTcGVjaWZ5IDAgdG8gaGF2ZSBubyBmaWxlIGRlc2NyaXB0b3IgcGFzc2VkLiAgVGhlIGNhbGxlZSB3aWxsCisgIHJlY2VpdmUgLTEgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuCisKKy4gU3BlY2lmeSA8IDAgdG8gaGF2ZSBhIHBpcGUgYWxsb2NhdGVkOyBzdGFydF9hc3luYygpIHJlcGxhY2VzCisgIHdpdGggdGhlIHBpcGUgRkQgaW4gdGhlIGZvbGxvd2luZyB3YXk6CisKKwkuaW46IFJldHVybnMgdGhlIHdyaXRhYmxlIHBpcGUgZW5kIGludG8gd2hpY2ggdGhlIGNhbGxlcgorCXdyaXRlczsgdGhlIHJlYWRhYmxlIGVuZCBvZiB0aGUgcGlwZSBiZWNvbWVzIHRoZSBmdW5jdGlvbidzCisJaW4gYXJndW1lbnQuCisKKwkub3V0OiBSZXR1cm5zIHRoZSByZWFkYWJsZSBwaXBlIGVuZCBmcm9tIHdoaWNoIHRoZSBjYWxsZXIKKwlyZWFkczsgdGhlIHdyaXRhYmxlIGVuZCBvZiB0aGUgcGlwZSBiZWNvbWVzIHRoZSBmdW5jdGlvbidzCisJb3V0IGFyZ3VtZW50LgorCisgIFRoZSBjYWxsZXIgb2Ygc3RhcnRfYXN5bmMoKSBtdXN0IGNsb3NlIHRoZSByZXR1cm5lZCBGRHMgYWZ0ZXIgaXQKKyAgaGFzIGNvbXBsZXRlZCByZWFkaW5nIGZyb20vd3JpdGluZyBmcm9tIHRoZW0uCisKKy4gU3BlY2lmeSBhIGZpbGUgZGVzY3JpcHRvciA+IDAgdG8gYmUgdXNlZCBieSB0aGUgZnVuY3Rpb246CisKKwkuaW46IFRoZSBGRCBtdXN0IGJlIHJlYWRhYmxlOyBpdCBiZWNvbWVzIHRoZSBmdW5jdGlvbidzIGluLgorCS5vdXQ6IFRoZSBGRCBtdXN0IGJlIHdyaXRhYmxlOyBpdCBiZWNvbWVzIHRoZSBmdW5jdGlvbidzIG91dC4KKworICBUaGUgc3BlY2lmaWVkIEZEIGlzIGNsb3NlZCBieSBzdGFydF9hc3luYygpLCBldmVuIGlmIGl0IGZhaWxzIHRvCisgIHJ1biB0aGUgZnVuY3Rpb24uCisKK1RoZSBmdW5jdGlvbiBwb2ludGVyIGluIC5wcm9jIGhhcyB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToKKworCWludCBwcm9jKGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSk7CisKKy4gaW4sIG91dCBzcGVjaWZpZXMgYSBzZXQgb2YgZmlsZSBkZXNjcmlwdG9ycyB0byB3aGljaCB0aGUgZnVuY3Rpb24KKyAgbXVzdCByZWFkL3dyaXRlIHRoZSBkYXRhIHRoYXQgaXQgbmVlZHMvcHJvZHVjZXMuICBUaGUgZnVuY3Rpb24KKyAgKm11c3QqIGNsb3NlIHRoZXNlIGRlc2NyaXB0b3JzIGJlZm9yZSBpdCByZXR1cm5zLiAgQSBkZXNjcmlwdG9yCisgIG1heSBiZSAtMSBpZiB0aGUgY2FsbGVyIGRpZCBub3QgY29uZmlndXJlIGEgZGVzY3JpcHRvciBmb3IgdGhhdAorICBkaXJlY3Rpb24uCisKKy4gZGF0YSBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgY2FsbGVyIGhhcyBzcGVjaWZpZWQgaW4gdGhlIC5kYXRhIG1lbWJlcgorICBvZiBzdHJ1Y3QgYXN5bmMuCisKKy4gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gaXMgMCBvbiBzdWNjZXNzIGFuZCBub24temVybworICBvbiBmYWlsdXJlLiBJZiB0aGUgZnVuY3Rpb24gaW5kaWNhdGVzIGZhaWx1cmUsIGZpbmlzaF9hc3luYygpIHdpbGwKKyAgcmVwb3J0IGZhaWx1cmUgYXMgd2VsbC4KKworCitUaGVyZSBhcmUgc2VyaW91cyByZXN0cmljdGlvbnMgb24gd2hhdCB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNhbiBkbworYmVjYXVzZSB0aGlzIGZhY2lsaXR5IGlzIGltcGxlbWVudGVkIGJ5IGEgdGhyZWFkIGluIHRoZSBzYW1lIGFkZHJlc3MKK3NwYWNlIG9uIG1vc3QgcGxhdGZvcm1zICh3aGVuIHB0aHJlYWRzIGlzIGF2YWlsYWJsZSksIGJ1dCBieSBhIHBpcGUgdG8KK2EgZm9ya2VkIHByb2Nlc3Mgb3RoZXJ3aXNlOgorCisuIEl0IGNhbm5vdCBjaGFuZ2UgdGhlIHByb2dyYW0ncyBzdGF0ZSAoZ2xvYmFsIHZhcmlhYmxlcywgZW52aXJvbm1lbnQsCisgIGV0Yy4pIGluIGEgd2F5IHRoYXQgdGhlIGNhbGxlciBub3RpY2VzOyBpbiBvdGhlciB3b3JkcywgLmluIGFuZCAub3V0CisgIGFyZSB0aGUgb25seSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHRvIHRoZSBjYWxsZXIuCisKKy4gSXQgbXVzdCBub3QgY2hhbmdlIHRoZSBwcm9ncmFtJ3Mgc3RhdGUgdGhhdCB0aGUgY2FsbGVyIG9mIHRoZQorICBmYWNpbGl0eSBhbHNvIHVzZXMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2V0dXAudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXNldHVwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBlNDU1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXNldHVwLnR4dApAQCAtMCwwICsxLDQ5IEBACitzZXR1cCBBUEkKKz09PT09PT09PQorCitUYWxrIGFib3V0CisKKyogc2V0dXBfZ2l0X2RpcmVjdG9yeSgpCisqIHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCkKKyogaXNfaW5zaWRlX2dpdF9kaXIoKQorKiBpc19pbnNpZGVfd29ya190cmVlKCkKKyogc2V0dXBfd29ya190cmVlKCkKKworKERzY2hvKQorCitQYXRoc3BlYworLS0tLS0tLS0KKworU2VlIGdsb3NzYXJ5LWNvbnRleHQudHh0IGZvciB0aGUgc3ludGF4IG9mIHBhdGhzcGVjLiBJbiBtZW1vcnksIGEKK3BhdGhzcGVjIHNldCBpcyByZXByZXNlbnRlZCBieSAic3RydWN0IHBhdGhzcGVjIiBhbmQgaXMgcHJlcGFyZWQgYnkKK3BhcnNlX3BhdGhzcGVjKCkuIFRoaXMgZnVuY3Rpb24gdGFrZXMgc2V2ZXJhbCBhcmd1bWVudHM6CisKKy0gbWFnaWNfbWFzayBzcGVjaWZpZXMgd2hhdCBmZWF0dXJlcyB0aGF0IGFyZSBOT1Qgc3VwcG9ydGVkIGJ5IHRoZQorICBmb2xsb3dpbmcgY29kZS4gSWYgYSB1c2VyIGF0dGVtcHRzIHRvIHVzZSBzdWNoIGEgZmVhdHVyZSwKKyAgcGFyc2VfcGF0aHNwZWMoKSBjYW4gcmVqZWN0IGl0IGVhcmx5LgorCistIGZsYWdzIHNwZWNpZmllcyBvdGhlciB0aGluZ3MgdGhhdCB0aGUgY2FsbGVyIHdhbnRzIHBhcnNlX3BhdGhzcGVjIHRvCisgIHBlcmZvcm0uCisKKy0gcHJlZml4IGFuZCBhcmdzIGNvbWUgZnJvbSBjbWRfKiBmdW5jdGlvbnMKKworZ2V0X3BhdGhzcGVjKCkgaXMgb2Jzb2xldGUgYW5kIHNob3VsZCBuZXZlciBiZSB1c2VkIGluIG5ldyBjb2RlLgorCitwYXJzZV9wYXRoc3BlYygpIGhlbHBzIGNhdGNoIHVuc3VwcG9ydGVkIGZlYXR1cmVzIGFuZCByZWplY3QgdGhlbQorcG9saXRlbHkuIEF0IGEgbG93ZXIgbGV2ZWwsIGRpZmZlcmVudCBwYXRoc3BlYy1yZWxhdGVkIGZ1bmN0aW9ucyBtYXkKK25vdCBzdXBwb3J0IHRoZSBzYW1lIHNldCBvZiBmZWF0dXJlcy4gU3VjaCBwYXRoc3BlYy1zZW5zaXRpdmUKK2Z1bmN0aW9ucyBhcmUgZ3VhcmRlZCB3aXRoIEdVQVJEX1BBVEhTUEVDKCksIHdoaWNoIHdpbGwgZGllIGluIGFuCit1bmZyaWVuZGx5IHdheSB3aGVuIGFuIHVuc3VwcG9ydGVkIGZlYXR1cmUgaXMgcmVxdWVzdGVkLgorCitUaGUgY29tbWFuZCBkZXNpZ25lcnMgYXJlIHN1cHBvc2VkIHRvIG1ha2Ugc3VyZSB0aGF0IEdVQVJEX1BBVEhTUEVDKCkKK25ldmVyIGRpZXMuIFRoZXkgaGF2ZSB0byBtYWtlIHN1cmUgYWxsIHVuc3VwcG9ydGVkIGZlYXR1cmVzIGFyZSBjYXVnaHQKK2J5IHBhcnNlX3BhdGhzcGVjKCksIG5vdCBieSBHVUFSRF9QQVRIU1BFQy4gZ3JlcHBpbmcgR1VBUkRfUEFUSFNQRUMoKQorc2hvdWxkIGdpdmUgdGhlIGRlc2lnbmVycyBhbGwgcGF0aHNwZWMtc2Vuc2l0aXZlIGNvZGVwYXRocyBhbmQgd2hhdAorZmVhdHVyZXMgdGhleSBzdXBwb3J0LgorCitBIHNpbWlsYXIgcHJvY2VzcyBpcyBhcHBsaWVkIHdoZW4gYSBuZXcgcGF0aHNwZWMgbWFnaWMgaXMgYWRkZWQuIFRoZQorZGVzaWduZXIgbGlmdHMgdGhlIEdVQVJEX1BBVEhTUEVDIHJlc3RyaWN0aW9uIGluIHRoZSBmdW5jdGlvbnMgdGhhdAorc3VwcG9ydCB0aGUgbmV3IG1hZ2ljLiBBdCB0aGUgc2FtZSB0aW1lIChzKWhlIGhhcyB0byBtYWtlIHN1cmUgdGhpcworbmV3IGZlYXR1cmUgd2lsbCBiZSBjYXVnaHQgYXQgcGFyc2VfcGF0aHNwZWMoKSBpbiBjb21tYW5kcyB0aGF0IGNhbm5vdAoraGFuZGxlIHRoZSBuZXcgbWFnaWMgaW4gc29tZSBjYXNlcy4gZ3JlcHBpbmcgcGFyc2VfcGF0aHNwZWMoKSBzaG91bGQKK2hlbHAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2hhMS1hcnJheS50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2hhMS1hcnJheS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U3NTQ5NwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zaGExLWFycmF5LnR4dApAQCAtMCwwICsxLDc2IEBACitzaGExLWFycmF5IEFQSQorPT09PT09PT09PT09PT0KKworVGhlIHNoYTEtYXJyYXkgQVBJIHByb3ZpZGVzIHN0b3JhZ2UgYW5kIG1hbmlwdWxhdGlvbiBvZiBzZXRzIG9mIFNIQS0xCitpZGVudGlmaWVycy4gVGhlIGVtcGhhc2lzIGlzIG9uIHN0b3JhZ2UgYW5kIHByb2Nlc3NpbmcgZWZmaWNpZW5jeSwKK21ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBsYXJnZSBsaXN0cy4gTm90ZSB0aGF0IHRoZSBvcmRlcmluZyBvZiBpdGVtcyBpcworbm90IHByZXNlcnZlZCBvdmVyIHNvbWUgb3BlcmF0aW9ucy4KKworRGF0YSBTdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworYHN0cnVjdCBzaGExX2FycmF5YDo6CisKKwlBIHNpbmdsZSBhcnJheSBvZiBTSEEtMSBoYXNoZXMuIFRoaXMgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJ5CisJYXNzaWdubWVudCBmcm9tIGBTSEExX0FSUkFZX0lOSVRgLiAgVGhlIGBzaGExYCBtZW1iZXIgY29udGFpbnMKKwl0aGUgYWN0dWFsIGRhdGEuIFRoZSBgbnJgIG1lbWJlciBjb250YWlucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluCisJdGhlIHNldC4gIFRoZSBgYWxsb2NgIGFuZCBgc29ydGVkYCBtZW1iZXJzIGFyZSB1c2VkIGludGVybmFsbHksCisJYW5kIHNob3VsZCBub3QgYmUgbmVlZGVkIGJ5IEFQSSBjYWxsZXJzLgorCitGdW5jdGlvbnMKKy0tLS0tLS0tLQorCitgc2hhMV9hcnJheV9hcHBlbmRgOjoKKwlBZGQgYW4gaXRlbSB0byB0aGUgc2V0LiBUaGUgc2hhMSB3aWxsIGJlIHBsYWNlZCBhdCB0aGUgZW5kIG9mCisJdGhlIGFycmF5IChidXQgbm90ZSB0aGF0IHNvbWUgb3BlcmF0aW9ucyBiZWxvdyBtYXkgbG9zZSB0aGlzCisJb3JkZXJpbmcpLgorCitgc2hhMV9hcnJheV9sb29rdXBgOjoKKwlQZXJmb3JtIGEgYmluYXJ5IHNlYXJjaCBvZiB0aGUgYXJyYXkgZm9yIGEgc3BlY2lmaWMgc2hhMS4KKwlJZiBmb3VuZCwgcmV0dXJucyB0aGUgb2Zmc2V0IChpbiBudW1iZXIgb2YgZWxlbWVudHMpIG9mIHRoZQorCXNoYTEuIElmIG5vdCBmb3VuZCwgcmV0dXJucyBhIG5lZ2F0aXZlIGludGVnZXIuIElmIHRoZSBhcnJheSBpcworCW5vdCBzb3J0ZWQsIHRoaXMgZnVuY3Rpb24gaGFzIHRoZSBzaWRlIGVmZmVjdCBvZiBzb3J0aW5nIGl0LgorCitgc2hhMV9hcnJheV9jbGVhcmA6OgorCUZyZWUgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlIGFycmF5IGFuZCByZXR1cm4gaXQgdG8gdGhlCisJaW5pdGlhbCwgZW1wdHkgc3RhdGUuCisKK2BzaGExX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZWA6OgorCUVmZmljaWVudGx5IGl0ZXJhdGUgb3ZlciBlYWNoIHVuaXF1ZSBlbGVtZW50IG9mIHRoZSBsaXN0LAorCWV4ZWN1dGluZyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb25lLiBJZiB0aGUgYXJyYXkgaXMKKwlub3Qgc29ydGVkLCB0aGlzIGZ1bmN0aW9uIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2Ygc29ydGluZyBpdC4KKworRXhhbXBsZXMKKy0tLS0tLS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIHByaW50X2NhbGxiYWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0sCisJCSAgICB2b2lkICpkYXRhKQoreworCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKK30KKwordm9pZCBzb21lX2Z1bmModm9pZCkKK3sKKwlzdHJ1Y3Qgc2hhMV9hcnJheSBoYXNoZXMgPSBTSEExX0FSUkFZX0lOSVQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCS8qIFJlYWQgb2JqZWN0cyBpbnRvIG91ciBzZXQgKi8KKwl3aGlsZSAocmVhZF9vYmplY3RfZnJvbV9zdGRpbihzaGExKSkKKwkJc2hhMV9hcnJheV9hcHBlbmQoJmhhc2hlcywgc2hhMSk7CisKKwkvKiBDaGVjayBpZiBzb21lIG9iamVjdHMgYXJlIGluIG91ciBzZXQgKi8KKwl3aGlsZSAocmVhZF9vYmplY3RfZnJvbV9zdGRpbihzaGExKSkgeworCQlpZiAoc2hhMV9hcnJheV9sb29rdXAoJmhhc2hlcywgc2hhMSkgPj0gMCkKKwkJCXByaW50ZigiaXQncyBpbiB0aGVyZSFcbiIpOworCisJLyoKKwkgKiBQcmludCB0aGUgdW5pcXVlIHNldCBvZiBvYmplY3RzLiBXZSBjb3VsZCBhbHNvIGhhdmUKKwkgKiBhdm9pZGVkIGFkZGluZyBkdXBsaWNhdGUgb2JqZWN0cyBpbiB0aGUgZmlyc3QgcGxhY2UsCisJICogYnV0IHdlIHdvdWxkIGVuZCB1cCByZS1zb3J0aW5nIHRoZSBhcnJheSByZXBlYXRlZGx5LgorCSAqIEluc3RlYWQsIHRoaXMgd2lsbCBzb3J0IG9uY2UgYW5kIHRoZW4gc2tpcCBkdXBsaWNhdGVzCisJICogaW4gbGluZWFyIHRpbWUuCisJICovCisJc2hhMV9hcnJheV9mb3JfZWFjaF91bmlxdWUoJmhhc2hlcywgcHJpbnRfY2FsbGJhY2ssIE5VTEwpOworfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zaWdjaGFpbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2lnY2hhaW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMTE4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc2lnY2hhaW4udHh0CkBAIC0wLDAgKzEsNDEgQEAKK3NpZ2NoYWluIEFQSQorPT09PT09PT09PT09CisKK0NvZGUgb2Z0ZW4gd2FudHMgdG8gc2V0IGEgc2lnbmFsIGhhbmRsZXIgdG8gY2xlYW4gdXAgdGVtcG9yYXJ5IGZpbGVzIG9yCitvdGhlciB3b3JrLWluLXByb2dyZXNzIHdoZW4gd2UgZGllIHVuZXhwZWN0ZWRseS4gRm9yIG11bHRpcGxlIHBpZWNlcyBvZgorY29kZSB0byBkbyB0aGlzIHdpdGhvdXQgY29uZmxpY3RpbmcsIGVhY2ggcGllY2Ugb2YgY29kZSBtdXN0IHJlbWVtYmVyCit0aGUgb2xkIHZhbHVlIG9mIHRoZSBoYW5kbGVyIGFuZCByZXN0b3JlIGl0IGVpdGhlciB3aGVuOgorCisgIDEuIFRoZSB3b3JrLWluLXByb2dyZXNzIGlzIGZpbmlzaGVkLCBhbmQgdGhlIGhhbmRsZXIgaXMgbm8gbG9uZ2VyCisgICAgIG5lY2Vzc2FyeS4gVGhlIGhhbmRsZXIgc2hvdWxkIHJldmVydCB0byB0aGUgb3JpZ2luYWwgYmVoYXZpb3IKKyAgICAgKGVpdGhlciBhbm90aGVyIGhhbmRsZXIsIFNJR19ERkwsIG9yIFNJR19JR04pLgorCisgIDIuIFRoZSBzaWduYWwgaXMgcmVjZWl2ZWQuIFdlIHNob3VsZCB0aGVuIGRvIG91ciBjbGVhbnVwLCB0aGVuIGNoYWluCisgICAgIHRvIHRoZSBuZXh0IGhhbmRsZXIgKG9yIGRpZSBpZiBpdCBpcyBTSUdfREZMKS4KKworU2lnY2hhaW4gaXMgYSB0aW55IGxpYnJhcnkgZm9yIGtlZXBpbmcgYSBzdGFjayBvZiBoYW5kbGVycy4gWW91ciBoYW5kbGVyCithbmQgaW5zdGFsbGF0aW9uIGNvZGUgc2hvdWxkIGxvb2sgc29tZXRoaW5nIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICB2b2lkIGNsZWFuX2Zvb19vbl9zaWduYWwoaW50IHNpZykKKyAgeworCSAgY2xlYW5fZm9vKCk7CisJICBzaWdjaGFpbl9wb3Aoc2lnKTsKKwkgIHJhaXNlKHNpZyk7CisgIH0KKworICB2b2lkIG90aGVyX2Z1bmMoKQorICB7CisJICBzaWdjaGFpbl9wdXNoX2NvbW1vbihjbGVhbl9mb29fb25fc2lnbmFsKTsKKwkgIG1lc3NfdXBfZm9vKCk7CisJICBjbGVhbl9mb28oKTsKKyAgfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hhbmRsZXJzIGFyZSBnaXZlbiB0aGUgdHlwZWRlZiBvZiBzaWdjaGFpbl9mdW4uIFRoaXMgaXMgdGhlIHNhbWUgdHlwZQordGhhdCBpcyBnaXZlbiB0byBzaWduYWwoKSBvciBzaWdhY3Rpb24oKS4gSXQgaXMgcGVyZmVjdGx5IHJlYXNvbmFibGUgdG8KK3B1c2ggU0lHX0RGTCBvciBTSUdfSUdOIG9udG8gdGhlIHN0YWNrLgorCitZb3UgY2FuIHNpZ2NoYWluX3B1c2ggYW5kIHNpZ2NoYWluX3BvcCBpbmRpdmlkdWFsIHNpZ25hbHMuIEZvcgorY29udmVuaWVuY2UsIHNpZ2NoYWluX3B1c2hfY29tbW9uIHdpbGwgcHVzaCB0aGUgaGFuZGxlciBvbnRvIHRoZSBzdGFjaworZm9yIG1hbnkgY29tbW9uIHNpZ25hbHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktc3RyaW5nLWxpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN0cmluZy1saXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDg0MDJiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN0cmluZy1saXN0LnR4dApAQCAtMCwwICsxLDIwOSBAQAorc3RyaW5nLWxpc3QgQVBJCis9PT09PT09PT09PT09PT0KKworVGhlIHN0cmluZ19saXN0IEFQSSBvZmZlcnMgYSBkYXRhIHN0cnVjdHVyZSBhbmQgZnVuY3Rpb25zIHRvIGhhbmRsZQorc29ydGVkIGFuZCB1bnNvcnRlZCBzdHJpbmcgbGlzdHMuICBBICJzb3J0ZWQiIGxpc3QgaXMgb25lIHdob3NlCitlbnRyaWVzIGFyZSBzb3J0ZWQgYnkgc3RyaW5nIHZhbHVlIGluIGBzdHJjbXAoKWAgb3JkZXIuCisKK1RoZSAnc3RyaW5nX2xpc3QnIHN0cnVjdCB1c2VkIHRvIGJlIGNhbGxlZCAncGF0aF9saXN0JywgYnV0IHdhcyByZW5hbWVkCitiZWNhdXNlIGl0IGlzIG5vdCBzcGVjaWZpYyB0byBwYXRocy4KKworVGhlIGNhbGxlcjoKKworLiBBbGxvY2F0ZXMgYW5kIGNsZWFycyBhIGBzdHJ1Y3Qgc3RyaW5nX2xpc3RgIHZhcmlhYmxlLgorCisuIEluaXRpYWxpemVzIHRoZSBtZW1iZXJzLiBZb3UgbWlnaHQgd2FudCB0byBzZXQgdGhlIGZsYWcgYHN0cmR1cF9zdHJpbmdzYAorICBpZiB0aGUgc3RyaW5ncyBzaG91bGQgYmUgc3RyZHVwKCllZC4gRm9yIGV4YW1wbGUsIHRoaXMgaXMgbmVjZXNzYXJ5CisgIHdoZW4geW91IGFkZCBzb21ldGhpbmcgbGlrZSBnaXRfcGF0aCgiLi4uIiksIHNpbmNlIHRoYXQgZnVuY3Rpb24gcmV0dXJucworICBhIHN0YXRpYyBidWZmZXIgdGhhdCB3aWxsIGNoYW5nZSB3aXRoIHRoZSBuZXh0IGNhbGwgdG8gZ2l0X3BhdGgoKS4KKysKK0lmIHlvdSBuZWVkIHNvbWV0aGluZyBhZHZhbmNlZCwgeW91IGNhbiBtYW51YWxseSBtYWxsb2MoKSB0aGUgYGl0ZW1zYAorbWVtYmVyICh5b3UgbmVlZCB0aGlzIGlmIHlvdSBhZGQgdGhpbmdzIGxhdGVyKSBhbmQgeW91IHNob3VsZCBzZXQgdGhlCitgbnJgIGFuZCBgYWxsb2NgIG1lbWJlcnMgaW4gdGhhdCBjYXNlLCB0b28uCisKKy4gQWRkcyBuZXcgaXRlbXMgdG8gdGhlIGxpc3QsIHVzaW5nIGBzdHJpbmdfbGlzdF9hcHBlbmRgLAorICBgc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwYCwgYHN0cmluZ19saXN0X2luc2VydGAsCisgIGBzdHJpbmdfbGlzdF9zcGxpdGAsIGFuZC9vciBgc3RyaW5nX2xpc3Rfc3BsaXRfaW5fcGxhY2VgLgorCisuIENhbiBjaGVjayBpZiBhIHN0cmluZyBpcyBpbiB0aGUgbGlzdCB1c2luZyBgc3RyaW5nX2xpc3RfaGFzX3N0cmluZ2Agb3IKKyAgYHVuc29ydGVkX3N0cmluZ19saXN0X2hhc19zdHJpbmdgIGFuZCBnZXQgaXQgZnJvbSB0aGUgbGlzdCB1c2luZworICBgc3RyaW5nX2xpc3RfbG9va3VwYCBmb3Igc29ydGVkIGxpc3RzLgorCisuIENhbiBzb3J0IGFuIHVuc29ydGVkIGxpc3QgdXNpbmcgYHN0cmluZ19saXN0X3NvcnRgLgorCisuIENhbiByZW1vdmUgZHVwbGljYXRlIGl0ZW1zIGZyb20gYSBzb3J0ZWQgbGlzdCB1c2luZworICBgc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXNgLgorCisuIENhbiByZW1vdmUgaW5kaXZpZHVhbCBpdGVtcyBvZiBhbiB1bnNvcnRlZCBsaXN0IHVzaW5nCisgIGB1bnNvcnRlZF9zdHJpbmdfbGlzdF9kZWxldGVfaXRlbWAuCisKKy4gQ2FuIHJlbW92ZSBpdGVtcyBub3QgbWF0Y2hpbmcgYSBjcml0ZXJpb24gZnJvbSBhIHNvcnRlZCBvciB1bnNvcnRlZAorICBsaXN0IHVzaW5nIGBmaWx0ZXJfc3RyaW5nX2xpc3RgLCBvciByZW1vdmUgZW1wdHkgc3RyaW5ncyB1c2luZworICBgc3RyaW5nX2xpc3RfcmVtb3ZlX2VtcHR5X2l0ZW1zYC4KKworLiBGaW5hbGx5IGl0IHNob3VsZCBmcmVlIHRoZSBsaXN0IHVzaW5nIGBzdHJpbmdfbGlzdF9jbGVhcmAuCisKK0V4YW1wbGU6CisKKy0tLS0KK3N0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKK2ludCBpOworCitzdHJpbmdfbGlzdF9hcHBlbmQoJmxpc3QsICJmb28iKTsKK3N0cmluZ19saXN0X2FwcGVuZCgmbGlzdCwgImJhciIpOworZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykKKwlwcmludGYoIiVzXG4iLCBsaXN0Lml0ZW1zW2ldLnN0cmluZykKKy0tLS0KKworTk9URTogSXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gYnVpbGQgYW4gdW5zb3J0ZWQgbGlzdCBhbmQgc29ydCBpdAorYWZ0ZXJ3YXJkcywgaW5zdGVhZCBvZiBidWlsZGluZyBhIHNvcnRlZCBsaXN0IChgTyhuIGxvZyBuKWAgaW5zdGVhZCBvZgorYE8obl4yKWApLgorKworSG93ZXZlciwgaWYgeW91IHVzZSB0aGUgbGlzdCB0byBjaGVjayBpZiBhIGNlcnRhaW4gc3RyaW5nIHdhcyBhZGRlZAorYWxyZWFkeSwgeW91IHNob3VsZCBub3QgZG8gdGhhdCAodXNpbmcgdW5zb3J0ZWRfc3RyaW5nX2xpc3RfaGFzX3N0cmluZygpKSwKK2JlY2F1c2UgdGhlIGNvbXBsZXhpdHkgd291bGQgYmUgcXVhZHJhdGljIGFnYWluIChidXQgd2l0aCBhIHdvcnNlIGZhY3RvcikuCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKKyogR2VuZXJhbCBvbmVzICh3b3JrcyB3aXRoIHNvcnRlZCBhbmQgdW5zb3J0ZWQgbGlzdHMgYXMgd2VsbCkKKworYHN0cmluZ19saXN0X2luaXRgOjoKKworCUluaXRpYWxpemUgdGhlIG1lbWJlcnMgb2YgdGhlIHN0cmluZ19saXN0LCBzZXQgYHN0cmR1cF9zdHJpbmdzYAorCW1lbWJlciBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgcGFyYW1ldGVyLgorCitgZmlsdGVyX3N0cmluZ19saXN0YDo6CisKKwlBcHBseSBhIGZ1bmN0aW9uIHRvIGVhY2ggaXRlbSBpbiBhIGxpc3QsIHJldGFpbmluZyBvbmx5IHRoZQorCWl0ZW1zIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlLiAgSWYgZnJlZV91dGlsIGlzCisJdHJ1ZSwgY2FsbCBmcmVlKCkgb24gdGhlIHV0aWwgbWVtYmVycyBvZiBhbnkgaXRlbXMgdGhhdCBoYXZlCisJdG8gYmUgZGVsZXRlZC4gIFByZXNlcnZlIHRoZSBvcmRlciBvZiB0aGUgaXRlbXMgdGhhdCBhcmUKKwlyZXRhaW5lZC4KKworYHN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtc2A6OgorCisJUmVtb3ZlIGFueSBlbXB0eSBzdHJpbmdzIGZyb20gdGhlIGxpc3QuICBJZiBmcmVlX3V0aWwgaXMgdHJ1ZSwKKwljYWxsIGZyZWUoKSBvbiB0aGUgdXRpbCBtZW1iZXJzIG9mIGFueSBpdGVtcyB0aGF0IGhhdmUgdG8gYmUKKwlkZWxldGVkLiAgUHJlc2VydmUgdGhlIG9yZGVyIG9mIHRoZSBpdGVtcyB0aGF0IGFyZSByZXRhaW5lZC4KKworYHByaW50X3N0cmluZ19saXN0YDo6CisKKwlEdW1wIGEgc3RyaW5nX2xpc3QgdG8gc3Rkb3V0LCB1c2VmdWwgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIEl0CisJY2FuIHRha2UgYW4gb3B0aW9uYWwgaGVhZGVyIGFyZ3VtZW50IGFuZCBpdCB3cml0ZXMgb3V0IHRoZQorCXN0cmluZy1wb2ludGVyIHBhaXJzIG9mIHRoZSBzdHJpbmdfbGlzdCwgZWFjaCBvbmUgaW4gaXRzIG93biBsaW5lLgorCitgc3RyaW5nX2xpc3RfY2xlYXJgOjoKKworCUZyZWUgYSBzdHJpbmdfbGlzdC4gVGhlIGBzdHJpbmdgIHBvaW50ZXIgb2YgdGhlIGl0ZW1zIHdpbGwgYmUgZnJlZWQgaW4KKwljYXNlIHRoZSBgc3RyZHVwX3N0cmluZ3NgIG1lbWJlciBvZiB0aGUgc3RyaW5nX2xpc3QgaXMgc2V0LiBUaGUgc2Vjb25kCisJcGFyYW1ldGVyIGNvbnRyb2xzIGlmIHRoZSBgdXRpbGAgcG9pbnRlciBvZiB0aGUgaXRlbXMgc2hvdWxkIGJlIGZyZWVkCisJb3Igbm90LgorCisqIEZ1bmN0aW9ucyBmb3Igc29ydGVkIGxpc3RzIG9ubHkKKworYHN0cmluZ19saXN0X2hhc19zdHJpbmdgOjoKKworCURldGVybWluZSBpZiB0aGUgc3RyaW5nX2xpc3QgaGFzIGEgZ2l2ZW4gc3RyaW5nIG9yIG5vdC4KKworYHN0cmluZ19saXN0X2luc2VydGA6OgorCisJSW5zZXJ0IGEgbmV3IGVsZW1lbnQgdG8gdGhlIHN0cmluZ19saXN0LiBUaGUgcmV0dXJuZWQgcG9pbnRlciBjYW4gYmUKKwloYW5keSBpZiB5b3Ugd2FudCB0byB3cml0ZSBzb21ldGhpbmcgdG8gdGhlIGB1dGlsYCBwb2ludGVyIG9mIHRoZQorCXN0cmluZ19saXN0X2l0ZW0gY29udGFpbmluZyB0aGUganVzdCBhZGRlZCBzdHJpbmcuIElmIHRoZSBnaXZlbgorCXN0cmluZyBhbHJlYWR5IGV4aXN0cyB0aGUgaW5zZXJ0aW9uIHdpbGwgYmUgc2tpcHBlZCBhbmQgdGhlCisJcG9pbnRlciB0byB0aGUgZXhpc3RpbmcgaXRlbSByZXR1cm5lZC4KKysKK1NpbmNlIHRoaXMgZnVuY3Rpb24gdXNlcyB4cmVhbGxvYygpICh3aGljaCBkaWUoKXMgaWYgaXQgZmFpbHMpIGlmIHRoZQorbGlzdCBuZWVkcyB0byBncm93LCBpdCBpcyBzYWZlIG5vdCB0byBjaGVjayB0aGUgcG9pbnRlci4gSS5lLiB5b3UgbWF5Cit3cml0ZSBgc3RyaW5nX2xpc3RfaW5zZXJ0KC4uLiktPnV0aWwgPSAuLi47YC4KKworYHN0cmluZ19saXN0X2xvb2t1cGA6OgorCisJTG9vayB1cCBhIGdpdmVuIHN0cmluZyBpbiB0aGUgc3RyaW5nX2xpc3QsIHJldHVybmluZyB0aGUgY29udGFpbmluZworCXN0cmluZ19saXN0X2l0ZW0uIElmIHRoZSBzdHJpbmcgaXMgbm90IGZvdW5kLCBOVUxMIGlzIHJldHVybmVkLgorCitgc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXNgOjoKKworCVJlbW92ZSBhbGwgYnV0IHRoZSBmaXJzdCBvZiBjb25zZWN1dGl2ZSBlbnRyaWVzIHRoYXQgaGF2ZSB0aGUKKwlzYW1lIHN0cmluZyB2YWx1ZS4gIElmIGZyZWVfdXRpbCBpcyB0cnVlLCBjYWxsIGZyZWUoKSBvbiB0aGUKKwl1dGlsIG1lbWJlcnMgb2YgYW55IGl0ZW1zIHRoYXQgaGF2ZSB0byBiZSBkZWxldGVkLgorCisqIEZ1bmN0aW9ucyBmb3IgdW5zb3J0ZWQgbGlzdHMgb25seQorCitgc3RyaW5nX2xpc3RfYXBwZW5kYDo6CisKKwlBcHBlbmQgYSBuZXcgc3RyaW5nIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZ19saXN0LiAgSWYKKwlgc3RyZHVwX3N0cmluZ2AgaXMgc2V0LCB0aGVuIHRoZSBzdHJpbmcgYXJndW1lbnQgaXMgY29waWVkOworCW90aGVyd2lzZSB0aGUgbmV3IGBzdHJpbmdfbGlzdF9lbnRyeWAgcmVmZXJzIHRvIHRoZSBpbnB1dAorCXN0cmluZy4KKworYHN0cmluZ19saXN0X2FwcGVuZF9ub2R1cGA6OgorCisJQXBwZW5kIGEgbmV3IHN0cmluZyB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmdfbGlzdC4gIFRoZSBuZXcKKwlgc3RyaW5nX2xpc3RfZW50cnlgIGFsd2F5cyByZWZlcnMgdG8gdGhlIGlucHV0IHN0cmluZywgZXZlbiBpZgorCWBzdHJkdXBfc3RyaW5nYCBpcyBzZXQuICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGhhbmQKKwlvd25lcnNoaXAgb2YgYSBtYWxsb2MoKWVkIHN0cmluZyB0byBhIGBzdHJpbmdfbGlzdGAgdGhhdCBoYXMKKwlgc3RyZHVwX3N0cmluZ2Agc2V0LgorCitgc3RyaW5nX2xpc3Rfc29ydGA6OgorCisJU29ydCB0aGUgbGlzdCdzIGVudHJpZXMgYnkgc3RyaW5nIHZhbHVlIGluIGBzdHJjbXAoKWAgb3JkZXIuCisKK2B1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nYDo6CisKKwlJdCdzIGxpa2UgYHN0cmluZ19saXN0X2hhc19zdHJpbmcoKWAgYnV0IGZvciB1bnNvcnRlZCBsaXN0cy4KKworYHVuc29ydGVkX3N0cmluZ19saXN0X2xvb2t1cGA6OgorCisJSXQncyBsaWtlIGBzdHJpbmdfbGlzdF9sb29rdXAoKWAgYnV0IGZvciB1bnNvcnRlZCBsaXN0cy4KKysKK1RoZSBhYm92ZSB0d28gZnVuY3Rpb25zIG5lZWQgdG8gbG9vayB0aHJvdWdoIGFsbCBpdGVtcywgYXMgb3Bwb3NlZCB0byB0aGVpcgorY291bnRlcnBhcnQgZm9yIHNvcnRlZCBsaXN0cywgd2hpY2ggcGVyZm9ybXMgYSBiaW5hcnkgc2VhcmNoLgorCitgdW5zb3J0ZWRfc3RyaW5nX2xpc3RfZGVsZXRlX2l0ZW1gOjoKKworCVJlbW92ZSBhbiBpdGVtIGZyb20gYSBzdHJpbmdfbGlzdC4gVGhlIGBzdHJpbmdgIHBvaW50ZXIgb2YgdGhlIGl0ZW1zCisJd2lsbCBiZSBmcmVlZCBpbiBjYXNlIHRoZSBgc3RyZHVwX3N0cmluZ3NgIG1lbWJlciBvZiB0aGUgc3RyaW5nX2xpc3QKKwlpcyBzZXQuIFRoZSB0aGlyZCBwYXJhbWV0ZXIgY29udHJvbHMgaWYgdGhlIGB1dGlsYCBwb2ludGVyIG9mIHRoZQorCWl0ZW1zIHNob3VsZCBiZSBmcmVlZCBvciBub3QuCisKK2BzdHJpbmdfbGlzdF9zcGxpdGA6OgorYHN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlYDo6CisKKwlTcGxpdCBhIHN0cmluZyBpbnRvIHN1YnN0cmluZ3Mgb24gYSBkZWxpbWl0ZXIgY2hhcmFjdGVyIGFuZAorCWFwcGVuZCB0aGUgc3Vic3RyaW5ncyB0byBhIGBzdHJpbmdfbGlzdGAuICBJZiBgbWF4c3BsaXRgIGlzCisJbm9uLW5lZ2F0aXZlLCB0aGVuIHNwbGl0IGF0IG1vc3QgYG1heHNwbGl0YCB0aW1lcy4gIFJldHVybiB0aGUKKwludW1iZXIgb2Ygc3Vic3RyaW5ncyBhcHBlbmRlZCB0byB0aGUgbGlzdC4KKysKK2BzdHJpbmdfbGlzdF9zcGxpdGAgcmVxdWlyZXMgYSBgc3RyaW5nX2xpc3RgIHRoYXQgaGFzIGBzdHJkdXBfc3RyaW5nc2AKK3NldCB0byB0cnVlOyBpdCBsZWF2ZXMgdGhlIGlucHV0IHN0cmluZyB1bnRvdWNoZWQgYW5kIG1ha2VzIGNvcGllcyBvZgordGhlIHN1YnN0cmluZ3MgaW4gbmV3bHktYWxsb2NhdGVkIG1lbW9yeS4KK2BzdHJpbmdfbGlzdF9zcGxpdF9pbl9wbGFjZWAgcmVxdWlyZXMgYSBgc3RyaW5nX2xpc3RgIHRoYXQgaGFzCitgc3RyZHVwX3N0cmluZ3NgIHNldCB0byBmYWxzZTsgaXQgc3BsaXRzIHRoZSBpbnB1dCBzdHJpbmcgaW4gcGxhY2UsCitvdmVyd3JpdGluZyB0aGUgZGVsaW1pdGVyIGNoYXJhY3RlcnMgd2l0aCBOVUxzIGFuZCBjcmVhdGluZyBuZXcKK3N0cmluZ19saXN0X2l0ZW1zIHRoYXQgcG9pbnQgaW50byB0aGUgb3JpZ2luYWwgc3RyaW5nICh0aGUgb3JpZ2luYWwKK3N0cmluZyBtdXN0IHRoZXJlZm9yZSBub3QgYmUgbW9kaWZpZWQgb3IgZnJlZWQgd2hpbGUgdGhlIGBzdHJpbmdfbGlzdGAKK2lzIGluIHVzZSkuCisKKworRGF0YSBzdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworKiBgc3RydWN0IHN0cmluZ19saXN0X2l0ZW1gCisKK1JlcHJlc2VudHMgYW4gaXRlbSBvZiB0aGUgbGlzdC4gVGhlIGBzdHJpbmdgIG1lbWJlciBpcyBhIHBvaW50ZXIgdG8gdGhlCitzdHJpbmcsIGFuZCB5b3UgbWF5IHVzZSB0aGUgYHV0aWxgIG1lbWJlciBmb3IgYW55IHB1cnBvc2UsIGlmIHlvdSB3YW50LgorCisqIGBzdHJ1Y3Qgc3RyaW5nX2xpc3RgCisKK1JlcHJlc2VudHMgdGhlIGxpc3QgaXRzZWxmLgorCisuIFRoZSBhcnJheSBvZiBpdGVtcyBhcmUgYXZhaWxhYmxlIHZpYSB0aGUgYGl0ZW1zYCBtZW1iZXIuCisuIFRoZSBgbnJgIG1lbWJlciBjb250YWlucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHN0b3JlZCBpbiB0aGUgbGlzdC4KKy4gVGhlIGBhbGxvY2AgbWVtYmVyIGlzIHVzZWQgdG8gYXZvaWQgcmVhbGxvY2F0aW5nIGF0IGV2ZXJ5IGluc2VydGlvbi4KKyAgWW91IHNob3VsZCBub3QgdGFtcGVyIHdpdGggaXQuCisuIFNldHRpbmcgdGhlIGBzdHJkdXBfc3RyaW5nc2AgbWVtYmVyIHRvIDEgd2lsbCBzdHJkdXAoKSB0aGUgc3RyaW5ncworICBiZWZvcmUgYWRkaW5nIHRoZW0sIHNlZSBhYm92ZS4KKy4gVGhlIGBjb21wYXJlX3N0cmluZ3NfZm5gIG1lbWJlciBpcyB1c2VkIHRvIHNwZWNpZnkgYSBjdXN0b20gY29tcGFyZQorICBmdW5jdGlvbiwgb3RoZXJ3aXNlIGBzdHJjbXAoKWAgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCBmdW5jdGlvbi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdWJtb2R1bGUtY29uZmlnLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1zdWJtb2R1bGUtY29uZmlnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDFmYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXN1Ym1vZHVsZS1jb25maWcudHh0CkBAIC0wLDAgKzEsNjIgQEAKK3N1Ym1vZHVsZSBjb25maWcgY2FjaGUgQVBJCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgc3VibW9kdWxlIGNvbmZpZyBjYWNoZSBBUEkgYWxsb3dzIHRvIHJlYWQgc3VibW9kdWxlCitjb25maWd1cmF0aW9ucy9pbmZvcm1hdGlvbiBmcm9tIHNwZWNpZmllZCByZXZpc2lvbnMuIEludGVybmFsbHkKK2luZm9ybWF0aW9uIGlzIGxhemlseSByZWFkIGludG8gYSBjYWNoZSB0aGF0IGlzIHVzZWQgdG8gYXZvaWQKK3VubmVjZXNzYXJ5IHBhcnNpbmcgb2YgdGhlIHNhbWUgLmdpdG1vZHVsZSBmaWxlcy4gTG9va3VwcyBjYW4gYmUgZG9uZSBieQorc3VibW9kdWxlIHBhdGggb3IgbmFtZS4KKworVXNhZ2UKKy0tLS0tCisKK1RvIGluaXRpYWxpemUgdGhlIGNhY2hlIHdpdGggY29uZmlndXJhdGlvbnMgZnJvbSB0aGUgd29ya3RyZWUgdGhlIGNhbGxlcgordHlwaWNhbGx5IGZpcnN0IGNhbGxzIGBnaXRtb2R1bGVzX2NvbmZpZygpYCB0byByZWFkIHZhbHVlcyBmcm9tIHRoZQord29ya3RyZWUgLmdpdG1vZHVsZXMgYW5kIHRoZW4gdG8gb3ZlcmxheSB0aGUgbG9jYWwgZ2l0IGNvbmZpZyB2YWx1ZXMKK2BwYXJzZV9zdWJtb2R1bGVfY29uZmlnX29wdGlvbigpYCBmcm9tIHRoZSBjb25maWcgcGFyc2luZworaW5mcmFzdHJ1Y3R1cmUuCisKK1RoZSBjYWxsZXIgY2FuIGxvb2sgdXAgaW5mb3JtYXRpb24gYWJvdXQgc3VibW9kdWxlcyBieSB1c2luZyB0aGUKK2BzdWJtb2R1bGVfZnJvbV9wYXRoKClgIG9yIGBzdWJtb2R1bGVfZnJvbV9uYW1lKClgIGZ1bmN0aW9ucy4gVGhleSByZXR1cm4KK2EgYHN0cnVjdCBzdWJtb2R1bGVgIHdoaWNoIGNvbnRhaW5zIHRoZSB2YWx1ZXMuIFRoZSBBUEkgYXV0b21hdGljYWxseQoraW5pdGlhbGl6ZXMgYW5kIGFsbG9jYXRlcyB0aGUgbmVlZGVkIGluZnJhc3RydWN0dXJlIG9uLWRlbWFuZC4gSWYgdGhlCitjYWxsZXIgZG9lcyBvbmx5IHdhbnQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHJldmlzaW9ucyB0aGUgaW5pdGlhbGl6YXRpb24KK2NhbiBiZSBza2lwcGVkLgorCitJZiB0aGUgaW50ZXJuYWwgY2FjaGUgbWlnaHQgZ3JvdyB0b28gYmlnIG9yIHdoZW4gdGhlIGNhbGxlciBpcyBkb25lIHdpdGgKK3RoZSBBUEksIGFsbCBpbnRlcm5hbGx5IGNhY2hlZCB2YWx1ZXMgY2FuIGJlIGZyZWVkIHdpdGggc3VibW9kdWxlX2ZyZWUoKS4KKworRGF0YSBTdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworYHN0cnVjdCBzdWJtb2R1bGVgOjoKKworCVRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmV0dXJuIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBvbmUKKwlzdWJtb2R1bGUgZm9yIGEgY2VydGFpbiByZXZpc2lvbi4gSXQgaXMgcmV0dXJuZWQgYnkgdGhlIGxvb2t1cAorCWZ1bmN0aW9ucy4KKworRnVuY3Rpb25zCistLS0tLS0tLS0KKworYHZvaWQgc3VibW9kdWxlX2ZyZWUoKWA6OgorCisJVXNlIHRoZXNlIHRvIGZyZWUgdGhlIGludGVybmFsbHkgY2FjaGVkIHZhbHVlcy4KKworYGludCBwYXJzZV9zdWJtb2R1bGVfY29uZmlnX29wdGlvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKWA6OgorCisJQ2FuIGJlIHBhc3NlZCB0byB0aGUgY29uZmlnIHBhcnNpbmcgaW5mcmFzdHJ1Y3R1cmUgdG8gcGFyc2UKKwlsb2NhbCAod29ya3RyZWUpIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9ucy4KKworYGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX3BhdGgoY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWl0X3NoYTEsIGNvbnN0IGNoYXIgKnBhdGgpYDo6CisKKwlMb29rdXAgdmFsdWVzIGZvciBvbmUgc3VibW9kdWxlIGJ5IGl0cyBjb21taXRfc2hhMSBhbmQgcGF0aC4KKworYGNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWl0X3NoYTEsIGNvbnN0IGNoYXIgKm5hbWUpYDo6CisKKwlUaGUgc2FtZSBhcyBhYm92ZSBidXQgbG9va3VwIGJ5IG5hbWUuCisKK0lmIGdpdmVuIHRoZSBudWxsX3NoYTEgYXMgY29tbWl0X3NoYTEgdGhlIGxvY2FsIGNvbmZpZ3VyYXRpb24gb2YgYQorc3VibW9kdWxlIHdpbGwgYmUgcmV0dXJuZWQgKGUuZy4gY29uc29saWRhdGVkIHZhbHVlcyBmcm9tIGxvY2FsIGdpdAorY29uZmlndXJhdGlvbiBhbmQgdGhlIC5naXRtb2R1bGVzIGZpbGUgaW4gdGhlIHdvcmt0cmVlKS4KKworRm9yIGFuIGV4YW1wbGUgdXNhZ2Ugc2VlIHRlc3Qtc3VibW9kdWxlLWNvbmZpZy5jLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk3YTY1MQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS10cmFjZS50eHQKQEAgLTAsMCArMSw5NyBAQAordHJhY2UgQVBJCis9PT09PT09PT0KKworVGhlIHRyYWNlIEFQSSBjYW4gYmUgdXNlZCB0byBwcmludCBkZWJ1ZyBtZXNzYWdlcyB0byBzdGRlcnIgb3IgYSBmaWxlLiBUcmFjZQorY29kZSBpcyBpbmFjdGl2ZSB1bmxlc3MgZXhwbGljaXRseSBlbmFibGVkIGJ5IHNldHRpbmcgYEdJVF9UUkFDRSpgIGVudmlyb25tZW50Cit2YXJpYWJsZXMuCisKK1RoZSB0cmFjZSBpbXBsZW1lbnRhdGlvbiBhdXRvbWF0aWNhbGx5IGFkZHMgYHRpbWVzdGFtcCBmaWxlOmxpbmUgLi4uIFxuYCB0bworYWxsIHRyYWNlIG1lc3NhZ2VzLiBFLmcuOgorCistLS0tLS0tLS0tLS0KKzIzOjU5OjU5LjEyMzQ1NiBnaXQuYzozMTIgICAgICAgICAgICAgICB0cmFjZTogYnVpbHQtaW46IGdpdCAnZm9vJworMDA6MDA6MDAuMDAwMDAxIGJ1aWx0aW4vZm9vLmM6OTkgICAgICAgIGZvbzogc29tZSBtZXNzYWdlCistLS0tLS0tLS0tLS0KKworRGF0YSBTdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworYHN0cnVjdCB0cmFjZV9rZXlgOjoKKworCURlZmluZXMgYSB0cmFjZSBrZXkgKG9yIGNhdGVnb3J5KS4gVGhlIGRlZmF1bHQgKGZvciBBUEkgZnVuY3Rpb25zIHRoYXQKKwlkb24ndCB0YWtlIGEga2V5KSBpcyBgR0lUX1RSQUNFYC4KKysKK0UuZy4gdG8gZGVmaW5lIGEgdHJhY2Uga2V5IGNvbnRyb2xsZWQgYnkgZW52aXJvbm1lbnQgdmFyaWFibGUgYEdJVF9UUkFDRV9GT09gOgorKworLS0tLS0tLS0tLS0tCitzdGF0aWMgc3RydWN0IHRyYWNlX2tleSB0cmFjZV9mb28gPSBUUkFDRV9LRVlfSU5JVChGT08pOworCitzdGF0aWMgdm9pZCB0cmFjZV9wcmludF9mb28oY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwl0cmFjZV9wcmludF9rZXkoJnRyYWNlX2ZvbywgbWVzc2FnZSk7Cit9CistLS0tLS0tLS0tLS0KKysKK05vdGU6IGRvbid0IHVzZSBgY29uc3RgIGFzIHRoZSB0cmFjZSBpbXBsZW1lbnRhdGlvbiBzdG9yZXMgaW50ZXJuYWwgc3RhdGUgaW4KK3RoZSBgdHJhY2Vfa2V5YCBzdHJ1Y3R1cmUuCisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKK2BpbnQgdHJhY2Vfd2FudChzdHJ1Y3QgdHJhY2Vfa2V5ICprZXkpYDo6CisKKwlDaGVja3Mgd2hldGhlciB0aGUgdHJhY2Uga2V5IGlzIGVuYWJsZWQuIFVzZWQgdG8gcHJldmVudCBleHBlbnNpdmUKKwlzdHJpbmcgZm9ybWF0dGluZyBiZWZvcmUgY2FsbGluZyBvbmUgb2YgdGhlIHByaW50aW5nIEFQSXMuCisKK2B2b2lkIHRyYWNlX2Rpc2FibGUoc3RydWN0IHRyYWNlX2tleSAqa2V5KWA6OgorCisJRGlzYWJsZXMgdHJhY2luZyBmb3IgdGhlIHNwZWNpZmllZCBrZXksIGV2ZW4gaWYgdGhlIGVudmlyb25tZW50CisJdmFyaWFibGUgd2FzIHNldC4KKworYHZvaWQgdHJhY2VfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKWA6OgorYHZvaWQgdHJhY2VfcHJpbnRmX2tleShzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKWA6OgorCisJUHJpbnRzIGEgZm9ybWF0dGVkIG1lc3NhZ2UsIHNpbWlsYXIgdG8gcHJpbnRmLgorCitgdm9pZCB0cmFjZV9hcmd2X3ByaW50Zihjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pYGA6OgorCisJUHJpbnRzIGEgZm9ybWF0dGVkIG1lc3NhZ2UsIGZvbGxvd2VkIGJ5IGEgcXVvdGVkIGxpc3Qgb2YgYXJndW1lbnRzLgorCitgdm9pZCB0cmFjZV9zdHJidWYoc3RydWN0IHRyYWNlX2tleSAqa2V5LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpkYXRhKWA6OgorCisJUHJpbnRzIHRoZSBzdHJidWYsIHdpdGhvdXQgYWRkaXRpb25hbCBmb3JtYXR0aW5nIChpLmUuIGRvZXNuJ3QKKwljaG9rZSBvbiBgJWAgb3IgZXZlbiBgXDBgKS4KKworYHVpbnQ2NF90IGdldG5hbm90aW1lKHZvaWQpYDo6CisKKwlSZXR1cm5zIG5hbm9zZWNvbmRzIHNpbmNlIHRoZSBlcG9jaCAoMDEvMDEvMTk3MCksIHR5cGljYWxseSB1c2VkCisJZm9yIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cy4KKysKK0N1cnJlbnRseSB0aGVyZSBhcmUgaGlnaCBwcmVjaXNpb24gdGltZXIgaW1wbGVtZW50YXRpb25zIGZvciBMaW51eCAodXNpbmcKK2BjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQylgKSBhbmQgV2luZG93cyAoYFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyYCkuCitPdGhlciBwbGF0Zm9ybXMgdXNlIGBnZXR0aW1lb2ZkYXlgIGFzIHRpbWUgc291cmNlLgorCitgdm9pZCB0cmFjZV9wZXJmb3JtYW5jZSh1aW50NjRfdCBuYW5vcywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pYDo6Citgdm9pZCB0cmFjZV9wZXJmb3JtYW5jZV9zaW5jZSh1aW50NjRfdCBzdGFydCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pYDo6CisKKwlQcmludHMgdGhlIGVsYXBzZWQgdGltZSAoaW4gbmFub3NlY29uZHMpLCBvciBlbGFwc2VkIHRpbWUgc2luY2UKKwlgc3RhcnRgLCBmb2xsb3dlZCBieSBhIGZvcm1hdHRlZCBtZXNzYWdlLiBFbmFibGVkIHZpYSBlbnZpcm9ubWVudAorCXZhcmlhYmxlIGBHSVRfVFJBQ0VfUEVSRk9STUFOQ0VgLiBVc2VkIGZvciBtYW51YWwgcHJvZmlsaW5nLCBlLmcuOgorKworLS0tLS0tLS0tLS0tCit1aW50NjRfdCBzdGFydCA9IGdldG5hbm90aW1lKCk7CisvKiBjb2RlIHNlY3Rpb24gdG8gbWVhc3VyZSAqLwordHJhY2VfcGVyZm9ybWFuY2Vfc2luY2Uoc3RhcnQsICJmb29iYXIiKTsKKy0tLS0tLS0tLS0tLQorKworLS0tLS0tLS0tLS0tCit1aW50NjRfdCB0ID0gMDsKK2ZvciAoOzspIHsKKwkvKiBpZ25vcmUgKi8KKwl0IC09IGdldG5hbm90aW1lKCk7CisJLyogY29kZSBzZWN0aW9uIHRvIG1lYXN1cmUgKi8KKwl0ICs9IGdldG5hbm90aW1lKCk7CisJLyogaWdub3JlICovCit9Cit0cmFjZV9wZXJmb3JtYW5jZSh0LCAiZnJvdHoiKTsKKy0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyZWUtd2Fsa2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktdHJlZS13YWxraW5nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGFmMzdjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLXRyZWUtd2Fsa2luZy50eHQKQEAgLTAsMCArMSwxNDcgQEAKK3RyZWUgd2Fsa2luZyBBUEkKKz09PT09PT09PT09PT09PT0KKworVGhlIHRyZWUgd2Fsa2luZyBBUEkgaXMgdXNlZCB0byB0cmF2ZXJzZSBhbmQgaW5zcGVjdCB0cmVlcy4KKworRGF0YSBTdHJ1Y3R1cmVzCistLS0tLS0tLS0tLS0tLS0KKworYHN0cnVjdCBuYW1lX2VudHJ5YDo6CisKKwlBbiBlbnRyeSBpbiBhIHRyZWUuIEVhY2ggZW50cnkgaGFzIGEgc2hhMSBpZGVudGlmaWVyLCBwYXRobmFtZSwgYW5kCisJbW9kZS4KKworYHN0cnVjdCB0cmVlX2Rlc2NgOjoKKworCUEgc2VtaS1vcGFxdWUgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBtYWludGFpbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKKwl3YWxrLgorKworKiBgYnVmZmVyYCBpcyBhIHBvaW50ZXIgaW50byB0aGUgbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cmVlLiBJdCBhbHdheXMKK3BvaW50cyBhdCB0aGUgY3VycmVudCBlbnRyeSBiZWluZyB2aXNpdGVkLgorCisqIGBzaXplYCBjb3VudHMgdGhlIG51bWJlciBvZiBieXRlcyBsZWZ0IGluIHRoZSBgYnVmZmVyYC4KKworKiBgZW50cnlgIHBvaW50cyB0byB0aGUgY3VycmVudCBlbnRyeSBiZWluZyB2aXNpdGVkLgorCitgc3RydWN0IHRyYXZlcnNlX2luZm9gOjoKKworCUEgc3RydWN0dXJlIHVzZWQgdG8gbWFpbnRhaW4gdGhlIHN0YXRlIG9mIGEgdHJhdmVyc2FsLgorKworKiBgcHJldmAgcG9pbnRzIHRvIHRoZSB0cmF2ZXJzZV9pbmZvIHdoaWNoIHdhcyB1c2VkIHRvIGRlc2NlbmQgaW50byB0aGUKK2N1cnJlbnQgdHJlZS4gSWYgdGhpcyBpcyB0aGUgdG9wLWxldmVsIHRyZWUgYHByZXZgIHdpbGwgcG9pbnQgdG8KK2EgZHVtbXkgdHJhdmVyc2VfaW5mby4KKworKiBgbmFtZWAgaXMgdGhlIGVudHJ5IGZvciB0aGUgY3VycmVudCB0cmVlIChpZiB0aGUgdHJlZSBpcyBhIHN1YnRyZWUpLgorCisqIGBwYXRobGVuYCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBmdWxsIHBhdGggZm9yIHRoZSBjdXJyZW50IHRyZWUuCisKKyogYGNvbmZsaWN0c2AgY2FuIGJlIHVzZWQgYnkgY2FsbGJhY2tzIHRvIG1haW50YWluIGRpcmVjdG9yeS1maWxlIGNvbmZsaWN0cy4KKworKiBgZm5gIGlzIGEgY2FsbGJhY2sgY2FsbGVkIGZvciBlYWNoIGVudHJ5IGluIHRoZSB0cmVlLiBTZWUgVHJhdmVyc2luZyBmb3IgbW9yZQoraW5mb3JtYXRpb24uCisKKyogYGRhdGFgIGNhbiBiZSBhbnl0aGluZyB0aGUgYGZuYCBjYWxsYmFjayB3b3VsZCB3YW50IHRvIHVzZS4KKworKiBgc2hvd19hbGxfZXJyb3JzYCB0ZWxscyB3aGV0aGVyIHRvIHN0b3AgYXQgdGhlIGZpcnN0IGVycm9yIG9yIG5vdC4KKworSW5pdGlhbGl6aW5nCistLS0tLS0tLS0tLS0KKworYGluaXRfdHJlZV9kZXNjYDo6CisKKwlJbml0aWFsaXplIGEgYHRyZWVfZGVzY2AgYW5kIGRlY29kZSBpdHMgZmlyc3QgZW50cnkuIFRoZSBidWZmZXIgYW5kCisJc2l6ZSBwYXJhbWV0ZXJzIGFyZSBhc3N1bWVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBidWZmZXIgYW5kIHNpemUKKwltZW1iZXJzIG9mIGBzdHJ1Y3QgdHJlZWAuCisKK2BmaWxsX3RyZWVfZGVzY3JpcHRvcmA6OgorCisJSW5pdGlhbGl6ZSBhIGB0cmVlX2Rlc2NgIGFuZCBkZWNvZGUgaXRzIGZpcnN0IGVudHJ5IGdpdmVuIHRoZSBzaGExIG9mCisJYSB0cmVlLiBSZXR1cm5zIHRoZSBgYnVmZmVyYCBtZW1iZXIgaWYgdGhlIHNoYTEgaXMgYSB2YWxpZCB0cmVlCisJaWRlbnRpZmllciBhbmQgTlVMTCBvdGhlcndpc2UuCisKK2BzZXR1cF90cmF2ZXJzZV9pbmZvYDo6CisKKwlJbml0aWFsaXplIGEgYHRyYXZlcnNlX2luZm9gIGdpdmVuIHRoZSBwYXRobmFtZSBvZiB0aGUgdHJlZSB0byBzdGFydAorCXRyYXZlcnNpbmcgZnJvbS4gVGhlIGBiYXNlYCBhcmd1bWVudCBpcyBhc3N1bWVkIHRvIGJlIHRoZSBgcGF0aGAKKwltZW1iZXIgb2YgdGhlIGBuYW1lX2VudHJ5YCBiZWluZyByZWN1cnNlZCBpbnRvIHVubGVzcyB0aGUgdHJlZSBpcyBhCisJdG9wLWxldmVsIHRyZWUgaW4gd2hpY2ggY2FzZSB0aGUgZW1wdHkgc3RyaW5nICgiIikgaXMgdXNlZC4KKworV2Fsa2luZworLS0tLS0tLQorCitgdHJlZV9lbnRyeWA6OgorCisJVmlzaXQgdGhlIG5leHQgZW50cnkgaW4gYSB0cmVlLiBSZXR1cm5zIDEgd2hlbiB0aGVyZSBhcmUgbW9yZSBlbnRyaWVzCisJbGVmdCB0byB2aXNpdCBhbmQgMCB3aGVuIGFsbCBlbnRyaWVzIGhhdmUgYmVlbiB2aXNpdGVkLiBUaGlzIGlzCisJY29tbW9ubHkgdXNlZCBpbiB0aGUgdGVzdCBvZiBhIHdoaWxlIGxvb3AuCisKK2B0cmVlX2VudHJ5X2xlbmA6OgorCisJQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2YgYSB0cmVlIGVudHJ5J3MgcGF0aG5hbWUuIFRoaXMgdXRpbGl6ZXMgdGhlCisJbWVtb3J5IHN0cnVjdHVyZSBvZiBhIHRyZWUgZW50cnkgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIHVzaW5nIGEKKwlnZW5lcmljIHN0cmxlbigpLgorCitgdXBkYXRlX3RyZWVfZW50cnlgOjoKKworCVdhbGsgdG8gdGhlIG5leHQgZW50cnkgaW4gYSB0cmVlLiBUaGlzIGlzIGNvbW1vbmx5IHVzZWQgaW4gY29uanVuY3Rpb24KKwl3aXRoIGB0cmVlX2VudHJ5X2V4dHJhY3RgIHRvIGluc3BlY3QgdGhlIGN1cnJlbnQgZW50cnkuCisKK2B0cmVlX2VudHJ5X2V4dHJhY3RgOjoKKworCURlY29kZSB0aGUgZW50cnkgY3VycmVudGx5IGJlaW5nIHZpc2l0ZWQgKHRoZSBvbmUgcG9pbnRlZCB0byBieQorCWB0cmVlX2Rlc2Mnc2AgYGVudHJ5YCBtZW1iZXIpIGFuZCByZXR1cm4gdGhlIHNoYTEgb2YgdGhlIGVudHJ5LiBUaGUKKwlgcGF0aHBgIGFuZCBgbW9kZXBgIGFyZ3VtZW50cyBhcmUgc2V0IHRvIHRoZSBlbnRyeSdzIHBhdGhuYW1lIGFuZCBtb2RlCisJcmVzcGVjdGl2ZWx5LgorCitgZ2V0X3RyZWVfZW50cnlgOjoKKworCUZpbmQgYW4gZW50cnkgaW4gYSB0cmVlIGdpdmVuIGEgcGF0aG5hbWUgYW5kIHRoZSBzaGExIG9mIGEgdHJlZSB0bworCXNlYXJjaC4gUmV0dXJucyAwIGlmIHRoZSBlbnRyeSBpcyBmb3VuZCBhbmQgLTEgb3RoZXJ3aXNlLiBUaGUgdGhpcmQKKwlhbmQgZm91cnRoIHBhcmFtZXRlcnMgYXJlIHNldCB0byB0aGUgZW50cnkncyBzaGExIGFuZCBtb2RlCisJcmVzcGVjdGl2ZWx5LgorCitUcmF2ZXJzaW5nCistLS0tLS0tLS0tCisKK2B0cmF2ZXJzZV90cmVlc2A6OgorCisJVHJhdmVyc2UgYG5gIG51bWJlciBvZiB0cmVlcyBpbiBwYXJhbGxlbC4gVGhlIGBmbmAgY2FsbGJhY2sgbWVtYmVyIG9mCisJYHRyYXZlcnNlX2luZm9gIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHRyZWUgZW50cnkuCisKK2B0cmF2ZXJzZV9jYWxsYmFja190YDo6CisJVGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHRyYXZlcnNlIGNhbGxiYWNrIGFyZSBhcyBmb2xsb3dzOgorKworKiBgbmAgY291bnRzIHRoZSBudW1iZXIgb2YgdHJlZXMgYmVpbmcgdHJhdmVyc2VkLgorCisqIGBtYXNrYCBoYXMgaXRzIG50aCBiaXQgc2V0IGlmIHNvbWV0aGluZyBleGlzdHMgaW4gdGhlIG50aCBlbnRyeS4KKworKiBgZGlybWFza2AgaGFzIGl0cyBudGggYml0IHNldCBpZiB0aGUgbnRoIHRyZWUncyBlbnRyeSBpcyBhIGRpcmVjdG9yeS4KKworKiBgZW50cnlgIGlzIGFuIGFycmF5IG9mIHNpemUgYG5gIHdoZXJlIHRoZSBudGggZW50cnkgaXMgZnJvbSB0aGUgbnRoIHRyZWUuCisKKyogYGluZm9gIG1haW50YWlucyB0aGUgc3RhdGUgb2YgdGhlIHRyYXZlcnNhbC4KKworKworUmV0dXJuaW5nIGEgbmVnYXRpdmUgdmFsdWUgd2lsbCB0ZXJtaW5hdGUgdGhlIHRyYXZlcnNhbC4gT3RoZXJ3aXNlIHRoZQorcmV0dXJuIHZhbHVlIGlzIHRyZWF0ZWQgYXMgYW4gdXBkYXRlIG1hc2suIElmIHRoZSBudGggYml0IGlzIHNldCB0aGUgbnRoIHRyZWUKK3dpbGwgYmUgdXBkYXRlZCBhbmQgaWYgdGhlIGJpdCBpcyBub3Qgc2V0IHRoZSBudGggdHJlZSBlbnRyeSB3aWxsIGJlIHRoZQorc2FtZSBpbiB0aGUgbmV4dCBjYWxsYmFjayBpbnZvY2F0aW9uLgorCitgbWFrZV90cmF2ZXJzZV9wYXRoYDo6CisKKwlHZW5lcmF0ZSB0aGUgZnVsbCBwYXRobmFtZSBvZiBhIHRyZWUgZW50cnkgYmFzZWQgZnJvbSB0aGUgcm9vdCBvZiB0aGUKKwl0cmF2ZXJzYWwuIEZvciBleGFtcGxlLCBpZiB0aGUgdHJhdmVyc2FsIGhhcyByZWN1cnNlZCBpbnRvIGFub3RoZXIKKwl0cmVlIG5hbWVkICJiYXIiIHRoZSBwYXRobmFtZSBvZiBhbiBlbnRyeSAiYmF6IiBpbiB0aGUgImJhciIKKwl0cmVlIHdvdWxkIGJlICJiYXIvYmF6Ii4KKworYHRyYXZlcnNlX3BhdGhfbGVuYDo6CisKKwlDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiBhIHBhdGhuYW1lIHJldHVybmVkIGJ5IGBtYWtlX3RyYXZlcnNlX3BhdGhgLgorCVRoaXMgdXRpbGl6ZXMgdGhlIG1lbW9yeSBzdHJ1Y3R1cmUgb2YgYSB0cmVlIGVudHJ5IHRvIGF2b2lkIHRoZQorCW92ZXJoZWFkIG9mIHVzaW5nIGEgZ2VuZXJpYyBzdHJsZW4oKS4KKworQXV0aG9ycworLS0tLS0tLQorCitXcml0dGVuIGJ5IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4gYW5kIExpbnVzIFRvcnZhbGRzCis8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGkteGRpZmYtaW50ZXJmYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS14ZGlmZi1pbnRlcmZhY2UudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyOTZlY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGkteGRpZmYtaW50ZXJmYWNlLnR4dApAQCAtMCwwICsxLDcgQEAKK3hkaWZmIGludGVyZmFjZSBBUEkKKz09PT09PT09PT09PT09PT09PT0KKworVGFsayBhYm91dCBvdXIgY2FsbGluZyBjb252ZW50aW9uIHRvIHhkaWZmIGxpYnJhcnksIGluY2x1ZGluZworeGRpZmZfZW1pdF9jb25zdW1lX2ZuLgorCisoRHNjaG8sIEpDKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYml0bWFwLWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9iaXRtYXAtZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGMxOGEwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYml0bWFwLWZvcm1hdC50eHQKQEAgLTAsMCArMSwxNjQgQEAKK0dJVCBiaXRtYXAgdjEgZm9ybWF0Cis9PT09PT09PT09PT09PT09PT09PQorCisJLSBBIGhlYWRlciBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmc6CisKKwkJNC1ieXRlIHNpZ25hdHVyZTogeydCJywgJ0knLCAnVCcsICdNJ30KKworCQkyLWJ5dGUgdmVyc2lvbiBudW1iZXIgKG5ldHdvcmsgYnl0ZSBvcmRlcikKKwkJCVRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgdmVyc2lvbiAxCisJCQlvZiB0aGUgYml0bWFwIGluZGV4ICh0aGUgc2FtZSBvbmUgYXMgSkdpdCkuCisKKwkJMi1ieXRlIGZsYWdzIChuZXR3b3JrIGJ5dGUgb3JkZXIpCisKKwkJCVRoZSBmb2xsb3dpbmcgZmxhZ3MgYXJlIHN1cHBvcnRlZDoKKworCQkJLSBCSVRNQVBfT1BUX0ZVTExfREFHICgweDEpIFJFUVVJUkVECisJCQlUaGlzIGZsYWcgbXVzdCBhbHdheXMgYmUgcHJlc2VudC4gSXQgaW1wbGllcyB0aGF0IHRoZSBiaXRtYXAKKwkJCWluZGV4IGhhcyBiZWVuIGdlbmVyYXRlZCBmb3IgYSBwYWNrZmlsZSB3aXRoIGZ1bGwgY2xvc3VyZQorCQkJKGkuZS4gd2hlcmUgZXZlcnkgc2luZ2xlIG9iamVjdCBpbiB0aGUgcGFja2ZpbGUgY2FuIGZpbmQKKwkJCSBpdHMgcGFyZW50IGxpbmtzIGluc2lkZSB0aGUgc2FtZSBwYWNrZmlsZSkuIFRoaXMgaXMgYQorCQkJcmVxdWlyZW1lbnQgZm9yIHRoZSBiaXRtYXAgaW5kZXggZm9ybWF0LCBhbHNvIHByZXNlbnQgaW4gSkdpdCwKKwkJCXRoYXQgZ3JlYXRseSByZWR1Y2VzIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KKworCQkJLSBCSVRNQVBfT1BUX0hBU0hfQ0FDSEUgKDB4NCkKKwkJCUlmIHByZXNlbnQsIHRoZSBlbmQgb2YgdGhlIGJpdG1hcCBmaWxlIGNvbnRhaW5zCisJCQlgTmAgMzItYml0IG5hbWUtaGFzaCB2YWx1ZXMsIG9uZSBwZXIgb2JqZWN0IGluIHRoZQorCQkJcGFjay4gVGhlIGZvcm1hdCBhbmQgbWVhbmluZyBvZiB0aGUgbmFtZS1oYXNoIGlzCisJCQlkZXNjcmliZWQgYmVsb3cuCisKKwkJNC1ieXRlIGVudHJ5IGNvdW50IChuZXR3b3JrIGJ5dGUgb3JkZXIpCisKKwkJCVRoZSB0b3RhbCBjb3VudCBvZiBlbnRyaWVzIChiaXRtYXBwZWQgY29tbWl0cykgaW4gdGhpcyBiaXRtYXAgaW5kZXguCisKKwkJMjAtYnl0ZSBjaGVja3N1bQorCisJCQlUaGUgU0hBMSBjaGVja3N1bSBvZiB0aGUgcGFjayB0aGlzIGJpdG1hcCBpbmRleCBiZWxvbmdzIHRvLgorCisJLSA0IEVXQUggYml0bWFwcyB0aGF0IGFjdCBhcyB0eXBlIGluZGV4ZXMKKworCQlUeXBlIGluZGV4ZXMgYXJlIHNlcmlhbGl6ZWQgYWZ0ZXIgdGhlIGhhc2ggY2FjaGUgaW4gdGhlIHNoYXBlCisJCW9mIGZvdXIgRVdBSCBiaXRtYXBzIHN0b3JlZCBjb25zZWN1dGl2ZWx5IChzZWUgQXBwZW5kaXggQSBmb3IKKwkJdGhlIHNlcmlhbGl6YXRpb24gZm9ybWF0IG9mIGFuIEVXQUggYml0bWFwKS4KKworCQlUaGVyZSBpcyBhIGJpdG1hcCBmb3IgZWFjaCBHaXQgb2JqZWN0IHR5cGUsIHN0b3JlZCBpbiB0aGUgZm9sbG93aW5nCisJCW9yZGVyOgorCisJCQktIENvbW1pdHMKKwkJCS0gVHJlZXMKKwkJCS0gQmxvYnMKKwkJCS0gVGFncworCisJCUluIGVhY2ggYml0bWFwLCB0aGUgYG5gdGggYml0IGlzIHNldCB0byB0cnVlIGlmIHRoZSBgbmB0aCBvYmplY3QKKwkJaW4gdGhlIHBhY2tmaWxlIGlzIG9mIHRoYXQgdHlwZS4KKworCQlUaGUgb2J2aW91cyBjb25zZXF1ZW5jZSBpcyB0aGF0IHRoZSBPUiBvZiBhbGwgNCBiaXRtYXBzIHdpbGwgcmVzdWx0CisJCWluIGEgZnVsbCBzZXQgKGFsbCBiaXRzIHNldCksIGFuZCB0aGUgQU5EIG9mIGFsbCA0IGJpdG1hcHMgd2lsbAorCQlyZXN1bHQgaW4gYW4gZW1wdHkgYml0bWFwIChubyBiaXRzIHNldCkuCisKKwktIE4gZW50cmllcyB3aXRoIGNvbXByZXNzZWQgYml0bWFwcywgb25lIGZvciBlYWNoIGluZGV4ZWQgY29tbWl0CisKKwkJV2hlcmUgYE5gIGlzIHRoZSB0b3RhbCBhbW91bnQgb2YgZW50cmllcyBpbiB0aGlzIGJpdG1hcCBpbmRleC4KKwkJRWFjaCBlbnRyeSBjb250YWlucyB0aGUgZm9sbG93aW5nOgorCisJCS0gNC1ieXRlIG9iamVjdCBwb3NpdGlvbiAobmV0d29yayBieXRlIG9yZGVyKQorCQkJVGhlIHBvc2l0aW9uICoqaW4gdGhlIGluZGV4IGZvciB0aGUgcGFja2ZpbGUqKiB3aGVyZSB0aGUKKwkJCWJpdG1hcCBmb3IgdGhpcyBjb21taXQgaXMgZm91bmQuCisKKwkJLSAxLWJ5dGUgWE9SLW9mZnNldAorCQkJVGhlIHhvciBvZmZzZXQgdXNlZCB0byBjb21wcmVzcyB0aGlzIGJpdG1hcC4gRm9yIGFuIGVudHJ5CisJCQlpbiBwb3NpdGlvbiBgeGAsIGEgWE9SIG9mZnNldCBvZiBgeWAgbWVhbnMgdGhhdCB0aGUgYWN0dWFsCisJCQliaXRtYXAgcmVwcmVzZW50aW5nIHRoaXMgY29tbWl0IGlzIGNvbXBvc2VkIGJ5IFhPUmluZyB0aGUKKwkJCWJpdG1hcCBmb3IgdGhpcyBlbnRyeSB3aXRoIHRoZSBiaXRtYXAgaW4gZW50cnkgYHgteWAgKGkuZS4KKwkJCXRoZSBiaXRtYXAgYHlgIGVudHJpZXMgYmVmb3JlIHRoaXMgb25lKS4KKworCQkJTm90ZSB0aGF0IHRoaXMgY29tcHJlc3Npb24gY2FuIGJlIHJlY3Vyc2l2ZS4gSW4gb3JkZXIgdG8KKwkJCVhPUiB0aGlzIGVudHJ5IHdpdGggYSBwcmV2aW91cyBvbmUsIHRoZSBwcmV2aW91cyBlbnRyeSBuZWVkcworCQkJdG8gYmUgZGVjb21wcmVzc2VkIGZpcnN0LCBhbmQgc28gb24uCisKKwkJCVRoZSBoYXJkLWxpbWl0IGZvciB0aGlzIG9mZnNldCBpcyAxNjAgKGFuIGVudHJ5IGNhbiBvbmx5IGJlCisJCQl4b3InZWQgYWdhaW5zdCBvbmUgb2YgdGhlIDE2MCBlbnRyaWVzIHByZWNlZGluZyBpdCkuIFRoaXMKKwkJCW51bWJlciBpcyBhbHdheXMgcG9zaXRpdmUsIGFuZCBoZW5jZSBlbnRyaWVzIGFyZSBhbHdheXMgeG9yJ2VkCisJCQl3aXRoICoqcHJldmlvdXMqKiBiaXRtYXBzLCBub3QgYml0bWFwcyB0aGF0IHdpbGwgY29tZSBhZnRlcndhcmRzCisJCQlpbiB0aGUgaW5kZXguCisKKwkJLSAxLWJ5dGUgZmxhZ3MgZm9yIHRoaXMgYml0bWFwCisJCQlBdCB0aGUgbW9tZW50IHRoZSBvbmx5IGF2YWlsYWJsZSBmbGFnIGlzIGAweDFgLCB3aGljaCBoaW50cworCQkJdGhhdCB0aGlzIGJpdG1hcCBjYW4gYmUgcmUtdXNlZCB3aGVuIHJlYnVpbGRpbmcgYml0bWFwIGluZGV4ZXMKKwkJCWZvciB0aGUgcmVwb3NpdG9yeS4KKworCQktIFRoZSBjb21wcmVzc2VkIGJpdG1hcCBpdHNlbGYsIHNlZSBBcHBlbmRpeCBBLgorCis9PSBBcHBlbmRpeCBBOiBTZXJpYWxpemF0aW9uIGZvcm1hdCBmb3IgYW4gRVdBSCBiaXRtYXAKKworRXdhaCBiaXRtYXBzIGFyZSBzZXJpYWxpemVkIGluIHRoZSBzYW1lIHByb3RvY29sIGFzIHRoZSBKQVZBRVdBSAorbGlicmFyeSwgbWFraW5nIHRoZW0gYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCB0aGUgSkdpdAoraW1wbGVtZW50YXRpb246CisKKwktIDQtYnl0ZSBudW1iZXIgb2YgYml0cyBvZiB0aGUgcmVzdWx0aW5nIFVOQ09NUFJFU1NFRCBiaXRtYXAKKworCS0gNC1ieXRlIG51bWJlciBvZiB3b3JkcyBvZiB0aGUgQ09NUFJFU1NFRCBiaXRtYXAsIHdoZW4gc3RvcmVkCisKKwktIE4geCA4LWJ5dGUgd29yZHMsIGFzIHNwZWNpZmllZCBieSB0aGUgcHJldmlvdXMgZmllbGQKKworCQlUaGlzIGlzIHRoZSBhY3R1YWwgY29udGVudCBvZiB0aGUgY29tcHJlc3NlZCBiaXRtYXAuCisKKwktIDQtYnl0ZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBSTFcgZm9yIHRoZSBjb21wcmVzc2VkCisJCWJpdG1hcAorCitBbGwgd29yZHMgYXJlIHN0b3JlZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgZm9yIHRoZWlyIGNvcnJlc3BvbmRpbmcKK3NpemVzLgorCitUaGUgY29tcHJlc3NlZCBiaXRtYXAgaXMgc3RvcmVkIGluIGEgZm9ybSBvZiBydW4tbGVuZ3RoIGVuY29kaW5nLCBhcworZm9sbG93cy4gIEl0IGNvbnNpc3RzIG9mIGEgY29uY2F0ZW5hdGlvbiBvZiBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mCitjaHVua3MuICBFYWNoIGNodW5rIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIDY0LWJpdCB3b3JkcworCisgICAgIEggIExfMSAgTF8yICBMXzMgLi4uLiBMX00KKworSCBpcyBjYWxsZWQgUkxXIChydW4gbGVuZ3RoIHdvcmQpLiAgSXQgY29uc2lzdHMgb2YgKGZyb20gbG93ZXIgdG8gaGlnaGVyCitvcmRlciBiaXRzKToKKworICAgICAtIDEgYml0OiB0aGUgcmVwZWF0ZWQgYml0IEIKKworICAgICAtIDMyIGJpdHM6IHJlcGV0aXRpb24gY291bnQgSyAodW5zaWduZWQpCisKKyAgICAgLSAzMSBiaXRzOiBsaXRlcmFsIHdvcmQgY291bnQgTSAodW5zaWduZWQpCisKK1RoZSBiaXRzdHJlYW0gcmVwcmVzZW50ZWQgYnkgdGhlIGFib3ZlIGNodW5rIGlzIHRoZW46CisKKyAgICAgLSBLIHJlcGV0aXRpb25zIG9mIEIKKworICAgICAtIFRoZSBiaXRzIHN0b3JlZCBpbiBgTF8xYCB0aHJvdWdoIGBMX01gLiAgV2l0aGluIGEgd29yZCwgYml0cyBhdAorICAgICAgIGxvd2VyIG9yZGVyIGNvbWUgZWFybGllciBpbiB0aGUgc3RyZWFtIHRoYW4gdGhvc2UgYXQgaGlnaGVyCisgICAgICAgb3JkZXIuCisKK1RoZSBuZXh0IHdvcmQgYWZ0ZXIgYExfTWAgKGlmIGFueSkgbXVzdCBhZ2FpbiBiZSBhIFJMVywgZm9yIHRoZSBuZXh0CitjaHVuay4gIEZvciBlZmZpY2llbnQgYXBwZW5kaW5nIHRvIHRoZSBiaXRzdHJlYW0sIHRoZSBFV0FIIHN0b3JlcyBhCitwb2ludGVyIHRvIHRoZSBsYXN0IFJMVyBpbiB0aGUgc3RyZWFtLgorCisKKz09IEFwcGVuZGl4IEI6IE9wdGlvbmFsIEJpdG1hcCBTZWN0aW9ucworCitUaGVzZSBzZWN0aW9ucyBtYXkgb3IgbWF5IG5vdCBiZSBwcmVzZW50IGluIHRoZSBgLmJpdG1hcGAgZmlsZTsgdGhlaXIKK3ByZXNlbmNlIGlzIGluZGljYXRlZCBieSB0aGUgaGVhZGVyIGZsYWdzIHNlY3Rpb24gZGVzY3JpYmVkIGFib3ZlLgorCitOYW1lLWhhc2ggY2FjaGUKKy0tLS0tLS0tLS0tLS0tLQorCitJZiB0aGUgQklUTUFQX09QVF9IQVNIX0NBQ0hFIGZsYWcgaXMgc2V0LCB0aGUgZW5kIG9mIHRoZSBiaXRtYXAgY29udGFpbnMKK2EgY2FjaGUgb2YgMzItYml0IHZhbHVlcywgb25lIHBlciBvYmplY3QgaW4gdGhlIHBhY2suIFRoZSB2YWx1ZSBhdAorcG9zaXRpb24gYGlgIGlzIHRoZSBoYXNoIG9mIHRoZSBwYXRobmFtZSBhdCB3aGljaCB0aGUgYGlgdGggb2JqZWN0CisoY291bnRpbmcgaW4gaW5kZXggb3JkZXIpIGluIHRoZSBwYWNrIGNhbiBiZSBmb3VuZC4gIFRoaXMgY2FuIGJlIGZlZAoraW50byB0aGUgZGVsdGEgaGV1cmlzdGljcyB0byBjb21wYXJlIG9iamVjdHMgd2l0aCBzaW1pbGFyIHBhdGhuYW1lcy4KKworVGhlIGhhc2ggYWxnb3JpdGhtIHVzZWQgaXM6CisKKyAgICBoYXNoID0gMDsKKyAgICB3aGlsZSAoKGMgPSAqbmFtZSsrKSkKKwkgICAgaWYgKCFpc3NwYWNlKGMpKQorCQkgICAgaGFzaCA9IChoYXNoID4+IDIpICsgKGMgPDwgMjQpOworCitOb3RlIHRoYXQgdGhpcyBoYXNoaW5nIHNjaGVtZSBpcyB0aWVkIHRvIHRoZSBCSVRNQVBfT1BUX0hBU0hfQ0FDSEUgZmxhZy4KK0lmIGltcGxlbWVudGF0aW9ucyB3YW50IHRvIGNob29zZSBhIGRpZmZlcmVudCBoYXNoaW5nIHNjaGVtZSwgdGhleSBhcmUKK2ZyZWUgdG8gZG8gc28sIGJ1dCBNVVNUIGFsbG9jYXRlIGEgbmV3IGhlYWRlciBmbGFnIChiZWNhdXNlIGNvbXBhcmluZworaGFzaGVzIG1hZGUgdW5kZXIgdHdvIGRpZmZlcmVudCBzY2hlbWVzIHdvdWxkIGJlIHBvaW50bGVzcykuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9odHRwLXByb3RvY29sLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2h0dHAtcHJvdG9jb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNTYxYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9odHRwLXByb3RvY29sLnR4dApAQCAtMCwwICsxLDUwNyBAQAorSFRUUCB0cmFuc2ZlciBwcm90b2NvbHMKKz09PT09PT09PT09PT09PT09PT09PT09CisKK0dpdCBzdXBwb3J0cyB0d28gSFRUUCBiYXNlZCB0cmFuc2ZlciBwcm90b2NvbHMuICBBICJkdW1iIiBwcm90b2NvbAord2hpY2ggcmVxdWlyZXMgb25seSBhIHN0YW5kYXJkIEhUVFAgc2VydmVyIG9uIHRoZSBzZXJ2ZXIgZW5kIG9mIHRoZQorY29ubmVjdGlvbiwgYW5kIGEgInNtYXJ0IiBwcm90b2NvbCB3aGljaCByZXF1aXJlcyBhIEdpdCBhd2FyZSBDR0kKKyhvciBzZXJ2ZXIgbW9kdWxlKS4gIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGJvdGggcHJvdG9jb2xzLgorCitBcyBhIGRlc2lnbiBmZWF0dXJlIHNtYXJ0IGNsaWVudHMgY2FuIGF1dG9tYXRpY2FsbHkgdXBncmFkZSAiZHVtYiIKK3Byb3RvY29sIFVSTHMgdG8gc21hcnQgVVJMcy4gIFRoaXMgcGVybWl0cyBhbGwgdXNlcnMgdG8gaGF2ZSB0aGUKK3NhbWUgcHVibGlzaGVkIFVSTCwgYW5kIHRoZSBwZWVycyBhdXRvbWF0aWNhbGx5IHNlbGVjdCB0aGUgbW9zdAorZWZmaWNpZW50IHRyYW5zcG9ydCBhdmFpbGFibGUgdG8gdGhlbS4KKworCitVUkwgRm9ybWF0CistLS0tLS0tLS0tCisKK1VSTHMgZm9yIEdpdCByZXBvc2l0b3JpZXMgYWNjZXNzZWQgYnkgSFRUUCB1c2UgdGhlIHN0YW5kYXJkIEhUVFAKK1VSTCBzeW50YXggZG9jdW1lbnRlZCBieSBSRkMgMTczOCwgc28gdGhleSBhcmUgb2YgdGhlIGZvcm06CisKKyAgaHR0cDovLzxob3N0Pjo8cG9ydD4vPHBhdGg+PzxzZWFyY2hwYXJ0PgorCitXaXRoaW4gdGhpcyBkb2N1bWVudGF0aW9uIHRoZSBwbGFjZWhvbGRlciBgJEdJVF9VUkxgIHdpbGwgc3RhbmQgZm9yCit0aGUgaHR0cDovLyByZXBvc2l0b3J5IFVSTCBlbnRlcmVkIGJ5IHRoZSBlbmQtdXNlci4KKworU2VydmVycyBTSE9VTEQgaGFuZGxlIGFsbCByZXF1ZXN0cyB0byBsb2NhdGlvbnMgbWF0Y2hpbmcgYCRHSVRfVVJMYCwgYXMKK2JvdGggdGhlICJzbWFydCIgYW5kICJkdW1iIiBIVFRQIHByb3RvY29scyB1c2VkIGJ5IEdpdCBvcGVyYXRlCitieSBhcHBlbmRpbmcgYWRkaXRpb25hbCBwYXRoIGNvbXBvbmVudHMgb250byB0aGUgZW5kIG9mIHRoZSB1c2VyCitzdXBwbGllZCBgJEdJVF9VUkxgIHN0cmluZy4KKworQW4gZXhhbXBsZSBvZiBhIGR1bWIgY2xpZW50IHJlcXVlc3RpbmcgZm9yIGEgbG9vc2Ugb2JqZWN0OgorCisgICRHSVRfVVJMOiAgICAgaHR0cDovL2V4YW1wbGUuY29tOjgwODAvZ2l0L3JlcG8uZ2l0CisgIFVSTCByZXF1ZXN0OiAgaHR0cDovL2V4YW1wbGUuY29tOjgwODAvZ2l0L3JlcG8uZ2l0L29iamVjdHMvZDAvNDlmNmMyN2EyMjQ0ZTEyMDQxOTU1ZTI2MmE0MDRjN2ZhYmEzNTUKKworQW4gZXhhbXBsZSBvZiBhIHNtYXJ0IHJlcXVlc3QgdG8gYSBjYXRjaC1hbGwgZ2F0ZXdheToKKworICAkR0lUX1VSTDogICAgIGh0dHA6Ly9leGFtcGxlLmNvbS9kYWVtb24uY2dpP3N2Yz1naXQmcT0KKyAgVVJMIHJlcXVlc3Q6ICBodHRwOi8vZXhhbXBsZS5jb20vZGFlbW9uLmNnaT9zdmM9Z2l0JnE9L2luZm8vcmVmcyZzZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sKKworQW4gZXhhbXBsZSBvZiBhIHJlcXVlc3QgdG8gYSBzdWJtb2R1bGU6CisKKyAgJEdJVF9VUkw6ICAgICBodHRwOi8vZXhhbXBsZS5jb20vZ2l0L3JlcG8uZ2l0L3BhdGgvc3VibW9kdWxlLmdpdAorICBVUkwgcmVxdWVzdDogIGh0dHA6Ly9leGFtcGxlLmNvbS9naXQvcmVwby5naXQvcGF0aC9zdWJtb2R1bGUuZ2l0L2luZm8vcmVmcworCitDbGllbnRzIE1VU1Qgc3RyaXAgYSB0cmFpbGluZyBgL2AsIGlmIHByZXNlbnQsIGZyb20gdGhlIHVzZXIgc3VwcGxpZWQKK2AkR0lUX1VSTGAgc3RyaW5nIHRvIHByZXZlbnQgZW1wdHkgcGF0aCB0b2tlbnMgKGAvL2ApIGZyb20gYXBwZWFyaW5nCitpbiBhbnkgVVJMIHNlbnQgdG8gYSBzZXJ2ZXIuICBDb21wYXRpYmxlIGNsaWVudHMgTVVTVCBleHBhbmQKK2AkR0lUX1VSTC9pbmZvL3JlZnNgIGFzIGBmb28vaW5mby9yZWZzYCBhbmQgbm90IGBmb28vL2luZm8vcmVmc2AuCisKKworQXV0aGVudGljYXRpb24KKy0tLS0tLS0tLS0tLS0tCisKK1N0YW5kYXJkIEhUVFAgYXV0aGVudGljYXRpb24gaXMgdXNlZCBpZiBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZAordG8gYWNjZXNzIGEgcmVwb3NpdG9yeSwgYW5kIE1BWSBiZSBjb25maWd1cmVkIGFuZCBlbmZvcmNlZCBieSB0aGUKK0hUVFAgc2VydmVyIHNvZnR3YXJlLgorCitCZWNhdXNlIEdpdCByZXBvc2l0b3JpZXMgYXJlIGFjY2Vzc2VkIGJ5IHN0YW5kYXJkIHBhdGggY29tcG9uZW50cworc2VydmVyIGFkbWluaXN0cmF0b3JzIE1BWSB1c2UgZGlyZWN0b3J5IGJhc2VkIHBlcm1pc3Npb25zIHdpdGhpbgordGhlaXIgSFRUUCBzZXJ2ZXIgdG8gY29udHJvbCByZXBvc2l0b3J5IGFjY2Vzcy4KKworQ2xpZW50cyBTSE9VTEQgc3VwcG9ydCBCYXNpYyBhdXRoZW50aWNhdGlvbiBhcyBkZXNjcmliZWQgYnkgUkZDIDI2MTcuCitTZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IEJhc2ljIGF1dGhlbnRpY2F0aW9uIGJ5IHJlbHlpbmcgdXBvbiB0aGUKK0hUVFAgc2VydmVyIHBsYWNlZCBpbiBmcm9udCBvZiB0aGUgR2l0IHNlcnZlciBzb2Z0d2FyZS4KKworU2VydmVycyBTSE9VTEQgTk9UIHJlcXVpcmUgSFRUUCBjb29raWVzIGZvciB0aGUgcHVycG9zZXMgb2YKK2F1dGhlbnRpY2F0aW9uIG9yIGFjY2VzcyBjb250cm9sLgorCitDbGllbnRzIGFuZCBzZXJ2ZXJzIE1BWSBzdXBwb3J0IG90aGVyIGNvbW1vbiBmb3JtcyBvZiBIVFRQIGJhc2VkCithdXRoZW50aWNhdGlvbiwgc3VjaCBhcyBEaWdlc3QgYXV0aGVudGljYXRpb24uCisKKworU1NMCistLS0KKworQ2xpZW50cyBhbmQgc2VydmVycyBTSE9VTEQgc3VwcG9ydCBTU0wsIHBhcnRpY3VsYXJseSB0byBwcm90ZWN0CitwYXNzd29yZHMgd2hlbiByZWx5aW5nIG9uIEJhc2ljIEhUVFAgYXV0aGVudGljYXRpb24uCisKKworU2Vzc2lvbiBTdGF0ZQorLS0tLS0tLS0tLS0tLQorCitUaGUgR2l0IG92ZXIgSFRUUCBwcm90b2NvbCAobXVjaCBsaWtlIEhUVFAgaXRzZWxmKSBpcyBzdGF0ZWxlc3MKK2Zyb20gdGhlIHBlcnNwZWN0aXZlIG9mIHRoZSBIVFRQIHNlcnZlciBzaWRlLiAgQWxsIHN0YXRlIE1VU1QgYmUKK3JldGFpbmVkIGFuZCBtYW5hZ2VkIGJ5IHRoZSBjbGllbnQgcHJvY2Vzcy4gIFRoaXMgcGVybWl0cyBzaW1wbGUKK3JvdW5kLXJvYmluIGxvYWQtYmFsYW5jaW5nIG9uIHRoZSBzZXJ2ZXIgc2lkZSwgd2l0aG91dCBuZWVkaW5nIHRvCit3b3JyeSBhYm91dCBzdGF0ZSBtYW5hZ2VtZW50LgorCitDbGllbnRzIE1VU1QgTk9UIHJlcXVpcmUgc3RhdGUgbWFuYWdlbWVudCBvbiB0aGUgc2VydmVyIHNpZGUgaW4KK29yZGVyIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4KKworU2VydmVycyBNVVNUIE5PVCByZXF1aXJlIEhUVFAgY29va2llcyBpbiBvcmRlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuCitDbGllbnRzIE1BWSBzdG9yZSBhbmQgZm9yd2FyZCBIVFRQIGNvb2tpZXMgZHVyaW5nIHJlcXVlc3QgcHJvY2Vzc2luZworYXMgZGVzY3JpYmVkIGJ5IFJGQyAyNjE2IChIVFRQLzEuMSkuICBTZXJ2ZXJzIFNIT1VMRCBpZ25vcmUgYW55Citjb29raWVzIHNlbnQgYnkgYSBjbGllbnQuCisKKworR2VuZXJhbCBSZXF1ZXN0IFByb2Nlc3NpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0V4Y2VwdCB3aGVyZSBub3RlZCwgYWxsIHN0YW5kYXJkIEhUVFAgYmVoYXZpb3IgU0hPVUxEIGJlIGFzc3VtZWQKK2J5IGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIuICBUaGlzIGluY2x1ZGVzIChidXQgaXMgbm90IG5lY2Vzc2FyaWx5CitsaW1pdGVkIHRvKToKKworSWYgdGhlcmUgaXMgbm8gcmVwb3NpdG9yeSBhdCBgJEdJVF9VUkxgLCBvciB0aGUgcmVzb3VyY2UgcG9pbnRlZCB0byBieSBhCitsb2NhdGlvbiBtYXRjaGluZyBgJEdJVF9VUkxgIGRvZXMgbm90IGV4aXN0LCB0aGUgc2VydmVyIE1VU1QgTk9UIHJlc3BvbmQKK3dpdGggYDIwMCBPS2AgcmVzcG9uc2UuICBBIHNlcnZlciBTSE9VTEQgcmVzcG9uZCB3aXRoCitgNDA0IE5vdCBGb3VuZGAsIGA0MTAgR29uZWAsIG9yIGFueSBvdGhlciBzdWl0YWJsZSBIVFRQIHN0YXR1cyBjb2RlCit3aGljaCBkb2VzIG5vdCBpbXBseSB0aGUgcmVzb3VyY2UgZXhpc3RzIGFzIHJlcXVlc3RlZC4KKworSWYgdGhlcmUgaXMgYSByZXBvc2l0b3J5IGF0IGAkR0lUX1VSTGAsIGJ1dCBhY2Nlc3MgaXMgbm90IGN1cnJlbnRseQorcGVybWl0dGVkLCB0aGUgc2VydmVyIE1VU1QgcmVzcG9uZCB3aXRoIHRoZSBgNDAzIEZvcmJpZGRlbmAgSFRUUAorc3RhdHVzIGNvZGUuCisKK1NlcnZlcnMgU0hPVUxEIHN1cHBvcnQgYm90aCBIVFRQIDEuMCBhbmQgSFRUUCAxLjEuCitTZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IGNodW5rZWQgZW5jb2RpbmcgZm9yIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UKK2JvZGllcy4KKworQ2xpZW50cyBTSE9VTEQgc3VwcG9ydCBib3RoIEhUVFAgMS4wIGFuZCBIVFRQIDEuMS4KK0NsaWVudHMgU0hPVUxEIHN1cHBvcnQgY2h1bmtlZCBlbmNvZGluZyBmb3IgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZQorYm9kaWVzLgorCitTZXJ2ZXJzIE1BWSByZXR1cm4gRVRhZyBhbmQvb3IgTGFzdC1Nb2RpZmllZCBoZWFkZXJzLgorCitDbGllbnRzIE1BWSByZXZhbGlkYXRlIGNhY2hlZCBlbnRpdGllcyBieSBpbmNsdWRpbmcgSWYtTW9kaWZpZWQtU2luY2UKK2FuZC9vciBJZi1Ob25lLU1hdGNoIHJlcXVlc3QgaGVhZGVycy4KKworU2VydmVycyBNQVkgcmV0dXJuIGAzMDQgTm90IE1vZGlmaWVkYCBpZiB0aGUgcmVsZXZhbnQgaGVhZGVycyBhcHBlYXIKK2luIHRoZSByZXF1ZXN0IGFuZCB0aGUgZW50aXR5IGhhcyBub3QgY2hhbmdlZC4gIENsaWVudHMgTVVTVCB0cmVhdAorYDMwNCBOb3QgTW9kaWZpZWRgIGlkZW50aWNhbCB0byBgMjAwIE9LYCBieSByZXVzaW5nIHRoZSBjYWNoZWQgZW50aXR5LgorCitDbGllbnRzIE1BWSByZXVzZSBhIGNhY2hlZCBlbnRpdHkgd2l0aG91dCByZXZhbGlkYXRpb24gaWYgdGhlCitDYWNoZS1Db250cm9sIGFuZC9vciBFeHBpcmVzIGhlYWRlciBwZXJtaXRzIGNhY2hpbmcuICBDbGllbnRzIGFuZAorc2VydmVycyBNVVNUIGZvbGxvdyBSRkMgMjYxNiBmb3IgY2FjaGUgY29udHJvbHMuCisKKworRGlzY292ZXJpbmcgUmVmZXJlbmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgSFRUUCBjbGllbnRzIE1VU1QgYmVnaW4gZWl0aGVyIGEgZmV0Y2ggb3IgYSBwdXNoIGV4Y2hhbmdlIGJ5CitkaXNjb3ZlcmluZyB0aGUgcmVmZXJlbmNlcyBhdmFpbGFibGUgb24gdGhlIHJlbW90ZSByZXBvc2l0b3J5LgorCitEdW1iIENsaWVudHMKK35+fn5+fn5+fn5+fgorCitIVFRQIGNsaWVudHMgdGhhdCBvbmx5IHN1cHBvcnQgdGhlICJkdW1iIiBwcm90b2NvbCBNVVNUIGRpc2NvdmVyCityZWZlcmVuY2VzIGJ5IG1ha2luZyBhIHJlcXVlc3QgZm9yIHRoZSBzcGVjaWFsIGluZm8vcmVmcyBmaWxlIG9mCit0aGUgcmVwb3NpdG9yeS4KKworRHVtYiBIVFRQIGNsaWVudHMgTVVTVCBtYWtlIGEgYEdFVGAgcmVxdWVzdCB0byBgJEdJVF9VUkwvaW5mby9yZWZzYCwKK3dpdGhvdXQgYW55IHNlYXJjaC9xdWVyeSBwYXJhbWV0ZXJzLgorCisgICBDOiBHRVQgJEdJVF9VUkwvaW5mby9yZWZzIEhUVFAvMS4wCisKKyAgIFM6IDIwMCBPSworICAgUzoKKyAgIFM6IDk1ZGNmYTM2MzMwMDRkYTAwNDlkM2QwZmEwM2Y4MDU4OWNiY2FmMzEJcmVmcy9oZWFkcy9tYWludAorICAgUzogZDA0OWY2YzI3YTIyNDRlMTIwNDE5NTVlMjYyYTQwNGM3ZmFiYTM1NQlyZWZzL2hlYWRzL21hc3RlcgorICAgUzogMmNiNThiNzk0ODhhOThkMjcyMWNlYTY0NDg3NWE4ZGQwMDI2YjExNQlyZWZzL3RhZ3MvdjEuMAorICAgUzogYTNjMmUyNDAyYjk5MTYzZDFkNTk3NTZlNWYyMDdhZTIxY2NjYmE0YwlyZWZzL3RhZ3MvdjEuMF57fQorCitUaGUgQ29udGVudC1UeXBlIG9mIHRoZSByZXR1cm5lZCBpbmZvL3JlZnMgZW50aXR5IFNIT1VMRCBiZQorYHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThgLCBidXQgTUFZIGJlIGFueSBjb250ZW50IHR5cGUuCitDbGllbnRzIE1VU1QgTk9UIGF0dGVtcHQgdG8gdmFsaWRhdGUgdGhlIHJldHVybmVkIENvbnRlbnQtVHlwZS4KK0R1bWIgc2VydmVycyBNVVNUIE5PVCByZXR1cm4gYSByZXR1cm4gdHlwZSBzdGFydGluZyB3aXRoCitgYXBwbGljYXRpb24veC1naXQtYC4KKworQ2FjaGUtQ29udHJvbCBoZWFkZXJzIE1BWSBiZSByZXR1cm5lZCB0byBkaXNhYmxlIGNhY2hpbmcgb2YgdGhlCityZXR1cm5lZCBlbnRpdHkuCisKK1doZW4gZXhhbWluaW5nIHRoZSByZXNwb25zZSBjbGllbnRzIFNIT1VMRCBvbmx5IGV4YW1pbmUgdGhlIEhUVFAKK3N0YXR1cyBjb2RlLiAgVmFsaWQgcmVzcG9uc2VzIGFyZSBgMjAwIE9LYCwgb3IgYDMwNCBOb3QgTW9kaWZpZWRgLgorCitUaGUgcmV0dXJuZWQgY29udGVudCBpcyBhIFVOSVggZm9ybWF0dGVkIHRleHQgZmlsZSBkZXNjcmliaW5nCitlYWNoIHJlZiBhbmQgaXRzIGtub3duIHZhbHVlLiAgVGhlIGZpbGUgU0hPVUxEIGJlIHNvcnRlZCBieSBuYW1lCithY2NvcmRpbmcgdG8gdGhlIEMgbG9jYWxlIG9yZGVyaW5nLiAgVGhlIGZpbGUgU0hPVUxEIE5PVCBpbmNsdWRlCit0aGUgZGVmYXVsdCByZWYgbmFtZWQgYEhFQURgLgorCisgIGluZm9fcmVmcyAgID0gICooIHJlZl9yZWNvcmQgKQorICByZWZfcmVjb3JkICA9ICBhbnlfcmVmIC8gcGVlbGVkX3JlZgorCisgIGFueV9yZWYgICAgID0gIG9iai1pZCBIVEFCIHJlZm5hbWUgTEYKKyAgcGVlbGVkX3JlZiAgPSAgb2JqLWlkIEhUQUIgcmVmbmFtZSBMRgorCQkgb2JqLWlkIEhUQUIgcmVmbmFtZSAiXnt9IiBMRgorCitTbWFydCBDbGllbnRzCit+fn5+fn5+fn5+fn5+CisKK0hUVFAgY2xpZW50cyB0aGF0IHN1cHBvcnQgdGhlICJzbWFydCIgcHJvdG9jb2wgKG9yIGJvdGggdGhlCisic21hcnQiIGFuZCAiZHVtYiIgcHJvdG9jb2xzKSBNVVNUIGRpc2NvdmVyIHJlZmVyZW5jZXMgYnkgbWFraW5nCithIHBhcmFtZXRlcml6ZWQgcmVxdWVzdCBmb3IgdGhlIGluZm8vcmVmcyBmaWxlIG9mIHRoZSByZXBvc2l0b3J5LgorCitUaGUgcmVxdWVzdCBNVVNUIGNvbnRhaW4gZXhhY3RseSBvbmUgcXVlcnkgcGFyYW1ldGVyLAorYHNlcnZpY2U9JHNlcnZpY2VuYW1lYCwgd2hlcmUgYCRzZXJ2aWNlbmFtZWAgTVVTVCBiZSB0aGUgc2VydmljZQorbmFtZSB0aGUgY2xpZW50IHdpc2hlcyB0byBjb250YWN0IHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24uCitUaGUgcmVxdWVzdCBNVVNUIE5PVCBjb250YWluIGFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycy4KKworICAgQzogR0VUICRHSVRfVVJML2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMAorCitkdW1iIHNlcnZlciByZXBseToKKworICAgUzogMjAwIE9LCisgICBTOgorICAgUzogOTVkY2ZhMzYzMzAwNGRhMDA0OWQzZDBmYTAzZjgwNTg5Y2JjYWYzMQlyZWZzL2hlYWRzL21haW50CisgICBTOiBkMDQ5ZjZjMjdhMjI0NGUxMjA0MTk1NWUyNjJhNDA0YzdmYWJhMzU1CXJlZnMvaGVhZHMvbWFzdGVyCisgICBTOiAyY2I1OGI3OTQ4OGE5OGQyNzIxY2VhNjQ0ODc1YThkZDAwMjZiMTE1CXJlZnMvdGFncy92MS4wCisgICBTOiBhM2MyZTI0MDJiOTkxNjNkMWQ1OTc1NmU1ZjIwN2FlMjFjY2NiYTRjCXJlZnMvdGFncy92MS4wXnt9CisKK3NtYXJ0IHNlcnZlciByZXBseToKKworICAgUzogMjAwIE9LCisgICBTOiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLWFkdmVydGlzZW1lbnQKKyAgIFM6IENhY2hlLUNvbnRyb2w6IG5vLWNhY2hlCisgICBTOgorICAgUzogMDAxZSMgc2VydmljZT1naXQtdXBsb2FkLXBhY2tcbgorICAgUzogMDA0ODk1ZGNmYTM2MzMwMDRkYTAwNDlkM2QwZmEwM2Y4MDU4OWNiY2FmMzEgcmVmcy9oZWFkcy9tYWludFwwbXVsdGlfYWNrXG4KKyAgIFM6IDAwNDJkMDQ5ZjZjMjdhMjI0NGUxMjA0MTk1NWUyNjJhNDA0YzdmYWJhMzU1IHJlZnMvaGVhZHMvbWFzdGVyXG4KKyAgIFM6IDAwM2MyY2I1OGI3OTQ4OGE5OGQyNzIxY2VhNjQ0ODc1YThkZDAwMjZiMTE1IHJlZnMvdGFncy92MS4wXG4KKyAgIFM6IDAwM2ZhM2MyZTI0MDJiOTkxNjNkMWQ1OTc1NmU1ZjIwN2FlMjFjY2NiYTRjIHJlZnMvdGFncy92MS4wXnt9XG4KKworRHVtYiBTZXJ2ZXIgUmVzcG9uc2UKK15eXl5eXl5eXl5eXl5eXl5eXl5eCitEdW1iIHNlcnZlcnMgTVVTVCByZXNwb25kIHdpdGggdGhlIGR1bWIgc2VydmVyIHJlcGx5IGZvcm1hdC4KKworU2VlIHRoZSBwcmlvciBzZWN0aW9uIHVuZGVyIGR1bWIgY2xpZW50cyBmb3IgYSBtb3JlIGRldGFpbGVkCitkZXNjcmlwdGlvbiBvZiB0aGUgZHVtYiBzZXJ2ZXIgcmVzcG9uc2UuCisKK1NtYXJ0IFNlcnZlciBSZXNwb25zZQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitJZiB0aGUgc2VydmVyIGRvZXMgbm90IHJlY29nbml6ZSB0aGUgcmVxdWVzdGVkIHNlcnZpY2UgbmFtZSwgb3IgdGhlCityZXF1ZXN0ZWQgc2VydmljZSBuYW1lIGhhcyBiZWVuIGRpc2FibGVkIGJ5IHRoZSBzZXJ2ZXIgYWRtaW5pc3RyYXRvciwKK3RoZSBzZXJ2ZXIgTVVTVCByZXNwb25kIHdpdGggdGhlIGA0MDMgRm9yYmlkZGVuYCBIVFRQIHN0YXR1cyBjb2RlLgorCitPdGhlcndpc2UsIHNtYXJ0IHNlcnZlcnMgTVVTVCByZXNwb25kIHdpdGggdGhlIHNtYXJ0IHNlcnZlciByZXBseQorZm9ybWF0IGZvciB0aGUgcmVxdWVzdGVkIHNlcnZpY2UgbmFtZS4KKworQ2FjaGUtQ29udHJvbCBoZWFkZXJzIFNIT1VMRCBiZSB1c2VkIHRvIGRpc2FibGUgY2FjaGluZyBvZiB0aGUKK3JldHVybmVkIGVudGl0eS4KKworVGhlIENvbnRlbnQtVHlwZSBNVVNUIGJlIGBhcHBsaWNhdGlvbi94LSRzZXJ2aWNlbmFtZS1hZHZlcnRpc2VtZW50YC4KK0NsaWVudHMgU0hPVUxEIGZhbGwgYmFjayB0byB0aGUgZHVtYiBwcm90b2NvbCBpZiBhbm90aGVyIGNvbnRlbnQKK3R5cGUgaXMgcmV0dXJuZWQuICBXaGVuIGZhbGxpbmcgYmFjayB0byB0aGUgZHVtYiBwcm90b2NvbCBjbGllbnRzCitTSE9VTEQgTk9UIG1ha2UgYW4gYWRkaXRpb25hbCByZXF1ZXN0IHRvIGAkR0lUX1VSTC9pbmZvL3JlZnNgLCBidXQKK2luc3RlYWQgU0hPVUxEIHVzZSB0aGUgcmVzcG9uc2UgYWxyZWFkeSBpbiBoYW5kLiAgQ2xpZW50cyBNVVNUIE5PVAorY29udGludWUgaWYgdGhleSBkbyBub3Qgc3VwcG9ydCB0aGUgZHVtYiBwcm90b2NvbC4KKworQ2xpZW50cyBNVVNUIHZhbGlkYXRlIHRoZSBzdGF0dXMgY29kZSBpcyBlaXRoZXIgYDIwMCBPS2Agb3IKK2AzMDQgTm90IE1vZGlmaWVkYC4KKworQ2xpZW50cyBNVVNUIHZhbGlkYXRlIHRoZSBmaXJzdCBmaXZlIGJ5dGVzIG9mIHRoZSByZXNwb25zZSBlbnRpdHkKK21hdGNoZXMgdGhlIHJlZ2V4IGBeWzAtOWEtZl17NH0jYC4gIElmIHRoaXMgdGVzdCBmYWlscywgY2xpZW50cworTVVTVCBOT1QgY29udGludWUuCisKK0NsaWVudHMgTVVTVCBwYXJzZSB0aGUgZW50aXJlIHJlc3BvbnNlIGFzIGEgc2VxdWVuY2Ugb2YgcGt0LWxpbmUKK3JlY29yZHMuCisKK0NsaWVudHMgTVVTVCB2ZXJpZnkgdGhlIGZpcnN0IHBrdC1saW5lIGlzIGAjIHNlcnZpY2U9JHNlcnZpY2VuYW1lYC4KK1NlcnZlcnMgTVVTVCBzZXQgJHNlcnZpY2VuYW1lIHRvIGJlIHRoZSByZXF1ZXN0IHBhcmFtZXRlciB2YWx1ZS4KK1NlcnZlcnMgU0hPVUxEIGluY2x1ZGUgYW4gTEYgYXQgdGhlIGVuZCBvZiB0aGlzIGxpbmUuCitDbGllbnRzIE1VU1QgaWdub3JlIGFuIExGIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuCisKK1NlcnZlcnMgTVVTVCB0ZXJtaW5hdGUgdGhlIHJlc3BvbnNlIHdpdGggdGhlIG1hZ2ljIGAwMDAwYCBlbmQKK3BrdC1saW5lIG1hcmtlci4KKworVGhlIHJldHVybmVkIHJlc3BvbnNlIGlzIGEgcGt0LWxpbmUgc3RyZWFtIGRlc2NyaWJpbmcgZWFjaCByZWYgYW5kCitpdHMga25vd24gdmFsdWUuICBUaGUgc3RyZWFtIFNIT1VMRCBiZSBzb3J0ZWQgYnkgbmFtZSBhY2NvcmRpbmcgdG8KK3RoZSBDIGxvY2FsZSBvcmRlcmluZy4gIFRoZSBzdHJlYW0gU0hPVUxEIGluY2x1ZGUgdGhlIGRlZmF1bHQgcmVmCituYW1lZCBgSEVBRGAgYXMgdGhlIGZpcnN0IHJlZi4gIFRoZSBzdHJlYW0gTVVTVCBpbmNsdWRlIGNhcGFiaWxpdHkKK2RlY2xhcmF0aW9ucyBiZWhpbmQgYSBOVUwgb24gdGhlIGZpcnN0IHJlZi4KKworICBzbWFydF9yZXBseSAgICAgPSAgUEtULUxJTkUoIiMgc2VydmljZT0kc2VydmljZW5hbWUiIExGKQorCQkgICAgIHJlZl9saXN0CisJCSAgICAgIjAwMDAiCisgIHJlZl9saXN0ICAgICAgICA9ICBlbXB0eV9saXN0IC8gbm9uX2VtcHR5X2xpc3QKKworICBlbXB0eV9saXN0ICAgICAgPSAgUEtULUxJTkUoemVyby1pZCBTUCAiY2FwYWJpbGl0aWVzXnt9IiBOVUwgY2FwLWxpc3QgTEYpCisKKyAgbm9uX2VtcHR5X2xpc3QgID0gIFBLVC1MSU5FKG9iai1pZCBTUCBuYW1lIE5VTCBjYXBfbGlzdCBMRikKKwkJICAgICAqcmVmX3JlY29yZAorCisgIGNhcC1saXN0ICAgICAgICA9ICBjYXBhYmlsaXR5ICooU1AgY2FwYWJpbGl0eSkKKyAgY2FwYWJpbGl0eSAgICAgID0gIDEqKExDX0FMUEhBIC8gRElHSVQgLyAiLSIgLyAiXyIpCisgIExDX0FMUEhBICAgICAgICA9ICAleDYxLTdBCisKKyAgcmVmX3JlY29yZCAgICAgID0gIGFueV9yZWYgLyBwZWVsZWRfcmVmCisgIGFueV9yZWYgICAgICAgICA9ICBQS1QtTElORShvYmotaWQgU1AgbmFtZSBMRikKKyAgcGVlbGVkX3JlZiAgICAgID0gIFBLVC1MSU5FKG9iai1pZCBTUCBuYW1lIExGKQorCQkgICAgIFBLVC1MSU5FKG9iai1pZCBTUCBuYW1lICJee30iIExGCisKKworU21hcnQgU2VydmljZSBnaXQtdXBsb2FkLXBhY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBzZXJ2aWNlIHJlYWRzIGZyb20gdGhlIHJlcG9zaXRvcnkgcG9pbnRlZCB0byBieSBgJEdJVF9VUkxgLgorCitDbGllbnRzIE1VU1QgZmlyc3QgcGVyZm9ybSByZWYgZGlzY292ZXJ5IHdpdGgKK2AkR0lUX1VSTC9pbmZvL3JlZnM/c2VydmljZT1naXQtdXBsb2FkLXBhY2tgLgorCisgICBDOiBQT1NUICRHSVRfVVJML2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMAorICAgQzogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1yZXF1ZXN0CisgICBDOgorICAgQzogMDAzMndhbnQgMGE1M2U5ZGRlYWRkYWQ2M2FkMTA2ODYwMjM3YmJmNTM0MTFkMTFhN1xuCisgICBDOiAwMDMyaGF2ZSA0NDFiNDBkODMzZmRmYTkzZWIyOTA4ZTUyNzQyMjQ4ZmFmMGVlOTkzXG4KKyAgIEM6IDAwMDAKKworICAgUzogMjAwIE9LCisgICBTOiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLXJlc3VsdAorICAgUzogQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUKKyAgIFM6CisgICBTOiAuLi4uQUNLICVzLCBjb250aW51ZQorICAgUzogLi4uLk5BSworCitDbGllbnRzIE1VU1QgTk9UIHJldXNlIG9yIHJldmFsaWRhdGUgYSBjYWNoZWQgcmVzcG9uc2UuCitTZXJ2ZXJzIE1VU1QgaW5jbHVkZSBzdWZmaWNpZW50IENhY2hlLUNvbnRyb2wgaGVhZGVycwordG8gcHJldmVudCBjYWNoaW5nIG9mIHRoZSByZXNwb25zZS4KKworU2VydmVycyBTSE9VTEQgc3VwcG9ydCBhbGwgY2FwYWJpbGl0aWVzIGRlZmluZWQgaGVyZS4KKworQ2xpZW50cyBNVVNUIHNlbmQgYXQgbGVhc3Qgb25lICJ3YW50IiBjb21tYW5kIGluIHRoZSByZXF1ZXN0IGJvZHkuCitDbGllbnRzIE1VU1QgTk9UIHJlZmVyZW5jZSBhbiBpZCBpbiBhICJ3YW50IiBjb21tYW5kIHdoaWNoIGRpZCBub3QKK2FwcGVhciBpbiB0aGUgcmVzcG9uc2Ugb2J0YWluZWQgdGhyb3VnaCByZWYgZGlzY292ZXJ5IHVubGVzcyB0aGUKK3NlcnZlciBhZHZlcnRpc2VzIGNhcGFiaWxpdHkgYGFsbG93LXRpcC1zaGExLWluLXdhbnRgIG9yCitgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudGAuCisKKyAgY29tcHV0ZV9yZXF1ZXN0ICAgPSAgd2FudF9saXN0CisJCSAgICAgICBoYXZlX2xpc3QKKwkJICAgICAgIHJlcXVlc3RfZW5kCisgIHJlcXVlc3RfZW5kICAgICAgID0gICIwMDAwIiAvICJkb25lIgorCisgIHdhbnRfbGlzdCAgICAgICAgID0gIFBLVC1MSU5FKHdhbnQgTlVMIGNhcF9saXN0IExGKQorCQkgICAgICAgKih3YW50X3BrdCkKKyAgd2FudF9wa3QgICAgICAgICAgPSAgUEtULUxJTkUod2FudCBMRikKKyAgd2FudCAgICAgICAgICAgICAgPSAgIndhbnQiIFNQIGlkCisgIGNhcF9saXN0ICAgICAgICAgID0gICooU1AgY2FwYWJpbGl0eSkgU1AKKworICBoYXZlX2xpc3QgICAgICAgICA9ICAqUEtULUxJTkUoImhhdmUiIFNQIGlkIExGKQorCitUT0RPOiBEb2N1bWVudCB0aGlzIGZ1cnRoZXIuCisKK1RoZSBOZWdvdGlhdGlvbiBBbGdvcml0aG0KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KK1RoZSBjb21wdXRhdGlvbiB0byBzZWxlY3QgdGhlIG1pbmltYWwgcGFjayBwcm9jZWVkcyBhcyBmb2xsb3dzCisoQyA9IGNsaWVudCwgUyA9IHNlcnZlcik6CisKKydpbml0IHN0ZXA6JworCitDOiBVc2UgcmVmIGRpc2NvdmVyeSB0byBvYnRhaW4gdGhlIGFkdmVydGlzZWQgcmVmcy4KKworQzogUGxhY2UgYW55IG9iamVjdCBzZWVuIGludG8gc2V0IGBhZHZlcnRpc2VkYC4KKworQzogQnVpbGQgYW4gZW1wdHkgc2V0LCBgY29tbW9uYCwgdG8gaG9sZCB0aGUgb2JqZWN0cyB0aGF0IGFyZSBsYXRlcgorICAgZGV0ZXJtaW5lZCB0byBiZSBvbiBib3RoIGVuZHMuCisKK0M6IEJ1aWxkIGEgc2V0LCBgd2FudGAsIG9mIHRoZSBvYmplY3RzIGZyb20gYGFkdmVydGlzZWRgIHRoZSBjbGllbnQKKyAgIHdhbnRzIHRvIGZldGNoLCBiYXNlZCBvbiB3aGF0IGl0IHNhdyBkdXJpbmcgcmVmIGRpc2NvdmVyeS4KKworQzogU3RhcnQgYSBxdWV1ZSwgYGNfcGVuZGluZ2AsIG9yZGVyZWQgYnkgY29tbWl0IHRpbWUgKHBvcHBpbmcgbmV3ZXN0CisgICBmaXJzdCkuICBBZGQgYWxsIGNsaWVudCByZWZzLiAgV2hlbiBhIGNvbW1pdCBpcyBwb3BwZWQgZnJvbQorICAgdGhlIHF1ZXVlIGl0cyBwYXJlbnRzIFNIT1VMRCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGJhY2suCisgICBDb21taXRzIE1VU1Qgb25seSBlbnRlciB0aGUgcXVldWUgb25jZS4KKworJ29uZSBjb21wdXRlIHN0ZXA6JworCitDOiBTZW5kIG9uZSBgJEdJVF9VUkwvZ2l0LXVwbG9hZC1wYWNrYCByZXF1ZXN0OgorCisgICBDOiAwMDMyd2FudCA8d2FudCAjMT4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICBDOiAwMDMyd2FudCA8d2FudCAjMj4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICAuLi4uCisgICBDOiAwMDMyaGF2ZSA8Y29tbW9uICMxPi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICBDOiAwMDMyaGF2ZSA8Y29tbW9uICMyPi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICAuLi4uCisgICBDOiAwMDMyaGF2ZSA8aGF2ZSAjMT4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICBDOiAwMDMyaGF2ZSA8aGF2ZSAjMj4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICAuLi4uCisgICBDOiAwMDAwCisKK1RoZSBzdHJlYW0gaXMgb3JnYW5pemVkIGludG8gImNvbW1hbmRzIiwgd2l0aCBlYWNoIGNvbW1hbmQKK2FwcGVhcmluZyBieSBpdHNlbGYgaW4gYSBwa3QtbGluZS4gIFdpdGhpbiBhIGNvbW1hbmQgbGluZSwKK3RoZSB0ZXh0IGxlYWRpbmcgdXAgdG8gdGhlIGZpcnN0IHNwYWNlIGlzIHRoZSBjb21tYW5kIG5hbWUsCithbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSB0byB0aGUgZmlyc3QgTEYgaXMgdGhlIHZhbHVlLgorQ29tbWFuZCBsaW5lcyBhcmUgdGVybWluYXRlZCB3aXRoIGFuIExGIGFzIHRoZSBsYXN0IGJ5dGUgb2YKK3RoZSBwa3QtbGluZSB2YWx1ZS4KKworQ29tbWFuZHMgTVVTVCBhcHBlYXIgaW4gdGhlIGZvbGxvd2luZyBvcmRlciwgaWYgdGhleSBhcHBlYXIKK2F0IGFsbCBpbiB0aGUgcmVxdWVzdCBzdHJlYW06CisKKyogIndhbnQiCisqICJoYXZlIgorCitUaGUgc3RyZWFtIGlzIHRlcm1pbmF0ZWQgYnkgYSBwa3QtbGluZSBmbHVzaCAoYDAwMDBgKS4KKworQSBzaW5nbGUgIndhbnQiIG9yICJoYXZlIiBjb21tYW5kIE1VU1QgaGF2ZSBvbmUgaGV4IGZvcm1hdHRlZAorU0hBLTEgYXMgaXRzIHZhbHVlLiAgTXVsdGlwbGUgU0hBLTFzIE1VU1QgYmUgc2VudCBieSBzZW5kaW5nCittdWx0aXBsZSBjb21tYW5kcy4KKworVGhlIGBoYXZlYCBsaXN0IGlzIGNyZWF0ZWQgYnkgcG9wcGluZyB0aGUgZmlyc3QgMzIgY29tbWl0cworZnJvbSBgY19wZW5kaW5nYC4gIExlc3MgY2FuIGJlIHN1cHBsaWVkIGlmIGBjX3BlbmRpbmdgIGVtcHRpZXMuCisKK0lmIHRoZSBjbGllbnQgaGFzIHNlbnQgMjU2ICJoYXZlIiBjb21taXRzIGFuZCBoYXMgbm90IHlldAorcmVjZWl2ZWQgb25lIG9mIHRob3NlIGJhY2sgZnJvbSBgc19jb21tb25gLCBvciB0aGUgY2xpZW50IGhhcworZW1wdGllZCBgY19wZW5kaW5nYCBpdCBTSE9VTEQgaW5jbHVkZSBhICJkb25lIiBjb21tYW5kIHRvIGxldAordGhlIHNlcnZlciBrbm93IGl0IHdvbid0IHByb2NlZWQ6CisKKyAgIEM6IDAwMDlkb25lCisKK1M6IFBhcnNlIHRoZSBnaXQtdXBsb2FkLXBhY2sgcmVxdWVzdDoKKworVmVyaWZ5IGFsbCBvYmplY3RzIGluIGB3YW50YCBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gcmVmcy4KKworVGhlIHNlcnZlciBNQVkgd2FsayBiYWNrd2FyZHMgdGhyb3VnaCBoaXN0b3J5IG9yIHRocm91Z2gKK3RoZSByZWZsb2cgdG8gcGVybWl0IHNsaWdodGx5IHN0YWxlIHJlcXVlc3RzLgorCitJZiBubyAid2FudCIgb2JqZWN0cyBhcmUgcmVjZWl2ZWQsIHNlbmQgYW4gZXJyb3I6CitUT0RPOiBEZWZpbmUgZXJyb3IgaWYgbm8gIndhbnQiIGxpbmVzIGFyZSByZXF1ZXN0ZWQuCisKK0lmIGFueSAid2FudCIgb2JqZWN0IGlzIG5vdCByZWFjaGFibGUsIHNlbmQgYW4gZXJyb3I6CitUT0RPOiBEZWZpbmUgZXJyb3IgaWYgYW4gaW52YWxpZCAid2FudCIgaXMgcmVxdWVzdGVkLgorCitDcmVhdGUgYW4gZW1wdHkgbGlzdCwgYHNfY29tbW9uYC4KKworSWYgImhhdmUiIHdhcyBzZW50OgorCitMb29wIHRocm91Z2ggdGhlIG9iamVjdHMgaW4gdGhlIG9yZGVyIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQuCisKK0ZvciBlYWNoIG9iamVjdCwgaWYgdGhlIHNlcnZlciBoYXMgdGhlIG9iamVjdCByZWFjaGFibGUgZnJvbQorYSByZWYsIGFkZCBpdCB0byBgc19jb21tb25gLiAgSWYgYSBjb21taXQgaXMgYWRkZWQgdG8gYHNfY29tbW9uYCwKK2RvIG5vdCBhZGQgYW55IGFuY2VzdG9ycywgZXZlbiBpZiB0aGV5IGFsc28gYXBwZWFyIGluIGBoYXZlYC4KKworUzogU2VuZCB0aGUgZ2l0LXVwbG9hZC1wYWNrIHJlc3BvbnNlOgorCitJZiB0aGUgc2VydmVyIGhhcyBmb3VuZCBhIGNsb3NlZCBzZXQgb2Ygb2JqZWN0cyB0byBwYWNrIG9yIHRoZQorcmVxdWVzdCBlbmRzIHdpdGggImRvbmUiLCBpdCByZXBsaWVzIHdpdGggdGhlIHBhY2suCitUT0RPOiBEb2N1bWVudCB0aGUgcGFjayBiYXNlZCByZXNwb25zZQorCisgICBTOiBQQUNLLi4uCisKK1RoZSByZXR1cm5lZCBzdHJlYW0gaXMgdGhlIHNpZGUtYmFuZC02NGsgcHJvdG9jb2wgc3VwcG9ydGVkCitieSB0aGUgZ2l0LXVwbG9hZC1wYWNrIHNlcnZpY2UsIGFuZCB0aGUgcGFjayBpcyBlbWJlZGRlZCBpbnRvCitzdHJlYW0gMS4gIFByb2dyZXNzIG1lc3NhZ2VzIGZyb20gdGhlIHNlcnZlciBzaWRlIE1BWSBhcHBlYXIKK2luIHN0cmVhbSAyLgorCitIZXJlIGEgImNsb3NlZCBzZXQgb2Ygb2JqZWN0cyIgaXMgZGVmaW5lZCB0byBoYXZlIGF0IGxlYXN0CitvbmUgcGF0aCBmcm9tIGV2ZXJ5ICJ3YW50IiB0byBhdCBsZWFzdCBvbmUgImNvbW1vbiIgb2JqZWN0LgorCitJZiB0aGUgc2VydmVyIG5lZWRzIG1vcmUgaW5mb3JtYXRpb24sIGl0IHJlcGxpZXMgd2l0aCBhCitzdGF0dXMgY29udGludWUgcmVzcG9uc2U6CitUT0RPOiBEb2N1bWVudCB0aGUgbm9uLXBhY2sgcmVzcG9uc2UKKworQzogUGFyc2UgdGhlIHVwbG9hZC1wYWNrIHJlc3BvbnNlOgorICAgVE9ETzogRG9jdW1lbnQgcGFyc2luZyByZXNwb25zZQorCisnRG8gYW5vdGhlciBjb21wdXRlIHN0ZXAuJworCisKK1NtYXJ0IFNlcnZpY2UgZ2l0LXJlY2VpdmUtcGFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIHNlcnZpY2UgcmVhZHMgZnJvbSB0aGUgcmVwb3NpdG9yeSBwb2ludGVkIHRvIGJ5IGAkR0lUX1VSTGAuCisKK0NsaWVudHMgTVVTVCBmaXJzdCBwZXJmb3JtIHJlZiBkaXNjb3Zlcnkgd2l0aAorYCRHSVRfVVJML2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2tgLgorCisgICBDOiBQT1NUICRHSVRfVVJML2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjAKKyAgIEM6IENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtcmVjZWl2ZS1wYWNrLXJlcXVlc3QKKyAgIEM6CisgICBDOiAuLi4uMGE1M2U5ZGRlYWRkYWQ2M2FkMTA2ODYwMjM3YmJmNTM0MTFkMTFhNyA0NDFiNDBkODMzZmRmYTkzZWIyOTA4ZTUyNzQyMjQ4ZmFmMGVlOTkzIHJlZnMvaGVhZHMvbWFpbnRcMCByZXBvcnQtc3RhdHVzCisgICBDOiAwMDAwCisgICBDOiBQQUNLLi4uLgorCisgICBTOiAyMDAgT0sKKyAgIFM6IENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC1naXQtcmVjZWl2ZS1wYWNrLXJlc3VsdAorICAgUzogQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUKKyAgIFM6CisgICBTOiAuLi4uCisKK0NsaWVudHMgTVVTVCBOT1QgcmV1c2Ugb3IgcmV2YWxpZGF0ZSBhIGNhY2hlZCByZXNwb25zZS4KK1NlcnZlcnMgTVVTVCBpbmNsdWRlIHN1ZmZpY2llbnQgQ2FjaGUtQ29udHJvbCBoZWFkZXJzCit0byBwcmV2ZW50IGNhY2hpbmcgb2YgdGhlIHJlc3BvbnNlLgorCitTZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IGFsbCBjYXBhYmlsaXRpZXMgZGVmaW5lZCBoZXJlLgorCitDbGllbnRzIE1VU1Qgc2VuZCBhdCBsZWFzdCBvbmUgY29tbWFuZCBpbiB0aGUgcmVxdWVzdCBib2R5LgorV2l0aGluIHRoZSBjb21tYW5kIHBvcnRpb24gb2YgdGhlIHJlcXVlc3QgYm9keSBjbGllbnRzIFNIT1VMRCBzZW5kCit0aGUgaWQgb2J0YWluZWQgdGhyb3VnaCByZWYgZGlzY292ZXJ5IGFzIG9sZF9pZC4KKworICB1cGRhdGVfcmVxdWVzdCAgPSAgY29tbWFuZF9saXN0CisJCSAgICAgIlBBQ0siIDxiaW5hcnkgZGF0YT4KKworICBjb21tYW5kX2xpc3QgICAgPSAgUEtULUxJTkUoY29tbWFuZCBOVUwgY2FwX2xpc3QgTEYpCisJCSAgICAgKihjb21tYW5kX3BrdCkKKyAgY29tbWFuZF9wa3QgICAgID0gIFBLVC1MSU5FKGNvbW1hbmQgTEYpCisgIGNhcF9saXN0ICAgICAgICA9ICAqKFNQIGNhcGFiaWxpdHkpIFNQCisKKyAgY29tbWFuZCAgICAgICAgID0gIGNyZWF0ZSAvIGRlbGV0ZSAvIHVwZGF0ZQorICBjcmVhdGUgICAgICAgICAgPSAgemVyby1pZCBTUCBuZXdfaWQgU1AgbmFtZQorICBkZWxldGUgICAgICAgICAgPSAgb2xkX2lkIFNQIHplcm8taWQgU1AgbmFtZQorICB1cGRhdGUgICAgICAgICAgPSAgb2xkX2lkIFNQIG5ld19pZCBTUCBuYW1lCisKK1RPRE86IERvY3VtZW50IHRoaXMgZnVydGhlci4KKworCitSZWZlcmVuY2VzCistLS0tLS0tLS0tCisKK2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE3MzgudHh0W1JGQyAxNzM4OiBVbmlmb3JtIFJlc291cmNlIExvY2F0b3JzIChVUkwpXQoraHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjYxNi50eHRbUkZDIDI2MTY6IEh5cGVydGV4dCBUcmFuc2ZlciBQcm90b2NvbCAtLSBIVFRQLzEuMV0KK2xpbms6dGVjaG5pY2FsL3BhY2stcHJvdG9jb2wuaHRtbAorbGluazp0ZWNobmljYWwvcHJvdG9jb2wtY2FwYWJpbGl0aWVzLmh0bWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL2luZGV4LWZvcm1hdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZTBiMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9pbmRleC1mb3JtYXQudHh0CkBAIC0wLDAgKzEsMjk3IEBACitHaXQgaW5kZXggZm9ybWF0Cis9PT09PT09PT09PT09PT09CisKKz09IFRoZSBHaXQgaW5kZXggZmlsZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQKKworICBBbGwgYmluYXJ5IG51bWJlcnMgYXJlIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4gVmVyc2lvbiAyIGlzIGRlc2NyaWJlZAorICBoZXJlIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLgorCisgICAtIEEgMTItYnl0ZSBoZWFkZXIgY29uc2lzdGluZyBvZgorCisgICAgIDQtYnl0ZSBzaWduYXR1cmU6CisgICAgICAgVGhlIHNpZ25hdHVyZSBpcyB7ICdEJywgJ0knLCAnUicsICdDJyB9IChzdGFuZHMgZm9yICJkaXJjYWNoZSIpCisKKyAgICAgNC1ieXRlIHZlcnNpb24gbnVtYmVyOgorICAgICAgIFRoZSBjdXJyZW50IHN1cHBvcnRlZCB2ZXJzaW9ucyBhcmUgMiwgMyBhbmQgNC4KKworICAgICAzMi1iaXQgbnVtYmVyIG9mIGluZGV4IGVudHJpZXMuCisKKyAgIC0gQSBudW1iZXIgb2Ygc29ydGVkIGluZGV4IGVudHJpZXMgKHNlZSBiZWxvdykuCisKKyAgIC0gRXh0ZW5zaW9ucworCisgICAgIEV4dGVuc2lvbnMgYXJlIGlkZW50aWZpZWQgYnkgc2lnbmF0dXJlLiBPcHRpb25hbCBleHRlbnNpb25zIGNhbgorICAgICBiZSBpZ25vcmVkIGlmIEdpdCBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoZW0uCisKKyAgICAgR2l0IGN1cnJlbnRseSBzdXBwb3J0cyBjYWNoZWQgdHJlZSBhbmQgcmVzb2x2ZSB1bmRvIGV4dGVuc2lvbnMuCisKKyAgICAgNC1ieXRlIGV4dGVuc2lvbiBzaWduYXR1cmUuIElmIHRoZSBmaXJzdCBieXRlIGlzICdBJy4uJ1onIHRoZQorICAgICBleHRlbnNpb24gaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSBpZ25vcmVkLgorCisgICAgIDMyLWJpdCBzaXplIG9mIHRoZSBleHRlbnNpb24KKworICAgICBFeHRlbnNpb24gZGF0YQorCisgICAtIDE2MC1iaXQgU0hBLTEgb3ZlciB0aGUgY29udGVudCBvZiB0aGUgaW5kZXggZmlsZSBiZWZvcmUgdGhpcworICAgICBjaGVja3N1bS4KKworPT0gSW5kZXggZW50cnkKKworICBJbmRleCBlbnRyaWVzIGFyZSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyIG9uIHRoZSBuYW1lIGZpZWxkLAorICBpbnRlcnByZXRlZCBhcyBhIHN0cmluZyBvZiB1bnNpZ25lZCBieXRlcyAoaS5lLiBtZW1jbXAoKSBvcmRlciwgbm8KKyAgbG9jYWxpemF0aW9uLCBubyBzcGVjaWFsIGNhc2luZyBvZiBkaXJlY3Rvcnkgc2VwYXJhdG9yICcvJykuIEVudHJpZXMKKyAgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBzb3J0ZWQgYnkgdGhlaXIgc3RhZ2UgZmllbGQuCisKKyAgMzItYml0IGN0aW1lIHNlY29uZHMsIHRoZSBsYXN0IHRpbWUgYSBmaWxlJ3MgbWV0YWRhdGEgY2hhbmdlZAorICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IGN0aW1lIG5hbm9zZWNvbmQgZnJhY3Rpb25zCisgICAgdGhpcyBpcyBzdGF0KDIpIGRhdGEKKworICAzMi1iaXQgbXRpbWUgc2Vjb25kcywgdGhlIGxhc3QgdGltZSBhIGZpbGUncyBkYXRhIGNoYW5nZWQKKyAgICB0aGlzIGlzIHN0YXQoMikgZGF0YQorCisgIDMyLWJpdCBtdGltZSBuYW5vc2Vjb25kIGZyYWN0aW9ucworICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IGRldgorICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IGlubworICAgIHRoaXMgaXMgc3RhdCgyKSBkYXRhCisKKyAgMzItYml0IG1vZGUsIHNwbGl0IGludG8gKGhpZ2ggdG8gbG93IGJpdHMpCisKKyAgICA0LWJpdCBvYmplY3QgdHlwZQorICAgICAgdmFsaWQgdmFsdWVzIGluIGJpbmFyeSBhcmUgMTAwMCAocmVndWxhciBmaWxlKSwgMTAxMCAoc3ltYm9saWMgbGluaykKKyAgICAgIGFuZCAxMTEwIChnaXRsaW5rKQorCisgICAgMy1iaXQgdW51c2VkCisKKyAgICA5LWJpdCB1bml4IHBlcm1pc3Npb24uIE9ubHkgMDc1NSBhbmQgMDY0NCBhcmUgdmFsaWQgZm9yIHJlZ3VsYXIgZmlsZXMuCisgICAgU3ltYm9saWMgbGlua3MgYW5kIGdpdGxpbmtzIGhhdmUgdmFsdWUgMCBpbiB0aGlzIGZpZWxkLgorCisgIDMyLWJpdCB1aWQKKyAgICB0aGlzIGlzIHN0YXQoMikgZGF0YQorCisgIDMyLWJpdCBnaWQKKyAgICB0aGlzIGlzIHN0YXQoMikgZGF0YQorCisgIDMyLWJpdCBmaWxlIHNpemUKKyAgICBUaGlzIGlzIHRoZSBvbi1kaXNrIHNpemUgZnJvbSBzdGF0KDIpLCB0cnVuY2F0ZWQgdG8gMzItYml0LgorCisgIDE2MC1iaXQgU0hBLTEgZm9yIHRoZSByZXByZXNlbnRlZCBvYmplY3QKKworICBBIDE2LWJpdCAnZmxhZ3MnIGZpZWxkIHNwbGl0IGludG8gKGhpZ2ggdG8gbG93IGJpdHMpCisKKyAgICAxLWJpdCBhc3N1bWUtdmFsaWQgZmxhZworCisgICAgMS1iaXQgZXh0ZW5kZWQgZmxhZyAobXVzdCBiZSB6ZXJvIGluIHZlcnNpb24gMikKKworICAgIDItYml0IHN0YWdlIChkdXJpbmcgbWVyZ2UpCisKKyAgICAxMi1iaXQgbmFtZSBsZW5ndGggaWYgdGhlIGxlbmd0aCBpcyBsZXNzIHRoYW4gMHhGRkY7IG90aGVyd2lzZSAweEZGRgorICAgIGlzIHN0b3JlZCBpbiB0aGlzIGZpZWxkLgorCisgIChWZXJzaW9uIDMgb3IgbGF0ZXIpIEEgMTYtYml0IGZpZWxkLCBvbmx5IGFwcGxpY2FibGUgaWYgdGhlCisgICJleHRlbmRlZCBmbGFnIiBhYm92ZSBpcyAxLCBzcGxpdCBpbnRvIChoaWdoIHRvIGxvdyBiaXRzKS4KKworICAgIDEtYml0IHJlc2VydmVkIGZvciBmdXR1cmUKKworICAgIDEtYml0IHNraXAtd29ya3RyZWUgZmxhZyAodXNlZCBieSBzcGFyc2UgY2hlY2tvdXQpCisKKyAgICAxLWJpdCBpbnRlbnQtdG8tYWRkIGZsYWcgKHVzZWQgYnkgImdpdCBhZGQgLU4iKQorCisgICAgMTMtYml0IHVudXNlZCwgbXVzdCBiZSB6ZXJvCisKKyAgRW50cnkgcGF0aCBuYW1lICh2YXJpYWJsZSBsZW5ndGgpIHJlbGF0aXZlIHRvIHRvcCBsZXZlbCBkaXJlY3RvcnkKKyAgICAod2l0aG91dCBsZWFkaW5nIHNsYXNoKS4gJy8nIGlzIHVzZWQgYXMgcGF0aCBzZXBhcmF0b3IuIFRoZSBzcGVjaWFsCisgICAgcGF0aCBjb21wb25lbnRzICIuIiwgIi4uIiBhbmQgIi5naXQiICh3aXRob3V0IHF1b3RlcykgYXJlIGRpc2FsbG93ZWQuCisgICAgVHJhaWxpbmcgc2xhc2ggaXMgYWxzbyBkaXNhbGxvd2VkLgorCisgICAgVGhlIGV4YWN0IGVuY29kaW5nIGlzIHVuZGVmaW5lZCwgYnV0IHRoZSAnLicgYW5kICcvJyBjaGFyYWN0ZXJzCisgICAgYXJlIGVuY29kZWQgaW4gNy1iaXQgQVNDSUkgYW5kIHRoZSBlbmNvZGluZyBjYW5ub3QgY29udGFpbiBhIE5VTAorICAgIGJ5dGUgKGlvdywgdGhpcyBpcyBhIFVOSVggcGF0aG5hbWUpLgorCisgIChWZXJzaW9uIDQpIEluIHZlcnNpb24gNCwgdGhlIGVudHJ5IHBhdGggbmFtZSBpcyBwcmVmaXgtY29tcHJlc3NlZAorICAgIHJlbGF0aXZlIHRvIHRoZSBwYXRoIG5hbWUgZm9yIHRoZSBwcmV2aW91cyBlbnRyeSAodGhlIHZlcnkgZmlyc3QKKyAgICBlbnRyeSBpcyBlbmNvZGVkIGFzIGlmIHRoZSBwYXRoIG5hbWUgZm9yIHRoZSBwcmV2aW91cyBlbnRyeSBpcyBhbgorICAgIGVtcHR5IHN0cmluZykuICBBdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGVudHJ5LCBhbiBpbnRlZ2VyIE4gaW4gdGhlCisgICAgdmFyaWFibGUgd2lkdGggZW5jb2RpbmcgKHRoZSBzYW1lIGVuY29kaW5nIGFzIHRoZSBvZmZzZXQgaXMgZW5jb2RlZAorICAgIGZvciBPRlNfREVMVEEgcGFjayBlbnRyaWVzOyBzZWUgcGFjay1mb3JtYXQudHh0KSBpcyBzdG9yZWQsIGZvbGxvd2VkCisgICAgYnkgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgUy4gIFJlbW92aW5nIE4gYnl0ZXMgZnJvbSB0aGUgZW5kIG9mIHRoZQorICAgIHBhdGggbmFtZSBmb3IgdGhlIHByZXZpb3VzIGVudHJ5LCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggdGhlIHN0cmluZyBTCisgICAgeWllbGRzIHRoZSBwYXRoIG5hbWUgZm9yIHRoaXMgZW50cnkuCisKKyAgMS04IG51bCBieXRlcyBhcyBuZWNlc3NhcnkgdG8gcGFkIHRoZSBlbnRyeSB0byBhIG11bHRpcGxlIG9mIGVpZ2h0IGJ5dGVzCisgIHdoaWxlIGtlZXBpbmcgdGhlIG5hbWUgTlVMLXRlcm1pbmF0ZWQuCisKKyAgKFZlcnNpb24gNCkgSW4gdmVyc2lvbiA0LCB0aGUgcGFkZGluZyBhZnRlciB0aGUgcGF0aG5hbWUgZG9lcyBub3QKKyAgZXhpc3QuCisKKyAgSW50ZXJwcmV0YXRpb24gb2YgaW5kZXggZW50cmllcyBpbiBzcGxpdCBpbmRleCBtb2RlIGlzIGNvbXBsZXRlbHkKKyAgZGlmZmVyZW50LiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuCisKKz09IEV4dGVuc2lvbnMKKworPT09IENhY2hlZCB0cmVlCisKKyAgQ2FjaGVkIHRyZWUgZXh0ZW5zaW9uIGNvbnRhaW5zIHByZS1jb21wdXRlZCBoYXNoZXMgZm9yIHRyZWVzIHRoYXQgY2FuCisgIGJlIGRlcml2ZWQgZnJvbSB0aGUgaW5kZXguIEl0IGhlbHBzIHNwZWVkIHVwIHRyZWUgb2JqZWN0IGdlbmVyYXRpb24KKyAgZnJvbSBpbmRleCBmb3IgYSBuZXcgY29tbWl0LgorCisgIFdoZW4gYSBwYXRoIGlzIHVwZGF0ZWQgaW4gaW5kZXgsIHRoZSBwYXRoIG11c3QgYmUgaW52YWxpZGF0ZWQgYW5kCisgIHJlbW92ZWQgZnJvbSB0cmVlIGNhY2hlLgorCisgIFRoZSBzaWduYXR1cmUgZm9yIHRoaXMgZXh0ZW5zaW9uIGlzIHsgJ1QnLCAnUicsICdFJywgJ0UnIH0uCisKKyAgQSBzZXJpZXMgb2YgZW50cmllcyBmaWxsIHRoZSBlbnRpcmUgZXh0ZW5zaW9uOyBlYWNoIG9mIHdoaWNoCisgIGNvbnNpc3RzIG9mOgorCisgIC0gTlVMLXRlcm1pbmF0ZWQgcGF0aCBjb21wb25lbnQgKHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgZGlyZWN0b3J5KTsKKworICAtIEFTQ0lJIGRlY2ltYWwgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGluZGV4IHRoYXQgaXMgY292ZXJlZCBieSB0aGUKKyAgICB0cmVlIHRoaXMgZW50cnkgcmVwcmVzZW50cyAoZW50cnlfY291bnQpOworCisgIC0gQSBzcGFjZSAoQVNDSUkgMzIpOworCisgIC0gQVNDSUkgZGVjaW1hbCBudW1iZXIgdGhhdCByZXByZXNlbnRzIHRoZSBudW1iZXIgb2Ygc3VidHJlZXMgdGhpcworICAgIHRyZWUgaGFzOworCisgIC0gQSBuZXdsaW5lIChBU0NJSSAxMCk7IGFuZAorCisgIC0gMTYwLWJpdCBvYmplY3QgbmFtZSBmb3IgdGhlIG9iamVjdCB0aGF0IHdvdWxkIHJlc3VsdCBmcm9tIHdyaXRpbmcKKyAgICB0aGlzIHNwYW4gb2YgaW5kZXggYXMgYSB0cmVlLgorCisgIEFuIGVudHJ5IGNhbiBiZSBpbiBhbiBpbnZhbGlkYXRlZCBzdGF0ZSBhbmQgaXMgcmVwcmVzZW50ZWQgYnkgaGF2aW5nCisgIGEgbmVnYXRpdmUgbnVtYmVyIGluIHRoZSBlbnRyeV9jb3VudCBmaWVsZC4gSW4gdGhpcyBjYXNlLCB0aGVyZSBpcyBubworICBvYmplY3QgbmFtZSBhbmQgdGhlIG5leHQgZW50cnkgc3RhcnRzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBuZXdsaW5lLgorICBXaGVuIHdyaXRpbmcgYW4gaW52YWxpZCBlbnRyeSwgLTEgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIGFzIGVudHJ5X2NvdW50LgorCisgIFRoZSBlbnRyaWVzIGFyZSB3cml0dGVuIG91dCBpbiB0aGUgdG9wLWRvd24sIGRlcHRoLWZpcnN0IG9yZGVyLiAgVGhlCisgIGZpcnN0IGVudHJ5IHJlcHJlc2VudHMgdGhlIHJvb3QgbGV2ZWwgb2YgdGhlIHJlcG9zaXRvcnksIGZvbGxvd2VkIGJ5IHRoZQorICBmaXJzdCBzdWJ0cmVlLS1sZXQncyBjYWxsIHRoaXMgQS0tb2YgdGhlIHJvb3QgbGV2ZWwgKHdpdGggaXRzIG5hbWUKKyAgcmVsYXRpdmUgdG8gdGhlIHJvb3QgbGV2ZWwpLCBmb2xsb3dlZCBieSB0aGUgZmlyc3Qgc3VidHJlZSBvZiBBICh3aXRoCisgIGl0cyBuYW1lIHJlbGF0aXZlIHRvIEEpLCAuLi4KKworPT09IFJlc29sdmUgdW5kbworCisgIEEgY29uZmxpY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIGluZGV4IGFzIGEgc2V0IG9mIGhpZ2hlciBzdGFnZSBlbnRyaWVzLgorICBXaGVuIGEgY29uZmxpY3QgaXMgcmVzb2x2ZWQgKGUuZy4gd2l0aCAiZ2l0IGFkZCBwYXRoIiksIHRoZXNlIGhpZ2hlcgorICBzdGFnZSBlbnRyaWVzIHdpbGwgYmUgcmVtb3ZlZCBhbmQgYSBzdGFnZS0wIGVudHJ5IHdpdGggcHJvcGVyIHJlc29sdXRpb24KKyAgaXMgYWRkZWQuCisKKyAgV2hlbiB0aGVzZSBoaWdoZXIgc3RhZ2UgZW50cmllcyBhcmUgcmVtb3ZlZCwgdGhleSBhcmUgc2F2ZWQgaW4gdGhlCisgIHJlc29sdmUgdW5kbyBleHRlbnNpb24sIHNvIHRoYXQgY29uZmxpY3RzIGNhbiBiZSByZWNyZWF0ZWQgKGUuZy4gd2l0aAorICAiZ2l0IGNoZWNrb3V0IC1tIiksIGluIGNhc2UgdXNlcnMgd2FudCB0byByZWRvIGEgY29uZmxpY3QgcmVzb2x1dGlvbgorICBmcm9tIHNjcmF0Y2guCisKKyAgVGhlIHNpZ25hdHVyZSBmb3IgdGhpcyBleHRlbnNpb24gaXMgeyAnUicsICdFJywgJ1UnLCAnQycgfS4KKworICBBIHNlcmllcyBvZiBlbnRyaWVzIGZpbGwgdGhlIGVudGlyZSBleHRlbnNpb247IGVhY2ggb2Ygd2hpY2gKKyAgY29uc2lzdHMgb2Y6CisKKyAgLSBOVUwtdGVybWluYXRlZCBwYXRobmFtZSB0aGUgZW50cnkgZGVzY3JpYmVzIChyZWxhdGl2ZSB0byB0aGUgcm9vdCBvZgorICAgIHRoZSByZXBvc2l0b3J5LCBpLmUuIGZ1bGwgcGF0aG5hbWUpOworCisgIC0gVGhyZWUgTlVMLXRlcm1pbmF0ZWQgQVNDSUkgb2N0YWwgbnVtYmVycywgZW50cnkgbW9kZSBvZiBlbnRyaWVzIGluCisgICAgc3RhZ2UgMSB0byAzIChhIG1pc3Npbmcgc3RhZ2UgaXMgcmVwcmVzZW50ZWQgYnkgIjAiIGluIHRoaXMgZmllbGQpOworICAgIGFuZAorCisgIC0gQXQgbW9zdCB0aHJlZSAxNjAtYml0IG9iamVjdCBuYW1lcyBvZiB0aGUgZW50cnkgaW4gc3RhZ2VzIGZyb20gMSB0byAzCisgICAgKG5vdGhpbmcgaXMgd3JpdHRlbiBmb3IgYSBtaXNzaW5nIHN0YWdlKS4KKworPT09IFNwbGl0IGluZGV4CisKKyAgSW4gc3BsaXQgaW5kZXggbW9kZSwgdGhlIG1ham9yaXR5IG9mIGluZGV4IGVudHJpZXMgY291bGQgYmUgc3RvcmVkCisgIGluIGEgc2VwYXJhdGUgZmlsZS4gVGhpcyBleHRlbnNpb24gcmVjb3JkcyB0aGUgY2hhbmdlcyB0byBiZSBtYWRlIG9uCisgIHRvcCBvZiB0aGF0IHRvIHByb2R1Y2UgdGhlIGZpbmFsIGluZGV4LgorCisgIFRoZSBzaWduYXR1cmUgZm9yIHRoaXMgZXh0ZW5zaW9uIGlzIHsgJ2wnLCAnaScsICduJywgJ2snIH0uCisKKyAgVGhlIGV4dGVuc2lvbiBjb25zaXN0cyBvZjoKKworICAtIDE2MC1iaXQgU0hBLTEgb2YgdGhlIHNoYXJlZCBpbmRleCBmaWxlLiBUaGUgc2hhcmVkIGluZGV4IGZpbGUgcGF0aAorICAgIGlzICRHSVRfRElSL3NoYXJlZGluZGV4LjxTSEEtMT4uIElmIGFsbCAxNjAgYml0cyBhcmUgemVybywgdGhlCisgICAgaW5kZXggZG9lcyBub3QgcmVxdWlyZSBhIHNoYXJlZCBpbmRleCBmaWxlLgorCisgIC0gQW4gZXdhaC1lbmNvZGVkIGRlbGV0ZSBiaXRtYXAsIGVhY2ggYml0IHJlcHJlc2VudHMgYW4gZW50cnkgaW4gdGhlCisgICAgc2hhcmVkIGluZGV4LiBJZiBhIGJpdCBpcyBzZXQsIGl0cyBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZQorICAgIHNoYXJlZCBpbmRleCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgZmluYWwgaW5kZXguICBOb3RlLCBiZWNhdXNlCisgICAgYSBkZWxldGUgb3BlcmF0aW9uIGNoYW5nZXMgaW5kZXggZW50cnkgcG9zaXRpb25zLCBidXQgd2UgZG8gbmVlZAorICAgIG9yaWdpbmFsIHBvc2l0aW9ucyBpbiByZXBsYWNlIHBoYXNlLCBpdCdzIGJlc3QgdG8ganVzdCBtYXJrCisgICAgZW50cmllcyBmb3IgcmVtb3ZhbCwgdGhlbiBkbyBhIG1hc3MgZGVsZXRpb24gYWZ0ZXIgcmVwbGFjZW1lbnQuCisKKyAgLSBBbiBld2FoLWVuY29kZWQgcmVwbGFjZSBiaXRtYXAsIGVhY2ggYml0IHJlcHJlc2VudHMgYW4gZW50cnkgaW4KKyAgICB0aGUgc2hhcmVkIGluZGV4LiBJZiBhIGJpdCBpcyBzZXQsIGl0cyBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZQorICAgIHNoYXJlZCBpbmRleCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYW4gZW50cnkgaW4gdGhpcyBpbmRleAorICAgIGZpbGUuIEFsbCByZXBsYWNlZCBlbnRyaWVzIGFyZSBzdG9yZWQgaW4gc29ydGVkIG9yZGVyIGluIHRoaXMKKyAgICBpbmRleC4gVGhlIGZpcnN0ICIxIiBiaXQgaW4gdGhlIHJlcGxhY2UgYml0bWFwIGNvcnJlc3BvbmRzIHRvIHRoZQorICAgIGZpcnN0IGluZGV4IGVudHJ5LCB0aGUgc2Vjb25kICIxIiBiaXQgdG8gdGhlIHNlY29uZCBlbnRyeSBhbmQgc28KKyAgICBvbi4gUmVwbGFjZWQgZW50cmllcyBtYXkgaGF2ZSBlbXB0eSBwYXRoIG5hbWVzIHRvIHNhdmUgc3BhY2UuCisKKyAgVGhlIHJlbWFpbmluZyBpbmRleCBlbnRyaWVzIGFmdGVyIHJlcGxhY2VkIG9uZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUKKyAgZmluYWwgaW5kZXguIFRoZXNlIGFkZGVkIGVudHJpZXMgYXJlIGFsc28gc29ydGVkIGJ5IGVudHJ5IG5hbWUgdGhlbgorICBzdGFnZS4KKworPT0gVW50cmFja2VkIGNhY2hlCisKKyAgVW50cmFja2VkIGNhY2hlIHNhdmVzIHRoZSB1bnRyYWNrZWQgZmlsZSBsaXN0IGFuZCBuZWNlc3NhcnkgZGF0YSB0bworICB2ZXJpZnkgdGhlIGNhY2hlLiBUaGUgc2lnbmF0dXJlIGZvciB0aGlzIGV4dGVuc2lvbiBpcyB7ICdVJywgJ04nLAorICAnVCcsICdSJyB9LgorCisgIFRoZSBleHRlbnNpb24gc3RhcnRzIHdpdGgKKworICAtIEEgc2VxdWVuY2Ugb2YgTlVMLXRlcm1pbmF0ZWQgc3RyaW5ncywgcHJlY2VkZWQgYnkgdGhlIHNpemUgb2YgdGhlCisgICAgc2VxdWVuY2UgaW4gdmFyaWFibGUgd2lkdGggZW5jb2RpbmcuIEVhY2ggc3RyaW5nIGRlc2NyaWJlcyB0aGUKKyAgICBlbnZpcm9ubWVudCB3aGVyZSB0aGUgY2FjaGUgY2FuIGJlIHVzZWQuCisKKyAgLSBTdGF0IGRhdGEgb2YgJEdJVF9ESVIvaW5mby9leGNsdWRlLiBTZWUgIkluZGV4IGVudHJ5IiBzZWN0aW9uIGZyb20KKyAgICBjdGltZSBmaWVsZCB1bnRpbCAiZmlsZSBzaXplIi4KKworICAtIFN0YXQgZGF0YSBvZiBjb3JlLmV4Y2x1ZGVzZmlsZQorCisgIC0gMzItYml0IGRpcl9mbGFncyAoc2VlIHN0cnVjdCBkaXJfc3RydWN0KQorCisgIC0gMTYwLWJpdCBTSEEtMSBvZiAkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUuIE51bGwgU0hBLTEgbWVhbnMgdGhlIGZpbGUKKyAgICBkb2VzIG5vdCBleGlzdC4KKworICAtIDE2MC1iaXQgU0hBLTEgb2YgY29yZS5leGNsdWRlc2ZpbGUuIE51bGwgU0hBLTEgbWVhbnMgdGhlIGZpbGUgZG9lcworICAgIG5vdCBleGlzdC4KKworICAtIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBvZiBwZXItZGlyIGV4Y2x1ZGUgZmlsZSBuYW1lLiBUaGlzIHVzdWFsbHkKKyAgICBpcyAiLmdpdGlnbm9yZSIuCisKKyAgLSBUaGUgbnVtYmVyIG9mIGZvbGxvd2luZyBkaXJlY3RvcnkgYmxvY2tzLCB2YXJpYWJsZSB3aWR0aAorICAgIGVuY29kaW5nLiBJZiB0aGlzIG51bWJlciBpcyB6ZXJvLCB0aGUgZXh0ZW5zaW9uIGVuZHMgaGVyZSB3aXRoIGEKKyAgICBmb2xsb3dpbmcgTlVMLgorCisgIC0gQSBudW1iZXIgb2YgZGlyZWN0b3J5IGJsb2NrcyBpbiBkZXB0aC1maXJzdC1zZWFyY2ggb3JkZXIsIGVhY2gKKyAgICBjb25zaXN0cyBvZgorCisgICAgLSBUaGUgbnVtYmVyIG9mIHVudHJhY2tlZCBlbnRyaWVzLCB2YXJpYWJsZSB3aWR0aCBlbmNvZGluZy4KKworICAgIC0gVGhlIG51bWJlciBvZiBzdWItZGlyZWN0b3J5IGJsb2NrcywgdmFyaWFibGUgd2lkdGggZW5jb2RpbmcuCisKKyAgICAtIFRoZSBkaXJlY3RvcnkgbmFtZSB0ZXJtaW5hdGVkIGJ5IE5VTC4KKworICAgIC0gQSBudW1iZXIgb2YgdW50cmFja2VkIGZpbGUvZGlyIG5hbWVzIHRlcm1pbmF0ZWQgYnkgTlVMLgorCitUaGUgcmVtYWluaW5nIGRhdGEgb2YgZWFjaCBkaXJlY3RvcnkgYmxvY2sgaXMgZ3JvdXBlZCBieSB0eXBlOgorCisgIC0gQW4gZXdhaCBiaXRtYXAsIHRoZSBuLXRoIGJpdCBtYXJrcyB3aGV0aGVyIHRoZSBuLXRoIGRpcmVjdG9yeSBoYXMKKyAgICB2YWxpZCB1bnRyYWNrZWQgY2FjaGUgZW50cmllcy4KKworICAtIEFuIGV3YWggYml0bWFwLCB0aGUgbi10aCBiaXQgcmVjb3JkcyAiY2hlY2stb25seSIgYml0IG9mCisgICAgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKCkgZm9yIHRoZSBuLXRoIGRpcmVjdG9yeS4KKworICAtIEFuIGV3YWggYml0bWFwLCB0aGUgbi10aCBiaXQgaW5kaWNhdGVzIHdoZXRoZXIgU0hBLTEgYW5kIHN0YXQgZGF0YQorICAgIGlzIHZhbGlkIGZvciB0aGUgbi10aCBkaXJlY3RvcnkgYW5kIGV4aXN0cyBpbiB0aGUgbmV4dCBkYXRhLgorCisgIC0gQW4gYXJyYXkgb2Ygc3RhdCBkYXRhLiBUaGUgbi10aCBkYXRhIGNvcnJlc3BvbmRzIHdpdGggdGhlIG4tdGgKKyAgICAib25lIiBiaXQgaW4gdGhlIHByZXZpb3VzIGV3YWggYml0bWFwLgorCisgIC0gQW4gYXJyYXkgb2YgU0hBLTEuIFRoZSBuLXRoIFNIQS0xIGNvcnJlc3BvbmRzIHdpdGggdGhlIG4tdGggIm9uZSIgYml0CisgICAgaW4gdGhlIHByZXZpb3VzIGV3YWggYml0bWFwLgorCisgIC0gT25lIE5VTC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stZm9ybWF0LnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stZm9ybWF0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTViZjYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1mb3JtYXQudHh0CkBAIC0wLDAgKzEsMTYyIEBACitHaXQgcGFjayBmb3JtYXQKKz09PT09PT09PT09PT09PQorCis9PSBwYWNrLSoucGFjayBmaWxlcyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCisgICAtIEEgaGVhZGVyIGFwcGVhcnMgYXQgdGhlIGJlZ2lubmluZyBhbmQgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICA0LWJ5dGUgc2lnbmF0dXJlOgorICAgICAgICAgVGhlIHNpZ25hdHVyZSBpczogeydQJywgJ0EnLCAnQycsICdLJ30KKworICAgICA0LWJ5dGUgdmVyc2lvbiBudW1iZXIgKG5ldHdvcmsgYnl0ZSBvcmRlcik6CisJIEdpdCBjdXJyZW50bHkgYWNjZXB0cyB2ZXJzaW9uIG51bWJlciAyIG9yIDMgYnV0CisgICAgICAgICBnZW5lcmF0ZXMgdmVyc2lvbiAyIG9ubHkuCisKKyAgICAgNC1ieXRlIG51bWJlciBvZiBvYmplY3RzIGNvbnRhaW5lZCBpbiB0aGUgcGFjayAobmV0d29yayBieXRlIG9yZGVyKQorCisgICAgIE9ic2VydmF0aW9uOiB3ZSBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gNEcgdmVyc2lvbnMgOy0pIGFuZAorICAgICBtb3JlIHRoYW4gNEcgb2JqZWN0cyBpbiBhIHBhY2suCisKKyAgIC0gVGhlIGhlYWRlciBpcyBmb2xsb3dlZCBieSBudW1iZXIgb2Ygb2JqZWN0IGVudHJpZXMsIGVhY2ggb2YKKyAgICAgd2hpY2ggbG9va3MgbGlrZSB0aGlzOgorCisgICAgICh1bmRlbHRpZmllZCByZXByZXNlbnRhdGlvbikKKyAgICAgbi1ieXRlIHR5cGUgYW5kIGxlbmd0aCAoMy1iaXQgdHlwZSwgKG4tMSkqNys0LWJpdCBsZW5ndGgpCisgICAgIGNvbXByZXNzZWQgZGF0YQorCisgICAgIChkZWx0aWZpZWQgcmVwcmVzZW50YXRpb24pCisgICAgIG4tYnl0ZSB0eXBlIGFuZCBsZW5ndGggKDMtYml0IHR5cGUsIChuLTEpKjcrNC1iaXQgbGVuZ3RoKQorICAgICAyMC1ieXRlIGJhc2Ugb2JqZWN0IG5hbWUgaWYgT0JKX1JFRl9ERUxUQSBvciBhIG5lZ2F0aXZlIHJlbGF0aXZlCisJIG9mZnNldCBmcm9tIHRoZSBkZWx0YSBvYmplY3QncyBwb3NpdGlvbiBpbiB0aGUgcGFjayBpZiB0aGlzCisJIGlzIGFuIE9CSl9PRlNfREVMVEEgb2JqZWN0CisgICAgIGNvbXByZXNzZWQgZGVsdGEgZGF0YQorCisgICAgIE9ic2VydmF0aW9uOiBsZW5ndGggb2YgZWFjaCBvYmplY3QgaXMgZW5jb2RlZCBpbiBhIHZhcmlhYmxlCisgICAgIGxlbmd0aCBmb3JtYXQgYW5kIGlzIG5vdCBjb25zdHJhaW5lZCB0byAzMi1iaXQgb3IgYW55dGhpbmcuCisKKyAgLSBUaGUgdHJhaWxlciByZWNvcmRzIDIwLWJ5dGUgU0hBLTEgY2hlY2tzdW0gb2YgYWxsIG9mIHRoZSBhYm92ZS4KKworPT0gT3JpZ2luYWwgKHZlcnNpb24gMSkgcGFjay0qLmlkeCBmaWxlcyBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCisgIC0gVGhlIGhlYWRlciBjb25zaXN0cyBvZiAyNTYgNC1ieXRlIG5ldHdvcmsgYnl0ZSBvcmRlcgorICAgIGludGVnZXJzLiAgTi10aCBlbnRyeSBvZiB0aGlzIHRhYmxlIHJlY29yZHMgdGhlIG51bWJlciBvZgorICAgIG9iamVjdHMgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcGFjaywgdGhlIGZpcnN0IGJ5dGUgb2Ygd2hvc2UKKyAgICBvYmplY3QgbmFtZSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gTi4gIFRoaXMgaXMgY2FsbGVkIHRoZQorICAgICdmaXJzdC1sZXZlbCBmYW4tb3V0JyB0YWJsZS4KKworICAtIFRoZSBoZWFkZXIgaXMgZm9sbG93ZWQgYnkgc29ydGVkIDI0LWJ5dGUgZW50cmllcywgb25lIGVudHJ5CisgICAgcGVyIG9iamVjdCBpbiB0aGUgcGFjay4gIEVhY2ggZW50cnkgaXM6CisKKyAgICA0LWJ5dGUgbmV0d29yayBieXRlIG9yZGVyIGludGVnZXIsIHJlY29yZGluZyB3aGVyZSB0aGUKKyAgICBvYmplY3QgaXMgc3RvcmVkIGluIHRoZSBwYWNrZmlsZSBhcyB0aGUgb2Zmc2V0IGZyb20gdGhlCisgICAgYmVnaW5uaW5nLgorCisgICAgMjAtYnl0ZSBvYmplY3QgbmFtZS4KKworICAtIFRoZSBmaWxlIGlzIGNvbmNsdWRlZCB3aXRoIGEgdHJhaWxlcjoKKworICAgIEEgY29weSBvZiB0aGUgMjAtYnl0ZSBTSEEtMSBjaGVja3N1bSBhdCB0aGUgZW5kIG9mCisgICAgY29ycmVzcG9uZGluZyBwYWNrZmlsZS4KKworICAgIDIwLWJ5dGUgU0hBLTEtY2hlY2tzdW0gb2YgYWxsIG9mIHRoZSBhYm92ZS4KKworUGFjayBJZHggZmlsZToKKworCS0tICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCitmYW5vdXQJICAgIHwgZmFub3V0WzBdID0gMiAoZm9yIGV4YW1wbGUpICAgIHwtLgordGFibGUJICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgfAorCSAgICB8IGZhbm91dFsxXSAgICAgICAgICAgICAgICAgICAgICB8IHwKKwkgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8CisJICAgIHwgZmFub3V0WzJdICAgICAgICAgICAgICAgICAgICAgIHwgfAorCSAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+IHwKKwkgICAgfCBmYW5vdXRbMjU1XSA9IHRvdGFsIG9iamVjdHMgICAgfC0tLS4KKwktLSAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8IHwKK21haW4JICAgIHwgb2Zmc2V0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgfCB8CitpbmRleAkgICAgfCBvYmplY3QgbmFtZSAwMFhYWFhYWFhYWFhYWFhYWFggfCB8IHwKK3RhYmxlCSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rIHwgfAorCSAgICB8IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgfAorCSAgICB8IG9iamVjdCBuYW1lIDAwWFhYWFhYWFhYWFhYWFhYWCB8IHwgfAorCSAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rPCsgfAorCSAgLi18IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorCSAgfCB8IG9iamVjdCBuYW1lIDAxWFhYWFhYWFhYWFhYWFhYWCB8ICAgfAorCSAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgfAorCSAgfCB8IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorCSAgfCB8IG9iamVjdCBuYW1lIDAxWFhYWFhYWFhYWFhYWFhYWCB8ICAgfAorCSAgfCB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+ICAgfAorCSAgfCB8IG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfAorCSAgfCB8IG9iamVjdCBuYW1lIEZGWFhYWFhYWFhYWFhYWFhYWCB8ICAgfAorCS0tfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rPC0tKwordHJhaWxlcgkgIHwgfCBwYWNrZmlsZSBjaGVja3N1bSAgICAgICAgICAgICAgfAorCSAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisJICB8IHwgaWR4ZmlsZSBjaGVja3N1bSAgICAgICAgICAgICAgIHwKKwkgIHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAgICAgIC4tLS0tLS0tLgorICAgICAgICAgICAgICAgICAgfAorUGFjayBmaWxlIGVudHJ5OiA8KworCisgICAgIHBhY2tlZCBvYmplY3QgaGVhZGVyOgorCTEtYnl0ZSBzaXplIGV4dGVuc2lvbiBiaXQgKE1TQikKKwkgICAgICAgdHlwZSAobmV4dCAzIGJpdCkKKwkgICAgICAgc2l6ZTAgKGxvd2VyIDQtYml0KQorICAgICAgICBuLWJ5dGUgc2l6ZU4gKGFzIGxvbmcgYXMgTVNCIGlzIHNldCwgZWFjaCA3LWJpdCkKKwkJc2l6ZTAuLnNpemVOIGZvcm0gNCs3KzcrLi4rNyBiaXQgaW50ZWdlciwgc2l6ZTAKKwkJaXMgdGhlIGxlYXN0IHNpZ25pZmljYW50IHBhcnQsIGFuZCBzaXplTiBpcyB0aGUKKwkJbW9zdCBzaWduaWZpY2FudCBwYXJ0LgorICAgICBwYWNrZWQgb2JqZWN0IGRhdGE6CisgICAgICAgIElmIGl0IGlzIG5vdCBERUxUQSwgdGhlbiBkZWZsYXRlZCBieXRlcyAodGhlIHNpemUgYWJvdmUKKwkJaXMgdGhlIHNpemUgYmVmb3JlIGNvbXByZXNzaW9uKS4KKwlJZiBpdCBpcyBSRUZfREVMVEEsIHRoZW4KKwkgIDIwLWJ5dGUgYmFzZSBvYmplY3QgbmFtZSBTSEEtMSAodGhlIHNpemUgYWJvdmUgaXMgdGhlCisJCXNpemUgb2YgdGhlIGRlbHRhIGRhdGEgdGhhdCBmb2xsb3dzKS4KKyAgICAgICAgICBkZWx0YSBkYXRhLCBkZWZsYXRlZC4KKwlJZiBpdCBpcyBPRlNfREVMVEEsIHRoZW4KKwkgIG4tYnl0ZSBvZmZzZXQgKHNlZSBiZWxvdykgaW50ZXJwcmV0ZWQgYXMgYSBuZWdhdGl2ZQorCQlvZmZzZXQgZnJvbSB0aGUgdHlwZS1ieXRlIG9mIHRoZSBoZWFkZXIgb2YgdGhlCisJCW9mcy1kZWx0YSBlbnRyeSAodGhlIHNpemUgYWJvdmUgaXMgdGhlIHNpemUgb2YKKwkJdGhlIGRlbHRhIGRhdGEgdGhhdCBmb2xsb3dzKS4KKwkgIGRlbHRhIGRhdGEsIGRlZmxhdGVkLgorCisgICAgIG9mZnNldCBlbmNvZGluZzoKKwkgIG4gYnl0ZXMgd2l0aCBNU0Igc2V0IGluIGFsbCBidXQgdGhlIGxhc3Qgb25lLgorCSAgVGhlIG9mZnNldCBpcyB0aGVuIHRoZSBudW1iZXIgY29uc3RydWN0ZWQgYnkKKwkgIGNvbmNhdGVuYXRpbmcgdGhlIGxvd2VyIDcgYml0IG9mIGVhY2ggYnl0ZSwgYW5kCisJICBmb3IgbiA+PSAyIGFkZGluZyAyXjcgKyAyXjE0ICsgLi4uICsgMl4oNyoobi0xKSkKKwkgIHRvIHRoZSByZXN1bHQuCisKKworCis9PSBWZXJzaW9uIDIgcGFjay0qLmlkeCBmaWxlcyBzdXBwb3J0IHBhY2tzIGxhcmdlciB0aGFuIDQgR2lCLCBhbmQKKyAgIGhhdmUgc29tZSBvdGhlciByZW9yZ2FuaXphdGlvbnMuICBUaGV5IGhhdmUgdGhlIGZvcm1hdDoKKworICAtIEEgNC1ieXRlIG1hZ2ljIG51bWJlciAnXDM3N3RPYycgd2hpY2ggaXMgYW4gdW5yZWFzb25hYmxlCisgICAgZmFub3V0WzBdIHZhbHVlLgorCisgIC0gQSA0LWJ5dGUgdmVyc2lvbiBudW1iZXIgKD0gMikKKworICAtIEEgMjU2LWVudHJ5IGZhbi1vdXQgdGFibGUganVzdCBsaWtlIHYxLgorCisgIC0gQSB0YWJsZSBvZiBzb3J0ZWQgMjAtYnl0ZSBTSEEtMSBvYmplY3QgbmFtZXMuICBUaGVzZSBhcmUKKyAgICBwYWNrZWQgdG9nZXRoZXIgd2l0aG91dCBvZmZzZXQgdmFsdWVzIHRvIHJlZHVjZSB0aGUgY2FjaGUKKyAgICBmb290cHJpbnQgb2YgdGhlIGJpbmFyeSBzZWFyY2ggZm9yIGEgc3BlY2lmaWMgb2JqZWN0IG5hbWUuCisKKyAgLSBBIHRhYmxlIG9mIDQtYnl0ZSBDUkMzMiB2YWx1ZXMgb2YgdGhlIHBhY2tlZCBvYmplY3QgZGF0YS4KKyAgICBUaGlzIGlzIG5ldyBpbiB2MiBzbyBjb21wcmVzc2VkIGRhdGEgY2FuIGJlIGNvcGllZCBkaXJlY3RseQorICAgIGZyb20gcGFjayB0byBwYWNrIGR1cmluZyByZXBhY2tpbmcgd2l0aG91dCB1bmRldGVjdGVkCisgICAgZGF0YSBjb3JydXB0aW9uLgorCisgIC0gQSB0YWJsZSBvZiA0LWJ5dGUgb2Zmc2V0IHZhbHVlcyAoaW4gbmV0d29yayBieXRlIG9yZGVyKS4KKyAgICBUaGVzZSBhcmUgdXN1YWxseSAzMS1iaXQgcGFjayBmaWxlIG9mZnNldHMsIGJ1dCBsYXJnZQorICAgIG9mZnNldHMgYXJlIGVuY29kZWQgYXMgYW4gaW5kZXggaW50byB0aGUgbmV4dCB0YWJsZSB3aXRoCisgICAgdGhlIG1zYml0IHNldC4KKworICAtIEEgdGFibGUgb2YgOC1ieXRlIG9mZnNldCBlbnRyaWVzIChlbXB0eSBmb3IgcGFjayBmaWxlcyBsZXNzCisgICAgdGhhbiAyIEdpQikuICBQYWNrIGZpbGVzIGFyZSBvcmdhbml6ZWQgd2l0aCBoZWF2aWx5IHVzZWQKKyAgICBvYmplY3RzIHRvd2FyZCB0aGUgZnJvbnQsIHNvIG1vc3Qgb2JqZWN0IHJlZmVyZW5jZXMgc2hvdWxkCisgICAgbm90IG5lZWQgdG8gcmVmZXIgdG8gdGhpcyB0YWJsZS4KKworICAtIFRoZSBzYW1lIHRyYWlsZXIgYXMgYSB2MSBwYWNrIGZpbGU6CisKKyAgICBBIGNvcHkgb2YgdGhlIDIwLWJ5dGUgU0hBLTEgY2hlY2tzdW0gYXQgdGhlIGVuZCBvZgorICAgIGNvcnJlc3BvbmRpbmcgcGFja2ZpbGUuCisKKyAgICAyMC1ieXRlIFNIQS0xLWNoZWNrc3VtIG9mIGFsbCBvZiB0aGUgYWJvdmUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLWhldXJpc3RpY3MudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1oZXVyaXN0aWNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWEwN2RiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcGFjay1oZXVyaXN0aWNzLnR4dApAQCAtMCwwICsxLDQ2MCBAQAorQ29uY2VybmluZyBHaXQncyBQYWNraW5nIEhldXJpc3RpY3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgT2gsIGhlcmUncyBhIHJlYWxseSBzdHVwaWQgcXVlc3Rpb246CisKKyAgICAgICAgICAgICAgICAgIFdoZXJlIGRvIEkgZ28KKyAgICAgICAgICAgICAgIHRvIGxlYXJuIHRoZSBkZXRhaWxzCisJICAgIG9mIEdpdCdzIHBhY2tpbmcgaGV1cmlzdGljcz8KKworQmUgY2FyZWZ1bCB3aGF0IHlvdSBhc2shCisKK0ZvbGxvd2VycyBvZiB0aGUgR2l0LCBwbGVhc2Ugb3BlbiB0aGUgR2l0IElSQyBMb2cgYW5kIHR1cm4gdG8KK0ZlYnJ1YXJ5IDEwLCAyMDA2LgorCitJdCdzIGEgcmFyZSBvY2Nhc2lvbiwgYW5kIHdlIGFyZSBqb2luZWQgYnkgdGhlIEtpbmcgR2l0IEhpbXNlbGYsCitMaW51cyBUb3J2YWxkcyAobGludXMpLiAgTmF0aGFuaWVsIFNtaXRoLCAobmpzYCksIGhhcyB0aGUgZmxvb3IKK2FuZCBzZWVrcyBlbmxpZ2h0ZW5tZW50LiAgT3RoZXJzIGFyZSBwcmVzZW50LCBidXQgc2lsZW50LgorCitMZXQncyBsaXN0ZW4gaW4hCisKKyAgICA8bmpzYD4gT2gsIGhlcmUncyBhIHJlYWxseSBzdHVwaWQgcXVlc3Rpb24gLS0gd2hlcmUgZG8gSSBnbyB0bworCWxlYXJuIHRoZSBkZXRhaWxzIG9mIEdpdCdzIHBhY2tpbmcgaGV1cmlzdGljcz8gIGdvb2dsZSBhdmFpbHMKKyAgICAgICAgbWUgbm90LCByZWFkaW5nIHRoZSBzb3VyY2UgZGlkbid0IGhlbHAgYSBsb3QsIGFuZCB3YWRpbmcKKyAgICAgICAgdGhyb3VnaCB0aGUgd2hvbGUgbWFpbGluZyBsaXN0IHNlZW1zIGxlc3MgZWZmaWNpZW50IHRoYW4gYW55CisgICAgICAgIG9mIHRoYXQuCisKK0l0IGlzIGEgYm9sZCBzdGFydCEgIEEgcGxlYSBmb3IgaGVscCBjb21iaW5lZCB3aXRoIGEgc2ltdWx0YW5lb3VzCit0cmktcGFydCBhdHRhY2sgb24gc29tZSBvZiB0aGUgdHJpZWQgYW5kIHRydWUgbWFpbnN0YXlzIGluIHRoZSBxdWVzdAorZm9yIGVubGlnaHRlbm1lbnQuICBCcmFzaCBhY2N1c2F0aW9ucyBvZiBnb29nbGUgYmVpbmcgdXNlbGVzcy4gSHVicmlzIQorTWFsaWduaW5nIHRoZSBzb3VyY2UuICBIZXJlc3khICBEaXNkYWluIGZvciB0aGUgbWFpbGluZyBsaXN0IGFyY2hpdmVzLgorV29lLgorCisgICAgPHBhc2t5PiB5ZXMsIHRoZSBwYWNraW5nLXJlbGF0ZWQgZGVsdGEgc3R1ZmYgaXMgc29tZXdoYXQKKyAgICAgICAgbXlzdGVyaW91cyBldmVuIGZvciBtZSA7KQorCitBaCEgIE1vZGVzdHkgYWZ0ZXIgYWxsLgorCisgICAgPGxpbnVzPiBuanMsIEkgZG9uJ3QgdGhpbmsgdGhlIGRvY3MgZXhpc3QuIFRoYXQncyBzb21ldGhpbmcgd2hlcmUKKwkgSSBkb24ndCB0aGluayBhbnlib2R5IGVsc2UgdGhhbiBtZSBldmVuIHJlYWxseSBnb3QgaW52b2x2ZWQuCisJIE1vc3Qgb2YgdGhlIHJlc3Qgb2YgR2l0IG90aGVycyBoYXZlIGJlZW4gYnVzeSB3aXRoIChlc3BlY2lhbGx5CisJIEp1bmlvKSwgYnV0IHBhY2tpbmcgbm9ib2R5IHRvdWNoZWQgYWZ0ZXIgSSBkaWQgaXQuCisKK0l0J3MgY3J5cHRpYywgeWV0IHZhZ3VlLiAgTGludXMgaW4gc3R5bGUgZm9yIHN1cmUuICBXaXNlIG1lbgoraW50ZXJwcmV0IHRoaXMgYXMgYW4gYXBvbG9neS4gIEEgZmV3IGFyZ3VlIGl0IGlzIG1lcmVseSBhCitzdGF0ZW1lbnQgb2YgZmFjdC4KKworICAgIDxuanNgPiBJIGd1ZXNzIHRoZSBuZXh0IHN0ZXAgaXMgInJlYWQgdGhlIHNvdXJjZSBhZ2FpbiIsIGJ1dCBJCisgICAgICAgIGhhdmUgdG8gYnVpbGQgdXAgYSBjZXJ0YWluIGxldmVsIG9mIGd1bXB0aW9uIGZpcnN0IDotKQorCitJbmRlZWQhICBPbiBib3RoIHBvaW50cy4KKworICAgIDxsaW51cz4gVGhlIHBhY2tpbmcgaGV1cmlzdGljIGlzIGFjdHVhbGx5IHJlYWxseSByZWFsbHkgc2ltcGxlLgorCitCYWl0Li4uCisKKyAgICA8bGludXM+IEJ1dCBzdHJhbmdlLgorCitBbmQgc3dpdGNoLiAgVGhhdCBvdWdodCB0byBkbyBpdCEKKworICAgIDxsaW51cz4gUmVtZW1iZXI6IEdpdCByZWFsbHkgZG9lc24ndCBmb2xsb3cgZmlsZXMuIFNvIHdoYXQgaXQgZG9lcyBpcworICAgICAgICAtIGdlbmVyYXRlIGEgbGlzdCBvZiBhbGwgb2JqZWN0cworICAgICAgICAtIHNvcnQgdGhlIGxpc3QgYWNjb3JkaW5nIHRvIG1hZ2ljIGhldXJpc3RpY3MKKyAgICAgICAgLSB3YWxrIHRoZSBsaXN0LCB1c2luZyBhIHNsaWRpbmcgd2luZG93LCBzZWVpbmcgaWYgYW4gb2JqZWN0CisgICAgICAgICAgY2FuIGJlIGRpZmZlZCBhZ2FpbnN0IGFub3RoZXIgb2JqZWN0IGluIHRoZSB3aW5kb3cKKyAgICAgICAgLSB3cml0ZSBvdXQgdGhlIGxpc3QgaW4gcmVjZW5jeSBvcmRlcgorCitUaGUgdHJhZGl0aW9uYWwgdW5kZXJzdGF0ZW1lbnQ6CisKKyAgICA8bmpzYD4gSSBzdXNwZWN0IHRoYXQgd2hhdCBJJ20gbWlzc2luZyBpcyB0aGUgcHJlY2lzZSBkZWZpbml0aW9uIG9mCisgICAgICAgIHRoZSB3b3JkICJtYWdpYyIKKworVGhlIHRyYWRpdGlvbmFsIGluc2lnaHQ6CisKKyAgICA8cGFza3k+IHllcworCitBbmQgQmFiZWwtbGlrZSBjb25mdXNpb24gZmxvd2VkLgorCisgICAgPG5qc2A+IG9oLCBobW0sIGFuZCBJJ20gbm90IHN1cmUgd2hhdCB0aGlzIHNsaWRpbmcgd2luZG93IG1lYW5zIGVpdGhlcgorCisgICAgPHBhc2t5PiBpaXJjLCBpdCBhcHBlYXJlZCB0byBtZSB0byBiZSBqdXN0IHRoZSBzaGExIG9mIHRoZSBvYmplY3QKKyAgICAgICAgd2hlbiByZWFkaW5nIHRoZSBjb2RlIGNhc3VhbGx5IC4uLgorCisgICAgICAgIC4uLiB3aGljaCBzaW1wbHkgZG9lc24ndCBzb3VuZCBhcyBhIHZlcnkgZ29vZCBoZXVyaXN0aWNzLCB0aG91Z2ggOykKKworICAgIDxuanNgPiAuLi4uLmFuZCByZWNlbmN5IG9yZGVyLiAgb2theSwgSSB0aGluayBpdCdzIGNsZWFyIEkgZGlkbid0CisgICAgICAgZXZlbiByZWFsaXplIGhvdyBtdWNoIEkgd2Fzbid0IHJlYWxpemluZyA6LSkKKworQWgsIGdyYXNzaG9wcGVyISAgQW5kIHRodXMgdGhlIGVubGlnaHRlbm1lbnQgYmVnaW5zIGFuZXcuCisKKyAgICA8bGludXM+IFRoZSAibWFnaWMiIGlzIGFjdHVhbGx5IGluIHRoZW9yeSB0b3RhbGx5IGFyYml0cmFyeS4KKyAgICAgICAgQU5ZIG9yZGVyIHdpbGwgZ2l2ZSB5b3UgYSB3b3JraW5nIHBhY2ssIGJ1dCBubywgaXQncyBub3QKKwlvcmRlcmVkIGJ5IFNIQS0xLgorCisgICAgICAgIEJlZm9yZSB0YWxraW5nIGFib3V0IHRoZSBvcmRlcmluZyBmb3IgdGhlIHNsaWRpbmcgZGVsdGEKKyAgICAgICAgd2luZG93LCBsZXQncyB0YWxrIGFib3V0IHRoZSByZWNlbmN5IG9yZGVyLiBUaGF0J3MgbW9yZQorICAgICAgICBpbXBvcnRhbnQgaW4gb25lIHdheS4KKworICAgIDxuanNgPiBSaWdodCwgYnV0IGlmIGFsbCB5b3Ugd2FudCBpcyBhIHdvcmtpbmcgd2F5IHRvIHBhY2sgdGhpbmdzCisgICAgICAgIHRvZ2V0aGVyLCB5b3UgY291bGQganVzdCB1c2UgY2F0IGFuZCBzYXZlIHlvdXJzZWxmIHNvbWUKKyAgICAgICAgdHJvdWJsZS4uLgorCitXYWFhaXQgZm9yIGl0Li4uLgorCisgICAgPGxpbnVzPiBUaGUgcmVjZW5jeSBvcmRlcmluZyAod2hpY2ggaXMgYmFzaWNhbGx5OiBwdXQgb2JqZWN0cworICAgICAgICBfcGh5c2ljYWxseV8gaW50byB0aGUgcGFjayBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IGFyZQorICAgICAgICAicmVhY2hhYmxlIiBmcm9tIHRoZSBoZWFkKSBpcyBpbXBvcnRhbnQuCisKKyAgICA8bmpzYD4gb2theQorCisgICAgPGxpbnVzPiBJdCdzIGltcG9ydGFudCBiZWNhdXNlIHRoYXQncyB0aGUgdGhpbmcgdGhhdCBnaXZlcyBwYWNrcworICAgICAgICBnb29kIGxvY2FsaXR5LiBJdCBrZWVwcyB0aGUgb2JqZWN0cyBjbG9zZSB0byB0aGUgaGVhZCAod2hldGhlcgorICAgICAgICB0aGV5IGFyZSBvbGQgb3IgbmV3LCBidXQgdGhleSBhcmUgX3JlYWNoYWJsZV8gZnJvbSB0aGUgaGVhZCkKKyAgICAgICAgYXQgdGhlIGhlYWQgb2YgdGhlIHBhY2suIFNvIHBhY2tzIGFjdHVhbGx5IGhhdmUgYWJzb2x1dGVseQorICAgICAgICBfd29uZGVyZnVsXyBJTyBwYXR0ZXJucy4KKworUmVhZCB0aGF0IGFnYWluLCBiZWNhdXNlIGl0IGlzIGltcG9ydGFudC4KKworICAgIDxsaW51cz4gQnV0IHJlY2VuY3kgb3JkZXJpbmcgaXMgdG90YWxseSB1c2VsZXNzIGZvciBkZWNpZGluZyBob3cKKyAgICAgICAgdG8gYWN0dWFsbHkgZ2VuZXJhdGUgdGhlIGRlbHRhcywgc28gdGhlIGRlbHRhIG9yZGVyaW5nIGlzCisgICAgICAgIHNvbWV0aGluZyBlbHNlLgorCisgICAgICAgIFRoZSBkZWx0YSBvcmRlcmluZyBpcyAod2FpdCBmb3IgaXQpOgorICAgICAgICAtIGZpcnN0IHNvcnQgYnkgdGhlICJiYXNlbmFtZSIgb2YgdGhlIG9iamVjdCwgYXMgZGVmaW5lZCBieQorICAgICAgICAgIHRoZSBuYW1lIHRoZSBvYmplY3Qgd2FzIF9maXJzdF8gcmVhY2hlZCB0aHJvdWdoIHdoZW4KKyAgICAgICAgICBnZW5lcmF0aW5nIHRoZSBvYmplY3QgbGlzdAorICAgICAgICAtIHdpdGhpbiB0aGUgc2FtZSBiYXNlbmFtZSwgc29ydCBieSBzaXplIG9mIHRoZSBvYmplY3QKKyAgICAgICAgLSBidXQgYWx3YXlzIHNvcnQgZGlmZmVyZW50IHR5cGVzIHNlcGFyYXRlbHkgKGNvbW1pdHMgZmlyc3QpLgorCisgICAgICAgIFRoYXQncyBub3QgZXhhY3RseSBpdCwgYnV0IGl0J3MgdmVyeSBjbG9zZS4KKworICAgIDxuanNgPiBUaGUgIl9maXJzdF8gcmVhY2hlZCIgdGhpbmcgaXMgbm90IHRvbyBpbXBvcnRhbnQsIGp1c3QgeW91CisgICAgICAgIG5lZWQgc29tZSB3YXkgdG8gYnJlYWsgdGllcyBzaW5jZSB0aGUgc2FtZSBvYmplY3RzIG1heSBiZQorICAgICAgICByZWFjaGFibGUgbWFueSB3YXlzLCB5ZXM/CisKK0FuZCBhcyBpZiB0byBjbGFyaWZ5OgorCisgICAgPGxpbnVzPiBUaGUgcG9pbnQgaXMgdGhhdCBpdCdzIGFsbCByZWFsbHkganVzdCBhbnkgcmFuZG9tCisgICAgICAgIGhldXJpc3RpYywgYW5kIHRoZSBvcmRlcmluZyBpcyB0b3RhbGx5IHVuaW1wb3J0YW50IGZvcgorICAgICAgICBjb3JyZWN0bmVzcywgYnV0IGl0IGhlbHBzIGEgbG90IGlmIHRoZSBoZXVyaXN0aWMgZ2l2ZXMKKyAgICAgICAgImNsdW1waW5nIiBmb3IgdGhpbmdzIHRoYXQgYXJlIGxpa2VseSB0byBkZWx0YSB3ZWxsIGFnYWluc3QKKyAgICAgICAgZWFjaCBvdGhlci4KKworSXQgaXMgYW4gaW1wb3J0YW50IHBvaW50LCBzbyBzZWNyZXRseSwgSSBkaWQgbXkgb3duIHJlc2VhcmNoIGFuZCBoYXZlCitpbmNsdWRlZCBteSByZXN1bHRzIGJlbG93LiAgVG8gYmUgZmFpciwgaXQgaGFzIGNoYW5nZWQgc29tZSBvdmVyIHRpbWUuCitBbmQgdGhyb3VnaCB0aGUgbWFnaWMgb2YgUmV2aXNpb25pc3RpYyBIaXN0b3J5LCBJIGRyYXcgdXBvbiB0aGlzIGVudHJ5Citmcm9tIFRoZSBHaXQgSVJDIExvZ3Mgb24gbXkgZmF0aGVyJ3MgYmlydGhkYXksIE1hcmNoIDE6CisKKyAgICA8Z2l0c3Rlcj4gVGhlIHF1b3RlIGZyb20gdGhlIGFib3ZlIGxpbnVzIHNob3VsZCBiZSByZXdyaXR0ZW4gYQorICAgICAgICBiaXQgKHdhaXQgZm9yIGl0KToKKyAgICAgICAgLSBmaXJzdCBzb3J0IGJ5IHR5cGUuICBEaWZmZXJlbnQgb2JqZWN0cyBuZXZlciBkZWx0YSB3aXRoCisJICBlYWNoIG90aGVyLgorICAgICAgICAtIHRoZW4gc29ydCBieSBmaWxlbmFtZS9kaXJuYW1lLiAgaGFzaCBvZiB0aGUgYmFzZW5hbWUKKyAgICAgICAgICBvY2N1cGllcyB0aGUgdG9wIEJJVFNfUEVSX0lOVC1ESVJfQklUUyBiaXRzLCBhbmQgYm90dG9tCisgICAgICAgICAgRElSX0JJVFMgYXJlIGZvciB0aGUgaGFzaCBvZiBsZWFkaW5nIHBhdGggZWxlbWVudHMuCisgICAgICAgIC0gdGhlbiBpZiB3ZSBhcmUgZG9pbmcgInRoaW4iIHBhY2ssIHRoZSBvYmplY3RzIHdlIGFyZSBfbm90XworICAgICAgICAgIGdvaW5nIHRvIHBhY2sgYnV0IHdlIGtub3cgYWJvdXQgYXJlIHNvcnRlZCBlYXJsaWVyIHRoYW4KKyAgICAgICAgICBvdGhlciBvYmplY3RzLgorICAgICAgICAtIGFuZCBmaW5hbGx5IHNvcnQgYnkgc2l6ZSwgbGFyZ2VyIHRvIHNtYWxsZXIuCisKK0luIG9uZSBzd2VsbC1mb29wLCBjbGFyaWZpY2F0aW9uIGFuZCBvYnNjdXJpZmljYXRpb24hICBOb25ldGhlbGVzcywKK2F1dGhvcml0YXRpdmUuICBDcnlwdGljLCB5ZXQgY29uY2lzZS4gIEl0IGV2ZW4gc29saWNpdHMgbm90aW9ucyBvZgorcXVvdGVzIGZyb20gVGhlIFNvdXJjZSBDb2RlLiAgQ2xlYXJseSwgbW9yZSBzdHVkeSBpcyBuZWVkZWQuCisKKyAgICA8Z2l0c3Rlcj4gVGhhdCdzIHRoZSBzb3J0IG9yZGVyLiAgV2hhdCB0aGlzIG1lYW5zIGlzOgorICAgICAgICAtIHdlIGRvIG5vdCBkZWx0YSBkaWZmZXJlbnQgb2JqZWN0IHR5cGVzLgorCS0gd2UgcHJlZmVyIHRvIGRlbHRhIHRoZSBvYmplY3RzIHdpdGggdGhlIHNhbWUgZnVsbCBwYXRoLCBidXQKKyAgICAgICAgICBhbGxvdyBmaWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgZnJvbSBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuCisJLSB3ZSBhbHdheXMgcHJlZmVyIHRvIGRlbHRhIGFnYWluc3Qgb2JqZWN0cyB3ZSBhcmUgbm90IGdvaW5nCisgICAgICAgICAgdG8gc2VuZCwgaWYgdGhlcmUgYXJlIHNvbWUuCisJLSB3ZSBwcmVmZXIgdG8gZGVsdGEgYWdhaW5zdCBsYXJnZXIgb2JqZWN0cywgc28gdGhhdCB3ZSBoYXZlCisgICAgICAgICAgbG90cyBvZiByZW1vdmFscy4KKworICAgICAgICBUaGUgcGVudWx0aW1hdGUgcnVsZSBpcyBmb3IgInRoaW4iIHBhY2tzLiAgSXQgaXMgdXNlZCB3aGVuCisgICAgICAgIHRoZSBvdGhlciBzaWRlIGlzIGtub3duIHRvIGhhdmUgc3VjaCBvYmplY3RzLgorCitUaGVyZSBpdCBpcyBhZ2Fpbi4gIlRoaW4iIHBhY2tzLiAgSSdtIHRoaW5raW5nIHRvIG15c2VsZiwgIldoYXQKK2lzIGEgJ3RoaW4nIHBhY2s/IiAgU28gSSBhc2s6CisKKyAgICA8amRsPiBXaGF0IGlzIGEgInRoaW4iIHBhY2s/CisKKyAgICA8Z2l0c3Rlcj4gVXNlIG9mIC0tb2JqZWN0cy1lZGdlIHRvIHJldi1saXN0IGFzIHRoZSB1cHN0cmVhbSBvZgorICAgICAgICBwYWNrLW9iamVjdHMuICBUaGUgcGFjayB0cmFuc2ZlciBwcm90b2NvbCBuZWdvdGlhdGVzIHRoYXQuCisKK1dvbyBob28hICBDbGVhcmVkIHRoYXQgX3JpZ2h0XyB1cCEKKworICAgIDxnaXRzdGVyPiBUaGVyZSBhcmUgdHdvIGRpcmVjdGlvbnMgLSBwdXNoIGFuZCBmZXRjaC4KKworVGhlcmUhICBEaWQgeW91IHNlZSBpdD8gIEl0IGlzIG5vdCAnInB1c2giIGFuZCAicHVsbCInISAgSG93IG9mdGVuIHRoZQorY29uZnVzaW9uIGhhcyBzdGFydGVkIGhlcmUuICBTbyBjYXN1YWxseSBtZW50aW9uZWQsIHRvbyEKKworICAgIDxnaXRzdGVyPiBGb3IgcHVzaCwgZ2l0LXNlbmQtcGFjayBpbnZva2VzIGdpdC1yZWNlaXZlLXBhY2sgb24gdGhlCisgICAgICAgIG90aGVyIGVuZC4gIFRoZSByZWNlaXZlLXBhY2sgc2F5cyAiSSBoYXZlIHVwIHRvIHRoZXNlIGNvbW1pdHMiLgorICAgICAgICBzZW5kLXBhY2sgbG9va3MgYXQgdGhlbSwgYW5kIGNvbXB1dGVzIHdoYXQgYXJlIG1pc3NpbmcgZnJvbQorICAgICAgICB0aGUgb3RoZXIgZW5kLiAgU28gInRoaW4iIGNvdWxkIGJlIHRoZSBkZWZhdWx0IHRoZXJlLgorCisgICAgICAgIEluIHRoZSBvdGhlciBkaXJlY3Rpb24sIGZldGNoLCBnaXQtZmV0Y2gtcGFjayBhbmQKKyAgICAgICAgZ2l0LWNsb25lLXBhY2sgaW52b2tlcyBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIG90aGVyIGVuZAorCSh2aWEgc3NoIG9yIGJ5IHRhbGtpbmcgdG8gdGhlIGRhZW1vbikuCisKKwlUaGVyZSBhcmUgdHdvIGNhc2VzOiBmZXRjaC1wYWNrIHdpdGggLWsgYW5kIGNsb25lLXBhY2sgaXMgb25lLAorICAgICAgICBmZXRjaC1wYWNrIHdpdGhvdXQgLWsgaXMgdGhlIG90aGVyLiAgY2xvbmUtcGFjayBhbmQgZmV0Y2gtcGFjaworICAgICAgICB3aXRoIC1rIHdpbGwga2VlcCB0aGUgZG93bmxvYWRlZCBwYWNrZmlsZSB3aXRob3V0IGV4cGFuZGVkLCBzbworICAgICAgICB3ZSBkbyBub3QgdXNlIHRoaW4gcGFjayB0cmFuc2Zlci4gIE90aGVyd2lzZSwgdGhlIGdlbmVyYXRlZAorICAgICAgICBwYWNrIHdpbGwgaGF2ZSBkZWx0YSB3aXRob3V0IGJhc2Ugb2JqZWN0IGluIHRoZSBzYW1lIHBhY2suCisKKyAgICAgICAgQnV0IGZldGNoLXBhY2sgd2l0aG91dCAtayB3aWxsIGV4cGxvZGUgdGhlIHJlY2VpdmVkIHBhY2sgaW50bworICAgICAgICBpbmRpdmlkdWFsIG9iamVjdHMsIHNvIHdlIGF1dG9tYXRpY2FsbHkgYXNrIHVwbG9hZC1wYWNrIHRvCisgICAgICAgIGdpdmUgdXMgYSB0aGluIHBhY2sgaWYgdXBsb2FkLXBhY2sgc3VwcG9ydHMgaXQuCisKK09LIHRoZW4uCisKK1VoLgorCitMZXQncyByZXR1cm4gdG8gdGhlIHByZXZpb3VzIGNvbnZlcnNhdGlvbiBzdGlsbCBpbiBwcm9ncmVzcy4KKworICAgIDxuanNgPiBhbmQgImJhc2VuYW1lIiBtZWFucyBzb21ldGhpbmcgbGlrZSAidGhlIHRhaWwgb2YgZW5kIG9mCisgICAgICAgIHBhdGggb2YgZmlsZSBvYmplY3RzIGFuZCBkaXIgb2JqZWN0cywgYXMgcGVyIGJhc2VuYW1lKDMpLCBhbmQKKyAgICAgICAgd2UganVzdCBkZWNsYXJlIGFsbCBjb21taXQgYW5kIHRhZyBvYmplY3RzIHRvIGhhdmUgdGhlIHNhbWUKKyAgICAgICAgYmFzZW5hbWUiIG9yIHNvbWV0aGluZz8KKworTHVja2lseSwgdGhhdCB0b28gaXMgYSBwb2ludCB0aGF0IGdpdHN0ZXIgY2xhcmlmaWVkIGZvciB1cyEKKworSWYgSSBtaWdodCBhZGQsIHRoZSB0cmljayBpcyB0byBtYWtlIGZpbGVzIHRoYXQgX21pZ2h0XyBiZSBzaW1pbGFyIGJlCitsb2NhdGVkIGNsb3NlIHRvIGVhY2ggb3RoZXIgaW4gdGhlIGhhc2ggYnVja2V0cyBiYXNlZCBvbiB0aGVpciBmaWxlCituYW1lcy4gIEl0IHVzZWQgdG8gYmUgdGhhdCAiZm9vL01ha2VmaWxlIiwgImJhci9iYXovcXV1eC9NYWtlZmlsZSIgYW5kCisiTWFrZWZpbGUiIGFsbCBsYW5kZWQgaW4gdGhlIHNhbWUgYnVja2V0IGR1ZSB0byB0aGVpciBjb21tb24gYmFzZW5hbWUsCisiTWFrZWZpbGUiLiBIb3dldmVyLCBub3cgdGhleSBsYW5kIGluICJjbG9zZSIgYnVja2V0cy4KKworVGhlIGFsZ29yaXRobSBhbGxvd3Mgbm90IGp1c3QgZm9yIHRoZSBfc2FtZV8gYnVja2V0LCBidXQgZm9yIF9jbG9zZV8KK2J1Y2tldHMgdG8gYmUgY29uc2lkZXJlZCBkZWx0YSBjYW5kaWRhdGVzLiAgVGhlIHJhdGlvbmFsZSBpcworZXNzZW50aWFsbHkgdGhhdCBmaWxlcywgbGlrZSBNYWtlZmlsZXMsIG9mdGVuIGhhdmUgdmVyeSBzaW1pbGFyCitjb250ZW50IG5vIG1hdHRlciB3aGF0IGRpcmVjdG9yeSB0aGV5IGxpdmUgaW4uCisKKyAgICA8bGludXM+IEkgcGxheWVkIGFyb3VuZCB3aXRoIGRpZmZlcmVudCBkZWx0YSBhbGdvcml0aG1zLCBhbmQgd2l0aAorICAgICAgICBtYWtpbmcgdGhlICJkZWx0YSB3aW5kb3ciIGJpZ2dlciwgYnV0IGhhdmluZyB0b28gYmlnIG9mIGEKKyAgICAgICAgc2xpZGluZyB3aW5kb3cgbWFrZXMgaXQgdmVyeSBleHBlbnNpdmUgdG8gZ2VuZXJhdGUgdGhlIHBhY2s6CisgICAgICAgIHlvdSBuZWVkIHRvIGNvbXBhcmUgZXZlcnkgb2JqZWN0IHdpdGggYSBfdG9uXyBvZiBvdGhlciBvYmplY3RzLgorCisgICAgICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBvdGhlciB0cml2aWFsIGhldXJpc3RpY3MgdG9vLCB3aGljaAorICAgICAgICBiYXNpY2FsbHkgYm9pbCBkb3duIHRvICJkb24ndCBib3RoZXIgZXZlbiB0cnlpbmcgdG8gZGVsdGEgdGhpcworICAgICAgICBwYWlyIiBpZiB3ZSBjYW4gdGVsbCBiZWZvcmUtaGFuZCB0aGF0IHRoZSBkZWx0YSBpc24ndCB3b3J0aCBpdAorICAgICAgICAoZHVlIHRvIHNpemUgZGlmZmVyZW5jZXMsIHdoZXJlIHdlIGNhbiB0YWtlIGEgcHJldmlvdXMgZGVsdGEKKyAgICAgICAgcmVzdWx0IGludG8gYWNjb3VudCB0byBkZWNpZGUgdGhhdCAib2ssIG5vIHBvaW50IGluIHRyeWluZworICAgICAgICB0aGF0IG9uZSwgaXQgd2lsbCBiZSB3b3JzZSIpLgorCisgICAgICAgIEVuZCByZXN1bHQ6IHBhY2tpbmcgaXMgYWN0dWFsbHkgdmVyeSBzaXplIGVmZmljaWVudC4gSXQncworICAgICAgICBzb21ld2hhdCBDUFUtd2FzdGVmdWwsIGJ1dCBvbiB0aGUgb3RoZXIgaGFuZCwgc2luY2UgeW91J3JlCisgICAgICAgIHJlYWxseSBvbmx5IHN1cHBvc2VkIHRvIGRvIGl0IG1heWJlIG9uY2UgYSBtb250aCAoYW5kIHlvdSBjYW4KKyAgICAgICAgZG8gaXQgZHVyaW5nIHRoZSBuaWdodCksIG5vYm9keSByZWFsbHkgc2VlbXMgdG8gY2FyZS4KKworTmljZSBFbmdpbmVlcmluZyBUb3VjaCwgdGhlcmUuICBGaW5kIHdoZW4gaXQgZG9lc24ndCBtYXR0ZXIsIGFuZAorcHJvY2xhaW0gaXQgYSBub24taXNzdWUuICBHb29kIHN0eWxlIHRvbyEKKworICAgIDxuanNgPiBTbywganVzdCB0byByZXBlYXQgdG8gc2VlIGlmIEknbSBmb2xsb3dpbmcsIHdlIHN0YXJ0IGJ5CisgICAgICAgIGdldHRpbmcgYSBsaXN0IG9mIHRoZSBvYmplY3RzIHdlIHdhbnQgdG8gcGFjaywgd2Ugc29ydCBpdCBieQorICAgICAgICB0aGlzIGhldXJpc3RpYyAoYmFzaWNhbGx5IGxleGljb2dyYXBoaWNhbGx5IG9uIHRoZSB0dXBsZQorICAgICAgICAodHlwZSwgYmFzZW5hbWUsIHNpemUpKS4KKworICAgICAgICBUaGVuIHdlIHdhbGsgdGhyb3VnaCB0aGlzIGxpc3QsIGFuZCBjYWxjdWxhdGUgYSBkZWx0YSBvZgorICAgICAgICBlYWNoIG9iamVjdCBhZ2FpbnN0IHRoZSBsYXN0IG4gKHR1bmFibGUgcGFyYW1ldGVyKSBvYmplY3RzLAorICAgICAgICBhbmQgcGljayB0aGUgc21hbGxlc3Qgb2YgdGhlc2UgZGVsdGFzLgorCitWYXN0bHkgc2ltcGxpZmllZCwgYnV0IHRoZSBlc3NlbmNlIGlzIHRoZXJlIQorCisgICAgPGxpbnVzPiBDb3JyZWN0LgorCisgICAgPG5qc2A+IEFuZCB0aGVuIG9uY2Ugd2UgaGF2ZSBwaWNrZWQgYSBkZWx0YSBvciBmdWxsdGV4dCB0bworICAgICAgICByZXByZXNlbnQgZWFjaCBvYmplY3QsIHdlIHJlLXNvcnQgYnkgcmVjZW5jeSwgYW5kIHdyaXRlIHRoZW0KKyAgICAgICAgb3V0IGluIHRoYXQgb3JkZXIuCisKKyAgICA8bGludXM+IFl1cC4gU29tZSBvdGhlciBzbWFsbCBkZXRhaWxzOgorCitBbmQgb2YgY291cnNlIHRoZXJlIGlzIHRoZSAiT3RoZXIgU2hvZSIgRmFjdG9yIHRvby4KKworICAgIDxsaW51cz4gLSBXZSBsaW1pdCB0aGUgZGVsdGEgZGVwdGggdG8gYW5vdGhlciBtYWdpYyB2YWx1ZSAocmlnaHQKKyAgICAgICAgbm93IGJvdGggdGhlIHdpbmRvdyBhbmQgZGVsdGEgZGVwdGggbWFnaWMgdmFsdWVzIGFyZSBqdXN0ICIxMCIpCisKKyAgICA8bmpzYD4gSHJtLCBteSBpbnR1aXRpb24gaXMgdGhhdCB5b3UnZCBlbmQgdXAgd2l0aCByZWFsbHkgX2JhZF8gSU8KKyAgICAgICAgcGF0dGVybnMsIGJlY2F1c2UgdGhlIHRoaW5ncyB5b3Ugd2FudCBhcmUgbmVhciBieSwgYnV0IHRvCisgICAgICAgIGFjdHVhbGx5IHJlY29uc3RydWN0IHRoZW0geW91IG1heSBoYXZlIHRvIGp1bXAgYWxsIG92ZXIgaW4KKyAgICAgICAgcmFuZG9tIHdheXMuCisKKyAgICA8bGludXM+IC0gV2hlbiB3ZSB3cml0ZSBvdXQgYSBkZWx0YSwgYW5kIHdlIGhhdmVuJ3QgeWV0IHdyaXR0ZW4KKyAgICAgICAgb3V0IHRoZSBvYmplY3QgaXQgaXMgYSBkZWx0YSBhZ2FpbnN0LCB3ZSB3cml0ZSBvdXQgdGhlIGJhc2UKKyAgICAgICAgb2JqZWN0IGZpcnN0LiAgQW5kIG5vLCB3aGVuIHdlIHJlY29uc3RydWN0IHRoZW0sIHdlIGFjdHVhbGx5CisgICAgICAgIGdldCBuaWNlIElPIHBhdHRlcm5zLCBiZWNhdXNlOgorICAgICAgICAtIGxhcmdlciBvYmplY3RzIHRlbmQgdG8gYmUgIm1vcmUgcmVjZW50IiAoTGludXMnIGxhdzogZmlsZXMgZ3JvdykKKyAgICAgICAgLSB3ZSBhY3RpdmVseSB0cnkgdG8gZ2VuZXJhdGUgZGVsdGFzIGZyb20gYSBsYXJnZXIgb2JqZWN0IHRvIGEKKyAgICAgICAgICBzbWFsbGVyIG9uZQorICAgICAgICAtIHRoaXMgbWVhbnMgdGhhdCB0aGUgdG9wLW9mLXRyZWUgdmVyeSBzZWxkb20gaGFzIGRlbHRhcworICAgICAgICAgIChpLmUuIGRlbHRhcyBpbiBfcHJhY3RpY2VfIGFyZSAiYmFja3dhcmRzIGRlbHRhcyIpCisKK0FnYWluLCB3ZSBzaG91bGQgcmVyZWFkIHRoYXQgd2hvbGUgcGFyYWdyYXBoLiAgTm90IGp1c3QgYmVjYXVzZQorTGludXMgaGFzIHNsaXBwZWQgTGludXMncyBMYXcgaW4gdGhlcmUgb24gdXMsIGJ1dCBiZWNhdXNlIGl0IGlzCitpbXBvcnRhbnQuICBMZXQncyBtYWtlIHN1cmUgd2UgY2xhcmlmeSBzb21lIG9mIHRoZSBwb2ludHMgaGVyZToKKworICAgIDxuanNgPiBTbyB0aGUgcG9pbnQgaXMganVzdCB0aGF0IGluIHByYWN0aWNlLCBkZWx0YSBvcmRlciBhbmQKKyAgICAgICAgcmVjZW5jeSBvcmRlciBtYXRjaCBlYWNoIG90aGVyIHF1aXRlIHdlbGwuCisKKyAgICA8bGludXM+IFllcy4gVGhlcmUncyBhbm90aGVyIG5pY2Ugc2lkZSB0byB0aGlzIChhbmQgeWVzLCBpdCB3YXMKKwlkZXNpZ25lZCB0aGF0IHdheSA7KToKKyAgICAgICAgLSB0aGUgcmVhc29uIHdlIGdlbmVyYXRlIGRlbHRhcyBhZ2FpbnN0IHRoZSBsYXJnZXIgb2JqZWN0IGlzCisJICBhY3R1YWxseSBhIGJpZyBzcGFjZSBzYXZlciB0b28hCisKKyAgICA8bmpzYD4gSG1tLCBidXQgeW91ciBsYXN0IGNvbW1lbnQgKGlmICJ3ZSBoYXZlbid0IHlldCB3cml0dGVuIG91dAorICAgICAgICB0aGUgb2JqZWN0IGl0IGlzIGEgZGVsdGEgYWdhaW5zdCwgd2Ugd3JpdGUgb3V0IHRoZSBiYXNlIG9iamVjdAorICAgICAgICBmaXJzdCIpLCBzZWVtcyBsaWtlIGl0IHdvdWxkIG1ha2UgdGhlc2UgZmFjdHMgbW9zdGx5CisgICAgICAgIGlycmVsZXZhbnQgYmVjYXVzZSBldmVuIGlmIGluIHByYWN0aWNlIHlvdSB3b3VsZCBub3QgaGF2ZSB0bworICAgICAgICB3YW5kZXIgYXJvdW5kIG11Y2gsIGluIGZhY3QgeW91IGp1c3QgYnJ1dGUtZm9yY2Ugc2F5IHRoYXQgaW4KKyAgICAgICAgdGhlIGNhc2VzIHdoZXJlIHlvdSBtaWdodCBoYXZlIHRvIHdhbmRlciwgZG9uJ3QgZG8gdGhhdCA6LSkKKworICAgIDxsaW51cz4gWWVzIGFuZCBuby4gTm90aWNlIHRoZSBydWxlOiB3ZSBvbmx5IHdyaXRlIG91dCB0aGUgYmFzZQorICAgICAgICBvYmplY3QgZmlyc3QgaWYgdGhlIGRlbHRhIGFnYWluc3QgaXQgd2FzIG1vcmUgcmVjZW50LiAgVGhhdAorICAgICAgICBtZWFucyB0aGF0IHlvdSBjYW4gYWN0dWFsbHkgaGF2ZSBkZWx0YXMgdGhhdCByZWZlciB0byBhIGJhc2UKKyAgICAgICAgb2JqZWN0IHRoYXQgaXMgX25vdF8gY2xvc2UgdG8gdGhlIGRlbHRhIG9iamVjdCwgYnV0IHRoYXQgb25seQorICAgICAgICBoYXBwZW5zIHdoZW4gdGhlIGRlbHRhIGlzIG5lZWRlZCB0byBnZW5lcmF0ZSBhbiBfb2xkXyBvYmplY3QuCisKKyAgICA8bGludXM+IFNlZT8KKworWWVhaCwgbm8uICBJIG1pc3NlZCB0aGF0IG9uIHRoZSBmaXJzdCB0d28gb3IgdGhyZWUgcmVhZGluZ3MgbXlzZWxmLgorCisgICAgPGxpbnVzPiBUaGlzIGtlZXBzIHRoZSBmcm9udCBvZiB0aGUgcGFjayBkZW5zZS4gVGhlIGZyb250IG9mIHRoZQorICAgICAgICBwYWNrIG5ldmVyIGNvbnRhaW5zIGRhdGEgdGhhdCBpc24ndCByZWxldmFudCB0byBhICJyZWNlbnQiCisgICAgICAgIG9iamVjdC4gIFRoZSBzaXplIG9wdGltaXphdGlvbiBjb21lcyBmcm9tIG91ciB1c2Ugb2YgeGRlbHRhCisgICAgICAgIChidXQgaXMgdHJ1ZSBmb3IgbWFueSBvdGhlciBkZWx0YSBhbGdvcml0aG1zKTogcmVtb3ZpbmcgZGF0YQorICAgICAgICBpcyBjaGVhcGVyIChpbiBzaXplKSB0aGFuIGFkZGluZyBkYXRhLgorCisgICAgICAgIFdoZW4geW91IHJlbW92ZSBkYXRhLCB5b3Ugb25seSBuZWVkIHRvIHNheSAiY29weSBieXRlcyBuLS1tIi4KKwlJbiBjb250cmFzdCwgaW4gYSBkZWx0YSB0aGF0IF9hZGRzXyBkYXRhLCB5b3UgaGF2ZSB0byBzYXkgImFkZAorICAgICAgICB0aGVzZSBieXRlczogJ2FjdHVhbCBkYXRhIGdvZXMgaGVyZSciCisKKyAgICAqKiogbmpzYCBoYXMgcXVpdDogUmVhZCBlcnJvcjogMTA0IChDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIpCisKKyAgICA8bGludXM+IFVoaHVoLiBJIGhvcGUgSSBkaWRuJ3QgYmxvdyBuanNgIG1pbmQuCisKKyAgICAqKiogbmpzYCBoYXMgam9pbmVkIGNoYW5uZWwgI2dpdAorCisgICAgPHBhc2t5PiA6KQorCitUaGUgc2lsZW50IG9ic2VydmVycyBhcmUgYW11c2VkLiAgT2YgY291cnNlLgorCitBbmQgYXMgaWYgbmpzYCB3YXMgZXhwZWN0ZWQgdG8gYmUgb21uaXNjaWVudDoKKworICAgIDxsaW51cz4gbmpzIC0gZGlkIHlvdSBtaXNzIGFueXRoaW5nPworCitPSywgSSdsbCBzcGVsbCBpdCBvdXQuICBUaGF0J3MgR2VlayBIdW1vci4gIElmIG5qc2Agd2FzIG5vdCBhY3R1YWxseQorY29ubmVjdGVkIGZvciBhIGxpdHRsZSBiaXQgdGhlcmUsIGhvdyB3b3VsZCBoZSBrbm93IGlmIG1pc3NlZCBhbnl0aGluZword2hpbGUgaGUgd2FzIGRpc2Nvbm5lY3RlZD8gIEhlJ3MgYSBiZW5ldm9sZW50IGRpY3RhdG9yIHdpdGggYSBzZW5zZSBvZgoraHVtb3IhICBXZWxsIG5vdGVkIQorCisgICAgPG5qc2A+IFN0dXBpZCByb3V0ZXIuICBPciBncmVtbGlucywgb3Igd2hhdGV2ZXIuCisKK0l0J3MgYSBjaGVhcCBzaG90IGF0IENpc2NvLiAgVGFrZSAnZW0gd2hlbiB5b3UgY2FuLgorCisgICAgPG5qc2A+IFllcyBhbmQgbm8uIE5vdGljZSB0aGUgcnVsZTogd2Ugb25seSB3cml0ZSBvdXQgdGhlIGJhc2UKKyAgICAgICAgb2JqZWN0IGZpcnN0IGlmIHRoZSBkZWx0YSBhZ2FpbnN0IGl0IHdhcyBtb3JlIHJlY2VudC4KKworICAgICAgICBJJ20gZ2V0dGluZyBsb3N0IGluIGFsbCB0aGVzZSBvcmRlcnMsIGxldCBtZSByZS1yZWFkIDotKQorCVNvIHRoZSB3cml0ZS1vdXQgb3JkZXIgaXMgZnJvbSBtb3N0IHJlY2VudCB0byBsZWFzdCByZWNlbnQ/CisgICAgICAgIChDb25jZWl2YWJseSBpdCBjb3VsZCBiZSB0aGUgb3Bwb3NpdGUgd2F5IHRvbywgSSdtIG5vdCBzdXJlIGlmCisgICAgICAgIHdlJ3ZlIHNhaWQpIHRob3VnaCBteSBjb25uZWN0aW9uIGJhY2sgYXQgaG9tZSBpcyBsb2dnaW5nLCBzbyBJCisgICAgICAgIGNhbiBqdXN0IHJlYWQgd2hhdCB5b3Ugc2FpZCB0aGVyZSA6LSkKKworQW5kIGZvciB0aG9zZSBvZiB5b3UgcGF5aW5nIGF0dGVudGlvbiwgdGhlIE9tbmlzY2llbnQgVHJpY2sgaGFzIGp1c3QKK2JlZW4gZGV0YWlsZWQhCisKKyAgICA8bGludXM+IFllcywgd2UgYWx3YXlzIHdyaXRlIG91dCBtb3N0IHJlY2VudCBmaXJzdAorCisgICAgPG5qc2A+IEFuZCwgeWVhaCwgSSBnb3QgdGhlIHBhcnQgYWJvdXQgZGVlcGVyLWluLWhpc3Rvcnkgc3R1ZmYKKyAgICAgICAgaGF2aW5nIHdvcnNlIElPIGNoYXJhY3RlcmlzdGljcywgb25lIHNvcnQgb2YgZG9lc24ndCBjYXJlLgorCisgICAgPGxpbnVzPiBXaXRoIHRoZSBjYXZlYXQgdGhhdCBpZiB0aGUgIm1vc3QgcmVjZW50IiBuZWVkcyBhbiBvbGRlcgorICAgICAgICBvYmplY3QgdG8gZGVsdGEgYWdhaW5zdCAoaGV5LCBzaHJpbmtpbmcgc29tZXRpbWVzIGRvZXMKKyAgICAgICAgaGFwcGVuKSwgd2Ugd3JpdGUgb3V0IHRoZSBvbGQgb2JqZWN0IHdpdGggdGhlIGRlbHRhLgorCisgICAgPG5qc2A+IChpZiBvbmx5IGl0IGhhcHBlbmVkIG1vcmUuLi4pCisKKyAgICA8bGludXM+IEFueXdheSwgdGhlIHBhY2stZmlsZSBjb3VsZCBlYXNpbHkgYmUgZGVuc2VyIHN0aWxsLCBidXQKKwliZWNhdXNlIGl0J3MgdXNlZCBib3RoIGZvciBzdHJlYW1pbmcgKHRoZSBHaXQgcHJvdG9jb2wpIGFuZAorICAgICAgICBmb3Igb24tZGlzaywgaXQgaGFzIGEgZmV3IHBlc3NpbWl6YXRpb25zLgorCitBY3R1YWxseSwgaXQgaXMgYSBtYWRlLXVwIHdvcmQuIEJ1dCBpdCBpcyBhIG1hZGUtdXAgd29yZCBiZWluZwordXNlZCBhcyBzZXR1cCBmb3IgYSBsYXRlciBvcHRpbWl6YXRpb24sIHdoaWNoIGlzIGEgcmVhbCB3b3JkOgorCisgICAgPGxpbnVzPiBJbiBwYXJ0aWN1bGFyLCB3aGlsZSB0aGUgcGFjay1maWxlIGlzIHRoZW4gY29tcHJlc3NlZCwKKyAgICAgICAgaXQncyBjb21wcmVzc2VkIGp1c3Qgb25lIG9iamVjdCBhdCBhIHRpbWUsIHNvIHRoZSBhY3R1YWwKKyAgICAgICAgY29tcHJlc3Npb24gZmFjdG9yIGlzIGxlc3MgdGhhbiBpdCBjb3VsZCBiZSBpbiB0aGVvcnkuIEJ1dCBpdAorICAgICAgICBtZWFucyB0aGF0IGl0J3MgYWxsIG5pY2UgcmFuZG9tLWFjY2VzcyB3aXRoIGEgc2ltcGxlIGluZGV4IHRvCisgICAgICAgIGRvICJvYmplY3QgbmFtZS0+bG9jYXRpb24gaW4gcGFja2ZpbGUiIHRyYW5zbGF0aW9uLgorCisgICAgPG5qc2A+IEknbSBhc3N1bWluZyB0aGUgcmVhbCB3aW4gZm9yIGRlbHRhLWluZyBsYXJnZS0+c21hbGwgaXMKKyAgICAgICAgbW9yZSBob21vZ2VuZW91cyBzdGF0aXN0aWNzIGZvciBnemlwIHRvIHJ1biBvdmVyPworCisgICAgICAgIChZb3UgaGF2ZSB0byBwdXQgdGhlIGJ5dGVzIGluIG9uZSBwbGFjZSBvciBhbm90aGVyLCBidXQKKyAgICAgICAgcHV0dGluZyB0aGVtIGluIGEgbGFyZ2VyIGJsb2Igd2lucyBvbiBjb21wcmVzc2lvbikKKworICAgICAgICBBY3R1YWxseSwgd2hhdCBpcyB0aGUgY29tcHJlc3Npb24gc3RyYXRlZ3kgLS0gZWFjaCBkZWx0YQorICAgICAgICBpbmRpdmlkdWFsbHkgZ3ppcHBlZCwgdGhlIHdob2xlIGZpbGUgZ3ppcHBlZCwgc29tZXdoZXJlIGluCisgICAgICAgIGJldHdlZW4sIG5vIGNvbXByZXNzaW9uIGF0IGFsbCwgLi4uLj8KKworICAgICAgICBSaWdodC4KKworUmVhbGl0eSBJUkMgc2V0cyBpbi4gIEZvciBleGFtcGxlOgorCisgICAgPHBhc2t5PiBJJ2xsIHJlYWQgdGhlIHJlc3QgaW4gdGhlIG1vcm5pbmcsIEkgcmVhbGx5IGhhdmUgdG8gZ28KKyAgICAgICAgc2xlZXAgb3IgdGhlcmUncyBubyBob3BlIHdoYXRzb2V2ZXIgZm9yIG1lIGF0IHRoZSB0b2RheSdzCisgICAgICAgIGV4YW0uLi4gZyduaXRlIGFsbC4KKworSGVoLgorCisgICAgPGxpbnVzPiBwYXNreTogZyduaXRlCisKKyAgICA8bmpzYD4gcGFza3k6ICdsdWNrCisKKyAgICA8bGludXM+IFJpZ2h0OiBsYXJnZS0+c21hbGwgbWF0dGVycyBleGFjdGx5IGJlY2F1c2Ugb2YgY29tcHJlc3Npb24KKyAgICAgICAgYmVoYXZpb3VyLiBJZiBpdCB3YXMgbm9uLWNvbXByZXNzZWQsIGl0IHByb2JhYmx5IHdvdWxkbid0IG1ha2UKKyAgICAgICAgYW55IGRpZmZlcmVuY2UuCisKKyAgICA8bmpzYD4geWVhaAorCisgICAgPGxpbnVzPiBBbnl3YXk6IEknbSBub3QgZXZlbiB0cnlpbmcgdG8gY2xhaW0gdGhhdCB0aGUgcGFjay1maWxlcworICAgICAgICBhcmUgcGVyZmVjdCwgYnV0IHRoZXkgZG8gdGVuZCB0byBoYXZlIGEgbmljZSBiYWxhbmNlIG9mCisgICAgICAgIGRlbnNpdHkgdnMgZWFzZS1vZiB1c2UuCisKK0dhc3AhICBPSywgc2F2ZWQuICBUaGF0J3MgYSBmYWlyIEVuZ2luZWVyaW5nIHRyYWRlIG9mZi4gIENsb3NlIGNhbGwhCitJbiBmYWN0LCBMaW51cyByZWZsZWN0cyBvbiBzb21lIEJhc2ljIEVuZ2luZWVyaW5nIEZ1bmRhbWVudGFscywKK2Rlc2lnbiBvcHRpb25zLCBldGMuCisKKyAgICA8bGludXM+IE1vcmUgaW1wb3J0YW50bHksIHRoZXkgYWxsb3cgR2l0IHRvIHN0aWxsIF9jb25jZXB0dWFsbHlfCisgICAgICAgIG5ldmVyIGRlYWwgd2l0aCBkZWx0YXMgYXQgYWxsLCBhbmQgYmUgYSAid2hvbGUgb2JqZWN0IiBzdG9yZS4KKworICAgICAgICBXaGljaCBoYXMgc29tZSBwcm9ibGVtcyAod2UgZGlzY3Vzc2VkIGJhZCBodWdlLWZpbGUKKwliZWhhdmlvdXIgb24gdGhlIEdpdCBsaXN0cyB0aGUgb3RoZXIgZGF5KSwgYnV0IGl0IGRvZXMgbWVhbgorCXRoYXQgdGhlIGJhc2ljIEdpdCBjb25jZXB0cyBhcmUgcmVhbGx5IHJlYWxseSBzaW1wbGUgYW5kCisgICAgICAgIHN0cmFpZ2h0Zm9yd2FyZC4KKworICAgICAgICBJdCdzIGFsbCBiZWVuIHF1aXRlIHN0YWJsZS4KKworICAgICAgICBXaGljaCBJIHRoaW5rIGlzIHZlcnkgbXVjaCBhIHJlc3VsdCBvZiBoYXZpbmcgdmVyeSBzaW1wbGUKKyAgICAgICAgYmFzaWMgaWRlYXMsIHNvIHRoYXQgdGhlcmUncyBuZXZlciBhbnkgY29uZnVzaW9uIGFib3V0IHdoYXQncworICAgICAgICBnb2luZyBvbi4KKworICAgICAgICBCdWdzIGhhcHBlbiwgYnV0IHRoZXkgYXJlICJzaW1wbGUiIGJ1Z3MuIEFuZCBidWdzIHRoYXQKKyAgICAgICAgYWN0dWFsbHkgZ2V0IHNvbWUgb2JqZWN0IHN0b3JlIGRldGFpbCB3cm9uZyBhcmUgYWxtb3N0IGFsd2F5cworICAgICAgICBzbyBvYnZpb3VzIHRoYXQgdGhleSBuZXZlciBnbyBhbnl3aGVyZS4KKworICAgIDxuanNgPiBZZWFoLgorCitOdWZmIHNhaWQuCisKKyAgICA8bGludXM+IEFueXdheS4gIEknbSBvZmYgZm9yIGJlZC4gSXQncyBub3QgNkFNIGhlcmUsIGJ1dCBJJ3ZlIGdvdAorCSB0aHJlZSBraWRzLCBhbmQgaGF2ZSB0byBnZXQgdXAgZWFybHkgaW4gdGhlIG1vcm5pbmcgdG8gc2VuZAorCSB0aGVtIG9mZi4gSSBuZWVkIG15IGJlYXV0eSBzbGVlcC4KKworICAgIDxuanNgPiA6LSkKKworICAgIDxuanNgPiBhcHByZWNpYXRlIHRoZSBpbmZvZHVtcCwgSSByZWFsbHkgd2FzIGZhaWxpbmcgdG8gZmluZCB0aGUKKwlkZXRhaWxzIG9uIEdpdCBwYWNrcyA6LSkKKworQW5kIG5vdyB5b3Uga25vdyB0aGUgcmVzdCBvZiB0aGUgc3RvcnkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLXByb3RvY29sLnR4dCBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3BhY2stcHJvdG9jb2wudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2OTc3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wYWNrLXByb3RvY29sLnR4dApAQCAtMCwwICsxLDYwMyBAQAorUGFja2ZpbGUgdHJhbnNmZXIgcHJvdG9jb2xzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworR2l0IHN1cHBvcnRzIHRyYW5zZmVycmluZyBkYXRhIGluIHBhY2tmaWxlcyBvdmVyIHRoZSBzc2g6Ly8sIGdpdDovLywgaHR0cDovLyBhbmQKK2ZpbGU6Ly8gdHJhbnNwb3J0cy4gIFRoZXJlIGV4aXN0IHR3byBzZXRzIG9mIHByb3RvY29scywgb25lIGZvciBwdXNoaW5nCitkYXRhIGZyb20gYSBjbGllbnQgdG8gYSBzZXJ2ZXIgYW5kIGFub3RoZXIgZm9yIGZldGNoaW5nIGRhdGEgZnJvbSBhCitzZXJ2ZXIgdG8gYSBjbGllbnQuICBUaGUgdGhyZWUgdHJhbnNwb3J0cyAoc3NoLCBnaXQsIGZpbGUpIHVzZSB0aGUgc2FtZQorcHJvdG9jb2wgdG8gdHJhbnNmZXIgZGF0YS4gaHR0cCBpcyBkb2N1bWVudGVkIGluIGh0dHAtcHJvdG9jb2wudHh0LgorCitUaGUgcHJvY2Vzc2VzIGludm9rZWQgaW4gdGhlIGNhbm9uaWNhbCBHaXQgaW1wbGVtZW50YXRpb24gYXJlICd1cGxvYWQtcGFjaycKK29uIHRoZSBzZXJ2ZXIgc2lkZSBhbmQgJ2ZldGNoLXBhY2snIG9uIHRoZSBjbGllbnQgc2lkZSBmb3IgZmV0Y2hpbmcgZGF0YTsKK3RoZW4gJ3JlY2VpdmUtcGFjaycgb24gdGhlIHNlcnZlciBhbmQgJ3NlbmQtcGFjaycgb24gdGhlIGNsaWVudCBmb3IgcHVzaGluZworZGF0YS4gIFRoZSBwcm90b2NvbCBmdW5jdGlvbnMgdG8gaGF2ZSBhIHNlcnZlciB0ZWxsIGEgY2xpZW50IHdoYXQgaXMKK2N1cnJlbnRseSBvbiB0aGUgc2VydmVyLCB0aGVuIGZvciB0aGUgdHdvIHRvIG5lZ290aWF0ZSB0aGUgc21hbGxlc3QgYW1vdW50CitvZiBkYXRhIHRvIHNlbmQgaW4gb3JkZXIgdG8gZnVsbHkgdXBkYXRlIG9uZSBvciB0aGUgb3RoZXIuCisKK3BrdC1saW5lIEZvcm1hdAorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZXNjcmlwdGlvbnMgYmVsb3cgYnVpbGQgb24gdGhlIHBrdC1saW5lIGZvcm1hdCBkZXNjcmliZWQgaW4KK3Byb3RvY29sLWNvbW1vbi50eHQuIFdoZW4gdGhlIGdyYW1tYXIgaW5kaWNhdGUgYFBLVC1MSU5FKC4uLilgLCB1bmxlc3MKK290aGVyd2lzZSBub3RlZCB0aGUgdXN1YWwgcGt0LWxpbmUgTEYgcnVsZXMgYXBwbHk6IHRoZSBzZW5kZXIgU0hPVUxECitpbmNsdWRlIGEgTEYsIGJ1dCB0aGUgcmVjZWl2ZXIgTVVTVCBOT1QgY29tcGxhaW4gaWYgaXQgaXMgbm90IHByZXNlbnQuCisKK1RyYW5zcG9ydHMKKy0tLS0tLS0tLS0KK1RoZXJlIGFyZSB0aHJlZSB0cmFuc3BvcnRzIG92ZXIgd2hpY2ggdGhlIHBhY2tmaWxlIHByb3RvY29sIGlzCitpbml0aWF0ZWQuICBUaGUgR2l0IHRyYW5zcG9ydCBpcyBhIHNpbXBsZSwgdW5hdXRoZW50aWNhdGVkIHNlcnZlciB0aGF0Cit0YWtlcyB0aGUgY29tbWFuZCAoYWxtb3N0IGFsd2F5cyAndXBsb2FkLXBhY2snLCB0aG91Z2ggR2l0CitzZXJ2ZXJzIGNhbiBiZSBjb25maWd1cmVkIHRvIGJlIGdsb2JhbGx5IHdyaXRhYmxlLCBpbiB3aGljaCAncmVjZWl2ZS0KK3BhY2snIGluaXRpYXRpb24gaXMgYWxzbyBhbGxvd2VkKSB3aXRoIHdoaWNoIHRoZSBjbGllbnQgd2lzaGVzIHRvCitjb21tdW5pY2F0ZSBhbmQgZXhlY3V0ZXMgaXQgYW5kIGNvbm5lY3RzIGl0IHRvIHRoZSByZXF1ZXN0aW5nCitwcm9jZXNzLgorCitJbiB0aGUgU1NIIHRyYW5zcG9ydCwgdGhlIGNsaWVudCBqdXN0IHJ1bnMgdGhlICd1cGxvYWQtcGFjaycKK29yICdyZWNlaXZlLXBhY2snIHByb2Nlc3Mgb24gdGhlIHNlcnZlciBvdmVyIHRoZSBTU0ggcHJvdG9jb2wgYW5kIHRoZW4KK2NvbW11bmljYXRlcyB3aXRoIHRoYXQgaW52b2tlZCBwcm9jZXNzIG92ZXIgdGhlIFNTSCBjb25uZWN0aW9uLgorCitUaGUgZmlsZTovLyB0cmFuc3BvcnQgcnVucyB0aGUgJ3VwbG9hZC1wYWNrJyBvciAncmVjZWl2ZS1wYWNrJworcHJvY2VzcyBsb2NhbGx5IGFuZCBjb21tdW5pY2F0ZXMgd2l0aCBpdCBvdmVyIGEgcGlwZS4KKworR2l0IFRyYW5zcG9ydAorLS0tLS0tLS0tLS0tLQorCitUaGUgR2l0IHRyYW5zcG9ydCBzdGFydHMgb2ZmIGJ5IHNlbmRpbmcgdGhlIGNvbW1hbmQgYW5kIHJlcG9zaXRvcnkKK29uIHRoZSB3aXJlIHVzaW5nIHRoZSBwa3QtbGluZSBmb3JtYXQsIGZvbGxvd2VkIGJ5IGEgTlVMIGJ5dGUgYW5kIGEKK2hvc3RuYW1lIHBhcmFtZXRlciwgdGVybWluYXRlZCBieSBhIE5VTCBieXRlLgorCisgICAwMDMyZ2l0LXVwbG9hZC1wYWNrIC9wcm9qZWN0LmdpdFwwaG9zdD1teXNlcnZlci5jb21cMAorCistLQorICAgZ2l0LXByb3RvLXJlcXVlc3QgPSByZXF1ZXN0LWNvbW1hbmQgU1AgcGF0aG5hbWUgTlVMIFsgaG9zdC1wYXJhbWV0ZXIgTlVMIF0KKyAgIHJlcXVlc3QtY29tbWFuZCAgID0gImdpdC11cGxvYWQtcGFjayIgLyAiZ2l0LXJlY2VpdmUtcGFjayIgLworCQkgICAgICAgImdpdC11cGxvYWQtYXJjaGl2ZSIgICA7IGNhc2Ugc2Vuc2l0aXZlCisgICBwYXRobmFtZSAgICAgICAgICA9ICooICV4MDEtZmYgKSA7IGV4Y2x1ZGUgTlVMCisgICBob3N0LXBhcmFtZXRlciAgICA9ICJob3N0PSIgaG9zdG5hbWUgWyAiOiIgcG9ydCBdCistLQorCitPbmx5IGhvc3QtcGFyYW1ldGVyIGlzIGFsbG93ZWQgaW4gdGhlIGdpdC1wcm90by1yZXF1ZXN0LiBDbGllbnRzCitNVVNUIE5PVCBhdHRlbXB0IHRvIHNlbmQgYWRkaXRpb25hbCBwYXJhbWV0ZXJzLiBJdCBpcyB1c2VkIGZvciB0aGUKK2dpdC1kYWVtb24gbmFtZSBiYXNlZCB2aXJ0dWFsIGhvc3RpbmcuICBTZWUgLS1pbnRlcnBvbGF0ZWQtcGF0aAorb3B0aW9uIHRvIGdpdCBkYWVtb24sIHdpdGggdGhlICVILyVDSCBmb3JtYXQgY2hhcmFjdGVycy4KKworQmFzaWNhbGx5IHdoYXQgdGhlIEdpdCBjbGllbnQgaXMgZG9pbmcgdG8gY29ubmVjdCB0byBhbiAndXBsb2FkLXBhY2snCitwcm9jZXNzIG9uIHRoZSBzZXJ2ZXIgc2lkZSBvdmVyIHRoZSBHaXQgcHJvdG9jb2wgaXMgdGhpczoKKworICAgJCBlY2hvIC1lIC1uIFwKKyAgICAgIjAwMzlnaXQtdXBsb2FkLXBhY2sgL3NjaGFjb24vZ2l0Ym9vay5naXRcMGhvc3Q9ZXhhbXBsZS5jb21cMCIgfAorICAgICBuYyAtdiBleGFtcGxlLmNvbSA5NDE4CisKK0lmIHRoZSBzZXJ2ZXIgcmVmdXNlcyB0aGUgcmVxdWVzdCBmb3Igc29tZSByZWFzb25zLCBpdCBjb3VsZCBhYm9ydAorZ3JhY2VmdWxseSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UuCisKKy0tLS0KKyAgZXJyb3ItbGluZSAgICAgPSAgUEtULUxJTkUoIkVSUiIgU1AgZXhwbGFuYXRpb24tdGV4dCkKKy0tLS0KKworCitTU0ggVHJhbnNwb3J0CistLS0tLS0tLS0tLS0tCisKK0luaXRpYXRpbmcgdGhlIHVwbG9hZC1wYWNrIG9yIHJlY2VpdmUtcGFjayBwcm9jZXNzZXMgb3ZlciBTU0ggaXMKK2V4ZWN1dGluZyB0aGUgYmluYXJ5IG9uIHRoZSBzZXJ2ZXIgdmlhIFNTSCByZW1vdGUgZXhlY3V0aW9uLgorSXQgaXMgYmFzaWNhbGx5IGVxdWl2YWxlbnQgdG8gcnVubmluZyB0aGlzOgorCisgICAkIHNzaCBnaXQuZXhhbXBsZS5jb20gImdpdC11cGxvYWQtcGFjayAnL3Byb2plY3QuZ2l0JyIKKworRm9yIGEgc2VydmVyIHRvIHN1cHBvcnQgR2l0IHB1c2hpbmcgYW5kIHB1bGxpbmcgZm9yIGEgZ2l2ZW4gdXNlciBvdmVyCitTU0gsIHRoYXQgdXNlciBuZWVkcyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgb25lIG9yIGJvdGggb2YgdGhvc2UKK2NvbW1hbmRzIHZpYSB0aGUgU1NIIHNoZWxsIHRoYXQgdGhleSBhcmUgcHJvdmlkZWQgb24gbG9naW4uICBPbiBzb21lCitzeXN0ZW1zLCB0aGF0IHNoZWxsIGFjY2VzcyBpcyBsaW1pdGVkIHRvIG9ubHkgYmVpbmcgYWJsZSB0byBydW4gdGhvc2UKK3R3byBjb21tYW5kcywgb3IgZXZlbiBqdXN0IG9uZSBvZiB0aGVtLgorCitJbiBhbiBzc2g6Ly8gZm9ybWF0IFVSSSwgaXQncyBhYnNvbHV0ZSBpbiB0aGUgVVJJLCBzbyB0aGUgJy8nIGFmdGVyCit0aGUgaG9zdCBuYW1lIChvciBwb3J0IG51bWJlcikgaXMgc2VudCBhcyBhbiBhcmd1bWVudCwgd2hpY2ggaXMgdGhlbgorcmVhZCBieSB0aGUgcmVtb3RlIGdpdC11cGxvYWQtcGFjayBleGFjdGx5IGFzIGlzLCBzbyBpdCdzIGVmZmVjdGl2ZWx5CithbiBhYnNvbHV0ZSBwYXRoIGluIHRoZSByZW1vdGUgZmlsZXN5c3RlbS4KKworICAgICAgIGdpdCBjbG9uZSBzc2g6Ly91c2VyQGV4YW1wbGUuY29tL3Byb2plY3QuZ2l0CisJCSAgICB8CisJCSAgICB2CisgICAgc3NoIHVzZXJAZXhhbXBsZS5jb20gImdpdC11cGxvYWQtcGFjayAnL3Byb2plY3QuZ2l0JyIKKworSW4gYSAidXNlckBob3N0OnBhdGgiIGZvcm1hdCBVUkksIGl0cyByZWxhdGl2ZSB0byB0aGUgdXNlcidzIGhvbWUKK2RpcmVjdG9yeSwgYmVjYXVzZSB0aGUgR2l0IGNsaWVudCB3aWxsIHJ1bjoKKworICAgICBnaXQgY2xvbmUgdXNlckBleGFtcGxlLmNvbTpwcm9qZWN0LmdpdAorCQkgICAgfAorCQkgICAgdgorICBzc2ggdXNlckBleGFtcGxlLmNvbSAiZ2l0LXVwbG9hZC1wYWNrICdwcm9qZWN0LmdpdCciCisKK1RoZSBleGNlcHRpb24gaXMgaWYgYSAnficgaXMgdXNlZCwgaW4gd2hpY2ggY2FzZQord2UgZXhlY3V0ZSBpdCB3aXRob3V0IHRoZSBsZWFkaW5nICcvJy4KKworICAgICAgc3NoOi8vdXNlckBleGFtcGxlLmNvbS9+YWxpY2UvcHJvamVjdC5naXQsCisJCSAgICAgfAorCQkgICAgIHYKKyAgIHNzaCB1c2VyQGV4YW1wbGUuY29tICJnaXQtdXBsb2FkLXBhY2sgJ35hbGljZS9wcm9qZWN0LmdpdCciCisKK0EgZmV3IHRoaW5ncyB0byByZW1lbWJlciBoZXJlOgorCistIFRoZSAiY29tbWFuZCBuYW1lIiBpcyBzcGVsbGVkIHdpdGggZGFzaCAoZS5nLiBnaXQtdXBsb2FkLXBhY2spLCBidXQKKyAgdGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY2xpZW50OworCistIFRoZSByZXBvc2l0b3J5IHBhdGggaXMgYWx3YXlzIHF1b3RlZCB3aXRoIHNpbmdsZSBxdW90ZXMuCisKK0ZldGNoaW5nIERhdGEgRnJvbSBhIFNlcnZlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gb25lIEdpdCByZXBvc2l0b3J5IHdhbnRzIHRvIGdldCBkYXRhIHRoYXQgYSBzZWNvbmQgcmVwb3NpdG9yeQoraGFzLCB0aGUgZmlyc3QgY2FuICdmZXRjaCcgZnJvbSB0aGUgc2Vjb25kLiAgVGhpcyBvcGVyYXRpb24gZGV0ZXJtaW5lcword2hhdCBkYXRhIHRoZSBzZXJ2ZXIgaGFzIHRoYXQgdGhlIGNsaWVudCBkb2VzIG5vdCB0aGVuIHN0cmVhbXMgdGhhdAorZGF0YSBkb3duIHRvIHRoZSBjbGllbnQgaW4gcGFja2ZpbGUgZm9ybWF0LgorCisKK1JlZmVyZW5jZSBEaXNjb3ZlcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB0aGUgY2xpZW50IGluaXRpYWxseSBjb25uZWN0cyB0aGUgc2VydmVyIHdpbGwgaW1tZWRpYXRlbHkgcmVzcG9uZAord2l0aCBhIGxpc3Rpbmcgb2YgZWFjaCByZWZlcmVuY2UgaXQgaGFzIChhbGwgYnJhbmNoZXMgYW5kIHRhZ3MpIGFsb25nCit3aXRoIHRoZSBvYmplY3QgbmFtZSB0aGF0IGVhY2ggcmVmZXJlbmNlIGN1cnJlbnRseSBwb2ludHMgdG8uCisKKyAgICQgZWNobyAtZSAtbiAiMDAzOWdpdC11cGxvYWQtcGFjayAvc2NoYWNvbi9naXRib29rLmdpdFwwaG9zdD1leGFtcGxlLmNvbVwwIiB8CisgICAgICBuYyAtdiBleGFtcGxlLmNvbSA5NDE4CisgICAwMDg4NzIxN2E3YzdlNTgyYzQ2Y2VjMjJhMTMwYWRmNGI5ZDdkOTUwZmJhMCBIRUFEXDBtdWx0aV9hY2sgdGhpbi1wYWNrCisJCXNpZGUtYmFuZCBzaWRlLWJhbmQtNjRrIG9mcy1kZWx0YSBzaGFsbG93IG5vLXByb2dyZXNzIGluY2x1ZGUtdGFnCisgICAwMDQ0MWQzZmNkNWNlZDQ0NWQxYWJjNDAyMjI1YzBiOGExMjk5NjQxZjQ5NyByZWZzL2hlYWRzL2ludGVncmF0aW9uCisgICAwMDNmNzIxN2E3YzdlNTgyYzQ2Y2VjMjJhMTMwYWRmNGI5ZDdkOTUwZmJhMCByZWZzL2hlYWRzL21hc3RlcgorICAgMDAzY2I4OGQyNDQxY2FjMDk3N2ZhZjk4ZWZjODAzMDUwMTIxMTIyMzhkOWQgcmVmcy90YWdzL3YwLjkKKyAgIDAwM2M1MjUxMjg0ODBiOTZjODllNjQxOGIxZTQwOTA5YmY2YzViMmQ1ODBmIHJlZnMvdGFncy92MS4wCisgICAwMDNmZTkyZGY0ODc0M2I3YmM3ZDI2YmNhYWJmZGRkZTBhMWUyMGNhZTQ3YyByZWZzL3RhZ3MvdjEuMF57fQorICAgMDAwMAorCitUaGUgcmV0dXJuZWQgcmVzcG9uc2UgaXMgYSBwa3QtbGluZSBzdHJlYW0gZGVzY3JpYmluZyBlYWNoIHJlZiBhbmQKK2l0cyBjdXJyZW50IHZhbHVlLiAgVGhlIHN0cmVhbSBNVVNUIGJlIHNvcnRlZCBieSBuYW1lIGFjY29yZGluZyB0bwordGhlIEMgbG9jYWxlIG9yZGVyaW5nLgorCitJZiBIRUFEIGlzIGEgdmFsaWQgcmVmLCBIRUFEIE1VU1QgYXBwZWFyIGFzIHRoZSBmaXJzdCBhZHZlcnRpc2VkCityZWYuICBJZiBIRUFEIGlzIG5vdCBhIHZhbGlkIHJlZiwgSEVBRCBNVVNUIE5PVCBhcHBlYXIgaW4gdGhlCithZHZlcnRpc2VtZW50IGxpc3QgYXQgYWxsLCBidXQgb3RoZXIgcmVmcyBtYXkgc3RpbGwgYXBwZWFyLgorCitUaGUgc3RyZWFtIE1VU1QgaW5jbHVkZSBjYXBhYmlsaXR5IGRlY2xhcmF0aW9ucyBiZWhpbmQgYSBOVUwgb24gdGhlCitmaXJzdCByZWYuIFRoZSBwZWVsZWQgdmFsdWUgb2YgYSByZWYgKHRoYXQgaXMgInJlZl57fSIpIE1VU1QgYmUKK2ltbWVkaWF0ZWx5IGFmdGVyIHRoZSByZWYgaXRzZWxmLCBpZiBwcmVzZW50ZWQuIEEgY29uZm9ybWluZyBzZXJ2ZXIKK01VU1QgcGVlbCB0aGUgcmVmIGlmIGl0J3MgYW4gYW5ub3RhdGVkIHRhZy4KKworLS0tLQorICBhZHZlcnRpc2VkLXJlZnMgID0gIChuby1yZWZzIC8gbGlzdC1vZi1yZWZzKQorCQkgICAgICAqc2hhbGxvdworCQkgICAgICBmbHVzaC1wa3QKKworICBuby1yZWZzICAgICAgICAgID0gIFBLVC1MSU5FKHplcm8taWQgU1AgImNhcGFiaWxpdGllc157fSIKKwkJICAgICAgTlVMIGNhcGFiaWxpdHktbGlzdCkKKworICBsaXN0LW9mLXJlZnMgICAgID0gIGZpcnN0LXJlZiAqb3RoZXItcmVmCisgIGZpcnN0LXJlZiAgICAgICAgPSAgUEtULUxJTkUob2JqLWlkIFNQIHJlZm5hbWUKKwkJICAgICAgTlVMIGNhcGFiaWxpdHktbGlzdCkKKworICBvdGhlci1yZWYgICAgICAgID0gIFBLVC1MSU5FKG90aGVyLXRpcCAvIG90aGVyLXBlZWxlZCkKKyAgb3RoZXItdGlwICAgICAgICA9ICBvYmotaWQgU1AgcmVmbmFtZQorICBvdGhlci1wZWVsZWQgICAgID0gIG9iai1pZCBTUCByZWZuYW1lICJee30iCisKKyAgc2hhbGxvdyAgICAgICAgICA9ICBQS1QtTElORSgic2hhbGxvdyIgU1Agb2JqLWlkKQorCisgIGNhcGFiaWxpdHktbGlzdCAgPSAgY2FwYWJpbGl0eSAqKFNQIGNhcGFiaWxpdHkpCisgIGNhcGFiaWxpdHkgICAgICAgPSAgMSooTENfQUxQSEEgLyBESUdJVCAvICItIiAvICJfIikKKyAgTENfQUxQSEEgICAgICAgICA9ICAleDYxLTdBCistLS0tCisKK1NlcnZlciBhbmQgY2xpZW50IE1VU1QgdXNlIGxvd2VyY2FzZSBmb3Igb2JqLWlkLCBib3RoIE1VU1QgdHJlYXQgb2JqLWlkCithcyBjYXNlLWluc2Vuc2l0aXZlLgorCitTZWUgcHJvdG9jb2wtY2FwYWJpbGl0aWVzLnR4dCBmb3IgYSBsaXN0IG9mIGFsbG93ZWQgc2VydmVyIGNhcGFiaWxpdGllcworYW5kIGRlc2NyaXB0aW9ucy4KKworUGFja2ZpbGUgTmVnb3RpYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitBZnRlciByZWZlcmVuY2UgYW5kIGNhcGFiaWxpdGllcyBkaXNjb3ZlcnksIHRoZSBjbGllbnQgY2FuIGRlY2lkZSB0bwordGVybWluYXRlIHRoZSBjb25uZWN0aW9uIGJ5IHNlbmRpbmcgYSBmbHVzaC1wa3QsIHRlbGxpbmcgdGhlIHNlcnZlciBpdCBjYW4KK25vdyBncmFjZWZ1bGx5IHRlcm1pbmF0ZSwgYW5kIGRpc2Nvbm5lY3QsIHdoZW4gaXQgZG9lcyBub3QgbmVlZCBhbnkgcGFjaworZGF0YS4gVGhpcyBjYW4gaGFwcGVuIHdpdGggdGhlIGxzLXJlbW90ZSBjb21tYW5kLCBhbmQgYWxzbyBjYW4gaGFwcGVuIHdoZW4KK3RoZSBjbGllbnQgYWxyZWFkeSBpcyB1cC10by1kYXRlLgorCitPdGhlcndpc2UsIGl0IGVudGVycyB0aGUgbmVnb3RpYXRpb24gcGhhc2UsIHdoZXJlIHRoZSBjbGllbnQgYW5kCitzZXJ2ZXIgZGV0ZXJtaW5lIHdoYXQgdGhlIG1pbmltYWwgcGFja2ZpbGUgbmVjZXNzYXJ5IGZvciB0cmFuc3BvcnQgaXMsCitieSB0ZWxsaW5nIHRoZSBzZXJ2ZXIgd2hhdCBvYmplY3RzIGl0IHdhbnRzLCBpdHMgc2hhbGxvdyBvYmplY3RzCisoaWYgYW55KSwgYW5kIHRoZSBtYXhpbXVtIGNvbW1pdCBkZXB0aCBpdCB3YW50cyAoaWYgYW55KS4gIFRoZSBjbGllbnQKK3dpbGwgYWxzbyBzZW5kIGEgbGlzdCBvZiB0aGUgY2FwYWJpbGl0aWVzIGl0IHdhbnRzIHRvIGJlIGluIGVmZmVjdCwKK291dCBvZiB3aGF0IHRoZSBzZXJ2ZXIgc2FpZCBpdCBjb3VsZCBkbyB3aXRoIHRoZSBmaXJzdCAnd2FudCcgbGluZS4KKworLS0tLQorICB1cGxvYWQtcmVxdWVzdCAgICA9ICB3YW50LWxpc3QKKwkJICAgICAgICpzaGFsbG93LWxpbmUKKwkJICAgICAgICoxZGVwdGgtcmVxdWVzdAorCQkgICAgICAgZmx1c2gtcGt0CisKKyAgd2FudC1saXN0ICAgICAgICAgPSAgZmlyc3Qtd2FudAorCQkgICAgICAgKmFkZGl0aW9uYWwtd2FudAorCisgIHNoYWxsb3ctbGluZSAgICAgID0gIFBLVC1MSU5FKCJzaGFsbG93IiBTUCBvYmotaWQpCisKKyAgZGVwdGgtcmVxdWVzdCAgICAgPSAgUEtULUxJTkUoImRlZXBlbiIgU1AgZGVwdGgpCisKKyAgZmlyc3Qtd2FudCAgICAgICAgPSAgUEtULUxJTkUoIndhbnQiIFNQIG9iai1pZCBTUCBjYXBhYmlsaXR5LWxpc3QpCisgIGFkZGl0aW9uYWwtd2FudCAgID0gIFBLVC1MSU5FKCJ3YW50IiBTUCBvYmotaWQpCisKKyAgZGVwdGggICAgICAgICAgICAgPSAgMSpESUdJVAorLS0tLQorCitDbGllbnRzIE1VU1Qgc2VuZCBhbGwgdGhlIG9iai1pZHMgaXQgd2FudHMgZnJvbSB0aGUgcmVmZXJlbmNlCitkaXNjb3ZlcnkgcGhhc2UgYXMgJ3dhbnQnIGxpbmVzLiBDbGllbnRzIE1VU1Qgc2VuZCBhdCBsZWFzdCBvbmUKKyd3YW50JyBjb21tYW5kIGluIHRoZSByZXF1ZXN0IGJvZHkuIENsaWVudHMgTVVTVCBOT1QgbWVudGlvbiBhbgorb2JqLWlkIGluIGEgJ3dhbnQnIGNvbW1hbmQgd2hpY2ggZGlkIG5vdCBhcHBlYXIgaW4gdGhlIHJlc3BvbnNlCitvYnRhaW5lZCB0aHJvdWdoIHJlZiBkaXNjb3ZlcnkuCisKK1RoZSBjbGllbnQgTVVTVCB3cml0ZSBhbGwgb2JqLWlkcyB3aGljaCBpdCBvbmx5IGhhcyBzaGFsbG93IGNvcGllcworb2YgKG1lYW5pbmcgdGhhdCBpdCBkb2VzIG5vdCBoYXZlIHRoZSBwYXJlbnRzIG9mIGEgY29tbWl0KSBhcworJ3NoYWxsb3cnIGxpbmVzIHNvIHRoYXQgdGhlIHNlcnZlciBpcyBhd2FyZSBvZiB0aGUgbGltaXRhdGlvbnMgb2YKK3RoZSBjbGllbnQncyBoaXN0b3J5LgorCitUaGUgY2xpZW50IG5vdyBzZW5kcyB0aGUgbWF4aW11bSBjb21taXQgaGlzdG9yeSBkZXB0aCBpdCB3YW50cyBmb3IKK3RoaXMgdHJhbnNhY3Rpb24sIHdoaWNoIGlzIHRoZSBudW1iZXIgb2YgY29tbWl0cyBpdCB3YW50cyBmcm9tIHRoZQordGlwIG9mIHRoZSBoaXN0b3J5LCBpZiBhbnksIGFzIGEgJ2RlZXBlbicgbGluZS4gIEEgZGVwdGggb2YgMCBpcyB0aGUKK3NhbWUgYXMgbm90IG1ha2luZyBhIGRlcHRoIHJlcXVlc3QuIFRoZSBjbGllbnQgZG9lcyBub3Qgd2FudCB0byByZWNlaXZlCithbnkgY29tbWl0cyBiZXlvbmQgdGhpcyBkZXB0aCwgbm9yIGRvZXMgaXQgd2FudCBvYmplY3RzIG5lZWRlZCBvbmx5IHRvCitjb21wbGV0ZSB0aG9zZSBjb21taXRzLiBDb21taXRzIHdob3NlIHBhcmVudHMgYXJlIG5vdCByZWNlaXZlZCBhcyBhCityZXN1bHQgYXJlIGRlZmluZWQgYXMgc2hhbGxvdyBhbmQgbWFya2VkIGFzIHN1Y2ggaW4gdGhlIHNlcnZlci4gVGhpcworaW5mb3JtYXRpb24gaXMgc2VudCBiYWNrIHRvIHRoZSBjbGllbnQgaW4gdGhlIG5leHQgc3RlcC4KKworT25jZSBhbGwgdGhlICd3YW50J3MgYW5kICdzaGFsbG93J3MgKGFuZCBvcHRpb25hbCAnZGVlcGVuJykgYXJlCit0cmFuc2ZlcnJlZCwgY2xpZW50cyBNVVNUIHNlbmQgYSBmbHVzaC1wa3QsIHRvIHRlbGwgdGhlIHNlcnZlciBzaWRlCit0aGF0IGl0IGlzIGRvbmUgc2VuZGluZyB0aGUgbGlzdC4KKworT3RoZXJ3aXNlLCBpZiB0aGUgY2xpZW50IHNlbnQgYSBwb3NpdGl2ZSBkZXB0aCByZXF1ZXN0LCB0aGUgc2VydmVyCit3aWxsIGRldGVybWluZSB3aGljaCBjb21taXRzIHdpbGwgYW5kIHdpbGwgbm90IGJlIHNoYWxsb3cgYW5kCitzZW5kIHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNsaWVudC4gSWYgdGhlIGNsaWVudCBkaWQgbm90IHJlcXVlc3QKK2EgcG9zaXRpdmUgZGVwdGgsIHRoaXMgc3RlcCBpcyBza2lwcGVkLgorCistLS0tCisgIHNoYWxsb3ctdXBkYXRlICAgPSAgKnNoYWxsb3ctbGluZQorCQkgICAgICAqdW5zaGFsbG93LWxpbmUKKwkJICAgICAgZmx1c2gtcGt0CisKKyAgc2hhbGxvdy1saW5lICAgICA9ICBQS1QtTElORSgic2hhbGxvdyIgU1Agb2JqLWlkKQorCisgIHVuc2hhbGxvdy1saW5lICAgPSAgUEtULUxJTkUoInVuc2hhbGxvdyIgU1Agb2JqLWlkKQorLS0tLQorCitJZiB0aGUgY2xpZW50IGhhcyByZXF1ZXN0ZWQgYSBwb3NpdGl2ZSBkZXB0aCwgdGhlIHNlcnZlciB3aWxsIGNvbXB1dGUKK3RoZSBzZXQgb2YgY29tbWl0cyB3aGljaCBhcmUgbm8gZGVlcGVyIHRoYW4gdGhlIGRlc2lyZWQgZGVwdGguIFRoZSBzZXQKK29mIGNvbW1pdHMgc3RhcnQgYXQgdGhlIGNsaWVudCdzIHdhbnRzLgorCitUaGUgc2VydmVyIHdyaXRlcyAnc2hhbGxvdycgbGluZXMgZm9yIGVhY2gKK2NvbW1pdCB3aG9zZSBwYXJlbnRzIHdpbGwgbm90IGJlIHNlbnQgYXMgYSByZXN1bHQuIFRoZSBzZXJ2ZXIgd3JpdGVzCithbiAndW5zaGFsbG93JyBsaW5lIGZvciBlYWNoIGNvbW1pdCB3aGljaCB0aGUgY2xpZW50IGhhcyBpbmRpY2F0ZWQgaXMKK3NoYWxsb3csIGJ1dCBpcyBubyBsb25nZXIgc2hhbGxvdyBhdCB0aGUgY3VycmVudGx5IHJlcXVlc3RlZCBkZXB0aAorKHRoYXQgaXMsIGl0cyBwYXJlbnRzIHdpbGwgbm93IGJlIHNlbnQpLiBUaGUgc2VydmVyIE1VU1QgTk9UIG1hcmsKK2FzIHVuc2hhbGxvdyBhbnl0aGluZyB3aGljaCB0aGUgY2xpZW50IGhhcyBub3QgaW5kaWNhdGVkIHdhcyBzaGFsbG93LgorCitOb3cgdGhlIGNsaWVudCB3aWxsIHNlbmQgYSBsaXN0IG9mIHRoZSBvYmotaWRzIGl0IGhhcyB1c2luZyAnaGF2ZScKK2xpbmVzLCBzbyB0aGUgc2VydmVyIGNhbiBtYWtlIGEgcGFja2ZpbGUgdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBvYmplY3RzCit0aGF0IHRoZSBjbGllbnQgbmVlZHMuIEluIG11bHRpX2FjayBtb2RlLCB0aGUgY2Fub25pY2FsIGltcGxlbWVudGF0aW9uCit3aWxsIHNlbmQgdXAgdG8gMzIgb2YgdGhlc2UgYXQgYSB0aW1lLCB0aGVuIHdpbGwgc2VuZCBhIGZsdXNoLXBrdC4gVGhlCitjYW5vbmljYWwgaW1wbGVtZW50YXRpb24gd2lsbCBza2lwIGFoZWFkIGFuZCBzZW5kIHRoZSBuZXh0IDMyIGltbWVkaWF0ZWx5LAorc28gdGhhdCB0aGVyZSBpcyBhbHdheXMgYSBibG9jayBvZiAzMiAiaW4tZmxpZ2h0IG9uIHRoZSB3aXJlIiBhdCBhIHRpbWUuCisKKy0tLS0KKyAgdXBsb2FkLWhhdmVzICAgICAgPSAgaGF2ZS1saXN0CisJCSAgICAgICBjb21wdXRlLWVuZAorCisgIGhhdmUtbGlzdCAgICAgICAgID0gICpoYXZlLWxpbmUKKyAgaGF2ZS1saW5lICAgICAgICAgPSAgUEtULUxJTkUoImhhdmUiIFNQIG9iai1pZCkKKyAgY29tcHV0ZS1lbmQgICAgICAgPSAgZmx1c2gtcGt0IC8gUEtULUxJTkUoImRvbmUiKQorLS0tLQorCitJZiB0aGUgc2VydmVyIHJlYWRzICdoYXZlJyBsaW5lcywgaXQgdGhlbiB3aWxsIHJlc3BvbmQgYnkgQUNLaW5nIGFueQorb2YgdGhlIG9iai1pZHMgdGhlIGNsaWVudCBzYWlkIGl0IGhhZCB0aGF0IHRoZSBzZXJ2ZXIgYWxzbyBoYXMuIFRoZQorc2VydmVyIHdpbGwgQUNLIG9iai1pZHMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHdoaWNoIGFjayBtb2RlIGlzCitjaG9zZW4gYnkgdGhlIGNsaWVudC4KKworSW4gbXVsdGlfYWNrIG1vZGU6CisKKyAgKiB0aGUgc2VydmVyIHdpbGwgcmVzcG9uZCB3aXRoICdBQ0sgb2JqLWlkIGNvbnRpbnVlJyBmb3IgYW55IGNvbW1vbgorICAgIGNvbW1pdHMuCisKKyAgKiBvbmNlIHRoZSBzZXJ2ZXIgaGFzIGZvdW5kIGFuIGFjY2VwdGFibGUgY29tbW9uIGJhc2UgY29tbWl0IGFuZCBpcworICAgIHJlYWR5IHRvIG1ha2UgYSBwYWNrZmlsZSwgaXQgd2lsbCBibGluZGx5IEFDSyBhbGwgJ2hhdmUnIG9iai1pZHMKKyAgICBiYWNrIHRvIHRoZSBjbGllbnQuCisKKyAgKiB0aGUgc2VydmVyIHdpbGwgdGhlbiBzZW5kIGEgJ05BQ0snIGFuZCB0aGVuIHdhaXQgZm9yIGFub3RoZXIgcmVzcG9uc2UKKyAgICBmcm9tIHRoZSBjbGllbnQgLSBlaXRoZXIgYSAnZG9uZScgb3IgYW5vdGhlciBsaXN0IG9mICdoYXZlJyBsaW5lcy4KKworSW4gbXVsdGlfYWNrX2RldGFpbGVkIG1vZGU6CisKKyAgKiB0aGUgc2VydmVyIHdpbGwgZGlmZmVyZW50aWF0ZSB0aGUgQUNLcyB3aGVyZSBpdCBpcyBzaWduYWxpbmcKKyAgICB0aGF0IGl0IGlzIHJlYWR5IHRvIHNlbmQgZGF0YSB3aXRoICdBQ0sgb2JqLWlkIHJlYWR5JyBsaW5lcywgYW5kCisgICAgc2lnbmFscyB0aGUgaWRlbnRpZmllZCBjb21tb24gY29tbWl0cyB3aXRoICdBQ0sgb2JqLWlkIGNvbW1vbicgbGluZXMuCisKK1dpdGhvdXQgZWl0aGVyIG11bHRpX2FjayBvciBtdWx0aV9hY2tfZGV0YWlsZWQ6CisKKyAqIHVwbG9hZC1wYWNrIHNlbmRzICJBQ0sgb2JqLWlkIiBvbiB0aGUgZmlyc3QgY29tbW9uIG9iamVjdCBpdCBmaW5kcy4KKyAgIEFmdGVyIHRoYXQgaXQgc2F5cyBub3RoaW5nIHVudGlsIHRoZSBjbGllbnQgZ2l2ZXMgaXQgYSAiZG9uZSIuCisKKyAqIHVwbG9hZC1wYWNrIHNlbmRzICJOQUsiIG9uIGEgZmx1c2gtcGt0IGlmIG5vIGNvbW1vbiBvYmplY3QKKyAgIGhhcyBiZWVuIGZvdW5kIHlldC4gIElmIG9uZSBoYXMgYmVlbiBmb3VuZCwgYW5kIHRodXMgYW4gQUNLCisgICB3YXMgYWxyZWFkeSBzZW50LCBpdCdzIHNpbGVudCBvbiB0aGUgZmx1c2gtcGt0LgorCitBZnRlciB0aGUgY2xpZW50IGhhcyBnb3R0ZW4gZW5vdWdoIEFDSyByZXNwb25zZXMgdGhhdCBpdCBjYW4gZGV0ZXJtaW5lCit0aGF0IHRoZSBzZXJ2ZXIgaGFzIGVub3VnaCBpbmZvcm1hdGlvbiB0byBzZW5kIGFuIGVmZmljaWVudCBwYWNrZmlsZQorKGluIHRoZSBjYW5vbmljYWwgaW1wbGVtZW50YXRpb24sIHRoaXMgaXMgZGV0ZXJtaW5lZCB3aGVuIGl0IGhhcyByZWNlaXZlZAorZW5vdWdoIEFDS3MgdGhhdCBpdCBjYW4gY29sb3IgZXZlcnl0aGluZyBsZWZ0IGluIHRoZSAtLWRhdGUtb3JkZXIgcXVldWUKK2FzIGNvbW1vbiB3aXRoIHRoZSBzZXJ2ZXIsIG9yIHRoZSAtLWRhdGUtb3JkZXIgcXVldWUgaXMgZW1wdHkpLCBvciB0aGUKK2NsaWVudCBkZXRlcm1pbmVzIHRoYXQgaXQgd2FudHMgdG8gZ2l2ZSB1cCAoaW4gdGhlIGNhbm9uaWNhbCBpbXBsZW1lbnRhdGlvbiwKK3RoaXMgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSBjbGllbnQgc2VuZHMgMjU2ICdoYXZlJyBsaW5lcyB3aXRob3V0IGdldHRpbmcKK2FueSBvZiB0aGVtIEFDS2VkIGJ5IHRoZSBzZXJ2ZXIgLSBtZWFuaW5nIHRoZXJlIGlzIG5vdGhpbmcgaW4gY29tbW9uIGFuZAordGhlIHNlcnZlciBzaG91bGQganVzdCBzZW5kIGFsbCBvZiBpdHMgb2JqZWN0cyksIHRoZW4gdGhlIGNsaWVudCB3aWxsIHNlbmQKK2EgJ2RvbmUnIGNvbW1hbmQuICBUaGUgJ2RvbmUnIGNvbW1hbmQgc2lnbmFscyB0byB0aGUgc2VydmVyIHRoYXQgdGhlIGNsaWVudAoraXMgcmVhZHkgdG8gcmVjZWl2ZSBpdHMgcGFja2ZpbGUgZGF0YS4KKworSG93ZXZlciwgdGhlIDI1NiBsaW1pdCAqb25seSogdHVybnMgb24gaW4gdGhlIGNhbm9uaWNhbCBjbGllbnQKK2ltcGxlbWVudGF0aW9uIGlmIHdlIGhhdmUgcmVjZWl2ZWQgYXQgbGVhc3Qgb25lICJBQ0sgJXMgY29udGludWUiCitkdXJpbmcgYSBwcmlvciByb3VuZC4gIFRoaXMgaGVscHMgdG8gZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGNvbW1vbgorYW5jZXN0b3IgaXMgZm91bmQgYmVmb3JlIHdlIGdpdmUgdXAgZW50aXJlbHkuCisKK09uY2UgdGhlICdkb25lJyBsaW5lIGlzIHJlYWQgZnJvbSB0aGUgY2xpZW50LCB0aGUgc2VydmVyIHdpbGwgZWl0aGVyCitzZW5kIGEgZmluYWwgJ0FDSyBvYmotaWQnIG9yIGl0IHdpbGwgc2VuZCBhICdOQUsnLiAnb2JqLWlkJyBpcyB0aGUgb2JqZWN0CituYW1lIG9mIHRoZSBsYXN0IGNvbW1pdCBkZXRlcm1pbmVkIHRvIGJlIGNvbW1vbi4gVGhlIHNlcnZlciBvbmx5IHNlbmRzCitBQ0sgYWZ0ZXIgJ2RvbmUnIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjb21tb24gYmFzZSBhbmQgbXVsdGlfYWNrIG9yCittdWx0aV9hY2tfZGV0YWlsZWQgaXMgZW5hYmxlZC4gVGhlIHNlcnZlciBhbHdheXMgc2VuZHMgTkFLIGFmdGVyICdkb25lJworaWYgdGhlcmUgaXMgbm8gY29tbW9uIGJhc2UgZm91bmQuCisKK1RoZW4gdGhlIHNlcnZlciB3aWxsIHN0YXJ0IHNlbmRpbmcgaXRzIHBhY2tmaWxlIGRhdGEuCisKKy0tLS0KKyAgc2VydmVyLXJlc3BvbnNlID0gKmFja19tdWx0aSBhY2sgLyBuYWsKKyAgYWNrX211bHRpICAgICAgID0gUEtULUxJTkUoIkFDSyIgU1Agb2JqLWlkIGFja19zdGF0dXMpCisgIGFja19zdGF0dXMgICAgICA9ICJjb250aW51ZSIgLyAiY29tbW9uIiAvICJyZWFkeSIKKyAgYWNrICAgICAgICAgICAgID0gUEtULUxJTkUoIkFDSyIgU1Agb2JqLWlkKQorICBuYWsgICAgICAgICAgICAgPSBQS1QtTElORSgiTkFLIikKKy0tLS0KKworQSBzaW1wbGUgY2xvbmUgbWF5IGxvb2sgbGlrZSB0aGlzICh3aXRoIG5vICdoYXZlJyBsaW5lcyk6CisKKy0tLS0KKyAgIEM6IDAwNTR3YW50IDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgbXVsdGlfYWNrIFwKKyAgICAgc2lkZS1iYW5kLTY0ayBvZnMtZGVsdGFcbgorICAgQzogMDAzMndhbnQgN2QxNjY1MTQ0YTNhOTc1YzA1ZjFmNDM5MDJkZGFmMDg0ZTc4NGRiZVxuCisgICBDOiAwMDMyd2FudCA1YTNmNmJlNzU1YmJiN2RlYWU1MDA2NTk4OGNiZmExZmZhOWFiNjhhXG4KKyAgIEM6IDAwMzJ3YW50IDdlNDdmZTJiZDhkMDFkNDgxZjQ0ZDdhZjA1MzFiZDkzZDNiMjFjMDFcbgorICAgQzogMDAzMndhbnQgNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZFxuCisgICBDOiAwMDAwCisgICBDOiAwMDA5ZG9uZVxuCisKKyAgIFM6IDAwMDhOQUtcbgorICAgUzogW1BBQ0tGSUxFXQorLS0tLQorCitBbiBpbmNyZW1lbnRhbCB1cGRhdGUgKGZldGNoKSByZXNwb25zZSBtaWdodCBsb29rIGxpa2UgdGhpczoKKworLS0tLQorICAgQzogMDA1NHdhbnQgNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCBtdWx0aV9hY2sgXAorICAgICBzaWRlLWJhbmQtNjRrIG9mcy1kZWx0YVxuCisgICBDOiAwMDMyd2FudCA3ZDE2NjUxNDRhM2E5NzVjMDVmMWY0MzkwMmRkYWYwODRlNzg0ZGJlXG4KKyAgIEM6IDAwMzJ3YW50IDVhM2Y2YmU3NTViYmI3ZGVhZTUwMDY1OTg4Y2JmYTFmZmE5YWI2OGFcbgorICAgQzogMDAwMAorICAgQzogMDAzMmhhdmUgN2U0N2ZlMmJkOGQwMWQ0ODFmNDRkN2FmMDUzMWJkOTNkM2IyMWMwMVxuCisgICBDOiBbMzAgbW9yZSBoYXZlIGxpbmVzXQorICAgQzogMDAzMmhhdmUgNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZFxuCisgICBDOiAwMDAwCisKKyAgIFM6IDAwM2FBQ0sgN2U0N2ZlMmJkOGQwMWQ0ODFmNDRkN2FmMDUzMWJkOTNkM2IyMWMwMSBjb250aW51ZVxuCisgICBTOiAwMDNhQUNLIDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgY29udGludWVcbgorICAgUzogMDAwOE5BS1xuCisKKyAgIEM6IDAwMDlkb25lXG4KKworICAgUzogMDAzMUFDSyA3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkXG4KKyAgIFM6IFtQQUNLRklMRV0KKy0tLS0KKworCitQYWNrZmlsZSBEYXRhCistLS0tLS0tLS0tLS0tCisKK05vdyB0aGF0IHRoZSBjbGllbnQgYW5kIHNlcnZlciBoYXZlIGZpbmlzaGVkIG5lZ290aWF0aW9uIGFib3V0IHdoYXQKK3RoZSBtaW5pbWFsIGFtb3VudCBvZiBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgc2VudCB0byB0aGUgY2xpZW50IGlzLCB0aGUgc2VydmVyCit3aWxsIGNvbnN0cnVjdCBhbmQgc2VuZCB0aGUgcmVxdWlyZWQgZGF0YSBpbiBwYWNrZmlsZSBmb3JtYXQuCisKK1NlZSBwYWNrLWZvcm1hdC50eHQgZm9yIHdoYXQgdGhlIHBhY2tmaWxlIGl0c2VsZiBhY3R1YWxseSBsb29rcyBsaWtlLgorCitJZiAnc2lkZS1iYW5kJyBvciAnc2lkZS1iYW5kLTY0aycgY2FwYWJpbGl0aWVzIGhhdmUgYmVlbiBzcGVjaWZpZWQgYnkKK3RoZSBjbGllbnQsIHRoZSBzZXJ2ZXIgd2lsbCBzZW5kIHRoZSBwYWNrZmlsZSBkYXRhIG11bHRpcGxleGVkLgorCitFYWNoIHBhY2tldCBzdGFydGluZyB3aXRoIHRoZSBwYWNrZXQtbGluZSBsZW5ndGggb2YgdGhlIGFtb3VudCBvZiBkYXRhCit0aGF0IGZvbGxvd3MsIGZvbGxvd2VkIGJ5IGEgc2luZ2xlIGJ5dGUgc3BlY2lmeWluZyB0aGUgc2lkZWJhbmQgdGhlCitmb2xsb3dpbmcgZGF0YSBpcyBjb21pbmcgaW4gb24uCisKK0luICdzaWRlLWJhbmQnIG1vZGUsIGl0IHdpbGwgc2VuZCB1cCB0byA5OTkgZGF0YSBieXRlcyBwbHVzIDEgY29udHJvbAorY29kZSwgZm9yIGEgdG90YWwgb2YgdXAgdG8gMTAwMCBieXRlcyBpbiBhIHBrdC1saW5lLiAgSW4gJ3NpZGUtYmFuZC02NGsnCittb2RlIGl0IHdpbGwgc2VuZCB1cCB0byA2NTUxOSBkYXRhIGJ5dGVzIHBsdXMgMSBjb250cm9sIGNvZGUsIGZvciBhCit0b3RhbCBvZiB1cCB0byA2NTUyMCBieXRlcyBpbiBhIHBrdC1saW5lLgorCitUaGUgc2lkZWJhbmQgYnl0ZSB3aWxsIGJlIGEgJzEnLCAnMicgb3IgYSAnMycuIFNpZGViYW5kICcxJyB3aWxsIGNvbnRhaW4KK3BhY2tmaWxlIGRhdGEsIHNpZGViYW5kICcyJyB3aWxsIGJlIHVzZWQgZm9yIHByb2dyZXNzIGluZm9ybWF0aW9uIHRoYXQgdGhlCitjbGllbnQgd2lsbCBnZW5lcmFsbHkgcHJpbnQgdG8gc3RkZXJyIGFuZCBzaWRlYmFuZCAnMycgaXMgdXNlZCBmb3IgZXJyb3IKK2luZm9ybWF0aW9uLgorCitJZiBubyAnc2lkZS1iYW5kJyBjYXBhYmlsaXR5IHdhcyBzcGVjaWZpZWQsIHRoZSBzZXJ2ZXIgd2lsbCBzdHJlYW0gdGhlCitlbnRpcmUgcGFja2ZpbGUgd2l0aG91dCBtdWx0aXBsZXhpbmcuCisKKworUHVzaGluZyBEYXRhIFRvIGEgU2VydmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHVzaGluZyBkYXRhIHRvIGEgc2VydmVyIHdpbGwgaW52b2tlIHRoZSAncmVjZWl2ZS1wYWNrJyBwcm9jZXNzIG9uIHRoZQorc2VydmVyLCB3aGljaCB3aWxsIGFsbG93IHRoZSBjbGllbnQgdG8gdGVsbCBpdCB3aGljaCByZWZlcmVuY2VzIGl0IHNob3VsZAordXBkYXRlIGFuZCB0aGVuIHNlbmQgYWxsIHRoZSBkYXRhIHRoZSBzZXJ2ZXIgd2lsbCBuZWVkIGZvciB0aG9zZSBuZXcKK3JlZmVyZW5jZXMgdG8gYmUgY29tcGxldGUuICBPbmNlIGFsbCB0aGUgZGF0YSBpcyByZWNlaXZlZCBhbmQgdmFsaWRhdGVkLAordGhlIHNlcnZlciB3aWxsIHRoZW4gdXBkYXRlIGl0cyByZWZlcmVuY2VzIHRvIHdoYXQgdGhlIGNsaWVudCBzcGVjaWZpZWQuCisKK0F1dGhlbnRpY2F0aW9uCistLS0tLS0tLS0tLS0tLQorCitUaGUgcHJvdG9jb2wgaXRzZWxmIGNvbnRhaW5zIG5vIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMuICBUaGF0IGlzIHRvIGJlCitoYW5kbGVkIGJ5IHRoZSB0cmFuc3BvcnQsIHN1Y2ggYXMgU1NILCBiZWZvcmUgdGhlICdyZWNlaXZlLXBhY2snIHByb2Nlc3MgaXMKK2ludm9rZWQuICBJZiAncmVjZWl2ZS1wYWNrJyBpcyBjb25maWd1cmVkIG92ZXIgdGhlIEdpdCB0cmFuc3BvcnQsIHRob3NlCityZXBvc2l0b3JpZXMgd2lsbCBiZSB3cml0YWJsZSBieSBhbnlvbmUgd2hvIGNhbiBhY2Nlc3MgdGhhdCBwb3J0ICg5NDE4KSBhcwordGhhdCB0cmFuc3BvcnQgaXMgdW5hdXRoZW50aWNhdGVkLgorCitSZWZlcmVuY2UgRGlzY292ZXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZWZlcmVuY2UgZGlzY292ZXJ5IHBoYXNlIGlzIGRvbmUgbmVhcmx5IHRoZSBzYW1lIHdheSBhcyBpdCBpcyBpbiB0aGUKK2ZldGNoaW5nIHByb3RvY29sLiBFYWNoIHJlZmVyZW5jZSBvYmotaWQgYW5kIG5hbWUgb24gdGhlIHNlcnZlciBpcyBzZW50CitpbiBwYWNrZXQtbGluZSBmb3JtYXQgdG8gdGhlIGNsaWVudCwgZm9sbG93ZWQgYnkgYSBmbHVzaC1wa3QuICBUaGUgb25seQorcmVhbCBkaWZmZXJlbmNlIGlzIHRoYXQgdGhlIGNhcGFiaWxpdHkgbGlzdGluZyBpcyBkaWZmZXJlbnQgLSB0aGUgb25seQorcG9zc2libGUgdmFsdWVzIGFyZSAncmVwb3J0LXN0YXR1cycsICdkZWxldGUtcmVmcycgYW5kICdvZnMtZGVsdGEnLgorCitSZWZlcmVuY2UgVXBkYXRlIFJlcXVlc3QgYW5kIFBhY2tmaWxlIFRyYW5zZmVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uY2UgdGhlIGNsaWVudCBrbm93cyB3aGF0IHJlZmVyZW5jZXMgdGhlIHNlcnZlciBpcyBhdCwgaXQgY2FuIHNlbmQgYQorbGlzdCBvZiByZWZlcmVuY2UgdXBkYXRlIHJlcXVlc3RzLiAgRm9yIGVhY2ggcmVmZXJlbmNlIG9uIHRoZSBzZXJ2ZXIKK3RoYXQgaXQgd2FudHMgdG8gdXBkYXRlLCBpdCBzZW5kcyBhIGxpbmUgbGlzdGluZyB0aGUgb2JqLWlkIGN1cnJlbnRseSBvbgordGhlIHNlcnZlciwgdGhlIG9iai1pZCB0aGUgY2xpZW50IHdvdWxkIGxpa2UgdG8gdXBkYXRlIGl0IHRvIGFuZCB0aGUgbmFtZQorb2YgdGhlIHJlZmVyZW5jZS4KKworVGhpcyBsaXN0IGlzIGZvbGxvd2VkIGJ5IGEgZmx1c2gtcGt0IGFuZCB0aGVuIHRoZSBwYWNrZmlsZSB0aGF0IHNob3VsZAorY29udGFpbiBhbGwgdGhlIG9iamVjdHMgdGhhdCB0aGUgc2VydmVyIHdpbGwgbmVlZCB0byBjb21wbGV0ZSB0aGUgbmV3CityZWZlcmVuY2VzLgorCistLS0tCisgIHVwZGF0ZS1yZXF1ZXN0ICAgID0gICpzaGFsbG93ICggY29tbWFuZC1saXN0IHwgcHVzaC1jZXJ0ICkgW3BhY2tmaWxlXQorCisgIHNoYWxsb3cgICAgICAgICAgID0gIFBLVC1MSU5FKCJzaGFsbG93IiBTUCBvYmotaWQpCisKKyAgY29tbWFuZC1saXN0ICAgICAgPSAgUEtULUxJTkUoY29tbWFuZCBOVUwgY2FwYWJpbGl0eS1saXN0KQorCQkgICAgICAgKlBLVC1MSU5FKGNvbW1hbmQpCisJCSAgICAgICBmbHVzaC1wa3QKKworICBjb21tYW5kICAgICAgICAgICA9ICBjcmVhdGUgLyBkZWxldGUgLyB1cGRhdGUKKyAgY3JlYXRlICAgICAgICAgICAgPSAgemVyby1pZCBTUCBuZXctaWQgIFNQIG5hbWUKKyAgZGVsZXRlICAgICAgICAgICAgPSAgb2xkLWlkICBTUCB6ZXJvLWlkIFNQIG5hbWUKKyAgdXBkYXRlICAgICAgICAgICAgPSAgb2xkLWlkICBTUCBuZXctaWQgIFNQIG5hbWUKKworICBvbGQtaWQgICAgICAgICAgICA9ICBvYmotaWQKKyAgbmV3LWlkICAgICAgICAgICAgPSAgb2JqLWlkCisKKyAgcHVzaC1jZXJ0ICAgICAgICAgPSBQS1QtTElORSgicHVzaC1jZXJ0IiBOVUwgY2FwYWJpbGl0eS1saXN0IExGKQorCQkgICAgICBQS1QtTElORSgiY2VydGlmaWNhdGUgdmVyc2lvbiAwLjEiIExGKQorCQkgICAgICBQS1QtTElORSgicHVzaGVyIiBTUCBpZGVudCBMRikKKwkJICAgICAgUEtULUxJTkUoInB1c2hlZSIgU1AgdXJsIExGKQorCQkgICAgICBQS1QtTElORSgibm9uY2UiIFNQIG5vbmNlIExGKQorCQkgICAgICBQS1QtTElORShMRikKKwkJICAgICAgKlBLVC1MSU5FKGNvbW1hbmQgTEYpCisJCSAgICAgICpQS1QtTElORShncGctc2lnbmF0dXJlLWxpbmVzIExGKQorCQkgICAgICBQS1QtTElORSgicHVzaC1jZXJ0LWVuZCIgTEYpCisKKyAgcGFja2ZpbGUgICAgICAgICAgPSAiUEFDSyIgMjgqKE9DVEVUKQorLS0tLQorCitJZiB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IGRlbGV0ZS1yZWZzLCB0aGUgc2VuZGluZyBlbmQgTVVTVAorTk9UIGFzayBmb3IgZGVsZXRlIGNvbW1hbmQuCisKK0lmIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgcHVzaC1jZXJ0LCB0aGUgc2VuZGluZyBlbmQKK01VU1QgTk9UIHNlbmQgYSBwdXNoLWNlcnQgY29tbWFuZC4gIFdoZW4gYSBwdXNoLWNlcnQgY29tbWFuZCBpcworc2VudCwgY29tbWFuZC1saXN0IE1VU1QgTk9UIGJlIHNlbnQ7IHRoZSBjb21tYW5kcyByZWNvcmRlZCBpbiB0aGUKK3B1c2ggY2VydGlmaWNhdGUgaXMgdXNlZCBpbnN0ZWFkLgorCitUaGUgcGFja2ZpbGUgTVVTVCBOT1QgYmUgc2VudCBpZiB0aGUgb25seSBjb21tYW5kIHVzZWQgaXMgJ2RlbGV0ZScuCisKK0EgcGFja2ZpbGUgTVVTVCBiZSBzZW50IGlmIGVpdGhlciBjcmVhdGUgb3IgdXBkYXRlIGNvbW1hbmQgaXMgdXNlZCwKK2V2ZW4gaWYgdGhlIHNlcnZlciBhbHJlYWR5IGhhcyBhbGwgdGhlIG5lY2Vzc2FyeSBvYmplY3RzLiAgSW4gdGhpcworY2FzZSB0aGUgY2xpZW50IE1VU1Qgc2VuZCBhbiBlbXB0eSBwYWNrZmlsZS4gICBUaGUgb25seSB0aW1lIHRoaXMKK2lzIGxpa2VseSB0byBoYXBwZW4gaXMgaWYgdGhlIGNsaWVudCBpcyBjcmVhdGluZworYSBuZXcgYnJhbmNoIG9yIGEgdGFnIHRoYXQgcG9pbnRzIHRvIGFuIGV4aXN0aW5nIG9iai1pZC4KKworVGhlIHNlcnZlciB3aWxsIHJlY2VpdmUgdGhlIHBhY2tmaWxlLCB1bnBhY2sgaXQsIHRoZW4gdmFsaWRhdGUgZWFjaAorcmVmZXJlbmNlIHRoYXQgaXMgYmVpbmcgdXBkYXRlZCB0aGF0IGl0IGhhc24ndCBjaGFuZ2VkIHdoaWxlIHRoZSByZXF1ZXN0Cit3YXMgYmVpbmcgcHJvY2Vzc2VkICh0aGUgb2JqLWlkIGlzIHN0aWxsIHRoZSBzYW1lIGFzIHRoZSBvbGQtaWQpLCBhbmQKK2l0IHdpbGwgcnVuIGFueSB1cGRhdGUgaG9va3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHVwZGF0ZSBpcyBhY2NlcHRhYmxlLgorSWYgYWxsIG9mIHRoYXQgaXMgZmluZSwgdGhlIHNlcnZlciB3aWxsIHRoZW4gdXBkYXRlIHRoZSByZWZlcmVuY2VzLgorCitQdXNoIENlcnRpZmljYXRlCistLS0tLS0tLS0tLS0tLS0tCisKK0EgcHVzaCBjZXJ0aWZpY2F0ZSBiZWdpbnMgd2l0aCBhIHNldCBvZiBoZWFkZXIgbGluZXMuICBBZnRlciB0aGUKK2hlYWRlciBhbmQgYW4gZW1wdHkgbGluZSwgdGhlIHByb3RvY29sIGNvbW1hbmRzIGZvbGxvdywgb25lIHBlcgorbGluZS4gTm90ZSB0aGF0IHRoZSB0aGUgdHJhaWxpbmcgTEYgaW4gcHVzaC1jZXJ0IFBLVC1MSU5FcyBpcyBfbm90Xworb3B0aW9uYWw7IGl0IG11c3QgYmUgcHJlc2VudC4KKworQ3VycmVudGx5LCB0aGUgZm9sbG93aW5nIGhlYWRlciBmaWVsZHMgYXJlIGRlZmluZWQ6CisKK2BwdXNoZXJgIGlkZW50OjoKKwlJZGVudGlmeSB0aGUgR1BHIGtleSBpbiAiSHVtYW4gUmVhZGFibGUgTmFtZSA8ZW1haWxAYWRkcmVzcz4iCisJZm9ybWF0LgorCitgcHVzaGVlYCB1cmw6OgorCVRoZSByZXBvc2l0b3J5IFVSTCAoYW5vbnltaXplZCwgaWYgdGhlIFVSTCBjb250YWlucworCWF1dGhlbnRpY2F0aW9uIG1hdGVyaWFsKSB0aGUgdXNlciB3aG8gcmFuIGBnaXQgcHVzaGAKKwlpbnRlbmRlZCB0byBwdXNoIGludG8uCisKK2Bub25jZWAgbm9uY2U6OgorCVRoZSAnbm9uY2UnIHN0cmluZyB0aGUgcmVjZWl2aW5nIHJlcG9zaXRvcnkgYXNrZWQgdGhlCisJcHVzaGluZyB1c2VyIHRvIGluY2x1ZGUgaW4gdGhlIGNlcnRpZmljYXRlLCB0byBwcmV2ZW50CisJcmVwbGF5IGF0dGFja3MuCisKK1RoZSBHUEcgc2lnbmF0dXJlIGxpbmVzIGFyZSBhIGRldGFjaGVkIHNpZ25hdHVyZSBmb3IgdGhlIGNvbnRlbnRzCityZWNvcmRlZCBpbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSBiZWZvcmUgdGhlIHNpZ25hdHVyZSBibG9jayBiZWdpbnMuCitUaGUgZGV0YWNoZWQgc2lnbmF0dXJlIGlzIHVzZWQgdG8gY2VydGlmeSB0aGF0IHRoZSBjb21tYW5kcyB3ZXJlCitnaXZlbiBieSB0aGUgcHVzaGVyLCB3aG8gbXVzdCBiZSB0aGUgc2lnbmVyLgorCitSZXBvcnQgU3RhdHVzCistLS0tLS0tLS0tLS0tCisKK0FmdGVyIHJlY2VpdmluZyB0aGUgcGFjayBkYXRhIGZyb20gdGhlIHNlbmRlciwgdGhlIHJlY2VpdmVyIHNlbmRzIGEKK3JlcG9ydCBpZiAncmVwb3J0LXN0YXR1cycgY2FwYWJpbGl0eSBpcyBpbiBlZmZlY3QuCitJdCBpcyBhIHNob3J0IGxpc3Rpbmcgb2Ygd2hhdCBoYXBwZW5lZCBpbiB0aGF0IHVwZGF0ZS4gIEl0IHdpbGwgZmlyc3QKK2xpc3QgdGhlIHN0YXR1cyBvZiB0aGUgcGFja2ZpbGUgdW5wYWNraW5nIGFzIGVpdGhlciAndW5wYWNrIG9rJyBvcgorJ3VucGFjayBbZXJyb3JdJy4gIFRoZW4gaXQgd2lsbCBsaXN0IHRoZSBzdGF0dXMgZm9yIGVhY2ggb2YgdGhlIHJlZmVyZW5jZXMKK3RoYXQgaXQgdHJpZWQgdG8gdXBkYXRlLiAgRWFjaCBsaW5lIGlzIGVpdGhlciAnb2sgW3JlZm5hbWVdJyBpZiB0aGUKK3VwZGF0ZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgJ25nIFtyZWZuYW1lXSBbZXJyb3JdJyBpZiB0aGUgdXBkYXRlIHdhcyBub3QuCisKKy0tLS0KKyAgcmVwb3J0LXN0YXR1cyAgICAgPSB1bnBhY2stc3RhdHVzCisJCSAgICAgIDEqKGNvbW1hbmQtc3RhdHVzKQorCQkgICAgICBmbHVzaC1wa3QKKworICB1bnBhY2stc3RhdHVzICAgICA9IFBLVC1MSU5FKCJ1bnBhY2siIFNQIHVucGFjay1yZXN1bHQpCisgIHVucGFjay1yZXN1bHQgICAgID0gIm9rIiAvIGVycm9yLW1zZworCisgIGNvbW1hbmQtc3RhdHVzICAgID0gY29tbWFuZC1vayAvIGNvbW1hbmQtZmFpbAorICBjb21tYW5kLW9rICAgICAgICA9IFBLVC1MSU5FKCJvayIgU1AgcmVmbmFtZSkKKyAgY29tbWFuZC1mYWlsICAgICAgPSBQS1QtTElORSgibmciIFNQIHJlZm5hbWUgU1AgZXJyb3ItbXNnKQorCisgIGVycm9yLW1zZyAgICAgICAgID0gMSooT0NURUNUKSA7IHdoZXJlIG5vdCAib2siCistLS0tCisKK1VwZGF0ZXMgY2FuIGJlIHVuc3VjY2Vzc2Z1bCBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIFRoZSByZWZlcmVuY2UgY2FuIGhhdmUKK2NoYW5nZWQgc2luY2UgdGhlIHJlZmVyZW5jZSBkaXNjb3ZlcnkgcGhhc2Ugd2FzIG9yaWdpbmFsbHkgc2VudCwgbWVhbmluZworc29tZW9uZSBwdXNoZWQgaW4gdGhlIG1lYW50aW1lLiAgVGhlIHJlZmVyZW5jZSBiZWluZyBwdXNoZWQgY291bGQgYmUgYQorbm9uLWZhc3QtZm9yd2FyZCByZWZlcmVuY2UgYW5kIHRoZSB1cGRhdGUgaG9va3Mgb3IgY29uZmlndXJhdGlvbiBjb3VsZCBiZQorc2V0IHRvIG5vdCBhbGxvdyB0aGF0LCBldGMuICBBbHNvLCBzb21lIHJlZmVyZW5jZXMgY2FuIGJlIHVwZGF0ZWQgd2hpbGUgb3RoZXJzCitjYW4gYmUgcmVqZWN0ZWQuCisKK0FuIGV4YW1wbGUgY2xpZW50L3NlcnZlciBjb21tdW5pY2F0aW9uIG1pZ2h0IGxvb2sgbGlrZSB0aGlzOgorCistLS0tCisgICBTOiAwMDdjNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCByZWZzL2hlYWRzL2xvY2FsXDByZXBvcnQtc3RhdHVzIGRlbGV0ZS1yZWZzIG9mcy1kZWx0YVxuCisgICBTOiAwMDNlN2QxNjY1MTQ0YTNhOTc1YzA1ZjFmNDM5MDJkZGFmMDg0ZTc4NGRiZSByZWZzL2hlYWRzL2RlYnVnXG4KKyAgIFM6IDAwM2Y3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIHJlZnMvaGVhZHMvbWFzdGVyXG4KKyAgIFM6IDAwM2Y3NDczMGQ0MTBmY2I2NjAzYWNlOTZmMWRjNTVlYTYxOTYxMjI1MzJkIHJlZnMvaGVhZHMvdGVhbVxuCisgICBTOiAwMDAwCisKKyAgIEM6IDAwM2U3ZDE2NjUxNDRhM2E5NzVjMDVmMWY0MzkwMmRkYWYwODRlNzg0ZGJlIDc0NzMwZDQxMGZjYjY2MDNhY2U5NmYxZGM1NWVhNjE5NjEyMjUzMmQgcmVmcy9oZWFkcy9kZWJ1Z1xuCisgICBDOiAwMDNlNzQ3MzBkNDEwZmNiNjYwM2FjZTk2ZjFkYzU1ZWE2MTk2MTIyNTMyZCA1YTNmNmJlNzU1YmJiN2RlYWU1MDA2NTk4OGNiZmExZmZhOWFiNjhhIHJlZnMvaGVhZHMvbWFzdGVyXG4KKyAgIEM6IDAwMDAKKyAgIEM6IFtQQUNLREFUQV0KKworICAgUzogMDAwZXVucGFjayBva1xuCisgICBTOiAwMDE4b2sgcmVmcy9oZWFkcy9kZWJ1Z1xuCisgICBTOiAwMDJhbmcgcmVmcy9oZWFkcy9tYXN0ZXIgbm9uLWZhc3QtZm9yd2FyZFxuCistLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jYXBhYmlsaXRpZXMudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY2FwYWJpbGl0aWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWFiNmI0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcHJvdG9jb2wtY2FwYWJpbGl0aWVzLnR4dApAQCAtMCwwICsxLDI3NyBAQAorR2l0IFByb3RvY29sIENhcGFiaWxpdGllcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitTZXJ2ZXJzIFNIT1VMRCBzdXBwb3J0IGFsbCBjYXBhYmlsaXRpZXMgZGVmaW5lZCBpbiB0aGlzIGRvY3VtZW50LgorCitPbiB0aGUgdmVyeSBmaXJzdCBsaW5lIG9mIHRoZSBpbml0aWFsIHNlcnZlciByZXNwb25zZSBvZiBlaXRoZXIKK3JlY2VpdmUtcGFjayBhbmQgdXBsb2FkLXBhY2sgdGhlIGZpcnN0IHJlZmVyZW5jZSBpcyBmb2xsb3dlZCBieQorYSBOVUwgYnl0ZSBhbmQgdGhlbiBhIGxpc3Qgb2Ygc3BhY2UgZGVsaW1pdGVkIHNlcnZlciBjYXBhYmlsaXRpZXMuCitUaGVzZSBhbGxvdyB0aGUgc2VydmVyIHRvIGRlY2xhcmUgd2hhdCBpdCBjYW4gYW5kIGNhbm5vdCBzdXBwb3J0Cit0byB0aGUgY2xpZW50LgorCitDbGllbnQgd2lsbCB0aGVuIHNlbmQgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjYXBhYmlsaXRpZXMgaXQgd2FudHMKK3RvIGJlIGluIGVmZmVjdC4gVGhlIGNsaWVudCBNVVNUIE5PVCBhc2sgZm9yIGNhcGFiaWxpdGllcyB0aGUgc2VydmVyCitkaWQgbm90IHNheSBpdCBzdXBwb3J0cy4KKworU2VydmVyIE1VU1QgZGlhZ25vc2UgYW5kIGFib3J0IGlmIGNhcGFiaWxpdGllcyBpdCBkb2VzIG5vdCB1bmRlcnN0YW5kCit3YXMgc2VudC4gIFNlcnZlciBNVVNUIE5PVCBpZ25vcmUgY2FwYWJpbGl0aWVzIHRoYXQgY2xpZW50IHJlcXVlc3RlZAorYW5kIHNlcnZlciBhZHZlcnRpc2VkLiAgQXMgYSBjb25zZXF1ZW5jZSBvZiB0aGVzZSBydWxlcywgc2VydmVyIE1VU1QKK05PVCBhZHZlcnRpc2UgY2FwYWJpbGl0aWVzIGl0IGRvZXMgbm90IHVuZGVyc3RhbmQuCisKK1RoZSAnYXRvbWljJywgJ3JlcG9ydC1zdGF0dXMnLCAnZGVsZXRlLXJlZnMnLCAncXVpZXQnLCBhbmQgJ3B1c2gtY2VydCcKK2NhcGFiaWxpdGllcyBhcmUgc2VudCBhbmQgcmVjb2duaXplZCBieSB0aGUgcmVjZWl2ZS1wYWNrIChwdXNoIHRvIHNlcnZlcikKK3Byb2Nlc3MuCisKK1RoZSAnb2ZzLWRlbHRhJyBhbmQgJ3NpZGUtYmFuZC02NGsnIGNhcGFiaWxpdGllcyBhcmUgc2VudCBhbmQgcmVjb2duaXplZAorYnkgYm90aCB1cGxvYWQtcGFjayBhbmQgcmVjZWl2ZS1wYWNrIHByb3RvY29scy4gIFRoZSAnYWdlbnQnIGNhcGFiaWxpdHkKK21heSBvcHRpb25hbGx5IGJlIHNlbnQgaW4gYm90aCBwcm90b2NvbHMuCisKK0FsbCBvdGhlciBjYXBhYmlsaXRpZXMgYXJlIG9ubHkgcmVjb2duaXplZCBieSB0aGUgdXBsb2FkLXBhY2sgKGZldGNoCitmcm9tIHNlcnZlcikgcHJvY2Vzcy4KKworbXVsdGlfYWNrCistLS0tLS0tLS0KKworVGhlICdtdWx0aV9hY2snIGNhcGFiaWxpdHkgYWxsb3dzIHRoZSBzZXJ2ZXIgdG8gcmV0dXJuICJBQ0sgb2JqLWlkCitjb250aW51ZSIgYXMgc29vbiBhcyBpdCBmaW5kcyBhIGNvbW1pdCB0aGF0IGl0IGNhbiB1c2UgYXMgYSBjb21tb24KK2Jhc2UsIGJldHdlZW4gdGhlIGNsaWVudCdzIHdhbnRzIGFuZCB0aGUgY2xpZW50J3MgaGF2ZSBzZXQuCisKK0J5IHNlbmRpbmcgdGhpcyBlYXJseSwgdGhlIHNlcnZlciBjYW4gcG90ZW50aWFsbHkgaGVhZCBvZmYgdGhlIGNsaWVudAorZnJvbSB3YWxraW5nIGFueSBmdXJ0aGVyIGRvd24gdGhhdCBwYXJ0aWN1bGFyIGJyYW5jaCBvZiB0aGUgY2xpZW50J3MKK3JlcG9zaXRvcnkgaGlzdG9yeS4gIFRoZSBjbGllbnQgbWF5IHN0aWxsIG5lZWQgdG8gd2FsayBkb3duIG90aGVyCiticmFuY2hlcywgc2VuZGluZyBoYXZlIGxpbmVzIGZvciB0aG9zZSwgdW50aWwgdGhlIHNlcnZlciBoYXMgYQorY29tcGxldGUgY3V0IGFjcm9zcyB0aGUgREFHLCBvciB0aGUgY2xpZW50IGhhcyBzYWlkICJkb25lIi4KKworV2l0aG91dCBtdWx0aV9hY2ssIGEgY2xpZW50IHNlbmRzIGhhdmUgbGluZXMgaW4gLS1kYXRlLW9yZGVyIHVudGlsCit0aGUgc2VydmVyIGhhcyBmb3VuZCBhIGNvbW1vbiBiYXNlLiAgVGhhdCBtZWFucyB0aGUgY2xpZW50IHdpbGwgc2VuZAoraGF2ZSBsaW5lcyB0aGF0IGFyZSBhbHJlYWR5IGtub3duIGJ5IHRoZSBzZXJ2ZXIgdG8gYmUgY29tbW9uLCBiZWNhdXNlCit0aGV5IG92ZXJsYXAgaW4gdGltZSB3aXRoIGFub3RoZXIgYnJhbmNoIHRoYXQgdGhlIHNlcnZlciBoYXNuJ3QgZm91bmQKK2EgY29tbW9uIGJhc2Ugb24geWV0LgorCitGb3IgZXhhbXBsZSBzdXBwb3NlIHRoZSBjbGllbnQgaGFzIGNvbW1pdHMgaW4gY2FwcyB0aGF0IHRoZSBzZXJ2ZXIKK2RvZXNuJ3QgYW5kIHRoZSBzZXJ2ZXIgaGFzIGNvbW1pdHMgaW4gbG93ZXIgY2FzZSB0aGF0IHRoZSBjbGllbnQKK2RvZXNuJ3QsIGFzIGluIHRoZSBmb2xsb3dpbmcgZGlhZ3JhbToKKworICAgICAgICstLS0tIHUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB4CisgICAgICAvICAgICAgICAgICAgICArLS0tLS0geQorICAgICAvICAgICAgICAgICAgICAvCisgICAgYSAtLSBiIC0tIGMgLS0gZCAtLSBFIC0tIEYKKyAgICAgICBcCisJKy0tLSBRIC0tIFIgLS0gUworCitJZiB0aGUgY2xpZW50IHdhbnRzIHgseSBhbmQgc3RhcnRzIG91dCBieSBzYXlpbmcgaGF2ZSBGLFMsIHRoZSBzZXJ2ZXIKK2RvZXNuJ3Qga25vdyB3aGF0IEYsUyBpcy4gIEV2ZW50dWFsbHkgdGhlIGNsaWVudCBzYXlzICJoYXZlIGQiIGFuZAordGhlIHNlcnZlciBzZW5kcyAiQUNLIGQgY29udGludWUiIHRvIGxldCB0aGUgY2xpZW50IGtub3cgdG8gc3RvcAord2Fsa2luZyBkb3duIHRoYXQgbGluZSAoc28gZG9uJ3Qgc2VuZCBjLWItYSksIGJ1dCBpdCdzIG5vdCBkb25lIHlldCwKK2l0IG5lZWRzIGEgYmFzZSBmb3IgeC4gVGhlIGNsaWVudCBrZWVwcyBnb2luZyB3aXRoIFMtUi1RLCB1bnRpbCBhCitnZXRzIHJlYWNoZWQsIGF0IHdoaWNoIHBvaW50IHRoZSBzZXJ2ZXIgaGFzIGEgY2xlYXIgYmFzZSBhbmQgaXQgYWxsCitlbmRzLgorCitXaXRob3V0IG11bHRpX2FjayB0aGUgY2xpZW50IHdvdWxkIGhhdmUgc2VudCB0aGF0IGMtYi1hIGNoYWluIGFueXdheSwKK2ludGVybGVhdmVkIHdpdGggUy1SLVEuCisKK211bHRpX2Fja19kZXRhaWxlZAorLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGlzIGFuIGV4dGVuc2lvbiBvZiBtdWx0aV9hY2sgdGhhdCBwZXJtaXRzIGNsaWVudCB0byBiZXR0ZXIKK3VuZGVyc3RhbmQgdGhlIHNlcnZlcidzIGluLW1lbW9yeSBzdGF0ZS4gU2VlIHBhY2stcHJvdG9jb2wudHh0LAorc2VjdGlvbiAiUGFja2ZpbGUgTmVnb3RpYXRpb24iIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCituby1kb25lCistLS0tLS0tCitUaGlzIGNhcGFiaWxpdHkgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoIHRoZSBzbWFydCBIVFRQIHByb3RvY29sLiBJZgorbXVsdGlfYWNrX2RldGFpbGVkIGFuZCBuby1kb25lIGFyZSBib3RoIHByZXNlbnQsIHRoZW4gdGhlIHNlbmRlciBpcworZnJlZSB0byBpbW1lZGlhdGVseSBzZW5kIGEgcGFjayBmb2xsb3dpbmcgaXRzIGZpcnN0ICJBQ0sgb2JqLWlkIHJlYWR5IgorbWVzc2FnZS4KKworV2l0aG91dCBuby1kb25lIGluIHRoZSBzbWFydCBIVFRQIHByb3RvY29sLCB0aGUgc2VydmVyIHNlc3Npb24gd291bGQKK2VuZCBhbmQgdGhlIGNsaWVudCBoYXMgdG8gbWFrZSBhbm90aGVyIHRyaXAgdG8gc2VuZCAiZG9uZSIgYmVmb3JlCit0aGUgc2VydmVyIGNhbiBzZW5kIHRoZSBwYWNrLiBuby1kb25lIHJlbW92ZXMgdGhlIGxhc3Qgcm91bmQgYW5kCit0aHVzIHNsaWdodGx5IHJlZHVjZXMgbGF0ZW5jeS4KKwordGhpbi1wYWNrCistLS0tLS0tLS0KKworQSB0aGluIHBhY2sgaXMgb25lIHdpdGggZGVsdGFzIHdoaWNoIHJlZmVyZW5jZSBiYXNlIG9iamVjdHMgbm90Citjb250YWluZWQgd2l0aGluIHRoZSBwYWNrIChidXQgYXJlIGtub3duIHRvIGV4aXN0IGF0IHRoZSByZWNlaXZpbmcKK2VuZCkuIFRoaXMgY2FuIHJlZHVjZSB0aGUgbmV0d29yayB0cmFmZmljIHNpZ25pZmljYW50bHksIGJ1dCBpdAorcmVxdWlyZXMgdGhlIHJlY2VpdmluZyBlbmQgdG8ga25vdyBob3cgdG8gInRoaWNrZW4iIHRoZXNlIHBhY2tzIGJ5CithZGRpbmcgdGhlIG1pc3NpbmcgYmFzZXMgdG8gdGhlIHBhY2suCisKK1RoZSB1cGxvYWQtcGFjayBzZXJ2ZXIgYWR2ZXJ0aXNlcyAndGhpbi1wYWNrJyB3aGVuIGl0IGNhbiBnZW5lcmF0ZQorYW5kIHNlbmQgYSB0aGluIHBhY2suIEEgY2xpZW50IHJlcXVlc3RzIHRoZSAndGhpbi1wYWNrJyBjYXBhYmlsaXR5Cit3aGVuIGl0IHVuZGVyc3RhbmRzIGhvdyB0byAidGhpY2tlbiIgaXQsIG5vdGlmeWluZyB0aGUgc2VydmVyIHRoYXQKK2l0IGNhbiByZWNlaXZlIHN1Y2ggYSBwYWNrLiBBIGNsaWVudCBNVVNUIE5PVCByZXF1ZXN0IHRoZQorJ3RoaW4tcGFjaycgY2FwYWJpbGl0eSBpZiBpdCBjYW5ub3QgdHVybiBhIHRoaW4gcGFjayBpbnRvIGEKK3NlbGYtY29udGFpbmVkIHBhY2suCisKK1JlY2VpdmUtcGFjaywgb24gdGhlIG90aGVyIGhhbmQsIGlzIGFzc3VtZWQgYnkgZGVmYXVsdCB0byBiZSBhYmxlIHRvCitoYW5kbGUgdGhpbiBwYWNrcywgYnV0IGNhbiBhc2sgdGhlIGNsaWVudCBub3QgdG8gdXNlIHRoZSBmZWF0dXJlIGJ5CithZHZlcnRpc2luZyB0aGUgJ25vLXRoaW4nIGNhcGFiaWxpdHkuIEEgY2xpZW50IE1VU1QgTk9UIHNlbmQgYSB0aGluCitwYWNrIGlmIHRoZSBzZXJ2ZXIgYWR2ZXJ0aXNlcyB0aGUgJ25vLXRoaW4nIGNhcGFiaWxpdHkuCisKK1RoZSByZWFzb25zIGZvciB0aGlzIGFzeW1tZXRyeSBhcmUgaGlzdG9yaWNhbC4gVGhlIHJlY2VpdmUtcGFjaworcHJvZ3JhbSBkaWQgbm90IGV4aXN0IHVudGlsIGFmdGVyIHRoZSBpbnZlbnRpb24gb2YgdGhpbiBwYWNrcywgc28KK2hpc3RvcmljYWxseSB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIG9mIHJlY2VpdmUtcGFjayBhbHdheXMKK3VuZGVyc3Rvb2QgdGhpbiBwYWNrcy4gQWRkaW5nICduby10aGluJyBsYXRlciBhbGxvd2VkIHJlY2VpdmUtcGFjawordG8gZGlzYWJsZSB0aGUgZmVhdHVyZSBpbiBhIGJhY2t3YXJkcy1jb21wYXRpYmxlIG1hbm5lci4KKworCitzaWRlLWJhbmQsIHNpZGUtYmFuZC02NGsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNhcGFiaWxpdHkgbWVhbnMgdGhhdCBzZXJ2ZXIgY2FuIHNlbmQsIGFuZCBjbGllbnQgdW5kZXJzdGFuZCBtdWx0aXBsZXhlZAorcHJvZ3Jlc3MgcmVwb3J0cyBhbmQgZXJyb3IgaW5mbyBpbnRlcmxlYXZlZCB3aXRoIHRoZSBwYWNrZmlsZSBpdHNlbGYuCisKK1RoZXNlIHR3byBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIEEgbW9kZXJuIGNsaWVudCBhbHdheXMKK2Zhdm9ycyAnc2lkZS1iYW5kLTY0aycuCisKK0VpdGhlciBtb2RlIGluZGljYXRlcyB0aGF0IHRoZSBwYWNrZmlsZSBkYXRhIHdpbGwgYmUgc3RyZWFtZWQgYnJva2VuCit1cCBpbnRvIHBhY2tldHMgb2YgdXAgdG8gZWl0aGVyIDEwMDAgYnl0ZXMgaW4gdGhlIGNhc2Ugb2YgJ3NpZGVfYmFuZCcsCitvciA2NTUyMCBieXRlcyBpbiB0aGUgY2FzZSBvZiAnc2lkZV9iYW5kXzY0aycuIEVhY2ggcGFja2V0IGlzIG1hZGUgdXAKK29mIGEgbGVhZGluZyA0LWJ5dGUgcGt0LWxpbmUgbGVuZ3RoIG9mIGhvdyBtdWNoIGRhdGEgaXMgaW4gdGhlIHBhY2tldCwKK2ZvbGxvd2VkIGJ5IGEgMS1ieXRlIHN0cmVhbSBjb2RlLCBmb2xsb3dlZCBieSB0aGUgYWN0dWFsIGRhdGEuCisKK1RoZSBzdHJlYW0gY29kZSBjYW4gYmUgb25lIG9mOgorCisgMSAtIHBhY2sgZGF0YQorIDIgLSBwcm9ncmVzcyBtZXNzYWdlcworIDMgLSBmYXRhbCBlcnJvciBtZXNzYWdlIGp1c3QgYmVmb3JlIHN0cmVhbSBhYm9ydHMKKworVGhlICJzaWRlLWJhbmQtNjRrIiBjYXBhYmlsaXR5IGNhbWUgYWJvdXQgYXMgYSB3YXkgZm9yIG5ld2VyIGNsaWVudHMKK3RoYXQgY2FuIGhhbmRsZSBtdWNoIGxhcmdlciBwYWNrZXRzIHRvIHJlcXVlc3QgcGFja2V0cyB0aGF0IGFyZQorYWN0dWFsbHkgY3JhbW1lZCBuZWFybHkgZnVsbCwgd2hpbGUgbWFpbnRhaW5pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorZm9yIHRoZSBvbGRlciBjbGllbnRzLgorCitGdXJ0aGVyLCB3aXRoIHNpZGUtYmFuZCBhbmQgaXRzIHVwIHRvIDEwMDAtYnl0ZSBtZXNzYWdlcywgaXQncyBhY3R1YWxseQorOTk5IGJ5dGVzIG9mIHBheWxvYWQgYW5kIDEgYnl0ZSBmb3IgdGhlIHN0cmVhbSBjb2RlLiBXaXRoIHNpZGUtYmFuZC02NGssCitzYW1lIGRlYWwsIHlvdSBoYXZlIHVwIHRvIDY1NTE5IGJ5dGVzIG9mIGRhdGEgYW5kIDEgYnl0ZSBmb3IgdGhlIHN0cmVhbQorY29kZS4KKworVGhlIGNsaWVudCBNVVNUIHNlbmQgb25seSBtYXhpbXVtIG9mIG9uZSBvZiAic2lkZS1iYW5kIiBhbmQgInNpZGUtCitiYW5kLTY0ayIuICBTZXJ2ZXIgTVVTVCBkaWFnbm9zZSBpdCBhcyBhbiBlcnJvciBpZiBjbGllbnQgcmVxdWVzdHMKK2JvdGguCisKK29mcy1kZWx0YQorLS0tLS0tLS0tCisKK1NlcnZlciBjYW4gc2VuZCwgYW5kIGNsaWVudCB1bmRlcnN0YW5kIFBBQ0t2MiB3aXRoIGRlbHRhIHJlZmVycmluZyB0bworaXRzIGJhc2UgYnkgcG9zaXRpb24gaW4gcGFjayByYXRoZXIgdGhhbiBieSBhbiBvYmotaWQuICBUaGF0IGlzLCB0aGV5IGNhbgorc2VuZC9yZWFkIE9CSl9PRlNfREVMVEEgKGFrYSB0eXBlIDYpIGluIGEgcGFja2ZpbGUuCisKK2FnZW50CistLS0tLQorCitUaGUgc2VydmVyIG1heSBvcHRpb25hbGx5IHNlbmQgYSBjYXBhYmlsaXR5IG9mIHRoZSBmb3JtIGBhZ2VudD1YYCB0bworbm90aWZ5IHRoZSBjbGllbnQgdGhhdCB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgdmVyc2lvbiBgWGAuIFRoZSBjbGllbnQgbWF5CitvcHRpb25hbGx5IHJldHVybiBpdHMgb3duIGFnZW50IHN0cmluZyBieSByZXNwb25kaW5nIHdpdGggYW4gYGFnZW50PVlgCitjYXBhYmlsaXR5IChidXQgaXQgTVVTVCBOT1QgZG8gc28gaWYgdGhlIHNlcnZlciBkaWQgbm90IG1lbnRpb24gdGhlCithZ2VudCBjYXBhYmlsaXR5KS4gVGhlIGBYYCBhbmQgYFlgIHN0cmluZ3MgbWF5IGNvbnRhaW4gYW55IHByaW50YWJsZQorQVNDSUkgY2hhcmFjdGVycyBleGNlcHQgc3BhY2UgKGkuZS4sIHRoZSBieXRlIHJhbmdlIDMyIDwgeCA8IDEyNyksIGFuZAorYXJlIHR5cGljYWxseSBvZiB0aGUgZm9ybSAicGFja2FnZS92ZXJzaW9uIiAoZS5nLiwgImdpdC8xLjguMy4xIikuIFRoZQorYWdlbnQgc3RyaW5ncyBhcmUgcHVyZWx5IGluZm9ybWF0aXZlIGZvciBzdGF0aXN0aWNzIGFuZCBkZWJ1Z2dpbmcKK3B1cnBvc2VzLCBhbmQgTVVTVCBOT1QgYmUgdXNlZCB0byBwcm9ncmFtbWF0aWNhbGx5IGFzc3VtZSB0aGUgcHJlc2VuY2UKK29yIGFic2VuY2Ugb2YgcGFydGljdWxhciBmZWF0dXJlcy4KKworc2hhbGxvdworLS0tLS0tLQorCitUaGlzIGNhcGFiaWxpdHkgYWRkcyAiZGVlcGVuIiwgInNoYWxsb3ciIGFuZCAidW5zaGFsbG93IiBjb21tYW5kcyB0bwordGhlICBmZXRjaC1wYWNrL3VwbG9hZC1wYWNrIHByb3RvY29sIHNvIGNsaWVudHMgY2FuIHJlcXVlc3Qgc2hhbGxvdworY2xvbmVzLgorCituby1wcm9ncmVzcworLS0tLS0tLS0tLS0KKworVGhlIGNsaWVudCB3YXMgc3RhcnRlZCB3aXRoICJnaXQgY2xvbmUgLXEiIG9yIHNvbWV0aGluZywgYW5kIGRvZXNuJ3QKK3dhbnQgdGhhdCBzaWRlIGJhbmQgMi4gIEJhc2ljYWxseSB0aGUgY2xpZW50IGp1c3Qgc2F5cyAiSSBkbyBub3QKK3dpc2ggdG8gcmVjZWl2ZSBzdHJlYW0gMiBvbiBzaWRlYmFuZCwgc28gZG8gbm90IHNlbmQgaXQgdG8gbWUsIGFuZCBpZgoreW91IGRpZCwgSSB3aWxsIGRyb3AgaXQgb24gdGhlIGZsb29yIGFueXdheSIuICBIb3dldmVyLCB0aGUgc2lkZWJhbmQKK2NoYW5uZWwgMyBpcyBzdGlsbCB1c2VkIGZvciBlcnJvciByZXNwb25zZXMuCisKK2luY2x1ZGUtdGFnCistLS0tLS0tLS0tLQorCitUaGUgJ2luY2x1ZGUtdGFnJyBjYXBhYmlsaXR5IGlzIGFib3V0IHNlbmRpbmcgYW5ub3RhdGVkIHRhZ3MgaWYgd2UgYXJlCitzZW5kaW5nIG9iamVjdHMgdGhleSBwb2ludCB0by4gIElmIHdlIHBhY2sgYW4gb2JqZWN0IHRvIHRoZSBjbGllbnQsIGFuZAorYSB0YWcgb2JqZWN0IHBvaW50cyBleGFjdGx5IGF0IHRoYXQgb2JqZWN0LCB3ZSBwYWNrIHRoZSB0YWcgb2JqZWN0IHRvby4KK0luIGdlbmVyYWwgdGhpcyBhbGxvd3MgYSBjbGllbnQgdG8gZ2V0IGFsbCBuZXcgYW5ub3RhdGVkIHRhZ3Mgd2hlbiBpdAorZmV0Y2hlcyBhIGJyYW5jaCwgaW4gYSBzaW5nbGUgbmV0d29yayBjb25uZWN0aW9uLgorCitDbGllbnRzIE1BWSBhbHdheXMgc2VuZCBpbmNsdWRlLXRhZywgaGFyZGNvZGluZyBpdCBpbnRvIGEgcmVxdWVzdCB3aGVuCit0aGUgc2VydmVyIGFkdmVydGlzZXMgdGhpcyBjYXBhYmlsaXR5LiBUaGUgZGVjaXNpb24gZm9yIGEgY2xpZW50IHRvCityZXF1ZXN0IGluY2x1ZGUtdGFnIG9ubHkgaGFzIHRvIGRvIHdpdGggdGhlIGNsaWVudCdzIGRlc2lyZXMgZm9yIHRhZworZGF0YSwgd2hldGhlciBvciBub3QgYSBzZXJ2ZXIgaGFkIGFkdmVydGlzZWQgb2JqZWN0cyBpbiB0aGUKK3JlZnMvdGFncy8qIG5hbWVzcGFjZS4KKworU2VydmVycyBNVVNUIHBhY2sgdGhlIHRhZ3MgaWYgdGhlaXIgcmVmZXJyYW50IGlzIHBhY2tlZCBhbmQgdGhlIGNsaWVudAoraGFzIHJlcXVlc3RlZCBpbmNsdWRlLXRhZ3MuCisKK0NsaWVudHMgTVVTVCBiZSBwcmVwYXJlZCBmb3IgdGhlIGNhc2Ugd2hlcmUgYSBzZXJ2ZXIgaGFzIGlnbm9yZWQKK2luY2x1ZGUtdGFnIGFuZCBoYXMgbm90IGFjdHVhbGx5IHNlbnQgdGFncyBpbiB0aGUgcGFjay4gIEluIHN1Y2gKK2Nhc2VzIHRoZSBjbGllbnQgU0hPVUxEIGlzc3VlIGEgc3Vic2VxdWVudCBmZXRjaCB0byBhY3F1aXJlIHRoZSB0YWdzCit0aGF0IGluY2x1ZGUtdGFnIHdvdWxkIGhhdmUgb3RoZXJ3aXNlIGdpdmVuIHRoZSBjbGllbnQuCisKK1RoZSBzZXJ2ZXIgU0hPVUxEIHNlbmQgaW5jbHVkZS10YWcsIGlmIGl0IHN1cHBvcnRzIGl0LCByZWdhcmRsZXNzCitvZiB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgdGFncyBhdmFpbGFibGUuCisKK3JlcG9ydC1zdGF0dXMKKy0tLS0tLS0tLS0tLS0KKworVGhlIHJlY2VpdmUtcGFjayBwcm9jZXNzIGNhbiByZWNlaXZlIGEgJ3JlcG9ydC1zdGF0dXMnIGNhcGFiaWxpdHksCit3aGljaCB0ZWxscyBpdCB0aGF0IHRoZSBjbGllbnQgd2FudHMgYSByZXBvcnQgb2Ygd2hhdCBoYXBwZW5lZCBhZnRlcgorYSBwYWNrZmlsZSB1cGxvYWQgYW5kIHJlZmVyZW5jZSB1cGRhdGUuICBJZiB0aGUgcHVzaGluZyBjbGllbnQgcmVxdWVzdHMKK3RoaXMgY2FwYWJpbGl0eSwgYWZ0ZXIgdW5wYWNraW5nIGFuZCB1cGRhdGluZyByZWZlcmVuY2VzIHRoZSBzZXJ2ZXIKK3dpbGwgcmVzcG9uZCB3aXRoIHdoZXRoZXIgdGhlIHBhY2tmaWxlIHVucGFja2VkIHN1Y2Nlc3NmdWxseSBhbmQgaWYKK2VhY2ggcmVmZXJlbmNlIHdhcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4gIElmIGFueSBvZiB0aG9zZSB3ZXJlIG5vdAorc3VjY2Vzc2Z1bCwgaXQgd2lsbCBzZW5kIGJhY2sgYW4gZXJyb3IgbWVzc2FnZS4gIFNlZSBwYWNrLXByb3RvY29sLnR4dAorZm9yIGV4YW1wbGUgbWVzc2FnZXMuCisKK2RlbGV0ZS1yZWZzCistLS0tLS0tLS0tLQorCitJZiB0aGUgc2VydmVyIHNlbmRzIGJhY2sgdGhlICdkZWxldGUtcmVmcycgY2FwYWJpbGl0eSwgaXQgbWVhbnMgdGhhdAoraXQgaXMgY2FwYWJsZSBvZiBhY2NlcHRpbmcgYSB6ZXJvLWlkIHZhbHVlIGFzIHRoZSB0YXJnZXQKK3ZhbHVlIG9mIGEgcmVmZXJlbmNlIHVwZGF0ZS4gIEl0IGlzIG5vdCBzZW50IGJhY2sgYnkgdGhlIGNsaWVudCwgaXQKK3NpbXBseSBpbmZvcm1zIHRoZSBjbGllbnQgdGhhdCBpdCBjYW4gYmUgc2VudCB6ZXJvLWlkIHZhbHVlcwordG8gZGVsZXRlIHJlZmVyZW5jZXMuCisKK3F1aWV0CistLS0tLQorCitJZiB0aGUgcmVjZWl2ZS1wYWNrIHNlcnZlciBhZHZlcnRpc2VzIHRoZSAncXVpZXQnIGNhcGFiaWxpdHksIGl0IGlzCitjYXBhYmxlIG9mIHNpbGVuY2luZyBodW1hbi1yZWFkYWJsZSBwcm9ncmVzcyBvdXRwdXQgd2hpY2ggb3RoZXJ3aXNlIG1heQorYmUgc2hvd24gd2hlbiBwcm9jZXNzaW5nIHRoZSByZWNlaXZlZCBwYWNrLiBBIHNlbmQtcGFjayBjbGllbnQgc2hvdWxkCityZXNwb25kIHdpdGggdGhlICdxdWlldCcgY2FwYWJpbGl0eSB0byBzdXBwcmVzcyBzZXJ2ZXItc2lkZSBwcm9ncmVzcworcmVwb3J0aW5nIGlmIHRoZSBsb2NhbCBwcm9ncmVzcyByZXBvcnRpbmcgaXMgYWxzbyBiZWluZyBzdXBwcmVzc2VkCisoZS5nLiwgdmlhIGBwdXNoIC1xYCwgb3IgaWYgc3RkZXJyIGRvZXMgbm90IGdvIHRvIGEgdHR5KS4KKworYXRvbWljCistLS0tLS0KKworSWYgdGhlIHNlcnZlciBzZW5kcyB0aGUgJ2F0b21pYycgY2FwYWJpbGl0eSBpdCBpcyBjYXBhYmxlIG9mIGFjY2VwdGluZworYXRvbWljIHB1c2hlcy4gSWYgdGhlIHB1c2hpbmcgY2xpZW50IHJlcXVlc3RzIHRoaXMgY2FwYWJpbGl0eSwgdGhlIHNlcnZlcgord2lsbCB1cGRhdGUgdGhlIHJlZnMgaW4gb25lIGF0b21pYyB0cmFuc2FjdGlvbi4gRWl0aGVyIGFsbCByZWZzIGFyZQordXBkYXRlZCBvciBub25lLgorCithbGxvdy10aXAtc2hhMS1pbi13YW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZSB1cGxvYWQtcGFjayBzZXJ2ZXIgYWR2ZXJ0aXNlcyB0aGlzIGNhcGFiaWxpdHksIGZldGNoLXBhY2sgbWF5CitzZW5kICJ3YW50IiBsaW5lcyB3aXRoIFNIQS0xcyB0aGF0IGV4aXN0IGF0IHRoZSBzZXJ2ZXIgYnV0IGFyZSBub3QKK2FkdmVydGlzZWQgYnkgdXBsb2FkLXBhY2suCisKK2FsbG93LXJlYWNoYWJsZS1zaGExLWluLXdhbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlIHVwbG9hZC1wYWNrIHNlcnZlciBhZHZlcnRpc2VzIHRoaXMgY2FwYWJpbGl0eSwgZmV0Y2gtcGFjayBtYXkKK3NlbmQgIndhbnQiIGxpbmVzIHdpdGggU0hBLTFzIHRoYXQgZXhpc3QgYXQgdGhlIHNlcnZlciBidXQgYXJlIG5vdAorYWR2ZXJ0aXNlZCBieSB1cGxvYWQtcGFjay4KKworcHVzaC1jZXJ0PTxub25jZT4KKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSByZWNlaXZlLXBhY2sgc2VydmVyIHRoYXQgYWR2ZXJ0aXNlcyB0aGlzIGNhcGFiaWxpdHkgaXMgd2lsbGluZwordG8gYWNjZXB0IGEgc2lnbmVkIHB1c2ggY2VydGlmaWNhdGUsIGFuZCBhc2tzIHRoZSA8bm9uY2U+IHRvIGJlCitpbmNsdWRlZCBpbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZS4gIEEgc2VuZC1wYWNrIGNsaWVudCBNVVNUIE5PVAorc2VuZCBhIHB1c2gtY2VydCBwYWNrZXQgdW5sZXNzIHRoZSByZWNlaXZlLXBhY2sgc2VydmVyIGFkdmVydGlzZXMKK3RoaXMgY2FwYWJpbGl0eS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3Byb3RvY29sLWNvbW1vbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jb21tb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzAxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9wcm90b2NvbC1jb21tb24udHh0CkBAIC0wLDAgKzEsOTkgQEAKK0RvY3VtZW50YXRpb24gQ29tbW9uIHRvIFBhY2sgYW5kIEh0dHAgUHJvdG9jb2xzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBQk5GIE5vdGF0aW9uCistLS0tLS0tLS0tLS0tCisKK0FCTkYgbm90YXRpb24gYXMgZGVzY3JpYmVkIGJ5IFJGQyA1MjM0IGlzIHVzZWQgd2l0aGluIHRoZSBwcm90b2NvbCBkb2N1bWVudHMsCitleGNlcHQgdGhlIGZvbGxvd2luZyByZXBsYWNlbWVudCBjb3JlIHJ1bGVzIGFyZSB1c2VkOgorLS0tLQorICBIRVhESUcgICAgPSAgRElHSVQgLyAiYSIgLyAiYiIgLyAiYyIgLyAiZCIgLyAiZSIgLyAiZiIKKy0tLS0KKworV2UgYWxzbyBkZWZpbmUgdGhlIGZvbGxvd2luZyBjb21tb24gcnVsZXM6CistLS0tCisgIE5VTCAgICAgICA9ICAleDAwCisgIHplcm8taWQgICA9ICA0MCoiMCIKKyAgb2JqLWlkICAgID0gIDQwKihIRVhESUdJVCkKKworICByZWZuYW1lICA9ICAiSEVBRCIKKyAgcmVmbmFtZSAvPSAgInJlZnMvIiA8c2VlIGRpc2N1c3Npb24gYmVsb3c+CistLS0tCisKK0EgcmVmbmFtZSBpcyBhIGhpZXJhcmNoaWNhbCBvY3RldCBzdHJpbmcgYmVnaW5uaW5nIHdpdGggInJlZnMvIiBhbmQKK25vdCB2aW9sYXRpbmcgdGhlICdnaXQtY2hlY2stcmVmLWZvcm1hdCcgY29tbWFuZCdzIHZhbGlkYXRpb24gcnVsZXMuCitNb3JlIHNwZWNpZmljYWxseSwgdGhleToKKworLiBUaGV5IGNhbiBpbmNsdWRlIHNsYXNoIGAvYCBmb3IgaGllcmFyY2hpY2FsIChkaXJlY3RvcnkpCisgIGdyb3VwaW5nLCBidXQgbm8gc2xhc2gtc2VwYXJhdGVkIGNvbXBvbmVudCBjYW4gYmVnaW4gd2l0aCBhCisgIGRvdCBgLmAuCisKKy4gVGhleSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGAvYC4gVGhpcyBlbmZvcmNlcyB0aGUgcHJlc2VuY2Ugb2YgYQorICBjYXRlZ29yeSBsaWtlIGBoZWFkcy9gLCBgdGFncy9gIGV0Yy4gYnV0IHRoZSBhY3R1YWwgbmFtZXMgYXJlIG5vdAorICByZXN0cmljdGVkLgorCisuIFRoZXkgY2Fubm90IGhhdmUgdHdvIGNvbnNlY3V0aXZlIGRvdHMgYC4uYCBhbnl3aGVyZS4KKworLiBUaGV5IGNhbm5vdCBoYXZlIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyAoaS5lLiBieXRlcyB3aG9zZQorICB2YWx1ZXMgYXJlIGxvd2VyIHRoYW4gXDA0MCwgb3IgXDE3NyBgREVMYCksIHNwYWNlLCB0aWxkZSBgfmAsCisgIGNhcmV0IGBeYCwgY29sb24gYDpgLCBxdWVzdGlvbi1tYXJrIGA/YCwgYXN0ZXJpc2sgYCpgLAorICBvciBvcGVuIGJyYWNrZXQgYFtgIGFueXdoZXJlLgorCisuIFRoZXkgY2Fubm90IGVuZCB3aXRoIGEgc2xhc2ggYC9gIG9yIGEgZG90IGAuYC4KKworLiBUaGV5IGNhbm5vdCBlbmQgd2l0aCB0aGUgc2VxdWVuY2UgYC5sb2NrYC4KKworLiBUaGV5IGNhbm5vdCBjb250YWluIGEgc2VxdWVuY2UgYEB7YC4KKworLiBUaGV5IGNhbm5vdCBjb250YWluIGEgYFxcYC4KKworCitwa3QtbGluZSBGb3JtYXQKKy0tLS0tLS0tLS0tLS0tLQorCitNdWNoIChidXQgbm90IGFsbCkgb2YgdGhlIHBheWxvYWQgaXMgZGVzY3JpYmVkIGFyb3VuZCBwa3QtbGluZXMuCisKK0EgcGt0LWxpbmUgaXMgYSB2YXJpYWJsZSBsZW5ndGggYmluYXJ5IHN0cmluZy4gIFRoZSBmaXJzdCBmb3VyIGJ5dGVzCitvZiB0aGUgbGluZSwgdGhlIHBrdC1sZW4sIGluZGljYXRlcyB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBsaW5lLAoraW4gaGV4YWRlY2ltYWwuICBUaGUgcGt0LWxlbiBpbmNsdWRlcyB0aGUgNCBieXRlcyB1c2VkIHRvIGNvbnRhaW4KK3RoZSBsZW5ndGgncyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KKworQSBwa3QtbGluZSBNQVkgY29udGFpbiBiaW5hcnkgZGF0YSwgc28gaW1wbGVtZW50b3JzIE1VU1QgZW5zdXJlCitwa3QtbGluZSBwYXJzaW5nL2Zvcm1hdHRpbmcgcm91dGluZXMgYXJlIDgtYml0IGNsZWFuLgorCitBIG5vbi1iaW5hcnkgbGluZSBTSE9VTEQgQkUgdGVybWluYXRlZCBieSBhbiBMRiwgd2hpY2ggaWYgcHJlc2VudAorTVVTVCBiZSBpbmNsdWRlZCBpbiB0aGUgdG90YWwgbGVuZ3RoLiBSZWNlaXZlcnMgTVVTVCB0cmVhdCBwa3QtbGluZXMKK3dpdGggbm9uLWJpbmFyeSBkYXRhIHRoZSBzYW1lIHdoZXRoZXIgb3Igbm90IHRoZXkgY29udGFpbiB0aGUgdHJhaWxpbmcKK0xGIChzdHJpcHBpbmcgdGhlIExGIGlmIHByZXNlbnQsIGFuZCBub3QgY29tcGxhaW5pbmcgd2hlbiBpdCBpcworbWlzc2luZykuCisKK1RoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIHBrdC1saW5lJ3MgZGF0YSBjb21wb25lbnQgaXMgNjU1MjAgYnl0ZXMuCitJbXBsZW1lbnRhdGlvbnMgTVVTVCBOT1Qgc2VuZCBwa3QtbGluZSB3aG9zZSBsZW5ndGggZXhjZWVkcyA2NTUyNAorKDY1NTIwIGJ5dGVzIG9mIHBheWxvYWQgKyA0IGJ5dGVzIG9mIGxlbmd0aCBkYXRhKS4KKworSW1wbGVtZW50YXRpb25zIFNIT1VMRCBOT1Qgc2VuZCBhbiBlbXB0eSBwa3QtbGluZSAoIjAwMDQiKS4KKworQSBwa3QtbGluZSB3aXRoIGEgbGVuZ3RoIGZpZWxkIG9mIDAgKCIwMDAwIiksIGNhbGxlZCBhIGZsdXNoLXBrdCwKK2lzIGEgc3BlY2lhbCBjYXNlIGFuZCBNVVNUIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgdGhhbiBhbiBlbXB0eQorcGt0LWxpbmUgKCIwMDA0IikuCisKKy0tLS0KKyAgcGt0LWxpbmUgICAgID0gIGRhdGEtcGt0IC8gZmx1c2gtcGt0CisKKyAgZGF0YS1wa3QgICAgID0gIHBrdC1sZW4gcGt0LXBheWxvYWQKKyAgcGt0LWxlbiAgICAgID0gIDQqKEhFWERJRykKKyAgcGt0LXBheWxvYWQgID0gIChwa3QtbGVuIC0gNCkqKE9DVEVUKQorCisgIGZsdXNoLXBrdCAgICA9ICIwMDAwIgorLS0tLQorCitFeGFtcGxlcyAoYXMgQy1zdHlsZSBzdHJpbmdzKToKKworLS0tLQorICBwa3QtbGluZSAgICAgICAgICBhY3R1YWwgdmFsdWUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICIwMDA2YVxuIiAgICAgICAgICJhXG4iCisgICIwMDA1YSIgICAgICAgICAgICJhIgorICAiMDAwYmZvb2JhclxuIiAgICAiZm9vYmFyXG4iCisgICIwMDA0IiAgICAgICAgICAgICIiCistLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yYWN5LWdpdC50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yYWN5LWdpdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4YmU0ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JhY3ktZ2l0LnR4dApAQCAtMCwwICsxLDIwMSBAQAorVXNlIG9mIGluZGV4IGFuZCBSYWN5IEdpdCBwcm9ibGVtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQmFja2dyb3VuZAorLS0tLS0tLS0tLQorCitUaGUgaW5kZXggaXMgb25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCBkYXRhIHN0cnVjdHVyZXMgaW4gR2l0LgorSXQgcmVwcmVzZW50cyBhIHZpcnR1YWwgd29ya2luZyB0cmVlIHN0YXRlIGJ5IHJlY29yZGluZyBsaXN0IG9mCitwYXRocyBhbmQgdGhlaXIgb2JqZWN0IG5hbWVzIGFuZCBzZXJ2ZXMgYXMgYSBzdGFnaW5nIGFyZWEgdG8KK3dyaXRlIG91dCB0aGUgbmV4dCB0cmVlIG9iamVjdCB0byBiZSBjb21taXR0ZWQuICBUaGUgc3RhdGUgaXMKKyJ2aXJ0dWFsIiBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvLCBhbmQKK29mdGVuIGRvZXMgbm90LCBtYXRjaCB0aGUgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKworVGhlcmUgYXJlIGNhc2VzIEdpdCBuZWVkcyB0byBleGFtaW5lIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZQordmlydHVhbCB3b3JraW5nIHRyZWUgc3RhdGUgaW4gdGhlIGluZGV4IGFuZCB0aGUgZmlsZXMgaW4gdGhlCit3b3JraW5nIHRyZWUuICBUaGUgbW9zdCBvYnZpb3VzIGNhc2UgaXMgd2hlbiB0aGUgdXNlciBhc2tzIGBnaXQKK2RpZmZgIChvciBpdHMgbG93IGxldmVsIGltcGxlbWVudGF0aW9uLCBgZ2l0IGRpZmYtZmlsZXNgKSBvcgorYGdpdC1scy1maWxlcyAtLW1vZGlmaWVkYC4gIEluIGFkZGl0aW9uLCBHaXQgaW50ZXJuYWxseSBjaGVja3MKK2lmIHRoZSBmaWxlcyBpbiB0aGUgd29ya2luZyB0cmVlIGFyZSBkaWZmZXJlbnQgZnJvbSB3aGF0IGFyZQorcmVjb3JkZWQgaW4gdGhlIGluZGV4IHRvIGF2b2lkIHN0b21waW5nIG9uIGxvY2FsIGNoYW5nZXMgaW4gdGhlbQorZHVyaW5nIHBhdGNoIGFwcGxpY2F0aW9uLCBzd2l0Y2hpbmcgYnJhbmNoZXMsIGFuZCBtZXJnaW5nLgorCitJbiBvcmRlciB0byBzcGVlZCB1cCB0aGlzIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgZmlsZXMgaW4gdGhlCit3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBlbnRyaWVzLCB0aGUgaW5kZXggZW50cmllcyByZWNvcmQgdGhlCitpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tIHRoZSBmaWxlc3lzdGVtIHZpYSBgbHN0YXQoMilgIHN5c3RlbQorY2FsbCB3aGVuIHRoZXkgd2VyZSBsYXN0IHVwZGF0ZWQuICBXaGVuIGNoZWNraW5nIGlmIHRoZXkgZGlmZmVyLAorR2l0IGZpcnN0IHJ1bnMgYGxzdGF0KDIpYCBvbiB0aGUgZmlsZXMgYW5kIGNvbXBhcmVzIHRoZSByZXN1bHQKK3dpdGggdGhpcyBpbmZvcm1hdGlvbiAodGhpcyBpcyB3aGF0IHdhcyBvcmlnaW5hbGx5IGRvbmUgYnkgdGhlCitgY2VfbWF0Y2hfc3RhdCgpYCBmdW5jdGlvbiwgYnV0IHRoZSBjdXJyZW50IGNvZGUgZG9lcyBpdCBpbgorYGNlX21hdGNoX3N0YXRfYmFzaWMoKWAgZnVuY3Rpb24pLiAgSWYgc29tZSBvZiB0aGVzZSAiY2FjaGVkCitzdGF0IGluZm9ybWF0aW9uIiBmaWVsZHMgZG8gbm90IG1hdGNoLCBHaXQgY2FuIHRlbGwgdGhhdCB0aGUKK2ZpbGVzIGFyZSBtb2RpZmllZCB3aXRob3V0IGV2ZW4gbG9va2luZyBhdCB0aGVpciBjb250ZW50cy4KKworTm90ZTogbm90IGFsbCBtZW1iZXJzIGluIGBzdHJ1Y3Qgc3RhdGAgb2J0YWluZWQgdmlhIGBsc3RhdCgyKWAKK2FyZSB1c2VkIGZvciB0aGlzIGNvbXBhcmlzb24uICBGb3IgZXhhbXBsZSwgYHN0X2F0aW1lYCBvYnZpb3VzbHkKK2lzIG5vdCB1c2VmdWwuICBDdXJyZW50bHksIEdpdCBjb21wYXJlcyB0aGUgZmlsZSB0eXBlIChyZWd1bGFyCitmaWxlcyB2cyBzeW1ib2xpYyBsaW5rcykgYW5kIGV4ZWN1dGFibGUgYml0cyAob25seSBmb3IgcmVndWxhcgorZmlsZXMpIGZyb20gYHN0X21vZGVgIG1lbWJlciwgYHN0X210aW1lYCBhbmQgYHN0X2N0aW1lYAordGltZXN0YW1wcywgYHN0X3VpZGAsIGBzdF9naWRgLCBgc3RfaW5vYCwgYW5kIGBzdF9zaXplYCBtZW1iZXJzLgorV2l0aCBhIGBVU0VfU1RERVZgIGNvbXBpbGUtdGltZSBvcHRpb24sIGBzdF9kZXZgIGlzIGFsc28KK2NvbXBhcmVkLCBidXQgdGhpcyBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhpcyBtZW1iZXIKK2lzIG5vdCBzdGFibGUgb24gbmV0d29yayBmaWxlc3lzdGVtcy4gIFdpdGggYFVTRV9OU0VDYAorY29tcGlsZS10aW1lIG9wdGlvbiwgYHN0X210aW0udHZfbnNlY2AgYW5kIGBzdF9jdGltLnR2X25zZWNgCittZW1iZXJzIGFyZSBhbHNvIGNvbXBhcmVkLiBPbiBMaW51eCwgdGhpcyBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0CitiZWNhdXNlIGluLWNvcmUgdGltZXN0YW1wcyBjYW4gaGF2ZSBmaW5lciBncmFudWxhcml0eSB0aGFuCitvbi1kaXNrIHRpbWVzdGFtcHMsIHJlc3VsdGluZyBpbiBtZWFuaW5nbGVzcyBjaGFuZ2VzIHdoZW4gYW4KK2lub2RlIGlzIGV2aWN0ZWQgZnJvbSB0aGUgaW5vZGUgY2FjaGUuICBTZWUgY29tbWl0IDhjZTEzYjAKK29mIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90Z2x4L2hpc3RvcnkuZ2l0CisoW1BBVENIXSBTeW5jIGluIGNvcmUgdGltZSBncmFudWxhcml0eSB3aXRoIGZpbGVzeXN0ZW1zLAorMjAwNS0wMS0wNCkuIFRoaXMgcGF0Y2ggaXMgaW5jbHVkZWQgaW4ga2VybmVsIDIuNi4xMSBhbmQgbmV3ZXIsIGJ1dAorb25seSBmaXhlcyB0aGUgaXNzdWUgZm9yIGZpbGUgc3lzdGVtcyB3aXRoIGV4YWN0bHkgMSBucyBvciAxIHMKK3Jlc29sdXRpb24uIE90aGVyIGZpbGUgc3lzdGVtcyBhcmUgc3RpbGwgYnJva2VuIGluIGN1cnJlbnQgTGludXgKK2tlcm5lbHMgKGUuZy4gQ0VQSCwgQ0lGUywgTlRGUywgVURGKSwgc2VlCitodHRwczovL2xrbWwub3JnL2xrbWwvMjAxNS82LzkvNzE0CisKK1JhY3kgR2l0CistLS0tLS0tLQorCitUaGVyZSBpcyBvbmUgc2xpZ2h0IHByb2JsZW0gd2l0aCB0aGUgb3B0aW1pemF0aW9uIGJhc2VkIG9uIHRoZQorY2FjaGVkIHN0YXQgaW5mb3JtYXRpb24uICBDb25zaWRlciB0aGlzIHNlcXVlbmNlOgorCisgIDogbW9kaWZ5ICdmb28nCisgICQgZ2l0IHVwZGF0ZS1pbmRleCAnZm9vJworICA6IG1vZGlmeSAnZm9vJyBhZ2FpbiwgaW4tcGxhY2UsIHdpdGhvdXQgY2hhbmdpbmcgaXRzIHNpemUKKworVGhlIGZpcnN0IGB1cGRhdGUtaW5kZXhgIGNvbXB1dGVzIHRoZSBvYmplY3QgbmFtZSBvZiB0aGUKK2NvbnRlbnRzIG9mIGZpbGUgYGZvb2AgYW5kIHVwZGF0ZXMgdGhlIGluZGV4IGVudHJ5IGZvciBgZm9vYAorYWxvbmcgd2l0aCB0aGUgYHN0cnVjdCBzdGF0YCBpbmZvcm1hdGlvbi4gIElmIHRoZSBtb2RpZmljYXRpb24KK3RoYXQgZm9sbG93cyBpdCBoYXBwZW5zIHZlcnkgZmFzdCBzbyB0aGF0IHRoZSBmaWxlJ3MgYHN0X210aW1lYAordGltZXN0YW1wIGRvZXMgbm90IGNoYW5nZSwgYWZ0ZXIgdGhpcyBzZXF1ZW5jZSwgdGhlIGNhY2hlZCBzdGF0CitpbmZvcm1hdGlvbiB0aGUgaW5kZXggZW50cnkgcmVjb3JkcyBzdGlsbCBleGFjdGx5IG1hdGNoIHdoYXQgeW91Cit3b3VsZCBzZWUgaW4gdGhlIGZpbGVzeXN0ZW0sIGV2ZW4gdGhvdWdoIHRoZSBmaWxlIGBmb29gIGlzIG5vdworZGlmZmVyZW50LgorVGhpcyB3YXksIEdpdCBjYW4gaW5jb3JyZWN0bHkgdGhpbmsgZmlsZXMgaW4gdGhlIHdvcmtpbmcgdHJlZQorYXJlIHVubW9kaWZpZWQgZXZlbiB0aG91Z2ggdGhleSBhY3R1YWxseSBhcmUuICBUaGlzIGlzIGNhbGxlZAordGhlICJyYWN5IEdpdCIgcHJvYmxlbSAoZGlzY292ZXJlZCBieSBQYXNreSksIGFuZCB0aGUgZW50cmllcwordGhhdCBhcHBlYXIgY2xlYW4gd2hlbiB0aGV5IG1heSBub3QgYmUgYmVjYXVzZSBvZiB0aGlzIHByb2JsZW0KK2FyZSBjYWxsZWQgInJhY2lseSBjbGVhbiIuCisKK1RvIGF2b2lkIHRoaXMgcHJvYmxlbSwgR2l0IGRvZXMgdHdvIHRoaW5nczoKKworLiBXaGVuIHRoZSBjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbiBzYXlzIHRoZSBmaWxlIGhhcyBub3QgYmVlbgorICBtb2RpZmllZCwgYW5kIHRoZSBgc3RfbXRpbWVgIGlzIHRoZSBzYW1lIGFzIChvciBuZXdlciB0aGFuKQorICB0aGUgdGltZXN0YW1wIG9mIHRoZSBpbmRleCBmaWxlIGl0c2VsZiAod2hpY2ggaXMgdGhlIHRpbWUgYGdpdAorICB1cGRhdGUtaW5kZXggZm9vYCBmaW5pc2hlZCBydW5uaW5nIGluIHRoZSBhYm92ZSBleGFtcGxlKSwgaXQKKyAgYWxzbyBjb21wYXJlcyB0aGUgY29udGVudHMgd2l0aCB0aGUgb2JqZWN0IHJlZ2lzdGVyZWQgaW4gdGhlCisgIGluZGV4IGVudHJ5IHRvIG1ha2Ugc3VyZSB0aGV5IG1hdGNoLgorCisuIFdoZW4gdGhlIGluZGV4IGZpbGUgaXMgdXBkYXRlZCB0aGF0IGNvbnRhaW5zIHJhY2lseSBjbGVhbgorICBlbnRyaWVzLCBjYWNoZWQgYHN0X3NpemVgIGluZm9ybWF0aW9uIGlzIHRydW5jYXRlZCB0byB6ZXJvCisgIGJlZm9yZSB3cml0aW5nIGEgbmV3IHZlcnNpb24gb2YgdGhlIGluZGV4IGZpbGUuCisKK0JlY2F1c2UgdGhlIGluZGV4IGZpbGUgaXRzZWxmIGlzIHdyaXR0ZW4gYWZ0ZXIgY29sbGVjdGluZyBhbGwKK3RoZSBzdGF0IGluZm9ybWF0aW9uIGZyb20gdXBkYXRlZCBwYXRocywgYHN0X210aW1lYCB0aW1lc3RhbXAgb2YKK2l0IGlzIHVzdWFsbHkgdGhlIHNhbWUgYXMgb3IgbmV3ZXIgdGhhbiBhbnkgb2YgdGhlIHBhdGhzIHRoZQoraW5kZXggY29udGFpbnMuICBBbmQgbm8gbWF0dGVyIGhvdyBxdWljayB0aGUgbW9kaWZpY2F0aW9uIHRoYXQKK2ZvbGxvd3MgYGdpdCB1cGRhdGUtaW5kZXggZm9vYCBmaW5pc2hlcywgdGhlIHJlc3VsdGluZworYHN0X210aW1lYCB0aW1lc3RhbXAgb24gYGZvb2AgY2Fubm90IGdldCBhIHZhbHVlIGVhcmxpZXIKK3RoYW4gdGhlIGluZGV4IGZpbGUuICBUaGVyZWZvcmUsIGluZGV4IGVudHJpZXMgdGhhdCBjYW4gYmUKK3JhY2lseSBjbGVhbiBhcmUgbGltaXRlZCB0byB0aGUgb25lcyB0aGF0IGhhdmUgdGhlIHNhbWUKK3RpbWVzdGFtcCBhcyB0aGUgaW5kZXggZmlsZSBpdHNlbGYuCisKK1RoZSBjYWxsZXJzIHRoYXQgd2FudCB0byBjaGVjayBpZiBhbiBpbmRleCBlbnRyeSBtYXRjaGVzIHRoZQorY29ycmVzcG9uZGluZyBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUgY29udGludWUgdG8gY2FsbAorYGNlX21hdGNoX3N0YXQoKWAsIGJ1dCB3aXRoIHRoaXMgY2hhbmdlLCBgY2VfbWF0Y2hfc3RhdCgpYCB1c2VzCitgY2VfbW9kaWZpZWRfY2hlY2tfZnMoKWAgdG8gc2VlIGlmIHJhY2lseSBjbGVhbiBvbmVzIGFyZQorYWN0dWFsbHkgY2xlYW4gYWZ0ZXIgY29tcGFyaW5nIHRoZSBjYWNoZWQgc3RhdCBpbmZvcm1hdGlvbiB1c2luZworYGNlX21hdGNoX3N0YXRfYmFzaWMoKWAuCisKK1RoZSBwcm9ibGVtIHRoZSBsYXR0ZXIgc29sdmVzIGlzIHRoaXMgc2VxdWVuY2U6CisKKyAgJCBnaXQgdXBkYXRlLWluZGV4ICdmb28nCisgIDogbW9kaWZ5ICdmb28nIGluLXBsYWNlIHdpdGhvdXQgY2hhbmdpbmcgaXRzIHNpemUKKyAgOiB3YWl0IGZvciBlbm91Z2ggdGltZQorICAkIGdpdCB1cGRhdGUtaW5kZXggJ2JhcicKKworV2l0aG91dCB0aGUgbGF0dGVyLCB0aGUgdGltZXN0YW1wIG9mIHRoZSBpbmRleCBmaWxlIGdldHMgYSBuZXdlcgordmFsdWUsIGFuZCBmYWxzZWx5IGNsZWFuIGVudHJ5IGBmb29gIHdvdWxkIG5vdCBiZSBjYXVnaHQgYnkgdGhlCit0aW1lc3RhbXAgY29tcGFyaXNvbiBjaGVjayBkb25lIHdpdGggdGhlIGZvcm1lciBsb2dpYyBhbnltb3JlLgorVGhlIGxhdHRlciBtYWtlcyBzdXJlIHRoYXQgdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uIGZvciBgZm9vYAord291bGQgbmV2ZXIgbWF0Y2ggd2l0aCB0aGUgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlLCBzbyBsYXRlcgorY2hlY2tzIGJ5IGBjZV9tYXRjaF9zdGF0X2Jhc2ljKClgIHdvdWxkIHJlcG9ydCB0aGF0IHRoZSBpbmRleCBlbnRyeQorZG9lcyBub3QgbWF0Y2ggdGhlIGZpbGUgYW5kIEdpdCBkb2VzIG5vdCBoYXZlIHRvIGZhbGwgYmFjayBvbiBtb3JlCitleHBlbnNpdmUgYGNlX21vZGlmaWVkX2NoZWNrX2ZzKClgLgorCisKK1J1bnRpbWUgcGVuYWx0eQorLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBydW50aW1lIHBlbmFsdHkgb2YgZmFsbGluZyBiYWNrIHRvIGBjZV9tb2RpZmllZF9jaGVja19mcygpYAorZnJvbSBgY2VfbWF0Y2hfc3RhdCgpYCBjYW4gYmUgdmVyeSBleHBlbnNpdmUgd2hlbiB0aGVyZSBhcmUgbWFueQorcmFjaWx5IGNsZWFuIGVudHJpZXMuICBBbiBvYnZpb3VzIHdheSB0byBhcnRpZmljaWFsbHkgY3JlYXRlCit0aGlzIHNpdHVhdGlvbiBpcyB0byBnaXZlIHRoZSBzYW1lIHRpbWVzdGFtcCB0byBhbGwgdGhlIGZpbGVzIGluCit0aGUgd29ya2luZyB0cmVlIGluIGEgbGFyZ2UgcHJvamVjdCwgcnVuIGBnaXQgdXBkYXRlLWluZGV4YCBvbgordGhlbSwgYW5kIGdpdmUgdGhlIHNhbWUgdGltZXN0YW1wIHRvIHRoZSBpbmRleCBmaWxlOgorCisgICQgZGF0ZSA+LmRhdGVzdGFtcAorICAkIGdpdCBscy1maWxlcyB8IHhhcmdzIHRvdWNoIC1yIC5kYXRlc3RhbXAKKyAgJCBnaXQgbHMtZmlsZXMgfCBnaXQgdXBkYXRlLWluZGV4IC0tc3RkaW4KKyAgJCB0b3VjaCAtciAuZGF0ZXN0YW1wIC5naXQvaW5kZXgKKworVGhpcyB3aWxsIG1ha2UgYWxsIGluZGV4IGVudHJpZXMgcmFjaWx5IGNsZWFuLiAgVGhlIGxpbnV4IHByb2plY3QsIGZvcgorZXhhbXBsZSwgdGhlcmUgYXJlIG92ZXIgMjAsMDAwIGZpbGVzIGluIHRoZSB3b3JraW5nIHRyZWUuICBPbiBteQorQXRobG9uIDY0IFgyIDM4MDArLCBhZnRlciB0aGUgYWJvdmU6CisKKyAgJCAvdXNyL2Jpbi90aW1lIGdpdCBkaWZmLWZpbGVzCisgIDEuNjh1c2VyIDAuNTRzeXN0ZW0gMDowMi4yMmVsYXBzZWQgMTAwJUNQVSAoMGF2Z3RleHQrMGF2Z2RhdGEgMG1heHJlc2lkZW50KWsKKyAgMGlucHV0cyswb3V0cHV0cyAoMG1ham9yKzY3MTExbWlub3IpcGFnZWZhdWx0cyAwc3dhcHMKKyAgJCBnaXQgdXBkYXRlLWluZGV4IE1BSU5UQUlORVJTCisgICQgL3Vzci9iaW4vdGltZSBnaXQgZGlmZi1maWxlcworICAwLjAydXNlciAwLjEyc3lzdGVtIDA6MDAuMTRlbGFwc2VkIDEwMCVDUFUgKDBhdmd0ZXh0KzBhdmdkYXRhIDBtYXhyZXNpZGVudClrCisgIDBpbnB1dHMrMG91dHB1dHMgKDBtYWpvcis5MzVtaW5vcilwYWdlZmF1bHRzIDBzd2FwcworCitSdW5uaW5nIGBnaXQgdXBkYXRlLWluZGV4YCBpbiB0aGUgbWlkZGxlIGNoZWNrZWQgdGhlIHJhY2lseQorY2xlYW4gZW50cmllcywgYW5kIGxlZnQgdGhlIGNhY2hlZCBgc3RfbXRpbWVgIGZvciBhbGwgdGhlIHBhdGhzCitpbnRhY3QgYmVjYXVzZSB0aGV5IHdlcmUgYWN0dWFsbHkgY2xlYW4gKHNvIHRoaXMgc3RlcCB0b29rIGFib3V0Cit0aGUgc2FtZSBhbW91bnQgb2YgdGltZSBhcyB0aGUgZmlyc3QgYGdpdCBkaWZmLWZpbGVzYCkuICBBZnRlcgordGhhdCwgdGhleSBhcmUgbm90IHJhY2lseSBjbGVhbiBhbnltb3JlIGJ1dCBhcmUgdHJ1bHkgY2xlYW4sIHNvCit0aGUgc2Vjb25kIGludm9jYXRpb24gb2YgYGdpdCBkaWZmLWZpbGVzYCBmdWxseSB0b29rIGFkdmFudGFnZQorb2YgdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uLgorCisKK0F2b2lkaW5nIHJ1bnRpbWUgcGVuYWx0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIG9yZGVyIHRvIGF2b2lkIHRoZSBhYm92ZSBydW50aW1lIHBlbmFsdHksIHBvc3QgMS40LjIgR2l0IHVzZWQKK3RvIGhhdmUgYSBjb2RlIHRoYXQgbWFkZSBzdXJlIHRoZSBpbmRleCBmaWxlCitnb3QgdGltZXN0YW1wIG5ld2VyIHRoYW4gdGhlIHlvdW5nZXN0IGZpbGVzIGluIHRoZSBpbmRleCB3aGVuCit0aGVyZSBhcmUgbWFueSB5b3VuZyBmaWxlcyB3aXRoIHRoZSBzYW1lIHRpbWVzdGFtcCBhcyB0aGUKK3Jlc3VsdGluZyBpbmRleCBmaWxlIHdvdWxkIG90aGVyd2lzZSB3b3VsZCBoYXZlIGJ5IHdhaXRpbmcKK2JlZm9yZSBmaW5pc2hpbmcgd3JpdGluZyB0aGUgaW5kZXggZmlsZSBvdXQuCisKK0kgc3VzcGVjdGVkIHRoYXQgaW4gcHJhY3RpY2UgdGhlIHNpdHVhdGlvbiB3aGVyZSBtYW55IHBhdGhzIGluIHRoZQoraW5kZXggYXJlIGFsbCByYWNpbHkgY2xlYW4gd2FzIHF1aXRlIHJhcmUuICBUaGUgb25seSBjb2RlIHBhdGhzCit0aGF0IGNhbiByZWNvcmQgcmVjZW50IHRpbWVzdGFtcCBmb3IgbGFyZ2UgbnVtYmVyIG9mIHBhdGhzIGFyZToKKworLiBJbml0aWFsIGBnaXQgYWRkIC5gIG9mIGEgbGFyZ2UgcHJvamVjdC4KKworLiBgZ2l0IGNoZWNrb3V0YCBvZiBhIGxhcmdlIHByb2plY3QgZnJvbSBhbiBlbXB0eSBpbmRleCBpbnRvIGFuCisgIHVucG9wdWxhdGVkIHdvcmtpbmcgdHJlZS4KKworTm90ZTogc3dpdGNoaW5nIGJyYW5jaGVzIHdpdGggYGdpdCBjaGVja291dGAga2VlcHMgdGhlIGNhY2hlZAorc3RhdCBpbmZvcm1hdGlvbiBvZiBleGlzdGluZyB3b3JraW5nIHRyZWUgZmlsZXMgdGhhdCBhcmUgdGhlCitzYW1lIGJldHdlZW4gdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCB0aGUgbmV3IGJyYW5jaCwgd2hpY2ggYXJlCithbGwgb2xkZXIgdGhhbiB0aGUgcmVzdWx0aW5nIGluZGV4IGZpbGUsIGFuZCB0aGV5IHdpbGwgbm90CitiZWNvbWUgcmFjaWx5IGNsZWFuLiAgT25seSB0aGUgZmlsZXMgdGhhdCBhcmUgYWN0dWFsbHkgY2hlY2tlZAorb3V0IGNhbiBiZWNvbWUgcmFjaWx5IGNsZWFuLgorCitJbiBhIGxhcmdlIHByb2plY3Qgd2hlcmUgcmFjaW5lc3MgYXZvaWRhbmNlIGNvc3QgcmVhbGx5IG1hdHRlcnMsCitob3dldmVyLCB0aGUgaW5pdGlhbCBjb21wdXRhdGlvbiBvZiBhbGwgb2JqZWN0IG5hbWVzIGluIHRoZQoraW5kZXggdGFrZXMgbW9yZSB0aGFuIG9uZSBzZWNvbmQsIGFuZCB0aGUgaW5kZXggZmlsZSBpcyB3cml0dGVuCitvdXQgYWZ0ZXIgYWxsIHRoYXQgaGFwcGVucy4gIFRoZXJlZm9yZSB0aGUgdGltZXN0YW1wIG9mIHRoZQoraW5kZXggZmlsZSB3aWxsIGJlIG1vcmUgdGhhbiBvbmUgc2Vjb25kcyBsYXRlciB0aGFuIHRoZQoreW91bmdlc3QgZmlsZSBpbiB0aGUgd29ya2luZyB0cmVlLiAgVGhpcyBtZWFucyB0aGF0IGluIHRoZXNlCitjYXNlcyB0aGVyZSBhY3R1YWxseSB3aWxsIG5vdCBiZSBhbnkgcmFjaWx5IGNsZWFuIGVudHJ5IGluCit0aGUgcmVzdWx0aW5nIGluZGV4LgorCitCYXNlZCBvbiB0aGlzIGRpc2N1c3Npb24sIHRoZSBjdXJyZW50IGNvZGUgZG9lcyBub3QgdXNlIHRoZQorIndvcmthcm91bmQiIHRvIGF2b2lkIHRoZSBydW50aW1lIHBlbmFsdHkgdGhhdCBkb2VzIG5vdCBleGlzdCBpbgorcHJhY3RpY2UgYW55bW9yZS4gIFRoaXMgd2FzIGRvbmUgd2l0aCBjb21taXQgMGZjODJjZmYgb24gQXVnIDE1LAorMjAwNi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JlcG9zaXRvcnktdmVyc2lvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yZXBvc2l0b3J5LXZlcnNpb24udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYWQzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9yZXBvc2l0b3J5LXZlcnNpb24udHh0CkBAIC0wLDAgKzEsODggQEAKK0dpdCBSZXBvc2l0b3J5IEZvcm1hdCBWZXJzaW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0V2ZXJ5IGdpdCByZXBvc2l0b3J5IGlzIG1hcmtlZCB3aXRoIGEgbnVtZXJpYyB2ZXJzaW9uIGluIHRoZQorYGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb25gIGtleSBvZiBpdHMgYGNvbmZpZ2AgZmlsZS4gVGhpcyB2ZXJzaW9uCitzcGVjaWZpZXMgdGhlIHJ1bGVzIGZvciBvcGVyYXRpbmcgb24gdGhlIG9uLWRpc2sgcmVwb3NpdG9yeSBkYXRhLiBBbgoraW1wbGVtZW50YXRpb24gb2YgZ2l0IHdoaWNoIGRvZXMgbm90IHVuZGVyc3RhbmQgYSBwYXJ0aWN1bGFyIHZlcnNpb24KK2FkdmVydGlzZWQgYnkgYW4gb24tZGlzayByZXBvc2l0b3J5IE1VU1QgTk9UIG9wZXJhdGUgb24gdGhhdCByZXBvc2l0b3J5OworZG9pbmcgc28gcmlza3Mgbm90IG9ubHkgcHJvZHVjaW5nIHdyb25nIHJlc3VsdHMsIGJ1dCBhY3R1YWxseSBsb3NpbmcKK2RhdGEuCisKK0JlY2F1c2Ugb2YgdGhpcyBydWxlLCB2ZXJzaW9uIGJ1bXBzIHNob3VsZCBiZSBrZXB0IHRvIGFuIGFic29sdXRlCittaW5pbXVtLiBJbnN0ZWFkLCB3ZSBnZW5lcmFsbHkgcHJlZmVyIHRoZXNlIHN0cmF0ZWdpZXM6CisKKyAgLSBidW1waW5nIGZvcm1hdCB2ZXJzaW9uIG51bWJlcnMgb2YgaW5kaXZpZHVhbCBkYXRhIGZpbGVzIChlLmcuLAorICAgIGluZGV4LCBwYWNrZmlsZXMsIGV0YykuIFRoaXMgcmVzdHJpY3RzIHRoZSBpbmNvbXBhdGliaWxpdGllcyBvbmx5IHRvCisgICAgdGhvc2UgZmlsZXMuCisKKyAgLSBpbnRyb2R1Y2luZyBuZXcgZGF0YSB0aGF0IGdyYWNlZnVsbHkgZGVncmFkZXMgd2hlbiB1c2VkIGJ5IG9sZGVyCisgICAgY2xpZW50cyAoZS5nLiwgcGFjayBiaXRtYXAgZmlsZXMgYXJlIGlnbm9yZWQgYnkgb2xkZXIgY2xpZW50cywgd2hpY2gKKyAgICBzaW1wbHkgZG8gbm90IHRha2UgYWR2YW50YWdlIG9mIHRoZSBvcHRpbWl6YXRpb24gdGhleSBwcm92aWRlKS4KKworQSB3aG9sZS1yZXBvc2l0b3J5IGZvcm1hdCB2ZXJzaW9uIGJ1bXAgc2hvdWxkIG9ubHkgYmUgcGFydCBvZiBhIGNoYW5nZQordGhhdCBjYW5ub3QgYmUgaW5kZXBlbmRlbnRseSB2ZXJzaW9uZWQuIEZvciBpbnN0YW5jZSwgaWYgb25lIHdlcmUgdG8KK2NoYW5nZSB0aGUgcmVhY2hhYmlsaXR5IHJ1bGVzIGZvciBvYmplY3RzLCBvciB0aGUgcnVsZXMgZm9yIGxvY2tpbmcKK3JlZnMsIHRoYXQgd291bGQgcmVxdWlyZSBhIGJ1bXAgb2YgdGhlIHJlcG9zaXRvcnkgZm9ybWF0IHZlcnNpb24uCisKK05vdGUgdGhhdCB0aGlzIGFwcGxpZXMgb25seSB0byBhY2Nlc3NpbmcgdGhlIHJlcG9zaXRvcnkncyBkaXNrIGNvbnRlbnRzCitkaXJlY3RseS4gQW4gb2xkZXIgY2xpZW50IHdoaWNoIHVuZGVyc3RhbmRzIG9ubHkgZm9ybWF0IGAwYCBtYXkgc3RpbGwKK2Nvbm5lY3QgdmlhIGBnaXQ6Ly9gIHRvIGEgcmVwb3NpdG9yeSB1c2luZyBmb3JtYXQgYDFgLCBhcyBsb25nIGFzIHRoZQorc2VydmVyIHByb2Nlc3MgdW5kZXJzdGFuZHMgZm9ybWF0IGAxYC4KKworVGhlIHByZWZlcnJlZCBzdHJhdGVneSBmb3Igcm9sbGluZyBvdXQgYSB2ZXJzaW9uIGJ1bXAgKHdoZXRoZXIgd2hvbGUKK3JlcG9zaXRvcnkgb3IgZm9yIGEgc2luZ2xlIGZpbGUpIGlzIHRvIHRlYWNoIGdpdCB0byByZWFkIHRoZSBuZXcgZm9ybWF0LAorYW5kIGFsbG93IHdyaXRpbmcgdGhlIG5ldyBmb3JtYXQgd2l0aCBhIGNvbmZpZyBzd2l0Y2ggb3IgY29tbWFuZCBsaW5lCitvcHRpb24gKGZvciBleHBlcmltZW50YXRpb24gb3IgZm9yIHRob3NlIHdobyBkbyBub3QgY2FyZSBhYm91dCBiYWNrd2FyZHMKK2NvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBnaXRzKS4gVGhlbiBhZnRlciBhIGxvbmcgcGVyaW9kIHRvIGFsbG93IHRoZQorcmVhZGluZyBjYXBhYmlsaXR5IHRvIGJlY29tZSBjb21tb24sIHdlIG1heSBzd2l0Y2ggdG8gd3JpdGluZyB0aGUgbmV3Citmb3JtYXQgYnkgZGVmYXVsdC4KKworVGhlIGN1cnJlbnRseSBkZWZpbmVkIGZvcm1hdCB2ZXJzaW9ucyBhcmU6CisKK1ZlcnNpb24gYDBgCistLS0tLS0tLS0tLQorCitUaGlzIGlzIHRoZSBmb3JtYXQgZGVmaW5lZCBieSB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIGdpdCwgaW5jbHVkaW5nIGJ1dAorbm90IGxpbWl0ZWQgdG8gdGhlIGZvcm1hdCBvZiB0aGUgcmVwb3NpdG9yeSBkaXJlY3RvcnksIHRoZSByZXBvc2l0b3J5Citjb25maWd1cmF0aW9uIGZpbGUsIGFuZCB0aGUgb2JqZWN0IGFuZCByZWYgc3RvcmFnZS4gU3BlY2lmeWluZyB0aGUKK2NvbXBsZXRlIGJlaGF2aW9yIG9mIGdpdCBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgZG9jdW1lbnQuCisKK1ZlcnNpb24gYDFgCistLS0tLS0tLS0tLQorCitUaGlzIGZvcm1hdCBpcyBpZGVudGljYWwgdG8gdmVyc2lvbiBgMGAsIHdpdGggdGhlIGZvbGxvd2luZyBleGNlcHRpb25zOgorCisgIDEuIFdoZW4gcmVhZGluZyB0aGUgYGNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb25gIHZhcmlhYmxlLCBhIGdpdAorICAgICBpbXBsZW1lbnRhdGlvbiB3aGljaCBzdXBwb3J0cyB2ZXJzaW9uIDEgTVVTVCBhbHNvIHJlYWQgYW55CisgICAgIGNvbmZpZ3VyYXRpb24ga2V5cyBmb3VuZCBpbiB0aGUgYGV4dGVuc2lvbnNgIHNlY3Rpb24gb2YgdGhlCisgICAgIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworICAyLiBJZiBhIHZlcnNpb24tMSByZXBvc2l0b3J5IHNwZWNpZmllcyBhbnkgYGV4dGVuc2lvbnMuKmAga2V5cyB0aGF0CisgICAgIHRoZSBydW5uaW5nIGdpdCBoYXMgbm90IGltcGxlbWVudGVkLCB0aGUgb3BlcmF0aW9uIE1VU1QgTk9UCisgICAgIHByb2NlZWQuIFNpbWlsYXJseSwgaWYgdGhlIHZhbHVlIG9mIGFueSBrbm93biBrZXkgaXMgbm90IHVuZGVyc3Rvb2QKKyAgICAgYnkgdGhlIGltcGxlbWVudGF0aW9uLCB0aGUgb3BlcmF0aW9uIE1VU1QgTk9UIHByb2NlZWQuCisKK05vdGUgdGhhdCBpZiBubyBleHRlbnNpb25zIGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZyBmaWxlLCB0aGVuCitgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbmAgU0hPVUxEIGJlIHNldCB0byBgMGAgKHNldHRpbmcgaXQgdG8gYDFgCitwcm92aWRlcyBubyBiZW5lZml0LCBhbmQgbWFrZXMgdGhlIHJlcG9zaXRvcnkgaW5jb21wYXRpYmxlIHdpdGggb2xkZXIKK2ltcGxlbWVudGF0aW9ucyBvZiBnaXQpLgorCitUaGlzIGRvY3VtZW50IHdpbGwgc2VydmUgYXMgdGhlIG1hc3RlciBsaXN0IGZvciBleHRlbnNpb25zLiBBbnkKK2ltcGxlbWVudGF0aW9uIHdpc2hpbmcgdG8gZGVmaW5lIGEgbmV3IGV4dGVuc2lvbiBzaG91bGQgbWFrZSBhIG5vdGUgb2YKK2l0IGhlcmUsIGluIG9yZGVyIHRvIGNsYWltIHRoZSBuYW1lLgorCitUaGUgZGVmaW5lZCBleHRlbnNpb25zIGFyZToKKworYG5vb3BgCit+fn5+fn4KKworVGhpcyBleHRlbnNpb24gZG9lcyBub3QgY2hhbmdlIGdpdCdzIGJlaGF2aW9yIGF0IGFsbC4gSXQgaXMgdXNlZnVsIG9ubHkKK2ZvciB0ZXN0aW5nIGZvcm1hdC0xIGNvbXBhdGliaWxpdHkuCisKK2BwcmVjaW91c09iamVjdHNgCit+fn5+fn5+fn5+fn5+fn5+fgorCitXaGVuIHRoZSBjb25maWcga2V5IGBleHRlbnNpb25zLnByZWNpb3VzT2JqZWN0c2AgaXMgc2V0IHRvIGB0cnVlYCwKK29iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnkgTVVTVCBOT1QgYmUgZGVsZXRlZCAoZS5nLiwgYnkgYGdpdC1wcnVuZWAgb3IKK2BnaXQgcmVwYWNrIC1kYCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9zZW5kLXBhY2stcGlwZWxpbmUudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2VuZC1wYWNrLXBpcGVsaW5lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjVhMGJjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2VuZC1wYWNrLXBpcGVsaW5lLnR4dApAQCAtMCwwICsxLDYzIEBACitHaXQtc2VuZC1wYWNrIGludGVybmFscworPT09PT09PT09PT09PT09PT09PT09PT0KKworT3ZlcmFsbCBvcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tCisKKy4gQ29ubmVjdHMgdG8gdGhlIHJlbW90ZSBzaWRlIGFuZCBpbnZva2VzIGdpdC1yZWNlaXZlLXBhY2suCisKKy4gTGVhcm5zIHdoYXQgcmVmcyB0aGUgcmVtb3RlIGhhcyBhbmQgd2hhdCBjb21taXQgdGhleSBwb2ludCBhdC4KKyAgTWF0Y2hlcyB0aGVtIHRvIHRoZSByZWZzcGVjcyB3ZSBhcmUgcHVzaGluZy4KKworLiBDaGVja3MgaWYgdGhlcmUgYXJlIG5vbi1mYXN0LWZvcndhcmRzLiAgVW5saWtlIGZldGNoLXBhY2ssCisgIHRoZSByZXBvc2l0b3J5IHNlbmQtcGFjayBydW5zIGluIGlzIHN1cHBvc2VkIHRvIGJlIGEgc3VwZXJzZXQKKyAgb2YgdGhlIHJlY2lwaWVudCBpbiBmYXN0LWZvcndhcmQgY2FzZXMsIHNvIHRoZXJlIGlzIG5vIG5lZWQKKyAgZm9yIHdhbnQvaGF2ZSBleGNoYW5nZXMsIGFuZCBmYXN0LWZvcndhcmQgY2hlY2sgY2FuIGJlIGRvbmUKKyAgbG9jYWxseS4gIFRlbGwgdGhlIHJlc3VsdCB0byB0aGUgb3RoZXIgZW5kLgorCisuIENhbGxzIHBhY2tfb2JqZWN0cygpIHdoaWNoIGdlbmVyYXRlcyBhIHBhY2tmaWxlIGFuZCBzZW5kcyBpdAorICBvdmVyIHRvIHRoZSBvdGhlciBlbmQuCisKKy4gSWYgdGhlIHJlbW90ZSBzaWRlIGlzIG5ldyBlbm91Z2ggKHYxLjEuMCBvciBsYXRlciksIHdhaXQgZm9yCisgIHRoZSB1bnBhY2sgYW5kIGhvb2sgc3RhdHVzIGZyb20gdGhlIG90aGVyIGVuZC4KKworLiBFeGl0IHdpdGggYXBwcm9wcmlhdGUgZXJyb3IgY29kZXMuCisKKworUGFja19vYmplY3RzIHBpcGVsaW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmdW5jdGlvbiBnZXRzIG9uZSBmaWxlIGRlc2NyaXB0b3IgKGBmZGApIHdoaWNoIGlzIGVpdGhlciBhCitzb2NrZXQgKG92ZXIgdGhlIG5ldHdvcmspIG9yIGEgcGlwZSAobG9jYWwpLiAgV2hhdCdzIHdyaXR0ZW4gdG8KK3RoaXMgZmQgZ29lcyB0byBnaXQtcmVjZWl2ZS1wYWNrIHRvIGJlIHVucGFja2VkLgorCisgICAgc2VuZC1wYWNrIC0tLT4gZmQgLS0tPiByZWNlaXZlLXBhY2sKKworVGhlIGZ1bmN0aW9uIHBhY2tfb2JqZWN0cyBjcmVhdGVzIGEgcGlwZSBhbmQgdGhlbiBmb3Jrcy4gIFRoZQorZm9ya2VkIGNoaWxkIGV4ZWNzIHBhY2stb2JqZWN0cyB3aXRoIC0tcmV2cyB0byByZWNlaXZlIHJldmlzaW9uCitwYXJhbWV0ZXJzIGZyb20gaXRzIHN0YW5kYXJkIGlucHV0LiBUaGlzIHByb2Nlc3Mgd2lsbCB3cml0ZSB0aGUKK3BhY2tmaWxlIHRvIHRoZSBvdGhlciBlbmQuCisKKyAgICBzZW5kLXBhY2sKKyAgICAgICB8CisgICAgICAgcGFja19vYmplY3RzKCkgLS0tPiBmZCAtLS0+IHJlY2VpdmUtcGFjaworICAgICAgICAgIHwgXiAocGlwZSkKKwkgIHYgfAorICAgICAgICAgKGNoaWxkKQorCitUaGUgY2hpbGQgZHVwMidzIHRvIGFycmFuZ2UgaXRzIHN0YW5kYXJkIG91dHB1dCB0byBnbyBiYWNrIHRvCit0aGUgb3RoZXIgZW5kLCBhbmQgcmVhZCBpdHMgc3RhbmRhcmQgaW5wdXQgdG8gY29tZSBmcm9tIHRoZQorcGlwZS4gIEFmdGVyIHRoYXQgaXQgZXhlYydzIHBhY2stb2JqZWN0cy4gIE9uIHRoZSBvdGhlciBoYW5kLAordGhlIHBhcmVudCBwcm9jZXNzLCBiZWZvcmUgc3RhcnRpbmcgdG8gZmVlZCB0aGUgY2hpbGQgcGlwZWxpbmUsCitjbG9zZXMgdGhlIHJlYWRpbmcgc2lkZSBvZiB0aGUgcGlwZSBhbmQgZmQgdG8gcmVjZWl2ZS1wYWNrLgorCisgICAgc2VuZC1wYWNrCisgICAgICAgfAorICAgICAgIHBhY2tfb2JqZWN0cyhwYXJlbnQpCisgICAgICAgICAgfAorCSAgdiBbMF0KKyAgICAgICAgIHBhY2stb2JqZWN0cyBbMF0gLS0tPiByZWNlaXZlLXBhY2sKKworCitbamM6IHRoZSBwaXBlbGluZSB3YXMgbXVjaCBtb3JlIGNvbXBsZXggYW5kIG5lZWRlZCBkb2N1bWVudGF0aW9uIGJlZm9yZQorIEkgdW5kZXJzdG9vZCBhbiBlYXJsaWVyIGJ1ZywgYnV0IG5vdyBpdCBpcyB0cml2aWFsIGFuZCBzdHJhaWdodGZvcndhcmQuXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2hhbGxvdy50eHQgYi9Eb2N1bWVudGF0aW9uL3RlY2huaWNhbC9zaGFsbG93LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTgzYjE1Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvc2hhbGxvdy50eHQKQEAgLTAsMCArMSw1OCBAQAorU2hhbGxvdyBjb21taXRzCis9PT09PT09PT09PT09PT0KKworLkRlZmluaXRpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorU2hhbGxvdyBjb21taXRzIGRvIGhhdmUgcGFyZW50cywgYnV0IG5vdCBpbiB0aGUgc2hhbGxvdworcmVwbywgYW5kIHRoZXJlZm9yZSBncmFmdHMgYXJlIGludHJvZHVjZWQgcHJldGVuZGluZyB0aGF0Cit0aGVzZSBjb21taXRzIGhhdmUgbm8gcGFyZW50cy4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgYmFzaWMgaWRlYSBpcyB0byB3cml0ZSB0aGUgU0hBLTFzIG9mIHNoYWxsb3cgY29tbWl0cyBpbnRvCiskR0lUX0RJUi9zaGFsbG93LCBhbmQgaGFuZGxlIGl0cyBjb250ZW50cyBsaWtlIHRoZSBjb250ZW50cworb2YgJEdJVF9ESVIvaW5mby9ncmFmdHMgKHdpdGggdGhlIGRpZmZlcmVuY2UgdGhhdCBzaGFsbG93CitjYW5ub3QgY29udGFpbiBwYXJlbnQgaW5mb3JtYXRpb24pLgorCitUaGlzIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBhIG5ldyBmaWxlIGluc3RlYWQgb2YgZ3JhZnRzLCBvcgorZXZlbiB0aGUgY29uZmlnLCBzaW5jZSB0aGUgdXNlciBzaG91bGQgbm90IHRvdWNoIHRoYXQgZmlsZQorYXQgYWxsIChldmVuIHRocm91Z2hvdXQgZGV2ZWxvcG1lbnQgb2YgdGhlIHNoYWxsb3cgY2xvbmUsIGl0Cit3YXMgbmV2ZXIgbWFudWFsbHkgZWRpdGVkISkuCisKK0VhY2ggbGluZSBjb250YWlucyBleGFjdGx5IG9uZSBTSEEtMS4gV2hlbiByZWFkLCBhIGNvbW1pdF9ncmFmdAord2lsbCBiZSBjb25zdHJ1Y3RlZCwgd2hpY2ggaGFzIG5yX3BhcmVudCA8IDAgdG8gbWFrZSBpdCBlYXNpZXIKK3RvIGRpc2Nlcm4gZnJvbSB1c2VyIHByb3ZpZGVkIGdyYWZ0cy4KKworU2luY2UgZnNjay1vYmplY3RzIHJlbGllcyBvbiB0aGUgbGlicmFyeSB0byByZWFkIHRoZSBvYmplY3RzLAoraXQgaG9ub3VycyBzaGFsbG93IGNvbW1pdHMgYXV0b21hdGljYWxseS4KKworVGhlcmUgYXJlIHNvbWUgdW5maW5pc2hlZCBlbmRzIG9mIHRoZSB3aG9sZSBzaGFsbG93IGJ1c2luZXNzOgorCistIG1heWJlIHdlIGhhdmUgdG8gZm9yY2Ugbm9uLXRoaW4gcGFja3Mgd2hlbiBmZXRjaGluZyBpbnRvIGEKKyAgc2hhbGxvdyByZXBvIChBVE0gdGhleSBhcmUgZm9yY2VkIG5vbi10aGluKS4KKworLSBBIHNwZWNpYWwgaGFuZGxpbmcgb2YgYSBzaGFsbG93IHVwc3RyZWFtIGlzIG5lZWRlZC4gQXQgc29tZQorICBzdGFnZSwgdXBsb2FkLXBhY2sgaGFzIHRvIGNoZWNrIGlmIGl0IHNlbmRzIGEgc2hhbGxvdyBjb21taXQsCisgIGFuZCBpdCBzaG91bGQgc2VuZCB0aGF0IGluZm9ybWF0aW9uIGVhcmx5IChvciBmYWlsLCBpZiB0aGUKKyAgY2xpZW50IGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyByZXBvc2l0b3JpZXMpLiBUaGVyZSBpcyBubworICBzdXBwb3J0IGF0IGFsbCBmb3IgdGhpcyBpbiB0aGlzIHBhdGNoIHNlcmllcy4KKworLSBJbnN0ZWFkIG9mIGxvY2tpbmcgJEdJVF9ESVIvc2hhbGxvdyBhdCB0aGUgc3RhcnQsIGp1c3QKKyAgdGhlIHRpbWVzdGFtcCBvZiBpdCBpcyBub3RlZCwgYW5kIHdoZW4gaXQgY29tZXMgdG8gd3JpdGluZyBpdCwKKyAgYSBjaGVjayBpcyBwZXJmb3JtZWQgaWYgdGhlIG10aW1lIGlzIHN0aWxsIHRoZSBzYW1lLCBkeWluZyBpZgorICBpdCBpcyBub3QuCisKKy0gSXQgaXMgdW5jbGVhciBob3cgInB1c2ggaW50by9mcm9tIGEgc2hhbGxvdyByZXBvIiBzaG91bGQgYmVoYXZlLgorCistIElmIHlvdSBkZWVwZW4gYSBoaXN0b3J5LCB5b3UnZCB3YW50IHRvIGdldCB0aGUgdGFncyBvZiB0aGUKKyAgbmV3bHkgc3RvcmVkIChidXQgb2xkZXIhKSBjb21taXRzLiBUaGlzIGRvZXMgbm90IHdvcmsgcmlnaHQgbm93LgorCitUbyBtYWtlIGEgc2hhbGxvdyBjbG9uZSwgeW91IGNhbiBjYWxsICJnaXQtY2xvbmUgLS1kZXB0aCAyMCByZXBvIi4KK1RoZSByZXN1bHQgY29udGFpbnMgb25seSBjb21taXQgY2hhaW5zIHdpdGggYSBsZW5ndGggb2YgYXQgbW9zdCAyMC4KK0l0IGFsc28gd3JpdGVzIGFuIGFwcHJvcHJpYXRlICRHSVRfRElSL3NoYWxsb3cuCisKK1lvdSBjYW4gZGVlcGVuIGEgc2hhbGxvdyByZXBvc2l0b3J5IHdpdGggImdpdC1mZXRjaCAtLWRlcHRoIDIwCityZXBvIGJyYW5jaCIsIHdoaWNoIHdpbGwgZmV0Y2ggYnJhbmNoIGZyb20gcmVwbywgYnV0IHN0b3AgYXQgZGVwdGgKKzIwLCB1cGRhdGluZyAkR0lUX0RJUi9zaGFsbG93LgorCitUaGUgc3BlY2lhbCBkZXB0aCAyMTQ3NDgzNjQ3IChvciAweDdmZmZmZmZmLCB0aGUgbGFyZ2VzdCBwb3NpdGl2ZQorbnVtYmVyIGEgc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIGNhbiBjb250YWluKSBtZWFucyBpbmZpbml0ZSBkZXB0aC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3RyaXZpYWwtbWVyZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvdHJpdmlhbC1tZXJnZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc5ZDRhNwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGVjaG5pY2FsL3RyaXZpYWwtbWVyZ2UudHh0CkBAIC0wLDAgKzEsMTIxIEBACitUcml2aWFsIG1lcmdlIHJ1bGVzCis9PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBvdXRjb21lcyBvZiB0aGUgdHJpdmlhbCBtZXJnZSBsb2dpYyBpbiByZWFkLXRyZWUuCisKK09uZS13YXkgbWVyZ2UKKy0tLS0tLS0tLS0tLS0KKworVGhpcyByZXBsYWNlcyB0aGUgaW5kZXggd2l0aCBhIGRpZmZlcmVudCB0cmVlLCBrZWVwaW5nIHRoZSBzdGF0IGluZm8KK2ZvciBlbnRyaWVzIHRoYXQgZG9uJ3QgY2hhbmdlLCBhbmQgYWxsb3dpbmcgLXUgdG8gbWFrZSB0aGUgbWluaW11bQorcmVxdWlyZWQgY2hhbmdlcyB0byB0aGUgd29ya2luZyB0cmVlIHRvIGhhdmUgaXQgbWF0Y2guCisKK0VudHJpZXMgbWFya2VkICcrJyBoYXZlIHN0YXQgaW5mb3JtYXRpb24uIFNwYWNlcyBtYXJrZWQgJyonIGRvbid0CithZmZlY3QgdGhlIHJlc3VsdC4KKworICAgaW5kZXggICB0cmVlICAgIHJlc3VsdAorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICogICAgICAgKGVtcHR5KSAoZW1wdHkpCisgICAoZW1wdHkpIHRyZWUgICAgdHJlZQorICAgaW5kZXgrICB0cmVlICAgIHRyZWUKKyAgIGluZGV4KyAgaW5kZXggICBpbmRleCsKKworVHdvLXdheSBtZXJnZQorLS0tLS0tLS0tLS0tLQorCitJdCBpcyBwZXJtaXR0ZWQgZm9yIHRoZSBpbmRleCB0byBsYWNrIGFuIGVudHJ5OyB0aGlzIGRvZXMgbm90IHByZXZlbnQKK2FueSBjYXNlIGZyb20gYXBwbHlpbmcuCisKK0lmIHRoZSBpbmRleCBleGlzdHMsIGl0IGlzIGFuIGVycm9yIGZvciBpdCBub3QgdG8gbWF0Y2ggZWl0aGVyIHRoZSBvbGQKK29yIHRoZSByZXN1bHQuCisKK0lmIG11bHRpcGxlIGNhc2VzIGFwcGx5LCB0aGUgb25lIHVzZWQgaXMgbGlzdGVkIGZpcnN0LgorCitBIHJlc3VsdCB3aGljaCBjaGFuZ2VzIHRoZSBpbmRleCBpcyBhbiBlcnJvciBpZiB0aGUgaW5kZXggaXMgbm90IGVtcHR5CithbmQgbm90IHVwLXRvLWRhdGUuCisKK0VudHJpZXMgbWFya2VkICcrJyBoYXZlIHN0YXQgaW5mb3JtYXRpb24uIFNwYWNlcyBtYXJrZWQgJyonIGRvbid0CithZmZlY3QgdGhlIHJlc3VsdC4KKworIGNhc2UgIGluZGV4ICAgb2xkICAgICBuZXcgICAgIHJlc3VsdAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAwLzIgICAoZW1wdHkpICogICAgICAgKGVtcHR5KSAoZW1wdHkpCisgMS8zICAgKGVtcHR5KSAqICAgICAgIG5ldyAgICAgbmV3CisgNC81ICAgaW5kZXgrICAoZW1wdHkpIChlbXB0eSkgaW5kZXgrCisgNi83ICAgaW5kZXgrICAoZW1wdHkpIGluZGV4ICAgaW5kZXgrCisgMTAgICAgaW5kZXgrICBpbmRleCAgIChlbXB0eSkgKGVtcHR5KQorIDE0LzE1IGluZGV4KyAgb2xkICAgICBvbGQgICAgIGluZGV4KworIDE4LzE5IGluZGV4KyAgb2xkICAgICBpbmRleCAgIGluZGV4KworIDIwICAgIGluZGV4KyAgaW5kZXggICBuZXcgICAgIG5ldworCitUaHJlZS13YXkgbWVyZ2UKKy0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyBwZXJtaXR0ZWQgZm9yIHRoZSBpbmRleCB0byBsYWNrIGFuIGVudHJ5OyB0aGlzIGRvZXMgbm90IHByZXZlbnQKK2FueSBjYXNlIGZyb20gYXBwbHlpbmcuCisKK0lmIHRoZSBpbmRleCBleGlzdHMsIGl0IGlzIGFuIGVycm9yIGZvciBpdCBub3QgdG8gbWF0Y2ggZWl0aGVyIHRoZQoraGVhZCBvciAoaWYgdGhlIG1lcmdlIGlzIHRyaXZpYWwpIHRoZSByZXN1bHQuCisKK0lmIG11bHRpcGxlIGNhc2VzIGFwcGx5LCB0aGUgb25lIHVzZWQgaXMgbGlzdGVkIGZpcnN0LgorCitBIHJlc3VsdCBvZiAibm8gbWVyZ2UiIG1lYW5zIHRoYXQgaW5kZXggaXMgbGVmdCBpbiBzdGFnZSAwLCBhbmNlc3QgaW4KK3N0YWdlIDEsIGhlYWQgaW4gc3RhZ2UgMiwgYW5kIHJlbW90ZSBpbiBzdGFnZSAzIChpZiBhbnkgb2YgdGhlc2UgYXJlCitlbXB0eSwgbm8gZW50cnkgaXMgbGVmdCBmb3IgdGhhdCBzdGFnZSkuIE90aGVyd2lzZSwgdGhlIGdpdmVuIGVudHJ5IGlzCitsZWZ0IGluIHN0YWdlIDAsIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIgZW50cmllcy4KKworQSByZXN1bHQgb2YgIm5vIG1lcmdlIiBpcyBhbiBlcnJvciBpZiB0aGUgaW5kZXggaXMgbm90IGVtcHR5IGFuZCBub3QKK3VwLXRvLWRhdGUuCisKKyplbXB0eSogbWVhbnMgdGhhdCB0aGUgdHJlZSBtdXN0IG5vdCBoYXZlIGEgZGlyZWN0b3J5LWZpbGUgY29uZmxpY3QKKyB3aXRoIHRoZSBlbnRyeS4KKworRm9yIG11bHRpcGxlIGFuY2VzdG9ycywgYSAnKycgbWVhbnMgdGhhdCB0aGlzIGNhc2UgYXBwbGllcyBldmVuIGlmCitvbmx5IG9uZSBhbmNlc3RvciBvciByZW1vdGUgZml0czsgYSAnXicgbWVhbnMgYWxsIG9mIHRoZSBhbmNlc3RvcnMKK211c3QgYmUgdGhlIHNhbWUuCisKKyBjYXNlICBhbmNlc3QgICAgaGVhZCAgICByZW1vdGUgICAgcmVzdWx0CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEgICAgIChlbXB0eSkrICAoZW1wdHkpIChlbXB0eSkgICAoZW1wdHkpCisgMkFMVCAgKGVtcHR5KSsgICplbXB0eSogcmVtb3RlICAgIHJlbW90ZQorIDIgICAgIChlbXB0eSleICAoZW1wdHkpIHJlbW90ZSAgICBubyBtZXJnZQorIDNBTFQgIChlbXB0eSkrICBoZWFkICAgICplbXB0eSogICBoZWFkCisgMyAgICAgKGVtcHR5KV4gIGhlYWQgICAgKGVtcHR5KSAgIG5vIG1lcmdlCisgNCAgICAgKGVtcHR5KV4gIGhlYWQgICAgcmVtb3RlICAgIG5vIG1lcmdlCisgNUFMVCAgKiAgICAgICAgIGhlYWQgICAgaGVhZCAgICAgIGhlYWQKKyA2ICAgICBhbmNlc3QrICAgKGVtcHR5KSAoZW1wdHkpICAgbm8gbWVyZ2UKKyA4ICAgICBhbmNlc3ReICAgKGVtcHR5KSBhbmNlc3QgICAgbm8gbWVyZ2UKKyA3ICAgICBhbmNlc3QrICAgKGVtcHR5KSByZW1vdGUgICAgbm8gbWVyZ2UKKyAxMCAgICBhbmNlc3ReICAgYW5jZXN0ICAoZW1wdHkpICAgbm8gbWVyZ2UKKyA5ICAgICBhbmNlc3QrICAgaGVhZCAgICAoZW1wdHkpICAgbm8gbWVyZ2UKKyAxNiAgICBhbmMxL2FuYzIgYW5jMSAgICBhbmMyICAgICAgbm8gbWVyZ2UKKyAxMyAgICBhbmNlc3QrICAgaGVhZCAgICBhbmNlc3QgICAgaGVhZAorIDE0ICAgIGFuY2VzdCsgICBhbmNlc3QgIHJlbW90ZSAgICByZW1vdGUKKyAxMSAgICBhbmNlc3QrICAgaGVhZCAgICByZW1vdGUgICAgbm8gbWVyZ2UKKworT25seSAjMkFMVCBhbmQgIzNBTFQgdXNlICplbXB0eSosIGJlY2F1c2UgdGhlc2UgYXJlIHRoZSBvbmx5IGNhc2VzCit3aGVyZSB0aGVyZSBjYW4gYmUgY29uZmxpY3RzIHRoYXQgZGlkbid0IGV4aXN0IGJlZm9yZS4gTm90ZSB0aGF0IHdlCithbGxvdyBkaXJlY3RvcnktZmlsZSBjb25mbGljdHMgYmV0d2VlbiB0aGluZ3MgaW4gZGlmZmVyZW50IHN0YWdlcworYWZ0ZXIgdGhlIHRyaXZpYWwgbWVyZ2UuCisKK0EgcG9zc2libGUgYWx0ZXJuYXRpdmUgZm9yICM2IGlzIChlbXB0eSksIHdoaWNoIHdvdWxkIG1ha2UgaXQgbGlrZQorIzEuIFRoaXMgaXMgbm90IHVzZWQsIGR1ZSB0byB0aGUgbGlrZWxpaG9vZCB0aGF0IGl0IGFyaXNlcyBkdWUgdG8KK21vdmluZyB0aGUgZmlsZSB0byBtdWx0aXBsZSBkaWZmZXJlbnQgbG9jYXRpb25zIG9yIG1vdmluZyBhbmQgZGVsZXRpbmcKK2l0IGluIGRpZmZlcmVudCBicmFuY2hlcy4KKworQ2FzZSAjMSBpcyBpbmNsdWRlZCBmb3IgY29tcGxldGVuZXNzLCBhbmQgYWxzbyBpbiBjYXNlIHdlIGRlY2lkZSB0bworcHV0IG9uICcrJyBtYXJraW5nczsgYW55IHBhdGggdGhhdCBpcyBuZXZlciBtZW50aW9uZWQgYXQgYWxsIGlzbid0CitoYW5kbGVkLgorCitOb3RlIHRoYXQgIzE2IGlzIHdoZW4gYm90aCAjMTMgYW5kICMxNCBhcHBseTsgaW4gdGhpcyBjYXNlLCB3ZSByZWZ1c2UKK3RoZSB0cml2aWFsIG1lcmdlLCBiZWNhdXNlIHdlIGNhbid0IHRlbGwgZnJvbSB0aGlzIGRhdGEgd2hpY2ggaXMKK3JpZ2h0LiBUaGlzIGlzIGEgY2FzZSBvZiBhIHJldmVydGVkIHBhdGNoIChpbiBzb21lIGRpcmVjdGlvbiwgbWF5YmUKK211bHRpcGxlIHRpbWVzKSwgYW5kIHRoZSByaWdodCBhbnN3ZXIgZGVwZW5kcyBvbiBsb29raW5nIGF0IGNyb3NzaW5ncworb2YgaGlzdG9yeSBvciBjb21tb24gYW5jZXN0b3JzIG9mIHRoZSBhbmNlc3RvcnMuCisKK05vdGUgdGhhdCwgYmV0d2VlbiAjNiwgIzcsICM5LCBhbmQgIzExLCBhbGwgY2FzZXMgbm90IG90aGVyd2lzZQorY292ZXJlZCBhcmUgaGFuZGxlZCBpbiB0aGlzIHRhYmxlLgorCitGb3IgIzggYW5kICMxMCwgdGhlcmUgaXMgYWx0ZXJuYXRpdmUgYmVoYXZpb3IsIG5vdCBjdXJyZW50bHkKK2ltcGxlbWVudGVkLCB3aGVyZSB0aGUgcmVzdWx0IGlzIChlbXB0eSkuIEFzIGN1cnJlbnRseSBpbXBsZW1lbnRlZCwKK3RoZSBhdXRvbWF0aWMgbWVyZ2Ugd2lsbCBnZW5lcmFsbHkgZ2l2ZSB0aGlzIGVmZmVjdC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dCBiL0RvY3VtZW50YXRpb24vdXJscy1yZW1vdGVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDE4NGNkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi91cmxzLXJlbW90ZXMudHh0CkBAIC0wLDAgKzEsOTQgQEAKK2luY2x1ZGU6OnVybHMudHh0W10KKworUkVNT1RFU1tbUkVNT1RFU11dCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG5hbWUgb2Ygb25lIG9mIHRoZSBmb2xsb3dpbmcgY2FuIGJlIHVzZWQgaW5zdGVhZAorb2YgYSBVUkwgYXMgYDxyZXBvc2l0b3J5PmAgYXJndW1lbnQ6CisKKyogYSByZW1vdGUgaW4gdGhlIEdpdCBjb25maWd1cmF0aW9uIGZpbGU6IGAkR0lUX0RJUi9jb25maWdgLAorKiBhIGZpbGUgaW4gdGhlIGAkR0lUX0RJUi9yZW1vdGVzYCBkaXJlY3RvcnksIG9yCisqIGEgZmlsZSBpbiB0aGUgYCRHSVRfRElSL2JyYW5jaGVzYCBkaXJlY3RvcnkuCisKK0FsbCBvZiB0aGVzZSBhbHNvIGFsbG93IHlvdSB0byBvbWl0IHRoZSByZWZzcGVjIGZyb20gdGhlIGNvbW1hbmQgbGluZQorYmVjYXVzZSB0aGV5IGVhY2ggY29udGFpbiBhIHJlZnNwZWMgd2hpY2ggZ2l0IHdpbGwgdXNlIGJ5IGRlZmF1bHQuCisKK05hbWVkIHJlbW90ZSBpbiBjb25maWd1cmF0aW9uIGZpbGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IGNhbiBjaG9vc2UgdG8gcHJvdmlkZSB0aGUgbmFtZSBvZiBhIHJlbW90ZSB3aGljaCB5b3UgaGFkIHByZXZpb3VzbHkKK2NvbmZpZ3VyZWQgdXNpbmcgbGlua2dpdDpnaXQtcmVtb3RlWzFdLCBsaW5rZ2l0OmdpdC1jb25maWdbMV0KK29yIGV2ZW4gYnkgYSBtYW51YWwgZWRpdCB0byB0aGUgYCRHSVRfRElSL2NvbmZpZ2AgZmlsZS4gIFRoZSBVUkwgb2YKK3RoaXMgcmVtb3RlIHdpbGwgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIHJlcG9zaXRvcnkuICBUaGUgcmVmc3BlYworb2YgdGhpcyByZW1vdGUgd2lsbCBiZSB1c2VkIGJ5IGRlZmF1bHQgd2hlbiB5b3UgZG8KK25vdCBwcm92aWRlIGEgcmVmc3BlYyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVGhlIGVudHJ5IGluIHRoZQorY29uZmlnIGZpbGUgd291bGQgYXBwZWFyIGxpa2UgdGhpczoKKworLS0tLS0tLS0tLS0tCisJW3JlbW90ZSAiPG5hbWU+Il0KKwkJdXJsID0gPHVybD4KKwkJcHVzaHVybCA9IDxwdXNodXJsPgorCQlwdXNoID0gPHJlZnNwZWM+CisJCWZldGNoID0gPHJlZnNwZWM+CistLS0tLS0tLS0tLS0KKworVGhlIGA8cHVzaHVybD5gIGlzIHVzZWQgZm9yIHB1c2hlcyBvbmx5LiBJdCBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMKK3RvIGA8dXJsPmAuCisKK05hbWVkIGZpbGUgaW4gYCRHSVRfRElSL3JlbW90ZXNgCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgY2FuIGNob29zZSB0byBwcm92aWRlIHRoZSBuYW1lIG9mIGEKK2ZpbGUgaW4gYCRHSVRfRElSL3JlbW90ZXNgLiAgVGhlIFVSTAoraW4gdGhpcyBmaWxlIHdpbGwgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIHJlcG9zaXRvcnkuICBUaGUgcmVmc3BlYworaW4gdGhpcyBmaWxlIHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0IHdoZW4geW91IGRvIG5vdAorcHJvdmlkZSBhIHJlZnNwZWMgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoaXMgZmlsZSBzaG91bGQgaGF2ZSB0aGUKK2ZvbGxvd2luZyBmb3JtYXQ6CisKKy0tLS0tLS0tLS0tLQorCVVSTDogb25lIG9mIHRoZSBhYm92ZSBVUkwgZm9ybWF0CisJUHVzaDogPHJlZnNwZWM+CisJUHVsbDogPHJlZnNwZWM+CisKKy0tLS0tLS0tLS0tLQorCitgUHVzaDpgIGxpbmVzIGFyZSB1c2VkIGJ5ICdnaXQgcHVzaCcgYW5kCitgUHVsbDpgIGxpbmVzIGFyZSB1c2VkIGJ5ICdnaXQgcHVsbCcgYW5kICdnaXQgZmV0Y2gnLgorTXVsdGlwbGUgYFB1c2g6YCBhbmQgYFB1bGw6YCBsaW5lcyBtYXkKK2JlIHNwZWNpZmllZCBmb3IgYWRkaXRpb25hbCBicmFuY2ggbWFwcGluZ3MuCisKK05hbWVkIGZpbGUgaW4gYCRHSVRfRElSL2JyYW5jaGVzYAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1lvdSBjYW4gY2hvb3NlIHRvIHByb3ZpZGUgdGhlIG5hbWUgb2YgYQorZmlsZSBpbiBgJEdJVF9ESVIvYnJhbmNoZXNgLgorVGhlIFVSTCBpbiB0aGlzIGZpbGUgd2lsbCBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgcmVwb3NpdG9yeS4KK1RoaXMgZmlsZSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKworCistLS0tLS0tLS0tLS0KKwk8dXJsPiM8aGVhZD4KKy0tLS0tLS0tLS0tLQorCitgPHVybD5gIGlzIHJlcXVpcmVkOyBgIzxoZWFkPmAgaXMgb3B0aW9uYWwuCisKK0RlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW9uLCBnaXQgd2lsbCB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcKK3JlZnNwZWNzLCBpZiB5b3UgZG9uJ3QgcHJvdmlkZSBvbmUgb24gdGhlIGNvbW1hbmQgbGluZS4KK2A8YnJhbmNoPmAgaXMgdGhlIG5hbWUgb2YgdGhpcyBmaWxlIGluIGAkR0lUX0RJUi9icmFuY2hlc2AgYW5kCitgPGhlYWQ+YCBkZWZhdWx0cyB0byBgbWFzdGVyYC4KKworZ2l0IGZldGNoIHVzZXM6CisKKy0tLS0tLS0tLS0tLQorCXJlZnMvaGVhZHMvPGhlYWQ+OnJlZnMvaGVhZHMvPGJyYW5jaD4KKy0tLS0tLS0tLS0tLQorCitnaXQgcHVzaCB1c2VzOgorCistLS0tLS0tLS0tLS0KKwlIRUFEOnJlZnMvaGVhZHMvPGhlYWQ+CistLS0tLS0tLS0tLS0KKworCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91cmxzLnR4dCBiL0RvY3VtZW50YXRpb24vdXJscy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNjYjI0NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXJscy50eHQKQEAgLTAsMCArMSwxMDcgQEAKK0dJVCBVUkxTW1tVUkxTXV0KKy0tLS0tLS0tLS0tLS0tLS0KKworSW4gZ2VuZXJhbCwgVVJMcyBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wsIHRoZQorYWRkcmVzcyBvZiB0aGUgcmVtb3RlIHNlcnZlciwgYW5kIHRoZSBwYXRoIHRvIHRoZSByZXBvc2l0b3J5LgorRGVwZW5kaW5nIG9uIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wsIHNvbWUgb2YgdGhpcyBpbmZvcm1hdGlvbiBtYXkgYmUKK2Fic2VudC4KKworR2l0IHN1cHBvcnRzIHNzaCwgZ2l0LCBodHRwLCBhbmQgaHR0cHMgcHJvdG9jb2xzIChpbiBhZGRpdGlvbiwgZnRwLAorYW5kIGZ0cHMgY2FuIGJlIHVzZWQgZm9yIGZldGNoaW5nIGFuZCByc3luYyBjYW4gYmUgdXNlZCBmb3IgZmV0Y2hpbmcKK2FuZCBwdXNoaW5nLCBidXQgdGhlc2UgYXJlIGluZWZmaWNpZW50IGFuZCBkZXByZWNhdGVkOyBkbyBub3QgdXNlCit0aGVtKS4KKworVGhlIG5hdGl2ZSB0cmFuc3BvcnQgKGkuZS4gZ2l0Oi8vIFVSTCkgZG9lcyBubyBhdXRoZW50aWNhdGlvbiBhbmQKK3Nob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbiBvbiB1bnNlY3VyZWQgbmV0d29ya3MuCisKK1RoZSBmb2xsb3dpbmcgc3ludGF4ZXMgbWF5IGJlIHVzZWQgd2l0aCB0aGVtOgorCistIHNzaDovL3tzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHp7c3RhcnRzYn06cG9ydHtlbmRzYn0vcGF0aC90by9yZXBvLmdpdC8KKy0gZ2l0Oi8vaG9zdC54entzdGFydHNifTpwb3J0e2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LworLSBodHRwe3N0YXJ0c2J9c3tlbmRzYn06Ly9ob3N0Lnh6e3N0YXJ0c2J9OnBvcnR7ZW5kc2J9L3BhdGgvdG8vcmVwby5naXQvCistIGZ0cHtzdGFydHNifXN7ZW5kc2J9Oi8vaG9zdC54entzdGFydHNifTpwb3J0e2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LworLSByc3luYzovL2hvc3QueHovcGF0aC90by9yZXBvLmdpdC8KKworQW4gYWx0ZXJuYXRpdmUgc2NwLWxpa2Ugc3ludGF4IG1heSBhbHNvIGJlIHVzZWQgd2l0aCB0aGUgc3NoIHByb3RvY29sOgorCistIHtzdGFydHNifXVzZXJAe2VuZHNifWhvc3QueHo6cGF0aC90by9yZXBvLmdpdC8KKworVGhpcyBzeW50YXggaXMgb25seSByZWNvZ25pemVkIGlmIHRoZXJlIGFyZSBubyBzbGFzaGVzIGJlZm9yZSB0aGUKK2ZpcnN0IGNvbG9uLiBUaGlzIGhlbHBzIGRpZmZlcmVudGlhdGUgYSBsb2NhbCBwYXRoIHRoYXQgY29udGFpbnMgYQorY29sb24uIEZvciBleGFtcGxlIHRoZSBsb2NhbCBwYXRoIGBmb286YmFyYCBjb3VsZCBiZSBzcGVjaWZpZWQgYXMgYW4KK2Fic29sdXRlIHBhdGggb3IgYC4vZm9vOmJhcmAgdG8gYXZvaWQgYmVpbmcgbWlzaW50ZXJwcmV0ZWQgYXMgYW4gc3NoCit1cmwuCisKK1RoZSBzc2ggYW5kIGdpdCBwcm90b2NvbHMgYWRkaXRpb25hbGx5IHN1cHBvcnQgfnVzZXJuYW1lIGV4cGFuc2lvbjoKKworLSBzc2g6Ly97c3RhcnRzYn11c2VyQHtlbmRzYn1ob3N0Lnh6e3N0YXJ0c2J9OnBvcnR7ZW5kc2J9L357c3RhcnRzYn11c2Vye2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LworLSBnaXQ6Ly9ob3N0Lnh6e3N0YXJ0c2J9OnBvcnR7ZW5kc2J9L357c3RhcnRzYn11c2Vye2VuZHNifS9wYXRoL3RvL3JlcG8uZ2l0LworLSB7c3RhcnRzYn11c2VyQHtlbmRzYn1ob3N0Lnh6Oi9+e3N0YXJ0c2J9dXNlcntlbmRzYn0vcGF0aC90by9yZXBvLmdpdC8KKworRm9yIGxvY2FsIHJlcG9zaXRvcmllcywgYWxzbyBzdXBwb3J0ZWQgYnkgR2l0IG5hdGl2ZWx5LCB0aGUgZm9sbG93aW5nCitzeW50YXhlcyBtYXkgYmUgdXNlZDoKKworLSAvcGF0aC90by9yZXBvLmdpdC8KKy0gXGZpbGU6Ly8vcGF0aC90by9yZXBvLmdpdC8KKworaWZuZGVmOjpnaXQtY2xvbmVbXQorVGhlc2UgdHdvIHN5bnRheGVzIGFyZSBtb3N0bHkgZXF1aXZhbGVudCwgZXhjZXB0IHdoZW4gY2xvbmluZywgd2hlbgordGhlIGZvcm1lciBpbXBsaWVzIC0tbG9jYWwgb3B0aW9uLiBTZWUgbGlua2dpdDpnaXQtY2xvbmVbMV0gZm9yCitkZXRhaWxzLgorZW5kaWY6OmdpdC1jbG9uZVtdCisKK2lmZGVmOjpnaXQtY2xvbmVbXQorVGhlc2UgdHdvIHN5bnRheGVzIGFyZSBtb3N0bHkgZXF1aXZhbGVudCwgZXhjZXB0IHRoZSBmb3JtZXIgaW1wbGllcworLS1sb2NhbCBvcHRpb24uCitlbmRpZjo6Z2l0LWNsb25lW10KKworV2hlbiBHaXQgZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUgYSBjZXJ0YWluIHRyYW5zcG9ydCBwcm90b2NvbCwgaXQKK2F0dGVtcHRzIHRvIHVzZSB0aGUgJ3JlbW90ZS08dHJhbnNwb3J0PicgcmVtb3RlIGhlbHBlciwgaWYgb25lCitleGlzdHMuIFRvIGV4cGxpY2l0bHkgcmVxdWVzdCBhIHJlbW90ZSBoZWxwZXIsIHRoZSBmb2xsb3dpbmcgc3ludGF4CittYXkgYmUgdXNlZDoKKworLSA8dHJhbnNwb3J0Pjo6PGFkZHJlc3M+CisKK3doZXJlIDxhZGRyZXNzPiBtYXkgYmUgYSBwYXRoLCBhIHNlcnZlciBhbmQgcGF0aCwgb3IgYW4gYXJiaXRyYXJ5CitVUkwtbGlrZSBzdHJpbmcgcmVjb2duaXplZCBieSB0aGUgc3BlY2lmaWMgcmVtb3RlIGhlbHBlciBiZWluZworaW52b2tlZC4gU2VlIGxpbmtnaXQ6Z2l0cmVtb3RlLWhlbHBlcnNbMV0gZm9yIGRldGFpbHMuCisKK0lmIHRoZXJlIGFyZSBhIGxhcmdlIG51bWJlciBvZiBzaW1pbGFybHktbmFtZWQgcmVtb3RlIHJlcG9zaXRvcmllcyBhbmQKK3lvdSB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBmb3JtYXQgZm9yIHRoZW0gKHN1Y2ggdGhhdCB0aGUgVVJMcyB5b3UKK3VzZSB3aWxsIGJlIHJld3JpdHRlbiBpbnRvIFVSTHMgdGhhdCB3b3JrKSwgeW91IGNhbiBjcmVhdGUgYQorY29uZmlndXJhdGlvbiBzZWN0aW9uIG9mIHRoZSBmb3JtOgorCistLS0tLS0tLS0tLS0KKwlbdXJsICI8YWN0dWFsIHVybCBiYXNlPiJdCisJCWluc3RlYWRPZiA9IDxvdGhlciB1cmwgYmFzZT4KKy0tLS0tLS0tLS0tLQorCitGb3IgZXhhbXBsZSwgd2l0aCB0aGlzOgorCistLS0tLS0tLS0tLS0KKwlbdXJsICJnaXQ6Ly9naXQuaG9zdC54ei8iXQorCQlpbnN0ZWFkT2YgPSBob3N0Lnh6Oi9wYXRoL3RvLworCQlpbnN0ZWFkT2YgPSB3b3JrOgorLS0tLS0tLS0tLS0tCisKK2EgVVJMIGxpa2UgIndvcms6cmVwby5naXQiIG9yIGxpa2UgImhvc3QueHo6L3BhdGgvdG8vcmVwby5naXQiIHdpbGwgYmUKK3Jld3JpdHRlbiBpbiBhbnkgY29udGV4dCB0aGF0IHRha2VzIGEgVVJMIHRvIGJlICJnaXQ6Ly9naXQuaG9zdC54ei9yZXBvLmdpdCIuCisKK0lmIHlvdSB3YW50IHRvIHJld3JpdGUgVVJMcyBmb3IgcHVzaCBvbmx5LCB5b3UgY2FuIGNyZWF0ZSBhCitjb25maWd1cmF0aW9uIHNlY3Rpb24gb2YgdGhlIGZvcm06CisKKy0tLS0tLS0tLS0tLQorCVt1cmwgIjxhY3R1YWwgdXJsIGJhc2U+Il0KKwkJcHVzaEluc3RlYWRPZiA9IDxvdGhlciB1cmwgYmFzZT4KKy0tLS0tLS0tLS0tLQorCitGb3IgZXhhbXBsZSwgd2l0aCB0aGlzOgorCistLS0tLS0tLS0tLS0KKwlbdXJsICJzc2g6Ly9leGFtcGxlLm9yZy8iXQorCQlwdXNoSW5zdGVhZE9mID0gZ2l0Oi8vZXhhbXBsZS5vcmcvCistLS0tLS0tLS0tLS0KKworYSBVUkwgbGlrZSAiZ2l0Oi8vZXhhbXBsZS5vcmcvcGF0aC90by9yZXBvLmdpdCIgd2lsbCBiZSByZXdyaXR0ZW4gdG8KKyJzc2g6Ly9leGFtcGxlLm9yZy9wYXRoL3RvL3JlcG8uZ2l0IiBmb3IgcHVzaGVzLCBidXQgcHVsbHMgd2lsbCBzdGlsbAordXNlIHRoZSBvcmlnaW5hbCBVUkwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLmNvbmYgYi9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLmNvbmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg3Mjk0ZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwuY29uZgpAQCAtMCwwICsxLDIxIEBACitbdGl0bGVzXQorCXVuZGVybGluZXM9Il9fIiwiPT0iLCItLSIsIn5+IiwiXl4iCisKK1thdHRyaWJ1dGVzXQorY2FyZXQ9Xgorc3RhcnRzYj0mIzkxOworZW5kc2I9JiM5MzsKK3RpbGRlPSYjMTI2OworCitbbGlua2dpdC1pbmxpbmVtYWNyb10KKzx1bGluayB1cmw9Int0YXJnZXR9Lmh0bWwiPnt0YXJnZXR9ezA/KHswfSl9PC91bGluaz4KKworaWZkZWY6OmJhY2tlbmQtZG9jYm9va1tdCisjICJ1bmJyZWFrIiBkb2Nib29rLXhzbCB2MS42OCBmb3IgbWFucGFnZXMuIHYxLjY5IHdvcmtzIHdpdGggb3Igd2l0aG91dCB0aGlzLgorW2xpc3RpbmdibG9ja10KKzxleGFtcGxlPjx0aXRsZT57dGl0bGV9PC90aXRsZT4KKzxsaXRlcmFsbGF5b3V0IGNsYXNzPSJtb25vc3BhY2VkIj4KK3wKKzwvbGl0ZXJhbGxheW91dD4KK3t0aXRsZSN9PC9leGFtcGxlPgorZW5kaWY6OmJhY2tlbmQtZG9jYm9va1tdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dCBiL0RvY3VtZW50YXRpb24vdXNlci1tYW51YWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NGEyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3VzZXItbWFudWFsLnR4dApAQCAtMCwwICsxLDQ2NjIgQEAKK0dpdCBVc2VyIE1hbnVhbAorPT09PT09PT09PT09PT09CisKK0dpdCBpcyBhIGZhc3QgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0uCisKK1RoaXMgbWFudWFsIGlzIGRlc2lnbmVkIHRvIGJlIHJlYWRhYmxlIGJ5IHNvbWVvbmUgd2l0aCBiYXNpYyBVTklYCitjb21tYW5kLWxpbmUgc2tpbGxzLCBidXQgbm8gcHJldmlvdXMga25vd2xlZGdlIG9mIEdpdC4KKworPDxyZXBvc2l0b3JpZXMtYW5kLWJyYW5jaGVzPj4gYW5kIDw8ZXhwbG9yaW5nLWdpdC1oaXN0b3J5Pj4gZXhwbGFpbiBob3cKK3RvIGZldGNoIGFuZCBzdHVkeSBhIHByb2plY3QgdXNpbmcgZ2l0LS1yZWFkIHRoZXNlIGNoYXB0ZXJzIHRvIGxlYXJuIGhvdwordG8gYnVpbGQgYW5kIHRlc3QgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgYSBzb2Z0d2FyZSBwcm9qZWN0LCBzZWFyY2ggZm9yCityZWdyZXNzaW9ucywgYW5kIHNvIG9uLgorCitQZW9wbGUgbmVlZGluZyB0byBkbyBhY3R1YWwgZGV2ZWxvcG1lbnQgd2lsbCBhbHNvIHdhbnQgdG8gcmVhZAorPDxEZXZlbG9waW5nLVdpdGgtZ2l0Pj4gYW5kIDw8c2hhcmluZy1kZXZlbG9wbWVudD4+LgorCitGdXJ0aGVyIGNoYXB0ZXJzIGNvdmVyIG1vcmUgc3BlY2lhbGl6ZWQgdG9waWNzLgorCitDb21wcmVoZW5zaXZlIHJlZmVyZW5jZSBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSBtYW4KK3BhZ2VzLCBvciBsaW5rZ2l0OmdpdC1oZWxwWzFdIGNvbW1hbmQuICBGb3IgZXhhbXBsZSwgZm9yIHRoZSBjb21tYW5kCitgZ2l0IGNsb25lIDxyZXBvPmAsIHlvdSBjYW4gZWl0aGVyIHVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG1hbiBnaXQtY2xvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvcjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBoZWxwIGNsb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2l0aCB0aGUgbGF0dGVyLCB5b3UgY2FuIHVzZSB0aGUgbWFudWFsIHZpZXdlciBvZiB5b3VyIGNob2ljZTsgc2VlCitsaW5rZ2l0OmdpdC1oZWxwWzFdIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitTZWUgYWxzbyA8PGdpdC1xdWljay1zdGFydD4+IGZvciBhIGJyaWVmIG92ZXJ2aWV3IG9mIEdpdCBjb21tYW5kcywKK3dpdGhvdXQgYW55IGV4cGxhbmF0aW9uLgorCitGaW5hbGx5LCBzZWUgPDx0b2RvPj4gZm9yIHdheXMgdGhhdCB5b3UgY2FuIGhlbHAgbWFrZSB0aGlzIG1hbnVhbCBtb3JlCitjb21wbGV0ZS4KKworCitbW3JlcG9zaXRvcmllcy1hbmQtYnJhbmNoZXNdXQorUmVwb3NpdG9yaWVzIGFuZCBCcmFuY2hlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitbW2hvdy10by1nZXQtYS1naXQtcmVwb3NpdG9yeV1dCitIb3cgdG8gZ2V0IGEgR2l0IHJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCB3aWxsIGJlIHVzZWZ1bCB0byBoYXZlIGEgR2l0IHJlcG9zaXRvcnkgdG8gZXhwZXJpbWVudCB3aXRoIGFzIHlvdQorcmVhZCB0aGlzIG1hbnVhbC4KKworVGhlIGJlc3Qgd2F5IHRvIGdldCBvbmUgaXMgYnkgdXNpbmcgdGhlIGxpbmtnaXQ6Z2l0LWNsb25lWzFdIGNvbW1hbmQgdG8KK2Rvd25sb2FkIGEgY29weSBvZiBhbiBleGlzdGluZyByZXBvc2l0b3J5LiAgSWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBhCitwcm9qZWN0IGluIG1pbmQsIGhlcmUgYXJlIHNvbWUgaW50ZXJlc3RpbmcgZXhhbXBsZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSMgR2l0IGl0c2VsZiAoYXBwcm94LiA0ME1CIGRvd25sb2FkKToKKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vZ2l0L2dpdC5naXQKKwkjIHRoZSBMaW51eCBrZXJuZWwgKGFwcHJveC4gNjQwTUIgZG93bmxvYWQpOgorJCBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbml0aWFsIGNsb25lIG1heSBiZSB0aW1lLWNvbnN1bWluZyBmb3IgYSBsYXJnZSBwcm9qZWN0LCBidXQgeW91Cit3aWxsIG9ubHkgbmVlZCB0byBjbG9uZSBvbmNlLgorCitUaGUgY2xvbmUgY29tbWFuZCBjcmVhdGVzIGEgbmV3IGRpcmVjdG9yeSBuYW1lZCBhZnRlciB0aGUgcHJvamVjdAorKGBnaXRgIG9yIGBsaW51eGAgaW4gdGhlIGV4YW1wbGVzIGFib3ZlKS4gIEFmdGVyIHlvdSBjZCBpbnRvIHRoaXMKK2RpcmVjdG9yeSwgeW91IHdpbGwgc2VlIHRoYXQgaXQgY29udGFpbnMgYSBjb3B5IG9mIHRoZSBwcm9qZWN0IGZpbGVzLAorY2FsbGVkIHRoZSA8PGRlZl93b3JraW5nX3RyZWUsd29ya2luZyB0cmVlPj4sIHRvZ2V0aGVyIHdpdGggYSBzcGVjaWFsCit0b3AtbGV2ZWwgZGlyZWN0b3J5IG5hbWVkIGAuZ2l0YCwgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIGhpc3Rvcnkgb2YgdGhlIHByb2plY3QuCisKK1tbaG93LXRvLWNoZWNrLW91dF1dCitIb3cgdG8gY2hlY2sgb3V0IGEgZGlmZmVyZW50IHZlcnNpb24gb2YgYSBwcm9qZWN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCBpcyBiZXN0IHRob3VnaHQgb2YgYXMgYSB0b29sIGZvciBzdG9yaW5nIHRoZSBoaXN0b3J5IG9mIGEgY29sbGVjdGlvbgorb2YgZmlsZXMuICBJdCBzdG9yZXMgdGhlIGhpc3RvcnkgYXMgYSBjb21wcmVzc2VkIGNvbGxlY3Rpb24gb2YKK2ludGVycmVsYXRlZCBzbmFwc2hvdHMgb2YgdGhlIHByb2plY3QncyBjb250ZW50cy4gIEluIEdpdCBlYWNoIHN1Y2gKK3ZlcnNpb24gaXMgY2FsbGVkIGEgPDxkZWZfY29tbWl0LGNvbW1pdD4+LgorCitUaG9zZSBzbmFwc2hvdHMgYXJlbid0IG5lY2Vzc2FyaWx5IGFsbCBhcnJhbmdlZCBpbiBhIHNpbmdsZSBsaW5lIGZyb20KK29sZGVzdCB0byBuZXdlc3Q7IGluc3RlYWQsIHdvcmsgbWF5IHNpbXVsdGFuZW91c2x5IHByb2NlZWQgYWxvbmcKK3BhcmFsbGVsIGxpbmVzIG9mIGRldmVsb3BtZW50LCBjYWxsZWQgPDxkZWZfYnJhbmNoLGJyYW5jaGVzPj4sIHdoaWNoIG1heQorbWVyZ2UgYW5kIGRpdmVyZ2UuCisKK0Egc2luZ2xlIEdpdCByZXBvc2l0b3J5IGNhbiB0cmFjayBkZXZlbG9wbWVudCBvbiBtdWx0aXBsZSBicmFuY2hlcy4gIEl0Citkb2VzIHRoaXMgYnkga2VlcGluZyBhIGxpc3Qgb2YgPDxkZWZfaGVhZCxoZWFkcz4+IHdoaWNoIHJlZmVyZW5jZSB0aGUKK2xhdGVzdCBjb21taXQgb24gZWFjaCBicmFuY2g7IHRoZSBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gY29tbWFuZCBzaG93cworeW91IHRoZSBsaXN0IG9mIGJyYW5jaCBoZWFkczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2gKKyogbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBmcmVzaGx5IGNsb25lZCByZXBvc2l0b3J5IGNvbnRhaW5zIGEgc2luZ2xlIGJyYW5jaCBoZWFkLCBieSBkZWZhdWx0CituYW1lZCAibWFzdGVyIiwgd2l0aCB0aGUgd29ya2luZyBkaXJlY3RvcnkgaW5pdGlhbGl6ZWQgdG8gdGhlIHN0YXRlIG9mCit0aGUgcHJvamVjdCByZWZlcnJlZCB0byBieSB0aGF0IGJyYW5jaCBoZWFkLgorCitNb3N0IHByb2plY3RzIGFsc28gdXNlIDw8ZGVmX3RhZyx0YWdzPj4uICBUYWdzLCBsaWtlIGhlYWRzLCBhcmUKK3JlZmVyZW5jZXMgaW50byB0aGUgcHJvamVjdCdzIGhpc3RvcnksIGFuZCBjYW4gYmUgbGlzdGVkIHVzaW5nIHRoZQorbGlua2dpdDpnaXQtdGFnWzFdIGNvbW1hbmQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdGFnIC1sCit2Mi42LjExCit2Mi42LjExLXRyZWUKK3YyLjYuMTIKK3YyLjYuMTItcmMyCit2Mi42LjEyLXJjMwordjIuNi4xMi1yYzQKK3YyLjYuMTItcmM1Cit2Mi42LjEyLXJjNgordjIuNi4xMworLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGFncyBhcmUgZXhwZWN0ZWQgdG8gYWx3YXlzIHBvaW50IGF0IHRoZSBzYW1lIHZlcnNpb24gb2YgYSBwcm9qZWN0LAord2hpbGUgaGVhZHMgYXJlIGV4cGVjdGVkIHRvIGFkdmFuY2UgYXMgZGV2ZWxvcG1lbnQgcHJvZ3Jlc3Nlcy4KKworQ3JlYXRlIGEgbmV3IGJyYW5jaCBoZWFkIHBvaW50aW5nIHRvIG9uZSBvZiB0aGVzZSB2ZXJzaW9ucyBhbmQgY2hlY2sgaXQKK291dCB1c2luZyBsaW5rZ2l0OmdpdC1jaGVja291dFsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtYiBuZXcgdjIuNi4xMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB3b3JraW5nIGRpcmVjdG9yeSB0aGVuIHJlZmxlY3RzIHRoZSBjb250ZW50cyB0aGF0IHRoZSBwcm9qZWN0IGhhZAord2hlbiBpdCB3YXMgdGFnZ2VkIHYyLjYuMTMsIGFuZCBsaW5rZ2l0OmdpdC1icmFuY2hbMV0gc2hvd3MgdHdvCiticmFuY2hlcywgd2l0aCBhbiBhc3RlcmlzayBtYXJraW5nIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaAorICBtYXN0ZXIKKyogbmV3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGRlY2lkZSB0aGF0IHlvdSdkIHJhdGhlciBzZWUgdmVyc2lvbiAyLjYuMTcsIHlvdSBjYW4gbW9kaWZ5Cit0aGUgY3VycmVudCBicmFuY2ggdG8gcG9pbnQgYXQgdjIuNi4xNyBpbnN0ZWFkLCB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVzZXQgLS1oYXJkIHYyLjYuMTcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgaWYgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQgd2FzIHlvdXIgb25seSByZWZlcmVuY2UgdG8gYQorcGFydGljdWxhciBwb2ludCBpbiBoaXN0b3J5LCB0aGVuIHJlc2V0dGluZyB0aGF0IGJyYW5jaCBtYXkgbGVhdmUgeW91Cit3aXRoIG5vIHdheSB0byBmaW5kIHRoZSBoaXN0b3J5IGl0IHVzZWQgdG8gcG9pbnQgdG87IHNvIHVzZSB0aGlzIGNvbW1hbmQKK2NhcmVmdWxseS4KKworW1t1bmRlcnN0YW5kaW5nLWNvbW1pdHNdXQorVW5kZXJzdGFuZGluZyBIaXN0b3J5OiBDb21taXRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXZlcnkgY2hhbmdlIGluIHRoZSBoaXN0b3J5IG9mIGEgcHJvamVjdCBpcyByZXByZXNlbnRlZCBieSBhIGNvbW1pdC4KK1RoZSBsaW5rZ2l0OmdpdC1zaG93WzFdIGNvbW1hbmQgc2hvd3MgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvbiB0aGUKK2N1cnJlbnQgYnJhbmNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cKK2NvbW1pdCAxN2NmNzgxNjYxZTZkMzhmNzM3ZjE1ZjUzYWI1NTJmMWU5NTk2MGQ3CitBdXRob3I6IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0BwcGM5NzAub3NkbC5vcmcuKG5vbmUpPgorRGF0ZTogICBUdWUgQXByIDE5IDE0OjExOjA2IDIwMDUgLTA3MDAKKworICAgIFJlbW92ZSBkdXBsaWNhdGUgZ2V0ZW52KERCX0VOVklST05NRU5UKSBjYWxsCisKKyAgICBOb3RlZCBieSBUb255IEx1Y2suCisKK2RpZmYgLS1naXQgYS9pbml0LWRiLmMgYi9pbml0LWRiLmMKK2luZGV4IDY1ODk4ZmEuLmIwMDJkYzYgMTAwNjQ0CistLS0gYS9pbml0LWRiLmMKKysrKyBiL2luaXQtZGIuYworQEAgLTcsNyArNyw3IEBACisgCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIHsKKy0JY2hhciAqc2hhMV9kaXIgPSBnZXRlbnYoREJfRU5WSVJPTk1FTlQpLCAqcGF0aDsKKysJY2hhciAqc2hhMV9kaXIsICpwYXRoOworIAlpbnQgbGVuLCBpOworIAorIAlpZiAobWtkaXIoIi5naXQiLCAwNzU1KSA8IDApIHsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB5b3UgY2FuIHNlZSwgYSBjb21taXQgc2hvd3Mgd2hvIG1hZGUgdGhlIGxhdGVzdCBjaGFuZ2UsIHdoYXQgdGhleQorZGlkLCBhbmQgd2h5LgorCitFdmVyeSBjb21taXQgaGFzIGEgNDAtaGV4ZGlnaXQgaWQsIHNvbWV0aW1lcyBjYWxsZWQgdGhlICJvYmplY3QgbmFtZSIgb3IgdGhlCisiU0hBLTEgaWQiLCBzaG93biBvbiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgYGdpdCBzaG93YCBvdXRwdXQuICBZb3UgY2FuIHVzdWFsbHkKK3JlZmVyIHRvIGEgY29tbWl0IGJ5IGEgc2hvcnRlciBuYW1lLCBzdWNoIGFzIGEgdGFnIG9yIGEgYnJhbmNoIG5hbWUsIGJ1dCB0aGlzCitsb25nZXIgbmFtZSBjYW4gYWxzbyBiZSB1c2VmdWwuICBNb3N0IGltcG9ydGFudGx5LCBpdCBpcyBhIGdsb2JhbGx5IHVuaXF1ZQorbmFtZSBmb3IgdGhpcyBjb21taXQ6IHNvIGlmIHlvdSB0ZWxsIHNvbWVib2R5IGVsc2UgdGhlIG9iamVjdCBuYW1lIChmb3IKK2V4YW1wbGUgaW4gZW1haWwpLCB0aGVuIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IG5hbWUgd2lsbCByZWZlciB0byB0aGUgc2FtZQorY29tbWl0IGluIHRoZWlyIHJlcG9zaXRvcnkgdGhhdCBpdCBkb2VzIGluIHlvdXJzIChhc3N1bWluZyB0aGVpciByZXBvc2l0b3J5CitoYXMgdGhhdCBjb21taXQgYXQgYWxsKS4gIFNpbmNlIHRoZSBvYmplY3QgbmFtZSBpcyBjb21wdXRlZCBhcyBhIGhhc2ggb3ZlciB0aGUKK2NvbnRlbnRzIG9mIHRoZSBjb21taXQsIHlvdSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoZSBjb21taXQgY2FuIG5ldmVyIGNoYW5nZQord2l0aG91dCBpdHMgbmFtZSBhbHNvIGNoYW5naW5nLgorCitJbiBmYWN0LCBpbiA8PGdpdC1jb25jZXB0cz4+IHdlIHNoYWxsIHNlZSB0aGF0IGV2ZXJ5dGhpbmcgc3RvcmVkIGluIEdpdAoraGlzdG9yeSwgaW5jbHVkaW5nIGZpbGUgZGF0YSBhbmQgZGlyZWN0b3J5IGNvbnRlbnRzLCBpcyBzdG9yZWQgaW4gYW4gb2JqZWN0Cit3aXRoIGEgbmFtZSB0aGF0IGlzIGEgaGFzaCBvZiBpdHMgY29udGVudHMuCisKK1tbdW5kZXJzdGFuZGluZy1yZWFjaGFiaWxpdHldXQorVW5kZXJzdGFuZGluZyBoaXN0b3J5OiBjb21taXRzLCBwYXJlbnRzLCBhbmQgcmVhY2hhYmlsaXR5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworRXZlcnkgY29tbWl0IChleGNlcHQgdGhlIHZlcnkgZmlyc3QgY29tbWl0IGluIGEgcHJvamVjdCkgYWxzbyBoYXMgYQorcGFyZW50IGNvbW1pdCB3aGljaCBzaG93cyB3aGF0IGhhcHBlbmVkIGJlZm9yZSB0aGlzIGNvbW1pdC4KK0ZvbGxvd2luZyB0aGUgY2hhaW4gb2YgcGFyZW50cyB3aWxsIGV2ZW50dWFsbHkgdGFrZSB5b3UgYmFjayB0byB0aGUKK2JlZ2lubmluZyBvZiB0aGUgcHJvamVjdC4KKworSG93ZXZlciwgdGhlIGNvbW1pdHMgZG8gbm90IGZvcm0gYSBzaW1wbGUgbGlzdDsgR2l0IGFsbG93cyBsaW5lcyBvZgorZGV2ZWxvcG1lbnQgdG8gZGl2ZXJnZSBhbmQgdGhlbiByZWNvbnZlcmdlLCBhbmQgdGhlIHBvaW50IHdoZXJlIHR3bworbGluZXMgb2YgZGV2ZWxvcG1lbnQgcmVjb252ZXJnZSBpcyBjYWxsZWQgYSAibWVyZ2UiLiAgVGhlIGNvbW1pdAorcmVwcmVzZW50aW5nIGEgbWVyZ2UgY2FuIHRoZXJlZm9yZSBoYXZlIG1vcmUgdGhhbiBvbmUgcGFyZW50LCB3aXRoCitlYWNoIHBhcmVudCByZXByZXNlbnRpbmcgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvbiBvbmUgb2YgdGhlIGxpbmVzCitvZiBkZXZlbG9wbWVudCBsZWFkaW5nIHRvIHRoYXQgcG9pbnQuCisKK1RoZSBiZXN0IHdheSB0byBzZWUgaG93IHRoaXMgd29ya3MgaXMgdXNpbmcgdGhlIGxpbmtnaXQ6Z2l0a1sxXQorY29tbWFuZDsgcnVubmluZyBnaXRrIG5vdyBvbiBhIEdpdCByZXBvc2l0b3J5IGFuZCBsb29raW5nIGZvciBtZXJnZQorY29tbWl0cyB3aWxsIGhlbHAgdW5kZXJzdGFuZCBob3cgR2l0IG9yZ2FuaXplcyBoaXN0b3J5LgorCitJbiB0aGUgZm9sbG93aW5nLCB3ZSBzYXkgdGhhdCBjb21taXQgWCBpcyAicmVhY2hhYmxlIiBmcm9tIGNvbW1pdCBZCitpZiBjb21taXQgWCBpcyBhbiBhbmNlc3RvciBvZiBjb21taXQgWS4gIEVxdWl2YWxlbnRseSwgeW91IGNvdWxkIHNheQordGhhdCBZIGlzIGEgZGVzY2VuZGFudCBvZiBYLCBvciB0aGF0IHRoZXJlIGlzIGEgY2hhaW4gb2YgcGFyZW50cworbGVhZGluZyBmcm9tIGNvbW1pdCBZIHRvIGNvbW1pdCBYLgorCitbW2hpc3RvcnktZGlhZ3JhbXNdXQorVW5kZXJzdGFuZGluZyBoaXN0b3J5OiBIaXN0b3J5IGRpYWdyYW1zCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworV2Ugd2lsbCBzb21ldGltZXMgcmVwcmVzZW50IEdpdCBoaXN0b3J5IHVzaW5nIGRpYWdyYW1zIGxpa2UgdGhlIG9uZQorYmVsb3cuICBDb21taXRzIGFyZSBzaG93biBhcyAibyIsIGFuZCB0aGUgbGlua3MgYmV0d2VlbiB0aGVtIHdpdGgKK2xpbmVzIGRyYXduIHdpdGggLSAvIGFuZCBcLiAgVGltZSBnb2VzIGxlZnQgdG8gcmlnaHQ6CisKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgICAgICAgICBvLS1vLS1vIDwtLSBCcmFuY2ggQQorICAgICAgICAvCisgby0tby0tbyA8LS0gbWFzdGVyCisgICAgICAgIFwKKyAgICAgICAgIG8tLW8tLW8gPC0tIEJyYW5jaCBCCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworSWYgd2UgbmVlZCB0byB0YWxrIGFib3V0IGEgcGFydGljdWxhciBjb21taXQsIHRoZSBjaGFyYWN0ZXIgIm8iIG1heQorYmUgcmVwbGFjZWQgd2l0aCBhbm90aGVyIGxldHRlciBvciBudW1iZXIuCisKK1tbd2hhdC1pcy1hLWJyYW5jaF1dCitVbmRlcnN0YW5kaW5nIGhpc3Rvcnk6IFdoYXQgaXMgYSBicmFuY2g/Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doZW4gd2UgbmVlZCB0byBiZSBwcmVjaXNlLCB3ZSB3aWxsIHVzZSB0aGUgd29yZCAiYnJhbmNoIiB0byBtZWFuIGEgbGluZQorb2YgZGV2ZWxvcG1lbnQsIGFuZCAiYnJhbmNoIGhlYWQiIChvciBqdXN0ICJoZWFkIikgdG8gbWVhbiBhIHJlZmVyZW5jZQordG8gdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvbiBhIGJyYW5jaC4gIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgYnJhbmNoCitoZWFkIG5hbWVkICJBIiBpcyBhIHBvaW50ZXIgdG8gb25lIHBhcnRpY3VsYXIgY29tbWl0LCBidXQgd2UgcmVmZXIgdG8KK3RoZSBsaW5lIG9mIHRocmVlIGNvbW1pdHMgbGVhZGluZyB1cCB0byB0aGF0IHBvaW50IGFzIGFsbCBiZWluZyBwYXJ0IG9mCisiYnJhbmNoIEEiLgorCitIb3dldmVyLCB3aGVuIG5vIGNvbmZ1c2lvbiB3aWxsIHJlc3VsdCwgd2Ugb2Z0ZW4ganVzdCB1c2UgdGhlIHRlcm0KKyJicmFuY2giIGJvdGggZm9yIGJyYW5jaGVzIGFuZCBmb3IgYnJhbmNoIGhlYWRzLgorCitbW21hbmlwdWxhdGluZy1icmFuY2hlc11dCitNYW5pcHVsYXRpbmcgYnJhbmNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVhdGluZywgZGVsZXRpbmcsIGFuZCBtb2RpZnlpbmcgYnJhbmNoZXMgaXMgcXVpY2sgYW5kIGVhc3k7IGhlcmUncworYSBzdW1tYXJ5IG9mIHRoZSBjb21tYW5kczoKKworYGdpdCBicmFuY2hgOjoKKwlsaXN0IGFsbCBicmFuY2hlcy4KK2BnaXQgYnJhbmNoIDxicmFuY2g+YDo6CisJY3JlYXRlIGEgbmV3IGJyYW5jaCBuYW1lZCBgPGJyYW5jaD5gLCByZWZlcmVuY2luZyB0aGUgc2FtZQorCXBvaW50IGluIGhpc3RvcnkgYXMgdGhlIGN1cnJlbnQgYnJhbmNoLgorYGdpdCBicmFuY2ggPGJyYW5jaD4gPHN0YXJ0LXBvaW50PmA6OgorCWNyZWF0ZSBhIG5ldyBicmFuY2ggbmFtZWQgYDxicmFuY2g+YCwgcmVmZXJlbmNpbmcKKwlgPHN0YXJ0LXBvaW50PmAsIHdoaWNoIG1heSBiZSBzcGVjaWZpZWQgYW55IHdheSB5b3UgbGlrZSwKKwlpbmNsdWRpbmcgdXNpbmcgYSBicmFuY2ggbmFtZSBvciBhIHRhZyBuYW1lLgorYGdpdCBicmFuY2ggLWQgPGJyYW5jaD5gOjoKKwlkZWxldGUgdGhlIGJyYW5jaCBgPGJyYW5jaD5gOyBpZiB0aGUgYnJhbmNoIGlzIG5vdCBmdWxseQorCW1lcmdlZCBpbiBpdHMgdXBzdHJlYW0gYnJhbmNoIG9yIGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBicmFuY2gsCisJdGhpcyBjb21tYW5kIHdpbGwgZmFpbCB3aXRoIGEgd2FybmluZy4KK2BnaXQgYnJhbmNoIC1EIDxicmFuY2g+YDo6CisJZGVsZXRlIHRoZSBicmFuY2ggYDxicmFuY2g+YCBpcnJlc3BlY3RpdmUgb2YgaXRzIG1lcmdlZCBzdGF0dXMuCitgZ2l0IGNoZWNrb3V0IDxicmFuY2g+YDo6CisJbWFrZSB0aGUgY3VycmVudCBicmFuY2ggYDxicmFuY2g+YCwgdXBkYXRpbmcgdGhlIHdvcmtpbmcKKwlkaXJlY3RvcnkgdG8gcmVmbGVjdCB0aGUgdmVyc2lvbiByZWZlcmVuY2VkIGJ5IGA8YnJhbmNoPmAuCitgZ2l0IGNoZWNrb3V0IC1iIDxuZXc+IDxzdGFydC1wb2ludD5gOjoKKwljcmVhdGUgYSBuZXcgYnJhbmNoIGA8bmV3PmAgcmVmZXJlbmNpbmcgYDxzdGFydC1wb2ludD5gLCBhbmQKKwljaGVjayBpdCBvdXQuCisKK1RoZSBzcGVjaWFsIHN5bWJvbCAiSEVBRCIgY2FuIGFsd2F5cyBiZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSBjdXJyZW50CiticmFuY2guICBJbiBmYWN0LCBHaXQgdXNlcyBhIGZpbGUgbmFtZWQgYEhFQURgIGluIHRoZSBgLmdpdGAgZGlyZWN0b3J5Cit0byByZW1lbWJlciB3aGljaCBicmFuY2ggaXMgY3VycmVudDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCAuZ2l0L0hFQUQKK3JlZjogcmVmcy9oZWFkcy9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW2RldGFjaGVkLWhlYWRdXQorRXhhbWluaW5nIGFuIG9sZCB2ZXJzaW9uIHdpdGhvdXQgY3JlYXRpbmcgYSBuZXcgYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGBnaXQgY2hlY2tvdXRgIGNvbW1hbmQgbm9ybWFsbHkgZXhwZWN0cyBhIGJyYW5jaCBoZWFkLCBidXQgd2lsbCBhbHNvCithY2NlcHQgYW4gYXJiaXRyYXJ5IGNvbW1pdDsgZm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hlY2sgb3V0IHRoZSBjb21taXQKK3JlZmVyZW5jZWQgYnkgYSB0YWc6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgdjIuNi4xNworTm90ZTogY2hlY2tpbmcgb3V0ICd2Mi42LjE3Jy4KKworWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsCitjaGFuZ2VzIGFuZCBjb21taXQgdGhlbSwgYW5kIHlvdSBjYW4gZGlzY2FyZCBhbnkgY29tbWl0cyB5b3UgbWFrZSBpbiB0aGlzCitzdGF0ZSB3aXRob3V0IGltcGFjdGluZyBhbnkgYnJhbmNoZXMgYnkgcGVyZm9ybWluZyBhbm90aGVyIGNoZWNrb3V0LgorCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXkKK2RvIHNvIChub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1iIHdpdGggdGhlIGNoZWNrb3V0IGNvbW1hbmQgYWdhaW4uIEV4YW1wbGU6CisKKyAgZ2l0IGNoZWNrb3V0IC1iIG5ld19icmFuY2hfbmFtZQorCitIRUFEIGlzIG5vdyBhdCA0MjdhYmZhLi4uIExpbnV4IHYyLjYuMTcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgSEVBRCB0aGVuIHJlZmVycyB0byB0aGUgU0hBLTEgb2YgdGhlIGNvbW1pdCBpbnN0ZWFkIG9mIHRvIGEgYnJhbmNoLAorYW5kIGdpdCBicmFuY2ggc2hvd3MgdGhhdCB5b3UgYXJlIG5vIGxvbmdlciBvbiBhIGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCAuZ2l0L0hFQUQKKzQyN2FiZmEyOGFmZWRmZmFkZmNhOWRkOGIwNjdlYjZkMzZiYWM1M2YKKyQgZ2l0IGJyYW5jaAorKiAoZGV0YWNoZWQgZnJvbSB2Mi42LjE3KQorICBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGlzIGNhc2Ugd2Ugc2F5IHRoYXQgdGhlIEhFQUQgaXMgImRldGFjaGVkIi4KKworVGhpcyBpcyBhbiBlYXN5IHdheSB0byBjaGVjayBvdXQgYSBwYXJ0aWN1bGFyIHZlcnNpb24gd2l0aG91dCBoYXZpbmcgdG8KK21ha2UgdXAgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaC4gICBZb3UgY2FuIHN0aWxsIGNyZWF0ZSBhIG5ldyBicmFuY2gKKyhvciB0YWcpIGZvciB0aGlzIHZlcnNpb24gbGF0ZXIgaWYgeW91IGRlY2lkZSB0by4KKworW1tleGFtaW5pbmctcmVtb3RlLWJyYW5jaGVzXV0KK0V4YW1pbmluZyBicmFuY2hlcyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlICJtYXN0ZXIiIGJyYW5jaCB0aGF0IHdhcyBjcmVhdGVkIGF0IHRoZSB0aW1lIHlvdSBjbG9uZWQgaXMgYSBjb3B5CitvZiB0aGUgSEVBRCBpbiB0aGUgcmVwb3NpdG9yeSB0aGF0IHlvdSBjbG9uZWQgZnJvbS4gIFRoYXQgcmVwb3NpdG9yeQorbWF5IGFsc28gaGF2ZSBoYWQgb3RoZXIgYnJhbmNoZXMsIHRob3VnaCwgYW5kIHlvdXIgbG9jYWwgcmVwb3NpdG9yeQora2VlcHMgYnJhbmNoZXMgd2hpY2ggdHJhY2sgZWFjaCBvZiB0aG9zZSByZW1vdGUgYnJhbmNoZXMsIGNhbGxlZAorcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzLCB3aGljaCB5b3UKK2NhbiB2aWV3IHVzaW5nIHRoZSBgLXJgIG9wdGlvbiB0byBsaW5rZ2l0OmdpdC1icmFuY2hbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1yCisgIG9yaWdpbi9IRUFECisgIG9yaWdpbi9odG1sCisgIG9yaWdpbi9tYWludAorICBvcmlnaW4vbWFuCisgIG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL25leHQKKyAgb3JpZ2luL3B1CisgIG9yaWdpbi90b2RvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhpcyBleGFtcGxlLCAib3JpZ2luIiBpcyBjYWxsZWQgYSByZW1vdGUgcmVwb3NpdG9yeSwgb3IgInJlbW90ZSIKK2ZvciBzaG9ydC4gVGhlIGJyYW5jaGVzIG9mIHRoaXMgcmVwb3NpdG9yeSBhcmUgY2FsbGVkICJyZW1vdGUKK2JyYW5jaGVzIiBmcm9tIG91ciBwb2ludCBvZiB2aWV3LiBUaGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIGxpc3RlZAorYWJvdmUgd2VyZSBjcmVhdGVkIGJhc2VkIG9uIHRoZSByZW1vdGUgYnJhbmNoZXMgYXQgY2xvbmUgdGltZSBhbmQgd2lsbAorYmUgdXBkYXRlZCBieSBgZ2l0IGZldGNoYCAoaGVuY2UgYGdpdCBwdWxsYCkgYW5kIGBnaXQgcHVzaGAuIFNlZQorPDxVcGRhdGluZy1hLXJlcG9zaXRvcnktV2l0aC1naXQtZmV0Y2g+PiBmb3IgZGV0YWlscy4KKworWW91IG1pZ2h0IHdhbnQgdG8gYnVpbGQgb24gb25lIG9mIHRoZXNlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcworb24gYSBicmFuY2ggb2YgeW91ciBvd24sIGp1c3QgYXMgeW91IHdvdWxkIGZvciBhIHRhZzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtYiBteS10b2RvLWNvcHkgb3JpZ2luL3RvZG8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGFsc28gY2hlY2sgb3V0IGBvcmlnaW4vdG9kb2AgZGlyZWN0bHkgdG8gZXhhbWluZSBpdCBvcgord3JpdGUgYSBvbmUtb2ZmIHBhdGNoLiAgU2VlIDw8ZGV0YWNoZWQtaGVhZCxkZXRhY2hlZCBoZWFkPj4uCisKK05vdGUgdGhhdCB0aGUgbmFtZSAib3JpZ2luIiBpcyBqdXN0IHRoZSBuYW1lIHRoYXQgR2l0IHVzZXMgYnkgZGVmYXVsdAordG8gcmVmZXIgdG8gdGhlIHJlcG9zaXRvcnkgdGhhdCB5b3UgY2xvbmVkIGZyb20uCisKK1tbaG93LWdpdC1zdG9yZXMtcmVmZXJlbmNlc11dCitOYW1pbmcgYnJhbmNoZXMsIHRhZ3MsIGFuZCBvdGhlciByZWZlcmVuY2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JyYW5jaGVzLCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMsIGFuZCB0YWdzIGFyZSBhbGwgcmVmZXJlbmNlcyB0bworY29tbWl0cy4gIEFsbCByZWZlcmVuY2VzIGFyZSBuYW1lZCB3aXRoIGEgc2xhc2gtc2VwYXJhdGVkIHBhdGggbmFtZQorc3RhcnRpbmcgd2l0aCBgcmVmc2A7IHRoZSBuYW1lcyB3ZSd2ZSBiZWVuIHVzaW5nIHNvIGZhciBhcmUgYWN0dWFsbHkKK3Nob3J0aGFuZDoKKworCS0gVGhlIGJyYW5jaCBgdGVzdGAgaXMgc2hvcnQgZm9yIGByZWZzL2hlYWRzL3Rlc3RgLgorCS0gVGhlIHRhZyBgdjIuNi4xOGAgaXMgc2hvcnQgZm9yIGByZWZzL3RhZ3MvdjIuNi4xOGAuCisJLSBgb3JpZ2luL21hc3RlcmAgaXMgc2hvcnQgZm9yIGByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcmAuCisKK1RoZSBmdWxsIG5hbWUgaXMgb2NjYXNpb25hbGx5IHVzZWZ1bCBpZiwgZm9yIGV4YW1wbGUsIHRoZXJlIGV2ZXIKK2V4aXN0cyBhIHRhZyBhbmQgYSBicmFuY2ggd2l0aCB0aGUgc2FtZSBuYW1lLgorCisoTmV3bHkgY3JlYXRlZCByZWZzIGFyZSBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIGAuZ2l0L3JlZnNgIGRpcmVjdG9yeSwKK3VuZGVyIHRoZSBwYXRoIGdpdmVuIGJ5IHRoZWlyIG5hbWUuICBIb3dldmVyLCBmb3IgZWZmaWNpZW5jeSByZWFzb25zCit0aGV5IG1heSBhbHNvIGJlIHBhY2tlZCB0b2dldGhlciBpbiBhIHNpbmdsZSBmaWxlOyBzZWUKK2xpbmtnaXQ6Z2l0LXBhY2stcmVmc1sxXSkuCisKK0FzIGFub3RoZXIgdXNlZnVsIHNob3J0Y3V0LCB0aGUgIkhFQUQiIG9mIGEgcmVwb3NpdG9yeSBjYW4gYmUgcmVmZXJyZWQKK3RvIGp1c3QgdXNpbmcgdGhlIG5hbWUgb2YgdGhhdCByZXBvc2l0b3J5LiAgU28sIGZvciBleGFtcGxlLCAib3JpZ2luIgoraXMgdXN1YWxseSBhIHNob3J0Y3V0IGZvciB0aGUgSEVBRCBicmFuY2ggaW4gdGhlIHJlcG9zaXRvcnkgIm9yaWdpbiIuCisKK0ZvciB0aGUgY29tcGxldGUgbGlzdCBvZiBwYXRocyB3aGljaCBHaXQgY2hlY2tzIGZvciByZWZlcmVuY2VzLCBhbmQKK3RoZSBvcmRlciBpdCB1c2VzIHRvIGRlY2lkZSB3aGljaCB0byBjaG9vc2Ugd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUKK3JlZmVyZW5jZXMgd2l0aCB0aGUgc2FtZSBzaG9ydGhhbmQgbmFtZSwgc2VlIHRoZSAiU1BFQ0lGWUlORworUkVWSVNJT05TIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0cmV2aXNpb25zWzddLgorCitbW1VwZGF0aW5nLWEtcmVwb3NpdG9yeS1XaXRoLWdpdC1mZXRjaF1dCitVcGRhdGluZyBhIHJlcG9zaXRvcnkgd2l0aCBnaXQgZmV0Y2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZnRlciB5b3UgY2xvbmUgYSByZXBvc2l0b3J5IGFuZCBjb21taXQgYSBmZXcgY2hhbmdlcyBvZiB5b3VyIG93biwgeW91CittYXkgd2lzaCB0byBjaGVjayB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yeSBmb3IgdXBkYXRlcy4KKworVGhlIGBnaXQtZmV0Y2hgIGNvbW1hbmQsIHdpdGggbm8gYXJndW1lbnRzLCB3aWxsIHVwZGF0ZSBhbGwgb2YgdGhlCityZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uIGZvdW5kIGluIHRoZSBvcmlnaW5hbAorcmVwb3NpdG9yeS4gIEl0IHdpbGwgbm90IHRvdWNoIGFueSBvZiB5b3VyIG93biBicmFuY2hlcy0tbm90IGV2ZW4gdGhlCisibWFzdGVyIiBicmFuY2ggdGhhdCB3YXMgY3JlYXRlZCBmb3IgeW91IG9uIGNsb25lLgorCitbW2ZldGNoaW5nLWJyYW5jaGVzXV0KK0ZldGNoaW5nIGJyYW5jaGVzIGZyb20gb3RoZXIgcmVwb3NpdG9yaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGFsc28gdHJhY2sgYnJhbmNoZXMgZnJvbSByZXBvc2l0b3JpZXMgb3RoZXIgdGhhbiB0aGUgb25lIHlvdQorY2xvbmVkIGZyb20sIHVzaW5nIGxpbmtnaXQ6Z2l0LXJlbW90ZVsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVtb3RlIGFkZCBzdGFnaW5nIGdpdDovL2dpdC5rZXJuZWwub3JnLy4uLi9ncmVna2gvc3RhZ2luZy5naXQKKyQgZ2l0IGZldGNoIHN0YWdpbmcKKy4uLgorRnJvbSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ3JlZ2toL3N0YWdpbmcKKyAqIFtuZXcgYnJhbmNoXSAgICAgIG1hc3RlciAgICAgLT4gc3RhZ2luZy9tYXN0ZXIKKyAqIFtuZXcgYnJhbmNoXSAgICAgIHN0YWdpbmctbGludXMgLT4gc3RhZ2luZy9zdGFnaW5nLWxpbnVzCisgKiBbbmV3IGJyYW5jaF0gICAgICBzdGFnaW5nLW5leHQgLT4gc3RhZ2luZy9zdGFnaW5nLW5leHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTmV3IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyB3aWxsIGJlIHN0b3JlZCB1bmRlciB0aGUgc2hvcnRoYW5kIG5hbWUKK3RoYXQgeW91IGdhdmUgYGdpdCByZW1vdGUgYWRkYCwgaW4gdGhpcyBjYXNlIGBzdGFnaW5nYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1yCisgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL21hc3RlcgorICBzdGFnaW5nL21hc3RlcgorICBzdGFnaW5nL3N0YWdpbmctbGludXMKKyAgc3RhZ2luZy9zdGFnaW5nLW5leHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHJ1biBgZ2l0IGZldGNoIDxyZW1vdGU+YCBsYXRlciwgdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2hlcworZm9yIHRoZSBuYW1lZCBgPHJlbW90ZT5gIHdpbGwgYmUgdXBkYXRlZC4KKworSWYgeW91IGV4YW1pbmUgdGhlIGZpbGUgYC5naXQvY29uZmlnYCwgeW91IHdpbGwgc2VlIHRoYXQgR2l0IGhhcyBhZGRlZAorYSBuZXcgc3RhbnphOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCAuZ2l0L2NvbmZpZworLi4uCitbcmVtb3RlICJzdGFnaW5nIl0KKwl1cmwgPSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZ3JlZ2toL3N0YWdpbmcuZ2l0CisJZmV0Y2ggPSArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9zdGFnaW5nLyoKKy4uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIHdoYXQgY2F1c2VzIEdpdCB0byB0cmFjayB0aGUgcmVtb3RlJ3MgYnJhbmNoZXM7IHlvdSBtYXkgbW9kaWZ5CitvciBkZWxldGUgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGJ5IGVkaXRpbmcgYC5naXQvY29uZmlnYCB3aXRoIGEKK3RleHQgZWRpdG9yLiAgKFNlZSB0aGUgIkNPTkZJR1VSQVRJT04gRklMRSIgc2VjdGlvbiBvZgorbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBkZXRhaWxzLikKKworW1tleHBsb3JpbmctZ2l0LWhpc3RvcnldXQorRXhwbG9yaW5nIEdpdCBoaXN0b3J5Cis9PT09PT09PT09PT09PT09PT09PT0KKworR2l0IGlzIGJlc3QgdGhvdWdodCBvZiBhcyBhIHRvb2wgZm9yIHN0b3JpbmcgdGhlIGhpc3Rvcnkgb2YgYQorY29sbGVjdGlvbiBvZiBmaWxlcy4gIEl0IGRvZXMgdGhpcyBieSBzdG9yaW5nIGNvbXByZXNzZWQgc25hcHNob3RzIG9mCit0aGUgY29udGVudHMgb2YgYSBmaWxlIGhpZXJhcmNoeSwgdG9nZXRoZXIgd2l0aCAiY29tbWl0cyIgd2hpY2ggc2hvdwordGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBzbmFwc2hvdHMuCisKK0dpdCBwcm92aWRlcyBleHRyZW1lbHkgZmxleGlibGUgYW5kIGZhc3QgdG9vbHMgZm9yIGV4cGxvcmluZyB0aGUKK2hpc3Rvcnkgb2YgYSBwcm9qZWN0LgorCitXZSBzdGFydCB3aXRoIG9uZSBzcGVjaWFsaXplZCB0b29sIHRoYXQgaXMgdXNlZnVsIGZvciBmaW5kaW5nIHRoZQorY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyBpbnRvIGEgcHJvamVjdC4KKworW1t1c2luZy1iaXNlY3RdXQorSG93IHRvIHVzZSBiaXNlY3QgdG8gZmluZCBhIHJlZ3Jlc3Npb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvc2UgdmVyc2lvbiAyLjYuMTggb2YgeW91ciBwcm9qZWN0IHdvcmtlZCwgYnV0IHRoZSB2ZXJzaW9uIGF0CisibWFzdGVyIiBjcmFzaGVzLiAgU29tZXRpbWVzIHRoZSBiZXN0IHdheSB0byBmaW5kIHRoZSBjYXVzZSBvZiBzdWNoIGEKK3JlZ3Jlc3Npb24gaXMgdG8gcGVyZm9ybSBhIGJydXRlLWZvcmNlIHNlYXJjaCB0aHJvdWdoIHRoZSBwcm9qZWN0J3MKK2hpc3RvcnkgdG8gZmluZCB0aGUgcGFydGljdWxhciBjb21taXQgdGhhdCBjYXVzZWQgdGhlIHByb2JsZW0uICBUaGUKK2xpbmtnaXQ6Z2l0LWJpc2VjdFsxXSBjb21tYW5kIGNhbiBoZWxwIHlvdSBkbyB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc3RhcnQKKyQgZ2l0IGJpc2VjdCBnb29kIHYyLjYuMTgKKyQgZ2l0IGJpc2VjdCBiYWQgbWFzdGVyCitCaXNlY3Rpbmc6IDM1MzcgcmV2aXNpb25zIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzCitbNjU5MzRhOWEwMjhiODhlODNlMmIwZjhiMzY2MThmZTUwMzM0OWY4ZV0gQkxPQ0s6IE1ha2UgVVNCIHN0b3JhZ2UgZGVwZW5kIG9uIFNDU0kgcmF0aGVyIHRoYW4gc2VsZWN0aW5nIGl0IFt0cnkgIzZdCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBydW4gYGdpdCBicmFuY2hgIGF0IHRoaXMgcG9pbnQsIHlvdSdsbCBzZWUgdGhhdCBHaXQgaGFzCit0ZW1wb3JhcmlseSBtb3ZlZCB5b3UgaW4gIihubyBicmFuY2gpIi4gSEVBRCBpcyBub3cgZGV0YWNoZWQgZnJvbSBhbnkKK2JyYW5jaCBhbmQgcG9pbnRzIGRpcmVjdGx5IHRvIGEgY29tbWl0ICh3aXRoIGNvbW1pdCBpZCA2NTkzNC4uLikgdGhhdAoraXMgcmVhY2hhYmxlIGZyb20gIm1hc3RlciIgYnV0IG5vdCBmcm9tIHYyLjYuMTguIENvbXBpbGUgYW5kIHRlc3QgaXQsCithbmQgc2VlIHdoZXRoZXIgaXQgY3Jhc2hlcy4gQXNzdW1lIGl0IGRvZXMgY3Jhc2guIFRoZW46CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJpc2VjdCBiYWQKK0Jpc2VjdGluZzogMTc2OSByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMKK1s3ZWZmODJjOGIxNTExMDE3YWU2MDVmMGM5OWFjMjc1YTdlMjFiODY3XSBpMmMtY29yZTogRHJvcCB1c2VsZXNzIGJpdG1hc2tpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NoZWNrcyBvdXQgYW4gb2xkZXIgdmVyc2lvbi4gIENvbnRpbnVlIGxpa2UgdGhpcywgdGVsbGluZyBHaXQgYXQgZWFjaAorc3RhZ2Ugd2hldGhlciB0aGUgdmVyc2lvbiBpdCBnaXZlcyB5b3UgaXMgZ29vZCBvciBiYWQsIGFuZCBub3RpY2UKK3RoYXQgdGhlIG51bWJlciBvZiByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGlzIGN1dCBhcHByb3hpbWF0ZWx5IGluCitoYWxmIGVhY2ggdGltZS4KKworQWZ0ZXIgYWJvdXQgMTMgdGVzdHMgKGluIHRoaXMgY2FzZSksIGl0IHdpbGwgb3V0cHV0IHRoZSBjb21taXQgaWQgb2YKK3RoZSBndWlsdHkgY29tbWl0LiAgWW91IGNhbiB0aGVuIGV4YW1pbmUgdGhlIGNvbW1pdCB3aXRoCitsaW5rZ2l0OmdpdC1zaG93WzFdLCBmaW5kIG91dCB3aG8gd3JvdGUgaXQsIGFuZCBtYWlsIHRoZW0geW91ciBidWcKK3JlcG9ydCB3aXRoIHRoZSBjb21taXQgaWQuICBGaW5hbGx5LCBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHJlc2V0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHJldHVybiB5b3UgdG8gdGhlIGJyYW5jaCB5b3Ugd2VyZSBvbiBiZWZvcmUuCisKK05vdGUgdGhhdCB0aGUgdmVyc2lvbiB3aGljaCBgZ2l0IGJpc2VjdGAgY2hlY2tzIG91dCBmb3IgeW91IGF0IGVhY2gKK3BvaW50IGlzIGp1c3QgYSBzdWdnZXN0aW9uLCBhbmQgeW91J3JlIGZyZWUgdG8gdHJ5IGEgZGlmZmVyZW50Cit2ZXJzaW9uIGlmIHlvdSB0aGluayBpdCB3b3VsZCBiZSBhIGdvb2QgaWRlYS4gIEZvciBleGFtcGxlLAorb2NjYXNpb25hbGx5IHlvdSBtYXkgbGFuZCBvbiBhIGNvbW1pdCB0aGF0IGJyb2tlIHNvbWV0aGluZyB1bnJlbGF0ZWQ7CitydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHZpc3VhbGl6ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIHJ1biBnaXRrIGFuZCBsYWJlbCB0aGUgY29tbWl0IGl0IGNob3NlIHdpdGggYSBtYXJrZXIgdGhhdAorc2F5cyAiYmlzZWN0Ii4gIENob29zZSBhIHNhZmUtbG9va2luZyBjb21taXQgbmVhcmJ5LCBub3RlIGl0cyBjb21taXQKK2lkLCBhbmQgY2hlY2sgaXQgb3V0IHdpdGg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc2V0IC0taGFyZCBmYjQ3ZGRiMmRiLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RoZW4gdGVzdCwgcnVuIGBiaXNlY3QgZ29vZGAgb3IgYGJpc2VjdCBiYWRgIGFzIGFwcHJvcHJpYXRlLCBhbmQKK2NvbnRpbnVlLgorCitJbnN0ZWFkIG9mIGBnaXQgYmlzZWN0IHZpc3VhbGl6ZWAgYW5kIHRoZW4gYGdpdCByZXNldCAtLWhhcmQKK2ZiNDdkZGIyZGIuLi5gLCB5b3UgbWlnaHQganVzdCB3YW50IHRvIHRlbGwgR2l0IHRoYXQgeW91IHdhbnQgdG8gc2tpcAordGhlIGN1cnJlbnQgY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBiaXNlY3Qgc2tpcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGlzIGNhc2UsIHRob3VnaCwgR2l0IG1heSBub3QgZXZlbnR1YWxseSBiZSBhYmxlIHRvIHRlbGwgdGhlIGZpcnN0CitiYWQgb25lIGJldHdlZW4gc29tZSBmaXJzdCBza2lwcGVkIGNvbW1pdHMgYW5kIGEgbGF0ZXIgYmFkIGNvbW1pdC4KKworVGhlcmUgYXJlIGFsc28gd2F5cyB0byBhdXRvbWF0ZSB0aGUgYmlzZWN0aW5nIHByb2Nlc3MgaWYgeW91IGhhdmUgYQordGVzdCBzY3JpcHQgdGhhdCBjYW4gdGVsbCBhIGdvb2QgZnJvbSBhIGJhZCBjb21taXQuIFNlZQorbGlua2dpdDpnaXQtYmlzZWN0WzFdIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgYW5kIG90aGVyIGBnaXQKK2Jpc2VjdGAgZmVhdHVyZXMuCisKK1tbbmFtaW5nLWNvbW1pdHNdXQorTmFtaW5nIGNvbW1pdHMKKy0tLS0tLS0tLS0tLS0tCisKK1dlIGhhdmUgc2VlbiBzZXZlcmFsIHdheXMgb2YgbmFtaW5nIGNvbW1pdHMgYWxyZWFkeToKKworCS0gNDAtaGV4ZGlnaXQgb2JqZWN0IG5hbWUKKwktIGJyYW5jaCBuYW1lOiByZWZlcnMgdG8gdGhlIGNvbW1pdCBhdCB0aGUgaGVhZCBvZiB0aGUgZ2l2ZW4KKwkgIGJyYW5jaAorCS0gdGFnIG5hbWU6IHJlZmVycyB0byB0aGUgY29tbWl0IHBvaW50ZWQgdG8gYnkgdGhlIGdpdmVuIHRhZworCSAgKHdlJ3ZlIHNlZW4gYnJhbmNoZXMgYW5kIHRhZ3MgYXJlIHNwZWNpYWwgY2FzZXMgb2YKKwkgIDw8aG93LWdpdC1zdG9yZXMtcmVmZXJlbmNlcyxyZWZlcmVuY2VzPj4pLgorCS0gSEVBRDogcmVmZXJzIHRvIHRoZSBoZWFkIG9mIHRoZSBjdXJyZW50IGJyYW5jaAorCitUaGVyZSBhcmUgbWFueSBtb3JlOyBzZWUgdGhlICJTUEVDSUZZSU5HIFJFVklTSU9OUyIgc2VjdGlvbiBvZiB0aGUKK2xpbmtnaXQ6Z2l0cmV2aXNpb25zWzddIG1hbiBwYWdlIGZvciB0aGUgY29tcGxldGUgbGlzdCBvZiB3YXlzIHRvCituYW1lIHJldmlzaW9ucy4gIFNvbWUgZXhhbXBsZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgZmI0N2RkYjIgIyB0aGUgZmlyc3QgZmV3IGNoYXJhY3RlcnMgb2YgdGhlIG9iamVjdCBuYW1lCisJCSAgICAjIGFyZSB1c3VhbGx5IGVub3VnaCB0byBzcGVjaWZ5IGl0IHVuaXF1ZWx5CiskIGdpdCBzaG93IEhFQUReICAgICMgdGhlIHBhcmVudCBvZiB0aGUgSEVBRCBjb21taXQKKyQgZ2l0IHNob3cgSEVBRF5eICAgIyB0aGUgZ3JhbmRwYXJlbnQKKyQgZ2l0IHNob3cgSEVBRH40ICAgIyB0aGUgZ3JlYXQtZ3JlYXQtZ3JhbmRwYXJlbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVjYWxsIHRoYXQgbWVyZ2UgY29tbWl0cyBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIHBhcmVudDsgYnkgZGVmYXVsdCwKK2BeYCBhbmQgYH5gIGZvbGxvdyB0aGUgZmlyc3QgcGFyZW50IGxpc3RlZCBpbiB0aGUgY29tbWl0LCBidXQgeW91IGNhbgorYWxzbyBjaG9vc2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgSEVBRF4xICAgIyBzaG93IHRoZSBmaXJzdCBwYXJlbnQgb2YgSEVBRAorJCBnaXQgc2hvdyBIRUFEXjIgICAjIHNob3cgdGhlIHNlY29uZCBwYXJlbnQgb2YgSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBhZGRpdGlvbiB0byBIRUFELCB0aGVyZSBhcmUgc2V2ZXJhbCBvdGhlciBzcGVjaWFsIG5hbWVzIGZvcgorY29tbWl0czoKKworTWVyZ2VzICh0byBiZSBkaXNjdXNzZWQgbGF0ZXIpLCBhcyB3ZWxsIGFzIG9wZXJhdGlvbnMgc3VjaCBhcworYGdpdCByZXNldGAsIHdoaWNoIGNoYW5nZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGNvbW1pdCwgZ2VuZXJhbGx5CitzZXQgT1JJR19IRUFEIHRvIHRoZSB2YWx1ZSBIRUFEIGhhZCBiZWZvcmUgdGhlIGN1cnJlbnQgb3BlcmF0aW9uLgorCitUaGUgYGdpdCBmZXRjaGAgb3BlcmF0aW9uIGFsd2F5cyBzdG9yZXMgdGhlIGhlYWQgb2YgdGhlIGxhc3QgZmV0Y2hlZAorYnJhbmNoIGluIEZFVENIX0hFQUQuICBGb3IgZXhhbXBsZSwgaWYgeW91IHJ1biBgZ2l0IGZldGNoYCB3aXRob3V0CitzcGVjaWZ5aW5nIGEgbG9jYWwgYnJhbmNoIGFzIHRoZSB0YXJnZXQgb2YgdGhlIG9wZXJhdGlvbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBnaXQ6Ly9leGFtcGxlLmNvbS9wcm9qLmdpdCB0aGVpcmJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGUgZmV0Y2hlZCBjb21taXRzIHdpbGwgc3RpbGwgYmUgYXZhaWxhYmxlIGZyb20gRkVUQ0hfSEVBRC4KKworV2hlbiB3ZSBkaXNjdXNzIG1lcmdlcyB3ZSdsbCBhbHNvIHNlZSB0aGUgc3BlY2lhbCBuYW1lIE1FUkdFX0hFQUQsCit3aGljaCByZWZlcnMgdG8gdGhlIG90aGVyIGJyYW5jaCB0aGF0IHdlJ3JlIG1lcmdpbmcgaW4gdG8gdGhlIGN1cnJlbnQKK2JyYW5jaC4KKworVGhlIGxpbmtnaXQ6Z2l0LXJldi1wYXJzZVsxXSBjb21tYW5kIGlzIGEgbG93LWxldmVsIGNvbW1hbmQgdGhhdCBpcworb2NjYXNpb25hbGx5IHVzZWZ1bCBmb3IgdHJhbnNsYXRpbmcgc29tZSBuYW1lIGZvciBhIGNvbW1pdCB0byB0aGUgb2JqZWN0CituYW1lIGZvciB0aGF0IGNvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LXBhcnNlIG9yaWdpbgorZTA1ZGIwZmQ0ZjMxZGRlNzAwNWYwNzVhODRmOTZiMzYwZDA1OTg0YgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW2NyZWF0aW5nLXRhZ3NdXQorQ3JlYXRpbmcgdGFncworLS0tLS0tLS0tLS0tLQorCitXZSBjYW4gYWxzbyBjcmVhdGUgYSB0YWcgdG8gcmVmZXIgdG8gYSBwYXJ0aWN1bGFyIGNvbW1pdDsgYWZ0ZXIKK3J1bm5pbmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgdGFnIHN0YWJsZS0xIDFiMmUxZDYzZmYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiB1c2UgYHN0YWJsZS0xYCB0byByZWZlciB0byB0aGUgY29tbWl0IDFiMmUxZDYzZmYuCisKK1RoaXMgY3JlYXRlcyBhICJsaWdodHdlaWdodCIgdGFnLiAgSWYgeW91IHdvdWxkIGFsc28gbGlrZSB0byBpbmNsdWRlIGEKK2NvbW1lbnQgd2l0aCB0aGUgdGFnLCBhbmQgcG9zc2libHkgc2lnbiBpdCBjcnlwdG9ncmFwaGljYWxseSwgdGhlbiB5b3UKK3Nob3VsZCBjcmVhdGUgYSB0YWcgb2JqZWN0IGluc3RlYWQ7IHNlZSB0aGUgbGlua2dpdDpnaXQtdGFnWzFdIG1hbiBwYWdlCitmb3IgZGV0YWlscy4KKworW1ticm93c2luZy1yZXZpc2lvbnNdXQorQnJvd3NpbmcgcmV2aXNpb25zCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSBjb21tYW5kIGNhbiBzaG93IGxpc3RzIG9mIGNvbW1pdHMuICBPbiBpdHMKK293biwgaXQgc2hvd3MgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gdGhlIHBhcmVudCBjb21taXQ7IGJ1dCB5b3UKK2NhbiBhbHNvIG1ha2UgbW9yZSBzcGVjaWZpYyByZXF1ZXN0czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIHYyLjUuLgkjIGNvbW1pdHMgc2luY2UgKG5vdCByZWFjaGFibGUgZnJvbSkgdjIuNQorJCBnaXQgbG9nIHRlc3QuLm1hc3RlcgkjIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gbWFzdGVyIGJ1dCBub3QgdGVzdAorJCBnaXQgbG9nIG1hc3Rlci4udGVzdAkjIC4uLnJlYWNoYWJsZSBmcm9tIHRlc3QgYnV0IG5vdCBtYXN0ZXIKKyQgZ2l0IGxvZyBtYXN0ZXIuLi50ZXN0CSMgLi4ucmVhY2hhYmxlIGZyb20gZWl0aGVyIHRlc3Qgb3IgbWFzdGVyLAorCQkJIyAgICBidXQgbm90IGJvdGgKKyQgZ2l0IGxvZyAtLXNpbmNlPSIyIHdlZWtzIGFnbyIgIyBjb21taXRzIGZyb20gdGhlIGxhc3QgMiB3ZWVrcworJCBnaXQgbG9nIE1ha2VmaWxlICAgICAgIyBjb21taXRzIHdoaWNoIG1vZGlmeSBNYWtlZmlsZQorJCBnaXQgbG9nIGZzLwkJIyAuLi4gd2hpY2ggbW9kaWZ5IGFueSBmaWxlIHVuZGVyIGZzLworJCBnaXQgbG9nIC1TJ2ZvbygpJwkjIGNvbW1pdHMgd2hpY2ggYWRkIG9yIHJlbW92ZSBhbnkgZmlsZSBkYXRhCisJCQkjIG1hdGNoaW5nIHRoZSBzdHJpbmcgJ2ZvbygpJworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbmQgb2YgY291cnNlIHlvdSBjYW4gY29tYmluZSBhbGwgb2YgdGhlc2U7IHRoZSBmb2xsb3dpbmcgZmluZHMKK2NvbW1pdHMgc2luY2UgdjIuNSB3aGljaCB0b3VjaCB0aGUgYE1ha2VmaWxlYCBvciBhbnkgZmlsZSB1bmRlciBgZnNgOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgdjIuNS4uIE1ha2VmaWxlIGZzLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGFsc28gYXNrIGdpdCBsb2cgdG8gc2hvdyBwYXRjaGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VlIHRoZSBgLS1wcmV0dHlgIG9wdGlvbiBpbiB0aGUgbGlua2dpdDpnaXQtbG9nWzFdIG1hbiBwYWdlIGZvciBtb3JlCitkaXNwbGF5IG9wdGlvbnMuCisKK05vdGUgdGhhdCBnaXQgbG9nIHN0YXJ0cyB3aXRoIHRoZSBtb3N0IHJlY2VudCBjb21taXQgYW5kIHdvcmtzCitiYWNrd2FyZHMgdGhyb3VnaCB0aGUgcGFyZW50czsgaG93ZXZlciwgc2luY2UgR2l0IGhpc3RvcnkgY2FuIGNvbnRhaW4KK211bHRpcGxlIGluZGVwZW5kZW50IGxpbmVzIG9mIGRldmVsb3BtZW50LCB0aGUgcGFydGljdWxhciBvcmRlciB0aGF0Citjb21taXRzIGFyZSBsaXN0ZWQgaW4gbWF5IGJlIHNvbWV3aGF0IGFyYml0cmFyeS4KKworW1tnZW5lcmF0aW5nLWRpZmZzXV0KK0dlbmVyYXRpbmcgZGlmZnMKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBnZW5lcmF0ZSBkaWZmcyBiZXR3ZWVuIGFueSB0d28gdmVyc2lvbnMgdXNpbmcKK2xpbmtnaXQ6Z2l0LWRpZmZbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgbWFzdGVyLi50ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoYXQgd2lsbCBwcm9kdWNlIHRoZSBkaWZmIGJldHdlZW4gdGhlIHRpcHMgb2YgdGhlIHR3byBicmFuY2hlcy4gIElmCit5b3UnZCBwcmVmZXIgdG8gZmluZCB0aGUgZGlmZiBmcm9tIHRoZWlyIGNvbW1vbiBhbmNlc3RvciB0byB0ZXN0LCB5b3UKK2NhbiB1c2UgdGhyZWUgZG90cyBpbnN0ZWFkIG9mIHR3bzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiBtYXN0ZXIuLi50ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvbWV0aW1lcyB3aGF0IHlvdSB3YW50IGluc3RlYWQgaXMgYSBzZXQgb2YgcGF0Y2hlczsgZm9yIHRoaXMgeW91IGNhbgordXNlIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIG1hc3Rlci4udGVzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIGdlbmVyYXRlIGEgZmlsZSB3aXRoIGEgcGF0Y2ggZm9yIGVhY2ggY29tbWl0IHJlYWNoYWJsZSBmcm9tIHRlc3QKK2J1dCBub3QgZnJvbSBtYXN0ZXIuCisKK1tbdmlld2luZy1vbGQtZmlsZS12ZXJzaW9uc11dCitWaWV3aW5nIG9sZCBmaWxlIHZlcnNpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWx3YXlzIHZpZXcgYW4gb2xkIHZlcnNpb24gb2YgYSBmaWxlIGJ5IGp1c3QgY2hlY2tpbmcgb3V0IHRoZQorY29ycmVjdCByZXZpc2lvbiBmaXJzdC4gIEJ1dCBzb21ldGltZXMgaXQgaXMgbW9yZSBjb252ZW5pZW50IHRvIGJlCithYmxlIHRvIHZpZXcgYW4gb2xkIHZlcnNpb24gb2YgYSBzaW5nbGUgZmlsZSB3aXRob3V0IGNoZWNraW5nCithbnl0aGluZyBvdXQ7IHRoaXMgY29tbWFuZCBkb2VzIHRoYXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgdjIuNTpmcy9sb2Nrcy5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlZm9yZSB0aGUgY29sb24gbWF5IGJlIGFueXRoaW5nIHRoYXQgbmFtZXMgYSBjb21taXQsIGFuZCBhZnRlciBpdAorbWF5IGJlIGFueSBwYXRoIHRvIGEgZmlsZSB0cmFja2VkIGJ5IEdpdC4KKworW1toaXN0b3J5LWV4YW1wbGVzXV0KK0V4YW1wbGVzCistLS0tLS0tLQorCitbW2NvdW50aW5nLWNvbW1pdHMtb24tYS1icmFuY2hdXQorQ291bnRpbmcgdGhlIG51bWJlciBvZiBjb21taXRzIG9uIGEgYnJhbmNoCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU3VwcG9zZSB5b3Ugd2FudCB0byBrbm93IGhvdyBtYW55IGNvbW1pdHMgeW91J3ZlIG1hZGUgb24gYG15YnJhbmNoYAorc2luY2UgaXQgZGl2ZXJnZWQgZnJvbSBgb3JpZ2luYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgb3JpZ2luLi5teWJyYW5jaCB8IHdjIC1sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgb2Z0ZW4gc2VlIHRoaXMgc29ydCBvZiB0aGluZyBkb25lIHdpdGggdGhlCitsb3dlci1sZXZlbCBjb21tYW5kIGxpbmtnaXQ6Z2l0LXJldi1saXN0WzFdLCB3aGljaCBqdXN0IGxpc3RzIHRoZSBTSEEtMSdzCitvZiBhbGwgdGhlIGdpdmVuIGNvbW1pdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJldi1saXN0IG9yaWdpbi4ubXlicmFuY2ggfCB3YyAtbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW2NoZWNraW5nLWZvci1lcXVhbC1icmFuY2hlc11dCitDaGVjayB3aGV0aGVyIHR3byBicmFuY2hlcyBwb2ludCBhdCB0aGUgc2FtZSBoaXN0b3J5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1N1cHBvc2UgeW91IHdhbnQgdG8gY2hlY2sgd2hldGhlciB0d28gYnJhbmNoZXMgcG9pbnQgYXQgdGhlIHNhbWUgcG9pbnQKK2luIGhpc3RvcnkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgb3JpZ2luLi5tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCB0ZWxsIHlvdSB3aGV0aGVyIHRoZSBjb250ZW50cyBvZiB0aGUgcHJvamVjdCBhcmUgdGhlIHNhbWUgYXQgdGhlCit0d28gYnJhbmNoZXM7IGluIHRoZW9yeSwgaG93ZXZlciwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBzYW1lIHByb2plY3QKK2NvbnRlbnRzIGNvdWxkIGhhdmUgYmVlbiBhcnJpdmVkIGF0IGJ5IHR3byBkaWZmZXJlbnQgaGlzdG9yaWNhbAorcm91dGVzLiAgWW91IGNvdWxkIGNvbXBhcmUgdGhlIG9iamVjdCBuYW1lczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmV2LWxpc3Qgb3JpZ2luCitlMDVkYjBmZDRmMzFkZGU3MDA1ZjA3NWE4NGY5NmIzNjBkMDU5ODRiCiskIGdpdCByZXYtbGlzdCBtYXN0ZXIKK2UwNWRiMGZkNGYzMWRkZTcwMDVmMDc1YTg0Zjk2YjM2MGQwNTk4NGIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT3IgeW91IGNvdWxkIHJlY2FsbCB0aGF0IHRoZSBgLi4uYCBvcGVyYXRvciBzZWxlY3RzIGFsbCBjb21taXRzCityZWFjaGFibGUgZnJvbSBlaXRoZXIgb25lIHJlZmVyZW5jZSBvciB0aGUgb3RoZXIgYnV0IG5vdAorYm90aDsgc28KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIG9yaWdpbi4uLm1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHJldHVybiBubyBjb21taXRzIHdoZW4gdGhlIHR3byBicmFuY2hlcyBhcmUgZXF1YWwuCisKK1tbZmluZGluZy10YWdnZWQtZGVzY2VuZGFudHNdXQorRmluZCBmaXJzdCB0YWdnZWQgdmVyc2lvbiBpbmNsdWRpbmcgYSBnaXZlbiBmaXgKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1N1cHBvc2UgeW91IGtub3cgdGhhdCB0aGUgY29tbWl0IGUwNWRiMGZkIGZpeGVkIGEgY2VydGFpbiBwcm9ibGVtLgorWW91J2QgbGlrZSB0byBmaW5kIHRoZSBlYXJsaWVzdCB0YWdnZWQgcmVsZWFzZSB0aGF0IGNvbnRhaW5zIHRoYXQKK2ZpeC4KKworT2YgY291cnNlLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBhbnN3ZXItLWlmIHRoZSBoaXN0b3J5IGJyYW5jaGVkCithZnRlciBjb21taXQgZTA1ZGIwZmQsIHRoZW4gdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgImVhcmxpZXN0IiB0YWdnZWQKK3JlbGVhc2VzLgorCitZb3UgY291bGQganVzdCB2aXN1YWxseSBpbnNwZWN0IHRoZSBjb21taXRzIHNpbmNlIGUwNWRiMGZkOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgZTA1ZGIwZmQuLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciB5b3UgY2FuIHVzZSBsaW5rZ2l0OmdpdC1uYW1lLXJldlsxXSwgd2hpY2ggd2lsbCBnaXZlIHRoZSBjb21taXQgYQorbmFtZSBiYXNlZCBvbiBhbnkgdGFnIGl0IGZpbmRzIHBvaW50aW5nIHRvIG9uZSBvZiB0aGUgY29tbWl0J3MKK2Rlc2NlbmRhbnRzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBuYW1lLXJldiAtLXRhZ3MgZTA1ZGIwZmQKK2UwNWRiMGZkIHRhZ3MvdjEuNS4wLXJjMV4wfjIzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsaW5rZ2l0OmdpdC1kZXNjcmliZVsxXSBjb21tYW5kIGRvZXMgdGhlIG9wcG9zaXRlLCBuYW1pbmcgdGhlCityZXZpc2lvbiB1c2luZyBhIHRhZyBvbiB3aGljaCB0aGUgZ2l2ZW4gY29tbWl0IGlzIGJhc2VkOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkZXNjcmliZSBlMDVkYjBmZAordjEuNS4wLXJjMC0yNjAtZ2UwNWRiMGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYnV0IHRoYXQgbWF5IHNvbWV0aW1lcyBoZWxwIHlvdSBndWVzcyB3aGljaCB0YWdzIG1pZ2h0IGNvbWUgYWZ0ZXIgdGhlCitnaXZlbiBjb21taXQuCisKK0lmIHlvdSBqdXN0IHdhbnQgdG8gdmVyaWZ5IHdoZXRoZXIgYSBnaXZlbiB0YWdnZWQgdmVyc2lvbiBjb250YWlucyBhCitnaXZlbiBjb21taXQsIHlvdSBjb3VsZCB1c2UgbGlua2dpdDpnaXQtbWVyZ2UtYmFzZVsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbWVyZ2UtYmFzZSBlMDVkYjBmZCB2MS41LjAtcmMxCitlMDVkYjBmZDRmMzFkZGU3MDA1ZjA3NWE4NGY5NmIzNjBkMDU5ODRiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtZXJnZS1iYXNlIGNvbW1hbmQgZmluZHMgYSBjb21tb24gYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGNvbW1pdHMsCithbmQgYWx3YXlzIHJldHVybnMgb25lIG9yIHRoZSBvdGhlciBpbiB0aGUgY2FzZSB3aGVyZSBvbmUgaXMgYQorZGVzY2VuZGFudCBvZiB0aGUgb3RoZXI7IHNvIHRoZSBhYm92ZSBvdXRwdXQgc2hvd3MgdGhhdCBlMDVkYjBmZAorYWN0dWFsbHkgaXMgYW4gYW5jZXN0b3Igb2YgdjEuNS4wLXJjMS4KKworQWx0ZXJuYXRpdmVseSwgbm90ZSB0aGF0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyB2MS41LjAtcmMxLi5lMDVkYjBmZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHByb2R1Y2UgZW1wdHkgb3V0cHV0IGlmIGFuZCBvbmx5IGlmIHYxLjUuMC1yYzEgaW5jbHVkZXMgZTA1ZGIwZmQsCitiZWNhdXNlIGl0IG91dHB1dHMgb25seSBjb21taXRzIHRoYXQgYXJlIG5vdCByZWFjaGFibGUgZnJvbSB2MS41LjAtcmMxLgorCitBcyB5ZXQgYW5vdGhlciBhbHRlcm5hdGl2ZSwgdGhlIGxpbmtnaXQ6Z2l0LXNob3ctYnJhbmNoWzFdIGNvbW1hbmQgbGlzdHMKK3RoZSBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGl0cyBhcmd1bWVudHMgd2l0aCBhIGRpc3BsYXkgb24gdGhlIGxlZnQtaGFuZAorc2lkZSB0aGF0IGluZGljYXRlcyB3aGljaCBhcmd1bWVudHMgdGhhdCBjb21taXQgaXMgcmVhY2hhYmxlIGZyb20uCitTbywgaWYgeW91IHJ1biBzb21ldGhpbmcgbGlrZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93LWJyYW5jaCBlMDVkYjBmZCB2MS41LjAtcmMwIHYxLjUuMC1yYzEgdjEuNS4wLXJjMgorISBbZTA1ZGIwZmRdIEZpeCB3YXJuaW5ncyBpbiBzaGExX2ZpbGUuYyAtIHVzZSBDOTkgcHJpbnRmIGZvcm1hdCBpZgorYXZhaWxhYmxlCisgISBbdjEuNS4wLXJjMF0gR0lUIHYxLjUuMCBwcmV2aWV3CisgICEgW3YxLjUuMC1yYzFdIEdJVCB2MS41LjAtcmMxCisgICAhIFt2MS41LjAtcmMyXSBHSVQgdjEuNS4wLXJjMgorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RoZW4gYSBsaW5lIGxpa2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKyArKyBbZTA1ZGIwZmRdIEZpeCB3YXJuaW5ncyBpbiBzaGExX2ZpbGUuYyAtIHVzZSBDOTkgcHJpbnRmIGZvcm1hdCBpZgorYXZhaWxhYmxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Nob3dzIHRoYXQgZTA1ZGIwZmQgaXMgcmVhY2hhYmxlIGZyb20gaXRzZWxmLCBmcm9tIHYxLjUuMC1yYzEsCithbmQgZnJvbSB2MS41LjAtcmMyLCBhbmQgbm90IGZyb20gdjEuNS4wLXJjMC4KKworW1tzaG93aW5nLWNvbW1pdHMtdW5pcXVlLXRvLWEtYnJhbmNoXV0KK1Nob3dpbmcgY29tbWl0cyB1bmlxdWUgdG8gYSBnaXZlbiBicmFuY2gKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworU3VwcG9zZSB5b3Ugd291bGQgbGlrZSB0byBzZWUgYWxsIHRoZSBjb21taXRzIHJlYWNoYWJsZSBmcm9tIHRoZSBicmFuY2gKK2hlYWQgbmFtZWQgYG1hc3RlcmAgYnV0IG5vdCBmcm9tIGFueSBvdGhlciBoZWFkIGluIHlvdXIgcmVwb3NpdG9yeS4KKworV2UgY2FuIGxpc3QgYWxsIHRoZSBoZWFkcyBpbiB0aGlzIHJlcG9zaXRvcnkgd2l0aAorbGlua2dpdDpnaXQtc2hvdy1yZWZbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctcmVmIC0taGVhZHMKK2JmNjIxOTZiNWUzNjNkNzMzNTNhOWRjZjA5NGM1OTU5NWYzMTUzYjcgcmVmcy9oZWFkcy9jb3JlLXR1dG9yaWFsCitkYjc2OGQ1NTA0YzFiYjQ2ZjYzZWU5ZDZlMTc3MmJkMDQ3ZTA1YmY5IHJlZnMvaGVhZHMvbWFpbnQKK2EwNzE1N2FjNjI0YjI1MjRhMDU5YTM0MTRlOTlmNmY0NGJlYmMxZTcgcmVmcy9oZWFkcy9tYXN0ZXIKKzI0ZGJjMTgwZWExNGRjMWFlYmUwOWYxNGM4ZWNmMzIwMTA2OTA2MjcgcmVmcy9oZWFkcy90dXRvcmlhbC0yCisxZTg3NDg2YWUwNjYyNmMyZjMxZWFhNjNkMjZmYzBmZDY0NmM4YWYyIHJlZnMvaGVhZHMvdHV0b3JpYWwtZml4ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2UgY2FuIGdldCBqdXN0IHRoZSBicmFuY2gtaGVhZCBuYW1lcywgYW5kIHJlbW92ZSBgbWFzdGVyYCwgd2l0aAordGhlIGhlbHAgb2YgdGhlIHN0YW5kYXJkIHV0aWxpdGllcyBjdXQgYW5kIGdyZXA6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3ctcmVmIC0taGVhZHMgfCBjdXQgLWQnICcgLWYyIHwgZ3JlcCAtdiAnXnJlZnMvaGVhZHMvbWFzdGVyJworcmVmcy9oZWFkcy9jb3JlLXR1dG9yaWFsCityZWZzL2hlYWRzL21haW50CityZWZzL2hlYWRzL3R1dG9yaWFsLTIKK3JlZnMvaGVhZHMvdHV0b3JpYWwtZml4ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW5kIHRoZW4gd2UgY2FuIGFzayB0byBzZWUgYWxsIHRoZSBjb21taXRzIHJlYWNoYWJsZSBmcm9tIG1hc3RlcgorYnV0IG5vdCBmcm9tIHRoZXNlIG90aGVyIGhlYWRzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgbWFzdGVyIC0tbm90ICQoIGdpdCBzaG93LXJlZiAtLWhlYWRzIHwgY3V0IC1kJyAnIC1mMiB8CisJCQkJZ3JlcCAtdiAnXnJlZnMvaGVhZHMvbWFzdGVyJyApCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09idmlvdXNseSwgZW5kbGVzcyB2YXJpYXRpb25zIGFyZSBwb3NzaWJsZTsgZm9yIGV4YW1wbGUsIHRvIHNlZSBhbGwKK2NvbW1pdHMgcmVhY2hhYmxlIGZyb20gc29tZSBoZWFkIGJ1dCBub3QgZnJvbSBhbnkgdGFnIGluIHRoZSByZXBvc2l0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdGsgJCggZ2l0IHNob3ctcmVmIC0taGVhZHMgKSAtLW5vdCAgJCggZ2l0IHNob3ctcmVmIC0tdGFncyApCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhTZWUgbGlua2dpdDpnaXRyZXZpc2lvbnNbN10gZm9yIGV4cGxhbmF0aW9ucyBvZiBjb21taXQtc2VsZWN0aW5nCitzeW50YXggc3VjaCBhcyBgLS1ub3RgLikKKworW1ttYWtpbmctYS1yZWxlYXNlXV0KK0NyZWF0aW5nIGEgY2hhbmdlbG9nIGFuZCB0YXJiYWxsIGZvciBhIHNvZnR3YXJlIHJlbGVhc2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGxpbmtnaXQ6Z2l0LWFyY2hpdmVbMV0gY29tbWFuZCBjYW4gY3JlYXRlIGEgdGFyIG9yIHppcCBhcmNoaXZlIGZyb20KK2FueSB2ZXJzaW9uIG9mIGEgcHJvamVjdDsgZm9yIGV4YW1wbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGFyY2hpdmUgLW8gbGF0ZXN0LnRhci5neiAtLXByZWZpeD1wcm9qZWN0LyBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgdXNlIEhFQUQgdG8gcHJvZHVjZSBhIGd6aXBwZWQgdGFyIGFyY2hpdmUgaW4gd2hpY2ggZWFjaCBmaWxlbmFtZQoraXMgcHJlY2VkZWQgYnkgYHByb2plY3QvYC4gIFRoZSBvdXRwdXQgZmlsZSBmb3JtYXQgaXMgaW5mZXJyZWQgZnJvbQordGhlIG91dHB1dCBmaWxlIGV4dGVuc2lvbiBpZiBwb3NzaWJsZSwgc2VlIGxpbmtnaXQ6Z2l0LWFyY2hpdmVbMV0gZm9yCitkZXRhaWxzLgorCitWZXJzaW9ucyBvZiBHaXQgb2xkZXIgdGhhbiAxLjcuNyBkb24ndCBrbm93IGFib3V0IHRoZSBgdGFyLmd6YCBmb3JtYXQsCit5b3UnbGwgbmVlZCB0byB1c2UgZ3ppcCBleHBsaWNpdGx5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAtLXByZWZpeD1wcm9qZWN0LyBIRUFEIHwgZ3ppcCA+bGF0ZXN0LnRhci5negorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UncmUgcmVsZWFzaW5nIGEgbmV3IHZlcnNpb24gb2YgYSBzb2Z0d2FyZSBwcm9qZWN0LCB5b3UgbWF5IHdhbnQKK3RvIHNpbXVsdGFuZW91c2x5IG1ha2UgYSBjaGFuZ2Vsb2cgdG8gaW5jbHVkZSBpbiB0aGUgcmVsZWFzZQorYW5ub3VuY2VtZW50LgorCitMaW51cyBUb3J2YWxkcywgZm9yIGV4YW1wbGUsIG1ha2VzIG5ldyBrZXJuZWwgcmVsZWFzZXMgYnkgdGFnZ2luZyB0aGVtLAordGhlbiBydW5uaW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIHJlbGVhc2Utc2NyaXB0IDIuNi4xMiAyLjYuMTMtcmM2IDIuNi4xMy1yYzcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hlcmUgcmVsZWFzZS1zY3JpcHQgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBsb29rcyBsaWtlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIS9iaW4vc2gKK3N0YWJsZT0iJDEiCitsYXN0PSIkMiIKK25ldz0iJDMiCitlY2hvICIjIGdpdCB0YWcgdiRuZXciCitlY2hvICJnaXQgYXJjaGl2ZSAtLXByZWZpeD1saW51eC0kbmV3LyB2JG5ldyB8IGd6aXAgLTkgPiAuLi9saW51eC0kbmV3LnRhci5neiIKK2VjaG8gImdpdCBkaWZmIHYkc3RhYmxlIHYkbmV3IHwgZ3ppcCAtOSA+IC4uL3BhdGNoLSRuZXcuZ3oiCitlY2hvICJnaXQgbG9nIC0tbm8tbWVyZ2VzIHYkbmV3IF52JGxhc3QgPiAuLi9DaGFuZ2VMb2ctJG5ldyIKK2VjaG8gImdpdCBzaG9ydGxvZyAtLW5vLW1lcmdlcyB2JG5ldyBediRsYXN0ID4gLi4vU2hvcnRMb2ciCitlY2hvICJnaXQgZGlmZiAtLXN0YXQgLS1zdW1tYXJ5IC1NIHYkbGFzdCB2JG5ldyA+IC4uL2RpZmZzdGF0LSRuZXciCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB0aGVuIGhlIGp1c3QgY3V0LWFuZC1wYXN0ZXMgdGhlIG91dHB1dCBjb21tYW5kcyBhZnRlciB2ZXJpZnlpbmcgdGhhdAordGhleSBsb29rIE9LLgorCitbW0ZpbmRpbmctY29tbWl0cy1XaXRoLWdpdmVuLUNvbnRlbnRdXQorRmluZGluZyBjb21taXRzIHJlZmVyZW5jaW5nIGEgZmlsZSB3aXRoIGdpdmVuIGNvbnRlbnQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NvbWVib2R5IGhhbmRzIHlvdSBhIGNvcHkgb2YgYSBmaWxlLCBhbmQgYXNrcyB3aGljaCBjb21taXRzIG1vZGlmaWVkIGEKK2ZpbGUgc3VjaCB0aGF0IGl0IGNvbnRhaW5lZCB0aGUgZ2l2ZW4gY29udGVudCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZQorY29tbWl0LiAgWW91IGNhbiBmaW5kIG91dCB3aXRoIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgIGdpdCBsb2cgLS1yYXcgLS1hYmJyZXY9NDAgLS1wcmV0dHk9b25lbGluZSB8CisJZ3JlcCAtQiAxIGBnaXQgaGFzaC1vYmplY3QgZmlsZW5hbWVgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpZ3VyaW5nIG91dCB3aHkgdGhpcyB3b3JrcyBpcyBsZWZ0IGFzIGFuIGV4ZXJjaXNlIHRvIHRoZSAoYWR2YW5jZWQpCitzdHVkZW50LiAgVGhlIGxpbmtnaXQ6Z2l0LWxvZ1sxXSwgbGlua2dpdDpnaXQtZGlmZi10cmVlWzFdLCBhbmQKK2xpbmtnaXQ6Z2l0LWhhc2gtb2JqZWN0WzFdIG1hbiBwYWdlcyBtYXkgcHJvdmUgaGVscGZ1bC4KKworW1tEZXZlbG9waW5nLVdpdGgtZ2l0XV0KK0RldmVsb3Bpbmcgd2l0aCBHaXQKKz09PT09PT09PT09PT09PT09PT0KKworW1t0ZWxsaW5nLWdpdC15b3VyLW5hbWVdXQorVGVsbGluZyBHaXQgeW91ciBuYW1lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmVmb3JlIGNyZWF0aW5nIGFueSBjb21taXRzLCB5b3Ugc2hvdWxkIGludHJvZHVjZSB5b3Vyc2VsZiB0byBHaXQuCitUaGUgZWFzaWVzdCB3YXkgdG8gZG8gc28gaXMgdG8gdXNlIGxpbmtnaXQ6Z2l0LWNvbmZpZ1sxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lICdZb3VyIE5hbWUgQ29tZXMgSGVyZScKKyQgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsICd5b3VAeW91cmRvbWFpbi5leGFtcGxlLmNvbScKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGljaCB3aWxsIGFkZCB0aGUgZm9sbG93aW5nIHRvIGEgZmlsZSBuYW1lZCBgLmdpdGNvbmZpZ2AgaW4geW91cgoraG9tZSBkaXJlY3Rvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW3VzZXJdCisJbmFtZSA9IFlvdXIgTmFtZSBDb21lcyBIZXJlCisJZW1haWwgPSB5b3VAeW91cmRvbWFpbi5leGFtcGxlLmNvbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZSB0aGUgIkNPTkZJR1VSQVRJT04gRklMRSIgc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yCitkZXRhaWxzIG9uIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuICBUaGUgZmlsZSBpcyBwbGFpbiB0ZXh0LCBzbyB5b3UgY2FuCithbHNvIGVkaXQgaXQgd2l0aCB5b3VyIGZhdm9yaXRlIGVkaXRvci4KKworCitbW2NyZWF0aW5nLWEtbmV3LXJlcG9zaXRvcnldXQorQ3JlYXRpbmcgYSBuZXcgcmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVhdGluZyBhIG5ldyByZXBvc2l0b3J5IGZyb20gc2NyYXRjaCBpcyB2ZXJ5IGVhc3k6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbWtkaXIgcHJvamVjdAorJCBjZCBwcm9qZWN0CiskIGdpdCBpbml0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBoYXZlIHNvbWUgaW5pdGlhbCBjb250ZW50IChzYXksIGEgdGFyYmFsbCk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgdGFyIHh6dmYgcHJvamVjdC50YXIuZ3oKKyQgY2QgcHJvamVjdAorJCBnaXQgaW5pdAorJCBnaXQgYWRkIC4gIyBpbmNsdWRlIGV2ZXJ5dGhpbmcgYmVsb3cgLi8gaW4gdGhlIGZpcnN0IGNvbW1pdDoKKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW2hvdy10by1tYWtlLWEtY29tbWl0XV0KK0hvdyB0byBtYWtlIGEgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDcmVhdGluZyBhIG5ldyBjb21taXQgdGFrZXMgdGhyZWUgc3RlcHM6CisKKwkxLiBNYWtpbmcgc29tZSBjaGFuZ2VzIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB1c2luZyB5b3VyCisJICAgZmF2b3JpdGUgZWRpdG9yLgorCTIuIFRlbGxpbmcgR2l0IGFib3V0IHlvdXIgY2hhbmdlcy4KKwkzLiBDcmVhdGluZyB0aGUgY29tbWl0IHVzaW5nIHRoZSBjb250ZW50IHlvdSB0b2xkIEdpdCBhYm91dAorCSAgIGluIHN0ZXAgMi4KKworSW4gcHJhY3RpY2UsIHlvdSBjYW4gaW50ZXJsZWF2ZSBhbmQgcmVwZWF0IHN0ZXBzIDEgYW5kIDIgYXMgbWFueQordGltZXMgYXMgeW91IHdhbnQ6IGluIG9yZGVyIHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCB5b3Ugd2FudCBjb21taXR0ZWQKK2F0IHN0ZXAgMywgR2l0IG1haW50YWlucyBhIHNuYXBzaG90IG9mIHRoZSB0cmVlJ3MgY29udGVudHMgaW4gYQorc3BlY2lhbCBzdGFnaW5nIGFyZWEgY2FsbGVkICJ0aGUgaW5kZXguIgorCitBdCB0aGUgYmVnaW5uaW5nLCB0aGUgY29udGVudCBvZiB0aGUgaW5kZXggd2lsbCBiZSBpZGVudGljYWwgdG8KK3RoYXQgb2YgdGhlIEhFQUQuICBUaGUgY29tbWFuZCBgZ2l0IGRpZmYgLS1jYWNoZWRgLCB3aGljaCBzaG93cwordGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgSEVBRCBhbmQgdGhlIGluZGV4LCBzaG91bGQgdGhlcmVmb3JlCitwcm9kdWNlIG5vIG91dHB1dCBhdCB0aGF0IHBvaW50LgorCitNb2RpZnlpbmcgdGhlIGluZGV4IGlzIGVhc3k6CisKK1RvIHVwZGF0ZSB0aGUgaW5kZXggd2l0aCB0aGUgY29udGVudHMgb2YgYSBuZXcgb3IgbW9kaWZpZWQgZmlsZSwgdXNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGFkZCBwYXRoL3RvL2ZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gcmVtb3ZlIGEgZmlsZSBmcm9tIHRoZSBpbmRleCBhbmQgZnJvbSB0aGUgd29ya2luZyB0cmVlLCB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcm0gcGF0aC90by9maWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIGVhY2ggc3RlcCB5b3UgY2FuIHZlcmlmeSB0aGF0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYgLS1jYWNoZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzIHNob3dzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIEhFQUQgYW5kIHRoZSBpbmRleCBmaWxlLS10aGlzCitpcyB3aGF0IHlvdSdkIGNvbW1pdCBpZiB5b3UgY3JlYXRlZCB0aGUgY29tbWl0IG5vdy0tYW5kIHRoYXQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzaG93cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBmaWxlLgorCitOb3RlIHRoYXQgYGdpdCBhZGRgIGFsd2F5cyBhZGRzIGp1c3QgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgYSBmaWxlCit0byB0aGUgaW5kZXg7IGZ1cnRoZXIgY2hhbmdlcyB0byB0aGUgc2FtZSBmaWxlIHdpbGwgYmUgaWdub3JlZCB1bmxlc3MKK3lvdSBydW4gYGdpdCBhZGRgIG9uIHRoZSBmaWxlIGFnYWluLgorCitXaGVuIHlvdSdyZSByZWFkeSwganVzdCBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBHaXQgd2lsbCBwcm9tcHQgeW91IGZvciBhIGNvbW1pdCBtZXNzYWdlIGFuZCB0aGVuIGNyZWF0ZSB0aGUgbmV3Citjb21taXQuICBDaGVjayB0byBtYWtlIHN1cmUgaXQgbG9va3MgbGlrZSB3aGF0IHlvdSBleHBlY3RlZCB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgYSBzcGVjaWFsIHNob3J0Y3V0LAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQgLWEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCB1cGRhdGUgdGhlIGluZGV4IHdpdGggYW55IGZpbGVzIHRoYXQgeW91J3ZlIG1vZGlmaWVkIG9yIHJlbW92ZWQKK2FuZCBjcmVhdGUgYSBjb21taXQsIGFsbCBpbiBvbmUgc3RlcC4KKworQSBudW1iZXIgb2YgY29tbWFuZHMgYXJlIHVzZWZ1bCBmb3Iga2VlcGluZyB0cmFjayBvZiB3aGF0IHlvdSdyZQorYWJvdXQgdG8gY29tbWl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmIC0tY2FjaGVkICMgZGlmZmVyZW5jZSBiZXR3ZWVuIEhFQUQgYW5kIHRoZSBpbmRleDsgd2hhdAorCQkgICAgIyB3b3VsZCBiZSBjb21taXR0ZWQgaWYgeW91IHJhbiAiY29tbWl0IiBub3cuCiskIGdpdCBkaWZmCSAgICAjIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgaW5kZXggZmlsZSBhbmQgeW91cgorCQkgICAgIyB3b3JraW5nIGRpcmVjdG9yeTsgY2hhbmdlcyB0aGF0IHdvdWxkIG5vdAorCQkgICAgIyBiZSBpbmNsdWRlZCBpZiB5b3UgcmFuICJjb21taXQiIG5vdy4KKyQgZ2l0IGRpZmYgSEVBRAkgICAgIyBkaWZmZXJlbmNlIGJldHdlZW4gSEVBRCBhbmQgd29ya2luZyB0cmVlOyB3aGF0CisJCSAgICAjIHdvdWxkIGJlIGNvbW1pdHRlZCBpZiB5b3UgcmFuICJjb21taXQgLWEiIG5vdy4KKyQgZ2l0IHN0YXR1cwkgICAgIyBhIGJyaWVmIHBlci1maWxlIHN1bW1hcnkgb2YgdGhlIGFib3ZlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGFsc28gdXNlIGxpbmtnaXQ6Z2l0LWd1aVsxXSB0byBjcmVhdGUgY29tbWl0cywgdmlldyBjaGFuZ2VzIGluCit0aGUgaW5kZXggYW5kIHRoZSB3b3JraW5nIHRyZWUgZmlsZXMsIGFuZCBpbmRpdmlkdWFsbHkgc2VsZWN0IGRpZmYgaHVua3MKK2ZvciBpbmNsdXNpb24gaW4gdGhlIGluZGV4IChieSByaWdodC1jbGlja2luZyBvbiB0aGUgZGlmZiBodW5rIGFuZAorY2hvb3NpbmcgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIpLgorCitbW2NyZWF0aW5nLWdvb2QtY29tbWl0LW1lc3NhZ2VzXV0KK0NyZWF0aW5nIGdvb2QgY29tbWl0IG1lc3NhZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaG91Z2ggbm90IHJlcXVpcmVkLCBpdCdzIGEgZ29vZCBpZGVhIHRvIGJlZ2luIHRoZSBjb21taXQgbWVzc2FnZQord2l0aCBhIHNpbmdsZSBzaG9ydCAobGVzcyB0aGFuIDUwIGNoYXJhY3RlcikgbGluZSBzdW1tYXJpemluZyB0aGUKK2NoYW5nZSwgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lIGFuZCB0aGVuIGEgbW9yZSB0aG9yb3VnaAorZGVzY3JpcHRpb24uICBUaGUgdGV4dCB1cCB0byB0aGUgZmlyc3QgYmxhbmsgbGluZSBpbiBhIGNvbW1pdAorbWVzc2FnZSBpcyB0cmVhdGVkIGFzIHRoZSBjb21taXQgdGl0bGUsIGFuZCB0aGF0IHRpdGxlIGlzIHVzZWQKK3Rocm91Z2hvdXQgR2l0LiAgRm9yIGV4YW1wbGUsIGxpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXSB0dXJucyBhCitjb21taXQgaW50byBlbWFpbCwgYW5kIGl0IHVzZXMgdGhlIHRpdGxlIG9uIHRoZSBTdWJqZWN0IGxpbmUgYW5kIHRoZQorcmVzdCBvZiB0aGUgY29tbWl0IGluIHRoZSBib2R5LgorCisKK1tbaWdub3JpbmctZmlsZXNdXQorSWdub3JpbmcgZmlsZXMKKy0tLS0tLS0tLS0tLS0tCisKK0EgcHJvamVjdCB3aWxsIG9mdGVuIGdlbmVyYXRlIGZpbGVzIHRoYXQgeW91IGRvICdub3QnIHdhbnQgdG8gdHJhY2sgd2l0aCBHaXQuCitUaGlzIHR5cGljYWxseSBpbmNsdWRlcyBmaWxlcyBnZW5lcmF0ZWQgYnkgYSBidWlsZCBwcm9jZXNzIG9yIHRlbXBvcmFyeQorYmFja3VwIGZpbGVzIG1hZGUgYnkgeW91ciBlZGl0b3IuIE9mIGNvdXJzZSwgJ25vdCcgdHJhY2tpbmcgZmlsZXMgd2l0aCBHaXQKK2lzIGp1c3QgYSBtYXR0ZXIgb2YgJ25vdCcgY2FsbGluZyBgZ2l0IGFkZGAgb24gdGhlbS4gQnV0IGl0IHF1aWNrbHkgYmVjb21lcworYW5ub3lpbmcgdG8gaGF2ZSB0aGVzZSB1bnRyYWNrZWQgZmlsZXMgbHlpbmcgYXJvdW5kOyBlLmcuIHRoZXkgbWFrZQorYGdpdCBhZGQgLmAgcHJhY3RpY2FsbHkgdXNlbGVzcywgYW5kIHRoZXkga2VlcCBzaG93aW5nIHVwIGluIHRoZSBvdXRwdXQgb2YKK2BnaXQgc3RhdHVzYC4KKworWW91IGNhbiB0ZWxsIEdpdCB0byBpZ25vcmUgY2VydGFpbiBmaWxlcyBieSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkCitgLmdpdGlnbm9yZWAgaW4gdGhlIHRvcCBsZXZlbCBvZiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LCB3aXRoIGNvbnRlbnRzCitzdWNoIGFzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIGFyZSBjb25zaWRlcmVkIGNvbW1lbnRzLgorIyBJZ25vcmUgYW55IGZpbGUgbmFtZWQgZm9vLnR4dC4KK2Zvby50eHQKKyMgSWdub3JlIChnZW5lcmF0ZWQpIGh0bWwgZmlsZXMsCisqLmh0bWwKKyMgZXhjZXB0IGZvby5odG1sIHdoaWNoIGlzIG1haW50YWluZWQgYnkgaGFuZC4KKyFmb28uaHRtbAorIyBJZ25vcmUgb2JqZWN0cyBhbmQgYXJjaGl2ZXMuCisqLltvYV0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VlIGxpbmtnaXQ6Z2l0aWdub3JlWzVdIGZvciBhIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIHRoZSBzeW50YXguICBZb3UgY2FuCithbHNvIHBsYWNlIC5naXRpZ25vcmUgZmlsZXMgaW4gb3RoZXIgZGlyZWN0b3JpZXMgaW4geW91ciB3b3JraW5nIHRyZWUsIGFuZCB0aGV5Cit3aWxsIGFwcGx5IHRvIHRob3NlIGRpcmVjdG9yaWVzIGFuZCB0aGVpciBzdWJkaXJlY3Rvcmllcy4gIFRoZSBgLmdpdGlnbm9yZWAKK2ZpbGVzIGNhbiBiZSBhZGRlZCB0byB5b3VyIHJlcG9zaXRvcnkgbGlrZSBhbnkgb3RoZXIgZmlsZXMgKGp1c3QgcnVuIGBnaXQgYWRkCisuZ2l0aWdub3JlYCBhbmQgYGdpdCBjb21taXRgLCBhcyB1c3VhbCksIHdoaWNoIGlzIGNvbnZlbmllbnQgd2hlbiB0aGUgZXhjbHVkZQorcGF0dGVybnMgKHN1Y2ggYXMgcGF0dGVybnMgbWF0Y2hpbmcgYnVpbGQgb3V0cHV0IGZpbGVzKSB3b3VsZCBhbHNvIG1ha2Ugc2Vuc2UKK2ZvciBvdGhlciB1c2VycyB3aG8gY2xvbmUgeW91ciByZXBvc2l0b3J5LgorCitJZiB5b3Ugd2lzaCB0aGUgZXhjbHVkZSBwYXR0ZXJucyB0byBhZmZlY3Qgb25seSBjZXJ0YWluIHJlcG9zaXRvcmllcworKGluc3RlYWQgb2YgZXZlcnkgcmVwb3NpdG9yeSBmb3IgYSBnaXZlbiBwcm9qZWN0KSwgeW91IG1heSBpbnN0ZWFkIHB1dAordGhlbSBpbiBhIGZpbGUgaW4geW91ciByZXBvc2l0b3J5IG5hbWVkIGAuZ2l0L2luZm8vZXhjbHVkZWAsIG9yIGluIGFueQorZmlsZSBzcGVjaWZpZWQgYnkgdGhlIGBjb3JlLmV4Y2x1ZGVzRmlsZWAgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KK1NvbWUgR2l0IGNvbW1hbmRzIGNhbiBhbHNvIHRha2UgZXhjbHVkZSBwYXR0ZXJucyBkaXJlY3RseSBvbiB0aGUKK2NvbW1hbmQgbGluZS4gIFNlZSBsaW5rZ2l0OmdpdGlnbm9yZVs1XSBmb3IgdGhlIGRldGFpbHMuCisKK1tbaG93LXRvLW1lcmdlXV0KK0hvdyB0byBtZXJnZQorLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gcmVqb2luIHR3byBkaXZlcmdpbmcgYnJhbmNoZXMgb2YgZGV2ZWxvcG1lbnQgdXNpbmcKK2xpbmtnaXQ6Z2l0LW1lcmdlWzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSBicmFuY2huYW1lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21lcmdlcyB0aGUgZGV2ZWxvcG1lbnQgaW4gdGhlIGJyYW5jaCBgYnJhbmNobmFtZWAgaW50byB0aGUgY3VycmVudAorYnJhbmNoLgorCitBIG1lcmdlIGlzIG1hZGUgYnkgY29tYmluaW5nIHRoZSBjaGFuZ2VzIG1hZGUgaW4gYGJyYW5jaG5hbWVgIGFuZCB0aGUKK2NoYW5nZXMgbWFkZSB1cCB0byB0aGUgbGF0ZXN0IGNvbW1pdCBpbiB5b3VyIGN1cnJlbnQgYnJhbmNoIHNpbmNlCit0aGVpciBoaXN0b3JpZXMgZm9ya2VkLiBUaGUgd29yayB0cmVlIGlzIG92ZXJ3cml0dGVuIGJ5IHRoZSByZXN1bHQgb2YKK3RoZSBtZXJnZSB3aGVuIHRoaXMgY29tYmluaW5nIGlzIGRvbmUgY2xlYW5seSwgb3Igb3ZlcndyaXR0ZW4gYnkgYQoraGFsZi1tZXJnZWQgcmVzdWx0cyB3aGVuIHRoaXMgY29tYmluaW5nIHJlc3VsdHMgaW4gY29uZmxpY3RzLgorVGhlcmVmb3JlLCBpZiB5b3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvdWNoaW5nIHRoZSBzYW1lIGZpbGVzIGFzCit0aGUgb25lcyBpbXBhY3RlZCBieSB0aGUgbWVyZ2UsIEdpdCB3aWxsIHJlZnVzZSB0byBwcm9jZWVkLiBNb3N0IG9mCit0aGUgdGltZSwgeW91IHdpbGwgd2FudCB0byBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLAorYW5kIGlmIHlvdSBkb24ndCwgdGhlbiBsaW5rZ2l0OmdpdC1zdGFzaFsxXSBjYW4gdGFrZSB0aGVzZSBjaGFuZ2VzCithd2F5IHdoaWxlIHlvdSdyZSBkb2luZyB0aGUgbWVyZ2UsIGFuZCByZWFwcGx5IHRoZW0gYWZ0ZXJ3YXJkcy4KKworSWYgdGhlIGNoYW5nZXMgYXJlIGluZGVwZW5kZW50IGVub3VnaCwgR2l0IHdpbGwgYXV0b21hdGljYWxseSBjb21wbGV0ZQordGhlIG1lcmdlIGFuZCBjb21taXQgdGhlIHJlc3VsdCAob3IgcmV1c2UgYW4gZXhpc3RpbmcgY29tbWl0IGluIGNhc2UKK29mIDw8ZmFzdC1mb3J3YXJkcyxmYXN0LWZvcndhcmQ+Piwgc2VlIGJlbG93KS4gT24gdGhlIG90aGVyIGhhbmQsCitpZiB0aGVyZSBhcmUgY29uZmxpY3RzLS1mb3IgZXhhbXBsZSwgaWYgdGhlIHNhbWUgZmlsZSBpcworbW9kaWZpZWQgaW4gdHdvIGRpZmZlcmVudCB3YXlzIGluIHRoZSByZW1vdGUgYnJhbmNoIGFuZCB0aGUgbG9jYWwKK2JyYW5jaC0tdGhlbiB5b3UgYXJlIHdhcm5lZDsgdGhlIG91dHB1dCBtYXkgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSBuZXh0CisgMTAwJSAoNC80KSBkb25lCitBdXRvLW1lcmdlZCBmaWxlLnR4dAorQ09ORkxJQ1QgKGNvbnRlbnQpOiBNZXJnZSBjb25mbGljdCBpbiBmaWxlLnR4dAorQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29uZmxpY3QgbWFya2VycyBhcmUgbGVmdCBpbiB0aGUgcHJvYmxlbWF0aWMgZmlsZXMsIGFuZCBhZnRlcgoreW91IHJlc29sdmUgdGhlIGNvbmZsaWN0cyBtYW51YWxseSwgeW91IGNhbiB1cGRhdGUgdGhlIGluZGV4Cit3aXRoIHRoZSBjb250ZW50cyBhbmQgcnVuIEdpdCBjb21taXQsIGFzIHlvdSBub3JtYWxseSB3b3VsZCB3aGVuCitjcmVhdGluZyBhIG5ldyBmaWxlLgorCitJZiB5b3UgZXhhbWluZSB0aGUgcmVzdWx0aW5nIGNvbW1pdCB1c2luZyBnaXRrLCB5b3Ugd2lsbCBzZWUgdGhhdCBpdAoraGFzIHR3byBwYXJlbnRzLCBvbmUgcG9pbnRpbmcgdG8gdGhlIHRvcCBvZiB0aGUgY3VycmVudCBicmFuY2gsIGFuZAorb25lIHRvIHRoZSB0b3Agb2YgdGhlIG90aGVyIGJyYW5jaC4KKworW1tyZXNvbHZpbmctYS1tZXJnZV1dCitSZXNvbHZpbmcgYSBtZXJnZQorLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBhIG1lcmdlIGlzbid0IHJlc29sdmVkIGF1dG9tYXRpY2FsbHksIEdpdCBsZWF2ZXMgdGhlIGluZGV4IGFuZAordGhlIHdvcmtpbmcgdHJlZSBpbiBhIHNwZWNpYWwgc3RhdGUgdGhhdCBnaXZlcyB5b3UgYWxsIHRoZQoraW5mb3JtYXRpb24geW91IG5lZWQgdG8gaGVscCByZXNvbHZlIHRoZSBtZXJnZS4KKworRmlsZXMgd2l0aCBjb25mbGljdHMgYXJlIG1hcmtlZCBzcGVjaWFsbHkgaW4gdGhlIGluZGV4LCBzbyB1bnRpbCB5b3UKK3Jlc29sdmUgdGhlIHByb2JsZW0gYW5kIHVwZGF0ZSB0aGUgaW5kZXgsIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSB3aWxsCitmYWlsOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb21taXQKK2ZpbGUudHh0OiBuZWVkcyBtZXJnZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbHNvLCBsaW5rZ2l0OmdpdC1zdGF0dXNbMV0gd2lsbCBsaXN0IHRob3NlIGZpbGVzIGFzICJ1bm1lcmdlZCIsIGFuZCB0aGUKK2ZpbGVzIHdpdGggY29uZmxpY3RzIHdpbGwgaGF2ZSBjb25mbGljdCBtYXJrZXJzIGFkZGVkLCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzw8PDw8PDwgSEVBRDpmaWxlLnR4dAorSGVsbG8gd29ybGQKKz09PT09PT0KK0dvb2RieWUKKz4+Pj4+Pj4gNzc5NzZkYTM1YTExZGI0NTgwYjgwYWUyN2U4ZDY1Y2FmNTIwODA4NjpmaWxlLnR4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgeW91IG5lZWQgdG8gZG8gaXMgZWRpdCB0aGUgZmlsZXMgdG8gcmVzb2x2ZSB0aGUgY29uZmxpY3RzLCBhbmQgdGhlbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBhZGQgZmlsZS50eHQKKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlIHRoYXQgdGhlIGNvbW1pdCBtZXNzYWdlIHdpbGwgYWxyZWFkeSBiZSBmaWxsZWQgaW4gZm9yIHlvdSB3aXRoCitzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBtZXJnZS4gIE5vcm1hbGx5IHlvdSBjYW4ganVzdCB1c2UgdGhpcworZGVmYXVsdCBtZXNzYWdlIHVuY2hhbmdlZCwgYnV0IHlvdSBtYXkgYWRkIGFkZGl0aW9uYWwgY29tbWVudGFyeSBvZgoreW91ciBvd24gaWYgZGVzaXJlZC4KKworVGhlIGFib3ZlIGlzIGFsbCB5b3UgbmVlZCB0byBrbm93IHRvIHJlc29sdmUgYSBzaW1wbGUgbWVyZ2UuICBCdXQgR2l0CithbHNvIHByb3ZpZGVzIG1vcmUgaW5mb3JtYXRpb24gdG8gaGVscCByZXNvbHZlIGNvbmZsaWN0czoKKworW1tjb25mbGljdC1yZXNvbHV0aW9uXV0KK0dldHRpbmcgY29uZmxpY3QtcmVzb2x1dGlvbiBoZWxwIGR1cmluZyBhIG1lcmdlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitBbGwgb2YgdGhlIGNoYW5nZXMgdGhhdCBHaXQgd2FzIGFibGUgdG8gbWVyZ2UgYXV0b21hdGljYWxseSBhcmUKK2FscmVhZHkgYWRkZWQgdG8gdGhlIGluZGV4IGZpbGUsIHNvIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gc2hvd3Mgb25seQordGhlIGNvbmZsaWN0cy4gIEl0IHVzZXMgYW4gdW51c3VhbCBzeW50YXg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYKK2RpZmYgLS1jYyBmaWxlLnR4dAoraW5kZXggODAyOTkyYywyYjYwMjA3Li4wMDAwMDAwCistLS0gYS9maWxlLnR4dAorKysrIGIvZmlsZS50eHQKK0BAQCAtMSwxIC0xLDEgKzEsNSBAQEAKKysrPDw8PDw8PCBIRUFEOmZpbGUudHh0CisgK0hlbGxvIHdvcmxkCisrKz09PT09PT0KKysgR29vZGJ5ZQorKys+Pj4+Pj4+IDc3OTc2ZGEzNWExMWRiNDU4MGI4MGFlMjdlOGQ2NWNhZjUyMDgwODY6ZmlsZS50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVjYWxsIHRoYXQgdGhlIGNvbW1pdCB3aGljaCB3aWxsIGJlIGNvbW1pdHRlZCBhZnRlciB3ZSByZXNvbHZlIHRoaXMKK2NvbmZsaWN0IHdpbGwgaGF2ZSB0d28gcGFyZW50cyBpbnN0ZWFkIG9mIHRoZSB1c3VhbCBvbmU6IG9uZSBwYXJlbnQKK3dpbGwgYmUgSEVBRCwgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2g7IHRoZSBvdGhlciB3aWxsIGJlIHRoZQordGlwIG9mIHRoZSBvdGhlciBicmFuY2gsIHdoaWNoIGlzIHN0b3JlZCB0ZW1wb3JhcmlseSBpbiBNRVJHRV9IRUFELgorCitEdXJpbmcgdGhlIG1lcmdlLCB0aGUgaW5kZXggaG9sZHMgdGhyZWUgdmVyc2lvbnMgb2YgZWFjaCBmaWxlLiAgRWFjaCBvZgordGhlc2UgdGhyZWUgImZpbGUgc3RhZ2VzIiByZXByZXNlbnRzIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhlIGZpbGU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgOjE6ZmlsZS50eHQJIyB0aGUgZmlsZSBpbiBhIGNvbW1vbiBhbmNlc3RvciBvZiBib3RoIGJyYW5jaGVzCiskIGdpdCBzaG93IDoyOmZpbGUudHh0CSMgdGhlIHZlcnNpb24gZnJvbSBIRUFELgorJCBnaXQgc2hvdyA6MzpmaWxlLnR4dAkjIHRoZSB2ZXJzaW9uIGZyb20gTUVSR0VfSEVBRC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB5b3UgYXNrIGxpbmtnaXQ6Z2l0LWRpZmZbMV0gdG8gc2hvdyB0aGUgY29uZmxpY3RzLCBpdCBydW5zIGEKK3RocmVlLXdheSBkaWZmIGJldHdlZW4gdGhlIGNvbmZsaWN0ZWQgbWVyZ2UgcmVzdWx0cyBpbiB0aGUgd29yayB0cmVlIHdpdGgKK3N0YWdlcyAyIGFuZCAzIHRvIHNob3cgb25seSBodW5rcyB3aG9zZSBjb250ZW50cyBjb21lIGZyb20gYm90aCBzaWRlcywKK21peGVkIChpbiBvdGhlciB3b3Jkcywgd2hlbiBhIGh1bmsncyBtZXJnZSByZXN1bHRzIGNvbWUgb25seSBmcm9tIHN0YWdlIDIsCit0aGF0IHBhcnQgaXMgbm90IGNvbmZsaWN0aW5nIGFuZCBpcyBub3Qgc2hvd24uICBTYW1lIGZvciBzdGFnZSAzKS4KKworVGhlIGRpZmYgYWJvdmUgc2hvd3MgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHdvcmtpbmctdHJlZSB2ZXJzaW9uIG9mCitmaWxlLnR4dCBhbmQgdGhlIHN0YWdlIDIgYW5kIHN0YWdlIDMgdmVyc2lvbnMuICBTbyBpbnN0ZWFkIG9mIHByZWNlZGluZworZWFjaCBsaW5lIGJ5IGEgc2luZ2xlIGArYCBvciBgLWAsIGl0IG5vdyB1c2VzIHR3byBjb2x1bW5zOiB0aGUgZmlyc3QKK2NvbHVtbiBpcyB1c2VkIGZvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBmaXJzdCBwYXJlbnQgYW5kIHRoZSB3b3JraW5nCitkaXJlY3RvcnkgY29weSwgYW5kIHRoZSBzZWNvbmQgZm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHNlY29uZCBwYXJlbnQKK2FuZCB0aGUgd29ya2luZyBkaXJlY3RvcnkgY29weS4gIChTZWUgdGhlICJDT01CSU5FRCBESUZGIEZPUk1BVCIgc2VjdGlvbgorb2YgbGlua2dpdDpnaXQtZGlmZi1maWxlc1sxXSBmb3IgYSBkZXRhaWxzIG9mIHRoZSBmb3JtYXQuKQorCitBZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0IGluIHRoZSBvYnZpb3VzIHdheSAoYnV0IGJlZm9yZSB1cGRhdGluZyB0aGUKK2luZGV4KSwgdGhlIGRpZmYgd2lsbCBsb29rIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGRpZmYKK2RpZmYgLS1jYyBmaWxlLnR4dAoraW5kZXggODAyOTkyYywyYjYwMjA3Li4wMDAwMDAwCistLS0gYS9maWxlLnR4dAorKysrIGIvZmlsZS50eHQKK0BAQCAtMSwxIC0xLDEgKzEsMSBAQEAKKy0gSGVsbG8gd29ybGQKKyAtR29vZGJ5ZQorKytHb29kYnllIHdvcmxkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2hvd3MgdGhhdCBvdXIgcmVzb2x2ZWQgdmVyc2lvbiBkZWxldGVkICJIZWxsbyB3b3JsZCIgZnJvbSB0aGUKK2ZpcnN0IHBhcmVudCwgZGVsZXRlZCAiR29vZGJ5ZSIgZnJvbSB0aGUgc2Vjb25kIHBhcmVudCwgYW5kIGFkZGVkCisiR29vZGJ5ZSB3b3JsZCIsIHdoaWNoIHdhcyBwcmV2aW91c2x5IGFic2VudCBmcm9tIGJvdGguCisKK1NvbWUgc3BlY2lhbCBkaWZmIG9wdGlvbnMgYWxsb3cgZGlmZmluZyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYWdhaW5zdAorYW55IG9mIHRoZXNlIHN0YWdlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZGlmZiAtMSBmaWxlLnR4dAkJIyBkaWZmIGFnYWluc3Qgc3RhZ2UgMQorJCBnaXQgZGlmZiAtLWJhc2UgZmlsZS50eHQJIyBzYW1lIGFzIHRoZSBhYm92ZQorJCBnaXQgZGlmZiAtMiBmaWxlLnR4dAkJIyBkaWZmIGFnYWluc3Qgc3RhZ2UgMgorJCBnaXQgZGlmZiAtLW91cnMgZmlsZS50eHQJIyBzYW1lIGFzIHRoZSBhYm92ZQorJCBnaXQgZGlmZiAtMyBmaWxlLnR4dAkJIyBkaWZmIGFnYWluc3Qgc3RhZ2UgMworJCBnaXQgZGlmZiAtLXRoZWlycyBmaWxlLnR4dAkjIHNhbWUgYXMgdGhlIGFib3ZlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGlua2dpdDpnaXQtbG9nWzFdIGFuZCBsaW5rZ2l0OmdpdGtbMV0gY29tbWFuZHMgYWxzbyBwcm92aWRlIHNwZWNpYWwgaGVscAorZm9yIG1lcmdlczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIC0tbWVyZ2UKKyQgZ2l0ayAtLW1lcmdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIHdpbGwgZGlzcGxheSBhbGwgY29tbWl0cyB3aGljaCBleGlzdCBvbmx5IG9uIEhFQUQgb3Igb24KK01FUkdFX0hFQUQsIGFuZCB3aGljaCB0b3VjaCBhbiB1bm1lcmdlZCBmaWxlLgorCitZb3UgbWF5IGFsc28gdXNlIGxpbmtnaXQ6Z2l0LW1lcmdldG9vbFsxXSwgd2hpY2ggbGV0cyB5b3UgbWVyZ2UgdGhlCit1bm1lcmdlZCBmaWxlcyB1c2luZyBleHRlcm5hbCB0b29scyBzdWNoIGFzIEVtYWNzIG9yIGtkaWZmMy4KKworRWFjaCB0aW1lIHlvdSByZXNvbHZlIHRoZSBjb25mbGljdHMgaW4gYSBmaWxlIGFuZCB1cGRhdGUgdGhlIGluZGV4OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBhZGQgZmlsZS50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGhlIGRpZmZlcmVudCBzdGFnZXMgb2YgdGhhdCBmaWxlIHdpbGwgYmUgImNvbGxhcHNlZCIsIGFmdGVyIHdoaWNoCitgZ2l0IGRpZmZgIHdpbGwgKGJ5IGRlZmF1bHQpIG5vIGxvbmdlciBzaG93IGRpZmZzIGZvciB0aGF0IGZpbGUuCisKK1tbdW5kb2luZy1hLW1lcmdlXV0KK1VuZG9pbmcgYSBtZXJnZQorLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBnZXQgc3R1Y2sgYW5kIGRlY2lkZSB0byBqdXN0IGdpdmUgdXAgYW5kIHRocm93IHRoZSB3aG9sZSBtZXNzCithd2F5LCB5b3UgY2FuIGFsd2F5cyByZXR1cm4gdG8gdGhlIHByZS1tZXJnZSBzdGF0ZSB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlc2V0IC0taGFyZCBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09yLCBpZiB5b3UndmUgYWxyZWFkeSBjb21taXR0ZWQgdGhlIG1lcmdlIHRoYXQgeW91IHdhbnQgdG8gdGhyb3cgYXdheSwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVzZXQgLS1oYXJkIE9SSUdfSEVBRAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIb3dldmVyLCB0aGlzIGxhc3QgY29tbWFuZCBjYW4gYmUgZGFuZ2Vyb3VzIGluIHNvbWUgY2FzZXMtLW5ldmVyCit0aHJvdyBhd2F5IGEgY29tbWl0IHlvdSBoYXZlIGFscmVhZHkgY29tbWl0dGVkIGlmIHRoYXQgY29tbWl0IG1heQoraXRzZWxmIGhhdmUgYmVlbiBtZXJnZWQgaW50byBhbm90aGVyIGJyYW5jaCwgYXMgZG9pbmcgc28gbWF5IGNvbmZ1c2UKK2Z1cnRoZXIgbWVyZ2VzLgorCitbW2Zhc3QtZm9yd2FyZHNdXQorRmFzdC1mb3J3YXJkIG1lcmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBvbmUgc3BlY2lhbCBjYXNlIG5vdCBtZW50aW9uZWQgYWJvdmUsIHdoaWNoIGlzIHRyZWF0ZWQKK2RpZmZlcmVudGx5LiAgTm9ybWFsbHksIGEgbWVyZ2UgcmVzdWx0cyBpbiBhIG1lcmdlIGNvbW1pdCwgd2l0aCB0d28KK3BhcmVudHMsIG9uZSBwb2ludGluZyBhdCBlYWNoIG9mIHRoZSB0d28gbGluZXMgb2YgZGV2ZWxvcG1lbnQgdGhhdAord2VyZSBtZXJnZWQuCisKK0hvd2V2ZXIsIGlmIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIG90aGVyLS1zbyBldmVyeQorY29tbWl0IHByZXNlbnQgaW4gdGhlIG9uZSBpcyBhbHJlYWR5IGNvbnRhaW5lZCBpbiB0aGUgb3RoZXItLXRoZW4gR2l0CitqdXN0IHBlcmZvcm1zIGEgImZhc3QtZm9yd2FyZCI7IHRoZSBoZWFkIG9mIHRoZSBjdXJyZW50IGJyYW5jaCBpcyBtb3ZlZAorZm9yd2FyZCB0byBwb2ludCBhdCB0aGUgaGVhZCBvZiB0aGUgbWVyZ2VkLWluIGJyYW5jaCwgd2l0aG91dCBhbnkgbmV3Citjb21taXRzIGJlaW5nIGNyZWF0ZWQuCisKK1tbZml4aW5nLW1pc3Rha2VzXV0KK0ZpeGluZyBtaXN0YWtlcworLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSd2ZSBtZXNzZWQgdXAgdGhlIHdvcmtpbmcgdHJlZSwgYnV0IGhhdmVuJ3QgeWV0IGNvbW1pdHRlZCB5b3VyCittaXN0YWtlLCB5b3UgY2FuIHJldHVybiB0aGUgZW50aXJlIHdvcmtpbmcgdHJlZSB0byB0aGUgbGFzdCBjb21taXR0ZWQKK3N0YXRlIHdpdGgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVzZXQgLS1oYXJkIEhFQUQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IG1ha2UgYSBjb21taXQgdGhhdCB5b3UgbGF0ZXIgd2lzaCB5b3UgaGFkbid0LCB0aGVyZSBhcmUgdHdvCitmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCB3YXlzIHRvIGZpeCB0aGUgcHJvYmxlbToKKworCTEuIFlvdSBjYW4gY3JlYXRlIGEgbmV3IGNvbW1pdCB0aGF0IHVuZG9lcyB3aGF0ZXZlciB3YXMgZG9uZQorCWJ5IHRoZSBvbGQgY29tbWl0LiAgVGhpcyBpcyB0aGUgY29ycmVjdCB0aGluZyBpZiB5b3VyCisJbWlzdGFrZSBoYXMgYWxyZWFkeSBiZWVuIG1hZGUgcHVibGljLgorCisJMi4gWW91IGNhbiBnbyBiYWNrIGFuZCBtb2RpZnkgdGhlIG9sZCBjb21taXQuICBZb3Ugc2hvdWxkCisJbmV2ZXIgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhbHJlYWR5IG1hZGUgdGhlIGhpc3RvcnkgcHVibGljOworCUdpdCBkb2VzIG5vdCBub3JtYWxseSBleHBlY3QgdGhlICJoaXN0b3J5IiBvZiBhIHByb2plY3QgdG8KKwljaGFuZ2UsIGFuZCBjYW5ub3QgY29ycmVjdGx5IHBlcmZvcm0gcmVwZWF0ZWQgbWVyZ2VzIGZyb20KKwlhIGJyYW5jaCB0aGF0IGhhcyBoYWQgaXRzIGhpc3RvcnkgY2hhbmdlZC4KKworW1tyZXZlcnRpbmctYS1jb21taXRdXQorRml4aW5nIGEgbWlzdGFrZSB3aXRoIGEgbmV3IGNvbW1pdAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitDcmVhdGluZyBhIG5ldyBjb21taXQgdGhhdCByZXZlcnRzIGFuIGVhcmxpZXIgY2hhbmdlIGlzIHZlcnkgZWFzeTsKK2p1c3QgcGFzcyB0aGUgbGlua2dpdDpnaXQtcmV2ZXJ0WzFdIGNvbW1hbmQgYSByZWZlcmVuY2UgdG8gdGhlIGJhZAorY29tbWl0OyBmb3IgZXhhbXBsZSwgdG8gcmV2ZXJ0IHRoZSBtb3N0IHJlY2VudCBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJldmVydCBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd2lsbCBjcmVhdGUgYSBuZXcgY29tbWl0IHdoaWNoIHVuZG9lcyB0aGUgY2hhbmdlIGluIEhFQUQuICBZb3UKK3dpbGwgYmUgZ2l2ZW4gYSBjaGFuY2UgdG8gZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHRoZSBuZXcgY29tbWl0LgorCitZb3UgY2FuIGFsc28gcmV2ZXJ0IGFuIGVhcmxpZXIgY2hhbmdlLCBmb3IgZXhhbXBsZSwgdGhlIG5leHQtdG8tbGFzdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmV2ZXJ0IEhFQUReCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoaXMgY2FzZSBHaXQgd2lsbCBhdHRlbXB0IHRvIHVuZG8gdGhlIG9sZCBjaGFuZ2Ugd2hpbGUgbGVhdmluZworaW50YWN0IGFueSBjaGFuZ2VzIG1hZGUgc2luY2UgdGhlbi4gIElmIG1vcmUgcmVjZW50IGNoYW5nZXMgb3ZlcmxhcAord2l0aCB0aGUgY2hhbmdlcyB0byBiZSByZXZlcnRlZCwgdGhlbiB5b3Ugd2lsbCBiZSBhc2tlZCB0byBmaXgKK2NvbmZsaWN0cyBtYW51YWxseSwganVzdCBhcyBpbiB0aGUgY2FzZSBvZiA8PHJlc29sdmluZy1hLW1lcmdlLAorcmVzb2x2aW5nIGEgbWVyZ2U+Pi4KKworW1tmaXhpbmctYS1taXN0YWtlLWJ5LXJld3JpdGluZy1oaXN0b3J5XV0KK0ZpeGluZyBhIG1pc3Rha2UgYnkgcmV3cml0aW5nIGhpc3RvcnkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgdGhlIHByb2JsZW1hdGljIGNvbW1pdCBpcyB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBhbmQgeW91IGhhdmUgbm90Cit5ZXQgbWFkZSB0aGF0IGNvbW1pdCBwdWJsaWMsIHRoZW4geW91IG1heSBqdXN0Cis8PHVuZG9pbmctYS1tZXJnZSxkZXN0cm95IGl0IHVzaW5nIGBnaXQgcmVzZXRgPj4uCisKK0FsdGVybmF0aXZlbHksIHlvdQorY2FuIGVkaXQgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCB1cGRhdGUgdGhlIGluZGV4IHRvIGZpeCB5b3VyCittaXN0YWtlLCBqdXN0IGFzIGlmIHlvdSB3ZXJlIGdvaW5nIHRvIDw8aG93LXRvLW1ha2UtYS1jb21taXQsY3JlYXRlIGEKK25ldyBjb21taXQ+PiwgdGhlbiBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0IC0tYW1lbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2hpY2ggd2lsbCByZXBsYWNlIHRoZSBvbGQgY29tbWl0IGJ5IGEgbmV3IGNvbW1pdCBpbmNvcnBvcmF0aW5nIHlvdXIKK2NoYW5nZXMsIGdpdmluZyB5b3UgYSBjaGFuY2UgdG8gZWRpdCB0aGUgb2xkIGNvbW1pdCBtZXNzYWdlIGZpcnN0LgorCitBZ2FpbiwgeW91IHNob3VsZCBuZXZlciBkbyB0aGlzIHRvIGEgY29tbWl0IHRoYXQgbWF5IGFscmVhZHkgaGF2ZQorYmVlbiBtZXJnZWQgaW50byBhbm90aGVyIGJyYW5jaDsgdXNlIGxpbmtnaXQ6Z2l0LXJldmVydFsxXSBpbnN0ZWFkIGluCit0aGF0IGNhc2UuCisKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gcmVwbGFjZSBjb21taXRzIGZ1cnRoZXIgYmFjayBpbiB0aGUgaGlzdG9yeSwgYnV0Cit0aGlzIGlzIGFuIGFkdmFuY2VkIHRvcGljIHRvIGJlIGxlZnQgZm9yCis8PGNsZWFuaW5nLXVwLWhpc3RvcnksYW5vdGhlciBjaGFwdGVyPj4uCisKK1tbY2hlY2tvdXQtb2YtcGF0aF1dCitDaGVja2luZyBvdXQgYW4gb2xkIHZlcnNpb24gb2YgYSBmaWxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0luIHRoZSBwcm9jZXNzIG9mIHVuZG9pbmcgYSBwcmV2aW91cyBiYWQgY2hhbmdlLCB5b3UgbWF5IGZpbmQgaXQKK3VzZWZ1bCB0byBjaGVjayBvdXQgYW4gb2xkZXIgdmVyc2lvbiBvZiBhIHBhcnRpY3VsYXIgZmlsZSB1c2luZworbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0uICBXZSd2ZSB1c2VkIGBnaXQgY2hlY2tvdXRgIGJlZm9yZSB0byBzd2l0Y2gKK2JyYW5jaGVzLCBidXQgaXQgaGFzIHF1aXRlIGRpZmZlcmVudCBiZWhhdmlvciBpZiBpdCBpcyBnaXZlbiBhIHBhdGgKK25hbWU6IHRoZSBjb21tYW5kCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IEhFQUReIHBhdGgvdG8vZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCityZXBsYWNlcyBwYXRoL3RvL2ZpbGUgYnkgdGhlIGNvbnRlbnRzIGl0IGhhZCBpbiB0aGUgY29tbWl0IEhFQUReLCBhbmQKK2Fsc28gdXBkYXRlcyB0aGUgaW5kZXggdG8gbWF0Y2guICBJdCBkb2VzIG5vdCBjaGFuZ2UgYnJhbmNoZXMuCisKK0lmIHlvdSBqdXN0IHdhbnQgdG8gbG9vayBhdCBhbiBvbGQgdmVyc2lvbiBvZiB0aGUgZmlsZSwgd2l0aG91dAorbW9kaWZ5aW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwgeW91IGNhbiBkbyB0aGF0IHdpdGgKK2xpbmtnaXQ6Z2l0LXNob3dbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgSEVBRF46cGF0aC90by9maWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgZGlzcGxheSB0aGUgZ2l2ZW4gdmVyc2lvbiBvZiB0aGUgZmlsZS4KKworW1tpbnRlcnJ1cHRlZC13b3JrXV0KK1RlbXBvcmFyaWx5IHNldHRpbmcgYXNpZGUgd29yayBpbiBwcm9ncmVzcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1doaWxlIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB3b3JraW5nIG9uIHNvbWV0aGluZyBjb21wbGljYXRlZCwgeW91CitmaW5kIGFuIHVucmVsYXRlZCBidXQgb2J2aW91cyBhbmQgdHJpdmlhbCBidWcuICBZb3Ugd291bGQgbGlrZSB0byBmaXggaXQKK2JlZm9yZSBjb250aW51aW5nLiAgWW91IGNhbiB1c2UgbGlua2dpdDpnaXQtc3Rhc2hbMV0gdG8gc2F2ZSB0aGUgY3VycmVudAorc3RhdGUgb2YgeW91ciB3b3JrLCBhbmQgYWZ0ZXIgZml4aW5nIHRoZSBidWcgKG9yLCBvcHRpb25hbGx5IGFmdGVyIGRvaW5nCitzbyBvbiBhIGRpZmZlcmVudCBicmFuY2ggYW5kIHRoZW4gY29taW5nIGJhY2spLCB1bnN0YXNoIHRoZQord29yay1pbi1wcm9ncmVzcyBjaGFuZ2VzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN0YXNoIHNhdmUgIndvcmsgaW4gcHJvZ3Jlc3MgZm9yIGZvbyBmZWF0dXJlIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCB3aWxsIHNhdmUgeW91ciBjaGFuZ2VzIGF3YXkgdG8gdGhlIGBzdGFzaGAsIGFuZAorcmVzZXQgeW91ciB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCB0byBtYXRjaCB0aGUgdGlwIG9mIHlvdXIKK2N1cnJlbnQgYnJhbmNoLiAgVGhlbiB5b3UgY2FuIG1ha2UgeW91ciBmaXggYXMgdXN1YWwuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLi4uIGVkaXQgYW5kIHRlc3QgLi4uCiskIGdpdCBjb21taXQgLWEgLW0gImJsb3JwbDogdHlwb2ZpeCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZnRlciB0aGF0LCB5b3UgY2FuIGdvIGJhY2sgdG8gd2hhdCB5b3Ugd2VyZSB3b3JraW5nIG9uIHdpdGgKK2BnaXQgc3Rhc2ggcG9wYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzdGFzaCBwb3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1tbZW5zdXJpbmctZ29vZC1wZXJmb3JtYW5jZV1dCitFbnN1cmluZyBnb29kIHBlcmZvcm1hbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIGxhcmdlIHJlcG9zaXRvcmllcywgR2l0IGRlcGVuZHMgb24gY29tcHJlc3Npb24gdG8ga2VlcCB0aGUgaGlzdG9yeQoraW5mb3JtYXRpb24gZnJvbSB0YWtpbmcgdXAgdG9vIG11Y2ggc3BhY2Ugb24gZGlzayBvciBpbiBtZW1vcnkuICBTb21lCitHaXQgY29tbWFuZHMgbWF5IGF1dG9tYXRpY2FsbHkgcnVuIGxpbmtnaXQ6Z2l0LWdjWzFdLCBzbyB5b3UgZG9uJ3QKK2hhdmUgdG8gd29ycnkgYWJvdXQgcnVubmluZyBpdCBtYW51YWxseS4gIEhvd2V2ZXIsIGNvbXByZXNzaW5nIGEgbGFyZ2UKK3JlcG9zaXRvcnkgbWF5IHRha2UgYSB3aGlsZSwgc28geW91IG1heSB3YW50IHRvIGNhbGwgYGdjYCBleHBsaWNpdGx5Cit0byBhdm9pZCBhdXRvbWF0aWMgY29tcHJlc3Npb24ga2lja2luZyBpbiB3aGVuIGl0IGlzIG5vdCBjb252ZW5pZW50LgorCisKK1tbZW5zdXJpbmctcmVsaWFiaWxpdHldXQorRW5zdXJpbmcgcmVsaWFiaWxpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tbY2hlY2tpbmctZm9yLWNvcnJ1cHRpb25dXQorQ2hlY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIGNvcnJ1cHRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBsaW5rZ2l0OmdpdC1mc2NrWzFdIGNvbW1hbmQgcnVucyBhIG51bWJlciBvZiBzZWxmLWNvbnNpc3RlbmN5IGNoZWNrcworb24gdGhlIHJlcG9zaXRvcnksIGFuZCByZXBvcnRzIG9uIGFueSBwcm9ibGVtcy4gIFRoaXMgbWF5IHRha2Ugc29tZQordGltZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZnNjaworZGFuZ2xpbmcgY29tbWl0IDcyODEyNTFkZGQyYTYxZTM4NjU3YzgyNzczOWM1NzAxNTY3MWE2YjMKK2RhbmdsaW5nIGNvbW1pdCAyNzA2YTA1OWYyNThjNmIyNDVmMjk4ZGM0ZmYyY2NkMzBlYzIxYTYzCitkYW5nbGluZyBjb21taXQgMTM0NzJiN2M0YjgwODUxYTFiYzU1MTc3OTE3MWRjYjAzNjU1ZTliNQorZGFuZ2xpbmcgYmxvYiAyMTg3NjFmOWQ5MDcxMmQzN2E5YzVlMzZmNDA2ZjkyMjAyZGIwN2ViCitkYW5nbGluZyBjb21taXQgYmYwOTM1MzVhMzRhNGQzNTczMWFhMmJkOTBmZTZiMTc2MzAyZjE0ZgorZGFuZ2xpbmcgY29tbWl0IDhlNGJlYzdmMmRkYWEyNjhiZWY5OTk4NTNjMjU3NTU0NTIxMDBmOGUKK2RhbmdsaW5nIHRyZWUgZDUwYmI4NjE4NmJmMjdiNjgxZDI1YWY4OWQzYjViNjgzODJlNDA4NQorZGFuZ2xpbmcgdHJlZSBiMjRjMjQ3M2YxZmQzZDkxMzUyYTYyNDc5NWJlMDI2ZDY0Yzg4NDFmCisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IHdpbGwgc2VlIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgb24gZGFuZ2xpbmcgb2JqZWN0cy4gVGhleSBhcmUgb2JqZWN0cwordGhhdCBzdGlsbCBleGlzdCBpbiB0aGUgcmVwb3NpdG9yeSBidXQgYXJlIG5vIGxvbmdlciByZWZlcmVuY2VkIGJ5IGFueSBvZgoreW91ciBicmFuY2hlcywgYW5kIGNhbiAoYW5kIHdpbGwpIGJlIHJlbW92ZWQgYWZ0ZXIgYSB3aGlsZSB3aXRoIGBnY2AuCitZb3UgY2FuIHJ1biBgZ2l0IGZzY2sgLS1uby1kYW5nbGluZ2AgdG8gc3VwcHJlc3MgdGhlc2UgbWVzc2FnZXMsIGFuZCBzdGlsbAordmlldyByZWFsIGVycm9ycy4KKworW1tyZWNvdmVyaW5nLWxvc3QtY2hhbmdlc11dCitSZWNvdmVyaW5nIGxvc3QgY2hhbmdlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworW1tyZWZsb2dzXV0KK1JlZmxvZ3MKK15eXl5eXl4KKworU2F5IHlvdSBtb2RpZnkgYSBicmFuY2ggd2l0aCA8PGZpeGluZy1taXN0YWtlcyxgZ2l0IHJlc2V0IC0taGFyZGA+PiwKK2FuZCB0aGVuIHJlYWxpemUgdGhhdCB0aGUgYnJhbmNoIHdhcyB0aGUgb25seSByZWZlcmVuY2UgeW91IGhhZCB0bwordGhhdCBwb2ludCBpbiBoaXN0b3J5LgorCitGb3J0dW5hdGVseSwgR2l0IGFsc28ga2VlcHMgYSBsb2csIGNhbGxlZCBhICJyZWZsb2ciLCBvZiBhbGwgdGhlCitwcmV2aW91cyB2YWx1ZXMgb2YgZWFjaCBicmFuY2guICBTbyBpbiB0aGlzIGNhc2UgeW91IGNhbiBzdGlsbCBmaW5kIHRoZQorb2xkIGhpc3RvcnkgdXNpbmcsIGZvciBleGFtcGxlLAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgbWFzdGVyQHsxfQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGxpc3RzIHRoZSBjb21taXRzIHJlYWNoYWJsZSBmcm9tIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZQorYG1hc3RlcmAgYnJhbmNoIGhlYWQuICBUaGlzIHN5bnRheCBjYW4gYmUgdXNlZCB3aXRoIGFueSBHaXQgY29tbWFuZAordGhhdCBhY2NlcHRzIGEgY29tbWl0LCBub3QganVzdCB3aXRoIGBnaXQgbG9nYC4gIFNvbWUgb3RoZXIgZXhhbXBsZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHNob3cgbWFzdGVyQHsyfQkJIyBTZWUgd2hlcmUgdGhlIGJyYW5jaCBwb2ludGVkIDIsCiskIGdpdCBzaG93IG1hc3RlckB7M30JCSMgMywgLi4uIGNoYW5nZXMgYWdvLgorJCBnaXRrIG1hc3RlckB7eWVzdGVyZGF5fQkjIFNlZSB3aGVyZSBpdCBwb2ludGVkIHllc3RlcmRheSwKKyQgZ2l0ayBtYXN0ZXJAeyIxIHdlZWsgYWdvIn0JIyAuLi4gb3IgbGFzdCB3ZWVrCiskIGdpdCBsb2cgLS13YWxrLXJlZmxvZ3MgbWFzdGVyCSMgc2hvdyByZWZsb2cgZW50cmllcyBmb3IgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Egc2VwYXJhdGUgcmVmbG9nIGlzIGtlcHQgZm9yIHRoZSBIRUFELCBzbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IEhFQURAeyIxIHdlZWsgYWdvIn0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKword2lsbCBzaG93IHdoYXQgSEVBRCBwb2ludGVkIHRvIG9uZSB3ZWVrIGFnbywgbm90IHdoYXQgdGhlIGN1cnJlbnQgYnJhbmNoCitwb2ludGVkIHRvIG9uZSB3ZWVrIGFnby4gIFRoaXMgYWxsb3dzIHlvdSB0byBzZWUgdGhlIGhpc3Rvcnkgb2Ygd2hhdAoreW91J3ZlIGNoZWNrZWQgb3V0LgorCitUaGUgcmVmbG9ncyBhcmUga2VwdCBieSBkZWZhdWx0IGZvciAzMCBkYXlzLCBhZnRlciB3aGljaCB0aGV5IG1heSBiZQorcHJ1bmVkLiAgU2VlIGxpbmtnaXQ6Z2l0LXJlZmxvZ1sxXSBhbmQgbGlua2dpdDpnaXQtZ2NbMV0gdG8gbGVhcm4KK2hvdyB0byBjb250cm9sIHRoaXMgcHJ1bmluZywgYW5kIHNlZSB0aGUgIlNQRUNJRllJTkcgUkVWSVNJT05TIgorc2VjdGlvbiBvZiBsaW5rZ2l0OmdpdHJldmlzaW9uc1s3XSBmb3IgZGV0YWlscy4KKworTm90ZSB0aGF0IHRoZSByZWZsb2cgaGlzdG9yeSBpcyB2ZXJ5IGRpZmZlcmVudCBmcm9tIG5vcm1hbCBHaXQgaGlzdG9yeS4KK1doaWxlIG5vcm1hbCBoaXN0b3J5IGlzIHNoYXJlZCBieSBldmVyeSByZXBvc2l0b3J5IHRoYXQgd29ya3Mgb24gdGhlCitzYW1lIHByb2plY3QsIHRoZSByZWZsb2cgaGlzdG9yeSBpcyBub3Qgc2hhcmVkOiBpdCB0ZWxscyB5b3Ugb25seSBhYm91dAoraG93IHRoZSBicmFuY2hlcyBpbiB5b3VyIGxvY2FsIHJlcG9zaXRvcnkgaGF2ZSBjaGFuZ2VkIG92ZXIgdGltZS4KKworW1tkYW5nbGluZy1vYmplY3QtcmVjb3ZlcnldXQorRXhhbWluaW5nIGRhbmdsaW5nIG9iamVjdHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0luIHNvbWUgc2l0dWF0aW9ucyB0aGUgcmVmbG9nIG1heSBub3QgYmUgYWJsZSB0byBzYXZlIHlvdS4gIEZvciBleGFtcGxlLAorc3VwcG9zZSB5b3UgZGVsZXRlIGEgYnJhbmNoLCB0aGVuIHJlYWxpemUgeW91IG5lZWQgdGhlIGhpc3RvcnkgaXQKK2NvbnRhaW5lZC4gIFRoZSByZWZsb2cgaXMgYWxzbyBkZWxldGVkOyBob3dldmVyLCBpZiB5b3UgaGF2ZSBub3QgeWV0CitwcnVuZWQgdGhlIHJlcG9zaXRvcnksIHRoZW4geW91IG1heSBzdGlsbCBiZSBhYmxlIHRvIGZpbmQgdGhlIGxvc3QKK2NvbW1pdHMgaW4gdGhlIGRhbmdsaW5nIG9iamVjdHMgdGhhdCBgZ2l0IGZzY2tgIHJlcG9ydHMuICBTZWUKKzw8ZGFuZ2xpbmctb2JqZWN0cz4+IGZvciB0aGUgZGV0YWlscy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZnNjaworZGFuZ2xpbmcgY29tbWl0IDcyODEyNTFkZGQyYTYxZTM4NjU3YzgyNzczOWM1NzAxNTY3MWE2YjMKK2RhbmdsaW5nIGNvbW1pdCAyNzA2YTA1OWYyNThjNmIyNDVmMjk4ZGM0ZmYyY2NkMzBlYzIxYTYzCitkYW5nbGluZyBjb21taXQgMTM0NzJiN2M0YjgwODUxYTFiYzU1MTc3OTE3MWRjYjAzNjU1ZTliNQorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gZXhhbWluZQorb25lIG9mIHRob3NlIGRhbmdsaW5nIGNvbW1pdHMgd2l0aCwgZm9yIGV4YW1wbGUsCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIDcyODEyNTFkZGQgLS1ub3QgLS1hbGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBkb2VzIHdoYXQgaXQgc291bmRzIGxpa2U6IGl0IHNheXMgdGhhdCB5b3Ugd2FudCB0byBzZWUgdGhlIGNvbW1pdAoraGlzdG9yeSB0aGF0IGlzIGRlc2NyaWJlZCBieSB0aGUgZGFuZ2xpbmcgY29tbWl0KHMpLCBidXQgbm90IHRoZQoraGlzdG9yeSB0aGF0IGlzIGRlc2NyaWJlZCBieSBhbGwgeW91ciBleGlzdGluZyBicmFuY2hlcyBhbmQgdGFncy4gIFRodXMKK3lvdSBnZXQgZXhhY3RseSB0aGUgaGlzdG9yeSByZWFjaGFibGUgZnJvbSB0aGF0IGNvbW1pdCB0aGF0IGlzIGxvc3QuCisoQW5kIG5vdGljZSB0aGF0IGl0IG1pZ2h0IG5vdCBiZSBqdXN0IG9uZSBjb21taXQ6IHdlIG9ubHkgcmVwb3J0IHRoZQorInRpcCBvZiB0aGUgbGluZSIgYXMgYmVpbmcgZGFuZ2xpbmcsIGJ1dCB0aGVyZSBtaWdodCBiZSBhIHdob2xlIGRlZXAKK2FuZCBjb21wbGV4IGNvbW1pdCBoaXN0b3J5IHRoYXQgd2FzIGRyb3BwZWQuKQorCitJZiB5b3UgZGVjaWRlIHlvdSB3YW50IHRoZSBoaXN0b3J5IGJhY2ssIHlvdSBjYW4gYWx3YXlzIGNyZWF0ZSBhIG5ldworcmVmZXJlbmNlIHBvaW50aW5nIHRvIGl0LCBmb3IgZXhhbXBsZSwgYSBuZXcgYnJhbmNoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCByZWNvdmVyZWQtYnJhbmNoIDcyODEyNTFkZGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPdGhlciB0eXBlcyBvZiBkYW5nbGluZyBvYmplY3RzIChibG9icyBhbmQgdHJlZXMpIGFyZSBhbHNvIHBvc3NpYmxlLCBhbmQKK2RhbmdsaW5nIG9iamVjdHMgY2FuIGFyaXNlIGluIG90aGVyIHNpdHVhdGlvbnMuCisKKworW1tzaGFyaW5nLWRldmVsb3BtZW50XV0KK1NoYXJpbmcgZGV2ZWxvcG1lbnQgd2l0aCBvdGhlcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworW1tnZXR0aW5nLXVwZGF0ZXMtV2l0aC1naXQtcHVsbF1dCitHZXR0aW5nIHVwZGF0ZXMgd2l0aCBnaXQgcHVsbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWZ0ZXIgeW91IGNsb25lIGEgcmVwb3NpdG9yeSBhbmQgY29tbWl0IGEgZmV3IGNoYW5nZXMgb2YgeW91ciBvd24sIHlvdQorbWF5IHdpc2ggdG8gY2hlY2sgdGhlIG9yaWdpbmFsIHJlcG9zaXRvcnkgZm9yIHVwZGF0ZXMgYW5kIG1lcmdlIHRoZW0KK2ludG8geW91ciBvd24gd29yay4KKworV2UgaGF2ZSBhbHJlYWR5IHNlZW4gPDxVcGRhdGluZy1hLXJlcG9zaXRvcnktV2l0aC1naXQtZmV0Y2gsaG93IHRvCitrZWVwIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyB1cCB0byBkYXRlPj4gd2l0aCBsaW5rZ2l0OmdpdC1mZXRjaFsxXSwKK2FuZCBob3cgdG8gbWVyZ2UgdHdvIGJyYW5jaGVzLiAgU28geW91IGNhbiBtZXJnZSBpbiBjaGFuZ2VzIGZyb20gdGhlCitvcmlnaW5hbCByZXBvc2l0b3J5J3MgbWFzdGVyIGJyYW5jaCB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaAorJCBnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIb3dldmVyLCB0aGUgbGlua2dpdDpnaXQtcHVsbFsxXSBjb21tYW5kIHByb3ZpZGVzIGEgd2F5IHRvIGRvIHRoaXMgaW4KK29uZSBzdGVwOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsIG9yaWdpbiBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gZmFjdCwgaWYgeW91IGhhdmUgYG1hc3RlcmAgY2hlY2tlZCBvdXQsIHRoZW4gdGhpcyBicmFuY2ggaGFzIGJlZW4KK2NvbmZpZ3VyZWQgYnkgYGdpdCBjbG9uZWAgdG8gZ2V0IGNoYW5nZXMgZnJvbSB0aGUgSEVBRCBicmFuY2ggb2YgdGhlCitvcmlnaW4gcmVwb3NpdG9yeS4gIFNvIG9mdGVuIHlvdSBjYW4KK2FjY29tcGxpc2ggdGhlIGFib3ZlIHdpdGgganVzdCBhIHNpbXBsZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY29tbWFuZCB3aWxsIGZldGNoIGNoYW5nZXMgZnJvbSB0aGUgcmVtb3RlIGJyYW5jaGVzIHRvIHlvdXIKK3JlbW90ZS10cmFja2luZyBicmFuY2hlcyBgb3JpZ2luLypgLCBhbmQgbWVyZ2UgdGhlIGRlZmF1bHQgYnJhbmNoIGludG8KK3RoZSBjdXJyZW50IGJyYW5jaC4KKworTW9yZSBnZW5lcmFsbHksIGEgYnJhbmNoIHRoYXQgaXMgY3JlYXRlZCBmcm9tIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaAord2lsbCBwdWxsCitieSBkZWZhdWx0IGZyb20gdGhhdCBicmFuY2guICBTZWUgdGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUKK2BicmFuY2guPG5hbWU+LnJlbW90ZWAgYW5kIGBicmFuY2guPG5hbWU+Lm1lcmdlYCBvcHRpb25zIGluCitsaW5rZ2l0OmdpdC1jb25maWdbMV0sIGFuZCB0aGUgZGlzY3Vzc2lvbiBvZiB0aGUgYC0tdHJhY2tgIG9wdGlvbiBpbgorbGlua2dpdDpnaXQtY2hlY2tvdXRbMV0sIHRvIGxlYXJuIGhvdyB0byBjb250cm9sIHRoZXNlIGRlZmF1bHRzLgorCitJbiBhZGRpdGlvbiB0byBzYXZpbmcgeW91IGtleXN0cm9rZXMsIGBnaXQgcHVsbGAgYWxzbyBoZWxwcyB5b3UgYnkKK3Byb2R1Y2luZyBhIGRlZmF1bHQgY29tbWl0IG1lc3NhZ2UgZG9jdW1lbnRpbmcgdGhlIGJyYW5jaCBhbmQKK3JlcG9zaXRvcnkgdGhhdCB5b3UgcHVsbGVkIGZyb20uCisKKyhCdXQgbm90ZSB0aGF0IG5vIHN1Y2ggY29tbWl0IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgY2FzZSBvZiBhCis8PGZhc3QtZm9yd2FyZHMsZmFzdC1mb3J3YXJkPj47IGluc3RlYWQsIHlvdXIgYnJhbmNoIHdpbGwganVzdCBiZQordXBkYXRlZCB0byBwb2ludCB0byB0aGUgbGF0ZXN0IGNvbW1pdCBmcm9tIHRoZSB1cHN0cmVhbSBicmFuY2guKQorCitUaGUgYGdpdCBwdWxsYCBjb21tYW5kIGNhbiBhbHNvIGJlIGdpdmVuIGAuYCBhcyB0aGUgInJlbW90ZSIgcmVwb3NpdG9yeSwKK2luIHdoaWNoIGNhc2UgaXQganVzdCBtZXJnZXMgaW4gYSBicmFuY2ggZnJvbSB0aGUgY3VycmVudCByZXBvc2l0b3J5OyBzbwordGhlIGNvbW1hbmRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgLiBicmFuY2gKKyQgZ2l0IG1lcmdlIGJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithcmUgcm91Z2hseSBlcXVpdmFsZW50LgorCitbW3N1Ym1pdHRpbmctcGF0Y2hlc11dCitTdWJtaXR0aW5nIHBhdGNoZXMgdG8gYSBwcm9qZWN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBqdXN0IGhhdmUgYSBmZXcgY2hhbmdlcywgdGhlIHNpbXBsZXN0IHdheSB0byBzdWJtaXQgdGhlbSBtYXkKK2p1c3QgYmUgdG8gc2VuZCB0aGVtIGFzIHBhdGNoZXMgaW4gZW1haWw6CisKK0ZpcnN0LCB1c2UgbGlua2dpdDpnaXQtZm9ybWF0LXBhdGNoWzFdOyBmb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZm9ybWF0LXBhdGNoIG9yaWdpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aWxsIHByb2R1Y2UgYSBudW1iZXJlZCBzZXJpZXMgb2YgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBvbmUKK2ZvciBlYWNoIHBhdGNoIGluIHRoZSBjdXJyZW50IGJyYW5jaCBidXQgbm90IGluIGBvcmlnaW4vSEVBRGAuCisKK2BnaXQgZm9ybWF0LXBhdGNoYCBjYW4gaW5jbHVkZSBhbiBpbml0aWFsICJjb3ZlciBsZXR0ZXIiLiBZb3UgY2FuIGluc2VydAorY29tbWVudGFyeSBvbiBpbmRpdmlkdWFsIHBhdGNoZXMgYWZ0ZXIgdGhlIHRocmVlIGRhc2ggbGluZSB3aGljaAorYGZvcm1hdC1wYXRjaGAgcGxhY2VzIGFmdGVyIHRoZSBjb21taXQgbWVzc2FnZSBidXQgYmVmb3JlIHRoZSBwYXRjaAoraXRzZWxmLiAgSWYgeW91IHVzZSBgZ2l0IG5vdGVzYCB0byB0cmFjayB5b3VyIGNvdmVyIGxldHRlciBtYXRlcmlhbCwKK2BnaXQgZm9ybWF0LXBhdGNoIC0tbm90ZXNgIHdpbGwgaW5jbHVkZSB0aGUgY29tbWl0J3Mgbm90ZXMgaW4gYSBzaW1pbGFyCittYW5uZXIuCisKK1lvdSBjYW4gdGhlbiBpbXBvcnQgdGhlc2UgaW50byB5b3VyIG1haWwgY2xpZW50IGFuZCBzZW5kIHRoZW0gYnkKK2hhbmQuICBIb3dldmVyLCBpZiB5b3UgaGF2ZSBhIGxvdCB0byBzZW5kIGF0IG9uY2UsIHlvdSBtYXkgcHJlZmVyIHRvCit1c2UgdGhlIGxpbmtnaXQ6Z2l0LXNlbmQtZW1haWxbMV0gc2NyaXB0IHRvIGF1dG9tYXRlIHRoZSBwcm9jZXNzLgorQ29uc3VsdCB0aGUgbWFpbGluZyBsaXN0IGZvciB5b3VyIHByb2plY3QgZmlyc3QgdG8gZGV0ZXJtaW5lCit0aGVpciByZXF1aXJlbWVudHMgZm9yIHN1Ym1pdHRpbmcgcGF0Y2hlcy4KKworW1tpbXBvcnRpbmctcGF0Y2hlc11dCitJbXBvcnRpbmcgcGF0Y2hlcyB0byBhIHByb2plY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHaXQgYWxzbyBwcm92aWRlcyBhIHRvb2wgY2FsbGVkIGxpbmtnaXQ6Z2l0LWFtWzFdIChhbSBzdGFuZHMgZm9yCisiYXBwbHkgbWFpbGJveCIpLCBmb3IgaW1wb3J0aW5nIHN1Y2ggYW4gZW1haWxlZCBzZXJpZXMgb2YgcGF0Y2hlcy4KK0p1c3Qgc2F2ZSBhbGwgb2YgdGhlIHBhdGNoLWNvbnRhaW5pbmcgbWVzc2FnZXMsIGluIG9yZGVyLCBpbnRvIGEKK3NpbmdsZSBtYWlsYm94IGZpbGUsIHNheSBgcGF0Y2hlcy5tYm94YCwgdGhlbiBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYW0gLTMgcGF0Y2hlcy5tYm94CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dpdCB3aWxsIGFwcGx5IGVhY2ggcGF0Y2ggaW4gb3JkZXI7IGlmIGFueSBjb25mbGljdHMgYXJlIGZvdW5kLCBpdAord2lsbCBzdG9wLCBhbmQgeW91IGNhbiBmaXggdGhlIGNvbmZsaWN0cyBhcyBkZXNjcmliZWQgaW4KKyI8PHJlc29sdmluZy1hLW1lcmdlLFJlc29sdmluZyBhIG1lcmdlPj4iLiAgKFRoZSBgLTNgIG9wdGlvbiB0ZWxscworR2l0IHRvIHBlcmZvcm0gYSBtZXJnZTsgaWYgeW91IHdvdWxkIHByZWZlciBpdCBqdXN0IHRvIGFib3J0IGFuZAorbGVhdmUgeW91ciB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQsIHlvdSBtYXkgb21pdCB0aGF0IG9wdGlvbi4pCisKK09uY2UgdGhlIGluZGV4IGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgY29uZmxpY3QKK3Jlc29sdXRpb24sIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgY29tbWl0LCBqdXN0IHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBhbSAtLWNvbnRpbnVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBHaXQgd2lsbCBjcmVhdGUgdGhlIGNvbW1pdCBmb3IgeW91IGFuZCBjb250aW51ZSBhcHBseWluZyB0aGUKK3JlbWFpbmluZyBwYXRjaGVzIGZyb20gdGhlIG1haWxib3guCisKK1RoZSBmaW5hbCByZXN1bHQgd2lsbCBiZSBhIHNlcmllcyBvZiBjb21taXRzLCBvbmUgZm9yIGVhY2ggcGF0Y2ggaW4KK3RoZSBvcmlnaW5hbCBtYWlsYm94LCB3aXRoIGF1dGhvcnNoaXAgYW5kIGNvbW1pdCBsb2cgbWVzc2FnZSBlYWNoCit0YWtlbiBmcm9tIHRoZSBtZXNzYWdlIGNvbnRhaW5pbmcgZWFjaCBwYXRjaC4KKworW1twdWJsaWMtcmVwb3NpdG9yaWVzXV0KK1B1YmxpYyBHaXQgcmVwb3NpdG9yaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbm90aGVyIHdheSB0byBzdWJtaXQgY2hhbmdlcyB0byBhIHByb2plY3QgaXMgdG8gdGVsbCB0aGUgbWFpbnRhaW5lcgorb2YgdGhhdCBwcm9qZWN0IHRvIHB1bGwgdGhlIGNoYW5nZXMgZnJvbSB5b3VyIHJlcG9zaXRvcnkgdXNpbmcKK2xpbmtnaXQ6Z2l0LXB1bGxbMV0uICBJbiB0aGUgc2VjdGlvbiAiPDxnZXR0aW5nLXVwZGF0ZXMtV2l0aC1naXQtcHVsbCwKK0dldHRpbmcgdXBkYXRlcyB3aXRoIGBnaXQgcHVsbGA+PiIgd2UgZGVzY3JpYmVkIHRoaXMgYXMgYSB3YXkgdG8gZ2V0Cit1cGRhdGVzIGZyb20gdGhlICJtYWluIiByZXBvc2l0b3J5LCBidXQgaXQgd29ya3MganVzdCBhcyB3ZWxsIGluIHRoZQorb3RoZXIgZGlyZWN0aW9uLgorCitJZiB5b3UgYW5kIHRoZSBtYWludGFpbmVyIGJvdGggaGF2ZSBhY2NvdW50cyBvbiB0aGUgc2FtZSBtYWNoaW5lLCB0aGVuCit5b3UgY2FuIGp1c3QgcHVsbCBjaGFuZ2VzIGZyb20gZWFjaCBvdGhlcidzIHJlcG9zaXRvcmllcyBkaXJlY3RseTsKK2NvbW1hbmRzIHRoYXQgYWNjZXB0IHJlcG9zaXRvcnkgVVJMcyBhcyBhcmd1bWVudHMgd2lsbCBhbHNvIGFjY2VwdCBhCitsb2NhbCBkaXJlY3RvcnkgbmFtZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgL3BhdGgvdG8vcmVwb3NpdG9yeQorJCBnaXQgcHVsbCAvcGF0aC90by9vdGhlci9yZXBvc2l0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK29yIGFuIHNzaCBVUkw6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIHNzaDovL3lvdXJob3N0L355b3UvcmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgcHJvamVjdHMgd2l0aCBmZXcgZGV2ZWxvcGVycywgb3IgZm9yIHN5bmNocm9uaXppbmcgYSBmZXcgcHJpdmF0ZQorcmVwb3NpdG9yaWVzLCB0aGlzIG1heSBiZSBhbGwgeW91IG5lZWQuCisKK0hvd2V2ZXIsIHRoZSBtb3JlIGNvbW1vbiB3YXkgdG8gZG8gdGhpcyBpcyB0byBtYWludGFpbiBhIHNlcGFyYXRlIHB1YmxpYworcmVwb3NpdG9yeSAodXN1YWxseSBvbiBhIGRpZmZlcmVudCBob3N0KSBmb3Igb3RoZXJzIHRvIHB1bGwgY2hhbmdlcworZnJvbS4gIFRoaXMgaXMgdXN1YWxseSBtb3JlIGNvbnZlbmllbnQsIGFuZCBhbGxvd3MgeW91IHRvIGNsZWFubHkKK3NlcGFyYXRlIHByaXZhdGUgd29yayBpbiBwcm9ncmVzcyBmcm9tIHB1YmxpY2x5IHZpc2libGUgd29yay4KKworWW91IHdpbGwgY29udGludWUgdG8gZG8geW91ciBkYXktdG8tZGF5IHdvcmsgaW4geW91ciBwZXJzb25hbAorcmVwb3NpdG9yeSwgYnV0IHBlcmlvZGljYWxseSAicHVzaCIgY2hhbmdlcyBmcm9tIHlvdXIgcGVyc29uYWwKK3JlcG9zaXRvcnkgaW50byB5b3VyIHB1YmxpYyByZXBvc2l0b3J5LCBhbGxvd2luZyBvdGhlciBkZXZlbG9wZXJzIHRvCitwdWxsIGZyb20gdGhhdCByZXBvc2l0b3J5LiAgU28gdGhlIGZsb3cgb2YgY2hhbmdlcywgaW4gYSBzaXR1YXRpb24KK3doZXJlIHRoZXJlIGlzIG9uZSBvdGhlciBkZXZlbG9wZXIgd2l0aCBhIHB1YmxpYyByZXBvc2l0b3J5LCBsb29rcworbGlrZSB0aGlzOgorCisgICAgICAgICAgICAgICAgICAgICAgICB5b3UgcHVzaAorICB5b3VyIHBlcnNvbmFsIHJlcG8gLS0tLS0tLS0tLS0tLS0tLS0tPiB5b3VyIHB1YmxpYyByZXBvCisJXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJfCB5b3UgcHVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZXkgcHVsbAorCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCXwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICB8ICAgICAgICAgICAgICAgdGhleSBwdXNoICAgICAgICAgICAgIFYKKyAgdGhlaXIgcHVibGljIHJlcG8gPC0tLS0tLS0tLS0tLS0tLS0tLS0gdGhlaXIgcmVwbworCitXZSBleHBsYWluIGhvdyB0byBkbyB0aGlzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCisKK1tbc2V0dGluZy11cC1hLXB1YmxpYy1yZXBvc2l0b3J5XV0KK1NldHRpbmcgdXAgYSBwdWJsaWMgcmVwb3NpdG9yeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0Fzc3VtZSB5b3VyIHBlcnNvbmFsIHJlcG9zaXRvcnkgaXMgaW4gdGhlIGRpcmVjdG9yeSBgfi9wcm9qYC4gIFdlCitmaXJzdCBjcmVhdGUgYSBuZXcgY2xvbmUgb2YgdGhlIHJlcG9zaXRvcnkgYW5kIHRlbGwgYGdpdCBkYWVtb25gIHRoYXQgaXQKK2lzIG1lYW50IHRvIGJlIHB1YmxpYzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgLS1iYXJlIH4vcHJvaiBwcm9qLmdpdAorJCB0b3VjaCBwcm9qLmdpdC9naXQtZGFlbW9uLWV4cG9ydC1vaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmVzdWx0aW5nIGRpcmVjdG9yeSBwcm9qLmdpdCBjb250YWlucyBhICJiYXJlIiBnaXQgcmVwb3NpdG9yeS0taXQgaXMKK2p1c3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBgLmdpdGAgZGlyZWN0b3J5LCB3aXRob3V0IGFueSBmaWxlcyBjaGVja2VkIG91dAorYXJvdW5kIGl0LgorCitOZXh0LCBjb3B5IGBwcm9qLmdpdGAgdG8gdGhlIHNlcnZlciB3aGVyZSB5b3UgcGxhbiB0byBob3N0IHRoZQorcHVibGljIHJlcG9zaXRvcnkuICBZb3UgY2FuIHVzZSBzY3AsIHJzeW5jLCBvciB3aGF0ZXZlciBpcyBtb3N0Citjb252ZW5pZW50LgorCitbW2V4cG9ydGluZy12aWEtZ2l0XV0KK0V4cG9ydGluZyBhIEdpdCByZXBvc2l0b3J5IHZpYSB0aGUgR2l0IHByb3RvY29sCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGlzIGlzIHRoZSBwcmVmZXJyZWQgbWV0aG9kLgorCitJZiBzb21lb25lIGVsc2UgYWRtaW5pc3RlcnMgdGhlIHNlcnZlciwgdGhleSBzaG91bGQgdGVsbCB5b3Ugd2hhdAorZGlyZWN0b3J5IHRvIHB1dCB0aGUgcmVwb3NpdG9yeSBpbiwgYW5kIHdoYXQgYGdpdDovL2AgVVJMIGl0IHdpbGwKK2FwcGVhciBhdC4gIFlvdSBjYW4gdGhlbiBza2lwIHRvIHRoZSBzZWN0aW9uCisiPDxwdXNoaW5nLWNoYW5nZXMtdG8tYS1wdWJsaWMtcmVwb3NpdG9yeSxQdXNoaW5nIGNoYW5nZXMgdG8gYSBwdWJsaWMKK3JlcG9zaXRvcnk+PiIsIGJlbG93LgorCitPdGhlcndpc2UsIGFsbCB5b3UgbmVlZCB0byBkbyBpcyBzdGFydCBsaW5rZ2l0OmdpdC1kYWVtb25bMV07IGl0IHdpbGwKK2xpc3RlbiBvbiBwb3J0IDk0MTguICBCeSBkZWZhdWx0LCBpdCB3aWxsIGFsbG93IGFjY2VzcyB0byBhbnkgZGlyZWN0b3J5Cit0aGF0IGxvb2tzIGxpa2UgYSBHaXQgZGlyZWN0b3J5IGFuZCBjb250YWlucyB0aGUgbWFnaWMgZmlsZQorZ2l0LWRhZW1vbi1leHBvcnQtb2suICBQYXNzaW5nIHNvbWUgZGlyZWN0b3J5IHBhdGhzIGFzIGBnaXQgZGFlbW9uYAorYXJndW1lbnRzIHdpbGwgZnVydGhlciByZXN0cmljdCB0aGUgZXhwb3J0cyB0byB0aG9zZSBwYXRocy4KKworWW91IGNhbiBhbHNvIHJ1biBgZ2l0IGRhZW1vbmAgYXMgYW4gaW5ldGQgc2VydmljZTsgc2VlIHRoZQorbGlua2dpdDpnaXQtZGFlbW9uWzFdIG1hbiBwYWdlIGZvciBkZXRhaWxzLiAgKFNlZSBlc3BlY2lhbGx5IHRoZQorZXhhbXBsZXMgc2VjdGlvbi4pCisKK1tbZXhwb3J0aW5nLXZpYS1odHRwXV0KK0V4cG9ydGluZyBhIGdpdCByZXBvc2l0b3J5IHZpYSBIVFRQCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgR2l0IHByb3RvY29sIGdpdmVzIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgcmVsaWFiaWxpdHksIGJ1dCBvbiBhCitob3N0IHdpdGggYSB3ZWIgc2VydmVyIHNldCB1cCwgSFRUUCBleHBvcnRzIG1heSBiZSBzaW1wbGVyIHRvIHNldCB1cC4KKworQWxsIHlvdSBuZWVkIHRvIGRvIGlzIHBsYWNlIHRoZSBuZXdseSBjcmVhdGVkIGJhcmUgR2l0IHJlcG9zaXRvcnkgaW4KK2EgZGlyZWN0b3J5IHRoYXQgaXMgZXhwb3J0ZWQgYnkgdGhlIHdlYiBzZXJ2ZXIsIGFuZCBtYWtlIHNvbWUKK2FkanVzdG1lbnRzIHRvIGdpdmUgd2ViIGNsaWVudHMgc29tZSBleHRyYSBpbmZvcm1hdGlvbiB0aGV5IG5lZWQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbXYgcHJvai5naXQgL2hvbWUveW91L3B1YmxpY19odG1sL3Byb2ouZ2l0CiskIGNkIHByb2ouZ2l0CiskIGdpdCAtLWJhcmUgdXBkYXRlLXNlcnZlci1pbmZvCiskIG12IGhvb2tzL3Bvc3QtdXBkYXRlLnNhbXBsZSBob29rcy9wb3N0LXVwZGF0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBsYXN0IHR3byBsaW5lcywgc2VlCitsaW5rZ2l0OmdpdC11cGRhdGUtc2VydmVyLWluZm9bMV0gYW5kIGxpbmtnaXQ6Z2l0aG9va3NbNV0uKQorCitBZHZlcnRpc2UgdGhlIFVSTCBvZiBgcHJvai5naXRgLiAgQW55Ym9keSBlbHNlIHNob3VsZCB0aGVuIGJlIGFibGUgdG8KK2Nsb25lIG9yIHB1bGwgZnJvbSB0aGF0IFVSTCwgZm9yIGV4YW1wbGUgd2l0aCBhIGNvbW1hbmQgbGluZSBsaWtlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjbG9uZSBodHRwOi8veW91cnNlcnZlci5jb20vfnlvdS9wcm9qLmdpdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoU2VlIGFsc28KK2xpbms6aG93dG8vc2V0dXAtZ2l0LXNlcnZlci1vdmVyLWh0dHAuaHRtbFtzZXR1cC1naXQtc2VydmVyLW92ZXItaHR0cF0KK2ZvciBhIHNsaWdodGx5IG1vcmUgc29waGlzdGljYXRlZCBzZXR1cCB1c2luZyBXZWJEQVYgd2hpY2ggYWxzbworYWxsb3dzIHB1c2hpbmcgb3ZlciBIVFRQLikKKworW1twdXNoaW5nLWNoYW5nZXMtdG8tYS1wdWJsaWMtcmVwb3NpdG9yeV1dCitQdXNoaW5nIGNoYW5nZXMgdG8gYSBwdWJsaWMgcmVwb3NpdG9yeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworTm90ZSB0aGF0IHRoZSB0d28gdGVjaG5pcXVlcyBvdXRsaW5lZCBhYm92ZSAoZXhwb3J0aW5nIHZpYQorPDxleHBvcnRpbmctdmlhLWh0dHAsaHR0cD4+IG9yIDw8ZXhwb3J0aW5nLXZpYS1naXQsZ2l0Pj4pIGFsbG93IG90aGVyCittYWludGFpbmVycyB0byBmZXRjaCB5b3VyIGxhdGVzdCBjaGFuZ2VzLCBidXQgdGhleSBkbyBub3QgYWxsb3cgd3JpdGUKK2FjY2Vzcywgd2hpY2ggeW91IHdpbGwgbmVlZCB0byB1cGRhdGUgdGhlIHB1YmxpYyByZXBvc2l0b3J5IHdpdGggdGhlCitsYXRlc3QgY2hhbmdlcyBjcmVhdGVkIGluIHlvdXIgcHJpdmF0ZSByZXBvc2l0b3J5LgorCitUaGUgc2ltcGxlc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdXNpbmcgbGlua2dpdDpnaXQtcHVzaFsxXSBhbmQgc3NoOyB0bwordXBkYXRlIHRoZSByZW1vdGUgYnJhbmNoIG5hbWVkIGBtYXN0ZXJgIHdpdGggdGhlIGxhdGVzdCBzdGF0ZSBvZiB5b3VyCiticmFuY2ggbmFtZWQgYG1hc3RlcmAsIHJ1bgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIHNzaDovL3lvdXJzZXJ2ZXIuY29tL355b3UvcHJvai5naXQgbWFzdGVyOm1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciBqdXN0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggc3NoOi8veW91cnNlcnZlci5jb20vfnlvdS9wcm9qLmdpdCBtYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgd2l0aCBgZ2l0IGZldGNoYCwgYGdpdCBwdXNoYCB3aWxsIGNvbXBsYWluIGlmIHRoaXMgZG9lcyBub3QgcmVzdWx0IGluIGEKKzw8ZmFzdC1mb3J3YXJkcyxmYXN0LWZvcndhcmQ+Pjsgc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBmb3IgZGV0YWlscyBvbgoraGFuZGxpbmcgdGhpcyBjYXNlLgorCitOb3RlIHRoYXQgdGhlIHRhcmdldCBvZiBhIGBwdXNoYCBpcyBub3JtYWxseSBhCis8PGRlZl9iYXJlX3JlcG9zaXRvcnksYmFyZT4+IHJlcG9zaXRvcnkuICBZb3UgY2FuIGFsc28gcHVzaCB0byBhCityZXBvc2l0b3J5IHRoYXQgaGFzIGEgY2hlY2tlZC1vdXQgd29ya2luZyB0cmVlLCBidXQgYSBwdXNoIHRvIHVwZGF0ZSB0aGUKK2N1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2ggaXMgZGVuaWVkIGJ5IGRlZmF1bHQgdG8gcHJldmVudCBjb25mdXNpb24uCitTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIG9wdGlvbgoraW4gbGlua2dpdDpnaXQtY29uZmlnWzFdIGZvciBkZXRhaWxzLgorCitBcyB3aXRoIGBnaXQgZmV0Y2hgLCB5b3UgbWF5IGFsc28gc2V0IHVwIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0bworc2F2ZSB0eXBpbmc7IHNvLCBmb3IgZXhhbXBsZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVtb3RlIGFkZCBwdWJsaWMtcmVwbyBzc2g6Ly95b3Vyc2VydmVyLmNvbS9+eW91L3Byb2ouZ2l0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FkZHMgdGhlIGZvbGxvd2luZyB0byBgLmdpdC9jb25maWdgOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbcmVtb3RlICJwdWJsaWMtcmVwbyJdCisJdXJsID0geW91cnNlcnZlci5jb206cHJvai5naXQKKwlmZXRjaCA9ICtyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2V4YW1wbGUvKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCBsZXRzIHlvdSBkbyB0aGUgc2FtZSBwdXNoIHdpdGgganVzdAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIHB1YmxpYy1yZXBvIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWUgdGhlIGV4cGxhbmF0aW9ucyBvZiB0aGUgYHJlbW90ZS48bmFtZT4udXJsYCwKK2BicmFuY2guPG5hbWU+LnJlbW90ZWAsIGFuZCBgcmVtb3RlLjxuYW1lPi5wdXNoYCBvcHRpb25zIGluCitsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIGRldGFpbHMuCisKK1tbZm9yY2luZy1wdXNoXV0KK1doYXQgdG8gZG8gd2hlbiBhIHB1c2ggZmFpbHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworSWYgYSBwdXNoIHdvdWxkIG5vdCByZXN1bHQgaW4gYSA8PGZhc3QtZm9yd2FyZHMsZmFzdC1mb3J3YXJkPj4gb2YgdGhlCityZW1vdGUgYnJhbmNoLCB0aGVuIGl0IHdpbGwgZmFpbCB3aXRoIGFuIGVycm9yIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Vycm9yOiByZW1vdGUgJ3JlZnMvaGVhZHMvbWFzdGVyJyBpcyBub3QgYW4gYW5jZXN0b3Igb2YKKyBsb2NhbCAgJ3JlZnMvaGVhZHMvbWFzdGVyJy4KKyBNYXliZSB5b3UgYXJlIG5vdCB1cC10by1kYXRlIGFuZCBuZWVkIHRvIHB1bGwgZmlyc3Q/CitlcnJvcjogZmFpbGVkIHRvIHB1c2ggdG8gJ3NzaDovL3lvdXJzZXJ2ZXIuY29tL355b3UvcHJvai5naXQnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgY2FuIGhhcHBlbiwgZm9yIGV4YW1wbGUsIGlmIHlvdToKKworCS0gdXNlIGBnaXQgcmVzZXQgLS1oYXJkYCB0byByZW1vdmUgYWxyZWFkeS1wdWJsaXNoZWQgY29tbWl0cywgb3IKKwktIHVzZSBgZ2l0IGNvbW1pdCAtLWFtZW5kYCB0byByZXBsYWNlIGFscmVhZHktcHVibGlzaGVkIGNvbW1pdHMKKwkgIChhcyBpbiA8PGZpeGluZy1hLW1pc3Rha2UtYnktcmV3cml0aW5nLWhpc3Rvcnk+PiksIG9yCisJLSB1c2UgYGdpdCByZWJhc2VgIHRvIHJlYmFzZSBhbnkgYWxyZWFkeS1wdWJsaXNoZWQgY29tbWl0cyAoYXMKKwkgIGluIDw8dXNpbmctZ2l0LXJlYmFzZT4+KS4KKworWW91IG1heSBmb3JjZSBgZ2l0IHB1c2hgIHRvIHBlcmZvcm0gdGhlIHVwZGF0ZSBhbnl3YXkgYnkgcHJlY2VkaW5nIHRoZQorYnJhbmNoIG5hbWUgd2l0aCBhIHBsdXMgc2lnbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcHVzaCBzc2g6Ly95b3Vyc2VydmVyLmNvbS9+eW91L3Byb2ouZ2l0ICttYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGUgYWRkaXRpb24gb2YgdGhlIGArYCBzaWduLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlCitgLWZgIGZsYWcgdG8gZm9yY2UgdGhlIHJlbW90ZSB1cGRhdGUsIGFzIGluOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIC1mIHNzaDovL3lvdXJzZXJ2ZXIuY29tL355b3UvcHJvai5naXQgbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vcm1hbGx5IHdoZW5ldmVyIGEgYnJhbmNoIGhlYWQgaW4gYSBwdWJsaWMgcmVwb3NpdG9yeSBpcyBtb2RpZmllZCwgaXQKK2lzIG1vZGlmaWVkIHRvIHBvaW50IHRvIGEgZGVzY2VuZGFudCBvZiB0aGUgY29tbWl0IHRoYXQgaXQgcG9pbnRlZCB0bworYmVmb3JlLiAgQnkgZm9yY2luZyBhIHB1c2ggaW4gdGhpcyBzaXR1YXRpb24sIHlvdSBicmVhayB0aGF0IGNvbnZlbnRpb24uCisoU2VlIDw8cHJvYmxlbXMtV2l0aC1yZXdyaXRpbmctaGlzdG9yeT4+LikKKworTmV2ZXJ0aGVsZXNzLCB0aGlzIGlzIGEgY29tbW9uIHByYWN0aWNlIGZvciBwZW9wbGUgdGhhdCBuZWVkIGEgc2ltcGxlCit3YXkgdG8gcHVibGlzaCBhIHdvcmstaW4tcHJvZ3Jlc3MgcGF0Y2ggc2VyaWVzLCBhbmQgaXQgaXMgYW4gYWNjZXB0YWJsZQorY29tcHJvbWlzZSBhcyBsb25nIGFzIHlvdSB3YXJuIG90aGVyIGRldmVsb3BlcnMgdGhhdCB0aGlzIGlzIGhvdyB5b3UKK2ludGVuZCB0byBtYW5hZ2UgdGhlIGJyYW5jaC4KKworSXQncyBhbHNvIHBvc3NpYmxlIGZvciBhIHB1c2ggdG8gZmFpbCBpbiB0aGlzIHdheSB3aGVuIG90aGVyIHBlb3BsZSBoYXZlCit0aGUgcmlnaHQgdG8gcHVzaCB0byB0aGUgc2FtZSByZXBvc2l0b3J5LiAgSW4gdGhhdCBjYXNlLCB0aGUgY29ycmVjdAorc29sdXRpb24gaXMgdG8gcmV0cnkgdGhlIHB1c2ggYWZ0ZXIgZmlyc3QgdXBkYXRpbmcgeW91ciB3b3JrOiBlaXRoZXIgYnkgYQorcHVsbCwgb3IgYnkgYSBmZXRjaCBmb2xsb3dlZCBieSBhIHJlYmFzZTsgc2VlIHRoZQorPDxzZXR0aW5nLXVwLWEtc2hhcmVkLXJlcG9zaXRvcnksbmV4dCBzZWN0aW9uPj4gYW5kCitsaW5rZ2l0OmdpdGN2cy1taWdyYXRpb25bN10gZm9yIG1vcmUuCisKK1tbc2V0dGluZy11cC1hLXNoYXJlZC1yZXBvc2l0b3J5XV0KK1NldHRpbmcgdXAgYSBzaGFyZWQgcmVwb3NpdG9yeQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0Fub3RoZXIgd2F5IHRvIGNvbGxhYm9yYXRlIGlzIGJ5IHVzaW5nIGEgbW9kZWwgc2ltaWxhciB0byB0aGF0Citjb21tb25seSB1c2VkIGluIENWUywgd2hlcmUgc2V2ZXJhbCBkZXZlbG9wZXJzIHdpdGggc3BlY2lhbCByaWdodHMKK2FsbCBwdXNoIHRvIGFuZCBwdWxsIGZyb20gYSBzaW5nbGUgc2hhcmVkIHJlcG9zaXRvcnkuICBTZWUKK2xpbmtnaXQ6Z2l0Y3ZzLW1pZ3JhdGlvbls3XSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworc2V0IHRoaXMgdXAuCisKK0hvd2V2ZXIsIHdoaWxlIHRoZXJlIGlzIG5vdGhpbmcgd3Jvbmcgd2l0aCBHaXQncyBzdXBwb3J0IGZvciBzaGFyZWQKK3JlcG9zaXRvcmllcywgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbiBpcyBub3QgZ2VuZXJhbGx5IHJlY29tbWVuZGVkLAorc2ltcGx5IGJlY2F1c2UgdGhlIG1vZGUgb2YgY29sbGFib3JhdGlvbiB0aGF0IEdpdCBzdXBwb3J0cy0tYnkKK2V4Y2hhbmdpbmcgcGF0Y2hlcyBhbmQgcHVsbGluZyBmcm9tIHB1YmxpYyByZXBvc2l0b3JpZXMtLWhhcyBzbyBtYW55CithZHZhbnRhZ2VzIG92ZXIgdGhlIGNlbnRyYWwgc2hhcmVkIHJlcG9zaXRvcnk6CisKKwktIEdpdCdzIGFiaWxpdHkgdG8gcXVpY2tseSBpbXBvcnQgYW5kIG1lcmdlIHBhdGNoZXMgYWxsb3dzIGEKKwkgIHNpbmdsZSBtYWludGFpbmVyIHRvIHByb2Nlc3MgaW5jb21pbmcgY2hhbmdlcyBldmVuIGF0IHZlcnkKKwkgIGhpZ2ggcmF0ZXMuICBBbmQgd2hlbiB0aGF0IGJlY29tZXMgdG9vIG11Y2gsIGBnaXQgcHVsbGAgcHJvdmlkZXMKKwkgIGFuIGVhc3kgd2F5IGZvciB0aGF0IG1haW50YWluZXIgdG8gZGVsZWdhdGUgdGhpcyBqb2IgdG8gb3RoZXIKKwkgIG1haW50YWluZXJzIHdoaWxlIHN0aWxsIGFsbG93aW5nIG9wdGlvbmFsIHJldmlldyBvZiBpbmNvbWluZworCSAgY2hhbmdlcy4KKwktIFNpbmNlIGV2ZXJ5IGRldmVsb3BlcidzIHJlcG9zaXRvcnkgaGFzIHRoZSBzYW1lIGNvbXBsZXRlIGNvcHkKKwkgIG9mIHRoZSBwcm9qZWN0IGhpc3RvcnksIG5vIHJlcG9zaXRvcnkgaXMgc3BlY2lhbCwgYW5kIGl0IGlzCisJICB0cml2aWFsIGZvciBhbm90aGVyIGRldmVsb3BlciB0byB0YWtlIG92ZXIgbWFpbnRlbmFuY2Ugb2YgYQorCSAgcHJvamVjdCwgZWl0aGVyIGJ5IG11dHVhbCBhZ3JlZW1lbnQsIG9yIGJlY2F1c2UgYSBtYWludGFpbmVyCisJICBiZWNvbWVzIHVucmVzcG9uc2l2ZSBvciBkaWZmaWN1bHQgdG8gd29yayB3aXRoLgorCS0gVGhlIGxhY2sgb2YgYSBjZW50cmFsIGdyb3VwIG9mICJjb21taXR0ZXJzIiBtZWFucyB0aGVyZSBpcworCSAgbGVzcyBuZWVkIGZvciBmb3JtYWwgZGVjaXNpb25zIGFib3V0IHdobyBpcyAiaW4iIGFuZCB3aG8gaXMKKwkgICJvdXQiLgorCitbW3NldHRpbmctdXAtZ2l0d2ViXV0KK0FsbG93aW5nIHdlYiBicm93c2luZyBvZiBhIHJlcG9zaXRvcnkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGdpdHdlYiBjZ2kgc2NyaXB0IHByb3ZpZGVzIHVzZXJzIGFuIGVhc3kgd2F5IHRvIGJyb3dzZSB5b3VyCitwcm9qZWN0J3MgZmlsZXMgYW5kIGhpc3Rvcnkgd2l0aG91dCBoYXZpbmcgdG8gaW5zdGFsbCBHaXQ7IHNlZSB0aGUgZmlsZQorZ2l0d2ViL0lOU1RBTEwgaW4gdGhlIEdpdCBzb3VyY2UgdHJlZSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIHNldHRpbmcgaXQgdXAuCisKK1tbc2hhcmluZy1kZXZlbG9wbWVudC1leGFtcGxlc11dCitFeGFtcGxlcworLS0tLS0tLS0KKworW1ttYWludGFpbmluZy10b3BpYy1icmFuY2hlc11dCitNYWludGFpbmluZyB0b3BpYyBicmFuY2hlcyBmb3IgYSBMaW51eCBzdWJzeXN0ZW0gbWFpbnRhaW5lcgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhpcyBkZXNjcmliZXMgaG93IFRvbnkgTHVjayB1c2VzIEdpdCBpbiBoaXMgcm9sZSBhcyBtYWludGFpbmVyIG9mIHRoZQorSUE2NCBhcmNoaXRlY3R1cmUgZm9yIHRoZSBMaW51eCBrZXJuZWwuCisKK0hlIHVzZXMgdHdvIHB1YmxpYyBicmFuY2hlczoKKworIC0gQSAidGVzdCIgdHJlZSBpbnRvIHdoaWNoIHBhdGNoZXMgYXJlIGluaXRpYWxseSBwbGFjZWQgc28gdGhhdCB0aGV5CisgICBjYW4gZ2V0IHNvbWUgZXhwb3N1cmUgd2hlbiBpbnRlZ3JhdGVkIHdpdGggb3RoZXIgb25nb2luZyBkZXZlbG9wbWVudC4KKyAgIFRoaXMgdHJlZSBpcyBhdmFpbGFibGUgdG8gQW5kcmV3IGZvciBwdWxsaW5nIGludG8gLW1tIHdoZW5ldmVyIGhlCisgICB3YW50cy4KKworIC0gQSAicmVsZWFzZSIgdHJlZSBpbnRvIHdoaWNoIHRlc3RlZCBwYXRjaGVzIGFyZSBtb3ZlZCBmb3IgZmluYWwgc2FuaXR5CisgICBjaGVja2luZywgYW5kIGFzIGEgdmVoaWNsZSB0byBzZW5kIHRoZW0gdXBzdHJlYW0gdG8gTGludXMgKGJ5IHNlbmRpbmcKKyAgIGhpbSBhICJwbGVhc2UgcHVsbCIgcmVxdWVzdC4pCisKK0hlIGFsc28gdXNlcyBhIHNldCBvZiB0ZW1wb3JhcnkgYnJhbmNoZXMgKCJ0b3BpYyBicmFuY2hlcyIpLCBlYWNoCitjb250YWluaW5nIGEgbG9naWNhbCBncm91cGluZyBvZiBwYXRjaGVzLgorCitUbyBzZXQgdGhpcyB1cCwgZmlyc3QgY3JlYXRlIHlvdXIgd29yayB0cmVlIGJ5IGNsb25pbmcgTGludXMncyBwdWJsaWMKK3RyZWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNsb25lIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQgd29yaworJCBjZCB3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xpbnVzJ3MgdHJlZSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBuYW1lZCBvcmlnaW4vbWFzdGVyLAorYW5kIGNhbiBiZSB1cGRhdGVkIHVzaW5nIGxpbmtnaXQ6Z2l0LWZldGNoWzFdOyB5b3UgY2FuIHRyYWNrIG90aGVyCitwdWJsaWMgdHJlZXMgdXNpbmcgbGlua2dpdDpnaXQtcmVtb3RlWzFdIHRvIHNldCB1cCBhICJyZW1vdGUiIGFuZAorbGlua2dpdDpnaXQtZmV0Y2hbMV0gdG8ga2VlcCB0aGVtIHVwLXRvLWRhdGU7IHNlZQorPDxyZXBvc2l0b3JpZXMtYW5kLWJyYW5jaGVzPj4uCisKK05vdyBjcmVhdGUgdGhlIGJyYW5jaGVzIGluIHdoaWNoIHlvdSBhcmUgZ29pbmcgdG8gd29yazsgdGhlc2Ugc3RhcnQgb3V0CithdCB0aGUgY3VycmVudCB0aXAgb2Ygb3JpZ2luL21hc3RlciBicmFuY2gsIGFuZCBzaG91bGQgYmUgc2V0IHVwICh1c2luZwordGhlIGAtLXRyYWNrYCBvcHRpb24gdG8gbGlua2dpdDpnaXQtYnJhbmNoWzFdKSB0byBtZXJnZSBjaGFuZ2VzIGluIGZyb20KK0xpbnVzIGJ5IGRlZmF1bHQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCAtLXRyYWNrIHRlc3Qgb3JpZ2luL21hc3RlcgorJCBnaXQgYnJhbmNoIC0tdHJhY2sgcmVsZWFzZSBvcmlnaW4vbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNhbiBiZSBlYXNpbHkga2VwdCB1cCB0byBkYXRlIHVzaW5nIGxpbmtnaXQ6Z2l0LXB1bGxbMV0uCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IHRlc3QgJiYgZ2l0IHB1bGwKKyQgZ2l0IGNoZWNrb3V0IHJlbGVhc2UgJiYgZ2l0IHB1bGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW1wb3J0YW50IG5vdGUhICBJZiB5b3UgaGF2ZSBhbnkgbG9jYWwgY2hhbmdlcyBpbiB0aGVzZSBicmFuY2hlcywgdGhlbgordGhpcyBtZXJnZSB3aWxsIGNyZWF0ZSBhIGNvbW1pdCBvYmplY3QgaW4gdGhlIGhpc3RvcnkgKHdpdGggbm8gbG9jYWwKK2NoYW5nZXMgR2l0IHdpbGwgc2ltcGx5IGRvIGEgImZhc3QtZm9yd2FyZCIgbWVyZ2UpLiAgTWFueSBwZW9wbGUgZGlzbGlrZQordGhlICJub2lzZSIgdGhhdCB0aGlzIGNyZWF0ZXMgaW4gdGhlIExpbnV4IGhpc3RvcnksIHNvIHlvdSBzaG91bGQgYXZvaWQKK2RvaW5nIHRoaXMgY2FwcmljaW91c2x5IGluIHRoZSBgcmVsZWFzZWAgYnJhbmNoLCBhcyB0aGVzZSBub2lzeSBjb21taXRzCit3aWxsIGJlY29tZSBwYXJ0IG9mIHRoZSBwZXJtYW5lbnQgaGlzdG9yeSB3aGVuIHlvdSBhc2sgTGludXMgdG8gcHVsbAorZnJvbSB0aGUgcmVsZWFzZSBicmFuY2guCisKK0EgZmV3IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIChzZWUgbGlua2dpdDpnaXQtY29uZmlnWzFdKSBjYW4KK21ha2UgaXQgZWFzeSB0byBwdXNoIGJvdGggYnJhbmNoZXMgdG8geW91ciBwdWJsaWMgdHJlZS4gIChTZWUKKzw8c2V0dGluZy11cC1hLXB1YmxpYy1yZXBvc2l0b3J5Pj4uKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNhdCA+PiAuZ2l0L2NvbmZpZyA8PEVPRgorW3JlbW90ZSAibXl0cmVlIl0KKwl1cmwgPSAgbWFzdGVyLmtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9hZWdsL2xpbnV4LmdpdAorCXB1c2ggPSByZWxlYXNlCisJcHVzaCA9IHRlc3QKK0VPRgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVuIHlvdSBjYW4gcHVzaCBib3RoIHRoZSB0ZXN0IGFuZCByZWxlYXNlIHRyZWVzIHVzaW5nCitsaW5rZ2l0OmdpdC1wdXNoWzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIG15dHJlZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvciBwdXNoIGp1c3Qgb25lIG9mIHRoZSB0ZXN0IGFuZCByZWxlYXNlIGJyYW5jaGVzIHVzaW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIG15dHJlZSB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK29yCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggbXl0cmVlIHJlbGVhc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm93IHRvIGFwcGx5IHNvbWUgcGF0Y2hlcyBmcm9tIHRoZSBjb21tdW5pdHkuICBUaGluayBvZiBhIHNob3J0CitzbmFwcHkgbmFtZSBmb3IgYSBicmFuY2ggdG8gaG9sZCB0aGlzIHBhdGNoIChvciByZWxhdGVkIGdyb3VwIG9mCitwYXRjaGVzKSwgYW5kIGNyZWF0ZSBhIG5ldyBicmFuY2ggZnJvbSBhIHJlY2VudCBzdGFibGUgdGFnIG9mCitMaW51cydzIGJyYW5jaC4gUGlja2luZyBhIHN0YWJsZSBiYXNlIGZvciB5b3VyIGJyYW5jaCB3aWxsOgorMSkgaGVscCB5b3U6IGJ5IGF2b2lkaW5nIGluY2x1c2lvbiBvZiB1bnJlbGF0ZWQgYW5kIHBlcmhhcHMgbGlnaHRseQordGVzdGVkIGNoYW5nZXMKKzIpIGhlbHAgZnV0dXJlIGJ1ZyBodW50ZXJzIHRoYXQgdXNlIGBnaXQgYmlzZWN0YCB0byBmaW5kIHByb2JsZW1zCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IC1iIHNwZWVkLXVwLXNwaW5sb2NrcyB2Mi42LjM1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdyB5b3UgYXBwbHkgdGhlIHBhdGNoKGVzKSwgcnVuIHNvbWUgdGVzdHMsIGFuZCBjb21taXQgdGhlIGNoYW5nZShzKS4gIElmCit0aGUgcGF0Y2ggaXMgYSBtdWx0aS1wYXJ0IHNlcmllcywgdGhlbiB5b3Ugc2hvdWxkIGFwcGx5IGVhY2ggYXMgYSBzZXBhcmF0ZQorY29tbWl0IHRvIHRoaXMgYnJhbmNoLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIC4uLiBwYXRjaCAuLi4gdGVzdCAgLi4uIGNvbW1pdCBbIC4uLiBwYXRjaCAuLi4gdGVzdCAuLi4gY29tbWl0IF0qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4geW91IGFyZSBoYXBweSB3aXRoIHRoZSBzdGF0ZSBvZiB0aGlzIGNoYW5nZSwgeW91IGNhbiBtZXJnZSBpdCBpbnRvIHRoZQorInRlc3QiIGJyYW5jaCBpbiBwcmVwYXJhdGlvbiB0byBtYWtlIGl0IHB1YmxpYzoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgdGVzdCAmJiBnaXQgbWVyZ2Ugc3BlZWQtdXAtc3BpbmxvY2tzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0l0IGlzIHVubGlrZWx5IHRoYXQgeW91IHdvdWxkIGhhdmUgYW55IGNvbmZsaWN0cyBoZXJlIC4uLiBidXQgeW91IG1pZ2h0IGlmIHlvdQorc3BlbnQgYSB3aGlsZSBvbiB0aGlzIHN0ZXAgYW5kIGhhZCBhbHNvIHB1bGxlZCBuZXcgdmVyc2lvbnMgZnJvbSB1cHN0cmVhbS4KKworU29tZXRpbWUgbGF0ZXIgd2hlbiBlbm91Z2ggdGltZSBoYXMgcGFzc2VkIGFuZCB0ZXN0aW5nIGRvbmUsIHlvdSBjYW4gcHVsbCB0aGUKK3NhbWUgYnJhbmNoIGludG8gdGhlIGByZWxlYXNlYCB0cmVlIHJlYWR5IHRvIGdvIHVwc3RyZWFtLiAgVGhpcyBpcyB3aGVyZSB5b3UKK3NlZSB0aGUgdmFsdWUgb2Yga2VlcGluZyBlYWNoIHBhdGNoIChvciBwYXRjaCBzZXJpZXMpIGluIGl0cyBvd24gYnJhbmNoLiAgSXQKK21lYW5zIHRoYXQgdGhlIHBhdGNoZXMgY2FuIGJlIG1vdmVkIGludG8gdGhlIGByZWxlYXNlYCB0cmVlIGluIGFueSBvcmRlci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgcmVsZWFzZSAmJiBnaXQgbWVyZ2Ugc3BlZWQtdXAtc3BpbmxvY2tzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIGEgd2hpbGUsIHlvdSB3aWxsIGhhdmUgYSBudW1iZXIgb2YgYnJhbmNoZXMsIGFuZCBkZXNwaXRlIHRoZQord2VsbCBjaG9zZW4gbmFtZXMgeW91IHBpY2tlZCBmb3IgZWFjaCBvZiB0aGVtLCB5b3UgbWF5IGZvcmdldCB3aGF0Cit0aGV5IGFyZSBmb3IsIG9yIHdoYXQgc3RhdHVzIHRoZXkgYXJlIGluLiAgVG8gZ2V0IGEgcmVtaW5kZXIgb2Ygd2hhdAorY2hhbmdlcyBhcmUgaW4gYSBzcGVjaWZpYyBicmFuY2gsIHVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIGxpbnV4Li5icmFuY2huYW1lIHwgZ2l0IHNob3J0bG9nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHNlZSB3aGV0aGVyIGl0IGhhcyBhbHJlYWR5IGJlZW4gbWVyZ2VkIGludG8gdGhlIHRlc3Qgb3IgcmVsZWFzZSBicmFuY2hlcywKK3VzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIHRlc3QuLmJyYW5jaG5hbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworb3IKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIHJlbGVhc2UuLmJyYW5jaG5hbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKElmIHRoaXMgYnJhbmNoIGhhcyBub3QgeWV0IGJlZW4gbWVyZ2VkLCB5b3Ugd2lsbCBzZWUgc29tZSBsb2cgZW50cmllcy4KK0lmIGl0IGhhcyBiZWVuIG1lcmdlZCwgdGhlbiB0aGVyZSB3aWxsIGJlIG5vIG91dHB1dC4pCisKK09uY2UgYSBwYXRjaCBjb21wbGV0ZXMgdGhlIGdyZWF0IGN5Y2xlIChtb3ZpbmcgZnJvbSB0ZXN0IHRvIHJlbGVhc2UsCit0aGVuIHB1bGxlZCBieSBMaW51cywgYW5kIGZpbmFsbHkgY29taW5nIGJhY2sgaW50byB5b3VyIGxvY2FsCitgb3JpZ2luL21hc3RlcmAgYnJhbmNoKSwgdGhlIGJyYW5jaCBmb3IgdGhpcyBjaGFuZ2UgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KK1lvdSBkZXRlY3QgdGhpcyB3aGVuIHRoZSBvdXRwdXQgZnJvbToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbG9nIG9yaWdpbi4uYnJhbmNobmFtZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpcyBlbXB0eS4gIEF0IHRoaXMgcG9pbnQgdGhlIGJyYW5jaCBjYW4gYmUgZGVsZXRlZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoIC1kIGJyYW5jaG5hbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU29tZSBjaGFuZ2VzIGFyZSBzbyB0cml2aWFsIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBzZXBhcmF0ZQorYnJhbmNoIGFuZCB0aGVuIG1lcmdlIGludG8gZWFjaCBvZiB0aGUgdGVzdCBhbmQgcmVsZWFzZSBicmFuY2hlcy4gIEZvcgordGhlc2UgY2hhbmdlcywganVzdCBhcHBseSBkaXJlY3RseSB0byB0aGUgYHJlbGVhc2VgIGJyYW5jaCwgYW5kIHRoZW4KK21lcmdlIHRoYXQgaW50byB0aGUgYHRlc3RgIGJyYW5jaC4KKworQWZ0ZXIgcHVzaGluZyB5b3VyIHdvcmsgdG8gYG15dHJlZWAsIHlvdSBjYW4gdXNlCitsaW5rZ2l0OmdpdC1yZXF1ZXN0LXB1bGxbMV0gdG8gcHJlcGFyZSBhICJwbGVhc2UgcHVsbCIgcmVxdWVzdCBtZXNzYWdlCit0byBzZW5kIHRvIExpbnVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIG15dHJlZQorJCBnaXQgcmVxdWVzdC1wdWxsIG9yaWdpbiBteXRyZWUgcmVsZWFzZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitIZXJlIGFyZSBzb21lIG9mIHRoZSBzY3JpcHRzIHRoYXQgc2ltcGxpZnkgYWxsIHRoaXMgZXZlbiBmdXJ0aGVyLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis9PT09IHVwZGF0ZSBzY3JpcHQgPT09PQorIyBVcGRhdGUgYSBicmFuY2ggaW4gbXkgR2l0IHRyZWUuICBJZiB0aGUgYnJhbmNoIHRvIGJlIHVwZGF0ZWQKKyMgaXMgb3JpZ2luLCB0aGVuIHB1bGwgZnJvbSBrZXJuZWwub3JnLiAgT3RoZXJ3aXNlIG1lcmdlCisjIG9yaWdpbi9tYXN0ZXIgYnJhbmNoIGludG8gdGVzdHxyZWxlYXNlIGJyYW5jaAorCitjYXNlICIkMSIgaW4KK3Rlc3R8cmVsZWFzZSkKKwlnaXQgY2hlY2tvdXQgJDEgJiYgZ2l0IHB1bGwgLiBvcmlnaW4KKwk7Oworb3JpZ2luKQorCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpCisJZ2l0IGZldGNoIG9yaWdpbgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikKKwlpZiBbICRiZWZvcmUgIT0gJGFmdGVyIF0KKwl0aGVuCisJCWdpdCBsb2cgJGJlZm9yZS4uJGFmdGVyIHwgZ2l0IHNob3J0bG9nCisJZmkKKwk7OworKikKKwllY2hvICJ1c2FnZTogJDAgb3JpZ2lufHRlc3R8cmVsZWFzZSIgMT4mMgorCWV4aXQgMQorCTs7Citlc2FjCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKz09PT0gbWVyZ2Ugc2NyaXB0ID09PT0KKyMgTWVyZ2UgYSBicmFuY2ggaW50byBlaXRoZXIgdGhlIHRlc3Qgb3IgcmVsZWFzZSBicmFuY2gKKworcG5hbWU9JDAKKwordXNhZ2UoKQoreworCWVjaG8gInVzYWdlOiAkcG5hbWUgYnJhbmNoIHRlc3R8cmVsZWFzZSIgMT4mMgorCWV4aXQgMQorfQorCitnaXQgc2hvdy1yZWYgLXEgLS12ZXJpZnkgLS0gcmVmcy9oZWFkcy8iJDEiIHx8IHsKKwllY2hvICJDYW4ndCBzZWUgYnJhbmNoIDwkMT4iIDE+JjIKKwl1c2FnZQorfQorCitjYXNlICIkMiIgaW4KK3Rlc3R8cmVsZWFzZSkKKwlpZiBbICQoZ2l0IGxvZyAkMi4uJDEgfCB3YyAtYykgLWVxIDAgXQorCXRoZW4KKwkJZWNobyAkMSBhbHJlYWR5IG1lcmdlZCBpbnRvICQyIDE+JjIKKwkJZXhpdCAxCisJZmkKKwlnaXQgY2hlY2tvdXQgJDIgJiYgZ2l0IHB1bGwgLiAkMQorCTs7CisqKQorCXVzYWdlCisJOzsKK2VzYWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPT09PSBzdGF0dXMgc2NyaXB0ID09PT0KKyMgcmVwb3J0IG9uIHN0YXR1cyBvZiBteSBpYTY0IEdpdCB0cmVlCisKK2diPSQodHB1dCBzZXRhYiAyKQorcmI9JCh0cHV0IHNldGFiIDEpCityZXN0b3JlPSQodHB1dCBzZXRhYiA5KQorCitpZiBbIGBnaXQgcmV2LWxpc3QgdGVzdC4ucmVsZWFzZSB8IHdjIC1jYCAtZ3QgMCBdCit0aGVuCisJZWNobyAkcmIgV2FybmluZzogY29tbWl0cyBpbiByZWxlYXNlIHRoYXQgYXJlIG5vdCBpbiB0ZXN0ICRyZXN0b3JlCisJZ2l0IGxvZyB0ZXN0Li5yZWxlYXNlCitmaQorCitmb3IgYnJhbmNoIGluIGBnaXQgc2hvdy1yZWYgLS1oZWFkcyB8IHNlZCAnc3xeLiovfHwnYAorZG8KKwlpZiBbICRicmFuY2ggPSB0ZXN0IC1vICRicmFuY2ggPSByZWxlYXNlIF0KKwl0aGVuCisJCWNvbnRpbnVlCisJZmkKKworCWVjaG8gLW4gJGdiID09PT09PT0gJGJyYW5jaCA9PT09PT0gJHJlc3RvcmUgIiAiCisJc3RhdHVzPQorCWZvciByZWYgaW4gdGVzdCByZWxlYXNlIG9yaWdpbi9tYXN0ZXIKKwlkbworCQlpZiBbIGBnaXQgcmV2LWxpc3QgJHJlZi4uJGJyYW5jaCB8IHdjIC1jYCAtZ3QgMCBdCisJCXRoZW4KKwkJCXN0YXR1cz0kc3RhdHVzJHtyZWY6MDoxfQorCQlmaQorCWRvbmUKKwljYXNlICRzdGF0dXMgaW4KKwl0cmwpCisJCWVjaG8gJHJiIE5lZWQgdG8gcHVsbCBpbnRvIHRlc3QgJHJlc3RvcmUKKwkJOzsKKwlybCkKKwkJZWNobyAiSW4gdGVzdCIKKwkJOzsKKwlsKQorCQllY2hvICJXYWl0aW5nIGZvciBsaW51cyIKKwkJOzsKKwkiIikKKwkJZWNobyAkcmIgQWxsIGRvbmUgJHJlc3RvcmUKKwkJOzsKKwkqKQorCQllY2hvICRyYiAiPCRzdGF0dXM+IiAkcmVzdG9yZQorCQk7OworCWVzYWMKKwlnaXQgbG9nIG9yaWdpbi9tYXN0ZXIuLiRicmFuY2ggfCBnaXQgc2hvcnRsb2cKK2RvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitbW2NsZWFuaW5nLXVwLWhpc3RvcnldXQorUmV3cml0aW5nIGhpc3RvcnkgYW5kIG1haW50YWluaW5nIHBhdGNoIHNlcmllcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOb3JtYWxseSBjb21taXRzIGFyZSBvbmx5IGFkZGVkIHRvIGEgcHJvamVjdCwgbmV2ZXIgdGFrZW4gYXdheSBvcgorcmVwbGFjZWQuICBHaXQgaXMgZGVzaWduZWQgd2l0aCB0aGlzIGFzc3VtcHRpb24sIGFuZCB2aW9sYXRpbmcgaXQgd2lsbAorY2F1c2UgR2l0J3MgbWVyZ2UgbWFjaGluZXJ5IChmb3IgZXhhbXBsZSkgdG8gZG8gdGhlIHdyb25nIHRoaW5nLgorCitIb3dldmVyLCB0aGVyZSBpcyBhIHNpdHVhdGlvbiBpbiB3aGljaCBpdCBjYW4gYmUgdXNlZnVsIHRvIHZpb2xhdGUgdGhpcworYXNzdW1wdGlvbi4KKworW1twYXRjaC1zZXJpZXNdXQorQ3JlYXRpbmcgdGhlIHBlcmZlY3QgcGF0Y2ggc2VyaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9zZSB5b3UgYXJlIGEgY29udHJpYnV0b3IgdG8gYSBsYXJnZSBwcm9qZWN0LCBhbmQgeW91IHdhbnQgdG8gYWRkIGEKK2NvbXBsaWNhdGVkIGZlYXR1cmUsIGFuZCB0byBwcmVzZW50IGl0IHRvIHRoZSBvdGhlciBkZXZlbG9wZXJzIGluIGEgd2F5Cit0aGF0IG1ha2VzIGl0IGVhc3kgZm9yIHRoZW0gdG8gcmVhZCB5b3VyIGNoYW5nZXMsIHZlcmlmeSB0aGF0IHRoZXkgYXJlCitjb3JyZWN0LCBhbmQgdW5kZXJzdGFuZCB3aHkgeW91IG1hZGUgZWFjaCBjaGFuZ2UuCisKK0lmIHlvdSBwcmVzZW50IGFsbCBvZiB5b3VyIGNoYW5nZXMgYXMgYSBzaW5nbGUgcGF0Y2ggKG9yIGNvbW1pdCksIHRoZXkKK21heSBmaW5kIHRoYXQgaXQgaXMgdG9vIG11Y2ggdG8gZGlnZXN0IGFsbCBhdCBvbmNlLgorCitJZiB5b3UgcHJlc2VudCB0aGVtIHdpdGggdGhlIGVudGlyZSBoaXN0b3J5IG9mIHlvdXIgd29yaywgY29tcGxldGUgd2l0aAorbWlzdGFrZXMsIGNvcnJlY3Rpb25zLCBhbmQgZGVhZCBlbmRzLCB0aGV5IG1heSBiZSBvdmVyd2hlbG1lZC4KKworU28gdGhlIGlkZWFsIGlzIHVzdWFsbHkgdG8gcHJvZHVjZSBhIHNlcmllcyBvZiBwYXRjaGVzIHN1Y2ggdGhhdDoKKworCTEuIEVhY2ggcGF0Y2ggY2FuIGJlIGFwcGxpZWQgaW4gb3JkZXIuCisKKwkyLiBFYWNoIHBhdGNoIGluY2x1ZGVzIGEgc2luZ2xlIGxvZ2ljYWwgY2hhbmdlLCB0b2dldGhlciB3aXRoIGEKKwkgICBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlIGNoYW5nZS4KKworCTMuIE5vIHBhdGNoIGludHJvZHVjZXMgYSByZWdyZXNzaW9uOiBhZnRlciBhcHBseWluZyBhbnkgaW5pdGlhbAorCSAgIHBhcnQgb2YgdGhlIHNlcmllcywgdGhlIHJlc3VsdGluZyBwcm9qZWN0IHN0aWxsIGNvbXBpbGVzIGFuZAorCSAgIHdvcmtzLCBhbmQgaGFzIG5vIGJ1Z3MgdGhhdCBpdCBkaWRuJ3QgaGF2ZSBiZWZvcmUuCisKKwk0LiBUaGUgY29tcGxldGUgc2VyaWVzIHByb2R1Y2VzIHRoZSBzYW1lIGVuZCByZXN1bHQgYXMgeW91ciBvd24KKwkgICAocHJvYmFibHkgbXVjaCBtZXNzaWVyISkgZGV2ZWxvcG1lbnQgcHJvY2VzcyBkaWQuCisKK1dlIHdpbGwgaW50cm9kdWNlIHNvbWUgdG9vbHMgdGhhdCBjYW4gaGVscCB5b3UgZG8gdGhpcywgZXhwbGFpbiBob3cgdG8KK3VzZSB0aGVtLCBhbmQgdGhlbiBleHBsYWluIHNvbWUgb2YgdGhlIHByb2JsZW1zIHRoYXQgY2FuIGFyaXNlIGJlY2F1c2UKK3lvdSBhcmUgcmV3cml0aW5nIGhpc3RvcnkuCisKK1tbdXNpbmctZ2l0LXJlYmFzZV1dCitLZWVwaW5nIGEgcGF0Y2ggc2VyaWVzIHVwIHRvIGRhdGUgdXNpbmcgZ2l0IHJlYmFzZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9zZSB0aGF0IHlvdSBjcmVhdGUgYSBicmFuY2ggYG15d29ya2Agb24gYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoCitgb3JpZ2luYCwgYW5kIGNyZWF0ZSBzb21lIGNvbW1pdHMgb24gdG9wIG9mIGl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtYiBteXdvcmsgb3JpZ2luCiskIHZpIGZpbGUudHh0CiskIGdpdCBjb21taXQKKyQgdmkgb3RoZXJmaWxlLnR4dAorJCBnaXQgY29tbWl0CisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGhhdmUgcGVyZm9ybWVkIG5vIG1lcmdlcyBpbnRvIG15d29yaywgc28gaXQgaXMganVzdCBhIHNpbXBsZSBsaW5lYXIKK3NlcXVlbmNlIG9mIHBhdGNoZXMgb24gdG9wIG9mIGBvcmlnaW5gOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBvLS1vLS1PIDwtLSBvcmlnaW4KKyAgICAgICAgXAorCSBhLS1iLS1jIDwtLSBteXdvcmsKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitTb21lIG1vcmUgaW50ZXJlc3Rpbmcgd29yayBoYXMgYmVlbiBkb25lIGluIHRoZSB1cHN0cmVhbSBwcm9qZWN0LCBhbmQKK2BvcmlnaW5gIGhhcyBhZHZhbmNlZDoKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgby0tby0tTy0tby0tby0tbyA8LS0gb3JpZ2luCisgICAgICAgIFwKKyAgICAgICAgIGEtLWItLWMgPC0tIG15d29yaworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0F0IHRoaXMgcG9pbnQsIHlvdSBjb3VsZCB1c2UgYHB1bGxgIHRvIG1lcmdlIHlvdXIgY2hhbmdlcyBiYWNrIGluOwordGhlIHJlc3VsdCB3b3VsZCBjcmVhdGUgYSBuZXcgbWVyZ2UgY29tbWl0LCBsaWtlIHRoaXM6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIG8tLW8tLU8tLW8tLW8tLW8gPC0tIG9yaWdpbgorICAgICAgICBcICAgICAgICBcCisgICAgICAgICBhLS1iLS1jLS1tIDwtLSBteXdvcmsKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitIb3dldmVyLCBpZiB5b3UgcHJlZmVyIHRvIGtlZXAgdGhlIGhpc3RvcnkgaW4gbXl3b3JrIGEgc2ltcGxlIHNlcmllcyBvZgorY29tbWl0cyB3aXRob3V0IGFueSBtZXJnZXMsIHlvdSBtYXkgaW5zdGVhZCBjaG9vc2UgdG8gdXNlCitsaW5rZ2l0OmdpdC1yZWJhc2VbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG15d29yaworJCBnaXQgcmViYXNlIG9yaWdpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgcmVtb3ZlIGVhY2ggb2YgeW91ciBjb21taXRzIGZyb20gbXl3b3JrLCB0ZW1wb3JhcmlseSBzYXZpbmcKK3RoZW0gYXMgcGF0Y2hlcyAoaW4gYSBkaXJlY3RvcnkgbmFtZWQgYC5naXQvcmViYXNlLWFwcGx5YCksIHVwZGF0ZSBteXdvcmsgdG8KK3BvaW50IGF0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBvcmlnaW4sIHRoZW4gYXBwbHkgZWFjaCBvZiB0aGUgc2F2ZWQKK3BhdGNoZXMgdG8gdGhlIG5ldyBteXdvcmsuICBUaGUgcmVzdWx0IHdpbGwgbG9vayBsaWtlOgorCisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIG8tLW8tLU8tLW8tLW8tLW8gPC0tIG9yaWdpbgorCQkgXAorCQkgIGEnLS1iJy0tYycgPC0tIG15d29yaworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0luIHRoZSBwcm9jZXNzLCBpdCBtYXkgZGlzY292ZXIgY29uZmxpY3RzLiAgSW4gdGhhdCBjYXNlIGl0IHdpbGwgc3RvcAorYW5kIGFsbG93IHlvdSB0byBmaXggdGhlIGNvbmZsaWN0czsgYWZ0ZXIgZml4aW5nIGNvbmZsaWN0cywgdXNlIGBnaXQgYWRkYAordG8gdXBkYXRlIHRoZSBpbmRleCB3aXRoIHRob3NlIGNvbnRlbnRzLCBhbmQgdGhlbiwgaW5zdGVhZCBvZgorcnVubmluZyBgZ2l0IGNvbW1pdGAsIGp1c3QgcnVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCBHaXQgd2lsbCBjb250aW51ZSBhcHBseWluZyB0aGUgcmVzdCBvZiB0aGUgcGF0Y2hlcy4KKworQXQgYW55IHBvaW50IHlvdSBtYXkgdXNlIHRoZSBgLS1hYm9ydGAgb3B0aW9uIHRvIGFib3J0IHRoaXMgcHJvY2VzcyBhbmQKK3JldHVybiBteXdvcmsgdG8gdGhlIHN0YXRlIGl0IGhhZCBiZWZvcmUgeW91IHN0YXJ0ZWQgdGhlIHJlYmFzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmViYXNlIC0tYWJvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IG5lZWQgdG8gcmVvcmRlciBvciBlZGl0IGEgbnVtYmVyIG9mIGNvbW1pdHMgaW4gYSBicmFuY2gsIGl0IG1heQorYmUgZWFzaWVyIHRvIHVzZSBgZ2l0IHJlYmFzZSAtaWAsIHdoaWNoIGFsbG93cyB5b3UgdG8gcmVvcmRlciBhbmQKK3NxdWFzaCBjb21taXRzLCBhcyB3ZWxsIGFzIG1hcmtpbmcgdGhlbSBmb3IgaW5kaXZpZHVhbCBlZGl0aW5nIGR1cmluZwordGhlIHJlYmFzZS4gIFNlZSA8PGludGVyYWN0aXZlLXJlYmFzZT4+IGZvciBkZXRhaWxzLCBhbmQKKzw8cmVvcmRlcmluZy1wYXRjaC1zZXJpZXM+PiBmb3IgYWx0ZXJuYXRpdmVzLgorCitbW3Jld3JpdGluZy1vbmUtY29tbWl0XV0KK1Jld3JpdGluZyBhIHNpbmdsZSBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2Ugc2F3IGluIDw8Zml4aW5nLWEtbWlzdGFrZS1ieS1yZXdyaXRpbmctaGlzdG9yeT4+IHRoYXQgeW91IGNhbiByZXBsYWNlIHRoZQorbW9zdCByZWNlbnQgY29tbWl0IHVzaW5nCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtLWFtZW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgcmVwbGFjZSB0aGUgb2xkIGNvbW1pdCBieSBhIG5ldyBjb21taXQgaW5jb3Jwb3JhdGluZyB5b3VyCitjaGFuZ2VzLCBnaXZpbmcgeW91IGEgY2hhbmNlIHRvIGVkaXQgdGhlIG9sZCBjb21taXQgbWVzc2FnZSBmaXJzdC4KK1RoaXMgaXMgdXNlZnVsIGZvciBmaXhpbmcgdHlwb3MgaW4geW91ciBsYXN0IGNvbW1pdCwgb3IgZm9yIGFkanVzdGluZwordGhlIHBhdGNoIGNvbnRlbnRzIG9mIGEgcG9vcmx5IHN0YWdlZCBjb21taXQuCisKK0lmIHlvdSBuZWVkIHRvIGFtZW5kIGNvbW1pdHMgZnJvbSBkZWVwZXIgaW4geW91ciBoaXN0b3J5LCB5b3UgY2FuCit1c2UgPDxpbnRlcmFjdGl2ZS1yZWJhc2UsaW50ZXJhY3RpdmUgcmViYXNlJ3MgYGVkaXRgIGluc3RydWN0aW9uPj4uCisKK1tbcmVvcmRlcmluZy1wYXRjaC1zZXJpZXNdXQorUmVvcmRlcmluZyBvciBzZWxlY3RpbmcgZnJvbSBhIHBhdGNoIHNlcmllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21ldGltZXMgeW91IHdhbnQgdG8gZWRpdCBhIGNvbW1pdCBkZWVwZXIgaW4geW91ciBoaXN0b3J5LiAgT25lCithcHByb2FjaCBpcyB0byB1c2UgYGdpdCBmb3JtYXQtcGF0Y2hgIHRvIGNyZWF0ZSBhIHNlcmllcyBvZiBwYXRjaGVzCithbmQgdGhlbiByZXNldCB0aGUgc3RhdGUgdG8gYmVmb3JlIHRoZSBwYXRjaGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggb3JpZ2luCiskIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZW4gbW9kaWZ5LCByZW9yZGVyLCBvciBlbGltaW5hdGUgcGF0Y2hlcyBhcyBuZWVkZWQgYmVmb3JlIGFwcGx5aW5nCit0aGVtIGFnYWluIHdpdGggbGlua2dpdDpnaXQtYW1bMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGFtICoucGF0Y2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworW1tpbnRlcmFjdGl2ZS1yZWJhc2VdXQorVXNpbmcgaW50ZXJhY3RpdmUgcmViYXNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIGFsc28gZWRpdCBhIHBhdGNoIHNlcmllcyB3aXRoIGFuIGludGVyYWN0aXZlIHJlYmFzZS4gIFRoaXMgaXMKK3RoZSBzYW1lIGFzIDw8cmVvcmRlcmluZy1wYXRjaC1zZXJpZXMscmVvcmRlcmluZyBhIHBhdGNoIHNlcmllcyB1c2luZworYGZvcm1hdC1wYXRjaGA+Piwgc28gdXNlIHdoaWNoZXZlciBpbnRlcmZhY2UgeW91IGxpa2UgYmVzdC4KKworUmViYXNlIHlvdXIgY3VycmVudCBIRUFEIG9uIHRoZSBsYXN0IGNvbW1pdCB5b3Ugd2FudCB0byByZXRhaW4gYXMtaXMuCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcmVvcmRlciB0aGUgbGFzdCA1IGNvbW1pdHMsIHVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmViYXNlIC1pIEhFQUR+NQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHdpbGwgb3BlbiB5b3VyIGVkaXRvciB3aXRoIGEgbGlzdCBvZiBzdGVwcyB0byBiZSB0YWtlbiB0byBwZXJmb3JtCit5b3VyIHJlYmFzZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGljayBkZWFkYmVlIFRoZSBvbmVsaW5lIG9mIHRoaXMgY29tbWl0CitwaWNrIGZhMWFmZTEgVGhlIG9uZWxpbmUgb2YgdGhlIG5leHQgY29tbWl0CisuLi4KKworIyBSZWJhc2UgYzBmZmVlZS4uZGVhZGJlZSBvbnRvIGMwZmZlZWUKKyMKKyMgQ29tbWFuZHM6CisjICBwLCBwaWNrID0gdXNlIGNvbW1pdAorIyAgciwgcmV3b3JkID0gdXNlIGNvbW1pdCwgYnV0IGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlCisjICBlLCBlZGl0ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nCisjICBzLCBzcXVhc2ggPSB1c2UgY29tbWl0LCBidXQgbWVsZCBpbnRvIHByZXZpb3VzIGNvbW1pdAorIyAgZiwgZml4dXAgPSBsaWtlICJzcXVhc2giLCBidXQgZGlzY2FyZCB0aGlzIGNvbW1pdCdzIGxvZyBtZXNzYWdlCisjICB4LCBleGVjID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbAorIworIyBUaGVzZSBsaW5lcyBjYW4gYmUgcmUtb3JkZXJlZDsgdGhleSBhcmUgZXhlY3V0ZWQgZnJvbSB0b3AgdG8gYm90dG9tLgorIworIyBJZiB5b3UgcmVtb3ZlIGEgbGluZSBoZXJlIFRIQVQgQ09NTUlUIFdJTEwgQkUgTE9TVC4KKyMKKyMgSG93ZXZlciwgaWYgeW91IHJlbW92ZSBldmVyeXRoaW5nLCB0aGUgcmViYXNlIHdpbGwgYmUgYWJvcnRlZC4KKyMKKyMgTm90ZSB0aGF0IGVtcHR5IGNvbW1pdHMgYXJlIGNvbW1lbnRlZCBvdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgZXhwbGFpbmVkIGluIHRoZSBjb21tZW50cywgeW91IGNhbiByZW9yZGVyIGNvbW1pdHMsIHNxdWFzaCB0aGVtCit0b2dldGhlciwgZWRpdCBjb21taXQgbWVzc2FnZXMsIGV0Yy4gYnkgZWRpdGluZyB0aGUgbGlzdC4gIE9uY2UgeW91CithcmUgc2F0aXNmaWVkLCBzYXZlIHRoZSBsaXN0IGFuZCBjbG9zZSB5b3VyIGVkaXRvciwgYW5kIHRoZSByZWJhc2UKK3dpbGwgYmVnaW4uCisKK1RoZSByZWJhc2Ugd2lsbCBzdG9wIHdoZXJlIGBwaWNrYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBlZGl0YCBvcgord2hlbiBhIHN0ZXAgaW4gdGhlIGxpc3QgZmFpbHMgdG8gbWVjaGFuaWNhbGx5IHJlc29sdmUgY29uZmxpY3RzIGFuZAorbmVlZHMgeW91ciBoZWxwLiAgV2hlbiB5b3UgYXJlIGRvbmUgZWRpdGluZyBhbmQvb3IgcmVzb2x2aW5nIGNvbmZsaWN0cworeW91IGNhbiBjb250aW51ZSB3aXRoIGBnaXQgcmViYXNlIC0tY29udGludWVgLiAgSWYgeW91IGRlY2lkZSB0aGF0Cit0aGluZ3MgYXJlIGdldHRpbmcgdG9vIGhhaXJ5LCB5b3UgY2FuIGFsd2F5cyBiYWlsIG91dCB3aXRoIGBnaXQgcmViYXNlCistLWFib3J0YC4gIEV2ZW4gYWZ0ZXIgdGhlIHJlYmFzZSBpcyBjb21wbGV0ZSwgeW91IGNhbiBzdGlsbCByZWNvdmVyCit0aGUgb3JpZ2luYWwgYnJhbmNoIGJ5IHVzaW5nIHRoZSA8PHJlZmxvZ3MscmVmbG9nPj4uCisKK0ZvciBhIG1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lvbiBvZiB0aGUgcHJvY2VkdXJlIGFuZCBhZGRpdGlvbmFsIHRpcHMsCitzZWUgdGhlICJJTlRFUkFDVElWRSBNT0RFIiBzZWN0aW9uIG9mIGxpbmtnaXQ6Z2l0LXJlYmFzZVsxXS4KKworW1twYXRjaC1zZXJpZXMtdG9vbHNdXQorT3RoZXIgdG9vbHMKKy0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBudW1lcm91cyBvdGhlciB0b29scywgc3VjaCBhcyBTdEdpdCwgd2hpY2ggZXhpc3QgZm9yIHRoZQorcHVycG9zZSBvZiBtYWludGFpbmluZyBhIHBhdGNoIHNlcmllcy4gIFRoZXNlIGFyZSBvdXRzaWRlIG9mIHRoZSBzY29wZSBvZgordGhpcyBtYW51YWwuCisKK1tbcHJvYmxlbXMtV2l0aC1yZXdyaXRpbmctaGlzdG9yeV1dCitQcm9ibGVtcyB3aXRoIHJld3JpdGluZyBoaXN0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBwcmltYXJ5IHByb2JsZW0gd2l0aCByZXdyaXRpbmcgdGhlIGhpc3Rvcnkgb2YgYSBicmFuY2ggaGFzIHRvIGRvCit3aXRoIG1lcmdpbmcuICBTdXBwb3NlIHNvbWVib2R5IGZldGNoZXMgeW91ciBicmFuY2ggYW5kIG1lcmdlcyBpdCBpbnRvCit0aGVpciBicmFuY2gsIHdpdGggYSByZXN1bHQgc29tZXRoaW5nIGxpa2UgdGhpczoKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisgby0tby0tTy0tby0tby0tbyA8LS0gb3JpZ2luCisgICAgICAgIFwgICAgICAgIFwKKyAgICAgICAgIHQtLXQtLXQtLW0gPC0tIHRoZWlyIGJyYW5jaDoKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitUaGVuIHN1cHBvc2UgeW91IG1vZGlmeSB0aGUgbGFzdCB0aHJlZSBjb21taXRzOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKwkgby0tby0tbyA8LS0gbmV3IGhlYWQgb2Ygb3JpZ2luCisJLworIG8tLW8tLU8tLW8tLW8tLW8gPC0tIG9sZCBoZWFkIG9mIG9yaWdpbgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0lmIHdlIGV4YW1pbmVkIGFsbCB0aGlzIGhpc3RvcnkgdG9nZXRoZXIgaW4gb25lIHJlcG9zaXRvcnksIGl0IHdpbGwKK2xvb2sgbGlrZToKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisJIG8tLW8tLW8gPC0tIG5ldyBoZWFkIG9mIG9yaWdpbgorCS8KKyBvLS1vLS1PLS1vLS1vLS1vIDwtLSBvbGQgaGVhZCBvZiBvcmlnaW4KKyAgICAgICAgXCAgICAgICAgXAorICAgICAgICAgdC0tdC0tdC0tbSA8LS0gdGhlaXIgYnJhbmNoOgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dpdCBoYXMgbm8gd2F5IG9mIGtub3dpbmcgdGhhdCB0aGUgbmV3IGhlYWQgaXMgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mCit0aGUgb2xkIGhlYWQ7IGl0IHRyZWF0cyB0aGlzIHNpdHVhdGlvbiBleGFjdGx5IHRoZSBzYW1lIGFzIGl0IHdvdWxkIGlmCit0d28gZGV2ZWxvcGVycyBoYWQgaW5kZXBlbmRlbnRseSBkb25lIHRoZSB3b3JrIG9uIHRoZSBvbGQgYW5kIG5ldyBoZWFkcworaW4gcGFyYWxsZWwuICBBdCB0aGlzIHBvaW50LCBpZiBzb21lb25lIGF0dGVtcHRzIHRvIG1lcmdlIHRoZSBuZXcgaGVhZAoraW4gdG8gdGhlaXIgYnJhbmNoLCBHaXQgd2lsbCBhdHRlbXB0IHRvIG1lcmdlIHRvZ2V0aGVyIHRoZSB0d28gKG9sZCBhbmQKK25ldykgbGluZXMgb2YgZGV2ZWxvcG1lbnQsIGluc3RlYWQgb2YgdHJ5aW5nIHRvIHJlcGxhY2UgdGhlIG9sZCBieSB0aGUKK25ldy4gIFRoZSByZXN1bHRzIGFyZSBsaWtlbHkgdG8gYmUgdW5leHBlY3RlZC4KKworWW91IG1heSBzdGlsbCBjaG9vc2UgdG8gcHVibGlzaCBicmFuY2hlcyB3aG9zZSBoaXN0b3J5IGlzIHJld3JpdHRlbiwKK2FuZCBpdCBtYXkgYmUgdXNlZnVsIGZvciBvdGhlcnMgdG8gYmUgYWJsZSB0byBmZXRjaCB0aG9zZSBicmFuY2hlcyBpbgorb3JkZXIgdG8gZXhhbWluZSBvciB0ZXN0IHRoZW0sIGJ1dCB0aGV5IHNob3VsZCBub3QgYXR0ZW1wdCB0byBwdWxsIHN1Y2gKK2JyYW5jaGVzIGludG8gdGhlaXIgb3duIHdvcmsuCisKK0ZvciB0cnVlIGRpc3RyaWJ1dGVkIGRldmVsb3BtZW50IHRoYXQgc3VwcG9ydHMgcHJvcGVyIG1lcmdpbmcsCitwdWJsaXNoZWQgYnJhbmNoZXMgc2hvdWxkIG5ldmVyIGJlIHJld3JpdHRlbi4KKworW1tiaXNlY3QtbWVyZ2VzXV0KK1doeSBiaXNlY3RpbmcgbWVyZ2UgY29tbWl0cyBjYW4gYmUgaGFyZGVyIHRoYW4gYmlzZWN0aW5nIGxpbmVhciBoaXN0b3J5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGlua2dpdDpnaXQtYmlzZWN0WzFdIGNvbW1hbmQgY29ycmVjdGx5IGhhbmRsZXMgaGlzdG9yeSB0aGF0CitpbmNsdWRlcyBtZXJnZSBjb21taXRzLiAgSG93ZXZlciwgd2hlbiB0aGUgY29tbWl0IHRoYXQgaXQgZmluZHMgaXMgYQorbWVyZ2UgY29tbWl0LCB0aGUgdXNlciBtYXkgbmVlZCB0byB3b3JrIGhhcmRlciB0aGFuIHVzdWFsIHRvIGZpZ3VyZSBvdXQKK3doeSB0aGF0IGNvbW1pdCBpbnRyb2R1Y2VkIGEgcHJvYmxlbS4KKworSW1hZ2luZSB0aGlzIGhpc3Rvcnk6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAgICAgLS0tWi0tLW8tLS1YLS0tLi4uLS0tby0tLUEtLS1DLS0tRAorICAgICAgICAgIFwgICAgICAgICAgICAgICAgICAgICAgIC8KKyAgICAgICAgICAgby0tLW8tLS1ZLS0tLi4uLS0tby0tLUIKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitTdXBwb3NlIHRoYXQgb24gdGhlIHVwcGVyIGxpbmUgb2YgZGV2ZWxvcG1lbnQsIHRoZSBtZWFuaW5nIG9mIG9uZQorb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IGV4aXN0cyBhdCBaIGlzIGNoYW5nZWQgYXQgY29tbWl0IFguICBUaGUKK2NvbW1pdHMgZnJvbSBaIGxlYWRpbmcgdG8gQSBjaGFuZ2UgYm90aCB0aGUgZnVuY3Rpb24ncworaW1wbGVtZW50YXRpb24gYW5kIGFsbCBjYWxsaW5nIHNpdGVzIHRoYXQgZXhpc3QgYXQgWiwgYXMgd2VsbAorYXMgbmV3IGNhbGxpbmcgc2l0ZXMgdGhleSBhZGQsIHRvIGJlIGNvbnNpc3RlbnQuICBUaGVyZSBpcyBubworYnVnIGF0IEEuCisKK1N1cHBvc2UgdGhhdCBpbiB0aGUgbWVhbnRpbWUgb24gdGhlIGxvd2VyIGxpbmUgb2YgZGV2ZWxvcG1lbnQgc29tZWJvZHkKK2FkZHMgYSBuZXcgY2FsbGluZyBzaXRlIGZvciB0aGF0IGZ1bmN0aW9uIGF0IGNvbW1pdCBZLiAgVGhlCitjb21taXRzIGZyb20gWiBsZWFkaW5nIHRvIEIgYWxsIGFzc3VtZSB0aGUgb2xkIHNlbWFudGljcyBvZiB0aGF0CitmdW5jdGlvbiBhbmQgdGhlIGNhbGxlcnMgYW5kIHRoZSBjYWxsZWUgYXJlIGNvbnNpc3RlbnQgd2l0aCBlYWNoCitvdGhlci4gIFRoZXJlIGlzIG5vIGJ1ZyBhdCBCLCBlaXRoZXIuCisKK1N1cHBvc2UgZnVydGhlciB0aGF0IHRoZSB0d28gZGV2ZWxvcG1lbnQgbGluZXMgbWVyZ2UgY2xlYW5seSBhdCBDLAorc28gbm8gY29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4KKworTmV2ZXJ0aGVsZXNzLCB0aGUgY29kZSBhdCBDIGlzIGJyb2tlbiwgYmVjYXVzZSB0aGUgY2FsbGVycyBhZGRlZAorb24gdGhlIGxvd2VyIGxpbmUgb2YgZGV2ZWxvcG1lbnQgaGF2ZSBub3QgYmVlbiBjb252ZXJ0ZWQgdG8gdGhlIG5ldworc2VtYW50aWNzIGludHJvZHVjZWQgb24gdGhlIHVwcGVyIGxpbmUgb2YgZGV2ZWxvcG1lbnQuICBTbyBpZiBhbGwKK3lvdSBrbm93IGlzIHRoYXQgRCBpcyBiYWQsIHRoYXQgWiBpcyBnb29kLCBhbmQgdGhhdAorbGlua2dpdDpnaXQtYmlzZWN0WzFdIGlkZW50aWZpZXMgQyBhcyB0aGUgY3VscHJpdCwgaG93IHdpbGwgeW91CitmaWd1cmUgb3V0IHRoYXQgdGhlIHByb2JsZW0gaXMgZHVlIHRvIHRoaXMgY2hhbmdlIGluIHNlbWFudGljcz8KKworV2hlbiB0aGUgcmVzdWx0IG9mIGEgYGdpdCBiaXNlY3RgIGlzIGEgbm9uLW1lcmdlIGNvbW1pdCwgeW91IHNob3VsZAorbm9ybWFsbHkgYmUgYWJsZSB0byBkaXNjb3ZlciB0aGUgcHJvYmxlbSBieSBleGFtaW5pbmcganVzdCB0aGF0IGNvbW1pdC4KK0RldmVsb3BlcnMgY2FuIG1ha2UgdGhpcyBlYXN5IGJ5IGJyZWFraW5nIHRoZWlyIGNoYW5nZXMgaW50byBzbWFsbAorc2VsZi1jb250YWluZWQgY29tbWl0cy4gIFRoYXQgd29uJ3QgaGVscCBpbiB0aGUgY2FzZSBhYm92ZSwgaG93ZXZlciwKK2JlY2F1c2UgdGhlIHByb2JsZW0gaXNuJ3Qgb2J2aW91cyBmcm9tIGV4YW1pbmF0aW9uIG9mIGFueSBzaW5nbGUKK2NvbW1pdDsgaW5zdGVhZCwgYSBnbG9iYWwgdmlldyBvZiB0aGUgZGV2ZWxvcG1lbnQgaXMgcmVxdWlyZWQuICBUbworbWFrZSBtYXR0ZXJzIHdvcnNlLCB0aGUgY2hhbmdlIGluIHNlbWFudGljcyBpbiB0aGUgcHJvYmxlbWF0aWMKK2Z1bmN0aW9uIG1heSBiZSBqdXN0IG9uZSBzbWFsbCBwYXJ0IG9mIHRoZSBjaGFuZ2VzIGluIHRoZSB1cHBlcgorbGluZSBvZiBkZXZlbG9wbWVudC4KKworT24gdGhlIG90aGVyIGhhbmQsIGlmIGluc3RlYWQgb2YgbWVyZ2luZyBhdCBDIHlvdSBoYWQgcmViYXNlZCB0aGUKK2hpc3RvcnkgYmV0d2VlbiBaIHRvIEIgb24gdG9wIG9mIEEsIHlvdSB3b3VsZCBoYXZlIGdvdHRlbiB0aGlzCitsaW5lYXIgaGlzdG9yeToKKworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorICAgIC0tLVotLS1vLS0tWC0tLi4uLS0tby0tLUEtLS1vLS0tby0tLVkqLS0uLi4tLS1vLS0tQiotLUQqCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0Jpc2VjdGluZyBiZXR3ZWVuIFogYW5kIEQqIHdvdWxkIGhpdCBhIHNpbmdsZSBjdWxwcml0IGNvbW1pdCBZKiwKK2FuZCB1bmRlcnN0YW5kaW5nIHdoeSBZKiB3YXMgYnJva2VuIHdvdWxkIHByb2JhYmx5IGJlIGVhc2llci4KKworUGFydGx5IGZvciB0aGlzIHJlYXNvbiwgbWFueSBleHBlcmllbmNlZCBHaXQgdXNlcnMsIGV2ZW4gd2hlbgord29ya2luZyBvbiBhbiBvdGhlcndpc2UgbWVyZ2UtaGVhdnkgcHJvamVjdCwga2VlcCB0aGUgaGlzdG9yeQorbGluZWFyIGJ5IHJlYmFzaW5nIGFnYWluc3QgdGhlIGxhdGVzdCB1cHN0cmVhbSB2ZXJzaW9uIGJlZm9yZQorcHVibGlzaGluZy4KKworW1thZHZhbmNlZC1icmFuY2gtbWFuYWdlbWVudF1dCitBZHZhbmNlZCBicmFuY2ggbWFuYWdlbWVudAorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworW1tmZXRjaGluZy1pbmRpdmlkdWFsLWJyYW5jaGVzXV0KK0ZldGNoaW5nIGluZGl2aWR1YWwgYnJhbmNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW5zdGVhZCBvZiB1c2luZyBsaW5rZ2l0OmdpdC1yZW1vdGVbMV0sIHlvdSBjYW4gYWxzbyBjaG9vc2UganVzdAordG8gdXBkYXRlIG9uZSBicmFuY2ggYXQgYSB0aW1lLCBhbmQgdG8gc3RvcmUgaXQgbG9jYWxseSB1bmRlciBhbgorYXJiaXRyYXJ5IG5hbWU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoIG9yaWdpbiB0b2RvOm15LXRvZG8td29yaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZmlyc3QgYXJndW1lbnQsIGBvcmlnaW5gLCBqdXN0IHRlbGxzIEdpdCB0byBmZXRjaCBmcm9tIHRoZQorcmVwb3NpdG9yeSB5b3Ugb3JpZ2luYWxseSBjbG9uZWQgZnJvbS4gIFRoZSBzZWNvbmQgYXJndW1lbnQgdGVsbHMgR2l0Cit0byBmZXRjaCB0aGUgYnJhbmNoIG5hbWVkIGB0b2RvYCBmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeSwgYW5kIHRvCitzdG9yZSBpdCBsb2NhbGx5IHVuZGVyIHRoZSBuYW1lIGByZWZzL2hlYWRzL215LXRvZG8td29ya2AuCisKK1lvdSBjYW4gYWxzbyBmZXRjaCBicmFuY2hlcyBmcm9tIG90aGVyIHJlcG9zaXRvcmllczsgc28KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggZ2l0Oi8vZXhhbXBsZS5jb20vcHJvai5naXQgbWFzdGVyOmV4YW1wbGUtbWFzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3dpbGwgY3JlYXRlIGEgbmV3IGJyYW5jaCBuYW1lZCBgZXhhbXBsZS1tYXN0ZXJgIGFuZCBzdG9yZSBpbiBpdCB0aGUKK2JyYW5jaCBuYW1lZCBgbWFzdGVyYCBmcm9tIHRoZSByZXBvc2l0b3J5IGF0IHRoZSBnaXZlbiBVUkwuICBJZiB5b3UKK2FscmVhZHkgaGF2ZSBhIGJyYW5jaCBuYW1lZCBleGFtcGxlLW1hc3RlciwgaXQgd2lsbCBhdHRlbXB0IHRvCis8PGZhc3QtZm9yd2FyZHMsZmFzdC1mb3J3YXJkPj4gdG8gdGhlIGNvbW1pdCBnaXZlbiBieSBleGFtcGxlLmNvbSdzCittYXN0ZXIgYnJhbmNoLiAgSW4gbW9yZSBkZXRhaWw6CisKK1tbZmV0Y2gtZmFzdC1mb3J3YXJkc11dCitnaXQgZmV0Y2ggYW5kIGZhc3QtZm9yd2FyZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2hlbiB1cGRhdGluZyBhbiBleGlzdGluZyBicmFuY2gsIGBnaXQgZmV0Y2hgCitjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCBvbiB0aGUgcmVtb3RlCiticmFuY2ggaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBtb3N0IHJlY2VudCBjb21taXQgb24geW91ciBjb3B5IG9mIHRoZQorYnJhbmNoIGJlZm9yZSB1cGRhdGluZyB5b3VyIGNvcHkgb2YgdGhlIGJyYW5jaCB0byBwb2ludCBhdCB0aGUgbmV3Citjb21taXQuICBHaXQgY2FsbHMgdGhpcyBwcm9jZXNzIGEgPDxmYXN0LWZvcndhcmRzLGZhc3QtZm9yd2FyZD4+LgorCitBIGZhc3QtZm9yd2FyZCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKyBvLS1vLS1vLS1vIDwtLSBvbGQgaGVhZCBvZiB0aGUgYnJhbmNoCisgICAgICAgICAgIFwKKyAgICAgICAgICAgIG8tLW8tLW8gPC0tIG5ldyBoZWFkIG9mIHRoZSBicmFuY2gKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCisKK0luIHNvbWUgY2FzZXMgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgbmV3IGhlYWQgd2lsbCAqbm90KiBhY3R1YWxseSBiZQorYSBkZXNjZW5kYW50IG9mIHRoZSBvbGQgaGVhZC4gIEZvciBleGFtcGxlLCB0aGUgZGV2ZWxvcGVyIG1heSBoYXZlCityZWFsaXplZCBzaGUgbWFkZSBhIHNlcmlvdXMgbWlzdGFrZSwgYW5kIGRlY2lkZWQgdG8gYmFja3RyYWNrLAorcmVzdWx0aW5nIGluIGEgc2l0dWF0aW9uIGxpa2U6CisKKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIG8tLW8tLW8tLW8tLWEtLWIgPC0tIG9sZCBoZWFkIG9mIHRoZSBicmFuY2gKKyAgICAgICAgICAgXAorICAgICAgICAgICAgby0tby0tbyA8LS0gbmV3IGhlYWQgb2YgdGhlIGJyYW5jaAorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0luIHRoaXMgY2FzZSwgYGdpdCBmZXRjaGAgd2lsbCBmYWlsLCBhbmQgcHJpbnQgb3V0IGEgd2FybmluZy4KKworSW4gdGhhdCBjYXNlLCB5b3UgY2FuIHN0aWxsIGZvcmNlIEdpdCB0byB1cGRhdGUgdG8gdGhlIG5ldyBoZWFkLCBhcworZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi4gIEhvd2V2ZXIsIG5vdGUgdGhhdCBpbiB0aGUKK3NpdHVhdGlvbiBhYm92ZSB0aGlzIG1heSBtZWFuIGxvc2luZyB0aGUgY29tbWl0cyBsYWJlbGVkIGBhYCBhbmQgYGJgLAordW5sZXNzIHlvdSd2ZSBhbHJlYWR5IGNyZWF0ZWQgYSByZWZlcmVuY2Ugb2YgeW91ciBvd24gcG9pbnRpbmcgdG8KK3RoZW0uCisKK1tbZm9yY2luZy1mZXRjaF1dCitGb3JjaW5nIGdpdCBmZXRjaCB0byBkbyBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBnaXQgZmV0Y2ggZmFpbHMgYmVjYXVzZSB0aGUgbmV3IGhlYWQgb2YgYSBicmFuY2ggaXMgbm90IGEKK2Rlc2NlbmRhbnQgb2YgdGhlIG9sZCBoZWFkLCB5b3UgbWF5IGZvcmNlIHRoZSB1cGRhdGUgd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgZmV0Y2ggZ2l0Oi8vZXhhbXBsZS5jb20vcHJvai5naXQgK21hc3RlcjpyZWZzL3JlbW90ZXMvZXhhbXBsZS9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGUgYWRkaXRpb24gb2YgdGhlIGArYCBzaWduLiAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIGAtZmAKK2ZsYWcgdG8gZm9yY2UgdXBkYXRlcyBvZiBhbGwgdGhlIGZldGNoZWQgYnJhbmNoZXMsIGFzIGluOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCAtZiBvcmlnaW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmUgYXdhcmUgdGhhdCBjb21taXRzIHRoYXQgdGhlIG9sZCB2ZXJzaW9uIG9mIGV4YW1wbGUvbWFzdGVyIHBvaW50ZWQgYXQKK21heSBiZSBsb3N0LCBhcyB3ZSBzYXcgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uCisKK1tbcmVtb3RlLWJyYW5jaC1jb25maWd1cmF0aW9uXV0KK0NvbmZpZ3VyaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dlIHNhdyBhYm92ZSB0aGF0IGBvcmlnaW5gIGlzIGp1c3QgYSBzaG9ydGN1dCB0byByZWZlciB0byB0aGUKK3JlcG9zaXRvcnkgdGhhdCB5b3Ugb3JpZ2luYWxseSBjbG9uZWQgZnJvbS4gIFRoaXMgaW5mb3JtYXRpb24gaXMKK3N0b3JlZCBpbiBHaXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMsIHdoaWNoIHlvdSBjYW4gc2VlIHVzaW5nCitsaW5rZ2l0OmdpdC1jb25maWdbMV06CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbmZpZyAtbAorY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbj0wCitjb3JlLmZpbGVtb2RlPXRydWUKK2NvcmUubG9nYWxscmVmdXBkYXRlcz10cnVlCityZW1vdGUub3JpZ2luLnVybD1naXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0CityZW1vdGUub3JpZ2luLmZldGNoPStyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qCiticmFuY2gubWFzdGVyLnJlbW90ZT1vcmlnaW4KK2JyYW5jaC5tYXN0ZXIubWVyZ2U9cmVmcy9oZWFkcy9tYXN0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlcmUgYXJlIG90aGVyIHJlcG9zaXRvcmllcyB0aGF0IHlvdSBhbHNvIHVzZSBmcmVxdWVudGx5LCB5b3UgY2FuCitjcmVhdGUgc2ltaWxhciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2F2ZSB0eXBpbmc7IGZvciBleGFtcGxlLAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZW1vdGUgYWRkIGV4YW1wbGUgZ2l0Oi8vZXhhbXBsZS5jb20vcHJvai5naXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWRkcyB0aGUgZm9sbG93aW5nIHRvIGAuZ2l0L2NvbmZpZ2A6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1tyZW1vdGUgImV4YW1wbGUiXQorCXVybCA9IGdpdDovL2V4YW1wbGUuY29tL3Byb2ouZ2l0CisJZmV0Y2ggPSArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9leGFtcGxlLyoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxzbyBub3RlIHRoYXQgdGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHBlcmZvcm1lZCBieSBkaXJlY3RseQorZWRpdGluZyB0aGUgZmlsZSBgLmdpdC9jb25maWdgIGluc3RlYWQgb2YgdXNpbmcgbGlua2dpdDpnaXQtcmVtb3RlWzFdLgorCitBZnRlciBjb25maWd1cmluZyB0aGUgcmVtb3RlLCB0aGUgZm9sbG93aW5nIHRocmVlIGNvbW1hbmRzIHdpbGwgZG8gdGhlCitzYW1lIHRoaW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBnaXQ6Ly9leGFtcGxlLmNvbS9wcm9qLmdpdCArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9leGFtcGxlLyoKKyQgZ2l0IGZldGNoIGV4YW1wbGUgK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZXhhbXBsZS8qCiskIGdpdCBmZXRjaCBleGFtcGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NlZSBsaW5rZ2l0OmdpdC1jb25maWdbMV0gZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgY29uZmlndXJhdGlvbgorb3B0aW9ucyBtZW50aW9uZWQgYWJvdmUgYW5kIGxpbmtnaXQ6Z2l0LWZldGNoWzFdIGZvciBtb3JlIGRldGFpbHMgb24KK3RoZSByZWZzcGVjIHN5bnRheC4KKworCitbW2dpdC1jb25jZXB0c11dCitHaXQgY29uY2VwdHMKKz09PT09PT09PT09PQorCitHaXQgaXMgYnVpbHQgb24gYSBzbWFsbCBudW1iZXIgb2Ygc2ltcGxlIGJ1dCBwb3dlcmZ1bCBpZGVhcy4gIFdoaWxlIGl0CitpcyBwb3NzaWJsZSB0byBnZXQgdGhpbmdzIGRvbmUgd2l0aG91dCB1bmRlcnN0YW5kaW5nIHRoZW0sIHlvdSB3aWxsIGZpbmQKK0dpdCBtdWNoIG1vcmUgaW50dWl0aXZlIGlmIHlvdSBkby4KKworV2Ugc3RhcnQgd2l0aCB0aGUgbW9zdCBpbXBvcnRhbnQsIHRoZSAgPDxkZWZfb2JqZWN0X2RhdGFiYXNlLG9iamVjdAorZGF0YWJhc2U+PiBhbmQgdGhlIDw8ZGVmX2luZGV4LGluZGV4Pj4uCisKK1tbdGhlLW9iamVjdC1kYXRhYmFzZV1dCitUaGUgT2JqZWN0IERhdGFiYXNlCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKworV2UgYWxyZWFkeSBzYXcgaW4gPDx1bmRlcnN0YW5kaW5nLWNvbW1pdHM+PiB0aGF0IGFsbCBjb21taXRzIGFyZSBzdG9yZWQKK3VuZGVyIGEgNDAtZGlnaXQgIm9iamVjdCBuYW1lIi4gIEluIGZhY3QsIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvCityZXByZXNlbnQgdGhlIGhpc3Rvcnkgb2YgYSBwcm9qZWN0IGlzIHN0b3JlZCBpbiBvYmplY3RzIHdpdGggc3VjaCBuYW1lcy4KK0luIGVhY2ggY2FzZSB0aGUgbmFtZSBpcyBjYWxjdWxhdGVkIGJ5IHRha2luZyB0aGUgU0hBLTEgaGFzaCBvZiB0aGUKK2NvbnRlbnRzIG9mIHRoZSBvYmplY3QuICBUaGUgU0hBLTEgaGFzaCBpcyBhIGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbi4KK1doYXQgdGhhdCBtZWFucyB0byB1cyBpcyB0aGF0IGl0IGlzIGltcG9zc2libGUgdG8gZmluZCB0d28gZGlmZmVyZW50CitvYmplY3RzIHdpdGggdGhlIHNhbWUgbmFtZS4gIFRoaXMgaGFzIGEgbnVtYmVyIG9mIGFkdmFudGFnZXM7IGFtb25nCitvdGhlcnM6CisKKy0gR2l0IGNhbiBxdWlja2x5IGRldGVybWluZSB3aGV0aGVyIHR3byBvYmplY3RzIGFyZSBpZGVudGljYWwgb3Igbm90LAorICBqdXN0IGJ5IGNvbXBhcmluZyBuYW1lcy4KKy0gU2luY2Ugb2JqZWN0IG5hbWVzIGFyZSBjb21wdXRlZCB0aGUgc2FtZSB3YXkgaW4gZXZlcnkgcmVwb3NpdG9yeSwgdGhlCisgIHNhbWUgY29udGVudCBzdG9yZWQgaW4gdHdvIHJlcG9zaXRvcmllcyB3aWxsIGFsd2F5cyBiZSBzdG9yZWQgdW5kZXIKKyAgdGhlIHNhbWUgbmFtZS4KKy0gR2l0IGNhbiBkZXRlY3QgZXJyb3JzIHdoZW4gaXQgcmVhZHMgYW4gb2JqZWN0LCBieSBjaGVja2luZyB0aGF0IHRoZQorICBvYmplY3QncyBuYW1lIGlzIHN0aWxsIHRoZSBTSEEtMSBoYXNoIG9mIGl0cyBjb250ZW50cy4KKworKFNlZSA8PG9iamVjdC1kZXRhaWxzPj4gZm9yIHRoZSBkZXRhaWxzIG9mIHRoZSBvYmplY3QgZm9ybWF0dGluZyBhbmQKK1NIQS0xIGNhbGN1bGF0aW9uLikKKworVGhlcmUgYXJlIGZvdXIgZGlmZmVyZW50IHR5cGVzIG9mIG9iamVjdHM6ICJibG9iIiwgInRyZWUiLCAiY29tbWl0IiwgYW5kCisidGFnIi4KKworLSBBIDw8ZGVmX2Jsb2Jfb2JqZWN0LCJibG9iIiBvYmplY3Q+PiBpcyB1c2VkIHRvIHN0b3JlIGZpbGUgZGF0YS4KKy0gQSA8PGRlZl90cmVlX29iamVjdCwidHJlZSIgb2JqZWN0Pj4gdGllcyBvbmUgb3IgbW9yZQorICAiYmxvYiIgb2JqZWN0cyBpbnRvIGEgZGlyZWN0b3J5IHN0cnVjdHVyZS4gSW4gYWRkaXRpb24sIGEgdHJlZSBvYmplY3QKKyAgY2FuIHJlZmVyIHRvIG90aGVyIHRyZWUgb2JqZWN0cywgdGh1cyBjcmVhdGluZyBhIGRpcmVjdG9yeSBoaWVyYXJjaHkuCistIEEgPDxkZWZfY29tbWl0X29iamVjdCwiY29tbWl0IiBvYmplY3Q+PiB0aWVzIHN1Y2ggZGlyZWN0b3J5IGhpZXJhcmNoaWVzCisgIHRvZ2V0aGVyIGludG8gYSA8PGRlZl9EQUcsZGlyZWN0ZWQgYWN5Y2xpYyBncmFwaD4+IG9mIHJldmlzaW9ucy0tZWFjaAorICBjb21taXQgY29udGFpbnMgdGhlIG9iamVjdCBuYW1lIG9mIGV4YWN0bHkgb25lIHRyZWUgZGVzaWduYXRpbmcgdGhlCisgIGRpcmVjdG9yeSBoaWVyYXJjaHkgYXQgdGhlIHRpbWUgb2YgdGhlIGNvbW1pdC4gSW4gYWRkaXRpb24sIGEgY29tbWl0CisgIHJlZmVycyB0byAicGFyZW50IiBjb21taXQgb2JqZWN0cyB0aGF0IGRlc2NyaWJlIHRoZSBoaXN0b3J5IG9mIGhvdyB3ZQorICBhcnJpdmVkIGF0IHRoYXQgZGlyZWN0b3J5IGhpZXJhcmNoeS4KKy0gQSA8PGRlZl90YWdfb2JqZWN0LCJ0YWciIG9iamVjdD4+IHN5bWJvbGljYWxseSBpZGVudGlmaWVzIGFuZCBjYW4gYmUKKyAgdXNlZCB0byBzaWduIG90aGVyIG9iamVjdHMuIEl0IGNvbnRhaW5zIHRoZSBvYmplY3QgbmFtZSBhbmQgdHlwZSBvZgorICBhbm90aGVyIG9iamVjdCwgYSBzeW1ib2xpYyBuYW1lIChvZiBjb3Vyc2UhKSBhbmQsIG9wdGlvbmFsbHksIGEKKyAgc2lnbmF0dXJlLgorCitUaGUgb2JqZWN0IHR5cGVzIGluIHNvbWUgbW9yZSBkZXRhaWw6CisKK1tbY29tbWl0LW9iamVjdF1dCitDb21taXQgT2JqZWN0Cit+fn5+fn5+fn5+fn5+CisKK1RoZSAiY29tbWl0IiBvYmplY3QgbGlua3MgYSBwaHlzaWNhbCBzdGF0ZSBvZiBhIHRyZWUgd2l0aCBhIGRlc2NyaXB0aW9uCitvZiBob3cgd2UgZ290IHRoZXJlIGFuZCB3aHkuICBVc2UgdGhlIGAtLXByZXR0eT1yYXdgIG9wdGlvbiB0bworbGlua2dpdDpnaXQtc2hvd1sxXSBvciBsaW5rZ2l0OmdpdC1sb2dbMV0gdG8gZXhhbWluZSB5b3VyIGZhdm9yaXRlCitjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyAtcyAtLXByZXR0eT1yYXcgMmJlN2ZjYjQ3NgorY29tbWl0IDJiZTdmY2I0NzY0ZjJkYmNlZTUyNjM1YjkxZmVkYjFiM2RjZjdhYjQKK3RyZWUgZmIzYThiZGQwY2VkZGQwMTk2MTVhZjRkNTdhNTNmNDNkOGNlZTJiZgorcGFyZW50IDI1N2E4NGQ5ZDAyZTkwNDQ3YjE0OWFmNThiMjcxYzE5NDA1ZWRiNmEKK2F1dGhvciBEYXZlIFdhdHNvbiA8ZHdhdHNvbkBtaW12aXN0YS5jb20+IDExODc1NzY4NzIgLTA0MDAKK2NvbW1pdHRlciBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+IDExODc1OTExNjMgLTA3MDAKKworICAgIEZpeCBtaXNzcGVsbGluZyBvZiAnc3VwcHJlc3MnIGluIGRvY3MKKworICAgIFNpZ25lZC1vZmYtYnk6IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB5b3UgY2FuIHNlZSwgYSBjb21taXQgaXMgZGVmaW5lZCBieToKKworLSBhIHRyZWU6IFRoZSBTSEEtMSBuYW1lIG9mIGEgdHJlZSBvYmplY3QgKGFzIGRlZmluZWQgYmVsb3cpLCByZXByZXNlbnRpbmcKKyAgdGhlIGNvbnRlbnRzIG9mIGEgZGlyZWN0b3J5IGF0IGEgY2VydGFpbiBwb2ludCBpbiB0aW1lLgorLSBwYXJlbnQocyk6IFRoZSBTSEEtMSBuYW1lKHMpIG9mIHNvbWUgbnVtYmVyIG9mIGNvbW1pdHMgd2hpY2ggcmVwcmVzZW50IHRoZQorICBpbW1lZGlhdGVseSBwcmV2aW91cyBzdGVwKHMpIGluIHRoZSBoaXN0b3J5IG9mIHRoZSBwcm9qZWN0LiAgVGhlCisgIGV4YW1wbGUgYWJvdmUgaGFzIG9uZSBwYXJlbnQ7IG1lcmdlIGNvbW1pdHMgbWF5IGhhdmUgbW9yZSB0aGFuCisgIG9uZS4gIEEgY29tbWl0IHdpdGggbm8gcGFyZW50cyBpcyBjYWxsZWQgYSAicm9vdCIgY29tbWl0LCBhbmQKKyAgcmVwcmVzZW50cyB0aGUgaW5pdGlhbCByZXZpc2lvbiBvZiBhIHByb2plY3QuICBFYWNoIHByb2plY3QgbXVzdCBoYXZlCisgIGF0IGxlYXN0IG9uZSByb290LiAgQSBwcm9qZWN0IGNhbiBhbHNvIGhhdmUgbXVsdGlwbGUgcm9vdHMsIHRob3VnaAorICB0aGF0IGlzbid0IGNvbW1vbiAob3IgbmVjZXNzYXJpbHkgYSBnb29kIGlkZWEpLgorLSBhbiBhdXRob3I6IFRoZSBuYW1lIG9mIHRoZSBwZXJzb24gcmVzcG9uc2libGUgZm9yIHRoaXMgY2hhbmdlLCB0b2dldGhlcgorICB3aXRoIGl0cyBkYXRlLgorLSBhIGNvbW1pdHRlcjogVGhlIG5hbWUgb2YgdGhlIHBlcnNvbiB3aG8gYWN0dWFsbHkgY3JlYXRlZCB0aGUgY29tbWl0LAorICB3aXRoIHRoZSBkYXRlIGl0IHdhcyBkb25lLiAgVGhpcyBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIGF1dGhvciwgZm9yCisgIGV4YW1wbGUsIGlmIHRoZSBhdXRob3Igd2FzIHNvbWVvbmUgd2hvIHdyb3RlIGEgcGF0Y2ggYW5kIGVtYWlsZWQgaXQKKyAgdG8gdGhlIHBlcnNvbiB3aG8gdXNlZCBpdCB0byBjcmVhdGUgdGhlIGNvbW1pdC4KKy0gYSBjb21tZW50IGRlc2NyaWJpbmcgdGhpcyBjb21taXQuCisKK05vdGUgdGhhdCBhIGNvbW1pdCBkb2VzIG5vdCBpdHNlbGYgY29udGFpbiBhbnkgaW5mb3JtYXRpb24gYWJvdXQgd2hhdAorYWN0dWFsbHkgY2hhbmdlZDsgYWxsIGNoYW5nZXMgYXJlIGNhbGN1bGF0ZWQgYnkgY29tcGFyaW5nIHRoZSBjb250ZW50cworb2YgdGhlIHRyZWUgcmVmZXJyZWQgdG8gYnkgdGhpcyBjb21taXQgd2l0aCB0aGUgdHJlZXMgYXNzb2NpYXRlZCB3aXRoCitpdHMgcGFyZW50cy4gIEluIHBhcnRpY3VsYXIsIEdpdCBkb2VzIG5vdCBhdHRlbXB0IHRvIHJlY29yZCBmaWxlIHJlbmFtZXMKK2V4cGxpY2l0bHksIHRob3VnaCBpdCBjYW4gaWRlbnRpZnkgY2FzZXMgd2hlcmUgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgc2FtZQorZmlsZSBkYXRhIGF0IGNoYW5naW5nIHBhdGhzIHN1Z2dlc3RzIGEgcmVuYW1lLiAgKFNlZSwgZm9yIGV4YW1wbGUsIHRoZQorYC1NYCBvcHRpb24gdG8gbGlua2dpdDpnaXQtZGlmZlsxXSkuCisKK0EgY29tbWl0IGlzIHVzdWFsbHkgY3JlYXRlZCBieSBsaW5rZ2l0OmdpdC1jb21taXRbMV0sIHdoaWNoIGNyZWF0ZXMgYQorY29tbWl0IHdob3NlIHBhcmVudCBpcyBub3JtYWxseSB0aGUgY3VycmVudCBIRUFELCBhbmQgd2hvc2UgdHJlZSBpcwordGFrZW4gZnJvbSB0aGUgY29udGVudCBjdXJyZW50bHkgc3RvcmVkIGluIHRoZSBpbmRleC4KKworW1t0cmVlLW9iamVjdF1dCitUcmVlIE9iamVjdAorfn5+fn5+fn5+fn4KKworVGhlIGV2ZXItdmVyc2F0aWxlIGxpbmtnaXQ6Z2l0LXNob3dbMV0gY29tbWFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvCitleGFtaW5lIHRyZWUgb2JqZWN0cywgYnV0IGxpbmtnaXQ6Z2l0LWxzLXRyZWVbMV0gd2lsbCBnaXZlIHlvdSBtb3JlCitkZXRhaWxzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLXRyZWUgZmIzYThiZGQwY2UKKzEwMDY0NCBibG9iIDYzYzkxOGM2NjdmYTAwNWZmMTJhZDg5NDM3ZjJmZGM4MDkyNmUyMWMgICAgLmdpdGlnbm9yZQorMTAwNjQ0IGJsb2IgNTUyOWIxOThlOGQxNGRlY2JlNGFkOTlkYjNmN2ZiNjMyZGUwNDM5ZCAgICAubWFpbG1hcAorMTAwNjQ0IGJsb2IgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyAgICBDT1BZSU5HCiswNDAwMDAgdHJlZSAyZmI3ODNlNDc3MTAwY2UwNzZmNmJmNTdlNGE2ZjAyNjAxM2RjNzQ1ICAgIERvY3VtZW50YXRpb24KKzEwMDc1NSBibG9iIDNjMDAzMmNlYzU5MmE3NjU2OTIyMzRmMWNiYTQ3ZGZkY2MzYTkyMDAgICAgR0lULVZFUlNJT04tR0VOCisxMDA2NDQgYmxvYiAyODliMDQ2YTQ0M2MwNjQ3NjI0NjA3ZDQ3MTI4OWIyYzdkY2Q0NzBiICAgIElOU1RBTEwKKzEwMDY0NCBibG9iIDRlYjQ2Mzc5N2FkYzY5M2RjMTY4YjkyNmI2OTMyZmY1M2YxN2QwYjEgICAgTWFrZWZpbGUKKzEwMDY0NCBibG9iIDU0ODE0MmMzMjdhNjc5MGZmODgyMWQ2N2MyZWUxZWZmN2E2NTZiNTIgICAgUkVBRE1FCisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyB5b3UgY2FuIHNlZSwgYSB0cmVlIG9iamVjdCBjb250YWlucyBhIGxpc3Qgb2YgZW50cmllcywgZWFjaCB3aXRoIGEKK21vZGUsIG9iamVjdCB0eXBlLCBTSEEtMSBuYW1lLCBhbmQgbmFtZSwgc29ydGVkIGJ5IG5hbWUuICBJdCByZXByZXNlbnRzCit0aGUgY29udGVudHMgb2YgYSBzaW5nbGUgZGlyZWN0b3J5IHRyZWUuCisKK1RoZSBvYmplY3QgdHlwZSBtYXkgYmUgYSBibG9iLCByZXByZXNlbnRpbmcgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSwgb3IKK2Fub3RoZXIgdHJlZSwgcmVwcmVzZW50aW5nIHRoZSBjb250ZW50cyBvZiBhIHN1YmRpcmVjdG9yeS4gIFNpbmNlIHRyZWVzCithbmQgYmxvYnMsIGxpa2UgYWxsIG90aGVyIG9iamVjdHMsIGFyZSBuYW1lZCBieSB0aGUgU0hBLTEgaGFzaCBvZiB0aGVpcgorY29udGVudHMsIHR3byB0cmVlcyBoYXZlIHRoZSBzYW1lIFNIQS0xIG5hbWUgaWYgYW5kIG9ubHkgaWYgdGhlaXIKK2NvbnRlbnRzIChpbmNsdWRpbmcsIHJlY3Vyc2l2ZWx5LCB0aGUgY29udGVudHMgb2YgYWxsIHN1YmRpcmVjdG9yaWVzKQorYXJlIGlkZW50aWNhbC4gIFRoaXMgYWxsb3dzIEdpdCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgZGlmZmVyZW5jZXMKK2JldHdlZW4gdHdvIHJlbGF0ZWQgdHJlZSBvYmplY3RzLCBzaW5jZSBpdCBjYW4gaWdub3JlIGFueSBlbnRyaWVzIHdpdGgKK2lkZW50aWNhbCBvYmplY3QgbmFtZXMuCisKKyhOb3RlOiBpbiB0aGUgcHJlc2VuY2Ugb2Ygc3VibW9kdWxlcywgdHJlZXMgbWF5IGFsc28gaGF2ZSBjb21taXRzIGFzCitlbnRyaWVzLiAgU2VlIDw8c3VibW9kdWxlcz4+IGZvciBkb2N1bWVudGF0aW9uLikKKworTm90ZSB0aGF0IHRoZSBmaWxlcyBhbGwgaGF2ZSBtb2RlIDY0NCBvciA3NTU6IEdpdCBhY3R1YWxseSBvbmx5IHBheXMKK2F0dGVudGlvbiB0byB0aGUgZXhlY3V0YWJsZSBiaXQuCisKK1tbYmxvYi1vYmplY3RdXQorQmxvYiBPYmplY3QKK35+fn5+fn5+fn5+CisKK1lvdSBjYW4gdXNlIGxpbmtnaXQ6Z2l0LXNob3dbMV0gdG8gZXhhbWluZSB0aGUgY29udGVudHMgb2YgYSBibG9iOyB0YWtlLAorZm9yIGV4YW1wbGUsIHRoZSBibG9iIGluIHRoZSBlbnRyeSBmb3IgYENPUFlJTkdgIGZyb20gdGhlIHRyZWUgYWJvdmU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyA2ZmY4N2M0NjY0CisKKyBOb3RlIHRoYXQgdGhlIG9ubHkgdmFsaWQgdmVyc2lvbiBvZiB0aGUgR1BMIGFzIGZhciBhcyB0aGlzIHByb2plY3QKKyBpcyBjb25jZXJuZWQgaXMgX3RoaXNfIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSAoaWUgdjIsIG5vdAorIHYyLjIgb3IgdjMueCBvciB3aGF0ZXZlciksIHVubGVzcyBleHBsaWNpdGx5IG90aGVyd2lzZSBzdGF0ZWQuCisuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBICJibG9iIiBvYmplY3QgaXMgbm90aGluZyBidXQgYSBiaW5hcnkgYmxvYiBvZiBkYXRhLiAgSXQgZG9lc24ndCByZWZlcgordG8gYW55dGhpbmcgZWxzZSBvciBoYXZlIGF0dHJpYnV0ZXMgb2YgYW55IGtpbmQuCisKK1NpbmNlIHRoZSBibG9iIGlzIGVudGlyZWx5IGRlZmluZWQgYnkgaXRzIGRhdGEsIGlmIHR3byBmaWxlcyBpbiBhCitkaXJlY3RvcnkgdHJlZSAob3IgaW4gbXVsdGlwbGUgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSByZXBvc2l0b3J5KQoraGF2ZSB0aGUgc2FtZSBjb250ZW50cywgdGhleSB3aWxsIHNoYXJlIHRoZSBzYW1lIGJsb2Igb2JqZWN0LiBUaGUgb2JqZWN0CitpcyB0b3RhbGx5IGluZGVwZW5kZW50IG9mIGl0cyBsb2NhdGlvbiBpbiB0aGUgZGlyZWN0b3J5IHRyZWUsIGFuZAorcmVuYW1pbmcgYSBmaWxlIGRvZXMgbm90IGNoYW5nZSB0aGUgb2JqZWN0IHRoYXQgZmlsZSBpcyBhc3NvY2lhdGVkIHdpdGguCisKK05vdGUgdGhhdCBhbnkgdHJlZSBvciBibG9iIG9iamVjdCBjYW4gYmUgZXhhbWluZWQgdXNpbmcKK2xpbmtnaXQ6Z2l0LXNob3dbMV0gd2l0aCB0aGUgPHJldmlzaW9uPjo8cGF0aD4gc3ludGF4LiAgVGhpcyBjYW4KK3NvbWV0aW1lcyBiZSB1c2VmdWwgZm9yIGJyb3dzaW5nIHRoZSBjb250ZW50cyBvZiBhIHRyZWUgdGhhdCBpcyBub3QKK2N1cnJlbnRseSBjaGVja2VkIG91dC4KKworW1t0cnVzdF1dCitUcnVzdAorfn5+fn4KKworSWYgeW91IHJlY2VpdmUgdGhlIFNIQS0xIG5hbWUgb2YgYSBibG9iIGZyb20gb25lIHNvdXJjZSwgYW5kIGl0cyBjb250ZW50cworZnJvbSBhbm90aGVyIChwb3NzaWJseSB1bnRydXN0ZWQpIHNvdXJjZSwgeW91IGNhbiBzdGlsbCB0cnVzdCB0aGF0IHRob3NlCitjb250ZW50cyBhcmUgY29ycmVjdCBhcyBsb25nIGFzIHRoZSBTSEEtMSBuYW1lIGFncmVlcy4gIFRoaXMgaXMgYmVjYXVzZQordGhlIFNIQS0xIGlzIGRlc2lnbmVkIHNvIHRoYXQgaXQgaXMgaW5mZWFzaWJsZSB0byBmaW5kIGRpZmZlcmVudCBjb250ZW50cwordGhhdCBwcm9kdWNlIHRoZSBzYW1lIGhhc2guCisKK1NpbWlsYXJseSwgeW91IG5lZWQgb25seSB0cnVzdCB0aGUgU0hBLTEgbmFtZSBvZiBhIHRvcC1sZXZlbCB0cmVlIG9iamVjdAordG8gdHJ1c3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBlbnRpcmUgZGlyZWN0b3J5IHRoYXQgaXQgcmVmZXJzIHRvLCBhbmQgaWYKK3lvdSByZWNlaXZlIHRoZSBTSEEtMSBuYW1lIG9mIGEgY29tbWl0IGZyb20gYSB0cnVzdGVkIHNvdXJjZSwgdGhlbiB5b3UKK2NhbiBlYXNpbHkgdmVyaWZ5IHRoZSBlbnRpcmUgaGlzdG9yeSBvZiBjb21taXRzIHJlYWNoYWJsZSB0aHJvdWdoCitwYXJlbnRzIG9mIHRoYXQgY29tbWl0LCBhbmQgYWxsIG9mIHRob3NlIGNvbnRlbnRzIG9mIHRoZSB0cmVlcyByZWZlcnJlZAordG8gYnkgdGhvc2UgY29tbWl0cy4KKworU28gdG8gaW50cm9kdWNlIHNvbWUgcmVhbCB0cnVzdCBpbiB0aGUgc3lzdGVtLCB0aGUgb25seSB0aGluZyB5b3UgbmVlZAordG8gZG8gaXMgdG8gZGlnaXRhbGx5IHNpZ24ganVzdCAnb25lJyBzcGVjaWFsIG5vdGUsIHdoaWNoIGluY2x1ZGVzIHRoZQorbmFtZSBvZiBhIHRvcC1sZXZlbCBjb21taXQuICBZb3VyIGRpZ2l0YWwgc2lnbmF0dXJlIHNob3dzIG90aGVycwordGhhdCB5b3UgdHJ1c3QgdGhhdCBjb21taXQsIGFuZCB0aGUgaW1tdXRhYmlsaXR5IG9mIHRoZSBoaXN0b3J5IG9mCitjb21taXRzIHRlbGxzIG90aGVycyB0aGF0IHRoZXkgY2FuIHRydXN0IHRoZSB3aG9sZSBoaXN0b3J5LgorCitJbiBvdGhlciB3b3JkcywgeW91IGNhbiBlYXNpbHkgdmFsaWRhdGUgYSB3aG9sZSBhcmNoaXZlIGJ5IGp1c3QKK3NlbmRpbmcgb3V0IGEgc2luZ2xlIGVtYWlsIHRoYXQgdGVsbHMgdGhlIHBlb3BsZSB0aGUgbmFtZSAoU0hBLTEgaGFzaCkKK29mIHRoZSB0b3AgY29tbWl0LCBhbmQgZGlnaXRhbGx5IHNpZ24gdGhhdCBlbWFpbCB1c2luZyBzb21ldGhpbmcKK2xpa2UgR1BHL1BHUC4KKworVG8gYXNzaXN0IGluIHRoaXMsIEdpdCBhbHNvIHByb3ZpZGVzIHRoZSB0YWcgb2JqZWN0Li4uCisKK1tbdGFnLW9iamVjdF1dCitUYWcgT2JqZWN0Cit+fn5+fn5+fn5+CisKK0EgdGFnIG9iamVjdCBjb250YWlucyBhbiBvYmplY3QsIG9iamVjdCB0eXBlLCB0YWcgbmFtZSwgdGhlIG5hbWUgb2YgdGhlCitwZXJzb24gKCJ0YWdnZXIiKSB3aG8gY3JlYXRlZCB0aGUgdGFnLCBhbmQgYSBtZXNzYWdlLCB3aGljaCBtYXkgY29udGFpbgorYSBzaWduYXR1cmUsIGFzIGNhbiBiZSBzZWVuIHVzaW5nIGxpbmtnaXQ6Z2l0LWNhdC1maWxlWzFdOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIHRhZyB2MS41LjAKK29iamVjdCA0MzdiMWIyMGRmNGIzNTZjOTM0MmRhYzhkMzg4NDlmMjRlZjQ0ZjI3Cit0eXBlIGNvbW1pdAordGFnIHYxLjUuMAordGFnZ2VyIEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4gMTE3MTQxMTIwMCArMDAwMAorCitHSVQgMS41LjAKKy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCitWZXJzaW9uOiBHbnVQRyB2MS40LjYgKEdOVS9MaW51eCkKKworaUQ4REJRQkYwbEdxd01iWnBQTVJtNW9SQXVSaUFKOW9oQkxkN3Mya3Fqa0tscTFxcUM1N1Nibm16UUNkRzR1aQorbkxFL0w5YVVYZFdlVEZQcm9uOTZETEE9Cis9MkUrMAorLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VlIHRoZSBsaW5rZ2l0OmdpdC10YWdbMV0gY29tbWFuZCB0byBsZWFybiBob3cgdG8gY3JlYXRlIGFuZCB2ZXJpZnkgdGFnCitvYmplY3RzLiAgKE5vdGUgdGhhdCBsaW5rZ2l0OmdpdC10YWdbMV0gY2FuIGFsc28gYmUgdXNlZCB0byBjcmVhdGUKKyJsaWdodHdlaWdodCB0YWdzIiwgd2hpY2ggYXJlIG5vdCB0YWcgb2JqZWN0cyBhdCBhbGwsIGJ1dCBqdXN0IHNpbXBsZQorcmVmZXJlbmNlcyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoIGByZWZzL3RhZ3MvYCkuCisKK1tbcGFjay1maWxlc11dCitIb3cgR2l0IHN0b3JlcyBvYmplY3RzIGVmZmljaWVudGx5OiBwYWNrIGZpbGVzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK05ld2x5IGNyZWF0ZWQgb2JqZWN0cyBhcmUgaW5pdGlhbGx5IGNyZWF0ZWQgaW4gYSBmaWxlIG5hbWVkIGFmdGVyIHRoZQorb2JqZWN0J3MgU0hBLTEgaGFzaCAoc3RvcmVkIGluIGAuZ2l0L29iamVjdHNgKS4KKworVW5mb3J0dW5hdGVseSB0aGlzIHN5c3RlbSBiZWNvbWVzIGluZWZmaWNpZW50IG9uY2UgYSBwcm9qZWN0IGhhcyBhCitsb3Qgb2Ygb2JqZWN0cy4gIFRyeSB0aGlzIG9uIGFuIG9sZCBwcm9qZWN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvdW50LW9iamVjdHMKKzY5MzAgb2JqZWN0cywgNDc2MjAga2lsb2J5dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZpcnN0IG51bWJlciBpcyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgd2hpY2ggYXJlIGtlcHQgaW4KK2luZGl2aWR1YWwgZmlsZXMuICBUaGUgc2Vjb25kIGlzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdGFrZW4gdXAgYnkKK3Rob3NlICJsb29zZSIgb2JqZWN0cy4KKworWW91IGNhbiBzYXZlIHNwYWNlIGFuZCBtYWtlIEdpdCBmYXN0ZXIgYnkgbW92aW5nIHRoZXNlIGxvb3NlIG9iamVjdHMgaW4KK3RvIGEgInBhY2sgZmlsZSIsIHdoaWNoIHN0b3JlcyBhIGdyb3VwIG9mIG9iamVjdHMgaW4gYW4gZWZmaWNpZW50Citjb21wcmVzc2VkIGZvcm1hdDsgdGhlIGRldGFpbHMgb2YgaG93IHBhY2sgZmlsZXMgYXJlIGZvcm1hdHRlZCBjYW4gYmUKK2ZvdW5kIGluIGxpbms6dGVjaG5pY2FsL3BhY2stZm9ybWF0Lmh0bWxbcGFjayBmb3JtYXRdLgorCitUbyBwdXQgdGhlIGxvb3NlIG9iamVjdHMgaW50byBhIHBhY2ssIGp1c3QgcnVuIGdpdCByZXBhY2s6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVwYWNrCitDb3VudGluZyBvYmplY3RzOiA2MDIwLCBkb25lLgorRGVsdGEgY29tcHJlc3Npb24gdXNpbmcgdXAgdG8gNCB0aHJlYWRzLgorQ29tcHJlc3Npbmcgb2JqZWN0czogMTAwJSAoNjAyMC82MDIwKSwgZG9uZS4KK1dyaXRpbmcgb2JqZWN0czogMTAwJSAoNjAyMC82MDIwKSwgZG9uZS4KK1RvdGFsIDYwMjAgKGRlbHRhIDQwNzApLCByZXVzZWQgMCAoZGVsdGEgMCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGNyZWF0ZXMgYSBzaW5nbGUgInBhY2sgZmlsZSIgaW4gLmdpdC9vYmplY3RzL3BhY2svCitjb250YWluaW5nIGFsbCBjdXJyZW50bHkgdW5wYWNrZWQgb2JqZWN0cy4gIFlvdSBjYW4gdGhlbiBydW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwcnVuZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHJlbW92ZSBhbnkgb2YgdGhlICJsb29zZSIgb2JqZWN0cyB0aGF0IGFyZSBub3cgY29udGFpbmVkIGluIHRoZQorcGFjay4gIFRoaXMgd2lsbCBhbHNvIHJlbW92ZSBhbnkgdW5yZWZlcmVuY2VkIG9iamVjdHMgKHdoaWNoIG1heSBiZQorY3JlYXRlZCB3aGVuLCBmb3IgZXhhbXBsZSwgeW91IHVzZSBgZ2l0IHJlc2V0YCB0byByZW1vdmUgYSBjb21taXQpLgorWW91IGNhbiB2ZXJpZnkgdGhhdCB0aGUgbG9vc2Ugb2JqZWN0cyBhcmUgZ29uZSBieSBsb29raW5nIGF0IHRoZQorYC5naXQvb2JqZWN0c2AgZGlyZWN0b3J5IG9yIGJ5IHJ1bm5pbmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjb3VudC1vYmplY3RzCiswIG9iamVjdHMsIDAga2lsb2J5dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWx0aG91Z2ggdGhlIG9iamVjdCBmaWxlcyBhcmUgZ29uZSwgYW55IGNvbW1hbmRzIHRoYXQgcmVmZXIgdG8gdGhvc2UKK29iamVjdHMgd2lsbCB3b3JrIGV4YWN0bHkgYXMgdGhleSBkaWQgYmVmb3JlLgorCitUaGUgbGlua2dpdDpnaXQtZ2NbMV0gY29tbWFuZCBwZXJmb3JtcyBwYWNraW5nLCBwcnVuaW5nLCBhbmQgbW9yZSBmb3IKK3lvdSwgc28gaXMgbm9ybWFsbHkgdGhlIG9ubHkgaGlnaC1sZXZlbCBjb21tYW5kIHlvdSBuZWVkLgorCitbW2RhbmdsaW5nLW9iamVjdHNdXQorRGFuZ2xpbmcgb2JqZWN0cworfn5+fn5+fn5+fn5+fn5+fgorCitUaGUgbGlua2dpdDpnaXQtZnNja1sxXSBjb21tYW5kIHdpbGwgc29tZXRpbWVzIGNvbXBsYWluIGFib3V0IGRhbmdsaW5nCitvYmplY3RzLiAgVGhleSBhcmUgbm90IGEgcHJvYmxlbS4KKworVGhlIG1vc3QgY29tbW9uIGNhdXNlIG9mIGRhbmdsaW5nIG9iamVjdHMgaXMgdGhhdCB5b3UndmUgcmViYXNlZCBhCiticmFuY2gsIG9yIHlvdSBoYXZlIHB1bGxlZCBmcm9tIHNvbWVib2R5IGVsc2Ugd2hvIHJlYmFzZWQgYSBicmFuY2gtLXNlZQorPDxjbGVhbmluZy11cC1oaXN0b3J5Pj4uICBJbiB0aGF0IGNhc2UsIHRoZSBvbGQgaGVhZCBvZiB0aGUgb3JpZ2luYWwKK2JyYW5jaCBzdGlsbCBleGlzdHMsIGFzIGRvZXMgZXZlcnl0aGluZyBpdCBwb2ludGVkIHRvLiBUaGUgYnJhbmNoCitwb2ludGVyIGl0c2VsZiBqdXN0IGRvZXNuJ3QsIHNpbmNlIHlvdSByZXBsYWNlZCBpdCB3aXRoIGFub3RoZXIgb25lLgorCitUaGVyZSBhcmUgYWxzbyBvdGhlciBzaXR1YXRpb25zIHRoYXQgY2F1c2UgZGFuZ2xpbmcgb2JqZWN0cy4gRm9yCitleGFtcGxlLCBhICJkYW5nbGluZyBibG9iIiBtYXkgYXJpc2UgYmVjYXVzZSB5b3UgZGlkIGEgYGdpdCBhZGRgIG9mIGEKK2ZpbGUsIGJ1dCB0aGVuLCBiZWZvcmUgeW91IGFjdHVhbGx5IGNvbW1pdHRlZCBpdCBhbmQgbWFkZSBpdCBwYXJ0IG9mIHRoZQorYmlnZ2VyIHBpY3R1cmUsIHlvdSBjaGFuZ2VkIHNvbWV0aGluZyBlbHNlIGluIHRoYXQgZmlsZSBhbmQgY29tbWl0dGVkCit0aGF0ICp1cGRhdGVkKiB0aGluZy0tdGhlIG9sZCBzdGF0ZSB0aGF0IHlvdSBhZGRlZCBvcmlnaW5hbGx5IGVuZHMgdXAKK25vdCBiZWluZyBwb2ludGVkIHRvIGJ5IGFueSBjb21taXQgb3IgdHJlZSwgc28gaXQncyBub3cgYSBkYW5nbGluZyBibG9iCitvYmplY3QuCisKK1NpbWlsYXJseSwgd2hlbiB0aGUgInJlY3Vyc2l2ZSIgbWVyZ2Ugc3RyYXRlZ3kgcnVucywgYW5kIGZpbmRzIHRoYXQKK3RoZXJlIGFyZSBjcmlzcy1jcm9zcyBtZXJnZXMgYW5kIHRodXMgbW9yZSB0aGFuIG9uZSBtZXJnZSBiYXNlICh3aGljaCBpcworZmFpcmx5IHVudXN1YWwsIGJ1dCBpdCBkb2VzIGhhcHBlbiksIGl0IHdpbGwgZ2VuZXJhdGUgb25lIHRlbXBvcmFyeQorbWlkd2F5IHRyZWUgKG9yIHBvc3NpYmx5IGV2ZW4gbW9yZSwgaWYgeW91IGhhZCBsb3RzIG9mIGNyaXNzLWNyb3NzaW5nCittZXJnZXMgYW5kIG1vcmUgdGhhbiB0d28gbWVyZ2UgYmFzZXMpIGFzIGEgdGVtcG9yYXJ5IGludGVybmFsIG1lcmdlCitiYXNlLCBhbmQgYWdhaW4sIHRob3NlIGFyZSByZWFsIG9iamVjdHMsIGJ1dCB0aGUgZW5kIHJlc3VsdCB3aWxsIG5vdCBlbmQKK3VwIHBvaW50aW5nIHRvIHRoZW0sIHNvIHRoZXkgZW5kIHVwICJkYW5nbGluZyIgaW4geW91ciByZXBvc2l0b3J5LgorCitHZW5lcmFsbHksIGRhbmdsaW5nIG9iamVjdHMgYXJlbid0IGFueXRoaW5nIHRvIHdvcnJ5IGFib3V0LiBUaGV5IGNhbgorZXZlbiBiZSB2ZXJ5IHVzZWZ1bDogaWYgeW91IHNjcmV3IHNvbWV0aGluZyB1cCwgdGhlIGRhbmdsaW5nIG9iamVjdHMgY2FuCitiZSBob3cgeW91IHJlY292ZXIgeW91ciBvbGQgdHJlZSAoc2F5LCB5b3UgZGlkIGEgcmViYXNlLCBhbmQgcmVhbGl6ZWQKK3RoYXQgeW91IHJlYWxseSBkaWRuJ3Qgd2FudCB0by0teW91IGNhbiBsb29rIGF0IHdoYXQgZGFuZ2xpbmcgb2JqZWN0cworeW91IGhhdmUsIGFuZCBkZWNpZGUgdG8gcmVzZXQgeW91ciBoZWFkIHRvIHNvbWUgb2xkIGRhbmdsaW5nIHN0YXRlKS4KKworRm9yIGNvbW1pdHMsIHlvdSBjYW4ganVzdCB1c2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXRrIDxkYW5nbGluZy1jb21taXQtc2hhLWdvZXMtaGVyZT4gLS1ub3QgLS1hbGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGFza3MgZm9yIGFsbCB0aGUgaGlzdG9yeSByZWFjaGFibGUgZnJvbSB0aGUgZ2l2ZW4gY29tbWl0IGJ1dCBub3QKK2Zyb20gYW55IGJyYW5jaCwgdGFnLCBvciBvdGhlciByZWZlcmVuY2UuICBJZiB5b3UgZGVjaWRlIGl0J3Mgc29tZXRoaW5nCit5b3Ugd2FudCwgeW91IGNhbiBhbHdheXMgY3JlYXRlIGEgbmV3IHJlZmVyZW5jZSB0byBpdCwgZS5nLiwKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2ggcmVjb3ZlcmVkLWJyYW5jaCA8ZGFuZ2xpbmctY29tbWl0LXNoYS1nb2VzLWhlcmU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGJsb2JzIGFuZCB0cmVlcywgeW91IGNhbid0IGRvIHRoZSBzYW1lLCBidXQgeW91IGNhbiBzdGlsbCBleGFtaW5lCit0aGVtLiAgWW91IGNhbiBqdXN0IGRvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc2hvdyA8ZGFuZ2xpbmctYmxvYi90cmVlLXNoYS1nb2VzLWhlcmU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordG8gc2hvdyB3aGF0IHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiB3ZXJlIChvciwgZm9yIGEgdHJlZSwgYmFzaWNhbGx5Cit3aGF0IHRoZSBgbHNgIGZvciB0aGF0IGRpcmVjdG9yeSB3YXMpLCBhbmQgdGhhdCBtYXkgZ2l2ZSB5b3Ugc29tZSBpZGVhCitvZiB3aGF0IHRoZSBvcGVyYXRpb24gd2FzIHRoYXQgbGVmdCB0aGF0IGRhbmdsaW5nIG9iamVjdC4KKworVXN1YWxseSwgZGFuZ2xpbmcgYmxvYnMgYW5kIHRyZWVzIGFyZW4ndCB2ZXJ5IGludGVyZXN0aW5nLiBUaGV5J3JlCithbG1vc3QgYWx3YXlzIHRoZSByZXN1bHQgb2YgZWl0aGVyIGJlaW5nIGEgaGFsZi13YXkgbWVyZ2ViYXNlICh0aGUgYmxvYgord2lsbCBvZnRlbiBldmVuIGhhdmUgdGhlIGNvbmZsaWN0IG1hcmtlcnMgZnJvbSBhIG1lcmdlIGluIGl0LCBpZiB5b3UKK2hhdmUgaGFkIGNvbmZsaWN0aW5nIG1lcmdlcyB0aGF0IHlvdSBmaXhlZCB1cCBieSBoYW5kKSwgb3Igc2ltcGx5CitiZWNhdXNlIHlvdSBpbnRlcnJ1cHRlZCBhIGBnaXQgZmV0Y2hgIHdpdGggXkMgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCwKK2xlYXZpbmcgX3NvbWVfIG9mIHRoZSBuZXcgb2JqZWN0cyBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLCBidXQganVzdAorZGFuZ2xpbmcgYW5kIHVzZWxlc3MuCisKK0FueXdheSwgb25jZSB5b3UgYXJlIHN1cmUgdGhhdCB5b3UncmUgbm90IGludGVyZXN0ZWQgaW4gYW55IGRhbmdsaW5nCitzdGF0ZSwgeW91IGNhbiBqdXN0IHBydW5lIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHBydW5lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoZXknbGwgYmUgZ29uZS4gKFlvdSBzaG91bGQgb25seSBydW4gYGdpdCBwcnVuZWAgb24gYSBxdWllc2NlbnQKK3JlcG9zaXRvcnktLWl0J3Mga2luZCBvZiBsaWtlIGRvaW5nIGEgZmlsZXN5c3RlbSBmc2NrIHJlY292ZXJ5OiB5b3UKK2Rvbid0IHdhbnQgdG8gZG8gdGhhdCB3aGlsZSB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkLgorYGdpdCBwcnVuZWAgaXMgZGVzaWduZWQgbm90IHRvIGNhdXNlIGFueSBoYXJtIGluIHN1Y2ggY2FzZXMgb2YgY29uY3VycmVudAorYWNjZXNzZXMgdG8gYSByZXBvc2l0b3J5IGJ1dCB5b3UgbWlnaHQgcmVjZWl2ZSBjb25mdXNpbmcgb3Igc2NhcnkgbWVzc2FnZXMuKQorCitbW3JlY292ZXJpbmctZnJvbS1yZXBvc2l0b3J5LWNvcnJ1cHRpb25dXQorUmVjb3ZlcmluZyBmcm9tIHJlcG9zaXRvcnkgY29ycnVwdGlvbgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitCeSBkZXNpZ24sIEdpdCB0cmVhdHMgZGF0YSB0cnVzdGVkIHRvIGl0IHdpdGggY2F1dGlvbi4gIEhvd2V2ZXIsIGV2ZW4gaW4KK3RoZSBhYnNlbmNlIG9mIGJ1Z3MgaW4gR2l0IGl0c2VsZiwgaXQgaXMgc3RpbGwgcG9zc2libGUgdGhhdCBoYXJkd2FyZSBvcgorb3BlcmF0aW5nIHN5c3RlbSBlcnJvcnMgY291bGQgY29ycnVwdCBkYXRhLgorCitUaGUgZmlyc3QgZGVmZW5zZSBhZ2FpbnN0IHN1Y2ggcHJvYmxlbXMgaXMgYmFja3Vwcy4gIFlvdSBjYW4gYmFjayB1cCBhCitHaXQgZGlyZWN0b3J5IHVzaW5nIGNsb25lLCBvciBqdXN0IHVzaW5nIGNwLCB0YXIsIG9yIGFueSBvdGhlciBiYWNrdXAKK21lY2hhbmlzbS4KKworQXMgYSBsYXN0IHJlc29ydCwgeW91IGNhbiBzZWFyY2ggZm9yIHRoZSBjb3JydXB0ZWQgb2JqZWN0cyBhbmQgYXR0ZW1wdAordG8gcmVwbGFjZSB0aGVtIGJ5IGhhbmQuICBCYWNrIHVwIHlvdXIgcmVwb3NpdG9yeSBiZWZvcmUgYXR0ZW1wdGluZyB0aGlzCitpbiBjYXNlIHlvdSBjb3JydXB0IHRoaW5ncyBldmVuIG1vcmUgaW4gdGhlIHByb2Nlc3MuCisKK1dlJ2xsIGFzc3VtZSB0aGF0IHRoZSBwcm9ibGVtIGlzIGEgc2luZ2xlIG1pc3Npbmcgb3IgY29ycnVwdGVkIGJsb2IsCit3aGljaCBpcyBzb21ldGltZXMgYSBzb2x2YWJsZSBwcm9ibGVtLiAgKFJlY292ZXJpbmcgbWlzc2luZyB0cmVlcyBhbmQKK2VzcGVjaWFsbHkgY29tbWl0cyBpcyAqbXVjaCogaGFyZGVyKS4KKworQmVmb3JlIHN0YXJ0aW5nLCB2ZXJpZnkgdGhhdCB0aGVyZSBpcyBjb3JydXB0aW9uLCBhbmQgZmlndXJlIG91dCB3aGVyZQoraXQgaXMgd2l0aCBsaW5rZ2l0OmdpdC1mc2NrWzFdOyB0aGlzIG1heSBiZSB0aW1lLWNvbnN1bWluZy4KKworQXNzdW1lIHRoZSBvdXRwdXQgbG9va3MgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZzY2sgLS1mdWxsIC0tbm8tZGFuZ2xpbmcKK2Jyb2tlbiBsaW5rIGZyb20gICAgdHJlZSAyZDkyNjNjNmQyMzU5NWU3Y2IyYTIxZTVlYmJiNTM2NTUyNzhkZmY4CisgICAgICAgICAgICAgIHRvICAgIGJsb2IgNGI5NDU4YjM3ODYyMjgzNjljNjM5MzZkYjY1ODI3ZGUzY2MwNjIwMAorbWlzc2luZyBibG9iIDRiOTQ1OGIzNzg2MjI4MzY5YzYzOTM2ZGI2NTgyN2RlM2NjMDYyMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3cgeW91IGtub3cgdGhhdCBibG9iIDRiOTQ1OGIzIGlzIG1pc3NpbmcsIGFuZCB0aGF0IHRoZSB0cmVlIDJkOTI2M2M2Citwb2ludHMgdG8gaXQuICBJZiB5b3UgY291bGQgZmluZCBqdXN0IG9uZSBjb3B5IG9mIHRoYXQgbWlzc2luZyBibG9iCitvYmplY3QsIHBvc3NpYmx5IGluIHNvbWUgb3RoZXIgcmVwb3NpdG9yeSwgeW91IGNvdWxkIG1vdmUgaXQgaW50bworYC5naXQvb2JqZWN0cy80Yi85NDU4YjMuLi5gIGFuZCBiZSBkb25lLiAgU3VwcG9zZSB5b3UgY2FuJ3QuICBZb3UgY2FuCitzdGlsbCBleGFtaW5lIHRoZSB0cmVlIHRoYXQgcG9pbnRlZCB0byBpdCB3aXRoIGxpbmtnaXQ6Z2l0LWxzLXRyZWVbMV0sCit3aGljaCBtaWdodCBvdXRwdXQgc29tZXRoaW5nIGxpa2U6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgbHMtdHJlZSAyZDkyNjNjNmQyMzU5NWU3Y2IyYTIxZTVlYmJiNTM2NTUyNzhkZmY4CisxMDA2NDQgYmxvYiA4ZDE0NTMxODQ2Yjk1YmZhMzU2NGI1OGNjZmI3OTEzYTAzNDMyM2I4CS5naXRpZ25vcmUKKzEwMDY0NCBibG9iIGViZjliZjg0ZGEwYWFiNWVkOTQ0MjY0YTVkYjJhNjVmZTNhM2U4ODMJLm1haWxtYXAKKzEwMDY0NCBibG9iIGNhNDQyZDMxM2Q4NmRjNjdlMGEyZTVkNTg0YjQ2NWJkMzgyY2JmNWMJQ09QWUlORworLi4uCisxMDA2NDQgYmxvYiA0Yjk0NThiMzc4NjIyODM2OWM2MzkzNmRiNjU4MjdkZTNjYzA2MjAwCW15ZmlsZQorLi4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU28gbm93IHlvdSBrbm93IHRoYXQgdGhlIG1pc3NpbmcgYmxvYiB3YXMgdGhlIGRhdGEgZm9yIGEgZmlsZSBuYW1lZAorYG15ZmlsZWAuICBBbmQgY2hhbmNlcyBhcmUgeW91IGNhbiBhbHNvIGlkZW50aWZ5IHRoZSBkaXJlY3RvcnktLWxldCdzCitzYXkgaXQncyBpbiBgc29tZWRpcmVjdG9yeWAuICBJZiB5b3UncmUgbHVja3kgdGhlIG1pc3NpbmcgY29weSBtaWdodCBiZQordGhlIHNhbWUgYXMgdGhlIGNvcHkgeW91IGhhdmUgY2hlY2tlZCBvdXQgaW4geW91ciB3b3JraW5nIHRyZWUgYXQKK2Bzb21lZGlyZWN0b3J5L215ZmlsZWA7IHlvdSBjYW4gdGVzdCB3aGV0aGVyIHRoYXQncyByaWdodCB3aXRoCitsaW5rZ2l0OmdpdC1oYXNoLW9iamVjdFsxXToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBoYXNoLW9iamVjdCAtdyBzb21lZGlyZWN0b3J5L215ZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3doaWNoIHdpbGwgY3JlYXRlIGFuZCBzdG9yZSBhIGJsb2Igb2JqZWN0IHdpdGggdGhlIGNvbnRlbnRzIG9mCitzb21lZGlyZWN0b3J5L215ZmlsZSwgYW5kIG91dHB1dCB0aGUgU0hBLTEgb2YgdGhhdCBvYmplY3QuICBpZiB5b3UncmUKK2V4dHJlbWVseSBsdWNreSBpdCBtaWdodCBiZSA0Yjk0NThiMzc4NjIyODM2OWM2MzkzNmRiNjU4MjdkZTNjYzA2MjAwLCBpbgord2hpY2ggY2FzZSB5b3UndmUgZ3Vlc3NlZCByaWdodCwgYW5kIHRoZSBjb3JydXB0aW9uIGlzIGZpeGVkIQorCitPdGhlcndpc2UsIHlvdSBuZWVkIG1vcmUgaW5mb3JtYXRpb24uICBIb3cgZG8geW91IHRlbGwgd2hpY2ggdmVyc2lvbiBvZgordGhlIGZpbGUgaGFzIGJlZW4gbG9zdD8KKworVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1yYXcgLS1hbGwgLS1mdWxsLWhpc3RvcnkgLS0gc29tZWRpcmVjdG9yeS9teWZpbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZWNhdXNlIHlvdSdyZSBhc2tpbmcgZm9yIHJhdyBvdXRwdXQsIHlvdSdsbCBub3cgZ2V0IHNvbWV0aGluZyBsaWtlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorY29tbWl0IGFiYworQXV0aG9yOgorRGF0ZToKKy4uLgorOjEwMDY0NCAxMDA2NDQgNGI5NDU4Yi4uLiBuZXdzaGEuLi4gTSBzb21lZGlyZWN0b3J5L215ZmlsZQorCisKK2NvbW1pdCB4eXoKK0F1dGhvcjoKK0RhdGU6CisKKy4uLgorOjEwMDY0NCAxMDA2NDQgb2xkc2hhLi4uIDRiOTQ1OGIuLi4gTSBzb21lZGlyZWN0b3J5L215ZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdGVsbHMgeW91IHRoYXQgdGhlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB2ZXJzaW9uIG9mIHRoZSBmaWxlIHdhcworIm5ld3NoYSIsIGFuZCB0aGF0IHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdmVyc2lvbiB3YXMgIm9sZHNoYSIuCitZb3UgYWxzbyBrbm93IHRoZSBjb21taXQgbWVzc2FnZXMgdGhhdCB3ZW50IHdpdGggdGhlIGNoYW5nZSBmcm9tIG9sZHNoYQordG8gNGI5NDU4YiBhbmQgd2l0aCB0aGUgY2hhbmdlIGZyb20gNGI5NDU4YiB0byBuZXdzaGEuCisKK0lmIHlvdSd2ZSBiZWVuIGNvbW1pdHRpbmcgc21hbGwgZW5vdWdoIGNoYW5nZXMsIHlvdSBtYXkgbm93IGhhdmUgYSBnb29kCitzaG90IGF0IHJlY29uc3RydWN0aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgaW4tYmV0d2VlbiBzdGF0ZSA0Yjk0NThiLgorCitJZiB5b3UgY2FuIGRvIHRoYXQsIHlvdSBjYW4gbm93IHJlY3JlYXRlIHRoZSBtaXNzaW5nIG9iamVjdCB3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgaGFzaC1vYmplY3QgLXcgPHJlY3JlYXRlZC1maWxlPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB5b3VyIHJlcG9zaXRvcnkgaXMgZ29vZCBhZ2FpbiEKKworKEJ0dywgeW91IGNvdWxkIGhhdmUgaWdub3JlZCB0aGUgYGZzY2tgLCBhbmQgc3RhcnRlZCB3aXRoIGRvaW5nIGEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1yYXcgLS1hbGwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQganVzdCBsb29rZWQgZm9yIHRoZSBzaGEgb2YgdGhlIG1pc3Npbmcgb2JqZWN0ICg0Yjk0NThiLi4pIGluIHRoYXQKK3dob2xlIHRoaW5nLiBJdCdzIHVwIHRvIHlvdS0tR2l0IGRvZXMgKmhhdmUqIGEgbG90IG9mIGluZm9ybWF0aW9uLCBpdCBpcworanVzdCBtaXNzaW5nIG9uZSBwYXJ0aWN1bGFyIGJsb2IgdmVyc2lvbi4KKworW1t0aGUtaW5kZXhdXQorVGhlIGluZGV4CistLS0tLS0tLS0KKworVGhlIGluZGV4IGlzIGEgYmluYXJ5IGZpbGUgKGdlbmVyYWxseSBrZXB0IGluIGAuZ2l0L2luZGV4YCkgY29udGFpbmluZyBhCitzb3J0ZWQgbGlzdCBvZiBwYXRoIG5hbWVzLCBlYWNoIHdpdGggcGVybWlzc2lvbnMgYW5kIHRoZSBTSEEtMSBvZiBhIGJsb2IKK29iamVjdDsgbGlua2dpdDpnaXQtbHMtZmlsZXNbMV0gY2FuIHNob3cgeW91IHRoZSBjb250ZW50cyBvZiB0aGUgaW5kZXg6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UKKzEwMDY0NCA2M2M5MThjNjY3ZmEwMDVmZjEyYWQ4OTQzN2YyZmRjODA5MjZlMjFjIDAJLmdpdGlnbm9yZQorMTAwNjQ0IDU1MjliMTk4ZThkMTRkZWNiZTRhZDk5ZGIzZjdmYjYzMmRlMDQzOWQgMAkubWFpbG1hcAorMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgMAlDT1BZSU5HCisxMDA2NDQgYTM3YjIxNTJiZDI2YmUyYzIyODllMWY1N2EyOTI1MzRhNTFhOTNjNyAwCURvY3VtZW50YXRpb24vLmdpdGlnbm9yZQorMTAwNjQ0IGZiZWZlOWE0NWIwMGE1NGI1OGQ5NGQwNmVjYTQ4YjAzZDQwYTUwZTAgMAlEb2N1bWVudGF0aW9uL01ha2VmaWxlCisuLi4KKzEwMDY0NCAyNTExYWVmOGQ4OWFiNTJiZTVlYzZhNWU0NjIzNmI0YjZiY2QwN2VhIDAJeGRpZmYveHR5cGVzLmgKKzEwMDY0NCAyYWRlOTdiMjU3NGE5Zjc3ZTdhZTQwMDJhNGUwN2E2YTM4ZTQ2ZDA3IDAJeGRpZmYveHV0aWxzLmMKKzEwMDY0NCBkNWRlODI5MmUwNWU3YzM2YzRiNjg4NTdjMWNmOTg1NWUzZDJmNzBhIDAJeGRpZmYveHV0aWxzLmgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZSB0aGF0IGluIG9sZGVyIGRvY3VtZW50YXRpb24geW91IG1heSBzZWUgdGhlIGluZGV4IGNhbGxlZCB0aGUKKyJjdXJyZW50IGRpcmVjdG9yeSBjYWNoZSIgb3IganVzdCB0aGUgImNhY2hlIi4gIEl0IGhhcyB0aHJlZSBpbXBvcnRhbnQKK3Byb3BlcnRpZXM6CisKKzEuIFRoZSBpbmRleCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSB0byBnZW5lcmF0ZSBhIHNpbmdsZQorKHVuaXF1ZWx5IGRldGVybWluZWQpIHRyZWUgb2JqZWN0LgorKworRm9yIGV4YW1wbGUsIHJ1bm5pbmcgbGlua2dpdDpnaXQtY29tbWl0WzFdIGdlbmVyYXRlcyB0aGlzIHRyZWUgb2JqZWN0Citmcm9tIHRoZSBpbmRleCwgc3RvcmVzIGl0IGluIHRoZSBvYmplY3QgZGF0YWJhc2UsIGFuZCB1c2VzIGl0IGFzIHRoZQordHJlZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBuZXcgY29tbWl0LgorCisyLiBUaGUgaW5kZXggZW5hYmxlcyBmYXN0IGNvbXBhcmlzb25zIGJldHdlZW4gdGhlIHRyZWUgb2JqZWN0IGl0IGRlZmluZXMKK2FuZCB0aGUgd29ya2luZyB0cmVlLgorKworSXQgZG9lcyB0aGlzIGJ5IHN0b3Jpbmcgc29tZSBhZGRpdGlvbmFsIGRhdGEgZm9yIGVhY2ggZW50cnkgKHN1Y2ggYXMKK3RoZSBsYXN0IG1vZGlmaWVkIHRpbWUpLiAgVGhpcyBkYXRhIGlzIG5vdCBkaXNwbGF5ZWQgYWJvdmUsIGFuZCBpcyBub3QKK3N0b3JlZCBpbiB0aGUgY3JlYXRlZCB0cmVlIG9iamVjdCwgYnV0IGl0IGNhbiBiZSB1c2VkIHRvIGRldGVybWluZQorcXVpY2tseSB3aGljaCBmaWxlcyBpbiB0aGUgd29ya2luZyBkaXJlY3RvcnkgZGlmZmVyIGZyb20gd2hhdCB3YXMKK3N0b3JlZCBpbiB0aGUgaW5kZXgsIGFuZCB0aHVzIHNhdmUgR2l0IGZyb20gaGF2aW5nIHRvIHJlYWQgYWxsIG9mIHRoZQorZGF0YSBmcm9tIHN1Y2ggZmlsZXMgdG8gbG9vayBmb3IgY2hhbmdlcy4KKworMy4gSXQgY2FuIGVmZmljaWVudGx5IHJlcHJlc2VudCBpbmZvcm1hdGlvbiBhYm91dCBtZXJnZSBjb25mbGljdHMKK2JldHdlZW4gZGlmZmVyZW50IHRyZWUgb2JqZWN0cywgYWxsb3dpbmcgZWFjaCBwYXRobmFtZSB0byBiZQorYXNzb2NpYXRlZCB3aXRoIHN1ZmZpY2llbnQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRyZWVzIGludm9sdmVkIHRoYXQKK3lvdSBjYW4gY3JlYXRlIGEgdGhyZWUtd2F5IG1lcmdlIGJldHdlZW4gdGhlbS4KKysKK1dlIHNhdyBpbiA8PGNvbmZsaWN0LXJlc29sdXRpb24+PiB0aGF0IGR1cmluZyBhIG1lcmdlIHRoZSBpbmRleCBjYW4KK3N0b3JlIG11bHRpcGxlIHZlcnNpb25zIG9mIGEgc2luZ2xlIGZpbGUgKGNhbGxlZCAic3RhZ2VzIikuICBUaGUgdGhpcmQKK2NvbHVtbiBpbiB0aGUgbGlua2dpdDpnaXQtbHMtZmlsZXNbMV0gb3V0cHV0IGFib3ZlIGlzIHRoZSBzdGFnZQorbnVtYmVyLCBhbmQgd2lsbCB0YWtlIG9uIHZhbHVlcyBvdGhlciB0aGFuIDAgZm9yIGZpbGVzIHdpdGggbWVyZ2UKK2NvbmZsaWN0cy4KKworVGhlIGluZGV4IGlzIHRodXMgYSBzb3J0IG9mIHRlbXBvcmFyeSBzdGFnaW5nIGFyZWEsIHdoaWNoIGlzIGZpbGxlZCB3aXRoCithIHRyZWUgd2hpY2ggeW91IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiB3b3JraW5nIG9uLgorCitJZiB5b3UgYmxvdyB0aGUgaW5kZXggYXdheSBlbnRpcmVseSwgeW91IGdlbmVyYWxseSBoYXZlbid0IGxvc3QgYW55CitpbmZvcm1hdGlvbiBhcyBsb25nIGFzIHlvdSBoYXZlIHRoZSBuYW1lIG9mIHRoZSB0cmVlIHRoYXQgaXQgZGVzY3JpYmVkLgorCitbW3N1Ym1vZHVsZXNdXQorU3VibW9kdWxlcworPT09PT09PT09PQorCitMYXJnZSBwcm9qZWN0cyBhcmUgb2Z0ZW4gY29tcG9zZWQgb2Ygc21hbGxlciwgc2VsZi1jb250YWluZWQgbW9kdWxlcy4gIEZvcgorZXhhbXBsZSwgYW4gZW1iZWRkZWQgTGludXggZGlzdHJpYnV0aW9uJ3Mgc291cmNlIHRyZWUgd291bGQgaW5jbHVkZSBldmVyeQorcGllY2Ugb2Ygc29mdHdhcmUgaW4gdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHNvbWUgbG9jYWwgbW9kaWZpY2F0aW9uczsgYSBtb3ZpZQorcGxheWVyIG1pZ2h0IG5lZWQgdG8gYnVpbGQgYWdhaW5zdCBhIHNwZWNpZmljLCBrbm93bi13b3JraW5nIHZlcnNpb24gb2YgYQorZGVjb21wcmVzc2lvbiBsaWJyYXJ5OyBzZXZlcmFsIGluZGVwZW5kZW50IHByb2dyYW1zIG1pZ2h0IGFsbCBzaGFyZSB0aGUgc2FtZQorYnVpbGQgc2NyaXB0cy4KKworV2l0aCBjZW50cmFsaXplZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbXMgdGhpcyBpcyBvZnRlbiBhY2NvbXBsaXNoZWQgYnkKK2luY2x1ZGluZyBldmVyeSBtb2R1bGUgaW4gb25lIHNpbmdsZSByZXBvc2l0b3J5LiAgRGV2ZWxvcGVycyBjYW4gY2hlY2sgb3V0CithbGwgbW9kdWxlcyBvciBvbmx5IHRoZSBtb2R1bGVzIHRoZXkgbmVlZCB0byB3b3JrIHdpdGguICBUaGV5IGNhbiBldmVuIG1vZGlmeQorZmlsZXMgYWNyb3NzIHNldmVyYWwgbW9kdWxlcyBpbiBhIHNpbmdsZSBjb21taXQgd2hpbGUgbW92aW5nIHRoaW5ncyBhcm91bmQKK29yIHVwZGF0aW5nIEFQSXMgYW5kIHRyYW5zbGF0aW9ucy4KKworR2l0IGRvZXMgbm90IGFsbG93IHBhcnRpYWwgY2hlY2tvdXRzLCBzbyBkdXBsaWNhdGluZyB0aGlzIGFwcHJvYWNoIGluIEdpdAord291bGQgZm9yY2UgZGV2ZWxvcGVycyB0byBrZWVwIGEgbG9jYWwgY29weSBvZiBtb2R1bGVzIHRoZXkgYXJlIG5vdAoraW50ZXJlc3RlZCBpbiB0b3VjaGluZy4gIENvbW1pdHMgaW4gYW4gZW5vcm1vdXMgY2hlY2tvdXQgd291bGQgYmUgc2xvd2VyCit0aGFuIHlvdSdkIGV4cGVjdCBhcyBHaXQgd291bGQgaGF2ZSB0byBzY2FuIGV2ZXJ5IGRpcmVjdG9yeSBmb3IgY2hhbmdlcy4KK0lmIG1vZHVsZXMgaGF2ZSBhIGxvdCBvZiBsb2NhbCBoaXN0b3J5LCBjbG9uZXMgd291bGQgdGFrZSBmb3JldmVyLgorCitPbiB0aGUgcGx1cyBzaWRlLCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbXMgY2FuIG11Y2ggYmV0dGVyCitpbnRlZ3JhdGUgd2l0aCBleHRlcm5hbCBzb3VyY2VzLiAgSW4gYSBjZW50cmFsaXplZCBtb2RlbCwgYSBzaW5nbGUgYXJiaXRyYXJ5CitzbmFwc2hvdCBvZiB0aGUgZXh0ZXJuYWwgcHJvamVjdCBpcyBleHBvcnRlZCBmcm9tIGl0cyBvd24gcmV2aXNpb24gY29udHJvbAorYW5kIHRoZW4gaW1wb3J0ZWQgaW50byB0aGUgbG9jYWwgcmV2aXNpb24gY29udHJvbCBvbiBhIHZlbmRvciBicmFuY2guICBBbGwKK3RoZSBoaXN0b3J5IGlzIGhpZGRlbi4gIFdpdGggZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCB5b3UgY2FuIGNsb25lIHRoZQorZW50aXJlIGV4dGVybmFsIGhpc3RvcnkgYW5kIG11Y2ggbW9yZSBlYXNpbHkgZm9sbG93IGRldmVsb3BtZW50IGFuZCByZS1tZXJnZQorbG9jYWwgY2hhbmdlcy4KKworR2l0J3Mgc3VibW9kdWxlIHN1cHBvcnQgYWxsb3dzIGEgcmVwb3NpdG9yeSB0byBjb250YWluLCBhcyBhIHN1YmRpcmVjdG9yeSwgYQorY2hlY2tvdXQgb2YgYW4gZXh0ZXJuYWwgcHJvamVjdC4gIFN1Ym1vZHVsZXMgbWFpbnRhaW4gdGhlaXIgb3duIGlkZW50aXR5OwordGhlIHN1Ym1vZHVsZSBzdXBwb3J0IGp1c3Qgc3RvcmVzIHRoZSBzdWJtb2R1bGUgcmVwb3NpdG9yeSBsb2NhdGlvbiBhbmQKK2NvbW1pdCBJRCwgc28gb3RoZXIgZGV2ZWxvcGVycyB3aG8gY2xvbmUgdGhlIGNvbnRhaW5pbmcgcHJvamVjdAorKCJzdXBlcnByb2plY3QiKSBjYW4gZWFzaWx5IGNsb25lIGFsbCB0aGUgc3VibW9kdWxlcyBhdCB0aGUgc2FtZSByZXZpc2lvbi4KK1BhcnRpYWwgY2hlY2tvdXRzIG9mIHRoZSBzdXBlcnByb2plY3QgYXJlIHBvc3NpYmxlOiB5b3UgY2FuIHRlbGwgR2l0IHRvCitjbG9uZSBub25lLCBzb21lIG9yIGFsbCBvZiB0aGUgc3VibW9kdWxlcy4KKworVGhlIGxpbmtnaXQ6Z2l0LXN1Ym1vZHVsZVsxXSBjb21tYW5kIGlzIGF2YWlsYWJsZSBzaW5jZSBHaXQgMS41LjMuICBVc2Vycword2l0aCBHaXQgMS41LjIgY2FuIGxvb2sgdXAgdGhlIHN1Ym1vZHVsZSBjb21taXRzIGluIHRoZSByZXBvc2l0b3J5IGFuZAorbWFudWFsbHkgY2hlY2sgdGhlbSBvdXQ7IGVhcmxpZXIgdmVyc2lvbnMgd29uJ3QgcmVjb2duaXplIHRoZSBzdWJtb2R1bGVzIGF0CithbGwuCisKK1RvIHNlZSBob3cgc3VibW9kdWxlIHN1cHBvcnQgd29ya3MsIGNyZWF0ZSBmb3VyIGV4YW1wbGUKK3JlcG9zaXRvcmllcyB0aGF0IGNhbiBiZSB1c2VkIGxhdGVyIGFzIGEgc3VibW9kdWxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG1rZGlyIH4vZ2l0CiskIGNkIH4vZ2l0CiskIGZvciBpIGluIGEgYiBjIGQKK2RvCisJbWtkaXIgJGkKKwljZCAkaQorCWdpdCBpbml0CisJZWNobyAibW9kdWxlICRpIiA+ICRpLnR4dAorCWdpdCBhZGQgJGkudHh0CisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQsIHN1Ym1vZHVsZSAkaSIKKwljZCAuLgorZG9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOb3cgY3JlYXRlIHRoZSBzdXBlcnByb2plY3QgYW5kIGFkZCBhbGwgdGhlIHN1Ym1vZHVsZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgbWtkaXIgc3VwZXIKKyQgY2Qgc3VwZXIKKyQgZ2l0IGluaXQKKyQgZm9yIGkgaW4gYSBiIGMgZAorZG8KKwlnaXQgc3VibW9kdWxlIGFkZCB+L2dpdC8kaSAkaQorZG9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOT1RFOiBEbyBub3QgdXNlIGxvY2FsIFVSTHMgaGVyZSBpZiB5b3UgcGxhbiB0byBwdWJsaXNoIHlvdXIgc3VwZXJwcm9qZWN0IQorCitTZWUgd2hhdCBmaWxlcyBgZ2l0IHN1Ym1vZHVsZWAgY3JlYXRlZDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBscyAtYQorLiAgLi4gIC5naXQgIC5naXRtb2R1bGVzICBhICBiICBjICBkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBgZ2l0IHN1Ym1vZHVsZSBhZGQgPHJlcG8+IDxwYXRoPmAgY29tbWFuZCBkb2VzIGEgY291cGxlIG9mIHRoaW5nczoKKworLSBJdCBjbG9uZXMgdGhlIHN1Ym1vZHVsZSBmcm9tIGA8cmVwbz5gIHRvIHRoZSBnaXZlbiBgPHBhdGg+YCB1bmRlciB0aGUKKyAgY3VycmVudCBkaXJlY3RvcnkgYW5kIGJ5IGRlZmF1bHQgY2hlY2tzIG91dCB0aGUgbWFzdGVyIGJyYW5jaC4KKy0gSXQgYWRkcyB0aGUgc3VibW9kdWxlJ3MgY2xvbmUgcGF0aCB0byB0aGUgbGlua2dpdDpnaXRtb2R1bGVzWzVdIGZpbGUgYW5kCisgIGFkZHMgdGhpcyBmaWxlIHRvIHRoZSBpbmRleCwgcmVhZHkgdG8gYmUgY29tbWl0dGVkLgorLSBJdCBhZGRzIHRoZSBzdWJtb2R1bGUncyBjdXJyZW50IGNvbW1pdCBJRCB0byB0aGUgaW5kZXgsIHJlYWR5IHRvIGJlCisgIGNvbW1pdHRlZC4KKworQ29tbWl0IHRoZSBzdXBlcnByb2plY3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCAtbSAiQWRkIHN1Ym1vZHVsZXMgYSwgYiwgYyBhbmQgZC4iCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05vdyBjbG9uZSB0aGUgc3VwZXJwcm9qZWN0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGNkIC4uCiskIGdpdCBjbG9uZSBzdXBlciBjbG9uZWQKKyQgY2QgY2xvbmVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBzdWJtb2R1bGUgZGlyZWN0b3JpZXMgYXJlIHRoZXJlLCBidXQgdGhleSdyZSBlbXB0eToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBscyAtYSBhCisuICAuLgorJCBnaXQgc3VibW9kdWxlIHN0YXR1cworLWQyNjZiOTg3M2FkNTA0ODgxNjM0NTdmMDI1ZGI3Y2RkOTY4M2Q4OGIgYQorLWU4MWQ0NTdkYTE1MzA5YjRmZWY0MjQ5YWJhOWI1MDE4Nzk5OTY3MGQgYgorLWMxNTM2YTk3MmI5YWZmZWEwZjE2ZTA2ODBiYTg3MzMyZGMwNTkxNDYgYworLWQ5NjI0OWZmNWQ1N2RlNWRlMDkzZTZiYWZmOWUwYWFmYTUyNzZhNzQgZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitOT1RFOiBUaGUgY29tbWl0IG9iamVjdCBuYW1lcyBzaG93biBhYm92ZSB3b3VsZCBiZSBkaWZmZXJlbnQgZm9yIHlvdSwgYnV0IHRoZXkKK3Nob3VsZCBtYXRjaCB0aGUgSEVBRCBjb21taXQgb2JqZWN0IG5hbWVzIG9mIHlvdXIgcmVwb3NpdG9yaWVzLiAgWW91IGNhbiBjaGVjaworaXQgYnkgcnVubmluZyBgZ2l0IGxzLXJlbW90ZSAuLi9hYC4KKworUHVsbGluZyBkb3duIHRoZSBzdWJtb2R1bGVzIGlzIGEgdHdvLXN0ZXAgcHJvY2Vzcy4gRmlyc3QgcnVuIGBnaXQgc3VibW9kdWxlCitpbml0YCB0byBhZGQgdGhlIHN1Ym1vZHVsZSByZXBvc2l0b3J5IFVSTHMgdG8gYC5naXQvY29uZmlnYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgc3VibW9kdWxlIGluaXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm93IHVzZSBgZ2l0IHN1Ym1vZHVsZSB1cGRhdGVgIHRvIGNsb25lIHRoZSByZXBvc2l0b3JpZXMgYW5kIGNoZWNrIG91dCB0aGUKK2NvbW1pdHMgc3BlY2lmaWVkIGluIHRoZSBzdXBlcnByb2plY3Q6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUKKyQgY2QgYQorJCBscyAtYQorLiAgLi4gIC5naXQgIGEudHh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uZSBtYWpvciBkaWZmZXJlbmNlIGJldHdlZW4gYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCBhbmQgYGdpdCBzdWJtb2R1bGUgYWRkYCBpcwordGhhdCBgZ2l0IHN1Ym1vZHVsZSB1cGRhdGVgIGNoZWNrcyBvdXQgYSBzcGVjaWZpYyBjb21taXQsIHJhdGhlciB0aGFuIHRoZSB0aXAKK29mIGEgYnJhbmNoLiBJdCdzIGxpa2UgY2hlY2tpbmcgb3V0IGEgdGFnOiB0aGUgaGVhZCBpcyBkZXRhY2hlZCwgc28geW91J3JlIG5vdAord29ya2luZyBvbiBhIGJyYW5jaC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYnJhbmNoCisqIChkZXRhY2hlZCBmcm9tIGQyNjZiOTgpCisgIG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd2FudCB0byBtYWtlIGEgY2hhbmdlIHdpdGhpbiBhIHN1Ym1vZHVsZSBhbmQgeW91IGhhdmUgYSBkZXRhY2hlZCBoZWFkLAordGhlbiB5b3Ugc2hvdWxkIGNyZWF0ZSBvciBjaGVja291dCBhIGJyYW5jaCwgbWFrZSB5b3VyIGNoYW5nZXMsIHB1Ymxpc2ggdGhlCitjaGFuZ2Ugd2l0aGluIHRoZSBzdWJtb2R1bGUsIGFuZCB0aGVuIHVwZGF0ZSB0aGUgc3VwZXJwcm9qZWN0IHRvIHJlZmVyZW5jZSB0aGUKK25ldyBjb21taXQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitvcgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjaGVja291dCAtYiBmaXgtdXAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGhlbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGVjaG8gImFkZGluZyBhIGxpbmUgYWdhaW4iID4+IGEudHh0CiskIGdpdCBjb21taXQgLWEgLW0gIlVwZGF0ZWQgdGhlIHN1Ym1vZHVsZSBmcm9tIHdpdGhpbiB0aGUgc3VwZXJwcm9qZWN0LiIKKyQgZ2l0IHB1c2gKKyQgY2QgLi4KKyQgZ2l0IGRpZmYKK2RpZmYgLS1naXQgYS9hIGIvYQoraW5kZXggZDI2NmI5OC4uMjYxZGZhYyAxNjAwMDAKKy0tLSBhL2EKKysrKyBiL2EKK0BAIC0xICsxIEBACistU3VicHJvamVjdCBjb21taXQgZDI2NmI5ODczYWQ1MDQ4ODE2MzQ1N2YwMjVkYjdjZGQ5NjgzZDg4YgorK1N1YnByb2plY3QgY29tbWl0IDI2MWRmYWMzNWNiOTlkMzgwZWI5NjZlMTAyYzExOTcxMzlmN2ZhMjQKKyQgZ2l0IGFkZCBhCiskIGdpdCBjb21taXQgLW0gIlVwZGF0ZWQgc3VibW9kdWxlIGEuIgorJCBnaXQgcHVzaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgaGF2ZSB0byBydW4gYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCBhZnRlciBgZ2l0IHB1bGxgIGlmIHlvdSB3YW50IHRvIHVwZGF0ZQorc3VibW9kdWxlcywgdG9vLgorCitQaXRmYWxscyB3aXRoIHN1Ym1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbHdheXMgcHVibGlzaCB0aGUgc3VibW9kdWxlIGNoYW5nZSBiZWZvcmUgcHVibGlzaGluZyB0aGUgY2hhbmdlIHRvIHRoZQorc3VwZXJwcm9qZWN0IHRoYXQgcmVmZXJlbmNlcyBpdC4gSWYgeW91IGZvcmdldCB0byBwdWJsaXNoIHRoZSBzdWJtb2R1bGUgY2hhbmdlLAorb3RoZXJzIHdvbid0IGJlIGFibGUgdG8gY2xvbmUgdGhlIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2Qgfi9naXQvc3VwZXIvYQorJCBlY2hvIGkgYWRkZWQgYW5vdGhlciBsaW5lIHRvIHRoaXMgZmlsZSA+PiBhLnR4dAorJCBnaXQgY29tbWl0IC1hIC1tICJkb2luZyBpdCB3cm9uZyB0aGlzIHRpbWUiCiskIGNkIC4uCiskIGdpdCBhZGQgYQorJCBnaXQgY29tbWl0IC1tICJVcGRhdGVkIHN1Ym1vZHVsZSBhIGFnYWluLiIKKyQgZ2l0IHB1c2gKKyQgY2Qgfi9naXQvY2xvbmVkCiskIGdpdCBwdWxsCiskIGdpdCBzdWJtb2R1bGUgdXBkYXRlCitlcnJvcjogcGF0aHNwZWMgJzI2MWRmYWMzNWNiOTlkMzgwZWI5NjZlMTAyYzExOTcxMzlmN2ZhMjQnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGUocykga25vd24gdG8gZ2l0LgorRGlkIHlvdSBmb3JnZXQgdG8gJ2dpdCBhZGQnPworVW5hYmxlIHRvIGNoZWNrb3V0ICcyNjFkZmFjMzVjYjk5ZDM4MGViOTY2ZTEwMmMxMTk3MTM5ZjdmYTI0JyBpbiBzdWJtb2R1bGUgcGF0aCAnYScKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gb2xkZXIgR2l0IHZlcnNpb25zIGl0IGNvdWxkIGJlIGVhc2lseSBmb3Jnb3R0ZW4gdG8gY29tbWl0IG5ldyBvciBtb2RpZmllZAorZmlsZXMgaW4gYSBzdWJtb2R1bGUsIHdoaWNoIHNpbGVudGx5IGxlYWRzIHRvIHNpbWlsYXIgcHJvYmxlbXMgYXMgbm90IHB1c2hpbmcKK3RoZSBzdWJtb2R1bGUgY2hhbmdlcy4gU3RhcnRpbmcgd2l0aCBHaXQgMS43LjAgYm90aCBgZ2l0IHN0YXR1c2AgYW5kIGBnaXQgZGlmZmAKK2luIHRoZSBzdXBlcnByb2plY3Qgc2hvdyBzdWJtb2R1bGVzIGFzIG1vZGlmaWVkIHdoZW4gdGhleSBjb250YWluIG5ldyBvcgorbW9kaWZpZWQgZmlsZXMgdG8gcHJvdGVjdCBhZ2FpbnN0IGFjY2lkZW50YWxseSBjb21taXR0aW5nIHN1Y2ggYSBzdGF0ZS4gYGdpdAorZGlmZmAgd2lsbCBhbHNvIGFkZCBhIGAtZGlydHlgIHRvIHRoZSB3b3JrIHRyZWUgc2lkZSB3aGVuIGdlbmVyYXRpbmcgcGF0Y2gKK291dHB1dCBvciB1c2VkIHdpdGggdGhlIGAtLXN1Ym1vZHVsZWAgb3B0aW9uOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBkaWZmCitkaWZmIC0tZ2l0IGEvc3ViIGIvc3ViCistLS0gYS9zdWIKKysrKyBiL3N1YgorQEAgLTEgKzEgQEAKKy1TdWJwcm9qZWN0IGNvbW1pdCAzZjM1NjcwNTY0OWI1ZDU2NmQ5N2ZmODQzY2YxOTMzNTkyMjlhNDUzCisrU3VicHJvamVjdCBjb21taXQgM2YzNTY3MDU2NDliNWQ1NjZkOTdmZjg0M2NmMTkzMzU5MjI5YTQ1My1kaXJ0eQorJCBnaXQgZGlmZiAtLXN1Ym1vZHVsZQorU3VibW9kdWxlIHN1YiAzZjM1NjcwLi4zZjM1NjcwLWRpcnR5OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgYWxzbyBzaG91bGQgbm90IHJld2luZCBicmFuY2hlcyBpbiBhIHN1Ym1vZHVsZSBiZXlvbmQgY29tbWl0cyB0aGF0IHdlcmUKK2V2ZXIgcmVjb3JkZWQgaW4gYW55IHN1cGVycHJvamVjdC4KKworSXQncyBub3Qgc2FmZSB0byBydW4gYGdpdCBzdWJtb2R1bGUgdXBkYXRlYCBpZiB5b3UndmUgbWFkZSBhbmQgY29tbWl0dGVkCitjaGFuZ2VzIHdpdGhpbiBhIHN1Ym1vZHVsZSB3aXRob3V0IGNoZWNraW5nIG91dCBhIGJyYW5jaCBmaXJzdC4gVGhleSB3aWxsIGJlCitzaWxlbnRseSBvdmVyd3JpdHRlbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBjYXQgYS50eHQKK21vZHVsZSBhCiskIGVjaG8gbGluZSBhZGRlZCBmcm9tIHByaXZhdGUyID4+IGEudHh0CiskIGdpdCBjb21taXQgLWEgLW0gImxpbmUgYWRkZWQgaW5zaWRlIHByaXZhdGUyIgorJCBjZCAuLgorJCBnaXQgc3VibW9kdWxlIHVwZGF0ZQorU3VibW9kdWxlIHBhdGggJ2EnOiBjaGVja2VkIG91dCAnZDI2NmI5ODczYWQ1MDQ4ODE2MzQ1N2YwMjVkYjdjZGQ5NjgzZDg4YicKKyQgY2QgYQorJCBjYXQgYS50eHQKK21vZHVsZSBhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05PVEU6IFRoZSBjaGFuZ2VzIGFyZSBzdGlsbCB2aXNpYmxlIGluIHRoZSBzdWJtb2R1bGUncyByZWZsb2cuCisKK0lmIHlvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciBzdWJtb2R1bGUgd29ya2luZyB0cmVlLCBgZ2l0CitzdWJtb2R1bGUgdXBkYXRlYCB3aWxsIG5vdCBvdmVyd3JpdGUgdGhlbS4gIEluc3RlYWQsIHlvdSBnZXQgdGhlIHVzdWFsCit3YXJuaW5nIGFib3V0IG5vdCBiZWluZyBhYmxlIHN3aXRjaCBmcm9tIGEgZGlydHkgYnJhbmNoLgorCitbW2xvdy1sZXZlbC1vcGVyYXRpb25zXV0KK0xvdy1sZXZlbCBHaXQgb3BlcmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09CisKK01hbnkgb2YgdGhlIGhpZ2hlci1sZXZlbCBjb21tYW5kcyB3ZXJlIG9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgYXMgc2hlbGwKK3NjcmlwdHMgdXNpbmcgYSBzbWFsbGVyIGNvcmUgb2YgbG93LWxldmVsIEdpdCBjb21tYW5kcy4gIFRoZXNlIGNhbiBzdGlsbAorYmUgdXNlZnVsIHdoZW4gZG9pbmcgdW51c3VhbCB0aGluZ3Mgd2l0aCBHaXQsIG9yIGp1c3QgYXMgYSB3YXkgdG8KK3VuZGVyc3RhbmQgaXRzIGlubmVyIHdvcmtpbmdzLgorCitbW29iamVjdC1tYW5pcHVsYXRpb25dXQorT2JqZWN0IGFjY2VzcyBhbmQgbWFuaXB1bGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGxpbmtnaXQ6Z2l0LWNhdC1maWxlWzFdIGNvbW1hbmQgY2FuIHNob3cgdGhlIGNvbnRlbnRzIG9mIGFueSBvYmplY3QsCit0aG91Z2ggdGhlIGhpZ2hlci1sZXZlbCBsaW5rZ2l0OmdpdC1zaG93WzFdIGlzIHVzdWFsbHkgbW9yZSB1c2VmdWwuCisKK1RoZSBsaW5rZ2l0OmdpdC1jb21taXQtdHJlZVsxXSBjb21tYW5kIGFsbG93cyBjb25zdHJ1Y3RpbmcgY29tbWl0cyB3aXRoCithcmJpdHJhcnkgcGFyZW50cyBhbmQgdHJlZXMuCisKK0EgdHJlZSBjYW4gYmUgY3JlYXRlZCB3aXRoIGxpbmtnaXQ6Z2l0LXdyaXRlLXRyZWVbMV0gYW5kIGl0cyBkYXRhIGNhbiBiZQorYWNjZXNzZWQgYnkgbGlua2dpdDpnaXQtbHMtdHJlZVsxXS4gIFR3byB0cmVlcyBjYW4gYmUgY29tcGFyZWQgd2l0aAorbGlua2dpdDpnaXQtZGlmZi10cmVlWzFdLgorCitBIHRhZyBpcyBjcmVhdGVkIHdpdGggbGlua2dpdDpnaXQtbWt0YWdbMV0sIGFuZCB0aGUgc2lnbmF0dXJlIGNhbiBiZQordmVyaWZpZWQgYnkgbGlua2dpdDpnaXQtdmVyaWZ5LXRhZ1sxXSwgdGhvdWdoIGl0IGlzIG5vcm1hbGx5IHNpbXBsZXIgdG8KK3VzZSBsaW5rZ2l0OmdpdC10YWdbMV0gZm9yIGJvdGguCisKK1tbdGhlLXdvcmtmbG93XV0KK1RoZSBXb3JrZmxvdworLS0tLS0tLS0tLS0tCisKK0hpZ2gtbGV2ZWwgb3BlcmF0aW9ucyBzdWNoIGFzIGxpbmtnaXQ6Z2l0LWNvbW1pdFsxXSwKK2xpbmtnaXQ6Z2l0LWNoZWNrb3V0WzFdIGFuZCBsaW5rZ2l0OmdpdC1yZXNldFsxXSB3b3JrIGJ5IG1vdmluZyBkYXRhCitiZXR3ZWVuIHRoZSB3b3JraW5nIHRyZWUsIHRoZSBpbmRleCwgYW5kIHRoZSBvYmplY3QgZGF0YWJhc2UuICBHaXQKK3Byb3ZpZGVzIGxvdy1sZXZlbCBvcGVyYXRpb25zIHdoaWNoIHBlcmZvcm0gZWFjaCBvZiB0aGVzZSBzdGVwcworaW5kaXZpZHVhbGx5LgorCitHZW5lcmFsbHksIGFsbCBHaXQgb3BlcmF0aW9ucyB3b3JrIG9uIHRoZSBpbmRleCBmaWxlLiBTb21lIG9wZXJhdGlvbnMKK3dvcmsgKnB1cmVseSogb24gdGhlIGluZGV4IGZpbGUgKHNob3dpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCitpbmRleCksIGJ1dCBtb3N0IG9wZXJhdGlvbnMgbW92ZSBkYXRhIGJldHdlZW4gdGhlIGluZGV4IGZpbGUgYW5kIGVpdGhlcgordGhlIGRhdGFiYXNlIG9yIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gVGh1cyB0aGVyZSBhcmUgZm91ciBtYWluCitjb21iaW5hdGlvbnM6CisKK1tbd29ya2luZy1kaXJlY3RvcnktdG8taW5kZXhdXQord29ya2luZyBkaXJlY3RvcnkgLT4gaW5kZXgKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RoZSBsaW5rZ2l0OmdpdC11cGRhdGUtaW5kZXhbMV0gY29tbWFuZCB1cGRhdGVzIHRoZSBpbmRleCB3aXRoCitpbmZvcm1hdGlvbiBmcm9tIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gIFlvdSBnZW5lcmFsbHkgdXBkYXRlIHRoZQoraW5kZXggaW5mb3JtYXRpb24gYnkganVzdCBzcGVjaWZ5aW5nIHRoZSBmaWxlbmFtZSB5b3Ugd2FudCB0byB1cGRhdGUsCitsaWtlIHNvOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCB1cGRhdGUtaW5kZXggZmlsZW5hbWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYnV0IHRvIGF2b2lkIGNvbW1vbiBtaXN0YWtlcyB3aXRoIGZpbGVuYW1lIGdsb2JiaW5nIGV0Yy4sIHRoZSBjb21tYW5kCit3aWxsIG5vdCBub3JtYWxseSBhZGQgdG90YWxseSBuZXcgZW50cmllcyBvciByZW1vdmUgb2xkIGVudHJpZXMsCitpLmUuIGl0IHdpbGwgbm9ybWFsbHkganVzdCB1cGRhdGUgZXhpc3RpbmcgY2FjaGUgZW50cmllcy4KKworVG8gdGVsbCBHaXQgdGhhdCB5ZXMsIHlvdSByZWFsbHkgZG8gcmVhbGl6ZSB0aGF0IGNlcnRhaW4gZmlsZXMgbm8KK2xvbmdlciBleGlzdCwgb3IgdGhhdCBuZXcgZmlsZXMgc2hvdWxkIGJlIGFkZGVkLCB5b3UKK3Nob3VsZCB1c2UgdGhlIGAtLXJlbW92ZWAgYW5kIGAtLWFkZGAgZmxhZ3MgcmVzcGVjdGl2ZWx5LgorCitOT1RFISBBIGAtLXJlbW92ZWAgZmxhZyBkb2VzICdub3QnIG1lYW4gdGhhdCBzdWJzZXF1ZW50IGZpbGVuYW1lcyB3aWxsCituZWNlc3NhcmlseSBiZSByZW1vdmVkOiBpZiB0aGUgZmlsZXMgc3RpbGwgZXhpc3QgaW4geW91ciBkaXJlY3RvcnkKK3N0cnVjdHVyZSwgdGhlIGluZGV4IHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZWlyIG5ldyBzdGF0dXMsIG5vdAorcmVtb3ZlZC4gVGhlIG9ubHkgdGhpbmcgYC0tcmVtb3ZlYCBtZWFucyBpcyB0aGF0IHVwZGF0ZS1pbmRleCB3aWxsIGJlCitjb25zaWRlcmluZyBhIHJlbW92ZWQgZmlsZSB0byBiZSBhIHZhbGlkIHRoaW5nLCBhbmQgaWYgdGhlIGZpbGUgcmVhbGx5Citkb2VzIG5vdCBleGlzdCBhbnkgbW9yZSwgaXQgd2lsbCB1cGRhdGUgdGhlIGluZGV4IGFjY29yZGluZ2x5LgorCitBcyBhIHNwZWNpYWwgY2FzZSwgeW91IGNhbiBhbHNvIGRvIGBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaGAsIHdoaWNoCit3aWxsIHJlZnJlc2ggdGhlICJzdGF0IiBpbmZvcm1hdGlvbiBvZiBlYWNoIGluZGV4IHRvIG1hdGNoIHRoZSBjdXJyZW50CitzdGF0IGluZm9ybWF0aW9uLiBJdCB3aWxsICdub3QnIHVwZGF0ZSB0aGUgb2JqZWN0IHN0YXR1cyBpdHNlbGYsIGFuZAoraXQgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgZmllbGRzIHRoYXQgYXJlIHVzZWQgdG8gcXVpY2tseSB0ZXN0IHdoZXRoZXIKK2FuIG9iamVjdCBzdGlsbCBtYXRjaGVzIGl0cyBvbGQgYmFja2luZyBzdG9yZSBvYmplY3QuCisKK1RoZSBwcmV2aW91c2x5IGludHJvZHVjZWQgbGlua2dpdDpnaXQtYWRkWzFdIGlzIGp1c3QgYSB3cmFwcGVyIGZvcgorbGlua2dpdDpnaXQtdXBkYXRlLWluZGV4WzFdLgorCitbW2luZGV4LXRvLW9iamVjdC1kYXRhYmFzZV1dCitpbmRleCAtPiBvYmplY3QgZGF0YWJhc2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3Ugd3JpdGUgeW91ciBjdXJyZW50IGluZGV4IGZpbGUgdG8gYSAidHJlZSIgb2JqZWN0IHdpdGggdGhlIHByb2dyYW0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgd3JpdGUtdHJlZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit0aGF0IGRvZXNuJ3QgY29tZSB3aXRoIGFueSBvcHRpb25zLS1pdCB3aWxsIGp1c3Qgd3JpdGUgb3V0IHRoZQorY3VycmVudCBpbmRleCBpbnRvIHRoZSBzZXQgb2YgdHJlZSBvYmplY3RzIHRoYXQgZGVzY3JpYmUgdGhhdCBzdGF0ZSwKK2FuZCBpdCB3aWxsIHJldHVybiB0aGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIHRvcC1sZXZlbCB0cmVlLiBZb3UgY2FuCit1c2UgdGhhdCB0cmVlIHRvIHJlLWdlbmVyYXRlIHRoZSBpbmRleCBhdCBhbnkgdGltZSBieSBnb2luZyBpbiB0aGUKK290aGVyIGRpcmVjdGlvbjoKKworW1tvYmplY3QtZGF0YWJhc2UtdG8taW5kZXhdXQorb2JqZWN0IGRhdGFiYXNlIC0+IGluZGV4Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworWW91IHJlYWQgYSAidHJlZSIgZmlsZSBmcm9tIHRoZSBvYmplY3QgZGF0YWJhc2UsIGFuZCB1c2UgdGhhdCB0bworcG9wdWxhdGUgKGFuZCBvdmVyd3JpdGUtLWRvbid0IGRvIHRoaXMgaWYgeW91ciBpbmRleCBjb250YWlucyBhbnkKK3Vuc2F2ZWQgc3RhdGUgdGhhdCB5b3UgbWlnaHQgd2FudCB0byByZXN0b3JlIGxhdGVyISkgeW91ciBjdXJyZW50CitpbmRleC4gIE5vcm1hbCBvcGVyYXRpb24gaXMganVzdAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWFkLXRyZWUgPFNIQS0xIG9mIHRyZWU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2FuZCB5b3VyIGluZGV4IGZpbGUgd2lsbCBub3cgYmUgZXF1aXZhbGVudCB0byB0aGUgdHJlZSB0aGF0IHlvdSBzYXZlZAorZWFybGllci4gSG93ZXZlciwgdGhhdCBpcyBvbmx5IHlvdXIgJ2luZGV4JyBmaWxlOiB5b3VyIHdvcmtpbmcKK2RpcmVjdG9yeSBjb250ZW50cyBoYXZlIG5vdCBiZWVuIG1vZGlmaWVkLgorCitbW2luZGV4LXRvLXdvcmtpbmctZGlyZWN0b3J5XV0KK2luZGV4IC0+IHdvcmtpbmcgZGlyZWN0b3J5Cit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitZb3UgdXBkYXRlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgZnJvbSB0aGUgaW5kZXggYnkgImNoZWNraW5nIG91dCIKK2ZpbGVzLiBUaGlzIGlzIG5vdCBhIHZlcnkgY29tbW9uIG9wZXJhdGlvbiwgc2luY2Ugbm9ybWFsbHkgeW91J2QganVzdAora2VlcCB5b3VyIGZpbGVzIHVwZGF0ZWQsIGFuZCByYXRoZXIgdGhhbiB3cml0ZSB0byB5b3VyIHdvcmtpbmcKK2RpcmVjdG9yeSwgeW91J2QgdGVsbCB0aGUgaW5kZXggZmlsZXMgYWJvdXQgdGhlIGNoYW5nZXMgaW4geW91cgord29ya2luZyBkaXJlY3RvcnkgKGkuZS4gYGdpdCB1cGRhdGUtaW5kZXhgKS4KKworSG93ZXZlciwgaWYgeW91IGRlY2lkZSB0byBqdW1wIHRvIGEgbmV3IHZlcnNpb24sIG9yIGNoZWNrIG91dCBzb21lYm9keQorZWxzZSdzIHZlcnNpb24sIG9yIGp1c3QgcmVzdG9yZSBhIHByZXZpb3VzIHRyZWUsIHlvdSdkIHBvcHVsYXRlIHlvdXIKK2luZGV4IGZpbGUgd2l0aCByZWFkLXRyZWUsIGFuZCB0aGVuIHlvdSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgcmVzdWx0Cit3aXRoCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNoZWNrb3V0LWluZGV4IGZpbGVuYW1lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK29yLCBpZiB5b3Ugd2FudCB0byBjaGVjayBvdXQgYWxsIG9mIHRoZSBpbmRleCwgdXNlIGAtYWAuCisKK05PVEUhIGBnaXQgY2hlY2tvdXQtaW5kZXhgIG5vcm1hbGx5IHJlZnVzZXMgdG8gb3ZlcndyaXRlIG9sZCBmaWxlcywgc28KK2lmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIG9mIHRoZSB0cmVlIGFscmVhZHkgY2hlY2tlZCBvdXQsIHlvdSB3aWxsCituZWVkIHRvIHVzZSB0aGUgYC1mYCBmbGFnICgnYmVmb3JlJyB0aGUgYC1hYCBmbGFnIG9yIHRoZSBmaWxlbmFtZSkgdG8KKydmb3JjZScgdGhlIGNoZWNrb3V0LgorCisKK0ZpbmFsbHksIHRoZXJlIGFyZSBhIGZldyBvZGRzIGFuZCBlbmRzIHdoaWNoIGFyZSBub3QgcHVyZWx5IG1vdmluZworZnJvbSBvbmUgcmVwcmVzZW50YXRpb24gdG8gdGhlIG90aGVyOgorCitbW3R5aW5nLWl0LWFsbC10b2dldGhlcl1dCitUeWluZyBpdCBhbGwgdG9nZXRoZXIKK35+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUbyBjb21taXQgYSB0cmVlIHlvdSBoYXZlIGluc3RhbnRpYXRlZCB3aXRoIGBnaXQgd3JpdGUtdHJlZWAsIHlvdSdkCitjcmVhdGUgYSAiY29tbWl0IiBvYmplY3QgdGhhdCByZWZlcnMgdG8gdGhhdCB0cmVlIGFuZCB0aGUgaGlzdG9yeQorYmVoaW5kIGl0LS1tb3N0IG5vdGFibHkgdGhlICJwYXJlbnQiIGNvbW1pdHMgdGhhdCBwcmVjZWRlZCBpdCBpbgoraGlzdG9yeS4KKworTm9ybWFsbHkgYSAiY29tbWl0IiBoYXMgb25lIHBhcmVudDogdGhlIHByZXZpb3VzIHN0YXRlIG9mIHRoZSB0cmVlCitiZWZvcmUgYSBjZXJ0YWluIGNoYW5nZSB3YXMgbWFkZS4gSG93ZXZlciwgc29tZXRpbWVzIGl0IGNhbiBoYXZlIHR3bworb3IgbW9yZSBwYXJlbnQgY29tbWl0cywgaW4gd2hpY2ggY2FzZSB3ZSBjYWxsIGl0IGEgIm1lcmdlIiwgZHVlIHRvIHRoZQorZmFjdCB0aGF0IHN1Y2ggYSBjb21taXQgYnJpbmdzIHRvZ2V0aGVyICgibWVyZ2VzIikgdHdvIG9yIG1vcmUKK3ByZXZpb3VzIHN0YXRlcyByZXByZXNlbnRlZCBieSBvdGhlciBjb21taXRzLgorCitJbiBvdGhlciB3b3Jkcywgd2hpbGUgYSAidHJlZSIgcmVwcmVzZW50cyBhIHBhcnRpY3VsYXIgZGlyZWN0b3J5IHN0YXRlCitvZiBhIHdvcmtpbmcgZGlyZWN0b3J5LCBhICJjb21taXQiIHJlcHJlc2VudHMgdGhhdCBzdGF0ZSBpbiB0aW1lLAorYW5kIGV4cGxhaW5zIGhvdyB3ZSBnb3QgdGhlcmUuCisKK1lvdSBjcmVhdGUgYSBjb21taXQgb2JqZWN0IGJ5IGdpdmluZyBpdCB0aGUgdHJlZSB0aGF0IGRlc2NyaWJlcyB0aGUKK3N0YXRlIGF0IHRoZSB0aW1lIG9mIHRoZSBjb21taXQsIGFuZCBhIGxpc3Qgb2YgcGFyZW50czoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY29tbWl0LXRyZWUgPHRyZWU+IC1wIDxwYXJlbnQ+IFsoLXAgPHBhcmVudDI+KS4uLl0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYW5kIHRoZW4gZ2l2aW5nIHRoZSByZWFzb24gZm9yIHRoZSBjb21taXQgb24gc3RkaW4gKGVpdGhlciB0aHJvdWdoCityZWRpcmVjdGlvbiBmcm9tIGEgcGlwZSBvciBmaWxlLCBvciBieSBqdXN0IHR5cGluZyBpdCBhdCB0aGUgdHR5KS4KKworYGdpdCBjb21taXQtdHJlZWAgd2lsbCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIG9iamVjdCB0aGF0IHJlcHJlc2VudHMKK3RoYXQgY29tbWl0LCBhbmQgeW91IHNob3VsZCBzYXZlIGl0IGF3YXkgZm9yIGxhdGVyIHVzZS4gTm9ybWFsbHksCit5b3UnZCBjb21taXQgYSBuZXcgYEhFQURgIHN0YXRlLCBhbmQgd2hpbGUgR2l0IGRvZXNuJ3QgY2FyZSB3aGVyZSB5b3UKK3NhdmUgdGhlIG5vdGUgYWJvdXQgdGhhdCBzdGF0ZSwgaW4gcHJhY3RpY2Ugd2UgdGVuZCB0byBqdXN0IHdyaXRlIHRoZQorcmVzdWx0IHRvIHRoZSBmaWxlIHBvaW50ZWQgYXQgYnkgYC5naXQvSEVBRGAsIHNvIHRoYXQgd2UgY2FuIGFsd2F5cyBzZWUKK3doYXQgdGhlIGxhc3QgY29tbWl0dGVkIHN0YXRlIHdhcy4KKworSGVyZSBpcyBhIHBpY3R1cmUgdGhhdCBpbGx1c3RyYXRlcyBob3cgdmFyaW91cyBwaWVjZXMgZml0IHRvZ2V0aGVyOgorCistLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICAgY29tbWl0LXRyZWUKKyAgICAgICAgICAgICAgICAgICAgICBjb21taXQgb2JqCisgICAgICAgICAgICAgICAgICAgICAgICstLS0tKworICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgICAgICAgICAgICAgICAgICAgICAgIFYgICAgVgorICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgIHwgT2JqZWN0IERCIHwKKyAgICAgICAgICAgICAgICAgICAgfCAgQmFja2luZyAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgU3RvcmUgICB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgICAgXgorICAgICAgICAgICB3cml0ZS10cmVlICB8ICAgICB8CisgICAgICAgICAgICAgdHJlZSBvYmogIHwgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfCAgcmVhZC10cmVlCisgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgIHRyZWUgb2JqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgICAgICB8ICAgSW5kZXggICB8CisgICAgICAgICAgICAgICAgICAgIHwgICJjYWNoZSIgIHwKKyAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKworICAgICAgICAgdXBkYXRlLWluZGV4ICBeCisgICAgICAgICAgICAgYmxvYiBvYmogIHwgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfAorICAgIGNoZWNrb3V0LWluZGV4IC11ICB8ICAgICB8ICBjaGVja291dC1pbmRleAorICAgICAgICAgICAgIHN0YXQgICAgICB8ICAgICB8ICBibG9iIG9iagorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWCisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgICAgICAgfCAgV29ya2luZyAgfAorICAgICAgICAgICAgICAgICAgICB8IERpcmVjdG9yeSB8CisgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKworLS0tLS0tLS0tLS0tCisKKworW1tleGFtaW5pbmctdGhlLWRhdGFdXQorRXhhbWluaW5nIHRoZSBkYXRhCistLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBleGFtaW5lIHRoZSBkYXRhIHJlcHJlc2VudGVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UgYW5kIHRoZQoraW5kZXggd2l0aCB2YXJpb3VzIGhlbHBlciB0b29scy4gRm9yIGV2ZXJ5IG9iamVjdCwgeW91IGNhbiB1c2UKK2xpbmtnaXQ6Z2l0LWNhdC1maWxlWzFdIHRvIGV4YW1pbmUgZGV0YWlscyBhYm91dCB0aGUKK29iamVjdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgLXQgPG9iamVjdG5hbWU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Nob3dzIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QsIGFuZCBvbmNlIHlvdSBoYXZlIHRoZSB0eXBlICh3aGljaCBpcwordXN1YWxseSBpbXBsaWNpdCBpbiB3aGVyZSB5b3UgZmluZCB0aGUgb2JqZWN0KSwgeW91IGNhbiB1c2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgYmxvYnx0cmVlfGNvbW1pdHx0YWcgPG9iamVjdG5hbWU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHNob3cgaXRzIGNvbnRlbnRzLiBOT1RFISBUcmVlcyBoYXZlIGJpbmFyeSBjb250ZW50LCBhbmQgYXMgYSByZXN1bHQKK3RoZXJlIGlzIGEgc3BlY2lhbCBoZWxwZXIgZm9yIHNob3dpbmcgdGhhdCBjb250ZW50LCBjYWxsZWQKK2BnaXQgbHMtdHJlZWAsIHdoaWNoIHR1cm5zIHRoZSBiaW5hcnkgY29udGVudCBpbnRvIGEgbW9yZSBlYXNpbHkKK3JlYWRhYmxlIGZvcm0uCisKK0l0J3MgZXNwZWNpYWxseSBpbnN0cnVjdGl2ZSB0byBsb29rIGF0ICJjb21taXQiIG9iamVjdHMsIHNpbmNlIHRob3NlCit0ZW5kIHRvIGJlIHNtYWxsIGFuZCBmYWlybHkgc2VsZi1leHBsYW5hdG9yeS4gSW4gcGFydGljdWxhciwgaWYgeW91Citmb2xsb3cgdGhlIGNvbnZlbnRpb24gb2YgaGF2aW5nIHRoZSB0b3AgY29tbWl0IG5hbWUgaW4gYC5naXQvSEVBRGAsCit5b3UgY2FuIGRvCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFECistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3RvIHNlZSB3aGF0IHRoZSB0b3AgY29tbWl0IHdhcy4KKworW1ttZXJnaW5nLW11bHRpcGxlLXRyZWVzXV0KK01lcmdpbmcgbXVsdGlwbGUgdHJlZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR2l0IGNhbiBoZWxwIHlvdSBwZXJmb3JtIGEgdGhyZWUtd2F5IG1lcmdlLCB3aGljaCBjYW4gaW4gdHVybiBiZQordXNlZCBmb3IgYSBtYW55LXdheSBtZXJnZSBieSByZXBlYXRpbmcgdGhlIG1lcmdlIHByb2NlZHVyZSBzZXZlcmFsCit0aW1lcy4gIFRoZSB1c3VhbCBzaXR1YXRpb24gaXMgdGhhdCB5b3Ugb25seSBkbyBvbmUgdGhyZWUtd2F5IG1lcmdlCisocmVjb25jaWxpbmcgdHdvIGxpbmVzIG9mIGhpc3RvcnkpIGFuZCBjb21taXQgdGhlIHJlc3VsdCwgYnV0IGlmCit5b3UgbGlrZSB0bywgeW91IGNhbiBtZXJnZSBzZXZlcmFsIGJyYW5jaGVzIGluIG9uZSBnby4KKworVG8gcGVyZm9ybSBhIHRocmVlLXdheSBtZXJnZSwgeW91IHN0YXJ0IHdpdGggdGhlIHR3byBjb21taXRzIHlvdQord2FudCB0byBtZXJnZSwgZmluZCB0aGVpciBjbG9zZXN0IGNvbW1vbiBwYXJlbnQgKGEgdGhpcmQgY29tbWl0KSwKK2FuZCBjb21wYXJlIHRoZSB0cmVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZXNlIHRocmVlIGNvbW1pdHMuCisKK1RvIGdldCB0aGUgImJhc2UiIGZvciB0aGUgbWVyZ2UsIGxvb2sgdXAgdGhlIGNvbW1vbiBwYXJlbnQgb2YgdHdvCitjb21taXRzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZS1iYXNlIDxjb21taXQxPiA8Y29tbWl0Mj4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBwcmludHMgdGhlIG5hbWUgb2YgYSBjb21taXQgdGhleSBhcmUgYm90aCBiYXNlZCBvbi4gWW91IHNob3VsZAorbm93IGxvb2sgdXAgdGhlIHRyZWUgb2JqZWN0cyBvZiB0aG9zZSBjb21taXRzLCB3aGljaCB5b3UgY2FuIGVhc2lseQorZG8gd2l0aAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBjYXQtZmlsZSBjb21taXQgPGNvbW1pdG5hbWU+IHwgaGVhZCAtMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzaW5jZSB0aGUgdHJlZSBvYmplY3QgaW5mb3JtYXRpb24gaXMgYWx3YXlzIHRoZSBmaXJzdCBsaW5lIGluIGEgY29tbWl0CitvYmplY3QuCisKK09uY2UgeW91IGtub3cgdGhlIHRocmVlIHRyZWVzIHlvdSBhcmUgZ29pbmcgdG8gbWVyZ2UgKHRoZSBvbmUgIm9yaWdpbmFsIgordHJlZSwgYWthIHRoZSBjb21tb24gdHJlZSwgYW5kIHRoZSB0d28gInJlc3VsdCIgdHJlZXMsIGFrYSB0aGUgYnJhbmNoZXMKK3lvdSB3YW50IHRvIG1lcmdlKSwgeW91IGRvIGEgIm1lcmdlIiByZWFkIGludG8gdGhlIGluZGV4LiBUaGlzIHdpbGwKK2NvbXBsYWluIGlmIGl0IGhhcyB0byB0aHJvdyBhd2F5IHlvdXIgb2xkIGluZGV4IGNvbnRlbnRzLCBzbyB5b3Ugc2hvdWxkCittYWtlIHN1cmUgdGhhdCB5b3UndmUgY29tbWl0dGVkIHRob3NlLS1pbiBmYWN0IHlvdSB3b3VsZCBub3JtYWxseQorYWx3YXlzIGRvIGEgbWVyZ2UgYWdhaW5zdCB5b3VyIGxhc3QgY29tbWl0ICh3aGljaCBzaG91bGQgdGh1cyBtYXRjaCB3aGF0Cit5b3UgaGF2ZSBpbiB5b3VyIGN1cnJlbnQgaW5kZXggYW55d2F5KS4KKworVG8gZG8gdGhlIG1lcmdlLCBkbworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZWFkLXRyZWUgLW0gLXUgPG9yaWd0cmVlPiA8eW91cnRyZWU+IDx0YXJnZXR0cmVlPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aGljaCB3aWxsIGRvIGFsbCB0cml2aWFsIG1lcmdlIG9wZXJhdGlvbnMgZm9yIHlvdSBkaXJlY3RseSBpbiB0aGUKK2luZGV4IGZpbGUsIGFuZCB5b3UgY2FuIGp1c3Qgd3JpdGUgdGhlIHJlc3VsdCBvdXQgd2l0aAorYGdpdCB3cml0ZS10cmVlYC4KKworCitbW21lcmdpbmctbXVsdGlwbGUtdHJlZXMtMl1dCitNZXJnaW5nIG11bHRpcGxlIHRyZWVzLCBjb250aW51ZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTYWRseSwgbWFueSBtZXJnZXMgYXJlbid0IHRyaXZpYWwuIElmIHRoZXJlIGFyZSBmaWxlcyB0aGF0IGhhdmUKK2JlZW4gYWRkZWQsIG1vdmVkIG9yIHJlbW92ZWQsIG9yIGlmIGJvdGggYnJhbmNoZXMgaGF2ZSBtb2RpZmllZCB0aGUKK3NhbWUgZmlsZSwgeW91IHdpbGwgYmUgbGVmdCB3aXRoIGFuIGluZGV4IHRyZWUgdGhhdCBjb250YWlucyAibWVyZ2UKK2VudHJpZXMiIGluIGl0LiBTdWNoIGFuIGluZGV4IHRyZWUgY2FuICdOT1QnIGJlIHdyaXR0ZW4gb3V0IHRvIGEgdHJlZQorb2JqZWN0LCBhbmQgeW91IHdpbGwgaGF2ZSB0byByZXNvbHZlIGFueSBzdWNoIG1lcmdlIGNsYXNoZXMgdXNpbmcKK290aGVyIHRvb2xzIGJlZm9yZSB5b3UgY2FuIHdyaXRlIG91dCB0aGUgcmVzdWx0LgorCitZb3UgY2FuIGV4YW1pbmUgc3VjaCBpbmRleCBzdGF0ZSB3aXRoIGBnaXQgbHMtZmlsZXMgLS11bm1lcmdlZGAKK2NvbW1hbmQuICBBbiBleGFtcGxlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHJlYWQtdHJlZSAtbSAkb3JpZyBIRUFEICR0YXJnZXQKKyQgZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQKKzEwMDY0NCAyNjM0MTRmNDIzZDBlNGQ3MGRhZThmZTUzZmEzNDYxNGZmM2UyODYwIDEJaGVsbG8uYworMTAwNjQ0IDA2ZmE2YTI0MjU2ZGM3ZTU2MGVmYTU2ODdmYTg0YjUxZjAyNjNjM2EgMgloZWxsby5jCisxMDA2NDQgY2M0NGM3M2ViNzgzNTY1ZGE1ODMxYjRkODIwYzk2Mjk1NDAxOWI2OSAzCWhlbGxvLmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFYWNoIGxpbmUgb2YgdGhlIGBnaXQgbHMtZmlsZXMgLS11bm1lcmdlZGAgb3V0cHV0IGJlZ2lucyB3aXRoCit0aGUgYmxvYiBtb2RlIGJpdHMsIGJsb2IgU0hBLTEsICdzdGFnZSBudW1iZXInLCBhbmQgdGhlCitmaWxlbmFtZS4gIFRoZSAnc3RhZ2UgbnVtYmVyJyBpcyBHaXQncyB3YXkgdG8gc2F5IHdoaWNoIHRyZWUgaXQKK2NhbWUgZnJvbTogc3RhZ2UgMSBjb3JyZXNwb25kcyB0byB0aGUgYCRvcmlnYCB0cmVlLCBzdGFnZSAyIHRvCit0aGUgYEhFQURgIHRyZWUsIGFuZCBzdGFnZSAzIHRvIHRoZSBgJHRhcmdldGAgdHJlZS4KKworRWFybGllciB3ZSBzYWlkIHRoYXQgdHJpdmlhbCBtZXJnZXMgYXJlIGRvbmUgaW5zaWRlCitgZ2l0IHJlYWQtdHJlZSAtbWAuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpbGUgZGlkIG5vdCBjaGFuZ2UKK2Zyb20gYCRvcmlnYCB0byBgSEVBRGAgb3IgYCR0YXJnZXRgLCBvciBpZiB0aGUgZmlsZSBjaGFuZ2VkCitmcm9tIGAkb3JpZ2AgdG8gYEhFQURgIGFuZCBgJG9yaWdgIHRvIGAkdGFyZ2V0YCB0aGUgc2FtZSB3YXksCitvYnZpb3VzbHkgdGhlIGZpbmFsIG91dGNvbWUgaXMgd2hhdCBpcyBpbiBgSEVBRGAuICBXaGF0IHRoZQorYWJvdmUgZXhhbXBsZSBzaG93cyBpcyB0aGF0IGZpbGUgYGhlbGxvLmNgIHdhcyBjaGFuZ2VkIGZyb20KK2Akb3JpZ2AgdG8gYEhFQURgIGFuZCBgJG9yaWdgIHRvIGAkdGFyZ2V0YCBpbiBhIGRpZmZlcmVudCB3YXkuCitZb3UgY291bGQgcmVzb2x2ZSB0aGlzIGJ5IHJ1bm5pbmcgeW91ciBmYXZvcml0ZSAzLXdheSBtZXJnZQorcHJvZ3JhbSwgZS5nLiAgYGRpZmYzYCwgYG1lcmdlYCwgb3IgR2l0J3Mgb3duIG1lcmdlLWZpbGUsIG9uCit0aGUgYmxvYiBvYmplY3RzIGZyb20gdGhlc2UgdGhyZWUgc3RhZ2VzIHlvdXJzZWxmLCBsaWtlIHRoaXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2F0LWZpbGUgYmxvYiAyNjM0MTRmLi4uID5oZWxsby5jfjEKKyQgZ2l0IGNhdC1maWxlIGJsb2IgMDZmYTZhMi4uLiA+aGVsbG8uY34yCiskIGdpdCBjYXQtZmlsZSBibG9iIGNjNDRjNzMuLi4gPmhlbGxvLmN+MworJCBnaXQgbWVyZ2UtZmlsZSBoZWxsby5jfjIgaGVsbG8uY34xIGhlbGxvLmN+MworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgd291bGQgbGVhdmUgdGhlIG1lcmdlIHJlc3VsdCBpbiBgaGVsbG8uY34yYCBmaWxlLCBhbG9uZword2l0aCBjb25mbGljdCBtYXJrZXJzIGlmIHRoZXJlIGFyZSBjb25mbGljdHMuICBBZnRlciB2ZXJpZnlpbmcKK3RoZSBtZXJnZSByZXN1bHQgbWFrZXMgc2Vuc2UsIHlvdSBjYW4gdGVsbCBHaXQgd2hhdCB0aGUgZmluYWwKK21lcmdlIHJlc3VsdCBmb3IgdGhpcyBmaWxlIGlzIGJ5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIG12IC1mIGhlbGxvLmN+MiBoZWxsby5jCiskIGdpdCB1cGRhdGUtaW5kZXggaGVsbG8uYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGEgcGF0aCBpcyBpbiB0aGUgInVubWVyZ2VkIiBzdGF0ZSwgcnVubmluZyBgZ2l0IHVwZGF0ZS1pbmRleGAgZm9yCit0aGF0IHBhdGggdGVsbHMgR2l0IHRvIG1hcmsgdGhlIHBhdGggcmVzb2x2ZWQuCisKK1RoZSBhYm92ZSBpcyB0aGUgZGVzY3JpcHRpb24gb2YgYSBHaXQgbWVyZ2UgYXQgdGhlIGxvd2VzdCBsZXZlbCwKK3RvIGhlbHAgeW91IHVuZGVyc3RhbmQgd2hhdCBjb25jZXB0dWFsbHkgaGFwcGVucyB1bmRlciB0aGUgaG9vZC4KK0luIHByYWN0aWNlLCBub2JvZHksIG5vdCBldmVuIEdpdCBpdHNlbGYsIHJ1bnMgYGdpdCBjYXQtZmlsZWAgdGhyZWUgdGltZXMKK2ZvciB0aGlzLiAgVGhlcmUgaXMgYSBgZ2l0IG1lcmdlLWluZGV4YCBwcm9ncmFtIHRoYXQgZXh0cmFjdHMgdGhlCitzdGFnZXMgdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCBjYWxscyBhICJtZXJnZSIgc2NyaXB0IG9uIGl0OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgaGVsbG8uYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbmQgdGhhdCBpcyB3aGF0IGhpZ2hlciBsZXZlbCBgZ2l0IG1lcmdlIC1zIHJlc29sdmVgIGlzIGltcGxlbWVudGVkIHdpdGguCisKK1tbaGFja2luZy1naXRdXQorSGFja2luZyBHaXQKKz09PT09PT09PT09CisKK1RoaXMgY2hhcHRlciBjb3ZlcnMgaW50ZXJuYWwgZGV0YWlscyBvZiB0aGUgR2l0IGltcGxlbWVudGF0aW9uIHdoaWNoCitwcm9iYWJseSBvbmx5IEdpdCBkZXZlbG9wZXJzIG5lZWQgdG8gdW5kZXJzdGFuZC4KKworW1tvYmplY3QtZGV0YWlsc11dCitPYmplY3Qgc3RvcmFnZSBmb3JtYXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgb2JqZWN0cyBoYXZlIGEgc3RhdGljYWxseSBkZXRlcm1pbmVkICJ0eXBlIiB3aGljaCBpZGVudGlmaWVzIHRoZQorZm9ybWF0IG9mIHRoZSBvYmplY3QgKGkuZS4gaG93IGl0IGlzIHVzZWQsIGFuZCBob3cgaXQgY2FuIHJlZmVyIHRvIG90aGVyCitvYmplY3RzKS4gIFRoZXJlIGFyZSBjdXJyZW50bHkgZm91ciBkaWZmZXJlbnQgb2JqZWN0IHR5cGVzOiAiYmxvYiIsCisidHJlZSIsICJjb21taXQiLCBhbmQgInRhZyIuCisKK1JlZ2FyZGxlc3Mgb2Ygb2JqZWN0IHR5cGUsIGFsbCBvYmplY3RzIHNoYXJlIHRoZSBmb2xsb3dpbmcKK2NoYXJhY3RlcmlzdGljczogdGhleSBhcmUgYWxsIGRlZmxhdGVkIHdpdGggemxpYiwgYW5kIGhhdmUgYSBoZWFkZXIKK3RoYXQgbm90IG9ubHkgc3BlY2lmaWVzIHRoZWlyIHR5cGUsIGJ1dCBhbHNvIHByb3ZpZGVzIHNpemUgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBkYXRhIGluIHRoZSBvYmplY3QuICBJdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBTSEEtMSBoYXNoCit0aGF0IGlzIHVzZWQgdG8gbmFtZSB0aGUgb2JqZWN0IGlzIHRoZSBoYXNoIG9mIHRoZSBvcmlnaW5hbCBkYXRhCitwbHVzIHRoaXMgaGVhZGVyLCBzbyBgc2hhMXN1bWAgJ2ZpbGUnIGRvZXMgbm90IG1hdGNoIHRoZSBvYmplY3QgbmFtZQorZm9yICdmaWxlJy4KKworQXMgYSByZXN1bHQsIHRoZSBnZW5lcmFsIGNvbnNpc3RlbmN5IG9mIGFuIG9iamVjdCBjYW4gYWx3YXlzIGJlIHRlc3RlZAoraW5kZXBlbmRlbnRseSBvZiB0aGUgY29udGVudHMgb3IgdGhlIHR5cGUgb2YgdGhlIG9iamVjdDogYWxsIG9iamVjdHMgY2FuCitiZSB2YWxpZGF0ZWQgYnkgdmVyaWZ5aW5nIHRoYXQgKGEpIHRoZWlyIGhhc2hlcyBtYXRjaCB0aGUgY29udGVudCBvZiB0aGUKK2ZpbGUgYW5kIChiKSB0aGUgb2JqZWN0IHN1Y2Nlc3NmdWxseSBpbmZsYXRlcyB0byBhIHN0cmVhbSBvZiBieXRlcyB0aGF0Citmb3JtcyBhIHNlcXVlbmNlIG9mCitgPGFzY2lpIHR5cGUgd2l0aG91dCBzcGFjZT4gKyA8c3BhY2U+ICsgPGFzY2lpIGRlY2ltYWwgc2l6ZT4gKworPGJ5dGVcMD4gKyA8YmluYXJ5IG9iamVjdCBkYXRhPmAuCisKK1RoZSBzdHJ1Y3R1cmVkIG9iamVjdHMgY2FuIGZ1cnRoZXIgaGF2ZSB0aGVpciBzdHJ1Y3R1cmUgYW5kCitjb25uZWN0aXZpdHkgdG8gb3RoZXIgb2JqZWN0cyB2ZXJpZmllZC4gVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSB3aXRoCit0aGUgYGdpdCBmc2NrYCBwcm9ncmFtLCB3aGljaCBnZW5lcmF0ZXMgYSBmdWxsIGRlcGVuZGVuY3kgZ3JhcGgKK29mIGFsbCBvYmplY3RzLCBhbmQgdmVyaWZpZXMgdGhlaXIgaW50ZXJuYWwgY29uc2lzdGVuY3kgKGluIGFkZGl0aW9uCit0byBqdXN0IHZlcmlmeWluZyB0aGVpciBzdXBlcmZpY2lhbCBjb25zaXN0ZW5jeSB0aHJvdWdoIHRoZSBoYXNoKS4KKworW1tiaXJkdmlldy1vbi10aGUtc291cmNlLWNvZGVdXQorQSBiaXJkcy1leWUgdmlldyBvZiBHaXQncyBzb3VyY2UgY29kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyBub3QgYWx3YXlzIGVhc3kgZm9yIG5ldyBkZXZlbG9wZXJzIHRvIGZpbmQgdGhlaXIgd2F5IHRocm91Z2ggR2l0J3MKK3NvdXJjZSBjb2RlLiAgVGhpcyBzZWN0aW9uIGdpdmVzIHlvdSBhIGxpdHRsZSBndWlkYW5jZSB0byBzaG93IHdoZXJlIHRvCitzdGFydC4KKworQSBnb29kIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBpbml0aWFsIGNvbW1pdCwgd2l0aDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgZTgzYzUxNjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGluaXRpYWwgcmV2aXNpb24gbGF5cyB0aGUgZm91bmRhdGlvbiBmb3IgYWxtb3N0IGV2ZXJ5dGhpbmcgR2l0IGhhcwordG9kYXksIGJ1dCBpcyBzbWFsbCBlbm91Z2ggdG8gcmVhZCBpbiBvbmUgc2l0dGluZy4KKworTm90ZSB0aGF0IHRlcm1pbm9sb2d5IGhhcyBjaGFuZ2VkIHNpbmNlIHRoYXQgcmV2aXNpb24uICBGb3IgZXhhbXBsZSwgdGhlCitSRUFETUUgaW4gdGhhdCByZXZpc2lvbiB1c2VzIHRoZSB3b3JkICJjaGFuZ2VzZXQiIHRvIGRlc2NyaWJlIHdoYXQgd2UKK25vdyBjYWxsIGEgPDxkZWZfY29tbWl0X29iamVjdCxjb21taXQ+Pi4KKworQWxzbywgd2UgZG8gbm90IGNhbGwgaXQgImNhY2hlIiBhbnkgbW9yZSwgYnV0IHJhdGhlciAiaW5kZXgiOyBob3dldmVyLCB0aGUKK2ZpbGUgaXMgc3RpbGwgY2FsbGVkIGBjYWNoZS5oYC4gIFJlbWFyazogTm90IG11Y2ggcmVhc29uIHRvIGNoYW5nZSBpdCBub3csCitlc3BlY2lhbGx5IHNpbmNlIHRoZXJlIGlzIG5vIGdvb2Qgc2luZ2xlIG5hbWUgZm9yIGl0IGFueXdheSwgYmVjYXVzZSBpdCBpcworYmFzaWNhbGx5IF90aGVfIGhlYWRlciBmaWxlIHdoaWNoIGlzIGluY2x1ZGVkIGJ5IF9hbGxfIG9mIEdpdCdzIEMgc291cmNlcy4KKworSWYgeW91IGdyYXNwIHRoZSBpZGVhcyBpbiB0aGF0IGluaXRpYWwgY29tbWl0LCB5b3Ugc2hvdWxkIGNoZWNrIG91dCBhCittb3JlIHJlY2VudCB2ZXJzaW9uIGFuZCBza2ltIGBjYWNoZS5oYCwgYG9iamVjdC5oYCBhbmQgYGNvbW1pdC5oYC4KKworSW4gdGhlIGVhcmx5IGRheXMsIEdpdCAoaW4gdGhlIHRyYWRpdGlvbiBvZiBVTklYKSB3YXMgYSBidW5jaCBvZiBwcm9ncmFtcword2hpY2ggd2VyZSBleHRyZW1lbHkgc2ltcGxlLCBhbmQgd2hpY2ggeW91IHVzZWQgaW4gc2NyaXB0cywgcGlwaW5nIHRoZQorb3V0cHV0IG9mIG9uZSBpbnRvIGFub3RoZXIuIFRoaXMgdHVybmVkIG91dCB0byBiZSBnb29kIGZvciBpbml0aWFsCitkZXZlbG9wbWVudCwgc2luY2UgaXQgd2FzIGVhc2llciB0byB0ZXN0IG5ldyB0aGluZ3MuICBIb3dldmVyLCByZWNlbnRseQorbWFueSBvZiB0aGVzZSBwYXJ0cyBoYXZlIGJlY29tZSBidWlsdGlucywgYW5kIHNvbWUgb2YgdGhlIGNvcmUgaGFzIGJlZW4KKyJsaWJpZmllZCIsIGkuZS4gcHV0IGludG8gbGliZ2l0LmEgZm9yIHBlcmZvcm1hbmNlLCBwb3J0YWJpbGl0eSByZWFzb25zLAorYW5kIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uCisKK0J5IG5vdywgeW91IGtub3cgd2hhdCB0aGUgaW5kZXggaXMgKGFuZCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEKK3N0cnVjdHVyZXMgaW4gYGNhY2hlLmhgKSwgYW5kIHRoYXQgdGhlcmUgYXJlIGp1c3QgYSBjb3VwbGUgb2Ygb2JqZWN0IHR5cGVzCisoYmxvYnMsIHRyZWVzLCBjb21taXRzIGFuZCB0YWdzKSB3aGljaCBpbmhlcml0IHRoZWlyIGNvbW1vbiBzdHJ1Y3R1cmUgZnJvbQorYHN0cnVjdCBvYmplY3RgLCB3aGljaCBpcyB0aGVpciBmaXJzdCBtZW1iZXIgKGFuZCB0aHVzLCB5b3UgY2FuIGNhc3QgZS5nLgorYChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0YCB0byBhY2hpZXZlIHRoZSBfc2FtZV8gYXMgYCZjb21taXQtPm9iamVjdGAsIGkuZS4KK2dldCBhdCB0aGUgb2JqZWN0IG5hbWUgYW5kIGZsYWdzKS4KKworTm93IGlzIGEgZ29vZCBwb2ludCB0byB0YWtlIGEgYnJlYWsgdG8gbGV0IHRoaXMgaW5mb3JtYXRpb24gc2luayBpbi4KKworTmV4dCBzdGVwOiBnZXQgZmFtaWxpYXIgd2l0aCB0aGUgb2JqZWN0IG5hbWluZy4gIFJlYWQgPDxuYW1pbmctY29tbWl0cz4+LgorVGhlcmUgYXJlIHF1aXRlIGEgZmV3IHdheXMgdG8gbmFtZSBhbiBvYmplY3QgKGFuZCBub3Qgb25seSByZXZpc2lvbnMhKS4KK0FsbCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBpbiBgc2hhMV9uYW1lLmNgLiBKdXN0IGhhdmUgYSBxdWljayBsb29rIGF0Cit0aGUgZnVuY3Rpb24gYGdldF9zaGExKClgLiBBIGxvdCBvZiB0aGUgc3BlY2lhbCBoYW5kbGluZyBpcyBkb25lIGJ5CitmdW5jdGlvbnMgbGlrZSBgZ2V0X3NoYTFfYmFzaWMoKWAgb3IgdGhlIGxpa2VzLgorCitUaGlzIGlzIGp1c3QgdG8gZ2V0IHlvdSBpbnRvIHRoZSBncm9vdmUgZm9yIHRoZSBtb3N0IGxpYmlmaWVkIHBhcnQgb2YgR2l0OgordGhlIHJldmlzaW9uIHdhbGtlci4KKworQmFzaWNhbGx5LCB0aGUgaW5pdGlhbCB2ZXJzaW9uIG9mIGBnaXQgbG9nYCB3YXMgYSBzaGVsbCBzY3JpcHQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0LXJldi1saXN0IC0tcHJldHR5ICQoZ2l0LXJldi1wYXJzZSAtLWRlZmF1bHQgSEVBRCAiJEAiKSB8IFwKKwlMRVNTPS1TICR7UEFHRVI6LWxlc3N9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQgZG9lcyB0aGlzIG1lYW4/CisKK2BnaXQgcmV2LWxpc3RgIGlzIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSByZXZpc2lvbiB3YWxrZXIsIHdoaWNoCitfYWx3YXlzXyBwcmludGVkIGEgbGlzdCBvZiByZXZpc2lvbnMgdG8gc3Rkb3V0LiAgSXQgaXMgc3RpbGwgZnVuY3Rpb25hbCwKK2FuZCBuZWVkcyB0bywgc2luY2UgbW9zdCBuZXcgR2l0IGNvbW1hbmRzIHN0YXJ0IG91dCBhcyBzY3JpcHRzIHVzaW5nCitgZ2l0IHJldi1saXN0YC4KKworYGdpdCByZXYtcGFyc2VgIGlzIG5vdCBhcyBpbXBvcnRhbnQgYW55IG1vcmU7IGl0IHdhcyBvbmx5IHVzZWQgdG8gZmlsdGVyIG91dAorb3B0aW9ucyB0aGF0IHdlcmUgcmVsZXZhbnQgZm9yIHRoZSBkaWZmZXJlbnQgcGx1bWJpbmcgY29tbWFuZHMgdGhhdCB3ZXJlCitjYWxsZWQgYnkgdGhlIHNjcmlwdC4KKworTW9zdCBvZiB3aGF0IGBnaXQgcmV2LWxpc3RgIGRpZCBpcyBjb250YWluZWQgaW4gYHJldmlzaW9uLmNgIGFuZAorYHJldmlzaW9uLmhgLiAgSXQgd3JhcHMgdGhlIG9wdGlvbnMgaW4gYSBzdHJ1Y3QgbmFtZWQgYHJldl9pbmZvYCwgd2hpY2gKK2NvbnRyb2xzIGhvdyBhbmQgd2hhdCByZXZpc2lvbnMgYXJlIHdhbGtlZCwgYW5kIG1vcmUuCisKK1RoZSBvcmlnaW5hbCBqb2Igb2YgYGdpdCByZXYtcGFyc2VgIGlzIG5vdyB0YWtlbiBieSB0aGUgZnVuY3Rpb24KK2BzZXR1cF9yZXZpc2lvbnMoKWAsIHdoaWNoIHBhcnNlcyB0aGUgcmV2aXNpb25zIGFuZCB0aGUgY29tbW9uIGNvbW1hbmQtbGluZQorb3B0aW9ucyBmb3IgdGhlIHJldmlzaW9uIHdhbGtlci4gVGhpcyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgaW4gdGhlIHN0cnVjdAorYHJldl9pbmZvYCBmb3IgbGF0ZXIgY29uc3VtcHRpb24uIFlvdSBjYW4gZG8geW91ciBvd24gY29tbWFuZC1saW5lIG9wdGlvbgorcGFyc2luZyBhZnRlciBjYWxsaW5nIGBzZXR1cF9yZXZpc2lvbnMoKWAuIEFmdGVyIHRoYXQsIHlvdSBoYXZlIHRvIGNhbGwKK2BwcmVwYXJlX3JldmlzaW9uX3dhbGsoKWAgZm9yIGluaXRpYWxpemF0aW9uLCBhbmQgdGhlbiB5b3UgY2FuIGdldCB0aGUKK2NvbW1pdHMgb25lIGJ5IG9uZSB3aXRoIHRoZSBmdW5jdGlvbiBgZ2V0X3JldmlzaW9uKClgLgorCitJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gbW9yZSBkZXRhaWxzIG9mIHRoZSByZXZpc2lvbiB3YWxraW5nIHByb2Nlc3MsCitqdXN0IGhhdmUgYSBsb29rIGF0IHRoZSBmaXJzdCBpbXBsZW1lbnRhdGlvbiBvZiBgY21kX2xvZygpYDsgY2FsbAorYGdpdCBzaG93IHYxLjMuMH4xNTVeMn40YCBhbmQgc2Nyb2xsIGRvd24gdG8gdGhhdCBmdW5jdGlvbiAobm90ZSB0aGF0IHlvdQorbm8gbG9uZ2VyIG5lZWQgdG8gY2FsbCBgc2V0dXBfcGFnZXIoKWAgZGlyZWN0bHkpLgorCitOb3dhZGF5cywgYGdpdCBsb2dgIGlzIGEgYnVpbHRpbiwgd2hpY2ggbWVhbnMgdGhhdCBpdCBpcyBfY29udGFpbmVkXyBpbiB0aGUKK2NvbW1hbmQgYGdpdGAuICBUaGUgc291cmNlIHNpZGUgb2YgYSBidWlsdGluIGlzCisKKy0gYSBmdW5jdGlvbiBjYWxsZWQgYGNtZF88YmxhPmAsIHR5cGljYWxseSBkZWZpbmVkIGluIGBidWlsdGluLzxibGEuYz5gCisgIChub3RlIHRoYXQgb2xkZXIgdmVyc2lvbnMgb2YgR2l0IHVzZWQgdG8gaGF2ZSBpdCBpbiBgYnVpbHRpbi08YmxhPi5jYAorICBpbnN0ZWFkKSwgYW5kIGRlY2xhcmVkIGluIGBidWlsdGluLmhgLgorCistIGFuIGVudHJ5IGluIHRoZSBgY29tbWFuZHNbXWAgYXJyYXkgaW4gYGdpdC5jYCwgYW5kCisKKy0gYW4gZW50cnkgaW4gYEJVSUxUSU5fT0JKRUNUU2AgaW4gdGhlIGBNYWtlZmlsZWAuCisKK1NvbWV0aW1lcywgbW9yZSB0aGFuIG9uZSBidWlsdGluIGlzIGNvbnRhaW5lZCBpbiBvbmUgc291cmNlIGZpbGUuICBGb3IKK2V4YW1wbGUsIGBjbWRfd2hhdGNoYW5nZWQoKWAgYW5kIGBjbWRfbG9nKClgIGJvdGggcmVzaWRlIGluIGBidWlsdGluL2xvZy5jYCwKK3NpbmNlIHRoZXkgc2hhcmUgcXVpdGUgYSBiaXQgb2YgY29kZS4gIEluIHRoYXQgY2FzZSwgdGhlIGNvbW1hbmRzIHdoaWNoIGFyZQorX25vdF8gbmFtZWQgbGlrZSB0aGUgYC5jYCBmaWxlIGluIHdoaWNoIHRoZXkgbGl2ZSBoYXZlIHRvIGJlIGxpc3RlZCBpbgorYEJVSUxUX0lOU2AgaW4gdGhlIGBNYWtlZmlsZWAuCisKK2BnaXQgbG9nYCBsb29rcyBtb3JlIGNvbXBsaWNhdGVkIGluIEMgdGhhbiBpdCBkb2VzIGluIHRoZSBvcmlnaW5hbCBzY3JpcHQsCitidXQgdGhhdCBhbGxvd3MgZm9yIGEgbXVjaCBncmVhdGVyIGZsZXhpYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS4KKworSGVyZSBhZ2FpbiBpdCBpcyBhIGdvb2QgcG9pbnQgdG8gdGFrZSBhIHBhdXNlLgorCitMZXNzb24gdGhyZWUgaXM6IHN0dWR5IHRoZSBjb2RlLiAgUmVhbGx5LCBpdCBpcyB0aGUgYmVzdCB3YXkgdG8gbGVhcm4gYWJvdXQKK3RoZSBvcmdhbml6YXRpb24gb2YgR2l0IChhZnRlciB5b3Uga25vdyB0aGUgYmFzaWMgY29uY2VwdHMpLgorCitTbywgdGhpbmsgYWJvdXQgc29tZXRoaW5nIHdoaWNoIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiwgc2F5LCAiaG93IGNhbiBJCithY2Nlc3MgYSBibG9iIGp1c3Qga25vd2luZyB0aGUgb2JqZWN0IG5hbWUgb2YgaXQ/Ii4gIFRoZSBmaXJzdCBzdGVwIGlzIHRvCitmaW5kIGEgR2l0IGNvbW1hbmQgd2l0aCB3aGljaCB5b3UgY2FuIGRvIGl0LiAgSW4gdGhpcyBleGFtcGxlLCBpdCBpcyBlaXRoZXIKK2BnaXQgc2hvd2Agb3IgYGdpdCBjYXQtZmlsZWAuCisKK0ZvciB0aGUgc2FrZSBvZiBjbGFyaXR5LCBsZXQncyBzdGF5IHdpdGggYGdpdCBjYXQtZmlsZWAsIGJlY2F1c2UgaXQKKworLSBpcyBwbHVtYmluZywgYW5kCisKKy0gd2FzIGFyb3VuZCBldmVuIGluIHRoZSBpbml0aWFsIGNvbW1pdCAoaXQgbGl0ZXJhbGx5IHdlbnQgb25seSB0aHJvdWdoCisgIHNvbWUgMjAgcmV2aXNpb25zIGFzIGBjYXQtZmlsZS5jYCwgd2FzIHJlbmFtZWQgdG8gYGJ1aWx0aW4vY2F0LWZpbGUuY2AKKyAgd2hlbiBtYWRlIGEgYnVpbHRpbiwgYW5kIHRoZW4gc2F3IGxlc3MgdGhhbiAxMCB2ZXJzaW9ucykuCisKK1NvLCBsb29rIGludG8gYGJ1aWx0aW4vY2F0LWZpbGUuY2AsIHNlYXJjaCBmb3IgYGNtZF9jYXRfZmlsZSgpYCBhbmQgbG9vayB3aGF0CitpdCBkb2VzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcpOworICAgICAgICBpZiAoYXJnYyAhPSAzKQorCQl1c2FnZSgiZ2l0IGNhdC1maWxlIFstdHwtc3wtZXwtcHw8dHlwZT5dIDxzaGExPiIpOworICAgICAgICBpZiAoZ2V0X3NoYTEoYXJndlsyXSwgc2hhMSkpCisgICAgICAgICAgICAgICAgZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZ3ZbMl0pOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xldCdzIHNraXAgb3ZlciB0aGUgb2J2aW91cyBkZXRhaWxzOyB0aGUgb25seSByZWFsbHkgaW50ZXJlc3RpbmcgcGFydAoraGVyZSBpcyB0aGUgY2FsbCB0byBgZ2V0X3NoYTEoKWAuICBJdCB0cmllcyB0byBpbnRlcnByZXQgYGFyZ3ZbMl1gIGFzIGFuCitvYmplY3QgbmFtZSwgYW5kIGlmIGl0IHJlZmVycyB0byBhbiBvYmplY3Qgd2hpY2ggaXMgcHJlc2VudCBpbiB0aGUgY3VycmVudAorcmVwb3NpdG9yeSwgaXQgd3JpdGVzIHRoZSByZXN1bHRpbmcgU0hBLTEgaW50byB0aGUgdmFyaWFibGUgYHNoYTFgLgorCitUd28gdGhpbmdzIGFyZSBpbnRlcmVzdGluZyBoZXJlOgorCistIGBnZXRfc2hhMSgpYCByZXR1cm5zIDAgb24gX3N1Y2Nlc3NfLiAgVGhpcyBtaWdodCBzdXJwcmlzZSBzb21lIG5ldworICBHaXQgaGFja2VycywgYnV0IHRoZXJlIGlzIGEgbG9uZyB0cmFkaXRpb24gaW4gVU5JWCB0byByZXR1cm4gZGlmZmVyZW50CisgIG5lZ2F0aXZlIG51bWJlcnMgaW4gY2FzZSBvZiBkaWZmZXJlbnQgZXJyb3JzLS1hbmQgMCBvbiBzdWNjZXNzLgorCistIHRoZSB2YXJpYWJsZSBgc2hhMWAgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBgZ2V0X3NoYTEoKWAgaXMgYHVuc2lnbmVkCisgIGNoYXIgKmAsIGJ1dCBpcyBhY3R1YWxseSBleHBlY3RlZCB0byBiZSBhIHBvaW50ZXIgdG8gYHVuc2lnbmVkCisgIGNoYXJbMjBdYC4gIFRoaXMgdmFyaWFibGUgd2lsbCBjb250YWluIHRoZSAxNjAtYml0IFNIQS0xIG9mIHRoZSBnaXZlbgorICBjb21taXQuICBOb3RlIHRoYXQgd2hlbmV2ZXIgYSBTSEEtMSBpcyBwYXNzZWQgYXMgYHVuc2lnbmVkIGNoYXIgKmAsIGl0CisgIGlzIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24sIGFzIG9wcG9zZWQgdG8gdGhlIEFTQ0lJIHJlcHJlc2VudGF0aW9uIGluCisgIGhleCBjaGFyYWN0ZXJzLCB3aGljaCBpcyBwYXNzZWQgYXMgYGNoYXIgKmAuCisKK1lvdSB3aWxsIHNlZSBib3RoIG9mIHRoZXNlIHRoaW5ncyB0aHJvdWdob3V0IHRoZSBjb2RlLgorCitOb3csIGZvciB0aGUgbWVhdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIGJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHNoYTEsIGFyZ3ZbMV0sICZzaXplLCBOVUxMKTsKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgaG93IHlvdSByZWFkIGEgYmxvYiAoYWN0dWFsbHksIG5vdCBvbmx5IGEgYmxvYiwgYnV0IGFueSB0eXBlIG9mCitvYmplY3QpLiAgVG8ga25vdyBob3cgdGhlIGZ1bmN0aW9uIGByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZSgpYCBhY3R1YWxseQord29ya3MsIGZpbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBpdCAoc29tZXRoaW5nIGxpa2UgYGdpdCBncmVwCityZWFkX29iamVjdF93aXRoIHwgZ3JlcCAiOlthLXpdImAgaW4gdGhlIEdpdCByZXBvc2l0b3J5KSwgYW5kIHJlYWQKK3RoZSBzb3VyY2UuCisKK1RvIGZpbmQgb3V0IGhvdyB0aGUgcmVzdWx0IGNhbiBiZSB1c2VkLCBqdXN0IHJlYWQgb24gaW4gYGNtZF9jYXRfZmlsZSgpYDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgd3JpdGVfb3JfZGllKDEsIGJ1Ziwgc2l6ZSk7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21ldGltZXMsIHlvdSBkbyBub3Qga25vdyB3aGVyZSB0byBsb29rIGZvciBhIGZlYXR1cmUuICBJbiBtYW55IHN1Y2ggY2FzZXMsCitpdCBoZWxwcyB0byBzZWFyY2ggdGhyb3VnaCB0aGUgb3V0cHV0IG9mIGBnaXQgbG9nYCwgYW5kIHRoZW4gYGdpdCBzaG93YCB0aGUKK2NvcnJlc3BvbmRpbmcgY29tbWl0LgorCitFeGFtcGxlOiBJZiB5b3Uga25vdyB0aGF0IHRoZXJlIHdhcyBzb21lIHRlc3QgY2FzZSBmb3IgYGdpdCBidW5kbGVgLCBidXQKK2RvIG5vdCByZW1lbWJlciB3aGVyZSBpdCB3YXMgKHllcywgeW91IF9jb3VsZF8gYGdpdCBncmVwIGJ1bmRsZSB0L2AsIGJ1dCB0aGF0Citkb2VzIG5vdCBpbGx1c3RyYXRlIHRoZSBwb2ludCEpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGxvZyAtLW5vLW1lcmdlcyB0LworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoZSBwYWdlciAoYGxlc3NgKSwganVzdCBzZWFyY2ggZm9yICJidW5kbGUiLCBnbyBhIGZldyBsaW5lcyBiYWNrLAorYW5kIHNlZSB0aGF0IGl0IGlzIGluIGNvbW1pdCAxODQ0OWFiMC4uLiAgTm93IGp1c3QgY29weSB0aGlzIG9iamVjdCBuYW1lLAorYW5kIHBhc3RlIGl0IGludG8gdGhlIGNvbW1hbmQgbGluZQorCistLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBzaG93IDE4NDQ5YWIwCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1ZvaWxhLgorCitBbm90aGVyIGV4YW1wbGU6IEZpbmQgb3V0IHdoYXQgdG8gZG8gaW4gb3JkZXIgdG8gbWFrZSBzb21lIHNjcmlwdCBhCitidWlsdGluOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBsb2cgLS1uby1tZXJnZXMgLS1kaWZmLWZpbHRlcj1BIGJ1aWx0aW4vKi5jCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBzZWUsIEdpdCBpcyBhY3R1YWxseSB0aGUgYmVzdCB0b29sIHRvIGZpbmQgb3V0IGFib3V0IHRoZSBzb3VyY2Ugb2YgR2l0CitpdHNlbGYhCisKK1tbZ2xvc3NhcnldXQorR2l0IEdsb3NzYXJ5Cis9PT09PT09PT09PT0KKworaW5jbHVkZTo6Z2xvc3NhcnktY29udGVudC50eHRbXQorCitbW2dpdC1xdWljay1zdGFydF1dCitBcHBlbmRpeCBBOiBHaXQgUXVpY2sgUmVmZXJlbmNlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgYSBxdWljayBzdW1tYXJ5IG9mIHRoZSBtYWpvciBjb21tYW5kczsgdGhlIHByZXZpb3VzIGNoYXB0ZXJzCitleHBsYWluIGhvdyB0aGVzZSB3b3JrIGluIG1vcmUgZGV0YWlsLgorCitbW3F1aWNrLWNyZWF0aW5nLWEtbmV3LXJlcG9zaXRvcnldXQorQ3JlYXRpbmcgYSBuZXcgcmVwb3NpdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcm9tIGEgdGFyYmFsbDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgdGFyIHh6ZiBwcm9qZWN0LnRhci5negorJCBjZCBwcm9qZWN0CiskIGdpdCBpbml0CitJbml0aWFsaXplZCBlbXB0eSBHaXQgcmVwb3NpdG9yeSBpbiAuZ2l0LworJCBnaXQgYWRkIC4KKyQgZ2l0IGNvbW1pdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2xvbmUgZ2l0Oi8vZXhhbXBsZS5jb20vcHViL3Byb2plY3QuZ2l0CiskIGNkIHByb2plY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tbbWFuYWdpbmctYnJhbmNoZXNdXQorTWFuYWdpbmcgYnJhbmNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBicmFuY2gJICAgICAjIGxpc3QgYWxsIGxvY2FsIGJyYW5jaGVzIGluIHRoaXMgcmVwbworJCBnaXQgY2hlY2tvdXQgdGVzdCAgIyBzd2l0Y2ggd29ya2luZyBkaXJlY3RvcnkgdG8gYnJhbmNoICJ0ZXN0IgorJCBnaXQgYnJhbmNoIG5ldyAgICAgIyBjcmVhdGUgYnJhbmNoICJuZXciIHN0YXJ0aW5nIGF0IGN1cnJlbnQgSEVBRAorJCBnaXQgYnJhbmNoIC1kIG5ldyAgIyBkZWxldGUgYnJhbmNoICJuZXciCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnN0ZWFkIG9mIGJhc2luZyBhIG5ldyBicmFuY2ggb24gY3VycmVudCBIRUFEICh0aGUgZGVmYXVsdCksIHVzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGJyYW5jaCBuZXcgdGVzdCAgICAjIGJyYW5jaCBuYW1lZCAidGVzdCIKKyQgZ2l0IGJyYW5jaCBuZXcgdjIuNi4xNSAjIHRhZyBuYW1lZCB2Mi42LjE1CiskIGdpdCBicmFuY2ggbmV3IEhFQUReICAgIyBjb21taXQgYmVmb3JlIHRoZSBtb3N0IHJlY2VudAorJCBnaXQgYnJhbmNoIG5ldyBIRUFEXl4gICMgY29tbWl0IGJlZm9yZSB0aGF0CiskIGdpdCBicmFuY2ggbmV3IHRlc3R+MTAgIyB0ZW4gY29tbWl0cyBiZWZvcmUgdGlwIG9mIGJyYW5jaCAidGVzdCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaCBhdCB0aGUgc2FtZSB0aW1lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgY2hlY2tvdXQgLWIgbmV3IHYyLjYuMTUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VwZGF0ZSBhbmQgZXhhbWluZSBicmFuY2hlcyBmcm9tIHRoZSByZXBvc2l0b3J5IHlvdSBjbG9uZWQgZnJvbToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZldGNoCQkjIHVwZGF0ZQorJCBnaXQgYnJhbmNoIC1yCQkjIGxpc3QKKyAgb3JpZ2luL21hc3RlcgorICBvcmlnaW4vbmV4dAorICAuLi4KKyQgZ2l0IGNoZWNrb3V0IC1iIG1hc3Rlcndvcmsgb3JpZ2luL21hc3RlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRmV0Y2ggYSBicmFuY2ggZnJvbSBhIGRpZmZlcmVudCByZXBvc2l0b3J5LCBhbmQgZ2l2ZSBpdCBhIG5ldworbmFtZSBpbiB5b3VyIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmZXRjaCBnaXQ6Ly9leGFtcGxlLmNvbS9wcm9qZWN0LmdpdCB0aGVpcmJyYW5jaDpteWJyYW5jaAorJCBnaXQgZmV0Y2ggZ2l0Oi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgdjIuNi4xNTpteWJyYW5jaAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworS2VlcCBhIGxpc3Qgb2YgcmVwb3NpdG9yaWVzIHlvdSB3b3JrIHdpdGggcmVndWxhcmx5OgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgcmVtb3RlIGFkZCBleGFtcGxlIGdpdDovL2V4YW1wbGUuY29tL3Byb2plY3QuZ2l0CiskIGdpdCByZW1vdGUJCQkjIGxpc3QgcmVtb3RlIHJlcG9zaXRvcmllcworZXhhbXBsZQorb3JpZ2luCiskIGdpdCByZW1vdGUgc2hvdyBleGFtcGxlCSMgZ2V0IGRldGFpbHMKKyogcmVtb3RlIGV4YW1wbGUKKyAgVVJMOiBnaXQ6Ly9leGFtcGxlLmNvbS9wcm9qZWN0LmdpdAorICBUcmFja2VkIHJlbW90ZSBicmFuY2hlcworICAgIG1hc3RlcgorICAgIG5leHQKKyAgICAuLi4KKyQgZ2l0IGZldGNoIGV4YW1wbGUJCSMgdXBkYXRlIGJyYW5jaGVzIGZyb20gZXhhbXBsZQorJCBnaXQgYnJhbmNoIC1yCQkJIyBsaXN0IGFsbCByZW1vdGUgYnJhbmNoZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworW1tleHBsb3JpbmctaGlzdG9yeV1dCitFeHBsb3JpbmcgaGlzdG9yeQorLS0tLS0tLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0awkJCSAgICAjIHZpc3VhbGl6ZSBhbmQgYnJvd3NlIGhpc3RvcnkKKyQgZ2l0IGxvZwkJICAgICMgbGlzdCBhbGwgY29tbWl0cworJCBnaXQgbG9nIHNyYy8JCSAgICAjIC4uLm1vZGlmeWluZyBzcmMvCiskIGdpdCBsb2cgdjIuNi4xNS4udjIuNi4xNiAgIyAuLi5pbiB2Mi42LjE2LCBub3QgaW4gdjIuNi4xNQorJCBnaXQgbG9nIG1hc3Rlci4udGVzdAkgICAgIyAuLi5pbiBicmFuY2ggdGVzdCwgbm90IGluIGJyYW5jaCBtYXN0ZXIKKyQgZ2l0IGxvZyB0ZXN0Li5tYXN0ZXIJICAgICMgLi4uaW4gYnJhbmNoIG1hc3RlciwgYnV0IG5vdCBpbiB0ZXN0CiskIGdpdCBsb2cgdGVzdC4uLm1hc3RlcgkgICAgIyAuLi5pbiBvbmUgYnJhbmNoLCBub3QgaW4gYm90aAorJCBnaXQgbG9nIC1TJ2ZvbygpJwkgICAgIyAuLi53aGVyZSBkaWZmZXJlbmNlIGNvbnRhaW4gImZvbygpIgorJCBnaXQgbG9nIC0tc2luY2U9IjIgd2Vla3MgYWdvIgorJCBnaXQgbG9nIC1wCQkgICAgIyBzaG93IHBhdGNoZXMgYXMgd2VsbAorJCBnaXQgc2hvdwkJICAgICMgbW9zdCByZWNlbnQgY29tbWl0CiskIGdpdCBkaWZmIHYyLjYuMTUuLnYyLjYuMTYgIyBkaWZmIGJldHdlZW4gdHdvIHRhZ2dlZCB2ZXJzaW9ucworJCBnaXQgZGlmZiB2Mi42LjE1Li5IRUFEICAgICMgZGlmZiB3aXRoIGN1cnJlbnQgaGVhZAorJCBnaXQgZ3JlcCAiZm9vKCkiCSAgICAjIHNlYXJjaCB3b3JraW5nIGRpcmVjdG9yeSBmb3IgImZvbygpIgorJCBnaXQgZ3JlcCB2Mi42LjE1ICJmb28oKSIgICMgc2VhcmNoIG9sZCB0cmVlIGZvciAiZm9vKCkiCiskIGdpdCBzaG93IHYyLjYuMTU6YS50eHQgICAgIyBsb29rIGF0IG9sZCB2ZXJzaW9uIG9mIGEudHh0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZWFyY2ggZm9yIHJlZ3Jlc3Npb25zOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCBnaXQgYmlzZWN0IHN0YXJ0CiskIGdpdCBiaXNlY3QgYmFkCQkjIGN1cnJlbnQgdmVyc2lvbiBpcyBiYWQKKyQgZ2l0IGJpc2VjdCBnb29kIHYyLjYuMTMtcmMyCSMgbGFzdCBrbm93biBnb29kIHJldmlzaW9uCitCaXNlY3Rpbmc6IDY3NSByZXZpc2lvbnMgbGVmdCB0byB0ZXN0IGFmdGVyIHRoaXMKKwkJCQkjIHRlc3QgaGVyZSwgdGhlbjoKKyQgZ2l0IGJpc2VjdCBnb29kCQkjIGlmIHRoaXMgcmV2aXNpb24gaXMgZ29vZCwgb3IKKyQgZ2l0IGJpc2VjdCBiYWQJCSMgaWYgdGhpcyByZXZpc2lvbiBpcyBiYWQuCisJCQkJIyByZXBlYXQgdW50aWwgZG9uZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tbbWFraW5nLWNoYW5nZXNdXQorTWFraW5nIGNoYW5nZXMKKy0tLS0tLS0tLS0tLS0tCisKK01ha2Ugc3VyZSBHaXQga25vd3Mgd2hvIHRvIGJsYW1lOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgY2F0ID4+fi8uZ2l0Y29uZmlnIDw8XEVPRgorW3VzZXJdCisJbmFtZSA9IFlvdXIgTmFtZSBDb21lcyBIZXJlCisJZW1haWwgPSB5b3VAeW91cmRvbWFpbi5leGFtcGxlLmNvbQorRU9GCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VsZWN0IGZpbGUgY29udGVudHMgdG8gaW5jbHVkZSBpbiB0aGUgbmV4dCBjb21taXQsIHRoZW4gbWFrZSB0aGUKK2NvbW1pdDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGFkZCBhLnR4dCAgICAjIHVwZGF0ZWQgZmlsZQorJCBnaXQgYWRkIGIudHh0ICAgICMgbmV3IGZpbGUKKyQgZ2l0IHJtIGMudHh0ICAgICAjIG9sZCBmaWxlCiskIGdpdCBjb21taXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09yLCBwcmVwYXJlIGFuZCBjcmVhdGUgdGhlIGNvbW1pdCBpbiBvbmUgc3RlcDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGNvbW1pdCBkLnR4dCAjIHVzZSBsYXRlc3QgY29udGVudCBvbmx5IG9mIGQudHh0CiskIGdpdCBjb21taXQgLWEJICAgIyB1c2UgbGF0ZXN0IGNvbnRlbnQgb2YgYWxsIHRyYWNrZWQgZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1tbbWVyZ2luZ11dCitNZXJnaW5nCistLS0tLS0tCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBtZXJnZSB0ZXN0ICAgIyBtZXJnZSBicmFuY2ggInRlc3QiIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoCiskIGdpdCBwdWxsIGdpdDovL2V4YW1wbGUuY29tL3Byb2plY3QuZ2l0IG1hc3RlcgorCQkgICAjIGZldGNoIGFuZCBtZXJnZSBpbiByZW1vdGUgYnJhbmNoCiskIGdpdCBwdWxsIC4gdGVzdCAgIyBlcXVpdmFsZW50IHRvIGdpdCBtZXJnZSB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW3NoYXJpbmcteW91ci1jaGFuZ2VzXV0KK1NoYXJpbmcgeW91ciBjaGFuZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbXBvcnRpbmcgb3IgZXhwb3J0aW5nIHBhdGNoZXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBmb3JtYXQtcGF0Y2ggb3JpZ2luLi5IRUFEICMgZm9ybWF0IGEgcGF0Y2ggZm9yIGVhY2ggY29tbWl0CisJCQkJIyBpbiBIRUFEIGJ1dCBub3QgaW4gb3JpZ2luCiskIGdpdCBhbSBtYm94ICMgaW1wb3J0IHBhdGNoZXMgZnJvbSB0aGUgbWFpbGJveCAibWJveCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZldGNoIGEgYnJhbmNoIGluIGEgZGlmZmVyZW50IEdpdCByZXBvc2l0b3J5LCB0aGVuIG1lcmdlIGludG8gdGhlCitjdXJyZW50IGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgZ2l0Oi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgdGhlaXJicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N0b3JlIHRoZSBmZXRjaGVkIGJyYW5jaCBpbnRvIGEgbG9jYWwgYnJhbmNoIGJlZm9yZSBtZXJnaW5nIGludG8gdGhlCitjdXJyZW50IGJyYW5jaDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1bGwgZ2l0Oi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgdGhlaXJicmFuY2g6bXlicmFuY2gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIGNyZWF0aW5nIGNvbW1pdHMgb24gYSBsb2NhbCBicmFuY2gsIHVwZGF0ZSB0aGUgcmVtb3RlCiticmFuY2ggd2l0aCB5b3VyIGNvbW1pdHM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBwdXNoIHNzaDovL2V4YW1wbGUuY29tL3Byb2plY3QuZ2l0IG15YnJhbmNoOnRoZWlyYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIHJlbW90ZSBhbmQgbG9jYWwgYnJhbmNoIGFyZSBib3RoIG5hbWVkICJ0ZXN0IjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IHB1c2ggc3NoOi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQgdGVzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2hvcnRjdXQgdmVyc2lvbiBmb3IgYSBmcmVxdWVudGx5IHVzZWQgcmVtb3RlIHJlcG9zaXRvcnk6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCByZW1vdGUgYWRkIGV4YW1wbGUgc3NoOi8vZXhhbXBsZS5jb20vcHJvamVjdC5naXQKKyQgZ2l0IHB1c2ggZXhhbXBsZSB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitbW3JlcG9zaXRvcnktbWFpbnRlbmFuY2VdXQorUmVwb3NpdG9yeSBtYWludGVuYW5jZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGVjayBmb3IgY29ycnVwdGlvbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQgZ2l0IGZzY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlY29tcHJlc3MsIHJlbW92ZSB1bnVzZWQgY3J1ZnQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIGdpdCBnYworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitbW3RvZG9dXQorQXBwZW5kaXggQjogTm90ZXMgYW5kIHRvZG8gbGlzdCBmb3IgdGhpcyBtYW51YWwKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgYSB3b3JrIGluIHByb2dyZXNzLgorCitUaGUgYmFzaWMgcmVxdWlyZW1lbnRzOgorCistIEl0IG11c3QgYmUgcmVhZGFibGUgaW4gb3JkZXIsIGZyb20gYmVnaW5uaW5nIHRvIGVuZCwgYnkgc29tZW9uZQorICBpbnRlbGxpZ2VudCB3aXRoIGEgYmFzaWMgZ3Jhc3Agb2YgdGhlIFVOSVggY29tbWFuZCBsaW5lLCBidXQgd2l0aG91dAorICBhbnkgc3BlY2lhbCBrbm93bGVkZ2Ugb2YgR2l0LiAgSWYgbmVjZXNzYXJ5LCBhbnkgb3RoZXIgcHJlcmVxdWlzaXRlcworICBzaG91bGQgYmUgc3BlY2lmaWNhbGx5IG1lbnRpb25lZCBhcyB0aGV5IGFyaXNlLgorLSBXaGVuZXZlciBwb3NzaWJsZSwgc2VjdGlvbiBoZWFkaW5ncyBzaG91bGQgY2xlYXJseSBkZXNjcmliZSB0aGUgdGFzaworICB0aGV5IGV4cGxhaW4gaG93IHRvIGRvLCBpbiBsYW5ndWFnZSB0aGF0IHJlcXVpcmVzIG5vIG1vcmUga25vd2xlZGdlCisgIHRoYW4gbmVjZXNzYXJ5OiBmb3IgZXhhbXBsZSwgImltcG9ydGluZyBwYXRjaGVzIGludG8gYSBwcm9qZWN0IiByYXRoZXIKKyAgdGhhbiAidGhlIGBnaXQgYW1gIGNvbW1hbmQiCisKK1RoaW5rIGFib3V0IGhvdyB0byBjcmVhdGUgYSBjbGVhciBjaGFwdGVyIGRlcGVuZGVuY3kgZ3JhcGggdGhhdCB3aWxsCithbGxvdyBwZW9wbGUgdG8gZ2V0IHRvIGltcG9ydGFudCB0b3BpY3Mgd2l0aG91dCBuZWNlc3NhcmlseSByZWFkaW5nCitldmVyeXRoaW5nIGluIGJldHdlZW4uCisKK1NjYW4gYERvY3VtZW50YXRpb24vYCBmb3Igb3RoZXIgc3R1ZmYgbGVmdCBvdXQ7IGluIHBhcnRpY3VsYXI6CisKKy0gaG93dG8ncworLSBzb21lIG9mIGB0ZWNobmljYWwvYD8KKy0gaG9va3MKKy0gbGlzdCBvZiBjb21tYW5kcyBpbiBsaW5rZ2l0OmdpdFsxXQorCitTY2FuIGVtYWlsIGFyY2hpdmVzIGZvciBvdGhlciBzdHVmZiBsZWZ0IG91dAorCitTY2FuIG1hbiBwYWdlcyB0byBzZWUgaWYgYW55IGFzc3VtZSBtb3JlIGJhY2tncm91bmQgdGhhbiB0aGlzIG1hbnVhbAorcHJvdmlkZXMuCisKK1NpbXBsaWZ5IGJlZ2lubmluZyBieSBzdWdnZXN0aW5nIGRpc2Nvbm5lY3RlZCBoZWFkIGluc3RlYWQgb2YKK3RlbXBvcmFyeSBicmFuY2ggY3JlYXRpb24/CisKK0FkZCBtb3JlIGdvb2QgZXhhbXBsZXMuICBFbnRpcmUgc2VjdGlvbnMgb2YganVzdCBjb29rYm9vayBleGFtcGxlcworbWlnaHQgYmUgYSBnb29kIGlkZWE7IG1heWJlIG1ha2UgYW4gImFkdmFuY2VkIGV4YW1wbGVzIiBzZWN0aW9uIGEKK3N0YW5kYXJkIGVuZC1vZi1jaGFwdGVyIHNlY3Rpb24/CisKK0luY2x1ZGUgY3Jvc3MtcmVmZXJlbmNlcyB0byB0aGUgZ2xvc3NhcnksIHdoZXJlIGFwcHJvcHJpYXRlLgorCitEb2N1bWVudCBzaGFsbG93IGNsb25lcz8gIFNlZSBkcmFmdCAxLjUuMCByZWxlYXNlIG5vdGVzIGZvciBzb21lCitkb2N1bWVudGF0aW9uLgorCitBZGQgYSBzZWN0aW9uIG9uIHdvcmtpbmcgd2l0aCBvdGhlciB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtcywgaW5jbHVkaW5nCitDVlMsIFN1YnZlcnNpb24sIGFuZCBqdXN0IGltcG9ydHMgb2Ygc2VyaWVzIG9mIHJlbGVhc2UgdGFyYmFsbHMuCisKK01vcmUgZGV0YWlscyBvbiBnaXR3ZWI/CisKK1dyaXRlIGEgY2hhcHRlciBvbiB1c2luZyBwbHVtYmluZyBhbmQgd3JpdGluZyBzY3JpcHRzLgorCitBbHRlcm5hdGVzLCBjbG9uZSAtcmVmZXJlbmNlLCBldGMuCisKK01vcmUgb24gcmVjb3ZlcnkgZnJvbSByZXBvc2l0b3J5IGNvcnJ1cHRpb24uICBTZWU6CisJaHR0cDovL21hcmMuaW5mby8/bD1naXQmbT0xMTcyNjM4NjQ4MjA3OTkmdz0yCisJaHR0cDovL21hcmMuaW5mby8/bD1naXQmbT0xMTcxNDc4NTU1MDM3OTgmdz0yCmRpZmYgLS1naXQgYS9HSVQtVkVSU0lPTi1HRU4gYi9HSVQtVkVSU0lPTi1HRU4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTRlNDBjNAotLS0gL2Rldi9udWxsCisrKyBiL0dJVC1WRVJTSU9OLUdFTgpAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKworR1ZGPUdJVC1WRVJTSU9OLUZJTEUKK0RFRl9WRVI9djIuNi4wLkdJVAorCitMRj0nCisnCisKKyMgRmlyc3Qgc2VlIGlmIHRoZXJlIGlzIGEgdmVyc2lvbiBmaWxlIChpbmNsdWRlZCBpbiByZWxlYXNlIHRhcmJhbGxzKSwKKyMgdGhlbiB0cnkgZ2l0LWRlc2NyaWJlLCB0aGVuIGRlZmF1bHQuCitpZiB0ZXN0IC1mIHZlcnNpb24KK3RoZW4KKwlWTj0kKGNhdCB2ZXJzaW9uKSB8fCBWTj0iJERFRl9WRVIiCitlbGlmIHRlc3QgLWQgJHtHSVRfRElSOi0uZ2l0fSAtbyAtZiAuZ2l0ICYmCisJVk49JChnaXQgZGVzY3JpYmUgLS1tYXRjaCAidlswLTldKiIgLS1hYmJyZXY9NyBIRUFEIDI+L2Rldi9udWxsKSAmJgorCWNhc2UgIiRWTiIgaW4KKwkqJExGKikgKGV4aXQgMSkgOzsKKwl2WzAtOV0qKQorCQlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAorCQl0ZXN0IC16ICIkKGdpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQgLS0pIiB8fAorCQlWTj0iJFZOLWRpcnR5IiA7OworCWVzYWMKK3RoZW4KKwlWTj0kKGVjaG8gIiRWTiIgfCBzZWQgLWUgJ3MvLS8uL2cnKTsKK2Vsc2UKKwlWTj0iJERFRl9WRVIiCitmaQorCitWTj0kKGV4cHIgIiRWTiIgOiB2KidcKC4qXCknKQorCitpZiB0ZXN0IC1yICRHVkYKK3RoZW4KKwlWQz0kKHNlZCAtZSAncy9eR0lUX1ZFUlNJT04gPSAvLycgPCRHVkYpCitlbHNlCisJVkM9dW5zZXQKK2ZpCit0ZXN0ICIkVk4iID0gIiRWQyIgfHwgeworCWVjaG8gPiYyICJHSVRfVkVSU0lPTiA9ICRWTiIKKwllY2hvICJHSVRfVkVSU0lPTiA9ICRWTiIgPiRHVkYKK30KZGlmZiAtLWdpdCBhL0lOU1RBTEwgYi9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYjA3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9JTlNUQUxMCkBAIC0wLDAgKzEsMjIzIEBACisKKwkJR2l0IGluc3RhbGxhdGlvbgorCitOb3JtYWxseSB5b3UgY2FuIGp1c3QgZG8gIm1ha2UiIGZvbGxvd2VkIGJ5ICJtYWtlIGluc3RhbGwiLCBhbmQgdGhhdAord2lsbCBpbnN0YWxsIHRoZSBnaXQgcHJvZ3JhbXMgaW4geW91ciBvd24gfi9iaW4vIGRpcmVjdG9yeS4gIElmIHlvdSB3YW50Cit0byBkbyBhIGdsb2JhbCBpbnN0YWxsLCB5b3UgY2FuIGRvCisKKwkkIG1ha2UgcHJlZml4PS91c3IgYWxsIGRvYyBpbmZvIDsjIGFzIHlvdXJzZWxmCisJIyBtYWtlIHByZWZpeD0vdXNyIGluc3RhbGwgaW5zdGFsbC1kb2MgaW5zdGFsbC1odG1sIGluc3RhbGwtaW5mbyA7IyBhcyByb290CisKKyhvciBwcmVmaXg9L3Vzci9sb2NhbCwgb2YgY291cnNlKS4gIEp1c3QgbGlrZSBhbnkgcHJvZ3JhbSBzdWl0ZQordGhhdCB1c2VzICRwcmVmaXgsIHRoZSBidWlsdCByZXN1bHRzIGhhdmUgc29tZSBwYXRocyBlbmNvZGVkLAord2hpY2ggYXJlIGRlcml2ZWQgZnJvbSAkcHJlZml4LCBzbyAibWFrZSBhbGw7IG1ha2UgcHJlZml4PS91c3IKK2luc3RhbGwiIHdvdWxkIG5vdCB3b3JrLgorCitUaGUgYmVnaW5uaW5nIG9mIHRoZSBNYWtlZmlsZSBkb2N1bWVudHMgbWFueSB2YXJpYWJsZXMgdGhhdCBhZmZlY3QgdGhlIHdheQorZ2l0IGlzIGJ1aWx0LiAgWW91IGNhbiBvdmVycmlkZSB0aGVtIGVpdGhlciBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIG9yIGluIGEKK2NvbmZpZy5tYWsgZmlsZS4KKworQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHVzZSBhdXRvY29uZiBnZW5lcmF0ZWQgLi9jb25maWd1cmUgc2NyaXB0IHRvCitzZXQgdXAgaW5zdGFsbCBwYXRocyAodmlhIGNvbmZpZy5tYWsuYXV0b2dlbiksIHNvIHlvdSBjYW4gd3JpdGUgaW5zdGVhZAorCisJJCBtYWtlIGNvbmZpZ3VyZSA7IyBhcyB5b3Vyc2VsZgorCSQgLi9jb25maWd1cmUgLS1wcmVmaXg9L3VzciA7IyBhcyB5b3Vyc2VsZgorCSQgbWFrZSBhbGwgZG9jIDsjIGFzIHlvdXJzZWxmCisJIyBtYWtlIGluc3RhbGwgaW5zdGFsbC1kb2MgaW5zdGFsbC1odG1sOyMgYXMgcm9vdAorCitJZiB5b3UncmUgd2lsbGluZyB0byB0cmFkZSBvZmYgKG11Y2gpIGxvbmdlciBidWlsZCB0aW1lIGZvciBhIGxhdGVyCitmYXN0ZXIgZ2l0IHlvdSBjYW4gYWxzbyBkbyBhIHByb2ZpbGUgZmVlZGJhY2sgYnVpbGQgd2l0aAorCisJJCBtYWtlIHByZWZpeD0vdXNyIHByb2ZpbGUKKwkjIG1ha2UgcHJlZml4PS91c3IgUFJPRklMRT1CVUlMRCBpbnN0YWxsCisKK1RoaXMgd2lsbCBydW4gdGhlIGNvbXBsZXRlIHRlc3Qgc3VpdGUgYXMgdHJhaW5pbmcgd29ya2xvYWQgYW5kIHRoZW4KK3JlYnVpbGQgZ2l0IHdpdGggdGhlIGdlbmVyYXRlZCBwcm9maWxlIGZlZWRiYWNrLiBUaGlzIHJlc3VsdHMgaW4gYSBnaXQKK3doaWNoIGlzIGEgZmV3IHBlcmNlbnQgZmFzdGVyIG9uIENQVSBpbnRlbnNpdmUgd29ya2xvYWRzLiAgVGhpcworbWF5IGJlIGEgZ29vZCB0cmFkZW9mZiBmb3IgZGlzdHJpYnV0aW9uIHBhY2thZ2Vycy4KKworQWx0ZXJuYXRpdmVseSB5b3UgY2FuIHJ1biBwcm9maWxlIGZlZWRiYWNrIG9ubHkgd2l0aCB0aGUgZ2l0IGJlbmNobWFyaworc3VpdGUuIFRoaXMgcnVucyBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHRoZSBmdWxsIHRlc3Qgc3VpdGUsIGJ1dAoraGFzIGxlc3MgY292ZXJhZ2U6CisKKwkkIG1ha2UgcHJlZml4PS91c3IgcHJvZmlsZS1mYXN0CisJIyBtYWtlIHByZWZpeD0vdXNyIFBST0ZJTEU9QlVJTEQgaW5zdGFsbAorCitPciBpZiB5b3UganVzdCB3YW50IHRvIGluc3RhbGwgYSBwcm9maWxlLW9wdGltaXplZCB2ZXJzaW9uIG9mIGdpdCBpbnRvCit5b3VyIGhvbWUgZGlyZWN0b3J5LCB5b3UgY291bGQgcnVuOgorCisJJCBtYWtlIHByb2ZpbGUtaW5zdGFsbAorCitvcgorCSQgbWFrZSBwcm9maWxlLWZhc3QtaW5zdGFsbAorCitBcyBhIGNhdmVhdDogYSBwcm9maWxlLW9wdGltaXplZCBidWlsZCB0YWtlcyBhICpsb3QqIGxvbmdlciBzaW5jZSB0aGUKK2dpdCB0cmVlIG11c3QgYmUgYnVpbHQgdHdpY2UsIGFuZCBpbiBvcmRlciBmb3IgdGhlIHByb2ZpbGluZworbWVhc3VyZW1lbnRzIHRvIHdvcmsgcHJvcGVybHksIGNjYWNoZSBtdXN0IGJlIGRpc2FibGVkIGFuZCB0aGUgdGVzdAorc3VpdGUgaGFzIHRvIGJlIHJ1biB1c2luZyBvbmx5IGEgc2luZ2xlIENQVS4gIEluIGFkZGl0aW9uLCB0aGUgcHJvZmlsZQorZmVlZGJhY2sgYnVpbGQgc3RhZ2UgY3VycmVudGx5IGdlbmVyYXRlcyBhIGxvdCBvZiBhZGRpdGlvbmFsIGNvbXBpbGVyCit3YXJuaW5ncy4KKworSXNzdWVzIG9mIG5vdGU6CisKKyAtIEFuY2llbnQgdmVyc2lvbnMgb2YgR05VIEludGVyYWN0aXZlIFRvb2xzIChwcmUtNC45LjIpIGluc3RhbGxlZCBhCisgICBwcm9ncmFtICJnaXQiLCB3aG9zZSBuYW1lIGNvbmZsaWN0cyB3aXRoIHRoaXMgcHJvZ3JhbS4gIEJ1dCB3aXRoCisgICB2ZXJzaW9uIDQuOS4yLCBhZnRlciBsb25nIGhpYXR1cyB3aXRob3V0IGFjdGl2ZSBtYWludGVuYW5jZSAoc2luY2UKKyAgIGFyb3VuZCAxOTk3KSwgaXQgY2hhbmdlZCBpdHMgbmFtZSB0byBnbnVpdCBhbmQgdGhlIG5hbWUgY29uZmxpY3QgaXMgbm8KKyAgIGxvbmdlciBhIHByb2JsZW0uCisKKyAgIE5PVEU6IFdoZW4gY29tcGlsZWQgd2l0aCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9wdGlvbiwgdGhlIEdOVQorICAgSW50ZXJhY3RpdmUgVG9vbHMgcGFja2FnZSBzdGlsbCBjYW4gaW5zdGFsbCAiZ2l0IiwgYnV0IHlvdSBjYW4gYnVpbGQgaXQKKyAgIHdpdGggLS1kaXNhYmxlLXRyYW5zaXRpb24gb3B0aW9uIHRvIGF2b2lkIHRoaXMuCisKKyAtIFlvdSBjYW4gdXNlIGdpdCBhZnRlciBidWlsZGluZyBidXQgd2l0aG91dCBpbnN0YWxsaW5nIGlmIHlvdSB3YW50CisgICB0byB0ZXN0IGRyaXZlIGl0LiAgU2ltcGx5IHJ1biBnaXQgZm91bmQgaW4gYmluLXdyYXBwZXJzIGRpcmVjdG9yeQorICAgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeSwgb3IgcHJlcGVuZCB0aGF0IGRpcmVjdG9yeSB0byB5b3VyICRQQVRILgorICAgVGhpcyBob3dldmVyIGlzIGxlc3MgZWZmaWNpZW50IHRoYW4gcnVubmluZyBhbiBpbnN0YWxsZWQgZ2l0LCBhcworICAgeW91IGFsd2F5cyBuZWVkIGFuIGV4dHJhIGZvcmsrZXhlYyB0byBydW4gYW55IGdpdCBzdWJjb21tYW5kLgorCisgICBJdCBpcyBzdGlsbCBwb3NzaWJsZSB0byB1c2UgZ2l0IHdpdGhvdXQgaW5zdGFsbGluZyBieSBzZXR0aW5nIGEgZmV3CisgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHdoaWNoIHdhcyB0aGUgd2F5IHRoaXMgd2FzIGRvbmUKKyAgIHRyYWRpdGlvbmFsbHkuICBCdXQgdXNpbmcgZ2l0IGZvdW5kIGluIGJpbi13cmFwcGVycyBkaXJlY3RvcnkgaW4KKyAgIHRoZSBidWlsZCBkaXJlY3RvcnkgaXMgZmFyIHNpbXBsZXIuICBBcyBhIGhpc3RvcmljYWwgcmVmZXJlbmNlLCB0aGUKKyAgIG9sZCB3YXkgd2VudCBsaWtlIHRoaXM6CisKKwlHSVRfRVhFQ19QQVRIPWBwd2RgCisJUEFUSD1gcHdkYDokUEFUSAorCUdJVFBFUkxMSUI9YHB3ZGAvcGVybC9ibGliL2xpYgorCWV4cG9ydCBHSVRfRVhFQ19QQVRIIFBBVEggR0lUUEVSTExJQgorCisgLSBHaXQgaXMgcmVhc29uYWJseSBzZWxmLXN1ZmZpY2llbnQsIGJ1dCBkb2VzIGRlcGVuZCBvbiBhIGZldyBleHRlcm5hbAorICAgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcy4gIEdpdCBjYW4gYmUgdXNlZCB3aXRob3V0IG1vc3Qgb2YgdGhlbSBieSBhZGRpbmcKKyAgIHRoZSBhcHByb3JpYXRlICJOT188TElCUkFSWT49WWVzUGxlYXNlIiB0byB0aGUgbWFrZSBjb21tYW5kIGxpbmUgb3IKKyAgIGNvbmZpZy5tYWsgZmlsZS4KKworCS0gInpsaWIiLCB0aGUgY29tcHJlc3Npb24gbGlicmFyeS4gR2l0IHdvbid0IGJ1aWxkIHdpdGhvdXQgaXQuCisKKwktICJzc2giIGlzIHVzZWQgdG8gcHVzaCBhbmQgcHVsbCBvdmVyIHRoZSBuZXQuCisKKwktIEEgUE9TSVgtY29tcGxpYW50IHNoZWxsIGlzIHJlcXVpcmVkIHRvIHJ1biBtYW55IHNjcmlwdHMgbmVlZGVkCisJICBmb3IgZXZlcnlkYXkgdXNlIChlLmcuICJiaXNlY3QiLCAicHVsbCIpLgorCisJLSAiUGVybCIgdmVyc2lvbiA1Ljggb3IgbGF0ZXIgaXMgbmVlZGVkIHRvIHVzZSBzb21lIG9mIHRoZQorCSAgZmVhdHVyZXMgKGUuZy4gcHJlcGFyaW5nIGEgcGFydGlhbCBjb21taXQgdXNpbmcgImdpdCBhZGQgLWkvLXAiLAorCSAgaW50ZXJhY3Rpbmcgd2l0aCBzdm4gcmVwb3NpdG9yaWVzIHdpdGggImdpdCBzdm4iKS4gIElmIHlvdSBjYW4KKwkgIGxpdmUgd2l0aG91dCB0aGVzZSwgdXNlIE5PX1BFUkwuICBOb3RlIHRoYXQgcmVjZW50IHJlbGVhc2VzIG9mCisJICBSZWRoYXQvRmVkb3JhIGFyZSByZXBvcnRlZCB0byBzaGlwIFBlcmwgYmluYXJ5IHBhY2thZ2Ugd2l0aCBzb21lCisJICBjb3JlIG1vZHVsZXMgc3RyaXBwZWQgYXdheSAoc2VlIGh0dHA6Ly9sd24ubmV0L0FydGljbGVzLzQ3NzIzNC8pLAorCSAgc28geW91IG1pZ2h0IG5lZWQgdG8gaW5zdGFsbCBhZGRpdGlvbmFsIHBhY2thZ2VzIG90aGVyIHRoYW4gUGVybAorCSAgaXRzZWxmLCBlLmcuIFRpbWU6OkhpUmVzLgorCisJLSBnaXQtaW1hcC1zZW5kIG5lZWRzIHRoZSBPcGVuU1NMIGxpYnJhcnkgdG8gdGFsayBJTUFQIG92ZXIgU1NMIGlmCisJICB5b3UgYXJlIHVzaW5nIGxpYmN1cmwgb2xkZXIgdGhhbiA3LjM0LjAuICBPdGhlcndpc2UgeW91IGNhbiB1c2UKKwkgIE5PX09QRU5TU0wgd2l0aG91dCBsb3NpbmcgZ2l0LWltYXAtc2VuZC4KKworCSAgQnkgZGVmYXVsdCwgZ2l0IHVzZXMgT3BlblNTTCBmb3IgU0hBMSBidXQgaXQgd2lsbCB1c2UgaXRzIG93bgorCSAgbGlicmFyeSAoaW5zcGlyZWQgYnkgTW96aWxsYSdzKSB3aXRoIGVpdGhlciBOT19PUEVOU1NMIG9yCisJICBCTEtfU0hBMS4gIEFsc28gaW5jbHVkZWQgaXMgYSB2ZXJzaW9uIG9wdGltaXplZCBmb3IgUG93ZXJQQworCSAgKFBQQ19TSEExKS4KKworCS0gImxpYmN1cmwiIGxpYnJhcnkgaXMgdXNlZCBieSBnaXQtaHR0cC1mZXRjaCwgZ2l0LWZldGNoLCBhbmQsIGlmCisJICB0aGUgY3VybCB2ZXJzaW9uID49IDcuMzQuMCwgZm9yIGdpdC1pbWFwLXNlbmQuICBZb3UgbWlnaHQgYWxzbworCSAgd2FudCB0aGUgImN1cmwiIGV4ZWN1dGFibGUgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gSWYgeW91IGRvIG5vdAorCSAgdXNlIGh0dHA6Ly8gb3IgaHR0cHM6Ly8gcmVwb3NpdG9yaWVzLCBhbmQgZG8gbm90IHdhbnQgdG8gcHV0CisJICBwYXRjaGVzIGludG8gYW4gSU1BUCBtYWlsYm94LCB5b3UgZG8gbm90IGhhdmUgdG8gaGF2ZSB0aGVtCisJICAodXNlIE5PX0NVUkwpLgorCisJLSAiZXhwYXQiIGxpYnJhcnk7IGdpdC1odHRwLXB1c2ggdXNlcyBpdCBmb3IgcmVtb3RlIGxvY2sKKwkgIG1hbmFnZW1lbnQgb3ZlciBEQVYuICBTaW1pbGFyIHRvICJjdXJsIiBhYm92ZSwgdGhpcyBpcyBvcHRpb25hbAorCSAgKHdpdGggTk9fRVhQQVQpLgorCisJLSAid2lzaCIsIHRoZSBUY2wvVGsgd2luZG93aW5nIHNoZWxsIGlzIHVzZWQgaW4gZ2l0ayB0byBzaG93IHRoZQorCSAgaGlzdG9yeSBncmFwaGljYWxseSwgYW5kIGluIGdpdC1ndWkuICBJZiB5b3UgZG9uJ3Qgd2FudCBnaXRrIG9yCisJICBnaXQtZ3VpLCB5b3UgY2FuIHVzZSBOT19UQ0xUSy4KKworCS0gQSBnZXR0ZXh0IGxpYnJhcnkgaXMgdXNlZCBieSBkZWZhdWx0IGZvciBsb2NhbGl6aW5nIEdpdC4gVGhlCisJICBwcmltYXJ5IHRhcmdldCBpcyBHTlUgbGliaW50bCwgYnV0IHRoZSBTb2xhcmlzIGdldHRleHQKKwkgIGltcGxlbWVudGF0aW9uIGFsc28gd29ya3MuCisKKwkgIFdlIG5lZWQgYSBnZXR0ZXh0Lmggb24gdGhlIHN5c3RlbSBmb3IgQyBjb2RlLCBnZXR0ZXh0LnNoIChvcgorCSAgU29sYXJpcyBnZXR0ZXh0KDEpKSBmb3Igc2hlbGwgc2NyaXB0cywgYW5kIGxpYmludGwtcGVybCBmb3IgUGVybAorCSAgcHJvZ3JhbXMuCisKKwkgIFNldCBOT19HRVRURVhUIHRvIGRpc2FibGUgbG9jYWxpemF0aW9uIHN1cHBvcnQgYW5kIG1ha2UgR2l0IG9ubHkKKwkgIHVzZSBFbmdsaXNoLiBVbmRlciBhdXRvY29uZiB0aGUgY29uZmlndXJlIHNjcmlwdCB3aWxsIGRvIHRoaXMKKwkgIGF1dG9tYXRpY2FsbHkgaWYgaXQgY2FuJ3QgZmluZCBsaWJpbnRsIG9uIHRoZSBzeXN0ZW0uCisKKwktIFB5dGhvbiB2ZXJzaW9uIDIuNCBvciBsYXRlciAoYnV0IG5vdCAzLngsIHdoaWNoIGlzIG5vdAorCSAgc3VwcG9ydGVkIGJ5IFBlcmZvcmNlKSBpcyBuZWVkZWQgdG8gdXNlIHRoZSBnaXQtcDQgaW50ZXJmYWNlCisJICB0byBQZXJmb3JjZS4KKworIC0gU29tZSBwbGF0Zm9ybSBzcGVjaWZpYyBpc3N1ZXMgYXJlIGRlYWx0IHdpdGggTWFrZWZpbGUgcnVsZXMsCisgICBidXQgZGVwZW5kaW5nIG9uIHlvdXIgc3BlY2lmaWMgaW5zdGFsbGF0aW9uLCB5b3UgbWF5IG5vdAorICAgaGF2ZSBhbGwgdGhlIGxpYnJhcmllcy90b29scyBuZWVkZWQsIG9yIHlvdSBtYXkgaGF2ZQorICAgbmVjZXNzYXJ5IGxpYnJhcmllcyBhdCB1bnVzdWFsIGxvY2F0aW9ucy4gIFBsZWFzZSBsb29rIGF0IHRoZQorICAgdG9wIG9mIHRoZSBNYWtlZmlsZSB0byBzZWUgd2hhdCBjYW4gYmUgYWRqdXN0ZWQgZm9yIHlvdXIgbmVlZHMuCisgICBZb3UgY2FuIHBsYWNlIGxvY2FsIHNldHRpbmdzIGluIGNvbmZpZy5tYWsgYW5kIHRoZSBNYWtlZmlsZQorICAgd2lsbCBpbmNsdWRlIHRoZW0uICBOb3RlIHRoYXQgY29uZmlnLm1hayBpcyBub3QgZGlzdHJpYnV0ZWQ7CisgICB0aGUgbmFtZSBpcyByZXNlcnZlZCBmb3IgbG9jYWwgc2V0dGluZ3MuCisKKyAtIFRvIGJ1aWxkIGFuZCBpbnN0YWxsIGRvY3VtZW50YXRpb24gc3VpdGUsIHlvdSBuZWVkIHRvIGhhdmUKKyAgIHRoZSBhc2NpaWRvYy94bWx0byB0b29sY2hhaW4uICBCZWNhdXNlIG5vdCBtYW55IHBlb3BsZSBhcmUKKyAgIGluY2xpbmVkIHRvIGluc3RhbGwgdGhlIHRvb2xzLCB0aGUgZGVmYXVsdCBidWlsZCB0YXJnZXQKKyAgICgibWFrZSBhbGwiKSBkb2VzIF9ub3RfIGJ1aWxkIHRoZW0uCisKKyAgICJtYWtlIGRvYyIgYnVpbGRzIGRvY3VtZW50YXRpb24gaW4gbWFuIGFuZCBodG1sIGZvcm1hdHM7IHRoZXJlIGFyZQorICAgYWxzbyAibWFrZSBtYW4iLCAibWFrZSBodG1sIiBhbmQgIm1ha2UgaW5mbyIuIE5vdGUgdGhhdCAibWFrZSBodG1sIgorICAgcmVxdWlyZXMgYXNjaWlkb2MsIGJ1dCBub3QgeG1sdG8uICJtYWtlIG1hbiIgKGFuZCB0aHVzIG1ha2UgZG9jKQorICAgcmVxdWlyZXMgYm90aC4KKworICAgIm1ha2UgaW5zdGFsbC1kb2MiIGluc3RhbGxzIGRvY3VtZW50YXRpb24gaW4gbWFuIGZvcm1hdCBvbmx5OyB0aGVyZQorICAgYXJlIGFsc28gIm1ha2UgaW5zdGFsbC1tYW4iLCAibWFrZSBpbnN0YWxsLWh0bWwiIGFuZCAibWFrZQorICAgaW5zdGFsbC1pbmZvIi4KKworICAgQnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgdGhlIGluZm8gZmlsZSBhZGRpdGlvbmFsbHkgcmVxdWlyZXMKKyAgIG1ha2VpbmZvIGFuZCBkb2Nib29rMlguICBWZXJzaW9uIDAuOC4zIGlzIGtub3duIHRvIHdvcmsuCisKKyAgIEJ1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIHRoZSBwZGYgZmlsZSBhZGRpdGlvbmFsbHkgcmVxdWlyZXMKKyAgIGRibGF0ZXguICBWZXJzaW9uID49IDAuMi43IGlzIGtub3duIHRvIHdvcmsuCisKKyAgIEFsbCBmb3JtYXRzIHJlcXVpcmUgYXQgbGVhc3QgYXNjaWlkb2MgOC40LjEuCisKKyAgIFRoZXJlIGFyZSBhbHNvICJtYWtlIHF1aWNrLWluc3RhbGwtZG9jIiwgIm1ha2UgcXVpY2staW5zdGFsbC1tYW4iCisgICBhbmQgIm1ha2UgcXVpY2staW5zdGFsbC1odG1sIiB3aGljaCBpbnN0YWxsIHByZWZvcm1hdHRlZCBtYW4gcGFnZXMKKyAgIGFuZCBodG1sIGRvY3VtZW50YXRpb24uIFRvIHVzZSB0aGVzZSBidWlsZCB0YXJnZXRzLCB5b3UgbmVlZCB0bworICAgY2xvbmUgdHdvIHNlcGFyYXRlIGdpdC1odG1sZG9jcyBhbmQgZ2l0LW1hbnBhZ2VzIHJlcG9zaXRvcmllcyBuZXh0CisgICB0byB0aGUgY2xvbmUgb2YgZ2l0IGl0c2VsZi4KKworICAgSXQgaGFzIGJlZW4gcmVwb3J0ZWQgdGhhdCBkb2Nib29rLXhzbCB2ZXJzaW9uIDEuNzIgYW5kIDEuNzMgYXJlCisgICBidWdneTsgMS43MiBtaXNmb3JtYXRzIG1hbnVhbCBwYWdlcyBmb3IgY2FsbG91dHMsIGFuZCAxLjczIG5lZWRzCisgICB0aGUgcGF0Y2ggaW4gY29udHJpYi9wYXRjaGVzL2RvY2Jvb2steHNsLW1hbnBhZ2VzLWNoYXJtYXAucGF0Y2gKKworICAgVXNlcnMgYXR0ZW1wdGluZyB0byBidWlsZCB0aGUgZG9jdW1lbnRhdGlvbiBvbiBDeWd3aW4gbWF5IG5lZWQgdG8gZW5zdXJlCisgICB0aGF0IHRoZSAvZXRjL3htbC9jYXRhbG9nIGZpbGUgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+CisgICA8IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMKKyAgICAgICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgorICAgICAgImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiCisgICA+CisgICA8Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+CisgICAgIDxyZXdyaXRlVVJJCisgICAgICAgdXJpU3RhcnRTdHJpbmcgPSAiaHR0cDovL2RvY2Jvb2suc291cmNlZm9yZ2UubmV0L3JlbGVhc2UveHNsL2N1cnJlbnQiCisgICAgICAgcmV3cml0ZVByZWZpeCA9ICIvdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94c2wtc3R5bGVzaGVldHMiCisgICAgIC8+CisgICAgIDxyZXdyaXRlVVJJCisgICAgICAgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41IgorICAgICAgIHJld3JpdGVQcmVmaXg9Ii91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbC1kdGQtNC41IgorICAgICAvPgorICA8L2NhdGFsb2c+CisKKyAgVGhpcyBjYW4gYmUgYWNoaWV2ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHR3byB4bWxjYXRhbG9nIGNvbW1hbmRzOgorCisgIHhtbGNhdGFsb2cgLS1ub291dCBcCisgICAgIC0tYWRkIHJld3JpdGVVUkkgXAorICAgICAgICBodHRwOi8vZG9jYm9vay5zb3VyY2Vmb3JnZS5uZXQvcmVsZWFzZS94c2wvY3VycmVudCBcCisgICAgICAgIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3hzbC1zdHlsZXNoZWV0cyBcCisgICAgIC9ldGMveG1sL2NhdGFsb2cKKworICB4bWxjYXRhbG9nIC0tbm9vdXQgXAorICAgICAtLWFkZCByZXdyaXRlVVJJIFwKKyAgICAgICAgIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC41L3hzbC9jdXJyZW50IFwKKyAgICAgICAgIC91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbC1kdGQtNC41IFwKKyAgICAgL2V0Yy94bWwvY2F0YWxvZwpkaWZmIC0tZ2l0IGEvTEdQTC0yLjEgYi9MR1BMLTIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzhiMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvTEdQTC0yLjEKQEAgLTAsMCArMSw1MTEgQEAKKworIFdoaWxlIG1vc3Qgb2YgdGhpcyBwcm9qZWN0IGlzIHVuZGVyIHRoZSBHUEwgKHNlZSBDT1BZSU5HKSwgdGhlIHhkaWZmLworIGxpYnJhcnkgYW5kIHNvbWUgbGliYyBjb2RlIGZyb20gY29tcGF0LyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlCisgR05VIExHUEwsIHZlcnNpb24gMi4xIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24gYW5kIHNvbWUKKyBvdGhlciBmaWxlcyBhcmUgdW5kZXIgb3RoZXIgbGljZW5zZXMuICBDaGVjayB0aGUgaW5kaXZpZHVhbCBmaWxlcyB0bworIGJlIHN1cmUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4xLCBGZWJydWFyeSAxOTk5CisKKyBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiAgSXQgYWxzbyBjb3VudHMKKyBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQorIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQorZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgorCisgIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzLS10eXBpY2FsbHkgbGlicmFyaWVzLS1vZiB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQorY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgordGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIKK3N0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwKK25vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKK3lvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKK2ZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQKK2l0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgoraXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCit0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorZGlzdHJpYnV0b3JzIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGVzZQorcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCit5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQord2l0aCB0aGUgbGlicmFyeSBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUKK2xpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKK3RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKK21vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdwordGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCithdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKK2ludHJvZHVjZWQgYnkgb3RoZXJzLgorDAorICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgorYW55IGZyZWUgcHJvZ3JhbS4gIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdAorZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCityZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAorYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZQorY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCisKKyAgTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKK2lzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgV2UgdXNlCit0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCitsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KKworICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZworYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCitjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuICBUaGUgb3JkaW5hcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCitlbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgcGVybWl0cyBtb3JlIGxheCBjcml0ZXJpYSBmb3IgbGlua2luZyBvdGhlciBjb2RlIHdpdGgKK3RoZSBsaWJyYXJ5LgorCisgIFdlIGNhbGwgdGhpcyBsaWNlbnNlIHRoZSAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQKK2RvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKK29mIGFuIGFkdmFudGFnZSBvdmVyIGNvbXBldGluZyBub24tZnJlZSBwcm9ncmFtcy4gIFRoZXNlIGRpc2FkdmFudGFnZXMKK2FyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQorbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgorc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCisgIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCitlbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQgYmVjb21lcworYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQorYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQorbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuICBJbiB0aGlzCitjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKK3NvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCitwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKK2ZyZWUgc29mdHdhcmUuICBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4KK25vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQorb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKK3N5c3RlbS4KKworICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQordXNlcnMnIGZyZWVkb20sIGl0IGRvZXMgZW5zdXJlIHRoYXQgdGhlIHVzZXIgb2YgYSBwcm9ncmFtIHRoYXQgaXMKK2xpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgordGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCisid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gIFRoZQorZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdAorYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCisMCisgICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcgorcHJvZ3JhbSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3IKK290aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4KK0VhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MKK2NvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0Cit5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgorYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QKK2FsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55Cit3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQorTGlicmFyeS4KKworICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAorYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYQorZmVlLgorDAorICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCisgICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKKyAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCisgICAgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eQorICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAorICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgorICAgIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mCisgICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorCisgICAgKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMKKyAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCisgICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKKyAgICBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdAorICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCisgICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZQoraXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKK3dpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KK3RoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28KK3RoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKK2luc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkKK3RoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KK3RoZXNlIG5vdGljZXMuCisMCisgIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKK3RoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCitzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgordGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCisgIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCitkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybQordW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55CitpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCittdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKK3NvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bworZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZQorTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgorbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKK3dvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQKK3RoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeQorY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0Citjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQorbGlicmFyeSIuICBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCitTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworICBXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZQordGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCitkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KK1doZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlCitsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQordGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQorc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCitmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0CitmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCit3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQorTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKKworICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQorZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuCitBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKK3doZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKwwKKyAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKK2xpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCit3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawordW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKK0xpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieQordGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yaworZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UKK2RpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKK29mIHRoZXNlIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCisgICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCisgICAgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKKyAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAorICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAorICAgIHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKKyAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAorICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQorICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCisgICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCisKKyAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKKyAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQorICAgIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLAorICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQorICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKKyAgICB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMKKyAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KKworICAgIGMpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcworbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCitjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCit3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzCit0aGUgZXhlY3V0YWJsZS4KKworICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZQorcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQorYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAordXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdQorZGlzdHJpYnV0ZS4KKwwKKyAgNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKK2ZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKK2xpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbgordGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCitwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKKyAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CisgICAgZmFjaWxpdGllcy4gIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgICAgU2VjdGlvbnMgYWJvdmUuCisKKyAgICBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdAorICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCisgICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCisgIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCit0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQorYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKK29yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKK3Rlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQorc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwwKKyAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAord3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKK2NvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCitkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCitvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZworYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PIFdBUlJBTlRZCisKKyAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCitXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgorRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQorVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCitXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQorQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKK0ZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCitSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQorRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgorU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzCitzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCisgIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuIGJ5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDVhY2RjOTAuLjQzY2VlYjkgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDc5ICsxLDI1NDYgQEAKICMgVGhlIGRlZmF1bHQgdGFyZ2V0IG9mIHRoaXMgTWFrZWZpbGUgaXMuLi4KIGFsbDo6CiAKLXByZWZpeCA/PSAkKEhPTUUpCi1iaW5kaXIgPz0gJChwcmVmaXgpL2Jpbgotc2hhcmVkaXIgPz0gJChwcmVmaXgpL3NoYXJlCi1naXRrX2xpYmRpciAgID89ICQoc2hhcmVkaXIpL2dpdGsvbGliCi1tc2dzZGlyICAgID89ICQoZ2l0a19saWJkaXIpL21zZ3MKLW1zZ3NkaXJfU1EgID0gJChzdWJzdCAnLCdcJycsJChtc2dzZGlyKSkKKyMgRGVmaW5lIFY9MSB0byBoYXZlIGEgbW9yZSB2ZXJib3NlIGNvbXBpbGUuCisjCisjIERlZmluZSBTSEVMTF9QQVRIIHRvIGEgUE9TSVggc2hlbGwgaWYgeW91ciAvYmluL3NoIGlzIGJyb2tlbi4KKyMKKyMgRGVmaW5lIFNBTkVfVE9PTF9QQVRIIHRvIGEgY29sb24tc2VwYXJhdGVkIGxpc3Qgb2YgcGF0aHMgdG8gcHJlcGVuZAorIyB0byBQQVRIIGlmIHlvdXIgdG9vbHMgaW4gL3Vzci9iaW4gYXJlIGJyb2tlbi4KKyMKKyMgRGVmaW5lIFNPQ0tMRU5fVCB0byBhIHN1aXRhYmxlIHR5cGUgKHN1Y2ggYXMgJ3NpemVfdCcpIGlmIHlvdXIKKyMgc3lzdGVtIGhlYWRlcnMgZG8gbm90IGRlZmluZSBhIHNvY2tsZW5fdCB0eXBlLgorIworIyBEZWZpbmUgSU5MSU5FIHRvIGEgc3VpdGFibGUgc3Vic3RpdHV0ZSAoc3VjaCBhcyAnX19pbmxpbmUnIG9yICcnKSBpZiBnaXQKKyMgZmFpbHMgdG8gY29tcGlsZSB3aXRoIGVycm9ycyBhYm91dCB1bmRlZmluZWQgaW5saW5lIGZ1bmN0aW9ucyBvciBzaW1pbGFyLgorIworIyBEZWZpbmUgU05QUklOVEZfUkVUVVJOU19CT0dVUyBpZiB5b3UgYXJlIG9uIGEgc3lzdGVtIHdoaWNoIHNucHJpbnRmKCkKKyMgb3IgdnNucHJpbnRmKCkgcmV0dXJuIC0xIGluc3RlYWQgb2YgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggd291bGQKKyMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdGhlIGZpbmFsIHN0cmluZyBpZiBlbm91Z2ggc3BhY2UgaGFkIGJlZW4gYXZhaWxhYmxlLgorIworIyBEZWZpbmUgRlJFQURfUkVBRFNfRElSRUNUT1JJRVMgaWYgeW91IGFyZSBvbiBhIHN5c3RlbSB3aGljaCBzdWNjZWVkcworIyB3aGVuIGF0dGVtcHRpbmcgdG8gcmVhZCBmcm9tIGFuIGZvcGVuJ2VkIGRpcmVjdG9yeS4KKyMKKyMgRGVmaW5lIE5PX09QRU5TU0wgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91IGRvIG5vdCBoYXZlIE9wZW5TU0wuCisjIFRoaXMgYWxzbyBpbXBsaWVzIEJMS19TSEExLgorIworIyBEZWZpbmUgVVNFX0xJQlBDUkUgaWYgeW91IGhhdmUgYW5kIHdhbnQgdG8gdXNlIGxpYnBjcmUuIGdpdC1ncmVwIHdpbGwgYmUKKyMgYWJsZSB0byB1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisjCisjIERlZmluZSBMSUJQQ1JFRElSPS9mb28vYmFyIGlmIHlvdXIgbGlicGNyZSBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KKyMKKyMgRGVmaW5lIEhBVkVfQUxMT0NBX0ggaWYgeW91IGhhdmUgd29ya2luZyBhbGxvY2EoMykgZGVmaW5lZCBpbiB0aGF0IGhlYWRlci4KKyMKKyMgRGVmaW5lIE5PX0NVUkwgaWYgeW91IGRvIG5vdCBoYXZlIGxpYmN1cmwgaW5zdGFsbGVkLiAgZ2l0LWh0dHAtZmV0Y2ggYW5kCisjIGdpdC1odHRwLXB1c2ggYXJlIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgdXNlIGh0dHA6Ly8gYW5kIGh0dHBzOi8vCisjIHRyYW5zcG9ydHMgKG5laXRoZXIgc21hcnQgbm9yIGR1bWIpLgorIworIyBEZWZpbmUgQ1VSTERJUj0vZm9vL2JhciBpZiB5b3VyIGN1cmwgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgorIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCisjCisjIERlZmluZSBDVVJMX0NPTkZJRyB0byBjdXJsJ3MgY29uZmlndXJhdGlvbiBwcm9ncmFtIHRoYXQgcHJpbnRzIGluZm9ybWF0aW9uCisjIGFib3V0IHRoZSBsaWJyYXJ5IChlLmcuLCBpdHMgdmVyc2lvbiBudW1iZXIpLiAgVGhlIGRlZmF1bHQgaXMgJ2N1cmwtY29uZmlnJy4KKyMKKyMgRGVmaW5lIE5PX0VYUEFUIGlmIHlvdSBkbyBub3QgaGF2ZSBleHBhdCBpbnN0YWxsZWQuICBnaXQtaHR0cC1wdXNoIGlzCisjIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgcHVzaCB1c2luZyBodHRwOi8vIGFuZCBodHRwczovLyB0cmFuc3BvcnRzIChkdW1iKS4KKyMKKyMgRGVmaW5lIEVYUEFURElSPS9mb28vYmFyIGlmIHlvdXIgZXhwYXQgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgorIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCisjCisjIERlZmluZSBFWFBBVF9ORUVEU19YTUxQQVJTRV9IIGlmIHlvdSBoYXZlIGFuIG9sZCB2ZXJzaW9uIG9mIGV4cGF0IChlLmcuLAorIyAxLjEgb3IgMS4yKSB0aGF0IHByb3ZpZGVzIHhtbHBhcnNlLmggaW5zdGVhZCBvZiBleHBhdC5oLgorIworIyBEZWZpbmUgTk9fR0VUVEVYVCBpZiB5b3UgZG9uJ3Qgd2FudCBHaXQgb3V0cHV0IHRvIGJlIHRyYW5zbGF0ZWQuCisjIEEgdHJhbnNsYXRlZCBHaXQgcmVxdWlyZXMgR05VIGxpYmludGwgb3IgYW5vdGhlciBnZXR0ZXh0IGltcGxlbWVudGF0aW9uLAorIyBwbHVzIGxpYmludGwtcGVybCBhdCBydW50aW1lLgorIworIyBEZWZpbmUgVVNFX0dFVFRFWFRfU0NIRU1FIGFuZCBzZXQgaXQgdG8gJ2ZhbGx0aHJvdWdoJywgaWYgeW91IGRvbid0IHRydXN0CisjIHRoZSBpbnN0YWxsZWQgZ2V0dGV4dCB0cmFuc2xhdGlvbiBvZiB0aGUgc2hlbGwgc2NyaXB0cyBvdXRwdXQuCisjCisjIERlZmluZSBIQVZFX0xJQkNIQVJTRVRfSCBpZiB5b3UgaGF2ZW4ndCBzZXQgTk9fR0VUVEVYVCBhbmQgeW91IGNhbid0CisjIHRydXN0IHRoZSBsYW5naW5mby5oJ3MgbmxfbGFuZ2luZm8oQ09ERVNFVCkgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZQorIyBjdXJyZW50IGNoYXJhY3RlciBzZXQuIEdOVSBhbmQgU29sYXJpcyBoYXZlIGEgbmxfbGFuZ2luZm8oQ09ERVNFVCksCisjIEZyZWVCU0QgY2FuIHVzZSBlaXRoZXIsIGJ1dCBNaW5HVyBhbmQgc29tZSBvdGhlcnMgbmVlZCB0byB1c2UKKyMgbGliY2hhcnNldC5oJ3MgbG9jYWxlX2NoYXJzZXQoKSBpbnN0ZWFkLgorIworIyBEZWZpbmUgQ0hBUlNFVF9MSUIgdG8gdGhlIGxpYnJhcnkgeW91IG5lZWQgdG8gbGluayB3aXRoIGluIG9yZGVyIHRvCisjIHVzZSBsb2NhbGVfY2hhcnNldCgpIGZ1bmN0aW9uLiAgT24gc29tZSBwbGF0Zm9ybXMgdGhpcyBuZWVkcyB0byBzZXQgdG8KKyMgLWxjaGFyc2V0LCBvbiBvdGhlcnMgdG8gLWxpY29udiAuCisjCisjIERlZmluZSBMSUJDX0NPTlRBSU5TX0xJQklOVEwgaWYgeW91ciBnZXR0ZXh0IGltcGxlbWVudGF0aW9uIGRvZXNuJ3QKKyMgbmVlZCAtbGludGwgd2hlbiBsaW5raW5nLgorIworIyBEZWZpbmUgTk9fTVNHRk1UX0VYVEVOREVEX09QVElPTlMgaWYgeW91ciBpbXBsZW1lbnRhdGlvbiBvZiBtc2dmbXQKKyMgZG9lc24ndCBzdXBwb3J0IEdOVSBleHRlbnNpb25zIGxpa2UgLS1jaGVjayBhbmQgLS1zdGF0aXN0aWNzCisjCisjIERlZmluZSBIQVZFX1BBVEhTX0ggaWYgeW91IGhhdmUgcGF0aHMuaCBhbmQgd2FudCB0byB1c2UgdGhlIGRlZmF1bHQgUEFUSAorIyBpdCBzcGVjaWZpZXMuCisjCisjIERlZmluZSBOT19EX1RZUEVfSU5fRElSRU5UIGlmIHlvdXIgcGxhdGZvcm0gZGVmaW5lcyBEVF9VTktOT1dOIGJ1dCBsYWNrcworIyBkX3R5cGUgaW4gc3RydWN0IGRpcmVudCAoQ3lnd2luIDEuNSwgZml4ZWQgaW4gQ3lnd2luIDEuNykuCisjCisjIERlZmluZSBIQVZFX1NUUklOR1NfSCBpZiB5b3UgaGF2ZSBzdHJpbmdzLmggYW5kIG5lZWQgaXQgZm9yIHN0cmNhc2VjbXAuCisjCisjIERlZmluZSBOT19TVFJDQVNFU1RSIGlmIHlvdSBkb24ndCBoYXZlIHN0cmNhc2VzdHIuCisjCisjIERlZmluZSBOT19NRU1NRU0gaWYgeW91IGRvbid0IGhhdmUgbWVtbWVtLgorIworIyBEZWZpbmUgTk9fR0VUUEFHRVNJWkUgaWYgeW91IGRvbid0IGhhdmUgZ2V0cGFnZXNpemUuCisjCisjIERlZmluZSBOT19TVFJMQ1BZIGlmIHlvdSBkb24ndCBoYXZlIHN0cmxjcHkuCisjCisjIERlZmluZSBOT19TVFJUT1VNQVggaWYgeW91IGRvbid0IGhhdmUgYm90aCBzdHJ0b2ltYXggYW5kIHN0cnRvdW1heCBpbiB0aGUKKyMgQyBsaWJyYXJ5LiBJZiB5b3VyIGNvbXBpbGVyIGFsc28gZG9lcyBub3Qgc3VwcG9ydCBsb25nIGxvbmcgb3IgZG9lcyBub3QgaGF2ZQorIyBzdHJ0b3VsbCwgZGVmaW5lIE5PX1NUUlRPVUxMLgorIworIyBEZWZpbmUgTk9fU0VURU5WIGlmIHlvdSBkb24ndCBoYXZlIHNldGVudiBpbiB0aGUgQyBsaWJyYXJ5LgorIworIyBEZWZpbmUgTk9fVU5TRVRFTlYgaWYgeW91IGRvbid0IGhhdmUgdW5zZXRlbnYgaW4gdGhlIEMgbGlicmFyeS4KKyMKKyMgRGVmaW5lIE5PX01LRFRFTVAgaWYgeW91IGRvbid0IGhhdmUgbWtkdGVtcCBpbiB0aGUgQyBsaWJyYXJ5LgorIworIyBEZWZpbmUgTUtESVJfV09fVFJBSUxJTkdfU0xBU0ggaWYgeW91ciBta2RpcigpIGNhbid0IGRlYWwgd2l0aCB0cmFpbGluZyBzbGFzaC4KKyMKKyMgRGVmaW5lIE5PX01LU1RFTVBTIGlmIHlvdSBkb24ndCBoYXZlIG1rc3RlbXBzIGluIHRoZSBDIGxpYnJhcnkuCisjCisjIERlZmluZSBOT19HRUNPU19JTl9QV0VOVCBpZiB5b3UgZG9uJ3QgaGF2ZSBwd19nZWNvcyBpbiBzdHJ1Y3QgcGFzc3dkCisjIGluIHRoZSBDIGxpYnJhcnkuCisjCisjIERlZmluZSBOT19MSUJHRU5fSCBpZiB5b3UgZG9uJ3QgaGF2ZSBsaWJnZW4uaC4KKyMKKyMgRGVmaW5lIE5FRURTX0xJQkdFTiBpZiB5b3VyIGxpYmdlbiBuZWVkcyAtbGdlbiB3aGVuIGxpbmtpbmcKKyMKKyMgRGVmaW5lIE5PX1NZU19TRUxFQ1RfSCBpZiB5b3UgZG9uJ3QgaGF2ZSBzeXMvc2VsZWN0LmguCisjCisjIERlZmluZSBOT19TWU1MSU5LX0hFQUQgaWYgeW91IG5ldmVyIHdhbnQgLmdpdC9IRUFEIHRvIGJlIGEgc3ltYm9saWMgbGluay4KKyMgRW5hYmxlIGl0IG9uIFdpbmRvd3MuICBCeSBkZWZhdWx0LCBzeW1yZWZzIGFyZSBzdGlsbCB1c2VkLgorIworIyBEZWZpbmUgTk9fU1ZOX1RFU1RTIGlmIHlvdSB3YW50IHRvIHNraXAgdGltZS1jb25zdW1pbmcgU1ZOIGludGVyb3BlcmFiaWxpdHkKKyMgdGVzdHMuICBUaGVzZSB0ZXN0cyB0YWtlIHVwIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIHRoZSB0b3RhbCB0ZXN0IHRpbWUKKyMgYnV0IGFyZSBub3QgbmVlZGVkIHVubGVzcyB5b3UgcGxhbiB0byB0YWxrIHRvIFNWTiByZXBvcy4KKyMKKyMgRGVmaW5lIE5PX0ZJTksgaWYgeW91IGFyZSBidWlsZGluZyBvbiBEYXJ3aW4vTWFjIE9TIFgsIGhhdmUgRmluaworIyBpbnN0YWxsZWQgaW4gL3N3LCBidXQgZG9uJ3Qgd2FudCBHSVQgdG8gbGluayBhZ2FpbnN0IGFueSBsaWJyYXJpZXMKKyMgaW5zdGFsbGVkIHRoZXJlLiAgSWYgZGVmaW5lZCB5b3UgbWF5IHNwZWNpZnkgeW91ciBvd24gKG9yIEZpbmsncykKKyMgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQgbGlicmFyeSBkaXJlY3RvcmllcyBieSBkZWZpbmluZyBDRkxBR1MKKyMgYW5kIExERkxBR1MgYXBwcm9wcmlhdGVseS4KKyMKKyMgRGVmaW5lIE5PX0RBUldJTl9QT1JUUyBpZiB5b3UgYXJlIGJ1aWxkaW5nIG9uIERhcndpbi9NYWMgT1MgWCwKKyMgaGF2ZSBEYXJ3aW5Qb3J0cyBpbnN0YWxsZWQgaW4gL29wdC9sb2NhbCwgYnV0IGRvbid0IHdhbnQgR0lUIHRvCisjIGxpbmsgYWdhaW5zdCBhbnkgbGlicmFyaWVzIGluc3RhbGxlZCB0aGVyZS4gIElmIGRlZmluZWQgeW91IG1heQorIyBzcGVjaWZ5IHlvdXIgb3duIChvciBEYXJ3aW5Qb3J0J3MpIGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisjIGxpYnJhcnkgZGlyZWN0b3JpZXMgYnkgZGVmaW5pbmcgQ0ZMQUdTIGFuZCBMREZMQUdTIGFwcHJvcHJpYXRlbHkuCisjCisjIERlZmluZSBOT19BUFBMRV9DT01NT05fQ1JZUFRPIGlmIHlvdSBhcmUgYnVpbGRpbmcgb24gRGFyd2luL01hYyBPUyBYCisjIGFuZCBkbyBub3Qgd2FudCB0byB1c2UgQXBwbGUncyBDb21tb25DcnlwdG8gbGlicmFyeS4gIFRoaXMgYWxsb3dzIHlvdQorIyB0byBwcm92aWRlIHlvdXIgb3duIE9wZW5TU0wgbGlicmFyeSwgZm9yIGV4YW1wbGUgZnJvbSBNYWNQb3J0cy4KKyMKKyMgRGVmaW5lIEJMS19TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG1ha2UgdXNlIG9mIHRoZSBidW5kbGVkCisjIG9wdGltaXplZCBDIFNIQTEgcm91dGluZS4KKyMKKyMgRGVmaW5lIFBQQ19TSEExIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4gcnVubmluZyBtYWtlIHRvIG1ha2UgdXNlIG9mCisjIGEgYnVuZGxlZCBTSEExIHJvdXRpbmUgb3B0aW1pemVkIGZvciBQb3dlclBDLgorIworIyBEZWZpbmUgTkVFRFNfQ1JZUFRPX1dJVEhfU1NMIGlmIHlvdSBuZWVkIC1sY3J5cHRvIHdoZW4gdXNpbmcgLWxzc2wgKERhcndpbikuCisjCisjIERlZmluZSBORUVEU19TU0xfV0lUSF9DUllQVE8gaWYgeW91IG5lZWQgLWxzc2wgd2hlbiB1c2luZyAtbGNyeXB0byAoRGFyd2luKS4KKyMKKyMgRGVmaW5lIE5FRURTX1NTTF9XSVRIX0NVUkwgaWYgeW91IG5lZWQgLWxzc2wgd2l0aCAtbGN1cmwgKE1pbml4KS4KKyMKKyMgRGVmaW5lIE5FRURTX0lETl9XSVRIX0NVUkwgaWYgeW91IG5lZWQgLWxpZG4gd2hlbiB1c2luZyAtbGN1cmwgKE1pbml4KS4KKyMKKyMgRGVmaW5lIE5FRURTX0xJQklDT05WIGlmIGxpbmtpbmcgd2l0aCBsaWJjIGlzIG5vdCBlbm91Z2ggKERhcndpbikuCisjCisjIERlZmluZSBORUVEU19MSUJJTlRMX0JFRk9SRV9MSUJJQ09OViBpZiB5b3UgbmVlZCBsaWJpbnRsIGJlZm9yZSBsaWJpY29udi4KKyMKKyMgRGVmaW5lIE5PX0lOVFBUUl9UIGlmIHlvdSBkb24ndCBoYXZlIGludHB0cl90IG9yIHVpbnRwdHJfdC4KKyMKKyMgRGVmaW5lIE5PX1VJTlRNQVhfVCBpZiB5b3UgZG9uJ3QgaGF2ZSB1aW50bWF4X3QuCisjCisjIERlZmluZSBORUVEU19TT0NLRVQgaWYgbGlua2luZyB3aXRoIGxpYmMgaXMgbm90IGVub3VnaCAoU3VuT1MsCisjIFBhdHJpY2sgTWF1cml0eikuCisjCisjIERlZmluZSBORUVEU19SRVNPTFYgaWYgbGlua2luZyB3aXRoIC1sbnNsIGFuZC9vciAtbHNvY2tldCBpcyBub3QgZW5vdWdoLgorIyBOb3RhYmx5IG9uIFNvbGFyaXMgaHN0cmVycm9yIHJlc2lkZXMgaW4gbGlicmVzb2x2IGFuZCBvbiBTb2xhcmlzIDcKKyMgaW5ldF9udG9wIGFuZCBpbmV0X3B0b24gYWRkaXRpb25hbGx5IHJlc2lkZSB0aGVyZS4KKyMKKyMgRGVmaW5lIE5PX01NQVAgaWYgeW91IHdhbnQgdG8gYXZvaWQgbW1hcC4KKyMKKyMgRGVmaW5lIE5PX1NZU19QT0xMX0ggaWYgeW91IGRvbid0IGhhdmUgc3lzL3BvbGwuaC4KKyMKKyMgRGVmaW5lIE5PX1BPTEwgaWYgeW91IGRvIG5vdCBoYXZlIG9yIGRvbid0IHdhbnQgdG8gdXNlIHBvbGwoKS4KKyMgVGhpcyBhbHNvIGltcGxpZXMgTk9fU1lTX1BPTExfSC4KKyMKKyMgRGVmaW5lIE5FRURTX1NZU19QQVJBTV9IIGlmIHlvdSBuZWVkIHRvIGluY2x1ZGUgc3lzL3BhcmFtLmggdG8gY29tcGlsZSwKKyMgKlBMRUFTRSogUkVQT1JUIHRvIGdpdEB2Z2VyLmtlcm5lbC5vcmcgaWYgeW91ciBwbGF0Zm9ybSBuZWVkcyB0aGlzOworIyB3ZSB3YW50IHRvIGtub3cgbW9yZSBhYm91dCB0aGUgaXNzdWUuCisjCisjIERlZmluZSBOT19QVEhSRUFEUyBpZiB5b3UgZG8gbm90IGhhdmUgb3IgZG8gbm90IHdhbnQgdG8gdXNlIFB0aHJlYWRzLgorIworIyBEZWZpbmUgTk9fUFJFQUQgaWYgeW91IGhhdmUgYSBwcm9ibGVtIHdpdGggcHJlYWQoKSBzeXN0ZW0gY2FsbCAoZS5nLgorIyBjeWd3aW4xLmRsbCBiZWZvcmUgdjEuNS4yMikuCisjCisjIERlZmluZSBOT19TRVRJVElNRVIgaWYgeW91IGRvbid0IGhhdmUgc2V0aXRpbWVyKCkKKyMKKyMgRGVmaW5lIE5PX1NUUlVDVF9JVElNRVJWQUwgaWYgeW91IGRvbid0IGhhdmUgc3RydWN0IGl0aW1lcnZhbAorIyBUaGlzIGFsc28gaW1wbGllcyBOT19TRVRJVElNRVIKKyMKKyMgRGVmaW5lIE5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkgaWYgYWNjZXNzaW5nIG9iamVjdHMgaW4gcGFjayBmaWxlcyBpcworIyBnZW5lcmFsbHkgZmFzdGVyIG9uIHlvdXIgcGxhdGZvcm0gdGhhbiBhY2Nlc3NpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorIworIyBEZWZpbmUgTk9fVFJVU1RBQkxFX0ZJTEVNT0RFIGlmIHlvdXIgZmlsZXN5c3RlbSBtYXkgY2xhaW0gdG8gc3VwcG9ydAorIyB0aGUgZXhlY3V0YWJsZSBtb2RlIGJpdCwgYnV0IGRvZXNuJ3QgcmVhbGx5IGRvIHNvLgorIworIyBEZWZpbmUgTkVFRFNfTU9ERV9UUkFOU0xBVElPTiBpZiB5b3VyIE9TIHN0cmF5cyBmcm9tIHRoZSB0eXBpY2FsIGZpbGUgdHlwZQorIyBiaXRzIGluIG1vZGUgdmFsdWVzIChlLmcuIHovT1MgZGVmaW5lcyBJX1NGTVQgdG8gMHhGRjAwMDAwMCBhcyBvcHBvc2VkIHRvIHRoZQorIyB1c3VhbCAweEYwMDApLgorIworIyBEZWZpbmUgTk9fSVBWNiBpZiB5b3UgbGFjayBJUHY2IHN1cHBvcnQgYW5kIGdldGFkZHJpbmZvKCkuCisjCisjIERlZmluZSBOT19VTklYX1NPQ0tFVFMgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3Qgb2ZmZXIgdW5peCBzb2NrZXRzLgorIworIyBEZWZpbmUgTk9fU09DS0FERFJfU1RPUkFHRSBpZiB5b3VyIHBsYXRmb3JtIGRvZXMgbm90IGhhdmUgc3RydWN0CisjIHNvY2thZGRyX3N0b3JhZ2UuCisjCisjIERlZmluZSBOT19JQ09OViBpZiB5b3VyIGxpYmMgZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBpY29udi4KKyMKKyMgRGVmaW5lIE9MRF9JQ09OViBpZiB5b3VyIGxpYnJhcnkgaGFzIGFuIG9sZCBpY29udigpLCB3aGVyZSB0aGUgc2Vjb25kCisjIChpbnB1dCBidWZmZXIgcG9pbnRlcikgcGFyYW1ldGVyIGlzIGRlY2xhcmVkIHdpdGggdHlwZSAoY29uc3QgY2hhciAqKikuCisjCisjIERlZmluZSBOT19ERUZMQVRFX0JPVU5EIGlmIHlvdXIgemxpYiBkb2VzIG5vdCBoYXZlIGRlZmxhdGVCb3VuZC4KKyMKKyMgRGVmaW5lIE5PX1JfVE9fR0NDX0xJTktFUiBpZiB5b3VyIGdjYyBkb2VzIG5vdCBsaWtlICItUi9wYXRoL2xpYiIKKyMgdGhhdCB0ZWxscyBydW50aW1lIHBhdGhzIHRvIGR5bmFtaWMgbGlicmFyaWVzOworIyAiLVdsLC1ycGF0aD0vcGF0aC9saWIiIGlzIHVzZWQgaW5zdGVhZC4KKyMKKyMgRGVmaW5lIE5PX05PUkVUVVJOIGlmIHVzaW5nIGJ1Z2d5IHZlcnNpb25zIG9mIGdjYyA0LjYrIGFuZCBwcm9maWxlIGZlZWRiYWNrLAorIyBhcyB0aGUgY29tcGlsZXIgY2FuIGNyYXNoIChodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTQ5Mjk5KQorIworIyBEZWZpbmUgVVNFX05TRUMgYmVsb3cgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcworIyBhbmQgY3RpbWVzLiBOb3RlIHRoYXQgeW91IG5lZWQgcmVjZW50IGdsaWJjIChhdCBsZWFzdCAyLjIuNCkgZm9yIHRoaXMuIE9uCisjIExpbnV4LCBrZXJuZWwgMi42LjExIG9yIG5ld2VyIGlzIHJlcXVpcmVkIGZvciByZWxpYWJsZSBzdWItc2Vjb25kIGZpbGUgdGltZXMKKyMgb24gZmlsZSBzeXN0ZW1zIHdpdGggZXhhY3RseSAxIG5zIG9yIDEgcyByZXNvbHV0aW9uLiBJZiB5b3UgaW50ZW5kIHRvIHVzZSBHaXQKKyMgb24gb3RoZXIgZmlsZSBzeXN0ZW1zIChlLmcuIENFUEgsIENJRlMsIE5URlMsIFVERiksIGRvbid0IGVuYWJsZSBVU0VfTlNFQy4gU2VlCisjIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL3JhY3ktZ2l0LnR4dCBmb3IgZGV0YWlscy4KKyMKKyMgRGVmaW5lIFVTRV9TVF9USU1FU1BFQyBpZiB5b3VyICJzdHJ1Y3Qgc3RhdCIgdXNlcyAic3RfY3RpbWVzcGVjIiBpbnN0ZWFkIG9mCisjICJzdF9jdGltIgorIworIyBEZWZpbmUgTk9fTlNFQyBpZiB5b3VyICJzdHJ1Y3Qgc3RhdCIgZG9lcyBub3QgaGF2ZSAic3RfY3RpbS50dl9uc2VjIgorIyBhdmFpbGFibGUuICBUaGlzIGF1dG9tYXRpY2FsbHkgdHVybnMgVVNFX05TRUMgb2ZmLgorIworIyBEZWZpbmUgVVNFX1NUREVWIGJlbG93IGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHRoZSB1bmRlcmx5aW5nIGRldmljZQorIyBjaGFuZ2UgYmVpbmcgY29uc2lkZXJlZCBhbiBpbm9kZSBjaGFuZ2UgZnJvbSB0aGUgdXBkYXRlLWluZGV4IHBlcnNwZWN0aXZlLgorIworIyBEZWZpbmUgTk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUIGlmIHlvdXIgcGxhdGZvcm0gZG9lcyBub3QgaGF2ZSBzdF9ibG9ja3MKKyMgZmllbGQgdGhhdCBjb3VudHMgdGhlIG9uLWRpc2sgZm9vdHByaW50IGluIDUxMi1ieXRlIGJsb2Nrcy4KKyMKKyMgRGVmaW5lIERPQ0JPT0tfWFNMXzE3MiBpZiB5b3Ugd2FudCB0byBmb3JtYXQgbWFuIHBhZ2VzIHdpdGggRG9jQm9vayBYU0wgdjEuNzIKKyMgKG5vdCB2MS43MyBvciB2MS43MSkuCisjCisjIERlZmluZSBBU0NJSURPQ19ST0ZGIGlmIHlvdXIgRG9jQm9vayBYU0wgZG9lcyBub3QgZXNjYXBlIHJhdyByb2ZmIGRpcmVjdGl2ZXMKKyMgKHZlcnNpb25zIDEuNjguMSB0aHJvdWdoIHYxLjcyKS4KKyMKKyMgRGVmaW5lIEdOVV9ST0ZGIGlmIHlvdXIgdGFyZ2V0IHN5c3RlbSB1c2VzIEdOVSBncm9mZi4gIFRoaXMgZm9yY2VzCisjIGFwb3N0cm9waGVzIHRvIGJlIEFTQ0lJIHNvIHRoYXQgY3V0JnBhc3RpbmcgZXhhbXBsZXMgdG8gdGhlIHNoZWxsCisjIHdpbGwgd29yay4KKyMKKyMgRGVmaW5lIFBFUkxfUEFUSCB0byB0aGUgcGF0aCBvZiB5b3VyIFBlcmwgYmluYXJ5ICh1c3VhbGx5IC91c3IvYmluL3BlcmwpLgorIworIyBEZWZpbmUgTk9fUEVSTF9NQUtFTUFLRVIgaWYgeW91IGNhbm5vdCB1c2UgTWFrZWZpbGVzIGdlbmVyYXRlZCBieSBwZXJsJ3MKKyMgTWFrZU1ha2VyIChlLmcuIHVzaW5nIEFjdGl2ZVN0YXRlIHVuZGVyIEN5Z3dpbikuCisjCisjIERlZmluZSBOT19QRVJMIGlmIHlvdSBkbyBub3Qgd2FudCBQZXJsIHNjcmlwdHMgb3IgbGlicmFyaWVzIGF0IGFsbC4KKyMKKyMgRGVmaW5lIFBZVEhPTl9QQVRIIHRvIHRoZSBwYXRoIG9mIHlvdXIgUHl0aG9uIGJpbmFyeSAob2Z0ZW4gL3Vzci9iaW4vcHl0aG9uCisjIGJ1dCAvdXNyL2Jpbi9weXRob24yLjcgb24gc29tZSBwbGF0Zm9ybXMpLgorIworIyBEZWZpbmUgTk9fUFlUSE9OIGlmIHlvdSBkbyBub3Qgd2FudCBQeXRob24gc2NyaXB0cyBvciBsaWJyYXJpZXMgYXQgYWxsLgorIworIyBEZWZpbmUgTk9fVENMVEsgaWYgeW91IGRvIG5vdCB3YW50IFRjbC9UayBHVUkuCisjCisjIFRoZSBUQ0xfUEFUSCB2YXJpYWJsZSBnb3Zlcm5zIHRoZSBsb2NhdGlvbiBvZiB0aGUgVGNsIGludGVycHJldGVyCisjIHVzZWQgdG8gb3B0aW1pemUgZ2l0LWd1aSBmb3IgeW91ciBzeXN0ZW0uICBPbmx5IHVzZWQgaWYgTk9fVENMVEsKKyMgaXMgbm90IHNldC4gIERlZmF1bHRzIHRvIHRoZSBiYXJlICd0Y2xzaCcuCisjCisjIFRoZSBUQ0xUS19QQVRIIHZhcmlhYmxlIGdvdmVybnMgdGhlIGxvY2F0aW9uIG9mIHRoZSBUY2wvVGsgaW50ZXJwcmV0ZXIuCisjIElmIG5vdCBzZXQgaXQgZGVmYXVsdHMgdG8gdGhlIGJhcmUgJ3dpc2gnLiBJZiBpdCBpcyBzZXQgdG8gdGhlIGVtcHR5CisjIHN0cmluZyB0aGVuIE5PX1RDTFRLIHdpbGwgYmUgZm9yY2VkICh0aGlzIGlzIHVzZWQgYnkgY29uZmlndXJlIHNjcmlwdCkuCisjCisjIERlZmluZSBJTlRFUk5BTF9RU09SVCB0byB1c2UgR2l0J3MgaW1wbGVtZW50YXRpb24gb2YgcXNvcnQoKSwgd2hpY2gKKyMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIG1lcmdlIHNvcnQgdXNlZCBpbiBnbGliYy4gVGhpcyBpcworIyByZWNvbW1lbmRlZCBpZiBHaXQgdHJpZ2dlcnMgTyhuXjIpIGJlaGF2aW9yIGluIHlvdXIgcGxhdGZvcm0ncyBxc29ydCgpLgorIworIyBEZWZpbmUgVU5SRUxJQUJMRV9GU1RBVCBpZiB5b3VyIHN5c3RlbSdzIGZzdGF0IGRvZXMgbm90IHJldHVybiB0aGUgc2FtZQorIyBpbmZvcm1hdGlvbiBvbiBhIG5vdCB5ZXQgY2xvc2VkIGZpbGUgdGhhdCBsc3RhdCB3b3VsZCByZXR1cm4gZm9yIHRoZSBzYW1lCisjIGZpbGUgYWZ0ZXIgaXQgd2FzIGNsb3NlZC4KKyMKKyMgRGVmaW5lIE9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgaWYgeW91ciBvcGVyYXRpbmcgc3lzdGVtcyBoYXMgcHJvYmxlbXMKKyMgd2hlbiBoYXJkbGlua2luZyBhIGZpbGUgdG8gYW5vdGhlciBuYW1lIGFuZCB1bmxpbmtpbmcgdGhlIG9yaWdpbmFsIGZpbGUgcmlnaHQKKyMgYXdheSAoc29tZSBOVEZTIGRyaXZlcnMgc2VlbSB0byB6ZXJvIHRoZSBjb250ZW50cyBpbiB0aGF0IHNjZW5hcmlvKS4KKyMKKyMgRGVmaW5lIE5PX0NST1NTX0RJUkVDVE9SWV9IQVJETElOS1MgaWYgeW91IHBsYW4gdG8gZGlzdHJpYnV0ZSB0aGUgaW5zdGFsbGVkCisjIHByb2dyYW1zIGFzIGEgdGFyLCB3aGVyZSBiaW4vIGFuZCBsaWJleGVjLyBtaWdodCBiZSBvbiBkaWZmZXJlbnQgZmlsZSBzeXN0ZW1zLgorIworIyBEZWZpbmUgTk9fSU5TVEFMTF9IQVJETElOS1MgaWYgeW91IHByZWZlciB0byB1c2UgZWl0aGVyIHN5bWJvbGljIGxpbmtzIG9yCisjIGNvcGllcyB0byBpbnN0YWxsIGJ1aWx0LWluIGdpdCBjb21tYW5kcyBlLmcuIGdpdC1jYXQtZmlsZS4KKyMKKyMgRGVmaW5lIFVTRV9ORURfQUxMT0NBVE9SIGlmIHlvdSB3YW50IHRvIHJlcGxhY2UgdGhlIHBsYXRmb3JtcyBkZWZhdWx0CisjIG1lbW9yeSBhbGxvY2F0b3JzIHdpdGggdGhlIG5lZG1hbGxvYyBhbGxvY2F0b3Igd3JpdHRlbiBieSBOaWFsbCBEb3VnbGFzLgorIworIyBEZWZpbmUgTk9fUkVHRVggaWYgeW91IGhhdmUgbm8gb3IgaW5mZXJpb3IgcmVnZXggc3VwcG9ydCBpbiB5b3VyIEMgbGlicmFyeS4KKyMKKyMgRGVmaW5lIEhBVkVfREVWX1RUWSBpZiB5b3VyIHN5c3RlbSBjYW4gb3BlbiAvZGV2L3R0eSB0byBpbnRlcmFjdCB3aXRoIHRoZQorIyB1c2VyLgorIworIyBEZWZpbmUgR0VUVEVYVF9QT0lTT04gaWYgeW91IGFyZSBkZWJ1Z2dpbmcgdGhlIGNob2ljZSBvZiBzdHJpbmdzIG1hcmtlZAorIyBmb3IgdHJhbnNsYXRpb24uICBJbiBhIEdFVFRFWFRfUE9JU09OIGJ1aWxkLCB5b3UgY2FuIHR1cm4gYWxsIHN0cmluZ3MgbWFya2VkCisjIGZvciB0cmFuc2xhdGlvbiBpbnRvIGdpYmJlcmlzaCBieSBzZXR0aW5nIHRoZSBHSVRfR0VUVEVYVF9QT0lTT04gdmFyaWFibGUKKyMgKHRvIGFueSB2YWx1ZSkgaW4geW91ciBlbnZpcm9ubWVudC4KKyMKKyMgRGVmaW5lIEpTTUlOIHRvIHBvaW50IHRvIEphdmFTY3JpcHQgbWluaWZpZXIgdGhhdCBmdW5jdGlvbnMgYXMKKyMgYSBmaWx0ZXIgdG8gaGF2ZSBnaXR3ZWIuanMgbWluaWZpZWQuCisjCisjIERlZmluZSBDU1NNSU4gdG8gcG9pbnQgdG8gYSBDU1MgbWluaWZpZXIgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgYSBtaW5pZmllZAorIyB2ZXJzaW9uIG9mIGdpdHdlYi5jc3MKKyMKKyMgRGVmaW5lIERFRkFVTFRfUEFHRVIgdG8gYSBzZW5zaWJsZSBwYWdlciBjb21tYW5kIChkZWZhdWx0cyB0byAibGVzcyIpIGlmCisjIHlvdSB3YW50IHRvIHVzZSBzb21ldGhpbmcgZGlmZmVyZW50LiAgVGhlIHZhbHVlIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYnkgdGhlCisjIHNoZWxsIGF0IHJ1bnRpbWUgd2hlbiBpdCBpcyB1c2VkLgorIworIyBEZWZpbmUgREVGQVVMVF9FRElUT1IgdG8gYSBzZW5zaWJsZSBlZGl0b3IgY29tbWFuZCAoZGVmYXVsdHMgdG8gInZpIikgaWYgeW91CisjIHdhbnQgdG8gdXNlIHNvbWV0aGluZyBkaWZmZXJlbnQuICBUaGUgdmFsdWUgd2lsbCBiZSBpbnRlcnByZXRlZCBieSB0aGUgc2hlbGwKKyMgaWYgbmVjZXNzYXJ5IHdoZW4gaXQgaXMgdXNlZC4gIEV4YW1wbGVzOgorIworIyAgIERFRkFVTFRfRURJVE9SPSd+L2Jpbi92aScsCisjICAgREVGQVVMVF9FRElUT1I9JyRHSVRfRkFMTEJBQ0tfRURJVE9SJywKKyMgICBERUZBVUxUX0VESVRPUj0nIkM6XFByb2dyYW0gRmlsZXNcVmltXGd2aW0uZXhlIiAtLW5vZm9yaycKKyMKKyMgRGVmaW5lIENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUyB0byAieWVzIiBpZiB5b3Ugd2FudCBkZXBlbmRlbmNpZXMgb24KKyMgaGVhZGVyIGZpbGVzIHRvIGJlIGF1dG9tYXRpY2FsbHkgY29tcHV0ZWQsIHRvIGF2b2lkIHJlYnVpbGRpbmcgb2JqZWN0cyB3aGVuCisjIGFuIHVucmVsYXRlZCBoZWFkZXIgZmlsZSBjaGFuZ2VzLiAgRGVmaW5lIGl0IHRvICJubyIgdG8gdXNlIHRoZSBoYXJkLWNvZGVkCisjIGRlcGVuZGVuY3kgcnVsZXMuICBUaGUgZGVmYXVsdCBpcyAiYXV0byIsIHdoaWNoIG1lYW5zIHRvIHVzZSBjb21wdXRlZCBoZWFkZXIKKyMgZGVwZW5kZW5jaWVzIGlmIHlvdXIgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdG8gc3VwcG9ydCBpdC4KKyMKKyMgRGVmaW5lIE5BVElWRV9DUkxGIGlmIHlvdXIgcGxhdGZvcm0gdXNlcyBDUkxGIGZvciBsaW5lIGVuZGluZ3MuCisjCisjIERlZmluZSBYRExfRkFTVF9IQVNIIHRvIHVzZSBhbiBhbHRlcm5hdGl2ZSBsaW5lLWhhc2hpbmcgbWV0aG9kIGluCisjIHRoZSBkaWZmIGFsZ29yaXRobS4gIEl0IGdpdmVzIGEgbmljZSBzcGVlZHVwIGlmIHlvdXIgcHJvY2Vzc29yIGhhcworIyBmYXN0IHVuYWxpZ25lZCB3b3JkIGxvYWRzLiAgRG9lcyBOT1Qgd29yayBvbiBiaWctZW5kaWFuIHN5c3RlbXMhCisjIEVuYWJsZWQgYnkgZGVmYXVsdCBvbiB4ODZfNjQuCisjCisjIERlZmluZSBHSVRfVVNFUl9BR0VOVCBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaG93IGdpdCBpZGVudGlmaWVzIGl0c2VsZiBkdXJpbmcKKyMgbmV0d29yayBpbnRlcmFjdGlvbnMuICBUaGUgZGVmYXVsdCBpcyAiZ2l0LyQoR0lUX1ZFUlNJT04pIi4KKyMKKyMgRGVmaW5lIERFRkFVTFRfSEVMUF9GT1JNQVQgdG8gIm1hbiIsICJpbmZvIiBvciAiaHRtbCIKKyMgKGRlZmF1bHRzIHRvICJtYW4iKSBpZiB5b3Ugd2FudCB0byBoYXZlIGEgZGlmZmVyZW50IGRlZmF1bHQgd2hlbgorIyAiZ2l0IGhlbHAiIGlzIGNhbGxlZCB3aXRob3V0IGEgcGFyYW1ldGVyIHNwZWNpZnlpbmcgdGhlIGZvcm1hdC4KKyMKKyMgRGVmaW5lIFRFU1RfR0lUX0lOREVYX1ZFUlNJT04gdG8gMiwgMyBvciA0IHRvIHJ1biB0aGUgdGVzdCBzdWl0ZQorIyB3aXRoIGEgZGlmZmVyZW50IGluZGV4ZmlsZSBmb3JtYXQgdmVyc2lvbi4gIElmIGl0IGlzbid0IHNldCB0aGUgaW5kZXgKKyMgZmlsZSBmb3JtYXQgdXNlZCBpcyBpbmRleC12WzIzXS4KKyMKKyMgRGVmaW5lIEdNVElNRV9VTlJFTElBQkxFX0VSUk9SUyBpZiB5b3VyIGdtdGltZSgpIGZ1bmN0aW9uIGRvZXMgbm90CisjIHJldHVybiBOVUxMIHdoZW4gaXQgcmVjZWl2ZXMgYSBib2d1cyB0aW1lX3QuCisjCisjIERlZmluZSBIQVZFX0NMT0NLX0dFVFRJTUUgaWYgeW91ciBwbGF0Zm9ybSBoYXMgY2xvY2tfZ2V0dGltZSBpbiBsaWJydC4KKyMKKyMgRGVmaW5lIEhBVkVfQ0xPQ0tfTU9OT1RPTklDIGlmIHlvdXIgcGxhdGZvcm0gaGFzIENMT0NLX01PTk9UT05JQyBpbiBsaWJydC4KKyMKKyMgRGVmaW5lIE5PX0hNQUNfQ1RYX0NMRUFOVVAgaWYgeW91ciBPcGVuU1NMIGlzIHZlcnNpb24gMC45LjZiIG9yIGVhcmxpZXIgdG8KKyMgY2xlYW51cCB0aGUgSE1BQyBjb250ZXh0IHdpdGggdGhlIG9sZGVyIEhNQUNfY2xlYW51cCBmdW5jdGlvbi4KKyMKKyMgRGVmaW5lIFVTRV9QQVJFTlNfQVJPVU5EX0dFVFRFWFRfTiB0byAieWVzIiBpZiB5b3VyIGNvbXBpbGVyIGhhcHBpbHkKKyMgY29tcGlsZXMgdGhlIGZvbGxvd2luZyBpbml0aWFsaXphdGlvbjoKKyMKKyMgICBzdGF0aWMgY29uc3QgY2hhciBzW10gPSAoIkZPTyIpOworIworIyBhbmQgZGVmaW5lIGl0IHRvICJubyIgaWYgeW91IG5lZWQgdG8gcmVtb3ZlIHRoZSBwYXJlbnRoZXNlcyAoKSBhcm91bmQgdGhlCisjIGNvbnN0YW50LiAgVGhlIGRlZmF1bHQgaXMgImF1dG8iLCB3aGljaCBtZWFucyB0byB1c2UgcGFyZW50aGVzZXMgaWYgeW91cgorIyBjb21waWxlciBpcyBkZXRlY3RlZCB0byBzdXBwb3J0IGl0LgorIworIyBEZWZpbmUgSEFWRV9CU0RfU1lTQ1RMIGlmIHlvdXIgcGxhdGZvcm0gaGFzIGEgQlNELWNvbXBhdGlibGUgc3lzY3RsIGZ1bmN0aW9uLgorIworIyBEZWZpbmUgSEFWRV9HRVRERUxJTSBpZiB5b3VyIHN5c3RlbSBoYXMgdGhlIGdldGRlbGltKCkgZnVuY3Rpb24uCiAKLVRDTF9QQVRIID89IHRjbHNoCi1UQ0xUS19QQVRIID89IHdpc2gKLUlOU1RBTEwgPz0gaW5zdGFsbAotUk0gPz0gcm0gLWYKK0dJVC1WRVJTSU9OLUZJTEU6IEZPUkNFCisJQCQoU0hFTExfUEFUSCkgLi9HSVQtVkVSU0lPTi1HRU4KKy1pbmNsdWRlIEdJVC1WRVJTSU9OLUZJTEUKIAotREVTVERJUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpCi1iaW5kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGJpbmRpcikpCi1UQ0xUS19QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xUS19QQVRIKSkKKyMgQ0ZMQUdTIGFuZCBMREZMQUdTIGFyZSBmb3IgdGhlIHVzZXJzIHRvIG92ZXJyaWRlIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KIAotIyMjIERldGVjdCBUY2svVGsgaW50ZXJwcmV0ZXIgcGF0aCBjaGFuZ2VzCi1UUkFDS19UQ0xUSyA9ICQoc3Vic3QgJywnXCcnLC1EVENMVEtfUEFUSD0nJChUQ0xUS19QQVRIX1NRKScpCitDRkxBR1MgPSAtZyAtTzIgLVdhbGwKK0xERkxBR1MgPQorQUxMX0NGTEFHUyA9ICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKQorQUxMX0xERkxBR1MgPSAkKExERkxBR1MpCitTVFJJUCA/PSBzdHJpcAogCi1HSVQtVENMVEstVkFSUzogRk9SQ0UKLQlAVkFSUz0nJChUUkFDS19UQ0xUSyknOyBcCi0JCWlmIHRlc3QgeCIkJFZBUlMiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCi0JCQllY2hvIDE+JjIgIiAgICAqIG5ldyBUY2wvVGsgaW50ZXJwcmV0ZXIgbG9jYXRpb24iOyBcCi0JCQllY2hvICIkJFZBUlMiID4kQDsgXAotCQlmaQorIyBDcmVhdGUgYXMgbmVjZXNzYXJ5LCByZXBsYWNlIGV4aXN0aW5nLCBtYWtlIHJhbmxpYiB1bm5lZWRlZC4KK0FSRkxBR1MgPSByY3MKIAotIyMgcG8tZmlsZSBjcmVhdGlvbiBydWxlcwotWEdFVFRFWFQgICA/PSB4Z2V0dGV4dAotaWZkZWYgTk9fTVNHRk1UCi0JTVNHRk1UID89ICQoVENMX1BBVEgpIHBvL3BvMm1zZy5zaAorIyBBbW9uZyB0aGUgdmFyaWFibGVzIGJlbG93LCB0aGVzZToKKyMgICBnaXRleGVjZGlyCisjICAgdGVtcGxhdGVfZGlyCisjICAgc3lzY29uZmRpcgorIyBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgcmVsYXRpdmUgcGF0aCBzb21lL3doZXJlL2Vsc2U7CisjIHRoaXMgaXMgaW50ZXJwcmV0ZWQgYXMgcmVsYXRpdmUgdG8gJChwcmVmaXgpIGFuZCAiZ2l0IiBhdAorIyBydW50aW1lIGZpZ3VyZXMgb3V0IHdoZXJlIHRoZXkgYXJlIGJhc2VkIG9uIHRoZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlLgorIyBBZGRpdGlvbmFsbHksIHRoZSBmb2xsb3dpbmcgd2lsbCBiZSB0cmVhdGVkIGFzIHJlbGF0aXZlIGJ5ICJnaXQiIGlmIHRoZXkKKyMgYmVnaW4gd2l0aCAiJChwcmVmaXgpLyI6CisjICAgbWFuZGlyCisjICAgaW5mb2RpcgorIyAgIGh0bWxkaXIKKyMgVGhpcyBjYW4gaGVscCBpbnN0YWxsaW5nIHRoZSBzdWl0ZSBpbiBhIHJlbG9jYXRhYmxlIHdheS4KKworcHJlZml4ID0gJChIT01FKQorYmluZGlyX3JlbGF0aXZlID0gYmluCitiaW5kaXIgPSAkKHByZWZpeCkvJChiaW5kaXJfcmVsYXRpdmUpCittYW5kaXIgPSAkKHByZWZpeCkvc2hhcmUvbWFuCitpbmZvZGlyID0gJChwcmVmaXgpL3NoYXJlL2luZm8KK2dpdGV4ZWNkaXIgPSBsaWJleGVjL2dpdC1jb3JlCittZXJnZXRvb2xzZGlyID0gJChnaXRleGVjZGlyKS9tZXJnZXRvb2xzCitzaGFyZWRpciA9ICQocHJlZml4KS9zaGFyZQorZ2l0d2ViZGlyID0gJChzaGFyZWRpcikvZ2l0d2ViCitsb2NhbGVkaXIgPSAkKHNoYXJlZGlyKS9sb2NhbGUKK3RlbXBsYXRlX2RpciA9IHNoYXJlL2dpdC1jb3JlL3RlbXBsYXRlcworaHRtbGRpciA9ICQocHJlZml4KS9zaGFyZS9kb2MvZ2l0LWRvYworRVRDX0dJVENPTkZJRyA9ICQoc3lzY29uZmRpcikvZ2l0Y29uZmlnCitFVENfR0lUQVRUUklCVVRFUyA9ICQoc3lzY29uZmRpcikvZ2l0YXR0cmlidXRlcworbGliID0gbGliCisjIERFU1RESVIgPQorcGF0aHNlcCA9IDoKKworbWFuZGlyX3JlbGF0aXZlID0gJChwYXRzdWJzdCAkKHByZWZpeCkvJSwlLCQobWFuZGlyKSkKK2luZm9kaXJfcmVsYXRpdmUgPSAkKHBhdHN1YnN0ICQocHJlZml4KS8lLCUsJChpbmZvZGlyKSkKK2h0bWxkaXJfcmVsYXRpdmUgPSAkKHBhdHN1YnN0ICQocHJlZml4KS8lLCUsJChodG1sZGlyKSkKKworZXhwb3J0IHByZWZpeCBiaW5kaXIgc2hhcmVkaXIgc3lzY29uZmRpciBnaXR3ZWJkaXIgbG9jYWxlZGlyCisKK0NDID0gY2MKK0FSID0gYXIKK1JNID0gcm0gLWYKK0RJRkYgPSBkaWZmCitUQVIgPSB0YXIKK0ZJTkQgPSBmaW5kCitJTlNUQUxMID0gaW5zdGFsbAorUlBNQlVJTEQgPSBycG1idWlsZAorVENMX1BBVEggPSB0Y2xzaAorVENMVEtfUEFUSCA9IHdpc2gKK1hHRVRURVhUID0geGdldHRleHQKK01TR0ZNVCA9IG1zZ2ZtdAorQ1VSTF9DT05GSUcgPSBjdXJsLWNvbmZpZworUFRIUkVBRF9MSUJTID0gLWxwdGhyZWFkCitQVEhSRUFEX0NGTEFHUyA9CitHQ09WID0gZ2NvdgorCitleHBvcnQgVENMX1BBVEggVENMVEtfUEFUSAorCitTUEFSU0VfRkxBR1MgPQorCisKKworIyMjIC0tLSBFTkQgQ09ORklHVVJBVElPTiBTRUNUSU9OIC0tLQorCisjIFRob3NlIG11c3Qgbm90IGJlIEdOVS1zcGVjaWZpYzsgdGhleSBhcmUgc2hhcmVkIHdpdGggcGVybC8gd2hpY2ggbWF5CisjIGJlIGJ1aWx0IGJ5IGEgZGlmZmVyZW50IGNvbXBpbGVyLiAoTm90ZSB0aGF0IHRoaXMgaXMgYW4gYXJ0aWZhY3Qgbm93CisjIGJ1dCBpdCBzdGlsbCBtaWdodCBiZSBuaWNlIHRvIGtlZXAgdGhhdCBkaXN0aW5jdGlvbi4pCitCQVNJQ19DRkxBR1MgPSAtSS4KK0JBU0lDX0xERkxBR1MgPQorCisjIEd1YXJkIGFnYWluc3QgZW52aXJvbm1lbnQgdmFyaWFibGVzCitCVUlMVElOX09CSlMgPQorQlVJTFRfSU5TID0KK0NPTVBBVF9DRkxBR1MgPQorQ09NUEFUX09CSlMgPQorWERJRkZfT0JKUyA9CitWQ1NTVk5fT0JKUyA9CitHRU5FUkFURURfSCA9CitFWFRSQV9DUFBGTEFHUyA9CitMSUJfT0JKUyA9CitQUk9HUkFNX09CSlMgPQorUFJPR1JBTVMgPQorU0NSSVBUX1BFUkwgPQorU0NSSVBUX1BZVEhPTiA9CitTQ1JJUFRfU0ggPQorU0NSSVBUX0xJQiA9CitURVNUX1BST0dSQU1TX05FRURfWCA9CisKKyMgSGF2aW5nIHRoaXMgdmFyaWFibGUgaW4geW91ciBlbnZpcm9ubWVudCB3b3VsZCBicmVhayBwaXBlbGluZXMgYmVjYXVzZQorIyB5b3UgY2F1c2UgImNkIiB0byBlY2hvIGl0cyBkZXN0aW5hdGlvbiB0byBzdGRvdXQuICBJdCBjYW4gYWxzbyB0YWtlCisjIHNjcmlwdHMgdG8gdW5leHBlY3RlZCBwbGFjZXMuICBJZiB5b3UgbGlrZSBDRFBBVEgsIGRlZmluZSBpdCBmb3IgeW91cgorIyBpbnRlcmFjdGl2ZSBzaGVsbCBzZXNzaW9ucyB3aXRob3V0IGV4cG9ydGluZyBpdC4KK3VuZXhwb3J0IENEUEFUSAorCitTQ1JJUFRfU0ggKz0gZ2l0LWJpc2VjdC5zaAorU0NSSVBUX1NIICs9IGdpdC1kaWZmdG9vbC0taGVscGVyLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LWZpbHRlci1icmFuY2guc2gKK1NDUklQVF9TSCArPSBnaXQtbWVyZ2Utb2N0b3B1cy5zaAorU0NSSVBUX1NIICs9IGdpdC1tZXJnZS1vbmUtZmlsZS5zaAorU0NSSVBUX1NIICs9IGdpdC1tZXJnZS1yZXNvbHZlLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LW1lcmdldG9vbC5zaAorU0NSSVBUX1NIICs9IGdpdC1xdWlsdGltcG9ydC5zaAorU0NSSVBUX1NIICs9IGdpdC1yZWJhc2Uuc2gKK1NDUklQVF9TSCArPSBnaXQtcmVtb3RlLXRlc3RnaXQuc2gKK1NDUklQVF9TSCArPSBnaXQtcmVxdWVzdC1wdWxsLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LXN0YXNoLnNoCitTQ1JJUFRfU0ggKz0gZ2l0LXN1Ym1vZHVsZS5zaAorU0NSSVBUX1NIICs9IGdpdC13ZWItLWJyb3dzZS5zaAorCitTQ1JJUFRfTElCICs9IGdpdC1tZXJnZXRvb2wtLWxpYgorU0NSSVBUX0xJQiArPSBnaXQtcGFyc2UtcmVtb3RlCitTQ1JJUFRfTElCICs9IGdpdC1yZWJhc2UtLWFtCitTQ1JJUFRfTElCICs9IGdpdC1yZWJhc2UtLWludGVyYWN0aXZlCitTQ1JJUFRfTElCICs9IGdpdC1yZWJhc2UtLW1lcmdlCitTQ1JJUFRfTElCICs9IGdpdC1zaC1zZXR1cAorU0NSSVBUX0xJQiArPSBnaXQtc2gtaTE4bgorCitTQ1JJUFRfUEVSTCArPSBnaXQtYWRkLS1pbnRlcmFjdGl2ZS5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtZGlmZnRvb2wucGVybAorU0NSSVBUX1BFUkwgKz0gZ2l0LWFyY2hpbXBvcnQucGVybAorU0NSSVBUX1BFUkwgKz0gZ2l0LWN2c2V4cG9ydGNvbW1pdC5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtY3ZzaW1wb3J0LnBlcmwKK1NDUklQVF9QRVJMICs9IGdpdC1jdnNzZXJ2ZXIucGVybAorU0NSSVBUX1BFUkwgKz0gZ2l0LXJlbGluay5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtc2VuZC1lbWFpbC5wZXJsCitTQ1JJUFRfUEVSTCArPSBnaXQtc3ZuLnBlcmwKKworU0NSSVBUX1BZVEhPTiArPSBnaXQtcDQucHkKKworTk9fSU5TVEFMTCArPSBnaXQtcmVtb3RlLXRlc3RnaXQKKworIyBHZW5lcmF0ZWQgZmlsZXMgZm9yIHNjcmlwdHMKK1NDUklQVF9TSF9HRU4gPSAkKHBhdHN1YnN0ICUuc2gsJSwkKFNDUklQVF9TSCkpCitTQ1JJUFRfUEVSTF9HRU4gPSAkKHBhdHN1YnN0ICUucGVybCwlLCQoU0NSSVBUX1BFUkwpKQorU0NSSVBUX1BZVEhPTl9HRU4gPSAkKHBhdHN1YnN0ICUucHksJSwkKFNDUklQVF9QWVRIT04pKQorCitTQ1JJUFRfU0hfSU5TID0gJChmaWx0ZXItb3V0ICQoTk9fSU5TVEFMTCksJChTQ1JJUFRfU0hfR0VOKSkKK1NDUklQVF9QRVJMX0lOUyA9ICQoZmlsdGVyLW91dCAkKE5PX0lOU1RBTEwpLCQoU0NSSVBUX1BFUkxfR0VOKSkKK1NDUklQVF9QWVRIT05fSU5TID0gJChmaWx0ZXItb3V0ICQoTk9fSU5TVEFMTCksJChTQ1JJUFRfUFlUSE9OX0dFTikpCisKKyMgSW5kaXZpZHVhbCBydWxlcyB0byBhbGxvdyBlLmcuCisjICJtYWtlIC1DIC4uLy4uIFNDUklQVF9QRVJMPWNvbnRyaWIvZm9vL2Jhci5wZXJsIGJ1aWxkLXBlcmwtc2NyaXB0IgorIyBmcm9tIHN1YmRpcmVjdG9yaWVzIGxpa2UgY29udHJpYi8qLworLlBIT05ZOiBidWlsZC1wZXJsLXNjcmlwdCBidWlsZC1zaC1zY3JpcHQgYnVpbGQtcHl0aG9uLXNjcmlwdAorYnVpbGQtcGVybC1zY3JpcHQ6ICQoU0NSSVBUX1BFUkxfR0VOKQorYnVpbGQtc2gtc2NyaXB0OiAkKFNDUklQVF9TSF9HRU4pCitidWlsZC1weXRob24tc2NyaXB0OiAkKFNDUklQVF9QWVRIT05fR0VOKQorCisuUEhPTlk6IGluc3RhbGwtcGVybC1zY3JpcHQgaW5zdGFsbC1zaC1zY3JpcHQgaW5zdGFsbC1weXRob24tc2NyaXB0CitpbnN0YWxsLXNoLXNjcmlwdDogJChTQ1JJUFRfU0hfSU5TKQorCSQoSU5TVEFMTCkgJF4gJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCitpbnN0YWxsLXBlcmwtc2NyaXB0OiAkKFNDUklQVF9QRVJMX0lOUykKKwkkKElOU1RBTEwpICReICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworaW5zdGFsbC1weXRob24tc2NyaXB0OiAkKFNDUklQVF9QWVRIT05fSU5TKQorCSQoSU5TVEFMTCkgJF4gJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisKKy5QSE9OWTogY2xlYW4tcGVybC1zY3JpcHQgY2xlYW4tc2gtc2NyaXB0IGNsZWFuLXB5dGhvbi1zY3JpcHQKK2NsZWFuLXNoLXNjcmlwdDoKKwkkKFJNKSAkKFNDUklQVF9TSF9HRU4pCitjbGVhbi1wZXJsLXNjcmlwdDoKKwkkKFJNKSAkKFNDUklQVF9QRVJMX0dFTikKK2NsZWFuLXB5dGhvbi1zY3JpcHQ6CisJJChSTSkgJChTQ1JJUFRfUFlUSE9OX0dFTikKKworU0NSSVBUUyA9ICQoU0NSSVBUX1NIX0lOUykgXAorCSAgJChTQ1JJUFRfUEVSTF9JTlMpIFwKKwkgICQoU0NSSVBUX1BZVEhPTl9JTlMpIFwKKwkgIGdpdC1pbnN0YXdlYgorCitFVEFHU19UQVJHRVQgPSBUQUdTCisKKyMgRW1wdHkuLi4KK0VYVFJBX1BST0dSQU1TID0KKworIyAuLi4gYW5kIGFsbCB0aGUgcmVzdCB0aGF0IGNvdWxkIGJlIG1vdmVkIG91dCBvZiBiaW5kaXIgdG8gZ2l0ZXhlY2RpcgorUFJPR1JBTVMgKz0gJChFWFRSQV9QUk9HUkFNUykKKworUFJPR1JBTV9PQkpTICs9IGNyZWRlbnRpYWwtc3RvcmUubworUFJPR1JBTV9PQkpTICs9IGRhZW1vbi5vCitQUk9HUkFNX09CSlMgKz0gZmFzdC1pbXBvcnQubworUFJPR1JBTV9PQkpTICs9IGh0dHAtYmFja2VuZC5vCitQUk9HUkFNX09CSlMgKz0gaW1hcC1zZW5kLm8KK1BST0dSQU1fT0JKUyArPSBzaC1pMThuLS1lbnZzdWJzdC5vCitQUk9HUkFNX09CSlMgKz0gc2hlbGwubworUFJPR1JBTV9PQkpTICs9IHNob3ctaW5kZXgubworUFJPR1JBTV9PQkpTICs9IHVwbG9hZC1wYWNrLm8KK1BST0dSQU1fT0JKUyArPSByZW1vdGUtdGVzdHN2bi5vCisKKyMgQmluYXJ5IHN1ZmZpeCwgc2V0IHRvIC5leGUgZm9yIFdpbmRvd3MgYnVpbGRzCitYID0KKworUFJPR1JBTVMgKz0gJChwYXRzdWJzdCAlLm8sZ2l0LSUkWCwkKFBST0dSQU1fT0JKUykpCisKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtY2htdGltZQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1jdHlwZQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1jb25maWcKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtZGF0ZQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1kZWx0YQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1kdW1wLWNhY2hlLXRyZWUKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtZHVtcC1zcGxpdC1pbmRleAorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1nZW5yYW5kb20KK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtaGFzaG1hcAorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1pbmRleC12ZXJzaW9uCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LWxpbmUtYnVmZmVyCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LW1hdGNoLXRyZWVzCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LW1lcmdlc29ydAorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1ta3RlbXAKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtcGFyc2Utb3B0aW9ucworVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1wYXRoLXV0aWxzCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXByaW8tcXVldWUKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtcmVhZC1jYWNoZQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1yZWdleAorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1yZXZpc2lvbi13YWxraW5nCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXJ1bi1jb21tYW5kCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXNjcmFwLWNhY2hlLXRyZWUKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3Qtc2hhMQorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1zaGExLWFycmF5CitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXNpZ2NoYWluCitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXN0cmluZy1saXN0CitURVNUX1BST0dSQU1TX05FRURfWCArPSB0ZXN0LXN1Ym1vZHVsZS1jb25maWcKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3Qtc3VicHJvY2VzcworVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC1zdm4tZmUKK1RFU1RfUFJPR1JBTVNfTkVFRF9YICs9IHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbgorVEVTVF9QUk9HUkFNU19ORUVEX1ggKz0gdGVzdC13aWxkbWF0Y2gKKworVEVTVF9QUk9HUkFNUyA9ICQocGF0c3Vic3QgJSwlJFgsJChURVNUX1BST0dSQU1TX05FRURfWCkpCisKKyMgTGlzdCBidWlsdC1pbiBjb21tYW5kICRDIHdob3NlIGltcGxlbWVudGF0aW9uIGNtZF8kQygpIGlzIG5vdCBpbgorIyBidWlsdGluLyRDLm8gYnV0IGlzIGxpbmtlZCBpbiBhcyBwYXJ0IG9mIHNvbWUgb3RoZXIgY29tbWFuZC4KK0JVSUxUX0lOUyArPSAkKHBhdHN1YnN0IGJ1aWx0aW4vJS5vLGdpdC0lJFgsJChCVUlMVElOX09CSlMpKQorCitCVUlMVF9JTlMgKz0gZ2l0LWNoZXJyeSRYCitCVUlMVF9JTlMgKz0gZ2l0LWNoZXJyeS1waWNrJFgKK0JVSUxUX0lOUyArPSBnaXQtZm9ybWF0LXBhdGNoJFgKK0JVSUxUX0lOUyArPSBnaXQtZnNjay1vYmplY3RzJFgKK0JVSUxUX0lOUyArPSBnaXQtaW5pdCRYCitCVUlMVF9JTlMgKz0gZ2l0LW1lcmdlLXN1YnRyZWUkWAorQlVJTFRfSU5TICs9IGdpdC1zaG93JFgKK0JVSUxUX0lOUyArPSBnaXQtc3RhZ2UkWAorQlVJTFRfSU5TICs9IGdpdC1zdGF0dXMkWAorQlVJTFRfSU5TICs9IGdpdC13aGF0Y2hhbmdlZCRYCisKKyMgd2hhdCAnYWxsJyB3aWxsIGJ1aWxkIGFuZCAnaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGluIGdpdGV4ZWNkaXIsCisjIGV4Y2x1ZGluZyBwcm9ncmFtcyBmb3IgYnVpbHQtaW4gY29tbWFuZHMKK0FMTF9QUk9HUkFNUyA9ICQoUFJPR1JBTVMpICQoU0NSSVBUUykKKworIyB3aGF0ICdhbGwnIHdpbGwgYnVpbGQgYnV0IG5vdCBpbnN0YWxsIGluIGdpdGV4ZWNkaXIKK09USEVSX1BST0dSQU1TID0gZ2l0JFgKKworIyB3aGF0IHRlc3Qgd3JhcHBlcnMgYXJlIG5lZWRlZCBhbmQgJ2luc3RhbGwnIHdpbGwgaW5zdGFsbCwgaW4gYmluZGlyCitCSU5ESVJfUFJPR1JBTVNfTkVFRF9YICs9IGdpdAorQklORElSX1BST0dSQU1TX05FRURfWCArPSBnaXQtdXBsb2FkLXBhY2sKK0JJTkRJUl9QUk9HUkFNU19ORUVEX1ggKz0gZ2l0LXJlY2VpdmUtcGFjaworQklORElSX1BST0dSQU1TX05FRURfWCArPSBnaXQtdXBsb2FkLWFyY2hpdmUKK0JJTkRJUl9QUk9HUkFNU19ORUVEX1ggKz0gZ2l0LXNoZWxsCisKK0JJTkRJUl9QUk9HUkFNU19OT19YICs9IGdpdC1jdnNzZXJ2ZXIKKworIyBTZXQgcGF0aHMgdG8gdG9vbHMgZWFybHkgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIGZvciB2ZXJzaW9uIHRlc3RzLgoraWZuZGVmIFNIRUxMX1BBVEgKKwlTSEVMTF9QQVRIID0gL2Jpbi9zaAorZW5kaWYKK2lmbmRlZiBQRVJMX1BBVEgKKwlQRVJMX1BBVEggPSAvdXNyL2Jpbi9wZXJsCitlbmRpZgoraWZuZGVmIFBZVEhPTl9QQVRICisJUFlUSE9OX1BBVEggPSAvdXNyL2Jpbi9weXRob24KK2VuZGlmCisKK2V4cG9ydCBQRVJMX1BBVEgKK2V4cG9ydCBQWVRIT05fUEFUSAorCitMSUJfRklMRSA9IGxpYmdpdC5hCitYRElGRl9MSUIgPSB4ZGlmZi9saWIuYQorVkNTU1ZOX0xJQiA9IHZjcy1zdm4vbGliLmEKKworR0VORVJBVEVEX0ggKz0gY29tbW9uLWNtZHMuaAorCitMSUJfSCA9ICQoc2hlbGwgJChGSU5EKSAuIFwKKwktbmFtZSAuZ2l0IC1wcnVuZSAtbyBcCisJLW5hbWUgdCAtcHJ1bmUgLW8gXAorCS1uYW1lIERvY3VtZW50YXRpb24gLXBydW5lIC1vIFwKKwktbmFtZSAnKi5oJyAtcHJpbnQpCisKK0xJQl9PQkpTICs9IGFic3BhdGgubworTElCX09CSlMgKz0gYWR2aWNlLm8KK0xJQl9PQkpTICs9IGFsaWFzLm8KK0xJQl9PQkpTICs9IGFsbG9jLm8KK0xJQl9PQkpTICs9IGFyY2hpdmUubworTElCX09CSlMgKz0gYXJjaGl2ZS10YXIubworTElCX09CSlMgKz0gYXJjaGl2ZS16aXAubworTElCX09CSlMgKz0gYXJndi1hcnJheS5vCitMSUJfT0JKUyArPSBhdHRyLm8KK0xJQl9PQkpTICs9IGJhc2U4NS5vCitMSUJfT0JKUyArPSBiaXNlY3QubworTElCX09CSlMgKz0gYmxvYi5vCitMSUJfT0JKUyArPSBicmFuY2gubworTElCX09CSlMgKz0gYnVsay1jaGVja2luLm8KK0xJQl9PQkpTICs9IGJ1bmRsZS5vCitMSUJfT0JKUyArPSBjYWNoZS10cmVlLm8KK0xJQl9PQkpTICs9IGNvbG9yLm8KK0xJQl9PQkpTICs9IGNvbHVtbi5vCitMSUJfT0JKUyArPSBjb21iaW5lLWRpZmYubworTElCX09CSlMgKz0gY29tbWl0Lm8KK0xJQl9PQkpTICs9IGNvbXBhdC9vYnN0YWNrLm8KK0xJQl9PQkpTICs9IGNvbXBhdC90ZXJtaW5hbC5vCitMSUJfT0JKUyArPSBjb25maWcubworTElCX09CSlMgKz0gY29ubmVjdC5vCitMSUJfT0JKUyArPSBjb25uZWN0ZWQubworTElCX09CSlMgKz0gY29udmVydC5vCitMSUJfT0JKUyArPSBjb3B5Lm8KK0xJQl9PQkpTICs9IGNyZWRlbnRpYWwubworTElCX09CSlMgKz0gY3N1bS1maWxlLm8KK0xJQl9PQkpTICs9IGN0eXBlLm8KK0xJQl9PQkpTICs9IGRhdGUubworTElCX09CSlMgKz0gZGVjb3JhdGUubworTElCX09CSlMgKz0gZGlmZmNvcmUtYnJlYWsubworTElCX09CSlMgKz0gZGlmZmNvcmUtZGVsdGEubworTElCX09CSlMgKz0gZGlmZmNvcmUtb3JkZXIubworTElCX09CSlMgKz0gZGlmZmNvcmUtcGlja2F4ZS5vCitMSUJfT0JKUyArPSBkaWZmY29yZS1yZW5hbWUubworTElCX09CSlMgKz0gZGlmZi1kZWx0YS5vCitMSUJfT0JKUyArPSBkaWZmLWxpYi5vCitMSUJfT0JKUyArPSBkaWZmLW5vLWluZGV4Lm8KK0xJQl9PQkpTICs9IGRpZmYubworTElCX09CSlMgKz0gZGlyLm8KK0xJQl9PQkpTICs9IGVkaXRvci5vCitMSUJfT0JKUyArPSBlbnRyeS5vCitMSUJfT0JKUyArPSBlbnZpcm9ubWVudC5vCitMSUJfT0JKUyArPSBld2FoL2JpdG1hcC5vCitMSUJfT0JKUyArPSBld2FoL2V3YWhfYml0bWFwLm8KK0xJQl9PQkpTICs9IGV3YWgvZXdhaF9pby5vCitMSUJfT0JKUyArPSBld2FoL2V3YWhfcmx3Lm8KK0xJQl9PQkpTICs9IGV4ZWNfY21kLm8KK0xJQl9PQkpTICs9IGZldGNoLXBhY2subworTElCX09CSlMgKz0gZnNjay5vCitMSUJfT0JKUyArPSBnZXR0ZXh0Lm8KK0xJQl9PQkpTICs9IGdwZy1pbnRlcmZhY2UubworTElCX09CSlMgKz0gZ3JhcGgubworTElCX09CSlMgKz0gZ3JlcC5vCitMSUJfT0JKUyArPSBoYXNobWFwLm8KK0xJQl9PQkpTICs9IGhlbHAubworTElCX09CSlMgKz0gaGV4Lm8KK0xJQl9PQkpTICs9IGlkZW50Lm8KK0xJQl9PQkpTICs9IGt3c2V0Lm8KK0xJQl9PQkpTICs9IGxldmVuc2h0ZWluLm8KK0xJQl9PQkpTICs9IGxpbmUtbG9nLm8KK0xJQl9PQkpTICs9IGxpbmUtcmFuZ2UubworTElCX09CSlMgKz0gbGlzdC1vYmplY3RzLm8KK0xJQl9PQkpTICs9IGxsLW1lcmdlLm8KK0xJQl9PQkpTICs9IGxvY2tmaWxlLm8KK0xJQl9PQkpTICs9IGxvZy10cmVlLm8KK0xJQl9PQkpTICs9IG1haWxpbmZvLm8KK0xJQl9PQkpTICs9IG1haWxtYXAubworTElCX09CSlMgKz0gbWF0Y2gtdHJlZXMubworTElCX09CSlMgKz0gbWVyZ2UubworTElCX09CSlMgKz0gbWVyZ2UtYmxvYnMubworTElCX09CSlMgKz0gbWVyZ2UtcmVjdXJzaXZlLm8KK0xJQl9PQkpTICs9IG1lcmdlc29ydC5vCitMSUJfT0JKUyArPSBuYW1lLWhhc2gubworTElCX09CSlMgKz0gbm90ZXMubworTElCX09CSlMgKz0gbm90ZXMtY2FjaGUubworTElCX09CSlMgKz0gbm90ZXMtbWVyZ2UubworTElCX09CSlMgKz0gbm90ZXMtdXRpbHMubworTElCX09CSlMgKz0gb2JqZWN0Lm8KK0xJQl9PQkpTICs9IHBhY2stYml0bWFwLm8KK0xJQl9PQkpTICs9IHBhY2stYml0bWFwLXdyaXRlLm8KK0xJQl9PQkpTICs9IHBhY2stY2hlY2subworTElCX09CSlMgKz0gcGFjay1vYmplY3RzLm8KK0xJQl9PQkpTICs9IHBhY2stcmV2aW5kZXgubworTElCX09CSlMgKz0gcGFjay13cml0ZS5vCitMSUJfT0JKUyArPSBwYWdlci5vCitMSUJfT0JKUyArPSBwYXJzZS1vcHRpb25zLm8KK0xJQl9PQkpTICs9IHBhcnNlLW9wdGlvbnMtY2IubworTElCX09CSlMgKz0gcGF0Y2gtZGVsdGEubworTElCX09CSlMgKz0gcGF0Y2gtaWRzLm8KK0xJQl9PQkpTICs9IHBhdGgubworTElCX09CSlMgKz0gcGF0aHNwZWMubworTElCX09CSlMgKz0gcGt0LWxpbmUubworTElCX09CSlMgKz0gcHJlbG9hZC1pbmRleC5vCitMSUJfT0JKUyArPSBwcmV0dHkubworTElCX09CSlMgKz0gcHJpby1xdWV1ZS5vCitMSUJfT0JKUyArPSBwcm9ncmVzcy5vCitMSUJfT0JKUyArPSBwcm9tcHQubworTElCX09CSlMgKz0gcXVvdGUubworTElCX09CSlMgKz0gcmVhY2hhYmxlLm8KK0xJQl9PQkpTICs9IHJlYWQtY2FjaGUubworTElCX09CSlMgKz0gcmVmbG9nLXdhbGsubworTElCX09CSlMgKz0gcmVmcy5vCitMSUJfT0JKUyArPSByZWYtZmlsdGVyLm8KK0xJQl9PQkpTICs9IHJlbW90ZS5vCitMSUJfT0JKUyArPSByZXBsYWNlX29iamVjdC5vCitMSUJfT0JKUyArPSByZXJlcmUubworTElCX09CSlMgKz0gcmVzb2x2ZS11bmRvLm8KK0xJQl9PQkpTICs9IHJldmlzaW9uLm8KK0xJQl9PQkpTICs9IHJ1bi1jb21tYW5kLm8KK0xJQl9PQkpTICs9IHNlbmQtcGFjay5vCitMSUJfT0JKUyArPSBzZXF1ZW5jZXIubworTElCX09CSlMgKz0gc2VydmVyLWluZm8ubworTElCX09CSlMgKz0gc2V0dXAubworTElCX09CSlMgKz0gc2hhMS1hcnJheS5vCitMSUJfT0JKUyArPSBzaGExLWxvb2t1cC5vCitMSUJfT0JKUyArPSBzaGExX2ZpbGUubworTElCX09CSlMgKz0gc2hhMV9uYW1lLm8KK0xJQl9PQkpTICs9IHNoYWxsb3cubworTElCX09CSlMgKz0gc2lkZWJhbmQubworTElCX09CSlMgKz0gc2lnY2hhaW4ubworTElCX09CSlMgKz0gc3BsaXQtaW5kZXgubworTElCX09CSlMgKz0gc3RyYnVmLm8KK0xJQl9PQkpTICs9IHN0cmVhbWluZy5vCitMSUJfT0JKUyArPSBzdHJpbmctbGlzdC5vCitMSUJfT0JKUyArPSBzdWJtb2R1bGUubworTElCX09CSlMgKz0gc3VibW9kdWxlLWNvbmZpZy5vCitMSUJfT0JKUyArPSBzeW1saW5rcy5vCitMSUJfT0JKUyArPSB0YWcubworTElCX09CSlMgKz0gdGVtcGZpbGUubworTElCX09CSlMgKz0gdHJhY2UubworTElCX09CSlMgKz0gdHJhaWxlci5vCitMSUJfT0JKUyArPSB0cmFuc3BvcnQubworTElCX09CSlMgKz0gdHJhbnNwb3J0LWhlbHBlci5vCitMSUJfT0JKUyArPSB0cmVlLWRpZmYubworTElCX09CSlMgKz0gdHJlZS5vCitMSUJfT0JKUyArPSB0cmVlLXdhbGsubworTElCX09CSlMgKz0gdW5wYWNrLXRyZWVzLm8KK0xJQl9PQkpTICs9IHVybC5vCitMSUJfT0JKUyArPSB1cmxtYXRjaC5vCitMSUJfT0JKUyArPSB1c2FnZS5vCitMSUJfT0JKUyArPSB1c2VyZGlmZi5vCitMSUJfT0JKUyArPSB1dGY4Lm8KK0xJQl9PQkpTICs9IHZhcmludC5vCitMSUJfT0JKUyArPSB2ZXJzaW9uLm8KK0xJQl9PQkpTICs9IHZlcnNpb25jbXAubworTElCX09CSlMgKz0gd2Fsa2VyLm8KK0xJQl9PQkpTICs9IHdpbGRtYXRjaC5vCitMSUJfT0JKUyArPSB3b3JrdHJlZS5vCitMSUJfT0JKUyArPSB3cmFwcGVyLm8KK0xJQl9PQkpTICs9IHdyaXRlX29yX2RpZS5vCitMSUJfT0JKUyArPSB3cy5vCitMSUJfT0JKUyArPSB3dC1zdGF0dXMubworTElCX09CSlMgKz0geGRpZmYtaW50ZXJmYWNlLm8KK0xJQl9PQkpTICs9IHpsaWIubworCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9hZGQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYW0ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYW5ub3RhdGUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYXBwbHkubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYXJjaGl2ZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9ibGFtZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9icmFuY2gubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vYnVuZGxlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NhdC1maWxlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NoZWNrLWF0dHIubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2hlY2staWdub3JlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NoZWNrLW1haWxtYXAubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY2hlY2stcmVmLWZvcm1hdC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jaGVja291dC1pbmRleC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jaGVja291dC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jbGVhbi5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jbG9uZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jb2x1bW4ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY29tbWl0LXRyZWUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vY29tbWl0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NvbmZpZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9jb3VudC1vYmplY3RzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2NyZWRlbnRpYWwubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZGVzY3JpYmUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZGlmZi1maWxlcy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9kaWZmLWluZGV4Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2RpZmYtdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9kaWZmLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2Zhc3QtZXhwb3J0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2ZldGNoLXBhY2subworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZmV0Y2gubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9mb3ItZWFjaC1yZWYubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vZnNjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9nYy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9nZXQtdGFyLWNvbW1pdC1pZC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9ncmVwLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2hhc2gtb2JqZWN0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2hlbHAubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vaW5kZXgtcGFjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9pbml0LWRiLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9sb2cubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbHMtZmlsZXMubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbHMtcmVtb3RlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL2xzLXRyZWUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWFpbGluZm8ubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWFpbHNwbGl0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLWJhc2UubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vbWVyZ2UtZmlsZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tZXJnZS1pbmRleC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tZXJnZS1vdXJzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tZXJnZS10cmVlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21rdGFnLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL21rdHJlZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9tdi5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9uYW1lLXJldi5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9ub3Rlcy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9wYWNrLW9iamVjdHMubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcGFjay1yZWR1bmRhbnQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcGFjay1yZWZzLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3BhdGNoLWlkLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3BydW5lLXBhY2tlZC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9wcnVuZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9wdWxsLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3B1c2gubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVhZC10cmVlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlY2VpdmUtcGFjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZWZsb2cubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVtb3RlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlbW90ZS1leHQubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmVtb3RlLWZkLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlcGFjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZXBsYWNlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JlcmVyZS5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZXNldC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZXYtbGlzdC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9yZXYtcGFyc2UubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vcmV2ZXJ0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3JtLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3NlbmQtcGFjay5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9zaG9ydGxvZy5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9zaG93LWJyYW5jaC5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9zaG93LXJlZi5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi9zdHJpcHNwYWNlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3N5bWJvbGljLXJlZi5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi90YWcubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdW5wYWNrLWZpbGUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdXBkYXRlLWluZGV4Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3VwZGF0ZS1yZWYubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3VwbG9hZC1hcmNoaXZlLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3Zhci5vCitCVUlMVElOX09CSlMgKz0gYnVpbHRpbi92ZXJpZnktY29tbWl0Lm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3ZlcmlmeS1wYWNrLm8KK0JVSUxUSU5fT0JKUyArPSBidWlsdGluL3ZlcmlmeS10YWcubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vd29ya3RyZWUubworQlVJTFRJTl9PQkpTICs9IGJ1aWx0aW4vd3JpdGUtdHJlZS5vCisKK0dJVExJQlMgPSAkKExJQl9GSUxFKSAkKFhESUZGX0xJQikKK0VYVExJQlMgPQorCitHSVRfVVNFUl9BR0VOVCA9IGdpdC8kKEdJVF9WRVJTSU9OKQorCitpbmNsdWRlIGNvbmZpZy5tYWsudW5hbWUKKy1pbmNsdWRlIGNvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgY29uZmlnLm1haworCitpZm5kZWYgc3lzY29uZmRpcgoraWZlcSAoJChwcmVmaXgpLC91c3IpCitzeXNjb25mZGlyID0gL2V0YwogZWxzZQotCU1TR0ZNVCA/PSBtc2dmbXQKLQlpZm5lcSAoJChzaGVsbCAkKE1TR0ZNVCkgLS10Y2wgLWwgQyAtZCAuIC9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgZWNobyAkJD8pLDApCi0JCU1TR0ZNVCA6PSAkKFRDTF9QQVRIKSBwby9wbzJtc2cuc2gKK3N5c2NvbmZkaXIgPSBldGMKK2VuZGlmCitlbmRpZgorCitpZm5kZWYgQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTCitDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMgPSBhdXRvCitlbmRpZgorCitpZmVxICgkKENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUyksYXV0bykKK2RlcF9jaGVjayA9ICQoc2hlbGwgJChDQykgJChBTExfQ0ZMQUdTKSBcCisJLWMgLU1GIC9kZXYvbnVsbCAtTVEgL2Rldi9udWxsIC1NTUQgLU1QIFwKKwkteCBjIC9kZXYvbnVsbCAtbyAvZGV2L251bGwgMj4mMTsgXAorCWVjaG8gJCQ/KQoraWZlcSAoJChkZXBfY2hlY2spLDApCitvdmVycmlkZSBDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMgPSB5ZXMKK2Vsc2UKK292ZXJyaWRlIENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUyA9IG5vCitlbmRpZgorZW5kaWYKKworaWZlcSAoJChDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMpLHllcykKK1VTRV9DT01QVVRFRF9IRUFERVJfREVQRU5ERU5DSUVTID0gWWVzUGxlYXNlCitlbHNlCitpZm5lcSAoJChDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMpLG5vKQorJChlcnJvciBwbGVhc2Ugc2V0IENPTVBVVEVfSEVBREVSX0RFUEVOREVOQ0lFUyB0byB5ZXMsIG5vLCBvciBhdXRvIFwKKyhub3QgIiQoQ09NUFVURV9IRUFERVJfREVQRU5ERU5DSUVTKSIpKQorZW5kaWYKK2VuZGlmCisKK2lmZGVmIFNBTkVfVE9PTF9QQVRICitTQU5FX1RPT0xfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0FORV9UT09MX1BBVEgpKQorQlJPS0VOX1BBVEhfRklYID0gJ3N8XlwjIEBAQlJPS0VOX1BBVEhfRklYQEAkJHxnaXRfYnJva2VuX3BhdGhfZml4ICQoU0FORV9UT09MX1BBVEhfU1EpfCcKK1BBVEggOj0gJChTQU5FX1RPT0xfUEFUSCk6JHtQQVRIfQorZWxzZQorQlJPS0VOX1BBVEhfRklYID0gJy9eXCMgQEBCUk9LRU5fUEFUSF9GSVhAQCQkL2QnCitlbmRpZgorCitpZm5lcSAoLCQoSU5MSU5FKSkKKwlCQVNJQ19DRkxBR1MgKz0gLURpbmxpbmU9JChJTkxJTkUpCitlbmRpZgorCitpZm5lcSAoLCQoU09DS0xFTl9UKSkKKwlCQVNJQ19DRkxBR1MgKz0gLURzb2NrbGVuX3Q9JChTT0NLTEVOX1QpCitlbmRpZgorCitpZmVxICh5ZXMsJChVU0VfUEFSRU5TX0FST1VORF9HRVRURVhUX04pKQorCUJBU0lDX0NGTEFHUyArPSAtRFVTRV9QQVJFTlNfQVJPVU5EX0dFVFRFWFRfTj0xCitlbHNlCitpZmVxIChubywkKFVTRV9QQVJFTlNfQVJPVU5EX0dFVFRFWFRfTikpCisJQkFTSUNfQ0ZMQUdTICs9IC1EVVNFX1BBUkVOU19BUk9VTkRfR0VUVEVYVF9OPTAKK2VuZGlmCitlbmRpZgorCitpZmVxICgkKHVuYW1lX1MpLERhcndpbikKKwlpZm5kZWYgTk9fRklOSworCQlpZmVxICgkKHNoZWxsIHRlc3QgLWQgL3N3L2xpYiAmJiBlY2hvIHkpLHkpCisJCQlCQVNJQ19DRkxBR1MgKz0gLUkvc3cvaW5jbHVkZQorCQkJQkFTSUNfTERGTEFHUyArPSAtTC9zdy9saWIKKwkJZW5kaWYKKwllbmRpZgorCWlmbmRlZiBOT19EQVJXSU5fUE9SVFMKKwkJaWZlcSAoJChzaGVsbCB0ZXN0IC1kIC9vcHQvbG9jYWwvbGliICYmIGVjaG8geSkseSkKKwkJCUJBU0lDX0NGTEFHUyArPSAtSS9vcHQvbG9jYWwvaW5jbHVkZQorCQkJQkFTSUNfTERGTEFHUyArPSAtTC9vcHQvbG9jYWwvbGliCisJCWVuZGlmCisJZW5kaWYKKwlpZm5kZWYgTk9fQVBQTEVfQ09NTU9OX0NSWVBUTworCQlBUFBMRV9DT01NT05fQ1JZUFRPID0gWWVzUGxlYXNlCisJCUNPTVBBVF9DRkxBR1MgKz0gLURBUFBMRV9DT01NT05fQ1JZUFRPCisJZW5kaWYKKwlOT19SRUdFWCA9IFllc1BsZWFzZQorCVBUSFJFQURfTElCUyA9CitlbmRpZgorCitpZm5kZWYgQ0NfTERfRFlOUEFUSAorCWlmZGVmIE5PX1JfVE9fR0NDX0xJTktFUgorCQkjIFNvbWUgZ2NjIGRvZXMgbm90IGFjY2VwdCBhbmQgcGFzcyAtUiB0byB0aGUgbGlua2VyIHRvIHNwZWNpZnkKKwkJIyB0aGUgcnVudGltZSBkeW5hbWljIGxpYnJhcnkgcGF0aC4KKwkJQ0NfTERfRFlOUEFUSCA9IC1XbCwtcnBhdGgsCisJZWxzZQorCQlDQ19MRF9EWU5QQVRIID0gLVIKIAllbmRpZgogZW5kaWYKIAotUE9fVEVNUExBVEUgPSBwby9naXRrLnBvdAotQUxMX1BPRklMRVMgPSAkKHdpbGRjYXJkIHBvLyoucG8pCi1BTExfTVNHRklMRVMgPSAkKHN1YnN0IC5wbywubXNnLCQoQUxMX1BPRklMRVMpKQotCi1pZm5kZWYgVgotCVFVSUVUICAgICAgICAgID0gQAotCVFVSUVUX0dFTiAgICAgID0gJChRVUlFVCllY2hvICcgICAnIEdFTiAkQCAmJgoraWZkZWYgTk9fTElCR0VOX0gKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTElCR0VOX0gKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvYmFzZW5hbWUubwogZW5kaWYKIAotYWxsOjogZ2l0ay13aXNoICQoQUxMX01TR0ZJTEVTKQoraWZkZWYgVVNFX0xJQlBDUkUKKwlCQVNJQ19DRkxBR1MgKz0gLURVU0VfTElCUENSRQorCWlmZGVmIExJQlBDUkVESVIKKwkJQkFTSUNfQ0ZMQUdTICs9IC1JJChMSUJQQ1JFRElSKS9pbmNsdWRlCisJCUVYVExJQlMgKz0gLUwkKExJQlBDUkVESVIpLyQobGliKSAkKENDX0xEX0RZTlBBVEgpJChMSUJQQ1JFRElSKS8kKGxpYikKKwllbmRpZgorCUVYVExJQlMgKz0gLWxwY3JlCitlbmRpZgogCi1pbnN0YWxsOjogYWxsCi0JJChJTlNUQUxMKSAtbSA3NTUgZ2l0ay13aXNoICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJy9naXRrCi0JJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJwotCSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChJTlNUQUxMKSAtbSA2NDQgJHAgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAmJikgdHJ1ZQoraWZkZWYgSEFWRV9BTExPQ0FfSAorCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfQUxMT0NBX0gKK2VuZGlmCiAKLXVuaW5zdGFsbDo6Ci0JJChmb3JlYWNoIHAsJChBTExfTVNHRklMRVMpLCAkKFJNKSAnJChERVNURElSX1NRKSQobXNnc2Rpcl9TUSknLyQobm90ZGlyICRwKSAmJikgdHJ1ZQotCSQoUk0pICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJy9naXRrCitJTUFQX1NFTkRfQlVJTERERVBTID0KK0lNQVBfU0VORF9MREZMQUdTID0KIAotY2xlYW46OgotCSQoUk0pIGdpdGstd2lzaCBwby8qLm1zZyBHSVQtVENMVEstVkFSUworaWZkZWYgTk9fQ1VSTAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0NVUkwKKwlSRU1PVEVfQ1VSTF9QUklNQVJZID0KKwlSRU1PVEVfQ1VSTF9BTElBU0VTID0KKwlSRU1PVEVfQ1VSTF9OQU1FUyA9CitlbHNlCisJaWZkZWYgQ1VSTERJUgorCQkjIFRyeSAiLVdsLC1ycGF0aD0kKENVUkxESVIpLyQobGliKSIgaW4gc3VjaCBhIGNhc2UuCisJCUJBU0lDX0NGTEFHUyArPSAtSSQoQ1VSTERJUikvaW5jbHVkZQorCQlDVVJMX0xJQkNVUkwgPSAtTCQoQ1VSTERJUikvJChsaWIpICQoQ0NfTERfRFlOUEFUSCkkKENVUkxESVIpLyQobGliKSAtbGN1cmwKKwllbHNlCisJCUNVUkxfTElCQ1VSTCA9IC1sY3VybAorCWVuZGlmCisJaWZkZWYgTkVFRFNfU1NMX1dJVEhfQ1VSTAorCQlDVVJMX0xJQkNVUkwgKz0gLWxzc2wKKwkJaWZkZWYgTkVFRFNfQ1JZUFRPX1dJVEhfU1NMCisJCQlDVVJMX0xJQkNVUkwgKz0gLWxjcnlwdG8KKwkJZW5kaWYKKwllbmRpZgorCWlmZGVmIE5FRURTX0lETl9XSVRIX0NVUkwKKwkJQ1VSTF9MSUJDVVJMICs9IC1saWRuCisJZW5kaWYKIAotZ2l0ay13aXNoOiBnaXRrIEdJVC1UQ0xUSy1WQVJTCi0JJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKLQlzZWQgLWUgJzEsM3N8XmV4ZWMgLiogIiQkMCJ8ZXhlYyAkKHN1YnN0IHwsJ1x8JywkKFRDTFRLX1BBVEhfU1EpKSAiJCQwInwnIDxnaXRrID4kQCsgJiYgXAorCVJFTU9URV9DVVJMX1BSSU1BUlkgPSBnaXQtcmVtb3RlLWh0dHAkWAorCVJFTU9URV9DVVJMX0FMSUFTRVMgPSBnaXQtcmVtb3RlLWh0dHBzJFggZ2l0LXJlbW90ZS1mdHAkWCBnaXQtcmVtb3RlLWZ0cHMkWAorCVJFTU9URV9DVVJMX05BTUVTID0gJChSRU1PVEVfQ1VSTF9QUklNQVJZKSAkKFJFTU9URV9DVVJMX0FMSUFTRVMpCisJUFJPR1JBTV9PQkpTICs9IGh0dHAtZmV0Y2gubworCVBST0dSQU1TICs9ICQoUkVNT1RFX0NVUkxfTkFNRVMpCisJY3VybF9jaGVjayA6PSAkKHNoZWxsIChlY2hvIDA3MDkwODsgJChDVVJMX0NPTkZJRykgLS12ZXJudW0gfCBzZWQgLWUgJy9eNzBbQkNdL3MvXi8wLycpIDI+L2Rldi9udWxsIHwgc29ydCAtciB8IHNlZCAtbmUgMnApCisJaWZlcSAiJChjdXJsX2NoZWNrKSIgIjA3MDkwOCIKKwkJaWZuZGVmIE5PX0VYUEFUCisJCQlQUk9HUkFNX09CSlMgKz0gaHR0cC1wdXNoLm8KKwkJZW5kaWYKKwllbmRpZgorCWN1cmxfY2hlY2sgOj0gJChzaGVsbCAoZWNobyAwNzIyMDA7ICQoQ1VSTF9DT05GSUcpIC0tdmVybnVtIHwgc2VkIC1lICcvXjcwW0JDXS9zL14vMC8nKSAyPi9kZXYvbnVsbCB8IHNvcnQgLXIgfCBzZWQgLW5lIDJwKQorCWlmZXEgIiQoY3VybF9jaGVjaykiICIwNzIyMDAiCisJCVVTRV9DVVJMX0ZPUl9JTUFQX1NFTkQgPSBZZXNQbGVhc2UKKwllbmRpZgorCWlmZGVmIFVTRV9DVVJMX0ZPUl9JTUFQX1NFTkQKKwkJQkFTSUNfQ0ZMQUdTICs9IC1EVVNFX0NVUkxfRk9SX0lNQVBfU0VORAorCQlJTUFQX1NFTkRfQlVJTERERVBTID0gaHR0cC5vCisJCUlNQVBfU0VORF9MREZMQUdTICs9ICQoQ1VSTF9MSUJDVVJMKQorCWVuZGlmCisJaWZuZGVmIE5PX0VYUEFUCisJCWlmZGVmIEVYUEFURElSCisJCQlCQVNJQ19DRkxBR1MgKz0gLUkkKEVYUEFURElSKS9pbmNsdWRlCisJCQlFWFBBVF9MSUJFWFBBVCA9IC1MJChFWFBBVERJUikvJChsaWIpICQoQ0NfTERfRFlOUEFUSCkkKEVYUEFURElSKS8kKGxpYikgLWxleHBhdAorCQllbHNlCisJCQlFWFBBVF9MSUJFWFBBVCA9IC1sZXhwYXQKKwkJZW5kaWYKKwkJaWZkZWYgRVhQQVRfTkVFRFNfWE1MUEFSU0VfSAorCQkJQkFTSUNfQ0ZMQUdTICs9IC1ERVhQQVRfTkVFRFNfWE1MUEFSU0VfSAorCQllbmRpZgorCWVuZGlmCitlbmRpZgorSU1BUF9TRU5EX0xERkxBR1MgKz0gJChPUEVOU1NMX0xJTkspICQoT1BFTlNTTF9MSUJTU0wpICQoTElCXzRfQ1JZUFRPKQorCitpZmRlZiBaTElCX1BBVEgKKwlCQVNJQ19DRkxBR1MgKz0gLUkkKFpMSUJfUEFUSCkvaW5jbHVkZQorCUVYVExJQlMgKz0gLUwkKFpMSUJfUEFUSCkvJChsaWIpICQoQ0NfTERfRFlOUEFUSCkkKFpMSUJfUEFUSCkvJChsaWIpCitlbmRpZgorRVhUTElCUyArPSAtbHoKKworaWZuZGVmIE5PX09QRU5TU0wKKwlPUEVOU1NMX0xJQlNTTCA9IC1sc3NsCisJaWZkZWYgT1BFTlNTTERJUgorCQlCQVNJQ19DRkxBR1MgKz0gLUkkKE9QRU5TU0xESVIpL2luY2x1ZGUKKwkJT1BFTlNTTF9MSU5LID0gLUwkKE9QRU5TU0xESVIpLyQobGliKSAkKENDX0xEX0RZTlBBVEgpJChPUEVOU1NMRElSKS8kKGxpYikKKwllbHNlCisJCU9QRU5TU0xfTElOSyA9CisJZW5kaWYKKwlpZmRlZiBORUVEU19DUllQVE9fV0lUSF9TU0wKKwkJT1BFTlNTTF9MSUJTU0wgKz0gLWxjcnlwdG8KKwllbmRpZgorCWlmZGVmIE5PX0hNQUNfQ1RYX0NMRUFOVVAKKwkJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fSE1BQ19DVFhfQ0xFQU5VUAorCWVuZGlmCitlbHNlCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fT1BFTlNTTAorCUJMS19TSEExID0gMQorCU9QRU5TU0xfTElCU1NMID0KK2VuZGlmCitpZmRlZiBOT19PUEVOU1NMCisJTElCXzRfQ1JZUFRPID0KK2Vsc2UKK2lmZGVmIE5FRURTX1NTTF9XSVRIX0NSWVBUTworCUxJQl80X0NSWVBUTyA9ICQoT1BFTlNTTF9MSU5LKSAtbGNyeXB0byAtbHNzbAorZWxzZQorCUxJQl80X0NSWVBUTyA9ICQoT1BFTlNTTF9MSU5LKSAtbGNyeXB0bworZW5kaWYKK2lmZGVmIEFQUExFX0NPTU1PTl9DUllQVE8KKwlMSUJfNF9DUllQVE8gKz0gLWZyYW1ld29yayBTZWN1cml0eSAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uCitlbmRpZgorZW5kaWYKK2lmZGVmIE5FRURTX0xJQklDT05WCisJaWZkZWYgSUNPTlZESVIKKwkJQkFTSUNfQ0ZMQUdTICs9IC1JJChJQ09OVkRJUikvaW5jbHVkZQorCQlJQ09OVl9MSU5LID0gLUwkKElDT05WRElSKS8kKGxpYikgJChDQ19MRF9EWU5QQVRIKSQoSUNPTlZESVIpLyQobGliKQorCWVsc2UKKwkJSUNPTlZfTElOSyA9CisJZW5kaWYKKwlpZmRlZiBORUVEU19MSUJJTlRMX0JFRk9SRV9MSUJJQ09OVgorCQlJQ09OVl9MSU5LICs9IC1saW50bAorCWVuZGlmCisJRVhUTElCUyArPSAkKElDT05WX0xJTkspIC1saWNvbnYKK2VuZGlmCitpZmRlZiBORUVEU19MSUJHRU4KKwlFWFRMSUJTICs9IC1sZ2VuCitlbmRpZgoraWZuZGVmIE5PX0dFVFRFWFQKK2lmbmRlZiBMSUJDX0NPTlRBSU5TX0xJQklOVEwKKwlFWFRMSUJTICs9IC1saW50bAorZW5kaWYKK2VuZGlmCitpZmRlZiBORUVEU19TT0NLRVQKKwlFWFRMSUJTICs9IC1sc29ja2V0CitlbmRpZgoraWZkZWYgTkVFRFNfTlNMCisJRVhUTElCUyArPSAtbG5zbAorZW5kaWYKK2lmZGVmIE5FRURTX1JFU09MVgorCUVYVExJQlMgKz0gLWxyZXNvbHYKK2VuZGlmCitpZmRlZiBOT19EX1RZUEVfSU5fRElSRU5UCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fRF9UWVBFX0lOX0RJUkVOVAorZW5kaWYKK2lmZGVmIE5PX0dFQ09TX0lOX1BXRU5UCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fR0VDT1NfSU5fUFdFTlQKK2VuZGlmCitpZmRlZiBOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQKK2VuZGlmCitpZmRlZiBVU0VfTlNFQworCUJBU0lDX0NGTEFHUyArPSAtRFVTRV9OU0VDCitlbmRpZgoraWZkZWYgVVNFX1NUX1RJTUVTUEVDCisJQkFTSUNfQ0ZMQUdTICs9IC1EVVNFX1NUX1RJTUVTUEVDCitlbmRpZgoraWZkZWYgTk9fTk9SRVRVUk4KKwlCQVNJQ19DRkxBR1MgKz0gLUROT19OT1JFVFVSTgorZW5kaWYKK2lmZGVmIE5PX05TRUMKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19OU0VDCitlbmRpZgoraWZkZWYgU05QUklOVEZfUkVUVVJOU19CT0dVUworCUNPTVBBVF9DRkxBR1MgKz0gLURTTlBSSU5URl9SRVRVUk5TX0JPR1VTCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3NucHJpbnRmLm8KK2VuZGlmCitpZmRlZiBGUkVBRF9SRUFEU19ESVJFQ1RPUklFUworCUNPTVBBVF9DRkxBR1MgKz0gLURGUkVBRF9SRUFEU19ESVJFQ1RPUklFUworCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9mb3Blbi5vCitlbmRpZgoraWZkZWYgTk9fU1lNTElOS19IRUFECisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fU1lNTElOS19IRUFECitlbmRpZgoraWZkZWYgR0VUVEVYVF9QT0lTT04KKwlCQVNJQ19DRkxBR1MgKz0gLURHRVRURVhUX1BPSVNPTgorZW5kaWYKK2lmZGVmIE5PX0dFVFRFWFQKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19HRVRURVhUCisJVVNFX0dFVFRFWFRfU0NIRU1FID89IGZhbGx0aHJvdWdoCitlbmRpZgoraWZkZWYgTk9fUE9MTAorCU5PX1NZU19QT0xMX0ggPSBZZXNQbGVhc2UKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fUE9MTCAtSWNvbXBhdC9wb2xsCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3BvbGwvcG9sbC5vCitlbmRpZgoraWZkZWYgTk9fU1RSQ0FTRVNUUgorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19TVFJDQVNFU1RSCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3N0cmNhc2VzdHIubworZW5kaWYKK2lmZGVmIE5PX1NUUkxDUFkKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fU1RSTENQWQorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9zdHJsY3B5Lm8KK2VuZGlmCitpZmRlZiBOT19TVFJUT1VNQVgKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fU1RSVE9VTUFYCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3N0cnRvdW1heC5vIGNvbXBhdC9zdHJ0b2ltYXgubworZW5kaWYKK2lmZGVmIE5PX1NUUlRPVUxMCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1NUUlRPVUxMCitlbmRpZgoraWZkZWYgTk9fU0VURU5WCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1NFVEVOVgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9zZXRlbnYubworZW5kaWYKK2lmZGVmIE5PX01LRFRFTVAKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTUtEVEVNUAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9ta2R0ZW1wLm8KK2VuZGlmCitpZmRlZiBNS0RJUl9XT19UUkFJTElOR19TTEFTSAorCUNPTVBBVF9DRkxBR1MgKz0gLURNS0RJUl9XT19UUkFJTElOR19TTEFTSAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9ta2Rpci5vCitlbmRpZgoraWZkZWYgTk9fTUtTVEVNUFMKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTUtTVEVNUFMKK2VuZGlmCitpZmRlZiBOT19VTlNFVEVOVgorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19VTlNFVEVOVgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC91bnNldGVudi5vCitlbmRpZgoraWZkZWYgTk9fU1lTX1NFTEVDVF9ICisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fU1lTX1NFTEVDVF9ICitlbmRpZgoraWZkZWYgTk9fU1lTX1BPTExfSAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX1NZU19QT0xMX0gKK2VuZGlmCitpZmRlZiBORUVEU19TWVNfUEFSQU1fSAorCUJBU0lDX0NGTEFHUyArPSAtRE5FRURTX1NZU19QQVJBTV9ICitlbmRpZgoraWZkZWYgTk9fSU5UVFlQRVNfSAorCUJBU0lDX0NGTEFHUyArPSAtRE5PX0lOVFRZUEVTX0gKK2VuZGlmCitpZmRlZiBOT19JTklUR1JPVVBTCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fSU5JVEdST1VQUworZW5kaWYKK2lmZGVmIE5PX01NQVAKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fTU1BUAorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9tbWFwLm8KK2Vsc2UKKwlpZmRlZiBVU0VfV0lOMzJfTU1BUAorCQlDT01QQVRfQ0ZMQUdTICs9IC1EVVNFX1dJTjMyX01NQVAKKwkJQ09NUEFUX09CSlMgKz0gY29tcGF0L3dpbjMybW1hcC5vCisJZW5kaWYKK2VuZGlmCitpZmRlZiBPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTCisJQ09NUEFUX0NGTEFHUyArPSAtRE9CSkVDVF9DUkVBVElPTl9NT0RFPTEKK2VuZGlmCitpZmRlZiBOT19TVFJVQ1RfSVRJTUVSVkFMCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX1NUUlVDVF9JVElNRVJWQUwKKwlOT19TRVRJVElNRVIgPSBZZXNQbGVhc2UKK2VuZGlmCitpZmRlZiBOT19TRVRJVElNRVIKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fU0VUSVRJTUVSCitlbmRpZgoraWZkZWYgTk9fUFJFQUQKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fUFJFQUQKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvcHJlYWQubworZW5kaWYKK2lmZGVmIE5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19GQVNUX1dPUktJTkdfRElSRUNUT1JZCitlbmRpZgoraWZkZWYgTk9fVFJVU1RBQkxFX0ZJTEVNT0RFCisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fVFJVU1RBQkxFX0ZJTEVNT0RFCitlbmRpZgoraWZkZWYgTkVFRFNfTU9ERV9UUkFOU0xBVElPTgorCUNPTVBBVF9DRkxBR1MgKz0gLURORUVEU19NT0RFX1RSQU5TTEFUSU9OCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3N0YXQubworZW5kaWYKK2lmZGVmIE5PX0lQVjYKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19JUFY2CitlbmRpZgoraWZkZWYgTk9fSU5UUFRSX1QKKwlDT01QQVRfQ0ZMQUdTICs9IC1ETk9fSU5UUFRSX1QKK2VuZGlmCitpZmRlZiBOT19VSU5UTUFYX1QKKwlCQVNJQ19DRkxBR1MgKz0gLUR1aW50bWF4X3Q9dWludDMyX3QKK2VuZGlmCitpZmRlZiBOT19TT0NLQUREUl9TVE9SQUdFCitpZmRlZiBOT19JUFY2CisJQkFTSUNfQ0ZMQUdTICs9IC1Ec29ja2FkZHJfc3RvcmFnZT1zb2NrYWRkcl9pbgorZWxzZQorCUJBU0lDX0NGTEFHUyArPSAtRHNvY2thZGRyX3N0b3JhZ2U9c29ja2FkZHJfaW42CitlbmRpZgorZW5kaWYKK2lmZGVmIE5PX0lORVRfTlRPUAorCUxJQl9PQkpTICs9IGNvbXBhdC9pbmV0X250b3AubworCUJBU0lDX0NGTEFHUyArPSAtRE5PX0lORVRfTlRPUAorZW5kaWYKK2lmZGVmIE5PX0lORVRfUFRPTgorCUxJQl9PQkpTICs9IGNvbXBhdC9pbmV0X3B0b24ubworCUJBU0lDX0NGTEFHUyArPSAtRE5PX0lORVRfUFRPTgorZW5kaWYKK2lmbmRlZiBOT19VTklYX1NPQ0tFVFMKKwlMSUJfT0JKUyArPSB1bml4LXNvY2tldC5vCisJUFJPR1JBTV9PQkpTICs9IGNyZWRlbnRpYWwtY2FjaGUubworCVBST0dSQU1fT0JKUyArPSBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24ubworZW5kaWYKKworaWZkZWYgTk9fSUNPTlYKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19JQ09OVgorZW5kaWYKKworaWZkZWYgT0xEX0lDT05WCisJQkFTSUNfQ0ZMQUdTICs9IC1ET0xEX0lDT05WCitlbmRpZgorCitpZmRlZiBOT19ERUZMQVRFX0JPVU5ECisJQkFTSUNfQ0ZMQUdTICs9IC1ETk9fREVGTEFURV9CT1VORAorZW5kaWYKKworaWZkZWYgTk9fUE9TSVhfR09PRElFUworCUJBU0lDX0NGTEFHUyArPSAtRE5PX1BPU0lYX0dPT0RJRVMKK2VuZGlmCisKK2lmZGVmIEJMS19TSEExCisJU0hBMV9IRUFERVIgPSAiYmxvY2stc2hhMS9zaGExLmgiCisJTElCX09CSlMgKz0gYmxvY2stc2hhMS9zaGExLm8KK2Vsc2UKK2lmZGVmIFBQQ19TSEExCisJU0hBMV9IRUFERVIgPSAicHBjL3NoYTEuaCIKKwlMSUJfT0JKUyArPSBwcGMvc2hhMS5vIHBwYy9zaGExcHBjLm8KK2Vsc2UKK2lmZGVmIEFQUExFX0NPTU1PTl9DUllQVE8KKwlDT01QQVRfQ0ZMQUdTICs9IC1EQ09NTU9OX0RJR0VTVF9GT1JfT1BFTlNTTAorCVNIQTFfSEVBREVSID0gPENvbW1vbkNyeXB0by9Db21tb25EaWdlc3QuaD4KK2Vsc2UKKwlTSEExX0hFQURFUiA9IDxvcGVuc3NsL3NoYS5oPgorCUVYVExJQlMgKz0gJChMSUJfNF9DUllQVE8pCitlbmRpZgorZW5kaWYKK2VuZGlmCisKK2lmZGVmIE5PX1BFUkxfTUFLRU1BS0VSCisJZXhwb3J0IE5PX1BFUkxfTUFLRU1BS0VSCitlbmRpZgoraWZkZWYgTk9fSFNUUkVSUk9SCisJQ09NUEFUX0NGTEFHUyArPSAtRE5PX0hTVFJFUlJPUgorCUNPTVBBVF9PQkpTICs9IGNvbXBhdC9oc3RyZXJyb3IubworZW5kaWYKK2lmZGVmIE5PX01FTU1FTQorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19NRU1NRU0KKwlDT01QQVRfT0JKUyArPSBjb21wYXQvbWVtbWVtLm8KK2VuZGlmCitpZmRlZiBOT19HRVRQQUdFU0laRQorCUNPTVBBVF9DRkxBR1MgKz0gLUROT19HRVRQQUdFU0laRQorZW5kaWYKK2lmZGVmIElOVEVSTkFMX1FTT1JUCisJQ09NUEFUX0NGTEFHUyArPSAtRElOVEVSTkFMX1FTT1JUCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3Fzb3J0Lm8KK2VuZGlmCitpZmRlZiBSVU5USU1FX1BSRUZJWAorCUNPTVBBVF9DRkxBR1MgKz0gLURSVU5USU1FX1BSRUZJWAorZW5kaWYKKworaWZkZWYgTk9fUFRIUkVBRFMKKwlCQVNJQ19DRkxBR1MgKz0gLUROT19QVEhSRUFEUworZWxzZQorCUJBU0lDX0NGTEFHUyArPSAkKFBUSFJFQURfQ0ZMQUdTKQorCUVYVExJQlMgKz0gJChQVEhSRUFEX0xJQlMpCisJTElCX09CSlMgKz0gdGhyZWFkLXV0aWxzLm8KK2VuZGlmCisKK2lmZGVmIEhBVkVfUEFUSFNfSAorCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfUEFUSFNfSAorZW5kaWYKKworaWZkZWYgSEFWRV9MSUJDSEFSU0VUX0gKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0xJQkNIQVJTRVRfSAorCUVYVExJQlMgKz0gJChDSEFSU0VUX0xJQikKK2VuZGlmCisKK2lmZGVmIEhBVkVfU1RSSU5HU19ICisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9TVFJJTkdTX0gKK2VuZGlmCisKK2lmZGVmIEhBVkVfREVWX1RUWQorCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfREVWX1RUWQorZW5kaWYKKworaWZkZWYgRElSX0hBU19CU0RfR1JPVVBfU0VNQU5USUNTCisJQ09NUEFUX0NGTEFHUyArPSAtRERJUl9IQVNfQlNEX0dST1VQX1NFTUFOVElDUworZW5kaWYKK2lmZGVmIFVOUkVMSUFCTEVfRlNUQVQKKwlCQVNJQ19DRkxBR1MgKz0gLURVTlJFTElBQkxFX0ZTVEFUCitlbmRpZgoraWZkZWYgTk9fUkVHRVgKKwlDT01QQVRfQ0ZMQUdTICs9IC1JY29tcGF0L3JlZ2V4CisJQ09NUEFUX09CSlMgKz0gY29tcGF0L3JlZ2V4L3JlZ2V4Lm8KK2VuZGlmCitpZmRlZiBOQVRJVkVfQ1JMRgorCUJBU0lDX0NGTEFHUyArPSAtRE5BVElWRV9DUkxGCitlbmRpZgorCitpZmRlZiBVU0VfTkVEX0FMTE9DQVRPUgorICAgICAgIENPTVBBVF9DRkxBR1MgKz0gLUljb21wYXQvbmVkbWFsbG9jCisgICAgICAgQ09NUEFUX09CSlMgKz0gY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MubworZW5kaWYKKworaWZkZWYgR0lUX1RFU1RfQ01QX1VTRV9DT1BJRURfQ09OVEVYVAorCWV4cG9ydCBHSVRfVEVTVF9DTVBfVVNFX0NPUElFRF9DT05URVhUCitlbmRpZgorCitpZm5kZWYgTk9fTVNHRk1UX0VYVEVOREVEX09QVElPTlMKKwlNU0dGTVQgKz0gLS1jaGVjayAtLXN0YXRpc3RpY3MKK2VuZGlmCisKK2lmbmVxICgsJChYRExfRkFTVF9IQVNIKSkKKwlCQVNJQ19DRkxBR1MgKz0gLURYRExfRkFTVF9IQVNICitlbmRpZgorCitpZmRlZiBHTVRJTUVfVU5SRUxJQUJMRV9FUlJPUlMKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvZ210aW1lLm8KKwlCQVNJQ19DRkxBR1MgKz0gLURHTVRJTUVfVU5SRUxJQUJMRV9FUlJPUlMKK2VuZGlmCisKK2lmZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQorCUJBU0lDX0NGTEFHUyArPSAtREhBVkVfQ0xPQ0tfR0VUVElNRQorCUVYVExJQlMgKz0gLWxydAorZW5kaWYKKworaWZkZWYgSEFWRV9DTE9DS19NT05PVE9OSUMKKwlCQVNJQ19DRkxBR1MgKz0gLURIQVZFX0NMT0NLX01PTk9UT05JQworZW5kaWYKKworaWZkZWYgSEFWRV9CU0RfU1lTQ1RMCisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9CU0RfU1lTQ1RMCitlbmRpZgorCitpZmRlZiBIQVZFX0dFVERFTElNCisJQkFTSUNfQ0ZMQUdTICs9IC1ESEFWRV9HRVRERUxJTQorZW5kaWYKKworaWZlcSAoJChUQ0xUS19QQVRIKSwpCitOT19UQ0xUSyA9IE5vVGhhbmtzCitlbmRpZgorCitpZmVxICgkKFBFUkxfUEFUSCksKQorTk9fUEVSTCA9IE5vVGhhbmtzCitlbmRpZgorCitpZmVxICgkKFBZVEhPTl9QQVRIKSwpCitOT19QWVRIT04gPSBOb1RoYW5rcworZW5kaWYKKworUVVJRVRfU1VCRElSMCAgPSArJChNQUtFKSAtQyAjIHNwYWNlIHRvIHNlcGFyYXRlIC1DIGFuZCBzdWJkaXIKK1FVSUVUX1NVQkRJUjEgID0KKworaWZuZXEgKCQoZmluZHN0cmluZyB3LCQoTUFLRUZMQUdTKSksdykKK1BSSU5UX0RJUiA9IC0tbm8tcHJpbnQtZGlyZWN0b3J5CitlbHNlICMgIm1ha2UgLXciCitOT19TVUJESVIgPSA6CitlbmRpZgorCitpZm5lcSAoJChmaW5kc3RyaW5nIHMsJChNQUtFRkxBR1MpKSxzKQoraWZuZGVmIFYKKwlRVUlFVF9DQyAgICAgICA9IEBlY2hvICcgICAnIENDICRAOworCVFVSUVUX0FSICAgICAgID0gQGVjaG8gJyAgICcgQVIgJEA7CisJUVVJRVRfTElOSyAgICAgPSBAZWNobyAnICAgJyBMSU5LICRAOworCVFVSUVUX0JVSUxUX0lOID0gQGVjaG8gJyAgICcgQlVJTFRJTiAkQDsKKwlRVUlFVF9HRU4gICAgICA9IEBlY2hvICcgICAnIEdFTiAkQDsKKwlRVUlFVF9MTkNQICAgICA9IEBlY2hvICcgICAnIExOL0NQICRAOworCVFVSUVUX1hHRVRURVhUID0gQGVjaG8gJyAgICcgWEdFVFRFWFQgJEA7CisJUVVJRVRfTVNHRk1UICAgPSBAZWNobyAnICAgJyBNU0dGTVQgJEA7CisJUVVJRVRfR0NPViAgICAgPSBAZWNobyAnICAgJyBHQ09WICRAOworCVFVSUVUX1NQICAgICAgID0gQGVjaG8gJyAgICcgU1AgJDw7CisJUVVJRVRfUkMgICAgICAgPSBAZWNobyAnICAgJyBSQyAkQDsKKwlRVUlFVF9TVUJESVIwICA9ICtAc3ViZGlyPQorCVFVSUVUX1NVQkRJUjEgID0gOyQoTk9fU1VCRElSKSBlY2hvICcgICAnIFNVQkRJUiAkJHN1YmRpcjsgXAorCQkJICQoTUFLRSkgJChQUklOVF9ESVIpIC1DICQkc3ViZGlyCisJZXhwb3J0IFYKKwlleHBvcnQgUVVJRVRfR0VOCisJZXhwb3J0IFFVSUVUX0JVSUxUX0lOCitlbmRpZgorZW5kaWYKKworaWZkZWYgTk9fSU5TVEFMTF9IQVJETElOS1MKKwlleHBvcnQgTk9fSU5TVEFMTF9IQVJETElOS1MKK2VuZGlmCisKKyMjIyBwcm9maWxlIGZlZWRiYWNrIGJ1aWxkCisjCisKKyMgQ2FuIGFkanVzdCB0aGlzIHRvIGJlIGEgZ2xvYmFsIGRpcmVjdG9yeSBpZiB5b3Ugd2FudCB0byBkbyBleHRlbmRlZAorIyBkYXRhIGdhdGhlcmluZworUFJPRklMRV9ESVIgOj0gJChDVVJESVIpCisKK2lmZXEgKCIkKFBST0ZJTEUpIiwiR0VOIikKKwlCQVNJQ19DRkxBR1MgKz0gLWZwcm9maWxlLWdlbmVyYXRlPSQoUFJPRklMRV9ESVIpIC1ETk9fTk9SRVRVUk49MQorCUVYVExJQlMgKz0gLWxnY292CisJZXhwb3J0IENDQUNIRV9ESVNBQkxFID0gdAorCVYgPSAxCitlbHNlCitpZm5lcSAoIiQoUFJPRklMRSkiLCIiKQorCUJBU0lDX0NGTEFHUyArPSAtZnByb2ZpbGUtdXNlPSQoUFJPRklMRV9ESVIpIC1mcHJvZmlsZS1jb3JyZWN0aW9uIC1ETk9fTk9SRVRVUk49MQorCWV4cG9ydCBDQ0FDSEVfRElTQUJMRSA9IHQKKwlWID0gMQorZW5kaWYKK2VuZGlmCisKKyMgU2hlbGwgcXVvdGUgKGRvIG5vdCB1c2UgJChjYWxsKSB0byBhY2NvbW1vZGF0ZSBhbmNpZW50IHNldHVwcyk7CisKK1NIQTFfSEVBREVSX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEExX0hFQURFUikpCitFVENfR0lUQ09ORklHX1NRID0gJChzdWJzdCAnLCdcJycsJChFVENfR0lUQ09ORklHKSkKK0VUQ19HSVRBVFRSSUJVVEVTX1NRID0gJChzdWJzdCAnLCdcJycsJChFVENfR0lUQVRUUklCVVRFUykpCisKK0RFU1RESVJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFU1RESVIpKQorYmluZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChiaW5kaXIpKQorYmluZGlyX3JlbGF0aXZlX1NRID0gJChzdWJzdCAnLCdcJycsJChiaW5kaXJfcmVsYXRpdmUpKQorbWFuZGlyX3JlbGF0aXZlX1NRID0gJChzdWJzdCAnLCdcJycsJChtYW5kaXJfcmVsYXRpdmUpKQoraW5mb2Rpcl9yZWxhdGl2ZV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoaW5mb2Rpcl9yZWxhdGl2ZSkpCitsb2NhbGVkaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGxvY2FsZWRpcikpCitnaXRleGVjZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXRleGVjZGlyKSkKK3RlbXBsYXRlX2Rpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQodGVtcGxhdGVfZGlyKSkKK2h0bWxkaXJfcmVsYXRpdmVfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGh0bWxkaXJfcmVsYXRpdmUpKQorcHJlZml4X1NRID0gJChzdWJzdCAnLCdcJycsJChwcmVmaXgpKQorZ2l0d2ViZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXR3ZWJkaXIpKQorCitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKK1BFUkxfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUEVSTF9QQVRIKSkKK1BZVEhPTl9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChQWVRIT05fUEFUSCkpCitUQ0xUS19QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xUS19QQVRIKSkKK0RJRkZfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERJRkYpKQorUEVSTExJQl9FWFRSQV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUEVSTExJQl9FWFRSQSkpCisKK0xJQlMgPSAkKEdJVExJQlMpICQoRVhUTElCUykKKworQkFTSUNfQ0ZMQUdTICs9IC1EU0hBMV9IRUFERVI9JyQoU0hBMV9IRUFERVJfU1EpJyBcCisJJChDT01QQVRfQ0ZMQUdTKQorTElCX09CSlMgKz0gJChDT01QQVRfT0JKUykKKworIyBRdW90ZSBmb3IgQworCitpZmRlZiBERUZBVUxUX0VESVRPUgorREVGQVVMVF9FRElUT1JfQ1EgPSAiJChzdWJzdCAiLFwiLCQoc3Vic3QgXCxcXCwkKERFRkFVTFRfRURJVE9SKSkpIgorREVGQVVMVF9FRElUT1JfQ1FfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFRkFVTFRfRURJVE9SX0NRKSkKKworQkFTSUNfQ0ZMQUdTICs9IC1EREVGQVVMVF9FRElUT1I9JyQoREVGQVVMVF9FRElUT1JfQ1FfU1EpJworZW5kaWYKKworaWZkZWYgREVGQVVMVF9QQUdFUgorREVGQVVMVF9QQUdFUl9DUSA9ICIkKHN1YnN0ICIsXCIsJChzdWJzdCBcLFxcLCQoREVGQVVMVF9QQUdFUikpKSIKK0RFRkFVTFRfUEFHRVJfQ1FfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFRkFVTFRfUEFHRVJfQ1EpKQorCitCQVNJQ19DRkxBR1MgKz0gLURERUZBVUxUX1BBR0VSPSckKERFRkFVTFRfUEFHRVJfQ1FfU1EpJworZW5kaWYKKworaWZkZWYgU0hFTExfUEFUSAorU0hFTExfUEFUSF9DUSA9ICIkKHN1YnN0ICIsXCIsJChzdWJzdCBcLFxcLCQoU0hFTExfUEFUSCkpKSIKK1NIRUxMX1BBVEhfQ1FfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEhfQ1EpKQorCitCQVNJQ19DRkxBR1MgKz0gLURTSEVMTF9QQVRIPSckKFNIRUxMX1BBVEhfQ1FfU1EpJworZW5kaWYKKworR0lUX1VTRVJfQUdFTlRfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKEdJVF9VU0VSX0FHRU5UKSkKK0dJVF9VU0VSX0FHRU5UX0NRID0gIiQoc3Vic3QgIixcIiwkKHN1YnN0IFwsXFwsJChHSVRfVVNFUl9BR0VOVCkpKSIKK0dJVF9VU0VSX0FHRU5UX0NRX1NRID0gJChzdWJzdCAnLCdcJycsJChHSVRfVVNFUl9BR0VOVF9DUSkpCitHSVQtVVNFUi1BR0VOVDogRk9SQ0UKKwlAaWYgdGVzdCB4JyQoR0lUX1VTRVJfQUdFTlRfU1EpJyAhPSB4ImBjYXQgR0lULVVTRVItQUdFTlQgMj4vZGV2L251bGxgIjsgdGhlbiBcCisJCWVjaG8gJyQoR0lUX1VTRVJfQUdFTlRfU1EpJyA+R0lULVVTRVItQUdFTlQ7IFwKKwlmaQorCitpZmRlZiBERUZBVUxUX0hFTFBfRk9STUFUCitCQVNJQ19DRkxBR1MgKz0gLURERUZBVUxUX0hFTFBfRk9STUFUPSciJChERUZBVUxUX0hFTFBfRk9STUFUKSInCitlbmRpZgorCitBTExfQ0ZMQUdTICs9ICQoQkFTSUNfQ0ZMQUdTKQorQUxMX0xERkxBR1MgKz0gJChCQVNJQ19MREZMQUdTKQorCitleHBvcnQgRElGRiBUQVIgSU5TVEFMTCBERVNURElSIFNIRUxMX1BBVEgKKworCisjIyMgQnVpbGQgcnVsZXMKKworU0hFTEwgPSAkKFNIRUxMX1BBVEgpCisKK2FsbDo6IHNoZWxsX2NvbXBhdGliaWxpdHlfdGVzdAorCitpZmVxICIkKFBST0ZJTEUpIiAiQlVJTEQiCithbGw6OiBwcm9maWxlCitlbmRpZgorCitwcm9maWxlOjogcHJvZmlsZS1jbGVhbgorCSQoTUFLRSkgUFJPRklMRT1HRU4gYWxsCisJJChNQUtFKSBQUk9GSUxFPUdFTiAtajEgdGVzdAorCUBpZiB0ZXN0IC1uICIkJEdJVF9QRVJGX1JFUE8iIHx8IHRlc3QgLWQgLmdpdDsgdGhlbiBcCisJCSQoTUFLRSkgUFJPRklMRT1HRU4gLWoxIHBlcmY7IFwKKwllbHNlIFwKKwkJZWNobyAiU2tpcHBpbmcgcHJvZmlsZSBvZiBwZXJmIHRlc3RzLi4uIjsgXAorCWZpCisJJChNQUtFKSBQUk9GSUxFPVVTRSBhbGwKKworcHJvZmlsZS1mYXN0OiBwcm9maWxlLWNsZWFuCisJJChNQUtFKSBQUk9GSUxFPUdFTiBhbGwKKwkkKE1BS0UpIFBST0ZJTEU9R0VOIC1qMSBwZXJmCisJJChNQUtFKSBQUk9GSUxFPVVTRSBhbGwKKworCithbGw6OiAkKEFMTF9QUk9HUkFNUykgJChTQ1JJUFRfTElCKSAkKEJVSUxUX0lOUykgJChPVEhFUl9QUk9HUkFNUykgR0lULUJVSUxELU9QVElPTlMKK2lmbmVxICgsJFgpCisJJChRVUlFVF9CVUlMVF9JTikkKGZvcmVhY2ggcCwkKHBhdHN1YnN0ICUkWCwlLCQoZmlsdGVyICUkWCwkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpIGdpdCRYKSksIHRlc3QgLWQgJyRwJyAtbyAnJHAnIC1lZiAnJHAkWCcgfHwgJChSTSkgJyRwJzspCitlbmRpZgorCithbGw6OgoraWZuZGVmIE5PX1RDTFRLCisJJChRVUlFVF9TVUJESVIwKWdpdC1ndWkgJChRVUlFVF9TVUJESVIxKSBnaXRleGVjZGlyPSckKGdpdGV4ZWNfaW5zdGRpcl9TUSknIGFsbAorCSQoUVVJRVRfU1VCRElSMClnaXRrLWdpdCAkKFFVSUVUX1NVQkRJUjEpIGFsbAorZW5kaWYKK2lmbmRlZiBOT19QRVJMCisJJChRVUlFVF9TVUJESVIwKXBlcmwgJChRVUlFVF9TVUJESVIxKSBQRVJMX1BBVEg9JyQoUEVSTF9QQVRIX1NRKScgcHJlZml4PSckKHByZWZpeF9TUSknIGxvY2FsZWRpcj0nJChsb2NhbGVkaXJfU1EpJyBhbGwKK2VuZGlmCisJJChRVUlFVF9TVUJESVIwKXRlbXBsYXRlcyAkKFFVSUVUX1NVQkRJUjEpIFNIRUxMX1BBVEg9JyQoU0hFTExfUEFUSF9TUSknIFBFUkxfUEFUSD0nJChQRVJMX1BBVEhfU1EpJworCitwbGVhc2Vfc2V0X1NIRUxMX1BBVEhfdG9fYV9tb3JlX21vZGVybl9zaGVsbDoKKwlAJCQoOikKKworc2hlbGxfY29tcGF0aWJpbGl0eV90ZXN0OiBwbGVhc2Vfc2V0X1NIRUxMX1BBVEhfdG9fYV9tb3JlX21vZGVybl9zaGVsbAorCitzdHJpcDogJChQUk9HUkFNUykgZ2l0JFgKKwkkKFNUUklQKSAkKFNUUklQX09QVFMpICReCisKKyMjIyBUYXJnZXQtc3BlY2lmaWMgZmxhZ3MgYW5kIGRlcGVuZGVuY2llcworCisjIFRoZSBnZW5lcmljIGNvbXBpbGF0aW9uIHBhdHRlcm4gcnVsZSBhbmQgYXV0b21hdGljYWxseQorIyBjb21wdXRlZCBoZWFkZXIgZGVwZW5kZW5jaWVzIChmYWxsaW5nIGJhY2sgdG8gYSBkZXBlbmRlbmN5IG9uCisjIExJQl9IKSBhcmUgZW5vdWdoIHRvIGRlc2NyaWJlIGhvdyBtb3N0IHRhcmdldHMgc2hvdWxkIGJlIGJ1aWx0LAorIyBidXQgc29tZSB0YXJnZXRzIGFyZSBzcGVjaWFsIGVub3VnaCB0byBuZWVkIHNvbWV0aGluZyBhIGxpdHRsZQorIyBkaWZmZXJlbnQuCisjCisjIC0gV2hlbiBhIHNvdXJjZSBmaWxlICJmb28uYyIgI2luY2x1ZGVzIGEgZ2VuZXJhdGVkIGhlYWRlciBmaWxlLAorIyAgIHdlIG5lZWQgdG8gbGlzdCB0aGF0IGRlcGVuZGVuY3kgZm9yIHRoZSAiZm9vLm8iIHRhcmdldC4KKyMKKyMgICBXZSBhbHNvIGxpc3QgaXQgZnJvbSBvdGhlciB0YXJnZXRzIHRoYXQgYXJlIGJ1aWx0IGZyb20gZm9vLmMKKyMgICBsaWtlICJmb28uc3AiIGFuZCAiZm9vLnMiLCBldmVuIHRob3VnaCB0aGF0IGlzIGVhc3kgdG8gZm9yZ2V0CisjICAgdG8gZG8gYmVjYXVzZSB0aGUgZ2VuZXJhdGVkIGhlYWRlciBpcyBhbHJlYWR5IHByZXNlbnQgYXJvdW5kCisjICAgYWZ0ZXIgYSByZWd1bGFyIGJ1aWxkIGF0dGVtcHQuCisjCisjIC0gU29tZSBjb2RlIGRlcGVuZHMgb24gY29uZmlndXJhdGlvbiBrZXB0IGluIG1ha2VmaWxlCisjICAgdmFyaWFibGVzLiBUaGUgdGFyZ2V0LXNwZWNpZmljIHZhcmlhYmxlIEVYVFJBX0NQUEZMQUdTIGNhbgorIyAgIGJlIHVzZWQgdG8gY29udmV5IHRoYXQgaW5mb3JtYXRpb24gdG8gdGhlIEMgcHJlcHJvY2Vzc29yCisjICAgdXNpbmcgLUQgb3B0aW9ucy4KKyMKKyMgICBUaGUgImZvby5vIiB0YXJnZXQgc2hvdWxkIGhhdmUgYSBjb3JyZXNwb25kaW5nIGRlcGVuZGVuY3kgb24KKyMgICBhIGZpbGUgdGhhdCBjaGFuZ2VzIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBtYWtlZmlsZSB2YXJpYWJsZQorIyAgIGNoYW5nZXMuICBGb3IgZXhhbXBsZSwgdGFyZ2V0cyBtYWtpbmcgdXNlIG9mIHRoZQorIyAgICQoR0lUX1ZFUlNJT04pIHZhcmlhYmxlIGRlcGVuZCBvbiBHSVQtVkVSU0lPTi1GSUxFLgorIworIyAgIFRlY2huaWNhbGx5IHRoZSAiLnNwIiBhbmQgIi5zIiB0YXJnZXRzIGRvIG5vdCBuZWVkIHRoaXMKKyMgICBkZXBlbmRlbmN5IGJlY2F1c2UgdGhleSBhcmUgZm9yY2UtYnVpbHQsIGJ1dCB0aGV5IGdldCB0aGUKKyMgICBzYW1lIGRlcGVuZGVuY3kgZm9yIGNvbnNpc3RlbmN5LiBUaGlzIHdheSwgeW91IGRvIG5vdCBoYXZlIHRvCisjICAga25vdyBob3cgZWFjaCB0YXJnZXQgaXMgaW1wbGVtZW50ZWQuIEFuZCBpdCBtZWFucyB0aGUKKyMgICBkZXBlbmRlbmNpZXMgaGVyZSB3aWxsIG5vdCBuZWVkIHRvIGNoYW5nZSBpZiB0aGUgZm9yY2UtYnVpbGQKKyMgICBkZXRhaWxzIGNoYW5nZSBzb21lIGRheS4KKworZ2l0LnNwIGdpdC5zIGdpdC5vOiBHSVQtUFJFRklYCitnaXQuc3AgZ2l0LnMgZ2l0Lm86IEVYVFJBX0NQUEZMQUdTID0gXAorCSctREdJVF9IVE1MX1BBVEg9IiQoaHRtbGRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJJy1ER0lUX01BTl9QQVRIPSIkKG1hbmRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJJy1ER0lUX0lORk9fUEFUSD0iJChpbmZvZGlyX3JlbGF0aXZlX1NRKSInCisKK2dpdCRYOiBnaXQubyBHSVQtTERGTEFHUyAkKEJVSUxUSU5fT0JKUykgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpIGdpdC5vIFwKKwkJJChCVUlMVElOX09CSlMpICQoTElCUykKKworaGVscC5zcCBoZWxwLnMgaGVscC5vOiBjb21tb24tY21kcy5oCisKK2J1aWx0aW4vaGVscC5zcCBidWlsdGluL2hlbHAucyBidWlsdGluL2hlbHAubzogY29tbW9uLWNtZHMuaCBHSVQtUFJFRklYCitidWlsdGluL2hlbHAuc3AgYnVpbHRpbi9oZWxwLnMgYnVpbHRpbi9oZWxwLm86IEVYVFJBX0NQUEZMQUdTID0gXAorCSctREdJVF9IVE1MX1BBVEg9IiQoaHRtbGRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJJy1ER0lUX01BTl9QQVRIPSIkKG1hbmRpcl9yZWxhdGl2ZV9TUSkiJyBcCisJJy1ER0lUX0lORk9fUEFUSD0iJChpbmZvZGlyX3JlbGF0aXZlX1NRKSInCisKK3ZlcnNpb24uc3AgdmVyc2lvbi5zIHZlcnNpb24ubzogR0lULVZFUlNJT04tRklMRSBHSVQtVVNFUi1BR0VOVAordmVyc2lvbi5zcCB2ZXJzaW9uLnMgdmVyc2lvbi5vOiBFWFRSQV9DUFBGTEFHUyA9IFwKKwknLURHSVRfVkVSU0lPTj0iJChHSVRfVkVSU0lPTikiJyBcCisJJy1ER0lUX1VTRVJfQUdFTlQ9JChHSVRfVVNFUl9BR0VOVF9DUV9TUSknCisKKyQoQlVJTFRfSU5TKTogZ2l0JFgKKwkkKFFVSUVUX0JVSUxUX0lOKSQoUk0pICRAICYmIFwKKwlsbiAkPCAkQCAyPi9kZXYvbnVsbCB8fCBcCisJbG4gLXMgJDwgJEAgMj4vZGV2L251bGwgfHwgXAorCWNwICQ8ICRACisKK2NvbW1vbi1jbWRzLmg6IGdlbmVyYXRlLWNtZGxpc3Quc2ggY29tbWFuZC1saXN0LnR4dAorCitjb21tb24tY21kcy5oOiAkKHdpbGRjYXJkIERvY3VtZW50YXRpb24vZ2l0LSoudHh0KQorCSQoUVVJRVRfR0VOKSQoU0hFTExfUEFUSCkgLi9nZW5lcmF0ZS1jbWRsaXN0LnNoIGNvbW1hbmQtbGlzdC50eHQgPiRAKyAmJiBtdiAkQCsgJEAKKworU0NSSVBUX0RFRklORVMgPSAkKFNIRUxMX1BBVEhfU1EpOiQoRElGRl9TUSk6JChHSVRfVkVSU0lPTik6XAorCSQobG9jYWxlZGlyX1NRKTokKE5PX0NVUkwpOiQoVVNFX0dFVFRFWFRfU0NIRU1FKTokKFNBTkVfVE9PTF9QQVRIX1NRKTpcCisJJChnaXR3ZWJkaXJfU1EpOiQoUEVSTF9QQVRIX1NRKQorZGVmaW5lIGNtZF9tdW5nZV9zY3JpcHQKKyQoUk0pICRAICRAKyAmJiBcCitzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAorICAgIC1lICdzfEBTSEVMTF9QQVRIQHwkKFNIRUxMX1BBVEhfU1EpfCcgXAorICAgIC1lICdzfEBARElGRkBAfCQoRElGRl9TUSl8JyBcCisgICAgLWUgJ3N8QEBMT0NBTEVESVJAQHwkKGxvY2FsZWRpcl9TUSl8ZycgXAorICAgIC1lICdzL0BATk9fQ1VSTEBALyQoTk9fQ1VSTCkvZycgXAorICAgIC1lICdzL0BAVVNFX0dFVFRFWFRfU0NIRU1FQEAvJChVU0VfR0VUVEVYVF9TQ0hFTUUpL2cnIFwKKyAgICAtZSAkKEJST0tFTl9QQVRIX0ZJWCkgXAorICAgIC1lICdzfEBAR0lUV0VCRElSQEB8JChnaXR3ZWJkaXJfU1EpfGcnIFwKKyAgICAtZSAnc3xAQFBFUkxAQHwkKFBFUkxfUEFUSF9TUSl8ZycgXAorICAgICRALnNoID4kQCsKK2VuZGVmCisKK0dJVC1TQ1JJUFQtREVGSU5FUzogRk9SQ0UKKwlARkxBR1M9JyQoU0NSSVBUX0RFRklORVMpJzsgXAorCSAgICBpZiB0ZXN0IHgiJCRGTEFHUyIgIT0geCJgY2F0ICRAIDI+L2Rldi9udWxsYCIgOyB0aGVuIFwKKwkJZWNobyA+JjIgIiAgICAqIG5ldyBzY3JpcHQgcGFyYW1ldGVycyI7IFwKKwkJZWNobyAiJCRGTEFHUyIgPiRAOyBcCisgICAgICAgICAgICBmaQorCisKKyQoU0NSSVBUX1NIX0dFTikgOiAlIDogJS5zaCBHSVQtU0NSSVBULURFRklORVMKKwkkKFFVSUVUX0dFTikkKGNtZF9tdW5nZV9zY3JpcHQpICYmIFwKIAljaG1vZCAreCAkQCsgJiYgXAotCW12IC1mICRAKyAkQAorCW12ICRAKyAkQAogCi0kKFBPX1RFTVBMQVRFKTogZ2l0awotCSQoWEdFVFRFWFQpIC1rbWMgLUxUY2wgLW8gJEAgZ2l0awotdXBkYXRlLXBvOjogJChQT19URU1QTEFURSkKLQkkKGZvcmVhY2ggcCwgJChBTExfUE9GSUxFUyksIGVjaG8gVXBkYXRpbmcgJHAgOyBtc2dtZXJnZSAtVSAkcCAkKFBPX1RFTVBMQVRFKSA7ICkKLSQoQUxMX01TR0ZJTEVTKTogJS5tc2cgOiAlLnBvCi0JQGVjaG8gR2VuZXJhdGluZyBjYXRhbG9nICRACi0JJChNU0dGTVQpIC0tc3RhdGlzdGljcyAtLXRjbCAkPCAtbCAkKGJhc2VuYW1lICQobm90ZGlyICQ8KSkgLWQgJChkaXIgJEApCiskKFNDUklQVF9MSUIpIDogJSA6ICUuc2ggR0lULVNDUklQVC1ERUZJTkVTCisJJChRVUlFVF9HRU4pJChjbWRfbXVuZ2Vfc2NyaXB0KSAmJiBcCisJbXYgJEArICRACiAKLS5QSE9OWTogYWxsIGluc3RhbGwgdW5pbnN0YWxsIGNsZWFuIHVwZGF0ZS1wbwotLlBIT05ZOiBGT1JDRQorZ2l0LnJlczogZ2l0LnJjIEdJVC1WRVJTSU9OLUZJTEUKKwkkKFFVSUVUX1JDKSQoUkMpIFwKKwkgICQoam9pbiAtRE1BSk9SPSAtRE1JTk9SPSwgJCh3b3JkbGlzdCAxLDIsJChzdWJzdCAtLCAsJChzdWJzdCAuLCAsJChHSVRfVkVSU0lPTikpKSkpIFwKKwkgIC1ER0lUX1ZFUlNJT049IlxcXCIkKEdJVF9WRVJTSU9OKVxcXCIiICQ8IC1vICRACisKKyMgVGhpcyBtYWtlcyBzdXJlIHdlIGRlcGVuZCBvbiB0aGUgTk9fUEVSTCBzZXR0aW5nIGl0c2VsZi4KKyQoU0NSSVBUX1BFUkxfR0VOKTogR0lULUJVSUxELU9QVElPTlMKKworaWZuZGVmIE5PX1BFUkwKKyQoU0NSSVBUX1BFUkxfR0VOKTogcGVybC9wZXJsLm1haworCitwZXJsL3BlcmwubWFrOiBwZXJsL1BNLnN0YW1wCisKK3BlcmwvUE0uc3RhbXA6IEZPUkNFCisJQCQoRklORCkgcGVybCAtdHlwZSBmIC1uYW1lICcqLnBtJyB8IHNvcnQgPiRAKyAmJiBcCisJeyBjbXAgJEArICRAID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgbXYgJEArICRAOyB9ICYmIFwKKwkkKFJNKSAkQCsKKworcGVybC9wZXJsLm1hazogR0lULUNGTEFHUyBHSVQtUFJFRklYIHBlcmwvTWFrZWZpbGUgcGVybC9NYWtlZmlsZS5QTAorCSQoUVVJRVRfU1VCRElSMClwZXJsICQoUVVJRVRfU1VCRElSMSkgUEVSTF9QQVRIPSckKFBFUkxfUEFUSF9TUSknIHByZWZpeD0nJChwcmVmaXhfU1EpJyAkKEBGKQorCitQRVJMX0RFRklORVMgPSAkKFBFUkxfUEFUSF9TUSk6JChQRVJMTElCX0VYVFJBX1NRKQorJChTQ1JJUFRfUEVSTF9HRU4pOiAlIDogJS5wZXJsIHBlcmwvcGVybC5tYWsgR0lULVBFUkwtREVGSU5FUyBHSVQtVkVSU0lPTi1GSUxFCisJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKKwlJTlNUTElCRElSPWBNQUtFRkxBR1M9ICQoTUFLRSkgLUMgcGVybCAtcyAtLW5vLXByaW50LWRpcmVjdG9yeSBpbnN0bGliZGlyYCAmJiBcCisJSU5TVExJQkRJUl9FWFRSQT0nJChQRVJMTElCX0VYVFJBX1NRKScgJiYgXAorCUlOU1RMSUJESVI9IiQkSU5TVExJQkRJUiQke0lOU1RMSUJESVJfRVhUUkE6KzokJElOU1RMSUJESVJfRVhUUkF9IiAmJiBcCisJc2VkIC1lICcxeycgXAorCSAgICAtZSAnCXN8IyEuKnBlcmx8IyEkKFBFUkxfUEFUSF9TUSl8JyBcCisJICAgIC1lICcJaCcgXAorCSAgICAtZSAnCXM9Lio9dXNlIGxpYiAoc3BsaXQoLyQocGF0aHNlcCkvLCAkJEVOVntHSVRQRVJMTElCfSB8fCAiJyIkJElOU1RMSUJESVIiJyIpKTs9JyBcCisJICAgIC1lICcJSCcgXAorCSAgICAtZSAnCXgnIFwKKwkgICAgLWUgJ30nIFwKKwkgICAgLWUgJ3MvQEBHSVRfVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIFwKKwkgICAgJDwgPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKKworR0lULVBFUkwtREVGSU5FUzogRk9SQ0UKKwlARkxBR1M9JyQoUEVSTF9ERUZJTkVTKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkRkxBR1MiICE9IHgiYGNhdCAkQCAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgcGVybC1zcGVjaWZpYyBwYXJhbWV0ZXJzIjsgXAorCQllY2hvICIkJEZMQUdTIiA+JEA7IFwKKwkgICAgZmkKKworCisuUEhPTlk6IGdpdHdlYgorZ2l0d2ViOgorCSQoUVVJRVRfU1VCRElSMClnaXR3ZWIgJChRVUlFVF9TVUJESVIxKSBhbGwKKworZ2l0LWluc3Rhd2ViOiBnaXQtaW5zdGF3ZWIuc2ggR0lULVNDUklQVC1ERUZJTkVTCisJJChRVUlFVF9HRU4pJChjbWRfbXVuZ2Vfc2NyaXB0KSAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKK2Vsc2UgIyBOT19QRVJMCiskKFNDUklQVF9QRVJMX0dFTikgZ2l0LWluc3Rhd2ViOiAlIDogdW5pbXBsZW1lbnRlZC5zaAorCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxc3wjIS4qL3NofCMhJChTSEVMTF9QQVRIX1NRKXwnIFwKKwkgICAgLWUgJ3N8QEBSRUFTT05AQHxOT19QRVJMPSQoTk9fUEVSTCl8ZycgXAorCSAgICB1bmltcGxlbWVudGVkLnNoID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACitlbmRpZiAjIE5PX1BFUkwKKworIyBUaGlzIG1ha2VzIHN1cmUgd2UgZGVwZW5kIG9uIHRoZSBOT19QWVRIT04gc2V0dGluZyBpdHNlbGYuCiskKFNDUklQVF9QWVRIT05fR0VOKTogR0lULUJVSUxELU9QVElPTlMKKworaWZuZGVmIE5PX1BZVEhPTgorJChTQ1JJUFRfUFlUSE9OX0dFTik6IEdJVC1DRkxBR1MgR0lULVBSRUZJWCBHSVQtUFlUSE9OLVZBUlMKKyQoU0NSSVBUX1BZVEhPTl9HRU4pOiAlIDogJS5weQorCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxc3wjIS4qcHl0aG9ufCMhJChQWVRIT05fUEFUSF9TUSl8JyBcCisJICAgICQ8ID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACitlbHNlICMgTk9fUFlUSE9OCiskKFNDUklQVF9QWVRIT05fR0VOKTogJSA6IHVuaW1wbGVtZW50ZWQuc2gKKwkkKFFVSUVUX0dFTikkKFJNKSAkQCAkQCsgJiYgXAorCXNlZCAtZSAnMXN8IyEuKi9zaHwjISQoU0hFTExfUEFUSF9TUSl8JyBcCisJICAgIC1lICdzfEBAUkVBU09OQEB8Tk9fUFlUSE9OPSQoTk9fUFlUSE9OKXxnJyBcCisJICAgIHVuaW1wbGVtZW50ZWQuc2ggPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKK2VuZGlmICMgTk9fUFlUSE9OCisKK0NPTkZJR1VSRV9SRUNJUEUgPSAkKFJNKSBjb25maWd1cmUgY29uZmlndXJlLmFjKyAmJiBcCisJCSAgIHNlZCAtZSAncy9AQEdJVF9WRVJTSU9OQEAvJChHSVRfVkVSU0lPTikvZycgXAorCQkJY29uZmlndXJlLmFjID5jb25maWd1cmUuYWMrICYmIFwKKwkJICAgYXV0b2NvbmYgLW8gY29uZmlndXJlIGNvbmZpZ3VyZS5hYysgJiYgXAorCQkgICAkKFJNKSBjb25maWd1cmUuYWMrCisKK2NvbmZpZ3VyZTogY29uZmlndXJlLmFjIEdJVC1WRVJTSU9OLUZJTEUKKwkkKFFVSUVUX0dFTikkKENPTkZJR1VSRV9SRUNJUEUpCisKK2lmZGVmIEFVVE9DT05GSUdVUkVECisjIFdlIGF2b2lkIGRlcGVuZGluZyBvbiAnY29uZmlndXJlJyBoZXJlLCBiZWNhdXNlIGl0IGdldHMgcmVidWlsdAorIyBldmVyeSB0aW1lIEdJVC1WRVJTSU9OLUZJTEUgaXMgbW9kaWZpZWQsIG9ubHkgdG8gdXBkYXRlIHRoZSBlbWJlZGRlZAorIyB2ZXJzaW9uIG51bWJlciBzdHJpbmcsIHdoaWNoIGNvbmZpZy5zdGF0dXMgZG9lcyBub3QgY2FyZSBhYm91dC4gIFdlCisjIGRvIHdhbnQgdG8gcmVjaGVjayB3aGVuIHRoZSBwbGF0Zm9ybS9lbnZpcm9ubWVudCBkZXRlY3Rpb24gbG9naWMKKyMgY2hhbmdlcywgaGVuY2UgdGhpcyBkZXBlbmRzIG9uIGNvbmZpZ3VyZS5hYy4KK2NvbmZpZy5zdGF0dXM6IGNvbmZpZ3VyZS5hYworCSQoUVVJRVRfR0VOKSQoQ09ORklHVVJFX1JFQ0lQRSkgJiYgXAorCWlmIHRlc3QgLWYgY29uZmlnLnN0YXR1czsgdGhlbiBcCisJICAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrOyBcCisJZWxzZSBcCisJICAuL2NvbmZpZ3VyZTsgXAorCWZpCityZWNvbmZpZ3VyZSBjb25maWcubWFrLmF1dG9nZW46IGNvbmZpZy5zdGF0dXMKKwkkKFFVSUVUX0dFTikuL2NvbmZpZy5zdGF0dXMKKy5QSE9OWTogcmVjb25maWd1cmUgIyBUaGlzIGlzIGEgY29udmVuaWVuY2UgdGFyZ2V0LgorZW5kaWYKKworWERJRkZfT0JKUyArPSB4ZGlmZi94ZGlmZmkubworWERJRkZfT0JKUyArPSB4ZGlmZi94cHJlcGFyZS5vCitYRElGRl9PQkpTICs9IHhkaWZmL3h1dGlscy5vCitYRElGRl9PQkpTICs9IHhkaWZmL3hlbWl0Lm8KK1hESUZGX09CSlMgKz0geGRpZmYveG1lcmdlLm8KK1hESUZGX09CSlMgKz0geGRpZmYveHBhdGllbmNlLm8KK1hESUZGX09CSlMgKz0geGRpZmYveGhpc3RvZ3JhbS5vCisKK1ZDU1NWTl9PQkpTICs9IHZjcy1zdm4vbGluZV9idWZmZXIubworVkNTU1ZOX09CSlMgKz0gdmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5vCitWQ1NTVk5fT0JKUyArPSB2Y3Mtc3ZuL3JlcG9fdHJlZS5vCitWQ1NTVk5fT0JKUyArPSB2Y3Mtc3ZuL2Zhc3RfZXhwb3J0Lm8KK1ZDU1NWTl9PQkpTICs9IHZjcy1zdm4vc3ZuZGlmZi5vCitWQ1NTVk5fT0JKUyArPSB2Y3Mtc3ZuL3N2bmR1bXAubworCitURVNUX09CSlMgOj0gJChwYXRzdWJzdCB0ZXN0LSUkWCx0ZXN0LSUubywkKFRFU1RfUFJPR1JBTVMpKQorT0JKRUNUUyA6PSAkKExJQl9PQkpTKSAkKEJVSUxUSU5fT0JKUykgJChQUk9HUkFNX09CSlMpICQoVEVTVF9PQkpTKSBcCisJJChYRElGRl9PQkpTKSBcCisJJChWQ1NTVk5fT0JKUykgXAorCWdpdC5vCitpZm5kZWYgTk9fQ1VSTAorCU9CSkVDVFMgKz0gaHR0cC5vIGh0dHAtd2Fsa2VyLm8gcmVtb3RlLWN1cmwubworZW5kaWYKKworZGVwX2ZpbGVzIDo9ICQoZm9yZWFjaCBmLCQoT0JKRUNUUyksJChkaXIgJGYpLmRlcGVuZC8kKG5vdGRpciAkZikuZCkKK2RlcF9kaXJzIDo9ICQoYWRkc3VmZml4IC5kZXBlbmQsJChzb3J0ICQoZGlyICQoT0JKRUNUUykpKSkKKworaWZlcSAoJChDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMpLHllcykKKyQoZGVwX2RpcnMpOgorCUBta2RpciAtcCAkQAorCittaXNzaW5nX2RlcF9kaXJzIDo9ICQoZmlsdGVyLW91dCAkKHdpbGRjYXJkICQoZGVwX2RpcnMpKSwkKGRlcF9kaXJzKSkKK2RlcF9maWxlID0gJChkaXIgJEApLmRlcGVuZC8kKG5vdGRpciAkQCkuZAorZGVwX2FyZ3MgPSAtTUYgJChkZXBfZmlsZSkgLU1RICRAIC1NTUQgLU1QCitlbmRpZgorCitpZm5lcSAoJChDT01QVVRFX0hFQURFUl9ERVBFTkRFTkNJRVMpLHllcykKK2RlcF9kaXJzID0KK21pc3NpbmdfZGVwX2RpcnMgPQorZGVwX2FyZ3MgPQorZW5kaWYKKworQVNNX1NSQyA6PSAkKHdpbGRjYXJkICQoT0JKRUNUUzpvPVMpKQorQVNNX09CSiA6PSAkKEFTTV9TUkM6Uz1vKQorQ19PQkogOj0gJChmaWx0ZXItb3V0ICQoQVNNX09CSiksJChPQkpFQ1RTKSkKKworLlNVRkZJWEVTOgorCiskKENfT0JKKTogJS5vOiAlLmMgR0lULUNGTEFHUyAkKG1pc3NpbmdfZGVwX2RpcnMpCisJJChRVUlFVF9DQykkKENDKSAtbyAkKi5vIC1jICQoZGVwX2FyZ3MpICQoQUxMX0NGTEFHUykgJChFWFRSQV9DUFBGTEFHUykgJDwKKyQoQVNNX09CSik6ICUubzogJS5TIEdJVC1DRkxBR1MgJChtaXNzaW5nX2RlcF9kaXJzKQorCSQoUVVJRVRfQ0MpJChDQykgLW8gJCoubyAtYyAkKGRlcF9hcmdzKSAkKEFMTF9DRkxBR1MpICQoRVhUUkFfQ1BQRkxBR1MpICQ8CisKKyUuczogJS5jIEdJVC1DRkxBR1MgRk9SQ0UKKwkkKFFVSUVUX0NDKSQoQ0MpIC1vICRAIC1TICQoQUxMX0NGTEFHUykgJChFWFRSQV9DUFBGTEFHUykgJDwKKworaWZkZWYgVVNFX0NPTVBVVEVEX0hFQURFUl9ERVBFTkRFTkNJRVMKKyMgVGFrZSBhZHZhbnRhZ2Ugb2YgZ2NjJ3Mgb24tdGhlLWZseSBkZXBlbmRlbmN5IGdlbmVyYXRpb24KKyMgU2VlIDxodHRwOi8vZ2NjLmdudS5vcmcvZ2NjLTMuMC9mZWF0dXJlcy5odG1sPi4KK2RlcF9maWxlc19wcmVzZW50IDo9ICQod2lsZGNhcmQgJChkZXBfZmlsZXMpKQoraWZuZXEgKCQoZGVwX2ZpbGVzX3ByZXNlbnQpLCkKK2luY2x1ZGUgJChkZXBfZmlsZXNfcHJlc2VudCkKK2VuZGlmCitlbHNlCisjIERlcGVuZGVuY2llcyBvbiBoZWFkZXIgZmlsZXMsIGZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydAorIyB0aGUgZ2NjIC1NTUQgb3B0aW9uLgorIworIyBEZXBlbmRlbmNpZXMgb24gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgaGVhZGVycyBzdWNoIGFzIGNvbW1vbi1jbWRzLmgKKyMgc2hvdWxkIF9ub3RfIGJlIGluY2x1ZGVkIGhlcmUsIHNpbmNlIHRoZXkgYXJlIG5lY2Vzc2FyeSBldmVuIHdoZW4KKyMgYnVpbGRpbmcgYW4gb2JqZWN0IGZvciB0aGUgZmlyc3QgdGltZS4KKworJChPQkpFQ1RTKTogJChMSUJfSCkKK2VuZGlmCisKK2V4ZWNfY21kLnNwIGV4ZWNfY21kLnMgZXhlY19jbWQubzogR0lULVBSRUZJWAorZXhlY19jbWQuc3AgZXhlY19jbWQucyBleGVjX2NtZC5vOiBFWFRSQV9DUFBGTEFHUyA9IFwKKwknLURHSVRfRVhFQ19QQVRIPSIkKGdpdGV4ZWNkaXJfU1EpIicgXAorCSctREJJTkRJUj0iJChiaW5kaXJfcmVsYXRpdmVfU1EpIicgXAorCSctRFBSRUZJWD0iJChwcmVmaXhfU1EpIicKKworYnVpbHRpbi9pbml0LWRiLnNwIGJ1aWx0aW4vaW5pdC1kYi5zIGJ1aWx0aW4vaW5pdC1kYi5vOiBHSVQtUFJFRklYCitidWlsdGluL2luaXQtZGIuc3AgYnVpbHRpbi9pbml0LWRiLnMgYnVpbHRpbi9pbml0LWRiLm86IEVYVFJBX0NQUEZMQUdTID0gXAorCS1EREVGQVVMVF9HSVRfVEVNUExBVEVfRElSPSciJCh0ZW1wbGF0ZV9kaXJfU1EpIicKKworY29uZmlnLnNwIGNvbmZpZy5zIGNvbmZpZy5vOiBHSVQtUFJFRklYCitjb25maWcuc3AgY29uZmlnLnMgY29uZmlnLm86IEVYVFJBX0NQUEZMQUdTID0gXAorCS1ERVRDX0dJVENPTkZJRz0nIiQoRVRDX0dJVENPTkZJR19TUSkiJworCithdHRyLnNwIGF0dHIucyBhdHRyLm86IEdJVC1QUkVGSVgKK2F0dHIuc3AgYXR0ci5zIGF0dHIubzogRVhUUkFfQ1BQRkxBR1MgPSBcCisJLURFVENfR0lUQVRUUklCVVRFUz0nIiQoRVRDX0dJVEFUVFJJQlVURVNfU1EpIicKKworZ2V0dGV4dC5zcCBnZXR0ZXh0LnMgZ2V0dGV4dC5vOiBHSVQtUFJFRklYCitnZXR0ZXh0LnNwIGdldHRleHQucyBnZXR0ZXh0Lm86IEVYVFJBX0NQUEZMQUdTID0gXAorCS1ER0lUX0xPQ0FMRV9QQVRIPSciJChsb2NhbGVkaXJfU1EpIicKKworaHR0cC1wdXNoLnNwIGh0dHAuc3AgaHR0cC13YWxrZXIuc3AgcmVtb3RlLWN1cmwuc3AgaW1hcC1zZW5kLnNwOiBTUEFSU0VfRkxBR1MgKz0gXAorCS1EQ1VSTF9ESVNBQkxFX1RZUEVDSEVDSworCitpZmRlZiBOT19FWFBBVAoraHR0cC13YWxrZXIuc3AgaHR0cC13YWxrZXIucyBodHRwLXdhbGtlci5vOiBFWFRSQV9DUFBGTEFHUyA9IC1ETk9fRVhQQVQKK2VuZGlmCisKK2lmZGVmIE5PX1JFR0VYCitjb21wYXQvcmVnZXgvcmVnZXguc3AgY29tcGF0L3JlZ2V4L3JlZ2V4Lm86IEVYVFJBX0NQUEZMQUdTID0gXAorCS1ER0FXSyAtRE5PX01CU1VQUE9SVAorZW5kaWYKKworaWZkZWYgVVNFX05FRF9BTExPQ0FUT1IKK2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLnNwIGNvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLm86IEVYVFJBX0NQUEZMQUdTID0gXAorCS1ETkRFQlVHIC1ET1ZFUlJJREVfU1RSRFVQIC1EUkVQTEFDRV9TWVNURU1fQUxMT0NBVE9SCitjb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5zcDogU1BBUlNFX0ZMQUdTICs9IC1Xbm8tbm9uLXBvaW50ZXItbnVsbAorZW5kaWYKKworZ2l0LSUkWDogJS5vIEdJVC1MREZMQUdTICQoR0lUTElCUykKKwkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pICQoTElCUykKKworZ2l0LWltYXAtc2VuZCRYOiBpbWFwLXNlbmQubyAkKElNQVBfU0VORF9CVUlMRERFUFMpIEdJVC1MREZMQUdTICQoR0lUTElCUykKKwkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pIFwKKwkJJChMSUJTKSAkKElNQVBfU0VORF9MREZMQUdTKQorCitnaXQtaHR0cC1mZXRjaCRYOiBodHRwLm8gaHR0cC13YWxrZXIubyBodHRwLWZldGNoLm8gR0lULUxERkxBR1MgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgXAorCQkkKENVUkxfTElCQ1VSTCkgJChMSUJTKQorZ2l0LWh0dHAtcHVzaCRYOiBodHRwLm8gaHR0cC1wdXNoLm8gR0lULUxERkxBR1MgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgXAorCQkkKENVUkxfTElCQ1VSTCkgJChFWFBBVF9MSUJFWFBBVCkgJChMSUJTKQorCitnaXQtcmVtb3RlLXRlc3Rzdm4kWDogcmVtb3RlLXRlc3Rzdm4ubyBHSVQtTERGTEFHUyAkKEdJVExJQlMpICQoVkNTU1ZOX0xJQikKKwkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pICQoTElCUykgXAorCSQoVkNTU1ZOX0xJQikKKworJChSRU1PVEVfQ1VSTF9BTElBU0VTKTogJChSRU1PVEVfQ1VSTF9QUklNQVJZKQorCSQoUVVJRVRfTE5DUCkkKFJNKSAkQCAmJiBcCisJbG4gJDwgJEAgMj4vZGV2L251bGwgfHwgXAorCWxuIC1zICQ8ICRAIDI+L2Rldi9udWxsIHx8IFwKKwljcCAkPCAkQAorCiskKFJFTU9URV9DVVJMX1BSSU1BUlkpOiByZW1vdGUtY3VybC5vIGh0dHAubyBodHRwLXdhbGtlci5vIEdJVC1MREZMQUdTICQoR0lUTElCUykKKwkkKFFVSUVUX0xJTkspJChDQykgJChBTExfQ0ZMQUdTKSAtbyAkQCAkKEFMTF9MREZMQUdTKSAkKGZpbHRlciAlLm8sJF4pIFwKKwkJJChDVVJMX0xJQkNVUkwpICQoRVhQQVRfTElCRVhQQVQpICQoTElCUykKKworJChMSUJfRklMRSk6ICQoTElCX09CSlMpCisJJChRVUlFVF9BUikkKFJNKSAkQCAmJiAkKEFSKSAkKEFSRkxBR1MpICRAICReCisKKyQoWERJRkZfTElCKTogJChYRElGRl9PQkpTKQorCSQoUVVJRVRfQVIpJChSTSkgJEAgJiYgJChBUikgJChBUkZMQUdTKSAkQCAkXgorCiskKFZDU1NWTl9MSUIpOiAkKFZDU1NWTl9PQkpTKQorCSQoUVVJRVRfQVIpJChSTSkgJEAgJiYgJChBUikgJChBUkZMQUdTKSAkQCAkXgorCitleHBvcnQgREVGQVVMVF9FRElUT1IgREVGQVVMVF9QQUdFUgorCitkb2M6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGFsbAorCittYW46CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIG1hbgorCitodG1sOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBodG1sCisKK2luZm86CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluZm8KKworcGRmOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBwZGYKKworWEdFVFRFWFRfRkxBR1MgPSBcCisJLS1mb3JjZS1wbyBcCisJLS1hZGQtY29tbWVudHM9VFJBTlNMQVRPUlM6IFwKKwktLW1zZ2lkLWJ1Z3MtYWRkcmVzcz0iR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4iIFwKKwktLWZyb20tY29kZT1VVEYtOAorWEdFVFRFWFRfRkxBR1NfQyA9ICQoWEdFVFRFWFRfRkxBR1MpIC0tbGFuZ3VhZ2U9QyBcCisJLS1rZXl3b3JkPV8gLS1rZXl3b3JkPU5fIC0ta2V5d29yZD0iUV86MSwyIgorWEdFVFRFWFRfRkxBR1NfU0ggPSAkKFhHRVRURVhUX0ZMQUdTKSAtLWxhbmd1YWdlPVNoZWxsIFwKKwktLWtleXdvcmQ9Z2V0dGV4dGxuIC0ta2V5d29yZD1ldmFsX2dldHRleHRsbgorWEdFVFRFWFRfRkxBR1NfUEVSTCA9ICQoWEdFVFRFWFRfRkxBR1MpIC0ta2V5d29yZD1fXyAtLWxhbmd1YWdlPVBlcmwKK0xPQ0FMSVpFRF9DID0gJChDX09CSjpvPWMpICQoTElCX0gpICQoR0VORVJBVEVEX0gpCitMT0NBTElaRURfU0ggPSAkKFNDUklQVF9TSCkKK0xPQ0FMSVpFRF9QRVJMID0gJChTQ1JJUFRfUEVSTCkKKworaWZkZWYgWEdFVFRFWFRfSU5DTFVERV9URVNUUworTE9DQUxJWkVEX0MgKz0gdC90MDIwMC90ZXN0LmMKK0xPQ0FMSVpFRF9TSCArPSB0L3QwMjAwL3Rlc3Quc2gKK0xPQ0FMSVpFRF9QRVJMICs9IHQvdDAyMDAvdGVzdC5wZXJsCitlbmRpZgorCitwby9naXQucG90OiAkKEdFTkVSQVRFRF9IKSBGT1JDRQorCSQoUVVJRVRfWEdFVFRFWFQpJChYR0VUVEVYVCkgLW8kQCsgJChYR0VUVEVYVF9GTEFHU19DKSAkKExPQ0FMSVpFRF9DKQorCSQoUVVJRVRfWEdFVFRFWFQpJChYR0VUVEVYVCkgLW8kQCsgLS1qb2luLWV4aXN0aW5nICQoWEdFVFRFWFRfRkxBR1NfU0gpIFwKKwkJJChMT0NBTElaRURfU0gpCisJJChRVUlFVF9YR0VUVEVYVCkkKFhHRVRURVhUKSAtbyRAKyAtLWpvaW4tZXhpc3RpbmcgJChYR0VUVEVYVF9GTEFHU19QRVJMKSBcCisJCSQoTE9DQUxJWkVEX1BFUkwpCisJbXYgJEArICRACisKK3BvdDogcG8vZ2l0LnBvdAorCitQT0ZJTEVTIDo9ICQod2lsZGNhcmQgcG8vKi5wbykKK01PRklMRVMgOj0gJChwYXRzdWJzdCBwby8lLnBvLHBvL2J1aWxkL2xvY2FsZS8lL0xDX01FU1NBR0VTL2dpdC5tbywkKFBPRklMRVMpKQorCitpZm5kZWYgTk9fR0VUVEVYVAorYWxsOjogJChNT0ZJTEVTKQorZW5kaWYKKworcG8vYnVpbGQvbG9jYWxlLyUvTENfTUVTU0FHRVMvZ2l0Lm1vOiBwby8lLnBvCisJJChRVUlFVF9NU0dGTVQpbWtkaXIgLXAgJChkaXIgJEApICYmICQoTVNHRk1UKSAtbyAkQCAkPAorCitGSU5EX1NPVVJDRV9GSUxFUyA9ICggZ2l0IGxzLWZpbGVzICcqLltoY1NdJyAyPi9kZXYvbnVsbCB8fCBcCisJCQkkKEZJTkQpIC4gXCggLW5hbWUgLmdpdCAtdHlwZSBkIC1wcnVuZSBcKSBcCisJCQkJLW8gXCggLW5hbWUgJyouW2hjU10nIC10eXBlIGYgLXByaW50IFwpICkKKworJChFVEFHU19UQVJHRVQpOiBGT1JDRQorCSQoUk0pICQoRVRBR1NfVEFSR0VUKQorCSQoRklORF9TT1VSQ0VfRklMRVMpIHwgeGFyZ3MgZXRhZ3MgLWEgLW8gJChFVEFHU19UQVJHRVQpCisKK3RhZ3M6IEZPUkNFCisJJChSTSkgdGFncworCSQoRklORF9TT1VSQ0VfRklMRVMpIHwgeGFyZ3MgY3RhZ3MgLWEKKworY3Njb3BlOgorCSQoUk0pIGNzY29wZSoKKwkkKEZJTkRfU09VUkNFX0ZJTEVTKSB8IHhhcmdzIGNzY29wZSAtYgorCisjIyMgRGV0ZWN0IHByZWZpeCBjaGFuZ2VzCitUUkFDS19QUkVGSVggPSAkKGJpbmRpcl9TUSk6JChnaXRleGVjZGlyX1NRKTokKHRlbXBsYXRlX2Rpcl9TUSk6JChwcmVmaXhfU1EpOlwKKwkJJChsb2NhbGVkaXJfU1EpCisKK0dJVC1QUkVGSVg6IEZPUkNFCisJQEZMQUdTPSckKFRSQUNLX1BSRUZJWCknOyBcCisJaWYgdGVzdCB4IiQkRkxBR1MiICE9IHgiYGNhdCBHSVQtUFJFRklYIDI+L2Rldi9udWxsYCIgOyB0aGVuIFwKKwkJZWNobyA+JjIgIiAgICAqIG5ldyBwcmVmaXggZmxhZ3MiOyBcCisJCWVjaG8gIiQkRkxBR1MiID5HSVQtUFJFRklYOyBcCisJZmkKKworVFJBQ0tfQ0ZMQUdTID0gJChDQyk6JChzdWJzdCAnLCdcJycsJChBTExfQ0ZMQUdTKSk6JChVU0VfR0VUVEVYVF9TQ0hFTUUpCisKK0dJVC1DRkxBR1M6IEZPUkNFCisJQEZMQUdTPSckKFRSQUNLX0NGTEFHUyknOyBcCisJICAgIGlmIHRlc3QgeCIkJEZMQUdTIiAhPSB4ImBjYXQgR0lULUNGTEFHUyAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgYnVpbGQgZmxhZ3MiOyBcCisJCWVjaG8gIiQkRkxBR1MiID5HSVQtQ0ZMQUdTOyBcCisgICAgICAgICAgICBmaQorCitUUkFDS19MREZMQUdTID0gJChzdWJzdCAnLCdcJycsJChBTExfTERGTEFHUykpCisKK0dJVC1MREZMQUdTOiBGT1JDRQorCUBGTEFHUz0nJChUUkFDS19MREZMQUdTKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkRkxBR1MiICE9IHgiYGNhdCBHSVQtTERGTEFHUyAyPi9kZXYvbnVsbGAiIDsgdGhlbiBcCisJCWVjaG8gPiYyICIgICAgKiBuZXcgbGluayBmbGFncyI7IFwKKwkJZWNobyAiJCRGTEFHUyIgPkdJVC1MREZMQUdTOyBcCisgICAgICAgICAgICBmaQorCisjIFdlIG5lZWQgdG8gYXBwbHkgc3EgdHdpY2UsIG9uY2UgdG8gcHJvdGVjdCBmcm9tIHRoZSBzaGVsbAorIyB0aGF0IHJ1bnMgR0lULUJVSUxELU9QVElPTlMsIGFuZCB0aGVuIGFnYWluIHRvIHByb3RlY3QgaXQKKyMgYW5kIHRoZSBmaXJzdCBsZXZlbCBxdW90aW5nIGZyb20gdGhlIHNoZWxsIHRoYXQgcnVucyAiZWNobyIuCitHSVQtQlVJTEQtT1BUSU9OUzogRk9SQ0UKKwlAZWNobyBTSEVMTF9QQVRIPVwnJyQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSF9TUSkpJ1wnID4kQCsKKwlAZWNobyBQRVJMX1BBVEg9XCcnJChzdWJzdCAnLCdcJycsJChQRVJMX1BBVEhfU1EpKSdcJyA+PiRAKworCUBlY2hvIERJRkY9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChESUZGKSkpJ1wnID4+JEArCisJQGVjaG8gUFlUSE9OX1BBVEg9XCcnJChzdWJzdCAnLCdcJycsJChQWVRIT05fUEFUSF9TUSkpJ1wnID4+JEArCisJQGVjaG8gVEFSPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoVEFSKSkpJ1wnID4+JEArCisJQGVjaG8gTk9fQ1VSTD1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKE5PX0NVUkwpKSknXCcgPj4kQCsKKwlAZWNobyBOT19FWFBBVD1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKE5PX0VYUEFUKSkpJ1wnID4+JEArCisJQGVjaG8gVVNFX0xJQlBDUkU9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChVU0VfTElCUENSRSkpKSdcJyA+PiRAKworCUBlY2hvIE5PX1BFUkw9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChOT19QRVJMKSkpJ1wnID4+JEArCisJQGVjaG8gTk9fUFlUSE9OPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fUFlUSE9OKSkpJ1wnID4+JEArCisJQGVjaG8gTk9fVU5JWF9TT0NLRVRTPVwnJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgJywnXCcnLCQoTk9fVU5JWF9TT0NLRVRTKSkpJ1wnID4+JEArCitpZmRlZiBURVNUX09VVFBVVF9ESVJFQ1RPUlkKKwlAZWNobyBURVNUX09VVFBVVF9ESVJFQ1RPUlk9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChURVNUX09VVFBVVF9ESVJFQ1RPUlkpKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfVEVTVF9PUFRTCisJQGVjaG8gR0lUX1RFU1RfT1BUUz1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdJVF9URVNUX09QVFMpKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfVEVTVF9DTVAKKwlAZWNobyBHSVRfVEVTVF9DTVA9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChHSVRfVEVTVF9DTVApKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfVEVTVF9DTVBfVVNFX0NPUElFRF9DT05URVhUCisJQGVjaG8gR0lUX1RFU1RfQ01QX1VTRV9DT1BJRURfQ09OVEVYVD1ZZXNQbGVhc2UgPj4kQCsKK2VuZGlmCisJQGVjaG8gTk9fR0VUVEVYVD1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKE5PX0dFVFRFWFQpKSknXCcgPj4kQCsKKwlAZWNobyBHRVRURVhUX1BPSVNPTj1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdFVFRFWFRfUE9JU09OKSkpJ1wnID4+JEArCitpZmRlZiBHSVRfUEVSRl9SRVBFQVRfQ09VTlQKKwlAZWNobyBHSVRfUEVSRl9SRVBFQVRfQ09VTlQ9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChHSVRfUEVSRl9SRVBFQVRfQ09VTlQpKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfUEVSRl9SRVBPCisJQGVjaG8gR0lUX1BFUkZfUkVQTz1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdJVF9QRVJGX1JFUE8pKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfUEVSRl9MQVJHRV9SRVBPCisJQGVjaG8gR0lUX1BFUkZfTEFSR0VfUkVQTz1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKEdJVF9QRVJGX0xBUkdFX1JFUE8pKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBHSVRfUEVSRl9NQUtFX09QVFMKKwlAZWNobyBHSVRfUEVSRl9NQUtFX09QVFM9XCcnJChzdWJzdCAnLCdcJycsJChzdWJzdCAnLCdcJycsJChHSVRfUEVSRl9NQUtFX09QVFMpKSknXCcgPj4kQCsKK2VuZGlmCitpZmRlZiBURVNUX0dJVF9JTkRFWF9WRVJTSU9OCisJQGVjaG8gVEVTVF9HSVRfSU5ERVhfVkVSU0lPTj1cJyckKHN1YnN0ICcsJ1wnJywkKHN1YnN0ICcsJ1wnJywkKFRFU1RfR0lUX0lOREVYX1ZFUlNJT04pKSknXCcgPj4kQCsKK2VuZGlmCisJQGlmIGNtcCAkQCsgJEAgPi9kZXYvbnVsbCAyPiYxOyB0aGVuICQoUk0pICRAKzsgZWxzZSBtdiAkQCsgJEA7IGZpCisKKyMjIyBEZXRlY3QgUHl0aG9uIGludGVycHJldGVyIHBhdGggY2hhbmdlcworaWZuZGVmIE5PX1BZVEhPTgorVFJBQ0tfUFlUSE9OID0gJChzdWJzdCAnLCdcJycsLURQWVRIT05fUEFUSD0nJChQWVRIT05fUEFUSF9TUSknKQorCitHSVQtUFlUSE9OLVZBUlM6IEZPUkNFCisJQFZBUlM9JyQoVFJBQ0tfUFlUSE9OKSc7IFwKKwkgICAgaWYgdGVzdCB4IiQkVkFSUyIgIT0geCJgY2F0ICRAIDI+L2Rldi9udWxsYCIgOyB0aGVuIFwKKwkJZWNobyA+JjIgIiAgICAqIG5ldyBQeXRob24gaW50ZXJwcmV0ZXIgbG9jYXRpb24iOyBcCisJCWVjaG8gIiQkVkFSUyIgPiRAOyBcCisgICAgICAgICAgICBmaQorZW5kaWYKKwordGVzdF9iaW5kaXJfcHJvZ3JhbXMgOj0gJChwYXRzdWJzdCAlLGJpbi13cmFwcGVycy8lLCQoQklORElSX1BST0dSQU1TX05FRURfWCkgJChCSU5ESVJfUFJPR1JBTVNfTk9fWCkgJChURVNUX1BST0dSQU1TX05FRURfWCkpCisKK2FsbDo6ICQoVEVTVF9QUk9HUkFNUykgJCh0ZXN0X2JpbmRpcl9wcm9ncmFtcykKK2FsbDo6ICQoTk9fSU5TVEFMTCkKKworYmluLXdyYXBwZXJzLyU6IHdyYXAtZm9yLWJpbi5zaAorCUBta2RpciAtcCBiaW4td3JhcHBlcnMKKwkkKFFVSUVUX0dFTilzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAorCSAgICAgLWUgJ3N8QEBCVUlMRF9ESVJAQHwkKHNoZWxsIHB3ZCl8JyBcCisJICAgICAtZSAnc3xAQFBST0dAQHwkKEBGKXwnIDwgJDwgPiAkQCAmJiBcCisJY2htb2QgK3ggJEAKKworIyBHTlUgbWFrZSBzdXBwb3J0cyBleHBvcnRpbmcgYWxsIHZhcmlhYmxlcyBieSAiZXhwb3J0IiB3aXRob3V0IHBhcmFtZXRlcnMuCisjIEhvd2V2ZXIsIHRoZSBlbnZpcm9ubWVudCBnZXRzIHF1aXRlIGJpZywgYW5kIHNvbWUgcHJvZ3JhbXMgaGF2ZSBwcm9ibGVtcworIyB3aXRoIHRoYXQuCisKK2V4cG9ydCBOT19TVk5fVEVTVFMKK2V4cG9ydCBURVNUX05PX01BTExPQ19DSEVDSworCisjIyMgVGVzdGluZyBydWxlcworCit0ZXN0OiBhbGwKKwkkKE1BS0UpIC1DIHQvIGFsbAorCitwZXJmOiBhbGwKKwkkKE1BS0UpIC1DIHQvcGVyZi8gYWxsCisKKy5QSE9OWTogdGVzdCBwZXJmCisKK3Rlc3QtY3R5cGUkWDogY3R5cGUubworCit0ZXN0LWRhdGUkWDogZGF0ZS5vIGN0eXBlLm8KKwordGVzdC1kZWx0YSRYOiBkaWZmLWRlbHRhLm8gcGF0Y2gtZGVsdGEubworCit0ZXN0LWxpbmUtYnVmZmVyJFg6IHZjcy1zdm4vbGliLmEKKwordGVzdC1wYXJzZS1vcHRpb25zJFg6IHBhcnNlLW9wdGlvbnMubyBwYXJzZS1vcHRpb25zLWNiLm8KKwordGVzdC1zdm4tZmUkWDogdmNzLXN2bi9saWIuYQorCisuUFJFQ0lPVVM6ICQoVEVTVF9PQkpTKQorCit0ZXN0LSUkWDogdGVzdC0lLm8gR0lULUxERkxBR1MgJChHSVRMSUJTKQorCSQoUVVJRVRfTElOSykkKENDKSAkKEFMTF9DRkxBR1MpIC1vICRAICQoQUxMX0xERkxBR1MpICQoZmlsdGVyICUubywkXikgJChmaWx0ZXIgJS5hLCReKSAkKExJQlMpCisKK2NoZWNrLXNoYTE6OiB0ZXN0LXNoYTEkWAorCS4vdGVzdC1zaGExLnNoCisKK1NQX09CSiA9ICQocGF0c3Vic3QgJS5vLCUuc3AsJChDX09CSikpCisKKyQoU1BfT0JKKTogJS5zcDogJS5jIEdJVC1DRkxBR1MgRk9SQ0UKKwkkKFFVSUVUX1NQKWNnY2MgLW5vLWNvbXBpbGUgJChBTExfQ0ZMQUdTKSAkKEVYVFJBX0NQUEZMQUdTKSBcCisJCSQoU1BBUlNFX0ZMQUdTKSAkPAorCisuUEhPTlk6IHNwYXJzZSAkKFNQX09CSikKK3NwYXJzZTogJChTUF9PQkopCisKK2NoZWNrOiBjb21tb24tY21kcy5oCisJQGlmIHNwYXJzZTsgXAorCXRoZW4gXAorCQllY2hvIDI+JjEgIlVzZSAnbWFrZSBzcGFyc2UnIGluc3RlYWQiOyBcCisJCSQoTUFLRSkgLS1uby1wcmludC1kaXJlY3Rvcnkgc3BhcnNlOyBcCisJZWxzZSBcCisJCWVjaG8gMj4mMSAiRGlkIHlvdSBtZWFuICdtYWtlIHRlc3QnPyI7IFwKKwkJZXhpdCAxOyBcCisJZmkKKworIyMjIEluc3RhbGxhdGlvbiBydWxlcworCitpZm5lcSAoJChmaWx0ZXIgLyUsJChmaXJzdHdvcmQgJCh0ZW1wbGF0ZV9kaXIpKSksKQordGVtcGxhdGVfaW5zdGRpciA9ICQodGVtcGxhdGVfZGlyKQorZWxzZQordGVtcGxhdGVfaW5zdGRpciA9ICQocHJlZml4KS8kKHRlbXBsYXRlX2RpcikKK2VuZGlmCitleHBvcnQgdGVtcGxhdGVfaW5zdGRpcgorCitpZm5lcSAoJChmaWx0ZXIgLyUsJChmaXJzdHdvcmQgJChnaXRleGVjZGlyKSkpLCkKK2dpdGV4ZWNfaW5zdGRpciA9ICQoZ2l0ZXhlY2RpcikKK2Vsc2UKK2dpdGV4ZWNfaW5zdGRpciA9ICQocHJlZml4KS8kKGdpdGV4ZWNkaXIpCitlbmRpZgorZ2l0ZXhlY19pbnN0ZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXRleGVjX2luc3RkaXIpKQorZXhwb3J0IGdpdGV4ZWNfaW5zdGRpcgorCitpZm5lcSAoJChmaWx0ZXIgLyUsJChmaXJzdHdvcmQgJChtZXJnZXRvb2xzZGlyKSkpLCkKK21lcmdldG9vbHNfaW5zdGRpciA9ICQobWVyZ2V0b29sc2RpcikKK2Vsc2UKK21lcmdldG9vbHNfaW5zdGRpciA9ICQocHJlZml4KS8kKG1lcmdldG9vbHNkaXIpCitlbmRpZgorbWVyZ2V0b29sc19pbnN0ZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChtZXJnZXRvb2xzX2luc3RkaXIpKQorCitpbnN0YWxsX2JpbmRpcl9wcm9ncmFtcyA6PSAkKHBhdHN1YnN0ICUsJSRYLCQoQklORElSX1BST0dSQU1TX05FRURfWCkpICQoQklORElSX1BST0dSQU1TX05PX1gpCisKK3Byb2ZpbGUtaW5zdGFsbDogcHJvZmlsZQorCSQoTUFLRSkgaW5zdGFsbAorCitwcm9maWxlLWZhc3QtaW5zdGFsbDogcHJvZmlsZS1mYXN0CisJJChNQUtFKSBpbnN0YWxsCisKK2luc3RhbGw6IGFsbAorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJworCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgJChBTExfUFJPR1JBTVMpICckKERFU1RESVJfU1EpJChnaXRleGVjX2luc3RkaXJfU1EpJworCSQoSU5TVEFMTCkgLW0gNjQ0ICQoU0NSSVBUX0xJQikgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSAkKGluc3RhbGxfYmluZGlyX3Byb2dyYW1zKSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScKKwkkKE1BS0UpIC1DIHRlbXBsYXRlcyBERVNURElSPSckKERFU1RESVJfU1EpJyBpbnN0YWxsCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKG1lcmdldG9vbHNfaW5zdGRpcl9TUSknCisJJChJTlNUQUxMKSAtbSA2NDQgbWVyZ2V0b29scy8qICckKERFU1RESVJfU1EpJChtZXJnZXRvb2xzX2luc3RkaXJfU1EpJworaWZuZGVmIE5PX0dFVFRFWFQKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQobG9jYWxlZGlyX1NRKScKKwkoY2QgcG8vYnVpbGQvbG9jYWxlICYmICQoVEFSKSBjZiAtIC4pIHwgXAorCShjZCAnJChERVNURElSX1NRKSQobG9jYWxlZGlyX1NRKScgJiYgdW1hc2sgMDIyICYmICQoVEFSKSB4b2YgLSkKK2VuZGlmCitpZm5kZWYgTk9fUEVSTAorCSQoTUFLRSkgLUMgcGVybCBwcmVmaXg9JyQocHJlZml4X1NRKScgREVTVERJUj0nJChERVNURElSX1NRKScgaW5zdGFsbAorCSQoTUFLRSkgLUMgZ2l0d2ViIGluc3RhbGwKK2VuZGlmCitpZm5kZWYgTk9fVENMVEsKKwkkKE1BS0UpIC1DIGdpdGstZ2l0IGluc3RhbGwKKwkkKE1BS0UpIC1DIGdpdC1ndWkgZ2l0ZXhlY2Rpcj0nJChnaXRleGVjX2luc3RkaXJfU1EpJyBpbnN0YWxsCitlbmRpZgoraWZuZXEgKCwkWCkKKwkkKGZvcmVhY2ggcCwkKHBhdHN1YnN0ICUkWCwlLCQoZmlsdGVyICUkWCwkKEFMTF9QUk9HUkFNUykgJChCVUlMVF9JTlMpIGdpdCRYKSksIHRlc3QgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNfaW5zdGRpcl9TUSkvJHAnIC1lZiAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKS8kcCRYJyB8fCAkKFJNKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKS8kcCc7KQorZW5kaWYKKworCWJpbmRpcj0kJChjZCAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScgJiYgcHdkKSAmJiBcCisJZXhlY2Rpcj0kJChjZCAnJChERVNURElSX1NRKSQoZ2l0ZXhlY19pbnN0ZGlyX1NRKScgJiYgcHdkKSAmJiBcCisJeyB0ZXN0ICIkJGJpbmRpci8iID0gIiQkZXhlY2Rpci8iIHx8IFwKKwkgIGZvciBwIGluIGdpdCRYICQoZmlsdGVyICQoaW5zdGFsbF9iaW5kaXJfcHJvZ3JhbXMpLCQoQUxMX1BST0dSQU1TKSk7IGRvIFwKKwkJJChSTSkgIiQkZXhlY2Rpci8kJHAiICYmIFwKKwkJdGVzdCAteiAiJChOT19JTlNUQUxMX0hBUkRMSU5LUykkKE5PX0NST1NTX0RJUkVDVE9SWV9IQVJETElOS1MpIiAmJiBcCisJCWxuICIkJGJpbmRpci8kJHAiICIkJGV4ZWNkaXIvJCRwIiAyPi9kZXYvbnVsbCB8fCBcCisJCWNwICIkJGJpbmRpci8kJHAiICIkJGV4ZWNkaXIvJCRwIiB8fCBleGl0OyBcCisJICBkb25lOyBcCisJfSAmJiBcCisJZm9yIHAgaW4gJChmaWx0ZXIgJChpbnN0YWxsX2JpbmRpcl9wcm9ncmFtcyksJChCVUlMVF9JTlMpKTsgZG8gXAorCQkkKFJNKSAiJCRiaW5kaXIvJCRwIiAmJiBcCisJCXRlc3QgLXogIiQoTk9fSU5TVEFMTF9IQVJETElOS1MpIiAmJiBcCisJCWxuICIkJGJpbmRpci9naXQkWCIgIiQkYmluZGlyLyQkcCIgMj4vZGV2L251bGwgfHwgXAorCQlsbiAtcyAiZ2l0JFgiICIkJGJpbmRpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJY3AgIiQkYmluZGlyL2dpdCRYIiAiJCRiaW5kaXIvJCRwIiB8fCBleGl0OyBcCisJZG9uZSAmJiBcCisJZm9yIHAgaW4gJChCVUlMVF9JTlMpOyBkbyBcCisJCSQoUk0pICIkJGV4ZWNkaXIvJCRwIiAmJiBcCisJCXRlc3QgLXogIiQoTk9fSU5TVEFMTF9IQVJETElOS1MpIiAmJiBcCisJCWxuICIkJGV4ZWNkaXIvZ2l0JFgiICIkJGV4ZWNkaXIvJCRwIiAyPi9kZXYvbnVsbCB8fCBcCisJCWxuIC1zICJnaXQkWCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJY3AgIiQkZXhlY2Rpci9naXQkWCIgIiQkZXhlY2Rpci8kJHAiIHx8IGV4aXQ7IFwKKwlkb25lICYmIFwKKwlyZW1vdGVfY3VybF9hbGlhc2VzPSIkKFJFTU9URV9DVVJMX0FMSUFTRVMpIiAmJiBcCisJZm9yIHAgaW4gJCRyZW1vdGVfY3VybF9hbGlhc2VzOyBkbyBcCisJCSQoUk0pICIkJGV4ZWNkaXIvJCRwIiAmJiBcCisJCXRlc3QgLXogIiQoTk9fSU5TVEFMTF9IQVJETElOS1MpIiAmJiBcCisJCWxuICIkJGV4ZWNkaXIvZ2l0LXJlbW90ZS1odHRwJFgiICIkJGV4ZWNkaXIvJCRwIiAyPi9kZXYvbnVsbCB8fCBcCisJCWxuIC1zICJnaXQtcmVtb3RlLWh0dHAkWCIgIiQkZXhlY2Rpci8kJHAiIDI+L2Rldi9udWxsIHx8IFwKKwkJY3AgIiQkZXhlY2Rpci9naXQtcmVtb3RlLWh0dHAkWCIgIiQkZXhlY2Rpci8kJHAiIHx8IGV4aXQ7IFwKKwlkb25lICYmIFwKKwkuL2NoZWNrX2JpbmRpciAieiQkYmluZGlyIiAieiQkZXhlY2RpciIgIiQkYmluZGlyL2dpdC1hZGQkWCIKKworaW5zdGFsbC1naXR3ZWI6CisJJChNQUtFKSAtQyBnaXR3ZWIgaW5zdGFsbAorCitpbnN0YWxsLWRvYzoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gaW5zdGFsbAorCitpbnN0YWxsLW1hbjoKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gaW5zdGFsbC1tYW4KKworaW5zdGFsbC1odG1sOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBpbnN0YWxsLWh0bWwKKworaW5zdGFsbC1pbmZvOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBpbnN0YWxsLWluZm8KKworaW5zdGFsbC1wZGY6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIGluc3RhbGwtcGRmCisKK3F1aWNrLWluc3RhbGwtZG9jOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBxdWljay1pbnN0YWxsCisKK3F1aWNrLWluc3RhbGwtbWFuOgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBxdWljay1pbnN0YWxsLW1hbgorCitxdWljay1pbnN0YWxsLWh0bWw6CisJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uIHF1aWNrLWluc3RhbGwtaHRtbAorCisKKworIyMjIE1haW50YWluZXIncyBkaXN0IHJ1bGVzCisKK2dpdC5zcGVjOiBnaXQuc3BlYy5pbiBHSVQtVkVSU0lPTi1GSUxFCisJc2VkIC1lICdzL0BAVkVSU0lPTkBALyQoR0lUX1ZFUlNJT04pL2cnIDwgJDwgPiAkQCsKKwltdiAkQCsgJEAKKworR0lUX1RBUk5BTUUgPSBnaXQtJChHSVRfVkVSU0lPTikKK2Rpc3Q6IGdpdC5zcGVjIGdpdC1hcmNoaXZlJChYKSBjb25maWd1cmUKKwkuL2dpdC1hcmNoaXZlIC0tZm9ybWF0PXRhciBcCisJCS0tcHJlZml4PSQoR0lUX1RBUk5BTUUpLyBIRUFEXnt0cmVlfSA+ICQoR0lUX1RBUk5BTUUpLnRhcgorCUBta2RpciAtcCAkKEdJVF9UQVJOQU1FKQorCUBjcCBnaXQuc3BlYyBjb25maWd1cmUgJChHSVRfVEFSTkFNRSkKKwlAZWNobyAkKEdJVF9WRVJTSU9OKSA+ICQoR0lUX1RBUk5BTUUpL3ZlcnNpb24KKwlAJChNQUtFKSAtQyBnaXQtZ3VpIFRBUkRJUj0uLi8kKEdJVF9UQVJOQU1FKS9naXQtZ3VpIGRpc3QtdmVyc2lvbgorCSQoVEFSKSByZiAkKEdJVF9UQVJOQU1FKS50YXIgXAorCQkkKEdJVF9UQVJOQU1FKS9naXQuc3BlYyBcCisJCSQoR0lUX1RBUk5BTUUpL2NvbmZpZ3VyZSBcCisJCSQoR0lUX1RBUk5BTUUpL3ZlcnNpb24gXAorCQkkKEdJVF9UQVJOQU1FKS9naXQtZ3VpL3ZlcnNpb24KKwlAJChSTSkgLXIgJChHSVRfVEFSTkFNRSkKKwlnemlwIC1mIC05ICQoR0lUX1RBUk5BTUUpLnRhcgorCitycG06IGRpc3QKKwkkKFJQTUJVSUxEKSBcCisJCS0tZGVmaW5lICJfc291cmNlX2ZpbGVkaWdlc3RfYWxnb3JpdGhtIG1kNSIgXAorCQktLWRlZmluZSAiX2JpbmFyeV9maWxlZGlnZXN0X2FsZ29yaXRobSBtZDUiIFwKKwkJLXRhICQoR0lUX1RBUk5BTUUpLnRhci5negorCitodG1sZG9jcyA9IGdpdC1odG1sZG9jcy0kKEdJVF9WRVJTSU9OKQorbWFucGFnZXMgPSBnaXQtbWFucGFnZXMtJChHSVRfVkVSU0lPTikKK2Rpc3QtZG9jOgorCSQoUk0pIC1yIC5kb2MtdG1wLWRpcgorCW1rZGlyIC5kb2MtdG1wLWRpcgorCSQoTUFLRSkgLUMgRG9jdW1lbnRhdGlvbiBXRUJET0NfREVTVD0uLi8uZG9jLXRtcC1kaXIgaW5zdGFsbC13ZWJkb2MKKwljZCAuZG9jLXRtcC1kaXIgJiYgJChUQVIpIGNmIC4uLyQoaHRtbGRvY3MpLnRhciAuCisJZ3ppcCAtbiAtOSAtZiAkKGh0bWxkb2NzKS50YXIKKwk6CisJJChSTSkgLXIgLmRvYy10bXAtZGlyCisJbWtkaXIgLXAgLmRvYy10bXAtZGlyL21hbjEgLmRvYy10bXAtZGlyL21hbjUgLmRvYy10bXAtZGlyL21hbjcKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gREVTVERJUj0uLyBcCisJCW1hbjFkaXI9Li4vLmRvYy10bXAtZGlyL21hbjEgXAorCQltYW41ZGlyPS4uLy5kb2MtdG1wLWRpci9tYW41IFwKKwkJbWFuN2Rpcj0uLi8uZG9jLXRtcC1kaXIvbWFuNyBcCisJCWluc3RhbGwKKwljZCAuZG9jLXRtcC1kaXIgJiYgJChUQVIpIGNmIC4uLyQobWFucGFnZXMpLnRhciAuCisJZ3ppcCAtbiAtOSAtZiAkKG1hbnBhZ2VzKS50YXIKKwkkKFJNKSAtciAuZG9jLXRtcC1kaXIKKworIyMjIENsZWFuaW5nIHJ1bGVzCisKK2Rpc3RjbGVhbjogY2xlYW4KKwkkKFJNKSBjb25maWd1cmUKKwkkKFJNKSBjb25maWcubG9nIGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlCisJJChSTSkgY29uZmlnLm1hay5hdXRvZ2VuIGNvbmZpZy5tYWsuYXBwZW5kCisJJChSTSkgLXIgYXV0b200dGUuY2FjaGUKKworcHJvZmlsZS1jbGVhbjoKKwkkKFJNKSAkKGFkZHN1ZmZpeCAqLmdjZGEsJChhZGRwcmVmaXggJChQUk9GSUxFX0RJUikvLCAkKG9iamVjdF9kaXJzKSkpCisJJChSTSkgJChhZGRzdWZmaXggKi5nY25vLCQoYWRkcHJlZml4ICQoUFJPRklMRV9ESVIpLywgJChvYmplY3RfZGlycykpKQorCitjbGVhbjogcHJvZmlsZS1jbGVhbiBjb3ZlcmFnZS1jbGVhbgorCSQoUk0pICoubyAqLnJlcyBibG9jay1zaGExLyoubyBwcGMvKi5vIGNvbXBhdC8qLm8gY29tcGF0LyovKi5vCisJJChSTSkgeGRpZmYvKi5vIHZjcy1zdm4vKi5vIGV3YWgvKi5vIGJ1aWx0aW4vKi5vCisJJChSTSkgJChMSUJfRklMRSkgJChYRElGRl9MSUIpICQoVkNTU1ZOX0xJQikKKwkkKFJNKSAkKEFMTF9QUk9HUkFNUykgJChTQ1JJUFRfTElCKSAkKEJVSUxUX0lOUykgZ2l0JFgKKwkkKFJNKSAkKFRFU1RfUFJPR1JBTVMpICQoTk9fSU5TVEFMTCkKKwkkKFJNKSAtciBiaW4td3JhcHBlcnMgJChkZXBfZGlycykKKwkkKFJNKSAtciBwby9idWlsZC8KKwkkKFJNKSAqLnNwZWMgKi5weWMgKi5weW8gKi8qLnB5YyAqLyoucHlvIGNvbW1vbi1jbWRzLmggJChFVEFHU19UQVJHRVQpIHRhZ3MgY3Njb3BlKgorCSQoUk0pIC1yICQoR0lUX1RBUk5BTUUpIC5kb2MtdG1wLWRpcgorCSQoUk0pICQoR0lUX1RBUk5BTUUpLnRhci5neiBnaXQtY29yZV8kKEdJVF9WRVJTSU9OKS0qLnRhci5negorCSQoUk0pICQoaHRtbGRvY3MpLnRhci5neiAkKG1hbnBhZ2VzKS50YXIuZ3oKKwkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24vIGNsZWFuCitpZm5kZWYgTk9fUEVSTAorCSQoTUFLRSkgLUMgZ2l0d2ViIGNsZWFuCisJJChNQUtFKSAtQyBwZXJsIGNsZWFuCitlbmRpZgorCSQoTUFLRSkgLUMgdGVtcGxhdGVzLyBjbGVhbgorCSQoTUFLRSkgLUMgdC8gY2xlYW4KK2lmbmRlZiBOT19UQ0xUSworCSQoTUFLRSkgLUMgZ2l0ay1naXQgY2xlYW4KKwkkKE1BS0UpIC1DIGdpdC1ndWkgY2xlYW4KK2VuZGlmCisJJChSTSkgR0lULVZFUlNJT04tRklMRSBHSVQtQ0ZMQUdTIEdJVC1MREZMQUdTIEdJVC1CVUlMRC1PUFRJT05TCisJJChSTSkgR0lULVVTRVItQUdFTlQgR0lULVBSRUZJWAorCSQoUk0pIEdJVC1TQ1JJUFQtREVGSU5FUyBHSVQtUEVSTC1ERUZJTkVTIEdJVC1QWVRIT04tVkFSUworCisuUEhPTlk6IGFsbCBpbnN0YWxsIHByb2ZpbGUtY2xlYW4gY2xlYW4gc3RyaXAKKy5QSE9OWTogc2hlbGxfY29tcGF0aWJpbGl0eV90ZXN0IHBsZWFzZV9zZXRfU0hFTExfUEFUSF90b19hX21vcmVfbW9kZXJuX3NoZWxsCisuUEhPTlk6IEZPUkNFIGNzY29wZQorCisjIyMgQ2hlY2sgZG9jdW1lbnRhdGlvbgorIworQUxMX0NPTU1BTkRTID0gJChBTExfUFJPR1JBTVMpICQoU0NSSVBUX0xJQikgJChCVUlMVF9JTlMpCitBTExfQ09NTUFORFMgKz0gZ2l0CitBTExfQ09NTUFORFMgKz0gZ2l0aworQUxMX0NPTU1BTkRTICs9IGdpdHdlYgorQUxMX0NPTU1BTkRTICs9IGdpdC1ndWkgZ2l0LWNpdG9vbAorY2hlY2stZG9jczo6CisJQChmb3IgdiBpbiAkKEFMTF9DT01NQU5EUyk7IFwKKwlkbyBcCisJCWNhc2UgIiQkdiIgaW4gXAorCQlnaXQtbWVyZ2Utb2N0b3B1cyB8IGdpdC1tZXJnZS1vdXJzIHwgZ2l0LW1lcmdlLXJlY3Vyc2l2ZSB8IFwKKwkJZ2l0LW1lcmdlLXJlc29sdmUgfCBnaXQtbWVyZ2Utc3VidHJlZSB8IFwKKwkJZ2l0LWZzY2stb2JqZWN0cyB8IGdpdC1pbml0LWRiIHwgXAorCQlnaXQtcmVtb3RlLSogfCBnaXQtc3RhZ2UgfCBcCisJCWdpdC0/Ki0tPyogKSBjb250aW51ZSA7OyBcCisJCWVzYWMgOyBcCisJCXRlc3QgLWYgIkRvY3VtZW50YXRpb24vJCR2LnR4dCIgfHwgXAorCQllY2hvICJubyBkb2M6ICQkdiI7IFwKKwkJc2VkIC1lICcxLC9eIyMjIGNvbW1hbmQgbGlzdC9kJyAtZSAnL14jL2QnIGNvbW1hbmQtbGlzdC50eHQgfCBcCisJCWdyZXAgLXEgIl4kJHZbIAldIiB8fCBcCisJCWNhc2UgIiQkdiIgaW4gXAorCQlnaXQpIDs7IFwKKwkJKikgZWNobyAibm8gbGluazogJCR2Ijs7IFwKKwkJZXNhYyA7IFwKKwlkb25lOyBcCisJKCBcCisJCXNlZCAtZSAnMSwvXiMjIyBjb21tYW5kIGxpc3QvZCcgXAorCQkgICAgLWUgJy9eIy9kJyBcCisJCSAgICAtZSAncy9bIAldLiovLycgXAorCQkgICAgLWUgJ3MvXi9saXN0ZWQgLycgY29tbWFuZC1saXN0LnR4dDsgXAorCQkkKE1BS0UpIC1DIERvY3VtZW50YXRpb24gcHJpbnQtbWFuMSB8IFwKKwkJZ3JlcCAnXC50eHQkJCcgfCBcCisJCXNlZCAtZSAnc3xEb2N1bWVudGF0aW9uL3xkb2N1bWVudGVkIHwnIFwKKwkJICAgIC1lICdzL1wudHh0Ly8nOyBcCisJKSB8IHdoaWxlIHJlYWQgaG93IGNtZDsgXAorCWRvIFwKKwkJY2FzZSAiICQoQUxMX0NPTU1BTkRTKSAiIGluIFwKKwkJKiIgJCRjbWQgIiopCTs7IFwKKwkJKikgZWNobyAicmVtb3ZlZCBidXQgJCRob3c6ICQkY21kIiA7OyBcCisJCWVzYWM7IFwKKwlkb25lICkgfCBzb3J0CisKKyMjIyBNYWtlIHN1cmUgYnVpbHQtaW5zIGRvIG5vdCBoYXZlIGR1cHMgYW5kIGxpc3RlZCBpbiBnaXQuYworIworY2hlY2stYnVpbHRpbnM6OgorCS4vY2hlY2stYnVpbHRpbnMuc2gKKworIyMjIFRlc3Qgc3VpdGUgY292ZXJhZ2UgdGVzdGluZworIworLlBIT05ZOiBjb3ZlcmFnZSBjb3ZlcmFnZS1jbGVhbiBjb3ZlcmFnZS1jb21waWxlIGNvdmVyYWdlLXRlc3QgY292ZXJhZ2UtcmVwb3J0CisuUEhPTlk6IGNvdmVyYWdlLWNsZWFuLXJlc3VsdHMKKworY292ZXJhZ2U6CisJJChNQUtFKSBjb3ZlcmFnZS10ZXN0CisJJChNQUtFKSBjb3ZlcmFnZS11bnRlc3RlZC1mdW5jdGlvbnMKKworb2JqZWN0X2RpcnMgOj0gJChzb3J0ICQoZGlyICQoT0JKRUNUUykpKQorY292ZXJhZ2UtY2xlYW4tcmVzdWx0czoKKwkkKFJNKSAkKGFkZHN1ZmZpeCAqLmdjb3YsJChvYmplY3RfZGlycykpCisJJChSTSkgJChhZGRzdWZmaXggKi5nY2RhLCQob2JqZWN0X2RpcnMpKQorCSQoUk0pIGNvdmVyYWdlLXVudGVzdGVkLWZ1bmN0aW9ucworCSQoUk0pIC1yIGNvdmVyX2RiLworCSQoUk0pIC1yIGNvdmVyX2RiX2h0bWwvCisKK2NvdmVyYWdlLWNsZWFuOiBjb3ZlcmFnZS1jbGVhbi1yZXN1bHRzCisJJChSTSkgJChhZGRzdWZmaXggKi5nY25vLCQob2JqZWN0X2RpcnMpKQorCitDT1ZFUkFHRV9DRkxBR1MgPSAkKENGTEFHUykgLU8wIC1mdGVzdC1jb3ZlcmFnZSAtZnByb2ZpbGUtYXJjcworQ09WRVJBR0VfTERGTEFHUyA9ICQoQ0ZMQUdTKSAgLU8wIC1sZ2NvdgorR0NPVkZMQUdTID0gLS1wcmVzZXJ2ZS1wYXRocyAtLWJyYW5jaC1wcm9iYWJpbGl0aWVzIC0tYWxsLWJsb2NrcworCitjb3ZlcmFnZS1jb21waWxlOgorCSQoTUFLRSkgQ0ZMQUdTPSIkKENPVkVSQUdFX0NGTEFHUykiIExERkxBR1M9IiQoQ09WRVJBR0VfTERGTEFHUykiIGFsbAorCitjb3ZlcmFnZS10ZXN0OiBjb3ZlcmFnZS1jbGVhbi1yZXN1bHRzIGNvdmVyYWdlLWNvbXBpbGUKKwkkKE1BS0UpIENGTEFHUz0iJChDT1ZFUkFHRV9DRkxBR1MpIiBMREZMQUdTPSIkKENPVkVSQUdFX0xERkxBR1MpIiBcCisJCURFRkFVTFRfVEVTVF9UQVJHRVQ9dGVzdCAtajEgdGVzdAorCitjb3ZlcmFnZS1yZXBvcnQ6CisJJChRVUlFVF9HQ09WKWZvciBkaXIgaW4gJChvYmplY3RfZGlycyk7IGRvIFwKKwkJJChHQ09WKSAkKEdDT1ZGTEFHUykgLS1vYmplY3QtZGlyZWN0b3J5PSQkZGlyICQkZGlyKi5jIHx8IGV4aXQ7IFwKKwlkb25lCisKK2NvdmVyYWdlLXVudGVzdGVkLWZ1bmN0aW9uczogY292ZXJhZ2UtcmVwb3J0CisJZ3JlcCAnXmZ1bmN0aW9uLipjYWxsZWQgMCAnICouYy5nY292IFwKKwkJfCBzZWQgLWUgJ3MvXChbXjpdKlwpXC5nY292OiAqZnVuY3Rpb24gXChbXiBdKlwpIGNhbGxlZC4qL1wxOiBcMi8nIFwKKwkJPiBjb3ZlcmFnZS11bnRlc3RlZC1mdW5jdGlvbnMKKworY292ZXJfZGI6IGNvdmVyYWdlLXJlcG9ydAorCWdjb3YycGVybCAtZGIgY292ZXJfZGIgKi5nY292CisKK2NvdmVyX2RiX2h0bWw6IGNvdmVyX2RiCisJY292ZXIgLXJlcG9ydCBodG1sIC1vdXRwdXRkaXIgY292ZXJfZGJfaHRtbCBjb3Zlcl9kYgorCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4MzczNQotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRQpAQCAtMCwwICsxLDU2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwlHaXQgLSB0aGUgc3R1cGlkIGNvbnRlbnQgdHJhY2tlcgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyJnaXQiIGNhbiBtZWFuIGFueXRoaW5nLCBkZXBlbmRpbmcgb24geW91ciBtb29kLgorCisgLSByYW5kb20gdGhyZWUtbGV0dGVyIGNvbWJpbmF0aW9uIHRoYXQgaXMgcHJvbm91bmNlYWJsZSwgYW5kIG5vdAorICAgYWN0dWFsbHkgdXNlZCBieSBhbnkgY29tbW9uIFVOSVggY29tbWFuZC4gIFRoZSBmYWN0IHRoYXQgaXQgaXMgYQorICAgbWlzcHJvbnVuY2lhdGlvbiBvZiAiZ2V0IiBtYXkgb3IgbWF5IG5vdCBiZSByZWxldmFudC4KKyAtIHN0dXBpZC4gY29udGVtcHRpYmxlIGFuZCBkZXNwaWNhYmxlLiBzaW1wbGUuIFRha2UgeW91ciBwaWNrIGZyb20gdGhlCisgICBkaWN0aW9uYXJ5IG9mIHNsYW5nLgorIC0gImdsb2JhbCBpbmZvcm1hdGlvbiB0cmFja2VyIjogeW91J3JlIGluIGEgZ29vZCBtb29kLCBhbmQgaXQgYWN0dWFsbHkKKyAgIHdvcmtzIGZvciB5b3UuIEFuZ2VscyBzaW5nLCBhbmQgYSBsaWdodCBzdWRkZW5seSBmaWxscyB0aGUgcm9vbS4KKyAtICJnb2RkYW1uIGlkaW90aWMgdHJ1Y2tsb2FkIG9mIHNoKnQiOiB3aGVuIGl0IGJyZWFrcworCitHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgordW51c3VhbGx5IHJpY2ggY29tbWFuZCBzZXQgdGhhdCBwcm92aWRlcyBib3RoIGhpZ2gtbGV2ZWwgb3BlcmF0aW9ucworYW5kIGZ1bGwgYWNjZXNzIHRvIGludGVybmFscy4KKworR2l0IGlzIGFuIE9wZW4gU291cmNlIHByb2plY3QgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiAoc29tZSBwYXJ0cyBvZiBpdCBhcmUgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2VzLAorY29tcGF0aWJsZSB3aXRoIHRoZSBHUEx2MikuIEl0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTGludXMKK1RvcnZhbGRzIHdpdGggaGVscCBvZiBhIGdyb3VwIG9mIGhhY2tlcnMgYXJvdW5kIHRoZSBuZXQuCisKK1BsZWFzZSByZWFkIHRoZSBmaWxlIElOU1RBTEwgZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCisKK1NlZSBEb2N1bWVudGF0aW9uL2dpdHR1dG9yaWFsLnR4dCB0byBnZXQgc3RhcnRlZCwgdGhlbiBzZWUKK0RvY3VtZW50YXRpb24vZ2l0ZXZlcnlkYXkudHh0IGZvciBhIHVzZWZ1bCBtaW5pbXVtIHNldCBvZiBjb21tYW5kcywgYW5kCitEb2N1bWVudGF0aW9uL2dpdC1jb21tYW5kbmFtZS50eHQgZm9yIGRvY3VtZW50YXRpb24gb2YgZWFjaCBjb21tYW5kLgorSWYgZ2l0IGhhcyBiZWVuIGNvcnJlY3RseSBpbnN0YWxsZWQsIHRoZW4gdGhlIHR1dG9yaWFsIGNhbiBhbHNvIGJlCityZWFkIHdpdGggIm1hbiBnaXR0dXRvcmlhbCIgb3IgImdpdCBoZWxwIHR1dG9yaWFsIiwgYW5kIHRoZQorZG9jdW1lbnRhdGlvbiBvZiBlYWNoIGNvbW1hbmQgd2l0aCAibWFuIGdpdC1jb21tYW5kbmFtZSIgb3IgImdpdCBoZWxwCitjb21tYW5kbmFtZSIuCisKK0NWUyB1c2VycyBtYXkgYWxzbyB3YW50IHRvIHJlYWQgRG9jdW1lbnRhdGlvbi9naXRjdnMtbWlncmF0aW9uLnR4dAorKCJtYW4gZ2l0Y3ZzLW1pZ3JhdGlvbiIgb3IgImdpdCBoZWxwIGN2cy1taWdyYXRpb24iIGlmIGdpdCBpcworaW5zdGFsbGVkKS4KKworTWFueSBHaXQgb25saW5lIHJlc291cmNlcyBhcmUgYWNjZXNzaWJsZSBmcm9tIGh0dHA6Ly9naXQtc2NtLmNvbS8KK2luY2x1ZGluZyBmdWxsIGRvY3VtZW50YXRpb24gYW5kIEdpdCByZWxhdGVkIHRvb2xzLgorCitUaGUgdXNlciBkaXNjdXNzaW9uIGFuZCBkZXZlbG9wbWVudCBvZiBHaXQgdGFrZSBwbGFjZSBvbiB0aGUgR2l0CittYWlsaW5nIGxpc3QgLS0gZXZlcnlvbmUgaXMgd2VsY29tZSB0byBwb3N0IGJ1ZyByZXBvcnRzLCBmZWF0dXJlCityZXF1ZXN0cywgY29tbWVudHMgYW5kIHBhdGNoZXMgdG8gZ2l0QHZnZXIua2VybmVsLm9yZyAocmVhZAorRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBmb3IgaW5zdHJ1Y3Rpb25zIG9uIHBhdGNoIHN1Ym1pc3Npb24pLgorVG8gc3Vic2NyaWJlIHRvIHRoZSBsaXN0LCBzZW5kIGFuIGVtYWlsIHdpdGgganVzdCAic3Vic2NyaWJlIGdpdCIgaW4KK3RoZSBib2R5IHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcuIFRoZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMgYXJlCithdmFpbGFibGUgYXQgaHR0cDovL25ld3MuZ21hbmUub3JnL2dtYW5lLmNvbXAudmVyc2lvbi1jb250cm9sLmdpdC8sCitodHRwOi8vbWFyYy5pbmZvLz9sPWdpdCBhbmQgb3RoZXIgYXJjaGl2YWwgc2l0ZXMuCisKK1RoZSBtYWludGFpbmVyIGZyZXF1ZW50bHkgc2VuZHMgdGhlICJXaGF0J3MgY29va2luZyIgcmVwb3J0cyB0aGF0CitsaXN0IHRoZSBjdXJyZW50IHN0YXR1cyBvZiB2YXJpb3VzIGRldmVsb3BtZW50IHRvcGljcyB0byB0aGUgbWFpbGluZworbGlzdC4gIFRoZSBkaXNjdXNzaW9uIGZvbGxvd2luZyB0aGVtIGdpdmUgYSBnb29kIHJlZmVyZW5jZSBmb3IKK3Byb2plY3Qgc3RhdHVzLCBkZXZlbG9wbWVudCBkaXJlY3Rpb24gYW5kIHJlbWFpbmluZyB0YXNrcy4KZGlmZiAtLWdpdCBhL1JlbE5vdGVzIGIvUmVsTm90ZXMKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uM2JhMTNjZQotLS0gL2Rldi9udWxsCisrKyBiL1JlbE5vdGVzCkBAIC0wLDAgKzEgQEAKK0RvY3VtZW50YXRpb24vUmVsTm90ZXMvMi43LjAudHh0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYWJzcGF0aC5jIGIvYWJzcGF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZGI0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hYnNwYXRoLmMKQEAgLTAsMCArMSwxODMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCisvKgorICogRG8gbm90IHVzZSB0aGlzIGZvciBpbnNwZWN0aW5nICp0cmFja2VkKiBjb250ZW50LiAgV2hlbiBwYXRoIGlzIGEKKyAqIHN5bWxpbmsgdG8gYSBkaXJlY3RvcnksIHdlIGRvIG5vdCB3YW50IHRvIHNheSBpdCBpcyBhIGRpcmVjdG9yeSB3aGVuCisgKiBkZWFsaW5nIHdpdGggdHJhY2tlZCBjb250ZW50IGluIHRoZSB3b3JraW5nIHRyZWUuCisgKi8KK2ludCBpc19kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlyZXR1cm4gKCFzdGF0KHBhdGgsICZzdCkgJiYgU19JU0RJUihzdC5zdF9tb2RlKSk7Cit9CisKKy8qIFdlIGFsbG93ICJyZWN1cnNpdmUiIHN5bWJvbGljIGxpbmtzLiBPbmx5IHdpdGhpbiByZWFzb24sIHRob3VnaC4gKi8KKyNkZWZpbmUgTUFYREVQVEggNQorCisvKgorICogUmV0dXJuIHRoZSByZWFsIHBhdGggKGkuZS4sIGFic29sdXRlIHBhdGgsIHdpdGggc3ltbGlua3MgcmVzb2x2ZWQKKyAqIGFuZCBleHRyYSBzbGFzaGVzIHJlbW92ZWQpIGVxdWl2YWxlbnQgdG8gdGhlIHNwZWNpZmllZCBwYXRoLiAgKElmCisgKiB5b3Ugd2FudCBhbiBhYnNvbHV0ZSBwYXRoIGJ1dCBkb24ndCBtaW5kIGxpbmtzLCB1c2UKKyAqIGFic29sdXRlX3BhdGgoKS4pICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhIHN0YXRpYworICogYnVmZmVyLgorICoKKyAqIFRoZSBpbnB1dCBhbmQgYWxsIGludGVybWVkaWF0ZSBwYXRocyBtdXN0IGJlIHNob3J0ZXIgdGhhbiBNQVhfUEFUSC4KKyAqIFRoZSBkaXJlY3RvcnkgcGFydCBvZiBwYXRoIChpLmUuLCBldmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0CisgKiBkaXJfc2VwKSBtdXN0IGRlbm90ZSBhIHZhbGlkLCBleGlzdGluZyBkaXJlY3RvcnksIGJ1dCB0aGUgbGFzdAorICogY29tcG9uZW50IG5lZWQgbm90IGV4aXN0LiAgSWYgZGllX29uX2Vycm9yIGlzIHNldCwgdGhlbiBkaWUgd2l0aCBhbgorICogaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZSBpZiB0aGVyZSBpcyBhIHByb2JsZW0uICBPdGhlcndpc2UsIHJldHVybgorICogTlVMTCBvbiBlcnJvcnMgKHdpdGhvdXQgZ2VuZXJhdGluZyBhbnkgb3V0cHV0KS4KKyAqCisgKiBJZiBwYXRoIGlzIG91ciBidWZmZXIsIHRoZW4gcmV0dXJuIHBhdGgsIGFzIGl0J3MgYWxyZWFkeSB3aGF0IHRoZQorICogdXNlciB3YW50cy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnJlYWxfcGF0aF9pbnRlcm5hbChjb25zdCBjaGFyICpwYXRoLCBpbnQgZGllX29uX2Vycm9yKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcmV0dmFsID0gTlVMTDsKKworCS8qCisJICogSWYgd2UgaGF2ZSB0byB0ZW1wb3JhcmlseSBjaGRpcigpLCBzdG9yZSB0aGUgb3JpZ2luYWwgQ1dECisJICogaGVyZSBzbyB0aGF0IHdlIGNhbiBjaGRpcigpIGJhY2sgdG8gaXQgYXQgdGhlIGVuZCBvZiB0aGUKKwkgKiBmdW5jdGlvbjoKKwkgKi8KKwlzdHJ1Y3Qgc3RyYnVmIGN3ZCA9IFNUUkJVRl9JTklUOworCisJaW50IGRlcHRoID0gTUFYREVQVEg7CisJY2hhciAqbGFzdF9lbGVtID0gTlVMTDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCS8qIFdlJ3ZlIGFscmVhZHkgZG9uZSBpdCAqLworCWlmIChwYXRoID09IHNiLmJ1ZikKKwkJcmV0dXJuIHBhdGg7CisKKwlpZiAoISpwYXRoKSB7CisJCWlmIChkaWVfb25fZXJyb3IpCisJCQlkaWUoIlRoZSBlbXB0eSBzdHJpbmcgaXMgbm90IGEgdmFsaWQgcGF0aCIpOworCQllbHNlCisJCQlnb3RvIGVycm9yX291dDsKKwl9CisKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlzdHJidWZfYWRkc3RyKCZzYiwgcGF0aCk7CisKKwl3aGlsZSAoZGVwdGgtLSkgeworCQlpZiAoIWlzX2RpcmVjdG9yeShzYi5idWYpKSB7CisJCQljaGFyICpsYXN0X3NsYXNoID0gZmluZF9sYXN0X2Rpcl9zZXAoc2IuYnVmKTsKKwkJCWlmIChsYXN0X3NsYXNoKSB7CisJCQkJbGFzdF9lbGVtID0geHN0cmR1cChsYXN0X3NsYXNoICsgMSk7CisJCQkJc3RyYnVmX3NldGxlbigmc2IsIGxhc3Rfc2xhc2ggLSBzYi5idWYgKyAxKTsKKwkJCX0gZWxzZSB7CisJCQkJbGFzdF9lbGVtID0geG1lbWR1cHooc2IuYnVmLCBzYi5sZW4pOworCQkJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQkJfQorCQl9CisKKwkJaWYgKHNiLmxlbikgeworCQkJaWYgKCFjd2QubGVuICYmIHN0cmJ1Zl9nZXRjd2QoJmN3ZCkpIHsKKwkJCQlpZiAoZGllX29uX2Vycm9yKQorCQkJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOworCQkJCWVsc2UKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQl9CisKKwkJCWlmIChjaGRpcihzYi5idWYpKSB7CisJCQkJaWYgKGRpZV9vbl9lcnJvcikKKwkJCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgc3dpdGNoIHRvICclcyciLAorCQkJCQkJICBzYi5idWYpOworCQkJCWVsc2UKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQl9CisJCX0KKwkJaWYgKHN0cmJ1Zl9nZXRjd2QoJnNiKSkgeworCQkJaWYgKGRpZV9vbl9lcnJvcikKKwkJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIpOworCQkJZWxzZQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQl9CisKKwkJaWYgKGxhc3RfZWxlbSkgeworCQkJaWYgKHNiLmxlbiAmJiAhaXNfZGlyX3NlcChzYi5idWZbc2IubGVuIC0gMV0pKQorCQkJCXN0cmJ1Zl9hZGRjaCgmc2IsICcvJyk7CisJCQlzdHJidWZfYWRkc3RyKCZzYiwgbGFzdF9lbGVtKTsKKwkJCWZyZWUobGFzdF9lbGVtKTsKKwkJCWxhc3RfZWxlbSA9IE5VTEw7CisJCX0KKworCQlpZiAoIWxzdGF0KHNiLmJ1ZiwgJnN0KSAmJiBTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIG5leHRfc2IgPSBTVFJCVUZfSU5JVDsKKwkJCXNzaXplX3QgbGVuID0gc3RyYnVmX3JlYWRsaW5rKCZuZXh0X3NiLCBzYi5idWYsIDApOworCQkJaWYgKGxlbiA8IDApIHsKKwkJCQlpZiAoZGllX29uX2Vycm9yKQorCQkJCQlkaWVfZXJybm8oIkludmFsaWQgc3ltbGluayAnJXMnIiwKKwkJCQkJCSAgc2IuYnVmKTsKKwkJCQllbHNlCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJfQorCQkJc3RyYnVmX3N3YXAoJnNiLCAmbmV4dF9zYik7CisJCQlzdHJidWZfcmVsZWFzZSgmbmV4dF9zYik7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorCisJcmV0dmFsID0gc2IuYnVmOworZXJyb3Jfb3V0OgorCWZyZWUobGFzdF9lbGVtKTsKKwlpZiAoY3dkLmxlbiAmJiBjaGRpcihjd2QuYnVmKSkKKwkJZGllX2Vycm5vKCJDb3VsZCBub3QgY2hhbmdlIGJhY2sgdG8gJyVzJyIsIGN3ZC5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZjd2QpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworY29uc3QgY2hhciAqcmVhbF9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIHJlYWxfcGF0aF9pbnRlcm5hbChwYXRoLCAxKTsKK30KKworY29uc3QgY2hhciAqcmVhbF9wYXRoX2lmX3ZhbGlkKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIHJlYWxfcGF0aF9pbnRlcm5hbChwYXRoLCAwKTsKK30KKworLyoKKyAqIFVzZSB0aGlzIHRvIGdldCBhbiBhYnNvbHV0ZSBwYXRoIGZyb20gYSByZWxhdGl2ZSBvbmUuIElmIHlvdSB3YW50CisgKiB0byByZXNvbHZlIGxpbmtzLCB5b3Ugc2hvdWxkIHVzZSByZWFsX3BhdGguCisgKi8KK2NvbnN0IGNoYXIgKmFic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmc2IsIHBhdGgpOworCXJldHVybiBzYi5idWY7Cit9CisKKy8qCisgKiBVbmxpa2UgcHJlZml4X3BhdGgsIHRoaXMgc2hvdWxkIGJlIHVzZWQgaWYgdGhlIG5hbWVkIGZpbGUgZG9lcworICogbm90IGhhdmUgdG8gaW50ZXJhY3Qgd2l0aCBpbmRleCBlbnRyeTsgaS5lLiBuYW1lIG9mIGEgcmFuZG9tIGZpbGUKKyAqIG9uIHRoZSBmaWxlc3lzdGVtLgorICovCitjb25zdCBjaGFyICpwcmVmaXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcGZ4LCBpbnQgcGZ4X2xlbiwgY29uc3QgY2hhciAqYXJnKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCisJaWYgKCFwZnhfbGVuIHx8IGlzX2Fic29sdXRlX3BhdGgoYXJnKSkKKwkJcmV0dXJuIGFyZzsKKwlzdHJidWZfcmVzZXQoJnBhdGgpOworCXN0cmJ1Zl9hZGQoJnBhdGgsIHBmeCwgcGZ4X2xlbik7CisJc3RyYnVmX2FkZHN0cigmcGF0aCwgYXJnKTsKKyNlbHNlCisJY2hhciAqcDsKKwkvKiBkb24ndCBhZGQgcHJlZml4IHRvIGFic29sdXRlIHBhdGhzLCBidXQgc3RpbGwgcmVwbGFjZSAnXCcgYnkgJy8nICovCisJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwlpZiAoaXNfYWJzb2x1dGVfcGF0aChhcmcpKQorCQlwZnhfbGVuID0gMDsKKwllbHNlIGlmIChwZnhfbGVuKQorCQlzdHJidWZfYWRkKCZwYXRoLCBwZngsIHBmeF9sZW4pOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIGFyZyk7CisJZm9yIChwID0gcGF0aC5idWYgKyBwZnhfbGVuOyAqcDsgcCsrKQorCQlpZiAoKnAgPT0gJ1xcJykKKwkJCSpwID0gJy8nOworI2VuZGlmCisJcmV0dXJuIHBhdGguYnVmOworfQpkaWZmIC0tZ2l0IGEvYWNsb2NhbC5tNCBiL2FjbG9jYWwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExYmM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FjbG9jYWwubTQKQEAgLTAsMCArMSw0MCBAQAorZG5sIENoZWNrIGZvciBzb2NrbGVuX3Q6IGhpc3RvcmljYWxseSBvbiBCU0QgaXQgaXMgYW4gaW50LCBhbmQgaW4KK2RubCBQT1NJWCAxZyBpdCBpcyBhIHR5cGUgb2YgaXRzIG93biwgYnV0IHNvbWUgcGxhdGZvcm1zIHVzZSBkaWZmZXJlbnQKK2RubCB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50IHRvIGdldHNvY2tvcHQsIGdldHBlZXJuYW1lLCBldGMuICBTbyB3ZQorZG5sIGhhdmUgdG8gdGVzdCB0byBmaW5kIHNvbWV0aGluZyB0aGF0IHdpbGwgd29yay4KK0FDX0RFRlVOKFtUWVBFX1NPQ0tMRU5fVF0sCitbCisgICBBQ19DSEVDS19UWVBFKFtzb2NrbGVuX3RdLCAsWworICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc29ja2xlbl90IGVxdWl2YWxlbnRdKQorICAgICAgQUNfQ0FDSEVfVkFMKFtnaXRfY3Zfc29ja2xlbl90X2VxdWl2XSwKKyAgICAgIFsKKyAgICAgICAgICMgU3lzdGVtcyBoYXZlIGVpdGhlciAic3RydWN0IHNvY2thZGRyICoiIG9yCisgICAgICAgICAjICJ2b2lkICoiIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gZ2V0cGVlcm5hbWUKKyAgICAgICAgIGdpdF9jdl9zb2NrbGVuX3RfZXF1aXY9CisgICAgICAgICBmb3IgYXJnMiBpbiAic3RydWN0IHNvY2thZGRyIiB2b2lkOyBkbworICAgICAgICAgICAgZm9yIHQgaW4gaW50IHNpemVfdCB1bnNpZ25lZCBsb25nICJ1bnNpZ25lZCBsb25nIjsgZG8KKyAgICAgICAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWworICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworICAgICAgICAgICAgICAgICAgaW50IGdldHBlZXJuYW1lIChpbnQsICRhcmcyICosICR0ICopOworICAgICAgICAgICAgICAgXSxbCisgICAgICAgICAgICAgICAgICAkdCBsZW47CisgICAgICAgICAgICAgICAgICBnZXRwZWVybmFtZSgwLDAsJmxlbik7CisgICAgICAgICAgICAgICBdKV0sWworICAgICAgICAgICAgICAgICAgZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdj0iJHQiCisgICAgICAgICAgICAgICAgICBicmVhayAyCisgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgZG9uZQorCisgICAgICAgICBpZiB0ZXN0ICJ4JGdpdF9jdl9zb2NrbGVuX3RfZXF1aXYiID0geDsgdGhlbgorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtDYW5ub3QgZmluZCBhIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdF0pCisgICAgICAgICBmaQorICAgICAgXSkKKyAgICAgIEFDX01TR19SRVNVTFQoJGdpdF9jdl9zb2NrbGVuX3RfZXF1aXYpCisgICAgICBBQ19ERUZJTkVfVU5RVU9URUQoc29ja2xlbl90LCAkZ2l0X2N2X3NvY2tsZW5fdF9lcXVpdiwKKwkJCVt0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3QgaWYgbm90IGRlZmluZWRdKV0sCisgICAgICBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dKQorXSkKZGlmZiAtLWdpdCBhL2FkdmljZS5jIGIvYWR2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRjNWNmMQotLS0gL2Rldi9udWxsCisrKyBiL2FkdmljZS5jCkBAIC0wLDAgKzEsMTE5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IGFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCA9IDE7CitpbnQgYWR2aWNlX3B1c2hfbm9uX2ZmX2N1cnJlbnQgPSAxOworaW50IGFkdmljZV9wdXNoX25vbl9mZl9tYXRjaGluZyA9IDE7CitpbnQgYWR2aWNlX3B1c2hfYWxyZWFkeV9leGlzdHMgPSAxOworaW50IGFkdmljZV9wdXNoX2ZldGNoX2ZpcnN0ID0gMTsKK2ludCBhZHZpY2VfcHVzaF9uZWVkc19mb3JjZSA9IDE7CitpbnQgYWR2aWNlX3N0YXR1c19oaW50cyA9IDE7CitpbnQgYWR2aWNlX3N0YXR1c191X29wdGlvbiA9IDE7CitpbnQgYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UgPSAxOworaW50IGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0ID0gMTsKK2ludCBhZHZpY2VfaW1wbGljaXRfaWRlbnRpdHkgPSAxOworaW50IGFkdmljZV9kZXRhY2hlZF9oZWFkID0gMTsKK2ludCBhZHZpY2Vfc2V0X3Vwc3RyZWFtX2ZhaWx1cmUgPSAxOworaW50IGFkdmljZV9vYmplY3RfbmFtZV93YXJuaW5nID0gMTsKK2ludCBhZHZpY2Vfcm1faGludHMgPSAxOworCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAqcHJlZmVyZW5jZTsKK30gYWR2aWNlX2NvbmZpZ1tdID0geworCXsgInB1c2h1cGRhdGVyZWplY3RlZCIsICZhZHZpY2VfcHVzaF91cGRhdGVfcmVqZWN0ZWQgfSwKKwl7ICJwdXNobm9uZmZjdXJyZW50IiwgJmFkdmljZV9wdXNoX25vbl9mZl9jdXJyZW50IH0sCisJeyAicHVzaG5vbmZmbWF0Y2hpbmciLCAmYWR2aWNlX3B1c2hfbm9uX2ZmX21hdGNoaW5nIH0sCisJeyAicHVzaGFscmVhZHlleGlzdHMiLCAmYWR2aWNlX3B1c2hfYWxyZWFkeV9leGlzdHMgfSwKKwl7ICJwdXNoZmV0Y2hmaXJzdCIsICZhZHZpY2VfcHVzaF9mZXRjaF9maXJzdCB9LAorCXsgInB1c2huZWVkc2ZvcmNlIiwgJmFkdmljZV9wdXNoX25lZWRzX2ZvcmNlIH0sCisJeyAic3RhdHVzaGludHMiLCAmYWR2aWNlX3N0YXR1c19oaW50cyB9LAorCXsgInN0YXR1c3VvcHRpb24iLCAmYWR2aWNlX3N0YXR1c191X29wdGlvbiB9LAorCXsgImNvbW1pdGJlZm9yZW1lcmdlIiwgJmFkdmljZV9jb21taXRfYmVmb3JlX21lcmdlIH0sCisJeyAicmVzb2x2ZWNvbmZsaWN0IiwgJmFkdmljZV9yZXNvbHZlX2NvbmZsaWN0IH0sCisJeyAiaW1wbGljaXRpZGVudGl0eSIsICZhZHZpY2VfaW1wbGljaXRfaWRlbnRpdHkgfSwKKwl7ICJkZXRhY2hlZGhlYWQiLCAmYWR2aWNlX2RldGFjaGVkX2hlYWQgfSwKKwl7ICJzZXR1cHN0cmVhbWZhaWx1cmUiLCAmYWR2aWNlX3NldF91cHN0cmVhbV9mYWlsdXJlIH0sCisJeyAib2JqZWN0bmFtZXdhcm5pbmciLCAmYWR2aWNlX29iamVjdF9uYW1lX3dhcm5pbmcgfSwKKwl7ICJybWhpbnRzIiwgJmFkdmljZV9ybV9oaW50cyB9LAorCisJLyogbWFrZSB0aGlzIGFuIGFsaWFzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJeyAicHVzaG5vbmZhc3Rmb3J3YXJkIiwgJmFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCB9Cit9OworCit2b2lkIGFkdmlzZShjb25zdCBjaGFyICphZHZpY2UsIC4uLikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXZhX2xpc3QgcGFyYW1zOworCWNvbnN0IGNoYXIgKmNwLCAqbnA7CisKKwl2YV9zdGFydChwYXJhbXMsIGFkdmljZSk7CisJc3RyYnVmX3ZhZGRmKCZidWYsIGFkdmljZSwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKworCWZvciAoY3AgPSBidWYuYnVmOyAqY3A7IGNwID0gbnApIHsKKwkJbnAgPSBzdHJjaHJudWwoY3AsICdcbicpOworCQlmcHJpbnRmKHN0ZGVyciwJXygiaGludDogJS4qc1xuIiksIChpbnQpKG5wIC0gY3ApLCBjcCk7CisJCWlmICgqbnApCisJCQlucCsrOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworaW50IGdpdF9kZWZhdWx0X2FkdmljZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBjaGFyICprOworCWludCBpOworCisJaWYgKCFza2lwX3ByZWZpeCh2YXIsICJhZHZpY2UuIiwgJmspKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkdmljZV9jb25maWcpOyBpKyspIHsKKwkJaWYgKHN0cmNtcChrLCBhZHZpY2VfY29uZmlnW2ldLm5hbWUpKQorCQkJY29udGludWU7CisJCSphZHZpY2VfY29uZmlnW2ldLnByZWZlcmVuY2UgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZXJyb3JfcmVzb2x2ZV9jb25mbGljdChjb25zdCBjaGFyICptZSkKK3sKKwllcnJvcigiJXMgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIiwgbWUpOworCWlmIChhZHZpY2VfcmVzb2x2ZV9jb25mbGljdCkKKwkJLyoKKwkJICogTWVzc2FnZSB1c2VkIGJvdGggd2hlbiAnZ2l0IGNvbW1pdCcgZmFpbHMgYW5kIHdoZW4KKwkJICogb3RoZXIgY29tbWFuZHMgZG9pbmcgYSBtZXJnZSBkby4KKwkJICovCisJCWFkdmlzZShfKCJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorCQkJICJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIikpOworCXJldHVybiAtMTsKK30KKwordm9pZCBOT1JFVFVSTiBkaWVfcmVzb2x2ZV9jb25mbGljdChjb25zdCBjaGFyICptZSkKK3sKKwllcnJvcl9yZXNvbHZlX2NvbmZsaWN0KG1lKTsKKwlkaWUoIkV4aXRpbmcgYmVjYXVzZSBvZiBhbiB1bnJlc29sdmVkIGNvbmZsaWN0LiIpOworfQorCit2b2lkIE5PUkVUVVJOIGRpZV9jb25jbHVkZV9tZXJnZSh2b2lkKQoreworCWVycm9yKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIpKTsKKwlpZiAoYWR2aWNlX3Jlc29sdmVfY29uZmxpY3QpCisJCWFkdmlzZShfKCJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIG1lcmdpbmcuIikpOworCWRpZShfKCJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iKSk7Cit9CisKK3ZvaWQgZGV0YWNoX2FkdmljZShjb25zdCBjaGFyICpuZXdfbmFtZSkKK3sKKwljb25zdCBjaGFyIGZtdFtdID0KKwkiTm90ZTogY2hlY2tpbmcgb3V0ICclcycuXG5cbiIKKwkiWW91IGFyZSBpbiAnZGV0YWNoZWQgSEVBRCcgc3RhdGUuIFlvdSBjYW4gbG9vayBhcm91bmQsIG1ha2UgZXhwZXJpbWVudGFsXG4iCisJImNoYW5nZXMgYW5kIGNvbW1pdCB0aGVtLCBhbmQgeW91IGNhbiBkaXNjYXJkIGFueSBjb21taXRzIHlvdSBtYWtlIGluIHRoaXNcbiIKKwkic3RhdGUgd2l0aG91dCBpbXBhY3RpbmcgYW55IGJyYW5jaGVzIGJ5IHBlcmZvcm1pbmcgYW5vdGhlciBjaGVja291dC5cblxuIgorCSJJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIHJldGFpbiBjb21taXRzIHlvdSBjcmVhdGUsIHlvdSBtYXlcbiIKKwkiZG8gc28gKG5vdyBvciBsYXRlcikgYnkgdXNpbmcgLWIgd2l0aCB0aGUgY2hlY2tvdXQgY29tbWFuZCBhZ2Fpbi4gRXhhbXBsZTpcblxuIgorCSIgIGdpdCBjaGVja291dCAtYiA8bmV3LWJyYW5jaC1uYW1lPlxuXG4iOworCisJZnByaW50ZihzdGRlcnIsIGZtdCwgbmV3X25hbWUpOworfQpkaWZmIC0tZ2l0IGEvYWR2aWNlLmggYi9hZHZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQxYTU1Ci0tLSAvZGV2L251bGwKKysrIGIvYWR2aWNlLmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBBRFZJQ0VfSAorI2RlZmluZSBBRFZJQ0VfSAorCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2V4dGVybiBpbnQgYWR2aWNlX3B1c2hfdXBkYXRlX3JlamVjdGVkOworZXh0ZXJuIGludCBhZHZpY2VfcHVzaF9ub25fZmZfY3VycmVudDsKK2V4dGVybiBpbnQgYWR2aWNlX3B1c2hfbm9uX2ZmX21hdGNoaW5nOworZXh0ZXJuIGludCBhZHZpY2VfcHVzaF9hbHJlYWR5X2V4aXN0czsKK2V4dGVybiBpbnQgYWR2aWNlX3B1c2hfZmV0Y2hfZmlyc3Q7CitleHRlcm4gaW50IGFkdmljZV9wdXNoX25lZWRzX2ZvcmNlOworZXh0ZXJuIGludCBhZHZpY2Vfc3RhdHVzX2hpbnRzOworZXh0ZXJuIGludCBhZHZpY2Vfc3RhdHVzX3Vfb3B0aW9uOworZXh0ZXJuIGludCBhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZTsKK2V4dGVybiBpbnQgYWR2aWNlX3Jlc29sdmVfY29uZmxpY3Q7CitleHRlcm4gaW50IGFkdmljZV9pbXBsaWNpdF9pZGVudGl0eTsKK2V4dGVybiBpbnQgYWR2aWNlX2RldGFjaGVkX2hlYWQ7CitleHRlcm4gaW50IGFkdmljZV9zZXRfdXBzdHJlYW1fZmFpbHVyZTsKK2V4dGVybiBpbnQgYWR2aWNlX29iamVjdF9uYW1lX3dhcm5pbmc7CitleHRlcm4gaW50IGFkdmljZV9ybV9oaW50czsKKworaW50IGdpdF9kZWZhdWx0X2FkdmljZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSk7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQordm9pZCBhZHZpc2UoY29uc3QgY2hhciAqYWR2aWNlLCAuLi4pOworaW50IGVycm9yX3Jlc29sdmVfY29uZmxpY3QoY29uc3QgY2hhciAqbWUpOworZXh0ZXJuIHZvaWQgTk9SRVRVUk4gZGllX3Jlc29sdmVfY29uZmxpY3QoY29uc3QgY2hhciAqbWUpOwordm9pZCBOT1JFVFVSTiBkaWVfY29uY2x1ZGVfbWVyZ2Uodm9pZCk7Cit2b2lkIGRldGFjaF9hZHZpY2UoY29uc3QgY2hhciAqbmV3X25hbWUpOworCisjZW5kaWYgLyogQURWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FsaWFzLmMgYi9hbGlhcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMTIyOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hbGlhcy5jCkBAIC0wLDAgKzEsNzcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitjaGFyICphbGlhc19sb29rdXAoY29uc3QgY2hhciAqYWxpYXMpCit7CisJY2hhciAqdiA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBrZXkgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkZigma2V5LCAiYWxpYXMuJXMiLCBhbGlhcyk7CisJaWYgKGdpdF9jb25maWdfa2V5X2lzX3ZhbGlkKGtleS5idWYpKQorCQlnaXRfY29uZmlnX2dldF9zdHJpbmcoa2V5LmJ1ZiwgJnYpOworCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCXJldHVybiB2OworfQorCisjZGVmaW5lIFNQTElUX0NNRExJTkVfQkFEX0VORElORyAxCisjZGVmaW5lIFNQTElUX0NNRExJTkVfVU5DTE9TRURfUVVPVEUgMgorc3RhdGljIGNvbnN0IGNoYXIgKnNwbGl0X2NtZGxpbmVfZXJyb3JzW10gPSB7CisJImNtZGxpbmUgZW5kcyB3aXRoIFxcIiwKKwkidW5jbG9zZWQgcXVvdGUiCit9OworCitpbnQgc3BsaXRfY21kbGluZShjaGFyICpjbWRsaW5lLCBjb25zdCBjaGFyICoqKmFyZ3YpCit7CisJaW50IHNyYywgZHN0LCBjb3VudCA9IDAsIHNpemUgPSAxNjsKKwljaGFyIHF1b3RlZCA9IDA7CisKKwkqYXJndiA9IHhtYWxsb2Moc2l6ZW9mKCoqYXJndikgKiBzaXplKTsKKworCS8qIHNwbGl0IGFsaWFzX3N0cmluZyAqLworCSgqYXJndilbY291bnQrK10gPSBjbWRsaW5lOworCWZvciAoc3JjID0gZHN0ID0gMDsgY21kbGluZVtzcmNdOykgeworCQljaGFyIGMgPSBjbWRsaW5lW3NyY107CisJCWlmICghcXVvdGVkICYmIGlzc3BhY2UoYykpIHsKKwkJCWNtZGxpbmVbZHN0KytdID0gMDsKKwkJCXdoaWxlIChjbWRsaW5lWysrc3JjXQorCQkJCQkmJiBpc3NwYWNlKGNtZGxpbmVbc3JjXSkpCisJCQkJOyAvKiBza2lwICovCisJCQlBTExPQ19HUk9XKCphcmd2LCBjb3VudCArIDEsIHNpemUpOworCQkJKCphcmd2KVtjb3VudCsrXSA9IGNtZGxpbmUgKyBkc3Q7CisJCX0gZWxzZSBpZiAoIXF1b3RlZCAmJiAoYyA9PSAnXCcnIHx8IGMgPT0gJyInKSkgeworCQkJcXVvdGVkID0gYzsKKwkJCXNyYysrOworCQl9IGVsc2UgaWYgKGMgPT0gcXVvdGVkKSB7CisJCQlxdW90ZWQgPSAwOworCQkJc3JjKys7CisJCX0gZWxzZSB7CisJCQlpZiAoYyA9PSAnXFwnICYmIHF1b3RlZCAhPSAnXCcnKSB7CisJCQkJc3JjKys7CisJCQkJYyA9IGNtZGxpbmVbc3JjXTsKKwkJCQlpZiAoIWMpIHsKKwkJCQkJZnJlZSgqYXJndik7CisJCQkJCSphcmd2ID0gTlVMTDsKKwkJCQkJcmV0dXJuIC1TUExJVF9DTURMSU5FX0JBRF9FTkRJTkc7CisJCQkJfQorCQkJfQorCQkJY21kbGluZVtkc3QrK10gPSBjOworCQkJc3JjKys7CisJCX0KKwl9CisKKwljbWRsaW5lW2RzdF0gPSAwOworCisJaWYgKHF1b3RlZCkgeworCQlmcmVlKCphcmd2KTsKKwkJKmFyZ3YgPSBOVUxMOworCQlyZXR1cm4gLVNQTElUX0NNRExJTkVfVU5DTE9TRURfUVVPVEU7CisJfQorCisJQUxMT0NfR1JPVygqYXJndiwgY291bnQgKyAxLCBzaXplKTsKKwkoKmFyZ3YpW2NvdW50XSA9IE5VTEw7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK2NvbnN0IGNoYXIgKnNwbGl0X2NtZGxpbmVfc3RyZXJyb3IoaW50IHNwbGl0X2NtZGxpbmVfZXJybm8pCit7CisJcmV0dXJuIHNwbGl0X2NtZGxpbmVfZXJyb3JzWy1zcGxpdF9jbWRsaW5lX2Vycm5vIC0gMV07Cit9CmRpZmYgLS1naXQgYS9hbGxvYy5jIGIvYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmFmYWRmCi0tLSAvZGV2L251bGwKKysrIGIvYWxsb2MuYwpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIGFsbG9jLmMgIC0gc3BlY2lhbGl6ZWQgYWxsb2NhdG9yIGZvciBpbnRlcm5hbCBvYmplY3RzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExpbnVzIFRvcnZhbGRzCisgKgorICogVGhlIHN0YW5kYXJkIG1hbGxvYy9mcmVlIHdhc3RlcyB0b28gbXVjaCBzcGFjZSBmb3Igb2JqZWN0cywgcGFydGx5IGJlY2F1c2UKKyAqIGl0IG1haW50YWlucyBhbGwgdGhlIGFsbG9jYXRpb24gaW5mcmFzdHJ1Y3R1cmUgKHdoaWNoIGlzbid0IG5lZWRlZCwgc2luY2UKKyAqIHdlIG5ldmVyIGZyZWUgYW4gb2JqZWN0IGRlc2NyaXB0b3IgYW55d2F5KSwgYnV0IGV2ZW4gbW9yZSBiZWNhdXNlIGl0IGVuZHMKKyAqIHVwIHdpdGggbWF4aW1hbCBhbGlnbm1lbnQgYmVjYXVzZSBpdCBkb2Vzbid0IGtub3cgd2hhdCB0aGUgb2JqZWN0IGFsaWdubWVudAorICogZm9yIHRoZSBuZXcgYWxsb2NhdGlvbiBpcy4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKworI2RlZmluZSBCTE9DS0lORyAxMDI0CisKK3VuaW9uIGFueV9vYmplY3QgeworCXN0cnVjdCBvYmplY3Qgb2JqZWN0OworCXN0cnVjdCBibG9iIGJsb2I7CisJc3RydWN0IHRyZWUgdHJlZTsKKwlzdHJ1Y3QgY29tbWl0IGNvbW1pdDsKKwlzdHJ1Y3QgdGFnIHRhZzsKK307CisKK3N0cnVjdCBhbGxvY19zdGF0ZSB7CisJaW50IGNvdW50OyAvKiB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgYWxsb2NhdGVkICovCisJaW50IG5yOyAgICAvKiBudW1iZXIgb2Ygbm9kZXMgbGVmdCBpbiBjdXJyZW50IGFsbG9jYXRpb24gKi8KKwl2b2lkICpwOyAgIC8qIGZpcnN0IGZyZWUgbm9kZSBpbiBjdXJyZW50IGFsbG9jYXRpb24gKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYWxsb2Nfbm9kZShzdHJ1Y3QgYWxsb2Nfc3RhdGUgKnMsIHNpemVfdCBub2RlX3NpemUpCit7CisJdm9pZCAqcmV0OworCisJaWYgKCFzLT5ucikgeworCQlzLT5uciA9IEJMT0NLSU5HOworCQlzLT5wID0geG1hbGxvYyhCTE9DS0lORyAqIG5vZGVfc2l6ZSk7CisJfQorCXMtPm5yLS07CisJcy0+Y291bnQrKzsKKwlyZXQgPSBzLT5wOworCXMtPnAgPSAoY2hhciAqKXMtPnAgKyBub2RlX3NpemU7CisJbWVtc2V0KHJldCwgMCwgbm9kZV9zaXplKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGFsbG9jX3N0YXRlIGJsb2Jfc3RhdGU7Cit2b2lkICphbGxvY19ibG9iX25vZGUodm9pZCkKK3sKKwlzdHJ1Y3QgYmxvYiAqYiA9IGFsbG9jX25vZGUoJmJsb2Jfc3RhdGUsIHNpemVvZihzdHJ1Y3QgYmxvYikpOworCWItPm9iamVjdC50eXBlID0gT0JKX0JMT0I7CisJcmV0dXJuIGI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWxsb2Nfc3RhdGUgdHJlZV9zdGF0ZTsKK3ZvaWQgKmFsbG9jX3RyZWVfbm9kZSh2b2lkKQoreworCXN0cnVjdCB0cmVlICp0ID0gYWxsb2Nfbm9kZSgmdHJlZV9zdGF0ZSwgc2l6ZW9mKHN0cnVjdCB0cmVlKSk7CisJdC0+b2JqZWN0LnR5cGUgPSBPQkpfVFJFRTsKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIHN0cnVjdCBhbGxvY19zdGF0ZSB0YWdfc3RhdGU7Cit2b2lkICphbGxvY190YWdfbm9kZSh2b2lkKQoreworCXN0cnVjdCB0YWcgKnQgPSBhbGxvY19ub2RlKCZ0YWdfc3RhdGUsIHNpemVvZihzdHJ1Y3QgdGFnKSk7CisJdC0+b2JqZWN0LnR5cGUgPSBPQkpfVEFHOworCXJldHVybiB0OworfQorCitzdGF0aWMgc3RydWN0IGFsbG9jX3N0YXRlIG9iamVjdF9zdGF0ZTsKK3ZvaWQgKmFsbG9jX29iamVjdF9ub2RlKHZvaWQpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gYWxsb2Nfbm9kZSgmb2JqZWN0X3N0YXRlLCBzaXplb2YodW5pb24gYW55X29iamVjdCkpOworCW9iai0+dHlwZSA9IE9CSl9OT05FOworCXJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWxsb2Nfc3RhdGUgY29tbWl0X3N0YXRlOworCit1bnNpZ25lZCBpbnQgYWxsb2NfY29tbWl0X2luZGV4KHZvaWQpCit7CisJc3RhdGljIHVuc2lnbmVkIGludCBjb3VudDsKKwlyZXR1cm4gY291bnQrKzsKK30KKwordm9pZCAqYWxsb2NfY29tbWl0X25vZGUodm9pZCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjID0gYWxsb2Nfbm9kZSgmY29tbWl0X3N0YXRlLCBzaXplb2Yoc3RydWN0IGNvbW1pdCkpOworCWMtPm9iamVjdC50eXBlID0gT0JKX0NPTU1JVDsKKwljLT5pbmRleCA9IGFsbG9jX2NvbW1pdF9pbmRleCgpOworCXJldHVybiBjOworfQorCitzdGF0aWMgdm9pZCByZXBvcnQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGNvdW50LCBzaXplX3Qgc2l6ZSkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiUxMHM6ICU4dSAoJSJQUkl1TUFYIiBrQilcbiIsCisJCQluYW1lLCBjb3VudCwgKHVpbnRtYXhfdCkgc2l6ZSk7Cit9CisKKyNkZWZpbmUgUkVQT1JUKG5hbWUsIHR5cGUpCVwKKyAgICByZXBvcnQoI25hbWUsIG5hbWUjI19zdGF0ZS5jb3VudCwgbmFtZSMjX3N0YXRlLmNvdW50ICogc2l6ZW9mKHR5cGUpID4+IDEwKQorCit2b2lkIGFsbG9jX3JlcG9ydCh2b2lkKQoreworCVJFUE9SVChibG9iLCBzdHJ1Y3QgYmxvYik7CisJUkVQT1JUKHRyZWUsIHN0cnVjdCB0cmVlKTsKKwlSRVBPUlQoY29tbWl0LCBzdHJ1Y3QgY29tbWl0KTsKKwlSRVBPUlQodGFnLCBzdHJ1Y3QgdGFnKTsKKwlSRVBPUlQob2JqZWN0LCB1bmlvbiBhbnlfb2JqZWN0KTsKK30KZGlmZiAtLWdpdCBhL2FyY2hpdmUtdGFyLmMgYi9hcmNoaXZlLXRhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwMWNhOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoaXZlLXRhci5jCkBAIC0wLDAgKzEsNDUzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IFJlbmUgU2NoYXJmZQorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0YXIuaCIKKyNpbmNsdWRlICJhcmNoaXZlLmgiCisjaW5jbHVkZSAic3RyZWFtaW5nLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKworI2RlZmluZSBSRUNPUkRTSVpFCSg1MTIpCisjZGVmaW5lIEJMT0NLU0laRQkoUkVDT1JEU0laRSAqIDIwKQorCitzdGF0aWMgY2hhciBibG9ja1tCTE9DS1NJWkVdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCitzdGF0aWMgaW50IHRhcl91bWFzayA9IDAwMjsKKworc3RhdGljIGludCB3cml0ZV90YXJfZmlsdGVyX2FyY2hpdmUoY29uc3Qgc3RydWN0IGFyY2hpdmVyICphciwKKwkJCQkgICAgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MpOworCisvKiB3cml0ZXMgb3V0IHRoZSB3aG9sZSBibG9jaywgYnV0IG9ubHkgaWYgaXQgaXMgZnVsbCAqLworc3RhdGljIHZvaWQgd3JpdGVfaWZfbmVlZGVkKHZvaWQpCit7CisJaWYgKG9mZnNldCA9PSBCTE9DS1NJWkUpIHsKKwkJd3JpdGVfb3JfZGllKDEsIGJsb2NrLCBCTE9DS1NJWkUpOworCQlvZmZzZXQgPSAwOworCX0KK30KKworLyoKKyAqIHF1ZXVlcyB1cCB3cml0ZXMsIHNvIHRoYXQgYWxsIG91ciB3cml0ZSgyKSBjYWxscyB3cml0ZSBleGFjdGx5IG9uZQorICogZnVsbCBibG9jazsgcGFkcyB3cml0ZXMgdG8gUkVDT1JEU0laRQorICovCitzdGF0aWMgdm9pZCBkb193cml0ZV9ibG9ja2VkKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwljb25zdCBjaGFyICpidWYgPSBkYXRhOworCisJaWYgKG9mZnNldCkgeworCQl1bnNpZ25lZCBsb25nIGNodW5rID0gQkxPQ0tTSVpFIC0gb2Zmc2V0OworCQlpZiAoc2l6ZSA8IGNodW5rKQorCQkJY2h1bmsgPSBzaXplOworCQltZW1jcHkoYmxvY2sgKyBvZmZzZXQsIGJ1ZiwgY2h1bmspOworCQlzaXplIC09IGNodW5rOworCQlvZmZzZXQgKz0gY2h1bms7CisJCWJ1ZiArPSBjaHVuazsKKwkJd3JpdGVfaWZfbmVlZGVkKCk7CisJfQorCXdoaWxlIChzaXplID49IEJMT0NLU0laRSkgeworCQl3cml0ZV9vcl9kaWUoMSwgYnVmLCBCTE9DS1NJWkUpOworCQlzaXplIC09IEJMT0NLU0laRTsKKwkJYnVmICs9IEJMT0NLU0laRTsKKwl9CisJaWYgKHNpemUpIHsKKwkJbWVtY3B5KGJsb2NrICsgb2Zmc2V0LCBidWYsIHNpemUpOworCQlvZmZzZXQgKz0gc2l6ZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9yZWNvcmQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRhaWw7CisJdGFpbCA9IG9mZnNldCAlIFJFQ09SRFNJWkU7CisJaWYgKHRhaWwpICB7CisJCW1lbXNldChibG9jayArIG9mZnNldCwgMCwgUkVDT1JEU0laRSAtIHRhaWwpOworCQlvZmZzZXQgKz0gUkVDT1JEU0laRSAtIHRhaWw7CisJfQorCXdyaXRlX2lmX25lZWRlZCgpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9ibG9ja2VkKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlkb193cml0ZV9ibG9ja2VkKGRhdGEsIHNpemUpOworCWZpbmlzaF9yZWNvcmQoKTsKK30KKworLyoKKyAqIFRoZSBlbmQgb2YgdGFyIGFyY2hpdmVzIGlzIG1hcmtlZCBieSAyKjUxMiBudWwgYnl0ZXMgYW5kIGFmdGVyIHRoYXQKKyAqIGZvbGxvd3MgdGhlIHJlc3Qgb2YgdGhlIGJsb2NrIChpZiBhbnkpLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV90cmFpbGVyKHZvaWQpCit7CisJaW50IHRhaWwgPSBCTE9DS1NJWkUgLSBvZmZzZXQ7CisJbWVtc2V0KGJsb2NrICsgb2Zmc2V0LCAwLCB0YWlsKTsKKwl3cml0ZV9vcl9kaWUoMSwgYmxvY2ssIEJMT0NLU0laRSk7CisJaWYgKHRhaWwgPCAyICogUkVDT1JEU0laRSkgeworCQltZW1zZXQoYmxvY2ssIDAsIG9mZnNldCk7CisJCXdyaXRlX29yX2RpZSgxLCBibG9jaywgQkxPQ0tTSVpFKTsKKwl9Cit9CisKKy8qCisgKiBxdWV1ZXMgdXAgd3JpdGVzLCBzbyB0aGF0IGFsbCBvdXIgd3JpdGUoMikgY2FsbHMgd3JpdGUgZXhhY3RseSBvbmUKKyAqIGZ1bGwgYmxvY2s7IHBhZHMgd3JpdGVzIHRvIFJFQ09SRFNJWkUKKyAqLworc3RhdGljIGludCBzdHJlYW1fYmxvY2tlZChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBnaXRfaXN0cmVhbSAqc3Q7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc3o7CisJY2hhciBidWZbQkxPQ0tTSVpFXTsKKwlzc2l6ZV90IHJlYWRsZW47CisKKwlzdCA9IG9wZW5faXN0cmVhbShzaGExLCAmdHlwZSwgJnN6LCBOVUxMKTsKKwlpZiAoIXN0KQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBzdHJlYW0gYmxvYiAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlmb3IgKDs7KSB7CisJCXJlYWRsZW4gPSByZWFkX2lzdHJlYW0oc3QsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlpZiAocmVhZGxlbiA8PSAwKQorCQkJYnJlYWs7CisJCWRvX3dyaXRlX2Jsb2NrZWQoYnVmLCByZWFkbGVuKTsKKwl9CisJY2xvc2VfaXN0cmVhbShzdCk7CisJaWYgKCFyZWFkbGVuKQorCQlmaW5pc2hfcmVjb3JkKCk7CisJcmV0dXJuIHJlYWRsZW47Cit9CisKKy8qCisgKiBwYXggZXh0ZW5kZWQgaGVhZGVyIHJlY29yZHMgaGF2ZSB0aGUgZm9ybWF0ICIldSAlcz0lc1xuIi4gICV1IGNvbnRhaW5zCisgKiB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUgc3RyaW5nIChpbmNsdWRpbmcgdGhlICV1KSwgdGhlIGZpcnN0ICVzIGlzIHRoZQorICoga2V5d29yZCwgdGhlIHNlY29uZCBvbmUgaXMgdGhlIHZhbHVlLiAgVGhpcyBmdW5jdGlvbiBjb25zdHJ1Y3RzIHN1Y2ggYQorICogc3RyaW5nIGFuZCBhcHBlbmRzIGl0IHRvIGEgc3RydWN0IHN0cmJ1Zi4KKyAqLworc3RhdGljIHZvaWQgc3RyYnVmX2FwcGVuZF9leHRfaGVhZGVyKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICprZXl3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsdWVsZW4pCit7CisJaW50IGxlbiwgdG1wOworCisJLyogIiV1ICVzPSVzXG4iICovCisJbGVuID0gMSArIDEgKyBzdHJsZW4oa2V5d29yZCkgKyAxICsgdmFsdWVsZW4gKyAxOworCWZvciAodG1wID0gbGVuOyB0bXAgPiA5OyB0bXAgLz0gMTApCisJCWxlbisrOworCisJc3RyYnVmX2dyb3coc2IsIGxlbik7CisJc3RyYnVmX2FkZGYoc2IsICIldSAlcz0iLCBsZW4sIGtleXdvcmQpOworCXN0cmJ1Zl9hZGQoc2IsIHZhbHVlLCB2YWx1ZWxlbik7CisJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCB1c3Rhcl9oZWFkZXJfY2hrc3VtKGNvbnN0IHN0cnVjdCB1c3Rhcl9oZWFkZXIgKmhlYWRlcikKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiloZWFkZXI7CisJdW5zaWduZWQgaW50IGNoa3N1bSA9IDA7CisJd2hpbGUgKHAgPCAoY29uc3QgdW5zaWduZWQgY2hhciAqKWhlYWRlci0+Y2hrc3VtKQorCQljaGtzdW0gKz0gKnArKzsKKwljaGtzdW0gKz0gc2l6ZW9mKGhlYWRlci0+Y2hrc3VtKSAqICcgJzsKKwlwICs9IHNpemVvZihoZWFkZXItPmNoa3N1bSk7CisJd2hpbGUgKHAgPCAoY29uc3QgdW5zaWduZWQgY2hhciAqKWhlYWRlciArIHNpemVvZihzdHJ1Y3QgdXN0YXJfaGVhZGVyKSkKKwkJY2hrc3VtICs9ICpwKys7CisJcmV0dXJuIGNoa3N1bTsKK30KKworc3RhdGljIHNpemVfdCBnZXRfcGF0aF9wcmVmaXgoY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4sIHNpemVfdCBtYXhsZW4pCit7CisJc2l6ZV90IGkgPSBwYXRobGVuOworCWlmIChpID4gMSAmJiBwYXRoW2kgLSAxXSA9PSAnLycpCisJCWktLTsKKwlpZiAoaSA+IG1heGxlbikKKwkJaSA9IG1heGxlbjsKKwlkbyB7CisJCWktLTsKKwl9IHdoaWxlIChpID4gMCAmJiBwYXRoW2ldICE9ICcvJyk7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfaGVhZGVyKHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQkJICAgc3RydWN0IHVzdGFyX2hlYWRlciAqaGVhZGVyLAorCQkJICAgdW5zaWduZWQgaW50IG1vZGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl4c25wcmludGYoaGVhZGVyLT5tb2RlLCBzaXplb2YoaGVhZGVyLT5tb2RlKSwgIiUwN28iLCBtb2RlICYgMDc3NzcpOworCXhzbnByaW50ZihoZWFkZXItPnNpemUsIHNpemVvZihoZWFkZXItPnNpemUpLCAiJTAxMWxvIiwgU19JU1JFRyhtb2RlKSA/IHNpemUgOiAwKTsKKwl4c25wcmludGYoaGVhZGVyLT5tdGltZSwgc2l6ZW9mKGhlYWRlci0+bXRpbWUpLCAiJTAxMWxvIiwgKHVuc2lnbmVkIGxvbmcpIGFyZ3MtPnRpbWUpOworCisJeHNucHJpbnRmKGhlYWRlci0+dWlkLCBzaXplb2YoaGVhZGVyLT51aWQpLCAiJTA3byIsIDApOworCXhzbnByaW50ZihoZWFkZXItPmdpZCwgc2l6ZW9mKGhlYWRlci0+Z2lkKSwgIiUwN28iLCAwKTsKKwlzdHJsY3B5KGhlYWRlci0+dW5hbWUsICJyb290Iiwgc2l6ZW9mKGhlYWRlci0+dW5hbWUpKTsKKwlzdHJsY3B5KGhlYWRlci0+Z25hbWUsICJyb290Iiwgc2l6ZW9mKGhlYWRlci0+Z25hbWUpKTsKKwl4c25wcmludGYoaGVhZGVyLT5kZXZtYWpvciwgc2l6ZW9mKGhlYWRlci0+ZGV2bWFqb3IpLCAiJTA3byIsIDApOworCXhzbnByaW50ZihoZWFkZXItPmRldm1pbm9yLCBzaXplb2YoaGVhZGVyLT5kZXZtaW5vciksICIlMDdvIiwgMCk7CisKKwltZW1jcHkoaGVhZGVyLT5tYWdpYywgInVzdGFyIiwgNik7CisJbWVtY3B5KGhlYWRlci0+dmVyc2lvbiwgIjAwIiwgMik7CisKKwlzbnByaW50ZihoZWFkZXItPmNoa3N1bSwgc2l6ZW9mKGhlYWRlci0+Y2hrc3VtKSwgIiUwN28iLCB1c3Rhcl9oZWFkZXJfY2hrc3VtKGhlYWRlcikpOworfQorCitzdGF0aWMgaW50IHdyaXRlX2V4dGVuZGVkX2hlYWRlcihzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgY29uc3Qgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IHVzdGFyX2hlYWRlciBoZWFkZXI7CisJdW5zaWduZWQgaW50IG1vZGU7CisJbWVtc2V0KCZoZWFkZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKKwkqaGVhZGVyLnR5cGVmbGFnID0gVFlQRUZMQUdfRVhUX0hFQURFUjsKKwltb2RlID0gMDEwMDY2NjsKKwl4c25wcmludGYoaGVhZGVyLm5hbWUsIHNpemVvZihoZWFkZXIubmFtZSksICIlcy5wYXhoZWFkZXIiLCBzaGExX3RvX2hleChzaGExKSk7CisJcHJlcGFyZV9oZWFkZXIoYXJncywgJmhlYWRlciwgbW9kZSwgc2l6ZSk7CisJd3JpdGVfYmxvY2tlZCgmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisJd3JpdGVfYmxvY2tlZChidWZmZXIsIHNpemUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX3Rhcl9lbnRyeShzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICBjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aGxlbiwKKwkJCSAgIHVuc2lnbmVkIGludCBtb2RlKQoreworCXN0cnVjdCB1c3Rhcl9oZWFkZXIgaGVhZGVyOworCXN0cnVjdCBzdHJidWYgZXh0X2hlYWRlciA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGludCBvbGRfbW9kZSA9IG1vZGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXZvaWQgKmJ1ZmZlcjsKKwlpbnQgZXJyID0gMDsKKworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisKKwlpZiAoU19JU0RJUihtb2RlKSB8fCBTX0lTR0lUTElOSyhtb2RlKSkgeworCQkqaGVhZGVyLnR5cGVmbGFnID0gVFlQRUZMQUdfRElSOworCQltb2RlID0gKG1vZGUgfCAwNzc3KSAmIH50YXJfdW1hc2s7CisJfSBlbHNlIGlmIChTX0lTTE5LKG1vZGUpKSB7CisJCSpoZWFkZXIudHlwZWZsYWcgPSBUWVBFRkxBR19MTks7CisJCW1vZGUgfD0gMDc3NzsKKwl9IGVsc2UgaWYgKFNfSVNSRUcobW9kZSkpIHsKKwkJKmhlYWRlci50eXBlZmxhZyA9IFRZUEVGTEFHX1JFRzsKKwkJbW9kZSA9IChtb2RlIHwgKChtb2RlICYgMDEwMCkgPyAwNzc3IDogMDY2NikpICYgfnRhcl91bWFzazsKKwl9IGVsc2UgeworCQlyZXR1cm4gZXJyb3IoInVuc3VwcG9ydGVkIGZpbGUgbW9kZTogMCVvIChTSEExOiAlcykiLAorCQkJICAgICBtb2RlLCBzaGExX3RvX2hleChzaGExKSk7CisJfQorCWlmIChwYXRobGVuID4gc2l6ZW9mKGhlYWRlci5uYW1lKSkgeworCQlzaXplX3QgcGxlbiA9IGdldF9wYXRoX3ByZWZpeChwYXRoLCBwYXRobGVuLAorCQkJCQkgICAgICBzaXplb2YoaGVhZGVyLnByZWZpeCkpOworCQlzaXplX3QgcmVzdCA9IHBhdGhsZW4gLSBwbGVuIC0gMTsKKwkJaWYgKHBsZW4gPiAwICYmIHJlc3QgPD0gc2l6ZW9mKGhlYWRlci5uYW1lKSkgeworCQkJbWVtY3B5KGhlYWRlci5wcmVmaXgsIHBhdGgsIHBsZW4pOworCQkJbWVtY3B5KGhlYWRlci5uYW1lLCBwYXRoICsgcGxlbiArIDEsIHJlc3QpOworCQl9IGVsc2UgeworCQkJeHNucHJpbnRmKGhlYWRlci5uYW1lLCBzaXplb2YoaGVhZGVyLm5hbWUpLCAiJXMuZGF0YSIsCisJCQkJICBzaGExX3RvX2hleChzaGExKSk7CisJCQlzdHJidWZfYXBwZW5kX2V4dF9oZWFkZXIoJmV4dF9oZWFkZXIsICJwYXRoIiwKKwkJCQkJCSBwYXRoLCBwYXRobGVuKTsKKwkJfQorCX0gZWxzZQorCQltZW1jcHkoaGVhZGVyLm5hbWUsIHBhdGgsIHBhdGhsZW4pOworCisJaWYgKFNfSVNSRUcobW9kZSkgJiYgIWFyZ3MtPmNvbnZlcnQgJiYKKwkgICAgc2hhMV9vYmplY3RfaW5mbyhzaGExLCAmc2l6ZSkgPT0gT0JKX0JMT0IgJiYKKwkgICAgc2l6ZSA+IGJpZ19maWxlX3RocmVzaG9sZCkKKwkJYnVmZmVyID0gTlVMTDsKKwllbHNlIGlmIChTX0lTTE5LKG1vZGUpIHx8IFNfSVNSRUcobW9kZSkpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQlidWZmZXIgPSBzaGExX2ZpbGVfdG9fYXJjaGl2ZShhcmdzLCBwYXRoLCBzaGExLCBvbGRfbW9kZSwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFidWZmZXIpCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCByZWFkICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCX0gZWxzZSB7CisJCWJ1ZmZlciA9IE5VTEw7CisJCXNpemUgPSAwOworCX0KKworCWlmIChTX0lTTE5LKG1vZGUpKSB7CisJCWlmIChzaXplID4gc2l6ZW9mKGhlYWRlci5saW5rbmFtZSkpIHsKKwkJCXhzbnByaW50ZihoZWFkZXIubGlua25hbWUsIHNpemVvZihoZWFkZXIubGlua25hbWUpLAorCQkJCSAgInNlZSAlcy5wYXhoZWFkZXIiLCBzaGExX3RvX2hleChzaGExKSk7CisJCQlzdHJidWZfYXBwZW5kX2V4dF9oZWFkZXIoJmV4dF9oZWFkZXIsICJsaW5rcGF0aCIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBzaXplKTsKKwkJfSBlbHNlCisJCQltZW1jcHkoaGVhZGVyLmxpbmtuYW1lLCBidWZmZXIsIHNpemUpOworCX0KKworCXByZXBhcmVfaGVhZGVyKGFyZ3MsICZoZWFkZXIsIG1vZGUsIHNpemUpOworCisJaWYgKGV4dF9oZWFkZXIubGVuID4gMCkgeworCQllcnIgPSB3cml0ZV9leHRlbmRlZF9oZWFkZXIoYXJncywgc2hhMSwgZXh0X2hlYWRlci5idWYsCisJCQkJCSAgICBleHRfaGVhZGVyLmxlbik7CisJCWlmIChlcnIpIHsKKwkJCWZyZWUoYnVmZmVyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisJc3RyYnVmX3JlbGVhc2UoJmV4dF9oZWFkZXIpOworCXdyaXRlX2Jsb2NrZWQoJmhlYWRlciwgc2l6ZW9mKGhlYWRlcikpOworCWlmIChTX0lTUkVHKG1vZGUpICYmIHNpemUgPiAwKSB7CisJCWlmIChidWZmZXIpCisJCQl3cml0ZV9ibG9ja2VkKGJ1ZmZlciwgc2l6ZSk7CisJCWVsc2UKKwkJCWVyciA9IHN0cmVhbV9ibG9ja2VkKHNoYTEpOworCX0KKwlmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB3cml0ZV9nbG9iYWxfZXh0ZW5kZWRfaGVhZGVyKHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEgPSBhcmdzLT5jb21taXRfc2hhMTsKKwlzdHJ1Y3Qgc3RyYnVmIGV4dF9oZWFkZXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgdXN0YXJfaGVhZGVyIGhlYWRlcjsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKwlpbnQgZXJyID0gMDsKKworCXN0cmJ1Zl9hcHBlbmRfZXh0X2hlYWRlcigmZXh0X2hlYWRlciwgImNvbW1lbnQiLCBzaGExX3RvX2hleChzaGExKSwgNDApOworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisJKmhlYWRlci50eXBlZmxhZyA9IFRZUEVGTEFHX0dMT0JBTF9IRUFERVI7CisJbW9kZSA9IDAxMDA2NjY7CisJeHNucHJpbnRmKGhlYWRlci5uYW1lLCBzaXplb2YoaGVhZGVyLm5hbWUpLCAicGF4X2dsb2JhbF9oZWFkZXIiKTsKKwlwcmVwYXJlX2hlYWRlcihhcmdzLCAmaGVhZGVyLCBtb2RlLCBleHRfaGVhZGVyLmxlbik7CisJd3JpdGVfYmxvY2tlZCgmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisJd3JpdGVfYmxvY2tlZChleHRfaGVhZGVyLmJ1ZiwgZXh0X2hlYWRlci5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZleHRfaGVhZGVyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IGFyY2hpdmVyICoqdGFyX2ZpbHRlcnM7CitzdGF0aWMgaW50IG5yX3Rhcl9maWx0ZXJzOworc3RhdGljIGludCBhbGxvY190YXJfZmlsdGVyczsKKworc3RhdGljIHN0cnVjdCBhcmNoaXZlciAqZmluZF90YXJfZmlsdGVyKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5yX3Rhcl9maWx0ZXJzOyBpKyspIHsKKwkJc3RydWN0IGFyY2hpdmVyICphciA9IHRhcl9maWx0ZXJzW2ldOworCQlpZiAoIXN0cm5jbXAoYXItPm5hbWUsIG5hbWUsIGxlbikgJiYgIWFyLT5uYW1lW2xlbl0pCisJCQlyZXR1cm4gYXI7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHRhcl9maWx0ZXJfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFyY2hpdmVyICphcjsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnR5cGU7CisJaW50IG5hbWVsZW47CisKKwlpZiAocGFyc2VfY29uZmlnX2tleSh2YXIsICJ0YXIiLCAmbmFtZSwgJm5hbWVsZW4sICZ0eXBlKSA8IDAgfHwgIW5hbWUpCisJCXJldHVybiAwOworCisJYXIgPSBmaW5kX3Rhcl9maWx0ZXIobmFtZSwgbmFtZWxlbik7CisJaWYgKCFhcikgeworCQlhciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCphcikpOworCQlhci0+bmFtZSA9IHhtZW1kdXB6KG5hbWUsIG5hbWVsZW4pOworCQlhci0+d3JpdGVfYXJjaGl2ZSA9IHdyaXRlX3Rhcl9maWx0ZXJfYXJjaGl2ZTsKKwkJYXItPmZsYWdzID0gQVJDSElWRVJfV0FOVF9DT01QUkVTU0lPTl9MRVZFTFM7CisJCUFMTE9DX0dST1codGFyX2ZpbHRlcnMsIG5yX3Rhcl9maWx0ZXJzICsgMSwgYWxsb2NfdGFyX2ZpbHRlcnMpOworCQl0YXJfZmlsdGVyc1tucl90YXJfZmlsdGVycysrXSA9IGFyOworCX0KKworCWlmICghc3RyY21wKHR5cGUsICJjb21tYW5kIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlmcmVlKGFyLT5kYXRhKTsKKwkJYXItPmRhdGEgPSB4c3RyZHVwKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHR5cGUsICJyZW1vdGUiKSkgeworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpKQorCQkJYXItPmZsYWdzIHw9IEFSQ0hJVkVSX1JFTU9URTsKKwkJZWxzZQorCQkJYXItPmZsYWdzICY9IH5BUkNISVZFUl9SRU1PVEU7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF90YXJfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgInRhci51bWFzayIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY21wKHZhbHVlLCAidXNlciIpKSB7CisJCQl0YXJfdW1hc2sgPSB1bWFzaygwKTsKKwkJCXVtYXNrKHRhcl91bWFzayk7CisJCX0gZWxzZSB7CisJCQl0YXJfdW1hc2sgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gdGFyX2ZpbHRlcl9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IHdyaXRlX3Rhcl9hcmNoaXZlKGNvbnN0IHN0cnVjdCBhcmNoaXZlciAqYXIsCisJCQkgICAgIHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzKQoreworCWludCBlcnIgPSAwOworCisJaWYgKGFyZ3MtPmNvbW1pdF9zaGExKQorCQllcnIgPSB3cml0ZV9nbG9iYWxfZXh0ZW5kZWRfaGVhZGVyKGFyZ3MpOworCWlmICghZXJyKQorCQllcnIgPSB3cml0ZV9hcmNoaXZlX2VudHJpZXMoYXJncywgd3JpdGVfdGFyX2VudHJ5KTsKKwlpZiAoIWVycikKKwkJd3JpdGVfdHJhaWxlcigpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfdGFyX2ZpbHRlcl9hcmNoaXZlKGNvbnN0IHN0cnVjdCBhcmNoaXZlciAqYXIsCisJCQkJICAgIHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzKQoreworCXN0cnVjdCBzdHJidWYgY21kID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZmlsdGVyID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmFyZ3ZbMl07CisJaW50IHI7CisKKwlpZiAoIWFyLT5kYXRhKQorCQlkaWUoIkJVRzogdGFyLWZpbHRlciBhcmNoaXZlciBjYWxsZWQgd2l0aCBubyBmaWx0ZXIgZGVmaW5lZCIpOworCisJc3RyYnVmX2FkZHN0cigmY21kLCBhci0+ZGF0YSk7CisJaWYgKGFyZ3MtPmNvbXByZXNzaW9uX2xldmVsID49IDApCisJCXN0cmJ1Zl9hZGRmKCZjbWQsICIgLSVkIiwgYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwpOworCisJYXJndlswXSA9IGNtZC5idWY7CisJYXJndlsxXSA9IE5VTEw7CisJZmlsdGVyLmFyZ3YgPSBhcmd2OworCWZpbHRlci51c2Vfc2hlbGwgPSAxOworCWZpbHRlci5pbiA9IC0xOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmZpbHRlcikgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBzdGFydCAnJXMnIGZpbHRlciIsIGFyZ3ZbMF0pOworCWNsb3NlKDEpOworCWlmIChkdXAyKGZpbHRlci5pbiwgMSkgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byByZWRpcmVjdCBkZXNjcmlwdG9yIik7CisJY2xvc2UoZmlsdGVyLmluKTsKKworCXIgPSB3cml0ZV90YXJfYXJjaGl2ZShhciwgYXJncyk7CisKKwljbG9zZSgxKTsKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmZpbHRlcikgIT0gMCkKKwkJZGllKCInJXMnIGZpbHRlciByZXBvcnRlZCBlcnJvciIsIGFyZ3ZbMF0pOworCisJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXJjaGl2ZXIgdGFyX2FyY2hpdmVyID0geworCSJ0YXIiLAorCXdyaXRlX3Rhcl9hcmNoaXZlLAorCUFSQ0hJVkVSX1JFTU9URQorfTsKKwordm9pZCBpbml0X3Rhcl9hcmNoaXZlcih2b2lkKQoreworCWludCBpOworCXJlZ2lzdGVyX2FyY2hpdmVyKCZ0YXJfYXJjaGl2ZXIpOworCisJdGFyX2ZpbHRlcl9jb25maWcoInRhci50Z3ouY29tbWFuZCIsICJnemlwIC1jbiIsIE5VTEwpOworCXRhcl9maWx0ZXJfY29uZmlnKCJ0YXIudGd6LnJlbW90ZSIsICJ0cnVlIiwgTlVMTCk7CisJdGFyX2ZpbHRlcl9jb25maWcoInRhci50YXIuZ3ouY29tbWFuZCIsICJnemlwIC1jbiIsIE5VTEwpOworCXRhcl9maWx0ZXJfY29uZmlnKCJ0YXIudGFyLmd6LnJlbW90ZSIsICJ0cnVlIiwgTlVMTCk7CisJZ2l0X2NvbmZpZyhnaXRfdGFyX2NvbmZpZywgTlVMTCk7CisJZm9yIChpID0gMDsgaSA8IG5yX3Rhcl9maWx0ZXJzOyBpKyspIHsKKwkJLyogb21pdCBhbnkgZmlsdGVycyB0aGF0IG5ldmVyIGhhZCBhIGNvbW1hbmQgY29uZmlndXJlZCAqLworCQlpZiAodGFyX2ZpbHRlcnNbaV0tPmRhdGEpCisJCQlyZWdpc3Rlcl9hcmNoaXZlcih0YXJfZmlsdGVyc1tpXSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaGl2ZS16aXAuYyBiL2FyY2hpdmUtemlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRiNDczNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2hpdmUtemlwLmMKQEAgLTAsMCArMSw1ODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgUmVuZSBTY2hhcmZlCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKworc3RhdGljIGludCB6aXBfZGF0ZTsKK3N0YXRpYyBpbnQgemlwX3RpbWU7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICp6aXBfZGlyOworc3RhdGljIHVuc2lnbmVkIGludCB6aXBfZGlyX3NpemU7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgemlwX29mZnNldDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgemlwX2Rpcl9vZmZzZXQ7CitzdGF0aWMgdWludDY0X3QgemlwX2Rpcl9lbnRyaWVzOworCitzdGF0aWMgdW5zaWduZWQgaW50IG1heF9jcmVhdG9yX3ZlcnNpb247CisKKyNkZWZpbmUgWklQX0RJUkVDVE9SWV9NSU5fU0laRQkoMTAyNCAqIDEwMjQpCisjZGVmaW5lIFpJUF9TVFJFQU0JKDEgPDwgIDMpCisjZGVmaW5lIFpJUF9VVEY4CSgxIDw8IDExKQorCitzdHJ1Y3QgemlwX2xvY2FsX2hlYWRlciB7CisJdW5zaWduZWQgY2hhciBtYWdpY1s0XTsKKwl1bnNpZ25lZCBjaGFyIHZlcnNpb25bMl07CisJdW5zaWduZWQgY2hhciBmbGFnc1syXTsKKwl1bnNpZ25lZCBjaGFyIGNvbXByZXNzaW9uX21ldGhvZFsyXTsKKwl1bnNpZ25lZCBjaGFyIG10aW1lWzJdOworCXVuc2lnbmVkIGNoYXIgbWRhdGVbMl07CisJdW5zaWduZWQgY2hhciBjcmMzMls0XTsKKwl1bnNpZ25lZCBjaGFyIGNvbXByZXNzZWRfc2l6ZVs0XTsKKwl1bnNpZ25lZCBjaGFyIHNpemVbNF07CisJdW5zaWduZWQgY2hhciBmaWxlbmFtZV9sZW5ndGhbMl07CisJdW5zaWduZWQgY2hhciBleHRyYV9sZW5ndGhbMl07CisJdW5zaWduZWQgY2hhciBfZW5kWzFdOworfTsKKworc3RydWN0IHppcF9kYXRhX2Rlc2MgeworCXVuc2lnbmVkIGNoYXIgbWFnaWNbNF07CisJdW5zaWduZWQgY2hhciBjcmMzMls0XTsKKwl1bnNpZ25lZCBjaGFyIGNvbXByZXNzZWRfc2l6ZVs0XTsKKwl1bnNpZ25lZCBjaGFyIHNpemVbNF07CisJdW5zaWduZWQgY2hhciBfZW5kWzFdOworfTsKKworc3RydWN0IHppcF9kaXJfaGVhZGVyIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzRdOworCXVuc2lnbmVkIGNoYXIgY3JlYXRvcl92ZXJzaW9uWzJdOworCXVuc2lnbmVkIGNoYXIgdmVyc2lvblsyXTsKKwl1bnNpZ25lZCBjaGFyIGZsYWdzWzJdOworCXVuc2lnbmVkIGNoYXIgY29tcHJlc3Npb25fbWV0aG9kWzJdOworCXVuc2lnbmVkIGNoYXIgbXRpbWVbMl07CisJdW5zaWduZWQgY2hhciBtZGF0ZVsyXTsKKwl1bnNpZ25lZCBjaGFyIGNyYzMyWzRdOworCXVuc2lnbmVkIGNoYXIgY29tcHJlc3NlZF9zaXplWzRdOworCXVuc2lnbmVkIGNoYXIgc2l6ZVs0XTsKKwl1bnNpZ25lZCBjaGFyIGZpbGVuYW1lX2xlbmd0aFsyXTsKKwl1bnNpZ25lZCBjaGFyIGV4dHJhX2xlbmd0aFsyXTsKKwl1bnNpZ25lZCBjaGFyIGNvbW1lbnRfbGVuZ3RoWzJdOworCXVuc2lnbmVkIGNoYXIgZGlza1syXTsKKwl1bnNpZ25lZCBjaGFyIGF0dHIxWzJdOworCXVuc2lnbmVkIGNoYXIgYXR0cjJbNF07CisJdW5zaWduZWQgY2hhciBvZmZzZXRbNF07CisJdW5zaWduZWQgY2hhciBfZW5kWzFdOworfTsKKworc3RydWN0IHppcF9kaXJfdHJhaWxlciB7CisJdW5zaWduZWQgY2hhciBtYWdpY1s0XTsKKwl1bnNpZ25lZCBjaGFyIGRpc2tbMl07CisJdW5zaWduZWQgY2hhciBkaXJlY3Rvcnlfc3RhcnRfZGlza1syXTsKKwl1bnNpZ25lZCBjaGFyIGVudHJpZXNfb25fdGhpc19kaXNrWzJdOworCXVuc2lnbmVkIGNoYXIgZW50cmllc1syXTsKKwl1bnNpZ25lZCBjaGFyIHNpemVbNF07CisJdW5zaWduZWQgY2hhciBvZmZzZXRbNF07CisJdW5zaWduZWQgY2hhciBjb21tZW50X2xlbmd0aFsyXTsKKwl1bnNpZ25lZCBjaGFyIF9lbmRbMV07Cit9OworCitzdHJ1Y3QgemlwX2V4dHJhX210aW1lIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzJdOworCXVuc2lnbmVkIGNoYXIgZXh0cmFfc2l6ZVsyXTsKKwl1bnNpZ25lZCBjaGFyIGZsYWdzWzFdOworCXVuc2lnbmVkIGNoYXIgbXRpbWVbNF07CisJdW5zaWduZWQgY2hhciBfZW5kWzFdOworfTsKKworc3RydWN0IHppcDY0X2Rpcl90cmFpbGVyIHsKKwl1bnNpZ25lZCBjaGFyIG1hZ2ljWzRdOworCXVuc2lnbmVkIGNoYXIgcmVjb3JkX3NpemVbOF07CisJdW5zaWduZWQgY2hhciBjcmVhdG9yX3ZlcnNpb25bMl07CisJdW5zaWduZWQgY2hhciB2ZXJzaW9uWzJdOworCXVuc2lnbmVkIGNoYXIgZGlza1s0XTsKKwl1bnNpZ25lZCBjaGFyIGRpcmVjdG9yeV9zdGFydF9kaXNrWzRdOworCXVuc2lnbmVkIGNoYXIgZW50cmllc19vbl90aGlzX2Rpc2tbOF07CisJdW5zaWduZWQgY2hhciBlbnRyaWVzWzhdOworCXVuc2lnbmVkIGNoYXIgc2l6ZVs4XTsKKwl1bnNpZ25lZCBjaGFyIG9mZnNldFs4XTsKKwl1bnNpZ25lZCBjaGFyIF9lbmRbMV07Cit9OworCitzdHJ1Y3QgemlwNjRfZGlyX3RyYWlsZXJfbG9jYXRvciB7CisJdW5zaWduZWQgY2hhciBtYWdpY1s0XTsKKwl1bnNpZ25lZCBjaGFyIGRpc2tbNF07CisJdW5zaWduZWQgY2hhciBvZmZzZXRbOF07CisJdW5zaWduZWQgY2hhciBudW1iZXJfb2ZfZGlza3NbNF07CisJdW5zaWduZWQgY2hhciBfZW5kWzFdOworfTsKKworLyoKKyAqIE9uIEFSTSwgcGFkZGluZyBpcyBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3QsIHNvIGEgc2ltcGxlCisgKiBzaXplb2Yoc3RydWN0IC4uLikgcmVwb3J0cyB0d28gYnl0ZXMgbW9yZSB0aGFuIHRoZSBwYXlsb2FkIHNpemUKKyAqIHdlJ3JlIGludGVyZXN0ZWQgaW4uCisgKi8KKyNkZWZpbmUgWklQX0xPQ0FMX0hFQURFUl9TSVpFCW9mZnNldG9mKHN0cnVjdCB6aXBfbG9jYWxfaGVhZGVyLCBfZW5kKQorI2RlZmluZSBaSVBfREFUQV9ERVNDX1NJWkUJb2Zmc2V0b2Yoc3RydWN0IHppcF9kYXRhX2Rlc2MsIF9lbmQpCisjZGVmaW5lIFpJUF9ESVJfSEVBREVSX1NJWkUJb2Zmc2V0b2Yoc3RydWN0IHppcF9kaXJfaGVhZGVyLCBfZW5kKQorI2RlZmluZSBaSVBfRElSX1RSQUlMRVJfU0laRQlvZmZzZXRvZihzdHJ1Y3QgemlwX2Rpcl90cmFpbGVyLCBfZW5kKQorI2RlZmluZSBaSVBfRVhUUkFfTVRJTUVfU0laRQlvZmZzZXRvZihzdHJ1Y3QgemlwX2V4dHJhX210aW1lLCBfZW5kKQorI2RlZmluZSBaSVBfRVhUUkFfTVRJTUVfUEFZTE9BRF9TSVpFIFwKKwkoWklQX0VYVFJBX01USU1FX1NJWkUgLSBvZmZzZXRvZihzdHJ1Y3QgemlwX2V4dHJhX210aW1lLCBmbGFncykpCisjZGVmaW5lIFpJUDY0X0RJUl9UUkFJTEVSX1NJWkUJb2Zmc2V0b2Yoc3RydWN0IHppcDY0X2Rpcl90cmFpbGVyLCBfZW5kKQorI2RlZmluZSBaSVA2NF9ESVJfVFJBSUxFUl9SRUNPUkRfU0laRSBcCisJKFpJUDY0X0RJUl9UUkFJTEVSX1NJWkUgLSBcCisJIG9mZnNldG9mKHN0cnVjdCB6aXA2NF9kaXJfdHJhaWxlciwgY3JlYXRvcl92ZXJzaW9uKSkKKyNkZWZpbmUgWklQNjRfRElSX1RSQUlMRVJfTE9DQVRPUl9TSVpFIFwKKwlvZmZzZXRvZihzdHJ1Y3QgemlwNjRfZGlyX3RyYWlsZXJfbG9jYXRvciwgX2VuZCkKKworc3RhdGljIHZvaWQgY29weV9sZTE2KHVuc2lnbmVkIGNoYXIgKmRlc3QsIHVuc2lnbmVkIGludCBuKQoreworCWRlc3RbMF0gPSAweGZmICYgbjsKKwlkZXN0WzFdID0gMHhmZiAmIChuID4+IDAxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfbGUzMih1bnNpZ25lZCBjaGFyICpkZXN0LCB1bnNpZ25lZCBpbnQgbikKK3sKKwlkZXN0WzBdID0gMHhmZiAmIG47CisJZGVzdFsxXSA9IDB4ZmYgJiAobiA+PiAwMTApOworCWRlc3RbMl0gPSAweGZmICYgKG4gPj4gMDIwKTsKKwlkZXN0WzNdID0gMHhmZiAmIChuID4+IDAzMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfbGU2NCh1bnNpZ25lZCBjaGFyICpkZXN0LCB1aW50NjRfdCBuKQoreworCWRlc3RbMF0gPSAweGZmICYgbjsKKwlkZXN0WzFdID0gMHhmZiAmIChuID4+IDAxMCk7CisJZGVzdFsyXSA9IDB4ZmYgJiAobiA+PiAwMjApOworCWRlc3RbM10gPSAweGZmICYgKG4gPj4gMDMwKTsKKwlkZXN0WzRdID0gMHhmZiAmIChuID4+IDA0MCk7CisJZGVzdFs1XSA9IDB4ZmYgJiAobiA+PiAwNTApOworCWRlc3RbNl0gPSAweGZmICYgKG4gPj4gMDYwKTsKKwlkZXN0WzddID0gMHhmZiAmIChuID4+IDA3MCk7Cit9CisKK3N0YXRpYyB1aW50NjRfdCBjbGFtcF9tYXgodWludDY0X3QgbiwgdWludDY0X3QgbWF4LCBpbnQgKmNsYW1wZWQpCit7CisJaWYgKG4gPD0gbWF4KQorCQlyZXR1cm4gbjsKKwkqY2xhbXBlZCA9IDE7CisJcmV0dXJuIG1heDsKK30KKworc3RhdGljIHZvaWQgY29weV9sZTE2X2NsYW1wKHVuc2lnbmVkIGNoYXIgKmRlc3QsIHVpbnQ2NF90IG4sIGludCAqY2xhbXBlZCkKK3sKKwljb3B5X2xlMTYoZGVzdCwgY2xhbXBfbWF4KG4sIDB4ZmZmZiwgY2xhbXBlZCkpOworfQorCitzdGF0aWMgdm9pZCAqemxpYl9kZWZsYXRlX3Jhdyh2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICBpbnQgY29tcHJlc3Npb25fbGV2ZWwsCisJCQkgICAgICB1bnNpZ25lZCBsb25nICpjb21wcmVzc2VkX3NpemUpCit7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCXVuc2lnbmVkIGxvbmcgbWF4c2l6ZTsKKwl2b2lkICpidWZmZXI7CisJaW50IHJlc3VsdDsKKworCWdpdF9kZWZsYXRlX2luaXRfcmF3KCZzdHJlYW0sIGNvbXByZXNzaW9uX2xldmVsKTsKKwltYXhzaXplID0gZ2l0X2RlZmxhdGVfYm91bmQoJnN0cmVhbSwgc2l6ZSk7CisJYnVmZmVyID0geG1hbGxvYyhtYXhzaXplKTsKKworCXN0cmVhbS5uZXh0X2luID0gZGF0YTsKKwlzdHJlYW0uYXZhaWxfaW4gPSBzaXplOworCXN0cmVhbS5uZXh0X291dCA9IGJ1ZmZlcjsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gbWF4c2l6ZTsKKworCWRvIHsKKwkJcmVzdWx0ID0gZ2l0X2RlZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCX0gd2hpbGUgKHJlc3VsdCA9PSBaX09LKTsKKworCWlmIChyZXN1bHQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCWZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZ2l0X2RlZmxhdGVfZW5kKCZzdHJlYW0pOworCSpjb21wcmVzc2VkX3NpemUgPSBzdHJlYW0udG90YWxfb3V0OworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfemlwX2RhdGFfZGVzYyh1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJdW5zaWduZWQgbG9uZyBjb21wcmVzc2VkX3NpemUsCisJCQkJdW5zaWduZWQgbG9uZyBjcmMpCit7CisJc3RydWN0IHppcF9kYXRhX2Rlc2MgdHJhaWxlcjsKKworCWNvcHlfbGUzMih0cmFpbGVyLm1hZ2ljLCAweDA4MDc0YjUwKTsKKwljb3B5X2xlMzIodHJhaWxlci5jcmMzMiwgY3JjKTsKKwljb3B5X2xlMzIodHJhaWxlci5jb21wcmVzc2VkX3NpemUsIGNvbXByZXNzZWRfc2l6ZSk7CisJY29weV9sZTMyKHRyYWlsZXIuc2l6ZSwgc2l6ZSk7CisJd3JpdGVfb3JfZGllKDEsICZ0cmFpbGVyLCBaSVBfREFUQV9ERVNDX1NJWkUpOworfQorCitzdGF0aWMgdm9pZCBzZXRfemlwX2Rpcl9kYXRhX2Rlc2Moc3RydWN0IHppcF9kaXJfaGVhZGVyICpoZWFkZXIsCisJCQkJICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICB1bnNpZ25lZCBsb25nIGNvbXByZXNzZWRfc2l6ZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgY3JjKQoreworCWNvcHlfbGUzMihoZWFkZXItPmNyYzMyLCBjcmMpOworCWNvcHlfbGUzMihoZWFkZXItPmNvbXByZXNzZWRfc2l6ZSwgY29tcHJlc3NlZF9zaXplKTsKKwljb3B5X2xlMzIoaGVhZGVyLT5zaXplLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3ppcF9oZWFkZXJfZGF0YV9kZXNjKHN0cnVjdCB6aXBfbG9jYWxfaGVhZGVyICpoZWFkZXIsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGNvbXByZXNzZWRfc2l6ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgY3JjKQoreworCWNvcHlfbGUzMihoZWFkZXItPmNyYzMyLCBjcmMpOworCWNvcHlfbGUzMihoZWFkZXItPmNvbXByZXNzZWRfc2l6ZSwgY29tcHJlc3NlZF9zaXplKTsKKwljb3B5X2xlMzIoaGVhZGVyLT5zaXplLCBzaXplKTsKK30KKworc3RhdGljIGludCBoYXNfb25seV9hc2NpaShjb25zdCBjaGFyICpzKQoreworCWZvciAoOzspIHsKKwkJaW50IGMgPSAqcysrOworCQlpZiAoYyA9PSAnXDAnKQorCQkJcmV0dXJuIDE7CisJCWlmICghaXNhc2NpaShjKSkKKwkJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBlbnRyeV9pc19iaW5hcnkoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcml2ZXIgPSB1c2VyZGlmZl9maW5kX2J5X3BhdGgocGF0aCk7CisJaWYgKCFkcml2ZXIpCisJCWRyaXZlciA9IHVzZXJkaWZmX2ZpbmRfYnlfbmFtZSgiZGVmYXVsdCIpOworCWlmIChkcml2ZXItPmJpbmFyeSAhPSAtMSkKKwkJcmV0dXJuIGRyaXZlci0+YmluYXJ5OworCXJldHVybiBidWZmZXJfaXNfYmluYXJ5KGJ1ZmZlciwgc2l6ZSk7Cit9CisKKyNkZWZpbmUgU1RSRUFNX0JVRkZFUl9TSVpFICgxMDI0ICogMTYpCisKK3N0YXRpYyBpbnQgd3JpdGVfemlwX2VudHJ5KHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgIGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCBwYXRobGVuLAorCQkJICAgdW5zaWduZWQgaW50IG1vZGUpCit7CisJc3RydWN0IHppcF9sb2NhbF9oZWFkZXIgaGVhZGVyOworCXN0cnVjdCB6aXBfZGlyX2hlYWRlciBkaXJlbnQ7CisJc3RydWN0IHppcF9leHRyYV9tdGltZSBleHRyYTsKKwl1bnNpZ25lZCBsb25nIGF0dHIyOworCXVuc2lnbmVkIGxvbmcgY29tcHJlc3NlZF9zaXplOworCXVuc2lnbmVkIGxvbmcgY3JjOworCXVuc2lnbmVkIGxvbmcgZGlyZW50c2l6ZTsKKwlpbnQgbWV0aG9kOworCXVuc2lnbmVkIGNoYXIgKm91dDsKKwl2b2lkICpkZWZsYXRlZCA9IE5VTEw7CisJdm9pZCAqYnVmZmVyOworCXN0cnVjdCBnaXRfaXN0cmVhbSAqc3RyZWFtID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IGlzX2JpbmFyeSA9IC0xOworCWNvbnN0IGNoYXIgKnBhdGhfd2l0aG91dF9wcmVmaXggPSBwYXRoICsgYXJncy0+YmFzZWxlbjsKKwl1bnNpZ25lZCBpbnQgY3JlYXRvcl92ZXJzaW9uID0gMDsKKworCWNyYyA9IGNyYzMyKDAsIE5VTEwsIDApOworCisJaWYgKCFoYXNfb25seV9hc2NpaShwYXRoKSkgeworCQlpZiAoaXNfdXRmOChwYXRoKSkKKwkJCWZsYWdzIHw9IFpJUF9VVEY4OworCQllbHNlCisJCQl3YXJuaW5nKCJQYXRoIGlzIG5vdCB2YWxpZCBVVEYtODogJXMiLCBwYXRoKTsKKwl9CisKKwlpZiAocGF0aGxlbiA+IDB4ZmZmZikgeworCQlyZXR1cm4gZXJyb3IoInBhdGggdG9vIGxvbmcgKCVkIGNoYXJzLCBTSEExOiAlcyk6ICVzIiwKKwkJCQkoaW50KXBhdGhsZW4sIHNoYTFfdG9faGV4KHNoYTEpLCBwYXRoKTsKKwl9CisKKwlpZiAoU19JU0RJUihtb2RlKSB8fCBTX0lTR0lUTElOSyhtb2RlKSkgeworCQltZXRob2QgPSAwOworCQlhdHRyMiA9IDE2OworCQlvdXQgPSBOVUxMOworCQlzaXplID0gMDsKKwkJY29tcHJlc3NlZF9zaXplID0gMDsKKwkJYnVmZmVyID0gTlVMTDsKKwl9IGVsc2UgaWYgKFNfSVNSRUcobW9kZSkgfHwgU19JU0xOSyhtb2RlKSkgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsICZzaXplKTsKKworCQltZXRob2QgPSAwOworCQlhdHRyMiA9IFNfSVNMTksobW9kZSkgPyAoKG1vZGUgfCAwNzc3KSA8PCAxNikgOgorCQkJKG1vZGUgJiAwMTExKSA/ICgobW9kZSkgPDwgMTYpIDogMDsKKwkJaWYgKFNfSVNMTksobW9kZSkgfHwgKG1vZGUgJiAwMTExKSkKKwkJCWNyZWF0b3JfdmVyc2lvbiA9IDB4MDMxNzsKKwkJaWYgKFNfSVNSRUcobW9kZSkgJiYgYXJncy0+Y29tcHJlc3Npb25fbGV2ZWwgIT0gMCAmJiBzaXplID4gMCkKKwkJCW1ldGhvZCA9IDg7CisKKwkJaWYgKFNfSVNSRUcobW9kZSkgJiYgdHlwZSA9PSBPQkpfQkxPQiAmJiAhYXJncy0+Y29udmVydCAmJgorCQkgICAgc2l6ZSA+IGJpZ19maWxlX3RocmVzaG9sZCkgeworCQkJc3RyZWFtID0gb3Blbl9pc3RyZWFtKHNoYTEsICZ0eXBlLCAmc2l6ZSwgTlVMTCk7CisJCQlpZiAoIXN0cmVhbSkKKwkJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBzdHJlYW0gYmxvYiAlcyIsCisJCQkJCSAgICAgc2hhMV90b19oZXgoc2hhMSkpOworCQkJZmxhZ3MgfD0gWklQX1NUUkVBTTsKKwkJCW91dCA9IGJ1ZmZlciA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlidWZmZXIgPSBzaGExX2ZpbGVfdG9fYXJjaGl2ZShhcmdzLCBwYXRoLCBzaGExLCBtb2RlLAorCQkJCQkJICAgICAgJnR5cGUsICZzaXplKTsKKwkJCWlmICghYnVmZmVyKQorCQkJCXJldHVybiBlcnJvcigiY2Fubm90IHJlYWQgJXMiLAorCQkJCQkgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCWNyYyA9IGNyYzMyKGNyYywgYnVmZmVyLCBzaXplKTsKKwkJCWlzX2JpbmFyeSA9IGVudHJ5X2lzX2JpbmFyeShwYXRoX3dpdGhvdXRfcHJlZml4LAorCQkJCQkJICAgIGJ1ZmZlciwgc2l6ZSk7CisJCQlvdXQgPSBidWZmZXI7CisJCX0KKwkJY29tcHJlc3NlZF9zaXplID0gKG1ldGhvZCA9PSAwKSA/IHNpemUgOiAwOworCX0gZWxzZSB7CisJCXJldHVybiBlcnJvcigidW5zdXBwb3J0ZWQgZmlsZSBtb2RlOiAwJW8gKFNIQTE6ICVzKSIsIG1vZGUsCisJCQkJc2hhMV90b19oZXgoc2hhMSkpOworCX0KKworCWlmIChjcmVhdG9yX3ZlcnNpb24gPiBtYXhfY3JlYXRvcl92ZXJzaW9uKQorCQltYXhfY3JlYXRvcl92ZXJzaW9uID0gY3JlYXRvcl92ZXJzaW9uOworCisJaWYgKGJ1ZmZlciAmJiBtZXRob2QgPT0gOCkgeworCQlvdXQgPSBkZWZsYXRlZCA9IHpsaWJfZGVmbGF0ZV9yYXcoYnVmZmVyLCBzaXplLAorCQkJCQkJICBhcmdzLT5jb21wcmVzc2lvbl9sZXZlbCwKKwkJCQkJCSAgJmNvbXByZXNzZWRfc2l6ZSk7CisJCWlmICghb3V0IHx8IGNvbXByZXNzZWRfc2l6ZSA+PSBzaXplKSB7CisJCQlvdXQgPSBidWZmZXI7CisJCQltZXRob2QgPSAwOworCQkJY29tcHJlc3NlZF9zaXplID0gc2l6ZTsKKwkJfQorCX0KKworCWNvcHlfbGUxNihleHRyYS5tYWdpYywgMHg1NDU1KTsKKwljb3B5X2xlMTYoZXh0cmEuZXh0cmFfc2l6ZSwgWklQX0VYVFJBX01USU1FX1BBWUxPQURfU0laRSk7CisJZXh0cmEuZmxhZ3NbMF0gPSAxOwkvKiBqdXN0IG10aW1lICovCisJY29weV9sZTMyKGV4dHJhLm10aW1lLCBhcmdzLT50aW1lKTsKKworCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBmcmVlIHNwYWNlIGluIHRoZSBkaWN0aW9uYXJ5ICovCisJZGlyZW50c2l6ZSA9IFpJUF9ESVJfSEVBREVSX1NJWkUgKyBwYXRobGVuICsgWklQX0VYVFJBX01USU1FX1NJWkU7CisJd2hpbGUgKHppcF9kaXJfc2l6ZSA8IHppcF9kaXJfb2Zmc2V0ICsgZGlyZW50c2l6ZSkgeworCQl6aXBfZGlyX3NpemUgKz0gWklQX0RJUkVDVE9SWV9NSU5fU0laRTsKKwkJemlwX2RpciA9IHhyZWFsbG9jKHppcF9kaXIsIHppcF9kaXJfc2l6ZSk7CisJfQorCisJY29weV9sZTMyKGRpcmVudC5tYWdpYywgMHgwMjAxNGI1MCk7CisJY29weV9sZTE2KGRpcmVudC5jcmVhdG9yX3ZlcnNpb24sIGNyZWF0b3JfdmVyc2lvbik7CisJY29weV9sZTE2KGRpcmVudC52ZXJzaW9uLCAxMCk7CisJY29weV9sZTE2KGRpcmVudC5mbGFncywgZmxhZ3MpOworCWNvcHlfbGUxNihkaXJlbnQuY29tcHJlc3Npb25fbWV0aG9kLCBtZXRob2QpOworCWNvcHlfbGUxNihkaXJlbnQubXRpbWUsIHppcF90aW1lKTsKKwljb3B5X2xlMTYoZGlyZW50Lm1kYXRlLCB6aXBfZGF0ZSk7CisJc2V0X3ppcF9kaXJfZGF0YV9kZXNjKCZkaXJlbnQsIHNpemUsIGNvbXByZXNzZWRfc2l6ZSwgY3JjKTsKKwljb3B5X2xlMTYoZGlyZW50LmZpbGVuYW1lX2xlbmd0aCwgcGF0aGxlbik7CisJY29weV9sZTE2KGRpcmVudC5leHRyYV9sZW5ndGgsIFpJUF9FWFRSQV9NVElNRV9TSVpFKTsKKwljb3B5X2xlMTYoZGlyZW50LmNvbW1lbnRfbGVuZ3RoLCAwKTsKKwljb3B5X2xlMTYoZGlyZW50LmRpc2ssIDApOworCWNvcHlfbGUzMihkaXJlbnQuYXR0cjIsIGF0dHIyKTsKKwljb3B5X2xlMzIoZGlyZW50Lm9mZnNldCwgemlwX29mZnNldCk7CisKKwljb3B5X2xlMzIoaGVhZGVyLm1hZ2ljLCAweDA0MDM0YjUwKTsKKwljb3B5X2xlMTYoaGVhZGVyLnZlcnNpb24sIDEwKTsKKwljb3B5X2xlMTYoaGVhZGVyLmZsYWdzLCBmbGFncyk7CisJY29weV9sZTE2KGhlYWRlci5jb21wcmVzc2lvbl9tZXRob2QsIG1ldGhvZCk7CisJY29weV9sZTE2KGhlYWRlci5tdGltZSwgemlwX3RpbWUpOworCWNvcHlfbGUxNihoZWFkZXIubWRhdGUsIHppcF9kYXRlKTsKKwlzZXRfemlwX2hlYWRlcl9kYXRhX2Rlc2MoJmhlYWRlciwgc2l6ZSwgY29tcHJlc3NlZF9zaXplLCBjcmMpOworCWNvcHlfbGUxNihoZWFkZXIuZmlsZW5hbWVfbGVuZ3RoLCBwYXRobGVuKTsKKwljb3B5X2xlMTYoaGVhZGVyLmV4dHJhX2xlbmd0aCwgWklQX0VYVFJBX01USU1FX1NJWkUpOworCXdyaXRlX29yX2RpZSgxLCAmaGVhZGVyLCBaSVBfTE9DQUxfSEVBREVSX1NJWkUpOworCXppcF9vZmZzZXQgKz0gWklQX0xPQ0FMX0hFQURFUl9TSVpFOworCXdyaXRlX29yX2RpZSgxLCBwYXRoLCBwYXRobGVuKTsKKwl6aXBfb2Zmc2V0ICs9IHBhdGhsZW47CisJd3JpdGVfb3JfZGllKDEsICZleHRyYSwgWklQX0VYVFJBX01USU1FX1NJWkUpOworCXppcF9vZmZzZXQgKz0gWklQX0VYVFJBX01USU1FX1NJWkU7CisJaWYgKHN0cmVhbSAmJiBtZXRob2QgPT0gMCkgeworCQl1bnNpZ25lZCBjaGFyIGJ1ZltTVFJFQU1fQlVGRkVSX1NJWkVdOworCQlzc2l6ZV90IHJlYWRsZW47CisKKwkJZm9yICg7OykgeworCQkJcmVhZGxlbiA9IHJlYWRfaXN0cmVhbShzdHJlYW0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQkJaWYgKHJlYWRsZW4gPD0gMCkKKwkJCQlicmVhazsKKwkJCWNyYyA9IGNyYzMyKGNyYywgYnVmLCByZWFkbGVuKTsKKwkJCWlmIChpc19iaW5hcnkgPT0gLTEpCisJCQkJaXNfYmluYXJ5ID0gZW50cnlfaXNfYmluYXJ5KHBhdGhfd2l0aG91dF9wcmVmaXgsCisJCQkJCQkJICAgIGJ1ZiwgcmVhZGxlbik7CisJCQl3cml0ZV9vcl9kaWUoMSwgYnVmLCByZWFkbGVuKTsKKwkJfQorCQljbG9zZV9pc3RyZWFtKHN0cmVhbSk7CisJCWlmIChyZWFkbGVuKQorCQkJcmV0dXJuIHJlYWRsZW47CisKKwkJY29tcHJlc3NlZF9zaXplID0gc2l6ZTsKKwkJemlwX29mZnNldCArPSBjb21wcmVzc2VkX3NpemU7CisKKwkJd3JpdGVfemlwX2RhdGFfZGVzYyhzaXplLCBjb21wcmVzc2VkX3NpemUsIGNyYyk7CisJCXppcF9vZmZzZXQgKz0gWklQX0RBVEFfREVTQ19TSVpFOworCisJCXNldF96aXBfZGlyX2RhdGFfZGVzYygmZGlyZW50LCBzaXplLCBjb21wcmVzc2VkX3NpemUsIGNyYyk7CisJfSBlbHNlIGlmIChzdHJlYW0gJiYgbWV0aG9kID09IDgpIHsKKwkJdW5zaWduZWQgY2hhciBidWZbU1RSRUFNX0JVRkZFUl9TSVpFXTsKKwkJc3NpemVfdCByZWFkbGVuOworCQlnaXRfenN0cmVhbSB6c3RyZWFtOworCQlpbnQgcmVzdWx0OworCQlzaXplX3Qgb3V0X2xlbjsKKwkJdW5zaWduZWQgY2hhciBjb21wcmVzc2VkW1NUUkVBTV9CVUZGRVJfU0laRSAqIDJdOworCisJCWdpdF9kZWZsYXRlX2luaXRfcmF3KCZ6c3RyZWFtLCBhcmdzLT5jb21wcmVzc2lvbl9sZXZlbCk7CisKKwkJY29tcHJlc3NlZF9zaXplID0gMDsKKwkJenN0cmVhbS5uZXh0X291dCA9IGNvbXByZXNzZWQ7CisJCXpzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGNvbXByZXNzZWQpOworCisJCWZvciAoOzspIHsKKwkJCXJlYWRsZW4gPSByZWFkX2lzdHJlYW0oc3RyZWFtLCBidWYsIHNpemVvZihidWYpKTsKKwkJCWlmIChyZWFkbGVuIDw9IDApCisJCQkJYnJlYWs7CisJCQljcmMgPSBjcmMzMihjcmMsIGJ1ZiwgcmVhZGxlbik7CisJCQlpZiAoaXNfYmluYXJ5ID09IC0xKQorCQkJCWlzX2JpbmFyeSA9IGVudHJ5X2lzX2JpbmFyeShwYXRoX3dpdGhvdXRfcHJlZml4LAorCQkJCQkJCSAgICBidWYsIHJlYWRsZW4pOworCisJCQl6c3RyZWFtLm5leHRfaW4gPSBidWY7CisJCQl6c3RyZWFtLmF2YWlsX2luID0gcmVhZGxlbjsKKwkJCXJlc3VsdCA9IGdpdF9kZWZsYXRlKCZ6c3RyZWFtLCAwKTsKKwkJCWlmIChyZXN1bHQgIT0gWl9PSykKKwkJCQlkaWUoImRlZmxhdGUgZXJyb3IgKCVkKSIsIHJlc3VsdCk7CisJCQlvdXRfbGVuID0genN0cmVhbS5uZXh0X291dCAtIGNvbXByZXNzZWQ7CisKKwkJCWlmIChvdXRfbGVuID4gMCkgeworCQkJCXdyaXRlX29yX2RpZSgxLCBjb21wcmVzc2VkLCBvdXRfbGVuKTsKKwkJCQljb21wcmVzc2VkX3NpemUgKz0gb3V0X2xlbjsKKwkJCQl6c3RyZWFtLm5leHRfb3V0ID0gY29tcHJlc3NlZDsKKwkJCQl6c3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihjb21wcmVzc2VkKTsKKwkJCX0KKworCQl9CisJCWNsb3NlX2lzdHJlYW0oc3RyZWFtKTsKKwkJaWYgKHJlYWRsZW4pCisJCQlyZXR1cm4gcmVhZGxlbjsKKworCQl6c3RyZWFtLm5leHRfaW4gPSBidWY7CisJCXpzdHJlYW0uYXZhaWxfaW4gPSAwOworCQlyZXN1bHQgPSBnaXRfZGVmbGF0ZSgmenN0cmVhbSwgWl9GSU5JU0gpOworCQlpZiAocmVzdWx0ICE9IFpfU1RSRUFNX0VORCkKKwkJCWRpZSgiZGVmbGF0ZSBlcnJvciAoJWQpIiwgcmVzdWx0KTsKKworCQlnaXRfZGVmbGF0ZV9lbmQoJnpzdHJlYW0pOworCQlvdXRfbGVuID0genN0cmVhbS5uZXh0X291dCAtIGNvbXByZXNzZWQ7CisJCXdyaXRlX29yX2RpZSgxLCBjb21wcmVzc2VkLCBvdXRfbGVuKTsKKwkJY29tcHJlc3NlZF9zaXplICs9IG91dF9sZW47CisJCXppcF9vZmZzZXQgKz0gY29tcHJlc3NlZF9zaXplOworCisJCXdyaXRlX3ppcF9kYXRhX2Rlc2Moc2l6ZSwgY29tcHJlc3NlZF9zaXplLCBjcmMpOworCQl6aXBfb2Zmc2V0ICs9IFpJUF9EQVRBX0RFU0NfU0laRTsKKworCQlzZXRfemlwX2Rpcl9kYXRhX2Rlc2MoJmRpcmVudCwgc2l6ZSwgY29tcHJlc3NlZF9zaXplLCBjcmMpOworCX0gZWxzZSBpZiAoY29tcHJlc3NlZF9zaXplID4gMCkgeworCQl3cml0ZV9vcl9kaWUoMSwgb3V0LCBjb21wcmVzc2VkX3NpemUpOworCQl6aXBfb2Zmc2V0ICs9IGNvbXByZXNzZWRfc2l6ZTsKKwl9CisKKwlmcmVlKGRlZmxhdGVkKTsKKwlmcmVlKGJ1ZmZlcik7CisKKwljb3B5X2xlMTYoZGlyZW50LmF0dHIxLCAhaXNfYmluYXJ5KTsKKworCW1lbWNweSh6aXBfZGlyICsgemlwX2Rpcl9vZmZzZXQsICZkaXJlbnQsIFpJUF9ESVJfSEVBREVSX1NJWkUpOworCXppcF9kaXJfb2Zmc2V0ICs9IFpJUF9ESVJfSEVBREVSX1NJWkU7CisJbWVtY3B5KHppcF9kaXIgKyB6aXBfZGlyX29mZnNldCwgcGF0aCwgcGF0aGxlbik7CisJemlwX2Rpcl9vZmZzZXQgKz0gcGF0aGxlbjsKKwltZW1jcHkoemlwX2RpciArIHppcF9kaXJfb2Zmc2V0LCAmZXh0cmEsIFpJUF9FWFRSQV9NVElNRV9TSVpFKTsKKwl6aXBfZGlyX29mZnNldCArPSBaSVBfRVhUUkFfTVRJTUVfU0laRTsKKwl6aXBfZGlyX2VudHJpZXMrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV96aXA2NF90cmFpbGVyKHZvaWQpCit7CisJc3RydWN0IHppcDY0X2Rpcl90cmFpbGVyIHRyYWlsZXI2NDsKKwlzdHJ1Y3QgemlwNjRfZGlyX3RyYWlsZXJfbG9jYXRvciBsb2NhdG9yNjQ7CisKKwljb3B5X2xlMzIodHJhaWxlcjY0Lm1hZ2ljLCAweDA2MDY0YjUwKTsKKwljb3B5X2xlNjQodHJhaWxlcjY0LnJlY29yZF9zaXplLCBaSVA2NF9ESVJfVFJBSUxFUl9SRUNPUkRfU0laRSk7CisJY29weV9sZTE2KHRyYWlsZXI2NC5jcmVhdG9yX3ZlcnNpb24sIG1heF9jcmVhdG9yX3ZlcnNpb24pOworCWNvcHlfbGUxNih0cmFpbGVyNjQudmVyc2lvbiwgNDUpOworCWNvcHlfbGUzMih0cmFpbGVyNjQuZGlzaywgMCk7CisJY29weV9sZTMyKHRyYWlsZXI2NC5kaXJlY3Rvcnlfc3RhcnRfZGlzaywgMCk7CisJY29weV9sZTY0KHRyYWlsZXI2NC5lbnRyaWVzX29uX3RoaXNfZGlzaywgemlwX2Rpcl9lbnRyaWVzKTsKKwljb3B5X2xlNjQodHJhaWxlcjY0LmVudHJpZXMsIHppcF9kaXJfZW50cmllcyk7CisJY29weV9sZTY0KHRyYWlsZXI2NC5zaXplLCB6aXBfZGlyX29mZnNldCk7CisJY29weV9sZTY0KHRyYWlsZXI2NC5vZmZzZXQsIHppcF9vZmZzZXQpOworCisJY29weV9sZTMyKGxvY2F0b3I2NC5tYWdpYywgMHgwNzA2NGI1MCk7CisJY29weV9sZTMyKGxvY2F0b3I2NC5kaXNrLCAwKTsKKwljb3B5X2xlNjQobG9jYXRvcjY0Lm9mZnNldCwgemlwX29mZnNldCArIHppcF9kaXJfb2Zmc2V0KTsKKwljb3B5X2xlMzIobG9jYXRvcjY0Lm51bWJlcl9vZl9kaXNrcywgMSk7CisKKwl3cml0ZV9vcl9kaWUoMSwgJnRyYWlsZXI2NCwgWklQNjRfRElSX1RSQUlMRVJfU0laRSk7CisJd3JpdGVfb3JfZGllKDEsICZsb2NhdG9yNjQsIFpJUDY0X0RJUl9UUkFJTEVSX0xPQ0FUT1JfU0laRSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3ppcF90cmFpbGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHppcF9kaXJfdHJhaWxlciB0cmFpbGVyOworCWludCBjbGFtcGVkID0gMDsKKworCWNvcHlfbGUzMih0cmFpbGVyLm1hZ2ljLCAweDA2MDU0YjUwKTsKKwljb3B5X2xlMTYodHJhaWxlci5kaXNrLCAwKTsKKwljb3B5X2xlMTYodHJhaWxlci5kaXJlY3Rvcnlfc3RhcnRfZGlzaywgMCk7CisJY29weV9sZTE2X2NsYW1wKHRyYWlsZXIuZW50cmllc19vbl90aGlzX2Rpc2ssIHppcF9kaXJfZW50cmllcywKKwkJCSZjbGFtcGVkKTsKKwljb3B5X2xlMTZfY2xhbXAodHJhaWxlci5lbnRyaWVzLCB6aXBfZGlyX2VudHJpZXMsICZjbGFtcGVkKTsKKwljb3B5X2xlMzIodHJhaWxlci5zaXplLCB6aXBfZGlyX29mZnNldCk7CisJY29weV9sZTMyKHRyYWlsZXIub2Zmc2V0LCB6aXBfb2Zmc2V0KTsKKwljb3B5X2xlMTYodHJhaWxlci5jb21tZW50X2xlbmd0aCwgc2hhMSA/IEdJVF9TSEExX0hFWFNaIDogMCk7CisKKwl3cml0ZV9vcl9kaWUoMSwgemlwX2RpciwgemlwX2Rpcl9vZmZzZXQpOworCWlmIChjbGFtcGVkKQorCQl3cml0ZV96aXA2NF90cmFpbGVyKCk7CisJd3JpdGVfb3JfZGllKDEsICZ0cmFpbGVyLCBaSVBfRElSX1RSQUlMRVJfU0laRSk7CisJaWYgKHNoYTEpCisJCXdyaXRlX29yX2RpZSgxLCBzaGExX3RvX2hleChzaGExKSwgR0lUX1NIQTFfSEVYU1opOworfQorCitzdGF0aWMgdm9pZCBkb3NfdGltZSh0aW1lX3QgKnRpbWUsIGludCAqZG9zX2RhdGUsIGludCAqZG9zX3RpbWUpCit7CisJc3RydWN0IHRtICp0ID0gbG9jYWx0aW1lKHRpbWUpOworCisJKmRvc19kYXRlID0gdC0+dG1fbWRheSArICh0LT50bV9tb24gKyAxKSAqIDMyICsKKwkgICAgICAgICAgICAodC0+dG1feWVhciArIDE5MDAgLSAxOTgwKSAqIDUxMjsKKwkqZG9zX3RpbWUgPSB0LT50bV9zZWMgLyAyICsgdC0+dG1fbWluICogMzIgKyB0LT50bV9ob3VyICogMjA0ODsKK30KKworc3RhdGljIGludCB3cml0ZV96aXBfYXJjaGl2ZShjb25zdCBzdHJ1Y3QgYXJjaGl2ZXIgKmFyLAorCQkJICAgICBzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncykKK3sKKwlpbnQgZXJyOworCisJZG9zX3RpbWUoJmFyZ3MtPnRpbWUsICZ6aXBfZGF0ZSwgJnppcF90aW1lKTsKKworCXppcF9kaXIgPSB4bWFsbG9jKFpJUF9ESVJFQ1RPUllfTUlOX1NJWkUpOworCXppcF9kaXJfc2l6ZSA9IFpJUF9ESVJFQ1RPUllfTUlOX1NJWkU7CisKKwllcnIgPSB3cml0ZV9hcmNoaXZlX2VudHJpZXMoYXJncywgd3JpdGVfemlwX2VudHJ5KTsKKwlpZiAoIWVycikKKwkJd3JpdGVfemlwX3RyYWlsZXIoYXJncy0+Y29tbWl0X3NoYTEpOworCisJZnJlZSh6aXBfZGlyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXJjaGl2ZXIgemlwX2FyY2hpdmVyID0geworCSJ6aXAiLAorCXdyaXRlX3ppcF9hcmNoaXZlLAorCUFSQ0hJVkVSX1dBTlRfQ09NUFJFU1NJT05fTEVWRUxTfEFSQ0hJVkVSX1JFTU9URQorfTsKKwordm9pZCBpbml0X3ppcF9hcmNoaXZlcih2b2lkKQoreworCXJlZ2lzdGVyX2FyY2hpdmVyKCZ6aXBfYXJjaGl2ZXIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaGl2ZS5jIGIvYXJjaGl2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzg2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoaXZlLmMKQEAgLTAsMCArMSw1NjAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAiYXJjaGl2ZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBhcmNoaXZlX3VzYWdlW10gPSB7CisJTl8oImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iKSwKKwlOXygiZ2l0IGFyY2hpdmUgLS1saXN0IiksCisJTl8oImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIiksCisJTl8oImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyY2hpdmVyICoqYXJjaGl2ZXJzOworc3RhdGljIGludCBucl9hcmNoaXZlcnM7CitzdGF0aWMgaW50IGFsbG9jX2FyY2hpdmVyczsKK3N0YXRpYyBpbnQgcmVtb3RlX2FsbG93X3VucmVhY2hhYmxlOworCit2b2lkIHJlZ2lzdGVyX2FyY2hpdmVyKHN0cnVjdCBhcmNoaXZlciAqYXIpCit7CisJQUxMT0NfR1JPVyhhcmNoaXZlcnMsIG5yX2FyY2hpdmVycyArIDEsIGFsbG9jX2FyY2hpdmVycyk7CisJYXJjaGl2ZXJzW25yX2FyY2hpdmVycysrXSA9IGFyOworfQorCitzdGF0aWMgdm9pZCBmb3JtYXRfc3Vic3QoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY2hhciAqdG9fZnJlZSA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBmbXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCWN0eC5kYXRlX21vZGUudHlwZSA9IERBVEVfTk9STUFMOworCWN0eC5hYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKKworCWlmIChzcmMgPT0gYnVmLT5idWYpCisJCXRvX2ZyZWUgPSBzdHJidWZfZGV0YWNoKGJ1ZiwgTlVMTCk7CisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpiLCAqYzsKKworCQliID0gbWVtbWVtKHNyYywgbGVuLCAiJEZvcm1hdDoiLCA4KTsKKwkJaWYgKCFiKQorCQkJYnJlYWs7CisJCWMgPSBtZW1jaHIoYiArIDgsICckJywgKHNyYyArIGxlbikgLSBiIC0gOCk7CisJCWlmICghYykKKwkJCWJyZWFrOworCisJCXN0cmJ1Zl9yZXNldCgmZm10KTsKKwkJc3RyYnVmX2FkZCgmZm10LCBiICsgOCwgYyAtIGIgLSA4KTsKKworCQlzdHJidWZfYWRkKGJ1Ziwgc3JjLCBiIC0gc3JjKTsKKwkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgZm10LmJ1ZiwgYnVmLCAmY3R4KTsKKwkJbGVuIC09IGMgKyAxIC0gc3JjOworCQlzcmMgID0gYyArIDE7CisJfQorCXN0cmJ1Zl9hZGQoYnVmLCBzcmMsIGxlbik7CisJc3RyYnVmX3JlbGVhc2UoJmZtdCk7CisJZnJlZSh0b19mcmVlKTsKK30KKwordm9pZCAqc2hhMV9maWxlX3RvX2FyY2hpdmUoY29uc3Qgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsCisJCQkgICBjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgdW5zaWduZWQgaW50IG1vZGUsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkgICB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwl2b2lkICpidWZmZXI7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gYXJncy0+Y29udmVydCA/IGFyZ3MtPmNvbW1pdCA6IE5VTEw7CisKKwlwYXRoICs9IGFyZ3MtPmJhc2VsZW47CisJYnVmZmVyID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgdHlwZSwgc2l6ZXApOworCWlmIChidWZmZXIgJiYgU19JU1JFRyhtb2RlKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlzaXplX3Qgc2l6ZSA9IDA7CisKKwkJc3RyYnVmX2F0dGFjaCgmYnVmLCBidWZmZXIsICpzaXplcCwgKnNpemVwICsgMSk7CisJCWNvbnZlcnRfdG9fd29ya2luZ190cmVlKHBhdGgsIGJ1Zi5idWYsIGJ1Zi5sZW4sICZidWYpOworCQlpZiAoY29tbWl0KQorCQkJZm9ybWF0X3N1YnN0KGNvbW1pdCwgYnVmLmJ1ZiwgYnVmLmxlbiwgJmJ1Zik7CisJCWJ1ZmZlciA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJnNpemUpOworCQkqc2l6ZXAgPSBzaXplOworCX0KKworCXJldHVybiBidWZmZXI7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2FyY2hpdmVfY2hlY2soc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVjaykKK3sKKwlzdGF0aWMgc3RydWN0IGdpdF9hdHRyICphdHRyX2V4cG9ydF9pZ25vcmU7CisJc3RhdGljIHN0cnVjdCBnaXRfYXR0ciAqYXR0cl9leHBvcnRfc3Vic3Q7CisKKwlpZiAoIWF0dHJfZXhwb3J0X2lnbm9yZSkgeworCQlhdHRyX2V4cG9ydF9pZ25vcmUgPSBnaXRfYXR0cigiZXhwb3J0LWlnbm9yZSIpOworCQlhdHRyX2V4cG9ydF9zdWJzdCA9IGdpdF9hdHRyKCJleHBvcnQtc3Vic3QiKTsKKwl9CisJY2hlY2tbMF0uYXR0ciA9IGF0dHJfZXhwb3J0X2lnbm9yZTsKKwljaGVja1sxXS5hdHRyID0gYXR0cl9leHBvcnRfc3Vic3Q7Cit9CisKK3N0cnVjdCBkaXJlY3RvcnkgeworCXN0cnVjdCBkaXJlY3RvcnkgKnVwOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBiYXNlbGVuLCBsZW47CisJdW5zaWduZWQgbW9kZTsKKwlpbnQgc3RhZ2U7CisJY2hhciBwYXRoW0ZMRVhfQVJSQVldOworfTsKKworc3RydWN0IGFyY2hpdmVyX2NvbnRleHQgeworCXN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzOworCXdyaXRlX2FyY2hpdmVfZW50cnlfZm5fdCB3cml0ZV9lbnRyeTsKKwlzdHJ1Y3QgZGlyZWN0b3J5ICpib3R0b207Cit9OworCitzdGF0aWMgaW50IHdyaXRlX2FyY2hpdmVfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqYmFzZSwKKwkJaW50IGJhc2VsZW4sIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBtb2RlLCBpbnQgc3RhZ2UsCisJCXZvaWQgKmNvbnRleHQpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBhcmNoaXZlcl9jb250ZXh0ICpjID0gY29udGV4dDsKKwlzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncyA9IGMtPmFyZ3M7CisJd3JpdGVfYXJjaGl2ZV9lbnRyeV9mbl90IHdyaXRlX2VudHJ5ID0gYy0+d3JpdGVfZW50cnk7CisJc3RydWN0IGdpdF9hdHRyX2NoZWNrIGNoZWNrWzJdOworCWNvbnN0IGNoYXIgKnBhdGhfd2l0aG91dF9wcmVmaXg7CisJaW50IGVycjsKKworCWFyZ3MtPmNvbnZlcnQgPSAwOworCXN0cmJ1Zl9yZXNldCgmcGF0aCk7CisJc3RyYnVmX2dyb3coJnBhdGgsIFBBVEhfTUFYKTsKKwlzdHJidWZfYWRkKCZwYXRoLCBhcmdzLT5iYXNlLCBhcmdzLT5iYXNlbGVuKTsKKwlzdHJidWZfYWRkKCZwYXRoLCBiYXNlLCBiYXNlbGVuKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBmaWxlbmFtZSk7CisJaWYgKFNfSVNESVIobW9kZSkgfHwgU19JU0dJVExJTksobW9kZSkpCisJCXN0cmJ1Zl9hZGRjaCgmcGF0aCwgJy8nKTsKKwlwYXRoX3dpdGhvdXRfcHJlZml4ID0gcGF0aC5idWYgKyBhcmdzLT5iYXNlbGVuOworCisJc2V0dXBfYXJjaGl2ZV9jaGVjayhjaGVjayk7CisJaWYgKCFnaXRfY2hlY2tfYXR0cihwYXRoX3dpdGhvdXRfcHJlZml4LCBBUlJBWV9TSVpFKGNoZWNrKSwgY2hlY2spKSB7CisJCWlmIChBVFRSX1RSVUUoY2hlY2tbMF0udmFsdWUpKQorCQkJcmV0dXJuIDA7CisJCWFyZ3MtPmNvbnZlcnQgPSBBVFRSX1RSVUUoY2hlY2tbMV0udmFsdWUpOworCX0KKworCWlmIChTX0lTRElSKG1vZGUpIHx8IFNfSVNHSVRMSU5LKG1vZGUpKSB7CisJCWlmIChhcmdzLT52ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICIlLipzXG4iLCAoaW50KXBhdGgubGVuLCBwYXRoLmJ1Zik7CisJCWVyciA9IHdyaXRlX2VudHJ5KGFyZ3MsIHNoYTEsIHBhdGguYnVmLCBwYXRoLmxlbiwgbW9kZSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlyZXR1cm4gKFNfSVNESVIobW9kZSkgPyBSRUFEX1RSRUVfUkVDVVJTSVZFIDogMCk7CisJfQorCisJaWYgKGFyZ3MtPnZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiJS4qc1xuIiwgKGludClwYXRoLmxlbiwgcGF0aC5idWYpOworCXJldHVybiB3cml0ZV9lbnRyeShhcmdzLCBzaGExLCBwYXRoLmJ1ZiwgcGF0aC5sZW4sIG1vZGUpOworfQorCitzdGF0aWMgaW50IHdyaXRlX2FyY2hpdmVfZW50cnlfYnVmKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCWNvbnN0IGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBtb2RlLCBpbnQgc3RhZ2UsCisJCXZvaWQgKmNvbnRleHQpCit7CisJcmV0dXJuIHdyaXRlX2FyY2hpdmVfZW50cnkoc2hhMSwgYmFzZS0+YnVmLCBiYXNlLT5sZW4sCisJCQkJICAgICBmaWxlbmFtZSwgbW9kZSwgc3RhZ2UsIGNvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9kaXJlY3RvcnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJc3RydWN0IHN0cmJ1ZiAqYmFzZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCXVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwgc3RydWN0IGFyY2hpdmVyX2NvbnRleHQgKmMpCit7CisJc3RydWN0IGRpcmVjdG9yeSAqZDsKKwlzaXplX3QgbGVuID0gYmFzZS0+bGVuICsgMSArIHN0cmxlbihmaWxlbmFtZSkgKyAxOworCWQgPSB4bWFsbG9jKHNpemVvZigqZCkgKyBsZW4pOworCWQtPnVwCSAgID0gYy0+Ym90dG9tOworCWQtPmJhc2VsZW4gPSBiYXNlLT5sZW47CisJZC0+bW9kZQkgICA9IG1vZGU7CisJZC0+c3RhZ2UgICA9IHN0YWdlOworCWMtPmJvdHRvbSAgPSBkOworCWQtPmxlbiA9IHhzbnByaW50ZihkLT5wYXRoLCBsZW4sICIlLipzJXMvIiwgKGludCliYXNlLT5sZW4sIGJhc2UtPmJ1ZiwgZmlsZW5hbWUpOworCWhhc2hjcHkoZC0+b2lkLmhhc2gsIHNoYTEpOworfQorCitzdGF0aWMgaW50IHdyaXRlX2RpcmVjdG9yeShzdHJ1Y3QgYXJjaGl2ZXJfY29udGV4dCAqYykKK3sKKwlzdHJ1Y3QgZGlyZWN0b3J5ICpkID0gYy0+Ym90dG9tOworCWludCByZXQ7CisKKwlpZiAoIWQpCisJCXJldHVybiAwOworCWMtPmJvdHRvbSA9IGQtPnVwOworCWQtPnBhdGhbZC0+bGVuIC0gMV0gPSAnXDAnOyAvKiBubyB0cmFpbGluZyBzbGFzaCAqLworCXJldCA9CisJCXdyaXRlX2RpcmVjdG9yeShjKSB8fAorCQl3cml0ZV9hcmNoaXZlX2VudHJ5KGQtPm9pZC5oYXNoLCBkLT5wYXRoLCBkLT5iYXNlbGVuLAorCQkJCSAgICBkLT5wYXRoICsgZC0+YmFzZWxlbiwgZC0+bW9kZSwKKwkJCQkgICAgZC0+c3RhZ2UsIGMpICE9IFJFQURfVFJFRV9SRUNVUlNJVkU7CisJZnJlZShkKTsKKwlyZXR1cm4gcmV0ID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50IHF1ZXVlX29yX3dyaXRlX2FyY2hpdmVfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJc3RydWN0IHN0cmJ1ZiAqYmFzZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCXVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgYXJjaGl2ZXJfY29udGV4dCAqYyA9IGNvbnRleHQ7CisKKwl3aGlsZSAoYy0+Ym90dG9tICYmCisJICAgICAgICEoYmFzZS0+bGVuID49IGMtPmJvdHRvbS0+bGVuICYmCisJCSAhc3RybmNtcChiYXNlLT5idWYsIGMtPmJvdHRvbS0+cGF0aCwgYy0+Ym90dG9tLT5sZW4pKSkgeworCQlzdHJ1Y3QgZGlyZWN0b3J5ICpuZXh0ID0gYy0+Ym90dG9tLT51cDsKKwkJZnJlZShjLT5ib3R0b20pOworCQljLT5ib3R0b20gPSBuZXh0OworCX0KKworCWlmIChTX0lTRElSKG1vZGUpKSB7CisJCXF1ZXVlX2RpcmVjdG9yeShzaGExLCBiYXNlLCBmaWxlbmFtZSwKKwkJCQltb2RlLCBzdGFnZSwgYyk7CisJCXJldHVybiBSRUFEX1RSRUVfUkVDVVJTSVZFOworCX0KKworCWlmICh3cml0ZV9kaXJlY3RvcnkoYykpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gd3JpdGVfYXJjaGl2ZV9lbnRyeShzaGExLCBiYXNlLT5idWYsIGJhc2UtPmxlbiwgZmlsZW5hbWUsIG1vZGUsCisJCQkJICAgc3RhZ2UsIGNvbnRleHQpOworfQorCitpbnQgd3JpdGVfYXJjaGl2ZV9lbnRyaWVzKHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQl3cml0ZV9hcmNoaXZlX2VudHJ5X2ZuX3Qgd3JpdGVfZW50cnkpCit7CisJc3RydWN0IGFyY2hpdmVyX2NvbnRleHQgY29udGV4dDsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHQ7CisJaW50IGVycjsKKworCWlmIChhcmdzLT5iYXNlbGVuID4gMCAmJiBhcmdzLT5iYXNlW2FyZ3MtPmJhc2VsZW4gLSAxXSA9PSAnLycpIHsKKwkJc2l6ZV90IGxlbiA9IGFyZ3MtPmJhc2VsZW47CisKKwkJd2hpbGUgKGxlbiA+IDEgJiYgYXJncy0+YmFzZVtsZW4gLSAyXSA9PSAnLycpCisJCQlsZW4tLTsKKwkJaWYgKGFyZ3MtPnZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiUuKnNcbiIsIChpbnQpbGVuLCBhcmdzLT5iYXNlKTsKKwkJZXJyID0gd3JpdGVfZW50cnkoYXJncywgYXJncy0+dHJlZS0+b2JqZWN0LnNoYTEsIGFyZ3MtPmJhc2UsCisJCQkJICBsZW4sIDA0MDc3Nyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCW1lbXNldCgmY29udGV4dCwgMCwgc2l6ZW9mKGNvbnRleHQpKTsKKwljb250ZXh0LmFyZ3MgPSBhcmdzOworCWNvbnRleHQud3JpdGVfZW50cnkgPSB3cml0ZV9lbnRyeTsKKworCS8qCisJICogU2V0dXAgaW5kZXggYW5kIGluc3RydWN0IGF0dHIgdG8gcmVhZCBpbmRleCBvbmx5CisJICovCisJaWYgKCFhcmdzLT53b3JrdHJlZV9hdHRyaWJ1dGVzKSB7CisJCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwkJb3B0cy5pbmRleF9vbmx5ID0gMTsKKwkJb3B0cy5oZWFkX2lkeCA9IC0xOworCQlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKwkJb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKwkJaW5pdF90cmVlX2Rlc2MoJnQsIGFyZ3MtPnRyZWUtPmJ1ZmZlciwgYXJncy0+dHJlZS0+c2l6ZSk7CisJCWlmICh1bnBhY2tfdHJlZXMoMSwgJnQsICZvcHRzKSkKKwkJCXJldHVybiAtMTsKKwkJZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihHSVRfQVRUUl9JTkRFWCwgJnRoZV9pbmRleCk7CisJfQorCisJZXJyID0gcmVhZF90cmVlX3JlY3Vyc2l2ZShhcmdzLT50cmVlLCAiIiwgMCwgMCwgJmFyZ3MtPnBhdGhzcGVjLAorCQkJCSAgYXJncy0+cGF0aHNwZWMuaGFzX3dpbGRjYXJkID8KKwkJCQkgIHF1ZXVlX29yX3dyaXRlX2FyY2hpdmVfZW50cnkgOgorCQkJCSAgd3JpdGVfYXJjaGl2ZV9lbnRyeV9idWYsCisJCQkJICAmY29udGV4dCk7CisJaWYgKGVyciA9PSBSRUFEX1RSRUVfUkVDVVJTSVZFKQorCQllcnIgPSAwOworCXdoaWxlIChjb250ZXh0LmJvdHRvbSkgeworCQlzdHJ1Y3QgZGlyZWN0b3J5ICpuZXh0ID0gY29udGV4dC5ib3R0b20tPnVwOworCQlmcmVlKGNvbnRleHQuYm90dG9tKTsKKwkJY29udGV4dC5ib3R0b20gPSBuZXh0OworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFyY2hpdmVyICpsb29rdXBfYXJjaGl2ZXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfYXJjaGl2ZXJzOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgYXJjaGl2ZXJzW2ldLT5uYW1lKSkKKwkJCXJldHVybiBhcmNoaXZlcnNbaV07CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHJlamVjdF9lbnRyeShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQkJY29uc3QgY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIG1vZGUsCisJCQlpbnQgc3RhZ2UsIHZvaWQgKmNvbnRleHQpCit7CisJaW50IHJldCA9IC0xOworCWlmIChTX0lTRElSKG1vZGUpKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGJ1Zigmc2IsIGJhc2UpOworCQlzdHJidWZfYWRkc3RyKCZzYiwgZmlsZW5hbWUpOworCQlpZiAoIW1hdGNoX3BhdGhzcGVjKGNvbnRleHQsIHNiLmJ1Ziwgc2IubGVuLCAwLCBOVUxMLCAxKSkKKwkJCXJldCA9IFJFQURfVFJFRV9SRUNVUlNJVkU7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGF0aF9leGlzdHMoc3RydWN0IHRyZWUgKnRyZWUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqcGF0aHNbXSA9IHsgcGF0aCwgTlVMTCB9OworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlpbnQgcmV0OworCisJcGFyc2VfcGF0aHNwZWMoJnBhdGhzcGVjLCAwLCAwLCAiIiwgcGF0aHMpOworCXBhdGhzcGVjLnJlY3Vyc2l2ZSA9IDE7CisJcmV0ID0gcmVhZF90cmVlX3JlY3Vyc2l2ZSh0cmVlLCAiIiwgMCwgMCwgJnBhdGhzcGVjLAorCQkJCSAgcmVqZWN0X2VudHJ5LCAmcGF0aHNwZWMpOworCWZyZWVfcGF0aHNwZWMoJnBhdGhzcGVjKTsKKwlyZXR1cm4gcmV0ICE9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3BhdGhzcGVjX2FyZyhjb25zdCBjaGFyICoqcGF0aHNwZWMsCisJCXN0cnVjdCBhcmNoaXZlcl9hcmdzICphcl9hcmdzKQoreworCS8qCisJICogbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggcGFyc2VfcGF0aHNwZWMgaW4gcGF0aF9leGlzdHMoKQorCSAqIEFsc28gaWYgcGF0aHNwZWMgcGF0dGVybnMgYXJlIGRlcGVuZGVudCwgd2UncmUgaW4gYmlnCisJICogdHJvdWJsZSBhcyB3ZSB0ZXN0IGVhY2ggb25lIHNlcGFyYXRlbHkKKwkgKi8KKwlwYXJzZV9wYXRoc3BlYygmYXJfYXJncy0+cGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCwKKwkJICAgICAgICIiLCBwYXRoc3BlYyk7CisJYXJfYXJncy0+cGF0aHNwZWMucmVjdXJzaXZlID0gMTsKKwlpZiAocGF0aHNwZWMpIHsKKwkJd2hpbGUgKCpwYXRoc3BlYykgeworCQkJaWYgKCoqcGF0aHNwZWMgJiYgIXBhdGhfZXhpc3RzKGFyX2FyZ3MtPnRyZWUsICpwYXRoc3BlYykpCisJCQkJZGllKF8oInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiKSwgKnBhdGhzcGVjKTsKKwkJCXBhdGhzcGVjKys7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX3RyZWVpc2hfYXJnKGNvbnN0IGNoYXIgKiphcmd2LAorCQlzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJfYXJncywgY29uc3QgY2hhciAqcHJlZml4LAorCQlpbnQgcmVtb3RlKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSBhcmd2WzBdOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9zaGExOworCXRpbWVfdCBhcmNoaXZlX3RpbWU7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJLyogUmVtb3RlcyBhcmUgb25seSBhbGxvd2VkIHRvIGZldGNoIGFjdHVhbCByZWZzICovCisJaWYgKHJlbW90ZSAmJiAhcmVtb3RlX2FsbG93X3VucmVhY2hhYmxlKSB7CisJCWNoYXIgKnJlZiA9IE5VTEw7CisJCWNvbnN0IGNoYXIgKmNvbG9uID0gc3RyY2hybnVsKG5hbWUsICc6Jyk7CisJCWludCByZWZuYW1lbGVuID0gY29sb24gLSBuYW1lOworCisJCWlmICghZHdpbV9yZWYobmFtZSwgcmVmbmFtZWxlbiwgb2lkLmhhc2gsICZyZWYpKQorCQkJZGllKCJubyBzdWNoIHJlZjogJS4qcyIsIHJlZm5hbWVsZW4sIG5hbWUpOworCQlmcmVlKHJlZik7CisJfQorCisJaWYgKGdldF9zaGExKG5hbWUsIG9pZC5oYXNoKSkKKwkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSIpOworCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KG9pZC5oYXNoLCAxKTsKKwlpZiAoY29tbWl0KSB7CisJCWNvbW1pdF9zaGExID0gY29tbWl0LT5vYmplY3Quc2hhMTsKKwkJYXJjaGl2ZV90aW1lID0gY29tbWl0LT5kYXRlOworCX0gZWxzZSB7CisJCWNvbW1pdF9zaGExID0gTlVMTDsKKwkJYXJjaGl2ZV90aW1lID0gdGltZShOVUxMKTsKKwl9CisKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChvaWQuaGFzaCk7CisJaWYgKHRyZWUgPT0gTlVMTCkKKwkJZGllKCJub3QgYSB0cmVlIG9iamVjdCIpOworCisJaWYgKHByZWZpeCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHRyZWVfb2lkOworCQl1bnNpZ25lZCBpbnQgbW9kZTsKKwkJaW50IGVycjsKKworCQllcnIgPSBnZXRfdHJlZV9lbnRyeSh0cmVlLT5vYmplY3Quc2hhMSwgcHJlZml4LAorCQkJCSAgICAgdHJlZV9vaWQuaGFzaCwgJm1vZGUpOworCQlpZiAoZXJyIHx8ICFTX0lTRElSKG1vZGUpKQorCQkJZGllKCJjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVudHJhY2tlZCIpOworCisJCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KHRyZWVfb2lkLmhhc2gpOworCX0KKwlhcl9hcmdzLT50cmVlID0gdHJlZTsKKwlhcl9hcmdzLT5jb21taXRfc2hhMSA9IGNvbW1pdF9zaGExOworCWFyX2FyZ3MtPmNvbW1pdCA9IGNvbW1pdDsKKwlhcl9hcmdzLT50aW1lID0gYXJjaGl2ZV90aW1lOworfQorCisjZGVmaW5lIE9QVF9fQ09NUFIocywgdiwgaCwgcCkgXAorCXsgT1BUSU9OX1NFVF9JTlQsIChzKSwgTlVMTCwgKHYpLCBOVUxMLCAoaCksIFwKKwkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgKHApIH0KKyNkZWZpbmUgT1BUX19DT01QUl9ISURERU4ocywgdiwgcCkgXAorCXsgT1BUSU9OX1NFVF9JTlQsIChzKSwgTlVMTCwgKHYpLCBOVUxMLCAiIiwgXAorCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX0hJRERFTiwgTlVMTCwgKHApIH0KKworc3RhdGljIGludCBwYXJzZV9hcmNoaXZlX2FyZ3MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQljb25zdCBzdHJ1Y3QgYXJjaGl2ZXIgKiphciwgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsCisJCWNvbnN0IGNoYXIgKm5hbWVfaGludCwgaW50IGlzX3JlbW90ZSkKK3sKKwljb25zdCBjaGFyICpmb3JtYXQgPSBOVUxMOworCWNvbnN0IGNoYXIgKmJhc2UgPSBOVUxMOworCWNvbnN0IGNoYXIgKnJlbW90ZSA9IE5VTEw7CisJY29uc3QgY2hhciAqZXhlYyA9IE5VTEw7CisJY29uc3QgY2hhciAqb3V0cHV0ID0gTlVMTDsKKwlpbnQgY29tcHJlc3Npb25fbGV2ZWwgPSAtMTsKKwlpbnQgdmVyYm9zZSA9IDA7CisJaW50IGk7CisJaW50IGxpc3QgPSAwOworCWludCB3b3JrdHJlZV9hdHRyaWJ1dGVzID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX1NUUklORygwLCAiZm9ybWF0IiwgJmZvcm1hdCwgTl8oImZtdCIpLCBOXygiYXJjaGl2ZSBmb3JtYXQiKSksCisJCU9QVF9TVFJJTkcoMCwgInByZWZpeCIsICZiYXNlLCBOXygicHJlZml4IiksCisJCQlOXygicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIpKSwKKwkJT1BUX1NUUklORygnbycsICJvdXRwdXQiLCAmb3V0cHV0LCBOXygiZmlsZSIpLAorCQkJTl8oIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIpKSwKKwkJT1BUX0JPT0woMCwgIndvcmt0cmVlLWF0dHJpYnV0ZXMiLCAmd29ya3RyZWVfYXR0cmlidXRlcywKKwkJCU5fKCJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IikpLAorCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJyZXBvcnQgYXJjaGl2ZWQgZmlsZXMgb24gc3RkZXJyIikpLAorCQlPUFRfX0NPTVBSKCcwJywgJmNvbXByZXNzaW9uX2xldmVsLCBOXygic3RvcmUgb25seSIpLCAwKSwKKwkJT1BUX19DT01QUignMScsICZjb21wcmVzc2lvbl9sZXZlbCwgTl8oImNvbXByZXNzIGZhc3RlciIpLCAxKSwKKwkJT1BUX19DT01QUl9ISURERU4oJzInLCAmY29tcHJlc3Npb25fbGV2ZWwsIDIpLAorCQlPUFRfX0NPTVBSX0hJRERFTignMycsICZjb21wcmVzc2lvbl9sZXZlbCwgMyksCisJCU9QVF9fQ09NUFJfSElEREVOKCc0JywgJmNvbXByZXNzaW9uX2xldmVsLCA0KSwKKwkJT1BUX19DT01QUl9ISURERU4oJzUnLCAmY29tcHJlc3Npb25fbGV2ZWwsIDUpLAorCQlPUFRfX0NPTVBSX0hJRERFTignNicsICZjb21wcmVzc2lvbl9sZXZlbCwgNiksCisJCU9QVF9fQ09NUFJfSElEREVOKCc3JywgJmNvbXByZXNzaW9uX2xldmVsLCA3KSwKKwkJT1BUX19DT01QUl9ISURERU4oJzgnLCAmY29tcHJlc3Npb25fbGV2ZWwsIDgpLAorCQlPUFRfX0NPTVBSKCc5JywgJmNvbXByZXNzaW9uX2xldmVsLCBOXygiY29tcHJlc3MgYmV0dGVyIiksIDkpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQk9PTCgnbCcsICJsaXN0IiwgJmxpc3QsCisJCQlOXygibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIikpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfU1RSSU5HKDAsICJyZW1vdGUiLCAmcmVtb3RlLCBOXygicmVwbyIpLAorCQkJTl8oInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IikpLAorCQlPUFRfU1RSSU5HKDAsICJleGVjIiwgJmV4ZWMsIE5fKCJjb21tYW5kIiksCisJCQlOXygicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0cywgYXJjaGl2ZV91c2FnZSwgMCk7CisKKwlpZiAocmVtb3RlKQorCQlkaWUoIlVuZXhwZWN0ZWQgb3B0aW9uIC0tcmVtb3RlIik7CisJaWYgKGV4ZWMpCisJCWRpZSgiT3B0aW9uIC0tZXhlYyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1yZW1vdGUiKTsKKwlpZiAob3V0cHV0KQorCQlkaWUoIlVuZXhwZWN0ZWQgb3B0aW9uIC0tb3V0cHV0Iik7CisKKwlpZiAoIWJhc2UpCisJCWJhc2UgPSAiIjsKKworCWlmIChsaXN0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBucl9hcmNoaXZlcnM7IGkrKykKKwkJCWlmICghaXNfcmVtb3RlIHx8IGFyY2hpdmVyc1tpXS0+ZmxhZ3MgJiBBUkNISVZFUl9SRU1PVEUpCisJCQkJcHJpbnRmKCIlc1xuIiwgYXJjaGl2ZXJzW2ldLT5uYW1lKTsKKwkJZXhpdCgwKTsKKwl9CisKKwlpZiAoIWZvcm1hdCAmJiBuYW1lX2hpbnQpCisJCWZvcm1hdCA9IGFyY2hpdmVfZm9ybWF0X2Zyb21fZmlsZW5hbWUobmFtZV9oaW50KTsKKwlpZiAoIWZvcm1hdCkKKwkJZm9ybWF0ID0gInRhciI7CisKKwkvKiBXZSBuZWVkIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgLS0gdHJlZS1pc2ggKi8KKwlpZiAoYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhhcmNoaXZlX3VzYWdlLCBvcHRzKTsKKwkqYXIgPSBsb29rdXBfYXJjaGl2ZXIoZm9ybWF0KTsKKwlpZiAoISphciB8fCAoaXNfcmVtb3RlICYmICEoKCphciktPmZsYWdzICYgQVJDSElWRVJfUkVNT1RFKSkpCisJCWRpZSgiVW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIiwgZm9ybWF0KTsKKworCWFyZ3MtPmNvbXByZXNzaW9uX2xldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworCWlmIChjb21wcmVzc2lvbl9sZXZlbCAhPSAtMSkgeworCQlpZiAoKCphciktPmZsYWdzICYgQVJDSElWRVJfV0FOVF9DT01QUkVTU0lPTl9MRVZFTFMpCisJCQlhcmdzLT5jb21wcmVzc2lvbl9sZXZlbCA9IGNvbXByZXNzaW9uX2xldmVsOworCQllbHNlIHsKKwkJCWRpZSgiQXJndW1lbnQgbm90IHN1cHBvcnRlZCBmb3IgZm9ybWF0ICclcyc6IC0lZCIsCisJCQkJCWZvcm1hdCwgY29tcHJlc3Npb25fbGV2ZWwpOworCQl9CisJfQorCWFyZ3MtPnZlcmJvc2UgPSB2ZXJib3NlOworCWFyZ3MtPmJhc2UgPSBiYXNlOworCWFyZ3MtPmJhc2VsZW4gPSBzdHJsZW4oYmFzZSk7CisJYXJncy0+d29ya3RyZWVfYXR0cmlidXRlcyA9IHdvcmt0cmVlX2F0dHJpYnV0ZXM7CisKKwlyZXR1cm4gYXJnYzsKK30KKworaW50IHdyaXRlX2FyY2hpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgaW50IHNldHVwX3ByZWZpeCwgY29uc3QgY2hhciAqbmFtZV9oaW50LCBpbnQgcmVtb3RlKQoreworCWludCBub25naXQgPSAwOworCWNvbnN0IHN0cnVjdCBhcmNoaXZlciAqYXIgPSBOVUxMOworCXN0cnVjdCBhcmNoaXZlcl9hcmdzIGFyZ3M7CisKKwlpZiAoc2V0dXBfcHJlZml4ICYmIHByZWZpeCA9PSBOVUxMKQorCQlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKKworCWdpdF9jb25maWdfZ2V0X2Jvb2woInVwbG9hZGFyY2hpdmUuYWxsb3d1bnJlYWNoYWJsZSIsICZyZW1vdGVfYWxsb3dfdW5yZWFjaGFibGUpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWluaXRfdGFyX2FyY2hpdmVyKCk7CisJaW5pdF96aXBfYXJjaGl2ZXIoKTsKKworCWFyZ2MgPSBwYXJzZV9hcmNoaXZlX2FyZ3MoYXJnYywgYXJndiwgJmFyLCAmYXJncywgbmFtZV9oaW50LCByZW1vdGUpOworCWlmIChub25naXQpIHsKKwkJLyoKKwkJICogV2Uga25vdyB0aGlzIHdpbGwgZGllKCkgd2l0aCBhbiBlcnJvciwgc28gd2UgY291bGQganVzdAorCQkgKiBkaWUgb3Vyc2VsdmVzOyBidXQgaXRzIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBtb3JlIHNwZWNpZmljCisJCSAqIHRoYW4gd2hhdCB3ZSBjb3VsZCB3cml0ZSBoZXJlLgorCQkgKi8KKwkJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCX0KKworCXBhcnNlX3RyZWVpc2hfYXJnKGFyZ3YsICZhcmdzLCBwcmVmaXgsIHJlbW90ZSk7CisJcGFyc2VfcGF0aHNwZWNfYXJnKGFyZ3YgKyAxLCAmYXJncyk7CisKKwlyZXR1cm4gYXItPndyaXRlX2FyY2hpdmUoYXIsICZhcmdzKTsKK30KKworc3RhdGljIGludCBtYXRjaF9leHRlbnNpb24oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmV4dCkKK3sKKwlpbnQgcHJlZml4bGVuID0gc3RybGVuKGZpbGVuYW1lKSAtIHN0cmxlbihleHQpOworCisJLyoKKwkgKiBXZSBuZWVkIDEgY2hhcmFjdGVyIGZvciB0aGUgJy4nLCBhbmQgMSBjaGFyYWN0ZXIgdG8gZW5zdXJlIHRoYXQgdGhlCisJICogcHJlZml4IGlzIG5vbi1lbXB0eSAoay5lLiwgd2UgZG9uJ3QgbWF0Y2ggLnRhci5neiB3aXRoIG5vIGFjdHVhbAorCSAqIGZpbGVuYW1lKS4KKwkgKi8KKwlpZiAocHJlZml4bGVuIDwgMiB8fCBmaWxlbmFtZVtwcmVmaXhsZW4gLSAxXSAhPSAnLicpCisJCXJldHVybiAwOworCXJldHVybiAhc3RyY21wKGZpbGVuYW1lICsgcHJlZml4bGVuLCBleHQpOworfQorCitjb25zdCBjaGFyICphcmNoaXZlX2Zvcm1hdF9mcm9tX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2FyY2hpdmVyczsgaSsrKQorCQlpZiAobWF0Y2hfZXh0ZW5zaW9uKGZpbGVuYW1lLCBhcmNoaXZlcnNbaV0tPm5hbWUpKQorCQkJcmV0dXJuIGFyY2hpdmVyc1tpXS0+bmFtZTsKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2FyY2hpdmUuaCBiL2FyY2hpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTc5MWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaGl2ZS5oCkBAIC0wLDAgKzEsNDcgQEAKKyNpZm5kZWYgQVJDSElWRV9ICisjZGVmaW5lIEFSQ0hJVkVfSAorCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKworc3RydWN0IGFyY2hpdmVyX2FyZ3MgeworCWNvbnN0IGNoYXIgKmJhc2U7CisJc2l6ZV90IGJhc2VsZW47CisJc3RydWN0IHRyZWUgKnRyZWU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWl0X3NoYTE7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXRpbWVfdCB0aW1lOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwl1bnNpZ25lZCBpbnQgdmVyYm9zZSA6IDE7CisJdW5zaWduZWQgaW50IHdvcmt0cmVlX2F0dHJpYnV0ZXMgOiAxOworCXVuc2lnbmVkIGludCBjb252ZXJ0IDogMTsKKwlpbnQgY29tcHJlc3Npb25fbGV2ZWw7Cit9OworCisjZGVmaW5lIEFSQ0hJVkVSX1dBTlRfQ09NUFJFU1NJT05fTEVWRUxTIDEKKyNkZWZpbmUgQVJDSElWRVJfUkVNT1RFIDIKK3N0cnVjdCBhcmNoaXZlciB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgKCp3cml0ZV9hcmNoaXZlKShjb25zdCBzdHJ1Y3QgYXJjaGl2ZXIgKiwgc3RydWN0IGFyY2hpdmVyX2FyZ3MgKik7CisJdW5zaWduZWQgZmxhZ3M7CisJdm9pZCAqZGF0YTsKK307CitleHRlcm4gdm9pZCByZWdpc3Rlcl9hcmNoaXZlcihzdHJ1Y3QgYXJjaGl2ZXIgKik7CisKK2V4dGVybiB2b2lkIGluaXRfdGFyX2FyY2hpdmVyKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF96aXBfYXJjaGl2ZXIodm9pZCk7CisKK3R5cGVkZWYgaW50ICgqd3JpdGVfYXJjaGl2ZV9lbnRyeV9mbl90KShzdHJ1Y3QgYXJjaGl2ZXJfYXJncyAqYXJncywKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkJY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhsZW4sCisJCQkJCXVuc2lnbmVkIGludCBtb2RlKTsKKworZXh0ZXJuIGludCB3cml0ZV9hcmNoaXZlX2VudHJpZXMoc3RydWN0IGFyY2hpdmVyX2FyZ3MgKmFyZ3MsIHdyaXRlX2FyY2hpdmVfZW50cnlfZm5fdCB3cml0ZV9lbnRyeSk7CitleHRlcm4gaW50IHdyaXRlX2FyY2hpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBzZXR1cF9wcmVmaXgsIGNvbnN0IGNoYXIgKm5hbWVfaGludCwgaW50IHJlbW90ZSk7CisKK2NvbnN0IGNoYXIgKmFyY2hpdmVfZm9ybWF0X2Zyb21fZmlsZW5hbWUoY29uc3QgY2hhciAqZmlsZW5hbWUpOworZXh0ZXJuIHZvaWQgKnNoYTFfZmlsZV90b19hcmNoaXZlKGNvbnN0IHN0cnVjdCBhcmNoaXZlcl9hcmdzICphcmdzLAorCQkJCSAgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgIHVuc2lnbmVkIGludCBtb2RlLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkJCSAgdW5zaWduZWQgbG9uZyAqc2l6ZXApOworCisjZW5kaWYJLyogQVJDSElWRV9IICovCmRpZmYgLS1naXQgYS9hcmd2LWFycmF5LmMgYi9hcmd2LWFycmF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlZDQ3NwotLS0gL2Rldi9udWxsCisrKyBiL2FyZ3YtYXJyYXkuYwpAQCAtMCwwICsxLDc2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK2NvbnN0IGNoYXIgKmVtcHR5X2FyZ3ZbXSA9IHsgTlVMTCB9OworCit2b2lkIGFyZ3ZfYXJyYXlfaW5pdChzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXkpCit7CisJYXJyYXktPmFyZ3YgPSBlbXB0eV9hcmd2OworCWFycmF5LT5hcmdjID0gMDsKKwlhcnJheS0+YWxsb2MgPSAwOworfQorCitzdGF0aWMgdm9pZCBhcmd2X2FycmF5X3B1c2hfbm9kdXAoc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoYXJyYXktPmFyZ3YgPT0gZW1wdHlfYXJndikKKwkJYXJyYXktPmFyZ3YgPSBOVUxMOworCisJQUxMT0NfR1JPVyhhcnJheS0+YXJndiwgYXJyYXktPmFyZ2MgKyAyLCBhcnJheS0+YWxsb2MpOworCWFycmF5LT5hcmd2W2FycmF5LT5hcmdjKytdID0gdmFsdWU7CisJYXJyYXktPmFyZ3ZbYXJyYXktPmFyZ2NdID0gTlVMTDsKK30KKwordm9pZCBhcmd2X2FycmF5X3B1c2goc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlhcmd2X2FycmF5X3B1c2hfbm9kdXAoYXJyYXksIHhzdHJkdXAodmFsdWUpKTsKK30KKwordm9pZCBhcmd2X2FycmF5X3B1c2hmKHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlzdHJ1Y3Qgc3RyYnVmIHYgPSBTVFJCVUZfSU5JVDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmdiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWFyZ3ZfYXJyYXlfcHVzaF9ub2R1cChhcnJheSwgc3RyYnVmX2RldGFjaCgmdiwgTlVMTCkpOworfQorCit2b2lkIGFyZ3ZfYXJyYXlfcHVzaGwoc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwljb25zdCBjaGFyICphcmc7CisKKwl2YV9zdGFydChhcCwgYXJyYXkpOworCXdoaWxlKChhcmcgPSB2YV9hcmcoYXAsIGNvbnN0IGNoYXIgKikpKQorCQlhcmd2X2FycmF5X3B1c2goYXJyYXksIGFyZyk7CisJdmFfZW5kKGFwKTsKK30KKwordm9pZCBhcmd2X2FycmF5X3B1c2h2KHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSwgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJZm9yICg7ICphcmd2OyBhcmd2KyspCisJCWFyZ3ZfYXJyYXlfcHVzaChhcnJheSwgKmFyZ3YpOworfQorCit2b2lkIGFyZ3ZfYXJyYXlfcG9wKHN0cnVjdCBhcmd2X2FycmF5ICphcnJheSkKK3sKKwlpZiAoIWFycmF5LT5hcmdjKQorCQlyZXR1cm47CisJZnJlZSgoY2hhciAqKWFycmF5LT5hcmd2W2FycmF5LT5hcmdjIC0gMV0pOworCWFycmF5LT5hcmd2W2FycmF5LT5hcmdjIC0gMV0gPSBOVUxMOworCWFycmF5LT5hcmdjLS07Cit9CisKK3ZvaWQgYXJndl9hcnJheV9jbGVhcihzdHJ1Y3QgYXJndl9hcnJheSAqYXJyYXkpCit7CisJaWYgKGFycmF5LT5hcmd2ICE9IGVtcHR5X2FyZ3YpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+YXJnYzsgaSsrKQorCQkJZnJlZSgoY2hhciAqKWFycmF5LT5hcmd2W2ldKTsKKwkJZnJlZShhcnJheS0+YXJndik7CisJfQorCWFyZ3ZfYXJyYXlfaW5pdChhcnJheSk7Cit9CmRpZmYgLS1naXQgYS9hcmd2LWFycmF5LmggYi9hcmd2LWFycmF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmYTBhYQotLS0gL2Rldi9udWxsCisrKyBiL2FyZ3YtYXJyYXkuaApAQCAtMCwwICsxLDI0IEBACisjaWZuZGVmIEFSR1ZfQVJSQVlfSAorI2RlZmluZSBBUkdWX0FSUkFZX0gKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmVtcHR5X2FyZ3ZbXTsKKworc3RydWN0IGFyZ3ZfYXJyYXkgeworCWNvbnN0IGNoYXIgKiphcmd2OworCWludCBhcmdjOworCWludCBhbGxvYzsKK307CisKKyNkZWZpbmUgQVJHVl9BUlJBWV9JTklUIHsgZW1wdHlfYXJndiwgMCwgMCB9CisKK3ZvaWQgYXJndl9hcnJheV9pbml0KHN0cnVjdCBhcmd2X2FycmF5ICopOwordm9pZCBhcmd2X2FycmF5X3B1c2goc3RydWN0IGFyZ3ZfYXJyYXkgKiwgY29uc3QgY2hhciAqKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLDIsMykpKQordm9pZCBhcmd2X2FycmF5X3B1c2hmKHN0cnVjdCBhcmd2X2FycmF5ICosIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK0xBU1RfQVJHX01VU1RfQkVfTlVMTAordm9pZCBhcmd2X2FycmF5X3B1c2hsKHN0cnVjdCBhcmd2X2FycmF5ICosIC4uLik7Cit2b2lkIGFyZ3ZfYXJyYXlfcHVzaHYoc3RydWN0IGFyZ3ZfYXJyYXkgKiwgY29uc3QgY2hhciAqKik7Cit2b2lkIGFyZ3ZfYXJyYXlfcG9wKHN0cnVjdCBhcmd2X2FycmF5ICopOwordm9pZCBhcmd2X2FycmF5X2NsZWFyKHN0cnVjdCBhcmd2X2FycmF5ICopOworCisjZW5kaWYgLyogQVJHVl9BUlJBWV9IICovCmRpZmYgLS1naXQgYS9hdHRyLmMgYi9hdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg2YzA4ZAotLS0gL2Rldi9udWxsCisrKyBiL2F0dHIuYwpAQCAtMCwwICsxLDgyNyBAQAorLyoKKyAqIEhhbmRsZSBnaXQgYXR0cmlidXRlcy4gIFNlZSBnaXRhdHRyaWJ1dGVzKDUpIGZvciBhIGRlc2NyaXB0aW9uIG9mCisgKiB0aGUgZmlsZSBzeW50YXgsIGFuZCBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZ2l0YXR0cmlidXRlcy50eHQKKyAqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBBUEkuCisgKgorICogT25lIGJhc2ljIGRlc2lnbiBkZWNpc2lvbiBoZXJlIGlzIHRoYXQgd2UgYXJlIG5vdCBnb2luZyB0byBzdXBwb3J0CisgKiBhbiBpbnNhbmVseSBsYXJnZSBudW1iZXIgb2YgYXR0cmlidXRlcy4KKyAqLworCisjZGVmaW5lIE5PX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAidXRmOC5oIgorCitjb25zdCBjaGFyIGdpdF9hdHRyX190cnVlW10gPSAiKGJ1aWx0aW4pdHJ1ZSI7Citjb25zdCBjaGFyIGdpdF9hdHRyX19mYWxzZVtdID0gIlwwKGJ1aWx0aW4pZmFsc2UiOworc3RhdGljIGNvbnN0IGNoYXIgZ2l0X2F0dHJfX3Vua25vd25bXSA9ICIoYnVpbHRpbil1bmtub3duIjsKKyNkZWZpbmUgQVRUUl9fVFJVRSBnaXRfYXR0cl9fdHJ1ZQorI2RlZmluZSBBVFRSX19GQUxTRSBnaXRfYXR0cl9fZmFsc2UKKyNkZWZpbmUgQVRUUl9fVU5TRVQgTlVMTAorI2RlZmluZSBBVFRSX19VTktOT1dOIGdpdF9hdHRyX191bmtub3duCisKKy8qIFRoaXMgaXMgYSByYW5kb21seSBjaG9zZW4gcHJpbWUuICovCisjZGVmaW5lIEhBU0hTSVpFIDI1NworCisjaWZuZGVmIERFQlVHX0FUVFIKKyNkZWZpbmUgREVCVUdfQVRUUiAwCisjZW5kaWYKKworc3RydWN0IGdpdF9hdHRyIHsKKwlzdHJ1Y3QgZ2l0X2F0dHIgKm5leHQ7CisJdW5zaWduZWQgaDsKKwlpbnQgYXR0cl9ucjsKKwlpbnQgbWF5YmVfbWFjcm87CisJaW50IG1heWJlX3JlYWw7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKK3N0YXRpYyBpbnQgYXR0cl9ucjsKK3N0YXRpYyBpbnQgY2Fubm90X3RydXN0X21heWJlX3JlYWw7CisKK3N0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrX2FsbF9hdHRyOworc3RhdGljIHN0cnVjdCBnaXRfYXR0ciAqKGdpdF9hdHRyX2hhc2hbSEFTSFNJWkVdKTsKKworY2hhciAqZ2l0X2F0dHJfbmFtZShzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHIpCit7CisJcmV0dXJuIGF0dHItPm5hbWU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBoYXNoX25hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisJdW5zaWduZWQgdmFsID0gMCwgYzsKKworCXdoaWxlIChuYW1lbGVuLS0pIHsKKwkJYyA9ICpuYW1lKys7CisJCXZhbCA9ICgodmFsIDw8IDcpIHwgKHZhbCA+PiAyMikpIF4gYzsKKwl9CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIGludCBpbnZhbGlkX2F0dHJfbmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKK3sKKwkvKgorCSAqIEF0dHJpYnV0ZSBuYW1lIGNhbm5vdCBiZWdpbiB3aXRoICctJyBhbmQgbXVzdCBjb25zaXN0IG9mCisJICogY2hhcmFjdGVycyBmcm9tIFstQS1aYS16MC05Xy5dLgorCSAqLworCWlmIChuYW1lbGVuIDw9IDAgfHwgKm5hbWUgPT0gJy0nKQorCQlyZXR1cm4gLTE7CisJd2hpbGUgKG5hbWVsZW4tLSkgeworCQljaGFyIGNoID0gKm5hbWUrKzsKKwkJaWYgKCEgKGNoID09ICctJyB8fCBjaCA9PSAnLicgfHwgY2ggPT0gJ18nIHx8CisJCSAgICAgICAoJzAnIDw9IGNoICYmIGNoIDw9ICc5JykgfHwKKwkJICAgICAgICgnYScgPD0gY2ggJiYgY2ggPD0gJ3onKSB8fAorCQkgICAgICAgKCdBJyA8PSBjaCAmJiBjaCA8PSAnWicpKSApCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdpdF9hdHRyICpnaXRfYXR0cl9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGh2YWwgPSBoYXNoX25hbWUobmFtZSwgbGVuKTsKKwl1bnNpZ25lZCBwb3MgPSBodmFsICUgSEFTSFNJWkU7CisJc3RydWN0IGdpdF9hdHRyICphOworCisJZm9yIChhID0gZ2l0X2F0dHJfaGFzaFtwb3NdOyBhOyBhID0gYS0+bmV4dCkgeworCQlpZiAoYS0+aCA9PSBodmFsICYmCisJCSAgICAhbWVtY21wKGEtPm5hbWUsIG5hbWUsIGxlbikgJiYgIWEtPm5hbWVbbGVuXSkKKwkJCXJldHVybiBhOworCX0KKworCWlmIChpbnZhbGlkX2F0dHJfbmFtZShuYW1lLCBsZW4pKQorCQlyZXR1cm4gTlVMTDsKKworCWEgPSB4bWFsbG9jKHNpemVvZigqYSkgKyBsZW4gKyAxKTsKKwltZW1jcHkoYS0+bmFtZSwgbmFtZSwgbGVuKTsKKwlhLT5uYW1lW2xlbl0gPSAwOworCWEtPmggPSBodmFsOworCWEtPm5leHQgPSBnaXRfYXR0cl9oYXNoW3Bvc107CisJYS0+YXR0cl9uciA9IGF0dHJfbnIrKzsKKwlhLT5tYXliZV9tYWNybyA9IDA7CisJYS0+bWF5YmVfcmVhbCA9IDA7CisJZ2l0X2F0dHJfaGFzaFtwb3NdID0gYTsKKworCVJFQUxMT0NfQVJSQVkoY2hlY2tfYWxsX2F0dHIsIGF0dHJfbnIpOworCWNoZWNrX2FsbF9hdHRyW2EtPmF0dHJfbnJdLmF0dHIgPSBhOworCWNoZWNrX2FsbF9hdHRyW2EtPmF0dHJfbnJdLnZhbHVlID0gQVRUUl9fVU5LTk9XTjsKKwlyZXR1cm4gYTsKK30KKworc3RydWN0IGdpdF9hdHRyICpnaXRfYXR0cihjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiBnaXRfYXR0cl9pbnRlcm5hbChuYW1lLCBzdHJsZW4obmFtZSkpOworfQorCisvKiBXaGF0IGRvZXMgYSBtYXRjaGVkIHBhdHRlcm4gZGVjaWRlPyAqLworc3RydWN0IGF0dHJfc3RhdGUgeworCXN0cnVjdCBnaXRfYXR0ciAqYXR0cjsKKwljb25zdCBjaGFyICpzZXR0bzsKK307CisKK3N0cnVjdCBwYXR0ZXJuIHsKKwljb25zdCBjaGFyICpwYXR0ZXJuOworCWludCBwYXR0ZXJubGVuOworCWludCBub3dpbGRjYXJkbGVuOworCWludCBmbGFnczsJCS8qIEVYQ19GTEFHXyogKi8KK307CisKKy8qCisgKiBPbmUgcnVsZSwgYXMgZnJvbSBhIC5naXRhdHRyaWJ1dGVzIGZpbGUuCisgKgorICogSWYgaXNfbWFjcm8gaXMgdHJ1ZSwgdGhlbiB1LmF0dHIgaXMgYSBwb2ludGVyIHRvIHRoZSBnaXRfYXR0ciBiZWluZworICogZGVmaW5lZC4KKyAqCisgKiBJZiBpc19tYWNybyBpcyBmYWxzZSwgdGhlbiB1LnBhdHRlcm4gcG9pbnRzIGF0IHRoZSBmaWxlbmFtZSBwYXR0ZXJuCisgKiB0byB3aGljaCB0aGUgcnVsZSBhcHBsaWVzLiAgKFRoZSBtZW1vcnkgcG9pbnRlZCB0byBpcyBwYXJ0IG9mIHRoZQorICogbWVtb3J5IGJsb2NrIGFsbG9jYXRlZCBmb3IgdGhlIG1hdGNoX2F0dHIgaW5zdGFuY2UuKQorICoKKyAqIEluIGVpdGhlciBjYXNlLCBudW1fYXR0ciBpcyB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgYWZmZWN0ZWQgYnkKKyAqIHRoaXMgcnVsZSwgYW5kIHN0YXRlIGlzIGFuIGFycmF5IGxpc3RpbmcgdGhlbS4gIFRoZSBhdHRyaWJ1dGVzIGFyZQorICogbGlzdGVkIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBmaWxlIChtYWNyb3MgdW5leHBhbmRlZCkuCisgKi8KK3N0cnVjdCBtYXRjaF9hdHRyIHsKKwl1bmlvbiB7CisJCXN0cnVjdCBwYXR0ZXJuIHBhdDsKKwkJc3RydWN0IGdpdF9hdHRyICphdHRyOworCX0gdTsKKwljaGFyIGlzX21hY3JvOworCXVuc2lnbmVkIG51bV9hdHRyOworCXN0cnVjdCBhdHRyX3N0YXRlIHN0YXRlW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgYmxhbmtbXSA9ICIgXHRcclxuIjsKKworLyoKKyAqIFBhcnNlIGEgd2hpdGVzcGFjZS1kZWxpbWl0ZWQgYXR0cmlidXRlIHN0YXRlIChpLmUuLCAiYXR0ciIsCisgKiAiLWF0dHIiLCAiIWF0dHIiLCBvciAiYXR0cj12YWx1ZSIpIGZyb20gdGhlIHN0cmluZyBzdGFydGluZyBhdCBzcmMuCisgKiBJZiBlIGlzIG5vdCBOVUxMLCB3cml0ZSB0aGUgcmVzdWx0cyB0byAqZS4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlCisgKiByZW1haW5kZXIgb2YgdGhlIHN0cmluZyAod2l0aCBsZWFkaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZCksIG9yIE5VTEwKKyAqIGlmIHRoZXJlIHdhcyBhbiBlcnJvci4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2F0dHIoY29uc3QgY2hhciAqc3JjLCBpbnQgbGluZW5vLCBjb25zdCBjaGFyICpjcCwKKwkJCSAgICAgIHN0cnVjdCBhdHRyX3N0YXRlICplKQoreworCWNvbnN0IGNoYXIgKmVwLCAqZXF1YWxzOworCWludCBsZW47CisKKwllcCA9IGNwICsgc3RyY3NwbihjcCwgYmxhbmspOworCWVxdWFscyA9IHN0cmNocihjcCwgJz0nKTsKKwlpZiAoZXF1YWxzICYmIGVwIDwgZXF1YWxzKQorCQllcXVhbHMgPSBOVUxMOworCWlmIChlcXVhbHMpCisJCWxlbiA9IGVxdWFscyAtIGNwOworCWVsc2UKKwkJbGVuID0gZXAgLSBjcDsKKwlpZiAoIWUpIHsKKwkJaWYgKCpjcCA9PSAnLScgfHwgKmNwID09ICchJykgeworCQkJY3ArKzsKKwkJCWxlbi0tOworCQl9CisJCWlmIChpbnZhbGlkX2F0dHJfbmFtZShjcCwgbGVuKSkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWU6ICVzOiVkXG4iLAorCQkJCWxlbiwgY3AsIHNyYywgbGluZW5vKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCpjcCA9PSAnLScgfHwgKmNwID09ICchJykgeworCQkJZS0+c2V0dG8gPSAoKmNwID09ICctJykgPyBBVFRSX19GQUxTRSA6IEFUVFJfX1VOU0VUOworCQkJY3ArKzsKKwkJCWxlbi0tOworCQl9CisJCWVsc2UgaWYgKCFlcXVhbHMpCisJCQllLT5zZXR0byA9IEFUVFJfX1RSVUU7CisJCWVsc2UgeworCQkJZS0+c2V0dG8gPSB4bWVtZHVweihlcXVhbHMgKyAxLCBlcCAtIGVxdWFscyAtIDEpOworCQl9CisJCWUtPmF0dHIgPSBnaXRfYXR0cl9pbnRlcm5hbChjcCwgbGVuKTsKKwl9CisJcmV0dXJuIGVwICsgc3Ryc3BuKGVwLCBibGFuayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWF0Y2hfYXR0ciAqcGFyc2VfYXR0cl9saW5lKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKnNyYywKKwkJCQkJICBpbnQgbGluZW5vLCBpbnQgbWFjcm9fb2spCit7CisJaW50IG5hbWVsZW47CisJaW50IG51bV9hdHRyLCBpOworCWNvbnN0IGNoYXIgKmNwLCAqbmFtZSwgKnN0YXRlczsKKwlzdHJ1Y3QgbWF0Y2hfYXR0ciAqcmVzID0gTlVMTDsKKwlpbnQgaXNfbWFjcm87CisKKwljcCA9IGxpbmUgKyBzdHJzcG4obGluZSwgYmxhbmspOworCWlmICghKmNwIHx8ICpjcCA9PSAnIycpCisJCXJldHVybiBOVUxMOworCW5hbWUgPSBjcDsKKwluYW1lbGVuID0gc3RyY3NwbihuYW1lLCBibGFuayk7CisJaWYgKHN0cmxlbihBVFRSSUJVVEVfTUFDUk9fUFJFRklYKSA8IG5hbWVsZW4gJiYKKwkgICAgc3RhcnRzX3dpdGgobmFtZSwgQVRUUklCVVRFX01BQ1JPX1BSRUZJWCkpIHsKKwkJaWYgKCFtYWNyb19vaykgeworCQkJZnByaW50ZihzdGRlcnIsICIlcyBub3QgYWxsb3dlZDogJXM6JWRcbiIsCisJCQkJbmFtZSwgc3JjLCBsaW5lbm8pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaXNfbWFjcm8gPSAxOworCQluYW1lICs9IHN0cmxlbihBVFRSSUJVVEVfTUFDUk9fUFJFRklYKTsKKwkJbmFtZSArPSBzdHJzcG4obmFtZSwgYmxhbmspOworCQluYW1lbGVuID0gc3RyY3NwbihuYW1lLCBibGFuayk7CisJCWlmIChpbnZhbGlkX2F0dHJfbmFtZShuYW1lLCBuYW1lbGVuKSkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIiUuKnMgaXMgbm90IGEgdmFsaWQgYXR0cmlidXRlIG5hbWU6ICVzOiVkXG4iLAorCQkJCW5hbWVsZW4sIG5hbWUsIHNyYywgbGluZW5vKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCWVsc2UKKwkJaXNfbWFjcm8gPSAwOworCisJc3RhdGVzID0gbmFtZSArIG5hbWVsZW47CisJc3RhdGVzICs9IHN0cnNwbihzdGF0ZXMsIGJsYW5rKTsKKworCS8qIEZpcnN0IHBhc3MgdG8gY291bnQgdGhlIGF0dHJfc3RhdGVzICovCisJZm9yIChjcCA9IHN0YXRlcywgbnVtX2F0dHIgPSAwOyAqY3A7IG51bV9hdHRyKyspIHsKKwkJY3AgPSBwYXJzZV9hdHRyKHNyYywgbGluZW5vLCBjcCwgTlVMTCk7CisJCWlmICghY3ApCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXMgPSB4Y2FsbG9jKDEsCisJCSAgICAgIHNpemVvZigqcmVzKSArCisJCSAgICAgIHNpemVvZihzdHJ1Y3QgYXR0cl9zdGF0ZSkgKiBudW1fYXR0ciArCisJCSAgICAgIChpc19tYWNybyA/IDAgOiBuYW1lbGVuICsgMSkpOworCWlmIChpc19tYWNybykgeworCQlyZXMtPnUuYXR0ciA9IGdpdF9hdHRyX2ludGVybmFsKG5hbWUsIG5hbWVsZW4pOworCQlyZXMtPnUuYXR0ci0+bWF5YmVfbWFjcm8gPSAxOworCX0gZWxzZSB7CisJCWNoYXIgKnAgPSAoY2hhciAqKSYocmVzLT5zdGF0ZVtudW1fYXR0cl0pOworCQltZW1jcHkocCwgbmFtZSwgbmFtZWxlbik7CisJCXJlcy0+dS5wYXQucGF0dGVybiA9IHA7CisJCXBhcnNlX2V4Y2x1ZGVfcGF0dGVybigmcmVzLT51LnBhdC5wYXR0ZXJuLAorCQkJCSAgICAgICZyZXMtPnUucGF0LnBhdHRlcm5sZW4sCisJCQkJICAgICAgJnJlcy0+dS5wYXQuZmxhZ3MsCisJCQkJICAgICAgJnJlcy0+dS5wYXQubm93aWxkY2FyZGxlbik7CisJCWlmIChyZXMtPnUucGF0LmZsYWdzICYgRVhDX0ZMQUdfTkVHQVRJVkUpIHsKKwkJCXdhcm5pbmcoXygiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKwkJCQkgICJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iKSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwlyZXMtPmlzX21hY3JvID0gaXNfbWFjcm87CisJcmVzLT5udW1fYXR0ciA9IG51bV9hdHRyOworCisJLyogU2Vjb25kIHBhc3MgdG8gZmlsbCB0aGUgYXR0cl9zdGF0ZXMgKi8KKwlmb3IgKGNwID0gc3RhdGVzLCBpID0gMDsgKmNwOyBpKyspIHsKKwkJY3AgPSBwYXJzZV9hdHRyKHNyYywgbGluZW5vLCBjcCwgJihyZXMtPnN0YXRlW2ldKSk7CisJCWlmICghaXNfbWFjcm8pCisJCQlyZXMtPnN0YXRlW2ldLmF0dHItPm1heWJlX3JlYWwgPSAxOworCQlpZiAocmVzLT5zdGF0ZVtpXS5hdHRyLT5tYXliZV9tYWNybykKKwkJCWNhbm5vdF90cnVzdF9tYXliZV9yZWFsID0gMTsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogTGlrZSBpbmZvL2V4Y2x1ZGUgYW5kIC5naXRpZ25vcmUsIHRoZSBhdHRyaWJ1dGUgaW5mb3JtYXRpb24gY2FuCisgKiBjb21lIGZyb20gbWFueSBwbGFjZXMuCisgKgorICogKDEpIC5naXRhdHRyaWJ1dGUgZmlsZSBvZiB0aGUgc2FtZSBkaXJlY3Rvcnk7CisgKiAoMikgLmdpdGF0dHJpYnV0ZSBmaWxlIG9mIHRoZSBwYXJlbnQgZGlyZWN0b3J5IGlmICgxKSBkb2VzIG5vdCBoYXZlCisgKiAgICAgIGFueSBtYXRjaDsgdGhpcyBnb2VzIHJlY3Vyc2l2ZWx5IHVwd2FyZHMsIGp1c3QgbGlrZSAuZ2l0aWdub3JlLgorICogKDMpICRHSVRfRElSL2luZm8vYXR0cmlidXRlcywgd2hpY2ggb3ZlcnJpZGVzIGJvdGggb2YgdGhlIGFib3ZlLgorICoKKyAqIEluIHRoZSBzYW1lIGZpbGUsIGxhdGVyIGVudHJpZXMgb3ZlcnJpZGUgdGhlIGVhcmxpZXIgbWF0Y2gsIHNvIGluIHRoZQorICogZ2xvYmFsIGxpc3QsIHdlIHdvdWxkIGhhdmUgZW50cmllcyBmcm9tIGluZm8vYXR0cmlidXRlcyB0aGUgZWFybGllc3QKKyAqIChyZWFkaW5nIHRoZSBmaWxlIGZyb20gdG9wIHRvIGJvdHRvbSksIC5naXRhdHRyaWJ1dGUgb2YgdGhlIHJvb3QKKyAqIGRpcmVjdG9yeSAoYWdhaW4sIHJlYWRpbmcgdGhlIGZpbGUgZnJvbSB0b3AgdG8gYm90dG9tKSBkb3duIHRvIHRoZQorICogY3VycmVudCBkaXJlY3RvcnksIGFuZCB0aGVuIHNjYW4gdGhlIGxpc3QgYmFja3dhcmRzIHRvIGZpbmQgdGhlIGZpcnN0IG1hdGNoLgorICogVGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHdoYXQgaXNfZXhjbHVkZWQoKSBkb2VzIGluIGRpci5jIHRvIGRlYWwgd2l0aAorICogLmdpdGlnbm9yZQorICovCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cl9zdGFjayB7CisJc3RydWN0IGF0dHJfc3RhY2sgKnByZXY7CisJY2hhciAqb3JpZ2luOworCXNpemVfdCBvcmlnaW5sZW47CisJdW5zaWduZWQgbnVtX21hdGNoZXM7CisJdW5zaWduZWQgYWxsb2M7CisJc3RydWN0IG1hdGNoX2F0dHIgKiphdHRyczsKK30gKmF0dHJfc3RhY2s7CisKK3N0YXRpYyB2b2lkIGZyZWVfYXR0cl9lbGVtKHN0cnVjdCBhdHRyX3N0YWNrICplKQoreworCWludCBpOworCWZyZWUoZS0+b3JpZ2luKTsKKwlmb3IgKGkgPSAwOyBpIDwgZS0+bnVtX21hdGNoZXM7IGkrKykgeworCQlzdHJ1Y3QgbWF0Y2hfYXR0ciAqYSA9IGUtPmF0dHJzW2ldOworCQlpbnQgajsKKwkJZm9yIChqID0gMDsgaiA8IGEtPm51bV9hdHRyOyBqKyspIHsKKwkJCWNvbnN0IGNoYXIgKnNldHRvID0gYS0+c3RhdGVbal0uc2V0dG87CisJCQlpZiAoc2V0dG8gPT0gQVRUUl9fVFJVRSB8fAorCQkJICAgIHNldHRvID09IEFUVFJfX0ZBTFNFIHx8CisJCQkgICAgc2V0dG8gPT0gQVRUUl9fVU5TRVQgfHwKKwkJCSAgICBzZXR0byA9PSBBVFRSX19VTktOT1dOKQorCQkJCTsKKwkJCWVsc2UKKwkJCQlmcmVlKChjaGFyICopIHNldHRvKTsKKwkJfQorCQlmcmVlKGEpOworCX0KKwlmcmVlKGUtPmF0dHJzKTsKKwlmcmVlKGUpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYnVpbHRpbl9hdHRyW10gPSB7CisJIlthdHRyXWJpbmFyeSAtZGlmZiAtbWVyZ2UgLXRleHQiLAorCU5VTEwsCit9OworCitzdGF0aWMgdm9pZCBoYW5kbGVfYXR0cl9saW5lKHN0cnVjdCBhdHRyX3N0YWNrICpyZXMsCisJCQkgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkgICAgIGNvbnN0IGNoYXIgKnNyYywKKwkJCSAgICAgaW50IGxpbmVubywKKwkJCSAgICAgaW50IG1hY3JvX29rKQoreworCXN0cnVjdCBtYXRjaF9hdHRyICphOworCisJYSA9IHBhcnNlX2F0dHJfbGluZShsaW5lLCBzcmMsIGxpbmVubywgbWFjcm9fb2spOworCWlmICghYSkKKwkJcmV0dXJuOworCUFMTE9DX0dST1cocmVzLT5hdHRycywgcmVzLT5udW1fbWF0Y2hlcyArIDEsIHJlcy0+YWxsb2MpOworCXJlcy0+YXR0cnNbcmVzLT5udW1fbWF0Y2hlcysrXSA9IGE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cl9zdGFjayAqcmVhZF9hdHRyX2Zyb21fYXJyYXkoY29uc3QgY2hhciAqKmxpc3QpCit7CisJc3RydWN0IGF0dHJfc3RhY2sgKnJlczsKKwljb25zdCBjaGFyICpsaW5lOworCWludCBsaW5lbm8gPSAwOworCisJcmVzID0geGNhbGxvYygxLCBzaXplb2YoKnJlcykpOworCXdoaWxlICgobGluZSA9ICoobGlzdCsrKSkgIT0gTlVMTCkKKwkJaGFuZGxlX2F0dHJfbGluZShyZXMsIGxpbmUsICJbYnVpbHRpbl0iLCArK2xpbmVubywgMSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGVudW0gZ2l0X2F0dHJfZGlyZWN0aW9uIGRpcmVjdGlvbjsKK3N0YXRpYyBzdHJ1Y3QgaW5kZXhfc3RhdGUgKnVzZV9pbmRleDsKKworc3RhdGljIHN0cnVjdCBhdHRyX3N0YWNrICpyZWFkX2F0dHJfZnJvbV9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtYWNyb19vaykKK3sKKwlGSUxFICpmcCA9IGZvcGVuKHBhdGgsICJyIik7CisJc3RydWN0IGF0dHJfc3RhY2sgKnJlczsKKwljaGFyIGJ1ZlsyMDQ4XTsKKwlpbnQgbGluZW5vID0gMDsKKworCWlmICghZnApIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBlcnJubyAhPSBFTk9URElSKQorCQkJd2Fybl9vbl9pbmFjY2Vzc2libGUocGF0aCk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXMgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVzKSk7CisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSkgeworCQljaGFyICpidWZwID0gYnVmOworCQlpZiAoIWxpbmVubykKKwkJCXNraXBfdXRmOF9ib20oJmJ1ZnAsIHN0cmxlbihidWZwKSk7CisJCWhhbmRsZV9hdHRyX2xpbmUocmVzLCBidWZwLCBwYXRoLCArK2xpbmVubywgbWFjcm9fb2spOworCX0KKwlmY2xvc2UoZnApOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cl9zdGFjayAqcmVhZF9hdHRyX2Zyb21faW5kZXgoY29uc3QgY2hhciAqcGF0aCwgaW50IG1hY3JvX29rKQoreworCXN0cnVjdCBhdHRyX3N0YWNrICpyZXM7CisJY2hhciAqYnVmLCAqc3A7CisJaW50IGxpbmVubyA9IDA7CisKKwlidWYgPSByZWFkX2Jsb2JfZGF0YV9mcm9tX2luZGV4KHVzZV9pbmRleCA/IHVzZV9pbmRleCA6ICZ0aGVfaW5kZXgsIHBhdGgsIE5VTEwpOworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKKworCXJlcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZXMpKTsKKwlmb3IgKHNwID0gYnVmOyAqc3A7ICkgeworCQljaGFyICplcDsKKwkJaW50IG1vcmU7CisJCWZvciAoZXAgPSBzcDsgKmVwICYmICplcCAhPSAnXG4nOyBlcCsrKQorCQkJOworCQltb3JlID0gKCplcCA9PSAnXG4nKTsKKwkJKmVwID0gJ1wwJzsKKwkJaGFuZGxlX2F0dHJfbGluZShyZXMsIHNwLCBwYXRoLCArK2xpbmVubywgbWFjcm9fb2spOworCQlzcCA9IGVwICsgbW9yZTsKKwl9CisJZnJlZShidWYpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cl9zdGFjayAqcmVhZF9hdHRyKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtYWNyb19vaykKK3sKKwlzdHJ1Y3QgYXR0cl9zdGFjayAqcmVzOworCisJaWYgKGRpcmVjdGlvbiA9PSBHSVRfQVRUUl9DSEVDS09VVCkgeworCQlyZXMgPSByZWFkX2F0dHJfZnJvbV9pbmRleChwYXRoLCBtYWNyb19vayk7CisJCWlmICghcmVzKQorCQkJcmVzID0gcmVhZF9hdHRyX2Zyb21fZmlsZShwYXRoLCBtYWNyb19vayk7CisJfQorCWVsc2UgaWYgKGRpcmVjdGlvbiA9PSBHSVRfQVRUUl9DSEVDS0lOKSB7CisJCXJlcyA9IHJlYWRfYXR0cl9mcm9tX2ZpbGUocGF0aCwgbWFjcm9fb2spOworCQlpZiAoIXJlcykKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyBubyBjaGVja2VkIG91dCAuZ2l0YXR0cmlidXRlcyBmaWxlIHRoZXJlLCBidXQKKwkJCSAqIHdlIG1pZ2h0IGhhdmUgaXQgaW4gdGhlIGluZGV4LiAgV2UgYWxsb3cgb3BlcmF0aW9uIGluIGEKKwkJCSAqIHNwYXJzZWx5IGNoZWNrZWQgb3V0IHdvcmsgdHJlZSwgc28gcmVhZCBmcm9tIGl0LgorCQkJICovCisJCQlyZXMgPSByZWFkX2F0dHJfZnJvbV9pbmRleChwYXRoLCBtYWNyb19vayk7CisJfQorCWVsc2UKKwkJcmVzID0gcmVhZF9hdHRyX2Zyb21faW5kZXgocGF0aCwgbWFjcm9fb2spOworCWlmICghcmVzKQorCQlyZXMgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVzKSk7CisJcmV0dXJuIHJlczsKK30KKworI2lmIERFQlVHX0FUVFIKK3N0YXRpYyB2b2lkIGRlYnVnX2luZm8oY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IGF0dHJfc3RhY2sgKmVsZW0pCit7CisJZnByaW50ZihzdGRlcnIsICIlczogJXNcbiIsIHdoYXQsIGVsZW0tPm9yaWdpbiA/IGVsZW0tPm9yaWdpbiA6ICIoKSIpOworfQorc3RhdGljIHZvaWQgZGVidWdfc2V0KGNvbnN0IGNoYXIgKndoYXQsIGNvbnN0IGNoYXIgKm1hdGNoLCBzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHIsIGNvbnN0IHZvaWQgKnYpCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSB2OworCisJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpCisJCXZhbHVlID0gInNldCI7CisJZWxzZSBpZiAoQVRUUl9GQUxTRSh2YWx1ZSkpCisJCXZhbHVlID0gInVuc2V0IjsKKwllbHNlIGlmIChBVFRSX1VOU0VUKHZhbHVlKSkKKwkJdmFsdWUgPSAidW5zcGVjaWZpZWQiOworCisJZnByaW50ZihzdGRlcnIsICIlczogJXMgPT4gJXMgKCVzKVxuIiwKKwkJd2hhdCwgYXR0ci0+bmFtZSwgKGNoYXIgKikgdmFsdWUsIG1hdGNoKTsKK30KKyNkZWZpbmUgZGVidWdfcHVzaChhKSBkZWJ1Z19pbmZvKCJwdXNoIiwgKGEpKQorI2RlZmluZSBkZWJ1Z19wb3AoYSkgZGVidWdfaW5mbygicG9wIiwgKGEpKQorI2Vsc2UKKyNkZWZpbmUgZGVidWdfcHVzaChhKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZGVidWdfcG9wKGEpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBkZWJ1Z19zZXQoYSxiLGMsZCkgZG8geyA7IH0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIHZvaWQgZHJvcF9hdHRyX3N0YWNrKHZvaWQpCit7CisJd2hpbGUgKGF0dHJfc3RhY2spIHsKKwkJc3RydWN0IGF0dHJfc3RhY2sgKmVsZW0gPSBhdHRyX3N0YWNrOworCQlhdHRyX3N0YWNrID0gZWxlbS0+cHJldjsKKwkJZnJlZV9hdHRyX2VsZW0oZWxlbSk7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2l0X2V0Y19naXRhdHRyaWJ1dGVzKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnN5c3RlbV93aWRlOworCWlmICghc3lzdGVtX3dpZGUpCisJCXN5c3RlbV93aWRlID0gc3lzdGVtX3BhdGgoRVRDX0dJVEFUVFJJQlVURVMpOworCXJldHVybiBzeXN0ZW1fd2lkZTsKK30KKworc3RhdGljIGludCBnaXRfYXR0cl9zeXN0ZW0odm9pZCkKK3sKKwlyZXR1cm4gIWdpdF9lbnZfYm9vbCgiR0lUX0FUVFJfTk9TWVNURU0iLCAwKTsKK30KKworc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfaW5mb19hdHRyaWJ1dGVzLCBJTkZPQVRUUklCVVRFU19GSUxFKQorCitzdGF0aWMgdm9pZCBib290c3RyYXBfYXR0cl9zdGFjayh2b2lkKQoreworCXN0cnVjdCBhdHRyX3N0YWNrICplbGVtOworCisJaWYgKGF0dHJfc3RhY2spCisJCXJldHVybjsKKworCWVsZW0gPSByZWFkX2F0dHJfZnJvbV9hcnJheShidWlsdGluX2F0dHIpOworCWVsZW0tPm9yaWdpbiA9IE5VTEw7CisJZWxlbS0+cHJldiA9IGF0dHJfc3RhY2s7CisJYXR0cl9zdGFjayA9IGVsZW07CisKKwlpZiAoZ2l0X2F0dHJfc3lzdGVtKCkpIHsKKwkJZWxlbSA9IHJlYWRfYXR0cl9mcm9tX2ZpbGUoZ2l0X2V0Y19naXRhdHRyaWJ1dGVzKCksIDEpOworCQlpZiAoZWxlbSkgeworCQkJZWxlbS0+b3JpZ2luID0gTlVMTDsKKwkJCWVsZW0tPnByZXYgPSBhdHRyX3N0YWNrOworCQkJYXR0cl9zdGFjayA9IGVsZW07CisJCX0KKwl9CisKKwlpZiAoIWdpdF9hdHRyaWJ1dGVzX2ZpbGUpCisJCWdpdF9hdHRyaWJ1dGVzX2ZpbGUgPSB4ZGdfY29uZmlnX2hvbWUoImF0dHJpYnV0ZXMiKTsKKwlpZiAoZ2l0X2F0dHJpYnV0ZXNfZmlsZSkgeworCQllbGVtID0gcmVhZF9hdHRyX2Zyb21fZmlsZShnaXRfYXR0cmlidXRlc19maWxlLCAxKTsKKwkJaWYgKGVsZW0pIHsKKwkJCWVsZW0tPm9yaWdpbiA9IE5VTEw7CisJCQllbGVtLT5wcmV2ID0gYXR0cl9zdGFjazsKKwkJCWF0dHJfc3RhY2sgPSBlbGVtOworCQl9CisJfQorCisJaWYgKCFpc19iYXJlX3JlcG9zaXRvcnkoKSB8fCBkaXJlY3Rpb24gPT0gR0lUX0FUVFJfSU5ERVgpIHsKKwkJZWxlbSA9IHJlYWRfYXR0cihHSVRBVFRSSUJVVEVTX0ZJTEUsIDEpOworCQllbGVtLT5vcmlnaW4gPSB4c3RyZHVwKCIiKTsKKwkJZWxlbS0+b3JpZ2lubGVuID0gMDsKKwkJZWxlbS0+cHJldiA9IGF0dHJfc3RhY2s7CisJCWF0dHJfc3RhY2sgPSBlbGVtOworCQlkZWJ1Z19wdXNoKGVsZW0pOworCX0KKworCWVsZW0gPSByZWFkX2F0dHJfZnJvbV9maWxlKGdpdF9wYXRoX2luZm9fYXR0cmlidXRlcygpLCAxKTsKKwlpZiAoIWVsZW0pCisJCWVsZW0gPSB4Y2FsbG9jKDEsIHNpemVvZigqZWxlbSkpOworCWVsZW0tPm9yaWdpbiA9IE5VTEw7CisJZWxlbS0+cHJldiA9IGF0dHJfc3RhY2s7CisJYXR0cl9zdGFjayA9IGVsZW07Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfYXR0cl9zdGFjayhjb25zdCBjaGFyICpwYXRoLCBpbnQgZGlybGVuKQoreworCXN0cnVjdCBhdHRyX3N0YWNrICplbGVtLCAqaW5mbzsKKwlpbnQgbGVuOworCWNvbnN0IGNoYXIgKmNwOworCisJLyoKKwkgKiBBdCB0aGUgYm90dG9tIG9mIHRoZSBhdHRyaWJ1dGUgc3RhY2sgaXMgdGhlIGJ1aWx0LWluCisJICogc2V0IG9mIGF0dHJpYnV0ZSBkZWZpbml0aW9ucywgZm9sbG93ZWQgYnkgdGhlIGNvbnRlbnRzCisJICogb2YgJChwcmVmaXgpL2V0Yy9naXRhdHRyaWJ1dGVzIGFuZCBhIGZpbGUgc3BlY2lmaWVkIGJ5CisJICogY29yZS5hdHRyaWJ1dGVzZmlsZS4gIFRoZW4sIGNvbnRlbnRzIGZyb20KKwkgKiAuZ2l0YXR0cmlidXRlIGZpbGVzIGZyb20gZGlyZWN0b3JpZXMgY2xvc2VyIHRvIHRoZQorCSAqIHJvb3QgdG8gdGhlIG9uZXMgaW4gZGVlcGVyIGRpcmVjdG9yaWVzIGFyZSBwdXNoZWQKKwkgKiB0byB0aGUgc3RhY2suICBGaW5hbGx5LCBhdCB0aGUgdmVyeSB0b3Agb2YgdGhlIHN0YWNrCisJICogd2UgYWx3YXlzIGtlZXAgdGhlIGNvbnRlbnRzIG9mICRHSVRfRElSL2luZm8vYXR0cmlidXRlcy4KKwkgKgorCSAqIFdoZW4gY2hlY2tpbmcsIHdlIHVzZSBlbnRyaWVzIGZyb20gbmVhciB0aGUgdG9wIG9mIHRoZQorCSAqIHN0YWNrLCBwcmVmZXJyaW5nICRHSVRfRElSL2luZm8vYXR0cmlidXRlcywgdGhlbgorCSAqIC5naXRhdHRyaWJ1dGVzIGluIGRlZXBlciBkaXJlY3RvcmllcyB0byBzaGFsbG93ZXIgb25lcywKKwkgKiBhbmQgZmluYWxseSB1c2UgdGhlIGJ1aWx0LWluIHNldCBhcyB0aGUgZGVmYXVsdC4KKwkgKi8KKwlib290c3RyYXBfYXR0cl9zdGFjaygpOworCisJLyoKKwkgKiBQb3AgdGhlICJpbmZvIiBvbmUgdGhhdCBpcyBhbHdheXMgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCisJICovCisJaW5mbyA9IGF0dHJfc3RhY2s7CisJYXR0cl9zdGFjayA9IGluZm8tPnByZXY7CisKKwkvKgorCSAqIFBvcCB0aGUgb25lcyBmcm9tIGRpcmVjdG9yaWVzIHRoYXQgYXJlIG5vdCB0aGUgcHJlZml4IG9mCisJICogdGhlIHBhdGggd2UgYXJlIGNoZWNraW5nLiBCcmVhayBvdXQgb2YgdGhlIGxvb3Agd2hlbiB3ZSBzZWUKKwkgKiB0aGUgcm9vdCBvbmUgKHdob3NlIG9yaWdpbiBpcyBhbiBlbXB0eSBzdHJpbmcgIiIpIG9yIHRoZSBidWlsdGluCisJICogb25lICh3aG9zZSBvcmlnaW4gaXMgTlVMTCkgd2l0aG91dCBwb3BwaW5nIGl0LgorCSAqLworCXdoaWxlIChhdHRyX3N0YWNrLT5vcmlnaW4pIHsKKwkJaW50IG5hbWVsZW4gPSBzdHJsZW4oYXR0cl9zdGFjay0+b3JpZ2luKTsKKworCQllbGVtID0gYXR0cl9zdGFjazsKKwkJaWYgKG5hbWVsZW4gPD0gZGlybGVuICYmCisJCSAgICAhc3RybmNtcChlbGVtLT5vcmlnaW4sIHBhdGgsIG5hbWVsZW4pICYmCisJCSAgICAoIW5hbWVsZW4gfHwgcGF0aFtuYW1lbGVuXSA9PSAnLycpKQorCQkJYnJlYWs7CisKKwkJZGVidWdfcG9wKGVsZW0pOworCQlhdHRyX3N0YWNrID0gZWxlbS0+cHJldjsKKwkJZnJlZV9hdHRyX2VsZW0oZWxlbSk7CisJfQorCisJLyoKKwkgKiBSZWFkIGZyb20gcGFyZW50IGRpcmVjdG9yaWVzIGFuZCBwdXNoIHRoZW0gZG93bgorCSAqLworCWlmICghaXNfYmFyZV9yZXBvc2l0b3J5KCkgfHwgZGlyZWN0aW9uID09IEdJVF9BVFRSX0lOREVYKSB7CisJCS8qCisJCSAqIGJvb3RzdHJhcF9hdHRyX3N0YWNrKCkgc2hvdWxkIGhhdmUgYWRkZWQsIGFuZCB0aGUKKwkJICogYWJvdmUgbG9vcCBzaG91bGQgaGF2ZSBzdG9wcGVkIGJlZm9yZSBwb3BwaW5nLCB0aGUKKwkJICogcm9vdCBlbGVtZW50IHdob3NlIGF0dHJfc3RhY2stPm9yaWdpbiBpcyBzZXQgdG8gYW4KKwkJICogZW1wdHkgc3RyaW5nLgorCQkgKi8KKwkJc3RydWN0IHN0cmJ1ZiBwYXRoYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJYXNzZXJ0KGF0dHJfc3RhY2stPm9yaWdpbik7CisJCXdoaWxlICgxKSB7CisJCQlsZW4gPSBzdHJsZW4oYXR0cl9zdGFjay0+b3JpZ2luKTsKKwkJCWlmIChkaXJsZW4gPD0gbGVuKQorCQkJCWJyZWFrOworCQkJY3AgPSBtZW1jaHIocGF0aCArIGxlbiArIDEsICcvJywgZGlybGVuIC0gbGVuIC0gMSk7CisJCQlpZiAoIWNwKQorCQkJCWNwID0gcGF0aCArIGRpcmxlbjsKKwkJCXN0cmJ1Zl9hZGQoJnBhdGhidWYsIHBhdGgsIGNwIC0gcGF0aCk7CisJCQlzdHJidWZfYWRkY2goJnBhdGhidWYsICcvJyk7CisJCQlzdHJidWZfYWRkc3RyKCZwYXRoYnVmLCBHSVRBVFRSSUJVVEVTX0ZJTEUpOworCQkJZWxlbSA9IHJlYWRfYXR0cihwYXRoYnVmLmJ1ZiwgMCk7CisJCQlzdHJidWZfc2V0bGVuKCZwYXRoYnVmLCBjcCAtIHBhdGgpOworCQkJZWxlbS0+b3JpZ2luID0gc3RyYnVmX2RldGFjaCgmcGF0aGJ1ZiwgJmVsZW0tPm9yaWdpbmxlbik7CisJCQllbGVtLT5wcmV2ID0gYXR0cl9zdGFjazsKKwkJCWF0dHJfc3RhY2sgPSBlbGVtOworCQkJZGVidWdfcHVzaChlbGVtKTsKKwkJfQorCisJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoYnVmKTsKKwl9CisKKwkvKgorCSAqIEZpbmFsbHkgcHVzaCB0aGUgImluZm8iIG9uZSBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KKwkgKi8KKwlpbmZvLT5wcmV2ID0gYXR0cl9zdGFjazsKKwlhdHRyX3N0YWNrID0gaW5mbzsKK30KKworc3RhdGljIGludCBwYXRoX21hdGNoZXMoY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBwYXRobGVuLAorCQkJaW50IGJhc2VuYW1lX29mZnNldCwKKwkJCWNvbnN0IHN0cnVjdCBwYXR0ZXJuICpwYXQsCisJCQljb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbikKK3sKKwljb25zdCBjaGFyICpwYXR0ZXJuID0gcGF0LT5wYXR0ZXJuOworCWludCBwcmVmaXggPSBwYXQtPm5vd2lsZGNhcmRsZW47CisJaW50IGlzZGlyID0gKHBhdGhsZW4gJiYgcGF0aG5hbWVbcGF0aGxlbiAtIDFdID09ICcvJyk7CisKKwlpZiAoKHBhdC0+ZmxhZ3MgJiBFWENfRkxBR19NVVNUQkVESVIpICYmICFpc2RpcikKKwkJcmV0dXJuIDA7CisKKwlpZiAocGF0LT5mbGFncyAmIEVYQ19GTEFHX05PRElSKSB7CisJCXJldHVybiBtYXRjaF9iYXNlbmFtZShwYXRobmFtZSArIGJhc2VuYW1lX29mZnNldCwKKwkJCQkgICAgICBwYXRobGVuIC0gYmFzZW5hbWVfb2Zmc2V0IC0gaXNkaXIsCisJCQkJICAgICAgcGF0dGVybiwgcHJlZml4LAorCQkJCSAgICAgIHBhdC0+cGF0dGVybmxlbiwgcGF0LT5mbGFncyk7CisJfQorCXJldHVybiBtYXRjaF9wYXRobmFtZShwYXRobmFtZSwgcGF0aGxlbiAtIGlzZGlyLAorCQkJICAgICAgYmFzZSwgYmFzZWxlbiwKKwkJCSAgICAgIHBhdHRlcm4sIHByZWZpeCwgcGF0LT5wYXR0ZXJubGVuLCBwYXQtPmZsYWdzKTsKK30KKworc3RhdGljIGludCBtYWNyb2V4cGFuZF9vbmUoaW50IGF0dHJfbnIsIGludCByZW0pOworCitzdGF0aWMgaW50IGZpbGxfb25lKGNvbnN0IGNoYXIgKndoYXQsIHN0cnVjdCBtYXRjaF9hdHRyICphLCBpbnQgcmVtKQoreworCXN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2sgPSBjaGVja19hbGxfYXR0cjsKKwlpbnQgaTsKKworCWZvciAoaSA9IGEtPm51bV9hdHRyIC0gMTsgMCA8IHJlbSAmJiAwIDw9IGk7IGktLSkgeworCQlzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHIgPSBhLT5zdGF0ZVtpXS5hdHRyOworCQljb25zdCBjaGFyICoqbiA9ICYoY2hlY2tbYXR0ci0+YXR0cl9ucl0udmFsdWUpOworCQljb25zdCBjaGFyICp2ID0gYS0+c3RhdGVbaV0uc2V0dG87CisKKwkJaWYgKCpuID09IEFUVFJfX1VOS05PV04pIHsKKwkJCWRlYnVnX3NldCh3aGF0LAorCQkJCSAgYS0+aXNfbWFjcm8gPyBhLT51LmF0dHItPm5hbWUgOiBhLT51LnBhdC5wYXR0ZXJuLAorCQkJCSAgYXR0ciwgdik7CisJCQkqbiA9IHY7CisJCQlyZW0tLTsKKwkJCXJlbSA9IG1hY3JvZXhwYW5kX29uZShhdHRyLT5hdHRyX25yLCByZW0pOworCQl9CisJfQorCXJldHVybiByZW07Cit9CisKK3N0YXRpYyBpbnQgZmlsbChjb25zdCBjaGFyICpwYXRoLCBpbnQgcGF0aGxlbiwgaW50IGJhc2VuYW1lX29mZnNldCwKKwkJc3RydWN0IGF0dHJfc3RhY2sgKnN0aywgaW50IHJlbSkKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICpiYXNlID0gc3RrLT5vcmlnaW4gPyBzdGstPm9yaWdpbiA6ICIiOworCisJZm9yIChpID0gc3RrLT5udW1fbWF0Y2hlcyAtIDE7IDAgPCByZW0gJiYgMCA8PSBpOyBpLS0pIHsKKwkJc3RydWN0IG1hdGNoX2F0dHIgKmEgPSBzdGstPmF0dHJzW2ldOworCQlpZiAoYS0+aXNfbWFjcm8pCisJCQljb250aW51ZTsKKwkJaWYgKHBhdGhfbWF0Y2hlcyhwYXRoLCBwYXRobGVuLCBiYXNlbmFtZV9vZmZzZXQsCisJCQkJICZhLT51LnBhdCwgYmFzZSwgc3RrLT5vcmlnaW5sZW4pKQorCQkJcmVtID0gZmlsbF9vbmUoImZpbGwiLCBhLCByZW0pOworCX0KKwlyZXR1cm4gcmVtOworfQorCitzdGF0aWMgaW50IG1hY3JvZXhwYW5kX29uZShpbnQgbnIsIGludCByZW0pCit7CisJc3RydWN0IGF0dHJfc3RhY2sgKnN0azsKKwlzdHJ1Y3QgbWF0Y2hfYXR0ciAqYSA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAoY2hlY2tfYWxsX2F0dHJbbnJdLnZhbHVlICE9IEFUVFJfX1RSVUUgfHwKKwkgICAgIWNoZWNrX2FsbF9hdHRyW25yXS5hdHRyLT5tYXliZV9tYWNybykKKwkJcmV0dXJuIHJlbTsKKworCWZvciAoc3RrID0gYXR0cl9zdGFjazsgIWEgJiYgc3RrOyBzdGsgPSBzdGstPnByZXYpCisJCWZvciAoaSA9IHN0ay0+bnVtX21hdGNoZXMgLSAxOyAhYSAmJiAwIDw9IGk7IGktLSkgeworCQkJc3RydWN0IG1hdGNoX2F0dHIgKm1hID0gc3RrLT5hdHRyc1tpXTsKKwkJCWlmICghbWEtPmlzX21hY3JvKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG1hLT51LmF0dHItPmF0dHJfbnIgPT0gbnIpCisJCQkJYSA9IG1hOworCQl9CisKKwlpZiAoYSkKKwkJcmVtID0gZmlsbF9vbmUoImV4cGFuZCIsIGEsIHJlbSk7CisKKwlyZXR1cm4gcmVtOworfQorCisvKgorICogQ29sbGVjdCBhdHRyaWJ1dGVzIGZvciBwYXRoIGludG8gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkKKyAqIGNoZWNrX2FsbF9hdHRyLiBJZiBudW0gaXMgbm9uLXplcm8sIG9ubHkgYXR0cmlidXRlcyBpbiBjaGVja1tdIGFyZQorICogY29sbGVjdGVkLiBPdGhlcndpc2UgYWxsIGF0dHJpYnV0ZXMgYXJlIGNvbGxlY3RlZC4KKyAqLworc3RhdGljIHZvaWQgY29sbGVjdF9zb21lX2F0dHJzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBudW0sCisJCQkgICAgICAgc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVjaykKKworeworCXN0cnVjdCBhdHRyX3N0YWNrICpzdGs7CisJaW50IGksIHBhdGhsZW4sIHJlbSwgZGlybGVuOworCWNvbnN0IGNoYXIgKmNwLCAqbGFzdF9zbGFzaCA9IE5VTEw7CisJaW50IGJhc2VuYW1lX29mZnNldDsKKworCWZvciAoY3AgPSBwYXRoOyAqY3A7IGNwKyspIHsKKwkJaWYgKCpjcCA9PSAnLycgJiYgY3BbMV0pCisJCQlsYXN0X3NsYXNoID0gY3A7CisJfQorCXBhdGhsZW4gPSBjcCAtIHBhdGg7CisJaWYgKGxhc3Rfc2xhc2gpIHsKKwkJYmFzZW5hbWVfb2Zmc2V0ID0gbGFzdF9zbGFzaCArIDEgLSBwYXRoOworCQlkaXJsZW4gPSBsYXN0X3NsYXNoIC0gcGF0aDsKKwl9IGVsc2UgeworCQliYXNlbmFtZV9vZmZzZXQgPSAwOworCQlkaXJsZW4gPSAwOworCX0KKworCXByZXBhcmVfYXR0cl9zdGFjayhwYXRoLCBkaXJsZW4pOworCWZvciAoaSA9IDA7IGkgPCBhdHRyX25yOyBpKyspCisJCWNoZWNrX2FsbF9hdHRyW2ldLnZhbHVlID0gQVRUUl9fVU5LTk9XTjsKKwlpZiAobnVtICYmICFjYW5ub3RfdHJ1c3RfbWF5YmVfcmVhbCkgeworCQlyZW0gPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJCWlmICghY2hlY2tbaV0uYXR0ci0+bWF5YmVfcmVhbCkgeworCQkJCXN0cnVjdCBnaXRfYXR0cl9jaGVjayAqYzsKKwkJCQljID0gY2hlY2tfYWxsX2F0dHIgKyBjaGVja1tpXS5hdHRyLT5hdHRyX25yOworCQkJCWMtPnZhbHVlID0gQVRUUl9fVU5TRVQ7CisJCQkJcmVtKys7CisJCQl9CisJCX0KKwkJaWYgKHJlbSA9PSBudW0pCisJCQlyZXR1cm47CisJfQorCisJcmVtID0gYXR0cl9ucjsKKwlmb3IgKHN0ayA9IGF0dHJfc3RhY2s7IDAgPCByZW0gJiYgc3RrOyBzdGsgPSBzdGstPnByZXYpCisJCXJlbSA9IGZpbGwocGF0aCwgcGF0aGxlbiwgYmFzZW5hbWVfb2Zmc2V0LCBzdGssIHJlbSk7Cit9CisKK2ludCBnaXRfY2hlY2tfYXR0cihjb25zdCBjaGFyICpwYXRoLCBpbnQgbnVtLCBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrKQoreworCWludCBpOworCisJY29sbGVjdF9zb21lX2F0dHJzKHBhdGgsIG51bSwgY2hlY2spOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2tfYWxsX2F0dHJbY2hlY2tbaV0uYXR0ci0+YXR0cl9ucl0udmFsdWU7CisJCWlmICh2YWx1ZSA9PSBBVFRSX19VTktOT1dOKQorCQkJdmFsdWUgPSBBVFRSX19VTlNFVDsKKwkJY2hlY2tbaV0udmFsdWUgPSB2YWx1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGdpdF9hbGxfYXR0cnMoY29uc3QgY2hhciAqcGF0aCwgaW50ICpudW0sIHN0cnVjdCBnaXRfYXR0cl9jaGVjayAqKmNoZWNrKQoreworCWludCBpLCBjb3VudCwgajsKKworCWNvbGxlY3Rfc29tZV9hdHRycyhwYXRoLCAwLCBOVUxMKTsKKworCS8qIENvdW50IHRoZSBudW1iZXIgb2YgYXR0cmlidXRlcyB0aGF0IGFyZSBzZXQuICovCisJY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBhdHRyX25yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVja19hbGxfYXR0cltpXS52YWx1ZTsKKwkJaWYgKHZhbHVlICE9IEFUVFJfX1VOU0VUICYmIHZhbHVlICE9IEFUVFJfX1VOS05PV04pCisJCQkrK2NvdW50OworCX0KKwkqbnVtID0gY291bnQ7CisJKmNoZWNrID0geG1hbGxvYyhzaXplb2YoKipjaGVjaykgKiBjb3VudCk7CisJaiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGF0dHJfbnI7IGkrKykgeworCQljb25zdCBjaGFyICp2YWx1ZSA9IGNoZWNrX2FsbF9hdHRyW2ldLnZhbHVlOworCQlpZiAodmFsdWUgIT0gQVRUUl9fVU5TRVQgJiYgdmFsdWUgIT0gQVRUUl9fVU5LTk9XTikgeworCQkJKCpjaGVjaylbal0uYXR0ciA9IGNoZWNrX2FsbF9hdHRyW2ldLmF0dHI7CisJCQkoKmNoZWNrKVtqXS52YWx1ZSA9IHZhbHVlOworCQkJKytqOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihlbnVtIGdpdF9hdHRyX2RpcmVjdGlvbiBuZXcsIHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWVudW0gZ2l0X2F0dHJfZGlyZWN0aW9uIG9sZCA9IGRpcmVjdGlvbjsKKworCWlmIChpc19iYXJlX3JlcG9zaXRvcnkoKSAmJiBuZXcgIT0gR0lUX0FUVFJfSU5ERVgpCisJCWRpZSgiQlVHOiBub24tSU5ERVggYXR0ciBkaXJlY3Rpb24gaW4gYSBiYXJlIHJlcG8iKTsKKworCWRpcmVjdGlvbiA9IG5ldzsKKwlpZiAobmV3ICE9IG9sZCkKKwkJZHJvcF9hdHRyX3N0YWNrKCk7CisJdXNlX2luZGV4ID0gaXN0YXRlOworfQpkaWZmIC0tZ2l0IGEvYXR0ci5oIGIvYXR0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMDhkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hdHRyLmgKQEAgLTAsMCArMSw1NyBAQAorI2lmbmRlZiBBVFRSX0gKKyNkZWZpbmUgQVRUUl9ICisKKy8qIEFuIGF0dHJpYnV0ZSBpcyBhIHBvaW50ZXIgdG8gdGhpcyBvcGFxdWUgc3RydWN0dXJlICovCitzdHJ1Y3QgZ2l0X2F0dHI7CisKKy8qCisgKiBHaXZlbiBhIHN0cmluZywgcmV0dXJuIHRoZSBnaXRhdHRyaWJ1dGUgb2JqZWN0IHRoYXQKKyAqIGNvcnJlc3BvbmRzIHRvIGl0LgorICovCitzdHJ1Y3QgZ2l0X2F0dHIgKmdpdF9hdHRyKGNvbnN0IGNoYXIgKik7CisKKy8qIEludGVybmFsIHVzZSAqLworZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X2F0dHJfX3RydWVbXTsKK2V4dGVybiBjb25zdCBjaGFyIGdpdF9hdHRyX19mYWxzZVtdOworCisvKiBGb3IgcHVibGljIHRvIGNoZWNrIGdpdF9hdHRyX2NoZWNrIHJlc3VsdHMgKi8KKyNkZWZpbmUgQVRUUl9UUlVFKHYpICgodikgPT0gZ2l0X2F0dHJfX3RydWUpCisjZGVmaW5lIEFUVFJfRkFMU0UodikgKCh2KSA9PSBnaXRfYXR0cl9fZmFsc2UpCisjZGVmaW5lIEFUVFJfVU5TRVQodikgKCh2KSA9PSBOVUxMKQorCisvKgorICogU2VuZCBvbmUgb3IgbW9yZSBnaXRfYXR0cl9jaGVjayB0byBnaXRfY2hlY2tfYXR0cigpLCBhbmQKKyAqIGVhY2ggJ3ZhbHVlJyBtZW1iZXIgdGVsbHMgd2hhdCBpdHMgdmFsdWUgaXMuCisgKiBVbnNldCBvbmUgaXMgcmV0dXJuZWQgYXMgTlVMTC4KKyAqLworc3RydWN0IGdpdF9hdHRyX2NoZWNrIHsKKwlzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHI7CisJY29uc3QgY2hhciAqdmFsdWU7Cit9OworCisvKgorICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgcmVwcmVzZW50ZWQgYnkgdGhlIGFyZ3VtZW50LiAgVGhlCisgKiByZXR1cm4gdmFsdWUgaXMgYSBwb2ludGVyIHRvIGEgbnVsbC1kZWxpbWl0ZWQgc3RyaW5nIHRoYXQgaXMgcGFydAorICogb2YgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlOyBpdCBzaG91bGQgbm90IGJlIG1vZGlmaWVkIG9yIGZyZWVkLgorICovCitjaGFyICpnaXRfYXR0cl9uYW1lKHN0cnVjdCBnaXRfYXR0ciAqKTsKKworaW50IGdpdF9jaGVja19hdHRyKGNvbnN0IGNoYXIgKnBhdGgsIGludCwgc3RydWN0IGdpdF9hdHRyX2NoZWNrICopOworCisvKgorICogUmV0cmlldmUgYWxsIGF0dHJpYnV0ZXMgdGhhdCBhcHBseSB0byB0aGUgc3BlY2lmaWVkIHBhdGguICAqbnVtCisgKiB3aWxsIGJlIHNldCB0byB0aGUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgb24gdGhlIHBhdGg7ICoqY2hlY2sgd2lsbAorICogYmUgc2V0IHRvIHBvaW50IGF0IGEgbmV3bHktYWxsb2NhdGVkIGFycmF5IG9mIGdpdF9hdHRyX2NoZWNrCisgKiBvYmplY3RzIGRlc2NyaWJpbmcgdGhlIGF0dHJpYnV0ZXMgYW5kIHRoZWlyIHZhbHVlcy4gICpjaGVjayBtdXN0IGJlCisgKiBmcmVlKCllZCBieSB0aGUgY2FsbGVyLgorICovCitpbnQgZ2l0X2FsbF9hdHRycyhjb25zdCBjaGFyICpwYXRoLCBpbnQgKm51bSwgc3RydWN0IGdpdF9hdHRyX2NoZWNrICoqY2hlY2spOworCitlbnVtIGdpdF9hdHRyX2RpcmVjdGlvbiB7CisJR0lUX0FUVFJfQ0hFQ0tJTiwKKwlHSVRfQVRUUl9DSEVDS09VVCwKKwlHSVRfQVRUUl9JTkRFWAorfTsKK3ZvaWQgZ2l0X2F0dHJfc2V0X2RpcmVjdGlvbihlbnVtIGdpdF9hdHRyX2RpcmVjdGlvbiwgc3RydWN0IGluZGV4X3N0YXRlICopOworCisjZW5kaWYgLyogQVRUUl9IICovCmRpZmYgLS1naXQgYS9iYXNlODUuYyBiL2Jhc2U4NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYTYwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9iYXNlODUuYwpAQCAtMCwwICsxLDEzMiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKKyN1bmRlZiBERUJVR184NQorCisjaWZkZWYgREVCVUdfODUKKyNkZWZpbmUgc2F5KGEpIGZwcmludGYoc3RkZXJyLCBhKQorI2RlZmluZSBzYXkxKGEsYikgZnByaW50ZihzdGRlcnIsIGEsIGIpCisjZGVmaW5lIHNheTIoYSxiLGMpIGZwcmludGYoc3RkZXJyLCBhLCBiLCBjKQorI2Vsc2UKKyNkZWZpbmUgc2F5KGEpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2RlZmluZSBzYXkxKGEsYikgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZGVmaW5lIHNheTIoYSxiLGMpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBjaGFyIGVuODVbXSA9IHsKKwknMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsCisJJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLAorCSdLJywgJ0wnLCAnTScsICdOJywgJ08nLCAnUCcsICdRJywgJ1InLCAnUycsICdUJywKKwknVScsICdWJywgJ1cnLCAnWCcsICdZJywgJ1onLAorCSdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaScsICdqJywKKwknaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsCisJJ3UnLCAndicsICd3JywgJ3gnLCAneScsICd6JywKKwknIScsICcjJywgJyQnLCAnJScsICcmJywgJygnLCAnKScsICcqJywgJysnLCAnLScsCisJJzsnLCAnPCcsICc9JywgJz4nLCAnPycsICdAJywgJ14nLCAnXycsCSdgJywgJ3snLAorCSd8JywgJ30nLCAnficKK307CisKK3N0YXRpYyBjaGFyIGRlODVbMjU2XTsKK3N0YXRpYyB2b2lkIHByZXBfYmFzZTg1KHZvaWQpCit7CisJaW50IGk7CisJaWYgKGRlODVbJ1onXSkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVuODUpOyBpKyspIHsKKwkJaW50IGNoID0gZW44NVtpXTsKKwkJZGU4NVtjaF0gPSBpICsgMTsKKwl9Cit9CisKK2ludCBkZWNvZGVfODUoY2hhciAqZHN0LCBjb25zdCBjaGFyICpidWZmZXIsIGludCBsZW4pCit7CisJcHJlcF9iYXNlODUoKTsKKworCXNheTIoImRlY29kZSA4NSA8JS4qcz4iLCBsZW4gLyA0ICogNSwgYnVmZmVyKTsKKwl3aGlsZSAobGVuKSB7CisJCXVuc2lnbmVkIGFjYyA9IDA7CisJCWludCBkZSwgY250ID0gNDsKKwkJdW5zaWduZWQgY2hhciBjaDsKKwkJZG8geworCQkJY2ggPSAqYnVmZmVyKys7CisJCQlkZSA9IGRlODVbY2hdOworCQkJaWYgKC0tZGUgPCAwKQorCQkJCXJldHVybiBlcnJvcigiaW52YWxpZCBiYXNlODUgYWxwaGFiZXQgJWMiLCBjaCk7CisJCQlhY2MgPSBhY2MgKiA4NSArIGRlOworCQl9IHdoaWxlICgtLWNudCk7CisJCWNoID0gKmJ1ZmZlcisrOworCQlkZSA9IGRlODVbY2hdOworCQlpZiAoLS1kZSA8IDApCisJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgYmFzZTg1IGFscGhhYmV0ICVjIiwgY2gpOworCQkvKiBEZXRlY3Qgb3ZlcmZsb3cuICovCisJCWlmICgweGZmZmZmZmZmIC8gODUgPCBhY2MgfHwKKwkJICAgIDB4ZmZmZmZmZmYgLSBkZSA8IChhY2MgKj0gODUpKQorCQkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGJhc2U4NSBzZXF1ZW5jZSAlLjVzIiwgYnVmZmVyLTUpOworCQlhY2MgKz0gZGU7CisJCXNheTEoIiAlMDh4IiwgYWNjKTsKKworCQljbnQgPSAobGVuIDwgNCkgPyBsZW4gOiA0OworCQlsZW4gLT0gY250OworCQlkbyB7CisJCQlhY2MgPSAoYWNjIDw8IDgpIHwgKGFjYyA+PiAyNCk7CisJCQkqZHN0KysgPSBhY2M7CisJCX0gd2hpbGUgKC0tY250KTsKKwl9CisJc2F5KCJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZW5jb2RlXzg1KGNoYXIgKmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGJ5dGVzKQoreworCXNheSgiZW5jb2RlIDg1Iik7CisJd2hpbGUgKGJ5dGVzKSB7CisJCXVuc2lnbmVkIGFjYyA9IDA7CisJCWludCBjbnQ7CisJCWZvciAoY250ID0gMjQ7IGNudCA+PSAwOyBjbnQgLT0gOCkgeworCQkJdW5zaWduZWQgY2ggPSAqZGF0YSsrOworCQkJYWNjIHw9IGNoIDw8IGNudDsKKwkJCWlmICgtLWJ5dGVzID09IDApCisJCQkJYnJlYWs7CisJCX0KKwkJc2F5MSgiICUwOHgiLCBhY2MpOworCQlmb3IgKGNudCA9IDQ7IGNudCA+PSAwOyBjbnQtLSkgeworCQkJaW50IHZhbCA9IGFjYyAlIDg1OworCQkJYWNjIC89IDg1OworCQkJYnVmW2NudF0gPSBlbjg1W3ZhbF07CisJCX0KKwkJYnVmICs9IDU7CisJfQorCXNheSgiXG4iKTsKKworCSpidWYgPSAwOworfQorCisjaWZkZWYgREVCVUdfODUKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQoreworCWNoYXIgYnVmWzEwMjRdOworCisJaWYgKCFzdHJjbXAoYXZbMV0sICItZSIpKSB7CisJCWludCBsZW4gPSBzdHJsZW4oYXZbMl0pOworCQllbmNvZGVfODUoYnVmLCBhdlsyXSwgbGVuKTsKKwkJaWYgKGxlbiA8PSAyNikgbGVuID0gbGVuICsgJ0EnIC0gMTsKKwkJZWxzZSBsZW4gPSBsZW4gKyAnYScgLSAyNiAtIDE7CisJCXByaW50ZigiZW5jb2RlZDogJWMlc1xuIiwgbGVuLCBidWYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoYXZbMV0sICItZCIpKSB7CisJCWludCBsZW4gPSAqYXZbMl07CisJCWlmICgnQScgPD0gbGVuICYmIGxlbiA8PSAnWicpIGxlbiA9IGxlbiAtICdBJyArIDE7CisJCWVsc2UgbGVuID0gbGVuIC0gJ2EnICsgMjYgKyAxOworCQlkZWNvZGVfODUoYnVmLCBhdlsyXSsxLCBsZW4pOworCQlwcmludGYoImRlY29kZWQ6ICUuKnNcbiIsIGxlbiwgYnVmKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGF2WzFdLCAiLXQiKSkgeworCQljaGFyIHRbNF0gPSB7IC0xLC0xLC0xLC0xIH07CisJCWVuY29kZV84NShidWYsIHQsIDQpOworCQlwcmludGYoImVuY29kZWQ6IEQlc1xuIiwgYnVmKTsKKwkJcmV0dXJuIDA7CisJfQorfQorI2VuZGlmCmRpZmYgLS1naXQgYS9iaXNlY3QuYyBiL2Jpc2VjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1M2QxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9iaXNlY3QuYwpAQCAtMCwwICsxLDEwMzMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImJpc2VjdC5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKK3N0YXRpYyBzdHJ1Y3Qgc2hhMV9hcnJheSBnb29kX3JldnM7CitzdGF0aWMgc3RydWN0IHNoYTFfYXJyYXkgc2tpcHBlZF9yZXZzOworCitzdGF0aWMgc3RydWN0IG9iamVjdF9pZCAqY3VycmVudF9iYWRfb2lkOworCitzdGF0aWMgY29uc3QgY2hhciAqYXJndl9jaGVja291dFtdID0geyJjaGVja291dCIsICItcSIsIE5VTEwsICItLSIsIE5VTEx9Oworc3RhdGljIGNvbnN0IGNoYXIgKmFyZ3Zfc2hvd19icmFuY2hbXSA9IHsic2hvdy1icmFuY2giLCBOVUxMLCBOVUxMfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnRlcm1fYmFkOworc3RhdGljIGNvbnN0IGNoYXIgKnRlcm1fZ29vZDsKKworLyogUmVtZW1iZXIgdG8gdXBkYXRlIG9iamVjdCBmbGFnIGFsbG9jYXRpb24gaW4gb2JqZWN0LmggKi8KKyNkZWZpbmUgQ09VTlRFRAkJKDF1PDwxNikKKworLyoKKyAqIFRoaXMgaXMgYSB0cnVseSBzdHVwaWQgYWxnb3JpdGhtLCBidXQgaXQncyBvbmx5CisgKiB1c2VkIGZvciBiaXNlY3Rpb24sIGFuZCB3ZSBqdXN0IGRvbid0IGNhcmUgZW5vdWdoLgorICoKKyAqIFdlIGNhcmUganVzdCBiYXJlbHkgZW5vdWdoIHRvIGF2b2lkIHJlY3Vyc2luZyBmb3IKKyAqIG5vbi1tZXJnZSBlbnRyaWVzLgorICovCitzdGF0aWMgaW50IGNvdW50X2Rpc3RhbmNlKHN0cnVjdCBjb21taXRfbGlzdCAqZW50cnkpCit7CisJaW50IG5yID0gMDsKKworCXdoaWxlIChlbnRyeSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBlbnRyeS0+aXRlbTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgQ09VTlRFRCkpCisJCQlicmVhazsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkpCisJCQlucisrOworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBDT1VOVEVEOworCQlwID0gY29tbWl0LT5wYXJlbnRzOworCQllbnRyeSA9IHA7CisJCWlmIChwKSB7CisJCQlwID0gcC0+bmV4dDsKKwkJCXdoaWxlIChwKSB7CisJCQkJbnIgKz0gY291bnRfZGlzdGFuY2UocCk7CisJCQkJcCA9IHAtPm5leHQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gbnI7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2Rpc3RhbmNlKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQljb21taXQtPm9iamVjdC5mbGFncyAmPSB+Q09VTlRFRDsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorfQorCisjZGVmaW5lIERFQlVHX0JJU0VDVCAwCisKK3N0YXRpYyBpbmxpbmUgaW50IHdlaWdodChzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW0pCit7CisJcmV0dXJuICooKGludCopKGVsZW0tPml0ZW0tPnV0aWwpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdlaWdodF9zZXQoc3RydWN0IGNvbW1pdF9saXN0ICplbGVtLCBpbnQgd2VpZ2h0KQoreworCSooKGludCopKGVsZW0tPml0ZW0tPnV0aWwpKSA9IHdlaWdodDsKK30KKworc3RhdGljIGludCBjb3VudF9pbnRlcmVzdGluZ19wYXJlbnRzKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJaW50IGNvdW50OworCisJZm9yIChjb3VudCA9IDAsIHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCWNvdW50Kys7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaGFsZndheShzdHJ1Y3QgY29tbWl0X2xpc3QgKnAsIGludCBucikKK3sKKwkvKgorCSAqIERvbid0IHNob3J0LWN1dCBzb21ldGhpbmcgd2UgYXJlIG5vdCBnb2luZyB0byByZXR1cm4hCisJICovCisJaWYgKHAtPml0ZW0tPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKQorCQlyZXR1cm4gMDsKKwlpZiAoREVCVUdfQklTRUNUKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIDIgYW5kIDMgYXJlIGhhbGZ3YXkgb2YgNS4KKwkgKiAzIGlzIGhhbGZ3YXkgb2YgNiBidXQgMiBhbmQgNCBhcmUgbm90LgorCSAqLworCXN3aXRjaCAoMiAqIHdlaWdodChwKSAtIG5yKSB7CisJY2FzZSAtMTogY2FzZSAwOiBjYXNlIDE6CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworI2lmICFERUJVR19CSVNFQ1QKKyNkZWZpbmUgc2hvd19saXN0KGEsYixjLGQpIGRvIHsgOyB9IHdoaWxlICgwKQorI2Vsc2UKK3N0YXRpYyB2b2lkIHNob3dfbGlzdChjb25zdCBjaGFyICpkZWJ1ZywgaW50IGNvdW50ZWQsIGludCBuciwKKwkJICAgICAgc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCWZwcmludGYoc3RkZXJyLCAiJXMgKCVkLyVkKVxuIiwgZGVidWcsIGNvdW50ZWQsIG5yKTsKKworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcHA7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQljaGFyICpidWYgPSByZWFkX3NoYTFfZmlsZShjb21taXQtPm9iamVjdC5zaGExLCAmdHlwZSwgJnNpemUpOworCQljb25zdCBjaGFyICpzdWJqZWN0X3N0YXJ0OworCQlpbnQgc3ViamVjdF9sZW47CisKKwkJZnByaW50ZihzdGRlcnIsICIlYyVjJWMgIiwKKwkJCShmbGFncyAmIFRSRUVTQU1FKSA/ICcgJyA6ICdUJywKKwkJCShmbGFncyAmIFVOSU5URVJFU1RJTkcpID8gJ1UnIDogJyAnLAorCQkJKGZsYWdzICYgQ09VTlRFRCkgPyAnQycgOiAnICcpOworCQlpZiAoY29tbWl0LT51dGlsKQorCQkJZnByaW50ZihzdGRlcnIsICIlM2QiLCB3ZWlnaHQocCkpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIi0tLSIpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAlLipzIiwgOCwgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCQlmb3IgKHBwID0gY29tbWl0LT5wYXJlbnRzOyBwcDsgcHAgPSBwcC0+bmV4dCkKKwkJCWZwcmludGYoc3RkZXJyLCAiICUuKnMiLCA4LAorCQkJCXNoYTFfdG9faGV4KHBwLT5pdGVtLT5vYmplY3Quc2hhMSkpOworCisJCXN1YmplY3RfbGVuID0gZmluZF9jb21taXRfc3ViamVjdChidWYsICZzdWJqZWN0X3N0YXJ0KTsKKwkJaWYgKHN1YmplY3RfbGVuKQorCQkJZnByaW50ZihzdGRlcnIsICIgJS4qcyIsIHN1YmplY3RfbGVuLCBzdWJqZWN0X3N0YXJ0KTsKKwkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCX0KK30KKyNlbmRpZiAvKiBERUJVR19CSVNFQ1QgKi8KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqYmVzdF9iaXNlY3Rpb24oc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCBpbnQgbnIpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwLCAqYmVzdDsKKwlpbnQgYmVzdF9kaXN0YW5jZSA9IC0xOworCisJYmVzdCA9IGxpc3Q7CisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaW50IGRpc3RhbmNlOworCQl1bnNpZ25lZCBmbGFncyA9IHAtPml0ZW0tPm9iamVjdC5mbGFnczsKKworCQlpZiAoZmxhZ3MgJiBUUkVFU0FNRSkKKwkJCWNvbnRpbnVlOworCQlkaXN0YW5jZSA9IHdlaWdodChwKTsKKwkJaWYgKG5yIC0gZGlzdGFuY2UgPCBkaXN0YW5jZSkKKwkJCWRpc3RhbmNlID0gbnIgLSBkaXN0YW5jZTsKKwkJaWYgKGRpc3RhbmNlID4gYmVzdF9kaXN0YW5jZSkgeworCQkJYmVzdCA9IHA7CisJCQliZXN0X2Rpc3RhbmNlID0gZGlzdGFuY2U7CisJCX0KKwl9CisKKwlyZXR1cm4gYmVzdDsKK30KKworc3RydWN0IGNvbW1pdF9kaXN0IHsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJaW50IGRpc3RhbmNlOworfTsKKworc3RhdGljIGludCBjb21wYXJlX2NvbW1pdF9kaXN0KGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwlzdHJ1Y3QgY29tbWl0X2Rpc3QgKmEsICpiOworCisJYSA9IChzdHJ1Y3QgY29tbWl0X2Rpc3QgKilhXzsKKwliID0gKHN0cnVjdCBjb21taXRfZGlzdCAqKWJfOworCWlmIChhLT5kaXN0YW5jZSAhPSBiLT5kaXN0YW5jZSkKKwkJcmV0dXJuIGItPmRpc3RhbmNlIC0gYS0+ZGlzdGFuY2U7IC8qIGRlc2Mgc29ydCAqLworCXJldHVybiBoYXNoY21wKGEtPmNvbW1pdC0+b2JqZWN0LnNoYTEsIGItPmNvbW1pdC0+b2JqZWN0LnNoYTEpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpiZXN0X2Jpc2VjdGlvbl9zb3J0ZWQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCBpbnQgbnIpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCXN0cnVjdCBjb21taXRfZGlzdCAqYXJyYXkgPSB4Y2FsbG9jKG5yLCBzaXplb2YoKmFycmF5KSk7CisJaW50IGNudCwgaTsKKworCWZvciAocCA9IGxpc3QsIGNudCA9IDA7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWludCBkaXN0YW5jZTsKKwkJdW5zaWduZWQgZmxhZ3MgPSBwLT5pdGVtLT5vYmplY3QuZmxhZ3M7CisKKwkJaWYgKGZsYWdzICYgVFJFRVNBTUUpCisJCQljb250aW51ZTsKKwkJZGlzdGFuY2UgPSB3ZWlnaHQocCk7CisJCWlmIChuciAtIGRpc3RhbmNlIDwgZGlzdGFuY2UpCisJCQlkaXN0YW5jZSA9IG5yIC0gZGlzdGFuY2U7CisJCWFycmF5W2NudF0uY29tbWl0ID0gcC0+aXRlbTsKKwkJYXJyYXlbY250XS5kaXN0YW5jZSA9IGRpc3RhbmNlOworCQljbnQrKzsKKwl9CisJcXNvcnQoYXJyYXksIGNudCwgc2l6ZW9mKCphcnJheSksIGNvbXBhcmVfY29tbWl0X2Rpc3QpOworCWZvciAocCA9IGxpc3QsIGkgPSAwOyBpIDwgY250OyBpKyspIHsKKwkJY2hhciBidWZbMTAwXTsgLyogZW5vdWdoIGZvciBkaXN0PSVkICovCisJCXN0cnVjdCBvYmplY3QgKm9iaiA9ICYoYXJyYXlbaV0uY29tbWl0LT5vYmplY3QpOworCisJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJkaXN0PSVkIiwgYXJyYXlbaV0uZGlzdGFuY2UpOworCQlhZGRfbmFtZV9kZWNvcmF0aW9uKERFQ09SQVRJT05fTk9ORSwgYnVmLCBvYmopOworCisJCXAtPml0ZW0gPSBhcnJheVtpXS5jb21taXQ7CisJCXAgPSBwLT5uZXh0OworCX0KKwlpZiAocCkKKwkJcC0+bmV4dCA9IE5VTEw7CisJZnJlZShhcnJheSk7CisJcmV0dXJuIGxpc3Q7Cit9CisKKy8qCisgKiB6ZXJvIG9yIHBvc2l0aXZlIHdlaWdodCBpcyB0aGUgbnVtYmVyIG9mIGludGVyZXN0aW5nIGNvbW1pdHMgaXQgY2FuCisgKiByZWFjaCwgaW5jbHVkaW5nIGl0c2VsZi4gIEVzcGVjaWFsbHksIHdlaWdodCA9IDAgbWVhbnMgaXQgZG9lcyBub3QKKyAqIHJlYWNoIGFueSB0cmVlLWNoYW5naW5nIGNvbW1pdHMgKGUuZy4ganVzdCBhYm92ZSB1bmludGVyZXN0aW5nIG9uZQorICogYnV0IHRyYXZlcnNhbCBpcyB3aXRoIHBhdGhzcGVjKS4KKyAqCisgKiB3ZWlnaHQgPSAtMSBtZWFucyBpdCBoYXMgb25lIHBhcmVudCBhbmQgaXRzIGRpc3RhbmNlIGlzIHlldCB0bworICogYmUgY29tcHV0ZWQuCisgKgorICogd2VpZ2h0ID0gLTIgbWVhbnMgaXQgaGFzIG1vcmUgdGhhbiBvbmUgcGFyZW50IGFuZCBpdHMgZGlzdGFuY2UgaXMKKyAqIHVua25vd24uICBBZnRlciBydW5uaW5nIGNvdW50X2Rpc3RhbmNlKCkgZmlyc3QsIHRoZXkgd2lsbCBnZXQgemVybworICogb3IgcG9zaXRpdmUgZGlzdGFuY2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmRvX2ZpbmRfYmlzZWN0aW9uKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCQkJICAgICBpbnQgbnIsIGludCAqd2VpZ2h0cywKKwkJCQkJICAgICBpbnQgZmluZF9hbGwpCit7CisJaW50IG4sIGNvdW50ZWQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCisJY291bnRlZCA9IDA7CisKKwlmb3IgKG4gPSAwLCBwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcC0+aXRlbTsKKwkJdW5zaWduZWQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFnczsKKworCQlwLT5pdGVtLT51dGlsID0gJndlaWdodHNbbisrXTsKKwkJc3dpdGNoIChjb3VudF9pbnRlcmVzdGluZ19wYXJlbnRzKGNvbW1pdCkpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpIHsKKwkJCQl3ZWlnaHRfc2V0KHAsIDEpOworCQkJCWNvdW50ZWQrKzsKKwkJCQlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGNvdW50IG9uZSIsCisJCQkJCSAgY291bnRlZCwgbnIsIGxpc3QpOworCQkJfQorCQkJLyoKKwkJCSAqIG90aGVyd2lzZSwgaXQgaXMga25vd24gbm90IHRvIHJlYWNoIGFueQorCQkJICogdHJlZS1jaGFuZ2luZyBjb21taXQgYW5kIGdldHMgd2VpZ2h0IDAuCisJCQkgKi8KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl3ZWlnaHRfc2V0KHAsIC0xKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJd2VpZ2h0X3NldChwLCAtMik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNob3dfbGlzdCgiYmlzZWN0aW9uIDIgaW5pdGlhbGl6ZSIsIGNvdW50ZWQsIG5yLCBsaXN0KTsKKworCS8qCisJICogSWYgeW91IGhhdmUgb25seSBvbmUgcGFyZW50IGluIHRoZSByZXN1bHRpbmcgc2V0CisJICogdGhlbiB5b3UgY2FuIHJlYWNoIG9uZSBjb21taXQgbW9yZSB0aGFuIHRoYXQgcGFyZW50CisJICogY2FuIHJlYWNoLiAgU28gd2UgZG8gbm90IGhhdmUgdG8gcnVuIHRoZSBleHBlbnNpdmUKKwkgKiBjb3VudF9kaXN0YW5jZSgpIGZvciBzaW5nbGUgc3RyYW5kIG9mIHBlYXJscy4KKwkgKgorCSAqIEhvd2V2ZXIsIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgcGFyZW50cywgeW91IGNhbm5vdAorCSAqIGp1c3QgYWRkIHRoZWlyIGRpc3RhbmNlIGFuZCBvbmUgZm9yIHlvdXJzZWxmLCBzaW5jZQorCSAqIHRoZXkgdXN1YWxseSByZWFjaCB0aGUgc2FtZSBhbmNlc3RvciBhbmQgeW91IHdvdWxkCisJICogZW5kIHVwIGNvdW50aW5nIHRoZW0gdHdpY2UgdGhhdCB3YXkuCisJICoKKwkgKiBTbyB3ZSB3aWxsIGZpcnN0IGNvdW50IGRpc3RhbmNlIG9mIG1lcmdlcyB0aGUgdXN1YWwKKwkgKiB3YXksIGFuZCB0aGVuIGZpbGwgdGhlIGJsYW5rcyB1c2luZyBjaGVhcGVyIGFsZ29yaXRobS4KKwkgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCQlpZiAod2VpZ2h0KHApICE9IC0yKQorCQkJY29udGludWU7CisJCXdlaWdodF9zZXQocCwgY291bnRfZGlzdGFuY2UocCkpOworCQljbGVhcl9kaXN0YW5jZShsaXN0KTsKKworCQkvKiBEb2VzIGl0IGhhcHBlbiB0byBiZSBhdCBleGFjdGx5IGhhbGYtd2F5PyAqLworCQlpZiAoIWZpbmRfYWxsICYmIGhhbGZ3YXkocCwgbnIpKQorCQkJcmV0dXJuIHA7CisJCWNvdW50ZWQrKzsKKwl9CisKKwlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGNvdW50X2Rpc3RhbmNlIiwgY291bnRlZCwgbnIsIGxpc3QpOworCisJd2hpbGUgKGNvdW50ZWQgPCBucikgeworCQlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpxOworCQkJdW5zaWduZWQgZmxhZ3MgPSBwLT5pdGVtLT5vYmplY3QuZmxhZ3M7CisKKwkJCWlmICgwIDw9IHdlaWdodChwKSkKKwkJCQljb250aW51ZTsKKwkJCWZvciAocSA9IHAtPml0ZW0tPnBhcmVudHM7IHE7IHEgPSBxLT5uZXh0KSB7CisJCQkJaWYgKHEtPml0ZW0tPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmICgwIDw9IHdlaWdodChxKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoIXEpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiB3ZWlnaHQgZm9yIHAgaXMgdW5rbm93biBidXQgcSBpcyBrbm93bi4KKwkJCSAqIGFkZCBvbmUgZm9yIHAgaXRzZWxmIGlmIHAgaXMgdG8gYmUgY291bnRlZCwKKwkJCSAqIG90aGVyd2lzZSBpbmhlcml0IGl0IGZyb20gcSBkaXJlY3RseS4KKwkJCSAqLworCQkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpIHsKKwkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSsxKTsKKwkJCQljb3VudGVkKys7CisJCQkJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBjb3VudCBvbmUiLAorCQkJCQkgIGNvdW50ZWQsIG5yLCBsaXN0KTsKKwkJCX0KKwkJCWVsc2UKKwkJCQl3ZWlnaHRfc2V0KHAsIHdlaWdodChxKSk7CisKKwkJCS8qIERvZXMgaXQgaGFwcGVuIHRvIGJlIGF0IGV4YWN0bHkgaGFsZi13YXk/ICovCisJCQlpZiAoIWZpbmRfYWxsICYmIGhhbGZ3YXkocCwgbnIpKQorCQkJCXJldHVybiBwOworCQl9CisJfQorCisJc2hvd19saXN0KCJiaXNlY3Rpb24gMiBjb3VudGVkIGFsbCIsIGNvdW50ZWQsIG5yLCBsaXN0KTsKKworCWlmICghZmluZF9hbGwpCisJCXJldHVybiBiZXN0X2Jpc2VjdGlvbihsaXN0LCBucik7CisJZWxzZQorCQlyZXR1cm4gYmVzdF9iaXNlY3Rpb25fc29ydGVkKGxpc3QsIG5yKTsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpmaW5kX2Jpc2VjdGlvbihzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCQkJCSAgaW50ICpyZWFjaGVzLCBpbnQgKmFsbCwKKwkJCQkJICBpbnQgZmluZF9hbGwpCit7CisJaW50IG5yLCBvbl9saXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcCwgKmJlc3QsICpuZXh0LCAqbGFzdDsKKwlpbnQgKndlaWdodHM7CisKKwlzaG93X2xpc3QoImJpc2VjdGlvbiAyIGVudHJ5IiwgMCwgMCwgbGlzdCk7CisKKwkvKgorCSAqIENvdW50IHRoZSBudW1iZXIgb2YgdG90YWwgYW5kIHRyZWUtY2hhbmdpbmcgaXRlbXMgb24gdGhlCisJICogbGlzdCwgd2hpbGUgcmV2ZXJzaW5nIHRoZSBsaXN0LgorCSAqLworCWZvciAobnIgPSBvbl9saXN0ID0gMCwgbGFzdCA9IE5VTEwsIHAgPSBsaXN0OworCSAgICAgcDsKKwkgICAgIHAgPSBuZXh0KSB7CisJCXVuc2lnbmVkIGZsYWdzID0gcC0+aXRlbS0+b2JqZWN0LmZsYWdzOworCisJCW5leHQgPSBwLT5uZXh0OworCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCXAtPm5leHQgPSBsYXN0OworCQlsYXN0ID0gcDsKKwkJaWYgKCEoZmxhZ3MgJiBUUkVFU0FNRSkpCisJCQlucisrOworCQlvbl9saXN0Kys7CisJfQorCWxpc3QgPSBsYXN0OworCXNob3dfbGlzdCgiYmlzZWN0aW9uIDIgc29ydGVkIiwgMCwgbnIsIGxpc3QpOworCisJKmFsbCA9IG5yOworCXdlaWdodHMgPSB4Y2FsbG9jKG9uX2xpc3QsIHNpemVvZigqd2VpZ2h0cykpOworCisJLyogRG8gdGhlIHJlYWwgd29yayBvZiBmaW5kaW5nIGJpc2VjdGlvbiBjb21taXQuICovCisJYmVzdCA9IGRvX2ZpbmRfYmlzZWN0aW9uKGxpc3QsIG5yLCB3ZWlnaHRzLCBmaW5kX2FsbCk7CisJaWYgKGJlc3QpIHsKKwkJaWYgKCFmaW5kX2FsbCkKKwkJCWJlc3QtPm5leHQgPSBOVUxMOworCQkqcmVhY2hlcyA9IHdlaWdodChiZXN0KTsKKwl9CisJZnJlZSh3ZWlnaHRzKTsKKwlyZXR1cm4gYmVzdDsKK30KKworc3RhdGljIGludCByZWdpc3Rlcl9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdHJidWYgZ29vZF9wcmVmaXggPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkc3RyKCZnb29kX3ByZWZpeCwgdGVybV9nb29kKTsKKwlzdHJidWZfYWRkc3RyKCZnb29kX3ByZWZpeCwgIi0iKTsKKworCWlmICghc3RyY21wKHJlZm5hbWUsIHRlcm1fYmFkKSkgeworCQljdXJyZW50X2JhZF9vaWQgPSB4bWFsbG9jKHNpemVvZigqY3VycmVudF9iYWRfb2lkKSk7CisJCW9pZGNweShjdXJyZW50X2JhZF9vaWQsIG9pZCk7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChyZWZuYW1lLCBnb29kX3ByZWZpeC5idWYpKSB7CisJCXNoYTFfYXJyYXlfYXBwZW5kKCZnb29kX3JldnMsIG9pZC0+aGFzaCk7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAic2tpcC0iKSkgeworCQlzaGExX2FycmF5X2FwcGVuZCgmc2tpcHBlZF9yZXZzLCBvaWQtPmhhc2gpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZnb29kX3ByZWZpeCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX2Jpc2VjdF9yZWZzKHZvaWQpCit7CisJcmV0dXJuIGZvcl9lYWNoX3JlZl9pbigicmVmcy9iaXNlY3QvIiwgcmVnaXN0ZXJfcmVmLCBOVUxMKTsKK30KKworc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfYmlzZWN0X25hbWVzLCAiQklTRUNUX05BTUVTIikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2Jpc2VjdF9leHBlY3RlZF9yZXYsICJCSVNFQ1RfRVhQRUNURURfUkVWIikKKworc3RhdGljIHZvaWQgcmVhZF9iaXNlY3RfcGF0aHMoc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5KQoreworCXN0cnVjdCBzdHJidWYgc3RyID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aF9iaXNlY3RfbmFtZXMoKTsKKwlGSUxFICpmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCisJaWYgKCFmcCkKKwkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiBmaWxlICclcyciLCBmaWxlbmFtZSk7CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJnN0ciwgZnAsICdcbicpICE9IEVPRikgeworCQlzdHJidWZfdHJpbSgmc3RyKTsKKwkJaWYgKHNxX2RlcXVvdGVfdG9fYXJndl9hcnJheShzdHIuYnVmLCBhcnJheSkpCisJCQlkaWUoIkJhZGx5IHF1b3RlZCBjb250ZW50IGluIGZpbGUgJyVzJzogJXMiLAorCQkJICAgIGZpbGVuYW1lLCBzdHIuYnVmKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmc3RyKTsKKwlmY2xvc2UoZnApOworfQorCitzdGF0aWMgY2hhciAqam9pbl9zaGExX2FycmF5X2hleChzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXksIGNoYXIgZGVsaW0pCit7CisJc3RydWN0IHN0cmJ1ZiBqb2luZWRfaGV4cyA9IFNUUkJVRl9JTklUOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmpvaW5lZF9oZXhzLCBzaGExX3RvX2hleChhcnJheS0+c2hhMVtpXSkpOworCQlpZiAoaSArIDEgPCBhcnJheS0+bnIpCisJCQlzdHJidWZfYWRkY2goJmpvaW5lZF9oZXhzLCBkZWxpbSk7CisJfQorCisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmpvaW5lZF9oZXhzLCBOVUxMKTsKK30KKworLyoKKyAqIEluIHRoaXMgZnVuY3Rpb24sIHBhc3NpbmcgYSBub3QgTlVMTCBza2lwcGVkX2ZpcnN0IGlzIHZlcnkgc3BlY2lhbC4KKyAqIEl0IG1lYW5zIHRoYXQgd2Ugd2FudCB0byBrbm93IGlmIHRoZSBmaXJzdCBjb21taXQgaW4gdGhlIGxpc3QgaXMKKyAqIHNraXBwZWQgYmVjYXVzZSB3ZSB3aWxsIHdhbnQgdG8gdGVzdCBhIGNvbW1pdCBhd2F5IGZyb20gaXQgaWYgaXQgaXMKKyAqIGluZGVlZCBza2lwcGVkLgorICogU28gaWYgdGhlIGZpcnN0IGNvbW1pdCBpcyBza2lwcGVkLCB3ZSBjYW5ub3QgdGFrZSB0aGUgc2hvcnRjdXQgdG8KKyAqIGp1c3QgInJldHVybiBsaXN0IiB3aGVuIHdlIGZpbmQgdGhlIGZpcnN0IG5vbiBza2lwcGVkIGNvbW1pdCwgd2UKKyAqIGhhdmUgdG8gcmV0dXJuIGEgZnVsbHkgZmlsdGVyZWQgbGlzdC4KKyAqCisgKiBXZSB1c2UgKCpza2lwcGVkX2ZpcnN0ID09IC0xKSB0byBtZWFuICJpdCBoYXMgYmVlbiBmb3VuZCB0aGF0IHRoZQorICogZmlyc3QgY29tbWl0IGlzIG5vdCBza2lwcGVkIi4gSW4gdGhpcyBjYXNlICpza2lwcGVkX2ZpcnN0IGlzIHNldCBiYWNrCisgKiB0byAwIGp1c3QgYmVmb3JlIHRoZSBmdW5jdGlvbiByZXR1cm5zLgorICovCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpbHRlcl9za2lwcGVkKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwKKwkJCQkgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0cmllZCwKKwkJCQkgICBpbnQgc2hvd19hbGwsCisJCQkJICAgaW50ICpjb3VudCwKKwkJCQkgICBpbnQgKnNraXBwZWRfZmlyc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpmaWx0ZXJlZCA9IE5VTEwsICoqZiA9ICZmaWx0ZXJlZDsKKworCSp0cmllZCA9IE5VTEw7CisKKwlpZiAoc2tpcHBlZF9maXJzdCkKKwkJKnNraXBwZWRfZmlyc3QgPSAwOworCWlmIChjb3VudCkKKwkJKmNvdW50ID0gMDsKKworCWlmICghc2tpcHBlZF9yZXZzLm5yKQorCQlyZXR1cm4gbGlzdDsKKworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbmV4dCA9IGxpc3QtPm5leHQ7CisJCWxpc3QtPm5leHQgPSBOVUxMOworCQlpZiAoMCA8PSBzaGExX2FycmF5X2xvb2t1cCgmc2tpcHBlZF9yZXZzLAorCQkJCQkgICBsaXN0LT5pdGVtLT5vYmplY3Quc2hhMSkpIHsKKwkJCWlmIChza2lwcGVkX2ZpcnN0ICYmICEqc2tpcHBlZF9maXJzdCkKKwkJCQkqc2tpcHBlZF9maXJzdCA9IDE7CisJCQkvKiBNb3ZlIGN1cnJlbnQgdG8gdHJpZWQgbGlzdCAqLworCQkJKnRyaWVkID0gbGlzdDsKKwkJCXRyaWVkID0gJmxpc3QtPm5leHQ7CisJCX0gZWxzZSB7CisJCQlpZiAoIXNob3dfYWxsKSB7CisJCQkJaWYgKCFza2lwcGVkX2ZpcnN0IHx8ICEqc2tpcHBlZF9maXJzdCkKKwkJCQkJcmV0dXJuIGxpc3Q7CisJCQl9IGVsc2UgaWYgKHNraXBwZWRfZmlyc3QgJiYgISpza2lwcGVkX2ZpcnN0KSB7CisJCQkJLyogVGhpcyBtZWFucyB3ZSBrbm93IGl0J3Mgbm90IHNraXBwZWQgKi8KKwkJCQkqc2tpcHBlZF9maXJzdCA9IC0xOworCQkJfQorCQkJLyogTW92ZSBjdXJyZW50IHRvIGZpbHRlcmVkIGxpc3QgKi8KKwkJCSpmID0gbGlzdDsKKwkJCWYgPSAmbGlzdC0+bmV4dDsKKwkJCWlmIChjb3VudCkKKwkJCQkoKmNvdW50KSsrOworCQl9CisJCWxpc3QgPSBuZXh0OworCX0KKworCWlmIChza2lwcGVkX2ZpcnN0ICYmICpza2lwcGVkX2ZpcnN0ID09IC0xKQorCQkqc2tpcHBlZF9maXJzdCA9IDA7CisKKwlyZXR1cm4gZmlsdGVyZWQ7Cit9CisKKyNkZWZpbmUgUFJOX01PRFVMTyAzMjc2OAorCisvKgorICogVGhpcyBpcyBhIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBiYXNlZCBvbiAibWFuIDMgcmFuZCIuCisgKiBJdCBpcyBub3QgdXNlZCBwcm9wZXJseSBiZWNhdXNlIHRoZSBzZWVkIGlzIHRoZSBhcmd1bWVudCBhbmQgaXQKKyAqIGlzIGluY3JlYXNlZCBieSBvbmUgYmV0d2VlbiBlYWNoIGNhbGwsIGJ1dCB0aGF0IHNob3VsZCBub3QgbWF0dGVyCisgKiBmb3IgdGhpcyBhcHBsaWNhdGlvbi4KKyAqLworc3RhdGljIHVuc2lnbmVkIGdldF9wcm4odW5zaWduZWQgY291bnQpIHsKKwljb3VudCA9IGNvdW50ICogMTEwMzUxNTI0NSArIDEyMzQ1OworCXJldHVybiAoY291bnQvNjU1MzYpICUgUFJOX01PRFVMTzsKK30KKworLyoKKyAqIEN1c3RvbSBpbnRlZ2VyIHNxdWFyZSByb290IGZyb20KKyAqIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZWdlcl9zcXVhcmVfcm9vdAorICovCitzdGF0aWMgaW50IHNxcnRpKGludCB2YWwpCit7CisJZmxvYXQgZCwgeCA9IHZhbDsKKworCWlmICh2YWwgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlkbyB7CisJCWZsb2F0IHkgPSAoeCArIChmbG9hdCl2YWwgLyB4KSAvIDI7CisJCWQgPSAoeSA+IHgpID8geSAtIHggOiB4IC0geTsKKwkJeCA9IHk7CisJfSB3aGlsZSAoZCA+PSAwLjUpOworCisJcmV0dXJuIChpbnQpeDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqc2tpcF9hd2F5KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCwgaW50IGNvdW50KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqY3VyLCAqcHJldmlvdXM7CisJaW50IHBybiwgaW5kZXgsIGk7CisKKwlwcm4gPSBnZXRfcHJuKGNvdW50KTsKKwlpbmRleCA9IChjb3VudCAqIHBybiAvIFBSTl9NT0RVTE8pICogc3FydGkocHJuKSAvIHNxcnRpKFBSTl9NT0RVTE8pOworCisJY3VyID0gbGlzdDsKKwlwcmV2aW91cyA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBjdXI7IGN1ciA9IGN1ci0+bmV4dCwgaSsrKSB7CisJCWlmIChpID09IGluZGV4KSB7CisJCQlpZiAoaGFzaGNtcChjdXItPml0ZW0tPm9iamVjdC5zaGExLCBjdXJyZW50X2JhZF9vaWQtPmhhc2gpKQorCQkJCXJldHVybiBjdXI7CisJCQlpZiAocHJldmlvdXMpCisJCQkJcmV0dXJuIHByZXZpb3VzOworCQkJcmV0dXJuIGxpc3Q7CisJCX0KKwkJcHJldmlvdXMgPSBjdXI7CisJfQorCisJcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKm1hbmFnZWRfc2tpcHBlZChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsCisJCQkJCSAgIHN0cnVjdCBjb21taXRfbGlzdCAqKnRyaWVkKQoreworCWludCBjb3VudCwgc2tpcHBlZF9maXJzdDsKKworCSp0cmllZCA9IE5VTEw7CisKKwlpZiAoIXNraXBwZWRfcmV2cy5ucikKKwkJcmV0dXJuIGxpc3Q7CisKKwlsaXN0ID0gZmlsdGVyX3NraXBwZWQobGlzdCwgdHJpZWQsIDAsICZjb3VudCwgJnNraXBwZWRfZmlyc3QpOworCisJaWYgKCFza2lwcGVkX2ZpcnN0KQorCQlyZXR1cm4gbGlzdDsKKworCXJldHVybiBza2lwX2F3YXkobGlzdCwgY291bnQpOworfQorCitzdGF0aWMgdm9pZCBiaXNlY3RfcmV2X3NldHVwKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICBjb25zdCBjaGFyICpiYWRfZm9ybWF0LCBjb25zdCBjaGFyICpnb29kX2Zvcm1hdCwKKwkJCSAgICAgaW50IHJlYWRfcGF0aHMpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgcmV2X2FyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisJaW50IGk7CisKKwlpbml0X3JldmlzaW9ucyhyZXZzLCBwcmVmaXgpOworCXJldnMtPmFiYnJldiA9IDA7CisJcmV2cy0+Y29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX1VOU1BFQ0lGSUVEOworCisJLyogcmV2X2FyZ3YuYXJndlswXSB3aWxsIGJlIGlnbm9yZWQgYnkgc2V0dXBfcmV2aXNpb25zICovCisJYXJndl9hcnJheV9wdXNoKCZyZXZfYXJndiwgImJpc2VjdF9yZXZfc2V0dXAiKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZyZXZfYXJndiwgYmFkX2Zvcm1hdCwgb2lkX3RvX2hleChjdXJyZW50X2JhZF9vaWQpKTsKKwlmb3IgKGkgPSAwOyBpIDwgZ29vZF9yZXZzLm5yOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJnJldl9hcmd2LCBnb29kX2Zvcm1hdCwKKwkJCQkgc2hhMV90b19oZXgoZ29vZF9yZXZzLnNoYTFbaV0pKTsKKwlhcmd2X2FycmF5X3B1c2goJnJldl9hcmd2LCAiLS0iKTsKKwlpZiAocmVhZF9wYXRocykKKwkJcmVhZF9iaXNlY3RfcGF0aHMoJnJldl9hcmd2KTsKKworCXNldHVwX3JldmlzaW9ucyhyZXZfYXJndi5hcmdjLCByZXZfYXJndi5hcmd2LCByZXZzLCBOVUxMKTsKKwkvKiBYWFggbGVhayByZXZfYXJndiwgYXMgInJldnMiIG1heSBzdGlsbCBiZSBwb2ludGluZyB0byBpdCAqLworfQorCitzdGF0aWMgdm9pZCBiaXNlY3RfY29tbW9uKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJaWYgKHJldnMtPnRyZWVfb2JqZWN0cykKKwkJbWFya19lZGdlc191bmludGVyZXN0aW5nKHJldnMsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBleGl0X2lmX3NraXBwZWRfY29tbWl0cyhzdHJ1Y3QgY29tbWl0X2xpc3QgKnRyaWVkLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpiYWQpCit7CisJaWYgKCF0cmllZCkKKwkJcmV0dXJuOworCisJcHJpbnRmKCJUaGVyZSBhcmUgb25seSAnc2tpcCdwZWQgY29tbWl0cyBsZWZ0IHRvIHRlc3QuXG4iCisJICAgICAgICJUaGUgZmlyc3QgJXMgY29tbWl0IGNvdWxkIGJlIGFueSBvZjpcbiIsIHRlcm1fYmFkKTsKKwlwcmludF9jb21taXRfbGlzdCh0cmllZCwgIiVzXG4iLCAiJXNcbiIpOworCWlmIChiYWQpCisJCXByaW50ZigiJXNcbiIsIG9pZF90b19oZXgoYmFkKSk7CisJcHJpbnRmKCJXZSBjYW5ub3QgYmlzZWN0IG1vcmUhXG4iKTsKKwlleGl0KDIpOworfQorCitzdGF0aWMgaW50IGlzX2V4cGVjdGVkX3Jldihjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aF9iaXNlY3RfZXhwZWN0ZWRfcmV2KCk7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICpmcDsKKwlpbnQgcmVzID0gMDsKKworCWlmIChzdGF0KGZpbGVuYW1lLCAmc3QpIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gMDsKKworCWZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RyYnVmX2dldGxpbmUoJnN0ciwgZnAsICdcbicpICE9IEVPRikKKwkJcmVzID0gIXN0cmNtcChzdHIuYnVmLCBvaWRfdG9faGV4KG9pZCkpOworCisJc3RyYnVmX3JlbGVhc2UoJnN0cik7CisJZmNsb3NlKGZwKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgYmlzZWN0X2NoZWNrb3V0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJpc2VjdF9yZXYsIGludCBub19jaGVja291dCkKK3sKKwljaGFyIGJpc2VjdF9yZXZfaGV4W0dJVF9TSEExX0hFWFNaICsgMV07CisKKwltZW1jcHkoYmlzZWN0X3Jldl9oZXgsIHNoYTFfdG9faGV4KGJpc2VjdF9yZXYpLCBHSVRfU0hBMV9IRVhTWiArIDEpOworCXVwZGF0ZV9yZWYoTlVMTCwgIkJJU0VDVF9FWFBFQ1RFRF9SRVYiLCBiaXNlY3RfcmV2LCBOVUxMLCAwLCBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKworCWFyZ3ZfY2hlY2tvdXRbMl0gPSBiaXNlY3RfcmV2X2hleDsKKwlpZiAobm9fY2hlY2tvdXQpIHsKKwkJdXBkYXRlX3JlZihOVUxMLCAiQklTRUNUX0hFQUQiLCBiaXNlY3RfcmV2LCBOVUxMLCAwLCBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKwl9IGVsc2UgeworCQlpbnQgcmVzOworCQlyZXMgPSBydW5fY29tbWFuZF92X29wdChhcmd2X2NoZWNrb3V0LCBSVU5fR0lUX0NNRCk7CisJCWlmIChyZXMpCisJCQlleGl0KHJlcyk7CisJfQorCisJYXJndl9zaG93X2JyYW5jaFsxXSA9IGJpc2VjdF9yZXZfaGV4OworCXJldHVybiBydW5fY29tbWFuZF92X29wdChhcmd2X3Nob3dfYnJhbmNoLCBSVU5fR0lUX0NNRCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpnZXRfY29tbWl0X3JlZmVyZW5jZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBjb21taXQgKnIgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwlpZiAoIXIpCisJCWRpZSgiTm90IGEgdmFsaWQgY29tbWl0IG5hbWUgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICoqZ2V0X2JhZF9hbmRfZ29vZF9jb21taXRzKGludCAqcmV2X25yKQoreworCWludCBsZW4gPSAxICsgZ29vZF9yZXZzLm5yOworCXN0cnVjdCBjb21taXQgKipyZXYgPSB4bWFsbG9jKGxlbiAqIHNpemVvZigqcmV2KSk7CisJaW50IGksIG4gPSAwOworCisJcmV2W24rK10gPSBnZXRfY29tbWl0X3JlZmVyZW5jZShjdXJyZW50X2JhZF9vaWQtPmhhc2gpOworCWZvciAoaSA9IDA7IGkgPCBnb29kX3JldnMubnI7IGkrKykKKwkJcmV2W24rK10gPSBnZXRfY29tbWl0X3JlZmVyZW5jZShnb29kX3JldnMuc2hhMVtpXSk7CisJKnJldl9uciA9IG47CisKKwlyZXR1cm4gcmV2OworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYmFkX21lcmdlX2Jhc2Uodm9pZCkKK3sKKwlpZiAoaXNfZXhwZWN0ZWRfcmV2KGN1cnJlbnRfYmFkX29pZCkpIHsKKwkJY2hhciAqYmFkX2hleCA9IG9pZF90b19oZXgoY3VycmVudF9iYWRfb2lkKTsKKwkJY2hhciAqZ29vZF9oZXggPSBqb2luX3NoYTFfYXJyYXlfaGV4KCZnb29kX3JldnMsICcgJyk7CisJCWlmICghc3RyY21wKHRlcm1fYmFkLCAiYmFkIikgJiYgIXN0cmNtcCh0ZXJtX2dvb2QsICJnb29kIikpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVGhlIG1lcmdlIGJhc2UgJXMgaXMgYmFkLlxuIgorCQkJCSJUaGlzIG1lYW5zIHRoZSBidWcgaGFzIGJlZW4gZml4ZWQgIgorCQkJCSJiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIiwKKwkJCQliYWRfaGV4LCBiYWRfaGV4LCBnb29kX2hleCk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0ZXJtX2JhZCwgIm5ldyIpICYmICFzdHJjbXAodGVybV9nb29kLCAib2xkIikpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVGhlIG1lcmdlIGJhc2UgJXMgaXMgbmV3LlxuIgorCQkJCSJUaGUgcHJvcGVydHkgaGFzIGNoYW5nZWQgIgorCQkJCSJiZXR3ZWVuICVzIGFuZCBbJXNdLlxuIiwKKwkJCQliYWRfaGV4LCBiYWRfaGV4LCBnb29kX2hleCk7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlRoZSBtZXJnZSBiYXNlICVzIGlzICVzLlxuIgorCQkJCSJUaGlzIG1lYW5zIHRoZSBmaXJzdCAnJXMnIGNvbW1pdCBpcyAiCisJCQkJImJldHdlZW4gJXMgYW5kIFslc10uXG4iLAorCQkJCWJhZF9oZXgsIHRlcm1fYmFkLCB0ZXJtX2dvb2QsIGJhZF9oZXgsIGdvb2RfaGV4KTsKKwkJfQorCQlleGl0KDMpOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiU29tZSAlcyByZXZzIGFyZSBub3QgYW5jZXN0b3Igb2YgdGhlICVzIHJldi5cbiIKKwkJImdpdCBiaXNlY3QgY2Fubm90IHdvcmsgcHJvcGVybHkgaW4gdGhpcyBjYXNlLlxuIgorCQkiTWF5YmUgeW91IG1pc3Rvb2sgJXMgYW5kICVzIHJldnM/XG4iLAorCQl0ZXJtX2dvb2QsIHRlcm1fYmFkLCB0ZXJtX2dvb2QsIHRlcm1fYmFkKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfc2tpcHBlZF9tZXJnZV9iYXNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1iKQoreworCWNoYXIgKm1iX2hleCA9IHNoYTFfdG9faGV4KG1iKTsKKwljaGFyICpiYWRfaGV4ID0gc2hhMV90b19oZXgoY3VycmVudF9iYWRfb2lkLT5oYXNoKTsKKwljaGFyICpnb29kX2hleCA9IGpvaW5fc2hhMV9hcnJheV9oZXgoJmdvb2RfcmV2cywgJyAnKTsKKworCXdhcm5pbmcoInRoZSBtZXJnZSBiYXNlIGJldHdlZW4gJXMgYW5kIFslc10gIgorCQkibXVzdCBiZSBza2lwcGVkLlxuIgorCQkiU28gd2UgY2Fubm90IGJlIHN1cmUgdGhlIGZpcnN0ICVzIGNvbW1pdCBpcyAiCisJCSJiZXR3ZWVuICVzIGFuZCAlcy5cbiIKKwkJIldlIGNvbnRpbnVlIGFueXdheS4iLAorCQliYWRfaGV4LCBnb29kX2hleCwgdGVybV9iYWQsIG1iX2hleCwgYmFkX2hleCk7CisJZnJlZShnb29kX2hleCk7Cit9CisKKy8qCisgKiAiY2hlY2tfbWVyZ2VfYmFzZXMiIGNoZWNrcyB0aGF0IG1lcmdlIGJhc2VzIGFyZSBub3QgImJhZCIgKG9yICJuZXciKS4KKyAqCisgKiAtIElmIG9uZSBpcyAiYmFkIiAob3IgIm5ldyIpLCBpdCBtZWFucyB0aGUgdXNlciBhc3N1bWVkIHNvbWV0aGluZyB3cm9uZworICogYW5kIHdlIG11c3QgZXhpdCB3aXRoIGEgbm9uIDAgZXJyb3IgY29kZS4KKyAqIC0gSWYgb25lIGlzICJnb29kIiAob3IgIm9sZCIpLCB0aGF0J3MgZ29vZCwgd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICogLSBJZiBvbmUgaXMgInNraXBwZWQiLCB3ZSBjYW4ndCBrbm93IGJ1dCB3ZSBzaG91bGQgd2Fybi4KKyAqIC0gSWYgd2UgZG9uJ3Qga25vdywgd2Ugc2hvdWxkIGNoZWNrIGl0IG91dCBhbmQgYXNrIHRoZSB1c2VyIHRvIHRlc3QuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX21lcmdlX2Jhc2VzKGludCBub19jaGVja291dCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdDsKKwlpbnQgcmV2X25yOworCXN0cnVjdCBjb21taXQgKipyZXYgPSBnZXRfYmFkX2FuZF9nb29kX2NvbW1pdHMoJnJldl9ucik7CisKKwlyZXN1bHQgPSBnZXRfbWVyZ2VfYmFzZXNfbWFueShyZXZbMF0sIHJldl9uciAtIDEsIHJldiArIDEpOworCisJZm9yICg7IHJlc3VsdDsgcmVzdWx0ID0gcmVzdWx0LT5uZXh0KSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm1iID0gcmVzdWx0LT5pdGVtLT5vYmplY3Quc2hhMTsKKwkJaWYgKCFoYXNoY21wKG1iLCBjdXJyZW50X2JhZF9vaWQtPmhhc2gpKSB7CisJCQloYW5kbGVfYmFkX21lcmdlX2Jhc2UoKTsKKwkJfSBlbHNlIGlmICgwIDw9IHNoYTFfYXJyYXlfbG9va3VwKCZnb29kX3JldnMsIG1iKSkgeworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoMCA8PSBzaGExX2FycmF5X2xvb2t1cCgmc2tpcHBlZF9yZXZzLCBtYikpIHsKKwkJCWhhbmRsZV9za2lwcGVkX21lcmdlX2Jhc2UobWIpOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJCaXNlY3Rpbmc6IGEgbWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZFxuIik7CisJCQlleGl0KGJpc2VjdF9jaGVja291dChtYiwgbm9fY2hlY2tvdXQpKTsKKwkJfQorCX0KKworCWZyZWUocmV2KTsKKwlmcmVlX2NvbW1pdF9saXN0KHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYW5jZXN0b3JzKGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IHBlbmRpbmdfY29weTsKKwlpbnQgcmVzOworCisJYmlzZWN0X3Jldl9zZXR1cCgmcmV2cywgcHJlZml4LCAiXiVzIiwgIiVzIiwgMCk7CisKKwkvKiBTYXZlIHBlbmRpbmcgb2JqZWN0cywgc28gdGhleSBjYW4gYmUgY2xlYW5lZCB1cCBsYXRlci4gKi8KKwlwZW5kaW5nX2NvcHkgPSByZXZzLnBlbmRpbmc7CisJcmV2cy5sZWFrX3BlbmRpbmcgPSAxOworCisJLyoKKwkgKiBiaXNlY3RfY29tbW9uIGNhbGxzIHByZXBhcmVfcmV2aXNpb25fd2FsayByaWdodCBhd2F5LCB3aGljaAorCSAqICh0b2dldGhlciB3aXRoIC5sZWFrX3BlbmRpbmcgPSAxKSBtYWtlcyB1cyB0aGUgc29sZSBvd25lciBvZgorCSAqIHRoZSBsaXN0IG9mIHBlbmRpbmcgb2JqZWN0cy4KKwkgKi8KKwliaXNlY3RfY29tbW9uKCZyZXZzKTsKKwlyZXMgPSAocmV2cy5jb21taXRzICE9IE5VTEwpOworCisJLyogQ2xlYW4gdXAgb2JqZWN0cyB1c2VkLCBhcyB0aGV5IHdpbGwgYmUgcmV1c2VkLiAqLworCWNsZWFyX2NvbW1pdF9tYXJrc19mb3Jfb2JqZWN0X2FycmF5KCZwZW5kaW5nX2NvcHksIEFMTF9SRVZfRkxBR1MpOworCWZyZWUocGVuZGluZ19jb3B5Lm9iamVjdHMpOworCisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqICJjaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkIiBjaGVja3MgdGhhdCBhbGwgImdvb2QiIHJldnMgYXJlCisgKiBhbmNlc3RvciBvZiB0aGUgImJhZCIgcmV2LgorICoKKyAqIElmIHRoYXQncyBub3QgdGhlIGNhc2UsIHdlIG5lZWQgdG8gY2hlY2sgdGhlIG1lcmdlIGJhc2VzLgorICogSWYgYSBtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIGJ5IHRoZSB1c2VyLCBpdHMgc291cmNlIGNvZGUgd2lsbCBiZQorICogY2hlY2tlZCBvdXQgdG8gYmUgdGVzdGVkIGJ5IHRoZSB1c2VyIGFuZCB3ZSB3aWxsIGV4aXQuCisgKi8KK3N0YXRpYyB2b2lkIGNoZWNrX2dvb2RfYXJlX2FuY2VzdG9yc19vZl9iYWQoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbm9fY2hlY2tvdXQpCit7CisJY2hhciAqZmlsZW5hbWUgPSBnaXRfcGF0aGR1cCgiQklTRUNUX0FOQ0VTVE9SU19PSyIpOworCXN0cnVjdCBzdGF0IHN0OworCWludCBmZDsKKworCWlmICghY3VycmVudF9iYWRfb2lkKQorCQlkaWUoImEgJXMgcmV2aXNpb24gaXMgbmVlZGVkIiwgdGVybV9iYWQpOworCisJLyogQ2hlY2sgaWYgZmlsZSBCSVNFQ1RfQU5DRVNUT1JTX09LIGV4aXN0cy4gKi8KKwlpZiAoIXN0YXQoZmlsZW5hbWUsICZzdCkgJiYgU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJZ290byBkb25lOworCisJLyogQmlzZWN0aW5nIHdpdGggbm8gZ29vZCByZXYgaXMgb2suICovCisJaWYgKGdvb2RfcmV2cy5uciA9PSAwKQorCQlnb3RvIGRvbmU7CisKKwkvKiBDaGVjayBpZiBhbGwgZ29vZCByZXZzIGFyZSBhbmNlc3RvciBvZiB0aGUgYmFkIHJldi4gKi8KKwlpZiAoY2hlY2tfYW5jZXN0b3JzKHByZWZpeCkpCisJCWNoZWNrX21lcmdlX2Jhc2VzKG5vX2NoZWNrb3V0KTsKKworCS8qIENyZWF0ZSBmaWxlIEJJU0VDVF9BTkNFU1RPUlNfT0suICovCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZLCAwNjAwKTsKKwlpZiAoZmQgPCAwKQorCQl3YXJuaW5nKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJzogJXMiLAorCQkJZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJZWxzZQorCQljbG9zZShmZCk7CisgZG9uZToKKwlmcmVlKGZpbGVuYW1lKTsKK30KKworLyoKKyAqIFRoaXMgZG9lcyAiZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSBDT01NSVQiIHdpdGhvdXQgb25lIGZvcmsrZXhlYy4KKyAqLworc3RhdGljIHZvaWQgc2hvd19kaWZmX3RyZWUoY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IHJldl9pbmZvIG9wdDsKKworCS8qIGRpZmYtdHJlZSBpbml0ICovCisJaW5pdF9yZXZpc2lvbnMoJm9wdCwgcHJlZml4KTsKKwlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCisJb3B0LmFiYnJldiA9IDA7CisJb3B0LmRpZmYgPSAxOworCisJLyogVGhpcyBpcyB3aGF0ICItLXByZXR0eSIgZG9lcyAqLworCW9wdC52ZXJib3NlX2hlYWRlciA9IDE7CisJb3B0LnVzZV90ZXJtaW5hdG9yID0gMDsKKwlvcHQuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX0RFRkFVTFQ7CisKKwkvKiBkaWZmLXRyZWUgaW5pdCAqLworCWlmICghb3B0LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJb3B0LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1JBVzsKKworCWxvZ190cmVlX2NvbW1pdCgmb3B0LCBjb21taXQpOworfQorCisvKgorICogVGhlIHRlcm1zIHVzZWQgZm9yIHRoaXMgYmlzZWN0IHNlc3Npb24gYXJlIHN0b3JlZCBpbiBCSVNFQ1RfVEVSTVMuCisgKiBXZSByZWFkIHRoZW0gYW5kIHN0b3JlIHRoZW0gdG8gYWRhcHQgdGhlIG1lc3NhZ2VzIGFjY29yZGluZ2x5LgorICogRGVmYXVsdCBpcyBiYWQvZ29vZC4KKyAqLwordm9pZCByZWFkX2Jpc2VjdF90ZXJtcyhjb25zdCBjaGFyICoqcmVhZF9iYWQsIGNvbnN0IGNoYXIgKipyZWFkX2dvb2QpCit7CisJc3RydWN0IHN0cmJ1ZiBzdHIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJCSVNFQ1RfVEVSTVMiKTsKKwlGSUxFICpmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCisJaWYgKCFmcCkgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJCQkqcmVhZF9iYWQgPSAiYmFkIjsKKwkJCSpyZWFkX2dvb2QgPSAiZ29vZCI7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQlkaWUoImNvdWxkIG5vdCByZWFkIGZpbGUgJyVzJzogJXMiLCBmaWxlbmFtZSwKKwkJCQlzdHJlcnJvcihlcnJubykpOworCQl9CisJfSBlbHNlIHsKKwkJc3RyYnVmX2dldGxpbmUoJnN0ciwgZnAsICdcbicpOworCQkqcmVhZF9iYWQgPSBzdHJidWZfZGV0YWNoKCZzdHIsIE5VTEwpOworCQlzdHJidWZfZ2V0bGluZSgmc3RyLCBmcCwgJ1xuJyk7CisJCSpyZWFkX2dvb2QgPSBzdHJidWZfZGV0YWNoKCZzdHIsIE5VTEwpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc3RyKTsKKwlmY2xvc2UoZnApOworfQorCisvKgorICogV2UgdXNlIHRoZSBjb252ZW50aW9uIHRoYXQgZXhpdGluZyB3aXRoIGFuIGV4aXQgY29kZSAxMCBtZWFucyB0aGF0CisgKiB0aGUgYmlzZWN0aW9uIHByb2Nlc3MgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LgorICogSW4gdGhpcyBjYXNlIHRoZSBjYWxsaW5nIHNoZWxsIHNjcmlwdCBzaG91bGQgZXhpdCAwLgorICoKKyAqIElmIG5vX2NoZWNrb3V0IGlzIG5vbi16ZXJvLCB0aGUgYmlzZWN0aW9uIHByb2Nlc3MgZG9lcyBub3QKKyAqIGNoZWNrb3V0IHRoZSB0cmlhbCBjb21taXQgYnV0IGluc3RlYWQgc2ltcGx5IHVwZGF0ZXMgQklTRUNUX0hFQUQuCisgKi8KK2ludCBiaXNlY3RfbmV4dF9hbGwoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbm9fY2hlY2tvdXQpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IGNvbW1pdF9saXN0ICp0cmllZDsKKwlpbnQgcmVhY2hlcyA9IDAsIGFsbCA9IDAsIG5yLCBzdGVwczsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpiaXNlY3RfcmV2OworCisJcmVhZF9iaXNlY3RfdGVybXMoJnRlcm1fYmFkLCAmdGVybV9nb29kKTsKKwlpZiAocmVhZF9iaXNlY3RfcmVmcygpKQorCQlkaWUoInJlYWRpbmcgYmlzZWN0IHJlZnMgZmFpbGVkIik7CisKKwljaGVja19nb29kX2FyZV9hbmNlc3RvcnNfb2ZfYmFkKHByZWZpeCwgbm9fY2hlY2tvdXQpOworCisJYmlzZWN0X3Jldl9zZXR1cCgmcmV2cywgcHJlZml4LCAiJXMiLCAiXiVzIiwgMSk7CisJcmV2cy5saW1pdGVkID0gMTsKKworCWJpc2VjdF9jb21tb24oJnJldnMpOworCisJcmV2cy5jb21taXRzID0gZmluZF9iaXNlY3Rpb24ocmV2cy5jb21taXRzLCAmcmVhY2hlcywgJmFsbCwKKwkJCQkgICAgICAgISFza2lwcGVkX3JldnMubnIpOworCXJldnMuY29tbWl0cyA9IG1hbmFnZWRfc2tpcHBlZChyZXZzLmNvbW1pdHMsICZ0cmllZCk7CisKKwlpZiAoIXJldnMuY29tbWl0cykgeworCQkvKgorCQkgKiBXZSBzaG91bGQgZXhpdCBoZXJlIG9ubHkgaWYgdGhlICJiYWQiCisJCSAqIGNvbW1pdCBpcyBhbHNvIGEgInNraXAiIGNvbW1pdC4KKwkJICovCisJCWV4aXRfaWZfc2tpcHBlZF9jb21taXRzKHRyaWVkLCBOVUxMKTsKKworCQlwcmludGYoIiVzIHdhcyBib3RoICVzIGFuZCAlc1xuIiwKKwkJICAgICAgIG9pZF90b19oZXgoY3VycmVudF9iYWRfb2lkKSwKKwkJICAgICAgIHRlcm1fZ29vZCwKKwkJICAgICAgIHRlcm1fYmFkKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpZiAoIWFsbCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHRlc3RhYmxlIGNvbW1pdCBmb3VuZC5cbiIKKwkJCSJNYXliZSB5b3Ugc3RhcnRlZCB3aXRoIGJhZCBwYXRoIHBhcmFtZXRlcnM/XG4iKTsKKwkJZXhpdCg0KTsKKwl9CisKKwliaXNlY3RfcmV2ID0gcmV2cy5jb21taXRzLT5pdGVtLT5vYmplY3Quc2hhMTsKKworCWlmICghaGFzaGNtcChiaXNlY3RfcmV2LCBjdXJyZW50X2JhZF9vaWQtPmhhc2gpKSB7CisJCWV4aXRfaWZfc2tpcHBlZF9jb21taXRzKHRyaWVkLCBjdXJyZW50X2JhZF9vaWQpOworCQlwcmludGYoIiVzIGlzIHRoZSBmaXJzdCAlcyBjb21taXRcbiIsIHNoYTFfdG9faGV4KGJpc2VjdF9yZXYpLAorCQkJdGVybV9iYWQpOworCQlzaG93X2RpZmZfdHJlZShwcmVmaXgsIHJldnMuY29tbWl0cy0+aXRlbSk7CisJCS8qIFRoaXMgbWVhbnMgdGhlIGJpc2VjdGlvbiBwcm9jZXNzIHN1Y2NlZWRlZC4gKi8KKwkJZXhpdCgxMCk7CisJfQorCisJbnIgPSBhbGwgLSByZWFjaGVzIC0gMTsKKwlzdGVwcyA9IGVzdGltYXRlX2Jpc2VjdF9zdGVwcyhhbGwpOworCXByaW50ZigiQmlzZWN0aW5nOiAlZCByZXZpc2lvbiVzIGxlZnQgdG8gdGVzdCBhZnRlciB0aGlzICIKKwkgICAgICAgIihyb3VnaGx5ICVkIHN0ZXAlcylcbiIsIG5yLCAobnIgPT0gMSA/ICIiIDogInMiKSwKKwkgICAgICAgc3RlcHMsIChzdGVwcyA9PSAxID8gIiIgOiAicyIpKTsKKworCXJldHVybiBiaXNlY3RfY2hlY2tvdXQoYmlzZWN0X3Jldiwgbm9fY2hlY2tvdXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2cyaShpbnQgbikKK3sKKwlpbnQgbG9nMiA9IDA7CisKKwlmb3IgKDsgbiA+IDE7IG4gPj49IDEpCisJCWxvZzIrKzsKKworCXJldHVybiBsb2cyOworfQorCitzdGF0aWMgaW5saW5lIGludCBleHAyaShpbnQgbikKK3sKKwlyZXR1cm4gMSA8PCBuOworfQorCisvKgorICogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBiaXNlY3Qgc3RlcHMgbGVmdCAoYWZ0ZXIgdGhlIGN1cnJlbnQgc3RlcCkKKyAqCisgKiBGb3IgYW55IHggYmV0d2VlbiAwIGluY2x1ZGVkIGFuZCAyXm4gZXhjbHVkZWQsIHRoZSBwcm9iYWJpbGl0eSBmb3IKKyAqIG4gLSAxIHN0ZXBzIGxlZnQgbG9va3MgbGlrZToKKyAqCisgKiBQKDJebiArIHgpID09ICgyXm4gLSB4KSAvICgyXm4gKyB4KQorICoKKyAqIGFuZCBQKDJebiArIHgpIDwgMC41IG1lYW5zIDJebiA8IDN4CisgKi8KK2ludCBlc3RpbWF0ZV9iaXNlY3Rfc3RlcHMoaW50IGFsbCkKK3sKKwlpbnQgbiwgeCwgZTsKKworCWlmIChhbGwgPCAzKQorCQlyZXR1cm4gMDsKKworCW4gPSBsb2cyaShhbGwpOworCWUgPSBleHAyaShuKTsKKwl4ID0gYWxsIC0gZTsKKworCXJldHVybiAoZSA8IDMgKiB4KSA/IG4gOiBuIC0gMTsKK30KZGlmZiAtLWdpdCBhL2Jpc2VjdC5oIGIvYmlzZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNkMTJlZgotLS0gL2Rldi9udWxsCisrKyBiL2Jpc2VjdC5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgQklTRUNUX0gKKyNkZWZpbmUgQklTRUNUX0gKKworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZmluZF9iaXNlY3Rpb24oc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCQkgIGludCAqcmVhY2hlcywgaW50ICphbGwsCisJCQkJCSAgaW50IGZpbmRfYWxsKTsKKworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZmlsdGVyX3NraXBwZWQoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJCQkgIHN0cnVjdCBjb21taXRfbGlzdCAqKnRyaWVkLAorCQkJCQkgIGludCBzaG93X2FsbCwKKwkJCQkJICBpbnQgKmNvdW50LAorCQkJCQkgIGludCAqc2tpcHBlZF9maXJzdCk7CisKKyNkZWZpbmUgQklTRUNUX1NIT1dfQUxMCQkoMTw8MCkKKyNkZWZpbmUgUkVWX0xJU1RfUVVJRVQJCSgxPDwxKQorCitzdHJ1Y3QgcmV2X2xpc3RfaW5mbyB7CisJc3RydWN0IHJldl9pbmZvICpyZXZzOworCWludCBmbGFnczsKKwlpbnQgc2hvd190aW1lc3RhbXA7CisJaW50IGhkcl90ZXJtaW5hdGlvbjsKKwljb25zdCBjaGFyICpoZWFkZXJfcHJlZml4OworfTsKKworZXh0ZXJuIGludCBiaXNlY3RfbmV4dF9hbGwoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbm9fY2hlY2tvdXQpOworCitleHRlcm4gaW50IGVzdGltYXRlX2Jpc2VjdF9zdGVwcyhpbnQgYWxsKTsKKworZXh0ZXJuIHZvaWQgcmVhZF9iaXNlY3RfdGVybXMoY29uc3QgY2hhciAqKmJhZCwgY29uc3QgY2hhciAqKmdvb2QpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Jsb2IuYyBiL2Jsb2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmNiOGU0Ci0tLSAvZGV2L251bGwKKysrIGIvYmxvYi5jCkBAIC0wLDAgKzEsMTggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKworY29uc3QgY2hhciAqYmxvYl90eXBlID0gImJsb2IiOworCitzdHJ1Y3QgYmxvYiAqbG9va3VwX2Jsb2IoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlyZXR1cm4gY3JlYXRlX29iamVjdChzaGExLCBhbGxvY19ibG9iX25vZGUoKSk7CisJcmV0dXJuIG9iamVjdF9hc190eXBlKG9iaiwgT0JKX0JMT0IsIDApOworfQorCitpbnQgcGFyc2VfYmxvYl9idWZmZXIoc3RydWN0IGJsb2IgKml0ZW0sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWl0ZW0tPm9iamVjdC5wYXJzZWQgPSAxOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYmxvYi5oIGIvYmxvYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YjM5NGUKLS0tIC9kZXYvbnVsbAorKysgYi9ibG9iLmgKQEAgLTAsMCArMSwyNSBAQAorI2lmbmRlZiBCTE9CX0gKKyNkZWZpbmUgQkxPQl9ICisKKyNpbmNsdWRlICJvYmplY3QuaCIKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmJsb2JfdHlwZTsKKworc3RydWN0IGJsb2IgeworCXN0cnVjdCBvYmplY3Qgb2JqZWN0OworfTsKKworc3RydWN0IGJsb2IgKmxvb2t1cF9ibG9iKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitpbnQgcGFyc2VfYmxvYl9idWZmZXIoc3RydWN0IGJsb2IgKml0ZW0sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworLyoqCisgKiBCbG9icyBkbyBub3QgY29udGFpbiByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMgYW5kIGRvIG5vdCBoYXZlCisgKiBzdHJ1Y3R1cmVkIGRhdGEgdGhhdCBuZWVkcyBwYXJzaW5nLiBIb3dldmVyLCBjb2RlIG1heSB1c2UgdGhlCisgKiAicGFyc2VkIiBiaXQgaW4gdGhlIHN0cnVjdCBvYmplY3QgZm9yIGEgYmxvYiB0byBkZXRlcm1pbmUgd2hldGhlcgorICogaXRzIGNvbnRlbnQgaGFzIGJlZW4gZm91bmQgdG8gYWN0dWFsbHkgYmUgYXZhaWxhYmxlLCBzbworICogcGFyc2VfYmxvYl9idWZmZXIoKSBpcyB1c2VkIChieSBvYmplY3QuYykgdG8gZmxhZyB0aGF0IHRoZSBvYmplY3QKKyAqIGhhcyBiZWVuIHJlYWQgc3VjY2Vzc2Z1bGx5IGZyb20gdGhlIGRhdGFiYXNlLgorICoqLworCisjZW5kaWYgLyogQkxPQl9IICovCmRpZmYgLS1naXQgYS9ibG9jay1zaGExL3NoYTEuYyBiL2Jsb2NrLXNoYTEvc2hhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjEyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9ibG9jay1zaGExL3NoYTEuYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqIFNIQTEgcm91dGluZSBvcHRpbWl6ZWQgdG8gZG8gd29yZCBhY2Nlc3NlcyByYXRoZXIgdGhhbiBieXRlIGFjY2Vzc2VzLAorICogYW5kIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvcGllcyBpbnRvIHRoZSBjb250ZXh0IGFycmF5LgorICoKKyAqIFRoaXMgd2FzIGluaXRpYWxseSBiYXNlZCBvbiB0aGUgTW96aWxsYSBTSEExIGltcGxlbWVudGF0aW9uLCBhbHRob3VnaAorICogbm9uZSBvZiB0aGUgb3JpZ2luYWwgTW96aWxsYSBjb2RlIHJlbWFpbnMuCisgKi8KKworLyogdGhpcyBpcyBvbmx5IHRvIGdldCBkZWZpbml0aW9ucyBmb3IgbWVtY3B5KCksIG50b2hsKCkgYW5kIGh0b25sKCkgKi8KKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworI2luY2x1ZGUgInNoYTEuaCIKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorCisvKgorICogRm9yY2UgdXNhZ2Ugb2Ygcm9sIG9yIHJvciBieSBzZWxlY3RpbmcgdGhlIG9uZSB3aXRoIHRoZSBzbWFsbGVyIGNvbnN0YW50LgorICogSXQgX2Nhbl8gZ2VuZXJhdGUgc2xpZ2h0bHkgc21hbGxlciBjb2RlIChhIGNvbnN0YW50IG9mIDEgaXMgc3BlY2lhbCksIGJ1dAorICogcGVyaGFwcyBtb3JlIGltcG9ydGFudGx5IGl0J3MgcG9zc2libHkgZmFzdGVyIG9uIGFueSB1YXJjaCB0aGF0IGRvZXMgYQorICogcm90YXRlIHdpdGggYSBsb29wLgorICovCisKKyNkZWZpbmUgU0hBX0FTTShvcCwgeCwgbikgKHsgdW5zaWduZWQgaW50IF9fcmVzOyBfX2FzbV9fKG9wICIgJTEsJTAiOiI9ciIgKF9fcmVzKToiaSIgKG4pLCAiMCIgKHgpKTsgX19yZXM7IH0pCisjZGVmaW5lIFNIQV9ST0woeCxuKQlTSEFfQVNNKCJyb2wiLCB4LCBuKQorI2RlZmluZSBTSEFfUk9SKHgsbikJU0hBX0FTTSgicm9yIiwgeCwgbikKKworI2Vsc2UKKworI2RlZmluZSBTSEFfUk9UKFgsbCxyKQkoKChYKSA8PCAobCkpIHwgKChYKSA+PiAocikpKQorI2RlZmluZSBTSEFfUk9MKFgsbikJU0hBX1JPVChYLG4sMzItKG4pKQorI2RlZmluZSBTSEFfUk9SKFgsbikJU0hBX1JPVChYLDMyLShuKSxuKQorCisjZW5kaWYKKworLyoKKyAqIElmIHlvdSBoYXZlIDMyIHJlZ2lzdGVycyBvciBtb3JlLCB0aGUgY29tcGlsZXIgY2FuIChhbmQgc2hvdWxkKQorICogdHJ5IHRvIGNoYW5nZSB0aGUgYXJyYXlbXSBhY2Nlc3NlcyBpbnRvIHJlZ2lzdGVycy4gSG93ZXZlciwgb24KKyAqIG1hY2hpbmVzIHdpdGggbGVzcyB0aGFuIH4yNSByZWdpc3RlcnMsIHRoYXQgd29uJ3QgcmVhbGx5IHdvcmssCisgKiBhbmQgYXQgbGVhc3QgZ2NjIHdpbGwgbWFrZSBhbiB1bmhvbHkgbWVzcyBvZiBpdC4KKyAqCisgKiBTbyB0byBhdm9pZCB0aGF0IG1lc3Mgd2hpY2gganVzdCBzbG93cyB0aGluZ3MgZG93biwgd2UgZm9yY2UKKyAqIHRoZSBzdG9yZXMgdG8gbWVtb3J5IHRvIGFjdHVhbGx5IGhhcHBlbiAod2UgbWlnaHQgYmUgYmV0dGVyIG9mZgorICogd2l0aCBhICdXKHQpPSh2YWwpO2FzbSgiIjoiK20iIChXKHQpKScgdGhlcmUgaW5zdGVhZCwgYXMKKyAqIHN1Z2dlc3RlZCBieSBBcnR1ciBTa2F3aW5hIC0gdGhhdCB3aWxsIGFsc28gbWFrZSBnY2MgdW5hYmxlIHRvCisgKiB0cnkgdG8gZG8gdGhlIHNpbGx5ICJvcHRpbWl6ZSBhd2F5IGxvYWRzIiBwYXJ0IGJlY2F1c2UgaXQgd29uJ3QKKyAqIHNlZSB3aGF0IHRoZSB2YWx1ZSB3aWxsIGJlKS4KKyAqCisgKiBCZW4gSGVycmVuc2NobWlkdCByZXBvcnRzIHRoYXQgb24gUFBDLCB0aGUgQyB2ZXJzaW9uIGNvbWVzIGNsb3NlCisgKiB0byB0aGUgb3B0aW1pemVkIGFzbSB3aXRoIHRoaXMgKGllIG9uIFBQQyB5b3UgZG9uJ3Qgd2FudCB0aGF0CisgKiAndm9sYXRpbGUnLCBzaW5jZSB0aGVyZSBhcmUgbG90cyBvZiByZWdpc3RlcnMpLgorICoKKyAqIE9uIEFSTSB3ZSBnZXQgdGhlIGJlc3QgY29kZSBnZW5lcmF0aW9uIGJ5IGZvcmNpbmcgYSBmdWxsIG1lbW9yeSBiYXJyaWVyCisgKiBiZXR3ZWVuIGVhY2ggU0hBX1JPVU5ELCBvdGhlcndpc2UgZ2NjIGhhcHBpbHkgZ2V0IHdpbGQgd2l0aCBzcGlsbGluZyBhbmQKKyAqIHRoZSBzdGFjayBmcmFtZSBzaXplIHNpbXBseSBleHBsb2RlIGFuZCBwZXJmb3JtYW5jZSBnb2VzIGRvd24gdGhlIGRyYWluLgorICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisgICNkZWZpbmUgc2V0Vyh4LCB2YWwpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSZXKHgpID0gKHZhbCkpCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fYXJtX18pCisgICNkZWZpbmUgc2V0Vyh4LCB2YWwpIGRvIHsgVyh4KSA9ICh2YWwpOyBfX2FzbV9fKCIiOjo6Im1lbW9yeSIpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyAgI2RlZmluZSBzZXRXKHgsIHZhbCkgKFcoeCkgPSAodmFsKSkKKyNlbmRpZgorCisvKiBUaGlzICJyb2xscyIgb3ZlciB0aGUgNTEyLWJpdCBhcnJheSAqLworI2RlZmluZSBXKHgpIChhcnJheVsoeCkmMTVdKQorCisvKgorICogV2hlcmUgZG8gd2UgZ2V0IHRoZSBzb3VyY2UgZnJvbT8gVGhlIGZpcnN0IDE2IGl0ZXJhdGlvbnMgZ2V0IGl0IGZyb20KKyAqIHRoZSBpbnB1dCBkYXRhLCB0aGUgbmV4dCBtaXggaXQgZnJvbSB0aGUgNTEyLWJpdCBhcnJheS4KKyAqLworI2RlZmluZSBTSEFfU1JDKHQpIGdldF9iZTMyKCh1bnNpZ25lZCBjaGFyICopIGJsb2NrICsgKHQpKjQpCisjZGVmaW5lIFNIQV9NSVgodCkgU0hBX1JPTChXKCh0KSsxMykgXiBXKCh0KSs4KSBeIFcoKHQpKzIpIF4gVyh0KSwgMSk7CisKKyNkZWZpbmUgU0hBX1JPVU5EKHQsIGlucHV0LCBmbiwgY29uc3RhbnQsIEEsIEIsIEMsIEQsIEUpIGRvIHsgXAorCXVuc2lnbmVkIGludCBURU1QID0gaW5wdXQodCk7IHNldFcodCwgVEVNUCk7IFwKKwlFICs9IFRFTVAgKyBTSEFfUk9MKEEsNSkgKyAoZm4pICsgKGNvbnN0YW50KTsgXAorCUIgPSBTSEFfUk9SKEIsIDIpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFRfMF8xNSh0LCBBLCBCLCBDLCBELCBFKSAgU0hBX1JPVU5EKHQsIFNIQV9TUkMsICgoKENeRCkmQileRCkgLCAweDVhODI3OTk5LCBBLCBCLCBDLCBELCBFICkKKyNkZWZpbmUgVF8xNl8xOSh0LCBBLCBCLCBDLCBELCBFKSBTSEFfUk9VTkQodCwgU0hBX01JWCwgKCgoQ15EKSZCKV5EKSAsIDB4NWE4Mjc5OTksIEEsIEIsIEMsIEQsIEUgKQorI2RlZmluZSBUXzIwXzM5KHQsIEEsIEIsIEMsIEQsIEUpIFNIQV9ST1VORCh0LCBTSEFfTUlYLCAoQl5DXkQpICwgMHg2ZWQ5ZWJhMSwgQSwgQiwgQywgRCwgRSApCisjZGVmaW5lIFRfNDBfNTkodCwgQSwgQiwgQywgRCwgRSkgU0hBX1JPVU5EKHQsIFNIQV9NSVgsICgoQiZDKSsoRCYoQl5DKSkpICwgMHg4ZjFiYmNkYywgQSwgQiwgQywgRCwgRSApCisjZGVmaW5lIFRfNjBfNzkodCwgQSwgQiwgQywgRCwgRSkgU0hBX1JPVU5EKHQsIFNIQV9NSVgsIChCXkNeRCkgLCAgMHhjYTYyYzFkNiwgQSwgQiwgQywgRCwgRSApCisKK3N0YXRpYyB2b2lkIGJsa19TSEExX0Jsb2NrKGJsa19TSEFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmJsb2NrKQoreworCXVuc2lnbmVkIGludCBBLEIsQyxELEU7CisJdW5zaWduZWQgaW50IGFycmF5WzE2XTsKKworCUEgPSBjdHgtPkhbMF07CisJQiA9IGN0eC0+SFsxXTsKKwlDID0gY3R4LT5IWzJdOworCUQgPSBjdHgtPkhbM107CisJRSA9IGN0eC0+SFs0XTsKKworCS8qIFJvdW5kIDEgLSBpdGVyYXRpb25zIDAtMTYgdGFrZSB0aGVpciBpbnB1dCBmcm9tICdibG9jaycgKi8KKwlUXzBfMTUoIDAsIEEsIEIsIEMsIEQsIEUpOworCVRfMF8xNSggMSwgRSwgQSwgQiwgQywgRCk7CisJVF8wXzE1KCAyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzBfMTUoIDMsIEMsIEQsIEUsIEEsIEIpOworCVRfMF8xNSggNCwgQiwgQywgRCwgRSwgQSk7CisJVF8wXzE1KCA1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzBfMTUoIDYsIEUsIEEsIEIsIEMsIEQpOworCVRfMF8xNSggNywgRCwgRSwgQSwgQiwgQyk7CisJVF8wXzE1KCA4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzBfMTUoIDksIEIsIEMsIEQsIEUsIEEpOworCVRfMF8xNSgxMCwgQSwgQiwgQywgRCwgRSk7CisJVF8wXzE1KDExLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzBfMTUoMTIsIEQsIEUsIEEsIEIsIEMpOworCVRfMF8xNSgxMywgQywgRCwgRSwgQSwgQik7CisJVF8wXzE1KDE0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzBfMTUoMTUsIEEsIEIsIEMsIEQsIEUpOworCisJLyogUm91bmQgMSAtIHRhaWwuIElucHV0IGZyb20gNTEyLWJpdCBtaXhpbmcgYXJyYXkgKi8KKwlUXzE2XzE5KDE2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzE2XzE5KDE3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzE2XzE5KDE4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzE2XzE5KDE5LCBCLCBDLCBELCBFLCBBKTsKKworCS8qIFJvdW5kIDIgKi8KKwlUXzIwXzM5KDIwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDIxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDIyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDIzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDI0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzIwXzM5KDI1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDI2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDI3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDI4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDI5LCBCLCBDLCBELCBFLCBBKTsKKwlUXzIwXzM5KDMwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDMxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDMyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDMzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDM0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzIwXzM5KDM1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzIwXzM5KDM2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzIwXzM5KDM3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzIwXzM5KDM4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzIwXzM5KDM5LCBCLCBDLCBELCBFLCBBKTsKKworCS8qIFJvdW5kIDMgKi8KKwlUXzQwXzU5KDQwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDQxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDQyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDQzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDQ0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDQ1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDQ2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDQ3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDQ4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDQ5LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDUwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDUxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDUyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDUzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDU0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzQwXzU5KDU1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzQwXzU5KDU2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzQwXzU5KDU3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzQwXzU5KDU4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzQwXzU5KDU5LCBCLCBDLCBELCBFLCBBKTsKKworCS8qIFJvdW5kIDQgKi8KKwlUXzYwXzc5KDYwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDYxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDYyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDYzLCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDY0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzYwXzc5KDY1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDY2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDY3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDY4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDY5LCBCLCBDLCBELCBFLCBBKTsKKwlUXzYwXzc5KDcwLCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDcxLCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDcyLCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDczLCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDc0LCBCLCBDLCBELCBFLCBBKTsKKwlUXzYwXzc5KDc1LCBBLCBCLCBDLCBELCBFKTsKKwlUXzYwXzc5KDc2LCBFLCBBLCBCLCBDLCBEKTsKKwlUXzYwXzc5KDc3LCBELCBFLCBBLCBCLCBDKTsKKwlUXzYwXzc5KDc4LCBDLCBELCBFLCBBLCBCKTsKKwlUXzYwXzc5KDc5LCBCLCBDLCBELCBFLCBBKTsKKworCWN0eC0+SFswXSArPSBBOworCWN0eC0+SFsxXSArPSBCOworCWN0eC0+SFsyXSArPSBDOworCWN0eC0+SFszXSArPSBEOworCWN0eC0+SFs0XSArPSBFOworfQorCit2b2lkIGJsa19TSEExX0luaXQoYmxrX1NIQV9DVFggKmN0eCkKK3sKKwljdHgtPnNpemUgPSAwOworCisJLyogSW5pdGlhbGl6ZSBIIHdpdGggdGhlIG1hZ2ljIGNvbnN0YW50cyAoc2VlIEZJUFMxODAgZm9yIGNvbnN0YW50cykgKi8KKwljdHgtPkhbMF0gPSAweDY3NDUyMzAxOworCWN0eC0+SFsxXSA9IDB4ZWZjZGFiODk7CisJY3R4LT5IWzJdID0gMHg5OGJhZGNmZTsKKwljdHgtPkhbM10gPSAweDEwMzI1NDc2OworCWN0eC0+SFs0XSA9IDB4YzNkMmUxZjA7Cit9CisKK3ZvaWQgYmxrX1NIQTFfVXBkYXRlKGJsa19TSEFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXVuc2lnbmVkIGludCBsZW5XID0gY3R4LT5zaXplICYgNjM7CisKKwljdHgtPnNpemUgKz0gbGVuOworCisJLyogUmVhZCB0aGUgZGF0YSBpbnRvIFcgYW5kIHByb2Nlc3MgYmxvY2tzIGFzIHRoZXkgZ2V0IGZ1bGwgKi8KKwlpZiAobGVuVykgeworCQl1bnNpZ25lZCBpbnQgbGVmdCA9IDY0IC0gbGVuVzsKKwkJaWYgKGxlbiA8IGxlZnQpCisJCQlsZWZ0ID0gbGVuOworCQltZW1jcHkobGVuVyArIChjaGFyICopY3R4LT5XLCBkYXRhLCBsZWZ0KTsKKwkJbGVuVyA9IChsZW5XICsgbGVmdCkgJiA2MzsKKwkJbGVuIC09IGxlZnQ7CisJCWRhdGEgPSAoKGNvbnN0IGNoYXIgKilkYXRhICsgbGVmdCk7CisJCWlmIChsZW5XKQorCQkJcmV0dXJuOworCQlibGtfU0hBMV9CbG9jayhjdHgsIGN0eC0+Vyk7CisJfQorCXdoaWxlIChsZW4gPj0gNjQpIHsKKwkJYmxrX1NIQTFfQmxvY2soY3R4LCBkYXRhKTsKKwkJZGF0YSA9ICgoY29uc3QgY2hhciAqKWRhdGEgKyA2NCk7CisJCWxlbiAtPSA2NDsKKwl9CisJaWYgKGxlbikKKwkJbWVtY3B5KGN0eC0+VywgZGF0YSwgbGVuKTsKK30KKwordm9pZCBibGtfU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyIGhhc2hvdXRbMjBdLCBibGtfU0hBX0NUWCAqY3R4KQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhZFs2NF0gPSB7IDB4ODAgfTsKKwl1bnNpZ25lZCBpbnQgcGFkbGVuWzJdOworCWludCBpOworCisJLyogUGFkIHdpdGggYSBiaW5hcnkgMSAoaWUgMHg4MCksIHRoZW4gemVyb2VzLCB0aGVuIGxlbmd0aCAqLworCXBhZGxlblswXSA9IGh0b25sKCh1aW50MzJfdCkoY3R4LT5zaXplID4+IDI5KSk7CisJcGFkbGVuWzFdID0gaHRvbmwoKHVpbnQzMl90KShjdHgtPnNpemUgPDwgMykpOworCisJaSA9IGN0eC0+c2l6ZSAmIDYzOworCWJsa19TSEExX1VwZGF0ZShjdHgsIHBhZCwgMSArICg2MyAmICg1NSAtIGkpKSk7CisJYmxrX1NIQTFfVXBkYXRlKGN0eCwgcGFkbGVuLCA4KTsKKworCS8qIE91dHB1dCBoYXNoICovCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJcHV0X2JlMzIoaGFzaG91dCArIGkgKiA0LCBjdHgtPkhbaV0pOworfQpkaWZmIC0tZ2l0IGEvYmxvY2stc2hhMS9zaGExLmggYi9ibG9jay1zaGExL3NoYTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODY0ZGY2Ci0tLSAvZGV2L251bGwKKysrIGIvYmxvY2stc2hhMS9zaGExLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIFNIQTEgcm91dGluZSBvcHRpbWl6ZWQgdG8gZG8gd29yZCBhY2Nlc3NlcyByYXRoZXIgdGhhbiBieXRlIGFjY2Vzc2VzLAorICogYW5kIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGNvcGllcyBpbnRvIHRoZSBjb250ZXh0IGFycmF5LgorICoKKyAqIFRoaXMgd2FzIGluaXRpYWxseSBiYXNlZCBvbiB0aGUgTW96aWxsYSBTSEExIGltcGxlbWVudGF0aW9uLCBhbHRob3VnaAorICogbm9uZSBvZiB0aGUgb3JpZ2luYWwgTW96aWxsYSBjb2RlIHJlbWFpbnMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOworCXVuc2lnbmVkIGludCBIWzVdOworCXVuc2lnbmVkIGludCBXWzE2XTsKK30gYmxrX1NIQV9DVFg7CisKK3ZvaWQgYmxrX1NIQTFfSW5pdChibGtfU0hBX0NUWCAqY3R4KTsKK3ZvaWQgYmxrX1NIQTFfVXBkYXRlKGJsa19TSEFfQ1RYICpjdHgsIGNvbnN0IHZvaWQgKmRhdGFJbiwgdW5zaWduZWQgbG9uZyBsZW4pOwordm9pZCBibGtfU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyIGhhc2hvdXRbMjBdLCBibGtfU0hBX0NUWCAqY3R4KTsKKworI2RlZmluZSBnaXRfU0hBX0NUWAlibGtfU0hBX0NUWAorI2RlZmluZSBnaXRfU0hBMV9Jbml0CWJsa19TSEExX0luaXQKKyNkZWZpbmUgZ2l0X1NIQTFfVXBkYXRlCWJsa19TSEExX1VwZGF0ZQorI2RlZmluZSBnaXRfU0hBMV9GaW5hbAlibGtfU0hBMV9GaW5hbApkaWZmIC0tZ2l0IGEvYnJhbmNoLmMgYi9icmFuY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Q3ZjJhCi0tLSAvZGV2L251bGwKKysrIGIvYnJhbmNoLmMKQEAgLTAsMCArMSwzMjQgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorCitzdHJ1Y3QgdHJhY2tpbmcgeworCXN0cnVjdCByZWZzcGVjIHNwZWM7CisJY2hhciAqc3JjOworCWNvbnN0IGNoYXIgKnJlbW90ZTsKKwlpbnQgbWF0Y2hlczsKK307CisKK3N0YXRpYyBpbnQgZmluZF90cmFja2VkX2JyYW5jaChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHRyYWNraW5nICp0cmFja2luZyA9IHByaXY7CisKKwlpZiAoIXJlbW90ZV9maW5kX3RyYWNraW5nKHJlbW90ZSwgJnRyYWNraW5nLT5zcGVjKSkgeworCQlpZiAoKyt0cmFja2luZy0+bWF0Y2hlcyA9PSAxKSB7CisJCQl0cmFja2luZy0+c3JjID0gdHJhY2tpbmctPnNwZWMuc3JjOworCQkJdHJhY2tpbmctPnJlbW90ZSA9IHJlbW90ZS0+bmFtZTsKKwkJfSBlbHNlIHsKKwkJCWZyZWUodHJhY2tpbmctPnNwZWMuc3JjKTsKKwkJCWlmICh0cmFja2luZy0+c3JjKSB7CisJCQkJZnJlZSh0cmFja2luZy0+c3JjKTsKKwkJCQl0cmFja2luZy0+c3JjID0gTlVMTDsKKwkJCX0KKwkJfQorCQl0cmFja2luZy0+c3BlYy5zcmMgPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3VsZF9zZXR1cF9yZWJhc2UoY29uc3QgY2hhciAqb3JpZ2luKQoreworCXN3aXRjaCAoYXV0b3JlYmFzZSkgeworCWNhc2UgQVVUT1JFQkFTRV9ORVZFUjoKKwkJcmV0dXJuIDA7CisJY2FzZSBBVVRPUkVCQVNFX0xPQ0FMOgorCQlyZXR1cm4gb3JpZ2luID09IE5VTEw7CisJY2FzZSBBVVRPUkVCQVNFX1JFTU9URToKKwkJcmV0dXJuIG9yaWdpbiAhPSBOVUxMOworCWNhc2UgQVVUT1JFQkFTRV9BTFdBWVM6CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBpbnN0YWxsX2JyYW5jaF9jb25maWcoaW50IGZsYWcsIGNvbnN0IGNoYXIgKmxvY2FsLCBjb25zdCBjaGFyICpvcmlnaW4sIGNvbnN0IGNoYXIgKnJlbW90ZSkKK3sKKwljb25zdCBjaGFyICpzaG9ydG5hbWUgPSBOVUxMOworCXN0cnVjdCBzdHJidWYga2V5ID0gU1RSQlVGX0lOSVQ7CisJaW50IHJlYmFzaW5nID0gc2hvdWxkX3NldHVwX3JlYmFzZShvcmlnaW4pOworCisJaWYgKHNraXBfcHJlZml4KHJlbW90ZSwgInJlZnMvaGVhZHMvIiwgJnNob3J0bmFtZSkKKwkgICAgJiYgIXN0cmNtcChsb2NhbCwgc2hvcnRuYW1lKQorCSAgICAmJiAhb3JpZ2luKSB7CisJCXdhcm5pbmcoXygiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIiksCisJCQlsb2NhbCk7CisJCXJldHVybjsKKwl9CisKKwlzdHJidWZfYWRkZigma2V5LCAiYnJhbmNoLiVzLnJlbW90ZSIsIGxvY2FsKTsKKwlnaXRfY29uZmlnX3NldChrZXkuYnVmLCBvcmlnaW4gPyBvcmlnaW4gOiAiLiIpOworCisJc3RyYnVmX3Jlc2V0KCZrZXkpOworCXN0cmJ1Zl9hZGRmKCZrZXksICJicmFuY2guJXMubWVyZ2UiLCBsb2NhbCk7CisJZ2l0X2NvbmZpZ19zZXQoa2V5LmJ1ZiwgcmVtb3RlKTsKKworCWlmIChyZWJhc2luZykgeworCQlzdHJidWZfcmVzZXQoJmtleSk7CisJCXN0cmJ1Zl9hZGRmKCZrZXksICJicmFuY2guJXMucmViYXNlIiwgbG9jYWwpOworCQlnaXRfY29uZmlnX3NldChrZXkuYnVmLCAidHJ1ZSIpOworCX0KKwlzdHJidWZfcmVsZWFzZSgma2V5KTsKKworCWlmIChmbGFnICYgQlJBTkNIX0NPTkZJR19WRVJCT1NFKSB7CisJCWlmIChzaG9ydG5hbWUpIHsKKwkJCWlmIChvcmlnaW4pCisJCQkJcHJpbnRmX2xuKHJlYmFzaW5nID8KKwkJCQkJICBfKCJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJXMgZnJvbSAlcyBieSByZWJhc2luZy4iKSA6CisJCQkJCSAgXygiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMuIiksCisJCQkJCSAgbG9jYWwsIHNob3J0bmFtZSwgb3JpZ2luKTsKKwkJCWVsc2UKKwkJCQlwcmludGZfbG4ocmViYXNpbmcgPworCQkJCQkgIF8oIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICVzIGJ5IHJlYmFzaW5nLiIpIDoKKwkJCQkJICBfKCJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAlcy4iKSwKKwkJCQkJICBsb2NhbCwgc2hvcnRuYW1lKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChvcmlnaW4pCisJCQkJcHJpbnRmX2xuKHJlYmFzaW5nID8KKwkJCQkJICBfKCJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJXMgYnkgcmViYXNpbmcuIikgOgorCQkJCQkgIF8oIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAlcy4iKSwKKwkJCQkJICBsb2NhbCwgcmVtb3RlKTsKKwkJCWVsc2UKKwkJCQlwcmludGZfbG4ocmViYXNpbmcgPworCQkJCQkgIF8oIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICVzIGJ5IHJlYmFzaW5nLiIpIDoKKwkJCQkJICBfKCJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcy4iKSwKKwkJCQkJICBsb2NhbCwgcmVtb3RlKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gbmV3X3JlZiBpcyBicmFuY2hlZCBvZmYgb2Ygb3JpZ19yZWYsIGFuZCB0cmllcworICogdG8gaW5mZXIgdGhlIHNldHRpbmdzIGZvciBicmFuY2guPG5ld19yZWY+LntyZW1vdGUsbWVyZ2V9IGZyb20gdGhlCisgKiBjb25maWcuCisgKi8KK3N0YXRpYyBpbnQgc2V0dXBfdHJhY2tpbmcoY29uc3QgY2hhciAqbmV3X3JlZiwgY29uc3QgY2hhciAqb3JpZ19yZWYsCisJCQkgIGVudW0gYnJhbmNoX3RyYWNrIHRyYWNrLCBpbnQgcXVpZXQpCit7CisJc3RydWN0IHRyYWNraW5nIHRyYWNraW5nOworCWludCBjb25maWdfZmxhZ3MgPSBxdWlldCA/IDAgOiBCUkFOQ0hfQ09ORklHX1ZFUkJPU0U7CisKKwltZW1zZXQoJnRyYWNraW5nLCAwLCBzaXplb2YodHJhY2tpbmcpKTsKKwl0cmFja2luZy5zcGVjLmRzdCA9IChjaGFyICopb3JpZ19yZWY7CisJaWYgKGZvcl9lYWNoX3JlbW90ZShmaW5kX3RyYWNrZWRfYnJhbmNoLCAmdHJhY2tpbmcpKQorCQlyZXR1cm4gMTsKKworCWlmICghdHJhY2tpbmcubWF0Y2hlcykKKwkJc3dpdGNoICh0cmFjaykgeworCQljYXNlIEJSQU5DSF9UUkFDS19BTFdBWVM6CisJCWNhc2UgQlJBTkNIX1RSQUNLX0VYUExJQ0lUOgorCQljYXNlIEJSQU5DSF9UUkFDS19PVkVSUklERToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDE7CisJCX0KKworCWlmICh0cmFja2luZy5tYXRjaGVzID4gMSkKKwkJcmV0dXJuIGVycm9yKF8oIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiKSwKKwkJCQlvcmlnX3JlZik7CisKKwlpbnN0YWxsX2JyYW5jaF9jb25maWcoY29uZmlnX2ZsYWdzLCBuZXdfcmVmLCB0cmFja2luZy5yZW1vdGUsCisJCQkgICAgICB0cmFja2luZy5zcmMgPyB0cmFja2luZy5zcmMgOiBvcmlnX3JlZik7CisKKwlmcmVlKHRyYWNraW5nLnNyYyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCByZWFkX2JyYW5jaF9kZXNjKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqYnJhbmNoX25hbWUpCit7CisJY2hhciAqdiA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJm5hbWUsICJicmFuY2guJXMuZGVzY3JpcHRpb24iLCBicmFuY2hfbmFtZSk7CisJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZyhuYW1lLmJ1ZiwgJnYpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfYWRkc3RyKGJ1Ziwgdik7CisJZnJlZSh2KTsKKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB2YWxpZGF0ZV9uZXdfYnJhbmNobmFtZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICpyZWYsCisJCQkgICAgaW50IGZvcmNlLCBpbnQgYXR0cl9vbmx5KQoreworCWlmIChzdHJidWZfY2hlY2tfYnJhbmNoX3JlZihyZWYsIG5hbWUpKQorCQlkaWUoXygiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iKSwgbmFtZSk7CisKKwlpZiAoIXJlZl9leGlzdHMocmVmLT5idWYpKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmICghZm9yY2UgJiYgIWF0dHJfb25seSkKKwkJZGllKF8oIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIiksIHJlZi0+YnVmICsgc3RybGVuKCJyZWZzL2hlYWRzLyIpKTsKKworCWlmICghYXR0cl9vbmx5KSB7CisJCWNvbnN0IGNoYXIgKmhlYWQ7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwkJaGVhZCA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIDAsIHNoYTEsIE5VTEwpOworCQlpZiAoIWlzX2JhcmVfcmVwb3NpdG9yeSgpICYmIGhlYWQgJiYgIXN0cmNtcChoZWFkLCByZWYtPmJ1ZikpCisJCQlkaWUoXygiQ2Fubm90IGZvcmNlIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guIikpOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjaGVja190cmFja2luZ19icmFuY2goc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpjYl9kYXRhKQoreworCWNoYXIgKnRyYWNraW5nX2JyYW5jaCA9IGNiX2RhdGE7CisJc3RydWN0IHJlZnNwZWMgcXVlcnk7CisJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHN0cnVjdCByZWZzcGVjKSk7CisJcXVlcnkuZHN0ID0gdHJhY2tpbmdfYnJhbmNoOworCXJldHVybiAhcmVtb3RlX2ZpbmRfdHJhY2tpbmcocmVtb3RlLCAmcXVlcnkpOworfQorCitzdGF0aWMgaW50IHZhbGlkYXRlX3JlbW90ZV90cmFja2luZ19icmFuY2goY2hhciAqcmVmKQoreworCXJldHVybiAhZm9yX2VhY2hfcmVtb3RlKGNoZWNrX3RyYWNraW5nX2JyYW5jaCwgcmVmKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgdXBzdHJlYW1fbm90X2JyYW5jaFtdID0KK05fKCJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIpOworc3RhdGljIGNvbnN0IGNoYXIgdXBzdHJlYW1fbWlzc2luZ1tdID0KK05fKCJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0Iik7CitzdGF0aWMgY29uc3QgY2hhciB1cHN0cmVhbV9hZHZpY2VbXSA9CitOXygiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iKTsKKwordm9pZCBjcmVhdGVfYnJhbmNoKGNvbnN0IGNoYXIgKmhlYWQsCisJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN0YXJ0X25hbWUsCisJCSAgIGludCBmb3JjZSwgaW50IHJlZmxvZywgaW50IGNsb2JiZXJfaGVhZCwKKwkJICAgaW50IHF1aWV0LCBlbnVtIGJyYW5jaF90cmFjayB0cmFjaykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyICpyZWFsX3JlZiwgbXNnW1BBVEhfTUFYICsgMjBdOworCXN0cnVjdCBzdHJidWYgcmVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGZvcmNpbmcgPSAwOworCWludCBkb250X2NoYW5nZV9yZWYgPSAwOworCWludCBleHBsaWNpdF90cmFja2luZyA9IDA7CisKKwlpZiAodHJhY2sgPT0gQlJBTkNIX1RSQUNLX0VYUExJQ0lUIHx8IHRyYWNrID09IEJSQU5DSF9UUkFDS19PVkVSUklERSkKKwkJZXhwbGljaXRfdHJhY2tpbmcgPSAxOworCisJaWYgKHZhbGlkYXRlX25ld19icmFuY2huYW1lKG5hbWUsICZyZWYsIGZvcmNlLAorCQkJCSAgICB0cmFjayA9PSBCUkFOQ0hfVFJBQ0tfT1ZFUlJJREUgfHwKKwkJCQkgICAgY2xvYmJlcl9oZWFkKSkgeworCQlpZiAoIWZvcmNlKQorCQkJZG9udF9jaGFuZ2VfcmVmID0gMTsKKwkJZWxzZQorCQkJZm9yY2luZyA9IDE7CisJfQorCisJcmVhbF9yZWYgPSBOVUxMOworCWlmIChnZXRfc2hhMShzdGFydF9uYW1lLCBzaGExKSkgeworCQlpZiAoZXhwbGljaXRfdHJhY2tpbmcpIHsKKwkJCWlmIChhZHZpY2Vfc2V0X3Vwc3RyZWFtX2ZhaWx1cmUpIHsKKwkJCQllcnJvcihfKHVwc3RyZWFtX21pc3NpbmcpLCBzdGFydF9uYW1lKTsKKwkJCQlhZHZpc2UoXyh1cHN0cmVhbV9hZHZpY2UpKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJZGllKF8odXBzdHJlYW1fbWlzc2luZyksIHN0YXJ0X25hbWUpOworCQl9CisJCWRpZShfKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iKSwgc3RhcnRfbmFtZSk7CisJfQorCisJc3dpdGNoIChkd2ltX3JlZihzdGFydF9uYW1lLCBzdHJsZW4oc3RhcnRfbmFtZSksIHNoYTEsICZyZWFsX3JlZikpIHsKKwljYXNlIDA6CisJCS8qIE5vdCBicmFuY2hpbmcgZnJvbSBhbnkgZXhpc3RpbmcgYnJhbmNoICovCisJCWlmIChleHBsaWNpdF90cmFja2luZykKKwkJCWRpZShfKHVwc3RyZWFtX25vdF9icmFuY2gpLCBzdGFydF9uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkvKiBVbmlxdWUgY29tcGxldGlvbiAtLSBnb29kLCBvbmx5IGlmIGl0IGlzIGEgcmVhbCBicmFuY2ggKi8KKwkJaWYgKCFzdGFydHNfd2l0aChyZWFsX3JlZiwgInJlZnMvaGVhZHMvIikgJiYKKwkJICAgIHZhbGlkYXRlX3JlbW90ZV90cmFja2luZ19icmFuY2gocmVhbF9yZWYpKSB7CisJCQlpZiAoZXhwbGljaXRfdHJhY2tpbmcpCisJCQkJZGllKF8odXBzdHJlYW1fbm90X2JyYW5jaCksIHN0YXJ0X25hbWUpOworCQkJZWxzZQorCQkJCXJlYWxfcmVmID0gTlVMTDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoXygiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIpLCBzdGFydF9uYW1lKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKChjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKSkgPT0gTlVMTCkKKwkJZGllKF8oIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iKSwgc3RhcnRfbmFtZSk7CisJaGFzaGNweShzaGExLCBjb21taXQtPm9iamVjdC5zaGExKTsKKworCWlmIChmb3JjaW5nKQorCQlzbnByaW50Zihtc2csIHNpemVvZiBtc2csICJicmFuY2g6IFJlc2V0IHRvICVzIiwKKwkJCSBzdGFydF9uYW1lKTsKKwllbHNlIGlmICghZG9udF9jaGFuZ2VfcmVmKQorCQlzbnByaW50Zihtc2csIHNpemVvZiBtc2csICJicmFuY2g6IENyZWF0ZWQgZnJvbSAlcyIsCisJCQkgc3RhcnRfbmFtZSk7CisKKwlpZiAocmVmbG9nKQorCQlsb2dfYWxsX3JlZl91cGRhdGVzID0gMTsKKworCWlmICghZG9udF9jaGFuZ2VfcmVmKSB7CisJCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCQlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCisJCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCQlpZiAoIXRyYW5zYWN0aW9uIHx8CisJCSAgICByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWYuYnVmLAorCQkJCQkgICBzaGExLCBmb3JjaW5nID8gTlVMTCA6IG51bGxfc2hhMSwKKwkJCQkJICAgMCwgbXNnLCAmZXJyKSB8fAorCQkgICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpCisJCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJfQorCisJaWYgKHJlYWxfcmVmICYmIHRyYWNrKQorCQlzZXR1cF90cmFja2luZyhyZWYuYnVmICsgMTEsIHJlYWxfcmVmLCB0cmFjaywgcXVpZXQpOworCisJc3RyYnVmX3JlbGVhc2UoJnJlZik7CisJZnJlZShyZWFsX3JlZik7Cit9CisKK3ZvaWQgcmVtb3ZlX2JyYW5jaF9zdGF0ZSh2b2lkKQoreworCXVubGluayhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKCkpOworCXVubGluayhnaXRfcGF0aF9yZXZlcnRfaGVhZCgpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfaGVhZCgpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfcnIoKSk7CisJdW5saW5rKGdpdF9wYXRoX21lcmdlX21zZygpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfbW9kZSgpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfc3F1YXNoX21zZygpKTsKK30KKwordm9pZCBkaWVfaWZfY2hlY2tlZF9vdXQoY29uc3QgY2hhciAqYnJhbmNoKQoreworCWNoYXIgKmV4aXN0aW5nOworCisJZXhpc3RpbmcgPSBmaW5kX3NoYXJlZF9zeW1yZWYoIkhFQUQiLCBicmFuY2gpOworCWlmIChleGlzdGluZykgeworCQlza2lwX3ByZWZpeChicmFuY2gsICJyZWZzL2hlYWRzLyIsICZicmFuY2gpOworCQlkaWUoXygiJyVzJyBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGF0ICclcyciKSwgYnJhbmNoLCBleGlzdGluZyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYnJhbmNoLmggYi9icmFuY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGFhNDVmCi0tLSAvZGV2L251bGwKKysrIGIvYnJhbmNoLmgKQEAgLTAsMCArMSw2MiBAQAorI2lmbmRlZiBCUkFOQ0hfSAorI2RlZmluZSBCUkFOQ0hfSAorCisvKiBGdW5jdGlvbnMgZm9yIGFjdGluZyBvbiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYnJhbmNoZXMuICovCisKKy8qCisgKiBDcmVhdGVzIGEgbmV3IGJyYW5jaCwgd2hlcmUgaGVhZCBpcyB0aGUgYnJhbmNoIGN1cnJlbnRseSBjaGVja2VkCisgKiBvdXQsIG5hbWUgaXMgdGhlIG5ldyBicmFuY2ggbmFtZSwgc3RhcnRfbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUKKyAqIGV4aXN0aW5nIGJyYW5jaCB0aGF0IHRoZSBuZXcgYnJhbmNoIHNob3VsZCBzdGFydCBmcm9tLCBmb3JjZQorICogZW5hYmxlcyBvdmVyd3JpdGluZyBhbiBleGlzdGluZyAobm9uLWhlYWQpIGJyYW5jaCwgcmVmbG9nIGNyZWF0ZXMgYQorICogcmVmbG9nIGZvciB0aGUgYnJhbmNoLCBhbmQgdHJhY2sgY2F1c2VzIHRoZSBuZXcgYnJhbmNoIHRvIGJlCisgKiBjb25maWd1cmVkIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIHRoYXQgc3RhcnRfbmFtZSBpcyBhIHRyYWNraW5nCisgKiBicmFuY2ggZm9yIChpZiBhbnkpLgorICovCit2b2lkIGNyZWF0ZV9icmFuY2goY29uc3QgY2hhciAqaGVhZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc3RhcnRfbmFtZSwKKwkJICAgaW50IGZvcmNlLCBpbnQgcmVmbG9nLAorCQkgICBpbnQgY2xvYmJlcl9oZWFkLCBpbnQgcXVpZXQsIGVudW0gYnJhbmNoX3RyYWNrIHRyYWNrKTsKKworLyoKKyAqIFZhbGlkYXRlcyB0aGF0IHRoZSByZXF1ZXN0ZWQgYnJhbmNoIG1heSBiZSBjcmVhdGVkLCByZXR1cm5pbmcgdGhlCisgKiBpbnRlcnByZXRlZCByZWYgaW4gcmVmLCBmb3JjZSBpbmRpY2F0ZXMgd2hldGhlciAobm9uLWhlYWQpIGJyYW5jaGVzCisgKiBtYXkgYmUgb3ZlcndyaXR0ZW4uIEEgbm9uLXplcm8gcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZSBmb3JjZQorICogcGFyYW1ldGVyIHdhcyBub24temVybyBhbmQgdGhlIGJyYW5jaCBhbHJlYWR5IGV4aXN0cy4KKyAqCisgKiBDb250cmFyeSB0byBhbGwgb2YgdGhlIGFib3ZlLCB3aGVuIGF0dHJfb25seSBpcyAxLCB0aGUgY2FsbGVyIGlzCisgKiBub3QgaW50ZXJlc3RlZCBpbiB2ZXJpZnlpbmcgaWYgaXQgaXMgT2sgdG8gdXBkYXRlIHRoZSBuYW1lZAorICogYnJhbmNoIHRvIHBvaW50IGF0IGEgcG90ZW50aWFsbHkgZGlmZmVyZW50IGNvbW1pdC4gSXQgaXMgbWVyZWx5CisgKiBhc2tpbmcgaWYgaXQgaXMgT0sgdG8gY2hhbmdlIHNvbWUgYXR0cmlidXRlIGZvciB0aGUgbmFtZWQgYnJhbmNoCisgKiAoZS5nLiB0cmFja2luZyB1cHN0cmVhbSkuCisgKgorICogTkVFRFNXT1JLOiBUaGlzIG5lZWRzIHRvIGJlIHNwbGl0IGludG8gdHdvIHNlcGFyYXRlIGZ1bmN0aW9ucyBpbiB0aGUKKyAqIGxvbmdlciBydW4gZm9yIHNhbml0eS4KKyAqCisgKi8KK2ludCB2YWxpZGF0ZV9uZXdfYnJhbmNobmFtZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICpyZWYsIGludCBmb3JjZSwgaW50IGF0dHJfb25seSk7CisKKy8qCisgKiBSZW1vdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHdvcmtpbmcgb24gdGhlIGN1cnJlbnQKKyAqIGJyYW5jaC4gKEUuZy4sIE1FUkdFX0hFQUQpCisgKi8KK3ZvaWQgcmVtb3ZlX2JyYW5jaF9zdGF0ZSh2b2lkKTsKKworLyoKKyAqIENvbmZpZ3VyZSBsb2NhbCBicmFuY2ggImxvY2FsIiBhcyBkb3duc3RyZWFtIHRvIGJyYW5jaCAicmVtb3RlIgorICogZnJvbSByZW1vdGUgIm9yaWdpbiIuICBVc2VkIGJ5IGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0uCisgKi8KKyNkZWZpbmUgQlJBTkNIX0NPTkZJR19WRVJCT1NFIDAxCitleHRlcm4gdm9pZCBpbnN0YWxsX2JyYW5jaF9jb25maWcoaW50IGZsYWcsIGNvbnN0IGNoYXIgKmxvY2FsLCBjb25zdCBjaGFyICpvcmlnaW4sIGNvbnN0IGNoYXIgKnJlbW90ZSk7CisKKy8qCisgKiBSZWFkIGJyYW5jaCBkZXNjcmlwdGlvbgorICovCitleHRlcm4gaW50IHJlYWRfYnJhbmNoX2Rlc2Moc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICpicmFuY2hfbmFtZSk7CisKKy8qCisgKiBDaGVjayBpZiBhIGJyYW5jaCBpcyBjaGVja2VkIG91dCBpbiB0aGUgbWFpbiB3b3JrdHJlZSBvciBhbnkgbGlua2VkCisgKiB3b3JrdHJlZSBhbmQgZGllICh3aXRoIGEgbWVzc2FnZSBkZXNjcmliaW5nIGl0cyBjaGVja291dCBsb2NhdGlvbikgaWYKKyAqIGl0IGlzLgorICovCitleHRlcm4gdm9pZCBkaWVfaWZfY2hlY2tlZF9vdXQoY29uc3QgY2hhciAqYnJhbmNoKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9idWlsdGluLmggYi9idWlsdGluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI5NTAwNgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4uaApAQCAtMCwwICsxLDE0NiBAQAorI2lmbmRlZiBCVUlMVElOX0gKKyNkZWZpbmUgQlVJTFRJTl9ICisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorCisjZGVmaW5lIERFRkFVTFRfTUVSR0VfTE9HX0xFTiAyMAorCitleHRlcm4gY29uc3QgY2hhciBnaXRfdXNhZ2Vfc3RyaW5nW107CitleHRlcm4gY29uc3QgY2hhciBnaXRfbW9yZV9pbmZvX3N0cmluZ1tdOworCisjZGVmaW5lIFBSVU5FX1BBQ0tFRF9EUllfUlVOIDAxCisjZGVmaW5lIFBSVU5FX1BBQ0tFRF9WRVJCT1NFIDAyCisKK2V4dGVybiB2b2lkIHBydW5lX3BhY2tlZF9vYmplY3RzKGludCk7CisKK3N0cnVjdCBmbXRfbWVyZ2VfbXNnX29wdHMgeworCXVuc2lnbmVkIGFkZF90aXRsZToxLAorCQljcmVkaXRfcGVvcGxlOjE7CisJaW50IHNob3J0bG9nX2xlbjsKK307CisKK2V4dGVybiBpbnQgZm10X21lcmdlX21zZyhzdHJ1Y3Qgc3RyYnVmICppbiwgc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJIHN0cnVjdCBmbXRfbWVyZ2VfbXNnX29wdHMgKik7CisKK2V4dGVybiBpbnQgdGV4dGNvbnZfb2JqZWN0KGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIG1vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBzaGExX3ZhbGlkLCBjaGFyICoqYnVmLCB1bnNpZ25lZCBsb25nICpidWZfc2l6ZSk7CisKK2V4dGVybiBpbnQgaXNfYnVpbHRpbihjb25zdCBjaGFyICpzKTsKKworZXh0ZXJuIGludCBjbWRfYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2FtKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2Fubm90YXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2FwcGx5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2FyY2hpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfYmlzZWN0X19oZWxwZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfYmxhbWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfYnJhbmNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2J1bmRsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jYXRfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jaGVja291dChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jaGVja291dF9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jaGVja19hdHRyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NoZWNrX2lnbm9yZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jaGVja19tYWlsbWFwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NoZWNrX3JlZl9mb3JtYXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfY2hlcnJ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NoZXJyeV9waWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2Nsb25lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NsZWFuKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NvbHVtbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfY29tbWl0X3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfY29uZmlnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2NvdW50X29iamVjdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfY3JlZGVudGlhbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9kZXNjcmliZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9kaWZmX2ZpbGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2RpZmZfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfZGlmZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9kaWZmX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfZmFzdF9leHBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfZmV0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfZmV0Y2hfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9mbXRfbWVyZ2VfbXNnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2Zvcl9lYWNoX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9mb3JtYXRfcGF0Y2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfZnNjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9nYyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9nZXRfdGFyX2NvbW1pdF9pZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9ncmVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2hhc2hfb2JqZWN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2hlbHAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfaW5kZXhfcGFjayhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9pbml0X2RiKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2ludGVycHJldF90cmFpbGVycyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9sb2coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbG9nX3JlZmxvZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9sc19maWxlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9sc190cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX2xzX3JlbW90ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9tYWlsaW5mbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9tYWlsc3BsaXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbWVyZ2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbWVyZ2VfYmFzZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9tZXJnZV9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9tZXJnZV9vdXJzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX21lcmdlX2ZpbGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbWVyZ2VfcmVjdXJzaXZlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX21lcmdlX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbWt0YWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfbWt0cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX212KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX25hbWVfcmV2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX25vdGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3BhY2tfb2JqZWN0cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9wYWNrX3JlZHVuZGFudChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9wYXRjaF9pZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9wcnVuZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9wcnVuZV9wYWNrZWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfcHVsbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9wdXNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3JlYWRfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9yZWNlaXZlX3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfcmVmbG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3JlbW90ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9yZW1vdGVfZXh0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3JlbW90ZV9mZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9yZXBhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfcmVyZXJlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3Jlc2V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3Jldl9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3Jldl9wYXJzZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9yZXZlcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfcm0oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfc2VuZF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3Nob3J0bG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3Nob3coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfc2hvd19icmFuY2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfc3RhdHVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3N0cmlwc3BhY2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfc3VibW9kdWxlX19oZWxwZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfc3ltYm9saWNfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF90YXJfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF91bnBhY2tfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF91bnBhY2tfb2JqZWN0cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF91cGRhdGVfaW5kZXgoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdXBkYXRlX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF91cGRhdGVfc2VydmVyX2luZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdXBsb2FkX2FyY2hpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdXBsb2FkX2FyY2hpdmVfd3JpdGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3ZhcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF92ZXJpZnlfY29tbWl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3ZlcmlmeV90YWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBjbWRfdmVyc2lvbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF93aGF0Y2hhbmdlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF93b3JrdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF93cml0ZV90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3ZlcmlmeV9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3Nob3dfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgY21kX3BhY2tfcmVmcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitleHRlcm4gaW50IGNtZF9yZXBsYWNlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9idWlsdGluL2FkZC5jIGIvYnVpbHRpbi9hZGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmE1YzU3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9hZGQuYwpAQCAtMCwwICsxLDQ0OSBAQAorLyoKKyAqICJnaXQgYWRkIiBidWlsdGluIGNvbW1hbmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGludXMgVG9ydmFsZHMKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImJ1bGstY2hlY2tpbi5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2FkZF91c2FnZVtdID0geworCU5fKCJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIpLAorCU5VTEwKK307CitzdGF0aWMgaW50IHBhdGNoX2ludGVyYWN0aXZlLCBhZGRfaW50ZXJhY3RpdmUsIGVkaXRfaW50ZXJhY3RpdmU7CitzdGF0aWMgaW50IHRha2Vfd29ya3RyZWVfY2hhbmdlczsKKworc3RydWN0IHVwZGF0ZV9jYWxsYmFja19kYXRhIHsKKwlpbnQgZmxhZ3M7CisJaW50IGFkZF9lcnJvcnM7Cit9OworCitzdGF0aWMgaW50IGZpeF91bm1lcmdlZF9zdGF0dXMoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsCisJCQkgICAgICAgc3RydWN0IHVwZGF0ZV9jYWxsYmFja19kYXRhICpkYXRhKQoreworCWlmIChwLT5zdGF0dXMgIT0gRElGRl9TVEFUVVNfVU5NRVJHRUQpCisJCXJldHVybiBwLT5zdGF0dXM7CisJaWYgKCEoZGF0YS0+ZmxhZ3MgJiBBRERfQ0FDSEVfSUdOT1JFX1JFTU9WQUwpICYmICFwLT50d28tPm1vZGUpCisJCS8qCisJCSAqIFRoaXMgaXMgbm90IGFuIGV4cGxpY2l0IGFkZCByZXF1ZXN0LCBhbmQgdGhlCisJCSAqIHBhdGggaXMgbWlzc2luZyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgKGRlbGV0ZWQpCisJCSAqLworCQlyZXR1cm4gRElGRl9TVEFUVVNfREVMRVRFRDsKKwllbHNlCisJCS8qCisJCSAqIEVpdGhlciBhbiBleHBsaWNpdCBhZGQgcmVxdWVzdCwgb3IgcGF0aCBleGlzdHMKKwkJICogaW4gdGhlIHdvcmtpbmcgdHJlZS4gIEFuIGF0dGVtcHQgdG8gZXhwbGljaXRseQorCQkgKiBhZGQgYSBwYXRoIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHdvcmtpbmcgdHJlZQorCQkgKiB3aWxsIGJlIGNhdWdodCBhcyBhbiBlcnJvciBieSB0aGUgY2FsbGVyIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJcmV0dXJuIERJRkZfU1RBVFVTX01PRElGSUVEOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfY2FsbGJhY2soc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqY2JkYXRhKQoreworCWludCBpOworCXN0cnVjdCB1cGRhdGVfY2FsbGJhY2tfZGF0YSAqZGF0YSA9IGNiZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWNvbnN0IGNoYXIgKnBhdGggPSBwLT5vbmUtPnBhdGg7CisJCXN3aXRjaCAoZml4X3VubWVyZ2VkX3N0YXR1cyhwLCBkYXRhKSkgeworCQlkZWZhdWx0OgorCQkJZGllKF8oInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiKSwgcC0+c3RhdHVzKTsKKwkJY2FzZSBESUZGX1NUQVRVU19NT0RJRklFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19UWVBFX0NIQU5HRUQ6CisJCQlpZiAoYWRkX2ZpbGVfdG9faW5kZXgoJnRoZV9pbmRleCwgcGF0aCwgZGF0YS0+ZmxhZ3MpKSB7CisJCQkJaWYgKCEoZGF0YS0+ZmxhZ3MgJiBBRERfQ0FDSEVfSUdOT1JFX0VSUk9SUykpCisJCQkJCWRpZShfKCJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiKSk7CisJCQkJZGF0YS0+YWRkX2Vycm9ycysrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRElGRl9TVEFUVVNfREVMRVRFRDoKKwkJCWlmIChkYXRhLT5mbGFncyAmIEFERF9DQUNIRV9JR05PUkVfUkVNT1ZBTCkKKwkJCQlicmVhazsKKwkJCWlmICghKGRhdGEtPmZsYWdzICYgQUREX0NBQ0hFX1BSRVRFTkQpKQorCQkJCXJlbW92ZV9maWxlX2Zyb21faW5kZXgoJnRoZV9pbmRleCwgcGF0aCk7CisJCQlpZiAoZGF0YS0+ZmxhZ3MgJiAoQUREX0NBQ0hFX1BSRVRFTkR8QUREX0NBQ0hFX1ZFUkJPU0UpKQorCQkJCXByaW50ZihfKCJyZW1vdmUgJyVzJ1xuIiksIHBhdGgpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK2ludCBhZGRfZmlsZXNfdG9fY2FjaGUoY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywgaW50IGZsYWdzKQoreworCXN0cnVjdCB1cGRhdGVfY2FsbGJhY2tfZGF0YSBkYXRhOworCXN0cnVjdCByZXZfaW5mbyByZXY7CisKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJZGF0YS5mbGFncyA9IGZsYWdzOworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CisJaWYgKHBhdGhzcGVjKQorCQljb3B5X3BhdGhzcGVjKCZyZXYucHJ1bmVfZGF0YSwgcGF0aHNwZWMpOworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSB1cGRhdGVfY2FsbGJhY2s7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSAmZGF0YTsKKwlyZXYubWF4X2NvdW50ID0gMDsgLyogZG8gbm90IGNvbXBhcmUgdW5tZXJnZWQgcGF0aHMgd2l0aCBzdGFnZSAjMiAqLworCXJ1bl9kaWZmX2ZpbGVzKCZyZXYsIERJRkZfUkFDWV9JU19NT0RJRklFRCk7CisJcmV0dXJuICEhZGF0YS5hZGRfZXJyb3JzOworfQorCitzdGF0aWMgY2hhciAqcHJ1bmVfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsIGludCBwcmVmaXgpCit7CisJY2hhciAqc2VlbjsKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlyX2VudHJ5ICoqc3JjLCAqKmRzdDsKKworCXNlZW4gPSB4Y2FsbG9jKHBhdGhzcGVjLT5uciwgMSk7CisKKwlzcmMgPSBkc3QgPSBkaXItPmVudHJpZXM7CisJaSA9IGRpci0+bnI7CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXN0cnVjdCBkaXJfZW50cnkgKmVudHJ5ID0gKnNyYysrOworCQlpZiAoZGlyX3BhdGhfbWF0Y2goZW50cnksIHBhdGhzcGVjLCBwcmVmaXgsIHNlZW4pKQorCQkJKmRzdCsrID0gZW50cnk7CisJfQorCWRpci0+bnIgPSBkc3QgLSBkaXItPmVudHJpZXM7CisJYWRkX3BhdGhzcGVjX21hdGNoZXNfYWdhaW5zdF9pbmRleChwYXRoc3BlYywgc2Vlbik7CisJcmV0dXJuIHNlZW47Cit9CisKK3N0YXRpYyB2b2lkIHJlZnJlc2goaW50IHZlcmJvc2UsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJY2hhciAqc2VlbjsKKwlpbnQgaTsKKworCXNlZW4gPSB4Y2FsbG9jKHBhdGhzcGVjLT5uciwgMSk7CisJcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCB2ZXJib3NlID8gUkVGUkVTSF9JTl9QT1JDRUxBSU4gOiBSRUZSRVNIX1FVSUVULAorCQkgICAgICBwYXRoc3BlYywgc2VlbiwgXygiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiKSk7CisJZm9yIChpID0gMDsgaSA8IHBhdGhzcGVjLT5ucjsgaSsrKSB7CisJCWlmICghc2VlbltpXSkKKwkJCWRpZShfKCJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIiksCisJCQkgICAgcGF0aHNwZWMtPml0ZW1zW2ldLm1hdGNoKTsKKwl9CisgICAgICAgIGZyZWUoc2Vlbik7Cit9CisKK2ludCBydW5fYWRkX2ludGVyYWN0aXZlKGNvbnN0IGNoYXIgKnJldmlzaW9uLCBjb25zdCBjaGFyICpwYXRjaF9tb2RlLAorCQkJY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwlpbnQgc3RhdHVzLCBpOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICJhZGQtLWludGVyYWN0aXZlIik7CisJaWYgKHBhdGNoX21vZGUpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgcGF0Y2hfbW9kZSk7CisJaWYgKHJldmlzaW9uKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3YsIHJldmlzaW9uKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICItLSIpOworCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy0+bnI7IGkrKykKKwkJLyogcGFzcyBvcmlnaW5hbCBwYXRoc3BlYywgdG8gYmUgcmUtcGFyc2VkICovCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgcGF0aHNwZWMtPml0ZW1zW2ldLm9yaWdpbmFsKTsKKworCXN0YXR1cyA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBpbnRlcmFjdGl2ZV9hZGQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBwYXRjaCkKK3sKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisKKwlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCB8CisJCSAgICAgICBQQVRIU1BFQ19TWU1MSU5LX0xFQURJTkdfUEFUSCB8CisJCSAgICAgICBQQVRIU1BFQ19QUkVGSVhfT1JJR0lOLAorCQkgICAgICAgcHJlZml4LCBhcmd2KTsKKworCXJldHVybiBydW5fYWRkX2ludGVyYWN0aXZlKE5VTEwsCisJCQkJICAgcGF0Y2ggPyAiLS1wYXRjaCIgOiBOVUxMLAorCQkJCSAgICZwYXRoc3BlYyk7Cit9CisKK3N0YXRpYyBpbnQgZWRpdF9wYXRjaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljaGFyICpmaWxlID0gZ2l0X3BhdGhkdXAoIkFERF9FRElULnBhdGNoIik7CisJY29uc3QgY2hhciAqYXBwbHlfYXJndltdID0geyAiYXBwbHkiLCAiLS1yZWNvdW50IiwgIi0tY2FjaGVkIiwKKwkJTlVMTCwgTlVMTCB9OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJaW50IG91dDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWFwcGx5X2FyZ3ZbM10gPSBmaWxlOworCisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZShfKCJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiKSk7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOworCXJldi5kaWZmb3B0LmNvbnRleHQgPSA3OworCisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJcmV2LmRpZmZvcHQudXNlX2NvbG9yID0gMDsKKwlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBJR05PUkVfRElSVFlfU1VCTU9EVUxFUyk7CisJb3V0ID0gb3BlbihmaWxlLCBPX0NSRUFUIHwgT19XUk9OTFksIDA2NjYpOworCWlmIChvdXQgPCAwKQorCQlkaWUoXygiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iKSwgZmlsZSk7CisJcmV2LmRpZmZvcHQuZmlsZSA9IHhmZG9wZW4ob3V0LCAidyIpOworCXJldi5kaWZmb3B0LmNsb3NlX2ZpbGUgPSAxOworCWlmIChydW5fZGlmZl9maWxlcygmcmV2LCAwKSkKKwkJZGllKF8oIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIpKTsKKworCWlmIChsYXVuY2hfZWRpdG9yKGZpbGUsIE5VTEwsIE5VTEwpKQorCQlkaWUoXygiZWRpdGluZyBwYXRjaCBmYWlsZWQiKSk7CisKKwlpZiAoc3RhdChmaWxlLCAmc3QpKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IHN0YXQgJyVzJyIpLCBmaWxlKTsKKwlpZiAoIXN0LnN0X3NpemUpCisJCWRpZShfKCJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iKSk7CisKKwljaGlsZC5naXRfY21kID0gMTsKKwljaGlsZC5hcmd2ID0gYXBwbHlfYXJndjsKKwlpZiAocnVuX2NvbW1hbmQoJmNoaWxkKSkKKwkJZGllKF8oIkNvdWxkIG5vdCBhcHBseSAnJXMnIiksIGZpbGUpOworCisJdW5saW5rKGZpbGUpOworCWZyZWUoZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZTsKKworc3RhdGljIGNvbnN0IGNoYXIgaWdub3JlX2Vycm9yW10gPQorTl8oIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIpOworCitzdGF0aWMgaW50IHZlcmJvc2UsIHNob3dfb25seSwgaWdub3JlZF90b28sIHJlZnJlc2hfb25seTsKK3N0YXRpYyBpbnQgaWdub3JlX2FkZF9lcnJvcnMsIGludGVudF90b19hZGQsIGlnbm9yZV9taXNzaW5nOworCisjZGVmaW5lIEFERFJFTU9WRV9ERUZBVUxUIDEKK3N0YXRpYyBpbnQgYWRkcmVtb3ZlID0gQUREUkVNT1ZFX0RFRkFVTFQ7CitzdGF0aWMgaW50IGFkZHJlbW92ZV9leHBsaWNpdCA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworCitzdGF0aWMgaW50IGlnbm9yZV9yZW1vdmFsX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJLyogaWYgd2UgYXJlIHRvbGQgdG8gaWdub3JlLCB3ZSBhcmUgbm90IGFkZGluZyByZW1vdmFscyAqLworCSooaW50ICopb3B0LT52YWx1ZSA9ICF1bnNldCA/IDAgOiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2FkZF9vcHRpb25zW10gPSB7CisJT1BUX19EUllfUlVOKCZzaG93X29ubHksIE5fKCJkcnkgcnVuIikpLAorCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCisJT1BUX0dST1VQKCIiKSwKKwlPUFRfQk9PTCgnaScsICJpbnRlcmFjdGl2ZSIsICZhZGRfaW50ZXJhY3RpdmUsIE5fKCJpbnRlcmFjdGl2ZSBwaWNraW5nIikpLAorCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJnBhdGNoX2ludGVyYWN0aXZlLCBOXygic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiKSksCisJT1BUX0JPT0woJ2UnLCAiZWRpdCIsICZlZGl0X2ludGVyYWN0aXZlLCBOXygiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IikpLAorCU9QVF9fRk9SQ0UoJmlnbm9yZWRfdG9vLCBOXygiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIikpLAorCU9QVF9CT09MKCd1JywgInVwZGF0ZSIsICZ0YWtlX3dvcmt0cmVlX2NoYW5nZXMsIE5fKCJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIpKSwKKwlPUFRfQk9PTCgnTicsICJpbnRlbnQtdG8tYWRkIiwgJmludGVudF90b19hZGQsIE5fKCJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiKSksCisJT1BUX0JPT0woJ0EnLCAiYWxsIiwgJmFkZHJlbW92ZV9leHBsaWNpdCwgTl8oImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIpKSwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgImlnbm9yZS1yZW1vdmFsIiwgJmFkZHJlbW92ZV9leHBsaWNpdCwKKwkgIE5VTEwgLyogdGFrZXMgbm8gYXJndW1lbnRzICovLAorCSAgTl8oImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIiksCisJICBQQVJTRV9PUFRfTk9BUkcsIGlnbm9yZV9yZW1vdmFsX2NiIH0sCisJT1BUX0JPT0woIDAgLCAicmVmcmVzaCIsICZyZWZyZXNoX29ubHksIE5fKCJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiKSksCisJT1BUX0JPT0woIDAgLCAiaWdub3JlLWVycm9ycyIsICZpZ25vcmVfYWRkX2Vycm9ycywgTl8oImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiKSksCisJT1BUX0JPT0woIDAgLCAiaWdub3JlLW1pc3NpbmciLCAmaWdub3JlX21pc3NpbmcsIE5fKCJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iKSksCisJT1BUX0VORCgpLAorfTsKKworc3RhdGljIGludCBhZGRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImFkZC5pZ25vcmVlcnJvcnMiKSB8fAorCSAgICAhc3RyY21wKHZhciwgImFkZC5pZ25vcmUtZXJyb3JzIikpIHsKKwkJaWdub3JlX2FkZF9lcnJvcnMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGludCBhZGRfZmlsZXMoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgaW50IGZsYWdzKQoreworCWludCBpLCBleGl0X3N0YXR1cyA9IDA7CisKKwlpZiAoZGlyLT5pZ25vcmVkX25yKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKGlnbm9yZV9lcnJvcikpOworCQlmb3IgKGkgPSAwOyBpIDwgZGlyLT5pZ25vcmVkX25yOyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBkaXItPmlnbm9yZWRbaV0tPm5hbWUpOworCQlmcHJpbnRmKHN0ZGVyciwgXygiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIpKTsKKwkJZXhpdF9zdGF0dXMgPSAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspCisJCWlmIChhZGRfZmlsZV90b19jYWNoZShkaXItPmVudHJpZXNbaV0tPm5hbWUsIGZsYWdzKSkgeworCQkJaWYgKCFpZ25vcmVfYWRkX2Vycm9ycykKKwkJCQlkaWUoXygiYWRkaW5nIGZpbGVzIGZhaWxlZCIpKTsKKwkJCWV4aXRfc3RhdHVzID0gMTsKKwkJfQorCXJldHVybiBleGl0X3N0YXR1czsKK30KKworaW50IGNtZF9hZGQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGV4aXRfc3RhdHVzID0gMDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCWludCBmbGFnczsKKwlpbnQgYWRkX25ld19maWxlczsKKwlpbnQgcmVxdWlyZV9wYXRoc3BlYzsKKwljaGFyICpzZWVuID0gTlVMTDsKKworCWdpdF9jb25maWcoYWRkX2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fYWRkX29wdGlvbnMsCisJCQkgIGJ1aWx0aW5fYWRkX3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisJaWYgKHBhdGNoX2ludGVyYWN0aXZlKQorCQlhZGRfaW50ZXJhY3RpdmUgPSAxOworCWlmIChhZGRfaW50ZXJhY3RpdmUpCisJCWV4aXQoaW50ZXJhY3RpdmVfYWRkKGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4LCBwYXRjaF9pbnRlcmFjdGl2ZSkpOworCisJaWYgKGVkaXRfaW50ZXJhY3RpdmUpCisJCXJldHVybihlZGl0X3BhdGNoKGFyZ2MsIGFyZ3YsIHByZWZpeCkpOworCWFyZ2MtLTsKKwlhcmd2Kys7CisKKwlpZiAoMCA8PSBhZGRyZW1vdmVfZXhwbGljaXQpCisJCWFkZHJlbW92ZSA9IGFkZHJlbW92ZV9leHBsaWNpdDsKKwllbHNlIGlmICh0YWtlX3dvcmt0cmVlX2NoYW5nZXMgJiYgQUREUkVNT1ZFX0RFRkFVTFQpCisJCWFkZHJlbW92ZSA9IDA7IC8qICItdSIgd2FzIGdpdmVuIGJ1dCBub3QgIi1BIiAqLworCisJaWYgKGFkZHJlbW92ZSAmJiB0YWtlX3dvcmt0cmVlX2NoYW5nZXMpCisJCWRpZShfKCItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIpKTsKKworCWlmICghdGFrZV93b3JrdHJlZV9jaGFuZ2VzICYmIGFkZHJlbW92ZV9leHBsaWNpdCA8IDAgJiYgYXJnYykKKwkJLyogVHVybiAiZ2l0IGFkZCBwYXRoc3BlYy4uLiIgdG8gImdpdCBhZGQgLUEgcGF0aHNwZWMuLi4iICovCisJCWFkZHJlbW92ZSA9IDE7CisKKwlpZiAoIXNob3dfb25seSAmJiBpZ25vcmVfbWlzc2luZykKKwkJZGllKF8oIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iKSk7CisKKwlpZiAoKDAgPCBhZGRyZW1vdmVfZXhwbGljaXQgfHwgdGFrZV93b3JrdHJlZV9jaGFuZ2VzKSAmJiAhYXJnYykgeworCQlzdGF0aWMgY29uc3QgY2hhciAqd2hvbGVbMl0gPSB7ICI6LyIsIE5VTEwgfTsKKwkJYXJnYyA9IDE7CisJCWFyZ3YgPSB3aG9sZTsKKwl9CisKKwlhZGRfbmV3X2ZpbGVzID0gIXRha2Vfd29ya3RyZWVfY2hhbmdlcyAmJiAhcmVmcmVzaF9vbmx5OworCXJlcXVpcmVfcGF0aHNwZWMgPSAhdGFrZV93b3JrdHJlZV9jaGFuZ2VzOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CisKKwlmbGFncyA9ICgodmVyYm9zZSA/IEFERF9DQUNIRV9WRVJCT1NFIDogMCkgfAorCQkgKHNob3dfb25seSA/IEFERF9DQUNIRV9QUkVURU5EIDogMCkgfAorCQkgKGludGVudF90b19hZGQgPyBBRERfQ0FDSEVfSU5URU5UIDogMCkgfAorCQkgKGlnbm9yZV9hZGRfZXJyb3JzID8gQUREX0NBQ0hFX0lHTk9SRV9FUlJPUlMgOiAwKSB8CisJCSAoIShhZGRyZW1vdmUgfHwgdGFrZV93b3JrdHJlZV9jaGFuZ2VzKQorCQkgID8gQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMIDogMCkpOworCisJaWYgKHJlcXVpcmVfcGF0aHNwZWMgJiYgYXJnYyA9PSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIpKTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIikpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCS8qCisJICogQ2hlY2sgdGhlICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIiBibG9jaworCSAqIGJlbG93IGJlZm9yZSBlbmFibGluZyBuZXcgbWFnaWMuCisJICovCisJcGFyc2VfcGF0aHNwZWMoJnBhdGhzcGVjLCAwLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwgfAorCQkgICAgICAgUEFUSFNQRUNfU1lNTElOS19MRUFESU5HX1BBVEggfAorCQkgICAgICAgUEFUSFNQRUNfU1RSSVBfU1VCTU9EVUxFX1NMQVNIX0VYUEVOU0lWRSwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwlpZiAoYWRkX25ld19maWxlcykgeworCQlpbnQgYmFzZWxlbjsKKworCQkvKiBTZXQgdXAgdGhlIGRlZmF1bHQgZ2l0IHBvcmNlbGFpbiBleGNsdWRlcyAqLworCQltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCQlpZiAoIWlnbm9yZWRfdG9vKSB7CisJCQlkaXIuZmxhZ3MgfD0gRElSX0NPTExFQ1RfSUdOT1JFRDsKKwkJCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCZkaXIpOworCQl9CisKKwkJLyogVGhpcyBwaWNrcyB1cCB0aGUgcGF0aHMgdGhhdCBhcmUgbm90IHRyYWNrZWQgKi8KKwkJYmFzZWxlbiA9IGZpbGxfZGlyZWN0b3J5KCZkaXIsICZwYXRoc3BlYyk7CisJCWlmIChwYXRoc3BlYy5ucikKKwkJCXNlZW4gPSBwcnVuZV9kaXJlY3RvcnkoJmRpciwgJnBhdGhzcGVjLCBiYXNlbGVuKTsKKwl9CisKKwlpZiAocmVmcmVzaF9vbmx5KSB7CisJCXJlZnJlc2godmVyYm9zZSwgJnBhdGhzcGVjKTsKKwkJZ290byBmaW5pc2g7CisJfQorCisJaWYgKHBhdGhzcGVjLm5yKSB7CisJCWludCBpOworCisJCWlmICghc2VlbikKKwkJCXNlZW4gPSBmaW5kX3BhdGhzcGVjc19tYXRjaGluZ19hZ2FpbnN0X2luZGV4KCZwYXRoc3BlYyk7CisKKwkJLyoKKwkJICogZmlsZV9leGlzdHMoKSBhc3N1bWVzIGV4YWN0IG1hdGNoCisJCSAqLworCQlHVUFSRF9QQVRIU1BFQygmcGF0aHNwZWMsCisJCQkgICAgICAgUEFUSFNQRUNfRlJPTVRPUCB8CisJCQkgICAgICAgUEFUSFNQRUNfTElURVJBTCB8CisJCQkgICAgICAgUEFUSFNQRUNfR0xPQiB8CisJCQkgICAgICAgUEFUSFNQRUNfSUNBU0UgfAorCQkJICAgICAgIFBBVEhTUEVDX0VYQ0xVREUpOworCisJCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy5ucjsgaSsrKSB7CisJCQljb25zdCBjaGFyICpwYXRoID0gcGF0aHNwZWMuaXRlbXNbaV0ubWF0Y2g7CisJCQlpZiAocGF0aHNwZWMuaXRlbXNbaV0ubWFnaWMgJiBQQVRIU1BFQ19FWENMVURFKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFzZWVuW2ldICYmIHBhdGhbMF0gJiYKKwkJCSAgICAoKHBhdGhzcGVjLml0ZW1zW2ldLm1hZ2ljICYKKwkJCSAgICAgIChQQVRIU1BFQ19HTE9CIHwgUEFUSFNQRUNfSUNBU0UpKSB8fAorCQkJICAgICAhZmlsZV9leGlzdHMocGF0aCkpKSB7CisJCQkJaWYgKGlnbm9yZV9taXNzaW5nKSB7CisJCQkJCWludCBkdHlwZSA9IERUX1VOS05PV047CisJCQkJCWlmIChpc19leGNsdWRlZCgmZGlyLCBwYXRoLCAmZHR5cGUpKQorCQkJCQkJZGlyX2FkZF9pZ25vcmVkKCZkaXIsIHBhdGgsIHBhdGhzcGVjLml0ZW1zW2ldLmxlbik7CisJCQkJfSBlbHNlCisJCQkJCWRpZShfKCJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIiksCisJCQkJCSAgICBwYXRoc3BlYy5pdGVtc1tpXS5vcmlnaW5hbCk7CisJCQl9CisJCX0KKwkJZnJlZShzZWVuKTsKKwl9CisKKwlwbHVnX2J1bGtfY2hlY2tpbigpOworCisJZXhpdF9zdGF0dXMgfD0gYWRkX2ZpbGVzX3RvX2NhY2hlKHByZWZpeCwgJnBhdGhzcGVjLCBmbGFncyk7CisKKwlpZiAoYWRkX25ld19maWxlcykKKwkJZXhpdF9zdGF0dXMgfD0gYWRkX2ZpbGVzKCZkaXIsIGZsYWdzKTsKKworCXVucGx1Z19idWxrX2NoZWNraW4oKTsKKworZmluaXNoOgorCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZCkgeworCQlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZsb2NrX2ZpbGUsIENPTU1JVF9MT0NLKSkKKwkJCWRpZShfKCJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisJfQorCisJcmV0dXJuIGV4aXRfc3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9hbS5jIGIvYnVpbHRpbi9hbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYTI1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2FtLmMKQEAgLTAsMCArMSwyNDQzIEBACisvKgorICogQnVpbHRpbiAiZ2l0IGFtIgorICoKKyAqIEJhc2VkIG9uIGdpdC1hbS5zaCBieSBKdW5pbyBDIEhhbWFuby4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJ0ZW1wZmlsZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJzZXF1ZW5jZXIuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgIm1lcmdlLXJlY3Vyc2l2ZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJub3Rlcy11dGlscy5oIgorI2luY2x1ZGUgInJlcmVyZS5oIgorI2luY2x1ZGUgInByb21wdC5oIgorI2luY2x1ZGUgIm1haWxpbmZvLmgiCisKKy8qKgorICogUmV0dXJucyAxIGlmIHRoZSBmaWxlIGlzIGVtcHR5IG9yIGRvZXMgbm90IGV4aXN0LCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBpc19lbXB0eV9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKHN0YXQoZmlsZW5hbWUsICZzdCkgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQlyZXR1cm4gMTsKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBzdGF0ICVzIiksIGZpbGVuYW1lKTsKKwl9CisKKwlyZXR1cm4gIXN0LnN0X3NpemU7Cit9CisKKy8qKgorICogTGlrZSBzdHJidWZfZ2V0bGluZSgpLCBidXQgdHJlYXRzIGJvdGggJ1xuJyBhbmQgIlxyXG4iIGFzIGxpbmUgdGVybWluYXRvcnMuCisgKi8KK3N0YXRpYyBpbnQgc3RyYnVmX2dldGxpbmVfY3JsZihzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqZnApCit7CisJaWYgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc2IsIGZwLCAnXG4nKSkKKwkJcmV0dXJuIEVPRjsKKwlpZiAoc2ItPmJ1ZltzYi0+bGVuIC0gMV0gPT0gJ1xuJykgeworCQlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuIC0gMSk7CisJCWlmIChzYi0+bGVuID4gMCAmJiBzYi0+YnVmW3NiLT5sZW4gLSAxXSA9PSAnXHInKQorCQkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiAtIDEpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGZpcnN0IGxpbmUgb2YgbXNnLgorICovCitzdGF0aWMgaW50IGxpbmVsZW4oY29uc3QgY2hhciAqbXNnKQoreworCXJldHVybiBzdHJjaHJudWwobXNnLCAnXG4nKSAtIG1zZzsKK30KKworLyoqCisgKiBSZXR1cm5zIHRydWUgaWYgYHN0cmAgY29uc2lzdHMgb2Ygb25seSB3aGl0ZXNwYWNlLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgc3RyX2lzc3BhY2UoY29uc3QgY2hhciAqc3RyKQoreworCWZvciAoOyAqc3RyOyBzdHIrKykKKwkJaWYgKCFpc3NwYWNlKCpzdHIpKQorCQkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworZW51bSBwYXRjaF9mb3JtYXQgeworCVBBVENIX0ZPUk1BVF9VTktOT1dOID0gMCwKKwlQQVRDSF9GT1JNQVRfTUJPWCwKKwlQQVRDSF9GT1JNQVRfU1RHSVQsCisJUEFUQ0hfRk9STUFUX1NUR0lUX1NFUklFUywKKwlQQVRDSF9GT1JNQVRfSEcKK307CisKK2VudW0ga2VlcF90eXBlIHsKKwlLRUVQX0ZBTFNFID0gMCwKKwlLRUVQX1RSVUUsICAgICAgLyogcGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyAqLworCUtFRVBfTk9OX1BBVENIICAvKiBwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvICovCit9OworCitlbnVtIHNjaXNzb3JzX3R5cGUgeworCVNDSVNTT1JTX1VOU0VUID0gLTEsCisJU0NJU1NPUlNfRkFMU0UgPSAwLCAgLyogcGFzcyAtLW5vLXNjaXNzb3JzIHRvIGdpdC1tYWlsaW5mbyAqLworCVNDSVNTT1JTX1RSVUUgICAgICAgIC8qIHBhc3MgLS1zY2lzc29ycyB0byBnaXQtbWFpbGluZm8gKi8KK307CisKK2VudW0gc2lnbm9mZl90eXBlIHsKKwlTSUdOT0ZGX0ZBTFNFID0gMCwKKwlTSUdOT0ZGX1RSVUUgPSAxLAorCVNJR05PRkZfRVhQTElDSVQgLyogLS1zaWdub2ZmIHdhcyBzZXQgb24gdGhlIGNvbW1hbmQtbGluZSAqLworfTsKKworc3RydWN0IGFtX3N0YXRlIHsKKwkvKiBzdGF0ZSBkaXJlY3RvcnkgcGF0aCAqLworCWNoYXIgKmRpcjsKKworCS8qIGN1cnJlbnQgYW5kIGxhc3QgcGF0Y2ggbnVtYmVycywgMS1pbmRleGVkICovCisJaW50IGN1cjsKKwlpbnQgbGFzdDsKKworCS8qIGNvbW1pdCBtZXRhZGF0YSBhbmQgbWVzc2FnZSAqLworCWNoYXIgKmF1dGhvcl9uYW1lOworCWNoYXIgKmF1dGhvcl9lbWFpbDsKKwljaGFyICphdXRob3JfZGF0ZTsKKwljaGFyICptc2c7CisJc2l6ZV90IG1zZ19sZW47CisKKwkvKiB3aGVuIC0tcmViYXNpbmcsIHJlY29yZHMgdGhlIG9yaWdpbmFsIGNvbW1pdCB0aGUgcGF0Y2ggY2FtZSBmcm9tICovCisJdW5zaWduZWQgY2hhciBvcmlnX2NvbW1pdFtHSVRfU0hBMV9SQVdTWl07CisKKwkvKiBudW1iZXIgb2YgZGlnaXRzIGluIHBhdGNoIGZpbGVuYW1lICovCisJaW50IHByZWM7CisKKwkvKiB2YXJpb3VzIG9wZXJhdGluZyBtb2RlcyBhbmQgY29tbWFuZCBsaW5lIG9wdGlvbnMgKi8KKwlpbnQgaW50ZXJhY3RpdmU7CisJaW50IHRocmVld2F5OworCWludCBxdWlldDsKKwlpbnQgc2lnbm9mZjsgLyogZW51bSBzaWdub2ZmX3R5cGUgKi8KKwlpbnQgdXRmODsKKwlpbnQga2VlcDsgLyogZW51bSBrZWVwX3R5cGUgKi8KKwlpbnQgbWVzc2FnZV9pZDsKKwlpbnQgc2Npc3NvcnM7IC8qIGVudW0gc2Npc3NvcnNfdHlwZSAqLworCXN0cnVjdCBhcmd2X2FycmF5IGdpdF9hcHBseV9vcHRzOworCWNvbnN0IGNoYXIgKnJlc29sdmVtc2c7CisJaW50IGNvbW1pdHRlcl9kYXRlX2lzX2F1dGhvcl9kYXRlOworCWludCBpZ25vcmVfZGF0ZTsKKwlpbnQgYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU7CisJY29uc3QgY2hhciAqc2lnbl9jb21taXQ7CisJaW50IHJlYmFzaW5nOworfTsKKworLyoqCisgKiBJbml0aWFsaXplcyBhbV9zdGF0ZSB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcy4gVGhlIHN0YXRlIGRpcmVjdG9yeSBpcyBzZXQgdG8KKyAqIGRpci4KKyAqLworc3RhdGljIHZvaWQgYW1fc3RhdGVfaW5pdChzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICpkaXIpCit7CisJaW50IGdwZ3NpZ247CisKKwltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKworCWFzc2VydChkaXIpOworCXN0YXRlLT5kaXIgPSB4c3RyZHVwKGRpcik7CisKKwlzdGF0ZS0+cHJlYyA9IDQ7CisKKwlnaXRfY29uZmlnX2dldF9ib29sKCJhbS50aHJlZXdheSIsICZzdGF0ZS0+dGhyZWV3YXkpOworCisJc3RhdGUtPnV0ZjggPSAxOworCisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgiYW0ubWVzc2FnZWlkIiwgJnN0YXRlLT5tZXNzYWdlX2lkKTsKKworCXN0YXRlLT5zY2lzc29ycyA9IFNDSVNTT1JTX1VOU0VUOworCisJYXJndl9hcnJheV9pbml0KCZzdGF0ZS0+Z2l0X2FwcGx5X29wdHMpOworCisJaWYgKCFnaXRfY29uZmlnX2dldF9ib29sKCJjb21taXQuZ3Bnc2lnbiIsICZncGdzaWduKSkKKwkJc3RhdGUtPnNpZ25fY29tbWl0ID0gZ3Bnc2lnbiA/ICIiIDogTlVMTDsKK30KKworLyoqCisgKiBSZWxlYXNlcyBtZW1vcnkgYWxsb2NhdGVkIGJ5IGFuIGFtX3N0YXRlLgorICovCitzdGF0aWMgdm9pZCBhbV9zdGF0ZV9yZWxlYXNlKHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJZnJlZShzdGF0ZS0+ZGlyKTsKKwlmcmVlKHN0YXRlLT5hdXRob3JfbmFtZSk7CisJZnJlZShzdGF0ZS0+YXV0aG9yX2VtYWlsKTsKKwlmcmVlKHN0YXRlLT5hdXRob3JfZGF0ZSk7CisJZnJlZShzdGF0ZS0+bXNnKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZzdGF0ZS0+Z2l0X2FwcGx5X29wdHMpOworfQorCisvKioKKyAqIFJldHVybnMgcGF0aCByZWxhdGl2ZSB0byB0aGUgYW1fc3RhdGUgZGlyZWN0b3J5LgorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmFtX3BhdGgoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gbWtwYXRoKCIlcy8lcyIsIHN0YXRlLT5kaXIsIHBhdGgpOworfQorCisvKioKKyAqIEZvciBjb252ZW5pZW5jZSB0byBjYWxsIHdyaXRlX2ZpbGUoKQorICovCitzdGF0aWMgaW50IHdyaXRlX3N0YXRlX3RleHQoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJcmV0dXJuIHdyaXRlX2ZpbGUoYW1fcGF0aChzdGF0ZSwgbmFtZSksICIlcyIsIHN0cmluZyk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfc3RhdGVfY291bnQoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKQoreworCXJldHVybiB3cml0ZV9maWxlKGFtX3BhdGgoc3RhdGUsIG5hbWUpLCAiJWQiLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfc3RhdGVfYm9vbChjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSkKK3sKKwlyZXR1cm4gd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgbmFtZSwgdmFsdWUgPyAidCIgOiAiZiIpOworfQorCisvKioKKyAqIElmIHN0YXRlLT5xdWlldCBpcyBmYWxzZSwgY2FsbHMgZnByaW50ZihmcCwgZm10LCAuLi4pLCBhbmQgYXBwZW5kcyBhIG5ld2xpbmUKKyAqIGF0IHRoZSBlbmQuCisgKi8KK3N0YXRpYyB2b2lkIHNheShjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCWlmICghc3RhdGUtPnF1aWV0KSB7CisJCXZmcHJpbnRmKGZwLCBmbXQsIGFwKTsKKwkJcHV0YygnXG4nLCBmcCk7CisJfQorCXZhX2VuZChhcCk7Cit9CisKKy8qKgorICogUmV0dXJucyAxIGlmIHRoZXJlIGlzIGFuIGFtIHNlc3Npb24gaW4gcHJvZ3Jlc3MsIDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IGFtX2luX3Byb2dyZXNzKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAobHN0YXQoc3RhdGUtPmRpciwgJnN0KSA8IDAgfHwgIVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCXJldHVybiAwOworCWlmIChsc3RhdChhbV9wYXRoKHN0YXRlLCAibGFzdCIpLCAmc3QpIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gMDsKKwlpZiAobHN0YXQoYW1fcGF0aChzdGF0ZSwgIm5leHQiKSwgJnN0KSB8fCAhU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogUmVhZHMgdGhlIGNvbnRlbnRzIG9mIGBmaWxlYCBpbiB0aGUgYHN0YXRlYCBkaXJlY3RvcnkgaW50byBgc2JgLiBSZXR1cm5zIHRoZQorICogbnVtYmVyIG9mIGJ5dGVzIHJlYWQgb24gc3VjY2VzcywgLTEgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QuIElmIGB0cmltYCBpcworICogc2V0LCB0cmFpbGluZyB3aGl0ZXNwYWNlIHdpbGwgYmUgcmVtb3ZlZC4KKyAqLworc3RhdGljIGludCByZWFkX3N0YXRlX2ZpbGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsCisJCQljb25zdCBjaGFyICpmaWxlLCBpbnQgdHJpbSkKK3sKKwlzdHJidWZfcmVzZXQoc2IpOworCisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoc2IsIGFtX3BhdGgoc3RhdGUsIGZpbGUpLCAwKSA+PSAwKSB7CisJCWlmICh0cmltKQorCQkJc3RyYnVmX3RyaW0oc2IpOworCisJCXJldHVybiBzYi0+bGVuOworCX0KKworCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCXJldHVybiAtMTsKKworCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCAnJXMnIiksIGFtX3BhdGgoc3RhdGUsIGZpbGUpKTsKK30KKworLyoqCisgKiBSZWFkcyBhIEtFWT1WQUxVRSBzaGVsbCB2YXJpYWJsZSBhc3NpZ25tZW50IGZyb20gYGZwYCwgcmV0dXJuaW5nIHRoZSBWQUxVRQorICogYXMgYSBuZXdseS1hbGxvY2F0ZWQgc3RyaW5nLiBWQUxVRSBtdXN0IGJlIGEgcXVvdGVkIHN0cmluZywgYW5kIHRoZSBLRVkgbXVzdAorICogbWF0Y2ggYGtleWAuIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLgorICoKKyAqIFRoaXMgaXMgdXNlZCBieSByZWFkX2F1dGhvcl9zY3JpcHQoKSB0byByZWFkIHRoZSBHSVRfQVVUSE9SXyogdmFyaWFibGVzIGZyb20KKyAqIHRoZSBhdXRob3Itc2NyaXB0LgorICovCitzdGF0aWMgY2hhciAqcmVhZF9zaGVsbF92YXIoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqc3RyOworCisJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZzYiwgZnAsICdcbicpKQorCQlnb3RvIGZhaWw7CisKKwlpZiAoIXNraXBfcHJlZml4KHNiLmJ1Ziwga2V5LCAmc3RyKSkKKwkJZ290byBmYWlsOworCisJaWYgKCFza2lwX3ByZWZpeChzdHIsICI9IiwgJnN0cikpCisJCWdvdG8gZmFpbDsKKworCXN0cmJ1Zl9yZW1vdmUoJnNiLCAwLCBzdHIgLSBzYi5idWYpOworCisJc3RyID0gc3FfZGVxdW90ZShzYi5idWYpOworCWlmICghc3RyKQorCQlnb3RvIGZhaWw7CisKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCitmYWlsOgorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogUmVhZHMgYW5kIHBhcnNlcyB0aGUgc3RhdGUgZGlyZWN0b3J5J3MgImF1dGhvci1zY3JpcHQiIGZpbGUsIGFuZCBzZXRzCisgKiBzdGF0ZS0+YXV0aG9yX25hbWUsIHN0YXRlLT5hdXRob3JfZW1haWwgYW5kIHN0YXRlLT5hdXRob3JfZGF0ZSBhY2NvcmRpbmdseS4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgcGFyc2VkLgorICoKKyAqIFRoZSBhdXRob3Igc2NyaXB0IGlzIG9mIHRoZSBmb3JtYXQ6CisgKgorICoJR0lUX0FVVEhPUl9OQU1FPSckYXV0aG9yX25hbWUnCisgKglHSVRfQVVUSE9SX0VNQUlMPSckYXV0aG9yX2VtYWlsJworICoJR0lUX0FVVEhPUl9EQVRFPSckYXV0aG9yX2RhdGUnCisgKgorICogd2hlcmUgJGF1dGhvcl9uYW1lLCAkYXV0aG9yX2VtYWlsIGFuZCAkYXV0aG9yX2RhdGUgYXJlIHF1b3RlZC4gV2UgYXJlIHN0cmljdAorICogd2l0aCBvdXIgcGFyc2luZywgYXMgdGhlIGZpbGUgd2FzIG1lYW50IHRvIGJlIGV2YWwnZCBpbiB0aGUgb2xkIGdpdC1hbS5zaAorICogc2NyaXB0LCBhbmQgdGh1cyBpZiB0aGUgZmlsZSBkaWZmZXJzIGZyb20gd2hhdCB0aGlzIGZ1bmN0aW9uIGV4cGVjdHMsIGl0IGlzCisgKiBiZXR0ZXIgdG8gYmFpbCBvdXQgdGhhbiB0byBkbyBzb21ldGhpbmcgdGhhdCB0aGUgdXNlciBkb2VzIG5vdCBleHBlY3QuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9hdXRob3Jfc2NyaXB0KHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBhbV9wYXRoKHN0YXRlLCAiYXV0aG9yLXNjcmlwdCIpOworCUZJTEUgKmZwOworCisJYXNzZXJ0KCFzdGF0ZS0+YXV0aG9yX25hbWUpOworCWFzc2VydCghc3RhdGUtPmF1dGhvcl9lbWFpbCk7CisJYXNzZXJ0KCFzdGF0ZS0+YXV0aG9yX2RhdGUpOworCisJZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwlpZiAoIWZwKSB7CisJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQlyZXR1cm4gMDsKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciKSwgZmlsZW5hbWUpOworCX0KKworCXN0YXRlLT5hdXRob3JfbmFtZSA9IHJlYWRfc2hlbGxfdmFyKGZwLCAiR0lUX0FVVEhPUl9OQU1FIik7CisJaWYgKCFzdGF0ZS0+YXV0aG9yX25hbWUpIHsKKwkJZmNsb3NlKGZwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0YXRlLT5hdXRob3JfZW1haWwgPSByZWFkX3NoZWxsX3ZhcihmcCwgIkdJVF9BVVRIT1JfRU1BSUwiKTsKKwlpZiAoIXN0YXRlLT5hdXRob3JfZW1haWwpIHsKKwkJZmNsb3NlKGZwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0YXRlLT5hdXRob3JfZGF0ZSA9IHJlYWRfc2hlbGxfdmFyKGZwLCAiR0lUX0FVVEhPUl9EQVRFIik7CisJaWYgKCFzdGF0ZS0+YXV0aG9yX2RhdGUpIHsKKwkJZmNsb3NlKGZwKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChmZ2V0YyhmcCkgIT0gRU9GKSB7CisJCWZjbG9zZShmcCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmY2xvc2UoZnApOworCXJldHVybiAwOworfQorCisvKioKKyAqIFNhdmVzIHN0YXRlLT5hdXRob3JfbmFtZSwgc3RhdGUtPmF1dGhvcl9lbWFpbCBhbmQgc3RhdGUtPmF1dGhvcl9kYXRlIGluIHRoZQorICogc3RhdGUgZGlyZWN0b3J5J3MgImF1dGhvci1zY3JpcHQiIGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX2F1dGhvcl9zY3JpcHQoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkc3RyKCZzYiwgIkdJVF9BVVRIT1JfTkFNRT0iKTsKKwlzcV9xdW90ZV9idWYoJnNiLCBzdGF0ZS0+YXV0aG9yX25hbWUpOworCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCisJc3RyYnVmX2FkZHN0cigmc2IsICJHSVRfQVVUSE9SX0VNQUlMPSIpOworCXNxX3F1b3RlX2J1Zigmc2IsIHN0YXRlLT5hdXRob3JfZW1haWwpOworCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCisJc3RyYnVmX2FkZHN0cigmc2IsICJHSVRfQVVUSE9SX0RBVEU9Iik7CisJc3FfcXVvdGVfYnVmKCZzYiwgc3RhdGUtPmF1dGhvcl9kYXRlKTsKKwlzdHJidWZfYWRkY2goJnNiLCAnXG4nKTsKKworCXdyaXRlX3N0YXRlX3RleHQoc3RhdGUsICJhdXRob3Itc2NyaXB0Iiwgc2IuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKKy8qKgorICogUmVhZHMgdGhlIGNvbW1pdCBtZXNzYWdlIGZyb20gdGhlIHN0YXRlIGRpcmVjdG9yeSdzICJmaW5hbC1jb21taXQiIGZpbGUsCisgKiBzZXR0aW5nIHN0YXRlLT5tc2cgdG8gaXRzIGNvbnRlbnRzIGFuZCBzdGF0ZS0+bXNnX2xlbiB0byB0aGUgbGVuZ3RoIG9mIGl0cworICogY29udGVudHMgaW4gYnl0ZXMuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LgorICovCitzdGF0aWMgaW50IHJlYWRfY29tbWl0X21zZyhzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWFzc2VydCghc3RhdGUtPm1zZyk7CisKKwlpZiAocmVhZF9zdGF0ZV9maWxlKCZzYiwgc3RhdGUsICJmaW5hbC1jb21taXQiLCAwKSA8IDApIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0YXRlLT5tc2cgPSBzdHJidWZfZGV0YWNoKCZzYiwgJnN0YXRlLT5tc2dfbGVuKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTYXZlcyBzdGF0ZS0+bXNnIGluIHRoZSBzdGF0ZSBkaXJlY3RvcnkncyAiZmluYWwtY29tbWl0IiBmaWxlLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9jb21taXRfbXNnKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJaW50IGZkOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gYW1fcGF0aChzdGF0ZSwgImZpbmFsLWNvbW1pdCIpOworCisJZmQgPSB4b3BlbihmaWxlbmFtZSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgc3RhdGUtPm1zZywgc3RhdGUtPm1zZ19sZW4pIDwgMCkKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSB0byAlcyIpLCBmaWxlbmFtZSk7CisJY2xvc2UoZmQpOworfQorCisvKioKKyAqIExvYWRzIHN0YXRlIGZyb20gZGlzay4KKyAqLworc3RhdGljIHZvaWQgYW1fbG9hZChzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmIChyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgIm5leHQiLCAxKSA8IDApCisJCWRpZSgiQlVHOiBzdGF0ZSBmaWxlICduZXh0JyBkb2VzIG5vdCBleGlzdCIpOworCXN0YXRlLT5jdXIgPSBzdHJ0b2woc2IuYnVmLCBOVUxMLCAxMCk7CisKKwlpZiAocmVhZF9zdGF0ZV9maWxlKCZzYiwgc3RhdGUsICJsYXN0IiwgMSkgPCAwKQorCQlkaWUoIkJVRzogc3RhdGUgZmlsZSAnbGFzdCcgZG9lcyBub3QgZXhpc3QiKTsKKwlzdGF0ZS0+bGFzdCA9IHN0cnRvbChzYi5idWYsIE5VTEwsIDEwKTsKKworCWlmIChyZWFkX2F1dGhvcl9zY3JpcHQoc3RhdGUpIDwgMCkKKwkJZGllKF8oImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IikpOworCisJcmVhZF9jb21taXRfbXNnKHN0YXRlKTsKKworCWlmIChyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgIm9yaWdpbmFsLWNvbW1pdCIsIDEpIDwgMCkKKwkJaGFzaGNscihzdGF0ZS0+b3JpZ19jb21taXQpOworCWVsc2UgaWYgKGdldF9zaGExX2hleChzYi5idWYsIHN0YXRlLT5vcmlnX2NvbW1pdCkgPCAwKQorCQlkaWUoXygiY291bGQgbm90IHBhcnNlICVzIiksIGFtX3BhdGgoc3RhdGUsICJvcmlnaW5hbC1jb21taXQiKSk7CisKKwlyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgInRocmVld2F5IiwgMSk7CisJc3RhdGUtPnRocmVld2F5ID0gIXN0cmNtcChzYi5idWYsICJ0Iik7CisKKwlyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgInF1aWV0IiwgMSk7CisJc3RhdGUtPnF1aWV0ID0gIXN0cmNtcChzYi5idWYsICJ0Iik7CisKKwlyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgInNpZ24iLCAxKTsKKwlzdGF0ZS0+c2lnbm9mZiA9ICFzdHJjbXAoc2IuYnVmLCAidCIpOworCisJcmVhZF9zdGF0ZV9maWxlKCZzYiwgc3RhdGUsICJ1dGY4IiwgMSk7CisJc3RhdGUtPnV0ZjggPSAhc3RyY21wKHNiLmJ1ZiwgInQiKTsKKworCXJlYWRfc3RhdGVfZmlsZSgmc2IsIHN0YXRlLCAia2VlcCIsIDEpOworCWlmICghc3RyY21wKHNiLmJ1ZiwgInQiKSkKKwkJc3RhdGUtPmtlZXAgPSBLRUVQX1RSVUU7CisJZWxzZSBpZiAoIXN0cmNtcChzYi5idWYsICJiIikpCisJCXN0YXRlLT5rZWVwID0gS0VFUF9OT05fUEFUQ0g7CisJZWxzZQorCQlzdGF0ZS0+a2VlcCA9IEtFRVBfRkFMU0U7CisKKwlyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgIm1lc3NhZ2VpZCIsIDEpOworCXN0YXRlLT5tZXNzYWdlX2lkID0gIXN0cmNtcChzYi5idWYsICJ0Iik7CisKKwlyZWFkX3N0YXRlX2ZpbGUoJnNiLCBzdGF0ZSwgInNjaXNzb3JzIiwgMSk7CisJaWYgKCFzdHJjbXAoc2IuYnVmLCAidCIpKQorCQlzdGF0ZS0+c2Npc3NvcnMgPSBTQ0lTU09SU19UUlVFOworCWVsc2UgaWYgKCFzdHJjbXAoc2IuYnVmLCAiZiIpKQorCQlzdGF0ZS0+c2Npc3NvcnMgPSBTQ0lTU09SU19GQUxTRTsKKwllbHNlCisJCXN0YXRlLT5zY2lzc29ycyA9IFNDSVNTT1JTX1VOU0VUOworCisJcmVhZF9zdGF0ZV9maWxlKCZzYiwgc3RhdGUsICJhcHBseS1vcHQiLCAxKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZzdGF0ZS0+Z2l0X2FwcGx5X29wdHMpOworCWlmIChzcV9kZXF1b3RlX3RvX2FyZ3ZfYXJyYXkoc2IuYnVmLCAmc3RhdGUtPmdpdF9hcHBseV9vcHRzKSA8IDApCisJCWRpZShfKCJjb3VsZCBub3QgcGFyc2UgJXMiKSwgYW1fcGF0aChzdGF0ZSwgImFwcGx5LW9wdCIpKTsKKworCXN0YXRlLT5yZWJhc2luZyA9ICEhZmlsZV9leGlzdHMoYW1fcGF0aChzdGF0ZSwgInJlYmFzaW5nIikpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworLyoqCisgKiBSZW1vdmVzIHRoZSBhbV9zdGF0ZSBkaXJlY3RvcnksIGZvcmNlZnVsbHkgdGVybWluYXRpbmcgdGhlIGN1cnJlbnQgYW0KKyAqIHNlc3Npb24uCisgKi8KK3N0YXRpYyB2b2lkIGFtX2Rlc3Ryb3koY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkc3RyKCZzYiwgc3RhdGUtPmRpcik7CisJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmc2IsIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKKy8qKgorICogUnVucyBhcHBseXBhdGNoLW1zZyBob29rLiBSZXR1cm5zIGl0cyBleGl0IGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcnVuX2FwcGx5cGF0Y2hfbXNnX2hvb2soc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQgcmV0OworCisJYXNzZXJ0KHN0YXRlLT5tc2cpOworCXJldCA9IHJ1bl9ob29rX2xlKE5VTEwsICJhcHBseXBhdGNoLW1zZyIsIGFtX3BhdGgoc3RhdGUsICJmaW5hbC1jb21taXQiKSwgTlVMTCk7CisKKwlpZiAoIXJldCkgeworCQlmcmVlKHN0YXRlLT5tc2cpOworCQlzdGF0ZS0+bXNnID0gTlVMTDsKKwkJaWYgKHJlYWRfY29tbWl0X21zZyhzdGF0ZSkgPCAwKQorCQkJZGllKF8oIiclcycgd2FzIGRlbGV0ZWQgYnkgdGhlIGFwcGx5cGF0Y2gtbXNnIGhvb2siKSwKKwkJCQlhbV9wYXRoKHN0YXRlLCAiZmluYWwtY29tbWl0IikpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogUnVucyBwb3N0LXJld3JpdGUgaG9vay4gUmV0dXJucyBpdCBleGl0IGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgcnVuX3Bvc3RfcmV3cml0ZV9ob29rKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqaG9vayA9IGZpbmRfaG9vaygicG9zdC1yZXdyaXRlIik7CisJaW50IHJldDsKKworCWlmICghaG9vaykKKwkJcmV0dXJuIDA7CisKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIGhvb2spOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgInJlYmFzZSIpOworCisJY3AuaW4gPSB4b3BlbihhbV9wYXRoKHN0YXRlLCAicmV3cml0dGVuIiksIE9fUkRPTkxZKTsKKwljcC5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKworCXJldCA9IHJ1bl9jb21tYW5kKCZjcCk7CisKKwljbG9zZShjcC5pbik7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBSZWFkcyB0aGUgc3RhdGUgZGlyZWN0b3J5J3MgInJld3JpdHRlbiIgZmlsZSwgYW5kIGNvcGllcyBub3RlcyBmcm9tIHRoZSBvbGQKKyAqIGNvbW1pdHMgbGlzdGVkIGluIHRoZSBmaWxlIHRvIHRoZWlyIHJld3JpdHRlbiBjb21taXRzLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGNvcHlfbm90ZXNfZm9yX3JlYmFzZShjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYzsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqaW52YWxpZF9saW5lID0gXygiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIik7CisJY29uc3QgY2hhciAqbXNnID0gIk5vdGVzIGFkZGVkIGJ5ICdnaXQgcmViYXNlJyI7CisJRklMRSAqZnA7CisJaW50IHJldCA9IDA7CisKKwlhc3NlcnQoc3RhdGUtPnJlYmFzaW5nKTsKKworCWMgPSBpbml0X2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoInJlYmFzZSIpOworCWlmICghYykKKwkJcmV0dXJuIDA7CisKKwlmcCA9IHhmb3BlbihhbV9wYXRoKHN0YXRlLCAicmV3cml0dGVuIiksICJyIik7CisKKwl3aGlsZSAoIXN0cmJ1Zl9nZXRsaW5lKCZzYiwgZnAsICdcbicpKSB7CisJCXVuc2lnbmVkIGNoYXIgZnJvbV9vYmpbR0lUX1NIQTFfUkFXU1pdLCB0b19vYmpbR0lUX1NIQTFfUkFXU1pdOworCisJCWlmIChzYi5sZW4gIT0gR0lUX1NIQTFfSEVYU1ogKiAyICsgMSkgeworCQkJcmV0ID0gZXJyb3IoaW52YWxpZF9saW5lLCBzYi5idWYpOworCQkJZ290byBmaW5pc2g7CisJCX0KKworCQlpZiAoZ2V0X3NoYTFfaGV4KHNiLmJ1ZiwgZnJvbV9vYmopKSB7CisJCQlyZXQgPSBlcnJvcihpbnZhbGlkX2xpbmUsIHNiLmJ1Zik7CisJCQlnb3RvIGZpbmlzaDsKKwkJfQorCisJCWlmIChzYi5idWZbR0lUX1NIQTFfSEVYU1pdICE9ICcgJykgeworCQkJcmV0ID0gZXJyb3IoaW52YWxpZF9saW5lLCBzYi5idWYpOworCQkJZ290byBmaW5pc2g7CisJCX0KKworCQlpZiAoZ2V0X3NoYTFfaGV4KHNiLmJ1ZiArIEdJVF9TSEExX0hFWFNaICsgMSwgdG9fb2JqKSkgeworCQkJcmV0ID0gZXJyb3IoaW52YWxpZF9saW5lLCBzYi5idWYpOworCQkJZ290byBmaW5pc2g7CisJCX0KKworCQlpZiAoY29weV9ub3RlX2Zvcl9yZXdyaXRlKGMsIGZyb21fb2JqLCB0b19vYmopKQorCQkJcmV0ID0gZXJyb3IoXygiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciKSwKKwkJCQkJc2hhMV90b19oZXgoZnJvbV9vYmopLCBzaGExX3RvX2hleCh0b19vYmopKTsKKwl9CisKK2ZpbmlzaDoKKwlmaW5pc2hfY29weV9ub3Rlc19mb3JfcmV3cml0ZShjLCBtc2cpOworCWZjbG9zZShmcCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIERldGVybWluZXMgaWYgdGhlIGZpbGUgbG9va3MgbGlrZSBhIHBpZWNlIG9mIFJGQzI4MjIgbWFpbCBieSBncmFiYmluZyBhbGwKKyAqIG5vbi1pbmRlbnRlZCBsaW5lcyBhbmQgY2hlY2tpbmcgaWYgdGhleSBsb29rIGxpa2UgdGhleSBiZWdpbiB3aXRoIHZhbGlkCisgKiBoZWFkZXIgZmllbGQgbmFtZXMuCisgKgorICogUmV0dXJucyAxIGlmIHRoZSBmaWxlIGxvb2tzIGxpa2UgYSBwaWVjZSBvZiBtYWlsLCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBpc19tYWlsKEZJTEUgKmZwKQoreworCWNvbnN0IGNoYXIgKmhlYWRlcl9yZWdleCA9ICJeWyEtOTstfl0rOiI7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXJlZ2V4X3QgcmVnZXg7CisJaW50IHJldCA9IDE7CisKKwlpZiAoZnNlZWsoZnAsIDBMLCBTRUVLX1NFVCkpCisJCWRpZV9lcnJubyhfKCJmc2VlayBmYWlsZWQiKSk7CisKKwlpZiAocmVnY29tcCgmcmVnZXgsIGhlYWRlcl9yZWdleCwgUkVHX05PU1VCIHwgUkVHX0VYVEVOREVEKSkKKwkJZGllKCJpbnZhbGlkIHBhdHRlcm46ICVzIiwgaGVhZGVyX3JlZ2V4KTsKKworCXdoaWxlICghc3RyYnVmX2dldGxpbmVfY3JsZigmc2IsIGZwKSkgeworCQlpZiAoIXNiLmxlbikKKwkJCWJyZWFrOyAvKiBFbmQgb2YgaGVhZGVyICovCisKKwkJLyogSWdub3JlIGluZGVudGVkIGZvbGRlZCBsaW5lcyAqLworCQlpZiAoKnNiLmJ1ZiA9PSAnXHQnIHx8ICpzYi5idWYgPT0gJyAnKQorCQkJY29udGludWU7CisKKwkJLyogSXQncyBhIGhlYWRlciBpZiBpdCBtYXRjaGVzIGhlYWRlcl9yZWdleCAqLworCQlpZiAocmVnZXhlYygmcmVnZXgsIHNiLmJ1ZiwgMCwgTlVMTCwgMCkpIHsKKwkJCXJldCA9IDA7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKK2RvbmU6CisJcmVnZnJlZSgmcmVnZXgpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBBdHRlbXB0cyB0byBkZXRlY3QgdGhlIHBhdGNoX2Zvcm1hdCBvZiB0aGUgcGF0Y2hlcyBjb250YWluZWQgaW4gYHBhdGhzYCwKKyAqIHJldHVybmluZyB0aGUgUEFUQ0hfRk9STUFUXyogZW51bSB2YWx1ZS4gUmV0dXJucyBQQVRDSF9GT1JNQVRfVU5LTk9XTiBpZgorICogZGV0ZWN0aW9uIGZhaWxzLgorICovCitzdGF0aWMgaW50IGRldGVjdF9wYXRjaF9mb3JtYXQoY29uc3QgY2hhciAqKnBhdGhzKQoreworCWVudW0gcGF0Y2hfZm9ybWF0IHJldCA9IFBBVENIX0ZPUk1BVF9VTktOT1dOOworCXN0cnVjdCBzdHJidWYgbDEgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGwyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBsMyA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZwOworCisJLyoKKwkgKiBXZSBkZWZhdWx0IHRvIG1ib3ggZm9ybWF0IGlmIGlucHV0IGlzIGZyb20gc3RkaW4gYW5kIGZvciBkaXJlY3RvcmllcworCSAqLworCWlmICghKnBhdGhzIHx8ICFzdHJjbXAoKnBhdGhzLCAiLSIpIHx8IGlzX2RpcmVjdG9yeSgqcGF0aHMpKQorCQlyZXR1cm4gUEFUQ0hfRk9STUFUX01CT1g7CisKKwkvKgorCSAqIE90aGVyd2lzZSwgY2hlY2sgdGhlIGZpcnN0IGZldyBsaW5lcyBvZiB0aGUgZmlyc3QgcGF0Y2gsIHN0YXJ0aW5nCisJICogZnJvbSB0aGUgZmlyc3Qgbm9uLWJsYW5rIGxpbmUsIHRvIHRyeSB0byBkZXRlY3QgaXRzIGZvcm1hdC4KKwkgKi8KKworCWZwID0geGZvcGVuKCpwYXRocywgInIiKTsKKworCXdoaWxlICghc3RyYnVmX2dldGxpbmVfY3JsZigmbDEsIGZwKSkgeworCQlpZiAobDEubGVuKQorCQkJYnJlYWs7CisJfQorCisJaWYgKHN0YXJ0c193aXRoKGwxLmJ1ZiwgIkZyb20gIikgfHwgc3RhcnRzX3dpdGgobDEuYnVmLCAiRnJvbTogIikpIHsKKwkJcmV0ID0gUEFUQ0hfRk9STUFUX01CT1g7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoc3RhcnRzX3dpdGgobDEuYnVmLCAiIyBUaGlzIHNlcmllcyBhcHBsaWVzIG9uIEdJVCBjb21taXQiKSkgeworCQlyZXQgPSBQQVRDSF9GT1JNQVRfU1RHSVRfU0VSSUVTOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKCFzdHJjbXAobDEuYnVmLCAiIyBIRyBjaGFuZ2VzZXQgcGF0Y2giKSkgeworCQlyZXQgPSBQQVRDSF9GT1JNQVRfSEc7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlzdHJidWZfcmVzZXQoJmwyKTsKKwlzdHJidWZfZ2V0bGluZV9jcmxmKCZsMiwgZnApOworCXN0cmJ1Zl9yZXNldCgmbDMpOworCXN0cmJ1Zl9nZXRsaW5lX2NybGYoJmwzLCBmcCk7CisKKwkvKgorCSAqIElmIHRoZSBzZWNvbmQgbGluZSBpcyBlbXB0eSBhbmQgdGhlIHRoaXJkIGlzIGEgRnJvbSwgQXV0aG9yIG9yIERhdGUKKwkgKiBlbnRyeSwgdGhpcyBpcyBsaWtlbHkgYW4gU3RHaXQgcGF0Y2guCisJICovCisJaWYgKGwxLmxlbiAmJiAhbDIubGVuICYmCisJCShzdGFydHNfd2l0aChsMy5idWYsICJGcm9tOiIpIHx8CisJCSBzdGFydHNfd2l0aChsMy5idWYsICJBdXRob3I6IikgfHwKKwkJIHN0YXJ0c193aXRoKGwzLmJ1ZiwgIkRhdGU6IikpKSB7CisJCXJldCA9IFBBVENIX0ZPUk1BVF9TVEdJVDsKKwkJZ290byBkb25lOworCX0KKworCWlmIChsMS5sZW4gJiYgaXNfbWFpbChmcCkpIHsKKwkJcmV0ID0gUEFUQ0hfRk9STUFUX01CT1g7CisJCWdvdG8gZG9uZTsKKwl9CisKK2RvbmU6CisJZmNsb3NlKGZwKTsKKwlzdHJidWZfcmVsZWFzZSgmbDEpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogU3BsaXRzIG91dCBpbmRpdmlkdWFsIGVtYWlsIHBhdGNoZXMgZnJvbSBgcGF0aHNgLCB3aGVyZSBlYWNoIHBhdGggaXMgZWl0aGVyCisgKiBhIG1ib3ggZmlsZSBvciBhIE1haWxkaXIuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHNwbGl0X21haWxfbWJveChzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICoqcGF0aHMsIGludCBrZWVwX2NyKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgbGFzdCA9IFNUUkJVRl9JTklUOworCisJY3AuZ2l0X2NtZCA9IDE7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAibWFpbHNwbGl0Iik7CisJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIi1kJWQiLCBzdGF0ZS0+cHJlYyk7CisJYXJndl9hcnJheV9wdXNoZigmY3AuYXJncywgIi1vJXMiLCBzdGF0ZS0+ZGlyKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItYiIpOworCWlmIChrZWVwX2NyKQorCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLWtlZXAtY3IiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLSIpOworCWFyZ3ZfYXJyYXlfcHVzaHYoJmNwLmFyZ3MsIHBhdGhzKTsKKworCWlmIChjYXB0dXJlX2NvbW1hbmQoJmNwLCAmbGFzdCwgOCkpCisJCXJldHVybiAtMTsKKworCXN0YXRlLT5jdXIgPSAxOworCXN0YXRlLT5sYXN0ID0gc3RydG9sKGxhc3QuYnVmLCBOVUxMLCAxMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDYWxsYmFjayBzaWduYXR1cmUgZm9yIHNwbGl0X21haWxfY29udigpLiBUaGUgZm9yZWlnbiBwYXRjaCBzaG91bGQgYmUKKyAqIHJlYWQgZnJvbSBgaW5gLCBhbmQgdGhlIGNvbnZlcnRlZCBwYXRjaCAoaW4gUkZDMjgyMiBtYWlsIGZvcm1hdCkgc2hvdWxkIGJlCisgKiB3cml0dGVuIHRvIGBvdXRgLiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBmYWlsdXJlLgorICovCit0eXBlZGVmIGludCAoKm1haWxfY29udl9mbikoRklMRSAqb3V0LCBGSUxFICppbiwgaW50IGtlZXBfY3IpOworCisvKioKKyAqIENhbGxzIGBmbmAgZm9yIGVhY2ggZmlsZSBpbiBgcGF0aHNgIHRvIGNvbnZlcnQgdGhlIGZvcmVpZ24gcGF0Y2ggdG8gdGhlCisgKiBSRkMyODIyIG1haWwgZm9ybWF0IHN1aXRhYmxlIGZvciBwYXJzaW5nIHdpdGggZ2l0LW1haWxpbmZvLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHNwbGl0X21haWxfY29udihtYWlsX2NvbnZfZm4gZm4sIHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsCisJCQljb25zdCBjaGFyICoqcGF0aHMsIGludCBrZWVwX2NyKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpzdGRpbl9vbmx5W10gPSB7Ii0iLCBOVUxMfTsKKwlpbnQgaTsKKworCWlmICghKnBhdGhzKQorCQlwYXRocyA9IHN0ZGluX29ubHk7CisKKwlmb3IgKGkgPSAwOyAqcGF0aHM7IHBhdGhzKyssIGkrKykgeworCQlGSUxFICppbiwgKm91dDsKKwkJY29uc3QgY2hhciAqbWFpbDsKKwkJaW50IHJldDsKKworCQlpZiAoIXN0cmNtcCgqcGF0aHMsICItIikpCisJCQlpbiA9IHN0ZGluOworCQllbHNlCisJCQlpbiA9IGZvcGVuKCpwYXRocywgInIiKTsKKworCQlpZiAoIWluKQorCQkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmc6ICVzIiksCisJCQkJCSpwYXRocywgc3RyZXJyb3IoZXJybm8pKTsKKworCQltYWlsID0gbWtwYXRoKCIlcy8lMCpkIiwgc3RhdGUtPmRpciwgc3RhdGUtPnByZWMsIGkgKyAxKTsKKworCQlvdXQgPSBmb3BlbihtYWlsLCAidyIpOworCQlpZiAoIW91dCkKKwkJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIpLAorCQkJCQltYWlsLCBzdHJlcnJvcihlcnJubykpOworCisJCXJldCA9IGZuKG91dCwgaW4sIGtlZXBfY3IpOworCisJCWZjbG9zZShvdXQpOworCQlmY2xvc2UoaW4pOworCisJCWlmIChyZXQpCisJCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciKSwgKnBhdGhzKTsKKwl9CisKKwlzdGF0ZS0+Y3VyID0gMTsKKwlzdGF0ZS0+bGFzdCA9IGk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQSBzcGxpdF9tYWlsX2NvbnYoKSBjYWxsYmFjayB0aGF0IGNvbnZlcnRzIGFuIFN0R2l0IHBhdGNoIHRvIGFuIFJGQzI4MjIKKyAqIG1lc3NhZ2Ugc3VpdGFibGUgZm9yIHBhcnNpbmcgd2l0aCBnaXQtbWFpbGluZm8uCisgKi8KK3N0YXRpYyBpbnQgc3RnaXRfcGF0Y2hfdG9fbWFpbChGSUxFICpvdXQsIEZJTEUgKmluLCBpbnQga2VlcF9jcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IHN1YmplY3RfcHJpbnRlZCA9IDA7CisKKwl3aGlsZSAoIXN0cmJ1Zl9nZXRsaW5lKCZzYiwgaW4sICdcbicpKSB7CisJCWNvbnN0IGNoYXIgKnN0cjsKKworCQlpZiAoc3RyX2lzc3BhY2Uoc2IuYnVmKSkKKwkJCWNvbnRpbnVlOworCQllbHNlIGlmIChza2lwX3ByZWZpeChzYi5idWYsICJBdXRob3I6IiwgJnN0cikpCisJCQlmcHJpbnRmKG91dCwgIkZyb206JXNcbiIsIHN0cik7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNiLmJ1ZiwgIkZyb20iKSB8fCBzdGFydHNfd2l0aChzYi5idWYsICJEYXRlIikpCisJCQlmcHJpbnRmKG91dCwgIiVzXG4iLCBzYi5idWYpOworCQllbHNlIGlmICghc3ViamVjdF9wcmludGVkKSB7CisJCQlmcHJpbnRmKG91dCwgIlN1YmplY3Q6ICVzXG4iLCBzYi5idWYpOworCQkJc3ViamVjdF9wcmludGVkID0gMTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYob3V0LCAiXG4lc1xuIiwgc2IuYnVmKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3RyYnVmX3Jlc2V0KCZzYik7CisJd2hpbGUgKHN0cmJ1Zl9mcmVhZCgmc2IsIDgxOTIsIGluKSA+IDApIHsKKwkJZndyaXRlKHNiLmJ1ZiwgMSwgc2IubGVuLCBvdXQpOworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiAwOworfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBhIHNpbmdsZSBTdEdpdCBzZXJpZXMgZmlsZSBpbiBgcGF0aHNgLgorICoKKyAqIEdpdmVuIGFuIFN0R2l0IHNlcmllcyBmaWxlLCBjb252ZXJ0cyB0aGUgU3RHaXQgcGF0Y2hlcyBpbiB0aGUgc2VyaWVzIGludG8KKyAqIFJGQzI4MjIgbWVzc2FnZXMgc3VpdGFibGUgZm9yIHBhcnNpbmcgd2l0aCBnaXQtbWFpbGluZm8sIGFuZCBxdWV1ZXMgdGhlbSBpbgorICogdGhlIHN0YXRlIGRpcmVjdG9yeS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBzcGxpdF9tYWlsX3N0Z2l0X3NlcmllcyhzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICoqcGF0aHMsCisJCQkJCWludCBrZWVwX2NyKQoreworCWNvbnN0IGNoYXIgKnNlcmllc19kaXI7CisJY2hhciAqc2VyaWVzX2Rpcl9idWY7CisJRklMRSAqZnA7CisJc3RydWN0IGFyZ3ZfYXJyYXkgcGF0Y2hlcyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKworCWlmICghcGF0aHNbMF0gfHwgcGF0aHNbMV0pCisJCXJldHVybiBlcnJvcihfKCJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIpKTsKKworCXNlcmllc19kaXJfYnVmID0geHN0cmR1cCgqcGF0aHMpOworCXNlcmllc19kaXIgPSBkaXJuYW1lKHNlcmllc19kaXJfYnVmKTsKKworCWZwID0gZm9wZW4oKnBhdGhzLCAiciIpOworCWlmICghZnApCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nOiAlcyIpLCAqcGF0aHMsCisJCQkJc3RyZXJyb3IoZXJybm8pKTsKKworCXdoaWxlICghc3RyYnVmX2dldGxpbmUoJnNiLCBmcCwgJ1xuJykpIHsKKwkJaWYgKCpzYi5idWYgPT0gJyMnKQorCQkJY29udGludWU7IC8qIHNraXAgY29tbWVudCBsaW5lcyAqLworCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGF0Y2hlcywgbWtwYXRoKCIlcy8lcyIsIHNlcmllc19kaXIsIHNiLmJ1ZikpOworCX0KKworCWZjbG9zZShmcCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlmcmVlKHNlcmllc19kaXJfYnVmKTsKKworCXJldCA9IHNwbGl0X21haWxfY29udihzdGdpdF9wYXRjaF90b19tYWlsLCBzdGF0ZSwgcGF0Y2hlcy5hcmd2LCBrZWVwX2NyKTsKKworCWFyZ3ZfYXJyYXlfY2xlYXIoJnBhdGNoZXMpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogQSBzcGxpdF9wYXRjaGVzX2NvbnYoKSBjYWxsYmFjayB0aGF0IGNvbnZlcnRzIGEgbWVyY3VyaWFsIHBhdGNoIHRvIGEgUkZDMjgyMgorICogbWVzc2FnZSBzdWl0YWJsZSBmb3IgcGFyc2luZyB3aXRoIGdpdC1tYWlsaW5mby4KKyAqLworc3RhdGljIGludCBoZ19wYXRjaF90b19tYWlsKEZJTEUgKm91dCwgRklMRSAqaW4sIGludCBrZWVwX2NyKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCXdoaWxlICghc3RyYnVmX2dldGxpbmUoJnNiLCBpbiwgJ1xuJykpIHsKKwkJY29uc3QgY2hhciAqc3RyOworCisJCWlmIChza2lwX3ByZWZpeChzYi5idWYsICIjIFVzZXIgIiwgJnN0cikpCisJCQlmcHJpbnRmKG91dCwgIkZyb206ICVzXG4iLCBzdHIpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChzYi5idWYsICIjIERhdGUgIiwgJnN0cikpIHsKKwkJCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOworCQkJbG9uZyB0eiwgdHoyOworCQkJY2hhciAqZW5kOworCisJCQllcnJubyA9IDA7CisJCQl0aW1lc3RhbXAgPSBzdHJ0b3VsKHN0ciwgJmVuZCwgMTApOworCQkJaWYgKGVycm5vKQorCQkJCXJldHVybiBlcnJvcihfKCJpbnZhbGlkIHRpbWVzdGFtcCIpKTsKKworCQkJaWYgKCFza2lwX3ByZWZpeChlbmQsICIgIiwgJnN0cikpCisJCQkJcmV0dXJuIGVycm9yKF8oImludmFsaWQgRGF0ZSBsaW5lIikpOworCisJCQllcnJubyA9IDA7CisJCQl0eiA9IHN0cnRvbChzdHIsICZlbmQsIDEwKTsKKwkJCWlmIChlcnJubykKKwkJCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiKSk7CisKKwkJCWlmICgqZW5kKQorCQkJCXJldHVybiBlcnJvcihfKCJpbnZhbGlkIERhdGUgbGluZSIpKTsKKworCQkJLyoKKwkJCSAqIG1lcmN1cmlhbCdzIHRpbWV6b25lIGlzIGluIHNlY29uZHMgd2VzdCBvZiBVVEMsCisJCQkgKiBob3dldmVyIGdpdCdzIHRpbWV6b25lIGlzIGluIGhvdXJzICsgbWludXRlcyBlYXN0IG9mCisJCQkgKiBVVEMuIENvbnZlcnQgaXQuCisJCQkgKi8KKwkJCXR6MiA9IGxhYnModHopIC8gMzYwMCAqIDEwMCArIGxhYnModHopICUgMzYwMCAvIDYwOworCQkJaWYgKHR6ID4gMCkKKwkJCQl0ejIgPSAtdHoyOworCisJCQlmcHJpbnRmKG91dCwgIkRhdGU6ICVzXG4iLCBzaG93X2RhdGUodGltZXN0YW1wLCB0ejIsIERBVEVfTU9ERShSRkMyODIyKSkpOworCQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKHNiLmJ1ZiwgIiMgIikpIHsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJZnByaW50ZihvdXQsICJcbiVzXG4iLCBzYi5idWYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwl3aGlsZSAoc3RyYnVmX2ZyZWFkKCZzYiwgODE5MiwgaW4pID4gMCkgeworCQlmd3JpdGUoc2IuYnVmLCAxLCBzYi5sZW4sIG91dCk7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogU3BsaXRzIGEgbGlzdCBvZiBmaWxlcy9kaXJlY3RvcmllcyBpbnRvIGluZGl2aWR1YWwgZW1haWwgcGF0Y2hlcy4gRWFjaCBwYXRoCisgKiBpbiBgcGF0aHNgIG11c3QgYmUgYSBmaWxlL2RpcmVjdG9yeSB0aGF0IGlzIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8KKyAqIGBwYXRjaF9mb3JtYXRgLgorICoKKyAqIE9uY2Ugc3BsaXQgb3V0LCB0aGUgaW5kaXZpZHVhbCBlbWFpbCBwYXRjaGVzIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBzdGF0ZQorICogZGlyZWN0b3J5LCB3aXRoIGVhY2ggcGF0Y2gncyBmaWxlbmFtZSBiZWluZyBpdHMgaW5kZXgsIHBhZGRlZCB0byBzdGF0ZS0+cHJlYworICogZGlnaXRzLgorICoKKyAqIHN0YXRlLT5jdXIgd2lsbCBiZSBzZXQgdG8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBtYWlsLCBhbmQgc3RhdGUtPmxhc3Qgd2lsbAorICogYmUgc2V0IHRvIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBtYWlsLgorICoKKyAqIFNldCBrZWVwX2NyIHRvIDAgdG8gY29udmVydCBhbGwgbGluZXMgZW5kaW5nIHdpdGggXHJcbiB0byBlbmQgd2l0aCBcbiwgMQorICogdG8gZGlzYWJsZSB0aGlzIGJlaGF2aW9yLCAtMSB0byB1c2UgdGhlIGRlZmF1bHQgY29uZmlndXJlZCBzZXR0aW5nLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHNwbGl0X21haWwoc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwgZW51bSBwYXRjaF9mb3JtYXQgcGF0Y2hfZm9ybWF0LAorCQkJY29uc3QgY2hhciAqKnBhdGhzLCBpbnQga2VlcF9jcikKK3sKKwlpZiAoa2VlcF9jciA8IDApIHsKKwkJa2VlcF9jciA9IDA7CisJCWdpdF9jb25maWdfZ2V0X2Jvb2woImFtLmtlZXBjciIsICZrZWVwX2NyKTsKKwl9CisKKwlzd2l0Y2ggKHBhdGNoX2Zvcm1hdCkgeworCWNhc2UgUEFUQ0hfRk9STUFUX01CT1g6CisJCXJldHVybiBzcGxpdF9tYWlsX21ib3goc3RhdGUsIHBhdGhzLCBrZWVwX2NyKTsKKwljYXNlIFBBVENIX0ZPUk1BVF9TVEdJVDoKKwkJcmV0dXJuIHNwbGl0X21haWxfY29udihzdGdpdF9wYXRjaF90b19tYWlsLCBzdGF0ZSwgcGF0aHMsIGtlZXBfY3IpOworCWNhc2UgUEFUQ0hfRk9STUFUX1NUR0lUX1NFUklFUzoKKwkJcmV0dXJuIHNwbGl0X21haWxfc3RnaXRfc2VyaWVzKHN0YXRlLCBwYXRocywga2VlcF9jcik7CisJY2FzZSBQQVRDSF9GT1JNQVRfSEc6CisJCXJldHVybiBzcGxpdF9tYWlsX2NvbnYoaGdfcGF0Y2hfdG9fbWFpbCwgc3RhdGUsIHBhdGhzLCBrZWVwX2NyKTsKKwlkZWZhdWx0OgorCQlkaWUoIkJVRzogaW52YWxpZCBwYXRjaF9mb3JtYXQiKTsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKioKKyAqIFNldHVwIGEgbmV3IGFtIHNlc3Npb24gZm9yIGFwcGx5aW5nIHBhdGNoZXMKKyAqLworc3RhdGljIHZvaWQgYW1fc2V0dXAoc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwgZW51bSBwYXRjaF9mb3JtYXQgcGF0Y2hfZm9ybWF0LAorCQkJY29uc3QgY2hhciAqKnBhdGhzLCBpbnQga2VlcF9jcikKK3sKKwl1bnNpZ25lZCBjaGFyIGN1cnJfaGVhZFtHSVRfU0hBMV9SQVdTWl07CisJY29uc3QgY2hhciAqc3RyOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmICghcGF0Y2hfZm9ybWF0KQorCQlwYXRjaF9mb3JtYXQgPSBkZXRlY3RfcGF0Y2hfZm9ybWF0KHBhdGhzKTsKKworCWlmICghcGF0Y2hfZm9ybWF0KSB7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iKSk7CisJCWV4aXQoMTI4KTsKKwl9CisKKwlpZiAobWtkaXIoc3RhdGUtPmRpciwgMDc3NykgPCAwICYmIGVycm5vICE9IEVFWElTVCkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciKSwgc3RhdGUtPmRpcik7CisKKwlpZiAoc3BsaXRfbWFpbChzdGF0ZSwgcGF0Y2hfZm9ybWF0LCBwYXRocywga2VlcF9jcikgPCAwKSB7CisJCWFtX2Rlc3Ryb3koc3RhdGUpOworCQlkaWUoXygiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIikpOworCX0KKworCWlmIChzdGF0ZS0+cmViYXNpbmcpCisJCXN0YXRlLT50aHJlZXdheSA9IDE7CisKKwl3cml0ZV9zdGF0ZV9ib29sKHN0YXRlLCAidGhyZWV3YXkiLCBzdGF0ZS0+dGhyZWV3YXkpOworCXdyaXRlX3N0YXRlX2Jvb2woc3RhdGUsICJxdWlldCIsIHN0YXRlLT5xdWlldCk7CisJd3JpdGVfc3RhdGVfYm9vbChzdGF0ZSwgInNpZ24iLCBzdGF0ZS0+c2lnbm9mZik7CisJd3JpdGVfc3RhdGVfYm9vbChzdGF0ZSwgInV0ZjgiLCBzdGF0ZS0+dXRmOCk7CisKKwlzd2l0Y2ggKHN0YXRlLT5rZWVwKSB7CisJY2FzZSBLRUVQX0ZBTFNFOgorCQlzdHIgPSAiZiI7CisJCWJyZWFrOworCWNhc2UgS0VFUF9UUlVFOgorCQlzdHIgPSAidCI7CisJCWJyZWFrOworCWNhc2UgS0VFUF9OT05fUEFUQ0g6CisJCXN0ciA9ICJiIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJCVUc6IGludmFsaWQgdmFsdWUgZm9yIHN0YXRlLT5rZWVwIik7CisJfQorCisJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgImtlZXAiLCBzdHIpOworCXdyaXRlX3N0YXRlX2Jvb2woc3RhdGUsICJtZXNzYWdlaWQiLCBzdGF0ZS0+bWVzc2FnZV9pZCk7CisKKwlzd2l0Y2ggKHN0YXRlLT5zY2lzc29ycykgeworCWNhc2UgU0NJU1NPUlNfVU5TRVQ6CisJCXN0ciA9ICIiOworCQlicmVhazsKKwljYXNlIFNDSVNTT1JTX0ZBTFNFOgorCQlzdHIgPSAiZiI7CisJCWJyZWFrOworCWNhc2UgU0NJU1NPUlNfVFJVRToKKwkJc3RyID0gInQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoIkJVRzogaW52YWxpZCB2YWx1ZSBmb3Igc3RhdGUtPnNjaXNzb3JzIik7CisJfQorCXdyaXRlX3N0YXRlX3RleHQoc3RhdGUsICJzY2lzc29ycyIsIHN0cik7CisKKwlzcV9xdW90ZV9hcmd2KCZzYiwgc3RhdGUtPmdpdF9hcHBseV9vcHRzLmFyZ3YsIDApOworCXdyaXRlX3N0YXRlX3RleHQoc3RhdGUsICJhcHBseS1vcHQiLCBzYi5idWYpOworCisJaWYgKHN0YXRlLT5yZWJhc2luZykKKwkJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgInJlYmFzaW5nIiwgIiIpOworCWVsc2UKKwkJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgImFwcGx5aW5nIiwgIiIpOworCisJaWYgKCFnZXRfc2hhMSgiSEVBRCIsIGN1cnJfaGVhZCkpIHsKKwkJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgImFib3J0LXNhZmV0eSIsIHNoYTFfdG9faGV4KGN1cnJfaGVhZCkpOworCQlpZiAoIXN0YXRlLT5yZWJhc2luZykKKwkJCXVwZGF0ZV9yZWYoImFtIiwgIk9SSUdfSEVBRCIsIGN1cnJfaGVhZCwgTlVMTCwgMCwKKwkJCQkJVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJfSBlbHNlIHsKKwkJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgImFib3J0LXNhZmV0eSIsICIiKTsKKwkJaWYgKCFzdGF0ZS0+cmViYXNpbmcpCisJCQlkZWxldGVfcmVmKCJPUklHX0hFQUQiLCBOVUxMLCAwKTsKKwl9CisKKwkvKgorCSAqIE5PVEU6IFNpbmNlIHRoZSAibmV4dCIgYW5kICJsYXN0IiBmaWxlcyBkZXRlcm1pbmUgaWYgYW4gYW1fc3RhdGUKKwkgKiBzZXNzaW9uIGlzIGluIHByb2dyZXNzLCB0aGV5IHNob3VsZCBiZSB3cml0dGVuIGxhc3QuCisJICovCisKKwl3cml0ZV9zdGF0ZV9jb3VudChzdGF0ZSwgIm5leHQiLCBzdGF0ZS0+Y3VyKTsKKwl3cml0ZV9zdGF0ZV9jb3VudChzdGF0ZSwgImxhc3QiLCBzdGF0ZS0+bGFzdCk7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCisvKioKKyAqIEluY3JlbWVudHMgdGhlIHBhdGNoIHBvaW50ZXIsIGFuZCBjbGVhbnMgYW1fc3RhdGUgZm9yIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUKKyAqIG5leHQgcGF0Y2guCisgKi8KK3N0YXRpYyB2b2lkIGFtX25leHQoc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGhlYWRbR0lUX1NIQTFfUkFXU1pdOworCisJZnJlZShzdGF0ZS0+YXV0aG9yX25hbWUpOworCXN0YXRlLT5hdXRob3JfbmFtZSA9IE5VTEw7CisKKwlmcmVlKHN0YXRlLT5hdXRob3JfZW1haWwpOworCXN0YXRlLT5hdXRob3JfZW1haWwgPSBOVUxMOworCisJZnJlZShzdGF0ZS0+YXV0aG9yX2RhdGUpOworCXN0YXRlLT5hdXRob3JfZGF0ZSA9IE5VTEw7CisKKwlmcmVlKHN0YXRlLT5tc2cpOworCXN0YXRlLT5tc2cgPSBOVUxMOworCXN0YXRlLT5tc2dfbGVuID0gMDsKKworCXVubGluayhhbV9wYXRoKHN0YXRlLCAiYXV0aG9yLXNjcmlwdCIpKTsKKwl1bmxpbmsoYW1fcGF0aChzdGF0ZSwgImZpbmFsLWNvbW1pdCIpKTsKKworCWhhc2hjbHIoc3RhdGUtPm9yaWdfY29tbWl0KTsKKwl1bmxpbmsoYW1fcGF0aChzdGF0ZSwgIm9yaWdpbmFsLWNvbW1pdCIpKTsKKworCWlmICghZ2V0X3NoYTEoIkhFQUQiLCBoZWFkKSkKKwkJd3JpdGVfc3RhdGVfdGV4dChzdGF0ZSwgImFib3J0LXNhZmV0eSIsIHNoYTFfdG9faGV4KGhlYWQpKTsKKwllbHNlCisJCXdyaXRlX3N0YXRlX3RleHQoc3RhdGUsICJhYm9ydC1zYWZldHkiLCAiIik7CisKKwlzdGF0ZS0+Y3VyKys7CisJd3JpdGVfc3RhdGVfY291bnQoc3RhdGUsICJuZXh0Iiwgc3RhdGUtPmN1cik7Cit9CisKKy8qKgorICogUmV0dXJucyB0aGUgZmlsZW5hbWUgb2YgdGhlIGN1cnJlbnQgcGF0Y2ggZW1haWwuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICptc2dudW0oY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZzYik7CisJc3RyYnVmX2FkZGYoJnNiLCAiJTAqZCIsIHN0YXRlLT5wcmVjLCBzdGF0ZS0+Y3VyKTsKKworCXJldHVybiBzYi5idWY7Cit9CisKKy8qKgorICogUmVmcmVzaCBhbmQgd3JpdGUgaW5kZXguCisgKi8KK3N0YXRpYyB2b2lkIHJlZnJlc2hfYW5kX3dyaXRlX2NhY2hlKHZvaWQpCit7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9ja19maWxlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOworCisJaG9sZF9sb2NrZWRfaW5kZXgobG9ja19maWxlLCAxKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIpKTsKK30KKworLyoqCisgKiBSZXR1cm5zIDEgaWYgdGhlIGluZGV4IGRpZmZlcnMgZnJvbSBIRUFELCAwIG90aGVyd2lzZS4gV2hlbiBvbiBhbiB1bmJvcm4KKyAqIGJyYW5jaCwgcmV0dXJucyAxIGlmIHRoZXJlIGFyZSBlbnRyaWVzIGluIHRoZSBpbmRleCwgMCBvdGhlcndpc2UuIElmIGFuCisgKiBzdHJidWYgaXMgcHJvdmlkZWQsIHRoZSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcyB0aGF0IGRpZmZlciB3aWxsIGJlCisgKiBhcHBlbmRlZCB0byBpdC4KKyAqLworc3RhdGljIGludCBpbmRleF9oYXNfY2hhbmdlcyhzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwl1bnNpZ25lZCBjaGFyIGhlYWRbR0lUX1NIQTFfUkFXU1pdOworCWludCBpOworCisJaWYgKCFnZXRfc2hhMV90cmVlKCJIRUFEIiwgaGVhZCkpIHsKKwkJc3RydWN0IGRpZmZfb3B0aW9ucyBvcHQ7CisKKwkJZGlmZl9zZXR1cCgmb3B0KTsKKwkJRElGRl9PUFRfU0VUKCZvcHQsIEVYSVRfV0lUSF9TVEFUVVMpOworCQlpZiAoIXNiKQorCQkJRElGRl9PUFRfU0VUKCZvcHQsIFFVSUNLKTsKKwkJZG9fZGlmZl9jYWNoZShoZWFkLCAmb3B0KTsKKwkJZGlmZmNvcmVfc3RkKCZvcHQpOworCQlmb3IgKGkgPSAwOyBzYiAmJiBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCQlpZiAoaSkKKwkJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldLT50d28tPnBhdGgpOworCQl9CisJCWRpZmZfZmx1c2goJm9wdCk7CisJCXJldHVybiBESUZGX09QVF9UU1QoJm9wdCwgSEFTX0NIQU5HRVMpICE9IDA7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgc2IgJiYgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCQlpZiAoaSkKKwkJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBhY3RpdmVfY2FjaGVbaV0tPm5hbWUpOworCQl9CisJCXJldHVybiAhIWFjdGl2ZV9ucjsKKwl9Cit9CisKKy8qKgorICogRGllcyB3aXRoIGEgdXNlci1mcmllbmRseSBtZXNzYWdlIG9uIGhvdyB0byBwcm9jZWVkIGFmdGVyIHJlc29sdmluZyB0aGUKKyAqIHByb2JsZW0uIFRoaXMgbWVzc2FnZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHN0YXRlLT5yZXNvbHZlbXNnLgorICovCitzdGF0aWMgdm9pZCBOT1JFVFVSTiBkaWVfdXNlcl9yZXNvbHZlKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKHN0YXRlLT5yZXNvbHZlbXNnKSB7CisJCXByaW50Zl9sbigiJXMiLCBzdGF0ZS0+cmVzb2x2ZW1zZyk7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqY21kbGluZSA9IHN0YXRlLT5pbnRlcmFjdGl2ZSA/ICJnaXQgYW0gLWkiIDogImdpdCBhbSI7CisKKwkJcHJpbnRmX2xuKF8oIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIiksIGNtZGxpbmUpOworCQlwcmludGZfbG4oXygiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIiksIGNtZGxpbmUpOworCQlwcmludGZfbG4oXygiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIiksIGNtZGxpbmUpOworCX0KKworCWV4aXQoMTI4KTsKK30KKworc3RhdGljIHZvaWQgYW1fc2lnbm9mZihzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwljaGFyICpjcDsKKwlzdHJ1Y3Qgc3RyYnVmIG1pbmUgPSBTVFJCVUZfSU5JVDsKKworCS8qIERvZXMgaXQgZW5kIHdpdGggb3VyIG93biBzaWduLW9mZj8gKi8KKwlzdHJidWZfYWRkZigmbWluZSwgIlxuJXMlc1xuIiwKKwkJICAgIHNpZ25fb2ZmX2hlYWRlciwKKwkJICAgIGZtdF9uYW1lKGdldGVudigiR0lUX0NPTU1JVFRFUl9OQU1FIiksCisJCQkgICAgIGdldGVudigiR0lUX0NPTU1JVFRFUl9FTUFJTCIpKSk7CisJaWYgKG1pbmUubGVuIDwgc2ItPmxlbiAmJgorCSAgICAhc3RyY21wKG1pbmUuYnVmLCBzYi0+YnVmICsgc2ItPmxlbiAtIG1pbmUubGVuKSkKKwkJZ290byBleGl0OyAvKiBubyBuZWVkIHRvIGR1cGxpY2F0ZSAqLworCisJLyogRG9lcyBpdCBoYXZlIGFueSBTaWduZWQtb2ZmLWJ5OiBpbiB0aGUgdGV4dCAqLworCWZvciAoY3AgPSBzYi0+YnVmOworCSAgICAgY3AgJiYgKmNwICYmIChjcCA9IHN0cnN0cihjcCwgc2lnbl9vZmZfaGVhZGVyKSkgIT0gTlVMTDsKKwkgICAgIGNwID0gc3RyY2hyKGNwLCAnXG4nKSkgeworCQlpZiAoc2ItPmJ1ZiA9PSBjcCB8fCBjcFstMV0gPT0gJ1xuJykKKwkJCWJyZWFrOworCX0KKworCXN0cmJ1Zl9hZGRzdHIoc2IsIG1pbmUuYnVmICsgISFjcCk7CitleGl0OgorCXN0cmJ1Zl9yZWxlYXNlKCZtaW5lKTsKK30KKworLyoqCisgKiBBcHBlbmRzIHNpZ25vZmYgdG8gdGhlICJtc2ciIGZpZWxkIG9mIHRoZSBhbV9zdGF0ZS4KKyAqLworc3RhdGljIHZvaWQgYW1fYXBwZW5kX3NpZ25vZmYoc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYXR0YWNoKCZzYiwgc3RhdGUtPm1zZywgc3RhdGUtPm1zZ19sZW4sIHN0YXRlLT5tc2dfbGVuKTsKKwlhbV9zaWdub2ZmKCZzYik7CisJc3RhdGUtPm1zZyA9IHN0cmJ1Zl9kZXRhY2goJnNiLCAmc3RhdGUtPm1zZ19sZW4pOworfQorCisvKioKKyAqIFBhcnNlcyBgbWFpbGAgdXNpbmcgZ2l0LW1haWxpbmZvLCBleHRyYWN0aW5nIGl0cyBwYXRjaCBhbmQgYXV0aG9yc2hpcCBpbmZvLgorICogc3RhdGUtPm1zZyB3aWxsIGJlIHNldCB0byB0aGUgcGF0Y2ggbWVzc2FnZS4gc3RhdGUtPmF1dGhvcl9uYW1lLAorICogc3RhdGUtPmF1dGhvcl9lbWFpbCBhbmQgc3RhdGUtPmF1dGhvcl9kYXRlIHdpbGwgYmUgc2V0IHRvIHRoZSBwYXRjaCBhdXRob3IncworICogbmFtZSwgZW1haWwgYW5kIGRhdGUgcmVzcGVjdGl2ZWx5LiBUaGUgcGF0Y2ggYm9keSB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlCisgKiBzdGF0ZSBkaXJlY3RvcnkncyAicGF0Y2giIGZpbGUuCisgKgorICogUmV0dXJucyAxIGlmIHRoZSBwYXRjaCBzaG91bGQgYmUgc2tpcHBlZCwgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfbWFpbChzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptYWlsKQoreworCUZJTEUgKmZwOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYXV0aG9yX25hbWUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGF1dGhvcl9kYXRlID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBhdXRob3JfZW1haWwgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbWFpbGluZm8gbWk7CisKKwlzZXR1cF9tYWlsaW5mbygmbWkpOworCisJaWYgKHN0YXRlLT51dGY4KQorCQltaS5tZXRhaW5mb19jaGFyc2V0ID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKKwllbHNlCisJCW1pLm1ldGFpbmZvX2NoYXJzZXQgPSBOVUxMOworCisJc3dpdGNoIChzdGF0ZS0+a2VlcCkgeworCWNhc2UgS0VFUF9GQUxTRToKKwkJYnJlYWs7CisJY2FzZSBLRUVQX1RSVUU6CisJCW1pLmtlZXBfc3ViamVjdCA9IDE7CisJCWJyZWFrOworCWNhc2UgS0VFUF9OT05fUEFUQ0g6CisJCW1pLmtlZXBfbm9uX3BhdGNoX2JyYWNrZXRzX2luX3N1YmplY3QgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoIkJVRzogaW52YWxpZCB2YWx1ZSBmb3Igc3RhdGUtPmtlZXAiKTsKKwl9CisKKwlpZiAoc3RhdGUtPm1lc3NhZ2VfaWQpCisJCW1pLmFkZF9tZXNzYWdlX2lkID0gMTsKKworCXN3aXRjaCAoc3RhdGUtPnNjaXNzb3JzKSB7CisJY2FzZSBTQ0lTU09SU19VTlNFVDoKKwkJYnJlYWs7CisJY2FzZSBTQ0lTU09SU19GQUxTRToKKwkJbWkudXNlX3NjaXNzb3JzID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTQ0lTU09SU19UUlVFOgorCQltaS51c2Vfc2Npc3NvcnMgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoIkJVRzogaW52YWxpZCB2YWx1ZSBmb3Igc3RhdGUtPnNjaXNzb3JzIik7CisJfQorCisJbWkuaW5wdXQgPSBmb3BlbihtYWlsLCAiciIpOworCWlmICghbWkuaW5wdXQpCisJCWRpZSgiY291bGQgbm90IG9wZW4gaW5wdXQiKTsKKwltaS5vdXRwdXQgPSBmb3BlbihhbV9wYXRoKHN0YXRlLCAiaW5mbyIpLCAidyIpOworCWlmICghbWkub3V0cHV0KQorCQlkaWUoImNvdWxkIG5vdCBvcGVuIG91dHB1dCAnaW5mbyciKTsKKwlpZiAobWFpbGluZm8oJm1pLCBhbV9wYXRoKHN0YXRlLCAibXNnIiksIGFtX3BhdGgoc3RhdGUsICJwYXRjaCIpKSkKKwkJZGllKCJjb3VsZCBub3QgcGFyc2UgcGF0Y2giKTsKKworCWZjbG9zZShtaS5pbnB1dCk7CisJZmNsb3NlKG1pLm91dHB1dCk7CisKKwkvKiBFeHRyYWN0IG1lc3NhZ2UgYW5kIGF1dGhvciBpbmZvcm1hdGlvbiAqLworCWZwID0geGZvcGVuKGFtX3BhdGgoc3RhdGUsICJpbmZvIiksICJyIik7CisJd2hpbGUgKCFzdHJidWZfZ2V0bGluZSgmc2IsIGZwLCAnXG4nKSkgeworCQljb25zdCBjaGFyICp4OworCisJCWlmIChza2lwX3ByZWZpeChzYi5idWYsICJTdWJqZWN0OiAiLCAmeCkpIHsKKwkJCWlmIChtc2cubGVuKQorCQkJCXN0cmJ1Zl9hZGRjaCgmbXNnLCAnXG4nKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZywgeCk7CisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoc2IuYnVmLCAiQXV0aG9yOiAiLCAmeCkpCisJCQlzdHJidWZfYWRkc3RyKCZhdXRob3JfbmFtZSwgeCk7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KHNiLmJ1ZiwgIkVtYWlsOiAiLCAmeCkpCisJCQlzdHJidWZfYWRkc3RyKCZhdXRob3JfZW1haWwsIHgpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChzYi5idWYsICJEYXRlOiAiLCAmeCkpCisJCQlzdHJidWZfYWRkc3RyKCZhdXRob3JfZGF0ZSwgeCk7CisJfQorCWZjbG9zZShmcCk7CisKKwkvKiBTa2lwIHBpbmUncyBpbnRlcm5hbCBmb2xkZXIgZGF0YSAqLworCWlmICghc3RyY21wKGF1dGhvcl9uYW1lLmJ1ZiwgIk1haWwgU3lzdGVtIEludGVybmFsIERhdGEiKSkgeworCQlyZXQgPSAxOworCQlnb3RvIGZpbmlzaDsKKwl9CisKKwlpZiAoaXNfZW1wdHlfZmlsZShhbV9wYXRoKHN0YXRlLCAicGF0Y2giKSkpIHsKKwkJcHJpbnRmX2xuKF8oIlBhdGNoIGlzIGVtcHR5LiBXYXMgaXQgc3BsaXQgd3Jvbmc/IikpOworCQlkaWVfdXNlcl9yZXNvbHZlKHN0YXRlKTsKKwl9CisKKwlzdHJidWZfYWRkc3RyKCZtc2csICJcblxuIik7CisJc3RyYnVmX2FkZGJ1ZigmbXNnLCAmbWkubG9nX21lc3NhZ2UpOworCXN0cmJ1Zl9zdHJpcHNwYWNlKCZtc2csIDApOworCisJaWYgKHN0YXRlLT5zaWdub2ZmKQorCQlhbV9zaWdub2ZmKCZtc2cpOworCisJYXNzZXJ0KCFzdGF0ZS0+YXV0aG9yX25hbWUpOworCXN0YXRlLT5hdXRob3JfbmFtZSA9IHN0cmJ1Zl9kZXRhY2goJmF1dGhvcl9uYW1lLCBOVUxMKTsKKworCWFzc2VydCghc3RhdGUtPmF1dGhvcl9lbWFpbCk7CisJc3RhdGUtPmF1dGhvcl9lbWFpbCA9IHN0cmJ1Zl9kZXRhY2goJmF1dGhvcl9lbWFpbCwgTlVMTCk7CisKKwlhc3NlcnQoIXN0YXRlLT5hdXRob3JfZGF0ZSk7CisJc3RhdGUtPmF1dGhvcl9kYXRlID0gc3RyYnVmX2RldGFjaCgmYXV0aG9yX2RhdGUsIE5VTEwpOworCisJYXNzZXJ0KCFzdGF0ZS0+bXNnKTsKKwlzdGF0ZS0+bXNnID0gc3RyYnVmX2RldGFjaCgmbXNnLCAmc3RhdGUtPm1zZ19sZW4pOworCitmaW5pc2g6CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisJc3RyYnVmX3JlbGVhc2UoJmF1dGhvcl9kYXRlKTsKKwlzdHJidWZfcmVsZWFzZSgmYXV0aG9yX2VtYWlsKTsKKwlzdHJidWZfcmVsZWFzZSgmYXV0aG9yX25hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJY2xlYXJfbWFpbGluZm8oJm1pKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIFNldHMgY29tbWl0X2lkIHRvIHRoZSBjb21taXQgaGFzaCB3aGVyZSB0aGUgbWFpbCB3YXMgZ2VuZXJhdGVkIGZyb20uCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBnZXRfbWFpbF9jb21taXRfc2hhMSh1bnNpZ25lZCBjaGFyICpjb21taXRfaWQsIGNvbnN0IGNoYXIgKm1haWwpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZwID0geGZvcGVuKG1haWwsICJyIik7CisJY29uc3QgY2hhciAqeDsKKworCWlmIChzdHJidWZfZ2V0bGluZSgmc2IsIGZwLCAnXG4nKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFza2lwX3ByZWZpeChzYi5idWYsICJGcm9tICIsICZ4KSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGdldF9zaGExX2hleCh4LCBjb21taXRfaWQpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlmY2xvc2UoZnApOworCXJldHVybiAwOworfQorCisvKioKKyAqIFNldHMgc3RhdGUtPm1zZywgc3RhdGUtPmF1dGhvcl9uYW1lLCBzdGF0ZS0+YXV0aG9yX2VtYWlsLCBzdGF0ZS0+YXV0aG9yX2RhdGUKKyAqIHRvIHRoZSBjb21taXQncyByZXNwZWN0aXZlIGluZm8uCisgKi8KK3N0YXRpYyB2b2lkIGdldF9jb21taXRfaW5mbyhzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJY29uc3QgY2hhciAqYnVmZmVyLCAqaWRlbnRfbGluZSwgKmF1dGhvcl9kYXRlLCAqbXNnOworCXNpemVfdCBpZGVudF9sZW47CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50X3NwbGl0OworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWJ1ZmZlciA9IGxvZ21zZ19yZWVuY29kZShjb21taXQsIE5VTEwsIGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCkpOworCisJaWRlbnRfbGluZSA9IGZpbmRfY29tbWl0X2hlYWRlcihidWZmZXIsICJhdXRob3IiLCAmaWRlbnRfbGVuKTsKKworCWlmIChzcGxpdF9pZGVudF9saW5lKCZpZGVudF9zcGxpdCwgaWRlbnRfbGluZSwgaWRlbnRfbGVuKSA8IDApIHsKKwkJc3RyYnVmX2FkZCgmc2IsIGlkZW50X2xpbmUsIGlkZW50X2xlbik7CisJCWRpZShfKCJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIiksIHNiLmJ1Zik7CisJfQorCisJYXNzZXJ0KCFzdGF0ZS0+YXV0aG9yX25hbWUpOworCWlmIChpZGVudF9zcGxpdC5uYW1lX2JlZ2luKSB7CisJCXN0cmJ1Zl9hZGQoJnNiLCBpZGVudF9zcGxpdC5uYW1lX2JlZ2luLAorCQkJaWRlbnRfc3BsaXQubmFtZV9lbmQgLSBpZGVudF9zcGxpdC5uYW1lX2JlZ2luKTsKKwkJc3RhdGUtPmF1dGhvcl9uYW1lID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCX0gZWxzZQorCQlzdGF0ZS0+YXV0aG9yX25hbWUgPSB4c3RyZHVwKCIiKTsKKworCWFzc2VydCghc3RhdGUtPmF1dGhvcl9lbWFpbCk7CisJaWYgKGlkZW50X3NwbGl0Lm1haWxfYmVnaW4pIHsKKwkJc3RyYnVmX2FkZCgmc2IsIGlkZW50X3NwbGl0Lm1haWxfYmVnaW4sCisJCQlpZGVudF9zcGxpdC5tYWlsX2VuZCAtIGlkZW50X3NwbGl0Lm1haWxfYmVnaW4pOworCQlzdGF0ZS0+YXV0aG9yX2VtYWlsID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCX0gZWxzZQorCQlzdGF0ZS0+YXV0aG9yX2VtYWlsID0geHN0cmR1cCgiIik7CisKKwlhdXRob3JfZGF0ZSA9IHNob3dfaWRlbnRfZGF0ZSgmaWRlbnRfc3BsaXQsIERBVEVfTU9ERShOT1JNQUwpKTsKKwlzdHJidWZfYWRkc3RyKCZzYiwgYXV0aG9yX2RhdGUpOworCWFzc2VydCghc3RhdGUtPmF1dGhvcl9kYXRlKTsKKwlzdGF0ZS0+YXV0aG9yX2RhdGUgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisKKwlhc3NlcnQoIXN0YXRlLT5tc2cpOworCW1zZyA9IHN0cnN0cihidWZmZXIsICJcblxuIik7CisJaWYgKCFtc2cpCisJCWRpZShfKCJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIiksIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwlzdGF0ZS0+bXNnID0geHN0cmR1cChtc2cgKyAyKTsKKwlzdGF0ZS0+bXNnX2xlbiA9IHN0cmxlbihzdGF0ZS0+bXNnKTsKK30KKworLyoqCisgKiBXcml0ZXMgYGNvbW1pdGAgYXMgYSBwYXRjaCB0byB0aGUgc3RhdGUgZGlyZWN0b3J5J3MgInBhdGNoIiBmaWxlLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9jb21taXRfcGF0Y2goY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZfaW5mbzsKKwlGSUxFICpmcDsKKworCWZwID0geGZvcGVuKGFtX3BhdGgoc3RhdGUsICJwYXRjaCIpLCAidyIpOworCWluaXRfcmV2aXNpb25zKCZyZXZfaW5mbywgTlVMTCk7CisJcmV2X2luZm8uZGlmZiA9IDE7CisJcmV2X2luZm8uYWJicmV2ID0gMDsKKwlyZXZfaW5mby5kaXNhYmxlX3N0ZGluID0gMTsKKwlyZXZfaW5mby5zaG93X3Jvb3RfZGlmZiA9IDE7CisJcmV2X2luZm8uZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJcmV2X2luZm8ubm9fY29tbWl0X2lkID0gMTsKKwlESUZGX09QVF9TRVQoJnJldl9pbmZvLmRpZmZvcHQsIEJJTkFSWSk7CisJRElGRl9PUFRfU0VUKCZyZXZfaW5mby5kaWZmb3B0LCBGVUxMX0lOREVYKTsKKwlyZXZfaW5mby5kaWZmb3B0LnVzZV9jb2xvciA9IDA7CisJcmV2X2luZm8uZGlmZm9wdC5maWxlID0gZnA7CisJcmV2X2luZm8uZGlmZm9wdC5jbG9zZV9maWxlID0gMTsKKwlhZGRfcGVuZGluZ19vYmplY3QoJnJldl9pbmZvLCAmY29tbWl0LT5vYmplY3QsICIiKTsKKwlkaWZmX3NldHVwX2RvbmUoJnJldl9pbmZvLmRpZmZvcHQpOworCWxvZ190cmVlX2NvbW1pdCgmcmV2X2luZm8sIGNvbW1pdCk7Cit9CisKKy8qKgorICogV3JpdGVzIHRoZSBkaWZmIG9mIHRoZSBpbmRleCBhZ2FpbnN0IEhFQUQgYXMgYSBwYXRjaCB0byB0aGUgc3RhdGUKKyAqIGRpcmVjdG9yeSdzICJwYXRjaCIgZmlsZS4KKyAqLworc3RhdGljIHZvaWQgd3JpdGVfaW5kZXhfcGF0Y2goY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwl1bnNpZ25lZCBjaGFyIGhlYWRbR0lUX1NIQTFfUkFXU1pdOworCXN0cnVjdCByZXZfaW5mbyByZXZfaW5mbzsKKwlGSUxFICpmcDsKKworCWlmICghZ2V0X3NoYTFfdHJlZSgiSEVBRCIsIGhlYWQpKQorCQl0cmVlID0gbG9va3VwX3RyZWUoaGVhZCk7CisJZWxzZQorCQl0cmVlID0gbG9va3VwX3RyZWUoRU1QVFlfVFJFRV9TSEExX0JJTik7CisKKwlmcCA9IHhmb3BlbihhbV9wYXRoKHN0YXRlLCAicGF0Y2giKSwgInciKTsKKwlpbml0X3JldmlzaW9ucygmcmV2X2luZm8sIE5VTEwpOworCXJldl9pbmZvLmRpZmYgPSAxOworCXJldl9pbmZvLmRpc2FibGVfc3RkaW4gPSAxOworCXJldl9pbmZvLm5vX2NvbW1pdF9pZCA9IDE7CisJcmV2X2luZm8uZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJcmV2X2luZm8uZGlmZm9wdC51c2VfY29sb3IgPSAwOworCXJldl9pbmZvLmRpZmZvcHQuZmlsZSA9IGZwOworCXJldl9pbmZvLmRpZmZvcHQuY2xvc2VfZmlsZSA9IDE7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZfaW5mbywgJnRyZWUtPm9iamVjdCwgIiIpOworCWRpZmZfc2V0dXBfZG9uZSgmcmV2X2luZm8uZGlmZm9wdCk7CisJcnVuX2RpZmZfaW5kZXgoJnJldl9pbmZvLCAxKTsKK30KKworLyoqCisgKiBMaWtlIHBhcnNlX21haWwoKSwgYnV0IHBhcnNlcyB0aGUgbWFpbCBieSBsb29raW5nIHVwIGl0cyBjb21taXQgSUQKKyAqIGRpcmVjdGx5LiBUaGlzIGlzIHVzZWQgaW4gLS1yZWJhc2luZyBtb2RlIHRvIGJ5cGFzcyBnaXQtbWFpbGluZm8ncyBtdW5naW5nCisgKiBvZiBwYXRjaGVzLgorICoKKyAqIHN0YXRlLT5vcmlnX2NvbW1pdCB3aWxsIGJlIHNldCB0byB0aGUgb3JpZ2luYWwgY29tbWl0IElELgorICoKKyAqIFdpbGwgYWx3YXlzIHJldHVybiAwIGFzIHRoZSBwYXRjaCBzaG91bGQgbmV2ZXIgYmUgc2tpcHBlZC4KKyAqLworc3RhdGljIGludCBwYXJzZV9tYWlsX3JlYmFzZShzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICptYWlsKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwl1bnNpZ25lZCBjaGFyIGNvbW1pdF9zaGExW0dJVF9TSEExX1JBV1NaXTsKKworCWlmIChnZXRfbWFpbF9jb21taXRfc2hhMShjb21taXRfc2hhMSwgbWFpbCkgPCAwKQorCQlkaWUoXygiY291bGQgbm90IHBhcnNlICVzIiksIG1haWwpOworCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9vcl9kaWUoY29tbWl0X3NoYTEsIG1haWwpOworCisJZ2V0X2NvbW1pdF9pbmZvKHN0YXRlLCBjb21taXQpOworCisJd3JpdGVfY29tbWl0X3BhdGNoKHN0YXRlLCBjb21taXQpOworCisJaGFzaGNweShzdGF0ZS0+b3JpZ19jb21taXQsIGNvbW1pdF9zaGExKTsKKwl3cml0ZV9zdGF0ZV90ZXh0KHN0YXRlLCAib3JpZ2luYWwtY29tbWl0Iiwgc2hhMV90b19oZXgoY29tbWl0X3NoYTEpKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIEFwcGxpZXMgY3VycmVudCBwYXRjaCB3aXRoIGdpdC1hcHBseS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG90aGVyd2lzZS4gSWYKKyAqIGBpbmRleF9maWxlYCBpcyBub3QgTlVMTCwgdGhlIHBhdGNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGF0IGluZGV4LgorICovCitzdGF0aWMgaW50IHJ1bl9hcHBseShjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBjb25zdCBjaGFyICppbmRleF9maWxlKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJY3AuZ2l0X2NtZCA9IDE7CisKKwlpZiAoaW5kZXhfZmlsZSkKKwkJYXJndl9hcnJheV9wdXNoZigmY3AuZW52X2FycmF5LCAiR0lUX0lOREVYX0ZJTEU9JXMiLCBpbmRleF9maWxlKTsKKworCS8qCisJICogSWYgd2UgYXJlIGFsbG93ZWQgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLCBkb24ndCBnaXZlIGZhbHNlCisJICogZXJyb3JzIGR1cmluZyB0aGUgaW5pdGlhbCBhdHRlbXB0LgorCSAqLworCWlmIChzdGF0ZS0+dGhyZWV3YXkgJiYgIWluZGV4X2ZpbGUpIHsKKwkJY3Aubm9fc3Rkb3V0ID0gMTsKKwkJY3Aubm9fc3RkZXJyID0gMTsKKwl9CisKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJhcHBseSIpOworCisJYXJndl9hcnJheV9wdXNodigmY3AuYXJncywgc3RhdGUtPmdpdF9hcHBseV9vcHRzLmFyZ3YpOworCisJaWYgKGluZGV4X2ZpbGUpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi0tY2FjaGVkIik7CisJZWxzZQorCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLWluZGV4Iik7CisKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIGFtX3BhdGgoc3RhdGUsICJwYXRjaCIpKTsKKworCWlmIChydW5fY29tbWFuZCgmY3ApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBSZWxvYWQgaW5kZXggYXMgZ2l0LWFwcGx5IHdpbGwgaGF2ZSBtb2RpZmllZCBpdC4gKi8KKwlkaXNjYXJkX2NhY2hlKCk7CisJcmVhZF9jYWNoZV9mcm9tKGluZGV4X2ZpbGUgPyBpbmRleF9maWxlIDogZ2V0X2luZGV4X2ZpbGUoKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBCdWlsZHMgYW4gaW5kZXggdGhhdCBjb250YWlucyBqdXN0IHRoZSBibG9icyBuZWVkZWQgZm9yIGEgM3dheSBtZXJnZS4KKyAqLworc3RhdGljIGludCBidWlsZF9mYWtlX2FuY2VzdG9yKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKmluZGV4X2ZpbGUpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwljcC5naXRfY21kID0gMTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJhcHBseSIpOworCWFyZ3ZfYXJyYXlfcHVzaHYoJmNwLmFyZ3MsIHN0YXRlLT5naXRfYXBwbHlfb3B0cy5hcmd2KTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjcC5hcmdzLCAiLS1idWlsZC1mYWtlLWFuY2VzdG9yPSVzIiwgaW5kZXhfZmlsZSk7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBhbV9wYXRoKHN0YXRlLCAicGF0Y2giKSk7CisKKwlpZiAocnVuX2NvbW1hbmQoJmNwKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogRG8gdGhlIHRocmVlLXdheSBtZXJnZSB1c2luZyBmYWtlIGFuY2VzdG9yLCBoaXMgdHJlZSBjb25zdHJ1Y3RlZAorICogZnJvbSB0aGUgZmFrZSBhbmNlc3RvciBhbmQgdGhlIHBvc3RpbWFnZSBvZiB0aGUgcGF0Y2gsIGFuZCBvdXIKKyAqIHN0YXRlLgorICovCitzdGF0aWMgaW50IHJ1bl9mYWxsYmFja19tZXJnZV9yZWN1cnNpdmUoY29uc3Qgc3RydWN0IGFtX3N0YXRlICpzdGF0ZSwKKwkJCQkJdW5zaWduZWQgY2hhciAqb3JpZ190cmVlLAorCQkJCQl1bnNpZ25lZCBjaGFyICpvdXJfdHJlZSwKKwkJCQkJdW5zaWduZWQgY2hhciAqaGlzX3RyZWUpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IHN0YXR1czsKKworCWNwLmdpdF9jbWQgPSAxOworCisJYXJndl9hcnJheV9wdXNoZigmY3AuZW52X2FycmF5LCAiR0lUSEVBRF8lcz0lLipzIiwKKwkJCSBzaGExX3RvX2hleChoaXNfdHJlZSksIGxpbmVsZW4oc3RhdGUtPm1zZyksIHN0YXRlLT5tc2cpOworCWlmIChzdGF0ZS0+cXVpZXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuZW52X2FycmF5LCAiR0lUX01FUkdFX1ZFUkJPU0lUWT0wIik7CisKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICJtZXJnZS1yZWN1cnNpdmUiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHNoYTFfdG9faGV4KG9yaWdfdHJlZSkpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgIi0tIik7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBzaGExX3RvX2hleChvdXJfdHJlZSkpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgc2hhMV90b19oZXgoaGlzX3RyZWUpKTsKKworCXN0YXR1cyA9IHJ1bl9jb21tYW5kKCZjcCkgPyAoLTEpIDogMDsKKwlkaXNjYXJkX2NhY2hlKCk7CisJcmVhZF9jYWNoZSgpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogQXR0ZW1wdCBhIHRocmVld2F5IG1lcmdlLCB1c2luZyBpbmRleF9wYXRoIGFzIHRoZSB0ZW1wb3JhcnkgaW5kZXguCisgKi8KK3N0YXRpYyBpbnQgZmFsbF9iYWNrX3RocmVld2F5KGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUsIGNvbnN0IGNoYXIgKmluZGV4X3BhdGgpCit7CisJdW5zaWduZWQgY2hhciBvcmlnX3RyZWVbR0lUX1NIQTFfUkFXU1pdLCBoaXNfdHJlZVtHSVRfU0hBMV9SQVdTWl0sCisJCSAgICAgIG91cl90cmVlW0dJVF9TSEExX1JBV1NaXTsKKworCWlmIChnZXRfc2hhMSgiSEVBRCIsIG91cl90cmVlKSA8IDApCisJCWhhc2hjcHkob3VyX3RyZWUsIEVNUFRZX1RSRUVfU0hBMV9CSU4pOworCisJaWYgKGJ1aWxkX2Zha2VfYW5jZXN0b3Ioc3RhdGUsIGluZGV4X3BhdGgpKQorCQlyZXR1cm4gZXJyb3IoImNvdWxkIG5vdCBidWlsZCBmYWtlIGFuY2VzdG9yIik7CisKKwlkaXNjYXJkX2NhY2hlKCk7CisJcmVhZF9jYWNoZV9mcm9tKGluZGV4X3BhdGgpOworCisJaWYgKHdyaXRlX2luZGV4X2FzX3RyZWUob3JpZ190cmVlLCAmdGhlX2luZGV4LCBpbmRleF9wYXRoLCAwLCBOVUxMKSkKKwkJcmV0dXJuIGVycm9yKF8oIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iKSk7CisKKwlzYXkoc3RhdGUsIHN0ZG91dCwgXygiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIpKTsKKworCWlmICghc3RhdGUtPnF1aWV0KSB7CisJCS8qCisJCSAqIExpc3QgcGF0aHMgdGhhdCBuZWVkZWQgMy13YXkgZmFsbGJhY2ssIHNvIHRoYXQgdGhlIHVzZXIgY2FuCisJCSAqIHJldmlldyB0aGVtIHdpdGggZXh0cmEgY2FyZSB0byBzcG90IG1pc21lcmdlcy4KKwkJICovCisJCXN0cnVjdCByZXZfaW5mbyByZXZfaW5mbzsKKwkJY29uc3QgY2hhciAqZGlmZl9maWx0ZXJfc3RyID0gIi0tZGlmZi1maWx0ZXI9QU0iOworCisJCWluaXRfcmV2aXNpb25zKCZyZXZfaW5mbywgTlVMTCk7CisJCXJldl9pbmZvLmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05BTUVfU1RBVFVTOworCQlkaWZmX29wdF9wYXJzZSgmcmV2X2luZm8uZGlmZm9wdCwgJmRpZmZfZmlsdGVyX3N0ciwgMSk7CisJCWFkZF9wZW5kaW5nX3NoYTEoJnJldl9pbmZvLCAiSEVBRCIsIG91cl90cmVlLCAwKTsKKwkJZGlmZl9zZXR1cF9kb25lKCZyZXZfaW5mby5kaWZmb3B0KTsKKwkJcnVuX2RpZmZfaW5kZXgoJnJldl9pbmZvLCAxKTsKKwl9CisKKwlpZiAocnVuX2FwcGx5KHN0YXRlLCBpbmRleF9wYXRoKSkKKwkJcmV0dXJuIGVycm9yKF8oIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisJCQkJIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iKSk7CisKKwlpZiAod3JpdGVfaW5kZXhfYXNfdHJlZShoaXNfdHJlZSwgJnRoZV9pbmRleCwgaW5kZXhfcGF0aCwgMCwgTlVMTCkpCisJCXJldHVybiBlcnJvcigiY291bGQgbm90IHdyaXRlIHRyZWUiKTsKKworCXNheShzdGF0ZSwgc3Rkb3V0LCBfKCJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iKSk7CisKKwlkaXNjYXJkX2NhY2hlKCk7CisJcmVhZF9jYWNoZSgpOworCisJLyoKKwkgKiBUaGlzIGlzIG5vdCBzbyB3cm9uZy4gRGVwZW5kaW5nIG9uIHdoaWNoIGJhc2Ugd2UgcGlja2VkLCBvcmlnX3RyZWUKKwkgKiBtYXkgYmUgd2lsZGx5IGRpZmZlcmVudCBmcm9tIG91cnMsIGJ1dCBoaXNfdHJlZSBoYXMgdGhlIHNhbWUgc2V0IG9mCisJICogd2lsZGx5IGRpZmZlcmVudCBjaGFuZ2VzIGluIHBhcnRzIHRoZSBwYXRjaCBkaWQgbm90IHRvdWNoLCBzbworCSAqIHJlY3Vyc2l2ZSBlbmRzIHVwIGNhbmNlbGluZyB0aGVtLCBzYXlpbmcgdGhhdCB3ZSByZXZlcnRlZCBhbGwgdGhvc2UKKwkgKiBjaGFuZ2VzLgorCSAqLworCisJaWYgKHJ1bl9mYWxsYmFja19tZXJnZV9yZWN1cnNpdmUoc3RhdGUsIG9yaWdfdHJlZSwgb3VyX3RyZWUsIGhpc190cmVlKSkgeworCQlyZXJlcmUoc3RhdGUtPmFsbG93X3JlcmVyZV9hdXRvdXBkYXRlKTsKKwkJcmV0dXJuIGVycm9yKF8oIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ29tbWl0cyB0aGUgY3VycmVudCBpbmRleCB3aXRoIHN0YXRlLT5tc2cgYXMgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZAorICogc3RhdGUtPmF1dGhvcl9uYW1lLCBzdGF0ZS0+YXV0aG9yX2VtYWlsIGFuZCBzdGF0ZS0+YXV0aG9yX2RhdGUgYXMgdGhlIGF1dGhvcgorICogaW5mb3JtYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGRvX2NvbW1pdChjb25zdCBzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlKQoreworCXVuc2lnbmVkIGNoYXIgdHJlZVtHSVRfU0hBMV9SQVdTWl0sIHBhcmVudFtHSVRfU0hBMV9SQVdTWl0sCisJCSAgICAgIGNvbW1pdFtHSVRfU0hBMV9SQVdTWl07CisJdW5zaWduZWQgY2hhciAqcHRyOworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IE5VTEw7CisJY29uc3QgY2hhciAqcmVmbG9nX21zZywgKmF1dGhvcjsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAocnVuX2hvb2tfbGUoTlVMTCwgInByZS1hcHBseXBhdGNoIiwgTlVMTCkpCisJCWV4aXQoMSk7CisKKwlpZiAod3JpdGVfY2FjaGVfYXNfdHJlZSh0cmVlLCAwLCBOVUxMKSkKKwkJZGllKF8oImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiKSk7CisKKwlpZiAoIWdldF9zaGExX2NvbW1pdCgiSEVBRCIsIHBhcmVudCkpIHsKKwkJcHRyID0gcGFyZW50OworCQljb21taXRfbGlzdF9pbnNlcnQobG9va3VwX2NvbW1pdChwYXJlbnQpLCAmcGFyZW50cyk7CisJfSBlbHNlIHsKKwkJcHRyID0gTlVMTDsKKwkJc2F5KHN0YXRlLCBzdGRlcnIsIF8oImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiKSk7CisJfQorCisJYXV0aG9yID0gZm10X2lkZW50KHN0YXRlLT5hdXRob3JfbmFtZSwgc3RhdGUtPmF1dGhvcl9lbWFpbCwKKwkJCXN0YXRlLT5pZ25vcmVfZGF0ZSA/IE5VTEwgOiBzdGF0ZS0+YXV0aG9yX2RhdGUsCisJCQlJREVOVF9TVFJJQ1QpOworCisJaWYgKHN0YXRlLT5jb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSkKKwkJc2V0ZW52KCJHSVRfQ09NTUlUVEVSX0RBVEUiLAorCQkJc3RhdGUtPmlnbm9yZV9kYXRlID8gIiIgOiBzdGF0ZS0+YXV0aG9yX2RhdGUsIDEpOworCisJaWYgKGNvbW1pdF90cmVlKHN0YXRlLT5tc2csIHN0YXRlLT5tc2dfbGVuLCB0cmVlLCBwYXJlbnRzLCBjb21taXQsCisJCQkJYXV0aG9yLCBzdGF0ZS0+c2lnbl9jb21taXQpKQorCQlkaWUoXygiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiKSk7CisKKwlyZWZsb2dfbXNnID0gZ2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIpOworCWlmICghcmVmbG9nX21zZykKKwkJcmVmbG9nX21zZyA9ICJhbSI7CisKKwlzdHJidWZfYWRkZigmc2IsICIlczogJS4qcyIsIHJlZmxvZ19tc2csIGxpbmVsZW4oc3RhdGUtPm1zZyksCisJCQlzdGF0ZS0+bXNnKTsKKworCXVwZGF0ZV9yZWYoc2IuYnVmLCAiSEVBRCIsIGNvbW1pdCwgcHRyLCAwLCBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKworCWlmIChzdGF0ZS0+cmViYXNpbmcpIHsKKwkJRklMRSAqZnAgPSB4Zm9wZW4oYW1fcGF0aChzdGF0ZSwgInJld3JpdHRlbiIpLCAiYSIpOworCisJCWFzc2VydCghaXNfbnVsbF9zaGExKHN0YXRlLT5vcmlnX2NvbW1pdCkpOworCQlmcHJpbnRmKGZwLCAiJXMgIiwgc2hhMV90b19oZXgoc3RhdGUtPm9yaWdfY29tbWl0KSk7CisJCWZwcmludGYoZnAsICIlc1xuIiwgc2hhMV90b19oZXgoY29tbWl0KSk7CisJCWZjbG9zZShmcCk7CisJfQorCisJcnVuX2hvb2tfbGUoTlVMTCwgInBvc3QtYXBwbHlwYXRjaCIsIE5VTEwpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworLyoqCisgKiBWYWxpZGF0ZXMgdGhlIGFtX3N0YXRlIGZvciByZXN1bWluZyAtLSB0aGUgIm1zZyIgYW5kIGF1dGhvcnNoaXAgZmllbGRzIG11c3QKKyAqIGJlIGZpbGxlZCB1cC4KKyAqLworc3RhdGljIHZvaWQgdmFsaWRhdGVfcmVzdW1lX3N0YXRlKGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJaWYgKCFzdGF0ZS0+bXNnKQorCQlkaWUoXygiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIiksCisJCQlhbV9wYXRoKHN0YXRlLCAiZmluYWwtY29tbWl0IikpOworCisJaWYgKCFzdGF0ZS0+YXV0aG9yX25hbWUgfHwgIXN0YXRlLT5hdXRob3JfZW1haWwgfHwgIXN0YXRlLT5hdXRob3JfZGF0ZSkKKwkJZGllKF8oImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIpLAorCQkJYW1fcGF0aChzdGF0ZSwgImF1dGhvci1zY3JpcHQiKSk7Cit9CisKKy8qKgorICogSW50ZXJhY3RpdmVseSBwcm9tcHQgdGhlIHVzZXIgb24gd2hldGhlciB0aGUgY3VycmVudCBwYXRjaCBzaG91bGQgYmUKKyAqIGFwcGxpZWQuCisgKgorICogUmV0dXJucyAwIGlmIHRoZSB1c2VyIGNob29zZXMgdG8gYXBwbHkgdGhlIHBhdGNoLCAxIGlmIHRoZSB1c2VyIGNob29zZXMgdG8KKyAqIHNraXAgaXQuCisgKi8KK3N0YXRpYyBpbnQgZG9faW50ZXJhY3RpdmUoc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwlhc3NlcnQoc3RhdGUtPm1zZyk7CisKKwlpZiAoIWlzYXR0eSgwKSkKKwkJZGllKF8oImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIpKTsKKworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqcmVwbHk7CisKKwkJcHV0cyhfKCJDb21taXQgQm9keSBpczoiKSk7CisJCXB1dHMoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisJCXByaW50ZigiJXMiLCBzdGF0ZS0+bXNnKTsKKwkJcHV0cygiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworCQkvKgorCQkgKiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKwkJICogaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisJCSAqIGlucHV0IGF0IHRoaXMgcG9pbnQuCisJCSAqLworCQlyZXBseSA9IGdpdF9wcm9tcHQoXygiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIpLCBQUk9NUFRfRUNITyk7CisKKwkJaWYgKCFyZXBseSkgeworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoKnJlcGx5ID09ICd5JyB8fCAqcmVwbHkgPT0gJ1knKSB7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmICgqcmVwbHkgPT0gJ2EnIHx8ICpyZXBseSA9PSAnQScpIHsKKwkJCXN0YXRlLT5pbnRlcmFjdGl2ZSA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIGlmICgqcmVwbHkgPT0gJ24nIHx8ICpyZXBseSA9PSAnTicpIHsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKCpyZXBseSA9PSAnZScgfHwgKnJlcGx5ID09ICdFJykgeworCQkJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKworCQkJaWYgKCFsYXVuY2hfZWRpdG9yKGFtX3BhdGgoc3RhdGUsICJmaW5hbC1jb21taXQiKSwgJm1zZywgTlVMTCkpIHsKKwkJCQlmcmVlKHN0YXRlLT5tc2cpOworCQkJCXN0YXRlLT5tc2cgPSBzdHJidWZfZGV0YWNoKCZtc2csICZzdGF0ZS0+bXNnX2xlbik7CisJCQl9CisJCQlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKwkJfSBlbHNlIGlmICgqcmVwbHkgPT0gJ3YnIHx8ICpyZXBseSA9PSAnVicpIHsKKwkJCWNvbnN0IGNoYXIgKnBhZ2VyID0gZ2l0X3BhZ2VyKDEpOworCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwkJCWlmICghcGFnZXIpCisJCQkJcGFnZXIgPSAiY2F0IjsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgcGFnZXIpOworCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBhbV9wYXRoKHN0YXRlLCAicGF0Y2giKSk7CisJCQlydW5fY29tbWFuZCgmY3ApOworCQl9CisJfQorfQorCisvKioKKyAqIEFwcGxpZXMgYWxsIHF1ZXVlZCBtYWlsLgorICoKKyAqIElmIGByZXN1bWVgIGlzIHRydWUsIHdlIGFyZSAicmVzdW1pbmciLiBUaGUgIm1zZyIgYW5kIGF1dGhvcnNoaXAgZmllbGRzLCBhcworICogd2VsbCBhcyB0aGUgc3RhdGUgZGlyZWN0b3J5J3MgInBhdGNoIiBmaWxlIGlzIHVzZWQgYXMtaXMgZm9yIGFwcGx5aW5nIHRoZQorICogcGF0Y2ggYW5kIGNvbW1pdHRpbmcgaXQuCisgKi8KK3N0YXRpYyB2b2lkIGFtX3J1bihzdHJ1Y3QgYW1fc3RhdGUgKnN0YXRlLCBpbnQgcmVzdW1lKQoreworCWNvbnN0IGNoYXIgKmFyZ3ZfZ2NfYXV0b1tdID0geyJnYyIsICItLWF1dG8iLCBOVUxMfTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwl1bmxpbmsoYW1fcGF0aChzdGF0ZSwgImRpcnR5aW5kZXgiKSk7CisKKwlyZWZyZXNoX2FuZF93cml0ZV9jYWNoZSgpOworCisJaWYgKGluZGV4X2hhc19jaGFuZ2VzKCZzYikpIHsKKwkJd3JpdGVfc3RhdGVfYm9vbChzdGF0ZSwgImRpcnR5aW5kZXgiLCAxKTsKKwkJZGllKF8oIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIpLCBzYi5idWYpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwl3aGlsZSAoc3RhdGUtPmN1ciA8PSBzdGF0ZS0+bGFzdCkgeworCQljb25zdCBjaGFyICptYWlsID0gYW1fcGF0aChzdGF0ZSwgbXNnbnVtKHN0YXRlKSk7CisJCWludCBhcHBseV9zdGF0dXM7CisKKwkJaWYgKCFmaWxlX2V4aXN0cyhtYWlsKSkKKwkJCWdvdG8gbmV4dDsKKworCQlpZiAocmVzdW1lKSB7CisJCQl2YWxpZGF0ZV9yZXN1bWVfc3RhdGUoc3RhdGUpOworCQl9IGVsc2UgeworCQkJaW50IHNraXA7CisKKwkJCWlmIChzdGF0ZS0+cmViYXNpbmcpCisJCQkJc2tpcCA9IHBhcnNlX21haWxfcmViYXNlKHN0YXRlLCBtYWlsKTsKKwkJCWVsc2UKKwkJCQlza2lwID0gcGFyc2VfbWFpbChzdGF0ZSwgbWFpbCk7CisKKwkJCWlmIChza2lwKQorCQkJCWdvdG8gbmV4dDsgLyogbWFpbCBzaG91bGQgYmUgc2tpcHBlZCAqLworCisJCQl3cml0ZV9hdXRob3Jfc2NyaXB0KHN0YXRlKTsKKwkJCXdyaXRlX2NvbW1pdF9tc2coc3RhdGUpOworCQl9CisKKwkJaWYgKHN0YXRlLT5pbnRlcmFjdGl2ZSAmJiBkb19pbnRlcmFjdGl2ZShzdGF0ZSkpCisJCQlnb3RvIG5leHQ7CisKKwkJaWYgKHJ1bl9hcHBseXBhdGNoX21zZ19ob29rKHN0YXRlKSkKKwkJCWV4aXQoMSk7CisKKwkJc2F5KHN0YXRlLCBzdGRvdXQsIF8oIkFwcGx5aW5nOiAlLipzIiksIGxpbmVsZW4oc3RhdGUtPm1zZyksIHN0YXRlLT5tc2cpOworCisJCWFwcGx5X3N0YXR1cyA9IHJ1bl9hcHBseShzdGF0ZSwgTlVMTCk7CisKKwkJaWYgKGFwcGx5X3N0YXR1cyAmJiBzdGF0ZS0+dGhyZWV3YXkpIHsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQkJc3RyYnVmX2FkZHN0cigmc2IsIGFtX3BhdGgoc3RhdGUsICJwYXRjaC1tZXJnZS1pbmRleCIpKTsKKwkJCWFwcGx5X3N0YXR1cyA9IGZhbGxfYmFja190aHJlZXdheShzdGF0ZSwgc2IuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwkJCS8qCisJCQkgKiBBcHBseWluZyB0aGUgcGF0Y2ggdG8gYW4gZWFybGllciB0cmVlIGFuZCBtZXJnaW5nCisJCQkgKiB0aGUgcmVzdWx0IG1heSBoYXZlIHByb2R1Y2VkIHRoZSBzYW1lIHRyZWUgYXMgb3Vycy4KKwkJCSAqLworCQkJaWYgKCFhcHBseV9zdGF0dXMgJiYgIWluZGV4X2hhc19jaGFuZ2VzKE5VTEwpKSB7CisJCQkJc2F5KHN0YXRlLCBzdGRvdXQsIF8oIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIpKTsKKwkJCQlnb3RvIG5leHQ7CisJCQl9CisJCX0KKworCQlpZiAoYXBwbHlfc3RhdHVzKSB7CisJCQlpbnQgYWR2aWNlX2Ftd29ya2RpciA9IDE7CisKKwkJCXByaW50Zl9sbihfKCJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIpLCBtc2dudW0oc3RhdGUpLAorCQkJCWxpbmVsZW4oc3RhdGUtPm1zZyksIHN0YXRlLT5tc2cpOworCisJCQlnaXRfY29uZmlnX2dldF9ib29sKCJhZHZpY2UuYW13b3JrZGlyIiwgJmFkdmljZV9hbXdvcmtkaXIpOworCisJCQlpZiAoYWR2aWNlX2Ftd29ya2RpcikKKwkJCQlwcmludGZfbG4oXygiVGhlIGNvcHkgb2YgdGhlIHBhdGNoIHRoYXQgZmFpbGVkIGlzIGZvdW5kIGluOiAlcyIpLAorCQkJCQkJYW1fcGF0aChzdGF0ZSwgInBhdGNoIikpOworCisJCQlkaWVfdXNlcl9yZXNvbHZlKHN0YXRlKTsKKwkJfQorCisJCWRvX2NvbW1pdChzdGF0ZSk7CisKK25leHQ6CisJCWFtX25leHQoc3RhdGUpOworCisJCWlmIChyZXN1bWUpCisJCQlhbV9sb2FkKHN0YXRlKTsKKwkJcmVzdW1lID0gMDsKKwl9CisKKwlpZiAoIWlzX2VtcHR5X2ZpbGUoYW1fcGF0aChzdGF0ZSwgInJld3JpdHRlbiIpKSkgeworCQlhc3NlcnQoc3RhdGUtPnJlYmFzaW5nKTsKKwkJY29weV9ub3Rlc19mb3JfcmViYXNlKHN0YXRlKTsKKwkJcnVuX3Bvc3RfcmV3cml0ZV9ob29rKHN0YXRlKTsKKwl9CisKKwkvKgorCSAqIEluIHJlYmFzaW5nIG1vZGUsIGl0J3MgdXAgdG8gdGhlIGNhbGxlciB0byB0YWtlIGNhcmUgb2YKKwkgKiBob3VzZWtlZXBpbmcuCisJICovCisJaWYgKCFzdGF0ZS0+cmViYXNpbmcpIHsKKwkJYW1fZGVzdHJveShzdGF0ZSk7CisJCXJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3ZfZ2NfYXV0bywgUlVOX0dJVF9DTUQpOworCX0KK30KKworLyoqCisgKiBSZXN1bWUgdGhlIGN1cnJlbnQgYW0gc2Vzc2lvbiBhZnRlciBwYXRjaCBhcHBsaWNhdGlvbiBmYWlsdXJlLiBUaGUgdXNlciBkaWQKKyAqIGFsbCB0aGUgaGFyZCB3b3JrLCBhbmQgd2UgZG8gbm90IGhhdmUgdG8gZG8gYW55IHBhdGNoIGFwcGxpY2F0aW9uLiBKdXN0CisgKiB0cnVzdCBhbmQgY29tbWl0IHdoYXQgdGhlIHVzZXIgaGFzIGluIHRoZSBpbmRleCBhbmQgd29ya2luZyB0cmVlLgorICovCitzdGF0aWMgdm9pZCBhbV9yZXNvbHZlKHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJdmFsaWRhdGVfcmVzdW1lX3N0YXRlKHN0YXRlKTsKKworCXNheShzdGF0ZSwgc3Rkb3V0LCBfKCJBcHBseWluZzogJS4qcyIpLCBsaW5lbGVuKHN0YXRlLT5tc2cpLCBzdGF0ZS0+bXNnKTsKKworCWlmICghaW5kZXhfaGFzX2NoYW5nZXMoTlVMTCkpIHsKKwkJcHJpbnRmX2xuKF8oIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorCQkJIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorCQkJImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIikpOworCQlkaWVfdXNlcl9yZXNvbHZlKHN0YXRlKTsKKwl9CisKKwlpZiAodW5tZXJnZWRfY2FjaGUoKSkgeworCQlwcmludGZfbG4oXygiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKwkJCSJEaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnPyIpKTsKKwkJZGllX3VzZXJfcmVzb2x2ZShzdGF0ZSk7CisJfQorCisJaWYgKHN0YXRlLT5pbnRlcmFjdGl2ZSkgeworCQl3cml0ZV9pbmRleF9wYXRjaChzdGF0ZSk7CisJCWlmIChkb19pbnRlcmFjdGl2ZShzdGF0ZSkpCisJCQlnb3RvIG5leHQ7CisJfQorCisJcmVyZXJlKDApOworCisJZG9fY29tbWl0KHN0YXRlKTsKKworbmV4dDoKKwlhbV9uZXh0KHN0YXRlKTsKKwlhbV9sb2FkKHN0YXRlKTsKKwlhbV9ydW4oc3RhdGUsIDApOworfQorCisvKioKKyAqIFBlcmZvcm1zIGEgY2hlY2tvdXQgZmFzdC1mb3J3YXJkIGZyb20gYGhlYWRgIHRvIGByZW1vdGVgLiBJZiBgcmVzZXRgIGlzCisgKiB0cnVlLCBhbnkgdW5tZXJnZWQgZW50cmllcyB3aWxsIGJlIGRpc2NhcmRlZC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uCisgKiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGZhc3RfZm9yd2FyZF90byhzdHJ1Y3QgdHJlZSAqaGVhZCwgc3RydWN0IHRyZWUgKnJlbW90ZSwgaW50IHJlc2V0KQoreworCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2tfZmlsZTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRbMl07CisKKwlpZiAocGFyc2VfdHJlZShoZWFkKSB8fCBwYXJzZV90cmVlKHJlbW90ZSkpCisJCXJldHVybiAtMTsKKworCWxvY2tfZmlsZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKwlob2xkX2xvY2tlZF9pbmRleChsb2NrX2ZpbGUsIDEpOworCisJcmVmcmVzaF9jYWNoZShSRUZSRVNIX1FVSUVUKTsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gMTsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMudXBkYXRlID0gMTsKKwlvcHRzLm1lcmdlID0gMTsKKwlvcHRzLnJlc2V0ID0gcmVzZXQ7CisJb3B0cy5mbiA9IHR3b3dheV9tZXJnZTsKKwlpbml0X3RyZWVfZGVzYygmdFswXSwgaGVhZC0+YnVmZmVyLCBoZWFkLT5zaXplKTsKKwlpbml0X3RyZWVfZGVzYygmdFsxXSwgcmVtb3RlLT5idWZmZXIsIHJlbW90ZS0+c2l6ZSk7CisKKwlpZiAodW5wYWNrX3RyZWVzKDIsIHQsICZvcHRzKSkgeworCQlyb2xsYmFja19sb2NrX2ZpbGUobG9ja19maWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBNZXJnZXMgYSB0cmVlIGludG8gdGhlIGluZGV4LiBUaGUgaW5kZXgncyBzdGF0IGluZm8gd2lsbCB0YWtlIHByZWNlZGVuY2UKKyAqIG92ZXIgdGhlIG1lcmdlZCB0cmVlJ3MuIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IG1lcmdlX3RyZWUoc3RydWN0IHRyZWUgKnRyZWUpCit7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9ja19maWxlOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCXN0cnVjdCB0cmVlX2Rlc2MgdFsxXTsKKworCWlmIChwYXJzZV90cmVlKHRyZWUpKQorCQlyZXR1cm4gLTE7CisKKwlsb2NrX2ZpbGUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisJaG9sZF9sb2NrZWRfaW5kZXgobG9ja19maWxlLCAxKTsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gMTsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7CisJaW5pdF90cmVlX2Rlc2MoJnRbMF0sIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisKKwlpZiAodW5wYWNrX3RyZWVzKDEsIHQsICZvcHRzKSkgeworCQlyb2xsYmFja19sb2NrX2ZpbGUobG9ja19maWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDbGVhbiB0aGUgaW5kZXggd2l0aG91dCB0b3VjaGluZyBlbnRyaWVzIHRoYXQgYXJlIG5vdCBtb2RpZmllZCBiZXR3ZWVuCisgKiBgaGVhZGAgYW5kIGByZW1vdGVgLgorICovCitzdGF0aWMgaW50IGNsZWFuX2luZGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlbW90ZSkKK3sKKwlzdHJ1Y3QgdHJlZSAqaGVhZF90cmVlLCAqcmVtb3RlX3RyZWUsICppbmRleF90cmVlOworCXVuc2lnbmVkIGNoYXIgaW5kZXhbR0lUX1NIQTFfUkFXU1pdOworCisJaGVhZF90cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChoZWFkKTsKKwlpZiAoIWhlYWRfdHJlZSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iKSwgc2hhMV90b19oZXgoaGVhZCkpOworCisJcmVtb3RlX3RyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KHJlbW90ZSk7CisJaWYgKCFyZW1vdGVfdHJlZSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iKSwgc2hhMV90b19oZXgocmVtb3RlKSk7CisKKwlyZWFkX2NhY2hlX3VubWVyZ2VkKCk7CisKKwlpZiAoZmFzdF9mb3J3YXJkX3RvKGhlYWRfdHJlZSwgaGVhZF90cmVlLCAxKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHdyaXRlX2NhY2hlX2FzX3RyZWUoaW5kZXgsIDAsIE5VTEwpKQorCQlyZXR1cm4gLTE7CisKKwlpbmRleF90cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChpbmRleCk7CisJaWYgKCFpbmRleF90cmVlKQorCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIpLCBzaGExX3RvX2hleChpbmRleCkpOworCisJaWYgKGZhc3RfZm9yd2FyZF90byhpbmRleF90cmVlLCByZW1vdGVfdHJlZSwgMCkpCisJCXJldHVybiAtMTsKKworCWlmIChtZXJnZV90cmVlKHJlbW90ZV90cmVlKSkKKwkJcmV0dXJuIC0xOworCisJcmVtb3ZlX2JyYW5jaF9zdGF0ZSgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogUmVzZXRzIHJlcmVyZSdzIG1lcmdlIHJlc29sdXRpb24gbWV0YWRhdGEuCisgKi8KK3N0YXRpYyB2b2lkIGFtX3JlcmVyZV9jbGVhcih2b2lkKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBtZXJnZV9yciA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXJlcmVyZV9jbGVhcigmbWVyZ2VfcnIpOworCXN0cmluZ19saXN0X2NsZWFyKCZtZXJnZV9yciwgMSk7Cit9CisKKy8qKgorICogUmVzdW1lIHRoZSBjdXJyZW50IGFtIHNlc3Npb24gYnkgc2tpcHBpbmcgdGhlIGN1cnJlbnQgcGF0Y2guCisgKi8KK3N0YXRpYyB2b2lkIGFtX3NraXAoc3RydWN0IGFtX3N0YXRlICpzdGF0ZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGhlYWRbR0lUX1NIQTFfUkFXU1pdOworCisJYW1fcmVyZXJlX2NsZWFyKCk7CisKKwlpZiAoZ2V0X3NoYTEoIkhFQUQiLCBoZWFkKSkKKwkJaGFzaGNweShoZWFkLCBFTVBUWV9UUkVFX1NIQTFfQklOKTsKKworCWlmIChjbGVhbl9pbmRleChoZWFkLCBoZWFkKSkKKwkJZGllKF8oImZhaWxlZCB0byBjbGVhbiBpbmRleCIpKTsKKworCWFtX25leHQoc3RhdGUpOworCWFtX2xvYWQoc3RhdGUpOworCWFtX3J1bihzdGF0ZSwgMCk7Cit9CisKKy8qKgorICogUmV0dXJucyB0cnVlIGlmIGl0IGlzIHNhZmUgdG8gcmVzZXQgSEVBRCB0byB0aGUgT1JJR19IRUFELCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogSXQgaXMgbm90IHNhZmUgdG8gcmVzZXQgSEVBRCB3aGVuOgorICogMS4gZ2l0LWFtIHByZXZpb3VzbHkgZmFpbGVkIGJlY2F1c2UgdGhlIGluZGV4IHdhcyBkaXJ0eS4KKyAqIDIuIEhFQUQgaGFzIG1vdmVkIHNpbmNlIGdpdC1hbSBwcmV2aW91c2x5IGZhaWxlZC4KKyAqLworc3RhdGljIGludCBzYWZlX3RvX2Fib3J0KGNvbnN0IHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGNoYXIgYWJvcnRfc2FmZXR5W0dJVF9TSEExX1JBV1NaXSwgaGVhZFtHSVRfU0hBMV9SQVdTWl07CisKKwlpZiAoZmlsZV9leGlzdHMoYW1fcGF0aChzdGF0ZSwgImRpcnR5aW5kZXgiKSkpCisJCXJldHVybiAwOworCisJaWYgKHJlYWRfc3RhdGVfZmlsZSgmc2IsIHN0YXRlLCAiYWJvcnQtc2FmZXR5IiwgMSkgPiAwKSB7CisJCWlmIChnZXRfc2hhMV9oZXgoc2IuYnVmLCBhYm9ydF9zYWZldHkpKQorCQkJZGllKF8oImNvdWxkIG5vdCBwYXJzZSAlcyIpLCBhbV9wYXRoKHN0YXRlLCAiYWJvcnRfc2FmZXR5IikpOworCX0gZWxzZQorCQloYXNoY2xyKGFib3J0X3NhZmV0eSk7CisKKwlpZiAoZ2V0X3NoYTEoIkhFQUQiLCBoZWFkKSkKKwkJaGFzaGNscihoZWFkKTsKKworCWlmICghaGFzaGNtcChoZWFkLCBhYm9ydF9zYWZldHkpKQorCQlyZXR1cm4gMTsKKworCWVycm9yKF8oIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisJCSJOb3QgcmV3aW5kaW5nIHRvIE9SSUdfSEVBRCIpKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIEFib3J0cyB0aGUgY3VycmVudCBhbSBzZXNzaW9uIGlmIGl0IGlzIHNhZmUgdG8gZG8gc28uCisgKi8KK3N0YXRpYyB2b2lkIGFtX2Fib3J0KHN0cnVjdCBhbV9zdGF0ZSAqc3RhdGUpCit7CisJdW5zaWduZWQgY2hhciBjdXJyX2hlYWRbR0lUX1NIQTFfUkFXU1pdLCBvcmlnX2hlYWRbR0lUX1NIQTFfUkFXU1pdOworCWludCBoYXNfY3Vycl9oZWFkLCBoYXNfb3JpZ19oZWFkOworCWNoYXIgKmN1cnJfYnJhbmNoOworCisJaWYgKCFzYWZlX3RvX2Fib3J0KHN0YXRlKSkgeworCQlhbV9kZXN0cm95KHN0YXRlKTsKKwkJcmV0dXJuOworCX0KKworCWFtX3JlcmVyZV9jbGVhcigpOworCisJY3Vycl9icmFuY2ggPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsIGN1cnJfaGVhZCwgTlVMTCk7CisJaGFzX2N1cnJfaGVhZCA9ICFpc19udWxsX3NoYTEoY3Vycl9oZWFkKTsKKwlpZiAoIWhhc19jdXJyX2hlYWQpCisJCWhhc2hjcHkoY3Vycl9oZWFkLCBFTVBUWV9UUkVFX1NIQTFfQklOKTsKKworCWhhc19vcmlnX2hlYWQgPSAhZ2V0X3NoYTEoIk9SSUdfSEVBRCIsIG9yaWdfaGVhZCk7CisJaWYgKCFoYXNfb3JpZ19oZWFkKQorCQloYXNoY3B5KG9yaWdfaGVhZCwgRU1QVFlfVFJFRV9TSEExX0JJTik7CisKKwljbGVhbl9pbmRleChjdXJyX2hlYWQsIG9yaWdfaGVhZCk7CisKKwlpZiAoaGFzX29yaWdfaGVhZCkKKwkJdXBkYXRlX3JlZigiYW0gLS1hYm9ydCIsICJIRUFEIiwgb3JpZ19oZWFkLAorCQkJCWhhc19jdXJyX2hlYWQgPyBjdXJyX2hlYWQgOiBOVUxMLCAwLAorCQkJCVVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCWVsc2UgaWYgKGN1cnJfYnJhbmNoKQorCQlkZWxldGVfcmVmKGN1cnJfYnJhbmNoLCBOVUxMLCBSRUZfTk9ERVJFRik7CisKKwlmcmVlKGN1cnJfYnJhbmNoKTsKKwlhbV9kZXN0cm95KHN0YXRlKTsKK30KKworLyoqCisgKiBwYXJzZV9vcHRpb25zKCkgY2FsbGJhY2sgdGhhdCB2YWxpZGF0ZXMgYW5kIHNldHMgb3B0LT52YWx1ZSB0byB0aGUKKyAqIFBBVENIX0ZPUk1BVF8qIGVudW0gdmFsdWUgY29ycmVzcG9uZGluZyB0byBgYXJnYC4KKyAqLworc3RhdGljIGludCBwYXJzZV9vcHRfcGF0Y2hmb3JtYXQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKm9wdF92YWx1ZSA9IG9wdC0+dmFsdWU7CisKKwlpZiAoIXN0cmNtcChhcmcsICJtYm94IikpCisJCSpvcHRfdmFsdWUgPSBQQVRDSF9GT1JNQVRfTUJPWDsKKwllbHNlIGlmICghc3RyY21wKGFyZywgInN0Z2l0IikpCisJCSpvcHRfdmFsdWUgPSBQQVRDSF9GT1JNQVRfU1RHSVQ7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJzdGdpdC1zZXJpZXMiKSkKKwkJKm9wdF92YWx1ZSA9IFBBVENIX0ZPUk1BVF9TVEdJVF9TRVJJRVM7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJoZyIpKQorCQkqb3B0X3ZhbHVlID0gUEFUQ0hfRk9STUFUX0hHOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKF8oIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIpLCBhcmcpOworCXJldHVybiAwOworfQorCitlbnVtIHJlc3VtZV9tb2RlIHsKKwlSRVNVTUVfRkFMU0UgPSAwLAorCVJFU1VNRV9BUFBMWSwKKwlSRVNVTUVfUkVTT0xWRUQsCisJUkVTVU1FX1NLSVAsCisJUkVTVU1FX0FCT1JUCit9OworCitzdGF0aWMgaW50IGdpdF9hbV9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IGdpdF9ncGdfY29uZmlnKGssIHYsIE5VTEwpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGssIHYsIE5VTEwpOworfQorCitpbnQgY21kX2FtKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBhbV9zdGF0ZSBzdGF0ZTsKKwlpbnQgYmluYXJ5ID0gLTE7CisJaW50IGtlZXBfY3IgPSAtMTsKKwlpbnQgcGF0Y2hfZm9ybWF0ID0gUEFUQ0hfRk9STUFUX1VOS05PV047CisJZW51bSByZXN1bWVfbW9kZSByZXN1bWUgPSBSRVNVTUVfRkFMU0U7CisJaW50IGluX3Byb2dyZXNzOworCisJY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlW10gPSB7CisJCU5fKCJnaXQgYW0gWzxvcHRpb25zPl0gWyg8bWJveD58PE1haWxkaXI+KS4uLl0iKSwKKwkJTl8oImdpdCBhbSBbPG9wdGlvbnM+XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIiksCisJCU5VTEwKKwl9OworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdpJywgImludGVyYWN0aXZlIiwgJnN0YXRlLmludGVyYWN0aXZlLAorCQkJTl8oInJ1biBpbnRlcmFjdGl2ZWx5IikpLAorCQlPUFRfSElEREVOX0JPT0woJ2InLCAiYmluYXJ5IiwgJmJpbmFyeSwKKwkJCU5fKCJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIpKSwKKwkJT1BUX0JPT0woJzMnLCAiM3dheSIsICZzdGF0ZS50aHJlZXdheSwKKwkJCU5fKCJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIpKSwKKwkJT1BUX19RVUlFVCgmc3RhdGUucXVpZXQsIE5fKCJiZSBxdWlldCIpKSwKKwkJT1BUX1NFVF9JTlQoJ3MnLCAic2lnbm9mZiIsICZzdGF0ZS5zaWdub2ZmLAorCQkJTl8oImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiKSwKKwkJCVNJR05PRkZfRVhQTElDSVQpLAorCQlPUFRfQk9PTCgndScsICJ1dGY4IiwgJnN0YXRlLnV0ZjgsCisJCQlOXygicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiKSksCisJCU9QVF9TRVRfSU5UKCdrJywgImtlZXAiLCAmc3RhdGUua2VlcCwKKwkJCU5fKCJwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvIiksIEtFRVBfVFJVRSksCisJCU9QVF9TRVRfSU5UKDAsICJrZWVwLW5vbi1wYXRjaCIsICZzdGF0ZS5rZWVwLAorCQkJTl8oInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iKSwgS0VFUF9OT05fUEFUQ0gpLAorCQlPUFRfQk9PTCgnbScsICJtZXNzYWdlLWlkIiwgJnN0YXRlLm1lc3NhZ2VfaWQsCisJCQlOXygicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIpKSwKKwkJeyBPUFRJT05fU0VUX0lOVCwgMCwgImtlZXAtY3IiLCAma2VlcF9jciwgTlVMTCwKKwkJICBOXygicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIpLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgMX0sCisJCXsgT1BUSU9OX1NFVF9JTlQsIDAsICJuby1rZWVwLWNyIiwgJmtlZXBfY3IsIE5VTEwsCisJCSAgTl8oImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIiksCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCAwfSwKKwkJT1BUX0JPT0woJ2MnLCAic2Npc3NvcnMiLCAmc3RhdGUuc2Npc3NvcnMsCisJCQlOXygic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIikpLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAid2hpdGVzcGFjZSIsICZzdGF0ZS5naXRfYXBwbHlfb3B0cywgTl8oImFjdGlvbiIpLAorCQkJTl8oInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiKSwKKwkJCTApLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAiaWdub3JlLXNwYWNlLWNoYW5nZSIsICZzdGF0ZS5naXRfYXBwbHlfb3B0cywgTlVMTCwKKwkJCU5fKCJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IiksCisJCQlQQVJTRV9PUFRfTk9BUkcpLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAiaWdub3JlLXdoaXRlc3BhY2UiLCAmc3RhdGUuZ2l0X2FwcGx5X29wdHMsIE5VTEwsCisJCQlOXygicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIpLAorCQkJUEFSU0VfT1BUX05PQVJHKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgImRpcmVjdG9yeSIsICZzdGF0ZS5naXRfYXBwbHlfb3B0cywgTl8oInJvb3QiKSwKKwkJCU5fKCJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IiksCisJCQkwKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoMCwgImV4Y2x1ZGUiLCAmc3RhdGUuZ2l0X2FwcGx5X29wdHMsIE5fKCJwYXRoIiksCisJCQlOXygicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIpLAorCQkJMCksCisJCU9QVF9QQVNTVEhSVV9BUkdWKDAsICJpbmNsdWRlIiwgJnN0YXRlLmdpdF9hcHBseV9vcHRzLCBOXygicGF0aCIpLAorCQkJTl8oInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiKSwKKwkJCTApLAorCQlPUFRfUEFTU1RIUlVfQVJHVignQycsIE5VTEwsICZzdGF0ZS5naXRfYXBwbHlfb3B0cywgTl8oIm4iKSwKKwkJCU5fKCJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IiksCisJCQkwKSwKKwkJT1BUX1BBU1NUSFJVX0FSR1YoJ3AnLCBOVUxMLCAmc3RhdGUuZ2l0X2FwcGx5X29wdHMsIE5fKCJudW0iKSwKKwkJCU5fKCJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IiksCisJCQkwKSwKKwkJT1BUX0NBTExCQUNLKDAsICJwYXRjaC1mb3JtYXQiLCAmcGF0Y2hfZm9ybWF0LCBOXygiZm9ybWF0IiksCisJCQlOXygiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIiksCisJCQlwYXJzZV9vcHRfcGF0Y2hmb3JtYXQpLAorCQlPUFRfUEFTU1RIUlVfQVJHVigwLCAicmVqZWN0IiwgJnN0YXRlLmdpdF9hcHBseV9vcHRzLCBOVUxMLAorCQkJTl8oInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyksCisJCU9QVF9TVFJJTkcoMCwgInJlc29sdmVtc2ciLCAmc3RhdGUucmVzb2x2ZW1zZywgTlVMTCwKKwkJCU5fKCJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiKSksCisJCU9QVF9DTURNT0RFKDAsICJjb250aW51ZSIsICZyZXN1bWUsCisJCQlOXygiY29udGludWUgYXBwbHlpbmcgcGF0Y2hlcyBhZnRlciByZXNvbHZpbmcgYSBjb25mbGljdCIpLAorCQkJUkVTVU1FX1JFU09MVkVEKSwKKwkJT1BUX0NNRE1PREUoJ3InLCAicmVzb2x2ZWQiLCAmcmVzdW1lLAorCQkJTl8oInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIiksCisJCQlSRVNVTUVfUkVTT0xWRUQpLAorCQlPUFRfQ01ETU9ERSgwLCAic2tpcCIsICZyZXN1bWUsCisJCQlOXygic2tpcCB0aGUgY3VycmVudCBwYXRjaCIpLAorCQkJUkVTVU1FX1NLSVApLAorCQlPUFRfQ01ETU9ERSgwLCAiYWJvcnQiLCAmcmVzdW1lLAorCQkJTl8oInJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbi4iKSwKKwkJCVJFU1VNRV9BQk9SVCksCisJCU9QVF9CT09MKDAsICJjb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSIsCisJCQkmc3RhdGUuY29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGUsCisJCQlOXygibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIikpLAorCQlPUFRfQk9PTCgwLCAiaWdub3JlLWRhdGUiLCAmc3RhdGUuaWdub3JlX2RhdGUsCisJCQlOXygidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIpKSwKKwkJT1BUX1JFUkVSRV9BVVRPVVBEQVRFKCZzdGF0ZS5hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSksCisJCXsgT1BUSU9OX1NUUklORywgJ1MnLCAiZ3BnLXNpZ24iLCAmc3RhdGUuc2lnbl9jb21taXQsIE5fKCJrZXktaWQiKSwKKwkJICBOXygiR1BHLXNpZ24gY29tbWl0cyIpLAorCQkgIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkgIiIgfSwKKwkJT1BUX0hJRERFTl9CT09MKDAsICJyZWJhc2luZyIsICZzdGF0ZS5yZWJhc2luZywKKwkJCU5fKCIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2FtX2NvbmZpZywgTlVMTCk7CisKKwlhbV9zdGF0ZV9pbml0KCZzdGF0ZSwgZ2l0X3BhdGgoInJlYmFzZS1hcHBseSIpKTsKKworCWluX3Byb2dyZXNzID0gYW1faW5fcHJvZ3Jlc3MoJnN0YXRlKTsKKwlpZiAoaW5fcHJvZ3Jlc3MpCisJCWFtX2xvYWQoJnN0YXRlKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgdXNhZ2UsIDApOworCisJaWYgKGJpbmFyeSA+PSAwKQorCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorCQkJCSJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIikpOworCisJLyogRW5zdXJlIGEgdmFsaWQgY29tbWl0dGVyIGlkZW50IGNhbiBiZSBjb25zdHJ1Y3RlZCAqLworCWdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9TVFJJQ1QpOworCisJaWYgKHJlYWRfaW5kZXhfcHJlbG9hZCgmdGhlX2luZGV4LCBOVUxMKSA8IDApCisJCWRpZShfKCJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiKSk7CisKKwlpZiAoaW5fcHJvZ3Jlc3MpIHsKKwkJLyoKKwkJICogQ2F0Y2ggdXNlciBlcnJvciB0byBmZWVkIHVzIHBhdGNoZXMgd2hlbiB0aGVyZSBpcyBhIHNlc3Npb24KKwkJICogaW4gcHJvZ3Jlc3M6CisJCSAqCisJCSAqIDEuIG1ib3ggcGF0aChzKSBhcmUgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQtbGluZS4KKwkJICogMi4gc3RkaW4gaXMgbm90IGEgdHR5OiB0aGUgdXNlciBpcyB0cnlpbmcgdG8gZmVlZCB1cyBhIHBhdGNoCisJCSAqICAgIGZyb20gc3RhbmRhcmQgaW5wdXQuIFRoaXMgaXMgc29tZXdoYXQgdW5yZWxpYWJsZSAtLSBzdGRpbgorCQkgKiAgICBjb3VsZCBiZSAvZGV2L251bGwgZm9yIGV4YW1wbGUgYW5kIHRoZSBjYWxsZXIgZGlkIG5vdAorCQkgKiAgICBpbnRlbmQgdG8gZmVlZCB1cyBhIHBhdGNoIGJ1dCB3YW50ZWQgdG8gY29udGludWUKKwkJICogICAgdW5hdHRlbmRlZC4KKwkJICovCisJCWlmIChhcmdjIHx8IChyZXN1bWUgPT0gUkVTVU1FX0ZBTFNFICYmICFpc2F0dHkoMCkpKQorCQkJZGllKF8oInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIpLAorCQkJCXN0YXRlLmRpcik7CisKKwkJaWYgKHJlc3VtZSA9PSBSRVNVTUVfRkFMU0UpCisJCQlyZXN1bWUgPSBSRVNVTUVfQVBQTFk7CisKKwkJaWYgKHN0YXRlLnNpZ25vZmYgPT0gU0lHTk9GRl9FWFBMSUNJVCkKKwkJCWFtX2FwcGVuZF9zaWdub2ZmKCZzdGF0ZSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgcGF0aHMgPSBBUkdWX0FSUkFZX0lOSVQ7CisJCWludCBpOworCisJCS8qCisJCSAqIEhhbmRsZSBzdHJheSBzdGF0ZSBkaXJlY3RvcnkgaW4gdGhlIGluZGVwZW5kZW50LXJ1biBjYXNlLiBJbgorCQkgKiB0aGUgLS1yZWJhc2luZyBjYXNlLCBpdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIHRha2UgY2FyZSBvZgorCQkgKiBzdHJheSBkaXJlY3Rvcmllcy4KKwkJICovCisJCWlmIChmaWxlX2V4aXN0cyhzdGF0ZS5kaXIpICYmICFzdGF0ZS5yZWJhc2luZykgeworCQkJaWYgKHJlc3VtZSA9PSBSRVNVTUVfQUJPUlQpIHsKKwkJCQlhbV9kZXN0cm95KCZzdGF0ZSk7CisJCQkJYW1fc3RhdGVfcmVsZWFzZSgmc3RhdGUpOworCQkJCXJldHVybiAwOworCQkJfQorCisJCQlkaWUoXygiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorCQkJCSJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iKSwKKwkJCQlzdGF0ZS5kaXIpOworCQl9CisKKwkJaWYgKHJlc3VtZSkKKwkJCWRpZShfKCJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIikpOworCisJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJCWlmIChpc19hYnNvbHV0ZV9wYXRoKGFyZ3ZbaV0pIHx8ICFwcmVmaXgpCisJCQkJYXJndl9hcnJheV9wdXNoKCZwYXRocywgYXJndltpXSk7CisJCQllbHNlCisJCQkJYXJndl9hcnJheV9wdXNoKCZwYXRocywgbWtwYXRoKCIlcy8lcyIsIHByZWZpeCwgYXJndltpXSkpOworCQl9CisKKwkJYW1fc2V0dXAoJnN0YXRlLCBwYXRjaF9mb3JtYXQsIHBhdGhzLmFyZ3YsIGtlZXBfY3IpOworCisJCWFyZ3ZfYXJyYXlfY2xlYXIoJnBhdGhzKTsKKwl9CisKKwlzd2l0Y2ggKHJlc3VtZSkgeworCWNhc2UgUkVTVU1FX0ZBTFNFOgorCQlhbV9ydW4oJnN0YXRlLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBSRVNVTUVfQVBQTFk6CisJCWFtX3J1bigmc3RhdGUsIDEpOworCQlicmVhazsKKwljYXNlIFJFU1VNRV9SRVNPTFZFRDoKKwkJYW1fcmVzb2x2ZSgmc3RhdGUpOworCQlicmVhazsKKwljYXNlIFJFU1VNRV9TS0lQOgorCQlhbV9za2lwKCZzdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgUkVTVU1FX0FCT1JUOgorCQlhbV9hYm9ydCgmc3RhdGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoIkJVRzogaW52YWxpZCByZXN1bWUgdmFsdWUiKTsKKwl9CisKKwlhbV9zdGF0ZV9yZWxlYXNlKCZzdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vYW5ub3RhdGUuYyBiL2J1aWx0aW4vYW5ub3RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTQxM2FlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9hbm5vdGF0ZS5jCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiAiZ2l0IGFubm90YXRlIiBidWlsdGluIGFsaWFzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFJ5YW4gQW5kZXJzb24KKyAqLworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKK2ludCBjbWRfYW5ub3RhdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlpbnQgaTsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJmFyZ3MsICJhbm5vdGF0ZSIsICItYyIsIE5VTEwpOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIGFyZ3ZbaV0pOworCX0KKworCXJldHVybiBjbWRfYmxhbWUoYXJncy5hcmdjLCBhcmdzLmFyZ3YsIHByZWZpeCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2FwcGx5LmMgYi9idWlsdGluL2FwcGx5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGViMTM2NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vYXBwbHkuYwpAQCAtMCwwICsxLDQ2NzMgQEAKKy8qCisgKiBhcHBseS5jCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICoKKyAqIFRoaXMgYXBwbGllcyBwYXRjaGVzIG9uIHRvcCBvZiBzb21lIChhcmJpdHJhcnkpIHZlcnNpb24gb2YgdGhlIFNDTS4KKyAqCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorI2luY2x1ZGUgInJlcmVyZS5oIgorCisvKgorICogIC0tY2hlY2sgdHVybnMgb24gY2hlY2tpbmcgdGhhdCB0aGUgd29ya2luZyB0cmVlIG1hdGNoZXMgdGhlCisgKiAgICBmaWxlcyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZCwgYnV0IGRvZXNuJ3QgYXBwbHkgdGhlIHBhdGNoCisgKiAgLS1zdGF0IGRvZXMganVzdCBhIGRpZmZzdGF0LCBhbmQgZG9lc24ndCBhY3R1YWxseSBhcHBseQorICogIC0tbnVtc3RhdCBkb2VzIG51bWVyaWMgZGlmZnN0YXQsIGFuZCBkb2Vzbid0IGFjdHVhbGx5IGFwcGx5CisgKiAgLS1pbmRleC1pbmZvIHNob3dzIHRoZSBvbGQgYW5kIG5ldyBpbmRleCBpbmZvIGZvciBwYXRocyBpZiBhdmFpbGFibGUuCisgKiAgLS1pbmRleCB1cGRhdGVzIHRoZSBjYWNoZSBhcyB3ZWxsLgorICogIC0tY2FjaGVkIHVwZGF0ZXMgb25seSB0aGUgY2FjaGUgd2l0aG91dCBldmVyIHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpwcmVmaXg7CitzdGF0aWMgaW50IHByZWZpeF9sZW5ndGggPSAtMTsKK3N0YXRpYyBpbnQgbmV3ZmQgPSAtMTsKKworc3RhdGljIGludCB1bmlkaWZmX3plcm87CitzdGF0aWMgaW50IHBfdmFsdWUgPSAxOworc3RhdGljIGludCBwX3ZhbHVlX2tub3duOworc3RhdGljIGludCBjaGVja19pbmRleDsKK3N0YXRpYyBpbnQgdXBkYXRlX2luZGV4Oworc3RhdGljIGludCBjYWNoZWQ7CitzdGF0aWMgaW50IGRpZmZzdGF0Oworc3RhdGljIGludCBudW1zdGF0Oworc3RhdGljIGludCBzdW1tYXJ5Oworc3RhdGljIGludCBjaGVjazsKK3N0YXRpYyBpbnQgYXBwbHkgPSAxOworc3RhdGljIGludCBhcHBseV9pbl9yZXZlcnNlOworc3RhdGljIGludCBhcHBseV93aXRoX3JlamVjdDsKK3N0YXRpYyBpbnQgYXBwbHlfdmVyYm9zZWx5Oworc3RhdGljIGludCBhbGxvd19vdmVybGFwOworc3RhdGljIGludCBub19hZGQ7CitzdGF0aWMgaW50IHRocmVld2F5Oworc3RhdGljIGludCB1bnNhZmVfcGF0aHM7CitzdGF0aWMgY29uc3QgY2hhciAqZmFrZV9hbmNlc3RvcjsKK3N0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CitzdGF0aWMgdW5zaWduZWQgaW50IHBfY29udGV4dCA9IFVJTlRfTUFYOworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcHBseV91c2FnZVtdID0geworCU5fKCJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGVudW0gd3NfZXJyb3JfYWN0aW9uIHsKKwlub3dhcm5fd3NfZXJyb3IsCisJd2Fybl9vbl93c19lcnJvciwKKwlkaWVfb25fd3NfZXJyb3IsCisJY29ycmVjdF93c19lcnJvcgorfSB3c19lcnJvcl9hY3Rpb24gPSB3YXJuX29uX3dzX2Vycm9yOworc3RhdGljIGludCB3aGl0ZXNwYWNlX2Vycm9yOworc3RhdGljIGludCBzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzID0gNTsKK3N0YXRpYyBpbnQgYXBwbGllZF9hZnRlcl9maXhpbmdfd3M7CisKK3N0YXRpYyBlbnVtIHdzX2lnbm9yZSB7CisJaWdub3JlX3dzX25vbmUsCisJaWdub3JlX3dzX2NoYW5nZQorfSB3c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX25vbmU7CisKKworc3RhdGljIGNvbnN0IGNoYXIgKnBhdGNoX2lucHV0X2ZpbGU7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiByb290ID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgaW50IHJlYWRfc3RkaW4gPSAxOworc3RhdGljIGludCBvcHRpb25zOworCitzdGF0aWMgdm9pZCBwYXJzZV93aGl0ZXNwYWNlX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24pCit7CisJaWYgKCFvcHRpb24pIHsKKwkJd3NfZXJyb3JfYWN0aW9uID0gd2Fybl9vbl93c19lcnJvcjsKKwkJcmV0dXJuOworCX0KKwlpZiAoIXN0cmNtcChvcHRpb24sICJ3YXJuIikpIHsKKwkJd3NfZXJyb3JfYWN0aW9uID0gd2Fybl9vbl93c19lcnJvcjsKKwkJcmV0dXJuOworCX0KKwlpZiAoIXN0cmNtcChvcHRpb24sICJub3dhcm4iKSkgeworCQl3c19lcnJvcl9hY3Rpb24gPSBub3dhcm5fd3NfZXJyb3I7CisJCXJldHVybjsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAiZXJyb3IiKSkgeworCQl3c19lcnJvcl9hY3Rpb24gPSBkaWVfb25fd3NfZXJyb3I7CisJCXJldHVybjsKKwl9CisJaWYgKCFzdHJjbXAob3B0aW9uLCAiZXJyb3ItYWxsIikpIHsKKwkJd3NfZXJyb3JfYWN0aW9uID0gZGllX29uX3dzX2Vycm9yOworCQlzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzID0gMDsKKwkJcmV0dXJuOworCX0KKwlpZiAoIXN0cmNtcChvcHRpb24sICJzdHJpcCIpIHx8ICFzdHJjbXAob3B0aW9uLCAiZml4IikpIHsKKwkJd3NfZXJyb3JfYWN0aW9uID0gY29ycmVjdF93c19lcnJvcjsKKwkJcmV0dXJuOworCX0KKwlkaWUoXygidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciKSwgb3B0aW9uKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfaWdub3Jld2hpdGVzcGFjZV9vcHRpb24oY29uc3QgY2hhciAqb3B0aW9uKQoreworCWlmICghb3B0aW9uIHx8ICFzdHJjbXAob3B0aW9uLCAibm8iKSB8fAorCSAgICAhc3RyY21wKG9wdGlvbiwgImZhbHNlIikgfHwgIXN0cmNtcChvcHRpb24sICJuZXZlciIpIHx8CisJICAgICFzdHJjbXAob3B0aW9uLCAibm9uZSIpKSB7CisJCXdzX2lnbm9yZV9hY3Rpb24gPSBpZ25vcmVfd3Nfbm9uZTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIXN0cmNtcChvcHRpb24sICJjaGFuZ2UiKSkgeworCQl3c19pZ25vcmVfYWN0aW9uID0gaWdub3JlX3dzX2NoYW5nZTsKKwkJcmV0dXJuOworCX0KKwlkaWUoXygidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIiksIG9wdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kZWZhdWx0X3doaXRlc3BhY2VfbW9kZShjb25zdCBjaGFyICp3aGl0ZXNwYWNlX29wdGlvbikKK3sKKwlpZiAoIXdoaXRlc3BhY2Vfb3B0aW9uICYmICFhcHBseV9kZWZhdWx0X3doaXRlc3BhY2UpCisJCXdzX2Vycm9yX2FjdGlvbiA9IChhcHBseSA/IHdhcm5fb25fd3NfZXJyb3IgOiBub3dhcm5fd3NfZXJyb3IpOworfQorCisvKgorICogRm9yICJkaWZmLXN0YXQiIGxpa2UgYmVoYXZpb3VyLCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBiaWdnZXN0IGNoYW5nZQorICogd2UndmUgc2VlbiwgYW5kIHRoZSBsb25nZXN0IGZpbGVuYW1lLiBUaGF0IGFsbG93cyB1cyB0byBkbyBzaW1wbGUKKyAqIHNjYWxpbmcuCisgKi8KK3N0YXRpYyBpbnQgbWF4X2NoYW5nZSwgbWF4X2xlbjsKKworLyoKKyAqIFZhcmlvdXMgImN1cnJlbnQgc3RhdGUiLCBub3RhYmx5IGxpbmUgbnVtYmVycyBhbmQgd2hhdAorICogZmlsZSAoYW5kIGhvdykgd2UncmUgcGF0Y2hpbmcgcmlnaHQgbm93Li4gVGhlICJpc194eHh4IgorICogdGhpbmdzIGFyZSBmbGFncywgd2hlcmUgLTEgbWVhbnMgImRvbid0IGtub3cgeWV0Ii4KKyAqLworc3RhdGljIGludCBsaW5lbnIgPSAxOworCisvKgorICogVGhpcyByZXByZXNlbnRzIG9uZSAiaHVuayIgZnJvbSBhIHBhdGNoLCBzdGFydGluZyB3aXRoCisgKiAiQEAgLW9sZHBvcyxvbGRsaW5lcyArbmV3cG9zLG5ld2xpbmVzIEBAIiBtYXJrZXIuICBUaGUKKyAqIHBhdGNoIHRleHQgaXMgcG9pbnRlZCBhdCBieSBwYXRjaCwgYW5kIGl0cyBieXRlIGxlbmd0aAorICogaXMgc3RvcmVkIGluIHNpemUuICBsZWFkaW5nIGFuZCB0cmFpbGluZyBhcmUgdGhlIG51bWJlcgorICogb2YgY29udGV4dCBsaW5lcy4KKyAqLworc3RydWN0IGZyYWdtZW50IHsKKwl1bnNpZ25lZCBsb25nIGxlYWRpbmcsIHRyYWlsaW5nOworCXVuc2lnbmVkIGxvbmcgb2xkcG9zLCBvbGRsaW5lczsKKwl1bnNpZ25lZCBsb25nIG5ld3BvcywgbmV3bGluZXM7CisJLyoKKwkgKiAncGF0Y2gnIGlzIHVzdWFsbHkgYm9ycm93ZWQgZnJvbSBidWYgaW4gYXBwbHlfcGF0Y2goKSwKKwkgKiBidXQgc29tZSBjb2RlcGF0aHMgc3RvcmUgYW4gYWxsb2NhdGVkIGJ1ZmZlci4KKwkgKi8KKwljb25zdCBjaGFyICpwYXRjaDsKKwl1bnNpZ25lZCBmcmVlX3BhdGNoOjEsCisJCXJlamVjdGVkOjE7CisJaW50IHNpemU7CisJaW50IGxpbmVucjsKKwlzdHJ1Y3QgZnJhZ21lbnQgKm5leHQ7Cit9OworCisvKgorICogV2hlbiBkZWFsaW5nIHdpdGggYSBiaW5hcnkgcGF0Y2gsIHdlIHJldXNlICJsZWFkaW5nIiBmaWVsZAorICogdG8gc3RvcmUgdGhlIHR5cGUgb2YgdGhlIGJpbmFyeSBodW5rLCBlaXRoZXIgZGVmbGF0ZWQgImRlbHRhIgorICogb3IgZGVmbGF0ZWQgImxpdGVyYWwiLgorICovCisjZGVmaW5lIGJpbmFyeV9wYXRjaF9tZXRob2QgbGVhZGluZworI2RlZmluZSBCSU5BUllfREVMVEFfREVGTEFURUQJMQorI2RlZmluZSBCSU5BUllfTElURVJBTF9ERUZMQVRFRCAyCisKKy8qCisgKiBUaGlzIHJlcHJlc2VudHMgYSAicGF0Y2giIHRvIGEgZmlsZSwgYm90aCBtZXRhaW5mbyBjaGFuZ2VzCisgKiBzdWNoIGFzIGNyZWF0aW9uL2RlbGV0aW9uLCBmaWxlbW9kZSBhbmQgY29udGVudCBjaGFuZ2VzIHJlcHJlc2VudGVkCisgKiBhcyBhIHNlcmllcyBvZiBmcmFnbWVudHMuCisgKi8KK3N0cnVjdCBwYXRjaCB7CisJY2hhciAqbmV3X25hbWUsICpvbGRfbmFtZSwgKmRlZl9uYW1lOworCXVuc2lnbmVkIGludCBvbGRfbW9kZSwgbmV3X21vZGU7CisJaW50IGlzX25ldywgaXNfZGVsZXRlOwkvKiAtMSA9IHVua25vd24sIDAgPSBmYWxzZSwgMSA9IHRydWUgKi8KKwlpbnQgcmVqZWN0ZWQ7CisJdW5zaWduZWQgd3NfcnVsZTsKKwlpbnQgbGluZXNfYWRkZWQsIGxpbmVzX2RlbGV0ZWQ7CisJaW50IHNjb3JlOworCXVuc2lnbmVkIGludCBpc190b3BsZXZlbF9yZWxhdGl2ZToxOworCXVuc2lnbmVkIGludCBpbmFjY3VyYXRlX2VvZjoxOworCXVuc2lnbmVkIGludCBpc19iaW5hcnk6MTsKKwl1bnNpZ25lZCBpbnQgaXNfY29weToxOworCXVuc2lnbmVkIGludCBpc19yZW5hbWU6MTsKKwl1bnNpZ25lZCBpbnQgcmVjb3VudDoxOworCXVuc2lnbmVkIGludCBjb25mbGljdGVkX3RocmVld2F5OjE7CisJdW5zaWduZWQgaW50IGRpcmVjdF90b190aHJlZXdheToxOworCXN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnRzOworCWNoYXIgKnJlc3VsdDsKKwlzaXplX3QgcmVzdWx0c2l6ZTsKKwljaGFyIG9sZF9zaGExX3ByZWZpeFs0MV07CisJY2hhciBuZXdfc2hhMV9wcmVmaXhbNDFdOworCXN0cnVjdCBwYXRjaCAqbmV4dDsKKworCS8qIHRocmVlLXdheSBmYWxsYmFjayByZXN1bHQgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRocmVld2F5X3N0YWdlWzNdOworfTsKKworc3RhdGljIHZvaWQgZnJlZV9mcmFnbWVudF9saXN0KHN0cnVjdCBmcmFnbWVudCAqbGlzdCkKK3sKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgZnJhZ21lbnQgKm5leHQgPSBsaXN0LT5uZXh0OworCQlpZiAobGlzdC0+ZnJlZV9wYXRjaCkKKwkJCWZyZWUoKGNoYXIgKilsaXN0LT5wYXRjaCk7CisJCWZyZWUobGlzdCk7CisJCWxpc3QgPSBuZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9wYXRjaChzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWZyZWVfZnJhZ21lbnRfbGlzdChwYXRjaC0+ZnJhZ21lbnRzKTsKKwlmcmVlKHBhdGNoLT5kZWZfbmFtZSk7CisJZnJlZShwYXRjaC0+b2xkX25hbWUpOworCWZyZWUocGF0Y2gtPm5ld19uYW1lKTsKKwlmcmVlKHBhdGNoLT5yZXN1bHQpOworCWZyZWUocGF0Y2gpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3BhdGNoX2xpc3Qoc3RydWN0IHBhdGNoICpsaXN0KQoreworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBwYXRjaCAqbmV4dCA9IGxpc3QtPm5leHQ7CisJCWZyZWVfcGF0Y2gobGlzdCk7CisJCWxpc3QgPSBuZXh0OworCX0KK30KKworLyoKKyAqIEEgbGluZSBpbiBhIGZpbGUsIGxlbi1ieXRlcyBsb25nIChpbmNsdWRlcyB0aGUgdGVybWluYXRpbmcgTEYsCisgKiBleGNlcHQgZm9yIGFuIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kIGlmIHRoZSBmaWxlIGVuZHMgd2l0aAorICogb25lKSwgYW5kIGl0cyBjb250ZW50cyBoYXNoZXMgdG8gJ2hhc2gnLgorICovCitzdHJ1Y3QgbGluZSB7CisJc2l6ZV90IGxlbjsKKwl1bnNpZ25lZCBoYXNoIDogMjQ7CisJdW5zaWduZWQgZmxhZyA6IDg7CisjZGVmaW5lIExJTkVfQ09NTU9OICAgICAxCisjZGVmaW5lIExJTkVfUEFUQ0hFRAkyCit9OworCisvKgorICogVGhpcyByZXByZXNlbnRzIGEgImZpbGUiLCB3aGljaCBpcyBhbiBhcnJheSBvZiAibGluZXMiLgorICovCitzdHJ1Y3QgaW1hZ2UgeworCWNoYXIgKmJ1ZjsKKwlzaXplX3QgbGVuOworCXNpemVfdCBucjsKKwlzaXplX3QgYWxsb2M7CisJc3RydWN0IGxpbmUgKmxpbmVfYWxsb2NhdGVkOworCXN0cnVjdCBsaW5lICpsaW5lOworfTsKKworLyoKKyAqIFJlY29yZHMgZmlsZW5hbWVzIHRoYXQgaGF2ZSBiZWVuIHRvdWNoZWQsIGluIG9yZGVyIHRvIGhhbmRsZQorICogdGhlIGNhc2Ugd2hlcmUgbW9yZSB0aGFuIG9uZSBwYXRjaGVzIHRvdWNoIHRoZSBzYW1lIGZpbGUuCisgKi8KKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBmbl90YWJsZTsKKworc3RhdGljIHVpbnQzMl90IGhhc2hfbGluZShjb25zdCBjaGFyICpjcCwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3QgaTsKKwl1aW50MzJfdCBoOworCWZvciAoaSA9IDAsIGggPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKCFpc3NwYWNlKGNwW2ldKSkgeworCQkJaCA9IGggKiAzICsgKGNwW2ldICYgMHhmZik7CisJCX0KKwl9CisJcmV0dXJuIGg7Cit9CisKKy8qCisgKiBDb21wYXJlIGxpbmVzIHMxIG9mIGxlbmd0aCBuMSBhbmQgczIgb2YgbGVuZ3RoIG4yLCBpZ25vcmluZworICogd2hpdGVzcGFjZSBkaWZmZXJlbmNlLiBSZXR1cm5zIDEgaWYgdGhleSBtYXRjaCwgMCBvdGhlcndpc2UKKyAqLworc3RhdGljIGludCBmdXp6eV9tYXRjaGxpbmVzKGNvbnN0IGNoYXIgKnMxLCBzaXplX3QgbjEsCisJCQkgICAgY29uc3QgY2hhciAqczIsIHNpemVfdCBuMikKK3sKKwljb25zdCBjaGFyICpsYXN0MSA9IHMxICsgbjEgLSAxOworCWNvbnN0IGNoYXIgKmxhc3QyID0gczIgKyBuMiAtIDE7CisJaW50IHJlc3VsdCA9IDA7CisKKwkvKiBpZ25vcmUgbGluZSBlbmRpbmdzICovCisJd2hpbGUgKCgqbGFzdDEgPT0gJ1xyJykgfHwgKCpsYXN0MSA9PSAnXG4nKSkKKwkJbGFzdDEtLTsKKwl3aGlsZSAoKCpsYXN0MiA9PSAnXHInKSB8fCAoKmxhc3QyID09ICdcbicpKQorCQlsYXN0Mi0tOworCisJLyogc2tpcCBsZWFkaW5nIHdoaXRlc3BhY2VzLCBpZiBib3RoIGJlZ2luIHdpdGggd2hpdGVzcGFjZSAqLworCWlmIChzMSA8PSBsYXN0MSAmJiBzMiA8PSBsYXN0MiAmJiBpc3NwYWNlKCpzMSkgJiYgaXNzcGFjZSgqczIpKSB7CisJCXdoaWxlIChpc3NwYWNlKCpzMSkgJiYgKHMxIDw9IGxhc3QxKSkKKwkJCXMxKys7CisJCXdoaWxlIChpc3NwYWNlKCpzMikgJiYgKHMyIDw9IGxhc3QyKSkKKwkJCXMyKys7CisJfQorCS8qIGVhcmx5IHJldHVybiBpZiBib3RoIGxpbmVzIGFyZSBlbXB0eSAqLworCWlmICgoczEgPiBsYXN0MSkgJiYgKHMyID4gbGFzdDIpKQorCQlyZXR1cm4gMTsKKwl3aGlsZSAoIXJlc3VsdCkgeworCQlyZXN1bHQgPSAqczErKyAtICpzMisrOworCQkvKgorCQkgKiBTa2lwIHdoaXRlc3BhY2UgaW5zaWRlLiBXZSBjaGVjayBmb3Igd2hpdGVzcGFjZSBvbgorCQkgKiBib3RoIGJ1ZmZlcnMgYmVjYXVzZSB3ZSBkb24ndCB3YW50ICJhIGIiIHRvIG1hdGNoCisJCSAqICJhYiIKKwkJICovCisJCWlmIChpc3NwYWNlKCpzMSkgJiYgaXNzcGFjZSgqczIpKSB7CisJCQl3aGlsZSAoaXNzcGFjZSgqczEpICYmIHMxIDw9IGxhc3QxKQorCQkJCXMxKys7CisJCQl3aGlsZSAoaXNzcGFjZSgqczIpICYmIHMyIDw9IGxhc3QyKQorCQkJCXMyKys7CisJCX0KKwkJLyoKKwkJICogSWYgd2UgcmVhY2hlZCB0aGUgZW5kIG9uIG9uZSBzaWRlIG9ubHksCisJCSAqIGxpbmVzIGRvbid0IG1hdGNoCisJCSAqLworCQlpZiAoCisJCSAgICAoKHMyID4gbGFzdDIpICYmIChzMSA8PSBsYXN0MSkpIHx8CisJCSAgICAoKHMxID4gbGFzdDEpICYmIChzMiA8PSBsYXN0MikpKQorCQkJcmV0dXJuIDA7CisJCWlmICgoczEgPiBsYXN0MSkgJiYgKHMyID4gbGFzdDIpKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuICFyZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9saW5lX2luZm8oc3RydWN0IGltYWdlICppbWcsIGNvbnN0IGNoYXIgKmJvbCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgZmxhZykKK3sKKwlBTExPQ19HUk9XKGltZy0+bGluZV9hbGxvY2F0ZWQsIGltZy0+bnIgKyAxLCBpbWctPmFsbG9jKTsKKwlpbWctPmxpbmVfYWxsb2NhdGVkW2ltZy0+bnJdLmxlbiA9IGxlbjsKKwlpbWctPmxpbmVfYWxsb2NhdGVkW2ltZy0+bnJdLmhhc2ggPSBoYXNoX2xpbmUoYm9sLCBsZW4pOworCWltZy0+bGluZV9hbGxvY2F0ZWRbaW1nLT5ucl0uZmxhZyA9IGZsYWc7CisJaW1nLT5ucisrOworfQorCisvKgorICogImJ1ZiIgaGFzIHRoZSBmaWxlIGNvbnRlbnRzIHRvIGJlIHBhdGNoZWQgKHJlYWQgZnJvbSB2YXJpb3VzIHNvdXJjZXMpLgorICogYXR0YWNoIGl0IHRvICJpbWFnZSIgYW5kIGFkZCBsaW5lLWJhc2VkIGluZGV4IHRvIGl0LgorICogImltYWdlIiBub3cgb3ducyB0aGUgImJ1ZiIuCisgKi8KK3N0YXRpYyB2b2lkIHByZXBhcmVfaW1hZ2Uoc3RydWN0IGltYWdlICppbWFnZSwgY2hhciAqYnVmLCBzaXplX3QgbGVuLAorCQkJICBpbnQgcHJlcGFyZV9saW5ldGFibGUpCit7CisJY29uc3QgY2hhciAqY3AsICplcDsKKworCW1lbXNldChpbWFnZSwgMCwgc2l6ZW9mKCppbWFnZSkpOworCWltYWdlLT5idWYgPSBidWY7CisJaW1hZ2UtPmxlbiA9IGxlbjsKKworCWlmICghcHJlcGFyZV9saW5ldGFibGUpCisJCXJldHVybjsKKworCWVwID0gaW1hZ2UtPmJ1ZiArIGltYWdlLT5sZW47CisJY3AgPSBpbWFnZS0+YnVmOworCXdoaWxlIChjcCA8IGVwKSB7CisJCWNvbnN0IGNoYXIgKm5leHQ7CisJCWZvciAobmV4dCA9IGNwOyBuZXh0IDwgZXAgJiYgKm5leHQgIT0gJ1xuJzsgbmV4dCsrKQorCQkJOworCQlpZiAobmV4dCA8IGVwKQorCQkJbmV4dCsrOworCQlhZGRfbGluZV9pbmZvKGltYWdlLCBjcCwgbmV4dCAtIGNwLCAwKTsKKwkJY3AgPSBuZXh0OworCX0KKwlpbWFnZS0+bGluZSA9IGltYWdlLT5saW5lX2FsbG9jYXRlZDsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfaW1hZ2Uoc3RydWN0IGltYWdlICppbWFnZSkKK3sKKwlmcmVlKGltYWdlLT5idWYpOworCWZyZWUoaW1hZ2UtPmxpbmVfYWxsb2NhdGVkKTsKKwltZW1zZXQoaW1hZ2UsIDAsIHNpemVvZigqaW1hZ2UpKTsKK30KKworLyogZm10IG11c3QgY29udGFpbiBfb25lXyAlcyBhbmQgbm8gb3RoZXIgc3Vic3RpdHV0aW9uICovCitzdGF0aWMgdm9pZCBzYXlfcGF0Y2hfbmFtZShGSUxFICpvdXRwdXQsIGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAocGF0Y2gtPm9sZF9uYW1lICYmIHBhdGNoLT5uZXdfbmFtZSAmJgorCSAgICBzdHJjbXAocGF0Y2gtPm9sZF9uYW1lLCBwYXRjaC0+bmV3X25hbWUpKSB7CisJCXF1b3RlX2Nfc3R5bGUocGF0Y2gtPm9sZF9uYW1lLCAmc2IsIE5VTEwsIDApOworCQlzdHJidWZfYWRkc3RyKCZzYiwgIiA9PiAiKTsKKwkJcXVvdGVfY19zdHlsZShwYXRjaC0+bmV3X25hbWUsICZzYiwgTlVMTCwgMCk7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqbiA9IHBhdGNoLT5uZXdfbmFtZTsKKwkJaWYgKCFuKQorCQkJbiA9IHBhdGNoLT5vbGRfbmFtZTsKKwkJcXVvdGVfY19zdHlsZShuLCAmc2IsIE5VTEwsIDApOworCX0KKwlmcHJpbnRmKG91dHB1dCwgZm10LCBzYi5idWYpOworCWZwdXRjKCdcbicsIG91dHB1dCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworI2RlZmluZSBTTE9QICgxNikKKworc3RhdGljIHZvaWQgcmVhZF9wYXRjaF9maWxlKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgZmQpCit7CisJaWYgKHN0cmJ1Zl9yZWFkKHNiLCBmZCwgMCkgPCAwKQorCQlkaWVfZXJybm8oImdpdCBhcHBseTogZmFpbGVkIHRvIHJlYWQiKTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBzb21lIHNsb3AgaW4gdGhlIGJ1ZmZlcgorCSAqIHNvIHRoYXQgd2UgY2FuIGRvIHNwZWN1bGF0aXZlICJtZW1jbXAiIGV0YywgYW5kCisJICogc2VlIHRvIGl0IHRoYXQgaXQgaXMgTlVMLWZpbGxlZC4KKwkgKi8KKwlzdHJidWZfZ3JvdyhzYiwgU0xPUCk7CisJbWVtc2V0KHNiLT5idWYgKyBzYi0+bGVuLCAwLCBTTE9QKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbGluZWxlbihjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxlbiA9IDA7CisJd2hpbGUgKHNpemUtLSkgeworCQlsZW4rKzsKKwkJaWYgKCpidWZmZXIrKyA9PSAnXG4nKQorCQkJYnJlYWs7CisJfQorCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgaXNfZGV2X251bGwoY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiBza2lwX3ByZWZpeChzdHIsICIvZGV2L251bGwiLCAmc3RyKSAmJiBpc3NwYWNlKCpzdHIpOworfQorCisjZGVmaW5lIFRFUk1fU1BBQ0UJMQorI2RlZmluZSBURVJNX1RBQgkyCisKK3N0YXRpYyBpbnQgbmFtZV90ZXJtaW5hdGUoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBjLCBpbnQgdGVybWluYXRlKQoreworCWlmIChjID09ICcgJyAmJiAhKHRlcm1pbmF0ZSAmIFRFUk1fU1BBQ0UpKQorCQlyZXR1cm4gMDsKKwlpZiAoYyA9PSAnXHQnICYmICEodGVybWluYXRlICYgVEVSTV9UQUIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKiByZW1vdmUgZG91YmxlIHNsYXNoZXMgdG8gbWFrZSAtLWluZGV4IHdvcmsgd2l0aCBzdWNoIGZpbGVuYW1lcyAqLworc3RhdGljIGNoYXIgKnNxdWFzaF9zbGFzaChjaGFyICpuYW1lKQoreworCWludCBpID0gMCwgaiA9IDA7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKG5hbWVbaV0pIHsKKwkJaWYgKChuYW1lW2orK10gPSBuYW1lW2krK10pID09ICcvJykKKwkJCXdoaWxlIChuYW1lW2ldID09ICcvJykKKwkJCQlpKys7CisJfQorCW5hbWVbal0gPSAnXDAnOworCXJldHVybiBuYW1lOworfQorCitzdGF0aWMgY2hhciAqZmluZF9uYW1lX2dudShjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpkZWYsIGludCBwX3ZhbHVlKQoreworCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworCWNoYXIgKmNwOworCisJLyoKKwkgKiBQcm9wb3NlZCAibmV3LXN0eWxlIiBHTlUgcGF0Y2gvZGlmZiBmb3JtYXQ7IHNlZQorCSAqIGh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTEyOTI3MzE2NDA4NjkwJnc9MgorCSAqLworCWlmICh1bnF1b3RlX2Nfc3R5bGUoJm5hbWUsIGxpbmUsIE5VTEwpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZm9yIChjcCA9IG5hbWUuYnVmOyBwX3ZhbHVlOyBwX3ZhbHVlLS0pIHsKKwkJY3AgPSBzdHJjaHIoY3AsICcvJyk7CisJCWlmICghY3ApIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWNwKys7CisJfQorCisJc3RyYnVmX3JlbW92ZSgmbmFtZSwgMCwgY3AgLSBuYW1lLmJ1Zik7CisJaWYgKHJvb3QubGVuKQorCQlzdHJidWZfaW5zZXJ0KCZuYW1lLCAwLCByb290LmJ1Ziwgcm9vdC5sZW4pOworCXJldHVybiBzcXVhc2hfc2xhc2goc3RyYnVmX2RldGFjaCgmbmFtZSwgTlVMTCkpOworfQorCitzdGF0aWMgc2l6ZV90IHNhbmVfdHpfbGVuKGNvbnN0IGNoYXIgKmxpbmUsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqdHosICpwOworCisJaWYgKGxlbiA8IHN0cmxlbigiICswNTAwIikgfHwgbGluZVtsZW4tc3RybGVuKCIgKzA1MDAiKV0gIT0gJyAnKQorCQlyZXR1cm4gMDsKKwl0eiA9IGxpbmUgKyBsZW4gLSBzdHJsZW4oIiArMDUwMCIpOworCisJaWYgKHR6WzFdICE9ICcrJyAmJiB0elsxXSAhPSAnLScpCisJCXJldHVybiAwOworCisJZm9yIChwID0gdHogKyAyOyBwICE9IGxpbmUgKyBsZW47IHArKykKKwkJaWYgKCFpc2RpZ2l0KCpwKSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIGxpbmUgKyBsZW4gLSB0ejsKK30KKworc3RhdGljIHNpemVfdCB0el93aXRoX2NvbG9uX2xlbihjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKnR6LCAqcDsKKworCWlmIChsZW4gPCBzdHJsZW4oIiArMDg6MDAiKSB8fCBsaW5lW2xlbiAtIHN0cmxlbigiOjAwIildICE9ICc6JykKKwkJcmV0dXJuIDA7CisJdHogPSBsaW5lICsgbGVuIC0gc3RybGVuKCIgKzA4OjAwIik7CisKKwlpZiAodHpbMF0gIT0gJyAnIHx8ICh0elsxXSAhPSAnKycgJiYgdHpbMV0gIT0gJy0nKSkKKwkJcmV0dXJuIDA7CisJcCA9IHR6ICsgMjsKKwlpZiAoIWlzZGlnaXQoKnArKykgfHwgIWlzZGlnaXQoKnArKykgfHwgKnArKyAhPSAnOicgfHwKKwkgICAgIWlzZGlnaXQoKnArKykgfHwgIWlzZGlnaXQoKnArKykpCisJCXJldHVybiAwOworCisJcmV0dXJuIGxpbmUgKyBsZW4gLSB0ejsKK30KKworc3RhdGljIHNpemVfdCBkYXRlX2xlbihjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKmRhdGUsICpwOworCisJaWYgKGxlbiA8IHN0cmxlbigiNzItMDItMDUiKSB8fCBsaW5lW2xlbi1zdHJsZW4oIi0wNSIpXSAhPSAnLScpCisJCXJldHVybiAwOworCXAgPSBkYXRlID0gbGluZSArIGxlbiAtIHN0cmxlbigiNzItMDItMDUiKTsKKworCWlmICghaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSB8fCAqcCsrICE9ICctJyB8fAorCSAgICAhaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSB8fCAqcCsrICE9ICctJyB8fAorCSAgICAhaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSkJLyogTm90IGEgZGF0ZS4gKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoZGF0ZSAtIGxpbmUgPj0gc3RybGVuKCIxOSIpICYmCisJICAgIGlzZGlnaXQoZGF0ZVstMV0pICYmIGlzZGlnaXQoZGF0ZVstMl0pKQkvKiA0LWRpZ2l0IHllYXIgKi8KKwkJZGF0ZSAtPSBzdHJsZW4oIjE5Iik7CisKKwlyZXR1cm4gbGluZSArIGxlbiAtIGRhdGU7Cit9CisKK3N0YXRpYyBzaXplX3Qgc2hvcnRfdGltZV9sZW4oY29uc3QgY2hhciAqbGluZSwgc2l6ZV90IGxlbikKK3sKKwljb25zdCBjaGFyICp0aW1lLCAqcDsKKworCWlmIChsZW4gPCBzdHJsZW4oIiAwNzowMTozMiIpIHx8IGxpbmVbbGVuLXN0cmxlbigiOjMyIildICE9ICc6JykKKwkJcmV0dXJuIDA7CisJcCA9IHRpbWUgPSBsaW5lICsgbGVuIC0gc3RybGVuKCIgMDc6MDE6MzIiKTsKKworCS8qIFBlcm1pdCAxLWRpZ2l0IGhvdXJzPyAqLworCWlmICgqcCsrICE9ICcgJyB8fAorCSAgICAhaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSB8fCAqcCsrICE9ICc6JyB8fAorCSAgICAhaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSB8fCAqcCsrICE9ICc6JyB8fAorCSAgICAhaXNkaWdpdCgqcCsrKSB8fCAhaXNkaWdpdCgqcCsrKSkJLyogTm90IGEgdGltZS4gKi8KKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbGluZSArIGxlbiAtIHRpbWU7Cit9CisKK3N0YXRpYyBzaXplX3QgZnJhY3Rpb25hbF90aW1lX2xlbihjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKnA7CisJc2l6ZV90IG47CisKKwkvKiBFeHBlY3RlZCBmb3JtYXQ6IDE5OjQxOjE3LjYyMDAwMDAyMyAqLworCWlmICghbGVuIHx8ICFpc2RpZ2l0KGxpbmVbbGVuIC0gMV0pKQorCQlyZXR1cm4gMDsKKwlwID0gbGluZSArIGxlbiAtIDE7CisKKwkvKiBGcmFjdGlvbmFsIHNlY29uZHMuICovCisJd2hpbGUgKHAgPiBsaW5lICYmIGlzZGlnaXQoKnApKQorCQlwLS07CisJaWYgKCpwICE9ICcuJykKKwkJcmV0dXJuIDA7CisKKwkvKiBIb3VycywgbWludXRlcywgYW5kIHdob2xlIHNlY29uZHMuICovCisJbiA9IHNob3J0X3RpbWVfbGVuKGxpbmUsIHAgLSBsaW5lKTsKKwlpZiAoIW4pCisJCXJldHVybiAwOworCisJcmV0dXJuIGxpbmUgKyBsZW4gLSBwICsgbjsKK30KKworc3RhdGljIHNpemVfdCB0cmFpbGluZ19zcGFjZXNfbGVuKGNvbnN0IGNoYXIgKmxpbmUsIHNpemVfdCBsZW4pCit7CisJY29uc3QgY2hhciAqcDsKKworCS8qIEV4cGVjdGVkIGZvcm1hdDogJyAnIHggKDEgb3IgbW9yZSkgICovCisJaWYgKCFsZW4gfHwgbGluZVtsZW4gLSAxXSAhPSAnICcpCisJCXJldHVybiAwOworCisJcCA9IGxpbmUgKyBsZW47CisJd2hpbGUgKHAgIT0gbGluZSkgeworCQlwLS07CisJCWlmICgqcCAhPSAnICcpCisJCQlyZXR1cm4gbGluZSArIGxlbiAtIChwICsgMSk7CisJfQorCisJLyogQWxsIHNwYWNlcyEgKi8KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc2l6ZV90IGRpZmZfdGltZXN0YW1wX2xlbihjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKmVuZCA9IGxpbmUgKyBsZW47CisJc2l6ZV90IG47CisKKwkvKgorCSAqIFBvc2l4OiAyMDEwLTA3LTA1IDE5OjQxOjE3CisJICogR05VOiAyMDEwLTA3LTA1IDE5OjQxOjE3LjYyMDAwMDAyMyAtMDUwMAorCSAqLworCisJaWYgKCFpc2RpZ2l0KGVuZFstMV0pKQorCQlyZXR1cm4gMDsKKworCW4gPSBzYW5lX3R6X2xlbihsaW5lLCBlbmQgLSBsaW5lKTsKKwlpZiAoIW4pCisJCW4gPSB0el93aXRoX2NvbG9uX2xlbihsaW5lLCBlbmQgLSBsaW5lKTsKKwllbmQgLT0gbjsKKworCW4gPSBzaG9ydF90aW1lX2xlbihsaW5lLCBlbmQgLSBsaW5lKTsKKwlpZiAoIW4pCisJCW4gPSBmcmFjdGlvbmFsX3RpbWVfbGVuKGxpbmUsIGVuZCAtIGxpbmUpOworCWVuZCAtPSBuOworCisJbiA9IGRhdGVfbGVuKGxpbmUsIGVuZCAtIGxpbmUpOworCWlmICghbikJLyogTm8gZGF0ZS4gIFRvbyBiYWQuICovCisJCXJldHVybiAwOworCWVuZCAtPSBuOworCisJaWYgKGVuZCA9PSBsaW5lKQkvKiBObyBzcGFjZSBiZWZvcmUgZGF0ZS4gKi8KKwkJcmV0dXJuIDA7CisJaWYgKGVuZFstMV0gPT0gJ1x0JykgewkvKiBTdWNjZXNzISAqLworCQllbmQtLTsKKwkJcmV0dXJuIGxpbmUgKyBsZW4gLSBlbmQ7CisJfQorCWlmIChlbmRbLTFdICE9ICcgJykJLyogTm8gc3BhY2UgYmVmb3JlIGRhdGUuICovCisJCXJldHVybiAwOworCisJLyogV2hpdGVzcGFjZSBkYW1hZ2UuICovCisJZW5kIC09IHRyYWlsaW5nX3NwYWNlc19sZW4obGluZSwgZW5kIC0gbGluZSk7CisJcmV0dXJuIGxpbmUgKyBsZW4gLSBlbmQ7Cit9CisKK3N0YXRpYyBjaGFyICpmaW5kX25hbWVfY29tbW9uKGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKmRlZiwKKwkJCSAgICAgIGludCBwX3ZhbHVlLCBjb25zdCBjaGFyICplbmQsIGludCB0ZXJtaW5hdGUpCit7CisJaW50IGxlbjsKKwljb25zdCBjaGFyICpzdGFydCA9IE5VTEw7CisKKwlpZiAocF92YWx1ZSA9PSAwKQorCQlzdGFydCA9IGxpbmU7CisJd2hpbGUgKGxpbmUgIT0gZW5kKSB7CisJCWNoYXIgYyA9ICpsaW5lOworCisJCWlmICghZW5kICYmIGlzc3BhY2UoYykpIHsKKwkJCWlmIChjID09ICdcbicpCisJCQkJYnJlYWs7CisJCQlpZiAobmFtZV90ZXJtaW5hdGUoc3RhcnQsIGxpbmUtc3RhcnQsIGMsIHRlcm1pbmF0ZSkpCisJCQkJYnJlYWs7CisJCX0KKwkJbGluZSsrOworCQlpZiAoYyA9PSAnLycgJiYgIS0tcF92YWx1ZSkKKwkJCXN0YXJ0ID0gbGluZTsKKwl9CisJaWYgKCFzdGFydCkKKwkJcmV0dXJuIHNxdWFzaF9zbGFzaCh4c3RyZHVwX29yX251bGwoZGVmKSk7CisJbGVuID0gbGluZSAtIHN0YXJ0OworCWlmICghbGVuKQorCQlyZXR1cm4gc3F1YXNoX3NsYXNoKHhzdHJkdXBfb3JfbnVsbChkZWYpKTsKKworCS8qCisJICogR2VuZXJhbGx5IHdlIHByZWZlciB0aGUgc2hvcnRlciBuYW1lLCBlc3BlY2lhbGx5CisJICogaWYgdGhlIG90aGVyIG9uZSBpcyBqdXN0IGEgdmFyaWF0aW9uIG9mIHRoYXQgd2l0aAorCSAqIHNvbWV0aGluZyBlbHNlIHRhY2tlZCBvbiB0byB0aGUgZW5kIChpZSAiZmlsZS5vcmlnIgorCSAqIG9yICJmaWxlfiIpLgorCSAqLworCWlmIChkZWYpIHsKKwkJaW50IGRlZmxlbiA9IHN0cmxlbihkZWYpOworCQlpZiAoZGVmbGVuIDwgbGVuICYmICFzdHJuY21wKHN0YXJ0LCBkZWYsIGRlZmxlbikpCisJCQlyZXR1cm4gc3F1YXNoX3NsYXNoKHhzdHJkdXAoZGVmKSk7CisJfQorCisJaWYgKHJvb3QubGVuKSB7CisJCWNoYXIgKnJldCA9IHhzdHJmbXQoIiVzJS4qcyIsIHJvb3QuYnVmLCBsZW4sIHN0YXJ0KTsKKwkJcmV0dXJuIHNxdWFzaF9zbGFzaChyZXQpOworCX0KKworCXJldHVybiBzcXVhc2hfc2xhc2goeG1lbWR1cHooc3RhcnQsIGxlbikpOworfQorCitzdGF0aWMgY2hhciAqZmluZF9uYW1lKGNvbnN0IGNoYXIgKmxpbmUsIGNoYXIgKmRlZiwgaW50IHBfdmFsdWUsIGludCB0ZXJtaW5hdGUpCit7CisJaWYgKCpsaW5lID09ICciJykgeworCQljaGFyICpuYW1lID0gZmluZF9uYW1lX2dudShsaW5lLCBkZWYsIHBfdmFsdWUpOworCQlpZiAobmFtZSkKKwkJCXJldHVybiBuYW1lOworCX0KKworCXJldHVybiBmaW5kX25hbWVfY29tbW9uKGxpbmUsIGRlZiwgcF92YWx1ZSwgTlVMTCwgdGVybWluYXRlKTsKK30KKworc3RhdGljIGNoYXIgKmZpbmRfbmFtZV90cmFkaXRpb25hbChjb25zdCBjaGFyICpsaW5lLCBjaGFyICpkZWYsIGludCBwX3ZhbHVlKQoreworCXNpemVfdCBsZW47CisJc2l6ZV90IGRhdGVfbGVuOworCisJaWYgKCpsaW5lID09ICciJykgeworCQljaGFyICpuYW1lID0gZmluZF9uYW1lX2dudShsaW5lLCBkZWYsIHBfdmFsdWUpOworCQlpZiAobmFtZSkKKwkJCXJldHVybiBuYW1lOworCX0KKworCWxlbiA9IHN0cmNocm51bChsaW5lLCAnXG4nKSAtIGxpbmU7CisJZGF0ZV9sZW4gPSBkaWZmX3RpbWVzdGFtcF9sZW4obGluZSwgbGVuKTsKKwlpZiAoIWRhdGVfbGVuKQorCQlyZXR1cm4gZmluZF9uYW1lX2NvbW1vbihsaW5lLCBkZWYsIHBfdmFsdWUsIE5VTEwsIFRFUk1fVEFCKTsKKwlsZW4gLT0gZGF0ZV9sZW47CisKKwlyZXR1cm4gZmluZF9uYW1lX2NvbW1vbihsaW5lLCBkZWYsIHBfdmFsdWUsIGxpbmUgKyBsZW4sIDApOworfQorCitzdGF0aWMgaW50IGNvdW50X3NsYXNoZXMoY29uc3QgY2hhciAqY3ApCit7CisJaW50IGNudCA9IDA7CisJY2hhciBjaDsKKworCXdoaWxlICgoY2ggPSAqY3ArKykpCisJCWlmIChjaCA9PSAnLycpCisJCQljbnQrKzsKKwlyZXR1cm4gY250OworfQorCisvKgorICogR2l2ZW4gdGhlIHN0cmluZyBhZnRlciAiLS0tICIgb3IgIisrKyAiLCBndWVzcyB0aGUgYXBwcm9wcmlhdGUKKyAqIHBfdmFsdWUgZm9yIHRoZSBnaXZlbiBwYXRjaC4KKyAqLworc3RhdGljIGludCBndWVzc19wX3ZhbHVlKGNvbnN0IGNoYXIgKm5hbWVsaW5lKQoreworCWNoYXIgKm5hbWUsICpjcDsKKwlpbnQgdmFsID0gLTE7CisKKwlpZiAoaXNfZGV2X251bGwobmFtZWxpbmUpKQorCQlyZXR1cm4gLTE7CisJbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbChuYW1lbGluZSwgTlVMTCwgMCk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gLTE7CisJY3AgPSBzdHJjaHIobmFtZSwgJy8nKTsKKwlpZiAoIWNwKQorCQl2YWwgPSAwOworCWVsc2UgaWYgKHByZWZpeCkgeworCQkvKgorCQkgKiBEb2VzIGl0IGJlZ2luIHdpdGggImEvJG91ci1wcmVmaXgiIGFuZCBzdWNoPyAgVGhlbiB0aGlzIGlzCisJCSAqIHZlcnkgbGlrZWx5IHRvIGFwcGx5IHRvIG91ciBkaXJlY3RvcnkuCisJCSAqLworCQlpZiAoIXN0cm5jbXAobmFtZSwgcHJlZml4LCBwcmVmaXhfbGVuZ3RoKSkKKwkJCXZhbCA9IGNvdW50X3NsYXNoZXMocHJlZml4KTsKKwkJZWxzZSB7CisJCQljcCsrOworCQkJaWYgKCFzdHJuY21wKGNwLCBwcmVmaXgsIHByZWZpeF9sZW5ndGgpKQorCQkJCXZhbCA9IGNvdW50X3NsYXNoZXMocHJlZml4KSArIDE7CisJCX0KKwl9CisJZnJlZShuYW1lKTsKKwlyZXR1cm4gdmFsOworfQorCisvKgorICogRG9lcyB0aGUgLS0tLysrKyBsaW5lIGhhdmUgdGhlIFBPU0lYIHRpbWVzdGFtcCBhZnRlciB0aGUgbGFzdCBIVD8KKyAqIEdOVSBkaWZmIHB1dHMgZXBvY2ggdGhlcmUgdG8gc2lnbmFsIGEgY3JlYXRpb24vZGVsZXRpb24gZXZlbnQuICBJcworICogdGhpcyBzdWNoIGEgdGltZXN0YW1wPworICovCitzdGF0aWMgaW50IGhhc19lcG9jaF90aW1lc3RhbXAoY29uc3QgY2hhciAqbmFtZWxpbmUpCit7CisJLyoKKwkgKiBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGVwb2NoIHRpbWVzdGFtcDsgYW55IG5vbi16ZXJvCisJICogZnJhY3Rpb24gY2Fubm90IGJlIG9uZSwgaGVuY2UgIihcLjArKT8iIGluIHRoZSByZWdleHAgYmVsb3cuCisJICogRm9yIHRoZSBzYW1lIHJlYXNvbiwgdGhlIGRhdGUgbXVzdCBiZSBlaXRoZXIgMTk2OS0xMi0zMSBvcgorCSAqIDE5NzAtMDEtMDEsIGFuZCB0aGUgc2Vjb25kcyBwYXJ0IG11c3QgYmUgIjAwIi4KKwkgKi8KKwljb25zdCBjaGFyIHN0YW1wX3JlZ2V4cFtdID0KKwkJIl4oMTk2OS0xMi0zMXwxOTcwLTAxLTAxKSIKKwkJIiAiCisJCSJbMC0yXVswLTldOlswLTVdWzAtOV06MDAoXFwuMCspPyIKKwkJIiAiCisJCSIoWy0rXVswLTJdWzAtOV06P1swLTVdWzAtOV0pXG4iOworCWNvbnN0IGNoYXIgKnRpbWVzdGFtcCA9IE5VTEwsICpjcCwgKmNvbG9uOworCXN0YXRpYyByZWdleF90ICpzdGFtcDsKKwlyZWdtYXRjaF90IG1bMTBdOworCWludCB6b25lb2Zmc2V0OworCWludCBob3VybWludXRlOworCWludCBzdGF0dXM7CisKKwlmb3IgKGNwID0gbmFtZWxpbmU7ICpjcCAhPSAnXG4nOyBjcCsrKSB7CisJCWlmICgqY3AgPT0gJ1x0JykKKwkJCXRpbWVzdGFtcCA9IGNwICsgMTsKKwl9CisJaWYgKCF0aW1lc3RhbXApCisJCXJldHVybiAwOworCWlmICghc3RhbXApIHsKKwkJc3RhbXAgPSB4bWFsbG9jKHNpemVvZigqc3RhbXApKTsKKwkJaWYgKHJlZ2NvbXAoc3RhbXAsIHN0YW1wX3JlZ2V4cCwgUkVHX0VYVEVOREVEKSkgeworCQkJd2FybmluZyhfKCJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIiksCisJCQkJc3RhbXBfcmVnZXhwKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJc3RhdHVzID0gcmVnZXhlYyhzdGFtcCwgdGltZXN0YW1wLCBBUlJBWV9TSVpFKG0pLCBtLCAwKTsKKwlpZiAoc3RhdHVzKSB7CisJCWlmIChzdGF0dXMgIT0gUkVHX05PTUFUQ0gpCisJCQl3YXJuaW5nKF8oInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIpLAorCQkJCXN0YXR1cywgdGltZXN0YW1wKTsKKwkJcmV0dXJuIDA7CisJfQorCisJem9uZW9mZnNldCA9IHN0cnRvbCh0aW1lc3RhbXAgKyBtWzNdLnJtX3NvICsgMSwgKGNoYXIgKiopICZjb2xvbiwgMTApOworCWlmICgqY29sb24gPT0gJzonKQorCQl6b25lb2Zmc2V0ID0gem9uZW9mZnNldCAqIDYwICsgc3RydG9sKGNvbG9uICsgMSwgTlVMTCwgMTApOworCWVsc2UKKwkJem9uZW9mZnNldCA9ICh6b25lb2Zmc2V0IC8gMTAwKSAqIDYwICsgKHpvbmVvZmZzZXQgJSAxMDApOworCWlmICh0aW1lc3RhbXBbbVszXS5ybV9zb10gPT0gJy0nKQorCQl6b25lb2Zmc2V0ID0gLXpvbmVvZmZzZXQ7CisKKwkvKgorCSAqIFlZWVktTU0tREQgaGg6bW06c3MgbXVzdCBiZSBmcm9tIGVpdGhlciAxOTY5LTEyLTMxCisJICogKHdlc3Qgb2YgR01UKSBvciAxOTcwLTAxLTAxIChlYXN0IG9mIEdNVCkKKwkgKi8KKwlpZiAoKHpvbmVvZmZzZXQgPCAwICYmIG1lbWNtcCh0aW1lc3RhbXAsICIxOTY5LTEyLTMxIiwgMTApKSB8fAorCSAgICAoMCA8PSB6b25lb2Zmc2V0ICYmIG1lbWNtcCh0aW1lc3RhbXAsICIxOTcwLTAxLTAxIiwgMTApKSkKKwkJcmV0dXJuIDA7CisKKwlob3VybWludXRlID0gKHN0cnRvbCh0aW1lc3RhbXAgKyAxMSwgTlVMTCwgMTApICogNjAgKworCQkgICAgICBzdHJ0b2wodGltZXN0YW1wICsgMTQsIE5VTEwsIDEwKSAtCisJCSAgICAgIHpvbmVvZmZzZXQpOworCisJcmV0dXJuICgoem9uZW9mZnNldCA8IDAgJiYgaG91cm1pbnV0ZSA9PSAxNDQwKSB8fAorCQkoMCA8PSB6b25lb2Zmc2V0ICYmICFob3VybWludXRlKSk7Cit9CisKKy8qCisgKiBHZXQgdGhlIG5hbWUgZXRjIGluZm8gZnJvbSB0aGUgLS0tLysrKyBsaW5lcyBvZiBhIHRyYWRpdGlvbmFsIHBhdGNoIGhlYWRlcgorICoKKyAqIEZJWE1FISBUaGUgZW5kLW9mLWZpbGVuYW1lIGhldXJpc3RpY3MgYXJlIGtpbmQgb2Ygc2NyZXd5LiBGb3IgZXhpc3RpbmcKKyAqIGZpbGVzLCB3ZSBjYW4gaGFwcGlseSBjaGVjayB0aGUgaW5kZXggZm9yIGEgbWF0Y2gsIGJ1dCBmb3IgY3JlYXRpbmcgYQorICogbmV3IGZpbGUgd2Ugc2hvdWxkIHRyeSB0byBtYXRjaCB3aGF0ZXZlciAicGF0Y2giIGRvZXMuIEkgaGF2ZSBubyBpZGVhLgorICovCitzdGF0aWMgdm9pZCBwYXJzZV90cmFkaXRpb25hbF9wYXRjaChjb25zdCBjaGFyICpmaXJzdCwgY29uc3QgY2hhciAqc2Vjb25kLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWNoYXIgKm5hbWU7CisKKwlmaXJzdCArPSA0OwkvKiBza2lwICItLS0gIiAqLworCXNlY29uZCArPSA0OwkvKiBza2lwICIrKysgIiAqLworCWlmICghcF92YWx1ZV9rbm93bikgeworCQlpbnQgcCwgcTsKKwkJcCA9IGd1ZXNzX3BfdmFsdWUoZmlyc3QpOworCQlxID0gZ3Vlc3NfcF92YWx1ZShzZWNvbmQpOworCQlpZiAocCA8IDApIHAgPSBxOworCQlpZiAoMCA8PSBwICYmIHAgPT0gcSkgeworCQkJcF92YWx1ZSA9IHA7CisJCQlwX3ZhbHVlX2tub3duID0gMTsKKwkJfQorCX0KKwlpZiAoaXNfZGV2X251bGwoZmlyc3QpKSB7CisJCXBhdGNoLT5pc19uZXcgPSAxOworCQlwYXRjaC0+aXNfZGVsZXRlID0gMDsKKwkJbmFtZSA9IGZpbmRfbmFtZV90cmFkaXRpb25hbChzZWNvbmQsIE5VTEwsIHBfdmFsdWUpOworCQlwYXRjaC0+bmV3X25hbWUgPSBuYW1lOworCX0gZWxzZSBpZiAoaXNfZGV2X251bGwoc2Vjb25kKSkgeworCQlwYXRjaC0+aXNfbmV3ID0gMDsKKwkJcGF0Y2gtPmlzX2RlbGV0ZSA9IDE7CisJCW5hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoZmlyc3QsIE5VTEwsIHBfdmFsdWUpOworCQlwYXRjaC0+b2xkX25hbWUgPSBuYW1lOworCX0gZWxzZSB7CisJCWNoYXIgKmZpcnN0X25hbWU7CisJCWZpcnN0X25hbWUgPSBmaW5kX25hbWVfdHJhZGl0aW9uYWwoZmlyc3QsIE5VTEwsIHBfdmFsdWUpOworCQluYW1lID0gZmluZF9uYW1lX3RyYWRpdGlvbmFsKHNlY29uZCwgZmlyc3RfbmFtZSwgcF92YWx1ZSk7CisJCWZyZWUoZmlyc3RfbmFtZSk7CisJCWlmIChoYXNfZXBvY2hfdGltZXN0YW1wKGZpcnN0KSkgeworCQkJcGF0Y2gtPmlzX25ldyA9IDE7CisJCQlwYXRjaC0+aXNfZGVsZXRlID0gMDsKKwkJCXBhdGNoLT5uZXdfbmFtZSA9IG5hbWU7CisJCX0gZWxzZSBpZiAoaGFzX2Vwb2NoX3RpbWVzdGFtcChzZWNvbmQpKSB7CisJCQlwYXRjaC0+aXNfbmV3ID0gMDsKKwkJCXBhdGNoLT5pc19kZWxldGUgPSAxOworCQkJcGF0Y2gtPm9sZF9uYW1lID0gbmFtZTsKKwkJfSBlbHNlIHsKKwkJCXBhdGNoLT5vbGRfbmFtZSA9IG5hbWU7CisJCQlwYXRjaC0+bmV3X25hbWUgPSB4c3RyZHVwX29yX251bGwobmFtZSk7CisJCX0KKwl9CisJaWYgKCFuYW1lKQorCQlkaWUoXygidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIpLCBsaW5lbnIpOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfaGRyZW5kKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcmV0dXJuIC0xOworfQorCisvKgorICogV2UncmUgYW5hbCBhYm91dCBkaWZmIGhlYWRlciBjb25zaXN0ZW5jeSwgdG8gbWFrZQorICogc3VyZSB0aGF0IHdlIGRvbid0IGVuZCB1cCBoYXZpbmcgc3RyYW5nZSBhbWJpZ3VvdXMKKyAqIHBhdGNoZXMgZmxvYXRpbmcgYXJvdW5kLgorICoKKyAqIEFzIGEgcmVzdWx0LCBnaXRkaWZmX3tvbGR8bmV3fW5hbWUoKSB3aWxsIGNoZWNrCisgKiB0aGVpciBuYW1lcyBhZ2FpbnN0IGFueSBwcmV2aW91cyBpbmZvcm1hdGlvbiwganVzdAorICogdG8gbWFrZSBzdXJlLi4KKyAqLworI2RlZmluZSBESUZGX09MRF9OQU1FIDAKKyNkZWZpbmUgRElGRl9ORVdfTkFNRSAxCisKK3N0YXRpYyBjaGFyICpnaXRkaWZmX3ZlcmlmeV9uYW1lKGNvbnN0IGNoYXIgKmxpbmUsIGludCBpc251bGwsIGNoYXIgKm9yaWdfbmFtZSwgaW50IHNpZGUpCit7CisJaWYgKCFvcmlnX25hbWUgJiYgIWlzbnVsbCkKKwkJcmV0dXJuIGZpbmRfbmFtZShsaW5lLCBOVUxMLCBwX3ZhbHVlLCBURVJNX1RBQik7CisKKwlpZiAob3JpZ19uYW1lKSB7CisJCWludCBsZW47CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCWNoYXIgKmFub3RoZXI7CisJCW5hbWUgPSBvcmlnX25hbWU7CisJCWxlbiA9IHN0cmxlbihuYW1lKTsKKwkJaWYgKGlzbnVsbCkKKwkJCWRpZShfKCJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiKSwgbmFtZSwgbGluZW5yKTsKKwkJYW5vdGhlciA9IGZpbmRfbmFtZShsaW5lLCBOVUxMLCBwX3ZhbHVlLCBURVJNX1RBQik7CisJCWlmICghYW5vdGhlciB8fCBtZW1jbXAoYW5vdGhlciwgbmFtZSwgbGVuICsgMSkpCisJCQlkaWUoKHNpZGUgPT0gRElGRl9ORVdfTkFNRSkgPworCQkJICAgIF8oImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIikgOgorCQkJICAgIF8oImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIiksIGxpbmVucik7CisJCWZyZWUoYW5vdGhlcik7CisJCXJldHVybiBvcmlnX25hbWU7CisJfQorCWVsc2UgeworCQkvKiBleHBlY3QgIi9kZXYvbnVsbCIgKi8KKwkJaWYgKG1lbWNtcCgiL2Rldi9udWxsIiwgbGluZSwgOSkgfHwgbGluZVs5XSAhPSAnXG4nKQorCQkJZGllKF8oImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiKSwgbGluZW5yKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGdpdGRpZmZfb2xkbmFtZShjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWNoYXIgKm9yaWcgPSBwYXRjaC0+b2xkX25hbWU7CisJcGF0Y2gtPm9sZF9uYW1lID0gZ2l0ZGlmZl92ZXJpZnlfbmFtZShsaW5lLCBwYXRjaC0+aXNfbmV3LCBwYXRjaC0+b2xkX25hbWUsCisJCQkJCSAgICAgIERJRkZfT0xEX05BTUUpOworCWlmIChvcmlnICE9IHBhdGNoLT5vbGRfbmFtZSkKKwkJZnJlZShvcmlnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX25ld25hbWUoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwljaGFyICpvcmlnID0gcGF0Y2gtPm5ld19uYW1lOworCXBhdGNoLT5uZXdfbmFtZSA9IGdpdGRpZmZfdmVyaWZ5X25hbWUobGluZSwgcGF0Y2gtPmlzX2RlbGV0ZSwgcGF0Y2gtPm5ld19uYW1lLAorCQkJCQkgICAgICBESUZGX05FV19OQU1FKTsKKwlpZiAob3JpZyAhPSBwYXRjaC0+bmV3X25hbWUpCisJCWZyZWUob3JpZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9vbGRtb2RlKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPm9sZF9tb2RlID0gc3RydG91bChsaW5lLCBOVUxMLCA4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX25ld21vZGUoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlwYXRjaC0+bmV3X21vZGUgPSBzdHJ0b3VsKGxpbmUsIE5VTEwsIDgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfZGVsZXRlKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcGF0Y2gtPmlzX2RlbGV0ZSA9IDE7CisJZnJlZShwYXRjaC0+b2xkX25hbWUpOworCXBhdGNoLT5vbGRfbmFtZSA9IHhzdHJkdXBfb3JfbnVsbChwYXRjaC0+ZGVmX25hbWUpOworCXJldHVybiBnaXRkaWZmX29sZG1vZGUobGluZSwgcGF0Y2gpOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfbmV3ZmlsZShjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXBhdGNoLT5pc19uZXcgPSAxOworCWZyZWUocGF0Y2gtPm5ld19uYW1lKTsKKwlwYXRjaC0+bmV3X25hbWUgPSB4c3RyZHVwX29yX251bGwocGF0Y2gtPmRlZl9uYW1lKTsKKwlyZXR1cm4gZ2l0ZGlmZl9uZXdtb2RlKGxpbmUsIHBhdGNoKTsKK30KKworc3RhdGljIGludCBnaXRkaWZmX2NvcHlzcmMoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlwYXRjaC0+aXNfY29weSA9IDE7CisJZnJlZShwYXRjaC0+b2xkX25hbWUpOworCXBhdGNoLT5vbGRfbmFtZSA9IGZpbmRfbmFtZShsaW5lLCBOVUxMLCBwX3ZhbHVlID8gcF92YWx1ZSAtIDEgOiAwLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX2NvcHlkc3QoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlwYXRjaC0+aXNfY29weSA9IDE7CisJZnJlZShwYXRjaC0+bmV3X25hbWUpOworCXBhdGNoLT5uZXdfbmFtZSA9IGZpbmRfbmFtZShsaW5lLCBOVUxMLCBwX3ZhbHVlID8gcF92YWx1ZSAtIDEgOiAwLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX3JlbmFtZXNyYyhjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXBhdGNoLT5pc19yZW5hbWUgPSAxOworCWZyZWUocGF0Y2gtPm9sZF9uYW1lKTsKKwlwYXRjaC0+b2xkX25hbWUgPSBmaW5kX25hbWUobGluZSwgTlVMTCwgcF92YWx1ZSA/IHBfdmFsdWUgLSAxIDogMCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9yZW5hbWVkc3QoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlwYXRjaC0+aXNfcmVuYW1lID0gMTsKKwlmcmVlKHBhdGNoLT5uZXdfbmFtZSk7CisJcGF0Y2gtPm5ld19uYW1lID0gZmluZF9uYW1lKGxpbmUsIE5VTEwsIHBfdmFsdWUgPyBwX3ZhbHVlIC0gMSA6IDAsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdGRpZmZfc2ltaWxhcml0eShjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXVuc2lnbmVkIGxvbmcgdmFsID0gc3RydG91bChsaW5lLCBOVUxMLCAxMCk7CisJaWYgKHZhbCA8PSAxMDApCisJCXBhdGNoLT5zY29yZSA9IHZhbDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRkaWZmX2Rpc3NpbWlsYXJpdHkoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvdWwobGluZSwgTlVMTCwgMTApOworCWlmICh2YWwgPD0gMTAwKQorCQlwYXRjaC0+c2NvcmUgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0ZGlmZl9pbmRleChjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCS8qCisJICogaW5kZXggbGluZSBpcyBOIGhleGFkZWNpbWFsLCAiLi4iLCBOIGhleGFkZWNpbWFsLAorCSAqIGFuZCBvcHRpb25hbCBzcGFjZSB3aXRoIG9jdGFsIG1vZGUuCisJICovCisJY29uc3QgY2hhciAqcHRyLCAqZW9sOworCWludCBsZW47CisKKwlwdHIgPSBzdHJjaHIobGluZSwgJy4nKTsKKwlpZiAoIXB0ciB8fCBwdHJbMV0gIT0gJy4nIHx8IDQwIDwgcHRyIC0gbGluZSkKKwkJcmV0dXJuIDA7CisJbGVuID0gcHRyIC0gbGluZTsKKwltZW1jcHkocGF0Y2gtPm9sZF9zaGExX3ByZWZpeCwgbGluZSwgbGVuKTsKKwlwYXRjaC0+b2xkX3NoYTFfcHJlZml4W2xlbl0gPSAwOworCisJbGluZSA9IHB0ciArIDI7CisJcHRyID0gc3RyY2hyKGxpbmUsICcgJyk7CisJZW9sID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCisJaWYgKCFwdHIgfHwgZW9sIDwgcHRyKQorCQlwdHIgPSBlb2w7CisJbGVuID0gcHRyIC0gbGluZTsKKworCWlmICg0MCA8IGxlbikKKwkJcmV0dXJuIDA7CisJbWVtY3B5KHBhdGNoLT5uZXdfc2hhMV9wcmVmaXgsIGxpbmUsIGxlbik7CisJcGF0Y2gtPm5ld19zaGExX3ByZWZpeFtsZW5dID0gMDsKKwlpZiAoKnB0ciA9PSAnICcpCisJCXBhdGNoLT5vbGRfbW9kZSA9IHN0cnRvdWwocHRyKzEsIE5VTEwsIDgpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBpcyBub3JtYWwgZm9yIGEgZGlmZiB0aGF0IGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nOiB3ZSdsbCBmYWxsIHRocm91Z2gKKyAqIGludG8gdGhlIG5leHQgZGlmZi4gVGVsbCB0aGUgcGFyc2VyIHRvIGJyZWFrIG91dC4KKyAqLworc3RhdGljIGludCBnaXRkaWZmX3VucmVjb2duaXplZChjb25zdCBjaGFyICpsaW5lLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFNraXAgcF92YWx1ZSBsZWFkaW5nIGNvbXBvbmVudHMgZnJvbSAibGluZSI7IGFzIHdlIGRvIG5vdCBhY2NlcHQKKyAqIGFic29sdXRlIHBhdGhzLCByZXR1cm4gTlVMTCBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpza2lwX3RyZWVfcHJlZml4KGNvbnN0IGNoYXIgKmxpbmUsIGludCBsbGVuKQoreworCWludCBuc2xhc2g7CisJaW50IGk7CisKKwlpZiAoIXBfdmFsdWUpCisJCXJldHVybiAobGxlbiAmJiBsaW5lWzBdID09ICcvJykgPyBOVUxMIDogbGluZTsKKworCW5zbGFzaCA9IHBfdmFsdWU7CisJZm9yIChpID0gMDsgaSA8IGxsZW47IGkrKykgeworCQlpbnQgY2ggPSBsaW5lW2ldOworCQlpZiAoY2ggPT0gJy8nICYmIC0tbnNsYXNoIDw9IDApCisJCQlyZXR1cm4gKGkgPT0gMCkgPyBOVUxMIDogJmxpbmVbaSArIDFdOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFRoaXMgaXMgdG8gZXh0cmFjdCB0aGUgc2FtZSBuYW1lIHRoYXQgYXBwZWFycyBvbiAiZGlmZiAtLWdpdCIKKyAqIGxpbmUuICBXZSBkbyBub3QgZmluZCBhbmQgcmV0dXJuIGFueXRoaW5nIGlmIGl0IGlzIGEgcmVuYW1lCisgKiBwYXRjaCwgYW5kIGl0IGlzIE9LIGJlY2F1c2Ugd2Ugd2lsbCBmaW5kIHRoZSBuYW1lIGVsc2V3aGVyZS4KKyAqIFdlIG5lZWQgdG8gcmVsaWFibHkgZmluZCBuYW1lIG9ubHkgd2hlbiBpdCBpcyBtb2RlLWNoYW5nZSBvbmx5LAorICogY3JlYXRpb24gb3IgZGVsZXRpb24gb2YgYW4gZW1wdHkgZmlsZS4gIEluIGFueSBvZiB0aGVzZSBjYXNlcywKKyAqIGJvdGggc2lkZXMgYXJlIHRoZSBzYW1lIG5hbWUgdW5kZXIgYS8gYW5kIGIvIHJlc3BlY3RpdmVseS4KKyAqLworc3RhdGljIGNoYXIgKmdpdF9oZWFkZXJfbmFtZShjb25zdCBjaGFyICpsaW5lLCBpbnQgbGxlbikKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnNlY29uZCA9IE5VTEw7CisJc2l6ZV90IGxlbiwgbGluZV9sZW47CisKKwlsaW5lICs9IHN0cmxlbigiZGlmZiAtLWdpdCAiKTsKKwlsbGVuIC09IHN0cmxlbigiZGlmZiAtLWdpdCAiKTsKKworCWlmICgqbGluZSA9PSAnIicpIHsKKwkJY29uc3QgY2hhciAqY3A7CisJCXN0cnVjdCBzdHJidWYgZmlyc3QgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHN0cmJ1ZiBzcCA9IFNUUkJVRl9JTklUOworCisJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJmZpcnN0LCBsaW5lLCAmc2Vjb25kKSkKKwkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CisKKwkJLyogc3RyaXAgdGhlIGEvYiBwcmVmaXggaW5jbHVkaW5nIHRyYWlsaW5nIHNsYXNoICovCisJCWNwID0gc2tpcF90cmVlX3ByZWZpeChmaXJzdC5idWYsIGZpcnN0Lmxlbik7CisJCWlmICghY3ApCisJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOworCQlzdHJidWZfcmVtb3ZlKCZmaXJzdCwgMCwgY3AgLSBmaXJzdC5idWYpOworCisJCS8qCisJCSAqIHNlY29uZCBwb2ludHMgYXQgb25lIHBhc3QgY2xvc2luZyBkcSBvZiBuYW1lLgorCQkgKiBmaW5kIHRoZSBzZWNvbmQgbmFtZS4KKwkJICovCisJCXdoaWxlICgoc2Vjb25kIDwgbGluZSArIGxsZW4pICYmIGlzc3BhY2UoKnNlY29uZCkpCisJCQlzZWNvbmQrKzsKKworCQlpZiAobGluZSArIGxsZW4gPD0gc2Vjb25kKQorCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKKwkJaWYgKCpzZWNvbmQgPT0gJyInKSB7CisJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZzcCwgc2Vjb25kLCBOVUxMKSkKKwkJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOworCQkJY3AgPSBza2lwX3RyZWVfcHJlZml4KHNwLmJ1Ziwgc3AubGVuKTsKKwkJCWlmICghY3ApCisJCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKKwkJCS8qIFRoZXkgbXVzdCBtYXRjaCwgb3RoZXJ3aXNlIGlnbm9yZSAqLworCQkJaWYgKHN0cmNtcChjcCwgZmlyc3QuYnVmKSkKKwkJCQlnb3RvIGZyZWVfYW5kX2ZhaWwxOworCQkJc3RyYnVmX3JlbGVhc2UoJnNwKTsKKwkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZmaXJzdCwgTlVMTCk7CisJCX0KKworCQkvKiB1bnF1b3RlZCBzZWNvbmQgKi8KKwkJY3AgPSBza2lwX3RyZWVfcHJlZml4KHNlY29uZCwgbGluZSArIGxsZW4gLSBzZWNvbmQpOworCQlpZiAoIWNwKQorCQkJZ290byBmcmVlX2FuZF9mYWlsMTsKKwkJaWYgKGxpbmUgKyBsbGVuIC0gY3AgIT0gZmlyc3QubGVuIHx8CisJCSAgICBtZW1jbXAoZmlyc3QuYnVmLCBjcCwgZmlyc3QubGVuKSkKKwkJCWdvdG8gZnJlZV9hbmRfZmFpbDE7CisJCXJldHVybiBzdHJidWZfZGV0YWNoKCZmaXJzdCwgTlVMTCk7CisKKwlmcmVlX2FuZF9mYWlsMToKKwkJc3RyYnVmX3JlbGVhc2UoJmZpcnN0KTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogdW5xdW90ZWQgZmlyc3QgbmFtZSAqLworCW5hbWUgPSBza2lwX3RyZWVfcHJlZml4KGxpbmUsIGxsZW4pOworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIHNpbmNlIHRoZSBmaXJzdCBuYW1lIGlzIHVucXVvdGVkLCBhIGRxIGlmIGV4aXN0cyBtdXN0IGJlCisJICogdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIG5hbWUuCisJICovCisJZm9yIChzZWNvbmQgPSBuYW1lOyBzZWNvbmQgPCBsaW5lICsgbGxlbjsgc2Vjb25kKyspIHsKKwkJaWYgKCpzZWNvbmQgPT0gJyInKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHNwID0gU1RSQlVGX0lOSVQ7CisJCQljb25zdCBjaGFyICpucDsKKworCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmc3AsIHNlY29uZCwgTlVMTCkpCisJCQkJZ290byBmcmVlX2FuZF9mYWlsMjsKKworCQkJbnAgPSBza2lwX3RyZWVfcHJlZml4KHNwLmJ1Ziwgc3AubGVuKTsKKwkJCWlmICghbnApCisJCQkJZ290byBmcmVlX2FuZF9mYWlsMjsKKworCQkJbGVuID0gc3AuYnVmICsgc3AubGVuIC0gbnA7CisJCQlpZiAobGVuIDwgc2Vjb25kIC0gbmFtZSAmJgorCQkJICAgICFzdHJuY21wKG5wLCBuYW1lLCBsZW4pICYmCisJCQkgICAgaXNzcGFjZShuYW1lW2xlbl0pKSB7CisJCQkJLyogR29vZCAqLworCQkJCXN0cmJ1Zl9yZW1vdmUoJnNwLCAwLCBucCAtIHNwLmJ1Zik7CisJCQkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnNwLCBOVUxMKTsKKwkJCX0KKworCQlmcmVlX2FuZF9mYWlsMjoKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzcCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCS8qCisJICogQWNjZXB0IGEgbmFtZSBvbmx5IGlmIGl0IHNob3dzIHVwIHR3aWNlLCBleGFjdGx5IHRoZSBzYW1lCisJICogZm9ybS4KKwkgKi8KKwlzZWNvbmQgPSBzdHJjaHIobmFtZSwgJ1xuJyk7CisJaWYgKCFzZWNvbmQpCisJCXJldHVybiBOVUxMOworCWxpbmVfbGVuID0gc2Vjb25kIC0gbmFtZTsKKwlmb3IgKGxlbiA9IDAgOyA7IGxlbisrKSB7CisJCXN3aXRjaCAobmFtZVtsZW5dKSB7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJY2FzZSAnXG4nOgorCQkJcmV0dXJuIE5VTEw7CisJCWNhc2UgJ1x0JzogY2FzZSAnICc6CisJCQkvKgorCQkJICogSXMgdGhpcyB0aGUgc2VwYXJhdG9yIGJldHdlZW4gdGhlIHByZWltYWdlCisJCQkgKiBhbmQgdGhlIHBvc3RpbWFnZSBwYXRobmFtZT8gIEFnYWluLCB3ZSBhcmUKKwkJCSAqIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcworCQkJICogbm8gcmVuYW1lLCBhcyB0aGlzIGlzIG9ubHkgdG8gc2V0IGRlZl9uYW1lCisJCQkgKiBhbmQgYSByZW5hbWUgcGF0Y2ggaGFzIHRoZSBuYW1lcyBlbHNld2hlcmUKKwkJCSAqIGluIGFuIHVuYW1iaWd1b3VzIGZvcm0uCisJCQkgKi8KKwkJCWlmICghbmFtZVtsZW4gKyAxXSkKKwkJCQlyZXR1cm4gTlVMTDsgLyogbm8gcG9zdGltYWdlIG5hbWUgKi8KKwkJCXNlY29uZCA9IHNraXBfdHJlZV9wcmVmaXgobmFtZSArIGxlbiArIDEsCisJCQkJCQkgIGxpbmVfbGVuIC0gKGxlbiArIDEpKTsKKwkJCWlmICghc2Vjb25kKQorCQkJCXJldHVybiBOVUxMOworCQkJLyoKKwkJCSAqIERvZXMgbGVuIGJ5dGVzIHN0YXJ0aW5nIGF0ICJuYW1lIiBhbmQgInNlY29uZCIKKwkJCSAqICh0aGF0IGFyZSBzZXBhcmF0ZWQgYnkgb25lIEhUIG9yIFNQIHdlIGp1c3QKKwkJCSAqIGZvdW5kKSBleGFjdGx5IG1hdGNoPworCQkJICovCisJCQlpZiAoc2Vjb25kW2xlbl0gPT0gJ1xuJyAmJiAhc3RybmNtcChuYW1lLCBzZWNvbmQsIGxlbikpCisJCQkJcmV0dXJuIHhtZW1kdXB6KG5hbWUsIGxlbik7CisJCX0KKwl9Cit9CisKKy8qIFZlcmlmeSB0aGF0IHdlIHJlY29nbml6ZSB0aGUgbGluZXMgZm9sbG93aW5nIGEgZ2l0IGhlYWRlciAqLworc3RhdGljIGludCBwYXJzZV9naXRfaGVhZGVyKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHVuc2lnbmVkIGludCBzaXplLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCisJLyogQSBnaXQgZGlmZiBoYXMgZXhwbGljaXQgbmV3L2RlbGV0ZSBpbmZvcm1hdGlvbiwgc28gd2UgZG9uJ3QgZ3Vlc3MgKi8KKwlwYXRjaC0+aXNfbmV3ID0gMDsKKwlwYXRjaC0+aXNfZGVsZXRlID0gMDsKKworCS8qCisJICogU29tZSB0aGluZ3MgbWF5IG5vdCBoYXZlIHRoZSBvbGQgbmFtZSBpbiB0aGUKKwkgKiByZXN0IG9mIHRoZSBoZWFkZXJzIGFueXdoZXJlIChwdXJlIG1vZGUgY2hhbmdlcywKKwkgKiBvciByZW1vdmluZyBvciBhZGRpbmcgZW1wdHkgZmlsZXMpLCBzbyB3ZSBnZXQKKwkgKiB0aGUgZGVmYXVsdCBuYW1lIGZyb20gdGhlIGhlYWRlci4KKwkgKi8KKwlwYXRjaC0+ZGVmX25hbWUgPSBnaXRfaGVhZGVyX25hbWUobGluZSwgbGVuKTsKKwlpZiAocGF0Y2gtPmRlZl9uYW1lICYmIHJvb3QubGVuKSB7CisJCWNoYXIgKnMgPSB4c3RyZm10KCIlcyVzIiwgcm9vdC5idWYsIHBhdGNoLT5kZWZfbmFtZSk7CisJCWZyZWUocGF0Y2gtPmRlZl9uYW1lKTsKKwkJcGF0Y2gtPmRlZl9uYW1lID0gczsKKwl9CisKKwlsaW5lICs9IGxlbjsKKwlzaXplIC09IGxlbjsKKwlsaW5lbnIrKzsKKwlmb3IgKG9mZnNldCA9IGxlbiA7IHNpemUgPiAwIDsgb2Zmc2V0ICs9IGxlbiwgc2l6ZSAtPSBsZW4sIGxpbmUgKz0gbGVuLCBsaW5lbnIrKykgeworCQlzdGF0aWMgY29uc3Qgc3RydWN0IG9wZW50cnkgeworCQkJY29uc3QgY2hhciAqc3RyOworCQkJaW50ICgqZm4pKGNvbnN0IGNoYXIgKiwgc3RydWN0IHBhdGNoICopOworCQl9IG9wdGFibGVbXSA9IHsKKwkJCXsgIkBAIC0iLCBnaXRkaWZmX2hkcmVuZCB9LAorCQkJeyAiLS0tICIsIGdpdGRpZmZfb2xkbmFtZSB9LAorCQkJeyAiKysrICIsIGdpdGRpZmZfbmV3bmFtZSB9LAorCQkJeyAib2xkIG1vZGUgIiwgZ2l0ZGlmZl9vbGRtb2RlIH0sCisJCQl7ICJuZXcgbW9kZSAiLCBnaXRkaWZmX25ld21vZGUgfSwKKwkJCXsgImRlbGV0ZWQgZmlsZSBtb2RlICIsIGdpdGRpZmZfZGVsZXRlIH0sCisJCQl7ICJuZXcgZmlsZSBtb2RlICIsIGdpdGRpZmZfbmV3ZmlsZSB9LAorCQkJeyAiY29weSBmcm9tICIsIGdpdGRpZmZfY29weXNyYyB9LAorCQkJeyAiY29weSB0byAiLCBnaXRkaWZmX2NvcHlkc3QgfSwKKwkJCXsgInJlbmFtZSBvbGQgIiwgZ2l0ZGlmZl9yZW5hbWVzcmMgfSwKKwkJCXsgInJlbmFtZSBuZXcgIiwgZ2l0ZGlmZl9yZW5hbWVkc3QgfSwKKwkJCXsgInJlbmFtZSBmcm9tICIsIGdpdGRpZmZfcmVuYW1lc3JjIH0sCisJCQl7ICJyZW5hbWUgdG8gIiwgZ2l0ZGlmZl9yZW5hbWVkc3QgfSwKKwkJCXsgInNpbWlsYXJpdHkgaW5kZXggIiwgZ2l0ZGlmZl9zaW1pbGFyaXR5IH0sCisJCQl7ICJkaXNzaW1pbGFyaXR5IGluZGV4ICIsIGdpdGRpZmZfZGlzc2ltaWxhcml0eSB9LAorCQkJeyAiaW5kZXggIiwgZ2l0ZGlmZl9pbmRleCB9LAorCQkJeyAiIiwgZ2l0ZGlmZl91bnJlY29nbml6ZWQgfSwKKwkJfTsKKwkJaW50IGk7CisKKwkJbGVuID0gbGluZWxlbihsaW5lLCBzaXplKTsKKwkJaWYgKCFsZW4gfHwgbGluZVtsZW4tMV0gIT0gJ1xuJykKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvcHRhYmxlKTsgaSsrKSB7CisJCQljb25zdCBzdHJ1Y3Qgb3BlbnRyeSAqcCA9IG9wdGFibGUgKyBpOworCQkJaW50IG9wbGVuID0gc3RybGVuKHAtPnN0cik7CisJCQlpZiAobGVuIDwgb3BsZW4gfHwgbWVtY21wKHAtPnN0ciwgbGluZSwgb3BsZW4pKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHAtPmZuKGxpbmUgKyBvcGxlbiwgcGF0Y2gpIDwgMCkKKwkJCQlyZXR1cm4gb2Zmc2V0OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IHBhcnNlX251bShjb25zdCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nICpwKQoreworCWNoYXIgKnB0cjsKKworCWlmICghaXNkaWdpdCgqbGluZSkpCisJCXJldHVybiAwOworCSpwID0gc3RydG91bChsaW5lLCAmcHRyLCAxMCk7CisJcmV0dXJuIHB0ciAtIGxpbmU7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcmFuZ2UoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgaW50IG9mZnNldCwgY29uc3QgY2hhciAqZXhwZWN0LAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqcDEsIHVuc2lnbmVkIGxvbmcgKnAyKQoreworCWludCBkaWdpdHMsIGV4OworCisJaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID49IGxlbikKKwkJcmV0dXJuIC0xOworCWxpbmUgKz0gb2Zmc2V0OworCWxlbiAtPSBvZmZzZXQ7CisKKwlkaWdpdHMgPSBwYXJzZV9udW0obGluZSwgcDEpOworCWlmICghZGlnaXRzKQorCQlyZXR1cm4gLTE7CisKKwlvZmZzZXQgKz0gZGlnaXRzOworCWxpbmUgKz0gZGlnaXRzOworCWxlbiAtPSBkaWdpdHM7CisKKwkqcDIgPSAxOworCWlmICgqbGluZSA9PSAnLCcpIHsKKwkJZGlnaXRzID0gcGFyc2VfbnVtKGxpbmUrMSwgcDIpOworCQlpZiAoIWRpZ2l0cykKKwkJCXJldHVybiAtMTsKKworCQlvZmZzZXQgKz0gZGlnaXRzKzE7CisJCWxpbmUgKz0gZGlnaXRzKzE7CisJCWxlbiAtPSBkaWdpdHMrMTsKKwl9CisKKwlleCA9IHN0cmxlbihleHBlY3QpOworCWlmIChleCA+IGxlbikKKwkJcmV0dXJuIC0xOworCWlmIChtZW1jbXAobGluZSwgZXhwZWN0LCBleCkpCisJCXJldHVybiAtMTsKKworCXJldHVybiBvZmZzZXQgKyBleDsKK30KKworc3RhdGljIHZvaWQgcmVjb3VudF9kaWZmKGNvbnN0IGNoYXIgKmxpbmUsIGludCBzaXplLCBzdHJ1Y3QgZnJhZ21lbnQgKmZyYWdtZW50KQoreworCWludCBvbGRsaW5lcyA9IDAsIG5ld2xpbmVzID0gMCwgcmV0ID0gMDsKKworCWlmIChzaXplIDwgMSkgeworCQl3YXJuaW5nKCJyZWNvdW50OiBpZ25vcmUgZW1wdHkgaHVuayIpOworCQlyZXR1cm47CisJfQorCisJZm9yICg7OykgeworCQlpbnQgbGVuID0gbGluZWxlbihsaW5lLCBzaXplKTsKKwkJc2l6ZSAtPSBsZW47CisJCWxpbmUgKz0gbGVuOworCisJCWlmIChzaXplIDwgMSkKKwkJCWJyZWFrOworCisJCXN3aXRjaCAoKmxpbmUpIHsKKwkJY2FzZSAnICc6IGNhc2UgJ1xuJzoKKwkJCW5ld2xpbmVzKys7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSAnLSc6CisJCQlvbGRsaW5lcysrOworCQkJY29udGludWU7CisJCWNhc2UgJysnOgorCQkJbmV3bGluZXMrKzsKKwkJCWNvbnRpbnVlOworCQljYXNlICdcXCc6CisJCQljb250aW51ZTsKKwkJY2FzZSAnQCc6CisJCQlyZXQgPSBzaXplIDwgMyB8fCAhc3RhcnRzX3dpdGgobGluZSwgIkBAICIpOworCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJcmV0ID0gc2l6ZSA8IDUgfHwgIXN0YXJ0c193aXRoKGxpbmUsICJkaWZmICIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXQpIHsKKwkJCXdhcm5pbmcoXygicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIiksCisJCQkJKGludClsaW5lbGVuKGxpbmUsIHNpemUpLCBsaW5lKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwl9CisJZnJhZ21lbnQtPm9sZGxpbmVzID0gb2xkbGluZXM7CisJZnJhZ21lbnQtPm5ld2xpbmVzID0gbmV3bGluZXM7Cit9CisKKy8qCisgKiBQYXJzZSBhIHVuaWZpZWQgZGlmZiBmcmFnbWVudCBoZWFkZXIgb2YgdGhlCisgKiBmb3JtICJAQCAtYSxiICtjLGQgQEAiCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfZnJhZ21lbnRfaGVhZGVyKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnQpCit7CisJaW50IG9mZnNldDsKKworCWlmICghbGVuIHx8IGxpbmVbbGVuLTFdICE9ICdcbicpCisJCXJldHVybiAtMTsKKworCS8qIEZpZ3VyZSBvdXQgdGhlIG51bWJlciBvZiBsaW5lcyBpbiBhIGZyYWdtZW50ICovCisJb2Zmc2V0ID0gcGFyc2VfcmFuZ2UobGluZSwgbGVuLCA0LCAiICsiLCAmZnJhZ21lbnQtPm9sZHBvcywgJmZyYWdtZW50LT5vbGRsaW5lcyk7CisJb2Zmc2V0ID0gcGFyc2VfcmFuZ2UobGluZSwgbGVuLCBvZmZzZXQsICIgQEAiLCAmZnJhZ21lbnQtPm5ld3BvcywgJmZyYWdtZW50LT5uZXdsaW5lcyk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgaW50IGZpbmRfaGVhZGVyKGNvbnN0IGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50ICpoZHJzaXplLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsZW47CisKKwlwYXRjaC0+aXNfdG9wbGV2ZWxfcmVsYXRpdmUgPSAwOworCXBhdGNoLT5pc19yZW5hbWUgPSBwYXRjaC0+aXNfY29weSA9IDA7CisJcGF0Y2gtPmlzX25ldyA9IHBhdGNoLT5pc19kZWxldGUgPSAtMTsKKwlwYXRjaC0+b2xkX21vZGUgPSBwYXRjaC0+bmV3X21vZGUgPSAwOworCXBhdGNoLT5vbGRfbmFtZSA9IHBhdGNoLT5uZXdfbmFtZSA9IE5VTEw7CisJZm9yIChvZmZzZXQgPSAwOyBzaXplID4gMDsgb2Zmc2V0ICs9IGxlbiwgc2l6ZSAtPSBsZW4sIGxpbmUgKz0gbGVuLCBsaW5lbnIrKykgeworCQl1bnNpZ25lZCBsb25nIG5leHRsZW47CisKKwkJbGVuID0gbGluZWxlbihsaW5lLCBzaXplKTsKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKworCQkvKiBUZXN0aW5nIHRoaXMgZWFybHkgYWxsb3dzIHVzIHRvIHRha2UgYSBmZXcgc2hvcnRjdXRzLi4gKi8KKwkJaWYgKGxlbiA8IDYpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBNYWtlIHN1cmUgd2UgZG9uJ3QgZmluZCBhbnkgdW5jb25uZWN0ZWQgcGF0Y2ggZnJhZ21lbnRzLgorCQkgKiBUaGF0J3MgYSBzaWduIHRoYXQgd2UgZGlkbid0IGZpbmQgYSBoZWFkZXIsIGFuZCB0aGF0IGEKKwkJICogcGF0Y2ggaGFzIGJlY29tZSBjb3JydXB0ZWQvYnJva2VuIHVwLgorCQkgKi8KKwkJaWYgKCFtZW1jbXAoIkBAIC0iLCBsaW5lLCA0KSkgeworCQkJc3RydWN0IGZyYWdtZW50IGR1bW15OworCQkJaWYgKHBhcnNlX2ZyYWdtZW50X2hlYWRlcihsaW5lLCBsZW4sICZkdW1teSkgPCAwKQorCQkJCWNvbnRpbnVlOworCQkJZGllKF8oInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiKSwKKwkJCSAgICBsaW5lbnIsIChpbnQpbGVuLTEsIGxpbmUpOworCQl9CisKKwkJaWYgKHNpemUgPCBsZW4gKyA2KQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogR2l0IHBhdGNoPyBJdCBtaWdodCBub3QgaGF2ZSBhIHJlYWwgcGF0Y2gsIGp1c3QgYSByZW5hbWUKKwkJICogb3IgbW9kZSBjaGFuZ2UsIHNvIHdlIGhhbmRsZSB0aGF0IHNwZWNpYWxseQorCQkgKi8KKwkJaWYgKCFtZW1jbXAoImRpZmYgLS1naXQgIiwgbGluZSwgMTEpKSB7CisJCQlpbnQgZ2l0X2hkcl9sZW4gPSBwYXJzZV9naXRfaGVhZGVyKGxpbmUsIGxlbiwgc2l6ZSwgcGF0Y2gpOworCQkJaWYgKGdpdF9oZHJfbGVuIDw9IGxlbikKKwkJCQljb250aW51ZTsKKwkJCWlmICghcGF0Y2gtPm9sZF9uYW1lICYmICFwYXRjaC0+bmV3X25hbWUpIHsKKwkJCQlpZiAoIXBhdGNoLT5kZWZfbmFtZSkKKwkJCQkJZGllKFFfKCJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAiCisJCQkJCSAgICAgICAiJWQgbGVhZGluZyBwYXRobmFtZSBjb21wb25lbnQgKGxpbmUgJWQpIiwKKwkJCQkJICAgICAgICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAiCisJCQkJCSAgICAgICAiJWQgbGVhZGluZyBwYXRobmFtZSBjb21wb25lbnRzIChsaW5lICVkKSIsCisJCQkJCSAgICAgICBwX3ZhbHVlKSwKKwkJCQkJICAgIHBfdmFsdWUsIGxpbmVucik7CisJCQkJcGF0Y2gtPm9sZF9uYW1lID0geHN0cmR1cChwYXRjaC0+ZGVmX25hbWUpOworCQkJCXBhdGNoLT5uZXdfbmFtZSA9IHhzdHJkdXAocGF0Y2gtPmRlZl9uYW1lKTsKKwkJCX0KKwkJCWlmICghcGF0Y2gtPmlzX2RlbGV0ZSAmJiAhcGF0Y2gtPm5ld19uYW1lKQorCQkJCWRpZSgiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uICIKKwkJCQkgICAgIihsaW5lICVkKSIsIGxpbmVucik7CisJCQlwYXRjaC0+aXNfdG9wbGV2ZWxfcmVsYXRpdmUgPSAxOworCQkJKmhkcnNpemUgPSBnaXRfaGRyX2xlbjsKKwkJCXJldHVybiBvZmZzZXQ7CisJCX0KKworCQkvKiAtLS0gZm9sbG93ZWQgYnkgKysrID8gKi8KKwkJaWYgKG1lbWNtcCgiLS0tICIsIGxpbmUsICA0KSB8fCBtZW1jbXAoIisrKyAiLCBsaW5lICsgbGVuLCA0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFdlIG9ubHkgYWNjZXB0IHVuaWZpZWQgcGF0Y2hlcywgc28gd2Ugd2FudCBpdCB0bworCQkgKiBhdCBsZWFzdCBoYXZlICJAQCAtYSxiICtjLGQgQEBcbiIsIHdoaWNoIGlzIDE0IGNoYXJzCisJCSAqIG1pbmltdW0gKCJAQCAtMCwwICsxIEBAXG4iIGlzIHRoZSBzaG9ydGVzdCkuCisJCSAqLworCQluZXh0bGVuID0gbGluZWxlbihsaW5lICsgbGVuLCBzaXplIC0gbGVuKTsKKwkJaWYgKHNpemUgPCBuZXh0bGVuICsgMTQgfHwgbWVtY21wKCJAQCAtIiwgbGluZSArIGxlbiArIG5leHRsZW4sIDQpKQorCQkJY29udGludWU7CisKKwkJLyogT2ssIHdlJ2xsIGNvbnNpZGVyIGl0IGEgcGF0Y2ggKi8KKwkJcGFyc2VfdHJhZGl0aW9uYWxfcGF0Y2gobGluZSwgbGluZStsZW4sIHBhdGNoKTsKKwkJKmhkcnNpemUgPSBsZW4gKyBuZXh0bGVuOworCQlsaW5lbnIgKz0gMjsKKwkJcmV0dXJuIG9mZnNldDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfd3NfZXJyb3IodW5zaWduZWQgcmVzdWx0LCBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCBpbnQgbGluZW5yKQoreworCWNoYXIgKmVycjsKKworCWlmICghcmVzdWx0KQorCQlyZXR1cm47CisKKwl3aGl0ZXNwYWNlX2Vycm9yKys7CisJaWYgKHNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnMgJiYKKwkgICAgc3F1ZWxjaF93aGl0ZXNwYWNlX2Vycm9ycyA8IHdoaXRlc3BhY2VfZXJyb3IpCisJCXJldHVybjsKKworCWVyciA9IHdoaXRlc3BhY2VfZXJyb3Jfc3RyaW5nKHJlc3VsdCk7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogJXMuXG4lLipzXG4iLAorCQlwYXRjaF9pbnB1dF9maWxlLCBsaW5lbnIsIGVyciwgbGVuLCBsaW5lKTsKKwlmcmVlKGVycik7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3doaXRlc3BhY2UoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSkKK3sKKwl1bnNpZ25lZCByZXN1bHQgPSB3c19jaGVjayhsaW5lICsgMSwgbGVuIC0gMSwgd3NfcnVsZSk7CisKKwlyZWNvcmRfd3NfZXJyb3IocmVzdWx0LCBsaW5lICsgMSwgbGVuIC0gMiwgbGluZW5yKTsKK30KKworLyoKKyAqIFBhcnNlIGEgdW5pZmllZCBkaWZmLiBOb3RlIHRoYXQgdGhpcyByZWFsbHkgbmVlZHMgdG8gcGFyc2UgZWFjaAorICogZnJhZ21lbnQgc2VwYXJhdGVseSwgc2luY2UgdGhlIG9ubHkgd2F5IHRvIGtub3cgdGhlIGRpZmZlcmVuY2UKKyAqIGJldHdlZW4gYSAiLS0tIiB0aGF0IGlzIHBhcnQgb2YgYSBwYXRjaCwgYW5kIGEgIi0tLSIgdGhhdCBzdGFydHMKKyAqIHRoZSBuZXh0IHBhdGNoIGlzIHRvIGxvb2sgYXQgdGhlIGxpbmUgY291bnRzLi4KKyAqLworc3RhdGljIGludCBwYXJzZV9mcmFnbWVudChjb25zdCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgIHN0cnVjdCBwYXRjaCAqcGF0Y2gsIHN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnQpCit7CisJaW50IGFkZGVkLCBkZWxldGVkOworCWludCBsZW4gPSBsaW5lbGVuKGxpbmUsIHNpemUpLCBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBvbGRsaW5lcywgbmV3bGluZXM7CisJdW5zaWduZWQgbG9uZyBsZWFkaW5nLCB0cmFpbGluZzsKKworCW9mZnNldCA9IHBhcnNlX2ZyYWdtZW50X2hlYWRlcihsaW5lLCBsZW4sIGZyYWdtZW50KTsKKwlpZiAob2Zmc2V0IDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChvZmZzZXQgPiAwICYmIHBhdGNoLT5yZWNvdW50KQorCQlyZWNvdW50X2RpZmYobGluZSArIG9mZnNldCwgc2l6ZSAtIG9mZnNldCwgZnJhZ21lbnQpOworCW9sZGxpbmVzID0gZnJhZ21lbnQtPm9sZGxpbmVzOworCW5ld2xpbmVzID0gZnJhZ21lbnQtPm5ld2xpbmVzOworCWxlYWRpbmcgPSAwOworCXRyYWlsaW5nID0gMDsKKworCS8qIFBhcnNlIHRoZSB0aGluZy4uICovCisJbGluZSArPSBsZW47CisJc2l6ZSAtPSBsZW47CisJbGluZW5yKys7CisJYWRkZWQgPSBkZWxldGVkID0gMDsKKwlmb3IgKG9mZnNldCA9IGxlbjsKKwkgICAgIDAgPCBzaXplOworCSAgICAgb2Zmc2V0ICs9IGxlbiwgc2l6ZSAtPSBsZW4sIGxpbmUgKz0gbGVuLCBsaW5lbnIrKykgeworCQlpZiAoIW9sZGxpbmVzICYmICFuZXdsaW5lcykKKwkJCWJyZWFrOworCQlsZW4gPSBsaW5lbGVuKGxpbmUsIHNpemUpOworCQlpZiAoIWxlbiB8fCBsaW5lW2xlbi0xXSAhPSAnXG4nKQorCQkJcmV0dXJuIC0xOworCQlzd2l0Y2ggKCpsaW5lKSB7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLTE7CisJCWNhc2UgJ1xuJzogLyogbmV3ZXIgR05VIGRpZmYsIGFuIGVtcHR5IGNvbnRleHQgbGluZSAqLworCQljYXNlICcgJzoKKwkJCW9sZGxpbmVzLS07CisJCQluZXdsaW5lcy0tOworCQkJaWYgKCFkZWxldGVkICYmICFhZGRlZCkKKwkJCQlsZWFkaW5nKys7CisJCQl0cmFpbGluZysrOworCQkJaWYgKCFhcHBseV9pbl9yZXZlcnNlICYmCisJCQkgICAgd3NfZXJyb3JfYWN0aW9uID09IGNvcnJlY3Rfd3NfZXJyb3IpCisJCQkJY2hlY2tfd2hpdGVzcGFjZShsaW5lLCBsZW4sIHBhdGNoLT53c19ydWxlKTsKKwkJCWJyZWFrOworCQljYXNlICctJzoKKwkJCWlmIChhcHBseV9pbl9yZXZlcnNlICYmCisJCQkgICAgd3NfZXJyb3JfYWN0aW9uICE9IG5vd2Fybl93c19lcnJvcikKKwkJCQljaGVja193aGl0ZXNwYWNlKGxpbmUsIGxlbiwgcGF0Y2gtPndzX3J1bGUpOworCQkJZGVsZXRlZCsrOworCQkJb2xkbGluZXMtLTsKKwkJCXRyYWlsaW5nID0gMDsKKwkJCWJyZWFrOworCQljYXNlICcrJzoKKwkJCWlmICghYXBwbHlfaW5fcmV2ZXJzZSAmJgorCQkJICAgIHdzX2Vycm9yX2FjdGlvbiAhPSBub3dhcm5fd3NfZXJyb3IpCisJCQkJY2hlY2tfd2hpdGVzcGFjZShsaW5lLCBsZW4sIHBhdGNoLT53c19ydWxlKTsKKwkJCWFkZGVkKys7CisJCQluZXdsaW5lcy0tOworCQkJdHJhaWxpbmcgPSAwOworCQkJYnJlYWs7CisKKwkJLyoKKwkJICogV2UgYWxsb3cgIlwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZSIuIERlcGVuZGluZworICAgICAgICAgICAgICAgICAqIG9uIGxvY2FsZSBzZXR0aW5ncyB3aGVuIHRoZSBwYXRjaCB3YXMgcHJvZHVjZWQgd2UKKyAgICAgICAgICAgICAgICAgKiBkb24ndCBrbm93IHdoYXQgdGhpcyBsaW5lIGxvb2tzIGxpa2UuIFRoZSBvbmx5CisgICAgICAgICAgICAgICAgICogdGhpbmcgd2UgZG8ga25vdyBpcyB0aGF0IGl0IGJlZ2lucyB3aXRoICJcICIuCisJCSAqIENoZWNraW5nIGZvciAxMiBpcyBqdXN0IGZvciBzYW5pdHkgY2hlY2sgLS0gYW55CisJCSAqIGwxMG4gb2YgIlwgTm8gbmV3bGluZS4uLiIgaXMgYXQgbGVhc3QgdGhhdCBsb25nLgorCQkgKi8KKwkJY2FzZSAnXFwnOgorCQkJaWYgKGxlbiA8IDEyIHx8IG1lbWNtcChsaW5lLCAiXFwgIiwgMikpCisJCQkJcmV0dXJuIC0xOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKG9sZGxpbmVzIHx8IG5ld2xpbmVzKQorCQlyZXR1cm4gLTE7CisJaWYgKCFkZWxldGVkICYmICFhZGRlZCkKKwkJcmV0dXJuIC0xOworCisJZnJhZ21lbnQtPmxlYWRpbmcgPSBsZWFkaW5nOworCWZyYWdtZW50LT50cmFpbGluZyA9IHRyYWlsaW5nOworCisJLyoKKwkgKiBJZiBhIGZyYWdtZW50IGVuZHMgd2l0aCBhbiBpbmNvbXBsZXRlIGxpbmUsIHdlIGZhaWxlZCB0byBpbmNsdWRlCisJICogaXQgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoaXQgb2xkbGluZXMgPT0gbmV3bGluZXMgPT0gMAorCSAqIGJlZm9yZSBzZWVpbmcgaXQuCisJICovCisJaWYgKDEyIDwgc2l6ZSAmJiAhbWVtY21wKGxpbmUsICJcXCAiLCAyKSkKKwkJb2Zmc2V0ICs9IGxpbmVsZW4obGluZSwgc2l6ZSk7CisKKwlwYXRjaC0+bGluZXNfYWRkZWQgKz0gYWRkZWQ7CisJcGF0Y2gtPmxpbmVzX2RlbGV0ZWQgKz0gZGVsZXRlZDsKKworCWlmICgwIDwgcGF0Y2gtPmlzX25ldyAmJiBvbGRsaW5lcykKKwkJcmV0dXJuIGVycm9yKF8oIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIikpOworCWlmICgwIDwgcGF0Y2gtPmlzX2RlbGV0ZSAmJiBuZXdsaW5lcykKKwkJcmV0dXJuIGVycm9yKF8oImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiKSk7CisJcmV0dXJuIG9mZnNldDsKK30KKworLyoKKyAqIFdlIGhhdmUgc2VlbiAiZGlmZiAtLWdpdCBhLy4uLiBiLy4uLiIgaGVhZGVyIChvciBhIHRyYWRpdGlvbmFsIHBhdGNoCisgKiBoZWFkZXIpLiAgUmVhZCBodW5rcyB0aGF0IGJlbG9uZyB0byB0aGlzIHBhdGNoIGludG8gZnJhZ21lbnRzIGFuZCBoYW5nCisgKiB0aGVtIHRvIHRoZSBnaXZlbiBwYXRjaCBzdHJ1Y3R1cmUuCisgKgorICogVGhlIChmcmFnbWVudC0+cGF0Y2gsIGZyYWdtZW50LT5zaXplKSBwYWlyIHBvaW50cyBpbnRvIHRoZSBtZW1vcnkgZ2l2ZW4KKyAqIGJ5IHRoZSBjYWxsZXIsIG5vdCBhIGNvcHksIHdoZW4gd2UgcmV0dXJuLgorICovCitzdGF0aWMgaW50IHBhcnNlX3NpbmdsZV9wYXRjaChjb25zdCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgb2xkbGluZXMgPSAwLCBuZXdsaW5lcyA9IDAsIGNvbnRleHQgPSAwOworCXN0cnVjdCBmcmFnbWVudCAqKmZyYWdwID0gJnBhdGNoLT5mcmFnbWVudHM7CisKKwl3aGlsZSAoc2l6ZSA+IDQgJiYgIW1lbWNtcChsaW5lLCAiQEAgLSIsIDQpKSB7CisJCXN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnQ7CisJCWludCBsZW47CisKKwkJZnJhZ21lbnQgPSB4Y2FsbG9jKDEsIHNpemVvZigqZnJhZ21lbnQpKTsKKwkJZnJhZ21lbnQtPmxpbmVuciA9IGxpbmVucjsKKwkJbGVuID0gcGFyc2VfZnJhZ21lbnQobGluZSwgc2l6ZSwgcGF0Y2gsIGZyYWdtZW50KTsKKwkJaWYgKGxlbiA8PSAwKQorCQkJZGllKF8oImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIpLCBsaW5lbnIpOworCQlmcmFnbWVudC0+cGF0Y2ggPSBsaW5lOworCQlmcmFnbWVudC0+c2l6ZSA9IGxlbjsKKwkJb2xkbGluZXMgKz0gZnJhZ21lbnQtPm9sZGxpbmVzOworCQluZXdsaW5lcyArPSBmcmFnbWVudC0+bmV3bGluZXM7CisJCWNvbnRleHQgKz0gZnJhZ21lbnQtPmxlYWRpbmcgKyBmcmFnbWVudC0+dHJhaWxpbmc7CisKKwkJKmZyYWdwID0gZnJhZ21lbnQ7CisJCWZyYWdwID0gJmZyYWdtZW50LT5uZXh0OworCisJCW9mZnNldCArPSBsZW47CisJCWxpbmUgKz0gbGVuOworCQlzaXplIC09IGxlbjsKKwl9CisKKwkvKgorCSAqIElmIHNvbWV0aGluZyB3YXMgcmVtb3ZlZCAoaS5lLiB3ZSBoYXZlIG9sZC1saW5lcykgaXQgY2Fubm90CisJICogYmUgY3JlYXRpb24sIGFuZCBpZiBzb21ldGhpbmcgd2FzIGFkZGVkIGl0IGNhbm5vdCBiZQorCSAqIGRlbGV0aW9uLiAgSG93ZXZlciwgdGhlIHJldmVyc2UgaXMgbm90IHRydWU7IC0tdW5pZmllZD0wCisJICogcGF0Y2hlcyB0aGF0IG9ubHkgYWRkIGFyZSBub3QgbmVjZXNzYXJpbHkgY3JlYXRpb24gZXZlbgorCSAqIHRob3VnaCB0aGV5IGRvIG5vdCBoYXZlIGFueSBvbGQgbGluZXMsIGFuZCBvbmVzIHRoYXQgb25seQorCSAqIGRlbGV0ZSBhcmUgbm90IG5lY2Vzc2FyaWx5IGRlbGV0aW9uLgorCSAqCisJICogVW5mb3J0dW5hdGVseSwgYSByZWFsIGNyZWF0aW9uL2RlbGV0aW9uIHBhdGNoIGRvIF9ub3RfIGhhdmUKKwkgKiBhbnkgY29udGV4dCBsaW5lIGJ5IGRlZmluaXRpb24sIHNvIHdlIGNhbm5vdCBzYWZlbHkgdGVsbCBpdAorCSAqIGFwYXJ0IHdpdGggLS11bmlmaWVkPTAgaW5zYW5pdHkuICBBdCBsZWFzdCBpZiB0aGUgcGF0Y2ggaGFzCisJICogbW9yZSB0aGFuIG9uZSBodW5rIGl0IGlzIG5vdCBjcmVhdGlvbiBvciBkZWxldGlvbi4KKwkgKi8KKwlpZiAocGF0Y2gtPmlzX25ldyA8IDAgJiYKKwkgICAgKG9sZGxpbmVzIHx8IChwYXRjaC0+ZnJhZ21lbnRzICYmIHBhdGNoLT5mcmFnbWVudHMtPm5leHQpKSkKKwkJcGF0Y2gtPmlzX25ldyA9IDA7CisJaWYgKHBhdGNoLT5pc19kZWxldGUgPCAwICYmCisJICAgIChuZXdsaW5lcyB8fCAocGF0Y2gtPmZyYWdtZW50cyAmJiBwYXRjaC0+ZnJhZ21lbnRzLT5uZXh0KSkpCisJCXBhdGNoLT5pc19kZWxldGUgPSAwOworCisJaWYgKDAgPCBwYXRjaC0+aXNfbmV3ICYmIG9sZGxpbmVzKQorCQlkaWUoXygibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiKSwgcGF0Y2gtPm5ld19uYW1lKTsKKwlpZiAoMCA8IHBhdGNoLT5pc19kZWxldGUgJiYgbmV3bGluZXMpCisJCWRpZShfKCJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIiksIHBhdGNoLT5vbGRfbmFtZSk7CisJaWYgKCFwYXRjaC0+aXNfZGVsZXRlICYmICFuZXdsaW5lcyAmJiBjb250ZXh0KQorCQlmcHJpbnRmX2xuKHN0ZGVyciwKKwkJCSAgIF8oIioqIHdhcm5pbmc6ICIKKwkJCSAgICAgImZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiKSwKKwkJCSAgIHBhdGNoLT5uZXdfbmFtZSk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCitzdGF0aWMgaW5saW5lIGludCBtZXRhZGF0YV9jaGFuZ2VzKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcmV0dXJuCXBhdGNoLT5pc19yZW5hbWUgPiAwIHx8CisJCXBhdGNoLT5pc19jb3B5ID4gMCB8fAorCQlwYXRjaC0+aXNfbmV3ID4gMCB8fAorCQlwYXRjaC0+aXNfZGVsZXRlIHx8CisJCShwYXRjaC0+b2xkX21vZGUgJiYgcGF0Y2gtPm5ld19tb2RlICYmCisJCSBwYXRjaC0+b2xkX21vZGUgIT0gcGF0Y2gtPm5ld19tb2RlKTsKK30KKworc3RhdGljIGNoYXIgKmluZmxhdGVfaXQoY29uc3Qgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJdW5zaWduZWQgbG9uZyBpbmZsYXRlZF9zaXplKQoreworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwl2b2lkICpvdXQ7CisJaW50IHN0OworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKworCXN0cmVhbS5uZXh0X2luID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOworCXN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJc3RyZWFtLm5leHRfb3V0ID0gb3V0ID0geG1hbGxvYyhpbmZsYXRlZF9zaXplKTsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gaW5mbGF0ZWRfc2l6ZTsKKwlnaXRfaW5mbGF0ZV9pbml0KCZzdHJlYW0pOworCXN0ID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKwlpZiAoKHN0ICE9IFpfU1RSRUFNX0VORCkgfHwgc3RyZWFtLnRvdGFsX291dCAhPSBpbmZsYXRlZF9zaXplKSB7CisJCWZyZWUob3V0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBvdXQ7Cit9CisKKy8qCisgKiBSZWFkIGEgYmluYXJ5IGh1bmsgYW5kIHJldHVybiBhIG5ldyBmcmFnbWVudDsgZnJhZ21lbnQtPnBhdGNoCisgKiBwb2ludHMgYXQgYW4gYWxsb2NhdGVkIG1lbW9yeSB0aGF0IHRoZSBjYWxsZXIgbXVzdCBmcmVlLCBzbworICogaXQgaXMgbWFya2VkIGFzICItPmZyZWVfcGF0Y2ggPSAxIi4KKyAqLworc3RhdGljIHN0cnVjdCBmcmFnbWVudCAqcGFyc2VfYmluYXJ5X2h1bmsoY2hhciAqKmJ1Zl9wLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgKnN6X3AsCisJCQkJCSAgaW50ICpzdGF0dXNfcCwKKwkJCQkJICBpbnQgKnVzZWRfcCkKK3sKKwkvKgorCSAqIEV4cGVjdCBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCBiaW5hcnkgcGF0Y2ggbWV0aG9kICgibGl0ZXJhbCIKKwkgKiBvciAiZGVsdGEiKSwgZm9sbG93ZWQgYnkgdGhlIGxlbmd0aCBvZiBkYXRhIGJlZm9yZSBkZWZsYXRpbmcuCisJICogYSBzZXF1ZW5jZSBvZiAnbGVuZ3RoLWJ5dGUnIGZvbGxvd2VkIGJ5IGJhc2UtODUgZW5jb2RlZCBkYXRhCisJICogc2hvdWxkIGZvbGxvdywgdGVybWluYXRlZCBieSBhIG5ld2xpbmUuCisJICoKKwkgKiBFYWNoIDUtYnl0ZSBzZXF1ZW5jZSBvZiBiYXNlLTg1IGVuY29kZXMgdXAgdG8gNCBieXRlcywKKwkgKiBhbmQgd2Ugd291bGQgbGltaXQgdGhlIHBhdGNoIGxpbmUgdG8gNjYgY2hhcmFjdGVycywKKwkgKiBzbyBvbmUgbGluZSBjYW4gZml0IHVwIHRvIDEzIGdyb3VwcyB0aGF0IHdvdWxkIGRlY29kZQorCSAqIHRvIDUyIGJ5dGVzIG1heC4gIFRoZSBsZW5ndGggYnl0ZSAnQSctJ1onIGNvcnJlc3BvbmRzCisJICogdG8gMS0yNiBieXRlcywgYW5kICdhJy0neicgY29ycmVzcG9uZHMgdG8gMjctNTIgYnl0ZXMuCisJICovCisJaW50IGxsZW4sIHVzZWQ7CisJdW5zaWduZWQgbG9uZyBzaXplID0gKnN6X3A7CisJY2hhciAqYnVmZmVyID0gKmJ1Zl9wOworCWludCBwYXRjaF9tZXRob2Q7CisJdW5zaWduZWQgbG9uZyBvcmlnbGVuOworCWNoYXIgKmRhdGEgPSBOVUxMOworCWludCBodW5rX3NpemUgPSAwOworCXN0cnVjdCBmcmFnbWVudCAqZnJhZzsKKworCWxsZW4gPSBsaW5lbGVuKGJ1ZmZlciwgc2l6ZSk7CisJdXNlZCA9IGxsZW47CisKKwkqc3RhdHVzX3AgPSAwOworCisJaWYgKHN0YXJ0c193aXRoKGJ1ZmZlciwgImRlbHRhICIpKSB7CisJCXBhdGNoX21ldGhvZCA9IEJJTkFSWV9ERUxUQV9ERUZMQVRFRDsKKwkJb3JpZ2xlbiA9IHN0cnRvdWwoYnVmZmVyICsgNiwgTlVMTCwgMTApOworCX0KKwllbHNlIGlmIChzdGFydHNfd2l0aChidWZmZXIsICJsaXRlcmFsICIpKSB7CisJCXBhdGNoX21ldGhvZCA9IEJJTkFSWV9MSVRFUkFMX0RFRkxBVEVEOworCQlvcmlnbGVuID0gc3RydG91bChidWZmZXIgKyA4LCBOVUxMLCAxMCk7CisJfQorCWVsc2UKKwkJcmV0dXJuIE5VTEw7CisKKwlsaW5lbnIrKzsKKwlidWZmZXIgKz0gbGxlbjsKKwl3aGlsZSAoMSkgeworCQlpbnQgYnl0ZV9sZW5ndGgsIG1heF9ieXRlX2xlbmd0aCwgbmV3c2l6ZTsKKwkJbGxlbiA9IGxpbmVsZW4oYnVmZmVyLCBzaXplKTsKKwkJdXNlZCArPSBsbGVuOworCQlsaW5lbnIrKzsKKwkJaWYgKGxsZW4gPT0gMSkgeworCQkJLyogY29uc3VtZSB0aGUgYmxhbmsgbGluZSAqLworCQkJYnVmZmVyKys7CisJCQlzaXplLS07CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBNaW5pbXVtIGxpbmUgaXMgIkEwMDAwMFxuIiB3aGljaCBpcyA3LWJ5dGUgbG9uZywKKwkJICogYW5kIHRoZSBsaW5lIGxlbmd0aCBtdXN0IGJlIG11bHRpcGxlIG9mIDUgcGx1cyAyLgorCQkgKi8KKwkJaWYgKChsbGVuIDwgNykgfHwgKGxsZW4tMikgJSA1KQorCQkJZ290byBjb3JydXB0OworCQltYXhfYnl0ZV9sZW5ndGggPSAobGxlbiAtIDIpIC8gNSAqIDQ7CisJCWJ5dGVfbGVuZ3RoID0gKmJ1ZmZlcjsKKwkJaWYgKCdBJyA8PSBieXRlX2xlbmd0aCAmJiBieXRlX2xlbmd0aCA8PSAnWicpCisJCQlieXRlX2xlbmd0aCA9IGJ5dGVfbGVuZ3RoIC0gJ0EnICsgMTsKKwkJZWxzZSBpZiAoJ2EnIDw9IGJ5dGVfbGVuZ3RoICYmIGJ5dGVfbGVuZ3RoIDw9ICd6JykKKwkJCWJ5dGVfbGVuZ3RoID0gYnl0ZV9sZW5ndGggLSAnYScgKyAyNzsKKwkJZWxzZQorCQkJZ290byBjb3JydXB0OworCQkvKiBpZiB0aGUgaW5wdXQgbGVuZ3RoIHdhcyBub3QgbXVsdGlwbGUgb2YgNCwgd2Ugd291bGQKKwkJICogaGF2ZSBmaWxsZXIgYXQgdGhlIGVuZCBidXQgdGhlIGZpbGxlciBzaG91bGQgbmV2ZXIKKwkJICogZXhjZWVkIDMgYnl0ZXMKKwkJICovCisJCWlmIChtYXhfYnl0ZV9sZW5ndGggPCBieXRlX2xlbmd0aCB8fAorCQkgICAgYnl0ZV9sZW5ndGggPD0gbWF4X2J5dGVfbGVuZ3RoIC0gNCkKKwkJCWdvdG8gY29ycnVwdDsKKwkJbmV3c2l6ZSA9IGh1bmtfc2l6ZSArIGJ5dGVfbGVuZ3RoOworCQlkYXRhID0geHJlYWxsb2MoZGF0YSwgbmV3c2l6ZSk7CisJCWlmIChkZWNvZGVfODUoZGF0YSArIGh1bmtfc2l6ZSwgYnVmZmVyICsgMSwgYnl0ZV9sZW5ndGgpKQorCQkJZ290byBjb3JydXB0OworCQlodW5rX3NpemUgPSBuZXdzaXplOworCQlidWZmZXIgKz0gbGxlbjsKKwkJc2l6ZSAtPSBsbGVuOworCX0KKworCWZyYWcgPSB4Y2FsbG9jKDEsIHNpemVvZigqZnJhZykpOworCWZyYWctPnBhdGNoID0gaW5mbGF0ZV9pdChkYXRhLCBodW5rX3NpemUsIG9yaWdsZW4pOworCWZyYWctPmZyZWVfcGF0Y2ggPSAxOworCWlmICghZnJhZy0+cGF0Y2gpCisJCWdvdG8gY29ycnVwdDsKKwlmcmVlKGRhdGEpOworCWZyYWctPnNpemUgPSBvcmlnbGVuOworCSpidWZfcCA9IGJ1ZmZlcjsKKwkqc3pfcCA9IHNpemU7CisJKnVzZWRfcCA9IHVzZWQ7CisJZnJhZy0+YmluYXJ5X3BhdGNoX21ldGhvZCA9IHBhdGNoX21ldGhvZDsKKwlyZXR1cm4gZnJhZzsKKworIGNvcnJ1cHQ6CisJZnJlZShkYXRhKTsKKwkqc3RhdHVzX3AgPSAtMTsKKwllcnJvcihfKCJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIiksCisJICAgICAgbGluZW5yLTEsIGxsZW4tMSwgYnVmZmVyKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBwYXJzZV9iaW5hcnkoY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJLyoKKwkgKiBXZSBoYXZlIHJlYWQgIkdJVCBiaW5hcnkgcGF0Y2hcbiI7IHdoYXQgZm9sbG93cyBpcyBhIGxpbmUKKwkgKiB0aGF0IHNheXMgdGhlIHBhdGNoIG1ldGhvZCAoY3VycmVudGx5LCBlaXRoZXIgImxpdGVyYWwiIG9yCisJICogImRlbHRhIikgYW5kIHRoZSBsZW5ndGggb2YgZGF0YSBiZWZvcmUgZGVmbGF0aW5nOyBhCisJICogc2VxdWVuY2Ugb2YgJ2xlbmd0aC1ieXRlJyBmb2xsb3dlZCBieSBiYXNlLTg1IGVuY29kZWQgZGF0YQorCSAqIGZvbGxvd3MuCisJICoKKwkgKiBXaGVuIGEgYmluYXJ5IHBhdGNoIGlzIHJldmVyc2libGUsIHRoZXJlIGlzIGFub3RoZXIgYmluYXJ5CisJICogaHVuayBpbiB0aGUgc2FtZSBmb3JtYXQsIHN0YXJ0aW5nIHdpdGggcGF0Y2ggbWV0aG9kIChlaXRoZXIKKwkgKiAibGl0ZXJhbCIgb3IgImRlbHRhIikgd2l0aCB0aGUgbGVuZ3RoIG9mIGRhdGEsIGFuZCBhIHNlcXVlbmNlCisJICogb2YgbGVuZ3RoLWJ5dGUgKyBiYXNlLTg1IGVuY29kZWQgZGF0YSwgdGVybWluYXRlZCB3aXRoIGFub3RoZXIKKwkgKiBlbXB0eSBsaW5lLiAgVGhpcyBkYXRhLCB3aGVuIGFwcGxpZWQgdG8gdGhlIHBvc3RpbWFnZSwgcHJvZHVjZXMKKwkgKiB0aGUgcHJlaW1hZ2UuCisJICovCisJc3RydWN0IGZyYWdtZW50ICpmb3J3YXJkOworCXN0cnVjdCBmcmFnbWVudCAqcmV2ZXJzZTsKKwlpbnQgc3RhdHVzOworCWludCB1c2VkLCB1c2VkXzE7CisKKwlmb3J3YXJkID0gcGFyc2VfYmluYXJ5X2h1bmsoJmJ1ZmZlciwgJnNpemUsICZzdGF0dXMsICZ1c2VkKTsKKwlpZiAoIWZvcndhcmQgJiYgIXN0YXR1cykKKwkJLyogdGhlcmUgaGFzIHRvIGJlIG9uZSBodW5rIChmb3J3YXJkIGh1bmspICovCisJCXJldHVybiBlcnJvcihfKCJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiKSwgbGluZW5yLTEpOworCWlmIChzdGF0dXMpCisJCS8qIG90aGVyd2lzZSB3ZSBhbHJlYWR5IGdhdmUgYW4gZXJyb3IgbWVzc2FnZSAqLworCQlyZXR1cm4gc3RhdHVzOworCisJcmV2ZXJzZSA9IHBhcnNlX2JpbmFyeV9odW5rKCZidWZmZXIsICZzaXplLCAmc3RhdHVzLCAmdXNlZF8xKTsKKwlpZiAocmV2ZXJzZSkKKwkJdXNlZCArPSB1c2VkXzE7CisJZWxzZSBpZiAoc3RhdHVzKSB7CisJCS8qCisJCSAqIE5vdCBoYXZpbmcgcmV2ZXJzZSBodW5rIGlzIG5vdCBhbiBlcnJvciwgYnV0IGhhdmluZworCQkgKiBhIGNvcnJ1cHQgcmV2ZXJzZSBodW5rIGlzLgorCQkgKi8KKwkJZnJlZSgodm9pZCopIGZvcndhcmQtPnBhdGNoKTsKKwkJZnJlZShmb3J3YXJkKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJZm9yd2FyZC0+bmV4dCA9IHJldmVyc2U7CisJcGF0Y2gtPmZyYWdtZW50cyA9IGZvcndhcmQ7CisJcGF0Y2gtPmlzX2JpbmFyeSA9IDE7CisJcmV0dXJuIHVzZWQ7Cit9CisKK3N0YXRpYyB2b2lkIHByZWZpeF9vbmUoY2hhciAqKm5hbWUpCit7CisJY2hhciAqb2xkX25hbWUgPSAqbmFtZTsKKwlpZiAoIW9sZF9uYW1lKQorCQlyZXR1cm47CisJKm5hbWUgPSB4c3RyZHVwKHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHByZWZpeF9sZW5ndGgsICpuYW1lKSk7CisJZnJlZShvbGRfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByZWZpeF9wYXRjaChzdHJ1Y3QgcGF0Y2ggKnApCit7CisJaWYgKCFwcmVmaXggfHwgcC0+aXNfdG9wbGV2ZWxfcmVsYXRpdmUpCisJCXJldHVybjsKKwlwcmVmaXhfb25lKCZwLT5uZXdfbmFtZSk7CisJcHJlZml4X29uZSgmcC0+b2xkX25hbWUpOworfQorCisvKgorICogaW5jbHVkZS9leGNsdWRlCisgKi8KKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBsaW1pdF9ieV9uYW1lOworc3RhdGljIGludCBoYXNfaW5jbHVkZTsKK3N0YXRpYyB2b2lkIGFkZF9uYW1lX2xpbWl0KGNvbnN0IGNoYXIgKm5hbWUsIGludCBleGNsdWRlKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKworCWl0ID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZsaW1pdF9ieV9uYW1lLCBuYW1lKTsKKwlpdC0+dXRpbCA9IGV4Y2x1ZGUgPyBOVUxMIDogKHZvaWQgKikgMTsKK30KKworc3RhdGljIGludCB1c2VfcGF0Y2goc3RydWN0IHBhdGNoICpwKQoreworCWNvbnN0IGNoYXIgKnBhdGhuYW1lID0gcC0+bmV3X25hbWUgPyBwLT5uZXdfbmFtZSA6IHAtPm9sZF9uYW1lOworCWludCBpOworCisJLyogUGF0aHMgb3V0c2lkZSBhcmUgbm90IHRvdWNoZWQgcmVnYXJkbGVzcyBvZiAiLS1pbmNsdWRlIiAqLworCWlmICgwIDwgcHJlZml4X2xlbmd0aCkgeworCQlpbnQgcGF0aGxlbiA9IHN0cmxlbihwYXRobmFtZSk7CisJCWlmIChwYXRobGVuIDw9IHByZWZpeF9sZW5ndGggfHwKKwkJICAgIG1lbWNtcChwcmVmaXgsIHBhdGhuYW1lLCBwcmVmaXhfbGVuZ3RoKSkKKwkJCXJldHVybiAwOworCX0KKworCS8qIFNlZSBpZiBpdCBtYXRjaGVzIGFueSBvZiBleGNsdWRlL2luY2x1ZGUgcnVsZSAqLworCWZvciAoaSA9IDA7IGkgPCBsaW1pdF9ieV9uYW1lLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ID0gJmxpbWl0X2J5X25hbWUuaXRlbXNbaV07CisJCWlmICghd2lsZG1hdGNoKGl0LT5zdHJpbmcsIHBhdGhuYW1lLCAwLCBOVUxMKSkKKwkJCXJldHVybiAoaXQtPnV0aWwgIT0gTlVMTCk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBoYWQgYW55IGluY2x1ZGUsIGEgcGF0aCB0aGF0IGRvZXMgbm90IG1hdGNoIGFueSBydWxlIGlzCisJICogbm90IHVzZWQuICBPdGhlcndpc2UsIHdlIHNhdyBidW5jaCBvZiBleGNsdWRlIHJ1bGVzIChvciBub25lKQorCSAqIGFuZCBzdWNoIGEgcGF0aCBpcyB1c2VkLgorCSAqLworCXJldHVybiAhaGFzX2luY2x1ZGU7Cit9CisKKworLyoKKyAqIFJlYWQgdGhlIHBhdGNoIHRleHQgaW4gImJ1ZmZlciIgdGhhdCBleHRlbmRzIGZvciAic2l6ZSIgYnl0ZXM7IHN0b3AKKyAqIHJlYWRpbmcgYWZ0ZXIgc2VlaW5nIGEgc2luZ2xlIHBhdGNoIChpLmUuIGNoYW5nZXMgdG8gYSBzaW5nbGUgZmlsZSkuCisgKiBDcmVhdGUgZnJhZ21lbnRzIChpLmUuIHBhdGNoIGh1bmtzKSBhbmQgaGFuZyB0aGVtIHRvIHRoZSBnaXZlbiBwYXRjaC4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkLCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGNhbGwgdXMKKyAqIGFnYWluIGZvciB0aGUgbmV4dCBwYXRjaC4KKyAqLworc3RhdGljIGludCBwYXJzZV9jaHVuayhjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlpbnQgaGRyc2l6ZSwgcGF0Y2hzaXplOworCWludCBvZmZzZXQgPSBmaW5kX2hlYWRlcihidWZmZXIsIHNpemUsICZoZHJzaXplLCBwYXRjaCk7CisKKwlpZiAob2Zmc2V0IDwgMCkKKwkJcmV0dXJuIG9mZnNldDsKKworCXByZWZpeF9wYXRjaChwYXRjaCk7CisKKwlpZiAoIXVzZV9wYXRjaChwYXRjaCkpCisJCXBhdGNoLT53c19ydWxlID0gMDsKKwllbHNlCisJCXBhdGNoLT53c19ydWxlID0gd2hpdGVzcGFjZV9ydWxlKHBhdGNoLT5uZXdfbmFtZQorCQkJCQkJID8gcGF0Y2gtPm5ld19uYW1lCisJCQkJCQkgOiBwYXRjaC0+b2xkX25hbWUpOworCisJcGF0Y2hzaXplID0gcGFyc2Vfc2luZ2xlX3BhdGNoKGJ1ZmZlciArIG9mZnNldCArIGhkcnNpemUsCisJCQkJICAgICAgIHNpemUgLSBvZmZzZXQgLSBoZHJzaXplLCBwYXRjaCk7CisKKwlpZiAoIXBhdGNoc2l6ZSkgeworCQlzdGF0aWMgY29uc3QgY2hhciBnaXRfYmluYXJ5W10gPSAiR0lUIGJpbmFyeSBwYXRjaFxuIjsKKwkJaW50IGhkID0gaGRyc2l6ZSArIG9mZnNldDsKKwkJdW5zaWduZWQgbG9uZyBsbGVuID0gbGluZWxlbihidWZmZXIgKyBoZCwgc2l6ZSAtIGhkKTsKKworCQlpZiAobGxlbiA9PSBzaXplb2YoZ2l0X2JpbmFyeSkgLSAxICYmCisJCSAgICAhbWVtY21wKGdpdF9iaW5hcnksIGJ1ZmZlciArIGhkLCBsbGVuKSkgeworCQkJaW50IHVzZWQ7CisJCQlsaW5lbnIrKzsKKwkJCXVzZWQgPSBwYXJzZV9iaW5hcnkoYnVmZmVyICsgaGQgKyBsbGVuLAorCQkJCQkgICAgc2l6ZSAtIGhkIC0gbGxlbiwgcGF0Y2gpOworCQkJaWYgKHVzZWQpCisJCQkJcGF0Y2hzaXplID0gdXNlZCArIGxsZW47CisJCQllbHNlCisJCQkJcGF0Y2hzaXplID0gMDsKKwkJfQorCQllbHNlIGlmICghbWVtY21wKCIgZGlmZmVyXG4iLCBidWZmZXIgKyBoZCArIGxsZW4gLSA4LCA4KSkgeworCQkJc3RhdGljIGNvbnN0IGNoYXIgKmJpbmhkcltdID0geworCQkJCSJCaW5hcnkgZmlsZXMgIiwKKwkJCQkiRmlsZXMgIiwKKwkJCQlOVUxMLAorCQkJfTsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgYmluaGRyW2ldOyBpKyspIHsKKwkJCQlpbnQgbGVuID0gc3RybGVuKGJpbmhkcltpXSk7CisJCQkJaWYgKGxlbiA8IHNpemUgLSBoZCAmJgorCQkJCSAgICAhbWVtY21wKGJpbmhkcltpXSwgYnVmZmVyICsgaGQsIGxlbikpIHsKKwkJCQkJbGluZW5yKys7CisJCQkJCXBhdGNoLT5pc19iaW5hcnkgPSAxOworCQkJCQlwYXRjaHNpemUgPSBsbGVuOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBFbXB0eSBwYXRjaCBjYW5ub3QgYmUgYXBwbGllZCBpZiBpdCBpcyBhIHRleHQgcGF0Y2gKKwkJICogd2l0aG91dCBtZXRhZGF0YSBjaGFuZ2UuICBBIGJpbmFyeSBwYXRjaCBhcHBlYXJzCisJCSAqIGVtcHR5IHRvIHVzIGhlcmUuCisJCSAqLworCQlpZiAoKGFwcGx5IHx8IGNoZWNrKSAmJgorCQkgICAgKCFwYXRjaC0+aXNfYmluYXJ5ICYmICFtZXRhZGF0YV9jaGFuZ2VzKHBhdGNoKSkpCisJCQlkaWUoXygicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIpLCBsaW5lbnIpOworCX0KKworCXJldHVybiBvZmZzZXQgKyBoZHJzaXplICsgcGF0Y2hzaXplOworfQorCisjZGVmaW5lIHN3YXAoYSxiKSBteXN3YXAoKGEpLChiKSxzaXplb2YoYSkpCisKKyNkZWZpbmUgbXlzd2FwKGEsIGIsIHNpemUpIGRvIHsJCVwKKwl1bnNpZ25lZCBjaGFyIG15dG1wW3NpemVdOwlcCisJbWVtY3B5KG15dG1wLCAmYSwgc2l6ZSk7CQlcCisJbWVtY3B5KCZhLCAmYiwgc2l6ZSk7CQlcCisJbWVtY3B5KCZiLCBteXRtcCwgc2l6ZSk7CQlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCByZXZlcnNlX3BhdGNoZXMoc3RydWN0IHBhdGNoICpwKQoreworCWZvciAoOyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWcgPSBwLT5mcmFnbWVudHM7CisKKwkJc3dhcChwLT5uZXdfbmFtZSwgcC0+b2xkX25hbWUpOworCQlzd2FwKHAtPm5ld19tb2RlLCBwLT5vbGRfbW9kZSk7CisJCXN3YXAocC0+aXNfbmV3LCBwLT5pc19kZWxldGUpOworCQlzd2FwKHAtPmxpbmVzX2FkZGVkLCBwLT5saW5lc19kZWxldGVkKTsKKwkJc3dhcChwLT5vbGRfc2hhMV9wcmVmaXgsIHAtPm5ld19zaGExX3ByZWZpeCk7CisKKwkJZm9yICg7IGZyYWc7IGZyYWcgPSBmcmFnLT5uZXh0KSB7CisJCQlzd2FwKGZyYWctPm5ld3BvcywgZnJhZy0+b2xkcG9zKTsKKwkJCXN3YXAoZnJhZy0+bmV3bGluZXMsIGZyYWctPm9sZGxpbmVzKTsKKwkJfQorCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgcGx1c2VzW10gPQorIisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysiOworc3RhdGljIGNvbnN0IGNoYXIgbWludXNlc1tdPQorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iOworCitzdGF0aWMgdm9pZCBzaG93X3N0YXRzKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJc3RydWN0IHN0cmJ1ZiBxbmFtZSA9IFNUUkJVRl9JTklUOworCWNoYXIgKmNwID0gcGF0Y2gtPm5ld19uYW1lID8gcGF0Y2gtPm5ld19uYW1lIDogcGF0Y2gtPm9sZF9uYW1lOworCWludCBtYXgsIGFkZCwgZGVsOworCisJcXVvdGVfY19zdHlsZShjcCwgJnFuYW1lLCBOVUxMLCAwKTsKKworCS8qCisJICogInNjYWxlIiB0aGUgZmlsZW5hbWUKKwkgKi8KKwltYXggPSBtYXhfbGVuOworCWlmIChtYXggPiA1MCkKKwkJbWF4ID0gNTA7CisKKwlpZiAocW5hbWUubGVuID4gbWF4KSB7CisJCWNwID0gc3RyY2hyKHFuYW1lLmJ1ZiArIHFuYW1lLmxlbiArIDMgLSBtYXgsICcvJyk7CisJCWlmICghY3ApCisJCQljcCA9IHFuYW1lLmJ1ZiArIHFuYW1lLmxlbiArIDMgLSBtYXg7CisJCXN0cmJ1Zl9zcGxpY2UoJnFuYW1lLCAwLCBjcCAtIHFuYW1lLmJ1ZiwgIi4uLiIsIDMpOworCX0KKworCWlmIChwYXRjaC0+aXNfYmluYXJ5KSB7CisJCXByaW50ZigiICUtKnMgfCAgQmluXG4iLCBtYXgsIHFuYW1lLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZxbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoIiAlLSpzIHwiLCBtYXgsIHFuYW1lLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnFuYW1lKTsKKworCS8qCisJICogc2NhbGUgdGhlIGFkZC9kZWxldGUKKwkgKi8KKwltYXggPSBtYXggKyBtYXhfY2hhbmdlID4gNzAgPyA3MCAtIG1heCA6IG1heF9jaGFuZ2U7CisJYWRkID0gcGF0Y2gtPmxpbmVzX2FkZGVkOworCWRlbCA9IHBhdGNoLT5saW5lc19kZWxldGVkOworCisJaWYgKG1heF9jaGFuZ2UgPiAwKSB7CisJCWludCB0b3RhbCA9ICgoYWRkICsgZGVsKSAqIG1heCArIG1heF9jaGFuZ2UgLyAyKSAvIG1heF9jaGFuZ2U7CisJCWFkZCA9IChhZGQgKiBtYXggKyBtYXhfY2hhbmdlIC8gMikgLyBtYXhfY2hhbmdlOworCQlkZWwgPSB0b3RhbCAtIGFkZDsKKwl9CisJcHJpbnRmKCIlNWQgJS4qcyUuKnNcbiIsIHBhdGNoLT5saW5lc19hZGRlZCArIHBhdGNoLT5saW5lc19kZWxldGVkLAorCQlhZGQsIHBsdXNlcywgZGVsLCBtaW51c2VzKTsKK30KKworc3RhdGljIGludCByZWFkX29sZF9kYXRhKHN0cnVjdCBzdGF0ICpzdCwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXN3aXRjaCAoc3QtPnN0X21vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZMTks6CisJCWlmIChzdHJidWZfcmVhZGxpbmsoYnVmLCBwYXRoLCBzdC0+c3Rfc2l6ZSkgPCAwKQorCQkJcmV0dXJuIGVycm9yKF8oInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiKSwgcGF0aCk7CisJCXJldHVybiAwOworCWNhc2UgU19JRlJFRzoKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoYnVmLCBwYXRoLCBzdC0+c3Rfc2l6ZSkgIT0gc3QtPnN0X3NpemUpCisJCQlyZXR1cm4gZXJyb3IoXygidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIpLCBwYXRoKTsKKwkJY29udmVydF90b19naXQocGF0aCwgYnVmLT5idWYsIGJ1Zi0+bGVuLCBidWYsIDApOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorfQorCisvKgorICogVXBkYXRlIHRoZSBwcmVpbWFnZSwgYW5kIHRoZSBjb21tb24gbGluZXMgaW4gcG9zdGltYWdlLAorICogZnJvbSBidWZmZXIgYnVmIG9mIGxlbmd0aCBsZW4uIElmIHBvc3RsZW4gaXMgMCB0aGUgcG9zdGltYWdlCisgKiBpcyB1cGRhdGVkIGluIHBsYWNlLCBvdGhlcndpc2UgaXQncyB1cGRhdGVkIG9uIGEgbmV3IGJ1ZmZlcgorICogb2YgbGVuZ3RoIHBvc3RsZW4KKyAqLworCitzdGF0aWMgdm9pZCB1cGRhdGVfcHJlX3Bvc3RfaW1hZ2VzKHN0cnVjdCBpbWFnZSAqcHJlaW1hZ2UsCisJCQkJICAgc3RydWN0IGltYWdlICpwb3N0aW1hZ2UsCisJCQkJICAgY2hhciAqYnVmLAorCQkJCSAgIHNpemVfdCBsZW4sIHNpemVfdCBwb3N0bGVuKQoreworCWludCBpLCBjdHgsIHJlZHVjZWQ7CisJY2hhciAqbmV3LCAqb2xkLCAqZml4ZWQ7CisJc3RydWN0IGltYWdlIGZpeGVkX3ByZWltYWdlOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIHByZWltYWdlIHdpdGggd2hpdGVzcGFjZSBmaXhlcy4gIE5vdGUgdGhhdCB3ZQorCSAqIGFyZSBub3QgbG9zaW5nIHByZWltYWdlLT5idWYgLS0gYXBwbHlfb25lX2ZyYWdtZW50KCkgd2lsbAorCSAqIGZyZWUgIm9sZGxpbmVzIi4KKwkgKi8KKwlwcmVwYXJlX2ltYWdlKCZmaXhlZF9wcmVpbWFnZSwgYnVmLCBsZW4sIDEpOworCWFzc2VydChwb3N0bGVuCisJICAgICAgID8gZml4ZWRfcHJlaW1hZ2UubnIgPT0gcHJlaW1hZ2UtPm5yCisJICAgICAgIDogZml4ZWRfcHJlaW1hZ2UubnIgPD0gcHJlaW1hZ2UtPm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgZml4ZWRfcHJlaW1hZ2UubnI7IGkrKykKKwkJZml4ZWRfcHJlaW1hZ2UubGluZVtpXS5mbGFnID0gcHJlaW1hZ2UtPmxpbmVbaV0uZmxhZzsKKwlmcmVlKHByZWltYWdlLT5saW5lX2FsbG9jYXRlZCk7CisJKnByZWltYWdlID0gZml4ZWRfcHJlaW1hZ2U7CisKKwkvKgorCSAqIEFkanVzdCB0aGUgY29tbW9uIGNvbnRleHQgbGluZXMgaW4gcG9zdGltYWdlLiBUaGlzIGNhbiBiZQorCSAqIGRvbmUgaW4tcGxhY2Ugd2hlbiB3ZSBhcmUgc2hyaW5raW5nIGl0IHdpdGggd2hpdGVzcGFjZQorCSAqIGZpeGluZywgYnV0IG5lZWRzIGEgbmV3IGJ1ZmZlciB3aGVuIGlnbm9yaW5nIHdoaXRlc3BhY2Ugb3IKKwkgKiBleHBhbmRpbmcgbGVhZGluZyB0YWJzIHRvIHNwYWNlcy4KKwkgKgorCSAqIFdlIHRydXN0IHRoZSBjYWxsZXIgdG8gdGVsbCB1cyBpZiB0aGUgdXBkYXRlIGNhbiBiZSBkb25lCisJICogaW4gcGxhY2UgKHBvc3RsZW49PTApIG9yIG5vdC4KKwkgKi8KKwlvbGQgPSBwb3N0aW1hZ2UtPmJ1ZjsKKwlpZiAocG9zdGxlbikKKwkJbmV3ID0gcG9zdGltYWdlLT5idWYgPSB4bWFsbG9jKHBvc3RsZW4pOworCWVsc2UKKwkJbmV3ID0gb2xkOworCWZpeGVkID0gcHJlaW1hZ2UtPmJ1ZjsKKworCWZvciAoaSA9IHJlZHVjZWQgPSBjdHggPSAwOyBpIDwgcG9zdGltYWdlLT5ucjsgaSsrKSB7CisJCXNpemVfdCBsZW4gPSBwb3N0aW1hZ2UtPmxpbmVbaV0ubGVuOworCQlpZiAoIShwb3N0aW1hZ2UtPmxpbmVbaV0uZmxhZyAmIExJTkVfQ09NTU9OKSkgeworCQkJLyogYW4gYWRkZWQgbGluZSAtLSBubyBjb3VudGVycGFydHMgaW4gcHJlaW1hZ2UgKi8KKwkJCW1lbW1vdmUobmV3LCBvbGQsIGxlbik7CisJCQlvbGQgKz0gbGVuOworCQkJbmV3ICs9IGxlbjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogYSBjb21tb24gY29udGV4dCAtLSBza2lwIGl0IGluIHRoZSBvcmlnaW5hbCBwb3N0aW1hZ2UgKi8KKwkJb2xkICs9IGxlbjsKKworCQkvKiBhbmQgZmluZCB0aGUgY29ycmVzcG9uZGluZyBvbmUgaW4gdGhlIGZpeGVkIHByZWltYWdlICovCisJCXdoaWxlIChjdHggPCBwcmVpbWFnZS0+bnIgJiYKKwkJICAgICAgICEocHJlaW1hZ2UtPmxpbmVbY3R4XS5mbGFnICYgTElORV9DT01NT04pKSB7CisJCQlmaXhlZCArPSBwcmVpbWFnZS0+bGluZVtjdHhdLmxlbjsKKwkJCWN0eCsrOworCQl9CisKKwkJLyoKKwkJICogcHJlaW1hZ2UgaXMgZXhwZWN0ZWQgdG8gcnVuIG91dCwgaWYgdGhlIGNhbGxlcgorCQkgKiBmaXhlZCBhZGRpdGlvbiBvZiB0cmFpbGluZyBibGFuayBsaW5lcy4KKwkJICovCisJCWlmIChwcmVpbWFnZS0+bnIgPD0gY3R4KSB7CisJCQlyZWR1Y2VkKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGFuZCBjb3B5IGl0IGluLCB3aGlsZSBmaXhpbmcgdGhlIGxpbmUgbGVuZ3RoICovCisJCWxlbiA9IHByZWltYWdlLT5saW5lW2N0eF0ubGVuOworCQltZW1jcHkobmV3LCBmaXhlZCwgbGVuKTsKKwkJbmV3ICs9IGxlbjsKKwkJZml4ZWQgKz0gbGVuOworCQlwb3N0aW1hZ2UtPmxpbmVbaV0ubGVuID0gbGVuOworCQljdHgrKzsKKwl9CisKKwlpZiAocG9zdGxlbgorCSAgICA/IHBvc3RsZW4gPCBuZXcgLSBwb3N0aW1hZ2UtPmJ1ZgorCSAgICA6IHBvc3RpbWFnZS0+bGVuIDwgbmV3IC0gcG9zdGltYWdlLT5idWYpCisJCWRpZSgiQlVHOiBjYWxsZXIgbWlzY291bnRlZCBwb3N0bGVuOiBhc2tlZCAlZCwgb3JpZyA9ICVkLCB1c2VkID0gJWQiLAorCQkgICAgKGludClwb3N0bGVuLCAoaW50KSBwb3N0aW1hZ2UtPmxlbiwgKGludCkobmV3IC0gcG9zdGltYWdlLT5idWYpKTsKKworCS8qIEZpeCB0aGUgbGVuZ3RoIG9mIHRoZSB3aG9sZSB0aGluZyAqLworCXBvc3RpbWFnZS0+bGVuID0gbmV3IC0gcG9zdGltYWdlLT5idWY7CisJcG9zdGltYWdlLT5uciAtPSByZWR1Y2VkOworfQorCitzdGF0aWMgaW50IG1hdGNoX2ZyYWdtZW50KHN0cnVjdCBpbWFnZSAqaW1nLAorCQkJICBzdHJ1Y3QgaW1hZ2UgKnByZWltYWdlLAorCQkJICBzdHJ1Y3QgaW1hZ2UgKnBvc3RpbWFnZSwKKwkJCSAgdW5zaWduZWQgbG9uZyB0cnksCisJCQkgIGludCB0cnlfbG5vLAorCQkJICB1bnNpZ25lZCB3c19ydWxlLAorCQkJICBpbnQgbWF0Y2hfYmVnaW5uaW5nLCBpbnQgbWF0Y2hfZW5kKQoreworCWludCBpOworCWNoYXIgKmZpeGVkX2J1ZiwgKmJ1ZiwgKm9yaWcsICp0YXJnZXQ7CisJc3RydWN0IHN0cmJ1ZiBmaXhlZDsKKwlzaXplX3QgZml4ZWRfbGVuLCBwb3N0bGVuOworCWludCBwcmVpbWFnZV9saW1pdDsKKworCWlmIChwcmVpbWFnZS0+bnIgKyB0cnlfbG5vIDw9IGltZy0+bnIpIHsKKwkJLyoKKwkJICogVGhlIGh1bmsgZmFsbHMgd2l0aGluIHRoZSBib3VuZGFyaWVzIG9mIGltZy4KKwkJICovCisJCXByZWltYWdlX2xpbWl0ID0gcHJlaW1hZ2UtPm5yOworCQlpZiAobWF0Y2hfZW5kICYmIChwcmVpbWFnZS0+bnIgKyB0cnlfbG5vICE9IGltZy0+bnIpKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICh3c19lcnJvcl9hY3Rpb24gPT0gY29ycmVjdF93c19lcnJvciAmJgorCQkgICAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikpIHsKKwkJLyoKKwkJICogVGhpcyBodW5rIGV4dGVuZHMgYmV5b25kIHRoZSBlbmQgb2YgaW1nLCBhbmQgd2UgYXJlCisJCSAqIHJlbW92aW5nIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuICBUaGlzCisJCSAqIG1hbnkgbGluZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcmVpbWFnZSBtdXN0CisJCSAqIG1hdGNoIHdpdGggaW1nLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcHJlaW1hZ2UKKwkJICogbXVzdCBiZSBibGFuay4KKwkJICovCisJCXByZWltYWdlX2xpbWl0ID0gaW1nLT5uciAtIHRyeV9sbm87CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGh1bmsgZXh0ZW5kcyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgaW1nIGFuZAorCQkgKiB3ZSBhcmUgbm90IHJlbW92aW5nIGJsYW5rcyBhdCB0aGUgZW5kLCBzbyB3ZQorCQkgKiBzaG91bGQgcmVqZWN0IHRoZSBodW5rIGF0IHRoaXMgcG9zaXRpb24uCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobWF0Y2hfYmVnaW5uaW5nICYmIHRyeV9sbm8pCisJCXJldHVybiAwOworCisJLyogUXVpY2sgaGFzaCBjaGVjayAqLworCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZV9saW1pdDsgaSsrKQorCQlpZiAoKGltZy0+bGluZVt0cnlfbG5vICsgaV0uZmxhZyAmIExJTkVfUEFUQ0hFRCkgfHwKKwkJICAgIChwcmVpbWFnZS0+bGluZVtpXS5oYXNoICE9IGltZy0+bGluZVt0cnlfbG5vICsgaV0uaGFzaCkpCisJCQlyZXR1cm4gMDsKKworCWlmIChwcmVpbWFnZV9saW1pdCA9PSBwcmVpbWFnZS0+bnIpIHsKKwkJLyoKKwkJICogRG8gd2UgaGF2ZSBhbiBleGFjdCBtYXRjaD8gIElmIHdlIHdlcmUgdG9sZCB0byBtYXRjaAorCQkgKiBhdCB0aGUgZW5kLCBzaXplIG11c3QgYmUgZXhhY3RseSBhdCB0cnkrZnJhZ3NpemUsCisJCSAqIG90aGVyd2lzZSB0cnkrZnJhZ3NpemUgbXVzdCBiZSBzdGlsbCB3aXRoaW4gdGhlIHByZWltYWdlLAorCQkgKiBhbmQgZWl0aGVyIGNhc2UsIHRoZSBvbGQgcGllY2Ugc2hvdWxkIG1hdGNoIHRoZSBwcmVpbWFnZQorCQkgKiBleGFjdGx5LgorCQkgKi8KKwkJaWYgKChtYXRjaF9lbmQKKwkJICAgICA/ICh0cnkgKyBwcmVpbWFnZS0+bGVuID09IGltZy0+bGVuKQorCQkgICAgIDogKHRyeSArIHByZWltYWdlLT5sZW4gPD0gaW1nLT5sZW4pKSAmJgorCQkgICAgIW1lbWNtcChpbWctPmJ1ZiArIHRyeSwgcHJlaW1hZ2UtPmJ1ZiwgcHJlaW1hZ2UtPmxlbikpCisJCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGUgcHJlaW1hZ2UgZXh0ZW5kcyBiZXlvbmQgdGhlIGVuZCBvZiBpbWcsIHNvCisJCSAqIHRoZXJlIGNhbm5vdCBiZSBhbiBleGFjdCBtYXRjaC4KKwkJICoKKwkJICogVGhlcmUgbXVzdCBiZSBvbmUgbm9uLWJsYW5rIGNvbnRleHQgbGluZSB0aGF0IG1hdGNoCisJCSAqIGEgbGluZSBiZWZvcmUgdGhlIGVuZCBvZiBpbWcuCisJCSAqLworCQljaGFyICpidWZfZW5kOworCisJCWJ1ZiA9IHByZWltYWdlLT5idWY7CisJCWJ1Zl9lbmQgPSBidWY7CisJCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZV9saW1pdDsgaSsrKQorCQkJYnVmX2VuZCArPSBwcmVpbWFnZS0+bGluZVtpXS5sZW47CisKKwkJZm9yICggOyBidWYgPCBidWZfZW5kOyBidWYrKykKKwkJCWlmICghaXNzcGFjZSgqYnVmKSkKKwkJCQlicmVhazsKKwkJaWYgKGJ1ZiA9PSBidWZfZW5kKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBObyBleGFjdCBtYXRjaC4gSWYgd2UgYXJlIGlnbm9yaW5nIHdoaXRlc3BhY2UsIHJ1biBhIGxpbmUtYnktbGluZQorCSAqIGZ1enp5IG1hdGNoaW5nLiBXZSBjb2xsZWN0IGFsbCB0aGUgbGluZSBsZW5ndGggaW5mb3JtYXRpb24gYmVjYXVzZQorCSAqIHdlIG5lZWQgaXQgdG8gYWRqdXN0IHdoaXRlc3BhY2UgaWYgd2UgbWF0Y2guCisJICovCisJaWYgKHdzX2lnbm9yZV9hY3Rpb24gPT0gaWdub3JlX3dzX2NoYW5nZSkgeworCQlzaXplX3QgaW1nb2ZmID0gMDsKKwkJc2l6ZV90IHByZW9mZiA9IDA7CisJCXNpemVfdCBwb3N0bGVuID0gcG9zdGltYWdlLT5sZW47CisJCXNpemVfdCBleHRyYV9jaGFyczsKKwkJY2hhciAqcHJlaW1hZ2VfZW9mOworCQljaGFyICpwcmVpbWFnZV9lbmQ7CisJCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZV9saW1pdDsgaSsrKSB7CisJCQlzaXplX3QgcHJlbGVuID0gcHJlaW1hZ2UtPmxpbmVbaV0ubGVuOworCQkJc2l6ZV90IGltZ2xlbiA9IGltZy0+bGluZVt0cnlfbG5vK2ldLmxlbjsKKworCQkJaWYgKCFmdXp6eV9tYXRjaGxpbmVzKGltZy0+YnVmICsgdHJ5ICsgaW1nb2ZmLCBpbWdsZW4sCisJCQkJCSAgICAgIHByZWltYWdlLT5idWYgKyBwcmVvZmYsIHByZWxlbikpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAocHJlaW1hZ2UtPmxpbmVbaV0uZmxhZyAmIExJTkVfQ09NTU9OKQorCQkJCXBvc3RsZW4gKz0gaW1nbGVuIC0gcHJlbGVuOworCQkJaW1nb2ZmICs9IGltZ2xlbjsKKwkJCXByZW9mZiArPSBwcmVsZW47CisJCX0KKworCQkvKgorCQkgKiBPaywgdGhlIHByZWltYWdlIG1hdGNoZXMgd2l0aCB3aGl0ZXNwYWNlIGZ1enouCisJCSAqCisJCSAqIGltZ29mZiBub3cgaG9sZHMgdGhlIHRydWUgbGVuZ3RoIG9mIHRoZSB0YXJnZXQgdGhhdAorCQkgKiBtYXRjaGVzIHRoZSBwcmVpbWFnZSBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkJICoKKwkJICogQ291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwcmVpbWFnZSB0aGF0IGZhbGwKKwkJICogYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIG1ha2Ugc3VyZSB0aGF0IGFsbCBvZiB0aGVtCisJCSAqIGFyZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuIChUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZgorCQkgKiB3ZSBhcmUgcmVtb3ZpbmcgYmxhbmsgbGluZXMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS4pCisJCSAqLworCQlidWYgPSBwcmVpbWFnZV9lb2YgPSBwcmVpbWFnZS0+YnVmICsgcHJlb2ZmOworCQlmb3IgKCA7IGkgPCBwcmVpbWFnZS0+bnI7IGkrKykKKwkJCXByZW9mZiArPSBwcmVpbWFnZS0+bGluZVtpXS5sZW47CisJCXByZWltYWdlX2VuZCA9IHByZWltYWdlLT5idWYgKyBwcmVvZmY7CisJCWZvciAoIDsgYnVmIDwgcHJlaW1hZ2VfZW5kOyBidWYrKykKKwkJCWlmICghaXNzcGFjZSgqYnVmKSkKKwkJCQlyZXR1cm4gMDsKKworCQkvKgorCQkgKiBVcGRhdGUgdGhlIHByZWltYWdlIGFuZCB0aGUgY29tbW9uIHBvc3RpbWFnZSBjb250ZXh0CisJCSAqIGxpbmVzIHRvIHVzZSB0aGUgc2FtZSB3aGl0ZXNwYWNlIGFzIHRoZSB0YXJnZXQuCisJCSAqIElmIHdoaXRlc3BhY2UgaXMgbWlzc2luZyBpbiB0aGUgdGFyZ2V0IChpLmUuCisJCSAqIGlmIHRoZSBwcmVpbWFnZSBleHRlbmRzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBmaWxlKSwKKwkJICogdXNlIHRoZSB3aGl0ZXNwYWNlIGZyb20gdGhlIHByZWltYWdlLgorCQkgKi8KKwkJZXh0cmFfY2hhcnMgPSBwcmVpbWFnZV9lbmQgLSBwcmVpbWFnZV9lb2Y7CisJCXN0cmJ1Zl9pbml0KCZmaXhlZCwgaW1nb2ZmICsgZXh0cmFfY2hhcnMpOworCQlzdHJidWZfYWRkKCZmaXhlZCwgaW1nLT5idWYgKyB0cnksIGltZ29mZik7CisJCXN0cmJ1Zl9hZGQoJmZpeGVkLCBwcmVpbWFnZV9lb2YsIGV4dHJhX2NoYXJzKTsKKwkJZml4ZWRfYnVmID0gc3RyYnVmX2RldGFjaCgmZml4ZWQsICZmaXhlZF9sZW4pOworCQl1cGRhdGVfcHJlX3Bvc3RfaW1hZ2VzKHByZWltYWdlLCBwb3N0aW1hZ2UsCisJCQkJZml4ZWRfYnVmLCBmaXhlZF9sZW4sIHBvc3RsZW4pOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAod3NfZXJyb3JfYWN0aW9uICE9IGNvcnJlY3Rfd3NfZXJyb3IpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUaGUgaHVuayBkb2VzIG5vdCBhcHBseSBieXRlLWJ5LWJ5dGUsIGJ1dCB0aGUgaGFzaCBzYXlzCisJICogaXQgbWlnaHQgd2l0aCB3aGl0ZXNwYWNlIGZ1enouIFdlIHdlcmVuJ3QgYXNrZWQgdG8KKwkgKiBpZ25vcmUgd2hpdGVzcGFjZSwgd2Ugd2VyZSBhc2tlZCB0byBjb3JyZWN0IHdoaXRlc3BhY2UKKwkgKiBlcnJvcnMsIHNvIGxldCdzIHRyeSBtYXRjaGluZyBhZnRlciB3aGl0ZXNwYWNlIGNvcnJlY3Rpb24uCisJICoKKwkgKiBXaGlsZSBjaGVja2luZyB0aGUgcHJlaW1hZ2UgYWdhaW5zdCB0aGUgdGFyZ2V0LCB3aGl0ZXNwYWNlCisJICogZXJyb3JzIGluIGJvdGggZml4ZWQsIHdlIGNvdW50IGhvdyBsYXJnZSB0aGUgY29ycmVzcG9uZGluZworCSAqIHBvc3RpbWFnZSBuZWVkcyB0byBiZS4gIFRoZSBwb3N0aW1hZ2UgcHJlcGFyZWQgYnkKKwkgKiBhcHBseV9vbmVfZnJhZ21lbnQoKSBoYXMgd2hpdGVzcGFjZSBlcnJvcnMgZml4ZWQgb24gYWRkZWQKKwkgKiBsaW5lcyBhbHJlYWR5LCBidXQgdGhlIGNvbW1vbiBsaW5lcyB3ZXJlIHByb3BhZ2F0ZWQgYXMtaXMsCisJICogd2hpY2ggbWF5IGJlY29tZSBsb25nZXIgd2hlbiB0aGVpciB3aGl0ZXNwYWNlIGVycm9ycyBhcmUKKwkgKiBmaXhlZC4KKwkgKi8KKworCS8qIEZpcnN0IGNvdW50IGFkZGVkIGxpbmVzIGluIHBvc3RpbWFnZSAqLworCXBvc3RsZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBwb3N0aW1hZ2UtPm5yOyBpKyspIHsKKwkJaWYgKCEocG9zdGltYWdlLT5saW5lW2ldLmZsYWcgJiBMSU5FX0NPTU1PTikpCisJCQlwb3N0bGVuICs9IHBvc3RpbWFnZS0+bGluZVtpXS5sZW47CisJfQorCisJLyoKKwkgKiBUaGUgcHJlaW1hZ2UgbWF5IGV4dGVuZCBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSwKKwkgKiBidXQgaW4gdGhpcyBsb29wIHdlIHdpbGwgb25seSBoYW5kbGUgdGhlIHBhcnQgb2YgdGhlCisJICogcHJlaW1hZ2UgdGhhdCBmYWxscyB3aXRoaW4gdGhlIGZpbGUuCisJICovCisJc3RyYnVmX2luaXQoJmZpeGVkLCBwcmVpbWFnZS0+bGVuICsgMSk7CisJb3JpZyA9IHByZWltYWdlLT5idWY7CisJdGFyZ2V0ID0gaW1nLT5idWYgKyB0cnk7CisJZm9yIChpID0gMDsgaSA8IHByZWltYWdlX2xpbWl0OyBpKyspIHsKKwkJc2l6ZV90IG9sZGxlbiA9IHByZWltYWdlLT5saW5lW2ldLmxlbjsKKwkJc2l6ZV90IHRndGxlbiA9IGltZy0+bGluZVt0cnlfbG5vICsgaV0ubGVuOworCQlzaXplX3QgZml4c3RhcnQgPSBmaXhlZC5sZW47CisJCXN0cnVjdCBzdHJidWYgdGd0Zml4OworCQlpbnQgbWF0Y2g7CisKKwkJLyogVHJ5IGZpeGluZyB0aGUgbGluZSBpbiB0aGUgcHJlaW1hZ2UgKi8KKwkJd3NfZml4X2NvcHkoJmZpeGVkLCBvcmlnLCBvbGRsZW4sIHdzX3J1bGUsIE5VTEwpOworCisJCS8qIFRyeSBmaXhpbmcgdGhlIGxpbmUgaW4gdGhlIHRhcmdldCAqLworCQlzdHJidWZfaW5pdCgmdGd0Zml4LCB0Z3RsZW4pOworCQl3c19maXhfY29weSgmdGd0Zml4LCB0YXJnZXQsIHRndGxlbiwgd3NfcnVsZSwgTlVMTCk7CisKKwkJLyoKKwkJICogSWYgdGhleSBtYXRjaCwgZWl0aGVyIHRoZSBwcmVpbWFnZSB3YXMgYmFzZWQgb24KKwkJICogYSB2ZXJzaW9uIGJlZm9yZSBvdXIgdHJlZSBmaXhlZCB3aGl0ZXNwYWNlIGJyZWFrYWdlLAorCQkgKiBvciB3ZSBhcmUgbGFja2luZyBhIHdoaXRlc3BhY2UtZml4IHBhdGNoIHRoZSB0cmVlCisJCSAqIHRoZSBwcmVpbWFnZSB3YXMgYmFzZWQgb24gYWxyZWFkeSBoYWQgKGkuZS4gdGFyZ2V0CisJCSAqIGhhcyB3aGl0ZXNwYWNlIGJyZWFrYWdlLCB0aGUgcHJlaW1hZ2UgZG9lc24ndCkuCisJCSAqIEluIGVpdGhlciBjYXNlLCB3ZSBhcmUgZml4aW5nIHRoZSB3aGl0ZXNwYWNlIGJyZWFrYWdlcworCQkgKiBzbyB3ZSBtaWdodCBhcyB3ZWxsIHRha2UgdGhlIGZpeCB0b2dldGhlciB3aXRoIHRoZWlyCisJCSAqIHJlYWwgY2hhbmdlLgorCQkgKi8KKwkJbWF0Y2ggPSAodGd0Zml4LmxlbiA9PSBmaXhlZC5sZW4gLSBmaXhzdGFydCAmJgorCQkJICFtZW1jbXAodGd0Zml4LmJ1ZiwgZml4ZWQuYnVmICsgZml4c3RhcnQsCisJCQkJCSAgICAgZml4ZWQubGVuIC0gZml4c3RhcnQpKTsKKworCQkvKiBBZGQgdGhlIGxlbmd0aCBpZiB0aGlzIGlzIGNvbW1vbiB3aXRoIHRoZSBwb3N0aW1hZ2UgKi8KKwkJaWYgKHByZWltYWdlLT5saW5lW2ldLmZsYWcgJiBMSU5FX0NPTU1PTikKKwkJCXBvc3RsZW4gKz0gdGd0Zml4LmxlbjsKKworCQlzdHJidWZfcmVsZWFzZSgmdGd0Zml4KTsKKwkJaWYgKCFtYXRjaCkKKwkJCWdvdG8gdW5tYXRjaF9leGl0OworCisJCW9yaWcgKz0gb2xkbGVuOworCQl0YXJnZXQgKz0gdGd0bGVuOworCX0KKworCisJLyoKKwkgKiBOb3cgaGFuZGxlIHRoZSBsaW5lcyBpbiB0aGUgcHJlaW1hZ2UgdGhhdCBmYWxscyBiZXlvbmQgdGhlCisJICogZW5kIG9mIHRoZSBmaWxlIChpZiBhbnkpLiBUaGV5IHdpbGwgb25seSBtYXRjaCBpZiB0aGV5IGFyZQorCSAqIGVtcHR5IG9yIG9ubHkgY29udGFpbiB3aGl0ZXNwYWNlIChpZiBXU19CTEFOS19BVF9FT0wgaXMKKwkgKiBmYWxzZSkuCisJICovCisJZm9yICggOyBpIDwgcHJlaW1hZ2UtPm5yOyBpKyspIHsKKwkJc2l6ZV90IGZpeHN0YXJ0ID0gZml4ZWQubGVuOyAvKiBzdGFydCBvZiB0aGUgZml4ZWQgcHJlaW1hZ2UgKi8KKwkJc2l6ZV90IG9sZGxlbiA9IHByZWltYWdlLT5saW5lW2ldLmxlbjsKKwkJaW50IGo7CisKKwkJLyogVHJ5IGZpeGluZyB0aGUgbGluZSBpbiB0aGUgcHJlaW1hZ2UgKi8KKwkJd3NfZml4X2NvcHkoJmZpeGVkLCBvcmlnLCBvbGRsZW4sIHdzX3J1bGUsIE5VTEwpOworCisJCWZvciAoaiA9IGZpeHN0YXJ0OyBqIDwgZml4ZWQubGVuOyBqKyspCisJCQlpZiAoIWlzc3BhY2UoZml4ZWQuYnVmW2pdKSkKKwkJCQlnb3RvIHVubWF0Y2hfZXhpdDsKKworCQlvcmlnICs9IG9sZGxlbjsKKwl9CisKKwkvKgorCSAqIFllcywgdGhlIHByZWltYWdlIGlzIGJhc2VkIG9uIGFuIG9sZGVyIHZlcnNpb24gdGhhdCBzdGlsbAorCSAqIGhhcyB3aGl0ZXNwYWNlIGJyZWFrYWdlcyB1bmZpeGVkLCBhbmQgZml4aW5nIHRoZW0gbWFrZXMgdGhlCisJICogaHVuayBtYXRjaC4gIFVwZGF0ZSB0aGUgY29udGV4dCBsaW5lcyBpbiB0aGUgcG9zdGltYWdlLgorCSAqLworCWZpeGVkX2J1ZiA9IHN0cmJ1Zl9kZXRhY2goJmZpeGVkLCAmZml4ZWRfbGVuKTsKKwlpZiAocG9zdGxlbiA8IHBvc3RpbWFnZS0+bGVuKQorCQlwb3N0bGVuID0gMDsKKwl1cGRhdGVfcHJlX3Bvc3RfaW1hZ2VzKHByZWltYWdlLCBwb3N0aW1hZ2UsCisJCQkgICAgICAgZml4ZWRfYnVmLCBmaXhlZF9sZW4sIHBvc3RsZW4pOworCXJldHVybiAxOworCisgdW5tYXRjaF9leGl0OgorCXN0cmJ1Zl9yZWxlYXNlKCZmaXhlZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9wb3Moc3RydWN0IGltYWdlICppbWcsCisJCSAgICBzdHJ1Y3QgaW1hZ2UgKnByZWltYWdlLAorCQkgICAgc3RydWN0IGltYWdlICpwb3N0aW1hZ2UsCisJCSAgICBpbnQgbGluZSwKKwkJICAgIHVuc2lnbmVkIHdzX3J1bGUsCisJCSAgICBpbnQgbWF0Y2hfYmVnaW5uaW5nLCBpbnQgbWF0Y2hfZW5kKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgYmFja3dhcmRzLCBmb3J3YXJkcywgdHJ5OworCWludCBiYWNrd2FyZHNfbG5vLCBmb3J3YXJkc19sbm8sIHRyeV9sbm87CisKKwkvKgorCSAqIElmIG1hdGNoX2JlZ2lubmluZyBvciBtYXRjaF9lbmQgaXMgc3BlY2lmaWVkLCB0aGVyZSBpcyBubworCSAqIHBvaW50IHN0YXJ0aW5nIGZyb20gYSB3cm9uZyBsaW5lIHRoYXQgd2lsbCBuZXZlciBtYXRjaCBhbmQKKwkgKiB3YW5kZXIgYXJvdW5kIGFuZCB3YWl0IGZvciBhIG1hdGNoIGF0IHRoZSBzcGVjaWZpZWQgZW5kLgorCSAqLworCWlmIChtYXRjaF9iZWdpbm5pbmcpCisJCWxpbmUgPSAwOworCWVsc2UgaWYgKG1hdGNoX2VuZCkKKwkJbGluZSA9IGltZy0+bnIgLSBwcmVpbWFnZS0+bnI7CisKKwkvKgorCSAqIEJlY2F1c2UgdGhlIGNvbXBhcmlzb24gaXMgdW5zaWduZWQsIHRoZSBmb2xsb3dpbmcgdGVzdAorCSAqIHdpbGwgYWxzbyB0YWtlIGNhcmUgb2YgYSBuZWdhdGl2ZSBsaW5lIG51bWJlciB0aGF0IGNhbgorCSAqIHJlc3VsdCB3aGVuIG1hdGNoX2VuZCBhbmQgcHJlaW1hZ2UgaXMgbGFyZ2VyIHRoYW4gdGhlIHRhcmdldC4KKwkgKi8KKwlpZiAoKHNpemVfdCkgbGluZSA+IGltZy0+bnIpCisJCWxpbmUgPSBpbWctPm5yOworCisJdHJ5ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGluZTsgaSsrKQorCQl0cnkgKz0gaW1nLT5saW5lW2ldLmxlbjsKKworCS8qCisJICogVGhlcmUncyBwcm9iYWJseSBzb21lIHNtYXJ0IHdheSB0byBkbyB0aGlzLCBidXQgSSdsbCBsZWF2ZQorCSAqIHRoYXQgdG8gdGhlIHNtYXJ0IGFuZCBiZWF1dGlmdWwgcGVvcGxlLiBJJ20gc2ltcGxlIGFuZCBzdHVwaWQuCisJICovCisJYmFja3dhcmRzID0gdHJ5OworCWJhY2t3YXJkc19sbm8gPSBsaW5lOworCWZvcndhcmRzID0gdHJ5OworCWZvcndhcmRzX2xubyA9IGxpbmU7CisJdHJ5X2xubyA9IGxpbmU7CisKKwlmb3IgKGkgPSAwOyA7IGkrKykgeworCQlpZiAobWF0Y2hfZnJhZ21lbnQoaW1nLCBwcmVpbWFnZSwgcG9zdGltYWdlLAorCQkJCSAgIHRyeSwgdHJ5X2xubywgd3NfcnVsZSwKKwkJCQkgICBtYXRjaF9iZWdpbm5pbmcsIG1hdGNoX2VuZCkpCisJCQlyZXR1cm4gdHJ5X2xubzsKKworCWFnYWluOgorCQlpZiAoYmFja3dhcmRzX2xubyA9PSAwICYmIGZvcndhcmRzX2xubyA9PSBpbWctPm5yKQorCQkJYnJlYWs7CisKKwkJaWYgKGkgJiAxKSB7CisJCQlpZiAoYmFja3dhcmRzX2xubyA9PSAwKSB7CisJCQkJaSsrOworCQkJCWdvdG8gYWdhaW47CisJCQl9CisJCQliYWNrd2FyZHNfbG5vLS07CisJCQliYWNrd2FyZHMgLT0gaW1nLT5saW5lW2JhY2t3YXJkc19sbm9dLmxlbjsKKwkJCXRyeSA9IGJhY2t3YXJkczsKKwkJCXRyeV9sbm8gPSBiYWNrd2FyZHNfbG5vOworCQl9IGVsc2UgeworCQkJaWYgKGZvcndhcmRzX2xubyA9PSBpbWctPm5yKSB7CisJCQkJaSsrOworCQkJCWdvdG8gYWdhaW47CisJCQl9CisJCQlmb3J3YXJkcyArPSBpbWctPmxpbmVbZm9yd2FyZHNfbG5vXS5sZW47CisJCQlmb3J3YXJkc19sbm8rKzsKKwkJCXRyeSA9IGZvcndhcmRzOworCQkJdHJ5X2xubyA9IGZvcndhcmRzX2xubzsKKwkJfQorCisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2ZpcnN0X2xpbmUoc3RydWN0IGltYWdlICppbWcpCit7CisJaW1nLT5idWYgKz0gaW1nLT5saW5lWzBdLmxlbjsKKwlpbWctPmxlbiAtPSBpbWctPmxpbmVbMF0ubGVuOworCWltZy0+bGluZSsrOworCWltZy0+bnItLTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2xhc3RfbGluZShzdHJ1Y3QgaW1hZ2UgKmltZykKK3sKKwlpbWctPmxlbiAtPSBpbWctPmxpbmVbLS1pbWctPm5yXS5sZW47Cit9CisKKy8qCisgKiBUaGUgY2hhbmdlIGZyb20gInByZWltYWdlIiBhbmQgInBvc3RpbWFnZSIgaGFzIGJlZW4gZm91bmQgdG8KKyAqIGFwcGx5IGF0IGFwcGxpZWRfcG9zIChjb3VudHMgaW4gbGluZSBudW1iZXJzKSBpbiAiaW1nIi4KKyAqIFVwZGF0ZSAiaW1nIiB0byByZW1vdmUgInByZWltYWdlIiBhbmQgcmVwbGFjZSBpdCB3aXRoICJwb3N0aW1hZ2UiLgorICovCitzdGF0aWMgdm9pZCB1cGRhdGVfaW1hZ2Uoc3RydWN0IGltYWdlICppbWcsCisJCQkgaW50IGFwcGxpZWRfcG9zLAorCQkJIHN0cnVjdCBpbWFnZSAqcHJlaW1hZ2UsCisJCQkgc3RydWN0IGltYWdlICpwb3N0aW1hZ2UpCit7CisJLyoKKwkgKiByZW1vdmUgdGhlIGNvcHkgb2YgcHJlaW1hZ2UgYXQgb2Zmc2V0IGluIGltZworCSAqIGFuZCByZXBsYWNlIGl0IHdpdGggcG9zdGltYWdlCisJICovCisJaW50IGksIG5yOworCXNpemVfdCByZW1vdmVfY291bnQsIGluc2VydF9jb3VudCwgYXBwbGllZF9hdCA9IDA7CisJY2hhciAqcmVzdWx0OworCWludCBwcmVpbWFnZV9saW1pdDsKKworCS8qCisJICogSWYgd2UgYXJlIHJlbW92aW5nIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgb2YgaW1nLAorCSAqIHRoZSBwcmVpbWFnZSBtYXkgZXh0ZW5kIGJleW9uZCB0aGUgZW5kLgorCSAqIElmIHRoYXQgaXMgdGhlIGNhc2UsIHdlIG11c3QgYmUgY2FyZWZ1bCBvbmx5IHRvCisJICogcmVtb3ZlIHRoZSBwYXJ0IG9mIHRoZSBwcmVpbWFnZSB0aGF0IGZhbGxzIHdpdGhpbgorCSAqIHRoZSBib3VuZGFyaWVzIG9mIGltZy4gSW5pdGlhbGl6ZSBwcmVpbWFnZV9saW1pdAorCSAqIHRvIHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIHByZWltYWdlIHRoYXQgZmFsbHMKKwkgKiB3aXRoaW4gdGhlIGJvdW5kYXJpZXMuCisJICovCisJcHJlaW1hZ2VfbGltaXQgPSBwcmVpbWFnZS0+bnI7CisJaWYgKHByZWltYWdlX2xpbWl0ID4gaW1nLT5uciAtIGFwcGxpZWRfcG9zKQorCQlwcmVpbWFnZV9saW1pdCA9IGltZy0+bnIgLSBhcHBsaWVkX3BvczsKKworCWZvciAoaSA9IDA7IGkgPCBhcHBsaWVkX3BvczsgaSsrKQorCQlhcHBsaWVkX2F0ICs9IGltZy0+bGluZVtpXS5sZW47CisKKwlyZW1vdmVfY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBwcmVpbWFnZV9saW1pdDsgaSsrKQorCQlyZW1vdmVfY291bnQgKz0gaW1nLT5saW5lW2FwcGxpZWRfcG9zICsgaV0ubGVuOworCWluc2VydF9jb3VudCA9IHBvc3RpbWFnZS0+bGVuOworCisJLyogQWRqdXN0IHRoZSBjb250ZW50cyAqLworCXJlc3VsdCA9IHhtYWxsb2MoaW1nLT5sZW4gKyBpbnNlcnRfY291bnQgLSByZW1vdmVfY291bnQgKyAxKTsKKwltZW1jcHkocmVzdWx0LCBpbWctPmJ1ZiwgYXBwbGllZF9hdCk7CisJbWVtY3B5KHJlc3VsdCArIGFwcGxpZWRfYXQsIHBvc3RpbWFnZS0+YnVmLCBwb3N0aW1hZ2UtPmxlbik7CisJbWVtY3B5KHJlc3VsdCArIGFwcGxpZWRfYXQgKyBwb3N0aW1hZ2UtPmxlbiwKKwkgICAgICAgaW1nLT5idWYgKyAoYXBwbGllZF9hdCArIHJlbW92ZV9jb3VudCksCisJICAgICAgIGltZy0+bGVuIC0gKGFwcGxpZWRfYXQgKyByZW1vdmVfY291bnQpKTsKKwlmcmVlKGltZy0+YnVmKTsKKwlpbWctPmJ1ZiA9IHJlc3VsdDsKKwlpbWctPmxlbiArPSBpbnNlcnRfY291bnQgLSByZW1vdmVfY291bnQ7CisJcmVzdWx0W2ltZy0+bGVuXSA9ICdcMCc7CisKKwkvKiBBZGp1c3QgdGhlIGxpbmUgdGFibGUgKi8KKwluciA9IGltZy0+bnIgKyBwb3N0aW1hZ2UtPm5yIC0gcHJlaW1hZ2VfbGltaXQ7CisJaWYgKHByZWltYWdlX2xpbWl0IDwgcG9zdGltYWdlLT5ucikgeworCQkvKgorCQkgKiBOT1RFOiB0aGlzIGtub3dzIHRoYXQgd2UgbmV2ZXIgY2FsbCByZW1vdmVfZmlyc3RfbGluZSgpCisJCSAqIG9uIGFueXRoaW5nIG90aGVyIHRoYW4gcHJlL3Bvc3QgaW1hZ2UuCisJCSAqLworCQlSRUFMTE9DX0FSUkFZKGltZy0+bGluZSwgbnIpOworCQlpbWctPmxpbmVfYWxsb2NhdGVkID0gaW1nLT5saW5lOworCX0KKwlpZiAocHJlaW1hZ2VfbGltaXQgIT0gcG9zdGltYWdlLT5ucikKKwkJbWVtbW92ZShpbWctPmxpbmUgKyBhcHBsaWVkX3BvcyArIHBvc3RpbWFnZS0+bnIsCisJCQlpbWctPmxpbmUgKyBhcHBsaWVkX3BvcyArIHByZWltYWdlX2xpbWl0LAorCQkJKGltZy0+bnIgLSAoYXBwbGllZF9wb3MgKyBwcmVpbWFnZV9saW1pdCkpICoKKwkJCXNpemVvZigqaW1nLT5saW5lKSk7CisJbWVtY3B5KGltZy0+bGluZSArIGFwcGxpZWRfcG9zLAorCSAgICAgICBwb3N0aW1hZ2UtPmxpbmUsCisJICAgICAgIHBvc3RpbWFnZS0+bnIgKiBzaXplb2YoKmltZy0+bGluZSkpOworCWlmICghYWxsb3dfb3ZlcmxhcCkKKwkJZm9yIChpID0gMDsgaSA8IHBvc3RpbWFnZS0+bnI7IGkrKykKKwkJCWltZy0+bGluZVthcHBsaWVkX3BvcyArIGldLmZsYWcgfD0gTElORV9QQVRDSEVEOworCWltZy0+bnIgPSBucjsKK30KKworLyoKKyAqIFVzZSB0aGUgcGF0Y2gtaHVuayB0ZXh0IGluICJmcmFnIiB0byBwcmVwYXJlIHR3byBpbWFnZXMgKHByZWltYWdlIGFuZAorICogcG9zdGltYWdlKSBmb3IgdGhlIGh1bmsuICBGaW5kIGxpbmVzIHRoYXQgbWF0Y2ggInByZWltYWdlIiBpbiAiaW1nIiBhbmQKKyAqIHJlcGxhY2UgdGhlIHBhcnQgb2YgImltZyIgd2l0aCAicG9zdGltYWdlIiB0ZXh0LgorICovCitzdGF0aWMgaW50IGFwcGx5X29uZV9mcmFnbWVudChzdHJ1Y3QgaW1hZ2UgKmltZywgc3RydWN0IGZyYWdtZW50ICpmcmFnLAorCQkJICAgICAgaW50IGluYWNjdXJhdGVfZW9mLCB1bnNpZ25lZCB3c19ydWxlLAorCQkJICAgICAgaW50IG50aF9mcmFnbWVudCkKK3sKKwlpbnQgbWF0Y2hfYmVnaW5uaW5nLCBtYXRjaF9lbmQ7CisJY29uc3QgY2hhciAqcGF0Y2ggPSBmcmFnLT5wYXRjaDsKKwlpbnQgc2l6ZSA9IGZyYWctPnNpemU7CisJY2hhciAqb2xkLCAqb2xkbGluZXM7CisJc3RydWN0IHN0cmJ1ZiBuZXdsaW5lczsKKwlpbnQgbmV3X2JsYW5rX2xpbmVzX2F0X2VuZCA9IDA7CisJaW50IGZvdW5kX25ld19ibGFua19saW5lc19hdF9lbmQgPSAwOworCWludCBodW5rX2xpbmVuciA9IGZyYWctPmxpbmVucjsKKwl1bnNpZ25lZCBsb25nIGxlYWRpbmcsIHRyYWlsaW5nOworCWludCBwb3MsIGFwcGxpZWRfcG9zOworCXN0cnVjdCBpbWFnZSBwcmVpbWFnZTsKKwlzdHJ1Y3QgaW1hZ2UgcG9zdGltYWdlOworCisJbWVtc2V0KCZwcmVpbWFnZSwgMCwgc2l6ZW9mKHByZWltYWdlKSk7CisJbWVtc2V0KCZwb3N0aW1hZ2UsIDAsIHNpemVvZihwb3N0aW1hZ2UpKTsKKwlvbGRsaW5lcyA9IHhtYWxsb2Moc2l6ZSk7CisJc3RyYnVmX2luaXQoJm5ld2xpbmVzLCBzaXplKTsKKworCW9sZCA9IG9sZGxpbmVzOworCXdoaWxlIChzaXplID4gMCkgeworCQljaGFyIGZpcnN0OworCQlpbnQgbGVuID0gbGluZWxlbihwYXRjaCwgc2l6ZSk7CisJCWludCBwbGVuOworCQlpbnQgYWRkZWRfYmxhbmtfbGluZSA9IDA7CisJCWludCBpc19ibGFua19jb250ZXh0ID0gMDsKKwkJc2l6ZV90IHN0YXJ0OworCisJCWlmICghbGVuKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogInBsZW4iIGlzIGhvdyBtdWNoIG9mIHRoZSBsaW5lIHdlIHNob3VsZCB1c2UgZm9yCisJCSAqIHRoZSBhY3R1YWwgcGF0Y2ggZGF0YS4gTm9ybWFsbHkgd2UganVzdCByZW1vdmUgdGhlCisJCSAqIGZpcnN0IGNoYXJhY3RlciBvbiB0aGUgbGluZSwgYnV0IGlmIHRoZSBsaW5lIGlzCisJCSAqIGZvbGxvd2VkIGJ5ICJcIE5vIG5ld2xpbmUiLCB0aGVuIHdlIGFsc28gcmVtb3ZlIHRoZQorCQkgKiBsYXN0IG9uZSAod2hpY2ggaXMgdGhlIG5ld2xpbmUsIG9mIGNvdXJzZSkuCisJCSAqLworCQlwbGVuID0gbGVuIC0gMTsKKwkJaWYgKGxlbiA8IHNpemUgJiYgcGF0Y2hbbGVuXSA9PSAnXFwnKQorCQkJcGxlbi0tOworCQlmaXJzdCA9ICpwYXRjaDsKKwkJaWYgKGFwcGx5X2luX3JldmVyc2UpIHsKKwkJCWlmIChmaXJzdCA9PSAnLScpCisJCQkJZmlyc3QgPSAnKyc7CisJCQllbHNlIGlmIChmaXJzdCA9PSAnKycpCisJCQkJZmlyc3QgPSAnLSc7CisJCX0KKworCQlzd2l0Y2ggKGZpcnN0KSB7CisJCWNhc2UgJ1xuJzoKKwkJCS8qIE5ld2VyIEdOVSBkaWZmLCBlbXB0eSBjb250ZXh0IGxpbmUgKi8KKwkJCWlmIChwbGVuIDwgMCkKKwkJCQkvKiAuLi4gZm9sbG93ZWQgYnkgJ1xObyBuZXdsaW5lJzsgbm90aGluZyAqLworCQkJCWJyZWFrOworCQkJKm9sZCsrID0gJ1xuJzsKKwkJCXN0cmJ1Zl9hZGRjaCgmbmV3bGluZXMsICdcbicpOworCQkJYWRkX2xpbmVfaW5mbygmcHJlaW1hZ2UsICJcbiIsIDEsIExJTkVfQ09NTU9OKTsKKwkJCWFkZF9saW5lX2luZm8oJnBvc3RpbWFnZSwgIlxuIiwgMSwgTElORV9DT01NT04pOworCQkJaXNfYmxhbmtfY29udGV4dCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJCQlpZiAocGxlbiAmJiAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgJiYKKwkJCSAgICB3c19ibGFua19saW5lKHBhdGNoICsgMSwgcGxlbiwgd3NfcnVsZSkpCisJCQkJaXNfYmxhbmtfY29udGV4dCA9IDE7CisJCWNhc2UgJy0nOgorCQkJbWVtY3B5KG9sZCwgcGF0Y2ggKyAxLCBwbGVuKTsKKwkJCWFkZF9saW5lX2luZm8oJnByZWltYWdlLCBvbGQsIHBsZW4sCisJCQkJICAgICAgKGZpcnN0ID09ICcgJyA/IExJTkVfQ09NTU9OIDogMCkpOworCQkJb2xkICs9IHBsZW47CisJCQlpZiAoZmlyc3QgPT0gJy0nKQorCQkJCWJyZWFrOworCQkvKiBGYWxsLXRocm91Z2ggZm9yICcgJyAqLworCQljYXNlICcrJzoKKwkJCS8qIC0tbm8tYWRkIGRvZXMgbm90IGFkZCBuZXcgbGluZXMgKi8KKwkJCWlmIChmaXJzdCA9PSAnKycgJiYgbm9fYWRkKQorCQkJCWJyZWFrOworCisJCQlzdGFydCA9IG5ld2xpbmVzLmxlbjsKKwkJCWlmIChmaXJzdCAhPSAnKycgfHwKKwkJCSAgICAhd2hpdGVzcGFjZV9lcnJvciB8fAorCQkJICAgIHdzX2Vycm9yX2FjdGlvbiAhPSBjb3JyZWN0X3dzX2Vycm9yKSB7CisJCQkJc3RyYnVmX2FkZCgmbmV3bGluZXMsIHBhdGNoICsgMSwgcGxlbik7CisJCQl9CisJCQllbHNlIHsKKwkJCQl3c19maXhfY29weSgmbmV3bGluZXMsIHBhdGNoICsgMSwgcGxlbiwgd3NfcnVsZSwgJmFwcGxpZWRfYWZ0ZXJfZml4aW5nX3dzKTsKKwkJCX0KKwkJCWFkZF9saW5lX2luZm8oJnBvc3RpbWFnZSwgbmV3bGluZXMuYnVmICsgc3RhcnQsIG5ld2xpbmVzLmxlbiAtIHN0YXJ0LAorCQkJCSAgICAgIChmaXJzdCA9PSAnKycgPyAwIDogTElORV9DT01NT04pKTsKKwkJCWlmIChmaXJzdCA9PSAnKycgJiYKKwkJCSAgICAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgJiYKKwkJCSAgICB3c19ibGFua19saW5lKHBhdGNoICsgMSwgcGxlbiwgd3NfcnVsZSkpCisJCQkJYWRkZWRfYmxhbmtfbGluZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnQCc6IGNhc2UgJ1xcJzoKKwkJCS8qIElnbm9yZSBpdCwgd2UgYWxyZWFkeSBoYW5kbGVkIGl0ICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChhcHBseV92ZXJib3NlbHkpCisJCQkJZXJyb3IoXygiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIiksIGZpcnN0KTsKKwkJCWFwcGxpZWRfcG9zID0gLTE7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoYWRkZWRfYmxhbmtfbGluZSkgeworCQkJaWYgKCFuZXdfYmxhbmtfbGluZXNfYXRfZW5kKQorCQkJCWZvdW5kX25ld19ibGFua19saW5lc19hdF9lbmQgPSBodW5rX2xpbmVucjsKKwkJCW5ld19ibGFua19saW5lc19hdF9lbmQrKzsKKwkJfQorCQllbHNlIGlmIChpc19ibGFua19jb250ZXh0KQorCQkJOworCQllbHNlCisJCQluZXdfYmxhbmtfbGluZXNfYXRfZW5kID0gMDsKKwkJcGF0Y2ggKz0gbGVuOworCQlzaXplIC09IGxlbjsKKwkJaHVua19saW5lbnIrKzsKKwl9CisJaWYgKGluYWNjdXJhdGVfZW9mICYmCisJICAgIG9sZCA+IG9sZGxpbmVzICYmIG9sZFstMV0gPT0gJ1xuJyAmJgorCSAgICBuZXdsaW5lcy5sZW4gPiAwICYmIG5ld2xpbmVzLmJ1ZltuZXdsaW5lcy5sZW4gLSAxXSA9PSAnXG4nKSB7CisJCW9sZC0tOworCQlzdHJidWZfc2V0bGVuKCZuZXdsaW5lcywgbmV3bGluZXMubGVuIC0gMSk7CisJfQorCisJbGVhZGluZyA9IGZyYWctPmxlYWRpbmc7CisJdHJhaWxpbmcgPSBmcmFnLT50cmFpbGluZzsKKworCS8qCisJICogQSBodW5rIHRvIGNoYW5nZSBsaW5lcyBhdCB0aGUgYmVnaW5uaW5nIHdvdWxkIGJlZ2luIHdpdGgKKwkgKiBAQCAtMSxMICtOLE0gQEAKKwkgKiBidXQgd2UgbmVlZCB0byBiZSBjYXJlZnVsLiAgLVUwIHRoYXQgaW5zZXJ0cyBiZWZvcmUgdGhlIHNlY29uZAorCSAqIGxpbmUgYWxzbyBoYXMgdGhpcyBwYXR0ZXJuLgorCSAqCisJICogQW5kIGEgaHVuayB0byBhZGQgdG8gYW4gZW1wdHkgZmlsZSB3b3VsZCBiZWdpbiB3aXRoCisJICogQEAgLTAsMCArTixNIEBACisJICoKKwkgKiBJbiBvdGhlciB3b3JkcywgYSBodW5rIHRoYXQgaXMgKGZyYWctPm9sZHBvcyA8PSAxKSB3aXRoIG9yCisJICogd2l0aG91dCBsZWFkaW5nIGNvbnRleHQgbXVzdCBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nLgorCSAqLworCW1hdGNoX2JlZ2lubmluZyA9ICghZnJhZy0+b2xkcG9zIHx8CisJCQkgICAoZnJhZy0+b2xkcG9zID09IDEgJiYgIXVuaWRpZmZfemVybykpOworCisJLyoKKwkgKiBBIGh1bmsgd2l0aG91dCB0cmFpbGluZyBsaW5lcyBtdXN0IG1hdGNoIGF0IHRoZSBlbmQuCisJICogSG93ZXZlciwgd2Ugc2ltcGx5IGNhbm5vdCB0ZWxsIGlmIGEgaHVuayBtdXN0IG1hdGNoIGVuZAorCSAqIGZyb20gdGhlIGxhY2sgb2YgdHJhaWxpbmcgbGluZXMgaWYgdGhlIHBhdGNoIHdhcyBnZW5lcmF0ZWQKKwkgKiB3aXRoIHVuaWRpZmYgd2l0aG91dCBhbnkgY29udGV4dC4KKwkgKi8KKwltYXRjaF9lbmQgPSAhdW5pZGlmZl96ZXJvICYmICF0cmFpbGluZzsKKworCXBvcyA9IGZyYWctPm5ld3BvcyA/IChmcmFnLT5uZXdwb3MgLSAxKSA6IDA7CisJcHJlaW1hZ2UuYnVmID0gb2xkbGluZXM7CisJcHJlaW1hZ2UubGVuID0gb2xkIC0gb2xkbGluZXM7CisJcG9zdGltYWdlLmJ1ZiA9IG5ld2xpbmVzLmJ1ZjsKKwlwb3N0aW1hZ2UubGVuID0gbmV3bGluZXMubGVuOworCXByZWltYWdlLmxpbmUgPSBwcmVpbWFnZS5saW5lX2FsbG9jYXRlZDsKKwlwb3N0aW1hZ2UubGluZSA9IHBvc3RpbWFnZS5saW5lX2FsbG9jYXRlZDsKKworCWZvciAoOzspIHsKKworCQlhcHBsaWVkX3BvcyA9IGZpbmRfcG9zKGltZywgJnByZWltYWdlLCAmcG9zdGltYWdlLCBwb3MsCisJCQkJICAgICAgIHdzX3J1bGUsIG1hdGNoX2JlZ2lubmluZywgbWF0Y2hfZW5kKTsKKworCQlpZiAoYXBwbGllZF9wb3MgPj0gMCkKKwkJCWJyZWFrOworCisJCS8qIEFtIEkgYXQgbXkgY29udGV4dCBsaW1pdHM/ICovCisJCWlmICgobGVhZGluZyA8PSBwX2NvbnRleHQpICYmICh0cmFpbGluZyA8PSBwX2NvbnRleHQpKQorCQkJYnJlYWs7CisJCWlmIChtYXRjaF9iZWdpbm5pbmcgfHwgbWF0Y2hfZW5kKSB7CisJCQltYXRjaF9iZWdpbm5pbmcgPSBtYXRjaF9lbmQgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBSZWR1Y2UgdGhlIG51bWJlciBvZiBjb250ZXh0IGxpbmVzOyByZWR1Y2UgYm90aAorCQkgKiBsZWFkaW5nIGFuZCB0cmFpbGluZyBpZiB0aGV5IGFyZSBlcXVhbCBvdGhlcndpc2UKKwkJICoganVzdCByZWR1Y2UgdGhlIGxhcmdlciBjb250ZXh0LgorCQkgKi8KKwkJaWYgKGxlYWRpbmcgPj0gdHJhaWxpbmcpIHsKKwkJCXJlbW92ZV9maXJzdF9saW5lKCZwcmVpbWFnZSk7CisJCQlyZW1vdmVfZmlyc3RfbGluZSgmcG9zdGltYWdlKTsKKwkJCXBvcy0tOworCQkJbGVhZGluZy0tOworCQl9CisJCWlmICh0cmFpbGluZyA+IGxlYWRpbmcpIHsKKwkJCXJlbW92ZV9sYXN0X2xpbmUoJnByZWltYWdlKTsKKwkJCXJlbW92ZV9sYXN0X2xpbmUoJnBvc3RpbWFnZSk7CisJCQl0cmFpbGluZy0tOworCQl9CisJfQorCisJaWYgKGFwcGxpZWRfcG9zID49IDApIHsKKwkJaWYgKG5ld19ibGFua19saW5lc19hdF9lbmQgJiYKKwkJICAgIHByZWltYWdlLm5yICsgYXBwbGllZF9wb3MgPj0gaW1nLT5uciAmJgorCQkgICAgKHdzX3J1bGUgJiBXU19CTEFOS19BVF9FT0YpICYmCisJCSAgICB3c19lcnJvcl9hY3Rpb24gIT0gbm93YXJuX3dzX2Vycm9yKSB7CisJCQlyZWNvcmRfd3NfZXJyb3IoV1NfQkxBTktfQVRfRU9GLCAiKyIsIDEsCisJCQkJCWZvdW5kX25ld19ibGFua19saW5lc19hdF9lbmQpOworCQkJaWYgKHdzX2Vycm9yX2FjdGlvbiA9PSBjb3JyZWN0X3dzX2Vycm9yKSB7CisJCQkJd2hpbGUgKG5ld19ibGFua19saW5lc19hdF9lbmQtLSkKKwkJCQkJcmVtb3ZlX2xhc3RfbGluZSgmcG9zdGltYWdlKTsKKwkJCX0KKwkJCS8qCisJCQkgKiBXZSB3b3VsZCB3YW50IHRvIHByZXZlbnQgd3JpdGVfb3V0X3Jlc3VsdHMoKQorCQkJICogZnJvbSB0YWtpbmcgcGxhY2UgaW4gYXBwbHlfcGF0Y2goKSB0aGF0IGZvbGxvd3MKKwkJCSAqIHRoZSBjYWxsY2hhaW4gbGVkIHVzIGhlcmUsIHdoaWNoIGlzOgorCQkJICogYXBwbHlfcGF0Y2gtPmNoZWNrX3BhdGNoX2xpc3QtPmNoZWNrX3BhdGNoLT4KKwkJCSAqIGFwcGx5X2RhdGEtPmFwcGx5X2ZyYWdtZW50cy0+YXBwbHlfb25lX2ZyYWdtZW50CisJCQkgKi8KKwkJCWlmICh3c19lcnJvcl9hY3Rpb24gPT0gZGllX29uX3dzX2Vycm9yKQorCQkJCWFwcGx5ID0gMDsKKwkJfQorCisJCWlmIChhcHBseV92ZXJib3NlbHkgJiYgYXBwbGllZF9wb3MgIT0gcG9zKSB7CisJCQlpbnQgb2Zmc2V0ID0gYXBwbGllZF9wb3MgLSBwb3M7CisJCQlpZiAoYXBwbHlfaW5fcmV2ZXJzZSkKKwkJCQlvZmZzZXQgPSAwIC0gb2Zmc2V0OworCQkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkJICAgUV8oIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIsCisJCQkJICAgICAgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iLAorCQkJCSAgICAgIG9mZnNldCksCisJCQkJICAgbnRoX2ZyYWdtZW50LCBhcHBsaWVkX3BvcyArIDEsIG9mZnNldCk7CisJCX0KKworCQkvKgorCQkgKiBXYXJuIGlmIGl0IHdhcyBuZWNlc3NhcnkgdG8gcmVkdWNlIHRoZSBudW1iZXIKKwkJICogb2YgY29udGV4dCBsaW5lcy4KKwkJICovCisJCWlmICgobGVhZGluZyAhPSBmcmFnLT5sZWFkaW5nKSB8fAorCQkgICAgKHRyYWlsaW5nICE9IGZyYWctPnRyYWlsaW5nKSkKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIgorCQkJCQkgICAgICIgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiKSwKKwkJCQkgICBsZWFkaW5nLCB0cmFpbGluZywgYXBwbGllZF9wb3MrMSk7CisJCXVwZGF0ZV9pbWFnZShpbWcsIGFwcGxpZWRfcG9zLCAmcHJlaW1hZ2UsICZwb3N0aW1hZ2UpOworCX0gZWxzZSB7CisJCWlmIChhcHBseV92ZXJib3NlbHkpCisJCQllcnJvcihfKCJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuJS4qcyIpLAorCQkJICAgICAgKGludCkob2xkIC0gb2xkbGluZXMpLCBvbGRsaW5lcyk7CisJfQorCitvdXQ6CisJZnJlZShvbGRsaW5lcyk7CisJc3RyYnVmX3JlbGVhc2UoJm5ld2xpbmVzKTsKKwlmcmVlKHByZWltYWdlLmxpbmVfYWxsb2NhdGVkKTsKKwlmcmVlKHBvc3RpbWFnZS5saW5lX2FsbG9jYXRlZCk7CisKKwlyZXR1cm4gKGFwcGxpZWRfcG9zIDwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfYmluYXJ5X2ZyYWdtZW50KHN0cnVjdCBpbWFnZSAqaW1nLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBmcmFnbWVudCAqZnJhZ21lbnQgPSBwYXRjaC0+ZnJhZ21lbnRzOworCXVuc2lnbmVkIGxvbmcgbGVuOworCXZvaWQgKmRzdDsKKworCWlmICghZnJhZ21lbnQpCisJCXJldHVybiBlcnJvcihfKCJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIiksCisJCQkgICAgIHBhdGNoLT5uZXdfbmFtZSA/CisJCQkgICAgIHBhdGNoLT5uZXdfbmFtZSA6CisJCQkgICAgIHBhdGNoLT5vbGRfbmFtZSk7CisKKwkvKiBCaW5hcnkgcGF0Y2ggaXMgaXJyZXZlcnNpYmxlIHdpdGhvdXQgdGhlIG9wdGlvbmFsIHNlY29uZCBodW5rICovCisJaWYgKGFwcGx5X2luX3JldmVyc2UpIHsKKwkJaWYgKCFmcmFnbWVudC0+bmV4dCkKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IHJldmVyc2UtYXBwbHkgYSBiaW5hcnkgcGF0Y2ggIgorCQkJCSAgICAgIndpdGhvdXQgdGhlIHJldmVyc2UgaHVuayB0byAnJXMnIiwKKwkJCQkgICAgIHBhdGNoLT5uZXdfbmFtZQorCQkJCSAgICAgPyBwYXRjaC0+bmV3X25hbWUgOiBwYXRjaC0+b2xkX25hbWUpOworCQlmcmFnbWVudCA9IGZyYWdtZW50LT5uZXh0OworCX0KKwlzd2l0Y2ggKGZyYWdtZW50LT5iaW5hcnlfcGF0Y2hfbWV0aG9kKSB7CisJY2FzZSBCSU5BUllfREVMVEFfREVGTEFURUQ6CisJCWRzdCA9IHBhdGNoX2RlbHRhKGltZy0+YnVmLCBpbWctPmxlbiwgZnJhZ21lbnQtPnBhdGNoLAorCQkJCSAgZnJhZ21lbnQtPnNpemUsICZsZW4pOworCQlpZiAoIWRzdCkKKwkJCXJldHVybiAtMTsKKwkJY2xlYXJfaW1hZ2UoaW1nKTsKKwkJaW1nLT5idWYgPSBkc3Q7CisJCWltZy0+bGVuID0gbGVuOworCQlyZXR1cm4gMDsKKwljYXNlIEJJTkFSWV9MSVRFUkFMX0RFRkxBVEVEOgorCQljbGVhcl9pbWFnZShpbWcpOworCQlpbWctPmxlbiA9IGZyYWdtZW50LT5zaXplOworCQlpbWctPmJ1ZiA9IHhtZW1kdXB6KGZyYWdtZW50LT5wYXRjaCwgaW1nLT5sZW4pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKgorICogUmVwbGFjZSAiaW1nIiB3aXRoIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIGJpbmFyeSBwYXRjaC4KKyAqIFRoZSBiaW5hcnkgcGF0Y2ggZGF0YSBpdHNlbGYgaW4gcGF0Y2gtPmZyYWdtZW50IGlzIHN0aWxsIGtlcHQKKyAqIGJ1dCB0aGUgcHJlaW1hZ2UgcHJlcGFyZWQgYnkgdGhlIGNhbGxlciBpbiAiaW1nIiBpcyBmcmVlZCBoZXJlCisgKiBvciBpbiB0aGUgaGVscGVyIGZ1bmN0aW9uIGFwcGx5X2JpbmFyeV9mcmFnbWVudCgpIHRoaXMgY2FsbHMuCisgKi8KK3N0YXRpYyBpbnQgYXBwbHlfYmluYXJ5KHN0cnVjdCBpbWFnZSAqaW1nLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSBwYXRjaC0+b2xkX25hbWUgPyBwYXRjaC0+b2xkX25hbWUgOiBwYXRjaC0+bmV3X25hbWU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCS8qCisJICogRm9yIHNhZmV0eSwgd2UgcmVxdWlyZSBwYXRjaCBpbmRleCBsaW5lIHRvIGNvbnRhaW4KKwkgKiBmdWxsIDQwLWJ5dGUgdGV4dHVhbCBTSEExIGZvciBvbGQgYW5kIG5ldywgYXQgbGVhc3QgZm9yIG5vdy4KKwkgKi8KKwlpZiAoc3RybGVuKHBhdGNoLT5vbGRfc2hhMV9wcmVmaXgpICE9IDQwIHx8CisJICAgIHN0cmxlbihwYXRjaC0+bmV3X3NoYTFfcHJlZml4KSAhPSA0MCB8fAorCSAgICBnZXRfc2hhMV9oZXgocGF0Y2gtPm9sZF9zaGExX3ByZWZpeCwgc2hhMSkgfHwKKwkgICAgZ2V0X3NoYTFfaGV4KHBhdGNoLT5uZXdfc2hhMV9wcmVmaXgsIHNoYTEpKQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBhcHBseSBiaW5hcnkgcGF0Y2ggdG8gJyVzJyAiCisJCQkgICAgICJ3aXRob3V0IGZ1bGwgaW5kZXggbGluZSIsIG5hbWUpOworCisJaWYgKHBhdGNoLT5vbGRfbmFtZSkgeworCQkvKgorCQkgKiBTZWUgaWYgdGhlIG9sZCBvbmUgbWF0Y2hlcyB3aGF0IHRoZSBwYXRjaAorCQkgKiBhcHBsaWVzIHRvLgorCQkgKi8KKwkJaGFzaF9zaGExX2ZpbGUoaW1nLT5idWYsIGltZy0+bGVuLCBibG9iX3R5cGUsIHNoYTEpOworCQlpZiAoc3RyY21wKHNoYTFfdG9faGV4KHNoYTEpLCBwYXRjaC0+b2xkX3NoYTFfcHJlZml4KSkKKwkJCXJldHVybiBlcnJvcigidGhlIHBhdGNoIGFwcGxpZXMgdG8gJyVzJyAoJXMpLCAiCisJCQkJICAgICAid2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlICIKKwkJCQkgICAgICJjdXJyZW50IGNvbnRlbnRzLiIsCisJCQkJICAgICBuYW1lLCBzaGExX3RvX2hleChzaGExKSk7CisJfQorCWVsc2UgeworCQkvKiBPdGhlcndpc2UsIHRoZSBvbGQgb25lIG11c3QgYmUgZW1wdHkuICovCisJCWlmIChpbWctPmxlbikKKwkJCXJldHVybiBlcnJvcigidGhlIHBhdGNoIGFwcGxpZXMgdG8gYW4gZW1wdHkgIgorCQkJCSAgICAgIiclcycgYnV0IGl0IGlzIG5vdCBlbXB0eSIsIG5hbWUpOworCX0KKworCWdldF9zaGExX2hleChwYXRjaC0+bmV3X3NoYTFfcHJlZml4LCBzaGExKTsKKwlpZiAoaXNfbnVsbF9zaGExKHNoYTEpKSB7CisJCWNsZWFyX2ltYWdlKGltZyk7CisJCXJldHVybiAwOyAvKiBkZWxldGlvbiBwYXRjaCAqLworCX0KKworCWlmIChoYXNfc2hhMV9maWxlKHNoYTEpKSB7CisJCS8qIFdlIGFscmVhZHkgaGF2ZSB0aGUgcG9zdGltYWdlICovCisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQljaGFyICpyZXN1bHQ7CisKKwkJcmVzdWx0ID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFyZXN1bHQpCisJCQlyZXR1cm4gZXJyb3IoInRoZSBuZWNlc3NhcnkgcG9zdGltYWdlICVzIGZvciAiCisJCQkJICAgICAiJyVzJyBjYW5ub3QgYmUgcmVhZCIsCisJCQkJICAgICBwYXRjaC0+bmV3X3NoYTFfcHJlZml4LCBuYW1lKTsKKwkJY2xlYXJfaW1hZ2UoaW1nKTsKKwkJaW1nLT5idWYgPSByZXN1bHQ7CisJCWltZy0+bGVuID0gc2l6ZTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBXZSBoYXZlIHZlcmlmaWVkIGJ1ZiBtYXRjaGVzIHRoZSBwcmVpbWFnZTsKKwkJICogYXBwbHkgdGhlIHBhdGNoIGRhdGEgdG8gaXQsIHdoaWNoIGlzIHN0b3JlZAorCQkgKiBpbiB0aGUgcGF0Y2gtPmZyYWdtZW50cy0+e3BhdGNoLHNpemV9LgorCQkgKi8KKwkJaWYgKGFwcGx5X2JpbmFyeV9mcmFnbWVudChpbWcsIHBhdGNoKSkKKwkJCXJldHVybiBlcnJvcihfKCJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIpLAorCQkJCSAgICAgbmFtZSk7CisKKwkJLyogdmVyaWZ5IHRoYXQgdGhlIHJlc3VsdCBtYXRjaGVzICovCisJCWhhc2hfc2hhMV9maWxlKGltZy0+YnVmLCBpbWctPmxlbiwgYmxvYl90eXBlLCBzaGExKTsKKwkJaWYgKHN0cmNtcChzaGExX3RvX2hleChzaGExKSwgcGF0Y2gtPm5ld19zaGExX3ByZWZpeCkpCisJCQlyZXR1cm4gZXJyb3IoXygiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiKSwKKwkJCQluYW1lLCBwYXRjaC0+bmV3X3NoYTFfcHJlZml4LCBzaGExX3RvX2hleChzaGExKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfZnJhZ21lbnRzKHN0cnVjdCBpbWFnZSAqaW1nLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBmcmFnbWVudCAqZnJhZyA9IHBhdGNoLT5mcmFnbWVudHM7CisJY29uc3QgY2hhciAqbmFtZSA9IHBhdGNoLT5vbGRfbmFtZSA/IHBhdGNoLT5vbGRfbmFtZSA6IHBhdGNoLT5uZXdfbmFtZTsKKwl1bnNpZ25lZCB3c19ydWxlID0gcGF0Y2gtPndzX3J1bGU7CisJdW5zaWduZWQgaW5hY2N1cmF0ZV9lb2YgPSBwYXRjaC0+aW5hY2N1cmF0ZV9lb2Y7CisJaW50IG50aCA9IDA7CisKKwlpZiAocGF0Y2gtPmlzX2JpbmFyeSkKKwkJcmV0dXJuIGFwcGx5X2JpbmFyeShpbWcsIHBhdGNoKTsKKworCXdoaWxlIChmcmFnKSB7CisJCW50aCsrOworCQlpZiAoYXBwbHlfb25lX2ZyYWdtZW50KGltZywgZnJhZywgaW5hY2N1cmF0ZV9lb2YsIHdzX3J1bGUsIG50aCkpIHsKKwkJCWVycm9yKF8oInBhdGNoIGZhaWxlZDogJXM6JWxkIiksIG5hbWUsIGZyYWctPm9sZHBvcyk7CisJCQlpZiAoIWFwcGx5X3dpdGhfcmVqZWN0KQorCQkJCXJldHVybiAtMTsKKwkJCWZyYWctPnJlamVjdGVkID0gMTsKKwkJfQorCQlmcmFnID0gZnJhZy0+bmV4dDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9ibG9iX29iamVjdChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIG1vZGUpCit7CisJaWYgKFNfSVNHSVRMSU5LKG1vZGUpKSB7CisJCXN0cmJ1Zl9ncm93KGJ1ZiwgMTAwKTsKKwkJc3RyYnVmX2FkZGYoYnVmLCAiU3VicHJvamVjdCBjb21taXQgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9IGVsc2UgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgc3o7CisJCWNoYXIgKnJlc3VsdDsKKworCQlyZXN1bHQgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnN6KTsKKwkJaWYgKCFyZXN1bHQpCisJCQlyZXR1cm4gLTE7CisJCS8qIFhYWCByZWFkX3NoYTFfZmlsZSBOVUwtdGVybWluYXRlcyAqLworCQlzdHJidWZfYXR0YWNoKGJ1ZiwgcmVzdWx0LCBzeiwgc3ogKyAxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9maWxlX29yX2dpdGxpbmsoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWlmICghY2UpCisJCXJldHVybiAwOworCXJldHVybiByZWFkX2Jsb2Jfb2JqZWN0KGJ1ZiwgY2UtPnNoYTEsIGNlLT5jZV9tb2RlKTsKK30KKworc3RhdGljIHN0cnVjdCBwYXRjaCAqaW5fZm5fdGFibGUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWlmIChuYW1lID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cCgmZm5fdGFibGUsIG5hbWUpOworCWlmIChpdGVtICE9IE5VTEwpCisJCXJldHVybiAoc3RydWN0IHBhdGNoICopaXRlbS0+dXRpbDsKKworCXJldHVybiBOVUxMOworfQorCisvKgorICogaXRlbS0+dXRpbCBpbiB0aGUgZmlsZW5hbWUgdGFibGUgcmVjb3JkcyB0aGUgc3RhdHVzIG9mIHRoZSBwYXRoLgorICogVXN1YWxseSBpdCBwb2ludHMgYXQgYSBwYXRjaCAod2hvc2UgcmVzdWx0IHJlY29yZHMgdGhlIGNvbnRlbnRzCisgKiBvZiBpdCBhZnRlciBhcHBseWluZyBpdCksIGJ1dCBpdCBjb3VsZCBiZSBQQVRIX1dBU19ERUxFVEVEIGZvciBhCisgKiBwYXRoIHRoYXQgYSBwcmV2aW91c2x5IGFwcGxpZWQgcGF0Y2ggaGFzIGFscmVhZHkgcmVtb3ZlZCwgb3IKKyAqIFBBVEhfVE9fQkVfREVMRVRFRCBmb3IgYSBwYXRoIHRoYXQgYSBsYXRlciBwYXRjaCB3b3VsZCByZW1vdmUuCisgKgorICogVGhlIGxhdHRlciBpcyBuZWVkZWQgdG8gZGVhbCB3aXRoIGEgY2FzZSB3aGVyZSB0d28gcGF0aHMgQSBhbmQgQgorICogYXJlIHN3YXBwZWQgYnkgZmlyc3QgcmVuYW1pbmcgQSB0byBCIGFuZCB0aGVuIHJlbmFtaW5nIEIgdG8gQTsKKyAqIG1vdmluZyBBIHRvIEIgc2hvdWxkIG5vdCBiZSBwcmV2ZW50ZWQgZHVlIHRvIHByZXNlbmNlIG9mIEIgYXMgd2UKKyAqIHdpbGwgcmVtb3ZlIGl0IGluIGEgbGF0ZXIgcGF0Y2guCisgKi8KKyNkZWZpbmUgUEFUSF9UT19CRV9ERUxFVEVEICgoc3RydWN0IHBhdGNoICopIC0yKQorI2RlZmluZSBQQVRIX1dBU19ERUxFVEVEICgoc3RydWN0IHBhdGNoICopIC0xKQorCitzdGF0aWMgaW50IHRvX2JlX2RlbGV0ZWQoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlyZXR1cm4gcGF0Y2ggPT0gUEFUSF9UT19CRV9ERUxFVEVEOworfQorCitzdGF0aWMgaW50IHdhc19kZWxldGVkKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJcmV0dXJuIHBhdGNoID09IFBBVEhfV0FTX0RFTEVURUQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF90b19mbl90YWJsZShzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCisJLyoKKwkgKiBBbHdheXMgYWRkIG5ld19uYW1lIHVubGVzcyBwYXRjaCBpcyBhIGRlbGV0aW9uCisJICogVGhpcyBzaG91bGQgY292ZXIgdGhlIGNhc2VzIGZvciBub3JtYWwgZGlmZnMsCisJICogZmlsZSBjcmVhdGlvbnMgYW5kIGNvcGllcworCSAqLworCWlmIChwYXRjaC0+bmV3X25hbWUgIT0gTlVMTCkgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZmbl90YWJsZSwgcGF0Y2gtPm5ld19uYW1lKTsKKwkJaXRlbS0+dXRpbCA9IHBhdGNoOworCX0KKworCS8qCisJICogc3RvcmUgYSBmYWlsdXJlIG9uIHJlbmFtZS9kZWxldGlvbiBjYXNlcyBiZWNhdXNlCisJICogbGF0ZXIgY2h1bmtzIHNob3VsZG4ndCBwYXRjaCBvbGQgbmFtZXMKKwkgKi8KKwlpZiAoKHBhdGNoLT5uZXdfbmFtZSA9PSBOVUxMKSB8fCAocGF0Y2gtPmlzX3JlbmFtZSkpIHsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmZm5fdGFibGUsIHBhdGNoLT5vbGRfbmFtZSk7CisJCWl0ZW0tPnV0aWwgPSBQQVRIX1dBU19ERUxFVEVEOworCX0KK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9mbl90YWJsZShzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCS8qCisJICogc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgaW5jb21pbmcgZmlsZSBkZWxldGlvbgorCSAqLworCXdoaWxlIChwYXRjaCkgeworCQlpZiAoKHBhdGNoLT5uZXdfbmFtZSA9PSBOVUxMKSB8fCAocGF0Y2gtPmlzX3JlbmFtZSkpIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmZm5fdGFibGUsIHBhdGNoLT5vbGRfbmFtZSk7CisJCQlpdGVtLT51dGlsID0gUEFUSF9UT19CRV9ERUxFVEVEOworCQl9CisJCXBhdGNoID0gcGF0Y2gtPm5leHQ7CisJfQorfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X3RhcmdldChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlzdHJ1Y3QgY2hlY2tvdXQgY29zdGF0ZTsKKworCW1lbXNldCgmY29zdGF0ZSwgMCwgc2l6ZW9mKGNvc3RhdGUpKTsKKwljb3N0YXRlLmJhc2VfZGlyID0gIiI7CisJY29zdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKKwljb3N0YXRlLmlzdGF0ZSA9IGlzdGF0ZTsKKwlpZiAoY2hlY2tvdXRfZW50cnkoY2UsICZjb3N0YXRlLCBOVUxMKSB8fCBsc3RhdChjZS0+bmFtZSwgc3QpKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IGNoZWNrb3V0ICVzIiksIGNlLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwYXRjaCAqcHJldmlvdXNfcGF0Y2goc3RydWN0IHBhdGNoICpwYXRjaCwgaW50ICpnb25lKQoreworCXN0cnVjdCBwYXRjaCAqcHJldmlvdXM7CisKKwkqZ29uZSA9IDA7CisJaWYgKHBhdGNoLT5pc19jb3B5IHx8IHBhdGNoLT5pc19yZW5hbWUpCisJCXJldHVybiBOVUxMOyAvKiAiZ2l0IiBwYXRjaGVzIGRvIG5vdCBkZXBlbmQgb24gdGhlIG9yZGVyICovCisKKwlwcmV2aW91cyA9IGluX2ZuX3RhYmxlKHBhdGNoLT5vbGRfbmFtZSk7CisJaWYgKCFwcmV2aW91cykKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAodG9fYmVfZGVsZXRlZChwcmV2aW91cykpCisJCXJldHVybiBOVUxMOyAvKiB0aGUgZGVsZXRpb24gaGFzbid0IGhhcHBlbmVkIHlldCAqLworCisJaWYgKHdhc19kZWxldGVkKHByZXZpb3VzKSkKKwkJKmdvbmUgPSAxOworCisJcmV0dXJuIHByZXZpb3VzOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9pbmRleF9tYXRjaChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkgeworCQlpZiAoIVNfSVNESVIoc3QtPnN0X21vZGUpKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGNlX21hdGNoX3N0YXQoY2UsIHN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUUpOworfQorCisjZGVmaW5lIFNVQk1PRFVMRV9QQVRDSF9XSVRIT1VUX0lOREVYIDEKKworc3RhdGljIGludCBsb2FkX3BhdGNoX3RhcmdldChzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgIHN0cnVjdCBzdGF0ICpzdCwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgdW5zaWduZWQgZXhwZWN0ZWRfbW9kZSkKK3sKKwlpZiAoY2FjaGVkIHx8IGNoZWNrX2luZGV4KSB7CisJCWlmIChyZWFkX2ZpbGVfb3JfZ2l0bGluayhjZSwgYnVmKSkKKwkJCXJldHVybiBlcnJvcihfKCJyZWFkIG9mICVzIGZhaWxlZCIpLCBuYW1lKTsKKwl9IGVsc2UgaWYgKG5hbWUpIHsKKwkJaWYgKFNfSVNHSVRMSU5LKGV4cGVjdGVkX21vZGUpKSB7CisJCQlpZiAoY2UpCisJCQkJcmV0dXJuIHJlYWRfZmlsZV9vcl9naXRsaW5rKGNlLCBidWYpOworCQkJZWxzZQorCQkJCXJldHVybiBTVUJNT0RVTEVfUEFUQ0hfV0lUSE9VVF9JTkRFWDsKKwkJfSBlbHNlIGlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgobmFtZSwgc3RybGVuKG5hbWUpKSkgeworCQkJcmV0dXJuIGVycm9yKF8oInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiKSwgbmFtZSk7CisJCX0gZWxzZSB7CisJCQlpZiAocmVhZF9vbGRfZGF0YShzdCwgbmFtZSwgYnVmKSkKKwkJCQlyZXR1cm4gZXJyb3IoXygicmVhZCBvZiAlcyBmYWlsZWQiKSwgbmFtZSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXZSBhcmUgYWJvdXQgdG8gYXBwbHkgInBhdGNoIjsgcG9wdWxhdGUgdGhlICJpbWFnZSIgd2l0aCB0aGUKKyAqIGN1cnJlbnQgdmVyc2lvbiB3ZSBoYXZlLCBmcm9tIHRoZSB3b3JraW5nIHRyZWUgb3IgZnJvbSB0aGUgaW5kZXgsCisgKiBkZXBlbmRpbmcgb24gdGhlIHNpdHVhdGlvbiBlLmcuIC0tY2FjaGVkLy0taW5kZXguICBJZiB3ZSBhcmUKKyAqIGFwcGx5aW5nIGEgbm9uLWdpdCBwYXRjaCB0aGF0IGluY3JlbWVudGFsbHkgdXBkYXRlcyB0aGUgdHJlZSwKKyAqIHdlIHJlYWQgZnJvbSB0aGUgcmVzdWx0IG9mIGEgcHJldmlvdXMgZGlmZi4KKyAqLworc3RhdGljIGludCBsb2FkX3ByZWltYWdlKHN0cnVjdCBpbWFnZSAqaW1hZ2UsCisJCQkgc3RydWN0IHBhdGNoICpwYXRjaCwgc3RydWN0IHN0YXQgKnN0LAorCQkJIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgbGVuOworCWNoYXIgKmltZzsKKwlzdHJ1Y3QgcGF0Y2ggKnByZXZpb3VzOworCWludCBzdGF0dXM7CisKKwlwcmV2aW91cyA9IHByZXZpb3VzX3BhdGNoKHBhdGNoLCAmc3RhdHVzKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gZXJyb3IoXygicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiKSwKKwkJCSAgICAgcGF0Y2gtPm9sZF9uYW1lKTsKKwlpZiAocHJldmlvdXMpIHsKKwkJLyogV2UgaGF2ZSBhIHBhdGNoZWQgY29weSBpbiBtZW1vcnk7IHVzZSB0aGF0LiAqLworCQlzdHJidWZfYWRkKCZidWYsIHByZXZpb3VzLT5yZXN1bHQsIHByZXZpb3VzLT5yZXN1bHRzaXplKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBsb2FkX3BhdGNoX3RhcmdldCgmYnVmLCBjZSwgc3QsCisJCQkJCSAgIHBhdGNoLT5vbGRfbmFtZSwgcGF0Y2gtPm9sZF9tb2RlKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCQllbHNlIGlmIChzdGF0dXMgPT0gU1VCTU9EVUxFX1BBVENIX1dJVEhPVVRfSU5ERVgpIHsKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyBubyB3YXkgdG8gYXBwbHkgc3VicHJvamVjdAorCQkJICogcGF0Y2ggd2l0aG91dCBsb29raW5nIGF0IHRoZSBpbmRleC4KKwkJCSAqIE5FRURTV09SSzogc2hvdWxkbid0IHRoaXMgYmUgZmxhZ2dlZAorCQkJICogYXMgYW4gZXJyb3I/Pz8KKwkJCSAqLworCQkJZnJlZV9mcmFnbWVudF9saXN0KHBhdGNoLT5mcmFnbWVudHMpOworCQkJcGF0Y2gtPmZyYWdtZW50cyA9IE5VTEw7CisJCX0gZWxzZSBpZiAoc3RhdHVzKSB7CisJCQlyZXR1cm4gZXJyb3IoXygicmVhZCBvZiAlcyBmYWlsZWQiKSwgcGF0Y2gtPm9sZF9uYW1lKTsKKwkJfQorCX0KKworCWltZyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJmxlbik7CisJcHJlcGFyZV9pbWFnZShpbWFnZSwgaW1nLCBsZW4sICFwYXRjaC0+aXNfYmluYXJ5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aHJlZV93YXlfbWVyZ2Uoc3RydWN0IGltYWdlICppbWFnZSwKKwkJCSAgIGNoYXIgKnBhdGgsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqb3VycywKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRoZWlycykKK3sKKwltbWZpbGVfdCBiYXNlX2ZpbGUsIG91cl9maWxlLCB0aGVpcl9maWxlOworCW1tYnVmZmVyX3QgcmVzdWx0ID0geyBOVUxMIH07CisJaW50IHN0YXR1czsKKworCXJlYWRfbW1ibG9iKCZiYXNlX2ZpbGUsIGJhc2UpOworCXJlYWRfbW1ibG9iKCZvdXJfZmlsZSwgb3Vycyk7CisJcmVhZF9tbWJsb2IoJnRoZWlyX2ZpbGUsIHRoZWlycyk7CisJc3RhdHVzID0gbGxfbWVyZ2UoJnJlc3VsdCwgcGF0aCwKKwkJCSAgJmJhc2VfZmlsZSwgImJhc2UiLAorCQkJICAmb3VyX2ZpbGUsICJvdXJzIiwKKwkJCSAgJnRoZWlyX2ZpbGUsICJ0aGVpcnMiLCBOVUxMKTsKKwlmcmVlKGJhc2VfZmlsZS5wdHIpOworCWZyZWUob3VyX2ZpbGUucHRyKTsKKwlmcmVlKHRoZWlyX2ZpbGUucHRyKTsKKwlpZiAoc3RhdHVzIDwgMCB8fCAhcmVzdWx0LnB0cikgeworCQlmcmVlKHJlc3VsdC5wdHIpOworCQlyZXR1cm4gLTE7CisJfQorCWNsZWFyX2ltYWdlKGltYWdlKTsKKwlpbWFnZS0+YnVmID0gcmVzdWx0LnB0cjsKKwlpbWFnZS0+bGVuID0gcmVzdWx0LnNpemU7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogV2hlbiBkaXJlY3RseSBmYWxsaW5nIGJhY2sgdG8gYWRkL2FkZCB0aHJlZS13YXkgbWVyZ2UsIHdlIHJlYWQgZnJvbQorICogdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIG5ld19uYW1lLiAgSW4gbm8gY2FzZXMgb3RoZXIgdGhhbiB0aGF0CisgKiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkLgorICovCitzdGF0aWMgaW50IGxvYWRfY3VycmVudChzdHJ1Y3QgaW1hZ2UgKmltYWdlLCBzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHN0YXR1cywgcG9zOworCXNpemVfdCBsZW47CisJY2hhciAqaW1nOworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJY2hhciAqbmFtZSA9IHBhdGNoLT5uZXdfbmFtZTsKKwl1bnNpZ25lZCBtb2RlID0gcGF0Y2gtPm5ld19tb2RlOworCisJaWYgKCFwYXRjaC0+aXNfbmV3KQorCQlkaWUoIkJVRzogcGF0Y2ggdG8gJXMgaXMgbm90IGEgY3JlYXRpb24iLCBwYXRjaC0+b2xkX25hbWUpOworCisJcG9zID0gY2FjaGVfbmFtZV9wb3MobmFtZSwgc3RybGVuKG5hbWUpKTsKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIpLCBuYW1lKTsKKwljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCWlmIChsc3RhdChuYW1lLCAmc3QpKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlyZXR1cm4gZXJyb3IoXygiJXM6ICVzIiksIG5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWlmIChjaGVja291dF90YXJnZXQoJnRoZV9pbmRleCwgY2UsICZzdCkpCisJCQlyZXR1cm4gLTE7CisJfQorCWlmICh2ZXJpZnlfaW5kZXhfbWF0Y2goY2UsICZzdCkpCisJCXJldHVybiBlcnJvcihfKCIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiKSwgbmFtZSk7CisKKwlzdGF0dXMgPSBsb2FkX3BhdGNoX3RhcmdldCgmYnVmLCBjZSwgJnN0LCBuYW1lLCBtb2RlKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKwllbHNlIGlmIChzdGF0dXMpCisJCXJldHVybiAtMTsKKwlpbWcgPSBzdHJidWZfZGV0YWNoKCZidWYsICZsZW4pOworCXByZXBhcmVfaW1hZ2UoaW1hZ2UsIGltZywgbGVuLCAhcGF0Y2gtPmlzX2JpbmFyeSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X3RocmVld2F5KHN0cnVjdCBpbWFnZSAqaW1hZ2UsIHN0cnVjdCBwYXRjaCAqcGF0Y2gsCisJCQlzdHJ1Y3Qgc3RhdCAqc3QsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJdW5zaWduZWQgY2hhciBwcmVfc2hhMVsyMF0sIHBvc3Rfc2hhMVsyMF0sIG91cl9zaGExWzIwXTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBsZW47CisJaW50IHN0YXR1czsKKwljaGFyICppbWc7CisJc3RydWN0IGltYWdlIHRtcF9pbWFnZTsKKworCS8qIE5vIHBvaW50IGZhbGxpbmcgYmFjayB0byAzLXdheSBtZXJnZSBpbiB0aGVzZSBjYXNlcyAqLworCWlmIChwYXRjaC0+aXNfZGVsZXRlIHx8CisJICAgIFNfSVNHSVRMSU5LKHBhdGNoLT5vbGRfbW9kZSkgfHwgU19JU0dJVExJTksocGF0Y2gtPm5ld19tb2RlKSkKKwkJcmV0dXJuIC0xOworCisJLyogUHJlaW1hZ2UgdGhlIHBhdGNoIHdhcyBwcmVwYXJlZCBmb3IgKi8KKwlpZiAocGF0Y2gtPmlzX25ldykKKwkJd3JpdGVfc2hhMV9maWxlKCIiLCAwLCBibG9iX3R5cGUsIHByZV9zaGExKTsKKwllbHNlIGlmIChnZXRfc2hhMShwYXRjaC0+b2xkX3NoYTFfcHJlZml4LCBwcmVfc2hhMSkgfHwKKwkJIHJlYWRfYmxvYl9vYmplY3QoJmJ1ZiwgcHJlX3NoYTEsIHBhdGNoLT5vbGRfbW9kZSkpCisJCXJldHVybiBlcnJvcigicmVwb3NpdG9yeSBsYWNrcyB0aGUgbmVjZXNzYXJ5IGJsb2IgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIpOworCisJZnByaW50ZihzdGRlcnIsICJGYWxsaW5nIGJhY2sgdG8gdGhyZWUtd2F5IG1lcmdlLi4uXG4iKTsKKworCWltZyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJmxlbik7CisJcHJlcGFyZV9pbWFnZSgmdG1wX2ltYWdlLCBpbWcsIGxlbiwgMSk7CisJLyogQXBwbHkgdGhlIHBhdGNoIHRvIGdldCB0aGUgcG9zdCBpbWFnZSAqLworCWlmIChhcHBseV9mcmFnbWVudHMoJnRtcF9pbWFnZSwgcGF0Y2gpIDwgMCkgeworCQljbGVhcl9pbWFnZSgmdG1wX2ltYWdlKTsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBwb3N0X3NoYTFbXSBpcyB0aGVpcnMgKi8KKwl3cml0ZV9zaGExX2ZpbGUodG1wX2ltYWdlLmJ1ZiwgdG1wX2ltYWdlLmxlbiwgYmxvYl90eXBlLCBwb3N0X3NoYTEpOworCWNsZWFyX2ltYWdlKCZ0bXBfaW1hZ2UpOworCisJLyogb3VyX3NoYTFbXSBpcyBvdXJzICovCisJaWYgKHBhdGNoLT5pc19uZXcpIHsKKwkJaWYgKGxvYWRfY3VycmVudCgmdG1wX2ltYWdlLCBwYXRjaCkpCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCByZWFkIHRoZSBjdXJyZW50IGNvbnRlbnRzIG9mICclcyciLAorCQkJCSAgICAgcGF0Y2gtPm5ld19uYW1lKTsKKwl9IGVsc2UgeworCQlpZiAobG9hZF9wcmVpbWFnZSgmdG1wX2ltYWdlLCBwYXRjaCwgc3QsIGNlKSkKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IHJlYWQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgJyVzJyIsCisJCQkJICAgICBwYXRjaC0+b2xkX25hbWUpOworCX0KKwl3cml0ZV9zaGExX2ZpbGUodG1wX2ltYWdlLmJ1ZiwgdG1wX2ltYWdlLmxlbiwgYmxvYl90eXBlLCBvdXJfc2hhMSk7CisJY2xlYXJfaW1hZ2UoJnRtcF9pbWFnZSk7CisKKwkvKiBpbi1jb3JlIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIHBvc3QgYW5kIG91ciB1c2luZyBwcmUgYXMgYmFzZSAqLworCXN0YXR1cyA9IHRocmVlX3dheV9tZXJnZShpbWFnZSwgcGF0Y2gtPm5ld19uYW1lLAorCQkJCSBwcmVfc2hhMSwgb3VyX3NoYTEsIHBvc3Rfc2hhMSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gZmFsbCBiYWNrIG9uIHRocmVlLXdheSBtZXJnZS4uLlxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaWYgKHN0YXR1cykgeworCQlwYXRjaC0+Y29uZmxpY3RlZF90aHJlZXdheSA9IDE7CisJCWlmIChwYXRjaC0+aXNfbmV3KQorCQkJb2lkY2xyKCZwYXRjaC0+dGhyZWV3YXlfc3RhZ2VbMF0pOworCQllbHNlCisJCQloYXNoY3B5KHBhdGNoLT50aHJlZXdheV9zdGFnZVswXS5oYXNoLCBwcmVfc2hhMSk7CisJCWhhc2hjcHkocGF0Y2gtPnRocmVld2F5X3N0YWdlWzFdLmhhc2gsIG91cl9zaGExKTsKKwkJaGFzaGNweShwYXRjaC0+dGhyZWV3YXlfc3RhZ2VbMl0uaGFzaCwgcG9zdF9zaGExKTsKKwkJZnByaW50ZihzdGRlcnIsICJBcHBsaWVkIHBhdGNoIHRvICclcycgd2l0aCBjb25mbGljdHMuXG4iLCBwYXRjaC0+bmV3X25hbWUpOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiQXBwbGllZCBwYXRjaCB0byAnJXMnIGNsZWFubHkuXG4iLCBwYXRjaC0+bmV3X25hbWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBseV9kYXRhKHN0cnVjdCBwYXRjaCAqcGF0Y2gsIHN0cnVjdCBzdGF0ICpzdCwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlzdHJ1Y3QgaW1hZ2UgaW1hZ2U7CisKKwlpZiAobG9hZF9wcmVpbWFnZSgmaW1hZ2UsIHBhdGNoLCBzdCwgY2UpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHBhdGNoLT5kaXJlY3RfdG9fdGhyZWV3YXkgfHwKKwkgICAgYXBwbHlfZnJhZ21lbnRzKCZpbWFnZSwgcGF0Y2gpIDwgMCkgeworCQkvKiBOb3RlOiB3aXRoIC0tcmVqZWN0LCBhcHBseV9mcmFnbWVudHMoKSByZXR1cm5zIDAgKi8KKwkJaWYgKCF0aHJlZXdheSB8fCB0cnlfdGhyZWV3YXkoJmltYWdlLCBwYXRjaCwgc3QsIGNlKSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCXBhdGNoLT5yZXN1bHQgPSBpbWFnZS5idWY7CisJcGF0Y2gtPnJlc3VsdHNpemUgPSBpbWFnZS5sZW47CisJYWRkX3RvX2ZuX3RhYmxlKHBhdGNoKTsKKwlmcmVlKGltYWdlLmxpbmVfYWxsb2NhdGVkKTsKKworCWlmICgwIDwgcGF0Y2gtPmlzX2RlbGV0ZSAmJiBwYXRjaC0+cmVzdWx0c2l6ZSkKKwkJcmV0dXJuIGVycm9yKF8oInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiKSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElmICJwYXRjaCIgdGhhdCB3ZSBhcmUgbG9va2luZyBhdCBtb2RpZmllcyBvciBkZWxldGVzIHdoYXQgd2UgaGF2ZSwKKyAqIHdlIHdvdWxkIHdhbnQgaXQgbm90IHRvIGxvc2UgYW55IGxvY2FsIG1vZGlmaWNhdGlvbiB3ZSBoYXZlLCBlaXRoZXIKKyAqIGluIHRoZSB3b3JraW5nIHRyZWUgb3IgaW4gdGhlIGluZGV4LgorICoKKyAqIFRoaXMgYWxzbyBkZWNpZGVzIGlmIGEgbm9uLWdpdCBwYXRjaCBpcyBhIGNyZWF0aW9uIHBhdGNoIG9yIGEKKyAqIG1vZGlmaWNhdGlvbiB0byBhbiBleGlzdGluZyBlbXB0eSBmaWxlLiAgV2UgZG8gbm90IGNoZWNrIHRoZSBzdGF0ZQorICogb2YgdGhlIGN1cnJlbnQgdHJlZSBmb3IgYSBjcmVhdGlvbiBwYXRjaCBpbiB0aGlzIGZ1bmN0aW9uOyB0aGUgY2FsbGVyCisgKiBjaGVja19wYXRjaCgpIHNlcGFyYXRlbHkgbWFrZXMgc3VyZSAoYW5kIGVycm9ycyBvdXQgb3RoZXJ3aXNlKSB0aGF0CisgKiB0aGUgcGF0aCB0aGUgcGF0Y2ggY3JlYXRlcyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgY3VycmVudCB0cmVlLgorICovCitzdGF0aWMgaW50IGNoZWNrX3ByZWltYWdlKHN0cnVjdCBwYXRjaCAqcGF0Y2gsIHN0cnVjdCBjYWNoZV9lbnRyeSAqKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJY29uc3QgY2hhciAqb2xkX25hbWUgPSBwYXRjaC0+b2xkX25hbWU7CisJc3RydWN0IHBhdGNoICpwcmV2aW91cyA9IE5VTEw7CisJaW50IHN0YXRfcmV0ID0gMCwgc3RhdHVzOworCXVuc2lnbmVkIHN0X21vZGUgPSAwOworCisJaWYgKCFvbGRfbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlhc3NlcnQocGF0Y2gtPmlzX25ldyA8PSAwKTsKKwlwcmV2aW91cyA9IHByZXZpb3VzX3BhdGNoKHBhdGNoLCAmc3RhdHVzKTsKKworCWlmIChzdGF0dXMpCisJCXJldHVybiBlcnJvcihfKCJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIpLCBvbGRfbmFtZSk7CisJaWYgKHByZXZpb3VzKSB7CisJCXN0X21vZGUgPSBwcmV2aW91cy0+bmV3X21vZGU7CisJfSBlbHNlIGlmICghY2FjaGVkKSB7CisJCXN0YXRfcmV0ID0gbHN0YXQob2xkX25hbWUsIHN0KTsKKwkJaWYgKHN0YXRfcmV0ICYmIGVycm5vICE9IEVOT0VOVCkKKwkJCXJldHVybiBlcnJvcihfKCIlczogJXMiKSwgb2xkX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCisJaWYgKGNoZWNrX2luZGV4ICYmICFwcmV2aW91cykgeworCQlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3Mob2xkX25hbWUsIHN0cmxlbihvbGRfbmFtZSkpOworCQlpZiAocG9zIDwgMCkgeworCQkJaWYgKHBhdGNoLT5pc19uZXcgPCAwKQorCQkJCWdvdG8gaXNfbmV3OworCQkJcmV0dXJuIGVycm9yKF8oIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIpLCBvbGRfbmFtZSk7CisJCX0KKwkJKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWlmIChzdGF0X3JldCA8IDApIHsKKwkJCWlmIChjaGVja291dF90YXJnZXQoJnRoZV9pbmRleCwgKmNlLCBzdCkpCisJCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICghY2FjaGVkICYmIHZlcmlmeV9pbmRleF9tYXRjaCgqY2UsIHN0KSkKKwkJCXJldHVybiBlcnJvcihfKCIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiKSwgb2xkX25hbWUpOworCQlpZiAoY2FjaGVkKQorCQkJc3RfbW9kZSA9ICgqY2UpLT5jZV9tb2RlOworCX0gZWxzZSBpZiAoc3RhdF9yZXQgPCAwKSB7CisJCWlmIChwYXRjaC0+aXNfbmV3IDwgMCkKKwkJCWdvdG8gaXNfbmV3OworCQlyZXR1cm4gZXJyb3IoXygiJXM6ICVzIiksIG9sZF9uYW1lLCBzdHJlcnJvcihlcnJubykpOworCX0KKworCWlmICghY2FjaGVkICYmICFwcmV2aW91cykKKwkJc3RfbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KCpjZSwgc3QtPnN0X21vZGUpOworCisJaWYgKHBhdGNoLT5pc19uZXcgPCAwKQorCQlwYXRjaC0+aXNfbmV3ID0gMDsKKwlpZiAoIXBhdGNoLT5vbGRfbW9kZSkKKwkJcGF0Y2gtPm9sZF9tb2RlID0gc3RfbW9kZTsKKwlpZiAoKHN0X21vZGUgXiBwYXRjaC0+b2xkX21vZGUpICYgU19JRk1UKQorCQlyZXR1cm4gZXJyb3IoXygiJXM6IHdyb25nIHR5cGUiKSwgb2xkX25hbWUpOworCWlmIChzdF9tb2RlICE9IHBhdGNoLT5vbGRfbW9kZSkKKwkJd2FybmluZyhfKCIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iKSwKKwkJCW9sZF9uYW1lLCBzdF9tb2RlLCBwYXRjaC0+b2xkX21vZGUpOworCWlmICghcGF0Y2gtPm5ld19tb2RlICYmICFwYXRjaC0+aXNfZGVsZXRlKQorCQlwYXRjaC0+bmV3X21vZGUgPSBzdF9tb2RlOworCXJldHVybiAwOworCisgaXNfbmV3OgorCXBhdGNoLT5pc19uZXcgPSAxOworCXBhdGNoLT5pc19kZWxldGUgPSAwOworCWZyZWUocGF0Y2gtPm9sZF9uYW1lKTsKKwlwYXRjaC0+b2xkX25hbWUgPSBOVUxMOworCXJldHVybiAwOworfQorCisKKyNkZWZpbmUgRVhJU1RTX0lOX0lOREVYIDEKKyNkZWZpbmUgRVhJU1RTX0lOX1dPUktUUkVFIDIKKworc3RhdGljIGludCBjaGVja190b19jcmVhdGUoY29uc3QgY2hhciAqbmV3X25hbWUsIGludCBva19pZl9leGlzdHMpCit7CisJc3RydWN0IHN0YXQgbnN0OworCisJaWYgKGNoZWNrX2luZGV4ICYmCisJICAgIGNhY2hlX25hbWVfcG9zKG5ld19uYW1lLCBzdHJsZW4obmV3X25hbWUpKSA+PSAwICYmCisJICAgICFva19pZl9leGlzdHMpCisJCXJldHVybiBFWElTVFNfSU5fSU5ERVg7CisJaWYgKGNhY2hlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWxzdGF0KG5ld19uYW1lLCAmbnN0KSkgeworCQlpZiAoU19JU0RJUihuc3Quc3RfbW9kZSkgfHwgb2tfaWZfZXhpc3RzKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIEEgbGVhZGluZyBjb21wb25lbnQgb2YgbmV3X25hbWUgbWlnaHQgYmUgYSBzeW1saW5rCisJCSAqIHRoYXQgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCB3aXRoIHRoaXMgcGF0Y2gsIGJ1dAorCQkgKiBzdGlsbCBwb2ludGluZyBhdCBzb21ld2hlcmUgdGhhdCBoYXMgdGhlIHBhdGguCisJCSAqIEluIHN1Y2ggYSBjYXNlLCBwYXRoICJuZXdfbmFtZSIgZG9lcyBub3QgZXhpc3QgYXMKKwkJICogZmFyIGFzIGdpdCBpcyBjb25jZXJuZWQuCisJCSAqLworCQlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKG5ld19uYW1lLCBzdHJsZW4obmV3X25hbWUpKSkKKwkJCXJldHVybiAwOworCisJCXJldHVybiBFWElTVFNfSU5fV09SS1RSRUU7CisJfSBlbHNlIGlmICgoZXJybm8gIT0gRU5PRU5UKSAmJiAoZXJybm8gIT0gRU5PVERJUikpIHsKKwkJcmV0dXJuIGVycm9yKCIlczogJXMiLCBuZXdfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93IHN5bWxpbmtzIGluIHRoZSBwcmVpbWFnZSBhcmUKKyAqIG1hbmlwdWxhdGVkIGJ5IHRoZSBwYXRjaGVzLiAgQSBwYXRjaCB0byBhZGQgYS9iL2Mgd2hlcmUgYS9iCisgKiBpcyBhIHN5bWxpbmsgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGFmZmVjdCB0aGUgZGlyZWN0b3J5CisgKiB0aGUgc3ltbGluayBwb2ludHMgYXQsIGJ1dCBpZiB0aGUgc2FtZSBwYXRjaCByZW1vdmVzIGEvYiwKKyAqIGl0IGlzIHBlcmZlY3RseSBmaW5lLCBhcyB0aGUgcGF0Y2ggcmVtb3ZlcyBhL2IgdG8gbWFrZSByb29tCisgKiB0byBjcmVhdGUgYSBkaXJlY3RvcnkgYS9iIHNvIHRoYXQgYS9iL2MgY2FuIGJlIGNyZWF0ZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3ltbGlua19jaGFuZ2VzOworI2RlZmluZSBTWU1MSU5LX0dPRVNfQVdBWSAwMQorI2RlZmluZSBTWU1MSU5LX0lOX1JFU1VMVCAwMgorCitzdGF0aWMgdWludHB0cl90IHJlZ2lzdGVyX3N5bWxpbmtfY2hhbmdlcyhjb25zdCBjaGFyICpwYXRoLCB1aW50cHRyX3Qgd2hhdCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqZW50OworCisJZW50ID0gc3RyaW5nX2xpc3RfbG9va3VwKCZzeW1saW5rX2NoYW5nZXMsIHBhdGgpOworCWlmICghZW50KSB7CisJCWVudCA9IHN0cmluZ19saXN0X2luc2VydCgmc3ltbGlua19jaGFuZ2VzLCBwYXRoKTsKKwkJZW50LT51dGlsID0gKHZvaWQgKikwOworCX0KKwllbnQtPnV0aWwgPSAodm9pZCAqKSh3aGF0IHwgKCh1aW50cHRyX3QpZW50LT51dGlsKSk7CisJcmV0dXJuICh1aW50cHRyX3QpZW50LT51dGlsOworfQorCitzdGF0aWMgdWludHB0cl90IGNoZWNrX3N5bWxpbmtfY2hhbmdlcyhjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICplbnQ7CisKKwllbnQgPSBzdHJpbmdfbGlzdF9sb29rdXAoJnN5bWxpbmtfY2hhbmdlcywgcGF0aCk7CisJaWYgKCFlbnQpCisJCXJldHVybiAwOworCXJldHVybiAodWludHB0cl90KWVudC0+dXRpbDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9zeW1saW5rX2NoYW5nZXMoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlmb3IgKCA7IHBhdGNoOyBwYXRjaCA9IHBhdGNoLT5uZXh0KSB7CisJCWlmICgocGF0Y2gtPm9sZF9uYW1lICYmIFNfSVNMTksocGF0Y2gtPm9sZF9tb2RlKSkgJiYKKwkJICAgIChwYXRjaC0+aXNfcmVuYW1lIHx8IHBhdGNoLT5pc19kZWxldGUpKQorCQkJLyogdGhlIHN5bWxpbmsgYXQgcGF0Y2gtPm9sZF9uYW1lIGlzIHJlbW92ZWQgKi8KKwkJCXJlZ2lzdGVyX3N5bWxpbmtfY2hhbmdlcyhwYXRjaC0+b2xkX25hbWUsIFNZTUxJTktfR09FU19BV0FZKTsKKworCQlpZiAocGF0Y2gtPm5ld19uYW1lICYmIFNfSVNMTksocGF0Y2gtPm5ld19tb2RlKSkKKwkJCS8qIHRoZSBzeW1saW5rIGF0IHBhdGNoLT5uZXdfbmFtZSBpcyBjcmVhdGVkIG9yIHJlbWFpbnMgKi8KKwkJCXJlZ2lzdGVyX3N5bWxpbmtfY2hhbmdlcyhwYXRjaC0+bmV3X25hbWUsIFNZTUxJTktfSU5fUkVTVUxUKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGF0aF9pc19iZXlvbmRfc3ltbGlua18xKHN0cnVjdCBzdHJidWYgKm5hbWUpCit7CisJZG8geworCQl1bnNpZ25lZCBpbnQgY2hhbmdlOworCisJCXdoaWxlICgtLW5hbWUtPmxlbiAmJiBuYW1lLT5idWZbbmFtZS0+bGVuXSAhPSAnLycpCisJCQk7IC8qIHNjYW4gYmFja3dhcmRzICovCisJCWlmICghbmFtZS0+bGVuKQorCQkJYnJlYWs7CisJCW5hbWUtPmJ1ZltuYW1lLT5sZW5dID0gJ1wwJzsKKwkJY2hhbmdlID0gY2hlY2tfc3ltbGlua19jaGFuZ2VzKG5hbWUtPmJ1Zik7CisJCWlmIChjaGFuZ2UgJiBTWU1MSU5LX0lOX1JFU1VMVCkKKwkJCXJldHVybiAxOworCQlpZiAoY2hhbmdlICYgU1lNTElOS19HT0VTX0FXQVkpCisJCQkvKgorCQkJICogVGhpcyBjYW5ub3QgYmUgInJldHVybiAwIiwgYmVjYXVzZSB3ZSBtYXkKKwkJCSAqIHNlZSBhIG5ldyBvbmUgY3JlYXRlZCBhdCBhIGhpZ2hlciBsZXZlbC4KKwkJCSAqLworCQkJY29udGludWU7CisKKwkJLyogb3RoZXJ3aXNlLCBjaGVjayB0aGUgcHJlaW1hZ2UgKi8KKwkJaWYgKGNoZWNrX2luZGV4KSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJCQljZSA9IGNhY2hlX2ZpbGVfZXhpc3RzKG5hbWUtPmJ1ZiwgbmFtZS0+bGVuLCBpZ25vcmVfY2FzZSk7CisJCQlpZiAoY2UgJiYgU19JU0xOSyhjZS0+Y2VfbW9kZSkpCisJCQkJcmV0dXJuIDE7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJCWlmICghbHN0YXQobmFtZS0+YnVmLCAmc3QpICYmIFNfSVNMTksoc3Quc3RfbW9kZSkpCisJCQkJcmV0dXJuIDE7CisJCX0KKwl9IHdoaWxlICgxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXRoX2lzX2JleW9uZF9zeW1saW5rKGNvbnN0IGNoYXIgKm5hbWVfKQoreworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CisKKwlhc3NlcnQoKm5hbWVfICE9ICdcMCcpOworCXN0cmJ1Zl9hZGRzdHIoJm5hbWUsIG5hbWVfKTsKKwlyZXQgPSBwYXRoX2lzX2JleW9uZF9zeW1saW5rXzEoJm5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRpZV9vbl91bnNhZmVfcGF0aChzdHJ1Y3QgcGF0Y2ggKnBhdGNoKQoreworCWNvbnN0IGNoYXIgKm9sZF9uYW1lID0gTlVMTDsKKwljb25zdCBjaGFyICpuZXdfbmFtZSA9IE5VTEw7CisJaWYgKHBhdGNoLT5pc19kZWxldGUpCisJCW9sZF9uYW1lID0gcGF0Y2gtPm9sZF9uYW1lOworCWVsc2UgaWYgKCFwYXRjaC0+aXNfbmV3ICYmICFwYXRjaC0+aXNfY29weSkKKwkJb2xkX25hbWUgPSBwYXRjaC0+b2xkX25hbWU7CisJaWYgKCFwYXRjaC0+aXNfZGVsZXRlKQorCQluZXdfbmFtZSA9IHBhdGNoLT5uZXdfbmFtZTsKKworCWlmIChvbGRfbmFtZSAmJiAhdmVyaWZ5X3BhdGgob2xkX25hbWUpKQorCQlkaWUoXygiaW52YWxpZCBwYXRoICclcyciKSwgb2xkX25hbWUpOworCWlmIChuZXdfbmFtZSAmJiAhdmVyaWZ5X3BhdGgobmV3X25hbWUpKQorCQlkaWUoXygiaW52YWxpZCBwYXRoICclcyciKSwgbmV3X25hbWUpOworfQorCisvKgorICogQ2hlY2sgYW5kIGFwcGx5IHRoZSBwYXRjaCBpbi1jb3JlOyBsZWF2ZSB0aGUgcmVzdWx0IGluIHBhdGNoLT5yZXN1bHQKKyAqIGZvciB0aGUgY2FsbGVyIHRvIHdyaXRlIGl0IG91dCB0byB0aGUgZmluYWwgZGVzdGluYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfcGF0Y2goc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljb25zdCBjaGFyICpvbGRfbmFtZSA9IHBhdGNoLT5vbGRfbmFtZTsKKwljb25zdCBjaGFyICpuZXdfbmFtZSA9IHBhdGNoLT5uZXdfbmFtZTsKKwljb25zdCBjaGFyICpuYW1lID0gb2xkX25hbWUgPyBvbGRfbmFtZSA6IG5ld19uYW1lOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBOVUxMOworCXN0cnVjdCBwYXRjaCAqdHBhdGNoOworCWludCBva19pZl9leGlzdHM7CisJaW50IHN0YXR1czsKKworCXBhdGNoLT5yZWplY3RlZCA9IDE7IC8qIHdlIHdpbGwgZHJvcCB0aGlzIGFmdGVyIHdlIHN1Y2NlZWQgKi8KKworCXN0YXR1cyA9IGNoZWNrX3ByZWltYWdlKHBhdGNoLCAmY2UsICZzdCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlvbGRfbmFtZSA9IHBhdGNoLT5vbGRfbmFtZTsKKworCS8qCisJICogQSB0eXBlLWNoYW5nZSBkaWZmIGlzIGFsd2F5cyBzcGxpdCBpbnRvIGEgcGF0Y2ggdG8gZGVsZXRlCisJICogb2xkLCBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHBhdGNoIHRvIGNyZWF0ZSBuZXcgKHNlZQorCSAqIGRpZmYuYzo6cnVuX2RpZmYoKSk7IGluIHN1Y2ggYSBjYXNlIGl0IGlzIE9rIHRoYXQgdGhlIGVudHJ5CisJICogdG8gYmUgZGVsZXRlZCBieSB0aGUgcHJldmlvdXMgcGF0Y2ggaXMgc3RpbGwgaW4gdGhlIHdvcmtpbmcKKwkgKiB0cmVlIGFuZCBpbiB0aGUgaW5kZXguCisJICoKKwkgKiBBIHBhdGNoIHRvIHN3YXAtcmVuYW1lIGJldHdlZW4gQSBhbmQgQiB3b3VsZCBmaXJzdCByZW5hbWUgQQorCSAqIHRvIEIgYW5kIHRoZW4gcmVuYW1lIEIgdG8gQS4gIFdoaWxlIGFwcGx5aW5nIHRoZSBmaXJzdCBvbmUsCisJICogdGhlIHByZXNlbmNlIG9mIEIgc2hvdWxkIG5vdCBzdG9wIEEgZnJvbSBnZXR0aW5nIHJlbmFtZWQgdG8KKwkgKiBCOyBhc2sgdG9fYmVfZGVsZXRlZCgpIGFib3V0IHRoZSBsYXRlciByZW5hbWUuICBSZW1vdmFsIG9mCisJICogQiBhbmQgcmVuYW1lIGZyb20gQSB0byBCIGlzIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGJ5IGFza2luZworCSAqIHdhc19kZWxldGVkKCkuCisJICovCisJaWYgKCh0cGF0Y2ggPSBpbl9mbl90YWJsZShuZXdfbmFtZSkpICYmCisJICAgICh3YXNfZGVsZXRlZCh0cGF0Y2gpIHx8IHRvX2JlX2RlbGV0ZWQodHBhdGNoKSkpCisJCW9rX2lmX2V4aXN0cyA9IDE7CisJZWxzZQorCQlva19pZl9leGlzdHMgPSAwOworCisJaWYgKG5ld19uYW1lICYmCisJICAgICgoMCA8IHBhdGNoLT5pc19uZXcpIHx8IHBhdGNoLT5pc19yZW5hbWUgfHwgcGF0Y2gtPmlzX2NvcHkpKSB7CisJCWludCBlcnIgPSBjaGVja190b19jcmVhdGUobmV3X25hbWUsIG9rX2lmX2V4aXN0cyk7CisKKwkJaWYgKGVyciAmJiB0aHJlZXdheSkgeworCQkJcGF0Y2gtPmRpcmVjdF90b190aHJlZXdheSA9IDE7CisJCX0gZWxzZSBzd2l0Y2ggKGVycikgeworCQljYXNlIDA6CisJCQlicmVhazsgLyogaGFwcHkgKi8KKwkJY2FzZSBFWElTVFNfSU5fSU5ERVg6CisJCQlyZXR1cm4gZXJyb3IoXygiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IiksIG5ld19uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIEVYSVNUU19JTl9XT1JLVFJFRToKKwkJCXJldHVybiBlcnJvcihfKCIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiKSwKKwkJCQkgICAgIG5ld19uYW1lKTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlpZiAoIXBhdGNoLT5uZXdfbW9kZSkgeworCQkJaWYgKDAgPCBwYXRjaC0+aXNfbmV3KQorCQkJCXBhdGNoLT5uZXdfbW9kZSA9IFNfSUZSRUcgfCAwNjQ0OworCQkJZWxzZQorCQkJCXBhdGNoLT5uZXdfbW9kZSA9IHBhdGNoLT5vbGRfbW9kZTsKKwkJfQorCX0KKworCWlmIChuZXdfbmFtZSAmJiBvbGRfbmFtZSkgeworCQlpbnQgc2FtZSA9ICFzdHJjbXAob2xkX25hbWUsIG5ld19uYW1lKTsKKwkJaWYgKCFwYXRjaC0+bmV3X21vZGUpCisJCQlwYXRjaC0+bmV3X21vZGUgPSBwYXRjaC0+b2xkX21vZGU7CisJCWlmICgocGF0Y2gtPm9sZF9tb2RlIF4gcGF0Y2gtPm5ld19tb2RlKSAmIFNfSUZNVCkgeworCQkJaWYgKHNhbWUpCisJCQkJcmV0dXJuIGVycm9yKF8oIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgIgorCQkJCQkgICAgICAgIm1hdGNoIG9sZCBtb2RlICglbykiKSwKKwkJCQkJcGF0Y2gtPm5ld19tb2RlLCBuZXdfbmFtZSwKKwkJCQkJcGF0Y2gtPm9sZF9tb2RlKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gZXJyb3IoXygibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCAiCisJCQkJCSAgICAgICAibWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIpLAorCQkJCQlwYXRjaC0+bmV3X21vZGUsIG5ld19uYW1lLAorCQkJCQlwYXRjaC0+b2xkX21vZGUsIG9sZF9uYW1lKTsKKwkJfQorCX0KKworCWlmICghdW5zYWZlX3BhdGhzKQorCQlkaWVfb25fdW5zYWZlX3BhdGgocGF0Y2gpOworCisJLyoKKwkgKiBBbiBhdHRlbXB0IHRvIHJlYWQgZnJvbSBvciBkZWxldGUgYSBwYXRoIHRoYXQgaXMgYmV5b25kIGEKKwkgKiBzeW1ib2xpYyBsaW5rIHdpbGwgYmUgcHJldmVudGVkIGJ5IGxvYWRfcGF0Y2hfdGFyZ2V0KCkgdGhhdAorCSAqIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFwcGx5X2RhdGEoKSBzbyB3ZSBkbyBub3QKKwkgKiBoYXZlIHRvIHdvcnJ5IGFib3V0IGEgcGF0Y2ggbWFya2VkIHdpdGggImlzX2RlbGV0ZSIgYml0CisJICogaGVyZS4gIFdlIGhvd2V2ZXIgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcGF0Y2ggcmVzdWx0CisJICogaXMgbm90IGRlcG9zaXRlZCB0byBhIHBhdGggdGhhdCBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rCisJICogaGVyZS4KKwkgKi8KKwlpZiAoIXBhdGNoLT5pc19kZWxldGUgJiYgcGF0aF9pc19iZXlvbmRfc3ltbGluayhwYXRjaC0+bmV3X25hbWUpKQorCQlyZXR1cm4gZXJyb3IoXygiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiKSwKKwkJCSAgICAgcGF0Y2gtPm5ld19uYW1lKTsKKworCWlmIChhcHBseV9kYXRhKHBhdGNoLCAmc3QsIGNlKSA8IDApCisJCXJldHVybiBlcnJvcihfKCIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiKSwgbmFtZSk7CisJcGF0Y2gtPnJlamVjdGVkID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19wYXRjaF9saXN0KHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaW50IGVyciA9IDA7CisKKwlwcmVwYXJlX3N5bWxpbmtfY2hhbmdlcyhwYXRjaCk7CisJcHJlcGFyZV9mbl90YWJsZShwYXRjaCk7CisJd2hpbGUgKHBhdGNoKSB7CisJCWlmIChhcHBseV92ZXJib3NlbHkpCisJCQlzYXlfcGF0Y2hfbmFtZShzdGRlcnIsCisJCQkJICAgICAgIF8oIkNoZWNraW5nIHBhdGNoICVzLi4uIiksIHBhdGNoKTsKKwkJZXJyIHw9IGNoZWNrX3BhdGNoKHBhdGNoKTsKKwkJcGF0Y2ggPSBwYXRjaC0+bmV4dDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyogVGhpcyBmdW5jdGlvbiB0cmllcyB0byByZWFkIHRoZSBzaGExIGZyb20gdGhlIGN1cnJlbnQgaW5kZXggKi8KK3N0YXRpYyBpbnQgZ2V0X2N1cnJlbnRfc2hhMShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBwb3M7CisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJcmV0dXJuIC0xOworCXBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIHN0cmxlbihwYXRoKSk7CisJaWYgKHBvcyA8IDApCisJCXJldHVybiAtMTsKKwloYXNoY3B5KHNoYTEsIGFjdGl2ZV9jYWNoZVtwb3NdLT5zaGExKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcmVpbWFnZV9zaGExX2luX2dpdGxpbmtfcGF0Y2goc3RydWN0IHBhdGNoICpwLCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdKQoreworCS8qCisJICogQSB1c2FibGUgZ2l0bGluayBwYXRjaCBoYXMgb25seSBvbmUgZnJhZ21lbnQgKGh1bmspIHRoYXQgbG9va3MgbGlrZToKKwkgKiBAQCAtMSArMSBAQAorCSAqIC1TdWJwcm9qZWN0IGNvbW1pdCA8b2xkIHNoYTE+CisJICogK1N1YnByb2plY3QgY29tbWl0IDxuZXcgc2hhMT4KKwkgKiBvcgorCSAqIEBAIC0xICswLDAgQEAKKwkgKiAtU3VicHJvamVjdCBjb21taXQgPG9sZCBzaGExPgorCSAqIGZvciBhIHJlbW92YWwgcGF0Y2guCisJICovCisJc3RydWN0IGZyYWdtZW50ICpodW5rID0gcC0+ZnJhZ21lbnRzOworCXN0YXRpYyBjb25zdCBjaGFyIGhlYWRpbmdbXSA9ICItU3VicHJvamVjdCBjb21taXQgIjsKKwljaGFyICpwcmVpbWFnZTsKKworCWlmICgvKiBkb2VzIHRoZSBwYXRjaCBoYXZlIG9ubHkgb25lIGh1bms/ICovCisJICAgIGh1bmsgJiYgIWh1bmstPm5leHQgJiYKKwkgICAgLyogaXMgaXRzIHByZWltYWdlIG9uZSBsaW5lPyAqLworCSAgICBodW5rLT5vbGRwb3MgPT0gMSAmJiBodW5rLT5vbGRsaW5lcyA9PSAxICYmCisJICAgIC8qIGRvZXMgcHJlaW1hZ2UgYmVnaW4gd2l0aCB0aGUgaGVhZGluZz8gKi8KKwkgICAgKHByZWltYWdlID0gbWVtY2hyKGh1bmstPnBhdGNoLCAnXG4nLCBodW5rLT5zaXplKSkgIT0gTlVMTCAmJgorCSAgICBzdGFydHNfd2l0aCgrK3ByZWltYWdlLCBoZWFkaW5nKSAmJgorCSAgICAvKiBkb2VzIGl0IHJlY29yZCBmdWxsIFNIQS0xPyAqLworCSAgICAhZ2V0X3NoYTFfaGV4KHByZWltYWdlICsgc2l6ZW9mKGhlYWRpbmcpIC0gMSwgc2hhMSkgJiYKKwkgICAgcHJlaW1hZ2Vbc2l6ZW9mKGhlYWRpbmcpICsgNDAgLSAxXSA9PSAnXG4nICYmCisJICAgIC8qIGRvZXMgdGhlIGFiYnJldmlhdGVkIG5hbWUgb24gdGhlIGluZGV4IGxpbmUgYWdyZWUgd2l0aCBpdD8gKi8KKwkgICAgc3RhcnRzX3dpdGgocHJlaW1hZ2UgKyBzaXplb2YoaGVhZGluZykgLSAxLCBwLT5vbGRfc2hhMV9wcmVmaXgpKQorCQlyZXR1cm4gMDsgLyogaXQgYWxsIGxvb2tzIGZpbmUgKi8KKworCS8qIHdlIG1heSBoYXZlIGZ1bGwgb2JqZWN0IG5hbWUgb24gdGhlIGluZGV4IGxpbmUgKi8KKwlyZXR1cm4gZ2V0X3NoYTFfaGV4KHAtPm9sZF9zaGExX3ByZWZpeCwgc2hhMSk7Cit9CisKKy8qIEJ1aWxkIGFuIGluZGV4IHRoYXQgY29udGFpbnMgdGhlIGp1c3QgdGhlIGZpbGVzIG5lZWRlZCBmb3IgYSAzd2F5IG1lcmdlICovCitzdGF0aWMgdm9pZCBidWlsZF9mYWtlX2FuY2VzdG9yKHN0cnVjdCBwYXRjaCAqbGlzdCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHBhdGNoICpwYXRjaDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgcmVzdWx0ID0geyBOVUxMIH07CisJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9jazsKKworCS8qIE9uY2Ugd2Ugc3RhcnQgc3VwcG9ydGluZyB0aGUgcmV2ZXJzZSBwYXRjaCwgaXQgbWF5IGJlCisJICogd29ydGggc2hvd2luZyB0aGUgbmV3IHNoYTEgcHJlZml4LCBidXQgdW50aWwgdGhlbi4uLgorCSAqLworCWZvciAocGF0Y2ggPSBsaXN0OyBwYXRjaDsgcGF0Y2ggPSBwYXRjaC0+bmV4dCkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCQljb25zdCBjaGFyICpuYW1lOworCisJCW5hbWUgPSBwYXRjaC0+b2xkX25hbWUgPyBwYXRjaC0+b2xkX25hbWUgOiBwYXRjaC0+bmV3X25hbWU7CisJCWlmICgwIDwgcGF0Y2gtPmlzX25ldykKKwkJCWNvbnRpbnVlOworCisJCWlmIChTX0lTR0lUTElOSyhwYXRjaC0+b2xkX21vZGUpKSB7CisJCQlpZiAoIXByZWltYWdlX3NoYTFfaW5fZ2l0bGlua19wYXRjaChwYXRjaCwgc2hhMSkpCisJCQkJOyAvKiBvaywgdGhlIHRleHR1YWwgcGFydCBsb29rcyBzYW5lICovCisJCQllbHNlCisJCQkJZGllKCJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyBmb3Igc3VibW9kdWxlICVzIiwKKwkJCQkgICAgbmFtZSk7CisJCX0gZWxzZSBpZiAoIWdldF9zaGExX2Jsb2IocGF0Y2gtPm9sZF9zaGExX3ByZWZpeCwgc2hhMSkpIHsKKwkJCTsgLyogb2sgKi8KKwkJfSBlbHNlIGlmICghcGF0Y2gtPmxpbmVzX2FkZGVkICYmICFwYXRjaC0+bGluZXNfZGVsZXRlZCkgeworCQkJLyogbW9kZS1vbmx5IGNoYW5nZTogdXBkYXRlIHRoZSBjdXJyZW50ICovCisJCQlpZiAoZ2V0X2N1cnJlbnRfc2hhMShwYXRjaC0+b2xkX25hbWUsIHNoYTEpKQorCQkJCWRpZSgibW9kZSBjaGFuZ2UgZm9yICVzLCB3aGljaCBpcyBub3QgIgorCQkJCSAgICAiaW4gY3VycmVudCBIRUFEIiwgbmFtZSk7CisJCX0gZWxzZQorCQkJZGllKCJzaGExIGluZm9ybWF0aW9uIGlzIGxhY2tpbmcgb3IgdXNlbGVzcyAiCisJCQkgICAgIiglcykuIiwgbmFtZSk7CisKKwkJY2UgPSBtYWtlX2NhY2hlX2VudHJ5KHBhdGNoLT5vbGRfbW9kZSwgc2hhMSwgbmFtZSwgMCwgMCk7CisJCWlmICghY2UpCisJCQlkaWUoXygibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIpLCBuYW1lKTsKKwkJaWYgKGFkZF9pbmRleF9lbnRyeSgmcmVzdWx0LCBjZSwgQUREX0NBQ0hFX09LX1RPX0FERCkpCisJCQlkaWUgKCJDb3VsZCBub3QgYWRkICVzIHRvIHRlbXBvcmFyeSBpbmRleCIsIG5hbWUpOworCX0KKworCWhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJmxvY2ssIGZpbGVuYW1lLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmcmVzdWx0LCAmbG9jaywgQ09NTUlUX0xPQ0spKQorCQlkaWUgKCJDb3VsZCBub3Qgd3JpdGUgdGVtcG9yYXJ5IGluZGV4IHRvICVzIiwgZmlsZW5hbWUpOworCisJZGlzY2FyZF9pbmRleCgmcmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQgc3RhdF9wYXRjaF9saXN0KHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaW50IGZpbGVzLCBhZGRzLCBkZWxzOworCisJZm9yIChmaWxlcyA9IGFkZHMgPSBkZWxzID0gMCA7IHBhdGNoIDsgcGF0Y2ggPSBwYXRjaC0+bmV4dCkgeworCQlmaWxlcysrOworCQlhZGRzICs9IHBhdGNoLT5saW5lc19hZGRlZDsKKwkJZGVscyArPSBwYXRjaC0+bGluZXNfZGVsZXRlZDsKKwkJc2hvd19zdGF0cyhwYXRjaCk7CisJfQorCisJcHJpbnRfc3RhdF9zdW1tYXJ5KHN0ZG91dCwgZmlsZXMsIGFkZHMsIGRlbHMpOworfQorCitzdGF0aWMgdm9pZCBudW1zdGF0X3BhdGNoX2xpc3Qoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlmb3IgKCA7IHBhdGNoOyBwYXRjaCA9IHBhdGNoLT5uZXh0KSB7CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCW5hbWUgPSBwYXRjaC0+bmV3X25hbWUgPyBwYXRjaC0+bmV3X25hbWUgOiBwYXRjaC0+b2xkX25hbWU7CisJCWlmIChwYXRjaC0+aXNfYmluYXJ5KQorCQkJcHJpbnRmKCItXHQtXHQiKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlZFx0JWRcdCIsIHBhdGNoLT5saW5lc19hZGRlZCwgcGF0Y2gtPmxpbmVzX2RlbGV0ZWQpOworCQl3cml0ZV9uYW1lX3F1b3RlZChuYW1lLCBzdGRvdXQsIGxpbmVfdGVybWluYXRpb24pOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19maWxlX21vZGVfbmFtZShjb25zdCBjaGFyICpuZXdkZWxldGUsIHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChtb2RlKQorCQlwcmludGYoIiAlcyBtb2RlICUwNm8gJXNcbiIsIG5ld2RlbGV0ZSwgbW9kZSwgbmFtZSk7CisJZWxzZQorCQlwcmludGYoIiAlcyAlc1xuIiwgbmV3ZGVsZXRlLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19tb2RlX2NoYW5nZShzdHJ1Y3QgcGF0Y2ggKnAsIGludCBzaG93X25hbWUpCit7CisJaWYgKHAtPm9sZF9tb2RlICYmIHAtPm5ld19tb2RlICYmIHAtPm9sZF9tb2RlICE9IHAtPm5ld19tb2RlKSB7CisJCWlmIChzaG93X25hbWUpCisJCQlwcmludGYoIiBtb2RlIGNoYW5nZSAlMDZvID0+ICUwNm8gJXNcbiIsCisJCQkgICAgICAgcC0+b2xkX21vZGUsIHAtPm5ld19tb2RlLCBwLT5uZXdfbmFtZSk7CisJCWVsc2UKKwkJCXByaW50ZigiIG1vZGUgY2hhbmdlICUwNm8gPT4gJTA2b1xuIiwKKwkJCSAgICAgICBwLT5vbGRfbW9kZSwgcC0+bmV3X21vZGUpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19yZW5hbWVfY29weShzdHJ1Y3QgcGF0Y2ggKnApCit7CisJY29uc3QgY2hhciAqcmVuYW1lY29weSA9IHAtPmlzX3JlbmFtZSA/ICJyZW5hbWUiIDogImNvcHkiOworCWNvbnN0IGNoYXIgKm9sZCwgKm5ldzsKKworCS8qIEZpbmQgY29tbW9uIHByZWZpeCAqLworCW9sZCA9IHAtPm9sZF9uYW1lOworCW5ldyA9IHAtPm5ld19uYW1lOworCXdoaWxlICgxKSB7CisJCWNvbnN0IGNoYXIgKnNsYXNoX29sZCwgKnNsYXNoX25ldzsKKwkJc2xhc2hfb2xkID0gc3RyY2hyKG9sZCwgJy8nKTsKKwkJc2xhc2hfbmV3ID0gc3RyY2hyKG5ldywgJy8nKTsKKwkJaWYgKCFzbGFzaF9vbGQgfHwKKwkJICAgICFzbGFzaF9uZXcgfHwKKwkJICAgIHNsYXNoX29sZCAtIG9sZCAhPSBzbGFzaF9uZXcgLSBuZXcgfHwKKwkJICAgIG1lbWNtcChvbGQsIG5ldywgc2xhc2hfbmV3IC0gbmV3KSkKKwkJCWJyZWFrOworCQlvbGQgPSBzbGFzaF9vbGQgKyAxOworCQluZXcgPSBzbGFzaF9uZXcgKyAxOworCX0KKwkvKiBwLT5vbGRfbmFtZSB0aHJ1IG9sZCBpcyB0aGUgY29tbW9uIHByZWZpeCwgYW5kIG9sZCBhbmQgbmV3CisJICogdGhyb3VnaCB0aGUgZW5kIG9mIG5hbWVzIGFyZSByZW5hbWVzCisJICovCisJaWYgKG9sZCAhPSBwLT5vbGRfbmFtZSkKKwkJcHJpbnRmKCIgJXMgJS4qc3slcyA9PiAlc30gKCVkJSUpXG4iLCByZW5hbWVjb3B5LAorCQkgICAgICAgKGludCkob2xkIC0gcC0+b2xkX25hbWUpLCBwLT5vbGRfbmFtZSwKKwkJICAgICAgIG9sZCwgbmV3LCBwLT5zY29yZSk7CisJZWxzZQorCQlwcmludGYoIiAlcyAlcyA9PiAlcyAoJWQlJSlcbiIsIHJlbmFtZWNvcHksCisJCSAgICAgICBwLT5vbGRfbmFtZSwgcC0+bmV3X25hbWUsIHAtPnNjb3JlKTsKKwlzaG93X21vZGVfY2hhbmdlKHAsIDApOworfQorCitzdGF0aWMgdm9pZCBzdW1tYXJ5X3BhdGNoX2xpc3Qoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlzdHJ1Y3QgcGF0Y2ggKnA7CisKKwlmb3IgKHAgPSBwYXRjaDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPmlzX25ldykKKwkJCXNob3dfZmlsZV9tb2RlX25hbWUoImNyZWF0ZSIsIHAtPm5ld19tb2RlLCBwLT5uZXdfbmFtZSk7CisJCWVsc2UgaWYgKHAtPmlzX2RlbGV0ZSkKKwkJCXNob3dfZmlsZV9tb2RlX25hbWUoImRlbGV0ZSIsIHAtPm9sZF9tb2RlLCBwLT5vbGRfbmFtZSk7CisJCWVsc2UgeworCQkJaWYgKHAtPmlzX3JlbmFtZSB8fCBwLT5pc19jb3B5KQorCQkJCXNob3dfcmVuYW1lX2NvcHkocCk7CisJCQllbHNlIHsKKwkJCQlpZiAocC0+c2NvcmUpIHsKKwkJCQkJcHJpbnRmKCIgcmV3cml0ZSAlcyAoJWQlJSlcbiIsCisJCQkJCSAgICAgICBwLT5uZXdfbmFtZSwgcC0+c2NvcmUpOworCQkJCQlzaG93X21vZGVfY2hhbmdlKHAsIDApOworCQkJCX0KKwkJCQllbHNlCisJCQkJCXNob3dfbW9kZV9jaGFuZ2UocCwgMSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhdGNoX3N0YXRzKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaW50IGxpbmVzID0gcGF0Y2gtPmxpbmVzX2FkZGVkICsgcGF0Y2gtPmxpbmVzX2RlbGV0ZWQ7CisKKwlpZiAobGluZXMgPiBtYXhfY2hhbmdlKQorCQltYXhfY2hhbmdlID0gbGluZXM7CisJaWYgKHBhdGNoLT5vbGRfbmFtZSkgeworCQlpbnQgbGVuID0gcXVvdGVfY19zdHlsZShwYXRjaC0+b2xkX25hbWUsIE5VTEwsIE5VTEwsIDApOworCQlpZiAoIWxlbikKKwkJCWxlbiA9IHN0cmxlbihwYXRjaC0+b2xkX25hbWUpOworCQlpZiAobGVuID4gbWF4X2xlbikKKwkJCW1heF9sZW4gPSBsZW47CisJfQorCWlmIChwYXRjaC0+bmV3X25hbWUpIHsKKwkJaW50IGxlbiA9IHF1b3RlX2Nfc3R5bGUocGF0Y2gtPm5ld19uYW1lLCBOVUxMLCBOVUxMLCAwKTsKKwkJaWYgKCFsZW4pCisJCQlsZW4gPSBzdHJsZW4ocGF0Y2gtPm5ld19uYW1lKTsKKwkJaWYgKGxlbiA+IG1heF9sZW4pCisJCQltYXhfbGVuID0gbGVuOworCX0KK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2ZpbGUoc3RydWN0IHBhdGNoICpwYXRjaCwgaW50IHJtZGlyX2VtcHR5KQoreworCWlmICh1cGRhdGVfaW5kZXgpIHsKKwkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0Y2gtPm9sZF9uYW1lKSA8IDApCisJCQlkaWUoXygidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IiksIHBhdGNoLT5vbGRfbmFtZSk7CisJfQorCWlmICghY2FjaGVkKSB7CisJCWlmICghcmVtb3ZlX29yX3dhcm4ocGF0Y2gtPm9sZF9tb2RlLCBwYXRjaC0+b2xkX25hbWUpICYmIHJtZGlyX2VtcHR5KSB7CisJCQlyZW1vdmVfcGF0aChwYXRjaC0+b2xkX25hbWUpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfaW5kZXhfZmlsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBtb2RlLCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCWludCBuYW1lbGVuID0gc3RybGVuKHBhdGgpOworCXVuc2lnbmVkIGNlX3NpemUgPSBjYWNoZV9lbnRyeV9zaXplKG5hbWVsZW4pOworCisJaWYgKCF1cGRhdGVfaW5kZXgpCisJCXJldHVybjsKKworCWNlID0geGNhbGxvYygxLCBjZV9zaXplKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIG5hbWVsZW4pOworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKDApOworCWNlLT5jZV9uYW1lbGVuID0gbmFtZWxlbjsKKwlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJY29uc3QgY2hhciAqczsKKworCQlpZiAoIXNraXBfcHJlZml4KGJ1ZiwgIlN1YnByb2plY3QgY29tbWl0ICIsICZzKSB8fAorCQkgICAgZ2V0X3NoYTFfaGV4KHMsIGNlLT5zaGExKSkKKwkJCWRpZShfKCJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiKSwgcGF0aCk7CisJfSBlbHNlIHsKKwkJaWYgKCFjYWNoZWQpIHsKKwkJCWlmIChsc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciKSwKKwkJCQkJICBwYXRoKTsKKwkJCWZpbGxfc3RhdF9jYWNoZV9pbmZvKGNlLCAmc3QpOworCQl9CisJCWlmICh3cml0ZV9zaGExX2ZpbGUoYnVmLCBzaXplLCBibG9iX3R5cGUsIGNlLT5zaGExKSA8IDApCisJCQlkaWUoXygidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiKSwgcGF0aCk7CisJfQorCWlmIChhZGRfY2FjaGVfZW50cnkoY2UsIEFERF9DQUNIRV9PS19UT19BREQpIDwgMCkKKwkJZGllKF8oInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIiksIHBhdGgpOworfQorCitzdGF0aWMgaW50IHRyeV9jcmVhdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgbW9kZSwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IGZkOworCXN0cnVjdCBzdHJidWYgbmJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKFNfSVNHSVRMSU5LKG1vZGUpKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQlpZiAoIWxzdGF0KHBhdGgsICZzdCkgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCXJldHVybiAwOworCQlyZXR1cm4gbWtkaXIocGF0aCwgMDc3Nyk7CisJfQorCisJaWYgKGhhc19zeW1saW5rcyAmJiBTX0lTTE5LKG1vZGUpKQorCQkvKiBBbHRob3VnaCBidWY6c2l6ZSBpcyBjb3VudGVkIHN0cmluZywgaXQgYWxzbyBpcyBOVUwKKwkJICogdGVybWluYXRlZC4KKwkJICovCisJCXJldHVybiBzeW1saW5rKGJ1ZiwgcGF0aCk7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAobW9kZSAmIDAxMDApID8gMDc3NyA6IDA2NjYpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShwYXRoLCBidWYsIHNpemUsICZuYnVmKSkgeworCQlzaXplID0gbmJ1Zi5sZW47CisJCWJ1ZiAgPSBuYnVmLmJ1ZjsKKwl9CisJd3JpdGVfb3JfZGllKGZkLCBidWYsIHNpemUpOworCXN0cmJ1Zl9yZWxlYXNlKCZuYnVmKTsKKworCWlmIChjbG9zZShmZCkgPCAwKQorCQlkaWVfZXJybm8oXygiY2xvc2luZyBmaWxlICclcyciKSwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXZSBvcHRpbWlzdGljYWxseSBhc3N1bWUgdGhhdCB0aGUgZGlyZWN0b3JpZXMgZXhpc3QsCisgKiB3aGljaCBpcyB0cnVlIDk5JSBvZiB0aGUgdGltZSBhbnl3YXkuIElmIHRoZXkgZG9uJ3QsCisgKiB3ZSBjcmVhdGUgdGhlbSBhbmQgdHJ5IGFnYWluLgorICovCitzdGF0aWMgdm9pZCBjcmVhdGVfb25lX2ZpbGUoY2hhciAqcGF0aCwgdW5zaWduZWQgbW9kZSwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKGNhY2hlZCkKKwkJcmV0dXJuOworCWlmICghdHJ5X2NyZWF0ZV9maWxlKHBhdGgsIG1vZGUsIGJ1Ziwgc2l6ZSkpCisJCXJldHVybjsKKworCWlmIChlcnJubyA9PSBFTk9FTlQpIHsKKwkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMocGF0aCkpCisJCQlyZXR1cm47CisJCWlmICghdHJ5X2NyZWF0ZV9maWxlKHBhdGgsIG1vZGUsIGJ1Ziwgc2l6ZSkpCisJCQlyZXR1cm47CisJfQorCisJaWYgKGVycm5vID09IEVFWElTVCB8fCBlcnJubyA9PSBFQUNDRVMpIHsKKwkJLyogV2UgbWF5IGJlIHRyeWluZyB0byBjcmVhdGUgYSBmaWxlIHdoZXJlIGEgZGlyZWN0b3J5CisJCSAqIHVzZWQgdG8gYmUuCisJCSAqLworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKCFsc3RhdChwYXRoLCAmc3QpICYmICghU19JU0RJUihzdC5zdF9tb2RlKSB8fCAhcm1kaXIocGF0aCkpKQorCQkJZXJybm8gPSBFRVhJU1Q7CisJfQorCisJaWYgKGVycm5vID09IEVFWElTVCkgeworCQl1bnNpZ25lZCBpbnQgbnIgPSBnZXRwaWQoKTsKKworCQlmb3IgKDs7KSB7CisJCQljaGFyIG5ld3BhdGhbUEFUSF9NQVhdOworCQkJbWtzbnBhdGgobmV3cGF0aCwgc2l6ZW9mKG5ld3BhdGgpLCAiJXN+JXUiLCBwYXRoLCBucik7CisJCQlpZiAoIXRyeV9jcmVhdGVfZmlsZShuZXdwYXRoLCBtb2RlLCBidWYsIHNpemUpKSB7CisJCQkJaWYgKCFyZW5hbWUobmV3cGF0aCwgcGF0aCkpCisJCQkJCXJldHVybjsKKwkJCQl1bmxpbmtfb3Jfd2FybihuZXdwYXRoKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQkJYnJlYWs7CisJCQkrK25yOworCQl9CisJfQorCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iKSwgcGF0aCwgbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9jb25mbGljdGVkX3N0YWdlc19maWxlKHN0cnVjdCBwYXRjaCAqcGF0Y2gpCit7CisJaW50IHN0YWdlLCBuYW1lbGVuOworCXVuc2lnbmVkIGNlX3NpemUsIG1vZGU7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWlmICghdXBkYXRlX2luZGV4KQorCQlyZXR1cm47CisJbmFtZWxlbiA9IHN0cmxlbihwYXRjaC0+bmV3X25hbWUpOworCWNlX3NpemUgPSBjYWNoZV9lbnRyeV9zaXplKG5hbWVsZW4pOworCW1vZGUgPSBwYXRjaC0+bmV3X21vZGUgPyBwYXRjaC0+bmV3X21vZGUgOiAoU19JRlJFRyB8IDA2NDQpOworCisJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRjaC0+bmV3X25hbWUpOworCWZvciAoc3RhZ2UgPSAxOyBzdGFnZSA8IDQ7IHN0YWdlKyspIHsKKwkJaWYgKGlzX251bGxfb2lkKCZwYXRjaC0+dGhyZWV3YXlfc3RhZ2Vbc3RhZ2UgLSAxXSkpCisJCQljb250aW51ZTsKKwkJY2UgPSB4Y2FsbG9jKDEsIGNlX3NpemUpOworCQltZW1jcHkoY2UtPm5hbWUsIHBhdGNoLT5uZXdfbmFtZSwgbmFtZWxlbik7CisJCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisJCWNlLT5jZV9mbGFncyA9IGNyZWF0ZV9jZV9mbGFncyhzdGFnZSk7CisJCWNlLT5jZV9uYW1lbGVuID0gbmFtZWxlbjsKKwkJaGFzaGNweShjZS0+c2hhMSwgcGF0Y2gtPnRocmVld2F5X3N0YWdlW3N0YWdlIC0gMV0uaGFzaCk7CisJCWlmIChhZGRfY2FjaGVfZW50cnkoY2UsIEFERF9DQUNIRV9PS19UT19BREQpIDwgMCkKKwkJCWRpZShfKCJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIpLCBwYXRjaC0+bmV3X25hbWUpOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2ZpbGUoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwljaGFyICpwYXRoID0gcGF0Y2gtPm5ld19uYW1lOworCXVuc2lnbmVkIG1vZGUgPSBwYXRjaC0+bmV3X21vZGU7CisJdW5zaWduZWQgbG9uZyBzaXplID0gcGF0Y2gtPnJlc3VsdHNpemU7CisJY2hhciAqYnVmID0gcGF0Y2gtPnJlc3VsdDsKKworCWlmICghbW9kZSkKKwkJbW9kZSA9IFNfSUZSRUcgfCAwNjQ0OworCWNyZWF0ZV9vbmVfZmlsZShwYXRoLCBtb2RlLCBidWYsIHNpemUpOworCisJaWYgKHBhdGNoLT5jb25mbGljdGVkX3RocmVld2F5KQorCQlhZGRfY29uZmxpY3RlZF9zdGFnZXNfZmlsZShwYXRjaCk7CisJZWxzZQorCQlhZGRfaW5kZXhfZmlsZShwYXRoLCBtb2RlLCBidWYsIHNpemUpOworfQorCisvKiBwaGFzZSB6ZXJvIGlzIHRvIHJlbW92ZSwgcGhhc2Ugb25lIGlzIHRvIGNyZWF0ZSAqLworc3RhdGljIHZvaWQgd3JpdGVfb3V0X29uZV9yZXN1bHQoc3RydWN0IHBhdGNoICpwYXRjaCwgaW50IHBoYXNlKQoreworCWlmIChwYXRjaC0+aXNfZGVsZXRlID4gMCkgeworCQlpZiAocGhhc2UgPT0gMCkKKwkJCXJlbW92ZV9maWxlKHBhdGNoLCAxKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGF0Y2gtPmlzX25ldyA+IDAgfHwgcGF0Y2gtPmlzX2NvcHkpIHsKKwkJaWYgKHBoYXNlID09IDEpCisJCQljcmVhdGVfZmlsZShwYXRjaCk7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBSZW5hbWUgb3IgbW9kaWZpY2F0aW9uIGJvaWxzIGRvd24gdG8gdGhlIHNhbWUKKwkgKiB0aGluZzogcmVtb3ZlIHRoZSBvbGQsIHdyaXRlIHRoZSBuZXcKKwkgKi8KKwlpZiAocGhhc2UgPT0gMCkKKwkJcmVtb3ZlX2ZpbGUocGF0Y2gsIHBhdGNoLT5pc19yZW5hbWUpOworCWlmIChwaGFzZSA9PSAxKQorCQljcmVhdGVfZmlsZShwYXRjaCk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfb3V0X29uZV9yZWplY3Qoc3RydWN0IHBhdGNoICpwYXRjaCkKK3sKKwlGSUxFICpyZWo7CisJY2hhciBuYW1lYnVmW1BBVEhfTUFYXTsKKwlzdHJ1Y3QgZnJhZ21lbnQgKmZyYWc7CisJaW50IGNudCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZm9yIChjbnQgPSAwLCBmcmFnID0gcGF0Y2gtPmZyYWdtZW50czsgZnJhZzsgZnJhZyA9IGZyYWctPm5leHQpIHsKKwkJaWYgKCFmcmFnLT5yZWplY3RlZCkKKwkJCWNvbnRpbnVlOworCQljbnQrKzsKKwl9CisKKwlpZiAoIWNudCkgeworCQlpZiAoYXBwbHlfdmVyYm9zZWx5KQorCQkJc2F5X3BhdGNoX25hbWUoc3RkZXJyLAorCQkJCSAgICAgICBfKCJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIiksIHBhdGNoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYmVjYXVzZSBhIHJlbW92YWwgcGF0Y2ggdGhhdCBsZWF2ZXMKKwkgKiBjb250ZW50cyBhcmUgbWFya2VkICJyZWplY3RlZCIgYXQgdGhlIHBhdGNoIGxldmVsLgorCSAqLworCWlmICghcGF0Y2gtPm5ld19uYW1lKQorCQlkaWUoXygiaW50ZXJuYWwgZXJyb3IiKSk7CisKKwkvKiBTYXkgdGhpcyBldmVuIHdpdGhvdXQgLS12ZXJib3NlICovCisJc3RyYnVmX2FkZGYoJnNiLCBRXygiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIiwKKwkJCSAgICAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIsCisJCQkgICAgY250KSwKKwkJICAgIGNudCk7CisJc2F5X3BhdGNoX25hbWUoc3RkZXJyLCBzYi5idWYsIHBhdGNoKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJY250ID0gc3RybGVuKHBhdGNoLT5uZXdfbmFtZSk7CisJaWYgKEFSUkFZX1NJWkUobmFtZWJ1ZikgPD0gY250ICsgNSkgeworCQljbnQgPSBBUlJBWV9TSVpFKG5hbWVidWYpIC0gNTsKKwkJd2FybmluZyhfKCJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiKSwKKwkJCWNudCAtIDEsIHBhdGNoLT5uZXdfbmFtZSk7CisJfQorCW1lbWNweShuYW1lYnVmLCBwYXRjaC0+bmV3X25hbWUsIGNudCk7CisJbWVtY3B5KG5hbWVidWYgKyBjbnQsICIucmVqIiwgNSk7CisKKwlyZWogPSBmb3BlbihuYW1lYnVmLCAidyIpOworCWlmICghcmVqKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IG9wZW4gJXM6ICVzIiksIG5hbWVidWYsIHN0cmVycm9yKGVycm5vKSk7CisKKwkvKiBOb3JtYWwgZ2l0IHRvb2xzIG5ldmVyIGRlYWwgd2l0aCAucmVqLCBzbyBkbyBub3QgcHJldGVuZAorCSAqIHRoaXMgaXMgYSBnaXQgcGF0Y2ggYnkgc2F5aW5nIC0tZ2l0IG9yIGdpdmluZyBleHRlbmRlZAorCSAqIGhlYWRlcnMuICBXaGlsZSBhdCBpdCwgbWF5YmUgcGxlYXNlICJrb21wYXJlIiB0aGF0IHdhbnRzCisJICogdGhlIHRyYWlsaW5nIFRBQiBhbmQgc29tZSBnYXJiYWdlIGF0IHRoZSBlbmQgb2YgbGluZSA7LSkuCisJICovCisJZnByaW50ZihyZWosICJkaWZmIGEvJXMgYi8lc1x0KHJlamVjdGVkIGh1bmtzKVxuIiwKKwkJcGF0Y2gtPm5ld19uYW1lLCBwYXRjaC0+bmV3X25hbWUpOworCWZvciAoY250ID0gMSwgZnJhZyA9IHBhdGNoLT5mcmFnbWVudHM7CisJICAgICBmcmFnOworCSAgICAgY250KyssIGZyYWcgPSBmcmFnLT5uZXh0KSB7CisJCWlmICghZnJhZy0+cmVqZWN0ZWQpIHsKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIiksIGNudCk7CisJCQljb250aW51ZTsKKwkJfQorCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiUmVqZWN0ZWQgaHVuayAjJWQuIiksIGNudCk7CisJCWZwcmludGYocmVqLCAiJS4qcyIsIGZyYWctPnNpemUsIGZyYWctPnBhdGNoKTsKKwkJaWYgKGZyYWctPnBhdGNoW2ZyYWctPnNpemUtMV0gIT0gJ1xuJykKKwkJCWZwdXRjKCdcbicsIHJlaik7CisJfQorCWZjbG9zZShyZWopOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCB3cml0ZV9vdXRfcmVzdWx0cyhzdHJ1Y3QgcGF0Y2ggKmxpc3QpCit7CisJaW50IHBoYXNlOworCWludCBlcnJzID0gMDsKKwlzdHJ1Y3QgcGF0Y2ggKmw7CisJc3RydWN0IHN0cmluZ19saXN0IGNwYXRoID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwlmb3IgKHBoYXNlID0gMDsgcGhhc2UgPCAyOyBwaGFzZSsrKSB7CisJCWwgPSBsaXN0OworCQl3aGlsZSAobCkgeworCQkJaWYgKGwtPnJlamVjdGVkKQorCQkJCWVycnMgPSAxOworCQkJZWxzZSB7CisJCQkJd3JpdGVfb3V0X29uZV9yZXN1bHQobCwgcGhhc2UpOworCQkJCWlmIChwaGFzZSA9PSAxKSB7CisJCQkJCWlmICh3cml0ZV9vdXRfb25lX3JlamVjdChsKSkKKwkJCQkJCWVycnMgPSAxOworCQkJCQlpZiAobC0+Y29uZmxpY3RlZF90aHJlZXdheSkgeworCQkJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZjcGF0aCwgbC0+bmV3X25hbWUpOworCQkJCQkJZXJycyA9IDE7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlsID0gbC0+bmV4dDsKKwkJfQorCX0KKworCWlmIChjcGF0aC5ucikgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCQlzdHJpbmdfbGlzdF9zb3J0KCZjcGF0aCk7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmNwYXRoKQorCQkJZnByaW50ZihzdGRlcnIsICJVICVzXG4iLCBpdGVtLT5zdHJpbmcpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmY3BhdGgsIDApOworCisJCXJlcmVyZSgwKTsKKwl9CisKKwlyZXR1cm4gZXJyczsKK30KKworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlOworCisjZGVmaW5lIElOQUNDVVJBVEVfRU9GCSgxPDwwKQorI2RlZmluZSBSRUNPVU5UCQkoMTw8MSkKKworc3RhdGljIGludCBhcHBseV9wYXRjaChpbnQgZmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgb3B0aW9ucykKK3sKKwlzaXplX3Qgb2Zmc2V0OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7IC8qIG93bnMgdGhlIHBhdGNoIHRleHQgKi8KKwlzdHJ1Y3QgcGF0Y2ggKmxpc3QgPSBOVUxMLCAqKmxpc3RwID0gJmxpc3Q7CisJaW50IHNraXBwZWRfcGF0Y2ggPSAwOworCisJcGF0Y2hfaW5wdXRfZmlsZSA9IGZpbGVuYW1lOworCXJlYWRfcGF0Y2hfZmlsZSgmYnVmLCBmZCk7CisJb2Zmc2V0ID0gMDsKKwl3aGlsZSAob2Zmc2V0IDwgYnVmLmxlbikgeworCQlzdHJ1Y3QgcGF0Y2ggKnBhdGNoOworCQlpbnQgbnI7CisKKwkJcGF0Y2ggPSB4Y2FsbG9jKDEsIHNpemVvZigqcGF0Y2gpKTsKKwkJcGF0Y2gtPmluYWNjdXJhdGVfZW9mID0gISEob3B0aW9ucyAmIElOQUNDVVJBVEVfRU9GKTsKKwkJcGF0Y2gtPnJlY291bnQgPSAgISEob3B0aW9ucyAmIFJFQ09VTlQpOworCQluciA9IHBhcnNlX2NodW5rKGJ1Zi5idWYgKyBvZmZzZXQsIGJ1Zi5sZW4gLSBvZmZzZXQsIHBhdGNoKTsKKwkJaWYgKG5yIDwgMCkKKwkJCWJyZWFrOworCQlpZiAoYXBwbHlfaW5fcmV2ZXJzZSkKKwkJCXJldmVyc2VfcGF0Y2hlcyhwYXRjaCk7CisJCWlmICh1c2VfcGF0Y2gocGF0Y2gpKSB7CisJCQlwYXRjaF9zdGF0cyhwYXRjaCk7CisJCQkqbGlzdHAgPSBwYXRjaDsKKwkJCWxpc3RwID0gJnBhdGNoLT5uZXh0OworCQl9CisJCWVsc2UgeworCQkJZnJlZV9wYXRjaChwYXRjaCk7CisJCQlza2lwcGVkX3BhdGNoKys7CisJCX0KKwkJb2Zmc2V0ICs9IG5yOworCX0KKworCWlmICghbGlzdCAmJiAhc2tpcHBlZF9wYXRjaCkKKwkJZGllKF8oInVucmVjb2duaXplZCBpbnB1dCIpKTsKKworCWlmICh3aGl0ZXNwYWNlX2Vycm9yICYmICh3c19lcnJvcl9hY3Rpb24gPT0gZGllX29uX3dzX2Vycm9yKSkKKwkJYXBwbHkgPSAwOworCisJdXBkYXRlX2luZGV4ID0gY2hlY2tfaW5kZXggJiYgYXBwbHk7CisJaWYgKHVwZGF0ZV9pbmRleCAmJiBuZXdmZCA8IDApCisJCW5ld2ZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CisKKwlpZiAoY2hlY2tfaW5kZXgpIHsKKwkJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCQlkaWUoXygidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIpKTsKKwl9CisKKwlpZiAoKGNoZWNrIHx8IGFwcGx5KSAmJgorCSAgICBjaGVja19wYXRjaF9saXN0KGxpc3QpIDwgMCAmJgorCSAgICAhYXBwbHlfd2l0aF9yZWplY3QpCisJCWV4aXQoMSk7CisKKwlpZiAoYXBwbHkgJiYgd3JpdGVfb3V0X3Jlc3VsdHMobGlzdCkpIHsKKwkJaWYgKGFwcGx5X3dpdGhfcmVqZWN0KQorCQkJZXhpdCgxKTsKKwkJLyogd2l0aCAtLTN3YXksIHdlIHN0aWxsIG5lZWQgdG8gd3JpdGUgdGhlIGluZGV4IG91dCAqLworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoZmFrZV9hbmNlc3RvcikKKwkJYnVpbGRfZmFrZV9hbmNlc3RvcihsaXN0LCBmYWtlX2FuY2VzdG9yKTsKKworCWlmIChkaWZmc3RhdCkKKwkJc3RhdF9wYXRjaF9saXN0KGxpc3QpOworCisJaWYgKG51bXN0YXQpCisJCW51bXN0YXRfcGF0Y2hfbGlzdChsaXN0KTsKKworCWlmIChzdW1tYXJ5KQorCQlzdW1tYXJ5X3BhdGNoX2xpc3QobGlzdCk7CisKKwlmcmVlX3BhdGNoX2xpc3QobGlzdCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmZuX3RhYmxlLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2l0X2FwcGx5X2NvbmZpZyh2b2lkKQoreworCWdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgiYXBwbHkud2hpdGVzcGFjZSIsICZhcHBseV9kZWZhdWx0X3doaXRlc3BhY2UpOworCWdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdCgiYXBwbHkuaWdub3Jld2hpdGVzcGFjZSIsICZhcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2UpOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfZXhjbHVkZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJYWRkX25hbWVfbGltaXQoYXJnLCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfaW5jbHVkZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJYWRkX25hbWVfbGltaXQoYXJnLCAwKTsKKwloYXNfaW5jbHVkZSA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3AoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlwX3ZhbHVlID0gYXRvaShhcmcpOworCXBfdmFsdWVfa25vd24gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV96KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KQorCQlsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwllbHNlCisJCWxpbmVfdGVybWluYXRpb24gPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9zcGFjZV9jaGFuZ2UoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCXdzX2lnbm9yZV9hY3Rpb24gPSBpZ25vcmVfd3Nfbm9uZTsKKwllbHNlCisJCXdzX2lnbm9yZV9hY3Rpb24gPSBpZ25vcmVfd3NfY2hhbmdlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV93aGl0ZXNwYWNlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwljb25zdCBjaGFyICoqd2hpdGVzcGFjZV9vcHRpb24gPSBvcHQtPnZhbHVlOworCisJKndoaXRlc3BhY2Vfb3B0aW9uID0gYXJnOworCXBhcnNlX3doaXRlc3BhY2Vfb3B0aW9uKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2RpcmVjdG9yeShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJidWZfcmVzZXQoJnJvb3QpOworCXN0cmJ1Zl9hZGRzdHIoJnJvb3QsIGFyZyk7CisJc3RyYnVmX2NvbXBsZXRlKCZyb290LCAnLycpOworCXJldHVybiAwOworfQorCitpbnQgY21kX2FwcGx5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4XykKK3sKKwlpbnQgaTsKKwlpbnQgZXJycyA9IDA7CisJaW50IGlzX25vdF9naXRkaXIgPSAhc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnk7CisJaW50IGZvcmNlX2FwcGx5ID0gMDsKKworCWNvbnN0IGNoYXIgKndoaXRlc3BhY2Vfb3B0aW9uID0gTlVMTDsKKworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9hcHBseV9vcHRpb25zW10gPSB7CisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiZXhjbHVkZSIsIE5VTEwsIE5fKCJwYXRoIiksCisJCQlOXygiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIpLAorCQkJMCwgb3B0aW9uX3BhcnNlX2V4Y2x1ZGUgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpbmNsdWRlIiwgTlVMTCwgTl8oInBhdGgiKSwKKwkJCU5fKCJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIiksCisJCQkwLCBvcHRpb25fcGFyc2VfaW5jbHVkZSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ3AnLCBOVUxMLCBOVUxMLCBOXygibnVtIiksCisJCQlOXygicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiKSwKKwkJCTAsIG9wdGlvbl9wYXJzZV9wIH0sCisJCU9QVF9CT09MKDAsICJuby1hZGQiLCAmbm9fYWRkLAorCQkJTl8oImlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUgcGF0Y2giKSksCisJCU9QVF9CT09MKDAsICJzdGF0IiwgJmRpZmZzdGF0LAorCQkJTl8oImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIpKSwKKwkJT1BUX05PT1BfTk9BUkcoMCwgImFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCIpLAorCQlPUFRfTk9PUF9OT0FSRygwLCAiYmluYXJ5IiksCisJCU9QVF9CT09MKDAsICJudW1zdGF0IiwgJm51bXN0YXQsCisJCQlOXygic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIpKSwKKwkJT1BUX0JPT0woMCwgInN1bW1hcnkiLCAmc3VtbWFyeSwKKwkJCU5fKCJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IikpLAorCQlPUFRfQk9PTCgwLCAiY2hlY2siLCAmY2hlY2ssCisJCQlOXygiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIpKSwKKwkJT1BUX0JPT0woMCwgImluZGV4IiwgJmNoZWNrX2luZGV4LAorCQkJTl8oIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIpKSwKKwkJT1BUX0JPT0woMCwgImNhY2hlZCIsICZjYWNoZWQsCisJCQlOXygiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiKSksCisJCU9QVF9CT09MKDAsICJ1bnNhZmUtcGF0aHMiLCAmdW5zYWZlX3BhdGhzLAorCQkJTl8oImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiKSksCisJCU9QVF9CT09MKDAsICJhcHBseSIsICZmb3JjZV9hcHBseSwKKwkJCU5fKCJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIpKSwKKwkJT1BUX0JPT0woJzMnLCAiM3dheSIsICZ0aHJlZXdheSwKKwkJCSBOXyggImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiKSksCisJCU9QVF9GSUxFTkFNRSgwLCAiYnVpbGQtZmFrZS1hbmNlc3RvciIsICZmYWtlX2FuY2VzdG9yLAorCQkJTl8oImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ3onLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTl8oInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIiksCisJCQlQQVJTRV9PUFRfTk9BUkcsIG9wdGlvbl9wYXJzZV96IH0sCisJCU9QVF9JTlRFR0VSKCdDJywgTlVMTCwgJnBfY29udGV4dCwKKwkJCQlOXygiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgIndoaXRlc3BhY2UiLCAmd2hpdGVzcGFjZV9vcHRpb24sIE5fKCJhY3Rpb24iKSwKKwkJCU5fKCJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIpLAorCQkJMCwgb3B0aW9uX3BhcnNlX3doaXRlc3BhY2UgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpZ25vcmUtc3BhY2UtY2hhbmdlIiwgTlVMTCwgTlVMTCwKKwkJCU5fKCJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IiksCisJCQlQQVJTRV9PUFRfTk9BUkcsIG9wdGlvbl9wYXJzZV9zcGFjZV9jaGFuZ2UgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpZ25vcmUtd2hpdGVzcGFjZSIsIE5VTEwsIE5VTEwsCisJCQlOXygiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2Vfc3BhY2VfY2hhbmdlIH0sCisJCU9QVF9CT09MKCdSJywgInJldmVyc2UiLCAmYXBwbHlfaW5fcmV2ZXJzZSwKKwkJCU5fKCJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIpKSwKKwkJT1BUX0JPT0woMCwgInVuaWRpZmYtemVybyIsICZ1bmlkaWZmX3plcm8sCisJCQlOXygiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiKSksCisJCU9QVF9CT09MKDAsICJyZWplY3QiLCAmYXBwbHlfd2l0aF9yZWplY3QsCisJCQlOXygibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiKSksCisJCU9QVF9CT09MKDAsICJhbGxvdy1vdmVybGFwIiwgJmFsbG93X292ZXJsYXAsCisJCQlOXygiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiKSksCisJCU9QVF9fVkVSQk9TRSgmYXBwbHlfdmVyYm9zZWx5LCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX0JJVCgwLCAiaW5hY2N1cmF0ZS1lb2YiLCAmb3B0aW9ucywKKwkJCU5fKCJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIpLAorCQkJSU5BQ0NVUkFURV9FT0YpLAorCQlPUFRfQklUKDAsICJyZWNvdW50IiwgJm9wdGlvbnMsCisJCQlOXygiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIiksCisJCQlSRUNPVU5UKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJkaXJlY3RvcnkiLCBOVUxMLCBOXygicm9vdCIpLAorCQkJTl8oInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiKSwKKwkJCTAsIG9wdGlvbl9wYXJzZV9kaXJlY3RvcnkgfSwKKwkJT1BUX0VORCgpCisJfTsKKworCXByZWZpeCA9IHByZWZpeF87CisJcHJlZml4X2xlbmd0aCA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKKwlnaXRfYXBwbHlfY29uZmlnKCk7CisJaWYgKGFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZSkKKwkJcGFyc2Vfd2hpdGVzcGFjZV9vcHRpb24oYXBwbHlfZGVmYXVsdF93aGl0ZXNwYWNlKTsKKwlpZiAoYXBwbHlfZGVmYXVsdF9pZ25vcmV3aGl0ZXNwYWNlKQorCQlwYXJzZV9pZ25vcmV3aGl0ZXNwYWNlX29wdGlvbihhcHBseV9kZWZhdWx0X2lnbm9yZXdoaXRlc3BhY2UpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2FwcGx5X29wdGlvbnMsCisJCQlhcHBseV91c2FnZSwgMCk7CisKKwlpZiAoYXBwbHlfd2l0aF9yZWplY3QgJiYgdGhyZWV3YXkpCisJCWRpZSgiLS1yZWplY3QgYW5kIC0tM3dheSBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4iKTsKKwlpZiAoY2FjaGVkICYmIHRocmVld2F5KQorCQlkaWUoIi0tY2FjaGVkIGFuZCAtLTN3YXkgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIik7CisJaWYgKHRocmVld2F5KSB7CisJCWlmIChpc19ub3RfZ2l0ZGlyKQorCQkJZGllKF8oIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIpKTsKKwkJY2hlY2tfaW5kZXggPSAxOworCX0KKwlpZiAoYXBwbHlfd2l0aF9yZWplY3QpCisJCWFwcGx5ID0gYXBwbHlfdmVyYm9zZWx5ID0gMTsKKwlpZiAoIWZvcmNlX2FwcGx5ICYmIChkaWZmc3RhdCB8fCBudW1zdGF0IHx8IHN1bW1hcnkgfHwgY2hlY2sgfHwgZmFrZV9hbmNlc3RvcikpCisJCWFwcGx5ID0gMDsKKwlpZiAoY2hlY2tfaW5kZXggJiYgaXNfbm90X2dpdGRpcikKKwkJZGllKF8oIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiKSk7CisJaWYgKGNhY2hlZCkgeworCQlpZiAoaXNfbm90X2dpdGRpcikKKwkJCWRpZShfKCItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIpKTsKKwkJY2hlY2tfaW5kZXggPSAxOworCX0KKwlpZiAoY2hlY2tfaW5kZXgpCisJCXVuc2FmZV9wYXRocyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWludCBmZDsKKworCQlpZiAoIXN0cmNtcChhcmcsICItIikpIHsKKwkJCWVycnMgfD0gYXBwbHlfcGF0Y2goMCwgIjxzdGRpbj4iLCBvcHRpb25zKTsKKwkJCXJlYWRfc3RkaW4gPSAwOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoMCA8IHByZWZpeF9sZW5ndGgpCisJCQlhcmcgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBhcmcpOworCisJCWZkID0gb3BlbihhcmcsIE9fUkRPTkxZKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjYW4ndCBvcGVuIHBhdGNoICclcyciKSwgYXJnKTsKKwkJcmVhZF9zdGRpbiA9IDA7CisJCXNldF9kZWZhdWx0X3doaXRlc3BhY2VfbW9kZSh3aGl0ZXNwYWNlX29wdGlvbik7CisJCWVycnMgfD0gYXBwbHlfcGF0Y2goZmQsIGFyZywgb3B0aW9ucyk7CisJCWNsb3NlKGZkKTsKKwl9CisJc2V0X2RlZmF1bHRfd2hpdGVzcGFjZV9tb2RlKHdoaXRlc3BhY2Vfb3B0aW9uKTsKKwlpZiAocmVhZF9zdGRpbikKKwkJZXJycyB8PSBhcHBseV9wYXRjaCgwLCAiPHN0ZGluPiIsIG9wdGlvbnMpOworCWlmICh3aGl0ZXNwYWNlX2Vycm9yKSB7CisJCWlmIChzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzICYmCisJCSAgICBzcXVlbGNoX3doaXRlc3BhY2VfZXJyb3JzIDwgd2hpdGVzcGFjZV9lcnJvcikgeworCQkJaW50IHNxdWVsY2hlZCA9CisJCQkJd2hpdGVzcGFjZV9lcnJvciAtIHNxdWVsY2hfd2hpdGVzcGFjZV9lcnJvcnM7CisJCQl3YXJuaW5nKFFfKCJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIsCisJCQkJICAgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIsCisJCQkJICAgc3F1ZWxjaGVkKSwKKwkJCQlzcXVlbGNoZWQpOworCQl9CisJCWlmICh3c19lcnJvcl9hY3Rpb24gPT0gZGllX29uX3dzX2Vycm9yKQorCQkJZGllKFFfKCIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIiwKKwkJCSAgICAgICAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIsCisJCQkgICAgICAgd2hpdGVzcGFjZV9lcnJvciksCisJCQkgICAgd2hpdGVzcGFjZV9lcnJvcik7CisJCWlmIChhcHBsaWVkX2FmdGVyX2ZpeGluZ193cyAmJiBhcHBseSkKKwkJCXdhcm5pbmcoIiVkIGxpbmUlcyBhcHBsaWVkIGFmdGVyIgorCQkJCSIgZml4aW5nIHdoaXRlc3BhY2UgZXJyb3JzLiIsCisJCQkJYXBwbGllZF9hZnRlcl9maXhpbmdfd3MsCisJCQkJYXBwbGllZF9hZnRlcl9maXhpbmdfd3MgPT0gMSA/ICIiIDogInMiKTsKKwkJZWxzZSBpZiAod2hpdGVzcGFjZV9lcnJvcikKKwkJCXdhcm5pbmcoUV8oIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iLAorCQkJCSAgICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIiwKKwkJCQkgICB3aGl0ZXNwYWNlX2Vycm9yKSwKKwkJCQl3aGl0ZXNwYWNlX2Vycm9yKTsKKwl9CisKKwlpZiAodXBkYXRlX2luZGV4KSB7CisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQorCQkJZGllKF8oIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpKTsKKwl9CisKKwlyZXR1cm4gISFlcnJzOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9hcmNoaXZlLmMgYi9idWlsdGluL2FyY2hpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWUzYjk0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9hcmNoaXZlLmMKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgRnJhbmNrIEJ1aS1IdXUKKyAqIENvcHlyaWdodCAoYykgMjAwNiBSZW5lIFNjaGFyZmUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImFyY2hpdmUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorCitzdGF0aWMgdm9pZCBjcmVhdGVfb3V0cHV0X2ZpbGUoY29uc3QgY2hhciAqb3V0cHV0X2ZpbGUpCit7CisJaW50IG91dHB1dF9mZCA9IG9wZW4ob3V0cHV0X2ZpbGUsIE9fQ1JFQVQgfCBPX1dST05MWSB8IE9fVFJVTkMsIDA2NjYpOworCWlmIChvdXRwdXRfZmQgPCAwKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIpLCBvdXRwdXRfZmlsZSk7CisJaWYgKG91dHB1dF9mZCAhPSAxKSB7CisJCWlmIChkdXAyKG91dHB1dF9mZCwgMSkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiKSk7CisJCWVsc2UKKwkJCWNsb3NlKG91dHB1dF9mZCk7CisJfQorfQorCitzdGF0aWMgaW50IHJ1bl9yZW1vdGVfYXJjaGl2ZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqZXhlYywKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lX2hpbnQpCit7CisJY2hhciAqYnVmOworCWludCBmZFsyXSwgaSwgcnY7CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0OworCXN0cnVjdCByZW1vdGUgKl9yZW1vdGU7CisKKwlfcmVtb3RlID0gcmVtb3RlX2dldChyZW1vdGUpOworCWlmICghX3JlbW90ZS0+dXJsWzBdKQorCQlkaWUoXygiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIpKTsKKwl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KF9yZW1vdGUsIF9yZW1vdGUtPnVybFswXSk7CisJdHJhbnNwb3J0X2Nvbm5lY3QodHJhbnNwb3J0LCAiZ2l0LXVwbG9hZC1hcmNoaXZlIiwgZXhlYywgZmQpOworCisJLyoKKwkgKiBJbmplY3QgYSBmYWtlIC0tZm9ybWF0IGZpZWxkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisJICogYXJndW1lbnRzLCB3aXRoIHRoZSBmb3JtYXQgaW5mZXJyZWQgZnJvbSBvdXIgb3V0cHV0CisJICogZmlsZW5hbWUuIFRoaXMgd2F5IGV4cGxpY2l0IC0tZm9ybWF0IG9wdGlvbnMgY2FuIG92ZXJyaWRlCisJICogaXQuCisJICovCisJaWYgKG5hbWVfaGludCkgeworCQljb25zdCBjaGFyICpmb3JtYXQgPSBhcmNoaXZlX2Zvcm1hdF9mcm9tX2ZpbGVuYW1lKG5hbWVfaGludCk7CisJCWlmIChmb3JtYXQpCisJCQlwYWNrZXRfd3JpdGUoZmRbMV0sICJhcmd1bWVudCAtLWZvcm1hdD0lc1xuIiwgZm9ybWF0KTsKKwl9CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKwkJcGFja2V0X3dyaXRlKGZkWzFdLCAiYXJndW1lbnQgJXNcbiIsIGFyZ3ZbaV0pOworCXBhY2tldF9mbHVzaChmZFsxXSk7CisKKwlidWYgPSBwYWNrZXRfcmVhZF9saW5lKGZkWzBdLCBOVUxMKTsKKwlpZiAoIWJ1ZikKKwkJZGllKF8oImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIikpOworCWlmIChzdHJjbXAoYnVmLCAiQUNLIikpIHsKKwkJaWYgKHN0YXJ0c193aXRoKGJ1ZiwgIk5BQ0sgIikpCisJCQlkaWUoXygiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiKSwgYnVmICsgNSk7CisJCWlmIChzdGFydHNfd2l0aChidWYsICJFUlIgIikpCisJCQlkaWUoXygicmVtb3RlIGVycm9yOiAlcyIpLCBidWYgKyA0KTsKKwkJZGllKF8oImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIpKTsKKwl9CisKKwlpZiAocGFja2V0X3JlYWRfbGluZShmZFswXSwgTlVMTCkpCisJCWRpZShfKCJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIpKTsKKworCS8qIE5vdywgc3RhcnQgcmVhZGluZyBmcm9tIGZkWzBdIGFuZCBzcGl0IGl0IG91dCB0byBzdGRvdXQgKi8KKwlydiA9IHJlY3Zfc2lkZWJhbmQoImFyY2hpdmUiLCBmZFswXSwgMSk7CisJcnYgfD0gdHJhbnNwb3J0X2Rpc2Nvbm5lY3QodHJhbnNwb3J0KTsKKworCXJldHVybiAhIXJ2OworfQorCisjZGVmaW5lIFBBUlNFX09QVF9LRUVQX0FMTCAoIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwgCVwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjAgfCAJXAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9VTktOT1dOIHwJXAorCQkJICAgICBQQVJTRV9PUFRfTk9fSU5URVJOQUxfSEVMUAkpCisKK2ludCBjbWRfYXJjaGl2ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpleGVjID0gImdpdC11cGxvYWQtYXJjaGl2ZSI7CisJY29uc3QgY2hhciAqb3V0cHV0ID0gTlVMTDsKKwljb25zdCBjaGFyICpyZW1vdGUgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gbG9jYWxfb3B0c1tdID0geworCQlPUFRfU1RSSU5HKCdvJywgIm91dHB1dCIsICZvdXRwdXQsIE5fKCJmaWxlIiksCisJCQlOXygid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIikpLAorCQlPUFRfU1RSSU5HKDAsICJyZW1vdGUiLCAmcmVtb3RlLCBOXygicmVwbyIpLAorCQkJTl8oInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IikpLAorCQlPUFRfU1RSSU5HKDAsICJleGVjIiwgJmV4ZWMsIE5fKCJjb21tYW5kIiksCisJCQlOXygicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBsb2NhbF9vcHRzLCBOVUxMLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BTEwpOworCisJaWYgKG91dHB1dCkKKwkJY3JlYXRlX291dHB1dF9maWxlKG91dHB1dCk7CisKKwlpZiAocmVtb3RlKQorCQlyZXR1cm4gcnVuX3JlbW90ZV9hcmNoaXZlcihhcmdjLCBhcmd2LCByZW1vdGUsIGV4ZWMsIG91dHB1dCk7CisKKwlzZXR2YnVmKHN0ZGVyciwgTlVMTCwgX0lPTEJGLCBCVUZTSVopOworCisJcmV0dXJuIHdyaXRlX2FyY2hpdmUoYXJnYywgYXJndiwgcHJlZml4LCAxLCBvdXRwdXQsIDApOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jIGIvYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMjQyMjkwCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiYmlzZWN0LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X2Jpc2VjdF9oZWxwZXJfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIiksCisJTlVMTAorfTsKKworaW50IGNtZF9iaXNlY3RfX2hlbHBlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgbmV4dF9hbGwgPSAwOworCWludCBub19jaGVja291dCA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKDAsICJuZXh0LWFsbCIsICZuZXh0X2FsbCwKKwkJCSBOXygicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIpKSwKKwkJT1BUX0JPT0woMCwgIm5vLWNoZWNrb3V0IiwgJm5vX2NoZWNrb3V0LAorCQkJIE5fKCJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfYmlzZWN0X2hlbHBlcl91c2FnZSwgMCk7CisKKwlpZiAoIW5leHRfYWxsKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X2Jpc2VjdF9oZWxwZXJfdXNhZ2UsIG9wdGlvbnMpOworCisJLyogbmV4dC1hbGwgKi8KKwlyZXR1cm4gYmlzZWN0X25leHRfYWxsKHByZWZpeCwgbm9fY2hlY2tvdXQpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ibGFtZS5jIGIvYnVpbHRpbi9ibGFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYzdiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2JsYW1lLmMKQEAgLTAsMCArMSwyODMxIEBACisvKgorICogQmxhbWUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMTQgYnkgaXRzIGF1dGhvcnMKKyAqIFNlZSBDT1BZSU5HIGZvciBsaWNlbnNpbmcgY29uZGl0aW9ucworICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisjaW5jbHVkZSAibWVyZ2Vzb3J0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJsaW5lLXJhbmdlLmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworc3RhdGljIGNoYXIgYmxhbWVfdXNhZ2VbXSA9IE5fKCJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmJsYW1lX29wdF91c2FnZVtdID0geworCWJsYW1lX3VzYWdlLAorCSIiLAorCU5fKCI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgbG9uZ2VzdF9maWxlOworc3RhdGljIGludCBsb25nZXN0X2F1dGhvcjsKK3N0YXRpYyBpbnQgbWF4X29yaWdfZGlnaXRzOworc3RhdGljIGludCBtYXhfZGlnaXRzOworc3RhdGljIGludCBtYXhfc2NvcmVfZGlnaXRzOworc3RhdGljIGludCBzaG93X3Jvb3Q7CitzdGF0aWMgaW50IHJldmVyc2U7CitzdGF0aWMgaW50IGJsYW5rX2JvdW5kYXJ5Oworc3RhdGljIGludCBpbmNyZW1lbnRhbDsKK3N0YXRpYyBpbnQgeGRsX29wdHM7CitzdGF0aWMgaW50IGFiYnJldiA9IC0xOworc3RhdGljIGludCBub193aG9sZV9maWxlX3JlbmFtZTsKKworc3RhdGljIHN0cnVjdCBkYXRlX21vZGUgYmxhbWVfZGF0ZV9tb2RlID0geyBEQVRFX0lTTzg2MDEgfTsKK3N0YXRpYyBzaXplX3QgYmxhbWVfZGF0ZV93aWR0aDsKKworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBtYWlsbWFwOworCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIERFQlVHIDAKKyNlbmRpZgorCisvKiBzdGF0cyAqLworc3RhdGljIGludCBudW1fcmVhZF9ibG9iOworc3RhdGljIGludCBudW1fZ2V0X3BhdGNoOworc3RhdGljIGludCBudW1fY29tbWl0czsKKworI2RlZmluZSBQSUNLQVhFX0JMQU1FX01PVkUJCTAxCisjZGVmaW5lIFBJQ0tBWEVfQkxBTUVfQ09QWQkJMDIKKyNkZWZpbmUgUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFUgkwNAorI2RlZmluZSBQSUNLQVhFX0JMQU1FX0NPUFlfSEFSREVTVAkwMTAKKworLyoKKyAqIGJsYW1lIGZvciBhIGJsYW1lX2VudHJ5IHdpdGggc2NvcmUgbG93ZXIgdGhhbiB0aGVzZSB0aHJlc2hvbGRzCisgKiBpcyBub3QgcGFzc2VkIHRvIHRoZSBwYXJlbnQgdXNpbmcgbW92ZS9jb3B5IGxvZ2ljLgorICovCitzdGF0aWMgdW5zaWduZWQgYmxhbWVfbW92ZV9zY29yZTsKK3N0YXRpYyB1bnNpZ25lZCBibGFtZV9jb3B5X3Njb3JlOworI2RlZmluZSBCTEFNRV9ERUZBVUxUX01PVkVfU0NPUkUJMjAKKyNkZWZpbmUgQkxBTUVfREVGQVVMVF9DT1BZX1NDT1JFCTQwCisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIE1FVEFJTkZPX1NIT1dOCQkoMXU8PDEyKQorI2RlZmluZSBNT1JFX1RIQU5fT05FX1BBVEgJKDF1PDwxMykKKworLyoKKyAqIE9uZSBibG9iIGluIGEgY29tbWl0IHRoYXQgaXMgYmVpbmcgc3VzcGVjdGVkCisgKi8KK3N0cnVjdCBvcmlnaW4geworCWludCByZWZjbnQ7CisJLyogUmVjb3JkIHByZWNlZGluZyBibGFtZSByZWNvcmQgZm9yIHRoaXMgYmxvYiAqLworCXN0cnVjdCBvcmlnaW4gKnByZXZpb3VzOworCS8qIG9yaWdpbnMgYXJlIHB1dCBpbiBhIGxpc3QgbGlua2VkIHZpYSBgbmV4dCcgaGFuZ2luZyBvZmYgdGhlCisJICogY29ycmVzcG9uZGluZyBjb21taXQncyB1dGlsIGZpZWxkIGluIG9yZGVyIHRvIG1ha2UgZmluZGluZworCSAqIHRoZW0gZmFzdC4gIFRoZSBwcmVzZW5jZSBpbiB0aGlzIGNoYWluIGRvZXMgbm90IGNvdW50CisJICogdG93YXJkcyB0aGUgb3JpZ2luJ3MgcmVmZXJlbmNlIGNvdW50LiAgSXQgaXMgdGVtcHRpbmcgdG8KKwkgKiBsZXQgaXQgY291bnQgYXMgbG9uZyBhcyB0aGUgY29tbWl0IGlzIHBlbmRpbmcgZXhhbWluYXRpb24sCisJICogYnV0IGV2ZW4gdW5kZXIgY2lyY3Vtc3RhbmNlcyB3aGVyZSB0aGUgY29tbWl0IHdpbGwgYmUKKwkgKiBwcmVzZW50IG11bHRpcGxlIHRpbWVzIGluIHRoZSBwcmlvcml0eSBxdWV1ZSBvZiB1bmV4YW1pbmVkCisJICogY29tbWl0cywgcHJvY2Vzc2luZyB0aGUgZmlyc3QgaW5zdGFuY2Ugd2lsbCBub3QgbGVhdmUgYW55CisJICogd29yayByZXF1aXJpbmcgdGhlIG9yaWdpbiBkYXRhIGZvciB0aGUgc2Vjb25kIGluc3RhbmNlLiAgQW4KKwkgKiBpbnRlcnNwZXJzZWQgY29tbWl0IGNoYW5naW5nIHRoYXQgd291bGQgaGF2ZSB0byBiZQorCSAqIHByZWV4aXN0aW5nIHdpdGggYSBkaWZmZXJlbnQgYW5jZXN0cnkgYW5kIHdpdGggdGhlIHNhbWUKKwkgKiBjb21taXQgZGF0ZSBpbiBvcmRlciB0byB3ZWRnZSBpdHNlbGYgYmV0d2VlbiB0d28gaW5zdGFuY2VzCisJICogb2YgdGhlIHNhbWUgY29tbWl0IGluIHRoZSBwcmlvcml0eSBxdWV1ZSBfYW5kXyBwcm9kdWNlCisJICogYmxhbWUgZW50cmllcyByZWxldmFudCBmb3IgaXQuICBXaGlsZSB3ZSBkb24ndCB3YW50IHRvIGxldAorCSAqIHVzIGdldCB0cmlwcGVkIHVwIGJ5IHRoaXMgY2FzZSwgaXQgY2VydGFpbmx5IGRvZXMgbm90IHNlZW0KKwkgKiB3b3J0aCBvcHRpbWl6aW5nIGZvci4KKwkgKi8KKwlzdHJ1Y3Qgb3JpZ2luICpuZXh0OworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkvKiBgc3VzcGVjdHMnIGNvbnRhaW5zIGJsYW1lIGVudHJpZXMgdGhhdCBtYXkgYmUgYXR0cmlidXRlZCB0bworCSAqIHRoaXMgb3JpZ2luJ3MgY29tbWl0IG9yIHRvIHBhcmVudCBjb21taXRzLiAgV2hlbiBhIGNvbW1pdAorCSAqIGlzIGJlaW5nIHByb2Nlc3NlZCwgYWxsIHN1c3BlY3RzIHdpbGwgYmUgbW92ZWQsIGVpdGhlciBieQorCSAqIGFzc2lnbmluZyB0aGVtIHRvIGFuIG9yaWdpbiBpbiBhIGRpZmZlcmVudCBjb21taXQsIG9yIGJ5CisJICogc2hpcHBpbmcgdGhlbSB0byB0aGUgc2NvcmVib2FyZCdzIGVudCBsaXN0IGJlY2F1c2UgdGhleQorCSAqIGNhbm5vdCBiZSBhdHRyaWJ1dGVkIHRvIGEgZGlmZmVyZW50IGNvbW1pdC4KKwkgKi8KKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKnN1c3BlY3RzOworCW1tZmlsZV90IGZpbGU7CisJdW5zaWduZWQgY2hhciBibG9iX3NoYTFbMjBdOworCXVuc2lnbmVkIG1vZGU7CisJLyogZ3VpbHR5IGdldHMgc2V0IHdoZW4gc2hpcHBpbmcgYW55IHN1c3BlY3RzIHRvIHRoZSBmaW5hbAorCSAqIGJsYW1lIGxpc3QgaW5zdGVhZCBvZiBvdGhlciBjb21taXRzCisJICovCisJY2hhciBndWlsdHk7CisJY2hhciBwYXRoW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIGludCBkaWZmX2h1bmtzKG1tZmlsZV90ICpmaWxlX2EsIG1tZmlsZV90ICpmaWxlX2IsIGxvbmcgY3R4bGVuLAorCQkgICAgICB4ZGxfZW1pdF9odW5rX2NvbnN1bWVfZnVuY190IGh1bmtfZnVuYywgdm9pZCAqY2JfZGF0YSkKK3sKKwl4cHBhcmFtX3QgeHBwID0gezB9OworCXhkZW1pdGNvbmZfdCB4ZWNmZyA9IHswfTsKKwl4ZGVtaXRjYl90IGVjYiA9IHtOVUxMfTsKKworCXhwcC5mbGFncyA9IHhkbF9vcHRzOworCXhlY2ZnLmN0eGxlbiA9IGN0eGxlbjsKKwl4ZWNmZy5odW5rX2Z1bmMgPSBodW5rX2Z1bmM7CisJZWNiLnByaXYgPSBjYl9kYXRhOworCXJldHVybiB4ZGlfZGlmZihmaWxlX2EsIGZpbGVfYiwgJnhwcCwgJnhlY2ZnLCAmZWNiKTsKK30KKworLyoKKyAqIFByZXBhcmUgZGlmZl9maWxlc3BlYyBhbmQgY29udmVydCBpdCB1c2luZyBkaWZmIHRleHRjb252IEFQSQorICogaWYgdGhlIHRleHRjb252IGRyaXZlciBleGlzdHMuCisgKiBSZXR1cm4gMSBpZiB0aGUgY29udmVyc2lvbiBzdWNjZWVkcywgMCBvdGhlcndpc2UuCisgKi8KK2ludCB0ZXh0Y29udl9vYmplY3QoY29uc3QgY2hhciAqcGF0aCwKKwkJICAgIHVuc2lnbmVkIG1vZGUsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkgICAgaW50IHNoYTFfdmFsaWQsCisJCSAgICBjaGFyICoqYnVmLAorCQkgICAgdW5zaWduZWQgbG9uZyAqYnVmX3NpemUpCit7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRmOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252OworCisJZGYgPSBhbGxvY19maWxlc3BlYyhwYXRoKTsKKwlmaWxsX2ZpbGVzcGVjKGRmLCBzaGExLCBzaGExX3ZhbGlkLCBtb2RlKTsKKwl0ZXh0Y29udiA9IGdldF90ZXh0Y29udihkZik7CisJaWYgKCF0ZXh0Y29udikgeworCQlmcmVlX2ZpbGVzcGVjKGRmKTsKKwkJcmV0dXJuIDA7CisJfQorCisJKmJ1Zl9zaXplID0gZmlsbF90ZXh0Y29udih0ZXh0Y29udiwgZGYsIGJ1Zik7CisJZnJlZV9maWxlc3BlYyhkZik7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBHaXZlbiBhbiBvcmlnaW4sIHByZXBhcmUgbW1maWxlX3Qgc3RydWN0dXJlIHRvIGJlIHVzZWQgYnkgdGhlCisgKiBkaWZmIG1hY2hpbmVyeQorICovCitzdGF0aWMgdm9pZCBmaWxsX29yaWdpbl9ibG9iKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwKKwkJCSAgICAgc3RydWN0IG9yaWdpbiAqbywgbW1maWxlX3QgKmZpbGUpCit7CisJaWYgKCFvLT5maWxlLnB0cikgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXVuc2lnbmVkIGxvbmcgZmlsZV9zaXplOworCisJCW51bV9yZWFkX2Jsb2IrKzsKKwkJaWYgKERJRkZfT1BUX1RTVChvcHQsIEFMTE9XX1RFWFRDT05WKSAmJgorCQkgICAgdGV4dGNvbnZfb2JqZWN0KG8tPnBhdGgsIG8tPm1vZGUsIG8tPmJsb2Jfc2hhMSwgMSwgJmZpbGUtPnB0ciwgJmZpbGVfc2l6ZSkpCisJCQk7CisJCWVsc2UKKwkJCWZpbGUtPnB0ciA9IHJlYWRfc2hhMV9maWxlKG8tPmJsb2Jfc2hhMSwgJnR5cGUsICZmaWxlX3NpemUpOworCQlmaWxlLT5zaXplID0gZmlsZV9zaXplOworCisJCWlmICghZmlsZS0+cHRyKQorCQkJZGllKCJDYW5ub3QgcmVhZCBibG9iICVzIGZvciBwYXRoICVzIiwKKwkJCSAgICBzaGExX3RvX2hleChvLT5ibG9iX3NoYTEpLAorCQkJICAgIG8tPnBhdGgpOworCQlvLT5maWxlID0gKmZpbGU7CisJfQorCWVsc2UKKwkJKmZpbGUgPSBvLT5maWxlOworfQorCisvKgorICogT3JpZ2luIGlzIHJlZmNvdW50ZWQgYW5kIHVzdWFsbHkgd2Uga2VlcCB0aGUgYmxvYiBjb250ZW50cyB0byBiZQorICogcmV1c2VkLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvcmlnaW4gKm9yaWdpbl9pbmNyZWYoc3RydWN0IG9yaWdpbiAqbykKK3sKKwlpZiAobykKKwkJby0+cmVmY250Kys7CisJcmV0dXJuIG87Cit9CisKK3N0YXRpYyB2b2lkIG9yaWdpbl9kZWNyZWYoc3RydWN0IG9yaWdpbiAqbykKK3sKKwlpZiAobyAmJiAtLW8tPnJlZmNudCA8PSAwKSB7CisJCXN0cnVjdCBvcmlnaW4gKnAsICpsID0gTlVMTDsKKwkJaWYgKG8tPnByZXZpb3VzKQorCQkJb3JpZ2luX2RlY3JlZihvLT5wcmV2aW91cyk7CisJCWZyZWUoby0+ZmlsZS5wdHIpOworCQkvKiBTaG91bGQgYmUgcHJlc2VudCBleGFjdGx5IG9uY2UgaW4gY29tbWl0IGNoYWluICovCisJCWZvciAocCA9IG8tPmNvbW1pdC0+dXRpbDsgcDsgbCA9IHAsIHAgPSBwLT5uZXh0KSB7CisJCQlpZiAocCA9PSBvKSB7CisJCQkJaWYgKGwpCisJCQkJCWwtPm5leHQgPSBwLT5uZXh0OworCQkJCWVsc2UKKwkJCQkJby0+Y29tbWl0LT51dGlsID0gcC0+bmV4dDsKKwkJCQlmcmVlKG8pOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlkaWUoImludGVybmFsIGVycm9yIGluIGJsYW1lOjpvcmlnaW5fZGVjcmVmIik7CisJfQorfQorCitzdGF0aWMgdm9pZCBkcm9wX29yaWdpbl9ibG9iKHN0cnVjdCBvcmlnaW4gKm8pCit7CisJaWYgKG8tPmZpbGUucHRyKSB7CisJCWZyZWUoby0+ZmlsZS5wdHIpOworCQlvLT5maWxlLnB0ciA9IE5VTEw7CisJfQorfQorCisvKgorICogRWFjaCBncm91cCBvZiBsaW5lcyBpcyBkZXNjcmliZWQgYnkgYSBibGFtZV9lbnRyeTsgaXQgY2FuIGJlIHNwbGl0CisgKiBhcyB3ZSBwYXNzIGJsYW1lIHRvIHRoZSBwYXJlbnRzLiAgVGhleSBhcmUgYXJyYW5nZWQgaW4gbGlua2VkIGxpc3RzCisgKiBrZXB0IGFzIGBzdXNwZWN0cycgb2Ygc29tZSB1bnByb2Nlc3NlZCBvcmlnaW4sIG9yIGVudGVyZWQgKHdoZW4gdGhlCisgKiBibGFtZSBvcmlnaW4gaGFzIGJlZW4gZmluYWxpemVkKSBpbnRvIHRoZSBzY29yZWJvYXJkIHN0cnVjdHVyZS4KKyAqIFdoaWxlIHRoZSBzY29yZWJvYXJkIHN0cnVjdHVyZSBpcyBvbmx5IHNvcnRlZCBhdCB0aGUgZW5kIG9mCisgKiBwcm9jZXNzaW5nIChhY2NvcmRpbmcgdG8gZmluYWwgaW1hZ2UgbGluZSBudW1iZXIpLCB0aGUgbGlzdHMKKyAqIGF0dGFjaGVkIHRvIGFuIG9yaWdpbiBhcmUgc29ydGVkIGJ5IHRoZSB0YXJnZXQgbGluZSBudW1iZXIuCisgKi8KK3N0cnVjdCBibGFtZV9lbnRyeSB7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpuZXh0OworCisJLyogdGhlIGZpcnN0IGxpbmUgb2YgdGhpcyBncm91cCBpbiB0aGUgZmluYWwgaW1hZ2U7CisJICogaW50ZXJuYWxseSBhbGwgbGluZSBudW1iZXJzIGFyZSAwIGJhc2VkLgorCSAqLworCWludCBsbm87CisKKwkvKiBob3cgbWFueSBsaW5lcyB0aGlzIGdyb3VwIGhhcyAqLworCWludCBudW1fbGluZXM7CisKKwkvKiB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCB0aGlzIGdyb3VwIGludG8gdGhlIGZpbmFsIGltYWdlICovCisJc3RydWN0IG9yaWdpbiAqc3VzcGVjdDsKKworCS8qIHRoZSBsaW5lIG51bWJlciBvZiB0aGUgZmlyc3QgbGluZSBvZiB0aGlzIGdyb3VwIGluIHRoZQorCSAqIHN1c3BlY3QncyBmaWxlOyBpbnRlcm5hbGx5IGFsbCBsaW5lIG51bWJlcnMgYXJlIDAgYmFzZWQuCisJICovCisJaW50IHNfbG5vOworCisJLyogaG93IHNpZ25pZmljYW50IHRoaXMgZW50cnkgaXMgLS0gY2FjaGVkIHRvIGF2b2lkCisJICogc2Nhbm5pbmcgdGhlIGxpbmVzIG92ZXIgYW5kIG92ZXIuCisJICovCisJdW5zaWduZWQgc2NvcmU7Cit9OworCisvKgorICogQW55IG1lcmdlIG9mIGJsYW1lcyBoYXBwZW5zIG9uIGxpc3RzIG9mIGJsYW1lcyB0aGF0IGFycml2ZWQgdmlhCisgKiBkaWZmZXJlbnQgcGFyZW50cyBpbiBhIHNpbmdsZSBzdXNwZWN0LiAgSW4gdGhpcyBjYXNlLCB3ZSB3YW50IHRvCisgKiBzb3J0IGFjY29yZGluZyB0byB0aGUgc3VzcGVjdCBsaW5lIG51bWJlcnMgYXMgb3Bwb3NlZCB0byB0aGUgZmluYWwKKyAqIGltYWdlIGxpbmUgbnVtYmVycy4gIFRoZSBmdW5jdGlvbiBib2R5IGlzIHNvbWV3aGF0IGxvbmdpc2ggYmVjYXVzZQorICogaXQgYXZvaWRzIHVubmVjZXNzYXJ5IHdyaXRlcy4KKyAqLworCitzdGF0aWMgc3RydWN0IGJsYW1lX2VudHJ5ICpibGFtZV9tZXJnZShzdHJ1Y3QgYmxhbWVfZW50cnkgKmxpc3QxLAorCQkJCSAgICAgICBzdHJ1Y3QgYmxhbWVfZW50cnkgKmxpc3QyKQoreworCXN0cnVjdCBibGFtZV9lbnRyeSAqcDEgPSBsaXN0MSwgKnAyID0gbGlzdDIsCisJCSoqdGFpbCA9ICZsaXN0MTsKKworCWlmICghcDEpCisJCXJldHVybiBwMjsKKwlpZiAoIXAyKQorCQlyZXR1cm4gcDE7CisKKwlpZiAocDEtPnNfbG5vIDw9IHAyLT5zX2xubykgeworCQlkbyB7CisJCQl0YWlsID0gJnAxLT5uZXh0OworCQkJaWYgKChwMSA9ICp0YWlsKSA9PSBOVUxMKSB7CisJCQkJKnRhaWwgPSBwMjsKKwkJCQlyZXR1cm4gbGlzdDE7CisJCQl9CisJCX0gd2hpbGUgKHAxLT5zX2xubyA8PSBwMi0+c19sbm8pOworCX0KKwlmb3IgKDs7KSB7CisJCSp0YWlsID0gcDI7CisJCWRvIHsKKwkJCXRhaWwgPSAmcDItPm5leHQ7CisJCQlpZiAoKHAyID0gKnRhaWwpID09IE5VTEwpICB7CisJCQkJKnRhaWwgPSBwMTsKKwkJCQlyZXR1cm4gbGlzdDE7CisJCQl9CisJCX0gd2hpbGUgKHAxLT5zX2xubyA+IHAyLT5zX2xubyk7CisJCSp0YWlsID0gcDE7CisJCWRvIHsKKwkJCXRhaWwgPSAmcDEtPm5leHQ7CisJCQlpZiAoKHAxID0gKnRhaWwpID09IE5VTEwpIHsKKwkJCQkqdGFpbCA9IHAyOworCQkJCXJldHVybiBsaXN0MTsKKwkJCX0KKwkJfSB3aGlsZSAocDEtPnNfbG5vIDw9IHAyLT5zX2xubyk7CisJfQorfQorCitzdGF0aWMgdm9pZCAqZ2V0X25leHRfYmxhbWUoY29uc3Qgdm9pZCAqcCkKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgYmxhbWVfZW50cnkgKilwKS0+bmV4dDsKK30KKworc3RhdGljIHZvaWQgc2V0X25leHRfYmxhbWUodm9pZCAqcDEsIHZvaWQgKnAyKQoreworCSgoc3RydWN0IGJsYW1lX2VudHJ5ICopcDEpLT5uZXh0ID0gcDI7Cit9CisKKy8qCisgKiBGaW5hbCBpbWFnZSBsaW5lIG51bWJlcnMgYXJlIGFsbCBkaWZmZXJlbnQsIHNvIHdlIGRvbid0IG5lZWQgYQorICogdGhyZWUtd2F5IGNvbXBhcmlzb24gaGVyZS4KKyAqLworCitzdGF0aWMgaW50IGNvbXBhcmVfYmxhbWVfZmluYWwoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQoreworCXJldHVybiAoKHN0cnVjdCBibGFtZV9lbnRyeSAqKXAxKS0+bG5vID4gKChzdHJ1Y3QgYmxhbWVfZW50cnkgKilwMiktPmxubworCQk/IDEgOiAtMTsKK30KKworc3RhdGljIGludCBjb21wYXJlX2JsYW1lX3N1c3BlY3QoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQoreworCWNvbnN0IHN0cnVjdCBibGFtZV9lbnRyeSAqczEgPSBwMSwgKnMyID0gcDI7CisJLyoKKwkgKiB0byBhbGxvdyBmb3IgY29sbGF0aW5nIHN1c3BlY3RzLCB3ZSBzb3J0IGFjY29yZGluZyB0byB0aGUKKwkgKiByZXNwZWN0aXZlIHBvaW50ZXIgdmFsdWUgYXMgdGhlIHByaW1hcnkgc29ydGluZyBjcml0ZXJpb24uCisJICogVGhlIGFjdHVhbCByZWxhdGlvbiBpcyBwcmV0dHkgdW5pbXBvcnRhbnQgYXMgbG9uZyBhcyBpdAorCSAqIGVzdGFibGlzaGVzIGEgdG90YWwgb3JkZXIuICBDb21wYXJpbmcgYXMgaW50ZWdlcnMgZ2l2ZXMgdXMKKwkgKiB0aGF0LgorCSAqLworCWlmIChzMS0+c3VzcGVjdCAhPSBzMi0+c3VzcGVjdCkKKwkJcmV0dXJuIChpbnRwdHJfdClzMS0+c3VzcGVjdCA+IChpbnRwdHJfdClzMi0+c3VzcGVjdCA/IDEgOiAtMTsKKwlpZiAoczEtPnNfbG5vID09IHMyLT5zX2xubykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHMxLT5zX2xubyA+IHMyLT5zX2xubyA/IDEgOiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBibGFtZV9lbnRyeSAqYmxhbWVfc29ydChzdHJ1Y3QgYmxhbWVfZW50cnkgKmhlYWQsCisJCQkJICAgICAgaW50ICgqY29tcGFyZV9mbikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworCXJldHVybiBsbGlzdF9tZXJnZXNvcnQgKGhlYWQsIGdldF9uZXh0X2JsYW1lLCBzZXRfbmV4dF9ibGFtZSwgY29tcGFyZV9mbik7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9jb21taXRzX2J5X3JldmVyc2VfY29tbWl0X2RhdGUoY29uc3Qgdm9pZCAqYSwKKwkJCQkJCSAgY29uc3Qgdm9pZCAqYiwKKwkJCQkJCSAgdm9pZCAqYykKK3sKKwlyZXR1cm4gLWNvbXBhcmVfY29tbWl0c19ieV9jb21taXRfZGF0ZShhLCBiLCBjKTsKK30KKworLyoKKyAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBibGFtZSBhc3NpZ25tZW50LgorICovCitzdHJ1Y3Qgc2NvcmVib2FyZCB7CisJLyogdGhlIGZpbmFsIGNvbW1pdCAoaS5lLiB3aGVyZSB3ZSBzdGFydGVkIGRpZ2dpbmcgZnJvbSkgKi8KKwlzdHJ1Y3QgY29tbWl0ICpmaW5hbDsKKwkvKiBQcmlvcml0eSBxdWV1ZSBmb3IgY29tbWl0cyB3aXRoIHVuYXNzaWduZWQgYmxhbWUgcmVjb3JkcyAqLworCXN0cnVjdCBwcmlvX3F1ZXVlIGNvbW1pdHM7CisJc3RydWN0IHJldl9pbmZvICpyZXZzOworCWNvbnN0IGNoYXIgKnBhdGg7CisKKwkvKgorCSAqIFRoZSBjb250ZW50cyBpbiB0aGUgZmluYWwgaW1hZ2UuCisJICogVXNlZCBieSBtYW55IGZ1bmN0aW9ucyB0byBvYnRhaW4gY29udGVudHMgb2YgdGhlIG50aCBsaW5lLAorCSAqIGluZGV4ZWQgd2l0aCBzY29yZWJvYXJkLmxpbmVub1tibGFtZV9lbnRyeS5sbm9dLgorCSAqLworCWNvbnN0IGNoYXIgKmZpbmFsX2J1ZjsKKwl1bnNpZ25lZCBsb25nIGZpbmFsX2J1Zl9zaXplOworCisJLyogbGlua2VkIGxpc3Qgb2YgYmxhbWVzICovCisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7CisKKwkvKiBsb29rLXVwIGEgbGluZSBpbiB0aGUgZmluYWwgYnVmZmVyICovCisJaW50IG51bV9saW5lczsKKwlpbnQgKmxpbmVubzsKK307CisKK3N0YXRpYyB2b2lkIHNhbml0eV9jaGVja19yZWZjbnQoc3RydWN0IHNjb3JlYm9hcmQgKik7CisKKy8qCisgKiBJZiB0d28gYmxhbWUgZW50cmllcyB0aGF0IGFyZSBuZXh0IHRvIGVhY2ggb3RoZXIgY2FtZSBmcm9tCisgKiBjb250aWd1b3VzIGxpbmVzIGluIHRoZSBzYW1lIG9yaWdpbiAoaS5lLiA8Y29tbWl0LCBwYXRoPiBwYWlyKSwKKyAqIG1lcmdlIHRoZW0gdG9nZXRoZXIuCisgKi8KK3N0YXRpYyB2b2lkIGNvYWxlc2NlKHN0cnVjdCBzY29yZWJvYXJkICpzYikKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCwgKm5leHQ7CisKKwlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudCAmJiAobmV4dCA9IGVudC0+bmV4dCk7IGVudCA9IG5leHQpIHsKKwkJaWYgKGVudC0+c3VzcGVjdCA9PSBuZXh0LT5zdXNwZWN0ICYmCisJCSAgICBlbnQtPnNfbG5vICsgZW50LT5udW1fbGluZXMgPT0gbmV4dC0+c19sbm8pIHsKKwkJCWVudC0+bnVtX2xpbmVzICs9IG5leHQtPm51bV9saW5lczsKKwkJCWVudC0+bmV4dCA9IG5leHQtPm5leHQ7CisJCQlvcmlnaW5fZGVjcmVmKG5leHQtPnN1c3BlY3QpOworCQkJZnJlZShuZXh0KTsKKwkJCWVudC0+c2NvcmUgPSAwOworCQkJbmV4dCA9IGVudDsgLyogYWdhaW4gKi8KKwkJfQorCX0KKworCWlmIChERUJVRykgLyogc2FuaXR5ICovCisJCXNhbml0eV9jaGVja19yZWZjbnQoc2IpOworfQorCisvKgorICogTWVyZ2UgdGhlIGdpdmVuIHNvcnRlZCBsaXN0IG9mIGJsYW1lcyBpbnRvIGEgcHJlZXhpc3Rpbmcgb3JpZ2luLgorICogSWYgdGhlcmUgd2VyZSBubyBwcmV2aW91cyBibGFtZXMgdG8gdGhhdCBjb21taXQsIGl0IGlzIGVudGVyZWQgaW50bworICogdGhlIGNvbW1pdCBwcmlvcml0eSBxdWV1ZSBvZiB0aGUgc2NvcmUgYm9hcmQuCisgKi8KKworc3RhdGljIHZvaWQgcXVldWVfYmxhbWVzKHN0cnVjdCBzY29yZWJvYXJkICpzYiwgc3RydWN0IG9yaWdpbiAqcG9yaWdpbiwKKwkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKnNvcnRlZCkKK3sKKwlpZiAocG9yaWdpbi0+c3VzcGVjdHMpCisJCXBvcmlnaW4tPnN1c3BlY3RzID0gYmxhbWVfbWVyZ2UocG9yaWdpbi0+c3VzcGVjdHMsIHNvcnRlZCk7CisJZWxzZSB7CisJCXN0cnVjdCBvcmlnaW4gKm87CisJCWZvciAobyA9IHBvcmlnaW4tPmNvbW1pdC0+dXRpbDsgbzsgbyA9IG8tPm5leHQpIHsKKwkJCWlmIChvLT5zdXNwZWN0cykgeworCQkJCXBvcmlnaW4tPnN1c3BlY3RzID0gc29ydGVkOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlwb3JpZ2luLT5zdXNwZWN0cyA9IHNvcnRlZDsKKwkJcHJpb19xdWV1ZV9wdXQoJnNiLT5jb21taXRzLCBwb3JpZ2luLT5jb21taXQpOworCX0KK30KKworLyoKKyAqIEdpdmVuIGEgY29tbWl0IGFuZCBhIHBhdGggaW4gaXQsIGNyZWF0ZSBhIG5ldyBvcmlnaW4gc3RydWN0dXJlLgorICogVGhlIGNhbGxlcnMgdGhhdCBhZGQgYmxhbWUgdG8gdGhlIHNjb3JlYm9hcmQgc2hvdWxkIHVzZQorICogZ2V0X29yaWdpbigpIHRvIG9idGFpbiBzaGFyZWQsIHJlZmNvdW50ZWQgY29weSBpbnN0ZWFkIG9mIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHkuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb3JpZ2luICptYWtlX29yaWdpbihzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IG9yaWdpbiAqbzsKKwlzaXplX3QgcGF0aGxlbiA9IHN0cmxlbihwYXRoKSArIDE7CisJbyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpvKSArIHBhdGhsZW4pOworCW8tPmNvbW1pdCA9IGNvbW1pdDsKKwlvLT5yZWZjbnQgPSAxOworCW8tPm5leHQgPSBjb21taXQtPnV0aWw7CisJY29tbWl0LT51dGlsID0gbzsKKwltZW1jcHkoby0+cGF0aCwgcGF0aCwgcGF0aGxlbik7IC8qIGluY2x1ZGVzIE5VTCAqLworCXJldHVybiBvOworfQorCisvKgorICogTG9jYXRlIGFuIGV4aXN0aW5nIG9yaWdpbiBvciBjcmVhdGUgYSBuZXcgb25lLgorICogVGhpcyBtb3ZlcyB0aGUgb3JpZ2luIHRvIGZyb250IHBvc2l0aW9uIGluIHRoZSBjb21taXQgdXRpbCBsaXN0LgorICovCitzdGF0aWMgc3RydWN0IG9yaWdpbiAqZ2V0X29yaWdpbihzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsCisJCQkJIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgb3JpZ2luICpvLCAqbDsKKworCWZvciAobyA9IGNvbW1pdC0+dXRpbCwgbCA9IE5VTEw7IG87IGwgPSBvLCBvID0gby0+bmV4dCkgeworCQlpZiAoIXN0cmNtcChvLT5wYXRoLCBwYXRoKSkgeworCQkJLyogYnVtcCB0byBmcm9udCAqLworCQkJaWYgKGwpIHsKKwkJCQlsLT5uZXh0ID0gby0+bmV4dDsKKwkJCQlvLT5uZXh0ID0gY29tbWl0LT51dGlsOworCQkJCWNvbW1pdC0+dXRpbCA9IG87CisJCQl9CisJCQlyZXR1cm4gb3JpZ2luX2luY3JlZihvKTsKKwkJfQorCX0KKwlyZXR1cm4gbWFrZV9vcmlnaW4oY29tbWl0LCBwYXRoKTsKK30KKworLyoKKyAqIEZpbGwgdGhlIGJsb2Jfc2hhMSBmaWVsZCBvZiBhbiBvcmlnaW4gaWYgaXQgaGFzbid0LCBzbyB0aGF0IGxhdGVyCisgKiBjYWxsIHRvIGZpbGxfb3JpZ2luX2Jsb2IoKSBjYW4gdXNlIGl0IHRvIGxvY2F0ZSB0aGUgZGF0YS4gIGJsb2Jfc2hhMQorICogZm9yIGFuIG9yaWdpbiBpcyBhbHNvIHVzZWQgdG8gcGFzcyB0aGUgYmxhbWUgZm9yIHRoZSBlbnRpcmUgZmlsZSB0bworICogdGhlIHBhcmVudCB0byBkZXRlY3QgdGhlIGNhc2Ugd2hlcmUgYSBjaGlsZCdzIGJsb2IgaXMgaWRlbnRpY2FsIHRvCisgKiB0aGF0IG9mIGl0cyBwYXJlbnQncy4KKyAqCisgKiBUaGlzIGFsc28gZmlsbHMgb3JpZ2luLT5tb2RlIGZvciBjb3JyZXNwb25kaW5nIHRyZWUgcGF0aC4KKyAqLworc3RhdGljIGludCBmaWxsX2Jsb2Jfc2hhMV9hbmRfbW9kZShzdHJ1Y3Qgb3JpZ2luICpvcmlnaW4pCit7CisJaWYgKCFpc19udWxsX3NoYTEob3JpZ2luLT5ibG9iX3NoYTEpKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X3RyZWVfZW50cnkob3JpZ2luLT5jb21taXQtPm9iamVjdC5zaGExLAorCQkJICAgb3JpZ2luLT5wYXRoLAorCQkJICAgb3JpZ2luLT5ibG9iX3NoYTEsICZvcmlnaW4tPm1vZGUpKQorCQlnb3RvIGVycm9yX291dDsKKwlpZiAoc2hhMV9vYmplY3RfaW5mbyhvcmlnaW4tPmJsb2Jfc2hhMSwgTlVMTCkgIT0gT0JKX0JMT0IpCisJCWdvdG8gZXJyb3Jfb3V0OworCXJldHVybiAwOworIGVycm9yX291dDoKKwloYXNoY2xyKG9yaWdpbi0+YmxvYl9zaGExKTsKKwlvcmlnaW4tPm1vZGUgPSBTX0lGSU5WQUxJRDsKKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBXZSBoYXZlIGFuIG9yaWdpbiAtLSBjaGVjayBpZiB0aGUgc2FtZSBwYXRoIGV4aXN0cyBpbiB0aGUKKyAqIHBhcmVudCBhbmQgcmV0dXJuIGFuIG9yaWdpbiBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IGl0LgorICovCitzdGF0aWMgc3RydWN0IG9yaWdpbiAqZmluZF9vcmlnaW4oc3RydWN0IHNjb3JlYm9hcmQgKnNiLAorCQkJCSAgc3RydWN0IGNvbW1pdCAqcGFyZW50LAorCQkJCSAgc3RydWN0IG9yaWdpbiAqb3JpZ2luKQoreworCXN0cnVjdCBvcmlnaW4gKnBvcmlnaW47CisJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmX29wdHM7CisJY29uc3QgY2hhciAqcGF0aHNbMl07CisKKwkvKiBGaXJzdCBjaGVjayBhbnkgZXhpc3Rpbmcgb3JpZ2lucyAqLworCWZvciAocG9yaWdpbiA9IHBhcmVudC0+dXRpbDsgcG9yaWdpbjsgcG9yaWdpbiA9IHBvcmlnaW4tPm5leHQpCisJCWlmICghc3RyY21wKHBvcmlnaW4tPnBhdGgsIG9yaWdpbi0+cGF0aCkpIHsKKwkJCS8qCisJCQkgKiBUaGUgc2FtZSBwYXRoIGJldHdlZW4gb3JpZ2luIGFuZCBpdHMgcGFyZW50CisJCQkgKiB3aXRob3V0IHJlbmFtaW5nIC0tIHRoZSBtb3N0IGNvbW1vbiBjYXNlLgorCQkJICovCisJCQlyZXR1cm4gb3JpZ2luX2luY3JlZiAocG9yaWdpbik7CisJCX0KKworCS8qIFNlZSBpZiB0aGUgb3JpZ2luLT5wYXRoIGlzIGRpZmZlcmVudCBiZXR3ZWVuIHBhcmVudAorCSAqIGFuZCBvcmlnaW4gZmlyc3QuICBNb3N0IG9mIHRoZSB0aW1lIHRoZXkgYXJlIHRoZQorCSAqIHNhbWUgYW5kIGRpZmYtdHJlZSBpcyBmYWlybHkgZWZmaWNpZW50IGFib3V0IHRoaXMuCisJICovCisJZGlmZl9zZXR1cCgmZGlmZl9vcHRzKTsKKwlESUZGX09QVF9TRVQoJmRpZmZfb3B0cywgUkVDVVJTSVZFKTsKKwlkaWZmX29wdHMuZGV0ZWN0X3JlbmFtZSA9IDA7CisJZGlmZl9vcHRzLm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJcGF0aHNbMF0gPSBvcmlnaW4tPnBhdGg7CisJcGF0aHNbMV0gPSBOVUxMOworCisJcGFyc2VfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYywKKwkJICAgICAgIFBBVEhTUEVDX0FMTF9NQUdJQyAmIH5QQVRIU1BFQ19MSVRFUkFMLAorCQkgICAgICAgUEFUSFNQRUNfTElURVJBTF9QQVRILCAiIiwgcGF0aHMpOworCWRpZmZfc2V0dXBfZG9uZSgmZGlmZl9vcHRzKTsKKworCWlmIChpc19udWxsX3NoYTEob3JpZ2luLT5jb21taXQtPm9iamVjdC5zaGExKSkKKwkJZG9fZGlmZl9jYWNoZShwYXJlbnQtPnRyZWUtPm9iamVjdC5zaGExLCAmZGlmZl9vcHRzKTsKKwllbHNlCisJCWRpZmZfdHJlZV9zaGExKHBhcmVudC0+dHJlZS0+b2JqZWN0LnNoYTEsCisJCQkgICAgICAgb3JpZ2luLT5jb21taXQtPnRyZWUtPm9iamVjdC5zaGExLAorCQkJICAgICAgICIiLCAmZGlmZl9vcHRzKTsKKwlkaWZmY29yZV9zdGQoJmRpZmZfb3B0cyk7CisKKwlpZiAoIWRpZmZfcXVldWVkX2RpZmYubnIpIHsKKwkJLyogVGhlIHBhdGggaXMgdGhlIHNhbWUgYXMgcGFyZW50ICovCisJCXBvcmlnaW4gPSBnZXRfb3JpZ2luKHNiLCBwYXJlbnQsIG9yaWdpbi0+cGF0aCk7CisJCWhhc2hjcHkocG9yaWdpbi0+YmxvYl9zaGExLCBvcmlnaW4tPmJsb2Jfc2hhMSk7CisJCXBvcmlnaW4tPm1vZGUgPSBvcmlnaW4tPm1vZGU7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogU2luY2Ugb3JpZ2luLT5wYXRoIGlzIGEgcGF0aHNwZWMsIGlmIHRoZSBwYXJlbnQKKwkJICogY29tbWl0IGhhZCBpdCBhcyBhIGRpcmVjdG9yeSwgd2Ugd2lsbCBzZWUgYSB3aG9sZQorCQkgKiBidW5jaCBvZiBkZWxldGlvbiBvZiBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IHRoYXQgd2UKKwkJICogZG8gbm90IGNhcmUgYWJvdXQuCisJCSAqLworCQlpbnQgaTsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBOVUxMOworCQlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCQljb25zdCBjaGFyICpuYW1lOworCQkJcCA9IGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV07CisJCQluYW1lID0gcC0+b25lLT5wYXRoID8gcC0+b25lLT5wYXRoIDogcC0+dHdvLT5wYXRoOworCQkJaWYgKCFzdHJjbXAobmFtZSwgb3JpZ2luLT5wYXRoKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIXApCisJCQlkaWUoImludGVybmFsIGVycm9yIGluIGJsYW1lOjpmaW5kX29yaWdpbiIpOworCQlzd2l0Y2ggKHAtPnN0YXR1cykgeworCQlkZWZhdWx0OgorCQkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBibGFtZTo6ZmluZF9vcmlnaW4gKCVjKSIsCisJCQkgICAgcC0+c3RhdHVzKTsKKwkJY2FzZSAnTSc6CisJCQlwb3JpZ2luID0gZ2V0X29yaWdpbihzYiwgcGFyZW50LCBvcmlnaW4tPnBhdGgpOworCQkJaGFzaGNweShwb3JpZ2luLT5ibG9iX3NoYTEsIHAtPm9uZS0+c2hhMSk7CisJCQlwb3JpZ2luLT5tb2RlID0gcC0+b25lLT5tb2RlOworCQkJYnJlYWs7CisJCWNhc2UgJ0EnOgorCQljYXNlICdUJzoKKwkJCS8qIERpZCBub3QgZXhpc3QgaW4gcGFyZW50LCBvciB0eXBlIGNoYW5nZWQgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCWRpZmZfZmx1c2goJmRpZmZfb3B0cyk7CisJZnJlZV9wYXRoc3BlYygmZGlmZl9vcHRzLnBhdGhzcGVjKTsKKwlyZXR1cm4gcG9yaWdpbjsKK30KKworLyoKKyAqIFdlIGhhdmUgYW4gb3JpZ2luIC0tIGZpbmQgdGhlIHBhdGggdGhhdCBjb3JyZXNwb25kcyB0byBpdCBpbiBpdHMKKyAqIHBhcmVudCBhbmQgcmV0dXJuIGFuIG9yaWdpbiBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IGl0LgorICovCitzdGF0aWMgc3RydWN0IG9yaWdpbiAqZmluZF9yZW5hbWUoc3RydWN0IHNjb3JlYm9hcmQgKnNiLAorCQkJCSAgc3RydWN0IGNvbW1pdCAqcGFyZW50LAorCQkJCSAgc3RydWN0IG9yaWdpbiAqb3JpZ2luKQoreworCXN0cnVjdCBvcmlnaW4gKnBvcmlnaW4gPSBOVUxMOworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRzOworCWludCBpOworCisJZGlmZl9zZXR1cCgmZGlmZl9vcHRzKTsKKwlESUZGX09QVF9TRVQoJmRpZmZfb3B0cywgUkVDVVJTSVZFKTsKKwlkaWZmX29wdHMuZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX1JFTkFNRTsKKwlkaWZmX29wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlkaWZmX29wdHMuc2luZ2xlX2ZvbGxvdyA9IG9yaWdpbi0+cGF0aDsKKwlkaWZmX3NldHVwX2RvbmUoJmRpZmZfb3B0cyk7CisKKwlpZiAoaXNfbnVsbF9zaGExKG9yaWdpbi0+Y29tbWl0LT5vYmplY3Quc2hhMSkpCisJCWRvX2RpZmZfY2FjaGUocGFyZW50LT50cmVlLT5vYmplY3Quc2hhMSwgJmRpZmZfb3B0cyk7CisJZWxzZQorCQlkaWZmX3RyZWVfc2hhMShwYXJlbnQtPnRyZWUtPm9iamVjdC5zaGExLAorCQkJICAgICAgIG9yaWdpbi0+Y29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSwKKwkJCSAgICAgICAiIiwgJmRpZmZfb3B0cyk7CisJZGlmZmNvcmVfc3RkKCZkaWZmX29wdHMpOworCisJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV07CisJCWlmICgocC0+c3RhdHVzID09ICdSJyB8fCBwLT5zdGF0dXMgPT0gJ0MnKSAmJgorCQkgICAgIXN0cmNtcChwLT50d28tPnBhdGgsIG9yaWdpbi0+cGF0aCkpIHsKKwkJCXBvcmlnaW4gPSBnZXRfb3JpZ2luKHNiLCBwYXJlbnQsIHAtPm9uZS0+cGF0aCk7CisJCQloYXNoY3B5KHBvcmlnaW4tPmJsb2Jfc2hhMSwgcC0+b25lLT5zaGExKTsKKwkJCXBvcmlnaW4tPm1vZGUgPSBwLT5vbmUtPm1vZGU7CisJCQlicmVhazsKKwkJfQorCX0KKwlkaWZmX2ZsdXNoKCZkaWZmX29wdHMpOworCWZyZWVfcGF0aHNwZWMoJmRpZmZfb3B0cy5wYXRoc3BlYyk7CisJcmV0dXJuIHBvcmlnaW47Cit9CisKKy8qCisgKiBBcHBlbmQgYSBuZXcgYmxhbWUgZW50cnkgdG8gYSBnaXZlbiBvdXRwdXQgcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9ibGFtZV9lbnRyeShzdHJ1Y3QgYmxhbWVfZW50cnkgKioqcXVldWUsIHN0cnVjdCBibGFtZV9lbnRyeSAqZSkKK3sKKwlvcmlnaW5faW5jcmVmKGUtPnN1c3BlY3QpOworCisJZS0+bmV4dCA9ICoqcXVldWU7CisJKipxdWV1ZSA9IGU7CisJKnF1ZXVlID0gJmUtPm5leHQ7Cit9CisKKy8qCisgKiBzcmMgdHlwaWNhbGx5IGlzIG9uLXN0YWNrOyB3ZSB3YW50IHRvIGNvcHkgdGhlIGluZm9ybWF0aW9uIGluIGl0IHRvCisgKiBhIG1hbGxvY2VkIGJsYW1lX2VudHJ5IHRoYXQgZ2V0cyBhZGRlZCB0byB0aGUgZ2l2ZW4gcXVldWUuICBUaGUKKyAqIG9yaWdpbiBvZiBkc3QgbG9zZXMgYSByZWZjbnQuCisgKi8KK3N0YXRpYyB2b2lkIGR1cF9lbnRyeShzdHJ1Y3QgYmxhbWVfZW50cnkgKioqcXVldWUsCisJCSAgICAgIHN0cnVjdCBibGFtZV9lbnRyeSAqZHN0LCBzdHJ1Y3QgYmxhbWVfZW50cnkgKnNyYykKK3sKKwlvcmlnaW5faW5jcmVmKHNyYy0+c3VzcGVjdCk7CisJb3JpZ2luX2RlY3JlZihkc3QtPnN1c3BlY3QpOworCW1lbWNweShkc3QsIHNyYywgc2l6ZW9mKCpzcmMpKTsKKwlkc3QtPm5leHQgPSAqKnF1ZXVlOworCSoqcXVldWUgPSBkc3Q7CisJKnF1ZXVlID0gJmRzdC0+bmV4dDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKm50aF9saW5lKHN0cnVjdCBzY29yZWJvYXJkICpzYiwgbG9uZyBsbm8pCit7CisJcmV0dXJuIHNiLT5maW5hbF9idWYgKyBzYi0+bGluZW5vW2xub107Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpudGhfbGluZV9jYih2b2lkICpkYXRhLCBsb25nIGxubykKK3sKKwlyZXR1cm4gbnRoX2xpbmUoKHN0cnVjdCBzY29yZWJvYXJkICopZGF0YSwgbG5vKTsKK30KKworLyoKKyAqIEl0IGlzIGtub3duIHRoYXQgbGluZXMgYmV0d2VlbiB0bG5vIHRvIHNhbWUgY2FtZSBmcm9tIHBhcmVudCwgYW5kIGUKKyAqIGhhcyBhbiBvdmVybGFwIHdpdGggdGhhdCByYW5nZS4gIGl0IGFsc28gaXMga25vd24gdGhhdCBwYXJlbnQncworICogbGluZSBwbG5vIGNvcnJlc3BvbmRzIHRvIGUncyBsaW5lIHRsbm8uCisgKgorICogICAgICAgICAgICAgICAgPC0tLS0gZSAtLS0tLT4KKyAqICAgICAgICAgICAgICAgICAgIDwtLS0tLS0+CisgKiAgICAgICAgICAgICAgICAgICA8LS0tLS0tLS0tLS0tPgorICogICAgICAgICAgICAgPC0tLS0tLS0tLS0tLT4KKyAqICAgICAgICAgICAgIDwtLS0tLS0tLS0tLS0tLS0tLS0+CisgKgorICogU3BsaXQgZSBpbnRvIHBvdGVudGlhbGx5IHRocmVlIHBhcnRzOyBiZWZvcmUgdGhpcyBjaHVuaywgdGhlIGNodW5rCisgKiB0byBiZSBibGFtZWQgZm9yIHRoZSBwYXJlbnQsIGFuZCBhZnRlciB0aGF0IHBvcnRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHNwbGl0X292ZXJsYXAoc3RydWN0IGJsYW1lX2VudHJ5ICpzcGxpdCwKKwkJCSAgc3RydWN0IGJsYW1lX2VudHJ5ICplLAorCQkJICBpbnQgdGxubywgaW50IHBsbm8sIGludCBzYW1lLAorCQkJICBzdHJ1Y3Qgb3JpZ2luICpwYXJlbnQpCit7CisJaW50IGNodW5rX2VuZF9sbm87CisJbWVtc2V0KHNwbGl0LCAwLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5IFszXSkpOworCisJaWYgKGUtPnNfbG5vIDwgdGxubykgeworCQkvKiB0aGVyZSBpcyBhIHByZS1jaHVuayBwYXJ0IG5vdCBibGFtZWQgb24gcGFyZW50ICovCisJCXNwbGl0WzBdLnN1c3BlY3QgPSBvcmlnaW5faW5jcmVmKGUtPnN1c3BlY3QpOworCQlzcGxpdFswXS5sbm8gPSBlLT5sbm87CisJCXNwbGl0WzBdLnNfbG5vID0gZS0+c19sbm87CisJCXNwbGl0WzBdLm51bV9saW5lcyA9IHRsbm8gLSBlLT5zX2xubzsKKwkJc3BsaXRbMV0ubG5vID0gZS0+bG5vICsgdGxubyAtIGUtPnNfbG5vOworCQlzcGxpdFsxXS5zX2xubyA9IHBsbm87CisJfQorCWVsc2UgeworCQlzcGxpdFsxXS5sbm8gPSBlLT5sbm87CisJCXNwbGl0WzFdLnNfbG5vID0gcGxubyArIChlLT5zX2xubyAtIHRsbm8pOworCX0KKworCWlmIChzYW1lIDwgZS0+c19sbm8gKyBlLT5udW1fbGluZXMpIHsKKwkJLyogdGhlcmUgaXMgYSBwb3N0LWNodW5rIHBhcnQgbm90IGJsYW1lZCBvbiBwYXJlbnQgKi8KKwkJc3BsaXRbMl0uc3VzcGVjdCA9IG9yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCk7CisJCXNwbGl0WzJdLmxubyA9IGUtPmxubyArIChzYW1lIC0gZS0+c19sbm8pOworCQlzcGxpdFsyXS5zX2xubyA9IGUtPnNfbG5vICsgKHNhbWUgLSBlLT5zX2xubyk7CisJCXNwbGl0WzJdLm51bV9saW5lcyA9IGUtPnNfbG5vICsgZS0+bnVtX2xpbmVzIC0gc2FtZTsKKwkJY2h1bmtfZW5kX2xubyA9IHNwbGl0WzJdLmxubzsKKwl9CisJZWxzZQorCQljaHVua19lbmRfbG5vID0gZS0+bG5vICsgZS0+bnVtX2xpbmVzOworCXNwbGl0WzFdLm51bV9saW5lcyA9IGNodW5rX2VuZF9sbm8gLSBzcGxpdFsxXS5sbm87CisKKwkvKgorCSAqIGlmIGl0IHR1cm5zIG91dCB0aGVyZSBpcyBub3RoaW5nIHRvIGJsYW1lIHRoZSBwYXJlbnQgZm9yLAorCSAqIGZvcmdldCBhYm91dCB0aGUgc3BsaXR0aW5nLiAgIXNwbGl0WzFdLnN1c3BlY3Qgc2lnbmFscyB0aGlzLgorCSAqLworCWlmIChzcGxpdFsxXS5udW1fbGluZXMgPCAxKQorCQlyZXR1cm47CisJc3BsaXRbMV0uc3VzcGVjdCA9IG9yaWdpbl9pbmNyZWYocGFyZW50KTsKK30KKworLyoKKyAqIHNwbGl0X292ZXJsYXAoKSBkaXZpZGVkIGFuIGV4aXN0aW5nIGJsYW1lIGUgaW50byB1cCB0byB0aHJlZSBwYXJ0cworICogaW4gc3BsaXQuICBBbnkgYXNzaWduZWQgYmxhbWUgaXMgbW92ZWQgdG8gcXVldWUgdG8KKyAqIHJlZmxlY3QgdGhlIHNwbGl0LgorICovCitzdGF0aWMgdm9pZCBzcGxpdF9ibGFtZShzdHJ1Y3QgYmxhbWVfZW50cnkgKioqYmxhbWVkLAorCQkJc3RydWN0IGJsYW1lX2VudHJ5ICoqKnVuYmxhbWVkLAorCQkJc3RydWN0IGJsYW1lX2VudHJ5ICpzcGxpdCwKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqZSkKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5ld19lbnRyeTsKKworCWlmIChzcGxpdFswXS5zdXNwZWN0ICYmIHNwbGl0WzJdLnN1c3BlY3QpIHsKKwkJLyogVGhlIGZpcnN0IHBhcnQgKHJldXNlIHN0b3JhZ2UgZm9yIHRoZSBleGlzdGluZyBlbnRyeSBlKSAqLworCQlkdXBfZW50cnkodW5ibGFtZWQsIGUsICZzcGxpdFswXSk7CisKKwkJLyogVGhlIGxhc3QgcGFydCAtLSBtZSAqLworCQluZXdfZW50cnkgPSB4bWFsbG9jKHNpemVvZigqbmV3X2VudHJ5KSk7CisJCW1lbWNweShuZXdfZW50cnksICYoc3BsaXRbMl0pLCBzaXplb2Yoc3RydWN0IGJsYW1lX2VudHJ5KSk7CisJCWFkZF9ibGFtZV9lbnRyeSh1bmJsYW1lZCwgbmV3X2VudHJ5KTsKKworCQkvKiAuLi4gYW5kIHRoZSBtaWRkbGUgcGFydCAtLSBwYXJlbnQgKi8KKwkJbmV3X2VudHJ5ID0geG1hbGxvYyhzaXplb2YoKm5ld19lbnRyeSkpOworCQltZW1jcHkobmV3X2VudHJ5LCAmKHNwbGl0WzFdKSwgc2l6ZW9mKHN0cnVjdCBibGFtZV9lbnRyeSkpOworCQlhZGRfYmxhbWVfZW50cnkoYmxhbWVkLCBuZXdfZW50cnkpOworCX0KKwllbHNlIGlmICghc3BsaXRbMF0uc3VzcGVjdCAmJiAhc3BsaXRbMl0uc3VzcGVjdCkKKwkJLyoKKwkJICogVGhlIHBhcmVudCBjb3ZlcnMgdGhlIGVudGlyZSBhcmVhOyByZXVzZSBzdG9yYWdlIGZvcgorCQkgKiBlIGFuZCByZXBsYWNlIGl0IHdpdGggdGhlIHBhcmVudC4KKwkJICovCisJCWR1cF9lbnRyeShibGFtZWQsIGUsICZzcGxpdFsxXSk7CisJZWxzZSBpZiAoc3BsaXRbMF0uc3VzcGVjdCkgeworCQkvKiBtZSBhbmQgdGhlbiBwYXJlbnQgKi8KKwkJZHVwX2VudHJ5KHVuYmxhbWVkLCBlLCAmc3BsaXRbMF0pOworCisJCW5ld19lbnRyeSA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwkJbWVtY3B5KG5ld19lbnRyeSwgJihzcGxpdFsxXSksIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnkpKTsKKwkJYWRkX2JsYW1lX2VudHJ5KGJsYW1lZCwgbmV3X2VudHJ5KTsKKwl9CisJZWxzZSB7CisJCS8qIHBhcmVudCBhbmQgdGhlbiBtZSAqLworCQlkdXBfZW50cnkoYmxhbWVkLCBlLCAmc3BsaXRbMV0pOworCisJCW5ld19lbnRyeSA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwkJbWVtY3B5KG5ld19lbnRyeSwgJihzcGxpdFsyXSksIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnkpKTsKKwkJYWRkX2JsYW1lX2VudHJ5KHVuYmxhbWVkLCBuZXdfZW50cnkpOworCX0KK30KKworLyoKKyAqIEFmdGVyIHNwbGl0dGluZyB0aGUgYmxhbWUsIHRoZSBvcmlnaW5zIHVzZWQgYnkgdGhlCisgKiBvbi1zdGFjayBibGFtZV9lbnRyeSBzaG91bGQgbG9zZSBvbmUgcmVmY250IGVhY2guCisgKi8KK3N0YXRpYyB2b2lkIGRlY3JlZl9zcGxpdChzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJb3JpZ2luX2RlY3JlZihzcGxpdFtpXS5zdXNwZWN0KTsKK30KKworLyoKKyAqIHJldmVyc2VfYmxhbWUgcmV2ZXJzZXMgdGhlIGxpc3QgZ2l2ZW4gaW4gaGVhZCwgYXBwZW5kaW5nIHRhaWwuCisgKiBUaGF0IGFsbG93cyB1cyB0byBidWlsZCBsaXN0cyBpbiByZXZlcnNlIG9yZGVyLCB0aGVuIHJldmVyc2UgdGhlbQorICogYWZ0ZXJ3YXJkcy4gIFRoaXMgY2FuIGJlIGZhc3RlciB0aGFuIGJ1aWxkaW5nIHRoZSBsaXN0IGluIHByb3BlcgorICogb3JkZXIgcmlnaHQgYXdheS4gIFRoZSByZWFzb24gaXMgdGhhdCBidWlsZGluZyBpbiBwcm9wZXIgb3JkZXIKKyAqIHJlcXVpcmVzIHdyaXRpbmcgYSBsaW5rIGluIHRoZSBfcHJldmlvdXNfIGVsZW1lbnQsIHdoaWxlIGJ1aWxkaW5nCisgKiBpbiByZXZlcnNlIG9yZGVyIGp1c3QgcmVxdWlyZXMgcGxhY2luZyB0aGUgbGlzdCBoZWFkIGludG8gdGhlCisgKiBfY3VycmVudF8gZWxlbWVudC4KKyAqLworCitzdGF0aWMgc3RydWN0IGJsYW1lX2VudHJ5ICpyZXZlcnNlX2JsYW1lKHN0cnVjdCBibGFtZV9lbnRyeSAqaGVhZCwKKwkJCQkJIHN0cnVjdCBibGFtZV9lbnRyeSAqdGFpbCkKK3sKKwl3aGlsZSAoaGVhZCkgeworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQgPSBoZWFkLT5uZXh0OworCQloZWFkLT5uZXh0ID0gdGFpbDsKKwkJdGFpbCA9IGhlYWQ7CisJCWhlYWQgPSBuZXh0OworCX0KKwlyZXR1cm4gdGFpbDsKK30KKworLyoKKyAqIFByb2Nlc3Mgb25lIGh1bmsgZnJvbSB0aGUgcGF0Y2ggYmV0d2VlbiB0aGUgY3VycmVudCBzdXNwZWN0IGZvcgorICogYmxhbWVfZW50cnkgZSBhbmQgaXRzIHBhcmVudC4gIFRoaXMgZmlyc3QgYmxhbWVzIGFueSB1bmZpbmlzaGVkCisgKiBlbnRyaWVzIGJlZm9yZSB0aGUgY2h1bmsgKHdoaWNoIGlzIHdoZXJlIHRhcmdldCBhbmQgcGFyZW50IHN0YXJ0CisgKiBkaWZmZXJpbmcpIG9uIHRoZSBwYXJlbnQsIGFuZCB0aGVuIHNwbGl0cyBibGFtZSBlbnRyaWVzIGF0IHRoZQorICogc3RhcnQgYW5kIGF0IHRoZSBlbmQgb2YgdGhlIGRpZmZlcmVuY2UgcmVnaW9uLiAgU2luY2UgdXNlIG9mIC1NIGFuZAorICogLUMgb3B0aW9ucyBtYXkgbGVhZCB0byBvdmVybGFwcGluZy9kdXBsaWNhdGUgc291cmNlIGxpbmUgbnVtYmVyCisgKiByYW5nZXMsIGFsbCB3ZSBjYW4gcmVseSBvbiBmcm9tIHNvcnRpbmcvbWVyZ2luZyBpcyB0aGUgb3JkZXIgb2YgdGhlCisgKiBmaXJzdCBzdXNwZWN0IGxpbmUgbnVtYmVyLgorICovCitzdGF0aWMgdm9pZCBibGFtZV9jaHVuayhzdHJ1Y3QgYmxhbWVfZW50cnkgKioqZHN0cSwgc3RydWN0IGJsYW1lX2VudHJ5ICoqKnNyY3EsCisJCQlpbnQgdGxubywgaW50IG9mZnNldCwgaW50IHNhbWUsCisJCQlzdHJ1Y3Qgb3JpZ2luICpwYXJlbnQpCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplID0gKipzcmNxOworCXN0cnVjdCBibGFtZV9lbnRyeSAqc2FtZXAgPSBOVUxMLCAqZGlmZnAgPSBOVUxMOworCisJd2hpbGUgKGUgJiYgZS0+c19sbm8gPCB0bG5vKSB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqbmV4dCA9IGUtPm5leHQ7CisJCS8qCisJCSAqIGN1cnJlbnQgcmVjb3JkIHN0YXJ0cyBiZWZvcmUgZGlmZmVyaW5nIHBvcnRpb24uICBJZgorCQkgKiBpdCByZWFjaGVzIGludG8gaXQsIHdlIG5lZWQgdG8gc3BsaXQgaXQgdXAgYW5kCisJCSAqIGV4YW1pbmUgdGhlIHNlY29uZCBwYXJ0IHNlcGFyYXRlbHkuCisJCSAqLworCQlpZiAoZS0+c19sbm8gKyBlLT5udW1fbGluZXMgPiB0bG5vKSB7CisJCQkvKiBNb3ZlIHNlY29uZCBoYWxmIHRvIGEgbmV3IHJlY29yZCAqLworCQkJaW50IGxlbiA9IHRsbm8gLSBlLT5zX2xubzsKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqbiA9IHhjYWxsb2MoMSwgc2l6ZW9mIChzdHJ1Y3QgYmxhbWVfZW50cnkpKTsKKwkJCW4tPnN1c3BlY3QgPSBlLT5zdXNwZWN0OworCQkJbi0+bG5vID0gZS0+bG5vICsgbGVuOworCQkJbi0+c19sbm8gPSBlLT5zX2xubyArIGxlbjsKKwkJCW4tPm51bV9saW5lcyA9IGUtPm51bV9saW5lcyAtIGxlbjsKKwkJCWUtPm51bV9saW5lcyA9IGxlbjsKKwkJCWUtPnNjb3JlID0gMDsKKwkJCS8qIFB1c2ggbmV3IHJlY29yZCB0byBkaWZmcCAqLworCQkJbi0+bmV4dCA9IGRpZmZwOworCQkJZGlmZnAgPSBuOworCQl9IGVsc2UKKwkJCW9yaWdpbl9kZWNyZWYoZS0+c3VzcGVjdCk7CisJCS8qIFBhc3MgYmxhbWUgZm9yIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBkaWZmZXJpbmcKKwkJICogY2h1bmsgdG8gdGhlIHBhcmVudCAqLworCQllLT5zdXNwZWN0ID0gb3JpZ2luX2luY3JlZihwYXJlbnQpOworCQllLT5zX2xubyArPSBvZmZzZXQ7CisJCWUtPm5leHQgPSBzYW1lcDsKKwkJc2FtZXAgPSBlOworCQllID0gbmV4dDsKKwl9CisJLyoKKwkgKiBBcyB3ZSBkb24ndCBrbm93IGhvdyBtdWNoIG9mIGEgY29tbW9uIHN0cmV0Y2ggYWZ0ZXIgdGhpcworCSAqIGRpZmYgd2lsbCBvY2N1ciwgdGhlIGN1cnJlbnRseSBibGFtZWQgcGFydHMgYXJlIGFsbCB0aGF0IHdlCisJICogY2FuIGFzc2lnbiB0byB0aGUgcGFyZW50IGZvciBub3cuCisJICovCisKKwlpZiAoc2FtZXApIHsKKwkJKipkc3RxID0gcmV2ZXJzZV9ibGFtZShzYW1lcCwgKipkc3RxKTsKKwkJKmRzdHEgPSAmc2FtZXAtPm5leHQ7CisJfQorCS8qCisJICogUHJlcGVuZCB0aGUgc3BsaXQgb2ZmIHBvcnRpb25zOiBldmVyeXRoaW5nIGFmdGVyIGUgc3RhcnRzCisJICogYWZ0ZXIgdGhlIGJsYW1lYWJsZSBwb3J0aW9uLgorCSAqLworCWUgPSByZXZlcnNlX2JsYW1lKGRpZmZwLCBlKTsKKworCS8qCisJICogTm93IHJldGFpbiByZWNvcmRzIG9uIHRoZSB0YXJnZXQgd2hpbGUgcGFydHMgYXJlIGRpZmZlcmVudAorCSAqIGZyb20gdGhlIHBhcmVudC4KKwkgKi8KKwlzYW1lcCA9IE5VTEw7CisJZGlmZnAgPSBOVUxMOworCXdoaWxlIChlICYmIGUtPnNfbG5vIDwgc2FtZSkgeworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQgPSBlLT5uZXh0OworCisJCS8qCisJCSAqIElmIGN1cnJlbnQgcmVjb3JkIGV4dGVuZHMgaW50byBzYW1lbmVzcywgbmVlZCB0byBzcGxpdC4KKwkJICovCisJCWlmIChlLT5zX2xubyArIGUtPm51bV9saW5lcyA+IHNhbWUpIHsKKwkJCS8qCisJCQkgKiBNb3ZlIHNlY29uZCBoYWxmIHRvIGEgbmV3IHJlY29yZCB0byBiZQorCQkJICogcHJvY2Vzc2VkIGJ5IGxhdGVyIGNodW5rcworCQkJICovCisJCQlpbnQgbGVuID0gc2FtZSAtIGUtPnNfbG5vOworCQkJc3RydWN0IGJsYW1lX2VudHJ5ICpuID0geGNhbGxvYygxLCBzaXplb2YgKHN0cnVjdCBibGFtZV9lbnRyeSkpOworCQkJbi0+c3VzcGVjdCA9IG9yaWdpbl9pbmNyZWYoZS0+c3VzcGVjdCk7CisJCQluLT5sbm8gPSBlLT5sbm8gKyBsZW47CisJCQluLT5zX2xubyA9IGUtPnNfbG5vICsgbGVuOworCQkJbi0+bnVtX2xpbmVzID0gZS0+bnVtX2xpbmVzIC0gbGVuOworCQkJZS0+bnVtX2xpbmVzID0gbGVuOworCQkJZS0+c2NvcmUgPSAwOworCQkJLyogUHVzaCBuZXcgcmVjb3JkIHRvIHNhbWVwICovCisJCQluLT5uZXh0ID0gc2FtZXA7CisJCQlzYW1lcCA9IG47CisJCX0KKwkJZS0+bmV4dCA9IGRpZmZwOworCQlkaWZmcCA9IGU7CisJCWUgPSBuZXh0OworCX0KKwkqKnNyY3EgPSByZXZlcnNlX2JsYW1lKGRpZmZwLCByZXZlcnNlX2JsYW1lKHNhbWVwLCBlKSk7CisJLyogTW92ZSBhY3Jvc3MgZWxlbWVudHMgdGhhdCBhcmUgaW4gdGhlIHVuYmxhbWFibGUgcG9ydGlvbiAqLworCWlmIChkaWZmcCkKKwkJKnNyY3EgPSAmZGlmZnAtPm5leHQ7Cit9CisKK3N0cnVjdCBibGFtZV9jaHVua19jYl9kYXRhIHsKKwlzdHJ1Y3Qgb3JpZ2luICpwYXJlbnQ7CisJbG9uZyBvZmZzZXQ7CisJc3RydWN0IGJsYW1lX2VudHJ5ICoqZHN0cTsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKipzcmNxOworfTsKKworLyogZGlmZiBjaHVua3MgYXJlIGZyb20gcGFyZW50IHRvIHRhcmdldCAqLworc3RhdGljIGludCBibGFtZV9jaHVua19jYihsb25nIHN0YXJ0X2EsIGxvbmcgY291bnRfYSwKKwkJCSAgbG9uZyBzdGFydF9iLCBsb25nIGNvdW50X2IsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGJsYW1lX2NodW5rX2NiX2RhdGEgKmQgPSBkYXRhOworCWlmIChzdGFydF9hIC0gc3RhcnRfYiAhPSBkLT5vZmZzZXQpCisJCWRpZSgiaW50ZXJuYWwgZXJyb3IgaW4gYmxhbWU6OmJsYW1lX2NodW5rX2NiIik7CisJYmxhbWVfY2h1bmsoJmQtPmRzdHEsICZkLT5zcmNxLCBzdGFydF9iLCBzdGFydF9hIC0gc3RhcnRfYiwKKwkJICAgIHN0YXJ0X2IgKyBjb3VudF9iLCBkLT5wYXJlbnQpOworCWQtPm9mZnNldCA9IHN0YXJ0X2EgKyBjb3VudF9hIC0gKHN0YXJ0X2IgKyBjb3VudF9iKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdlIGFyZSBsb29raW5nIGF0IHRoZSBvcmlnaW4gJ3RhcmdldCcgYW5kIGFpbWluZyB0byBwYXNzIGJsYW1lCisgKiBmb3IgdGhlIGxpbmVzIGl0IGlzIHN1c3BlY3RlZCB0byBpdHMgcGFyZW50LiAgUnVuIGRpZmYgdG8gZmluZAorICogd2hpY2ggbGluZXMgY2FtZSBmcm9tIHBhcmVudCBhbmQgcGFzcyBibGFtZSBmb3IgdGhlbS4KKyAqLworc3RhdGljIHZvaWQgcGFzc19ibGFtZV90b19wYXJlbnQoc3RydWN0IHNjb3JlYm9hcmQgKnNiLAorCQkJCSBzdHJ1Y3Qgb3JpZ2luICp0YXJnZXQsCisJCQkJIHN0cnVjdCBvcmlnaW4gKnBhcmVudCkKK3sKKwltbWZpbGVfdCBmaWxlX3AsIGZpbGVfbzsKKwlzdHJ1Y3QgYmxhbWVfY2h1bmtfY2JfZGF0YSBkOworCXN0cnVjdCBibGFtZV9lbnRyeSAqbmV3ZGVzdCA9IE5VTEw7CisKKwlpZiAoIXRhcmdldC0+c3VzcGVjdHMpCisJCXJldHVybjsgLyogbm90aGluZyByZW1haW5zIGZvciB0aGlzIHRhcmdldCAqLworCisJZC5wYXJlbnQgPSBwYXJlbnQ7CisJZC5vZmZzZXQgPSAwOworCWQuZHN0cSA9ICZuZXdkZXN0OyBkLnNyY3EgPSAmdGFyZ2V0LT5zdXNwZWN0czsKKworCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCBwYXJlbnQsICZmaWxlX3ApOworCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCB0YXJnZXQsICZmaWxlX28pOworCW51bV9nZXRfcGF0Y2grKzsKKworCWlmIChkaWZmX2h1bmtzKCZmaWxlX3AsICZmaWxlX28sIDAsIGJsYW1lX2NodW5rX2NiLCAmZCkpCisJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgKCVzIC0+ICVzKSIsCisJCSAgICBzaGExX3RvX2hleChwYXJlbnQtPmNvbW1pdC0+b2JqZWN0LnNoYTEpLAorCQkgICAgc2hhMV90b19oZXgodGFyZ2V0LT5jb21taXQtPm9iamVjdC5zaGExKSk7CisJLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBwYXJlbnQgKi8KKwlibGFtZV9jaHVuaygmZC5kc3RxLCAmZC5zcmNxLCBJTlRfTUFYLCBkLm9mZnNldCwgSU5UX01BWCwgcGFyZW50KTsKKwkqZC5kc3RxID0gTlVMTDsKKwlxdWV1ZV9ibGFtZXMoc2IsIHBhcmVudCwgbmV3ZGVzdCk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBUaGUgbGluZXMgaW4gYmxhbWVfZW50cnkgYWZ0ZXIgc3BsaXR0aW5nIGJsYW1lcyBtYW55IHRpbWVzIGNhbiBiZWNvbWUKKyAqIHZlcnkgc21hbGwgYW5kIHRyaXZpYWwsIGFuZCBhdCBzb21lIHBvaW50IGl0IGJlY29tZXMgcG9pbnRsZXNzIHRvCisgKiBibGFtZSB0aGUgcGFyZW50cy4gIEUuZy4gIlx0XHR9XG5cdH1cblxuIiBhcHBlYXJzIGV2ZXJ5d2hlcmUgaW4gYW55CisgKiBvcmRpbmFyeSBDIHByb2dyYW0sIGFuZCBpdCBpcyBub3Qgd29ydGggdG8gc2F5IGl0IHdhcyBjb3BpZWQgZnJvbQorICogdG90YWxseSB1bnJlbGF0ZWQgZmlsZSBpbiB0aGUgcGFyZW50LgorICoKKyAqIENvbXB1dGUgaG93IHRyaXZpYWwgdGhlIGxpbmVzIGluIHRoZSBibGFtZV9lbnRyeSBhcmUuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBlbnRfc2NvcmUoc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgYmxhbWVfZW50cnkgKmUpCit7CisJdW5zaWduZWQgc2NvcmU7CisJY29uc3QgY2hhciAqY3AsICplcDsKKworCWlmIChlLT5zY29yZSkKKwkJcmV0dXJuIGUtPnNjb3JlOworCisJc2NvcmUgPSAxOworCWNwID0gbnRoX2xpbmUoc2IsIGUtPmxubyk7CisJZXAgPSBudGhfbGluZShzYiwgZS0+bG5vICsgZS0+bnVtX2xpbmVzKTsKKwl3aGlsZSAoY3AgPCBlcCkgeworCQl1bnNpZ25lZCBjaCA9ICooKHVuc2lnbmVkIGNoYXIgKiljcCk7CisJCWlmIChpc2FsbnVtKGNoKSkKKwkJCXNjb3JlKys7CisJCWNwKys7CisJfQorCWUtPnNjb3JlID0gc2NvcmU7CisJcmV0dXJuIHNjb3JlOworfQorCisvKgorICogYmVzdF9zb19mYXJbXSBhbmQgdGhpc1tdIGFyZSBib3RoIGEgc3BsaXQgb2YgYW4gZXhpc3RpbmcgYmxhbWVfZW50cnkKKyAqIHRoYXQgcGFzc2VzIGJsYW1lIHRvIHRoZSBwYXJlbnQuICBNYWludGFpbiBiZXN0X3NvX2ZhciB0aGUgYmVzdCBzcGxpdAorICogc28gZmFyLCBieSBjb21wYXJpbmcgdGhpcyBhbmQgYmVzdF9zb19mYXIgYW5kIGNvcHlpbmcgdGhpcyBpbnRvCisgKiBic3Rfc29fZmFyIGFzIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQgY29weV9zcGxpdF9pZl9iZXR0ZXIoc3RydWN0IHNjb3JlYm9hcmQgKnNiLAorCQkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKmJlc3Rfc29fZmFyLAorCQkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKnRoaXMpCit7CisJaW50IGk7CisKKwlpZiAoIXRoaXNbMV0uc3VzcGVjdCkKKwkJcmV0dXJuOworCWlmIChiZXN0X3NvX2ZhclsxXS5zdXNwZWN0KSB7CisJCWlmIChlbnRfc2NvcmUoc2IsICZ0aGlzWzFdKSA8IGVudF9zY29yZShzYiwgJmJlc3Rfc29fZmFyWzFdKSkKKwkJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlvcmlnaW5faW5jcmVmKHRoaXNbaV0uc3VzcGVjdCk7CisJZGVjcmVmX3NwbGl0KGJlc3Rfc29fZmFyKTsKKwltZW1jcHkoYmVzdF9zb19mYXIsIHRoaXMsIHNpemVvZihzdHJ1Y3QgYmxhbWVfZW50cnkgWzNdKSk7Cit9CisKKy8qCisgKiBXZSBhcmUgbG9va2luZyBhdCBhIHBhcnQgb2YgdGhlIGZpbmFsIGltYWdlIHJlcHJlc2VudGVkIGJ5CisgKiBlbnQgKHRsbm8gYW5kIHNhbWUgYXJlIG9mZnNldCBieSBlbnQtPnNfbG5vKS4KKyAqIHRsbm8gaXMgd2hlcmUgd2UgYXJlIGxvb2tpbmcgYXQgaW4gdGhlIGZpbmFsIGltYWdlLgorICogdXAgdG8gKGJ1dCBub3QgaW5jbHVkaW5nKSBzYW1lIG1hdGNoIHByZWltYWdlLgorICogcGxubyBpcyB3aGVyZSB3ZSBhcmUgbG9va2luZyBhdCBpbiB0aGUgcHJlaW1hZ2UuCisgKgorICogPC0tLS0tLS0tLS0tLS0tIGZpbmFsIGltYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+CisgKiAgICAgICA8LS0tLS0tZW50LS0tLS0tPgorICogICAgICAgICBedGxubyBec2FtZQorICogICAgPC0tLS0tLS0tLXByZWltYWdlLS0tLS0+CisgKiAgICAgICAgIF5wbG5vCisgKgorICogQWxsIGxpbmUgbnVtYmVycyBhcmUgMC1iYXNlZC4KKyAqLworc3RhdGljIHZvaWQgaGFuZGxlX3NwbGl0KHN0cnVjdCBzY29yZWJvYXJkICpzYiwKKwkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCwKKwkJCSBpbnQgdGxubywgaW50IHBsbm8sIGludCBzYW1lLAorCQkJIHN0cnVjdCBvcmlnaW4gKnBhcmVudCwKKwkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0KQoreworCWlmIChlbnQtPm51bV9saW5lcyA8PSB0bG5vKQorCQlyZXR1cm47CisJaWYgKHRsbm8gPCBzYW1lKSB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSB0aGlzWzNdOworCQl0bG5vICs9IGVudC0+c19sbm87CisJCXNhbWUgKz0gZW50LT5zX2xubzsKKwkJc3BsaXRfb3ZlcmxhcCh0aGlzLCBlbnQsIHRsbm8sIHBsbm8sIHNhbWUsIHBhcmVudCk7CisJCWNvcHlfc3BsaXRfaWZfYmV0dGVyKHNiLCBzcGxpdCwgdGhpcyk7CisJCWRlY3JlZl9zcGxpdCh0aGlzKTsKKwl9Cit9CisKK3N0cnVjdCBoYW5kbGVfc3BsaXRfY2JfZGF0YSB7CisJc3RydWN0IHNjb3JlYm9hcmQgKnNiOworCXN0cnVjdCBibGFtZV9lbnRyeSAqZW50OworCXN0cnVjdCBvcmlnaW4gKnBhcmVudDsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0OworCWxvbmcgcGxubzsKKwlsb25nIHRsbm87Cit9OworCitzdGF0aWMgaW50IGhhbmRsZV9zcGxpdF9jYihsb25nIHN0YXJ0X2EsIGxvbmcgY291bnRfYSwKKwkJCSAgIGxvbmcgc3RhcnRfYiwgbG9uZyBjb3VudF9iLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBoYW5kbGVfc3BsaXRfY2JfZGF0YSAqZCA9IGRhdGE7CisJaGFuZGxlX3NwbGl0KGQtPnNiLCBkLT5lbnQsIGQtPnRsbm8sIGQtPnBsbm8sIHN0YXJ0X2IsIGQtPnBhcmVudCwKKwkJICAgICBkLT5zcGxpdCk7CisJZC0+cGxubyA9IHN0YXJ0X2EgKyBjb3VudF9hOworCWQtPnRsbm8gPSBzdGFydF9iICsgY291bnRfYjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpbmQgdGhlIGxpbmVzIGZyb20gcGFyZW50IHRoYXQgYXJlIHRoZSBzYW1lIGFzIGVudCBzbyB0aGF0CisgKiB3ZSBjYW4gcGFzcyBibGFtZXMgdG8gaXQuICBmaWxlX3AgaGFzIHRoZSBibG9iIGNvbnRlbnRzIGZvcgorICogdGhlIHBhcmVudC4KKyAqLworc3RhdGljIHZvaWQgZmluZF9jb3B5X2luX2Jsb2Ioc3RydWN0IHNjb3JlYm9hcmQgKnNiLAorCQkJICAgICAgc3RydWN0IGJsYW1lX2VudHJ5ICplbnQsCisJCQkgICAgICBzdHJ1Y3Qgb3JpZ2luICpwYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgYmxhbWVfZW50cnkgKnNwbGl0LAorCQkJICAgICAgbW1maWxlX3QgKmZpbGVfcCkKK3sKKwljb25zdCBjaGFyICpjcDsKKwltbWZpbGVfdCBmaWxlX287CisJc3RydWN0IGhhbmRsZV9zcGxpdF9jYl9kYXRhIGQ7CisKKwltZW1zZXQoJmQsIDAsIHNpemVvZihkKSk7CisJZC5zYiA9IHNiOyBkLmVudCA9IGVudDsgZC5wYXJlbnQgPSBwYXJlbnQ7IGQuc3BsaXQgPSBzcGxpdDsKKwkvKgorCSAqIFByZXBhcmUgbW1maWxlIHRoYXQgY29udGFpbnMgb25seSB0aGUgbGluZXMgaW4gZW50LgorCSAqLworCWNwID0gbnRoX2xpbmUoc2IsIGVudC0+bG5vKTsKKwlmaWxlX28ucHRyID0gKGNoYXIgKikgY3A7CisJZmlsZV9vLnNpemUgPSBudGhfbGluZShzYiwgZW50LT5sbm8gKyBlbnQtPm51bV9saW5lcykgLSBjcDsKKworCS8qCisJICogZmlsZV9vIGlzIGEgcGFydCBvZiBmaW5hbCBpbWFnZSB3ZSBhcmUgYW5ub3RhdGluZy4KKwkgKiBmaWxlX3AgcGFydGlhbGx5IG1heSBtYXRjaCB0aGF0IGltYWdlLgorCSAqLworCW1lbXNldChzcGxpdCwgMCwgc2l6ZW9mKHN0cnVjdCBibGFtZV9lbnRyeSBbM10pKTsKKwlpZiAoZGlmZl9odW5rcyhmaWxlX3AsICZmaWxlX28sIDEsIGhhbmRsZV9zcGxpdF9jYiwgJmQpKQorCQlkaWUoInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmICglcykiLAorCQkgICAgc2hhMV90b19oZXgocGFyZW50LT5jb21taXQtPm9iamVjdC5zaGExKSk7CisJLyogcmVtYWluZGVyLCBpZiBhbnksIGFsbCBtYXRjaCB0aGUgcHJlaW1hZ2UgKi8KKwloYW5kbGVfc3BsaXQoc2IsIGVudCwgZC50bG5vLCBkLnBsbm8sIGVudC0+bnVtX2xpbmVzLCBwYXJlbnQsIHNwbGl0KTsKK30KKworLyogTW92ZSBhbGwgYmxhbWUgZW50cmllcyBmcm9tIGxpc3QgKnNvdXJjZSB0aGF0IGhhdmUgYSBzY29yZSBzbWFsbGVyCisgKiB0aGFuIHNjb3JlX21pbiB0byB0aGUgZnJvbnQgb2YgbGlzdCAqc21hbGwuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbGluayBwb2ludGluZyB0byB0aGUgb2xkIGhlYWQgb2YgdGhlIHNtYWxsIGxpc3QuCisgKi8KKworc3RhdGljIHN0cnVjdCBibGFtZV9lbnRyeSAqKmZpbHRlcl9zbWFsbChzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsCisJCQkJCSBzdHJ1Y3QgYmxhbWVfZW50cnkgKipzbWFsbCwKKwkJCQkJIHN0cnVjdCBibGFtZV9lbnRyeSAqKnNvdXJjZSwKKwkJCQkJIHVuc2lnbmVkIHNjb3JlX21pbikKK3sKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKnAgPSAqc291cmNlOworCXN0cnVjdCBibGFtZV9lbnRyeSAqb2xkc21hbGwgPSAqc21hbGw7CisJd2hpbGUgKHApIHsKKwkJaWYgKGVudF9zY29yZShzYiwgcCkgPD0gc2NvcmVfbWluKSB7CisJCQkqc21hbGwgPSBwOworCQkJc21hbGwgPSAmcC0+bmV4dDsKKwkJCXAgPSAqc21hbGw7CisJCX0gZWxzZSB7CisJCQkqc291cmNlID0gcDsKKwkJCXNvdXJjZSA9ICZwLT5uZXh0OworCQkJcCA9ICpzb3VyY2U7CisJCX0KKwl9CisJKnNtYWxsID0gb2xkc21hbGw7CisJKnNvdXJjZSA9IE5VTEw7CisJcmV0dXJuIHNtYWxsOworfQorCisvKgorICogU2VlIGlmIGxpbmVzIGN1cnJlbnRseSB0YXJnZXQgaXMgc3VzcGVjdGVkIGZvciBjYW4gYmUgYXR0cmlidXRlZCB0bworICogcGFyZW50LgorICovCitzdGF0aWMgdm9pZCBmaW5kX21vdmVfaW5fcGFyZW50KHN0cnVjdCBzY29yZWJvYXJkICpzYiwKKwkJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKioqYmxhbWVkLAorCQkJCXN0cnVjdCBibGFtZV9lbnRyeSAqKnRvb3NtYWxsLAorCQkJCXN0cnVjdCBvcmlnaW4gKnRhcmdldCwKKwkJCQlzdHJ1Y3Qgb3JpZ2luICpwYXJlbnQpCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplLCBzcGxpdFszXTsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKnVuYmxhbWVkID0gdGFyZ2V0LT5zdXNwZWN0czsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmxlZnRvdmVyID0gTlVMTDsKKwltbWZpbGVfdCBmaWxlX3A7CisKKwlpZiAoIXVuYmxhbWVkKQorCQlyZXR1cm47IC8qIG5vdGhpbmcgcmVtYWlucyBmb3IgdGhpcyB0YXJnZXQgKi8KKworCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCBwYXJlbnQsICZmaWxlX3ApOworCWlmICghZmlsZV9wLnB0cikKKwkJcmV0dXJuOworCisJLyogQXQgZWFjaCBpdGVyYXRpb24sIHVuYmxhbWVkIGhhcyBhIE5VTEwtdGVybWluYXRlZCBsaXN0IG9mCisJICogZW50cmllcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHRlc3RlZCBmb3IgYmxhbWUuICBsZWZ0b3ZlcgorCSAqIGNvbnRhaW5zIHRoZSByZXZlcnNlZCBsaXN0IG9mIGVudHJpZXMgdGhhdCBoYXZlIGJlZW4gdGVzdGVkCisJICogd2l0aG91dCBiZWluZyBhc3NpZ25hYmxlIHRvIHRoZSBwYXJlbnQuCisJICovCisJZG8geworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKip1bmJsYW1lZHRhaWwgPSAmdW5ibGFtZWQ7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqbmV4dDsKKwkJZm9yIChlID0gdW5ibGFtZWQ7IGU7IGUgPSBuZXh0KSB7CisJCQluZXh0ID0gZS0+bmV4dDsKKwkJCWZpbmRfY29weV9pbl9ibG9iKHNiLCBlLCBwYXJlbnQsIHNwbGl0LCAmZmlsZV9wKTsKKwkJCWlmIChzcGxpdFsxXS5zdXNwZWN0ICYmCisJCQkgICAgYmxhbWVfbW92ZV9zY29yZSA8IGVudF9zY29yZShzYiwgJnNwbGl0WzFdKSkgeworCQkJCXNwbGl0X2JsYW1lKGJsYW1lZCwgJnVuYmxhbWVkdGFpbCwgc3BsaXQsIGUpOworCQkJfSBlbHNlIHsKKwkJCQllLT5uZXh0ID0gbGVmdG92ZXI7CisJCQkJbGVmdG92ZXIgPSBlOworCQkJfQorCQkJZGVjcmVmX3NwbGl0KHNwbGl0KTsKKwkJfQorCQkqdW5ibGFtZWR0YWlsID0gTlVMTDsKKwkJdG9vc21hbGwgPSBmaWx0ZXJfc21hbGwoc2IsIHRvb3NtYWxsLCAmdW5ibGFtZWQsIGJsYW1lX21vdmVfc2NvcmUpOworCX0gd2hpbGUgKHVuYmxhbWVkKTsKKwl0YXJnZXQtPnN1c3BlY3RzID0gcmV2ZXJzZV9ibGFtZShsZWZ0b3ZlciwgTlVMTCk7Cit9CisKK3N0cnVjdCBibGFtZV9saXN0IHsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudDsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgc3BsaXRbM107Cit9OworCisvKgorICogQ291bnQgdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoZSB0YXJnZXQgaXMgc3VzcGVjdGVkIGZvciwKKyAqIGFuZCBwcmVwYXJlIGEgbGlzdCBvZiBlbnRyeSBhbmQgdGhlIGJlc3Qgc3BsaXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgYmxhbWVfbGlzdCAqc2V0dXBfYmxhbWVfbGlzdChzdHJ1Y3QgYmxhbWVfZW50cnkgKnVuYmxhbWVkLAorCQkJCQkgICBpbnQgKm51bV9lbnRzX3ApCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplOworCWludCBudW1fZW50cywgaTsKKwlzdHJ1Y3QgYmxhbWVfbGlzdCAqYmxhbWVfbGlzdCA9IE5VTEw7CisKKwlmb3IgKGUgPSB1bmJsYW1lZCwgbnVtX2VudHMgPSAwOyBlOyBlID0gZS0+bmV4dCkKKwkJbnVtX2VudHMrKzsKKwlpZiAobnVtX2VudHMpIHsKKwkJYmxhbWVfbGlzdCA9IHhjYWxsb2MobnVtX2VudHMsIHNpemVvZihzdHJ1Y3QgYmxhbWVfbGlzdCkpOworCQlmb3IgKGUgPSB1bmJsYW1lZCwgaSA9IDA7IGU7IGUgPSBlLT5uZXh0KQorCQkJYmxhbWVfbGlzdFtpKytdLmVudCA9IGU7CisJfQorCSpudW1fZW50c19wID0gbnVtX2VudHM7CisJcmV0dXJuIGJsYW1lX2xpc3Q7Cit9CisKKy8qCisgKiBGb3IgbGluZXMgdGFyZ2V0IGlzIHN1c3BlY3RlZCBmb3IsIHNlZSBpZiB3ZSBjYW4gZmluZCBjb2RlIG1vdmVtZW50CisgKiBhY3Jvc3MgZmlsZSBib3VuZGFyeSBmcm9tIHRoZSBwYXJlbnQgY29tbWl0LiAgcG9yaWdpbiBpcyB0aGUgcGF0aAorICogaW4gdGhlIHBhcmVudCB3ZSBhbHJlYWR5IHRyaWVkLgorICovCitzdGF0aWMgdm9pZCBmaW5kX2NvcHlfaW5fcGFyZW50KHN0cnVjdCBzY29yZWJvYXJkICpzYiwKKwkJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKioqYmxhbWVkLAorCQkJCXN0cnVjdCBibGFtZV9lbnRyeSAqKnRvb3NtYWxsLAorCQkJCXN0cnVjdCBvcmlnaW4gKnRhcmdldCwKKwkJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQsCisJCQkJc3RydWN0IG9yaWdpbiAqcG9yaWdpbiwKKwkJCQlpbnQgb3B0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRzOworCWludCBpLCBqOworCXN0cnVjdCBibGFtZV9saXN0ICpibGFtZV9saXN0OworCWludCBudW1fZW50czsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKnVuYmxhbWVkID0gdGFyZ2V0LT5zdXNwZWN0czsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmxlZnRvdmVyID0gTlVMTDsKKworCWlmICghdW5ibGFtZWQpCisJCXJldHVybjsgLyogbm90aGluZyByZW1haW5zIGZvciB0aGlzIHRhcmdldCAqLworCisJZGlmZl9zZXR1cCgmZGlmZl9vcHRzKTsKKwlESUZGX09QVF9TRVQoJmRpZmZfb3B0cywgUkVDVVJTSVZFKTsKKwlkaWZmX29wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKworCWRpZmZfc2V0dXBfZG9uZSgmZGlmZl9vcHRzKTsKKworCS8qIFRyeSAiZmluZCBjb3BpZXMgaGFyZGVyIiBvbiBuZXcgcGF0aCBpZiByZXF1ZXN0ZWQ7CisJICogd2UgZG8gbm90IHdhbnQgdG8gdXNlIGRpZmZjb3JlX3JlbmFtZSgpIGFjdHVhbGx5IHRvCisJICogbWF0Y2ggdGhpbmdzIHVwOyBmaW5kX2NvcGllc19oYXJkZXIgaXMgc2V0IG9ubHkgdG8KKwkgKiBmb3JjZSBkaWZmX3RyZWVfc2hhMSgpIHRvIGZlZWQgYWxsIGZpbGVwYWlycyB0byBkaWZmX3F1ZXVlLAorCSAqIGFuZCB0aGlzIGNvZGUgbmVlZHMgdG8gYmUgYWZ0ZXIgZGlmZl9zZXR1cF9kb25lKCksIHdoaWNoCisJICogdXN1YWxseSBtYWtlcyBmaW5kLWNvcGllcy1oYXJkZXIgaW1wbHkgY29weSBkZXRlY3Rpb24uCisJICovCisJaWYgKChvcHQgJiBQSUNLQVhFX0JMQU1FX0NPUFlfSEFSREVTVCkKKwkgICAgfHwgKChvcHQgJiBQSUNLQVhFX0JMQU1FX0NPUFlfSEFSREVSKQorCQkmJiAoIXBvcmlnaW4gfHwgc3RyY21wKHRhcmdldC0+cGF0aCwgcG9yaWdpbi0+cGF0aCkpKSkKKwkJRElGRl9PUFRfU0VUKCZkaWZmX29wdHMsIEZJTkRfQ09QSUVTX0hBUkRFUik7CisKKwlpZiAoaXNfbnVsbF9zaGExKHRhcmdldC0+Y29tbWl0LT5vYmplY3Quc2hhMSkpCisJCWRvX2RpZmZfY2FjaGUocGFyZW50LT50cmVlLT5vYmplY3Quc2hhMSwgJmRpZmZfb3B0cyk7CisJZWxzZQorCQlkaWZmX3RyZWVfc2hhMShwYXJlbnQtPnRyZWUtPm9iamVjdC5zaGExLAorCQkJICAgICAgIHRhcmdldC0+Y29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSwKKwkJCSAgICAgICAiIiwgJmRpZmZfb3B0cyk7CisKKwlpZiAoIURJRkZfT1BUX1RTVCgmZGlmZl9vcHRzLCBGSU5EX0NPUElFU19IQVJERVIpKQorCQlkaWZmY29yZV9zdGQoJmRpZmZfb3B0cyk7CisKKwlkbyB7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqKnVuYmxhbWVkdGFpbCA9ICZ1bmJsYW1lZDsKKwkJYmxhbWVfbGlzdCA9IHNldHVwX2JsYW1lX2xpc3QodW5ibGFtZWQsICZudW1fZW50cyk7CisKKwkJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldOworCQkJc3RydWN0IG9yaWdpbiAqbm9yaWdpbjsKKwkJCW1tZmlsZV90IGZpbGVfcDsKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSB0aGlzWzNdOworCisJCQlpZiAoIURJRkZfRklMRV9WQUxJRChwLT5vbmUpKQorCQkJCWNvbnRpbnVlOyAvKiBkb2VzIG5vdCBleGlzdCBpbiBwYXJlbnQgKi8KKwkJCWlmIChTX0lTR0lUTElOSyhwLT5vbmUtPm1vZGUpKQorCQkJCWNvbnRpbnVlOyAvKiBpZ25vcmUgZ2l0IGxpbmtzICovCisJCQlpZiAocG9yaWdpbiAmJiAhc3RyY21wKHAtPm9uZS0+cGF0aCwgcG9yaWdpbi0+cGF0aCkpCisJCQkJLyogZmluZF9tb3ZlIGFscmVhZHkgZGVhbHQgd2l0aCB0aGlzIHBhdGggKi8KKwkJCQljb250aW51ZTsKKworCQkJbm9yaWdpbiA9IGdldF9vcmlnaW4oc2IsIHBhcmVudCwgcC0+b25lLT5wYXRoKTsKKwkJCWhhc2hjcHkobm9yaWdpbi0+YmxvYl9zaGExLCBwLT5vbmUtPnNoYTEpOworCQkJbm9yaWdpbi0+bW9kZSA9IHAtPm9uZS0+bW9kZTsKKwkJCWZpbGxfb3JpZ2luX2Jsb2IoJnNiLT5yZXZzLT5kaWZmb3B0LCBub3JpZ2luLCAmZmlsZV9wKTsKKwkJCWlmICghZmlsZV9wLnB0cikKKwkJCQljb250aW51ZTsKKworCQkJZm9yIChqID0gMDsgaiA8IG51bV9lbnRzOyBqKyspIHsKKwkJCQlmaW5kX2NvcHlfaW5fYmxvYihzYiwgYmxhbWVfbGlzdFtqXS5lbnQsCisJCQkJCQkgIG5vcmlnaW4sIHRoaXMsICZmaWxlX3ApOworCQkJCWNvcHlfc3BsaXRfaWZfYmV0dGVyKHNiLCBibGFtZV9saXN0W2pdLnNwbGl0LAorCQkJCQkJICAgICB0aGlzKTsKKwkJCQlkZWNyZWZfc3BsaXQodGhpcyk7CisJCQl9CisJCQlvcmlnaW5fZGVjcmVmKG5vcmlnaW4pOworCQl9CisKKwkJZm9yIChqID0gMDsgaiA8IG51bV9lbnRzOyBqKyspIHsKKwkJCXN0cnVjdCBibGFtZV9lbnRyeSAqc3BsaXQgPSBibGFtZV9saXN0W2pdLnNwbGl0OworCQkJaWYgKHNwbGl0WzFdLnN1c3BlY3QgJiYKKwkJCSAgICBibGFtZV9jb3B5X3Njb3JlIDwgZW50X3Njb3JlKHNiLCAmc3BsaXRbMV0pKSB7CisJCQkJc3BsaXRfYmxhbWUoYmxhbWVkLCAmdW5ibGFtZWR0YWlsLCBzcGxpdCwKKwkJCQkJICAgIGJsYW1lX2xpc3Rbal0uZW50KTsKKwkJCX0gZWxzZSB7CisJCQkJYmxhbWVfbGlzdFtqXS5lbnQtPm5leHQgPSBsZWZ0b3ZlcjsKKwkJCQlsZWZ0b3ZlciA9IGJsYW1lX2xpc3Rbal0uZW50OworCQkJfQorCQkJZGVjcmVmX3NwbGl0KHNwbGl0KTsKKwkJfQorCQlmcmVlKGJsYW1lX2xpc3QpOworCQkqdW5ibGFtZWR0YWlsID0gTlVMTDsKKwkJdG9vc21hbGwgPSBmaWx0ZXJfc21hbGwoc2IsIHRvb3NtYWxsLCAmdW5ibGFtZWQsIGJsYW1lX2NvcHlfc2NvcmUpOworCX0gd2hpbGUgKHVuYmxhbWVkKTsKKwl0YXJnZXQtPnN1c3BlY3RzID0gcmV2ZXJzZV9ibGFtZShsZWZ0b3ZlciwgTlVMTCk7CisJZGlmZl9mbHVzaCgmZGlmZl9vcHRzKTsKKwlmcmVlX3BhdGhzcGVjKCZkaWZmX29wdHMucGF0aHNwZWMpOworfQorCisvKgorICogVGhlIGJsb2JzIG9mIG9yaWdpbiBhbmQgcG9yaWdpbiBleGFjdGx5IG1hdGNoLCBzbyBldmVyeXRoaW5nCisgKiBvcmlnaW4gaXMgc3VzcGVjdGVkIGZvciBjYW4gYmUgYmxhbWVkIG9uIHRoZSBwYXJlbnQuCisgKi8KK3N0YXRpYyB2b2lkIHBhc3Nfd2hvbGVfYmxhbWUoc3RydWN0IHNjb3JlYm9hcmQgKnNiLAorCQkJICAgICBzdHJ1Y3Qgb3JpZ2luICpvcmlnaW4sIHN0cnVjdCBvcmlnaW4gKnBvcmlnaW4pCit7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplLCAqc3VzcGVjdHM7CisKKwlpZiAoIXBvcmlnaW4tPmZpbGUucHRyICYmIG9yaWdpbi0+ZmlsZS5wdHIpIHsKKwkJLyogU3RlYWwgaXRzIGZpbGUgKi8KKwkJcG9yaWdpbi0+ZmlsZSA9IG9yaWdpbi0+ZmlsZTsKKwkJb3JpZ2luLT5maWxlLnB0ciA9IE5VTEw7CisJfQorCXN1c3BlY3RzID0gb3JpZ2luLT5zdXNwZWN0czsKKwlvcmlnaW4tPnN1c3BlY3RzID0gTlVMTDsKKwlmb3IgKGUgPSBzdXNwZWN0czsgZTsgZSA9IGUtPm5leHQpIHsKKwkJb3JpZ2luX2luY3JlZihwb3JpZ2luKTsKKwkJb3JpZ2luX2RlY3JlZihlLT5zdXNwZWN0KTsKKwkJZS0+c3VzcGVjdCA9IHBvcmlnaW47CisJfQorCXF1ZXVlX2JsYW1lcyhzYiwgcG9yaWdpbiwgc3VzcGVjdHMpOworfQorCisvKgorICogV2UgcGFzcyBibGFtZSBmcm9tIHRoZSBjdXJyZW50IGNvbW1pdCB0byBpdHMgcGFyZW50cy4gIFdlIGtlZXAgc2F5aW5nCisgKiAicGFyZW50IiAoYW5kICJwb3JpZ2luIiksIGJ1dCB3aGF0IHdlIG1lYW4gaXMgdG8gZmluZCBzY2FwZWdvYXQgdG8KKyAqIGV4b25lcmF0ZSBvdXJzZWx2ZXMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmZpcnN0X3NjYXBlZ29hdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpZiAoIXJldmVyc2UpIHsKKwkJaWYgKHJldnMtPmZpcnN0X3BhcmVudF9vbmx5ICYmCisJCSAgICBjb21taXQtPnBhcmVudHMgJiYKKwkJICAgIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkgeworCQkJZnJlZV9jb21taXRfbGlzdChjb21taXQtPnBhcmVudHMtPm5leHQpOworCQkJY29tbWl0LT5wYXJlbnRzLT5uZXh0ID0gTlVMTDsKKwkJfQorCQlyZXR1cm4gY29tbWl0LT5wYXJlbnRzOworCX0KKwlyZXR1cm4gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPmNoaWxkcmVuLCAmY29tbWl0LT5vYmplY3QpOworfQorCitzdGF0aWMgaW50IG51bV9zY2FwZWdvYXRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbCA9IGZpcnN0X3NjYXBlZ29hdChyZXZzLCBjb21taXQpOworCXJldHVybiBjb21taXRfbGlzdF9jb3VudChsKTsKK30KKworLyogRGlzdHJpYnV0ZSBjb2xsZWN0ZWQgdW5zb3J0ZWQgYmxhbWVzIHRvIHRoZSByZXNwZWN0ZWQgc29ydGVkIGxpc3RzCisgKiBpbiB0aGUgdmFyaW91cyBvcmlnaW5zLgorICovCitzdGF0aWMgdm9pZCBkaXN0cmlidXRlX2JsYW1lKHN0cnVjdCBzY29yZWJvYXJkICpzYiwgc3RydWN0IGJsYW1lX2VudHJ5ICpibGFtZWQpCit7CisJYmxhbWVkID0gYmxhbWVfc29ydChibGFtZWQsIGNvbXBhcmVfYmxhbWVfc3VzcGVjdCk7CisJd2hpbGUgKGJsYW1lZCkKKwl7CisJCXN0cnVjdCBvcmlnaW4gKnBvcmlnaW4gPSBibGFtZWQtPnN1c3BlY3Q7CisJCXN0cnVjdCBibGFtZV9lbnRyeSAqc3VzcGVjdHMgPSBOVUxMOworCQlkbyB7CisJCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQgPSBibGFtZWQtPm5leHQ7CisJCQlibGFtZWQtPm5leHQgPSBzdXNwZWN0czsKKwkJCXN1c3BlY3RzID0gYmxhbWVkOworCQkJYmxhbWVkID0gbmV4dDsKKwkJfSB3aGlsZSAoYmxhbWVkICYmIGJsYW1lZC0+c3VzcGVjdCA9PSBwb3JpZ2luKTsKKwkJc3VzcGVjdHMgPSByZXZlcnNlX2JsYW1lKHN1c3BlY3RzLCBOVUxMKTsKKwkJcXVldWVfYmxhbWVzKHNiLCBwb3JpZ2luLCBzdXNwZWN0cyk7CisJfQorfQorCisjZGVmaW5lIE1BWFNHIDE2CisKK3N0YXRpYyB2b2lkIHBhc3NfYmxhbWUoc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBzdHJ1Y3Qgb3JpZ2luICpvcmlnaW4sIGludCBvcHQpCit7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gc2ItPnJldnM7CisJaW50IGksIHBhc3MsIG51bV9zZzsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBvcmlnaW4tPmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnNnOworCXN0cnVjdCBvcmlnaW4gKnNnX2J1ZltNQVhTR107CisJc3RydWN0IG9yaWdpbiAqcG9yaWdpbiwgKipzZ19vcmlnaW4gPSBzZ19idWY7CisJc3RydWN0IGJsYW1lX2VudHJ5ICp0b29zbWFsbCA9IE5VTEw7CisJc3RydWN0IGJsYW1lX2VudHJ5ICpibGFtZXMsICoqYmxhbWV0YWlsID0gJmJsYW1lczsKKworCW51bV9zZyA9IG51bV9zY2FwZWdvYXRzKHJldnMsIGNvbW1pdCk7CisJaWYgKCFudW1fc2cpCisJCWdvdG8gZmluaXNoOworCWVsc2UgaWYgKG51bV9zZyA8IEFSUkFZX1NJWkUoc2dfYnVmKSkKKwkJbWVtc2V0KHNnX2J1ZiwgMCwgc2l6ZW9mKHNnX2J1ZikpOworCWVsc2UKKwkJc2dfb3JpZ2luID0geGNhbGxvYyhudW1fc2csIHNpemVvZigqc2dfb3JpZ2luKSk7CisKKwkvKgorCSAqIFRoZSBmaXJzdCBwYXNzIGxvb2tzIGZvciB1bnJlbmFtZWQgcGF0aCB0byBvcHRpbWl6ZSBmb3IKKwkgKiBjb21tb24gY2FzZXMsIHRoZW4gd2UgbG9vayBmb3IgcmVuYW1lcyBpbiB0aGUgc2Vjb25kIHBhc3MuCisJICovCisJZm9yIChwYXNzID0gMDsgcGFzcyA8IDIgLSBub193aG9sZV9maWxlX3JlbmFtZTsgcGFzcysrKSB7CisJCXN0cnVjdCBvcmlnaW4gKigqZmluZCkoc3RydWN0IHNjb3JlYm9hcmQgKiwKKwkJCQkgICAgICAgc3RydWN0IGNvbW1pdCAqLCBzdHJ1Y3Qgb3JpZ2luICopOworCQlmaW5kID0gcGFzcyA/IGZpbmRfcmVuYW1lIDogZmluZF9vcmlnaW47CisKKwkJZm9yIChpID0gMCwgc2cgPSBmaXJzdF9zY2FwZWdvYXQocmV2cywgY29tbWl0KTsKKwkJICAgICBpIDwgbnVtX3NnICYmIHNnOworCQkgICAgIHNnID0gc2ctPm5leHQsIGkrKykgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHNnLT5pdGVtOworCQkJaW50IGosIHNhbWU7CisKKwkJCWlmIChzZ19vcmlnaW5baV0pCisJCQkJY29udGludWU7CisJCQlpZiAocGFyc2VfY29tbWl0KHApKQorCQkJCWNvbnRpbnVlOworCQkJcG9yaWdpbiA9IGZpbmQoc2IsIHAsIG9yaWdpbik7CisJCQlpZiAoIXBvcmlnaW4pCisJCQkJY29udGludWU7CisJCQlpZiAoIWhhc2hjbXAocG9yaWdpbi0+YmxvYl9zaGExLCBvcmlnaW4tPmJsb2Jfc2hhMSkpIHsKKwkJCQlwYXNzX3dob2xlX2JsYW1lKHNiLCBvcmlnaW4sIHBvcmlnaW4pOworCQkJCW9yaWdpbl9kZWNyZWYocG9yaWdpbik7CisJCQkJZ290byBmaW5pc2g7CisJCQl9CisJCQlmb3IgKGogPSBzYW1lID0gMDsgaiA8IGk7IGorKykKKwkJCQlpZiAoc2dfb3JpZ2luW2pdICYmCisJCQkJICAgICFoYXNoY21wKHNnX29yaWdpbltqXS0+YmxvYl9zaGExLAorCQkJCQkgICAgIHBvcmlnaW4tPmJsb2Jfc2hhMSkpIHsKKwkJCQkJc2FtZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWlmICghc2FtZSkKKwkJCQlzZ19vcmlnaW5baV0gPSBwb3JpZ2luOworCQkJZWxzZQorCQkJCW9yaWdpbl9kZWNyZWYocG9yaWdpbik7CisJCX0KKwl9CisKKwludW1fY29tbWl0cysrOworCWZvciAoaSA9IDAsIHNnID0gZmlyc3Rfc2NhcGVnb2F0KHJldnMsIGNvbW1pdCk7CisJICAgICBpIDwgbnVtX3NnICYmIHNnOworCSAgICAgc2cgPSBzZy0+bmV4dCwgaSsrKSB7CisJCXN0cnVjdCBvcmlnaW4gKnBvcmlnaW4gPSBzZ19vcmlnaW5baV07CisJCWlmICghcG9yaWdpbikKKwkJCWNvbnRpbnVlOworCQlpZiAoIW9yaWdpbi0+cHJldmlvdXMpIHsKKwkJCW9yaWdpbl9pbmNyZWYocG9yaWdpbik7CisJCQlvcmlnaW4tPnByZXZpb3VzID0gcG9yaWdpbjsKKwkJfQorCQlwYXNzX2JsYW1lX3RvX3BhcmVudChzYiwgb3JpZ2luLCBwb3JpZ2luKTsKKwkJaWYgKCFvcmlnaW4tPnN1c3BlY3RzKQorCQkJZ290byBmaW5pc2g7CisJfQorCisJLyoKKwkgKiBPcHRpb25hbGx5IGZpbmQgbW92ZXMgaW4gcGFyZW50cycgZmlsZXMuCisJICovCisJaWYgKG9wdCAmIFBJQ0tBWEVfQkxBTUVfTU9WRSkgeworCQlmaWx0ZXJfc21hbGwoc2IsICZ0b29zbWFsbCwgJm9yaWdpbi0+c3VzcGVjdHMsIGJsYW1lX21vdmVfc2NvcmUpOworCQlpZiAob3JpZ2luLT5zdXNwZWN0cykgeworCQkJZm9yIChpID0gMCwgc2cgPSBmaXJzdF9zY2FwZWdvYXQocmV2cywgY29tbWl0KTsKKwkJCSAgICAgaSA8IG51bV9zZyAmJiBzZzsKKwkJCSAgICAgc2cgPSBzZy0+bmV4dCwgaSsrKSB7CisJCQkJc3RydWN0IG9yaWdpbiAqcG9yaWdpbiA9IHNnX29yaWdpbltpXTsKKwkJCQlpZiAoIXBvcmlnaW4pCisJCQkJCWNvbnRpbnVlOworCQkJCWZpbmRfbW92ZV9pbl9wYXJlbnQoc2IsICZibGFtZXRhaWwsICZ0b29zbWFsbCwgb3JpZ2luLCBwb3JpZ2luKTsKKwkJCQlpZiAoIW9yaWdpbi0+c3VzcGVjdHMpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBPcHRpb25hbGx5IGZpbmQgY29waWVzIGZyb20gcGFyZW50cycgZmlsZXMuCisJICovCisJaWYgKG9wdCAmIFBJQ0tBWEVfQkxBTUVfQ09QWSkgeworCQlpZiAoYmxhbWVfY29weV9zY29yZSA+IGJsYW1lX21vdmVfc2NvcmUpCisJCQlmaWx0ZXJfc21hbGwoc2IsICZ0b29zbWFsbCwgJm9yaWdpbi0+c3VzcGVjdHMsIGJsYW1lX2NvcHlfc2NvcmUpOworCQllbHNlIGlmIChibGFtZV9jb3B5X3Njb3JlIDwgYmxhbWVfbW92ZV9zY29yZSkgeworCQkJb3JpZ2luLT5zdXNwZWN0cyA9IGJsYW1lX21lcmdlKG9yaWdpbi0+c3VzcGVjdHMsIHRvb3NtYWxsKTsKKwkJCXRvb3NtYWxsID0gTlVMTDsKKwkJCWZpbHRlcl9zbWFsbChzYiwgJnRvb3NtYWxsLCAmb3JpZ2luLT5zdXNwZWN0cywgYmxhbWVfY29weV9zY29yZSk7CisJCX0KKwkJaWYgKCFvcmlnaW4tPnN1c3BlY3RzKQorCQkJZ290byBmaW5pc2g7CisKKwkJZm9yIChpID0gMCwgc2cgPSBmaXJzdF9zY2FwZWdvYXQocmV2cywgY29tbWl0KTsKKwkJICAgICBpIDwgbnVtX3NnICYmIHNnOworCQkgICAgIHNnID0gc2ctPm5leHQsIGkrKykgeworCQkJc3RydWN0IG9yaWdpbiAqcG9yaWdpbiA9IHNnX29yaWdpbltpXTsKKwkJCWZpbmRfY29weV9pbl9wYXJlbnQoc2IsICZibGFtZXRhaWwsICZ0b29zbWFsbCwKKwkJCQkJICAgIG9yaWdpbiwgc2ctPml0ZW0sIHBvcmlnaW4sIG9wdCk7CisJCQlpZiAoIW9yaWdpbi0+c3VzcGVjdHMpCisJCQkJZ290byBmaW5pc2g7CisJCX0KKwl9CisKK2ZpbmlzaDoKKwkqYmxhbWV0YWlsID0gTlVMTDsKKwlkaXN0cmlidXRlX2JsYW1lKHNiLCBibGFtZXMpOworCS8qCisJICogcHJlcGVuZCB0b29zbWFsbCB0byBvcmlnaW4tPnN1c3BlY3RzCisJICoKKwkgKiBUaGVyZSBpcyBubyBwb2ludCBpbiBzb3J0aW5nOiB0aGlzIGVuZHMgdXAgb24gYSBiaWcKKwkgKiB1bnNvcnRlZCBsaXN0IGluIHRoZSBjYWxsZXIgYW55d2F5LgorCSAqLworCWlmICh0b29zbWFsbCkgeworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKip0YWlsID0gJnRvb3NtYWxsOworCQl3aGlsZSAoKnRhaWwpCisJCQl0YWlsID0gJigqdGFpbCktPm5leHQ7CisJCSp0YWlsID0gb3JpZ2luLT5zdXNwZWN0czsKKwkJb3JpZ2luLT5zdXNwZWN0cyA9IHRvb3NtYWxsOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3NnOyBpKyspIHsKKwkJaWYgKHNnX29yaWdpbltpXSkgeworCQkJZHJvcF9vcmlnaW5fYmxvYihzZ19vcmlnaW5baV0pOworCQkJb3JpZ2luX2RlY3JlZihzZ19vcmlnaW5baV0pOworCQl9CisJfQorCWRyb3Bfb3JpZ2luX2Jsb2Iob3JpZ2luKTsKKwlpZiAoc2dfYnVmICE9IHNnX29yaWdpbikKKwkJZnJlZShzZ19vcmlnaW4pOworfQorCisvKgorICogSW5mb3JtYXRpb24gb24gY29tbWl0cywgdXNlZCBmb3Igb3V0cHV0LgorICovCitzdHJ1Y3QgY29tbWl0X2luZm8geworCXN0cnVjdCBzdHJidWYgYXV0aG9yOworCXN0cnVjdCBzdHJidWYgYXV0aG9yX21haWw7CisJdW5zaWduZWQgbG9uZyBhdXRob3JfdGltZTsKKwlzdHJ1Y3Qgc3RyYnVmIGF1dGhvcl90ejsKKworCS8qIGZpbGxlZCBvbmx5IHdoZW4gYXNrZWQgZm9yIGRldGFpbHMgKi8KKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdHRlcjsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdHRlcl9tYWlsOworCXVuc2lnbmVkIGxvbmcgY29tbWl0dGVyX3RpbWU7CisJc3RydWN0IHN0cmJ1ZiBjb21taXR0ZXJfdHo7CisKKwlzdHJ1Y3Qgc3RyYnVmIHN1bW1hcnk7Cit9OworCisvKgorICogUGFyc2UgYXV0aG9yL2NvbW1pdHRlciBsaW5lIGluIHRoZSBjb21taXQgb2JqZWN0IGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZCBnZXRfYWNfbGluZShjb25zdCBjaGFyICppbmJ1ZiwgY29uc3QgY2hhciAqd2hhdCwKKwlzdHJ1Y3Qgc3RyYnVmICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICptYWlsLAorCXVuc2lnbmVkIGxvbmcgKnRpbWUsIHN0cnVjdCBzdHJidWYgKnR6KQoreworCXN0cnVjdCBpZGVudF9zcGxpdCBpZGVudDsKKwlzaXplX3QgbGVuLCBtYWlsbGVuLCBuYW1lbGVuOworCWNoYXIgKnRtcCwgKmVuZHA7CisJY29uc3QgY2hhciAqbmFtZWJ1ZiwgKm1haWxidWY7CisKKwl0bXAgPSBzdHJzdHIoaW5idWYsIHdoYXQpOworCWlmICghdG1wKQorCQlnb3RvIGVycm9yX291dDsKKwl0bXAgKz0gc3RybGVuKHdoYXQpOworCWVuZHAgPSBzdHJjaHIodG1wLCAnXG4nKTsKKwlpZiAoIWVuZHApCisJCWxlbiA9IHN0cmxlbih0bXApOworCWVsc2UKKwkJbGVuID0gZW5kcCAtIHRtcDsKKworCWlmIChzcGxpdF9pZGVudF9saW5lKCZpZGVudCwgdG1wLCBsZW4pKSB7CisJZXJyb3Jfb3V0OgorCQkvKiBVZ2ggKi8KKwkJdG1wID0gIih1bmtub3duKSI7CisJCXN0cmJ1Zl9hZGRzdHIobmFtZSwgdG1wKTsKKwkJc3RyYnVmX2FkZHN0cihtYWlsLCB0bXApOworCQlzdHJidWZfYWRkc3RyKHR6LCB0bXApOworCQkqdGltZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwluYW1lbGVuID0gaWRlbnQubmFtZV9lbmQgLSBpZGVudC5uYW1lX2JlZ2luOworCW5hbWVidWYgPSBpZGVudC5uYW1lX2JlZ2luOworCisJbWFpbGxlbiA9IGlkZW50Lm1haWxfZW5kIC0gaWRlbnQubWFpbF9iZWdpbjsKKwltYWlsYnVmID0gaWRlbnQubWFpbF9iZWdpbjsKKworCWlmIChpZGVudC5kYXRlX2JlZ2luICYmIGlkZW50LmRhdGVfZW5kKQorCQkqdGltZSA9IHN0cnRvdWwoaWRlbnQuZGF0ZV9iZWdpbiwgTlVMTCwgMTApOworCWVsc2UKKwkJKnRpbWUgPSAwOworCisJaWYgKGlkZW50LnR6X2JlZ2luICYmIGlkZW50LnR6X2VuZCkKKwkJc3RyYnVmX2FkZCh0eiwgaWRlbnQudHpfYmVnaW4sIGlkZW50LnR6X2VuZCAtIGlkZW50LnR6X2JlZ2luKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRzdHIodHosICIodW5rbm93bikiKTsKKworCS8qCisJICogTm93LCBjb252ZXJ0IGJvdGggbmFtZSBhbmQgZS1tYWlsIHVzaW5nIG1haWxtYXAKKwkgKi8KKwltYXBfdXNlcigmbWFpbG1hcCwgJm1haWxidWYsICZtYWlsbGVuLAorCQkgJm5hbWVidWYsICZuYW1lbGVuKTsKKworCXN0cmJ1Zl9hZGRmKG1haWwsICI8JS4qcz4iLCAoaW50KW1haWxsZW4sIG1haWxidWYpOworCXN0cmJ1Zl9hZGQobmFtZSwgbmFtZWJ1ZiwgbmFtZWxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1pdF9pbmZvX2luaXQoc3RydWN0IGNvbW1pdF9pbmZvICpjaSkKK3sKKworCXN0cmJ1Zl9pbml0KCZjaS0+YXV0aG9yLCAwKTsKKwlzdHJidWZfaW5pdCgmY2ktPmF1dGhvcl9tYWlsLCAwKTsKKwlzdHJidWZfaW5pdCgmY2ktPmF1dGhvcl90eiwgMCk7CisJc3RyYnVmX2luaXQoJmNpLT5jb21taXR0ZXIsIDApOworCXN0cmJ1Zl9pbml0KCZjaS0+Y29tbWl0dGVyX21haWwsIDApOworCXN0cmJ1Zl9pbml0KCZjaS0+Y29tbWl0dGVyX3R6LCAwKTsKKwlzdHJidWZfaW5pdCgmY2ktPnN1bW1hcnksIDApOworfQorCitzdGF0aWMgdm9pZCBjb21taXRfaW5mb19kZXN0cm95KHN0cnVjdCBjb21taXRfaW5mbyAqY2kpCit7CisKKwlzdHJidWZfcmVsZWFzZSgmY2ktPmF1dGhvcik7CisJc3RyYnVmX3JlbGVhc2UoJmNpLT5hdXRob3JfbWFpbCk7CisJc3RyYnVmX3JlbGVhc2UoJmNpLT5hdXRob3JfdHopOworCXN0cmJ1Zl9yZWxlYXNlKCZjaS0+Y29tbWl0dGVyKTsKKwlzdHJidWZfcmVsZWFzZSgmY2ktPmNvbW1pdHRlcl9tYWlsKTsKKwlzdHJidWZfcmVsZWFzZSgmY2ktPmNvbW1pdHRlcl90eik7CisJc3RyYnVmX3JlbGVhc2UoJmNpLT5zdW1tYXJ5KTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2NvbW1pdF9pbmZvKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICBzdHJ1Y3QgY29tbWl0X2luZm8gKnJldCwKKwkJCSAgICBpbnQgZGV0YWlsZWQpCit7CisJaW50IGxlbjsKKwljb25zdCBjaGFyICpzdWJqZWN0LCAqZW5jb2Rpbmc7CisJY29uc3QgY2hhciAqbWVzc2FnZTsKKworCWNvbW1pdF9pbmZvX2luaXQocmV0KTsKKworCWVuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKKwltZXNzYWdlID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZW5jb2RpbmcpOworCWdldF9hY19saW5lKG1lc3NhZ2UsICJcbmF1dGhvciAiLAorCQkgICAgJnJldC0+YXV0aG9yLCAmcmV0LT5hdXRob3JfbWFpbCwKKwkJICAgICZyZXQtPmF1dGhvcl90aW1lLCAmcmV0LT5hdXRob3JfdHopOworCisJaWYgKCFkZXRhaWxlZCkgeworCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgbWVzc2FnZSk7CisJCXJldHVybjsKKwl9CisKKwlnZXRfYWNfbGluZShtZXNzYWdlLCAiXG5jb21taXR0ZXIgIiwKKwkJICAgICZyZXQtPmNvbW1pdHRlciwgJnJldC0+Y29tbWl0dGVyX21haWwsCisJCSAgICAmcmV0LT5jb21taXR0ZXJfdGltZSwgJnJldC0+Y29tbWl0dGVyX3R6KTsKKworCWxlbiA9IGZpbmRfY29tbWl0X3N1YmplY3QobWVzc2FnZSwgJnN1YmplY3QpOworCWlmIChsZW4pCisJCXN0cmJ1Zl9hZGQoJnJldC0+c3VtbWFyeSwgc3ViamVjdCwgbGVuKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKCZyZXQtPnN1bW1hcnksICIoJXMpIiwgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCisJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIG1lc3NhZ2UpOworfQorCisvKgorICogVG8gYWxsb3cgTEYgYW5kIG90aGVyIG5vbnBvcnRhYmxlIGNoYXJhY3RlcnMgaW4gcGF0aG5hbWVzLAorICogdGhleSBhcmUgYy1zdHlsZSBxdW90ZWQgYXMgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9maWxlbmFtZV9pbmZvKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcHJpbnRmKCJmaWxlbmFtZSAiKTsKKwl3cml0ZV9uYW1lX3F1b3RlZChwYXRoLCBzdGRvdXQsICdcbicpOworfQorCisvKgorICogUG9yY2VsYWluL0luY3JlbWVudGFsIGZvcm1hdCB3YW50cyB0byBzaG93IGEgbG90IG9mIGRldGFpbHMgcGVyCisgKiBjb21taXQuICBJbnN0ZWFkIG9mIHJlcGVhdGluZyB0aGlzIGV2ZXJ5IGxpbmUsIGVtaXQgaXQgb25seSBvbmNlLAorICogdGhlIGZpcnN0IHRpbWUgZWFjaCBjb21taXQgYXBwZWFycyBpbiB0aGUgb3V0cHV0ICh1bmxlc3MgdGhlCisgKiB1c2VyIGhhcyBzcGVjaWZpY2FsbHkgYXNrZWQgZm9yIHVzIHRvIHJlcGVhdCkuCisgKi8KK3N0YXRpYyBpbnQgZW1pdF9vbmVfc3VzcGVjdF9kZXRhaWwoc3RydWN0IG9yaWdpbiAqc3VzcGVjdCwgaW50IHJlcGVhdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2luZm8gY2k7CisKKwlpZiAoIXJlcGVhdCAmJiAoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBNRVRBSU5GT19TSE9XTikpCisJCXJldHVybiAwOworCisJc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gTUVUQUlORk9fU0hPV047CisJZ2V0X2NvbW1pdF9pbmZvKHN1c3BlY3QtPmNvbW1pdCwgJmNpLCAxKTsKKwlwcmludGYoImF1dGhvciAlc1xuIiwgY2kuYXV0aG9yLmJ1Zik7CisJcHJpbnRmKCJhdXRob3ItbWFpbCAlc1xuIiwgY2kuYXV0aG9yX21haWwuYnVmKTsKKwlwcmludGYoImF1dGhvci10aW1lICVsdVxuIiwgY2kuYXV0aG9yX3RpbWUpOworCXByaW50ZigiYXV0aG9yLXR6ICVzXG4iLCBjaS5hdXRob3JfdHouYnVmKTsKKwlwcmludGYoImNvbW1pdHRlciAlc1xuIiwgY2kuY29tbWl0dGVyLmJ1Zik7CisJcHJpbnRmKCJjb21taXR0ZXItbWFpbCAlc1xuIiwgY2kuY29tbWl0dGVyX21haWwuYnVmKTsKKwlwcmludGYoImNvbW1pdHRlci10aW1lICVsdVxuIiwgY2kuY29tbWl0dGVyX3RpbWUpOworCXByaW50ZigiY29tbWl0dGVyLXR6ICVzXG4iLCBjaS5jb21taXR0ZXJfdHouYnVmKTsKKwlwcmludGYoInN1bW1hcnkgJXNcbiIsIGNpLnN1bW1hcnkuYnVmKTsKKwlpZiAoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQlwcmludGYoImJvdW5kYXJ5XG4iKTsKKwlpZiAoc3VzcGVjdC0+cHJldmlvdXMpIHsKKwkJc3RydWN0IG9yaWdpbiAqcHJldiA9IHN1c3BlY3QtPnByZXZpb3VzOworCQlwcmludGYoInByZXZpb3VzICVzICIsIHNoYTFfdG9faGV4KHByZXYtPmNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwkJd3JpdGVfbmFtZV9xdW90ZWQocHJldi0+cGF0aCwgc3Rkb3V0LCAnXG4nKTsKKwl9CisKKwljb21taXRfaW5mb19kZXN0cm95KCZjaSk7CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFRoZSBibGFtZV9lbnRyeSBpcyBmb3VuZCB0byBiZSBndWlsdHkgZm9yIHRoZSByYW5nZS4KKyAqIFNob3cgaXQgaW4gaW5jcmVtZW50YWwgb3V0cHV0LgorICovCitzdGF0aWMgdm9pZCBmb3VuZF9ndWlsdHlfZW50cnkoc3RydWN0IGJsYW1lX2VudHJ5ICplbnQpCit7CisJaWYgKGluY3JlbWVudGFsKSB7CisJCXN0cnVjdCBvcmlnaW4gKnN1c3BlY3QgPSBlbnQtPnN1c3BlY3Q7CisKKwkJcHJpbnRmKCIlcyAlZCAlZCAlZFxuIiwKKwkJICAgICAgIHNoYTFfdG9faGV4KHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LnNoYTEpLAorCQkgICAgICAgZW50LT5zX2xubyArIDEsIGVudC0+bG5vICsgMSwgZW50LT5udW1fbGluZXMpOworCQllbWl0X29uZV9zdXNwZWN0X2RldGFpbChzdXNwZWN0LCAwKTsKKwkJd3JpdGVfZmlsZW5hbWVfaW5mbyhzdXNwZWN0LT5wYXRoKTsKKwkJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgInN0ZG91dCIpOworCX0KK30KKworLyoKKyAqIFRoZSBtYWluIGxvb3AgLS0gd2hpbGUgd2UgaGF2ZSBibG9icyB3aXRoIGxpbmVzIHdob3NlIHRydWUgb3JpZ2luCisgKiBpcyBzdGlsbCB1bmtub3duLCBwaWNrIG9uZSBibG9iLCBhbmQgYWxsb3cgaXRzIGxpbmVzIHRvIHBhc3MgYmxhbWVzCisgKiB0byBpdHMgcGFyZW50cy4gKi8KK3N0YXRpYyB2b2lkIGFzc2lnbl9ibGFtZShzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIGludCBvcHQpCit7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gc2ItPnJldnM7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcHJpb19xdWV1ZV9nZXQoJnNiLT5jb21taXRzKTsKKworCXdoaWxlIChjb21taXQpIHsKKwkJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7CisJCXN0cnVjdCBvcmlnaW4gKnN1c3BlY3QgPSBjb21taXQtPnV0aWw7CisKKwkJLyogZmluZCBvbmUgc3VzcGVjdCB0byBicmVhayBkb3duICovCisJCXdoaWxlIChzdXNwZWN0ICYmICFzdXNwZWN0LT5zdXNwZWN0cykKKwkJCXN1c3BlY3QgPSBzdXNwZWN0LT5uZXh0OworCisJCWlmICghc3VzcGVjdCkgeworCQkJY29tbWl0ID0gcHJpb19xdWV1ZV9nZXQoJnNiLT5jb21taXRzKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYXNzZXJ0KGNvbW1pdCA9PSBzdXNwZWN0LT5jb21taXQpOworCisJCS8qCisJCSAqIFdlIHdpbGwgdXNlIHRoaXMgc3VzcGVjdCBsYXRlciBpbiB0aGUgbG9vcCwKKwkJICogc28gaG9sZCBvbnRvIGl0IGluIHRoZSBtZWFudGltZS4KKwkJICovCisJCW9yaWdpbl9pbmNyZWYoc3VzcGVjdCk7CisJCXBhcnNlX2NvbW1pdChjb21taXQpOworCQlpZiAocmV2ZXJzZSB8fAorCQkgICAgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSAmJgorCQkgICAgICEocmV2cy0+bWF4X2FnZSAhPSAtMSAmJiBjb21taXQtPmRhdGUgPCByZXZzLT5tYXhfYWdlKSkpCisJCQlwYXNzX2JsYW1lKHNiLCBzdXNwZWN0LCBvcHQpOworCQllbHNlIHsKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQlpZiAoY29tbWl0LT5vYmplY3QucGFyc2VkKQorCQkJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKGNvbW1pdCk7CisJCX0KKwkJLyogdHJlYXQgcm9vdCBjb21taXQgYXMgYm91bmRhcnkgKi8KKwkJaWYgKCFjb21taXQtPnBhcmVudHMgJiYgIXNob3dfcm9vdCkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisKKwkJLyogVGFrZSByZXNwb25zaWJpbGl0eSBmb3IgdGhlIHJlbWFpbmluZyBlbnRyaWVzICovCisJCWVudCA9IHN1c3BlY3QtPnN1c3BlY3RzOworCQlpZiAoZW50KSB7CisJCQlzdXNwZWN0LT5ndWlsdHkgPSAxOworCQkJZm9yICg7OykgeworCQkJCXN0cnVjdCBibGFtZV9lbnRyeSAqbmV4dCA9IGVudC0+bmV4dDsKKwkJCQlmb3VuZF9ndWlsdHlfZW50cnkoZW50KTsKKwkJCQlpZiAobmV4dCkgeworCQkJCQllbnQgPSBuZXh0OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZW50LT5uZXh0ID0gc2ItPmVudDsKKwkJCQlzYi0+ZW50ID0gc3VzcGVjdC0+c3VzcGVjdHM7CisJCQkJc3VzcGVjdC0+c3VzcGVjdHMgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCW9yaWdpbl9kZWNyZWYoc3VzcGVjdCk7CisKKwkJaWYgKERFQlVHKSAvKiBzYW5pdHkgKi8KKwkJCXNhbml0eV9jaGVja19yZWZjbnQoc2IpOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdF90aW1lKHVuc2lnbmVkIGxvbmcgdGltZSwgY29uc3QgY2hhciAqdHpfc3RyLAorCQkJICAgICAgIGludCBzaG93X3Jhd190aW1lKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHRpbWVfYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJnRpbWVfYnVmKTsKKwlpZiAoc2hvd19yYXdfdGltZSkgeworCQlzdHJidWZfYWRkZigmdGltZV9idWYsICIlbHUgJXMiLCB0aW1lLCB0el9zdHIpOworCX0KKwllbHNlIHsKKwkJY29uc3QgY2hhciAqdGltZV9zdHI7CisJCXNpemVfdCB0aW1lX3dpZHRoOworCQlpbnQgdHo7CisJCXR6ID0gYXRvaSh0el9zdHIpOworCQl0aW1lX3N0ciA9IHNob3dfZGF0ZSh0aW1lLCB0eiwgJmJsYW1lX2RhdGVfbW9kZSk7CisJCXN0cmJ1Zl9hZGRzdHIoJnRpbWVfYnVmLCB0aW1lX3N0cik7CisJCS8qCisJCSAqIEFkZCBzcGFjZSBwYWRkaW5ncyB0byB0aW1lX2J1ZiB0byBkaXNwbGF5IGEgZml4ZWQgd2lkdGgKKwkJICogc3RyaW5nLCBhbmQgdXNlIHRpbWVfd2lkdGggZm9yIGRpc3BsYXkgd2lkdGggY2FsaWJyYXRpb24uCisJCSAqLworCQlmb3IgKHRpbWVfd2lkdGggPSB1dGY4X3N0cndpZHRoKHRpbWVfc3RyKTsKKwkJICAgICB0aW1lX3dpZHRoIDwgYmxhbWVfZGF0ZV93aWR0aDsKKwkJICAgICB0aW1lX3dpZHRoKyspCisJCQlzdHJidWZfYWRkY2goJnRpbWVfYnVmLCAnICcpOworCX0KKwlyZXR1cm4gdGltZV9idWYuYnVmOworfQorCisjZGVmaW5lIE9VVFBVVF9BTk5PVEFURV9DT01QQVQJMDAxCisjZGVmaW5lIE9VVFBVVF9MT05HX09CSkVDVF9OQU1FCTAwMgorI2RlZmluZSBPVVRQVVRfUkFXX1RJTUVTVEFNUAkwMDQKKyNkZWZpbmUgT1VUUFVUX1BPUkNFTEFJTgkwMTAKKyNkZWZpbmUgT1VUUFVUX1NIT1dfTkFNRQkwMjAKKyNkZWZpbmUgT1VUUFVUX1NIT1dfTlVNQkVSCTA0MAorI2RlZmluZSBPVVRQVVRfU0hPV19TQ09SRSAgICAgIDAxMDAKKyNkZWZpbmUgT1VUUFVUX05PX0FVVEhPUiAgICAgICAwMjAwCisjZGVmaW5lIE9VVFBVVF9TSE9XX0VNQUlMCTA0MDAKKyNkZWZpbmUgT1VUUFVUX0xJTkVfUE9SQ0VMQUlOIDAxMDAwCisKK3N0YXRpYyB2b2lkIGVtaXRfcG9yY2VsYWluX2RldGFpbHMoc3RydWN0IG9yaWdpbiAqc3VzcGVjdCwgaW50IHJlcGVhdCkKK3sKKwlpZiAoZW1pdF9vbmVfc3VzcGVjdF9kZXRhaWwoc3VzcGVjdCwgcmVwZWF0KSB8fAorCSAgICAoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBNT1JFX1RIQU5fT05FX1BBVEgpKQorCQl3cml0ZV9maWxlbmFtZV9pbmZvKHN1c3BlY3QtPnBhdGgpOworfQorCitzdGF0aWMgdm9pZCBlbWl0X3BvcmNlbGFpbihzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIHN0cnVjdCBibGFtZV9lbnRyeSAqZW50LAorCQkJICAgaW50IG9wdCkKK3sKKwlpbnQgcmVwZWF0ID0gb3B0ICYgT1VUUFVUX0xJTkVfUE9SQ0VMQUlOOworCWludCBjbnQ7CisJY29uc3QgY2hhciAqY3A7CisJc3RydWN0IG9yaWdpbiAqc3VzcGVjdCA9IGVudC0+c3VzcGVjdDsKKwljaGFyIGhleFtHSVRfU0hBMV9IRVhTWiArIDFdOworCisJc2hhMV90b19oZXhfcihoZXgsIHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LnNoYTEpOworCXByaW50ZigiJXMgJWQgJWQgJWRcbiIsCisJICAgICAgIGhleCwKKwkgICAgICAgZW50LT5zX2xubyArIDEsCisJICAgICAgIGVudC0+bG5vICsgMSwKKwkgICAgICAgZW50LT5udW1fbGluZXMpOworCWVtaXRfcG9yY2VsYWluX2RldGFpbHMoc3VzcGVjdCwgcmVwZWF0KTsKKworCWNwID0gbnRoX2xpbmUoc2IsIGVudC0+bG5vKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IGVudC0+bnVtX2xpbmVzOyBjbnQrKykgeworCQljaGFyIGNoOworCQlpZiAoY250KSB7CisJCQlwcmludGYoIiVzICVkICVkXG4iLCBoZXgsCisJCQkgICAgICAgZW50LT5zX2xubyArIDEgKyBjbnQsCisJCQkgICAgICAgZW50LT5sbm8gKyAxICsgY250KTsKKwkJCWlmIChyZXBlYXQpCisJCQkJZW1pdF9wb3JjZWxhaW5fZGV0YWlscyhzdXNwZWN0LCAxKTsKKwkJfQorCQlwdXRjaGFyKCdcdCcpOworCQlkbyB7CisJCQljaCA9ICpjcCsrOworCQkJcHV0Y2hhcihjaCk7CisJCX0gd2hpbGUgKGNoICE9ICdcbicgJiYKKwkJCSBjcCA8IHNiLT5maW5hbF9idWYgKyBzYi0+ZmluYWxfYnVmX3NpemUpOworCX0KKworCWlmIChzYi0+ZmluYWxfYnVmX3NpemUgJiYgY3BbLTFdICE9ICdcbicpCisJCXB1dGNoYXIoJ1xuJyk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfb3RoZXIoc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCwgaW50IG9wdCkKK3sKKwlpbnQgY250OworCWNvbnN0IGNoYXIgKmNwOworCXN0cnVjdCBvcmlnaW4gKnN1c3BlY3QgPSBlbnQtPnN1c3BlY3Q7CisJc3RydWN0IGNvbW1pdF9pbmZvIGNpOworCWNoYXIgaGV4W0dJVF9TSEExX0hFWFNaICsgMV07CisJaW50IHNob3dfcmF3X3RpbWUgPSAhIShvcHQgJiBPVVRQVVRfUkFXX1RJTUVTVEFNUCk7CisKKwlnZXRfY29tbWl0X2luZm8oc3VzcGVjdC0+Y29tbWl0LCAmY2ksIDEpOworCXNoYTFfdG9faGV4X3IoaGV4LCBzdXNwZWN0LT5jb21taXQtPm9iamVjdC5zaGExKTsKKworCWNwID0gbnRoX2xpbmUoc2IsIGVudC0+bG5vKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IGVudC0+bnVtX2xpbmVzOyBjbnQrKykgeworCQljaGFyIGNoOworCQlpbnQgbGVuZ3RoID0gKG9wdCAmIE9VVFBVVF9MT05HX09CSkVDVF9OQU1FKSA/IDQwIDogYWJicmV2OworCisJCWlmIChzdXNwZWN0LT5jb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJCWlmIChibGFua19ib3VuZGFyeSkKKwkJCQltZW1zZXQoaGV4LCAnICcsIGxlbmd0aCk7CisJCQllbHNlIGlmICghKG9wdCAmIE9VVFBVVF9BTk5PVEFURV9DT01QQVQpKSB7CisJCQkJbGVuZ3RoLS07CisJCQkJcHV0Y2hhcignXicpOworCQkJfQorCQl9CisKKwkJcHJpbnRmKCIlLipzIiwgbGVuZ3RoLCBoZXgpOworCQlpZiAob3B0ICYgT1VUUFVUX0FOTk9UQVRFX0NPTVBBVCkgeworCQkJY29uc3QgY2hhciAqbmFtZTsKKwkJCWlmIChvcHQgJiBPVVRQVVRfU0hPV19FTUFJTCkKKwkJCQluYW1lID0gY2kuYXV0aG9yX21haWwuYnVmOworCQkJZWxzZQorCQkJCW5hbWUgPSBjaS5hdXRob3IuYnVmOworCQkJcHJpbnRmKCJcdCglMTBzXHQlMTBzXHQlZCkiLCBuYW1lLAorCQkJICAgICAgIGZvcm1hdF90aW1lKGNpLmF1dGhvcl90aW1lLCBjaS5hdXRob3JfdHouYnVmLAorCQkJCQkgICBzaG93X3Jhd190aW1lKSwKKwkJCSAgICAgICBlbnQtPmxubyArIDEgKyBjbnQpOworCQl9IGVsc2UgeworCQkJaWYgKG9wdCAmIE9VVFBVVF9TSE9XX1NDT1JFKQorCQkJCXByaW50ZigiICUqZCAlMDJkIiwKKwkJCQkgICAgICAgbWF4X3Njb3JlX2RpZ2l0cywgZW50LT5zY29yZSwKKwkJCQkgICAgICAgZW50LT5zdXNwZWN0LT5yZWZjbnQpOworCQkJaWYgKG9wdCAmIE9VVFBVVF9TSE9XX05BTUUpCisJCQkJcHJpbnRmKCIgJS0qLipzIiwgbG9uZ2VzdF9maWxlLCBsb25nZXN0X2ZpbGUsCisJCQkJICAgICAgIHN1c3BlY3QtPnBhdGgpOworCQkJaWYgKG9wdCAmIE9VVFBVVF9TSE9XX05VTUJFUikKKwkJCQlwcmludGYoIiAlKmQiLCBtYXhfb3JpZ19kaWdpdHMsCisJCQkJICAgICAgIGVudC0+c19sbm8gKyAxICsgY250KTsKKworCQkJaWYgKCEob3B0ICYgT1VUUFVUX05PX0FVVEhPUikpIHsKKwkJCQljb25zdCBjaGFyICpuYW1lOworCQkJCWludCBwYWQ7CisJCQkJaWYgKG9wdCAmIE9VVFBVVF9TSE9XX0VNQUlMKQorCQkJCQluYW1lID0gY2kuYXV0aG9yX21haWwuYnVmOworCQkJCWVsc2UKKwkJCQkJbmFtZSA9IGNpLmF1dGhvci5idWY7CisJCQkJcGFkID0gbG9uZ2VzdF9hdXRob3IgLSB1dGY4X3N0cndpZHRoKG5hbWUpOworCQkJCXByaW50ZigiICglcyUqcyAlMTBzIiwKKwkJCQkgICAgICAgbmFtZSwgcGFkLCAiIiwKKwkJCQkgICAgICAgZm9ybWF0X3RpbWUoY2kuYXV0aG9yX3RpbWUsCisJCQkJCQkgICBjaS5hdXRob3JfdHouYnVmLAorCQkJCQkJICAgc2hvd19yYXdfdGltZSkpOworCQkJfQorCQkJcHJpbnRmKCIgJSpkKSAiLAorCQkJICAgICAgIG1heF9kaWdpdHMsIGVudC0+bG5vICsgMSArIGNudCk7CisJCX0KKwkJZG8geworCQkJY2ggPSAqY3ArKzsKKwkJCXB1dGNoYXIoY2gpOworCQl9IHdoaWxlIChjaCAhPSAnXG4nICYmCisJCQkgY3AgPCBzYi0+ZmluYWxfYnVmICsgc2ItPmZpbmFsX2J1Zl9zaXplKTsKKwl9CisKKwlpZiAoc2ItPmZpbmFsX2J1Zl9zaXplICYmIGNwWy0xXSAhPSAnXG4nKQorCQlwdXRjaGFyKCdcbicpOworCisJY29tbWl0X2luZm9fZGVzdHJveSgmY2kpOworfQorCitzdGF0aWMgdm9pZCBvdXRwdXQoc3RydWN0IHNjb3JlYm9hcmQgKnNiLCBpbnQgb3B0aW9uKQoreworCXN0cnVjdCBibGFtZV9lbnRyeSAqZW50OworCisJaWYgKG9wdGlvbiAmIE9VVFBVVF9QT1JDRUxBSU4pIHsKKwkJZm9yIChlbnQgPSBzYi0+ZW50OyBlbnQ7IGVudCA9IGVudC0+bmV4dCkgeworCQkJaW50IGNvdW50ID0gMDsKKwkJCXN0cnVjdCBvcmlnaW4gKnN1c3BlY3Q7CisJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBlbnQtPnN1c3BlY3QtPmNvbW1pdDsKKwkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIE1PUkVfVEhBTl9PTkVfUEFUSCkKKwkJCQljb250aW51ZTsKKwkJCWZvciAoc3VzcGVjdCA9IGNvbW1pdC0+dXRpbDsgc3VzcGVjdDsgc3VzcGVjdCA9IHN1c3BlY3QtPm5leHQpIHsKKwkJCQlpZiAoc3VzcGVjdC0+Z3VpbHR5ICYmIGNvdW50KyspIHsKKwkJCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gTU9SRV9USEFOX09ORV9QQVRIOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudDsgZW50ID0gZW50LT5uZXh0KSB7CisJCWlmIChvcHRpb24gJiBPVVRQVVRfUE9SQ0VMQUlOKQorCQkJZW1pdF9wb3JjZWxhaW4oc2IsIGVudCwgb3B0aW9uKTsKKwkJZWxzZSB7CisJCQllbWl0X290aGVyKHNiLCBlbnQsIG9wdGlvbik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfbmV4dF9saW5lKGNvbnN0IGNoYXIgKnN0YXJ0LCBjb25zdCBjaGFyICplbmQpCit7CisJY29uc3QgY2hhciAqbmwgPSBtZW1jaHIoc3RhcnQsICdcbicsIGVuZCAtIHN0YXJ0KTsKKwlyZXR1cm4gbmwgPyBubCArIDEgOiBlbmQ7Cit9CisKKy8qCisgKiBUbyBhbGxvdyBxdWljayBhY2Nlc3MgdG8gdGhlIGNvbnRlbnRzIG9mIG50aCBsaW5lIGluIHRoZQorICogZmluYWwgaW1hZ2UsIHByZXBhcmUgYW4gaW5kZXggaW4gdGhlIHNjb3JlYm9hcmQuCisgKi8KK3N0YXRpYyBpbnQgcHJlcGFyZV9saW5lcyhzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IpCit7CisJY29uc3QgY2hhciAqYnVmID0gc2ItPmZpbmFsX2J1ZjsKKwl1bnNpZ25lZCBsb25nIGxlbiA9IHNiLT5maW5hbF9idWZfc2l6ZTsKKwljb25zdCBjaGFyICplbmQgPSBidWYgKyBsZW47CisJY29uc3QgY2hhciAqcDsKKwlpbnQgKmxpbmVubzsKKwlpbnQgbnVtID0gMDsKKworCWZvciAocCA9IGJ1ZjsgcCA8IGVuZDsgcCA9IGdldF9uZXh0X2xpbmUocCwgZW5kKSkKKwkJbnVtKys7CisKKwlzYi0+bGluZW5vID0gbGluZW5vID0geG1hbGxvYyhzaXplb2YoKnNiLT5saW5lbm8pICogKG51bSArIDEpKTsKKworCWZvciAocCA9IGJ1ZjsgcCA8IGVuZDsgcCA9IGdldF9uZXh0X2xpbmUocCwgZW5kKSkKKwkJKmxpbmVubysrID0gcCAtIGJ1ZjsKKworCSpsaW5lbm8gPSBsZW47CisKKwlzYi0+bnVtX2xpbmVzID0gbnVtOworCXJldHVybiBzYi0+bnVtX2xpbmVzOworfQorCisvKgorICogQWRkIHBob255IGdyYWZ0cyBmb3IgdXNlIHdpdGggLVM7IHRoaXMgaXMgcHJpbWFyaWx5IHRvCisgKiBzdXBwb3J0IGdpdCdzIGN2c3NlcnZlciB0aGF0IHdhbnRzIHRvIGdpdmUgYSBsaW5lYXIgaGlzdG9yeQorICogdG8gaXRzIGNsaWVudHMuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9hbmNlc3RyeShjb25zdCBjaGFyICpncmFmdF9maWxlKQoreworCUZJTEUgKmZwID0gZm9wZW4oZ3JhZnRfZmlsZSwgInIiKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWlmICghZnApCisJCXJldHVybiAtMTsKKwl3aGlsZSAoIXN0cmJ1Zl9nZXR3aG9sZWxpbmUoJmJ1ZiwgZnAsICdcbicpKSB7CisJCS8qIFRoZSBmb3JtYXQgaXMganVzdCAiQ29tbWl0IFBhcmVudDEgUGFyZW50MiAuLi5cbiIgKi8KKwkJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQgPSByZWFkX2dyYWZ0X2xpbmUoYnVmLmJ1ZiwgYnVmLmxlbik7CisJCWlmIChncmFmdCkKKwkJCXJlZ2lzdGVyX2NvbW1pdF9ncmFmdChncmFmdCwgMCk7CisJfQorCWZjbG9zZShmcCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2F1dG9fYWJicmV2KGludCBhdXRvX2FiYnJldiwgc3RydWN0IG9yaWdpbiAqc3VzcGVjdCkKK3sKKwljb25zdCBjaGFyICp1bmlxID0gZmluZF91bmlxdWVfYWJicmV2KHN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LnNoYTEsCisJCQkJCSAgICAgIGF1dG9fYWJicmV2KTsKKwlpbnQgbGVuID0gc3RybGVuKHVuaXEpOworCWlmIChhdXRvX2FiYnJldiA8IGxlbikKKwkJcmV0dXJuIGxlbjsKKwlyZXR1cm4gYXV0b19hYmJyZXY7Cit9CisKKy8qCisgKiBIb3cgbWFueSBjb2x1bW5zIGRvIHdlIG5lZWQgdG8gc2hvdyBsaW5lIG51bWJlcnMsIGF1dGhvcnMsCisgKiBhbmQgZmlsZW5hbWVzPworICovCitzdGF0aWMgdm9pZCBmaW5kX2FsaWdubWVudChzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IsIGludCAqb3B0aW9uKQoreworCWludCBsb25nZXN0X3NyY19saW5lcyA9IDA7CisJaW50IGxvbmdlc3RfZHN0X2xpbmVzID0gMDsKKwl1bnNpZ25lZCBsYXJnZXN0X3Njb3JlID0gMDsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmU7CisJaW50IGNvbXB1dGVfYXV0b19hYmJyZXYgPSAoYWJicmV2IDwgMCk7CisJaW50IGF1dG9fYWJicmV2ID0gZGVmYXVsdF9hYmJyZXY7CisKKwlmb3IgKGUgPSBzYi0+ZW50OyBlOyBlID0gZS0+bmV4dCkgeworCQlzdHJ1Y3Qgb3JpZ2luICpzdXNwZWN0ID0gZS0+c3VzcGVjdDsKKwkJaW50IG51bTsKKworCQlpZiAoY29tcHV0ZV9hdXRvX2FiYnJldikKKwkJCWF1dG9fYWJicmV2ID0gdXBkYXRlX2F1dG9fYWJicmV2KGF1dG9fYWJicmV2LCBzdXNwZWN0KTsKKwkJaWYgKHN0cmNtcChzdXNwZWN0LT5wYXRoLCBzYi0+cGF0aCkpCisJCQkqb3B0aW9uIHw9IE9VVFBVVF9TSE9XX05BTUU7CisJCW51bSA9IHN0cmxlbihzdXNwZWN0LT5wYXRoKTsKKwkJaWYgKGxvbmdlc3RfZmlsZSA8IG51bSkKKwkJCWxvbmdlc3RfZmlsZSA9IG51bTsKKwkJaWYgKCEoc3VzcGVjdC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBNRVRBSU5GT19TSE9XTikpIHsKKwkJCXN0cnVjdCBjb21taXRfaW5mbyBjaTsKKwkJCXN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IE1FVEFJTkZPX1NIT1dOOworCQkJZ2V0X2NvbW1pdF9pbmZvKHN1c3BlY3QtPmNvbW1pdCwgJmNpLCAxKTsKKwkJCWlmICgqb3B0aW9uICYgT1VUUFVUX1NIT1dfRU1BSUwpCisJCQkJbnVtID0gdXRmOF9zdHJ3aWR0aChjaS5hdXRob3JfbWFpbC5idWYpOworCQkJZWxzZQorCQkJCW51bSA9IHV0Zjhfc3Ryd2lkdGgoY2kuYXV0aG9yLmJ1Zik7CisJCQlpZiAobG9uZ2VzdF9hdXRob3IgPCBudW0pCisJCQkJbG9uZ2VzdF9hdXRob3IgPSBudW07CisJCQljb21taXRfaW5mb19kZXN0cm95KCZjaSk7CisJCX0KKwkJbnVtID0gZS0+c19sbm8gKyBlLT5udW1fbGluZXM7CisJCWlmIChsb25nZXN0X3NyY19saW5lcyA8IG51bSkKKwkJCWxvbmdlc3Rfc3JjX2xpbmVzID0gbnVtOworCQludW0gPSBlLT5sbm8gKyBlLT5udW1fbGluZXM7CisJCWlmIChsb25nZXN0X2RzdF9saW5lcyA8IG51bSkKKwkJCWxvbmdlc3RfZHN0X2xpbmVzID0gbnVtOworCQlpZiAobGFyZ2VzdF9zY29yZSA8IGVudF9zY29yZShzYiwgZSkpCisJCQlsYXJnZXN0X3Njb3JlID0gZW50X3Njb3JlKHNiLCBlKTsKKwl9CisJbWF4X29yaWdfZGlnaXRzID0gZGVjaW1hbF93aWR0aChsb25nZXN0X3NyY19saW5lcyk7CisJbWF4X2RpZ2l0cyA9IGRlY2ltYWxfd2lkdGgobG9uZ2VzdF9kc3RfbGluZXMpOworCW1heF9zY29yZV9kaWdpdHMgPSBkZWNpbWFsX3dpZHRoKGxhcmdlc3Rfc2NvcmUpOworCisJaWYgKGNvbXB1dGVfYXV0b19hYmJyZXYpCisJCS8qIG9uZSBtb3JlIGFiYnJldiBsZW5ndGggaXMgbmVlZGVkIGZvciB0aGUgYm91bmRhcnkgY29tbWl0ICovCisJCWFiYnJldiA9IGF1dG9fYWJicmV2ICsgMTsKK30KKworLyoKKyAqIEZvciBkZWJ1Z2dpbmcgLS0gb3JpZ2luIGlzIHJlZmNvdW50ZWQsIGFuZCB0aGlzIGFzc2VydHMgdGhhdAorICogd2UgZG8gbm90IHVuZGVyZmxvdy4KKyAqLworc3RhdGljIHZvaWQgc2FuaXR5X2NoZWNrX3JlZmNudChzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IpCit7CisJaW50IGJhYSA9IDA7CisJc3RydWN0IGJsYW1lX2VudHJ5ICplbnQ7CisKKwlmb3IgKGVudCA9IHNiLT5lbnQ7IGVudDsgZW50ID0gZW50LT5uZXh0KSB7CisJCS8qIE5vYm9keSBzaG91bGQgaGF2ZSB6ZXJvIG9yIG5lZ2F0aXZlIHJlZmNudCAqLworCQlpZiAoZW50LT5zdXNwZWN0LT5yZWZjbnQgPD0gMCkgeworCQkJZnByaW50ZihzdGRlcnIsICIlcyBpbiAlcyBoYXMgbmVnYXRpdmUgcmVmY250ICVkXG4iLAorCQkJCWVudC0+c3VzcGVjdC0+cGF0aCwKKwkJCQlzaGExX3RvX2hleChlbnQtPnN1c3BlY3QtPmNvbW1pdC0+b2JqZWN0LnNoYTEpLAorCQkJCWVudC0+c3VzcGVjdC0+cmVmY250KTsKKwkJCWJhYSA9IDE7CisJCX0KKwl9CisJaWYgKGJhYSkgeworCQlpbnQgb3B0ID0gMDE2MDsKKwkJZmluZF9hbGlnbm1lbnQoc2IsICZvcHQpOworCQlvdXRwdXQoc2IsIG9wdCk7CisJCWRpZSgiQmFhICVkISIsIGJhYSk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgcGFyc2Vfc2NvcmUoY29uc3QgY2hhciAqYXJnKQoreworCWNoYXIgKmVuZDsKKwl1bnNpZ25lZCBsb25nIHNjb3JlID0gc3RydG91bChhcmcsICZlbmQsIDEwKTsKKwlpZiAoKmVuZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHNjb3JlOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYWRkX3ByZWZpeChjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwLCBwYXRoKTsKK30KKworc3RhdGljIGludCBnaXRfYmxhbWVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImJsYW1lLnNob3dyb290IikpIHsKKwkJc2hvd19yb290ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiYmxhbWUuYmxhbmtib3VuZGFyeSIpKSB7CisJCWJsYW5rX2JvdW5kYXJ5ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiYmxhbWUuc2hvd2VtYWlsIikpIHsKKwkJaW50ICpvdXRwdXRfb3B0aW9uID0gY2I7CisJCWlmIChnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCQkqb3V0cHV0X29wdGlvbiB8PSBPVVRQVVRfU0hPV19FTUFJTDsKKwkJZWxzZQorCQkJKm91dHB1dF9vcHRpb24gJj0gfk9VVFBVVF9TSE9XX0VNQUlMOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiYmxhbWUuZGF0ZSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcGFyc2VfZGF0ZV9mb3JtYXQodmFsdWUsICZibGFtZV9kYXRlX21vZGUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodXNlcmRpZmZfY29uZmlnKHZhciwgdmFsdWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyB2b2lkIHZlcmlmeV93b3JraW5nX3RyZWVfcGF0aChzdHJ1Y3QgY29tbWl0ICp3b3JrX3RyZWUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJZm9yIChwYXJlbnRzID0gd29ya190cmVlLT5wYXJlbnRzOyBwYXJlbnRzOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpjb21taXRfc2hhMSA9IHBhcmVudHMtPml0ZW0tPm9iamVjdC5zaGExOworCQl1bnNpZ25lZCBjaGFyIGJsb2Jfc2hhMVsyMF07CisJCXVuc2lnbmVkIG1vZGU7CisKKwkJaWYgKCFnZXRfdHJlZV9lbnRyeShjb21taXRfc2hhMSwgcGF0aCwgYmxvYl9zaGExLCAmbW9kZSkgJiYKKwkJICAgIHNoYTFfb2JqZWN0X2luZm8oYmxvYl9zaGExLCBOVUxMKSA9PSBPQkpfQkxPQikKKwkJCXJldHVybjsKKwl9CisJZGllKCJubyBzdWNoIHBhdGggJyVzJyBpbiBIRUFEIiwgcGF0aCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKiphcHBlbmRfcGFyZW50KHN0cnVjdCBjb21taXRfbGlzdCAqKnRhaWwsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGNvbW1pdCAqcGFyZW50OworCisJcGFyZW50ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJaWYgKCFwYXJlbnQpCisJCWRpZSgibm8gc3VjaCBjb21taXQgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJcmV0dXJuICZjb21taXRfbGlzdF9pbnNlcnQocGFyZW50LCB0YWlsKS0+bmV4dDsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kX21lcmdlX3BhcmVudHMoc3RydWN0IGNvbW1pdF9saXN0ICoqdGFpbCkKK3sKKwlpbnQgbWVyZ2VfaGVhZDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKworCW1lcmdlX2hlYWQgPSBvcGVuKGdpdF9wYXRoX21lcmdlX2hlYWQoKSwgT19SRE9OTFkpOworCWlmIChtZXJnZV9oZWFkIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuOworCQlkaWUoImNhbm5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciLCBnaXRfcGF0aF9tZXJnZV9oZWFkKCkpOworCX0KKworCXdoaWxlICghc3RyYnVmX2dldHdob2xlbGluZV9mZCgmbGluZSwgbWVyZ2VfaGVhZCwgJ1xuJykpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaWYgKGxpbmUubGVuIDwgNDAgfHwgZ2V0X3NoYTFfaGV4KGxpbmUuYnVmLCBzaGExKSkKKwkJCWRpZSgidW5rbm93biBsaW5lIGluICclcyc6ICVzIiwgZ2l0X3BhdGhfbWVyZ2VfaGVhZCgpLCBsaW5lLmJ1Zik7CisJCXRhaWwgPSBhcHBlbmRfcGFyZW50KHRhaWwsIHNoYTEpOworCX0KKwljbG9zZShtZXJnZV9oZWFkKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7Cit9CisKKy8qCisgKiBUaGlzIGlzbid0IGFzIHNpbXBsZSBhcyBwYXNzaW5nIHNiLT5idWYgYW5kIHNiLT5sZW4sIGJlY2F1c2Ugd2UKKyAqIHdhbnQgdG8gdHJhbnNmZXIgb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgdG8gdGhlIGNvbW1pdCAoc28gd2UKKyAqIG11c3QgdXNlIGRldGFjaCkuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9jb21taXRfYnVmZmVyX2Zyb21fc3RyYnVmKHN0cnVjdCBjb21taXQgKmMsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCXNpemVfdCBsZW47CisJdm9pZCAqYnVmID0gc3RyYnVmX2RldGFjaChzYiwgJmxlbik7CisJc2V0X2NvbW1pdF9idWZmZXIoYywgYnVmLCBsZW4pOworfQorCisvKgorICogUHJlcGFyZSBhIGR1bW15IGNvbW1pdCB0aGF0IHJlcHJlc2VudHMgdGhlIHdvcmsgdHJlZSAob3Igc3RhZ2VkKSBpdGVtLgorICogTm90ZSB0aGF0IGFubm90YXRpbmcgd29yayB0cmVlIGl0ZW0gbmV2ZXIgd29ya3MgaW4gdGhlIHJldmVyc2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpmYWtlX3dvcmtpbmdfdHJlZV9jb21taXQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJICAgICAgIGNvbnN0IGNoYXIgKmNvbnRlbnRzX2Zyb20pCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBvcmlnaW4gKm9yaWdpbjsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwYXJlbnRfdGFpbCwgKnBhcmVudDsKKwl1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICppZGVudDsKKwl0aW1lX3Qgbm93OworCWludCBzaXplLCBsZW47CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwl1bnNpZ25lZCBtb2RlOworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisKKwl0aW1lKCZub3cpOworCWNvbW1pdCA9IGFsbG9jX2NvbW1pdF9ub2RlKCk7CisJY29tbWl0LT5vYmplY3QucGFyc2VkID0gMTsKKwljb21taXQtPmRhdGUgPSBub3c7CisJcGFyZW50X3RhaWwgPSAmY29tbWl0LT5wYXJlbnRzOworCisJaWYgKCFyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLCBoZWFkX3NoYTEsIE5VTEwpKQorCQlkaWUoIm5vIHN1Y2ggcmVmOiBIRUFEIik7CisKKwlwYXJlbnRfdGFpbCA9IGFwcGVuZF9wYXJlbnQocGFyZW50X3RhaWwsIGhlYWRfc2hhMSk7CisJYXBwZW5kX21lcmdlX3BhcmVudHMocGFyZW50X3RhaWwpOworCXZlcmlmeV93b3JraW5nX3RyZWVfcGF0aChjb21taXQsIHBhdGgpOworCisJb3JpZ2luID0gbWFrZV9vcmlnaW4oY29tbWl0LCBwYXRoKTsKKworCWlkZW50ID0gZm10X2lkZW50KCJOb3QgQ29tbWl0dGVkIFlldCIsICJub3QuY29tbWl0dGVkLnlldCIsIE5VTEwsIDApOworCXN0cmJ1Zl9hZGRzdHIoJm1zZywgInRyZWUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFxuIik7CisJZm9yIChwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KQorCQlzdHJidWZfYWRkZigmbXNnLCAicGFyZW50ICVzXG4iLAorCQkJICAgIHNoYTFfdG9faGV4KHBhcmVudC0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKKwlzdHJidWZfYWRkZigmbXNnLAorCQkgICAgImF1dGhvciAlc1xuIgorCQkgICAgImNvbW1pdHRlciAlc1xuXG4iCisJCSAgICAiVmVyc2lvbiBvZiAlcyBmcm9tICVzXG4iLAorCQkgICAgaWRlbnQsIGlkZW50LCBwYXRoLAorCQkgICAgKCFjb250ZW50c19mcm9tID8gcGF0aCA6CisJCSAgICAgKCFzdHJjbXAoY29udGVudHNfZnJvbSwgIi0iKSA/ICJzdGFuZGFyZCBpbnB1dCIgOiBjb250ZW50c19mcm9tKSkpOworCXNldF9jb21taXRfYnVmZmVyX2Zyb21fc3RyYnVmKGNvbW1pdCwgJm1zZyk7CisKKwlpZiAoIWNvbnRlbnRzX2Zyb20gfHwgc3RyY21wKCItIiwgY29udGVudHNfZnJvbSkpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWNvbnN0IGNoYXIgKnJlYWRfZnJvbTsKKwkJY2hhciAqYnVmX3B0cjsKKwkJdW5zaWduZWQgbG9uZyBidWZfbGVuOworCisJCWlmIChjb250ZW50c19mcm9tKSB7CisJCQlpZiAoc3RhdChjb250ZW50c19mcm9tLCAmc3QpIDwgMCkKKwkJCQlkaWVfZXJybm8oIkNhbm5vdCBzdGF0ICclcyciLCBjb250ZW50c19mcm9tKTsKKwkJCXJlYWRfZnJvbSA9IGNvbnRlbnRzX2Zyb207CisJCX0KKwkJZWxzZSB7CisJCQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApCisJCQkJZGllX2Vycm5vKCJDYW5ub3QgbHN0YXQgJyVzJyIsIHBhdGgpOworCQkJcmVhZF9mcm9tID0gcGF0aDsKKwkJfQorCQltb2RlID0gY2Fub25fbW9kZShzdC5zdF9tb2RlKTsKKworCQlzd2l0Y2ggKHN0LnN0X21vZGUgJiBTX0lGTVQpIHsKKwkJY2FzZSBTX0lGUkVHOgorCQkJaWYgKERJRkZfT1BUX1RTVChvcHQsIEFMTE9XX1RFWFRDT05WKSAmJgorCQkJICAgIHRleHRjb252X29iamVjdChyZWFkX2Zyb20sIG1vZGUsIG51bGxfc2hhMSwgMCwgJmJ1Zl9wdHIsICZidWZfbGVuKSkKKwkJCQlzdHJidWZfYXR0YWNoKCZidWYsIGJ1Zl9wdHIsIGJ1Zl9sZW4sIGJ1Zl9sZW4gKyAxKTsKKwkJCWVsc2UgaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmJ1ZiwgcmVhZF9mcm9tLCBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplKQorCQkJCWRpZV9lcnJubygiY2Fubm90IG9wZW4gb3IgcmVhZCAnJXMnIiwgcmVhZF9mcm9tKTsKKwkJCWJyZWFrOworCQljYXNlIFNfSUZMTks6CisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZidWYsIHJlYWRfZnJvbSwgc3Quc3Rfc2l6ZSkgPCAwKQorCQkJCWRpZV9lcnJubygiY2Fubm90IHJlYWRsaW5rICclcyciLCByZWFkX2Zyb20pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkaWUoInVuc3VwcG9ydGVkIGZpbGUgdHlwZSAlcyIsIHJlYWRfZnJvbSk7CisJCX0KKwl9CisJZWxzZSB7CisJCS8qIFJlYWRpbmcgZnJvbSBzdGRpbiAqLworCQltb2RlID0gMDsKKwkJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDApIDwgMCkKKwkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHJlYWQgZnJvbSBzdGRpbiIpOworCX0KKwljb252ZXJ0X3RvX2dpdChwYXRoLCBidWYuYnVmLCBidWYubGVuLCAmYnVmLCAwKTsKKwlvcmlnaW4tPmZpbGUucHRyID0gYnVmLmJ1ZjsKKwlvcmlnaW4tPmZpbGUuc2l6ZSA9IGJ1Zi5sZW47CisJcHJldGVuZF9zaGExX2ZpbGUoYnVmLmJ1ZiwgYnVmLmxlbiwgT0JKX0JMT0IsIG9yaWdpbi0+YmxvYl9zaGExKTsKKworCS8qCisJICogUmVhZCB0aGUgY3VycmVudCBpbmRleCwgcmVwbGFjZSB0aGUgcGF0aCBlbnRyeSB3aXRoCisJICogb3JpZ2luLT5ibG9iX3NoYTEgd2l0aG91dCBtdWNraW5nIHdpdGggaXRzIG1vZGUgb3IgdHlwZQorCSAqIGJpdHM7IHdlIGFyZSBub3QgZ29pbmcgdG8gd3JpdGUgdGhpcyBpbmRleCBvdXQgLS0gd2UganVzdAorCSAqIHdhbnQgdG8gcnVuICJkaWZmLWluZGV4IC0tY2FjaGVkIi4KKwkgKi8KKwlkaXNjYXJkX2NhY2hlKCk7CisJcmVhZF9jYWNoZSgpOworCisJbGVuID0gc3RybGVuKHBhdGgpOworCWlmICghbW9kZSkgeworCQlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbGVuKTsKKwkJaWYgKDAgPD0gcG9zKQorCQkJbW9kZSA9IGFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9tb2RlOworCQllbHNlCisJCQkvKiBMZXQncyBub3QgYm90aGVyIHJlYWRpbmcgZnJvbSBIRUFEIHRyZWUgKi8KKwkJCW1vZGUgPSBTX0lGUkVHIHwgMDY0NDsKKwl9CisJc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobGVuKTsKKwljZSA9IHhjYWxsb2MoMSwgc2l6ZSk7CisJaGFzaGNweShjZS0+c2hhMSwgb3JpZ2luLT5ibG9iX3NoYTEpOworCW1lbWNweShjZS0+bmFtZSwgcGF0aCwgbGVuKTsKKwljZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3MoMCk7CisJY2UtPmNlX25hbWVsZW4gPSBsZW47CisJY2UtPmNlX21vZGUgPSBjcmVhdGVfY2VfbW9kZShtb2RlKTsKKwlhZGRfY2FjaGVfZW50cnkoY2UsIEFERF9DQUNIRV9PS19UT19BRER8QUREX0NBQ0hFX09LX1RPX1JFUExBQ0UpOworCisJLyoKKwkgKiBXZSBhcmUgbm90IGdvaW5nIHRvIHdyaXRlIHRoaXMgb3V0LCBzbyB0aGlzIGRvZXMgbm90IG1hdHRlcgorCSAqIHJpZ2h0IG5vdywgYnV0IHNvbWVkYXkgd2UgbWlnaHQgb3B0aW1pemUgZGlmZi1pbmRleCAtLWNhY2hlZAorCSAqIHdpdGggY2FjaGUtdHJlZSBpbmZvcm1hdGlvbi4KKwkgKi8KKwljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aCgmdGhlX2luZGV4LCBwYXRoKTsKKworCXJldHVybiBjb21taXQ7Cit9CisKK3N0YXRpYyBjaGFyICpwcmVwYXJlX2ZpbmFsKHN0cnVjdCBzY29yZWJvYXJkICpzYikKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICpmaW5hbF9jb21taXRfbmFtZSA9IE5VTEw7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gc2ItPnJldnM7CisKKwkvKgorCSAqIFRoZXJlIG11c3QgYmUgb25lIGFuZCBvbmx5IG9uZSBwb3NpdGl2ZSBjb21taXQgaW4gdGhlCisJICogcmV2cy0+cGVuZGluZyBhcnJheS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5pdGVtOworCQlpZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQljb250aW51ZTsKKwkJd2hpbGUgKG9iai0+dHlwZSA9PSBPQkpfVEFHKQorCQkJb2JqID0gZGVyZWZfdGFnKG9iaiwgTlVMTCwgMCk7CisJCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCWRpZSgiTm9uIGNvbW1pdCAlcz8iLCByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSk7CisJCWlmIChzYi0+ZmluYWwpCisJCQlkaWUoIk1vcmUgdGhhbiBvbmUgY29tbWl0IHRvIGRpZyBmcm9tICVzIGFuZCAlcz8iLAorCQkJICAgIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lLAorCQkJICAgIGZpbmFsX2NvbW1pdF9uYW1lKTsKKwkJc2ItPmZpbmFsID0gKHN0cnVjdCBjb21taXQgKikgb2JqOworCQlmaW5hbF9jb21taXRfbmFtZSA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lOworCX0KKwlyZXR1cm4geHN0cmR1cF9vcl9udWxsKGZpbmFsX2NvbW1pdF9uYW1lKTsKK30KKworc3RhdGljIGNoYXIgKnByZXBhcmVfaW5pdGlhbChzdHJ1Y3Qgc2NvcmVib2FyZCAqc2IpCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqZmluYWxfY29tbWl0X25hbWUgPSBOVUxMOworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IHNiLT5yZXZzOworCisJLyoKKwkgKiBUaGVyZSBtdXN0IGJlIG9uZSBhbmQgb25seSBvbmUgbmVnYXRpdmUgY29tbWl0LCBhbmQgaXQgbXVzdCBiZQorCSAqIHRoZSBib3VuZGFyeS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5pdGVtOworCQlpZiAoIShvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQljb250aW51ZTsKKwkJd2hpbGUgKG9iai0+dHlwZSA9PSBPQkpfVEFHKQorCQkJb2JqID0gZGVyZWZfdGFnKG9iaiwgTlVMTCwgMCk7CisJCWlmIChvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCWRpZSgiTm9uIGNvbW1pdCAlcz8iLCByZXZzLT5wZW5kaW5nLm9iamVjdHNbaV0ubmFtZSk7CisJCWlmIChzYi0+ZmluYWwpCisJCQlkaWUoIk1vcmUgdGhhbiBvbmUgY29tbWl0IHRvIGRpZyBkb3duIHRvICVzIGFuZCAlcz8iLAorCQkJICAgIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lLAorCQkJICAgIGZpbmFsX2NvbW1pdF9uYW1lKTsKKwkJc2ItPmZpbmFsID0gKHN0cnVjdCBjb21taXQgKikgb2JqOworCQlmaW5hbF9jb21taXRfbmFtZSA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lOworCX0KKwlpZiAoIWZpbmFsX2NvbW1pdF9uYW1lKQorCQlkaWUoIk5vIGNvbW1pdCB0byBkaWcgZG93biB0bz8iKTsKKwlyZXR1cm4geHN0cmR1cChmaW5hbF9jb21taXRfbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgYmxhbWVfY29weV9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb24sIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqb3B0ID0gb3B0aW9uLT52YWx1ZTsKKworCS8qCisJICogLUMgZW5hYmxlcyBjb3B5IGZyb20gcmVtb3ZlZCBmaWxlczsKKwkgKiAtQyAtQyBlbmFibGVzIGNvcHkgZnJvbSBleGlzdGluZyBmaWxlcywgYnV0IG9ubHkKKwkgKiAgICAgICB3aGVuIGJsYW1pbmcgYSBuZXcgZmlsZTsKKwkgKiAtQyAtQyAtQyBlbmFibGVzIGNvcHkgZnJvbSBleGlzdGluZyBmaWxlcyBmb3IKKwkgKiAgICAgICAgICBldmVyeWJvZHkKKwkgKi8KKwlpZiAoKm9wdCAmIFBJQ0tBWEVfQkxBTUVfQ09QWV9IQVJERVIpCisJCSpvcHQgfD0gUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFU1Q7CisJaWYgKCpvcHQgJiBQSUNLQVhFX0JMQU1FX0NPUFkpCisJCSpvcHQgfD0gUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFUjsKKwkqb3B0IHw9IFBJQ0tBWEVfQkxBTUVfQ09QWSB8IFBJQ0tBWEVfQkxBTUVfTU9WRTsKKworCWlmIChhcmcpCisJCWJsYW1lX2NvcHlfc2NvcmUgPSBwYXJzZV9zY29yZShhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJsYW1lX21vdmVfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9uLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKm9wdCA9IG9wdGlvbi0+dmFsdWU7CisKKwkqb3B0IHw9IFBJQ0tBWEVfQkxBTUVfTU9WRTsKKworCWlmIChhcmcpCisJCWJsYW1lX21vdmVfc2NvcmUgPSBwYXJzZV9zY29yZShhcmcpOworCXJldHVybiAwOworfQorCitpbnQgY21kX2JsYW1lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCWNvbnN0IGNoYXIgKnBhdGg7CisJc3RydWN0IHNjb3JlYm9hcmQgc2I7CisJc3RydWN0IG9yaWdpbiAqbzsKKwlzdHJ1Y3QgYmxhbWVfZW50cnkgKmVudCA9IE5VTEw7CisJbG9uZyBkYXNoZGFzaF9wb3MsIGxubzsKKwljaGFyICpmaW5hbF9jb21taXRfbmFtZSA9IE5VTEw7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCByYW5nZV9saXN0OworCXN0YXRpYyBpbnQgb3V0cHV0X29wdGlvbiA9IDAsIG9wdCA9IDA7CisJc3RhdGljIGludCBzaG93X3N0YXRzID0gMDsKKwlzdGF0aWMgY29uc3QgY2hhciAqcmV2c19maWxlID0gTlVMTDsKKwlzdGF0aWMgY29uc3QgY2hhciAqY29udGVudHNfZnJvbSA9IE5VTEw7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgwLCAiaW5jcmVtZW50YWwiLCAmaW5jcmVtZW50YWwsIE5fKCJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IikpLAorCQlPUFRfQk9PTCgnYicsIE5VTEwsICZibGFua19ib3VuZGFyeSwgTl8oIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiKSksCisJCU9QVF9CT09MKDAsICJyb290IiwgJnNob3dfcm9vdCwgTl8oIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIpKSwKKwkJT1BUX0JPT0woMCwgInNob3ctc3RhdHMiLCAmc2hvd19zdGF0cywgTl8oIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiKSksCisJCU9QVF9CSVQoMCwgInNjb3JlLWRlYnVnIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIpLCBPVVRQVVRfU0hPV19TQ09SRSksCisJCU9QVF9CSVQoJ2YnLCAic2hvdy1uYW1lIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIpLCBPVVRQVVRfU0hPV19OQU1FKSwKKwkJT1BUX0JJVCgnbicsICJzaG93LW51bWJlciIsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9TSE9XX05VTUJFUiksCisJCU9QVF9CSVQoJ3AnLCAicG9yY2VsYWluIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIiksIE9VVFBVVF9QT1JDRUxBSU4pLAorCQlPUFRfQklUKDAsICJsaW5lLXBvcmNlbGFpbiIsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIiksIE9VVFBVVF9QT1JDRUxBSU58T1VUUFVUX0xJTkVfUE9SQ0VMQUlOKSwKKwkJT1BUX0JJVCgnYycsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIpLCBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUKSwKKwkJT1BUX0JJVCgndCcsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9SQVdfVElNRVNUQU1QKSwKKwkJT1BUX0JJVCgnbCcsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIiksIE9VVFBVVF9MT05HX09CSkVDVF9OQU1FKSwKKwkJT1BUX0JJVCgncycsIE5VTEwsICZvdXRwdXRfb3B0aW9uLCBOXygiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIpLCBPVVRQVVRfTk9fQVVUSE9SKSwKKwkJT1BUX0JJVCgnZScsICJzaG93LWVtYWlsIiwgJm91dHB1dF9vcHRpb24sIE5fKCJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiKSwgT1VUUFVUX1NIT1dfRU1BSUwpLAorCQlPUFRfQklUKCd3JywgTlVMTCwgJnhkbF9vcHRzLCBOXygiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiKSwgWERGX0lHTk9SRV9XSElURVNQQUNFKSwKKwkJT1BUX0JJVCgwLCAibWluaW1hbCIsICZ4ZGxfb3B0cywgTl8oIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIpLCBYREZfTkVFRF9NSU5JTUFMKSwKKwkJT1BUX1NUUklORygnUycsIE5VTEwsICZyZXZzX2ZpbGUsIE5fKCJmaWxlIiksIE5fKCJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiKSksCisJCU9QVF9TVFJJTkcoMCwgImNvbnRlbnRzIiwgJmNvbnRlbnRzX2Zyb20sIE5fKCJmaWxlIiksIE5fKCJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ0MnLCBOVUxMLCAmb3B0LCBOXygic2NvcmUiKSwgTl8oIkZpbmQgbGluZSBjb3BpZXMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiKSwgUEFSU0VfT1BUX09QVEFSRywgYmxhbWVfY29weV9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ00nLCBOVUxMLCAmb3B0LCBOXygic2NvcmUiKSwgTl8oIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiKSwgUEFSU0VfT1BUX09QVEFSRywgYmxhbWVfbW92ZV9jYWxsYmFjayB9LAorCQlPUFRfU1RSSU5HX0xJU1QoJ0wnLCBOVUxMLCAmcmFuZ2VfbGlzdCwgTl8oIm4sbSIpLCBOXygiUHJvY2VzcyBvbmx5IGxpbmUgcmFuZ2UgbixtLCBjb3VudGluZyBmcm9tIDEiKSksCisJCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAorCQlPUFRfRU5EKCkKKwl9OworCisJc3RydWN0IHBhcnNlX29wdF9jdHhfdCBjdHg7CisJaW50IGNtZF9pc19hbm5vdGF0ZSA9ICFzdHJjbXAoYXJndlswXSwgImFubm90YXRlIik7CisJc3RydWN0IHJhbmdlX3NldCByYW5nZXM7CisJdW5zaWduZWQgaW50IHJhbmdlX2k7CisJbG9uZyBhbmNob3I7CisKKwlnaXRfY29uZmlnKGdpdF9ibGFtZV9jb25maWcsICZvdXRwdXRfb3B0aW9uKTsKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisJcmV2cy5kYXRlX21vZGUgPSBibGFtZV9kYXRlX21vZGU7CisJRElGRl9PUFRfU0VUKCZyZXZzLmRpZmZvcHQsIEFMTE9XX1RFWFRDT05WKTsKKwlESUZGX09QVF9TRVQoJnJldnMuZGlmZm9wdCwgRk9MTE9XX1JFTkFNRVMpOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKwlkYXNoZGFzaF9wb3MgPSAwOworCisJcGFyc2Vfb3B0aW9uc19zdGFydCgmY3R4LCBhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgUEFSU0VfT1BUX0tFRVBfREFTSERBU0ggfCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisJZm9yICg7OykgeworCQlzd2l0Y2ggKHBhcnNlX29wdGlvbnNfc3RlcCgmY3R4LCBvcHRpb25zLCBibGFtZV9vcHRfdXNhZ2UpKSB7CisJCWNhc2UgUEFSU0VfT1BUX0hFTFA6CisJCQlleGl0KDEyOSk7CisJCWNhc2UgUEFSU0VfT1BUX0RPTkU6CisJCQlpZiAoY3R4LmFyZ3ZbMF0pCisJCQkJZGFzaGRhc2hfcG9zID0gY3R4LmNwaWR4OworCQkJZ290byBwYXJzZV9kb25lOworCQl9CisKKwkJaWYgKCFzdHJjbXAoY3R4LmFyZ3ZbMF0sICItLXJldmVyc2UiKSkgeworCQkJY3R4LmFyZ3ZbMF0gPSAiLS1jaGlsZHJlbiI7CisJCQlyZXZlcnNlID0gMTsKKwkJfQorCQlwYXJzZV9yZXZpc2lvbl9vcHQoJnJldnMsICZjdHgsIG9wdGlvbnMsIGJsYW1lX29wdF91c2FnZSk7CisJfQorcGFyc2VfZG9uZToKKwlub193aG9sZV9maWxlX3JlbmFtZSA9ICFESUZGX09QVF9UU1QoJnJldnMuZGlmZm9wdCwgRk9MTE9XX1JFTkFNRVMpOworCURJRkZfT1BUX0NMUigmcmV2cy5kaWZmb3B0LCBGT0xMT1dfUkVOQU1FUyk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnNfZW5kKCZjdHgpOworCisJaWYgKDAgPCBhYmJyZXYpCisJCS8qIG9uZSBtb3JlIGFiYnJldiBsZW5ndGggaXMgbmVlZGVkIGZvciB0aGUgYm91bmRhcnkgY29tbWl0ICovCisJCWFiYnJldisrOworCisJaWYgKHJldnNfZmlsZSAmJiByZWFkX2FuY2VzdHJ5KHJldnNfZmlsZSkpCisJCWRpZV9lcnJubygicmVhZGluZyBncmFmdCBmaWxlICclcycgZmFpbGVkIiwgcmV2c19maWxlKTsKKworCWlmIChjbWRfaXNfYW5ub3RhdGUpIHsKKwkJb3V0cHV0X29wdGlvbiB8PSBPVVRQVVRfQU5OT1RBVEVfQ09NUEFUOworCQlibGFtZV9kYXRlX21vZGUudHlwZSA9IERBVEVfSVNPODYwMTsKKwl9IGVsc2UgeworCQlibGFtZV9kYXRlX21vZGUgPSByZXZzLmRhdGVfbW9kZTsKKwl9CisKKwkvKiBUaGUgbWF4aW11bSB3aWR0aCB1c2VkIHRvIHNob3cgdGhlIGRhdGVzICovCisJc3dpdGNoIChibGFtZV9kYXRlX21vZGUudHlwZSkgeworCWNhc2UgREFURV9SRkMyODIyOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCJUaHUsIDE5IE9jdCAyMDA2IDE2OjAwOjA0IC0wNzAwIik7CisJCWJyZWFrOworCWNhc2UgREFURV9JU084NjAxX1NUUklDVDoKKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHNpemVvZigiMjAwNi0xMC0xOVQxNjowMDowNC0wNzowMCIpOworCQlicmVhazsKKwljYXNlIERBVEVfSVNPODYwMToKKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHNpemVvZigiMjAwNi0xMC0xOSAxNjowMDowNCAtMDcwMCIpOworCQlicmVhazsKKwljYXNlIERBVEVfUkFXOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCIxMTYxMjk4ODA0IC0wNzAwIik7CisJCWJyZWFrOworCWNhc2UgREFURV9TSE9SVDoKKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHNpemVvZigiMjAwNi0xMC0xOSIpOworCQlicmVhazsKKwljYXNlIERBVEVfUkVMQVRJVkU6CisJCS8qIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlIG1heGltdW0KKwkJICAgZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4gImdpdCBibGFtZSIKKwkJICAgb3V0cHV0LiAgRm9yIEMgbG9jYWxlLCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIsIHdoaWNoCisJCSAgIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QgYW1vbmcgdmFyaW91cyBmb3JtcyBvZgorCQkgICByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQgeW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yCisJCSAgIGZld2VyIGRpc3BsYXkgY29sdW1ucy4gKi8KKwkJYmxhbWVfZGF0ZV93aWR0aCA9IHV0Zjhfc3Ryd2lkdGgoXygiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIpKSArIDE7IC8qIGFkZCB0aGUgbnVsbCAqLworCQlicmVhazsKKwljYXNlIERBVEVfTk9STUFMOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc2l6ZW9mKCJUaHUgT2N0IDE5IDE2OjAwOjA0IDIwMDYgLTA3MDAiKTsKKwkJYnJlYWs7CisJY2FzZSBEQVRFX1NUUkZUSU1FOgorCQlibGFtZV9kYXRlX3dpZHRoID0gc3RybGVuKHNob3dfZGF0ZSgwLCAwLCAmYmxhbWVfZGF0ZV9tb2RlKSkgKyAxOyAvKiBhZGQgdGhlIG51bGwgKi8KKwkJYnJlYWs7CisJfQorCWJsYW1lX2RhdGVfd2lkdGggLT0gMTsgLyogc3RyaXAgdGhlIG51bGwgKi8KKworCWlmIChESUZGX09QVF9UU1QoJnJldnMuZGlmZm9wdCwgRklORF9DT1BJRVNfSEFSREVSKSkKKwkJb3B0IHw9IChQSUNLQVhFX0JMQU1FX0NPUFkgfCBQSUNLQVhFX0JMQU1FX01PVkUgfAorCQkJUElDS0FYRV9CTEFNRV9DT1BZX0hBUkRFUik7CisKKwlpZiAoIWJsYW1lX21vdmVfc2NvcmUpCisJCWJsYW1lX21vdmVfc2NvcmUgPSBCTEFNRV9ERUZBVUxUX01PVkVfU0NPUkU7CisJaWYgKCFibGFtZV9jb3B5X3Njb3JlKQorCQlibGFtZV9jb3B5X3Njb3JlID0gQkxBTUVfREVGQVVMVF9DT1BZX1NDT1JFOworCisJLyoKKwkgKiBXZSBoYXZlIGNvbGxlY3RlZCBvcHRpb25zIHVua25vd24gdG8gdXMgaW4gYXJndlsxLi51bmtdCisJICogd2hpY2ggYXJlIHRvIGJlIHBhc3NlZCB0byByZXZpc2lvbiBtYWNoaW5lcnkgaWYgd2UgYXJlCisJICogZ29pbmcgdG8gZG8gdGhlICJib3R0b20iIHByb2Nlc3NpbmcuCisJICoKKwkgKiBUaGUgcmVtYWluaW5nIGFyZToKKwkgKgorCSAqICgxKSBpZiBkYXNoZGFzaF9wb3MgIT0gMCwgaXQgaXMgZWl0aGVyCisJICogICAgICJibGFtZSBbcmV2aXNpb25zXSAtLSA8cGF0aD4iIG9yCisJICogICAgICJibGFtZSAtLSA8cGF0aD4gPHJldj4iCisJICoKKwkgKiAoMikgb3RoZXJ3aXNlLCBpdCBpcyBvbmUgb2YgdGhlIHR3bzoKKwkgKiAgICAgImJsYW1lIFtyZXZpc2lvbnNdIDxwYXRoPiIKKwkgKiAgICAgImJsYW1lIDxwYXRoPiA8cmV2PiIKKwkgKgorCSAqIE5vdGUgdGhhdCB3ZSBtdXN0IHN0cmlwIG91dCA8cGF0aD4gZnJvbSB0aGUgYXJndW1lbnRzOiB3ZSBkbyBub3QKKwkgKiB3YW50IHRoZSBwYXRoIHBydW5pbmcgYnV0IHdlIG1heSB3YW50ICJib3R0b20iIHByb2Nlc3NpbmcuCisJICovCisJaWYgKGRhc2hkYXNoX3BvcykgeworCQlzd2l0Y2ggKGFyZ2MgLSBkYXNoZGFzaF9wb3MgLSAxKSB7CisJCWNhc2UgMjogLyogKDFiKSAqLworCQkJaWYgKGFyZ2MgIT0gNCkKKwkJCQl1c2FnZV93aXRoX29wdGlvbnMoYmxhbWVfb3B0X3VzYWdlLCBvcHRpb25zKTsKKwkJCS8qIHJlb3JkZXIgZm9yIHRoZSBuZXcgd2F5OiA8cmV2PiAtLSA8cGF0aD4gKi8KKwkJCWFyZ3ZbMV0gPSBhcmd2WzNdOworCQkJYXJndlszXSA9IGFyZ3ZbMl07CisJCQlhcmd2WzJdID0gIi0tIjsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWNhc2UgMTogLyogKDFhKSAqLworCQkJcGF0aCA9IGFkZF9wcmVmaXgocHJlZml4LCBhcmd2Wy0tYXJnY10pOworCQkJYXJndlthcmdjXSA9IE5VTEw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhibGFtZV9vcHRfdXNhZ2UsIG9wdGlvbnMpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFyZ2MgPCAyKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJsYW1lX29wdF91c2FnZSwgb3B0aW9ucyk7CisJCXBhdGggPSBhZGRfcHJlZml4KHByZWZpeCwgYXJndlthcmdjIC0gMV0pOworCQlpZiAoYXJnYyA9PSAzICYmICFmaWxlX2V4aXN0cyhwYXRoKSkgeyAvKiAoMmIpICovCisJCQlwYXRoID0gYWRkX3ByZWZpeChwcmVmaXgsIGFyZ3ZbMV0pOworCQkJYXJndlsxXSA9IGFyZ3ZbMl07CisJCX0KKwkJYXJndlthcmdjIC0gMV0gPSAiLS0iOworCisJCXNldHVwX3dvcmtfdHJlZSgpOworCQlpZiAoIWZpbGVfZXhpc3RzKHBhdGgpKQorCQkJZGllX2Vycm5vKCJjYW5ub3Qgc3RhdCBwYXRoICclcyciLCBwYXRoKTsKKwl9CisKKwlyZXZzLmRpc2FibGVfc3RkaW4gPSAxOworCXNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2cywgTlVMTCk7CisJbWVtc2V0KCZzYiwgMCwgc2l6ZW9mKHNiKSk7CisKKwlzYi5yZXZzID0gJnJldnM7CisJaWYgKCFyZXZlcnNlKSB7CisJCWZpbmFsX2NvbW1pdF9uYW1lID0gcHJlcGFyZV9maW5hbCgmc2IpOworCQlzYi5jb21taXRzLmNvbXBhcmUgPSBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGU7CisJfQorCWVsc2UgaWYgKGNvbnRlbnRzX2Zyb20pCisJCWRpZSgiLS1jb250ZW50cyBhbmQgLS1jaGlsZHJlbiBkbyBub3QgYmxlbmQgd2VsbC4iKTsKKwllbHNlIGlmIChyZXZzLmZpcnN0X3BhcmVudF9vbmx5KQorCQlkaWUoImNvbWJpbmluZyAtLWZpcnN0LXBhcmVudCBhbmQgLS1yZXZlcnNlIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKwllbHNlIHsKKwkJZmluYWxfY29tbWl0X25hbWUgPSBwcmVwYXJlX2luaXRpYWwoJnNiKTsKKwkJc2IuY29tbWl0cy5jb21wYXJlID0gY29tcGFyZV9jb21taXRzX2J5X3JldmVyc2VfY29tbWl0X2RhdGU7CisJfQorCisJaWYgKCFzYi5maW5hbCkgeworCQkvKgorCQkgKiAiLS1ub3QgQSBCIC0tIHBhdGgiIHdpdGhvdXQgYW55dGhpbmcgcG9zaXRpdmU7CisJCSAqIGRvIG5vdCBkZWZhdWx0IHRvIEhFQUQsIGJ1dCB1c2UgdGhlIHdvcmtpbmcgdHJlZQorCQkgKiBvciAiLS1jb250ZW50cyIuCisJCSAqLworCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJc2IuZmluYWwgPSBmYWtlX3dvcmtpbmdfdHJlZV9jb21taXQoJnNiLnJldnMtPmRpZmZvcHQsCisJCQkJCQkgICAgcGF0aCwgY29udGVudHNfZnJvbSk7CisJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgJihzYi5maW5hbC0+b2JqZWN0KSwgIjoiKTsKKwl9CisJZWxzZSBpZiAoY29udGVudHNfZnJvbSkKKwkJZGllKCJDYW5ub3QgdXNlIC0tY29udGVudHMgd2l0aCBmaW5hbCBjb21taXQgb2JqZWN0IG5hbWUiKTsKKworCS8qCisJICogSWYgd2UgaGF2ZSBib3R0b20sIHRoaXMgd2lsbCBtYXJrIHRoZSBhbmNlc3RvcnMgb2YgdGhlCisJICogYm90dG9tIGNvbW1pdHMgd2Ugd291bGQgcmVhY2ggd2hpbGUgdHJhdmVyc2luZyBhcworCSAqIHVuaW50ZXJlc3RpbmcuCisJICovCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKworCWlmIChpc19udWxsX3NoYTEoc2IuZmluYWwtPm9iamVjdC5zaGExKSkgeworCQlvID0gc2IuZmluYWwtPnV0aWw7CisJCXNiLmZpbmFsX2J1ZiA9IHhtZW1kdXB6KG8tPmZpbGUucHRyLCBvLT5maWxlLnNpemUpOworCQlzYi5maW5hbF9idWZfc2l6ZSA9IG8tPmZpbGUuc2l6ZTsKKwl9CisJZWxzZSB7CisJCW8gPSBnZXRfb3JpZ2luKCZzYiwgc2IuZmluYWwsIHBhdGgpOworCQlpZiAoZmlsbF9ibG9iX3NoYTFfYW5kX21vZGUobykpCisJCQlkaWUoIm5vIHN1Y2ggcGF0aCAlcyBpbiAlcyIsIHBhdGgsIGZpbmFsX2NvbW1pdF9uYW1lKTsKKworCQlpZiAoRElGRl9PUFRfVFNUKCZzYi5yZXZzLT5kaWZmb3B0LCBBTExPV19URVhUQ09OVikgJiYKKwkJICAgIHRleHRjb252X29iamVjdChwYXRoLCBvLT5tb2RlLCBvLT5ibG9iX3NoYTEsIDEsIChjaGFyICoqKSAmc2IuZmluYWxfYnVmLAorCQkJCSAgICAmc2IuZmluYWxfYnVmX3NpemUpKQorCQkJOworCQllbHNlCisJCQlzYi5maW5hbF9idWYgPSByZWFkX3NoYTFfZmlsZShvLT5ibG9iX3NoYTEsICZ0eXBlLAorCQkJCQkJICAgICAgJnNiLmZpbmFsX2J1Zl9zaXplKTsKKworCQlpZiAoIXNiLmZpbmFsX2J1ZikKKwkJCWRpZSgiQ2Fubm90IHJlYWQgYmxvYiAlcyBmb3IgcGF0aCAlcyIsCisJCQkgICAgc2hhMV90b19oZXgoby0+YmxvYl9zaGExKSwKKwkJCSAgICBwYXRoKTsKKwl9CisJbnVtX3JlYWRfYmxvYisrOworCWxubyA9IHByZXBhcmVfbGluZXMoJnNiKTsKKworCWlmIChsbm8gJiYgIXJhbmdlX2xpc3QubnIpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmcmFuZ2VfbGlzdCwgeHN0cmR1cCgiMSIpKTsKKworCWFuY2hvciA9IDE7CisJcmFuZ2Vfc2V0X2luaXQoJnJhbmdlcywgcmFuZ2VfbGlzdC5ucik7CisJZm9yIChyYW5nZV9pID0gMDsgcmFuZ2VfaSA8IHJhbmdlX2xpc3QubnI7ICsrcmFuZ2VfaSkgeworCQlsb25nIGJvdHRvbSwgdG9wOworCQlpZiAocGFyc2VfcmFuZ2VfYXJnKHJhbmdlX2xpc3QuaXRlbXNbcmFuZ2VfaV0uc3RyaW5nLAorCQkJCSAgICBudGhfbGluZV9jYiwgJnNiLCBsbm8sIGFuY2hvciwKKwkJCQkgICAgJmJvdHRvbSwgJnRvcCwgc2IucGF0aCkpCisJCQl1c2FnZShibGFtZV91c2FnZSk7CisJCWlmIChsbm8gPCB0b3AgfHwgKChsbm8gfHwgYm90dG9tKSAmJiBsbm8gPCBib3R0b20pKQorCQkJZGllKCJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIsIHBhdGgsIGxubyk7CisJCWlmIChib3R0b20gPCAxKQorCQkJYm90dG9tID0gMTsKKwkJaWYgKHRvcCA8IDEpCisJCQl0b3AgPSBsbm87CisJCWJvdHRvbS0tOworCQlyYW5nZV9zZXRfYXBwZW5kX3Vuc2FmZSgmcmFuZ2VzLCBib3R0b20sIHRvcCk7CisJCWFuY2hvciA9IHRvcCArIDE7CisJfQorCXNvcnRfYW5kX21lcmdlX3JhbmdlX3NldCgmcmFuZ2VzKTsKKworCWZvciAocmFuZ2VfaSA9IHJhbmdlcy5ucjsgcmFuZ2VfaSA+IDA7IC0tcmFuZ2VfaSkgeworCQljb25zdCBzdHJ1Y3QgcmFuZ2UgKnIgPSAmcmFuZ2VzLnJhbmdlc1tyYW5nZV9pIC0gMV07CisJCWxvbmcgYm90dG9tID0gci0+c3RhcnQ7CisJCWxvbmcgdG9wID0gci0+ZW5kOworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKm5leHQgPSBlbnQ7CisJCWVudCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplbnQpKTsKKwkJZW50LT5sbm8gPSBib3R0b207CisJCWVudC0+bnVtX2xpbmVzID0gdG9wIC0gYm90dG9tOworCQllbnQtPnN1c3BlY3QgPSBvOworCQllbnQtPnNfbG5vID0gYm90dG9tOworCQllbnQtPm5leHQgPSBuZXh0OworCQlvcmlnaW5faW5jcmVmKG8pOworCX0KKworCW8tPnN1c3BlY3RzID0gZW50OworCXByaW9fcXVldWVfcHV0KCZzYi5jb21taXRzLCBvLT5jb21taXQpOworCisJb3JpZ2luX2RlY3JlZihvKTsKKworCXJhbmdlX3NldF9yZWxlYXNlKCZyYW5nZXMpOworCXN0cmluZ19saXN0X2NsZWFyKCZyYW5nZV9saXN0LCAwKTsKKworCXNiLmVudCA9IE5VTEw7CisJc2IucGF0aCA9IHBhdGg7CisKKwlyZWFkX21haWxtYXAoJm1haWxtYXAsIE5VTEwpOworCisJaWYgKCFpbmNyZW1lbnRhbCkKKwkJc2V0dXBfcGFnZXIoKTsKKworCWFzc2lnbl9ibGFtZSgmc2IsIG9wdCk7CisKKwlmcmVlKGZpbmFsX2NvbW1pdF9uYW1lKTsKKworCWlmIChpbmNyZW1lbnRhbCkKKwkJcmV0dXJuIDA7CisKKwlzYi5lbnQgPSBibGFtZV9zb3J0KHNiLmVudCwgY29tcGFyZV9ibGFtZV9maW5hbCk7CisKKwljb2FsZXNjZSgmc2IpOworCisJaWYgKCEob3V0cHV0X29wdGlvbiAmIE9VVFBVVF9QT1JDRUxBSU4pKQorCQlmaW5kX2FsaWdubWVudCgmc2IsICZvdXRwdXRfb3B0aW9uKTsKKworCW91dHB1dCgmc2IsIG91dHB1dF9vcHRpb24pOworCWZyZWUoKHZvaWQgKilzYi5maW5hbF9idWYpOworCWZvciAoZW50ID0gc2IuZW50OyBlbnQ7ICkgeworCQlzdHJ1Y3QgYmxhbWVfZW50cnkgKmUgPSBlbnQtPm5leHQ7CisJCWZyZWUoZW50KTsKKwkJZW50ID0gZTsKKwl9CisKKwlpZiAoc2hvd19zdGF0cykgeworCQlwcmludGYoIm51bSByZWFkIGJsb2I6ICVkXG4iLCBudW1fcmVhZF9ibG9iKTsKKwkJcHJpbnRmKCJudW0gZ2V0IHBhdGNoOiAlZFxuIiwgbnVtX2dldF9wYXRjaCk7CisJCXByaW50ZigibnVtIGNvbW1pdHM6ICVkXG4iLCBudW1fY29tbWl0cyk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9icmFuY2guYyBiL2J1aWx0aW4vYnJhbmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5YTQzNgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vYnJhbmNoLmMKQEAgLTAsMCArMSw4NDAgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgYnJhbmNoIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBLcmlzdGlhbiBIw7hnc2JlcmcgPGtyaEByZWRoYXQuY29tPgorICogQmFzZWQgb24gZ2l0LWJyYW5jaC5zaCBieSBKdW5pbyBDIEhhbWFuby4KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiY29sdW1uLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInd0LXN0YXR1cy5oIgorI2luY2x1ZGUgInJlZi1maWx0ZXIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2JyYW5jaF91c2FnZVtdID0geworCU5fKCJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iKSwKKwlOXygiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iKSwKKwlOXygiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIiksCisJTl8oImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIpLAorCU5fKCJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1wb2ludHMtYXRdIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmhlYWQ7CitzdGF0aWMgdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOworCitzdGF0aWMgaW50IGJyYW5jaF91c2VfY29sb3IgPSAtMTsKK3N0YXRpYyBjaGFyIGJyYW5jaF9jb2xvcnNbXVtDT0xPUl9NQVhMRU5dID0geworCUdJVF9DT0xPUl9SRVNFVCwKKwlHSVRfQ09MT1JfTk9STUFMLAkvKiBQTEFJTiAqLworCUdJVF9DT0xPUl9SRUQsCQkvKiBSRU1PVEUgKi8KKwlHSVRfQ09MT1JfTk9STUFMLAkvKiBMT0NBTCAqLworCUdJVF9DT0xPUl9HUkVFTiwJLyogQ1VSUkVOVCAqLworCUdJVF9DT0xPUl9CTFVFLAkJLyogVVBTVFJFQU0gKi8KK307CitlbnVtIGNvbG9yX2JyYW5jaCB7CisJQlJBTkNIX0NPTE9SX1JFU0VUID0gMCwKKwlCUkFOQ0hfQ09MT1JfUExBSU4gPSAxLAorCUJSQU5DSF9DT0xPUl9SRU1PVEUgPSAyLAorCUJSQU5DSF9DT0xPUl9MT0NBTCA9IDMsCisJQlJBTkNIX0NPTE9SX0NVUlJFTlQgPSA0LAorCUJSQU5DSF9DT0xPUl9VUFNUUkVBTSA9IDUKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgb3V0cHV0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbG9wdHM7CisKK3N0YXRpYyBpbnQgcGFyc2VfYnJhbmNoX2NvbG9yX3Nsb3QoY29uc3QgY2hhciAqc2xvdCkKK3sKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgInBsYWluIikpCisJCXJldHVybiBCUkFOQ0hfQ09MT1JfUExBSU47CisJaWYgKCFzdHJjYXNlY21wKHNsb3QsICJyZXNldCIpKQorCQlyZXR1cm4gQlJBTkNIX0NPTE9SX1JFU0VUOworCWlmICghc3RyY2FzZWNtcChzbG90LCAicmVtb3RlIikpCisJCXJldHVybiBCUkFOQ0hfQ09MT1JfUkVNT1RFOworCWlmICghc3RyY2FzZWNtcChzbG90LCAibG9jYWwiKSkKKwkJcmV0dXJuIEJSQU5DSF9DT0xPUl9MT0NBTDsKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgImN1cnJlbnQiKSkKKwkJcmV0dXJuIEJSQU5DSF9DT0xPUl9DVVJSRU5UOworCWlmICghc3RyY2FzZWNtcChzbG90LCAidXBzdHJlYW0iKSkKKwkJcmV0dXJuIEJSQU5DSF9DT0xPUl9VUFNUUkVBTTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2JyYW5jaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqc2xvdF9uYW1lOworCisJaWYgKHN0YXJ0c193aXRoKHZhciwgImNvbHVtbi4iKSkKKwkJcmV0dXJuIGdpdF9jb2x1bW5fY29uZmlnKHZhciwgdmFsdWUsICJicmFuY2giLCAmY29sb3B0cyk7CisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuYnJhbmNoIikpIHsKKwkJYnJhbmNoX3VzZV9jb2xvciA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHNraXBfcHJlZml4KHZhciwgImNvbG9yLmJyYW5jaC4iLCAmc2xvdF9uYW1lKSkgeworCQlpbnQgc2xvdCA9IHBhcnNlX2JyYW5jaF9jb2xvcl9zbG90KHNsb3RfbmFtZSk7CisJCWlmIChzbG90IDwgMCkKKwkJCXJldHVybiAwOworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXJldHVybiBjb2xvcl9wYXJzZSh2YWx1ZSwgYnJhbmNoX2NvbG9yc1tzbG90XSk7CisJfQorCXJldHVybiBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYnJhbmNoX2dldF9jb2xvcihlbnVtIGNvbG9yX2JyYW5jaCBpeCkKK3sKKwlpZiAod2FudF9jb2xvcihicmFuY2hfdXNlX2NvbG9yKSkKKwkJcmV0dXJuIGJyYW5jaF9jb2xvcnNbaXhdOworCXJldHVybiAiIjsKK30KKworc3RhdGljIGludCBicmFuY2hfbWVyZ2VkKGludCBraW5kLCBjb25zdCBjaGFyICpuYW1lLAorCQkJIHN0cnVjdCBjb21taXQgKnJldiwgc3RydWN0IGNvbW1pdCAqaGVhZF9yZXYpCit7CisJLyoKKwkgKiBUaGlzIGNoZWNrcyB3aGV0aGVyIHRoZSBtZXJnZSBiYXNlcyBvZiBicmFuY2ggYW5kIEhFQUQgKG9yCisJICogdGhlIG90aGVyIGJyYW5jaCB0aGlzIGJyYW5jaCBidWlsZHMgdXBvbikgY29udGFpbnMgdGhlCisJICogYnJhbmNoLCB3aGljaCBtZWFucyB0aGF0IHRoZSBicmFuY2ggaGFzIGFscmVhZHkgYmVlbiBtZXJnZWQKKwkgKiBzYWZlbHkgdG8gSEVBRCAob3IgdGhlIG90aGVyIGJyYW5jaCkuCisJICovCisJc3RydWN0IGNvbW1pdCAqcmVmZXJlbmNlX3JldiA9IE5VTEw7CisJY29uc3QgY2hhciAqcmVmZXJlbmNlX25hbWUgPSBOVUxMOworCXZvaWQgKnJlZmVyZW5jZV9uYW1lX3RvX2ZyZWUgPSBOVUxMOworCWludCBtZXJnZWQ7CisKKwlpZiAoa2luZCA9PSBGSUxURVJfUkVGU19CUkFOQ0hFUykgeworCQlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KG5hbWUpOworCQljb25zdCBjaGFyICp1cHN0cmVhbSA9IGJyYW5jaF9nZXRfdXBzdHJlYW0oYnJhbmNoLCBOVUxMKTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCQlpZiAodXBzdHJlYW0gJiYKKwkJICAgIChyZWZlcmVuY2VfbmFtZSA9IHJlZmVyZW5jZV9uYW1lX3RvX2ZyZWUgPQorCQkgICAgIHJlc29sdmVfcmVmZHVwKHVwc3RyZWFtLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCSAgICBzaGExLCBOVUxMKSkgIT0gTlVMTCkKKwkJCXJlZmVyZW5jZV9yZXYgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwl9CisJaWYgKCFyZWZlcmVuY2VfcmV2KQorCQlyZWZlcmVuY2VfcmV2ID0gaGVhZF9yZXY7CisKKwltZXJnZWQgPSBpbl9tZXJnZV9iYXNlcyhyZXYsIHJlZmVyZW5jZV9yZXYpOworCisJLyoKKwkgKiBBZnRlciB0aGUgc2FmZXR5IHZhbHZlIGlzIGZ1bGx5IHJlZGVmaW5lZCB0byAiY2hlY2sgd2l0aAorCSAqIHVwc3RyZWFtLCBpZiBhbnksIG90aGVyd2lzZSB3aXRoIEhFQUQiLCB3ZSBzaG91bGQganVzdAorCSAqIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBpbl9tZXJnZV9iYXNlcygpIGFib3ZlIHdpdGhvdXQKKwkgKiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb2RlLCBidXQgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIHBlcmlvZCwKKwkgKiBhIGdlbnRsZSByZW1pbmRlciBpcyBpbiBvcmRlci4KKwkgKi8KKwlpZiAoKGhlYWRfcmV2ICE9IHJlZmVyZW5jZV9yZXYpICYmCisJICAgIGluX21lcmdlX2Jhc2VzKHJldiwgaGVhZF9yZXYpICE9IG1lcmdlZCkgeworCQlpZiAobWVyZ2VkKQorCQkJd2FybmluZyhfKCJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorCQkJCSIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iKSwKKwkJCQluYW1lLCByZWZlcmVuY2VfbmFtZSk7CisJCWVsc2UKKwkJCXdhcm5pbmcoXygibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKwkJCQkiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIiksCisJCQkJbmFtZSwgcmVmZXJlbmNlX25hbWUpOworCX0KKwlmcmVlKHJlZmVyZW5jZV9uYW1lX3RvX2ZyZWUpOworCXJldHVybiBtZXJnZWQ7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYnJhbmNoX2NvbW1pdChjb25zdCBjaGFyICpicmFuY2huYW1lLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBjb21taXQgKmhlYWRfcmV2LAorCQkJICAgICAgIGludCBraW5kcywgaW50IGZvcmNlKQoreworCXN0cnVjdCBjb21taXQgKnJldiA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCWlmICghcmV2KSB7CisJCWVycm9yKF8oIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIpLCByZWZuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIWZvcmNlICYmICFicmFuY2hfbWVyZ2VkKGtpbmRzLCBicmFuY2huYW1lLCByZXYsIGhlYWRfcmV2KSkgeworCQllcnJvcihfKCJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKwkJICAgICAgIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsICIKKwkJICAgICAgInJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIiksIGJyYW5jaG5hbWUsIGJyYW5jaG5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfYnJhbmNoX2NvbmZpZyhjb25zdCBjaGFyICpicmFuY2huYW1lKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcyIsIGJyYW5jaG5hbWUpOworCWlmIChnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uKGJ1Zi5idWYsIE5VTEwpIDwgMCkKKwkJd2FybmluZyhfKCJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIikpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IGRlbGV0ZV9icmFuY2hlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGludCBmb3JjZSwgaW50IGtpbmRzLAorCQkJICAgaW50IHF1aWV0KQoreworCXN0cnVjdCBjb21taXQgKmhlYWRfcmV2ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNoYXIgKm5hbWUgPSBOVUxMOworCWNvbnN0IGNoYXIgKmZtdDsKKwlpbnQgaTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcmVtb3RlX2JyYW5jaCA9IDA7CisJc3RydWN0IHN0cmJ1ZiBibmFtZSA9IFNUUkJVRl9JTklUOworCisJc3dpdGNoIChraW5kcykgeworCWNhc2UgRklMVEVSX1JFRlNfUkVNT1RFUzoKKwkJZm10ID0gInJlZnMvcmVtb3Rlcy8lcyI7CisJCS8qIEZvciBzdWJzZXF1ZW50IFVJIG1lc3NhZ2VzICovCisJCXJlbW90ZV9icmFuY2ggPSAxOworCisJCWZvcmNlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBGSUxURVJfUkVGU19CUkFOQ0hFUzoKKwkJZm10ID0gInJlZnMvaGVhZHMvJXMiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoXygiY2Fubm90IHVzZSAtYSB3aXRoIC1kIikpOworCX0KKworCWlmICghZm9yY2UpIHsKKwkJaGVhZF9yZXYgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShoZWFkX3NoYTEpOworCQlpZiAoIWhlYWRfcmV2KQorCQkJZGllKF8oIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIpKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKywgc3RyYnVmX3JlbGVhc2UoJmJuYW1lKSkgeworCQljb25zdCBjaGFyICp0YXJnZXQ7CisJCWludCBmbGFncyA9IDA7CisKKwkJc3RyYnVmX2JyYW5jaG5hbWUoJmJuYW1lLCBhcmd2W2ldKTsKKwkJaWYgKGtpbmRzID09IEZJTFRFUl9SRUZTX0JSQU5DSEVTICYmICFzdHJjbXAoaGVhZCwgYm5hbWUuYnVmKSkgeworCQkJZXJyb3IoXygiQ2Fubm90IGRlbGV0ZSB0aGUgYnJhbmNoICclcycgIgorCQkJICAgICAgIndoaWNoIHlvdSBhcmUgY3VycmVudGx5IG9uLiIpLCBibmFtZS5idWYpOworCQkJcmV0ID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZnJlZShuYW1lKTsKKworCQluYW1lID0gbWtwYXRoZHVwKGZtdCwgYm5hbWUuYnVmKTsKKwkJdGFyZ2V0ID0gcmVzb2x2ZV9yZWZfdW5zYWZlKG5hbWUsCisJCQkJCSAgICBSRVNPTFZFX1JFRl9SRUFESU5HCisJCQkJCSAgICB8IFJFU09MVkVfUkVGX05PX1JFQ1VSU0UKKwkJCQkJICAgIHwgUkVTT0xWRV9SRUZfQUxMT1dfQkFEX05BTUUsCisJCQkJCSAgICBzaGExLCAmZmxhZ3MpOworCQlpZiAoIXRhcmdldCkgeworCQkJZXJyb3IocmVtb3RlX2JyYW5jaAorCQkJICAgICAgPyBfKCJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIpCisJCQkgICAgICA6IF8oImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iKSwgYm5hbWUuYnVmKTsKKwkJCXJldCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghKGZsYWdzICYgKFJFRl9JU1NZTVJFRnxSRUZfSVNCUk9LRU4pKSAmJgorCQkgICAgY2hlY2tfYnJhbmNoX2NvbW1pdChibmFtZS5idWYsIG5hbWUsIHNoYTEsIGhlYWRfcmV2LCBraW5kcywKKwkJCQkJZm9yY2UpKSB7CisJCQlyZXQgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZGVsZXRlX3JlZihuYW1lLCBpc19udWxsX3NoYTEoc2hhMSkgPyBOVUxMIDogc2hhMSwKKwkJCSAgICAgICBSRUZfTk9ERVJFRikpIHsKKwkJCWVycm9yKHJlbW90ZV9icmFuY2gKKwkJCSAgICAgID8gXygiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIikKKwkJCSAgICAgIDogXygiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciKSwKKwkJCSAgICAgIGJuYW1lLmJ1Zik7CisJCQlyZXQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFxdWlldCkgeworCQkJcHJpbnRmKHJlbW90ZV9icmFuY2gKKwkJCSAgICAgICA/IF8oIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIpCisJCQkgICAgICAgOiBfKCJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIpLAorCQkJICAgICAgIGJuYW1lLmJ1ZiwKKwkJCSAgICAgICAoZmxhZ3MgJiBSRUZfSVNCUk9LRU4pID8gImJyb2tlbiIKKwkJCSAgICAgICA6IChmbGFncyAmIFJFRl9JU1NZTVJFRikgPyB0YXJnZXQKKwkJCSAgICAgICA6IGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVikpOworCQl9CisJCWRlbGV0ZV9icmFuY2hfY29uZmlnKGJuYW1lLmJ1Zik7CisJfQorCisJZnJlZShuYW1lKTsKKworCXJldHVybihyZXQpOworfQorCitzdGF0aWMgdm9pZCBmaWxsX3RyYWNraW5nX2luZm8oc3RydWN0IHN0cmJ1ZiAqc3RhdCwgY29uc3QgY2hhciAqYnJhbmNoX25hbWUsCisJCWludCBzaG93X3Vwc3RyZWFtX3JlZikKK3sKKwlpbnQgb3VycywgdGhlaXJzOworCWNoYXIgKnJlZiA9IE5VTEw7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChicmFuY2hfbmFtZSk7CisJY29uc3QgY2hhciAqdXBzdHJlYW07CisJc3RydWN0IHN0cmJ1ZiBmYW5jeSA9IFNUUkJVRl9JTklUOworCWludCB1cHN0cmVhbV9pc19nb25lID0gMDsKKwlpbnQgYWRkZWRfZGVjb3JhdGlvbiA9IDE7CisKKwlpZiAoc3RhdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJm91cnMsICZ0aGVpcnMsICZ1cHN0cmVhbSkgPCAwKSB7CisJCWlmICghdXBzdHJlYW0pCisJCQlyZXR1cm47CisJCXVwc3RyZWFtX2lzX2dvbmUgPSAxOworCX0KKworCWlmIChzaG93X3Vwc3RyZWFtX3JlZikgeworCQlyZWYgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZih1cHN0cmVhbSwgMCk7CisJCWlmICh3YW50X2NvbG9yKGJyYW5jaF91c2VfY29sb3IpKQorCQkJc3RyYnVmX2FkZGYoJmZhbmN5LCAiJXMlcyVzIiwKKwkJCQkJYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfVVBTVFJFQU0pLAorCQkJCQlyZWYsIGJyYW5jaF9nZXRfY29sb3IoQlJBTkNIX0NPTE9SX1JFU0VUKSk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoJmZhbmN5LCByZWYpOworCX0KKworCWlmICh1cHN0cmVhbV9pc19nb25lKSB7CisJCWlmIChzaG93X3Vwc3RyZWFtX3JlZikKKwkJCXN0cmJ1Zl9hZGRmKHN0YXQsIF8oIlslczogZ29uZV0iKSwgZmFuY3kuYnVmKTsKKwkJZWxzZQorCQkJYWRkZWRfZGVjb3JhdGlvbiA9IDA7CisJfSBlbHNlIGlmICghb3VycyAmJiAhdGhlaXJzKSB7CisJCWlmIChzaG93X3Vwc3RyZWFtX3JlZikKKwkJCXN0cmJ1Zl9hZGRmKHN0YXQsIF8oIlslc10iKSwgZmFuY3kuYnVmKTsKKwkJZWxzZQorCQkJYWRkZWRfZGVjb3JhdGlvbiA9IDA7CisJfSBlbHNlIGlmICghb3VycykgeworCQlpZiAoc2hvd191cHN0cmVhbV9yZWYpCisJCQlzdHJidWZfYWRkZihzdGF0LCBfKCJbJXM6IGJlaGluZCAlZF0iKSwgZmFuY3kuYnVmLCB0aGVpcnMpOworCQllbHNlCisJCQlzdHJidWZfYWRkZihzdGF0LCBfKCJbYmVoaW5kICVkXSIpLCB0aGVpcnMpOworCisJfSBlbHNlIGlmICghdGhlaXJzKSB7CisJCWlmIChzaG93X3Vwc3RyZWFtX3JlZikKKwkJCXN0cmJ1Zl9hZGRmKHN0YXQsIF8oIlslczogYWhlYWQgJWRdIiksIGZhbmN5LmJ1Ziwgb3Vycyk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKHN0YXQsIF8oIlthaGVhZCAlZF0iKSwgb3Vycyk7CisJfSBlbHNlIHsKKwkJaWYgKHNob3dfdXBzdHJlYW1fcmVmKQorCQkJc3RyYnVmX2FkZGYoc3RhdCwgXygiWyVzOiBhaGVhZCAlZCwgYmVoaW5kICVkXSIpLAorCQkJCSAgICBmYW5jeS5idWYsIG91cnMsIHRoZWlycyk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKHN0YXQsIF8oIlthaGVhZCAlZCwgYmVoaW5kICVkXSIpLAorCQkJCSAgICBvdXJzLCB0aGVpcnMpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmZmFuY3kpOworCWlmIChhZGRlZF9kZWNvcmF0aW9uKQorCQlzdHJidWZfYWRkY2goc3RhdCwgJyAnKTsKKwlmcmVlKHJlZik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF92ZXJib3NlX2luZm8oc3RydWN0IHN0cmJ1ZiAqb3V0LCBzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKml0ZW0sCisJCQkgICAgIHN0cnVjdCByZWZfZmlsdGVyICpmaWx0ZXIsIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJc3RydWN0IHN0cmJ1ZiBzdWJqZWN0ID0gU1RSQlVGX0lOSVQsIHN0YXQgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpzdWIgPSBfKCIgKioqKiBpbnZhbGlkIHJlZiAqKioqIik7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gaXRlbS0+Y29tbWl0OworCisJaWYgKCFwYXJzZV9jb21taXQoY29tbWl0KSkgeworCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsICZzdWJqZWN0KTsKKwkJc3ViID0gc3ViamVjdC5idWY7CisJfQorCisJaWYgKGl0ZW0tPmtpbmQgPT0gRklMVEVSX1JFRlNfQlJBTkNIRVMpCisJCWZpbGxfdHJhY2tpbmdfaW5mbygmc3RhdCwgcmVmbmFtZSwgZmlsdGVyLT52ZXJib3NlID4gMSk7CisKKwlzdHJidWZfYWRkZihvdXQsICIgJXMgJXMlcyIsCisJCWZpbmRfdW5pcXVlX2FiYnJldihpdGVtLT5jb21taXQtPm9iamVjdC5zaGExLCBmaWx0ZXItPmFiYnJldiksCisJCXN0YXQuYnVmLCBzdWIpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdGF0KTsKKwlzdHJidWZfcmVsZWFzZSgmc3ViamVjdCk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfaGVhZF9kZXNjcmlwdGlvbih2b2lkKQoreworCXN0cnVjdCBzdHJidWYgZGVzYyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgc3RhdGU7CisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7CisJd3Rfc3RhdHVzX2dldF9zdGF0ZSgmc3RhdGUsIDEpOworCWlmIChzdGF0ZS5yZWJhc2VfaW5fcHJvZ3Jlc3MgfHwKKwkgICAgc3RhdGUucmViYXNlX2ludGVyYWN0aXZlX2luX3Byb2dyZXNzKQorCQlzdHJidWZfYWRkZigmZGVzYywgXygiKG5vIGJyYW5jaCwgcmViYXNpbmcgJXMpIiksCisJCQkgICAgc3RhdGUuYnJhbmNoKTsKKwllbHNlIGlmIChzdGF0ZS5iaXNlY3RfaW5fcHJvZ3Jlc3MpCisJCXN0cmJ1Zl9hZGRmKCZkZXNjLCBfKCIobm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcykiKSwKKwkJCSAgICBzdGF0ZS5icmFuY2gpOworCWVsc2UgaWYgKHN0YXRlLmRldGFjaGVkX2Zyb20pIHsKKwkJLyogVFJBTlNMQVRPUlM6IG1ha2Ugc3VyZSB0aGVzZSBtYXRjaCBfKCJIRUFEIGRldGFjaGVkIGF0ICIpCisJCSAgIGFuZCBfKCJIRUFEIGRldGFjaGVkIGZyb20gIikgaW4gd3Qtc3RhdHVzLmMgKi8KKwkJaWYgKHN0YXRlLmRldGFjaGVkX2F0KQorCQkJc3RyYnVmX2FkZGYoJmRlc2MsIF8oIihIRUFEIGRldGFjaGVkIGF0ICVzKSIpLAorCQkJCXN0YXRlLmRldGFjaGVkX2Zyb20pOworCQllbHNlCisJCQlzdHJidWZfYWRkZigmZGVzYywgXygiKEhFQUQgZGV0YWNoZWQgZnJvbSAlcykiKSwKKwkJCQlzdGF0ZS5kZXRhY2hlZF9mcm9tKTsKKwl9CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKCZkZXNjLCBfKCIobm8gYnJhbmNoKSIpKTsKKwlmcmVlKHN0YXRlLmJyYW5jaCk7CisJZnJlZShzdGF0ZS5vbnRvKTsKKwlmcmVlKHN0YXRlLmRldGFjaGVkX2Zyb20pOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZkZXNjLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZm9ybWF0X2FuZF9wcmludF9yZWZfaXRlbShzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKml0ZW0sIGludCBtYXh3aWR0aCwKKwkJCQkgICAgICBzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyLCBjb25zdCBjaGFyICpyZW1vdGVfcHJlZml4KQoreworCWNoYXIgYzsKKwlpbnQgY3VycmVudCA9IDA7CisJaW50IGNvbG9yOworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQsIG5hbWUgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpwcmVmaXggPSAiIjsKKwljb25zdCBjaGFyICpkZXNjID0gaXRlbS0+cmVmbmFtZTsKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKworCXN3aXRjaCAoaXRlbS0+a2luZCkgeworCWNhc2UgRklMVEVSX1JFRlNfQlJBTkNIRVM6CisJCXNraXBfcHJlZml4KGRlc2MsICJyZWZzL2hlYWRzLyIsICZkZXNjKTsKKwkJaWYgKCFmaWx0ZXItPmRldGFjaGVkICYmICFzdHJjbXAoZGVzYywgaGVhZCkpCisJCQljdXJyZW50ID0gMTsKKwkJZWxzZQorCQkJY29sb3IgPSBCUkFOQ0hfQ09MT1JfTE9DQUw7CisJCWJyZWFrOworCWNhc2UgRklMVEVSX1JFRlNfUkVNT1RFUzoKKwkJc2tpcF9wcmVmaXgoZGVzYywgInJlZnMvcmVtb3Rlcy8iLCAmZGVzYyk7CisJCWNvbG9yID0gQlJBTkNIX0NPTE9SX1JFTU9URTsKKwkJcHJlZml4ID0gcmVtb3RlX3ByZWZpeDsKKwkJYnJlYWs7CisJY2FzZSBGSUxURVJfUkVGU19ERVRBQ0hFRF9IRUFEOgorCQlkZXNjID0gdG9fZnJlZSA9IGdldF9oZWFkX2Rlc2NyaXB0aW9uKCk7CisJCWN1cnJlbnQgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb2xvciA9IEJSQU5DSF9DT0xPUl9QTEFJTjsKKwkJYnJlYWs7CisJfQorCisJYyA9ICcgJzsKKwlpZiAoY3VycmVudCkgeworCQljID0gJyonOworCQljb2xvciA9IEJSQU5DSF9DT0xPUl9DVVJSRU5UOworCX0KKworCXN0cmJ1Zl9hZGRmKCZuYW1lLCAiJXMlcyIsIHByZWZpeCwgZGVzYyk7CisJaWYgKGZpbHRlci0+dmVyYm9zZSkgeworCQlpbnQgdXRmOF9jb21wZW5zYXRpb24gPSBzdHJsZW4obmFtZS5idWYpIC0gdXRmOF9zdHJ3aWR0aChuYW1lLmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZvdXQsICIlYyAlcyUtKnMlcyIsIGMsIGJyYW5jaF9nZXRfY29sb3IoY29sb3IpLAorCQkJICAgIG1heHdpZHRoICsgdXRmOF9jb21wZW5zYXRpb24sIG5hbWUuYnVmLAorCQkJICAgIGJyYW5jaF9nZXRfY29sb3IoQlJBTkNIX0NPTE9SX1JFU0VUKSk7CisJfSBlbHNlCisJCXN0cmJ1Zl9hZGRmKCZvdXQsICIlYyAlcyVzJXMiLCBjLCBicmFuY2hfZ2V0X2NvbG9yKGNvbG9yKSwKKwkJCSAgICBuYW1lLmJ1ZiwgYnJhbmNoX2dldF9jb2xvcihCUkFOQ0hfQ09MT1JfUkVTRVQpKTsKKworCWlmIChpdGVtLT5zeW1yZWYpIHsKKwkJc2tpcF9wcmVmaXgoaXRlbS0+c3ltcmVmLCAicmVmcy9yZW1vdGVzLyIsICZkZXNjKTsKKwkJc3RyYnVmX2FkZGYoJm91dCwgIiAtPiAlcyIsIGRlc2MpOworCX0KKwllbHNlIGlmIChmaWx0ZXItPnZlcmJvc2UpCisJCS8qICIgZjdjMGMwMCBbYWhlYWQgNTgsIGJlaGluZCAxOTddIHZjcy1zdm46IGRyb3Agb2JqX3Bvb2wuaCIgKi8KKwkJYWRkX3ZlcmJvc2VfaW5mbygmb3V0LCBpdGVtLCBmaWx0ZXIsIGRlc2MpOworCWlmIChjb2x1bW5fYWN0aXZlKGNvbG9wdHMpKSB7CisJCWFzc2VydCghZmlsdGVyLT52ZXJib3NlICYmICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZvdXRwdXQsIG91dC5idWYpOworCX0gZWxzZSB7CisJCXByaW50ZigiJXNcbiIsIG91dC5idWYpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJm91dCk7CisJZnJlZSh0b19mcmVlKTsKK30KKworc3RhdGljIGludCBjYWxjX21heHdpZHRoKHN0cnVjdCByZWZfYXJyYXkgKnJlZnMsIGludCByZW1vdGVfYm9udXMpCit7CisJaW50IGksIG1heCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHJlZnMtPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl9hcnJheV9pdGVtICppdCA9IHJlZnMtPml0ZW1zW2ldOworCQljb25zdCBjaGFyICpkZXNjID0gaXQtPnJlZm5hbWU7CisJCWludCB3OworCisJCXNraXBfcHJlZml4KGl0LT5yZWZuYW1lLCAicmVmcy9oZWFkcy8iLCAmZGVzYyk7CisJCXNraXBfcHJlZml4KGl0LT5yZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIsICZkZXNjKTsKKwkJdyA9IHV0Zjhfc3Ryd2lkdGgoZGVzYyk7CisKKwkJaWYgKGl0LT5raW5kID09IEZJTFRFUl9SRUZTX1JFTU9URVMpCisJCQl3ICs9IHJlbW90ZV9ib251czsKKwkJaWYgKHcgPiBtYXgpCisJCQltYXggPSB3OworCX0KKwlyZXR1cm4gbWF4OworfQorCitzdGF0aWMgdm9pZCBwcmludF9yZWZfbGlzdChzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgcmVmX3NvcnRpbmcgKnNvcnRpbmcpCit7CisJaW50IGk7CisJc3RydWN0IHJlZl9hcnJheSBhcnJheTsKKwlpbnQgbWF4d2lkdGggPSAwOworCWNvbnN0IGNoYXIgKnJlbW90ZV9wcmVmaXggPSAiIjsKKworCS8qCisJICogSWYgd2UgYXJlIGxpc3RpbmcgbW9yZSB0aGFuIGp1c3QgcmVtb3RlIGJyYW5jaGVzLAorCSAqIHRoZW4gcmVtb3RlIGJyYW5jaGVzIHdpbGwgaGF2ZSBhICJyZW1vdGVzLyIgcHJlZml4LgorCSAqIFdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhpcyBpbiB0aGUgd2lkdGguCisJICovCisJaWYgKGZpbHRlci0+a2luZCAhPSBGSUxURVJfUkVGU19SRU1PVEVTKQorCQlyZW1vdGVfcHJlZml4ID0gInJlbW90ZXMvIjsKKworCW1lbXNldCgmYXJyYXksIDAsIHNpemVvZihhcnJheSkpOworCisJdmVyaWZ5X3JlZl9mb3JtYXQoIiUocmVmbmFtZSklKHN5bXJlZikiKTsKKwlmaWx0ZXJfcmVmcygmYXJyYXksIGZpbHRlciwgZmlsdGVyLT5raW5kIHwgRklMVEVSX1JFRlNfSU5DTFVERV9CUk9LRU4pOworCisJaWYgKGZpbHRlci0+dmVyYm9zZSkKKwkJbWF4d2lkdGggPSBjYWxjX21heHdpZHRoKCZhcnJheSwgc3RybGVuKHJlbW90ZV9wcmVmaXgpKTsKKworCS8qCisJICogSWYgbm8gc29ydGluZyBwYXJhbWV0ZXIgaXMgZ2l2ZW4gdGhlbiB3ZSBkZWZhdWx0IHRvIHNvcnRpbmcKKwkgKiBieSAncmVmbmFtZScuIFRoaXMgd291bGQgZ2l2ZSB1cyBhbiBhbHBoYWJldGljYWxseSBzb3J0ZWQKKwkgKiBhcnJheSB3aXRoIHRoZSAnSEVBRCcgcmVmIGF0IHRoZSBiZWdpbm5pbmcgZm9sbG93ZWQgYnkKKwkgKiBsb2NhbCBicmFuY2hlcyAncmVmcy9oZWFkcy8uLi4nIGFuZCBmaW5hbGx5IHJlbW90ZS10YWNraW5nCisJICogYnJhbmNoZXMgJ3JlZnMvcmVtb3Rlcy8uLi4nLgorCSAqLworCWlmICghc29ydGluZykKKwkJc29ydGluZyA9IHJlZl9kZWZhdWx0X3NvcnRpbmcoKTsKKwlyZWZfYXJyYXlfc29ydChzb3J0aW5nLCAmYXJyYXkpOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5Lm5yOyBpKyspCisJCWZvcm1hdF9hbmRfcHJpbnRfcmVmX2l0ZW0oYXJyYXkuaXRlbXNbaV0sIG1heHdpZHRoLCBmaWx0ZXIsIHJlbW90ZV9wcmVmaXgpOworCisJcmVmX2FycmF5X2NsZWFyKCZhcnJheSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbmFtZV9icmFuY2goY29uc3QgY2hhciAqb2xkbmFtZSwgY29uc3QgY2hhciAqbmV3bmFtZSwgaW50IGZvcmNlKQoreworCXN0cnVjdCBzdHJidWYgb2xkcmVmID0gU1RSQlVGX0lOSVQsIG5ld3JlZiA9IFNUUkJVRl9JTklULCBsb2dtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIG9sZHNlY3Rpb24gPSBTVFJCVUZfSU5JVCwgbmV3c2VjdGlvbiA9IFNUUkJVRl9JTklUOworCWludCByZWNvdmVyeSA9IDA7CisJaW50IGNsb2JiZXJfaGVhZF9vazsKKworCWlmICghb2xkbmFtZSkKKwkJZGllKF8oImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIikpOworCisJaWYgKHN0cmJ1Zl9jaGVja19icmFuY2hfcmVmKCZvbGRyZWYsIG9sZG5hbWUpKSB7CisJCS8qCisJCSAqIEJhZCBuYW1lIC0tLSB0aGlzIGNvdWxkIGJlIGFuIGF0dGVtcHQgdG8gcmVuYW1lIGEKKwkJICogcmVmIHRoYXQgd2UgdXNlZCB0byBhbGxvdyB0byBiZSBjcmVhdGVkIGJ5IGFjY2lkZW50LgorCQkgKi8KKwkJaWYgKHJlZl9leGlzdHMob2xkcmVmLmJ1ZikpCisJCQlyZWNvdmVyeSA9IDE7CisJCWVsc2UKKwkJCWRpZShfKCJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIiksIG9sZG5hbWUpOworCX0KKworCS8qCisJICogQSBjb21tYW5kIGxpa2UgImdpdCBicmFuY2ggLU0gY3VycmVudGJyYW5jaCBjdXJyZW50YnJhbmNoIiBjYW5ub3QKKwkgKiBjYXVzZSB0aGUgd29ya3RyZWUgdG8gYmVjb21lIGluY29uc2lzdGVudCB3aXRoIEhFQUQsIHNvIGFsbG93IGl0LgorCSAqLworCWNsb2JiZXJfaGVhZF9vayA9ICFzdHJjbXAob2xkbmFtZSwgbmV3bmFtZSk7CisKKwl2YWxpZGF0ZV9uZXdfYnJhbmNobmFtZShuZXduYW1lLCAmbmV3cmVmLCBmb3JjZSwgY2xvYmJlcl9oZWFkX29rKTsKKworCXN0cmJ1Zl9hZGRmKCZsb2dtc2csICJCcmFuY2g6IHJlbmFtZWQgJXMgdG8gJXMiLAorCQkgb2xkcmVmLmJ1ZiwgbmV3cmVmLmJ1Zik7CisKKwlpZiAocmVuYW1lX3JlZihvbGRyZWYuYnVmLCBuZXdyZWYuYnVmLCBsb2dtc2cuYnVmKSkKKwkJZGllKF8oIkJyYW5jaCByZW5hbWUgZmFpbGVkIikpOworCXN0cmJ1Zl9yZWxlYXNlKCZsb2dtc2cpOworCisJaWYgKHJlY292ZXJ5KQorCQl3YXJuaW5nKF8oIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IiksIG9sZHJlZi5idWYgKyAxMSk7CisKKwkvKiBubyBuZWVkIHRvIHBhc3MgbG9nbXNnIGhlcmUgYXMgSEVBRCBkaWRuJ3QgcmVhbGx5IG1vdmUgKi8KKwlpZiAoIXN0cmNtcChvbGRuYW1lLCBoZWFkKSAmJiBjcmVhdGVfc3ltcmVmKCJIRUFEIiwgbmV3cmVmLmJ1ZiwgTlVMTCkpCisJCWRpZShfKCJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIiksIG5ld25hbWUpOworCisJc3RyYnVmX2FkZGYoJm9sZHNlY3Rpb24sICJicmFuY2guJXMiLCBvbGRyZWYuYnVmICsgMTEpOworCXN0cmJ1Zl9yZWxlYXNlKCZvbGRyZWYpOworCXN0cmJ1Zl9hZGRmKCZuZXdzZWN0aW9uLCAiYnJhbmNoLiVzIiwgbmV3cmVmLmJ1ZiArIDExKTsKKwlzdHJidWZfcmVsZWFzZSgmbmV3cmVmKTsKKwlpZiAoZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihvbGRzZWN0aW9uLmJ1ZiwgbmV3c2VjdGlvbi5idWYpIDwgMCkKKwkJZGllKF8oIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIpKTsKKwlzdHJidWZfcmVsZWFzZSgmb2xkc2VjdGlvbik7CisJc3RyYnVmX3JlbGVhc2UoJm5ld3NlY3Rpb24pOworfQorCitzdGF0aWMgY29uc3QgY2hhciBlZGl0X2Rlc2NyaXB0aW9uW10gPSAiQlJBTkNIX0RFU0NSSVBUSU9OIjsKKworc3RhdGljIGludCBlZGl0X2JyYW5jaF9kZXNjcmlwdGlvbihjb25zdCBjaGFyICpicmFuY2hfbmFtZSkKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CisKKwlyZWFkX2JyYW5jaF9kZXNjKCZidWYsIGJyYW5jaF9uYW1lKTsKKwlpZiAoIWJ1Zi5sZW4gfHwgYnVmLmJ1ZltidWYubGVuLTFdICE9ICdcbicpCisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwlzdHJidWZfY29tbWVudGVkX2FkZGYoJmJ1ZiwKKwkJICAgICJQbGVhc2UgZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2hcbiIKKwkJICAgICIgICVzXG4iCisJCSAgICAiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgc3RyaXBwZWQuXG4iLAorCQkgICAgYnJhbmNoX25hbWUsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwlpZiAod3JpdGVfZmlsZV9nZW50bHkoZ2l0X3BhdGgoZWRpdF9kZXNjcmlwdGlvbiksICIlcyIsIGJ1Zi5idWYpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IHdyaXRlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZW1wbGF0ZTogJXMiKSwKKwkJCSAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJc3RyYnVmX3Jlc2V0KCZidWYpOworCWlmIChsYXVuY2hfZWRpdG9yKGdpdF9wYXRoKGVkaXRfZGVzY3JpcHRpb24pLCAmYnVmLCBOVUxMKSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfc3RyaXBzcGFjZSgmYnVmLCAxKTsKKworCXN0cmJ1Zl9hZGRmKCZuYW1lLCAiYnJhbmNoLiVzLmRlc2NyaXB0aW9uIiwgYnJhbmNoX25hbWUpOworCXN0YXR1cyA9IGdpdF9jb25maWdfc2V0KG5hbWUuYnVmLCBidWYubGVuID8gYnVmLmJ1ZiA6IE5VTEwpOworCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBjbWRfYnJhbmNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBkZWxldGUgPSAwLCByZW5hbWUgPSAwLCBmb3JjZSA9IDAsIGxpc3QgPSAwOworCWludCByZWZsb2cgPSAwLCBlZGl0X2Rlc2NyaXB0aW9uID0gMDsKKwlpbnQgcXVpZXQgPSAwLCB1bnNldF91cHN0cmVhbSA9IDA7CisJY29uc3QgY2hhciAqbmV3X3Vwc3RyZWFtID0gTlVMTDsKKwllbnVtIGJyYW5jaF90cmFjayB0cmFjazsKKwlzdHJ1Y3QgcmVmX2ZpbHRlciBmaWx0ZXI7CisJc3RhdGljIHN0cnVjdCByZWZfc29ydGluZyAqc29ydGluZyA9IE5VTEwsICoqc29ydGluZ190YWlsID0gJnNvcnRpbmc7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0dST1VQKE5fKCJHZW5lcmljIG9wdGlvbnMiKSksCisJCU9QVF9fVkVSQk9TRSgmZmlsdGVyLnZlcmJvc2UsCisJCQlOXygic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giKSksCisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIpKSwKKwkJT1BUX1NFVF9JTlQoJ3QnLCAidHJhY2siLCAgJnRyYWNrLCBOXygic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiKSwKKwkJCUJSQU5DSF9UUkFDS19FWFBMSUNJVCksCisJCU9QVF9TRVRfSU5UKCAwLCAic2V0LXVwc3RyZWFtIiwgICZ0cmFjaywgTl8oImNoYW5nZSB1cHN0cmVhbSBpbmZvIiksCisJCQlCUkFOQ0hfVFJBQ0tfT1ZFUlJJREUpLAorCQlPUFRfU1RSSU5HKCd1JywgInNldC11cHN0cmVhbS10byIsICZuZXdfdXBzdHJlYW0sICJ1cHN0cmVhbSIsICJjaGFuZ2UgdGhlIHVwc3RyZWFtIGluZm8iKSwKKwkJT1BUX0JPT0woMCwgInVuc2V0LXVwc3RyZWFtIiwgJnVuc2V0X3Vwc3RyZWFtLCAiVW5zZXQgdGhlIHVwc3RyZWFtIGluZm8iKSwKKwkJT1BUX19DT0xPUigmYnJhbmNoX3VzZV9jb2xvciwgTl8oInVzZSBjb2xvcmVkIG91dHB1dCIpKSwKKwkJT1BUX1NFVF9JTlQoJ3InLCAicmVtb3RlcyIsICAgICAmZmlsdGVyLmtpbmQsIE5fKCJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIiksCisJCQlGSUxURVJfUkVGU19SRU1PVEVTKSwKKwkJT1BUX0NPTlRBSU5TKCZmaWx0ZXIud2l0aF9jb21taXQsIE5fKCJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IikpLAorCQlPUFRfV0lUSCgmZmlsdGVyLndpdGhfY29tbWl0LCBOXygicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIpKSwKKwkJT1BUX19BQkJSRVYoJmZpbHRlci5hYmJyZXYpLAorCisJCU9QVF9HUk9VUChOXygiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIpKSwKKwkJT1BUX1NFVF9JTlQoJ2EnLCAiYWxsIiwgJmZpbHRlci5raW5kLCBOXygibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiKSwKKwkJCUZJTFRFUl9SRUZTX1JFTU9URVMgfCBGSUxURVJfUkVGU19CUkFOQ0hFUyksCisJCU9QVF9CSVQoJ2QnLCAiZGVsZXRlIiwgJmRlbGV0ZSwgTl8oImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIiksIDEpLAorCQlPUFRfQklUKCdEJywgTlVMTCwgJmRlbGV0ZSwgTl8oImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiKSwgMiksCisJCU9QVF9CSVQoJ20nLCAibW92ZSIsICZyZW5hbWUsIE5fKCJtb3ZlL3JlbmFtZSBhIGJyYW5jaCBhbmQgaXRzIHJlZmxvZyIpLCAxKSwKKwkJT1BUX0JJVCgnTScsIE5VTEwsICZyZW5hbWUsIE5fKCJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIiksIDIpLAorCQlPUFRfQk9PTCgwLCAibGlzdCIsICZsaXN0LCBOXygibGlzdCBicmFuY2ggbmFtZXMiKSksCisJCU9QVF9CT09MKCdsJywgImNyZWF0ZS1yZWZsb2ciLCAmcmVmbG9nLCBOXygiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciKSksCisJCU9QVF9CT09MKDAsICJlZGl0LWRlc2NyaXB0aW9uIiwgJmVkaXRfZGVzY3JpcHRpb24sCisJCQkgTl8oImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIikpLAorCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iKSksCisJCU9QVF9NRVJHRUQoJmZpbHRlciwgTl8oInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBhcmUgbWVyZ2VkIikpLAorCQlPUFRfTk9fTUVSR0VEKCZmaWx0ZXIsIE5fKCJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgYXJlIG5vdCBtZXJnZWQiKSksCisJCU9QVF9DT0xVTU4oMCwgImNvbHVtbiIsICZjb2xvcHRzLCBOXygibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIikpLAorCQlPUFRfQ0FMTEJBQ0soMCAsICJzb3J0Iiwgc29ydGluZ190YWlsLCBOXygia2V5IiksCisJCQkgICAgIE5fKCJmaWVsZCBuYW1lIHRvIHNvcnQgb24iKSwgJnBhcnNlX29wdF9yZWZfc29ydGluZyksCisJCXsKKwkJCU9QVElPTl9DQUxMQkFDSywgMCwgInBvaW50cy1hdCIsICZmaWx0ZXIucG9pbnRzX2F0LCBOXygib2JqZWN0IiksCisJCQlOXygicHJpbnQgb25seSBicmFuY2hlcyBvZiB0aGUgb2JqZWN0IiksIDAsIHBhcnNlX29wdF9vYmplY3RfbmFtZQorCQl9LAorCQlPUFRfRU5EKCksCisJfTsKKworCW1lbXNldCgmZmlsdGVyLCAwLCBzaXplb2YoZmlsdGVyKSk7CisJZmlsdGVyLmtpbmQgPSBGSUxURVJfUkVGU19CUkFOQ0hFUzsKKwlmaWx0ZXIuYWJicmV2ID0gLTE7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2JyYW5jaF91c2FnZSwgb3B0aW9ucyk7CisKKwlnaXRfY29uZmlnKGdpdF9icmFuY2hfY29uZmlnLCBOVUxMKTsKKworCXRyYWNrID0gZ2l0X2JyYW5jaF90cmFjazsKKworCWhlYWQgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsIGhlYWRfc2hhMSwgTlVMTCk7CisJaWYgKCFoZWFkKQorCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iKSk7CisJaWYgKCFzdHJjbXAoaGVhZCwgIkhFQUQiKSkKKwkJZmlsdGVyLmRldGFjaGVkID0gMTsKKwllbHNlIGlmICghc2tpcF9wcmVmaXgoaGVhZCwgInJlZnMvaGVhZHMvIiwgJmhlYWQpKQorCQlkaWUoXygiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiKSk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGJ1aWx0aW5fYnJhbmNoX3VzYWdlLAorCQkJICAgICAwKTsKKworCWlmICghZGVsZXRlICYmICFyZW5hbWUgJiYgIWVkaXRfZGVzY3JpcHRpb24gJiYgIW5ld191cHN0cmVhbSAmJiAhdW5zZXRfdXBzdHJlYW0gJiYgYXJnYyA9PSAwKQorCQlsaXN0ID0gMTsKKworCWlmIChmaWx0ZXIud2l0aF9jb21taXQgfHwgZmlsdGVyLm1lcmdlICE9IFJFRl9GSUxURVJfTUVSR0VEX05PTkUgfHwgZmlsdGVyLnBvaW50c19hdC5ucikKKwkJbGlzdCA9IDE7CisKKwlpZiAoISFkZWxldGUgKyAhIXJlbmFtZSArICEhbmV3X3Vwc3RyZWFtICsKKwkgICAgbGlzdCArIHVuc2V0X3Vwc3RyZWFtID4gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fYnJhbmNoX3VzYWdlLCBvcHRpb25zKTsKKworCWlmIChmaWx0ZXIuYWJicmV2ID09IC0xKQorCQlmaWx0ZXIuYWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CisJZmluYWxpemVfY29sb3B0cygmY29sb3B0cywgLTEpOworCWlmIChmaWx0ZXIudmVyYm9zZSkgeworCQlpZiAoZXhwbGljaXRseV9lbmFibGVfY29sdW1uKGNvbG9wdHMpKQorCQkJZGllKF8oIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIpKTsKKwkJY29sb3B0cyA9IDA7CisJfQorCisJaWYgKGZvcmNlKSB7CisJCWRlbGV0ZSAqPSAyOworCQlyZW5hbWUgKj0gMjsKKwl9CisKKwlpZiAoZGVsZXRlKSB7CisJCWlmICghYXJnYykKKwkJCWRpZShfKCJicmFuY2ggbmFtZSByZXF1aXJlZCIpKTsKKwkJcmV0dXJuIGRlbGV0ZV9icmFuY2hlcyhhcmdjLCBhcmd2LCBkZWxldGUgPiAxLCBmaWx0ZXIua2luZCwgcXVpZXQpOworCX0gZWxzZSBpZiAobGlzdCkgeworCQkvKiAgZ2l0IGJyYW5jaCAtLWxvY2FsIGFsc28gc2hvd3MgSEVBRCB3aGVuIGl0IGlzIGRldGFjaGVkICovCisJCWlmICgoZmlsdGVyLmtpbmQgJiBGSUxURVJfUkVGU19CUkFOQ0hFUykgJiYgZmlsdGVyLmRldGFjaGVkKQorCQkJZmlsdGVyLmtpbmQgfD0gRklMVEVSX1JFRlNfREVUQUNIRURfSEVBRDsKKwkJZmlsdGVyLm5hbWVfcGF0dGVybnMgPSBhcmd2OworCQlwcmludF9yZWZfbGlzdCgmZmlsdGVyLCBzb3J0aW5nKTsKKwkJcHJpbnRfY29sdW1ucygmb3V0cHV0LCBjb2xvcHRzLCBOVUxMKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJm91dHB1dCwgMCk7CisJCXJldHVybiAwOworCX0KKwllbHNlIGlmIChlZGl0X2Rlc2NyaXB0aW9uKSB7CisJCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lOworCQlzdHJ1Y3Qgc3RyYnVmIGJyYW5jaF9yZWYgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoIWFyZ2MpIHsKKwkJCWlmIChmaWx0ZXIuZGV0YWNoZWQpCisJCQkJZGllKF8oIkNhbm5vdCBnaXZlIGRlc2NyaXB0aW9uIHRvIGRldGFjaGVkIEhFQUQiKSk7CisJCQlicmFuY2hfbmFtZSA9IGhlYWQ7CisJCX0gZWxzZSBpZiAoYXJnYyA9PSAxKQorCQkJYnJhbmNoX25hbWUgPSBhcmd2WzBdOworCQllbHNlCisJCQlkaWUoXygiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giKSk7CisKKwkJc3RyYnVmX2FkZGYoJmJyYW5jaF9yZWYsICJyZWZzL2hlYWRzLyVzIiwgYnJhbmNoX25hbWUpOworCQlpZiAoIXJlZl9leGlzdHMoYnJhbmNoX3JlZi5idWYpKSB7CisJCQlzdHJidWZfcmVsZWFzZSgmYnJhbmNoX3JlZik7CisKKwkJCWlmICghYXJnYykKKwkJCQlyZXR1cm4gZXJyb3IoXygiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iKSwKKwkJCQkJICAgICBicmFuY2hfbmFtZSk7CisJCQllbHNlCisJCQkJcmV0dXJuIGVycm9yKF8oIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIpLAorCQkJCQkgICAgIGJyYW5jaF9uYW1lKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmYnJhbmNoX3JlZik7CisKKwkJaWYgKGVkaXRfYnJhbmNoX2Rlc2NyaXB0aW9uKGJyYW5jaF9uYW1lKSkKKwkJCXJldHVybiAxOworCX0gZWxzZSBpZiAocmVuYW1lKSB7CisJCWlmICghYXJnYykKKwkJCWRpZShfKCJicmFuY2ggbmFtZSByZXF1aXJlZCIpKTsKKwkJZWxzZSBpZiAoYXJnYyA9PSAxKQorCQkJcmVuYW1lX2JyYW5jaChoZWFkLCBhcmd2WzBdLCByZW5hbWUgPiAxKTsKKwkJZWxzZSBpZiAoYXJnYyA9PSAyKQorCQkJcmVuYW1lX2JyYW5jaChhcmd2WzBdLCBhcmd2WzFdLCByZW5hbWUgPiAxKTsKKwkJZWxzZQorCQkJZGllKF8oInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iKSk7CisJfSBlbHNlIGlmIChuZXdfdXBzdHJlYW0pIHsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChhcmd2WzBdKTsKKworCQlpZiAoYXJnYyA+IDEpCisJCQlkaWUoXygidG9vIG1hbnkgYnJhbmNoZXMgdG8gc2V0IG5ldyB1cHN0cmVhbSIpKTsKKworCQlpZiAoIWJyYW5jaCkgeworCQkJaWYgKCFhcmdjIHx8ICFzdHJjbXAoYXJndlswXSwgIkhFQUQiKSkKKwkJCQlkaWUoXygiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gIgorCQkJCSAgICAgICJpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIpLAorCQkJCSAgICBuZXdfdXBzdHJlYW0pOworCQkJZGllKF8oIm5vIHN1Y2ggYnJhbmNoICclcyciKSwgYXJndlswXSk7CisJCX0KKworCQlpZiAoIXJlZl9leGlzdHMoYnJhbmNoLT5yZWZuYW1lKSkKKwkJCWRpZShfKCJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIpLCBicmFuY2gtPm5hbWUpOworCisJCS8qCisJCSAqIGNyZWF0ZV9icmFuY2ggdGFrZXMgY2FyZSBvZiBzZXR0aW5nIHVwIHRoZSB0cmFja2luZworCQkgKiBpbmZvIGFuZCBtYWtpbmcgc3VyZSBuZXdfdXBzdHJlYW0gaXMgY29ycmVjdAorCQkgKi8KKwkJY3JlYXRlX2JyYW5jaChoZWFkLCBicmFuY2gtPm5hbWUsIG5ld191cHN0cmVhbSwgMCwgMCwgMCwgcXVpZXQsIEJSQU5DSF9UUkFDS19PVkVSUklERSk7CisJfSBlbHNlIGlmICh1bnNldF91cHN0cmVhbSkgeworCQlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KGFyZ3ZbMF0pOworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWlmIChhcmdjID4gMSkKKwkJCWRpZShfKCJ0b28gbWFueSBicmFuY2hlcyB0byB1bnNldCB1cHN0cmVhbSIpKTsKKworCQlpZiAoIWJyYW5jaCkgeworCQkJaWYgKCFhcmdjIHx8ICFzdHJjbXAoYXJndlswXSwgIkhFQUQiKSkKKwkJCQlkaWUoXygiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiAiCisJCQkJICAgICAgIml0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIikpOworCQkJZGllKF8oIm5vIHN1Y2ggYnJhbmNoICclcyciKSwgYXJndlswXSk7CisJCX0KKworCQlpZiAoIWJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKGJyYW5jaCkpCisJCQlkaWUoXygiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIiksIGJyYW5jaC0+bmFtZSk7CisKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgImJyYW5jaC4lcy5yZW1vdGUiLCBicmFuY2gtPm5hbWUpOworCQlnaXRfY29uZmlnX3NldF9tdWx0aXZhcihidWYuYnVmLCBOVUxMLCBOVUxMLCAxKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAiYnJhbmNoLiVzLm1lcmdlIiwgYnJhbmNoLT5uYW1lKTsKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYnVmLmJ1ZiwgTlVMTCwgTlVMTCwgMSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0gZWxzZSBpZiAoYXJnYyA+IDAgJiYgYXJnYyA8PSAyKSB7CisJCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQoYXJndlswXSk7CisJCWludCBicmFuY2hfZXhpc3RlZCA9IDAsIHJlbW90ZV90cmFja2luZyA9IDA7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKCFzdHJjbXAoYXJndlswXSwgIkhFQUQiKSkKKwkJCWRpZShfKCJpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGNyZWF0ZSAnSEVBRCcgbWFudWFsbHkiKSk7CisKKwkJaWYgKCFicmFuY2gpCisJCQlkaWUoXygibm8gc3VjaCBicmFuY2ggJyVzJyIpLCBhcmd2WzBdKTsKKworCQlpZiAoZmlsdGVyLmtpbmQgIT0gRklMVEVSX1JFRlNfQlJBTkNIRVMpCisJCQlkaWUoXygiLWEgYW5kIC1yIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCBtYWtlIHNlbnNlIHdpdGggYSBicmFuY2ggbmFtZSIpKTsKKworCQlpZiAodHJhY2sgPT0gQlJBTkNIX1RSQUNLX09WRVJSSURFKQorCQkJZnByaW50ZihzdGRlcnIsIF8oIlRoZSAtLXNldC11cHN0cmVhbSBmbGFnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gQ29uc2lkZXIgdXNpbmcgLS10cmFjayBvciAtLXNldC11cHN0cmVhbS10b1xuIikpOworCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL3JlbW90ZXMvJXMiLCBicmFuY2gtPm5hbWUpOworCQlyZW1vdGVfdHJhY2tpbmcgPSByZWZfZXhpc3RzKGJ1Zi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCQlicmFuY2hfZXhpc3RlZCA9IHJlZl9leGlzdHMoYnJhbmNoLT5yZWZuYW1lKTsKKwkJY3JlYXRlX2JyYW5jaChoZWFkLCBhcmd2WzBdLCAoYXJnYyA9PSAyKSA/IGFyZ3ZbMV0gOiBoZWFkLAorCQkJICAgICAgZm9yY2UsIHJlZmxvZywgMCwgcXVpZXQsIHRyYWNrKTsKKworCQkvKgorCQkgKiBXZSBvbmx5IHNob3cgdGhlIGluc3RydWN0aW9ucyBpZiB0aGUgdXNlciBnYXZlIHVzCisJCSAqIG9uZSBicmFuY2ggd2hpY2ggZG9lc24ndCBleGlzdCBsb2NhbGx5LCBidXQgaXMgdGhlCisJCSAqIG5hbWUgb2YgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLgorCQkgKi8KKwkJaWYgKGFyZ2MgPT0gMSAmJiB0cmFjayA9PSBCUkFOQ0hfVFJBQ0tfT1ZFUlJJREUgJiYKKwkJICAgICFicmFuY2hfZXhpc3RlZCAmJiByZW1vdGVfdHJhY2tpbmcpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJcbklmIHlvdSB3YW50ZWQgdG8gbWFrZSAnJXMnIHRyYWNrICclcycsIGRvIHRoaXM6XG5cbiIpLCBoZWFkLCBicmFuY2gtPm5hbWUpOworCQkJZnByaW50ZihzdGRlcnIsIF8oIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iKSwgYnJhbmNoLT5uYW1lKTsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIiksIGJyYW5jaC0+bmFtZSk7CisJCX0KKworCX0gZWxzZQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9icmFuY2hfdXNhZ2UsIG9wdGlvbnMpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2J1bmRsZS5jIGIvYnVpbHRpbi9idW5kbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODgzYTQzCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9idW5kbGUuYwpAQCAtMCwwICsxLDczIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVuZGxlLmgiCisKKy8qCisgKiBCYXNpYyBoYW5kbGVyIGZvciBidW5kbGUgZmlsZXMgdG8gY29ubmVjdCByZXBvc2l0b3JpZXMgdmlhIHNuZWFrZXJuZXQuCisgKiBJbnZvY2F0aW9uIG11c3QgaW5jbHVkZSBhY3Rpb24uCisgKiBUaGlzIGZ1bmN0aW9uIGNhbiBjcmVhdGUgYSBidW5kbGUgb3IgcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBhbiBleGlzdGluZworICogYnVuZGxlIHN1cHBvcnRpbmcgImZldGNoIiwgInB1bGwiLCBhbmQgImxzLXJlbW90ZSIuCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9idW5kbGVfdXNhZ2VbXSA9CisgICJnaXQgYnVuZGxlIGNyZWF0ZSA8ZmlsZT4gPGdpdC1yZXYtbGlzdCBhcmdzPlxuIgorICAiICAgb3I6IGdpdCBidW5kbGUgdmVyaWZ5IDxmaWxlPlxuIgorICAiICAgb3I6IGdpdCBidW5kbGUgbGlzdC1oZWFkcyA8ZmlsZT4gWzxyZWZuYW1lPi4uLl1cbiIKKyAgIiAgIG9yOiBnaXQgYnVuZGxlIHVuYnVuZGxlIDxmaWxlPiBbPHJlZm5hbWU+Li4uXSI7CisKK2ludCBjbWRfYnVuZGxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBidW5kbGVfaGVhZGVyIGhlYWRlcjsKKwljb25zdCBjaGFyICpjbWQsICpidW5kbGVfZmlsZTsKKwlpbnQgYnVuZGxlX2ZkID0gLTE7CisJY2hhciBidWZmZXJbUEFUSF9NQVhdOworCisJaWYgKGFyZ2MgPCAzKQorCQl1c2FnZShidWlsdGluX2J1bmRsZV91c2FnZSk7CisKKwljbWQgPSBhcmd2WzFdOworCWJ1bmRsZV9maWxlID0gYXJndlsyXTsKKwlhcmdjIC09IDI7CisJYXJndiArPSAyOworCisJaWYgKHByZWZpeCAmJiBidW5kbGVfZmlsZVswXSAhPSAnLycpIHsKKwkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzLyVzIiwgcHJlZml4LCBidW5kbGVfZmlsZSk7CisJCWJ1bmRsZV9maWxlID0gYnVmZmVyOworCX0KKworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisJaWYgKHN0cmNtcChjbWQsICJjcmVhdGUiKSAmJiAoYnVuZGxlX2ZkID0KKwkJCQlyZWFkX2J1bmRsZV9oZWFkZXIoYnVuZGxlX2ZpbGUsICZoZWFkZXIpKSA8IDApCisJCXJldHVybiAxOworCisJaWYgKCFzdHJjbXAoY21kLCAidmVyaWZ5IikpIHsKKwkJY2xvc2UoYnVuZGxlX2ZkKTsKKwkJaWYgKGFyZ2MgIT0gMSkgeworCQkJdXNhZ2UoYnVpbHRpbl9idW5kbGVfdXNhZ2UpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKHZlcmlmeV9idW5kbGUoJmhlYWRlciwgMSkpCisJCQlyZXR1cm4gMTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVzIGlzIG9rYXlcbiIpLCBidW5kbGVfZmlsZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChjbWQsICJsaXN0LWhlYWRzIikpIHsKKwkJY2xvc2UoYnVuZGxlX2ZkKTsKKwkJcmV0dXJuICEhbGlzdF9idW5kbGVfcmVmcygmaGVhZGVyLCBhcmdjLCBhcmd2KTsKKwl9CisJaWYgKCFzdHJjbXAoY21kLCAiY3JlYXRlIikpIHsKKwkJaWYgKGFyZ2MgPCAyKSB7CisJCQl1c2FnZShidWlsdGluX2J1bmRsZV91c2FnZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoIXN0YXJ0dXBfaW5mby0+aGF2ZV9yZXBvc2l0b3J5KQorCQkJZGllKF8oIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iKSk7CisJCXJldHVybiAhIWNyZWF0ZV9idW5kbGUoJmhlYWRlciwgYnVuZGxlX2ZpbGUsIGFyZ2MsIGFyZ3YpOworCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJ1bmJ1bmRsZSIpKSB7CisJCWlmICghc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpCisJCQlkaWUoXygiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIikpOworCQlyZXR1cm4gISF1bmJ1bmRsZSgmaGVhZGVyLCBidW5kbGVfZmQsIDApIHx8CisJCQlsaXN0X2J1bmRsZV9yZWZzKCZoZWFkZXIsIGFyZ2MsIGFyZ3YpOworCX0gZWxzZQorCQl1c2FnZShidWlsdGluX2J1bmRsZV91c2FnZSk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NhdC1maWxlLmMgYi9idWlsdGluL2NhdC1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmZDhkYgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY2F0LWZpbGUuYwpAQCAtMCwwICsxLDUyMSBAQAorLyoKKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKworc3RydWN0IGJhdGNoX29wdGlvbnMgeworCWludCBlbmFibGVkOworCWludCBmb2xsb3dfc3ltbGlua3M7CisJaW50IHByaW50X2NvbnRlbnRzOworCWludCBidWZmZXJfb3V0cHV0OworCWludCBhbGxfb2JqZWN0czsKKwljb25zdCBjaGFyICpmb3JtYXQ7Cit9OworCitzdGF0aWMgaW50IGNhdF9vbmVfZmlsZShpbnQgb3B0LCBjb25zdCBjaGFyICpleHBfdHlwZSwgY29uc3QgY2hhciAqb2JqX25hbWUsCisJCQlpbnQgdW5rbm93bl90eXBlKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IG9ial9jb250ZXh0OworCXN0cnVjdCBvYmplY3RfaW5mbyBvaSA9IHtOVUxMfTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgZmxhZ3MgPSBMT09LVVBfUkVQTEFDRV9PQkpFQ1Q7CisKKwlpZiAodW5rbm93bl90eXBlKQorCQlmbGFncyB8PSBMT09LVVBfVU5LTk9XTl9PQkpFQ1Q7CisKKwlpZiAoZ2V0X3NoYTFfd2l0aF9jb250ZXh0KG9ial9uYW1lLCAwLCBzaGExLCAmb2JqX2NvbnRleHQpKQorCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgb2JqX25hbWUpOworCisJYnVmID0gTlVMTDsKKwlzd2l0Y2ggKG9wdCkgeworCWNhc2UgJ3QnOgorCQlvaS50eXBlbmFtZSA9ICZzYjsKKwkJaWYgKHNoYTFfb2JqZWN0X2luZm9fZXh0ZW5kZWQoc2hhMSwgJm9pLCBmbGFncykgPCAwKQorCQkJZGllKCJnaXQgY2F0LWZpbGU6IGNvdWxkIG5vdCBnZXQgb2JqZWN0IGluZm8iKTsKKwkJaWYgKHNiLmxlbikgeworCQkJcHJpbnRmKCIlc1xuIiwgc2IuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgJ3MnOgorCQlvaS5zaXplcCA9ICZzaXplOworCQlpZiAoc2hhMV9vYmplY3RfaW5mb19leHRlbmRlZChzaGExLCAmb2ksIGZsYWdzKSA8IDApCisJCQlkaWUoImdpdCBjYXQtZmlsZTogY291bGQgbm90IGdldCBvYmplY3QgaW5mbyIpOworCQlwcmludGYoIiVsdVxuIiwgc2l6ZSk7CisJCXJldHVybiAwOworCisJY2FzZSAnZSc6CisJCXJldHVybiAhaGFzX3NoYTFfZmlsZShzaGExKTsKKworCWNhc2UgJ2MnOgorCQlpZiAoIW9ial9jb250ZXh0LnBhdGhbMF0pCisJCQlkaWUoImdpdCBjYXQtZmlsZSAtLXRleHRjb252ICVzOiA8b2JqZWN0PiBtdXN0IGJlIDxzaGExOnBhdGg+IiwKKwkJCSAgICBvYmpfbmFtZSk7CisKKwkJaWYgKHRleHRjb252X29iamVjdChvYmpfY29udGV4dC5wYXRoLCBvYmpfY29udGV4dC5tb2RlLCBzaGExLCAxLCAmYnVmLCAmc2l6ZSkpCisJCQlicmVhazsKKworCWNhc2UgJ3AnOgorCQl0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwkJaWYgKHR5cGUgPCAwKQorCQkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIG9ial9uYW1lKTsKKworCQkvKiBjdXN0b20gcHJldHR5LXByaW50IGhlcmUgKi8KKwkJaWYgKHR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJCWNvbnN0IGNoYXIgKmxzX2FyZ3NbM10gPSB7IE5VTEwgfTsKKwkJCWxzX2FyZ3NbMF0gPSAgImxzLXRyZWUiOworCQkJbHNfYXJnc1sxXSA9ICBvYmpfbmFtZTsKKwkJCXJldHVybiBjbWRfbHNfdHJlZSgyLCBsc19hcmdzLCBOVUxMKTsKKwkJfQorCisJCWlmICh0eXBlID09IE9CSl9CTE9CKQorCQkJcmV0dXJuIHN0cmVhbV9ibG9iX3RvX2ZkKDEsIHNoYTEsIE5VTEwsIDApOworCQlidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWJ1ZikKKwkJCWRpZSgiQ2Fubm90IHJlYWQgb2JqZWN0ICVzIiwgb2JqX25hbWUpOworCisJCS8qIG90aGVyd2lzZSBqdXN0IHNwaXQgb3V0IHRoZSBkYXRhICovCisJCWJyZWFrOworCisJY2FzZSAwOgorCQlpZiAodHlwZV9mcm9tX3N0cmluZyhleHBfdHlwZSkgPT0gT0JKX0JMT0IpIHsKKwkJCXVuc2lnbmVkIGNoYXIgYmxvYl9zaGExWzIwXTsKKwkJCWlmIChzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpID09IE9CSl9UQUcpIHsKKwkJCQljaGFyICpidWZmZXIgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCQkJCWNvbnN0IGNoYXIgKnRhcmdldDsKKwkJCQlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgIm9iamVjdCAiLCAmdGFyZ2V0KSB8fAorCQkJCSAgICBnZXRfc2hhMV9oZXgodGFyZ2V0LCBibG9iX3NoYTEpKQorCQkJCQlkaWUoIiVzIG5vdCBhIHZhbGlkIHRhZyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCQlmcmVlKGJ1ZmZlcik7CisJCQl9IGVsc2UKKwkJCQloYXNoY3B5KGJsb2Jfc2hhMSwgc2hhMSk7CisKKwkJCWlmIChzaGExX29iamVjdF9pbmZvKGJsb2Jfc2hhMSwgTlVMTCkgPT0gT0JKX0JMT0IpCisJCQkJcmV0dXJuIHN0cmVhbV9ibG9iX3RvX2ZkKDEsIGJsb2Jfc2hhMSwgTlVMTCwgMCk7CisJCQkvKgorCQkJICogd2UgYXR0ZW1wdGVkIHRvIGRlcmVmZXJlbmNlIGEgdGFnIHRvIGEgYmxvYgorCQkJICogYW5kIGZhaWxlZDsgdGhlcmUgbWF5IGJlIG5ldyBkZXJlZmVyZW5jZQorCQkJICogbWVjaGFuaXNtcyB0aGlzIGNvZGUgaXMgbm90IGF3YXJlIG9mLgorCQkJICogZmFsbC1iYWNrIHRvIHRoZSB1c3VhbCBjYXNlLgorCQkJICovCisJCX0KKwkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgZXhwX3R5cGUsICZzaXplLCBOVUxMKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkaWUoImdpdCBjYXQtZmlsZTogdW5rbm93biBvcHRpb246ICVzIiwgZXhwX3R5cGUpOworCX0KKworCWlmICghYnVmKQorCQlkaWUoImdpdCBjYXQtZmlsZSAlczogYmFkIGZpbGUiLCBvYmpfbmFtZSk7CisKKwl3cml0ZV9vcl9kaWUoMSwgYnVmLCBzaXplKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGV4cGFuZF9kYXRhIHsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBkaXNrX3NpemU7CisJY29uc3QgY2hhciAqcmVzdDsKKwl1bnNpZ25lZCBjaGFyIGRlbHRhX2Jhc2Vfc2hhMVsyMF07CisKKwkvKgorCSAqIElmIG1hcmtfcXVlcnkgaXMgdHJ1ZSwgd2UgZG8gbm90IGV4cGFuZCBhbnl0aGluZywgYnV0IHJhdGhlcgorCSAqIGp1c3QgbWFyayB0aGUgb2JqZWN0X2luZm8gd2l0aCBpdGVtcyB3ZSB3aXNoIHRvIHF1ZXJ5LgorCSAqLworCWludCBtYXJrX3F1ZXJ5OworCisJLyoKKwkgKiBXaGV0aGVyIHRvIHNwbGl0IHRoZSBpbnB1dCBvbiB3aGl0ZXNwYWNlIGJlZm9yZSBmZWVkaW5nIGl0IHRvCisJICogZ2V0X3NoYTE7IHRoaXMgaXMgZGVjaWRlZCBkdXJpbmcgdGhlIG1hcmtfcXVlcnkgcGhhc2UgYmFzZWQgb24KKwkgKiB3aGV0aGVyIHdlIGhhdmUgYSAlKHJlc3QpIHRva2VuIGluIG91ciBmb3JtYXQuCisJICovCisJaW50IHNwbGl0X29uX3doaXRlc3BhY2U7CisKKwkvKgorCSAqIEFmdGVyIGEgbWFya19xdWVyeSBydW4sIHRoaXMgb2JqZWN0X2luZm8gaXMgc2V0IHVwIHRvIGJlCisJICogcGFzc2VkIHRvIHNoYTFfb2JqZWN0X2luZm9fZXh0ZW5kZWQuIEl0IHdpbGwgcG9pbnQgdG8gdGhlIGRhdGEKKwkgKiBlbGVtZW50cyBhYm92ZSwgc28geW91IGNhbiByZXRyaWV2ZSB0aGUgcmVzcG9uc2UgZnJvbSB0aGVyZS4KKwkgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2luZm8gaW5mbzsKK307CisKK3N0YXRpYyBpbnQgaXNfYXRvbShjb25zdCBjaGFyICphdG9tLCBjb25zdCBjaGFyICpzLCBpbnQgc2xlbikKK3sKKwlpbnQgYWxlbiA9IHN0cmxlbihhdG9tKTsKKwlyZXR1cm4gYWxlbiA9PSBzbGVuICYmICFtZW1jbXAoYXRvbSwgcywgYWxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGV4cGFuZF9hdG9tKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICphdG9tLCBpbnQgbGVuLAorCQkJdm9pZCAqdmRhdGEpCit7CisJc3RydWN0IGV4cGFuZF9kYXRhICpkYXRhID0gdmRhdGE7CisKKwlpZiAoaXNfYXRvbSgib2JqZWN0bmFtZSIsIGF0b20sIGxlbikpIHsKKwkJaWYgKCFkYXRhLT5tYXJrX3F1ZXJ5KQorCQkJc3RyYnVmX2FkZHN0cihzYiwgc2hhMV90b19oZXgoZGF0YS0+c2hhMSkpOworCX0gZWxzZSBpZiAoaXNfYXRvbSgib2JqZWN0dHlwZSIsIGF0b20sIGxlbikpIHsKKwkJaWYgKGRhdGEtPm1hcmtfcXVlcnkpCisJCQlkYXRhLT5pbmZvLnR5cGVwID0gJmRhdGEtPnR5cGU7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIHR5cGVuYW1lKGRhdGEtPnR5cGUpKTsKKwl9IGVsc2UgaWYgKGlzX2F0b20oIm9iamVjdHNpemUiLCBhdG9tLCBsZW4pKSB7CisJCWlmIChkYXRhLT5tYXJrX3F1ZXJ5KQorCQkJZGF0YS0+aW5mby5zaXplcCA9ICZkYXRhLT5zaXplOworCQllbHNlCisJCQlzdHJidWZfYWRkZihzYiwgIiVsdSIsIGRhdGEtPnNpemUpOworCX0gZWxzZSBpZiAoaXNfYXRvbSgib2JqZWN0c2l6ZTpkaXNrIiwgYXRvbSwgbGVuKSkgeworCQlpZiAoZGF0YS0+bWFya19xdWVyeSkKKwkJCWRhdGEtPmluZm8uZGlza19zaXplcCA9ICZkYXRhLT5kaXNrX3NpemU7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiJWx1IiwgZGF0YS0+ZGlza19zaXplKTsKKwl9IGVsc2UgaWYgKGlzX2F0b20oInJlc3QiLCBhdG9tLCBsZW4pKSB7CisJCWlmIChkYXRhLT5tYXJrX3F1ZXJ5KQorCQkJZGF0YS0+c3BsaXRfb25fd2hpdGVzcGFjZSA9IDE7CisJCWVsc2UgaWYgKGRhdGEtPnJlc3QpCisJCQlzdHJidWZfYWRkc3RyKHNiLCBkYXRhLT5yZXN0KTsKKwl9IGVsc2UgaWYgKGlzX2F0b20oImRlbHRhYmFzZSIsIGF0b20sIGxlbikpIHsKKwkJaWYgKGRhdGEtPm1hcmtfcXVlcnkpCisJCQlkYXRhLT5pbmZvLmRlbHRhX2Jhc2Vfc2hhMSA9IGRhdGEtPmRlbHRhX2Jhc2Vfc2hhMTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZHN0cihzYiwgc2hhMV90b19oZXgoZGF0YS0+ZGVsdGFfYmFzZV9zaGExKSk7CisJfSBlbHNlCisJCWRpZSgidW5rbm93biBmb3JtYXQgZWxlbWVudDogJS4qcyIsIGxlbiwgYXRvbSk7Cit9CisKK3N0YXRpYyBzaXplX3QgZXhwYW5kX2Zvcm1hdChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqc3RhcnQsIHZvaWQgKmRhdGEpCit7CisJY29uc3QgY2hhciAqZW5kOworCisJaWYgKCpzdGFydCAhPSAnKCcpCisJCXJldHVybiAwOworCWVuZCA9IHN0cmNocihzdGFydCArIDEsICcpJyk7CisJaWYgKCFlbmQpCisJCWRpZSgiZm9ybWF0IGVsZW1lbnQgJyVzJyBkb2VzIG5vdCBlbmQgaW4gJyknIiwgc3RhcnQpOworCisJZXhwYW5kX2F0b20oc2IsIHN0YXJ0ICsgMSwgZW5kIC0gc3RhcnQgLSAxLCBkYXRhKTsKKworCXJldHVybiBlbmQgLSBzdGFydCArIDE7Cit9CisKK3N0YXRpYyB2b2lkIGJhdGNoX3dyaXRlKHN0cnVjdCBiYXRjaF9vcHRpb25zICpvcHQsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJaWYgKG9wdC0+YnVmZmVyX291dHB1dCkgeworCQlpZiAoZndyaXRlKGRhdGEsIDEsIGxlbiwgc3Rkb3V0KSAhPSBsZW4pCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byB3cml0ZSB0byBzdGRvdXQiKTsKKwl9IGVsc2UKKwkJd3JpdGVfb3JfZGllKDEsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X29iamVjdF9vcl9kaWUoc3RydWN0IGJhdGNoX29wdGlvbnMgKm9wdCwgc3RydWN0IGV4cGFuZF9kYXRhICpkYXRhKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEgPSBkYXRhLT5zaGExOworCisJYXNzZXJ0KGRhdGEtPmluZm8udHlwZXApOworCisJaWYgKGRhdGEtPnR5cGUgPT0gT0JKX0JMT0IpIHsKKwkJaWYgKG9wdC0+YnVmZmVyX291dHB1dCkKKwkJCWZmbHVzaChzdGRvdXQpOworCQlpZiAoc3RyZWFtX2Jsb2JfdG9fZmQoMSwgc2hhMSwgTlVMTCwgMCkgPCAwKQorCQkJZGllKCJ1bmFibGUgdG8gc3RyZWFtICVzIHRvIHN0ZG91dCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisJZWxzZSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQl2b2lkICpjb250ZW50czsKKworCQljb250ZW50cyA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghY29udGVudHMpCisJCQlkaWUoIm9iamVjdCAlcyBkaXNhcHBlYXJlZCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJaWYgKHR5cGUgIT0gZGF0YS0+dHlwZSkKKwkJCWRpZSgib2JqZWN0ICVzIGNoYW5nZWQgdHlwZSE/Iiwgc2hhMV90b19oZXgoc2hhMSkpOworCQlpZiAoZGF0YS0+aW5mby5zaXplcCAmJiBzaXplICE9IGRhdGEtPnNpemUpCisJCQlkaWUoIm9iamVjdCAlcyBjaGFuZ2VkIHNpemUhPyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCQliYXRjaF93cml0ZShvcHQsIGNvbnRlbnRzLCBzaXplKTsKKwkJZnJlZShjb250ZW50cyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiYXRjaF9vYmplY3Rfd3JpdGUoY29uc3QgY2hhciAqb2JqX25hbWUsIHN0cnVjdCBiYXRjaF9vcHRpb25zICpvcHQsCisJCQkgICAgICAgc3RydWN0IGV4cGFuZF9kYXRhICpkYXRhKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoc2hhMV9vYmplY3RfaW5mb19leHRlbmRlZChkYXRhLT5zaGExLCAmZGF0YS0+aW5mbywgTE9PS1VQX1JFUExBQ0VfT0JKRUNUKSA8IDApIHsKKwkJcHJpbnRmKCIlcyBtaXNzaW5nXG4iLCBvYmpfbmFtZSA/IG9ial9uYW1lIDogc2hhMV90b19oZXgoZGF0YS0+c2hhMSkpOworCQlmZmx1c2goc3Rkb3V0KTsKKwkJcmV0dXJuOworCX0KKworCXN0cmJ1Zl9leHBhbmQoJmJ1Ziwgb3B0LT5mb3JtYXQsIGV4cGFuZF9mb3JtYXQsIGRhdGEpOworCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwliYXRjaF93cml0ZShvcHQsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJaWYgKG9wdC0+cHJpbnRfY29udGVudHMpIHsKKwkJcHJpbnRfb2JqZWN0X29yX2RpZShvcHQsIGRhdGEpOworCQliYXRjaF93cml0ZShvcHQsICJcbiIsIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgYmF0Y2hfb25lX29iamVjdChjb25zdCBjaGFyICpvYmpfbmFtZSwgc3RydWN0IGJhdGNoX29wdGlvbnMgKm9wdCwKKwkJCSAgICAgc3RydWN0IGV4cGFuZF9kYXRhICpkYXRhKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCBjdHg7CisJaW50IGZsYWdzID0gb3B0LT5mb2xsb3dfc3ltbGlua3MgPyBHRVRfU0hBMV9GT0xMT1dfU1lNTElOS1MgOiAwOworCWVudW0gZm9sbG93X3N5bWxpbmtzX3Jlc3VsdCByZXN1bHQ7CisKKwlyZXN1bHQgPSBnZXRfc2hhMV93aXRoX2NvbnRleHQob2JqX25hbWUsIGZsYWdzLCBkYXRhLT5zaGExLCAmY3R4KTsKKwlpZiAocmVzdWx0ICE9IEZPVU5EKSB7CisJCXN3aXRjaCAocmVzdWx0KSB7CisJCWNhc2UgTUlTU0lOR19PQkpFQ1Q6CisJCQlwcmludGYoIiVzIG1pc3NpbmdcbiIsIG9ial9uYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIERBTkdMSU5HX1NZTUxJTks6CisJCQlwcmludGYoImRhbmdsaW5nICUiUFJJdU1BWCJcbiVzXG4iLAorCQkJICAgICAgICh1aW50bWF4X3Qpc3RybGVuKG9ial9uYW1lKSwgb2JqX25hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgU1lNTElOS19MT09QOgorCQkJcHJpbnRmKCJsb29wICUiUFJJdU1BWCJcbiVzXG4iLAorCQkJICAgICAgICh1aW50bWF4X3Qpc3RybGVuKG9ial9uYW1lKSwgb2JqX25hbWUpOworCQkJYnJlYWs7CisJCWNhc2UgTk9UX0RJUjoKKwkJCXByaW50Zigibm90ZGlyICUiUFJJdU1BWCJcbiVzXG4iLAorCQkJICAgICAgICh1aW50bWF4X3Qpc3RybGVuKG9ial9uYW1lKSwgb2JqX25hbWUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkaWUoIkJVRzogdW5rbm93biBnZXRfc2hhMV93aXRoX2NvbnRleHQgcmVzdWx0ICVkXG4iLAorCQkJICAgICAgIHJlc3VsdCk7CisJCQlicmVhazsKKwkJfQorCQlmZmx1c2goc3Rkb3V0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjdHgubW9kZSA9PSAwKSB7CisJCXByaW50Zigic3ltbGluayAlIlBSSXVNQVgiXG4lc1xuIiwKKwkJICAgICAgICh1aW50bWF4X3QpY3R4LnN5bWxpbmtfcGF0aC5sZW4sCisJCSAgICAgICBjdHguc3ltbGlua19wYXRoLmJ1Zik7CisJCWZmbHVzaChzdGRvdXQpOworCQlyZXR1cm47CisJfQorCisJYmF0Y2hfb2JqZWN0X3dyaXRlKG9ial9uYW1lLCBvcHQsIGRhdGEpOworfQorCitzdHJ1Y3Qgb2JqZWN0X2NiX2RhdGEgeworCXN0cnVjdCBiYXRjaF9vcHRpb25zICpvcHQ7CisJc3RydWN0IGV4cGFuZF9kYXRhICpleHBhbmQ7Cit9OworCitzdGF0aWMgdm9pZCBiYXRjaF9vYmplY3RfY2IoY29uc3QgdW5zaWduZWQgY2hhciBzaGExWzIwXSwgdm9pZCAqdmRhdGEpCit7CisJc3RydWN0IG9iamVjdF9jYl9kYXRhICpkYXRhID0gdmRhdGE7CisJaGFzaGNweShkYXRhLT5leHBhbmQtPnNoYTEsIHNoYTEpOworCWJhdGNoX29iamVjdF93cml0ZShOVUxMLCBkYXRhLT5vcHQsIGRhdGEtPmV4cGFuZCk7Cit9CisKK3N0YXRpYyBpbnQgYmF0Y2hfbG9vc2Vfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgICBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzaGExX2FycmF5X2FwcGVuZChkYXRhLCBzaGExKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiYXRjaF9wYWNrZWRfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgICAgc3RydWN0IHBhY2tlZF9naXQgKnBhY2ssCisJCQkgICAgICAgdWludDMyX3QgcG9zLAorCQkJICAgICAgIHZvaWQgKmRhdGEpCit7CisJc2hhMV9hcnJheV9hcHBlbmQoZGF0YSwgc2hhMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmF0Y2hfb2JqZWN0cyhzdHJ1Y3QgYmF0Y2hfb3B0aW9ucyAqb3B0KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGV4cGFuZF9kYXRhIGRhdGE7CisJaW50IHNhdmVfd2FybmluZzsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmICghb3B0LT5mb3JtYXQpCisJCW9wdC0+Zm9ybWF0ID0gIiUob2JqZWN0bmFtZSkgJShvYmplY3R0eXBlKSAlKG9iamVjdHNpemUpIjsKKworCS8qCisJICogRXhwYW5kIG9uY2Ugd2l0aCBvdXIgc3BlY2lhbCBtYXJrX3F1ZXJ5IGZsYWcsIHdoaWNoIHdpbGwgcHJpbWUgdGhlCisJICogb2JqZWN0X2luZm8gdG8gYmUgaGFuZGVkIHRvIHNoYTFfb2JqZWN0X2luZm9fZXh0ZW5kZWQgZm9yIGVhY2gKKwkgKiBvYmplY3QuCisJICovCisJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCWRhdGEubWFya19xdWVyeSA9IDE7CisJc3RyYnVmX2V4cGFuZCgmYnVmLCBvcHQtPmZvcm1hdCwgZXhwYW5kX2Zvcm1hdCwgJmRhdGEpOworCWRhdGEubWFya19xdWVyeSA9IDA7CisKKwkvKgorCSAqIElmIHdlIGFyZSBwcmludGluZyBvdXQgdGhlIG9iamVjdCwgdGhlbiBhbHdheXMgZmlsbCBpbiB0aGUgdHlwZSwKKwkgKiBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gZGVjaWRlIHdoZXRoZXIgb3Igbm90IHRvIHN0cmVhbS4KKwkgKi8KKwlpZiAob3B0LT5wcmludF9jb250ZW50cykKKwkJZGF0YS5pbmZvLnR5cGVwID0gJmRhdGEudHlwZTsKKworCWlmIChvcHQtPmFsbF9vYmplY3RzKSB7CisJCXN0cnVjdCBzaGExX2FycmF5IHNhID0gU0hBMV9BUlJBWV9JTklUOworCQlzdHJ1Y3Qgb2JqZWN0X2NiX2RhdGEgY2I7CisKKwkJZm9yX2VhY2hfbG9vc2Vfb2JqZWN0KGJhdGNoX2xvb3NlX29iamVjdCwgJnNhLCAwKTsKKwkJZm9yX2VhY2hfcGFja2VkX29iamVjdChiYXRjaF9wYWNrZWRfb2JqZWN0LCAmc2EsIDApOworCisJCWNiLm9wdCA9IG9wdDsKKwkJY2IuZXhwYW5kID0gJmRhdGE7CisJCXNoYTFfYXJyYXlfZm9yX2VhY2hfdW5pcXVlKCZzYSwgYmF0Y2hfb2JqZWN0X2NiLCAmY2IpOworCisJCXNoYTFfYXJyYXlfY2xlYXIoJnNhKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBXZSBhcmUgZ29pbmcgdG8gY2FsbCBnZXRfc2hhMSBvbiBhIHBvdGVudGlhbGx5IHZlcnkgbGFyZ2UgbnVtYmVyIG9mCisJICogb2JqZWN0cy4gSW4gbW9zdCBsYXJnZSBjYXNlcywgdGhlc2Ugd2lsbCBiZSBhY3R1YWwgb2JqZWN0IHNoYTFzLiBUaGUKKwkgKiBjb3N0IHRvIGRvdWJsZS1jaGVjayB0aGF0IGVhY2ggb25lIGlzIG5vdCBhbHNvIGEgcmVmIChqdXN0IHNvIHdlIGNhbgorCSAqIHdhcm4pIGVuZHMgdXAgZHdhcmZpbmcgdGhlIGFjdHVhbCBjb3N0IG9mIHRoZSBvYmplY3QgbG9va3VwcworCSAqIHRoZW1zZWx2ZXMuIFdlIGNhbiB3b3JrIGFyb3VuZCBpdCBieSBqdXN0IHR1cm5pbmcgb2ZmIHRoZSB3YXJuaW5nLgorCSAqLworCXNhdmVfd2FybmluZyA9IHdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5OworCXdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5ID0gMDsKKworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzdGRpbiwgJ1xuJykgIT0gRU9GKSB7CisJCWlmIChkYXRhLnNwbGl0X29uX3doaXRlc3BhY2UpIHsKKwkJCS8qCisJCQkgKiBTcGxpdCBhdCBmaXJzdCB3aGl0ZXNwYWNlLCB0eWluZyBvZmYgdGhlIGJlZ2lubmluZworCQkJICogb2YgdGhlIHN0cmluZyBhbmQgc2F2aW5nIHRoZSByZW1haW5kZXIgKG9yIE5VTEwpIGluCisJCQkgKiBkYXRhLnJlc3QuCisJCQkgKi8KKwkJCWNoYXIgKnAgPSBzdHJwYnJrKGJ1Zi5idWYsICIgXHQiKTsKKwkJCWlmIChwKSB7CisJCQkJd2hpbGUgKCpwICYmIHN0cmNocigiIFx0IiwgKnApKQorCQkJCQkqcCsrID0gJ1wwJzsKKwkJCX0KKwkJCWRhdGEucmVzdCA9IHA7CisJCX0KKworCQliYXRjaF9vbmVfb2JqZWN0KGJ1Zi5idWYsIG9wdCwgJmRhdGEpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5ID0gc2F2ZV93YXJuaW5nOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2F0X2ZpbGVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdfC1zIFstLWFsbG93LXVua25vd24tdHlwZV18LWV8LXB8PHR5cGU+fC0tdGV4dGNvbnYpIDxvYmplY3Q+IiksCisJTl8oImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGdpdF9jYXRfZmlsZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKHVzZXJkaWZmX2NvbmZpZyh2YXIsIHZhbHVlKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IGJhdGNoX29wdGlvbl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJIGNvbnN0IGNoYXIgKmFyZywKKwkJCQkgaW50IHVuc2V0KQoreworCXN0cnVjdCBiYXRjaF9vcHRpb25zICpibyA9IG9wdC0+dmFsdWU7CisKKwlpZiAoYm8tPmVuYWJsZWQpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJYm8tPmVuYWJsZWQgPSAxOworCWJvLT5wcmludF9jb250ZW50cyA9ICFzdHJjbXAob3B0LT5sb25nX25hbWUsICJiYXRjaCIpOworCWJvLT5mb3JtYXQgPSBhcmc7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9jYXRfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgb3B0ID0gMDsKKwljb25zdCBjaGFyICpleHBfdHlwZSA9IE5VTEwsICpvYmpfbmFtZSA9IE5VTEw7CisJc3RydWN0IGJhdGNoX29wdGlvbnMgYmF0Y2ggPSB7MH07CisJaW50IHVua25vd25fdHlwZSA9IDA7CisKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0dST1VQKE5fKCI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciKSksCisJCU9QVF9DTURNT0RFKCd0JywgTlVMTCwgJm9wdCwgTl8oInNob3cgb2JqZWN0IHR5cGUiKSwgJ3QnKSwKKwkJT1BUX0NNRE1PREUoJ3MnLCBOVUxMLCAmb3B0LCBOXygic2hvdyBvYmplY3Qgc2l6ZSIpLCAncycpLAorCQlPUFRfQ01ETU9ERSgnZScsIE5VTEwsICZvcHQsCisJCQkgICAgTl8oImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIpLCAnZScpLAorCQlPUFRfQ01ETU9ERSgncCcsIE5VTEwsICZvcHQsIE5fKCJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIpLCAncCcpLAorCQlPUFRfQ01ETU9ERSgwLCAidGV4dGNvbnYiLCAmb3B0LAorCQkJICAgIE5fKCJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIpLCAnYycpLAorCQlPUFRfQk9PTCgwLCAiYWxsb3ctdW5rbm93bi10eXBlIiwgJnVua25vd25fdHlwZSwKKwkJCSAgTl8oImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIpKSwKKwkJT1BUX0JPT0woMCwgImJ1ZmZlciIsICZiYXRjaC5idWZmZXJfb3V0cHV0LCBOXygiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImJhdGNoIiwgJmJhdGNoLCAiZm9ybWF0IiwKKwkJCU5fKCJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIGJhdGNoX29wdGlvbl9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImJhdGNoLWNoZWNrIiwgJmJhdGNoLCAiZm9ybWF0IiwKKwkJCU5fKCJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIGJhdGNoX29wdGlvbl9jYWxsYmFjayB9LAorCQlPUFRfQk9PTCgwLCAiZm9sbG93LXN5bWxpbmtzIiwgJmJhdGNoLmZvbGxvd19zeW1saW5rcywKKwkJCSBOXygiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIikpLAorCQlPUFRfQk9PTCgwLCAiYmF0Y2gtYWxsLW9iamVjdHMiLCAmYmF0Y2guYWxsX29iamVjdHMsCisJCQkgTl8oInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9jYXRfZmlsZV9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBjYXRfZmlsZV91c2FnZSwgMCk7CisKKwlpZiAob3B0KSB7CisJCWlmIChhcmdjID09IDEpCisJCQlvYmpfbmFtZSA9IGFyZ3ZbMF07CisJCWVsc2UKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCWlmICghb3B0ICYmICFiYXRjaC5lbmFibGVkKSB7CisJCWlmIChhcmdjID09IDIpIHsKKwkJCWV4cF90eXBlID0gYXJndlswXTsKKwkJCW9ial9uYW1lID0gYXJndlsxXTsKKwkJfSBlbHNlCisJCQl1c2FnZV93aXRoX29wdGlvbnMoY2F0X2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOworCX0KKwlpZiAoYmF0Y2guZW5hYmxlZCAmJiAob3B0IHx8IGFyZ2MpKSB7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKChiYXRjaC5mb2xsb3dfc3ltbGlua3MgfHwgYmF0Y2guYWxsX29iamVjdHMpICYmICFiYXRjaC5lbmFibGVkKSB7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhjYXRfZmlsZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGJhdGNoLmVuYWJsZWQpCisJCXJldHVybiBiYXRjaF9vYmplY3RzKCZiYXRjaCk7CisKKwlpZiAodW5rbm93bl90eXBlICYmIG9wdCAhPSAndCcgJiYgb3B0ICE9ICdzJykKKwkJZGllKCJnaXQgY2F0LWZpbGUgLS1hbGxvdy11bmtub3duLXR5cGU6IHVzZSB3aXRoIC1zIG9yIC10Iik7CisJcmV0dXJuIGNhdF9vbmVfZmlsZShvcHQsIGV4cF90eXBlLCBvYmpfbmFtZSwgdW5rbm93bl90eXBlKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2hlY2stYXR0ci5jIGIvYnVpbHRpbi9jaGVjay1hdHRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1YzliYQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY2hlY2stYXR0ci5jCkBAIC0wLDAgKzEsMTg2IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgaW50IGFsbF9hdHRyczsKK3N0YXRpYyBpbnQgY2FjaGVkX2F0dHJzOworc3RhdGljIGludCBzdGRpbl9wYXRoczsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2hlY2tfYXR0cl91c2FnZVtdID0geworTl8oImdpdCBjaGVjay1hdHRyIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSBbLS1dIDxwYXRobmFtZT4uLi4iKSwKK05fKCJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIiksCitOVUxMCit9OworCitzdGF0aWMgaW50IG51bF90ZXJtX2xpbmU7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uIGNoZWNrX2F0dHJfb3B0aW9uc1tdID0geworCU9QVF9CT09MKCdhJywgImFsbCIsICZhbGxfYXR0cnMsIE5fKCJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiKSksCisJT1BUX0JPT0woMCwgICJjYWNoZWQiLCAmY2FjaGVkX2F0dHJzLCBOXygidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiKSksCisJT1BUX0JPT0woMCAsICJzdGRpbiIsICZzdGRpbl9wYXRocywgTl8oInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIikpLAorCU9QVF9CT09MKCd6JywgTlVMTCwgJm51bF90ZXJtX2xpbmUsCisJCSBOXygidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiKSksCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgdm9pZCBvdXRwdXRfYXR0cihpbnQgY250LCBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrLAorCWNvbnN0IGNoYXIgKmZpbGUpCit7CisJaW50IGo7CisJZm9yIChqID0gMDsgaiA8IGNudDsgaisrKSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2tbal0udmFsdWU7CisKKwkJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpCisJCQl2YWx1ZSA9ICJzZXQiOworCQllbHNlIGlmIChBVFRSX0ZBTFNFKHZhbHVlKSkKKwkJCXZhbHVlID0gInVuc2V0IjsKKwkJZWxzZSBpZiAoQVRUUl9VTlNFVCh2YWx1ZSkpCisJCQl2YWx1ZSA9ICJ1bnNwZWNpZmllZCI7CisKKwkJaWYgKG51bF90ZXJtX2xpbmUpIHsKKwkJCXByaW50ZigiJXMlYyIgLyogcGF0aCAqLworCQkJICAgICAgICIlcyVjIiAvKiBhdHRybmFtZSAqLworCQkJICAgICAgICIlcyVjIiAvKiBhdHRydmFsdWUgKi8sCisJCQkgICAgICAgZmlsZSwgMCwgZ2l0X2F0dHJfbmFtZShjaGVja1tqXS5hdHRyKSwgMCwgdmFsdWUsIDApOworCQl9IGVsc2UgeworCQkJcXVvdGVfY19zdHlsZShmaWxlLCBOVUxMLCBzdGRvdXQsIDApOworCQkJcHJpbnRmKCI6ICVzOiAlc1xuIiwgZ2l0X2F0dHJfbmFtZShjaGVja1tqXS5hdHRyKSwgdmFsdWUpOworCQl9CisKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2F0dHIoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgY250LAorCXN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2ssIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJY2hhciAqZnVsbF9wYXRoID0KKwkJcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDAsIGZpbGUpOworCWlmIChjaGVjayAhPSBOVUxMKSB7CisJCWlmIChnaXRfY2hlY2tfYXR0cihmdWxsX3BhdGgsIGNudCwgY2hlY2spKQorCQkJZGllKCJnaXRfY2hlY2tfYXR0ciBkaWVkIik7CisJCW91dHB1dF9hdHRyKGNudCwgY2hlY2ssIGZpbGUpOworCX0gZWxzZSB7CisJCWlmIChnaXRfYWxsX2F0dHJzKGZ1bGxfcGF0aCwgJmNudCwgJmNoZWNrKSkKKwkJCWRpZSgiZ2l0X2FsbF9hdHRycyBkaWVkIik7CisJCW91dHB1dF9hdHRyKGNudCwgY2hlY2ssIGZpbGUpOworCQlmcmVlKGNoZWNrKTsKKwl9CisJZnJlZShmdWxsX3BhdGgpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19hdHRyX3N0ZGluX3BhdGhzKGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IGNudCwKKwlzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrKQoreworCXN0cnVjdCBzdHJidWYgYnVmLCBuYnVmOworCWludCBsaW5lX3Rlcm1pbmF0aW9uID0gbnVsX3Rlcm1fbGluZSA/IDAgOiAnXG4nOworCisJc3RyYnVmX2luaXQoJmJ1ZiwgMCk7CisJc3RyYnVmX2luaXQoJm5idWYsIDApOworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzdGRpbiwgbGluZV90ZXJtaW5hdGlvbikgIT0gRU9GKSB7CisJCWlmIChsaW5lX3Rlcm1pbmF0aW9uICYmIGJ1Zi5idWZbMF0gPT0gJyInKSB7CisJCQlzdHJidWZfcmVzZXQoJm5idWYpOworCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmbmJ1ZiwgYnVmLmJ1ZiwgTlVMTCkpCisJCQkJZGllKCJsaW5lIGlzIGJhZGx5IHF1b3RlZCIpOworCQkJc3RyYnVmX3N3YXAoJmJ1ZiwgJm5idWYpOworCQl9CisJCWNoZWNrX2F0dHIocHJlZml4LCBjbnQsIGNoZWNrLCBidWYuYnVmKTsKKwkJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgImF0dHJpYnV0ZSB0byBzdGRvdXQiKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJm5idWYpOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBlcnJvcl93aXRoX3VzYWdlKGNvbnN0IGNoYXIgKm1zZykKK3sKKwllcnJvcigiJXMiLCBtc2cpOworCXVzYWdlX3dpdGhfb3B0aW9ucyhjaGVja19hdHRyX3VzYWdlLCBjaGVja19hdHRyX29wdGlvbnMpOworfQorCitpbnQgY21kX2NoZWNrX2F0dHIoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVjazsKKwlpbnQgY250LCBpLCBkb3VibGVkYXNoLCBmaWxlaTsKKworCWlmICghaXNfYmFyZV9yZXBvc2l0b3J5KCkpCisJCXNldHVwX3dvcmtfdHJlZSgpOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBjaGVja19hdHRyX29wdGlvbnMsCisJCQkgICAgIGNoZWNrX2F0dHJfdXNhZ2UsIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIKTsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKSB7CisJCWRpZSgiaW52YWxpZCBjYWNoZSIpOworCX0KKworCWlmIChjYWNoZWRfYXR0cnMpCisJCWdpdF9hdHRyX3NldF9kaXJlY3Rpb24oR0lUX0FUVFJfSU5ERVgsIE5VTEwpOworCisJZG91YmxlZGFzaCA9IC0xOworCWZvciAoaSA9IDA7IGRvdWJsZWRhc2ggPCAwICYmIGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tIikpCisJCQlkb3VibGVkYXNoID0gaTsKKwl9CisKKwkvKiBQcm9jZXNzIC0tYWxsIGFuZC9vciBhdHRyaWJ1dGUgYXJndW1lbnRzOiAqLworCWlmIChhbGxfYXR0cnMpIHsKKwkJaWYgKGRvdWJsZWRhc2ggPj0gMSkKKwkJCWVycm9yX3dpdGhfdXNhZ2UoIkF0dHJpYnV0ZXMgYW5kIC0tYWxsIGJvdGggc3BlY2lmaWVkIik7CisKKwkJY250ID0gMDsKKwkJZmlsZWkgPSBkb3VibGVkYXNoICsgMTsKKwl9IGVsc2UgaWYgKGRvdWJsZWRhc2ggPT0gMCkgeworCQllcnJvcl93aXRoX3VzYWdlKCJObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIik7CisJfSBlbHNlIGlmIChkb3VibGVkYXNoIDwgMCkgeworCQlpZiAoIWFyZ2MpCisJCQllcnJvcl93aXRoX3VzYWdlKCJObyBhdHRyaWJ1dGUgc3BlY2lmaWVkIik7CisKKwkJaWYgKHN0ZGluX3BhdGhzKSB7CisJCQkvKiBUcmVhdCBhbGwgYXJndW1lbnRzIGFzIGF0dHJpYnV0ZSBuYW1lcy4gKi8KKwkJCWNudCA9IGFyZ2M7CisJCQlmaWxlaSA9IGFyZ2M7CisJCX0gZWxzZSB7CisJCQkvKiBUcmVhdCBleGFjdGx5IG9uZSBhcmd1bWVudCBhcyBhbiBhdHRyaWJ1dGUgbmFtZS4gKi8KKwkJCWNudCA9IDE7CisJCQlmaWxlaSA9IDE7CisJCX0KKwl9IGVsc2UgeworCQljbnQgPSBkb3VibGVkYXNoOworCQlmaWxlaSA9IGRvdWJsZWRhc2ggKyAxOworCX0KKworCS8qIENoZWNrIGZpbGUgYXJndW1lbnQocyk6ICovCisJaWYgKHN0ZGluX3BhdGhzKSB7CisJCWlmIChmaWxlaSA8IGFyZ2MpCisJCQllcnJvcl93aXRoX3VzYWdlKCJDYW4ndCBzcGVjaWZ5IGZpbGVzIHdpdGggLS1zdGRpbiIpOworCX0gZWxzZSB7CisJCWlmIChmaWxlaSA+PSBhcmdjKQorCQkJZXJyb3Jfd2l0aF91c2FnZSgiTm8gZmlsZSBzcGVjaWZpZWQiKTsKKwl9CisKKwlpZiAoYWxsX2F0dHJzKSB7CisJCWNoZWNrID0gTlVMTDsKKwl9IGVsc2UgeworCQljaGVjayA9IHhjYWxsb2MoY250LCBzaXplb2YoKmNoZWNrKSk7CisJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQkJY29uc3QgY2hhciAqbmFtZTsKKwkJCXN0cnVjdCBnaXRfYXR0ciAqYTsKKwkJCW5hbWUgPSBhcmd2W2ldOworCQkJYSA9IGdpdF9hdHRyKG5hbWUpOworCQkJaWYgKCFhKQorCQkJCXJldHVybiBlcnJvcigiJXM6IG5vdCBhIHZhbGlkIGF0dHJpYnV0ZSBuYW1lIiwKKwkJCQkJbmFtZSk7CisJCQljaGVja1tpXS5hdHRyID0gYTsKKwkJfQorCX0KKworCWlmIChzdGRpbl9wYXRocykKKwkJY2hlY2tfYXR0cl9zdGRpbl9wYXRocyhwcmVmaXgsIGNudCwgY2hlY2spOworCWVsc2UgeworCQlmb3IgKGkgPSBmaWxlaTsgaSA8IGFyZ2M7IGkrKykKKwkJCWNoZWNrX2F0dHIocHJlZml4LCBjbnQsIGNoZWNrLCBhcmd2W2ldKTsKKwkJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgImF0dHJpYnV0ZSB0byBzdGRvdXQiKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrLWlnbm9yZS5jIGIvYnVpbHRpbi9jaGVjay1pZ25vcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2YzNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jaGVjay1pZ25vcmUuYwpAQCAtMCwwICsxLDE4NyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBpbnQgcXVpZXQsIHZlcmJvc2UsIHN0ZGluX3BhdGhzLCBzaG93X25vbl9tYXRjaGluZywgbm9faW5kZXg7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNoZWNrX2lnbm9yZV91c2FnZVtdID0geworImdpdCBjaGVjay1pZ25vcmUgWzxvcHRpb25zPl0gPHBhdGhuYW1lPi4uLiIsCisiZ2l0IGNoZWNrLWlnbm9yZSBbPG9wdGlvbnM+XSAtLXN0ZGluIiwKK05VTEwKK307CisKK3N0YXRpYyBpbnQgbnVsX3Rlcm1fbGluZTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gY2hlY2tfaWdub3JlX29wdGlvbnNbXSA9IHsKKwlPUFRfX1FVSUVUKCZxdWlldCwgTl8oInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJiZSB2ZXJib3NlIikpLAorCU9QVF9HUk9VUCgiIiksCisJT1BUX0JPT0woMCwgInN0ZGluIiwgJnN0ZGluX3BhdGhzLAorCQkgTl8oInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIikpLAorCU9QVF9CT09MKCd6JywgTlVMTCwgJm51bF90ZXJtX2xpbmUsCisJCSBOXygidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiKSksCisJT1BUX0JPT0woJ24nLCAibm9uLW1hdGNoaW5nIiwgJnNob3dfbm9uX21hdGNoaW5nLAorCQkgTl8oInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIikpLAorCU9QVF9CT09MKDAsICJuby1pbmRleCIsICZub19pbmRleCwKKwkJIE5fKCJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIpKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyB2b2lkIG91dHB1dF9leGNsdWRlKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBleGNsdWRlICpleGNsdWRlKQoreworCWNoYXIgKmJhbmcgID0gKGV4Y2x1ZGUgJiYgZXhjbHVkZS0+ZmxhZ3MgJiBFWENfRkxBR19ORUdBVElWRSkgID8gIiEiIDogIiI7CisJY2hhciAqc2xhc2ggPSAoZXhjbHVkZSAmJiBleGNsdWRlLT5mbGFncyAmIEVYQ19GTEFHX01VU1RCRURJUikgPyAiLyIgOiAiIjsKKwlpZiAoIW51bF90ZXJtX2xpbmUpIHsKKwkJaWYgKCF2ZXJib3NlKSB7CisJCQl3cml0ZV9uYW1lX3F1b3RlZChwYXRoLCBzdGRvdXQsICdcbicpOworCQl9IGVsc2UgeworCQkJaWYgKGV4Y2x1ZGUpIHsKKwkJCQlxdW90ZV9jX3N0eWxlKGV4Y2x1ZGUtPmVsLT5zcmMsIE5VTEwsIHN0ZG91dCwgMCk7CisJCQkJcHJpbnRmKCI6JWQ6JXMlcyVzXHQiLAorCQkJCSAgICAgICBleGNsdWRlLT5zcmNwb3MsCisJCQkJICAgICAgIGJhbmcsIGV4Y2x1ZGUtPnBhdHRlcm4sIHNsYXNoKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXByaW50ZigiOjpcdCIpOworCQkJfQorCQkJcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCQkJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghdmVyYm9zZSkgeworCQkJcHJpbnRmKCIlcyVjIiwgcGF0aCwgJ1wwJyk7CisJCX0gZWxzZSB7CisJCQlpZiAoZXhjbHVkZSkKKwkJCQlwcmludGYoIiVzJWMlZCVjJXMlcyVzJWMlcyVjIiwKKwkJCQkgICAgICAgZXhjbHVkZS0+ZWwtPnNyYywgJ1wwJywKKwkJCQkgICAgICAgZXhjbHVkZS0+c3JjcG9zLCAnXDAnLAorCQkJCSAgICAgICBiYW5nLCBleGNsdWRlLT5wYXR0ZXJuLCBzbGFzaCwgJ1wwJywKKwkJCQkgICAgICAgcGF0aCwgJ1wwJyk7CisJCQllbHNlCisJCQkJcHJpbnRmKCIlYyVjJWMlcyVjIiwgJ1wwJywgJ1wwJywgJ1wwJywgcGF0aCwgJ1wwJyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaWdub3JlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQljb25zdCBjaGFyICpwcmVmaXgsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpmdWxsX3BhdGg7CisJY2hhciAqc2VlbjsKKwlpbnQgbnVtX2lnbm9yZWQgPSAwLCBkdHlwZSA9IERUX1VOS05PV04sIGk7CisJc3RydWN0IGV4Y2x1ZGUgKmV4Y2x1ZGU7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCisJaWYgKCFhcmdjKSB7CisJCWlmICghcXVpZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgIm5vIHBhdGhzcGVjIGdpdmVuLlxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogY2hlY2staWdub3JlIGp1c3QgbmVlZHMgcGF0aHMuIE1hZ2ljIGJleW9uZCA6LyBpcyByZWFsbHkKKwkgKiBpcnJlbGV2YW50LgorCSAqLworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywKKwkJICAgICAgIFBBVEhTUEVDX0FMTF9NQUdJQyAmIH5QQVRIU1BFQ19GUk9NVE9QLAorCQkgICAgICAgUEFUSFNQRUNfU1lNTElOS19MRUFESU5HX1BBVEggfAorCQkgICAgICAgUEFUSFNQRUNfU1RSSVBfU1VCTU9EVUxFX1NMQVNIX0VYUEVOU0lWRSB8CisJCSAgICAgICBQQVRIU1BFQ19LRUVQX09SREVSLAorCQkgICAgICAgcHJlZml4LCBhcmd2KTsKKworCS8qCisJICogbG9vayBmb3IgcGF0aHNwZWNzIG1hdGNoaW5nIGVudHJpZXMgaW4gdGhlIGluZGV4LCBzaW5jZSB0aGVzZQorCSAqIHNob3VsZCBub3QgYmUgaWdub3JlZCwgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3aXRoCisJICogJ2dpdCBzdGF0dXMnLCAnZ2l0IGFkZCcgZXRjLgorCSAqLworCXNlZW4gPSBmaW5kX3BhdGhzcGVjc19tYXRjaGluZ19hZ2FpbnN0X2luZGV4KCZwYXRoc3BlYyk7CisJZm9yIChpID0gMDsgaSA8IHBhdGhzcGVjLm5yOyBpKyspIHsKKwkJZnVsbF9wYXRoID0gcGF0aHNwZWMuaXRlbXNbaV0ubWF0Y2g7CisJCWV4Y2x1ZGUgPSBOVUxMOworCQlpZiAoIXNlZW5baV0pIHsKKwkJCWV4Y2x1ZGUgPSBsYXN0X2V4Y2x1ZGVfbWF0Y2hpbmcoZGlyLCBmdWxsX3BhdGgsICZkdHlwZSk7CisJCX0KKwkJaWYgKCFxdWlldCAmJiAoZXhjbHVkZSB8fCBzaG93X25vbl9tYXRjaGluZykpCisJCQlvdXRwdXRfZXhjbHVkZShwYXRoc3BlYy5pdGVtc1tpXS5vcmlnaW5hbCwgZXhjbHVkZSk7CisJCWlmIChleGNsdWRlKQorCQkJbnVtX2lnbm9yZWQrKzsKKwl9CisJZnJlZShzZWVuKTsKKworCXJldHVybiBudW1faWdub3JlZDsKK30KKworc3RhdGljIGludCBjaGVja19pZ25vcmVfc3RkaW5fcGF0aHMoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBzdHJidWYgYnVmLCBuYnVmOworCWNoYXIgKnBhdGhzcGVjWzJdID0geyBOVUxMLCBOVUxMIH07CisJaW50IGxpbmVfdGVybWluYXRpb24gPSBudWxfdGVybV9saW5lID8gMCA6ICdcbic7CisJaW50IG51bV9pZ25vcmVkID0gMDsKKworCXN0cmJ1Zl9pbml0KCZidWYsIDApOworCXN0cmJ1Zl9pbml0KCZuYnVmLCAwKTsKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sIGxpbmVfdGVybWluYXRpb24pICE9IEVPRikgeworCQlpZiAobGluZV90ZXJtaW5hdGlvbiAmJiBidWYuYnVmWzBdID09ICciJykgeworCQkJc3RyYnVmX3Jlc2V0KCZuYnVmKTsKKwkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJm5idWYsIGJ1Zi5idWYsIE5VTEwpKQorCQkJCWRpZSgibGluZSBpcyBiYWRseSBxdW90ZWQiKTsKKwkJCXN0cmJ1Zl9zd2FwKCZidWYsICZuYnVmKTsKKwkJfQorCQlwYXRoc3BlY1swXSA9IGJ1Zi5idWY7CisJCW51bV9pZ25vcmVkICs9IGNoZWNrX2lnbm9yZShkaXIsIHByZWZpeCwKKwkJCQkJICAgIDEsIChjb25zdCBjaGFyICoqKXBhdGhzcGVjKTsKKwkJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgImNoZWNrLWlnbm9yZSB0byBzdGRvdXQiKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJm5idWYpOworCXJldHVybiBudW1faWdub3JlZDsKK30KKworaW50IGNtZF9jaGVja19pZ25vcmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG51bV9pZ25vcmVkOworCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgY2hlY2tfaWdub3JlX29wdGlvbnMsCisJCQkgICAgIGNoZWNrX2lnbm9yZV91c2FnZSwgMCk7CisKKwlpZiAoc3RkaW5fcGF0aHMpIHsKKwkJaWYgKGFyZ2MgPiAwKQorCQkJZGllKF8oImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iKSk7CisJfSBlbHNlIHsKKwkJaWYgKG51bF90ZXJtX2xpbmUpCisJCQlkaWUoXygiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iKSk7CisJCWlmIChhcmdjID09IDApCisJCQlkaWUoXygibm8gcGF0aCBzcGVjaWZpZWQiKSk7CisJfQorCWlmIChxdWlldCkgeworCQlpZiAoYXJnYyA+IDEpCisJCQlkaWUoXygiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiKSk7CisJCWlmICh2ZXJib3NlKQorCQkJZGllKF8oImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIikpOworCX0KKwlpZiAoc2hvd19ub25fbWF0Y2hpbmcgJiYgIXZlcmJvc2UpCisJCWRpZShfKCItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIikpOworCisJLyogcmVhZF9jYWNoZSgpIGlzIG9ubHkgbmVjZXNzYXJ5IHNvIHdlIGNhbiB3YXRjaCBvdXQgZm9yIHN1Ym1vZHVsZXMuICovCisJaWYgKCFub19pbmRleCAmJiByZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKworCWlmIChzdGRpbl9wYXRocykgeworCQludW1faWdub3JlZCA9IGNoZWNrX2lnbm9yZV9zdGRpbl9wYXRocygmZGlyLCBwcmVmaXgpOworCX0gZWxzZSB7CisJCW51bV9pZ25vcmVkID0gY2hlY2tfaWdub3JlKCZkaXIsIHByZWZpeCwgYXJnYywgYXJndik7CisJCW1heWJlX2ZsdXNoX29yX2RpZShzdGRvdXQsICJpZ25vcmUgdG8gc3Rkb3V0Iik7CisJfQorCisJY2xlYXJfZGlyZWN0b3J5KCZkaXIpOworCisJcmV0dXJuICFudW1faWdub3JlZDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2hlY2stbWFpbG1hcC5jIGIvYnVpbHRpbi9jaGVjay1tYWlsbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFhZWE1NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vY2hlY2stbWFpbG1hcC5jCkBAIC0wLDAgKzEsNjYgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAibWFpbG1hcC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCitzdGF0aWMgaW50IHVzZV9zdGRpbjsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2hlY2tfbWFpbG1hcF91c2FnZVtdID0geworTl8oImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIpLAorTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gY2hlY2tfbWFpbG1hcF9vcHRpb25zW10gPSB7CisJT1BUX0JPT0woMCwgInN0ZGluIiwgJnVzZV9zdGRpbiwgTl8oImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIikpLAorCU9QVF9FTkQoKQorfTsKKworc3RhdGljIHZvaWQgY2hlY2tfbWFpbG1hcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1haWxtYXAsIGNvbnN0IGNoYXIgKmNvbnRhY3QpCit7CisJY29uc3QgY2hhciAqbmFtZSwgKm1haWw7CisJc2l6ZV90IG5hbWVsZW4sIG1haWxsZW47CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCisJaWYgKHNwbGl0X2lkZW50X2xpbmUoJmlkZW50LCBjb250YWN0LCBzdHJsZW4oY29udGFjdCkpKQorCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIiksIGNvbnRhY3QpOworCisJbmFtZSA9IGlkZW50Lm5hbWVfYmVnaW47CisJbmFtZWxlbiA9IGlkZW50Lm5hbWVfZW5kIC0gaWRlbnQubmFtZV9iZWdpbjsKKwltYWlsID0gaWRlbnQubWFpbF9iZWdpbjsKKwltYWlsbGVuID0gaWRlbnQubWFpbF9lbmQgLSBpZGVudC5tYWlsX2JlZ2luOworCisJbWFwX3VzZXIobWFpbG1hcCwgJm1haWwsICZtYWlsbGVuLCAmbmFtZSwgJm5hbWVsZW4pOworCisJaWYgKG5hbWVsZW4pCisJCXByaW50ZigiJS4qcyAiLCAoaW50KW5hbWVsZW4sIG5hbWUpOworCXByaW50ZigiPCUuKnM+XG4iLCAoaW50KW1haWxsZW4sIG1haWwpOworfQorCitpbnQgY21kX2NoZWNrX21haWxtYXAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0IG1haWxtYXAgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgY2hlY2tfbWFpbG1hcF9vcHRpb25zLAorCQkJICAgICBjaGVja19tYWlsbWFwX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA9PSAwICYmICF1c2Vfc3RkaW4pCisJCWRpZShfKCJubyBjb250YWN0cyBzcGVjaWZpZWQiKSk7CisKKwlyZWFkX21haWxtYXAoJm1haWxtYXAsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7ICsraSkKKwkJY2hlY2tfbWFpbG1hcCgmbWFpbG1hcCwgYXJndltpXSk7CisJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgInN0ZG91dCIpOworCisJaWYgKHVzZV9zdGRpbikgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQkJY2hlY2tfbWFpbG1hcCgmbWFpbG1hcCwgYnVmLmJ1Zik7CisJCQltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAic3Rkb3V0Iik7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCisJY2xlYXJfbWFpbG1hcCgmbWFpbG1hcCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NoZWNrLXJlZi1mb3JtYXQuYyBiL2J1aWx0aW4vY2hlY2stcmVmLWZvcm1hdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTE1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NoZWNrLXJlZi1mb3JtYXQuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgYnVpbHRpbl9jaGVja19yZWZfZm9ybWF0X3VzYWdlW10gPQorImdpdCBjaGVjay1yZWYtZm9ybWF0IFstLW5vcm1hbGl6ZV0gWzxvcHRpb25zPl0gPHJlZm5hbWU+XG4iCisiICAgb3I6IGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIDxicmFuY2huYW1lLXNob3J0aGFuZD4iOworCisvKgorICogUmV0dXJuIGEgY29weSBvZiByZWZuYW1lIGJ1dCB3aXRoIGxlYWRpbmcgc2xhc2hlcyByZW1vdmVkIGFuZCBydW5zCisgKiBvZiBhZGphY2VudCBzbGFzaGVzIHJlcGxhY2VkIHdpdGggc2luZ2xlIHNsYXNoZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIG5vcm1hbGl6ZV9wYXRoX2NvcHkoKSwgYnV0IHN0cmlwcGVkIGRvd24KKyAqIHRvIG1lZXQgY2hlY2tfcmVmX2Zvcm1hdCdzIHNpbXBsZXIgbmVlZHMuCisgKi8KK3N0YXRpYyBjaGFyICpjb2xsYXBzZV9zbGFzaGVzKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJY2hhciAqcmV0ID0geG1hbGxvYyhzdHJsZW4ocmVmbmFtZSkgKyAxKTsKKwljaGFyIGNoOworCWNoYXIgcHJldiA9ICcvJzsKKwljaGFyICpjcCA9IHJldDsKKworCXdoaWxlICgoY2ggPSAqcmVmbmFtZSsrKSAhPSAnXDAnKSB7CisJCWlmIChwcmV2ID09ICcvJyAmJiBjaCA9PSBwcmV2KQorCQkJY29udGludWU7CisKKwkJKmNwKysgPSBjaDsKKwkJcHJldiA9IGNoOworCX0KKwkqY3AgPSAnXDAnOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVmX2Zvcm1hdF9icmFuY2goY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgbm9uZ2l0OworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdCk7CisJaWYgKHN0cmJ1Zl9jaGVja19icmFuY2hfcmVmKCZzYiwgYXJnKSkKKwkJZGllKCInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lIiwgYXJnKTsKKwlwcmludGYoIiVzXG4iLCBzYi5idWYgKyAxMSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfY2hlY2tfcmVmX2Zvcm1hdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlpbnQgbm9ybWFsaXplID0gMDsKKwlpbnQgZmxhZ3MgPSAwOworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKGJ1aWx0aW5fY2hlY2tfcmVmX2Zvcm1hdF91c2FnZSk7CisKKwlpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgIi0tYnJhbmNoIikpCisJCXJldHVybiBjaGVja19yZWZfZm9ybWF0X2JyYW5jaChhcmd2WzJdKTsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjICYmIGFyZ3ZbaV1bMF0gPT0gJy0nOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tbm9ybWFsaXplIikgfHwgIXN0cmNtcChhcmd2W2ldLCAiLS1wcmludCIpKQorCQkJbm9ybWFsaXplID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1hbGxvdy1vbmVsZXZlbCIpKQorCQkJZmxhZ3MgfD0gUkVGTkFNRV9BTExPV19PTkVMRVZFTDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1uby1hbGxvdy1vbmVsZXZlbCIpKQorCQkJZmxhZ3MgJj0gflJFRk5BTUVfQUxMT1dfT05FTEVWRUw7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tcmVmc3BlYy1wYXR0ZXJuIikpCisJCQlmbGFncyB8PSBSRUZOQU1FX1JFRlNQRUNfUEFUVEVSTjsKKwkJZWxzZQorCQkJdXNhZ2UoYnVpbHRpbl9jaGVja19yZWZfZm9ybWF0X3VzYWdlKTsKKwl9CisJaWYgKCEgKGkgPT0gYXJnYyAtIDEpKQorCQl1c2FnZShidWlsdGluX2NoZWNrX3JlZl9mb3JtYXRfdXNhZ2UpOworCisJcmVmbmFtZSA9IGFyZ3ZbaV07CisJaWYgKG5vcm1hbGl6ZSkKKwkJcmVmbmFtZSA9IGNvbGxhcHNlX3NsYXNoZXMocmVmbmFtZSk7CisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZm5hbWUsIGZsYWdzKSkKKwkJcmV0dXJuIDE7CisJaWYgKG5vcm1hbGl6ZSkKKwkJcHJpbnRmKCIlc1xuIiwgcmVmbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2hlY2tvdXQtaW5kZXguYyBiL2J1aWx0aW4vY2hlY2tvdXQtaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDI4YzM3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jaGVja291dC1pbmRleC5jCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogQ2hlY2stb3V0IGZpbGVzIGZyb20gdGhlICJjdXJyZW50IGNhY2hlIGRpcmVjdG9yeSIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTGludXMgVG9ydmFsZHMKKyAqCisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKKyNkZWZpbmUgQ0hFQ0tPVVRfQUxMIDQKK3N0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7CitzdGF0aWMgaW50IGNoZWNrb3V0X3N0YWdlOyAvKiBkZWZhdWx0IHRvIGNoZWNrb3V0IHN0YWdlMCAqLworc3RhdGljIGludCB0b190ZW1wZmlsZTsKK3N0YXRpYyBjaGFyIHRvcGF0aFs0XVtURU1QT1JBUllfRklMRU5BTUVfTEVOR1RIICsgMV07CisKK3N0YXRpYyBzdHJ1Y3QgY2hlY2tvdXQgc3RhdGU7CisKK3N0YXRpYyB2b2lkIHdyaXRlX3RlbXBmaWxlX3JlY29yZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisKKwlpZiAoQ0hFQ0tPVVRfQUxMID09IGNoZWNrb3V0X3N0YWdlKSB7CisJCWZvciAoaSA9IDE7IGkgPCA0OyBpKyspIHsKKwkJCWlmIChpID4gMSkKKwkJCQlwdXRjaGFyKCcgJyk7CisJCQlpZiAodG9wYXRoW2ldWzBdKQorCQkJCWZwdXRzKHRvcGF0aFtpXSwgc3Rkb3V0KTsKKwkJCWVsc2UKKwkJCQlwdXRjaGFyKCcuJyk7CisJCX0KKwl9IGVsc2UKKwkJZnB1dHModG9wYXRoW2NoZWNrb3V0X3N0YWdlXSwgc3Rkb3V0KTsKKworCXB1dGNoYXIoJ1x0Jyk7CisJd3JpdGVfbmFtZV9xdW90ZWRfcmVsYXRpdmUobmFtZSwgcHJlZml4LCBzdGRvdXQsIGxpbmVfdGVybWluYXRpb24pOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQl0b3BhdGhbaV1bMF0gPSAwOworCX0KK30KKworc3RhdGljIGludCBjaGVja291dF9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKwlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MobmFtZSwgbmFtZWxlbik7CisJaW50IGhhc19zYW1lX25hbWUgPSAwOworCWludCBkaWRfY2hlY2tvdXQgPSAwOworCWludCBlcnJzID0gMDsKKworCWlmIChwb3MgPCAwKQorCQlwb3MgPSAtcG9zIC0gMTsKKworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpZiAoY2VfbmFtZWxlbihjZSkgIT0gbmFtZWxlbiB8fAorCQkgICAgbWVtY21wKGNlLT5uYW1lLCBuYW1lLCBuYW1lbGVuKSkKKwkJCWJyZWFrOworCQloYXNfc2FtZV9uYW1lID0gMTsKKwkJcG9zKys7CisJCWlmIChjZV9zdGFnZShjZSkgIT0gY2hlY2tvdXRfc3RhZ2UKKwkJICAgICYmIChDSEVDS09VVF9BTEwgIT0gY2hlY2tvdXRfc3RhZ2UgfHwgIWNlX3N0YWdlKGNlKSkpCisJCQljb250aW51ZTsKKwkJZGlkX2NoZWNrb3V0ID0gMTsKKwkJaWYgKGNoZWNrb3V0X2VudHJ5KGNlLCAmc3RhdGUsCisJCSAgICB0b190ZW1wZmlsZSA/IHRvcGF0aFtjZV9zdGFnZShjZSldIDogTlVMTCkgPCAwKQorCQkJZXJycysrOworCX0KKworCWlmIChkaWRfY2hlY2tvdXQpIHsKKwkJaWYgKHRvX3RlbXBmaWxlKQorCQkJd3JpdGVfdGVtcGZpbGVfcmVjb3JkKG5hbWUsIHByZWZpeCk7CisJCXJldHVybiBlcnJzID4gMCA/IC0xIDogMDsKKwl9CisKKwlpZiAoIXN0YXRlLnF1aWV0KSB7CisJCWZwcmludGYoc3RkZXJyLCAiZ2l0IGNoZWNrb3V0LWluZGV4OiAlcyAiLCBuYW1lKTsKKwkJaWYgKCFoYXNfc2FtZV9uYW1lKQorCQkJZnByaW50ZihzdGRlcnIsICJpcyBub3QgaW4gdGhlIGNhY2hlIik7CisJCWVsc2UgaWYgKGNoZWNrb3V0X3N0YWdlKQorCQkJZnByaW50ZihzdGRlcnIsICJkb2VzIG5vdCBleGlzdCBhdCBzdGFnZSAlZCIsCisJCQkJY2hlY2tvdXRfc3RhZ2UpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgImlzIHVubWVyZ2VkIik7CisJCWZwdXRjKCdcbicsIHN0ZGVycik7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tvdXRfYWxsKGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHByZWZpeF9sZW5ndGgpCit7CisJaW50IGksIGVycnMgPSAwOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqbGFzdF9jZSA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yIDsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWlmIChjZV9zdGFnZShjZSkgIT0gY2hlY2tvdXRfc3RhZ2UKKwkJICAgICYmIChDSEVDS09VVF9BTEwgIT0gY2hlY2tvdXRfc3RhZ2UgfHwgIWNlX3N0YWdlKGNlKSkpCisJCQljb250aW51ZTsKKwkJaWYgKHByZWZpeCAmJiAqcHJlZml4ICYmCisJCSAgICAoY2VfbmFtZWxlbihjZSkgPD0gcHJlZml4X2xlbmd0aCB8fAorCQkgICAgIG1lbWNtcChwcmVmaXgsIGNlLT5uYW1lLCBwcmVmaXhfbGVuZ3RoKSkpCisJCQljb250aW51ZTsKKwkJaWYgKGxhc3RfY2UgJiYgdG9fdGVtcGZpbGUpIHsKKwkJCWlmIChjZV9uYW1lbGVuKGxhc3RfY2UpICE9IGNlX25hbWVsZW4oY2UpCisJCQkgICAgfHwgbWVtY21wKGxhc3RfY2UtPm5hbWUsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSkpCisJCQkJd3JpdGVfdGVtcGZpbGVfcmVjb3JkKGxhc3RfY2UtPm5hbWUsIHByZWZpeCk7CisJCX0KKwkJaWYgKGNoZWNrb3V0X2VudHJ5KGNlLCAmc3RhdGUsCisJCSAgICB0b190ZW1wZmlsZSA/IHRvcGF0aFtjZV9zdGFnZShjZSldIDogTlVMTCkgPCAwKQorCQkJZXJycysrOworCQlsYXN0X2NlID0gY2U7CisJfQorCWlmIChsYXN0X2NlICYmIHRvX3RlbXBmaWxlKQorCQl3cml0ZV90ZW1wZmlsZV9yZWNvcmQobGFzdF9jZS0+bmFtZSwgcHJlZml4KTsKKwlpZiAoZXJycykKKwkJLyogd2UgaGF2ZSBhbHJlYWR5IGRvbmUgb3VyIGVycm9yIHJlcG9ydGluZy4KKwkJICogZXhpdCB3aXRoIHRoZSBzYW1lIGNvZGUgYXMgZGllKCkuCisJCSAqLworCQlleGl0KDEyOCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jaGVja291dF9pbmRleF91c2FnZVtdID0geworCU5fKCJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGxvY2tfZmlsZTsKKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfdShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpbnQgKm5ld2ZkID0gb3B0LT52YWx1ZTsKKworCXN0YXRlLnJlZnJlc2hfY2FjaGUgPSAxOworCXN0YXRlLmlzdGF0ZSA9ICZ0aGVfaW5kZXg7CisJaWYgKCpuZXdmZCA8IDApCisJCSpuZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZsb2NrX2ZpbGUsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV96KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KQorCQlsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwllbHNlCisJCWxpbmVfdGVybWluYXRpb24gPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9wcmVmaXgoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0YXRlLmJhc2VfZGlyID0gYXJnOworCXN0YXRlLmJhc2VfZGlyX2xlbiA9IHN0cmxlbihhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9zdGFnZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAoIXN0cmNtcChhcmcsICJhbGwiKSkgeworCQl0b190ZW1wZmlsZSA9IDE7CisJCWNoZWNrb3V0X3N0YWdlID0gQ0hFQ0tPVVRfQUxMOworCX0gZWxzZSB7CisJCWludCBjaCA9IGFyZ1swXTsKKwkJaWYgKCcxJyA8PSBjaCAmJiBjaCA8PSAnMycpCisJCQljaGVja291dF9zdGFnZSA9IGFyZ1swXSAtICcwJzsKKwkJZWxzZQorCQkJZGllKCJzdGFnZSBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCAzIG9yIGFsbCIpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9jaGVja291dF9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlpbnQgbmV3ZmQgPSAtMTsKKwlpbnQgYWxsID0gMDsKKwlpbnQgcmVhZF9mcm9tX3N0ZGluID0gMDsKKwlpbnQgcHJlZml4X2xlbmd0aDsKKwlpbnQgZm9yY2UgPSAwLCBxdWlldCA9IDAsIG5vdF9uZXcgPSAwOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9jaGVja291dF9pbmRleF9vcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdhJywgImFsbCIsICZhbGwsCisJCQlOXygiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIikpLAorCQlPUFRfX1FVSUVUKCZxdWlldCwKKwkJCU5fKCJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IikpLAorCQlPUFRfQk9PTCgnbicsICJuby1jcmVhdGUiLCAmbm90X25ldywKKwkJCU5fKCJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAndScsICJpbmRleCIsICZuZXdmZCwgTlVMTCwKKwkJCU5fKCJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2VfdSB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ3onLCBOVUxMLCBOVUxMLCBOVUxMLAorCQkJTl8oInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIiksCisJCQlQQVJTRV9PUFRfTk9BUkcsIG9wdGlvbl9wYXJzZV96IH0sCisJCU9QVF9CT09MKDAsICJzdGRpbiIsICZyZWFkX2Zyb21fc3RkaW4sCisJCQlOXygicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IikpLAorCQlPUFRfQk9PTCgwLCAidGVtcCIsICZ0b190ZW1wZmlsZSwKKwkJCU5fKCJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiKSksCisJCU9QVF9DQUxMQkFDSygwLCAicHJlZml4IiwgTlVMTCwgTl8oInN0cmluZyIpLAorCQkJTl8oIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iKSwKKwkJCW9wdGlvbl9wYXJzZV9wcmVmaXgpLAorCQlPUFRfQ0FMTEJBQ0soMCwgInN0YWdlIiwgTlVMTCwgTlVMTCwKKwkJCU5fKCJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIpLAorCQkJb3B0aW9uX3BhcnNlX3N0YWdlKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY2hlY2tvdXRfaW5kZXhfdXNhZ2UsCisJCQkJICAgYnVpbHRpbl9jaGVja291dF9pbmRleF9vcHRpb25zKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJc3RhdGUuYmFzZV9kaXIgPSAiIjsKKwlwcmVmaXhfbGVuZ3RoID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApIHsKKwkJZGllKCJpbnZhbGlkIGNhY2hlIik7CisJfQorCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2NoZWNrb3V0X2luZGV4X29wdGlvbnMsCisJCQlidWlsdGluX2NoZWNrb3V0X2luZGV4X3VzYWdlLCAwKTsKKwlzdGF0ZS5mb3JjZSA9IGZvcmNlOworCXN0YXRlLnF1aWV0ID0gcXVpZXQ7CisJc3RhdGUubm90X25ldyA9IG5vdF9uZXc7CisKKwlpZiAoc3RhdGUuYmFzZV9kaXJfbGVuIHx8IHRvX3RlbXBmaWxlKSB7CisJCS8qIHdoZW4gLS1wcmVmaXggaXMgc3BlY2lmaWVkIHdlIGRvIG5vdAorCQkgKiB3YW50IHRvIHVwZGF0ZSBjYWNoZS4KKwkJICovCisJCWlmIChzdGF0ZS5yZWZyZXNoX2NhY2hlKSB7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2tfZmlsZSk7CisJCQluZXdmZCA9IC0xOworCQl9CisJCXN0YXRlLnJlZnJlc2hfY2FjaGUgPSAwOworCX0KKworCS8qIENoZWNrIG91dCBuYW1lZCBmaWxlcyBmaXJzdCAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJY2hhciAqcDsKKworCQlpZiAoYWxsKQorCQkJZGllKCJnaXQgY2hlY2tvdXQtaW5kZXg6IGRvbid0IG1peCAnLS1hbGwnIGFuZCBleHBsaWNpdCBmaWxlbmFtZXMiKTsKKwkJaWYgKHJlYWRfZnJvbV9zdGRpbikKKwkJCWRpZSgiZ2l0IGNoZWNrb3V0LWluZGV4OiBkb24ndCBtaXggJy0tc3RkaW4nIGFuZCBleHBsaWNpdCBmaWxlbmFtZXMiKTsKKwkJcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYXJnKTsKKwkJY2hlY2tvdXRfZmlsZShwLCBwcmVmaXgpOworCQlmcmVlKHApOworCX0KKworCWlmIChyZWFkX2Zyb21fc3RkaW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgbmJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWlmIChhbGwpCisJCQlkaWUoImdpdCBjaGVja291dC1pbmRleDogZG9uJ3QgbWl4ICctLWFsbCcgYW5kICctLXN0ZGluJyIpOworCisJCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzdGRpbiwgbGluZV90ZXJtaW5hdGlvbikgIT0gRU9GKSB7CisJCQljaGFyICpwOworCQkJaWYgKGxpbmVfdGVybWluYXRpb24gJiYgYnVmLmJ1ZlswXSA9PSAnIicpIHsKKwkJCQlzdHJidWZfcmVzZXQoJm5idWYpOworCQkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJm5idWYsIGJ1Zi5idWYsIE5VTEwpKQorCQkJCQlkaWUoImxpbmUgaXMgYmFkbHkgcXVvdGVkIik7CisJCQkJc3RyYnVmX3N3YXAoJmJ1ZiwgJm5idWYpOworCQkJfQorCQkJcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYnVmLmJ1Zik7CisJCQljaGVja291dF9maWxlKHAsIHByZWZpeCk7CisJCQlmcmVlKHApOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJfQorCisJaWYgKGFsbCkKKwkJY2hlY2tvdXRfYWxsKHByZWZpeCwgcHJlZml4X2xlbmd0aCk7CisKKwlpZiAoMCA8PSBuZXdmZCAmJgorCSAgICB3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQorCQlkaWUoIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jaGVja291dC5jIGIvYnVpbHRpbi9jaGVja291dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNzAzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NoZWNrb3V0LmMKQEAgLTAsMCArMSwxMjc0IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNoZWNrb3V0X3VzYWdlW10gPSB7CisJTl8oImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIpLAorCU5fKCJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iKSwKKwlOVUxMLAorfTsKKworc3RydWN0IGNoZWNrb3V0X29wdHMgeworCWludCBwYXRjaF9tb2RlOworCWludCBxdWlldDsKKwlpbnQgbWVyZ2U7CisJaW50IGZvcmNlOworCWludCBmb3JjZV9kZXRhY2g7CisJaW50IHdyaXRlb3V0X3N0YWdlOworCWludCBvdmVyd3JpdGVfaWdub3JlOworCWludCBpZ25vcmVfc2tpcHdvcmt0cmVlOworCWludCBpZ25vcmVfb3RoZXJfd29ya3RyZWVzOworCisJY29uc3QgY2hhciAqbmV3X2JyYW5jaDsKKwljb25zdCBjaGFyICpuZXdfYnJhbmNoX2ZvcmNlOworCWNvbnN0IGNoYXIgKm5ld19vcnBoYW5fYnJhbmNoOworCWludCBuZXdfYnJhbmNoX2xvZzsKKwllbnVtIGJyYW5jaF90cmFjayB0cmFjazsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZfb3B0aW9uczsKKworCWludCBicmFuY2hfZXhpc3RzOworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IHRyZWUgKnNvdXJjZV90cmVlOworfTsKKworc3RhdGljIGludCBwb3N0X2NoZWNrb3V0X2hvb2soc3RydWN0IGNvbW1pdCAqb2xkLCBzdHJ1Y3QgY29tbWl0ICpuZXcsCisJCQkgICAgICBpbnQgY2hhbmdlZCkKK3sKKwlyZXR1cm4gcnVuX2hvb2tfbGUoTlVMTCwgInBvc3QtY2hlY2tvdXQiLAorCQkJICAgc2hhMV90b19oZXgob2xkID8gb2xkLT5vYmplY3Quc2hhMSA6IG51bGxfc2hhMSksCisJCQkgICBzaGExX3RvX2hleChuZXcgPyBuZXctPm9iamVjdC5zaGExIDogbnVsbF9zaGExKSwKKwkJCSAgIGNoYW5nZWQgPyAiMSIgOiAiMCIsIE5VTEwpOworCS8qICJuZXciIGNhbiBiZSBOVUxMIHdoZW4gY2hlY2tpbmcgb3V0IGZyb20gdGhlIGluZGV4IGJlZm9yZQorCSAgIGEgY29tbWl0IGV4aXN0cy4gKi8KKworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9zb21lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCWNvbnN0IGNoYXIgKnBhdGhuYW1lLCB1bnNpZ25lZCBtb2RlLCBpbnQgc3RhZ2UsIHZvaWQgKmNvbnRleHQpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCWludCBwb3M7CisKKwlpZiAoU19JU0RJUihtb2RlKSkKKwkJcmV0dXJuIFJFQURfVFJFRV9SRUNVUlNJVkU7CisKKwlsZW4gPSBiYXNlLT5sZW4gKyBzdHJsZW4ocGF0aG5hbWUpOworCWNlID0geGNhbGxvYygxLCBjYWNoZV9lbnRyeV9zaXplKGxlbikpOworCWhhc2hjcHkoY2UtPnNoYTEsIHNoYTEpOworCW1lbWNweShjZS0+bmFtZSwgYmFzZS0+YnVmLCBiYXNlLT5sZW4pOworCW1lbWNweShjZS0+bmFtZSArIGJhc2UtPmxlbiwgcGF0aG5hbWUsIGxlbiAtIGJhc2UtPmxlbik7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKDApIHwgQ0VfVVBEQVRFOworCWNlLT5jZV9uYW1lbGVuID0gbGVuOworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisKKwkvKgorCSAqIElmIHRoZSBlbnRyeSBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBpbmRleCwgd2UgY2FuIGxlYXZlIHRoZSBvbGQKKwkgKiBlbnRyeSBpbiBwbGFjZS4gV2hldGhlciBpdCBpcyBVUFRPREFURSBvciBub3QsIGNoZWNrb3V0X2VudHJ5IHdpbGwKKwkgKiBkbyB0aGUgcmlnaHQgdGhpbmcuCisJICovCisJcG9zID0gY2FjaGVfbmFtZV9wb3MoY2UtPm5hbWUsIGNlLT5jZV9uYW1lbGVuKTsKKwlpZiAocG9zID49IDApIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKGNlLT5jZV9tb2RlID09IG9sZC0+Y2VfbW9kZSAmJgorCQkgICAgIWhhc2hjbXAoY2UtPnNoYTEsIG9sZC0+c2hhMSkpIHsKKwkJCW9sZC0+Y2VfZmxhZ3MgfD0gQ0VfVVBEQVRFOworCQkJZnJlZShjZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWFkZF9jYWNoZV9lbnRyeShjZSwgQUREX0NBQ0hFX09LX1RPX0FERCB8IEFERF9DQUNIRV9PS19UT19SRVBMQUNFKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX3RyZWVfc29tZShzdHJ1Y3QgdHJlZSAqdHJlZSwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwlyZWFkX3RyZWVfcmVjdXJzaXZlKHRyZWUsICIiLCAwLCAwLCBwYXRoc3BlYywgdXBkYXRlX3NvbWUsIE5VTEwpOworCisJLyogdXBkYXRlIHRoZSBpbmRleCB3aXRoIHRoZSBnaXZlbiB0cmVlJ3MgaW5mbworCSAqIGZvciBhbGwgYXJncywgZXhwYW5kaW5nIHdpbGRjYXJkcywgYW5kIGV4aXQKKwkgKiB3aXRoIGFueSBub24temVybyByZXR1cm4gY29kZS4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBza2lwX3NhbWVfbmFtZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgcG9zKQoreworCXdoaWxlICgrK3BvcyA8IGFjdGl2ZV9uciAmJgorCSAgICAgICAhc3RyY21wKGFjdGl2ZV9jYWNoZVtwb3NdLT5uYW1lLCBjZS0+bmFtZSkpCisJCTsgLyogc2tpcCAqLworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfc3RhZ2UoaW50IHN0YWdlLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgcG9zKQoreworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIgJiYKKwkgICAgICAgIXN0cmNtcChhY3RpdmVfY2FjaGVbcG9zXS0+bmFtZSwgY2UtPm5hbWUpKSB7CisJCWlmIChjZV9zdGFnZShhY3RpdmVfY2FjaGVbcG9zXSkgPT0gc3RhZ2UpCisJCQlyZXR1cm4gMDsKKwkJcG9zKys7CisJfQorCWlmIChzdGFnZSA9PSAyKQorCQlyZXR1cm4gZXJyb3IoXygicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iKSwgY2UtPm5hbWUpOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iKSwgY2UtPm5hbWUpOworfQorCitzdGF0aWMgaW50IGNoZWNrX3N0YWdlcyh1bnNpZ25lZCBzdGFnZXMsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBwb3MpCit7CisJdW5zaWduZWQgc2VlbiA9IDA7CisJY29uc3QgY2hhciAqbmFtZSA9IGNlLT5uYW1lOworCisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgeworCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpZiAoc3RyY21wKG5hbWUsIGNlLT5uYW1lKSkKKwkJCWJyZWFrOworCQlzZWVuIHw9ICgxIDw8IGNlX3N0YWdlKGNlKSk7CisJCXBvcysrOworCX0KKwlpZiAoKHN0YWdlcyAmIHNlZW4pICE9IHN0YWdlcykKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiKSwKKwkJCSAgICAgbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfc3RhZ2UoaW50IHN0YWdlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgcG9zLAorCQkJICBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlKQoreworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIgJiYKKwkgICAgICAgIXN0cmNtcChhY3RpdmVfY2FjaGVbcG9zXS0+bmFtZSwgY2UtPm5hbWUpKSB7CisJCWlmIChjZV9zdGFnZShhY3RpdmVfY2FjaGVbcG9zXSkgPT0gc3RhZ2UpCisJCQlyZXR1cm4gY2hlY2tvdXRfZW50cnkoYWN0aXZlX2NhY2hlW3Bvc10sIHN0YXRlLCBOVUxMKTsKKwkJcG9zKys7CisJfQorCWlmIChzdGFnZSA9PSAyKQorCQlyZXR1cm4gZXJyb3IoXygicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iKSwgY2UtPm5hbWUpOworCWVsc2UKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iKSwgY2UtPm5hbWUpOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X21lcmdlZChpbnQgcG9zLCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwljb25zdCBjaGFyICpwYXRoID0gY2UtPm5hbWU7CisJbW1maWxlX3QgYW5jZXN0b3IsIG91cnMsIHRoZWlyczsKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJbW1idWZmZXJfdCByZXN1bHRfYnVmOworCXVuc2lnbmVkIGNoYXIgdGhyZWV3YXlbM11bMjBdOworCXVuc2lnbmVkIG1vZGUgPSAwOworCisJbWVtc2V0KHRocmVld2F5LCAwLCBzaXplb2YodGhyZWV3YXkpKTsKKwl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7CisJCWludCBzdGFnZTsKKwkJc3RhZ2UgPSBjZV9zdGFnZShjZSk7CisJCWlmICghc3RhZ2UgfHwgc3RyY21wKHBhdGgsIGNlLT5uYW1lKSkKKwkJCWJyZWFrOworCQloYXNoY3B5KHRocmVld2F5W3N0YWdlIC0gMV0sIGNlLT5zaGExKTsKKwkJaWYgKHN0YWdlID09IDIpCisJCQltb2RlID0gY3JlYXRlX2NlX21vZGUoY2UtPmNlX21vZGUpOworCQlwb3MrKzsKKwkJY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwl9CisJaWYgKGlzX251bGxfc2hhMSh0aHJlZXdheVsxXSkgfHwgaXNfbnVsbF9zaGExKHRocmVld2F5WzJdKSkKKwkJcmV0dXJuIGVycm9yKF8oInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIpLCBwYXRoKTsKKworCXJlYWRfbW1ibG9iKCZhbmNlc3RvciwgdGhyZWV3YXlbMF0pOworCXJlYWRfbW1ibG9iKCZvdXJzLCB0aHJlZXdheVsxXSk7CisJcmVhZF9tbWJsb2IoJnRoZWlycywgdGhyZWV3YXlbMl0pOworCisJLyoKKwkgKiBORUVEU1dPUks6IHJlLWNyZWF0ZSBjb25mbGljdHMgZnJvbSBtZXJnZXMgd2l0aAorCSAqIG1lcmdlLnJlbm9ybWFsaXplIHNldCwgdG9vCisJICovCisJc3RhdHVzID0gbGxfbWVyZ2UoJnJlc3VsdF9idWYsIHBhdGgsICZhbmNlc3RvciwgImJhc2UiLAorCQkJICAmb3VycywgIm91cnMiLCAmdGhlaXJzLCAidGhlaXJzIiwgTlVMTCk7CisJZnJlZShhbmNlc3Rvci5wdHIpOworCWZyZWUob3Vycy5wdHIpOworCWZyZWUodGhlaXJzLnB0cik7CisJaWYgKHN0YXR1cyA8IDAgfHwgIXJlc3VsdF9idWYucHRyKSB7CisJCWZyZWUocmVzdWx0X2J1Zi5wdHIpOworCQlyZXR1cm4gZXJyb3IoXygicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiKSwgcGF0aCk7CisJfQorCisJLyoKKwkgKiBORUVEU1dPUks6CisJICogVGhlcmUgaXMgYWJzb2x1dGVseSBubyByZWFzb24gdG8gd3JpdGUgdGhpcyBhcyBhIGJsb2Igb2JqZWN0CisJICogYW5kIGNyZWF0ZSBhIHBob255IGNhY2hlIGVudHJ5IGp1c3QgdG8gbGVhay4gIFRoaXMgaGFjayBpcworCSAqIHByaW1hcmlseSB0byBnZXQgdG8gdGhlIHdyaXRlX2VudHJ5KCkgbWFjaGluZXJ5IHRoYXQgbWFzc2FnZXMKKwkgKiB0aGUgY29udGVudHMgdG8gd29yay10cmVlIGZvcm1hdCBhbmQgd3JpdGVzIG91dCB3aGljaCBvbmx5CisJICogYWxsb3dzIGl0IGZvciBhIGNhY2hlIGVudHJ5LiAgVGhlIGNvZGUgaW4gd3JpdGVfZW50cnkoKSBuZWVkcworCSAqIHRvIGJlIHJlZmFjdG9yZWQgdG8gYWxsb3cgdXMgdG8gZmVlZCBhIDxidWZmZXIsIHNpemUsIG1vZGU+CisJICogaW5zdGVhZCBvZiBhIGNhY2hlIGVudHJ5LiAgU3VjaCBhIHJlZmFjdG9yaW5nIHdvdWxkIGhlbHAKKwkgKiBtZXJnZV9yZWN1cnNpdmUgYXMgd2VsbCAoaXQgYWxzbyB3cml0ZXMgdGhlIG1lcmdlIHJlc3VsdCB0byB0aGUKKwkgKiBvYmplY3QgZGF0YWJhc2UgZXZlbiB3aGVuIGl0IG1heSBjb250YWluIGNvbmZsaWN0cykuCisJICovCisJaWYgKHdyaXRlX3NoYTFfZmlsZShyZXN1bHRfYnVmLnB0ciwgcmVzdWx0X2J1Zi5zaXplLAorCQkJICAgIGJsb2JfdHlwZSwgc2hhMSkpCisJCWRpZShfKCJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIpLCBwYXRoKTsKKwljZSA9IG1ha2VfY2FjaGVfZW50cnkobW9kZSwgc2hhMSwgcGF0aCwgMiwgMCk7CisJaWYgKCFjZSkKKwkJZGllKF8oIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciKSwgcGF0aCk7CisJc3RhdHVzID0gY2hlY2tvdXRfZW50cnkoY2UsIHN0YXRlLCBOVUxMKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGNoZWNrb3V0X3BhdGhzKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJICBjb25zdCBjaGFyICpyZXZpc2lvbikKK3sKKwlpbnQgcG9zOworCXN0cnVjdCBjaGVja291dCBzdGF0ZTsKKwlzdGF0aWMgY2hhciAqcHNfbWF0Y2hlZDsKKwl1bnNpZ25lZCBjaGFyIHJldlsyMF07CisJaW50IGZsYWc7CisJc3RydWN0IGNvbW1pdCAqaGVhZDsKKwlpbnQgZXJycyA9IDA7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9ja19maWxlOworCisJaWYgKG9wdHMtPnRyYWNrICE9IEJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIpLCAiLS10cmFjayIpOworCisJaWYgKG9wdHMtPm5ld19icmFuY2hfbG9nKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIiksICItbCIpOworCisJaWYgKG9wdHMtPmZvcmNlICYmIG9wdHMtPnBhdGNoX21vZGUpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiKSwgIi1mIik7CisKKwlpZiAob3B0cy0+Zm9yY2VfZGV0YWNoKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIiksICItLWRldGFjaCIpOworCisJaWYgKG9wdHMtPm1lcmdlICYmIG9wdHMtPnBhdGNoX21vZGUpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiKSwgIi0tbWVyZ2UiLCAiLS1wYXRjaCIpOworCisJaWYgKG9wdHMtPmZvcmNlICYmIG9wdHMtPm1lcmdlKQorCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIiksICItZiIsICItbSIpOworCisJaWYgKG9wdHMtPm5ld19icmFuY2gpCisJCWRpZShfKCJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iKSwKKwkJICAgIG9wdHMtPm5ld19icmFuY2gpOworCisJaWYgKG9wdHMtPnBhdGNoX21vZGUpCisJCXJldHVybiBydW5fYWRkX2ludGVyYWN0aXZlKHJldmlzaW9uLCAiLS1wYXRjaD1jaGVja291dCIsCisJCQkJCSAgICZvcHRzLT5wYXRoc3BlYyk7CisKKwlsb2NrX2ZpbGUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisKKwlob2xkX2xvY2tlZF9pbmRleChsb2NrX2ZpbGUsIDEpOworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoJm9wdHMtPnBhdGhzcGVjKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJjb3JydXB0IGluZGV4IGZpbGUiKSk7CisKKwlpZiAob3B0cy0+c291cmNlX3RyZWUpCisJCXJlYWRfdHJlZV9zb21lKG9wdHMtPnNvdXJjZV90cmVlLCAmb3B0cy0+cGF0aHNwZWMpOworCisJcHNfbWF0Y2hlZCA9IHhjYWxsb2Mob3B0cy0+cGF0aHNwZWMubnIsIDEpOworCisJLyoKKwkgKiBNYWtlIHN1cmUgYWxsIHBhdGhzcGVjcyBwYXJ0aWNpcGF0ZWQgaW4gbG9jYXRpbmcgdGhlIHBhdGhzCisJICogdG8gYmUgY2hlY2tlZCBvdXQuCisJICovCisJZm9yIChwb3MgPSAwOyBwb3MgPCBhY3RpdmVfbnI7IHBvcysrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJY2UtPmNlX2ZsYWdzICY9IH5DRV9NQVRDSEVEOworCQlpZiAoIW9wdHMtPmlnbm9yZV9za2lwd29ya3RyZWUgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCQljb250aW51ZTsKKwkJaWYgKG9wdHMtPnNvdXJjZV90cmVlICYmICEoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKSkKKwkJCS8qCisJCQkgKiAiZ2l0IGNoZWNrb3V0IHRyZWUtaXNoIC0tIHBhdGgiLCBidXQgdGhpcyBlbnRyeQorCQkJICogaXMgaW4gdGhlIG9yaWdpbmFsIGluZGV4OyBpdCB3aWxsIG5vdCBiZSBjaGVja2VkCisJCQkgKiBvdXQgdG8gdGhlIHdvcmtpbmcgdHJlZSBhbmQgaXQgZG9lcyBub3QgbWF0dGVyCisJCQkgKiBpZiBwYXRoc3BlYyBtYXRjaGVkIHRoaXMgZW50cnkuICBXZSB3aWxsIG5vdCBkbworCQkJICogYW55dGhpbmcgdG8gdGhpcyBlbnRyeSBhdCBhbGwuCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBFaXRoZXIgdGhpcyBlbnRyeSBjYW1lIGZyb20gdGhlIHRyZWUtaXNoIHdlIGFyZQorCQkgKiBjaGVja2luZyB0aGUgcGF0aHMgb3V0IG9mLCBvciB3ZSBhcmUgY2hlY2tpbmcgb3V0CisJCSAqIG9mIHRoZSBpbmRleC4KKwkJICoKKwkJICogSWYgaXQgY29tZXMgZnJvbSB0aGUgdHJlZS1pc2gsIHdlIGFscmVhZHkga25vdyBpdAorCQkgKiBtYXRjaGVzIHRoZSBwYXRoc3BlYyBhbmQgY291bGQganVzdCBzdGFtcAorCQkgKiBDRV9NQVRDSEVEIHRvIGl0IGZyb20gdXBkYXRlX3NvbWUoKS4gQnV0IHdlIHN0aWxsCisJCSAqIG5lZWQgcHNfbWF0Y2hlZCBhbmQgcmVhZF90cmVlX3JlY3Vyc2l2ZSAoYW5kCisJCSAqIGV2ZW50dWFsbHkgdHJlZV9lbnRyeV9pbnRlcmVzdGluZykgY2Fubm90IGZpbGwKKwkJICogcHNfbWF0Y2hlZCB5ZXQuIE9uY2UgaXQgY2FuLCB3ZSBjYW4gYXZvaWQgY2FsbGluZworCQkgKiBtYXRjaF9wYXRoc3BlYygpIGZvciBfYWxsXyBlbnRyaWVzIHdoZW4KKwkJICogb3B0cy0+c291cmNlX3RyZWUgIT0gTlVMTC4KKwkJICovCisJCWlmIChjZV9wYXRoX21hdGNoKGNlLCAmb3B0cy0+cGF0aHNwZWMsIHBzX21hdGNoZWQpKQorCQkJY2UtPmNlX2ZsYWdzIHw9IENFX01BVENIRUQ7CisJfQorCisJaWYgKHJlcG9ydF9wYXRoX2Vycm9yKHBzX21hdGNoZWQsICZvcHRzLT5wYXRoc3BlYywgb3B0cy0+cHJlZml4KSkgeworCQlmcmVlKHBzX21hdGNoZWQpOworCQlyZXR1cm4gMTsKKwl9CisJZnJlZShwc19tYXRjaGVkKTsKKworCS8qICJjaGVja291dCAtbSBwYXRoIiB0byByZWNyZWF0ZSBjb25mbGljdGVkIHN0YXRlICovCisJaWYgKG9wdHMtPm1lcmdlKQorCQl1bm1lcmdlX21hcmtlZF9pbmRleCgmdGhlX2luZGV4KTsKKworCS8qIEFueSB1bm1lcmdlZCBwYXRocz8gKi8KKwlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfTUFUQ0hFRCkgeworCQkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQkJY29udGludWU7CisJCQlpZiAob3B0cy0+Zm9yY2UpIHsKKwkJCQl3YXJuaW5nKF8oInBhdGggJyVzJyBpcyB1bm1lcmdlZCIpLCBjZS0+bmFtZSk7CisJCQl9IGVsc2UgaWYgKG9wdHMtPndyaXRlb3V0X3N0YWdlKSB7CisJCQkJZXJycyB8PSBjaGVja19zdGFnZShvcHRzLT53cml0ZW91dF9zdGFnZSwgY2UsIHBvcyk7CisJCQl9IGVsc2UgaWYgKG9wdHMtPm1lcmdlKSB7CisJCQkJZXJycyB8PSBjaGVja19zdGFnZXMoKDE8PDIpIHwgKDE8PDMpLCBjZSwgcG9zKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJycyA9IDE7CisJCQkJZXJyb3IoXygicGF0aCAnJXMnIGlzIHVubWVyZ2VkIiksIGNlLT5uYW1lKTsKKwkJCX0KKwkJCXBvcyA9IHNraXBfc2FtZV9uYW1lKGNlLCBwb3MpIC0gMTsKKwkJfQorCX0KKwlpZiAoZXJycykKKwkJcmV0dXJuIDE7CisKKwkvKiBOb3cgd2UgYXJlIGNvbW1pdHRlZCB0byBjaGVjayB0aGVtIG91dCAqLworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCXN0YXRlLmZvcmNlID0gMTsKKwlzdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKKwlzdGF0ZS5pc3RhdGUgPSAmdGhlX2luZGV4OworCWZvciAocG9zID0gMDsgcG9zIDwgYWN0aXZlX25yOyBwb3MrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9NQVRDSEVEKSB7CisJCQlpZiAoIWNlX3N0YWdlKGNlKSkgeworCQkJCWVycnMgfD0gY2hlY2tvdXRfZW50cnkoY2UsICZzdGF0ZSwgTlVMTCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAob3B0cy0+d3JpdGVvdXRfc3RhZ2UpCisJCQkJZXJycyB8PSBjaGVja291dF9zdGFnZShvcHRzLT53cml0ZW91dF9zdGFnZSwgY2UsIHBvcywgJnN0YXRlKTsKKwkJCWVsc2UgaWYgKG9wdHMtPm1lcmdlKQorCQkJCWVycnMgfD0gY2hlY2tvdXRfbWVyZ2VkKHBvcywgJnN0YXRlKTsKKwkJCXBvcyA9IHNraXBfc2FtZV9uYW1lKGNlLCBwb3MpIC0gMTsKKwkJfQorCX0KKworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKSk7CisKKwlyZWFkX3JlZl9mdWxsKCJIRUFEIiwgMCwgcmV2LCAmZmxhZyk7CisJaGVhZCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyZXYsIDEpOworCisJZXJycyB8PSBwb3N0X2NoZWNrb3V0X2hvb2soaGVhZCwgaGVhZCwgMCk7CisJcmV0dXJuIGVycnM7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbG9jYWxfY2hhbmdlcyhzdHJ1Y3Qgb2JqZWN0ICpoZWFkLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdHMpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwkvKiBJIHRoaW5rIHdlIHdhbnQgZnVsbCBwYXRocywgZXZlbiBpZiB3ZSdyZSBpbiBhIHN1YmRpcmVjdG9yeS4gKi8KKwlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwlyZXYuZGlmZm9wdC5mbGFncyA9IG9wdHMtPmZsYWdzOworCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfTkFNRV9TVEFUVVM7CisJZGlmZl9zZXR1cF9kb25lKCZyZXYuZGlmZm9wdCk7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXYsIGhlYWQsIE5VTEwpOworCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDApOworfQorCitzdGF0aWMgdm9pZCBkZXNjcmliZV9kZXRhY2hlZF9oZWFkKGNvbnN0IGNoYXIgKm1zZywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpZiAoIXBhcnNlX2NvbW1pdChjb21taXQpKQorCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsICZzYik7CisJZnByaW50ZihzdGRlcnIsICIlcyAlcy4uLiAlc1xuIiwgbXNnLAorCQlmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgREVGQVVMVF9BQkJSRVYpLCBzYi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwgY29uc3Qgc3RydWN0IGNoZWNrb3V0X29wdHMgKm8sCisJCSAgICAgIGludCB3b3JrdHJlZSwgaW50ICp3cml0ZW91dF9lcnJvcikKK3sKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRyZWVfZGVzYzsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gLTE7CisJb3B0cy51cGRhdGUgPSB3b3JrdHJlZTsKKwlvcHRzLnNraXBfdW5tZXJnZWQgPSAhd29ya3RyZWU7CisJb3B0cy5yZXNldCA9IDE7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5mbiA9IG9uZXdheV9tZXJnZTsKKwlvcHRzLnZlcmJvc2VfdXBkYXRlID0gIW8tPnF1aWV0ICYmIGlzYXR0eSgyKTsKKwlvcHRzLnNyY19pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy5kc3RfaW5kZXggPSAmdGhlX2luZGV4OworCXBhcnNlX3RyZWUodHJlZSk7CisJaW5pdF90cmVlX2Rlc2MoJnRyZWVfZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwlzd2l0Y2ggKHVucGFja190cmVlcygxLCAmdHJlZV9kZXNjLCAmb3B0cykpIHsKKwljYXNlIC0yOgorCQkqd3JpdGVvdXRfZXJyb3IgPSAxOworCQkvKgorCQkgKiBXZSByZXR1cm4gMCBuZXZlcnRoZWxlc3MsIGFzIHRoZSBpbmRleCBpcyBhbGwgcmlnaHQKKwkJICogYW5kIG1vcmUgaW1wb3J0YW50bHkgd2UgaGF2ZSBtYWRlIGJlc3QgZWZmb3J0cyB0bworCQkgKiB1cGRhdGUgcGF0aHMgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHdlIGNhbm5vdCByZXZlcnQKKwkJICogdGhlbS4KKwkJICovCisJY2FzZSAwOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTI4OworCX0KK30KKworc3RydWN0IGJyYW5jaF9pbmZvIHsKKwljb25zdCBjaGFyICpuYW1lOyAvKiBUaGUgc2hvcnQgbmFtZSB1c2VkICovCisJY29uc3QgY2hhciAqcGF0aDsgLyogVGhlIGZ1bGwgbmFtZSBvZiBhIHJlYWwgYnJhbmNoICovCisJc3RydWN0IGNvbW1pdCAqY29tbWl0OyAvKiBUaGUgbmFtZWQgY29tbWl0ICovCisJLyoKKwkgKiBpZiBub3QgbnVsbCB0aGUgYnJhbmNoIGlzIGRldGFjaGVkIGJlY2F1c2UgaXQncyBhbHJlYWR5CisJICogY2hlY2tlZCBvdXQgaW4gdGhpcyBjaGVja291dAorCSAqLworCWNoYXIgKmNoZWNrb3V0OworfTsKKworc3RhdGljIHZvaWQgc2V0dXBfYnJhbmNoX3BhdGgoc3RydWN0IGJyYW5jaF9pbmZvICpicmFuY2gpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9icmFuY2huYW1lKCZidWYsIGJyYW5jaC0+bmFtZSk7CisJaWYgKHN0cmNtcChidWYuYnVmLCBicmFuY2gtPm5hbWUpKQorCQlicmFuY2gtPm5hbWUgPSB4c3RyZHVwKGJ1Zi5idWYpOworCXN0cmJ1Zl9zcGxpY2UoJmJ1ZiwgMCwgMCwgInJlZnMvaGVhZHMvIiwgMTEpOworCWJyYW5jaC0+cGF0aCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2Vfd29ya2luZ190cmVlKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJICAgICAgc3RydWN0IGJyYW5jaF9pbmZvICpvbGQsCisJCQkgICAgICBzdHJ1Y3QgYnJhbmNoX2luZm8gKm5ldywKKwkJCSAgICAgIGludCAqd3JpdGVvdXRfZXJyb3IpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisKKwlob2xkX2xvY2tlZF9pbmRleChsb2NrX2ZpbGUsIDEpOworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoTlVMTCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiY29ycnVwdCBpbmRleCBmaWxlIikpOworCisJcmVzb2x2ZV91bmRvX2NsZWFyKCk7CisJaWYgKG9wdHMtPmZvcmNlKSB7CisJCXJldCA9IHJlc2V0X3RyZWUobmV3LT5jb21taXQtPnRyZWUsIG9wdHMsIDEsIHdyaXRlb3V0X2Vycm9yKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfSBlbHNlIHsKKwkJc3RydWN0IHRyZWVfZGVzYyB0cmVlc1syXTsKKwkJc3RydWN0IHRyZWUgKnRyZWU7CisJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyB0b3B0czsKKworCQltZW1zZXQoJnRvcHRzLCAwLCBzaXplb2YodG9wdHMpKTsKKwkJdG9wdHMuaGVhZF9pZHggPSAtMTsKKwkJdG9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwkJdG9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKworCQlzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKCZ0b3B0cywgImNoZWNrb3V0Iik7CisKKwkJcmVmcmVzaF9jYWNoZShSRUZSRVNIX1FVSUVUKTsKKworCQlpZiAodW5tZXJnZWRfY2FjaGUoKSkgeworCQkJZXJyb3IoXygieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qIDItd2F5IG1lcmdlIHRvIHRoZSBuZXcgYnJhbmNoICovCisJCXRvcHRzLmluaXRpYWxfY2hlY2tvdXQgPSBpc19jYWNoZV91bmJvcm4oKTsKKwkJdG9wdHMudXBkYXRlID0gMTsKKwkJdG9wdHMubWVyZ2UgPSAxOworCQl0b3B0cy5nZW50bHkgPSBvcHRzLT5tZXJnZSAmJiBvbGQtPmNvbW1pdDsKKwkJdG9wdHMudmVyYm9zZV91cGRhdGUgPSAhb3B0cy0+cXVpZXQgJiYgaXNhdHR5KDIpOworCQl0b3B0cy5mbiA9IHR3b3dheV9tZXJnZTsKKwkJaWYgKG9wdHMtPm92ZXJ3cml0ZV9pZ25vcmUpIHsKKwkJCXRvcHRzLmRpciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp0b3B0cy5kaXIpKTsKKwkJCXRvcHRzLmRpci0+ZmxhZ3MgfD0gRElSX1NIT1dfSUdOT1JFRDsKKwkJCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKHRvcHRzLmRpcik7CisJCX0KKwkJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3Qob2xkLT5jb21taXQgPworCQkJCQkgICBvbGQtPmNvbW1pdC0+b2JqZWN0LnNoYTEgOgorCQkJCQkgICBFTVBUWV9UUkVFX1NIQTFfQklOKTsKKwkJaW5pdF90cmVlX2Rlc2MoJnRyZWVzWzBdLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCQl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChuZXctPmNvbW1pdC0+b2JqZWN0LnNoYTEpOworCQlpbml0X3RyZWVfZGVzYygmdHJlZXNbMV0sIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisKKwkJcmV0ID0gdW5wYWNrX3RyZWVzKDIsIHRyZWVzLCAmdG9wdHMpOworCQlpZiAocmV0ID09IC0xKSB7CisJCQkvKgorCQkJICogVW5wYWNrIGNvdWxkbid0IGRvIGEgdHJpdmlhbCBtZXJnZTsgZWl0aGVyCisJCQkgKiBnaXZlIHVwIG9yIGRvIGEgcmVhbCBtZXJnZSwgZGVwZW5kaW5nIG9uCisJCQkgKiB3aGV0aGVyIHRoZSBtZXJnZSBmbGFnIHdhcyB1c2VkLgorCQkJICovCisJCQlzdHJ1Y3QgdHJlZSAqcmVzdWx0OworCQkJc3RydWN0IHRyZWUgKndvcms7CisJCQlzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyBvOworCQkJaWYgKCFvcHRzLT5tZXJnZSkKKwkJCQlyZXR1cm4gMTsKKworCQkJLyoKKwkJCSAqIFdpdGhvdXQgb2xkLT5jb21taXQsIHRoZSBiZWxvdyBpcyB0aGUgc2FtZSBhcworCQkJICogdGhlIHR3by10cmVlIHVucGFjayB3ZSBhbHJlYWR5IHRyaWVkIGFuZCBmYWlsZWQuCisJCQkgKi8KKwkJCWlmICghb2xkLT5jb21taXQpCisJCQkJcmV0dXJuIDE7CisKKwkJCS8qIERvIG1vcmUgcmVhbCBtZXJnZSAqLworCisJCQkvKgorCQkJICogV2UgdXBkYXRlIHRoZSBpbmRleCBmdWxseSwgdGhlbiB3cml0ZSB0aGUKKwkJCSAqIHRyZWUgZnJvbSB0aGUgaW5kZXgsIHRoZW4gbWVyZ2UgdGhlIG5ldworCQkJICogYnJhbmNoIHdpdGggdGhlIGN1cnJlbnQgdHJlZSwgd2l0aCB0aGUgb2xkCisJCQkgKiBicmFuY2ggYXMgdGhlIGJhc2UuIFRoZW4gd2UgcmVzZXQgdGhlIGluZGV4CisJCQkgKiAoYnV0IG5vdCB0aGUgd29ya2luZyB0cmVlKSB0byB0aGUgbmV3CisJCQkgKiBicmFuY2gsIGxlYXZpbmcgdGhlIHdvcmtpbmcgdHJlZSBhcyB0aGUKKwkJCSAqIG1lcmdlZCB2ZXJzaW9uLCBidXQgc2tpcHBpbmcgdW5tZXJnZWQKKwkJCSAqIGVudHJpZXMgaW4gdGhlIGluZGV4LgorCQkJICovCisKKwkJCWFkZF9maWxlc190b19jYWNoZShOVUxMLCBOVUxMLCAwKTsKKwkJCS8qCisJCQkgKiBORUVEU1dPUks6IGNhcnJ5aW5nIG92ZXIgbG9jYWwgY2hhbmdlcworCQkJICogd2hlbiBicmFuY2hlcyBoYXZlIGRpZmZlcmVudCBlbmQtb2YtbGluZQorCQkJICogbm9ybWFsaXphdGlvbiAob3IgY2xlYW4rc211ZGdlIHJ1bGVzKSBpcworCQkJICogYSBwYWluOyBwbHVtYiBpbiBhbiBvcHRpb24gdG8gc2V0CisJCQkgKiBvLnJlbm9ybWFsaXplPworCQkJICovCisJCQlpbml0X21lcmdlX29wdGlvbnMoJm8pOworCQkJby52ZXJib3NpdHkgPSAwOworCQkJd29yayA9IHdyaXRlX3RyZWVfZnJvbV9tZW1vcnkoJm8pOworCisJCQlyZXQgPSByZXNldF90cmVlKG5ldy0+Y29tbWl0LT50cmVlLCBvcHRzLCAxLAorCQkJCQkgd3JpdGVvdXRfZXJyb3IpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJby5hbmNlc3RvciA9IG9sZC0+bmFtZTsKKwkJCW8uYnJhbmNoMSA9IG5ldy0+bmFtZTsKKwkJCW8uYnJhbmNoMiA9ICJsb2NhbCI7CisJCQltZXJnZV90cmVlcygmbywgbmV3LT5jb21taXQtPnRyZWUsIHdvcmssCisJCQkJb2xkLT5jb21taXQtPnRyZWUsICZyZXN1bHQpOworCQkJcmV0ID0gcmVzZXRfdHJlZShuZXctPmNvbW1pdC0+dHJlZSwgb3B0cywgMCwKKwkJCQkJIHdyaXRlb3V0X2Vycm9yKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWlmICghYWN0aXZlX2NhY2hlX3RyZWUpCisJCWFjdGl2ZV9jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCisJaWYgKCFjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKGFjdGl2ZV9jYWNoZV90cmVlKSkKKwkJY2FjaGVfdHJlZV91cGRhdGUoJnRoZV9pbmRleCwgV1JJVEVfVFJFRV9TSUxFTlQgfCBXUklURV9UUkVFX1JFUEFJUik7CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsIGxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQorCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCisJaWYgKCFvcHRzLT5mb3JjZSAmJiAhb3B0cy0+cXVpZXQpCisJCXNob3dfbG9jYWxfY2hhbmdlcygmbmV3LT5jb21taXQtPm9iamVjdCwgJm9wdHMtPmRpZmZfb3B0aW9ucyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0X3RyYWNraW5nKHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KG5ldy0+bmFtZSk7CisKKwlpZiAoIWZvcm1hdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJnNiKSkKKwkJcmV0dXJuOworCWZwdXRzKHNiLmJ1Ziwgc3Rkb3V0KTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfcmVmc19mb3Jfc3dpdGNoKGNvbnN0IHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJCSAgIHN0cnVjdCBicmFuY2hfaW5mbyAqb2xkLAorCQkJCSAgIHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3KQoreworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqb2xkX2Rlc2MsICpyZWZsb2dfbXNnOworCWlmIChvcHRzLT5uZXdfYnJhbmNoKSB7CisJCWlmIChvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaCkgeworCQkJaWYgKG9wdHMtPm5ld19icmFuY2hfbG9nICYmICFsb2dfYWxsX3JlZl91cGRhdGVzKSB7CisJCQkJaW50IHJldDsKKwkJCQljaGFyICpyZWZuYW1lOworCQkJCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwkJCQlyZWZuYW1lID0gbWtwYXRoZHVwKCJyZWZzL2hlYWRzLyVzIiwgb3B0cy0+bmV3X29ycGhhbl9icmFuY2gpOworCQkJCXJldCA9IHNhZmVfY3JlYXRlX3JlZmxvZyhyZWZuYW1lLCAxLCAmZXJyKTsKKwkJCQlmcmVlKHJlZm5hbWUpOworCQkJCWlmIChyZXQpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIiksCisJCQkJCQlvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaCwgZXJyLmJ1Zik7CisJCQkJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQkJfQorCQl9CisJCWVsc2UKKwkJCWNyZWF0ZV9icmFuY2gob2xkLT5uYW1lLCBvcHRzLT5uZXdfYnJhbmNoLCBuZXctPm5hbWUsCisJCQkJICAgICAgb3B0cy0+bmV3X2JyYW5jaF9mb3JjZSA/IDEgOiAwLAorCQkJCSAgICAgIG9wdHMtPm5ld19icmFuY2hfbG9nLAorCQkJCSAgICAgIG9wdHMtPm5ld19icmFuY2hfZm9yY2UgPyAxIDogMCwKKwkJCQkgICAgICBvcHRzLT5xdWlldCwKKwkJCQkgICAgICBvcHRzLT50cmFjayk7CisJCW5ldy0+bmFtZSA9IG9wdHMtPm5ld19icmFuY2g7CisJCXNldHVwX2JyYW5jaF9wYXRoKG5ldyk7CisJfQorCisJb2xkX2Rlc2MgPSBvbGQtPm5hbWU7CisJaWYgKCFvbGRfZGVzYyAmJiBvbGQtPmNvbW1pdCkKKwkJb2xkX2Rlc2MgPSBzaGExX3RvX2hleChvbGQtPmNvbW1pdC0+b2JqZWN0LnNoYTEpOworCisJcmVmbG9nX21zZyA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKwlpZiAoIXJlZmxvZ19tc2cpCisJCXN0cmJ1Zl9hZGRmKCZtc2csICJjaGVja291dDogbW92aW5nIGZyb20gJXMgdG8gJXMiLAorCQkJb2xkX2Rlc2MgPyBvbGRfZGVzYyA6ICIoaW52YWxpZCkiLCBuZXctPm5hbWUpOworCWVsc2UKKwkJc3RyYnVmX2luc2VydCgmbXNnLCAwLCByZWZsb2dfbXNnLCBzdHJsZW4ocmVmbG9nX21zZykpOworCisJaWYgKCFzdHJjbXAobmV3LT5uYW1lLCAiSEVBRCIpICYmICFuZXctPnBhdGggJiYgIW9wdHMtPmZvcmNlX2RldGFjaCkgeworCQkvKiBOb3RoaW5nIHRvIGRvLiAqLworCX0gZWxzZSBpZiAob3B0cy0+Zm9yY2VfZGV0YWNoIHx8ICFuZXctPnBhdGgpIHsJLyogTm8gbG9uZ2VyIG9uIGFueSBicmFuY2guICovCisJCXVwZGF0ZV9yZWYobXNnLmJ1ZiwgIkhFQUQiLCBuZXctPmNvbW1pdC0+b2JqZWN0LnNoYTEsIE5VTEwsCisJCQkgICBSRUZfTk9ERVJFRiwgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJCWlmICghb3B0cy0+cXVpZXQpIHsKKwkJCWlmIChvbGQtPnBhdGggJiYgYWR2aWNlX2RldGFjaGVkX2hlYWQpCisJCQkJZGV0YWNoX2FkdmljZShuZXctPm5hbWUpOworCQkJZGVzY3JpYmVfZGV0YWNoZWRfaGVhZChfKCJIRUFEIGlzIG5vdyBhdCIpLCBuZXctPmNvbW1pdCk7CisJCX0KKwl9IGVsc2UgaWYgKG5ldy0+cGF0aCkgewkvKiBTd2l0Y2ggYnJhbmNoZXMuICovCisJCWNyZWF0ZV9zeW1yZWYoIkhFQUQiLCBuZXctPnBhdGgsIG1zZy5idWYpOworCQlpZiAoIW9wdHMtPnF1aWV0KSB7CisJCQlpZiAob2xkLT5wYXRoICYmICFzdHJjbXAobmV3LT5wYXRoLCBvbGQtPnBhdGgpKSB7CisJCQkJaWYgKG9wdHMtPm5ld19icmFuY2hfZm9yY2UpCisJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJSZXNldCBicmFuY2ggJyVzJ1xuIiksCisJCQkJCQluZXctPm5hbWUpOworCQkJCWVsc2UKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIkFscmVhZHkgb24gJyVzJ1xuIiksCisJCQkJCQluZXctPm5hbWUpOworCQkJfSBlbHNlIGlmIChvcHRzLT5uZXdfYnJhbmNoKSB7CisJCQkJaWYgKG9wdHMtPmJyYW5jaF9leGlzdHMpCisJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIpLCBuZXctPm5hbWUpOworCQkJCWVsc2UKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iKSwgbmV3LT5uYW1lKTsKKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iKSwKKwkJCQkJbmV3LT5uYW1lKTsKKwkJCX0KKwkJfQorCQlpZiAob2xkLT5wYXRoICYmIG9sZC0+bmFtZSkgeworCQkJaWYgKCFyZWZfZXhpc3RzKG9sZC0+cGF0aCkgJiYgcmVmbG9nX2V4aXN0cyhvbGQtPnBhdGgpKQorCQkJCWRlbGV0ZV9yZWZsb2cob2xkLT5wYXRoKTsKKwkJfQorCX0KKwlyZW1vdmVfYnJhbmNoX3N0YXRlKCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7CisJaWYgKCFvcHRzLT5xdWlldCAmJgorCSAgICAobmV3LT5wYXRoIHx8ICghb3B0cy0+Zm9yY2VfZGV0YWNoICYmICFzdHJjbXAobmV3LT5uYW1lLCAiSEVBRCIpKSkpCisJCXJlcG9ydF90cmFja2luZyhuZXcpOworfQorCitzdGF0aWMgaW50IGFkZF9wZW5kaW5nX3VuaW50ZXJlc3RpbmdfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJCSBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJCSBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJYWRkX3BlbmRpbmdfc2hhMShjYl9kYXRhLCByZWZuYW1lLCBvaWQtPmhhc2gsIFVOSU5URVJFU1RJTkcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZXNjcmliZV9vbmVfb3JwaGFuKHN0cnVjdCBzdHJidWYgKnNiLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RyYnVmX2FkZHN0cihzYiwgIiAgIik7CisJc3RyYnVmX2FkZHN0cihzYiwKKwkJZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIERFRkFVTFRfQUJCUkVWKSk7CisJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCWlmICghcGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgc2IpOworCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7Cit9CisKKyNkZWZpbmUgT1JQSEFOX0NVVE9GRiA0CitzdGF0aWMgdm9pZCBzdWdnZXN0X3JlYXR0YWNoKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBjb21taXQgKmMsICpsYXN0ID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IGxvc3QgPSAwOworCXdoaWxlICgoYyA9IGdldF9yZXZpc2lvbihyZXZzKSkgIT0gTlVMTCkgeworCQlpZiAobG9zdCA8IE9SUEhBTl9DVVRPRkYpCisJCQlkZXNjcmliZV9vbmVfb3JwaGFuKCZzYiwgYyk7CisJCWxhc3QgPSBjOworCQlsb3N0Kys7CisJfQorCWlmIChPUlBIQU5fQ1VUT0ZGIDwgbG9zdCkgeworCQlpbnQgbW9yZSA9IGxvc3QgLSBPUlBIQU5fQ1VUT0ZGOworCQlpZiAobW9yZSA9PSAxKQorCQkJZGVzY3JpYmVfb25lX29ycGhhbigmc2IsIGxhc3QpOworCQllbHNlCisJCQlzdHJidWZfYWRkZigmc2IsIF8oIiAuLi4gYW5kICVkIG1vcmUuXG4iKSwgbW9yZSk7CisJfQorCisJZnByaW50ZihzdGRlcnIsCisJCVFfKAorCQkvKiBUaGUgc2luZ3VsYXIgdmVyc2lvbiAqLworCQkiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsICIKKwkJIm5vdCBjb25uZWN0ZWQgdG9cbiIKKwkJImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuXG4iCisJCSIlc1xuIiwKKwkJLyogVGhlIHBsdXJhbCB2ZXJzaW9uICovCisJCSJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsICIKKwkJIm5vdCBjb25uZWN0ZWQgdG9cbiIKKwkJImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuXG4iCisJCSIlc1xuIiwKKwkJLyogR2l2ZSBuZ2V0dGV4dCgpIHRoZSBjb3VudCAqLworCQlsb3N0KSwKKwkJbG9zdCwKKwkJc2IuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJaWYgKGFkdmljZV9kZXRhY2hlZF9oZWFkKQorCQlmcHJpbnRmKHN0ZGVyciwKKwkJCVFfKAorCQkJLyogVGhlIHNpbmd1bGFyIHZlcnNpb24gKi8KKwkJCSJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgIgorCQkJInRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG50byBkbyBzbyB3aXRoOlxuXG4iCisJCQkiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcblxuIiwKKwkJCS8qIFRoZSBwbHVyYWwgdmVyc2lvbiAqLworCQkJIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsICIKKwkJCSJ0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxudG8gZG8gc28gd2l0aDpcblxuIgorCQkJIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG5cbiIsCisJCQkvKiBHaXZlIG5nZXR0ZXh0KCkgdGhlIGNvdW50ICovCisJCQlsb3N0KSwKKwkJCWZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLCBERUZBVUxUX0FCQlJFVikpOworfQorCisvKgorICogV2UgYXJlIGFib3V0IHRvIGxlYXZlIGNvbW1pdCB0aGF0IHdhcyBhdCB0aGUgdGlwIG9mIGEgZGV0YWNoZWQKKyAqIEhFQUQuICBJZiBpdCBpcyBub3QgcmVhY2hhYmxlIGZyb20gYW55IHJlZiwgdGhpcyBpcyB0aGUgbGFzdCBjaGFuY2UKKyAqIGZvciB0aGUgdXNlciB0byBkbyBzbyB3aXRob3V0IHJlc29ydGluZyB0byByZWZsb2cuCisgKi8KK3N0YXRpYyB2b2lkIG9ycGhhbmVkX2NvbW1pdF93YXJuaW5nKHN0cnVjdCBjb21taXQgKm9sZCwgc3RydWN0IGNvbW1pdCAqbmV3KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9ICZvbGQtPm9iamVjdDsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IHJlZnM7CisKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXZzLCBOVUxMKTsKKworCW9iamVjdC0+ZmxhZ3MgJj0gflVOSU5URVJFU1RJTkc7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZzLCBvYmplY3QsIHNoYTFfdG9faGV4KG9iamVjdC0+c2hhMSkpOworCisJZm9yX2VhY2hfcmVmKGFkZF9wZW5kaW5nX3VuaW50ZXJlc3RpbmdfcmVmLCAmcmV2cyk7CisJYWRkX3BlbmRpbmdfc2hhMSgmcmV2cywgIkhFQUQiLCBuZXctPm9iamVjdC5zaGExLCBVTklOVEVSRVNUSU5HKTsKKworCXJlZnMgPSByZXZzLnBlbmRpbmc7CisJcmV2cy5sZWFrX3BlbmRpbmcgPSAxOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZShfKCJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIikpOworCWlmICghKG9sZC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCXN1Z2dlc3RfcmVhdHRhY2gob2xkLCAmcmV2cyk7CisJZWxzZQorCQlkZXNjcmliZV9kZXRhY2hlZF9oZWFkKF8oIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIiksIG9sZCk7CisKKwljbGVhcl9jb21taXRfbWFya3NfZm9yX29iamVjdF9hcnJheSgmcmVmcywgQUxMX1JFVl9GTEFHUyk7CisJZnJlZShyZWZzLm9iamVjdHMpOworfQorCitzdGF0aWMgaW50IHN3aXRjaF9icmFuY2hlcyhjb25zdCBzdHJ1Y3QgY2hlY2tvdXRfb3B0cyAqb3B0cywKKwkJCSAgIHN0cnVjdCBicmFuY2hfaW5mbyAqbmV3KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBicmFuY2hfaW5mbyBvbGQ7CisJdm9pZCAqcGF0aF90b19mcmVlOworCXVuc2lnbmVkIGNoYXIgcmV2WzIwXTsKKwlpbnQgZmxhZywgd3JpdGVvdXRfZXJyb3IgPSAwOworCW1lbXNldCgmb2xkLCAwLCBzaXplb2Yob2xkKSk7CisJb2xkLnBhdGggPSBwYXRoX3RvX2ZyZWUgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsIHJldiwgJmZsYWcpOworCW9sZC5jb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkocmV2LCAxKTsKKwlpZiAoIShmbGFnICYgUkVGX0lTU1lNUkVGKSkKKwkJb2xkLnBhdGggPSBOVUxMOworCisJaWYgKG9sZC5wYXRoKQorCQlza2lwX3ByZWZpeChvbGQucGF0aCwgInJlZnMvaGVhZHMvIiwgJm9sZC5uYW1lKTsKKworCWlmICghbmV3LT5uYW1lKSB7CisJCW5ldy0+bmFtZSA9ICJIRUFEIjsKKwkJbmV3LT5jb21taXQgPSBvbGQuY29tbWl0OworCQlpZiAoIW5ldy0+Y29tbWl0KQorCQkJZGllKF8oIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iKSk7CisJCXBhcnNlX2NvbW1pdF9vcl9kaWUobmV3LT5jb21taXQpOworCX0KKworCXJldCA9IG1lcmdlX3dvcmtpbmdfdHJlZShvcHRzLCAmb2xkLCBuZXcsICZ3cml0ZW91dF9lcnJvcik7CisJaWYgKHJldCkgeworCQlmcmVlKHBhdGhfdG9fZnJlZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKCFvcHRzLT5xdWlldCAmJiAhb2xkLnBhdGggJiYgb2xkLmNvbW1pdCAmJiBuZXctPmNvbW1pdCAhPSBvbGQuY29tbWl0KQorCQlvcnBoYW5lZF9jb21taXRfd2FybmluZyhvbGQuY29tbWl0LCBuZXctPmNvbW1pdCk7CisKKwl1cGRhdGVfcmVmc19mb3Jfc3dpdGNoKG9wdHMsICZvbGQsIG5ldyk7CisKKwlyZXQgPSBwb3N0X2NoZWNrb3V0X2hvb2sob2xkLmNvbW1pdCwgbmV3LT5jb21taXQsIDEpOworCWZyZWUocGF0aF90b19mcmVlKTsKKwlyZXR1cm4gcmV0IHx8IHdyaXRlb3V0X2Vycm9yOworfQorCitzdGF0aWMgaW50IGdpdF9jaGVja291dF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5pZ25vcmVzdWJtb2R1bGVzIikpIHsKKwkJc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMgPSBjYjsKKwkJaGFuZGxlX2lnbm9yZV9zdWJtb2R1bGVzX2FyZygmb3B0cy0+ZGlmZl9vcHRpb25zLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdGFydHNfd2l0aCh2YXIsICJzdWJtb2R1bGUuIikpCisJCXJldHVybiBwYXJzZV9zdWJtb2R1bGVfY29uZmlnX29wdGlvbih2YXIsIHZhbHVlKTsKKworCXJldHVybiBnaXRfeG1lcmdlX2NvbmZpZyh2YXIsIHZhbHVlLCBOVUxMKTsKK30KKworc3RydWN0IHRyYWNraW5nX25hbWVfZGF0YSB7CisJLyogY29uc3QgKi8gY2hhciAqc3JjX3JlZjsKKwljaGFyICpkc3RfcmVmOworCXVuc2lnbmVkIGNoYXIgKmRzdF9zaGExOworCWludCB1bmlxdWU7Cit9OworCitzdGF0aWMgaW50IGNoZWNrX3RyYWNraW5nX25hbWUoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCB0cmFja2luZ19uYW1lX2RhdGEgKmNiID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmc3BlYyBxdWVyeTsKKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2Yoc3RydWN0IHJlZnNwZWMpKTsKKwlxdWVyeS5zcmMgPSBjYi0+c3JjX3JlZjsKKwlpZiAocmVtb3RlX2ZpbmRfdHJhY2tpbmcocmVtb3RlLCAmcXVlcnkpIHx8CisJICAgIGdldF9zaGExKHF1ZXJ5LmRzdCwgY2ItPmRzdF9zaGExKSkgeworCQlmcmVlKHF1ZXJ5LmRzdCk7CisJCXJldHVybiAwOworCX0KKwlpZiAoY2ItPmRzdF9yZWYpIHsKKwkJZnJlZShxdWVyeS5kc3QpOworCQljYi0+dW5pcXVlID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWNiLT5kc3RfcmVmID0gcXVlcnkuZHN0OworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdW5pcXVlX3RyYWNraW5nX25hbWUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgdHJhY2tpbmdfbmFtZV9kYXRhIGNiX2RhdGEgPSB7IE5VTEwsIE5VTEwsIE5VTEwsIDEgfTsKKwljaGFyIHNyY19yZWZbUEFUSF9NQVhdOworCXNucHJpbnRmKHNyY19yZWYsIFBBVEhfTUFYLCAicmVmcy9oZWFkcy8lcyIsIG5hbWUpOworCWNiX2RhdGEuc3JjX3JlZiA9IHNyY19yZWY7CisJY2JfZGF0YS5kc3Rfc2hhMSA9IHNoYTE7CisJZm9yX2VhY2hfcmVtb3RlKGNoZWNrX3RyYWNraW5nX25hbWUsICZjYl9kYXRhKTsKKwlpZiAoY2JfZGF0YS51bmlxdWUpCisJCXJldHVybiBjYl9kYXRhLmRzdF9yZWY7CisJZnJlZShjYl9kYXRhLmRzdF9yZWYpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHBhcnNlX2JyYW5jaG5hbWVfYXJnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCQlpbnQgZHdpbV9uZXdfbG9jYWxfYnJhbmNoX29rLAorCQkJCXN0cnVjdCBicmFuY2hfaW5mbyAqbmV3LAorCQkJCXN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJCXVuc2lnbmVkIGNoYXIgcmV2WzIwXSkKK3sKKwlzdHJ1Y3QgdHJlZSAqKnNvdXJjZV90cmVlID0gJm9wdHMtPnNvdXJjZV90cmVlOworCWNvbnN0IGNoYXIgKipuZXdfYnJhbmNoID0gJm9wdHMtPm5ld19icmFuY2g7CisJaW50IGFyZ2NvdW50ID0gMDsKKwl1bnNpZ25lZCBjaGFyIGJyYW5jaF9yZXZbMjBdOworCWNvbnN0IGNoYXIgKmFyZzsKKwlpbnQgZGFzaF9kYXNoX3BvczsKKwlpbnQgaGFzX2Rhc2hfZGFzaCA9IDA7CisJaW50IGk7CisKKwkvKgorCSAqIGNhc2UgMTogZ2l0IGNoZWNrb3V0IDxyZWY+IC0tIFs8cGF0aHM+XQorCSAqCisJICogICA8cmVmPiBtdXN0IGJlIGEgdmFsaWQgdHJlZSwgZXZlcnl0aGluZyBhZnRlciB0aGUgJy0tJyBtdXN0IGJlCisJICogICBhIHBhdGguCisJICoKKwkgKiBjYXNlIDI6IGdpdCBjaGVja291dCAtLSBbPHBhdGhzPl0KKwkgKgorCSAqICAgZXZlcnl0aGluZyBhZnRlciB0aGUgJy0tJyBtdXN0IGJlIHBhdGhzLgorCSAqCisJICogY2FzZSAzOiBnaXQgY2hlY2tvdXQgPHNvbWV0aGluZz4gWy0tXQorCSAqCisJICogICAoYSkgSWYgPHNvbWV0aGluZz4gaXMgYSBjb21taXQsIHRoYXQgaXMgdG8KKwkgKiAgICAgICBzd2l0Y2ggdG8gdGhlIGJyYW5jaCBvciBkZXRhY2ggSEVBRCBhdCBpdC4gIEFzIGEgc3BlY2lhbCBjYXNlLAorCSAqICAgICAgIGlmIDxzb21ldGhpbmc+IGlzIEEuLi5CIChtaXNzaW5nIEEgb3IgQiBtZWFucyBIRUFEIGJ1dCB5b3UgY2FuCisJICogICAgICAgb21pdCBhdCBtb3N0IG9uZSBzaWRlKSwgYW5kIGlmIHRoZXJlIGlzIGEgdW5pcXVlIG1lcmdlIGJhc2UKKwkgKiAgICAgICBiZXR3ZWVuIEEgYW5kIEIsIEEuLi5CIG5hbWVzIHRoYXQgbWVyZ2UgYmFzZS4KKwkgKgorCSAqICAgKGIpIElmIDxzb21ldGhpbmc+IGlzIF9ub3RfIGEgY29tbWl0LCBlaXRoZXIgIi0tIiBpcyBwcmVzZW50CisJICogICAgICAgb3IgPHNvbWV0aGluZz4gaXMgbm90IGEgcGF0aCwgbm8gLXQgb3IgLWIgd2FzIGdpdmVuLCBhbmQKKwkgKiAgICAgICBhbmQgdGhlcmUgaXMgYSB0cmFja2luZyBicmFuY2ggd2hvc2UgbmFtZSBpcyA8c29tZXRoaW5nPgorCSAqICAgICAgIGluIG9uZSBhbmQgb25seSBvbmUgcmVtb3RlLCB0aGVuIHRoaXMgaXMgYSBzaG9ydC1oYW5kIHRvCisJICogICAgICAgZm9yayBsb2NhbCA8c29tZXRoaW5nPiBmcm9tIHRoYXQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaC4KKwkgKgorCSAqICAgKGMpIE90aGVyd2lzZSwgaWYgIi0tIiBpcyBwcmVzZW50LCB0cmVhdCBpdCBsaWtlIGNhc2UgKDEpLgorCSAqCisJICogICAoZCkgT3RoZXJ3aXNlIDoKKwkgKiAgICAgICAtIGlmIGl0J3MgYSByZWZlcmVuY2UsIHRyZWF0IGl0IGxpa2UgY2FzZSAoMSkKKwkgKiAgICAgICAtIGVsc2UgaWYgaXQncyBhIHBhdGgsIHRyZWF0IGl0IGxpa2UgY2FzZSAoMikKKwkgKiAgICAgICAtIGVsc2U6IGZhaWwuCisJICoKKwkgKiBjYXNlIDQ6IGdpdCBjaGVja291dCA8c29tZXRoaW5nPiA8cGF0aHM+CisJICoKKwkgKiAgIFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IG5vdCBiZSBhbWJpZ3VvdXMuCisJICogICAtIElmIGl0J3MgKm9ubHkqIGEgcmVmZXJlbmNlLCB0cmVhdCBpdCBsaWtlIGNhc2UgKDEpLgorCSAqICAgLSBJZiBpdCdzIG9ubHkgYSBwYXRoLCB0cmVhdCBpdCBsaWtlIGNhc2UgKDIpLgorCSAqICAgLSBlbHNlOiBmYWlsLgorCSAqCisJICovCisJaWYgKCFhcmdjKQorCQlyZXR1cm4gMDsKKworCWFyZyA9IGFyZ3ZbMF07CisJZGFzaF9kYXNoX3BvcyA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tIikpIHsKKwkJCWRhc2hfZGFzaF9wb3MgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGRhc2hfZGFzaF9wb3MgPT0gMCkKKwkJcmV0dXJuIDE7IC8qIGNhc2UgKDIpICovCisJZWxzZSBpZiAoZGFzaF9kYXNoX3BvcyA9PSAxKQorCQloYXNfZGFzaF9kYXNoID0gMTsgLyogY2FzZSAoMykgb3IgKDEpICovCisJZWxzZSBpZiAoZGFzaF9kYXNoX3BvcyA+PSAyKQorCQlkaWUoXygib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iKSwgZGFzaF9kYXNoX3Bvcyk7CisKKwlpZiAoIXN0cmNtcChhcmcsICItIikpCisJCWFyZyA9ICJAey0xfSI7CisKKwlpZiAoZ2V0X3NoYTFfbWIoYXJnLCByZXYpKSB7CisJCS8qCisJCSAqIEVpdGhlciBjYXNlICgzKSBvciAoNCksIHdpdGggPHNvbWV0aGluZz4gbm90IGJlaW5nCisJCSAqIGEgY29tbWl0LCBvciBhbiBhdHRlbXB0IHRvIHVzZSBjYXNlICgxKSB3aXRoIGFuCisJCSAqIGludmFsaWQgcmVmLgorCQkgKgorCQkgKiBJdCdzIGxpa2VseSBhbiBlcnJvciwgYnV0IHdlIG5lZWQgdG8gZmluZCBvdXQgaWYKKwkJICogd2Ugc2hvdWxkIGF1dG8tY3JlYXRlIHRoZSBicmFuY2gsIGNhc2UgKDMpLihiKS4KKwkJICovCisJCWludCByZWNvdmVyX3dpdGhfZHdpbSA9IGR3aW1fbmV3X2xvY2FsX2JyYW5jaF9vazsKKworCQlpZiAoY2hlY2tfZmlsZW5hbWUoTlVMTCwgYXJnKSAmJiAhaGFzX2Rhc2hfZGFzaCkKKwkJCXJlY292ZXJfd2l0aF9kd2ltID0gMDsKKwkJLyoKKwkJICogQWNjZXB0ICJnaXQgY2hlY2tvdXQgZm9vIiBhbmQgImdpdCBjaGVja291dCBmb28gLS0iCisJCSAqIGFzIGNhbmRpZGF0ZXMgZm9yIGR3aW0uCisJCSAqLworCQlpZiAoIShhcmdjID09IDEgJiYgIWhhc19kYXNoX2Rhc2gpICYmCisJCSAgICAhKGFyZ2MgPT0gMiAmJiBoYXNfZGFzaF9kYXNoKSkKKwkJCXJlY292ZXJfd2l0aF9kd2ltID0gMDsKKworCQlpZiAocmVjb3Zlcl93aXRoX2R3aW0pIHsKKwkJCWNvbnN0IGNoYXIgKnJlbW90ZSA9IHVuaXF1ZV90cmFja2luZ19uYW1lKGFyZywgcmV2KTsKKwkJCWlmIChyZW1vdGUpIHsKKwkJCQkqbmV3X2JyYW5jaCA9IGFyZzsKKwkJCQlhcmcgPSByZW1vdGU7CisJCQkJLyogRFdJTW1lZCB0byBjcmVhdGUgbG9jYWwgYnJhbmNoLCBjYXNlICgzKS4oYikgKi8KKwkJCX0gZWxzZSB7CisJCQkJcmVjb3Zlcl93aXRoX2R3aW0gPSAwOworCQkJfQorCQl9CisKKwkJaWYgKCFyZWNvdmVyX3dpdGhfZHdpbSkgeworCQkJaWYgKGhhc19kYXNoX2Rhc2gpCisJCQkJZGllKF8oImludmFsaWQgcmVmZXJlbmNlOiAlcyIpLCBhcmcpOworCQkJcmV0dXJuIGFyZ2NvdW50OworCQl9CisJfQorCisJLyogd2UgY2FuJ3QgZW5kIHVwIGJlaW5nIGluICgyKSBhbnltb3JlLCBlYXQgdGhlIGFyZ3VtZW50ICovCisJYXJnY291bnQrKzsKKwlhcmd2Kys7CisJYXJnYy0tOworCisJbmV3LT5uYW1lID0gYXJnOworCXNldHVwX2JyYW5jaF9wYXRoKG5ldyk7CisKKwlpZiAoIWNoZWNrX3JlZm5hbWVfZm9ybWF0KG5ldy0+cGF0aCwgMCkgJiYKKwkgICAgIXJlYWRfcmVmKG5ldy0+cGF0aCwgYnJhbmNoX3JldikpCisJCWhhc2hjcHkocmV2LCBicmFuY2hfcmV2KTsKKwllbHNlCisJCW5ldy0+cGF0aCA9IE5VTEw7IC8qIG5vdCBhbiBleGlzdGluZyBicmFuY2ggKi8KKworCW5ldy0+Y29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHJldiwgMSk7CisJaWYgKCFuZXctPmNvbW1pdCkgeworCQkvKiBub3QgYSBjb21taXQgKi8KKwkJKnNvdXJjZV90cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChyZXYpOworCX0gZWxzZSB7CisJCXBhcnNlX2NvbW1pdF9vcl9kaWUobmV3LT5jb21taXQpOworCQkqc291cmNlX3RyZWUgPSBuZXctPmNvbW1pdC0+dHJlZTsKKwl9CisKKwlpZiAoISpzb3VyY2VfdHJlZSkgICAgICAgICAgICAgICAgICAgLyogY2FzZSAoMSk6IHdhbnQgYSB0cmVlICovCisJCWRpZShfKCJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiKSwgYXJnKTsKKwlpZiAoIWhhc19kYXNoX2Rhc2gpIHsvKiBjYXNlICgzKS4oZCkgLT4gKDEpICovCisJCS8qCisJCSAqIERvIG5vdCBjb21wbGFpbiB0aGUgbW9zdCBjb21tb24gY2FzZQorCQkgKglnaXQgY2hlY2tvdXQgYnJhbmNoCisJCSAqIGV2ZW4gaWYgdGhlcmUgaGFwcGVuIHRvIGJlIGEgZmlsZSBjYWxsZWQgJ2JyYW5jaCc7CisJCSAqIGl0IHdvdWxkIGJlIGV4dHJlbWVseSBhbm5veWluZy4KKwkJICovCisJCWlmIChhcmdjKQorCQkJdmVyaWZ5X25vbl9maWxlbmFtZShOVUxMLCBhcmcpOworCX0gZWxzZSB7CisJCWFyZ2NvdW50Kys7CisJCWFyZ3YrKzsKKwkJYXJnYy0tOworCX0KKworCXJldHVybiBhcmdjb3VudDsKK30KKworc3RhdGljIGludCBzd2l0Y2hfdW5ib3JuX3RvX25ld19icmFuY2goY29uc3Qgc3RydWN0IGNoZWNrb3V0X29wdHMgKm9wdHMpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3Qgc3RyYnVmIGJyYW5jaF9yZWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghb3B0cy0+bmV3X2JyYW5jaCkKKwkJZGllKF8oIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iKSk7CisJc3RyYnVmX2FkZGYoJmJyYW5jaF9yZWYsICJyZWZzL2hlYWRzLyVzIiwgb3B0cy0+bmV3X2JyYW5jaCk7CisJc3RhdHVzID0gY3JlYXRlX3N5bXJlZigiSEVBRCIsIGJyYW5jaF9yZWYuYnVmLCAiY2hlY2tvdXQgLWIiKTsKKwlzdHJidWZfcmVsZWFzZSgmYnJhbmNoX3JlZik7CisJaWYgKCFvcHRzLT5xdWlldCkKKwkJZnByaW50ZihzdGRlcnIsIF8oIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iKSwKKwkJCW9wdHMtPm5ld19icmFuY2gpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tvdXRfYnJhbmNoKHN0cnVjdCBjaGVja291dF9vcHRzICpvcHRzLAorCQkJICAgc3RydWN0IGJyYW5jaF9pbmZvICpuZXcpCit7CisJaWYgKG9wdHMtPnBhdGhzcGVjLm5yKQorCQlkaWUoXygicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiKSk7CisKKwlpZiAob3B0cy0+cGF0Y2hfbW9kZSkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiKSwKKwkJICAgICItLXBhdGNoIik7CisKKwlpZiAob3B0cy0+d3JpdGVvdXRfc3RhZ2UpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIiksCisJCSAgICAiLS1vdXJzLy0tdGhlaXJzIik7CisKKwlpZiAob3B0cy0+Zm9yY2UgJiYgb3B0cy0+bWVyZ2UpCisJCWRpZShfKCInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIpLCAiLWYiLCAiLW0iKTsKKworCWlmIChvcHRzLT5mb3JjZV9kZXRhY2ggJiYgb3B0cy0+bmV3X2JyYW5jaCkKKwkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIiksCisJCSAgICAiLS1kZXRhY2giLCAiLWIvLUIvLS1vcnBoYW4iKTsKKworCWlmIChvcHRzLT5uZXdfb3JwaGFuX2JyYW5jaCkgeworCQlpZiAob3B0cy0+dHJhY2sgIT0gQlJBTkNIX1RSQUNLX1VOU1BFQ0lGSUVEKQorCQkJZGllKF8oIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIiksICItLW9ycGhhbiIsICItdCIpOworCX0gZWxzZSBpZiAob3B0cy0+Zm9yY2VfZGV0YWNoKSB7CisJCWlmIChvcHRzLT50cmFjayAhPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQpCisJCQlkaWUoXygiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciKSwgIi0tZGV0YWNoIiwgIi10Iik7CisJfSBlbHNlIGlmIChvcHRzLT50cmFjayA9PSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQpCisJCW9wdHMtPnRyYWNrID0gZ2l0X2JyYW5jaF90cmFjazsKKworCWlmIChuZXctPm5hbWUgJiYgIW5ldy0+Y29tbWl0KQorCQlkaWUoXygiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciKSwKKwkJICAgIG5ldy0+bmFtZSk7CisKKwlpZiAobmV3LT5wYXRoICYmICFvcHRzLT5mb3JjZV9kZXRhY2ggJiYgIW9wdHMtPm5ld19icmFuY2ggJiYKKwkgICAgIW9wdHMtPmlnbm9yZV9vdGhlcl93b3JrdHJlZXMpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaW50IGZsYWc7CisJCWNoYXIgKmhlYWRfcmVmID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCAwLCBzaGExLCAmZmxhZyk7CisJCWlmIChoZWFkX3JlZiAmJgorCQkgICAgKCEoZmxhZyAmIFJFRl9JU1NZTVJFRikgfHwgc3RyY21wKGhlYWRfcmVmLCBuZXctPnBhdGgpKSkKKwkJCWRpZV9pZl9jaGVja2VkX291dChuZXctPnBhdGgpOworCQlmcmVlKGhlYWRfcmVmKTsKKwl9CisKKwlpZiAoIW5ldy0+Y29tbWl0ICYmIG9wdHMtPm5ld19icmFuY2gpIHsKKwkJdW5zaWduZWQgY2hhciByZXZbMjBdOworCQlpbnQgZmxhZzsKKworCQlpZiAoIXJlYWRfcmVmX2Z1bGwoIkhFQUQiLCAwLCByZXYsICZmbGFnKSAmJgorCQkgICAgKGZsYWcgJiBSRUZfSVNTWU1SRUYpICYmIGlzX251bGxfc2hhMShyZXYpKQorCQkJcmV0dXJuIHN3aXRjaF91bmJvcm5fdG9fbmV3X2JyYW5jaChvcHRzKTsKKwl9CisJcmV0dXJuIHN3aXRjaF9icmFuY2hlcyhvcHRzLCBuZXcpOworfQorCitpbnQgY21kX2NoZWNrb3V0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjaGVja291dF9vcHRzIG9wdHM7CisJc3RydWN0IGJyYW5jaF9pbmZvIG5ldzsKKwljaGFyICpjb25mbGljdF9zdHlsZSA9IE5VTEw7CisJaW50IGR3aW1fbmV3X2xvY2FsX2JyYW5jaCA9IDE7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJm9wdHMucXVpZXQsIE5fKCJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciKSksCisJCU9QVF9TVFJJTkcoJ2InLCBOVUxMLCAmb3B0cy5uZXdfYnJhbmNoLCBOXygiYnJhbmNoIiksCisJCQkgICBOXygiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giKSksCisJCU9QVF9TVFJJTkcoJ0InLCBOVUxMLCAmb3B0cy5uZXdfYnJhbmNoX2ZvcmNlLCBOXygiYnJhbmNoIiksCisJCQkgICBOXygiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIpKSwKKwkJT1BUX0JPT0woJ2wnLCBOVUxMLCAmb3B0cy5uZXdfYnJhbmNoX2xvZywgTl8oImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giKSksCisJCU9QVF9CT09MKDAsICJkZXRhY2giLCAmb3B0cy5mb3JjZV9kZXRhY2gsIE5fKCJkZXRhY2ggdGhlIEhFQUQgYXQgbmFtZWQgY29tbWl0IikpLAorCQlPUFRfU0VUX0lOVCgndCcsICJ0cmFjayIsICAmb3B0cy50cmFjaywgTl8oInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIiksCisJCQlCUkFOQ0hfVFJBQ0tfRVhQTElDSVQpLAorCQlPUFRfU1RSSU5HKDAsICJvcnBoYW4iLCAmb3B0cy5uZXdfb3JwaGFuX2JyYW5jaCwgTl8oIm5ldy1icmFuY2giKSwgTl8oIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIpKSwKKwkJT1BUX1NFVF9JTlQoJzInLCAib3VycyIsICZvcHRzLndyaXRlb3V0X3N0YWdlLCBOXygiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIiksCisJCQkgICAgMiksCisJCU9QVF9TRVRfSU5UKCczJywgInRoZWlycyIsICZvcHRzLndyaXRlb3V0X3N0YWdlLCBOXygiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiKSwKKwkJCSAgICAzKSwKKwkJT1BUX19GT1JDRSgmb3B0cy5mb3JjZSwgTl8oImZvcmNlIGNoZWNrb3V0ICh0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMpIikpLAorCQlPUFRfQk9PTCgnbScsICJtZXJnZSIsICZvcHRzLm1lcmdlLCBOXygicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giKSksCisJCU9QVF9CT09MKDAsICJvdmVyd3JpdGUtaWdub3JlIiwgJm9wdHMub3ZlcndyaXRlX2lnbm9yZSwgTl8oInVwZGF0ZSBpZ25vcmVkIGZpbGVzIChkZWZhdWx0KSIpKSwKKwkJT1BUX1NUUklORygwLCAiY29uZmxpY3QiLCAmY29uZmxpY3Rfc3R5bGUsIE5fKCJzdHlsZSIpLAorCQkJICAgTl8oImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiKSksCisJCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJm9wdHMucGF0Y2hfbW9kZSwgTl8oInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IikpLAorCQlPUFRfQk9PTCgwLCAiaWdub3JlLXNraXAtd29ya3RyZWUtYml0cyIsICZvcHRzLmlnbm9yZV9za2lwd29ya3RyZWUsCisJCQkgTl8oImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIpKSwKKwkJT1BUX0hJRERFTl9CT09MKDAsICJndWVzcyIsICZkd2ltX25ld19sb2NhbF9icmFuY2gsCisJCQkJTl8oInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIikpLAorCQlPUFRfQk9PTCgwLCAiaWdub3JlLW90aGVyLXdvcmt0cmVlcyIsICZvcHRzLmlnbm9yZV9vdGhlcl93b3JrdHJlZXMsCisJCQkgTl8oImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJbWVtc2V0KCZuZXcsIDAsIHNpemVvZihuZXcpKTsKKwlvcHRzLm92ZXJ3cml0ZV9pZ25vcmUgPSAxOworCW9wdHMucHJlZml4ID0gcHJlZml4OworCisJZ2l0bW9kdWxlc19jb25maWcoKTsKKwlnaXRfY29uZmlnKGdpdF9jaGVja291dF9jb25maWcsICZvcHRzKTsKKworCW9wdHMudHJhY2sgPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQ7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGNoZWNrb3V0X3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisKKwlpZiAoY29uZmxpY3Rfc3R5bGUpIHsKKwkJb3B0cy5tZXJnZSA9IDE7IC8qIGltcGxpZWQgKi8KKwkJZ2l0X3htZXJnZV9jb25maWcoIm1lcmdlLmNvbmZsaWN0c3R5bGUiLCBjb25mbGljdF9zdHlsZSwgTlVMTCk7CisJfQorCisJaWYgKCghIW9wdHMubmV3X2JyYW5jaCArICEhb3B0cy5uZXdfYnJhbmNoX2ZvcmNlICsgISFvcHRzLm5ld19vcnBoYW5fYnJhbmNoKSA+IDEpCisJCWRpZShfKCItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSk7CisKKwkvKgorCSAqIEZyb20gaGVyZSBvbiwgbmV3X2JyYW5jaCB3aWxsIGNvbnRhaW4gdGhlIGJyYW5jaCB0byBiZSBjaGVja2VkIG91dCwKKwkgKiBhbmQgbmV3X2JyYW5jaF9mb3JjZSBhbmQgbmV3X29ycGhhbl9icmFuY2ggd2lsbCB0ZWxsIHVzIHdoaWNoIG9uZSBvZgorCSAqIC1iLy1CLy0tb3JwaGFuIGlzIGJlaW5nIHVzZWQuCisJICovCisJaWYgKG9wdHMubmV3X2JyYW5jaF9mb3JjZSkKKwkJb3B0cy5uZXdfYnJhbmNoID0gb3B0cy5uZXdfYnJhbmNoX2ZvcmNlOworCisJaWYgKG9wdHMubmV3X29ycGhhbl9icmFuY2gpCisJCW9wdHMubmV3X2JyYW5jaCA9IG9wdHMubmV3X29ycGhhbl9icmFuY2g7CisKKwkvKiAtLXRyYWNrIHdpdGhvdXQgLWIvLUIvLS1vcnBoYW4gc2hvdWxkIERXSU0gKi8KKwlpZiAob3B0cy50cmFjayAhPSBCUkFOQ0hfVFJBQ0tfVU5TUEVDSUZJRUQgJiYgIW9wdHMubmV3X2JyYW5jaCkgeworCQljb25zdCBjaGFyICphcmd2MCA9IGFyZ3ZbMF07CisJCWlmICghYXJnYyB8fCAhc3RyY21wKGFyZ3YwLCAiLS0iKSkKKwkJCWRpZSAoXygiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIikpOworCQlza2lwX3ByZWZpeChhcmd2MCwgInJlZnMvIiwgJmFyZ3YwKTsKKwkJc2tpcF9wcmVmaXgoYXJndjAsICJyZW1vdGVzLyIsICZhcmd2MCk7CisJCWFyZ3YwID0gc3RyY2hyKGFyZ3YwLCAnLycpOworCQlpZiAoIWFyZ3YwIHx8ICFhcmd2MFsxXSkKKwkJCWRpZSAoXygiTWlzc2luZyBicmFuY2ggbmFtZTsgdHJ5IC1iIikpOworCQlvcHRzLm5ld19icmFuY2ggPSBhcmd2MCArIDE7CisJfQorCisJLyoKKwkgKiBFeHRyYWN0IGJyYW5jaCBuYW1lIGZyb20gY29tbWFuZCBsaW5lIGFyZ3VtZW50cywgc28KKwkgKiBhbGwgdGhhdCBpcyBsZWZ0IGlzIHBhdGhzcGVjcy4KKwkgKgorCSAqIEhhbmRsZQorCSAqCisJICogIDEpIGdpdCBjaGVja291dCA8dHJlZT4gLS0gWzxwYXRocz5dCisJICogIDIpIGdpdCBjaGVja291dCAtLSBbPHBhdGhzPl0KKwkgKiAgMykgZ2l0IGNoZWNrb3V0IDxzb21ldGhpbmc+IFs8cGF0aHM+XQorCSAqCisJICogaW5jbHVkaW5nICJsYXN0IGJyYW5jaCIgc3ludGF4IGFuZCBEV0lNLWVyeSBmb3IgbmFtZXMgb2YKKwkgKiByZW1vdGUgYnJhbmNoZXMsIGVycm9yaW5nIG91dCBmb3IgaW52YWxpZCBvciBhbWJpZ3VvdXMgY2FzZXMuCisJICovCisJaWYgKGFyZ2MpIHsKKwkJdW5zaWduZWQgY2hhciByZXZbMjBdOworCQlpbnQgZHdpbV9vayA9CisJCQkhb3B0cy5wYXRjaF9tb2RlICYmCisJCQlkd2ltX25ld19sb2NhbF9icmFuY2ggJiYKKwkJCW9wdHMudHJhY2sgPT0gQlJBTkNIX1RSQUNLX1VOU1BFQ0lGSUVEICYmCisJCQkhb3B0cy5uZXdfYnJhbmNoOworCQlpbnQgbiA9IHBhcnNlX2JyYW5jaG5hbWVfYXJnKGFyZ2MsIGFyZ3YsIGR3aW1fb2ssCisJCQkJCSAgICAgJm5ldywgJm9wdHMsIHJldik7CisJCWFyZ3YgKz0gbjsKKwkJYXJnYyAtPSBuOworCX0KKworCWlmIChhcmdjKSB7CisJCXBhcnNlX3BhdGhzcGVjKCZvcHRzLnBhdGhzcGVjLCAwLAorCQkJICAgICAgIG9wdHMucGF0Y2hfbW9kZSA/IFBBVEhTUEVDX1BSRUZJWF9PUklHSU4gOiAwLAorCQkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwkJaWYgKCFvcHRzLnBhdGhzcGVjLm5yKQorCQkJZGllKF8oImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIikpOworCisJCS8qCisJCSAqIFRyeSB0byBnaXZlIG1vcmUgaGVscGZ1bCBzdWdnZXN0aW9uLgorCQkgKiBuZXdfYnJhbmNoICYmIGFyZ2MgPiAxIHdpbGwgYmUgY2F1Z2h0IGxhdGVyLgorCQkgKi8KKwkJaWYgKG9wdHMubmV3X2JyYW5jaCAmJiBhcmdjID09IDEpCisJCQlkaWUoXygiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuXG4iCisJCQkgICAgICAiRGlkIHlvdSBpbnRlbmQgdG8gY2hlY2tvdXQgJyVzJyB3aGljaCBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGNvbW1pdD8iKSwKKwkJCSAgICBvcHRzLm5ld19icmFuY2gsIGFyZ3ZbMF0pOworCisJCWlmIChvcHRzLmZvcmNlX2RldGFjaCkKKwkJCWRpZShfKCJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50ICclcyciKSwKKwkJCSAgICBhcmd2WzBdKTsKKworCQlpZiAoMSA8ICEhb3B0cy53cml0ZW91dF9zdGFnZSArICEhb3B0cy5mb3JjZSArICEhb3B0cy5tZXJnZSkKKwkJCWRpZShfKCJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKwkJCSAgICAgICJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIpKTsKKwl9CisKKwlpZiAob3B0cy5uZXdfYnJhbmNoKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJb3B0cy5icmFuY2hfZXhpc3RzID0KKwkJCXZhbGlkYXRlX25ld19icmFuY2huYW1lKG9wdHMubmV3X2JyYW5jaCwgJmJ1ZiwKKwkJCQkJCSEhb3B0cy5uZXdfYnJhbmNoX2ZvcmNlLAorCQkJCQkJISFvcHRzLm5ld19icmFuY2hfZm9yY2UpOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKworCWlmIChvcHRzLnBhdGNoX21vZGUgfHwgb3B0cy5wYXRoc3BlYy5ucikKKwkJcmV0dXJuIGNoZWNrb3V0X3BhdGhzKCZvcHRzLCBuZXcubmFtZSk7CisJZWxzZQorCQlyZXR1cm4gY2hlY2tvdXRfYnJhbmNoKCZvcHRzLCAmbmV3KTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY2xlYW4uYyBiL2J1aWx0aW4vY2xlYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2FjYjk0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jbGVhbi5jCkBAIC0wLDAgKzEsMTAyNCBAQAorLyoKKyAqICJnaXQgY2xlYW4iIGJ1aWx0aW4gY29tbWFuZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBCb2hyZXIKKyAqCisgKiBCYXNlZCBvbiBnaXQtY2xlYW4uc2ggYnkgUGF2ZWwgUm9za2luCisgKi8KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiY29sdW1uLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorCitzdGF0aWMgaW50IGZvcmNlID0gLTE7IC8qIHVuc2V0ICovCitzdGF0aWMgaW50IGludGVyYWN0aXZlOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBkZWxfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworc3RhdGljIHVuc2lnbmVkIGludCBjb2xvcHRzOworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYnVpbHRpbl9jbGVhbl91c2FnZVtdID0geworCU5fKCJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqbXNnX3JlbW92ZSA9IE5fKCJSZW1vdmluZyAlc1xuIik7CitzdGF0aWMgY29uc3QgY2hhciAqbXNnX3dvdWxkX3JlbW92ZSA9IE5fKCJXb3VsZCByZW1vdmUgJXNcbiIpOworc3RhdGljIGNvbnN0IGNoYXIgKm1zZ19za2lwX2dpdF9kaXIgPSBOXygiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIik7CitzdGF0aWMgY29uc3QgY2hhciAqbXNnX3dvdWxkX3NraXBfZ2l0X2RpciA9IE5fKCJXb3VsZCBza2lwIHJlcG9zaXRvcnkgJXNcbiIpOworc3RhdGljIGNvbnN0IGNoYXIgKm1zZ193YXJuX3JlbW92ZV9mYWlsZWQgPSBOXygiZmFpbGVkIHRvIHJlbW92ZSAlcyIpOworCitzdGF0aWMgaW50IGNsZWFuX3VzZV9jb2xvciA9IC0xOworc3RhdGljIGNoYXIgY2xlYW5fY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKKwlHSVRfQ09MT1JfUkVTRVQsCisJR0lUX0NPTE9SX05PUk1BTCwJLyogUExBSU4gKi8KKwlHSVRfQ09MT1JfQk9MRF9CTFVFLAkvKiBQUk9NUFQgKi8KKwlHSVRfQ09MT1JfQk9MRCwJCS8qIEhFQURFUiAqLworCUdJVF9DT0xPUl9CT0xEX1JFRCwJLyogSEVMUCAqLworCUdJVF9DT0xPUl9CT0xEX1JFRCwJLyogRVJST1IgKi8KK307CitlbnVtIGNvbG9yX2NsZWFuIHsKKwlDTEVBTl9DT0xPUl9SRVNFVCA9IDAsCisJQ0xFQU5fQ09MT1JfUExBSU4gPSAxLAorCUNMRUFOX0NPTE9SX1BST01QVCA9IDIsCisJQ0xFQU5fQ09MT1JfSEVBREVSID0gMywKKwlDTEVBTl9DT0xPUl9IRUxQID0gNCwKKwlDTEVBTl9DT0xPUl9FUlJPUiA9IDUKK307CisKKyNkZWZpbmUgTUVOVV9PUFRTX1NJTkdMRVRPTgkJMDEKKyNkZWZpbmUgTUVOVV9PUFRTX0lNTUVESUFURQkJMDIKKyNkZWZpbmUgTUVOVV9PUFRTX0xJU1RfT05MWQkJMDQKKworc3RydWN0IG1lbnVfb3B0cyB7CisJY29uc3QgY2hhciAqaGVhZGVyOworCWNvbnN0IGNoYXIgKnByb21wdDsKKwlpbnQgZmxhZ3M7Cit9OworCisjZGVmaW5lIE1FTlVfUkVUVVJOX05PX0xPT1AJCTEwCisKK3N0cnVjdCBtZW51X2l0ZW0geworCWNoYXIgaG90a2V5OworCWNvbnN0IGNoYXIgKnRpdGxlOworCWludCBzZWxlY3RlZDsKKwlpbnQgKCpmbikodm9pZCk7Cit9OworCitlbnVtIG1lbnVfc3R1ZmZfdHlwZSB7CisJTUVOVV9TVFVGRl9UWVBFX1NUUklOR19MSVNUID0gMSwKKwlNRU5VX1NUVUZGX1RZUEVfTUVOVV9JVEVNCit9OworCitzdHJ1Y3QgbWVudV9zdHVmZiB7CisJZW51bSBtZW51X3N0dWZmX3R5cGUgdHlwZTsKKwlpbnQgbnI7CisJdm9pZCAqc3R1ZmY7Cit9OworCitzdGF0aWMgaW50IHBhcnNlX2NsZWFuX2NvbG9yX3Nsb3QoY29uc3QgY2hhciAqdmFyKQoreworCWlmICghc3RyY2FzZWNtcCh2YXIsICJyZXNldCIpKQorCQlyZXR1cm4gQ0xFQU5fQ09MT1JfUkVTRVQ7CisJaWYgKCFzdHJjYXNlY21wKHZhciwgInBsYWluIikpCisJCXJldHVybiBDTEVBTl9DT0xPUl9QTEFJTjsKKwlpZiAoIXN0cmNhc2VjbXAodmFyLCAicHJvbXB0IikpCisJCXJldHVybiBDTEVBTl9DT0xPUl9QUk9NUFQ7CisJaWYgKCFzdHJjYXNlY21wKHZhciwgImhlYWRlciIpKQorCQlyZXR1cm4gQ0xFQU5fQ09MT1JfSEVBREVSOworCWlmICghc3RyY2FzZWNtcCh2YXIsICJoZWxwIikpCisJCXJldHVybiBDTEVBTl9DT0xPUl9IRUxQOworCWlmICghc3RyY2FzZWNtcCh2YXIsICJlcnJvciIpKQorCQlyZXR1cm4gQ0xFQU5fQ09MT1JfRVJST1I7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdpdF9jbGVhbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqc2xvdF9uYW1lOworCisJaWYgKHN0YXJ0c193aXRoKHZhciwgImNvbHVtbi4iKSkKKwkJcmV0dXJuIGdpdF9jb2x1bW5fY29uZmlnKHZhciwgdmFsdWUsICJjbGVhbiIsICZjb2xvcHRzKTsKKworCS8qIGhvbm9ycyB0aGUgY29sb3IuaW50ZXJhY3RpdmUqIGNvbmZpZyB2YXJpYWJsZXMgd2hpY2ggYWxzbworCSAgIGFwcGxpZWQgaW4gZ2l0LWFkZC0taW50ZXJhY3RpdmUgYW5kIGdpdC1zdGFzaCAqLworCWlmICghc3RyY21wKHZhciwgImNvbG9yLmludGVyYWN0aXZlIikpIHsKKwkJY2xlYW5fdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAiY29sb3IuaW50ZXJhY3RpdmUuIiwgJnNsb3RfbmFtZSkpIHsKKwkJaW50IHNsb3QgPSBwYXJzZV9jbGVhbl9jb2xvcl9zbG90KHNsb3RfbmFtZSk7CisJCWlmIChzbG90IDwgMCkKKwkJCXJldHVybiAwOworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXJldHVybiBjb2xvcl9wYXJzZSh2YWx1ZSwgY2xlYW5fY29sb3JzW3Nsb3RdKTsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjbGVhbi5yZXF1aXJlZm9yY2UiKSkgeworCQlmb3JjZSA9ICFnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCS8qIGluc3BlY3QgdGhlIGNvbG9yLnVpIGNvbmZpZyB2YXJpYWJsZSBhbmQgb3RoZXJzICovCisJcmV0dXJuIGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjbGVhbl9nZXRfY29sb3IoZW51bSBjb2xvcl9jbGVhbiBpeCkKK3sKKwlpZiAod2FudF9jb2xvcihjbGVhbl91c2VfY29sb3IpKQorCQlyZXR1cm4gY2xlYW5fY29sb3JzW2l4XTsKKwlyZXR1cm4gIiI7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFuX3ByaW50X2NvbG9yKGVudW0gY29sb3JfY2xlYW4gaXgpCit7CisJcHJpbnRmKCIlcyIsIGNsZWFuX2dldF9jb2xvcihpeCkpOworfQorCitzdGF0aWMgaW50IGV4Y2x1ZGVfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmV4Y2x1ZGVfbGlzdCA9IG9wdC0+dmFsdWU7CisJc3RyaW5nX2xpc3RfYXBwZW5kKGV4Y2x1ZGVfbGlzdCwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiAxIGlmIHRoZSBnaXZlbiBwYXRoIGlzIHRoZSByb290IG9mIGEgZ2l0IHJlcG9zaXRvcnkgb3IKKyAqIHN1Ym1vZHVsZSBlbHNlIDAuIFdpbGwgbm90IHJldHVybiAxIGZvciBiYXJlIHJlcG9zaXRvcmllcyB3aXRoIHRoZQorICogZXhjZXB0aW9uIG9mIGNyZWF0aW5nIGEgYmFyZSByZXBvc2l0b3J5IGluICJmb28vLmdpdCIgYW5kIGNhbGxpbmcKKyAqIGlzX2dpdF9yZXBvc2l0b3J5KCJmb28iKS4KKyAqLworc3RhdGljIGludCBpc19naXRfcmVwb3NpdG9yeShzdHJ1Y3Qgc3RyYnVmICpwYXRoKQoreworCWludCByZXQgPSAwOworCWludCBnaXRmaWxlX2Vycm9yOworCXNpemVfdCBvcmlnX3BhdGhfbGVuID0gcGF0aC0+bGVuOworCWFzc2VydChvcmlnX3BhdGhfbGVuICE9IDApOworCXN0cmJ1Zl9jb21wbGV0ZShwYXRoLCAnLycpOworCXN0cmJ1Zl9hZGRzdHIocGF0aCwgIi5naXQiKTsKKwlpZiAocmVhZF9naXRmaWxlX2dlbnRseShwYXRoLT5idWYsICZnaXRmaWxlX2Vycm9yKSB8fCBpc19naXRfZGlyZWN0b3J5KHBhdGgtPmJ1ZikpCisJCXJldCA9IDE7CisJaWYgKGdpdGZpbGVfZXJyb3IgPT0gUkVBRF9HSVRGSUxFX0VSUl9PUEVOX0ZBSUxFRCB8fAorCSAgICBnaXRmaWxlX2Vycm9yID09IFJFQURfR0lURklMRV9FUlJfUkVBRF9GQUlMRUQpCisJCXJldCA9IDE7ICAvKiBUaGlzIGNvdWxkIGJlIGEgcmVhbCAuZ2l0IGZpbGUsIHRha2UgdGhlCisJCQkgICAqIHNhZmUgb3B0aW9uIGFuZCBhdm9pZCBjbGVhbmluZyAqLworCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgb3JpZ19wYXRoX2xlbik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZW1vdmVfZGlycyhzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBjb25zdCBjaGFyICpwcmVmaXgsIGludCBmb3JjZV9mbGFnLAorCQlpbnQgZHJ5X3J1biwgaW50IHF1aWV0LCBpbnQgKmRpcl9nb25lKQoreworCURJUiAqZGlyOworCXN0cnVjdCBzdHJidWYgcXVvdGVkID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGRpcmVudCAqZTsKKwlpbnQgcmVzID0gMCwgcmV0ID0gMCwgZ29uZSA9IDEsIG9yaWdpbmFsX2xlbiA9IHBhdGgtPmxlbiwgbGVuOworCXN0cnVjdCBzdHJpbmdfbGlzdCBkZWxzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwkqZGlyX2dvbmUgPSAxOworCisJaWYgKChmb3JjZV9mbGFnICYgUkVNT1ZFX0RJUl9LRUVQX05FU1RFRF9HSVQpICYmIGlzX2dpdF9yZXBvc2l0b3J5KHBhdGgpKSB7CisJCWlmICghcXVpZXQpIHsKKwkJCXF1b3RlX3BhdGhfcmVsYXRpdmUocGF0aC0+YnVmLCBwcmVmaXgsICZxdW90ZWQpOworCQkJcHJpbnRmKGRyeV9ydW4gPyAgXyhtc2dfd291bGRfc2tpcF9naXRfZGlyKSA6IF8obXNnX3NraXBfZ2l0X2RpciksCisJCQkJCXF1b3RlZC5idWYpOworCQl9CisKKwkJKmRpcl9nb25lID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJZGlyID0gb3BlbmRpcihwYXRoLT5idWYpOworCWlmICghZGlyKSB7CisJCS8qIGFuIGVtcHR5IGRpciBjb3VsZCBiZSByZW1vdmVkIGV2ZW4gaWYgaXQgaXMgdW5yZWFkYmxlICovCisJCXJlcyA9IGRyeV9ydW4gPyAwIDogcm1kaXIocGF0aC0+YnVmKTsKKwkJaWYgKHJlcykgeworCQkJcXVvdGVfcGF0aF9yZWxhdGl2ZShwYXRoLT5idWYsIHByZWZpeCwgJnF1b3RlZCk7CisJCQl3YXJuaW5nKF8obXNnX3dhcm5fcmVtb3ZlX2ZhaWxlZCksIHF1b3RlZC5idWYpOworCQkJKmRpcl9nb25lID0gMDsKKwkJfQorCQlyZXR1cm4gcmVzOworCX0KKworCXN0cmJ1Zl9jb21wbGV0ZShwYXRoLCAnLycpOworCisJbGVuID0gcGF0aC0+bGVuOworCXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgbGVuKTsKKwkJc3RyYnVmX2FkZHN0cihwYXRoLCBlLT5kX25hbWUpOworCQlpZiAobHN0YXQocGF0aC0+YnVmLCAmc3QpKQorCQkJOyAvKiBmYWxsIHRocnUgKi8KKwkJZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJaWYgKHJlbW92ZV9kaXJzKHBhdGgsIHByZWZpeCwgZm9yY2VfZmxhZywgZHJ5X3J1biwgcXVpZXQsICZnb25lKSkKKwkJCQlyZXQgPSAxOworCQkJaWYgKGdvbmUpIHsKKwkJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmRlbHMsIHF1b3RlZC5idWYpOworCQkJfSBlbHNlCisJCQkJKmRpcl9nb25lID0gMDsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJcmVzID0gZHJ5X3J1biA/IDAgOiB1bmxpbmsocGF0aC0+YnVmKTsKKwkJCWlmICghcmVzKSB7CisJCQkJcXVvdGVfcGF0aF9yZWxhdGl2ZShwYXRoLT5idWYsIHByZWZpeCwgJnF1b3RlZCk7CisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZkZWxzLCBxdW90ZWQuYnVmKTsKKwkJCX0gZWxzZSB7CisJCQkJcXVvdGVfcGF0aF9yZWxhdGl2ZShwYXRoLT5idWYsIHByZWZpeCwgJnF1b3RlZCk7CisJCQkJd2FybmluZyhfKG1zZ193YXJuX3JlbW92ZV9mYWlsZWQpLCBxdW90ZWQuYnVmKTsKKwkJCQkqZGlyX2dvbmUgPSAwOworCQkJCXJldCA9IDE7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIHBhdGggdG9vIGxvbmcsIHN0YXQgZmFpbHMsIG9yIG5vbi1kaXJlY3Rvcnkgc3RpbGwgZXhpc3RzICovCisJCSpkaXJfZ29uZSA9IDA7CisJCXJldCA9IDE7CisJCWJyZWFrOworCX0KKwljbG9zZWRpcihkaXIpOworCisJc3RyYnVmX3NldGxlbihwYXRoLCBvcmlnaW5hbF9sZW4pOworCisJaWYgKCpkaXJfZ29uZSkgeworCQlyZXMgPSBkcnlfcnVuID8gMCA6IHJtZGlyKHBhdGgtPmJ1Zik7CisJCWlmICghcmVzKQorCQkJKmRpcl9nb25lID0gMTsKKwkJZWxzZSB7CisJCQlxdW90ZV9wYXRoX3JlbGF0aXZlKHBhdGgtPmJ1ZiwgcHJlZml4LCAmcXVvdGVkKTsKKwkJCXdhcm5pbmcoXyhtc2dfd2Fybl9yZW1vdmVfZmFpbGVkKSwgcXVvdGVkLmJ1Zik7CisJCQkqZGlyX2dvbmUgPSAwOworCQkJcmV0ID0gMTsKKwkJfQorCX0KKworCWlmICghKmRpcl9nb25lICYmICFxdWlldCkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IGRlbHMubnI7IGkrKykKKwkJCXByaW50ZihkcnlfcnVuID8gIF8obXNnX3dvdWxkX3JlbW92ZSkgOiBfKG1zZ19yZW1vdmUpLCBkZWxzLml0ZW1zW2ldLnN0cmluZyk7CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZkZWxzLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwcmV0dHlfcHJpbnRfZGVscyh2b2lkKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpxbmFtZTsKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgY29wdHM7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZkZWxfbGlzdCkgeworCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoaXRlbS0+c3RyaW5nLCBOVUxMLCAmYnVmKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZsaXN0LCBxbmFtZSk7CisJfQorCisJLyoKKwkgKiBhbHdheXMgZW5hYmxlIGNvbHVtbiBkaXNwbGF5LCB3ZSBvbmx5IGNvbnN1bHQgY29sdW1uLioKKwkgKiBhYm91dCBsYXlvdXQgc3RyYXRlZ3kgYW5kIHN0dWZmCisJICovCisJY29sb3B0cyA9IChjb2xvcHRzICYgfkNPTF9FTkFCTEVfTUFTSykgfCBDT0xfRU5BQkxFRDsKKwltZW1zZXQoJmNvcHRzLCAwLCBzaXplb2YoY29wdHMpKTsKKwljb3B0cy5pbmRlbnQgPSAiICAiOworCWNvcHRzLnBhZGRpbmcgPSAyOworCXByaW50X2NvbHVtbnMoJmxpc3QsIGNvbG9wdHMsICZjb3B0cyk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDApOworfQorCitzdGF0aWMgdm9pZCBwcmV0dHlfcHJpbnRfbWVudXMoc3RydWN0IHN0cmluZ19saXN0ICptZW51X2xpc3QpCit7CisJdW5zaWduZWQgaW50IGxvY2FsX2NvbG9wdHMgPSAwOworCXN0cnVjdCBjb2x1bW5fb3B0aW9ucyBjb3B0czsKKworCWxvY2FsX2NvbG9wdHMgPSBDT0xfRU5BQkxFRCB8IENPTF9ST1c7CisJbWVtc2V0KCZjb3B0cywgMCwgc2l6ZW9mKGNvcHRzKSk7CisJY29wdHMuaW5kZW50ID0gIiAgIjsKKwljb3B0cy5wYWRkaW5nID0gMjsKKwlwcmludF9jb2x1bW5zKG1lbnVfbGlzdCwgbG9jYWxfY29sb3B0cywgJmNvcHRzKTsKK30KKworc3RhdGljIHZvaWQgcHJvbXB0X2hlbHBfY21kKGludCBzaW5nbGV0b24pCit7CisJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfSEVMUCk7CisJcHJpbnRmX2xuKHNpbmdsZXRvbiA/CisJCSAgXygiUHJvbXB0IGhlbHA6XG4iCisJCSAgICAiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKwkJICAgICJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorCQkgICAgIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nIikgOgorCQkgIF8oIlByb21wdCBoZWxwOlxuIgorCQkgICAgIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorCQkgICAgIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorCQkgICAgIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisJCSAgICAiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKwkJICAgICItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisJCSAgICAiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKwkJICAgICIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nIikpOworCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKTsKK30KKworLyoKKyAqIGRpc3BsYXkgbWVudSBzdHVmZiB3aXRoIG51bWJlciBwcmVmaXggYW5kIGhvdGtleSBoaWdobGlnaHQKKyAqLworc3RhdGljIHZvaWQgcHJpbnRfaGlnaGxpZ2h0X21lbnVfc3R1ZmYoc3RydWN0IG1lbnVfc3R1ZmYgKnN0dWZmLCBpbnQgKipjaG9zZW4pCit7CisJc3RydWN0IHN0cmluZ19saXN0IG1lbnVfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJidWYgbWVudSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBtZW51X2l0ZW0gKm1lbnVfaXRlbTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfaXRlbTsKKwlpbnQgaTsKKworCXN3aXRjaCAoc3R1ZmYtPnR5cGUpIHsKKwlkZWZhdWx0OgorCQlkaWUoIkJhZCB0eXBlIG9mIG1lbnVfc3R1ZmYgd2hlbiBwcmludCBtZW51Iik7CisJY2FzZSBNRU5VX1NUVUZGX1RZUEVfTUVOVV9JVEVNOgorCQltZW51X2l0ZW0gPSAoc3RydWN0IG1lbnVfaXRlbSAqKXN0dWZmLT5zdHVmZjsKKwkJZm9yIChpID0gMDsgaSA8IHN0dWZmLT5ucjsgaSsrLCBtZW51X2l0ZW0rKykgeworCQkJY29uc3QgY2hhciAqcDsKKwkJCWludCBoaWdobGlnaHRlZCA9IDA7CisKKwkJCXAgPSBtZW51X2l0ZW0tPnRpdGxlOworCQkJaWYgKCgqY2hvc2VuKVtpXSA8IDApCisJCQkJKCpjaG9zZW4pW2ldID0gbWVudV9pdGVtLT5zZWxlY3RlZCA/IDEgOiAwOworCQkJc3RyYnVmX2FkZGYoJm1lbnUsICIlcyUyZDogIiwgKCpjaG9zZW4pW2ldID8gIioiIDogIiAiLCBpKzEpOworCQkJZm9yICg7ICpwOyBwKyspIHsKKwkJCQlpZiAoIWhpZ2hsaWdodGVkICYmICpwID09IG1lbnVfaXRlbS0+aG90a2V5KSB7CisJCQkJCXN0cmJ1Zl9hZGRzdHIoJm1lbnUsIGNsZWFuX2dldF9jb2xvcihDTEVBTl9DT0xPUl9QUk9NUFQpKTsKKwkJCQkJc3RyYnVmX2FkZGNoKCZtZW51LCAqcCk7CisJCQkJCXN0cmJ1Zl9hZGRzdHIoJm1lbnUsIGNsZWFuX2dldF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCkpOworCQkJCQloaWdobGlnaHRlZCA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RyYnVmX2FkZGNoKCZtZW51LCAqcCk7CisJCQkJfQorCQkJfQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZtZW51X2xpc3QsIG1lbnUuYnVmKTsKKwkJCXN0cmJ1Zl9yZXNldCgmbWVudSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNRU5VX1NUVUZGX1RZUEVfU1RSSU5HX0xJU1Q6CisJCWkgPSAwOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKHN0cmluZ19saXN0X2l0ZW0sIChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKilzdHVmZi0+c3R1ZmYpIHsKKwkJCWlmICgoKmNob3NlbilbaV0gPCAwKQorCQkJCSgqY2hvc2VuKVtpXSA9IDA7CisJCQlzdHJidWZfYWRkZigmbWVudSwgIiVzJTJkOiAlcyIsCisJCQkJICAgICgqY2hvc2VuKVtpXSA/ICIqIiA6ICIgIiwgaSsxLCBzdHJpbmdfbGlzdF9pdGVtLT5zdHJpbmcpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZtZW51X2xpc3QsIG1lbnUuYnVmKTsKKwkJCXN0cmJ1Zl9yZXNldCgmbWVudSk7CisJCQlpKys7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcHJldHR5X3ByaW50X21lbnVzKCZtZW51X2xpc3QpOworCisJc3RyYnVmX3JlbGVhc2UoJm1lbnUpOworCXN0cmluZ19saXN0X2NsZWFyKCZtZW51X2xpc3QsIDApOworfQorCitzdGF0aWMgaW50IGZpbmRfdW5pcXVlKGNvbnN0IGNoYXIgKmNob2ljZSwgc3RydWN0IG1lbnVfc3R1ZmYgKm1lbnVfc3R1ZmYpCit7CisJc3RydWN0IG1lbnVfaXRlbSAqbWVudV9pdGVtOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9pdGVtOworCWludCBpLCBsZW4sIGZvdW5kID0gMDsKKworCWxlbiA9IHN0cmxlbihjaG9pY2UpOworCXN3aXRjaCAobWVudV9zdHVmZi0+dHlwZSkgeworCWRlZmF1bHQ6CisJCWRpZSgiQmFkIHR5cGUgb2YgbWVudV9zdHVmZiB3aGVuIHBhcnNlIGNob2ljZSIpOworCWNhc2UgTUVOVV9TVFVGRl9UWVBFX01FTlVfSVRFTToKKworCQltZW51X2l0ZW0gPSAoc3RydWN0IG1lbnVfaXRlbSAqKW1lbnVfc3R1ZmYtPnN0dWZmOworCQlmb3IgKGkgPSAwOyBpIDwgbWVudV9zdHVmZi0+bnI7IGkrKywgbWVudV9pdGVtKyspIHsKKwkJCWlmIChsZW4gPT0gMSAmJiAqY2hvaWNlID09IG1lbnVfaXRlbS0+aG90a2V5KSB7CisJCQkJZm91bmQgPSBpICsgMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICghc3RybmNhc2VjbXAoY2hvaWNlLCBtZW51X2l0ZW0tPnRpdGxlLCBsZW4pKSB7CisJCQkJaWYgKGZvdW5kKSB7CisJCQkJCWlmIChsZW4gPT0gMSkgeworCQkJCQkJLyogY29udGludWUgZm9yIGhvdGtleSBtYXRjaGluZyAqLworCQkJCQkJZm91bmQgPSAtMTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWZvdW5kID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJZm91bmQgPSBpICsgMTsKKwkJCQl9CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNRU5VX1NUVUZGX1RZUEVfU1RSSU5HX0xJU1Q6CisJCXN0cmluZ19saXN0X2l0ZW0gPSAoKHN0cnVjdCBzdHJpbmdfbGlzdCAqKW1lbnVfc3R1ZmYtPnN0dWZmKS0+aXRlbXM7CisJCWZvciAoaSA9IDA7IGkgPCBtZW51X3N0dWZmLT5ucjsgaSsrLCBzdHJpbmdfbGlzdF9pdGVtKyspIHsKKwkJCWlmICghc3RybmNhc2VjbXAoY2hvaWNlLCBzdHJpbmdfbGlzdF9pdGVtLT5zdHJpbmcsIGxlbikpIHsKKwkJCQlpZiAoZm91bmQpIHsKKwkJCQkJZm91bmQgPSAwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZm91bmQgPSBpICsgMTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIGZvdW5kOworfQorCisKKy8qCisgKiBQYXJzZSB1c2VyIGlucHV0LCBhbmQgcmV0dXJuIGNob2ljZShzKSBmb3IgbWVudSAobWVudV9zdHVmZikuCisgKgorICogSW5wdXQKKyAqICAgICAoZm9yIHNpbmdsZSBjaG9pY2UpCisgKiAgICAgICAgIDEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtCisgKiAgICAgICAgIGZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiBtZW51IHRpdGxlCisgKiAgICAgICAgICAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nCisgKgorICogICAgIChmb3IgbXVsdGlwbGUgY2hvaWNlKQorICogICAgICAgICAxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW0KKyAqICAgICAgICAgMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zCisgKiAgICAgICAgIDItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzCisgKiAgICAgICAgIGZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiBtZW51IHRpdGxlCisgKiAgICAgICAgIC0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXMKKyAqICAgICAgICAgKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXMKKyAqICAgICAgICAgICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZworICoKKyAqIFRoZSBwYXJzZSByZXN1bHQgd2lsbCBiZSBzYXZlZCBpbiBhcnJheSAqKmNob3NlbiwgYW5kCisgKiByZXR1cm4gbnVtYmVyIG9mIHRvdGFsIHNlbGVjdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfY2hvaWNlKHN0cnVjdCBtZW51X3N0dWZmICptZW51X3N0dWZmLAorCQkJaW50IGlzX3NpbmdsZSwKKwkJCXN0cnVjdCBzdHJidWYgaW5wdXQsCisJCQlpbnQgKipjaG9zZW4pCit7CisJc3RydWN0IHN0cmJ1ZiAqKmNob2ljZV9saXN0LCAqKnB0cjsKKwlpbnQgbnIgPSAwOworCWludCBpOworCisJaWYgKGlzX3NpbmdsZSkgeworCQljaG9pY2VfbGlzdCA9IHN0cmJ1Zl9zcGxpdF9tYXgoJmlucHV0LCAnXG4nLCAwKTsKKwl9IGVsc2UgeworCQljaGFyICpwID0gaW5wdXQuYnVmOworCQlkbyB7CisJCQlpZiAoKnAgPT0gJywnKQorCQkJCSpwID0gJyAnOworCQl9IHdoaWxlICgqcCsrKTsKKwkJY2hvaWNlX2xpc3QgPSBzdHJidWZfc3BsaXRfbWF4KCZpbnB1dCwgJyAnLCAwKTsKKwl9CisKKwlmb3IgKHB0ciA9IGNob2ljZV9saXN0OyAqcHRyOyBwdHIrKykgeworCQljaGFyICpwOworCQlpbnQgY2hvb3NlID0gMTsKKwkJaW50IGJvdHRvbSA9IDAsIHRvcCA9IDA7CisJCWludCBpc19yYW5nZSwgaXNfbnVtYmVyOworCisJCXN0cmJ1Zl90cmltKCpwdHIpOworCQlpZiAoISgqcHRyKS0+bGVuKQorCQkJY29udGludWU7CisKKwkJLyogSW5wdXQgdGhhdCBiZWdpbnMgd2l0aCAnLSc7IHVuY2hvb3NlICovCisJCWlmICgqKCpwdHIpLT5idWYgPT0gJy0nKSB7CisJCQljaG9vc2UgPSAwOworCQkJc3RyYnVmX3JlbW92ZSgoKnB0ciksIDAsIDEpOworCQl9CisKKwkJaXNfcmFuZ2UgPSAwOworCQlpc19udW1iZXIgPSAxOworCQlmb3IgKHAgPSAoKnB0ciktPmJ1ZjsgKnA7IHArKykgeworCQkJaWYgKCctJyA9PSAqcCkgeworCQkJCWlmICghaXNfcmFuZ2UpIHsKKwkJCQkJaXNfcmFuZ2UgPSAxOworCQkJCQlpc19udW1iZXIgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWlzX251bWJlciA9IDA7CisJCQkJCWlzX3JhbmdlID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIGlmICghaXNkaWdpdCgqcCkpIHsKKwkJCQlpc19udW1iZXIgPSAwOworCQkJCWlzX3JhbmdlID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChpc19udW1iZXIpIHsKKwkJCWJvdHRvbSA9IGF0b2koKCpwdHIpLT5idWYpOworCQkJdG9wID0gYm90dG9tOworCQl9IGVsc2UgaWYgKGlzX3JhbmdlKSB7CisJCQlib3R0b20gPSBhdG9pKCgqcHRyKS0+YnVmKTsKKwkJCS8qIGEgcmFuZ2UgY2FuIGJlIHNwZWNpZmllZCBsaWtlIDUtNyBvciA1LSAqLworCQkJaWYgKCEqKHN0cmNocigoKnB0ciktPmJ1ZiwgJy0nKSArIDEpKQorCQkJCXRvcCA9IG1lbnVfc3R1ZmYtPm5yOworCQkJZWxzZQorCQkJCXRvcCA9IGF0b2koc3RyY2hyKCgqcHRyKS0+YnVmLCAnLScpICsgMSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCgoKnB0ciktPmJ1ZiwgIioiKSkgeworCQkJYm90dG9tID0gMTsKKwkJCXRvcCA9IG1lbnVfc3R1ZmYtPm5yOworCQl9IGVsc2UgeworCQkJYm90dG9tID0gZmluZF91bmlxdWUoKCpwdHIpLT5idWYsIG1lbnVfc3R1ZmYpOworCQkJdG9wID0gYm90dG9tOworCQl9CisKKwkJaWYgKHRvcCA8PSAwIHx8IGJvdHRvbSA8PSAwIHx8IHRvcCA+IG1lbnVfc3R1ZmYtPm5yIHx8IGJvdHRvbSA+IHRvcCB8fAorCQkgICAgKGlzX3NpbmdsZSAmJiBib3R0b20gIT0gdG9wKSkgeworCQkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfRVJST1IpOworCQkJcHJpbnRmX2xuKF8oIkh1aCAoJXMpPyIpLCAoKnB0ciktPmJ1Zik7CisJCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaSA9IGJvdHRvbTsgaSA8PSB0b3A7IGkrKykKKwkJCSgqY2hvc2VuKVtpLTFdID0gY2hvb3NlOworCX0KKworCXN0cmJ1Zl9saXN0X2ZyZWUoY2hvaWNlX2xpc3QpOworCisJZm9yIChpID0gMDsgaSA8IG1lbnVfc3R1ZmYtPm5yOyBpKyspCisJCW5yICs9ICgqY2hvc2VuKVtpXTsKKwlyZXR1cm4gbnI7Cit9CisKKy8qCisgKiBJbXBsZW1lbnQgYSBnaXQtYWRkLWludGVyYWN0aXZlIGNvbXBhdGlibGUgVUksIHdoaWNoIGlzIGJvcnJvd2VkCisgKiBmcm9tIGdpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwuCisgKgorICogUmV0dXJuIHZhbHVlOgorICoKKyAqICAgLSBSZXR1cm4gYW4gYXJyYXkgb2YgaW50ZWdlcnMKKyAqICAgLSAsIGFuZCBpdCBpcyB1cCB0byB5b3UgdG8gZnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeS4KKyAqICAgLSBUaGUgYXJyYXkgZW5kcyB3aXRoIEVPRi4KKyAqICAgLSBJZiB1c2VyIHByZXNzZWQgQ1RSTC1EIChpLmUuIEVPRiksIG5vIHNlbGVjdGlvbiByZXR1cm5lZC4KKyAqLworc3RhdGljIGludCAqbGlzdF9hbmRfY2hvb3NlKHN0cnVjdCBtZW51X29wdHMgKm9wdHMsIHN0cnVjdCBtZW51X3N0dWZmICpzdHVmZikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGNob2ljZSA9IFNUUkJVRl9JTklUOworCWludCAqY2hvc2VuLCAqcmVzdWx0OworCWludCBuciA9IDA7CisJaW50IGVvZiA9IDA7CisJaW50IGk7CisKKwljaG9zZW4gPSB4bWFsbG9jKHNpemVvZihpbnQpICogc3R1ZmYtPm5yKTsKKwkvKiBzZXQgY2hvc2VuIGFzIHVuaW5pdGlhbGl6ZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3R1ZmYtPm5yOyBpKyspCisJCWNob3NlbltpXSA9IC0xOworCisJZm9yICg7OykgeworCQlpZiAob3B0cy0+aGVhZGVyKSB7CisJCQlwcmludGZfbG4oIiVzJXMlcyIsCisJCQkJICBjbGVhbl9nZXRfY29sb3IoQ0xFQU5fQ09MT1JfSEVBREVSKSwKKwkJCQkgIF8ob3B0cy0+aGVhZGVyKSwKKwkJCQkgIGNsZWFuX2dldF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCkpOworCQl9CisKKwkJLyogY2hvc2VuIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgcHJpbnRfaGlnaGxpZ2h0X21lbnVfc3R1ZmYgKi8KKwkJcHJpbnRfaGlnaGxpZ2h0X21lbnVfc3R1ZmYoc3R1ZmYsICZjaG9zZW4pOworCisJCWlmIChvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19MSVNUX09OTFkpCisJCQlicmVhazsKKworCQlpZiAob3B0cy0+cHJvbXB0KSB7CisJCQlwcmludGYoIiVzJXMlcyVzIiwKKwkJCSAgICAgICBjbGVhbl9nZXRfY29sb3IoQ0xFQU5fQ09MT1JfUFJPTVBUKSwKKwkJCSAgICAgICBfKG9wdHMtPnByb21wdCksCisJCQkgICAgICAgb3B0cy0+ZmxhZ3MgJiBNRU5VX09QVFNfU0lOR0xFVE9OID8gIj4gIiA6ICI+PiAiLAorCQkJICAgICAgIGNsZWFuX2dldF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCkpOworCQl9CisKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZjaG9pY2UsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJCXN0cmJ1Zl90cmltKCZjaG9pY2UpOworCQl9IGVsc2UgeworCQkJZW9mID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogaGVscCBmb3IgcHJvbXB0ICovCisJCWlmICghc3RyY21wKGNob2ljZS5idWYsICI/IikpIHsKKwkJCXByb21wdF9oZWxwX2NtZChvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19TSU5HTEVUT04pOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBmb3IgYSBtdWx0aXBsZS1jaG9pY2UgbWVudSwgcHJlc3MgRU5URVIgKGVtcHR5KSB3aWxsIHJldHVybiBiYWNrICovCisJCWlmICghKG9wdHMtPmZsYWdzICYgTUVOVV9PUFRTX1NJTkdMRVRPTikgJiYgIWNob2ljZS5sZW4pCisJCQlicmVhazsKKworCQluciA9IHBhcnNlX2Nob2ljZShzdHVmZiwKKwkJCQkgIG9wdHMtPmZsYWdzICYgTUVOVV9PUFRTX1NJTkdMRVRPTiwKKwkJCQkgIGNob2ljZSwKKwkJCQkgICZjaG9zZW4pOworCisJCWlmIChvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19TSU5HTEVUT04pIHsKKwkJCWlmIChucikKKwkJCQlicmVhazsKKwkJfSBlbHNlIGlmIChvcHRzLT5mbGFncyAmIE1FTlVfT1BUU19JTU1FRElBVEUpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGVvZikgeworCQlyZXN1bHQgPSB4bWFsbG9jKHNpemVvZihpbnQpKTsKKwkJKnJlc3VsdCA9IEVPRjsKKwl9IGVsc2UgeworCQlpbnQgaiA9IDA7CisKKwkJLyoKKwkJICogcmVjYWxjdWxhdGUgbnIsIGlmIHJldHVybiBiYWNrIGZyb20gbWVudSBkaXJlY3RseSB3aXRoCisJCSAqIGRlZmF1bHQgc2VsZWN0aW9ucy4KKwkJICovCisJCWlmICghbnIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBzdHVmZi0+bnI7IGkrKykKKwkJCQluciArPSBjaG9zZW5baV07CisJCX0KKworCQlyZXN1bHQgPSB4Y2FsbG9jKG5yICsgMSwgc2l6ZW9mKGludCkpOworCQlmb3IgKGkgPSAwOyBpIDwgc3R1ZmYtPm5yICYmIGogPCBucjsgaSsrKSB7CisJCQlpZiAoY2hvc2VuW2ldKQorCQkJCXJlc3VsdFtqKytdID0gaTsKKwkJfQorCQlyZXN1bHRbal0gPSBFT0Y7CisJfQorCisJZnJlZShjaG9zZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZjaG9pY2UpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgY2xlYW5fY21kKHZvaWQpCit7CisJcmV0dXJuIE1FTlVfUkVUVVJOX05PX0xPT1A7Cit9CisKK3N0YXRpYyBpbnQgZmlsdGVyX2J5X3BhdHRlcm5zX2NtZCh2b2lkKQoreworCXN0cnVjdCBkaXJfc3RydWN0IGRpcjsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbmZpcm0gPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmICoqaWdub3JlX2xpc3Q7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWw7CisJaW50IGNoYW5nZWQgPSAtMSwgaTsKKworCWZvciAoOzspIHsKKwkJaWYgKCFkZWxfbGlzdC5ucikKKwkJCWJyZWFrOworCisJCWlmIChjaGFuZ2VkKQorCQkJcHJldHR5X3ByaW50X2RlbHMoKTsKKworCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9QUk9NUFQpOworCQlwcmludGYoXygiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIikpOworCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCk7CisJCWlmIChzdHJidWZfZ2V0bGluZSgmY29uZmlybSwgc3RkaW4sICdcbicpICE9IEVPRikKKwkJCXN0cmJ1Zl90cmltKCZjb25maXJtKTsKKwkJZWxzZQorCQkJcHV0Y2hhcignXG4nKTsKKworCQkvKiBxdWl0IGZpbHRlcl9ieV9wYXR0ZXJuIG1vZGUgaWYgcHJlc3MgRU5URVIgb3IgQ3RybC1EICovCisJCWlmICghY29uZmlybS5sZW4pCisJCQlicmVhazsKKworCQltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCQllbCA9IGFkZF9leGNsdWRlX2xpc3QoJmRpciwgRVhDX0NNREwsICJtYW51YWwgZXhjbHVkZSIpOworCQlpZ25vcmVfbGlzdCA9IHN0cmJ1Zl9zcGxpdF9tYXgoJmNvbmZpcm0sICcgJywgMCk7CisKKwkJZm9yIChpID0gMDsgaWdub3JlX2xpc3RbaV07IGkrKykgeworCQkJc3RyYnVmX3RyaW0oaWdub3JlX2xpc3RbaV0pOworCQkJaWYgKCFpZ25vcmVfbGlzdFtpXS0+bGVuKQorCQkJCWNvbnRpbnVlOworCisJCQlhZGRfZXhjbHVkZShpZ25vcmVfbGlzdFtpXS0+YnVmLCAiIiwgMCwgZWwsIC0oaSsxKSk7CisJCX0KKworCQljaGFuZ2VkID0gMDsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGVsX2xpc3QpIHsKKwkJCWludCBkdHlwZSA9IERUX1VOS05PV047CisKKwkJCWlmIChpc19leGNsdWRlZCgmZGlyLCBpdGVtLT5zdHJpbmcsICZkdHlwZSkpIHsKKwkJCQkqaXRlbS0+c3RyaW5nID0gJ1wwJzsKKwkJCQljaGFuZ2VkKys7CisJCQl9CisJCX0KKworCQlpZiAoY2hhbmdlZCkgeworCQkJc3RyaW5nX2xpc3RfcmVtb3ZlX2VtcHR5X2l0ZW1zKCZkZWxfbGlzdCwgMCk7CisJCX0gZWxzZSB7CisJCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9FUlJPUik7CisJCQlwcmludGZfbG4oXygiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiKSwgY29uZmlybS5idWYpOworCQkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfUkVTRVQpOworCQl9CisKKwkJc3RyYnVmX2xpc3RfZnJlZShpZ25vcmVfbGlzdCk7CisJCWNsZWFyX2RpcmVjdG9yeSgmZGlyKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmY29uZmlybSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2VsZWN0X2J5X251bWJlcnNfY21kKHZvaWQpCit7CisJc3RydWN0IG1lbnVfb3B0cyBtZW51X29wdHM7CisJc3RydWN0IG1lbnVfc3R1ZmYgbWVudV9zdHVmZjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbXM7CisJaW50ICpjaG9zZW47CisJaW50IGksIGo7CisKKwltZW51X29wdHMuaGVhZGVyID0gTlVMTDsKKwltZW51X29wdHMucHJvbXB0ID0gTl8oIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiKTsKKwltZW51X29wdHMuZmxhZ3MgPSAwOworCisJbWVudV9zdHVmZi50eXBlID0gTUVOVV9TVFVGRl9UWVBFX1NUUklOR19MSVNUOworCW1lbnVfc3R1ZmYuc3R1ZmYgPSAmZGVsX2xpc3Q7CisJbWVudV9zdHVmZi5uciA9IGRlbF9saXN0Lm5yOworCisJY2hvc2VuID0gbGlzdF9hbmRfY2hvb3NlKCZtZW51X29wdHMsICZtZW51X3N0dWZmKTsKKwlpdGVtcyA9IGRlbF9saXN0Lml0ZW1zOworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgZGVsX2xpc3QubnI7IGkrKykgeworCQlpZiAoaSA8IGNob3NlbltqXSkgeworCQkJKihpdGVtc1tpXS5zdHJpbmcpID0gJ1wwJzsKKwkJfSBlbHNlIGlmIChpID09IGNob3NlbltqXSkgeworCQkJLyogZGVsZXRlIHNlbGVjdGVkIGl0ZW0gKi8KKwkJCWorKzsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJLyogZW5kIG9mIGNob3NlbiAoY2hvc2VuW2pdID09IEVPRiksIHdvbid0IGRlbGV0ZSAqLworCQkJKihpdGVtc1tpXS5zdHJpbmcpID0gJ1wwJzsKKwkJfQorCX0KKworCXN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcygmZGVsX2xpc3QsIDApOworCisJZnJlZShjaG9zZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFza19lYWNoX2NtZCh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgY29uZmlybSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJY29uc3QgY2hhciAqcW5hbWU7CisJaW50IGNoYW5nZWQgPSAwLCBlb2YgPSAwOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmZGVsX2xpc3QpIHsKKwkJLyogQ3RybC1EIHNob3VsZCBzdG9wIHJlbW92aW5nIGZpbGVzICovCisJCWlmICghZW9mKSB7CisJCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoaXRlbS0+c3RyaW5nLCBOVUxMLCAmYnVmKTsKKwkJCS8qIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcyAqLworCQkJcHJpbnRmKF8oIlJlbW92ZSAlcyBbeS9OXT8gIiksIHFuYW1lKTsKKwkJCWlmIChzdHJidWZfZ2V0bGluZSgmY29uZmlybSwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQkJCXN0cmJ1Zl90cmltKCZjb25maXJtKTsKKwkJCX0gZWxzZSB7CisJCQkJcHV0Y2hhcignXG4nKTsKKwkJCQllb2YgPSAxOworCQkJfQorCQl9CisJCWlmICghY29uZmlybS5sZW4gfHwgc3RybmNhc2VjbXAoY29uZmlybS5idWYsICJ5ZXMiLCBjb25maXJtLmxlbikpIHsKKwkJCSppdGVtLT5zdHJpbmcgPSAnXDAnOworCQkJY2hhbmdlZCsrOworCQl9CisJfQorCisJaWYgKGNoYW5nZWQpCisJCXN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcygmZGVsX2xpc3QsIDApOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmNvbmZpcm0pOworCXJldHVybiBNRU5VX1JFVFVSTl9OT19MT09QOworfQorCitzdGF0aWMgaW50IHF1aXRfY21kKHZvaWQpCit7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmRlbF9saXN0LCAwKTsKKwlwcmludGZfbG4oXygiQnllLiIpKTsKKwlyZXR1cm4gTUVOVV9SRVRVUk5fTk9fTE9PUDsKK30KKworc3RhdGljIGludCBoZWxwX2NtZCh2b2lkKQoreworCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX0hFTFApOworCXByaW50Zl9sbihfKAorCQkgICAgImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorCQkgICAgImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKwkJICAgICJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorCQkgICAgImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorCQkgICAgInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisJCSAgICAiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisJCSAgICAiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCisJCSAgICkpOworCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX1JFU0VUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW50ZXJhY3RpdmVfbWFpbl9sb29wKHZvaWQpCit7CisJd2hpbGUgKGRlbF9saXN0Lm5yKSB7CisJCXN0cnVjdCBtZW51X29wdHMgbWVudV9vcHRzOworCQlzdHJ1Y3QgbWVudV9zdHVmZiBtZW51X3N0dWZmOworCQlzdHJ1Y3QgbWVudV9pdGVtIG1lbnVzW10gPSB7CisJCQl7J2MnLCAiY2xlYW4iLAkJCTAsIGNsZWFuX2NtZH0sCisJCQl7J2YnLCAiZmlsdGVyIGJ5IHBhdHRlcm4iLAkwLCBmaWx0ZXJfYnlfcGF0dGVybnNfY21kfSwKKwkJCXsncycsICJzZWxlY3QgYnkgbnVtYmVycyIsCTAsIHNlbGVjdF9ieV9udW1iZXJzX2NtZH0sCisJCQl7J2EnLCAiYXNrIGVhY2giLAkJMCwgYXNrX2VhY2hfY21kfSwKKwkJCXsncScsICJxdWl0IiwJCQkwLCBxdWl0X2NtZH0sCisJCQl7J2gnLCAiaGVscCIsCQkJMCwgaGVscF9jbWR9LAorCQl9OworCQlpbnQgKmNob3NlbjsKKworCQltZW51X29wdHMuaGVhZGVyID0gTl8oIioqKiBDb21tYW5kcyAqKioiKTsKKwkJbWVudV9vcHRzLnByb21wdCA9IE5fKCJXaGF0IG5vdyIpOworCQltZW51X29wdHMuZmxhZ3MgPSBNRU5VX09QVFNfU0lOR0xFVE9OOworCisJCW1lbnVfc3R1ZmYudHlwZSA9IE1FTlVfU1RVRkZfVFlQRV9NRU5VX0lURU07CisJCW1lbnVfc3R1ZmYuc3R1ZmYgPSBtZW51czsKKwkJbWVudV9zdHVmZi5uciA9IHNpemVvZihtZW51cykgLyBzaXplb2Yoc3RydWN0IG1lbnVfaXRlbSk7CisKKwkJY2xlYW5fcHJpbnRfY29sb3IoQ0xFQU5fQ09MT1JfSEVBREVSKTsKKwkJcHJpbnRmX2xuKFFfKCJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIsCisJCQkgICAgICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiLAorCQkJICAgICBkZWxfbGlzdC5ucikpOworCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCk7CisKKwkJcHJldHR5X3ByaW50X2RlbHMoKTsKKworCQljaG9zZW4gPSBsaXN0X2FuZF9jaG9vc2UoJm1lbnVfb3B0cywgJm1lbnVfc3R1ZmYpOworCisJCWlmICgqY2hvc2VuICE9IEVPRikgeworCQkJaW50IHJldDsKKwkJCXJldCA9IG1lbnVzWypjaG9zZW5dLmZuKCk7CisJCQlpZiAocmV0ICE9IE1FTlVfUkVUVVJOX05PX0xPT1ApIHsKKwkJCQlmcmVlKGNob3Nlbik7CisJCQkJY2hvc2VuID0gTlVMTDsKKwkJCQlpZiAoIWRlbF9saXN0Lm5yKSB7CisJCQkJCWNsZWFuX3ByaW50X2NvbG9yKENMRUFOX0NPTE9SX0VSUk9SKTsKKwkJCQkJcHJpbnRmX2xuKF8oIk5vIG1vcmUgZmlsZXMgdG8gY2xlYW4sIGV4aXRpbmcuIikpOworCQkJCQljbGVhbl9wcmludF9jb2xvcihDTEVBTl9DT0xPUl9SRVNFVCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXF1aXRfY21kKCk7CisJCX0KKworCQlmcmVlKGNob3Nlbik7CisJCWNob3NlbiA9IE5VTEw7CisJCWJyZWFrOworCX0KK30KKworaW50IGNtZF9jbGVhbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgcmVzOworCWludCBkcnlfcnVuID0gMCwgcmVtb3ZlX2RpcmVjdG9yaWVzID0gMCwgcXVpZXQgPSAwLCBpZ25vcmVkID0gMDsKKwlpbnQgaWdub3JlZF9vbmx5ID0gMCwgY29uZmlnX3NldCA9IDAsIGVycm9ycyA9IDAsIGdvbmUgPSAxOworCWludCBybV9mbGFncyA9IFJFTU9WRV9ESVJfS0VFUF9ORVNURURfR0lUOworCXN0cnVjdCBzdHJidWYgYWJzX3BhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0IGV4Y2x1ZGVfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWw7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJY29uc3QgY2hhciAqcW5hbWU7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiKSksCisJCU9QVF9fRFJZX1JVTigmZHJ5X3J1biwgTl8oImRyeSBydW4iKSksCisJCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygiZm9yY2UiKSksCisJCU9QVF9CT09MKCdpJywgImludGVyYWN0aXZlIiwgJmludGVyYWN0aXZlLCBOXygiaW50ZXJhY3RpdmUgY2xlYW5pbmciKSksCisJCU9QVF9CT09MKCdkJywgTlVMTCwgJnJlbW92ZV9kaXJlY3RvcmllcywKKwkJCQlOXygicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2UnLCAiZXhjbHVkZSIsICZleGNsdWRlX2xpc3QsIE5fKCJwYXR0ZXJuIiksCisJCSAgTl8oImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIiksIFBBUlNFX09QVF9OT05FRywgZXhjbHVkZV9jYiB9LAorCQlPUFRfQk9PTCgneCcsIE5VTEwsICZpZ25vcmVkLCBOXygicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIpKSwKKwkJT1BUX0JPT0woJ1gnLCBOVUxMLCAmaWdub3JlZF9vbmx5LAorCQkJCU5fKCJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfY2xlYW5fY29uZmlnLCBOVUxMKTsKKwlpZiAoZm9yY2UgPCAwKQorCQlmb3JjZSA9IDA7CisJZWxzZQorCQljb25maWdfc2V0ID0gMTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgYnVpbHRpbl9jbGVhbl91c2FnZSwKKwkJCSAgICAgMCk7CisKKwltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCWlmIChpZ25vcmVkX29ubHkpCisJCWRpci5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEOworCisJaWYgKGlnbm9yZWQgJiYgaWdub3JlZF9vbmx5KQorCQlkaWUoXygiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIikpOworCisJaWYgKCFpbnRlcmFjdGl2ZSAmJiAhZHJ5X3J1biAmJiAhZm9yY2UpIHsKKwkJaWYgKGNvbmZpZ19zZXQpCisJCQlkaWUoXygiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyAiCisJCQkJICAicmVmdXNpbmcgdG8gY2xlYW4iKSk7CisJCWVsc2UKKwkJCWRpZShfKCJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsiCisJCQkJICAiIHJlZnVzaW5nIHRvIGNsZWFuIikpOworCX0KKworCWlmIChmb3JjZSA+IDEpCisJCXJtX2ZsYWdzID0gMDsKKworCWRpci5mbGFncyB8PSBESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUzsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJaWYgKCFpZ25vcmVkKQorCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKworCWVsID0gYWRkX2V4Y2x1ZGVfbGlzdCgmZGlyLCBFWENfQ01ETCwgIi0tZXhjbHVkZSBvcHRpb24iKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXhjbHVkZV9saXN0Lm5yOyBpKyspCisJCWFkZF9leGNsdWRlKGV4Y2x1ZGVfbGlzdC5pdGVtc1tpXS5zdHJpbmcsICIiLCAwLCBlbCwgLShpKzEpKTsKKworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9DV0QsCisJCSAgICAgICBwcmVmaXgsIGFyZ3YpOworCisJZmlsbF9kaXJlY3RvcnkoJmRpciwgJnBhdGhzcGVjKTsKKworCWZvciAoaSA9IDA7IGkgPCBkaXIubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuZW50cmllc1tpXTsKKwkJaW50IG1hdGNoZXMgPSAwOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJY29uc3QgY2hhciAqcmVsOworCisJCWlmICghY2FjaGVfbmFtZV9pc19vdGhlcihlbnQtPm5hbWUsIGVudC0+bGVuKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYXRoc3BlYy5ucikKKwkJCW1hdGNoZXMgPSBkaXJfcGF0aF9tYXRjaChlbnQsICZwYXRoc3BlYywgMCwgTlVMTCk7CisKKwkJaWYgKHBhdGhzcGVjLm5yICYmICFtYXRjaGVzKQorCQkJY29udGludWU7CisKKwkJaWYgKGxzdGF0KGVudC0+bmFtZSwgJnN0KSkKKwkJCWRpZV9lcnJubygiQ2Fubm90IGxzdGF0ICclcyciLCBlbnQtPm5hbWUpOworCisJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpICYmICFyZW1vdmVfZGlyZWN0b3JpZXMgJiYKKwkJICAgIG1hdGNoZXMgIT0gTUFUQ0hFRF9FWEFDVExZKQorCQkJY29udGludWU7CisKKwkJcmVsID0gcmVsYXRpdmVfcGF0aChlbnQtPm5hbWUsIHByZWZpeCwgJmJ1Zik7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZGVsX2xpc3QsIHJlbCk7CisJfQorCisJaWYgKGludGVyYWN0aXZlICYmIGRlbF9saXN0Lm5yID4gMCkKKwkJaW50ZXJhY3RpdmVfbWFpbl9sb29wKCk7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZkZWxfbGlzdCkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlpZiAocHJlZml4KQorCQkJc3RyYnVmX2FkZHN0cigmYWJzX3BhdGgsIHByZWZpeCk7CisKKwkJc3RyYnVmX2FkZHN0cigmYWJzX3BhdGgsIGl0ZW0tPnN0cmluZyk7CisKKwkJLyoKKwkJICogd2UgbWlnaHQgaGF2ZSByZW1vdmVkIHRoaXMgYXMgcGFydCBvZiBlYXJsaWVyCisJCSAqIHJlY3Vyc2l2ZSBkaXJlY3RvcnkgcmVtb3ZhbCwgc28gbHN0YXQoKSBoZXJlIGNvdWxkCisJCSAqIGZhaWwgd2l0aCBFTk9FTlQuCisJCSAqLworCQlpZiAobHN0YXQoYWJzX3BhdGguYnVmLCAmc3QpKQorCQkJY29udGludWU7CisKKwkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCWlmIChyZW1vdmVfZGlycygmYWJzX3BhdGgsIHByZWZpeCwgcm1fZmxhZ3MsIGRyeV9ydW4sIHF1aWV0LCAmZ29uZSkpCisJCQkJZXJyb3JzKys7CisJCQlpZiAoZ29uZSAmJiAhcXVpZXQpIHsKKwkJCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoaXRlbS0+c3RyaW5nLCBOVUxMLCAmYnVmKTsKKwkJCQlwcmludGYoZHJ5X3J1biA/IF8obXNnX3dvdWxkX3JlbW92ZSkgOiBfKG1zZ19yZW1vdmUpLCBxbmFtZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyZXMgPSBkcnlfcnVuID8gMCA6IHVubGluayhhYnNfcGF0aC5idWYpOworCQkJaWYgKHJlcykgeworCQkJCXFuYW1lID0gcXVvdGVfcGF0aF9yZWxhdGl2ZShpdGVtLT5zdHJpbmcsIE5VTEwsICZidWYpOworCQkJCXdhcm5pbmcoXyhtc2dfd2Fybl9yZW1vdmVfZmFpbGVkKSwgcW5hbWUpOworCQkJCWVycm9ycysrOworCQkJfSBlbHNlIGlmICghcXVpZXQpIHsKKwkJCQlxbmFtZSA9IHF1b3RlX3BhdGhfcmVsYXRpdmUoaXRlbS0+c3RyaW5nLCBOVUxMLCAmYnVmKTsKKwkJCQlwcmludGYoZHJ5X3J1biA/IF8obXNnX3dvdWxkX3JlbW92ZSkgOiBfKG1zZ19yZW1vdmUpLCBxbmFtZSk7CisJCQl9CisJCX0KKwkJc3RyYnVmX3Jlc2V0KCZhYnNfcGF0aCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmFic19wYXRoKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZGVsX2xpc3QsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZleGNsdWRlX2xpc3QsIDApOworCXJldHVybiAoZXJyb3JzICE9IDApOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jbG9uZS5jIGIvYnVpbHRpbi9jbG9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYWVjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Nsb25lLmMKQEAgLTAsMCArMSwxMDkwIEBACisvKgorICogQnVpbHRpbiAiZ2l0IGNsb25lIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBLcmlzdGlhbiBIw7hnc2JlcmcgPGtyaEByZWRoYXQuY29tPiwKKyAqCQkgMjAwOCBEYW5pZWwgQmFya2Fsb3cgPGJhcmthbG93QGlhYmVydm9uLm9yZz4KKyAqIEJhc2VkIG9uIGdpdC1jb21taXQuc2ggYnkgSnVuaW8gQyBIYW1hbm8gYW5kIExpbnVzIFRvcnZhbGRzCisgKgorICogQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5IHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LgorICovCisKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZmV0Y2gtcGFjay5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImNvbm5lY3RlZC5oIgorCisvKgorICogT3ZlcmFsbCBGSVhNRXM6CisgKiAgLSByZXNwZWN0IERCX0VOVklST05NRU5UIGZvciAuZ2l0L29iamVjdHMuCisgKgorICogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgKiAgLSBkcm9wcGluZyB1c2Utc2VwYXJhdGUtcmVtb3RlIGFuZCBuby1zZXBhcmF0ZS1yZW1vdGUgY29tcGF0aWJpbGl0eQorICoKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2Nsb25lX3VzYWdlW10gPSB7CisJTl8oImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBvcHRpb25fbm9fY2hlY2tvdXQsIG9wdGlvbl9iYXJlLCBvcHRpb25fbWlycm9yLCBvcHRpb25fc2luZ2xlX2JyYW5jaCA9IC0xOworc3RhdGljIGludCBvcHRpb25fbG9jYWwgPSAtMSwgb3B0aW9uX25vX2hhcmRsaW5rcywgb3B0aW9uX3NoYXJlZCwgb3B0aW9uX3JlY3Vyc2l2ZTsKK3N0YXRpYyBjaGFyICpvcHRpb25fdGVtcGxhdGUsICpvcHRpb25fZGVwdGg7CitzdGF0aWMgY2hhciAqb3B0aW9uX29yaWdpbiA9IE5VTEw7CitzdGF0aWMgY2hhciAqb3B0aW9uX2JyYW5jaCA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqcmVhbF9naXRfZGlyOworc3RhdGljIGNoYXIgKm9wdGlvbl91cGxvYWRfcGFjayA9ICJnaXQtdXBsb2FkLXBhY2siOworc3RhdGljIGludCBvcHRpb25fdmVyYm9zaXR5Oworc3RhdGljIGludCBvcHRpb25fcHJvZ3Jlc3MgPSAtMTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgb3B0aW9uX2NvbmZpZzsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgb3B0aW9uX3JlZmVyZW5jZTsKK3N0YXRpYyBpbnQgb3B0aW9uX2Rpc3NvY2lhdGU7CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fY2xvbmVfb3B0aW9uc1tdID0geworCU9QVF9fVkVSQk9TSVRZKCZvcHRpb25fdmVyYm9zaXR5KSwKKwlPUFRfQk9PTCgwLCAicHJvZ3Jlc3MiLCAmb3B0aW9uX3Byb2dyZXNzLAorCQkgTl8oImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwlPUFRfQk9PTCgnbicsICJuby1jaGVja291dCIsICZvcHRpb25fbm9fY2hlY2tvdXQsCisJCSBOXygiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiKSksCisJT1BUX0JPT0woMCwgImJhcmUiLCAmb3B0aW9uX2JhcmUsIE5fKCJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiKSksCisJT1BUX0hJRERFTl9CT09MKDAsICJuYWtlZCIsICZvcHRpb25fYmFyZSwKKwkJCU5fKCJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiKSksCisJT1BUX0JPT0woMCwgIm1pcnJvciIsICZvcHRpb25fbWlycm9yLAorCQkgTl8oImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIikpLAorCU9QVF9CT09MKCdsJywgImxvY2FsIiwgJm9wdGlvbl9sb2NhbCwKKwkJTl8oInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IikpLAorCU9QVF9CT09MKDAsICJuby1oYXJkbGlua3MiLCAmb3B0aW9uX25vX2hhcmRsaW5rcywKKwkJICAgIE5fKCJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIpKSwKKwlPUFRfQk9PTCgncycsICJzaGFyZWQiLCAmb3B0aW9uX3NoYXJlZCwKKwkJICAgIE5fKCJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIpKSwKKwlPUFRfQk9PTCgwLCAicmVjdXJzaXZlIiwgJm9wdGlvbl9yZWN1cnNpdmUsCisJCSAgICBOXygiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIpKSwKKwlPUFRfQk9PTCgwLCAicmVjdXJzZS1zdWJtb2R1bGVzIiwgJm9wdGlvbl9yZWN1cnNpdmUsCisJCSAgICBOXygiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIpKSwKKwlPUFRfU1RSSU5HKDAsICJ0ZW1wbGF0ZSIsICZvcHRpb25fdGVtcGxhdGUsIE5fKCJ0ZW1wbGF0ZS1kaXJlY3RvcnkiKSwKKwkJICAgTl8oImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiKSksCisJT1BUX1NUUklOR19MSVNUKDAsICJyZWZlcmVuY2UiLCAmb3B0aW9uX3JlZmVyZW5jZSwgTl8oInJlcG8iKSwKKwkJCU5fKCJyZWZlcmVuY2UgcmVwb3NpdG9yeSIpKSwKKwlPUFRfQk9PTCgwLCAiZGlzc29jaWF0ZSIsICZvcHRpb25fZGlzc29jaWF0ZSwKKwkJIE5fKCJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIikpLAorCU9QVF9TVFJJTkcoJ28nLCAib3JpZ2luIiwgJm9wdGlvbl9vcmlnaW4sIE5fKCJuYW1lIiksCisJCSAgIE5fKCJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iKSksCisJT1BUX1NUUklORygnYicsICJicmFuY2giLCAmb3B0aW9uX2JyYW5jaCwgTl8oImJyYW5jaCIpLAorCQkgICBOXygiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIpKSwKKwlPUFRfU1RSSU5HKCd1JywgInVwbG9hZC1wYWNrIiwgJm9wdGlvbl91cGxvYWRfcGFjaywgTl8oInBhdGgiKSwKKwkJICAgTl8oInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiKSksCisJT1BUX1NUUklORygwLCAiZGVwdGgiLCAmb3B0aW9uX2RlcHRoLCBOXygiZGVwdGgiKSwKKwkJICAgIE5fKCJjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgiKSksCisJT1BUX0JPT0woMCwgInNpbmdsZS1icmFuY2giLCAmb3B0aW9uX3NpbmdsZV9icmFuY2gsCisJCSAgICBOXygiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIikpLAorCU9QVF9TVFJJTkcoMCwgInNlcGFyYXRlLWdpdC1kaXIiLCAmcmVhbF9naXRfZGlyLCBOXygiZ2l0ZGlyIiksCisJCSAgIE5fKCJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIikpLAorCU9QVF9TVFJJTkdfTElTVCgnYycsICJjb25maWciLCAmb3B0aW9uX2NvbmZpZywgTl8oImtleT12YWx1ZSIpLAorCQkJTl8oInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIpKSwKKwlPUFRfRU5EKCkKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICphcmd2X3N1Ym1vZHVsZVtdID0geworCSJzdWJtb2R1bGUiLCAidXBkYXRlIiwgIi0taW5pdCIsICItLXJlY3Vyc2l2ZSIsIE5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcmVwb19wYXRoXzEoc3RydWN0IHN0cmJ1ZiAqcGF0aCwgaW50ICppc19idW5kbGUpCit7CisJc3RhdGljIGNoYXIgKnN1ZmZpeFtdID0geyAiLy5naXQiLCAiIiwgIi5naXQvLmdpdCIsICIuZ2l0IiB9OworCXN0YXRpYyBjaGFyICpidW5kbGVfc3VmZml4W10gPSB7ICIuYnVuZGxlIiwgIiIgfTsKKwlzaXplX3QgYmFzZWxlbiA9IHBhdGgtPmxlbjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1ZmZpeCk7IGkrKykgeworCQlzdHJidWZfc2V0bGVuKHBhdGgsIGJhc2VsZW4pOworCQlzdHJidWZfYWRkc3RyKHBhdGgsIHN1ZmZpeFtpXSk7CisJCWlmIChzdGF0KHBhdGgtPmJ1ZiwgJnN0KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSAmJiBpc19naXRfZGlyZWN0b3J5KHBhdGgtPmJ1ZikpIHsKKwkJCSppc19idW5kbGUgPSAwOworCQkJcmV0dXJuIHBhdGgtPmJ1ZjsKKwkJfSBlbHNlIGlmIChTX0lTUkVHKHN0LnN0X21vZGUpICYmIHN0LnN0X3NpemUgPiA4KSB7CisJCQkvKiBJcyBpdCBhICJnaXRmaWxlIj8gKi8KKwkJCWNoYXIgc2lnbmF0dXJlWzhdOworCQkJY29uc3QgY2hhciAqZHN0OworCQkJaW50IGxlbiwgZmQgPSBvcGVuKHBhdGgtPmJ1ZiwgT19SRE9OTFkpOworCQkJaWYgKGZkIDwgMCkKKwkJCQljb250aW51ZTsKKwkJCWxlbiA9IHJlYWRfaW5fZnVsbChmZCwgc2lnbmF0dXJlLCA4KTsKKwkJCWNsb3NlKGZkKTsKKwkJCWlmIChsZW4gIT0gOCB8fCBzdHJuY21wKHNpZ25hdHVyZSwgImdpdGRpcjogIiwgOCkpCisJCQkJY29udGludWU7CisJCQlkc3QgPSByZWFkX2dpdGZpbGUocGF0aC0+YnVmKTsKKwkJCWlmIChkc3QpIHsKKwkJCQkqaXNfYnVuZGxlID0gMDsKKwkJCQlyZXR1cm4gZHN0OworCQkJfQorCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVuZGxlX3N1ZmZpeCk7IGkrKykgeworCQlzdHJidWZfc2V0bGVuKHBhdGgsIGJhc2VsZW4pOworCQlzdHJidWZfYWRkc3RyKHBhdGgsIGJ1bmRsZV9zdWZmaXhbaV0pOworCQlpZiAoIXN0YXQocGF0aC0+YnVmLCAmc3QpICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpIHsKKwkJCSppc19idW5kbGUgPSAxOworCQkJcmV0dXJuIHBhdGgtPmJ1ZjsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY2hhciAqZ2V0X3JlcG9fcGF0aChjb25zdCBjaGFyICpyZXBvLCBpbnQgKmlzX2J1bmRsZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpyYXc7CisJY2hhciAqY2Fub247CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCByZXBvKTsKKwlyYXcgPSBnZXRfcmVwb19wYXRoXzEoJnBhdGgsIGlzX2J1bmRsZSk7CisJY2Fub24gPSByYXcgPyB4c3RyZHVwKGFic29sdXRlX3BhdGgocmF3KSkgOiBOVUxMOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwlyZXR1cm4gY2Fub247Cit9CisKK3N0YXRpYyBjaGFyICpndWVzc19kaXJfbmFtZShjb25zdCBjaGFyICpyZXBvLCBpbnQgaXNfYnVuZGxlLCBpbnQgaXNfYmFyZSkKK3sKKwljb25zdCBjaGFyICplbmQgPSByZXBvICsgc3RybGVuKHJlcG8pLCAqc3RhcnQsICpwdHI7CisJc2l6ZV90IGxlbjsKKwljaGFyICpkaXI7CisKKwkvKgorCSAqIFNraXAgc2NoZW1lLgorCSAqLworCXN0YXJ0ID0gc3Ryc3RyKHJlcG8sICI6Ly8iKTsKKwlpZiAoc3RhcnQgPT0gTlVMTCkKKwkJc3RhcnQgPSByZXBvOworCWVsc2UKKwkJc3RhcnQgKz0gMzsKKworCS8qCisJICogU2tpcCBhdXRoZW50aWNhdGlvbiBkYXRhLiBUaGUgc3RyaXBwaW5nIGRvZXMgaGFwcGVuCisJICogZ3JlZWRpbHksIHN1Y2ggdGhhdCB3ZSBzdHJpcCB1cCB0byB0aGUgbGFzdCAnQCcgaW5zaWRlCisJICogdGhlIGhvc3QgcGFydC4KKwkgKi8KKwlmb3IgKHB0ciA9IHN0YXJ0OyBwdHIgPCBlbmQgJiYgIWlzX2Rpcl9zZXAoKnB0cik7IHB0cisrKSB7CisJCWlmICgqcHRyID09ICdAJykKKwkJCXN0YXJ0ID0gcHRyICsgMTsKKwl9CisKKwkvKgorCSAqIFN0cmlwIHRyYWlsaW5nIHNwYWNlcywgc2xhc2hlcyBhbmQgLy5naXQKKwkgKi8KKwl3aGlsZSAoc3RhcnQgPCBlbmQgJiYgKGlzX2Rpcl9zZXAoZW5kWy0xXSkgfHwgaXNzcGFjZShlbmRbLTFdKSkpCisJCWVuZC0tOworCWlmIChlbmQgLSBzdGFydCA+IDUgJiYgaXNfZGlyX3NlcChlbmRbLTVdKSAmJgorCSAgICAhc3RybmNtcChlbmQgLSA0LCAiLmdpdCIsIDQpKSB7CisJCWVuZCAtPSA1OworCQl3aGlsZSAoc3RhcnQgPCBlbmQgJiYgaXNfZGlyX3NlcChlbmRbLTFdKSkKKwkJCWVuZC0tOworCX0KKworCS8qCisJICogU3RyaXAgdHJhaWxpbmcgcG9ydCBudW1iZXIgaWYgd2UndmUgZ290IG9ubHkgYQorCSAqIGhvc3RuYW1lICh0aGF0IGlzLCB0aGVyZSBpcyBubyBkaXIgc2VwYXJhdG9yIGJ1dCBhCisJICogY29sb24pLiBUaGlzIGNoZWNrIGlzIHJlcXVpcmVkIHN1Y2ggdGhhdCB3ZSBkbyBub3QKKwkgKiBzdHJpcCBVUkkncyBsaWtlICcvZm9vL2JhcjoyMjIyLmdpdCcsIHdoaWNoIHNob3VsZAorCSAqIHJlc3VsdCBpbiBhIGRpciAnMjIyMicgYmVpbmcgZ3Vlc3NlZCBkdWUgdG8gYmFja3dhcmRzCisJICogY29tcGF0aWJpbGl0eS4KKwkgKi8KKwlpZiAobWVtY2hyKHN0YXJ0LCAnLycsIGVuZCAtIHN0YXJ0KSA9PSBOVUxMCisJICAgICYmIG1lbWNocihzdGFydCwgJzonLCBlbmQgLSBzdGFydCkgIT0gTlVMTCkgeworCQlwdHIgPSBlbmQ7CisJCXdoaWxlIChzdGFydCA8IHB0ciAmJiBpc2RpZ2l0KHB0clstMV0pICYmIHB0clstMV0gIT0gJzonKQorCQkJcHRyLS07CisJCWlmIChzdGFydCA8IHB0ciAmJiBwdHJbLTFdID09ICc6JykKKwkJCWVuZCA9IHB0ciAtIDE7CisJfQorCisJLyoKKwkgKiBGaW5kIGxhc3QgY29tcG9uZW50LiBUbyByZW1haW4gYmFja3dhcmRzIGNvbXBhdGlibGUgd2UKKwkgKiBhbHNvIHJlZ2FyZCBjb2xvbnMgYXMgcGF0aCBzZXBhcmF0b3JzLCBzdWNoIHRoYXQKKwkgKiBjbG9uaW5nIGEgcmVwb3NpdG9yeSAnZm9vOmJhci5naXQnIHdvdWxkIHJlc3VsdCBpbiBhCisJICogZGlyZWN0b3J5ICdiYXInIGJlaW5nIGd1ZXNzZWQuCisJICovCisJcHRyID0gZW5kOworCXdoaWxlIChzdGFydCA8IHB0ciAmJiAhaXNfZGlyX3NlcChwdHJbLTFdKSAmJiBwdHJbLTFdICE9ICc6JykKKwkJcHRyLS07CisJc3RhcnQgPSBwdHI7CisKKwkvKgorCSAqIFN0cmlwIC57YnVuZGxlLGdpdH0uCisJICovCisJbGVuID0gZW5kIC0gc3RhcnQ7CisJc3RyaXBfc3VmZml4X21lbShzdGFydCwgJmxlbiwgaXNfYnVuZGxlID8gIi5idW5kbGUiIDogIi5naXQiKTsKKworCWlmICghbGVuIHx8IChsZW4gPT0gMSAmJiAqc3RhcnQgPT0gJy8nKSkKKwkgICAgZGllKCJObyBkaXJlY3RvcnkgbmFtZSBjb3VsZCBiZSBndWVzc2VkLlxuIgorCQkiUGxlYXNlIHNwZWNpZnkgYSBkaXJlY3Rvcnkgb24gdGhlIGNvbW1hbmQgbGluZSIpOworCisJaWYgKGlzX2JhcmUpCisJCWRpciA9IHhzdHJmbXQoIiUuKnMuZ2l0IiwgKGludClsZW4sIHN0YXJ0KTsKKwllbHNlCisJCWRpciA9IHhzdHJuZHVwKHN0YXJ0LCBsZW4pOworCS8qCisJICogUmVwbGFjZSBzZXF1ZW5jZXMgb2YgJ2NvbnRyb2wnIGNoYXJhY3RlcnMgYW5kIHdoaXRlc3BhY2UKKwkgKiB3aXRoIG9uZSBhc2NpaSBzcGFjZSwgcmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcy4KKwkgKi8KKwlpZiAoKmRpcikgeworCQljaGFyICpvdXQgPSBkaXI7CisJCWludCBwcmV2X3NwYWNlID0gMSAvKiBzdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UgKi87CisJCWZvciAoZW5kID0gZGlyOyAqZW5kOyArK2VuZCkgeworCQkJY2hhciBjaCA9ICplbmQ7CisJCQlpZiAoKHVuc2lnbmVkIGNoYXIpY2ggPCAnXHgyMCcpCisJCQkJY2ggPSAnXHgyMCc7CisJCQlpZiAoaXNzcGFjZShjaCkpIHsKKwkJCQlpZiAocHJldl9zcGFjZSkKKwkJCQkJY29udGludWU7CisJCQkJcHJldl9zcGFjZSA9IDE7CisJCQl9IGVsc2UKKwkJCQlwcmV2X3NwYWNlID0gMDsKKwkJCSpvdXQrKyA9IGNoOworCQl9CisJCSpvdXQgPSAnXDAnOworCQlpZiAob3V0ID4gZGlyICYmIHByZXZfc3BhY2UpCisJCQlvdXRbLTFdID0gJ1wwJzsKKwl9CisJcmV0dXJuIGRpcjsKK30KKworc3RhdGljIHZvaWQgc3RyaXBfdHJhaWxpbmdfc2xhc2hlcyhjaGFyICpkaXIpCit7CisJY2hhciAqZW5kID0gZGlyICsgc3RybGVuKGRpcik7CisKKwl3aGlsZSAoZGlyIDwgZW5kIC0gMSAmJiBpc19kaXJfc2VwKGVuZFstMV0pKQorCQllbmQtLTsKKwkqZW5kID0gJ1wwJzsKK30KKworc3RhdGljIGludCBhZGRfb25lX3JlZmVyZW5jZShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwljaGFyICpyZWZfZ2l0OworCWNvbnN0IGNoYXIgKnJlcG87CisJc3RydWN0IHN0cmJ1ZiBhbHRlcm5hdGUgPSBTVFJCVUZfSU5JVDsKKworCS8qIEJld2FyZTogcmVhZF9naXRmaWxlKCksIHJlYWxfcGF0aCgpIGFuZCBta3BhdGgoKSByZXR1cm4gc3RhdGljIGJ1ZmZlciAqLworCXJlZl9naXQgPSB4c3RyZHVwKHJlYWxfcGF0aChpdGVtLT5zdHJpbmcpKTsKKworCXJlcG8gPSByZWFkX2dpdGZpbGUocmVmX2dpdCk7CisJaWYgKCFyZXBvKQorCQlyZXBvID0gcmVhZF9naXRmaWxlKG1rcGF0aCgiJXMvLmdpdCIsIHJlZl9naXQpKTsKKwlpZiAocmVwbykgeworCQlmcmVlKHJlZl9naXQpOworCQlyZWZfZ2l0ID0geHN0cmR1cChyZXBvKTsKKwl9CisKKwlpZiAoIXJlcG8gJiYgaXNfZGlyZWN0b3J5KG1rcGF0aCgiJXMvLmdpdC9vYmplY3RzIiwgcmVmX2dpdCkpKSB7CisJCWNoYXIgKnJlZl9naXRfZ2l0ID0gbWtwYXRoZHVwKCIlcy8uZ2l0IiwgcmVmX2dpdCk7CisJCWZyZWUocmVmX2dpdCk7CisJCXJlZl9naXQgPSByZWZfZ2l0X2dpdDsKKwl9IGVsc2UgaWYgKCFpc19kaXJlY3RvcnkobWtwYXRoKCIlcy9vYmplY3RzIiwgcmVmX2dpdCkpKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKGdldF9jb21tb25fZGlyKCZzYiwgcmVmX2dpdCkpCisJCQlkaWUoXygicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBhcyBhIGxpbmtlZCBjaGVja291dCBpcyBub3Qgc3VwcG9ydGVkIHlldC4iKSwKKwkJCSAgICBpdGVtLT5zdHJpbmcpOworCQlkaWUoXygicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIpLAorCQkgICAgaXRlbS0+c3RyaW5nKTsKKwl9CisKKwlpZiAoIWFjY2Vzcyhta3BhdGgoIiVzL3NoYWxsb3ciLCByZWZfZ2l0KSwgRl9PSykpCisJCWRpZShfKCJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciKSwgaXRlbS0+c3RyaW5nKTsKKworCWlmICghYWNjZXNzKG1rcGF0aCgiJXMvaW5mby9ncmFmdHMiLCByZWZfZ2l0KSwgRl9PSykpCisJCWRpZShfKCJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIGdyYWZ0ZWQiKSwgaXRlbS0+c3RyaW5nKTsKKworCXN0cmJ1Zl9hZGRmKCZhbHRlcm5hdGUsICIlcy9vYmplY3RzIiwgcmVmX2dpdCk7CisJYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShhbHRlcm5hdGUuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYWx0ZXJuYXRlKTsKKwlmcmVlKHJlZl9naXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9yZWZlcmVuY2Uodm9pZCkKK3sKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdCgmb3B0aW9uX3JlZmVyZW5jZSwgYWRkX29uZV9yZWZlcmVuY2UsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X2FsdGVybmF0ZXMoc3RydWN0IHN0cmJ1ZiAqc3JjLCBzdHJ1Y3Qgc3RyYnVmICpkc3QsCisJCQkgICAgY29uc3QgY2hhciAqc3JjX3JlcG8pCit7CisJLyoKKwkgKiBSZWFkIGZyb20gdGhlIHNvdXJjZSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBmaWxlCisJICogYW5kIGNvcHkgdGhlIGVudHJpZXMgdG8gY29ycmVzcG9uZGluZyBmaWxlIGluIHRoZQorCSAqIGRlc3RpbmF0aW9uIHJlcG9zaXRvcnkgd2l0aCBhZGRfdG9fYWx0ZXJuYXRlc19maWxlKCkuCisJICogQm90aCBzcmMgYW5kIGRzdCBoYXZlICIkcGF0aC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIuCisJICoKKwkgKiBJbnN0ZWFkIG9mIGNvcHlpbmcgYml0LWZvci1iaXQgZnJvbSB0aGUgb3JpZ2luYWwsCisJICogd2UgbmVlZCB0byBhcHBlbmQgdG8gZXhpc3Rpbmcgb25lIHNvIHRoYXQgdGhlIGFscmVhZHkKKwkgKiBjcmVhdGVkIGVudHJ5IHZpYSAiY2xvbmUgLXMiIGlzIG5vdCBsb3N0LCBhbmQgYWxzbworCSAqIHRvIHR1cm4gZW50cmllcyB3aXRoIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBvcmlnaW5hbAorCSAqIGFic29sdXRlLCBzbyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgaW4gdGhlIG5ldyByZXBvc2l0b3J5LgorCSAqLworCUZJTEUgKmluID0gZm9wZW4oc3JjLT5idWYsICJyIik7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJY2hhciAqYWJzX3BhdGg7CisJCWlmICghbGluZS5sZW4gfHwgbGluZS5idWZbMF0gPT0gJyMnKQorCQkJY29udGludWU7CisJCWlmIChpc19hYnNvbHV0ZV9wYXRoKGxpbmUuYnVmKSkgeworCQkJYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShsaW5lLmJ1Zik7CisJCQljb250aW51ZTsKKwkJfQorCQlhYnNfcGF0aCA9IG1rcGF0aGR1cCgiJXMvb2JqZWN0cy8lcyIsIHNyY19yZXBvLCBsaW5lLmJ1Zik7CisJCW5vcm1hbGl6ZV9wYXRoX2NvcHkoYWJzX3BhdGgsIGFic19wYXRoKTsKKwkJYWRkX3RvX2FsdGVybmF0ZXNfZmlsZShhYnNfcGF0aCk7CisJCWZyZWUoYWJzX3BhdGgpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJZmNsb3NlKGluKTsKK30KKworc3RhdGljIHZvaWQgY29weV9vcl9saW5rX2RpcmVjdG9yeShzdHJ1Y3Qgc3RyYnVmICpzcmMsIHN0cnVjdCBzdHJidWYgKmRlc3QsCisJCQkJICAgY29uc3QgY2hhciAqc3JjX3JlcG8sIGludCBzcmNfYmFzZWxlbikKK3sKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlzdHJ1Y3Qgc3RhdCBidWY7CisJaW50IHNyY19sZW4sIGRlc3RfbGVuOworCURJUiAqZGlyOworCisJZGlyID0gb3BlbmRpcihzcmMtPmJ1Zik7CisJaWYgKCFkaXIpCisJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gb3BlbiAnJXMnIiksIHNyYy0+YnVmKTsKKworCWlmIChta2RpcihkZXN0LT5idWYsIDA3NzcpKSB7CisJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIpLCBkZXN0LT5idWYpOworCQllbHNlIGlmIChzdGF0KGRlc3QtPmJ1ZiwgJmJ1ZikpCisJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHN0YXQgJyVzJyIpLCBkZXN0LT5idWYpOworCQllbHNlIGlmICghU19JU0RJUihidWYuc3RfbW9kZSkpCisJCQlkaWUoXygiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiKSwgZGVzdC0+YnVmKTsKKwl9CisKKwlzdHJidWZfYWRkY2goc3JjLCAnLycpOworCXNyY19sZW4gPSBzcmMtPmxlbjsKKwlzdHJidWZfYWRkY2goZGVzdCwgJy8nKTsKKwlkZXN0X2xlbiA9IGRlc3QtPmxlbjsKKworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJc3RyYnVmX3NldGxlbihzcmMsIHNyY19sZW4pOworCQlzdHJidWZfYWRkc3RyKHNyYywgZGUtPmRfbmFtZSk7CisJCXN0cmJ1Zl9zZXRsZW4oZGVzdCwgZGVzdF9sZW4pOworCQlzdHJidWZfYWRkc3RyKGRlc3QsIGRlLT5kX25hbWUpOworCQlpZiAoc3RhdChzcmMtPmJ1ZiwgJmJ1ZikpIHsKKwkJCXdhcm5pbmcgKF8oImZhaWxlZCB0byBzdGF0ICVzXG4iKSwgc3JjLT5idWYpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKFNfSVNESVIoYnVmLnN0X21vZGUpKSB7CisJCQlpZiAoZGUtPmRfbmFtZVswXSAhPSAnLicpCisJCQkJY29weV9vcl9saW5rX2RpcmVjdG9yeShzcmMsIGRlc3QsCisJCQkJCQkgICAgICAgc3JjX3JlcG8sIHNyY19iYXNlbGVuKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogRmlsZXMgdGhhdCBjYW5ub3QgYmUgY29waWVkIGJpdC1mb3ItYml0Li4uICovCisJCWlmICghc3RyY21wKHNyYy0+YnVmICsgc3JjX2Jhc2VsZW4sICIvaW5mby9hbHRlcm5hdGVzIikpIHsKKwkJCWNvcHlfYWx0ZXJuYXRlcyhzcmMsIGRlc3QsIHNyY19yZXBvKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHVubGluayhkZXN0LT5idWYpICYmIGVycm5vICE9IEVOT0VOVCkKKwkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gdW5saW5rICclcyciKSwgZGVzdC0+YnVmKTsKKwkJaWYgKCFvcHRpb25fbm9faGFyZGxpbmtzKSB7CisJCQlpZiAoIWxpbmsoc3JjLT5idWYsIGRlc3QtPmJ1ZikpCisJCQkJY29udGludWU7CisJCQlpZiAob3B0aW9uX2xvY2FsID4gMCkKKwkJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciKSwgZGVzdC0+YnVmKTsKKwkJCW9wdGlvbl9ub19oYXJkbGlua3MgPSAxOworCQl9CisJCWlmIChjb3B5X2ZpbGVfd2l0aF90aW1lKGRlc3QtPmJ1Ziwgc3JjLT5idWYsIDA2NjYpKQorCQkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIpLCBkZXN0LT5idWYpOworCX0KKwljbG9zZWRpcihkaXIpOworfQorCitzdGF0aWMgdm9pZCBjbG9uZV9sb2NhbChjb25zdCBjaGFyICpzcmNfcmVwbywgY29uc3QgY2hhciAqZGVzdF9yZXBvKQoreworCWlmIChvcHRpb25fc2hhcmVkKSB7CisJCXN0cnVjdCBzdHJidWYgYWx0ID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRmKCZhbHQsICIlcy9vYmplY3RzIiwgc3JjX3JlcG8pOworCQlhZGRfdG9fYWx0ZXJuYXRlc19maWxlKGFsdC5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYWx0KTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIHNyYyA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIGRlc3QgPSBTVFJCVUZfSU5JVDsKKwkJZ2V0X2NvbW1vbl9kaXIoJnNyYywgc3JjX3JlcG8pOworCQlnZXRfY29tbW9uX2RpcigmZGVzdCwgZGVzdF9yZXBvKTsKKwkJc3RyYnVmX2FkZHN0cigmc3JjLCAiL29iamVjdHMiKTsKKwkJc3RyYnVmX2FkZHN0cigmZGVzdCwgIi9vYmplY3RzIik7CisJCWNvcHlfb3JfbGlua19kaXJlY3RvcnkoJnNyYywgJmRlc3QsIHNyY19yZXBvLCBzcmMubGVuKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNyYyk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZkZXN0KTsKKwl9CisKKwlpZiAoMCA8PSBvcHRpb25fdmVyYm9zaXR5KQorCQlmcHJpbnRmKHN0ZGVyciwgXygiZG9uZS5cbiIpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmp1bmtfd29ya190cmVlOworc3RhdGljIGNvbnN0IGNoYXIgKmp1bmtfZ2l0X2RpcjsKK3N0YXRpYyBlbnVtIHsKKwlKVU5LX0xFQVZFX05PTkUsCisJSlVOS19MRUFWRV9SRVBPLAorCUpVTktfTEVBVkVfQUxMCit9IGp1bmtfbW9kZSA9IEpVTktfTEVBVkVfTk9ORTsKKworc3RhdGljIGNvbnN0IGNoYXIganVua19sZWF2ZV9yZXBvX21zZ1tdID0KK05fKCJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisgICAiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisgICAiYW5kIHJldHJ5IHRoZSBjaGVja291dCB3aXRoICdnaXQgY2hlY2tvdXQgLWYgSEVBRCdcbiIpOworCitzdGF0aWMgdm9pZCByZW1vdmVfanVuayh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCXN3aXRjaCAoanVua19tb2RlKSB7CisJY2FzZSBKVU5LX0xFQVZFX1JFUE86CisJCXdhcm5pbmcoIiVzIiwgXyhqdW5rX2xlYXZlX3JlcG9fbXNnKSk7CisJCS8qIGZhbGwtdGhyb3VnaCAqLworCWNhc2UgSlVOS19MRUFWRV9BTEw6CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQkvKiBwcm9jZWVkIHRvIHJlbW92YWwgKi8KKwkJYnJlYWs7CisJfQorCisJaWYgKGp1bmtfZ2l0X2RpcikgeworCQlzdHJidWZfYWRkc3RyKCZzYiwganVua19naXRfZGlyKTsKKwkJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmc2IsIDApOworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwl9CisJaWYgKGp1bmtfd29ya190cmVlKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBqdW5rX3dvcmtfdHJlZSk7CisJCXJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnNiLCAwKTsKKwkJc3RyYnVmX3Jlc2V0KCZzYik7CisJfQorfQorCitzdGF0aWMgdm9pZCByZW1vdmVfanVua19vbl9zaWduYWwoaW50IHNpZ25vKQoreworCXJlbW92ZV9qdW5rKCk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKKwlyYWlzZShzaWdubyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpmaW5kX3JlbW90ZV9icmFuY2goY29uc3Qgc3RydWN0IHJlZiAqcmVmcywgY29uc3QgY2hhciAqYnJhbmNoKQoreworCXN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgc3RyYnVmIGhlYWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkc3RyKCZoZWFkLCAicmVmcy9oZWFkcy8iKTsKKwlzdHJidWZfYWRkc3RyKCZoZWFkLCBicmFuY2gpOworCXJlZiA9IGZpbmRfcmVmX2J5X25hbWUocmVmcywgaGVhZC5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkKTsKKworCWlmIChyZWYpCisJCXJldHVybiByZWY7CisKKwlzdHJidWZfYWRkc3RyKCZoZWFkLCAicmVmcy90YWdzLyIpOworCXN0cmJ1Zl9hZGRzdHIoJmhlYWQsIGJyYW5jaCk7CisJcmVmID0gZmluZF9yZWZfYnlfbmFtZShyZWZzLCBoZWFkLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmhlYWQpOworCisJcmV0dXJuIHJlZjsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKndhbnRlZF9wZWVyX3JlZnMoY29uc3Qgc3RydWN0IHJlZiAqcmVmcywKKwkJc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMpCit7CisJc3RydWN0IHJlZiAqaGVhZCA9IGNvcHlfcmVmKGZpbmRfcmVmX2J5X25hbWUocmVmcywgIkhFQUQiKSk7CisJc3RydWN0IHJlZiAqbG9jYWxfcmVmcyA9IGhlYWQ7CisJc3RydWN0IHJlZiAqKnRhaWwgPSBoZWFkID8gJmhlYWQtPm5leHQgOiAmbG9jYWxfcmVmczsKKworCWlmIChvcHRpb25fc2luZ2xlX2JyYW5jaCkgeworCQlzdHJ1Y3QgcmVmICpyZW1vdGVfaGVhZCA9IE5VTEw7CisKKwkJaWYgKCFvcHRpb25fYnJhbmNoKQorCQkJcmVtb3RlX2hlYWQgPSBndWVzc19yZW1vdGVfaGVhZChoZWFkLCByZWZzLCAwKTsKKwkJZWxzZSB7CisJCQlsb2NhbF9yZWZzID0gTlVMTDsKKwkJCXRhaWwgPSAmbG9jYWxfcmVmczsKKwkJCXJlbW90ZV9oZWFkID0gY29weV9yZWYoZmluZF9yZW1vdGVfYnJhbmNoKHJlZnMsIG9wdGlvbl9icmFuY2gpKTsKKwkJfQorCisJCWlmICghcmVtb3RlX2hlYWQgJiYgb3B0aW9uX2JyYW5jaCkKKwkJCXdhcm5pbmcoXygiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iKSwKKwkJCQlvcHRpb25fYnJhbmNoKTsKKwkJZWxzZSB7CisJCQlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9oZWFkLCByZWZzcGVjLCAmdGFpbCwgMCk7CisKKwkJCS8qIGlmIC0tYnJhbmNoPXRhZywgcHVsbCB0aGUgcmVxdWVzdGVkIHRhZyBleHBsaWNpdGx5ICovCisJCQlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9oZWFkLCB0YWdfcmVmc3BlYywgJnRhaWwsIDApOworCQl9CisJfSBlbHNlCisJCWdldF9mZXRjaF9tYXAocmVmcywgcmVmc3BlYywgJnRhaWwsIDApOworCisJaWYgKCFvcHRpb25fbWlycm9yICYmICFvcHRpb25fc2luZ2xlX2JyYW5jaCkKKwkJZ2V0X2ZldGNoX21hcChyZWZzLCB0YWdfcmVmc3BlYywgJnRhaWwsIDApOworCisJcmV0dXJuIGxvY2FsX3JlZnM7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3JlbW90ZV9yZWZzKGNvbnN0IHN0cnVjdCByZWYgKmxvY2FsX3JlZnMpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcjsKKworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnQ7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKworCXQgPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0KQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisKKwlmb3IgKHIgPSBsb2NhbF9yZWZzOyByOyByID0gci0+bmV4dCkgeworCQlpZiAoIXItPnBlZXJfcmVmKQorCQkJY29udGludWU7CisJCWlmIChyZWZfdHJhbnNhY3Rpb25fY3JlYXRlKHQsIHItPnBlZXJfcmVmLT5uYW1lLCByLT5vbGRfc2hhMSwKKwkJCQkJICAgMCwgTlVMTCwgJmVycikpCisJCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJfQorCisJaWYgKGluaXRpYWxfcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0LCAmZXJyKSkKKwkJZGllKCIlcyIsIGVyci5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodCk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2ZvbGxvd3RhZ3MoY29uc3Qgc3RydWN0IHJlZiAqcmVmcywgY29uc3QgY2hhciAqbXNnKQoreworCWNvbnN0IHN0cnVjdCByZWYgKnJlZjsKKwlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICghc3RhcnRzX3dpdGgocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpKQorCQkJY29udGludWU7CisJCWlmIChlbmRzX3dpdGgocmVmLT5uYW1lLCAiXnt9IikpCisJCQljb250aW51ZTsKKwkJaWYgKCFoYXNfc2hhMV9maWxlKHJlZi0+b2xkX3NoYTEpKQorCQkJY29udGludWU7CisJCXVwZGF0ZV9yZWYobXNnLCByZWYtPm5hbWUsIHJlZi0+b2xkX3NoYTEsCisJCQkgICBOVUxMLCAwLCBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXRlcmF0ZV9yZWZfbWFwKHZvaWQgKmNiX2RhdGEsIHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0pCit7CisJc3RydWN0IHJlZiAqKnJtID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmICpyZWYgPSAqcm07CisKKwkvKgorCSAqIFNraXAgYW55dGhpbmcgbWlzc2luZyBhIHBlZXJfcmVmLCB3aGljaCB3ZSBhcmUgbm90CisJICogYWN0dWFsbHkgZ29pbmcgdG8gd3JpdGUgYSByZWYgZm9yLgorCSAqLworCXdoaWxlIChyZWYgJiYgIXJlZi0+cGVlcl9yZWYpCisJCXJlZiA9IHJlZi0+bmV4dDsKKwkvKiBSZXR1cm5pbmcgLTEgbm90ZXMgImVuZCBvZiBsaXN0IiB0byB0aGUgY2FsbGVyLiAqLworCWlmICghcmVmKQorCQlyZXR1cm4gLTE7CisKKwloYXNoY3B5KHNoYTEsIHJlZi0+b2xkX3NoYTEpOworCSpybSA9IHJlZi0+bmV4dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3JlbW90ZV9yZWZzKGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHJlZiAqbWFwcGVkX3JlZnMsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX2hlYWRfcG9pbnRzX2F0LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaF90b3AsCisJCQkgICAgICAgY29uc3QgY2hhciAqbXNnLAorCQkJICAgICAgIHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSAgICAgICBpbnQgY2hlY2tfY29ubmVjdGl2aXR5KQoreworCWNvbnN0IHN0cnVjdCByZWYgKnJtID0gbWFwcGVkX3JlZnM7CisKKwlpZiAoY2hlY2tfY29ubmVjdGl2aXR5KSB7CisJCWlmICh0cmFuc3BvcnQtPnByb2dyZXNzKQorCQkJZnByaW50ZihzdGRlcnIsIF8oIkNoZWNraW5nIGNvbm5lY3Rpdml0eS4uLiAiKSk7CisJCWlmIChjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZF93aXRoX3RyYW5zcG9ydChpdGVyYXRlX3JlZl9tYXAsCisJCQkJCQkJICAgICAgMCwgJnJtLCB0cmFuc3BvcnQpKQorCQkJZGllKF8oInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIikpOworCQlpZiAodHJhbnNwb3J0LT5wcm9ncmVzcykKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJkb25lLlxuIikpOworCX0KKworCWlmIChyZWZzKSB7CisJCXdyaXRlX3JlbW90ZV9yZWZzKG1hcHBlZF9yZWZzKTsKKwkJaWYgKG9wdGlvbl9zaW5nbGVfYnJhbmNoKQorCQkJd3JpdGVfZm9sbG93dGFncyhyZWZzLCBtc2cpOworCX0KKworCWlmIChyZW1vdGVfaGVhZF9wb2ludHNfYXQgJiYgIW9wdGlvbl9iYXJlKSB7CisJCXN0cnVjdCBzdHJidWYgaGVhZF9yZWYgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZHN0cigmaGVhZF9yZWYsIGJyYW5jaF90b3ApOworCQlzdHJidWZfYWRkc3RyKCZoZWFkX3JlZiwgIkhFQUQiKTsKKwkJY3JlYXRlX3N5bXJlZihoZWFkX3JlZi5idWYsCisJCQkgICAgICByZW1vdGVfaGVhZF9wb2ludHNfYXQtPnBlZXJfcmVmLT5uYW1lLAorCQkJICAgICAgbXNnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9oZWFkKGNvbnN0IHN0cnVjdCByZWYgKm91ciwgY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlLAorCQkJY29uc3QgY2hhciAqbXNnKQoreworCWNvbnN0IGNoYXIgKmhlYWQ7CisJaWYgKG91ciAmJiBza2lwX3ByZWZpeChvdXItPm5hbWUsICJyZWZzL2hlYWRzLyIsICZoZWFkKSkgeworCQkvKiBMb2NhbCBkZWZhdWx0IGJyYW5jaCBsaW5rICovCisJCWNyZWF0ZV9zeW1yZWYoIkhFQUQiLCBvdXItPm5hbWUsIE5VTEwpOworCQlpZiAoIW9wdGlvbl9iYXJlKSB7CisJCQl1cGRhdGVfcmVmKG1zZywgIkhFQUQiLCBvdXItPm9sZF9zaGExLCBOVUxMLCAwLAorCQkJCSAgIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCQkJaW5zdGFsbF9icmFuY2hfY29uZmlnKDAsIGhlYWQsIG9wdGlvbl9vcmlnaW4sIG91ci0+bmFtZSk7CisJCX0KKwl9IGVsc2UgaWYgKG91cikgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uob3VyLT5vbGRfc2hhMSk7CisJCS8qIC0tYnJhbmNoIHNwZWNpZmllcyBhIG5vbi1icmFuY2ggKGkuZS4gdGFncyksIGRldGFjaCBIRUFEICovCisJCXVwZGF0ZV9yZWYobXNnLCAiSEVBRCIsIGMtPm9iamVjdC5zaGExLAorCQkJICAgTlVMTCwgUkVGX05PREVSRUYsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCX0gZWxzZSBpZiAocmVtb3RlKSB7CisJCS8qCisJCSAqIFdlIGtub3cgcmVtb3RlIEhFQUQgcG9pbnRzIHRvIGEgbm9uLWJyYW5jaCwgb3IKKwkJICogSEVBRCBwb2ludHMgdG8gYSBicmFuY2ggYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggb25lLgorCQkgKiBEZXRhY2ggSEVBRCBpbiBhbGwgdGhlc2UgY2FzZXMuCisJCSAqLworCQl1cGRhdGVfcmVmKG1zZywgIkhFQUQiLCByZW1vdGUtPm9sZF9zaGExLAorCQkJICAgTlVMTCwgUkVGX05PREVSRUYsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCX0KK30KKworc3RhdGljIGludCBjaGVja291dCh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY2hhciAqaGVhZDsKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGU7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IHRyZWVfZGVzYyB0OworCWludCBlcnIgPSAwOworCisJaWYgKG9wdGlvbl9ub19jaGVja291dCkKKwkJcmV0dXJuIDA7CisKKwloZWFkID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLCBzaGExLCBOVUxMKTsKKwlpZiAoIWhlYWQpIHsKKwkJd2FybmluZyhfKCJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCAiCisJCQkgICJ1bmFibGUgdG8gY2hlY2tvdXQuXG4iKSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChoZWFkLCAiSEVBRCIpKSB7CisJCWlmIChhZHZpY2VfZGV0YWNoZWRfaGVhZCkKKwkJCWRldGFjaF9hZHZpY2Uoc2hhMV90b19oZXgoc2hhMSkpOworCX0gZWxzZSB7CisJCWlmICghc3RhcnRzX3dpdGgoaGVhZCwgInJlZnMvaGVhZHMvIikpCisJCQlkaWUoXygiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiKSk7CisJfQorCWZyZWUoaGVhZCk7CisKKwkvKiBXZSBuZWVkIHRvIGJlIGluIHRoZSBuZXcgd29yayB0cmVlIGZvciB0aGUgY2hlY2tvdXQgKi8KKwlzZXR1cF93b3JrX3RyZWUoKTsKKworCWxvY2tfZmlsZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKwlob2xkX2xvY2tlZF9pbmRleChsb2NrX2ZpbGUsIDEpOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Ygb3B0cyk7CisJb3B0cy51cGRhdGUgPSAxOworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuZm4gPSBvbmV3YXlfbWVyZ2U7CisJb3B0cy52ZXJib3NlX3VwZGF0ZSA9IChvcHRpb25fdmVyYm9zaXR5ID49IDApOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChzaGExKTsKKwlwYXJzZV90cmVlKHRyZWUpOworCWluaXRfdHJlZV9kZXNjKCZ0LCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCWlmICh1bnBhY2tfdHJlZXMoMSwgJnQsICZvcHRzKSA8IDApCisJCWRpZShfKCJ1bmFibGUgdG8gY2hlY2tvdXQgd29ya2luZyB0cmVlIikpOworCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCBsb2NrX2ZpbGUsIENPTU1JVF9MT0NLKSkKKwkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpKTsKKworCWVyciB8PSBydW5faG9va19sZShOVUxMLCAicG9zdC1jaGVja291dCIsIHNoYTFfdG9faGV4KG51bGxfc2hhMSksCisJCQkgICBzaGExX3RvX2hleChzaGExKSwgIjEiLCBOVUxMKTsKKworCWlmICghZXJyICYmIG9wdGlvbl9yZWN1cnNpdmUpCisJCWVyciA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3Zfc3VibW9kdWxlLCBSVU5fR0lUX0NNRCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdyaXRlX29uZV9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoa2V5LCB2YWx1ZSA/IHZhbHVlIDogInRydWUiLCAiXiQiLCAwKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfY29uZmlnKHN0cnVjdCBzdHJpbmdfbGlzdCAqY29uZmlnKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+bnI7IGkrKykgeworCQlpZiAoZ2l0X2NvbmZpZ19wYXJzZV9wYXJhbWV0ZXIoY29uZmlnLT5pdGVtc1tpXS5zdHJpbmcsCisJCQkJCSAgICAgICB3cml0ZV9vbmVfY29uZmlnLCBOVUxMKSA8IDApCisJCQlkaWUoInVuYWJsZSB0byB3cml0ZSBwYXJhbWV0ZXJzIHRvIGNvbmZpZyBmaWxlIik7CisJfQorfQorCitzdGF0aWMgdm9pZCB3cml0ZV9yZWZzcGVjX2NvbmZpZyhjb25zdCBjaGFyICpzcmNfcmVmX3ByZWZpeCwKKwkJY29uc3Qgc3RydWN0IHJlZiAqb3VyX2hlYWRfcG9pbnRzX2F0LAorCQljb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfaGVhZF9wb2ludHNfYXQsCisJCXN0cnVjdCBzdHJidWYgKmJyYW5jaF90b3ApCit7CisJc3RydWN0IHN0cmJ1ZiBrZXkgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHZhbHVlID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAob3B0aW9uX21pcnJvciB8fCAhb3B0aW9uX2JhcmUpIHsKKwkJaWYgKG9wdGlvbl9zaW5nbGVfYnJhbmNoICYmICFvcHRpb25fbWlycm9yKSB7CisJCQlpZiAob3B0aW9uX2JyYW5jaCkgeworCQkJCWlmIChzdGFydHNfd2l0aChvdXJfaGVhZF9wb2ludHNfYXQtPm5hbWUsICJyZWZzL3RhZ3MvIikpCisJCQkJCXN0cmJ1Zl9hZGRmKCZ2YWx1ZSwgIislczolcyIsIG91cl9oZWFkX3BvaW50c19hdC0+bmFtZSwKKwkJCQkJCW91cl9oZWFkX3BvaW50c19hdC0+bmFtZSk7CisJCQkJZWxzZQorCQkJCQlzdHJidWZfYWRkZigmdmFsdWUsICIrJXM6JXMlcyIsIG91cl9oZWFkX3BvaW50c19hdC0+bmFtZSwKKwkJCQkJCWJyYW5jaF90b3AtPmJ1Ziwgb3B0aW9uX2JyYW5jaCk7CisJCQl9IGVsc2UgaWYgKHJlbW90ZV9oZWFkX3BvaW50c19hdCkgeworCQkJCWNvbnN0IGNoYXIgKmhlYWQgPSByZW1vdGVfaGVhZF9wb2ludHNfYXQtPm5hbWU7CisJCQkJaWYgKCFza2lwX3ByZWZpeChoZWFkLCAicmVmcy9oZWFkcy8iLCAmaGVhZCkpCisJCQkJCWRpZSgiQlVHOiByZW1vdGUgSEVBRCBwb2ludHMgYXQgbm9uLWhlYWQ/Iik7CisKKwkJCQlzdHJidWZfYWRkZigmdmFsdWUsICIrJXM6JXMlcyIsIHJlbW90ZV9oZWFkX3BvaW50c19hdC0+bmFtZSwKKwkJCQkJCWJyYW5jaF90b3AtPmJ1ZiwgaGVhZCk7CisJCQl9CisJCQkvKgorCQkJICogb3RoZXJ3aXNlLCB0aGUgbmV4dCAiZ2l0IGZldGNoIiB3aWxsCisJCQkgKiBzaW1wbHkgZmV0Y2ggZnJvbSBIRUFEIHdpdGhvdXQgdXBkYXRpbmcKKwkJCSAqIGFueSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoLCB3aGljaCBpcyB3aGF0CisJCQkgKiB3ZSB3YW50LgorCQkJICovCisJCX0gZWxzZSB7CisJCQlzdHJidWZfYWRkZigmdmFsdWUsICIrJXMqOiVzKiIsIHNyY19yZWZfcHJlZml4LCBicmFuY2hfdG9wLT5idWYpOworCQl9CisJCS8qIENvbmZpZ3VyZSB0aGUgcmVtb3RlICovCisJCWlmICh2YWx1ZS5sZW4pIHsKKwkJCXN0cmJ1Zl9hZGRmKCZrZXksICJyZW1vdGUuJXMuZmV0Y2giLCBvcHRpb25fb3JpZ2luKTsKKwkJCWdpdF9jb25maWdfc2V0X211bHRpdmFyKGtleS5idWYsIHZhbHVlLmJ1ZiwgIl4kIiwgMCk7CisJCQlzdHJidWZfcmVzZXQoJmtleSk7CisKKwkJCWlmIChvcHRpb25fbWlycm9yKSB7CisJCQkJc3RyYnVmX2FkZGYoJmtleSwgInJlbW90ZS4lcy5taXJyb3IiLCBvcHRpb25fb3JpZ2luKTsKKwkJCQlnaXRfY29uZmlnX3NldChrZXkuYnVmLCAidHJ1ZSIpOworCQkJCXN0cmJ1Zl9yZXNldCgma2V5KTsKKwkJCX0KKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCXN0cmJ1Zl9yZWxlYXNlKCZ2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3NvY2lhdGVfZnJvbV9yZWZlcmVuY2VzKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIqIGFyZ3ZbXSA9IHsgInJlcGFjayIsICItYSIsICItZCIsIE5VTEwgfTsKKworCWlmIChydW5fY29tbWFuZF92X29wdChhcmd2LCBSVU5fR0lUX0NNRHxSVU5fQ09NTUFORF9OT19TVERJTikpCisJCWRpZShfKCJjYW5ub3QgcmVwYWNrIHRvIGNsZWFuIHVwIikpOworCWlmICh1bmxpbmsoZ2l0X3BhdGgoIm9iamVjdHMvaW5mby9hbHRlcm5hdGVzIikpICYmIGVycm5vICE9IEVOT0VOVCkKKwkJZGllX2Vycm5vKF8oImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIpKTsKK30KKworaW50IGNtZF9jbG9uZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaXNfYnVuZGxlID0gMCwgaXNfbG9jYWw7CisJc3RydWN0IHN0YXQgYnVmOworCWNvbnN0IGNoYXIgKnJlcG9fbmFtZSwgKnJlcG8sICp3b3JrX3RyZWUsICpnaXRfZGlyOworCWNoYXIgKnBhdGgsICpkaXI7CisJaW50IGRlc3RfZXhpc3RzOworCWNvbnN0IHN0cnVjdCByZWYgKnJlZnMsICpyZW1vdGVfaGVhZDsKKwljb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfaGVhZF9wb2ludHNfYXQ7CisJY29uc3Qgc3RydWN0IHJlZiAqb3VyX2hlYWRfcG9pbnRzX2F0OworCXN0cnVjdCByZWYgKm1hcHBlZF9yZWZzOworCWNvbnN0IHN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgc3RyYnVmIGtleSA9IFNUUkJVRl9JTklULCB2YWx1ZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYnJhbmNoX3RvcCA9IFNUUkJVRl9JTklULCByZWZsb2dfbXNnID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0ID0gTlVMTDsKKwljb25zdCBjaGFyICpzcmNfcmVmX3ByZWZpeCA9ICJyZWZzL2hlYWRzLyI7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCWludCBlcnIgPSAwLCBjb21wbGV0ZV9yZWZzX2JlZm9yZV9mZXRjaCA9IDE7CisKKwlzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYzsKKwljb25zdCBjaGFyICpmZXRjaF9wYXR0ZXJuOworCisJcGFja2V0X3RyYWNlX2lkZW50aXR5KCJjbG9uZSIpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9jbG9uZV9vcHRpb25zLAorCQkJICAgICBidWlsdGluX2Nsb25lX3VzYWdlLCAwKTsKKworCWlmIChhcmdjID4gMikKKwkJdXNhZ2VfbXNnX29wdChfKCJUb28gbWFueSBhcmd1bWVudHMuIiksCisJCQlidWlsdGluX2Nsb25lX3VzYWdlLCBidWlsdGluX2Nsb25lX29wdGlvbnMpOworCisJaWYgKGFyZ2MgPT0gMCkKKwkJdXNhZ2VfbXNnX29wdChfKCJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iKSwKKwkJCWJ1aWx0aW5fY2xvbmVfdXNhZ2UsIGJ1aWx0aW5fY2xvbmVfb3B0aW9ucyk7CisKKwlpZiAob3B0aW9uX3NpbmdsZV9icmFuY2ggPT0gLTEpCisJCW9wdGlvbl9zaW5nbGVfYnJhbmNoID0gb3B0aW9uX2RlcHRoID8gMSA6IDA7CisKKwlpZiAob3B0aW9uX21pcnJvcikKKwkJb3B0aW9uX2JhcmUgPSAxOworCisJaWYgKG9wdGlvbl9iYXJlKSB7CisJCWlmIChvcHRpb25fb3JpZ2luKQorCQkJZGllKF8oIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIpLAorCQkJICAgIG9wdGlvbl9vcmlnaW4pOworCQlpZiAocmVhbF9naXRfZGlyKQorCQkJZGllKF8oIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIikpOworCQlvcHRpb25fbm9fY2hlY2tvdXQgPSAxOworCX0KKworCWlmICghb3B0aW9uX29yaWdpbikKKwkJb3B0aW9uX29yaWdpbiA9ICJvcmlnaW4iOworCisJcmVwb19uYW1lID0gYXJndlswXTsKKworCXBhdGggPSBnZXRfcmVwb19wYXRoKHJlcG9fbmFtZSwgJmlzX2J1bmRsZSk7CisJaWYgKHBhdGgpCisJCXJlcG8gPSB4c3RyZHVwKGFic29sdXRlX3BhdGgocmVwb19uYW1lKSk7CisJZWxzZSBpZiAoIXN0cmNocihyZXBvX25hbWUsICc6JykpCisJCWRpZShfKCJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiKSwgcmVwb19uYW1lKTsKKwllbHNlCisJCXJlcG8gPSByZXBvX25hbWU7CisKKwkvKiBubyBuZWVkIHRvIGJlIHN0cmljdCwgdHJhbnNwb3J0X3NldF9vcHRpb24oKSB3aWxsIHZhbGlkYXRlIGl0IGFnYWluICovCisJaWYgKG9wdGlvbl9kZXB0aCAmJiBhdG9pKG9wdGlvbl9kZXB0aCkgPCAxKQorCQlkaWUoXygiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIiksIG9wdGlvbl9kZXB0aCk7CisKKwlpZiAoYXJnYyA9PSAyKQorCQlkaXIgPSB4c3RyZHVwKGFyZ3ZbMV0pOworCWVsc2UKKwkJZGlyID0gZ3Vlc3NfZGlyX25hbWUocmVwb19uYW1lLCBpc19idW5kbGUsIG9wdGlvbl9iYXJlKTsKKwlzdHJpcF90cmFpbGluZ19zbGFzaGVzKGRpcik7CisKKwlkZXN0X2V4aXN0cyA9ICFzdGF0KGRpciwgJmJ1Zik7CisJaWYgKGRlc3RfZXhpc3RzICYmICFpc19lbXB0eV9kaXIoZGlyKSkKKwkJZGllKF8oImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90ICIKKwkJCSJhbiBlbXB0eSBkaXJlY3RvcnkuIiksIGRpcik7CisKKwlzdHJidWZfYWRkZigmcmVmbG9nX21zZywgImNsb25lOiBmcm9tICVzIiwgcmVwbyk7CisKKwlpZiAob3B0aW9uX2JhcmUpCisJCXdvcmtfdHJlZSA9IE5VTEw7CisJZWxzZSB7CisJCXdvcmtfdHJlZSA9IGdldGVudigiR0lUX1dPUktfVFJFRSIpOworCQlpZiAod29ya190cmVlICYmICFzdGF0KHdvcmtfdHJlZSwgJmJ1ZikpCisJCQlkaWUoXygid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIiksIHdvcmtfdHJlZSk7CisJfQorCisJaWYgKG9wdGlvbl9iYXJlIHx8IHdvcmtfdHJlZSkKKwkJZ2l0X2RpciA9IHhzdHJkdXAoZGlyKTsKKwllbHNlIHsKKwkJd29ya190cmVlID0gZGlyOworCQlnaXRfZGlyID0gbWtwYXRoZHVwKCIlcy8uZ2l0IiwgZGlyKTsKKwl9CisKKwlhdGV4aXQocmVtb3ZlX2p1bmspOworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHJlbW92ZV9qdW5rX29uX3NpZ25hbCk7CisKKwlpZiAoIW9wdGlvbl9iYXJlKSB7CisJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHdvcmtfdHJlZSkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIiksCisJCQkJICB3b3JrX3RyZWUpOworCQlpZiAoIWRlc3RfZXhpc3RzICYmIG1rZGlyKHdvcmtfdHJlZSwgMDc3NykpCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciKSwKKwkJCQkgIHdvcmtfdHJlZSk7CisJCWp1bmtfd29ya190cmVlID0gd29ya190cmVlOworCQlzZXRfZ2l0X3dvcmtfdHJlZSh3b3JrX3RyZWUpOworCX0KKworCWp1bmtfZ2l0X2RpciA9IGdpdF9kaXI7CisJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoZ2l0X2RpcikgPCAwKQorCQlkaWUoXygiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciKSwgZ2l0X2Rpcik7CisKKwlzZXRfZ2l0X2Rpcl9pbml0KGdpdF9kaXIsIHJlYWxfZ2l0X2RpciwgMCk7CisJaWYgKHJlYWxfZ2l0X2RpcikgeworCQlnaXRfZGlyID0gcmVhbF9naXRfZGlyOworCQlqdW5rX2dpdF9kaXIgPSByZWFsX2dpdF9kaXI7CisJfQorCisJaWYgKDAgPD0gb3B0aW9uX3ZlcmJvc2l0eSkgeworCQlpZiAob3B0aW9uX2JhcmUpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iKSwgZGlyKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsIF8oIkNsb25pbmcgaW50byAnJXMnLi4uXG4iKSwgZGlyKTsKKwl9CisJaW5pdF9kYihvcHRpb25fdGVtcGxhdGUsIElOSVRfREJfUVVJRVQpOworCXdyaXRlX2NvbmZpZygmb3B0aW9uX2NvbmZpZyk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlpZiAob3B0aW9uX2JhcmUpIHsKKwkJaWYgKG9wdGlvbl9taXJyb3IpCisJCQlzcmNfcmVmX3ByZWZpeCA9ICJyZWZzLyI7CisJCXN0cmJ1Zl9hZGRzdHIoJmJyYW5jaF90b3AsIHNyY19yZWZfcHJlZml4KTsKKworCQlnaXRfY29uZmlnX3NldCgiY29yZS5iYXJlIiwgInRydWUiKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZigmYnJhbmNoX3RvcCwgInJlZnMvcmVtb3Rlcy8lcy8iLCBvcHRpb25fb3JpZ2luKTsKKwl9CisKKwlzdHJidWZfYWRkZigmdmFsdWUsICIrJXMqOiVzKiIsIHNyY19yZWZfcHJlZml4LCBicmFuY2hfdG9wLmJ1Zik7CisJc3RyYnVmX2FkZGYoJmtleSwgInJlbW90ZS4lcy51cmwiLCBvcHRpb25fb3JpZ2luKTsKKwlnaXRfY29uZmlnX3NldChrZXkuYnVmLCByZXBvKTsKKwlzdHJidWZfcmVzZXQoJmtleSk7CisKKwlpZiAob3B0aW9uX3JlZmVyZW5jZS5ucikKKwkJc2V0dXBfcmVmZXJlbmNlKCk7CisJZWxzZSBpZiAob3B0aW9uX2Rpc3NvY2lhdGUpIHsKKwkJd2FybmluZyhfKCItLWRpc3NvY2lhdGUgZ2l2ZW4sIGJ1dCB0aGVyZSBpcyBubyAtLXJlZmVyZW5jZSIpKTsKKwkJb3B0aW9uX2Rpc3NvY2lhdGUgPSAwOworCX0KKworCWZldGNoX3BhdHRlcm4gPSB2YWx1ZS5idWY7CisJcmVmc3BlYyA9IHBhcnNlX2ZldGNoX3JlZnNwZWMoMSwgJmZldGNoX3BhdHRlcm4pOworCisJc3RyYnVmX3Jlc2V0KCZ2YWx1ZSk7CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KG9wdGlvbl9vcmlnaW4pOworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCByZW1vdGUtPnVybFswXSk7CisJdHJhbnNwb3J0X3NldF92ZXJib3NpdHkodHJhbnNwb3J0LCBvcHRpb25fdmVyYm9zaXR5LCBvcHRpb25fcHJvZ3Jlc3MpOworCisJcGF0aCA9IGdldF9yZXBvX3BhdGgocmVtb3RlLT51cmxbMF0sICZpc19idW5kbGUpOworCWlzX2xvY2FsID0gb3B0aW9uX2xvY2FsICE9IDAgJiYgcGF0aCAmJiAhaXNfYnVuZGxlOworCWlmIChpc19sb2NhbCkgeworCQlpZiAob3B0aW9uX2RlcHRoKQorCQkJd2FybmluZyhfKCItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIpKTsKKwkJaWYgKCFhY2Nlc3MobWtwYXRoKCIlcy9zaGFsbG93IiwgcGF0aCksIEZfT0spKSB7CisJCQlpZiAob3B0aW9uX2xvY2FsID4gMCkKKwkJCQl3YXJuaW5nKF8oInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiKSk7CisJCQlpc19sb2NhbCA9IDA7CisJCX0KKwl9CisJaWYgKG9wdGlvbl9sb2NhbCA+IDAgJiYgIWlzX2xvY2FsKQorCQl3YXJuaW5nKF8oIi0tbG9jYWwgaXMgaWdub3JlZCIpKTsKKwl0cmFuc3BvcnQtPmNsb25pbmcgPSAxOworCisJaWYgKCF0cmFuc3BvcnQtPmdldF9yZWZzX2xpc3QgfHwgKCFpc19sb2NhbCAmJiAhdHJhbnNwb3J0LT5mZXRjaCkpCisJCWRpZShfKCJEb24ndCBrbm93IGhvdyB0byBjbG9uZSAlcyIpLCB0cmFuc3BvcnQtPnVybCk7CisKKwl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9LRUVQLCAieWVzIik7CisKKwlpZiAob3B0aW9uX2RlcHRoKQorCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9ERVBUSCwKKwkJCQkgICAgIG9wdGlvbl9kZXB0aCk7CisJaWYgKG9wdGlvbl9zaW5nbGVfYnJhbmNoKQorCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9GT0xMT1dUQUdTLCAiMSIpOworCisJaWYgKG9wdGlvbl91cGxvYWRfcGFjaykKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVVBMT0FEUEFDSywKKwkJCQkgICAgIG9wdGlvbl91cGxvYWRfcGFjayk7CisKKwlpZiAodHJhbnNwb3J0LT5zbWFydF9vcHRpb25zICYmICFvcHRpb25fZGVwdGgpCisJCXRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucy0+Y2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCA9IDE7CisKKwlyZWZzID0gdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyh0cmFuc3BvcnQpOworCisJaWYgKHJlZnMpIHsKKwkJbWFwcGVkX3JlZnMgPSB3YW50ZWRfcGVlcl9yZWZzKHJlZnMsIHJlZnNwZWMpOworCQkvKgorCQkgKiB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKCkgbWF5IHJldHVybiByZWZzIHdpdGggbnVsbCBzaGEtMQorCQkgKiBpbiBtYXBwZWRfcmVmcyAoc2VlIHN0cnVjdCB0cmFuc3BvcnQtPmdldF9yZWZzX2xpc3QKKwkJICogY29tbWVudCkuIEluIHRoYXQgY2FzZSB3ZSBuZWVkIGZldGNoIGl0IGVhcmx5IGJlY2F1c2UKKwkJICogcmVtb3RlX2hlYWQgY29kZSBiZWxvdyByZWxpZXMgb24gaXQuCisJCSAqCisJCSAqIGZvciBub3JtYWwgY2xvbmVzLCB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKCkgc2hvdWxkCisJCSAqIHJldHVybiByZWxpYWJsZSByZWYgc2V0LCB3ZSBjYW4gZGVsYXkgY2xvbmluZyB1bnRpbCBhZnRlcgorCQkgKiByZW1vdGUgSEVBRCBjaGVjay4KKwkJICovCisJCWZvciAocmVmID0gcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCQlpZiAoaXNfbnVsbF9zaGExKHJlZi0+b2xkX3NoYTEpKSB7CisJCQkJY29tcGxldGVfcmVmc19iZWZvcmVfZmV0Y2ggPSAwOworCQkJCWJyZWFrOworCQkJfQorCisJCWlmICghaXNfbG9jYWwgJiYgIWNvbXBsZXRlX3JlZnNfYmVmb3JlX2ZldGNoKQorCQkJdHJhbnNwb3J0X2ZldGNoX3JlZnModHJhbnNwb3J0LCBtYXBwZWRfcmVmcyk7CisKKwkJcmVtb3RlX2hlYWQgPSBmaW5kX3JlZl9ieV9uYW1lKHJlZnMsICJIRUFEIik7CisJCXJlbW90ZV9oZWFkX3BvaW50c19hdCA9CisJCQlndWVzc19yZW1vdGVfaGVhZChyZW1vdGVfaGVhZCwgbWFwcGVkX3JlZnMsIDApOworCisJCWlmIChvcHRpb25fYnJhbmNoKSB7CisJCQlvdXJfaGVhZF9wb2ludHNfYXQgPQorCQkJCWZpbmRfcmVtb3RlX2JyYW5jaChtYXBwZWRfcmVmcywgb3B0aW9uX2JyYW5jaCk7CisKKwkJCWlmICghb3VyX2hlYWRfcG9pbnRzX2F0KQorCQkJCWRpZShfKCJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIpLAorCQkJCSAgICBvcHRpb25fYnJhbmNoLCBvcHRpb25fb3JpZ2luKTsKKwkJfQorCQllbHNlCisJCQlvdXJfaGVhZF9wb2ludHNfYXQgPSByZW1vdGVfaGVhZF9wb2ludHNfYXQ7CisJfQorCWVsc2UgeworCQlpZiAob3B0aW9uX2JyYW5jaCkKKwkJCWRpZShfKCJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIpLAorCQkJCQlvcHRpb25fYnJhbmNoLCBvcHRpb25fb3JpZ2luKTsKKworCQl3YXJuaW5nKF8oIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iKSk7CisJCW1hcHBlZF9yZWZzID0gTlVMTDsKKwkJb3VyX2hlYWRfcG9pbnRzX2F0ID0gTlVMTDsKKwkJcmVtb3RlX2hlYWRfcG9pbnRzX2F0ID0gTlVMTDsKKwkJcmVtb3RlX2hlYWQgPSBOVUxMOworCQlvcHRpb25fbm9fY2hlY2tvdXQgPSAxOworCQlpZiAoIW9wdGlvbl9iYXJlKQorCQkJaW5zdGFsbF9icmFuY2hfY29uZmlnKDAsICJtYXN0ZXIiLCBvcHRpb25fb3JpZ2luLAorCQkJCQkgICAgICAicmVmcy9oZWFkcy9tYXN0ZXIiKTsKKwl9CisKKwl3cml0ZV9yZWZzcGVjX2NvbmZpZyhzcmNfcmVmX3ByZWZpeCwgb3VyX2hlYWRfcG9pbnRzX2F0LAorCQkJcmVtb3RlX2hlYWRfcG9pbnRzX2F0LCAmYnJhbmNoX3RvcCk7CisKKwlpZiAoaXNfbG9jYWwpCisJCWNsb25lX2xvY2FsKHBhdGgsIGdpdF9kaXIpOworCWVsc2UgaWYgKHJlZnMgJiYgY29tcGxldGVfcmVmc19iZWZvcmVfZmV0Y2gpCisJCXRyYW5zcG9ydF9mZXRjaF9yZWZzKHRyYW5zcG9ydCwgbWFwcGVkX3JlZnMpOworCisJdXBkYXRlX3JlbW90ZV9yZWZzKHJlZnMsIG1hcHBlZF9yZWZzLCByZW1vdGVfaGVhZF9wb2ludHNfYXQsCisJCQkgICBicmFuY2hfdG9wLmJ1ZiwgcmVmbG9nX21zZy5idWYsIHRyYW5zcG9ydCwgIWlzX2xvY2FsKTsKKworCXVwZGF0ZV9oZWFkKG91cl9oZWFkX3BvaW50c19hdCwgcmVtb3RlX2hlYWQsIHJlZmxvZ19tc2cuYnVmKTsKKworCXRyYW5zcG9ydF91bmxvY2tfcGFjayh0cmFuc3BvcnQpOworCXRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7CisKKwlpZiAob3B0aW9uX2Rpc3NvY2lhdGUpIHsKKwkJY2xvc2VfYWxsX3BhY2tzKCk7CisJCWRpc3NvY2lhdGVfZnJvbV9yZWZlcmVuY2VzKCk7CisJfQorCisJanVua19tb2RlID0gSlVOS19MRUFWRV9SRVBPOworCWVyciA9IGNoZWNrb3V0KCk7CisKKwlzdHJidWZfcmVsZWFzZSgmcmVmbG9nX21zZyk7CisJc3RyYnVmX3JlbGVhc2UoJmJyYW5jaF90b3ApOworCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCXN0cmJ1Zl9yZWxlYXNlKCZ2YWx1ZSk7CisJanVua19tb2RlID0gSlVOS19MRUFWRV9BTEw7CisKKwlmcmVlKHJlZnNwZWMpOworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NvbHVtbi5jIGIvYnVpbHRpbi9jb2x1bW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDk0MTNjCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jb2x1bW4uYwpAQCAtMCwwICsxLDU5IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiY29sdW1uLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jb2x1bW5fdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbG9wdHM7CisKK3N0YXRpYyBpbnQgY29sdW1uX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlyZXR1cm4gZ2l0X2NvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgY2IsICZjb2xvcHRzKTsKK30KKworaW50IGNtZF9jb2x1bW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNvbHVtbl9vcHRpb25zIGNvcHRzOworCWNvbnN0IGNoYXIgKmNvbW1hbmQgPSBOVUxMLCAqcmVhbF9jb21tYW5kID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAiY29tbWFuZCIsICZyZWFsX2NvbW1hbmQsIE5fKCJuYW1lIiksIE5fKCJsb29rdXAgY29uZmlnIHZhcnMiKSksCisJCU9QVF9DT0xVTU4oMCwgIm1vZGUiLCAmY29sb3B0cywgTl8oImxheW91dCB0byB1c2UiKSksCisJCU9QVF9JTlRFR0VSKDAsICJyYXctbW9kZSIsICZjb2xvcHRzLCBOXygibGF5b3V0IHRvIHVzZSIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgIndpZHRoIiwgJmNvcHRzLndpZHRoLCBOXygiTWF4aW11bSB3aWR0aCIpKSwKKwkJT1BUX1NUUklORygwLCAiaW5kZW50IiwgJmNvcHRzLmluZGVudCwgTl8oInN0cmluZyIpLCBOXygiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgIm5sIiwgJmNvcHRzLm5sLCBOXygiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiKSksCisJCU9QVF9JTlRFR0VSKDAsICJwYWRkaW5nIiwgJmNvcHRzLnBhZGRpbmcsIE5fKCJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCS8qIFRoaXMgb25lIGlzIHNwZWNpYWwgYW5kIG11c3QgYmUgdGhlIGZpcnN0IG9uZSAqLworCWlmIChhcmdjID4gMSAmJiBzdGFydHNfd2l0aChhcmd2WzFdLCAiLS1jb21tYW5kPSIpKSB7CisJCWNvbW1hbmQgPSBhcmd2WzFdICsgMTA7CisJCWdpdF9jb25maWcoY29sdW1uX2NvbmZpZywgKHZvaWQgKiljb21tYW5kKTsKKwl9IGVsc2UKKwkJZ2l0X2NvbmZpZyhjb2x1bW5fY29uZmlnLCBOVUxMKTsKKworCW1lbXNldCgmY29wdHMsIDAsIHNpemVvZihjb3B0cykpOworCWNvcHRzLndpZHRoID0gdGVybV9jb2x1bW5zKCk7CisJY29wdHMucGFkZGluZyA9IDE7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgIiIsIG9wdGlvbnMsIGJ1aWx0aW5fY29sdW1uX3VzYWdlLCAwKTsKKwlpZiAoYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY29sdW1uX3VzYWdlLCBvcHRpb25zKTsKKwlpZiAocmVhbF9jb21tYW5kIHx8IGNvbW1hbmQpIHsKKwkJaWYgKCFyZWFsX2NvbW1hbmQgfHwgIWNvbW1hbmQgfHwgc3RyY21wKHJlYWxfY29tbWFuZCwgY29tbWFuZCkpCisJCQlkaWUoXygiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IikpOworCX0KKwlmaW5hbGl6ZV9jb2xvcHRzKCZjb2xvcHRzLCAtMSk7CisJd2hpbGUgKCFzdHJidWZfZ2V0bGluZSgmc2IsIHN0ZGluLCAnXG4nKSkKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZsaXN0LCBzYi5idWYpOworCisJcHJpbnRfY29sdW1ucygmbGlzdCwgY29sb3B0cywgJmNvcHRzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29tbWl0LXRyZWUuYyBiL2J1aWx0aW4vY29tbWl0LXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQ3YzBmCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jb21taXQtdHJlZS5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGNvbW1pdF90cmVlX3VzYWdlW10gPSAiZ2l0IGNvbW1pdC10cmVlIFsoLXAgPHNoYTE+KS4uLl0gWy1TWzxrZXlpZD5dXSBbLW0gPG1lc3NhZ2U+XSBbLUYgPGZpbGU+XSA8c2hhMT4iOworCitzdGF0aWMgY29uc3QgY2hhciAqc2lnbl9jb21taXQ7CisKK3N0YXRpYyB2b2lkIG5ld19wYXJlbnQoc3RydWN0IGNvbW1pdCAqcGFyZW50LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKipwYXJlbnRzX3ApCit7CisJdW5zaWduZWQgY2hhciAqc2hhMSA9IHBhcmVudC0+b2JqZWN0LnNoYTE7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCWZvciAocGFyZW50cyA9ICpwYXJlbnRzX3A7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CisJCWlmIChwYXJlbnRzLT5pdGVtID09IHBhcmVudCkgeworCQkJZXJyb3IoImR1cGxpY2F0ZSBwYXJlbnQgJXMgaWdub3JlZCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCXJldHVybjsKKwkJfQorCQlwYXJlbnRzX3AgPSAmcGFyZW50cy0+bmV4dDsKKwl9CisJY29tbWl0X2xpc3RfaW5zZXJ0KHBhcmVudCwgcGFyZW50c19wKTsKK30KKworc3RhdGljIGludCBjb21taXRfdHJlZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaW50IHN0YXR1cyA9IGdpdF9ncGdfY29uZmlnKHZhciwgdmFsdWUsIE5VTEwpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJaWYgKCFzdHJjbXAodmFyLCAiY29tbWl0LmdwZ3NpZ24iKSkgeworCQlzaWduX2NvbW1pdCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSA/ICIiIDogTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitpbnQgY21kX2NvbW1pdF90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBnb3RfdHJlZSA9IDA7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHRyZWVfc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciBjb21taXRfc2hhMVsyMF07CisJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKworCWdpdF9jb25maWcoY29tbWl0X3RyZWVfY29uZmlnLCBOVUxMKTsKKworCWlmIChhcmdjIDwgMiB8fCAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShjb21taXRfdHJlZV91c2FnZSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWlmICghc3RyY21wKGFyZywgIi1wIikpIHsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCQlpZiAoYXJnYyA8PSArK2kpCisJCQkJdXNhZ2UoY29tbWl0X3RyZWVfdXNhZ2UpOworCQkJaWYgKGdldF9zaGExX2NvbW1pdChhcmd2W2ldLCBzaGExKSkKKwkJCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgYXJndltpXSk7CisJCQlhc3NlcnRfc2hhMV90eXBlKHNoYTEsIE9CSl9DT01NSVQpOworCQkJbmV3X3BhcmVudChsb29rdXBfY29tbWl0KHNoYTEpLCAmcGFyZW50cyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChza2lwX3ByZWZpeChhcmcsICItUyIsICZzaWduX2NvbW1pdCkpCisJCQljb250aW51ZTsKKworCQlpZiAoIXN0cmNtcChhcmcsICItLW5vLWdwZy1zaWduIikpIHsKKwkJCXNpZ25fY29tbWl0ID0gTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLW0iKSkgeworCQkJaWYgKGFyZ2MgPD0gKytpKQorCQkJCXVzYWdlKGNvbW1pdF90cmVlX3VzYWdlKTsKKwkJCWlmIChidWZmZXIubGVuKQorCQkJCXN0cmJ1Zl9hZGRjaCgmYnVmZmVyLCAnXG4nKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZmZlciwgYXJndltpXSk7CisJCQlzdHJidWZfY29tcGxldGVfbGluZSgmYnVmZmVyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLUYiKSkgeworCQkJaW50IGZkOworCisJCQlpZiAoYXJnYyA8PSArK2kpCisJCQkJdXNhZ2UoY29tbWl0X3RyZWVfdXNhZ2UpOworCQkJaWYgKGJ1ZmZlci5sZW4pCisJCQkJc3RyYnVmX2FkZGNoKCZidWZmZXIsICdcbicpOworCQkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0iKSkKKwkJCQlmZCA9IDA7CisJCQllbHNlIHsKKwkJCQlmZCA9IG9wZW4oYXJndltpXSwgT19SRE9OTFkpOworCQkJCWlmIChmZCA8IDApCisJCQkJCWRpZV9lcnJubygiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gb3BlbiAnJXMnIiwKKwkJCQkJCSAgYXJndltpXSk7CisJCQl9CisJCQlpZiAoc3RyYnVmX3JlYWQoJmJ1ZmZlciwgZmQsIDApIDwgMCkKKwkJCQlkaWVfZXJybm8oImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQgJyVzJyIsCisJCQkJCSAgYXJndltpXSk7CisJCQlpZiAoZmQgJiYgY2xvc2UoZmQpKQorCQkJCWRpZV9lcnJubygiZ2l0IGNvbW1pdC10cmVlOiBmYWlsZWQgdG8gY2xvc2UgJyVzJyIsCisJCQkJCSAgYXJndltpXSk7CisJCQlzdHJidWZfY29tcGxldGVfbGluZSgmYnVmZmVyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGdldF9zaGExX3RyZWUoYXJnLCB0cmVlX3NoYTEpKQorCQkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZyk7CisJCWlmIChnb3RfdHJlZSkKKwkJCWRpZSgiQ2Fubm90IGdpdmUgbW9yZSB0aGFuIG9uZSB0cmVlcyIpOworCQlnb3RfdHJlZSA9IDE7CisJfQorCisJaWYgKCFidWZmZXIubGVuKSB7CisJCWlmIChzdHJidWZfcmVhZCgmYnVmZmVyLCAwLCAwKSA8IDApCisJCQlkaWVfZXJybm8oImdpdCBjb21taXQtdHJlZTogZmFpbGVkIHRvIHJlYWQiKTsKKwl9CisKKwlpZiAoY29tbWl0X3RyZWUoYnVmZmVyLmJ1ZiwgYnVmZmVyLmxlbiwgdHJlZV9zaGExLCBwYXJlbnRzLAorCQkJY29tbWl0X3NoYTEsIE5VTEwsIHNpZ25fY29tbWl0KSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoY29tbWl0X3NoYTEpKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29tbWl0LmMgYi9idWlsdGluL2NvbW1pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjYTA5ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NvbW1pdC5jCkBAIC0wLDAgKzEsMTgwNiBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBjb21taXQiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQHJlZGhhdC5jb20+CisgKiBCYXNlZCBvbiBnaXQtY29tbWl0LnNoIGJ5IEp1bmlvIEMgSGFtYW5vIGFuZCBMaW51cyBUb3J2YWxkcworICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAid3Qtc3RhdHVzLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiY29sdW1uLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAibm90ZXMtdXRpbHMuaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9jb21taXRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fc3RhdHVzX3VzYWdlW10gPSB7CisJTl8oImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgaW1wbGljaXRfaWRlbnRfYWR2aWNlX25vY29uZmlnW10gPQorTl8oIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIGltcGxpY2l0X2lkZW50X2FkdmljZV9jb25maWdbXSA9CitOXygiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgZW1wdHlfYW1lbmRfYWR2aWNlW10gPQorTl8oIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIGVtcHR5X2NoZXJyeV9waWNrX2FkdmljZVtdID0KK05fKCJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIGVtcHR5X2NoZXJyeV9waWNrX2FkdmljZV9zaW5nbGVbXSA9CitOXygiT3RoZXJ3aXNlLCBwbGVhc2UgdXNlICdnaXQgcmVzZXQnXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgZW1wdHlfY2hlcnJ5X3BpY2tfYWR2aWNlX211bHRpW10gPQorTl8oIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlc2V0XG4iCisiXG4iCisiVGhlbiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgd2lsbCByZXN1bWUgY2hlcnJ5LXBpY2tpbmdcbiIKKyJ0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnVzZV9tZXNzYWdlX2J1ZmZlcjsKK3N0YXRpYyBjb25zdCBjaGFyIGNvbW1pdF9lZGl0bXNnW10gPSAiQ09NTUlUX0VESVRNU0ciOworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsgLyogcmVhbCBpbmRleCAqLworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgZmFsc2VfbG9jazsgLyogdXNlZCBvbmx5IGZvciBwYXJ0aWFsIGNvbW1pdHMgKi8KK3N0YXRpYyBlbnVtIHsKKwlDT01NSVRfQVNfSVMgPSAxLAorCUNPTU1JVF9OT1JNQUwsCisJQ09NTUlUX1BBUlRJQUwKK30gY29tbWl0X3N0eWxlOworCitzdGF0aWMgY29uc3QgY2hhciAqbG9nZmlsZSwgKmZvcmNlX2F1dGhvcjsKK3N0YXRpYyBjb25zdCBjaGFyICp0ZW1wbGF0ZV9maWxlOworLyoKKyAqIFRoZSBfbWVzc2FnZSB2YXJpYWJsZXMgYXJlIGNvbW1pdCBuYW1lcyBmcm9tIHdoaWNoIHRvIHRha2UKKyAqIHRoZSBjb21taXQgbWVzc2FnZSBhbmQvb3IgYXV0aG9yc2hpcC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmF1dGhvcl9tZXNzYWdlLCAqYXV0aG9yX21lc3NhZ2VfYnVmZmVyOworc3RhdGljIGNoYXIgKmVkaXRfbWVzc2FnZSwgKnVzZV9tZXNzYWdlOworc3RhdGljIGNoYXIgKmZpeHVwX21lc3NhZ2UsICpzcXVhc2hfbWVzc2FnZTsKK3N0YXRpYyBpbnQgYWxsLCBhbHNvLCBpbnRlcmFjdGl2ZSwgcGF0Y2hfaW50ZXJhY3RpdmUsIG9ubHksIGFtZW5kLCBzaWdub2ZmOworc3RhdGljIGludCBlZGl0X2ZsYWcgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KK3N0YXRpYyBpbnQgcXVpZXQsIHZlcmJvc2UsIG5vX3ZlcmlmeSwgYWxsb3dfZW1wdHksIGRyeV9ydW4sIHJlbmV3X2F1dGhvcnNoaXA7CitzdGF0aWMgaW50IG5vX3Bvc3RfcmV3cml0ZSwgYWxsb3dfZW1wdHlfbWVzc2FnZTsKK3N0YXRpYyBjaGFyICp1bnRyYWNrZWRfZmlsZXNfYXJnLCAqZm9yY2VfZGF0ZSwgKmlnbm9yZV9zdWJtb2R1bGVfYXJnOworc3RhdGljIGNoYXIgKnNpZ25fY29tbWl0OworCisvKgorICogVGhlIGRlZmF1bHQgY29tbWl0IG1lc3NhZ2UgY2xlYW51cCBtb2RlIHdpbGwgcmVtb3ZlIHRoZSBsaW5lcworICogYmVnaW5uaW5nIHdpdGggIyAoc2hlbGwgY29tbWVudHMpIGFuZCBsZWFkaW5nIGFuZCB0cmFpbGluZworICogd2hpdGVzcGFjZXMgKGVtcHR5IGxpbmVzIG9yIGNvbnRhaW5pbmcgb25seSB3aGl0ZXNwYWNlcykKKyAqIGlmIGVkaXRvciBpcyB1c2VkLCBhbmQgb25seSB0aGUgd2hpdGVzcGFjZXMgaWYgdGhlIG1lc3NhZ2UKKyAqIGlzIHNwZWNpZmllZCBleHBsaWNpdGx5LgorICovCitzdGF0aWMgZW51bSB7CisJQ0xFQU5VUF9TUEFDRSwKKwlDTEVBTlVQX05PTkUsCisJQ0xFQU5VUF9TQ0lTU09SUywKKwlDTEVBTlVQX0FMTAorfSBjbGVhbnVwX21vZGU7CitzdGF0aWMgY29uc3QgY2hhciAqY2xlYW51cF9hcmc7CisKK3N0YXRpYyBlbnVtIGNvbW1pdF93aGVuY2Ugd2hlbmNlOworc3RhdGljIGludCBzZXF1ZW5jZXJfaW5fdXNlOworc3RhdGljIGludCB1c2VfZWRpdG9yID0gMSwgaW5jbHVkZV9zdGF0dXMgPSAxOworc3RhdGljIGludCBzaG93X2lnbm9yZWRfaW5fc3RhdHVzLCBoYXZlX29wdGlvbl9tOworc3RhdGljIGNvbnN0IGNoYXIgKm9ubHlfaW5jbHVkZV9hc3N1bWVkOworc3RhdGljIHN0cnVjdCBzdHJidWYgbWVzc2FnZSA9IFNUUkJVRl9JTklUOworCitzdGF0aWMgZW51bSBzdGF0dXNfZm9ybWF0IHsKKwlTVEFUVVNfRk9STUFUX05PTkUgPSAwLAorCVNUQVRVU19GT1JNQVRfTE9ORywKKwlTVEFUVVNfRk9STUFUX1NIT1JULAorCVNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOLAorCisJU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRAorfSBzdGF0dXNfZm9ybWF0ID0gU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRDsKKworc3RhdGljIGludCBvcHRfcGFyc2VfbShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IG9wdC0+dmFsdWU7CisJaWYgKHVuc2V0KSB7CisJCWhhdmVfb3B0aW9uX20gPSAwOworCQlzdHJidWZfc2V0bGVuKGJ1ZiwgMCk7CisJfSBlbHNlIHsKKwkJaGF2ZV9vcHRpb25fbSA9IDE7CisJCWlmIChidWYtPmxlbikKKwkJCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOworCQlzdHJidWZfYWRkc3RyKGJ1ZiwgYXJnKTsKKwkJc3RyYnVmX2NvbXBsZXRlX2xpbmUoYnVmKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRldGVybWluZV93aGVuY2Uoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpZiAoZmlsZV9leGlzdHMoZ2l0X3BhdGhfbWVyZ2VfaGVhZCgpKSkKKwkJd2hlbmNlID0gRlJPTV9NRVJHRTsKKwllbHNlIGlmIChmaWxlX2V4aXN0cyhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKCkpKSB7CisJCXdoZW5jZSA9IEZST01fQ0hFUlJZX1BJQ0s7CisJCWlmIChmaWxlX2V4aXN0cyhnaXRfcGF0aChTRVFfRElSKSkpCisJCQlzZXF1ZW5jZXJfaW5fdXNlID0gMTsKKwl9CisJZWxzZQorCQl3aGVuY2UgPSBGUk9NX0NPTU1JVDsKKwlpZiAocykKKwkJcy0+d2hlbmNlID0gd2hlbmNlOworfQorCitzdGF0aWMgdm9pZCBzdGF0dXNfaW5pdF9jb25maWcoc3RydWN0IHd0X3N0YXR1cyAqcywgY29uZmlnX2ZuX3QgZm4pCit7CisJd3Rfc3RhdHVzX3ByZXBhcmUocyk7CisJZ2l0bW9kdWxlc19jb25maWcoKTsKKwlnaXRfY29uZmlnKGZuLCBzKTsKKwlkZXRlcm1pbmVfd2hlbmNlKHMpOworCXMtPmhpbnRzID0gYWR2aWNlX3N0YXR1c19oaW50czsgLyogbXVzdCBjb21lIGFmdGVyIGdpdF9jb25maWcoKSAqLworfQorCitzdGF0aWMgdm9pZCByb2xsYmFja19pbmRleF9maWxlcyh2b2lkKQoreworCXN3aXRjaCAoY29tbWl0X3N0eWxlKSB7CisJY2FzZSBDT01NSVRfQVNfSVM6CisJCWJyZWFrOyAvKiBub3RoaW5nIHRvIGRvICovCisJY2FzZSBDT01NSVRfTk9STUFMOgorCQlyb2xsYmFja19sb2NrX2ZpbGUoJmluZGV4X2xvY2spOworCQlicmVhazsKKwljYXNlIENPTU1JVF9QQVJUSUFMOgorCQlyb2xsYmFja19sb2NrX2ZpbGUoJmluZGV4X2xvY2spOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmZhbHNlX2xvY2spOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY29tbWl0X2luZGV4X2ZpbGVzKHZvaWQpCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGNvbW1pdF9zdHlsZSkgeworCWNhc2UgQ09NTUlUX0FTX0lTOgorCQlicmVhazsgLyogbm90aGluZyB0byBkbyAqLworCWNhc2UgQ09NTUlUX05PUk1BTDoKKwkJZXJyID0gY29tbWl0X2xvY2tfZmlsZSgmaW5kZXhfbG9jayk7CisJCWJyZWFrOworCWNhc2UgQ09NTUlUX1BBUlRJQUw6CisJCWVyciA9IGNvbW1pdF9sb2NrX2ZpbGUoJmluZGV4X2xvY2spOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmZhbHNlX2xvY2spOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogVGFrZSBhIHVuaW9uIG9mIHBhdGhzIGluIHRoZSBpbmRleCBhbmQgdGhlIG5hbWVkIHRyZWUgKHR5cGljYWxseSwgIkhFQUQiKSwKKyAqIGFuZCByZXR1cm4gdGhlIHBhdGhzIHRoYXQgbWF0Y2ggdGhlIGdpdmVuIHBhdHRlcm4gaW4gbGlzdC4KKyAqLworc3RhdGljIGludCBsaXN0X3BhdGhzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqd2l0aF90cmVlLAorCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0dGVybikKK3sKKwlpbnQgaSwgcmV0OworCWNoYXIgKm07CisKKwlpZiAoIXBhdHRlcm4tPm5yKQorCQlyZXR1cm4gMDsKKworCW0gPSB4Y2FsbG9jKDEsIHBhdHRlcm4tPm5yKTsKKworCWlmICh3aXRoX3RyZWUpIHsKKwkJY2hhciAqbWF4X3ByZWZpeCA9IGNvbW1vbl9wcmVmaXgocGF0dGVybik7CisJCW92ZXJsYXlfdHJlZV9vbl9jYWNoZSh3aXRoX3RyZWUsIG1heF9wcmVmaXggPyBtYXhfcHJlZml4IDogcHJlZml4KTsKKwkJZnJlZShtYXhfcHJlZml4KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VQREFURSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNlX3BhdGhfbWF0Y2goY2UsIHBhdHRlcm4sIG0pKQorCQkJY29udGludWU7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQobGlzdCwgY2UtPm5hbWUpOworCQlpZiAoY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCQlpdGVtLT51dGlsID0gaXRlbTsgLyogYmV0dGVyIGEgdmFsaWQgcG9pbnRlciB0aGFuIGEgZmFrZSBvbmUgKi8KKwl9CisKKwlyZXQgPSByZXBvcnRfcGF0aF9lcnJvcihtLCBwYXR0ZXJuLCBwcmVmaXgpOworCWZyZWUobSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWRkX3JlbW92ZV9maWxlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpwID0gJihsaXN0LT5pdGVtc1tpXSk7CisKKwkJLyogcC0+dXRpbCBpcyBza2lwLXdvcmt0cmVlICovCisJCWlmIChwLT51dGlsKQorCQkJY29udGludWU7CisKKwkJaWYgKCFsc3RhdChwLT5zdHJpbmcsICZzdCkpIHsKKwkJCWlmIChhZGRfdG9fY2FjaGUocC0+c3RyaW5nLCAmc3QsIDApKQorCQkJCWRpZShfKCJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiKSk7CisJCX0gZWxzZQorCQkJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwLT5zdHJpbmcpOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2Jhc2VfaW5kZXgoY29uc3Qgc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkKQoreworCXN0cnVjdCB0cmVlICp0cmVlOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCXN0cnVjdCB0cmVlX2Rlc2MgdDsKKworCWlmICghY3VycmVudF9oZWFkKSB7CisJCWRpc2NhcmRfY2FjaGUoKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gMTsKKwlvcHRzLmluZGV4X29ubHkgPSAxOworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisKKwlvcHRzLmZuID0gb25ld2F5X21lcmdlOworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KGN1cnJlbnRfaGVhZC0+b2JqZWN0LnNoYTEpOworCWlmICghdHJlZSkKKwkJZGllKF8oImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIpKTsKKwlwYXJzZV90cmVlKHRyZWUpOworCWluaXRfdHJlZV9kZXNjKCZ0LCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCWlmICh1bnBhY2tfdHJlZXMoMSwgJnQsICZvcHRzKSkKKwkJZXhpdCgxMjgpOyAvKiBXZSd2ZSBhbHJlYWR5IHJlcG9ydGVkIHRoZSBlcnJvciwgZmluaXNoIGR5aW5nICovCit9CisKK3N0YXRpYyB2b2lkIHJlZnJlc2hfY2FjaGVfb3JfZGllKGludCByZWZyZXNoX2ZsYWdzKQoreworCS8qCisJICogcmVmcmVzaF9mbGFncyBjb250YWlucyBSRUZSRVNIX1FVSUVULCBzbyB0aGUgb25seSBlcnJvcnMKKwkgKiBhcmUgZm9yIHVubWVyZ2VkIGVudHJpZXMuCisJICovCisJaWYgKHJlZnJlc2hfY2FjaGUocmVmcmVzaF9mbGFncyB8IFJFRlJFU0hfSU5fUE9SQ0VMQUlOKSkKKwkJZGllX3Jlc29sdmVfY29uZmxpY3QoImNvbW1pdCIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcHJlcGFyZV9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgY29uc3Qgc3RydWN0IGNvbW1pdCAqY3VycmVudF9oZWFkLCBpbnQgaXNfc3RhdHVzKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBwYXJ0aWFsOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlpbnQgcmVmcmVzaF9mbGFncyA9IFJFRlJFU0hfUVVJRVQ7CisJY29uc3QgY2hhciAqcmV0OworCisJaWYgKGlzX3N0YXR1cykKKwkJcmVmcmVzaF9mbGFncyB8PSBSRUZSRVNIX1VOTUVSR0VEOworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMLAorCQkgICAgICAgcHJlZml4LCBhcmd2KTsKKworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoJnBhdGhzcGVjKSA8IDApCisJCWRpZShfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisKKwlpZiAoaW50ZXJhY3RpdmUpIHsKKwkJY2hhciAqb2xkX2luZGV4X2VudiA9IE5VTEw7CisJCWhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCAxKTsKKworCQlyZWZyZXNoX2NhY2hlX29yX2RpZShyZWZyZXNoX2ZsYWdzKTsKKworCQlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZpbmRleF9sb2NrLCBDTE9TRV9MT0NLKSkKKwkJCWRpZShfKCJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIpKTsKKworCQlvbGRfaW5kZXhfZW52ID0gZ2V0ZW52KElOREVYX0VOVklST05NRU5UKTsKKwkJc2V0ZW52KElOREVYX0VOVklST05NRU5ULCBnZXRfbG9ja19maWxlX3BhdGgoJmluZGV4X2xvY2spLCAxKTsKKworCQlpZiAoaW50ZXJhY3RpdmVfYWRkKGFyZ2MsIGFyZ3YsIHByZWZpeCwgcGF0Y2hfaW50ZXJhY3RpdmUpICE9IDApCisJCQlkaWUoXygiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIpKTsKKworCQlpZiAob2xkX2luZGV4X2VudiAmJiAqb2xkX2luZGV4X2VudikKKwkJCXNldGVudihJTkRFWF9FTlZJUk9OTUVOVCwgb2xkX2luZGV4X2VudiwgMSk7CisJCWVsc2UKKwkJCXVuc2V0ZW52KElOREVYX0VOVklST05NRU5UKTsKKworCQlkaXNjYXJkX2NhY2hlKCk7CisJCXJlYWRfY2FjaGVfZnJvbShnZXRfbG9ja19maWxlX3BhdGgoJmluZGV4X2xvY2spKTsKKwkJaWYgKHVwZGF0ZV9tYWluX2NhY2hlX3RyZWUoV1JJVEVfVFJFRV9TSUxFTlQpID09IDApIHsKKwkJCWlmIChyZW9wZW5fbG9ja19maWxlKCZpbmRleF9sb2NrKSA8IDApCisJCQkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIikpOworCQkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmaW5kZXhfbG9jaywgQ0xPU0VfTE9DSykpCisJCQkJZGllKF8oInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IikpOworCQl9IGVsc2UKKwkJCXdhcm5pbmcoXygiRmFpbGVkIHRvIHVwZGF0ZSBtYWluIGNhY2hlIHRyZWUiKSk7CisKKwkJY29tbWl0X3N0eWxlID0gQ09NTUlUX05PUk1BTDsKKwkJcmV0dXJuIGdldF9sb2NrX2ZpbGVfcGF0aCgmaW5kZXhfbG9jayk7CisJfQorCisJLyoKKwkgKiBOb24gcGFydGlhbCwgbm9uIGFzLWlzIGNvbW1pdC4KKwkgKgorCSAqICgxKSBnZXQgdGhlIHJlYWwgaW5kZXg7CisJICogKDIpIHVwZGF0ZSB0aGVfaW5kZXggYXMgbmVjZXNzYXJ5OworCSAqICgzKSB3cml0ZSB0aGVfaW5kZXggb3V0IHRvIHRoZSByZWFsIGluZGV4IChzdGlsbCBsb2NrZWQpOworCSAqICg0KSByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGxvY2tlZCBpbmRleCBmaWxlLgorCSAqCisJICogVGhlIGNhbGxlciBzaG91bGQgcnVuIGhvb2tzIG9uIHRoZSBsb2NrZWQgcmVhbCBpbmRleCwgYW5kCisJICogKEEpIGlmIGFsbCBnb2VzIHdlbGwsIGNvbW1pdCB0aGUgcmVhbCBpbmRleDsKKwkgKiAoQikgb24gZmFpbHVyZSwgcm9sbGJhY2sgdGhlIHJlYWwgaW5kZXguCisJICovCisJaWYgKGFsbCB8fCAoYWxzbyAmJiBwYXRoc3BlYy5ucikpIHsKKwkJaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIDEpOworCQlhZGRfZmlsZXNfdG9fY2FjaGUoYWxzbyA/IHByZWZpeCA6IE5VTEwsICZwYXRoc3BlYywgMCk7CisJCXJlZnJlc2hfY2FjaGVfb3JfZGllKHJlZnJlc2hfZmxhZ3MpOworCQl1cGRhdGVfbWFpbl9jYWNoZV90cmVlKFdSSVRFX1RSRUVfU0lMRU5UKTsKKwkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmaW5kZXhfbG9jaywgQ0xPU0VfTE9DSykpCisJCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIikpOworCQljb21taXRfc3R5bGUgPSBDT01NSVRfTk9STUFMOworCQlyZXR1cm4gZ2V0X2xvY2tfZmlsZV9wYXRoKCZpbmRleF9sb2NrKTsKKwl9CisKKwkvKgorCSAqIEFzLWlzIGNvbW1pdC4KKwkgKgorCSAqICgxKSByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHJlYWwgaW5kZXggZmlsZS4KKwkgKgorCSAqIFRoZSBjYWxsZXIgc2hvdWxkIHJ1biBob29rcyBvbiB0aGUgcmVhbCBpbmRleCwKKwkgKiBhbmQgY3JlYXRlIGNvbW1pdCBmcm9tIHRoZV9pbmRleC4KKwkgKiBXZSBzdGlsbCBuZWVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IGhlcmUuCisJICovCisJaWYgKCFvbmx5ICYmICFwYXRoc3BlYy5ucikgeworCQlob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgMSk7CisJCXJlZnJlc2hfY2FjaGVfb3JfZGllKHJlZnJlc2hfZmxhZ3MpOworCQlpZiAoYWN0aXZlX2NhY2hlX2NoYW5nZWQKKwkJICAgIHx8ICFjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKGFjdGl2ZV9jYWNoZV90cmVlKSkKKwkJCXVwZGF0ZV9tYWluX2NhY2hlX3RyZWUoV1JJVEVfVFJFRV9TSUxFTlQpOworCQlpZiAoYWN0aXZlX2NhY2hlX2NoYW5nZWQpIHsKKwkJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmluZGV4X2xvY2ssCisJCQkJCSAgICAgICBDT01NSVRfTE9DSykpCisJCQkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIpKTsKKwkJfSBlbHNlIHsKKwkJCXJvbGxiYWNrX2xvY2tfZmlsZSgmaW5kZXhfbG9jayk7CisJCX0KKwkJY29tbWl0X3N0eWxlID0gQ09NTUlUX0FTX0lTOworCQlyZXR1cm4gZ2V0X2luZGV4X2ZpbGUoKTsKKwl9CisKKwkvKgorCSAqIEEgcGFydGlhbCBjb21taXQuCisJICoKKwkgKiAoMCkgZmluZCB0aGUgc2V0IG9mIGFmZmVjdGVkIHBhdGhzOworCSAqICgxKSBnZXQgbG9jayBvbiB0aGUgcmVhbCBpbmRleCBmaWxlOworCSAqICgyKSB1cGRhdGUgdGhlX2luZGV4IHdpdGggdGhlIGdpdmVuIHBhdGhzOworCSAqICgzKSB3cml0ZSB0aGVfaW5kZXggb3V0IHRvIHRoZSByZWFsIGluZGV4IChzdGlsbCBsb2NrZWQpOworCSAqICg0KSBnZXQgbG9jayBvbiB0aGUgZmFsc2UgaW5kZXggZmlsZTsKKwkgKiAoNSkgcmVzZXQgdGhlX2luZGV4IGZyb20gSEVBRDsKKwkgKiAoNikgdXBkYXRlIHRoZV9pbmRleCB0aGUgc2FtZSB3YXkgYXMgKDIpOworCSAqICg3KSB3cml0ZSB0aGVfaW5kZXggb3V0IHRvIHRoZSBmYWxzZSBpbmRleCBmaWxlOworCSAqICg4KSByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGZhbHNlIGluZGV4IGZpbGUgKHN0aWxsIGxvY2tlZCk7CisJICoKKwkgKiBUaGUgY2FsbGVyIHNob3VsZCBydW4gaG9va3Mgb24gdGhlIGxvY2tlZCBmYWxzZSBpbmRleCwgYW5kCisJICogY3JlYXRlIGNvbW1pdCBmcm9tIGl0LiAgVGhlbgorCSAqIChBKSBpZiBhbGwgZ29lcyB3ZWxsLCBjb21taXQgdGhlIHJlYWwgaW5kZXg7CisJICogKEIpIG9uIGZhaWx1cmUsIHJvbGxiYWNrIHRoZSByZWFsIGluZGV4OworCSAqIEluIGVpdGhlciBjYXNlLCByb2xsYmFjayB0aGUgZmFsc2UgaW5kZXguCisJICovCisJY29tbWl0X3N0eWxlID0gQ09NTUlUX1BBUlRJQUw7CisKKwlpZiAod2hlbmNlICE9IEZST01fQ09NTUlUKSB7CisJCWlmICh3aGVuY2UgPT0gRlJPTV9NRVJHRSkKKwkJCWRpZShfKCJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iKSk7CisJCWVsc2UgaWYgKHdoZW5jZSA9PSBGUk9NX0NIRVJSWV9QSUNLKQorCQkJZGllKF8oImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIpKTsKKwl9CisKKwlzdHJpbmdfbGlzdF9pbml0KCZwYXJ0aWFsLCAxKTsKKwlpZiAobGlzdF9wYXRocygmcGFydGlhbCwgIWN1cnJlbnRfaGVhZCA/IE5VTEwgOiAiSEVBRCIsIHByZWZpeCwgJnBhdGhzcGVjKSkKKwkJZXhpdCgxKTsKKworCWRpc2NhcmRfY2FjaGUoKTsKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKF8oImNhbm5vdCByZWFkIHRoZSBpbmRleCIpKTsKKworCWhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCAxKTsKKwlhZGRfcmVtb3ZlX2ZpbGVzKCZwYXJ0aWFsKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworCXVwZGF0ZV9tYWluX2NhY2hlX3RyZWUoV1JJVEVfVFJFRV9TSUxFTlQpOworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmluZGV4X2xvY2ssIENMT1NFX0xPQ0spKQorCQlkaWUoXygidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIikpOworCisJaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmZmFsc2VfbG9jaywKKwkJCQkgIGdpdF9wYXRoKCJuZXh0LWluZGV4LSUiUFJJdU1BWCwKKwkJCQkJICAgKHVpbnRtYXhfdCkgZ2V0cGlkKCkpLAorCQkJCSAgTE9DS19ESUVfT05fRVJST1IpOworCisJY3JlYXRlX2Jhc2VfaW5kZXgoY3VycmVudF9oZWFkKTsKKwlhZGRfcmVtb3ZlX2ZpbGVzKCZwYXJ0aWFsKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworCisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmZmFsc2VfbG9jaywgQ0xPU0VfTE9DSykpCisJCWRpZShfKCJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiKSk7CisKKwlkaXNjYXJkX2NhY2hlKCk7CisJcmV0ID0gZ2V0X2xvY2tfZmlsZV9wYXRoKCZmYWxzZV9sb2NrKTsKKwlyZWFkX2NhY2hlX2Zyb20ocmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJ1bl9zdGF0dXMoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmluZGV4X2ZpbGUsIGNvbnN0IGNoYXIgKnByZWZpeCwgaW50IG5vd2FybiwKKwkJICAgICAgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJaWYgKHMtPnJlbGF0aXZlX3BhdGhzKQorCQlzLT5wcmVmaXggPSBwcmVmaXg7CisKKwlpZiAoYW1lbmQpIHsKKwkJcy0+YW1lbmQgPSAxOworCQlzLT5yZWZlcmVuY2UgPSAiSEVBRF4xIjsKKwl9CisJcy0+dmVyYm9zZSA9IHZlcmJvc2U7CisJcy0+aW5kZXhfZmlsZSA9IGluZGV4X2ZpbGU7CisJcy0+ZnAgPSBmcDsKKwlzLT5ub3dhcm4gPSBub3dhcm47CisJcy0+aXNfaW5pdGlhbCA9IGdldF9zaGExKHMtPnJlZmVyZW5jZSwgc2hhMSkgPyAxIDogMDsKKworCXd0X3N0YXR1c19jb2xsZWN0KHMpOworCisJc3dpdGNoIChzdGF0dXNfZm9ybWF0KSB7CisJY2FzZSBTVEFUVVNfRk9STUFUX1NIT1JUOgorCQl3dF9zaG9ydHN0YXR1c19wcmludChzKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTjoKKwkJd3RfcG9yY2VsYWluX3ByaW50KHMpOworCQlicmVhazsKKwljYXNlIFNUQVRVU19GT1JNQVRfVU5TUEVDSUZJRUQ6CisJCWRpZSgiQlVHOiBmaW5hbGl6ZV9kZWZlcnJlZF9jb25maWcoKSBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCIpOworCQlicmVhazsKKwljYXNlIFNUQVRVU19GT1JNQVRfTk9ORToKKwljYXNlIFNUQVRVU19GT1JNQVRfTE9ORzoKKwkJd3Rfc3RhdHVzX3ByaW50KHMpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcy0+Y29tbWl0YWJsZTsKK30KKworc3RhdGljIGludCBpc19hX21lcmdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZCkKK3sKKwlyZXR1cm4gISEoY3VycmVudF9oZWFkLT5wYXJlbnRzICYmIGN1cnJlbnRfaGVhZC0+cGFyZW50cy0+bmV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydF9zcGxpdF9pZGVudChzdHJ1Y3QgaWRlbnRfc3BsaXQgKmlkLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaWYgKHNwbGl0X2lkZW50X2xpbmUoaWQsIGJ1Zi0+YnVmLCBidWYtPmxlbikgfHwgIWlkLT5kYXRlX2JlZ2luKQorCQlkaWUoIkJVRzogdW5hYmxlIHRvIHBhcnNlIG91ciBvd24gaWRlbnQ6ICVzIiwgYnVmLT5idWYpOworfQorCitzdGF0aWMgdm9pZCBleHBvcnRfb25lKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZSwgaW50IGhhY2spCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpZiAoaGFjaykKKwkJc3RyYnVmX2FkZGNoKCZidWYsIGhhY2spOworCXN0cmJ1Zl9hZGRmKCZidWYsICIlLipzIiwgKGludCkoZSAtIHMpLCBzKTsKKwlzZXRlbnYodmFyLCBidWYuYnVmLCAxKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIGludCBwYXJzZV9mb3JjZV9kYXRlKGNvbnN0IGNoYXIgKmluLCBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJc3RyYnVmX2FkZGNoKG91dCwgJ0AnKTsKKworCWlmIChwYXJzZV9kYXRlKGluLCBvdXQpIDwgMCkgeworCQlpbnQgZXJyb3JzID0gMDsKKwkJdW5zaWduZWQgbG9uZyB0ID0gYXBwcm94aWRhdGVfY2FyZWZ1bChpbiwgJmVycm9ycyk7CisJCWlmIChlcnJvcnMpCisJCQlyZXR1cm4gLTE7CisJCXN0cmJ1Zl9hZGRmKG91dCwgIiVsdSIsIHQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfaWRlbnRfdmFyKGNoYXIgKipidWYsIGNoYXIgKnZhbCkKK3sKKwlmcmVlKCpidWYpOworCSpidWYgPSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGRldGVybWluZV9hdXRob3JfaW5mbyhzdHJ1Y3Qgc3RyYnVmICphdXRob3JfaWRlbnQpCit7CisJY2hhciAqbmFtZSwgKmVtYWlsLCAqZGF0ZTsKKwlzdHJ1Y3QgaWRlbnRfc3BsaXQgYXV0aG9yOworCisJbmFtZSA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoIkdJVF9BVVRIT1JfTkFNRSIpKTsKKwllbWFpbCA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoIkdJVF9BVVRIT1JfRU1BSUwiKSk7CisJZGF0ZSA9IHhzdHJkdXBfb3JfbnVsbChnZXRlbnYoIkdJVF9BVVRIT1JfREFURSIpKTsKKworCWlmIChhdXRob3JfbWVzc2FnZSkgeworCQlzdHJ1Y3QgaWRlbnRfc3BsaXQgaWRlbnQ7CisJCXNpemVfdCBsZW47CisJCWNvbnN0IGNoYXIgKmE7CisKKwkJYSA9IGZpbmRfY29tbWl0X2hlYWRlcihhdXRob3JfbWVzc2FnZV9idWZmZXIsICJhdXRob3IiLCAmbGVuKTsKKwkJaWYgKCFhKQorCQkJZGllKF8oImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiKSwgYXV0aG9yX21lc3NhZ2UpOworCQlpZiAoc3BsaXRfaWRlbnRfbGluZSgmaWRlbnQsIGEsIGxlbikgPCAwKQorCQkJZGllKF8oImNvbW1pdCAnJXMnIGhhcyBtYWxmb3JtZWQgYXV0aG9yIGxpbmUiKSwgYXV0aG9yX21lc3NhZ2UpOworCisJCXNldF9pZGVudF92YXIoJm5hbWUsIHhtZW1kdXB6KGlkZW50Lm5hbWVfYmVnaW4sIGlkZW50Lm5hbWVfZW5kIC0gaWRlbnQubmFtZV9iZWdpbikpOworCQlzZXRfaWRlbnRfdmFyKCZlbWFpbCwgeG1lbWR1cHooaWRlbnQubWFpbF9iZWdpbiwgaWRlbnQubWFpbF9lbmQgLSBpZGVudC5tYWlsX2JlZ2luKSk7CisKKwkJaWYgKGlkZW50LmRhdGVfYmVnaW4pIHsKKwkJCXN0cnVjdCBzdHJidWYgZGF0ZV9idWYgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRjaCgmZGF0ZV9idWYsICdAJyk7CisJCQlzdHJidWZfYWRkKCZkYXRlX2J1ZiwgaWRlbnQuZGF0ZV9iZWdpbiwgaWRlbnQuZGF0ZV9lbmQgLSBpZGVudC5kYXRlX2JlZ2luKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmZGF0ZV9idWYsICcgJyk7CisJCQlzdHJidWZfYWRkKCZkYXRlX2J1ZiwgaWRlbnQudHpfYmVnaW4sIGlkZW50LnR6X2VuZCAtIGlkZW50LnR6X2JlZ2luKTsKKwkJCXNldF9pZGVudF92YXIoJmRhdGUsIHN0cmJ1Zl9kZXRhY2goJmRhdGVfYnVmLCBOVUxMKSk7CisJCX0KKwl9CisKKwlpZiAoZm9yY2VfYXV0aG9yKSB7CisJCXN0cnVjdCBpZGVudF9zcGxpdCBpZGVudDsKKworCQlpZiAoc3BsaXRfaWRlbnRfbGluZSgmaWRlbnQsIGZvcmNlX2F1dGhvciwgc3RybGVuKGZvcmNlX2F1dGhvcikpIDwgMCkKKwkJCWRpZShfKCJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIikpOworCQlzZXRfaWRlbnRfdmFyKCZuYW1lLCB4bWVtZHVweihpZGVudC5uYW1lX2JlZ2luLCBpZGVudC5uYW1lX2VuZCAtIGlkZW50Lm5hbWVfYmVnaW4pKTsKKwkJc2V0X2lkZW50X3ZhcigmZW1haWwsIHhtZW1kdXB6KGlkZW50Lm1haWxfYmVnaW4sIGlkZW50Lm1haWxfZW5kIC0gaWRlbnQubWFpbF9iZWdpbikpOworCX0KKworCWlmIChmb3JjZV9kYXRlKSB7CisJCXN0cnVjdCBzdHJidWYgZGF0ZV9idWYgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKHBhcnNlX2ZvcmNlX2RhdGUoZm9yY2VfZGF0ZSwgJmRhdGVfYnVmKSkKKwkJCWRpZShfKCJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIpLCBmb3JjZV9kYXRlKTsKKwkJc2V0X2lkZW50X3ZhcigmZGF0ZSwgc3RyYnVmX2RldGFjaCgmZGF0ZV9idWYsIE5VTEwpKTsKKwl9CisKKwlzdHJidWZfYWRkc3RyKGF1dGhvcl9pZGVudCwgZm10X2lkZW50KG5hbWUsIGVtYWlsLCBkYXRlLCBJREVOVF9TVFJJQ1QpKTsKKwlhc3NlcnRfc3BsaXRfaWRlbnQoJmF1dGhvciwgYXV0aG9yX2lkZW50KTsKKwlleHBvcnRfb25lKCJHSVRfQVVUSE9SX05BTUUiLCBhdXRob3IubmFtZV9iZWdpbiwgYXV0aG9yLm5hbWVfZW5kLCAwKTsKKwlleHBvcnRfb25lKCJHSVRfQVVUSE9SX0VNQUlMIiwgYXV0aG9yLm1haWxfYmVnaW4sIGF1dGhvci5tYWlsX2VuZCwgMCk7CisJZXhwb3J0X29uZSgiR0lUX0FVVEhPUl9EQVRFIiwgYXV0aG9yLmRhdGVfYmVnaW4sIGF1dGhvci50el9lbmQsICdAJyk7CisJZnJlZShuYW1lKTsKKwlmcmVlKGVtYWlsKTsKKwlmcmVlKGRhdGUpOworfQorCitzdGF0aWMgaW50IGF1dGhvcl9kYXRlX2lzX2ludGVyZXN0aW5nKHZvaWQpCit7CisJcmV0dXJuIGF1dGhvcl9tZXNzYWdlIHx8IGZvcmNlX2RhdGU7Cit9CisKK3N0YXRpYyB2b2lkIGFkanVzdF9jb21tZW50X2xpbmVfY2hhcihjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwljaGFyIGNhbmRpZGF0ZXNbXSA9ICIjO0AhJCVeJnw6IjsKKwljaGFyICpjYW5kaWRhdGU7CisJY29uc3QgY2hhciAqcDsKKworCWNvbW1lbnRfbGluZV9jaGFyID0gY2FuZGlkYXRlc1swXTsKKwlpZiAoIW1lbWNocihzYi0+YnVmLCBjb21tZW50X2xpbmVfY2hhciwgc2ItPmxlbikpCisJCXJldHVybjsKKworCXAgPSBzYi0+YnVmOworCWNhbmRpZGF0ZSA9IHN0cmNocihjYW5kaWRhdGVzLCAqcCk7CisJaWYgKGNhbmRpZGF0ZSkKKwkJKmNhbmRpZGF0ZSA9ICcgJzsKKwlmb3IgKHAgPSBzYi0+YnVmOyAqcDsgcCsrKSB7CisJCWlmICgocFswXSA9PSAnXG4nIHx8IHBbMF0gPT0gJ1xyJykgJiYgcFsxXSkgeworCQkJY2FuZGlkYXRlID0gc3RyY2hyKGNhbmRpZGF0ZXMsIHBbMV0pOworCQkJaWYgKGNhbmRpZGF0ZSkKKwkJCQkqY2FuZGlkYXRlID0gJyAnOworCQl9CisJfQorCisJZm9yIChwID0gY2FuZGlkYXRlczsgKnAgPT0gJyAnOyBwKyspCisJCTsKKwlpZiAoISpwKQorCQlkaWUoXygidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKwkJICAgICAgImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIikpOworCWNvbW1lbnRfbGluZV9jaGFyID0gKnA7Cit9CisKK3N0YXRpYyBpbnQgcHJlcGFyZV90b19jb21taXQoY29uc3QgY2hhciAqaW5kZXhfZmlsZSwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICBzdHJ1Y3QgY29tbWl0ICpjdXJyZW50X2hlYWQsCisJCQkgICAgIHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmF1dGhvcl9pZGVudCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCXN0cnVjdCBzdHJidWYgY29tbWl0dGVyX2lkZW50ID0gU1RSQlVGX0lOSVQ7CisJaW50IGNvbW1pdGFibGU7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmhvb2tfYXJnMSA9IE5VTEw7CisJY29uc3QgY2hhciAqaG9va19hcmcyID0gTlVMTDsKKwlpbnQgY2xlYW5fbWVzc2FnZV9jb250ZW50cyA9IChjbGVhbnVwX21vZGUgIT0gQ0xFQU5VUF9OT05FKTsKKwlpbnQgb2xkX2Rpc3BsYXlfY29tbWVudF9wcmVmaXg7CisKKwkvKiBUaGlzIGNoZWNrcyBhbmQgYmFyZnMgaWYgYXV0aG9yIGlzIGJhZGx5IHNwZWNpZmllZCAqLworCWRldGVybWluZV9hdXRob3JfaW5mbyhhdXRob3JfaWRlbnQpOworCisJaWYgKCFub192ZXJpZnkgJiYgcnVuX2NvbW1pdF9ob29rKHVzZV9lZGl0b3IsIGluZGV4X2ZpbGUsICJwcmUtY29tbWl0IiwgTlVMTCkpCisJCXJldHVybiAwOworCisJaWYgKHNxdWFzaF9tZXNzYWdlKSB7CisJCS8qCisJCSAqIEluc2VydCB0aGUgcHJvcGVyIHN1YmplY3QgbGluZSBiZWZvcmUgb3RoZXIgY29tbWl0CisJCSAqIG1lc3NhZ2Ugb3B0aW9ucyBhZGQgdGhlaXIgY29udGVudC4KKwkJICovCisJCWlmICh1c2VfbWVzc2FnZSAmJiAhc3RyY21wKHVzZV9tZXNzYWdlLCBzcXVhc2hfbWVzc2FnZSkpCisJCQlzdHJidWZfYWRkc3RyKCZzYiwgInNxdWFzaCEgIik7CisJCWVsc2UgeworCQkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwkJCXN0cnVjdCBjb21taXQgKmM7CisJCQljID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShzcXVhc2hfbWVzc2FnZSk7CisJCQlpZiAoIWMpCisJCQkJZGllKF8oImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIiksIHNxdWFzaF9tZXNzYWdlKTsKKwkJCWN0eC5vdXRwdXRfZW5jb2RpbmcgPSBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworCQkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGMsICJzcXVhc2ghICVzXG5cbiIsICZzYiwKKwkJCQkJICAgICAgJmN0eCk7CisJCX0KKwl9CisKKwlpZiAobWVzc2FnZS5sZW4pIHsKKwkJc3RyYnVmX2FkZGJ1Zigmc2IsICZtZXNzYWdlKTsKKwkJaG9va19hcmcxID0gIm1lc3NhZ2UiOworCX0gZWxzZSBpZiAobG9nZmlsZSAmJiAhc3RyY21wKGxvZ2ZpbGUsICItIikpIHsKKwkJaWYgKGlzYXR0eSgwKSkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIikpOworCQlpZiAoc3RyYnVmX3JlYWQoJnNiLCAwLCAwKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiKSk7CisJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKKwl9IGVsc2UgaWYgKGxvZ2ZpbGUpIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBsb2dmaWxlLCAwKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIpLAorCQkJCSAgbG9nZmlsZSk7CisJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKKwl9IGVsc2UgaWYgKHVzZV9tZXNzYWdlKSB7CisJCWNoYXIgKmJ1ZmZlcjsKKwkJYnVmZmVyID0gc3Ryc3RyKHVzZV9tZXNzYWdlX2J1ZmZlciwgIlxuXG4iKTsKKwkJaWYgKGJ1ZmZlcikKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBidWZmZXIgKyAyKTsKKwkJaG9va19hcmcxID0gImNvbW1pdCI7CisJCWhvb2tfYXJnMiA9IHVzZV9tZXNzYWdlOworCX0gZWxzZSBpZiAoZml4dXBfbWVzc2FnZSkgeworCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUoZml4dXBfbWVzc2FnZSk7CisJCWlmICghY29tbWl0KQorCQkJZGllKF8oImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIiksIGZpeHVwX21lc3NhZ2UpOworCQljdHgub3V0cHV0X2VuY29kaW5nID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKKwkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgImZpeHVwISAlc1xuXG4iLAorCQkJCSAgICAgICZzYiwgJmN0eCk7CisJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKKwl9IGVsc2UgaWYgKCFzdGF0KGdpdF9wYXRoX21lcmdlX21zZygpLCAmc3RhdGJ1ZikpIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJnNiLCBnaXRfcGF0aF9tZXJnZV9tc2coKSwgMCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIpKTsKKwkJaG9va19hcmcxID0gIm1lcmdlIjsKKwl9IGVsc2UgaWYgKCFzdGF0KGdpdF9wYXRoX3NxdWFzaF9tc2coKSwgJnN0YXRidWYpKSB7CisJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGhfc3F1YXNoX21zZygpLCAwKSA8IDApCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIpKTsKKwkJaG9va19hcmcxID0gInNxdWFzaCI7CisJfSBlbHNlIGlmICh0ZW1wbGF0ZV9maWxlKSB7CisJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgdGVtcGxhdGVfZmlsZSwgMCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkICclcyciKSwgdGVtcGxhdGVfZmlsZSk7CisJCWhvb2tfYXJnMSA9ICJ0ZW1wbGF0ZSI7CisJCWNsZWFuX21lc3NhZ2VfY29udGVudHMgPSAwOworCX0KKworCS8qCisJICogVGhlIHJlbWFpbmluZyBjYXNlcyBkb24ndCBtb2RpZnkgdGhlIHRlbXBsYXRlIG1lc3NhZ2UsIGJ1dAorCSAqIGp1c3Qgc2V0IHRoZSBhcmd1bWVudChzKSB0byB0aGUgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suCisJICovCisJZWxzZSBpZiAod2hlbmNlID09IEZST01fTUVSR0UpCisJCWhvb2tfYXJnMSA9ICJtZXJnZSI7CisJZWxzZSBpZiAod2hlbmNlID09IEZST01fQ0hFUlJZX1BJQ0spIHsKKwkJaG9va19hcmcxID0gImNvbW1pdCI7CisJCWhvb2tfYXJnMiA9ICJDSEVSUllfUElDS19IRUFEIjsKKwl9CisKKwlpZiAoc3F1YXNoX21lc3NhZ2UpIHsKKwkJLyoKKwkJICogSWYgc3F1YXNoX2NvbW1pdCB3YXMgdXNlZCBmb3IgdGhlIGNvbW1pdCBzdWJqZWN0LAorCQkgKiB0aGVuIHdlJ3JlIHBvc3NpYmx5IGhpamFja2luZyBvdGhlciBjb21taXQgbG9nIG9wdGlvbnMuCisJCSAqIFJlc2V0IHRoZSBob29rIGFyZ3MgdG8gdGVsbCB0aGUgcmVhbCBzdG9yeS4KKwkJICovCisJCWhvb2tfYXJnMSA9ICJtZXNzYWdlIjsKKwkJaG9va19hcmcyID0gIiI7CisJfQorCisJcy0+ZnAgPSBmb3BlbihnaXRfcGF0aChjb21taXRfZWRpdG1zZyksICJ3Iik7CisJaWYgKHMtPmZwID09IE5VTEwpCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIiksIGdpdF9wYXRoKGNvbW1pdF9lZGl0bXNnKSk7CisKKwkvKiBJZ25vcmUgc3RhdHVzLmRpc3BsYXlDb21tZW50UHJlZml4OiB3ZSBkbyBuZWVkIGNvbW1lbnRzIGluIENPTU1JVF9FRElUTVNHLiAqLworCW9sZF9kaXNwbGF5X2NvbW1lbnRfcHJlZml4ID0gcy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeDsKKwlzLT5kaXNwbGF5X2NvbW1lbnRfcHJlZml4ID0gMTsKKworCS8qCisJICogTW9zdCBoaW50cyBhcmUgY291bnRlci1wcm9kdWN0aXZlIHdoZW4gdGhlIGNvbW1pdCBoYXMKKwkgKiBhbHJlYWR5IHN0YXJ0ZWQuCisJICovCisJcy0+aGludHMgPSAwOworCisJaWYgKGNsZWFuX21lc3NhZ2VfY29udGVudHMpCisJCXN0cmJ1Zl9zdHJpcHNwYWNlKCZzYiwgMCk7CisKKwlpZiAoc2lnbm9mZikKKwkJYXBwZW5kX3NpZ25vZmYoJnNiLCBpZ25vcmVfbm9uX3RyYWlsZXIoJnNiKSwgMCk7CisKKwlpZiAoZndyaXRlKHNiLmJ1ZiwgMSwgc2IubGVuLCBzLT5mcCkgPCBzYi5sZW4pCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIikpOworCisJaWYgKGF1dG9fY29tbWVudF9saW5lX2NoYXIpCisJCWFkanVzdF9jb21tZW50X2xpbmVfY2hhcigmc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwkvKiBUaGlzIGNoZWNrcyBpZiBjb21taXR0ZXIgaWRlbnQgaXMgZXhwbGljaXRseSBnaXZlbiAqLworCXN0cmJ1Zl9hZGRzdHIoJmNvbW1pdHRlcl9pZGVudCwgZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVCkpOworCWlmICh1c2VfZWRpdG9yICYmIGluY2x1ZGVfc3RhdHVzKSB7CisJCWludCBpZGVudF9zaG93biA9IDA7CisJCWludCBzYXZlZF9jb2xvcl9zZXR0aW5nOworCQlzdHJ1Y3QgaWRlbnRfc3BsaXQgY2ksIGFpOworCisJCWlmICh3aGVuY2UgIT0gRlJPTV9DT01NSVQpIHsKKwkJCWlmIChjbGVhbnVwX21vZGUgPT0gQ0xFQU5VUF9TQ0lTU09SUykKKwkJCQl3dF9zdGF0dXNfYWRkX2N1dF9saW5lKHMtPmZwKTsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgR0lUX0NPTE9SX05PUk1BTCwKKwkJCSAgICB3aGVuY2UgPT0gRlJPTV9NRVJHRQorCQkJCT8gXygiXG4iCisJCQkJCSJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorCQkJCQkiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorCQkJCQkiCSVzXG4iCisJCQkJCSJhbmQgdHJ5IGFnYWluLlxuIikKKwkJCQk6IF8oIlxuIgorCQkJCQkiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKwkJCQkJIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKwkJCQkJIgklc1xuIgorCQkJCQkiYW5kIHRyeSBhZ2Fpbi5cbiIpLAorCQkJCWdpdF9wYXRoKHdoZW5jZSA9PSBGUk9NX01FUkdFCisJCQkJCSA/ICJNRVJHRV9IRUFEIgorCQkJCQkgOiAiQ0hFUlJZX1BJQ0tfSEVBRCIpKTsKKwkJfQorCisJCWZwcmludGYocy0+ZnAsICJcbiIpOworCQlpZiAoY2xlYW51cF9tb2RlID09IENMRUFOVVBfQUxMKQorCQkJc3RhdHVzX3ByaW50ZihzLCBHSVRfQ09MT1JfTk9STUFMLAorCQkJCV8oIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4iCisJCQkJICAiIExpbmVzIHN0YXJ0aW5nXG53aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkiCisJCQkJICAiIG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iKSwgY29tbWVudF9saW5lX2NoYXIpOworCQllbHNlIGlmIChjbGVhbnVwX21vZGUgPT0gQ0xFQU5VUF9TQ0lTU09SUyAmJiB3aGVuY2UgPT0gRlJPTV9DT01NSVQpCisJCQl3dF9zdGF0dXNfYWRkX2N1dF9saW5lKHMtPmZwKTsKKwkJZWxzZSAvKiBDTEVBTlVQX1NQQUNFLCB0aGF0IGlzLiAqLworCQkJc3RhdHVzX3ByaW50ZihzLCBHSVRfQ09MT1JfTk9STUFMLAorCQkJCV8oIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4iCisJCQkJICAiIExpbmVzIHN0YXJ0aW5nXG4iCisJCQkJICAid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSIKKwkJCQkgICIgeW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisJCQkJICAiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIpLCBjb21tZW50X2xpbmVfY2hhcik7CisJCWlmIChvbmx5X2luY2x1ZGVfYXNzdW1lZCkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgR0lUX0NPTE9SX05PUk1BTCwKKwkJCQkJIiVzIiwgb25seV9pbmNsdWRlX2Fzc3VtZWQpOworCisJCS8qCisJCSAqIFRoZXNlIHNob3VsZCBuZXZlciBmYWlsIGJlY2F1c2UgdGhleSBjb21lIGZyb20gb3VyIG93bgorCQkgKiBmbXRfaWRlbnQuIFRoZXkgbWF5IGZhaWwgdGhlIHNhbmVfaWRlbnQgdGVzdCwgYnV0IHdlIGtub3cKKwkJICogdGhhdCB0aGUgbmFtZSBhbmQgbWFpbCBwb2ludGVycyB3aWxsIGF0IGxlYXN0IGJlIHZhbGlkLAorCQkgKiB3aGljaCBpcyBlbm91Z2ggZm9yIG91ciB0ZXN0cyBhbmQgcHJpbnRpbmcgaGVyZS4KKwkJICovCisJCWFzc2VydF9zcGxpdF9pZGVudCgmYWksIGF1dGhvcl9pZGVudCk7CisJCWFzc2VydF9zcGxpdF9pZGVudCgmY2ksICZjb21taXR0ZXJfaWRlbnQpOworCisJCWlmIChpZGVudF9jbXAoJmFpLCAmY2kpKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLAorCQkJCV8oIiVzIgorCQkJCSJBdXRob3I6ICAgICUuKnMgPCUuKnM+IiksCisJCQkJaWRlbnRfc2hvd24rKyA/ICIiIDogIlxuIiwKKwkJCQkoaW50KShhaS5uYW1lX2VuZCAtIGFpLm5hbWVfYmVnaW4pLCBhaS5uYW1lX2JlZ2luLAorCQkJCShpbnQpKGFpLm1haWxfZW5kIC0gYWkubWFpbF9iZWdpbiksIGFpLm1haWxfYmVnaW4pOworCisJCWlmIChhdXRob3JfZGF0ZV9pc19pbnRlcmVzdGluZygpKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLAorCQkJCV8oIiVzIgorCQkJCSJEYXRlOiAgICAgICVzIiksCisJCQkJaWRlbnRfc2hvd24rKyA/ICIiIDogIlxuIiwKKwkJCQlzaG93X2lkZW50X2RhdGUoJmFpLCBEQVRFX01PREUoTk9STUFMKSkpOworCisJCWlmICghY29tbWl0dGVyX2lkZW50X3N1ZmZpY2llbnRseV9naXZlbigpKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLAorCQkJCV8oIiVzIgorCQkJCSJDb21taXR0ZXI6ICUuKnMgPCUuKnM+IiksCisJCQkJaWRlbnRfc2hvd24rKyA/ICIiIDogIlxuIiwKKwkJCQkoaW50KShjaS5uYW1lX2VuZCAtIGNpLm5hbWVfYmVnaW4pLCBjaS5uYW1lX2JlZ2luLAorCQkJCShpbnQpKGNpLm1haWxfZW5kIC0gY2kubWFpbF9iZWdpbiksIGNpLm1haWxfYmVnaW4pOworCisJCWlmIChpZGVudF9zaG93bikKKwkJCXN0YXR1c19wcmludGZfbG4ocywgR0lUX0NPTE9SX05PUk1BTCwgIiVzIiwgIiIpOworCisJCXNhdmVkX2NvbG9yX3NldHRpbmcgPSBzLT51c2VfY29sb3I7CisJCXMtPnVzZV9jb2xvciA9IDA7CisJCWNvbW1pdGFibGUgPSBydW5fc3RhdHVzKHMtPmZwLCBpbmRleF9maWxlLCBwcmVmaXgsIDEsIHMpOworCQlzLT51c2VfY29sb3IgPSBzYXZlZF9jb2xvcl9zZXR0aW5nOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCWNvbnN0IGNoYXIgKnBhcmVudCA9ICJIRUFEIjsKKworCQlpZiAoIWFjdGl2ZV9uciAmJiByZWFkX2NhY2hlKCkgPCAwKQorCQkJZGllKF8oIkNhbm5vdCByZWFkIGluZGV4IikpOworCisJCWlmIChhbWVuZCkKKwkJCXBhcmVudCA9ICJIRUFEXjEiOworCisJCWlmIChnZXRfc2hhMShwYXJlbnQsIHNoYTEpKQorCQkJY29tbWl0YWJsZSA9ICEhYWN0aXZlX25yOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBVbmxlc3MgdGhlIHVzZXIgZGlkIGV4cGxpY2l0bHkgcmVxdWVzdCBhIHN1Ym1vZHVsZQorCQkJICogaWdub3JlIG1vZGUgYnkgcGFzc2luZyBhIGNvbW1hbmQgbGluZSBvcHRpb24gd2UgZG8KKwkJCSAqIG5vdCBpZ25vcmUgYW55IGNoYW5nZWQgc3VibW9kdWxlIFNIQS0xcyB3aGVuCisJCQkgKiBjb21wYXJpbmcgaW5kZXggYW5kIHBhcmVudCwgbm8gbWF0dGVyIHdoYXQgaXMKKwkJCSAqIGNvbmZpZ3VyZWQuIE90aGVyd2lzZSB3ZSB3b24ndCBjb21taXQgYW55CisJCQkgKiBzdWJtb2R1bGVzIHdoaWNoIHdlcmUgbWFudWFsbHkgc3RhZ2VkLCB3aGljaCB3b3VsZAorCQkJICogYmUgcmVhbGx5IGNvbmZ1c2luZy4KKwkJCSAqLworCQkJaW50IGRpZmZfZmxhZ3MgPSBESUZGX09QVF9PVkVSUklERV9TVUJNT0RVTEVfQ09ORklHOworCQkJaWYgKGlnbm9yZV9zdWJtb2R1bGVfYXJnICYmCisJCQkgICAgIXN0cmNtcChpZ25vcmVfc3VibW9kdWxlX2FyZywgImFsbCIpKQorCQkJCWRpZmZfZmxhZ3MgfD0gRElGRl9PUFRfSUdOT1JFX1NVQk1PRFVMRVM7CisJCQljb21taXRhYmxlID0gaW5kZXhfZGlmZmVyc19mcm9tKHBhcmVudCwgZGlmZl9mbGFncyk7CisJCX0KKwl9CisJc3RyYnVmX3JlbGVhc2UoJmNvbW1pdHRlcl9pZGVudCk7CisKKwlmY2xvc2Uocy0+ZnApOworCisJLyoKKwkgKiBSZWplY3QgYW4gYXR0ZW1wdCB0byByZWNvcmQgYSBub24tbWVyZ2UgZW1wdHkgY29tbWl0IHdpdGhvdXQKKwkgKiBleHBsaWNpdCAtLWFsbG93LWVtcHR5LiBJbiB0aGUgY2hlcnJ5LXBpY2sgY2FzZSwgaXQgbWF5IGJlCisJICogZW1wdHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24sIHdoaWNoIHRoZSB1c2VyIHNob3VsZCBva2F5LgorCSAqLworCWlmICghY29tbWl0YWJsZSAmJiB3aGVuY2UgIT0gRlJPTV9NRVJHRSAmJiAhYWxsb3dfZW1wdHkgJiYKKwkgICAgIShhbWVuZCAmJiBpc19hX21lcmdlKGN1cnJlbnRfaGVhZCkpKSB7CisJCXMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXggPSBvbGRfZGlzcGxheV9jb21tZW50X3ByZWZpeDsKKwkJcnVuX3N0YXR1cyhzdGRvdXQsIGluZGV4X2ZpbGUsIHByZWZpeCwgMCwgcyk7CisJCWlmIChhbWVuZCkKKwkJCWZwdXRzKF8oZW1wdHlfYW1lbmRfYWR2aWNlKSwgc3RkZXJyKTsKKwkJZWxzZSBpZiAod2hlbmNlID09IEZST01fQ0hFUlJZX1BJQ0spIHsKKwkJCWZwdXRzKF8oZW1wdHlfY2hlcnJ5X3BpY2tfYWR2aWNlKSwgc3RkZXJyKTsKKwkJCWlmICghc2VxdWVuY2VyX2luX3VzZSkKKwkJCQlmcHV0cyhfKGVtcHR5X2NoZXJyeV9waWNrX2FkdmljZV9zaW5nbGUpLCBzdGRlcnIpOworCQkJZWxzZQorCQkJCWZwdXRzKF8oZW1wdHlfY2hlcnJ5X3BpY2tfYWR2aWNlX211bHRpKSwgc3RkZXJyKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFJlLXJlYWQgdGhlIGluZGV4IGFzIHByZS1jb21taXQgaG9vayBjb3VsZCBoYXZlIHVwZGF0ZWQgaXQsCisJICogYW5kIHdyaXRlIGl0IG91dCBhcyBhIHRyZWUuICBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHdlIGludm9rZQorCSAqIHRoZSBlZGl0b3IgYW5kIGFmdGVyIHdlIGludm9rZSBydW5fc3RhdHVzIGFib3ZlLgorCSAqLworCWRpc2NhcmRfY2FjaGUoKTsKKwlyZWFkX2NhY2hlX2Zyb20oaW5kZXhfZmlsZSk7CisJaWYgKHVwZGF0ZV9tYWluX2NhY2hlX3RyZWUoMCkpIHsKKwkJZXJyb3IoXygiRXJyb3IgYnVpbGRpbmcgdHJlZXMiKSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChydW5fY29tbWl0X2hvb2sodXNlX2VkaXRvciwgaW5kZXhfZmlsZSwgInByZXBhcmUtY29tbWl0LW1zZyIsCisJCQkgICAgZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpLCBob29rX2FyZzEsIGhvb2tfYXJnMiwgTlVMTCkpCisJCXJldHVybiAwOworCisJaWYgKHVzZV9lZGl0b3IpIHsKKwkJY2hhciBpbmRleFtQQVRIX01BWF07CisJCWNvbnN0IGNoYXIgKmVudlsyXSA9IHsgTlVMTCB9OworCQllbnZbMF0gPSAgaW5kZXg7CisJCXNucHJpbnRmKGluZGV4LCBzaXplb2YoaW5kZXgpLCAiR0lUX0lOREVYX0ZJTEU9JXMiLCBpbmRleF9maWxlKTsKKwkJaWYgKGxhdW5jaF9lZGl0b3IoZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpLCBOVUxMLCBlbnYpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCV8oIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwlpZiAoIW5vX3ZlcmlmeSAmJgorCSAgICBydW5fY29tbWl0X2hvb2sodXNlX2VkaXRvciwgaW5kZXhfZmlsZSwgImNvbW1pdC1tc2ciLCBnaXRfcGF0aChjb21taXRfZWRpdG1zZyksIE5VTEwpKSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlc3RfaXNfZW1wdHkoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBzdGFydCkKK3sKKwlpbnQgaSwgZW9sOworCWNvbnN0IGNoYXIgKm5sOworCisJLyogQ2hlY2sgaWYgdGhlIHJlc3QgaXMganVzdCB3aGl0ZXNwYWNlIGFuZCBTaWduZWQtb2YtYnkncy4gKi8KKwlmb3IgKGkgPSBzdGFydDsgaSA8IHNiLT5sZW47IGkrKykgeworCQlubCA9IG1lbWNocihzYi0+YnVmICsgaSwgJ1xuJywgc2ItPmxlbiAtIGkpOworCQlpZiAobmwpCisJCQllb2wgPSBubCAtIHNiLT5idWY7CisJCWVsc2UKKwkJCWVvbCA9IHNiLT5sZW47CisKKwkJaWYgKHN0cmxlbihzaWduX29mZl9oZWFkZXIpIDw9IGVvbCAtIGkgJiYKKwkJICAgIHN0YXJ0c193aXRoKHNiLT5idWYgKyBpLCBzaWduX29mZl9oZWFkZXIpKSB7CisJCQlpID0gZW9sOworCQkJY29udGludWU7CisJCX0KKwkJd2hpbGUgKGkgPCBlb2wpCisJCQlpZiAoIWlzc3BhY2Uoc2ItPmJ1ZltpKytdKSkKKwkJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEZpbmQgb3V0IGlmIHRoZSBtZXNzYWdlIGluIHRoZSBzdHJidWYgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlIGFuZAorICogU2lnbmVkLW9mZi1ieSBsaW5lcy4KKyAqLworc3RhdGljIGludCBtZXNzYWdlX2lzX2VtcHR5KHN0cnVjdCBzdHJidWYgKnNiKQoreworCWlmIChjbGVhbnVwX21vZGUgPT0gQ0xFQU5VUF9OT05FICYmIHNiLT5sZW4pCisJCXJldHVybiAwOworCXJldHVybiByZXN0X2lzX2VtcHR5KHNiLCAwKTsKK30KKworLyoKKyAqIFNlZSBpZiB0aGUgdXNlciBlZGl0ZWQgdGhlIG1lc3NhZ2UgaW4gdGhlIGVkaXRvciBvciBsZWZ0IHdoYXQKKyAqIHdhcyBpbiB0aGUgdGVtcGxhdGUgaW50YWN0CisgKi8KK3N0YXRpYyBpbnQgdGVtcGxhdGVfdW50b3VjaGVkKHN0cnVjdCBzdHJidWYgKnNiKQoreworCXN0cnVjdCBzdHJidWYgdG1wbCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnN0YXJ0OworCisJaWYgKGNsZWFudXBfbW9kZSA9PSBDTEVBTlVQX05PTkUgJiYgc2ItPmxlbikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXRlbXBsYXRlX2ZpbGUgfHwgc3RyYnVmX3JlYWRfZmlsZSgmdG1wbCwgdGVtcGxhdGVfZmlsZSwgMCkgPD0gMCkKKwkJcmV0dXJuIDA7CisKKwlzdHJidWZfc3RyaXBzcGFjZSgmdG1wbCwgY2xlYW51cF9tb2RlID09IENMRUFOVVBfQUxMKTsKKwlpZiAoIXNraXBfcHJlZml4KHNiLT5idWYsIHRtcGwuYnVmLCAmc3RhcnQpKQorCQlzdGFydCA9IHNiLT5idWY7CisJc3RyYnVmX3JlbGVhc2UoJnRtcGwpOworCXJldHVybiByZXN0X2lzX2VtcHR5KHNiLCBzdGFydCAtIHNiLT5idWYpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZmluZF9hdXRob3JfYnlfbmlja25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWFpbG1hcCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJY29uc3QgY2hhciAqYXZbMjBdOworCWludCBhYyA9IDA7CisKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIi0tYXV0aG9yPSVzIiwgbmFtZSk7CisJYXZbKythY10gPSAiLS1hbGwiOworCWF2WysrYWNdID0gIi1pIjsKKwlhdlsrK2FjXSA9IGJ1Zi5idWY7CisJYXZbKythY10gPSBOVUxMOworCXNldHVwX3JldmlzaW9ucyhhYywgYXYsICZyZXZzLCBOVUxMKTsKKwlyZXZzLm1haWxtYXAgPSAmbWFpbG1hcDsKKwlyZWFkX21haWxtYXAocmV2cy5tYWlsbWFwLCBOVUxMKTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisJY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXZzKTsKKwlpZiAoY29tbWl0KSB7CisJCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisJCWN0eC5kYXRlX21vZGUudHlwZSA9IERBVEVfTk9STUFMOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiVhTiA8JWFFPiIsICZidWYsICZjdHgpOworCQljbGVhcl9tYWlsbWFwKCZtYWlsbWFwKTsKKwkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJfQorCWRpZShfKCItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiKSwgbmFtZSk7Cit9CisKKworc3RhdGljIHZvaWQgaGFuZGxlX3VudHJhY2tlZF9maWxlc19hcmcoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpZiAoIXVudHJhY2tlZF9maWxlc19hcmcpCisJCTsgLyogZGVmYXVsdCBhbHJlYWR5IGluaXRpYWxpemVkICovCisJZWxzZSBpZiAoIXN0cmNtcCh1bnRyYWNrZWRfZmlsZXNfYXJnLCAibm8iKSkKKwkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX05PX1VOVFJBQ0tFRF9GSUxFUzsKKwllbHNlIGlmICghc3RyY21wKHVudHJhY2tlZF9maWxlc19hcmcsICJub3JtYWwiKSkKKwkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX05PUk1BTF9VTlRSQUNLRURfRklMRVM7CisJZWxzZSBpZiAoIXN0cmNtcCh1bnRyYWNrZWRfZmlsZXNfYXJnLCAiYWxsIikpCisJCXMtPnNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19BTExfVU5UUkFDS0VEX0ZJTEVTOworCWVsc2UKKwkJZGllKF8oIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIpLCB1bnRyYWNrZWRfZmlsZXNfYXJnKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJlYWRfY29tbWl0X21lc3NhZ2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBjaGFyICpvdXRfZW5jOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2J5X25hbWUobmFtZSk7CisJaWYgKCFjb21taXQpCisJCWRpZShfKCJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIpLCBuYW1lKTsKKwlvdXRfZW5jID0gZ2V0X2NvbW1pdF9vdXRwdXRfZW5jb2RpbmcoKTsKKwlyZXR1cm4gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgb3V0X2VuYyk7Cit9CisKKy8qCisgKiBFbnVtZXJhdGUgd2hhdCBuZWVkcyB0byBiZSBwcm9wYWdhdGVkIHdoZW4gLS1wb3JjZWxhaW4KKyAqIGlzIG5vdCBpbiBlZmZlY3QgaGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBzdGF0dXNfZGVmZXJyZWRfY29uZmlnIHsKKwllbnVtIHN0YXR1c19mb3JtYXQgc3RhdHVzX2Zvcm1hdDsKKwlpbnQgc2hvd19icmFuY2g7Cit9IHN0YXR1c19kZWZlcnJlZF9jb25maWcgPSB7CisJU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRCwKKwktMSAvKiB1bnNwZWNpZmllZCAqLworfTsKKworc3RhdGljIHZvaWQgZmluYWxpemVfZGVmZXJyZWRfY29uZmlnKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IHVzZV9kZWZlcnJlZF9jb25maWcgPSAoc3RhdHVzX2Zvcm1hdCAhPSBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTiAmJgorCQkJCSAgICFzLT5udWxsX3Rlcm1pbmF0aW9uKTsKKworCWlmIChzLT5udWxsX3Rlcm1pbmF0aW9uKSB7CisJCWlmIChzdGF0dXNfZm9ybWF0ID09IFNUQVRVU19GT1JNQVRfTk9ORSB8fAorCQkgICAgc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX1VOU1BFQ0lGSUVEKQorCQkJc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOOworCQllbHNlIGlmIChzdGF0dXNfZm9ybWF0ID09IFNUQVRVU19GT1JNQVRfTE9ORykKKwkJCWRpZShfKCItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiKSk7CisJfQorCisJaWYgKHVzZV9kZWZlcnJlZF9jb25maWcgJiYgc3RhdHVzX2Zvcm1hdCA9PSBTVEFUVVNfRk9STUFUX1VOU1BFQ0lGSUVEKQorCQlzdGF0dXNfZm9ybWF0ID0gc3RhdHVzX2RlZmVycmVkX2NvbmZpZy5zdGF0dXNfZm9ybWF0OworCWlmIChzdGF0dXNfZm9ybWF0ID09IFNUQVRVU19GT1JNQVRfVU5TUEVDSUZJRUQpCisJCXN0YXR1c19mb3JtYXQgPSBTVEFUVVNfRk9STUFUX05PTkU7CisKKwlpZiAodXNlX2RlZmVycmVkX2NvbmZpZyAmJiBzLT5zaG93X2JyYW5jaCA8IDApCisJCXMtPnNob3dfYnJhbmNoID0gc3RhdHVzX2RlZmVycmVkX2NvbmZpZy5zaG93X2JyYW5jaDsKKwlpZiAocy0+c2hvd19icmFuY2ggPCAwKQorCQlzLT5zaG93X2JyYW5jaCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYW5kX3ZhbGlkYXRlX29wdGlvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZVtdLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkgICAgICBzdHJ1Y3QgY29tbWl0ICpjdXJyZW50X2hlYWQsCisJCQkJICAgICAgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgZiA9IDA7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIHVzYWdlLCAwKTsKKwlmaW5hbGl6ZV9kZWZlcnJlZF9jb25maWcocyk7CisKKwlpZiAoZm9yY2VfYXV0aG9yICYmICFzdHJjaHIoZm9yY2VfYXV0aG9yLCAnPicpKQorCQlmb3JjZV9hdXRob3IgPSBmaW5kX2F1dGhvcl9ieV9uaWNrbmFtZShmb3JjZV9hdXRob3IpOworCisJaWYgKGZvcmNlX2F1dGhvciAmJiByZW5ld19hdXRob3JzaGlwKQorCQlkaWUoXygiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIpKTsKKworCWlmIChsb2dmaWxlIHx8IGhhdmVfb3B0aW9uX20gfHwgdXNlX21lc3NhZ2UgfHwgZml4dXBfbWVzc2FnZSkKKwkJdXNlX2VkaXRvciA9IDA7CisJaWYgKDAgPD0gZWRpdF9mbGFnKQorCQl1c2VfZWRpdG9yID0gZWRpdF9mbGFnOworCisJLyogU2FuaXR5IGNoZWNrIG9wdGlvbnMgKi8KKwlpZiAoYW1lbmQgJiYgIWN1cnJlbnRfaGVhZCkKKwkJZGllKF8oIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIikpOworCWlmIChhbWVuZCAmJiB3aGVuY2UgIT0gRlJPTV9DT01NSVQpIHsKKwkJaWYgKHdoZW5jZSA9PSBGUk9NX01FUkdFKQorCQkJZGllKF8oIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iKSk7CisJCWVsc2UgaWYgKHdoZW5jZSA9PSBGUk9NX0NIRVJSWV9QSUNLKQorCQkJZGllKF8oIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iKSk7CisJfQorCWlmIChmaXh1cF9tZXNzYWdlICYmIHNxdWFzaF9tZXNzYWdlKQorCQlkaWUoXygiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIpKTsKKwlpZiAodXNlX21lc3NhZ2UpCisJCWYrKzsKKwlpZiAoZWRpdF9tZXNzYWdlKQorCQlmKys7CisJaWYgKGZpeHVwX21lc3NhZ2UpCisJCWYrKzsKKwlpZiAobG9nZmlsZSkKKwkJZisrOworCWlmIChmID4gMSkKKwkJZGllKF8oIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIikpOworCWlmIChtZXNzYWdlLmxlbiAmJiBmID4gMCkKKwkJZGllKChfKCJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYvLS1maXh1cC4iKSkpOworCWlmIChmIHx8IG1lc3NhZ2UubGVuKQorCQl0ZW1wbGF0ZV9maWxlID0gTlVMTDsKKwlpZiAoZWRpdF9tZXNzYWdlKQorCQl1c2VfbWVzc2FnZSA9IGVkaXRfbWVzc2FnZTsKKwlpZiAoYW1lbmQgJiYgIXVzZV9tZXNzYWdlICYmICFmaXh1cF9tZXNzYWdlKQorCQl1c2VfbWVzc2FnZSA9ICJIRUFEIjsKKwlpZiAoIXVzZV9tZXNzYWdlICYmIHdoZW5jZSAhPSBGUk9NX0NIRVJSWV9QSUNLICYmIHJlbmV3X2F1dGhvcnNoaXApCisJCWRpZShfKCItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIikpOworCWlmICh1c2VfbWVzc2FnZSkgeworCQl1c2VfbWVzc2FnZV9idWZmZXIgPSByZWFkX2NvbW1pdF9tZXNzYWdlKHVzZV9tZXNzYWdlKTsKKwkJaWYgKCFyZW5ld19hdXRob3JzaGlwKSB7CisJCQlhdXRob3JfbWVzc2FnZSA9IHVzZV9tZXNzYWdlOworCQkJYXV0aG9yX21lc3NhZ2VfYnVmZmVyID0gdXNlX21lc3NhZ2VfYnVmZmVyOworCQl9CisJfQorCWlmICh3aGVuY2UgPT0gRlJPTV9DSEVSUllfUElDSyAmJiAhcmVuZXdfYXV0aG9yc2hpcCkgeworCQlhdXRob3JfbWVzc2FnZSA9ICJDSEVSUllfUElDS19IRUFEIjsKKwkJYXV0aG9yX21lc3NhZ2VfYnVmZmVyID0gcmVhZF9jb21taXRfbWVzc2FnZShhdXRob3JfbWVzc2FnZSk7CisJfQorCisJaWYgKHBhdGNoX2ludGVyYWN0aXZlKQorCQlpbnRlcmFjdGl2ZSA9IDE7CisKKwlpZiAoYWxzbyArIG9ubHkgKyBhbGwgKyBpbnRlcmFjdGl2ZSA+IDEpCisJCWRpZShfKCJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iKSk7CisJaWYgKGFyZ2MgPT0gMCAmJiAoYWxzbyB8fCAob25seSAmJiAhYW1lbmQpKSkKKwkJZGllKF8oIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIpKTsKKwlpZiAoYXJnYyA9PSAwICYmIG9ubHkgJiYgYW1lbmQpCisJCW9ubHlfaW5jbHVkZV9hc3N1bWVkID0gXygiQ2xldmVyLi4uIGFtZW5kaW5nIHRoZSBsYXN0IG9uZSB3aXRoIGRpcnR5IGluZGV4LiIpOworCWlmIChhcmdjID4gMCAmJiAhYWxzbyAmJiAhb25seSkKKwkJb25seV9pbmNsdWRlX2Fzc3VtZWQgPSBfKCJFeHBsaWNpdCBwYXRocyBzcGVjaWZpZWQgd2l0aG91dCAtaSBvciAtbzsgYXNzdW1pbmcgLS1vbmx5IHBhdGhzLi4uIik7CisJaWYgKCFjbGVhbnVwX2FyZyB8fCAhc3RyY21wKGNsZWFudXBfYXJnLCAiZGVmYXVsdCIpKQorCQljbGVhbnVwX21vZGUgPSB1c2VfZWRpdG9yID8gQ0xFQU5VUF9BTEwgOiBDTEVBTlVQX1NQQUNFOworCWVsc2UgaWYgKCFzdHJjbXAoY2xlYW51cF9hcmcsICJ2ZXJiYXRpbSIpKQorCQljbGVhbnVwX21vZGUgPSBDTEVBTlVQX05PTkU7CisJZWxzZSBpZiAoIXN0cmNtcChjbGVhbnVwX2FyZywgIndoaXRlc3BhY2UiKSkKKwkJY2xlYW51cF9tb2RlID0gQ0xFQU5VUF9TUEFDRTsKKwllbHNlIGlmICghc3RyY21wKGNsZWFudXBfYXJnLCAic3RyaXAiKSkKKwkJY2xlYW51cF9tb2RlID0gQ0xFQU5VUF9BTEw7CisJZWxzZSBpZiAoIXN0cmNtcChjbGVhbnVwX2FyZywgInNjaXNzb3JzIikpCisJCWNsZWFudXBfbW9kZSA9IHVzZV9lZGl0b3IgPyBDTEVBTlVQX1NDSVNTT1JTIDogQ0xFQU5VUF9TUEFDRTsKKwllbHNlCisJCWRpZShfKCJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIpLCBjbGVhbnVwX2FyZyk7CisKKwloYW5kbGVfdW50cmFja2VkX2ZpbGVzX2FyZyhzKTsKKworCWlmIChhbGwgJiYgYXJnYyA+IDApCisJCWRpZShfKCJQYXRocyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UuIikpOworCisJaWYgKHN0YXR1c19mb3JtYXQgIT0gU1RBVFVTX0ZPUk1BVF9OT05FKQorCQlkcnlfcnVuID0gMTsKKworCXJldHVybiBhcmdjOworfQorCitzdGF0aWMgaW50IGRyeV9ydW5fY29tbWl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjdXJyZW50X2hlYWQsIHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGNvbW1pdGFibGU7CisJY29uc3QgY2hhciAqaW5kZXhfZmlsZTsKKworCWluZGV4X2ZpbGUgPSBwcmVwYXJlX2luZGV4KGFyZ2MsIGFyZ3YsIHByZWZpeCwgY3VycmVudF9oZWFkLCAxKTsKKwljb21taXRhYmxlID0gcnVuX3N0YXR1cyhzdGRvdXQsIGluZGV4X2ZpbGUsIHByZWZpeCwgMCwgcyk7CisJcm9sbGJhY2tfaW5kZXhfZmlsZXMoKTsKKworCXJldHVybiBjb21taXRhYmxlID8gMCA6IDE7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfc3RhdHVzX3Nsb3QoY29uc3QgY2hhciAqc2xvdCkKK3sKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgImhlYWRlciIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX0hFQURFUjsKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgImJyYW5jaCIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX09OQlJBTkNIOworCWlmICghc3RyY2FzZWNtcChzbG90LCAidXBkYXRlZCIpIHx8ICFzdHJjYXNlY21wKHNsb3QsICJhZGRlZCIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX1VQREFURUQ7CisJaWYgKCFzdHJjYXNlY21wKHNsb3QsICJjaGFuZ2VkIikpCisJCXJldHVybiBXVF9TVEFUVVNfQ0hBTkdFRDsKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgInVudHJhY2tlZCIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX1VOVFJBQ0tFRDsKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgIm5vYnJhbmNoIikpCisJCXJldHVybiBXVF9TVEFUVVNfTk9CUkFOQ0g7CisJaWYgKCFzdHJjYXNlY21wKHNsb3QsICJ1bm1lcmdlZCIpKQorCQlyZXR1cm4gV1RfU1RBVFVTX1VOTUVSR0VEOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBnaXRfc3RhdHVzX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzICpzID0gY2I7CisJY29uc3QgY2hhciAqc2xvdF9uYW1lOworCisJaWYgKHN0YXJ0c193aXRoKGssICJjb2x1bW4uIikpCisJCXJldHVybiBnaXRfY29sdW1uX2NvbmZpZyhrLCB2LCAic3RhdHVzIiwgJnMtPmNvbG9wdHMpOworCWlmICghc3RyY21wKGssICJzdGF0dXMuc3VibW9kdWxlc3VtbWFyeSIpKSB7CisJCWludCBpc19ib29sOworCQlzLT5zdWJtb2R1bGVfc3VtbWFyeSA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoaywgdiwgJmlzX2Jvb2wpOworCQlpZiAoaXNfYm9vbCAmJiBzLT5zdWJtb2R1bGVfc3VtbWFyeSkKKwkJCXMtPnN1Ym1vZHVsZV9zdW1tYXJ5ID0gLTE7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAic3RhdHVzLnNob3J0IikpIHsKKwkJaWYgKGdpdF9jb25maWdfYm9vbChrLCB2KSkKKwkJCXN0YXR1c19kZWZlcnJlZF9jb25maWcuc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfU0hPUlQ7CisJCWVsc2UKKwkJCXN0YXR1c19kZWZlcnJlZF9jb25maWcuc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfTk9ORTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuYnJhbmNoIikpIHsKKwkJc3RhdHVzX2RlZmVycmVkX2NvbmZpZy5zaG93X2JyYW5jaCA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuY29sb3IiKSB8fCAhc3RyY21wKGssICJjb2xvci5zdGF0dXMiKSkgeworCQlzLT51c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJzdGF0dXMuZGlzcGxheWNvbW1lbnRwcmVmaXgiKSkgeworCQlzLT5kaXNwbGF5X2NvbW1lbnRfcHJlZml4ID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHNraXBfcHJlZml4KGssICJzdGF0dXMuY29sb3IuIiwgJnNsb3RfbmFtZSkgfHwKKwkgICAgc2tpcF9wcmVmaXgoaywgImNvbG9yLnN0YXR1cy4iLCAmc2xvdF9uYW1lKSkgeworCQlpbnQgc2xvdCA9IHBhcnNlX3N0YXR1c19zbG90KHNsb3RfbmFtZSk7CisJCWlmIChzbG90IDwgMCkKKwkJCXJldHVybiAwOworCQlpZiAoIXYpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2woayk7CisJCXJldHVybiBjb2xvcl9wYXJzZSh2LCBzLT5jb2xvcl9wYWxldHRlW3Nsb3RdKTsKKwl9CisJaWYgKCFzdHJjbXAoaywgInN0YXR1cy5yZWxhdGl2ZXBhdGhzIikpIHsKKwkJcy0+cmVsYXRpdmVfcGF0aHMgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAic3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyIpKSB7CisJCWlmICghdikKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrKTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2LCAibm8iKSkKKwkJCXMtPnNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19OT19VTlRSQUNLRURfRklMRVM7CisJCWVsc2UgaWYgKCFzdHJjbXAodiwgIm5vcm1hbCIpKQorCQkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX05PUk1BTF9VTlRSQUNLRURfRklMRVM7CisJCWVsc2UgaWYgKCFzdHJjbXAodiwgImFsbCIpKQorCQkJcy0+c2hvd191bnRyYWNrZWRfZmlsZXMgPSBTSE9XX0FMTF9VTlRSQUNLRURfRklMRVM7CisJCWVsc2UKKwkJCXJldHVybiBlcnJvcihfKCJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciKSwgdik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RpZmZfdWlfY29uZmlnKGssIHYsIE5VTEwpOworfQorCitpbnQgY21kX3N0YXR1cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdGF0aWMgc3RydWN0IHd0X3N0YXR1cyBzOworCWludCBmZDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fc3RhdHVzX29wdGlvbnNbXSA9IHsKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX1NFVF9JTlQoJ3MnLCAic2hvcnQiLCAmc3RhdHVzX2Zvcm1hdCwKKwkJCSAgICBOXygic2hvdyBzdGF0dXMgY29uY2lzZWx5IiksIFNUQVRVU19GT1JNQVRfU0hPUlQpLAorCQlPUFRfQk9PTCgnYicsICJicmFuY2giLCAmcy5zaG93X2JyYW5jaCwKKwkJCSBOXygic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iKSksCisJCU9QVF9TRVRfSU5UKDAsICJwb3JjZWxhaW4iLCAmc3RhdHVzX2Zvcm1hdCwKKwkJCSAgICBOXygibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiKSwKKwkJCSAgICBTVEFUVVNfRk9STUFUX1BPUkNFTEFJTiksCisJCU9QVF9TRVRfSU5UKDAsICJsb25nIiwgJnN0YXR1c19mb3JtYXQsCisJCQkgICAgTl8oInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIpLAorCQkJICAgIFNUQVRVU19GT1JNQVRfTE9ORyksCisJCU9QVF9CT09MKCd6JywgIm51bGwiLCAmcy5udWxsX3Rlcm1pbmF0aW9uLAorCQkJIE5fKCJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIpKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAndScsICJ1bnRyYWNrZWQtZmlsZXMiLCAmdW50cmFja2VkX2ZpbGVzX2FyZywKKwkJICBOXygibW9kZSIpLAorCQkgIE5fKCJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCAoaW50cHRyX3QpImFsbCIgfSwKKwkJT1BUX0JPT0woMCwgImlnbm9yZWQiLCAmc2hvd19pZ25vcmVkX2luX3N0YXR1cywKKwkJCSBOXygic2hvdyBpZ25vcmVkIGZpbGVzIikpLAorCQl7IE9QVElPTl9TVFJJTkcsIDAsICJpZ25vcmUtc3VibW9kdWxlcyIsICZpZ25vcmVfc3VibW9kdWxlX2FyZywgTl8oIndoZW4iKSwKKwkJICBOXygiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAoRGVmYXVsdDogYWxsKSIpLAorCQkgIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkiYWxsIiB9LAorCQlPUFRfQ09MVU1OKDAsICJjb2x1bW4iLCAmcy5jb2xvcHRzLCBOXygibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3N0YXR1c191c2FnZSwgYnVpbHRpbl9zdGF0dXNfb3B0aW9ucyk7CisKKwlzdGF0dXNfaW5pdF9jb25maWcoJnMsIGdpdF9zdGF0dXNfY29uZmlnKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQkgICAgIGJ1aWx0aW5fc3RhdHVzX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fc3RhdHVzX3VzYWdlLCAwKTsKKwlmaW5hbGl6ZV9jb2xvcHRzKCZzLmNvbG9wdHMsIC0xKTsKKwlmaW5hbGl6ZV9kZWZlcnJlZF9jb25maWcoJnMpOworCisJaGFuZGxlX3VudHJhY2tlZF9maWxlc19hcmcoJnMpOworCWlmIChzaG93X2lnbm9yZWRfaW5fc3RhdHVzKQorCQlzLnNob3dfaWdub3JlZF9maWxlcyA9IDE7CisJcGFyc2VfcGF0aHNwZWMoJnMucGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwlyZWFkX2NhY2hlX3ByZWxvYWQoJnMucGF0aHNwZWMpOworCXJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgUkVGUkVTSF9RVUlFVHxSRUZSRVNIX1VOTUVSR0VELCAmcy5wYXRoc3BlYywgTlVMTCwgTlVMTCk7CisKKwlmZCA9IGhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCAwKTsKKworCXMuaXNfaW5pdGlhbCA9IGdldF9zaGExKHMucmVmZXJlbmNlLCBzaGExKSA/IDEgOiAwOworCXMuaWdub3JlX3N1Ym1vZHVsZV9hcmcgPSBpZ25vcmVfc3VibW9kdWxlX2FyZzsKKwl3dF9zdGF0dXNfY29sbGVjdCgmcyk7CisKKwlpZiAoMCA8PSBmZCkKKwkJdXBkYXRlX2luZGV4X2lmX2FibGUoJnRoZV9pbmRleCwgJmluZGV4X2xvY2spOworCisJaWYgKHMucmVsYXRpdmVfcGF0aHMpCisJCXMucHJlZml4ID0gcHJlZml4OworCisJc3dpdGNoIChzdGF0dXNfZm9ybWF0KSB7CisJY2FzZSBTVEFUVVNfRk9STUFUX1NIT1JUOgorCQl3dF9zaG9ydHN0YXR1c19wcmludCgmcyk7CisJCWJyZWFrOworCWNhc2UgU1RBVFVTX0ZPUk1BVF9QT1JDRUxBSU46CisJCXd0X3BvcmNlbGFpbl9wcmludCgmcyk7CisJCWJyZWFrOworCWNhc2UgU1RBVFVTX0ZPUk1BVF9VTlNQRUNJRklFRDoKKwkJZGllKCJCVUc6IGZpbmFsaXplX2RlZmVycmVkX2NvbmZpZygpIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIik7CisJCWJyZWFrOworCWNhc2UgU1RBVFVTX0ZPUk1BVF9OT05FOgorCWNhc2UgU1RBVFVTX0ZPUk1BVF9MT05HOgorCQlzLnZlcmJvc2UgPSB2ZXJib3NlOworCQlzLmlnbm9yZV9zdWJtb2R1bGVfYXJnID0gaWdub3JlX3N1Ym1vZHVsZV9hcmc7CisJCXd0X3N0YXR1c19wcmludCgmcyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmltcGxpY2l0X2lkZW50X2FkdmljZSh2b2lkKQoreworCWNoYXIgKnVzZXJfY29uZmlnID0gZXhwYW5kX3VzZXJfcGF0aCgifi8uZ2l0Y29uZmlnIik7CisJY2hhciAqeGRnX2NvbmZpZyA9IHhkZ19jb25maWdfaG9tZSgiY29uZmlnIik7CisJaW50IGNvbmZpZ19leGlzdHMgPSBmaWxlX2V4aXN0cyh1c2VyX2NvbmZpZykgfHwgZmlsZV9leGlzdHMoeGRnX2NvbmZpZyk7CisKKwlmcmVlKHVzZXJfY29uZmlnKTsKKwlmcmVlKHhkZ19jb25maWcpOworCisJaWYgKGNvbmZpZ19leGlzdHMpCisJCXJldHVybiBfKGltcGxpY2l0X2lkZW50X2FkdmljZV9jb25maWcpOworCWVsc2UKKwkJcmV0dXJuIF8oaW1wbGljaXRfaWRlbnRfYWR2aWNlX25vY29uZmlnKTsKKworfQorCitzdGF0aWMgdm9pZCBwcmludF9zdW1tYXJ5KGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgaW50IGluaXRpYWxfY29tbWl0KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBzdHJidWYgZm9ybWF0ID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgY2hhciBqdW5rX3NoYTFbMjBdOworCWNvbnN0IGNoYXIgKmhlYWQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHBjdHggPSB7MH07CisJc3RydWN0IHN0cmJ1ZiBhdXRob3JfaWRlbnQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNvbW1pdHRlcl9pZGVudCA9IFNUUkJVRl9JTklUOworCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdChzaGExKTsKKwlpZiAoIWNvbW1pdCkKKwkJZGllKF8oImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiKSk7CisJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQlkaWUoXygiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IikpOworCisJc3RyYnVmX2FkZHN0cigmZm9ybWF0LCAiZm9ybWF0OiVoXSAlcyIpOworCisJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiVhbiA8JWFlPiIsICZhdXRob3JfaWRlbnQsICZwY3R4KTsKKwlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWNuIDwlY2U+IiwgJmNvbW1pdHRlcl9pZGVudCwgJnBjdHgpOworCWlmIChzdHJidWZfY21wKCZhdXRob3JfaWRlbnQsICZjb21taXR0ZXJfaWRlbnQpKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmZvcm1hdCwgIlxuIEF1dGhvcjogIik7CisJCXN0cmJ1Zl9hZGRidWZfcGVyY2VudHF1b3RlKCZmb3JtYXQsICZhdXRob3JfaWRlbnQpOworCX0KKwlpZiAoYXV0aG9yX2RhdGVfaXNfaW50ZXJlc3RpbmcoKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGRhdGUgPSBTVFJCVUZfSU5JVDsKKwkJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbW1pdCwgIiVhZCIsICZkYXRlLCAmcGN0eCk7CisJCXN0cmJ1Zl9hZGRzdHIoJmZvcm1hdCwgIlxuIERhdGU6ICIpOworCQlzdHJidWZfYWRkYnVmX3BlcmNlbnRxdW90ZSgmZm9ybWF0LCAmZGF0ZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZkYXRlKTsKKwl9CisJaWYgKCFjb21taXR0ZXJfaWRlbnRfc3VmZmljaWVudGx5X2dpdmVuKCkpIHsKKwkJc3RyYnVmX2FkZHN0cigmZm9ybWF0LCAiXG4gQ29tbWl0dGVyOiAiKTsKKwkJc3RyYnVmX2FkZGJ1Zl9wZXJjZW50cXVvdGUoJmZvcm1hdCwgJmNvbW1pdHRlcl9pZGVudCk7CisJCWlmIChhZHZpY2VfaW1wbGljaXRfaWRlbnRpdHkpIHsKKwkJCXN0cmJ1Zl9hZGRjaCgmZm9ybWF0LCAnXG4nKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmZvcm1hdCwgaW1wbGljaXRfaWRlbnRfYWR2aWNlKCkpOworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZhdXRob3JfaWRlbnQpOworCXN0cmJ1Zl9yZWxlYXNlKCZjb21taXR0ZXJfaWRlbnQpOworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgTlVMTCk7CisKKwlyZXYuZGlmZiA9IDE7CisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9CisJCURJRkZfRk9STUFUX1NIT1JUU1RBVCB8IERJRkZfRk9STUFUX1NVTU1BUlk7CisKKwlyZXYudmVyYm9zZV9oZWFkZXIgPSAxOworCXJldi5zaG93X3Jvb3RfZGlmZiA9IDE7CisJZ2V0X2NvbW1pdF9mb3JtYXQoZm9ybWF0LmJ1ZiwgJnJldik7CisJcmV2LmFsd2F5c19zaG93X2hlYWRlciA9IDA7CisJcmV2LmRpZmZvcHQuZGV0ZWN0X3JlbmFtZSA9IDE7CisJcmV2LmRpZmZvcHQuYnJlYWtfb3B0ID0gMDsKKwlkaWZmX3NldHVwX2RvbmUoJnJldi5kaWZmb3B0KTsKKworCWhlYWQgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBqdW5rX3NoYTEsIE5VTEwpOworCWlmICghc3RyY21wKGhlYWQsICJIRUFEIikpCisJCWhlYWQgPSBfKCJkZXRhY2hlZCBIRUFEIik7CisJZWxzZQorCQlza2lwX3ByZWZpeChoZWFkLCAicmVmcy9oZWFkcy8iLCAmaGVhZCk7CisJcHJpbnRmKCJbJXMlcyAiLCBoZWFkLCBpbml0aWFsX2NvbW1pdCA/IF8oIiAocm9vdC1jb21taXQpIikgOiAiIik7CisKKwlpZiAoIWxvZ190cmVlX2NvbW1pdCgmcmV2LCBjb21taXQpKSB7CisJCXJldi5hbHdheXNfc2hvd19oZWFkZXIgPSAxOworCQlyZXYudXNlX3Rlcm1pbmF0b3IgPSAxOworCQlsb2dfdHJlZV9jb21taXQoJnJldiwgY29tbWl0KTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmZm9ybWF0KTsKK30KKworc3RhdGljIGludCBnaXRfY29tbWl0X2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzICpzID0gY2I7CisJaW50IHN0YXR1czsKKworCWlmICghc3RyY21wKGssICJjb21taXQudGVtcGxhdGUiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJnRlbXBsYXRlX2ZpbGUsIGssIHYpOworCWlmICghc3RyY21wKGssICJjb21taXQuc3RhdHVzIikpIHsKKwkJaW5jbHVkZV9zdGF0dXMgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAiY29tbWl0LmNsZWFudXAiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZjbGVhbnVwX2FyZywgaywgdik7CisJaWYgKCFzdHJjbXAoaywgImNvbW1pdC5ncGdzaWduIikpIHsKKwkJc2lnbl9jb21taXQgPSBnaXRfY29uZmlnX2Jvb2woaywgdikgPyAiIiA6IE5VTEw7CisJCXJldHVybiAwOworCX0KKworCXN0YXR1cyA9IGdpdF9ncGdfY29uZmlnKGssIHYsIE5VTEwpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIGdpdF9zdGF0dXNfY29uZmlnKGssIHYsIHMpOworfQorCitzdGF0aWMgaW50IHJ1bl9yZXdyaXRlX2hvb2soY29uc3QgdW5zaWduZWQgY2hhciAqb2xkc2hhMSwKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdzaGExKQoreworCS8qIG9sZHNoYTEgU1AgbmV3c2hhMSBMRiBOVUwgKi8KKwlzdGF0aWMgY2hhciBidWZbMio0MCArIDNdOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqYXJndlszXTsKKwlpbnQgY29kZTsKKwlzaXplX3QgbjsKKworCWFyZ3ZbMF0gPSBmaW5kX2hvb2soInBvc3QtcmV3cml0ZSIpOworCWlmICghYXJndlswXSkKKwkJcmV0dXJuIDA7CisKKwlhcmd2WzFdID0gImFtZW5kIjsKKwlhcmd2WzJdID0gTlVMTDsKKworCXByb2MuYXJndiA9IGFyZ3Y7CisJcHJvYy5pbiA9IC0xOworCXByb2Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisKKwljb2RlID0gc3RhcnRfY29tbWFuZCgmcHJvYyk7CisJaWYgKGNvZGUpCisJCXJldHVybiBjb2RlOworCW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgJXNcbiIsCisJCSAgICAgc2hhMV90b19oZXgob2xkc2hhMSksIHNoYTFfdG9faGV4KG5ld3NoYTEpKTsKKwl3cml0ZV9pbl9mdWxsKHByb2MuaW4sIGJ1Ziwgbik7CisJY2xvc2UocHJvYy5pbik7CisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKCZwcm9jKTsKK30KKworaW50IHJ1bl9jb21taXRfaG9vayhpbnQgZWRpdG9yX2lzX3VzZWQsIGNvbnN0IGNoYXIgKmluZGV4X2ZpbGUsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLikKK3sKKwljb25zdCBjaGFyICpob29rX2VudlszXSA9ICB7IE5VTEwgfTsKKwljaGFyIGluZGV4W1BBVEhfTUFYXTsKKwl2YV9saXN0IGFyZ3M7CisJaW50IHJldDsKKworCXNucHJpbnRmKGluZGV4LCBzaXplb2YoaW5kZXgpLCAiR0lUX0lOREVYX0ZJTEU9JXMiLCBpbmRleF9maWxlKTsKKwlob29rX2VudlswXSA9IGluZGV4OworCisJLyoKKwkgKiBMZXQgdGhlIGhvb2sga25vdyB0aGF0IG5vIGVkaXRvciB3aWxsIGJlIGxhdW5jaGVkLgorCSAqLworCWlmICghZWRpdG9yX2lzX3VzZWQpCisJCWhvb2tfZW52WzFdID0gIkdJVF9FRElUT1I9OiI7CisKKwl2YV9zdGFydChhcmdzLCBuYW1lKTsKKwlyZXQgPSBydW5faG9va192ZShob29rX2VudiwgbmFtZSwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9jb21taXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RhdGljIHN0cnVjdCB3dF9zdGF0dXMgczsKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2NvbW1pdF9vcHRpb25zW10gPSB7CisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIpKSwKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIikpLAorCisJCU9QVF9HUk9VUChOXygiQ29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyIpKSwKKwkJT1BUX0ZJTEVOQU1FKCdGJywgImZpbGUiLCAmbG9nZmlsZSwgTl8oInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiKSksCisJCU9QVF9TVFJJTkcoMCwgImF1dGhvciIsICZmb3JjZV9hdXRob3IsIE5fKCJhdXRob3IiKSwgTl8oIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IikpLAorCQlPUFRfU1RSSU5HKDAsICJkYXRlIiwgJmZvcmNlX2RhdGUsIE5fKCJkYXRlIiksIE5fKCJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiKSksCisJCU9QVF9DQUxMQkFDSygnbScsICJtZXNzYWdlIiwgJm1lc3NhZ2UsIE5fKCJtZXNzYWdlIiksIE5fKCJjb21taXQgbWVzc2FnZSIpLCBvcHRfcGFyc2VfbSksCisJCU9QVF9TVFJJTkcoJ2MnLCAicmVlZGl0LW1lc3NhZ2UiLCAmZWRpdF9tZXNzYWdlLCBOXygiY29tbWl0IiksIE5fKCJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX1NUUklORygnQycsICJyZXVzZS1tZXNzYWdlIiwgJnVzZV9tZXNzYWdlLCBOXygiY29tbWl0IiksIE5fKCJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX1NUUklORygwLCAiZml4dXAiLCAmZml4dXBfbWVzc2FnZSwgTl8oImNvbW1pdCIpLCBOXygidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX1NUUklORygwLCAic3F1YXNoIiwgJnNxdWFzaF9tZXNzYWdlLCBOXygiY29tbWl0IiksIE5fKCJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0woMCwgInJlc2V0LWF1dGhvciIsICZyZW5ld19hdXRob3JzaGlwLCBOXygidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIpKSwKKwkJT1BUX0JPT0woJ3MnLCAic2lnbm9mZiIsICZzaWdub2ZmLCBOXygiYWRkIFNpZ25lZC1vZmYtYnk6IikpLAorCQlPUFRfRklMRU5BTUUoJ3QnLCAidGVtcGxhdGUiLCAmdGVtcGxhdGVfZmlsZSwgTl8oInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIpKSwKKwkJT1BUX0JPT0woJ2UnLCAiZWRpdCIsICZlZGl0X2ZsYWcsIE5fKCJmb3JjZSBlZGl0IG9mIGNvbW1pdCIpKSwKKwkJT1BUX1NUUklORygwLCAiY2xlYW51cCIsICZjbGVhbnVwX2FyZywgTl8oImRlZmF1bHQiKSwgTl8oImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiKSksCisJCU9QVF9CT09MKDAsICJzdGF0dXMiLCAmaW5jbHVkZV9zdGF0dXMsIE5fKCJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIpKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAnUycsICJncGctc2lnbiIsICZzaWduX2NvbW1pdCwgTl8oImtleS1pZCIpLAorCQkgIE5fKCJHUEcgc2lnbiBjb21taXQiKSwgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiIiB9LAorCQkvKiBlbmQgY29tbWl0IG1lc3NhZ2Ugb3B0aW9ucyAqLworCisJCU9QVF9HUk9VUChOXygiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiKSksCisJCU9QVF9CT09MKCdhJywgImFsbCIsICZhbGwsIE5fKCJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiKSksCisJCU9QVF9CT09MKCdpJywgImluY2x1ZGUiLCAmYWxzbywgTl8oImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0woMCwgImludGVyYWN0aXZlIiwgJmludGVyYWN0aXZlLCBOXygiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiKSksCisJCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJnBhdGNoX2ludGVyYWN0aXZlLCBOXygiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIpKSwKKwkJT1BUX0JPT0woJ28nLCAib25seSIsICZvbmx5LCBOXygiY29tbWl0IG9ubHkgc3BlY2lmaWVkIGZpbGVzIikpLAorCQlPUFRfQk9PTCgnbicsICJuby12ZXJpZnkiLCAmbm9fdmVyaWZ5LCBOXygiYnlwYXNzIHByZS1jb21taXQgaG9vayIpKSwKKwkJT1BUX0JPT0woMCwgImRyeS1ydW4iLCAmZHJ5X3J1biwgTl8oInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiKSksCisJCU9QVF9TRVRfSU5UKDAsICJzaG9ydCIsICZzdGF0dXNfZm9ybWF0LCBOXygic2hvdyBzdGF0dXMgY29uY2lzZWx5IiksCisJCQkgICAgU1RBVFVTX0ZPUk1BVF9TSE9SVCksCisJCU9QVF9CT09MKDAsICJicmFuY2giLCAmcy5zaG93X2JyYW5jaCwgTl8oInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIikpLAorCQlPUFRfU0VUX0lOVCgwLCAicG9yY2VsYWluIiwgJnN0YXR1c19mb3JtYXQsCisJCQkgICAgTl8oIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IiksIFNUQVRVU19GT1JNQVRfUE9SQ0VMQUlOKSwKKwkJT1BUX1NFVF9JTlQoMCwgImxvbmciLCAmc3RhdHVzX2Zvcm1hdCwKKwkJCSAgICBOXygic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIiksCisJCQkgICAgU1RBVFVTX0ZPUk1BVF9MT05HKSwKKwkJT1BUX0JPT0woJ3onLCAibnVsbCIsICZzLm51bGxfdGVybWluYXRpb24sCisJCQkgTl8oInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIikpLAorCQlPUFRfQk9PTCgwLCAiYW1lbmQiLCAmYW1lbmQsIE5fKCJhbWVuZCBwcmV2aW91cyBjb21taXQiKSksCisJCU9QVF9CT09MKDAsICJuby1wb3N0LXJld3JpdGUiLCAmbm9fcG9zdF9yZXdyaXRlLCBOXygiYnlwYXNzIHBvc3QtcmV3cml0ZSBob29rIikpLAorCQl7IE9QVElPTl9TVFJJTkcsICd1JywgInVudHJhY2tlZC1maWxlcyIsICZ1bnRyYWNrZWRfZmlsZXNfYXJnLCBOXygibW9kZSIpLCBOXygic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIiksIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkiYWxsIiB9LAorCQkvKiBlbmQgY29tbWl0IGNvbnRlbnRzIG9wdGlvbnMgKi8KKworCQlPUFRfSElEREVOX0JPT0woMCwgImFsbG93LWVtcHR5IiwgJmFsbG93X2VtcHR5LAorCQkJCU5fKCJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIikpLAorCQlPUFRfSElEREVOX0JPT0woMCwgImFsbG93LWVtcHR5LW1lc3NhZ2UiLCAmYWxsb3dfZW1wdHlfbWVzc2FnZSwKKwkJCQlOXygib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIpKSwKKworCQlPUFRfRU5EKCkKKwl9OworCisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYXV0aG9yX2lkZW50ID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqaW5kZXhfZmlsZSwgKnJlZmxvZ19tc2c7CisJY2hhciAqbmw7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBOVUxMLCAqKnBwdHIgPSAmcGFyZW50czsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCXN0cnVjdCBjb21taXQgKmN1cnJlbnRfaGVhZCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhID0gTlVMTDsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9jb21taXRfdXNhZ2UsIGJ1aWx0aW5fY29tbWl0X29wdGlvbnMpOworCisJc3RhdHVzX2luaXRfY29uZmlnKCZzLCBnaXRfY29tbWl0X2NvbmZpZyk7CisJc3RhdHVzX2Zvcm1hdCA9IFNUQVRVU19GT1JNQVRfTk9ORTsgLyogSWdub3JlIHN0YXR1cy5zaG9ydCAqLworCXMuY29sb3B0cyA9IDA7CisKKwlpZiAoZ2V0X3NoYTEoIkhFQUQiLCBzaGExKSkKKwkJY3VycmVudF9oZWFkID0gTlVMTDsKKwllbHNlIHsKKwkJY3VycmVudF9oZWFkID0gbG9va3VwX2NvbW1pdF9vcl9kaWUoc2hhMSwgIkhFQUQiKTsKKwkJaWYgKHBhcnNlX2NvbW1pdChjdXJyZW50X2hlYWQpKQorCQkJZGllKF8oImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIpKTsKKwl9CisJYXJnYyA9IHBhcnNlX2FuZF92YWxpZGF0ZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIGJ1aWx0aW5fY29tbWl0X29wdGlvbnMsCisJCQkJCSAgYnVpbHRpbl9jb21taXRfdXNhZ2UsCisJCQkJCSAgcHJlZml4LCBjdXJyZW50X2hlYWQsICZzKTsKKwlpZiAoZHJ5X3J1bikKKwkJcmV0dXJuIGRyeV9ydW5fY29tbWl0KGFyZ2MsIGFyZ3YsIHByZWZpeCwgY3VycmVudF9oZWFkLCAmcyk7CisJaW5kZXhfZmlsZSA9IHByZXBhcmVfaW5kZXgoYXJnYywgYXJndiwgcHJlZml4LCBjdXJyZW50X2hlYWQsIDApOworCisJLyogU2V0IHVwIGV2ZXJ5dGhpbmcgZm9yIHdyaXRpbmcgdGhlIGNvbW1pdCBvYmplY3QuICBUaGlzIGluY2x1ZGVzCisJICAgcnVubmluZyBob29rcywgd3JpdGluZyB0aGUgdHJlZXMsIGFuZCBpbnRlcmFjdGluZyB3aXRoIHRoZSB1c2VyLiAgKi8KKwlpZiAoIXByZXBhcmVfdG9fY29tbWl0KGluZGV4X2ZpbGUsIHByZWZpeCwKKwkJCSAgICAgICBjdXJyZW50X2hlYWQsICZzLCAmYXV0aG9yX2lkZW50KSkgeworCQlyb2xsYmFja19pbmRleF9maWxlcygpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBEZXRlcm1pbmUgcGFyZW50cyAqLworCXJlZmxvZ19tc2cgPSBnZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIik7CisJaWYgKCFjdXJyZW50X2hlYWQpIHsKKwkJaWYgKCFyZWZsb2dfbXNnKQorCQkJcmVmbG9nX21zZyA9ICJjb21taXQgKGluaXRpYWwpIjsKKwl9IGVsc2UgaWYgKGFtZW5kKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqYzsKKworCQlpZiAoIXJlZmxvZ19tc2cpCisJCQlyZWZsb2dfbXNnID0gImNvbW1pdCAoYW1lbmQpIjsKKwkJZm9yIChjID0gY3VycmVudF9oZWFkLT5wYXJlbnRzOyBjOyBjID0gYy0+bmV4dCkKKwkJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGMtPml0ZW0sIHBwdHIpLT5uZXh0OworCX0gZWxzZSBpZiAod2hlbmNlID09IEZST01fTUVSR0UpIHsKKwkJc3RydWN0IHN0cmJ1ZiBtID0gU1RSQlVGX0lOSVQ7CisJCUZJTEUgKmZwOworCQlpbnQgYWxsb3dfZmFzdF9mb3J3YXJkID0gMTsKKworCQlpZiAoIXJlZmxvZ19tc2cpCisJCQlyZWZsb2dfbXNnID0gImNvbW1pdCAobWVyZ2UpIjsKKwkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQoY3VycmVudF9oZWFkLCBwcHRyKS0+bmV4dDsKKwkJZnAgPSBmb3BlbihnaXRfcGF0aF9tZXJnZV9oZWFkKCksICJyIik7CisJCWlmIChmcCA9PSBOVUxMKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciKSwKKwkJCQkgIGdpdF9wYXRoX21lcmdlX2hlYWQoKSk7CisJCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbSwgZnAsICdcbicpICE9IEVPRikgeworCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50OworCisJCQlwYXJlbnQgPSBnZXRfbWVyZ2VfcGFyZW50KG0uYnVmKTsKKwkJCWlmICghcGFyZW50KQorCQkJCWRpZShfKCJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIiksIG0uYnVmKTsKKwkJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KHBhcmVudCwgcHB0ciktPm5leHQ7CisJCX0KKwkJZmNsb3NlKGZwKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm0pOworCQlpZiAoIXN0YXQoZ2l0X3BhdGhfbWVyZ2VfbW9kZSgpLCAmc3RhdGJ1ZikpIHsKKwkJCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGhfbWVyZ2VfbW9kZSgpLCAwKSA8IDApCisJCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiKSk7CisJCQlpZiAoIXN0cmNtcChzYi5idWYsICJuby1mZiIpKQorCQkJCWFsbG93X2Zhc3RfZm9yd2FyZCA9IDA7CisJCX0KKwkJaWYgKGFsbG93X2Zhc3RfZm9yd2FyZCkKKwkJCXBhcmVudHMgPSByZWR1Y2VfaGVhZHMocGFyZW50cyk7CisJfSBlbHNlIHsKKwkJaWYgKCFyZWZsb2dfbXNnKQorCQkJcmVmbG9nX21zZyA9ICh3aGVuY2UgPT0gRlJPTV9DSEVSUllfUElDSykKKwkJCQkJPyAiY29tbWl0IChjaGVycnktcGljaykiCisJCQkJCTogImNvbW1pdCI7CisJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGN1cnJlbnRfaGVhZCwgcHB0ciktPm5leHQ7CisJfQorCisJLyogRmluYWxseSwgZ2V0IHRoZSBjb21taXQgbWVzc2FnZSAqLworCXN0cmJ1Zl9yZXNldCgmc2IpOworCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGgoY29tbWl0X2VkaXRtc2cpLCAwKSA8IDApIHsKKwkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisJCWRpZShfKCJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiKSwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsKKwl9CisKKwlpZiAodmVyYm9zZSB8fCAvKiBUcnVuY2F0ZSB0aGUgbWVzc2FnZSBqdXN0IGJlZm9yZSB0aGUgZGlmZiwgaWYgYW55LiAqLworCSAgICBjbGVhbnVwX21vZGUgPT0gQ0xFQU5VUF9TQ0lTU09SUykKKwkJd3Rfc3RhdHVzX3RydW5jYXRlX21lc3NhZ2VfYXRfY3V0X2xpbmUoJnNiKTsKKworCWlmIChjbGVhbnVwX21vZGUgIT0gQ0xFQU5VUF9OT05FKQorCQlzdHJidWZfc3RyaXBzcGFjZSgmc2IsIGNsZWFudXBfbW9kZSA9PSBDTEVBTlVQX0FMTCk7CisJaWYgKHRlbXBsYXRlX3VudG91Y2hlZCgmc2IpICYmICFhbGxvd19lbXB0eV9tZXNzYWdlKSB7CisJCXJvbGxiYWNrX2luZGV4X2ZpbGVzKCk7CisJCWZwcmludGYoc3RkZXJyLCBfKCJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChtZXNzYWdlX2lzX2VtcHR5KCZzYikgJiYgIWFsbG93X2VtcHR5X21lc3NhZ2UpIHsKKwkJcm9sbGJhY2tfaW5kZXhfZmlsZXMoKTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iKSk7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKGFtZW5kKSB7CisJCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfZ3Bnc2lnWzJdID0geyAiZ3Bnc2lnIiwgTlVMTCB9OworCQlleHRyYSA9IHJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcnMoY3VycmVudF9oZWFkLCBleGNsdWRlX2dwZ3NpZyk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKip0YWlsID0gJmV4dHJhOworCQlhcHBlbmRfbWVyZ2VfdGFnX2hlYWRlcnMocGFyZW50cywgJnRhaWwpOworCX0KKworCWlmIChjb21taXRfdHJlZV9leHRlbmRlZChzYi5idWYsIHNiLmxlbiwgYWN0aXZlX2NhY2hlX3RyZWUtPnNoYTEsCisJCQkgcGFyZW50cywgc2hhMSwgYXV0aG9yX2lkZW50LmJ1Ziwgc2lnbl9jb21taXQsIGV4dHJhKSkgeworCQlyb2xsYmFja19pbmRleF9maWxlcygpOworCQlkaWUoXygiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiKSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZhdXRob3JfaWRlbnQpOworCWZyZWVfY29tbWl0X2V4dHJhX2hlYWRlcnMoZXh0cmEpOworCisJbmwgPSBzdHJjaHIoc2IuYnVmLCAnXG4nKTsKKwlpZiAobmwpCisJCXN0cmJ1Zl9zZXRsZW4oJnNiLCBubCArIDEgLSBzYi5idWYpOworCWVsc2UKKwkJc3RyYnVmX2FkZGNoKCZzYiwgJ1xuJyk7CisJc3RyYnVmX2luc2VydCgmc2IsIDAsIHJlZmxvZ19tc2csIHN0cmxlbihyZWZsb2dfbXNnKSk7CisJc3RyYnVmX2luc2VydCgmc2IsIHN0cmxlbihyZWZsb2dfbXNnKSwgIjogIiwgMik7CisKKwl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKKwlpZiAoIXRyYW5zYWN0aW9uIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sICJIRUFEIiwgc2hhMSwKKwkJCQkgICBjdXJyZW50X2hlYWQKKwkJCQkgICA/IGN1cnJlbnRfaGVhZC0+b2JqZWN0LnNoYTEgOiBudWxsX3NoYTEsCisJCQkJICAgMCwgc2IuYnVmLCAmZXJyKSB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCAmZXJyKSkgeworCQlyb2xsYmFja19pbmRleF9maWxlcygpOworCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJfQorCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKworCXVubGluayhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKCkpOworCXVubGluayhnaXRfcGF0aF9yZXZlcnRfaGVhZCgpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfaGVhZCgpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfbXNnKCkpOworCXVubGluayhnaXRfcGF0aF9tZXJnZV9tb2RlKCkpOworCXVubGluayhnaXRfcGF0aF9zcXVhc2hfbXNnKCkpOworCisJaWYgKGNvbW1pdF9pbmRleF9maWxlcygpKQorCQlkaWUgKF8oIlJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorCQkgICAgICJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorCQkgICAgICJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc2V0IEhFQURcIiB0byByZWNvdmVyLiIpKTsKKworCXJlcmVyZSgwKTsKKwlydW5fY29tbWl0X2hvb2sodXNlX2VkaXRvciwgZ2V0X2luZGV4X2ZpbGUoKSwgInBvc3QtY29tbWl0IiwgTlVMTCk7CisJaWYgKGFtZW5kICYmICFub19wb3N0X3Jld3JpdGUpIHsKKwkJc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjZmc7CisJCWNmZyA9IGluaXRfY29weV9ub3Rlc19mb3JfcmV3cml0ZSgiYW1lbmQiKTsKKwkJaWYgKGNmZykgeworCQkJLyogd2UgYXJlIGFtZW5kaW5nLCBzbyBjdXJyZW50X2hlYWQgaXMgbm90IE5VTEwgKi8KKwkJCWNvcHlfbm90ZV9mb3JfcmV3cml0ZShjZmcsIGN1cnJlbnRfaGVhZC0+b2JqZWN0LnNoYTEsIHNoYTEpOworCQkJZmluaXNoX2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoY2ZnLCAiTm90ZXMgYWRkZWQgYnkgJ2dpdCBjb21taXQgLS1hbWVuZCciKTsKKwkJfQorCQlydW5fcmV3cml0ZV9ob29rKGN1cnJlbnRfaGVhZC0+b2JqZWN0LnNoYTEsIHNoYTEpOworCX0KKwlpZiAoIXF1aWV0KQorCQlwcmludF9zdW1tYXJ5KHByZWZpeCwgc2hhMSwgIWN1cnJlbnRfaGVhZCk7CisKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vY29uZmlnLmMgYi9idWlsdGluL2NvbmZpZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzc3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NvbmZpZy5jCkBAIC0wLDAgKzEsNjgzIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidXJsbWF0Y2guaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJ1aWx0aW5fY29uZmlnX3VzYWdlW10gPSB7CisJTl8oImdpdCBjb25maWcgWzxvcHRpb25zPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY2hhciAqa2V5Oworc3RhdGljIHJlZ2V4X3QgKmtleV9yZWdleHA7CitzdGF0aWMgcmVnZXhfdCAqcmVnZXhwOworc3RhdGljIGludCBzaG93X2tleXM7CitzdGF0aWMgaW50IG9taXRfdmFsdWVzOworc3RhdGljIGludCB1c2Vfa2V5X3JlZ2V4cDsKK3N0YXRpYyBpbnQgZG9fYWxsOworc3RhdGljIGludCBkb19ub3RfbWF0Y2g7CitzdGF0aWMgY2hhciBkZWxpbSA9ICc9JzsKK3N0YXRpYyBjaGFyIGtleV9kZWxpbSA9ICcgJzsKK3N0YXRpYyBjaGFyIHRlcm0gPSAnXG4nOworCitzdGF0aWMgaW50IHVzZV9nbG9iYWxfY29uZmlnLCB1c2Vfc3lzdGVtX2NvbmZpZywgdXNlX2xvY2FsX2NvbmZpZzsKK3N0YXRpYyBzdHJ1Y3QgZ2l0X2NvbmZpZ19zb3VyY2UgZ2l2ZW5fY29uZmlnX3NvdXJjZTsKK3N0YXRpYyBpbnQgYWN0aW9ucywgdHlwZXM7CitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2NvbG9yX3Nsb3QsICpnZXRfY29sb3Jib29sX3Nsb3Q7CitzdGF0aWMgaW50IGVuZF9udWxsOworc3RhdGljIGludCByZXNwZWN0X2luY2x1ZGVzID0gLTE7CisKKyNkZWZpbmUgQUNUSU9OX0dFVCAoMTw8MCkKKyNkZWZpbmUgQUNUSU9OX0dFVF9BTEwgKDE8PDEpCisjZGVmaW5lIEFDVElPTl9HRVRfUkVHRVhQICgxPDwyKQorI2RlZmluZSBBQ1RJT05fUkVQTEFDRV9BTEwgKDE8PDMpCisjZGVmaW5lIEFDVElPTl9BREQgKDE8PDQpCisjZGVmaW5lIEFDVElPTl9VTlNFVCAoMTw8NSkKKyNkZWZpbmUgQUNUSU9OX1VOU0VUX0FMTCAoMTw8NikKKyNkZWZpbmUgQUNUSU9OX1JFTkFNRV9TRUNUSU9OICgxPDw3KQorI2RlZmluZSBBQ1RJT05fUkVNT1ZFX1NFQ1RJT04gKDE8PDgpCisjZGVmaW5lIEFDVElPTl9MSVNUICgxPDw5KQorI2RlZmluZSBBQ1RJT05fRURJVCAoMTw8MTApCisjZGVmaW5lIEFDVElPTl9TRVQgKDE8PDExKQorI2RlZmluZSBBQ1RJT05fU0VUX0FMTCAoMTw8MTIpCisjZGVmaW5lIEFDVElPTl9HRVRfQ09MT1IgKDE8PDEzKQorI2RlZmluZSBBQ1RJT05fR0VUX0NPTE9SQk9PTCAoMTw8MTQpCisjZGVmaW5lIEFDVElPTl9HRVRfVVJMTUFUQ0ggKDE8PDE1KQorCisjZGVmaW5lIFRZUEVfQk9PTCAoMTw8MCkKKyNkZWZpbmUgVFlQRV9JTlQgKDE8PDEpCisjZGVmaW5lIFRZUEVfQk9PTF9PUl9JTlQgKDE8PDIpCisjZGVmaW5lIFRZUEVfUEFUSCAoMTw8MykKKworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9jb25maWdfb3B0aW9uc1tdID0geworCU9QVF9HUk9VUChOXygiQ29uZmlnIGZpbGUgbG9jYXRpb24iKSksCisJT1BUX0JPT0woMCwgImdsb2JhbCIsICZ1c2VfZ2xvYmFsX2NvbmZpZywgTl8oInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiKSksCisJT1BUX0JPT0woMCwgInN5c3RlbSIsICZ1c2Vfc3lzdGVtX2NvbmZpZywgTl8oInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiKSksCisJT1BUX0JPT0woMCwgImxvY2FsIiwgJnVzZV9sb2NhbF9jb25maWcsIE5fKCJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIpKSwKKwlPUFRfU1RSSU5HKCdmJywgImZpbGUiLCAmZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLCBOXygiZmlsZSIpLCBOXygidXNlIGdpdmVuIGNvbmZpZyBmaWxlIikpLAorCU9QVF9TVFJJTkcoMCwgImJsb2IiLCAmZ2l2ZW5fY29uZmlnX3NvdXJjZS5ibG9iLCBOXygiYmxvYi1pZCIpLCBOXygicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIpKSwKKwlPUFRfR1JPVVAoTl8oIkFjdGlvbiIpKSwKKwlPUFRfQklUKDAsICJnZXQiLCAmYWN0aW9ucywgTl8oImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIiksIEFDVElPTl9HRVQpLAorCU9QVF9CSVQoMCwgImdldC1hbGwiLCAmYWN0aW9ucywgTl8oImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIpLCBBQ1RJT05fR0VUX0FMTCksCisJT1BUX0JJVCgwLCAiZ2V0LXJlZ2V4cCIsICZhY3Rpb25zLCBOXygiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iKSwgQUNUSU9OX0dFVF9SRUdFWFApLAorCU9QVF9CSVQoMCwgImdldC11cmxtYXRjaCIsICZhY3Rpb25zLCBOXygiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIpLCBBQ1RJT05fR0VUX1VSTE1BVENIKSwKKwlPUFRfQklUKDAsICJyZXBsYWNlLWFsbCIsICZhY3Rpb25zLCBOXygicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iKSwgQUNUSU9OX1JFUExBQ0VfQUxMKSwKKwlPUFRfQklUKDAsICJhZGQiLCAmYWN0aW9ucywgTl8oImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIpLCBBQ1RJT05fQUREKSwKKwlPUFRfQklUKDAsICJ1bnNldCIsICZhY3Rpb25zLCBOXygicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIpLCBBQ1RJT05fVU5TRVQpLAorCU9QVF9CSVQoMCwgInVuc2V0LWFsbCIsICZhY3Rpb25zLCBOXygicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iKSwgQUNUSU9OX1VOU0VUX0FMTCksCisJT1BUX0JJVCgwLCAicmVuYW1lLXNlY3Rpb24iLCAmYWN0aW9ucywgTl8oInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIpLCBBQ1RJT05fUkVOQU1FX1NFQ1RJT04pLAorCU9QVF9CSVQoMCwgInJlbW92ZS1zZWN0aW9uIiwgJmFjdGlvbnMsIE5fKCJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIiksIEFDVElPTl9SRU1PVkVfU0VDVElPTiksCisJT1BUX0JJVCgnbCcsICJsaXN0IiwgJmFjdGlvbnMsIE5fKCJsaXN0IGFsbCIpLCBBQ1RJT05fTElTVCksCisJT1BUX0JJVCgnZScsICJlZGl0IiwgJmFjdGlvbnMsIE5fKCJvcGVuIGFuIGVkaXRvciIpLCBBQ1RJT05fRURJVCksCisJT1BUX0JJVCgwLCAiZ2V0LWNvbG9yIiwgJmFjdGlvbnMsIE5fKCJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIpLCBBQ1RJT05fR0VUX0NPTE9SKSwKKwlPUFRfQklUKDAsICJnZXQtY29sb3Jib29sIiwgJmFjdGlvbnMsIE5fKCJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIpLCBBQ1RJT05fR0VUX0NPTE9SQk9PTCksCisJT1BUX0dST1VQKE5fKCJUeXBlIikpLAorCU9QVF9CSVQoMCwgImJvb2wiLCAmdHlwZXMsIE5fKCJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiKSwgVFlQRV9CT09MKSwKKwlPUFRfQklUKDAsICJpbnQiLCAmdHlwZXMsIE5fKCJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIpLCBUWVBFX0lOVCksCisJT1BUX0JJVCgwLCAiYm9vbC1vci1pbnQiLCAmdHlwZXMsIE5fKCJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiKSwgVFlQRV9CT09MX09SX0lOVCksCisJT1BUX0JJVCgwLCAicGF0aCIsICZ0eXBlcywgTl8oInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiKSwgVFlQRV9QQVRIKSwKKwlPUFRfR1JPVVAoTl8oIk90aGVyIikpLAorCU9QVF9CT09MKCd6JywgIm51bGwiLCAmZW5kX251bGwsIE5fKCJ0ZXJtaW5hdGUgdmFsdWVzIHdpdGggTlVMIGJ5dGUiKSksCisJT1BUX0JPT0woMCwgIm5hbWUtb25seSIsICZvbWl0X3ZhbHVlcywgTl8oInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIpKSwKKwlPUFRfQk9PTCgwLCAiaW5jbHVkZXMiLCAmcmVzcGVjdF9pbmNsdWRlcywgTl8oInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIpKSwKKwlPUFRfRU5EKCksCit9OworCitzdGF0aWMgdm9pZCBjaGVja19hcmdjKGludCBhcmdjLCBpbnQgbWluLCBpbnQgbWF4KSB7CisJaWYgKGFyZ2MgPj0gbWluICYmIGFyZ2MgPD0gbWF4KQorCQlyZXR1cm47CisJZXJyb3IoIndyb25nIG51bWJlciBvZiBhcmd1bWVudHMiKTsKKwl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9jb25maWdfdXNhZ2UsIGJ1aWx0aW5fY29uZmlnX29wdGlvbnMpOworfQorCitzdGF0aWMgaW50IHNob3dfYWxsX2NvbmZpZyhjb25zdCBjaGFyICprZXlfLCBjb25zdCBjaGFyICp2YWx1ZV8sIHZvaWQgKmNiKQoreworCWlmICghb21pdF92YWx1ZXMgJiYgdmFsdWVfKQorCQlwcmludGYoIiVzJWMlcyVjIiwga2V5XywgZGVsaW0sIHZhbHVlXywgdGVybSk7CisJZWxzZQorCQlwcmludGYoIiVzJWMiLCBrZXlfLCB0ZXJtKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHN0cmJ1Zl9saXN0IHsKKwlzdHJ1Y3Qgc3RyYnVmICppdGVtczsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworfTsKKworc3RhdGljIGludCBmb3JtYXRfY29uZmlnKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqa2V5XywgY29uc3QgY2hhciAqdmFsdWVfKQoreworCWlmIChzaG93X2tleXMpCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBrZXlfKTsKKwlpZiAoIW9taXRfdmFsdWVzKSB7CisJCWlmIChzaG93X2tleXMpCisJCQlzdHJidWZfYWRkY2goYnVmLCBrZXlfZGVsaW0pOworCisJCWlmICh0eXBlcyA9PSBUWVBFX0lOVCkKKwkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUiUFJJZDY0LAorCQkJCSAgICBnaXRfY29uZmlnX2ludDY0KGtleV8sIHZhbHVlXyA/IHZhbHVlXyA6ICIiKSk7CisJCWVsc2UgaWYgKHR5cGVzID09IFRZUEVfQk9PTCkKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBnaXRfY29uZmlnX2Jvb2woa2V5XywgdmFsdWVfKSA/CisJCQkJICAgICAgInRydWUiIDogImZhbHNlIik7CisJCWVsc2UgaWYgKHR5cGVzID09IFRZUEVfQk9PTF9PUl9JTlQpIHsKKwkJCWludCBpc19ib29sLCB2OworCQkJdiA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5XywgdmFsdWVfLCAmaXNfYm9vbCk7CisJCQlpZiAoaXNfYm9vbCkKKwkJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgdiA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQkJZWxzZQorCQkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVkIiwgdik7CisJCX0gZWxzZSBpZiAodHlwZXMgPT0gVFlQRV9QQVRIKSB7CisJCQljb25zdCBjaGFyICp2OworCQkJaWYgKGdpdF9jb25maWdfcGF0aG5hbWUoJnYsIGtleV8sIHZhbHVlXykgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCB2KTsKKwkJCWZyZWUoKGNoYXIgKil2KTsKKwkJfSBlbHNlIGlmICh2YWx1ZV8pIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCB2YWx1ZV8pOworCQl9IGVsc2UgeworCQkJLyogSnVzdCBzaG93IHRoZSBrZXkgbmFtZTsgYmFjayBvdXQgZGVsaW1pdGVyICovCisJCQlpZiAoc2hvd19rZXlzKQorCQkJCXN0cmJ1Zl9zZXRsZW4oYnVmLCBidWYtPmxlbiAtIDEpOworCQl9CisJfQorCXN0cmJ1Zl9hZGRjaChidWYsIHRlcm0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbGxlY3RfY29uZmlnKGNvbnN0IGNoYXIgKmtleV8sIGNvbnN0IGNoYXIgKnZhbHVlXywgdm9pZCAqY2IpCit7CisJc3RydWN0IHN0cmJ1Zl9saXN0ICp2YWx1ZXMgPSBjYjsKKworCWlmICghdXNlX2tleV9yZWdleHAgJiYgc3RyY21wKGtleV8sIGtleSkpCisJCXJldHVybiAwOworCWlmICh1c2Vfa2V5X3JlZ2V4cCAmJiByZWdleGVjKGtleV9yZWdleHAsIGtleV8sIDAsIE5VTEwsIDApKQorCQlyZXR1cm4gMDsKKwlpZiAocmVnZXhwICE9IE5VTEwgJiYKKwkgICAgKGRvX25vdF9tYXRjaCBeICEhcmVnZXhlYyhyZWdleHAsICh2YWx1ZV8/dmFsdWVfOiIiKSwgMCwgTlVMTCwgMCkpKQorCQlyZXR1cm4gMDsKKworCUFMTE9DX0dST1codmFsdWVzLT5pdGVtcywgdmFsdWVzLT5uciArIDEsIHZhbHVlcy0+YWxsb2MpOworCXN0cmJ1Zl9pbml0KCZ2YWx1ZXMtPml0ZW1zW3ZhbHVlcy0+bnJdLCAwKTsKKworCXJldHVybiBmb3JtYXRfY29uZmlnKCZ2YWx1ZXMtPml0ZW1zW3ZhbHVlcy0+bnIrK10sIGtleV8sIHZhbHVlXyk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3ZhbHVlKGNvbnN0IGNoYXIgKmtleV8sIGNvbnN0IGNoYXIgKnJlZ2V4XykKK3sKKwlpbnQgcmV0ID0gQ09ORklHX0dFTkVSSUNfRVJST1I7CisJc3RydWN0IHN0cmJ1Zl9saXN0IHZhbHVlcyA9IHtOVUxMfTsKKwlpbnQgaTsKKworCWlmICh1c2Vfa2V5X3JlZ2V4cCkgeworCQljaGFyICp0bDsKKworCQkvKgorCQkgKiBORUVEU1dPUks6IHRoaXMgbmFpdmUgcGF0dGVybiBsb3dlcmNhc2luZyBvYnZpb3VzbHkgZG9lcyBub3QKKwkJICogd29yayBmb3IgbW9yZSBjb21wbGV4IHBhdHRlcm5zIGxpa2UgIl5bXi5dKkZvby4qYmFyIi4KKwkJICogUGVyaGFwcyB3ZSBzaG91bGQgZGVwcmVjYXRlIHRoaXMgYWx0b2dldGhlciBzb21lZGF5LgorCQkgKi8KKworCQlrZXkgPSB4c3RyZHVwKGtleV8pOworCQlmb3IgKHRsID0ga2V5ICsgc3RybGVuKGtleSkgLSAxOworCQkgICAgIHRsID49IGtleSAmJiAqdGwgIT0gJy4nOworCQkgICAgIHRsLS0pCisJCQkqdGwgPSB0b2xvd2VyKCp0bCk7CisJCWZvciAodGwgPSBrZXk7ICp0bCAmJiAqdGwgIT0gJy4nOyB0bCsrKQorCQkJKnRsID0gdG9sb3dlcigqdGwpOworCisJCWtleV9yZWdleHAgPSAocmVnZXhfdCopeG1hbGxvYyhzaXplb2YocmVnZXhfdCkpOworCQlpZiAocmVnY29tcChrZXlfcmVnZXhwLCBrZXksIFJFR19FWFRFTkRFRCkpIHsKKwkJCWVycm9yKCJpbnZhbGlkIGtleSBwYXR0ZXJuOiAlcyIsIGtleV8pOworCQkJZnJlZShrZXlfcmVnZXhwKTsKKwkJCWtleV9yZWdleHAgPSBOVUxMOworCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfUEFUVEVSTjsKKwkJCWdvdG8gZnJlZV9zdHJpbmdzOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGdpdF9jb25maWdfcGFyc2Vfa2V5KGtleV8sICZrZXksIE5VTEwpKSB7CisJCQlyZXQgPSBDT05GSUdfSU5WQUxJRF9LRVk7CisJCQlnb3RvIGZyZWVfc3RyaW5nczsKKwkJfQorCX0KKworCWlmIChyZWdleF8pIHsKKwkJaWYgKHJlZ2V4X1swXSA9PSAnIScpIHsKKwkJCWRvX25vdF9tYXRjaCA9IDE7CisJCQlyZWdleF8rKzsKKwkJfQorCisJCXJlZ2V4cCA9IChyZWdleF90Kil4bWFsbG9jKHNpemVvZihyZWdleF90KSk7CisJCWlmIChyZWdjb21wKHJlZ2V4cCwgcmVnZXhfLCBSRUdfRVhURU5ERUQpKSB7CisJCQllcnJvcigiaW52YWxpZCBwYXR0ZXJuOiAlcyIsIHJlZ2V4Xyk7CisJCQlmcmVlKHJlZ2V4cCk7CisJCQlyZWdleHAgPSBOVUxMOworCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfUEFUVEVSTjsKKwkJCWdvdG8gZnJlZV9zdHJpbmdzOworCQl9CisJfQorCisJZ2l0X2NvbmZpZ193aXRoX29wdGlvbnMoY29sbGVjdF9jb25maWcsICZ2YWx1ZXMsCisJCQkJJmdpdmVuX2NvbmZpZ19zb3VyY2UsIHJlc3BlY3RfaW5jbHVkZXMpOworCisJcmV0ID0gIXZhbHVlcy5ucjsKKworCWZvciAoaSA9IDA7IGkgPCB2YWx1ZXMubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyYnVmICpidWYgPSB2YWx1ZXMuaXRlbXMgKyBpOworCQlpZiAoZG9fYWxsIHx8IGkgPT0gdmFsdWVzLm5yIC0gMSkKKwkJCWZ3cml0ZShidWYtPmJ1ZiwgMSwgYnVmLT5sZW4sIHN0ZG91dCk7CisJCXN0cmJ1Zl9yZWxlYXNlKGJ1Zik7CisJfQorCWZyZWUodmFsdWVzLml0ZW1zKTsKKworZnJlZV9zdHJpbmdzOgorCWZyZWUoa2V5KTsKKwlpZiAoa2V5X3JlZ2V4cCkgeworCQlyZWdmcmVlKGtleV9yZWdleHApOworCQlmcmVlKGtleV9yZWdleHApOworCX0KKwlpZiAocmVnZXhwKSB7CisJCXJlZ2ZyZWUocmVnZXhwKTsKKwkJZnJlZShyZWdleHApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpub3JtYWxpemVfdmFsdWUoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh0eXBlcyA9PSAwIHx8IHR5cGVzID09IFRZUEVfUEFUSCkKKwkJLyoKKwkJICogV2UgZG9uJ3QgZG8gbm9ybWFsaXphdGlvbiBmb3IgVFlQRV9QQVRIIGhlcmU6IElmCisJCSAqIHRoZSBwYXRoIGlzIGxpa2Ugfi9mb29iYXIvLCB3ZSBwcmVmZXIgdG8gc3RvcmUKKwkJICogIn4vZm9vYmFyLyIgaW4gdGhlIGNvbmZpZyBmaWxlLCBhbmQgdG8gZXhwYW5kIHRoZSB+CisJCSAqIHdoZW4gcmV0cmlldmluZyB0aGUgdmFsdWUuCisJCSAqLworCQlyZXR1cm4geHN0cmR1cCh2YWx1ZSk7CisJaWYgKHR5cGVzID09IFRZUEVfSU5UKQorCQlyZXR1cm4geHN0cmZtdCgiJSJQUklkNjQsIGdpdF9jb25maWdfaW50NjQoa2V5LCB2YWx1ZSkpOworCWlmICh0eXBlcyA9PSBUWVBFX0JPT0wpCisJCXJldHVybiB4c3RyZHVwKGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKSA/ICAidHJ1ZSIgOiAiZmFsc2UiKTsKKwlpZiAodHlwZXMgPT0gVFlQRV9CT09MX09SX0lOVCkgeworCQlpbnQgaXNfYm9vbCwgdjsKKwkJdiA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmlzX2Jvb2wpOworCQlpZiAoIWlzX2Jvb2wpCisJCQlyZXR1cm4geHN0cmZtdCgiJWQiLCB2KTsKKwkJZWxzZQorCQkJcmV0dXJuIHhzdHJkdXAodiA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCX0KKworCWRpZSgiQlVHOiBjYW5ub3Qgbm9ybWFsaXplIHR5cGUgJWQiLCB0eXBlcyk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NvbG9yX2ZvdW5kOworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcl9zbG90Oworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9jb2xvcmJvb2xfc2xvdDsKK3N0YXRpYyBjaGFyIHBhcnNlZF9jb2xvcltDT0xPUl9NQVhMRU5dOworCitzdGF0aWMgaW50IGdpdF9nZXRfY29sb3JfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgZ2V0X2NvbG9yX3Nsb3QpKSB7CisJCWlmICghdmFsdWUpCisJCQljb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlpZiAoY29sb3JfcGFyc2UodmFsdWUsIHBhcnNlZF9jb2xvcikgPCAwKQorCQkJcmV0dXJuIC0xOworCQlnZXRfY29sb3JfZm91bmQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2V0X2NvbG9yKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqZGVmX2NvbG9yKQoreworCWdldF9jb2xvcl9zbG90ID0gdmFyOworCWdldF9jb2xvcl9mb3VuZCA9IDA7CisJcGFyc2VkX2NvbG9yWzBdID0gJ1wwJzsKKwlnaXRfY29uZmlnX3dpdGhfb3B0aW9ucyhnaXRfZ2V0X2NvbG9yX2NvbmZpZywgTlVMTCwKKwkJCQkmZ2l2ZW5fY29uZmlnX3NvdXJjZSwgcmVzcGVjdF9pbmNsdWRlcyk7CisKKwlpZiAoIWdldF9jb2xvcl9mb3VuZCAmJiBkZWZfY29sb3IpIHsKKwkJaWYgKGNvbG9yX3BhcnNlKGRlZl9jb2xvciwgcGFyc2VkX2NvbG9yKSA8IDApCisJCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGRlZmF1bHQgY29sb3IgdmFsdWUiKSk7CisJfQorCisJZnB1dHMocGFyc2VkX2NvbG9yLCBzdGRvdXQpOworfQorCitzdGF0aWMgaW50IGdldF9jb2xvcmJvb2xfZm91bmQ7CitzdGF0aWMgaW50IGdldF9kaWZmX2NvbG9yX2ZvdW5kOworc3RhdGljIGludCBnZXRfY29sb3JfdWlfZm91bmQ7CitzdGF0aWMgaW50IGdpdF9nZXRfY29sb3Jib29sX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQl2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsIGdldF9jb2xvcmJvb2xfc2xvdCkpCisJCWdldF9jb2xvcmJvb2xfZm91bmQgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHZhciwgImRpZmYuY29sb3IiKSkKKwkJZ2V0X2RpZmZfY29sb3JfZm91bmQgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHZhciwgImNvbG9yLnVpIikpCisJCWdldF9jb2xvcl91aV9mb3VuZCA9IGdpdF9jb25maWdfY29sb3Jib29sKHZhciwgdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9jb2xvcmJvb2woY29uc3QgY2hhciAqdmFyLCBpbnQgcHJpbnQpCit7CisJZ2V0X2NvbG9yYm9vbF9zbG90ID0gdmFyOworCWdldF9jb2xvcmJvb2xfZm91bmQgPSAtMTsKKwlnZXRfZGlmZl9jb2xvcl9mb3VuZCA9IC0xOworCWdldF9jb2xvcl91aV9mb3VuZCA9IC0xOworCWdpdF9jb25maWdfd2l0aF9vcHRpb25zKGdpdF9nZXRfY29sb3Jib29sX2NvbmZpZywgTlVMTCwKKwkJCQkmZ2l2ZW5fY29uZmlnX3NvdXJjZSwgcmVzcGVjdF9pbmNsdWRlcyk7CisKKwlpZiAoZ2V0X2NvbG9yYm9vbF9mb3VuZCA8IDApIHsKKwkJaWYgKCFzdHJjbXAoZ2V0X2NvbG9yYm9vbF9zbG90LCAiY29sb3IuZGlmZiIpKQorCQkJZ2V0X2NvbG9yYm9vbF9mb3VuZCA9IGdldF9kaWZmX2NvbG9yX2ZvdW5kOworCQlpZiAoZ2V0X2NvbG9yYm9vbF9mb3VuZCA8IDApCisJCQlnZXRfY29sb3Jib29sX2ZvdW5kID0gZ2V0X2NvbG9yX3VpX2ZvdW5kOworCX0KKworCWlmIChnZXRfY29sb3Jib29sX2ZvdW5kIDwgMCkKKwkJLyogZGVmYXVsdCB2YWx1ZSBpZiBub25lIGZvdW5kIGluIGNvbmZpZyAqLworCQlnZXRfY29sb3Jib29sX2ZvdW5kID0gR0lUX0NPTE9SX0FVVE87CisKKwlnZXRfY29sb3Jib29sX2ZvdW5kID0gd2FudF9jb2xvcihnZXRfY29sb3Jib29sX2ZvdW5kKTsKKworCWlmIChwcmludCkgeworCQlwcmludGYoIiVzXG4iLCBnZXRfY29sb3Jib29sX2ZvdW5kID8gInRydWUiIDogImZhbHNlIik7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gZ2V0X2NvbG9yYm9vbF9mb3VuZCA/IDAgOiAxOworfQorCitzdGF0aWMgdm9pZCBjaGVja193cml0ZSh2b2lkKQoreworCWlmIChnaXZlbl9jb25maWdfc291cmNlLnVzZV9zdGRpbikKKwkJZGllKCJ3cml0aW5nIHRvIHN0ZGluIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKworCWlmIChnaXZlbl9jb25maWdfc291cmNlLmJsb2IpCisJCWRpZSgid3JpdGluZyBjb25maWcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIpOworfQorCitzdHJ1Y3QgdXJsbWF0Y2hfY3VycmVudF9jYW5kaWRhdGVfdmFsdWUgeworCWNoYXIgdmFsdWVfaXNfbnVsbDsKKwlzdHJ1Y3Qgc3RyYnVmIHZhbHVlOworfTsKKworc3RhdGljIGludCB1cmxtYXRjaF9jb2xsZWN0X2ZuKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqdmFsdWVzID0gY2I7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQodmFsdWVzLCB2YXIpOworCXN0cnVjdCB1cmxtYXRjaF9jdXJyZW50X2NhbmRpZGF0ZV92YWx1ZSAqbWF0Y2hlZCA9IGl0ZW0tPnV0aWw7CisKKwlpZiAoIW1hdGNoZWQpIHsKKwkJbWF0Y2hlZCA9IHhtYWxsb2Moc2l6ZW9mKCptYXRjaGVkKSk7CisJCXN0cmJ1Zl9pbml0KCZtYXRjaGVkLT52YWx1ZSwgMCk7CisJCWl0ZW0tPnV0aWwgPSBtYXRjaGVkOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9yZXNldCgmbWF0Y2hlZC0+dmFsdWUpOworCX0KKworCWlmICh2YWx1ZSkgeworCQlzdHJidWZfYWRkc3RyKCZtYXRjaGVkLT52YWx1ZSwgdmFsdWUpOworCQltYXRjaGVkLT52YWx1ZV9pc19udWxsID0gMDsKKwl9IGVsc2UgeworCQltYXRjaGVkLT52YWx1ZV9pc19udWxsID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3VybG1hdGNoKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdXJsKQoreworCWNoYXIgKnNlY3Rpb25fdGFpbDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgdXJsbWF0Y2hfY29uZmlnIGNvbmZpZyA9IHsgU1RSSU5HX0xJU1RfSU5JVF9EVVAgfTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdmFsdWVzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwljb25maWcuY29sbGVjdF9mbiA9IHVybG1hdGNoX2NvbGxlY3RfZm47CisJY29uZmlnLmNhc2NhZGVfZm4gPSBOVUxMOworCWNvbmZpZy5jYiA9ICZ2YWx1ZXM7CisKKwlpZiAoIXVybF9ub3JtYWxpemUodXJsLCAmY29uZmlnLnVybCkpCisJCWRpZSgiJXMiLCBjb25maWcudXJsLmVycik7CisKKwljb25maWcuc2VjdGlvbiA9IHhzdHJkdXBfdG9sb3dlcih2YXIpOworCXNlY3Rpb25fdGFpbCA9IHN0cmNocihjb25maWcuc2VjdGlvbiwgJy4nKTsKKwlpZiAoc2VjdGlvbl90YWlsKSB7CisJCSpzZWN0aW9uX3RhaWwgPSAnXDAnOworCQljb25maWcua2V5ID0gc2VjdGlvbl90YWlsICsgMTsKKwkJc2hvd19rZXlzID0gMDsKKwl9IGVsc2UgeworCQljb25maWcua2V5ID0gTlVMTDsKKwkJc2hvd19rZXlzID0gMTsKKwl9CisKKwlnaXRfY29uZmlnX3dpdGhfb3B0aW9ucyh1cmxtYXRjaF9jb25maWdfZW50cnksICZjb25maWcsCisJCQkJJmdpdmVuX2NvbmZpZ19zb3VyY2UsIHJlc3BlY3RfaW5jbHVkZXMpOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmdmFsdWVzKSB7CisJCXN0cnVjdCB1cmxtYXRjaF9jdXJyZW50X2NhbmRpZGF0ZV92YWx1ZSAqbWF0Y2hlZCA9IGl0ZW0tPnV0aWw7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkJZm9ybWF0X2NvbmZpZygmYnVmLCBpdGVtLT5zdHJpbmcsCisJCQkgICAgICBtYXRjaGVkLT52YWx1ZV9pc19udWxsID8gTlVMTCA6IG1hdGNoZWQtPnZhbHVlLmJ1Zik7CisJCWZ3cml0ZShidWYuYnVmLCAxLCBidWYubGVuLCBzdGRvdXQpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCQlzdHJidWZfcmVsZWFzZSgmbWF0Y2hlZC0+dmFsdWUpOworCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmY29uZmlnLnZhcnMsIDEpOworCXN0cmluZ19saXN0X2NsZWFyKCZ2YWx1ZXMsIDEpOworCWZyZWUoY29uZmlnLnVybC51cmwpOworCisJZnJlZSgodm9pZCAqKWNvbmZpZy5zZWN0aW9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgKmRlZmF1bHRfdXNlcl9jb25maWcodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZidWYsCisJCSAgICBfKCIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorCQkgICAgICAiW3VzZXJdXG4iCisJCSAgICAgICIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisJCSAgICAgICIjCW5hbWUgPSAlc1xuIgorCQkgICAgICAiIwllbWFpbCA9ICVzXG4iKSwKKwkJICAgIGlkZW50X2RlZmF1bHRfbmFtZSgpLAorCQkgICAgaWRlbnRfZGVmYXVsdF9lbWFpbCgpKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworaW50IGNtZF9jb25maWcoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG5vbmdpdCA9ICFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeTsKKwljaGFyICp2YWx1ZTsKKworCWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA9IGdldGVudihDT05GSUdfRU5WSVJPTk1FTlQpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2NvbmZpZ19vcHRpb25zLAorCQkJICAgICBidWlsdGluX2NvbmZpZ191c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlpZiAodXNlX2dsb2JhbF9jb25maWcgKyB1c2Vfc3lzdGVtX2NvbmZpZyArIHVzZV9sb2NhbF9jb25maWcgKworCSAgICAhIWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSArICEhZ2l2ZW5fY29uZmlnX3NvdXJjZS5ibG9iID4gMSkgeworCQllcnJvcigib25seSBvbmUgY29uZmlnIGZpbGUgYXQgYSB0aW1lLiIpOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9jb25maWdfdXNhZ2UsIGJ1aWx0aW5fY29uZmlnX29wdGlvbnMpOworCX0KKworCWlmIChnaXZlbl9jb25maWdfc291cmNlLmZpbGUgJiYKKwkJCSFzdHJjbXAoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLCAiLSIpKSB7CisJCWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA9IE5VTEw7CisJCWdpdmVuX2NvbmZpZ19zb3VyY2UudXNlX3N0ZGluID0gMTsKKwl9CisKKwlpZiAodXNlX2dsb2JhbF9jb25maWcpIHsKKwkJY2hhciAqdXNlcl9jb25maWcgPSBleHBhbmRfdXNlcl9wYXRoKCJ+Ly5naXRjb25maWciKTsKKwkJY2hhciAqeGRnX2NvbmZpZyA9IHhkZ19jb25maWdfaG9tZSgiY29uZmlnIik7CisKKwkJaWYgKCF1c2VyX2NvbmZpZykKKwkJCS8qCisJCQkgKiBJdCBpcyB1bmtub3duIGlmIEhPTUUvLmdpdGNvbmZpZyBleGlzdHMsIHNvCisJCQkgKiB3ZSBkbyBub3Qga25vdyBpZiB3ZSBzaG91bGQgd3JpdGUgdG8gWERHCisJCQkgKiBsb2NhdGlvbjsgZXJyb3Igb3V0IGV2ZW4gaWYgWERHX0NPTkZJR19IT01FCisJCQkgKiBpcyBzZXQgYW5kIHBvaW50cyBhdCBhIHNhbmUgbG9jYXRpb24uCisJCQkgKi8KKwkJCWRpZSgiJEhPTUUgbm90IHNldCIpOworCisJCWlmIChhY2Nlc3Nfb3Jfd2Fybih1c2VyX2NvbmZpZywgUl9PSywgMCkgJiYKKwkJICAgIHhkZ19jb25maWcgJiYgIWFjY2Vzc19vcl93YXJuKHhkZ19jb25maWcsIFJfT0ssIDApKQorCQkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlID0geGRnX2NvbmZpZzsKKwkJZWxzZQorCQkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlID0gdXNlcl9jb25maWc7CisJfQorCWVsc2UgaWYgKHVzZV9zeXN0ZW1fY29uZmlnKQorCQlnaXZlbl9jb25maWdfc291cmNlLmZpbGUgPSBnaXRfZXRjX2dpdGNvbmZpZygpOworCWVsc2UgaWYgKHVzZV9sb2NhbF9jb25maWcpCisJCWdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA9IGdpdF9wYXRoZHVwKCJjb25maWciKTsKKwllbHNlIGlmIChnaXZlbl9jb25maWdfc291cmNlLmZpbGUpIHsKKwkJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSkgJiYgcHJlZml4KQorCQkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlID0KKwkJCQl4c3RyZHVwKHByZWZpeF9maWxlbmFtZShwcmVmaXgsCisJCQkJCQkJc3RybGVuKHByZWZpeCksCisJCQkJCQkJZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlKSk7CisJfQorCisJaWYgKHJlc3BlY3RfaW5jbHVkZXMgPT0gLTEpCisJCXJlc3BlY3RfaW5jbHVkZXMgPSAhZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlOworCisJaWYgKGVuZF9udWxsKSB7CisJCXRlcm0gPSAnXDAnOworCQlkZWxpbSA9ICdcbic7CisJCWtleV9kZWxpbSA9ICdcbic7CisJfQorCisJaWYgKEhBU19NVUxUSV9CSVRTKHR5cGVzKSkgeworCQllcnJvcigib25seSBvbmUgdHlwZSBhdCBhIHRpbWUuIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbmZpZ191c2FnZSwgYnVpbHRpbl9jb25maWdfb3B0aW9ucyk7CisJfQorCisJaWYgKChhY3Rpb25zICYgKEFDVElPTl9HRVRfQ09MT1J8QUNUSU9OX0dFVF9DT0xPUkJPT0wpKSAmJiB0eXBlcykgeworCQllcnJvcigiLS1nZXQtY29sb3IgYW5kIHZhcmlhYmxlIHR5cGUgYXJlIGluY29oZXJlbnQiKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fY29uZmlnX3VzYWdlLCBidWlsdGluX2NvbmZpZ19vcHRpb25zKTsKKwl9CisKKwlpZiAoSEFTX01VTFRJX0JJVFMoYWN0aW9ucykpIHsKKwkJZXJyb3IoIm9ubHkgb25lIGFjdGlvbiBhdCBhIHRpbWUuIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbmZpZ191c2FnZSwgYnVpbHRpbl9jb25maWdfb3B0aW9ucyk7CisJfQorCWlmIChhY3Rpb25zID09IDApCisJCXN3aXRjaCAoYXJnYykgeworCQljYXNlIDE6IGFjdGlvbnMgPSBBQ1RJT05fR0VUOyBicmVhazsKKwkJY2FzZSAyOiBhY3Rpb25zID0gQUNUSU9OX1NFVDsgYnJlYWs7CisJCWNhc2UgMzogYWN0aW9ucyA9IEFDVElPTl9TRVRfQUxMOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2NvbmZpZ191c2FnZSwgYnVpbHRpbl9jb25maWdfb3B0aW9ucyk7CisJCX0KKwlpZiAob21pdF92YWx1ZXMgJiYKKwkgICAgIShhY3Rpb25zID09IEFDVElPTl9MSVNUIHx8IGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9SRUdFWFApKSB7CisJCWVycm9yKCItLW5hbWUtb25seSBpcyBvbmx5IGFwcGxpY2FibGUgdG8gLS1saXN0IG9yIC0tZ2V0LXJlZ2V4cCIpOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9jb25maWdfdXNhZ2UsIGJ1aWx0aW5fY29uZmlnX29wdGlvbnMpOworCX0KKwlpZiAoYWN0aW9ucyA9PSBBQ1RJT05fTElTVCkgeworCQljaGVja19hcmdjKGFyZ2MsIDAsIDApOworCQlpZiAoZ2l0X2NvbmZpZ193aXRoX29wdGlvbnMoc2hvd19hbGxfY29uZmlnLCBOVUxMLAorCQkJCQkgICAgJmdpdmVuX2NvbmZpZ19zb3VyY2UsCisJCQkJCSAgICByZXNwZWN0X2luY2x1ZGVzKSA8IDApIHsKKwkJCWlmIChnaXZlbl9jb25maWdfc291cmNlLmZpbGUpCisJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVhZCBjb25maWcgZmlsZSAnJXMnIiwKKwkJCQkJICBnaXZlbl9jb25maWdfc291cmNlLmZpbGUpOworCQkJZWxzZQorCQkJCWRpZSgiZXJyb3IgcHJvY2Vzc2luZyBjb25maWcgZmlsZShzKSIpOworCQl9CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0VESVQpIHsKKwkJY2hhciAqY29uZmlnX2ZpbGU7CisKKwkJY2hlY2tfYXJnYyhhcmdjLCAwLCAwKTsKKwkJaWYgKCFnaXZlbl9jb25maWdfc291cmNlLmZpbGUgJiYgbm9uZ2l0KQorCQkJZGllKCJub3QgaW4gYSBnaXQgZGlyZWN0b3J5Iik7CisJCWlmIChnaXZlbl9jb25maWdfc291cmNlLnVzZV9zdGRpbikKKwkJCWRpZSgiZWRpdGluZyBzdGRpbiBpcyBub3Qgc3VwcG9ydGVkIik7CisJCWlmIChnaXZlbl9jb25maWdfc291cmNlLmJsb2IpCisJCQlkaWUoImVkaXRpbmcgYmxvYnMgaXMgbm90IHN1cHBvcnRlZCIpOworCQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJCWNvbmZpZ19maWxlID0geHN0cmR1cChnaXZlbl9jb25maWdfc291cmNlLmZpbGUgPworCQkJCSAgICAgIGdpdmVuX2NvbmZpZ19zb3VyY2UuZmlsZSA6IGdpdF9wYXRoKCJjb25maWciKSk7CisJCWlmICh1c2VfZ2xvYmFsX2NvbmZpZykgeworCQkJaW50IGZkID0gb3Blbihjb25maWdfZmlsZSwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAwNjY2KTsKKwkJCWlmIChmZCkgeworCQkJCWNoYXIgKmNvbnRlbnQgPSBkZWZhdWx0X3VzZXJfY29uZmlnKCk7CisJCQkJd3JpdGVfc3RyX2luX2Z1bGwoZmQsIGNvbnRlbnQpOworCQkJCWZyZWUoY29udGVudCk7CisJCQkJY2xvc2UoZmQpOworCQkJfQorCQkJZWxzZSBpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIpLCBjb25maWdfZmlsZSk7CisJCX0KKwkJbGF1bmNoX2VkaXRvcihjb25maWdfZmlsZSwgTlVMTCwgTlVMTCk7CisJCWZyZWUoY29uZmlnX2ZpbGUpOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9TRVQpIHsKKwkJaW50IHJldDsKKwkJY2hlY2tfd3JpdGUoKTsKKwkJY2hlY2tfYXJnYyhhcmdjLCAyLCAyKTsKKwkJdmFsdWUgPSBub3JtYWxpemVfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJCXJldCA9IGdpdF9jb25maWdfc2V0X2luX2ZpbGUoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLCBhcmd2WzBdLCB2YWx1ZSk7CisJCWlmIChyZXQgPT0gQ09ORklHX05PVEhJTkdfU0VUKQorCQkJZXJyb3IoImNhbm5vdCBvdmVyd3JpdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGggYSBzaW5nbGUgdmFsdWVcbiIKKwkJCSIgICAgICAgVXNlIGEgcmVnZXhwLCAtLWFkZCBvciAtLXJlcGxhY2UtYWxsIHRvIGNoYW5nZSAlcy4iLCBhcmd2WzBdKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fU0VUX0FMTCkgeworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDIsIDMpOworCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLAorCQkJCQkJICAgICAgIGFyZ3ZbMF0sIHZhbHVlLCBhcmd2WzJdLCAwKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fQUREKSB7CisJCWNoZWNrX3dyaXRlKCk7CisJCWNoZWNrX2FyZ2MoYXJnYywgMiwgMik7CisJCXZhbHVlID0gbm9ybWFsaXplX3ZhbHVlKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZShnaXZlbl9jb25maWdfc291cmNlLmZpbGUsCisJCQkJCQkgICAgICAgYXJndlswXSwgdmFsdWUsCisJCQkJCQkgICAgICAgQ09ORklHX1JFR0VYX05PTkUsIDApOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9SRVBMQUNFX0FMTCkgeworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDIsIDMpOworCQl2YWx1ZSA9IG5vcm1hbGl6ZV92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLAorCQkJCQkJICAgICAgIGFyZ3ZbMF0sIHZhbHVlLCBhcmd2WzJdLCAxKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fR0VUKSB7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCXJldHVybiBnZXRfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9BTEwpIHsKKwkJZG9fYWxsID0gMTsKKwkJY2hlY2tfYXJnYyhhcmdjLCAxLCAyKTsKKwkJcmV0dXJuIGdldF92YWx1ZShhcmd2WzBdLCBhcmd2WzFdKTsKKwl9CisJZWxzZSBpZiAoYWN0aW9ucyA9PSBBQ1RJT05fR0VUX1JFR0VYUCkgeworCQlzaG93X2tleXMgPSAxOworCQl1c2Vfa2V5X3JlZ2V4cCA9IDE7CisJCWRvX2FsbCA9IDE7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMik7CisJCXJldHVybiBnZXRfdmFsdWUoYXJndlswXSwgYXJndlsxXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9VUkxNQVRDSCkgeworCQljaGVja19hcmdjKGFyZ2MsIDIsIDIpOworCQlyZXR1cm4gZ2V0X3VybG1hdGNoKGFyZ3ZbMF0sIGFyZ3ZbMV0pOworCX0KKwllbHNlIGlmIChhY3Rpb25zID09IEFDVElPTl9VTlNFVCkgeworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDEsIDIpOworCQlpZiAoYXJnYyA9PSAyKQorCQkJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLAorCQkJCQkJCSAgICAgICBhcmd2WzBdLCBOVUxMLCBhcmd2WzFdLCAwKTsKKwkJZWxzZQorCQkJcmV0dXJuIGdpdF9jb25maWdfc2V0X2luX2ZpbGUoZ2l2ZW5fY29uZmlnX3NvdXJjZS5maWxlLAorCQkJCQkJICAgICAgYXJndlswXSwgTlVMTCk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1VOU0VUX0FMTCkgeworCQljaGVja193cml0ZSgpOworCQljaGVja19hcmdjKGFyZ2MsIDEsIDIpOworCQlyZXR1cm4gZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZShnaXZlbl9jb25maWdfc291cmNlLmZpbGUsCisJCQkJCQkgICAgICAgYXJndlswXSwgTlVMTCwgYXJndlsxXSwgMSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1JFTkFNRV9TRUNUSU9OKSB7CisJCWludCByZXQ7CisJCWNoZWNrX3dyaXRlKCk7CisJCWNoZWNrX2FyZ2MoYXJnYywgMiwgMik7CisJCXJldCA9IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShnaXZlbl9jb25maWdfc291cmNlLmZpbGUsCisJCQkJCQkJYXJndlswXSwgYXJndlsxXSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKHJldCA9PSAwKQorCQkJZGllKCJObyBzdWNoIHNlY3Rpb24hIik7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX1JFTU9WRV9TRUNUSU9OKSB7CisJCWludCByZXQ7CisJCWNoZWNrX3dyaXRlKCk7CisJCWNoZWNrX2FyZ2MoYXJnYywgMSwgMSk7CisJCXJldCA9IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShnaXZlbl9jb25maWdfc291cmNlLmZpbGUsCisJCQkJCQkJYXJndlswXSwgTlVMTCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJaWYgKHJldCA9PSAwKQorCQkJZGllKCJObyBzdWNoIHNlY3Rpb24hIik7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9DT0xPUikgeworCQljaGVja19hcmdjKGFyZ2MsIDEsIDIpOworCQlnZXRfY29sb3IoYXJndlswXSwgYXJndlsxXSk7CisJfQorCWVsc2UgaWYgKGFjdGlvbnMgPT0gQUNUSU9OX0dFVF9DT0xPUkJPT0wpIHsKKwkJY2hlY2tfYXJnYyhhcmdjLCAxLCAyKTsKKwkJaWYgKGFyZ2MgPT0gMikKKwkJCWNvbG9yX3N0ZG91dF9pc190dHkgPSBnaXRfY29uZmlnX2Jvb2woImNvbW1hbmQgbGluZSIsIGFyZ3ZbMV0pOworCQlyZXR1cm4gZ2V0X2NvbG9yYm9vbChhcmd2WzBdLCBhcmdjID09IDIpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9jb3VudC1vYmplY3RzLmMgYi9idWlsdGluL2NvdW50LW9iamVjdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDBjNzk5Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9jb3VudC1vYmplY3RzLmMKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgY291bnQtb2JqZWN0cyIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2FyYmFnZTsKK3N0YXRpYyBvZmZfdCBzaXplX2dhcmJhZ2U7CitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb29zZSwgcGFja2VkLCBwYWNrZWRfbG9vc2U7CitzdGF0aWMgb2ZmX3QgbG9vc2Vfc2l6ZTsKKworc3RhdGljIHZvaWQgcmVhbF9yZXBvcnRfZ2FyYmFnZShjb25zdCBjaGFyICpkZXNjLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdGF0IHN0OworCWlmICghc3RhdChwYXRoLCAmc3QpKQorCQlzaXplX2dhcmJhZ2UgKz0gc3Quc3Rfc2l6ZTsKKwl3YXJuaW5nKCIlczogJXMiLCBkZXNjLCBwYXRoKTsKKwlnYXJiYWdlKys7Cit9CisKK3N0YXRpYyB2b2lkIGxvb3NlX2dhcmJhZ2UoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAodmVyYm9zZSkKKwkJcmVwb3J0X2dhcmJhZ2UoImdhcmJhZ2UgZm91bmQiLCBwYXRoKTsKK30KKworc3RhdGljIGludCBjb3VudF9sb29zZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGxzdGF0KHBhdGgsICZzdCkgfHwgIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCWxvb3NlX2dhcmJhZ2UocGF0aCk7CisJZWxzZSB7CisJCWxvb3NlX3NpemUgKz0gb25fZGlza19ieXRlcyhzdCk7CisJCWxvb3NlKys7CisJCWlmICh2ZXJib3NlICYmIGhhc19zaGExX3BhY2soc2hhMSkpCisJCQlwYWNrZWRfbG9vc2UrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfY3J1ZnQoY29uc3QgY2hhciAqYmFzZW5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmRhdGEpCit7CisJbG9vc2VfZ2FyYmFnZShwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBjb3VudF9vYmplY3RzX3VzYWdlW10gPSB7CisJTl8oImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iKSwKKwlOVUxMCit9OworCitpbnQgY21kX2NvdW50X29iamVjdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGh1bWFuX3JlYWRhYmxlID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX0JPT0woJ0gnLCAiaHVtYW4tcmVhZGFibGUiLCAmaHVtYW5fcmVhZGFibGUsCisJCQkgTl8oInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdHMsIGNvdW50X29iamVjdHNfdXNhZ2UsIDApOworCS8qIHdlIGRvIG5vdCB0YWtlIGFyZ3VtZW50cyBvdGhlciB0aGFuIGZsYWdzIGZvciBub3cgKi8KKwlpZiAoYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNvdW50X29iamVjdHNfdXNhZ2UsIG9wdHMpOworCWlmICh2ZXJib3NlKSB7CisJCXJlcG9ydF9nYXJiYWdlID0gcmVhbF9yZXBvcnRfZ2FyYmFnZTsKKwkJcmVwb3J0X2xpbmtlZF9jaGVja291dF9nYXJiYWdlKCk7CisJfQorCisJZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXIoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwKKwkJCQkgICAgICBjb3VudF9sb29zZSwgY291bnRfY3J1ZnQsIE5VTEwsIE5VTEwpOworCisJaWYgKHZlcmJvc2UpIHsKKwkJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJCXVuc2lnbmVkIGxvbmcgbnVtX3BhY2sgPSAwOworCQlvZmZfdCBzaXplX3BhY2sgPSAwOworCQlzdHJ1Y3Qgc3RyYnVmIGxvb3NlX2J1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIHBhY2tfYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgZ2FyYmFnZV9idWYgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKCFwYWNrZWRfZ2l0KQorCQkJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CisJCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQlpZiAoIXAtPnBhY2tfbG9jYWwpCisJCQkJY29udGludWU7CisJCQlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQkJCWNvbnRpbnVlOworCQkJcGFja2VkICs9IHAtPm51bV9vYmplY3RzOworCQkJc2l6ZV9wYWNrICs9IHAtPnBhY2tfc2l6ZSArIHAtPmluZGV4X3NpemU7CisJCQludW1fcGFjaysrOworCQl9CisKKwkJaWYgKGh1bWFuX3JlYWRhYmxlKSB7CisJCQlzdHJidWZfaHVtYW5pc2VfYnl0ZXMoJmxvb3NlX2J1ZiwgbG9vc2Vfc2l6ZSk7CisJCQlzdHJidWZfaHVtYW5pc2VfYnl0ZXMoJnBhY2tfYnVmLCBzaXplX3BhY2spOworCQkJc3RyYnVmX2h1bWFuaXNlX2J5dGVzKCZnYXJiYWdlX2J1Ziwgc2l6ZV9nYXJiYWdlKTsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRmKCZsb29zZV9idWYsICIlbHUiLAorCQkJCSAgICAodW5zaWduZWQgbG9uZykobG9vc2Vfc2l6ZSAvIDEwMjQpKTsKKwkJCXN0cmJ1Zl9hZGRmKCZwYWNrX2J1ZiwgIiVsdSIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKShzaXplX3BhY2sgLyAxMDI0KSk7CisJCQlzdHJidWZfYWRkZigmZ2FyYmFnZV9idWYsICIlbHUiLAorCQkJCSAgICAodW5zaWduZWQgbG9uZykoc2l6ZV9nYXJiYWdlIC8gMTAyNCkpOworCQl9CisKKwkJcHJpbnRmKCJjb3VudDogJWx1XG4iLCBsb29zZSk7CisJCXByaW50Zigic2l6ZTogJXNcbiIsIGxvb3NlX2J1Zi5idWYpOworCQlwcmludGYoImluLXBhY2s6ICVsdVxuIiwgcGFja2VkKTsKKwkJcHJpbnRmKCJwYWNrczogJWx1XG4iLCBudW1fcGFjayk7CisJCXByaW50Zigic2l6ZS1wYWNrOiAlc1xuIiwgcGFja19idWYuYnVmKTsKKwkJcHJpbnRmKCJwcnVuZS1wYWNrYWJsZTogJWx1XG4iLCBwYWNrZWRfbG9vc2UpOworCQlwcmludGYoImdhcmJhZ2U6ICVsdVxuIiwgZ2FyYmFnZSk7CisJCXByaW50Zigic2l6ZS1nYXJiYWdlOiAlc1xuIiwgZ2FyYmFnZV9idWYuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmxvb3NlX2J1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZwYWNrX2J1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZnYXJiYWdlX2J1Zik7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKGh1bWFuX3JlYWRhYmxlKQorCQkJc3RyYnVmX2h1bWFuaXNlX2J5dGVzKCZidWYsIGxvb3NlX3NpemUpOworCQllbHNlCisJCQlzdHJidWZfYWRkZigmYnVmLCAiJWx1IGtpbG9ieXRlcyIsCisJCQkJICAgICh1bnNpZ25lZCBsb25nKShsb29zZV9zaXplIC8gMTAyNCkpOworCQlwcmludGYoIiVsdSBvYmplY3RzLCAlc1xuIiwgbG9vc2UsIGJ1Zi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2NyZWRlbnRpYWwuYyBiL2J1aWx0aW4vY3JlZGVudGlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MTJmYTAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2NyZWRlbnRpYWwuYwpAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiY3JlZGVudGlhbC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdXNhZ2VfbXNnW10gPQorCSJnaXQgY3JlZGVudGlhbCBbZmlsbHxhcHByb3ZlfHJlamVjdF0iOworCitpbnQgY21kX2NyZWRlbnRpYWwoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqb3A7CisJc3RydWN0IGNyZWRlbnRpYWwgYyA9IENSRURFTlRJQUxfSU5JVDsKKworCW9wID0gYXJndlsxXTsKKwlpZiAoIW9wKQorCQl1c2FnZSh1c2FnZV9tc2cpOworCisJaWYgKGNyZWRlbnRpYWxfcmVhZCgmYywgc3RkaW4pIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBjcmVkZW50aWFsIGZyb20gc3RkaW4iKTsKKworCWlmICghc3RyY21wKG9wLCAiZmlsbCIpKSB7CisJCWNyZWRlbnRpYWxfZmlsbCgmYyk7CisJCWNyZWRlbnRpYWxfd3JpdGUoJmMsIHN0ZG91dCk7CisJfSBlbHNlIGlmICghc3RyY21wKG9wLCAiYXBwcm92ZSIpKSB7CisJCWNyZWRlbnRpYWxfYXBwcm92ZSgmYyk7CisJfSBlbHNlIGlmICghc3RyY21wKG9wLCAicmVqZWN0IikpIHsKKwkJY3JlZGVudGlhbF9yZWplY3QoJmMpOworCX0gZWxzZSB7CisJCXVzYWdlKHVzYWdlX21zZyk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9kZXNjcmliZS5jIGIvYnVpbHRpbi9kZXNjcmliZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZjU1NDMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Rlc2NyaWJlLmMKQEAgLTAsMCArMSw0ODIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworI2RlZmluZSBTRUVOCQkoMXUgPDwgMCkKKyNkZWZpbmUgTUFYX1RBR1MJKEZMQUdfQklUUyAtIDEpCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGVzY3JpYmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIFs8Y29tbWl0LWlzaD4uLi5dIiksCisJTl8oImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBkZWJ1ZzsJLyogRGlzcGxheSBsb3RzIG9mIHZlcmJvc2UgaW5mbyAqLworc3RhdGljIGludCBhbGw7CS8qIEFueSB2YWxpZCByZWYgY2FuIGJlIHVzZWQgKi8KK3N0YXRpYyBpbnQgdGFnczsJLyogQWxsb3cgbGlnaHR3ZWlnaHQgdGFncyAqLworc3RhdGljIGludCBsb25nZm9ybWF0Oworc3RhdGljIGludCBmaXJzdF9wYXJlbnQ7CitzdGF0aWMgaW50IGFiYnJldiA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworc3RhdGljIGludCBtYXhfY2FuZGlkYXRlcyA9IDEwOworc3RhdGljIHN0cnVjdCBoYXNobWFwIG5hbWVzOworc3RhdGljIGludCBoYXZlX3V0aWw7CitzdGF0aWMgY29uc3QgY2hhciAqcGF0dGVybjsKK3N0YXRpYyBpbnQgYWx3YXlzOworc3RhdGljIGNvbnN0IGNoYXIgKmRpcnR5OworCisvKiBkaWZmLWluZGV4IGNvbW1hbmQgYXJndW1lbnRzIHRvIGNoZWNrIGlmIHdvcmtpbmcgdHJlZSBpcyBkaXJ0eS4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkaWZmX2luZGV4X2FyZ3NbXSA9IHsKKwkiZGlmZi1pbmRleCIsICItLXF1aWV0IiwgIkhFQUQiLCAiLS0iLCBOVUxMCit9OworCitzdHJ1Y3QgY29tbWl0X25hbWUgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudHJ5OworCXVuc2lnbmVkIGNoYXIgcGVlbGVkWzIwXTsKKwlzdHJ1Y3QgdGFnICp0YWc7CisJdW5zaWduZWQgcHJpbzoyOyAvKiBhbm5vdGF0ZWQgdGFnID0gMiwgdGFnID0gMSwgaGVhZCA9IDAgKi8KKwl1bnNpZ25lZCBuYW1lX2NoZWNrZWQ6MTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNoYXIgKnBhdGg7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqcHJpb19uYW1lc1tdID0geworCSJoZWFkIiwgImxpZ2h0d2VpZ2h0IiwgImFubm90YXRlZCIsCit9OworCitzdGF0aWMgaW50IGNvbW1pdF9uYW1lX2NtcChjb25zdCBzdHJ1Y3QgY29tbWl0X25hbWUgKmNuMSwKKwkJY29uc3Qgc3RydWN0IGNvbW1pdF9uYW1lICpjbjIsIGNvbnN0IHZvaWQgKnBlZWxlZCkKK3sKKwlyZXR1cm4gaGFzaGNtcChjbjEtPnBlZWxlZCwgcGVlbGVkID8gcGVlbGVkIDogY24yLT5wZWVsZWQpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjb21taXRfbmFtZSAqZmluZF9jb21taXRfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpwZWVsZWQpCit7CisJcmV0dXJuIGhhc2htYXBfZ2V0X2Zyb21faGFzaCgmbmFtZXMsIHNoYTFoYXNoKHBlZWxlZCksIHBlZWxlZCk7Cit9CisKK3N0YXRpYyBpbnQgcmVwbGFjZV9uYW1lKHN0cnVjdCBjb21taXRfbmFtZSAqZSwKKwkJCSAgICAgICBpbnQgcHJpbywKKwkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgICAgIHN0cnVjdCB0YWcgKip0YWcpCit7CisJaWYgKCFlIHx8IGUtPnByaW8gPCBwcmlvKQorCQlyZXR1cm4gMTsKKworCWlmIChlLT5wcmlvID09IDIgJiYgcHJpbyA9PSAyKSB7CisJCS8qIE11bHRpcGxlIGFubm90YXRlZCB0YWdzIHBvaW50IHRvIHRoZSBzYW1lIGNvbW1pdC4KKwkJICogU2VsZWN0IG9uZSB0byBrZWVwIGJhc2VkIHVwb24gdGhlaXIgdGFnZ2VyIGRhdGUuCisJCSAqLworCQlzdHJ1Y3QgdGFnICp0OworCisJCWlmICghZS0+dGFnKSB7CisJCQl0ID0gbG9va3VwX3RhZyhlLT5zaGExKTsKKwkJCWlmICghdCB8fCBwYXJzZV90YWcodCkpCisJCQkJcmV0dXJuIDE7CisJCQllLT50YWcgPSB0OworCQl9CisKKwkJdCA9IGxvb2t1cF90YWcoc2hhMSk7CisJCWlmICghdCB8fCBwYXJzZV90YWcodCkpCisJCQlyZXR1cm4gMDsKKwkJKnRhZyA9IHQ7CisKKwkJaWYgKGUtPnRhZy0+ZGF0ZSA8IHQtPmRhdGUpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX3RvX2tub3duX25hbWVzKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcGVlbGVkLAorCQkJICAgICAgIGludCBwcmlvLAorCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGNvbW1pdF9uYW1lICplID0gZmluZF9jb21taXRfbmFtZShwZWVsZWQpOworCXN0cnVjdCB0YWcgKnRhZyA9IE5VTEw7CisJaWYgKHJlcGxhY2VfbmFtZShlLCBwcmlvLCBzaGExLCAmdGFnKSkgeworCQlpZiAoIWUpIHsKKwkJCWUgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tbWl0X25hbWUpKTsKKwkJCWhhc2hjcHkoZS0+cGVlbGVkLCBwZWVsZWQpOworCQkJaGFzaG1hcF9lbnRyeV9pbml0KGUsIHNoYTFoYXNoKHBlZWxlZCkpOworCQkJaGFzaG1hcF9hZGQoJm5hbWVzLCBlKTsKKwkJCWUtPnBhdGggPSBOVUxMOworCQl9CisJCWUtPnRhZyA9IHRhZzsKKwkJZS0+cHJpbyA9IHByaW87CisJCWUtPm5hbWVfY2hlY2tlZCA9IDA7CisJCWhhc2hjcHkoZS0+c2hhMSwgc2hhMSk7CisJCWZyZWUoZS0+cGF0aCk7CisJCWUtPnBhdGggPSB4c3RyZHVwKHBhdGgpOworCX0KK30KKworc3RhdGljIGludCBnZXRfbmFtZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCWludCBpc190YWcgPSBzdGFydHNfd2l0aChwYXRoLCAicmVmcy90YWdzLyIpOworCXN0cnVjdCBvYmplY3RfaWQgcGVlbGVkOworCWludCBpc19hbm5vdGF0ZWQsIHByaW87CisKKwkvKiBSZWplY3QgYW55dGhpbmcgb3V0c2lkZSByZWZzL3RhZ3MvIHVubGVzcyAtLWFsbCAqLworCWlmICghYWxsICYmICFpc190YWcpCisJCXJldHVybiAwOworCisJLyogQWNjZXB0IG9ubHkgdGFncyB0aGF0IG1hdGNoIHRoZSBwYXR0ZXJuLCBpZiBnaXZlbiAqLworCWlmIChwYXR0ZXJuICYmICghaXNfdGFnIHx8IHdpbGRtYXRjaChwYXR0ZXJuLCBwYXRoICsgMTAsIDAsIE5VTEwpKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBJcyBpdCBhbm5vdGF0ZWQ/ICovCisJaWYgKCFwZWVsX3JlZihwYXRoLCBwZWVsZWQuaGFzaCkpIHsKKwkJaXNfYW5ub3RhdGVkID0gISFvaWRjbXAob2lkLCAmcGVlbGVkKTsKKwl9IGVsc2UgeworCQlvaWRjcHkoJnBlZWxlZCwgb2lkKTsKKwkJaXNfYW5ub3RhdGVkID0gMDsKKwl9CisKKwkvKgorCSAqIEJ5IGRlZmF1bHQsIHdlIG9ubHkgdXNlIGFubm90YXRlZCB0YWdzLCBidXQgd2l0aCAtLXRhZ3MKKwkgKiB3ZSBmYWxsIGJhY2sgdG8gbGlnaHR3ZWlnaHQgb25lcyAoZXZlbiB3aXRob3V0IC0tdGFncywKKwkgKiB3ZSBzdGlsbCByZW1lbWJlciBsaWdodHdlaWdodCBvbmVzLCBvbmx5IHRvIGdpdmUgaGludHMKKwkgKiBpbiBhbiBlcnJvciBtZXNzYWdlKS4gIC0tYWxsIGFsbG93cyBhbnkgcmVmcyB0byBiZSB1c2VkLgorCSAqLworCWlmIChpc19hbm5vdGF0ZWQpCisJCXByaW8gPSAyOworCWVsc2UgaWYgKGlzX3RhZykKKwkJcHJpbyA9IDE7CisJZWxzZQorCQlwcmlvID0gMDsKKworCWFkZF90b19rbm93bl9uYW1lcyhhbGwgPyBwYXRoICsgNSA6IHBhdGggKyAxMCwgcGVlbGVkLmhhc2gsIHByaW8sIG9pZC0+aGFzaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwb3NzaWJsZV90YWcgeworCXN0cnVjdCBjb21taXRfbmFtZSAqbmFtZTsKKwlpbnQgZGVwdGg7CisJaW50IGZvdW5kX29yZGVyOworCXVuc2lnbmVkIGZsYWdfd2l0aGluOworfTsKKworc3RhdGljIGludCBjb21wYXJlX3B0KGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwlzdHJ1Y3QgcG9zc2libGVfdGFnICphID0gKHN0cnVjdCBwb3NzaWJsZV90YWcgKilhXzsKKwlzdHJ1Y3QgcG9zc2libGVfdGFnICpiID0gKHN0cnVjdCBwb3NzaWJsZV90YWcgKiliXzsKKwlpZiAoYS0+ZGVwdGggIT0gYi0+ZGVwdGgpCisJCXJldHVybiBhLT5kZXB0aCAtIGItPmRlcHRoOworCWlmIChhLT5mb3VuZF9vcmRlciAhPSBiLT5mb3VuZF9vcmRlcikKKwkJcmV0dXJuIGEtPmZvdW5kX29yZGVyIC0gYi0+Zm91bmRfb3JkZXI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmlzaF9kZXB0aF9jb21wdXRhdGlvbigKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0LAorCXN0cnVjdCBwb3NzaWJsZV90YWcgKmJlc3QpCit7CisJdW5zaWduZWQgbG9uZyBzZWVuX2NvbW1pdHMgPSAwOworCXdoaWxlICgqbGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gcG9wX2NvbW1pdChsaXN0KTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gYy0+cGFyZW50czsKKwkJc2Vlbl9jb21taXRzKys7CisJCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBiZXN0LT5mbGFnX3dpdGhpbikgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICphID0gKmxpc3Q7CisJCQl3aGlsZSAoYSkgeworCQkJCXN0cnVjdCBjb21taXQgKmkgPSBhLT5pdGVtOworCQkJCWlmICghKGktPm9iamVjdC5mbGFncyAmIGJlc3QtPmZsYWdfd2l0aGluKSkKKwkJCQkJYnJlYWs7CisJCQkJYSA9IGEtPm5leHQ7CisJCQl9CisJCQlpZiAoIWEpCisJCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJYmVzdC0+ZGVwdGgrKzsKKwkJd2hpbGUgKHBhcmVudHMpIHsKKwkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnRzLT5pdGVtOworCQkJcGFyc2VfY29tbWl0KHApOworCQkJaWYgKCEocC0+b2JqZWN0LmZsYWdzICYgU0VFTikpCisJCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUocCwgbGlzdCk7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gYy0+b2JqZWN0LmZsYWdzOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCX0KKwl9CisJcmV0dXJuIHNlZW5fY29tbWl0czsKK30KKworc3RhdGljIHZvaWQgZGlzcGxheV9uYW1lKHN0cnVjdCBjb21taXRfbmFtZSAqbikKK3sKKwlpZiAobi0+cHJpbyA9PSAyICYmICFuLT50YWcpIHsKKwkJbi0+dGFnID0gbG9va3VwX3RhZyhuLT5zaGExKTsKKwkJaWYgKCFuLT50YWcgfHwgcGFyc2VfdGFnKG4tPnRhZykpCisJCQlkaWUoXygiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIiksIG4tPnBhdGgpOworCX0KKwlpZiAobi0+dGFnICYmICFuLT5uYW1lX2NoZWNrZWQpIHsKKwkJaWYgKCFuLT50YWctPnRhZykKKwkJCWRpZShfKCJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIiksIG4tPnBhdGgpOworCQlpZiAoc3RyY21wKG4tPnRhZy0+dGFnLCBhbGwgPyBuLT5wYXRoICsgNSA6IG4tPnBhdGgpKQorCQkJd2FybmluZyhfKCJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIiksIG4tPnRhZy0+dGFnLCBuLT5wYXRoKTsKKwkJbi0+bmFtZV9jaGVja2VkID0gMTsKKwl9CisKKwlpZiAobi0+dGFnKQorCQlwcmludGYoIiVzIiwgbi0+dGFnLT50YWcpOworCWVsc2UKKwkJcHJpbnRmKCIlcyIsIG4tPnBhdGgpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3N1ZmZpeChpbnQgZGVwdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJcHJpbnRmKCItJWQtZyVzIiwgZGVwdGgsIGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBhYmJyZXYpKTsKK30KKworc3RhdGljIHZvaWQgZGVzY3JpYmUoY29uc3QgY2hhciAqYXJnLCBpbnQgbGFzdF9vbmUpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgY29tbWl0ICpjbWl0LCAqZ2F2ZV91cF9vbiA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OworCXN0cnVjdCBjb21taXRfbmFtZSAqbjsKKwlzdHJ1Y3QgcG9zc2libGVfdGFnIGFsbF9tYXRjaGVzW01BWF9UQUdTXTsKKwl1bnNpZ25lZCBpbnQgbWF0Y2hfY250ID0gMCwgYW5ub3RhdGVkX2NudCA9IDAsIGN1cl9tYXRjaDsKKwl1bnNpZ25lZCBsb25nIHNlZW5fY29tbWl0cyA9IDA7CisJdW5zaWduZWQgaW50IHVuYW5ub3RhdGVkX2NudCA9IDA7CisKKwlpZiAoZ2V0X3NoYTEoYXJnLCBzaGExKSkKKwkJZGllKF8oIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiksIGFyZyk7CisJY21pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCWlmICghY21pdCkKKwkJZGllKF8oIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IiksIGFyZywgY29tbWl0X3R5cGUpOworCisJbiA9IGZpbmRfY29tbWl0X25hbWUoY21pdC0+b2JqZWN0LnNoYTEpOworCWlmIChuICYmICh0YWdzIHx8IGFsbCB8fCBuLT5wcmlvID09IDIpKSB7CisJCS8qCisJCSAqIEV4YWN0IG1hdGNoIHRvIGFuIGV4aXN0aW5nIHJlZi4KKwkJICovCisJCWRpc3BsYXlfbmFtZShuKTsKKwkJaWYgKGxvbmdmb3JtYXQpCisJCQlzaG93X3N1ZmZpeCgwLCBuLT50YWcgPyBuLT50YWctPnRhZ2dlZC0+c2hhMSA6IHNoYTEpOworCQlpZiAoZGlydHkpCisJCQlwcmludGYoIiVzIiwgZGlydHkpOworCQlwcmludGYoIlxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIW1heF9jYW5kaWRhdGVzKQorCQlkaWUoXygibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIiksIHNoYTFfdG9faGV4KGNtaXQtPm9iamVjdC5zaGExKSk7CisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgXygic2VhcmNoaW5nIHRvIGRlc2NyaWJlICVzXG4iKSwgYXJnKTsKKworCWlmICghaGF2ZV91dGlsKSB7CisJCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwkJc3RydWN0IGNvbW1pdCAqYzsKKwkJc3RydWN0IGNvbW1pdF9uYW1lICpuID0gaGFzaG1hcF9pdGVyX2ZpcnN0KCZuYW1lcywgJml0ZXIpOworCQlmb3IgKDsgbjsgbiA9IGhhc2htYXBfaXRlcl9uZXh0KCZpdGVyKSkgeworCQkJYyA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShuLT5wZWVsZWQsIDEpOworCQkJaWYgKGMpCisJCQkJYy0+dXRpbCA9IG47CisJCX0KKwkJaGF2ZV91dGlsID0gMTsKKwl9CisKKwlsaXN0ID0gTlVMTDsKKwljbWl0LT5vYmplY3QuZmxhZ3MgPSBTRUVOOworCWNvbW1pdF9saXN0X2luc2VydChjbWl0LCAmbGlzdCk7CisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdCAqYyA9IHBvcF9jb21taXQoJmxpc3QpOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBjLT5wYXJlbnRzOworCQlzZWVuX2NvbW1pdHMrKzsKKwkJbiA9IGMtPnV0aWw7CisJCWlmIChuKSB7CisJCQlpZiAoIXRhZ3MgJiYgIWFsbCAmJiBuLT5wcmlvIDwgMikgeworCQkJCXVuYW5ub3RhdGVkX2NudCsrOworCQkJfSBlbHNlIGlmIChtYXRjaF9jbnQgPCBtYXhfY2FuZGlkYXRlcykgeworCQkJCXN0cnVjdCBwb3NzaWJsZV90YWcgKnQgPSAmYWxsX21hdGNoZXNbbWF0Y2hfY250KytdOworCQkJCXQtPm5hbWUgPSBuOworCQkJCXQtPmRlcHRoID0gc2Vlbl9jb21taXRzIC0gMTsKKwkJCQl0LT5mbGFnX3dpdGhpbiA9IDF1IDw8IG1hdGNoX2NudDsKKwkJCQl0LT5mb3VuZF9vcmRlciA9IG1hdGNoX2NudDsKKwkJCQljLT5vYmplY3QuZmxhZ3MgfD0gdC0+ZmxhZ193aXRoaW47CisJCQkJaWYgKG4tPnByaW8gPT0gMikKKwkJCQkJYW5ub3RhdGVkX2NudCsrOworCQkJfQorCQkJZWxzZSB7CisJCQkJZ2F2ZV91cF9vbiA9IGM7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZm9yIChjdXJfbWF0Y2ggPSAwOyBjdXJfbWF0Y2ggPCBtYXRjaF9jbnQ7IGN1cl9tYXRjaCsrKSB7CisJCQlzdHJ1Y3QgcG9zc2libGVfdGFnICp0ID0gJmFsbF9tYXRjaGVzW2N1cl9tYXRjaF07CisJCQlpZiAoIShjLT5vYmplY3QuZmxhZ3MgJiB0LT5mbGFnX3dpdGhpbikpCisJCQkJdC0+ZGVwdGgrKzsKKwkJfQorCQlpZiAoYW5ub3RhdGVkX2NudCAmJiAhbGlzdCkgeworCQkJaWYgKGRlYnVnKQorCQkJCWZwcmludGYoc3RkZXJyLCBfKCJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIpLAorCQkJCQlzaGExX3RvX2hleChjLT5vYmplY3Quc2hhMSkpOworCQkJYnJlYWs7CisJCX0KKwkJd2hpbGUgKHBhcmVudHMpIHsKKwkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnRzLT5pdGVtOworCQkJcGFyc2VfY29tbWl0KHApOworCQkJaWYgKCEocC0+b2JqZWN0LmZsYWdzICYgU0VFTikpCisJCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUocCwgJmxpc3QpOworCQkJcC0+b2JqZWN0LmZsYWdzIHw9IGMtPm9iamVjdC5mbGFnczsKKwkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCisJCQlpZiAoZmlyc3RfcGFyZW50KQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFtYXRjaF9jbnQpIHsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9IGNtaXQtPm9iamVjdC5zaGExOworCQlpZiAoYWx3YXlzKSB7CisJCQlwcmludGYoIiVzIiwgZmluZF91bmlxdWVfYWJicmV2KHNoYTEsIGFiYnJldikpOworCQkJaWYgKGRpcnR5KQorCQkJCXByaW50ZigiJXMiLCBkaXJ0eSk7CisJCQlwcmludGYoIlxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHVuYW5ub3RhdGVkX2NudCkKKwkJCWRpZShfKCJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKwkJCSAgICAiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIpLAorCQkJICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJZWxzZQorCQkJZGllKF8oIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisJCQkgICAgIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iKSwKKwkJCSAgICBzaGExX3RvX2hleChzaGExKSk7CisJfQorCisJcXNvcnQoYWxsX21hdGNoZXMsIG1hdGNoX2NudCwgc2l6ZW9mKGFsbF9tYXRjaGVzWzBdKSwgY29tcGFyZV9wdCk7CisKKwlpZiAoZ2F2ZV91cF9vbikgeworCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShnYXZlX3VwX29uLCAmbGlzdCk7CisJCXNlZW5fY29tbWl0cy0tOworCX0KKwlzZWVuX2NvbW1pdHMgKz0gZmluaXNoX2RlcHRoX2NvbXB1dGF0aW9uKCZsaXN0LCAmYWxsX21hdGNoZXNbMF0pOworCWZyZWVfY29tbWl0X2xpc3QobGlzdCk7CisKKwlpZiAoZGVidWcpIHsKKwkJZm9yIChjdXJfbWF0Y2ggPSAwOyBjdXJfbWF0Y2ggPCBtYXRjaF9jbnQ7IGN1cl9tYXRjaCsrKSB7CisJCQlzdHJ1Y3QgcG9zc2libGVfdGFnICp0ID0gJmFsbF9tYXRjaGVzW2N1cl9tYXRjaF07CisJCQlmcHJpbnRmKHN0ZGVyciwgIiAlLTExcyAlOGQgJXNcbiIsCisJCQkJcHJpb19uYW1lc1t0LT5uYW1lLT5wcmlvXSwKKwkJCQl0LT5kZXB0aCwgdC0+bmFtZS0+cGF0aCk7CisJCX0KKwkJZnByaW50ZihzdGRlcnIsIF8oInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIiksIHNlZW5fY29tbWl0cyk7CisJCWlmIChnYXZlX3VwX29uKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQlfKCJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisJCQkJImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iKSwKKwkJCQltYXhfY2FuZGlkYXRlcywgbWF4X2NhbmRpZGF0ZXMsCisJCQkJc2hhMV90b19oZXgoZ2F2ZV91cF9vbi0+b2JqZWN0LnNoYTEpKTsKKwkJfQorCX0KKworCWRpc3BsYXlfbmFtZShhbGxfbWF0Y2hlc1swXS5uYW1lKTsKKwlpZiAoYWJicmV2KQorCQlzaG93X3N1ZmZpeChhbGxfbWF0Y2hlc1swXS5kZXB0aCwgY21pdC0+b2JqZWN0LnNoYTEpOworCWlmIChkaXJ0eSkKKwkJcHJpbnRmKCIlcyIsIGRpcnR5KTsKKwlwcmludGYoIlxuIik7CisKKwlpZiAoIWxhc3Rfb25lKQorCQljbGVhcl9jb21taXRfbWFya3MoY21pdCwgLTEpOworfQorCitpbnQgY21kX2Rlc2NyaWJlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBjb250YWlucyA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKDAsICJjb250YWlucyIsICAgJmNvbnRhaW5zLCBOXygiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIpKSwKKwkJT1BUX0JPT0woMCwgImRlYnVnIiwgICAgICAmZGVidWcsIE5fKCJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIikpLAorCQlPUFRfQk9PTCgwLCAiYWxsIiwgICAgICAgICZhbGwsIE5fKCJ1c2UgYW55IHJlZiIpKSwKKwkJT1BUX0JPT0woMCwgInRhZ3MiLCAgICAgICAmdGFncywgTl8oInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIikpLAorCQlPUFRfQk9PTCgwLCAibG9uZyIsICAgICAgICZsb25nZm9ybWF0LCBOXygiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIpKSwKKwkJT1BUX0JPT0woMCwgImZpcnN0LXBhcmVudCIsICZmaXJzdF9wYXJlbnQsIE5fKCJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiKSksCisJCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAorCQlPUFRfU0VUX0lOVCgwLCAiZXhhY3QtbWF0Y2giLCAmbWF4X2NhbmRpZGF0ZXMsCisJCQkgICAgTl8oIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiKSwgMCksCisJCU9QVF9JTlRFR0VSKDAsICJjYW5kaWRhdGVzIiwgJm1heF9jYW5kaWRhdGVzLAorCQkJICAgIE5fKCJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIikpLAorCQlPUFRfU1RSSU5HKDAsICJtYXRjaCIsICAgICAgICZwYXR0ZXJuLCBOXygicGF0dGVybiIpLAorCQkJICAgTl8oIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iKSksCisJCU9QVF9CT09MKDAsICJhbHdheXMiLCAgICAgICAgJmFsd2F5cywKKwkJCU5fKCJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siKSksCisJCXtPUFRJT05fU1RSSU5HLCAwLCAiZGlydHkiLCAgJmRpcnR5LCBOXygibWFyayIpLAorCQkJTl8oImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIpLAorCQkJUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiLWRpcnR5In0sCisJCU9QVF9FTkQoKSwKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZGVzY3JpYmVfdXNhZ2UsIDApOworCWlmIChhYmJyZXYgPCAwKQorCQlhYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKKworCWlmIChtYXhfY2FuZGlkYXRlcyA8IDApCisJCW1heF9jYW5kaWRhdGVzID0gMDsKKwllbHNlIGlmIChtYXhfY2FuZGlkYXRlcyA+IE1BWF9UQUdTKQorCQltYXhfY2FuZGlkYXRlcyA9IE1BWF9UQUdTOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKworCWlmIChsb25nZm9ybWF0ICYmIGFiYnJldiA9PSAwKQorCQlkaWUoXygiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiKSk7CisKKwlpZiAoY29udGFpbnMpIHsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgYXJnczsKKworCQlhcmd2X2FycmF5X2luaXQoJmFyZ3MpOworCQlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAibmFtZS1yZXYiLAorCQkJCSAiLS1wZWVsLXRhZyIsICItLW5hbWUtb25seSIsICItLW5vLXVuZGVmaW5lZCIsCisJCQkJIE5VTEwpOworCQlpZiAoYWx3YXlzKQorCQkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1hbHdheXMiKTsKKwkJaWYgKCFhbGwpIHsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tdGFncyIpOworCQkJaWYgKHBhdHRlcm4pCisJCQkJYXJndl9hcnJheV9wdXNoZigmYXJncywgIi0tcmVmcz1yZWZzL3RhZ3MvJXMiLCBwYXR0ZXJuKTsKKwkJfQorCQlpZiAoYXJnYykKKwkJCWFyZ3ZfYXJyYXlfcHVzaHYoJmFyZ3MsIGFyZ3YpOworCQllbHNlCisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICJIRUFEIik7CisJCXJldHVybiBjbWRfbmFtZV9yZXYoYXJncy5hcmdjLCBhcmdzLmFyZ3YsIHByZWZpeCk7CisJfQorCisJaGFzaG1hcF9pbml0KCZuYW1lcywgKGhhc2htYXBfY21wX2ZuKSBjb21taXRfbmFtZV9jbXAsIDApOworCWZvcl9lYWNoX3Jhd3JlZihnZXRfbmFtZSwgTlVMTCk7CisJaWYgKCFuYW1lcy5zaXplICYmICFhbHdheXMpCisJCWRpZShfKCJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIpKTsKKworCWlmIChhcmdjID09IDApIHsKKwkJaWYgKGRpcnR5KSB7CisJCQlzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrOworCQkJaW50IGZkOworCisJCQlyZWFkX2NhY2hlX3ByZWxvYWQoTlVMTCk7CisJCQlyZWZyZXNoX2luZGV4KCZ0aGVfaW5kZXgsIFJFRlJFU0hfUVVJRVR8UkVGUkVTSF9VTk1FUkdFRCwKKwkJCQkgICAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCWZkID0gaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIDApOworCQkJaWYgKDAgPD0gZmQpCisJCQkJdXBkYXRlX2luZGV4X2lmX2FibGUoJnRoZV9pbmRleCwgJmluZGV4X2xvY2spOworCisJCQlpZiAoIWNtZF9kaWZmX2luZGV4KEFSUkFZX1NJWkUoZGlmZl9pbmRleF9hcmdzKSAtIDEsCisJCQkJCSAgICBkaWZmX2luZGV4X2FyZ3MsIHByZWZpeCkpCisJCQkJZGlydHkgPSBOVUxMOworCQl9CisJCWRlc2NyaWJlKCJIRUFEIiwgMSk7CisJfSBlbHNlIGlmIChkaXJ0eSkgeworCQlkaWUoXygiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiKSk7CisJfSBlbHNlIHsKKwkJd2hpbGUgKGFyZ2MtLSA+IDApCisJCQlkZXNjcmliZSgqYXJndisrLCBhcmdjID09IDApOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZGlmZi1maWxlcy5jIGIvYnVpbHRpbi9kaWZmLWZpbGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkMmViOAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZGlmZi1maWxlcy5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgZGlmZl9maWxlc191c2FnZVtdID0KKyJnaXQgZGlmZi1maWxlcyBbLXFdIFstMCB8IC0xIHwgLTIgfCAtMyB8IC1jIHwgLS1jY10gWzxjb21tb24tZGlmZi1vcHRpb25zPl0gWzxwYXRoPi4uLl0iCitDT01NT05fRElGRl9PUFRJT05TX0hFTFA7CisKK2ludCBjbWRfZGlmZl9maWxlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCWludCByZXN1bHQ7CisJdW5zaWduZWQgb3B0aW9ucyA9IDA7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOworCWdpdG1vZHVsZXNfY29uZmlnKCk7CisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCXJldi5hYmJyZXYgPSAwOworCisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKKwl3aGlsZSAoMSA8IGFyZ2MgJiYgYXJndlsxXVswXSA9PSAnLScpIHsKKwkJaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tYmFzZSIpKQorCQkJcmV2Lm1heF9jb3VudCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tb3VycyIpKQorCQkJcmV2Lm1heF9jb3VudCA9IDI7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tdGhlaXJzIikpCisJCQlyZXYubWF4X2NvdW50ID0gMzsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLXEiKSkKKwkJCW9wdGlvbnMgfD0gRElGRl9TSUxFTlRfT05fUkVNT1ZFRDsKKwkJZWxzZQorCQkJdXNhZ2UoZGlmZl9maWxlc191c2FnZSk7CisJCWFyZ3YrKzsgYXJnYy0tOworCX0KKwlpZiAoIXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQpCisJCXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9SQVc7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGVyZSBhcmUgTk8gcmV2aXNpb24gKGkuZS4gcGVuZGluZyBvYmplY3QpIHBhcmFtZXRlciwKKwkgKiByZXYubWF4X2NvdW50IGlzIHJlYXNvbmFibGUgKDAgPD0gbiA8PSAzKSwgYW5kCisJICogdGhlcmUgaXMgbm8gb3RoZXIgcmV2aXNpb24gZmlsdGVyaW5nIHBhcmFtZXRlcnMuCisJICovCisJaWYgKHJldi5wZW5kaW5nLm5yIHx8CisJICAgIHJldi5taW5fYWdlICE9IC0xIHx8IHJldi5tYXhfYWdlICE9IC0xIHx8CisJICAgIDMgPCByZXYubWF4X2NvdW50KQorCQl1c2FnZShkaWZmX2ZpbGVzX3VzYWdlKTsKKworCS8qCisJICogImRpZmYtZmlsZXMgLS1iYXNlIC1wIiBzaG91bGQgbm90IGNvbWJpbmUgbWVyZ2VzIGJlY2F1c2UgaXQKKwkgKiB3YXMgbm90IGFza2VkIHRvLiAgImRpZmYtZmlsZXMgLWMgLXAiIHNob3VsZCBub3QgZGVuc2lmeQorCSAqICh0aGUgdXNlciBzaG91bGQgYXNrIHdpdGggImRpZmYtZmlsZXMgLS1jYyIgZXhwbGljaXRseSkuCisJICovCisJaWYgKHJldi5tYXhfY291bnQgPT0gLTEgJiYgIXJldi5jb21iaW5lX21lcmdlcyAmJgorCSAgICAocmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1BBVENIKSkKKwkJcmV2LmNvbWJpbmVfbWVyZ2VzID0gcmV2LmRlbnNlX2NvbWJpbmVkX21lcmdlcyA9IDE7CisKKwlpZiAocmVhZF9jYWNoZV9wcmVsb2FkKCZyZXYuZGlmZm9wdC5wYXRoc3BlYykgPCAwKSB7CisJCXBlcnJvcigicmVhZF9jYWNoZV9wcmVsb2FkIik7CisJCXJldHVybiAtMTsKKwl9CisJcmVzdWx0ID0gcnVuX2RpZmZfZmlsZXMoJnJldiwgb3B0aW9ucyk7CisJcmV0dXJuIGRpZmZfcmVzdWx0X2NvZGUoJnJldi5kaWZmb3B0LCByZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9kaWZmLWluZGV4LmMgYi9idWlsdGluL2RpZmYtaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTc5ODI0Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9kaWZmLWluZGV4LmMKQEAgLTAsMCArMSw1NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBkaWZmX2NhY2hlX3VzYWdlW10gPQorImdpdCBkaWZmLWluZGV4IFstbV0gWy0tY2FjaGVkXSAiCisiWzxjb21tb24tZGlmZi1vcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK0NPTU1PTl9ESUZGX09QVElPTlNfSEVMUDsKKworaW50IGNtZF9kaWZmX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJaW50IGNhY2hlZCA9IDA7CisJaW50IGk7CisJaW50IHJlc3VsdDsKKworCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CisJZ2l0bW9kdWxlc19jb25maWcoKTsKKwlnaXRfY29uZmlnKGdpdF9kaWZmX2Jhc2ljX2NvbmZpZywgTlVMTCk7IC8qIG5vICJkaWZmIiBVSSBvcHRpb25zICovCisJcmV2LmFiYnJldiA9IDA7CisKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsIE5VTEwpOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKworCQlpZiAoIXN0cmNtcChhcmcsICItLWNhY2hlZCIpKQorCQkJY2FjaGVkID0gMTsKKwkJZWxzZQorCQkJdXNhZ2UoZGlmZl9jYWNoZV91c2FnZSk7CisJfQorCWlmICghcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1JBVzsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZXJlIGlzIG9uZSByZXZpc2lvbiAoaS5lLiBwZW5kaW5nIG9iamVjdCksCisJICogYW5kIHRoZXJlIGlzIG5vIHJldmlzaW9uIGZpbHRlcmluZyBwYXJhbWV0ZXJzLgorCSAqLworCWlmIChyZXYucGVuZGluZy5uciAhPSAxIHx8CisJICAgIHJldi5tYXhfY291bnQgIT0gLTEgfHwgcmV2Lm1pbl9hZ2UgIT0gLTEgfHwgcmV2Lm1heF9hZ2UgIT0gLTEpCisJCXVzYWdlKGRpZmZfY2FjaGVfdXNhZ2UpOworCWlmICghY2FjaGVkKSB7CisJCXNldHVwX3dvcmtfdHJlZSgpOworCQlpZiAocmVhZF9jYWNoZV9wcmVsb2FkKCZyZXYuZGlmZm9wdC5wYXRoc3BlYykgPCAwKSB7CisJCQlwZXJyb3IoInJlYWRfY2FjaGVfcHJlbG9hZCIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIGlmIChyZWFkX2NhY2hlKCkgPCAwKSB7CisJCXBlcnJvcigicmVhZF9jYWNoZSIpOworCQlyZXR1cm4gLTE7CisJfQorCXJlc3VsdCA9IHJ1bl9kaWZmX2luZGV4KCZyZXYsIGNhY2hlZCk7CisJcmV0dXJuIGRpZmZfcmVzdWx0X2NvZGUoJnJldi5kaWZmb3B0LCByZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9kaWZmLXRyZWUuYyBiL2J1aWx0aW4vZGlmZi10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiNjgzZAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZGlmZi10cmVlLmMKQEAgLTAsMCArMSwxODYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIHN0cnVjdCByZXZfaW5mbyBsb2dfdHJlZV9vcHQ7CisKK3N0YXRpYyBpbnQgZGlmZl90cmVlX2NvbW1pdF9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gbG9nX3RyZWVfY29tbWl0KCZsb2dfdHJlZV9vcHQsIGNvbW1pdCk7Cit9CisKKy8qIERpZmYgb25lIG9yIG1vcmUgY29tbWl0cy4gKi8KK3N0YXRpYyBpbnQgc3RkaW5fZGlmZl9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaWYgKGlzc3BhY2UobGluZVs0MF0pICYmICFnZXRfc2hhMV9oZXgobGluZSs0MSwgc2hhMSkpIHsKKwkJLyogR3JhZnQgdGhlIGZha2UgcGFyZW50cyBsb2NhbGx5IHRvIHRoZSBjb21taXQgKi8KKwkJaW50IHBvcyA9IDQxOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcHRyOworCisJCS8qIEZyZWUgdGhlIHJlYWwgcGFyZW50IGxpc3QgKi8KKwkJZnJlZV9jb21taXRfbGlzdChjb21taXQtPnBhcmVudHMpOworCQljb21taXQtPnBhcmVudHMgPSBOVUxMOworCQlwcHRyID0gJihjb21taXQtPnBhcmVudHMpOworCQl3aGlsZSAobGluZVtwb3NdICYmICFnZXRfc2hhMV9oZXgobGluZSArIHBvcywgc2hhMSkpIHsKKwkJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IGxvb2t1cF9jb21taXQoc2hhMSk7CisJCQlpZiAocGFyZW50KSB7CisJCQkJcHB0ciA9ICZjb21taXRfbGlzdF9pbnNlcnQocGFyZW50LCBwcHRyKS0+bmV4dDsKKwkJCX0KKwkJCXBvcyArPSA0MTsKKwkJfQorCX0KKwlyZXR1cm4gbG9nX3RyZWVfY29tbWl0KCZsb2dfdHJlZV9vcHQsIGNvbW1pdCk7Cit9CisKKy8qIERpZmYgdHdvIHRyZWVzLiAqLworc3RhdGljIGludCBzdGRpbl9kaWZmX3RyZWVzKHN0cnVjdCB0cmVlICp0cmVlMSwgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCB0cmVlICp0cmVlMjsKKwlpZiAobGVuICE9IDgyIHx8ICFpc3NwYWNlKGxpbmVbNDBdKSB8fCBnZXRfc2hhMV9oZXgobGluZSArIDQxLCBzaGExKSkKKwkJcmV0dXJuIGVycm9yKCJOZWVkIGV4YWN0bHkgdHdvIHRyZWVzLCBzZXBhcmF0ZWQgYnkgYSBzcGFjZSIpOworCXRyZWUyID0gbG9va3VwX3RyZWUoc2hhMSk7CisJaWYgKCF0cmVlMiB8fCBwYXJzZV90cmVlKHRyZWUyKSkKKwkJcmV0dXJuIC0xOworCXByaW50ZigiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHRyZWUxLT5vYmplY3Quc2hhMSksCisJCQkgIHNoYTFfdG9faGV4KHRyZWUyLT5vYmplY3Quc2hhMSkpOworCWRpZmZfdHJlZV9zaGExKHRyZWUxLT5vYmplY3Quc2hhMSwgdHJlZTItPm9iamVjdC5zaGExLAorCQkgICAgICAgIiIsICZsb2dfdHJlZV9vcHQuZGlmZm9wdCk7CisJbG9nX3RyZWVfZGlmZl9mbHVzaCgmbG9nX3RyZWVfb3B0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX3RyZWVfc3RkaW4oY2hhciAqbGluZSkKK3sKKwlpbnQgbGVuID0gc3RybGVuKGxpbmUpOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJaWYgKCFsZW4gfHwgbGluZVtsZW4tMV0gIT0gJ1xuJykKKwkJcmV0dXJuIC0xOworCWxpbmVbbGVuLTFdID0gMDsKKwlpZiAoZ2V0X3NoYTFfaGV4KGxpbmUsIHNoYTEpKQorCQlyZXR1cm4gLTE7CisJb2JqID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlyZXR1cm4gLTE7CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gc3RkaW5fZGlmZl9jb21taXQoKHN0cnVjdCBjb21taXQgKilvYmosIGxpbmUsIGxlbik7CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkKKwkJcmV0dXJuIHN0ZGluX2RpZmZfdHJlZXMoKHN0cnVjdCB0cmVlICopb2JqLCBsaW5lLCBsZW4pOworCWVycm9yKCJPYmplY3QgJXMgaXMgYSAlcywgbm90IGEgY29tbWl0IG9yIHRyZWUiLAorCSAgICAgIHNoYTFfdG9faGV4KHNoYTEpLCB0eXBlbmFtZShvYmotPnR5cGUpKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGRpZmZfdHJlZV91c2FnZVtdID0KKyJnaXQgZGlmZi10cmVlIFstLXN0ZGluXSBbLW1dIFstY10gWy0tY2NdIFstc10gWy12XSBbLS1wcmV0dHldIFstdF0gWy1yXSBbLS1yb290XSAiCisiWzxjb21tb24tZGlmZi1vcHRpb25zPl0gPHRyZWUtaXNoPiBbPHRyZWUtaXNoPl0gWzxwYXRoPi4uLl1cbiIKKyIgIC1yICAgICAgICAgICAgZGlmZiByZWN1cnNpdmVseVxuIgorIiAgLS1yb290ICAgICAgICBpbmNsdWRlIHRoZSBpbml0aWFsIGNvbW1pdCBhcyBkaWZmIGFnYWluc3QgL2Rldi9udWxsXG4iCitDT01NT05fRElGRl9PUFRJT05TX0hFTFA7CisKK3N0YXRpYyB2b2lkIGRpZmZfdHJlZV90d2Vha19yZXYoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgKm9wdCkKK3sKKwlpZiAoIXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0KSB7CisJCWlmIChyZXYtPmRlbnNlX2NvbWJpbmVkX21lcmdlcykKKwkJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJCWVsc2UKKwkJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUkFXOworCX0KK30KKworaW50IGNtZF9kaWZmX3RyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG5yX3NoYTE7CisJY2hhciBsaW5lWzEwMDBdOworCXN0cnVjdCBvYmplY3QgKnRyZWUxLCAqdHJlZTI7CisJc3RhdGljIHN0cnVjdCByZXZfaW5mbyAqb3B0ID0gJmxvZ190cmVlX29wdDsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IHNfcl9vcHQ7CisJaW50IHJlYWRfc3RkaW4gPSAwOworCisJaW5pdF9yZXZpc2lvbnMob3B0LCBwcmVmaXgpOworCWdpdG1vZHVsZXNfY29uZmlnKCk7CisJZ2l0X2NvbmZpZyhnaXRfZGlmZl9iYXNpY19jb25maWcsIE5VTEwpOyAvKiBubyAiZGlmZiIgVUkgb3B0aW9ucyAqLworCW9wdC0+YWJicmV2ID0gMDsKKwlvcHQtPmRpZmYgPSAxOworCW9wdC0+ZGlzYWJsZV9zdGRpbiA9IDE7CisJbWVtc2V0KCZzX3Jfb3B0LCAwLCBzaXplb2Yoc19yX29wdCkpOworCXNfcl9vcHQudHdlYWsgPSBkaWZmX3RyZWVfdHdlYWtfcmV2OworCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgb3B0LCAmc19yX29wdCk7CisKKwl3aGlsZSAoLS1hcmdjID4gMCkgeworCQljb25zdCBjaGFyICphcmcgPSAqKythcmd2OworCisJCWlmICghc3RyY21wKGFyZywgIi0tc3RkaW4iKSkgeworCQkJcmVhZF9zdGRpbiA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQl1c2FnZShkaWZmX3RyZWVfdXNhZ2UpOworCX0KKworCS8qCisJICogTk9URSEgV2UgZXhwZWN0ICJhIF5iIiB0byBiZSBlcXVhbCB0byAiYS4uYiIsIHNvIHdlCisJICogcmV2ZXJzZSB0aGUgb3JkZXIgb2YgdGhlIG9iamVjdHMgaWYgdGhlIHNlY29uZCBvbmUKKwkgKiBpcyBtYXJrZWQgVU5JTlRFUkVTVElORy4KKwkgKi8KKwlucl9zaGExID0gb3B0LT5wZW5kaW5nLm5yOworCXN3aXRjaCAobnJfc2hhMSkgeworCWNhc2UgMDoKKwkJaWYgKCFyZWFkX3N0ZGluKQorCQkJdXNhZ2UoZGlmZl90cmVlX3VzYWdlKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQl0cmVlMSA9IG9wdC0+cGVuZGluZy5vYmplY3RzWzBdLml0ZW07CisJCWRpZmZfdHJlZV9jb21taXRfc2hhMSh0cmVlMS0+c2hhMSk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJdHJlZTEgPSBvcHQtPnBlbmRpbmcub2JqZWN0c1swXS5pdGVtOworCQl0cmVlMiA9IG9wdC0+cGVuZGluZy5vYmplY3RzWzFdLml0ZW07CisJCWlmICh0cmVlMi0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICp0bXAgPSB0cmVlMjsKKwkJCXRyZWUyID0gdHJlZTE7CisJCQl0cmVlMSA9IHRtcDsKKwkJfQorCQlkaWZmX3RyZWVfc2hhMSh0cmVlMS0+c2hhMSwKKwkJCSAgICAgICB0cmVlMi0+c2hhMSwKKwkJCSAgICAgICAiIiwgJm9wdC0+ZGlmZm9wdCk7CisJCWxvZ190cmVlX2RpZmZfZmx1c2gob3B0KTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJlYWRfc3RkaW4pIHsKKwkJaW50IHNhdmVkX25ybCA9IDA7CisJCWludCBzYXZlZF9kY2N0YyA9IDA7CisKKwkJaWYgKG9wdC0+ZGlmZm9wdC5kZXRlY3RfcmVuYW1lKQorCQkJb3B0LT5kaWZmb3B0LnNldHVwIHw9IChESUZGX1NFVFVQX1VTRV9TSVpFX0NBQ0hFIHwKKwkJCQkJICAgICAgIERJRkZfU0VUVVBfVVNFX0NBQ0hFKTsKKwkJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4pKSB7CisJCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJCQlpZiAoZ2V0X3NoYTFfaGV4KGxpbmUsIHNoYTEpKSB7CisJCQkJZnB1dHMobGluZSwgc3Rkb3V0KTsKKwkJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWRpZmZfdHJlZV9zdGRpbihsaW5lKTsKKwkJCQlpZiAoc2F2ZWRfbnJsIDwgb3B0LT5kaWZmb3B0Lm5lZWRlZF9yZW5hbWVfbGltaXQpCisJCQkJCXNhdmVkX25ybCA9IG9wdC0+ZGlmZm9wdC5uZWVkZWRfcmVuYW1lX2xpbWl0OworCQkJCWlmIChvcHQtPmRpZmZvcHQuZGVncmFkZWRfY2NfdG9fYykKKwkJCQkJc2F2ZWRfZGNjdGMgPSAxOworCQkJfQorCQl9CisJCW9wdC0+ZGlmZm9wdC5kZWdyYWRlZF9jY190b19jID0gc2F2ZWRfZGNjdGM7CisJCW9wdC0+ZGlmZm9wdC5uZWVkZWRfcmVuYW1lX2xpbWl0ID0gc2F2ZWRfbnJsOworCX0KKworCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZvcHQtPmRpZmZvcHQsIDApOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9kaWZmLmMgYi9idWlsdGluL2RpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzI2ZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9kaWZmLmMKQEAgLTAsMCArMSw0NzEgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgZGlmZiIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKworI2RlZmluZSBESUZGX05PX0lOREVYX0VYUExJQ0lUIDEKKyNkZWZpbmUgRElGRl9OT19JTkRFWF9JTVBMSUNJVCAyCisKK3N0cnVjdCBibG9iaW5mbyB7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIG1vZGU7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX2RpZmZfdXNhZ2VbXSA9CisiZ2l0IGRpZmYgWzxvcHRpb25zPl0gWzxjb21taXQ+IFs8Y29tbWl0Pl1dIFstLV0gWzxwYXRoPi4uLl0iOworCitzdGF0aWMgdm9pZCBzdHVmZl9jaGFuZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAorCQkJIHVuc2lnbmVkIG9sZF9tb2RlLCB1bnNpZ25lZCBuZXdfbW9kZSwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwKKwkJCSBpbnQgb2xkX3NoYTFfdmFsaWQsCisJCQkgaW50IG5ld19zaGExX3ZhbGlkLAorCQkJIGNvbnN0IGNoYXIgKm9sZF9uYW1lLAorCQkJIGNvbnN0IGNoYXIgKm5ld19uYW1lKQoreworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsICp0d287CisKKwlpZiAoIWlzX251bGxfc2hhMShvbGRfc2hhMSkgJiYgIWlzX251bGxfc2hhMShuZXdfc2hhMSkgJiYKKwkgICAgIWhhc2hjbXAob2xkX3NoYTEsIG5ld19zaGExKSAmJiAob2xkX21vZGUgPT0gbmV3X21vZGUpKQorCQlyZXR1cm47CisKKwlpZiAoRElGRl9PUFRfVFNUKG9wdCwgUkVWRVJTRV9ESUZGKSkgeworCQl1bnNpZ25lZCB0bXA7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnRtcF91OworCQljb25zdCBjaGFyICp0bXBfYzsKKwkJdG1wID0gb2xkX21vZGU7IG9sZF9tb2RlID0gbmV3X21vZGU7IG5ld19tb2RlID0gdG1wOworCQl0bXBfdSA9IG9sZF9zaGExOyBvbGRfc2hhMSA9IG5ld19zaGExOyBuZXdfc2hhMSA9IHRtcF91OworCQl0bXBfYyA9IG9sZF9uYW1lOyBvbGRfbmFtZSA9IG5ld19uYW1lOyBuZXdfbmFtZSA9IHRtcF9jOworCX0KKworCWlmIChvcHQtPnByZWZpeCAmJgorCSAgICAoc3RybmNtcChvbGRfbmFtZSwgb3B0LT5wcmVmaXgsIG9wdC0+cHJlZml4X2xlbmd0aCkgfHwKKwkgICAgIHN0cm5jbXAobmV3X25hbWUsIG9wdC0+cHJlZml4LCBvcHQtPnByZWZpeF9sZW5ndGgpKSkKKwkJcmV0dXJuOworCisJb25lID0gYWxsb2NfZmlsZXNwZWMob2xkX25hbWUpOworCXR3byA9IGFsbG9jX2ZpbGVzcGVjKG5ld19uYW1lKTsKKwlmaWxsX2ZpbGVzcGVjKG9uZSwgb2xkX3NoYTEsIG9sZF9zaGExX3ZhbGlkLCBvbGRfbW9kZSk7CisJZmlsbF9maWxlc3BlYyh0d28sIG5ld19zaGExLCBuZXdfc2hhMV92YWxpZCwgbmV3X21vZGUpOworCisJZGlmZl9xdWV1ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgb25lLCB0d28pOworfQorCitzdGF0aWMgaW50IGJ1aWx0aW5fZGlmZl9iX2Yoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCSAgICBzdHJ1Y3QgYmxvYmluZm8gKmJsb2IpCit7CisJLyogQmxvYiB2cyBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUqLworCXN0cnVjdCBzdGF0IHN0OworCWNvbnN0IGNoYXIgKnBhdGg7CisKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisKKwlHVUFSRF9QQVRIU1BFQygmcmV2cy0+cHJ1bmVfZGF0YSwgUEFUSFNQRUNfRlJPTVRPUCB8IFBBVEhTUEVDX0xJVEVSQUwpOworCXBhdGggPSByZXZzLT5wcnVuZV9kYXRhLml0ZW1zWzBdLm1hdGNoOworCisJaWYgKGxzdGF0KHBhdGgsICZzdCkpCisJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gc3RhdCAnJXMnIiksIHBhdGgpOworCWlmICghKFNfSVNSRUcoc3Quc3RfbW9kZSkgfHwgU19JU0xOSyhzdC5zdF9tb2RlKSkpCisJCWRpZShfKCInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIpLCBwYXRoKTsKKworCWRpZmZfc2V0X21uZW1vbmljX3ByZWZpeCgmcmV2cy0+ZGlmZm9wdCwgIm8vIiwgIncvIik7CisKKwlpZiAoYmxvYlswXS5tb2RlID09IFNfSUZJTlZBTElEKQorCQlibG9iWzBdLm1vZGUgPSBjYW5vbl9tb2RlKHN0LnN0X21vZGUpOworCisJc3R1ZmZfY2hhbmdlKCZyZXZzLT5kaWZmb3B0LAorCQkgICAgIGJsb2JbMF0ubW9kZSwgY2Fub25fbW9kZShzdC5zdF9tb2RlKSwKKwkJICAgICBibG9iWzBdLnNoYTEsIG51bGxfc2hhMSwKKwkJICAgICAxLCAwLAorCQkgICAgIHBhdGgsIHBhdGgpOworCWRpZmZjb3JlX3N0ZCgmcmV2cy0+ZGlmZm9wdCk7CisJZGlmZl9mbHVzaCgmcmV2cy0+ZGlmZm9wdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnVpbHRpbl9kaWZmX2Jsb2JzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCSAgICAgIHN0cnVjdCBibG9iaW5mbyAqYmxvYikKK3sKKwl1bnNpZ25lZCBtb2RlID0gY2Fub25fbW9kZShTX0lGUkVHIHwgMDY0NCk7CisKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisKKwlpZiAoYmxvYlswXS5tb2RlID09IFNfSUZJTlZBTElEKQorCQlibG9iWzBdLm1vZGUgPSBtb2RlOworCisJaWYgKGJsb2JbMV0ubW9kZSA9PSBTX0lGSU5WQUxJRCkKKwkJYmxvYlsxXS5tb2RlID0gbW9kZTsKKworCXN0dWZmX2NoYW5nZSgmcmV2cy0+ZGlmZm9wdCwKKwkJICAgICBibG9iWzBdLm1vZGUsIGJsb2JbMV0ubW9kZSwKKwkJICAgICBibG9iWzBdLnNoYTEsIGJsb2JbMV0uc2hhMSwKKwkJICAgICAxLCAxLAorCQkgICAgIGJsb2JbMF0ubmFtZSwgYmxvYlsxXS5uYW1lKTsKKwlkaWZmY29yZV9zdGQoJnJldnMtPmRpZmZvcHQpOworCWRpZmZfZmx1c2goJnJldnMtPmRpZmZvcHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ1aWx0aW5fZGlmZl9pbmRleChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGNhY2hlZCA9IDA7CisJd2hpbGUgKDEgPCBhcmdjKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbMV07CisJCWlmICghc3RyY21wKGFyZywgIi0tY2FjaGVkIikgfHwgIXN0cmNtcChhcmcsICItLXN0YWdlZCIpKQorCQkJY2FjaGVkID0gMTsKKwkJZWxzZQorCQkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKwkJYXJndisrOyBhcmdjLS07CisJfQorCS8qCisJICogTWFrZSBzdXJlIHRoZXJlIGlzIG9uZSByZXZpc2lvbiAoaS5lLiBwZW5kaW5nIG9iamVjdCksCisJICogYW5kIHRoZXJlIGlzIG5vIHJldmlzaW9uIGZpbHRlcmluZyBwYXJhbWV0ZXJzLgorCSAqLworCWlmIChyZXZzLT5wZW5kaW5nLm5yICE9IDEgfHwKKwkgICAgcmV2cy0+bWF4X2NvdW50ICE9IC0xIHx8IHJldnMtPm1pbl9hZ2UgIT0gLTEgfHwKKwkgICAgcmV2cy0+bWF4X2FnZSAhPSAtMSkKKwkJdXNhZ2UoYnVpbHRpbl9kaWZmX3VzYWdlKTsKKwlpZiAoIWNhY2hlZCkgeworCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJaWYgKHJlYWRfY2FjaGVfcHJlbG9hZCgmcmV2cy0+ZGlmZm9wdC5wYXRoc3BlYykgPCAwKSB7CisJCQlwZXJyb3IoInJlYWRfY2FjaGVfcHJlbG9hZCIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfSBlbHNlIGlmIChyZWFkX2NhY2hlKCkgPCAwKSB7CisJCXBlcnJvcigicmVhZF9jYWNoZSIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBydW5fZGlmZl9pbmRleChyZXZzLCBjYWNoZWQpOworfQorCitzdGF0aWMgaW50IGJ1aWx0aW5fZGlmZl90cmVlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnQwLAorCQkJICAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnQxKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKihzaGExWzJdKTsKKwlpbnQgc3dhcCA9IDA7CisKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisKKwkvKgorCSAqIFdlIHNhdyB0d28gdHJlZXMsIGVudDAgYW5kIGVudDEuICBJZiBlbnQxIGlzIHVuaW50ZXJlc3RpbmcsCisJICogc3dhcCB0aGVtLgorCSAqLworCWlmIChlbnQxLT5pdGVtLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXN3YXAgPSAxOworCXNoYTFbc3dhcF0gPSBlbnQwLT5pdGVtLT5zaGExOworCXNoYTFbMSAtIHN3YXBdID0gZW50MS0+aXRlbS0+c2hhMTsKKwlkaWZmX3RyZWVfc2hhMShzaGExWzBdLCBzaGExWzFdLCAiIiwgJnJldnMtPmRpZmZvcHQpOworCWxvZ190cmVlX2RpZmZfZmx1c2gocmV2cyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnVpbHRpbl9kaWZmX2NvbWJpbmVkKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJCSBzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnQsCisJCQkJIGludCBlbnRzKQoreworCXN0cnVjdCBzaGExX2FycmF5IHBhcmVudHMgPSBTSEExX0FSUkFZX0lOSVQ7CisJaW50IGk7CisKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisKKwlpZiAoIXJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcyAmJiAhcmV2cy0+Y29tYmluZV9tZXJnZXMpCisJCXJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcyA9IHJldnMtPmNvbWJpbmVfbWVyZ2VzID0gMTsKKwlmb3IgKGkgPSAxOyBpIDwgZW50czsgaSsrKQorCQlzaGExX2FycmF5X2FwcGVuZCgmcGFyZW50cywgZW50W2ldLml0ZW0tPnNoYTEpOworCWRpZmZfdHJlZV9jb21iaW5lZChlbnRbMF0uaXRlbS0+c2hhMSwgJnBhcmVudHMsCisJCQkgICByZXZzLT5kZW5zZV9jb21iaW5lZF9tZXJnZXMsIHJldnMpOworCXNoYTFfYXJyYXlfY2xlYXIoJnBhcmVudHMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWZyZXNoX2luZGV4X3F1aWV0bHkodm9pZCkKK3sKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGU7CisJaW50IGZkOworCisJbG9ja19maWxlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOworCWZkID0gaG9sZF9sb2NrZWRfaW5kZXgobG9ja19maWxlLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm47CisJZGlzY2FyZF9jYWNoZSgpOworCXJlYWRfY2FjaGUoKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVR8UkVGUkVTSF9VTk1FUkdFRCk7CisJdXBkYXRlX2luZGV4X2lmX2FibGUoJnRoZV9pbmRleCwgbG9ja19maWxlKTsKK30KKworc3RhdGljIGludCBidWlsdGluX2RpZmZfZmlsZXMoc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IG9wdGlvbnMgPSAwOworCisJd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMV0sICItLWJhc2UiKSkKKwkJCXJldnMtPm1heF9jb3VudCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi0tb3VycyIpKQorCQkJcmV2cy0+bWF4X2NvdW50ID0gMjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS10aGVpcnMiKSkKKwkJCXJldnMtPm1heF9jb3VudCA9IDM7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1xIikpCisJCQlvcHRpb25zIHw9IERJRkZfU0lMRU5UX09OX1JFTU9WRUQ7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3IoXygiaW52YWxpZCBvcHRpb246ICVzIiksIGFyZ3ZbMV0pOworCQlhcmd2Kys7IGFyZ2MtLTsKKwl9CisKKwkvKgorCSAqICJkaWZmIC0tYmFzZSIgc2hvdWxkIG5vdCBjb21iaW5lIG1lcmdlcyBiZWNhdXNlIGl0IHdhcyBub3QKKwkgKiBhc2tlZCB0by4gICJkaWZmIC1jIiBzaG91bGQgbm90IGRlbnNpZnkgKGlmIHRoZSB1c2VyIHdhbnRzCisJICogZGVuc2Ugb25lLCAtLWNjIGNhbiBiZSBleHBsaWNpdGx5IGFza2VkIGZvciwgb3IganVzdCByZWx5CisJICogb24gdGhlIGRlZmF1bHQpLgorCSAqLworCWlmIChyZXZzLT5tYXhfY291bnQgPT0gLTEgJiYgIXJldnMtPmNvbWJpbmVfbWVyZ2VzICYmCisJICAgIChyZXZzLT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9QQVRDSCkpCisJCXJldnMtPmNvbWJpbmVfbWVyZ2VzID0gcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMTsKKworCXNldHVwX3dvcmtfdHJlZSgpOworCWlmIChyZWFkX2NhY2hlX3ByZWxvYWQoJnJldnMtPmRpZmZvcHQucGF0aHNwZWMpIDwgMCkgeworCQlwZXJyb3IoInJlYWRfY2FjaGVfcHJlbG9hZCIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBydW5fZGlmZl9maWxlcyhyZXZzLCBvcHRpb25zKTsKK30KKworaW50IGNtZF9kaWZmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IG9iamVjdF9hcnJheSBlbnQgPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwlpbnQgYmxvYnMgPSAwLCBwYXRocyA9IDA7CisJc3RydWN0IGJsb2JpbmZvIGJsb2JbMl07CisJaW50IG5vbmdpdCA9IDAsIG5vX2luZGV4ID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKKworCS8qCisJICogV2UgY291bGQgZ2V0IE4gdHJlZS1pc2ggaW4gdGhlIHJldi5wZW5kaW5nX29iamVjdHMgbGlzdC4KKwkgKiBBbHNvIHRoZXJlIGNvdWxkIGJlIE0gYmxvYnMgdGhlcmUsIGFuZCBQIHBhdGhzcGVjcy4KKwkgKgorCSAqIE49MCwgTT0wOgorCSAqCWNhY2hlIHZzIGZpbGVzIChkaWZmLWZpbGVzKQorCSAqIE49MCwgTT0yOgorCSAqICAgICAgY29tcGFyZSB0d28gcmFuZG9tIGJsb2JzLiAgUCBtdXN0IGJlIHplcm8uCisJICogTj0wLCBNPTEsIFA9MToKKwkgKgljb21wYXJlIGEgYmxvYiB3aXRoIGEgd29ya2luZyB0cmVlIGZpbGUuCisJICoKKwkgKiBOPTEsIE09MDoKKwkgKiAgICAgIHRyZWUgdnMgY2FjaGUgKGRpZmYtaW5kZXggLS1jYWNoZWQpCisJICoKKwkgKiBOPTIsIE09MDoKKwkgKiAgICAgIHRyZWUgdnMgdHJlZSAoZGlmZi10cmVlKQorCSAqCisJICogTj0wLCBNPTAsIFA9MjoKKwkgKiAgICAgIGNvbXBhcmUgdHdvIGZpbGVzeXN0ZW0gZW50aXRpZXMgKGFrYSAtLW5vLWluZGV4KS4KKwkgKgorCSAqIE90aGVyIGNhc2VzIGFyZSBlcnJvcnMuCisJICovCisKKwkvKiBXZXJlIHdlIGFza2VkIHRvIGRvIC0tbm8taW5kZXggZXhwbGljaXRseT8gKi8KKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLSIpKSB7CisJCQlpKys7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS1uby1pbmRleCIpKQorCQkJbm9faW5kZXggPSBESUZGX05PX0lOREVYX0VYUExJQ0lUOworCQlpZiAoYXJndltpXVswXSAhPSAnLScpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIW5vX2luZGV4KQorCQlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0KTsKKworCS8qCisJICogVHJlYXQgZ2l0IGRpZmYgd2l0aCBhdCBsZWFzdCBvbmUgcGF0aCBvdXRzaWRlIG9mIHRoZQorCSAqIHJlcG8gdGhlIHNhbWUgYXMgaWYgdGhlIGNvbW1hbmQgd291bGQgaGF2ZSBiZWVuIGV4ZWN1dGVkCisJICogb3V0c2lkZSBvZiBhIGdpdCByZXBvc2l0b3J5LiAgSW4gdGhpcyBjYXNlIGl0IGJlaGF2ZXMKKwkgKiB0aGUgc2FtZSB3YXkgYXMgImdpdCBkaWZmIC0tbm8taW5kZXggPGE+IDxiPiIsIHdoaWNoIGFjdHMKKwkgKiBhcyBhIGNvbG91cmZ1bCAiZGlmZiIgcmVwbGFjZW1lbnQuCisJICovCisJaWYgKG5vbmdpdCB8fCAoKGFyZ2MgPT0gaSArIDIpICYmCisJCSAgICAgICAoIXBhdGhfaW5zaWRlX3JlcG8ocHJlZml4LCBhcmd2W2ldKSB8fAorCQkJIXBhdGhfaW5zaWRlX3JlcG8ocHJlZml4LCBhcmd2W2kgKyAxXSkpKSkKKwkJbm9faW5kZXggPSBESUZGX05PX0lOREVYX0lNUExJQ0lUOworCisJaWYgKCFub19pbmRleCkKKwkJZ2l0bW9kdWxlc19jb25maWcoKTsKKwlnaXRfY29uZmlnKGdpdF9kaWZmX3VpX2NvbmZpZywgTlVMTCk7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOworCisJaWYgKG5vX2luZGV4ICYmIGFyZ2MgIT0gaSArIDIpIHsKKwkJaWYgKG5vX2luZGV4ID09IERJRkZfTk9fSU5ERVhfSU1QTElDSVQpIHsKKwkJCS8qCisJCQkgKiBUaGVyZSB3YXMgbm8gLS1uby1pbmRleCBhbmQgdGhlcmUgd2VyZSBub3QgdHdvCisJCQkgKiBwYXRocy4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgdXNlciBpbnRlbmRlZAorCQkJICogdG8gZG8gYW4gaW5zaWRlLXJlcG9zaXRvcnkgb3BlcmF0aW9uLgorCQkJICovCisJCQlmcHJpbnRmKHN0ZGVyciwgIk5vdCBhIGdpdCByZXBvc2l0b3J5XG4iKTsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJUbyBjb21wYXJlIHR3byBwYXRocyBvdXRzaWRlIGEgd29ya2luZyB0cmVlOlxuIik7CisJCX0KKwkJLyogR2l2ZSB0aGUgdXNhZ2UgbWVzc2FnZSBmb3Igbm9uLXJlcG9zaXRvcnkgdXNhZ2UgYW5kIGV4aXQuICovCisJCXVzYWdlZigiZ2l0IGRpZmYgJXMgPHBhdGg+IDxwYXRoPiIsCisJCSAgICAgICBub19pbmRleCA9PSBESUZGX05PX0lOREVYX0VYUExJQ0lUID8KKwkJICAgICAgICItLW5vLWluZGV4IiA6ICJbLS1uby1pbmRleF0iKTsKKworCX0KKwlpZiAobm9faW5kZXgpCisJCS8qIElmIHRoaXMgaXMgYSBuby1pbmRleCBkaWZmLCBqdXN0IHJ1biBpdCBhbmQgZXhpdCB0aGVyZS4gKi8KKwkJZGlmZl9ub19pbmRleCgmcmV2LCBhcmdjLCBhcmd2LCBwcmVmaXgpOworCisJLyogT3RoZXJ3aXNlLCB3ZSBhcmUgZG9pbmcgdGhlIHVzdWFsICJnaXQiIGRpZmYgKi8KKwlyZXYuZGlmZm9wdC5za2lwX3N0YXRfdW5tYXRjaCA9ICEhZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXg7CisKKwkvKiBTY2FsZSB0byByZWFsIHRlcm1pbmFsIHNpemUgYW5kIHJlc3BlY3Qgc3RhdEdyYXBoV2lkdGggY29uZmlnICovCisJcmV2LmRpZmZvcHQuc3RhdF93aWR0aCA9IC0xOworCXJldi5kaWZmb3B0LnN0YXRfZ3JhcGhfd2lkdGggPSAtMTsKKworCS8qIERlZmF1bHQgdG8gbGV0IGV4dGVybmFsIGFuZCB0ZXh0Y29udiBiZSB1c2VkICovCisJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgQUxMT1dfRVhURVJOQUwpOworCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIEFMTE9XX1RFWFRDT05WKTsKKworCWlmIChub25naXQpCisJCWRpZShfKCJOb3QgYSBnaXQgcmVwb3NpdG9yeSIpKTsKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsIE5VTEwpOworCWlmICghcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkgeworCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisJCWRpZmZfc2V0dXBfZG9uZSgmcmV2LmRpZmZvcHQpOworCX0KKworCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIFJFQ1VSU0lWRSk7CisKKwlzZXR1cF9kaWZmX3BhZ2VyKCZyZXYuZGlmZm9wdCk7CisKKwkvKgorCSAqIERvIHdlIGhhdmUgLS1jYWNoZWQgYW5kIG5vdCBoYXZlIGEgcGVuZGluZyBvYmplY3QsIHRoZW4KKwkgKiBkZWZhdWx0IHRvIEhFQUQgYnkgaGFuZC4gIEVlay4KKwkgKi8KKwlpZiAoIXJldi5wZW5kaW5nLm5yKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkKKwkJCQlicmVhazsKKwkJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jYWNoZWQiKSB8fAorCQkJCSAhc3RyY21wKGFyZywgIi0tc3RhZ2VkIikpIHsKKwkJCQlhZGRfaGVhZF90b19wZW5kaW5nKCZyZXYpOworCQkJCWlmICghcmV2LnBlbmRpbmcubnIpIHsKKwkJCQkJc3RydWN0IHRyZWUgKnRyZWU7CisJCQkJCXRyZWUgPSBsb29rdXBfdHJlZShFTVBUWV9UUkVFX1NIQTFfQklOKTsKKwkJCQkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXYsICZ0cmVlLT5vYmplY3QsICJIRUFEIik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJldi5wZW5kaW5nLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50cnkgPSAmcmV2LnBlbmRpbmcub2JqZWN0c1tpXTsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gZW50cnktPml0ZW07CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBlbnRyeS0+bmFtZTsKKwkJaW50IGZsYWdzID0gKG9iai0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKTsKKwkJaWYgKCFvYmotPnBhcnNlZCkKKwkJCW9iaiA9IHBhcnNlX29iamVjdChvYmotPnNoYTEpOworCQlvYmogPSBkZXJlZl90YWcob2JqLCBOVUxMLCAwKTsKKwkJaWYgKCFvYmopCisJCQlkaWUoXygiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iKSwgbmFtZSk7CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCW9iaiA9ICYoKHN0cnVjdCBjb21taXQgKilvYmopLT50cmVlLT5vYmplY3Q7CisKKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgeworCQkJb2JqLT5mbGFncyB8PSBmbGFnczsKKwkJCWFkZF9vYmplY3RfYXJyYXkob2JqLCBuYW1lLCAmZW50KTsKKwkJfSBlbHNlIGlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpIHsKKwkJCWlmICgyIDw9IGJsb2JzKQorCQkJCWRpZShfKCJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIiksIG5hbWUpOworCQkJaGFzaGNweShibG9iW2Jsb2JzXS5zaGExLCBvYmotPnNoYTEpOworCQkJYmxvYltibG9ic10ubmFtZSA9IG5hbWU7CisJCQlibG9iW2Jsb2JzXS5tb2RlID0gZW50cnktPm1vZGU7CisJCQlibG9icysrOworCisJCX0gZWxzZSB7CisJCQlkaWUoXygidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIpLCBuYW1lKTsKKwkJfQorCX0KKwlpZiAocmV2LnBydW5lX2RhdGEubnIpCisJCXBhdGhzICs9IHJldi5wcnVuZV9kYXRhLm5yOworCisJLyoKKwkgKiBOb3csIGRvIHRoZSBhcmd1bWVudHMgbG9vayByZWFzb25hYmxlPworCSAqLworCWlmICghZW50Lm5yKSB7CisJCXN3aXRjaCAoYmxvYnMpIHsKKwkJY2FzZSAwOgorCQkJcmVzdWx0ID0gYnVpbHRpbl9kaWZmX2ZpbGVzKCZyZXYsIGFyZ2MsIGFyZ3YpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlmIChwYXRocyAhPSAxKQorCQkJCXVzYWdlKGJ1aWx0aW5fZGlmZl91c2FnZSk7CisJCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfYl9mKCZyZXYsIGFyZ2MsIGFyZ3YsIGJsb2IpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWlmIChwYXRocykKKwkJCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCQkJcmVzdWx0ID0gYnVpbHRpbl9kaWZmX2Jsb2JzKCZyZXYsIGFyZ2MsIGFyZ3YsIGJsb2IpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCQl9CisJfQorCWVsc2UgaWYgKGJsb2JzKQorCQl1c2FnZShidWlsdGluX2RpZmZfdXNhZ2UpOworCWVsc2UgaWYgKGVudC5uciA9PSAxKQorCQlyZXN1bHQgPSBidWlsdGluX2RpZmZfaW5kZXgoJnJldiwgYXJnYywgYXJndik7CisJZWxzZSBpZiAoZW50Lm5yID09IDIpCisJCXJlc3VsdCA9IGJ1aWx0aW5fZGlmZl90cmVlKCZyZXYsIGFyZ2MsIGFyZ3YsCisJCQkJCSAgICZlbnQub2JqZWN0c1swXSwgJmVudC5vYmplY3RzWzFdKTsKKwllbHNlIGlmIChlbnQub2JqZWN0c1swXS5pdGVtLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJLyoKKwkJICogZGlmZiBBLi4uQiB3aGVyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgbWVyZ2UgYmFzZQorCQkgKiBiZXR3ZWVuIEEgYW5kIEIuICBXZSBoYXZlIGVudC5vYmplY3RzWzBdID09CisJCSAqIG1lcmdlLWJhc2UsIGVudC5vYmplY3RzW2VudHMtMl0gPT0gQSwgYW5kCisJCSAqIGVudC5vYmplY3RzW2VudHMtMV0gPT0gQi4gIFNob3cgZGlmZiBiZXR3ZWVuIHRoZQorCQkgKiBiYXNlIGFuZCBCLiAgTm90ZSB0aGF0IHdlIHBpY2sgb25lIG1lcmdlIGJhc2UgYXQKKwkJICogcmFuZG9tIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLgorCQkgKi8KKwkJcmVzdWx0ID0gYnVpbHRpbl9kaWZmX3RyZWUoJnJldiwgYXJnYywgYXJndiwKKwkJCQkJICAgJmVudC5vYmplY3RzWzBdLAorCQkJCQkgICAmZW50Lm9iamVjdHNbZW50Lm5yLTFdKTsKKwl9IGVsc2UKKwkJcmVzdWx0ID0gYnVpbHRpbl9kaWZmX2NvbWJpbmVkKCZyZXYsIGFyZ2MsIGFyZ3YsCisJCQkJCSAgICAgICBlbnQub2JqZWN0cywgZW50Lm5yKTsKKwlyZXN1bHQgPSBkaWZmX3Jlc3VsdF9jb2RlKCZyZXYuZGlmZm9wdCwgcmVzdWx0KTsKKwlpZiAoMSA8IHJldi5kaWZmb3B0LnNraXBfc3RhdF91bm1hdGNoKQorCQlyZWZyZXNoX2luZGV4X3F1aWV0bHkoKTsKKwlyZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mYXN0LWV4cG9ydC5jIGIvYnVpbHRpbi9mYXN0LWV4cG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyM2YzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Zhc3QtZXhwb3J0LmMKQEAgLTAsMCArMSwxMDczIEBACisvKgorICogImdpdCBmYXN0LWV4cG9ydCIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpmYXN0X2V4cG9ydF91c2FnZVtdID0geworCU5fKCJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBwcm9ncmVzczsKK3N0YXRpYyBlbnVtIHsgQUJPUlQsIFZFUkJBVElNLCBXQVJOLCBXQVJOX1NUUklQLCBTVFJJUCB9IHNpZ25lZF90YWdfbW9kZSA9IEFCT1JUOworc3RhdGljIGVudW0geyBFUlJPUiwgRFJPUCwgUkVXUklURSB9IHRhZ19vZl9maWx0ZXJlZF9tb2RlID0gRVJST1I7CitzdGF0aWMgaW50IGZha2VfbWlzc2luZ190YWdnZXI7CitzdGF0aWMgaW50IHVzZV9kb25lX2ZlYXR1cmU7CitzdGF0aWMgaW50IG5vX2RhdGE7CitzdGF0aWMgaW50IGZ1bGxfdHJlZTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfcmVmcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CitzdGF0aWMgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWNzOworc3RhdGljIGludCByZWZzcGVjc19ucjsKK3N0YXRpYyBpbnQgYW5vbnltaXplOworCitzdGF0aWMgaW50IHBhcnNlX29wdF9zaWduZWRfdGFnX21vZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0IHx8ICFzdHJjbXAoYXJnLCAiYWJvcnQiKSkKKwkJc2lnbmVkX3RhZ19tb2RlID0gQUJPUlQ7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJ2ZXJiYXRpbSIpIHx8ICFzdHJjbXAoYXJnLCAiaWdub3JlIikpCisJCXNpZ25lZF90YWdfbW9kZSA9IFZFUkJBVElNOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAid2FybiIpKQorCQlzaWduZWRfdGFnX21vZGUgPSBXQVJOOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAid2Fybi1zdHJpcCIpKQorCQlzaWduZWRfdGFnX21vZGUgPSBXQVJOX1NUUklQOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAic3RyaXAiKSkKKwkJc2lnbmVkX3RhZ19tb2RlID0gU1RSSVA7CisJZWxzZQorCQlyZXR1cm4gZXJyb3IoIlVua25vd24gc2lnbmVkLXRhZ3MgbW9kZTogJXMiLCBhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX29wdF90YWdfb2ZfZmlsdGVyZWRfbW9kZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCSAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0IHx8ICFzdHJjbXAoYXJnLCAiYWJvcnQiKSkKKwkJdGFnX29mX2ZpbHRlcmVkX21vZGUgPSBFUlJPUjsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImRyb3AiKSkKKwkJdGFnX29mX2ZpbHRlcmVkX21vZGUgPSBEUk9QOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAicmV3cml0ZSIpKQorCQl0YWdfb2ZfZmlsdGVyZWRfbW9kZSA9IFJFV1JJVEU7CisJZWxzZQorCQlyZXR1cm4gZXJyb3IoIlVua25vd24gdGFnLW9mLWZpbHRlcmVkIG1vZGU6ICVzIiwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZWNvcmF0aW9uIGlkbnVtczsKK3N0YXRpYyB1aW50MzJfdCBsYXN0X2lkbnVtOworCitzdGF0aWMgaW50IGhhc191bnNob3duX3BhcmVudChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwlmb3IgKHBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQpCisJCWlmICghKHBhcmVudC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgU0hPV04pICYmCisJCSAgICAhKHBhcmVudC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGFub255bWl6ZWRfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGhhc2g7CisJY29uc3QgY2hhciAqb3JpZzsKKwlzaXplX3Qgb3JpZ19sZW47CisJY29uc3QgY2hhciAqYW5vbjsKKwlzaXplX3QgYW5vbl9sZW47Cit9OworCitzdGF0aWMgaW50IGFub255bWl6ZWRfZW50cnlfY21wKGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YiwKKwkJCQljb25zdCB2b2lkICpkYXRhKQoreworCWNvbnN0IHN0cnVjdCBhbm9ueW1pemVkX2VudHJ5ICphID0gdmEsICpiID0gdmI7CisJcmV0dXJuIGEtPm9yaWdfbGVuICE9IGItPm9yaWdfbGVuIHx8CisJCW1lbWNtcChhLT5vcmlnLCBiLT5vcmlnLCBhLT5vcmlnX2xlbik7Cit9CisKKy8qCisgKiBCYXNpY2FsbHkga2VlcCBhIGNhY2hlIG9mIFgtPlkgc28gdGhhdCB3ZSBjYW4gcmVwZWF0ZWRseSByZXBsYWNlCisgKiB0aGUgc2FtZSBhbm9ueW1pemVkIHN0cmluZyB3aXRoIGFub3RoZXIuIFRoZSBhY3R1YWwgZ2VuZXJhdGlvbgorICogaXMgZmFybWVkIG91dCB0byB0aGUgZ2VuZXJhdGUgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBjb25zdCB2b2lkICphbm9ueW1pemVfbWVtKHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkJIHZvaWQgKigqZ2VuZXJhdGUpKGNvbnN0IHZvaWQgKiwgc2l6ZV90ICopLAorCQkJCSBjb25zdCB2b2lkICpvcmlnLCBzaXplX3QgKmxlbikKK3sKKwlzdHJ1Y3QgYW5vbnltaXplZF9lbnRyeSBrZXksICpyZXQ7CisKKwlpZiAoIW1hcC0+Y21wZm4pCisJCWhhc2htYXBfaW5pdChtYXAsIGFub255bWl6ZWRfZW50cnlfY21wLCAwKTsKKworCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LCBtZW1oYXNoKG9yaWcsICpsZW4pKTsKKwlrZXkub3JpZyA9IG9yaWc7CisJa2V5Lm9yaWdfbGVuID0gKmxlbjsKKwlyZXQgPSBoYXNobWFwX2dldChtYXAsICZrZXksIE5VTEwpOworCisJaWYgKCFyZXQpIHsKKwkJcmV0ID0geG1hbGxvYyhzaXplb2YoKnJldCkpOworCQloYXNobWFwX2VudHJ5X2luaXQoJnJldC0+aGFzaCwga2V5Lmhhc2guaGFzaCk7CisJCXJldC0+b3JpZyA9IHhzdHJkdXAob3JpZyk7CisJCXJldC0+b3JpZ19sZW4gPSAqbGVuOworCQlyZXQtPmFub24gPSBnZW5lcmF0ZShvcmlnLCBsZW4pOworCQlyZXQtPmFub25fbGVuID0gKmxlbjsKKwkJaGFzaG1hcF9wdXQobWFwLCByZXQpOworCX0KKworCSpsZW4gPSByZXQtPmFub25fbGVuOworCXJldHVybiByZXQtPmFub247Cit9CisKKy8qCisgKiBXZSBhbm9ueW1pemUgZWFjaCBjb21wb25lbnQgb2YgYSBwYXRoIGluZGl2aWR1YWxseSwKKyAqIHNvIHRoYXQgcGF0aHMgYS9iIGFuZCBhL2Mgd2lsbCBzaGFyZSBhIGNvbW1vbiByb290LgorICogVGhlIHBhdGhzIGFyZSBjYWNoZWQgdmlhIGFub255bWl6ZV9tZW0gc28gdGhhdCByZXBlYXRlZAorICogbG9va3VwcyBmb3IgImEiIHdpbGwgeWllbGQgdGhlIHNhbWUgdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIGFub255bWl6ZV9wYXRoKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIHN0cnVjdCBoYXNobWFwICptYXAsCisJCQkgICB2b2lkICooKmdlbmVyYXRlKShjb25zdCB2b2lkICosIHNpemVfdCAqKSkKK3sKKwl3aGlsZSAoKnBhdGgpIHsKKwkJY29uc3QgY2hhciAqZW5kX29mX2NvbXBvbmVudCA9IHN0cmNocm51bChwYXRoLCAnLycpOworCQlzaXplX3QgbGVuID0gZW5kX29mX2NvbXBvbmVudCAtIHBhdGg7CisJCWNvbnN0IGNoYXIgKmMgPSBhbm9ueW1pemVfbWVtKG1hcCwgZ2VuZXJhdGUsIHBhdGgsICZsZW4pOworCQlzdHJidWZfYWRkKG91dCwgYywgbGVuKTsKKwkJcGF0aCA9IGVuZF9vZl9jb21wb25lbnQ7CisJCWlmICgqcGF0aCkKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsICpwYXRoKyspOworCX0KK30KKworLyogU2luY2UgaW50cHRyX3QgaXMgQzk5LCB3ZSBkbyBub3QgdXNlIGl0IGhlcmUgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgKm1hcmtfdG9fcHRyKHVpbnQzMl90IG1hcmspCit7CisJcmV0dXJuICgodWludDMyX3QgKilOVUxMKSArIG1hcms7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgcHRyX3RvX21hcmsodm9pZCAqIG1hcmspCit7CisJcmV0dXJuICh1aW50MzJfdCAqKW1hcmsgLSAodWludDMyX3QgKilOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0LCB1aW50MzJfdCBtYXJrKQoreworCWFkZF9kZWNvcmF0aW9uKCZpZG51bXMsIG9iamVjdCwgbWFya190b19wdHIobWFyaykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWFya19uZXh0X29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QpCit7CisJbWFya19vYmplY3Qob2JqZWN0LCArK2xhc3RfaWRudW0pOworfQorCitzdGF0aWMgaW50IGdldF9vYmplY3RfbWFyayhzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QpCit7CisJdm9pZCAqZGVjb3JhdGlvbiA9IGxvb2t1cF9kZWNvcmF0aW9uKCZpZG51bXMsIG9iamVjdCk7CisJaWYgKCFkZWNvcmF0aW9uKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcHRyX3RvX21hcmsoZGVjb3JhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcHJvZ3Jlc3Modm9pZCkKK3sKKwlzdGF0aWMgaW50IGNvdW50ZXIgPSAwOworCWlmICghcHJvZ3Jlc3MpCisJCXJldHVybjsKKwlpZiAoKCsrY291bnRlciAlIHByb2dyZXNzKSA9PSAwKQorCQlwcmludGYoInByb2dyZXNzICVkIG9iamVjdHNcbiIsIGNvdW50ZXIpOworfQorCisvKgorICogSWRlYWxseSB3ZSB3b3VsZCB3YW50IHNvbWUgdHJhbnNmb3JtYXRpb24gb2YgdGhlIGJsb2IgZGF0YSBoZXJlCisgKiB0aGF0IGlzIHVucmV2ZXJzaWJsZSwgYnV0IHdvdWxkIHN0aWxsIGJlIHRoZSBzYW1lIHNpemUgYW5kIGhhdmUKKyAqIHRoZSBzYW1lIGRhdGEgcmVsYXRpb25zaGlwIHRvIG90aGVyIGJsb2JzIChzbyB0aGF0IHdlIGdldCB0aGUgc2FtZQorICogZGVsdGEgYW5kIHBhY2tpbmcgYmVoYXZpb3IgYXMgdGhlIG9yaWdpbmFsKS4gQnV0IHRoZSBmaXJzdCBhbmQgbGFzdAorICogcmVxdWlyZW1lbnRzIHRoZXJlIGFyZSBwcm9iYWJseSBtdXR1YWxseSBleGNsdXNpdmUsIHNvIGxldCdzIHRha2UKKyAqIHRoZSBlYXN5IHdheSBvdXQgZm9yIG5vdywgYW5kIGp1c3QgZ2VuZXJhdGUgYXJiaXRyYXJ5IGNvbnRlbnQuCisgKgorICogVGhlcmUncyBubyBuZWVkIHRvIGNhY2hlIHRoaXMgcmVzdWx0IHdpdGggYW5vbnltaXplX21lbSwgc2luY2UKKyAqIHdlIGFscmVhZHkgaGFuZGxlIGJsb2IgY29udGVudCBjYWNoaW5nIHdpdGggbWFya3MuCisgKi8KK3N0YXRpYyBjaGFyICphbm9ueW1pemVfYmxvYih1bnNpZ25lZCBsb25nICpzaXplKQoreworCXN0YXRpYyBpbnQgY291bnRlcjsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZvdXQsICJhbm9ueW1vdXMgYmxvYiAlZCIsIGNvdW50ZXIrKyk7CisJKnNpemUgPSBvdXQubGVuOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZvdXQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBleHBvcnRfYmxvYihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmOworCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKwlpbnQgZWF0ZW47CisKKwlpZiAobm9fZGF0YSkKKwkJcmV0dXJuOworCisJaWYgKGlzX251bGxfc2hhMShzaGExKSkKKwkJcmV0dXJuOworCisJb2JqZWN0ID0gbG9va3VwX29iamVjdChzaGExKTsKKwlpZiAob2JqZWN0ICYmIG9iamVjdC0+ZmxhZ3MgJiBTSE9XTikKKwkJcmV0dXJuOworCisJaWYgKGFub255bWl6ZSkgeworCQlidWYgPSBhbm9ueW1pemVfYmxvYigmc2l6ZSk7CisJCW9iamVjdCA9IChzdHJ1Y3Qgb2JqZWN0ICopbG9va3VwX2Jsb2Ioc2hhMSk7CisJCWVhdGVuID0gMDsKKwl9IGVsc2UgeworCQlidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWJ1ZikKKwkJCWRpZSAoIkNvdWxkIG5vdCByZWFkIGJsb2IgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJCWlmIChjaGVja19zaGExX3NpZ25hdHVyZShzaGExLCBidWYsIHNpemUsIHR5cGVuYW1lKHR5cGUpKSA8IDApCisJCQlkaWUoInNoYTEgbWlzbWF0Y2ggaW4gYmxvYiAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcihzaGExLCB0eXBlLCBzaXplLCBidWYsICZlYXRlbik7CisJfQorCisJaWYgKCFvYmplY3QpCisJCWRpZSgiQ291bGQgbm90IHJlYWQgYmxvYiAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCW1hcmtfbmV4dF9vYmplY3Qob2JqZWN0KTsKKworCXByaW50ZigiYmxvYlxubWFyayA6JSJQUkl1MzIiXG5kYXRhICVsdVxuIiwgbGFzdF9pZG51bSwgc2l6ZSk7CisJaWYgKHNpemUgJiYgZndyaXRlKGJ1Ziwgc2l6ZSwgMSwgc3Rkb3V0KSAhPSAxKQorCQlkaWVfZXJybm8gKCJDb3VsZCBub3Qgd3JpdGUgYmxvYiAnJXMnIiwgc2hhMV90b19oZXgoc2hhMSkpOworCXByaW50ZigiXG4iKTsKKworCXNob3dfcHJvZ3Jlc3MoKTsKKworCW9iamVjdC0+ZmxhZ3MgfD0gU0hPV047CisJaWYgKCFlYXRlbikKKwkJZnJlZShidWYpOworfQorCitzdGF0aWMgaW50IGRlcHRoX2ZpcnN0KGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqYSA9ICooKGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICoqKWFfKTsKKwljb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqYiA9ICooKGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICoqKWJfKTsKKwljb25zdCBjaGFyICpuYW1lX2EsICpuYW1lX2I7CisJaW50IGxlbl9hLCBsZW5fYiwgbGVuOworCWludCBjbXA7CisKKwluYW1lX2EgPSBhLT5vbmUgPyBhLT5vbmUtPnBhdGggOiBhLT50d28tPnBhdGg7CisJbmFtZV9iID0gYi0+b25lID8gYi0+b25lLT5wYXRoIDogYi0+dHdvLT5wYXRoOworCisJbGVuX2EgPSBzdHJsZW4obmFtZV9hKTsKKwlsZW5fYiA9IHN0cmxlbihuYW1lX2IpOworCWxlbiA9IChsZW5fYSA8IGxlbl9iKSA/IGxlbl9hIDogbGVuX2I7CisKKwkvKiBzdHJjbXAgd2lsbCBzb3J0ICdkJyBiZWZvcmUgJ2QvZScsIHdlIHdhbnQgJ2QvZScgYmVmb3JlICdkJyAqLworCWNtcCA9IG1lbWNtcChuYW1lX2EsIG5hbWVfYiwgbGVuKTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCWNtcCA9IGxlbl9iIC0gbGVuX2E7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwkvKgorCSAqIE1vdmUgJ1InZW5hbWUgZW50cmllcyBsYXN0IHNvIHRoYXQgYWxsIHJlZmVyZW5jZXMgb2YgdGhlIGZpbGUKKwkgKiBhcHBlYXIgaW4gdGhlIG91dHB1dCBiZWZvcmUgaXQgaXMgcmVuYW1lZCAoZS5nLiwgd2hlbiBhIGZpbGUKKwkgKiB3YXMgY29waWVkIGFuZCByZW5hbWVkIGluIHRoZSBzYW1lIGNvbW1pdCkuCisJICovCisJcmV0dXJuIChhLT5zdGF0dXMgPT0gJ1InKSAtIChiLT5zdGF0dXMgPT0gJ1InKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfcGF0aF8xKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IG5lZWRfcXVvdGUgPSBxdW90ZV9jX3N0eWxlKHBhdGgsIE5VTEwsIE5VTEwsIDApOworCWlmIChuZWVkX3F1b3RlKQorCQlxdW90ZV9jX3N0eWxlKHBhdGgsIE5VTEwsIHN0ZG91dCwgMCk7CisJZWxzZSBpZiAoc3RyY2hyKHBhdGgsICcgJykpCisJCXByaW50ZigiXCIlc1wiIiwgcGF0aCk7CisJZWxzZQorCQlwcmludGYoIiVzIiwgcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkICphbm9ueW1pemVfcGF0aF9jb21wb25lbnQoY29uc3Qgdm9pZCAqcGF0aCwgc2l6ZV90ICpsZW4pCit7CisJc3RhdGljIGludCBjb3VudGVyOworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJm91dCwgInBhdGglZCIsIGNvdW50ZXIrKyk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm91dCwgbGVuKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCWlmICghYW5vbnltaXplKQorCQlwcmludF9wYXRoXzEocGF0aCk7CisJZWxzZSB7CisJCXN0YXRpYyBzdHJ1Y3QgaGFzaG1hcCBwYXRoczsKKwkJc3RhdGljIHN0cnVjdCBzdHJidWYgYW5vbiA9IFNUUkJVRl9JTklUOworCisJCWFub255bWl6ZV9wYXRoKCZhbm9uLCBwYXRoLCAmcGF0aHMsIGFub255bWl6ZV9wYXRoX2NvbXBvbmVudCk7CisJCXByaW50X3BhdGhfMShhbm9uLmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYW5vbik7CisJfQorfQorCitzdGF0aWMgdm9pZCAqZ2VuZXJhdGVfZmFrZV9zaGExKGNvbnN0IHZvaWQgKm9sZCwgc2l6ZV90ICpsZW4pCit7CisJc3RhdGljIHVpbnQzMl90IGNvdW50ZXIgPSAxOyAvKiBhdm9pZCBudWxsIHNoYTEgKi8KKwl1bnNpZ25lZCBjaGFyICpvdXQgPSB4Y2FsbG9jKDIwLCAxKTsKKwlwdXRfYmUzMihvdXQgKyAxNiwgY291bnRlcisrKTsKKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqYW5vbnltaXplX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0aWMgc3RydWN0IGhhc2htYXAgc2hhMXM7CisJc2l6ZV90IGxlbiA9IDIwOworCXJldHVybiBhbm9ueW1pemVfbWVtKCZzaGExcywgZ2VuZXJhdGVfZmFrZV9zaGExLCBzaGExLCAmbGVuKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19maWxlbW9kaWZ5KHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCSAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCB2b2lkICpkYXRhKQoreworCWludCBpOworCisJLyoKKwkgKiBIYW5kbGUgZmlsZXMgYmVsb3cgYSBkaXJlY3RvcnkgZmlyc3QsIGluIGNhc2UgdGhleSBhcmUgYWxsIGRlbGV0ZWQKKwkgKiBhbmQgdGhlIGRpcmVjdG9yeSBjaGFuZ2VzIHRvIGEgZmlsZSBvciBzeW1saW5rLgorCSAqLworCXFzb3J0KHEtPnF1ZXVlLCBxLT5uciwgc2l6ZW9mKHEtPnF1ZXVlWzBdKSwgZGVwdGhfZmlyc3QpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9zcGVjID0gcS0+cXVldWVbaV0tPm9uZTsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNwZWMgPSBxLT5xdWV1ZVtpXS0+dHdvOworCisJCXN3aXRjaCAocS0+cXVldWVbaV0tPnN0YXR1cykgeworCQljYXNlIERJRkZfU1RBVFVTX0RFTEVURUQ6CisJCQlwcmludGYoIkQgIik7CisJCQlwcmludF9wYXRoKHNwZWMtPnBhdGgpOworCQkJcHV0Y2hhcignXG4nKTsKKwkJCWJyZWFrOworCisJCWNhc2UgRElGRl9TVEFUVVNfQ09QSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX1JFTkFNRUQ6CisJCQlwcmludGYoIiVjICIsIHEtPnF1ZXVlW2ldLT5zdGF0dXMpOworCQkJcHJpbnRfcGF0aChvc3BlYy0+cGF0aCk7CisJCQlwdXRjaGFyKCcgJyk7CisJCQlwcmludF9wYXRoKHNwZWMtPnBhdGgpOworCQkJcHV0Y2hhcignXG4nKTsKKworCQkJaWYgKCFoYXNoY21wKG9zcGVjLT5zaGExLCBzcGVjLT5zaGExKSAmJgorCQkJICAgIG9zcGVjLT5tb2RlID09IHNwZWMtPm1vZGUpCisJCQkJYnJlYWs7CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCisJCWNhc2UgRElGRl9TVEFUVVNfVFlQRV9DSEFOR0VEOgorCQljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX0FEREVEOgorCQkJLyoKKwkJCSAqIExpbmtzIHJlZmVyIHRvIG9iamVjdHMgaW4gYW5vdGhlciByZXBvc2l0b3JpZXM7CisJCQkgKiBvdXRwdXQgdGhlIFNIQS0xIHZlcmJhdGltLgorCQkJICovCisJCQlpZiAobm9fZGF0YSB8fCBTX0lTR0lUTElOSyhzcGVjLT5tb2RlKSkKKwkJCQlwcmludGYoIk0gJTA2byAlcyAiLCBzcGVjLT5tb2RlLAorCQkJCSAgICAgICBzaGExX3RvX2hleChhbm9ueW1pemUgPworCQkJCQkJICAgYW5vbnltaXplX3NoYTEoc3BlYy0+c2hhMSkgOgorCQkJCQkJICAgc3BlYy0+c2hhMSkpOworCQkJZWxzZSB7CisJCQkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gbG9va3VwX29iamVjdChzcGVjLT5zaGExKTsKKwkJCQlwcmludGYoIk0gJTA2byA6JWQgIiwgc3BlYy0+bW9kZSwKKwkJCQkgICAgICAgZ2V0X29iamVjdF9tYXJrKG9iamVjdCkpOworCQkJfQorCQkJcHJpbnRfcGF0aChzcGVjLT5wYXRoKTsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZGllKCJVbmV4cGVjdGVkIGNvbXBhcmlzb24gc3RhdHVzICclYycgZm9yICVzLCAlcyIsCisJCQkJcS0+cXVldWVbaV0tPnN0YXR1cywKKwkJCQlvc3BlYy0+cGF0aCA/IG9zcGVjLT5wYXRoIDogIm5vbmUiLAorCQkJCXNwZWMtPnBhdGggPyBzcGVjLT5wYXRoIDogIm5vbmUiKTsKKwkJfQorCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfZW5jb2RpbmcoY29uc3QgY2hhciAqYmVnaW4sIGNvbnN0IGNoYXIgKmVuZCkKK3sKKwljb25zdCBjaGFyICpuZWVkbGUgPSAiXG5lbmNvZGluZyAiOworCWNoYXIgKmJvbCwgKmVvbDsKKworCWJvbCA9IG1lbW1lbShiZWdpbiwgZW5kID8gZW5kIC0gYmVnaW4gOiBzdHJsZW4oYmVnaW4pLAorCQkgICAgIG5lZWRsZSwgc3RybGVuKG5lZWRsZSkpOworCWlmICghYm9sKQorCQlyZXR1cm4gZ2l0X2NvbW1pdF9lbmNvZGluZzsKKwlib2wgKz0gc3RybGVuKG5lZWRsZSk7CisJZW9sID0gc3RyY2hybnVsKGJvbCwgJ1xuJyk7CisJKmVvbCA9ICdcMCc7CisJcmV0dXJuIGJvbDsKK30KKworc3RhdGljIHZvaWQgKmFub255bWl6ZV9yZWZfY29tcG9uZW50KGNvbnN0IHZvaWQgKm9sZCwgc2l6ZV90ICpsZW4pCit7CisJc3RhdGljIGludCBjb3VudGVyOworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJm91dCwgInJlZiVkIiwgY291bnRlcisrKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmb3V0LCBsZW4pOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYW5vbnltaXplX3JlZm5hbWUoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwkvKgorCSAqIElmIGFueSBvZiB0aGVzZSBwcmVmaXhlcyBpcyBmb3VuZCwgd2Ugd2lsbCBsZWF2ZSBpdCBpbnRhY3QKKwkgKiBzbyB0aGF0IHRhZ3MgcmVtYWluIHRhZ3MgYW5kIHNvIGZvcnRoLgorCSAqLworCXN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXhlc1tdID0geworCQkicmVmcy9oZWFkcy8iLAorCQkicmVmcy90YWdzLyIsCisJCSJyZWZzL3JlbW90ZXMvIiwKKwkJInJlZnMvIgorCX07CisJc3RhdGljIHN0cnVjdCBoYXNobWFwIHJlZnM7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYW5vbiA9IFNUUkJVRl9JTklUOworCWludCBpOworCisJLyoKKwkgKiBXZSBhbHNvIGxlYXZlICJtYXN0ZXIiIGFzIGEgc3BlY2lhbCBjYXNlLCBzaW5jZSBpdCBkb2VzIG5vdCByZXZlYWwKKwkgKiBhbnl0aGluZyBpbnRlcmVzdGluZy4KKwkgKi8KKwlpZiAoIXN0cmNtcChyZWZuYW1lLCAicmVmcy9oZWFkcy9tYXN0ZXIiKSkKKwkJcmV0dXJuIHJlZm5hbWU7CisKKwlzdHJidWZfcmVzZXQoJmFub24pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByZWZpeGVzKTsgaSsrKSB7CisJCWlmIChza2lwX3ByZWZpeChyZWZuYW1lLCBwcmVmaXhlc1tpXSwgJnJlZm5hbWUpKSB7CisJCQlzdHJidWZfYWRkc3RyKCZhbm9uLCBwcmVmaXhlc1tpXSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWFub255bWl6ZV9wYXRoKCZhbm9uLCByZWZuYW1lLCAmcmVmcywgYW5vbnltaXplX3JlZl9jb21wb25lbnQpOworCXJldHVybiBhbm9uLmJ1ZjsKK30KKworLyoKKyAqIFdlIGRvIG5vdCBldmVuIGJvdGhlciB0byBjYWNoZSBjb21taXQgbWVzc2FnZXMsIGFzIHRoZXkgYXJlIHVubGlrZWx5CisgKiB0byBiZSByZXBlYXRlZCB2ZXJiYXRpbSwgYW5kIGl0IGlzIG5vdCB0aGF0IGludGVyZXN0aW5nIHdoZW4gdGhleSBhcmUuCisgKi8KK3N0YXRpYyBjaGFyICphbm9ueW1pemVfY29tbWl0X21lc3NhZ2UoY29uc3QgY2hhciAqb2xkKQoreworCXN0YXRpYyBpbnQgY291bnRlcjsKKwlyZXR1cm4geHN0cmZtdCgic3ViamVjdCAlZFxuXG5ib2R5XG4iLCBjb3VudGVyKyspOworfQorCitzdGF0aWMgc3RydWN0IGhhc2htYXAgaWRlbnRzOworc3RhdGljIHZvaWQgKmFub255bWl6ZV9pZGVudChjb25zdCB2b2lkICpvbGQsIHNpemVfdCAqbGVuKQoreworCXN0YXRpYyBpbnQgY291bnRlcjsKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZvdXQsICJVc2VyICVkIDx1c2VyJWRAZXhhbXBsZS5jb20+IiwgY291bnRlciwgY291bnRlcik7CisJY291bnRlcisrOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZvdXQsIGxlbik7Cit9CisKKy8qCisgKiBPdXIgc3RyYXRlZ3kgaGVyZSBpcyB0byBhbm9ueW1pemUgdGhlIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMsCisgKiBidXQga2VlcCB0aW1lc3RhbXBzIGludGFjdCwgYXMgdGhleSBpbmZsdWVuY2UgdGhpbmdzIGxpa2UgdHJhdmVyc2FsCisgKiBvcmRlciAoYW5kIGJ5IHRoZW1zZWx2ZXMgc2hvdWxkIG5vdCBiZSB0b28gcmV2ZWFsaW5nKS4KKyAqLworc3RhdGljIHZvaWQgYW5vbnltaXplX2lkZW50X2xpbmUoY29uc3QgY2hhciAqKmJlZywgY29uc3QgY2hhciAqKmVuZCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZmZXJzW10gPSB7IFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCB9OworCXN0YXRpYyB1bnNpZ25lZCB3aGljaF9idWZmZXI7CisKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQ7CisJc3RydWN0IGlkZW50X3NwbGl0IHNwbGl0OworCWNvbnN0IGNoYXIgKmVuZF9vZl9oZWFkZXI7CisKKwlvdXQgPSAmYnVmZmVyc1t3aGljaF9idWZmZXIrK107CisJd2hpY2hfYnVmZmVyICU9IEFSUkFZX1NJWkUoYnVmZmVycyk7CisJc3RyYnVmX3Jlc2V0KG91dCk7CisKKwkvKiBza2lwICJjb21taXR0ZXIiLCAiYXV0aG9yIiwgInRhZ2dlciIsIGV0YyAqLworCWVuZF9vZl9oZWFkZXIgPSBzdHJjaHIoKmJlZywgJyAnKTsKKwlpZiAoIWVuZF9vZl9oZWFkZXIpCisJCWRpZSgiQlVHOiBtYWxmb3JtZWQgbGluZSBmZWQgdG8gYW5vbnltaXplX2lkZW50X2xpbmU6ICUuKnMiLAorCQkgICAgKGludCkoKmVuZCAtICpiZWcpLCAqYmVnKTsKKwllbmRfb2ZfaGVhZGVyKys7CisJc3RyYnVmX2FkZChvdXQsICpiZWcsIGVuZF9vZl9oZWFkZXIgLSAqYmVnKTsKKworCWlmICghc3BsaXRfaWRlbnRfbGluZSgmc3BsaXQsIGVuZF9vZl9oZWFkZXIsICplbmQgLSBlbmRfb2ZfaGVhZGVyKSAmJgorCSAgICBzcGxpdC5kYXRlX2JlZ2luKSB7CisJCWNvbnN0IGNoYXIgKmlkZW50OworCQlzaXplX3QgbGVuOworCisJCWxlbiA9IHNwbGl0Lm1haWxfZW5kIC0gc3BsaXQubmFtZV9iZWdpbjsKKwkJaWRlbnQgPSBhbm9ueW1pemVfbWVtKCZpZGVudHMsIGFub255bWl6ZV9pZGVudCwKKwkJCQkgICAgICBzcGxpdC5uYW1lX2JlZ2luLCAmbGVuKTsKKwkJc3RyYnVmX2FkZChvdXQsIGlkZW50LCBsZW4pOworCQlzdHJidWZfYWRkY2gob3V0LCAnICcpOworCQlzdHJidWZfYWRkKG91dCwgc3BsaXQuZGF0ZV9iZWdpbiwgc3BsaXQudHpfZW5kIC0gc3BsaXQuZGF0ZV9iZWdpbik7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cihvdXQsICJNYWxmb3JtZWQgSWRlbnQgPG1hbGZvcm1lZEBleGFtcGxlLmNvbT4gMCAtMDAwMCIpOworCX0KKworCSpiZWcgPSBvdXQtPmJ1ZjsKKwkqZW5kID0gb3V0LT5idWYgKyBvdXQtPmxlbjsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCWludCBzYXZlZF9vdXRwdXRfZm9ybWF0ID0gcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQ7CisJY29uc3QgY2hhciAqY29tbWl0X2J1ZmZlcjsKKwljb25zdCBjaGFyICphdXRob3IsICphdXRob3JfZW5kLCAqY29tbWl0dGVyLCAqY29tbWl0dGVyX2VuZDsKKwljb25zdCBjaGFyICplbmNvZGluZywgKm1lc3NhZ2U7CisJY2hhciAqcmVlbmNvZGVkID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJY29uc3QgY2hhciAqcmVmbmFtZTsKKwlpbnQgaTsKKworCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisKKwlwYXJzZV9jb21taXRfb3JfZGllKGNvbW1pdCk7CisJY29tbWl0X2J1ZmZlciA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCk7CisJYXV0aG9yID0gc3Ryc3RyKGNvbW1pdF9idWZmZXIsICJcbmF1dGhvciAiKTsKKwlpZiAoIWF1dGhvcikKKwkJZGllICgiQ291bGQgbm90IGZpbmQgYXV0aG9yIGluIGNvbW1pdCAlcyIsCisJCSAgICAgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCWF1dGhvcisrOworCWF1dGhvcl9lbmQgPSBzdHJjaHJudWwoYXV0aG9yLCAnXG4nKTsKKwljb21taXR0ZXIgPSBzdHJzdHIoYXV0aG9yX2VuZCwgIlxuY29tbWl0dGVyICIpOworCWlmICghY29tbWl0dGVyKQorCQlkaWUgKCJDb3VsZCBub3QgZmluZCBjb21taXR0ZXIgaW4gY29tbWl0ICVzIiwKKwkJICAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJY29tbWl0dGVyKys7CisJY29tbWl0dGVyX2VuZCA9IHN0cmNocm51bChjb21taXR0ZXIsICdcbicpOworCW1lc3NhZ2UgPSBzdHJzdHIoY29tbWl0dGVyX2VuZCwgIlxuXG4iKTsKKwllbmNvZGluZyA9IGZpbmRfZW5jb2RpbmcoY29tbWl0dGVyX2VuZCwgbWVzc2FnZSk7CisJaWYgKG1lc3NhZ2UpCisJCW1lc3NhZ2UgKz0gMjsKKworCWlmIChjb21taXQtPnBhcmVudHMgJiYKKwkgICAgZ2V0X29iamVjdF9tYXJrKCZjb21taXQtPnBhcmVudHMtPml0ZW0tPm9iamVjdCkgIT0gMCAmJgorCSAgICAhZnVsbF90cmVlKSB7CisJCXBhcnNlX2NvbW1pdF9vcl9kaWUoY29tbWl0LT5wYXJlbnRzLT5pdGVtKTsKKwkJZGlmZl90cmVlX3NoYTEoY29tbWl0LT5wYXJlbnRzLT5pdGVtLT50cmVlLT5vYmplY3Quc2hhMSwKKwkJCSAgICAgICBjb21taXQtPnRyZWUtPm9iamVjdC5zaGExLCAiIiwgJnJldi0+ZGlmZm9wdCk7CisJfQorCWVsc2UKKwkJZGlmZl9yb290X3RyZWVfc2hhMShjb21taXQtPnRyZWUtPm9iamVjdC5zaGExLAorCQkJCSAgICAiIiwgJnJldi0+ZGlmZm9wdCk7CisKKwkvKiBFeHBvcnQgdGhlIHJlZmVyZW5jZWQgYmxvYnMsIGFuZCByZW1lbWJlciB0aGUgbWFya3MuICovCisJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7IGkrKykKKwkJaWYgKCFTX0lTR0lUTElOSyhkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldLT50d28tPm1vZGUpKQorCQkJZXhwb3J0X2Jsb2IoZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXS0+dHdvLT5zaGExKTsKKworCXJlZm5hbWUgPSBjb21taXQtPnV0aWw7CisJaWYgKGFub255bWl6ZSkgeworCQlyZWZuYW1lID0gYW5vbnltaXplX3JlZm5hbWUocmVmbmFtZSk7CisJCWFub255bWl6ZV9pZGVudF9saW5lKCZjb21taXR0ZXIsICZjb21taXR0ZXJfZW5kKTsKKwkJYW5vbnltaXplX2lkZW50X2xpbmUoJmF1dGhvciwgJmF1dGhvcl9lbmQpOworCX0KKworCW1hcmtfbmV4dF9vYmplY3QoJmNvbW1pdC0+b2JqZWN0KTsKKwlpZiAoYW5vbnltaXplKQorCQlyZWVuY29kZWQgPSBhbm9ueW1pemVfY29tbWl0X21lc3NhZ2UobWVzc2FnZSk7CisJZWxzZSBpZiAoIWlzX2VuY29kaW5nX3V0ZjgoZW5jb2RpbmcpKQorCQlyZWVuY29kZWQgPSByZWVuY29kZV9zdHJpbmcobWVzc2FnZSwgIlVURi04IiwgZW5jb2RpbmcpOworCWlmICghY29tbWl0LT5wYXJlbnRzKQorCQlwcmludGYoInJlc2V0ICVzXG4iLCByZWZuYW1lKTsKKwlwcmludGYoImNvbW1pdCAlc1xubWFyayA6JSJQUkl1MzIiXG4lLipzXG4lLipzXG5kYXRhICV1XG4lcyIsCisJICAgICAgIHJlZm5hbWUsIGxhc3RfaWRudW0sCisJICAgICAgIChpbnQpKGF1dGhvcl9lbmQgLSBhdXRob3IpLCBhdXRob3IsCisJICAgICAgIChpbnQpKGNvbW1pdHRlcl9lbmQgLSBjb21taXR0ZXIpLCBjb21taXR0ZXIsCisJICAgICAgICh1bnNpZ25lZCkocmVlbmNvZGVkCisJCQkgID8gc3RybGVuKHJlZW5jb2RlZCkgOiBtZXNzYWdlCisJCQkgID8gc3RybGVuKG1lc3NhZ2UpIDogMCksCisJICAgICAgIHJlZW5jb2RlZCA/IHJlZW5jb2RlZCA6IG1lc3NhZ2UgPyBtZXNzYWdlIDogIiIpOworCWZyZWUocmVlbmNvZGVkKTsKKwl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgY29tbWl0X2J1ZmZlcik7CisKKwlmb3IgKGkgPSAwLCBwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlpbnQgbWFyayA9IGdldF9vYmplY3RfbWFyaygmcC0+aXRlbS0+b2JqZWN0KTsKKwkJaWYgKCFtYXJrKQorCQkJY29udGludWU7CisJCWlmIChpID09IDApCisJCQlwcmludGYoImZyb20gOiVkXG4iLCBtYXJrKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJtZXJnZSA6JWRcbiIsIG1hcmspOworCQlpKys7CisJfQorCisJaWYgKGZ1bGxfdHJlZSkKKwkJcHJpbnRmKCJkZWxldGVhbGxcbiIpOworCWxvZ190cmVlX2RpZmZfZmx1c2gocmV2KTsKKwlyZXYtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IHNhdmVkX291dHB1dF9mb3JtYXQ7CisKKwlwcmludGYoIlxuIik7CisKKwlzaG93X3Byb2dyZXNzKCk7Cit9CisKK3N0YXRpYyB2b2lkICphbm9ueW1pemVfdGFnKGNvbnN0IHZvaWQgKm9sZCwgc2l6ZV90ICpsZW4pCit7CisJc3RhdGljIGludCBjb3VudGVyOworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJc3RyYnVmX2FkZGYoJm91dCwgInRhZyBtZXNzYWdlICVkIiwgY291bnRlcisrKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmb3V0LCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfdGFpbChzdHJ1Y3Qgb2JqZWN0X2FycmF5ICpjb21taXRzLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXdoaWxlIChjb21taXRzLT5ucikgeworCQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKWNvbW1pdHMtPm9iamVjdHNbY29tbWl0cy0+bnIgLSAxXS5pdGVtOworCQlpZiAoaGFzX3Vuc2hvd25fcGFyZW50KGNvbW1pdCkpCisJCQlyZXR1cm47CisJCWhhbmRsZV9jb21taXQoY29tbWl0LCByZXZzKTsKKwkJY29tbWl0cy0+bnItLTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV90YWcoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHRhZyAqdGFnKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmOworCWNvbnN0IGNoYXIgKnRhZ2dlciwgKnRhZ2dlcl9lbmQsICptZXNzYWdlOworCXNpemVfdCBtZXNzYWdlX3NpemUgPSAwOworCXN0cnVjdCBvYmplY3QgKnRhZ2dlZDsKKwlpbnQgdGFnZ2VkX21hcms7CisJc3RydWN0IGNvbW1pdCAqcDsKKworCS8qIFRyZWVzIGhhdmUgbm8gaWRlbnRpZmllciBpbiBmYXN0LWV4cG9ydCBvdXRwdXQsIHRodXMgd2UgaGF2ZSBubyB3YXkKKwkgKiB0byBvdXRwdXQgdGFncyBvZiB0cmVlcywgdGFncyBvZiB0YWdzIG9mIHRyZWVzLCBldGMuICBTaW1wbHkgb21pdAorCSAqIHN1Y2ggdGFncy4KKwkgKi8KKwl0YWdnZWQgPSB0YWctPnRhZ2dlZDsKKwl3aGlsZSAodGFnZ2VkLT50eXBlID09IE9CSl9UQUcpIHsKKwkJdGFnZ2VkID0gKChzdHJ1Y3QgdGFnICopdGFnZ2VkKS0+dGFnZ2VkOworCX0KKwlpZiAodGFnZ2VkLT50eXBlID09IE9CSl9UUkVFKSB7CisJCXdhcm5pbmcoIk9taXR0aW5nIHRhZyAlcyxcbnNpbmNlIHRhZ3Mgb2YgdHJlZXMgKG9yIHRhZ3Mgb2YgdGFncyBvZiB0cmVlcywgZXRjLikgYXJlIG5vdCBzdXBwb3J0ZWQuIiwKKwkJCXNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwkJcmV0dXJuOworCX0KKworCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHRhZy0+b2JqZWN0LnNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYpCisJCWRpZSAoIkNvdWxkIG5vdCByZWFkIHRhZyAlcyIsIHNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwltZXNzYWdlID0gbWVtbWVtKGJ1Ziwgc2l6ZSwgIlxuXG4iLCAyKTsKKwlpZiAobWVzc2FnZSkgeworCQltZXNzYWdlICs9IDI7CisJCW1lc3NhZ2Vfc2l6ZSA9IHN0cmxlbihtZXNzYWdlKTsKKwl9CisJdGFnZ2VyID0gbWVtbWVtKGJ1ZiwgbWVzc2FnZSA/IG1lc3NhZ2UgLSBidWYgOiBzaXplLCAiXG50YWdnZXIgIiwgOCk7CisJaWYgKCF0YWdnZXIpIHsKKwkJaWYgKGZha2VfbWlzc2luZ190YWdnZXIpCisJCQl0YWdnZXIgPSAidGFnZ2VyIFVuc3BlY2lmaWVkIFRhZ2dlciAiCisJCQkJIjx1bnNwZWNpZmllZC10YWdnZXI+IDAgKzAwMDAiOworCQllbHNlCisJCQl0YWdnZXIgPSAiIjsKKwkJdGFnZ2VyX2VuZCA9IHRhZ2dlciArIHN0cmxlbih0YWdnZXIpOworCX0gZWxzZSB7CisJCXRhZ2dlcisrOworCQl0YWdnZXJfZW5kID0gc3RyY2hybnVsKHRhZ2dlciwgJ1xuJyk7CisJCWlmIChhbm9ueW1pemUpCisJCQlhbm9ueW1pemVfaWRlbnRfbGluZSgmdGFnZ2VyLCAmdGFnZ2VyX2VuZCk7CisJfQorCisJaWYgKGFub255bWl6ZSkgeworCQluYW1lID0gYW5vbnltaXplX3JlZm5hbWUobmFtZSk7CisJCWlmIChtZXNzYWdlKSB7CisJCQlzdGF0aWMgc3RydWN0IGhhc2htYXAgdGFnczsKKwkJCW1lc3NhZ2UgPSBhbm9ueW1pemVfbWVtKCZ0YWdzLCBhbm9ueW1pemVfdGFnLAorCQkJCQkJbWVzc2FnZSwgJm1lc3NhZ2Vfc2l6ZSk7CisJCX0KKwl9CisKKwkvKiBoYW5kbGUgc2lnbmVkIHRhZ3MgKi8KKwlpZiAobWVzc2FnZSkgeworCQljb25zdCBjaGFyICpzaWduYXR1cmUgPSBzdHJzdHIobWVzc2FnZSwKKwkJCQkJICAgICAgICJcbi0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXG4iKTsKKwkJaWYgKHNpZ25hdHVyZSkKKwkJCXN3aXRjaChzaWduZWRfdGFnX21vZGUpIHsKKwkJCWNhc2UgQUJPUlQ6CisJCQkJZGllICgiRW5jb3VudGVyZWQgc2lnbmVkIHRhZyAlczsgdXNlICIKKwkJCQkgICAgICItLXNpZ25lZC10YWdzPTxtb2RlPiB0byBoYW5kbGUgaXQuIiwKKwkJCQkgICAgIHNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwkJCWNhc2UgV0FSTjoKKwkJCQl3YXJuaW5nICgiRXhwb3J0aW5nIHNpZ25lZCB0YWcgJXMiLAorCQkJCQkgc2hhMV90b19oZXgodGFnLT5vYmplY3Quc2hhMSkpOworCQkJCS8qIGZhbGx0aHJ1ICovCisJCQljYXNlIFZFUkJBVElNOgorCQkJCWJyZWFrOworCQkJY2FzZSBXQVJOX1NUUklQOgorCQkJCXdhcm5pbmcgKCJTdHJpcHBpbmcgc2lnbmF0dXJlIGZyb20gdGFnICVzIiwKKwkJCQkJIHNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwkJCQkvKiBmYWxsdGhydSAqLworCQkJY2FzZSBTVFJJUDoKKwkJCQltZXNzYWdlX3NpemUgPSBzaWduYXR1cmUgKyAxIC0gbWVzc2FnZTsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisKKwkvKiBoYW5kbGUgdGFnLT50YWdnZWQgaGF2aW5nIGJlZW4gZmlsdGVyZWQgb3V0IGR1ZSB0byBwYXRocyBzcGVjaWZpZWQgKi8KKwl0YWdnZWQgPSB0YWctPnRhZ2dlZDsKKwl0YWdnZWRfbWFyayA9IGdldF9vYmplY3RfbWFyayh0YWdnZWQpOworCWlmICghdGFnZ2VkX21hcmspIHsKKwkJc3dpdGNoKHRhZ19vZl9maWx0ZXJlZF9tb2RlKSB7CisJCWNhc2UgQUJPUlQ6CisJCQlkaWUgKCJUYWcgJXMgdGFncyB1bmV4cG9ydGVkIG9iamVjdDsgdXNlICIKKwkJCSAgICAgIi0tdGFnLW9mLWZpbHRlcmVkLW9iamVjdD08bW9kZT4gdG8gaGFuZGxlIGl0LiIsCisJCQkgICAgIHNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwkJY2FzZSBEUk9QOgorCQkJLyogSWdub3JlIHRoaXMgdGFnIGFsdG9nZXRoZXIgKi8KKwkJCXJldHVybjsKKwkJY2FzZSBSRVdSSVRFOgorCQkJaWYgKHRhZ2dlZC0+dHlwZSAhPSBPQkpfQ09NTUlUKSB7CisJCQkJZGllICgiVGFnICVzIHRhZ3MgdW5leHBvcnRlZCAlcyEiLAorCQkJCSAgICAgc2hhMV90b19oZXgodGFnLT5vYmplY3Quc2hhMSksCisJCQkJICAgICB0eXBlbmFtZSh0YWdnZWQtPnR5cGUpKTsKKwkJCX0KKwkJCXAgPSAoc3RydWN0IGNvbW1pdCAqKXRhZ2dlZDsKKwkJCWZvciAoOzspIHsKKwkJCQlpZiAocC0+cGFyZW50cyAmJiBwLT5wYXJlbnRzLT5uZXh0KQorCQkJCQlicmVhazsKKwkJCQlpZiAocC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCQkJYnJlYWs7CisJCQkJaWYgKCEocC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpKQorCQkJCQlicmVhazsKKwkJCQlpZiAoIXAtPnBhcmVudHMpCisJCQkJCWRpZSAoIkNhbid0IGZpbmQgcmVwbGFjZW1lbnQgY29tbWl0IGZvciB0YWcgJXNcbiIsCisJCQkJCSAgICAgc2hhMV90b19oZXgodGFnLT5vYmplY3Quc2hhMSkpOworCQkJCXAgPSBwLT5wYXJlbnRzLT5pdGVtOworCQkJfQorCQkJdGFnZ2VkX21hcmsgPSBnZXRfb2JqZWN0X21hcmsoJnAtPm9iamVjdCk7CisJCX0KKwl9CisKKwlpZiAoc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvdGFncy8iKSkKKwkJbmFtZSArPSAxMDsKKwlwcmludGYoInRhZyAlc1xuZnJvbSA6JWRcbiUuKnMlc2RhdGEgJWRcbiUuKnNcbiIsCisJICAgICAgIG5hbWUsIHRhZ2dlZF9tYXJrLAorCSAgICAgICAoaW50KSh0YWdnZXJfZW5kIC0gdGFnZ2VyKSwgdGFnZ2VyLAorCSAgICAgICB0YWdnZXIgPT0gdGFnZ2VyX2VuZCA/ICIiIDogIlxuIiwKKwkgICAgICAgKGludCltZXNzYWdlX3NpemUsIChpbnQpbWVzc2FnZV9zaXplLCBtZXNzYWdlID8gbWVzc2FnZSA6ICIiKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9jb21taXQoc3RydWN0IHJldl9jbWRsaW5lX2VudHJ5ICplLCBjaGFyICpmdWxsX25hbWUpCit7CisJc3dpdGNoIChlLT5pdGVtLT50eXBlKSB7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlyZXR1cm4gKHN0cnVjdCBjb21taXQgKillLT5pdGVtOworCWNhc2UgT0JKX1RBRzogeworCQlzdHJ1Y3QgdGFnICp0YWcgPSAoc3RydWN0IHRhZyAqKWUtPml0ZW07CisKKwkJLyogaGFuZGxlIG5lc3RlZCB0YWdzICovCisJCXdoaWxlICh0YWcgJiYgdGFnLT5vYmplY3QudHlwZSA9PSBPQkpfVEFHKSB7CisJCQlwYXJzZV9vYmplY3QodGFnLT5vYmplY3Quc2hhMSk7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmV4dHJhX3JlZnMsIGZ1bGxfbmFtZSktPnV0aWwgPSB0YWc7CisJCQl0YWcgPSAoc3RydWN0IHRhZyAqKXRhZy0+dGFnZ2VkOworCQl9CisJCWlmICghdGFnKQorCQkJZGllKCJUYWcgJXMgcG9pbnRzIG5vd2hlcmU/IiwgZS0+bmFtZSk7CisJCXJldHVybiAoc3RydWN0IGNvbW1pdCAqKXRhZzsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgZ2V0X3RhZ3NfYW5kX2R1cGxpY2F0ZXMoc3RydWN0IHJldl9jbWRsaW5lX2luZm8gKmluZm8pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmV2X2NtZGxpbmVfZW50cnkgKmUgPSBpbmZvLT5yZXYgKyBpOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCWNoYXIgKmZ1bGxfbmFtZTsKKworCQlpZiAoZS0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisKKwkJaWYgKGR3aW1fcmVmKGUtPm5hbWUsIHN0cmxlbihlLT5uYW1lKSwgc2hhMSwgJmZ1bGxfbmFtZSkgIT0gMSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChyZWZzcGVjcykgeworCQkJY2hhciAqcHJpdmF0ZTsKKwkJCXByaXZhdGUgPSBhcHBseV9yZWZzcGVjcyhyZWZzcGVjcywgcmVmc3BlY3NfbnIsIGZ1bGxfbmFtZSk7CisJCQlpZiAocHJpdmF0ZSkgeworCQkJCWZyZWUoZnVsbF9uYW1lKTsKKwkJCQlmdWxsX25hbWUgPSBwcml2YXRlOworCQkJfQorCQl9CisKKwkJY29tbWl0ID0gZ2V0X2NvbW1pdChlLCBmdWxsX25hbWUpOworCQlpZiAoIWNvbW1pdCkgeworCQkJd2FybmluZygiJXM6IFVuZXhwZWN0ZWQgb2JqZWN0IG9mIHR5cGUgJXMsIHNraXBwaW5nLiIsCisJCQkJZS0+bmFtZSwKKwkJCQl0eXBlbmFtZShlLT5pdGVtLT50eXBlKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXN3aXRjaChjb21taXQtPm9iamVjdC50eXBlKSB7CisJCWNhc2UgT0JKX0NPTU1JVDoKKwkJCWJyZWFrOworCQljYXNlIE9CSl9CTE9COgorCQkJZXhwb3J0X2Jsb2IoY29tbWl0LT5vYmplY3Quc2hhMSk7CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDogLyogT0JKX1RBRyAobmVzdGVkIHRhZ3MpIGlzIGFscmVhZHkgaGFuZGxlZCAqLworCQkJd2FybmluZygiVGFnIHBvaW50cyB0byBvYmplY3Qgb2YgdW5leHBlY3RlZCB0eXBlICVzLCBza2lwcGluZy4iLAorCQkJCXR5cGVuYW1lKGNvbW1pdC0+b2JqZWN0LnR5cGUpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogVGhpcyByZWYgd2lsbCBub3QgYmUgdXBkYXRlZCB0aHJvdWdoIGEgY29tbWl0LCBsZXRzIG1ha2UKKwkJICogc3VyZSBpdCBnZXRzIHByb3Blcmx5IHVwZGF0ZWQgZXZlbnR1YWxseS4KKwkJICovCisJCWlmIChjb21taXQtPnV0aWwgfHwgY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTSE9XTikKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmZXh0cmFfcmVmcywgZnVsbF9uYW1lKS0+dXRpbCA9IGNvbW1pdDsKKwkJaWYgKCFjb21taXQtPnV0aWwpCisJCQljb21taXQtPnV0aWwgPSBmdWxsX25hbWU7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfdGFnc19hbmRfZHVwbGljYXRlcyh2b2lkKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IGV4dHJhX3JlZnMubnIgLSAxOyBpID49IDA7IGktLSkgeworCQljb25zdCBjaGFyICpuYW1lID0gZXh0cmFfcmVmcy5pdGVtc1tpXS5zdHJpbmc7CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IGV4dHJhX3JlZnMuaXRlbXNbaV0udXRpbDsKKwkJc3dpdGNoIChvYmplY3QtPnR5cGUpIHsKKwkJY2FzZSBPQkpfVEFHOgorCQkJaGFuZGxlX3RhZyhuYW1lLCAoc3RydWN0IHRhZyAqKW9iamVjdCk7CisJCQlicmVhazsKKwkJY2FzZSBPQkpfQ09NTUlUOgorCQkJaWYgKGFub255bWl6ZSkKKwkJCQluYW1lID0gYW5vbnltaXplX3JlZm5hbWUobmFtZSk7CisJCQkvKiBjcmVhdGUgcmVmcyBwb2ludGluZyB0byBhbHJlYWR5IHNlZW4gY29tbWl0cyAqLworCQkJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvYmplY3Q7CisJCQlwcmludGYoInJlc2V0ICVzXG5mcm9tIDolZFxuXG4iLCBuYW1lLAorCQkJICAgICAgIGdldF9vYmplY3RfbWFyaygmY29tbWl0LT5vYmplY3QpKTsKKwkJCXNob3dfcHJvZ3Jlc3MoKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBleHBvcnRfbWFya3MoY2hhciAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1aW50MzJfdCBtYXJrOworCXN0cnVjdCBvYmplY3RfZGVjb3JhdGlvbiAqZGVjbyA9IGlkbnVtcy5oYXNoOworCUZJTEUgKmY7CisJaW50IGUgPSAwOworCisJZiA9IGZvcGVuKGZpbGUsICJ3Iik7CisJaWYgKCFmKQorCQlkaWVfZXJybm8oIlVuYWJsZSB0byBvcGVuIG1hcmtzIGZpbGUgJXMgZm9yIHdyaXRpbmcuIiwgZmlsZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaWRudW1zLnNpemU7IGkrKykgeworCQlpZiAoZGVjby0+YmFzZSAmJiBkZWNvLT5iYXNlLT50eXBlID09IDEpIHsKKwkJCW1hcmsgPSBwdHJfdG9fbWFyayhkZWNvLT5kZWNvcmF0aW9uKTsKKwkJCWlmIChmcHJpbnRmKGYsICI6JSJQUkl1MzIiICVzXG4iLCBtYXJrLAorCQkJCXNoYTFfdG9faGV4KGRlY28tPmJhc2UtPnNoYTEpKSA8IDApIHsKKwkJCSAgICBlID0gMTsKKwkJCSAgICBicmVhazsKKwkJCX0KKwkJfQorCQlkZWNvKys7CisJfQorCisJZSB8PSBmZXJyb3IoZik7CisJZSB8PSBmY2xvc2UoZik7CisJaWYgKGUpCisJCWVycm9yKCJVbmFibGUgdG8gd3JpdGUgbWFya3MgZmlsZSAlcy4iLCBmaWxlKTsKK30KKworc3RhdGljIHZvaWQgaW1wb3J0X21hcmtzKGNoYXIgKmlucHV0X2ZpbGUpCit7CisJY2hhciBsaW5lWzUxMl07CisJRklMRSAqZiA9IGZvcGVuKGlucHV0X2ZpbGUsICJyIik7CisJaWYgKCFmKQorCQlkaWVfZXJybm8oImNhbm5vdCByZWFkICclcyciLCBpbnB1dF9maWxlKTsKKworCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGYpKSB7CisJCXVpbnQzMl90IG1hcms7CisJCWNoYXIgKmxpbmVfZW5kLCAqbWFya19lbmQ7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwkJbGluZV9lbmQgPSBzdHJjaHIobGluZSwgJ1xuJyk7CisJCWlmIChsaW5lWzBdICE9ICc6JyB8fCAhbGluZV9lbmQpCisJCQlkaWUoImNvcnJ1cHQgbWFyayBsaW5lOiAlcyIsIGxpbmUpOworCQkqbGluZV9lbmQgPSAnXDAnOworCisJCW1hcmsgPSBzdHJ0b3VtYXgobGluZSArIDEsICZtYXJrX2VuZCwgMTApOworCQlpZiAoIW1hcmsgfHwgbWFya19lbmQgPT0gbGluZSArIDEKKwkJCXx8ICptYXJrX2VuZCAhPSAnICcgfHwgZ2V0X3NoYTFfaGV4KG1hcmtfZW5kICsgMSwgc2hhMSkpCisJCQlkaWUoImNvcnJ1cHQgbWFyayBsaW5lOiAlcyIsIGxpbmUpOworCisJCWlmIChsYXN0X2lkbnVtIDwgbWFyaykKKwkJCWxhc3RfaWRudW0gPSBtYXJrOworCisJCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOworCQlpZiAodHlwZSA8IDApCisJCQlkaWUoIm9iamVjdCBub3QgZm91bmQ6ICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJCWlmICh0eXBlICE9IE9CSl9DT01NSVQpCisJCQkvKiBvbmx5IGNvbW1pdHMgKi8KKwkJCWNvbnRpbnVlOworCisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXQoc2hhMSk7CisJCWlmICghY29tbWl0KQorCQkJZGllKCJub3QgYSBjb21taXQ/IGNhbid0IGhhcHBlbjogJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisKKwkJb2JqZWN0ID0gJmNvbW1pdC0+b2JqZWN0OworCisJCWlmIChvYmplY3QtPmZsYWdzICYgU0hPV04pCisJCQllcnJvcigiT2JqZWN0ICVzIGFscmVhZHkgaGFzIGEgbWFyayIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCQltYXJrX29iamVjdChvYmplY3QsIG1hcmspOworCisJCW9iamVjdC0+ZmxhZ3MgfD0gU0hPV047CisJfQorCWZjbG9zZShmKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2RlbGV0ZXModm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVmc3BlY3NfbnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYyA9ICZyZWZzcGVjc1tpXTsKKwkJaWYgKCpyZWZzcGVjLT5zcmMpCisJCQljb250aW51ZTsKKworCQlwcmludGYoInJlc2V0ICVzXG5mcm9tICVzXG5cbiIsCisJCQkJcmVmc3BlYy0+ZHN0LCBzaGExX3RvX2hleChudWxsX3NoYTEpKTsKKwl9Cit9CisKK2ludCBjbWRfZmFzdF9leHBvcnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IG9iamVjdF9hcnJheSBjb21taXRzID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWNoYXIgKmV4cG9ydF9maWxlbmFtZSA9IE5VTEwsICppbXBvcnRfZmlsZW5hbWUgPSBOVUxMOworCXVpbnQzMl90IGxhc3RpbXBvcnRpZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmc3BlY3NfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9JTlRFR0VSKDAsICJwcm9ncmVzcyIsICZwcm9ncmVzcywKKwkJCSAgICBOXygic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIpKSwKKwkJT1BUX0NBTExCQUNLKDAsICJzaWduZWQtdGFncyIsICZzaWduZWRfdGFnX21vZGUsIE5fKCJtb2RlIiksCisJCQkgICAgIE5fKCJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiKSwKKwkJCSAgICAgcGFyc2Vfb3B0X3NpZ25lZF90YWdfbW9kZSksCisJCU9QVF9DQUxMQkFDSygwLCAidGFnLW9mLWZpbHRlcmVkLW9iamVjdCIsICZ0YWdfb2ZfZmlsdGVyZWRfbW9kZSwgTl8oIm1vZGUiKSwKKwkJCSAgICAgTl8oInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiKSwKKwkJCSAgICAgcGFyc2Vfb3B0X3RhZ19vZl9maWx0ZXJlZF9tb2RlKSwKKwkJT1BUX1NUUklORygwLCAiZXhwb3J0LW1hcmtzIiwgJmV4cG9ydF9maWxlbmFtZSwgTl8oImZpbGUiKSwKKwkJCSAgICAgTl8oIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIikpLAorCQlPUFRfU1RSSU5HKDAsICJpbXBvcnQtbWFya3MiLCAmaW1wb3J0X2ZpbGVuYW1lLCBOXygiZmlsZSIpLAorCQkJICAgICBOXygiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIikpLAorCQlPUFRfQk9PTCgwLCAiZmFrZS1taXNzaW5nLXRhZ2dlciIsICZmYWtlX21pc3NpbmdfdGFnZ2VyLAorCQkJIE5fKCJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIpKSwKKwkJT1BUX0JPT0woMCwgImZ1bGwtdHJlZSIsICZmdWxsX3RyZWUsCisJCQkgTl8oIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IikpLAorCQlPUFRfQk9PTCgwLCAidXNlLWRvbmUtZmVhdHVyZSIsICZ1c2VfZG9uZV9mZWF0dXJlLAorCQkJICAgICBOXygiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iKSksCisJCU9QVF9CT09MKDAsICJuby1kYXRhIiwgJm5vX2RhdGEsIE5fKCJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiKSksCisJCU9QVF9TVFJJTkdfTElTVCgwLCAicmVmc3BlYyIsICZyZWZzcGVjc19saXN0LCBOXygicmVmc3BlYyIpLAorCQkJICAgICBOXygiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIikpLAorCQlPUFRfQk9PTCgwLCAiYW5vbnltaXplIiwgJmFub255bWl6ZSwgTl8oImFub255bWl6ZSBvdXRwdXQiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlpZiAoYXJnYyA9PSAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMgKGZhc3RfZXhwb3J0X3VzYWdlLCBvcHRpb25zKTsKKworCS8qIHdlIGhhbmRsZSBlbmNvZGluZ3MgKi8KKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlpbml0X3JldmlzaW9ucygmcmV2cywgcHJlZml4KTsKKwlyZXZzLnRvcG9fb3JkZXIgPSAxOworCXJldnMuc2hvd19zb3VyY2UgPSAxOworCXJldnMucmV3cml0ZV9wYXJlbnRzID0gMTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGZhc3RfZXhwb3J0X3VzYWdlLAorCQkJUEFSU0VfT1BUX0tFRVBfQVJHVjAgfCBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKTsKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXZzLCBOVUxMKTsKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyAoZmFzdF9leHBvcnRfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKHJlZnNwZWNzX2xpc3QubnIpIHsKKwkJY29uc3QgY2hhciAqKnJlZnNwZWNzX3N0cjsKKwkJaW50IGk7CisKKwkJcmVmc3BlY3Nfc3RyID0geG1hbGxvYyhzaXplb2YoKnJlZnNwZWNzX3N0cikgKiByZWZzcGVjc19saXN0Lm5yKTsKKwkJZm9yIChpID0gMDsgaSA8IHJlZnNwZWNzX2xpc3QubnI7IGkrKykKKwkJCXJlZnNwZWNzX3N0cltpXSA9IHJlZnNwZWNzX2xpc3QuaXRlbXNbaV0uc3RyaW5nOworCisJCXJlZnNwZWNzX25yID0gcmVmc3BlY3NfbGlzdC5ucjsKKwkJcmVmc3BlY3MgPSBwYXJzZV9mZXRjaF9yZWZzcGVjKHJlZnNwZWNzX25yLCByZWZzcGVjc19zdHIpOworCisJCXN0cmluZ19saXN0X2NsZWFyKCZyZWZzcGVjc19saXN0LCAxKTsKKwkJZnJlZShyZWZzcGVjc19zdHIpOworCX0KKworCWlmICh1c2VfZG9uZV9mZWF0dXJlKQorCQlwcmludGYoImZlYXR1cmUgZG9uZVxuIik7CisKKwlpZiAoaW1wb3J0X2ZpbGVuYW1lKQorCQlpbXBvcnRfbWFya3MoaW1wb3J0X2ZpbGVuYW1lKTsKKwlsYXN0aW1wb3J0aWQgPSBsYXN0X2lkbnVtOworCisJaWYgKGltcG9ydF9maWxlbmFtZSAmJiByZXZzLnBydW5lX2RhdGEubnIpCisJCWZ1bGxfdHJlZSA9IDE7CisKKwlnZXRfdGFnc19hbmRfZHVwbGljYXRlcygmcmV2cy5jbWRsaW5lKTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJcmV2cy5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IHNob3dfZmlsZW1vZGlmeTsKKwlESUZGX09QVF9TRVQoJnJldnMuZGlmZm9wdCwgUkVDVVJTSVZFKTsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2cykpKSB7CisJCWlmIChoYXNfdW5zaG93bl9wYXJlbnQoY29tbWl0KSkgeworCQkJYWRkX29iamVjdF9hcnJheSgmY29tbWl0LT5vYmplY3QsIE5VTEwsICZjb21taXRzKTsKKwkJfQorCQllbHNlIHsKKwkJCWhhbmRsZV9jb21taXQoY29tbWl0LCAmcmV2cyk7CisJCQloYW5kbGVfdGFpbCgmY29tbWl0cywgJnJldnMpOworCQl9CisJfQorCisJaGFuZGxlX3RhZ3NfYW5kX2R1cGxpY2F0ZXMoKTsKKwloYW5kbGVfZGVsZXRlcygpOworCisJaWYgKGV4cG9ydF9maWxlbmFtZSAmJiBsYXN0aW1wb3J0aWQgIT0gbGFzdF9pZG51bSkKKwkJZXhwb3J0X21hcmtzKGV4cG9ydF9maWxlbmFtZSk7CisKKwlpZiAodXNlX2RvbmVfZmVhdHVyZSkKKwkJcHJpbnRmKCJkb25lXG4iKTsKKworCWZyZWVfcmVmc3BlYyhyZWZzcGVjc19uciwgcmVmc3BlY3MpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2ZldGNoLXBhY2suYyBiL2J1aWx0aW4vZmV0Y2gtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNmIzNDAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2ZldGNoLXBhY2suYwpAQCAtMCwwICsxLDIxOCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgImZldGNoLXBhY2suaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBmZXRjaF9wYWNrX3VzYWdlW10gPQorImdpdCBmZXRjaC1wYWNrIFstLWFsbF0gWy0tc3RkaW5dIFstLXF1aWV0IHwgLXFdIFstLWtlZXAgfCAta10gWy0tdGhpbl0gIgorIlstLWluY2x1ZGUtdGFnXSBbLS11cGxvYWQtcGFjaz08Z2l0LXVwbG9hZC1wYWNrPl0gWy0tZGVwdGg9PG4+XSAiCisiWy0tbm8tcHJvZ3Jlc3NdIFstLWRpYWctdXJsXSBbLXZdIFs8aG9zdD46XTxkaXJlY3Rvcnk+IFs8cmVmcz4uLi5dIjsKKworc3RhdGljIHZvaWQgYWRkX3NvdWdodF9lbnRyeV9tZW0oc3RydWN0IHJlZiAqKipzb3VnaHQsIGludCAqbnIsIGludCAqYWxsb2MsCisJCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKQoreworCXN0cnVjdCByZWYgKnJlZiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZWYpICsgbmFtZWxlbiArIDEpOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlpZiAobmFtZWxlbiA+IDQxICYmIG5hbWVbNDBdID09ICcgJyAmJiAhZ2V0X3NoYTFfaGV4KG5hbWUsIHNoYTEpKSB7CisJCWhhc2hjcHkocmVmLT5vbGRfc2hhMSwgc2hhMSk7CisJCW5hbWUgKz0gNDE7CisJCW5hbWVsZW4gLT0gNDE7CisJfQorCisJbWVtY3B5KHJlZi0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CisJcmVmLT5uYW1lW25hbWVsZW5dID0gJ1wwJzsKKwkoKm5yKSsrOworCUFMTE9DX0dST1coKnNvdWdodCwgKm5yLCAqYWxsb2MpOworCSgqc291Z2h0KVsqbnIgLSAxXSA9IHJlZjsKK30KKworc3RhdGljIHZvaWQgYWRkX3NvdWdodF9lbnRyeShzdHJ1Y3QgcmVmICoqKnNvdWdodCwgaW50ICpuciwgaW50ICphbGxvYywKKwkJCSAgICAgY29uc3QgY2hhciAqc3RyaW5nKQoreworCWFkZF9zb3VnaHRfZW50cnlfbWVtKHNvdWdodCwgbnIsIGFsbG9jLCBzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsKK30KKworaW50IGNtZF9mZXRjaF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCByZXQ7CisJc3RydWN0IHJlZiAqcmVmID0gTlVMTDsKKwljb25zdCBjaGFyICpkZXN0ID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqc291Z2h0ID0gTlVMTDsKKwlpbnQgbnJfc291Z2h0ID0gMCwgYWxsb2Nfc291Z2h0ID0gMDsKKwlpbnQgZmRbMl07CisJY2hhciAqcGFja19sb2NrZmlsZSA9IE5VTEw7CisJY2hhciAqKnBhY2tfbG9ja2ZpbGVfcHRyID0gTlVMTDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubjsKKwlzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzIGFyZ3M7CisJc3RydWN0IHNoYTFfYXJyYXkgc2hhbGxvdyA9IFNIQTFfQVJSQVlfSU5JVDsKKworCXBhY2tldF90cmFjZV9pZGVudGl0eSgiZmV0Y2gtcGFjayIpOworCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCWFyZ3MudXBsb2FkcGFjayA9ICJnaXQtdXBsb2FkLXBhY2siOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2MgJiYgKmFyZ3ZbaV0gPT0gJy0nOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKworCQlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS11cGxvYWQtcGFjaz0iKSkgeworCQkJYXJncy51cGxvYWRwYWNrID0gYXJnICsgMTQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1leGVjPSIpKSB7CisJCQlhcmdzLnVwbG9hZHBhY2sgPSBhcmcgKyA3OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tcXVpZXQiLCBhcmcpIHx8ICFzdHJjbXAoIi1xIiwgYXJnKSkgeworCQkJYXJncy5xdWlldCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS1rZWVwIiwgYXJnKSB8fCAhc3RyY21wKCItayIsIGFyZykpIHsKKwkJCWFyZ3MubG9ja19wYWNrID0gYXJncy5rZWVwX3BhY2s7CisJCQlhcmdzLmtlZXBfcGFjayA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS10aGluIiwgYXJnKSkgeworCQkJYXJncy51c2VfdGhpbl9wYWNrID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLWluY2x1ZGUtdGFnIiwgYXJnKSkgeworCQkJYXJncy5pbmNsdWRlX3RhZyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS1hbGwiLCBhcmcpKSB7CisJCQlhcmdzLmZldGNoX2FsbCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS1zdGRpbiIsIGFyZykpIHsKKwkJCWFyZ3Muc3RkaW5fcmVmcyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS1kaWFnLXVybCIsIGFyZykpIHsKKwkJCWFyZ3MuZGlhZ191cmwgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi12IiwgYXJnKSkgeworCQkJYXJncy52ZXJib3NlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGFydHNfd2l0aChhcmcsICItLWRlcHRoPSIpKSB7CisJCQlhcmdzLmRlcHRoID0gc3RydG9sKGFyZyArIDgsIE5VTEwsIDApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tbm8tcHJvZ3Jlc3MiLCBhcmcpKSB7CisJCQlhcmdzLm5vX3Byb2dyZXNzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLXN0YXRlbGVzcy1ycGMiLCBhcmcpKSB7CisJCQlhcmdzLnN0YXRlbGVzc19ycGMgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tbG9jay1wYWNrIiwgYXJnKSkgeworCQkJYXJncy5sb2NrX3BhY2sgPSAxOworCQkJcGFja19sb2NrZmlsZV9wdHIgPSAmcGFja19sb2NrZmlsZTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKCItLWNoZWNrLXNlbGYtY29udGFpbmVkLWFuZC1jb25uZWN0ZWQiLCBhcmcpKSB7CisJCQlhcmdzLmNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoIi0tY2xvbmluZyIsIGFyZykpIHsKKwkJCWFyZ3MuY2xvbmluZyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcCgiLS11cGRhdGUtc2hhbGxvdyIsIGFyZykpIHsKKwkJCWFyZ3MudXBkYXRlX3NoYWxsb3cgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJdXNhZ2UoZmV0Y2hfcGFja191c2FnZSk7CisJfQorCisJaWYgKGkgPCBhcmdjKQorCQlkZXN0ID0gYXJndltpKytdOworCWVsc2UKKwkJdXNhZ2UoZmV0Y2hfcGFja191c2FnZSk7CisKKwkvKgorCSAqIENvcHkgcmVmcyBmcm9tIGNtZGxpbmUgdG8gZ3Jvd2FibGUgbGlzdCwgdGhlbiBhcHBlbmQgYW55CisJICogcmVmcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dDoKKwkgKi8KKwlmb3IgKDsgaSA8IGFyZ2M7IGkrKykKKwkJYWRkX3NvdWdodF9lbnRyeSgmc291Z2h0LCAmbnJfc291Z2h0LCAmYWxsb2Nfc291Z2h0LCBhcmd2W2ldKTsKKwlpZiAoYXJncy5zdGRpbl9yZWZzKSB7CisJCWlmIChhcmdzLnN0YXRlbGVzc19ycGMpIHsKKwkJCS8qIGluIHN0YXRlbGVzcyBSUEMgbW9kZSB3ZSB1c2UgcGt0LWxpbmUgdG8gcmVhZAorCQkJICogZnJvbSBzdGRpbiwgdW50aWwgd2UgZ2V0IGEgZmx1c2ggcGFja2V0CisJCQkgKi8KKwkJCWZvciAoOzspIHsKKwkJCQljaGFyICpsaW5lID0gcGFja2V0X3JlYWRfbGluZSgwLCBOVUxMKTsKKwkJCQlpZiAoIWxpbmUpCisJCQkJCWJyZWFrOworCQkJCWFkZF9zb3VnaHRfZW50cnkoJnNvdWdodCwgJm5yX3NvdWdodCwgICZhbGxvY19zb3VnaHQsIGxpbmUpOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJLyogcmVhZCBmcm9tIHN0ZGluIG9uZSByZWYgcGVyIGxpbmUsIHVudGlsIEVPRiAqLworCQkJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIHN0ZGluLCAnXG4nKSAhPSBFT0YpCisJCQkJYWRkX3NvdWdodF9lbnRyeSgmc291Z2h0LCAmbnJfc291Z2h0LCAmYWxsb2Nfc291Z2h0LCBsaW5lLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJCX0KKwl9CisKKwlpZiAoYXJncy5zdGF0ZWxlc3NfcnBjKSB7CisJCWNvbm4gPSBOVUxMOworCQlmZFswXSA9IDA7CisJCWZkWzFdID0gMTsKKwl9IGVsc2UgeworCQlpbnQgZmxhZ3MgPSBhcmdzLnZlcmJvc2UgPyBDT05ORUNUX1ZFUkJPU0UgOiAwOworCQlpZiAoYXJncy5kaWFnX3VybCkKKwkJCWZsYWdzIHw9IENPTk5FQ1RfRElBR19VUkw7CisJCWNvbm4gPSBnaXRfY29ubmVjdChmZCwgZGVzdCwgYXJncy51cGxvYWRwYWNrLAorCQkJCSAgIGZsYWdzKTsKKwkJaWYgKCFjb25uKQorCQkJcmV0dXJuIGFyZ3MuZGlhZ191cmwgPyAwIDogMTsKKwl9CisJZ2V0X3JlbW90ZV9oZWFkcyhmZFswXSwgTlVMTCwgMCwgJnJlZiwgMCwgTlVMTCwgJnNoYWxsb3cpOworCisJcmVmID0gZmV0Y2hfcGFjaygmYXJncywgZmQsIGNvbm4sIHJlZiwgZGVzdCwgc291Z2h0LCBucl9zb3VnaHQsCisJCQkgJnNoYWxsb3csIHBhY2tfbG9ja2ZpbGVfcHRyKTsKKwlpZiAocGFja19sb2NrZmlsZSkgeworCQlwcmludGYoImxvY2sgJXNcbiIsIHBhY2tfbG9ja2ZpbGUpOworCQlmZmx1c2goc3Rkb3V0KTsKKwl9CisJaWYgKGFyZ3MuY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCAmJgorCSAgICBhcmdzLnNlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQpIHsKKwkJcHJpbnRmKCJjb25uZWN0aXZpdHktb2tcbiIpOworCQlmZmx1c2goc3Rkb3V0KTsKKwl9CisJY2xvc2UoZmRbMF0pOworCWNsb3NlKGZkWzFdKTsKKwlpZiAoZmluaXNoX2Nvbm5lY3QoY29ubikpCisJCXJldHVybiAxOworCisJcmV0ID0gIXJlZjsKKworCS8qCisJICogSWYgdGhlIGhlYWRzIHRvIHB1bGwgd2VyZSBnaXZlbiwgd2Ugc2hvdWxkIGhhdmUgY29uc3VtZWQKKwkgKiBhbGwgb2YgdGhlbSBieSBtYXRjaGluZyB0aGUgcmVtb3RlLiAgT3RoZXJ3aXNlLCAnZ2l0IGZldGNoCisJICogcmVtb3RlIG5vLXN1Y2gtcmVmJyB3b3VsZCBzaWxlbnRseSBzdWNjZWVkIHdpdGhvdXQgaXNzdWluZworCSAqIGFuIGVycm9yLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBucl9zb3VnaHQ7IGkrKykgeworCQlpZiAoIXNvdWdodFtpXSB8fCBzb3VnaHRbaV0tPm1hdGNoZWQpCisJCQljb250aW51ZTsKKwkJZXJyb3IoIm5vIHN1Y2ggcmVtb3RlIHJlZiAlcyIsIHNvdWdodFtpXS0+bmFtZSk7CisJCXJldCA9IDE7CisJfQorCisJd2hpbGUgKHJlZikgeworCQlwcmludGYoIiVzICVzXG4iLAorCQkgICAgICAgc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSksIHJlZi0+bmFtZSk7CisJCXJlZiA9IHJlZi0+bmV4dDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9mZXRjaC5jIGIvYnVpbHRpbi9mZXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkODQ5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2ZldGNoLmMKQEAgLTAsMCArMSwxMjMxIEBACisvKgorICogImdpdCBmZXRjaCIKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImNvbm5lY3RlZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2ZldGNoX3VzYWdlW10gPSB7CisJTl8oImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIpLAorCU5fKCJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIpLAorCU5fKCJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIpLAorCU5fKCJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iKSwKKwlOVUxMCit9OworCitlbnVtIHsKKwlUQUdTX1VOU0VUID0gMCwKKwlUQUdTX0RFRkFVTFQgPSAxLAorCVRBR1NfU0VUID0gMgorfTsKKworc3RhdGljIGludCBmZXRjaF9wcnVuZV9jb25maWcgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KK3N0YXRpYyBpbnQgcHJ1bmUgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KKyNkZWZpbmUgUFJVTkVfQllfREVGQVVMVCAwIC8qIGRvIHdlIHBydW5lIGJ5IGRlZmF1bHQ/ICovCisKK3N0YXRpYyBpbnQgYWxsLCBhcHBlbmQsIGRyeV9ydW4sIGZvcmNlLCBrZWVwLCBtdWx0aXBsZSwgdXBkYXRlX2hlYWRfb2ssIHZlcmJvc2l0eTsKK3N0YXRpYyBpbnQgcHJvZ3Jlc3MgPSAtMSwgcmVjdXJzZV9zdWJtb2R1bGVzID0gUkVDVVJTRV9TVUJNT0RVTEVTX0RFRkFVTFQ7CitzdGF0aWMgaW50IHRhZ3MgPSBUQUdTX0RFRkFVTFQsIHVuc2hhbGxvdywgdXBkYXRlX3NoYWxsb3c7CitzdGF0aWMgY29uc3QgY2hhciAqZGVwdGg7CitzdGF0aWMgY29uc3QgY2hhciAqdXBsb2FkX3BhY2s7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBkZWZhdWx0X3JsYSA9IFNUUkJVRl9JTklUOworc3RhdGljIHN0cnVjdCB0cmFuc3BvcnQgKmd0cmFuc3BvcnQ7CitzdGF0aWMgc3RydWN0IHRyYW5zcG9ydCAqZ3NlY29uZGFyeTsKK3N0YXRpYyBjb25zdCBjaGFyICpzdWJtb2R1bGVfcHJlZml4ID0gIiI7CitzdGF0aWMgY29uc3QgY2hhciAqcmVjdXJzZV9zdWJtb2R1bGVzX2RlZmF1bHQ7CitzdGF0aWMgaW50IHNob3duX3VybCA9IDA7CitzdGF0aWMgaW50IHJlZm1hcF9hbGxvYywgcmVmbWFwX25yOworc3RhdGljIGNvbnN0IGNoYXIgKipyZWZtYXBfYXJyYXk7CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3JlY3Vyc2Vfc3VibW9kdWxlcyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KSB7CisJCXJlY3Vyc2Vfc3VibW9kdWxlcyA9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY7CisJfSBlbHNlIHsKKwkJaWYgKGFyZykKKwkJCXJlY3Vyc2Vfc3VibW9kdWxlcyA9IHBhcnNlX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcob3B0LT5sb25nX25hbWUsIGFyZyk7CisJCWVsc2UKKwkJCXJlY3Vyc2Vfc3VibW9kdWxlcyA9IFJFQ1VSU0VfU1VCTU9EVUxFU19PTjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2ZldGNoX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcChrLCAiZmV0Y2gucHJ1bmUiKSkgeworCQlmZXRjaF9wcnVuZV9jb25maWcgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGssIHYsIGNiKTsKK30KKworc3RhdGljIGludCBwYXJzZV9yZWZtYXBfYXJnKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJQUxMT0NfR1JPVyhyZWZtYXBfYXJyYXksIHJlZm1hcF9uciArIDEsIHJlZm1hcF9hbGxvYyk7CisKKwkvKgorCSAqICJnaXQgZmV0Y2ggLS1yZWZtYXA9Jycgb3JpZ2luIGZvbyIKKwkgKiBjYW4gYmUgdXNlZCB0byB0ZWxsIHRoZSBjb21tYW5kIG5vdCB0byBzdG9yZSBhbnl3aGVyZQorCSAqLworCWlmICgqYXJnKQorCQlyZWZtYXBfYXJyYXlbcmVmbWFwX25yKytdID0gYXJnOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2ZldGNoX29wdGlvbnNbXSA9IHsKKwlPUFRfX1ZFUkJPU0lUWSgmdmVyYm9zaXR5KSwKKwlPUFRfQk9PTCgwLCAiYWxsIiwgJmFsbCwKKwkJIE5fKCJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIikpLAorCU9QVF9CT09MKCdhJywgImFwcGVuZCIsICZhcHBlbmQsCisJCSBOXygiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIikpLAorCU9QVF9TVFJJTkcoMCwgInVwbG9hZC1wYWNrIiwgJnVwbG9hZF9wYWNrLCBOXygicGF0aCIpLAorCQkgICBOXygicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIikpLAorCU9QVF9fRk9SQ0UoJmZvcmNlLCBOXygiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIpKSwKKwlPUFRfQk9PTCgnbScsICJtdWx0aXBsZSIsICZtdWx0aXBsZSwKKwkJIE5fKCJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiKSksCisJT1BUX1NFVF9JTlQoJ3QnLCAidGFncyIsICZ0YWdzLAorCQkgICAgTl8oImZldGNoIGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMiKSwgVEFHU19TRVQpLAorCU9QVF9TRVRfSU5UKCduJywgTlVMTCwgJnRhZ3MsCisJCSAgICBOXygiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIiksIFRBR1NfVU5TRVQpLAorCU9QVF9CT09MKCdwJywgInBydW5lIiwgJnBydW5lLAorCQkgTl8oInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIikpLAorCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAicmVjdXJzZS1zdWJtb2R1bGVzIiwgTlVMTCwgTl8oIm9uLWRlbWFuZCIpLAorCQkgICAgTl8oImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiKSwKKwkJICAgIFBBUlNFX09QVF9PUFRBUkcsIG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXMgfSwKKwlPUFRfQk9PTCgwLCAiZHJ5LXJ1biIsICZkcnlfcnVuLAorCQkgTl8oImRyeSBydW4iKSksCisJT1BUX0JPT0woJ2snLCAia2VlcCIsICZrZWVwLCBOXygia2VlcCBkb3dubG9hZGVkIHBhY2siKSksCisJT1BUX0JPT0woJ3UnLCAidXBkYXRlLWhlYWQtb2siLCAmdXBkYXRlX2hlYWRfb2ssCisJCSAgICBOXygiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiKSksCisJT1BUX0JPT0woMCwgInByb2dyZXNzIiwgJnByb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIikpLAorCU9QVF9TVFJJTkcoMCwgImRlcHRoIiwgJmRlcHRoLCBOXygiZGVwdGgiKSwKKwkJICAgTl8oImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiKSksCisJeyBPUFRJT05fU0VUX0lOVCwgMCwgInVuc2hhbGxvdyIsICZ1bnNoYWxsb3csIE5VTEwsCisJCSAgIE5fKCJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIpLAorCQkgICBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIDEgfSwKKwl7IE9QVElPTl9TVFJJTkcsIDAsICJzdWJtb2R1bGUtcHJlZml4IiwgJnN1Ym1vZHVsZV9wcmVmaXgsIE5fKCJkaXIiKSwKKwkJICAgTl8oInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiKSwgUEFSU0VfT1BUX0hJRERFTiB9LAorCXsgT1BUSU9OX1NUUklORywgMCwgInJlY3Vyc2Utc3VibW9kdWxlcy1kZWZhdWx0IiwKKwkJICAgJnJlY3Vyc2Vfc3VibW9kdWxlc19kZWZhdWx0LCBOVUxMLAorCQkgICBOXygiZGVmYXVsdCBtb2RlIGZvciByZWN1cnNpb24iKSwgUEFSU0VfT1BUX0hJRERFTiB9LAorCU9QVF9CT09MKDAsICJ1cGRhdGUtc2hhbGxvdyIsICZ1cGRhdGVfc2hhbGxvdywKKwkJIE5fKCJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciKSksCisJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJyZWZtYXAiLCBOVUxMLCBOXygicmVmbWFwIiksCisJICBOXygic3BlY2lmeSBmZXRjaCByZWZtYXAiKSwgUEFSU0VfT1BUX05PTkVHLCBwYXJzZV9yZWZtYXBfYXJnIH0sCisJT1BUX0VORCgpCit9OworCitzdGF0aWMgdm9pZCB1bmxvY2tfcGFjayh2b2lkKQoreworCWlmIChndHJhbnNwb3J0KQorCQl0cmFuc3BvcnRfdW5sb2NrX3BhY2soZ3RyYW5zcG9ydCk7CisJaWYgKGdzZWNvbmRhcnkpCisJCXRyYW5zcG9ydF91bmxvY2tfcGFjayhnc2Vjb25kYXJ5KTsKK30KKworc3RhdGljIHZvaWQgdW5sb2NrX3BhY2tfb25fc2lnbmFsKGludCBzaWdubykKK3sKKwl1bmxvY2tfcGFjaygpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWVyZ2VfY29uZmlnKHN0cnVjdCByZWYgKipoZWFkLAorCQkJICAgY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsCisJCSAgICAgICAgICAgc3RydWN0IGJyYW5jaCAqYnJhbmNoLAorCQkgICAgICAgICAgIHN0cnVjdCByZWYgKioqdGFpbCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBicmFuY2gtPm1lcmdlX25yOyBpKyspIHsKKwkJc3RydWN0IHJlZiAqcm0sICoqb2xkX3RhaWwgPSAqdGFpbDsKKwkJc3RydWN0IHJlZnNwZWMgcmVmc3BlYzsKKworCQlmb3IgKHJtID0gKmhlYWQ7IHJtOyBybSA9IHJtLT5uZXh0KSB7CisJCQlpZiAoYnJhbmNoX21lcmdlX21hdGNoZXMoYnJhbmNoLCBpLCBybS0+bmFtZSkpIHsKKwkJCQlybS0+ZmV0Y2hfaGVhZF9zdGF0dXMgPSBGRVRDSF9IRUFEX01FUkdFOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChybSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIE5vdCBmZXRjaGVkIHRvIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaD8gIFdlIG5lZWQgdG8gZmV0Y2gKKwkJICogaXQgYW55d2F5IHRvIGFsbG93IHRoaXMgYnJhbmNoJ3MgImJyYW5jaC4kbmFtZS5tZXJnZSIKKwkJICogdG8gYmUgaG9ub3JlZCBieSAnZ2l0IHB1bGwnLCBidXQgd2UgZG8gbm90IGhhdmUgdG8KKwkJICogZmFpbCBpZiBicmFuY2guJG5hbWUubWVyZ2UgaXMgbWlzY29uZmlndXJlZCB0byBwb2ludAorCQkgKiBhdCBhIG5vbmV4aXN0aW5nIGJyYW5jaC4gIElmIHdlIHdlcmUgaW5kZWVkIGNhbGxlZCBieQorCQkgKiAnZ2l0IHB1bGwnLCBpdCB3aWxsIG5vdGljZSB0aGUgbWlzY29uZmlndXJhdGlvbiBiZWNhdXNlCisJCSAqIHRoZXJlIGlzIG5vIGVudHJ5IGluIHRoZSByZXN1bHRpbmcgRkVUQ0hfSEVBRCBtYXJrZWQKKwkJICogZm9yIG1lcmdpbmcuCisJCSAqLworCQltZW1zZXQoJnJlZnNwZWMsIDAsIHNpemVvZihyZWZzcGVjKSk7CisJCXJlZnNwZWMuc3JjID0gYnJhbmNoLT5tZXJnZVtpXS0+c3JjOworCQlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCAmcmVmc3BlYywgdGFpbCwgMSk7CisJCWZvciAocm0gPSAqb2xkX3RhaWw7IHJtOyBybSA9IHJtLT5uZXh0KQorCQkJcm0tPmZldGNoX2hlYWRfc3RhdHVzID0gRkVUQ0hfSEVBRF9NRVJHRTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWRkX2V4aXN0aW5nKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCWludCBmbGFnLCB2b2lkICpjYmRhdGEpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ID0gKHN0cnVjdCBzdHJpbmdfbGlzdCAqKWNiZGF0YTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChsaXN0LCByZWZuYW1lKTsKKwlzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkID0geG1hbGxvYyhzaXplb2YoKm9sZF9vaWQpKTsKKworCW9pZGNweShvbGRfb2lkLCBvaWQpOworCWl0ZW0tPnV0aWwgPSBvbGRfb2lkOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdpbGxfZmV0Y2goc3RydWN0IHJlZiAqKmhlYWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHJlZiAqcm0gPSAqaGVhZDsKKwl3aGlsZSAocm0pIHsKKwkJaWYgKCFoYXNoY21wKHJtLT5vbGRfc2hhMSwgc2hhMSkpCisJCQlyZXR1cm4gMTsKKwkJcm0gPSBybS0+bmV4dDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfbm9uX2xvY2FsX3RhZ3Moc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJc3RydWN0IHJlZiAqKmhlYWQsCisJCQlzdHJ1Y3QgcmVmICoqKnRhaWwpCit7CisJc3RydWN0IHN0cmluZ19saXN0IGV4aXN0aW5nX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVtb3RlX3JlZnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWNvbnN0IHN0cnVjdCByZWYgKnJlZjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IE5VTEw7CisKKwlmb3JfZWFjaF9yZWYoYWRkX2V4aXN0aW5nLCAmZXhpc3RpbmdfcmVmcyk7CisJZm9yIChyZWYgPSB0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKHRyYW5zcG9ydCk7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICghc3RhcnRzX3dpdGgocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogVGhlIHBlZWxlZCByZWYgYWx3YXlzIGZvbGxvd3MgdGhlIG1hdGNoaW5nIGJhc2UKKwkJICogcmVmLCBzbyBpZiB3ZSBzZWUgYSBwZWVsZWQgcmVmIHRoYXQgd2UgZG9uJ3Qgd2FudAorCQkgKiB0byBmZXRjaCB0aGVuIHdlIGNhbiBtYXJrIHRoZSByZWYgZW50cnkgaW4gdGhlIGxpc3QKKwkJICogYXMgb25lIHRvIGlnbm9yZSBieSBzZXR0aW5nIHV0aWwgdG8gTlVMTC4KKwkJICovCisJCWlmIChlbmRzX3dpdGgocmVmLT5uYW1lLCAiXnt9IikpIHsKKwkJCWlmIChpdGVtICYmICFoYXNfc2hhMV9maWxlKHJlZi0+b2xkX3NoYTEpICYmCisJCQkgICAgIXdpbGxfZmV0Y2goaGVhZCwgcmVmLT5vbGRfc2hhMSkgJiYKKwkJCSAgICAhaGFzX3NoYTFfZmlsZShpdGVtLT51dGlsKSAmJgorCQkJICAgICF3aWxsX2ZldGNoKGhlYWQsIGl0ZW0tPnV0aWwpKQorCQkJCWl0ZW0tPnV0aWwgPSBOVUxMOworCQkJaXRlbSA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIElmIGl0ZW0gaXMgbm9uLU5VTEwgaGVyZSwgdGhlbiB3ZSBwcmV2aW91c2x5IHNhdyBhCisJCSAqIHJlZiBub3QgZm9sbG93ZWQgYnkgYSBwZWVsZWQgcmVmZXJlbmNlLCBzbyB3ZSBuZWVkCisJCSAqIHRvIGNoZWNrIGlmIGl0IGlzIGEgbGlnaHR3ZWlnaHQgdGFnIHRoYXQgd2Ugd2FudCB0bworCQkgKiBmZXRjaC4KKwkJICovCisJCWlmIChpdGVtICYmICFoYXNfc2hhMV9maWxlKGl0ZW0tPnV0aWwpICYmCisJCSAgICAhd2lsbF9mZXRjaChoZWFkLCBpdGVtLT51dGlsKSkKKwkJCWl0ZW0tPnV0aWwgPSBOVUxMOworCisJCWl0ZW0gPSBOVUxMOworCisJCS8qIHNraXAgZHVwbGljYXRlcyBhbmQgcmVmcyB0aGF0IHdlIGFscmVhZHkgaGF2ZSAqLworCQlpZiAoc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmcmVtb3RlX3JlZnMsIHJlZi0+bmFtZSkgfHwKKwkJICAgIHN0cmluZ19saXN0X2hhc19zdHJpbmcoJmV4aXN0aW5nX3JlZnMsIHJlZi0+bmFtZSkpCisJCQljb250aW51ZTsKKworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZyZW1vdGVfcmVmcywgcmVmLT5uYW1lKTsKKwkJaXRlbS0+dXRpbCA9ICh2b2lkICopcmVmLT5vbGRfc2hhMTsKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJmV4aXN0aW5nX3JlZnMsIDEpOworCisJLyoKKwkgKiBXZSBtYXkgaGF2ZSBhIGZpbmFsIGxpZ2h0d2VpZ2h0IHRhZyB0aGF0IG5lZWRzIHRvIGJlCisJICogY2hlY2tlZCB0byBzZWUgaWYgaXQgbmVlZHMgZmV0Y2hpbmcuCisJICovCisJaWYgKGl0ZW0gJiYgIWhhc19zaGExX2ZpbGUoaXRlbS0+dXRpbCkgJiYKKwkgICAgIXdpbGxfZmV0Y2goaGVhZCwgaXRlbS0+dXRpbCkpCisJCWl0ZW0tPnV0aWwgPSBOVUxMOworCisJLyoKKwkgKiBGb3IgYWxsIHRoZSB0YWdzIGluIHRoZSByZW1vdGVfcmVmcyBzdHJpbmcgbGlzdCwKKwkgKiBhZGQgdGhlbSB0byB0aGUgbGlzdCBvZiByZWZzIHRvIGJlIGZldGNoZWQKKwkgKi8KKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZyZW1vdGVfcmVmcykgeworCQkvKiBVbmxlc3Mgd2UgaGF2ZSBhbHJlYWR5IGRlY2lkZWQgdG8gaWdub3JlIHRoaXMgaXRlbS4uLiAqLworCQlpZiAoaXRlbS0+dXRpbCkKKwkJeworCQkJc3RydWN0IHJlZiAqcm0gPSBhbGxvY19yZWYoaXRlbS0+c3RyaW5nKTsKKwkJCXJtLT5wZWVyX3JlZiA9IGFsbG9jX3JlZihpdGVtLT5zdHJpbmcpOworCQkJaGFzaGNweShybS0+b2xkX3NoYTEsIGl0ZW0tPnV0aWwpOworCQkJKip0YWlsID0gcm07CisJCQkqdGFpbCA9ICZybS0+bmV4dDsKKwkJfQorCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZyZW1vdGVfcmVmcywgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpnZXRfcmVmX21hcChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgICAgICAgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWNzLCBpbnQgcmVmc3BlY19jb3VudCwKKwkJCSAgICAgICBpbnQgdGFncywgaW50ICphdXRvdGFncykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVmICpybTsKKwlzdHJ1Y3QgcmVmICpyZWZfbWFwID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9ICZyZWZfbWFwOworCisJLyogb3Bwb3J0dW5pc3RpY2FsbHktdXBkYXRlZCByZWZlcmVuY2VzOiAqLworCXN0cnVjdCByZWYgKm9yZWZzID0gTlVMTCwgKipvcmVmX3RhaWwgPSAmb3JlZnM7CisKKwljb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcyA9IHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnModHJhbnNwb3J0KTsKKworCWlmIChyZWZzcGVjX2NvdW50KSB7CisJCXN0cnVjdCByZWZzcGVjICpmZXRjaF9yZWZzcGVjOworCQlpbnQgZmV0Y2hfcmVmc3BlY19ucjsKKworCQlmb3IgKGkgPSAwOyBpIDwgcmVmc3BlY19jb3VudDsgaSsrKSB7CisJCQlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCAmcmVmc3BlY3NbaV0sICZ0YWlsLCAwKTsKKwkJCWlmIChyZWZzcGVjc1tpXS5kc3QgJiYgcmVmc3BlY3NbaV0uZHN0WzBdKQorCQkJCSphdXRvdGFncyA9IDE7CisJCX0KKwkJLyogTWVyZ2UgZXZlcnl0aGluZyBvbiB0aGUgY29tbWFuZCBsaW5lIChidXQgbm90IC0tdGFncykgKi8KKwkJZm9yIChybSA9IHJlZl9tYXA7IHJtOyBybSA9IHJtLT5uZXh0KQorCQkJcm0tPmZldGNoX2hlYWRfc3RhdHVzID0gRkVUQ0hfSEVBRF9NRVJHRTsKKworCQkvKgorCQkgKiBGb3IgYW55IHJlZnMgdGhhdCB3ZSBoYXBwZW4gdG8gYmUgZmV0Y2hpbmcgdmlhCisJCSAqIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIHRoZSBkZXN0aW5hdGlvbiByZWYgbWlnaHQKKwkJICogaGF2ZSBiZWVuIG1pc3Npbmcgb3IgaGF2ZSBiZWVuIGRpZmZlcmVudCB0aGFuIHRoZQorCQkgKiByZW1vdGUtdHJhY2tpbmcgcmVmIHRoYXQgd291bGQgYmUgZGVyaXZlZCBmcm9tIHRoZQorCQkgKiBjb25maWd1cmVkIHJlZnNwZWMuICBJbiB0aGVzZSBjYXNlcywgd2Ugd2FudCB0bworCQkgKiB0YWtlIHRoZSBvcHBvcnR1bml0eSB0byB1cGRhdGUgdGhlaXIgY29uZmlndXJlZAorCQkgKiByZW1vdGUtdHJhY2tpbmcgcmVmZXJlbmNlLiAgSG93ZXZlciwgd2UgZG8gbm90IHdhbnQKKwkJICogdG8gbWVudGlvbiB0aGVzZSBlbnRyaWVzIGluIEZFVENIX0hFQUQgYXQgYWxsLCBhcworCQkgKiB0aGV5IHdvdWxkIHNpbXBseSBiZSBkdXBsaWNhdGVzIG9mIGV4aXN0aW5nCisJCSAqIGVudHJpZXMsIHNvIHdlIHNldCB0aGVtIEZFVENIX0hFQURfSUdOT1JFIGJlbG93LgorCQkgKgorCQkgKiBXZSBjb21wdXRlIHRoZXNlIGVudHJpZXMgbm93LCBiYXNlZCBvbmx5IG9uIHRoZQorCQkgKiByZWZzcGVjcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIEJ1dCB3ZSBhZGQKKwkJICogdGhlbSB0byB0aGUgbGlzdCBmb2xsb3dpbmcgdGhlIHJlZnNwZWNzIHJlc3VsdGluZworCQkgKiBmcm9tIHRoZSB0YWdzIG9wdGlvbiBzbyB0aGF0IG9uZSBvZiB0aGUgbGF0dGVyLAorCQkgKiB3aGljaCBoYXMgRkVUQ0hfSEVBRF9OT1RfRk9SX01FUkdFLCBpcyBub3QgcmVtb3ZlZAorCQkgKiBieSByZWZfcmVtb3ZlX2R1cGxpY2F0ZXMoKSBpbiBmYXZvciBvZiBvbmUgb2YgdGhlc2UKKwkJICogb3Bwb3J0dW5pc3RpYyBlbnRyaWVzIHdpdGggRkVUQ0hfSEVBRF9JR05PUkUuCisJCSAqLworCQlpZiAocmVmbWFwX2FycmF5KSB7CisJCQlmZXRjaF9yZWZzcGVjID0gcGFyc2VfZmV0Y2hfcmVmc3BlYyhyZWZtYXBfbnIsIHJlZm1hcF9hcnJheSk7CisJCQlmZXRjaF9yZWZzcGVjX25yID0gcmVmbWFwX25yOworCQl9IGVsc2UgeworCQkJZmV0Y2hfcmVmc3BlYyA9IHRyYW5zcG9ydC0+cmVtb3RlLT5mZXRjaDsKKwkJCWZldGNoX3JlZnNwZWNfbnIgPSB0cmFuc3BvcnQtPnJlbW90ZS0+ZmV0Y2hfcmVmc3BlY19ucjsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBmZXRjaF9yZWZzcGVjX25yOyBpKyspCisJCQlnZXRfZmV0Y2hfbWFwKHJlZl9tYXAsICZmZXRjaF9yZWZzcGVjW2ldLCAmb3JlZl90YWlsLCAxKTsKKworCQlpZiAodGFncyA9PSBUQUdTX1NFVCkKKwkJCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsIHRhZ19yZWZzcGVjLCAmdGFpbCwgMCk7CisJfSBlbHNlIGlmIChyZWZtYXBfYXJyYXkpIHsKKwkJZGllKCItLXJlZm1hcCBvcHRpb24gaXMgb25seSBtZWFuaW5nZnVsIHdpdGggY29tbWFuZC1saW5lIHJlZnNwZWMocykuIik7CisJfSBlbHNlIHsKKwkJLyogVXNlIHRoZSBkZWZhdWx0cyAqLworCQlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSB0cmFuc3BvcnQtPnJlbW90ZTsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwkJaW50IGhhc19tZXJnZSA9IGJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKGJyYW5jaCk7CisJCWlmIChyZW1vdGUgJiYKKwkJICAgIChyZW1vdGUtPmZldGNoX3JlZnNwZWNfbnIgfHwKKwkJICAgICAvKiBOb3RlOiBoYXNfbWVyZ2UgaW1wbGllcyBub24tTlVMTCBicmFuY2gtPnJlbW90ZV9uYW1lICovCisJCSAgICAgKGhhc19tZXJnZSAmJiAhc3RyY21wKGJyYW5jaC0+cmVtb3RlX25hbWUsIHJlbW90ZS0+bmFtZSkpKSkgeworCQkJZm9yIChpID0gMDsgaSA8IHJlbW90ZS0+ZmV0Y2hfcmVmc3BlY19ucjsgaSsrKSB7CisJCQkJZ2V0X2ZldGNoX21hcChyZW1vdGVfcmVmcywgJnJlbW90ZS0+ZmV0Y2hbaV0sICZ0YWlsLCAwKTsKKwkJCQlpZiAocmVtb3RlLT5mZXRjaFtpXS5kc3QgJiYKKwkJCQkgICAgcmVtb3RlLT5mZXRjaFtpXS5kc3RbMF0pCisJCQkJCSphdXRvdGFncyA9IDE7CisJCQkJaWYgKCFpICYmICFoYXNfbWVyZ2UgJiYgcmVmX21hcCAmJgorCQkJCSAgICAhcmVtb3RlLT5mZXRjaFswXS5wYXR0ZXJuKQorCQkJCQlyZWZfbWFwLT5mZXRjaF9oZWFkX3N0YXR1cyA9IEZFVENIX0hFQURfTUVSR0U7CisJCQl9CisJCQkvKgorCQkJICogaWYgdGhlIHJlbW90ZSB3ZSdyZSBmZXRjaGluZyBmcm9tIGlzIHRoZSBzYW1lCisJCQkgKiBhcyBnaXZlbiBpbiBicmFuY2guPG5hbWU+LnJlbW90ZSwgd2UgYWRkIHRoZQorCQkJICogcmVmIGdpdmVuIGluIGJyYW5jaC48bmFtZT4ubWVyZ2UsIHRvby4KKwkJCSAqCisJCQkgKiBOb3RlOiBoYXNfbWVyZ2UgaW1wbGllcyBub24tTlVMTCBicmFuY2gtPnJlbW90ZV9uYW1lCisJCQkgKi8KKwkJCWlmIChoYXNfbWVyZ2UgJiYKKwkJCSAgICAhc3RyY21wKGJyYW5jaC0+cmVtb3RlX25hbWUsIHJlbW90ZS0+bmFtZSkpCisJCQkJYWRkX21lcmdlX2NvbmZpZygmcmVmX21hcCwgcmVtb3RlX3JlZnMsIGJyYW5jaCwgJnRhaWwpOworCQl9IGVsc2UgeworCQkJcmVmX21hcCA9IGdldF9yZW1vdGVfcmVmKHJlbW90ZV9yZWZzLCAiSEVBRCIpOworCQkJaWYgKCFyZWZfbWFwKQorCQkJCWRpZShfKCJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIpKTsKKwkJCXJlZl9tYXAtPmZldGNoX2hlYWRfc3RhdHVzID0gRkVUQ0hfSEVBRF9NRVJHRTsKKwkJCXRhaWwgPSAmcmVmX21hcC0+bmV4dDsKKwkJfQorCX0KKworCWlmICh0YWdzID09IFRBR1NfU0VUKQorCQkvKiBhbHNvIGZldGNoIGFsbCB0YWdzICovCisJCWdldF9mZXRjaF9tYXAocmVtb3RlX3JlZnMsIHRhZ19yZWZzcGVjLCAmdGFpbCwgMCk7CisJZWxzZSBpZiAodGFncyA9PSBUQUdTX0RFRkFVTFQgJiYgKmF1dG90YWdzKQorCQlmaW5kX25vbl9sb2NhbF90YWdzKHRyYW5zcG9ydCwgJnJlZl9tYXAsICZ0YWlsKTsKKworCS8qIE5vdyBhcHBlbmQgYW55IHJlZnMgdG8gYmUgdXBkYXRlZCBvcHBvcnR1bmlzdGljYWxseTogKi8KKwkqdGFpbCA9IG9yZWZzOworCWZvciAocm0gPSBvcmVmczsgcm07IHJtID0gcm0tPm5leHQpIHsKKwkJcm0tPmZldGNoX2hlYWRfc3RhdHVzID0gRkVUQ0hfSEVBRF9JR05PUkU7CisJCXRhaWwgPSAmcm0tPm5leHQ7CisJfQorCisJcmV0dXJuIHJlZl9yZW1vdmVfZHVwbGljYXRlcyhyZWZfbWFwKTsKK30KKworI2RlZmluZSBTVE9SRV9SRUZfRVJST1JfT1RIRVIgMQorI2RlZmluZSBTVE9SRV9SRUZfRVJST1JfREZfQ09ORkxJQ1QgMgorCitzdGF0aWMgaW50IHNfdXBkYXRlX3JlZihjb25zdCBjaGFyICphY3Rpb24sCisJCQlzdHJ1Y3QgcmVmICpyZWYsCisJCQlpbnQgY2hlY2tfb2xkKQoreworCWNoYXIgbXNnWzEwMjRdOworCWNoYXIgKnJsYSA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWludCByZXQsIGRmX2NvbmZsaWN0ID0gMDsKKworCWlmIChkcnlfcnVuKQorCQlyZXR1cm4gMDsKKwlpZiAoIXJsYSkKKwkJcmxhID0gZGVmYXVsdF9ybGEuYnVmOworCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICIlczogJXMiLCBybGEsIGFjdGlvbik7CisKKwl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKKwlpZiAoIXRyYW5zYWN0aW9uIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sIHJlZi0+bmFtZSwKKwkJCQkgICByZWYtPm5ld19zaGExLAorCQkJCSAgIGNoZWNrX29sZCA/IHJlZi0+b2xkX3NoYTEgOiBOVUxMLAorCQkJCSAgIDAsIG1zZywgJmVycikpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpOworCWlmIChyZXQpIHsKKwkJZGZfY29uZmxpY3QgPSAocmV0ID09IFRSQU5TQUNUSU9OX05BTUVfQ09ORkxJQ1QpOworCQlnb3RvIGZhaWw7CisJfQorCisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCXJldHVybiAwOworZmFpbDoKKwlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJcmV0dXJuIGRmX2NvbmZsaWN0ID8gU1RPUkVfUkVGX0VSUk9SX0RGX0NPTkZMSUNUCisJCQkgICA6IFNUT1JFX1JFRl9FUlJPUl9PVEhFUjsKK30KKworI2RlZmluZSBSRUZDT0xfV0lEVEggIDEwCisKK3N0YXRpYyBpbnQgdXBkYXRlX2xvY2FsX3JlZihzdHJ1Y3QgcmVmICpyZWYsCisJCQkgICAgY29uc3QgY2hhciAqcmVtb3RlLAorCQkJICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWYsCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqZGlzcGxheSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjdXJyZW50ID0gTlVMTCwgKnVwZGF0ZWQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXN0cnVjdCBicmFuY2ggKmN1cnJlbnRfYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwljb25zdCBjaGFyICpwcmV0dHlfcmVmID0gcHJldHRpZnlfcmVmbmFtZShyZWYtPm5hbWUpOworCisJdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8ocmVmLT5uZXdfc2hhMSwgTlVMTCk7CisJaWYgKHR5cGUgPCAwKQorCQlkaWUoXygib2JqZWN0ICVzIG5vdCBmb3VuZCIpLCBzaGExX3RvX2hleChyZWYtPm5ld19zaGExKSk7CisKKwlpZiAoIWhhc2hjbXAocmVmLT5vbGRfc2hhMSwgcmVmLT5uZXdfc2hhMSkpIHsKKwkJaWYgKHZlcmJvc2l0eSA+IDApCisJCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiPSAlLSpzICUtKnMgLT4gJXMiLAorCQkJCSAgICBUUkFOU1BPUlRfU1VNTUFSWShfKCJbdXAgdG8gZGF0ZV0iKSksCisJCQkJICAgIFJFRkNPTF9XSURUSCwgcmVtb3RlLCBwcmV0dHlfcmVmKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGN1cnJlbnRfYnJhbmNoICYmCisJICAgICFzdHJjbXAocmVmLT5uYW1lLCBjdXJyZW50X2JyYW5jaC0+bmFtZSkgJiYKKwkgICAgISh1cGRhdGVfaGVhZF9vayB8fCBpc19iYXJlX3JlcG9zaXRvcnkoKSkgJiYKKwkgICAgIWlzX251bGxfc2hhMShyZWYtPm9sZF9zaGExKSkgeworCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBoZWFkLCBhbmQgaXQncyBub3Qgb2theSB0byB1cGRhdGUKKwkJICogdGhlIGhlYWQsIGFuZCB0aGUgb2xkIHZhbHVlIG9mIHRoZSBoZWFkIGlzbid0IGVtcHR5Li4uCisJCSAqLworCQlzdHJidWZfYWRkZihkaXNwbGF5LAorCQkJICAgIF8oIiEgJS0qcyAlLSpzIC0+ICVzICAoY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2gpIiksCisJCQkgICAgVFJBTlNQT1JUX1NVTU1BUlkoXygiW3JlamVjdGVkXSIpKSwKKwkJCSAgICBSRUZDT0xfV0lEVEgsIHJlbW90ZSwgcHJldHR5X3JlZik7CisJCXJldHVybiAxOworCX0KKworCWlmICghaXNfbnVsbF9zaGExKHJlZi0+b2xkX3NoYTEpICYmCisJICAgIHN0YXJ0c193aXRoKHJlZi0+bmFtZSwgInJlZnMvdGFncy8iKSkgeworCQlpbnQgcjsKKwkJciA9IHNfdXBkYXRlX3JlZigidXBkYXRpbmcgdGFnIiwgcmVmLCAwKTsKKwkJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiVjICUtKnMgJS0qcyAtPiAlcyVzIiwKKwkJCSAgICByID8gJyEnIDogJy0nLAorCQkJICAgIFRSQU5TUE9SVF9TVU1NQVJZKF8oIlt0YWcgdXBkYXRlXSIpKSwKKwkJCSAgICBSRUZDT0xfV0lEVEgsIHJlbW90ZSwgcHJldHR5X3JlZiwKKwkJCSAgICByID8gXygiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIikgOiAiIik7CisJCXJldHVybiByOworCX0KKworCWN1cnJlbnQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkocmVmLT5vbGRfc2hhMSwgMSk7CisJdXBkYXRlZCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyZWYtPm5ld19zaGExLCAxKTsKKwlpZiAoIWN1cnJlbnQgfHwgIXVwZGF0ZWQpIHsKKwkJY29uc3QgY2hhciAqbXNnOworCQljb25zdCBjaGFyICp3aGF0OworCQlpbnQgcjsKKwkJLyoKKwkJICogTmljZWx5IGRlc2NyaWJlIHRoZSBuZXcgcmVmIHdlJ3JlIGZldGNoaW5nLgorCQkgKiBCYXNlIHRoaXMgb24gdGhlIHJlbW90ZSdzIHJlZiBuYW1lLCBhcyBpdCdzCisJCSAqIG1vcmUgbGlrZWx5IHRvIGZvbGxvdyBhIHN0YW5kYXJkIGxheW91dC4KKwkJICovCisJCWNvbnN0IGNoYXIgKm5hbWUgPSByZW1vdGVfcmVmID8gcmVtb3RlX3JlZi0+bmFtZSA6ICIiOworCQlpZiAoc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvdGFncy8iKSkgeworCQkJbXNnID0gInN0b3JpbmcgdGFnIjsKKwkJCXdoYXQgPSBfKCJbbmV3IHRhZ10iKTsKKwkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChuYW1lLCAicmVmcy9oZWFkcy8iKSkgeworCQkJbXNnID0gInN0b3JpbmcgaGVhZCI7CisJCQl3aGF0ID0gXygiW25ldyBicmFuY2hdIik7CisJCX0gZWxzZSB7CisJCQltc2cgPSAic3RvcmluZyByZWYiOworCQkJd2hhdCA9IF8oIltuZXcgcmVmXSIpOworCQl9CisKKwkJaWYgKChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX09GRikgJiYKKwkJICAgIChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OKSkKKwkJCWNoZWNrX2Zvcl9uZXdfc3VibW9kdWxlX2NvbW1pdHMocmVmLT5uZXdfc2hhMSk7CisJCXIgPSBzX3VwZGF0ZV9yZWYobXNnLCByZWYsIDApOworCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiJWMgJS0qcyAlLSpzIC0+ICVzJXMiLAorCQkJICAgIHIgPyAnIScgOiAnKicsCisJCQkgICAgVFJBTlNQT1JUX1NVTU1BUlkod2hhdCksCisJCQkgICAgUkVGQ09MX1dJRFRILCByZW1vdGUsIHByZXR0eV9yZWYsCisJCQkgICAgciA/IF8oIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIpIDogIiIpOworCQlyZXR1cm4gcjsKKwl9CisKKwlpZiAoaW5fbWVyZ2VfYmFzZXMoY3VycmVudCwgdXBkYXRlZCkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBxdWlja3JlZiA9IFNUUkJVRl9JTklUOworCQlpbnQgcjsKKwkJc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KCZxdWlja3JlZiwgY3VycmVudC0+b2JqZWN0LnNoYTEsIERFRkFVTFRfQUJCUkVWKTsKKwkJc3RyYnVmX2FkZHN0cigmcXVpY2tyZWYsICIuLiIpOworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJnF1aWNrcmVmLCByZWYtPm5ld19zaGExLCBERUZBVUxUX0FCQlJFVik7CisJCWlmICgocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkYpICYmCisJCSAgICAocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PTikpCisJCQljaGVja19mb3JfbmV3X3N1Ym1vZHVsZV9jb21taXRzKHJlZi0+bmV3X3NoYTEpOworCQlyID0gc191cGRhdGVfcmVmKCJmYXN0LWZvcndhcmQiLCByZWYsIDEpOworCQlzdHJidWZfYWRkZihkaXNwbGF5LCAiJWMgJS0qcyAlLSpzIC0+ICVzJXMiLAorCQkJICAgIHIgPyAnIScgOiAnICcsCisJCQkgICAgVFJBTlNQT1JUX1NVTU1BUllfV0lEVEgsIHF1aWNrcmVmLmJ1ZiwKKwkJCSAgICBSRUZDT0xfV0lEVEgsIHJlbW90ZSwgcHJldHR5X3JlZiwKKwkJCSAgICByID8gXygiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIikgOiAiIik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZxdWlja3JlZik7CisJCXJldHVybiByOworCX0gZWxzZSBpZiAoZm9yY2UgfHwgcmVmLT5mb3JjZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHF1aWNrcmVmID0gU1RSQlVGX0lOSVQ7CisJCWludCByOworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJnF1aWNrcmVmLCBjdXJyZW50LT5vYmplY3Quc2hhMSwgREVGQVVMVF9BQkJSRVYpOworCQlzdHJidWZfYWRkc3RyKCZxdWlja3JlZiwgIi4uLiIpOworCQlzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoJnF1aWNrcmVmLCByZWYtPm5ld19zaGExLCBERUZBVUxUX0FCQlJFVik7CisJCWlmICgocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkYpICYmCisJCSAgICAocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PTikpCisJCQljaGVja19mb3JfbmV3X3N1Ym1vZHVsZV9jb21taXRzKHJlZi0+bmV3X3NoYTEpOworCQlyID0gc191cGRhdGVfcmVmKCJmb3JjZWQtdXBkYXRlIiwgcmVmLCAxKTsKKwkJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiVjICUtKnMgJS0qcyAtPiAlcyAgKCVzKSIsCisJCQkgICAgciA/ICchJyA6ICcrJywKKwkJCSAgICBUUkFOU1BPUlRfU1VNTUFSWV9XSURUSCwgcXVpY2tyZWYuYnVmLAorCQkJICAgIFJFRkNPTF9XSURUSCwgcmVtb3RlLCBwcmV0dHlfcmVmLAorCQkJICAgIHIgPyBfKCJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIpIDogXygiZm9yY2VkIHVwZGF0ZSIpKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnF1aWNrcmVmKTsKKwkJcmV0dXJuIHI7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGYoZGlzcGxheSwgIiEgJS0qcyAlLSpzIC0+ICVzICAlcyIsCisJCQkgICAgVFJBTlNQT1JUX1NVTU1BUlkoXygiW3JlamVjdGVkXSIpKSwKKwkJCSAgICBSRUZDT0xfV0lEVEgsIHJlbW90ZSwgcHJldHR5X3JlZiwKKwkJCSAgICBfKCIobm9uLWZhc3QtZm9yd2FyZCkiKSk7CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIGludCBpdGVyYXRlX3JlZl9tYXAodm9pZCAqY2JfZGF0YSwgdW5zaWduZWQgY2hhciBzaGExWzIwXSkKK3sKKwlzdHJ1Y3QgcmVmICoqcm0gPSBjYl9kYXRhOworCXN0cnVjdCByZWYgKnJlZiA9ICpybTsKKworCXdoaWxlIChyZWYgJiYgcmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfU0hBTExPVykKKwkJcmVmID0gcmVmLT5uZXh0OworCWlmICghcmVmKQorCQlyZXR1cm4gLTE7IC8qIGVuZCBvZiB0aGUgbGlzdCAqLworCSpybSA9IHJlZi0+bmV4dDsKKwloYXNoY3B5KHNoYTEsIHJlZi0+b2xkX3NoYTEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0b3JlX3VwZGF0ZWRfcmVmcyhjb25zdCBjaGFyICpyYXdfdXJsLCBjb25zdCBjaGFyICpyZW1vdGVfbmFtZSwKKwkJc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlGSUxFICpmcDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJaW50IHVybF9sZW4sIGksIHJjID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIG5vdGUgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICp3aGF0LCAqa2luZDsKKwlzdHJ1Y3QgcmVmICpybTsKKwljaGFyICp1cmw7CisJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBkcnlfcnVuID8gIi9kZXYvbnVsbCIgOiBnaXRfcGF0aF9mZXRjaF9oZWFkKCk7CisJaW50IHdhbnRfc3RhdHVzOworCisJZnAgPSBmb3BlbihmaWxlbmFtZSwgImEiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IG9wZW4gJXM6ICVzXG4iKSwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisKKwlpZiAocmF3X3VybCkKKwkJdXJsID0gdHJhbnNwb3J0X2Fub255bWl6ZV91cmwocmF3X3VybCk7CisJZWxzZQorCQl1cmwgPSB4c3RyZHVwKCJmb3JlaWduIik7CisKKwlybSA9IHJlZl9tYXA7CisJaWYgKGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkKGl0ZXJhdGVfcmVmX21hcCwgMCwgJnJtKSkgeworCQlyYyA9IGVycm9yKF8oIiVzIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHNcbiIpLCB1cmwpOworCQlnb3RvIGFib3J0OworCX0KKworCS8qCisJICogV2UgZG8gYSBwYXNzIGZvciBlYWNoIGZldGNoX2hlYWRfc3RhdHVzIHR5cGUgaW4gdGhlaXIgZW51bSBvcmRlciwgc28KKwkgKiBtZXJnZWQgZW50cmllcyBhcmUgd3JpdHRlbiBiZWZvcmUgbm90LWZvci1tZXJnZS4gVGhhdCBsZXRzIHJlYWRlcnMKKwkgKiB1c2UgRkVUQ0hfSEVBRCBhcyBhIHJlZm5hbWUgdG8gcmVmZXIgdG8gdGhlIHJlZiB0byBiZSBtZXJnZWQuCisJICovCisJZm9yICh3YW50X3N0YXR1cyA9IEZFVENIX0hFQURfTUVSR0U7CisJICAgICB3YW50X3N0YXR1cyA8PSBGRVRDSF9IRUFEX0lHTk9SRTsKKwkgICAgIHdhbnRfc3RhdHVzKyspIHsKKwkJZm9yIChybSA9IHJlZl9tYXA7IHJtOyBybSA9IHJtLT5uZXh0KSB7CisJCQlzdHJ1Y3QgcmVmICpyZWYgPSBOVUxMOworCQkJY29uc3QgY2hhciAqbWVyZ2Vfc3RhdHVzX21hcmtlciA9ICIiOworCisJCQlpZiAocm0tPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1JFSkVDVF9TSEFMTE9XKSB7CisJCQkJaWYgKHdhbnRfc3RhdHVzID09IEZFVENIX0hFQURfTUVSR0UpCisJCQkJCXdhcm5pbmcoXygicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIpLAorCQkJCQkJcm0tPnBlZXJfcmVmID8gcm0tPnBlZXJfcmVmLT5uYW1lIDogcm0tPm5hbWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkocm0tPm9sZF9zaGExLCAxKTsKKwkJCWlmICghY29tbWl0KQorCQkJCXJtLT5mZXRjaF9oZWFkX3N0YXR1cyA9IEZFVENIX0hFQURfTk9UX0ZPUl9NRVJHRTsKKworCQkJaWYgKHJtLT5mZXRjaF9oZWFkX3N0YXR1cyAhPSB3YW50X3N0YXR1cykKKwkJCQljb250aW51ZTsKKworCQkJaWYgKHJtLT5wZWVyX3JlZikgeworCQkJCXJlZiA9IGFsbG9jX3JlZihybS0+cGVlcl9yZWYtPm5hbWUpOworCQkJCWhhc2hjcHkocmVmLT5vbGRfc2hhMSwgcm0tPnBlZXJfcmVmLT5vbGRfc2hhMSk7CisJCQkJaGFzaGNweShyZWYtPm5ld19zaGExLCBybS0+b2xkX3NoYTEpOworCQkJCXJlZi0+Zm9yY2UgPSBybS0+cGVlcl9yZWYtPmZvcmNlOworCQkJfQorCisKKwkJCWlmICghc3RyY21wKHJtLT5uYW1lLCAiSEVBRCIpKSB7CisJCQkJa2luZCA9ICIiOworCQkJCXdoYXQgPSAiIjsKKwkJCX0KKwkJCWVsc2UgaWYgKHN0YXJ0c193aXRoKHJtLT5uYW1lLCAicmVmcy9oZWFkcy8iKSkgeworCQkJCWtpbmQgPSAiYnJhbmNoIjsKKwkJCQl3aGF0ID0gcm0tPm5hbWUgKyAxMTsKKwkJCX0KKwkJCWVsc2UgaWYgKHN0YXJ0c193aXRoKHJtLT5uYW1lLCAicmVmcy90YWdzLyIpKSB7CisJCQkJa2luZCA9ICJ0YWciOworCQkJCXdoYXQgPSBybS0+bmFtZSArIDEwOworCQkJfQorCQkJZWxzZSBpZiAoc3RhcnRzX3dpdGgocm0tPm5hbWUsICJyZWZzL3JlbW90ZXMvIikpIHsKKwkJCQlraW5kID0gInJlbW90ZS10cmFja2luZyBicmFuY2giOworCQkJCXdoYXQgPSBybS0+bmFtZSArIDEzOworCQkJfQorCQkJZWxzZSB7CisJCQkJa2luZCA9ICIiOworCQkJCXdoYXQgPSBybS0+bmFtZTsKKwkJCX0KKworCQkJdXJsX2xlbiA9IHN0cmxlbih1cmwpOworCQkJZm9yIChpID0gdXJsX2xlbiAtIDE7IHVybFtpXSA9PSAnLycgJiYgMCA8PSBpOyBpLS0pCisJCQkJOworCQkJdXJsX2xlbiA9IGkgKyAxOworCQkJaWYgKDQgPCBpICYmICFzdHJuY21wKCIuZ2l0IiwgdXJsICsgaSAtIDMsIDQpKQorCQkJCXVybF9sZW4gPSBpIC0gMzsKKworCQkJc3RyYnVmX3Jlc2V0KCZub3RlKTsKKwkJCWlmICgqd2hhdCkgeworCQkJCWlmICgqa2luZCkKKwkJCQkJc3RyYnVmX2FkZGYoJm5vdGUsICIlcyAiLCBraW5kKTsKKwkJCQlzdHJidWZfYWRkZigmbm90ZSwgIiclcycgb2YgIiwgd2hhdCk7CisJCQl9CisJCQlzd2l0Y2ggKHJtLT5mZXRjaF9oZWFkX3N0YXR1cykgeworCQkJY2FzZSBGRVRDSF9IRUFEX05PVF9GT1JfTUVSR0U6CisJCQkJbWVyZ2Vfc3RhdHVzX21hcmtlciA9ICJub3QtZm9yLW1lcmdlIjsKKwkJCQkvKiBmYWxsLXRocm91Z2ggKi8KKwkJCWNhc2UgRkVUQ0hfSEVBRF9NRVJHRToKKwkJCQlmcHJpbnRmKGZwLCAiJXNcdCVzXHQlcyIsCisJCQkJCXNoYTFfdG9faGV4KHJtLT5vbGRfc2hhMSksCisJCQkJCW1lcmdlX3N0YXR1c19tYXJrZXIsCisJCQkJCW5vdGUuYnVmKTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgdXJsX2xlbjsgKytpKQorCQkJCQlpZiAoJ1xuJyA9PSB1cmxbaV0pCisJCQkJCQlmcHV0cygiXFxuIiwgZnApOworCQkJCQllbHNlCisJCQkJCQlmcHV0Yyh1cmxbaV0sIGZwKTsKKwkJCQlmcHV0YygnXG4nLCBmcCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIGRvIG5vdCB3cml0ZSBhbnl0aGluZyB0byBGRVRDSF9IRUFEICovCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXN0cmJ1Zl9yZXNldCgmbm90ZSk7CisJCQlpZiAocmVmKSB7CisJCQkJcmMgfD0gdXBkYXRlX2xvY2FsX3JlZihyZWYsIHdoYXQsIHJtLCAmbm90ZSk7CisJCQkJZnJlZShyZWYpOworCQkJfSBlbHNlCisJCQkJc3RyYnVmX2FkZGYoJm5vdGUsICIqICUtKnMgJS0qcyAtPiBGRVRDSF9IRUFEIiwKKwkJCQkJICAgIFRSQU5TUE9SVF9TVU1NQVJZX1dJRFRILAorCQkJCQkgICAgKmtpbmQgPyBraW5kIDogImJyYW5jaCIsCisJCQkJCSAgICBSRUZDT0xfV0lEVEgsCisJCQkJCSAgICAqd2hhdCA/IHdoYXQgOiAiSEVBRCIpOworCQkJaWYgKG5vdGUubGVuKSB7CisJCQkJaWYgKHZlcmJvc2l0eSA+PSAwICYmICFzaG93bl91cmwpIHsKKwkJCQkJZnByaW50ZihzdGRlcnIsIF8oIkZyb20gJS4qc1xuIiksCisJCQkJCQkJdXJsX2xlbiwgdXJsKTsKKwkJCQkJc2hvd25fdXJsID0gMTsKKwkJCQl9CisJCQkJaWYgKHZlcmJvc2l0eSA+PSAwKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAlc1xuIiwgbm90ZS5idWYpOworCQkJfQorCQl9CisJfQorCisJaWYgKHJjICYgU1RPUkVfUkVGX0VSUk9SX0RGX0NPTkZMSUNUKQorCQllcnJvcihfKCJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisJCSAgICAgICIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyAiCisJCSAgICAgICJicmFuY2hlcyIpLCByZW1vdGVfbmFtZSk7CisKKyBhYm9ydDoKKwlzdHJidWZfcmVsZWFzZSgmbm90ZSk7CisJZnJlZSh1cmwpOworCWZjbG9zZShmcCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogV2Ugd291bGQgd2FudCB0byBieXBhc3MgdGhlIG9iamVjdCB0cmFuc2ZlciBhbHRvZ2V0aGVyIGlmCisgKiBldmVyeXRoaW5nIHdlIGFyZSBnb2luZyB0byBmZXRjaCBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgY29ubmVjdGVkCisgKiBsb2NhbGx5LgorICovCitzdGF0aWMgaW50IHF1aWNrZmV0Y2goc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlzdHJ1Y3QgcmVmICpybSA9IHJlZl9tYXA7CisKKwkvKgorCSAqIElmIHdlIGFyZSBkZWVwZW5pbmcgYSBzaGFsbG93IGNsb25lIHdlIGFscmVhZHkgaGF2ZSB0aGVzZQorCSAqIG9iamVjdHMgcmVhY2hhYmxlLiAgUnVubmluZyByZXYtbGlzdCBoZXJlIHdpbGwgcmV0dXJuIHdpdGgKKwkgKiBhIGdvb2QgKDApIGV4aXQgc3RhdHVzIGFuZCB3ZSdsbCBieXBhc3MgdGhlIGZldGNoIHRoYXQgd2UKKwkgKiByZWFsbHkgbmVlZCB0byBwZXJmb3JtLiAgQ2xhaW1pbmcgZmFpbHVyZSBub3cgd2lsbCBlbnN1cmUKKwkgKiB3ZSBwZXJmb3JtIHRoZSBuZXR3b3JrIGV4Y2hhbmdlIHRvIGRlZXBlbiBvdXIgaGlzdG9yeS4KKwkgKi8KKwlpZiAoZGVwdGgpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gY2hlY2tfZXZlcnl0aGluZ19jb25uZWN0ZWQoaXRlcmF0ZV9yZWZfbWFwLCAxLCAmcm0pOworfQorCitzdGF0aWMgaW50IGZldGNoX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBzdHJ1Y3QgcmVmICpyZWZfbWFwKQoreworCWludCByZXQgPSBxdWlja2ZldGNoKHJlZl9tYXApOworCWlmIChyZXQpCisJCXJldCA9IHRyYW5zcG9ydF9mZXRjaF9yZWZzKHRyYW5zcG9ydCwgcmVmX21hcCk7CisJaWYgKCFyZXQpCisJCXJldCB8PSBzdG9yZV91cGRhdGVkX3JlZnModHJhbnNwb3J0LT51cmwsCisJCQkJdHJhbnNwb3J0LT5yZW1vdGUtPm5hbWUsCisJCQkJcmVmX21hcCk7CisJdHJhbnNwb3J0X3VubG9ja19wYWNrKHRyYW5zcG9ydCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwcnVuZV9yZWZzKHN0cnVjdCByZWZzcGVjICpyZWZzLCBpbnQgcmVmX2NvdW50LCBzdHJ1Y3QgcmVmICpyZWZfbWFwLAorCQljb25zdCBjaGFyICpyYXdfdXJsKQoreworCWludCB1cmxfbGVuLCBpLCByZXN1bHQgPSAwOworCXN0cnVjdCByZWYgKnJlZiwgKnN0YWxlX3JlZnMgPSBnZXRfc3RhbGVfaGVhZHMocmVmcywgcmVmX2NvdW50LCByZWZfbWFwKTsKKwljaGFyICp1cmw7CisJY29uc3QgY2hhciAqZGFuZ2xpbmdfbXNnID0gZHJ5X3J1bgorCQk/IF8oIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiKQorCQk6IF8oIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIpOworCisJaWYgKHJhd191cmwpCisJCXVybCA9IHRyYW5zcG9ydF9hbm9ueW1pemVfdXJsKHJhd191cmwpOworCWVsc2UKKwkJdXJsID0geHN0cmR1cCgiZm9yZWlnbiIpOworCisJdXJsX2xlbiA9IHN0cmxlbih1cmwpOworCWZvciAoaSA9IHVybF9sZW4gLSAxOyB1cmxbaV0gPT0gJy8nICYmIDAgPD0gaTsgaS0tKQorCQk7CisKKwl1cmxfbGVuID0gaSArIDE7CisJaWYgKDQgPCBpICYmICFzdHJuY21wKCIuZ2l0IiwgdXJsICsgaSAtIDMsIDQpKQorCQl1cmxfbGVuID0gaSAtIDM7CisKKwlpZiAoIWRyeV9ydW4pIHsKKwkJc3RydWN0IHN0cmluZ19saXN0IHJlZm5hbWVzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKworCQlmb3IgKHJlZiA9IHN0YWxlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZWZuYW1lcywgcmVmLT5uYW1lKTsKKworCQlyZXN1bHQgPSBkZWxldGVfcmVmcygmcmVmbmFtZXMpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmcmVmbmFtZXMsIDApOworCX0KKworCWlmICh2ZXJib3NpdHkgPj0gMCkgeworCQlmb3IgKHJlZiA9IHN0YWxlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCQlpZiAoIXNob3duX3VybCkgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJGcm9tICUuKnNcbiIpLCB1cmxfbGVuLCB1cmwpOworCQkJCXNob3duX3VybCA9IDE7CisJCQl9CisJCQlmcHJpbnRmKHN0ZGVyciwgIiB4ICUtKnMgJS0qcyAtPiAlc1xuIiwKKwkJCQlUUkFOU1BPUlRfU1VNTUFSWShfKCJbZGVsZXRlZF0iKSksCisJCQkJUkVGQ09MX1dJRFRILCBfKCIobm9uZSkiKSwgcHJldHRpZnlfcmVmbmFtZShyZWYtPm5hbWUpKTsKKwkJCXdhcm5fZGFuZ2xpbmdfc3ltcmVmKHN0ZGVyciwgZGFuZ2xpbmdfbXNnLCByZWYtPm5hbWUpOworCQl9CisJfQorCisJZnJlZSh1cmwpOworCWZyZWVfcmVmcyhzdGFsZV9yZWZzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBjaGVja19ub3RfY3VycmVudF9icmFuY2goc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlzdHJ1Y3QgYnJhbmNoICpjdXJyZW50X2JyYW5jaCA9IGJyYW5jaF9nZXQoTlVMTCk7CisKKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5KCkgfHwgIWN1cnJlbnRfYnJhbmNoKQorCQlyZXR1cm47CisKKwlmb3IgKDsgcmVmX21hcDsgcmVmX21hcCA9IHJlZl9tYXAtPm5leHQpCisJCWlmIChyZWZfbWFwLT5wZWVyX3JlZiAmJiAhc3RyY21wKGN1cnJlbnRfYnJhbmNoLT5yZWZuYW1lLAorCQkJCQlyZWZfbWFwLT5wZWVyX3JlZi0+bmFtZSkpCisJCQlkaWUoXygiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyAiCisJCQkgICAgIm9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiKSwgY3VycmVudF9icmFuY2gtPnJlZm5hbWUpOworfQorCitzdGF0aWMgaW50IHRydW5jYXRlX2ZldGNoX2hlYWQodm9pZCkKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoX2ZldGNoX2hlYWQoKTsKKwlGSUxFICpmcCA9IGZvcGVuKGZpbGVuYW1lLCAidyIpOworCisJaWYgKCFmcCkKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCBvcGVuICVzOiAlc1xuIiksIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCWZjbG9zZShmcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9vcHRpb24oc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpbnQgciA9IHRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgbmFtZSwgdmFsdWUpOworCWlmIChyIDwgMCkKKwkJZGllKF8oIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiKSwKKwkJICAgIG5hbWUsIHZhbHVlLCB0cmFuc3BvcnQtPnVybCk7CisJaWYgKHIgPiAwKQorCQl3YXJuaW5nKF8oIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIpLAorCQkJbmFtZSwgdHJhbnNwb3J0LT51cmwpOworfQorCitzdGF0aWMgc3RydWN0IHRyYW5zcG9ydCAqcHJlcGFyZV90cmFuc3BvcnQoc3RydWN0IHJlbW90ZSAqcmVtb3RlKQoreworCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydDsKKwl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgTlVMTCk7CisJdHJhbnNwb3J0X3NldF92ZXJib3NpdHkodHJhbnNwb3J0LCB2ZXJib3NpdHksIHByb2dyZXNzKTsKKwlpZiAodXBsb2FkX3BhY2spCisJCXNldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVVBMT0FEUEFDSywgdXBsb2FkX3BhY2spOworCWlmIChrZWVwKQorCQlzZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0tFRVAsICJ5ZXMiKTsKKwlpZiAoZGVwdGgpCisJCXNldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfREVQVEgsIGRlcHRoKTsKKwlpZiAodXBkYXRlX3NoYWxsb3cpCisJCXNldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVVBEQVRFX1NIQUxMT1csICJ5ZXMiKTsKKwlyZXR1cm4gdHJhbnNwb3J0OworfQorCitzdGF0aWMgdm9pZCBiYWNrZmlsbF90YWdzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmX21hcCkKK3sKKwlpZiAodHJhbnNwb3J0LT5jYW5ub3RfcmV1c2UpIHsKKwkJZ3NlY29uZGFyeSA9IHByZXBhcmVfdHJhbnNwb3J0KHRyYW5zcG9ydC0+cmVtb3RlKTsKKwkJdHJhbnNwb3J0ID0gZ3NlY29uZGFyeTsKKwl9CisKKwl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9GT0xMT1dUQUdTLCBOVUxMKTsKKwl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9ERVBUSCwgIjAiKTsKKwlmZXRjaF9yZWZzKHRyYW5zcG9ydCwgcmVmX21hcCk7CisKKwlpZiAoZ3NlY29uZGFyeSkgeworCQl0cmFuc3BvcnRfZGlzY29ubmVjdChnc2Vjb25kYXJ5KTsKKwkJZ3NlY29uZGFyeSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGRvX2ZldGNoKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJICAgIHN0cnVjdCByZWZzcGVjICpyZWZzLCBpbnQgcmVmX2NvdW50KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBleGlzdGluZ19yZWZzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHJlZiAqcmVmX21hcDsKKwlzdHJ1Y3QgcmVmICpybTsKKwlpbnQgYXV0b3RhZ3MgPSAodHJhbnNwb3J0LT5yZW1vdGUtPmZldGNoX3RhZ3MgPT0gMSk7CisJaW50IHJldGNvZGUgPSAwOworCisJZm9yX2VhY2hfcmVmKGFkZF9leGlzdGluZywgJmV4aXN0aW5nX3JlZnMpOworCisJaWYgKHRhZ3MgPT0gVEFHU19ERUZBVUxUKSB7CisJCWlmICh0cmFuc3BvcnQtPnJlbW90ZS0+ZmV0Y2hfdGFncyA9PSAyKQorCQkJdGFncyA9IFRBR1NfU0VUOworCQlpZiAodHJhbnNwb3J0LT5yZW1vdGUtPmZldGNoX3RhZ3MgPT0gLTEpCisJCQl0YWdzID0gVEFHU19VTlNFVDsKKwl9CisKKwlpZiAoIXRyYW5zcG9ydC0+Z2V0X3JlZnNfbGlzdCB8fCAhdHJhbnNwb3J0LT5mZXRjaCkKKwkJZGllKF8oIkRvbid0IGtub3cgaG93IHRvIGZldGNoIGZyb20gJXMiKSwgdHJhbnNwb3J0LT51cmwpOworCisJLyogaWYgbm90IGFwcGVuZGluZywgdHJ1bmNhdGUgRkVUQ0hfSEVBRCAqLworCWlmICghYXBwZW5kICYmICFkcnlfcnVuKSB7CisJCXJldGNvZGUgPSB0cnVuY2F0ZV9mZXRjaF9oZWFkKCk7CisJCWlmIChyZXRjb2RlKQorCQkJZ290byBjbGVhbnVwOworCX0KKworCXJlZl9tYXAgPSBnZXRfcmVmX21hcCh0cmFuc3BvcnQsIHJlZnMsIHJlZl9jb3VudCwgdGFncywgJmF1dG90YWdzKTsKKwlpZiAoIXVwZGF0ZV9oZWFkX29rKQorCQljaGVja19ub3RfY3VycmVudF9icmFuY2gocmVmX21hcCk7CisKKwlmb3IgKHJtID0gcmVmX21hcDsgcm07IHJtID0gcm0tPm5leHQpIHsKKwkJaWYgKHJtLT5wZWVyX3JlZikgeworCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnBlZXJfaXRlbSA9CisJCQkJc3RyaW5nX2xpc3RfbG9va3VwKCZleGlzdGluZ19yZWZzLAorCQkJCQkJICAgcm0tPnBlZXJfcmVmLT5uYW1lKTsKKwkJCWlmIChwZWVyX2l0ZW0pIHsKKwkJCQlzdHJ1Y3Qgb2JqZWN0X2lkICpvbGRfb2lkID0gcGVlcl9pdGVtLT51dGlsOworCQkJCWhhc2hjcHkocm0tPnBlZXJfcmVmLT5vbGRfc2hhMSwgb2xkX29pZC0+aGFzaCk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAodGFncyA9PSBUQUdTX0RFRkFVTFQgJiYgYXV0b3RhZ3MpCisJCXRyYW5zcG9ydF9zZXRfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX0ZPTExPV1RBR1MsICIxIik7CisJaWYgKHBydW5lKSB7CisJCS8qCisJCSAqIFdlIG9ubHkgcHJ1bmUgYmFzZWQgb24gcmVmc3BlY3Mgc3BlY2lmaWVkCisJCSAqIGV4cGxpY2l0bHkgKHZpYSBjb21tYW5kIGxpbmUgb3IgY29uZmlndXJhdGlvbik7IHdlCisJCSAqIGRvbid0IGNhcmUgd2hldGhlciAtLXRhZ3Mgd2FzIHNwZWNpZmllZC4KKwkJICovCisJCWlmIChyZWZfY291bnQpIHsKKwkJCXBydW5lX3JlZnMocmVmcywgcmVmX2NvdW50LCByZWZfbWFwLCB0cmFuc3BvcnQtPnVybCk7CisJCX0gZWxzZSB7CisJCQlwcnVuZV9yZWZzKHRyYW5zcG9ydC0+cmVtb3RlLT5mZXRjaCwKKwkJCQkgICB0cmFuc3BvcnQtPnJlbW90ZS0+ZmV0Y2hfcmVmc3BlY19uciwKKwkJCQkgICByZWZfbWFwLAorCQkJCSAgIHRyYW5zcG9ydC0+dXJsKTsKKwkJfQorCX0KKwlpZiAoZmV0Y2hfcmVmcyh0cmFuc3BvcnQsIHJlZl9tYXApKSB7CisJCWZyZWVfcmVmcyhyZWZfbWFwKTsKKwkJcmV0Y29kZSA9IDE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJZnJlZV9yZWZzKHJlZl9tYXApOworCisJLyogaWYgbmVpdGhlciAtLW5vLXRhZ3Mgbm9yIC0tdGFncyB3YXMgc3BlY2lmaWVkLCBkbyBhdXRvbWF0ZWQgdGFnCisJICogZm9sbG93aW5nIC4uLiAqLworCWlmICh0YWdzID09IFRBR1NfREVGQVVMVCAmJiBhdXRvdGFncykgeworCQlzdHJ1Y3QgcmVmICoqdGFpbCA9ICZyZWZfbWFwOworCQlyZWZfbWFwID0gTlVMTDsKKwkJZmluZF9ub25fbG9jYWxfdGFncyh0cmFuc3BvcnQsICZyZWZfbWFwLCAmdGFpbCk7CisJCWlmIChyZWZfbWFwKQorCQkJYmFja2ZpbGxfdGFncyh0cmFuc3BvcnQsIHJlZl9tYXApOworCQlmcmVlX3JlZnMocmVmX21hcCk7CisJfQorCisgY2xlYW51cDoKKwlzdHJpbmdfbGlzdF9jbGVhcigmZXhpc3RpbmdfcmVmcywgMSk7CisJcmV0dXJuIHJldGNvZGU7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29uZV9yZW1vdGVfZm9yX2ZldGNoKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QgPSBwcml2OworCWlmICghcmVtb3RlLT5za2lwX2RlZmF1bHRfdXBkYXRlKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcmVtb3RlLT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlbW90ZV9ncm91cF9kYXRhIHsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3JlbW90ZV9ncm91cChjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCByZW1vdGVfZ3JvdXBfZGF0YSAqZyA9IHByaXY7CisKKwlpZiAoc2tpcF9wcmVmaXgoa2V5LCAicmVtb3Rlcy4iLCAma2V5KSAmJiAhc3RyY21wKGtleSwgZy0+bmFtZSkpIHsKKwkJLyogc3BsaXQgbGlzdCBieSB3aGl0ZSBzcGFjZSAqLworCQl3aGlsZSAoKnZhbHVlKSB7CisJCQlzaXplX3Qgd29yZGxlbiA9IHN0cmNzcG4odmFsdWUsICIgXHRcbiIpOworCisJCQlpZiAod29yZGxlbiA+PSAxKQorCQkJCXN0cmluZ19saXN0X2FwcGVuZChnLT5saXN0LAorCQkJCQkJICAgeHN0cm5kdXAodmFsdWUsIHdvcmRsZW4pKTsKKwkJCXZhbHVlICs9IHdvcmRsZW4gKyAodmFsdWVbd29yZGxlbl0gIT0gJ1wwJyk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZGRfcmVtb3RlX29yX2dyb3VwKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlpbnQgcHJldl9uciA9IGxpc3QtPm5yOworCXN0cnVjdCByZW1vdGVfZ3JvdXBfZGF0YSBnOworCWcubmFtZSA9IG5hbWU7IGcubGlzdCA9IGxpc3Q7CisKKwlnaXRfY29uZmlnKGdldF9yZW1vdGVfZ3JvdXAsICZnKTsKKwlpZiAobGlzdC0+bnIgPT0gcHJldl9ucikgeworCQlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJCWlmICghcmVtb3RlX2lzX2NvbmZpZ3VyZWQobmFtZSkpCisJCQlyZXR1cm4gMDsKKwkJcmVtb3RlID0gcmVtb3RlX2dldChuYW1lKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHJlbW90ZS0+bmFtZSk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBhZGRfb3B0aW9uc190b19hcmd2KHN0cnVjdCBhcmd2X2FycmF5ICphcmd2KQoreworCWlmIChkcnlfcnVuKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi0tZHJ5LXJ1biIpOworCWlmIChwcnVuZSAhPSAtMSkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsIHBydW5lID8gIi0tcHJ1bmUiIDogIi0tbm8tcHJ1bmUiKTsKKwlpZiAodXBkYXRlX2hlYWRfb2spCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS11cGRhdGUtaGVhZC1vayIpOworCWlmIChmb3JjZSkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLWZvcmNlIik7CisJaWYgKGtlZXApCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS1rZWVwIik7CisJaWYgKHJlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT04pCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMiKTsKKwllbHNlIGlmIChyZWN1cnNlX3N1Ym1vZHVsZXMgPT0gUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQiKTsKKwlpZiAodGFncyA9PSBUQUdTX1NFVCkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItLXRhZ3MiKTsKKwllbHNlIGlmICh0YWdzID09IFRBR1NfVU5TRVQpCisJCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiLS1uby10YWdzIik7CisJaWYgKHZlcmJvc2l0eSA+PSAyKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi12Iik7CisJaWYgKHZlcmJvc2l0eSA+PSAxKQorCQlhcmd2X2FycmF5X3B1c2goYXJndiwgIi12Iik7CisJZWxzZSBpZiAodmVyYm9zaXR5IDwgMCkKKwkJYXJndl9hcnJheV9wdXNoKGFyZ3YsICItcSIpOworCit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfbXVsdGlwbGUoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCWludCBpLCByZXN1bHQgPSAwOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwlpZiAoIWFwcGVuZCAmJiAhZHJ5X3J1bikgeworCQlpbnQgZXJyY29kZSA9IHRydW5jYXRlX2ZldGNoX2hlYWQoKTsKKwkJaWYgKGVycmNvZGUpCisJCQlyZXR1cm4gZXJyY29kZTsKKwl9CisKKwlhcmd2X2FycmF5X3B1c2hsKCZhcmd2LCAiZmV0Y2giLCAiLS1hcHBlbmQiLCBOVUxMKTsKKwlhZGRfb3B0aW9uc190b19hcmd2KCZhcmd2KTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBsaXN0LT5pdGVtc1tpXS5zdHJpbmc7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgbmFtZSk7CisJCWlmICh2ZXJib3NpdHkgPj0gMCkKKwkJCXByaW50ZihfKCJGZXRjaGluZyAlc1xuIiksIG5hbWUpOworCQlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndi5hcmd2LCBSVU5fR0lUX0NNRCkpIHsKKwkJCWVycm9yKF8oIkNvdWxkIG5vdCBmZXRjaCAlcyIpLCBuYW1lKTsKKwkJCXJlc3VsdCA9IDE7CisJCX0KKwkJYXJndl9hcnJheV9wb3AoJmFyZ3YpOworCX0KKworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3YpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfb25lKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0YXRpYyBjb25zdCBjaGFyICoqcmVmcyA9IE5VTEw7CisJc3RydWN0IHJlZnNwZWMgKnJlZnNwZWM7CisJaW50IHJlZl9uciA9IDA7CisJaW50IGV4aXRfY29kZTsKKworCWlmICghcmVtb3RlKQorCQlkaWUoXygiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisJCSAgICAicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIpKTsKKworCWd0cmFuc3BvcnQgPSBwcmVwYXJlX3RyYW5zcG9ydChyZW1vdGUpOworCisJaWYgKHBydW5lIDwgMCkgeworCQkvKiBubyBjb21tYW5kIGxpbmUgcmVxdWVzdCAqLworCQlpZiAoMCA8PSBndHJhbnNwb3J0LT5yZW1vdGUtPnBydW5lKQorCQkJcHJ1bmUgPSBndHJhbnNwb3J0LT5yZW1vdGUtPnBydW5lOworCQllbHNlIGlmICgwIDw9IGZldGNoX3BydW5lX2NvbmZpZykKKwkJCXBydW5lID0gZmV0Y2hfcHJ1bmVfY29uZmlnOworCQllbHNlCisJCQlwcnVuZSA9IFBSVU5FX0JZX0RFRkFVTFQ7CisJfQorCisJaWYgKGFyZ2MgPiAwKSB7CisJCWludCBqID0gMDsKKwkJaW50IGk7CisJCXJlZnMgPSB4Y2FsbG9jKGFyZ2MgKyAxLCBzaXplb2YoY29uc3QgY2hhciAqKSk7CisJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJCWlmICghc3RyY21wKGFyZ3ZbaV0sICJ0YWciKSkgeworCQkJCWkrKzsKKwkJCQlpZiAoaSA+PSBhcmdjKQorCQkJCQlkaWUoXygiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIpKTsKKwkJCQlyZWZzW2orK10gPSB4c3RyZm10KCJyZWZzL3RhZ3MvJXM6cmVmcy90YWdzLyVzIiwKKwkJCQkJCSAgICBhcmd2W2ldLCBhcmd2W2ldKTsKKwkJCX0gZWxzZQorCQkJCXJlZnNbaisrXSA9IGFyZ3ZbaV07CisJCX0KKwkJcmVmc1tqXSA9IE5VTEw7CisJCXJlZl9uciA9IGo7CisJfQorCisJc2lnY2hhaW5fcHVzaF9jb21tb24odW5sb2NrX3BhY2tfb25fc2lnbmFsKTsKKwlhdGV4aXQodW5sb2NrX3BhY2spOworCXJlZnNwZWMgPSBwYXJzZV9mZXRjaF9yZWZzcGVjKHJlZl9uciwgcmVmcyk7CisJZXhpdF9jb2RlID0gZG9fZmV0Y2goZ3RyYW5zcG9ydCwgcmVmc3BlYywgcmVmX25yKTsKKwlmcmVlX3JlZnNwZWMocmVmX25yLCByZWZzcGVjKTsKKwl0cmFuc3BvcnRfZGlzY29ubmVjdChndHJhbnNwb3J0KTsKKwlndHJhbnNwb3J0ID0gTlVMTDsKKwlyZXR1cm4gZXhpdF9jb2RlOworfQorCitpbnQgY21kX2ZldGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndl9nY19hdXRvID0gQVJHVl9BUlJBWV9JTklUOworCisJcGFja2V0X3RyYWNlX2lkZW50aXR5KCJmZXRjaCIpOworCisJLyogUmVjb3JkIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZSByZWZsb2cgKi8KKwlzdHJidWZfYWRkc3RyKCZkZWZhdWx0X3JsYSwgImZldGNoIik7CisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKwkJc3RyYnVmX2FkZGYoJmRlZmF1bHRfcmxhLCAiICVzIiwgYXJndltpXSk7CisKKwlnaXRfY29uZmlnKGdpdF9mZXRjaF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LAorCQkJICAgICBidWlsdGluX2ZldGNoX29wdGlvbnMsIGJ1aWx0aW5fZmV0Y2hfdXNhZ2UsIDApOworCisJaWYgKHVuc2hhbGxvdykgeworCQlpZiAoZGVwdGgpCisJCQlkaWUoXygiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiKSk7CisJCWVsc2UgaWYgKCFpc19yZXBvc2l0b3J5X3NoYWxsb3coKSkKKwkJCWRpZShfKCItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIpKTsKKwkJZWxzZQorCQkJZGVwdGggPSB4c3RyZm10KCIlZCIsIElORklOSVRFX0RFUFRIKTsKKwl9CisKKwkvKiBubyBuZWVkIHRvIGJlIHN0cmljdCwgdHJhbnNwb3J0X3NldF9vcHRpb24oKSB3aWxsIHZhbGlkYXRlIGl0IGFnYWluICovCisJaWYgKGRlcHRoICYmIGF0b2koZGVwdGgpIDwgMSkKKwkJZGllKF8oImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIpLCBkZXB0aCk7CisKKwlpZiAocmVjdXJzZV9zdWJtb2R1bGVzICE9IFJFQ1VSU0VfU1VCTU9EVUxFU19PRkYpIHsKKwkJaWYgKHJlY3Vyc2Vfc3VibW9kdWxlc19kZWZhdWx0KSB7CisJCQlpbnQgYXJnID0gcGFyc2VfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzX2FyZygiLS1yZWN1cnNlLXN1Ym1vZHVsZXMtZGVmYXVsdCIsIHJlY3Vyc2Vfc3VibW9kdWxlc19kZWZhdWx0KTsKKwkJCXNldF9jb25maWdfZmV0Y2hfcmVjdXJzZV9zdWJtb2R1bGVzKGFyZyk7CisJCX0KKwkJZ2l0bW9kdWxlc19jb25maWcoKTsKKwkJZ2l0X2NvbmZpZyhzdWJtb2R1bGVfY29uZmlnLCBOVUxMKTsKKwl9CisKKwlpZiAoYWxsKSB7CisJCWlmIChhcmdjID09IDEpCisJCQlkaWUoXygiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiKSk7CisJCWVsc2UgaWYgKGFyZ2MgPiAxKQorCQkJZGllKF8oImZldGNoIC0tYWxsIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugd2l0aCByZWZzcGVjcyIpKTsKKwkJKHZvaWQpIGZvcl9lYWNoX3JlbW90ZShnZXRfb25lX3JlbW90ZV9mb3JfZmV0Y2gsICZsaXN0KTsKKwkJcmVzdWx0ID0gZmV0Y2hfbXVsdGlwbGUoJmxpc3QpOworCX0gZWxzZSBpZiAoYXJnYyA9PSAwKSB7CisJCS8qIE5vIGFyZ3VtZW50cyAtLSB1c2UgZGVmYXVsdCByZW1vdGUgKi8KKwkJcmVtb3RlID0gcmVtb3RlX2dldChOVUxMKTsKKwkJcmVzdWx0ID0gZmV0Y2hfb25lKHJlbW90ZSwgYXJnYywgYXJndik7CisJfSBlbHNlIGlmIChtdWx0aXBsZSkgeworCQkvKiBBbGwgYXJndW1lbnRzIGFyZSBhc3N1bWVkIHRvIGJlIHJlbW90ZXMgb3IgZ3JvdXBzICovCisJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCQlpZiAoIWFkZF9yZW1vdGVfb3JfZ3JvdXAoYXJndltpXSwgJmxpc3QpKQorCQkJCWRpZShfKCJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIiksIGFyZ3ZbaV0pOworCQlyZXN1bHQgPSBmZXRjaF9tdWx0aXBsZSgmbGlzdCk7CisJfSBlbHNlIHsKKwkJLyogU2luZ2xlIHJlbW90ZSBvciBncm91cCAqLworCQkodm9pZCkgYWRkX3JlbW90ZV9vcl9ncm91cChhcmd2WzBdLCAmbGlzdCk7CisJCWlmIChsaXN0Lm5yID4gMSkgeworCQkJLyogTW9yZSB0aGFuIG9uZSByZW1vdGUgKi8KKwkJCWlmIChhcmdjID4gMSkKKwkJCQlkaWUoXygiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIikpOworCQkJcmVzdWx0ID0gZmV0Y2hfbXVsdGlwbGUoJmxpc3QpOworCQl9IGVsc2UgeworCQkJLyogWmVybyBvciBvbmUgcmVtb3RlcyAqLworCQkJcmVtb3RlID0gcmVtb3RlX2dldChhcmd2WzBdKTsKKwkJCXJlc3VsdCA9IGZldGNoX29uZShyZW1vdGUsIGFyZ2MtMSwgYXJndisxKTsKKwkJfQorCX0KKworCWlmICghcmVzdWx0ICYmIChyZWN1cnNlX3N1Ym1vZHVsZXMgIT0gUkVDVVJTRV9TVUJNT0RVTEVTX09GRikpIHsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgb3B0aW9ucyA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCQlhZGRfb3B0aW9uc190b19hcmd2KCZvcHRpb25zKTsKKwkJcmVzdWx0ID0gZmV0Y2hfcG9wdWxhdGVkX3N1Ym1vZHVsZXMoJm9wdGlvbnMsCisJCQkJCQkgICAgc3VibW9kdWxlX3ByZWZpeCwKKwkJCQkJCSAgICByZWN1cnNlX3N1Ym1vZHVsZXMsCisJCQkJCQkgICAgdmVyYm9zaXR5IDwgMCk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJm9wdGlvbnMpOworCX0KKworCS8qIEFsbCBuYW1lcyB3ZXJlIHN0cmR1cCgpZWQgb3Igc3RybmR1cCgpZWQgKi8KKwlsaXN0LnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZhcmd2X2djX2F1dG8sICJnYyIsICItLWF1dG8iLCBOVUxMKTsKKwlpZiAodmVyYm9zaXR5IDwgMCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmd2X2djX2F1dG8sICItLXF1aWV0Iik7CisJcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9nY19hdXRvLmFyZ3YsIFJVTl9HSVRfQ01EKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2X2djX2F1dG8pOworCisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZm10LW1lcmdlLW1zZy5jIGIvYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJhN2YyOAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZm10LW1lcmdlLW1zZy5jCkBAIC0wLDAgKzEsNzE3IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAiZm10LW1lcmdlLW1zZy5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbXRfbWVyZ2VfbXNnX3VzYWdlW10gPSB7CisJTl8oImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHVzZV9icmFuY2hfZGVzYzsKKworaW50IGZtdF9tZXJnZV9tc2dfY29uZmlnKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKGtleSwgIm1lcmdlLmxvZyIpIHx8ICFzdHJjbXAoa2V5LCAibWVyZ2Uuc3VtbWFyeSIpKSB7CisJCWludCBpc19ib29sOworCQltZXJnZV9sb2dfY29uZmlnID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCAmaXNfYm9vbCk7CisJCWlmICghaXNfYm9vbCAmJiBtZXJnZV9sb2dfY29uZmlnIDwgMCkKKwkJCXJldHVybiBlcnJvcigiJXM6IG5lZ2F0aXZlIGxlbmd0aCAlcyIsIGtleSwgdmFsdWUpOworCQlpZiAoaXNfYm9vbCAmJiBtZXJnZV9sb2dfY29uZmlnKQorCQkJbWVyZ2VfbG9nX2NvbmZpZyA9IERFRkFVTFRfTUVSR0VfTE9HX0xFTjsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAibWVyZ2UuYnJhbmNoZGVzYyIpKSB7CisJCXVzZV9icmFuY2hfZGVzYyA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGtleSwgdmFsdWUsIGNiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIG1lcmdlIGRhdGEgcGVyIHJlcG9zaXRvcnkgd2hlcmUgdGhlIG1lcmdlZCB0aXBzIGNhbWUgZnJvbSAqLworc3RydWN0IHNyY19kYXRhIHsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYnJhbmNoLCB0YWcsIHJfYnJhbmNoLCBnZW5lcmljOworCWludCBoZWFkX3N0YXR1czsKK307CisKK3N0cnVjdCBvcmlnaW5fZGF0YSB7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBpc19sb2NhbF9icmFuY2g6MTsKK307CisKK3N0YXRpYyB2b2lkIGluaXRfc3JjX2RhdGEoc3RydWN0IHNyY19kYXRhICpkYXRhKQoreworCWRhdGEtPmJyYW5jaC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJZGF0YS0+dGFnLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlkYXRhLT5yX2JyYW5jaC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJZGF0YS0+Z2VuZXJpYy5zdHJkdXBfc3RyaW5ncyA9IDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3JjcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBvcmlnaW5zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKK3N0cnVjdCBtZXJnZV9wYXJlbnRzIHsKKwlpbnQgYWxsb2MsIG5yOworCXN0cnVjdCBtZXJnZV9wYXJlbnQgeworCQl1bnNpZ25lZCBjaGFyIGdpdmVuWzIwXTsKKwkJdW5zaWduZWQgY2hhciBjb21taXRbMjBdOworCQl1bnNpZ25lZCBjaGFyIHVzZWQ7CisJfSAqaXRlbTsKK307CisKKy8qCisgKiBJIGtub3csIEkga25vdywgdGhpcyBpcyBpbmVmZmljaWVudCwgYnV0IHlvdSB3b24ndCBiZSBwdWxsaW5nIGFuZCBtZXJnaW5nCisgKiBodW5kcmVkcyBvZiBoZWFkcyBhdCBhIHRpbWUgYW55d2F5LgorICovCitzdGF0aWMgc3RydWN0IG1lcmdlX3BhcmVudCAqZmluZF9tZXJnZV9wYXJlbnQoc3RydWN0IG1lcmdlX3BhcmVudHMgKnRhYmxlLAorCQkJCQkgICAgICB1bnNpZ25lZCBjaGFyICpnaXZlbiwKKwkJCQkJICAgICAgdW5zaWduZWQgY2hhciAqY29tbWl0KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCB0YWJsZS0+bnI7IGkrKykgeworCQlpZiAoZ2l2ZW4gJiYgaGFzaGNtcCh0YWJsZS0+aXRlbVtpXS5naXZlbiwgZ2l2ZW4pKQorCQkJY29udGludWU7CisJCWlmIChjb21taXQgJiYgaGFzaGNtcCh0YWJsZS0+aXRlbVtpXS5jb21taXQsIGNvbW1pdCkpCisJCQljb250aW51ZTsKKwkJcmV0dXJuICZ0YWJsZS0+aXRlbVtpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9tZXJnZV9wYXJlbnQoc3RydWN0IG1lcmdlX3BhcmVudHMgKnRhYmxlLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpnaXZlbiwKKwkJCSAgICAgdW5zaWduZWQgY2hhciAqY29tbWl0KQoreworCWlmICh0YWJsZS0+bnIgJiYgZmluZF9tZXJnZV9wYXJlbnQodGFibGUsIGdpdmVuLCBjb21taXQpKQorCQlyZXR1cm47CisJQUxMT0NfR1JPVyh0YWJsZS0+aXRlbSwgdGFibGUtPm5yICsgMSwgdGFibGUtPmFsbG9jKTsKKwloYXNoY3B5KHRhYmxlLT5pdGVtW3RhYmxlLT5ucl0uZ2l2ZW4sIGdpdmVuKTsKKwloYXNoY3B5KHRhYmxlLT5pdGVtW3RhYmxlLT5ucl0uY29tbWl0LCBjb21taXQpOworCXRhYmxlLT5pdGVtW3RhYmxlLT5ucl0udXNlZCA9IDA7CisJdGFibGUtPm5yKys7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2xpbmUoY2hhciAqbGluZSwgc3RydWN0IG1lcmdlX3BhcmVudHMgKm1lcmdlX3BhcmVudHMpCit7CisJaW50IGksIGxlbiA9IHN0cmxlbihsaW5lKTsKKwlzdHJ1Y3Qgb3JpZ2luX2RhdGEgKm9yaWdpbl9kYXRhOworCWNoYXIgKnNyYzsKKwljb25zdCBjaGFyICpvcmlnaW47CisJc3RydWN0IHNyY19kYXRhICpzcmNfZGF0YTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlpbnQgcHVsbGluZ19oZWFkID0gMDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJaWYgKGxlbiA8IDQzIHx8IGxpbmVbNDBdICE9ICdcdCcpCisJCXJldHVybiAxOworCisJaWYgKHN0YXJ0c193aXRoKGxpbmUgKyA0MSwgIm5vdC1mb3ItbWVyZ2UiKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGluZVs0MV0gIT0gJ1x0JykKKwkJcmV0dXJuIDI7CisKKwlpID0gZ2V0X3NoYTFfaGV4KGxpbmUsIHNoYTEpOworCWlmIChpKQorCQlyZXR1cm4gMzsKKworCWlmICghZmluZF9tZXJnZV9wYXJlbnQobWVyZ2VfcGFyZW50cywgc2hhMSwgTlVMTCkpCisJCXJldHVybiAwOyAvKiBzdWJzdW1lZCBieSBvdGhlciBwYXJlbnRzICovCisKKwlvcmlnaW5fZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvcmlnaW5fZGF0YSkpOworCWhhc2hjcHkob3JpZ2luX2RhdGEtPnNoYTEsIHNoYTEpOworCisJaWYgKGxpbmVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJbGluZVtsZW4gLSAxXSA9IDA7CisJbGluZSArPSA0MjsKKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgbGluZSBwb2ludHMgYXQgdGhlIGJlZ2lubmluZyBvZiBjb21tZW50IGUuZy4KKwkgKiAiYnJhbmNoICdmcm90eicgb2YgZ2l0Oi8vdGhhdC9yZXBvc2l0b3J5LmdpdCIuCisJICogRmluZCB0aGUgcmVwb3NpdG9yeSBuYW1lIGFuZCBwb2ludCBpdCB3aXRoIHNyYy4KKwkgKi8KKwlzcmMgPSBzdHJzdHIobGluZSwgIiBvZiAiKTsKKwlpZiAoc3JjKSB7CisJCSpzcmMgPSAwOworCQlzcmMgKz0gNDsKKwkJcHVsbGluZ19oZWFkID0gMDsKKwl9IGVsc2UgeworCQlzcmMgPSBsaW5lOworCQlwdWxsaW5nX2hlYWQgPSAxOworCX0KKworCWl0ZW0gPSB1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoJnNyY3MsIHNyYyk7CisJaWYgKCFpdGVtKSB7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnNyY3MsIHNyYyk7CisJCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3JjX2RhdGEpKTsKKwkJaW5pdF9zcmNfZGF0YShpdGVtLT51dGlsKTsKKwl9CisJc3JjX2RhdGEgPSBpdGVtLT51dGlsOworCisJaWYgKHB1bGxpbmdfaGVhZCkgeworCQlvcmlnaW4gPSBzcmM7CisJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAxOworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZSwgImJyYW5jaCAiKSkgeworCQlvcmlnaW5fZGF0YS0+aXNfbG9jYWxfYnJhbmNoID0gMTsKKwkJb3JpZ2luID0gbGluZSArIDc7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmc3JjX2RhdGEtPmJyYW5jaCwgb3JpZ2luKTsKKwkJc3JjX2RhdGEtPmhlYWRfc3RhdHVzIHw9IDI7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChsaW5lLCAidGFnICIpKSB7CisJCW9yaWdpbiA9IGxpbmU7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmc3JjX2RhdGEtPnRhZywgb3JpZ2luICsgNCk7CisJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAyOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgobGluZSwgInJlbW90ZS10cmFja2luZyBicmFuY2ggIiwgJm9yaWdpbikpIHsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNfZGF0YS0+cl9icmFuY2gsIG9yaWdpbik7CisJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAyOworCX0gZWxzZSB7CisJCW9yaWdpbiA9IHNyYzsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNfZGF0YS0+Z2VuZXJpYywgbGluZSk7CisJCXNyY19kYXRhLT5oZWFkX3N0YXR1cyB8PSAyOworCX0KKworCWlmICghc3RyY21wKCIuIiwgc3JjKSB8fCAhc3RyY21wKHNyYywgb3JpZ2luKSkgeworCQlpbnQgbGVuID0gc3RybGVuKG9yaWdpbik7CisJCWlmIChvcmlnaW5bMF0gPT0gJ1wnJyAmJiBvcmlnaW5bbGVuIC0gMV0gPT0gJ1wnJykKKwkJCW9yaWdpbiA9IHhtZW1kdXB6KG9yaWdpbiArIDEsIGxlbiAtIDIpOworCX0gZWxzZQorCQlvcmlnaW4gPSB4c3RyZm10KCIlcyBvZiAlcyIsIG9yaWdpbiwgc3JjKTsKKwlpZiAoc3RyY21wKCIuIiwgc3JjKSkKKwkJb3JpZ2luX2RhdGEtPmlzX2xvY2FsX2JyYW5jaCA9IDA7CisJc3RyaW5nX2xpc3RfYXBwZW5kKCZvcmlnaW5zLCBvcmlnaW4pLT51dGlsID0gb3JpZ2luX2RhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2pvaW5lZChjb25zdCBjaGFyICpzaW5ndWxhciwgY29uc3QgY2hhciAqcGx1cmFsLAorCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpZiAobGlzdC0+bnIgPT0gMCkKKwkJcmV0dXJuOworCWlmIChsaXN0LT5uciA9PSAxKSB7CisJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzJXMiLCBzaW5ndWxhciwgbGlzdC0+aXRlbXNbMF0uc3RyaW5nKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJc3RyYnVmX2FkZHN0cihvdXQsIHBsdXJhbCk7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5uciAtIDE7IGkrKykKKwkJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzJXMiLCBpID4gMCA/ICIsICIgOiAiIiwKKwkJCQkgICAgbGlzdC0+aXRlbXNbaV0uc3RyaW5nKTsKKwkJc3RyYnVmX2FkZGYob3V0LCAiIGFuZCAlcyIsIGxpc3QtPml0ZW1zW2xpc3QtPm5yIC0gMV0uc3RyaW5nKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9icmFuY2hfZGVzYyhzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN0cmJ1ZiBkZXNjID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIXJlYWRfYnJhbmNoX2Rlc2MoJmRlc2MsIG5hbWUpKSB7CisJCWNvbnN0IGNoYXIgKmJwID0gZGVzYy5idWY7CisJCXdoaWxlICgqYnApIHsKKwkJCWNvbnN0IGNoYXIgKmVwID0gc3RyY2hybnVsKGJwLCAnXG4nKTsKKwkJCWlmICgqZXApCisJCQkJZXArKzsKKwkJCXN0cmJ1Zl9hZGRmKG91dCwgIiAgOiAlLipzIiwgKGludCkoZXAgLSBicCksIGJwKTsKKwkJCWJwID0gZXA7CisJCX0KKwkJc3RyYnVmX2NvbXBsZXRlX2xpbmUob3V0KTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmRlc2MpOworfQorCisjZGVmaW5lIHV0aWxfYXNfaW50ZWdyYWwoZWxlbSkgKChpbnRwdHJfdCkoKGVsZW0pLT51dGlsKSkKKworc3RhdGljIHZvaWQgcmVjb3JkX3BlcnNvbl9mcm9tX2J1ZihpbnQgd2hpY2gsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGVvcGxlLAorCQkJCSAgIGNvbnN0IGNoYXIgKmJ1ZmZlcikKK3sKKwljaGFyICpuYW1lX2J1ZiwgKm5hbWUsICpuYW1lX2VuZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqZWxlbTsKKwljb25zdCBjaGFyICpmaWVsZDsKKworCWZpZWxkID0gKHdoaWNoID09ICdhJykgPyAiXG5hdXRob3IgIiA6ICJcbmNvbW1pdHRlciAiOworCW5hbWUgPSBzdHJzdHIoYnVmZmVyLCBmaWVsZCk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm47CisJbmFtZSArPSBzdHJsZW4oZmllbGQpOworCW5hbWVfZW5kID0gc3RyY2hybnVsKG5hbWUsICc8Jyk7CisJaWYgKCpuYW1lX2VuZCkKKwkJbmFtZV9lbmQtLTsKKwl3aGlsZSAoaXNzcGFjZSgqbmFtZV9lbmQpICYmIG5hbWUgPD0gbmFtZV9lbmQpCisJCW5hbWVfZW5kLS07CisJaWYgKG5hbWVfZW5kIDwgbmFtZSkKKwkJcmV0dXJuOworCW5hbWVfYnVmID0geG1lbWR1cHoobmFtZSwgbmFtZV9lbmQgLSBuYW1lICsgMSk7CisKKwllbGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKHBlb3BsZSwgbmFtZV9idWYpOworCWlmICghZWxlbSkgeworCQllbGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KHBlb3BsZSwgbmFtZV9idWYpOworCQllbGVtLT51dGlsID0gKHZvaWQgKikwOworCX0KKwllbGVtLT51dGlsID0gKHZvaWQqKSh1dGlsX2FzX2ludGVncmFsKGVsZW0pICsgMSk7CisJZnJlZShuYW1lX2J1Zik7Cit9CisKKworc3RhdGljIHZvaWQgcmVjb3JkX3BlcnNvbihpbnQgd2hpY2gsIHN0cnVjdCBzdHJpbmdfbGlzdCAqcGVvcGxlLAorCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJY29uc3QgY2hhciAqYnVmZmVyID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBOVUxMKTsKKwlyZWNvcmRfcGVyc29uX2Zyb21fYnVmKHdoaWNoLCBwZW9wbGUsIGJ1ZmZlcik7CisJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIGJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQgY21wX3N0cmluZ19saXN0X3V0aWxfYXNfaW50ZWdyYWwoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICphID0gYV8sICpiID0gYl87CisJcmV0dXJuIHV0aWxfYXNfaW50ZWdyYWwoYikgLSB1dGlsX2FzX2ludGVncmFsKGEpOworfQorCitzdGF0aWMgdm9pZCBhZGRfcGVvcGxlX2NvdW50KHN0cnVjdCBzdHJidWYgKm91dCwgc3RydWN0IHN0cmluZ19saXN0ICpwZW9wbGUpCit7CisJaWYgKHBlb3BsZS0+bnIgPT0gMSkKKwkJc3RyYnVmX2FkZGYob3V0LCAiJXMiLCBwZW9wbGUtPml0ZW1zWzBdLnN0cmluZyk7CisJZWxzZSBpZiAocGVvcGxlLT5uciA9PSAyKQorCQlzdHJidWZfYWRkZihvdXQsICIlcyAoJWQpIGFuZCAlcyAoJWQpIiwKKwkJCSAgICBwZW9wbGUtPml0ZW1zWzBdLnN0cmluZywKKwkJCSAgICAoaW50KXV0aWxfYXNfaW50ZWdyYWwoJnBlb3BsZS0+aXRlbXNbMF0pLAorCQkJICAgIHBlb3BsZS0+aXRlbXNbMV0uc3RyaW5nLAorCQkJICAgIChpbnQpdXRpbF9hc19pbnRlZ3JhbCgmcGVvcGxlLT5pdGVtc1sxXSkpOworCWVsc2UgaWYgKHBlb3BsZS0+bnIpCisJCXN0cmJ1Zl9hZGRmKG91dCwgIiVzICglZCkgYW5kIG90aGVycyIsCisJCQkgICAgcGVvcGxlLT5pdGVtc1swXS5zdHJpbmcsCisJCQkgICAgKGludCl1dGlsX2FzX2ludGVncmFsKCZwZW9wbGUtPml0ZW1zWzBdKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWRpdF9wZW9wbGUoc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnRoZW0sCisJCQkgIGludCBraW5kKQoreworCWNvbnN0IGNoYXIgKmxhYmVsOworCWNvbnN0IGNoYXIgKm1lOworCisJaWYgKGtpbmQgPT0gJ2EnKSB7CisJCWxhYmVsID0gIkJ5IjsKKwkJbWUgPSBnaXRfYXV0aG9yX2luZm8oSURFTlRfTk9fREFURSk7CisJfSBlbHNlIHsKKwkJbGFiZWwgPSAiVmlhIjsKKwkJbWUgPSBnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfTk9fREFURSk7CisJfQorCisJaWYgKCF0aGVtLT5uciB8fAorCSAgICAodGhlbS0+bnIgPT0gMSAmJgorCSAgICAgbWUgJiYKKwkgICAgIHNraXBfcHJlZml4KG1lLCB0aGVtLT5pdGVtcy0+c3RyaW5nLCAmbWUpICYmCisJICAgICBzdGFydHNfd2l0aChtZSwgIiA8IikpKQorCQlyZXR1cm47CisJc3RyYnVmX2FkZGYob3V0LCAiXG4lYyAlcyAiLCBjb21tZW50X2xpbmVfY2hhciwgbGFiZWwpOworCWFkZF9wZW9wbGVfY291bnQob3V0LCB0aGVtKTsKK30KKworc3RhdGljIHZvaWQgYWRkX3Blb3BsZV9pbmZvKHN0cnVjdCBzdHJidWYgKm91dCwKKwkJCSAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmF1dGhvcnMsCisJCQkgICAgc3RydWN0IHN0cmluZ19saXN0ICpjb21taXR0ZXJzKQoreworCWlmIChhdXRob3JzLT5ucikKKwkJcXNvcnQoYXV0aG9ycy0+aXRlbXMsCisJCSAgICAgIGF1dGhvcnMtPm5yLCBzaXplb2YoYXV0aG9ycy0+aXRlbXNbMF0pLAorCQkgICAgICBjbXBfc3RyaW5nX2xpc3RfdXRpbF9hc19pbnRlZ3JhbCk7CisJaWYgKGNvbW1pdHRlcnMtPm5yKQorCQlxc29ydChjb21taXR0ZXJzLT5pdGVtcywKKwkJICAgICAgY29tbWl0dGVycy0+bnIsIHNpemVvZihjb21taXR0ZXJzLT5pdGVtc1swXSksCisJCSAgICAgIGNtcF9zdHJpbmdfbGlzdF91dGlsX2FzX2ludGVncmFsKTsKKworCWNyZWRpdF9wZW9wbGUob3V0LCBhdXRob3JzLCAnYScpOworCWNyZWRpdF9wZW9wbGUob3V0LCBjb21taXR0ZXJzLCAnYycpOworfQorCitzdGF0aWMgdm9pZCBzaG9ydGxvZyhjb25zdCBjaGFyICpuYW1lLAorCQkgICAgIHN0cnVjdCBvcmlnaW5fZGF0YSAqb3JpZ2luX2RhdGEsCisJCSAgICAgc3RydWN0IGNvbW1pdCAqaGVhZCwKKwkJICAgICBzdHJ1Y3QgcmV2X2luZm8gKnJldiwKKwkJICAgICBzdHJ1Y3QgZm10X21lcmdlX21zZ19vcHRzICpvcHRzLAorCQkgICAgIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpbnQgaSwgY291bnQgPSAwOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgb2JqZWN0ICpicmFuY2g7CisJc3RydWN0IHN0cmluZ19saXN0IHN1YmplY3RzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IGF1dGhvcnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY29tbWl0dGVycyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWludCBmbGFncyA9IFVOSU5URVJFU1RJTkcgfCBUUkVFU0FNRSB8IFNFRU4gfCBTSE9XTiB8IEFEREVEOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gb3JpZ2luX2RhdGEtPnNoYTE7CisJaW50IGxpbWl0ID0gb3B0cy0+c2hvcnRsb2dfbGVuOworCisJYnJhbmNoID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChzaGExKSwgc2hhMV90b19oZXgoc2hhMSksIDQwKTsKKwlpZiAoIWJyYW5jaCB8fCBicmFuY2gtPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuOworCisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsIHJldiwgTlVMTCk7CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldiwgYnJhbmNoLCBuYW1lKTsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2LCAmaGVhZC0+b2JqZWN0LCAiXkhFQUQiKTsKKwloZWFkLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldikpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihyZXYpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisKKwkJaWYgKGNvbW1pdC0+cGFyZW50cyAmJiBjb21taXQtPnBhcmVudHMtPm5leHQpIHsKKwkJCS8qIGRvIG5vdCBsaXN0IGEgbWVyZ2UgYnV0IGNvdW50IGNvbW1pdHRlciAqLworCQkJaWYgKG9wdHMtPmNyZWRpdF9wZW9wbGUpCisJCQkJcmVjb3JkX3BlcnNvbignYycsICZjb21taXR0ZXJzLCBjb21taXQpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFjb3VudCAmJiBvcHRzLT5jcmVkaXRfcGVvcGxlKQorCQkJLyogdGhlICd0aXAnIGNvbW1pdHRlciAqLworCQkJcmVjb3JkX3BlcnNvbignYycsICZjb21taXR0ZXJzLCBjb21taXQpOworCQlpZiAob3B0cy0+Y3JlZGl0X3Blb3BsZSkKKwkJCXJlY29yZF9wZXJzb24oJ2EnLCAmYXV0aG9ycywgY29tbWl0KTsKKwkJY291bnQrKzsKKwkJaWYgKHN1YmplY3RzLm5yID4gbGltaXQpCisJCQljb250aW51ZTsKKworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJXMiLCAmc2IsICZjdHgpOworCQlzdHJidWZfbHRyaW0oJnNiKTsKKworCQlpZiAoIXNiLmxlbikKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmc3ViamVjdHMsCisJCQkJCSAgIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwkJZWxzZQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdWJqZWN0cywgc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpKTsKKwl9CisKKwlpZiAob3B0cy0+Y3JlZGl0X3Blb3BsZSkKKwkJYWRkX3Blb3BsZV9pbmZvKG91dCwgJmF1dGhvcnMsICZjb21taXR0ZXJzKTsKKwlpZiAoY291bnQgPiBsaW1pdCkKKwkJc3RyYnVmX2FkZGYob3V0LCAiXG4qICVzOiAoJWQgY29tbWl0cylcbiIsIG5hbWUsIGNvdW50KTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKG91dCwgIlxuKiAlczpcbiIsIG5hbWUpOworCisJaWYgKG9yaWdpbl9kYXRhLT5pc19sb2NhbF9icmFuY2ggJiYgdXNlX2JyYW5jaF9kZXNjKQorCQlhZGRfYnJhbmNoX2Rlc2Mob3V0LCBuYW1lKTsKKworCWZvciAoaSA9IDA7IGkgPCBzdWJqZWN0cy5ucjsgaSsrKQorCQlpZiAoaSA+PSBsaW1pdCkKKwkJCXN0cmJ1Zl9hZGRmKG91dCwgIiAgLi4uXG4iKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYob3V0LCAiICAlc1xuIiwgc3ViamVjdHMuaXRlbXNbaV0uc3RyaW5nKTsKKworCWNsZWFyX2NvbW1pdF9tYXJrcygoc3RydWN0IGNvbW1pdCAqKWJyYW5jaCwgZmxhZ3MpOworCWNsZWFyX2NvbW1pdF9tYXJrcyhoZWFkLCBmbGFncyk7CisJZnJlZV9jb21taXRfbGlzdChyZXYtPmNvbW1pdHMpOworCXJldi0+Y29tbWl0cyA9IE5VTEw7CisJcmV2LT5wZW5kaW5nLm5yID0gMDsKKworCXN0cmluZ19saXN0X2NsZWFyKCZhdXRob3JzLCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmY29tbWl0dGVycywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJnN1YmplY3RzLCAwKTsKK30KKworc3RhdGljIHZvaWQgZm10X21lcmdlX21zZ190aXRsZShzdHJ1Y3Qgc3RyYnVmICpvdXQsCisJY29uc3QgY2hhciAqY3VycmVudF9icmFuY2gpIHsKKwlpbnQgaSA9IDA7CisJY2hhciAqc2VwID0gIiI7CisKKwlzdHJidWZfYWRkc3RyKG91dCwgIk1lcmdlICIpOworCWZvciAoaSA9IDA7IGkgPCBzcmNzLm5yOyBpKyspIHsKKwkJc3RydWN0IHNyY19kYXRhICpzcmNfZGF0YSA9IHNyY3MuaXRlbXNbaV0udXRpbDsKKwkJY29uc3QgY2hhciAqc3Vic2VwID0gIiI7CisKKwkJc3RyYnVmX2FkZHN0cihvdXQsIHNlcCk7CisJCXNlcCA9ICI7ICI7CisKKwkJaWYgKHNyY19kYXRhLT5oZWFkX3N0YXR1cyA9PSAxKSB7CisJCQlzdHJidWZfYWRkc3RyKG91dCwgc3Jjcy5pdGVtc1tpXS5zdHJpbmcpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNyY19kYXRhLT5oZWFkX3N0YXR1cyA9PSAzKSB7CisJCQlzdWJzZXAgPSAiLCAiOworCQkJc3RyYnVmX2FkZHN0cihvdXQsICJIRUFEIik7CisJCX0KKwkJaWYgKHNyY19kYXRhLT5icmFuY2gubnIpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBzdWJzZXApOworCQkJc3Vic2VwID0gIiwgIjsKKwkJCXByaW50X2pvaW5lZCgiYnJhbmNoICIsICJicmFuY2hlcyAiLCAmc3JjX2RhdGEtPmJyYW5jaCwKKwkJCQkJb3V0KTsKKwkJfQorCQlpZiAoc3JjX2RhdGEtPnJfYnJhbmNoLm5yKSB7CisJCQlzdHJidWZfYWRkc3RyKG91dCwgc3Vic2VwKTsKKwkJCXN1YnNlcCA9ICIsICI7CisJCQlwcmludF9qb2luZWQoInJlbW90ZS10cmFja2luZyBicmFuY2ggIiwgInJlbW90ZS10cmFja2luZyBicmFuY2hlcyAiLAorCQkJCQkmc3JjX2RhdGEtPnJfYnJhbmNoLCBvdXQpOworCQl9CisJCWlmIChzcmNfZGF0YS0+dGFnLm5yKSB7CisJCQlzdHJidWZfYWRkc3RyKG91dCwgc3Vic2VwKTsKKwkJCXN1YnNlcCA9ICIsICI7CisJCQlwcmludF9qb2luZWQoInRhZyAiLCAidGFncyAiLCAmc3JjX2RhdGEtPnRhZywgb3V0KTsKKwkJfQorCQlpZiAoc3JjX2RhdGEtPmdlbmVyaWMubnIpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIob3V0LCBzdWJzZXApOworCQkJcHJpbnRfam9pbmVkKCJjb21taXQgIiwgImNvbW1pdHMgIiwgJnNyY19kYXRhLT5nZW5lcmljLAorCQkJCQlvdXQpOworCQl9CisJCWlmIChzdHJjbXAoIi4iLCBzcmNzLml0ZW1zW2ldLnN0cmluZykpCisJCQlzdHJidWZfYWRkZihvdXQsICIgb2YgJXMiLCBzcmNzLml0ZW1zW2ldLnN0cmluZyk7CisJfQorCisJaWYgKCFzdHJjbXAoIm1hc3RlciIsIGN1cnJlbnRfYnJhbmNoKSkKKwkJc3RyYnVmX2FkZGNoKG91dCwgJ1xuJyk7CisJZWxzZQorCQlzdHJidWZfYWRkZihvdXQsICIgaW50byAlc1xuIiwgY3VycmVudF9icmFuY2gpOworfQorCitzdGF0aWMgdm9pZCBmbXRfdGFnX3NpZ25hdHVyZShzdHJ1Y3Qgc3RyYnVmICp0YWdidWYsCisJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICpzaWcsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwljb25zdCBjaGFyICp0YWdfYm9keSA9IHN0cnN0cihidWYsICJcblxuIik7CisJaWYgKHRhZ19ib2R5KSB7CisJCXRhZ19ib2R5ICs9IDI7CisJCXN0cmJ1Zl9hZGQodGFnYnVmLCB0YWdfYm9keSwgYnVmICsgbGVuIC0gdGFnX2JvZHkpOworCX0KKwlzdHJidWZfY29tcGxldGVfbGluZSh0YWdidWYpOworCWlmIChzaWctPmxlbikgeworCQlzdHJidWZfYWRkY2godGFnYnVmLCAnXG4nKTsKKwkJc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXModGFnYnVmLCBzaWctPmJ1Ziwgc2lnLT5sZW4pOworCX0KK30KKworc3RhdGljIHZvaWQgZm10X21lcmdlX21zZ19zaWdzKHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlpbnQgaSwgdGFnX251bWJlciA9IDAsIGZpcnN0X3RhZyA9IDA7CisJc3RydWN0IHN0cmJ1ZiB0YWdidWYgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoaSA9IDA7IGkgPCBvcmlnaW5zLm5yOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciAqc2hhMSA9IG9yaWdpbnMuaXRlbXNbaV0udXRpbDsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIHNpemUsIGxlbjsKKwkJY2hhciAqYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwkJc3RydWN0IHN0cmJ1ZiBzaWcgPSBTVFJCVUZfSU5JVDsKKworCQlpZiAoIWJ1ZiB8fCB0eXBlICE9IE9CSl9UQUcpCisJCQlnb3RvIG5leHQ7CisJCWxlbiA9IHBhcnNlX3NpZ25hdHVyZShidWYsIHNpemUpOworCisJCWlmIChzaXplID09IGxlbikKKwkJCTsgLyogbWVyZWx5IGFubm90YXRlZCAqLworCQllbHNlIGlmICh2ZXJpZnlfc2lnbmVkX2J1ZmZlcihidWYsIGxlbiwgYnVmICsgbGVuLCBzaXplIC0gbGVuLCAmc2lnLCBOVUxMKSkgeworCQkJaWYgKCFzaWcubGVuKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJnNpZywgImdwZyB2ZXJpZmljYXRpb24gZmFpbGVkLlxuIik7CisJCX0KKworCQlpZiAoIXRhZ19udW1iZXIrKykgeworCQkJZm10X3RhZ19zaWduYXR1cmUoJnRhZ2J1ZiwgJnNpZywgYnVmLCBsZW4pOworCQkJZmlyc3RfdGFnID0gaTsKKwkJfSBlbHNlIHsKKwkJCWlmICh0YWdfbnVtYmVyID09IDIpIHsKKwkJCQlzdHJ1Y3Qgc3RyYnVmIHRhZ2xpbmUgPSBTVFJCVUZfSU5JVDsKKwkJCQlzdHJidWZfYWRkY2goJnRhZ2xpbmUsICdcbicpOworCQkJCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZ0YWdsaW5lLAorCQkJCQkJb3JpZ2lucy5pdGVtc1tmaXJzdF90YWddLnN0cmluZywKKwkJCQkJCXN0cmxlbihvcmlnaW5zLml0ZW1zW2ZpcnN0X3RhZ10uc3RyaW5nKSk7CisJCQkJc3RyYnVmX2luc2VydCgmdGFnYnVmLCAwLCB0YWdsaW5lLmJ1ZiwKKwkJCQkJICAgICAgdGFnbGluZS5sZW4pOworCQkJCXN0cmJ1Zl9yZWxlYXNlKCZ0YWdsaW5lKTsKKwkJCX0KKwkJCXN0cmJ1Zl9hZGRjaCgmdGFnYnVmLCAnXG4nKTsKKwkJCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZ0YWdidWYsCisJCQkJCW9yaWdpbnMuaXRlbXNbaV0uc3RyaW5nLAorCQkJCQlzdHJsZW4ob3JpZ2lucy5pdGVtc1tpXS5zdHJpbmcpKTsKKwkJCWZtdF90YWdfc2lnbmF0dXJlKCZ0YWdidWYsICZzaWcsIGJ1ZiwgbGVuKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmc2lnKTsKKwluZXh0OgorCQlmcmVlKGJ1Zik7CisJfQorCWlmICh0YWdidWYubGVuKSB7CisJCXN0cmJ1Zl9hZGRjaChvdXQsICdcbicpOworCQlzdHJidWZfYWRkYnVmKG91dCwgJnRhZ2J1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZ0YWdidWYpOworfQorCitzdGF0aWMgdm9pZCBmaW5kX21lcmdlX3BhcmVudHMoc3RydWN0IG1lcmdlX3BhcmVudHMgKnJlc3VsdCwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICppbiwgdW5zaWduZWQgY2hhciAqaGVhZCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsICpuZXh0OworCXN0cnVjdCBjb21taXQgKmhlYWRfY29tbWl0OworCWludCBwb3MgPSAwLCBpLCBqOworCisJcGFyZW50cyA9IE5VTEw7CisJd2hpbGUgKHBvcyA8IGluLT5sZW4pIHsKKwkJaW50IGxlbjsKKwkJY2hhciAqcCA9IGluLT5idWYgKyBwb3M7CisJCWNoYXIgKm5ld2xpbmUgPSBzdHJjaHIocCwgJ1xuJyk7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCXN0cnVjdCBjb21taXQgKnBhcmVudDsKKwkJc3RydWN0IG9iamVjdCAqb2JqOworCisJCWxlbiA9IG5ld2xpbmUgPyBuZXdsaW5lIC0gcCA6IHN0cmxlbihwKTsKKwkJcG9zICs9IGxlbiArICEhbmV3bGluZTsKKworCQlpZiAobGVuIDwgNDMgfHwKKwkJICAgIGdldF9zaGExX2hleChwLCBzaGExKSB8fAorCQkgICAgcFs0MF0gIT0gJ1x0JyB8fAorCQkgICAgcFs0MV0gIT0gJ1x0JykKKwkJCWNvbnRpbnVlOyAvKiBza2lwIG5vdC1mb3ItbWVyZ2UgKi8KKwkJLyoKKwkJICogRG8gbm90IHVzZSBnZXRfbWVyZ2VfcGFyZW50KCkgaGVyZTsgd2UgZG8gbm90IGhhdmUKKwkJICogIm5hbWUiIGhlcmUgYW5kIHdlIGRvIG5vdCB3YW50IHRvIGNvbnRhbWluYXRlIGl0cworCQkgKiB1dGlsIGZpZWxkIHlldC4KKwkJICovCisJCW9iaiA9IHBhcnNlX29iamVjdChzaGExKTsKKwkJcGFyZW50ID0gKHN0cnVjdCBjb21taXQgKilwZWVsX3RvX3R5cGUoTlVMTCwgMCwgb2JqLCBPQkpfQ09NTUlUKTsKKwkJaWYgKCFwYXJlbnQpCisJCQljb250aW51ZTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KHBhcmVudCwgJnBhcmVudHMpOworCQlhZGRfbWVyZ2VfcGFyZW50KHJlc3VsdCwgb2JqLT5zaGExLCBwYXJlbnQtPm9iamVjdC5zaGExKTsKKwl9CisJaGVhZF9jb21taXQgPSBsb29rdXBfY29tbWl0KGhlYWQpOworCWlmIChoZWFkX2NvbW1pdCkKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGhlYWRfY29tbWl0LCAmcGFyZW50cyk7CisJcGFyZW50cyA9IHJlZHVjZV9oZWFkcyhwYXJlbnRzKTsKKworCXdoaWxlIChwYXJlbnRzKSB7CisJCWZvciAoaSA9IDA7IGkgPCByZXN1bHQtPm5yOyBpKyspCisJCQlpZiAoIWhhc2hjbXAocmVzdWx0LT5pdGVtW2ldLmNvbW1pdCwKKwkJCQkgICAgIHBhcmVudHMtPml0ZW0tPm9iamVjdC5zaGExKSkKKwkJCQlyZXN1bHQtPml0ZW1baV0udXNlZCA9IDE7CisJCW5leHQgPSBwYXJlbnRzLT5uZXh0OworCQlmcmVlKHBhcmVudHMpOworCQlwYXJlbnRzID0gbmV4dDsKKwl9CisKKwlmb3IgKGkgPSBqID0gMDsgaSA8IHJlc3VsdC0+bnI7IGkrKykgeworCQlpZiAocmVzdWx0LT5pdGVtW2ldLnVzZWQpIHsKKwkJCWlmIChpICE9IGopCisJCQkJcmVzdWx0LT5pdGVtW2pdID0gcmVzdWx0LT5pdGVtW2ldOworCQkJaisrOworCQl9CisJfQorCXJlc3VsdC0+bnIgPSBqOworfQorCitpbnQgZm10X21lcmdlX21zZyhzdHJ1Y3Qgc3RyYnVmICppbiwgc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkgIHN0cnVjdCBmbXRfbWVyZ2VfbXNnX29wdHMgKm9wdHMpCit7CisJaW50IGkgPSAwLCBwb3MgPSAwOworCXVuc2lnbmVkIGNoYXIgaGVhZF9zaGExWzIwXTsKKwljb25zdCBjaGFyICpjdXJyZW50X2JyYW5jaDsKKwl2b2lkICpjdXJyZW50X2JyYW5jaF90b19mcmVlOworCXN0cnVjdCBtZXJnZV9wYXJlbnRzIG1lcmdlX3BhcmVudHM7CisKKwltZW1zZXQoJm1lcmdlX3BhcmVudHMsIDAsIHNpemVvZihtZXJnZV9wYXJlbnRzKSk7CisKKwkvKiBnZXQgY3VycmVudCBicmFuY2ggKi8KKwljdXJyZW50X2JyYW5jaCA9IGN1cnJlbnRfYnJhbmNoX3RvX2ZyZWUgPQorCQlyZXNvbHZlX3JlZmR1cCgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsIGhlYWRfc2hhMSwgTlVMTCk7CisJaWYgKCFjdXJyZW50X2JyYW5jaCkKKwkJZGllKCJObyBjdXJyZW50IGJyYW5jaCIpOworCWlmIChzdGFydHNfd2l0aChjdXJyZW50X2JyYW5jaCwgInJlZnMvaGVhZHMvIikpCisJCWN1cnJlbnRfYnJhbmNoICs9IDExOworCisJZmluZF9tZXJnZV9wYXJlbnRzKCZtZXJnZV9wYXJlbnRzLCBpbiwgaGVhZF9zaGExKTsKKworCS8qIGdldCBhIGxpbmUgKi8KKwl3aGlsZSAocG9zIDwgaW4tPmxlbikgeworCQlpbnQgbGVuOworCQljaGFyICpuZXdsaW5lLCAqcCA9IGluLT5idWYgKyBwb3M7CisKKwkJbmV3bGluZSA9IHN0cmNocihwLCAnXG4nKTsKKwkJbGVuID0gbmV3bGluZSA/IG5ld2xpbmUgLSBwIDogc3RybGVuKHApOworCQlwb3MgKz0gbGVuICsgISFuZXdsaW5lOworCQlpKys7CisJCXBbbGVuXSA9IDA7CisJCWlmIChoYW5kbGVfbGluZShwLCAmbWVyZ2VfcGFyZW50cykpCisJCQlkaWUgKCJFcnJvciBpbiBsaW5lICVkOiAlLipzIiwgaSwgbGVuLCBwKTsKKwl9CisKKwlpZiAob3B0cy0+YWRkX3RpdGxlICYmIHNyY3MubnIpCisJCWZtdF9tZXJnZV9tc2dfdGl0bGUob3V0LCBjdXJyZW50X2JyYW5jaCk7CisKKwlpZiAob3JpZ2lucy5ucikKKwkJZm10X21lcmdlX21zZ19zaWdzKG91dCk7CisKKwlpZiAob3B0cy0+c2hvcnRsb2dfbGVuKSB7CisJCXN0cnVjdCBjb21taXQgKmhlYWQ7CisJCXN0cnVjdCByZXZfaW5mbyByZXY7CisKKwkJaGVhZCA9IGxvb2t1cF9jb21taXRfb3JfZGllKGhlYWRfc2hhMSwgIkhFQUQiKTsKKwkJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJCXJldi5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfT05FTElORTsKKwkJcmV2Lmlnbm9yZV9tZXJnZXMgPSAxOworCQlyZXYubGltaXRlZCA9IDE7CisKKwkJc3RyYnVmX2NvbXBsZXRlX2xpbmUob3V0KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgb3JpZ2lucy5ucjsgaSsrKQorCQkJc2hvcnRsb2cob3JpZ2lucy5pdGVtc1tpXS5zdHJpbmcsCisJCQkJIG9yaWdpbnMuaXRlbXNbaV0udXRpbCwKKwkJCQkgaGVhZCwgJnJldiwgb3B0cywgb3V0KTsKKwl9CisKKwlzdHJidWZfY29tcGxldGVfbGluZShvdXQpOworCWZyZWUoY3VycmVudF9icmFuY2hfdG9fZnJlZSk7CisJZnJlZShtZXJnZV9wYXJlbnRzLml0ZW0pOworCXJldHVybiAwOworfQorCitpbnQgY21kX2ZtdF9tZXJnZV9tc2coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqaW5wYXRoID0gTlVMTDsKKwljb25zdCBjaGFyICptZXNzYWdlID0gTlVMTDsKKwlpbnQgc2hvcnRsb2dfbGVuID0gLTE7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCXsgT1BUSU9OX0lOVEVHRVIsIDAsICJsb2ciLCAmc2hvcnRsb2dfbGVuLCBOXygibiIpLAorCQkgIE5fKCJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCBERUZBVUxUX01FUkdFX0xPR19MRU4gfSwKKwkJeyBPUFRJT05fSU5URUdFUiwgMCwgInN1bW1hcnkiLCAmc2hvcnRsb2dfbGVuLCBOXygibiIpLAorCQkgIE5fKCJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIiksCisJCSAgUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9ISURERU4sIE5VTEwsCisJCSAgREVGQVVMVF9NRVJHRV9MT0dfTEVOIH0sCisJCU9QVF9TVFJJTkcoJ20nLCAibWVzc2FnZSIsICZtZXNzYWdlLCBOXygidGV4dCIpLAorCQkJTl8oInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIpKSwKKwkJT1BUX0ZJTEVOQU1FKCdGJywgImZpbGUiLCAmaW5wYXRoLCBOXygiZmlsZSB0byByZWFkIGZyb20iKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlGSUxFICppbiA9IHN0ZGluOworCXN0cnVjdCBzdHJidWYgaW5wdXQgPSBTVFJCVUZfSU5JVCwgb3V0cHV0ID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKwlzdHJ1Y3QgZm10X21lcmdlX21zZ19vcHRzIG9wdHM7CisKKwlnaXRfY29uZmlnKGZtdF9tZXJnZV9tc2dfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGZtdF9tZXJnZV9tc2dfdXNhZ2UsCisJCQkgICAgIDApOworCWlmIChhcmdjID4gMCkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGZtdF9tZXJnZV9tc2dfdXNhZ2UsIG9wdGlvbnMpOworCWlmIChzaG9ydGxvZ19sZW4gPCAwKQorCQlzaG9ydGxvZ19sZW4gPSAobWVyZ2VfbG9nX2NvbmZpZyA+IDApID8gbWVyZ2VfbG9nX2NvbmZpZyA6IDA7CisKKwlpZiAoaW5wYXRoICYmIHN0cmNtcChpbnBhdGgsICItIikpIHsKKwkJaW4gPSBmb3BlbihpbnBhdGgsICJyIik7CisJCWlmICghaW4pCisJCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuICclcyciLCBpbnBhdGgpOworCX0KKworCWlmIChzdHJidWZfcmVhZCgmaW5wdXQsIGZpbGVubyhpbiksIDApIDwgMCkKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlIik7CisKKwlpZiAobWVzc2FnZSkKKwkJc3RyYnVmX2FkZHN0cigmb3V0cHV0LCBtZXNzYWdlKTsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmFkZF90aXRsZSA9ICFtZXNzYWdlOworCW9wdHMuY3JlZGl0X3Blb3BsZSA9IDE7CisJb3B0cy5zaG9ydGxvZ19sZW4gPSBzaG9ydGxvZ19sZW47CisKKwlyZXQgPSBmbXRfbWVyZ2VfbXNnKCZpbnB1dCwgJm91dHB1dCwgJm9wdHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJd3JpdGVfaW5fZnVsbChTVERPVVRfRklMRU5PLCBvdXRwdXQuYnVmLCBvdXRwdXQubGVuKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZm9yLWVhY2gtcmVmLmMgYi9idWlsdGluL2Zvci1lYWNoLXJlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOWY2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2Zvci1lYWNoLXJlZi5jCkBAIC0wLDAgKzEsODEgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlZi1maWx0ZXIuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBmb3JfZWFjaF9yZWZfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIpLAorCU5fKCJnaXQgZm9yLWVhY2gtcmVmIFstLXBvaW50cy1hdCA8b2JqZWN0Pl0iKSwKKwlOXygiZ2l0IGZvci1lYWNoLXJlZiBbKC0tbWVyZ2VkIHwgLS1uby1tZXJnZWQpIFs8b2JqZWN0Pl1dIiksCisJTl8oImdpdCBmb3ItZWFjaC1yZWYgWy0tY29udGFpbnMgWzxvYmplY3Q+XV0iKSwKKwlOVUxMCit9OworCitpbnQgY21kX2Zvcl9lYWNoX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICpmb3JtYXQgPSAiJShvYmplY3RuYW1lKSAlKG9iamVjdHR5cGUpXHQlKHJlZm5hbWUpIjsKKwlzdHJ1Y3QgcmVmX3NvcnRpbmcgKnNvcnRpbmcgPSBOVUxMLCAqKnNvcnRpbmdfdGFpbCA9ICZzb3J0aW5nOworCWludCBtYXhjb3VudCA9IDAsIHF1b3RlX3N0eWxlID0gMDsKKwlzdHJ1Y3QgcmVmX2FycmF5IGFycmF5OworCXN0cnVjdCByZWZfZmlsdGVyIGZpbHRlcjsKKworCXN0cnVjdCBvcHRpb24gb3B0c1tdID0geworCQlPUFRfQklUKCdzJywgInNoZWxsIiwgJnF1b3RlX3N0eWxlLAorCQkJTl8oInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIiksIFFVT1RFX1NIRUxMKSwKKwkJT1BUX0JJVCgncCcsICJwZXJsIiwgICZxdW90ZV9zdHlsZSwKKwkJCU5fKCJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiKSwgUVVPVEVfUEVSTCksCisJCU9QVF9CSVQoMCAsICJweXRob24iLCAmcXVvdGVfc3R5bGUsCisJCQlOXygicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iKSwgUVVPVEVfUFlUSE9OKSwKKwkJT1BUX0JJVCgwICwgInRjbCIsICAmcXVvdGVfc3R5bGUsCisJCQlOXygicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBUY2wiKSwgUVVPVEVfVENMKSwKKworCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfSU5URUdFUiggMCAsICJjb3VudCIsICZtYXhjb3VudCwgTl8oInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIikpLAorCQlPUFRfU1RSSU5HKCAgMCAsICJmb3JtYXQiLCAmZm9ybWF0LCBOXygiZm9ybWF0IiksIE5fKCJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IikpLAorCQlPUFRfQ0FMTEJBQ0soMCAsICJzb3J0Iiwgc29ydGluZ190YWlsLCBOXygia2V5IiksCisJCQkgICAgTl8oImZpZWxkIG5hbWUgdG8gc29ydCBvbiIpLCAmcGFyc2Vfb3B0X3JlZl9zb3J0aW5nKSwKKwkJT1BUX0NBTExCQUNLKDAsICJwb2ludHMtYXQiLCAmZmlsdGVyLnBvaW50c19hdCwKKwkJCSAgICAgTl8oIm9iamVjdCIpLCBOXygicHJpbnQgb25seSByZWZzIHdoaWNoIHBvaW50cyBhdCB0aGUgZ2l2ZW4gb2JqZWN0IiksCisJCQkgICAgIHBhcnNlX29wdF9vYmplY3RfbmFtZSksCisJCU9QVF9NRVJHRUQoJmZpbHRlciwgTl8oInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBtZXJnZWQiKSksCisJCU9QVF9OT19NRVJHRUQoJmZpbHRlciwgTl8oInByaW50IG9ubHkgcmVmcyB0aGF0IGFyZSBub3QgbWVyZ2VkIikpLAorCQlPUFRfQ09OVEFJTlMoJmZpbHRlci53aXRoX2NvbW1pdCwgTl8oInByaW50IG9ubHkgcmVmcyB3aGljaCBjb250YWluIHRoZSBjb21taXQiKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJbWVtc2V0KCZhcnJheSwgMCwgc2l6ZW9mKGFycmF5KSk7CisJbWVtc2V0KCZmaWx0ZXIsIDAsIHNpemVvZihmaWx0ZXIpKTsKKworCXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCBmb3JfZWFjaF9yZWZfdXNhZ2UsIDApOworCWlmIChtYXhjb3VudCA8IDApIHsKKwkJZXJyb3IoImludmFsaWQgLS1jb3VudCBhcmd1bWVudDogYCVkJyIsIG1heGNvdW50KTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGZvcl9lYWNoX3JlZl91c2FnZSwgb3B0cyk7CisJfQorCWlmIChIQVNfTVVMVElfQklUUyhxdW90ZV9zdHlsZSkpIHsKKwkJZXJyb3IoIm1vcmUgdGhhbiBvbmUgcXVvdGluZyBzdHlsZT8iKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGZvcl9lYWNoX3JlZl91c2FnZSwgb3B0cyk7CisJfQorCWlmICh2ZXJpZnlfcmVmX2Zvcm1hdChmb3JtYXQpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZm9yX2VhY2hfcmVmX3VzYWdlLCBvcHRzKTsKKworCWlmICghc29ydGluZykKKwkJc29ydGluZyA9IHJlZl9kZWZhdWx0X3NvcnRpbmcoKTsKKworCS8qIGZvciB3YXJuX2FtYmlndW91c19yZWZzICovCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJZmlsdGVyLm5hbWVfcGF0dGVybnMgPSBhcmd2OworCWZpbHRlci5tYXRjaF9hc19wYXRoID0gMTsKKwlmaWx0ZXJfcmVmcygmYXJyYXksICZmaWx0ZXIsIEZJTFRFUl9SRUZTX0FMTCB8IEZJTFRFUl9SRUZTX0lOQ0xVREVfQlJPS0VOKTsKKwlyZWZfYXJyYXlfc29ydChzb3J0aW5nLCAmYXJyYXkpOworCisJaWYgKCFtYXhjb3VudCB8fCBhcnJheS5uciA8IG1heGNvdW50KQorCQltYXhjb3VudCA9IGFycmF5Lm5yOworCWZvciAoaSA9IDA7IGkgPCBtYXhjb3VudDsgaSsrKQorCQlzaG93X3JlZl9hcnJheV9pdGVtKGFycmF5Lml0ZW1zW2ldLCBmb3JtYXQsIHF1b3RlX3N0eWxlKTsKKwlyZWZfYXJyYXlfY2xlYXIoJmFycmF5KTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZnNjay5jIGIvYnVpbHRpbi9mc2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4YmI0MgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZnNjay5jCkBAIC0wLDAgKzEsNjk1IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJmc2NrLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAic3RyZWFtaW5nLmgiCisKKyNkZWZpbmUgUkVBQ0hBQkxFIDB4MDAwMQorI2RlZmluZSBTRUVOICAgICAgMHgwMDAyCisjZGVmaW5lIEhBU19PQkogICAweDAwMDQKKworc3RhdGljIGludCBzaG93X3Jvb3Q7CitzdGF0aWMgaW50IHNob3dfdGFnczsKK3N0YXRpYyBpbnQgc2hvd191bnJlYWNoYWJsZTsKK3N0YXRpYyBpbnQgaW5jbHVkZV9yZWZsb2dzID0gMTsKK3N0YXRpYyBpbnQgY2hlY2tfZnVsbCA9IDE7CitzdGF0aWMgaW50IGNvbm5lY3Rpdml0eV9vbmx5Oworc3RhdGljIGludCBjaGVja19zdHJpY3Q7CitzdGF0aWMgaW50IGtlZXBfY2FjaGVfb2JqZWN0czsKK3N0YXRpYyBzdHJ1Y3QgZnNja19vcHRpb25zIGZzY2tfd2Fsa19vcHRpb25zID0gRlNDS19PUFRJT05TX0RFRkFVTFQ7CitzdGF0aWMgc3RydWN0IGZzY2tfb3B0aW9ucyBmc2NrX29ial9vcHRpb25zID0gRlNDS19PUFRJT05TX0RFRkFVTFQ7CitzdGF0aWMgc3RydWN0IG9iamVjdF9pZCBoZWFkX29pZDsKK3N0YXRpYyBjb25zdCBjaGFyICpoZWFkX3BvaW50c19hdDsKK3N0YXRpYyBpbnQgZXJyb3JzX2ZvdW5kOworc3RhdGljIGludCB3cml0ZV9sb3N0X2FuZF9mb3VuZDsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgc2hvd19wcm9ncmVzcyA9IC0xOworc3RhdGljIGludCBzaG93X2RhbmdsaW5nID0gMTsKKyNkZWZpbmUgRVJST1JfT0JKRUNUIDAxCisjZGVmaW5lIEVSUk9SX1JFQUNIQUJMRSAwMgorI2RlZmluZSBFUlJPUl9QQUNLIDA0CisjZGVmaW5lIEVSUk9SX1JFRlMgMDEwCisKK3N0YXRpYyBpbnQgZnNja19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKHN0cmNtcCh2YXIsICJmc2NrLnNraXBsaXN0IikgPT0gMCkgeworCQljb25zdCBjaGFyICpwYXRoOworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKGdpdF9jb25maWdfcGF0aG5hbWUoJnBhdGgsIHZhciwgdmFsdWUpKQorCQkJcmV0dXJuIDE7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgInNraXBsaXN0PSVzIiwgcGF0aCk7CisJCWZyZWUoKGNoYXIgKilwYXRoKTsKKwkJZnNja19zZXRfbXNnX3R5cGVzKCZmc2NrX29ial9vcHRpb25zLCBzYi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAiZnNjay4iLCAmdmFyKSkgeworCQlmc2NrX3NldF9tc2dfdHlwZSgmZnNja19vYmpfb3B0aW9ucywgdmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgdm9pZCBvYmpyZXBvcnQoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICptc2dfdHlwZSwKKwkJCWNvbnN0IGNoYXIgKmVycikKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiVzIGluICVzICVzOiAlc1xuIiwKKwkJbXNnX3R5cGUsIHR5cGVuYW1lKG9iai0+dHlwZSksIHNoYTFfdG9faGV4KG9iai0+c2hhMSksIGVycik7Cit9CisKK3N0YXRpYyBpbnQgb2JqZXJyb3Ioc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplcnIpCit7CisJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX09CSkVDVDsKKwlvYmpyZXBvcnQob2JqLCAiZXJyb3IiLCBlcnIpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBmc2NrX2Vycm9yX2Z1bmMoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlvYmpyZXBvcnQob2JqLCAodHlwZSA9PSBGU0NLX1dBUk4pID8gIndhcm5pbmciIDogImVycm9yIiwgbWVzc2FnZSk7CisJcmV0dXJuICh0eXBlID09IEZTQ0tfV0FSTikgPyAwIDogMTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfYXJyYXkgcGVuZGluZzsKKworc3RhdGljIGludCBtYXJrX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCXN0cnVjdCBvYmplY3QgKnBhcmVudCA9IGRhdGE7CisKKwkvKgorCSAqIFRoZSBvbmx5IGNhc2UgZGF0YSBpcyBOVUxMIG9yIHR5cGUgaXMgT0JKX0FOWSBpcyB3aGVuCisJICogbWFya19vYmplY3RfcmVhY2hhYmxlKCkgY2FsbHMgdXMuICBBbGwgdGhlIGNhbGxlcnMgb2YKKwkgKiB0aGF0IGZ1bmN0aW9uIGhhcyBub24tTlVMTCBvYmogaGVuY2UgLi4uCisJICovCisJaWYgKCFvYmopIHsKKwkJLyogLi4uIHRoZXNlIHJlZmVyZW5jZXMgdG8gcGFyZW50LT5mbGQgYXJlIHNhZmUgaGVyZSAqLworCQlwcmludGYoImJyb2tlbiBsaW5rIGZyb20gJTdzICVzXG4iLAorCQkJICAgdHlwZW5hbWUocGFyZW50LT50eXBlKSwgc2hhMV90b19oZXgocGFyZW50LT5zaGExKSk7CisJCXByaW50ZigiYnJva2VuIGxpbmsgZnJvbSAlN3MgJXNcbiIsCisJCQkgICAodHlwZSA9PSBPQkpfQU5ZID8gInVua25vd24iIDogdHlwZW5hbWUodHlwZSkpLCAidW5rbm93biIpOworCQllcnJvcnNfZm91bmQgfD0gRVJST1JfUkVBQ0hBQkxFOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAodHlwZSAhPSBPQkpfQU5ZICYmIG9iai0+dHlwZSAhPSB0eXBlKQorCQkvKiAuLi4gYW5kIHRoZSByZWZlcmVuY2UgdG8gcGFyZW50IGlzIHNhZmUgaGVyZSAqLworCQlvYmplcnJvcihwYXJlbnQsICJ3cm9uZyBvYmplY3QgdHlwZSBpbiBsaW5rIik7CisKKwlpZiAob2JqLT5mbGFncyAmIFJFQUNIQUJMRSkKKwkJcmV0dXJuIDA7CisJb2JqLT5mbGFncyB8PSBSRUFDSEFCTEU7CisJaWYgKCEob2JqLT5mbGFncyAmIEhBU19PQkopKSB7CisJCWlmIChwYXJlbnQgJiYgIWhhc19zaGExX2ZpbGUob2JqLT5zaGExKSkgeworCQkJcHJpbnRmKCJicm9rZW4gbGluayBmcm9tICU3cyAlc1xuIiwKKwkJCQkgdHlwZW5hbWUocGFyZW50LT50eXBlKSwgc2hhMV90b19oZXgocGFyZW50LT5zaGExKSk7CisJCQlwcmludGYoIiAgICAgICAgICAgICAgdG8gJTdzICVzXG4iLAorCQkJCSB0eXBlbmFtZShvYmotPnR5cGUpLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwkJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUFDSEFCTEU7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCisJYWRkX29iamVjdF9hcnJheShvYmosIE5VTEwsICZwZW5kaW5nKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWFya19vYmplY3RfcmVhY2hhYmxlKHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwltYXJrX29iamVjdChvYmosIE9CSl9BTlksIE5VTEwsIE5VTEwpOworfQorCitzdGF0aWMgaW50IHRyYXZlcnNlX29uZV9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQoreworCWludCByZXN1bHQ7CisJc3RydWN0IHRyZWUgKnRyZWUgPSBOVUxMOworCisJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgeworCQl0cmVlID0gKHN0cnVjdCB0cmVlICopb2JqOworCQlpZiAocGFyc2VfdHJlZSh0cmVlKSA8IDApCisJCQlyZXR1cm4gMTsgLyogZXJyb3IgYWxyZWFkeSBkaXNwbGF5ZWQgKi8KKwl9CisJcmVzdWx0ID0gZnNja193YWxrKG9iaiwgb2JqLCAmZnNja193YWxrX29wdGlvbnMpOworCWlmICh0cmVlKQorCQlmcmVlX3RyZWVfYnVmZmVyKHRyZWUpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgdHJhdmVyc2VfcmVhY2hhYmxlKHZvaWQpCit7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisJdW5zaWduZWQgaW50IG5yID0gMDsKKwlpbnQgcmVzdWx0ID0gMDsKKwlpZiAoc2hvd19wcm9ncmVzcykKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzc19kZWxheShfKCJDaGVja2luZyBjb25uZWN0aXZpdHkiKSwgMCwgMCwgMik7CisJd2hpbGUgKHBlbmRpbmcubnIpIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50cnk7CisJCXN0cnVjdCBvYmplY3QgKm9iajsKKworCQllbnRyeSA9IHBlbmRpbmcub2JqZWN0cyArIC0tcGVuZGluZy5ucjsKKwkJb2JqID0gZW50cnktPml0ZW07CisJCXJlc3VsdCB8PSB0cmF2ZXJzZV9vbmVfb2JqZWN0KG9iaik7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrbnIpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisJcmV0dXJuICEhcmVzdWx0OworfQorCitzdGF0aWMgaW50IG1hcmtfdXNlZChzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWlmICghb2JqKQorCQlyZXR1cm4gMTsKKwlvYmotPnVzZWQgPSAxOworCXJldHVybiAwOworfQorCisvKgorICogQ2hlY2sgYSBzaW5nbGUgcmVhY2hhYmxlIG9iamVjdAorICovCitzdGF0aWMgdm9pZCBjaGVja19yZWFjaGFibGVfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwkvKgorCSAqIFdlIG9idmlvdXNseSB3YW50IHRoZSBvYmplY3QgdG8gYmUgcGFyc2VkLAorCSAqIGV4Y2VwdCBpZiBpdCB3YXMgaW4gYSBwYWNrLWZpbGUgYW5kIHdlIGRpZG4ndAorCSAqIGRvIGEgZnVsbCBmc2NrCisJICovCisJaWYgKCEob2JqLT5mbGFncyAmIEhBU19PQkopKSB7CisJCWlmIChoYXNfc2hhMV9wYWNrKG9iai0+c2hhMSkpCisJCQlyZXR1cm47IC8qIGl0IGlzIGluIHBhY2sgLSBmb3JnZXQgYWJvdXQgaXQgKi8KKwkJaWYgKGNvbm5lY3Rpdml0eV9vbmx5ICYmIGhhc19zaGExX2ZpbGUob2JqLT5zaGExKSkKKwkJCXJldHVybjsKKwkJcHJpbnRmKCJtaXNzaW5nICVzICVzXG4iLCB0eXBlbmFtZShvYmotPnR5cGUpLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX1JFQUNIQUJMRTsKKwkJcmV0dXJuOworCX0KK30KKworLyoKKyAqIENoZWNrIGEgc2luZ2xlIHVucmVhY2hhYmxlIG9iamVjdAorICovCitzdGF0aWMgdm9pZCBjaGVja191bnJlYWNoYWJsZV9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQoreworCS8qCisJICogTWlzc2luZyB1bnJlYWNoYWJsZSBvYmplY3Q/IElnbm9yZSBpdC4gSXQncyBub3QgbGlrZQorCSAqIHdlIG1pc3MgaXQgKHNpbmNlIGl0IGNhbid0IGJlIHJlYWNoZWQpLCBub3IgZG8gd2Ugd2FudAorCSAqIHRvIGNvbXBsYWluIGFib3V0IGl0IGJlaW5nIHVucmVhY2hhYmxlIChzaW5jZSBpdCBkb2VzCisJICogbm90IGV4aXN0KS4KKwkgKi8KKwlpZiAoIW9iai0+cGFyc2VkKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVucmVhY2hhYmxlIG9iamVjdCB0aGF0IGV4aXN0cz8gU2hvdyBpdCBpZiBhc2tlZCB0bywKKwkgKiBzaW5jZSB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IGlzIHBydW5hYmxlLgorCSAqLworCWlmIChzaG93X3VucmVhY2hhYmxlKSB7CisJCXByaW50ZigidW5yZWFjaGFibGUgJXMgJXNcbiIsIHR5cGVuYW1lKG9iai0+dHlwZSksIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiAiIXVzZWQiIG1lYW5zIHRoYXQgbm90aGluZyBhdCBhbGwgcG9pbnRzIHRvIGl0LCBpbmNsdWRpbmcKKwkgKiBvdGhlciB1bnJlYWNoYWJsZSBvYmplY3RzLiBJbiBvdGhlciB3b3JkcywgaXQncyB0aGUgInRpcCIKKwkgKiBvZiBzb21lIHNldCBvZiB1bnJlYWNoYWJsZSBvYmplY3RzLCB1c3VhbGx5IGEgY29tbWl0IHRoYXQKKwkgKiBnb3QgZHJvcHBlZC4KKwkgKgorCSAqIFN1Y2ggc3RhcnRpbmcgcG9pbnRzIGFyZSBtb3JlIGludGVyZXN0aW5nIHRoYW4gc29tZSByYW5kb20KKwkgKiBzZXQgb2YgdW5yZWFjaGFibGUgb2JqZWN0cywgc28gd2Ugc2hvdyB0aGVtIGV2ZW4gaWYgdGhlIHVzZXIKKwkgKiBoYXNuJ3QgYXNrZWQgZm9yIF9hbGxfIHVucmVhY2hhYmxlIG9iamVjdHMuIElmIHlvdSBoYXZlCisJICogZGVsZXRlZCBhIGJyYW5jaCBieSBtaXN0YWtlLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIHRvCisJICogc3RhcnQgbG9va2luZyBhdCwgZm9yIGV4YW1wbGUuCisJICovCisJaWYgKCFvYmotPnVzZWQpIHsKKwkJaWYgKHNob3dfZGFuZ2xpbmcpCisJCQlwcmludGYoImRhbmdsaW5nICVzICVzXG4iLCB0eXBlbmFtZShvYmotPnR5cGUpLAorCQkJICAgICAgIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCQlpZiAod3JpdGVfbG9zdF9hbmRfZm91bmQpIHsKKwkJCWNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGhkdXAoImxvc3QtZm91bmQvJXMvJXMiLAorCQkJCW9iai0+dHlwZSA9PSBPQkpfQ09NTUlUID8gImNvbW1pdCIgOiAib3RoZXIiLAorCQkJCXNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCQkJRklMRSAqZjsKKworCQkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoZmlsZW5hbWUpKSB7CisJCQkJZXJyb3IoIkNvdWxkIG5vdCBjcmVhdGUgbG9zdC1mb3VuZCIpOworCQkJCWZyZWUoZmlsZW5hbWUpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmICghKGYgPSBmb3BlbihmaWxlbmFtZSwgInciKSkpCisJCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAnJXMnIiwgZmlsZW5hbWUpOworCQkJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgeworCQkJCWlmIChzdHJlYW1fYmxvYl90b19mZChmaWxlbm8oZiksIG9iai0+c2hhMSwgTlVMTCwgMSkpCisJCQkJCWRpZV9lcnJubygiQ291bGQgbm90IHdyaXRlICclcyciLCBmaWxlbmFtZSk7CisJCQl9IGVsc2UKKwkJCQlmcHJpbnRmKGYsICIlc1xuIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJCQlpZiAoZmNsb3NlKGYpKQorCQkJCWRpZV9lcnJubygiQ291bGQgbm90IGZpbmlzaCAnJXMnIiwKKwkJCQkJICBmaWxlbmFtZSk7CisJCQlmcmVlKGZpbGVuYW1lKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBPdGhlcndpc2U/IEl0J3MgdGhlcmUsIGl0J3MgdW5yZWFjaGFibGUsIGFuZCBzb21lIG90aGVyIHVucmVhY2hhYmxlCisJICogb2JqZWN0IHBvaW50cyB0byBpdC4gSWdub3JlIGl0IC0gaXQncyBub3QgaW50ZXJlc3RpbmcsIGFuZCB3ZSBzaG93ZWQKKwkgKiBhbGwgdGhlIGludGVyZXN0aW5nIGNhc2VzIGFib3ZlLgorCSAqLworfQorCitzdGF0aWMgdm9pZCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqKQoreworCWlmICh2ZXJib3NlKQorCQlmcHJpbnRmKHN0ZGVyciwgIkNoZWNraW5nICVzXG4iLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKworCWlmIChvYmotPmZsYWdzICYgUkVBQ0hBQkxFKQorCQljaGVja19yZWFjaGFibGVfb2JqZWN0KG9iaik7CisJZWxzZQorCQljaGVja191bnJlYWNoYWJsZV9vYmplY3Qob2JqKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfY29ubmVjdGl2aXR5KHZvaWQpCit7CisJaW50IGksIG1heDsKKworCS8qIFRyYXZlcnNlIHRoZSBwZW5kaW5nIHJlYWNoYWJsZSBvYmplY3RzICovCisJdHJhdmVyc2VfcmVhY2hhYmxlKCk7CisKKwkvKiBMb29rIHVwIGFsbCB0aGUgcmVxdWlyZW1lbnRzLCB3YXJuIGFib3V0IG1pc3Npbmcgb2JqZWN0cy4uICovCisJbWF4ID0gZ2V0X21heF9vYmplY3RfaW5kZXgoKTsKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICJDaGVja2luZyBjb25uZWN0aXZpdHkgKCVkIG9iamVjdHMpXG4iLCBtYXgpOworCisJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iaiA9IGdldF9pbmRleGVkX29iamVjdChpKTsKKworCQlpZiAob2JqKQorCQkJY2hlY2tfb2JqZWN0KG9iaik7CisJfQorfQorCitzdGF0aWMgaW50IGZzY2tfb2JqKHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwlpZiAob2JqLT5mbGFncyAmIFNFRU4pCisJCXJldHVybiAwOworCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKworCWlmICh2ZXJib3NlKQorCQlmcHJpbnRmKHN0ZGVyciwgIkNoZWNraW5nICVzICVzXG4iLAorCQkJdHlwZW5hbWUob2JqLT50eXBlKSwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisKKwlpZiAoZnNja193YWxrKG9iaiwgTlVMTCwgJmZzY2tfb2JqX29wdGlvbnMpKQorCQlvYmplcnJvcihvYmosICJicm9rZW4gbGlua3MiKTsKKwlpZiAoZnNja19vYmplY3Qob2JqLCBOVUxMLCAwLCAmZnNja19vYmpfb3B0aW9ucykpCisJCXJldHVybiAtMTsKKworCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJc3RydWN0IHRyZWUgKml0ZW0gPSAoc3RydWN0IHRyZWUgKikgb2JqOworCisJCWZyZWVfdHJlZV9idWZmZXIoaXRlbSk7CisJfQorCisJaWYgKG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopIG9iajsKKworCQlmcmVlX2NvbW1pdF9idWZmZXIoY29tbWl0KTsKKworCQlpZiAoIWNvbW1pdC0+cGFyZW50cyAmJiBzaG93X3Jvb3QpCisJCQlwcmludGYoInJvb3QgJXNcbiIsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwl9CisKKwlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJc3RydWN0IHRhZyAqdGFnID0gKHN0cnVjdCB0YWcgKikgb2JqOworCisJCWlmIChzaG93X3RhZ3MgJiYgdGFnLT50YWdnZWQpIHsKKwkJCXByaW50ZigidGFnZ2VkICVzICVzIiwgdHlwZW5hbWUodGFnLT50YWdnZWQtPnR5cGUpLCBzaGExX3RvX2hleCh0YWctPnRhZ2dlZC0+c2hhMSkpOworCQkJcHJpbnRmKCIgKCVzKSBpbiAlc1xuIiwgdGFnLT50YWcsIHNoYTFfdG9faGV4KHRhZy0+b2JqZWN0LnNoYTEpKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfc2hhMShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IHBhcnNlX29iamVjdChzaGExKTsKKwlpZiAoIW9iaikgeworCQllcnJvcnNfZm91bmQgfD0gRVJST1JfT0JKRUNUOworCQlyZXR1cm4gZXJyb3IoIiVzOiBvYmplY3QgY29ycnVwdCBvciBtaXNzaW5nIiwKKwkJCSAgICAgc2hhMV90b19oZXgoc2hhMSkpOworCX0KKwlvYmotPmZsYWdzIHw9IEhBU19PQko7CisJcmV0dXJuIGZzY2tfb2JqKG9iaik7Cit9CisKK3N0YXRpYyBpbnQgZnNja19vYmpfYnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdm9pZCAqYnVmZmVyLCBpbnQgKmVhdGVuKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKwlvYmogPSBwYXJzZV9vYmplY3RfYnVmZmVyKHNoYTEsIHR5cGUsIHNpemUsIGJ1ZmZlciwgZWF0ZW4pOworCWlmICghb2JqKSB7CisJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9PQkpFQ1Q7CisJCXJldHVybiBlcnJvcigiJXM6IG9iamVjdCBjb3JydXB0IG9yIG1pc3NpbmciLCBzaGExX3RvX2hleChzaGExKSk7CisJfQorCW9iai0+ZmxhZ3MgPSBIQVNfT0JKOworCXJldHVybiBmc2NrX29iaihvYmopOworfQorCitzdGF0aWMgaW50IGRlZmF1bHRfcmVmczsKKworc3RhdGljIHZvaWQgZnNja19oYW5kbGVfcmVmbG9nX3NoYTEoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlpZiAoIWlzX251bGxfc2hhMShzaGExKSkgeworCQlvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCQlpZiAob2JqKSB7CisJCQlvYmotPnVzZWQgPSAxOworCQkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CisJCX0gZWxzZSB7CisJCQllcnJvcigiJXM6IGludmFsaWQgcmVmbG9nIGVudHJ5ICVzIiwgcmVmbmFtZSwgc2hhMV90b19oZXgoc2hhMSkpOworCQkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX1JFQUNIQUJMRTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBmc2NrX2hhbmRsZV9yZWZsb2dfZW50KHVuc2lnbmVkIGNoYXIgKm9zaGExLCB1bnNpZ25lZCBjaGFyICpuc2hhMSwKKwkJY29uc3QgY2hhciAqZW1haWwsIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wLCBpbnQgdHosCisJCWNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IGNiX2RhdGE7CisKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICJDaGVja2luZyByZWZsb2cgJXMtPiVzXG4iLAorCQkJc2hhMV90b19oZXgob3NoYTEpLCBzaGExX3RvX2hleChuc2hhMSkpOworCisJZnNja19oYW5kbGVfcmVmbG9nX3NoYTEocmVmbmFtZSwgb3NoYTEpOworCWZzY2tfaGFuZGxlX3JlZmxvZ19zaGExKHJlZm5hbWUsIG5zaGExKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmc2NrX2hhbmRsZV9yZWZsb2coY29uc3QgY2hhciAqbG9nbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJZm9yX2VhY2hfcmVmbG9nX2VudChsb2duYW1lLCBmc2NrX2hhbmRsZV9yZWZsb2dfZW50LCAodm9pZCAqKWxvZ25hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfaGFuZGxlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwlvYmogPSBwYXJzZV9vYmplY3Qob2lkLT5oYXNoKTsKKwlpZiAoIW9iaikgeworCQllcnJvcigiJXM6IGludmFsaWQgc2hhMSBwb2ludGVyICVzIiwgcmVmbmFtZSwgb2lkX3RvX2hleChvaWQpKTsKKwkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX1JFQUNIQUJMRTsKKwkJLyogV2UnbGwgY29udGludWUgd2l0aCB0aGUgcmVzdCBkZXNwaXRlIHRoZSBlcnJvci4uICovCisJCXJldHVybiAwOworCX0KKwlpZiAob2JqLT50eXBlICE9IE9CSl9DT01NSVQgJiYgaXNfYnJhbmNoKHJlZm5hbWUpKSB7CisJCWVycm9yKCIlczogbm90IGEgY29tbWl0IiwgcmVmbmFtZSk7CisJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUZTOworCX0KKwlkZWZhdWx0X3JlZnMrKzsKKwlvYmotPnVzZWQgPSAxOworCW1hcmtfb2JqZWN0X3JlYWNoYWJsZShvYmopOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9kZWZhdWx0X2hlYWRzKHZvaWQpCit7CisJaWYgKGhlYWRfcG9pbnRzX2F0ICYmICFpc19udWxsX29pZCgmaGVhZF9vaWQpKQorCQlmc2NrX2hhbmRsZV9yZWYoIkhFQUQiLCAmaGVhZF9vaWQsIDAsIE5VTEwpOworCWZvcl9lYWNoX3Jhd3JlZihmc2NrX2hhbmRsZV9yZWYsIE5VTEwpOworCWlmIChpbmNsdWRlX3JlZmxvZ3MpCisJCWZvcl9lYWNoX3JlZmxvZyhmc2NrX2hhbmRsZV9yZWZsb2csIE5VTEwpOworCisJLyoKKwkgKiBOb3QgaGF2aW5nIGFueSBkZWZhdWx0IGhlYWRzIGlzbid0IHJlYWxseSBmYXRhbCwgYnV0CisJICogaXQgZG9lcyBtZWFuIHRoYXQgIi0tdW5yZWFjaGFibGUiIG5vIGxvbmdlciBtYWtlcyBhbnkKKwkgKiBzZW5zZSAoc2luY2UgaW4gdGhpcyBjYXNlIGV2ZXJ5dGhpbmcgd2lsbCBvYnZpb3VzbHkKKwkgKiBiZSB1bnJlYWNoYWJsZSBieSBkZWZpbml0aW9uLgorCSAqCisJICogU2hvd2luZyBkYW5nbGluZyBvYmplY3RzIGlzIHZhbGlkLCB0aG91Z2ggKGFzIHRob3NlCisJICogZGFuZ2xpbmcgb2JqZWN0cyBhcmUgbGlrZWx5IGxvc3QgaGVhZHMpLgorCSAqCisJICogU28gd2UganVzdCBwcmludCBhIHdhcm5pbmcgYWJvdXQgaXQsIGFuZCBjbGVhciB0aGUKKwkgKiAic2hvd191bnJlYWNoYWJsZSIgZmxhZy4KKwkgKi8KKwlpZiAoIWRlZmF1bHRfcmVmcykgeworCQlmcHJpbnRmKHN0ZGVyciwgIm5vdGljZTogTm8gZGVmYXVsdCByZWZlcmVuY2VzXG4iKTsKKwkJc2hvd191bnJlYWNoYWJsZSA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGZzY2tfbG9vc2UoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoZnNja19zaGExKHNoYTEpKQorCQllcnJvcnNfZm91bmQgfD0gRVJST1JfT0JKRUNUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfY3J1ZnQoY29uc3QgY2hhciAqYmFzZW5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmRhdGEpCit7CisJaWYgKCFzdGFydHNfd2l0aChiYXNlbmFtZSwgInRtcF9vYmpfIikpCisJCWZwcmludGYoc3RkZXJyLCAiYmFkIHNoYTEgZmlsZTogJXNcbiIsIHBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfc3ViZGlyKGludCBuciwgY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqcHJvZ3Jlc3MpCit7CisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgbnIgKyAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnNja19vYmplY3RfZGlyKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisKKwlpZiAodmVyYm9zZSkKKwkJZnByaW50ZihzdGRlcnIsICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3J5XG4iKTsKKworCWlmIChzaG93X3Byb2dyZXNzKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIpLCAyNTYpOworCisJZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXIocGF0aCwgZnNja19sb29zZSwgZnNja19jcnVmdCwgZnNja19zdWJkaXIsCisJCQkJICAgICAgcHJvZ3Jlc3MpOworCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIDI1Nik7CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW50IGZzY2tfaGVhZF9saW5rKHZvaWQpCit7CisJaW50IGZsYWc7CisJaW50IG51bGxfaXNfZXJyb3IgPSAwOworCisJaWYgKHZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiQ2hlY2tpbmcgSEVBRCBsaW5rXG4iKTsKKworCWhlYWRfcG9pbnRzX2F0ID0gcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgMCwgaGVhZF9vaWQuaGFzaCwgJmZsYWcpOworCWlmICghaGVhZF9wb2ludHNfYXQpIHsKKwkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX1JFRlM7CisJCXJldHVybiBlcnJvcigiSW52YWxpZCBIRUFEIik7CisJfQorCWlmICghc3RyY21wKGhlYWRfcG9pbnRzX2F0LCAiSEVBRCIpKQorCQkvKiBkZXRhY2hlZCBIRUFEICovCisJCW51bGxfaXNfZXJyb3IgPSAxOworCWVsc2UgaWYgKCFzdGFydHNfd2l0aChoZWFkX3BvaW50c19hdCwgInJlZnMvaGVhZHMvIikpIHsKKwkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX1JFRlM7CisJCXJldHVybiBlcnJvcigiSEVBRCBwb2ludHMgdG8gc29tZXRoaW5nIHN0cmFuZ2UgKCVzKSIsCisJCQkgICAgIGhlYWRfcG9pbnRzX2F0KTsKKwl9CisJaWYgKGlzX251bGxfb2lkKCZoZWFkX29pZCkpIHsKKwkJaWYgKG51bGxfaXNfZXJyb3IpIHsKKwkJCWVycm9yc19mb3VuZCB8PSBFUlJPUl9SRUZTOworCQkJcmV0dXJuIGVycm9yKCJIRUFEOiBkZXRhY2hlZCBIRUFEIHBvaW50cyBhdCBub3RoaW5nIik7CisJCX0KKwkJZnByaW50ZihzdGRlcnIsICJub3RpY2U6IEhFQUQgcG9pbnRzIHRvIGFuIHVuYm9ybiBicmFuY2ggKCVzKVxuIiwKKwkJCWhlYWRfcG9pbnRzX2F0ICsgMTEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmc2NrX2NhY2hlX3RyZWUoc3RydWN0IGNhY2hlX3RyZWUgKml0KQoreworCWludCBpOworCWludCBlcnIgPSAwOworCisJaWYgKHZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiQ2hlY2tpbmcgY2FjaGUgdHJlZVxuIik7CisKKwlpZiAoMCA8PSBpdC0+ZW50cnlfY291bnQpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gcGFyc2Vfb2JqZWN0KGl0LT5zaGExKTsKKwkJaWYgKCFvYmopIHsKKwkJCWVycm9yKCIlczogaW52YWxpZCBzaGExIHBvaW50ZXIgaW4gY2FjaGUtdHJlZSIsCisJCQkgICAgICBzaGExX3RvX2hleChpdC0+c2hhMSkpOworCQkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX1JFRlM7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlvYmotPnVzZWQgPSAxOworCQltYXJrX29iamVjdF9yZWFjaGFibGUob2JqKTsKKwkJaWYgKG9iai0+dHlwZSAhPSBPQkpfVFJFRSkKKwkJCWVyciB8PSBvYmplcnJvcihvYmosICJub24tdHJlZSBpbiBjYWNoZS10cmVlIik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBpdC0+c3VidHJlZV9ucjsgaSsrKQorCQllcnIgfD0gZnNja19jYWNoZV90cmVlKGl0LT5kb3duW2ldLT5jYWNoZV90cmVlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGZzY2tfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGZzY2sgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGZzY2tfb3B0c1tdID0geworCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oImJlIHZlcmJvc2UiKSksCisJT1BUX0JPT0woMCwgInVucmVhY2hhYmxlIiwgJnNob3dfdW5yZWFjaGFibGUsIE5fKCJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiKSksCisJT1BUX0JPT0woMCwgImRhbmdsaW5nIiwgJnNob3dfZGFuZ2xpbmcsIE5fKCJzaG93IGRhbmdsaW5nIG9iamVjdHMiKSksCisJT1BUX0JPT0woMCwgInRhZ3MiLCAmc2hvd190YWdzLCBOXygicmVwb3J0IHRhZ3MiKSksCisJT1BUX0JPT0woMCwgInJvb3QiLCAmc2hvd19yb290LCBOXygicmVwb3J0IHJvb3Qgbm9kZXMiKSksCisJT1BUX0JPT0woMCwgImNhY2hlIiwgJmtlZXBfY2FjaGVfb2JqZWN0cywgTl8oIm1ha2UgaW5kZXggb2JqZWN0cyBoZWFkIG5vZGVzIikpLAorCU9QVF9CT09MKDAsICJyZWZsb2dzIiwgJmluY2x1ZGVfcmVmbG9ncywgTl8oIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIpKSwKKwlPUFRfQk9PTCgwLCAiZnVsbCIsICZjaGVja19mdWxsLCBOXygiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiKSksCisJT1BUX0JPT0woMCwgImNvbm5lY3Rpdml0eS1vbmx5IiwgJmNvbm5lY3Rpdml0eV9vbmx5LCBOXygiY2hlY2sgb25seSBjb25uZWN0aXZpdHkiKSksCisJT1BUX0JPT0woMCwgInN0cmljdCIsICZjaGVja19zdHJpY3QsIE5fKCJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciKSksCisJT1BUX0JPT0woMCwgImxvc3QtZm91bmQiLCAmd3JpdGVfbG9zdF9hbmRfZm91bmQsCisJCQkJTl8oIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIikpLAorCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZzaG93X3Byb2dyZXNzLCBOXygic2hvdyBwcm9ncmVzcyIpKSwKKwlPUFRfRU5EKCksCit9OworCitpbnQgY21kX2ZzY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGksIGhlYWRzOworCXN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICphbHQ7CisKKwllcnJvcnNfZm91bmQgPSAwOworCWNoZWNrX3JlcGxhY2VfcmVmcyA9IDA7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGZzY2tfb3B0cywgZnNja191c2FnZSwgMCk7CisKKwlmc2NrX3dhbGtfb3B0aW9ucy53YWxrID0gbWFya19vYmplY3Q7CisJZnNja19vYmpfb3B0aW9ucy53YWxrID0gbWFya191c2VkOworCWZzY2tfb2JqX29wdGlvbnMuZXJyb3JfZnVuYyA9IGZzY2tfZXJyb3JfZnVuYzsKKwlpZiAoY2hlY2tfc3RyaWN0KQorCQlmc2NrX29ial9vcHRpb25zLnN0cmljdCA9IDE7CisKKwlpZiAoc2hvd19wcm9ncmVzcyA9PSAtMSkKKwkJc2hvd19wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKwlpZiAodmVyYm9zZSkKKwkJc2hvd19wcm9ncmVzcyA9IDA7CisKKwlpZiAod3JpdGVfbG9zdF9hbmRfZm91bmQpIHsKKwkJY2hlY2tfZnVsbCA9IDE7CisJCWluY2x1ZGVfcmVmbG9ncyA9IDA7CisJfQorCisJZ2l0X2NvbmZpZyhmc2NrX2NvbmZpZywgTlVMTCk7CisKKwlmc2NrX2hlYWRfbGluaygpOworCWlmICghY29ubmVjdGl2aXR5X29ubHkpIHsKKwkJZnNja19vYmplY3RfZGlyKGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCisJCXByZXBhcmVfYWx0X29kYigpOworCQlmb3IgKGFsdCA9IGFsdF9vZGJfbGlzdDsgYWx0OyBhbHQgPSBhbHQtPm5leHQpIHsKKwkJCS8qIGRpcmVjdG9yeSBuYW1lLCBtaW51cyB0cmFpbGluZyBzbGFzaCAqLworCQkJc2l6ZV90IG5hbWVsZW4gPSBhbHQtPm5hbWUgLSBhbHQtPmJhc2UgLSAxOworCQkJc3RydWN0IHN0cmJ1ZiBuYW1lID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkKCZuYW1lLCBhbHQtPmJhc2UsIG5hbWVsZW4pOworCQkJZnNja19vYmplY3RfZGlyKG5hbWUuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwkJfQorCX0KKworCWlmIChjaGVja19mdWxsKSB7CisJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCQl1aW50MzJfdCB0b3RhbCA9IDAsIGNvdW50ID0gMDsKKwkJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisKKwkJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CisKKwkJaWYgKHNob3dfcHJvZ3Jlc3MpIHsKKwkJCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJCQkJY29udGludWU7CisJCQkJdG90YWwgKz0gcC0+bnVtX29iamVjdHM7CisJCQl9CisKKwkJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoXygiQ2hlY2tpbmcgb2JqZWN0cyIpLCB0b3RhbCk7CisJCX0KKwkJZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCS8qIHZlcmlmeSBnaXZlcyBlcnJvciBtZXNzYWdlcyBpdHNlbGYgKi8KKwkJCWlmICh2ZXJpZnlfcGFjayhwLCBmc2NrX29ial9idWZmZXIsCisJCQkJCXByb2dyZXNzLCBjb3VudCkpCisJCQkJZXJyb3JzX2ZvdW5kIHw9IEVSUk9SX1BBQ0s7CisJCQljb3VudCArPSBwLT5udW1fb2JqZWN0czsKKwkJfQorCQlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisJfQorCisJaGVhZHMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaWYgKCFnZXRfc2hhMShhcmcsIHNoYTEpKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCisJCQkvKiBFcnJvciBpcyBwcmludGVkIGJ5IGxvb2t1cF9vYmplY3QoKS4gKi8KKwkJCWlmICghb2JqKQorCQkJCWNvbnRpbnVlOworCisJCQlvYmotPnVzZWQgPSAxOworCQkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CisJCQloZWFkcysrOworCQkJY29udGludWU7CisJCX0KKwkJZXJyb3IoImludmFsaWQgcGFyYW1ldGVyOiBleHBlY3RlZCBzaGExLCBnb3QgJyVzJyIsIGFyZyk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSd2ZSBub3QgYmVlbiBnaXZlbiBhbnkgZXhwbGljaXQgaGVhZCBpbmZvcm1hdGlvbiwgZG8gdGhlCisJICogZGVmYXVsdCBvbmVzIGZyb20gLmdpdC9yZWZzLiBXZSBhbHNvIGNvbnNpZGVyIHRoZSBpbmRleCBmaWxlCisJICogaW4gdGhpcyBjYXNlIChpZSB0aGlzIGltcGxpZXMgLS1jYWNoZSkuCisJICovCisJaWYgKCFoZWFkcykgeworCQlnZXRfZGVmYXVsdF9oZWFkcygpOworCQlrZWVwX2NhY2hlX29iamVjdHMgPSAxOworCX0KKworCWlmIChrZWVwX2NhY2hlX29iamVjdHMpIHsKKwkJcmVhZF9jYWNoZSgpOworCQlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJCXVuc2lnbmVkIGludCBtb2RlOworCQkJc3RydWN0IGJsb2IgKmJsb2I7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisKKwkJCW1vZGUgPSBhY3RpdmVfY2FjaGVbaV0tPmNlX21vZGU7CisJCQlpZiAoU19JU0dJVExJTksobW9kZSkpCisJCQkJY29udGludWU7CisJCQlibG9iID0gbG9va3VwX2Jsb2IoYWN0aXZlX2NhY2hlW2ldLT5zaGExKTsKKwkJCWlmICghYmxvYikKKwkJCQljb250aW51ZTsKKwkJCW9iaiA9ICZibG9iLT5vYmplY3Q7CisJCQlvYmotPnVzZWQgPSAxOworCQkJbWFya19vYmplY3RfcmVhY2hhYmxlKG9iaik7CisJCX0KKwkJaWYgKGFjdGl2ZV9jYWNoZV90cmVlKQorCQkJZnNja19jYWNoZV90cmVlKGFjdGl2ZV9jYWNoZV90cmVlKTsKKwl9CisKKwljaGVja19jb25uZWN0aXZpdHkoKTsKKwlyZXR1cm4gZXJyb3JzX2ZvdW5kOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9nYy5jIGIvYnVpbHRpbi9nYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2Nzc5MjMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2djLmMKQEAgLTAsMCArMSw0MjQgQEAKKy8qCisgKiBnaXQgZ2MgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ2xlYW51cCB1bnJlYWNoYWJsZSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIHJlcG9zaXRvcnkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IEphbWVzIEJvd2VzCisgKgorICogQmFzZWQgb24gZ2l0LWdjLnNoLCB3aGljaCBpcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBTaGF3biBPLiBQZWFyY2UKKyAqLworCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInRlbXBmaWxlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKworI2RlZmluZSBGQUlMRURfUlVOICJmYWlsZWQgdG8gcnVuICVzIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fZ2NfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGdjIFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBwYWNrX3JlZnMgPSAxOworc3RhdGljIGludCBwcnVuZV9yZWZsb2dzID0gMTsKK3N0YXRpYyBpbnQgYWdncmVzc2l2ZV9kZXB0aCA9IDI1MDsKK3N0YXRpYyBpbnQgYWdncmVzc2l2ZV93aW5kb3cgPSAyNTA7CitzdGF0aWMgaW50IGdjX2F1dG9fdGhyZXNob2xkID0gNjcwMDsKK3N0YXRpYyBpbnQgZ2NfYXV0b19wYWNrX2xpbWl0ID0gNTA7CitzdGF0aWMgaW50IGRldGFjaF9hdXRvID0gMTsKK3N0YXRpYyBjb25zdCBjaGFyICpwcnVuZV9leHBpcmUgPSAiMi53ZWVrcy5hZ28iOworc3RhdGljIGNvbnN0IGNoYXIgKnBydW5lX3dvcmt0cmVlc19leHBpcmUgPSAiMy5tb250aHMuYWdvIjsKKworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IHBhY2tfcmVmc19jbWQgPSBBUkdWX0FSUkFZX0lOSVQ7CitzdGF0aWMgc3RydWN0IGFyZ3ZfYXJyYXkgcmVmbG9nID0gQVJHVl9BUlJBWV9JTklUOworc3RhdGljIHN0cnVjdCBhcmd2X2FycmF5IHJlcGFjayA9IEFSR1ZfQVJSQVlfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSBwcnVuZSA9IEFSR1ZfQVJSQVlfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSBwcnVuZV93b3JrdHJlZXMgPSBBUkdWX0FSUkFZX0lOSVQ7CitzdGF0aWMgc3RydWN0IGFyZ3ZfYXJyYXkgcmVyZXJlID0gQVJHVl9BUlJBWV9JTklUOworCitzdGF0aWMgc3RydWN0IHRlbXBmaWxlIHBpZGZpbGU7CitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBsb2dfbG9jazsKKworc3RhdGljIHZvaWQgZ2l0X2NvbmZpZ19kYXRlX3N0cmluZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipvdXRwdXQpCit7CisJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdChrZXksIG91dHB1dCkpCisJCXJldHVybjsKKwlpZiAoc3RyY21wKCpvdXRwdXQsICJub3ciKSkgeworCQl1bnNpZ25lZCBsb25nIG5vdyA9IGFwcHJveGlkYXRlKCJub3ciKTsKKwkJaWYgKGFwcHJveGlkYXRlKCpvdXRwdXQpID49IG5vdykKKwkJCWdpdF9kaWVfY29uZmlnKGtleSwgXygiSW52YWxpZCAlczogJyVzJyIpLCBrZXksICpvdXRwdXQpOworCX0KK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19sb2dfZmlsZSh2b2lkKQoreworCXN0cnVjdCBzdGF0IHN0OworCWlmICghZnN0YXQoZ2V0X2xvY2tfZmlsZV9mZCgmbG9nX2xvY2spLCAmc3QpICYmIHN0LnN0X3NpemUpCisJCWNvbW1pdF9sb2NrX2ZpbGUoJmxvZ19sb2NrKTsKKwllbHNlCisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9nX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2xvZ19maWxlX2F0X2V4aXQodm9pZCkKK3sKKwlmZmx1c2goc3RkZXJyKTsKKwlwcm9jZXNzX2xvZ19maWxlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfbG9nX2ZpbGVfb25fc2lnbmFsKGludCBzaWdubykKK3sKKwlwcm9jZXNzX2xvZ19maWxlKCk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKKwlyYWlzZShzaWdubyk7Cit9CisKK3N0YXRpYyB2b2lkIGdjX2NvbmZpZyh2b2lkKQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKCFnaXRfY29uZmlnX2dldF92YWx1ZSgiZ2MucGFja3JlZnMiLCAmdmFsdWUpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY21wKHZhbHVlLCAibm90YmFyZSIpKQorCQkJcGFja19yZWZzID0gLTE7CisJCWVsc2UKKwkJCXBhY2tfcmVmcyA9IGdpdF9jb25maWdfYm9vbCgiZ2MucGFja3JlZnMiLCB2YWx1ZSk7CisJfQorCisJZ2l0X2NvbmZpZ19nZXRfaW50KCJnYy5hZ2dyZXNzaXZld2luZG93IiwgJmFnZ3Jlc3NpdmVfd2luZG93KTsKKwlnaXRfY29uZmlnX2dldF9pbnQoImdjLmFnZ3Jlc3NpdmVkZXB0aCIsICZhZ2dyZXNzaXZlX2RlcHRoKTsKKwlnaXRfY29uZmlnX2dldF9pbnQoImdjLmF1dG8iLCAmZ2NfYXV0b190aHJlc2hvbGQpOworCWdpdF9jb25maWdfZ2V0X2ludCgiZ2MuYXV0b3BhY2tsaW1pdCIsICZnY19hdXRvX3BhY2tfbGltaXQpOworCWdpdF9jb25maWdfZ2V0X2Jvb2woImdjLmF1dG9kZXRhY2giLCAmZGV0YWNoX2F1dG8pOworCWdpdF9jb25maWdfZGF0ZV9zdHJpbmcoImdjLnBydW5lZXhwaXJlIiwgJnBydW5lX2V4cGlyZSk7CisJZ2l0X2NvbmZpZ19kYXRlX3N0cmluZygiZ2Mud29ya3RyZWVwcnVuZWV4cGlyZSIsICZwcnVuZV93b3JrdHJlZXNfZXhwaXJlKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgdG9vX21hbnlfbG9vc2Vfb2JqZWN0cyh2b2lkKQoreworCS8qCisJICogUXVpY2tseSBjaGVjayBpZiBhICJnYyIgaXMgbmVlZGVkLCBieSBlc3RpbWF0aW5nIGhvdworCSAqIG1hbnkgbG9vc2Ugb2JqZWN0cyB0aGVyZSBhcmUuICBCZWNhdXNlIFNIQS0xIGlzIGV2ZW5seQorCSAqIGRpc3RyaWJ1dGVkLCB3ZSBjYW4gY2hlY2sgb25seSBvbmUgYW5kIGdldCBhIHJlYXNvbmFibGUKKwkgKiBlc3RpbWF0ZS4KKwkgKi8KKwljaGFyIHBhdGhbUEFUSF9NQVhdOworCWNvbnN0IGNoYXIgKm9iamRpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZW50OworCWludCBhdXRvX3RocmVzaG9sZDsKKwlpbnQgbnVtX2xvb3NlID0gMDsKKwlpbnQgbmVlZGVkID0gMDsKKworCWlmIChnY19hdXRvX3RocmVzaG9sZCA8PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChzaXplb2YocGF0aCkgPD0gc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvMTciLCBvYmpkaXIpKSB7CisJCXdhcm5pbmcoXygiaW5zYW5lbHkgbG9uZyBvYmplY3QgZGlyZWN0b3J5ICUuKnMiKSwgNTAsIG9iamRpcik7CisJCXJldHVybiAwOworCX0KKwlkaXIgPSBvcGVuZGlyKHBhdGgpOworCWlmICghZGlyKQorCQlyZXR1cm4gMDsKKworCWF1dG9fdGhyZXNob2xkID0gKGdjX2F1dG9fdGhyZXNob2xkICsgMjU1KSAvIDI1NjsKKwl3aGlsZSAoKGVudCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlpZiAoc3Ryc3BuKGVudC0+ZF9uYW1lLCAiMDEyMzQ1Njc4OWFiY2RlZiIpICE9IDM4IHx8CisJCSAgICBlbnQtPmRfbmFtZVszOF0gIT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCQlpZiAoKytudW1fbG9vc2UgPiBhdXRvX3RocmVzaG9sZCkgeworCQkJbmVlZGVkID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWNsb3NlZGlyKGRpcik7CisJcmV0dXJuIG5lZWRlZDsKK30KKworc3RhdGljIGludCB0b29fbWFueV9wYWNrcyh2b2lkKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWludCBjbnQ7CisKKwlpZiAoZ2NfYXV0b19wYWNrX2xpbWl0IDw9IDApCisJCXJldHVybiAwOworCisJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CisJZm9yIChjbnQgPSAwLCBwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKCFwLT5wYWNrX2xvY2FsKQorCQkJY29udGludWU7CisJCWlmIChwLT5wYWNrX2tlZXApCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogUGVyaGFwcyBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgcGFjayBhbmQgY291bnQgb25seQorCQkgKiB2ZXJ5IHNtYWxsIG9uZXMgaGVyZT8KKwkJICovCisJCWNudCsrOworCX0KKwlyZXR1cm4gZ2NfYXV0b19wYWNrX2xpbWl0IDw9IGNudDsKK30KKworc3RhdGljIHZvaWQgYWRkX3JlcGFja19hbGxfb3B0aW9uKHZvaWQpCit7CisJaWYgKHBydW5lX2V4cGlyZSAmJiAhc3RyY21wKHBydW5lX2V4cGlyZSwgIm5vdyIpKQorCQlhcmd2X2FycmF5X3B1c2goJnJlcGFjaywgIi1hIik7CisJZWxzZSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmVwYWNrLCAiLUEiKTsKKwkJaWYgKHBydW5lX2V4cGlyZSkKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJnJlcGFjaywgIi0tdW5wYWNrLXVucmVhY2hhYmxlPSVzIiwgcHJ1bmVfZXhwaXJlKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmVlZF90b19nYyh2b2lkKQoreworCS8qCisJICogU2V0dGluZyBnYy5hdXRvIHRvIDAgb3IgbmVnYXRpdmUgY2FuIGRpc2FibGUgdGhlCisJICogYXV0b21hdGljIGdjLgorCSAqLworCWlmIChnY19hdXRvX3RocmVzaG9sZCA8PSAwKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlcmUgYXJlIHRvbyBtYW55IGxvb3NlIG9iamVjdHMsIGJ1dCBub3QgdG9vIG1hbnkKKwkgKiBwYWNrcywgd2UgcnVuICJyZXBhY2sgLWQgLWwiLiAgSWYgdGhlcmUgYXJlIHRvbyBtYW55IHBhY2tzLAorCSAqIHdlIHJ1biAicmVwYWNrIC1BIC1kIC1sIi4gIE90aGVyd2lzZSB3ZSB0ZWxsIHRoZSBjYWxsZXIKKwkgKiB0aGVyZSBpcyBubyBuZWVkLgorCSAqLworCWlmICh0b29fbWFueV9wYWNrcygpKQorCQlhZGRfcmVwYWNrX2FsbF9vcHRpb24oKTsKKwllbHNlIGlmICghdG9vX21hbnlfbG9vc2Vfb2JqZWN0cygpKQorCQlyZXR1cm4gMDsKKworCWlmIChydW5faG9va19sZShOVUxMLCAicHJlLWF1dG8tZ2MiLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qIHJldHVybiBOVUxMIG9uIHN1Y2Nlc3MsIGVsc2UgaG9zdG5hbWUgcnVubmluZyB0aGUgZ2MgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpsb2NrX3JlcG9fZm9yX2djKGludCBmb3JjZSwgcGlkX3QqIHJldF9waWQpCit7CisJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9jazsKKwljaGFyIG15X2hvc3RbMTI4XTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0YXQgc3Q7CisJdWludG1heF90IHBpZDsKKwlGSUxFICpmcDsKKwlpbnQgZmQ7CisJY2hhciAqcGlkZmlsZV9wYXRoOworCisJaWYgKGlzX3RlbXBmaWxlX2FjdGl2ZSgmcGlkZmlsZSkpCisJCS8qIGFscmVhZHkgbG9ja2VkICovCisJCXJldHVybiBOVUxMOworCisJaWYgKGdldGhvc3RuYW1lKG15X2hvc3QsIHNpemVvZihteV9ob3N0KSkpCisJCXhzbnByaW50ZihteV9ob3N0LCBzaXplb2YobXlfaG9zdCksICJ1bmtub3duIik7CisKKwlwaWRmaWxlX3BhdGggPSBnaXRfcGF0aGR1cCgiZ2MucGlkIik7CisJZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBwaWRmaWxlX3BhdGgsCisJCQkJICAgICAgIExPQ0tfRElFX09OX0VSUk9SKTsKKwlpZiAoIWZvcmNlKSB7CisJCXN0YXRpYyBjaGFyIGxvY2tpbmdfaG9zdFsxMjhdOworCQlpbnQgc2hvdWxkX2V4aXQ7CisJCWZwID0gZm9wZW4ocGlkZmlsZV9wYXRoLCAiciIpOworCQltZW1zZXQobG9ja2luZ19ob3N0LCAwLCBzaXplb2YobG9ja2luZ19ob3N0KSk7CisJCXNob3VsZF9leGl0ID0KKwkJCWZwICE9IE5VTEwgJiYKKwkJCSFmc3RhdChmaWxlbm8oZnApLCAmc3QpICYmCisJCQkvKgorCQkJICogMTIgaG91ciBsaW1pdCBpcyB2ZXJ5IGdlbmVyb3VzIGFzIGdjIHNob3VsZAorCQkJICogbmV2ZXIgdGFrZSB0aGF0IGxvbmcuIE9uIHRoZSBvdGhlciBoYW5kIHdlCisJCQkgKiBkb24ndCByZWFsbHkgbmVlZCBhIHN0cmljdCBsaW1pdCBoZXJlLAorCQkJICogcnVubmluZyBnYyAtLWF1dG8gb25lIGRheSBsYXRlIGlzIG5vdCBhIGJpZworCQkJICogcHJvYmxlbS4gLS1mb3JjZSBjYW4gYmUgdXNlZCBpbiBtYW51YWwgZ2MKKwkJCSAqIGFmdGVyIHRoZSB1c2VyIHZlcmlmaWVzIHRoYXQgbm8gZ2MgaXMKKwkJCSAqIHJ1bm5pbmcuCisJCQkgKi8KKwkJCXRpbWUoTlVMTCkgLSBzdC5zdF9tdGltZSA8PSAxMiAqIDM2MDAgJiYKKwkJCWZzY2FuZihmcCwgIiUiUFJJdU1BWCIgJTEyN2MiLCAmcGlkLCBsb2NraW5nX2hvc3QpID09IDIgJiYKKwkJCS8qIGJlIGdlbnRsZSB0byBjb25jdXJyZW50ICJnYyIgb24gcmVtb3RlIGhvc3RzICovCisJCQkoc3RyY21wKGxvY2tpbmdfaG9zdCwgbXlfaG9zdCkgfHwgIWtpbGwocGlkLCAwKSB8fCBlcnJubyA9PSBFUEVSTSk7CisJCWlmIChmcCAhPSBOVUxMKQorCQkJZmNsb3NlKGZwKTsKKwkJaWYgKHNob3VsZF9leGl0KSB7CisJCQlpZiAoZmQgPj0gMCkKKwkJCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCQkJKnJldF9waWQgPSBwaWQ7CisJCQlmcmVlKHBpZGZpbGVfcGF0aCk7CisJCQlyZXR1cm4gbG9ja2luZ19ob3N0OworCQl9CisJfQorCisJc3RyYnVmX2FkZGYoJnNiLCAiJSJQUkl1TUFYIiAlcyIsCisJCSAgICAodWludG1heF90KSBnZXRwaWQoKSwgbXlfaG9zdCk7CisJd3JpdGVfaW5fZnVsbChmZCwgc2IuYnVmLCBzYi5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJY29tbWl0X2xvY2tfZmlsZSgmbG9jayk7CisJcmVnaXN0ZXJfdGVtcGZpbGUoJnBpZGZpbGUsIHBpZGZpbGVfcGF0aCk7CisJZnJlZShwaWRmaWxlX3BhdGgpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHJlcG9ydF9sYXN0X2djX2Vycm9yKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisKKwlyZXQgPSBzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGgoImdjLmxvZyIpLCAwKTsKKwlpZiAocmV0ID4gMCkKKwkJcmV0dXJuIGVycm9yKF8oIlRoZSBsYXN0IGdjIHJ1biByZXBvcnRlZCB0aGUgZm9sbG93aW5nLiAiCisJCQkgICAgICAgIlBsZWFzZSBjb3JyZWN0IHRoZSByb290IGNhdXNlXG4iCisJCQkgICAgICAgImFuZCByZW1vdmUgJXMuXG4iCisJCQkgICAgICAgIkF1dG9tYXRpYyBjbGVhbnVwIHdpbGwgbm90IGJlIHBlcmZvcm1lZCAiCisJCQkgICAgICAgInVudGlsIHRoZSBmaWxlIGlzIHJlbW92ZWQuXG5cbiIKKwkJCSAgICAgICAiJXMiKSwKKwkJCSAgICAgZ2l0X3BhdGgoImdjLmxvZyIpLCBzYi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2NfYmVmb3JlX3JlcGFjayh2b2lkKQoreworCWlmIChwYWNrX3JlZnMgJiYgcnVuX2NvbW1hbmRfdl9vcHQocGFja19yZWZzX2NtZC5hcmd2LCBSVU5fR0lUX0NNRCkpCisJCXJldHVybiBlcnJvcihGQUlMRURfUlVOLCBwYWNrX3JlZnNfY21kLmFyZ3ZbMF0pOworCisJaWYgKHBydW5lX3JlZmxvZ3MgJiYgcnVuX2NvbW1hbmRfdl9vcHQocmVmbG9nLmFyZ3YsIFJVTl9HSVRfQ01EKSkKKwkJcmV0dXJuIGVycm9yKEZBSUxFRF9SVU4sIHJlZmxvZy5hcmd2WzBdKTsKKworCXBhY2tfcmVmcyA9IDA7CisJcHJ1bmVfcmVmbG9ncyA9IDA7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfZ2MoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGFnZ3Jlc3NpdmUgPSAwOworCWludCBhdXRvX2djID0gMDsKKwlpbnQgcXVpZXQgPSAwOworCWludCBmb3JjZSA9IDA7CisJY29uc3QgY2hhciAqbmFtZTsKKwlwaWRfdCBwaWQ7CisJaW50IGRhZW1vbml6ZWQgPSAwOworCisJc3RydWN0IG9wdGlvbiBidWlsdGluX2djX29wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciKSksCisJCXsgT1BUSU9OX1NUUklORywgMCwgInBydW5lIiwgJnBydW5lX2V4cGlyZSwgTl8oImRhdGUiKSwKKwkJCU5fKCJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIpLAorCQkJUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KXBydW5lX2V4cGlyZSB9LAorCQlPUFRfQk9PTCgwLCAiYWdncmVzc2l2ZSIsICZhZ2dyZXNzaXZlLCBOXygiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIikpLAorCQlPUFRfQk9PTCgwLCAiYXV0byIsICZhdXRvX2djLCBOXygiZW5hYmxlIGF1dG8tZ2MgbW9kZSIpKSwKKwkJT1BUX0JPT0woMCwgImZvcmNlIiwgJmZvcmNlLCBOXygiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX2djX3VzYWdlLCBidWlsdGluX2djX29wdGlvbnMpOworCisJYXJndl9hcnJheV9wdXNobCgmcGFja19yZWZzX2NtZCwgInBhY2stcmVmcyIsICItLWFsbCIsICItLXBydW5lIiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNobCgmcmVmbG9nLCAicmVmbG9nIiwgImV4cGlyZSIsICItLWFsbCIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJnJlcGFjaywgInJlcGFjayIsICItZCIsICItbCIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJnBydW5lLCAicHJ1bmUiLCAiLS1leHBpcmUiLCBOVUxMKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZwcnVuZV93b3JrdHJlZXMsICJ3b3JrdHJlZSIsICJwcnVuZSIsICItLWV4cGlyZSIsIE5VTEwpOworCWFyZ3ZfYXJyYXlfcHVzaGwoJnJlcmVyZSwgInJlcmVyZSIsICJnYyIsIE5VTEwpOworCisJZ2NfY29uZmlnKCk7CisKKwlpZiAocGFja19yZWZzIDwgMCkKKwkJcGFja19yZWZzID0gIWlzX2JhcmVfcmVwb3NpdG9yeSgpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX2djX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fZ2NfdXNhZ2UsIDApOworCWlmIChhcmdjID4gMCkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fZ2NfdXNhZ2UsIGJ1aWx0aW5fZ2Nfb3B0aW9ucyk7CisKKwlpZiAoYWdncmVzc2l2ZSkgeworCQlhcmd2X2FycmF5X3B1c2goJnJlcGFjaywgIi1mIik7CisJCWlmIChhZ2dyZXNzaXZlX2RlcHRoID4gMCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJnJlcGFjaywgIi0tZGVwdGg9JWQiLCBhZ2dyZXNzaXZlX2RlcHRoKTsKKwkJaWYgKGFnZ3Jlc3NpdmVfd2luZG93ID4gMCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJnJlcGFjaywgIi0td2luZG93PSVkIiwgYWdncmVzc2l2ZV93aW5kb3cpOworCX0KKwlpZiAocXVpZXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcmVwYWNrLCAiLXEiKTsKKworCWlmIChhdXRvX2djKSB7CisJCS8qCisJCSAqIEF1dG8tZ2Mgc2hvdWxkIGJlIGxlYXN0IGludHJ1c2l2ZSBhcyBwb3NzaWJsZS4KKwkJICovCisJCWlmICghbmVlZF90b19nYygpKQorCQkJcmV0dXJuIDA7CisJCWlmICghcXVpZXQpIHsKKwkJCWlmIChkZXRhY2hfYXV0bykKKwkJCQlmcHJpbnRmKHN0ZGVyciwgXygiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iKSk7CisJCQllbHNlCisJCQkJZnByaW50ZihzdGRlcnIsIF8oIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIpKTsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIikpOworCQl9CisJCWlmIChkZXRhY2hfYXV0bykgeworCQkJaWYgKHJlcG9ydF9sYXN0X2djX2Vycm9yKCkpCisJCQkJcmV0dXJuIC0xOworCisJCQlpZiAoZ2NfYmVmb3JlX3JlcGFjaygpKQorCQkJCXJldHVybiAtMTsKKwkJCS8qCisJCQkgKiBmYWlsdXJlIHRvIGRhZW1vbml6ZSBpcyBvaywgd2UnbGwgY29udGludWUKKwkJCSAqIGluIGZvcmVncm91bmQKKwkJCSAqLworCQkJZGFlbW9uaXplZCA9ICFkYWVtb25pemUoKTsKKwkJfQorCX0gZWxzZQorCQlhZGRfcmVwYWNrX2FsbF9vcHRpb24oKTsKKworCW5hbWUgPSBsb2NrX3JlcG9fZm9yX2djKGZvcmNlLCAmcGlkKTsKKwlpZiAobmFtZSkgeworCQlpZiAoYXV0b19nYykKKwkJCXJldHVybiAwOyAvKiBiZSBxdWlldCBvbiAtLWF1dG8gKi8KKwkJZGllKF8oImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICUiUFJJdU1BWCIgKHVzZSAtLWZvcmNlIGlmIG5vdCkiKSwKKwkJICAgIG5hbWUsICh1aW50bWF4X3QpcGlkKTsKKwl9CisKKwlpZiAoZGFlbW9uaXplZCkgeworCQlob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2dfbG9jaywKKwkJCQkJICBnaXRfcGF0aCgiZ2MubG9nIiksCisJCQkJCSAgTE9DS19ESUVfT05fRVJST1IpOworCQlkdXAyKGdldF9sb2NrX2ZpbGVfZmQoJmxvZ19sb2NrKSwgMik7CisJCXNpZ2NoYWluX3B1c2hfY29tbW9uKHByb2Nlc3NfbG9nX2ZpbGVfb25fc2lnbmFsKTsKKwkJYXRleGl0KHByb2Nlc3NfbG9nX2ZpbGVfYXRfZXhpdCk7CisJfQorCisJaWYgKGdjX2JlZm9yZV9yZXBhY2soKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFyZXBvc2l0b3J5X2Zvcm1hdF9wcmVjaW91c19vYmplY3RzKSB7CisJCWlmIChydW5fY29tbWFuZF92X29wdChyZXBhY2suYXJndiwgUlVOX0dJVF9DTUQpKQorCQkJcmV0dXJuIGVycm9yKEZBSUxFRF9SVU4sIHJlcGFjay5hcmd2WzBdKTsKKworCQlpZiAocHJ1bmVfZXhwaXJlKSB7CisJCQlhcmd2X2FycmF5X3B1c2goJnBydW5lLCBwcnVuZV9leHBpcmUpOworCQkJaWYgKHF1aWV0KQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmcHJ1bmUsICItLW5vLXByb2dyZXNzIik7CisJCQlpZiAocnVuX2NvbW1hbmRfdl9vcHQocHJ1bmUuYXJndiwgUlVOX0dJVF9DTUQpKQorCQkJCXJldHVybiBlcnJvcihGQUlMRURfUlVOLCBwcnVuZS5hcmd2WzBdKTsKKwkJfQorCX0KKworCWlmIChwcnVuZV93b3JrdHJlZXNfZXhwaXJlKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcHJ1bmVfd29ya3RyZWVzLCBwcnVuZV93b3JrdHJlZXNfZXhwaXJlKTsKKwkJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KHBydW5lX3dvcmt0cmVlcy5hcmd2LCBSVU5fR0lUX0NNRCkpCisJCQlyZXR1cm4gZXJyb3IoRkFJTEVEX1JVTiwgcHJ1bmVfd29ya3RyZWVzLmFyZ3ZbMF0pOworCX0KKworCWlmIChydW5fY29tbWFuZF92X29wdChyZXJlcmUuYXJndiwgUlVOX0dJVF9DTUQpKQorCQlyZXR1cm4gZXJyb3IoRkFJTEVEX1JVTiwgcmVyZXJlLmFyZ3ZbMF0pOworCisJaWYgKGF1dG9fZ2MgJiYgdG9vX21hbnlfbG9vc2Vfb2JqZWN0cygpKQorCQl3YXJuaW5nKF8oIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyAiCisJCQkicnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIpKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9nZXQtdGFyLWNvbW1pdC1pZC5jIGIvYnVpbHRpbi9nZXQtdGFyLWNvbW1pdC1pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMWM1NDEKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2dldC10YXItY29tbWl0LWlkLmMKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBSZW5lIFNjaGFyZmUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFyLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGJ1aWx0aW5fZ2V0X3Rhcl9jb21taXRfaWRfdXNhZ2VbXSA9CisiZ2l0IGdldC10YXItY29tbWl0LWlkIjsKKworLyogdXN0YXIgaGVhZGVyICsgZXh0ZW5kZWQgZ2xvYmFsIGhlYWRlciBjb250ZW50ICovCisjZGVmaW5lIFJFQ09SRFNJWkUJKDUxMikKKyNkZWZpbmUgSEVBREVSU0laRSAoMiAqIFJFQ09SRFNJWkUpCisKK2ludCBjbWRfZ2V0X3Rhcl9jb21taXRfaWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY2hhciBidWZmZXJbSEVBREVSU0laRV07CisJc3RydWN0IHVzdGFyX2hlYWRlciAqaGVhZGVyID0gKHN0cnVjdCB1c3Rhcl9oZWFkZXIgKilidWZmZXI7CisJY2hhciAqY29udGVudCA9IGJ1ZmZlciArIFJFQ09SRFNJWkU7CisJY29uc3QgY2hhciAqY29tbWVudDsKKwlzc2l6ZV90IG47CisKKwlpZiAoYXJnYyAhPSAxKQorCQl1c2FnZShidWlsdGluX2dldF90YXJfY29tbWl0X2lkX3VzYWdlKTsKKworCW4gPSByZWFkX2luX2Z1bGwoMCwgYnVmZmVyLCBIRUFERVJTSVpFKTsKKwlpZiAobiA8IEhFQURFUlNJWkUpCisJCWRpZSgiZ2l0IGdldC10YXItY29tbWl0LWlkOiByZWFkIGVycm9yIik7CisJaWYgKGhlYWRlci0+dHlwZWZsYWdbMF0gIT0gJ2cnKQorCQlyZXR1cm4gMTsKKwlpZiAoIXNraXBfcHJlZml4KGNvbnRlbnQsICI1MiBjb21tZW50PSIsICZjb21tZW50KSkKKwkJcmV0dXJuIDE7CisKKwluID0gd3JpdGVfaW5fZnVsbCgxLCBjb21tZW50LCA0MSk7CisJaWYgKG4gPCA0MSkKKwkJZGllX2Vycm5vKCJnaXQgZ2V0LXRhci1jb21taXQtaWQ6IHdyaXRlIGVycm9yIik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vZ3JlcC5jIGIvYnVpbHRpbi9ncmVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0ZjQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vZ3JlcC5jCkBAIC0wLDAgKzEsOTE4IEBACisvKgorICogQnVpbHRpbiAiZ2l0IGdyZXAiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJncmVwLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorCitzdGF0aWMgY2hhciBjb25zdCAqIGNvbnN0IGdyZXBfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGludCB1c2VfdGhyZWFkcyA9IDE7CisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKyNkZWZpbmUgVEhSRUFEUyA4CitzdGF0aWMgcHRocmVhZF90IHRocmVhZHNbVEhSRUFEU107CisKKy8qIFdlIHVzZSBvbmUgcHJvZHVjZXIgdGhyZWFkIGFuZCBUSFJFQURTIGNvbnN1bWVyCisgKiB0aHJlYWRzLiBUaGUgcHJvZHVjZXIgYWRkcyBzdHJ1Y3Qgd29ya19pdGVtcyB0byAndG9kbycgYW5kIHRoZQorICogY29uc3VtZXJzIHBpY2sgd29yayBpdGVtcyBmcm9tIHRoZSBzYW1lIGFycmF5LgorICovCitzdHJ1Y3Qgd29ya19pdGVtIHsKKwlzdHJ1Y3QgZ3JlcF9zb3VyY2Ugc291cmNlOworCWNoYXIgZG9uZTsKKwlzdHJ1Y3Qgc3RyYnVmIG91dDsKK307CisKKy8qIEluIHRoZSByYW5nZSBbdG9kb19kb25lLCB0b2RvX3N0YXJ0KSBpbiAndG9kbycgd2UgaGF2ZSB3b3JrX2l0ZW1zCisgKiB0aGF0IGhhdmUgYmVlbiBvciBhcmUgcHJvY2Vzc2VkIGJ5IGEgY29uc3VtZXIgdGhyZWFkLiBXZSBoYXZlbid0CisgKiB3cml0dGVuIHRoZSByZXN1bHQgZm9yIHRoZXNlIHRvIHN0ZG91dCB5ZXQuCisgKgorICogVGhlIHdvcmtfaXRlbXMgaW4gW3RvZG9fc3RhcnQsIHRvZG9fZW5kKSBhcmUgd2FpdGluZyB0byBiZSBwaWNrZWQKKyAqIHVwIGJ5IGEgY29uc3VtZXIgdGhyZWFkLgorICoKKyAqIFRoZSByYW5nZXMgYXJlIG1vZHVsbyBUT0RPX1NJWkUuCisgKi8KKyNkZWZpbmUgVE9ET19TSVpFIDEyOAorc3RhdGljIHN0cnVjdCB3b3JrX2l0ZW0gdG9kb1tUT0RPX1NJWkVdOworc3RhdGljIGludCB0b2RvX3N0YXJ0Oworc3RhdGljIGludCB0b2RvX2VuZDsKK3N0YXRpYyBpbnQgdG9kb19kb25lOworCisvKiBIYXMgYWxsIHdvcmsgaXRlbXMgYmVlbiBhZGRlZD8gKi8KK3N0YXRpYyBpbnQgYWxsX3dvcmtfYWRkZWQ7CisKKy8qIFRoaXMgbG9jayBwcm90ZWN0cyBhbGwgdGhlIHZhcmlhYmxlcyBhYm92ZS4gKi8KK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ3JlcF9tdXRleDsKKworc3RhdGljIGlubGluZSB2b2lkIGdyZXBfbG9jayh2b2lkKQoreworCWlmICh1c2VfdGhyZWFkcykKKwkJcHRocmVhZF9tdXRleF9sb2NrKCZncmVwX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyZXBfdW5sb2NrKHZvaWQpCit7CisJaWYgKHVzZV90aHJlYWRzKQorCQlwdGhyZWFkX211dGV4X3VubG9jaygmZ3JlcF9tdXRleCk7Cit9CisKKy8qIFNpZ25hbGxlZCB3aGVuIGEgbmV3IHdvcmtfaXRlbSBpcyBhZGRlZCB0byB0b2RvLiAqLworc3RhdGljIHB0aHJlYWRfY29uZF90IGNvbmRfYWRkOworCisvKiBTaWduYWxsZWQgd2hlbiB0aGUgcmVzdWx0IGZyb20gb25lIHdvcmtfaXRlbSBpcyB3cml0dGVuIHRvCisgKiBzdGRvdXQuCisgKi8KK3N0YXRpYyBwdGhyZWFkX2NvbmRfdCBjb25kX3dyaXRlOworCisvKiBTaWduYWxsZWQgd2hlbiB3ZSBhcmUgZmluaXNoZWQgd2l0aCBldmVyeXRoaW5nLiAqLworc3RhdGljIHB0aHJlYWRfY29uZF90IGNvbmRfcmVzdWx0OworCitzdGF0aWMgaW50IHNraXBfZmlyc3RfbGluZTsKKworc3RhdGljIHZvaWQgYWRkX3dvcmsoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGVudW0gZ3JlcF9zb3VyY2VfdHlwZSB0eXBlLAorCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHZvaWQgKmlkKQoreworCWdyZXBfbG9jaygpOworCisJd2hpbGUgKCh0b2RvX2VuZCsxKSAlIEFSUkFZX1NJWkUodG9kbykgPT0gdG9kb19kb25lKSB7CisJCXB0aHJlYWRfY29uZF93YWl0KCZjb25kX3dyaXRlLCAmZ3JlcF9tdXRleCk7CisJfQorCisJZ3JlcF9zb3VyY2VfaW5pdCgmdG9kb1t0b2RvX2VuZF0uc291cmNlLCB0eXBlLCBuYW1lLCBwYXRoLCBpZCk7CisJaWYgKG9wdC0+YmluYXJ5ICE9IEdSRVBfQklOQVJZX1RFWFQpCisJCWdyZXBfc291cmNlX2xvYWRfZHJpdmVyKCZ0b2RvW3RvZG9fZW5kXS5zb3VyY2UpOworCXRvZG9bdG9kb19lbmRdLmRvbmUgPSAwOworCXN0cmJ1Zl9yZXNldCgmdG9kb1t0b2RvX2VuZF0ub3V0KTsKKwl0b2RvX2VuZCA9ICh0b2RvX2VuZCArIDEpICUgQVJSQVlfU0laRSh0b2RvKTsKKworCXB0aHJlYWRfY29uZF9zaWduYWwoJmNvbmRfYWRkKTsKKwlncmVwX3VubG9jaygpOworfQorCitzdGF0aWMgc3RydWN0IHdvcmtfaXRlbSAqZ2V0X3dvcmsodm9pZCkKK3sKKwlzdHJ1Y3Qgd29ya19pdGVtICpyZXQ7CisKKwlncmVwX2xvY2soKTsKKwl3aGlsZSAodG9kb19zdGFydCA9PSB0b2RvX2VuZCAmJiAhYWxsX3dvcmtfYWRkZWQpIHsKKwkJcHRocmVhZF9jb25kX3dhaXQoJmNvbmRfYWRkLCAmZ3JlcF9tdXRleCk7CisJfQorCisJaWYgKHRvZG9fc3RhcnQgPT0gdG9kb19lbmQgJiYgYWxsX3dvcmtfYWRkZWQpIHsKKwkJcmV0ID0gTlVMTDsKKwl9IGVsc2UgeworCQlyZXQgPSAmdG9kb1t0b2RvX3N0YXJ0XTsKKwkJdG9kb19zdGFydCA9ICh0b2RvX3N0YXJ0ICsgMSkgJSBBUlJBWV9TSVpFKHRvZG8pOworCX0KKwlncmVwX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHdvcmtfZG9uZShzdHJ1Y3Qgd29ya19pdGVtICp3KQoreworCWludCBvbGRfZG9uZTsKKworCWdyZXBfbG9jaygpOworCXctPmRvbmUgPSAxOworCW9sZF9kb25lID0gdG9kb19kb25lOworCWZvcig7IHRvZG9bdG9kb19kb25lXS5kb25lICYmIHRvZG9fZG9uZSAhPSB0b2RvX3N0YXJ0OworCSAgICB0b2RvX2RvbmUgPSAodG9kb19kb25lKzEpICUgQVJSQVlfU0laRSh0b2RvKSkgeworCQl3ID0gJnRvZG9bdG9kb19kb25lXTsKKwkJaWYgKHctPm91dC5sZW4pIHsKKwkJCWNvbnN0IGNoYXIgKnAgPSB3LT5vdXQuYnVmOworCQkJc2l6ZV90IGxlbiA9IHctPm91dC5sZW47CisKKwkJCS8qIFNraXAgdGhlIGxlYWRpbmcgaHVuayBtYXJrIG9mIHRoZSBmaXJzdCBmaWxlLiAqLworCQkJaWYgKHNraXBfZmlyc3RfbGluZSkgeworCQkJCXdoaWxlIChsZW4pIHsKKwkJCQkJbGVuLS07CisJCQkJCWlmICgqcCsrID09ICdcbicpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJc2tpcF9maXJzdF9saW5lID0gMDsKKwkJCX0KKworCQkJd3JpdGVfb3JfZGllKDEsIHAsIGxlbik7CisJCX0KKwkJZ3JlcF9zb3VyY2VfY2xlYXIoJnctPnNvdXJjZSk7CisJfQorCisJaWYgKG9sZF9kb25lICE9IHRvZG9fZG9uZSkKKwkJcHRocmVhZF9jb25kX3NpZ25hbCgmY29uZF93cml0ZSk7CisKKwlpZiAoYWxsX3dvcmtfYWRkZWQgJiYgdG9kb19kb25lID09IHRvZG9fZW5kKQorCQlwdGhyZWFkX2NvbmRfc2lnbmFsKCZjb25kX3Jlc3VsdCk7CisKKwlncmVwX3VubG9jaygpOworfQorCitzdGF0aWMgdm9pZCAqcnVuKHZvaWQgKmFyZykKK3sKKwlpbnQgaGl0ID0gMDsKKwlzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCA9IGFyZzsKKworCXdoaWxlICgxKSB7CisJCXN0cnVjdCB3b3JrX2l0ZW0gKncgPSBnZXRfd29yaygpOworCQlpZiAoIXcpCisJCQlicmVhazsKKworCQlvcHQtPm91dHB1dF9wcml2ID0gdzsKKwkJaGl0IHw9IGdyZXBfc291cmNlKG9wdCwgJnctPnNvdXJjZSk7CisJCWdyZXBfc291cmNlX2NsZWFyX2RhdGEoJnctPnNvdXJjZSk7CisJCXdvcmtfZG9uZSh3KTsKKwl9CisJZnJlZV9ncmVwX3BhdHRlcm5zKGFyZyk7CisJZnJlZShhcmcpOworCisJcmV0dXJuICh2b2lkKikgKGludHB0cl90KSBoaXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl9vdXQoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHdvcmtfaXRlbSAqdyA9IG9wdC0+b3V0cHV0X3ByaXY7CisJc3RyYnVmX2FkZCgmdy0+b3V0LCBidWYsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCBzdGFydF90aHJlYWRzKHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCWludCBpOworCisJcHRocmVhZF9tdXRleF9pbml0KCZncmVwX211dGV4LCBOVUxMKTsKKwlwdGhyZWFkX211dGV4X2luaXQoJmdyZXBfcmVhZF9tdXRleCwgTlVMTCk7CisJcHRocmVhZF9tdXRleF9pbml0KCZncmVwX2F0dHJfbXV0ZXgsIE5VTEwpOworCXB0aHJlYWRfY29uZF9pbml0KCZjb25kX2FkZCwgTlVMTCk7CisJcHRocmVhZF9jb25kX2luaXQoJmNvbmRfd3JpdGUsIE5VTEwpOworCXB0aHJlYWRfY29uZF9pbml0KCZjb25kX3Jlc3VsdCwgTlVMTCk7CisJZ3JlcF91c2VfbG9ja3MgPSAxOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodG9kbyk7IGkrKykgeworCQlzdHJidWZfaW5pdCgmdG9kb1tpXS5vdXQsIDApOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRocmVhZHMpOyBpKyspIHsKKwkJaW50IGVycjsKKwkJc3RydWN0IGdyZXBfb3B0ICpvID0gZ3JlcF9vcHRfZHVwKG9wdCk7CisJCW8tPm91dHB1dCA9IHN0cmJ1Zl9vdXQ7CisJCW8tPmRlYnVnID0gMDsKKwkJY29tcGlsZV9ncmVwX3BhdHRlcm5zKG8pOworCQllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkc1tpXSwgTlVMTCwgcnVuLCBvKTsKKworCQlpZiAoZXJyKQorCQkJZGllKF8oImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIpLAorCQkJICAgIHN0cmVycm9yKGVycikpOworCX0KK30KKworc3RhdGljIGludCB3YWl0X2FsbCh2b2lkKQoreworCWludCBoaXQgPSAwOworCWludCBpOworCisJZ3JlcF9sb2NrKCk7CisJYWxsX3dvcmtfYWRkZWQgPSAxOworCisJLyogV2FpdCB1bnRpbCBhbGwgd29yayBpcyBkb25lLiAqLworCXdoaWxlICh0b2RvX2RvbmUgIT0gdG9kb19lbmQpCisJCXB0aHJlYWRfY29uZF93YWl0KCZjb25kX3Jlc3VsdCwgJmdyZXBfbXV0ZXgpOworCisJLyogV2FrZSB1cCBhbGwgdGhlIGNvbnN1bWVyIHRocmVhZHMgc28gdGhleSBjYW4gc2VlIHRoYXQgdGhlcmUKKwkgKiBpcyBubyBtb3JlIHdvcmsgdG8gZG8uCisJICovCisJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmY29uZF9hZGQpOworCWdyZXBfdW5sb2NrKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aHJlYWRzKTsgaSsrKSB7CisJCXZvaWQgKmg7CisJCXB0aHJlYWRfam9pbih0aHJlYWRzW2ldLCAmaCk7CisJCWhpdCB8PSAoaW50KSAoaW50cHRyX3QpIGg7CisJfQorCisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZncmVwX211dGV4KTsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmdyZXBfcmVhZF9tdXRleCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZncmVwX2F0dHJfbXV0ZXgpOworCXB0aHJlYWRfY29uZF9kZXN0cm95KCZjb25kX2FkZCk7CisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJmNvbmRfd3JpdGUpOworCXB0aHJlYWRfY29uZF9kZXN0cm95KCZjb25kX3Jlc3VsdCk7CisJZ3JlcF91c2VfbG9ja3MgPSAwOworCisJcmV0dXJuIGhpdDsKK30KKyNlbHNlIC8qICFOT19QVEhSRUFEUyAqLworCitzdGF0aWMgaW50IHdhaXRfYWxsKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBncmVwX2NtZF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaW50IHN0ID0gZ3JlcF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworCWlmIChnaXRfY29sb3JfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpIDwgMCkKKwkJc3QgPSAtMTsKKwlyZXR1cm4gc3Q7Cit9CisKK3N0YXRpYyB2b2lkICpsb2NrX2FuZF9yZWFkX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXZvaWQgKmRhdGE7CisKKwlncmVwX3JlYWRfbG9jaygpOworCWRhdGEgPSByZWFkX3NoYTFfZmlsZShzaGExLCB0eXBlLCBzaXplKTsKKwlncmVwX3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9zaGExKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgdHJlZV9uYW1lX2xlbiwKKwkJICAgICBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgcGF0aGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKG9wdC0+cmVsYXRpdmUgJiYgb3B0LT5wcmVmaXhfbGVuZ3RoKSB7CisJCXF1b3RlX3BhdGhfcmVsYXRpdmUoZmlsZW5hbWUgKyB0cmVlX25hbWVfbGVuLCBvcHQtPnByZWZpeCwgJnBhdGhidWYpOworCQlzdHJidWZfaW5zZXJ0KCZwYXRoYnVmLCAwLCBmaWxlbmFtZSwgdHJlZV9uYW1lX2xlbik7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZHN0cigmcGF0aGJ1ZiwgZmlsZW5hbWUpOworCX0KKworI2lmbmRlZiBOT19QVEhSRUFEUworCWlmICh1c2VfdGhyZWFkcykgeworCQlhZGRfd29yayhvcHQsIEdSRVBfU09VUkNFX1NIQTEsIHBhdGhidWYuYnVmLCBwYXRoLCBzaGExKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnBhdGhidWYpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJc3RydWN0IGdyZXBfc291cmNlIGdzOworCQlpbnQgaGl0OworCisJCWdyZXBfc291cmNlX2luaXQoJmdzLCBHUkVQX1NPVVJDRV9TSEExLCBwYXRoYnVmLmJ1ZiwgcGF0aCwgc2hhMSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoYnVmKTsKKwkJaGl0ID0gZ3JlcF9zb3VyY2Uob3B0LCAmZ3MpOworCisJCWdyZXBfc291cmNlX2NsZWFyKCZncyk7CisJCXJldHVybiBoaXQ7CisJfQorfQorCitzdGF0aWMgaW50IGdyZXBfZmlsZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChvcHQtPnJlbGF0aXZlICYmIG9wdC0+cHJlZml4X2xlbmd0aCkKKwkJcXVvdGVfcGF0aF9yZWxhdGl2ZShmaWxlbmFtZSwgb3B0LT5wcmVmaXgsICZidWYpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBmaWxlbmFtZSk7CisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKwlpZiAodXNlX3RocmVhZHMpIHsKKwkJYWRkX3dvcmsob3B0LCBHUkVQX1NPVVJDRV9GSUxFLCBidWYuYnVmLCBmaWxlbmFtZSwgZmlsZW5hbWUpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlCisjZW5kaWYKKwl7CisJCXN0cnVjdCBncmVwX3NvdXJjZSBnczsKKwkJaW50IGhpdDsKKworCQlncmVwX3NvdXJjZV9pbml0KCZncywgR1JFUF9TT1VSQ0VfRklMRSwgYnVmLmJ1ZiwgZmlsZW5hbWUsIGZpbGVuYW1lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCWhpdCA9IGdyZXBfc291cmNlKG9wdCwgJmdzKTsKKworCQlncmVwX3NvdXJjZV9jbGVhcigmZ3MpOworCQlyZXR1cm4gaGl0OworCX0KK30KKworc3RhdGljIHZvaWQgYXBwZW5kX3BhdGgoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpwYXRoX2xpc3QgPSBvcHQtPm91dHB1dF9wcml2OworCisJaWYgKGxlbiA9PSAxICYmICooY29uc3QgY2hhciAqKWRhdGEgPT0gJ1wwJykKKwkJcmV0dXJuOworCXN0cmluZ19saXN0X2FwcGVuZChwYXRoX2xpc3QsIHhzdHJuZHVwKGRhdGEsIGxlbikpOworfQorCitzdGF0aWMgdm9pZCBydW5fcGFnZXIoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnBhdGhfbGlzdCA9IG9wdC0+b3V0cHV0X3ByaXY7CisJY29uc3QgY2hhciAqKmFyZ3YgPSB4bWFsbG9jKHNpemVvZihjb25zdCBjaGFyICopICogKHBhdGhfbGlzdC0+bnIgKyAxKSk7CisJaW50IGksIHN0YXR1czsKKworCWZvciAoaSA9IDA7IGkgPCBwYXRoX2xpc3QtPm5yOyBpKyspCisJCWFyZ3ZbaV0gPSBwYXRoX2xpc3QtPml0ZW1zW2ldLnN0cmluZzsKKwlhcmd2W3BhdGhfbGlzdC0+bnJdID0gTlVMTDsKKworCXN0YXR1cyA9IHJ1bl9jb21tYW5kX3Zfb3B0X2NkX2Vudihhcmd2LCBSVU5fVVNJTkdfU0hFTEwsIHByZWZpeCwgTlVMTCk7CisJaWYgKHN0YXR1cykKKwkJZXhpdChzdGF0dXMpOworCWZyZWUoYXJndik7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF9jYWNoZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywgaW50IGNhY2hlZCkKK3sKKwlpbnQgaGl0ID0gMDsKKwlpbnQgbnI7CisJcmVhZF9jYWNoZSgpOworCisJZm9yIChuciA9IDA7IG5yIDwgYWN0aXZlX25yOyBucisrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbbnJdOworCQlpZiAoIVNfSVNSRUcoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7CisJCWlmICghY2VfcGF0aF9tYXRjaChjZSwgcGF0aHNwZWMsIE5VTEwpKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIElmIENFX1ZBTElEIGlzIG9uLCB3ZSBhc3N1bWUgd29ya3RyZWUgZmlsZSBhbmQgaXRzIGNhY2hlIGVudHJ5CisJCSAqIGFyZSBpZGVudGljYWwsIGV2ZW4gaWYgd29ya3RyZWUgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCwgc28gdXNlCisJCSAqIGNhY2hlIHZlcnNpb24gaW5zdGVhZAorCQkgKi8KKwkJaWYgKGNhY2hlZCB8fCAoY2UtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpIHx8IGNlX3NraXBfd29ya3RyZWUoY2UpKSB7CisJCQlpZiAoY2Vfc3RhZ2UoY2UpKQorCQkJCWNvbnRpbnVlOworCQkJaGl0IHw9IGdyZXBfc2hhMShvcHQsIGNlLT5zaGExLCBjZS0+bmFtZSwgMCwgY2UtPm5hbWUpOworCQl9CisJCWVsc2UKKwkJCWhpdCB8PSBncmVwX2ZpbGUob3B0LCBjZS0+bmFtZSk7CisJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCWRvIHsKKwkJCQlucisrOworCQkJfSB3aGlsZSAobnIgPCBhY3RpdmVfbnIgJiYKKwkJCQkgIXN0cmNtcChjZS0+bmFtZSwgYWN0aXZlX2NhY2hlW25yXS0+bmFtZSkpOworCQkJbnItLTsgLyogY29tcGVuc2F0ZSBmb3IgbG9vcCBjb250cm9sICovCisJCX0KKwkJaWYgKGhpdCAmJiBvcHQtPnN0YXR1c19vbmx5KQorCQkJYnJlYWs7CisJfQorCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyBpbnQgZ3JlcF90cmVlKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkgICAgIHN0cnVjdCB0cmVlX2Rlc2MgKnRyZWUsIHN0cnVjdCBzdHJidWYgKmJhc2UsIGludCB0bl9sZW4sCisJCSAgICAgaW50IGNoZWNrX2F0dHIpCit7CisJaW50IGhpdCA9IDA7CisJZW51bSBpbnRlcmVzdGluZyBtYXRjaCA9IGVudHJ5X25vdF9pbnRlcmVzdGluZzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwlpbnQgb2xkX2Jhc2VsZW4gPSBiYXNlLT5sZW47CisKKwl3aGlsZSAodHJlZV9lbnRyeSh0cmVlLCAmZW50cnkpKSB7CisJCWludCB0ZV9sZW4gPSB0cmVlX2VudHJ5X2xlbigmZW50cnkpOworCisJCWlmIChtYXRjaCAhPSBhbGxfZW50cmllc19pbnRlcmVzdGluZykgeworCQkJbWF0Y2ggPSB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKCZlbnRyeSwgYmFzZSwgdG5fbGVuLCBwYXRoc3BlYyk7CisJCQlpZiAobWF0Y2ggPT0gYWxsX2VudHJpZXNfbm90X2ludGVyZXN0aW5nKQorCQkJCWJyZWFrOworCQkJaWYgKG1hdGNoID09IGVudHJ5X25vdF9pbnRlcmVzdGluZykKKwkJCQljb250aW51ZTsKKwkJfQorCisJCXN0cmJ1Zl9hZGQoYmFzZSwgZW50cnkucGF0aCwgdGVfbGVuKTsKKworCQlpZiAoU19JU1JFRyhlbnRyeS5tb2RlKSkgeworCQkJaGl0IHw9IGdyZXBfc2hhMShvcHQsIGVudHJ5LnNoYTEsIGJhc2UtPmJ1ZiwgdG5fbGVuLAorCQkJCQkgY2hlY2tfYXR0ciA/IGJhc2UtPmJ1ZiArIHRuX2xlbiA6IE5VTEwpOworCQl9CisJCWVsc2UgaWYgKFNfSVNESVIoZW50cnkubW9kZSkpIHsKKwkJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJCXN0cnVjdCB0cmVlX2Rlc2Mgc3ViOworCQkJdm9pZCAqZGF0YTsKKwkJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCQkJZGF0YSA9IGxvY2tfYW5kX3JlYWRfc2hhMV9maWxlKGVudHJ5LnNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJCQlpZiAoIWRhdGEpCisJCQkJZGllKF8oInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIpLAorCQkJCSAgICBzaGExX3RvX2hleChlbnRyeS5zaGExKSk7CisKKwkJCXN0cmJ1Zl9hZGRjaChiYXNlLCAnLycpOworCQkJaW5pdF90cmVlX2Rlc2MoJnN1YiwgZGF0YSwgc2l6ZSk7CisJCQloaXQgfD0gZ3JlcF90cmVlKG9wdCwgcGF0aHNwZWMsICZzdWIsIGJhc2UsIHRuX2xlbiwKKwkJCQkJIGNoZWNrX2F0dHIpOworCQkJZnJlZShkYXRhKTsKKwkJfQorCQlzdHJidWZfc2V0bGVuKGJhc2UsIG9sZF9iYXNlbGVuKTsKKworCQlpZiAoaGl0ICYmIG9wdC0+c3RhdHVzX29ubHkpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGhpdDsKK30KKworc3RhdGljIGludCBncmVwX29iamVjdChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJICAgICAgIHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAob2JqLT50eXBlID09IE9CSl9CTE9CKQorCQlyZXR1cm4gZ3JlcF9zaGExKG9wdCwgb2JqLT5zaGExLCBuYW1lLCAwLCBwYXRoKTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQgfHwgb2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCXN0cnVjdCB0cmVlX2Rlc2MgdHJlZTsKKwkJdm9pZCAqZGF0YTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQlzdHJ1Y3Qgc3RyYnVmIGJhc2U7CisJCWludCBoaXQsIGxlbjsKKworCQlncmVwX3JlYWRfbG9jaygpOworCQlkYXRhID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uob2JqLT5zaGExLCB0cmVlX3R5cGUsCisJCQkJCQkgICZzaXplLCBOVUxMKTsKKwkJZ3JlcF9yZWFkX3VubG9jaygpOworCisJCWlmICghZGF0YSkKKwkJCWRpZShfKCJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiKSwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisKKwkJbGVuID0gbmFtZSA/IHN0cmxlbihuYW1lKSA6IDA7CisJCXN0cmJ1Zl9pbml0KCZiYXNlLCBQQVRIX01BWCArIGxlbiArIDEpOworCQlpZiAobGVuKSB7CisJCQlzdHJidWZfYWRkKCZiYXNlLCBuYW1lLCBsZW4pOworCQkJc3RyYnVmX2FkZGNoKCZiYXNlLCAnOicpOworCQl9CisJCWluaXRfdHJlZV9kZXNjKCZ0cmVlLCBkYXRhLCBzaXplKTsKKwkJaGl0ID0gZ3JlcF90cmVlKG9wdCwgcGF0aHNwZWMsICZ0cmVlLCAmYmFzZSwgYmFzZS5sZW4sCisJCQkJb2JqLT50eXBlID09IE9CSl9DT01NSVQpOworCQlzdHJidWZfcmVsZWFzZSgmYmFzZSk7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiBoaXQ7CisJfQorCWRpZShfKCJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIiksIHR5cGVuYW1lKG9iai0+dHlwZSkpOworfQorCitzdGF0aWMgaW50IGdyZXBfb2JqZWN0cyhzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCWNvbnN0IHN0cnVjdCBvYmplY3RfYXJyYXkgKmxpc3QpCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGhpdCA9IDA7CisJY29uc3QgdW5zaWduZWQgaW50IG5yID0gbGlzdC0+bnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpyZWFsX29iajsKKwkJcmVhbF9vYmogPSBkZXJlZl90YWcobGlzdC0+b2JqZWN0c1tpXS5pdGVtLCBOVUxMLCAwKTsKKwkJaWYgKGdyZXBfb2JqZWN0KG9wdCwgcGF0aHNwZWMsIHJlYWxfb2JqLCBsaXN0LT5vYmplY3RzW2ldLm5hbWUsIGxpc3QtPm9iamVjdHNbaV0ucGF0aCkpIHsKKwkJCWhpdCA9IDE7CisJCQlpZiAob3B0LT5zdGF0dXNfb25seSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gaGl0OworfQorCitzdGF0aWMgaW50IGdyZXBfZGlyZWN0b3J5KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkJICBpbnQgZXhjX3N0ZCkKK3sKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisJaW50IGksIGhpdCA9IDA7CisKKwltZW1zZXQoJmRpciwgMCwgc2l6ZW9mKGRpcikpOworCWlmIChleGNfc3RkKQorCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKworCWZpbGxfZGlyZWN0b3J5KCZkaXIsIHBhdGhzcGVjKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLm5yOyBpKyspIHsKKwkJaWYgKCFkaXJfcGF0aF9tYXRjaChkaXIuZW50cmllc1tpXSwgcGF0aHNwZWMsIDAsIE5VTEwpKQorCQkJY29udGludWU7CisJCWhpdCB8PSBncmVwX2ZpbGUob3B0LCBkaXIuZW50cmllc1tpXS0+bmFtZSk7CisJCWlmIChoaXQgJiYgb3B0LT5zdGF0dXNfb25seSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gaGl0OworfQorCitzdGF0aWMgaW50IGNvbnRleHRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCWludCB2YWx1ZTsKKwljb25zdCBjaGFyICplbmRwOworCisJaWYgKHVuc2V0KSB7CisJCWdyZXBfb3B0LT5wcmVfY29udGV4dCA9IGdyZXBfb3B0LT5wb3N0X2NvbnRleHQgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJdmFsdWUgPSBzdHJ0b2woYXJnLCAoY2hhciAqKikmZW5kcCwgMTApOworCWlmICgqZW5kcCkgeworCQlyZXR1cm4gZXJyb3IoXygic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIpLAorCQkJICAgICBvcHQtPnNob3J0X25hbWUpOworCX0KKwlncmVwX29wdC0+cHJlX2NvbnRleHQgPSBncmVwX29wdC0+cG9zdF9jb250ZXh0ID0gdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmlsZV9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCWludCBmcm9tX3N0ZGluID0gIXN0cmNtcChhcmcsICItIik7CisJRklMRSAqcGF0dGVybnM7CisJaW50IGxubyA9IDA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJcGF0dGVybnMgPSBmcm9tX3N0ZGluID8gc3RkaW4gOiBmb3BlbihhcmcsICJyIik7CisJaWYgKCFwYXR0ZXJucykKKwkJZGllX2Vycm5vKF8oImNhbm5vdCBvcGVuICclcyciKSwgYXJnKTsKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJnNiLCBwYXR0ZXJucywgJ1xuJykgPT0gMCkgeworCQkvKiBpZ25vcmUgZW1wdHkgbGluZSBsaWtlIGdyZXAgZG9lcyAqLworCQlpZiAoc2IubGVuID09IDApCisJCQljb250aW51ZTsKKworCQlhcHBlbmRfZ3JlcF9wYXQoZ3JlcF9vcHQsIHNiLmJ1Ziwgc2IubGVuLCBhcmcsICsrbG5vLAorCQkJCUdSRVBfUEFUVEVSTik7CisJfQorCWlmICghZnJvbV9zdGRpbikKKwkJZmNsb3NlKHBhdHRlcm5zKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vdF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsICItLW5vdCIsICJjb21tYW5kIGxpbmUiLCAwLCBHUkVQX05PVCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW5kX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgIi0tYW5kIiwgImNvbW1hbmQgbGluZSIsIDAsIEdSRVBfQU5EKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcGVuX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdCA9IG9wdC0+dmFsdWU7CisJYXBwZW5kX2dyZXBfcGF0dGVybihncmVwX29wdCwgIigiLCAiY29tbWFuZCBsaW5lIiwgMCwgR1JFUF9PUEVOX1BBUkVOKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbG9zZV9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsICIpIiwgImNvbW1hbmQgbGluZSIsIDAsIEdSRVBfQ0xPU0VfUEFSRU4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhdHRlcm5fY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgaW50IHVuc2V0KQoreworCXN0cnVjdCBncmVwX29wdCAqZ3JlcF9vcHQgPSBvcHQtPnZhbHVlOworCWFwcGVuZF9ncmVwX3BhdHRlcm4oZ3JlcF9vcHQsIGFyZywgIi1lIG9wdGlvbiIsIDAsIEdSRVBfUEFUVEVSTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGVscF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJldHVybiAtMTsKK30KKworaW50IGNtZF9ncmVwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBoaXQgPSAwOworCWludCBjYWNoZWQgPSAwLCB1bnRyYWNrZWQgPSAwLCBvcHRfZXhjbHVkZSA9IC0xOworCWludCBzZWVuX2Rhc2hkYXNoID0gMDsKKwlpbnQgZXh0ZXJuYWxfZ3JlcF9hbGxvd2VkX19pZ25vcmVkOworCWNvbnN0IGNoYXIgKnNob3dfaW5fcGFnZXIgPSBOVUxMLCAqZGVmYXVsdF9wYWdlciA9ICJkdW1teSI7CisJc3RydWN0IGdyZXBfb3B0IG9wdDsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IGxpc3QgPSBPQkpFQ1RfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJc3RydWN0IHN0cmluZ19saXN0IHBhdGhfbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJaW50IGk7CisJaW50IGR1bW15OworCWludCB1c2VfaW5kZXggPSAxOworCWludCBwYXR0ZXJuX3R5cGVfYXJnID0gR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQ7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgImNhY2hlZCIsICZjYWNoZWQsCisJCQlOXygic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIpKSwKKwkJT1BUX05FR0JJVCgwLCAibm8taW5kZXgiLCAmdXNlX2luZGV4LAorCQkJIE5fKCJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIpLCAxKSwKKwkJT1BUX0JPT0woMCwgInVudHJhY2tlZCIsICZ1bnRyYWNrZWQsCisJCQlOXygic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIikpLAorCQlPUFRfU0VUX0lOVCgwLCAiZXhjbHVkZS1zdGFuZGFyZCIsICZvcHRfZXhjbHVkZSwKKwkJCSAgICBOXygiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIiksIDEpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfQk9PTCgndicsICJpbnZlcnQtbWF0Y2giLCAmb3B0LmludmVydCwKKwkJCU5fKCJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIpKSwKKwkJT1BUX0JPT0woJ2knLCAiaWdub3JlLWNhc2UiLCAmb3B0Lmlnbm9yZV9jYXNlLAorCQkJTl8oImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciKSksCisJCU9QVF9CT09MKCd3JywgIndvcmQtcmVnZXhwIiwgJm9wdC53b3JkX3JlZ2V4cCwKKwkJCU5fKCJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIpKSwKKwkJT1BUX1NFVF9JTlQoJ2EnLCAidGV4dCIsICZvcHQuYmluYXJ5LAorCQkJTl8oInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiKSwgR1JFUF9CSU5BUllfVEVYVCksCisJCU9QVF9TRVRfSU5UKCdJJywgTlVMTCwgJm9wdC5iaW5hcnksCisJCQlOXygiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIiksCisJCQlHUkVQX0JJTkFSWV9OT01BVENIKSwKKwkJT1BUX0JPT0woMCwgInRleHRjb252IiwgJm9wdC5hbGxvd190ZXh0Y29udiwKKwkJCSBOXygicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIikpLAorCQl7IE9QVElPTl9JTlRFR0VSLCAwLCAibWF4LWRlcHRoIiwgJm9wdC5tYXhfZGVwdGgsIE5fKCJkZXB0aCIpLAorCQkJTl8oImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlOVUxMLCAxIH0sCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9TRVRfSU5UKCdFJywgImV4dGVuZGVkLXJlZ2V4cCIsICZwYXR0ZXJuX3R5cGVfYXJnLAorCQkJICAgIE5fKCJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIpLAorCQkJICAgIEdSRVBfUEFUVEVSTl9UWVBFX0VSRSksCisJCU9QVF9TRVRfSU5UKCdHJywgImJhc2ljLXJlZ2V4cCIsICZwYXR0ZXJuX3R5cGVfYXJnLAorCQkJICAgIE5fKCJ1c2UgYmFzaWMgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyAoZGVmYXVsdCkiKSwKKwkJCSAgICBHUkVQX1BBVFRFUk5fVFlQRV9CUkUpLAorCQlPUFRfU0VUX0lOVCgnRicsICJmaXhlZC1zdHJpbmdzIiwgJnBhdHRlcm5fdHlwZV9hcmcsCisJCQkgICAgTl8oImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIiksCisJCQkgICAgR1JFUF9QQVRURVJOX1RZUEVfRklYRUQpLAorCQlPUFRfU0VUX0lOVCgnUCcsICJwZXJsLXJlZ2V4cCIsICZwYXR0ZXJuX3R5cGVfYXJnLAorCQkJICAgIE5fKCJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiKSwKKwkJCSAgICBHUkVQX1BBVFRFUk5fVFlQRV9QQ1JFKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0JPT0woJ24nLCAibGluZS1udW1iZXIiLCAmb3B0LmxpbmVudW0sIE5fKCJzaG93IGxpbmUgbnVtYmVycyIpKSwKKwkJT1BUX05FR0JJVCgnaCcsIE5VTEwsICZvcHQucGF0aG5hbWUsIE5fKCJkb24ndCBzaG93IGZpbGVuYW1lcyIpLCAxKSwKKwkJT1BUX0JJVCgnSCcsIE5VTEwsICZvcHQucGF0aG5hbWUsIE5fKCJzaG93IGZpbGVuYW1lcyIpLCAxKSwKKwkJT1BUX05FR0JJVCgwLCAiZnVsbC1uYW1lIiwgJm9wdC5yZWxhdGl2ZSwKKwkJCU5fKCJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IiksIDEpLAorCQlPUFRfQk9PTCgnbCcsICJmaWxlcy13aXRoLW1hdGNoZXMiLCAmb3B0Lm5hbWVfb25seSwKKwkJCU5fKCJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiKSksCisJCU9QVF9CT09MKDAsICJuYW1lLW9ubHkiLCAmb3B0Lm5hbWVfb25seSwKKwkJCU5fKCJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIpKSwKKwkJT1BUX0JPT0woJ0wnLCAiZmlsZXMtd2l0aG91dC1tYXRjaCIsCisJCQkmb3B0LnVubWF0Y2hfbmFtZV9vbmx5LAorCQkJTl8oInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIpKSwKKwkJT1BUX0JPT0woJ3onLCAibnVsbCIsICZvcHQubnVsbF9mb2xsb3dpbmdfbmFtZSwKKwkJCU5fKCJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIikpLAorCQlPUFRfQk9PTCgnYycsICJjb3VudCIsICZvcHQuY291bnQsCisJCQlOXygic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIpKSwKKwkJT1BUX19DT0xPUigmb3B0LmNvbG9yLCBOXygiaGlnaGxpZ2h0IG1hdGNoZXMiKSksCisJCU9QVF9CT09MKDAsICJicmVhayIsICZvcHQuZmlsZV9icmVhaywKKwkJCU5fKCJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIpKSwKKwkJT1BUX0JPT0woMCwgImhlYWRpbmciLCAmb3B0LmhlYWRpbmcsCisJCQlOXygic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIpKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0NBTExCQUNLKCdDJywgImNvbnRleHQiLCAmb3B0LCBOXygibiIpLAorCQkJTl8oInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIiksCisJCQljb250ZXh0X2NhbGxiYWNrKSwKKwkJT1BUX0lOVEVHRVIoJ0InLCAiYmVmb3JlLWNvbnRleHQiLCAmb3B0LnByZV9jb250ZXh0LAorCQkJTl8oInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiKSksCisJCU9QVF9JTlRFR0VSKCdBJywgImFmdGVyLWNvbnRleHQiLCAmb3B0LnBvc3RfY29udGV4dCwKKwkJCU5fKCJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiKSksCisJCU9QVF9OVU1CRVJfQ0FMTEJBQ0soJm9wdCwgTl8oInNob3J0Y3V0IGZvciAtQyBOVU0iKSwKKwkJCWNvbnRleHRfY2FsbGJhY2spLAorCQlPUFRfQk9PTCgncCcsICJzaG93LWZ1bmN0aW9uIiwgJm9wdC5mdW5jbmFtZSwKKwkJCU5fKCJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIikpLAorCQlPUFRfQk9PTCgnVycsICJmdW5jdGlvbi1jb250ZXh0IiwgJm9wdC5mdW5jYm9keSwKKwkJCU5fKCJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIpKSwKKwkJT1BUX0dST1VQKCIiKSwKKwkJT1BUX0NBTExCQUNLKCdmJywgTlVMTCwgJm9wdCwgTl8oImZpbGUiKSwKKwkJCU5fKCJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIpLCBmaWxlX2NhbGxiYWNrKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdlJywgTlVMTCwgJm9wdCwgTl8oInBhdHRlcm4iKSwKKwkJCU5fKCJtYXRjaCA8cGF0dGVybj4iKSwgUEFSU0VfT1BUX05PTkVHLCBwYXR0ZXJuX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiYW5kIiwgJm9wdCwgTlVMTCwKKwkJICBOXygiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIpLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgYW5kX2NhbGxiYWNrIH0sCisJCU9QVF9CT09MKDAsICJvciIsICZkdW1teSwgIiIpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgIm5vdCIsICZvcHQsIE5VTEwsICIiLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgbm90X2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnKCcsIE5VTEwsICZvcHQsIE5VTEwsICIiLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0RBU0gsCisJCSAgb3Blbl9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJyknLCBOVUxMLCAmb3B0LCBOVUxMLCAiIiwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9EQVNILAorCQkgIGNsb3NlX2NhbGxiYWNrIH0sCisJCU9QVF9fUVVJRVQoJm9wdC5zdGF0dXNfb25seSwKKwkJCSAgIE5fKCJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIpKSwKKwkJT1BUX0JPT0woMCwgImFsbC1tYXRjaCIsICZvcHQuYWxsX21hdGNoLAorCQkJTl8oInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiKSksCisJCXsgT1BUSU9OX1NFVF9JTlQsIDAsICJkZWJ1ZyIsICZvcHQuZGVidWcsIE5VTEwsCisJCSAgTl8oInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIiksCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX0hJRERFTiwgTlVMTCwgMSB9LAorCQlPUFRfR1JPVVAoIiIpLAorCQl7IE9QVElPTl9TVFJJTkcsICdPJywgIm9wZW4tZmlsZXMtaW4tcGFnZXIiLCAmc2hvd19pbl9wYWdlciwKKwkJCU5fKCJwYWdlciIpLCBOXygic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdClkZWZhdWx0X3BhZ2VyIH0sCisJCU9QVF9CT09MKDAsICJleHQtZ3JlcCIsICZleHRlcm5hbF9ncmVwX2FsbG93ZWRfX2lnbm9yZWQsCisJCQkgTl8oImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJoZWxwLWFsbCIsIE5VTEwsIE5VTEwsIE5fKCJzaG93IHVzYWdlIiksCisJCSAgUEFSU0VfT1BUX0hJRERFTiB8IFBBUlNFX09QVF9OT0FSRywgaGVscF9jYWxsYmFjayB9LAorCQlPUFRfRU5EKCkKKwl9OworCisJLyoKKwkgKiAnZ2l0IGdyZXAgLWgnLCB1bmxpa2UgJ2dpdCBncmVwIC1oIDxwYXR0ZXJuPicsIGlzIGEgcmVxdWVzdAorCSAqIHRvIHNob3cgdXNhZ2UgaW5mb3JtYXRpb24gYW5kIGV4aXQuCisJICovCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoZ3JlcF91c2FnZSwgb3B0aW9ucyk7CisKKwlpbml0X2dyZXBfZGVmYXVsdHMoKTsKKwlnaXRfY29uZmlnKGdyZXBfY21kX2NvbmZpZywgTlVMTCk7CisJZ3JlcF9pbml0KCZvcHQsIHByZWZpeCk7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIC0tIHRoZW4gdGhlIHBhdGhzIG11c3QgZXhpc3QgaW4gdGhlIHdvcmtpbmcKKwkgKiB0cmVlLiAgSWYgdGhlcmUgaXMgbm8gZXhwbGljaXQgcGF0dGVybiBzcGVjaWZpZWQgd2l0aCAtZSBvcgorCSAqIC1mLCB3ZSB0YWtlIHRoZSBmaXJzdCB1bnJlY29nbml6ZWQgbm9uIG9wdGlvbiB0byBiZSB0aGUKKwkgKiBwYXR0ZXJuLCBidXQgdGhlbiB3aGF0IGZvbGxvd3MgaXQgbXVzdCBiZSB6ZXJvIG9yIG1vcmUKKwkgKiB2YWxpZCByZWZzIHVwIHRvIHRoZSAtLSAoaWYgZXhpc3RzKSwgYW5kIHRoZW4gZXhpc3RpbmcKKwkgKiBwYXRocy4gIElmIHRoZXJlIGlzIGFuIGV4cGxpY2l0IHBhdHRlcm4sIHRoZW4gdGhlIGZpcnN0CisJICogdW5yZWNvZ25pemVkIG5vbiBvcHRpb24gaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVmcyBsaXN0CisJICogdGhhdCBjb250aW51ZXMgdXAgdG8gdGhlIC0tIChpZiBleGlzdHMpLCBhbmQgdGhlbiBwYXRocy4KKwkgKi8KKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdyZXBfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIHwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTiB8CisJCQkgICAgIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQKTsKKwlncmVwX2NvbW1pdF9wYXR0ZXJuX3R5cGUocGF0dGVybl90eXBlX2FyZywgJm9wdCk7CisKKwlpZiAodXNlX2luZGV4ICYmICFzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkKKwkJLyogZGllIHRoZSBzYW1lIHdheSBhcyBpZiB3ZSBkaWQgaXQgYXQgdGhlIGJlZ2lubmluZyAqLworCQlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwkvKgorCSAqIHNraXAgYSAtLSBzZXBhcmF0b3I7IHdlIGtub3cgaXQgY2Fubm90IGJlCisJICogc2VwYXJhdGluZyByZXZpc2lvbnMgZnJvbSBwYXRobmFtZXMgaWYKKwkgKiB3ZSBoYXZlbid0IGV2ZW4gaGFkIGFueSBwYXR0ZXJucyB5ZXQKKwkgKi8KKwlpZiAoYXJnYyA+IDAgJiYgIW9wdC5wYXR0ZXJuX2xpc3QgJiYgIXN0cmNtcChhcmd2WzBdLCAiLS0iKSkgeworCQlhcmd2Kys7CisJCWFyZ2MtLTsKKwl9CisKKwkvKiBGaXJzdCB1bnJlY29nbml6ZWQgbm9uLW9wdGlvbiB0b2tlbiAqLworCWlmIChhcmdjID4gMCAmJiAhb3B0LnBhdHRlcm5fbGlzdCkgeworCQlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZvcHQsIGFyZ3ZbMF0sICJjb21tYW5kIGxpbmUiLCAwLAorCQkJCSAgICBHUkVQX1BBVFRFUk4pOworCQlhcmd2Kys7CisJCWFyZ2MtLTsKKwl9CisKKwlpZiAoc2hvd19pbl9wYWdlciA9PSBkZWZhdWx0X3BhZ2VyKQorCQlzaG93X2luX3BhZ2VyID0gZ2l0X3BhZ2VyKDEpOworCWlmIChzaG93X2luX3BhZ2VyKSB7CisJCW9wdC5jb2xvciA9IDA7CisJCW9wdC5uYW1lX29ubHkgPSAxOworCQlvcHQubnVsbF9mb2xsb3dpbmdfbmFtZSA9IDE7CisJCW9wdC5vdXRwdXRfcHJpdiA9ICZwYXRoX2xpc3Q7CisJCW9wdC5vdXRwdXQgPSBhcHBlbmRfcGF0aDsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZwYXRoX2xpc3QsIHNob3dfaW5fcGFnZXIpOworCQl1c2VfdGhyZWFkcyA9IDA7CisJfQorCisJaWYgKCFvcHQucGF0dGVybl9saXN0KQorCQlkaWUoXygibm8gcGF0dGVybiBnaXZlbi4iKSk7CisJaWYgKCFvcHQuZml4ZWQgJiYgb3B0Lmlnbm9yZV9jYXNlKQorCQlvcHQucmVnZmxhZ3MgfD0gUkVHX0lDQVNFOworCisJY29tcGlsZV9ncmVwX3BhdHRlcm5zKCZvcHQpOworCisJLyogQ2hlY2sgcmV2cyBhbmQgdGhlbiBwYXRocyAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJc3RydWN0IG9iamVjdF9jb250ZXh0IG9jOworCQkvKiBJcyBpdCBhIHJldj8gKi8KKwkJaWYgKCFnZXRfc2hhMV93aXRoX2NvbnRleHQoYXJnLCAwLCBzaGExLCAmb2MpKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBwYXJzZV9vYmplY3Rfb3JfZGllKHNoYTEsIGFyZyk7CisJCQlpZiAoIXNlZW5fZGFzaGRhc2gpCisJCQkJdmVyaWZ5X25vbl9maWxlbmFtZShwcmVmaXgsIGFyZyk7CisJCQlhZGRfb2JqZWN0X2FycmF5X3dpdGhfcGF0aChvYmplY3QsIGFyZywgJmxpc3QsIG9jLm1vZGUsIG9jLnBhdGgpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgeworCQkJaSsrOworCQkJc2Vlbl9kYXNoZGFzaCA9IDE7CisJCX0KKwkJYnJlYWs7CisJfQorCisjaWZuZGVmIE5PX1BUSFJFQURTCisJaWYgKGxpc3QubnIgfHwgY2FjaGVkIHx8IG9ubGluZV9jcHVzKCkgPT0gMSkKKwkJdXNlX3RocmVhZHMgPSAwOworI2Vsc2UKKwl1c2VfdGhyZWFkcyA9IDA7CisjZW5kaWYKKworI2lmbmRlZiBOT19QVEhSRUFEUworCWlmICh1c2VfdGhyZWFkcykgeworCQlpZiAoIShvcHQubmFtZV9vbmx5IHx8IG9wdC51bm1hdGNoX25hbWVfb25seSB8fCBvcHQuY291bnQpCisJCSAgICAmJiAob3B0LnByZV9jb250ZXh0IHx8IG9wdC5wb3N0X2NvbnRleHQgfHwKKwkJCW9wdC5maWxlX2JyZWFrIHx8IG9wdC5mdW5jYm9keSkpCisJCQlza2lwX2ZpcnN0X2xpbmUgPSAxOworCQlzdGFydF90aHJlYWRzKCZvcHQpOworCX0KKyNlbmRpZgorCisJLyogVGhlIHJlc3QgYXJlIHBhdGhzICovCisJaWYgKCFzZWVuX2Rhc2hkYXNoKSB7CisJCWludCBqOworCQlmb3IgKGogPSBpOyBqIDwgYXJnYzsgaisrKQorCQkJdmVyaWZ5X2ZpbGVuYW1lKHByZWZpeCwgYXJndltqXSwgaiA9PSBpKTsKKwl9CisKKwlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfQ1dEIHwKKwkJICAgICAgIChvcHQubWF4X2RlcHRoICE9IC0xID8gUEFUSFNQRUNfTUFYREVQVEhfVkFMSUQgOiAwKSwKKwkJICAgICAgIHByZWZpeCwgYXJndiArIGkpOworCXBhdGhzcGVjLm1heF9kZXB0aCA9IG9wdC5tYXhfZGVwdGg7CisJcGF0aHNwZWMucmVjdXJzaXZlID0gMTsKKworCWlmIChzaG93X2luX3BhZ2VyICYmIChjYWNoZWQgfHwgbGlzdC5ucikpCisJCWRpZShfKCItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiKSk7CisKKwlpZiAoc2hvd19pbl9wYWdlciAmJiBvcHQucGF0dGVybl9saXN0ICYmICFvcHQucGF0dGVybl9saXN0LT5uZXh0KSB7CisJCWNvbnN0IGNoYXIgKnBhZ2VyID0gcGF0aF9saXN0Lml0ZW1zWzBdLnN0cmluZzsKKwkJaW50IGxlbiA9IHN0cmxlbihwYWdlcik7CisKKwkJaWYgKGxlbiA+IDQgJiYgaXNfZGlyX3NlcChwYWdlcltsZW4gLSA1XSkpCisJCQlwYWdlciArPSBsZW4gLSA0OworCisJCWlmIChvcHQuaWdub3JlX2Nhc2UgJiYgIXN0cmNtcCgibGVzcyIsIHBhZ2VyKSkKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcGF0aF9saXN0LCAiLUkiKTsKKworCQlpZiAoIXN0cmNtcCgibGVzcyIsIHBhZ2VyKSB8fCAhc3RyY21wKCJ2aSIsIHBhZ2VyKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIrLyVzJXMiLAorCQkJCQlzdHJjbXAoImxlc3MiLCBwYWdlcikgPyAiIiA6ICIqIiwKKwkJCQkJb3B0LnBhdHRlcm5fbGlzdC0+cGF0dGVybik7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnBhdGhfbGlzdCwgYnVmLmJ1Zik7CisJCQlzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCQl9CisJfQorCisJaWYgKCFzaG93X2luX3BhZ2VyICYmICFvcHQuc3RhdHVzX29ubHkpCisJCXNldHVwX3BhZ2VyKCk7CisKKwlpZiAoIXVzZV9pbmRleCAmJiAodW50cmFja2VkIHx8IGNhY2hlZCkpCisJCWRpZShfKCItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXguIikpOworCisJaWYgKCF1c2VfaW5kZXggfHwgdW50cmFja2VkKSB7CisJCWludCB1c2VfZXhjbHVkZSA9IChvcHRfZXhjbHVkZSA8IDApID8gdXNlX2luZGV4IDogISFvcHRfZXhjbHVkZTsKKwkJaWYgKGxpc3QubnIpCisJCQlkaWUoXygiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMuIikpOworCQloaXQgPSBncmVwX2RpcmVjdG9yeSgmb3B0LCAmcGF0aHNwZWMsIHVzZV9leGNsdWRlKTsKKwl9IGVsc2UgaWYgKDAgPD0gb3B0X2V4Y2x1ZGUpIHsKKwkJZGllKF8oIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzLiIpKTsKKwl9IGVsc2UgaWYgKCFsaXN0Lm5yKSB7CisJCWlmICghY2FjaGVkKQorCQkJc2V0dXBfd29ya190cmVlKCk7CisKKwkJaGl0ID0gZ3JlcF9jYWNoZSgmb3B0LCAmcGF0aHNwZWMsIGNhY2hlZCk7CisJfSBlbHNlIHsKKwkJaWYgKGNhY2hlZCkKKwkJCWRpZShfKCJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIikpOworCQloaXQgPSBncmVwX29iamVjdHMoJm9wdCwgJnBhdGhzcGVjLCAmbGlzdCk7CisJfQorCisJaWYgKHVzZV90aHJlYWRzKQorCQloaXQgfD0gd2FpdF9hbGwoKTsKKwlpZiAoaGl0ICYmIHNob3dfaW5fcGFnZXIpCisJCXJ1bl9wYWdlcigmb3B0LCBwcmVmaXgpOworCWZyZWVfZ3JlcF9wYXR0ZXJucygmb3B0KTsKKwlyZXR1cm4gIWhpdDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vaGFzaC1vYmplY3QuYyBiL2J1aWx0aW4vaGFzaC1vYmplY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2IwOThiCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9oYXNoLW9iamVjdC5jCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICogQ29weXJpZ2h0IChDKSBKdW5pbyBDIEhhbWFubywgMjAwNQorICovCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorCisvKgorICogVGhpcyBpcyB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgYW5kIGFzIHN1Y2ggaXQKKyAqIG5lZWRzIHRvIGJ5cGFzcyB0aGUgZGF0YSBjb252ZXJzaW9uIHBlcmZvcm1lZCBieSwgYW5kIHRoZSB0eXBlCisgKiBsaW1pdGF0aW9uIGltcG9zZWQgYnksIGluZGV4X2ZkKCkgYW5kIGl0cyBjYWxsZWVzLgorICovCitzdGF0aWMgaW50IGhhc2hfbGl0ZXJhbGx5KHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmZCwgY29uc3QgY2hhciAqdHlwZSwgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIGZkLCA0MDk2KSA8IDApCisJCXJldCA9IC0xOworCWVsc2UKKwkJcmV0ID0gaGFzaF9zaGExX2ZpbGVfbGl0ZXJhbGx5KGJ1Zi5idWYsIGJ1Zi5sZW4sIHR5cGUsIHNoYTEsIGZsYWdzKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBoYXNoX2ZkKGludCBmZCwgY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MsCisJCSAgICBpbnQgbGl0ZXJhbGx5KQoreworCXN0cnVjdCBzdGF0IHN0OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlpZiAoZnN0YXQoZmQsICZzdCkgPCAwIHx8CisJICAgIChsaXRlcmFsbHkKKwkgICAgID8gaGFzaF9saXRlcmFsbHkoc2hhMSwgZmQsIHR5cGUsIGZsYWdzKQorCSAgICAgOiBpbmRleF9mZChzaGExLCBmZCwgJnN0LCB0eXBlX2Zyb21fc3RyaW5nKHR5cGUpLCBwYXRoLCBmbGFncykpKQorCQlkaWUoKGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1QpCisJCSAgICA/ICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorCQkgICAgOiAiVW5hYmxlIHRvIGhhc2ggJXMiLCBwYXRoKTsKKwlwcmludGYoIiVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CisJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgImhhc2ggdG8gc3Rkb3V0Iik7Cit9CisKK3N0YXRpYyB2b2lkIGhhc2hfb2JqZWN0KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKnZwYXRoLAorCQkJdW5zaWduZWQgZmxhZ3MsIGludCBsaXRlcmFsbHkpCit7CisJaW50IGZkOworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKCJDYW5ub3Qgb3BlbiAnJXMnIiwgcGF0aCk7CisJaGFzaF9mZChmZCwgdHlwZSwgdnBhdGgsIGZsYWdzLCBsaXRlcmFsbHkpOworfQorCitzdGF0aWMgdm9pZCBoYXNoX3N0ZGluX3BhdGhzKGNvbnN0IGNoYXIgKnR5cGUsIGludCBub19maWx0ZXJzLCB1bnNpZ25lZCBmbGFncywKKwkJCSAgICAgaW50IGxpdGVyYWxseSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBuYnVmID0gU1RSQlVGX0lOSVQ7CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQlpZiAoYnVmLmJ1ZlswXSA9PSAnIicpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmbmJ1Zik7CisJCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZuYnVmLCBidWYuYnVmLCBOVUxMKSkKKwkJCQlkaWUoImxpbmUgaXMgYmFkbHkgcXVvdGVkIik7CisJCQlzdHJidWZfc3dhcCgmYnVmLCAmbmJ1Zik7CisJCX0KKwkJaGFzaF9vYmplY3QoYnVmLmJ1ZiwgdHlwZSwgbm9fZmlsdGVycyA/IE5VTEwgOiBidWYuYnVmLCBmbGFncywKKwkJCSAgICBsaXRlcmFsbHkpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmbmJ1Zik7Cit9CisKK2ludCBjbWRfaGFzaF9vYmplY3QoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoYXNoX29iamVjdF91c2FnZVtdID0geworCQlOXygiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSBbLS1dIDxmaWxlPi4uLiIpLAorCQlOXygiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIiksCisJCU5VTEwKKwl9OworCWNvbnN0IGNoYXIgKnR5cGUgPSBibG9iX3R5cGU7CisJaW50IGhhc2hzdGRpbiA9IDA7CisJaW50IHN0ZGluX3BhdGhzID0gMDsKKwlpbnQgbm9fZmlsdGVycyA9IDA7CisJaW50IGxpdGVyYWxseSA9IDA7CisJdW5zaWduZWQgZmxhZ3MgPSBIQVNIX0ZPUk1BVF9DSEVDSzsKKwljb25zdCBjaGFyICp2cGF0aCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBoYXNoX29iamVjdF9vcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoJ3QnLCBOVUxMLCAmdHlwZSwgTl8oInR5cGUiKSwgTl8oIm9iamVjdCB0eXBlIikpLAorCQlPUFRfQklUKCd3JywgTlVMTCwgJmZsYWdzLCBOXygid3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UiKSwKKwkJCUhBU0hfV1JJVEVfT0JKRUNUKSwKKwkJT1BUX0NPVU5UVVAoIDAgLCAic3RkaW4iLCAmaGFzaHN0ZGluLCBOXygicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iKSksCisJCU9QVF9CT09MKCAwICwgInN0ZGluLXBhdGhzIiwgJnN0ZGluX3BhdGhzLCBOXygicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iKSksCisJCU9QVF9CT09MKCAwICwgIm5vLWZpbHRlcnMiLCAmbm9fZmlsdGVycywgTl8oInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIikpLAorCQlPUFRfQk9PTCggMCwgImxpdGVyYWxseSIsICZsaXRlcmFsbHksIE5fKCJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiKSksCisJCU9QVF9TVFJJTkcoIDAgLCAicGF0aCIsICZ2cGF0aCwgTl8oImZpbGUiKSwgTl8oInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIikpLAorCQlPUFRfRU5EKCkKKwl9OworCWludCBpOworCWludCBwcmVmaXhfbGVuZ3RoID0gLTE7CisJY29uc3QgY2hhciAqZXJyc3RyID0gTlVMTDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIGhhc2hfb2JqZWN0X29wdGlvbnMsCisJCQkgICAgIGhhc2hfb2JqZWN0X3VzYWdlLCAwKTsKKworCWlmIChmbGFncyAmIEhBU0hfV1JJVEVfT0JKRUNUKSB7CisJCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwkJcHJlZml4X2xlbmd0aCA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKKwkJaWYgKHZwYXRoICYmIHByZWZpeCkKKwkJCXZwYXRoID0gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgdnBhdGgpOworCX0KKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWlmIChzdGRpbl9wYXRocykgeworCQlpZiAoaGFzaHN0ZGluKQorCQkJZXJyc3RyID0gIkNhbid0IHVzZSAtLXN0ZGluLXBhdGhzIHdpdGggLS1zdGRpbiI7CisJCWVsc2UgaWYgKGFyZ2MpCisJCQllcnJzdHIgPSAiQ2FuJ3Qgc3BlY2lmeSBmaWxlcyB3aXRoIC0tc3RkaW4tcGF0aHMiOworCQllbHNlIGlmICh2cGF0aCkKKwkJCWVycnN0ciA9ICJDYW4ndCB1c2UgLS1zdGRpbi1wYXRocyB3aXRoIC0tcGF0aCI7CisJfQorCWVsc2UgeworCQlpZiAoaGFzaHN0ZGluID4gMSkKKwkJCWVycnN0ciA9ICJNdWx0aXBsZSAtLXN0ZGluIGFyZ3VtZW50cyBhcmUgbm90IHN1cHBvcnRlZCI7CisJCWlmICh2cGF0aCAmJiBub19maWx0ZXJzKQorCQkJZXJyc3RyID0gIkNhbid0IHVzZSAtLXBhdGggd2l0aCAtLW5vLWZpbHRlcnMiOworCX0KKworCWlmIChlcnJzdHIpIHsKKwkJZXJyb3IoIiVzIiwgZXJyc3RyKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGhhc2hfb2JqZWN0X3VzYWdlLCBoYXNoX29iamVjdF9vcHRpb25zKTsKKwl9CisKKwlpZiAoaGFzaHN0ZGluKQorCQloYXNoX2ZkKDAsIHR5cGUsIHZwYXRoLCBmbGFncywgbGl0ZXJhbGx5KTsKKworCWZvciAoaSA9IDAgOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKDAgPD0gcHJlZml4X2xlbmd0aCkKKwkJCWFyZyA9IHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHByZWZpeF9sZW5ndGgsIGFyZyk7CisJCWhhc2hfb2JqZWN0KGFyZywgdHlwZSwgbm9fZmlsdGVycyA/IE5VTEwgOiB2cGF0aCA/IHZwYXRoIDogYXJnLAorCQkJICAgIGZsYWdzLCBsaXRlcmFsbHkpOworCX0KKworCWlmIChzdGRpbl9wYXRocykKKwkJaGFzaF9zdGRpbl9wYXRocyh0eXBlLCBub19maWx0ZXJzLCBmbGFncywgbGl0ZXJhbGx5KTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9oZWxwLmMgYi9idWlsdGluL2hlbHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2QwYzFlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9oZWxwLmMKQEAgLTAsMCArMSw1MDMgQEAKKy8qCisgKiBCdWlsdGluIGhlbHAgY29tbWFuZAorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJjb2x1bW4uaCIKKyNpbmNsdWRlICJoZWxwLmgiCisKKyNpZm5kZWYgREVGQVVMVF9IRUxQX0ZPUk1BVAorI2RlZmluZSBERUZBVUxUX0hFTFBfRk9STUFUICJtYW4iCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBtYW5fdmlld2VyX2xpc3QgeworCXN0cnVjdCBtYW5fdmlld2VyX2xpc3QgKm5leHQ7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfSAqbWFuX3ZpZXdlcl9saXN0OworCitzdGF0aWMgc3RydWN0IG1hbl92aWV3ZXJfaW5mb19saXN0IHsKKwlzdHJ1Y3QgbWFuX3ZpZXdlcl9pbmZvX2xpc3QgKm5leHQ7CisJY29uc3QgY2hhciAqaW5mbzsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9ICptYW5fdmlld2VyX2luZm9fbGlzdDsKKworZW51bSBoZWxwX2Zvcm1hdCB7CisJSEVMUF9GT1JNQVRfTk9ORSwKKwlIRUxQX0ZPUk1BVF9NQU4sCisJSEVMUF9GT1JNQVRfSU5GTywKKwlIRUxQX0ZPUk1BVF9XRUIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpodG1sX3BhdGg7CisKK3N0YXRpYyBpbnQgc2hvd19hbGwgPSAwOworc3RhdGljIGludCBzaG93X2d1aWRlcyA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IGNvbG9wdHM7CitzdGF0aWMgZW51bSBoZWxwX2Zvcm1hdCBoZWxwX2Zvcm1hdCA9IEhFTFBfRk9STUFUX05PTkU7CitzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX2hlbHBfb3B0aW9uc1tdID0geworCU9QVF9CT09MKCdhJywgImFsbCIsICZzaG93X2FsbCwgTl8oInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiKSksCisJT1BUX0JPT0woJ2cnLCAiZ3VpZGVzIiwgJnNob3dfZ3VpZGVzLCBOXygicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIikpLAorCU9QVF9TRVRfSU5UKCdtJywgIm1hbiIsICZoZWxwX2Zvcm1hdCwgTl8oInNob3cgbWFuIHBhZ2UiKSwgSEVMUF9GT1JNQVRfTUFOKSwKKwlPUFRfU0VUX0lOVCgndycsICJ3ZWIiLCAmaGVscF9mb3JtYXQsIE5fKCJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIpLAorCQkJSEVMUF9GT1JNQVRfV0VCKSwKKwlPUFRfU0VUX0lOVCgnaScsICJpbmZvIiwgJmhlbHBfZm9ybWF0LCBOXygic2hvdyBpbmZvIHBhZ2UiKSwKKwkJCUhFTFBfRk9STUFUX0lORk8pLAorCU9QVF9FTkQoKSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9oZWxwX3VzYWdlW10gPSB7CisJTl8oImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgZW51bSBoZWxwX2Zvcm1hdCBwYXJzZV9oZWxwX2Zvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpCit7CisJaWYgKCFzdHJjbXAoZm9ybWF0LCAibWFuIikpCisJCXJldHVybiBIRUxQX0ZPUk1BVF9NQU47CisJaWYgKCFzdHJjbXAoZm9ybWF0LCAiaW5mbyIpKQorCQlyZXR1cm4gSEVMUF9GT1JNQVRfSU5GTzsKKwlpZiAoIXN0cmNtcChmb3JtYXQsICJ3ZWIiKSB8fCAhc3RyY21wKGZvcm1hdCwgImh0bWwiKSkKKwkJcmV0dXJuIEhFTFBfRk9STUFUX1dFQjsKKwlkaWUoXygidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciKSwgZm9ybWF0KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9tYW5fdmlld2VyX2luZm8oY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgbWFuX3ZpZXdlcl9pbmZvX2xpc3QgKnZpZXdlcjsKKworCWZvciAodmlld2VyID0gbWFuX3ZpZXdlcl9pbmZvX2xpc3Q7IHZpZXdlcjsgdmlld2VyID0gdmlld2VyLT5uZXh0KQorCXsKKwkJaWYgKCFzdHJjYXNlY21wKG5hbWUsIHZpZXdlci0+bmFtZSkpCisJCQlyZXR1cm4gdmlld2VyLT5pbmZvOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBjaGVja19lbWFjc2NsaWVudF92ZXJzaW9uKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBlY19wcm9jZXNzID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmFyZ3ZfZWNbXSA9IHsgImVtYWNzY2xpZW50IiwgIi0tdmVyc2lvbiIsIE5VTEwgfTsKKwlpbnQgdmVyc2lvbjsKKworCS8qIGVtYWNzY2xpZW50IHByaW50cyBpdHMgdmVyc2lvbiBudW1iZXIgb24gc3RkZXJyICovCisJZWNfcHJvY2Vzcy5hcmd2ID0gYXJndl9lYzsKKwllY19wcm9jZXNzLmVyciA9IC0xOworCWVjX3Byb2Nlc3Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmVjX3Byb2Nlc3MpKQorCQlyZXR1cm4gZXJyb3IoXygiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIpKTsKKworCXN0cmJ1Zl9yZWFkKCZidWZmZXIsIGVjX3Byb2Nlc3MuZXJyLCAyMCk7CisJY2xvc2UoZWNfcHJvY2Vzcy5lcnIpOworCisJLyoKKwkgKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgcmV0dXJuIHZhbHVlLCBiZWNhdXNlICJlbWFjc2NsaWVudCAtLXZlcnNpb24iCisJICogc2VlbXMgdG8gYWx3YXlzIGV4aXRzIHdpdGggY29kZSAxLgorCSAqLworCWZpbmlzaF9jb21tYW5kKCZlY19wcm9jZXNzKTsKKworCWlmICghc3RhcnRzX3dpdGgoYnVmZmVyLmJ1ZiwgImVtYWNzY2xpZW50IikpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJCXJldHVybiBlcnJvcihfKCJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi4iKSk7CisJfQorCisJc3RyYnVmX3JlbW92ZSgmYnVmZmVyLCAwLCBzdHJsZW4oImVtYWNzY2xpZW50IikpOworCXZlcnNpb24gPSBhdG9pKGJ1ZmZlci5idWYpOworCisJaWYgKHZlcnNpb24gPCAyMikgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwkJcmV0dXJuIGVycm9yKF8oImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iKSwKKwkJCXZlcnNpb24pOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBleGVjX3dvbWFuX2VtYWNzKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnBhZ2UpCit7CisJaWYgKCFjaGVja19lbWFjc2NsaWVudF92ZXJzaW9uKCkpIHsKKwkJLyogVGhpcyB3b3JrcyBvbmx5IHdpdGggZW1hY3NjbGllbnQgdmVyc2lvbiA+PSAyMi4gKi8KKwkJc3RydWN0IHN0cmJ1ZiBtYW5fcGFnZSA9IFNUUkJVRl9JTklUOworCisJCWlmICghcGF0aCkKKwkJCXBhdGggPSAiZW1hY3NjbGllbnQiOworCQlzdHJidWZfYWRkZigmbWFuX3BhZ2UsICIod29tYW4gXCIlc1wiKSIsIHBhZ2UpOworCQlleGVjbHAocGF0aCwgImVtYWNzY2xpZW50IiwgIi1lIiwgbWFuX3BhZ2UuYnVmLCAoY2hhciAqKU5VTEwpOworCQl3YXJuaW5nKF8oImZhaWxlZCB0byBleGVjICclcyc6ICVzIiksIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBleGVjX21hbl9rb25xdWVyb3IoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3sKKwljb25zdCBjaGFyICpkaXNwbGF5ID0gZ2V0ZW52KCJESVNQTEFZIik7CisJaWYgKGRpc3BsYXkgJiYgKmRpc3BsYXkpIHsKKwkJc3RydWN0IHN0cmJ1ZiBtYW5fcGFnZSA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpmaWxlbmFtZSA9ICJrZm1jbGllbnQiOworCisJCS8qIEl0J3Mgc2ltcGxlciB0byBsYXVuY2gga29ucXVlcm9yIHVzaW5nIGtmbWNsaWVudC4gKi8KKwkJaWYgKHBhdGgpIHsKKwkJCXNpemVfdCBsZW47CisJCQlpZiAoc3RyaXBfc3VmZml4KHBhdGgsICIva29ucXVlcm9yIiwgJmxlbikpCisJCQkJcGF0aCA9IHhzdHJmbXQoIiUuKnMva2ZtY2xpZW50IiwgKGludClsZW4sIHBhdGgpOworCQkJZmlsZW5hbWUgPSBiYXNlbmFtZSgoY2hhciAqKXBhdGgpOworCQl9IGVsc2UKKwkJCXBhdGggPSAia2ZtY2xpZW50IjsKKwkJc3RyYnVmX2FkZGYoJm1hbl9wYWdlLCAibWFuOiVzKDEpIiwgcGFnZSk7CisJCWV4ZWNscChwYXRoLCBmaWxlbmFtZSwgIm5ld1RhYiIsIG1hbl9wYWdlLmJ1ZiwgKGNoYXIgKilOVUxMKTsKKwkJd2FybmluZyhfKCJmYWlsZWQgdG8gZXhlYyAnJXMnOiAlcyIpLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCX0KK30KKworc3RhdGljIHZvaWQgZXhlY19tYW5fbWFuKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnBhZ2UpCit7CisJaWYgKCFwYXRoKQorCQlwYXRoID0gIm1hbiI7CisJZXhlY2xwKHBhdGgsICJtYW4iLCBwYWdlLCAoY2hhciAqKU5VTEwpOworCXdhcm5pbmcoXygiZmFpbGVkIHRvIGV4ZWMgJyVzJzogJXMiKSwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKK30KKworc3RhdGljIHZvaWQgZXhlY19tYW5fY21kKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqcGFnZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNoZWxsX2NtZCA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRmKCZzaGVsbF9jbWQsICIlcyAlcyIsIGNtZCwgcGFnZSk7CisJZXhlY2woU0hFTExfUEFUSCwgU0hFTExfUEFUSCwgIi1jIiwgc2hlbGxfY21kLmJ1ZiwgKGNoYXIgKilOVUxMKTsKKwl3YXJuaW5nKF8oImZhaWxlZCB0byBleGVjICclcyc6ICVzIiksIGNtZCwgc3RyZXJyb3IoZXJybm8pKTsKK30KKworc3RhdGljIHZvaWQgYWRkX21hbl92aWV3ZXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgbWFuX3ZpZXdlcl9saXN0ICoqcCA9ICZtYW5fdmlld2VyX2xpc3Q7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKKworCXdoaWxlICgqcCkKKwkJcCA9ICYoKCpwKS0+bmV4dCk7CisJKnAgPSB4Y2FsbG9jKDEsIChzaXplb2YoKipwKSArIGxlbiArIDEpKTsKKwltZW1jcHkoKCpwKS0+bmFtZSwgbmFtZSwgbGVuKTsgLyogTlVMLXRlcm1pbmF0ZWQgYnkgeGNhbGxvYyAqLworfQorCitzdGF0aWMgaW50IHN1cHBvcnRlZF9tYW5fdmlld2VyKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuICghc3RybmNhc2VjbXAoIm1hbiIsIG5hbWUsIGxlbikgfHwKKwkJIXN0cm5jYXNlY21wKCJ3b21hbiIsIG5hbWUsIGxlbikgfHwKKwkJIXN0cm5jYXNlY21wKCJrb25xdWVyb3IiLCBuYW1lLCBsZW4pKTsKK30KKworc3RhdGljIHZvaWQgZG9fYWRkX21hbl92aWV3ZXJfaW5mbyhjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIHNpemVfdCBsZW4sCisJCQkJICAgY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3RydWN0IG1hbl92aWV3ZXJfaW5mb19saXN0ICpuZXcgPSB4Y2FsbG9jKDEsIHNpemVvZigqbmV3KSArIGxlbiArIDEpOworCisJbWVtY3B5KG5ldy0+bmFtZSwgbmFtZSwgbGVuKTsgLyogTlVMLXRlcm1pbmF0ZWQgYnkgeGNhbGxvYyAqLworCW5ldy0+aW5mbyA9IHhzdHJkdXAodmFsdWUpOworCW5ldy0+bmV4dCA9IG1hbl92aWV3ZXJfaW5mb19saXN0OworCW1hbl92aWV3ZXJfaW5mb19saXN0ID0gbmV3OworfQorCitzdGF0aWMgaW50IGFkZF9tYW5fdmlld2VyX3BhdGgoY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICBzaXplX3QgbGVuLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmIChzdXBwb3J0ZWRfbWFuX3ZpZXdlcihuYW1lLCBsZW4pKQorCQlkb19hZGRfbWFuX3ZpZXdlcl9pbmZvKG5hbWUsIGxlbiwgdmFsdWUpOworCWVsc2UKKwkJd2FybmluZyhfKCInJXMnOiBwYXRoIGZvciB1bnN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorCQkJICAiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iKSwKKwkJCW5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX21hbl92aWV3ZXJfY21kKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBzaXplX3QgbGVuLAorCQkJICAgICAgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKHN1cHBvcnRlZF9tYW5fdmlld2VyKG5hbWUsIGxlbikpCisJCXdhcm5pbmcoXygiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKwkJCSAgIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIpLAorCQkJbmFtZSk7CisJZWxzZQorCQlkb19hZGRfbWFuX3ZpZXdlcl9pbmZvKG5hbWUsIGxlbiwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX21hbl92aWV3ZXJfaW5mbyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWNvbnN0IGNoYXIgKm5hbWUsICpzdWJrZXk7CisJaW50IG5hbWVsZW47CisKKwlpZiAocGFyc2VfY29uZmlnX2tleSh2YXIsICJtYW4iLCAmbmFtZSwgJm5hbWVsZW4sICZzdWJrZXkpIDwgMCB8fCAhbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN0cmNtcChzdWJrZXksICJwYXRoIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlyZXR1cm4gYWRkX21hbl92aWV3ZXJfcGF0aChuYW1lLCBuYW1lbGVuLCB2YWx1ZSk7CisJfQorCWlmICghc3RyY21wKHN1YmtleSwgImNtZCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmV0dXJuIGFkZF9tYW5fdmlld2VyX2NtZChuYW1lLCBuYW1lbGVuLCB2YWx1ZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2hlbHBfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmIChzdGFydHNfd2l0aCh2YXIsICJjb2x1bW4uIikpCisJCXJldHVybiBnaXRfY29sdW1uX2NvbmZpZyh2YXIsIHZhbHVlLCAiaGVscCIsICZjb2xvcHRzKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJoZWxwLmZvcm1hdCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJaGVscF9mb3JtYXQgPSBwYXJzZV9oZWxwX2Zvcm1hdCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJoZWxwLmh0bWxwYXRoIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlodG1sX3BhdGggPSB4c3RyZHVwKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgIm1hbi52aWV3ZXIiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWFkZF9tYW5fdmlld2VyKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChzdGFydHNfd2l0aCh2YXIsICJtYW4uIikpCisJCXJldHVybiBhZGRfbWFuX3ZpZXdlcl9pbmZvKHZhciwgdmFsdWUpOworCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY21kbmFtZXMgbWFpbl9jbWRzLCBvdGhlcl9jbWRzOworCitzdGF0aWMgaW50IGlzX2dpdF9jb21tYW5kKGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKGlzX2J1aWx0aW4ocykpCisJCXJldHVybiAxOworCisJbG9hZF9jb21tYW5kX2xpc3QoImdpdC0iLCAmbWFpbl9jbWRzLCAmb3RoZXJfY21kcyk7CisJcmV0dXJuIGlzX2luX2NtZGxpc3QoJm1haW5fY21kcywgcykgfHwKKwkJaXNfaW5fY21kbGlzdCgmb3RoZXJfY21kcywgcyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjbWRfdG9fcGFnZShjb25zdCBjaGFyICpnaXRfY21kKQoreworCWlmICghZ2l0X2NtZCkKKwkJcmV0dXJuICJnaXQiOworCWVsc2UgaWYgKHN0YXJ0c193aXRoKGdpdF9jbWQsICJnaXQiKSkKKwkJcmV0dXJuIGdpdF9jbWQ7CisJZWxzZSBpZiAoaXNfZ2l0X2NvbW1hbmQoZ2l0X2NtZCkpCisJCXJldHVybiB4c3RyZm10KCJnaXQtJXMiLCBnaXRfY21kKTsKKwllbHNlCisJCXJldHVybiB4c3RyZm10KCJnaXQlcyIsIGdpdF9jbWQpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9tYW5fcGF0aCh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgbmV3X3BhdGggPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpvbGRfcGF0aCA9IGdldGVudigiTUFOUEFUSCIpOworCWNoYXIgKmdpdF9tYW5fcGF0aCA9IHN5c3RlbV9wYXRoKEdJVF9NQU5fUEFUSCk7CisKKwkvKiBXZSBzaG91bGQgYWx3YXlzIHB1dCAnOicgYWZ0ZXIgb3VyIHBhdGguIElmIHRoZXJlIGlzIG5vCisJICogb2xkX3BhdGgsIHRoZSAnOicgYXQgdGhlIGVuZCB3aWxsIGxldCAnbWFuJyB0byB0cnkKKwkgKiBzeXN0ZW0td2lkZSBwYXRocyBhZnRlciBvdXJzIHRvIGZpbmQgdGhlIG1hbnVhbCBwYWdlLiBJZgorCSAqIHRoZXJlIGlzIG9sZF9wYXRoLCB3ZSBuZWVkICc6JyBhcyBkZWxpbWl0ZXIuICovCisJc3RyYnVmX2FkZHN0cigmbmV3X3BhdGgsIGdpdF9tYW5fcGF0aCk7CisJc3RyYnVmX2FkZGNoKCZuZXdfcGF0aCwgJzonKTsKKwlpZiAob2xkX3BhdGgpCisJCXN0cmJ1Zl9hZGRzdHIoJm5ld19wYXRoLCBvbGRfcGF0aCk7CisKKwlmcmVlKGdpdF9tYW5fcGF0aCk7CisJc2V0ZW52KCJNQU5QQVRIIiwgbmV3X3BhdGguYnVmLCAxKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZuZXdfcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWNfdmlld2VyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnBhZ2UpCit7CisJY29uc3QgY2hhciAqaW5mbyA9IGdldF9tYW5fdmlld2VyX2luZm8obmFtZSk7CisKKwlpZiAoIXN0cmNhc2VjbXAobmFtZSwgIm1hbiIpKQorCQlleGVjX21hbl9tYW4oaW5mbywgcGFnZSk7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAobmFtZSwgIndvbWFuIikpCisJCWV4ZWNfd29tYW5fZW1hY3MoaW5mbywgcGFnZSk7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAobmFtZSwgImtvbnF1ZXJvciIpKQorCQlleGVjX21hbl9rb25xdWVyb3IoaW5mbywgcGFnZSk7CisJZWxzZSBpZiAoaW5mbykKKwkJZXhlY19tYW5fY21kKGluZm8sIHBhZ2UpOworCWVsc2UKKwkJd2FybmluZyhfKCInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIiksIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBzaG93X21hbl9wYWdlKGNvbnN0IGNoYXIgKmdpdF9jbWQpCit7CisJc3RydWN0IG1hbl92aWV3ZXJfbGlzdCAqdmlld2VyOworCWNvbnN0IGNoYXIgKnBhZ2UgPSBjbWRfdG9fcGFnZShnaXRfY21kKTsKKwljb25zdCBjaGFyICpmYWxsYmFjayA9IGdldGVudigiR0lUX01BTl9WSUVXRVIiKTsKKworCXNldHVwX21hbl9wYXRoKCk7CisJZm9yICh2aWV3ZXIgPSBtYW5fdmlld2VyX2xpc3Q7IHZpZXdlcjsgdmlld2VyID0gdmlld2VyLT5uZXh0KQorCXsKKwkJZXhlY192aWV3ZXIodmlld2VyLT5uYW1lLCBwYWdlKTsgLyogd2lsbCByZXR1cm4gd2hlbiB1bmFibGUgKi8KKwl9CisJaWYgKGZhbGxiYWNrKQorCQlleGVjX3ZpZXdlcihmYWxsYmFjaywgcGFnZSk7CisJZXhlY192aWV3ZXIoIm1hbiIsIHBhZ2UpOworCWRpZShfKCJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfaW5mb19wYWdlKGNvbnN0IGNoYXIgKmdpdF9jbWQpCit7CisJY29uc3QgY2hhciAqcGFnZSA9IGNtZF90b19wYWdlKGdpdF9jbWQpOworCXNldGVudigiSU5GT1BBVEgiLCBzeXN0ZW1fcGF0aChHSVRfSU5GT19QQVRIKSwgMSk7CisJZXhlY2xwKCJpbmZvIiwgImluZm8iLCAiZ2l0bWFuIiwgcGFnZSwgKGNoYXIgKilOVUxMKTsKKwlkaWUoXygibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIpKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2h0bWxfcGFnZV9wYXRoKHN0cnVjdCBzdHJidWYgKnBhZ2VfcGF0aCwgY29uc3QgY2hhciAqcGFnZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKworCWlmICghaHRtbF9wYXRoKQorCQlodG1sX3BhdGggPSB0b19mcmVlID0gc3lzdGVtX3BhdGgoR0lUX0hUTUxfUEFUSCk7CisKKwkvKiBDaGVjayB0aGF0IHdlIGhhdmUgYSBnaXQgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuICovCisJaWYgKCFzdHJzdHIoaHRtbF9wYXRoLCAiOi8vIikpIHsKKwkJaWYgKHN0YXQobWtwYXRoKCIlcy9naXQuaHRtbCIsIGh0bWxfcGF0aCksICZzdCkKKwkJICAgIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKQorCQkJZGllKCInJXMnOiBub3QgYSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4iLCBodG1sX3BhdGgpOworCX0KKworCXN0cmJ1Zl9pbml0KHBhZ2VfcGF0aCwgMCk7CisJc3RyYnVmX2FkZGYocGFnZV9wYXRoLCAiJXMvJXMuaHRtbCIsIGh0bWxfcGF0aCwgcGFnZSk7CisJZnJlZSh0b19mcmVlKTsKK30KKworLyoKKyAqIElmIG9wZW5faHRtbCBpcyBub3QgZGVmaW5lZCBpbiBhIHBsYXRmb3JtLXNwZWNpZmljIHdheSAoc2VlIGZvcgorICogZXhhbXBsZSBjb21wYXQvbWluZ3cuaCksIHdlIHVzZSB0aGUgc2NyaXB0IHdlYi0tYnJvd3NlIHRvIGRpc3BsYXkKKyAqIEhUTUwuCisgKi8KKyNpZm5kZWYgb3Blbl9odG1sCitzdGF0aWMgdm9pZCBvcGVuX2h0bWwoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlleGVjbF9naXRfY21kKCJ3ZWItLWJyb3dzZSIsICItYyIsICJoZWxwLmJyb3dzZXIiLCBwYXRoLCAoY2hhciAqKU5VTEwpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNob3dfaHRtbF9wYWdlKGNvbnN0IGNoYXIgKmdpdF9jbWQpCit7CisJY29uc3QgY2hhciAqcGFnZSA9IGNtZF90b19wYWdlKGdpdF9jbWQpOworCXN0cnVjdCBzdHJidWYgcGFnZV9wYXRoOyAvKiBpdCBsZWFrcyBidXQgd2UgZXhlYyBiZWxsb3cgKi8KKworCWdldF9odG1sX3BhZ2VfcGF0aCgmcGFnZV9wYXRoLCBwYWdlKTsKKworCW9wZW5faHRtbChwYWdlX3BhdGguYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpoZWxwOworfSBjb21tb25fZ3VpZGVzW10gPSB7CisJeyAiYXR0cmlidXRlcyIsIE5fKCJEZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoIikgfSwKKwl7ICJldmVyeWRheSIsIE5fKCJFdmVyeWRheSBHaXQgV2l0aCAyMCBDb21tYW5kcyBPciBTbyIpIH0sCisJeyAiZ2xvc3NhcnkiLCBOXygiQSBHaXQgZ2xvc3NhcnkiKSB9LAorCXsgImlnbm9yZSIsIE5fKCJTcGVjaWZpZXMgaW50ZW50aW9uYWxseSB1bnRyYWNrZWQgZmlsZXMgdG8gaWdub3JlIikgfSwKKwl7ICJtb2R1bGVzIiwgTl8oIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIikgfSwKKwl7ICJyZXZpc2lvbnMiLCBOXygiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IikgfSwKKwl7ICJ0dXRvcmlhbCIsIE5fKCJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQgKGZvciB2ZXJzaW9uIDEuNS4xIG9yIG5ld2VyKSIpIH0sCisJeyAid29ya2Zsb3dzIiwgTl8oIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIpIH0sCit9OworCitzdGF0aWMgdm9pZCBsaXN0X2NvbW1vbl9ndWlkZXNfaGVscCh2b2lkKQoreworCWludCBpLCBsb25nZXN0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1vbl9ndWlkZXMpOyBpKyspIHsKKwkJaWYgKGxvbmdlc3QgPCBzdHJsZW4oY29tbW9uX2d1aWRlc1tpXS5uYW1lKSkKKwkJCWxvbmdlc3QgPSBzdHJsZW4oY29tbW9uX2d1aWRlc1tpXS5uYW1lKTsKKwl9CisKKwlwdXRzKF8oIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6XG4iKSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbW9uX2d1aWRlcyk7IGkrKykgeworCQlwcmludGYoIiAgICVzICAgIiwgY29tbW9uX2d1aWRlc1tpXS5uYW1lKTsKKwkJbXB1dF9jaGFyKCcgJywgbG9uZ2VzdCAtIHN0cmxlbihjb21tb25fZ3VpZGVzW2ldLm5hbWUpKTsKKwkJcHV0cyhfKGNvbW1vbl9ndWlkZXNbaV0uaGVscCkpOworCX0KKwlwdXRjaGFyKCdcbicpOworfQorCitpbnQgY21kX2hlbHAoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IG5vbmdpdDsKKwljaGFyICphbGlhczsKKwllbnVtIGhlbHBfZm9ybWF0IHBhcnNlZF9oZWxwX2Zvcm1hdDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9oZWxwX29wdGlvbnMsCisJCQlidWlsdGluX2hlbHBfdXNhZ2UsIDApOworCXBhcnNlZF9oZWxwX2Zvcm1hdCA9IGhlbHBfZm9ybWF0OworCisJaWYgKHNob3dfYWxsKSB7CisJCWdpdF9jb25maWcoZ2l0X2hlbHBfY29uZmlnLCBOVUxMKTsKKwkJcHJpbnRmKF8oInVzYWdlOiAlcyVzIiksIF8oZ2l0X3VzYWdlX3N0cmluZyksICJcblxuIik7CisJCWxvYWRfY29tbWFuZF9saXN0KCJnaXQtIiwgJm1haW5fY21kcywgJm90aGVyX2NtZHMpOworCQlsaXN0X2NvbW1hbmRzKGNvbG9wdHMsICZtYWluX2NtZHMsICZvdGhlcl9jbWRzKTsKKwl9CisKKwlpZiAoc2hvd19ndWlkZXMpCisJCWxpc3RfY29tbW9uX2d1aWRlc19oZWxwKCk7CisKKwlpZiAoc2hvd19hbGwgfHwgc2hvd19ndWlkZXMpIHsKKwkJcHJpbnRmKCIlc1xuIiwgXyhnaXRfbW9yZV9pbmZvX3N0cmluZykpOworCQkvKgorCQkqIFdlJ3JlIGRvbmUuIElnbm9yZSBhbnkgcmVtYWluaW5nIGFyZ3MKKwkJKi8KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFhcmd2WzBdKSB7CisJCXByaW50ZihfKCJ1c2FnZTogJXMlcyIpLCBfKGdpdF91c2FnZV9zdHJpbmcpLCAiXG5cbiIpOworCQlsaXN0X2NvbW1vbl9jbWRzX2hlbHAoKTsKKwkJcHJpbnRmKCJcbiVzXG4iLCBfKGdpdF9tb3JlX2luZm9fc3RyaW5nKSk7CisJCXJldHVybiAwOworCX0KKworCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXQpOworCWdpdF9jb25maWcoZ2l0X2hlbHBfY29uZmlnLCBOVUxMKTsKKworCWlmIChwYXJzZWRfaGVscF9mb3JtYXQgIT0gSEVMUF9GT1JNQVRfTk9ORSkKKwkJaGVscF9mb3JtYXQgPSBwYXJzZWRfaGVscF9mb3JtYXQ7CisJaWYgKGhlbHBfZm9ybWF0ID09IEhFTFBfRk9STUFUX05PTkUpCisJCWhlbHBfZm9ybWF0ID0gcGFyc2VfaGVscF9mb3JtYXQoREVGQVVMVF9IRUxQX0ZPUk1BVCk7CisKKwlhbGlhcyA9IGFsaWFzX2xvb2t1cChhcmd2WzBdKTsKKwlpZiAoYWxpYXMgJiYgIWlzX2dpdF9jb21tYW5kKGFyZ3ZbMF0pKSB7CisJCXByaW50Zl9sbihfKCJgZ2l0ICVzJyBpcyBhbGlhc2VkIHRvIGAlcyciKSwgYXJndlswXSwgYWxpYXMpOworCQlmcmVlKGFsaWFzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChoZWxwX2Zvcm1hdCkgeworCWNhc2UgSEVMUF9GT1JNQVRfTk9ORToKKwljYXNlIEhFTFBfRk9STUFUX01BTjoKKwkJc2hvd19tYW5fcGFnZShhcmd2WzBdKTsKKwkJYnJlYWs7CisJY2FzZSBIRUxQX0ZPUk1BVF9JTkZPOgorCQlzaG93X2luZm9fcGFnZShhcmd2WzBdKTsKKwkJYnJlYWs7CisJY2FzZSBIRUxQX0ZPUk1BVF9XRUI6CisJCXNob3dfaHRtbF9wYWdlKGFyZ3ZbMF0pOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vaW5kZXgtcGFjay5jIGIvYnVpbHRpbi9pbmRleC1wYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFkMWJkZQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vaW5kZXgtcGFjay5jCkBAIC0wLDAgKzEsMTc5MCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAiZnNjay5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAic3RyZWFtaW5nLmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGluZGV4X3BhY2tfdXNhZ2VbXSA9CisiZ2l0IGluZGV4LXBhY2sgWy12XSBbLW8gPGluZGV4LWZpbGU+XSBbLS1rZWVwIHwgLS1rZWVwPTxtc2c+XSBbLS12ZXJpZnldIFstLXN0cmljdF0gKDxwYWNrLWZpbGU+IHwgLS1zdGRpbiBbLS1maXgtdGhpbl0gWzxwYWNrLWZpbGU+XSkiOworCitzdHJ1Y3Qgb2JqZWN0X2VudHJ5IHsKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgaWR4OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGhkcl9zaXplOworCXNpZ25lZCBjaGFyIHR5cGU7CisJc2lnbmVkIGNoYXIgcmVhbF90eXBlOworfTsKKworc3RydWN0IG9iamVjdF9zdGF0IHsKKwl1bnNpZ25lZCBkZWx0YV9kZXB0aDsKKwlpbnQgYmFzZV9vYmplY3Rfbm87Cit9OworCitzdHJ1Y3QgYmFzZV9kYXRhIHsKKwlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlOworCXN0cnVjdCBiYXNlX2RhdGEgKmNoaWxkOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iajsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgcmVmX2ZpcnN0LCByZWZfbGFzdDsKKwlpbnQgb2ZzX2ZpcnN0LCBvZnNfbGFzdDsKK307CisKK3N0cnVjdCB0aHJlYWRfbG9jYWwgeworI2lmbmRlZiBOT19QVEhSRUFEUworCXB0aHJlYWRfdCB0aHJlYWQ7CisjZW5kaWYKKwlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlX2NhY2hlOworCXNpemVfdCBiYXNlX2NhY2hlX3VzZWQ7CisJaW50IHBhY2tfZmQ7Cit9OworCisjZGVmaW5lIEZMQUdfTElOSyAoMXU8PDIwKQorI2RlZmluZSBGTEFHX0NIRUNLRUQgKDF1PDwyMSkKKworc3RydWN0IG9mc19kZWx0YV9lbnRyeSB7CisJb2ZmX3Qgb2Zmc2V0OworCWludCBvYmpfbm87Cit9OworCitzdHJ1Y3QgcmVmX2RlbHRhX2VudHJ5IHsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBvYmpfbm87Cit9OworCitzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqZWN0czsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X3N0YXQgKm9ial9zdGF0Oworc3RhdGljIHN0cnVjdCBvZnNfZGVsdGFfZW50cnkgKm9mc19kZWx0YXM7CitzdGF0aWMgc3RydWN0IHJlZl9kZWx0YV9lbnRyeSAqcmVmX2RlbHRhczsKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkX2xvY2FsIG5vdGhyZWFkX2RhdGE7CitzdGF0aWMgaW50IG5yX29iamVjdHM7CitzdGF0aWMgaW50IG5yX29mc19kZWx0YXM7CitzdGF0aWMgaW50IG5yX3JlZl9kZWx0YXM7CitzdGF0aWMgaW50IHJlZl9kZWx0YXNfYWxsb2M7CitzdGF0aWMgaW50IG5yX3Jlc29sdmVkX2RlbHRhczsKK3N0YXRpYyBpbnQgbnJfdGhyZWFkczsKKworc3RhdGljIGludCBmcm9tX3N0ZGluOworc3RhdGljIGludCBzdHJpY3Q7CitzdGF0aWMgaW50IGRvX2ZzY2tfb2JqZWN0Oworc3RhdGljIHN0cnVjdCBmc2NrX29wdGlvbnMgZnNja19vcHRpb25zID0gRlNDS19PUFRJT05TX1NUUklDVDsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyBpbnQgc2hvd19zdGF0Oworc3RhdGljIGludCBjaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkOworCitzdGF0aWMgc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKworLyogV2UgYWx3YXlzIHJlYWQgaW4gNGtCIGNodW5rcy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGlucHV0X2J1ZmZlcls0MDk2XTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5wdXRfb2Zmc2V0LCBpbnB1dF9sZW47CitzdGF0aWMgb2ZmX3QgY29uc3VtZWRfYnl0ZXM7CitzdGF0aWMgdW5zaWduZWQgZGVlcGVzdF9kZWx0YTsKK3N0YXRpYyBnaXRfU0hBX0NUWCBpbnB1dF9jdHg7CitzdGF0aWMgdWludDMyX3QgaW5wdXRfY3JjMzI7CitzdGF0aWMgaW50IGlucHV0X2ZkLCBvdXRwdXRfZmQ7CitzdGF0aWMgY29uc3QgY2hhciAqY3Vycl9wYWNrOworCisjaWZuZGVmIE5PX1BUSFJFQURTCisKK3N0YXRpYyBzdHJ1Y3QgdGhyZWFkX2xvY2FsICp0aHJlYWRfZGF0YTsKK3N0YXRpYyBpbnQgbnJfZGlzcGF0Y2hlZDsKK3N0YXRpYyBpbnQgdGhyZWFkc19hY3RpdmU7CisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgcmVhZF9tdXRleDsKKyNkZWZpbmUgcmVhZF9sb2NrKCkJCWxvY2tfbXV0ZXgoJnJlYWRfbXV0ZXgpCisjZGVmaW5lIHJlYWRfdW5sb2NrKCkJCXVubG9ja19tdXRleCgmcmVhZF9tdXRleCkKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBjb3VudGVyX211dGV4OworI2RlZmluZSBjb3VudGVyX2xvY2soKQkJbG9ja19tdXRleCgmY291bnRlcl9tdXRleCkKKyNkZWZpbmUgY291bnRlcl91bmxvY2soKQl1bmxvY2tfbXV0ZXgoJmNvdW50ZXJfbXV0ZXgpCisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3Qgd29ya19tdXRleDsKKyNkZWZpbmUgd29ya19sb2NrKCkJCWxvY2tfbXV0ZXgoJndvcmtfbXV0ZXgpCisjZGVmaW5lIHdvcmtfdW5sb2NrKCkJCXVubG9ja19tdXRleCgmd29ya19tdXRleCkKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBkZWVwZXN0X2RlbHRhX211dGV4OworI2RlZmluZSBkZWVwZXN0X2RlbHRhX2xvY2soKQlsb2NrX211dGV4KCZkZWVwZXN0X2RlbHRhX211dGV4KQorI2RlZmluZSBkZWVwZXN0X2RlbHRhX3VubG9jaygpCXVubG9ja19tdXRleCgmZGVlcGVzdF9kZWx0YV9tdXRleCkKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCB0eXBlX2Nhc19tdXRleDsKKyNkZWZpbmUgdHlwZV9jYXNfbG9jaygpCQlsb2NrX211dGV4KCZ0eXBlX2Nhc19tdXRleCkKKyNkZWZpbmUgdHlwZV9jYXNfdW5sb2NrKCkJdW5sb2NrX211dGV4KCZ0eXBlX2Nhc19tdXRleCkKKworc3RhdGljIHB0aHJlYWRfa2V5X3Qga2V5OworCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja19tdXRleChwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworCWlmICh0aHJlYWRzX2FjdGl2ZSkKKwkJcHRocmVhZF9tdXRleF9sb2NrKG11dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19tdXRleChwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworCWlmICh0aHJlYWRzX2FjdGl2ZSkKKwkJcHRocmVhZF9tdXRleF91bmxvY2sobXV0ZXgpOworfQorCisvKgorICogTXV0ZXggYW5kIGNvbmRpdGlvbmFsIHZhcmlhYmxlIGNhbid0IGJlIHN0YXRpY2FsbHktaW5pdGlhbGl6ZWQgb24gV2luZG93cy4KKyAqLworc3RhdGljIHZvaWQgaW5pdF90aHJlYWQodm9pZCkKK3sKKwlpbnQgaTsKKwlpbml0X3JlY3Vyc2l2ZV9tdXRleCgmcmVhZF9tdXRleCk7CisJcHRocmVhZF9tdXRleF9pbml0KCZjb3VudGVyX211dGV4LCBOVUxMKTsKKwlwdGhyZWFkX211dGV4X2luaXQoJndvcmtfbXV0ZXgsIE5VTEwpOworCXB0aHJlYWRfbXV0ZXhfaW5pdCgmdHlwZV9jYXNfbXV0ZXgsIE5VTEwpOworCWlmIChzaG93X3N0YXQpCisJCXB0aHJlYWRfbXV0ZXhfaW5pdCgmZGVlcGVzdF9kZWx0YV9tdXRleCwgTlVMTCk7CisJcHRocmVhZF9rZXlfY3JlYXRlKCZrZXksIE5VTEwpOworCXRocmVhZF9kYXRhID0geGNhbGxvYyhucl90aHJlYWRzLCBzaXplb2YoKnRocmVhZF9kYXRhKSk7CisJZm9yIChpID0gMDsgaSA8IG5yX3RocmVhZHM7IGkrKykgeworCQl0aHJlYWRfZGF0YVtpXS5wYWNrX2ZkID0gb3BlbihjdXJyX3BhY2ssIE9fUkRPTkxZKTsKKwkJaWYgKHRocmVhZF9kYXRhW2ldLnBhY2tfZmQgPT0gLTEpCisJCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIG9wZW4gJXMiKSwgY3Vycl9wYWNrKTsKKwl9CisKKwl0aHJlYWRzX2FjdGl2ZSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfdGhyZWFkKHZvaWQpCit7CisJaW50IGk7CisJaWYgKCF0aHJlYWRzX2FjdGl2ZSkKKwkJcmV0dXJuOworCXRocmVhZHNfYWN0aXZlID0gMDsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJnJlYWRfbXV0ZXgpOworCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmY291bnRlcl9tdXRleCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZ3b3JrX211dGV4KTsKKwlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJnR5cGVfY2FzX211dGV4KTsKKwlpZiAoc2hvd19zdGF0KQorCQlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmRlZXBlc3RfZGVsdGFfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBucl90aHJlYWRzOyBpKyspCisJCWNsb3NlKHRocmVhZF9kYXRhW2ldLnBhY2tfZmQpOworCXB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpOworCWZyZWUodGhyZWFkX2RhdGEpOworfQorCisjZWxzZQorCisjZGVmaW5lIHJlYWRfbG9jaygpCisjZGVmaW5lIHJlYWRfdW5sb2NrKCkKKworI2RlZmluZSBjb3VudGVyX2xvY2soKQorI2RlZmluZSBjb3VudGVyX3VubG9jaygpCisKKyNkZWZpbmUgd29ya19sb2NrKCkKKyNkZWZpbmUgd29ya191bmxvY2soKQorCisjZGVmaW5lIGRlZXBlc3RfZGVsdGFfbG9jaygpCisjZGVmaW5lIGRlZXBlc3RfZGVsdGFfdW5sb2NrKCkKKworI2RlZmluZSB0eXBlX2Nhc19sb2NrKCkKKyNkZWZpbmUgdHlwZV9jYXNfdW5sb2NrKCkKKworI2VuZGlmCisKKworc3RhdGljIGludCBtYXJrX2xpbmsoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuIC0xOworCisJaWYgKHR5cGUgIT0gT0JKX0FOWSAmJiBvYmotPnR5cGUgIT0gdHlwZSkKKwkJZGllKF8oIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIiksIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCisJb2JqLT5mbGFncyB8PSBGTEFHX0xJTks7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoZSBjb250ZW50IG9mIGVhY2ggbGlua2VkIG9iamVjdCBtdXN0IGhhdmUgYmVlbiBjaGVja2VkCisgICBvciBpdCBtdXN0IGJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlICovCitzdGF0aWMgdW5zaWduZWQgY2hlY2tfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShvYmotPmZsYWdzICYgRkxBR19MSU5LKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShvYmotPmZsYWdzICYgRkxBR19DSEVDS0VEKSkgeworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWludCB0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhvYmotPnNoYTEsICZzaXplKTsKKwkJaWYgKHR5cGUgPD0gMCkKKwkJCWRpZShfKCJkaWQgbm90IHJlY2VpdmUgZXhwZWN0ZWQgb2JqZWN0ICVzIiksCisJCQkgICAgICBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwkJaWYgKHR5cGUgIT0gb2JqLT50eXBlKQorCQkJZGllKF8oIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiKSwKKwkJCSAgICBzaGExX3RvX2hleChvYmotPnNoYTEpLAorCQkJICAgIHR5cGVuYW1lKG9iai0+dHlwZSksIHR5cGVuYW1lKHR5cGUpKTsKKwkJb2JqLT5mbGFncyB8PSBGTEFHX0NIRUNLRUQ7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hlY2tfb2JqZWN0cyh2b2lkKQoreworCXVuc2lnbmVkIGksIG1heCwgZm9yZWlnbl9uciA9IDA7CisKKwltYXggPSBnZXRfbWF4X29iamVjdF9pbmRleCgpOworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykKKwkJZm9yZWlnbl9uciArPSBjaGVja19vYmplY3QoZ2V0X2luZGV4ZWRfb2JqZWN0KGkpKTsKKwlyZXR1cm4gZm9yZWlnbl9ucjsKK30KKworCisvKiBEaXNjYXJkIGN1cnJlbnQgYnVmZmVyIHVzZWQgY29udGVudC4gKi8KK3N0YXRpYyB2b2lkIGZsdXNoKHZvaWQpCit7CisJaWYgKGlucHV0X29mZnNldCkgeworCQlpZiAob3V0cHV0X2ZkID49IDApCisJCQl3cml0ZV9vcl9kaWUob3V0cHV0X2ZkLCBpbnB1dF9idWZmZXIsIGlucHV0X29mZnNldCk7CisJCWdpdF9TSEExX1VwZGF0ZSgmaW5wdXRfY3R4LCBpbnB1dF9idWZmZXIsIGlucHV0X29mZnNldCk7CisJCW1lbW1vdmUoaW5wdXRfYnVmZmVyLCBpbnB1dF9idWZmZXIgKyBpbnB1dF9vZmZzZXQsIGlucHV0X2xlbik7CisJCWlucHV0X29mZnNldCA9IDA7CisJfQorfQorCisvKgorICogTWFrZSBzdXJlIGF0IGxlYXN0ICJtaW4iIGJ5dGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlciwgYW5kCisgKiByZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgKmZpbGwoaW50IG1pbikKK3sKKwlpZiAobWluIDw9IGlucHV0X2xlbikKKwkJcmV0dXJuIGlucHV0X2J1ZmZlciArIGlucHV0X29mZnNldDsKKwlpZiAobWluID4gc2l6ZW9mKGlucHV0X2J1ZmZlcikpCisJCWRpZShRXygiY2Fubm90IGZpbGwgJWQgYnl0ZSIsCisJCSAgICAgICAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiLAorCQkgICAgICAgbWluKSwKKwkJICAgIG1pbik7CisJZmx1c2goKTsKKwlkbyB7CisJCXNzaXplX3QgcmV0ID0geHJlYWQoaW5wdXRfZmQsIGlucHV0X2J1ZmZlciArIGlucHV0X2xlbiwKKwkJCQlzaXplb2YoaW5wdXRfYnVmZmVyKSAtIGlucHV0X2xlbik7CisJCWlmIChyZXQgPD0gMCkgeworCQkJaWYgKCFyZXQpCisJCQkJZGllKF8oImVhcmx5IEVPRiIpKTsKKwkJCWRpZV9lcnJubyhfKCJyZWFkIGVycm9yIG9uIGlucHV0IikpOworCQl9CisJCWlucHV0X2xlbiArPSByZXQ7CisJCWlmIChmcm9tX3N0ZGluKQorCQkJZGlzcGxheV90aHJvdWdocHV0KHByb2dyZXNzLCBjb25zdW1lZF9ieXRlcyArIGlucHV0X2xlbik7CisJfSB3aGlsZSAoaW5wdXRfbGVuIDwgbWluKTsKKwlyZXR1cm4gaW5wdXRfYnVmZmVyOworfQorCitzdGF0aWMgdm9pZCB1c2UoaW50IGJ5dGVzKQoreworCWlmIChieXRlcyA+IGlucHV0X2xlbikKKwkJZGllKF8oInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIikpOworCWlucHV0X2NyYzMyID0gY3JjMzIoaW5wdXRfY3JjMzIsIGlucHV0X2J1ZmZlciArIGlucHV0X29mZnNldCwgYnl0ZXMpOworCWlucHV0X2xlbiAtPSBieXRlczsKKwlpbnB1dF9vZmZzZXQgKz0gYnl0ZXM7CisKKwkvKiBtYWtlIHN1cmUgb2ZmX3QgaXMgc3VmZmljaWVudGx5IGxhcmdlIG5vdCB0byB3cmFwICovCisJaWYgKHNpZ25lZF9hZGRfb3ZlcmZsb3dzKGNvbnN1bWVkX2J5dGVzLCBieXRlcykpCisJCWRpZShfKCJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IikpOworCWNvbnN1bWVkX2J5dGVzICs9IGJ5dGVzOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqb3Blbl9wYWNrX2ZpbGUoY29uc3QgY2hhciAqcGFja19uYW1lKQoreworCWlmIChmcm9tX3N0ZGluKSB7CisJCWlucHV0X2ZkID0gMDsKKwkJaWYgKCFwYWNrX25hbWUpIHsKKwkJCXN0YXRpYyBjaGFyIHRtcF9maWxlW1BBVEhfTUFYXTsKKwkJCW91dHB1dF9mZCA9IG9kYl9ta3N0ZW1wKHRtcF9maWxlLCBzaXplb2YodG1wX2ZpbGUpLAorCQkJCQkJInBhY2svdG1wX3BhY2tfWFhYWFhYIik7CisJCQlwYWNrX25hbWUgPSB4c3RyZHVwKHRtcF9maWxlKTsKKwkJfSBlbHNlCisJCQlvdXRwdXRfZmQgPSBvcGVuKHBhY2tfbmFtZSwgT19DUkVBVHxPX0VYQ0x8T19SRFdSLCAwNjAwKTsKKwkJaWYgKG91dHB1dF9mZCA8IDApCisJCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIiksIHBhY2tfbmFtZSk7CisJCW5vdGhyZWFkX2RhdGEucGFja19mZCA9IG91dHB1dF9mZDsKKwl9IGVsc2UgeworCQlpbnB1dF9mZCA9IG9wZW4ocGFja19uYW1lLCBPX1JET05MWSk7CisJCWlmIChpbnB1dF9mZCA8IDApCisJCQlkaWVfZXJybm8oXygiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIpLCBwYWNrX25hbWUpOworCQlvdXRwdXRfZmQgPSAtMTsKKwkJbm90aHJlYWRfZGF0YS5wYWNrX2ZkID0gaW5wdXRfZmQ7CisJfQorCWdpdF9TSEExX0luaXQoJmlucHV0X2N0eCk7CisJcmV0dXJuIHBhY2tfbmFtZTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfcGFja19oZWFkZXIodm9pZCkKK3sKKwlzdHJ1Y3QgcGFja19oZWFkZXIgKmhkciA9IGZpbGwoc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikpOworCisJLyogSGVhZGVyIGNvbnNpc3RlbmN5IGNoZWNrICovCisJaWYgKGhkci0+aGRyX3NpZ25hdHVyZSAhPSBodG9ubChQQUNLX1NJR05BVFVSRSkpCisJCWRpZShfKCJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIpKTsKKwlpZiAoIXBhY2tfdmVyc2lvbl9vayhoZHItPmhkcl92ZXJzaW9uKSkKKwkJZGllKF8oInBhY2sgdmVyc2lvbiAlIlBSSXUzMiIgdW5zdXBwb3J0ZWQiKSwKKwkJCW50b2hsKGhkci0+aGRyX3ZlcnNpb24pKTsKKworCW5yX29iamVjdHMgPSBudG9obChoZHItPmhkcl9lbnRyaWVzKTsKKwl1c2Uoc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikpOworfQorCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBiYWRfb2JqZWN0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBjb25zdCBjaGFyICpmb3JtYXQsCisJCSAgICAgICAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpOworCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBiYWRfb2JqZWN0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwljaGFyIGJ1ZlsxMDI0XTsKKworCXZhX3N0YXJ0KHBhcmFtcywgZm9ybWF0KTsKKwl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCWRpZShfKCJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlbHU6ICVzIiksIG9mZnNldCwgYnVmKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGhyZWFkX2xvY2FsICpnZXRfdGhyZWFkX2RhdGEodm9pZCkKK3sKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKwlpZiAodGhyZWFkc19hY3RpdmUpCisJCXJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljKGtleSk7CisJYXNzZXJ0KCF0aHJlYWRzX2FjdGl2ZSAmJgorCSAgICAgICAiVGhpcyBzaG91bGQgb25seSBiZSByZWFjaGVkIHdoZW4gYWxsIHRocmVhZHMgYXJlIGdvbmUiKTsKKyNlbmRpZgorCXJldHVybiAmbm90aHJlYWRfZGF0YTsKK30KKworI2lmbmRlZiBOT19QVEhSRUFEUworc3RhdGljIHZvaWQgc2V0X3RocmVhZF9kYXRhKHN0cnVjdCB0aHJlYWRfbG9jYWwgKmRhdGEpCit7CisJaWYgKHRocmVhZHNfYWN0aXZlKQorCQlwdGhyZWFkX3NldHNwZWNpZmljKGtleSwgZGF0YSk7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBiYXNlX2RhdGEgKmFsbG9jX2Jhc2VfZGF0YSh2b2lkKQoreworCXN0cnVjdCBiYXNlX2RhdGEgKmJhc2UgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgYmFzZV9kYXRhKSk7CisJYmFzZS0+cmVmX2xhc3QgPSAtMTsKKwliYXNlLT5vZnNfbGFzdCA9IC0xOworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2Jhc2VfZGF0YShzdHJ1Y3QgYmFzZV9kYXRhICpjKQoreworCWlmIChjLT5kYXRhKSB7CisJCWZyZWUoYy0+ZGF0YSk7CisJCWMtPmRhdGEgPSBOVUxMOworCQlnZXRfdGhyZWFkX2RhdGEoKS0+YmFzZV9jYWNoZV91c2VkIC09IGMtPnNpemU7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcnVuZV9iYXNlX2RhdGEoc3RydWN0IGJhc2VfZGF0YSAqcmV0YWluKQoreworCXN0cnVjdCBiYXNlX2RhdGEgKmI7CisJc3RydWN0IHRocmVhZF9sb2NhbCAqZGF0YSA9IGdldF90aHJlYWRfZGF0YSgpOworCWZvciAoYiA9IGRhdGEtPmJhc2VfY2FjaGU7CisJICAgICBkYXRhLT5iYXNlX2NhY2hlX3VzZWQgPiBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0ICYmIGI7CisJICAgICBiID0gYi0+Y2hpbGQpIHsKKwkJaWYgKGItPmRhdGEgJiYgYiAhPSByZXRhaW4pCisJCQlmcmVlX2Jhc2VfZGF0YShiKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGxpbmtfYmFzZV9kYXRhKHN0cnVjdCBiYXNlX2RhdGEgKmJhc2UsIHN0cnVjdCBiYXNlX2RhdGEgKmMpCit7CisJaWYgKGJhc2UpCisJCWJhc2UtPmNoaWxkID0gYzsKKwllbHNlCisJCWdldF90aHJlYWRfZGF0YSgpLT5iYXNlX2NhY2hlID0gYzsKKworCWMtPmJhc2UgPSBiYXNlOworCWMtPmNoaWxkID0gTlVMTDsKKwlpZiAoYy0+ZGF0YSkKKwkJZ2V0X3RocmVhZF9kYXRhKCktPmJhc2VfY2FjaGVfdXNlZCArPSBjLT5zaXplOworCXBydW5lX2Jhc2VfZGF0YShjKTsKK30KKworc3RhdGljIHZvaWQgdW5saW5rX2Jhc2VfZGF0YShzdHJ1Y3QgYmFzZV9kYXRhICpjKQoreworCXN0cnVjdCBiYXNlX2RhdGEgKmJhc2UgPSBjLT5iYXNlOworCWlmIChiYXNlKQorCQliYXNlLT5jaGlsZCA9IE5VTEw7CisJZWxzZQorCQlnZXRfdGhyZWFkX2RhdGEoKS0+YmFzZV9jYWNoZSA9IE5VTEw7CisJZnJlZV9iYXNlX2RhdGEoYyk7Cit9CisKK3N0YXRpYyBpbnQgaXNfZGVsdGFfdHlwZShlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJcmV0dXJuICh0eXBlID09IE9CSl9SRUZfREVMVEEgfHwgdHlwZSA9PSBPQkpfT0ZTX0RFTFRBKTsKK30KKworc3RhdGljIHZvaWQgKnVucGFja19lbnRyeV9kYXRhKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgICAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0YXRpYyBjaGFyIGZpeGVkX2J1Zls4MTkyXTsKKwlpbnQgc3RhdHVzOworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwl2b2lkICpidWY7CisJZ2l0X1NIQV9DVFggYzsKKwljaGFyIGhkclszMl07CisJaW50IGhkcmxlbjsKKworCWlmICghaXNfZGVsdGFfdHlwZSh0eXBlKSkgeworCQloZHJsZW4gPSB4c25wcmludGYoaGRyLCBzaXplb2YoaGRyKSwgIiVzICVsdSIsIHR5cGVuYW1lKHR5cGUpLCBzaXplKSArIDE7CisJCWdpdF9TSEExX0luaXQoJmMpOworCQlnaXRfU0hBMV9VcGRhdGUoJmMsIGhkciwgaGRybGVuKTsKKwl9IGVsc2UKKwkJc2hhMSA9IE5VTEw7CisJaWYgKHR5cGUgPT0gT0JKX0JMT0IgJiYgc2l6ZSA+IGJpZ19maWxlX3RocmVzaG9sZCkKKwkJYnVmID0gZml4ZWRfYnVmOworCWVsc2UKKwkJYnVmID0geG1hbGxvY3ooc2l6ZSk7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCWdpdF9pbmZsYXRlX2luaXQoJnN0cmVhbSk7CisJc3RyZWFtLm5leHRfb3V0ID0gYnVmOworCXN0cmVhbS5hdmFpbF9vdXQgPSBidWYgPT0gZml4ZWRfYnVmID8gc2l6ZW9mKGZpeGVkX2J1ZikgOiBzaXplOworCisJZG8geworCQl1bnNpZ25lZCBjaGFyICpsYXN0X291dCA9IHN0cmVhbS5uZXh0X291dDsKKwkJc3RyZWFtLm5leHRfaW4gPSBmaWxsKDEpOworCQlzdHJlYW0uYXZhaWxfaW4gPSBpbnB1dF9sZW47CisJCXN0YXR1cyA9IGdpdF9pbmZsYXRlKCZzdHJlYW0sIDApOworCQl1c2UoaW5wdXRfbGVuIC0gc3RyZWFtLmF2YWlsX2luKTsKKwkJaWYgKHNoYTEpCisJCQlnaXRfU0hBMV9VcGRhdGUoJmMsIGxhc3Rfb3V0LCBzdHJlYW0ubmV4dF9vdXQgLSBsYXN0X291dCk7CisJCWlmIChidWYgPT0gZml4ZWRfYnVmKSB7CisJCQlzdHJlYW0ubmV4dF9vdXQgPSBidWY7CisJCQlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZW9mKGZpeGVkX2J1Zik7CisJCX0KKwl9IHdoaWxlIChzdGF0dXMgPT0gWl9PSyk7CisJaWYgKHN0cmVhbS50b3RhbF9vdXQgIT0gc2l6ZSB8fCBzdGF0dXMgIT0gWl9TVFJFQU1fRU5EKQorCQliYWRfb2JqZWN0KG9mZnNldCwgXygiaW5mbGF0ZSByZXR1cm5lZCAlZCIpLCBzdGF0dXMpOworCWdpdF9pbmZsYXRlX2VuZCgmc3RyZWFtKTsKKwlpZiAoc2hhMSkKKwkJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmMpOworCXJldHVybiBidWYgPT0gZml4ZWRfYnVmID8gTlVMTCA6IGJ1ZjsKK30KKworc3RhdGljIHZvaWQgKnVucGFja19yYXdfZW50cnkoc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqLAorCQkJICAgICAgb2ZmX3QgKm9mc19vZmZzZXQsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpyZWZfc2hhMSwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgY2hhciAqcDsKKwl1bnNpZ25lZCBsb25nIHNpemUsIGM7CisJb2ZmX3QgYmFzZV9vZmZzZXQ7CisJdW5zaWduZWQgc2hpZnQ7CisJdm9pZCAqZGF0YTsKKworCW9iai0+aWR4Lm9mZnNldCA9IGNvbnN1bWVkX2J5dGVzOworCWlucHV0X2NyYzMyID0gY3JjMzIoMCwgTlVMTCwgMCk7CisKKwlwID0gZmlsbCgxKTsKKwljID0gKnA7CisJdXNlKDEpOworCW9iai0+dHlwZSA9IChjID4+IDQpICYgNzsKKwlzaXplID0gKGMgJiAxNSk7CisJc2hpZnQgPSA0OworCXdoaWxlIChjICYgMHg4MCkgeworCQlwID0gZmlsbCgxKTsKKwkJYyA9ICpwOworCQl1c2UoMSk7CisJCXNpemUgKz0gKGMgJiAweDdmKSA8PCBzaGlmdDsKKwkJc2hpZnQgKz0gNzsKKwl9CisJb2JqLT5zaXplID0gc2l6ZTsKKworCXN3aXRjaCAob2JqLT50eXBlKSB7CisJY2FzZSBPQkpfUkVGX0RFTFRBOgorCQloYXNoY3B5KHJlZl9zaGExLCBmaWxsKDIwKSk7CisJCXVzZSgyMCk7CisJCWJyZWFrOworCWNhc2UgT0JKX09GU19ERUxUQToKKwkJcCA9IGZpbGwoMSk7CisJCWMgPSAqcDsKKwkJdXNlKDEpOworCQliYXNlX29mZnNldCA9IGMgJiAxMjc7CisJCXdoaWxlIChjICYgMTI4KSB7CisJCQliYXNlX29mZnNldCArPSAxOworCQkJaWYgKCFiYXNlX29mZnNldCB8fCBNU0IoYmFzZV9vZmZzZXQsIDcpKQorCQkJCWJhZF9vYmplY3Qob2JqLT5pZHgub2Zmc2V0LCBfKCJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IikpOworCQkJcCA9IGZpbGwoMSk7CisJCQljID0gKnA7CisJCQl1c2UoMSk7CisJCQliYXNlX29mZnNldCA9IChiYXNlX29mZnNldCA8PCA3KSArIChjICYgMTI3KTsKKwkJfQorCQkqb2ZzX29mZnNldCA9IG9iai0+aWR4Lm9mZnNldCAtIGJhc2Vfb2Zmc2V0OworCQlpZiAoKm9mc19vZmZzZXQgPD0gMCB8fCAqb2ZzX29mZnNldCA+PSBvYmotPmlkeC5vZmZzZXQpCisJCQliYWRfb2JqZWN0KG9iai0+aWR4Lm9mZnNldCwgXygiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIikpOworCQlicmVhazsKKwljYXNlIE9CSl9DT01NSVQ6CisJY2FzZSBPQkpfVFJFRToKKwljYXNlIE9CSl9CTE9COgorCWNhc2UgT0JKX1RBRzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmFkX29iamVjdChvYmotPmlkeC5vZmZzZXQsIF8oInVua25vd24gb2JqZWN0IHR5cGUgJWQiKSwgb2JqLT50eXBlKTsKKwl9CisJb2JqLT5oZHJfc2l6ZSA9IGNvbnN1bWVkX2J5dGVzIC0gb2JqLT5pZHgub2Zmc2V0OworCisJZGF0YSA9IHVucGFja19lbnRyeV9kYXRhKG9iai0+aWR4Lm9mZnNldCwgb2JqLT5zaXplLCBvYmotPnR5cGUsIHNoYTEpOworCW9iai0+aWR4LmNyYzMyID0gaW5wdXRfY3JjMzI7CisJcmV0dXJuIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkICp1bnBhY2tfZGF0YShzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmosCisJCQkgaW50ICgqY29uc3VtZSkoY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopLAorCQkJIHZvaWQgKmNiX2RhdGEpCit7CisJb2ZmX3QgZnJvbSA9IG9ialswXS5pZHgub2Zmc2V0ICsgb2JqWzBdLmhkcl9zaXplOworCXVuc2lnbmVkIGxvbmcgbGVuID0gb2JqWzFdLmlkeC5vZmZzZXQgLSBmcm9tOworCXVuc2lnbmVkIGNoYXIgKmRhdGEsICppbmJ1ZjsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJaW50IHN0YXR1czsKKworCWRhdGEgPSB4bWFsbG9jeihjb25zdW1lID8gNjQqMTAyNCA6IG9iai0+c2l6ZSk7CisJaW5idWYgPSB4bWFsbG9jKChsZW4gPCA2NCoxMDI0KSA/IGxlbiA6IDY0KjEwMjQpOworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlnaXRfaW5mbGF0ZV9pbml0KCZzdHJlYW0pOworCXN0cmVhbS5uZXh0X291dCA9IGRhdGE7CisJc3RyZWFtLmF2YWlsX291dCA9IGNvbnN1bWUgPyA2NCoxMDI0IDogb2JqLT5zaXplOworCisJZG8geworCQlzc2l6ZV90IG4gPSAobGVuIDwgNjQqMTAyNCkgPyBsZW4gOiA2NCoxMDI0OworCQluID0geHByZWFkKGdldF90aHJlYWRfZGF0YSgpLT5wYWNrX2ZkLCBpbmJ1ZiwgbiwgZnJvbSk7CisJCWlmIChuIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIikpOworCQlpZiAoIW4pCisJCQlkaWUoUV8oInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZSBtaXNzaW5nIiwKKwkJCSAgICAgICAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlcyBtaXNzaW5nIiwKKwkJCSAgICAgICBsZW4pLAorCQkJICAgIGxlbik7CisJCWZyb20gKz0gbjsKKwkJbGVuIC09IG47CisJCXN0cmVhbS5uZXh0X2luID0gaW5idWY7CisJCXN0cmVhbS5hdmFpbF9pbiA9IG47CisJCWlmICghY29uc3VtZSkKKwkJCXN0YXR1cyA9IGdpdF9pbmZsYXRlKCZzdHJlYW0sIDApOworCQllbHNlIHsKKwkJCWRvIHsKKwkJCQlzdGF0dXMgPSBnaXRfaW5mbGF0ZSgmc3RyZWFtLCAwKTsKKwkJCQlpZiAoY29uc3VtZShkYXRhLCBzdHJlYW0ubmV4dF9vdXQgLSBkYXRhLCBjYl9kYXRhKSkgeworCQkJCQlmcmVlKGluYnVmKTsKKwkJCQkJZnJlZShkYXRhKTsKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJfQorCQkJCXN0cmVhbS5uZXh0X291dCA9IGRhdGE7CisJCQkJc3RyZWFtLmF2YWlsX291dCA9IDY0KjEwMjQ7CisJCQl9IHdoaWxlIChzdGF0dXMgPT0gWl9PSyAmJiBzdHJlYW0uYXZhaWxfaW4pOworCQl9CisJfSB3aGlsZSAobGVuICYmIHN0YXR1cyA9PSBaX09LICYmICFzdHJlYW0uYXZhaWxfaW4pOworCisJLyogVGhpcyBoYXMgYmVlbiBpbmZsYXRlZCBPSyB3aGVuIGZpcnN0IGVuY291bnRlcmVkLCBzby4uLiAqLworCWlmIChzdGF0dXMgIT0gWl9TVFJFQU1fRU5EIHx8IHN0cmVhbS50b3RhbF9vdXQgIT0gb2JqLT5zaXplKQorCQlkaWUoXygic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiKSk7CisKKwlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJZnJlZShpbmJ1Zik7CisJaWYgKGNvbnN1bWUpIHsKKwkJZnJlZShkYXRhKTsKKwkJZGF0YSA9IE5VTEw7CisJfQorCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgdm9pZCAqZ2V0X2RhdGFfZnJvbV9wYWNrKHN0cnVjdCBvYmplY3RfZW50cnkgKm9iaikKK3sKKwlyZXR1cm4gdW5wYWNrX2RhdGEob2JqLCBOVUxMLCBOVUxMKTsKK30KKworc3RhdGljIGludCBjb21wYXJlX29mc19kZWx0YV9iYXNlcyhvZmZfdCBvZmZzZXQxLCBvZmZfdCBvZmZzZXQyLAorCQkJCSAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZTEsCisJCQkJICAgZW51bSBvYmplY3RfdHlwZSB0eXBlMikKK3sKKwlpbnQgY21wID0gdHlwZTEgLSB0eXBlMjsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCXJldHVybiBvZmZzZXQxIDwgb2Zmc2V0MiA/IC0xIDoKKwkgICAgICAgb2Zmc2V0MSA+IG9mZnNldDIgPyAgMSA6CisJICAgICAgIDA7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9vZnNfZGVsdGEoY29uc3Qgb2ZmX3Qgb2Zmc2V0LCBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJaW50IGZpcnN0ID0gMCwgbGFzdCA9IG5yX29mc19kZWx0YXM7CisKKwl3aGlsZSAoZmlyc3QgPCBsYXN0KSB7CisJCWludCBuZXh0ID0gKGZpcnN0ICsgbGFzdCkgLyAyOworCQlzdHJ1Y3Qgb2ZzX2RlbHRhX2VudHJ5ICpkZWx0YSA9ICZvZnNfZGVsdGFzW25leHRdOworCQlpbnQgY21wOworCisJCWNtcCA9IGNvbXBhcmVfb2ZzX2RlbHRhX2Jhc2VzKG9mZnNldCwgZGVsdGEtPm9mZnNldCwKKwkJCQkJICAgICAgdHlwZSwgb2JqZWN0c1tkZWx0YS0+b2JqX25vXS50eXBlKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbmV4dDsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZmlyc3QgPSBuZXh0KzE7CisJfQorCXJldHVybiAtZmlyc3QtMTsKK30KKworc3RhdGljIHZvaWQgZmluZF9vZnNfZGVsdGFfY2hpbGRyZW4ob2ZmX3Qgb2Zmc2V0LAorCQkJCSAgICBpbnQgKmZpcnN0X2luZGV4LCBpbnQgKmxhc3RfaW5kZXgsCisJCQkJICAgIGVudW0gb2JqZWN0X3R5cGUgdHlwZSkKK3sKKwlpbnQgZmlyc3QgPSBmaW5kX29mc19kZWx0YShvZmZzZXQsIHR5cGUpOworCWludCBsYXN0ID0gZmlyc3Q7CisJaW50IGVuZCA9IG5yX29mc19kZWx0YXMgLSAxOworCisJaWYgKGZpcnN0IDwgMCkgeworCQkqZmlyc3RfaW5kZXggPSAwOworCQkqbGFzdF9pbmRleCA9IC0xOworCQlyZXR1cm47CisJfQorCXdoaWxlIChmaXJzdCA+IDAgJiYgb2ZzX2RlbHRhc1tmaXJzdCAtIDFdLm9mZnNldCA9PSBvZmZzZXQpCisJCS0tZmlyc3Q7CisJd2hpbGUgKGxhc3QgPCBlbmQgJiYgb2ZzX2RlbHRhc1tsYXN0ICsgMV0ub2Zmc2V0ID09IG9mZnNldCkKKwkJKytsYXN0OworCSpmaXJzdF9pbmRleCA9IGZpcnN0OworCSpsYXN0X2luZGV4ID0gbGFzdDsKK30KKworc3RhdGljIGludCBjb21wYXJlX3JlZl9kZWx0YV9iYXNlcyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTIsCisJCQkJICAgZW51bSBvYmplY3RfdHlwZSB0eXBlMSwKKwkJCQkgICBlbnVtIG9iamVjdF90eXBlIHR5cGUyKQoreworCWludCBjbXAgPSB0eXBlMSAtIHR5cGUyOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJcmV0dXJuIGhhc2hjbXAoc2hhMSwgc2hhMik7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9yZWZfZGVsdGEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgZW51bSBvYmplY3RfdHlwZSB0eXBlKQoreworCWludCBmaXJzdCA9IDAsIGxhc3QgPSBucl9yZWZfZGVsdGFzOworCisJd2hpbGUgKGZpcnN0IDwgbGFzdCkgeworCQlpbnQgbmV4dCA9IChmaXJzdCArIGxhc3QpIC8gMjsKKwkJc3RydWN0IHJlZl9kZWx0YV9lbnRyeSAqZGVsdGEgPSAmcmVmX2RlbHRhc1tuZXh0XTsKKwkJaW50IGNtcDsKKworCQljbXAgPSBjb21wYXJlX3JlZl9kZWx0YV9iYXNlcyhzaGExLCBkZWx0YS0+c2hhMSwKKwkJCQkJICAgICAgdHlwZSwgb2JqZWN0c1tkZWx0YS0+b2JqX25vXS50eXBlKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbmV4dDsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZmlyc3QgPSBuZXh0KzE7CisJfQorCXJldHVybiAtZmlyc3QtMTsKK30KKworc3RhdGljIHZvaWQgZmluZF9yZWZfZGVsdGFfY2hpbGRyZW4oY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgICAgaW50ICpmaXJzdF9pbmRleCwgaW50ICpsYXN0X2luZGV4LAorCQkJCSAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJaW50IGZpcnN0ID0gZmluZF9yZWZfZGVsdGEoc2hhMSwgdHlwZSk7CisJaW50IGxhc3QgPSBmaXJzdDsKKwlpbnQgZW5kID0gbnJfcmVmX2RlbHRhcyAtIDE7CisKKwlpZiAoZmlyc3QgPCAwKSB7CisJCSpmaXJzdF9pbmRleCA9IDA7CisJCSpsYXN0X2luZGV4ID0gLTE7CisJCXJldHVybjsKKwl9CisJd2hpbGUgKGZpcnN0ID4gMCAmJiAhaGFzaGNtcChyZWZfZGVsdGFzW2ZpcnN0IC0gMV0uc2hhMSwgc2hhMSkpCisJCS0tZmlyc3Q7CisJd2hpbGUgKGxhc3QgPCBlbmQgJiYgIWhhc2hjbXAocmVmX2RlbHRhc1tsYXN0ICsgMV0uc2hhMSwgc2hhMSkpCisJCSsrbGFzdDsKKwkqZmlyc3RfaW5kZXggPSBmaXJzdDsKKwkqbGFzdF9pbmRleCA9IGxhc3Q7Cit9CisKK3N0cnVjdCBjb21wYXJlX2RhdGEgeworCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5OworCXN0cnVjdCBnaXRfaXN0cmVhbSAqc3Q7CisJdW5zaWduZWQgY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcgYnVmX3NpemU7Cit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfb2JqZWN0cyhjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNvbXBhcmVfZGF0YSAqZGF0YSA9IGNiX2RhdGE7CisKKwlpZiAoZGF0YS0+YnVmX3NpemUgPCBzaXplKSB7CisJCWZyZWUoZGF0YS0+YnVmKTsKKwkJZGF0YS0+YnVmID0geG1hbGxvYyhzaXplKTsKKwkJZGF0YS0+YnVmX3NpemUgPSBzaXplOworCX0KKworCXdoaWxlIChzaXplKSB7CisJCXNzaXplX3QgbGVuID0gcmVhZF9pc3RyZWFtKGRhdGEtPnN0LCBkYXRhLT5idWYsIHNpemUpOworCQlpZiAobGVuID09IDApCisJCQlkaWUoXygiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIiksCisJCQkgICAgc2hhMV90b19oZXgoZGF0YS0+ZW50cnktPmlkeC5zaGExKSk7CisJCWlmIChsZW4gPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byByZWFkICVzIiksCisJCQkgICAgc2hhMV90b19oZXgoZGF0YS0+ZW50cnktPmlkeC5zaGExKSk7CisJCWlmIChtZW1jbXAoYnVmLCBkYXRhLT5idWYsIGxlbikpCisJCQlkaWUoXygiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIiksCisJCQkgICAgc2hhMV90b19oZXgoZGF0YS0+ZW50cnktPmlkeC5zaGExKSk7CisJCXNpemUgLT0gbGVuOworCQlidWYgKz0gbGVuOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19jb2xsaXNvbihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3QgY29tcGFyZV9kYXRhIGRhdGE7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCWlmIChlbnRyeS0+c2l6ZSA8PSBiaWdfZmlsZV90aHJlc2hvbGQgfHwgZW50cnktPnR5cGUgIT0gT0JKX0JMT0IpCisJCXJldHVybiAtMTsKKworCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKGRhdGEpKTsKKwlkYXRhLmVudHJ5ID0gZW50cnk7CisJZGF0YS5zdCA9IG9wZW5faXN0cmVhbShlbnRyeS0+aWR4LnNoYTEsICZ0eXBlLCAmc2l6ZSwgTlVMTCk7CisJaWYgKCFkYXRhLnN0KQorCQlyZXR1cm4gLTE7CisJaWYgKHNpemUgIT0gZW50cnktPnNpemUgfHwgdHlwZSAhPSBlbnRyeS0+dHlwZSkKKwkJZGllKF8oIlNIQTEgQ09MTElTSU9OIEZPVU5EIFdJVEggJXMgISIpLAorCQkgICAgc2hhMV90b19oZXgoZW50cnktPmlkeC5zaGExKSk7CisJdW5wYWNrX2RhdGEoZW50cnksIGNvbXBhcmVfb2JqZWN0cywgJmRhdGEpOworCWNsb3NlX2lzdHJlYW0oZGF0YS5zdCk7CisJZnJlZShkYXRhLmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNoYTFfb2JqZWN0KGNvbnN0IHZvaWQgKmRhdGEsIHN0cnVjdCBvYmplY3RfZW50cnkgKm9ial9lbnRyeSwKKwkJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwl2b2lkICpuZXdfZGF0YSA9IE5VTEw7CisJaW50IGNvbGxpc2lvbl90ZXN0X25lZWRlZDsKKworCWFzc2VydChkYXRhIHx8IG9ial9lbnRyeSk7CisKKwlyZWFkX2xvY2soKTsKKwljb2xsaXNpb25fdGVzdF9uZWVkZWQgPSBoYXNfc2hhMV9maWxlX3dpdGhfZmxhZ3Moc2hhMSwgSEFTX1NIQTFfUVVJQ0spOworCXJlYWRfdW5sb2NrKCk7CisKKwlpZiAoY29sbGlzaW9uX3Rlc3RfbmVlZGVkICYmICFkYXRhKSB7CisJCXJlYWRfbG9jaygpOworCQlpZiAoIWNoZWNrX2NvbGxpc29uKG9ial9lbnRyeSkpCisJCQljb2xsaXNpb25fdGVzdF9uZWVkZWQgPSAwOworCQlyZWFkX3VubG9jaygpOworCX0KKwlpZiAoY29sbGlzaW9uX3Rlc3RfbmVlZGVkKSB7CisJCXZvaWQgKmhhc19kYXRhOworCQllbnVtIG9iamVjdF90eXBlIGhhc190eXBlOworCQl1bnNpZ25lZCBsb25nIGhhc19zaXplOworCQlyZWFkX2xvY2soKTsKKwkJaGFzX3R5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsICZoYXNfc2l6ZSk7CisJCWlmIChoYXNfdHlwZSAhPSB0eXBlIHx8IGhhc19zaXplICE9IHNpemUpCisJCQlkaWUoXygiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIiksIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJaGFzX2RhdGEgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmaGFzX3R5cGUsICZoYXNfc2l6ZSk7CisJCXJlYWRfdW5sb2NrKCk7CisJCWlmICghZGF0YSkKKwkJCWRhdGEgPSBuZXdfZGF0YSA9IGdldF9kYXRhX2Zyb21fcGFjayhvYmpfZW50cnkpOworCQlpZiAoIWhhc19kYXRhKQorCQkJZGllKF8oImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIpLCBzaGExX3RvX2hleChzaGExKSk7CisJCWlmIChzaXplICE9IGhhc19zaXplIHx8IHR5cGUgIT0gaGFzX3R5cGUgfHwKKwkJICAgIG1lbWNtcChkYXRhLCBoYXNfZGF0YSwgc2l6ZSkgIT0gMCkKKwkJCWRpZShfKCJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiKSwgc2hhMV90b19oZXgoc2hhMSkpOworCQlmcmVlKGhhc19kYXRhKTsKKwl9CisKKwlpZiAoc3RyaWN0KSB7CisJCXJlYWRfbG9jaygpOworCQlpZiAodHlwZSA9PSBPQkpfQkxPQikgeworCQkJc3RydWN0IGJsb2IgKmJsb2IgPSBsb29rdXBfYmxvYihzaGExKTsKKwkJCWlmIChibG9iKQorCQkJCWJsb2ItPm9iamVjdC5mbGFncyB8PSBGTEFHX0NIRUNLRUQ7CisJCQllbHNlCisJCQkJZGllKF8oImludmFsaWQgYmxvYiBvYmplY3QgJXMiKSwgc2hhMV90b19oZXgoc2hhMSkpOworCQl9IGVsc2UgeworCQkJc3RydWN0IG9iamVjdCAqb2JqOworCQkJaW50IGVhdGVuOworCQkJdm9pZCAqYnVmID0gKHZvaWQgKikgZGF0YTsKKworCQkJYXNzZXJ0KGRhdGEgJiYgImRhdGEgY2FuIG9ubHkgYmUgTlVMTCBmb3IgbGFyZ2UgX2Jsb2JzXyIpOworCisJCQkvKgorCQkJICogd2UgZG8gbm90IG5lZWQgdG8gZnJlZSB0aGUgbWVtb3J5IGhlcmUsIGFzIHRoZQorCQkJICogYnVmIGlzIGRlbGV0ZWQgYnkgdGhlIGNhbGxlci4KKwkJCSAqLworCQkJb2JqID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcihzaGExLCB0eXBlLCBzaXplLCBidWYsICZlYXRlbik7CisJCQlpZiAoIW9iaikKKwkJCQlkaWUoXygiaW52YWxpZCAlcyIpLCB0eXBlbmFtZSh0eXBlKSk7CisJCQlpZiAoZG9fZnNja19vYmplY3QgJiYKKwkJCSAgICBmc2NrX29iamVjdChvYmosIGJ1Ziwgc2l6ZSwgJmZzY2tfb3B0aW9ucykpCisJCQkJZGllKF8oIkVycm9yIGluIG9iamVjdCIpKTsKKwkJCWlmIChmc2NrX3dhbGsob2JqLCBOVUxMLCAmZnNja19vcHRpb25zKSkKKwkJCQlkaWUoXygiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiKSwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisKKwkJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJCQlzdHJ1Y3QgdHJlZSAqaXRlbSA9IChzdHJ1Y3QgdHJlZSAqKSBvYmo7CisJCQkJaXRlbS0+YnVmZmVyID0gTlVMTDsKKwkJCQlvYmotPnBhcnNlZCA9IDA7CisJCQl9CisJCQlpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKSBvYmo7CisJCQkJaWYgKGRldGFjaF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCkgIT0gZGF0YSkKKwkJCQkJZGllKCJCVUc6IHBhcnNlX29iamVjdF9idWZmZXIgdHJhbnNtb2dyaWZpZWQgb3VyIGJ1ZmZlciIpOworCQkJfQorCQkJb2JqLT5mbGFncyB8PSBGTEFHX0NIRUNLRUQ7CisJCX0KKwkJcmVhZF91bmxvY2soKTsKKwl9CisKKwlmcmVlKG5ld19kYXRhKTsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiBmaW5kX3VucmVzb2x2ZWRfZGVsdGFzKCkuIFRoZXJlIGFyZSB0d28KKyAqIHdhbGtlcnMgZ29pbmcgaW4gdGhlIG9wcG9zaXRlIHdheXMuCisgKgorICogVGhlIGZpcnN0IG9uZSBpbiBmaW5kX3VucmVzb2x2ZWRfZGVsdGFzKCkgdHJhdmVyc2VzIGRvd24gZnJvbQorICogcGFyZW50IG5vZGUgdG8gY2hpbGRyZW4sIGRlZmxhdGluZyBub2RlcyBhbG9uZyB0aGUgd2F5LiBIb3dldmVyLAorICogbWVtb3J5IGZvciBkZWZsYXRlZCBub2RlcyBpcyBsaW1pdGVkIGJ5IGRlbHRhX2Jhc2VfY2FjaGVfbGltaXQsIHNvCisgKiBhdCBzb21lIHBvaW50IHBhcmVudCBub2RlJ3MgZGVmbGF0ZWQgY29udGVudCBtYXkgYmUgZnJlZWQuCisgKgorICogVGhlIHNlY29uZCB3YWxrZXIgaXMgdGhpcyBmdW5jdGlvbiwgd2hpY2ggZ29lcyBmcm9tIGN1cnJlbnQgbm9kZSB1cAorICogdG8gdG9wIHBhcmVudCBpZiBuZWNlc3NhcnkgdG8gZGVmbGF0ZSB0aGUgbm9kZS4gSW4gbm9ybWFsCisgKiBzaXR1YXRpb24sIGl0cyBwYXJlbnQgbm9kZSB3b3VsZCBiZSBhbHJlYWR5IGRlZmxhdGVkLCBzbyBpdCBqdXN0CisgKiBuZWVkcyB0byBhcHBseSBkZWx0YS4KKyAqCisgKiBJbiB0aGUgd29yc3QgY2FzZSBzY2VuYXJpbywgcGFyZW50IG5vZGUgaXMgbm8gbG9uZ2VyIGRlZmxhdGVkIGJlY2F1c2UKKyAqIHdlJ3JlIHJ1bm5pbmcgb3V0IG9mIGRlbHRhX2Jhc2VfY2FjaGVfbGltaXQ7IHdlIG5lZWQgdG8gcmUtZGVmbGF0ZQorICogcGFyZW50cywgcG9zc2libHkgdXAgdG8gdGhlIHRvcCBiYXNlLgorICoKKyAqIEFsbCBkZWZsYXRlZCBvYmplY3RzIGhlcmUgYXJlIHN1YmplY3QgdG8gYmUgZnJlZWQgaWYgd2UgZXhjZWVkCisgKiBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0LCBqdXN0IGxpa2UgaW4gZmluZF91bnJlc29sdmVkX2RlbHRhcygpLCB3ZQorICoganVzdCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbGFzdCBub2RlIGlzIG5vdCBmcmVlZC4KKyAqLworc3RhdGljIHZvaWQgKmdldF9iYXNlX2RhdGEoc3RydWN0IGJhc2VfZGF0YSAqYykKK3sKKwlpZiAoIWMtPmRhdGEpIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gYy0+b2JqOworCQlzdHJ1Y3QgYmFzZV9kYXRhICoqZGVsdGEgPSBOVUxMOworCQlpbnQgZGVsdGFfbnIgPSAwLCBkZWx0YV9hbGxvYyA9IDA7CisKKwkJd2hpbGUgKGlzX2RlbHRhX3R5cGUoYy0+b2JqLT50eXBlKSAmJiAhYy0+ZGF0YSkgeworCQkJQUxMT0NfR1JPVyhkZWx0YSwgZGVsdGFfbnIgKyAxLCBkZWx0YV9hbGxvYyk7CisJCQlkZWx0YVtkZWx0YV9ucisrXSA9IGM7CisJCQljID0gYy0+YmFzZTsKKwkJfQorCQlpZiAoIWRlbHRhX25yKSB7CisJCQljLT5kYXRhID0gZ2V0X2RhdGFfZnJvbV9wYWNrKG9iaik7CisJCQljLT5zaXplID0gb2JqLT5zaXplOworCQkJZ2V0X3RocmVhZF9kYXRhKCktPmJhc2VfY2FjaGVfdXNlZCArPSBjLT5zaXplOworCQkJcHJ1bmVfYmFzZV9kYXRhKGMpOworCQl9CisJCWZvciAoOyBkZWx0YV9uciA+IDA7IGRlbHRhX25yLS0pIHsKKwkJCXZvaWQgKmJhc2UsICpyYXc7CisJCQljID0gZGVsdGFbZGVsdGFfbnIgLSAxXTsKKwkJCW9iaiA9IGMtPm9iajsKKwkJCWJhc2UgPSBnZXRfYmFzZV9kYXRhKGMtPmJhc2UpOworCQkJcmF3ID0gZ2V0X2RhdGFfZnJvbV9wYWNrKG9iaik7CisJCQljLT5kYXRhID0gcGF0Y2hfZGVsdGEoCisJCQkJYmFzZSwgYy0+YmFzZS0+c2l6ZSwKKwkJCQlyYXcsIG9iai0+c2l6ZSwKKwkJCQkmYy0+c2l6ZSk7CisJCQlmcmVlKHJhdyk7CisJCQlpZiAoIWMtPmRhdGEpCisJCQkJYmFkX29iamVjdChvYmotPmlkeC5vZmZzZXQsIF8oImZhaWxlZCB0byBhcHBseSBkZWx0YSIpKTsKKwkJCWdldF90aHJlYWRfZGF0YSgpLT5iYXNlX2NhY2hlX3VzZWQgKz0gYy0+c2l6ZTsKKwkJCXBydW5lX2Jhc2VfZGF0YShjKTsKKwkJfQorCQlmcmVlKGRlbHRhKTsKKwl9CisJcmV0dXJuIGMtPmRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHJlc29sdmVfZGVsdGEoc3RydWN0IG9iamVjdF9lbnRyeSAqZGVsdGFfb2JqLAorCQkJICBzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlLCBzdHJ1Y3QgYmFzZV9kYXRhICpyZXN1bHQpCit7CisJdm9pZCAqYmFzZV9kYXRhLCAqZGVsdGFfZGF0YTsKKworCWlmIChzaG93X3N0YXQpIHsKKwkJaW50IGkgPSBkZWx0YV9vYmogLSBvYmplY3RzOworCQlpbnQgaiA9IGJhc2UtPm9iaiAtIG9iamVjdHM7CisJCW9ial9zdGF0W2ldLmRlbHRhX2RlcHRoID0gb2JqX3N0YXRbal0uZGVsdGFfZGVwdGggKyAxOworCQlkZWVwZXN0X2RlbHRhX2xvY2soKTsKKwkJaWYgKGRlZXBlc3RfZGVsdGEgPCBvYmpfc3RhdFtpXS5kZWx0YV9kZXB0aCkKKwkJCWRlZXBlc3RfZGVsdGEgPSBvYmpfc3RhdFtpXS5kZWx0YV9kZXB0aDsKKwkJZGVlcGVzdF9kZWx0YV91bmxvY2soKTsKKwkJb2JqX3N0YXRbaV0uYmFzZV9vYmplY3Rfbm8gPSBqOworCX0KKwlkZWx0YV9kYXRhID0gZ2V0X2RhdGFfZnJvbV9wYWNrKGRlbHRhX29iaik7CisJYmFzZV9kYXRhID0gZ2V0X2Jhc2VfZGF0YShiYXNlKTsKKwlyZXN1bHQtPm9iaiA9IGRlbHRhX29iajsKKwlyZXN1bHQtPmRhdGEgPSBwYXRjaF9kZWx0YShiYXNlX2RhdGEsIGJhc2UtPnNpemUsCisJCQkJICAgZGVsdGFfZGF0YSwgZGVsdGFfb2JqLT5zaXplLCAmcmVzdWx0LT5zaXplKTsKKwlmcmVlKGRlbHRhX2RhdGEpOworCWlmICghcmVzdWx0LT5kYXRhKQorCQliYWRfb2JqZWN0KGRlbHRhX29iai0+aWR4Lm9mZnNldCwgXygiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIikpOworCWhhc2hfc2hhMV9maWxlKHJlc3VsdC0+ZGF0YSwgcmVzdWx0LT5zaXplLAorCQkgICAgICAgdHlwZW5hbWUoZGVsdGFfb2JqLT5yZWFsX3R5cGUpLCBkZWx0YV9vYmotPmlkeC5zaGExKTsKKwlzaGExX29iamVjdChyZXN1bHQtPmRhdGEsIE5VTEwsIHJlc3VsdC0+c2l6ZSwgZGVsdGFfb2JqLT5yZWFsX3R5cGUsCisJCSAgICBkZWx0YV9vYmotPmlkeC5zaGExKTsKKwljb3VudGVyX2xvY2soKTsKKwlucl9yZXNvbHZlZF9kZWx0YXMrKzsKKwljb3VudGVyX3VubG9jaygpOworfQorCisvKgorICogU3RhbmRhcmQgYm9vbGVhbiBjb21wYXJlLWFuZC1zd2FwOiBhdG9taWNhbGx5IGNoZWNrIHdoZXRoZXIgIip0eXBlIiBpcworICogIndhbnQiOyBpZiBzbywgc3dhcCBpbiAic2V0IiBhbmQgcmV0dXJuIHRydWUuIE90aGVyd2lzZSwgbGVhdmUgaXQgdW50b3VjaGVkCisgKiBhbmQgcmV0dXJuIGZhbHNlLgorICovCitzdGF0aWMgaW50IGNvbXBhcmVfYW5kX3N3YXBfdHlwZShzaWduZWQgY2hhciAqdHlwZSwKKwkJCQkgZW51bSBvYmplY3RfdHlwZSB3YW50LAorCQkJCSBlbnVtIG9iamVjdF90eXBlIHNldCkKK3sKKwllbnVtIG9iamVjdF90eXBlIG9sZDsKKworCXR5cGVfY2FzX2xvY2soKTsKKwlvbGQgPSAqdHlwZTsKKwlpZiAob2xkID09IHdhbnQpCisJCSp0eXBlID0gc2V0OworCXR5cGVfY2FzX3VubG9jaygpOworCisJcmV0dXJuIG9sZCA9PSB3YW50OworfQorCitzdGF0aWMgc3RydWN0IGJhc2VfZGF0YSAqZmluZF91bnJlc29sdmVkX2RlbHRhc18xKHN0cnVjdCBiYXNlX2RhdGEgKmJhc2UsCisJCQkJCQkgIHN0cnVjdCBiYXNlX2RhdGEgKnByZXZfYmFzZSkKK3sKKwlpZiAoYmFzZS0+cmVmX2xhc3QgPT0gLTEgJiYgYmFzZS0+b2ZzX2xhc3QgPT0gLTEpIHsKKwkJZmluZF9yZWZfZGVsdGFfY2hpbGRyZW4oYmFzZS0+b2JqLT5pZHguc2hhMSwKKwkJCQkJJmJhc2UtPnJlZl9maXJzdCwgJmJhc2UtPnJlZl9sYXN0LAorCQkJCQlPQkpfUkVGX0RFTFRBKTsKKworCQlmaW5kX29mc19kZWx0YV9jaGlsZHJlbihiYXNlLT5vYmotPmlkeC5vZmZzZXQsCisJCQkJCSZiYXNlLT5vZnNfZmlyc3QsICZiYXNlLT5vZnNfbGFzdCwKKwkJCQkJT0JKX09GU19ERUxUQSk7CisKKwkJaWYgKGJhc2UtPnJlZl9sYXN0ID09IC0xICYmIGJhc2UtPm9mc19sYXN0ID09IC0xKSB7CisJCQlmcmVlKGJhc2UtPmRhdGEpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlsaW5rX2Jhc2VfZGF0YShwcmV2X2Jhc2UsIGJhc2UpOworCX0KKworCWlmIChiYXNlLT5yZWZfZmlyc3QgPD0gYmFzZS0+cmVmX2xhc3QpIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqY2hpbGQgPSBvYmplY3RzICsgcmVmX2RlbHRhc1tiYXNlLT5yZWZfZmlyc3RdLm9ial9ubzsKKwkJc3RydWN0IGJhc2VfZGF0YSAqcmVzdWx0ID0gYWxsb2NfYmFzZV9kYXRhKCk7CisKKwkJaWYgKCFjb21wYXJlX2FuZF9zd2FwX3R5cGUoJmNoaWxkLT5yZWFsX3R5cGUsIE9CSl9SRUZfREVMVEEsCisJCQkJCSAgIGJhc2UtPm9iai0+cmVhbF90eXBlKSkKKwkJCWRpZSgiQlVHOiBjaGlsZC0+cmVhbF90eXBlICE9IE9CSl9SRUZfREVMVEEiKTsKKworCQlyZXNvbHZlX2RlbHRhKGNoaWxkLCBiYXNlLCByZXN1bHQpOworCQlpZiAoYmFzZS0+cmVmX2ZpcnN0ID09IGJhc2UtPnJlZl9sYXN0ICYmIGJhc2UtPm9mc19sYXN0ID09IC0xKQorCQkJZnJlZV9iYXNlX2RhdGEoYmFzZSk7CisKKwkJYmFzZS0+cmVmX2ZpcnN0Kys7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJaWYgKGJhc2UtPm9mc19maXJzdCA8PSBiYXNlLT5vZnNfbGFzdCkgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpjaGlsZCA9IG9iamVjdHMgKyBvZnNfZGVsdGFzW2Jhc2UtPm9mc19maXJzdF0ub2JqX25vOworCQlzdHJ1Y3QgYmFzZV9kYXRhICpyZXN1bHQgPSBhbGxvY19iYXNlX2RhdGEoKTsKKworCQlhc3NlcnQoY2hpbGQtPnJlYWxfdHlwZSA9PSBPQkpfT0ZTX0RFTFRBKTsKKwkJY2hpbGQtPnJlYWxfdHlwZSA9IGJhc2UtPm9iai0+cmVhbF90eXBlOworCQlyZXNvbHZlX2RlbHRhKGNoaWxkLCBiYXNlLCByZXN1bHQpOworCQlpZiAoYmFzZS0+b2ZzX2ZpcnN0ID09IGJhc2UtPm9mc19sYXN0KQorCQkJZnJlZV9iYXNlX2RhdGEoYmFzZSk7CisKKwkJYmFzZS0+b2ZzX2ZpcnN0Kys7CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJdW5saW5rX2Jhc2VfZGF0YShiYXNlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZmluZF91bnJlc29sdmVkX2RlbHRhcyhzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlKQoreworCXN0cnVjdCBiYXNlX2RhdGEgKm5ld19iYXNlLCAqcHJldl9iYXNlID0gTlVMTDsKKwlmb3IgKDs7KSB7CisJCW5ld19iYXNlID0gZmluZF91bnJlc29sdmVkX2RlbHRhc18xKGJhc2UsIHByZXZfYmFzZSk7CisKKwkJaWYgKG5ld19iYXNlKSB7CisJCQlwcmV2X2Jhc2UgPSBiYXNlOworCQkJYmFzZSA9IG5ld19iYXNlOworCQl9IGVsc2UgeworCQkJZnJlZShiYXNlKTsKKwkJCWJhc2UgPSBwcmV2X2Jhc2U7CisJCQlpZiAoIWJhc2UpCisJCQkJcmV0dXJuOworCQkJcHJldl9iYXNlID0gYmFzZS0+YmFzZTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBjb21wYXJlX29mc19kZWx0YV9lbnRyeShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCWNvbnN0IHN0cnVjdCBvZnNfZGVsdGFfZW50cnkgKmRlbHRhX2EgPSBhOworCWNvbnN0IHN0cnVjdCBvZnNfZGVsdGFfZW50cnkgKmRlbHRhX2IgPSBiOworCisJcmV0dXJuIGRlbHRhX2EtPm9mZnNldCA8IGRlbHRhX2ItPm9mZnNldCA/IC0xIDoKKwkgICAgICAgZGVsdGFfYS0+b2Zmc2V0ID4gZGVsdGFfYi0+b2Zmc2V0ID8gIDEgOgorCSAgICAgICAwOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfcmVmX2RlbHRhX2VudHJ5KGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IHJlZl9kZWx0YV9lbnRyeSAqZGVsdGFfYSA9IGE7CisJY29uc3Qgc3RydWN0IHJlZl9kZWx0YV9lbnRyeSAqZGVsdGFfYiA9IGI7CisKKwlyZXR1cm4gaGFzaGNtcChkZWx0YV9hLT5zaGExLCBkZWx0YV9iLT5zaGExKTsKK30KKworc3RhdGljIHZvaWQgcmVzb2x2ZV9iYXNlKHN0cnVjdCBvYmplY3RfZW50cnkgKm9iaikKK3sKKwlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlX29iaiA9IGFsbG9jX2Jhc2VfZGF0YSgpOworCWJhc2Vfb2JqLT5vYmogPSBvYmo7CisJYmFzZV9vYmotPmRhdGEgPSBOVUxMOworCWZpbmRfdW5yZXNvbHZlZF9kZWx0YXMoYmFzZV9vYmopOworfQorCisjaWZuZGVmIE5PX1BUSFJFQURTCitzdGF0aWMgdm9pZCAqdGhyZWFkZWRfc2Vjb25kX3Bhc3Modm9pZCAqZGF0YSkKK3sKKwlzZXRfdGhyZWFkX2RhdGEoZGF0YSk7CisJZm9yICg7OykgeworCQlpbnQgaTsKKwkJY291bnRlcl9sb2NrKCk7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsIG5yX3Jlc29sdmVkX2RlbHRhcyk7CisJCWNvdW50ZXJfdW5sb2NrKCk7CisJCXdvcmtfbG9jaygpOworCQl3aGlsZSAobnJfZGlzcGF0Y2hlZCA8IG5yX29iamVjdHMgJiYKKwkJICAgICAgIGlzX2RlbHRhX3R5cGUob2JqZWN0c1tucl9kaXNwYXRjaGVkXS50eXBlKSkKKwkJCW5yX2Rpc3BhdGNoZWQrKzsKKwkJaWYgKG5yX2Rpc3BhdGNoZWQgPj0gbnJfb2JqZWN0cykgeworCQkJd29ya191bmxvY2soKTsKKwkJCWJyZWFrOworCQl9CisJCWkgPSBucl9kaXNwYXRjaGVkKys7CisJCXdvcmtfdW5sb2NrKCk7CisKKwkJcmVzb2x2ZV9iYXNlKCZvYmplY3RzW2ldKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworLyoKKyAqIEZpcnN0IHBhc3M6CisgKiAtIGZpbmQgbG9jYXRpb25zIG9mIGFsbCBvYmplY3RzOworICogLSBjYWxjdWxhdGUgU0hBMSBvZiBhbGwgbm9uLWRlbHRhIG9iamVjdHM7CisgKiAtIHJlbWVtYmVyIGJhc2UgKFNIQTEgb3Igb2Zmc2V0KSBmb3IgYWxsIGRlbHRhcy4KKyAqLworc3RhdGljIHZvaWQgcGFyc2VfcGFja19vYmplY3RzKHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IGksIG5yX2RlbGF5cyA9IDA7CisJc3RydWN0IG9mc19kZWx0YV9lbnRyeSAqb2ZzX2RlbHRhID0gb2ZzX2RlbHRhczsKKwl1bnNpZ25lZCBjaGFyIHJlZl9kZWx0YV9zaGExWzIwXTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICh2ZXJib3NlKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKAorCQkJCWZyb21fc3RkaW4gPyBfKCJSZWNlaXZpbmcgb2JqZWN0cyIpIDogXygiSW5kZXhpbmcgb2JqZWN0cyIpLAorCQkJCW5yX29iamVjdHMpOworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqb2JqID0gJm9iamVjdHNbaV07CisJCXZvaWQgKmRhdGEgPSB1bnBhY2tfcmF3X2VudHJ5KG9iaiwgJm9mc19kZWx0YS0+b2Zmc2V0LAorCQkJCQkgICAgICByZWZfZGVsdGFfc2hhMSwgb2JqLT5pZHguc2hhMSk7CisJCW9iai0+cmVhbF90eXBlID0gb2JqLT50eXBlOworCQlpZiAob2JqLT50eXBlID09IE9CSl9PRlNfREVMVEEpIHsKKwkJCW5yX29mc19kZWx0YXMrKzsKKwkJCW9mc19kZWx0YS0+b2JqX25vID0gaTsKKwkJCW9mc19kZWx0YSsrOworCQl9IGVsc2UgaWYgKG9iai0+dHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCQlBTExPQ19HUk9XKHJlZl9kZWx0YXMsIG5yX3JlZl9kZWx0YXMgKyAxLCByZWZfZGVsdGFzX2FsbG9jKTsKKwkJCWhhc2hjcHkocmVmX2RlbHRhc1tucl9yZWZfZGVsdGFzXS5zaGExLCByZWZfZGVsdGFfc2hhMSk7CisJCQlyZWZfZGVsdGFzW25yX3JlZl9kZWx0YXNdLm9ial9ubyA9IGk7CisJCQlucl9yZWZfZGVsdGFzKys7CisJCX0gZWxzZSBpZiAoIWRhdGEpIHsKKwkJCS8qIGxhcmdlIGJsb2JzLCBjaGVjayBsYXRlciAqLworCQkJb2JqLT5yZWFsX3R5cGUgPSBPQkpfQkFEOworCQkJbnJfZGVsYXlzKys7CisJCX0gZWxzZQorCQkJc2hhMV9vYmplY3QoZGF0YSwgTlVMTCwgb2JqLT5zaXplLCBvYmotPnR5cGUsIG9iai0+aWR4LnNoYTEpOworCQlmcmVlKGRhdGEpOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBpKzEpOworCX0KKwlvYmplY3RzW2ldLmlkeC5vZmZzZXQgPSBjb25zdW1lZF9ieXRlczsKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKKwkvKiBDaGVjayBwYWNrIGludGVncml0eSAqLworCWZsdXNoKCk7CisJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmlucHV0X2N0eCk7CisJaWYgKGhhc2hjbXAoZmlsbCgyMCksIHNoYTEpKQorCQlkaWUoXygicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIikpOworCXVzZSgyMCk7CisKKwkvKiBJZiBpbnB1dF9mZCBpcyBhIGZpbGUsIHdlIHNob3VsZCBoYXZlIHJlYWNoZWQgaXRzIGVuZCBub3cuICovCisJaWYgKGZzdGF0KGlucHV0X2ZkLCAmc3QpKQorCQlkaWVfZXJybm8oXygiY2Fubm90IGZzdGF0IHBhY2tmaWxlIikpOworCWlmIChTX0lTUkVHKHN0LnN0X21vZGUpICYmCisJCQlsc2VlayhpbnB1dF9mZCwgMCwgU0VFS19DVVIpIC0gaW5wdXRfbGVuICE9IHN0LnN0X3NpemUpCisJCWRpZShfKCJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9ICZvYmplY3RzW2ldOworCQlpZiAob2JqLT5yZWFsX3R5cGUgIT0gT0JKX0JBRCkKKwkJCWNvbnRpbnVlOworCQlvYmotPnJlYWxfdHlwZSA9IG9iai0+dHlwZTsKKwkJc2hhMV9vYmplY3QoTlVMTCwgb2JqLCBvYmotPnNpemUsIG9iai0+dHlwZSwgb2JqLT5pZHguc2hhMSk7CisJCW5yX2RlbGF5cy0tOworCX0KKwlpZiAobnJfZGVsYXlzKQorCQlkaWUoXygiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIpKTsKK30KKworLyoKKyAqIFNlY29uZCBwYXNzOgorICogLSBmb3IgYWxsIG5vbi1kZWx0YSBvYmplY3RzLCBsb29rIGlmIGl0IGlzIHVzZWQgYXMgYSBiYXNlIGZvcgorICogICBkZWx0YXM7CisgKiAtIGlmIHVzZWQgYXMgYSBiYXNlLCB1bmNvbXByZXNzIHRoZSBvYmplY3QgYW5kIGFwcGx5IGFsbCBkZWx0YXMsCisgKiAgIHJlY3Vyc2l2ZWx5IGNoZWNraW5nIGlmIHRoZSByZXN1bHRpbmcgb2JqZWN0IGlzIHVzZWQgYXMgYSBiYXNlCisgKiAgIGZvciBzb21lIG1vcmUgZGVsdGFzLgorICovCitzdGF0aWMgdm9pZCByZXNvbHZlX2RlbHRhcyh2b2lkKQoreworCWludCBpOworCisJaWYgKCFucl9vZnNfZGVsdGFzICYmICFucl9yZWZfZGVsdGFzKQorCQlyZXR1cm47CisKKwkvKiBTb3J0IGRlbHRhcyBieSBiYXNlIFNIQTEvb2Zmc2V0IGZvciBmYXN0IHNlYXJjaGluZyAqLworCXFzb3J0KG9mc19kZWx0YXMsIG5yX29mc19kZWx0YXMsIHNpemVvZihzdHJ1Y3Qgb2ZzX2RlbHRhX2VudHJ5KSwKKwkgICAgICBjb21wYXJlX29mc19kZWx0YV9lbnRyeSk7CisJcXNvcnQocmVmX2RlbHRhcywgbnJfcmVmX2RlbHRhcywgc2l6ZW9mKHN0cnVjdCByZWZfZGVsdGFfZW50cnkpLAorCSAgICAgIGNvbXBhcmVfcmVmX2RlbHRhX2VudHJ5KTsKKworCWlmICh2ZXJib3NlKQorCQlwcm9ncmVzcyA9IHN0YXJ0X3Byb2dyZXNzKF8oIlJlc29sdmluZyBkZWx0YXMiKSwKKwkJCQkJICBucl9yZWZfZGVsdGFzICsgbnJfb2ZzX2RlbHRhcyk7CisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKwlucl9kaXNwYXRjaGVkID0gMDsKKwlpZiAobnJfdGhyZWFkcyA+IDEgfHwgZ2V0ZW52KCJHSVRfRk9SQ0VfVEhSRUFEUyIpKSB7CisJCWluaXRfdGhyZWFkKCk7CisJCWZvciAoaSA9IDA7IGkgPCBucl90aHJlYWRzOyBpKyspIHsKKwkJCWludCByZXQgPSBwdGhyZWFkX2NyZWF0ZSgmdGhyZWFkX2RhdGFbaV0udGhyZWFkLCBOVUxMLAorCQkJCQkJIHRocmVhZGVkX3NlY29uZF9wYXNzLCB0aHJlYWRfZGF0YSArIGkpOworCQkJaWYgKHJldCkKKwkJCQlkaWUoXygidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIiksCisJCQkJICAgIHN0cmVycm9yKHJldCkpOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBucl90aHJlYWRzOyBpKyspCisJCQlwdGhyZWFkX2pvaW4odGhyZWFkX2RhdGFbaV0udGhyZWFkLCBOVUxMKTsKKwkJY2xlYW51cF90aHJlYWQoKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSAmb2JqZWN0c1tpXTsKKworCQlpZiAoaXNfZGVsdGFfdHlwZShvYmotPnR5cGUpKQorCQkJY29udGludWU7CisJCXJlc29sdmVfYmFzZShvYmopOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBucl9yZXNvbHZlZF9kZWx0YXMpOworCX0KK30KKworLyoKKyAqIFRoaXJkIHBhc3M6CisgKiAtIGFwcGVuZCBvYmplY3RzIHRvIGNvbnZlcnQgdGhpbiBwYWNrIHRvIGZ1bGwgcGFjayBpZiByZXF1aXJlZAorICogLSB3cml0ZSB0aGUgZmluYWwgMjAtYnl0ZSBTSEEtMQorICovCitzdGF0aWMgdm9pZCBmaXhfdW5yZXNvbHZlZF9kZWx0YXMoc3RydWN0IHNoYTFmaWxlICpmKTsKK3N0YXRpYyB2b2lkIGNvbmNsdWRlX3BhY2soaW50IGZpeF90aGluX3BhY2ssIGNvbnN0IGNoYXIgKmN1cnJfcGFjaywgdW5zaWduZWQgY2hhciAqcGFja19zaGExKQoreworCWlmIChucl9yZWZfZGVsdGFzICsgbnJfb2ZzX2RlbHRhcyA9PSBucl9yZXNvbHZlZF9kZWx0YXMpIHsKKwkJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCQkvKiBGbHVzaCByZW1haW5pbmcgcGFjayBmaW5hbCAyMC1ieXRlIFNIQTEuICovCisJCWZsdXNoKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZml4X3RoaW5fcGFjaykgeworCQlzdHJ1Y3Qgc2hhMWZpbGUgKmY7CisJCXVuc2lnbmVkIGNoYXIgcmVhZF9zaGExWzIwXSwgdGFpbF9zaGExWzIwXTsKKwkJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwkJaW50IG5yX3VucmVzb2x2ZWQgPSBucl9vZnNfZGVsdGFzICsgbnJfcmVmX2RlbHRhcyAtIG5yX3Jlc29sdmVkX2RlbHRhczsKKwkJaW50IG5yX29iamVjdHNfaW5pdGlhbCA9IG5yX29iamVjdHM7CisJCWlmIChucl91bnJlc29sdmVkIDw9IDApCisJCQlkaWUoXygiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIpKTsKKwkJUkVBTExPQ19BUlJBWShvYmplY3RzLCBucl9vYmplY3RzICsgbnJfdW5yZXNvbHZlZCArIDEpOworCQltZW1zZXQob2JqZWN0cyArIG5yX29iamVjdHMgKyAxLCAwLAorCQkgICAgICAgbnJfdW5yZXNvbHZlZCAqIHNpemVvZigqb2JqZWN0cykpOworCQlmID0gc2hhMWZkKG91dHB1dF9mZCwgY3Vycl9wYWNrKTsKKwkJZml4X3VucmVzb2x2ZWRfZGVsdGFzKGYpOworCQlzdHJidWZfYWRkZigmbXNnLCBfKCJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIiksCisJCQkgICAgbnJfb2JqZWN0cyAtIG5yX29iamVjdHNfaW5pdGlhbCk7CisJCXN0b3BfcHJvZ3Jlc3NfbXNnKCZwcm9ncmVzcywgbXNnLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCQlzaGExY2xvc2UoZiwgdGFpbF9zaGExLCAwKTsKKwkJaGFzaGNweShyZWFkX3NoYTEsIHBhY2tfc2hhMSk7CisJCWZpeHVwX3BhY2tfaGVhZGVyX2Zvb3RlcihvdXRwdXRfZmQsIHBhY2tfc2hhMSwKKwkJCQkJIGN1cnJfcGFjaywgbnJfb2JqZWN0cywKKwkJCQkJIHJlYWRfc2hhMSwgY29uc3VtZWRfYnl0ZXMtMjApOworCQlpZiAoaGFzaGNtcChyZWFkX3NoYTEsIHRhaWxfc2hhMSkgIT0gMCkKKwkJCWRpZShfKCJVbmV4cGVjdGVkIHRhaWwgY2hlY2tzdW0gZm9yICVzICIKKwkJCSAgICAgICIoZGlzayBjb3JydXB0aW9uPykiKSwgY3Vycl9wYWNrKTsKKwl9CisJaWYgKG5yX29mc19kZWx0YXMgKyBucl9yZWZfZGVsdGFzICE9IG5yX3Jlc29sdmVkX2RlbHRhcykKKwkJZGllKFFfKCJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIiwKKwkJICAgICAgICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIsCisJCSAgICAgICBucl9vZnNfZGVsdGFzICsgbnJfcmVmX2RlbHRhcyAtIG5yX3Jlc29sdmVkX2RlbHRhcyksCisJCSAgICBucl9vZnNfZGVsdGFzICsgbnJfcmVmX2RlbHRhcyAtIG5yX3Jlc29sdmVkX2RlbHRhcyk7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfY29tcHJlc3NlZChzdHJ1Y3Qgc2hhMWZpbGUgKmYsIHZvaWQgKmluLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBjaGFyIG91dGJ1Zls0MDk2XTsKKworCWdpdF9kZWZsYXRlX2luaXQoJnN0cmVhbSwgemxpYl9jb21wcmVzc2lvbl9sZXZlbCk7CisJc3RyZWFtLm5leHRfaW4gPSBpbjsKKwlzdHJlYW0uYXZhaWxfaW4gPSBzaXplOworCisJZG8geworCQlzdHJlYW0ubmV4dF9vdXQgPSBvdXRidWY7CisJCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2Yob3V0YnVmKTsKKwkJc3RhdHVzID0gZ2l0X2RlZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCQlzaGExd3JpdGUoZiwgb3V0YnVmLCBzaXplb2Yob3V0YnVmKSAtIHN0cmVhbS5hdmFpbF9vdXQpOworCX0gd2hpbGUgKHN0YXR1cyA9PSBaX09LKTsKKworCWlmIChzdGF0dXMgIT0gWl9TVFJFQU1fRU5EKQorCQlkaWUoXygidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiKSwgc3RhdHVzKTsKKwlzaXplID0gc3RyZWFtLnRvdGFsX291dDsKKwlnaXRfZGVmbGF0ZV9lbmQoJnN0cmVhbSk7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICphcHBlbmRfb2JqX3RvX3BhY2soc3RydWN0IHNoYTFmaWxlICpmLAorCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHZvaWQgKmJ1ZiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmogPSAmb2JqZWN0c1tucl9vYmplY3RzKytdOworCXVuc2lnbmVkIGNoYXIgaGVhZGVyWzEwXTsKKwl1bnNpZ25lZCBsb25nIHMgPSBzaXplOworCWludCBuID0gMDsKKwl1bnNpZ25lZCBjaGFyIGMgPSAodHlwZSA8PCA0KSB8IChzICYgMTUpOworCXMgPj49IDQ7CisJd2hpbGUgKHMpIHsKKwkJaGVhZGVyW24rK10gPSBjIHwgMHg4MDsKKwkJYyA9IHMgJiAweDdmOworCQlzID4+PSA3OworCX0KKwloZWFkZXJbbisrXSA9IGM7CisJY3JjMzJfYmVnaW4oZik7CisJc2hhMXdyaXRlKGYsIGhlYWRlciwgbik7CisJb2JqWzBdLnNpemUgPSBzaXplOworCW9ialswXS5oZHJfc2l6ZSA9IG47CisJb2JqWzBdLnR5cGUgPSB0eXBlOworCW9ialswXS5yZWFsX3R5cGUgPSB0eXBlOworCW9ialsxXS5pZHgub2Zmc2V0ID0gb2JqWzBdLmlkeC5vZmZzZXQgKyBuOworCW9ialsxXS5pZHgub2Zmc2V0ICs9IHdyaXRlX2NvbXByZXNzZWQoZiwgYnVmLCBzaXplKTsKKwlvYmpbMF0uaWR4LmNyYzMyID0gY3JjMzJfZW5kKGYpOworCXNoYTFmbHVzaChmKTsKKwloYXNoY3B5KG9iai0+aWR4LnNoYTEsIHNoYTEpOworCXJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBpbnQgZGVsdGFfcG9zX2NvbXBhcmUoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCXN0cnVjdCByZWZfZGVsdGFfZW50cnkgKmEgPSAqKHN0cnVjdCByZWZfZGVsdGFfZW50cnkgKiopX2E7CisJc3RydWN0IHJlZl9kZWx0YV9lbnRyeSAqYiA9ICooc3RydWN0IHJlZl9kZWx0YV9lbnRyeSAqKilfYjsKKwlyZXR1cm4gYS0+b2JqX25vIC0gYi0+b2JqX25vOworfQorCitzdGF0aWMgdm9pZCBmaXhfdW5yZXNvbHZlZF9kZWx0YXMoc3RydWN0IHNoYTFmaWxlICpmKQoreworCXN0cnVjdCByZWZfZGVsdGFfZW50cnkgKipzb3J0ZWRfYnlfcG9zOworCWludCBpOworCisJLyoKKwkgKiBTaW5jZSBtYW55IHVucmVzb2x2ZWQgZGVsdGFzIG1heSB3ZWxsIGJlIHRoZW1zZWx2ZXMgYmFzZSBvYmplY3RzCisJICogZm9yIG1vcmUgdW5yZXNvbHZlZCBkZWx0YXMsIHdlIHJlYWxseSB3YW50IHRvIGluY2x1ZGUgdGhlCisJICogc21hbGxlc3QgbnVtYmVyIG9mIGJhc2Ugb2JqZWN0cyB0aGF0IHdvdWxkIGNvdmVyIGFzIG11Y2ggZGVsdGEKKwkgKiBhcyBwb3NzaWJsZSBieSBwaWNraW5nIHRoZQorCSAqIHRydW5jIGRlbHRhcyBmaXJzdCwgYWxsb3dpbmcgZm9yIG90aGVyIGRlbHRhcyB0byByZXNvbHZlIHdpdGhvdXQKKwkgKiBhZGRpdGlvbmFsIGJhc2Ugb2JqZWN0cy4gIFNpbmNlIG1vc3QgYmFzZSBvYmplY3RzIGFyZSB0byBiZSBmb3VuZAorCSAqIGJlZm9yZSBkZWx0YXMgZGVwZW5kaW5nIG9uIHRoZW0sIGEgZ29vZCBoZXVyaXN0aWMgaXMgdG8gc3RhcnQKKwkgKiByZXNvbHZpbmcgZGVsdGFzIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZWlyIHBvc2l0aW9uIGluIHRoZSBwYWNrLgorCSAqLworCXNvcnRlZF9ieV9wb3MgPSB4bWFsbG9jKG5yX3JlZl9kZWx0YXMgKiBzaXplb2YoKnNvcnRlZF9ieV9wb3MpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmVmX2RlbHRhczsgaSsrKQorCQlzb3J0ZWRfYnlfcG9zW2ldID0gJnJlZl9kZWx0YXNbaV07CisJcXNvcnQoc29ydGVkX2J5X3BvcywgbnJfcmVmX2RlbHRhcywgc2l6ZW9mKCpzb3J0ZWRfYnlfcG9zKSwgZGVsdGFfcG9zX2NvbXBhcmUpOworCisJZm9yIChpID0gMDsgaSA8IG5yX3JlZl9kZWx0YXM7IGkrKykgeworCQlzdHJ1Y3QgcmVmX2RlbHRhX2VudHJ5ICpkID0gc29ydGVkX2J5X3Bvc1tpXTsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQlzdHJ1Y3QgYmFzZV9kYXRhICpiYXNlX29iaiA9IGFsbG9jX2Jhc2VfZGF0YSgpOworCisJCWlmIChvYmplY3RzW2QtPm9ial9ub10ucmVhbF90eXBlICE9IE9CSl9SRUZfREVMVEEpCisJCQljb250aW51ZTsKKwkJYmFzZV9vYmotPmRhdGEgPSByZWFkX3NoYTFfZmlsZShkLT5zaGExLCAmdHlwZSwgJmJhc2Vfb2JqLT5zaXplKTsKKwkJaWYgKCFiYXNlX29iai0+ZGF0YSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjaGVja19zaGExX3NpZ25hdHVyZShkLT5zaGExLCBiYXNlX29iai0+ZGF0YSwKKwkJCQliYXNlX29iai0+c2l6ZSwgdHlwZW5hbWUodHlwZSkpKQorCQkJZGllKF8oImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IiksIHNoYTFfdG9faGV4KGQtPnNoYTEpKTsKKwkJYmFzZV9vYmotPm9iaiA9IGFwcGVuZF9vYmpfdG9fcGFjayhmLCBkLT5zaGExLAorCQkJCQliYXNlX29iai0+ZGF0YSwgYmFzZV9vYmotPnNpemUsIHR5cGUpOworCQlmaW5kX3VucmVzb2x2ZWRfZGVsdGFzKGJhc2Vfb2JqKTsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgbnJfcmVzb2x2ZWRfZGVsdGFzKTsKKwl9CisJZnJlZShzb3J0ZWRfYnlfcG9zKTsKK30KKworc3RhdGljIHZvaWQgZmluYWwoY29uc3QgY2hhciAqZmluYWxfcGFja19uYW1lLCBjb25zdCBjaGFyICpjdXJyX3BhY2tfbmFtZSwKKwkJICBjb25zdCBjaGFyICpmaW5hbF9pbmRleF9uYW1lLCBjb25zdCBjaGFyICpjdXJyX2luZGV4X25hbWUsCisJCSAgY29uc3QgY2hhciAqa2VlcF9uYW1lLCBjb25zdCBjaGFyICprZWVwX21zZywKKwkJICB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNvbnN0IGNoYXIgKnJlcG9ydCA9ICJwYWNrIjsKKwljaGFyIG5hbWVbUEFUSF9NQVhdOworCWludCBlcnI7CisKKwlpZiAoIWZyb21fc3RkaW4pIHsKKwkJY2xvc2UoaW5wdXRfZmQpOworCX0gZWxzZSB7CisJCWZzeW5jX29yX2RpZShvdXRwdXRfZmQsIGN1cnJfcGFja19uYW1lKTsKKwkJZXJyID0gY2xvc2Uob3V0cHV0X2ZkKTsKKwkJaWYgKGVycikKKwkJCWRpZV9lcnJubyhfKCJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIpKTsKKwl9CisKKwlpZiAoa2VlcF9tc2cpIHsKKwkJaW50IGtlZXBfZmQsIGtlZXBfbXNnX2xlbiA9IHN0cmxlbihrZWVwX21zZyk7CisKKwkJaWYgKCFrZWVwX25hbWUpCisJCQlrZWVwX2ZkID0gb2RiX3BhY2tfa2VlcChuYW1lLCBzaXplb2YobmFtZSksIHNoYTEpOworCQllbHNlCisJCQlrZWVwX2ZkID0gb3BlbihrZWVwX25hbWUsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTCwgMDYwMCk7CisKKwkJaWYgKGtlZXBfZmQgPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3Qgd3JpdGUga2VlcCBmaWxlICclcyciKSwKKwkJCQkJICBrZWVwX25hbWUgPyBrZWVwX25hbWUgOiBuYW1lKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChrZWVwX21zZ19sZW4gPiAwKSB7CisJCQkJd3JpdGVfb3JfZGllKGtlZXBfZmQsIGtlZXBfbXNnLCBrZWVwX21zZ19sZW4pOworCQkJCXdyaXRlX29yX2RpZShrZWVwX2ZkLCAiXG4iLCAxKTsKKwkJCX0KKwkJCWlmIChjbG9zZShrZWVwX2ZkKSAhPSAwKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY2xvc2Ugd3JpdHRlbiBrZWVwIGZpbGUgJyVzJyIpLAorCQkJCQkgIGtlZXBfbmFtZSA/IGtlZXBfbmFtZSA6IG5hbWUpOworCQkJcmVwb3J0ID0gImtlZXAiOworCQl9CisJfQorCisJaWYgKGZpbmFsX3BhY2tfbmFtZSAhPSBjdXJyX3BhY2tfbmFtZSkgeworCQlpZiAoIWZpbmFsX3BhY2tfbmFtZSkgeworCQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvcGFjay9wYWNrLSVzLnBhY2siLAorCQkJCSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBzaGExX3RvX2hleChzaGExKSk7CisJCQlmaW5hbF9wYWNrX25hbWUgPSBuYW1lOworCQl9CisJCWlmIChmaW5hbGl6ZV9vYmplY3RfZmlsZShjdXJyX3BhY2tfbmFtZSwgZmluYWxfcGFja19uYW1lKSkKKwkJCWRpZShfKCJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIikpOworCX0gZWxzZSBpZiAoZnJvbV9zdGRpbikKKwkJY2htb2QoZmluYWxfcGFja19uYW1lLCAwNDQ0KTsKKworCWlmIChmaW5hbF9pbmRleF9uYW1lICE9IGN1cnJfaW5kZXhfbmFtZSkgeworCQlpZiAoIWZpbmFsX2luZGV4X25hbWUpIHsKKwkJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzL3BhY2svcGFjay0lcy5pZHgiLAorCQkJCSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBzaGExX3RvX2hleChzaGExKSk7CisJCQlmaW5hbF9pbmRleF9uYW1lID0gbmFtZTsKKwkJfQorCQlpZiAoZmluYWxpemVfb2JqZWN0X2ZpbGUoY3Vycl9pbmRleF9uYW1lLCBmaW5hbF9pbmRleF9uYW1lKSkKKwkJCWRpZShfKCJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIpKTsKKwl9IGVsc2UKKwkJY2htb2QoZmluYWxfaW5kZXhfbmFtZSwgMDQ0NCk7CisKKwlpZiAoIWZyb21fc3RkaW4pIHsKKwkJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCX0gZWxzZSB7CisJCWNoYXIgYnVmWzQ4XTsKKwkJaW50IGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlc1x0JXNcbiIsCisJCQkJICAgcmVwb3J0LCBzaGExX3RvX2hleChzaGExKSk7CisJCXdyaXRlX29yX2RpZSgxLCBidWYsIGxlbik7CisKKwkJLyoKKwkJICogTGV0J3MganVzdCBtaW1pYyBnaXQtdW5wYWNrLW9iamVjdHMgaGVyZSBhbmQgd3JpdGUKKwkJICogdGhlIGxhc3QgcGFydCBvZiB0aGUgaW5wdXQgYnVmZmVyIHRvIHN0ZG91dC4KKwkJICovCisJCXdoaWxlIChpbnB1dF9sZW4pIHsKKwkJCWVyciA9IHh3cml0ZSgxLCBpbnB1dF9idWZmZXIgKyBpbnB1dF9vZmZzZXQsIGlucHV0X2xlbik7CisJCQlpZiAoZXJyIDw9IDApCisJCQkJYnJlYWs7CisJCQlpbnB1dF9sZW4gLT0gZXJyOworCQkJaW5wdXRfb2Zmc2V0ICs9IGVycjsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBnaXRfaW5kZXhfcGFja19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqb3B0cyA9IGNiOworCisJaWYgKCFzdHJjbXAoaywgInBhY2suaW5kZXh2ZXJzaW9uIikpIHsKKwkJb3B0cy0+dmVyc2lvbiA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlpZiAob3B0cy0+dmVyc2lvbiA+IDIpCisJCQlkaWUoXygiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSUiUFJJdTMyKSwgb3B0cy0+dmVyc2lvbik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay50aHJlYWRzIikpIHsKKwkJbnJfdGhyZWFkcyA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlpZiAobnJfdGhyZWFkcyA8IDApCisJCQlkaWUoXygiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIpLAorCQkJICAgIG5yX3RocmVhZHMpOworI2lmZGVmIE5PX1BUSFJFQURTCisJCWlmIChucl90aHJlYWRzICE9IDEpCisJCQl3YXJuaW5nKF8oIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiKSwgayk7CisJCW5yX3RocmVhZHMgPSAxOworI2VuZGlmCisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGssIHYsIGNiKTsKK30KKworc3RhdGljIGludCBjbXBfdWludDMyKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwl1aW50MzJfdCBhID0gKigodWludDMyX3QgKilhXyk7CisJdWludDMyX3QgYiA9ICooKHVpbnQzMl90ICopYl8pOworCisJcmV0dXJuIChhIDwgYikgPyAtMSA6IChhICE9IGIpOworfQorCitzdGF0aWMgdm9pZCByZWFkX3YyX2Fub21hbG91c19vZmZzZXRzKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCSAgICAgIHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKm9wdHMpCit7CisJY29uc3QgdWludDMyX3QgKmlkeDEsICppZHgyOworCXVpbnQzMl90IGk7CisKKwkvKiBUaGUgYWRkcmVzcyBvZiB0aGUgNC1ieXRlIG9mZnNldCB0YWJsZSAqLworCWlkeDEgPSAoKChjb25zdCB1aW50MzJfdCAqKXAtPmluZGV4X2RhdGEpCisJCSsgMiAvKiA4LWJ5dGUgaGVhZGVyICovCisJCSsgMjU2IC8qIGZhbiBvdXQgKi8KKwkJKyA1ICogcC0+bnVtX29iamVjdHMgLyogMjAtYnl0ZSBTSEEtMSB0YWJsZSAqLworCQkrIHAtPm51bV9vYmplY3RzIC8qIENSQzMyIHRhYmxlICovCisJCSk7CisKKwkvKiBUaGUgYWRkcmVzcyBvZiB0aGUgOC1ieXRlIG9mZnNldCB0YWJsZSAqLworCWlkeDIgPSBpZHgxICsgcC0+bnVtX29iamVjdHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX29iamVjdHM7IGkrKykgeworCQl1aW50MzJfdCBvZmYgPSBudG9obChpZHgxW2ldKTsKKwkJaWYgKCEob2ZmICYgMHg4MDAwMDAwMCkpCisJCQljb250aW51ZTsKKwkJb2ZmID0gb2ZmICYgMHg3ZmZmZmZmZjsKKwkJaWYgKGlkeDJbb2ZmICogMl0pCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogVGhlIHJlYWwgb2Zmc2V0IGlzIG50b2hsKGlkeDJbb2ZmICogMl0pIGluIGhpZ2ggNAorCQkgKiBvY3RldHMsIGFuZCBudG9obChpZHgyW29mZiAqIDIgKyAxXSkgaW4gbG93IDQKKwkJICogb2N0ZXRzLiAgQnV0IGlkeDJbb2ZmICogMl0gaXMgWmVybyEhIQorCQkgKi8KKwkJQUxMT0NfR1JPVyhvcHRzLT5hbm9tYWx5LCBvcHRzLT5hbm9tYWx5X25yICsgMSwgb3B0cy0+YW5vbWFseV9hbGxvYyk7CisJCW9wdHMtPmFub21hbHlbb3B0cy0+YW5vbWFseV9ucisrXSA9IG50b2hsKGlkeDJbb2ZmICogMiArIDFdKTsKKwl9CisKKwlpZiAoMSA8IG9wdHMtPmFub21hbHlfbnIpCisJCXFzb3J0KG9wdHMtPmFub21hbHksIG9wdHMtPmFub21hbHlfbnIsIHNpemVvZih1aW50MzJfdCksIGNtcF91aW50MzIpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2lkeF9vcHRpb24oc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqb3B0cywgY29uc3QgY2hhciAqcGFja19uYW1lKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gYWRkX3BhY2tlZF9naXQocGFja19uYW1lLCBzdHJsZW4ocGFja19uYW1lKSwgMSk7CisKKwlpZiAoIXApCisJCWRpZShfKCJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIpLCBwYWNrX25hbWUpOworCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCWRpZShfKCJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIiksIHBhY2tfbmFtZSk7CisKKwkvKiBSZWFkIHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlIGV4aXN0aW5nIGlkeCBmaWxlICovCisJb3B0cy0+dmVyc2lvbiA9IHAtPmluZGV4X3ZlcnNpb247CisKKwlpZiAob3B0cy0+dmVyc2lvbiA9PSAyKQorCQlyZWFkX3YyX2Fub21hbG91c19vZmZzZXRzKHAsIG9wdHMpOworCisJLyoKKwkgKiBHZXQgcmlkIG9mIHRoZSBpZHggZmlsZSBhcyB3ZSBkbyBub3QgbmVlZCBpdCBhbnltb3JlLgorCSAqIE5FRURTV09SSzogZXh0cmFjdCB0aGlzIGJpdCBmcm9tIGZyZWVfcGFja19ieV9uYW1lKCkgaW4KKwkgKiBzaGExX2ZpbGUuYywgcGVyaGFwcz8gIEl0IHNob3VsZG4ndCBtYXR0ZXIgdmVyeSBtdWNoIGFzIHdlCisJICoga25vdyB3ZSBoYXZlbid0IGluc3RhbGxlZCB0aGlzIHBhY2sgKGhlbmNlIHdlIG5ldmVyIGhhdmUKKwkgKiByZWFkIGFueXRoaW5nIGZyb20gaXQpLgorCSAqLworCWNsb3NlX3BhY2tfaW5kZXgocCk7CisJZnJlZShwKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19wYWNrX2luZm8oaW50IHN0YXRfb25seSkKK3sKKwlpbnQgaSwgYmFzZW9iamVjdHMgPSBucl9vYmplY3RzIC0gbnJfcmVmX2RlbHRhcyAtIG5yX29mc19kZWx0YXM7CisJdW5zaWduZWQgbG9uZyAqY2hhaW5faGlzdG9ncmFtID0gTlVMTDsKKworCWlmIChkZWVwZXN0X2RlbHRhKQorCQljaGFpbl9oaXN0b2dyYW0gPSB4Y2FsbG9jKGRlZXBlc3RfZGVsdGEsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iaiA9ICZvYmplY3RzW2ldOworCisJCWlmIChpc19kZWx0YV90eXBlKG9iai0+dHlwZSkpCisJCQljaGFpbl9oaXN0b2dyYW1bb2JqX3N0YXRbaV0uZGVsdGFfZGVwdGggLSAxXSsrOworCQlpZiAoc3RhdF9vbmx5KQorCQkJY29udGludWU7CisJCXByaW50ZigiJXMgJS02cyAlbHUgJWx1ICUiUFJJdU1BWCwKKwkJICAgICAgIHNoYTFfdG9faGV4KG9iai0+aWR4LnNoYTEpLAorCQkgICAgICAgdHlwZW5hbWUob2JqLT5yZWFsX3R5cGUpLCBvYmotPnNpemUsCisJCSAgICAgICAodW5zaWduZWQgbG9uZykob2JqWzFdLmlkeC5vZmZzZXQgLSBvYmotPmlkeC5vZmZzZXQpLAorCQkgICAgICAgKHVpbnRtYXhfdClvYmotPmlkeC5vZmZzZXQpOworCQlpZiAoaXNfZGVsdGFfdHlwZShvYmotPnR5cGUpKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpib2JqID0gJm9iamVjdHNbb2JqX3N0YXRbaV0uYmFzZV9vYmplY3Rfbm9dOworCQkJcHJpbnRmKCIgJXUgJXMiLCBvYmpfc3RhdFtpXS5kZWx0YV9kZXB0aCwgc2hhMV90b19oZXgoYm9iai0+aWR4LnNoYTEpKTsKKwkJfQorCQlwdXRjaGFyKCdcbicpOworCX0KKworCWlmIChiYXNlb2JqZWN0cykKKwkJcHJpbnRmX2xuKFFfKCJub24gZGVsdGE6ICVkIG9iamVjdCIsCisJCQkgICAgICJub24gZGVsdGE6ICVkIG9iamVjdHMiLAorCQkJICAgICBiYXNlb2JqZWN0cyksCisJCQkgIGJhc2VvYmplY3RzKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGVlcGVzdF9kZWx0YTsgaSsrKSB7CisJCWlmICghY2hhaW5faGlzdG9ncmFtW2ldKQorCQkJY29udGludWU7CisJCXByaW50Zl9sbihRXygiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiLAorCQkJICAgICAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIiwKKwkJCSAgICAgY2hhaW5faGlzdG9ncmFtW2ldKSwKKwkJCSAgaSArIDEsCisJCQkgIGNoYWluX2hpc3RvZ3JhbVtpXSk7CisJfQorfQorCitpbnQgY21kX2luZGV4X3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGksIGZpeF90aGluX3BhY2sgPSAwLCB2ZXJpZnkgPSAwLCBzdGF0X29ubHkgPSAwOworCWNvbnN0IGNoYXIgKmN1cnJfaW5kZXg7CisJY29uc3QgY2hhciAqaW5kZXhfbmFtZSA9IE5VTEwsICpwYWNrX25hbWUgPSBOVUxMOworCWNvbnN0IGNoYXIgKmtlZXBfbmFtZSA9IE5VTEwsICprZWVwX21zZyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBpbmRleF9uYW1lX2J1ZiA9IFNUUkJVRl9JTklULAorCQkgICAgICBrZWVwX25hbWVfYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaWR4X29iamVjdHM7CisJc3RydWN0IHBhY2tfaWR4X29wdGlvbiBvcHRzOworCXVuc2lnbmVkIGNoYXIgcGFja19zaGExWzIwXTsKKwl1bnNpZ25lZCBmb3JlaWduX25yID0gMTsJLyogemVybyBpcyBhICJnb29kIiB2YWx1ZSwgYXNzdW1lIGJhZCAqLworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShpbmRleF9wYWNrX3VzYWdlKTsKKworCWNoZWNrX3JlcGxhY2VfcmVmcyA9IDA7CisJZnNja19vcHRpb25zLndhbGsgPSBtYXJrX2xpbms7CisKKwlyZXNldF9wYWNrX2lkeF9vcHRpb24oJm9wdHMpOworCWdpdF9jb25maWcoZ2l0X2luZGV4X3BhY2tfY29uZmlnLCAmb3B0cyk7CisJaWYgKHByZWZpeCAmJiBjaGRpcihwcmVmaXgpKQorCQlkaWUoXygiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiKSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXN0ZGluIikpIHsKKwkJCQlmcm9tX3N0ZGluID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZpeC10aGluIikpIHsKKwkJCQlmaXhfdGhpbl9wYWNrID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXN0cmljdCIpKSB7CisJCQkJc3RyaWN0ID0gMTsKKwkJCQlkb19mc2NrX29iamVjdCA9IDE7CisJCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0tc3RyaWN0PSIsICZhcmcpKSB7CisJCQkJc3RyaWN0ID0gMTsKKwkJCQlkb19mc2NrX29iamVjdCA9IDE7CisJCQkJZnNja19zZXRfbXNnX3R5cGVzKCZmc2NrX29wdGlvbnMsIGFyZyk7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jaGVjay1zZWxmLWNvbnRhaW5lZC1hbmQtY29ubmVjdGVkIikpIHsKKwkJCQlzdHJpY3QgPSAxOworCQkJCWNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdmVyaWZ5IikpIHsKKwkJCQl2ZXJpZnkgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdmVyaWZ5LXN0YXQiKSkgeworCQkJCXZlcmlmeSA9IDE7CisJCQkJc2hvd19zdGF0ID0gMTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXZlcmlmeS1zdGF0LW9ubHkiKSkgeworCQkJCXZlcmlmeSA9IDE7CisJCQkJc2hvd19zdGF0ID0gMTsKKwkJCQlzdGF0X29ubHkgPSAxOworCQkJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0ta2VlcCIpKSB7CisJCQkJa2VlcF9tc2cgPSAiIjsKKwkJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1rZWVwPSIpKSB7CisJCQkJa2VlcF9tc2cgPSBhcmcgKyA3OworCQkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItLXRocmVhZHM9IikpIHsKKwkJCQljaGFyICplbmQ7CisJCQkJbnJfdGhyZWFkcyA9IHN0cnRvdWwoYXJnKzEwLCAmZW5kLCAwKTsKKwkJCQlpZiAoIWFyZ1sxMF0gfHwgKmVuZCB8fCBucl90aHJlYWRzIDwgMCkKKwkJCQkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CisjaWZkZWYgTk9fUFRIUkVBRFMKKwkJCQlpZiAobnJfdGhyZWFkcyAhPSAxKQorCQkJCQl3YXJuaW5nKF8oIm5vIHRocmVhZHMgc3VwcG9ydCwgIgorCQkJCQkJICAiaWdub3JpbmcgJXMiKSwgYXJnKTsKKwkJCQlucl90aHJlYWRzID0gMTsKKyNlbmRpZgorCQkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItLXBhY2tfaGVhZGVyPSIpKSB7CisJCQkJc3RydWN0IHBhY2tfaGVhZGVyICpoZHI7CisJCQkJY2hhciAqYzsKKworCQkJCWhkciA9IChzdHJ1Y3QgcGFja19oZWFkZXIgKilpbnB1dF9idWZmZXI7CisJCQkJaGRyLT5oZHJfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19TSUdOQVRVUkUpOworCQkJCWhkci0+aGRyX3ZlcnNpb24gPSBodG9ubChzdHJ0b3VsKGFyZyArIDE0LCAmYywgMTApKTsKKwkJCQlpZiAoKmMgIT0gJywnKQorCQkJCQlkaWUoXygiYmFkICVzIiksIGFyZyk7CisJCQkJaGRyLT5oZHJfZW50cmllcyA9IGh0b25sKHN0cnRvdWwoYyArIDEsICZjLCAxMCkpOworCQkJCWlmICgqYykKKwkJCQkJZGllKF8oImJhZCAlcyIpLCBhcmcpOworCQkJCWlucHV0X2xlbiA9IHNpemVvZigqaGRyKTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItdiIpKSB7CisJCQkJdmVyYm9zZSA9IDE7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLW8iKSkgeworCQkJCWlmIChpbmRleF9uYW1lIHx8IChpKzEpID49IGFyZ2MpCisJCQkJCXVzYWdlKGluZGV4X3BhY2tfdXNhZ2UpOworCQkJCWluZGV4X25hbWUgPSBhcmd2WysraV07CisJCQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi0taW5kZXgtdmVyc2lvbj0iKSkgeworCQkJCWNoYXIgKmM7CisJCQkJb3B0cy52ZXJzaW9uID0gc3RydG91bChhcmcgKyAxNiwgJmMsIDEwKTsKKwkJCQlpZiAob3B0cy52ZXJzaW9uID4gMikKKwkJCQkJZGllKF8oImJhZCAlcyIpLCBhcmcpOworCQkJCWlmICgqYyA9PSAnLCcpCisJCQkJCW9wdHMub2ZmMzJfbGltaXQgPSBzdHJ0b3VsKGMrMSwgJmMsIDApOworCQkJCWlmICgqYyB8fCBvcHRzLm9mZjMyX2xpbWl0ICYgMHg4MDAwMDAwMCkKKwkJCQkJZGllKF8oImJhZCAlcyIpLCBhcmcpOworCQkJfSBlbHNlCisJCQkJdXNhZ2UoaW5kZXhfcGFja191c2FnZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwYWNrX25hbWUpCisJCQl1c2FnZShpbmRleF9wYWNrX3VzYWdlKTsKKwkJcGFja19uYW1lID0gYXJnOworCX0KKworCWlmICghcGFja19uYW1lICYmICFmcm9tX3N0ZGluKQorCQl1c2FnZShpbmRleF9wYWNrX3VzYWdlKTsKKwlpZiAoZml4X3RoaW5fcGFjayAmJiAhZnJvbV9zdGRpbikKKwkJZGllKF8oIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIikpOworCWlmICghaW5kZXhfbmFtZSAmJiBwYWNrX25hbWUpIHsKKwkJc2l6ZV90IGxlbjsKKwkJaWYgKCFzdHJpcF9zdWZmaXgocGFja19uYW1lLCAiLnBhY2siLCAmbGVuKSkKKwkJCWRpZShfKCJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIpLAorCQkJICAgIHBhY2tfbmFtZSk7CisJCXN0cmJ1Zl9hZGQoJmluZGV4X25hbWVfYnVmLCBwYWNrX25hbWUsIGxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJmluZGV4X25hbWVfYnVmLCAiLmlkeCIpOworCQlpbmRleF9uYW1lID0gaW5kZXhfbmFtZV9idWYuYnVmOworCX0KKwlpZiAoa2VlcF9tc2cgJiYgIWtlZXBfbmFtZSAmJiBwYWNrX25hbWUpIHsKKwkJc2l6ZV90IGxlbjsKKwkJaWYgKCFzdHJpcF9zdWZmaXgocGFja19uYW1lLCAiLnBhY2siLCAmbGVuKSkKKwkJCWRpZShfKCJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIpLAorCQkJICAgIHBhY2tfbmFtZSk7CisJCXN0cmJ1Zl9hZGQoJmtlZXBfbmFtZV9idWYsIHBhY2tfbmFtZSwgbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigma2VlcF9uYW1lX2J1ZiwgIi5pZHgiKTsKKwkJa2VlcF9uYW1lID0ga2VlcF9uYW1lX2J1Zi5idWY7CisJfQorCWlmICh2ZXJpZnkpIHsKKwkJaWYgKCFpbmRleF9uYW1lKQorCQkJZGllKF8oIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIpKTsKKwkJcmVhZF9pZHhfb3B0aW9uKCZvcHRzLCBpbmRleF9uYW1lKTsKKwkJb3B0cy5mbGFncyB8PSBXUklURV9JRFhfVkVSSUZZIHwgV1JJVEVfSURYX1NUUklDVDsKKwl9CisJaWYgKHN0cmljdCkKKwkJb3B0cy5mbGFncyB8PSBXUklURV9JRFhfU1RSSUNUOworCisjaWZuZGVmIE5PX1BUSFJFQURTCisJaWYgKCFucl90aHJlYWRzKSB7CisJCW5yX3RocmVhZHMgPSBvbmxpbmVfY3B1cygpOworCQkvKiBBbiBleHBlcmltZW50IHNob3dlZCB0aGF0IG1vcmUgdGhyZWFkcyBkb2VzIG5vdCBtZWFuIGZhc3RlciAqLworCQlpZiAobnJfdGhyZWFkcyA+IDMpCisJCQlucl90aHJlYWRzID0gMzsKKwl9CisjZW5kaWYKKworCWN1cnJfcGFjayA9IG9wZW5fcGFja19maWxlKHBhY2tfbmFtZSk7CisJcGFyc2VfcGFja19oZWFkZXIoKTsKKwlvYmplY3RzID0geGNhbGxvYyhucl9vYmplY3RzICsgMSwgc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkpKTsKKwlpZiAoc2hvd19zdGF0KQorCQlvYmpfc3RhdCA9IHhjYWxsb2MobnJfb2JqZWN0cyArIDEsIHNpemVvZihzdHJ1Y3Qgb2JqZWN0X3N0YXQpKTsKKwlvZnNfZGVsdGFzID0geGNhbGxvYyhucl9vYmplY3RzLCBzaXplb2Yoc3RydWN0IG9mc19kZWx0YV9lbnRyeSkpOworCXBhcnNlX3BhY2tfb2JqZWN0cyhwYWNrX3NoYTEpOworCXJlc29sdmVfZGVsdGFzKCk7CisJY29uY2x1ZGVfcGFjayhmaXhfdGhpbl9wYWNrLCBjdXJyX3BhY2ssIHBhY2tfc2hhMSk7CisJZnJlZShvZnNfZGVsdGFzKTsKKwlmcmVlKHJlZl9kZWx0YXMpOworCWlmIChzdHJpY3QpCisJCWZvcmVpZ25fbnIgPSBjaGVja19vYmplY3RzKCk7CisKKwlpZiAoc2hvd19zdGF0KQorCQlzaG93X3BhY2tfaW5mbyhzdGF0X29ubHkpOworCisJaWR4X29iamVjdHMgPSB4bWFsbG9jKChucl9vYmplY3RzKSAqIHNpemVvZihzdHJ1Y3QgcGFja19pZHhfZW50cnkgKikpOworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspCisJCWlkeF9vYmplY3RzW2ldID0gJm9iamVjdHNbaV0uaWR4OworCWN1cnJfaW5kZXggPSB3cml0ZV9pZHhfZmlsZShpbmRleF9uYW1lLCBpZHhfb2JqZWN0cywgbnJfb2JqZWN0cywgJm9wdHMsIHBhY2tfc2hhMSk7CisJZnJlZShpZHhfb2JqZWN0cyk7CisKKwlpZiAoIXZlcmlmeSkKKwkJZmluYWwocGFja19uYW1lLCBjdXJyX3BhY2ssCisJCSAgICAgIGluZGV4X25hbWUsIGN1cnJfaW5kZXgsCisJCSAgICAgIGtlZXBfbmFtZSwga2VlcF9tc2csCisJCSAgICAgIHBhY2tfc2hhMSk7CisJZWxzZQorCQljbG9zZShpbnB1dF9mZCk7CisJZnJlZShvYmplY3RzKTsKKwlzdHJidWZfcmVsZWFzZSgmaW5kZXhfbmFtZV9idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZrZWVwX25hbWVfYnVmKTsKKwlpZiAocGFja19uYW1lID09IE5VTEwpCisJCWZyZWUoKHZvaWQgKikgY3Vycl9wYWNrKTsKKwlpZiAoaW5kZXhfbmFtZSA9PSBOVUxMKQorCQlmcmVlKCh2b2lkICopIGN1cnJfaW5kZXgpOworCisJLyoKKwkgKiBMZXQgdGhlIGNhbGxlciBrbm93IHRoaXMgcGFjayBpcyBub3Qgc2VsZiBjb250YWluZWQKKwkgKi8KKwlpZiAoY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCAmJiBmb3JlaWduX25yKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9pbml0LWRiLmMgYi9idWlsdGluL2luaXQtZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTlmNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9pbml0LWRiLmMKQEAgLTAsMCArMSw1ODcgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKKyNpZm5kZWYgREVGQVVMVF9HSVRfVEVNUExBVEVfRElSCisjZGVmaW5lIERFRkFVTFRfR0lUX1RFTVBMQVRFX0RJUiAiL3Vzci9zaGFyZS9naXQtY29yZS90ZW1wbGF0ZXMiCisjZW5kaWYKKworI2lmZGVmIE5PX1RSVVNUQUJMRV9GSUxFTU9ERQorI2RlZmluZSBURVNUX0ZJTEVNT0RFIDAKKyNlbHNlCisjZGVmaW5lIFRFU1RfRklMRU1PREUgMQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaW5pdF9pc19iYXJlX3JlcG9zaXRvcnkgPSAwOworc3RhdGljIGludCBpbml0X3NoYXJlZF9yZXBvc2l0b3J5ID0gLTE7CitzdGF0aWMgY29uc3QgY2hhciAqaW5pdF9kYl90ZW1wbGF0ZV9kaXI7CitzdGF0aWMgY29uc3QgY2hhciAqZ2l0X2xpbms7CisKK3N0YXRpYyB2b2lkIHNhZmVfY3JlYXRlX2Rpcihjb25zdCBjaGFyICpkaXIsIGludCBzaGFyZSkKK3sKKwlpZiAobWtkaXIoZGlyLCAwNzc3KSA8IDApIHsKKwkJaWYgKGVycm5vICE9IEVFWElTVCkgeworCQkJcGVycm9yKGRpcik7CisJCQlleGl0KDEpOworCQl9CisJfQorCWVsc2UgaWYgKHNoYXJlICYmIGFkanVzdF9zaGFyZWRfcGVybShkaXIpKQorCQlkaWUoXygiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiKSwgZGlyKTsKK30KKworc3RhdGljIHZvaWQgY29weV90ZW1wbGF0ZXNfMShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBzdHJ1Y3Qgc3RyYnVmICp0ZW1wbGF0ZSwKKwkJCSAgICAgRElSICpkaXIpCit7CisJc2l6ZV90IHBhdGhfYmFzZWxlbiA9IHBhdGgtPmxlbjsKKwlzaXplX3QgdGVtcGxhdGVfYmFzZWxlbiA9IHRlbXBsYXRlLT5sZW47CisJc3RydWN0IGRpcmVudCAqZGU7CisKKwkvKiBOb3RlOiBpZiAiLmdpdC9ob29rcyIgZmlsZSBleGlzdHMgaW4gdGhlIHJlcG9zaXRvcnkgYmVpbmcKKwkgKiByZS1pbml0aWFsaXplZCwgL2V0Yy9jb3JlLWdpdC90ZW1wbGF0ZXMvaG9va3MvdXBkYXRlIHdvdWxkCisJICogY2F1c2UgImdpdCBpbml0IiB0byBmYWlsIGhlcmUuICBJIHRoaW5rIHRoaXMgaXMgc2FuZSBidXQKKwkgKiBpdCBtZWFucyB0aGF0IHRoZSBzZXQgb2YgdGVtcGxhdGVzIHdlIHNoaXAgYnkgZGVmYXVsdCwgYWxvbmcKKwkgKiB3aXRoIHRoZSB3YXkgdGhlIG5hbWVzcGFjZSB1bmRlciAuZ2l0LyBpcyBvcmdhbml6ZWQsIHNob3VsZAorCSAqIGJlIHJlYWxseSBjYXJlZnVsbHkgY2hvc2VuLgorCSAqLworCXNhZmVfY3JlYXRlX2RpcihwYXRoLT5idWYsIDEpOworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJc3RydWN0IHN0YXQgc3RfZ2l0LCBzdF90ZW1wbGF0ZTsKKwkJaW50IGV4aXN0cyA9IDA7CisKKwkJc3RyYnVmX3NldGxlbihwYXRoLCBwYXRoX2Jhc2VsZW4pOworCQlzdHJidWZfc2V0bGVuKHRlbXBsYXRlLCB0ZW1wbGF0ZV9iYXNlbGVuKTsKKworCQlpZiAoZGUtPmRfbmFtZVswXSA9PSAnLicpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX2FkZHN0cihwYXRoLCBkZS0+ZF9uYW1lKTsKKwkJc3RyYnVmX2FkZHN0cih0ZW1wbGF0ZSwgZGUtPmRfbmFtZSk7CisJCWlmIChsc3RhdChwYXRoLT5idWYsICZzdF9naXQpKSB7CisJCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3Qgc3RhdCAnJXMnIiksIHBhdGgtPmJ1Zik7CisJCX0KKwkJZWxzZQorCQkJZXhpc3RzID0gMTsKKworCQlpZiAobHN0YXQodGVtcGxhdGUtPmJ1ZiwgJnN0X3RlbXBsYXRlKSkKKwkJCWRpZV9lcnJubyhfKCJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIiksIHRlbXBsYXRlLT5idWYpOworCisJCWlmIChTX0lTRElSKHN0X3RlbXBsYXRlLnN0X21vZGUpKSB7CisJCQlESVIgKnN1YmRpciA9IG9wZW5kaXIodGVtcGxhdGUtPmJ1Zik7CisJCQlpZiAoIXN1YmRpcikKKwkJCQlkaWVfZXJybm8oXygiY2Fubm90IG9wZW5kaXIgJyVzJyIpLCB0ZW1wbGF0ZS0+YnVmKTsKKwkJCXN0cmJ1Zl9hZGRjaChwYXRoLCAnLycpOworCQkJc3RyYnVmX2FkZGNoKHRlbXBsYXRlLCAnLycpOworCQkJY29weV90ZW1wbGF0ZXNfMShwYXRoLCB0ZW1wbGF0ZSwgc3ViZGlyKTsKKwkJCWNsb3NlZGlyKHN1YmRpcik7CisJCX0KKwkJZWxzZSBpZiAoZXhpc3RzKQorCQkJY29udGludWU7CisJCWVsc2UgaWYgKFNfSVNMTksoc3RfdGVtcGxhdGUuc3RfbW9kZSkpIHsKKwkJCXN0cnVjdCBzdHJidWYgbG5rID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZsbmssIHRlbXBsYXRlLT5idWYsIDApIDwgMCkKKwkJCQlkaWVfZXJybm8oXygiY2Fubm90IHJlYWRsaW5rICclcyciKSwgdGVtcGxhdGUtPmJ1Zik7CisJCQlpZiAoc3ltbGluayhsbmsuYnVmLCBwYXRoLT5idWYpKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciKSwKKwkJCQkJICBsbmsuYnVmLCBwYXRoLT5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmxuayk7CisJCX0KKwkJZWxzZSBpZiAoU19JU1JFRyhzdF90ZW1wbGF0ZS5zdF9tb2RlKSkgeworCQkJaWYgKGNvcHlfZmlsZShwYXRoLT5idWYsIHRlbXBsYXRlLT5idWYsIHN0X3RlbXBsYXRlLnN0X21vZGUpKQorCQkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY29weSAnJXMnIHRvICclcyciKSwKKwkJCQkJICB0ZW1wbGF0ZS0+YnVmLCBwYXRoLT5idWYpOworCQl9CisJCWVsc2UKKwkJCWVycm9yKF8oImlnbm9yaW5nIHRlbXBsYXRlICVzIiksIHRlbXBsYXRlLT5idWYpOworCX0KK30KKworc3RhdGljIHZvaWQgY29weV90ZW1wbGF0ZXMoY29uc3QgY2hhciAqdGVtcGxhdGVfZGlyKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgdGVtcGxhdGVfcGF0aCA9IFNUUkJVRl9JTklUOworCXNpemVfdCB0ZW1wbGF0ZV9sZW47CisJRElSICpkaXI7CisJY2hhciAqdG9fZnJlZSA9IE5VTEw7CisKKwlpZiAoIXRlbXBsYXRlX2RpcikKKwkJdGVtcGxhdGVfZGlyID0gZ2V0ZW52KFRFTVBMQVRFX0RJUl9FTlZJUk9OTUVOVCk7CisJaWYgKCF0ZW1wbGF0ZV9kaXIpCisJCXRlbXBsYXRlX2RpciA9IGluaXRfZGJfdGVtcGxhdGVfZGlyOworCWlmICghdGVtcGxhdGVfZGlyKQorCQl0ZW1wbGF0ZV9kaXIgPSB0b19mcmVlID0gc3lzdGVtX3BhdGgoREVGQVVMVF9HSVRfVEVNUExBVEVfRElSKTsKKwlpZiAoIXRlbXBsYXRlX2RpclswXSkgeworCQlmcmVlKHRvX2ZyZWUpOworCQlyZXR1cm47CisJfQorCisJc3RyYnVmX2FkZHN0cigmdGVtcGxhdGVfcGF0aCwgdGVtcGxhdGVfZGlyKTsKKwlzdHJidWZfY29tcGxldGUoJnRlbXBsYXRlX3BhdGgsICcvJyk7CisJdGVtcGxhdGVfbGVuID0gdGVtcGxhdGVfcGF0aC5sZW47CisKKwlkaXIgPSBvcGVuZGlyKHRlbXBsYXRlX3BhdGguYnVmKTsKKwlpZiAoIWRpcikgeworCQl3YXJuaW5nKF8oInRlbXBsYXRlcyBub3QgZm91bmQgJXMiKSwgdGVtcGxhdGVfZGlyKTsKKwkJZ290byBmcmVlX3JldHVybjsKKwl9CisKKwkvKiBNYWtlIHN1cmUgdGhhdCB0ZW1wbGF0ZSBpcyBmcm9tIHRoZSBjb3JyZWN0IHZpbnRhZ2UgKi8KKwlzdHJidWZfYWRkc3RyKCZ0ZW1wbGF0ZV9wYXRoLCAiY29uZmlnIik7CisJcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbiA9IDA7CisJZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbiwKKwkJCSAgICAgdGVtcGxhdGVfcGF0aC5idWYsIE5VTEwpOworCXN0cmJ1Zl9zZXRsZW4oJnRlbXBsYXRlX3BhdGgsIHRlbXBsYXRlX2xlbik7CisKKwlpZiAocmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbiAmJgorCSAgICByZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uICE9IEdJVF9SRVBPX1ZFUlNJT04pIHsKKwkJd2FybmluZyhfKCJub3QgY29weWluZyB0ZW1wbGF0ZXMgb2YgIgorCQkJImEgd3JvbmcgZm9ybWF0IHZlcnNpb24gJWQgZnJvbSAnJXMnIiksCisJCQlyZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uLAorCQkJdGVtcGxhdGVfZGlyKTsKKwkJZ290byBjbG9zZV9mcmVlX3JldHVybjsKKwl9CisKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCBnZXRfZ2l0X2RpcigpKTsKKwlzdHJidWZfY29tcGxldGUoJnBhdGgsICcvJyk7CisJY29weV90ZW1wbGF0ZXNfMSgmcGF0aCwgJnRlbXBsYXRlX3BhdGgsIGRpcik7CitjbG9zZV9mcmVlX3JldHVybjoKKwljbG9zZWRpcihkaXIpOworZnJlZV9yZXR1cm46CisJZnJlZSh0b19mcmVlKTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJnRlbXBsYXRlX3BhdGgpOworfQorCitzdGF0aWMgaW50IGdpdF9pbml0X2RiX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2LCB2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcChrLCAiaW5pdC50ZW1wbGF0ZWRpciIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmaW5pdF9kYl90ZW1wbGF0ZV9kaXIsIGssIHYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJZiB0aGUgZ2l0X2RpciBpcyBub3QgZGlyZWN0bHkgaW5zaWRlIHRoZSB3b3JraW5nIHRyZWUsIHRoZW4gZ2l0IHdpbGwgbm90CisgKiBmaW5kIGl0IGJ5IGRlZmF1bHQsIGFuZCB3ZSBuZWVkIHRvIHNldCB0aGUgd29ya3RyZWUgZXhwbGljaXRseS4KKyAqLworc3RhdGljIGludCBuZWVkc193b3JrX3RyZWVfY29uZmlnKGNvbnN0IGNoYXIgKmdpdF9kaXIsIGNvbnN0IGNoYXIgKndvcmtfdHJlZSkKK3sKKwlpZiAoIXN0cmNtcCh3b3JrX3RyZWUsICIvIikgJiYgIXN0cmNtcChnaXRfZGlyLCAiLy5naXQiKSkKKwkJcmV0dXJuIDA7CisJaWYgKHNraXBfcHJlZml4KGdpdF9kaXIsIHdvcmtfdHJlZSwgJmdpdF9kaXIpICYmCisJICAgICFzdHJjbXAoZ2l0X2RpciwgIi8uZ2l0IikpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9kZWZhdWx0X2ZpbGVzKGNvbnN0IGNoYXIgKnRlbXBsYXRlX3BhdGgpCit7CisJc3RydWN0IHN0YXQgc3QxOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aDsKKwljaGFyIHJlcG9fdmVyc2lvbl9zdHJpbmdbMTBdOworCWNoYXIganVua1syXTsKKwlpbnQgcmVpbml0OworCWludCBmaWxlbW9kZTsKKworCS8qCisJICogQ3JlYXRlIC5naXQvcmVmcy97aGVhZHMsdGFnc30KKwkgKi8KKwlzYWZlX2NyZWF0ZV9kaXIoZ2l0X3BhdGhfYnVmKCZidWYsICJyZWZzIiksIDEpOworCXNhZmVfY3JlYXRlX2RpcihnaXRfcGF0aF9idWYoJmJ1ZiwgInJlZnMvaGVhZHMiKSwgMSk7CisJc2FmZV9jcmVhdGVfZGlyKGdpdF9wYXRoX2J1ZigmYnVmLCAicmVmcy90YWdzIiksIDEpOworCisJLyogSnVzdCBsb29rIGZvciBgaW5pdC50ZW1wbGF0ZWRpcmAgKi8KKwlnaXRfY29uZmlnKGdpdF9pbml0X2RiX2NvbmZpZywgTlVMTCk7CisKKwkvKiBGaXJzdCBjb3B5IHRoZSB0ZW1wbGF0ZXMgLS0gd2UgbWlnaHQgaGF2ZSB0aGUgZGVmYXVsdAorCSAqIGNvbmZpZyBmaWxlIHRoZXJlLCBpbiB3aGljaCBjYXNlIHdlIHdvdWxkIHdhbnQgdG8gcmVhZAorCSAqIGZyb20gaXQgYWZ0ZXIgaW5zdGFsbGluZy4KKwkgKi8KKwljb3B5X3RlbXBsYXRlcyh0ZW1wbGF0ZV9wYXRoKTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlpc19iYXJlX3JlcG9zaXRvcnlfY2ZnID0gaW5pdF9pc19iYXJlX3JlcG9zaXRvcnk7CisKKwkvKiByZWFkaW5nIGV4aXN0aW5nIGNvbmZpZyBtYXkgaGF2ZSBvdmVyd3JvdGUgaXQgKi8KKwlpZiAoaW5pdF9zaGFyZWRfcmVwb3NpdG9yeSAhPSAtMSkKKwkJc2hhcmVkX3JlcG9zaXRvcnkgPSBpbml0X3NoYXJlZF9yZXBvc2l0b3J5OworCisJLyoKKwkgKiBXZSB3b3VsZCBoYXZlIGNyZWF0ZWQgdGhlIGFib3ZlIHVuZGVyIHVzZXIncyB1bWFzayAtLSB1bmRlcgorCSAqIHNoYXJlZC1yZXBvc2l0b3J5IHNldHRpbmdzLCB3ZSB3b3VsZCBuZWVkIHRvIGZpeCB0aGVtIHVwLgorCSAqLworCWlmIChzaGFyZWRfcmVwb3NpdG9yeSkgeworCQlhZGp1c3Rfc2hhcmVkX3Blcm0oZ2V0X2dpdF9kaXIoKSk7CisJCWFkanVzdF9zaGFyZWRfcGVybShnaXRfcGF0aF9idWYoJmJ1ZiwgInJlZnMiKSk7CisJCWFkanVzdF9zaGFyZWRfcGVybShnaXRfcGF0aF9idWYoJmJ1ZiwgInJlZnMvaGVhZHMiKSk7CisJCWFkanVzdF9zaGFyZWRfcGVybShnaXRfcGF0aF9idWYoJmJ1ZiwgInJlZnMvdGFncyIpKTsKKwl9CisKKwkvKgorCSAqIENyZWF0ZSB0aGUgZGVmYXVsdCBzeW1saW5rIGZyb20gIi5naXQvSEVBRCIgdG8gdGhlICJtYXN0ZXIiCisJICogYnJhbmNoLCBpZiBpdCBkb2VzIG5vdCBleGlzdCB5ZXQuCisJICovCisJcGF0aCA9IGdpdF9wYXRoX2J1ZigmYnVmLCAiSEVBRCIpOworCXJlaW5pdCA9ICghYWNjZXNzKHBhdGgsIFJfT0spCisJCSAgfHwgcmVhZGxpbmsocGF0aCwganVuaywgc2l6ZW9mKGp1bmspLTEpICE9IC0xKTsKKwlpZiAoIXJlaW5pdCkgeworCQlpZiAoY3JlYXRlX3N5bXJlZigiSEVBRCIsICJyZWZzL2hlYWRzL21hc3RlciIsIE5VTEwpIDwgMCkKKwkJCWV4aXQoMSk7CisJfQorCisJLyogVGhpcyBmb3JjZXMgY3JlYXRpb24gb2YgbmV3IGNvbmZpZyBmaWxlICovCisJeHNucHJpbnRmKHJlcG9fdmVyc2lvbl9zdHJpbmcsIHNpemVvZihyZXBvX3ZlcnNpb25fc3RyaW5nKSwKKwkJICAiJWQiLCBHSVRfUkVQT19WRVJTSU9OKTsKKwlnaXRfY29uZmlnX3NldCgiY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiIsIHJlcG9fdmVyc2lvbl9zdHJpbmcpOworCisJLyogQ2hlY2sgZmlsZW1vZGUgdHJ1c3RhYmlsaXR5ICovCisJcGF0aCA9IGdpdF9wYXRoX2J1ZigmYnVmLCAiY29uZmlnIik7CisJZmlsZW1vZGUgPSBURVNUX0ZJTEVNT0RFOworCWlmIChURVNUX0ZJTEVNT0RFICYmICFsc3RhdChwYXRoLCAmc3QxKSkgeworCQlzdHJ1Y3Qgc3RhdCBzdDI7CisJCWZpbGVtb2RlID0gKCFjaG1vZChwYXRoLCBzdDEuc3RfbW9kZSBeIFNfSVhVU1IpICYmCisJCQkJIWxzdGF0KHBhdGgsICZzdDIpICYmCisJCQkJc3QxLnN0X21vZGUgIT0gc3QyLnN0X21vZGUgJiYKKwkJCQkhY2htb2QocGF0aCwgc3QxLnN0X21vZGUpKTsKKwkJaWYgKGZpbGVtb2RlICYmICFyZWluaXQgJiYgKHN0MS5zdF9tb2RlICYgU19JWFVTUikpCisJCQlmaWxlbW9kZSA9IDA7CisJfQorCWdpdF9jb25maWdfc2V0KCJjb3JlLmZpbGVtb2RlIiwgZmlsZW1vZGUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKworCWlmIChpc19iYXJlX3JlcG9zaXRvcnkoKSkKKwkJZ2l0X2NvbmZpZ19zZXQoImNvcmUuYmFyZSIsICJ0cnVlIik7CisJZWxzZSB7CisJCWNvbnN0IGNoYXIgKndvcmtfdHJlZSA9IGdldF9naXRfd29ya190cmVlKCk7CisJCWdpdF9jb25maWdfc2V0KCJjb3JlLmJhcmUiLCAiZmFsc2UiKTsKKwkJLyogYWxsb3cgdGVtcGxhdGUgY29uZmlnIGZpbGUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgKi8KKwkJaWYgKGxvZ19hbGxfcmVmX3VwZGF0ZXMgPT0gLTEpCisJCSAgICBnaXRfY29uZmlnX3NldCgiY29yZS5sb2dhbGxyZWZ1cGRhdGVzIiwgInRydWUiKTsKKwkJaWYgKG5lZWRzX3dvcmtfdHJlZV9jb25maWcoZ2V0X2dpdF9kaXIoKSwgd29ya190cmVlKSkKKwkJCWdpdF9jb25maWdfc2V0KCJjb3JlLndvcmt0cmVlIiwgd29ya190cmVlKTsKKwl9CisKKwlpZiAoIXJlaW5pdCkgeworCQkvKiBDaGVjayBpZiBzeW1saW5rIGlzIHN1cHBvcnRlZCBpbiB0aGUgd29yayB0cmVlICovCisJCXBhdGggPSBnaXRfcGF0aF9idWYoJmJ1ZiwgInRYWFhYWFgiKTsKKwkJaWYgKCFjbG9zZSh4bWtzdGVtcChwYXRoKSkgJiYKKwkJICAgICF1bmxpbmsocGF0aCkgJiYKKwkJICAgICFzeW1saW5rKCJ0ZXN0aW5nIiwgcGF0aCkgJiYKKwkJICAgICFsc3RhdChwYXRoLCAmc3QxKSAmJgorCQkgICAgU19JU0xOSyhzdDEuc3RfbW9kZSkpCisJCQl1bmxpbmsocGF0aCk7IC8qIGdvb2QgKi8KKwkJZWxzZQorCQkJZ2l0X2NvbmZpZ19zZXQoImNvcmUuc3ltbGlua3MiLCAiZmFsc2UiKTsKKworCQkvKiBDaGVjayBpZiB0aGUgZmlsZXN5c3RlbSBpcyBjYXNlLWluc2Vuc2l0aXZlICovCisJCXBhdGggPSBnaXRfcGF0aF9idWYoJmJ1ZiwgIkNvTmZJZyIpOworCQlpZiAoIWFjY2VzcyhwYXRoLCBGX09LKSkKKwkJCWdpdF9jb25maWdfc2V0KCJjb3JlLmlnbm9yZWNhc2UiLCAidHJ1ZSIpOworCQlwcm9iZV91dGY4X3BhdGhuYW1lX2NvbXBvc2l0aW9uKCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJlaW5pdDsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX29iamVjdF9kaXJlY3Rvcnkodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgYmFzZWxlbjsKKworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCWJhc2VsZW4gPSBwYXRoLmxlbjsKKworCXNhZmVfY3JlYXRlX2RpcihwYXRoLmJ1ZiwgMSk7CisKKwlzdHJidWZfc2V0bGVuKCZwYXRoLCBiYXNlbGVuKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCAiL3BhY2siKTsKKwlzYWZlX2NyZWF0ZV9kaXIocGF0aC5idWYsIDEpOworCisJc3RyYnVmX3NldGxlbigmcGF0aCwgYmFzZWxlbik7CisJc3RyYnVmX2FkZHN0cigmcGF0aCwgIi9pbmZvIik7CisJc2FmZV9jcmVhdGVfZGlyKHBhdGguYnVmLCAxKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKK30KKworaW50IHNldF9naXRfZGlyX2luaXQoY29uc3QgY2hhciAqZ2l0X2RpciwgY29uc3QgY2hhciAqcmVhbF9naXRfZGlyLAorCQkgICAgIGludCBleGlzdF9vaykKK3sKKwlpZiAocmVhbF9naXRfZGlyKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCWlmICghZXhpc3Rfb2sgJiYgIXN0YXQoZ2l0X2RpciwgJnN0KSkKKwkJCWRpZShfKCIlcyBhbHJlYWR5IGV4aXN0cyIpLCBnaXRfZGlyKTsKKworCQlpZiAoIWV4aXN0X29rICYmICFzdGF0KHJlYWxfZ2l0X2RpciwgJnN0KSkKKwkJCWRpZShfKCIlcyBhbHJlYWR5IGV4aXN0cyIpLCByZWFsX2dpdF9kaXIpOworCisJCS8qCisJCSAqIG1ha2Ugc3VyZSBzeW1saW5rcyBhcmUgcmVzb2x2ZWQgYmVjYXVzZSB3ZSdsbCBiZQorCQkgKiBtb3ZpbmcgdGhlIHRhcmdldCByZXBvIGxhdGVyIG9uIGluIHNlcGFyYXRlX2dpdF9kaXIoKQorCQkgKi8KKwkJZ2l0X2xpbmsgPSB4c3RyZHVwKHJlYWxfcGF0aChnaXRfZGlyKSk7CisJCXNldF9naXRfZGlyKHJlYWxfcGF0aChyZWFsX2dpdF9kaXIpKTsKKwl9CisJZWxzZSB7CisJCXNldF9naXRfZGlyKHJlYWxfcGF0aChnaXRfZGlyKSk7CisJCWdpdF9saW5rID0gTlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNlcGFyYXRlX2dpdF9kaXIoY29uc3QgY2hhciAqZ2l0X2RpcikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghc3RhdChnaXRfbGluaywgJnN0KSkgeworCQljb25zdCBjaGFyICpzcmM7CisKKwkJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCQlzcmMgPSByZWFkX2dpdGZpbGUoZ2l0X2xpbmspOworCQllbHNlIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJc3JjID0gZ2l0X2xpbms7CisJCWVsc2UKKwkJCWRpZShfKCJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIpLCAoaW50KXN0LnN0X21vZGUpOworCisJCWlmIChyZW5hbWUoc3JjLCBnaXRfZGlyKSkKKwkJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIpLCBzcmMsIGdpdF9kaXIpOworCX0KKworCXdyaXRlX2ZpbGUoZ2l0X2xpbmssICJnaXRkaXI6ICVzIiwgZ2l0X2Rpcik7Cit9CisKK2ludCBpbml0X2RiKGNvbnN0IGNoYXIgKnRlbXBsYXRlX2RpciwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCByZWluaXQ7CisJY29uc3QgY2hhciAqZ2l0X2RpciA9IGdldF9naXRfZGlyKCk7CisKKwlpZiAoZ2l0X2xpbmspCisJCXNlcGFyYXRlX2dpdF9kaXIoZ2l0X2Rpcik7CisKKwlzYWZlX2NyZWF0ZV9kaXIoZ2l0X2RpciwgMCk7CisKKwlpbml0X2lzX2JhcmVfcmVwb3NpdG9yeSA9IGlzX2JhcmVfcmVwb3NpdG9yeSgpOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSByZXBvc2l0b3J5IHZlcnNpb24gaXMgcmlnaHQuCisJICogTm90ZSB0aGF0IGEgbmV3bHkgY3JlYXRlZCByZXBvc2l0b3J5IGRvZXMgbm90IGhhdmUKKwkgKiBjb25maWcgZmlsZSwgc28gdGhpcyB3aWxsIG5vdCBmYWlsLiAgV2hhdCB3ZSBhcmUgY2F0Y2hpbmcKKwkgKiBpcyBhbiBhdHRlbXB0IHRvIHJlaW5pdGlhbGl6ZSBuZXcgcmVwb3NpdG9yeSB3aXRoIGFuIG9sZCB0b29sLgorCSAqLworCWNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0KCk7CisKKwlyZWluaXQgPSBjcmVhdGVfZGVmYXVsdF9maWxlcyh0ZW1wbGF0ZV9kaXIpOworCisJY3JlYXRlX29iamVjdF9kaXJlY3RvcnkoKTsKKworCWlmIChzaGFyZWRfcmVwb3NpdG9yeSkgeworCQljaGFyIGJ1ZlsxMF07CisJCS8qIFdlIGRvIG5vdCBzcGVsbCAiZ3JvdXAiIGFuZCBzdWNoLCBzbyB0aGF0CisJCSAqIHRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSByZWFkIGJ5IG9sZGVyIHZlcnNpb24KKwkJICogb2YgZ2l0LiBOb3RlLCB3ZSB1c2Ugb2N0YWwgbnVtYmVycyBmb3IgbmV3IHNoYXJlIG1vZGVzLAorCQkgKiBhbmQgY29tcGF0aWJpbGl0eSB2YWx1ZXMgZm9yIFBFUk1fR1JPVVAgYW5kCisJCSAqIFBFUk1fRVZFUllCT0RZLgorCQkgKi8KKwkJaWYgKHNoYXJlZF9yZXBvc2l0b3J5IDwgMCkKKwkJCS8qIGZvcmNlIHRvIHRoZSBtb2RlIHZhbHVlICovCisJCQl4c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjAlbyIsIC1zaGFyZWRfcmVwb3NpdG9yeSk7CisJCWVsc2UgaWYgKHNoYXJlZF9yZXBvc2l0b3J5ID09IFBFUk1fR1JPVVApCisJCQl4c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgT0xEX1BFUk1fR1JPVVApOworCQllbHNlIGlmIChzaGFyZWRfcmVwb3NpdG9yeSA9PSBQRVJNX0VWRVJZQk9EWSkKKwkJCXhzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCBPTERfUEVSTV9FVkVSWUJPRFkpOworCQllbHNlCisJCQlkaWUoIkJVRzogaW52YWxpZCB2YWx1ZSBmb3Igc2hhcmVkX3JlcG9zaXRvcnkiKTsKKwkJZ2l0X2NvbmZpZ19zZXQoImNvcmUuc2hhcmVkcmVwb3NpdG9yeSIsIGJ1Zik7CisJCWdpdF9jb25maWdfc2V0KCJyZWNlaXZlLmRlbnlOb25GYXN0Zm9yd2FyZHMiLCAidHJ1ZSIpOworCX0KKworCWlmICghKGZsYWdzICYgSU5JVF9EQl9RVUlFVCkpIHsKKwkJaW50IGxlbiA9IHN0cmxlbihnaXRfZGlyKTsKKworCQkvKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCisJCSAgIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorCQkgICAiIiwgYW5kIHRoZSBsYXN0ICclcyVzJyBpcyB0aGUgdmVyYmF0aW0gZGlyZWN0b3J5IG5hbWUuICovCisJCXByaW50ZihfKCIlcyVzIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIpLAorCQkgICAgICAgcmVpbml0ID8gXygiUmVpbml0aWFsaXplZCBleGlzdGluZyIpIDogXygiSW5pdGlhbGl6ZWQgZW1wdHkiKSwKKwkJICAgICAgIHNoYXJlZF9yZXBvc2l0b3J5ID8gXygiIHNoYXJlZCIpIDogIiIsCisJCSAgICAgICBnaXRfZGlyLCBsZW4gJiYgZ2l0X2RpcltsZW4tMV0gIT0gJy8nID8gIi8iIDogIiIpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGd1ZXNzX3JlcG9zaXRvcnlfdHlwZShjb25zdCBjaGFyICpnaXRfZGlyKQoreworCWNvbnN0IGNoYXIgKnNsYXNoOworCWNoYXIgKmN3ZDsKKwlpbnQgY3dkX2lzX2dpdF9kaXI7CisKKwkvKgorCSAqICJHSVRfRElSPS4gZ2l0IGluaXQiIGlzIGFsd2F5cyBiYXJlLgorCSAqICJHSVRfRElSPWBwd2RgIGdpdCBpbml0IiB0b28uCisJICovCisJaWYgKCFzdHJjbXAoIi4iLCBnaXRfZGlyKSkKKwkJcmV0dXJuIDE7CisJY3dkID0geGdldGN3ZCgpOworCWN3ZF9pc19naXRfZGlyID0gIXN0cmNtcChnaXRfZGlyLCBjd2QpOworCWZyZWUoY3dkKTsKKwlpZiAoY3dkX2lzX2dpdF9kaXIpCisJCXJldHVybiAxOworCS8qCisJICogIkdJVF9ESVI9LmdpdCBvciBHSVRfRElSPXNvbWV0aGluZy8uZ2l0IGlzIHVzdWFsbHkgbm90LgorCSAqLworCWlmICghc3RyY21wKGdpdF9kaXIsICIuZ2l0IikpCisJCXJldHVybiAwOworCXNsYXNoID0gc3RycmNocihnaXRfZGlyLCAnLycpOworCWlmIChzbGFzaCAmJiAhc3RyY21wKHNsYXNoLCAiLy5naXQiKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE90aGVyd2lzZSBpdCBpcyBvZnRlbiBiYXJlLiAgQXQgdGhpcyBwb2ludAorCSAqIHdlIGFyZSBqdXN0IGd1ZXNzaW5nLgorCSAqLworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNoYXJlZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCSooKGludCAqKSBvcHQtPnZhbHVlKSA9IChhcmcpID8gZ2l0X2NvbmZpZ19wZXJtKCJhcmciLCBhcmcpIDogUEVSTV9HUk9VUDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGluaXRfZGJfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLXNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iKSwKKwlOVUxMCit9OworCisvKgorICogSWYgeW91IHdhbnQgdG8sIHlvdSBjYW4gc2hhcmUgdGhlIERCIGFyZWEgd2l0aCBhbnkgbnVtYmVyIG9mIGJyYW5jaGVzLgorICogVGhhdCBoYXMgYWR2YW50YWdlczogeW91IGNhbiBzYXZlIHNwYWNlIGJ5IHNoYXJpbmcgYWxsIHRoZSBTSEExIG9iamVjdHMuCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgbWlnaHQganVzdCBtYWtlIGxvb2t1cCBzbG93ZXIgYW5kIG1lc3NpZXIuIFlvdQorICogYmUgdGhlIGp1ZGdlLiAgVGhlIGRlZmF1bHQgY2FzZSBpcyB0byBoYXZlIG9uZSBEQiBwZXIgbWFuYWdlZCBkaXJlY3RvcnkuCisgKi8KK2ludCBjbWRfaW5pdF9kYihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpnaXRfZGlyOworCWNvbnN0IGNoYXIgKnJlYWxfZ2l0X2RpciA9IE5VTEw7CisJY29uc3QgY2hhciAqd29ya190cmVlOworCWNvbnN0IGNoYXIgKnRlbXBsYXRlX2RpciA9IE5VTEw7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIGluaXRfZGJfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJ0ZW1wbGF0ZSIsICZ0ZW1wbGF0ZV9kaXIsIE5fKCJ0ZW1wbGF0ZS1kaXJlY3RvcnkiKSwKKwkJCQlOXygiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgImJhcmUiLCAmaXNfYmFyZV9yZXBvc2l0b3J5X2NmZywKKwkJCQlOXygiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IiksIDEpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInNoYXJlZCIsICZpbml0X3NoYXJlZF9yZXBvc2l0b3J5LAorCQkJTl8oInBlcm1pc3Npb25zIiksCisJCQlOXygic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIiksCisJCQlQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBzaGFyZWRfY2FsbGJhY2ssIDB9LAorCQlPUFRfQklUKCdxJywgInF1aWV0IiwgJmZsYWdzLCBOXygiYmUgcXVpZXQiKSwgSU5JVF9EQl9RVUlFVCksCisJCU9QVF9TVFJJTkcoMCwgInNlcGFyYXRlLWdpdC1kaXIiLCAmcmVhbF9naXRfZGlyLCBOXygiZ2l0ZGlyIiksCisJCQkgICBOXygic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgaW5pdF9kYl9vcHRpb25zLCBpbml0X2RiX3VzYWdlLCAwKTsKKworCWlmIChyZWFsX2dpdF9kaXIgJiYgIWlzX2Fic29sdXRlX3BhdGgocmVhbF9naXRfZGlyKSkKKwkJcmVhbF9naXRfZGlyID0geHN0cmR1cChyZWFsX3BhdGgocmVhbF9naXRfZGlyKSk7CisKKwlpZiAoYXJnYyA9PSAxKSB7CisJCWludCBta2Rpcl90cmllZCA9IDA7CisJcmV0cnk6CisJCWlmIChjaGRpcihhcmd2WzBdKSA8IDApIHsKKwkJCWlmICghbWtkaXJfdHJpZWQpIHsKKwkJCQlpbnQgc2F2ZWQ7CisJCQkJLyoKKwkJCQkgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmVuJ3QgcmVhZCBhbnkgY29uZmlndXJhdGlvbiwKKwkJCQkgKiBhbmQgd2Uga25vdyBzaGFyZWRfcmVwb3NpdG9yeSBzaG91bGQgYWx3YXlzIGJlIDA7CisJCQkJICogYnV0IGp1c3QgaW4gY2FzZSB3ZSBwbGF5IHNhZmUuCisJCQkJICovCisJCQkJc2F2ZWQgPSBzaGFyZWRfcmVwb3NpdG9yeTsKKwkJCQlzaGFyZWRfcmVwb3NpdG9yeSA9IDA7CisJCQkJc3dpdGNoIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KGFyZ3ZbMF0pKSB7CisJCQkJY2FzZSBTQ0xEX09LOgorCQkJCWNhc2UgU0NMRF9QRVJNUzoKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTQ0xEX0VYSVNUUzoKKwkJCQkJZXJybm8gPSBFRVhJU1Q7CisJCQkJCS8qIGZhbGx0aHJ1ICovCisJCQkJZGVmYXVsdDoKKwkJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBta2RpciAlcyIpLCBhcmd2WzBdKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXNoYXJlZF9yZXBvc2l0b3J5ID0gc2F2ZWQ7CisJCQkJaWYgKG1rZGlyKGFyZ3ZbMF0sIDA3NzcpIDwgMCkKKwkJCQkJZGllX2Vycm5vKF8oImNhbm5vdCBta2RpciAlcyIpLCBhcmd2WzBdKTsKKwkJCQlta2Rpcl90cmllZCA9IDE7CisJCQkJZ290byByZXRyeTsKKwkJCX0KKwkJCWRpZV9lcnJubyhfKCJjYW5ub3QgY2hkaXIgdG8gJXMiKSwgYXJndlswXSk7CisJCX0KKwl9IGVsc2UgaWYgKDAgPCBhcmdjKSB7CisJCXVzYWdlKGluaXRfZGJfdXNhZ2VbMF0pOworCX0KKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9PSAxKSB7CisJCWNoYXIgKmN3ZCA9IHhnZXRjd2QoKTsKKwkJc2V0ZW52KEdJVF9ESVJfRU5WSVJPTk1FTlQsIGN3ZCwgYXJnYyA+IDApOworCQlmcmVlKGN3ZCk7CisJfQorCisJaWYgKGluaXRfc2hhcmVkX3JlcG9zaXRvcnkgIT0gLTEpCisJCXNoYXJlZF9yZXBvc2l0b3J5ID0gaW5pdF9zaGFyZWRfcmVwb3NpdG9yeTsKKworCS8qCisJICogR0lUX1dPUktfVFJFRSBtYWtlcyBzZW5zZSBvbmx5IGluIGNvbmp1bmN0aW9uIHdpdGggR0lUX0RJUgorCSAqIHdpdGhvdXQgLS1iYXJlLiAgQ2F0Y2ggdGhlIGVycm9yIGVhcmx5LgorCSAqLworCWdpdF9kaXIgPSBnZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisJd29ya190cmVlID0gZ2V0ZW52KEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQpOworCWlmICgoIWdpdF9kaXIgfHwgaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9PSAxKSAmJiB3b3JrX3RyZWUpCisJCWRpZShfKCIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgIgorCQkJICAic3BlY2lmeWluZyAlcyAob3IgLS1naXQtZGlyPTxkaXJlY3Rvcnk+KSIpLAorCQkgICAgR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCwKKwkJICAgIEdJVF9ESVJfRU5WSVJPTk1FTlQpOworCisJLyoKKwkgKiBTZXQgdXAgdGhlIGRlZmF1bHQgLmdpdCBkaXJlY3RvcnkgY29udGVudHMKKwkgKi8KKwlpZiAoIWdpdF9kaXIpCisJCWdpdF9kaXIgPSBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQ7CisKKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA8IDApCisJCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSBndWVzc19yZXBvc2l0b3J5X3R5cGUoZ2l0X2Rpcik7CisKKwlpZiAoIWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcpIHsKKwkJY29uc3QgY2hhciAqZ2l0X2Rpcl9wYXJlbnQgPSBzdHJyY2hyKGdpdF9kaXIsICcvJyk7CisJCWlmIChnaXRfZGlyX3BhcmVudCkgeworCQkJY2hhciAqcmVsID0geHN0cm5kdXAoZ2l0X2RpciwgZ2l0X2Rpcl9wYXJlbnQgLSBnaXRfZGlyKTsKKwkJCWdpdF93b3JrX3RyZWVfY2ZnID0geHN0cmR1cChyZWFsX3BhdGgocmVsKSk7CisJCQlmcmVlKHJlbCk7CisJCX0KKwkJaWYgKCFnaXRfd29ya190cmVlX2NmZykKKwkJCWdpdF93b3JrX3RyZWVfY2ZnID0geGdldGN3ZCgpOworCQlpZiAod29ya190cmVlKQorCQkJc2V0X2dpdF93b3JrX3RyZWUod29ya190cmVlKTsKKwkJZWxzZQorCQkJc2V0X2dpdF93b3JrX3RyZWUoZ2l0X3dvcmtfdHJlZV9jZmcpOworCQlpZiAoYWNjZXNzKGdldF9naXRfd29ya190cmVlKCksIFhfT0spKQorCQkJZGllX2Vycm5vIChfKCJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIiksCisJCQkJICAgZ2V0X2dpdF93b3JrX3RyZWUoKSk7CisJfQorCWVsc2UgeworCQlpZiAod29ya190cmVlKQorCQkJc2V0X2dpdF93b3JrX3RyZWUod29ya190cmVlKTsKKwl9CisKKwlzZXRfZ2l0X2Rpcl9pbml0KGdpdF9kaXIsIHJlYWxfZ2l0X2RpciwgMSk7CisKKwlyZXR1cm4gaW5pdF9kYih0ZW1wbGF0ZV9kaXIsIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmMgYi9idWlsdGluL2ludGVycHJldC10cmFpbGVycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ODM4ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2ludGVycHJldC10cmFpbGVycy5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMywgMjAxNCBDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz4KKyAqCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInRyYWlsZXIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfaW50ZXJwcmV0X3RyYWlsZXJzX3VzYWdlW10gPSB7CisJTl8oImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gWzxmaWxlPi4uLl0iKSwKKwlOVUxMCit9OworCitpbnQgY21kX2ludGVycHJldF90cmFpbGVycyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgdHJpbV9lbXB0eSA9IDA7CisJc3RydWN0IHN0cmluZ19saXN0IHRyYWlsZXJzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woMCwgInRyaW0tZW1wdHkiLCAmdHJpbV9lbXB0eSwgTl8oInRyaW0gZW1wdHkgdHJhaWxlcnMiKSksCisJCU9QVF9TVFJJTkdfTElTVCgwLCAidHJhaWxlciIsICZ0cmFpbGVycywgTl8oInRyYWlsZXIiKSwKKwkJCQlOXygidHJhaWxlcihzKSB0byBhZGQiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9pbnRlcnByZXRfdHJhaWxlcnNfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCQlwcm9jZXNzX3RyYWlsZXJzKGFyZ3ZbaV0sIHRyaW1fZW1wdHksICZ0cmFpbGVycyk7CisJfSBlbHNlCisJCXByb2Nlc3NfdHJhaWxlcnMoTlVMTCwgdHJpbV9lbXB0eSwgJnRyYWlsZXJzKTsKKworCXN0cmluZ19saXN0X2NsZWFyKCZ0cmFpbGVycywgMCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbG9nLmMgYi9idWlsdGluL2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTY3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL2xvZy5jCkBAIC0wLDAgKzEsMTcwNiBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBsb2ciIGFuZCByZWxhdGVkIGNvbW1hbmRzIChzaG93LCB3aGF0Y2hhbmdlZCkKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDYgTGludXMgVG9ydmFsZHMKKyAqCQkgMjAwNiBKdW5pbyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImNvbG9yLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicmVmbG9nLXdhbGsuaCIKKyNpbmNsdWRlICJwYXRjaC1pZHMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNob3J0bG9nLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAibWFpbG1hcC5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKworLyogU2V0IGEgZGVmYXVsdCBkYXRlLXRpbWUgZm9ybWF0IGZvciBnaXQgbG9nICgibG9nLmRhdGUiIGNvbmZpZyB2YXJpYWJsZSkgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkZWZhdWx0X2RhdGVfbW9kZSA9IE5VTEw7CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9hYmJyZXZfY29tbWl0Oworc3RhdGljIGludCBkZWZhdWx0X3Nob3dfcm9vdCA9IDE7CitzdGF0aWMgaW50IGRlZmF1bHRfZm9sbG93Oworc3RhdGljIGludCBkZWNvcmF0aW9uX3N0eWxlOworc3RhdGljIGludCBkZWNvcmF0aW9uX2dpdmVuOworc3RhdGljIGludCB1c2VfbWFpbG1hcF9jb25maWc7CitzdGF0aWMgY29uc3QgY2hhciAqZm10X3BhdGNoX3N1YmplY3RfcHJlZml4ID0gIlBBVENIIjsKK3N0YXRpYyBjb25zdCBjaGFyICpmbXRfcHJldHR5OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fbG9nX3VzYWdlW10gPSB7CisJTl8oImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iKSwKKwlOXygiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamVjdD4uLi4iKSwKKwlOVUxMCit9OworCitzdHJ1Y3QgbGluZV9vcHRfY2FsbGJhY2tfZGF0YSB7CisJc3RydWN0IHJldl9pbmZvICpyZXY7CisJY29uc3QgY2hhciAqcHJlZml4OworCXN0cnVjdCBzdHJpbmdfbGlzdCBhcmdzOworfTsKKworc3RhdGljIGludCBwYXJzZV9kZWNvcmF0aW9uX3N0eWxlKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3dpdGNoIChnaXRfY29uZmlnX21heWJlX2Jvb2wodmFyLCB2YWx1ZSkpIHsKKwljYXNlIDE6CisJCXJldHVybiBERUNPUkFURV9TSE9SVF9SRUZTOworCWNhc2UgMDoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWlmICghc3RyY21wKHZhbHVlLCAiZnVsbCIpKQorCQlyZXR1cm4gREVDT1JBVEVfRlVMTF9SRUZTOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJzaG9ydCIpKQorCQlyZXR1cm4gREVDT1JBVEVfU0hPUlRfUkVGUzsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiYXV0byIpKQorCQlyZXR1cm4gKGlzYXR0eSgxKSB8fCBwYWdlcl9pbl91c2UoKSkgPyBERUNPUkFURV9TSE9SVF9SRUZTIDogMDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZGVjb3JhdGVfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCWRlY29yYXRpb25fc3R5bGUgPSAwOworCWVsc2UgaWYgKGFyZykKKwkJZGVjb3JhdGlvbl9zdHlsZSA9IHBhcnNlX2RlY29yYXRpb25fc3R5bGUoImNvbW1hbmQgbGluZSIsIGFyZyk7CisJZWxzZQorCQlkZWNvcmF0aW9uX3N0eWxlID0gREVDT1JBVEVfU0hPUlRfUkVGUzsKKworCWlmIChkZWNvcmF0aW9uX3N0eWxlIDwgMCkKKwkJZGllKF8oImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIiksIGFyZyk7CisKKwlkZWNvcmF0aW9uX2dpdmVuID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ19saW5lX3JhbmdlX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbiwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGxpbmVfb3B0X2NhbGxiYWNrX2RhdGEgKmRhdGEgPSBvcHRpb24tPnZhbHVlOworCisJaWYgKCFhcmcpCisJCXJldHVybiAtMTsKKworCWRhdGEtPnJldi0+bGluZV9sZXZlbF90cmF2ZXJzZSA9IDE7CisJc3RyaW5nX2xpc3RfYXBwZW5kKCZkYXRhLT5hcmdzLCBhcmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNtZF9sb2dfaW5pdF9kZWZhdWx0cyhzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlpZiAoZm10X3ByZXR0eSkKKwkJZ2V0X2NvbW1pdF9mb3JtYXQoZm10X3ByZXR0eSwgcmV2KTsKKwlpZiAoZGVmYXVsdF9mb2xsb3cpCisJCURJRkZfT1BUX1NFVCgmcmV2LT5kaWZmb3B0LCBERUZBVUxUX0ZPTExPV19SRU5BTUVTKTsKKwlyZXYtPnZlcmJvc2VfaGVhZGVyID0gMTsKKwlESUZGX09QVF9TRVQoJnJldi0+ZGlmZm9wdCwgUkVDVVJTSVZFKTsKKwlyZXYtPmRpZmZvcHQuc3RhdF93aWR0aCA9IC0xOyAvKiB1c2UgZnVsbCB0ZXJtaW5hbCB3aWR0aCAqLworCXJldi0+ZGlmZm9wdC5zdGF0X2dyYXBoX3dpZHRoID0gLTE7IC8qIHJlc3BlY3Qgc3RhdEdyYXBoV2lkdGggY29uZmlnICovCisJcmV2LT5hYmJyZXZfY29tbWl0ID0gZGVmYXVsdF9hYmJyZXZfY29tbWl0OworCXJldi0+c2hvd19yb290X2RpZmYgPSBkZWZhdWx0X3Nob3dfcm9vdDsKKwlyZXYtPnN1YmplY3RfcHJlZml4ID0gZm10X3BhdGNoX3N1YmplY3RfcHJlZml4OworCURJRkZfT1BUX1NFVCgmcmV2LT5kaWZmb3B0LCBBTExPV19URVhUQ09OVik7CisKKwlpZiAoZGVmYXVsdF9kYXRlX21vZGUpCisJCXBhcnNlX2RhdGVfZm9ybWF0KGRlZmF1bHRfZGF0ZV9tb2RlLCAmcmV2LT5kYXRlX21vZGUpOworCXJldi0+ZGlmZm9wdC50b3VjaGVkX2ZsYWdzID0gMDsKK30KKworc3RhdGljIHZvaWQgY21kX2xvZ19pbml0X2ZpbmlzaChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqb3B0KQoreworCXN0cnVjdCB1c2VyZm9ybWF0X3dhbnQgdzsKKwlpbnQgcXVpZXQgPSAwLCBzb3VyY2UgPSAwLCBtYWlsbWFwID0gMDsKKwlzdGF0aWMgc3RydWN0IGxpbmVfb3B0X2NhbGxiYWNrX2RhdGEgbGluZV9jYiA9IHtOVUxMLCBOVUxMLCBTVFJJTkdfTElTVF9JTklUX0RVUH07CisKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fbG9nX29wdGlvbnNbXSA9IHsKKwkJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJzdXBwcmVzcyBkaWZmIG91dHB1dCIpKSwKKwkJT1BUX0JPT0woMCwgInNvdXJjZSIsICZzb3VyY2UsIE5fKCJzaG93IHNvdXJjZSIpKSwKKwkJT1BUX0JPT0woMCwgInVzZS1tYWlsbWFwIiwgJm1haWxtYXAsIE5fKCJVc2UgbWFpbCBtYXAgZmlsZSIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJkZWNvcmF0ZSIsIE5VTEwsIE5VTEwsIE5fKCJkZWNvcmF0ZSBvcHRpb25zIiksCisJCSAgUEFSU0VfT1BUX09QVEFSRywgZGVjb3JhdGVfY2FsbGJhY2t9LAorCQlPUFRfQ0FMTEJBQ0soJ0wnLCBOVUxMLCAmbGluZV9jYiwgIm4sbTpmaWxlIiwKKwkJCSAgICAgTl8oIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIiksCisJCQkgICAgIGxvZ19saW5lX3JhbmdlX2NhbGxiYWNrKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWxpbmVfY2IucmV2ID0gcmV2OworCWxpbmVfY2IucHJlZml4ID0gcHJlZml4OworCisJbWFpbG1hcCA9IHVzZV9tYWlsbWFwX2NvbmZpZzsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsCisJCQkgICAgIGJ1aWx0aW5fbG9nX29wdGlvbnMsIGJ1aWx0aW5fbG9nX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IFBBUlNFX09QVF9LRUVQX1VOS05PV04gfAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisKKwlpZiAocXVpZXQpCisJCXJldi0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsIHJldiwgb3B0KTsKKworCS8qIEFueSBhcmd1bWVudHMgYXQgdGhpcyBwb2ludCBhcmUgbm90IHJlY29nbml6ZWQgKi8KKwlpZiAoYXJnYyA+IDEpCisJCWRpZShfKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiksIGFyZ3ZbMV0pOworCisJbWVtc2V0KCZ3LCAwLCBzaXplb2YodykpOworCXVzZXJmb3JtYXRfZmluZF9yZXF1aXJlbWVudHMoTlVMTCwgJncpOworCisJaWYgKCFyZXYtPnNob3dfbm90ZXNfZ2l2ZW4gJiYgKCFyZXYtPnByZXR0eV9naXZlbiB8fCB3Lm5vdGVzKSkKKwkJcmV2LT5zaG93X25vdGVzID0gMTsKKwlpZiAocmV2LT5zaG93X25vdGVzKQorCQlpbml0X2Rpc3BsYXlfbm90ZXMoJnJldi0+bm90ZXNfb3B0KTsKKworCWlmIChyZXYtPmRpZmZvcHQucGlja2F4ZSB8fCByZXYtPmRpZmZvcHQuZmlsdGVyIHx8CisJICAgIERJRkZfT1BUX1RTVCgmcmV2LT5kaWZmb3B0LCBGT0xMT1dfUkVOQU1FUykpCisJCXJldi0+YWx3YXlzX3Nob3dfaGVhZGVyID0gMDsKKworCWlmIChzb3VyY2UpCisJCXJldi0+c2hvd19zb3VyY2UgPSAxOworCisJaWYgKG1haWxtYXApIHsKKwkJcmV2LT5tYWlsbWFwID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0KSk7CisJCXJlYWRfbWFpbG1hcChyZXYtPm1haWxtYXAsIE5VTEwpOworCX0KKworCWlmIChyZXYtPnByZXR0eV9naXZlbiAmJiByZXYtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfUkFXKSB7CisJCS8qCisJCSAqICJsb2cgLS1wcmV0dHk9cmF3IiBpcyBzcGVjaWFsOyBpZ25vcmUgVUkgb3JpZW50ZWQKKwkJICogY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgc3VjaCBhcyBkZWNvcmF0aW9uLgorCQkgKi8KKwkJaWYgKCFkZWNvcmF0aW9uX2dpdmVuKQorCQkJZGVjb3JhdGlvbl9zdHlsZSA9IDA7CisJCWlmICghcmV2LT5hYmJyZXZfY29tbWl0X2dpdmVuKQorCQkJcmV2LT5hYmJyZXZfY29tbWl0ID0gMDsKKwl9CisKKwlpZiAoZGVjb3JhdGlvbl9zdHlsZSkgeworCQlyZXYtPnNob3dfZGVjb3JhdGlvbnMgPSAxOworCQlsb2FkX3JlZl9kZWNvcmF0aW9ucyhkZWNvcmF0aW9uX3N0eWxlKTsKKwl9CisKKwlpZiAocmV2LT5saW5lX2xldmVsX3RyYXZlcnNlKQorCQlsaW5lX2xvZ19pbml0KHJldiwgbGluZV9jYi5wcmVmaXgsICZsaW5lX2NiLmFyZ3MpOworCisJc2V0dXBfcGFnZXIoKTsKK30KKworc3RhdGljIHZvaWQgY21kX2xvZ19pbml0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJIHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0ICpvcHQpCit7CisJY21kX2xvZ19pbml0X2RlZmF1bHRzKHJldik7CisJY21kX2xvZ19pbml0X2ZpbmlzaChhcmdjLCBhcmd2LCBwcmVmaXgsIHJldiwgb3B0KTsKK30KKworLyoKKyAqIFRoaXMgZ2l2ZXMgYSByb3VnaCBlc3RpbWF0ZSBmb3IgaG93IG1hbnkgY29tbWl0cyB3ZQorICogd2lsbCBwcmludCBvdXQgaW4gdGhlIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgZXN0aW1hdGVfY29tbWl0X2NvdW50KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJaW50IG4gPSAwOworCisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJdW5zaWduZWQgaW50IGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlpZiAoIShmbGFncyAmIChUUkVFU0FNRSB8IFVOSU5URVJFU1RJTkcpKSkKKwkJCW4rKzsKKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZWFybHlfaGVhZGVyKHN0cnVjdCByZXZfaW5mbyAqcmV2LCBjb25zdCBjaGFyICpzdGFnZSwgaW50IG5yKQoreworCWlmIChyZXYtPnNob3duX29uZSkgeworCQlyZXYtPnNob3duX29uZSA9IDA7CisJCWlmIChyZXYtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSkKKwkJCXB1dGNoYXIocmV2LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24pOworCX0KKwlwcmludGYoXygiRmluYWwgb3V0cHV0OiAlZCAlc1xuIiksIG5yLCBzdGFnZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXRpbWVydmFsIGVhcmx5X291dHB1dF90aW1lcjsKKworc3RhdGljIHZvaWQgbG9nX3Nob3dfZWFybHkoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJaW50IGkgPSByZXZzLT5lYXJseV9vdXRwdXQ7CisJaW50IHNob3dfaGVhZGVyID0gMTsKKworCXNvcnRfaW5fdG9wb2xvZ2ljYWxfb3JkZXIoJmxpc3QsIHJldnMtPnNvcnRfb3JkZXIpOworCXdoaWxlIChsaXN0ICYmIGkpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJc3dpdGNoIChzaW1wbGlmeV9jb21taXQocmV2cywgY29tbWl0KSkgeworCQljYXNlIGNvbW1pdF9zaG93OgorCQkJaWYgKHNob3dfaGVhZGVyKSB7CisJCQkJaW50IG4gPSBlc3RpbWF0ZV9jb21taXRfY291bnQocmV2cywgbGlzdCk7CisJCQkJc2hvd19lYXJseV9oZWFkZXIocmV2cywgImluY29tcGxldGUiLCBuKTsKKwkJCQlzaG93X2hlYWRlciA9IDA7CisJCQl9CisJCQlsb2dfdHJlZV9jb21taXQocmV2cywgY29tbWl0KTsKKwkJCWktLTsKKwkJCWJyZWFrOworCQljYXNlIGNvbW1pdF9pZ25vcmU6CisJCQlicmVhazsKKwkJY2FzZSBjb21taXRfZXJyb3I6CisJCQlyZXR1cm47CisJCX0KKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCisJLyogRGlkIHdlIGFscmVhZHkgZ2V0IGVub3VnaCBjb21taXRzIGZvciB0aGUgZWFybHkgb3V0cHV0PyAqLworCWlmICghaSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiAuLmlmIG5vLCB0aGVuIHJlcGVhdCBpdCB0d2ljZSBhIHNlY29uZCB1bnRpbCB3ZQorCSAqIGRvLgorCSAqCisJICogTk9URSEgV2UgZG9uJ3QgdXNlICJpdF9pbnRlcnZhbCIsIGJlY2F1c2UgaWYgdGhlCisJICogcmVhZGVyIGlzbid0IGxpc3RlbmluZywgd2Ugd2FudCBvdXIgb3V0cHV0IHRvIGJlCisJICogdGhyb3R0bGVkIGJ5IHRoZSB3cml0aW5nLCBhbmQgbm90IGhhdmUgdGhlIHRpbWVyCisJICogdHJpZ2dlciBldmVyeSBzZWNvbmQgZXZlbiBpZiB3ZSdyZSBibG9ja2VkIG9uIGEKKwkgKiByZWFkZXIhCisJICovCisJZWFybHlfb3V0cHV0X3RpbWVyLml0X3ZhbHVlLnR2X3NlYyA9IDA7CisJZWFybHlfb3V0cHV0X3RpbWVyLml0X3ZhbHVlLnR2X3VzZWMgPSA1MDAwMDA7CisJc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmZWFybHlfb3V0cHV0X3RpbWVyLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZWFybHlfb3V0cHV0KGludCBzaWduYWwpCit7CisJc2hvd19lYXJseV9vdXRwdXQgPSBsb2dfc2hvd19lYXJseTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZWFybHlfb3V0cHV0KHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBzaWdhY3Rpb24gc2E7CisKKwkvKgorCSAqIFNldCB1cCB0aGUgc2lnbmFsIGhhbmRsZXIsIG1pbmltYWxseSBpbnRydXNpdmVseToKKwkgKiB3ZSBvbmx5IHNldCBhIHNpbmdsZSB2b2xhdGlsZSBpbnRlZ2VyIHdvcmQgKG5vdAorCSAqIHVzaW5nIHNpZ2F0b21pY190IC0gdHJ5aW5nIHRvIGF2b2lkIHVubmVjZXNzYXJ5CisJICogc3lzdGVtIGRlcGVuZGVuY2llcyBhbmQgaGVhZGVycyksIGFuZCB1c2luZworCSAqIFNBX1JFU1RBUlQuCisJICovCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisJc2Euc2FfaGFuZGxlciA9IGVhcmx5X291dHB1dDsKKwlzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CisJc2Euc2FfZmxhZ3MgPSBTQV9SRVNUQVJUOworCXNpZ2FjdGlvbihTSUdBTFJNLCAmc2EsIE5VTEwpOworCisJLyoKKwkgKiBJZiB3ZSBjYW4gZ2V0IHRoZSB3aG9sZSBvdXRwdXQgaW4gbGVzcyB0aGFuIGEKKwkgKiB0ZW50aCBvZiBhIHNlY29uZCwgZG9uJ3QgZXZlbiBib3RoZXIgZG9pbmcgdGhlCisJICogZWFybHktb3V0cHV0IHRoaW5nLi4KKwkgKgorCSAqIFRoaXMgaXMgYSBvbmUtdGltZS1vbmx5IHRyaWdnZXIuCisJICovCisJZWFybHlfb3V0cHV0X3RpbWVyLml0X3ZhbHVlLnR2X3NlYyA9IDA7CisJZWFybHlfb3V0cHV0X3RpbWVyLml0X3ZhbHVlLnR2X3VzZWMgPSAxMDAwMDA7CisJc2V0aXRpbWVyKElUSU1FUl9SRUFMLCAmZWFybHlfb3V0cHV0X3RpbWVyLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZmluaXNoX2Vhcmx5X291dHB1dChzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlpbnQgbiA9IGVzdGltYXRlX2NvbW1pdF9jb3VudChyZXYsIHJldi0+Y29tbWl0cyk7CisJc2lnbmFsKFNJR0FMUk0sIFNJR19JR04pOworCXNob3dfZWFybHlfaGVhZGVyKHJldiwgImRvbmUiLCBuKTsKK30KKworc3RhdGljIGludCBjbWRfbG9nX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWludCBzYXZlZF9ucmwgPSAwOworCWludCBzYXZlZF9kY2N0YyA9IDA7CisKKwlpZiAocmV2LT5lYXJseV9vdXRwdXQpCisJCXNldHVwX2Vhcmx5X291dHB1dChyZXYpOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhyZXYpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisKKwlpZiAocmV2LT5lYXJseV9vdXRwdXQpCisJCWZpbmlzaF9lYXJseV9vdXRwdXQocmV2KTsKKworCS8qCisJICogRm9yIC0tY2hlY2sgYW5kIC0tZXhpdC1jb2RlLCB0aGUgZXhpdCBjb2RlIGlzIGJhc2VkIG9uIENIRUNLX0ZBSUxFRAorCSAqIGFuZCBIQVNfQ0hBTkdFUyBiZWluZyBhY2N1bXVsYXRlZCBpbiByZXYtPmRpZmZvcHQsIHNvIGJlIGNhcmVmdWwgdG8KKwkgKiByZXRhaW4gdGhhdCBzdGF0ZSBpbmZvcm1hdGlvbiBpZiByZXBsYWNpbmcgcmV2LT5kaWZmb3B0IGluIHRoaXMgbG9vcAorCSAqLworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldikpICE9IE5VTEwpIHsKKwkJaWYgKCFsb2dfdHJlZV9jb21taXQocmV2LCBjb21taXQpICYmIHJldi0+bWF4X2NvdW50ID49IDApCisJCQkvKgorCQkJICogV2UgZGVjcmVtZW50ZWQgbWF4X2NvdW50IGluIGdldF9yZXZpc2lvbiwKKwkJCSAqIGJ1dCB3ZSBkaWRuJ3QgYWN0dWFsbHkgc2hvdyB0aGUgY29tbWl0LgorCQkJICovCisJCQlyZXYtPm1heF9jb3VudCsrOworCQlpZiAoIXJldi0+cmVmbG9nX2luZm8pIHsKKwkJCS8qIHdlIGFsbG93IGN5Y2xlcyBpbiByZWZsb2cgYW5jZXN0cnkgKi8KKwkJCWZyZWVfY29tbWl0X2J1ZmZlcihjb21taXQpOworCQl9CisJCWZyZWVfY29tbWl0X2xpc3QoY29tbWl0LT5wYXJlbnRzKTsKKwkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwkJaWYgKHNhdmVkX25ybCA8IHJldi0+ZGlmZm9wdC5uZWVkZWRfcmVuYW1lX2xpbWl0KQorCQkJc2F2ZWRfbnJsID0gcmV2LT5kaWZmb3B0Lm5lZWRlZF9yZW5hbWVfbGltaXQ7CisJCWlmIChyZXYtPmRpZmZvcHQuZGVncmFkZWRfY2NfdG9fYykKKwkJCXNhdmVkX2RjY3RjID0gMTsKKwl9CisJcmV2LT5kaWZmb3B0LmRlZ3JhZGVkX2NjX3RvX2MgPSBzYXZlZF9kY2N0YzsKKwlyZXYtPmRpZmZvcHQubmVlZGVkX3JlbmFtZV9saW1pdCA9IHNhdmVkX25ybDsKKworCWlmIChyZXYtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NIRUNLRElGRiAmJgorCSAgICBESUZGX09QVF9UU1QoJnJldi0+ZGlmZm9wdCwgQ0hFQ0tfRkFJTEVEKSkgeworCQlyZXR1cm4gMDI7CisJfQorCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZyZXYtPmRpZmZvcHQsIDApOworfQorCitzdGF0aWMgaW50IGdpdF9sb2dfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWNvbnN0IGNoYXIgKnNsb3RfbmFtZTsKKworCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5wcmV0dHkiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZmbXRfcHJldHR5LCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuc3ViamVjdHByZWZpeCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmZtdF9wYXRjaF9zdWJqZWN0X3ByZWZpeCwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAibG9nLmFiYnJldmNvbW1pdCIpKSB7CisJCWRlZmF1bHRfYWJicmV2X2NvbW1pdCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImxvZy5kYXRlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZGVmYXVsdF9kYXRlX21vZGUsIHZhciwgdmFsdWUpOworCWlmICghc3RyY21wKHZhciwgImxvZy5kZWNvcmF0ZSIpKSB7CisJCWRlY29yYXRpb25fc3R5bGUgPSBwYXJzZV9kZWNvcmF0aW9uX3N0eWxlKHZhciwgdmFsdWUpOworCQlpZiAoZGVjb3JhdGlvbl9zdHlsZSA8IDApCisJCQlkZWNvcmF0aW9uX3N0eWxlID0gMDsgLyogbWF5YmUgd2Fybj8gKi8KKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImxvZy5zaG93cm9vdCIpKSB7CisJCWRlZmF1bHRfc2hvd19yb290ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAibG9nLmZvbGxvdyIpKSB7CisJCWRlZmF1bHRfZm9sbG93ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHNraXBfcHJlZml4KHZhciwgImNvbG9yLmRlY29yYXRlLiIsICZzbG90X25hbWUpKQorCQlyZXR1cm4gcGFyc2VfZGVjb3JhdGVfY29sb3JfY29uZmlnKHZhciwgc2xvdF9uYW1lLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAibG9nLm1haWxtYXAiKSkgeworCQl1c2VfbWFpbG1hcF9jb25maWcgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChncmVwX2NvbmZpZyh2YXIsIHZhbHVlLCBjYikgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGdpdF9ncGdfY29uZmlnKHZhciwgdmFsdWUsIGNiKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gZ2l0X2RpZmZfdWlfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGNtZF93aGF0Y2hhbmdlZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0OworCisJaW5pdF9ncmVwX2RlZmF1bHRzKCk7CisJZ2l0X2NvbmZpZyhnaXRfbG9nX2NvbmZpZywgTlVMTCk7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOworCXJldi5kaWZmID0gMTsKKwlyZXYuc2ltcGxpZnlfaGlzdG9yeSA9IDA7CisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gIkhFQUQiOworCW9wdC5yZXZhcmdfb3B0ID0gUkVWQVJHX0NPTU1JVFRJU0g7CisJY21kX2xvZ19pbml0KGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnJldiwgJm9wdCk7CisJaWYgKCFyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0KQorCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUkFXOworCXJldHVybiBjbWRfbG9nX3dhbGsoJnJldik7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfdGFnZ2VyKGNoYXIgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgcHAgPSB7MH07CisKKwlwcC5mbXQgPSByZXYtPmNvbW1pdF9mb3JtYXQ7CisJcHAuZGF0ZV9tb2RlID0gcmV2LT5kYXRlX21vZGU7CisJcHBfdXNlcl9pbmZvKCZwcCwgIlRhZ2dlciIsICZvdXQsIGJ1ZiwgZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKSk7CisJcHJpbnRmKCIlcyIsIG91dC5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZvdXQpOworfQorCitzdGF0aWMgaW50IHNob3dfYmxvYl9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IHJldl9pbmZvICpyZXYsIGNvbnN0IGNoYXIgKm9ial9uYW1lKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMWNbMjBdOworCXN0cnVjdCBvYmplY3RfY29udGV4dCBvYmpfY29udGV4dDsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJZmZsdXNoKHN0ZG91dCk7CisJaWYgKCFESUZGX09QVF9UT1VDSEVEKCZyZXYtPmRpZmZvcHQsIEFMTE9XX1RFWFRDT05WKSB8fAorCSAgICAhRElGRl9PUFRfVFNUKCZyZXYtPmRpZmZvcHQsIEFMTE9XX1RFWFRDT05WKSkKKwkJcmV0dXJuIHN0cmVhbV9ibG9iX3RvX2ZkKDEsIHNoYTEsIE5VTEwsIDApOworCisJaWYgKGdldF9zaGExX3dpdGhfY29udGV4dChvYmpfbmFtZSwgMCwgc2hhMWMsICZvYmpfY29udGV4dCkpCisJCWRpZShfKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIpLCBvYmpfbmFtZSk7CisJaWYgKCFvYmpfY29udGV4dC5wYXRoWzBdIHx8CisJICAgICF0ZXh0Y29udl9vYmplY3Qob2JqX2NvbnRleHQucGF0aCwgb2JqX2NvbnRleHQubW9kZSwgc2hhMWMsIDEsICZidWYsICZzaXplKSkKKwkJcmV0dXJuIHN0cmVhbV9ibG9iX3RvX2ZkKDEsIHNoYTEsIE5VTEwsIDApOworCisJaWYgKCFidWYpCisJCWRpZShfKCJnaXQgc2hvdyAlczogYmFkIGZpbGUiKSwgb2JqX25hbWUpOworCisJd3JpdGVfb3JfZGllKDEsIGJ1Ziwgc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd190YWdfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpbnQgb2Zmc2V0ID0gMDsKKworCWlmICghYnVmKQorCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIiksIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCWFzc2VydCh0eXBlID09IE9CSl9UQUcpOworCXdoaWxlIChvZmZzZXQgPCBzaXplICYmIGJ1ZltvZmZzZXRdICE9ICdcbicpIHsKKwkJaW50IG5ld19vZmZzZXQgPSBvZmZzZXQgKyAxOworCQl3aGlsZSAobmV3X29mZnNldCA8IHNpemUgJiYgYnVmW25ld19vZmZzZXQrK10gIT0gJ1xuJykKKwkJCTsgLyogZG8gbm90aGluZyAqLworCQlpZiAoc3RhcnRzX3dpdGgoYnVmICsgb2Zmc2V0LCAidGFnZ2VyICIpKQorCQkJc2hvd190YWdnZXIoYnVmICsgb2Zmc2V0ICsgNywKKwkJCQkgICAgbmV3X29mZnNldCAtIG9mZnNldCAtIDcsIHJldik7CisJCW9mZnNldCA9IG5ld19vZmZzZXQ7CisJfQorCisJaWYgKG9mZnNldCA8IHNpemUpCisJCWZ3cml0ZShidWYgKyBvZmZzZXQsIHNpemUgLSBvZmZzZXQsIDEsIHN0ZG91dCk7CisJZnJlZShidWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfdHJlZV9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJY29uc3QgY2hhciAqcGF0aG5hbWUsIHVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwgdm9pZCAqY29udGV4dCkKK3sKKwlwcmludGYoIiVzJXNcbiIsIHBhdGhuYW1lLCBTX0lTRElSKG1vZGUpID8gIi8iIDogIiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X3NldHVwX3JldmlzaW9uc190d2VhayhzdHJ1Y3QgcmV2X2luZm8gKnJldiwKKwkJCQkgICAgICAgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqb3B0KQoreworCWlmIChyZXYtPmlnbm9yZV9tZXJnZXMpIHsKKwkJLyogVGhlcmUgd2FzIG5vICItbSIgb24gdGhlIGNvbW1hbmQgbGluZSAqLworCQlyZXYtPmlnbm9yZV9tZXJnZXMgPSAwOworCQlpZiAoIXJldi0+Zmlyc3RfcGFyZW50X29ubHkgJiYgIXJldi0+Y29tYmluZV9tZXJnZXMpIHsKKwkJCS8qIE5vICItLWZpcnN0LXBhcmVudCIsICItYyIsIG9yICItLWNjIiAqLworCQkJcmV2LT5jb21iaW5lX21lcmdlcyA9IDE7CisJCQlyZXYtPmRlbnNlX2NvbWJpbmVkX21lcmdlcyA9IDE7CisJCX0KKwl9CisJaWYgKCFyZXYtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJcmV2LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9QQVRDSDsKK30KKworaW50IGNtZF9zaG93KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqb2JqZWN0czsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IG9wdDsKKwlzdHJ1Y3QgcGF0aHNwZWMgbWF0Y2hfYWxsOworCWludCBpLCBjb3VudCwgcmV0ID0gMDsKKworCWluaXRfZ3JlcF9kZWZhdWx0cygpOworCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcsIE5VTEwpOworCisJbWVtc2V0KCZtYXRjaF9hbGwsIDAsIHNpemVvZihtYXRjaF9hbGwpKTsKKwlpbml0X3JldmlzaW9ucygmcmV2LCBwcmVmaXgpOworCXJldi5kaWZmID0gMTsKKwlyZXYuYWx3YXlzX3Nob3dfaGVhZGVyID0gMTsKKwlyZXYubm9fd2FsayA9IFJFVklTSU9OX1dBTEtfTk9fV0FMS19TT1JURUQ7CisJcmV2LmRpZmZvcHQuc3RhdF93aWR0aCA9IC0xOyAJLyogU2NhbGUgdG8gcmVhbCB0ZXJtaW5hbCBzaXplICovCisKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCW9wdC5kZWYgPSAiSEVBRCI7CisJb3B0LnR3ZWFrID0gc2hvd19zZXR1cF9yZXZpc2lvbnNfdHdlYWs7CisJY21kX2xvZ19pbml0KGFyZ2MsIGFyZ3YsIHByZWZpeCwgJnJldiwgJm9wdCk7CisKKwlpZiAoIXJldi5ub193YWxrKQorCQlyZXR1cm4gY21kX2xvZ193YWxrKCZyZXYpOworCisJY291bnQgPSByZXYucGVuZGluZy5ucjsKKwlvYmplY3RzID0gcmV2LnBlbmRpbmcub2JqZWN0czsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQgJiYgIXJldDsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSBvYmplY3RzW2ldLml0ZW07CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBvYmplY3RzW2ldLm5hbWU7CisJCXN3aXRjaCAoby0+dHlwZSkgeworCQljYXNlIE9CSl9CTE9COgorCQkJcmV0ID0gc2hvd19ibG9iX29iamVjdChvLT5zaGExLCAmcmV2LCBuYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIE9CSl9UQUc6IHsKKwkJCXN0cnVjdCB0YWcgKnQgPSAoc3RydWN0IHRhZyAqKW87CisKKwkJCWlmIChyZXYuc2hvd25fb25lKQorCQkJCXB1dGNoYXIoJ1xuJyk7CisJCQlwcmludGYoIiVzdGFnICVzJXNcbiIsCisJCQkJCWRpZmZfZ2V0X2NvbG9yX29wdCgmcmV2LmRpZmZvcHQsIERJRkZfQ09NTUlUKSwKKwkJCQkJdC0+dGFnLAorCQkJCQlkaWZmX2dldF9jb2xvcl9vcHQoJnJldi5kaWZmb3B0LCBESUZGX1JFU0VUKSk7CisJCQlyZXQgPSBzaG93X3RhZ19vYmplY3Qoby0+c2hhMSwgJnJldik7CisJCQlyZXYuc2hvd25fb25lID0gMTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CisJCQlvID0gcGFyc2Vfb2JqZWN0KHQtPnRhZ2dlZC0+c2hhMSk7CisJCQlpZiAoIW8pCisJCQkJcmV0ID0gZXJyb3IoXygiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIiksCisJCQkJCSAgICBzaGExX3RvX2hleCh0LT50YWdnZWQtPnNoYTEpKTsKKwkJCW9iamVjdHNbaV0uaXRlbSA9IG87CisJCQlpLS07CisJCQlicmVhazsKKwkJfQorCQljYXNlIE9CSl9UUkVFOgorCQkJaWYgKHJldi5zaG93bl9vbmUpCisJCQkJcHV0Y2hhcignXG4nKTsKKwkJCXByaW50ZigiJXN0cmVlICVzJXNcblxuIiwKKwkJCQkJZGlmZl9nZXRfY29sb3Jfb3B0KCZyZXYuZGlmZm9wdCwgRElGRl9DT01NSVQpLAorCQkJCQluYW1lLAorCQkJCQlkaWZmX2dldF9jb2xvcl9vcHQoJnJldi5kaWZmb3B0LCBESUZGX1JFU0VUKSk7CisJCQlyZWFkX3RyZWVfcmVjdXJzaXZlKChzdHJ1Y3QgdHJlZSAqKW8sICIiLCAwLCAwLCAmbWF0Y2hfYWxsLAorCQkJCQlzaG93X3RyZWVfb2JqZWN0LCBOVUxMKTsKKwkJCXJldi5zaG93bl9vbmUgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgT0JKX0NPTU1JVDoKKwkJCXJldi5wZW5kaW5nLm5yID0gcmV2LnBlbmRpbmcuYWxsb2MgPSAwOworCQkJcmV2LnBlbmRpbmcub2JqZWN0cyA9IE5VTEw7CisJCQlhZGRfb2JqZWN0X2FycmF5KG8sIG5hbWUsICZyZXYucGVuZGluZyk7CisJCQlyZXQgPSBjbWRfbG9nX3dhbGsoJnJldik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IGVycm9yKF8oIlVua25vd24gdHlwZTogJWQiKSwgby0+dHlwZSk7CisJCX0KKwl9CisJZnJlZShvYmplY3RzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBpcyBlcXVpdmFsZW50IHRvICJnaXQgbG9nIC1nIC0tYWJicmV2LWNvbW1pdCAtLXByZXR0eT1vbmVsaW5lIgorICovCitpbnQgY21kX2xvZ19yZWZsb2coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IG9wdDsKKworCWluaXRfZ3JlcF9kZWZhdWx0cygpOworCWdpdF9jb25maWcoZ2l0X2xvZ19jb25maWcsIE5VTEwpOworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlpbml0X3JlZmxvZ193YWxrKCZyZXYucmVmbG9nX2luZm8pOworCXJldi52ZXJib3NlX2hlYWRlciA9IDE7CisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gIkhFQUQiOworCWNtZF9sb2dfaW5pdF9kZWZhdWx0cygmcmV2KTsKKwlyZXYuYWJicmV2X2NvbW1pdCA9IDE7CisJcmV2LmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9PTkVMSU5FOworCXJldi51c2VfdGVybWluYXRvciA9IDE7CisJcmV2LmFsd2F5c19zaG93X2hlYWRlciA9IDE7CisJY21kX2xvZ19pbml0X2ZpbmlzaChhcmdjLCBhcmd2LCBwcmVmaXgsICZyZXYsICZvcHQpOworCisJcmV0dXJuIGNtZF9sb2dfd2FsaygmcmV2KTsKK30KKworc3RhdGljIHZvaWQgbG9nX3NldHVwX3JldmlzaW9uc190d2VhayhzdHJ1Y3QgcmV2X2luZm8gKnJldiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0ICpvcHQpCit7CisJaWYgKERJRkZfT1BUX1RTVCgmcmV2LT5kaWZmb3B0LCBERUZBVUxUX0ZPTExPV19SRU5BTUVTKSAmJgorCSAgICByZXYtPnBydW5lX2RhdGEubnIgPT0gMSkKKwkJRElGRl9PUFRfU0VUKCZyZXYtPmRpZmZvcHQsIEZPTExPV19SRU5BTUVTKTsKKworCS8qIFR1cm4gLS1jYy8tYyBpbnRvIC1wIC0tY2MvLWMgd2hlbiAtcCB3YXMgbm90IGdpdmVuICovCisJaWYgKCFyZXYtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmJiByZXYtPmNvbWJpbmVfbWVyZ2VzKQorCQlyZXYtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1BBVENIOworCisJLyogVHVybiAtbSBvbiB3aGVuIC0tY2MvLWMgd2FzIGdpdmVuICovCisJaWYgKHJldi0+Y29tYmluZV9tZXJnZXMpCisJCXJldi0+aWdub3JlX21lcmdlcyA9IDA7Cit9CisKK2ludCBjbWRfbG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQ7CisKKwlpbml0X2dyZXBfZGVmYXVsdHMoKTsKKwlnaXRfY29uZmlnKGdpdF9sb2dfY29uZmlnLCBOVUxMKTsKKworCWluaXRfcmV2aXNpb25zKCZyZXYsIHByZWZpeCk7CisJcmV2LmFsd2F5c19zaG93X2hlYWRlciA9IDE7CisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gIkhFQUQiOworCW9wdC5yZXZhcmdfb3B0ID0gUkVWQVJHX0NPTU1JVFRJU0g7CisJb3B0LnR3ZWFrID0gbG9nX3NldHVwX3JldmlzaW9uc190d2VhazsKKwljbWRfbG9nX2luaXQoYXJnYywgYXJndiwgcHJlZml4LCAmcmV2LCAmb3B0KTsKKwlyZXR1cm4gY21kX2xvZ193YWxrKCZyZXYpOworfQorCisvKiBmb3JtYXQtcGF0Y2ggKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKmZtdF9wYXRjaF9zdWZmaXggPSAiLnBhdGNoIjsKK3N0YXRpYyBpbnQgbnVtYmVyZWQgPSAwOworc3RhdGljIGludCBhdXRvX251bWJlciA9IDE7CisKK3N0YXRpYyBjaGFyICpkZWZhdWx0X2F0dGFjaCA9IE5VTEw7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfaGRyOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBleHRyYV90bzsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXh0cmFfY2M7CisKK3N0YXRpYyB2b2lkIGFkZF9oZWFkZXIoY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJaW50IGxlbiA9IHN0cmxlbih2YWx1ZSk7CisJd2hpbGUgKGxlbiAmJiB2YWx1ZVtsZW4gLSAxXSA9PSAnXG4nKQorCQlsZW4tLTsKKworCWlmICghc3RybmNhc2VjbXAodmFsdWUsICJ0bzogIiwgNCkpIHsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2FwcGVuZCgmZXh0cmFfdG8sIHZhbHVlICsgNCk7CisJCWxlbiAtPSA0OworCX0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKHZhbHVlLCAiY2M6ICIsIDQpKSB7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJmV4dHJhX2NjLCB2YWx1ZSArIDQpOworCQlsZW4gLT0gNDsKKwl9IGVsc2UgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZleHRyYV9oZHIsIHZhbHVlKTsKKwl9CisKKwlpdGVtLT5zdHJpbmdbbGVuXSA9ICdcMCc7Cit9CisKKyNkZWZpbmUgVEhSRUFEX1NIQUxMT1cgMQorI2RlZmluZSBUSFJFQURfREVFUCAyCitzdGF0aWMgaW50IHRocmVhZDsKK3N0YXRpYyBpbnQgZG9fc2lnbm9mZjsKK3N0YXRpYyBjb25zdCBjaGFyICpzaWduYXR1cmUgPSBnaXRfdmVyc2lvbl9zdHJpbmc7CitzdGF0aWMgY29uc3QgY2hhciAqc2lnbmF0dXJlX2ZpbGU7CitzdGF0aWMgaW50IGNvbmZpZ19jb3Zlcl9sZXR0ZXI7CisKK2VudW0geworCUNPVkVSX1VOU0VULAorCUNPVkVSX09GRiwKKwlDT1ZFUl9PTiwKKwlDT1ZFUl9BVVRPCit9OworCitzdGF0aWMgaW50IGdpdF9mb3JtYXRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5oZWFkZXJzIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCWRpZShfKCJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIikpOworCQlhZGRfaGVhZGVyKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5zdWZmaXgiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZmbXRfcGF0Y2hfc3VmZml4LCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQudG8iKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZXh0cmFfdG8sIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5jYyIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZleHRyYV9jYywgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5jb2xvciIpIHx8ICFzdHJjbXAodmFyLCAiY29sb3IuZGlmZiIpIHx8CisJICAgICFzdHJjbXAodmFyLCAiY29sb3IudWkiKSB8fCAhc3RyY21wKHZhciwgImRpZmYuc3VibW9kdWxlIikpIHsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImZvcm1hdC5udW1iZXJlZCIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImF1dG8iKSkgeworCQkJYXV0b19udW1iZXIgPSAxOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbnVtYmVyZWQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCWF1dG9fbnVtYmVyID0gYXV0b19udW1iZXIgJiYgbnVtYmVyZWQ7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuYXR0YWNoIikpIHsKKwkJaWYgKHZhbHVlICYmICp2YWx1ZSkKKwkJCWRlZmF1bHRfYXR0YWNoID0geHN0cmR1cCh2YWx1ZSk7CisJCWVsc2UKKwkJCWRlZmF1bHRfYXR0YWNoID0geHN0cmR1cChnaXRfdmVyc2lvbl9zdHJpbmcpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnRocmVhZCIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImRlZXAiKSkgeworCQkJdGhyZWFkID0gVEhSRUFEX0RFRVA7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJzaGFsbG93IikpIHsKKwkJCXRocmVhZCA9IFRIUkVBRF9TSEFMTE9XOworCQkJcmV0dXJuIDA7CisJCX0KKwkJdGhyZWFkID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpICYmIFRIUkVBRF9TSEFMTE9XOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnNpZ25vZmYiKSkgeworCQlkb19zaWdub2ZmID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnNpZ25hdHVyZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNpZ25hdHVyZSwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAiZm9ybWF0LnNpZ25hdHVyZWZpbGUiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJnNpZ25hdHVyZV9maWxlLCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJmb3JtYXQuY292ZXJsZXR0ZXIiKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJhdXRvIikpIHsKKwkJCWNvbmZpZ19jb3Zlcl9sZXR0ZXIgPSBDT1ZFUl9BVVRPOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY29uZmlnX2NvdmVyX2xldHRlciA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSA/IENPVkVSX09OIDogQ09WRVJfT0ZGOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZ2l0X2xvZ19jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgRklMRSAqcmVhbHN0ZG91dCA9IE5VTEw7CitzdGF0aWMgY29uc3QgY2hhciAqb3V0cHV0X2RpcmVjdG9yeSA9IE5VTEw7CitzdGF0aWMgaW50IG91dGRpcl9vZmZzZXQ7CisKK3N0YXRpYyBpbnQgcmVvcGVuX3N0ZG91dChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKnN1YmplY3QsCisJCQkgc3RydWN0IHJldl9pbmZvICpyZXYsIGludCBxdWlldCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGZpbGVuYW1lID0gU1RSQlVGX0lOSVQ7CisJaW50IHN1ZmZpeF9sZW4gPSBzdHJsZW4ocmV2LT5wYXRjaF9zdWZmaXgpICsgMTsKKworCWlmIChvdXRwdXRfZGlyZWN0b3J5KSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmZpbGVuYW1lLCBvdXRwdXRfZGlyZWN0b3J5KTsKKwkJaWYgKGZpbGVuYW1lLmxlbiA+PQorCQkgICAgUEFUSF9NQVggLSBGT1JNQVRfUEFUQ0hfTkFNRV9NQVggLSBzdWZmaXhfbGVuKQorCQkJcmV0dXJuIGVycm9yKF8oIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIpKTsKKwkJc3RyYnVmX2NvbXBsZXRlKCZmaWxlbmFtZSwgJy8nKTsKKwl9CisKKwlpZiAocmV2LT5udW1iZXJlZF9maWxlcykKKwkJc3RyYnVmX2FkZGYoJmZpbGVuYW1lLCAiJWQiLCByZXYtPm5yKTsKKwllbHNlIGlmIChjb21taXQpCisJCWZtdF9vdXRwdXRfY29tbWl0KCZmaWxlbmFtZSwgY29tbWl0LCByZXYpOworCWVsc2UKKwkJZm10X291dHB1dF9zdWJqZWN0KCZmaWxlbmFtZSwgc3ViamVjdCwgcmV2KTsKKworCWlmICghcXVpZXQpCisJCWZwcmludGYocmVhbHN0ZG91dCwgIiVzXG4iLCBmaWxlbmFtZS5idWYgKyBvdXRkaXJfb2Zmc2V0KTsKKworCWlmIChmcmVvcGVuKGZpbGVuYW1lLmJ1ZiwgInciLCBzdGRvdXQpID09IE5VTEwpCisJCXJldHVybiBlcnJvcihfKCJDYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIiksIGZpbGVuYW1lLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmZmlsZW5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZXRfcGF0Y2hfaWRzKHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgcGF0Y2hfaWRzICppZHMpCit7CisJc3RydWN0IHJldl9pbmZvIGNoZWNrX3JldjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQsICpjMSwgKmMyOworCXN0cnVjdCBvYmplY3QgKm8xLCAqbzI7CisJdW5zaWduZWQgZmxhZ3MxLCBmbGFnczI7CisKKwlpZiAocmV2LT5wZW5kaW5nLm5yICE9IDIpCisJCWRpZShfKCJOZWVkIGV4YWN0bHkgb25lIHJhbmdlLiIpKTsKKworCW8xID0gcmV2LT5wZW5kaW5nLm9iamVjdHNbMF0uaXRlbTsKKwlvMiA9IHJldi0+cGVuZGluZy5vYmplY3RzWzFdLml0ZW07CisJZmxhZ3MxID0gbzEtPmZsYWdzOworCWZsYWdzMiA9IG8yLT5mbGFnczsKKwljMSA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKG8xLT5zaGExKTsKKwljMiA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKG8yLT5zaGExKTsKKworCWlmICgoZmxhZ3MxICYgVU5JTlRFUkVTVElORykgPT0gKGZsYWdzMiAmIFVOSU5URVJFU1RJTkcpKQorCQlkaWUoXygiTm90IGEgcmFuZ2UuIikpOworCisJaW5pdF9wYXRjaF9pZHMoaWRzKTsKKworCS8qIGdpdmVuIGEgcmFuZ2UgYS4uYiBnZXQgYWxsIHBhdGNoIGlkcyBmb3IgYi4uYSAqLworCWluaXRfcmV2aXNpb25zKCZjaGVja19yZXYsIHJldi0+cHJlZml4KTsKKwljaGVja19yZXYubWF4X3BhcmVudHMgPSAxOworCW8xLT5mbGFncyBePSBVTklOVEVSRVNUSU5HOworCW8yLT5mbGFncyBePSBVTklOVEVSRVNUSU5HOworCWFkZF9wZW5kaW5nX29iamVjdCgmY2hlY2tfcmV2LCBvMSwgIm8xIik7CisJYWRkX3BlbmRpbmdfb2JqZWN0KCZjaGVja19yZXYsIG8yLCAibzIiKTsKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZjaGVja19yZXYpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmY2hlY2tfcmV2KSkgIT0gTlVMTCkgeworCQlhZGRfY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgaWRzKTsKKwl9CisKKwkvKiByZXNldCBmb3IgbmV4dCByZXZpc2lvbiB3YWxrICovCisJY2xlYXJfY29tbWl0X21hcmtzKGMxLCBTRUVOIHwgVU5JTlRFUkVTVElORyB8IFNIT1dOIHwgQURERUQpOworCWNsZWFyX2NvbW1pdF9tYXJrcyhjMiwgU0VFTiB8IFVOSU5URVJFU1RJTkcgfCBTSE9XTiB8IEFEREVEKTsKKwlvMS0+ZmxhZ3MgPSBmbGFnczE7CisJbzItPmZsYWdzID0gZmxhZ3MyOworfQorCitzdGF0aWMgdm9pZCBnZW5fbWVzc2FnZV9pZChzdHJ1Y3QgcmV2X2luZm8gKmluZm8sIGNoYXIgKmJhc2UpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMuJWx1LmdpdC4lcyIsIGJhc2UsCisJCSAgICAodW5zaWduZWQgbG9uZykgdGltZShOVUxMKSwKKwkJICAgIGdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9OT19OQU1FfElERU5UX05PX0RBVEV8SURFTlRfU1RSSUNUKSk7CisJaW5mby0+bWVzc2FnZV9pZCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3NpZ25hdHVyZSh2b2lkKQoreworCWlmICghc2lnbmF0dXJlIHx8ICEqc2lnbmF0dXJlKQorCQlyZXR1cm47CisKKwlwcmludGYoIi0tIFxuJXMiLCBzaWduYXR1cmUpOworCWlmIChzaWduYXR1cmVbc3RybGVuKHNpZ25hdHVyZSktMV0gIT0gJ1xuJykKKwkJcHV0Y2hhcignXG4nKTsKKwlwdXRjaGFyKCdcbicpOworfQorCitzdGF0aWMgdm9pZCBhZGRfYnJhbmNoX2Rlc2NyaXB0aW9uKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqYnJhbmNoX25hbWUpCit7CisJc3RydWN0IHN0cmJ1ZiBkZXNjID0gU1RSQlVGX0lOSVQ7CisJaWYgKCFicmFuY2hfbmFtZSB8fCAhKmJyYW5jaF9uYW1lKQorCQlyZXR1cm47CisJcmVhZF9icmFuY2hfZGVzYygmZGVzYywgYnJhbmNoX25hbWUpOworCWlmIChkZXNjLmxlbikgeworCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwkJc3RyYnVmX2FkZGJ1ZihidWYsICZkZXNjKTsKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZkZXNjKTsKK30KKworc3RhdGljIGNoYXIgKmZpbmRfYnJhbmNoX25hbWUoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJaW50IGksIHBvc2l0aXZlID0gLTE7CisJdW5zaWduZWQgY2hhciBicmFuY2hfc2hhMVsyMF07CisJY29uc3QgdW5zaWduZWQgY2hhciAqdGlwX3NoYTE7CisJY29uc3QgY2hhciAqcmVmLCAqdjsKKwljaGFyICpmdWxsX3JlZiwgKmJyYW5jaCA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmV2LT5jbWRsaW5lLm5yOyBpKyspIHsKKwkJaWYgKHJldi0+Y21kbGluZS5yZXZbaV0uZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCWlmIChwb3NpdGl2ZSA8IDApCisJCQlwb3NpdGl2ZSA9IGk7CisJCWVsc2UKKwkJCXJldHVybiBOVUxMOworCX0KKwlpZiAocG9zaXRpdmUgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlyZWYgPSByZXYtPmNtZGxpbmUucmV2W3Bvc2l0aXZlXS5uYW1lOworCXRpcF9zaGExID0gcmV2LT5jbWRsaW5lLnJldltwb3NpdGl2ZV0uaXRlbS0+c2hhMTsKKwlpZiAoZHdpbV9yZWYocmVmLCBzdHJsZW4ocmVmKSwgYnJhbmNoX3NoYTEsICZmdWxsX3JlZikgJiYKKwkgICAgc2tpcF9wcmVmaXgoZnVsbF9yZWYsICJyZWZzL2hlYWRzLyIsICZ2KSAmJgorCSAgICAhaGFzaGNtcCh0aXBfc2hhMSwgYnJhbmNoX3NoYTEpKQorCQlicmFuY2ggPSB4c3RyZHVwKHYpOworCWZyZWUoZnVsbF9yZWYpOworCXJldHVybiBicmFuY2g7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2VfY292ZXJfbGV0dGVyKHN0cnVjdCByZXZfaW5mbyAqcmV2LCBpbnQgdXNlX3N0ZG91dCwKKwkJCSAgICAgIHN0cnVjdCBjb21taXQgKm9yaWdpbiwKKwkJCSAgICAgIGludCBuciwgc3RydWN0IGNvbW1pdCAqKmxpc3QsCisJCQkgICAgICBjb25zdCBjaGFyICpicmFuY2hfbmFtZSwKKwkJCSAgICAgIGludCBxdWlldCkKK3sKKwljb25zdCBjaGFyICpjb21taXR0ZXI7CisJY29uc3QgY2hhciAqYm9keSA9ICIqKiogU1VCSkVDVCBIRVJFICoqKlxuXG4qKiogQkxVUkIgSEVSRSAqKipcbiI7CisJY29uc3QgY2hhciAqbXNnOworCXN0cnVjdCBzaG9ydGxvZyBsb2c7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBpOworCWNvbnN0IGNoYXIgKmVuY29kaW5nID0gIlVURi04IjsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdHM7CisJaW50IG5lZWRfOGJpdF9jdGUgPSAwOworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBwcCA9IHswfTsKKwlzdHJ1Y3QgY29tbWl0ICpoZWFkID0gbGlzdFswXTsKKworCWlmIChyZXYtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfRU1BSUwpCisJCWRpZShfKCJDb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IikpOworCisJY29tbWl0dGVyID0gZ2l0X2NvbW1pdHRlcl9pbmZvKDApOworCisJaWYgKCF1c2Vfc3Rkb3V0ICYmCisJICAgIHJlb3Blbl9zdGRvdXQoTlVMTCwgcmV2LT5udW1iZXJlZF9maWxlcyA/IE5VTEwgOiAiY292ZXItbGV0dGVyIiwgcmV2LCBxdWlldCkpCisJCXJldHVybjsKKworCWxvZ193cml0ZV9lbWFpbF9oZWFkZXJzKHJldiwgaGVhZCwgJnBwLnN1YmplY3QsICZwcC5hZnRlcl9zdWJqZWN0LAorCQkJCSZuZWVkXzhiaXRfY3RlKTsKKworCWZvciAoaSA9IDA7ICFuZWVkXzhiaXRfY3RlICYmIGkgPCBucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmJ1ZiA9IGdldF9jb21taXRfYnVmZmVyKGxpc3RbaV0sIE5VTEwpOworCQlpZiAoaGFzX25vbl9hc2NpaShidWYpKQorCQkJbmVlZF84Yml0X2N0ZSA9IDE7CisJCXVudXNlX2NvbW1pdF9idWZmZXIobGlzdFtpXSwgYnVmKTsKKwl9CisKKwlpZiAoIWJyYW5jaF9uYW1lKQorCQlicmFuY2hfbmFtZSA9IGZpbmRfYnJhbmNoX25hbWUocmV2KTsKKworCW1zZyA9IGJvZHk7CisJcHAuZm10ID0gQ01JVF9GTVRfRU1BSUw7CisJcHAuZGF0ZV9tb2RlLnR5cGUgPSBEQVRFX1JGQzI4MjI7CisJcHBfdXNlcl9pbmZvKCZwcCwgTlVMTCwgJnNiLCBjb21taXR0ZXIsIGVuY29kaW5nKTsKKwlwcF90aXRsZV9saW5lKCZwcCwgJm1zZywgJnNiLCBlbmNvZGluZywgbmVlZF84Yml0X2N0ZSk7CisJcHBfcmVtYWluZGVyKCZwcCwgJm1zZywgJnNiLCAwKTsKKwlhZGRfYnJhbmNoX2Rlc2NyaXB0aW9uKCZzYiwgYnJhbmNoX25hbWUpOworCXByaW50ZigiJXNcbiIsIHNiLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJc2hvcnRsb2dfaW5pdCgmbG9nKTsKKwlsb2cud3JhcF9saW5lcyA9IDE7CisJbG9nLndyYXAgPSA3MjsKKwlsb2cuaW4xID0gMjsKKwlsb2cuaW4yID0gNDsKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJc2hvcnRsb2dfYWRkX2NvbW1pdCgmbG9nLCBsaXN0W2ldKTsKKworCXNob3J0bG9nX291dHB1dCgmbG9nKTsKKworCS8qCisJICogV2UgY2FuIG9ubHkgZG8gZGlmZnN0YXQgd2l0aCBhIHVuaXF1ZSByZWZlcmVuY2UgcG9pbnQKKwkgKi8KKwlpZiAoIW9yaWdpbikKKwkJcmV0dXJuOworCisJbWVtY3B5KCZvcHRzLCAmcmV2LT5kaWZmb3B0LCBzaXplb2Yob3B0cykpOworCW9wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX1NVTU1BUlkgfCBESUZGX0ZPUk1BVF9ESUZGU1RBVDsKKworCWRpZmZfc2V0dXBfZG9uZSgmb3B0cyk7CisKKwlkaWZmX3RyZWVfc2hhMShvcmlnaW4tPnRyZWUtPm9iamVjdC5zaGExLAorCQkgICAgICAgaGVhZC0+dHJlZS0+b2JqZWN0LnNoYTEsCisJCSAgICAgICAiIiwgJm9wdHMpOworCWRpZmZjb3JlX3N0ZCgmb3B0cyk7CisJZGlmZl9mbHVzaCgmb3B0cyk7CisKKwlwcmludGYoIlxuIik7CisJcHJpbnRfc2lnbmF0dXJlKCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjbGVhbl9tZXNzYWdlX2lkKGNvbnN0IGNoYXIgKm1zZ19pZCkKK3sKKwljaGFyIGNoOworCWNvbnN0IGNoYXIgKmEsICp6LCAqbTsKKworCW0gPSBtc2dfaWQ7CisJd2hpbGUgKChjaCA9ICptKSAmJiAoaXNzcGFjZShjaCkgfHwgKGNoID09ICc8JykpKQorCQltKys7CisJYSA9IG07CisJeiA9IE5VTEw7CisJd2hpbGUgKChjaCA9ICptKSkgeworCQlpZiAoIWlzc3BhY2UoY2gpICYmIChjaCAhPSAnPicpKQorCQkJeiA9IG07CisJCW0rKzsKKwl9CisJaWYgKCF6KQorCQlkaWUoXygiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIpLCBtc2dfaWQpOworCWlmICgrK3ogPT0gbSkKKwkJcmV0dXJuIGE7CisJcmV0dXJuIHhtZW1kdXB6KGEsIHogLSBhKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNldF9vdXRkaXIoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpvdXRwdXRfZGlyZWN0b3J5KQoreworCWlmIChvdXRwdXRfZGlyZWN0b3J5ICYmIGlzX2Fic29sdXRlX3BhdGgob3V0cHV0X2RpcmVjdG9yeSkpCisJCXJldHVybiBvdXRwdXRfZGlyZWN0b3J5OworCisJaWYgKCFwcmVmaXggfHwgISpwcmVmaXgpIHsKKwkJaWYgKG91dHB1dF9kaXJlY3RvcnkpCisJCQlyZXR1cm4gb3V0cHV0X2RpcmVjdG9yeTsKKwkJLyogVGhlIHVzZXIgZGlkIG5vdCBleHBsaWNpdGx5IGFzayBmb3IgIi4vIiAqLworCQlvdXRkaXJfb2Zmc2V0ID0gMjsKKwkJcmV0dXJuICIuLyI7CisJfQorCisJb3V0ZGlyX29mZnNldCA9IHN0cmxlbihwcmVmaXgpOworCWlmICghb3V0cHV0X2RpcmVjdG9yeSkKKwkJcmV0dXJuIHByZWZpeDsKKworCXJldHVybiB4c3RyZHVwKHByZWZpeF9maWxlbmFtZShwcmVmaXgsIG91dGRpcl9vZmZzZXQsCisJCQkJICAgICAgIG91dHB1dF9kaXJlY3RvcnkpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX2Zvcm1hdF9wYXRjaF91c2FnZVtdID0geworCU5fKCJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGtlZXBfc3ViamVjdCA9IDA7CisKK3N0YXRpYyBpbnQga2VlcF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCSgoc3RydWN0IHJldl9pbmZvICopb3B0LT52YWx1ZSktPnRvdGFsID0gLTE7CisJa2VlcF9zdWJqZWN0ID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdWJqZWN0X3ByZWZpeCA9IDA7CisKK3N0YXRpYyBpbnQgc3ViamVjdF9wcmVmaXhfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgaW50IHVuc2V0KQoreworCXN1YmplY3RfcHJlZml4ID0gMTsKKwkoKHN0cnVjdCByZXZfaW5mbyAqKW9wdC0+dmFsdWUpLT5zdWJqZWN0X3ByZWZpeCA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBudW1iZXJlZF9jbWRsaW5lX29wdCA9IDA7CisKK3N0YXRpYyBpbnQgbnVtYmVyZWRfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgIGludCB1bnNldCkKK3sKKwkqKGludCAqKW9wdC0+dmFsdWUgPSBudW1iZXJlZF9jbWRsaW5lX29wdCA9IHVuc2V0ID8gMCA6IDE7CisJaWYgKHVuc2V0KQorCQlhdXRvX251bWJlciA9ICAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vX251bWJlcmVkX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCWludCB1bnNldCkKK3sKKwlyZXR1cm4gbnVtYmVyZWRfY2FsbGJhY2sob3B0LCBhcmcsIDEpOworfQorCitzdGF0aWMgaW50IG91dHB1dF9kaXJlY3RvcnlfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkgICAgICBpbnQgdW5zZXQpCit7CisJY29uc3QgY2hhciAqKmRpciA9IChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWU7CisJaWYgKCpkaXIpCisJCWRpZShfKCJUd28gb3V0cHV0IGRpcmVjdG9yaWVzPyIpKTsKKwkqZGlyID0gYXJnOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRocmVhZF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqdGhyZWFkID0gKGludCAqKW9wdC0+dmFsdWU7CisJaWYgKHVuc2V0KQorCQkqdGhyZWFkID0gMDsKKwllbHNlIGlmICghYXJnIHx8ICFzdHJjbXAoYXJnLCAic2hhbGxvdyIpKQorCQkqdGhyZWFkID0gVEhSRUFEX1NIQUxMT1c7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJkZWVwIikpCisJCSp0aHJlYWQgPSBUSFJFQURfREVFUDsKKwllbHNlCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0dGFjaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCByZXZfaW5mbyAqcmV2ID0gKHN0cnVjdCByZXZfaW5mbyAqKW9wdC0+dmFsdWU7CisJaWYgKHVuc2V0KQorCQlyZXYtPm1pbWVfYm91bmRhcnkgPSBOVUxMOworCWVsc2UgaWYgKGFyZykKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gYXJnOworCWVsc2UKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gZ2l0X3ZlcnNpb25fc3RyaW5nOworCXJldi0+bm9faW5saW5lID0gdW5zZXQgPyAwIDogMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbmxpbmVfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldiA9IChzdHJ1Y3QgcmV2X2luZm8gKilvcHQtPnZhbHVlOworCWlmICh1bnNldCkKKwkJcmV2LT5taW1lX2JvdW5kYXJ5ID0gTlVMTDsKKwllbHNlIGlmIChhcmcpCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGFyZzsKKwllbHNlCisJCXJldi0+bWltZV9ib3VuZGFyeSA9IGdpdF92ZXJzaW9uX3N0cmluZzsKKwlyZXYtPm5vX2lubGluZSA9IDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGVhZGVyX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KSB7CisJCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV9oZHIsIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfdG8sIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfY2MsIDApOworCX0gZWxzZSB7CisJICAgIGFkZF9oZWFkZXIoYXJnKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9fY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlpZiAodW5zZXQpCisJCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV90bywgMCk7CisJZWxzZQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmV4dHJhX3RvLCBhcmcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNjX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaWYgKHVuc2V0KQorCQlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfY2MsIDApOworCWVsc2UKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZleHRyYV9jYywgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmcm9tX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJY2hhciAqKmZyb20gPSBvcHQtPnZhbHVlOworCisJZnJlZSgqZnJvbSk7CisKKwlpZiAodW5zZXQpCisJCSpmcm9tID0gTlVMTDsKKwllbHNlIGlmIChhcmcpCisJCSpmcm9tID0geHN0cmR1cChhcmcpOworCWVsc2UKKwkJKmZyb20gPSB4c3RyZHVwKGdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9OT19EQVRFKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfZm9ybWF0X3BhdGNoKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0ICoqbGlzdCA9IE5VTEw7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IHNfcl9vcHQ7CisJaW50IG5yID0gMCwgdG90YWwsIGk7CisJaW50IHVzZV9zdGRvdXQgPSAwOworCWludCBzdGFydF9udW1iZXIgPSAtMTsKKwlpbnQganVzdF9udW1iZXJzID0gMDsKKwlpbnQgaWdub3JlX2lmX2luX3Vwc3RyZWFtID0gMDsKKwlpbnQgY292ZXJfbGV0dGVyID0gLTE7CisJaW50IGJvdW5kYXJ5X2NvdW50ID0gMDsKKwlpbnQgbm9fYmluYXJ5X2RpZmYgPSAwOworCXN0cnVjdCBjb21taXQgKm9yaWdpbiA9IE5VTEw7CisJY29uc3QgY2hhciAqaW5fcmVwbHlfdG8gPSBOVUxMOworCXN0cnVjdCBwYXRjaF9pZHMgaWRzOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHVzZV9wYXRjaF9mb3JtYXQgPSAwOworCWludCBxdWlldCA9IDA7CisJaW50IHJlcm9sbF9jb3VudCA9IC0xOworCWNoYXIgKmJyYW5jaF9uYW1lID0gTlVMTDsKKwljaGFyICpmcm9tID0gTlVMTDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIGJ1aWx0aW5fZm9ybWF0X3BhdGNoX29wdGlvbnNbXSA9IHsKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICduJywgIm51bWJlcmVkIiwgJm51bWJlcmVkLCBOVUxMLAorCQkJICAgIE5fKCJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIiksCisJCQkgICAgUEFSU0VfT1BUX05PQVJHLCBudW1iZXJlZF9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ04nLCAibm8tbnVtYmVyZWQiLCAmbnVtYmVyZWQsIE5VTEwsCisJCQkgICAgTl8oInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIiksCisJCQkgICAgUEFSU0VfT1BUX05PQVJHLCBub19udW1iZXJlZF9jYWxsYmFjayB9LAorCQlPUFRfQk9PTCgncycsICJzaWdub2ZmIiwgJmRvX3NpZ25vZmYsIE5fKCJhZGQgU2lnbmVkLW9mZi1ieToiKSksCisJCU9QVF9CT09MKDAsICJzdGRvdXQiLCAmdXNlX3N0ZG91dCwKKwkJCSAgICBOXygicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiKSksCisJCU9QVF9CT09MKDAsICJjb3Zlci1sZXR0ZXIiLCAmY292ZXJfbGV0dGVyLAorCQkJICAgIE5fKCJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIpKSwKKwkJT1BUX0JPT0woMCwgIm51bWJlcmVkLWZpbGVzIiwgJmp1c3RfbnVtYmVycywKKwkJCSAgICBOXygidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIikpLAorCQlPUFRfU1RSSU5HKDAsICJzdWZmaXgiLCAmZm10X3BhdGNoX3N1ZmZpeCwgTl8oInNmeCIpLAorCQkJICAgIE5fKCJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInN0YXJ0LW51bWJlciIsICZzdGFydF9udW1iZXIsCisJCQkgICAgTl8oInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiKSksCisJCU9QVF9JTlRFR0VSKCd2JywgInJlcm9sbC1jb3VudCIsICZyZXJvbGxfY291bnQsCisJCQkgICAgTl8oIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJzdWJqZWN0LXByZWZpeCIsICZyZXYsIE5fKCJwcmVmaXgiKSwKKwkJCSAgICBOXygiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIiksCisJCQkgICAgUEFSU0VfT1BUX05PTkVHLCBzdWJqZWN0X3ByZWZpeF9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ28nLCAib3V0cHV0LWRpcmVjdG9yeSIsICZvdXRwdXRfZGlyZWN0b3J5LAorCQkJICAgIE5fKCJkaXIiKSwgTl8oInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIpLAorCQkJICAgIFBBUlNFX09QVF9OT05FRywgb3V0cHV0X2RpcmVjdG9yeV9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2snLCAia2VlcC1zdWJqZWN0IiwgJnJldiwgTlVMTCwKKwkJCSAgICBOXygiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iKSwKKwkJCSAgICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIGtlZXBfY2FsbGJhY2sgfSwKKwkJT1BUX0JPT0woMCwgIm5vLWJpbmFyeSIsICZub19iaW5hcnlfZGlmZiwKKwkJCSBOXygiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIpKSwKKwkJT1BUX0JPT0woMCwgImlnbm9yZS1pZi1pbi11cHN0cmVhbSIsICZpZ25vcmVfaWZfaW5fdXBzdHJlYW0sCisJCQkgTl8oImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIpKSwKKwkJeyBPUFRJT05fU0VUX0lOVCwgJ3AnLCAibm8tc3RhdCIsICZ1c2VfcGF0Y2hfZm9ybWF0LCBOVUxMLAorCQkgIE5fKCJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiKSwKKwkJICBQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIDF9LAorCQlPUFRfR1JPVVAoTl8oIk1lc3NhZ2luZyIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJhZGQtaGVhZGVyIiwgTlVMTCwgTl8oImhlYWRlciIpLAorCQkJICAgIE5fKCJhZGQgZW1haWwgaGVhZGVyIiksIDAsIGhlYWRlcl9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInRvIiwgTlVMTCwgTl8oImVtYWlsIiksIE5fKCJhZGQgVG86IGhlYWRlciIpLAorCQkJICAgIDAsIHRvX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiY2MiLCBOVUxMLCBOXygiZW1haWwiKSwgTl8oImFkZCBDYzogaGVhZGVyIiksCisJCQkgICAgMCwgY2NfY2FsbGJhY2sgfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJmcm9tIiwgJmZyb20sIE5fKCJpZGVudCIpLAorCQkJICAgIE5fKCJzZXQgRnJvbSBhZGRyZXNzIHRvIDxpZGVudD4gKG9yIGNvbW1pdHRlciBpZGVudCBpZiBhYnNlbnQpIiksCisJCQkgICAgUEFSU0VfT1BUX09QVEFSRywgZnJvbV9jYWxsYmFjayB9LAorCQlPUFRfU1RSSU5HKDAsICJpbi1yZXBseS10byIsICZpbl9yZXBseV90bywgTl8oIm1lc3NhZ2UtaWQiKSwKKwkJCSAgICBOXygibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgImF0dGFjaCIsICZyZXYsIE5fKCJib3VuZGFyeSIpLAorCQkJICAgIE5fKCJhdHRhY2ggdGhlIHBhdGNoIiksIFBBUlNFX09QVF9PUFRBUkcsCisJCQkgICAgYXR0YWNoX2NhbGxiYWNrIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaW5saW5lIiwgJnJldiwgTl8oImJvdW5kYXJ5IiksCisJCQkgICAgTl8oImlubGluZSB0aGUgcGF0Y2giKSwKKwkJCSAgICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJICAgIGlubGluZV9jYWxsYmFjayB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInRocmVhZCIsICZ0aHJlYWQsIE5fKCJzdHlsZSIpLAorCQkJICAgIE5fKCJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIpLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIHRocmVhZF9jYWxsYmFjayB9LAorCQlPUFRfU1RSSU5HKDAsICJzaWduYXR1cmUiLCAmc2lnbmF0dXJlLCBOXygic2lnbmF0dXJlIiksCisJCQkgICAgTl8oImFkZCBhIHNpZ25hdHVyZSIpKSwKKwkJT1BUX0ZJTEVOQU1FKDAsICJzaWduYXR1cmUtZmlsZSIsICZzaWduYXR1cmVfZmlsZSwKKwkJCQlOXygiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIikpLAorCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlleHRyYV9oZHIuc3RyZHVwX3N0cmluZ3MgPSAxOworCWV4dHJhX3RvLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlleHRyYV9jYy5zdHJkdXBfc3RyaW5ncyA9IDE7CisJaW5pdF9ncmVwX2RlZmF1bHRzKCk7CisJZ2l0X2NvbmZpZyhnaXRfZm9ybWF0X2NvbmZpZywgTlVMTCk7CisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlyZXYuY29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX0VNQUlMOworCXJldi52ZXJib3NlX2hlYWRlciA9IDE7CisJcmV2LmRpZmYgPSAxOworCXJldi5tYXhfcGFyZW50cyA9IDE7CisJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgUkVDVVJTSVZFKTsKKwlyZXYuc3ViamVjdF9wcmVmaXggPSBmbXRfcGF0Y2hfc3ViamVjdF9wcmVmaXg7CisJbWVtc2V0KCZzX3Jfb3B0LCAwLCBzaXplb2Yoc19yX29wdCkpOworCXNfcl9vcHQuZGVmID0gIkhFQUQiOworCXNfcl9vcHQucmV2YXJnX29wdCA9IFJFVkFSR19DT01NSVRUSVNIOworCisJaWYgKGRlZmF1bHRfYXR0YWNoKSB7CisJCXJldi5taW1lX2JvdW5kYXJ5ID0gZGVmYXVsdF9hdHRhY2g7CisJCXJldi5ub19pbmxpbmUgPSAxOworCX0KKworCS8qCisJICogUGFyc2UgdGhlIGFyZ3VtZW50cyBiZWZvcmUgc2V0dXBfcmV2aXNpb25zKCksIG9yIHNvbWV0aGluZworCSAqIGxpa2UgImdpdCBmb3JtYXQtcGF0Y2ggLW8gYTEyMyBIRUFEXi4uIiBtYXkgZmFpbDsgYTEyMyBpcworCSAqIHBvc3NpYmx5IGEgdmFsaWQgU0hBMS4KKwkgKi8KKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fZm9ybWF0X3BhdGNoX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fZm9ybWF0X3BhdGNoX3VzYWdlLAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9BUkdWMCB8IFBBUlNFX09QVF9LRUVQX1VOS05PV04gfAorCQkJICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisKKwlpZiAoMCA8IHJlcm9sbF9jb3VudCkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNwcmVmaXggPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGYoJnNwcmVmaXgsICIlcyB2JWQiLAorCQkJICAgIHJldi5zdWJqZWN0X3ByZWZpeCwgcmVyb2xsX2NvdW50KTsKKwkJcmV2LnJlcm9sbF9jb3VudCA9IHJlcm9sbF9jb3VudDsKKwkJcmV2LnN1YmplY3RfcHJlZml4ID0gc3RyYnVmX2RldGFjaCgmc3ByZWZpeCwgTlVMTCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGV4dHJhX2hkci5ucjsgaSsrKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZXh0cmFfaGRyLml0ZW1zW2ldLnN0cmluZyk7CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwl9CisKKwlpZiAoZXh0cmFfdG8ubnIpCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIlRvOiAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXh0cmFfdG8ubnI7IGkrKykgeworCQlpZiAoaSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiAgICAiKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBleHRyYV90by5pdGVtc1tpXS5zdHJpbmcpOworCQlpZiAoaSArIDEgPCBleHRyYV90by5ucikKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnLCcpOworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJfQorCisJaWYgKGV4dHJhX2NjLm5yKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICJDYzogIik7CisJZm9yIChpID0gMDsgaSA8IGV4dHJhX2NjLm5yOyBpKyspIHsKKwkJaWYgKGkpCisJCQlzdHJidWZfYWRkc3RyKCZidWYsICIgICAgIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZXh0cmFfY2MuaXRlbXNbaV0uc3RyaW5nKTsKKwkJaWYgKGkgKyAxIDwgZXh0cmFfY2MubnIpCisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJywnKTsKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCX0KKworCXJldi5leHRyYV9oZWFkZXJzID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCWlmIChmcm9tKSB7CisJCWlmIChzcGxpdF9pZGVudF9saW5lKCZyZXYuZnJvbV9pZGVudCwgZnJvbSwgc3RybGVuKGZyb20pKSkKKwkJCWRpZShfKCJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIiksIGZyb20pOworCX0KKworCWlmIChzdGFydF9udW1iZXIgPCAwKQorCQlzdGFydF9udW1iZXIgPSAxOworCisJLyoKKwkgKiBJZiBudW1iZXJlZCBpcyBzZXQgc29sZWx5IGR1ZSB0byBmb3JtYXQubnVtYmVyZWQgaW4gY29uZmlnLAorCSAqIGFuZCBpdCB3b3VsZCBjb25mbGljdCB3aXRoIC0ta2VlcC1zdWJqZWN0ICgtaykgZnJvbSB0aGUKKwkgKiBjb21tYW5kIGxpbmUsIHJlc2V0ICJudW1iZXJlZCIuCisJICovCisJaWYgKG51bWJlcmVkICYmIGtlZXBfc3ViamVjdCAmJiAhbnVtYmVyZWRfY21kbGluZV9vcHQpCisJCW51bWJlcmVkID0gMDsKKworCWlmIChudW1iZXJlZCAmJiBrZWVwX3N1YmplY3QpCisJCWRpZSAoXygiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIikpOworCWlmIChrZWVwX3N1YmplY3QgJiYgc3ViamVjdF9wcmVmaXgpCisJCWRpZSAoXygiLS1zdWJqZWN0LXByZWZpeCBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iKSk7CisJcmV2LnByZXNlcnZlX3N1YmplY3QgPSBrZWVwX3N1YmplY3Q7CisKKwlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsICZyZXYsICZzX3Jfb3B0KTsKKwlpZiAoYXJnYyA+IDEpCisJCWRpZSAoXygidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIpLCBhcmd2WzFdKTsKKworCWlmIChyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTkFNRSkKKwkJZGllKF8oIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiKSk7CisJaWYgKHJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykKKwkJZGllKF8oIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIpKTsKKwlpZiAocmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NIRUNLRElGRikKKwkJZGllKF8oIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIpKTsKKworCWlmICghdXNlX3BhdGNoX2Zvcm1hdCAmJgorCQkoIXJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgfHwKKwkJIHJldi5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPT0gRElGRl9GT1JNQVRfUEFUQ0gpKQorCQlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfRElGRlNUQVQgfCBESUZGX0ZPUk1BVF9TVU1NQVJZOworCisJLyogQWx3YXlzIGdlbmVyYXRlIGEgcGF0Y2ggKi8KKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1BBVENIOworCisJaWYgKCFESUZGX09QVF9UU1QoJnJldi5kaWZmb3B0LCBURVhUKSAmJiAhbm9fYmluYXJ5X2RpZmYpCisJCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIEJJTkFSWSk7CisKKwlpZiAocmV2LnNob3dfbm90ZXMpCisJCWluaXRfZGlzcGxheV9ub3RlcygmcmV2Lm5vdGVzX29wdCk7CisKKwlpZiAoIXVzZV9zdGRvdXQpCisJCW91dHB1dF9kaXJlY3RvcnkgPSBzZXRfb3V0ZGlyKHByZWZpeCwgb3V0cHV0X2RpcmVjdG9yeSk7CisJZWxzZQorCQlzZXR1cF9wYWdlcigpOworCisJaWYgKG91dHB1dF9kaXJlY3RvcnkpIHsKKwkJaWYgKHVzZV9zdGRvdXQpCisJCQlkaWUoXygic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iKSk7CisJCWlmIChta2RpcihvdXRwdXRfZGlyZWN0b3J5LCAwNzc3KSA8IDAgJiYgZXJybm8gIT0gRUVYSVNUKQorCQkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciKSwKKwkJCQkgIG91dHB1dF9kaXJlY3RvcnkpOworCX0KKworCWlmIChyZXYucGVuZGluZy5uciA9PSAxKSB7CisJCWludCBjaGVja19oZWFkID0gMDsKKworCQlpZiAocmV2Lm1heF9jb3VudCA8IDAgJiYgIXJldi5zaG93X3Jvb3RfZGlmZikgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgdHJhZGl0aW9uYWwgYmVoYXZpb3VyIG9mICJnaXQgZm9ybWF0LXBhdGNoCisJCQkgKiBvcmlnaW4iIHRoYXQgcHJlcGFyZXMgd2hhdCB0aGUgb3JpZ2luIHNpZGUgc3RpbGwKKwkJCSAqIGRvZXMgbm90IGhhdmUuCisJCQkgKi8KKwkJCXJldi5wZW5kaW5nLm9iamVjdHNbMF0uaXRlbS0+ZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCWFkZF9oZWFkX3RvX3BlbmRpbmcoJnJldik7CisJCQljaGVja19oZWFkID0gMTsKKwkJfQorCQkvKgorCQkgKiBPdGhlcndpc2UsIGl0IGlzICJmb3JtYXQtcGF0Y2ggLTIyIEhFQUQiLCBhbmQvb3IKKwkJICogImZvcm1hdC1wYXRjaCAtLXJvb3QgSEVBRCIuICBUaGUgdXNlciB3YW50cworCQkgKiBnZXRfcmV2aXNpb24oKSB0byBkbyB0aGUgdXN1YWwgdHJhdmVyc2FsLgorCQkgKi8KKworCQlpZiAoIXN0cmNtcChyZXYucGVuZGluZy5vYmplY3RzWzBdLm5hbWUsICJIRUFEIikpCisJCQljaGVja19oZWFkID0gMTsKKworCQlpZiAoY2hlY2tfaGVhZCkgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJCWNvbnN0IGNoYXIgKnJlZiwgKnY7CisJCQlyZWYgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkJIHNoYTEsIE5VTEwpOworCQkJaWYgKHJlZiAmJiBza2lwX3ByZWZpeChyZWYsICJyZWZzL2hlYWRzLyIsICZ2KSkKKwkJCQlicmFuY2hfbmFtZSA9IHhzdHJkdXAodik7CisJCQllbHNlCisJCQkJYnJhbmNoX25hbWUgPSB4c3RyZHVwKCIiKTsgLyogbm8gYnJhbmNoICovCisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGNhbm5vdCBtb3ZlIHRoaXMgYW55d2hlcmUgZWFybGllciBiZWNhdXNlIHdlIGRvIHdhbnQgdG8KKwkgKiBrbm93IGlmIC0tcm9vdCB3YXMgZ2l2ZW4gZXhwbGljaXRseSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCisJICovCisJcmV2LnNob3dfcm9vdF9kaWZmID0gMTsKKworCWlmIChpZ25vcmVfaWZfaW5fdXBzdHJlYW0pIHsKKwkJLyogRG9uJ3Qgc2F5IGFueXRoaW5nIGlmIGhlYWQgYW5kIHVwc3RyZWFtIGFyZSB0aGUgc2FtZS4gKi8KKwkJaWYgKHJldi5wZW5kaW5nLm5yID09IDIpIHsKKwkJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm8gPSByZXYucGVuZGluZy5vYmplY3RzOworCQkJaWYgKGhhc2hjbXAob1swXS5pdGVtLT5zaGExLCBvWzFdLml0ZW0tPnNoYTEpID09IDApCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJZ2V0X3BhdGNoX2lkcygmcmV2LCAmaWRzKTsKKwl9CisKKwlpZiAoIXVzZV9zdGRvdXQpCisJCXJlYWxzdGRvdXQgPSB4ZmRvcGVuKHhkdXAoMSksICJ3Iik7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXYpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisJcmV2LmJvdW5kYXJ5ID0gMTsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2KSkgIT0gTlVMTCkgeworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBCT1VOREFSWSkgeworCQkJYm91bmRhcnlfY291bnQrKzsKKwkJCW9yaWdpbiA9IChib3VuZGFyeV9jb3VudCA9PSAxKSA/IGNvbW1pdCA6IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpZ25vcmVfaWZfaW5fdXBzdHJlYW0gJiYgaGFzX2NvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMpKQorCQkJY29udGludWU7CisKKwkJbnIrKzsKKwkJUkVBTExPQ19BUlJBWShsaXN0LCBucik7CisJCWxpc3RbbnIgLSAxXSA9IGNvbW1pdDsKKwl9CisJaWYgKG5yID09IDApCisJCS8qIG5vdGhpbmcgdG8gZG8gKi8KKwkJcmV0dXJuIDA7CisJdG90YWwgPSBucjsKKwlpZiAoIWtlZXBfc3ViamVjdCAmJiBhdXRvX251bWJlciAmJiB0b3RhbCA+IDEpCisJCW51bWJlcmVkID0gMTsKKwlpZiAobnVtYmVyZWQpCisJCXJldi50b3RhbCA9IHRvdGFsICsgc3RhcnRfbnVtYmVyIC0gMTsKKwlpZiAoY292ZXJfbGV0dGVyID09IC0xKSB7CisJCWlmIChjb25maWdfY292ZXJfbGV0dGVyID09IENPVkVSX0FVVE8pCisJCQljb3Zlcl9sZXR0ZXIgPSAodG90YWwgPiAxKTsKKwkJZWxzZQorCQkJY292ZXJfbGV0dGVyID0gKGNvbmZpZ19jb3Zlcl9sZXR0ZXIgPT0gQ09WRVJfT04pOworCX0KKworCWlmICghc2lnbmF0dXJlKSB7CisJCTsgLyogLS1uby1zaWduYXR1cmUgaW5oaWJpdHMgYWxsIHNpZ25hdHVyZXMgKi8KKwl9IGVsc2UgaWYgKHNpZ25hdHVyZSAmJiBzaWduYXR1cmUgIT0gZ2l0X3ZlcnNpb25fc3RyaW5nKSB7CisJCTsgLyogbm9uLWRlZmF1bHQgc2lnbmF0dXJlIGFscmVhZHkgc2V0ICovCisJfSBlbHNlIGlmIChzaWduYXR1cmVfZmlsZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCWlmIChzdHJidWZfcmVhZF9maWxlKCZidWYsIHNpZ25hdHVyZV9maWxlLCAxMjgpIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gcmVhZCBzaWduYXR1cmUgZmlsZSAnJXMnIiksIHNpZ25hdHVyZV9maWxlKTsKKwkJc2lnbmF0dXJlID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwl9CisKKwlpZiAoaW5fcmVwbHlfdG8gfHwgdGhyZWFkIHx8IGNvdmVyX2xldHRlcikKKwkJcmV2LnJlZl9tZXNzYWdlX2lkcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCWlmIChpbl9yZXBseV90bykgeworCQljb25zdCBjaGFyICptc2dpZCA9IGNsZWFuX21lc3NhZ2VfaWQoaW5fcmVwbHlfdG8pOworCQlzdHJpbmdfbGlzdF9hcHBlbmQocmV2LnJlZl9tZXNzYWdlX2lkcywgbXNnaWQpOworCX0KKwlyZXYubnVtYmVyZWRfZmlsZXMgPSBqdXN0X251bWJlcnM7CisJcmV2LnBhdGNoX3N1ZmZpeCA9IGZtdF9wYXRjaF9zdWZmaXg7CisJaWYgKGNvdmVyX2xldHRlcikgeworCQlpZiAodGhyZWFkKQorCQkJZ2VuX21lc3NhZ2VfaWQoJnJldiwgImNvdmVyIik7CisJCW1ha2VfY292ZXJfbGV0dGVyKCZyZXYsIHVzZV9zdGRvdXQsCisJCQkJICBvcmlnaW4sIG5yLCBsaXN0LCBicmFuY2hfbmFtZSwgcXVpZXQpOworCQl0b3RhbCsrOworCQlzdGFydF9udW1iZXItLTsKKwl9CisJcmV2LmFkZF9zaWdub2ZmID0gZG9fc2lnbm9mZjsKKwl3aGlsZSAoMCA8PSAtLW5yKSB7CisJCWludCBzaG93bjsKKwkJY29tbWl0ID0gbGlzdFtucl07CisJCXJldi5uciA9IHRvdGFsIC0gbnIgKyAoc3RhcnRfbnVtYmVyIC0gMSk7CisJCS8qIE1ha2UgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudCBtYWlscyByZXBsaWVzIHRvIHRoZSBmaXJzdCAqLworCQlpZiAodGhyZWFkKSB7CisJCQkvKiBIYXZlIHdlIGFscmVhZHkgaGFkIGEgbWVzc2FnZSBJRD8gKi8KKwkJCWlmIChyZXYubWVzc2FnZV9pZCkgeworCQkJCS8qCisJCQkJICogRm9yIGRlZXAgdGhyZWFkaW5nOiBtYWtlIGV2ZXJ5IG1haWwKKwkJCQkgKiBhIHJlcGx5IHRvIHRoZSBwcmV2aW91cyBvbmUsIG5vCisJCQkJICogbWF0dGVyIHdoYXQgb3RoZXIgb3B0aW9ucyBhcmUgc2V0LgorCQkJCSAqCisJCQkJICogRm9yIHNoYWxsb3cgdGhyZWFkaW5nOgorCQkJCSAqCisJCQkJICogV2l0aG91dCAtLWNvdmVyLWxldHRlciBhbmQKKwkJCQkgKiAtLWluLXJlcGx5LXRvLCBtYWtlIGV2ZXJ5IG1haWwgYQorCQkJCSAqIHJlcGx5IHRvIHRoZSBvbmUgYmVmb3JlLgorCQkJCSAqCisJCQkJICogV2l0aCAtLWluLXJlcGx5LXRvIGJ1dCBubworCQkJCSAqIC0tY292ZXItbGV0dGVyLCBtYWtlIGV2ZXJ5IG1haWwgYQorCQkJCSAqIHJlcGx5IHRvIHRoZSA8cmVwbHktdG8+LgorCQkJCSAqCisJCQkJICogV2l0aCAtLWNvdmVyLWxldHRlciwgbWFrZSBldmVyeQorCQkJCSAqIG1haWwgYnV0IHRoZSBjb3ZlciBsZXR0ZXIgYSByZXBseQorCQkJCSAqIHRvIHRoZSBjb3ZlciBsZXR0ZXIuICBUaGUgY292ZXIKKwkJCQkgKiBsZXR0ZXIgaXMgYSByZXBseSB0byB0aGUKKwkJCQkgKiAtLWluLXJlcGx5LXRvLCBpZiBzcGVjaWZpZWQuCisJCQkJICovCisJCQkJaWYgKHRocmVhZCA9PSBUSFJFQURfU0hBTExPVworCQkJCSAgICAmJiByZXYucmVmX21lc3NhZ2VfaWRzLT5uciA+IDAKKwkJCQkgICAgJiYgKCFjb3Zlcl9sZXR0ZXIgfHwgcmV2Lm5yID4gMSkpCisJCQkJCWZyZWUocmV2Lm1lc3NhZ2VfaWQpOworCQkJCWVsc2UKKwkJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKHJldi5yZWZfbWVzc2FnZV9pZHMsCisJCQkJCQkJICAgcmV2Lm1lc3NhZ2VfaWQpOworCQkJfQorCQkJZ2VuX21lc3NhZ2VfaWQoJnJldiwgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCQl9CisKKwkJaWYgKCF1c2Vfc3Rkb3V0ICYmCisJCSAgICByZW9wZW5fc3Rkb3V0KHJldi5udW1iZXJlZF9maWxlcyA/IE5VTEwgOiBjb21taXQsIE5VTEwsICZyZXYsIHF1aWV0KSkKKwkJCWRpZShfKCJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIpKTsKKwkJc2hvd24gPSBsb2dfdHJlZV9jb21taXQoJnJldiwgY29tbWl0KTsKKwkJZnJlZV9jb21taXRfYnVmZmVyKGNvbW1pdCk7CisKKwkJLyogV2UgcHV0IG9uZSBleHRyYSBibGFuayBsaW5lIGJldHdlZW4gZm9ybWF0dGVkCisJCSAqIHBhdGNoZXMgYW5kIHRoaXMgZmxhZyBpcyB1c2VkIGJ5IGxvZy10cmVlIGNvZGUKKwkJICogdG8gc2VlIGlmIGl0IG5lZWRzIHRvIGVtaXQgYSBMRiBiZWZvcmUgc2hvd2luZworCQkgKiB0aGUgbG9nOyB3aGVuIHVzaW5nIG9uZSBmaWxlIHBlciBwYXRjaCwgd2UgZG8KKwkJICogbm90IHdhbnQgdGhlIGV4dHJhIGJsYW5rIGxpbmUuCisJCSAqLworCQlpZiAoIXVzZV9zdGRvdXQpCisJCQlyZXYuc2hvd25fb25lID0gMDsKKwkJaWYgKHNob3duKSB7CisJCQlpZiAocmV2Lm1pbWVfYm91bmRhcnkpCisJCQkJcHJpbnRmKCJcbi0tJXMlcy0tXG5cblxuIiwKKwkJCQkgICAgICAgbWltZV9ib3VuZGFyeV9sZWFkZXIsCisJCQkJICAgICAgIHJldi5taW1lX2JvdW5kYXJ5KTsKKwkJCWVsc2UKKwkJCQlwcmludF9zaWduYXR1cmUoKTsKKwkJfQorCQlpZiAoIXVzZV9zdGRvdXQpCisJCQlmY2xvc2Uoc3Rkb3V0KTsKKwl9CisJZnJlZShsaXN0KTsKKwlmcmVlKGJyYW5jaF9uYW1lKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZXh0cmFfdG8sIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZleHRyYV9jYywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmV4dHJhX2hkciwgMCk7CisJaWYgKGlnbm9yZV9pZl9pbl91cHN0cmVhbSkKKwkJZnJlZV9wYXRjaF9pZHMoJmlkcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3BlbmRpbmdfY29tbWl0KGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpZiAoZ2V0X3NoYTEoYXJnLCBzaGExKSA9PSAwKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCQlpZiAoY29tbWl0KSB7CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBmbGFnczsKKwkJCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCAmY29tbWl0LT5vYmplY3QsIGFyZyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2hlcnJ5X3VzYWdlW10gPSB7CisJTl8oImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIiksCisJTlVMTAorfTsKKworc3RhdGljIHZvaWQgcHJpbnRfY29tbWl0KGNoYXIgc2lnbiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgdmVyYm9zZSwKKwkJCSBpbnQgYWJicmV2KQoreworCWlmICghdmVyYm9zZSkgeworCQlwcmludGYoIiVjICVzXG4iLCBzaWduLAorCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIGFiYnJldikpOworCX0gZWxzZSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXBwX2NvbW1pdF9lYXN5KENNSVRfRk1UX09ORUxJTkUsIGNvbW1pdCwgJmJ1Zik7CisJCXByaW50ZigiJWMgJXMgJXNcbiIsIHNpZ24sCisJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgYWJicmV2KSwKKwkJICAgICAgIGJ1Zi5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9Cit9CisKK2ludCBjbWRfY2hlcnJ5KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBwYXRjaF9pZHMgaWRzOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOworCXN0cnVjdCBicmFuY2ggKmN1cnJlbnRfYnJhbmNoOworCWNvbnN0IGNoYXIgKnVwc3RyZWFtOworCWNvbnN0IGNoYXIgKmhlYWQgPSAiSEVBRCI7CisJY29uc3QgY2hhciAqbGltaXQgPSBOVUxMOworCWludCB2ZXJib3NlID0gMCwgYWJicmV2ID0gMDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgY2hlcnJ5X3VzYWdlLCAwKTsKKworCXN3aXRjaCAoYXJnYykgeworCWNhc2UgMzoKKwkJbGltaXQgPSBhcmd2WzJdOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgMjoKKwkJaGVhZCA9IGFyZ3ZbMV07CisJCS8qIEZBTExUSFJPVUdIICovCisJY2FzZSAxOgorCQl1cHN0cmVhbSA9IGFyZ3ZbMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWN1cnJlbnRfYnJhbmNoID0gYnJhbmNoX2dldChOVUxMKTsKKwkJdXBzdHJlYW0gPSBicmFuY2hfZ2V0X3Vwc3RyZWFtKGN1cnJlbnRfYnJhbmNoLCBOVUxMKTsKKwkJaWYgKCF1cHN0cmVhbSkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCIKKwkJCQkJIiByZW1vdGUgYnJhbmNoLCBwbGVhc2UiCisJCQkJCSIgc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIikpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGNoZXJyeV91c2FnZSwgb3B0aW9ucyk7CisJCX0KKwl9CisKKwlpbml0X3JldmlzaW9ucygmcmV2cywgcHJlZml4KTsKKwlyZXZzLm1heF9wYXJlbnRzID0gMTsKKworCWlmIChhZGRfcGVuZGluZ19jb21taXQoaGVhZCwgJnJldnMsIDApKQorCQlkaWUoXygiVW5rbm93biBjb21taXQgJXMiKSwgaGVhZCk7CisJaWYgKGFkZF9wZW5kaW5nX2NvbW1pdCh1cHN0cmVhbSwgJnJldnMsIFVOSU5URVJFU1RJTkcpKQorCQlkaWUoXygiVW5rbm93biBjb21taXQgJXMiKSwgdXBzdHJlYW0pOworCisJLyogRG9uJ3Qgc2F5IGFueXRoaW5nIGlmIGhlYWQgYW5kIHVwc3RyZWFtIGFyZSB0aGUgc2FtZS4gKi8KKwlpZiAocmV2cy5wZW5kaW5nLm5yID09IDIpIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqbyA9IHJldnMucGVuZGluZy5vYmplY3RzOworCQlpZiAoaGFzaGNtcChvWzBdLml0ZW0tPnNoYTEsIG9bMV0uaXRlbS0+c2hhMSkgPT0gMCkKKwkJCXJldHVybiAwOworCX0KKworCWdldF9wYXRjaF9pZHMoJnJldnMsICZpZHMpOworCisJaWYgKGxpbWl0ICYmIGFkZF9wZW5kaW5nX2NvbW1pdChsaW1pdCwgJnJldnMsIFVOSU5URVJFU1RJTkcpKQorCQlkaWUoXygiVW5rbm93biBjb21taXQgJXMiKSwgbGltaXQpOworCisJLyogcmV2ZXJzZSB0aGUgbGlzdCBvZiBjb21taXRzICovCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2cykpICE9IE5VTEwpIHsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgJmxpc3QpOworCX0KKworCXdoaWxlIChsaXN0KSB7CisJCWNoYXIgc2lnbiA9ICcrJzsKKworCQljb21taXQgPSBsaXN0LT5pdGVtOworCQlpZiAoaGFzX2NvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMpKQorCQkJc2lnbiA9ICctJzsKKwkJcHJpbnRfY29tbWl0KHNpZ24sIGNvbW1pdCwgdmVyYm9zZSwgYWJicmV2KTsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCisJZnJlZV9wYXRjaF9pZHMoJmlkcyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2xzLWZpbGVzLmMgYi9idWlsdGluL2xzLWZpbGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhN2NiMAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbHMtZmlsZXMuYwpAQCAtMCwwICsxLDU1NCBAQAorLyoKKyAqIFRoaXMgbWVyZ2VzIHRoZSBmaWxlIGxpc3RpbmcgaW4gdGhlIGRpcmVjdG9yeSBjYWNoZSBpbmRleAorICogd2l0aCB0aGUgYWN0dWFsIHdvcmtpbmcgZGlyZWN0b3J5IGxpc3QsIGFuZCBzaG93cyBkaWZmZXJlbnQKKyAqIGNvbWJpbmF0aW9ucyBvZiB0aGUgdHdvLgorICoKKyAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisKK3N0YXRpYyBpbnQgYWJicmV2Oworc3RhdGljIGludCBzaG93X2RlbGV0ZWQ7CitzdGF0aWMgaW50IHNob3dfY2FjaGVkOworc3RhdGljIGludCBzaG93X290aGVyczsKK3N0YXRpYyBpbnQgc2hvd19zdGFnZTsKK3N0YXRpYyBpbnQgc2hvd191bm1lcmdlZDsKK3N0YXRpYyBpbnQgc2hvd19yZXNvbHZlX3VuZG87CitzdGF0aWMgaW50IHNob3dfbW9kaWZpZWQ7CitzdGF0aWMgaW50IHNob3dfa2lsbGVkOworc3RhdGljIGludCBzaG93X3ZhbGlkX2JpdDsKK3N0YXRpYyBpbnQgbGluZV90ZXJtaW5hdG9yID0gJ1xuJzsKK3N0YXRpYyBpbnQgZGVidWdfbW9kZTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnByZWZpeDsKK3N0YXRpYyBpbnQgbWF4X3ByZWZpeF9sZW47CitzdGF0aWMgaW50IHByZWZpeF9sZW47CitzdGF0aWMgc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworc3RhdGljIGludCBlcnJvcl91bm1hdGNoOworc3RhdGljIGNoYXIgKnBzX21hdGNoZWQ7CitzdGF0aWMgY29uc3QgY2hhciAqd2l0aF90cmVlOworc3RhdGljIGludCBleGNfZ2l2ZW47CitzdGF0aWMgaW50IGV4Y2x1ZGVfYXJnczsKKworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19jYWNoZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfdW5tZXJnZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfcmVtb3ZlZCA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19vdGhlciA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19raWxsZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfbW9kaWZpZWQgPSAiIjsKK3N0YXRpYyBjb25zdCBjaGFyICp0YWdfc2tpcF93b3JrdHJlZSA9ICIiOworc3RhdGljIGNvbnN0IGNoYXIgKnRhZ19yZXNvbHZlX3VuZG8gPSAiIjsKKworc3RhdGljIHZvaWQgd3JpdGVfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCS8qCisJICogV2l0aCAiLS1mdWxsLW5hbWUiLCBwcmVmaXhfbGVuPTA7IHRoaXMgY2FsbGVyIG5lZWRzIHRvIHBhc3MKKwkgKiBhbiBlbXB0eSBzdHJpbmcgaW4gdGhhdCBjYXNlIChhIE5VTEwgaXMgZ29vZCBmb3IgIiIpLgorCSAqLworCXdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKG5hbWUsIHByZWZpeF9sZW4gPyBwcmVmaXggOiBOVUxMLAorCQkJCSAgIHN0ZG91dCwgbGluZV90ZXJtaW5hdG9yKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19kaXJfZW50cnkoY29uc3QgY2hhciAqdGFnLCBzdHJ1Y3QgZGlyX2VudHJ5ICplbnQpCit7CisJaW50IGxlbiA9IG1heF9wcmVmaXhfbGVuOworCisJaWYgKGxlbiA+PSBlbnQtPmxlbikKKwkJZGllKCJnaXQgbHMtZmlsZXM6IGludGVybmFsIGVycm9yIC0gZGlyZWN0b3J5IGVudHJ5IG5vdCBzdXBlcnNldCBvZiBwcmVmaXgiKTsKKworCWlmICghZGlyX3BhdGhfbWF0Y2goZW50LCAmcGF0aHNwZWMsIGxlbiwgcHNfbWF0Y2hlZCkpCisJCXJldHVybjsKKworCWZwdXRzKHRhZywgc3Rkb3V0KTsKKwl3cml0ZV9uYW1lKGVudC0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb3RoZXJfZmlsZXMoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpcl9lbnRyeSAqZW50ID0gZGlyLT5lbnRyaWVzW2ldOworCQlpZiAoIWNhY2hlX25hbWVfaXNfb3RoZXIoZW50LT5uYW1lLCBlbnQtPmxlbikpCisJCQljb250aW51ZTsKKwkJc2hvd19kaXJfZW50cnkodGFnX290aGVyLCBlbnQpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19raWxsZWRfZmlsZXMoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaXJfZW50cnkgKmVudCA9IGRpci0+ZW50cmllc1tpXTsKKwkJY2hhciAqY3AsICpzcDsKKwkJaW50IHBvcywgbGVuLCBraWxsZWQgPSAwOworCisJCWZvciAoY3AgPSBlbnQtPm5hbWU7IGNwIC0gZW50LT5uYW1lIDwgZW50LT5sZW47IGNwID0gc3AgKyAxKSB7CisJCQlzcCA9IHN0cmNocihjcCwgJy8nKTsKKwkJCWlmICghc3ApIHsKKwkJCQkvKiBJZiBlbnQtPm5hbWUgaXMgcHJlZml4IG9mIGFuIGVudHJ5IGluIHRoZQorCQkJCSAqIGNhY2hlLCBpdCB3aWxsIGJlIGtpbGxlZC4KKwkJCQkgKi8KKwkJCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhlbnQtPm5hbWUsIGVudC0+bGVuKTsKKwkJCQlpZiAoMCA8PSBwb3MpCisJCQkJCWRpZSgiYnVnIGluIHNob3cta2lsbGVkLWZpbGVzIik7CisJCQkJcG9zID0gLXBvcyAtIDE7CisJCQkJd2hpbGUgKHBvcyA8IGFjdGl2ZV9uciAmJgorCQkJCSAgICAgICBjZV9zdGFnZShhY3RpdmVfY2FjaGVbcG9zXSkpCisJCQkJCXBvcysrOyAvKiBza2lwIHVubWVyZ2VkICovCisJCQkJaWYgKGFjdGl2ZV9uciA8PSBwb3MpCisJCQkJCWJyZWFrOworCQkJCS8qIHBvcyBwb2ludHMgYXQgYSBuYW1lIGltbWVkaWF0ZWx5IGFmdGVyCisJCQkJICogZW50LT5uYW1lIGluIHRoZSBjYWNoZS4gIERvZXMgaXQgZXhwZWN0CisJCQkJICogZW50LT5uYW1lIHRvIGJlIGEgZGlyZWN0b3J5PworCQkJCSAqLworCQkJCWxlbiA9IGNlX25hbWVsZW4oYWN0aXZlX2NhY2hlW3Bvc10pOworCQkJCWlmICgoZW50LT5sZW4gPCBsZW4pICYmCisJCQkJICAgICFzdHJuY21wKGFjdGl2ZV9jYWNoZVtwb3NdLT5uYW1lLAorCQkJCQkgICAgIGVudC0+bmFtZSwgZW50LT5sZW4pICYmCisJCQkJICAgIGFjdGl2ZV9jYWNoZVtwb3NdLT5uYW1lW2VudC0+bGVuXSA9PSAnLycpCisJCQkJCWtpbGxlZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoMCA8PSBjYWNoZV9uYW1lX3BvcyhlbnQtPm5hbWUsIHNwIC0gZW50LT5uYW1lKSkgeworCQkJCS8qIElmIGFueSBvZiB0aGUgbGVhZGluZyBkaXJlY3RvcmllcyBpbgorCQkJCSAqIGVudC0+bmFtZSBpcyByZWdpc3RlcmVkIGluIHRoZSBjYWNoZSwKKwkJCQkgKiBlbnQtPm5hbWUgd2lsbCBiZSBraWxsZWQuCisJCQkJICovCisJCQkJa2lsbGVkID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoa2lsbGVkKQorCQkJc2hvd19kaXJfZW50cnkodGFnX2tpbGxlZCwgZGlyLT5lbnRyaWVzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfY2VfZW50cnkoY29uc3QgY2hhciAqdGFnLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCWludCBsZW4gPSBtYXhfcHJlZml4X2xlbjsKKworCWlmIChsZW4gPj0gY2VfbmFtZWxlbihjZSkpCisJCWRpZSgiZ2l0IGxzLWZpbGVzOiBpbnRlcm5hbCBlcnJvciAtIGNhY2hlIGVudHJ5IG5vdCBzdXBlcnNldCBvZiBwcmVmaXgiKTsKKworCWlmICghbWF0Y2hfcGF0aHNwZWMoJnBhdGhzcGVjLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksCisJCQkgICAgbGVuLCBwc19tYXRjaGVkLAorCQkJICAgIFNfSVNESVIoY2UtPmNlX21vZGUpIHx8IFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkpCisJCXJldHVybjsKKworCWlmICh0YWcgJiYgKnRhZyAmJiBzaG93X3ZhbGlkX2JpdCAmJgorCSAgICAoY2UtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpKSB7CisJCXN0YXRpYyBjaGFyIGFsdHRhZ1s0XTsKKwkJbWVtY3B5KGFsdHRhZywgdGFnLCAzKTsKKwkJaWYgKGlzYWxwaGEodGFnWzBdKSkKKwkJCWFsdHRhZ1swXSA9IHRvbG93ZXIodGFnWzBdKTsKKwkJZWxzZSBpZiAodGFnWzBdID09ICc/JykKKwkJCWFsdHRhZ1swXSA9ICchJzsKKwkJZWxzZSB7CisJCQlhbHR0YWdbMF0gPSAndic7CisJCQlhbHR0YWdbMV0gPSB0YWdbMF07CisJCQlhbHR0YWdbMl0gPSAnICc7CisJCQlhbHR0YWdbM10gPSAwOworCQl9CisJCXRhZyA9IGFsdHRhZzsKKwl9CisKKwlpZiAoIXNob3dfc3RhZ2UpIHsKKwkJZnB1dHModGFnLCBzdGRvdXQpOworCX0gZWxzZSB7CisJCXByaW50ZigiJXMlMDZvICVzICVkXHQiLAorCQkgICAgICAgdGFnLAorCQkgICAgICAgY2UtPmNlX21vZGUsCisJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoY2UtPnNoYTEsYWJicmV2KSwKKwkJICAgICAgIGNlX3N0YWdlKGNlKSk7CisJfQorCXdyaXRlX25hbWUoY2UtPm5hbWUpOworCWlmIChkZWJ1Z19tb2RlKSB7CisJCWNvbnN0IHN0cnVjdCBzdGF0X2RhdGEgKnNkID0gJmNlLT5jZV9zdGF0X2RhdGE7CisKKwkJcHJpbnRmKCIgIGN0aW1lOiAlZDolZFxuIiwgc2QtPnNkX2N0aW1lLnNlYywgc2QtPnNkX2N0aW1lLm5zZWMpOworCQlwcmludGYoIiAgbXRpbWU6ICVkOiVkXG4iLCBzZC0+c2RfbXRpbWUuc2VjLCBzZC0+c2RfbXRpbWUubnNlYyk7CisJCXByaW50ZigiICBkZXY6ICVkXHRpbm86ICVkXG4iLCBzZC0+c2RfZGV2LCBzZC0+c2RfaW5vKTsKKwkJcHJpbnRmKCIgIHVpZDogJWRcdGdpZDogJWRcbiIsIHNkLT5zZF91aWQsIHNkLT5zZF9naWQpOworCQlwcmludGYoIiAgc2l6ZTogJWRcdGZsYWdzOiAleFxuIiwgc2QtPnNkX3NpemUsIGNlLT5jZV9mbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3J1X2luZm8odm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWlmICghdGhlX2luZGV4LnJlc29sdmVfdW5kbykKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCB0aGVfaW5kZXgucmVzb2x2ZV91bmRvKSB7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBpdGVtLT5zdHJpbmc7CisJCXN0cnVjdCByZXNvbHZlX3VuZG9faW5mbyAqdWkgPSBpdGVtLT51dGlsOworCQlpbnQgaSwgbGVuOworCisJCWxlbiA9IHN0cmxlbihwYXRoKTsKKwkJaWYgKGxlbiA8IG1heF9wcmVmaXhfbGVuKQorCQkJY29udGludWU7IC8qIG91dHNpZGUgb2YgdGhlIHByZWZpeCAqLworCQlpZiAoIW1hdGNoX3BhdGhzcGVjKCZwYXRoc3BlYywgcGF0aCwgbGVuLAorCQkJCSAgICBtYXhfcHJlZml4X2xlbiwgcHNfbWF0Y2hlZCwgMCkpCisJCQljb250aW51ZTsgLyogdW5pbnRlcmVzdGVkICovCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCWlmICghdWktPm1vZGVbaV0pCisJCQkJY29udGludWU7CisJCQlwcmludGYoIiVzJTA2byAlcyAlZFx0IiwgdGFnX3Jlc29sdmVfdW5kbywgdWktPm1vZGVbaV0sCisJCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KHVpLT5zaGExW2ldLCBhYmJyZXYpLAorCQkJICAgICAgIGkgKyAxKTsKKwkJCXdyaXRlX25hbWUocGF0aCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY2VfZXhjbHVkZWQoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpbnQgZHR5cGUgPSBjZV90b19kdHlwZShjZSk7CisJcmV0dXJuIGlzX2V4Y2x1ZGVkKGRpciwgY2UtPm5hbWUsICZkdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZmlsZXMoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcikKK3sKKwlpbnQgaTsKKworCS8qIEZvciBjYWNoZWQvZGVsZXRlZCBmaWxlcyB3ZSBkb24ndCBuZWVkIHRvIGV2ZW4gZG8gdGhlIHJlYWRkaXIgKi8KKwlpZiAoc2hvd19vdGhlcnMgfHwgc2hvd19raWxsZWQpIHsKKwkJaWYgKCFzaG93X290aGVycykKKwkJCWRpci0+ZmxhZ3MgfD0gRElSX0NPTExFQ1RfS0lMTEVEX09OTFk7CisJCWZpbGxfZGlyZWN0b3J5KGRpciwgJnBhdGhzcGVjKTsKKwkJaWYgKHNob3dfb3RoZXJzKQorCQkJc2hvd19vdGhlcl9maWxlcyhkaXIpOworCQlpZiAoc2hvd19raWxsZWQpCisJCQlzaG93X2tpbGxlZF9maWxlcyhkaXIpOworCX0KKwlpZiAoc2hvd19jYWNoZWQgfHwgc2hvd19zdGFnZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCQlpZiAoKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSAmJgorCQkJICAgICFjZV9leGNsdWRlZChkaXIsIGNlKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzaG93X3VubWVyZ2VkICYmICFjZV9zdGFnZShjZSkpCisJCQkJY29udGludWU7CisJCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKQorCQkJCWNvbnRpbnVlOworCQkJc2hvd19jZV9lbnRyeShjZV9zdGFnZShjZSkgPyB0YWdfdW5tZXJnZWQgOgorCQkJCShjZV9za2lwX3dvcmt0cmVlKGNlKSA/IHRhZ19za2lwX3dvcmt0cmVlIDogdGFnX2NhY2hlZCksIGNlKTsKKwkJfQorCX0KKwlpZiAoc2hvd19kZWxldGVkIHx8IHNob3dfbW9kaWZpZWQpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQlpbnQgZXJyOworCQkJaWYgKChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkgJiYKKwkJCSAgICAhY2VfZXhjbHVkZWQoZGlyLCBjZSkpCisJCQkJY29udGludWU7CisJCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNlX3NraXBfd29ya3RyZWUoY2UpKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gbHN0YXQoY2UtPm5hbWUsICZzdCk7CisJCQlpZiAoc2hvd19kZWxldGVkICYmIGVycikKKwkJCQlzaG93X2NlX2VudHJ5KHRhZ19yZW1vdmVkLCBjZSk7CisJCQlpZiAoc2hvd19tb2RpZmllZCAmJiBjZV9tb2RpZmllZChjZSwgJnN0LCAwKSkKKwkJCQlzaG93X2NlX2VudHJ5KHRhZ19tb2RpZmllZCwgY2UpOworCQl9CisJfQorfQorCisvKgorICogUHJ1bmUgdGhlIGluZGV4IHRvIG9ubHkgY29udGFpbiBzdHVmZiBzdGFydGluZyB3aXRoICJwcmVmaXgiCisgKi8KK3N0YXRpYyB2b2lkIHBydW5lX2NhY2hlKGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcG9zID0gY2FjaGVfbmFtZV9wb3MocHJlZml4LCBtYXhfcHJlZml4X2xlbik7CisJdW5zaWduZWQgaW50IGZpcnN0LCBsYXN0OworCisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC1wb3MtMTsKKwltZW1tb3ZlKGFjdGl2ZV9jYWNoZSwgYWN0aXZlX2NhY2hlICsgcG9zLAorCQkoYWN0aXZlX25yIC0gcG9zKSAqIHNpemVvZihzdHJ1Y3QgY2FjaGVfZW50cnkgKikpOworCWFjdGl2ZV9uciAtPSBwb3M7CisJZmlyc3QgPSAwOworCWxhc3QgPSBhY3RpdmVfbnI7CisJd2hpbGUgKGxhc3QgPiBmaXJzdCkgeworCQlpbnQgbmV4dCA9IChsYXN0ICsgZmlyc3QpID4+IDE7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbbmV4dF07CisJCWlmICghc3RybmNtcChjZS0+bmFtZSwgcHJlZml4LCBtYXhfcHJlZml4X2xlbikpIHsKKwkJCWZpcnN0ID0gbmV4dCsxOworCQkJY29udGludWU7CisJCX0KKwkJbGFzdCA9IG5leHQ7CisJfQorCWFjdGl2ZV9uciA9IGxhc3Q7Cit9CisKKy8qCisgKiBSZWFkIHRoZSB0cmVlIHNwZWNpZmllZCB3aXRoIC0td2l0aC10cmVlIG9wdGlvbgorICogKHR5cGljYWxseSwgSEVBRCkgaW50byBzdGFnZSAjMSBhbmQgdGhlbgorICogc3F1YXNoIHRoZW0gZG93biB0byBzdGFnZSAjMC4gIFRoaXMgaXMgdXNlZCBmb3IKKyAqIC0tZXJyb3ItdW5tYXRjaCB0byBsaXN0IGFuZCBjaGVjayB0aGUgcGF0aCBwYXR0ZXJucworICogdGhhdCB3ZXJlIGdpdmVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gIFdlIGFyZSBub3QKKyAqIGdvaW5nIHRvIHdyaXRlIHRoaXMgaW5kZXggb3V0LgorICovCit2b2lkIG92ZXJsYXlfdHJlZV9vbl9jYWNoZShjb25zdCBjaGFyICp0cmVlX25hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmxhc3Rfc3RhZ2UwID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChnZXRfc2hhMSh0cmVlX25hbWUsIHNoYTEpKQorCQlkaWUoInRyZWUtaXNoICVzIG5vdCBmb3VuZC4iLCB0cmVlX25hbWUpOworCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KHNoYTEpOworCWlmICghdHJlZSkKKwkJZGllKCJiYWQgdHJlZS1pc2ggJXMiLCB0cmVlX25hbWUpOworCisJLyogSG9pc3QgdGhlIHVubWVyZ2VkIGVudHJpZXMgdXAgdG8gc3RhZ2UgIzMgdG8gbWFrZSByb29tICovCisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWlmICghY2Vfc3RhZ2UoY2UpKQorCQkJY29udGludWU7CisJCWNlLT5jZV9mbGFncyB8PSBDRV9TVEFHRU1BU0s7CisJfQorCisJaWYgKHByZWZpeCkgeworCQlzdGF0aWMgY29uc3QgY2hhciAqKG1hdGNoYnVmWzFdKTsKKwkJbWF0Y2hidWZbMF0gPSBOVUxMOworCQlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIFBBVEhTUEVDX0FMTF9NQUdJQywKKwkJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfQ1dELCBwcmVmaXgsIG1hdGNoYnVmKTsKKwl9IGVsc2UKKwkJbWVtc2V0KCZwYXRoc3BlYywgMCwgc2l6ZW9mKHBhdGhzcGVjKSk7CisJaWYgKHJlYWRfdHJlZSh0cmVlLCAxLCAmcGF0aHNwZWMpKQorCQlkaWUoInVuYWJsZSB0byByZWFkIHRyZWUgZW50cmllcyAlcyIsIHRyZWVfbmFtZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJc3dpdGNoIChjZV9zdGFnZShjZSkpIHsKKwkJY2FzZSAwOgorCQkJbGFzdF9zdGFnZTAgPSBjZTsKKwkJCS8qIGZhbGx0aHJ1ICovCisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJY2FzZSAxOgorCQkJLyoKKwkJCSAqIElmIHRoZXJlIGlzIHN0YWdlICMwIGVudHJ5IGZvciB0aGlzLCB3ZSBkbyBub3QKKwkJCSAqIG5lZWQgdG8gc2hvdyBpdC4gIFdlIHVzZSBDRV9VUERBVEUgYml0IHRvIG1hcmsKKwkJCSAqIHN1Y2ggYW4gZW50cnkuCisJCQkgKi8KKwkJCWlmIChsYXN0X3N0YWdlMCAmJgorCQkJICAgICFzdHJjbXAobGFzdF9zdGFnZTAtPm5hbWUsIGNlLT5uYW1lKSkKKwkJCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVVBEQVRFOworCQl9CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxzX2ZpbGVzX3VzYWdlW10gPSB7CisJTl8oImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpbGU+Li4uXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3ooY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlsaW5lX3Rlcm1pbmF0b3IgPSB1bnNldCA/ICdcbicgOiAnXDAnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2V4Y2x1ZGUoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqZXhjbHVkZV9saXN0ID0gb3B0LT52YWx1ZTsKKworCWV4Y19naXZlbiA9IDE7CisJc3RyaW5nX2xpc3RfYXBwZW5kKGV4Y2x1ZGVfbGlzdCwgYXJnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9leGNsdWRlX2Zyb20oY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciA9IG9wdC0+dmFsdWU7CisKKwlleGNfZ2l2ZW4gPSAxOworCWFkZF9leGNsdWRlc19mcm9tX2ZpbGUoZGlyLCBhcmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX2V4Y2x1ZGVfc3RhbmRhcmQoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCQkgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciA9IG9wdC0+dmFsdWU7CisKKwlleGNfZ2l2ZW4gPSAxOworCXNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKGRpcik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9sc19maWxlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmNtZF9wcmVmaXgpCit7CisJaW50IHJlcXVpcmVfd29ya190cmVlID0gMCwgc2hvd190YWcgPSAwLCBpOworCWNvbnN0IGNoYXIgKm1heF9wcmVmaXg7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCXN0cnVjdCBleGNsdWRlX2xpc3QgKmVsOworCXN0cnVjdCBzdHJpbmdfbGlzdCBleGNsdWRlX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9sc19maWxlc19vcHRpb25zW10gPSB7CisJCXsgT1BUSU9OX0NBTExCQUNLLCAneicsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQlOXygicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiKSwKKwkJCVBBUlNFX09QVF9OT0FSRywgb3B0aW9uX3BhcnNlX3ogfSwKKwkJT1BUX0JPT0woJ3QnLCBOVUxMLCAmc2hvd190YWcsCisJCQlOXygiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIpKSwKKwkJT1BUX0JPT0woJ3YnLCBOVUxMLCAmc2hvd192YWxpZF9iaXQsCisJCQlOXygidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiKSksCisJCU9QVF9CT09MKCdjJywgImNhY2hlZCIsICZzaG93X2NhY2hlZCwKKwkJCU5fKCJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIpKSwKKwkJT1BUX0JPT0woJ2QnLCAiZGVsZXRlZCIsICZzaG93X2RlbGV0ZWQsCisJCQlOXygic2hvdyBkZWxldGVkIGZpbGVzIGluIHRoZSBvdXRwdXQiKSksCisJCU9QVF9CT09MKCdtJywgIm1vZGlmaWVkIiwgJnNob3dfbW9kaWZpZWQsCisJCQlOXygic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IikpLAorCQlPUFRfQk9PTCgnbycsICJvdGhlcnMiLCAmc2hvd19vdGhlcnMsCisJCQlOXygic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IikpLAorCQlPUFRfQklUKCdpJywgImlnbm9yZWQiLCAmZGlyLmZsYWdzLAorCQkJTl8oInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IiksCisJCQlESVJfU0hPV19JR05PUkVEKSwKKwkJT1BUX0JPT0woJ3MnLCAic3RhZ2UiLCAmc2hvd19zdGFnZSwKKwkJCU5fKCJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIpKSwKKwkJT1BUX0JPT0woJ2snLCAia2lsbGVkIiwgJnNob3dfa2lsbGVkLAorCQkJTl8oInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiKSksCisJCU9QVF9CSVQoMCwgImRpcmVjdG9yeSIsICZkaXIuZmxhZ3MsCisJCQlOXygic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IiksCisJCQlESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUyksCisJCU9QVF9ORUdCSVQoMCwgImVtcHR5LWRpcmVjdG9yeSIsICZkaXIuZmxhZ3MsCisJCQlOXygiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIpLAorCQkJRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVMpLAorCQlPUFRfQk9PTCgndScsICJ1bm1lcmdlZCIsICZzaG93X3VubWVyZ2VkLAorCQkJTl8oInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIpKSwKKwkJT1BUX0JPT0woMCwgInJlc29sdmUtdW5kbyIsICZzaG93X3Jlc29sdmVfdW5kbywKKwkJCSAgICBOXygic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAneCcsICJleGNsdWRlIiwgJmV4Y2x1ZGVfbGlzdCwgTl8oInBhdHRlcm4iKSwKKwkJCU5fKCJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iKSwKKwkJCTAsIG9wdGlvbl9wYXJzZV9leGNsdWRlIH0sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnWCcsICJleGNsdWRlLWZyb20iLCAmZGlyLCBOXygiZmlsZSIpLAorCQkJTl8oImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iKSwKKwkJCTAsIG9wdGlvbl9wYXJzZV9leGNsdWRlX2Zyb20gfSwKKwkJT1BUX1NUUklORygwLCAiZXhjbHVkZS1wZXItZGlyZWN0b3J5IiwgJmRpci5leGNsdWRlX3Blcl9kaXIsIE5fKCJmaWxlIiksCisJCQlOXygicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiZXhjbHVkZS1zdGFuZGFyZCIsICZkaXIsIE5VTEwsCisJCQlOXygiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIpLAorCQkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2VfZXhjbHVkZV9zdGFuZGFyZCB9LAorCQl7IE9QVElPTl9TRVRfSU5ULCAwLCAiZnVsbC1uYW1lIiwgJnByZWZpeF9sZW4sIE5VTEwsCisJCQlOXygibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCB9LAorCQlPUFRfQk9PTCgwLCAiZXJyb3ItdW5tYXRjaCIsICZlcnJvcl91bm1hdGNoLAorCQkJTl8oImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIpKSwKKwkJT1BUX1NUUklORygwLCAid2l0aC10cmVlIiwgJndpdGhfdHJlZSwgTl8oInRyZWUtaXNoIiksCisJCQlOXygicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIpKSwKKwkJT1BUX19BQkJSRVYoJmFiYnJldiksCisJCU9QVF9CT09MKDAsICJkZWJ1ZyIsICZkZWJ1Z19tb2RlLCBOXygic2hvdyBkZWJ1Z2dpbmcgZGF0YSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGxzX2ZpbGVzX3VzYWdlLCBidWlsdGluX2xzX2ZpbGVzX29wdGlvbnMpOworCisJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwlwcmVmaXggPSBjbWRfcHJlZml4OworCWlmIChwcmVmaXgpCisJCXByZWZpeF9sZW4gPSBzdHJsZW4ocHJlZml4KTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgYnVpbHRpbl9sc19maWxlc19vcHRpb25zLAorCQkJbHNfZmlsZXNfdXNhZ2UsIDApOworCWVsID0gYWRkX2V4Y2x1ZGVfbGlzdCgmZGlyLCBFWENfQ01ETCwgIi0tZXhjbHVkZSBvcHRpb24iKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXhjbHVkZV9saXN0Lm5yOyBpKyspIHsKKwkJYWRkX2V4Y2x1ZGUoZXhjbHVkZV9saXN0Lml0ZW1zW2ldLnN0cmluZywgIiIsIDAsIGVsLCAtLWV4Y2x1ZGVfYXJncyk7CisJfQorCWlmIChzaG93X3RhZyB8fCBzaG93X3ZhbGlkX2JpdCkgeworCQl0YWdfY2FjaGVkID0gIkggIjsKKwkJdGFnX3VubWVyZ2VkID0gIk0gIjsKKwkJdGFnX3JlbW92ZWQgPSAiUiAiOworCQl0YWdfbW9kaWZpZWQgPSAiQyAiOworCQl0YWdfb3RoZXIgPSAiPyAiOworCQl0YWdfa2lsbGVkID0gIksgIjsKKwkJdGFnX3NraXBfd29ya3RyZWUgPSAiUyAiOworCQl0YWdfcmVzb2x2ZV91bmRvID0gIlUgIjsKKwl9CisJaWYgKHNob3dfbW9kaWZpZWQgfHwgc2hvd19vdGhlcnMgfHwgc2hvd19kZWxldGVkIHx8IChkaXIuZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSB8fCBzaG93X2tpbGxlZCkKKwkJcmVxdWlyZV93b3JrX3RyZWUgPSAxOworCWlmIChzaG93X3VubWVyZ2VkKQorCQkvKgorCQkgKiBUaGVyZSdzIG5vIHBvaW50IGluIHNob3dpbmcgdW5tZXJnZWQgdW5sZXNzCisJCSAqIHlvdSBhbHNvIHNob3cgdGhlIHN0YWdlIGluZm9ybWF0aW9uLgorCQkgKi8KKwkJc2hvd19zdGFnZSA9IDE7CisJaWYgKGRpci5leGNsdWRlX3Blcl9kaXIpCisJCWV4Y19naXZlbiA9IDE7CisKKwlpZiAocmVxdWlyZV93b3JrX3RyZWUgJiYgIWlzX2luc2lkZV93b3JrX3RyZWUoKSkKKwkJc2V0dXBfd29ya190cmVlKCk7CisKKwlwYXJzZV9wYXRoc3BlYygmcGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfQ1dEIHwKKwkJICAgICAgIFBBVEhTUEVDX1NUUklQX1NVQk1PRFVMRV9TTEFTSF9DSEVBUCwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwkvKiBGaW5kIGNvbW1vbiBwcmVmaXggZm9yIGFsbCBwYXRoc3BlYydzICovCisJbWF4X3ByZWZpeCA9IGNvbW1vbl9wcmVmaXgoJnBhdGhzcGVjKTsKKwltYXhfcHJlZml4X2xlbiA9IG1heF9wcmVmaXggPyBzdHJsZW4obWF4X3ByZWZpeCkgOiAwOworCisJLyogVHJlYXQgdW5tYXRjaGluZyBwYXRoc3BlYyBlbGVtZW50cyBhcyBlcnJvcnMgKi8KKwlpZiAocGF0aHNwZWMubnIgJiYgZXJyb3JfdW5tYXRjaCkKKwkJcHNfbWF0Y2hlZCA9IHhjYWxsb2MocGF0aHNwZWMubnIsIDEpOworCisJaWYgKChkaXIuZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKSAmJiAhZXhjX2dpdmVuKQorCQlkaWUoImxzLWZpbGVzIC0taWdub3JlZCBuZWVkcyBzb21lIGV4Y2x1ZGUgcGF0dGVybiIpOworCisJLyogV2l0aCBubyBmbGFncywgd2UgZGVmYXVsdCB0byBzaG93aW5nIHRoZSBjYWNoZWQgZmlsZXMgKi8KKwlpZiAoIShzaG93X3N0YWdlIHx8IHNob3dfZGVsZXRlZCB8fCBzaG93X290aGVycyB8fCBzaG93X3VubWVyZ2VkIHx8CisJICAgICAgc2hvd19raWxsZWQgfHwgc2hvd19tb2RpZmllZCB8fCBzaG93X3Jlc29sdmVfdW5kbykpCisJCXNob3dfY2FjaGVkID0gMTsKKworCWlmIChtYXhfcHJlZml4KQorCQlwcnVuZV9jYWNoZShtYXhfcHJlZml4KTsKKwlpZiAod2l0aF90cmVlKSB7CisJCS8qCisJCSAqIEJhc2ljIHNhbml0eSBjaGVjazsgc2hvdy1zdGFnZXMgYW5kIHNob3ctdW5tZXJnZWQKKwkJICogd291bGQgbm90IG1ha2UgYW55IHNlbnNlIHdpdGggdGhpcyBvcHRpb24uCisJCSAqLworCQlpZiAoc2hvd19zdGFnZSB8fCBzaG93X3VubWVyZ2VkKQorCQkJZGllKCJscy1maWxlcyAtLXdpdGgtdHJlZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtcyBvciAtdSIpOworCQlvdmVybGF5X3RyZWVfb25fY2FjaGUod2l0aF90cmVlLCBtYXhfcHJlZml4KTsKKwl9CisJc2hvd19maWxlcygmZGlyKTsKKwlpZiAoc2hvd19yZXNvbHZlX3VuZG8pCisJCXNob3dfcnVfaW5mbygpOworCisJaWYgKHBzX21hdGNoZWQpIHsKKwkJaW50IGJhZDsKKwkJYmFkID0gcmVwb3J0X3BhdGhfZXJyb3IocHNfbWF0Y2hlZCwgJnBhdGhzcGVjLCBwcmVmaXgpOworCQlpZiAoYmFkKQorCQkJZnByaW50ZihzdGRlcnIsICJEaWQgeW91IGZvcmdldCB0byAnZ2l0IGFkZCc/XG4iKTsKKworCQlyZXR1cm4gYmFkID8gMSA6IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL2xzLXJlbW90ZS5jIGIvYnVpbHRpbi9scy1yZW1vdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzEwMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9scy1yZW1vdGUuYwpAQCAtMCwwICsxLDEzMiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBsc19yZW1vdGVfdXNhZ2VbXSA9CisiZ2l0IGxzLXJlbW90ZSBbLS1oZWFkc10gWy0tdGFnc10gIFstLXVwbG9hZC1wYWNrPTxleGVjPl1cbiIKKyIgICAgICAgICAgICAgICAgICAgICBbLXEgfCAtLXF1aWV0XSBbLS1leGl0LWNvZGVdIFstLWdldC11cmxdIFs8cmVwb3NpdG9yeT4gWzxyZWZzPi4uLl1dIjsKKworLyoKKyAqIElzIHRoZXJlIG9uZSBhbW9uZyB0aGUgbGlzdCBvZiBwYXR0ZXJucyB0aGF0IG1hdGNoIHRoZSB0YWlsIHBhcnQKKyAqIG9mIHRoZSBwYXRoPworICovCitzdGF0aWMgaW50IHRhaWxfbWF0Y2goY29uc3QgY2hhciAqKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqcDsKKwljaGFyIHBhdGhidWZbUEFUSF9NQVhdOworCisJaWYgKCFwYXR0ZXJuKQorCQlyZXR1cm4gMTsgLyogbm8gcmVzdHJpY3Rpb24gKi8KKworCWlmIChzbnByaW50ZihwYXRoYnVmLCBzaXplb2YocGF0aGJ1ZiksICIvJXMiLCBwYXRoKSA+IHNpemVvZihwYXRoYnVmKSkKKwkJcmV0dXJuIGVycm9yKCJpbnNhbmVseSBsb25nIHJlZiAlLipzLi4uIiwgMjAsIHBhdGgpOworCXdoaWxlICgocCA9ICoocGF0dGVybisrKSkgIT0gTlVMTCkgeworCQlpZiAoIXdpbGRtYXRjaChwLCBwYXRoYnVmLCAwLCBOVUxMKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9sc19yZW1vdGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqZGVzdCA9IE5VTEw7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCWludCBnZXRfdXJsID0gMDsKKwlpbnQgcXVpZXQgPSAwOworCWludCBzdGF0dXMgPSAwOworCWNvbnN0IGNoYXIgKnVwbG9hZHBhY2sgPSBOVUxMOworCWNvbnN0IGNoYXIgKipwYXR0ZXJuID0gTlVMTDsKKworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKCItaCIsIGFyZ3ZbMV0pKQorCQl1c2FnZShsc19yZW1vdGVfdXNhZ2UpOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmICgqYXJnID09ICctJykgeworCQkJaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tdXBsb2FkLXBhY2s9IikpIHsKKwkJCQl1cGxvYWRwYWNrID0gYXJnICsgMTQ7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1leGVjPSIpKSB7CisJCQkJdXBsb2FkcGFjayA9IGFyZyArIDc7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcCgiLS10YWdzIiwgYXJnKSB8fCAhc3RyY21wKCItdCIsIGFyZykpIHsKKwkJCQlmbGFncyB8PSBSRUZfVEFHUzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKCItLWhlYWRzIiwgYXJnKSB8fCAhc3RyY21wKCItaCIsIGFyZykpIHsKKwkJCQlmbGFncyB8PSBSRUZfSEVBRFM7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcCgiLS1yZWZzIiwgYXJnKSkgeworCQkJCWZsYWdzIHw9IFJFRl9OT1JNQUw7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcCgiLS1xdWlldCIsIGFyZykgfHwgIXN0cmNtcCgiLXEiLCBhcmcpKSB7CisJCQkJcXVpZXQgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoIi0tZ2V0LXVybCIsIGFyZykpIHsKKwkJCQlnZXRfdXJsID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKCItLWV4aXQtY29kZSIsIGFyZykpIHsKKwkJCQkvKiByZXR1cm4gdGhpcyBjb2RlIGlmIG5vIHJlZnMgYXJlIHJlcG9ydGVkICovCisJCQkJc3RhdHVzID0gMjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXVzYWdlKGxzX3JlbW90ZV91c2FnZSk7CisJCX0KKwkJZGVzdCA9IGFyZzsKKwkJaSsrOworCQlicmVhazsKKwl9CisKKwlpZiAoYXJndltpXSkgeworCQlpbnQgajsKKwkJcGF0dGVybiA9IHhjYWxsb2MoYXJnYyAtIGkgKyAxLCBzaXplb2YoY29uc3QgY2hhciAqKSk7CisJCWZvciAoaiA9IGk7IGogPCBhcmdjOyBqKyspCisJCQlwYXR0ZXJuW2ogLSBpXSA9IHhzdHJmbXQoIiovJXMiLCBhcmd2W2pdKTsKKwl9CisJcmVtb3RlID0gcmVtb3RlX2dldChkZXN0KTsKKwlpZiAoIXJlbW90ZSkgeworCQlpZiAoZGVzdCkKKwkJCWRpZSgiYmFkIHJlcG9zaXRvcnkgJyVzJyIsIGRlc3QpOworCQlkaWUoIk5vIHJlbW90ZSBjb25maWd1cmVkIHRvIGxpc3QgcmVmcyBmcm9tLiIpOworCX0KKwlpZiAoIXJlbW90ZS0+dXJsX25yKQorCQlkaWUoInJlbW90ZSAlcyBoYXMgbm8gY29uZmlndXJlZCBVUkwiLCBkZXN0KTsKKworCWlmIChnZXRfdXJsKSB7CisJCXByaW50ZigiJXNcbiIsICpyZW1vdGUtPnVybCk7CisJCXJldHVybiAwOworCX0KKworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCBOVUxMKTsKKwlpZiAodXBsb2FkcGFjayAhPSBOVUxMKQorCQl0cmFuc3BvcnRfc2V0X29wdGlvbih0cmFuc3BvcnQsIFRSQU5TX09QVF9VUExPQURQQUNLLCB1cGxvYWRwYWNrKTsKKworCXJlZiA9IHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnModHJhbnNwb3J0KTsKKwlpZiAodHJhbnNwb3J0X2Rpc2Nvbm5lY3QodHJhbnNwb3J0KSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIWRlc3QgJiYgIXF1aWV0KQorCQlmcHJpbnRmKHN0ZGVyciwgIkZyb20gJXNcbiIsICpyZW1vdGUtPnVybCk7CisJZm9yICggOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAoIWNoZWNrX3JlZl90eXBlKHJlZiwgZmxhZ3MpKQorCQkJY29udGludWU7CisJCWlmICghdGFpbF9tYXRjaChwYXR0ZXJuLCByZWYtPm5hbWUpKQorCQkJY29udGludWU7CisJCXByaW50ZigiJXMJJXNcbiIsIHNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpLCByZWYtPm5hbWUpOworCQlzdGF0dXMgPSAwOyAvKiB3ZSBmb3VuZCBzb21ldGhpbmcgKi8KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbHMtdHJlZS5jIGIvYnVpbHRpbi9scy10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzMGQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbHMtdHJlZS5jCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorCitzdGF0aWMgaW50IGxpbmVfdGVybWluYXRpb24gPSAnXG4nOworI2RlZmluZSBMU19SRUNVUlNJVkUgMQorI2RlZmluZSBMU19UUkVFX09OTFkgMgorI2RlZmluZSBMU19TSE9XX1RSRUVTIDQKKyNkZWZpbmUgTFNfTkFNRV9PTkxZIDgKKyNkZWZpbmUgTFNfU0hPV19TSVpFIDE2CitzdGF0aWMgaW50IGFiYnJldjsKK3N0YXRpYyBpbnQgbHNfb3B0aW9uczsKK3N0YXRpYyBzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CitzdGF0aWMgaW50IGNob21wX3ByZWZpeDsKK3N0YXRpYyBjb25zdCBjaGFyICpsc190cmVlX3ByZWZpeDsKKworc3RhdGljIGNvbnN0ICBjaGFyICogY29uc3QgbHNfdHJlZV91c2FnZVtdID0geworCU5fKCJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBzaG93X3JlY3Vyc2l2ZShjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwgY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJY29uc3QgY2hhciAqKnM7CisKKwlpZiAobHNfb3B0aW9ucyAmIExTX1JFQ1VSU0lWRSkKKwkJcmV0dXJuIDE7CisKKwlzID0gcGF0aHNwZWMuX3JhdzsKKwlpZiAoIXMpCisJCXJldHVybiAwOworCisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpzcGVjID0gKnMrKzsKKwkJaW50IGxlbiwgc3BlY2xlbjsKKworCQlpZiAoIXNwZWMpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHN0cm5jbXAoYmFzZSwgc3BlYywgYmFzZWxlbikpCisJCQljb250aW51ZTsKKwkJbGVuID0gc3RybGVuKHBhdGhuYW1lKTsKKwkJc3BlYyArPSBiYXNlbGVuOworCQlzcGVjbGVuID0gc3RybGVuKHNwZWMpOworCQlpZiAoc3BlY2xlbiA8PSBsZW4pCisJCQljb250aW51ZTsKKwkJaWYgKHNwZWNbbGVuXSAmJiBzcGVjW2xlbl0gIT0gJy8nKQorCQkJY29udGludWU7CisJCWlmIChtZW1jbXAocGF0aG5hbWUsIHNwZWMsIGxlbikpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIDE7CisJfQorfQorCitzdGF0aWMgaW50IHNob3dfdHJlZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQljb25zdCBjaGFyICpwYXRobmFtZSwgdW5zaWduZWQgbW9kZSwgaW50IHN0YWdlLCB2b2lkICpjb250ZXh0KQoreworCWludCByZXR2YWwgPSAwOworCWludCBiYXNlbGVuOworCWNvbnN0IGNoYXIgKnR5cGUgPSBibG9iX3R5cGU7CisKKwlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJLyoKKwkJICogTWF5YmUgd2Ugd2FudCB0byBoYXZlIHNvbWUgcmVjdXJzaXZlIHZlcnNpb24gaGVyZT8KKwkJICoKKwkJICogU29tZXRoaW5nIHNpbWlsYXIgdG8gdGhpcyBpbmNvbXBsZXRlIGV4YW1wbGU6CisJCSAqCisJCWlmIChzaG93X3N1YnByb2plY3RzKGJhc2UsIGJhc2VsZW4sIHBhdGhuYW1lKSkKKwkJCXJldHZhbCA9IFJFQURfVFJFRV9SRUNVUlNJVkU7CisJCSAqCisJCSAqLworCQl0eXBlID0gY29tbWl0X3R5cGU7CisJfSBlbHNlIGlmIChTX0lTRElSKG1vZGUpKSB7CisJCWlmIChzaG93X3JlY3Vyc2l2ZShiYXNlLT5idWYsIGJhc2UtPmxlbiwgcGF0aG5hbWUpKSB7CisJCQlyZXR2YWwgPSBSRUFEX1RSRUVfUkVDVVJTSVZFOworCQkJaWYgKCEobHNfb3B0aW9ucyAmIExTX1NIT1dfVFJFRVMpKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJdHlwZSA9IHRyZWVfdHlwZTsKKwl9CisJZWxzZSBpZiAobHNfb3B0aW9ucyAmIExTX1RSRUVfT05MWSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShsc19vcHRpb25zICYgTFNfTkFNRV9PTkxZKSkgeworCQlpZiAobHNfb3B0aW9ucyAmIExTX1NIT1dfU0laRSkgeworCQkJY2hhciBzaXplX3RleHRbMjRdOworCQkJaWYgKCFzdHJjbXAodHlwZSwgYmxvYl90eXBlKSkgeworCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJCQlpZiAoc2hhMV9vYmplY3RfaW5mbyhzaGExLCAmc2l6ZSkgPT0gT0JKX0JBRCkKKwkJCQkJeHNucHJpbnRmKHNpemVfdGV4dCwgc2l6ZW9mKHNpemVfdGV4dCksCisJCQkJCQkgICJCQUQiKTsKKwkJCQllbHNlCisJCQkJCXhzbnByaW50ZihzaXplX3RleHQsIHNpemVvZihzaXplX3RleHQpLAorCQkJCQkJICAiJWx1Iiwgc2l6ZSk7CisJCQl9IGVsc2UKKwkJCQl4c25wcmludGYoc2l6ZV90ZXh0LCBzaXplb2Yoc2l6ZV90ZXh0KSwgIi0iKTsKKwkJCXByaW50ZigiJTA2byAlcyAlcyAlN3NcdCIsIG1vZGUsIHR5cGUsCisJCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KHNoYTEsIGFiYnJldiksCisJCQkgICAgICAgc2l6ZV90ZXh0KTsKKwkJfSBlbHNlCisJCQlwcmludGYoIiUwNm8gJXMgJXNcdCIsIG1vZGUsIHR5cGUsCisJCQkgICAgICAgZmluZF91bmlxdWVfYWJicmV2KHNoYTEsIGFiYnJldikpOworCX0KKwliYXNlbGVuID0gYmFzZS0+bGVuOworCXN0cmJ1Zl9hZGRzdHIoYmFzZSwgcGF0aG5hbWUpOworCXdyaXRlX25hbWVfcXVvdGVkX3JlbGF0aXZlKGJhc2UtPmJ1ZiwKKwkJCQkgICBjaG9tcF9wcmVmaXggPyBsc190cmVlX3ByZWZpeCA6IE5VTEwsCisJCQkJICAgc3Rkb3V0LCBsaW5lX3Rlcm1pbmF0aW9uKTsKKwlzdHJidWZfc2V0bGVuKGJhc2UsIGJhc2VsZW4pOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBjbWRfbHNfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCB0cmVlICp0cmVlOworCWludCBpLCBmdWxsX3RyZWUgPSAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gbHNfdHJlZV9vcHRpb25zW10gPSB7CisJCU9QVF9CSVQoJ2QnLCBOVUxMLCAmbHNfb3B0aW9ucywgTl8oIm9ubHkgc2hvdyB0cmVlcyIpLAorCQkJTFNfVFJFRV9PTkxZKSwKKwkJT1BUX0JJVCgncicsIE5VTEwsICZsc19vcHRpb25zLCBOXygicmVjdXJzZSBpbnRvIHN1YnRyZWVzIiksCisJCQlMU19SRUNVUlNJVkUpLAorCQlPUFRfQklUKCd0JywgTlVMTCwgJmxzX29wdGlvbnMsIE5fKCJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIiksCisJCQlMU19TSE9XX1RSRUVTKSwKKwkJT1BUX1NFVF9JTlQoJ3onLCBOVUxMLCAmbGluZV90ZXJtaW5hdGlvbiwKKwkJCSAgICBOXygidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIpLCAwKSwKKwkJT1BUX0JJVCgnbCcsICJsb25nIiwgJmxzX29wdGlvbnMsIE5fKCJpbmNsdWRlIG9iamVjdCBzaXplIiksCisJCQlMU19TSE9XX1NJWkUpLAorCQlPUFRfQklUKDAsICJuYW1lLW9ubHkiLCAmbHNfb3B0aW9ucywgTl8oImxpc3Qgb25seSBmaWxlbmFtZXMiKSwKKwkJCUxTX05BTUVfT05MWSksCisJCU9QVF9CSVQoMCwgIm5hbWUtc3RhdHVzIiwgJmxzX29wdGlvbnMsIE5fKCJsaXN0IG9ubHkgZmlsZW5hbWVzIiksCisJCQlMU19OQU1FX09OTFkpLAorCQlPUFRfU0VUX0lOVCgwLCAiZnVsbC1uYW1lIiwgJmNob21wX3ByZWZpeCwKKwkJCSAgICBOXygidXNlIGZ1bGwgcGF0aCBuYW1lcyIpLCAwKSwKKwkJT1BUX0JPT0woMCwgImZ1bGwtdHJlZSIsICZmdWxsX3RyZWUsCisJCQkgTl8oImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5ICIKKwkJCSAgICAiKGltcGxpZXMgLS1mdWxsLW5hbWUpIikpLAorCQlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlsc190cmVlX3ByZWZpeCA9IHByZWZpeDsKKwlpZiAocHJlZml4ICYmICpwcmVmaXgpCisJCWNob21wX3ByZWZpeCA9IHN0cmxlbihwcmVmaXgpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBsc190cmVlX29wdGlvbnMsCisJCQkgICAgIGxzX3RyZWVfdXNhZ2UsIDApOworCWlmIChmdWxsX3RyZWUpIHsKKwkJbHNfdHJlZV9wcmVmaXggPSBwcmVmaXggPSBOVUxMOworCQljaG9tcF9wcmVmaXggPSAwOworCX0KKwkvKiAtZCAtciBzaG91bGQgaW1wbHkgLXQsIGJ1dCAtZCBieSBpdHNlbGYgc2hvdWxkIG5vdCBoYXZlIHRvLiAqLworCWlmICggKExTX1RSRUVfT05MWXxMU19SRUNVUlNJVkUpID09CisJICAgICgoTFNfVFJFRV9PTkxZfExTX1JFQ1VSU0lWRSkgJiBsc19vcHRpb25zKSkKKwkJbHNfb3B0aW9ucyB8PSBMU19TSE9XX1RSRUVTOworCisJaWYgKGFyZ2MgPCAxKQorCQl1c2FnZV93aXRoX29wdGlvbnMobHNfdHJlZV91c2FnZSwgbHNfdHJlZV9vcHRpb25zKTsKKwlpZiAoZ2V0X3NoYTEoYXJndlswXSwgc2hhMSkpCisJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmd2WzBdKTsKKworCS8qCisJICogc2hvd19yZWN1cnNpdmUoKSByb2xscyBpdHMgb3duIG1hdGNoaW5nIGNvZGUgYW5kIGlzCisJICogZ2VuZXJhbGx5IGlnbm9yYW50IG9mICdzdHJ1Y3QgcGF0aHNwZWMnLiBUaGUgbWFnaWMgbWFzaworCSAqIGNhbm5vdCBiZSBsaWZ0ZWQgdW50aWwgaXQgaXMgY29udmVydGVkIHRvIHVzZQorCSAqIG1hdGNoX3BhdGhzcGVjKCkgb3IgdHJlZV9lbnRyeV9pbnRlcmVzdGluZygpCisJICovCisJcGFyc2VfcGF0aHNwZWMoJnBhdGhzcGVjLCBQQVRIU1BFQ19HTE9CIHwgUEFUSFNQRUNfSUNBU0UgfAorCQkJCSAgUEFUSFNQRUNfRVhDTFVERSwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9DV0QsCisJCSAgICAgICBwcmVmaXgsIGFyZ3YgKyAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGF0aHNwZWMubnI7IGkrKykKKwkJcGF0aHNwZWMuaXRlbXNbaV0ubm93aWxkY2FyZF9sZW4gPSBwYXRoc3BlYy5pdGVtc1tpXS5sZW47CisJcGF0aHNwZWMuaGFzX3dpbGRjYXJkID0gMDsKKwl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChzaGExKTsKKwlpZiAoIXRyZWUpCisJCWRpZSgibm90IGEgdHJlZSBvYmplY3QiKTsKKwlyZXR1cm4gISFyZWFkX3RyZWVfcmVjdXJzaXZlKHRyZWUsICIiLCAwLCAwLCAmcGF0aHNwZWMsIHNob3dfdHJlZSwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21haWxpbmZvLmMgYi9idWlsdGluL21haWxpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkZjI3NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWFpbGluZm8uYwpAQCAtMCwwICsxLDYxIEBACisvKgorICogQW5vdGhlciBzdHVwaWQgcHJvZ3JhbSwgdGhpcyBvbmUgcGFyc2luZyB0aGUgaGVhZGVycyBvZiBhbgorICogZW1haWwgdG8gZmlndXJlIG91dCBhdXRob3JzaGlwIGFuZCBzdWJqZWN0CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAibWFpbGluZm8uaCIKKworc3RhdGljIGNvbnN0IGNoYXIgbWFpbGluZm9fdXNhZ2VbXSA9CisJImdpdCBtYWlsaW5mbyBbLWsgfCAtYl0gWy1tIHwgLS1tZXNzYWdlLWlkXSBbLXUgfCAtLWVuY29kaW5nPTxlbmNvZGluZz4gfCAtbl0gWy0tc2Npc3NvcnMgfCAtLW5vLXNjaXNzb3JzXSA8bXNnPiA8cGF0Y2g+IDwgbWFpbCA+aW5mbyI7CisKK2ludCBjbWRfbWFpbGluZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqZGVmX2NoYXJzZXQ7CisJc3RydWN0IG1haWxpbmZvIG1pOworCWludCBzdGF0dXM7CisKKwkvKiBORUVEU1dPUks6IG1pZ2h0IHdhbnQgdG8gZG8gdGhlIG9wdGlvbmFsIC5naXQvIGRpcmVjdG9yeQorCSAqIGRpc2NvdmVyeQorCSAqLworCXNldHVwX21haWxpbmZvKCZtaSk7CisKKwlkZWZfY2hhcnNldCA9IGdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKCk7CisJbWkubWV0YWluZm9fY2hhcnNldCA9IGRlZl9jaGFyc2V0OworCisJd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMV0sICItayIpKQorCQkJbWkua2VlcF9zdWJqZWN0ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLWIiKSkKKwkJCW1pLmtlZXBfbm9uX3BhdGNoX2JyYWNrZXRzX2luX3N1YmplY3QgPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItbSIpIHx8ICFzdHJjbXAoYXJndlsxXSwgIi0tbWVzc2FnZS1pZCIpKQorCQkJbWkuYWRkX21lc3NhZ2VfaWQgPSAxOworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItdSIpKQorCQkJbWkubWV0YWluZm9fY2hhcnNldCA9IGRlZl9jaGFyc2V0OworCQllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICItbiIpKQorCQkJbWkubWV0YWluZm9fY2hhcnNldCA9IE5VTEw7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZ3ZbMV0sICItLWVuY29kaW5nPSIpKQorCQkJbWkubWV0YWluZm9fY2hhcnNldCA9IGFyZ3ZbMV0gKyAxMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1zY2lzc29ycyIpKQorCQkJbWkudXNlX3NjaXNzb3JzID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1uby1zY2lzc29ycyIpKQorCQkJbWkudXNlX3NjaXNzb3JzID0gMDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiLS1uby1pbmJvZHktaGVhZGVycyIpKQorCQkJbWkudXNlX2luYm9keV9oZWFkZXJzID0gMDsKKwkJZWxzZQorCQkJdXNhZ2UobWFpbGluZm9fdXNhZ2UpOworCQlhcmdjLS07IGFyZ3YrKzsKKwl9CisKKwlpZiAoYXJnYyAhPSAzKQorCQl1c2FnZShtYWlsaW5mb191c2FnZSk7CisKKwltaS5pbnB1dCA9IHN0ZGluOworCW1pLm91dHB1dCA9IHN0ZG91dDsKKwlzdGF0dXMgPSAhIW1haWxpbmZvKCZtaSwgYXJndlsxXSwgYXJndlsyXSk7CisJY2xlYXJfbWFpbGluZm8oJm1pKTsKKworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21haWxzcGxpdC5jIGIvYnVpbHRpbi9tYWlsc3BsaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDQyNzdhCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9tYWlsc3BsaXQuYwpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIFRvdGFsbHkgYnJhaW5kYW1hZ2VkIG1ib3ggc3BsaXR0ZXIgcHJvZ3JhbS4KKyAqCisgKiBJdCBqdXN0IHNwbGl0cyBhIG1ib3ggaW50byBhIGxpc3Qgb2YgZmlsZXM6ICIwMDAxIiAiMDAwMiIgLi4KKyAqIHNvIHlvdSBjYW4gcHJvY2VzcyB0aGVtIGZ1cnRoZXIgZnJvbSB0aGVyZS4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGdpdF9tYWlsc3BsaXRfdXNhZ2VbXSA9CisiZ2l0IG1haWxzcGxpdCBbLWQ8cHJlYz5dIFstZjxuPl0gWy1iXSBbLS1rZWVwLWNyXSAtbzxkaXJlY3Rvcnk+IFsoPG1ib3g+fDxNYWlsZGlyPikuLi5dIjsKKworc3RhdGljIGludCBpc19mcm9tX2xpbmUoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwljb25zdCBjaGFyICpjb2xvbjsKKworCWlmIChsZW4gPCAyMCB8fCBtZW1jbXAoIkZyb20gIiwgbGluZSwgNSkpCisJCXJldHVybiAwOworCisJY29sb24gPSBsaW5lICsgbGVuIC0gMjsKKwlsaW5lICs9IDU7CisJZm9yICg7OykgeworCQlpZiAoY29sb24gPCBsaW5lKQorCQkJcmV0dXJuIDA7CisJCWlmICgqLS1jb2xvbiA9PSAnOicpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIWlzZGlnaXQoY29sb25bLTRdKSB8fAorCSAgICAhaXNkaWdpdChjb2xvblstMl0pIHx8CisJICAgICFpc2RpZ2l0KGNvbG9uWy0xXSkgfHwKKwkgICAgIWlzZGlnaXQoY29sb25bIDFdKSB8fAorCSAgICAhaXNkaWdpdChjb2xvblsgMl0pKQorCQlyZXR1cm4gMDsKKworCS8qIHllYXIgKi8KKwlpZiAoc3RydG9sKGNvbG9uKzMsIE5VTEwsIDEwKSA8PSA5MCkKKwkJcmV0dXJuIDA7CisKKwkvKiBPaywgY2xvc2UgZW5vdWdoICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworc3RhdGljIGludCBrZWVwX2NyOworCisvKiBDYWxsZWQgd2l0aCB0aGUgZmlyc3QgbGluZSAocG90ZW50aWFsbHkgcGFydGlhbCkKKyAqIGFscmVhZHkgaW4gYnVmW10gLS0gbm9ybWFsbHkgdGhhdCBzaG91bGQgYmVnaW4gd2l0aAorICogdGhlIFVuaXggIkZyb20gIiBsaW5lLiAgV3JpdGUgaXQgaW50byB0aGUgc3BlY2lmaWVkCisgKiBmaWxlLgorICovCitzdGF0aWMgaW50IHNwbGl0X29uZShGSUxFICptYm94LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgYWxsb3dfYmFyZSkKK3sKKwlGSUxFICpvdXRwdXQ7CisJaW50IGZkOworCWludCBzdGF0dXMgPSAwOworCWludCBpc19iYXJlID0gIWlzX2Zyb21fbGluZShidWYuYnVmLCBidWYubGVuKTsKKworCWlmIChpc19iYXJlICYmICFhbGxvd19iYXJlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY29ycnVwdCBtYWlsYm94XG4iKTsKKwkJZXhpdCgxKTsKKwl9CisJZmQgPSBvcGVuKG5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgMDY2Nik7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZSAnJXMnIiwgbmFtZSk7CisJb3V0cHV0ID0geGZkb3BlbihmZCwgInciKTsKKworCS8qIENvcHkgaXQgb3V0LCB3aGlsZSBzZWFyY2hpbmcgZm9yIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoCisJICogIkZyb20gIiBhbmQgaGF2aW5nIHNvbWV0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSBkYXRlIGZvcm1hdC4KKwkgKi8KKwlmb3IgKDs7KSB7CisJCWlmICgha2VlcF9jciAmJiBidWYubGVuID4gMSAmJiBidWYuYnVmW2J1Zi5sZW4tMV0gPT0gJ1xuJyAmJgorCQkJYnVmLmJ1ZltidWYubGVuLTJdID09ICdccicpIHsKKwkJCXN0cmJ1Zl9zZXRsZW4oJmJ1ZiwgYnVmLmxlbi0yKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwkJfQorCisJCWlmIChmd3JpdGUoYnVmLmJ1ZiwgMSwgYnVmLmxlbiwgb3V0cHV0KSAhPSBidWYubGVuKQorCQkJZGllX2Vycm5vKCJjYW5ub3Qgd3JpdGUgb3V0cHV0Iik7CisKKwkJaWYgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJmJ1ZiwgbWJveCwgJ1xuJykpIHsKKwkJCWlmIChmZW9mKG1ib3gpKSB7CisJCQkJc3RhdHVzID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgbWJveCIpOworCQl9CisJCWlmICghaXNfYmFyZSAmJiBpc19mcm9tX2xpbmUoYnVmLmJ1ZiwgYnVmLmxlbikpCisJCQlicmVhazsgLyogZG9uZSB3aXRoIG9uZSBtZXNzYWdlICovCisJfQorCWZjbG9zZShvdXRwdXQpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcG9wdWxhdGVfbWFpbGRpcl9saXN0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZW50OworCWNoYXIgKm5hbWUgPSBOVUxMOworCWNoYXIgKnN1YnNbXSA9IHsgImN1ciIsICJuZXciLCBOVUxMIH07CisJY2hhciAqKnN1YjsKKwlpbnQgcmV0ID0gLTE7CisKKwlmb3IgKHN1YiA9IHN1YnM7ICpzdWI7ICsrc3ViKSB7CisJCWZyZWUobmFtZSk7CisJCW5hbWUgPSB4c3RyZm10KCIlcy8lcyIsIHBhdGgsICpzdWIpOworCQlpZiAoKGRpciA9IG9wZW5kaXIobmFtZSkpID09IE5VTEwpIHsKKwkJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQkJY29udGludWU7CisJCQllcnJvcigiY2Fubm90IG9wZW5kaXIgJXMgKCVzKSIsIG5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXdoaWxlICgoZGVudCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQkJaWYgKGRlbnQtPmRfbmFtZVswXSA9PSAnLicpCisJCQkJY29udGludWU7CisJCQlmcmVlKG5hbWUpOworCQkJbmFtZSA9IHhzdHJmbXQoIiVzLyVzIiwgKnN1YiwgZGVudC0+ZF9uYW1lKTsKKwkJCXN0cmluZ19saXN0X2luc2VydChsaXN0LCBuYW1lKTsKKwkJfQorCisJCWNsb3NlZGlyKGRpcik7CisJfQorCisJcmV0ID0gMDsKKworb3V0OgorCWZyZWUobmFtZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYWlsZGlyX2ZpbGVuYW1lX2NtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCXdoaWxlICgqYSAmJiAqYikgeworCQlpZiAoaXNkaWdpdCgqYSkgJiYgaXNkaWdpdCgqYikpIHsKKwkJCWxvbmcgaW50IG5hLCBuYjsKKwkJCW5hID0gc3RydG9sKGEsIChjaGFyICoqKSZhLCAxMCk7CisJCQluYiA9IHN0cnRvbChiLCAoY2hhciAqKikmYiwgMTApOworCQkJaWYgKG5hICE9IG5iKQorCQkJCXJldHVybiBuYSAtIG5iOworCQkJLyogc3RydG9sIGFkdmFuY2VkIG91ciBwb2ludGVycyAqLworCQl9CisJCWVsc2UgeworCQkJaWYgKCphICE9ICpiKQorCQkJCXJldHVybiAodW5zaWduZWQgY2hhcikqYSAtICh1bnNpZ25lZCBjaGFyKSpiOworCQkJYSsrOworCQkJYisrOworCQl9CisJfQorCXJldHVybiAodW5zaWduZWQgY2hhcikqYSAtICh1bnNpZ25lZCBjaGFyKSpiOworfQorCitzdGF0aWMgaW50IHNwbGl0X21haWxkaXIoY29uc3QgY2hhciAqbWFpbGRpciwgY29uc3QgY2hhciAqZGlyLAorCWludCBucl9wcmVjLCBpbnQgc2tpcCkKK3sKKwljaGFyICpmaWxlID0gTlVMTDsKKwlGSUxFICpmID0gTlVMTDsKKwlpbnQgcmV0ID0gLTE7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWxpc3QuY21wID0gbWFpbGRpcl9maWxlbmFtZV9jbXA7CisKKwlpZiAocG9wdWxhdGVfbWFpbGRpcl9saXN0KCZsaXN0LCBtYWlsZGlyKSA8IDApCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykgeworCQljaGFyICpuYW1lOworCisJCWZyZWUoZmlsZSk7CisJCWZpbGUgPSB4c3RyZm10KCIlcy8lcyIsIG1haWxkaXIsIGxpc3QuaXRlbXNbaV0uc3RyaW5nKTsKKworCQlmID0gZm9wZW4oZmlsZSwgInIiKTsKKwkJaWYgKCFmKSB7CisJCQllcnJvcigiY2Fubm90IG9wZW4gbWFpbCAlcyAoJXMpIiwgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJmJ1ZiwgZiwgJ1xuJykpIHsKKwkJCWVycm9yKCJjYW5ub3QgcmVhZCBtYWlsICVzICglcykiLCBmaWxlLCBzdHJlcnJvcihlcnJubykpOworCQkJZ290byBvdXQ7CisJCX0KKworCQluYW1lID0geHN0cmZtdCgiJXMvJTAqZCIsIGRpciwgbnJfcHJlYywgKytza2lwKTsKKwkJc3BsaXRfb25lKGYsIG5hbWUsIDEpOworCQlmcmVlKG5hbWUpOworCisJCWZjbG9zZShmKTsKKwkJZiA9IE5VTEw7CisJfQorCisJcmV0ID0gc2tpcDsKK291dDoKKwlpZiAoZikKKwkJZmNsb3NlKGYpOworCWZyZWUoZmlsZSk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3BsaXRfbWJveChjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICpkaXIsIGludCBhbGxvd19iYXJlLAorCQkgICAgICBpbnQgbnJfcHJlYywgaW50IHNraXApCit7CisJaW50IHJldCA9IC0xOworCWludCBwZWVrOworCisJRklMRSAqZiA9ICFzdHJjbXAoZmlsZSwgIi0iKSA/IHN0ZGluIDogZm9wZW4oZmlsZSwgInIiKTsKKwlpbnQgZmlsZV9kb25lID0gMDsKKworCWlmICghZikgeworCQllcnJvcigiY2Fubm90IG9wZW4gbWJveCAlcyIsIGZpbGUpOworCQlnb3RvIG91dDsKKwl9CisKKwlkbyB7CisJCXBlZWsgPSBmZ2V0YyhmKTsKKwl9IHdoaWxlIChpc3NwYWNlKHBlZWspKTsKKwl1bmdldGMocGVlaywgZik7CisKKwlpZiAoc3RyYnVmX2dldHdob2xlbGluZSgmYnVmLCBmLCAnXG4nKSkgeworCQkvKiBlbXB0eSBzdGRpbiBpcyBPSyAqLworCQlpZiAoZiAhPSBzdGRpbikgeworCQkJZXJyb3IoImNhbm5vdCByZWFkIG1ib3ggJXMiLCBmaWxlKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWZpbGVfZG9uZSA9IDE7CisJfQorCisJd2hpbGUgKCFmaWxlX2RvbmUpIHsKKwkJY2hhciAqbmFtZSA9IHhzdHJmbXQoIiVzLyUwKmQiLCBkaXIsIG5yX3ByZWMsICsrc2tpcCk7CisJCWZpbGVfZG9uZSA9IHNwbGl0X29uZShmLCBuYW1lLCBhbGxvd19iYXJlKTsKKwkJZnJlZShuYW1lKTsKKwl9CisKKwlpZiAoZiAhPSBzdGRpbikKKwkJZmNsb3NlKGYpOworCisJcmV0ID0gc2tpcDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY21kX21haWxzcGxpdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgbnIgPSAwLCBucl9wcmVjID0gNCwgbnVtID0gMDsKKwlpbnQgYWxsb3dfYmFyZSA9IDA7CisJY29uc3QgY2hhciAqZGlyID0gTlVMTDsKKwljb25zdCBjaGFyICoqYXJncDsKKwlzdGF0aWMgY29uc3QgY2hhciAqc3RkaW5fb25seVtdID0geyAiLSIsIE5VTEwgfTsKKworCWZvciAoYXJncCA9IGFyZ3YrMTsgKmFyZ3A7IGFyZ3ArKykgeworCQljb25zdCBjaGFyICphcmcgPSAqYXJncDsKKworCQlpZiAoYXJnWzBdICE9ICctJykKKwkJCWJyZWFrOworCQkvKiBkbyBmbGFncyBoZXJlICovCisJCWlmICggYXJnWzFdID09ICdkJyApIHsKKwkJCW5yX3ByZWMgPSBzdHJ0b2woYXJnKzIsIE5VTEwsIDEwKTsKKwkJCWlmIChucl9wcmVjIDwgMyB8fCAxMCA8PSBucl9wcmVjKQorCQkJCXVzYWdlKGdpdF9tYWlsc3BsaXRfdXNhZ2UpOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoIGFyZ1sxXSA9PSAnZicgKSB7CisJCQluciA9IHN0cnRvbChhcmcrMiwgTlVMTCwgMTApOworCQl9IGVsc2UgaWYgKCBhcmdbMV0gPT0gJ2gnICkgeworCQkJdXNhZ2UoZ2l0X21haWxzcGxpdF91c2FnZSk7CisJCX0gZWxzZSBpZiAoIGFyZ1sxXSA9PSAnYicgJiYgIWFyZ1syXSApIHsKKwkJCWFsbG93X2JhcmUgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1rZWVwLWNyIikpIHsKKwkJCWtlZXBfY3IgPSAxOworCQl9IGVsc2UgaWYgKCBhcmdbMV0gPT0gJ28nICYmIGFyZ1syXSApIHsKKwkJCWRpciA9IGFyZysyOworCQl9IGVsc2UgaWYgKCBhcmdbMV0gPT0gJy0nICYmICFhcmdbMl0gKSB7CisJCQlhcmdwKys7CS8qIC0tIG1hcmtzIGVuZCBvZiBvcHRpb25zICovCisJCQlicmVhazsKKwkJfSBlbHNlIHsKKwkJCWRpZSgidW5rbm93biBvcHRpb246ICVzIiwgYXJnKTsKKwkJfQorCX0KKworCWlmICggIWRpciApIHsKKwkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHk6IGlmIG5vIC1vIHNwZWNpZmllZCwgYWNjZXB0CisJCSAgIDxtYm94PiA8ZGlyPiBvciBqdXN0IDxkaXI+ICovCisJCXN3aXRjaCAoYXJnYyAtIChhcmdwLWFyZ3YpKSB7CisJCWNhc2UgMToKKwkJCWRpciA9IGFyZ3BbMF07CisJCQlhcmdwID0gc3RkaW5fb25seTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzdGRpbl9vbmx5WzBdID0gYXJncFswXTsKKwkJCWRpciA9IGFyZ3BbMV07CisJCQlhcmdwID0gc3RkaW5fb25seTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNhZ2UoZ2l0X21haWxzcGxpdF91c2FnZSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBOZXcgdXNhZ2U6IGlmIG5vIG1vcmUgYXJndW1lbnQsIHBhcnNlIHN0ZGluICovCisJCWlmICggISphcmdwICkKKwkJCWFyZ3AgPSBzdGRpbl9vbmx5OworCX0KKworCXdoaWxlICgqYXJncCkgeworCQljb25zdCBjaGFyICphcmcgPSAqYXJncCsrOworCQlzdHJ1Y3Qgc3RhdCBhcmdzdGF0OworCQlpbnQgcmV0ID0gMDsKKworCQlpZiAoYXJnWzBdID09ICctJyAmJiBhcmdbMV0gPT0gMCkgeworCQkJcmV0ID0gc3BsaXRfbWJveChhcmcsIGRpciwgYWxsb3dfYmFyZSwgbnJfcHJlYywgbnIpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQllcnJvcigiY2Fubm90IHNwbGl0IHBhdGNoZXMgZnJvbSBzdGRpbiIpOworCQkJCXJldHVybiAxOworCQkJfQorCQkJbnVtICs9IChyZXQgLSBucik7CisJCQluciA9IHJldDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0YXQoYXJnLCAmYXJnc3RhdCkgPT0gLTEpIHsKKwkJCWVycm9yKCJjYW5ub3Qgc3RhdCAlcyAoJXMpIiwgYXJnLCBzdHJlcnJvcihlcnJubykpOworCQkJcmV0dXJuIDE7CisJCX0KKworCQlpZiAoU19JU0RJUihhcmdzdGF0LnN0X21vZGUpKQorCQkJcmV0ID0gc3BsaXRfbWFpbGRpcihhcmcsIGRpciwgbnJfcHJlYywgbnIpOworCQllbHNlCisJCQlyZXQgPSBzcGxpdF9tYm94KGFyZywgZGlyLCBhbGxvd19iYXJlLCBucl9wcmVjLCBucik7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCWVycm9yKCJjYW5ub3Qgc3BsaXQgcGF0Y2hlcyBmcm9tICVzIiwgYXJnKTsKKwkJCXJldHVybiAxOworCQl9CisJCW51bSArPSAocmV0IC0gbnIpOworCQluciA9IHJldDsKKwl9CisKKwlwcmludGYoIiVkXG4iLCBudW0pOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21lcmdlLWJhc2UuYyBiL2J1aWx0aW4vbWVyZ2UtYmFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YTgyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLWJhc2UuYwpAQCAtMCwwICsxLDI1OSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBpbnQgc2hvd19tZXJnZV9iYXNlKHN0cnVjdCBjb21taXQgKipyZXYsIGludCByZXZfbnIsIGludCBzaG93X2FsbCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdDsKKworCXJlc3VsdCA9IGdldF9tZXJnZV9iYXNlc19tYW55X2RpcnR5KHJldlswXSwgcmV2X25yIC0gMSwgcmV2ICsgMSk7CisKKwlpZiAoIXJlc3VsdCkKKwkJcmV0dXJuIDE7CisKKwl3aGlsZSAocmVzdWx0KSB7CisJCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KHJlc3VsdC0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKKwkJaWYgKCFzaG93X2FsbCkKKwkJCXJldHVybiAwOworCQlyZXN1bHQgPSByZXN1bHQtPm5leHQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWVyZ2VfYmFzZV91c2FnZVtdID0geworCU5fKCJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iKSwKKwlOXygiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIpLAorCU5fKCJnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IDxjb21taXQ+Li4uIiksCisJTl8oImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iKSwKKwlOXygiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqZ2V0X2NvbW1pdF9yZWZlcmVuY2UoY29uc3QgY2hhciAqYXJnKQoreworCXVuc2lnbmVkIGNoYXIgcmV2a2V5WzIwXTsKKwlzdHJ1Y3QgY29tbWl0ICpyOworCisJaWYgKGdldF9zaGExKGFyZywgcmV2a2V5KSkKKwkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZyk7CisJciA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHJldmtleSk7CisJaWYgKCFyKQorCQlkaWUoIk5vdCBhIHZhbGlkIGNvbW1pdCBuYW1lICVzIiwgYXJnKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9pbmRlcGVuZGVudChpbnQgY291bnQsIGNvbnN0IGNoYXIgKiphcmdzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcmV2cyA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXN1bHQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgaS0tKQorCQljb21taXRfbGlzdF9pbnNlcnQoZ2V0X2NvbW1pdF9yZWZlcmVuY2UoYXJnc1tpXSksICZyZXZzKTsKKworCXJlc3VsdCA9IHJlZHVjZV9oZWFkcyhyZXZzKTsKKwlpZiAoIXJlc3VsdCkKKwkJcmV0dXJuIDE7CisKKwl3aGlsZSAocmVzdWx0KSB7CisJCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KHJlc3VsdC0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKKwkJcmVzdWx0ID0gcmVzdWx0LT5uZXh0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVfb2N0b3B1cyhpbnQgY291bnQsIGNvbnN0IGNoYXIgKiphcmdzLCBpbnQgc2hvd19hbGwpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpyZXZzID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IGNvdW50IC0gMTsgaSA+PSAwOyBpLS0pCisJCWNvbW1pdF9saXN0X2luc2VydChnZXRfY29tbWl0X3JlZmVyZW5jZShhcmdzW2ldKSwgJnJldnMpOworCisJcmVzdWx0ID0gcmVkdWNlX2hlYWRzKGdldF9vY3RvcHVzX21lcmdlX2Jhc2VzKHJldnMpKTsKKworCWlmICghcmVzdWx0KQorCQlyZXR1cm4gMTsKKworCXdoaWxlIChyZXN1bHQpIHsKKwkJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgocmVzdWx0LT5pdGVtLT5vYmplY3Quc2hhMSkpOworCQlpZiAoIXNob3dfYWxsKQorCQkJcmV0dXJuIDA7CisJCXJlc3VsdCA9IHJlc3VsdC0+bmV4dDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVfaXNfYW5jZXN0b3IoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjb21taXQgKm9uZSwgKnR3bzsKKworCWlmIChhcmdjICE9IDIpCisJCWRpZSgiLS1pcy1hbmNlc3RvciB0YWtlcyBleGFjdGx5IHR3byBjb21taXRzIik7CisJb25lID0gZ2V0X2NvbW1pdF9yZWZlcmVuY2UoYXJndlswXSk7CisJdHdvID0gZ2V0X2NvbW1pdF9yZWZlcmVuY2UoYXJndlsxXSk7CisJaWYgKGluX21lcmdlX2Jhc2VzKG9uZSwgdHdvKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RydWN0IHJldl9jb2xsZWN0IHsKKwlzdHJ1Y3QgY29tbWl0ICoqY29tbWl0OworCWludCBucjsKKwlpbnQgYWxsb2M7CisJdW5zaWduZWQgaW50IGluaXRpYWwgOiAxOworfTsKKworc3RhdGljIHZvaWQgYWRkX29uZV9jb21taXQodW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IHJldl9jb2xsZWN0ICpyZXZzKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWlmIChpc19udWxsX3NoYTEoc2hhMSkpCisJCXJldHVybjsKKworCWNvbW1pdCA9IGxvb2t1cF9jb21taXQoc2hhMSk7CisJaWYgKCFjb21taXQgfHwKKwkgICAgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVE1QX01BUkspIHx8CisJICAgIHBhcnNlX2NvbW1pdChjb21taXQpKQorCQlyZXR1cm47CisKKwlBTExPQ19HUk9XKHJldnMtPmNvbW1pdCwgcmV2cy0+bnIgKyAxLCByZXZzLT5hbGxvYyk7CisJcmV2cy0+Y29tbWl0W3JldnMtPm5yKytdID0gY29tbWl0OworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRNUF9NQVJLOworfQorCitzdGF0aWMgaW50IGNvbGxlY3Rfb25lX3JlZmxvZ19lbnQodW5zaWduZWQgY2hhciAqb3NoYTEsIHVuc2lnbmVkIGNoYXIgKm5zaGExLAorCQkJCSAgY29uc3QgY2hhciAqaWRlbnQsIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wLAorCQkJCSAgaW50IHR6LCBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYmRhdGEpCit7CisJc3RydWN0IHJldl9jb2xsZWN0ICpyZXZzID0gY2JkYXRhOworCisJaWYgKHJldnMtPmluaXRpYWwpIHsKKwkJcmV2cy0+aW5pdGlhbCA9IDA7CisJCWFkZF9vbmVfY29tbWl0KG9zaGExLCByZXZzKTsKKwl9CisJYWRkX29uZV9jb21taXQobnNoYTEsIHJldnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9mb3JrX3BvaW50KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNoYXIgKnJlZm5hbWU7CisJY29uc3QgY2hhciAqY29tbWl0bmFtZTsKKwlzdHJ1Y3QgcmV2X2NvbGxlY3QgcmV2czsKKwlzdHJ1Y3QgY29tbWl0ICpkZXJpdmVkOworCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXM7CisJaW50IGksIHJldCA9IDA7CisKKwlzd2l0Y2ggKGR3aW1fcmVmKGFyZ3ZbMF0sIHN0cmxlbihhcmd2WzBdKSwgc2hhMSwgJnJlZm5hbWUpKSB7CisJY2FzZSAwOgorCQlkaWUoIk5vIHN1Y2ggcmVmOiAnJXMnIiwgYXJndlswXSk7CisJY2FzZSAxOgorCQlicmVhazsgLyogZ29vZCAqLworCWRlZmF1bHQ6CisJCWRpZSgiQW1iaWd1b3VzIHJlZm5hbWU6ICclcyciLCBhcmd2WzBdKTsKKwl9CisKKwljb21taXRuYW1lID0gKGFyZ2MgPT0gMikgPyBhcmd2WzFdIDogIkhFQUQiOworCWlmIChnZXRfc2hhMShjb21taXRuYW1lLCBzaGExKSkKKwkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIsIGNvbW1pdG5hbWUpOworCisJZGVyaXZlZCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCW1lbXNldCgmcmV2cywgMCwgc2l6ZW9mKHJldnMpKTsKKwlyZXZzLmluaXRpYWwgPSAxOworCWZvcl9lYWNoX3JlZmxvZ19lbnQocmVmbmFtZSwgY29sbGVjdF9vbmVfcmVmbG9nX2VudCwgJnJldnMpOworCisJZm9yIChpID0gMDsgaSA8IHJldnMubnI7IGkrKykKKwkJcmV2cy5jb21taXRbaV0tPm9iamVjdC5mbGFncyAmPSB+VE1QX01BUks7CisKKwliYXNlcyA9IGdldF9tZXJnZV9iYXNlc19tYW55X2RpcnR5KGRlcml2ZWQsIHJldnMubnIsIHJldnMuY29tbWl0KTsKKworCS8qCisJICogVGhlcmUgc2hvdWxkIGJlIG9uZSBhbmQgb25seSBvbmUgbWVyZ2UgYmFzZSwgd2hlbiB3ZSBmb3VuZAorCSAqIGEgY29tbW9uIGFuY2VzdG9yIGFtb25nIHJlZmxvZyBlbnRyaWVzLgorCSAqLworCWlmICghYmFzZXMgfHwgYmFzZXMtPm5leHQpIHsKKwkJcmV0ID0gMTsKKwkJZ290byBjbGVhbnVwX3JldHVybjsKKwl9CisKKwkvKiBBbmQgdGhlIGZvdW5kIG9uZSBtdXN0IGJlIG9uZSBvZiB0aGUgcmVmbG9nIGVudHJpZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy5ucjsgaSsrKQorCQlpZiAoJmJhc2VzLT5pdGVtLT5vYmplY3QgPT0gJnJldnMuY29tbWl0W2ldLT5vYmplY3QpCisJCQlicmVhazsgLyogZm91bmQgKi8KKwlpZiAocmV2cy5uciA8PSBpKSB7CisJCXJldCA9IDE7IC8qIG5vdCBmb3VuZCAqLworCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCX0KKworCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KGJhc2VzLT5pdGVtLT5vYmplY3Quc2hhMSkpOworCitjbGVhbnVwX3JldHVybjoKKwlmcmVlX2NvbW1pdF9saXN0KGJhc2VzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY21kX21lcmdlX2Jhc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNvbW1pdCAqKnJldjsKKwlpbnQgcmV2X25yID0gMDsKKwlpbnQgc2hvd19hbGwgPSAwOworCWludCBjbWRtb2RlID0gMDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnYScsICJhbGwiLCAmc2hvd19hbGwsIE5fKCJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiKSksCisJCU9QVF9DTURNT0RFKDAsICJvY3RvcHVzIiwgJmNtZG1vZGUsCisJCQkgICAgTl8oImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIpLCAnbycpLAorCQlPUFRfQ01ETU9ERSgwLCAiaW5kZXBlbmRlbnQiLCAmY21kbW9kZSwKKwkJCSAgICBOXygibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiKSwgJ3InKSwKKwkJT1BUX0NNRE1PREUoMCwgImlzLWFuY2VzdG9yIiwgJmNtZG1vZGUsCisJCQkgICAgTl8oImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIpLCAnYScpLAorCQlPUFRfQ01ETU9ERSgwLCAiZm9yay1wb2ludCIsICZjbWRtb2RlLAorCQkJICAgIE5fKCJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIpLCAnZicpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgbWVyZ2VfYmFzZV91c2FnZSwgMCk7CisKKwlpZiAoY21kbW9kZSA9PSAnYScpIHsKKwkJaWYgKGFyZ2MgPCAyKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKG1lcmdlX2Jhc2VfdXNhZ2UsIG9wdGlvbnMpOworCQlpZiAoc2hvd19hbGwpCisJCQlkaWUoIi0taXMtYW5jZXN0b3IgY2Fubm90IGJlIHVzZWQgd2l0aCAtLWFsbCIpOworCQlyZXR1cm4gaGFuZGxlX2lzX2FuY2VzdG9yKGFyZ2MsIGFyZ3YpOworCX0KKworCWlmIChjbWRtb2RlID09ICdyJyAmJiBzaG93X2FsbCkKKwkJZGllKCItLWluZGVwZW5kZW50IGNhbm5vdCBiZSB1c2VkIHdpdGggLS1hbGwiKTsKKworCWlmIChjbWRtb2RlID09ICdvJykKKwkJcmV0dXJuIGhhbmRsZV9vY3RvcHVzKGFyZ2MsIGFyZ3YsIHNob3dfYWxsKTsKKworCWlmIChjbWRtb2RlID09ICdyJykKKwkJcmV0dXJuIGhhbmRsZV9pbmRlcGVuZGVudChhcmdjLCBhcmd2KTsKKworCWlmIChjbWRtb2RlID09ICdmJykgeworCQlpZiAoYXJnYyA8IDEgfHwgMiA8IGFyZ2MpCisJCQl1c2FnZV93aXRoX29wdGlvbnMobWVyZ2VfYmFzZV91c2FnZSwgb3B0aW9ucyk7CisJCXJldHVybiBoYW5kbGVfZm9ya19wb2ludChhcmdjLCBhcmd2KTsKKwl9CisKKwlpZiAoYXJnYyA8IDIpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhtZXJnZV9iYXNlX3VzYWdlLCBvcHRpb25zKTsKKworCXJldiA9IHhtYWxsb2MoYXJnYyAqIHNpemVvZigqcmV2KSk7CisJd2hpbGUgKGFyZ2MtLSA+IDApCisJCXJldltyZXZfbnIrK10gPSBnZXRfY29tbWl0X3JlZmVyZW5jZSgqYXJndisrKTsKKwlyZXR1cm4gc2hvd19tZXJnZV9iYXNlKHJldiwgcmV2X25yLCBzaG93X2FsbCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21lcmdlLWZpbGUuYyBiL2J1aWx0aW4vbWVyZ2UtZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZDBiYzgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLWZpbGUuYwpAQCAtMCwwICsxLDEwOCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInhkaWZmL3hkaWZmLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbWVyZ2VfZmlsZV91c2FnZVtdID0geworCU5fKCJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5hbWUxPiBbLUwgPG9yaWc+IFstTCA8bmFtZTI+XV1dIDxmaWxlMT4gPG9yaWctZmlsZT4gPGZpbGUyPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgbGFiZWxfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdGF0aWMgaW50IGxhYmVsX2NvdW50ID0gMDsKKwljb25zdCBjaGFyICoqbmFtZXMgPSAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlOworCisJaWYgKGxhYmVsX2NvdW50ID49IDMpCisJCXJldHVybiBlcnJvcigidG9vIG1hbnkgbGFiZWxzIG9uIHRoZSBjb21tYW5kIGxpbmUiKTsKKwluYW1lc1tsYWJlbF9jb3VudCsrXSA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9tZXJnZV9maWxlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKm5hbWVzWzNdID0geyBOVUxMLCBOVUxMLCBOVUxMIH07CisJbW1maWxlX3QgbW1mc1szXTsKKwltbWJ1ZmZlcl90IHJlc3VsdCA9IHtOVUxMLCAwfTsKKwl4bXBhcmFtX3QgeG1wID0ge3swfX07CisJaW50IHJldCA9IDAsIGkgPSAwLCB0b19zdGRvdXQgPSAwOworCWludCBxdWlldCA9IDA7CisJaW50IHByZWZpeGxlbiA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdwJywgInN0ZG91dCIsICZ0b19zdGRvdXQsIE5fKCJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IikpLAorCQlPUFRfU0VUX0lOVCgwLCAiZGlmZjMiLCAmeG1wLnN0eWxlLCBOXygidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiKSwgWERMX01FUkdFX0RJRkYzKSwKKwkJT1BUX1NFVF9JTlQoMCwgIm91cnMiLCAmeG1wLmZhdm9yLCBOXygiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIiksCisJCQkgICAgWERMX01FUkdFX0ZBVk9SX09VUlMpLAorCQlPUFRfU0VUX0lOVCgwLCAidGhlaXJzIiwgJnhtcC5mYXZvciwgTl8oImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIiksCisJCQkgICAgWERMX01FUkdFX0ZBVk9SX1RIRUlSUyksCisJCU9QVF9TRVRfSU5UKDAsICJ1bmlvbiIsICZ4bXAuZmF2b3IsIE5fKCJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIiksCisJCQkgICAgWERMX01FUkdFX0ZBVk9SX1VOSU9OKSwKKwkJT1BUX0lOVEVHRVIoMCwgIm1hcmtlci1zaXplIiwgJnhtcC5tYXJrZXJfc2l6ZSwKKwkJCSAgICBOXygiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiKSksCisJCU9QVF9fUVVJRVQoJnF1aWV0LCBOXygiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIikpLAorCQlPUFRfQ0FMTEJBQ0soJ0wnLCBOVUxMLCBuYW1lcywgTl8oIm5hbWUiKSwKKwkJCSAgICAgTl8oInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIpLCAmbGFiZWxfY2IpLAorCQlPUFRfRU5EKCksCisJfTsKKworCXhtcC5sZXZlbCA9IFhETF9NRVJHRV9aRUFMT1VTX0FMTlVNOworCXhtcC5zdHlsZSA9IDA7CisJeG1wLmZhdm9yID0gMDsKKworCWlmIChzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSkgeworCQkvKiBSZWFkIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgKi8KKwkJZ2l0X2NvbmZpZyhnaXRfeG1lcmdlX2NvbmZpZywgTlVMTCk7CisJCWlmICgwIDw9IGdpdF94bWVyZ2Vfc3R5bGUpCisJCQl4bXAuc3R5bGUgPSBnaXRfeG1lcmdlX3N0eWxlOworCX0KKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgbWVyZ2VfZmlsZV91c2FnZSwgMCk7CisJaWYgKGFyZ2MgIT0gMykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKG1lcmdlX2ZpbGVfdXNhZ2UsIG9wdGlvbnMpOworCWlmIChxdWlldCkgeworCQlpZiAoIWZyZW9wZW4oIi9kZXYvbnVsbCIsICJ3Iiwgc3RkZXJyKSkKKwkJCXJldHVybiBlcnJvcigiZmFpbGVkIHRvIHJlZGlyZWN0IHN0ZGVyciB0byAvZGV2L251bGw6ICIKKwkJCQkgICAgICIlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCisJaWYgKHByZWZpeCkKKwkJcHJlZml4bGVuID0gc3RybGVuKHByZWZpeCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmZuYW1lID0gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgcHJlZml4bGVuLCBhcmd2W2ldKTsKKwkJaWYgKCFuYW1lc1tpXSkKKwkJCW5hbWVzW2ldID0gYXJndltpXTsKKwkJaWYgKHJlYWRfbW1maWxlKG1tZnMgKyBpLCBmbmFtZSkpCisJCQlyZXR1cm4gLTE7CisJCWlmIChtbWZzW2ldLnNpemUgPiBNQVhfWERJRkZfU0laRSB8fAorCQkgICAgYnVmZmVyX2lzX2JpbmFyeShtbWZzW2ldLnB0ciwgbW1mc1tpXS5zaXplKSkKKwkJCXJldHVybiBlcnJvcigiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogJXMiLAorCQkJCQlhcmd2W2ldKTsKKwl9CisKKwl4bXAuYW5jZXN0b3IgPSBuYW1lc1sxXTsKKwl4bXAuZmlsZTEgPSBuYW1lc1swXTsKKwl4bXAuZmlsZTIgPSBuYW1lc1syXTsKKwlyZXQgPSB4ZGxfbWVyZ2UobW1mcyArIDEsIG1tZnMgKyAwLCBtbWZzICsgMiwgJnhtcCwgJnJlc3VsdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlmcmVlKG1tZnNbaV0ucHRyKTsKKworCWlmIChyZXQgPj0gMCkgeworCQljb25zdCBjaGFyICpmaWxlbmFtZSA9IGFyZ3ZbMF07CisJCWNvbnN0IGNoYXIgKmZwYXRoID0gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgcHJlZml4bGVuLCBhcmd2WzBdKTsKKwkJRklMRSAqZiA9IHRvX3N0ZG91dCA/IHN0ZG91dCA6IGZvcGVuKGZwYXRoLCAid2IiKTsKKworCQlpZiAoIWYpCisJCQlyZXQgPSBlcnJvcigiQ291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRpbmciLCBmaWxlbmFtZSk7CisJCWVsc2UgaWYgKHJlc3VsdC5zaXplICYmCisJCQkgZndyaXRlKHJlc3VsdC5wdHIsIHJlc3VsdC5zaXplLCAxLCBmKSAhPSAxKQorCQkJcmV0ID0gZXJyb3IoIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIsIGZpbGVuYW1lKTsKKwkJZWxzZSBpZiAoZmNsb3NlKGYpKQorCQkJcmV0ID0gZXJyb3IoIkNvdWxkIG5vdCBjbG9zZSAlcyIsIGZpbGVuYW1lKTsKKwkJZnJlZShyZXN1bHQucHRyKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS1pbmRleC5jIGIvYnVpbHRpbi9tZXJnZS1pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzQyN2MKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLWluZGV4LmMKQEAgLTAsMCArMSwxMTAgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKnBnbTsKK3N0YXRpYyBpbnQgb25lX3Nob3QsIHF1aWV0Oworc3RhdGljIGludCBlcnI7CisKK3N0YXRpYyBpbnQgbWVyZ2VfZW50cnkoaW50IHBvcywgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgZm91bmQ7CisJY29uc3QgY2hhciAqYXJndW1lbnRzW10gPSB7IHBnbSwgIiIsICIiLCAiIiwgcGF0aCwgIiIsICIiLCAiIiwgTlVMTCB9OworCWNoYXIgaGV4YnVmWzRdW0dJVF9TSEExX0hFWFNaICsgMV07CisJY2hhciBvd25idWZbNF1bNjBdOworCisJaWYgKHBvcyA+PSBhY3RpdmVfbnIpCisJCWRpZSgiZ2l0IG1lcmdlLWluZGV4OiAlcyBub3QgaW4gdGhlIGNhY2hlIiwgcGF0aCk7CisJZm91bmQgPSAwOworCWRvIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlpbnQgc3RhZ2UgPSBjZV9zdGFnZShjZSk7CisKKwkJaWYgKHN0cmNtcChjZS0+bmFtZSwgcGF0aCkpCisJCQlicmVhazsKKwkJZm91bmQrKzsKKwkJc2hhMV90b19oZXhfcihoZXhidWZbc3RhZ2VdLCBjZS0+c2hhMSk7CisJCXhzbnByaW50Zihvd25idWZbc3RhZ2VdLCBzaXplb2Yob3duYnVmW3N0YWdlXSksICIlbyIsIGNlLT5jZV9tb2RlKTsKKwkJYXJndW1lbnRzW3N0YWdlXSA9IGhleGJ1ZltzdGFnZV07CisJCWFyZ3VtZW50c1tzdGFnZSArIDRdID0gb3duYnVmW3N0YWdlXTsKKwl9IHdoaWxlICgrK3BvcyA8IGFjdGl2ZV9ucik7CisJaWYgKCFmb3VuZCkKKwkJZGllKCJnaXQgbWVyZ2UtaW5kZXg6ICVzIG5vdCBpbiB0aGUgY2FjaGUiLCBwYXRoKTsKKworCWlmIChydW5fY29tbWFuZF92X29wdChhcmd1bWVudHMsIDApKSB7CisJCWlmIChvbmVfc2hvdCkKKwkJCWVycisrOworCQllbHNlIHsKKwkJCWlmICghcXVpZXQpCisJCQkJZGllKCJtZXJnZSBwcm9ncmFtIGZhaWxlZCIpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX29uZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIHN0cmxlbihwYXRoKSk7CisKKwkvKgorCSAqIElmIGl0IGFscmVhZHkgZXhpc3RzIGluIHRoZSBjYWNoZSBhcyBzdGFnZTAsIGl0J3MKKwkgKiBhbHJlYWR5IG1lcmdlZCBhbmQgdGhlcmUgaXMgbm90aGluZyB0byBkby4KKwkgKi8KKwlpZiAocG9zIDwgMCkKKwkJbWVyZ2VfZW50cnkoLXBvcy0xLCBwYXRoKTsKK30KKworc3RhdGljIHZvaWQgbWVyZ2VfYWxsKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWlmICghY2Vfc3RhZ2UoY2UpKQorCQkJY29udGludWU7CisJCWkgKz0gbWVyZ2VfZW50cnkoaSwgY2UtPm5hbWUpLTE7CisJfQorfQorCitpbnQgY21kX21lcmdlX2luZGV4KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBmb3JjZV9maWxlID0gMDsKKworCS8qIFdpdGhvdXQgdGhpcyB3ZSBjYW5ub3QgcmVseSBvbiB3YWl0cGlkKCkgdG8gdGVsbAorCSAqIHdoYXQgaGFwcGVuZWQgdG8gb3VyIGNoaWxkcmVuLgorCSAqLworCXNpZ25hbChTSUdDSExELCBTSUdfREZMKTsKKworCWlmIChhcmdjIDwgMykKKwkJdXNhZ2UoImdpdCBtZXJnZS1pbmRleCBbLW9dIFstcV0gPG1lcmdlLXByb2dyYW0+ICgtYSB8IFstLV0gWzxmaWxlbmFtZT4uLi5dKSIpOworCisJcmVhZF9jYWNoZSgpOworCisJaSA9IDE7CisJaWYgKCFzdHJjbXAoYXJndltpXSwgIi1vIikpIHsKKwkJb25lX3Nob3QgPSAxOworCQlpKys7CisJfQorCWlmICghc3RyY21wKGFyZ3ZbaV0sICItcSIpKSB7CisJCXF1aWV0ID0gMTsKKwkJaSsrOworCX0KKwlwZ20gPSBhcmd2W2krK107CisJZm9yICg7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJaWYgKCFmb3JjZV9maWxlICYmICphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQkJZm9yY2VfZmlsZSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItYSIpKSB7CisJCQkJbWVyZ2VfYWxsKCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlkaWUoImdpdCBtZXJnZS1pbmRleDogdW5rbm93biBvcHRpb24gJXMiLCBhcmcpOworCQl9CisJCW1lcmdlX29uZV9wYXRoKGFyZyk7CisJfQorCWlmIChlcnIgJiYgIXF1aWV0KQorCQlkaWUoIm1lcmdlIHByb2dyYW0gZmFpbGVkIik7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWVyZ2Utb3Vycy5jIGIvYnVpbHRpbi9tZXJnZS1vdXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg0NDExNgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWVyZ2Utb3Vycy5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBnaXQtbWVyZ2Utb3Vycy5zaCBhcyBidWlsdGluCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IFRob21hcyBIYXJuaW5nIEpyCisgKiBPcmlnaW5hbDoKKyAqIE9yaWdpbmFsIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworICoKKyAqIFByZXRlbmQgd2UgcmVzb2x2ZWQgdGhlIGhlYWRzLCBidXQgZGVjbGFyZSBvdXIgdHJlZSB0cnVtcHMgZXZlcnlib2R5IGVsc2UuCisgKi8KKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGJ1aWx0aW5fbWVyZ2Vfb3Vyc191c2FnZVtdID0KKwkiZ2l0IG1lcmdlLW91cnMgPGJhc2U+Li4uIC0tIEhFQUQgPHJlbW90ZT4uLi4iOworCitzdGF0aWMgY29uc3QgY2hhciAqZGlmZl9pbmRleF9hcmdzW10gPSB7CisJImRpZmYtaW5kZXgiLCAiLS1xdWlldCIsICItLWNhY2hlZCIsICJIRUFEIiwgIi0tIiwgTlVMTAorfTsKKyNkZWZpbmUgTkFSR1MgKEFSUkFZX1NJWkUoZGlmZl9pbmRleF9hcmdzKSAtIDEpCisKK2ludCBjbWRfbWVyZ2Vfb3VycyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKGJ1aWx0aW5fbWVyZ2Vfb3Vyc191c2FnZSk7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gZXhpdCB3aXRoIDIgaWYgdGhlIGluZGV4IGRvZXMgbm90IG1hdGNoIG91ciBIRUFEIHRyZWUsCisJICogYmVjYXVzZSB0aGUgY3VycmVudCBpbmRleCBpcyB3aGF0IHdlIHdpbGwgYmUgY29tbWl0dGluZyBhcyB0aGUKKwkgKiBtZXJnZSByZXN1bHQuCisJICovCisJaWYgKGNtZF9kaWZmX2luZGV4KE5BUkdTLCBkaWZmX2luZGV4X2FyZ3MsIHByZWZpeCkpCisJCWV4aXQoMik7CisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWVyZ2UtcmVjdXJzaXZlLmMgYi9idWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MWVmZDUKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLXJlY3Vyc2l2ZS5jCkBAIC0wLDAgKzEsODAgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIGJ1aWx0aW5fbWVyZ2VfcmVjdXJzaXZlX3VzYWdlW10gPQorCSJnaXQgJXMgPGJhc2U+Li4uIC0tIDxoZWFkPiA8cmVtb3RlPiAuLi4iOworCitzdGF0aWMgY29uc3QgY2hhciAqYmV0dGVyX2JyYW5jaF9uYW1lKGNvbnN0IGNoYXIgKmJyYW5jaCkKK3sKKwlzdGF0aWMgY2hhciBnaXRoZWFkX2Vudls4ICsgNDAgKyAxXTsKKwljaGFyICpuYW1lOworCisJaWYgKHN0cmxlbihicmFuY2gpICE9IDQwKQorCQlyZXR1cm4gYnJhbmNoOworCXhzbnByaW50ZihnaXRoZWFkX2Vudiwgc2l6ZW9mKGdpdGhlYWRfZW52KSwgIkdJVEhFQURfJXMiLCBicmFuY2gpOworCW5hbWUgPSBnZXRlbnYoZ2l0aGVhZF9lbnYpOworCXJldHVybiBuYW1lID8gbmFtZSA6IGJyYW5jaDsKK30KKworaW50IGNtZF9tZXJnZV9yZWN1cnNpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZXNbMjFdOworCXVuc2lnbmVkIGJhc2VzX2NvdW50ID0gMDsKKwlpbnQgaSwgZmFpbGVkOworCXVuc2lnbmVkIGNoYXIgaDFbMjBdLCBoMlsyMF07CisJc3RydWN0IG1lcmdlX29wdGlvbnMgbzsKKwlzdHJ1Y3QgY29tbWl0ICpyZXN1bHQ7CisKKwlpbml0X21lcmdlX29wdGlvbnMoJm8pOworCWlmIChhcmd2WzBdICYmIGVuZHNfd2l0aChhcmd2WzBdLCAiLXN1YnRyZWUiKSkKKwkJby5zdWJ0cmVlX3NoaWZ0ID0gIiI7CisKKwlpZiAoYXJnYyA8IDQpCisJCXVzYWdlZihidWlsdGluX21lcmdlX3JlY3Vyc2l2ZV91c2FnZSwgYXJndlswXSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tIikpIHsKKwkJCWlmICghYXJnWzJdKQorCQkJCWJyZWFrOworCQkJaWYgKHBhcnNlX21lcmdlX29wdCgmbywgYXJnICsgMikpCisJCQkJZGllKCJVbmtub3duIG9wdGlvbiAlcyIsIGFyZyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYmFzZXNfY291bnQgPCBBUlJBWV9TSVpFKGJhc2VzKS0xKSB7CisJCQl1bnNpZ25lZCBjaGFyICpzaGEgPSB4bWFsbG9jKDIwKTsKKwkJCWlmIChnZXRfc2hhMShhcmd2W2ldLCBzaGEpKQorCQkJCWRpZSgiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIiwgYXJndltpXSk7CisJCQliYXNlc1tiYXNlc19jb3VudCsrXSA9IHNoYTsKKwkJfQorCQllbHNlCisJCQl3YXJuaW5nKCJDYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCBiYXNlcy4gIgorCQkJCSJJZ25vcmluZyAlcy4iLAorCQkJCShpbnQpQVJSQVlfU0laRShiYXNlcyktMSwgYXJndltpXSk7CisJfQorCWlmIChhcmdjIC0gaSAhPSAzKSAvKiAiLS0iICI8aGVhZD4iICI8cmVtb3RlPiIgKi8KKwkJZGllKCJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIik7CisKKwlvLmJyYW5jaDEgPSBhcmd2WysraV07CisJby5icmFuY2gyID0gYXJndlsrK2ldOworCisJaWYgKGdldF9zaGExKG8uYnJhbmNoMSwgaDEpKQorCQlkaWUoIkNvdWxkIG5vdCByZXNvbHZlIHJlZiAnJXMnIiwgby5icmFuY2gxKTsKKwlpZiAoZ2V0X3NoYTEoby5icmFuY2gyLCBoMikpCisJCWRpZSgiQ291bGQgbm90IHJlc29sdmUgcmVmICclcyciLCBvLmJyYW5jaDIpOworCisJby5icmFuY2gxID0gYmV0dGVyX2JyYW5jaF9uYW1lKG8uYnJhbmNoMSk7CisJby5icmFuY2gyID0gYmV0dGVyX2JyYW5jaF9uYW1lKG8uYnJhbmNoMik7CisKKwlpZiAoby52ZXJib3NpdHkgPj0gMykKKwkJcHJpbnRmKCJNZXJnaW5nICVzIHdpdGggJXNcbiIsIG8uYnJhbmNoMSwgby5icmFuY2gyKTsKKworCWZhaWxlZCA9IG1lcmdlX3JlY3Vyc2l2ZV9nZW5lcmljKCZvLCBoMSwgaDIsIGJhc2VzX2NvdW50LCBiYXNlcywgJnJlc3VsdCk7CisJaWYgKGZhaWxlZCA8IDApCisJCXJldHVybiAxMjg7IC8qIGRpZSgpIGVycm9yIGNvZGUgKi8KKwlyZXR1cm4gZmFpbGVkOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS10cmVlLmMgYi9idWlsdGluL21lcmdlLXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTRhYWZlCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9tZXJnZS10cmVlLmMKQEAgLTAsMCArMSwzNzkgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAibWVyZ2UtYmxvYnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgbWVyZ2VfdHJlZV91c2FnZVtdID0gImdpdCBtZXJnZS10cmVlIDxiYXNlLXRyZWU+IDxicmFuY2gxPiA8YnJhbmNoMj4iOworCitzdHJ1Y3QgbWVyZ2VfbGlzdCB7CisJc3RydWN0IG1lcmdlX2xpc3QgKm5leHQ7CisJc3RydWN0IG1lcmdlX2xpc3QgKmxpbms7CS8qIG90aGVyIHN0YWdlcyBmb3IgdGhpcyBvYmplY3QgKi8KKworCXVuc2lnbmVkIGludCBzdGFnZSA6IDI7CisJdW5zaWduZWQgaW50IG1vZGU7CisJY29uc3QgY2hhciAqcGF0aDsKKwlzdHJ1Y3QgYmxvYiAqYmxvYjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWVyZ2VfbGlzdCAqbWVyZ2VfcmVzdWx0LCAqKm1lcmdlX3Jlc3VsdF9lbmQgPSAmbWVyZ2VfcmVzdWx0OworCitzdGF0aWMgdm9pZCBhZGRfbWVyZ2VfZW50cnkoc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5KQoreworCSptZXJnZV9yZXN1bHRfZW5kID0gZW50cnk7CisJbWVyZ2VfcmVzdWx0X2VuZCA9ICZlbnRyeS0+bmV4dDsKK30KKworc3RhdGljIHZvaWQgbWVyZ2VfdHJlZXMoc3RydWN0IHRyZWVfZGVzYyB0WzNdLCBjb25zdCBjaGFyICpiYXNlKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmV4cGxhbmF0aW9uKHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSkKK3sKKwlzd2l0Y2ggKGVudHJ5LT5zdGFnZSkgeworCWNhc2UgMDoKKwkJcmV0dXJuICJtZXJnZWQiOworCWNhc2UgMzoKKwkJcmV0dXJuICJhZGRlZCBpbiByZW1vdGUiOworCWNhc2UgMjoKKwkJaWYgKGVudHJ5LT5saW5rKQorCQkJcmV0dXJuICJhZGRlZCBpbiBib3RoIjsKKwkJcmV0dXJuICJhZGRlZCBpbiBsb2NhbCI7CisJfQorCisJLyogRXhpc3RlZCBpbiBiYXNlICovCisJZW50cnkgPSBlbnRyeS0+bGluazsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gInJlbW92ZWQgaW4gYm90aCI7CisKKwlpZiAoZW50cnktPmxpbmspCisJCXJldHVybiAiY2hhbmdlZCBpbiBib3RoIjsKKworCWlmIChlbnRyeS0+c3RhZ2UgPT0gMykKKwkJcmV0dXJuICJyZW1vdmVkIGluIGxvY2FsIjsKKwlyZXR1cm4gInJlbW92ZWQgaW4gcmVtb3RlIjsKK30KKworc3RhdGljIHZvaWQgKnJlc3VsdChzdHJ1Y3QgbWVyZ2VfbGlzdCAqZW50cnksIHVuc2lnbmVkIGxvbmcgKnNpemUpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXN0cnVjdCBibG9iICpiYXNlLCAqb3VyLCAqdGhlaXI7CisJY29uc3QgY2hhciAqcGF0aCA9IGVudHJ5LT5wYXRoOworCisJaWYgKCFlbnRyeS0+c3RhZ2UpCisJCXJldHVybiByZWFkX3NoYTFfZmlsZShlbnRyeS0+YmxvYi0+b2JqZWN0LnNoYTEsICZ0eXBlLCBzaXplKTsKKwliYXNlID0gTlVMTDsKKwlpZiAoZW50cnktPnN0YWdlID09IDEpIHsKKwkJYmFzZSA9IGVudHJ5LT5ibG9iOworCQllbnRyeSA9IGVudHJ5LT5saW5rOworCX0KKwlvdXIgPSBOVUxMOworCWlmIChlbnRyeSAmJiBlbnRyeS0+c3RhZ2UgPT0gMikgeworCQlvdXIgPSBlbnRyeS0+YmxvYjsKKwkJZW50cnkgPSBlbnRyeS0+bGluazsKKwl9CisJdGhlaXIgPSBOVUxMOworCWlmIChlbnRyeSkKKwkJdGhlaXIgPSBlbnRyeS0+YmxvYjsKKwlyZXR1cm4gbWVyZ2VfYmxvYnMocGF0aCwgYmFzZSwgb3VyLCB0aGVpciwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkICpvcmlnaW4oc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5LCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl3aGlsZSAoZW50cnkpIHsKKwkJaWYgKGVudHJ5LT5zdGFnZSA9PSAyKQorCQkJcmV0dXJuIHJlYWRfc2hhMV9maWxlKGVudHJ5LT5ibG9iLT5vYmplY3Quc2hhMSwgJnR5cGUsIHNpemUpOworCQllbnRyeSA9IGVudHJ5LT5saW5rOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBzaG93X291dGYodm9pZCAqcHJpdl8sIG1tYnVmZmVyX3QgKm1iLCBpbnQgbmJ1ZikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrKQorCQlwcmludGYoIiUuKnMiLCAoaW50KSBtYltpXS5zaXplLCBtYltpXS5wdHIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RpZmYoc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwltbWZpbGVfdCBzcmMsIGRzdDsKKwl4cHBhcmFtX3QgeHBwOworCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwl4ZGVtaXRjYl90IGVjYjsKKworCXhwcC5mbGFncyA9IDA7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJeGVjZmcuY3R4bGVuID0gMzsKKwllY2Iub3V0ZiA9IHNob3dfb3V0ZjsKKwllY2IucHJpdiA9IE5VTEw7CisKKwlzcmMucHRyID0gb3JpZ2luKGVudHJ5LCAmc2l6ZSk7CisJaWYgKCFzcmMucHRyKQorCQlzaXplID0gMDsKKwlzcmMuc2l6ZSA9IHNpemU7CisJZHN0LnB0ciA9IHJlc3VsdChlbnRyeSwgJnNpemUpOworCWlmICghZHN0LnB0cikKKwkJc2l6ZSA9IDA7CisJZHN0LnNpemUgPSBzaXplOworCWlmICh4ZGlfZGlmZigmc3JjLCAmZHN0LCAmeHBwLCAmeGVjZmcsICZlY2IpKQorCQlkaWUoInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIik7CisJZnJlZShzcmMucHRyKTsKKwlmcmVlKGRzdC5wdHIpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3Jlc3VsdF9saXN0KHN0cnVjdCBtZXJnZV9saXN0ICplbnRyeSkKK3sKKwlwcmludGYoIiVzXG4iLCBleHBsYW5hdGlvbihlbnRyeSkpOworCWRvIHsKKwkJc3RydWN0IG1lcmdlX2xpc3QgKmxpbmsgPSBlbnRyeS0+bGluazsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKmRlc2NbNF0gPSB7ICJyZXN1bHQiLCAiYmFzZSIsICJvdXIiLCAidGhlaXIiIH07CisJCXByaW50ZigiICAlLTZzICVvICVzICVzXG4iLCBkZXNjW2VudHJ5LT5zdGFnZV0sIGVudHJ5LT5tb2RlLCBzaGExX3RvX2hleChlbnRyeS0+YmxvYi0+b2JqZWN0LnNoYTEpLCBlbnRyeS0+cGF0aCk7CisJCWVudHJ5ID0gbGluazsKKwl9IHdoaWxlIChlbnRyeSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcmVzdWx0KHZvaWQpCit7CisJc3RydWN0IG1lcmdlX2xpc3QgKndhbGs7CisKKwl3YWxrID0gbWVyZ2VfcmVzdWx0OworCXdoaWxlICh3YWxrKSB7CisJCXNob3dfcmVzdWx0X2xpc3Qod2Fsayk7CisJCXNob3dfZGlmZih3YWxrKTsKKwkJd2FsayA9IHdhbGstPm5leHQ7CisJfQorfQorCisvKiBBbiBlbXB0eSBlbnRyeSBuZXZlciBjb21wYXJlcyBzYW1lLCBub3QgZXZlbiB0byBhbm90aGVyIGVtcHR5IGVudHJ5ICovCitzdGF0aWMgaW50IHNhbWVfZW50cnkoc3RydWN0IG5hbWVfZW50cnkgKmEsIHN0cnVjdCBuYW1lX2VudHJ5ICpiKQoreworCXJldHVybglhLT5zaGExICYmCisJCWItPnNoYTEgJiYKKwkJIWhhc2hjbXAoYS0+c2hhMSwgYi0+c2hhMSkgJiYKKwkJYS0+bW9kZSA9PSBiLT5tb2RlOworfQorCitzdGF0aWMgaW50IGJvdGhfZW1wdHkoc3RydWN0IG5hbWVfZW50cnkgKmEsIHN0cnVjdCBuYW1lX2VudHJ5ICpiKQoreworCXJldHVybiAhKGEtPnNoYTEgfHwgYi0+c2hhMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWVyZ2VfbGlzdCAqY3JlYXRlX2VudHJ5KHVuc2lnbmVkIHN0YWdlLCB1bnNpZ25lZCBtb2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBtZXJnZV9saXN0ICpyZXMgPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVzKSk7CisKKwlyZXMtPnN0YWdlID0gc3RhZ2U7CisJcmVzLT5wYXRoID0gcGF0aDsKKwlyZXMtPm1vZGUgPSBtb2RlOworCXJlcy0+YmxvYiA9IGxvb2t1cF9ibG9iKHNoYTEpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBjaGFyICp0cmF2ZXJzZV9wYXRoKGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbikKK3sKKwljaGFyICpwYXRoID0geG1hbGxvYyh0cmF2ZXJzZV9wYXRoX2xlbihpbmZvLCBuKSArIDEpOworCXJldHVybiBtYWtlX3RyYXZlcnNlX3BhdGgocGF0aCwgaW5mbywgbik7Cit9CisKK3N0YXRpYyB2b2lkIHJlc29sdmUoY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIHN0cnVjdCBuYW1lX2VudHJ5ICpvdXJzLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqcmVzdWx0KQoreworCXN0cnVjdCBtZXJnZV9saXN0ICpvcmlnLCAqZmluYWw7CisJY29uc3QgY2hhciAqcGF0aDsKKworCS8qIElmIGl0J3MgYWxyZWFkeSBvdXJzLCBkb24ndCBib3RoZXIgc2hvd2luZyBpdCAqLworCWlmICghb3VycykKKwkJcmV0dXJuOworCisJcGF0aCA9IHRyYXZlcnNlX3BhdGgoaW5mbywgcmVzdWx0KTsKKwlvcmlnID0gY3JlYXRlX2VudHJ5KDIsIG91cnMtPm1vZGUsIG91cnMtPnNoYTEsIHBhdGgpOworCWZpbmFsID0gY3JlYXRlX2VudHJ5KDAsIHJlc3VsdC0+bW9kZSwgcmVzdWx0LT5zaGExLCBwYXRoKTsKKworCWZpbmFsLT5saW5rID0gb3JpZzsKKworCWFkZF9tZXJnZV9lbnRyeShmaW5hbCk7Cit9CisKK3N0YXRpYyB2b2lkIHVucmVzb2x2ZWRfZGlyZWN0b3J5KGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgbmFtZV9lbnRyeSBuWzNdKQoreworCWNoYXIgKm5ld2Jhc2U7CisJc3RydWN0IG5hbWVfZW50cnkgKnA7CisJc3RydWN0IHRyZWVfZGVzYyB0WzNdOworCXZvaWQgKmJ1ZjAsICpidWYxLCAqYnVmMjsKKworCWZvciAocCA9IG47IHAgPCBuICsgMzsgcCsrKSB7CisJCWlmIChwLT5tb2RlICYmIFNfSVNESVIocC0+bW9kZSkpCisJCQlicmVhazsKKwl9CisJaWYgKG4gKyAzIDw9IHApCisJCXJldHVybjsgLyogdGhlcmUgaXMgbm8gdHJlZSBoZXJlICovCisKKwluZXdiYXNlID0gdHJhdmVyc2VfcGF0aChpbmZvLCBwKTsKKworI2RlZmluZSBFTlRSWV9TSEExKGUpICgoKGUpLT5tb2RlICYmIFNfSVNESVIoKGUpLT5tb2RlKSkgPyAoZSktPnNoYTEgOiBOVUxMKQorCWJ1ZjAgPSBmaWxsX3RyZWVfZGVzY3JpcHRvcih0KzAsIEVOVFJZX1NIQTEobiArIDApKTsKKwlidWYxID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IodCsxLCBFTlRSWV9TSEExKG4gKyAxKSk7CisJYnVmMiA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHQrMiwgRU5UUllfU0hBMShuICsgMikpOworI3VuZGVmIEVOVFJZX1NIQTEKKworCW1lcmdlX3RyZWVzKHQsIG5ld2Jhc2UpOworCisJZnJlZShidWYwKTsKKwlmcmVlKGJ1ZjEpOworCWZyZWUoYnVmMik7CisJZnJlZShuZXdiYXNlKTsKK30KKworCitzdGF0aWMgc3RydWN0IG1lcmdlX2xpc3QgKmxpbmtfZW50cnkodW5zaWduZWQgc3RhZ2UsIGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbiwgc3RydWN0IG1lcmdlX2xpc3QgKmVudHJ5KQoreworCWNvbnN0IGNoYXIgKnBhdGg7CisJc3RydWN0IG1lcmdlX2xpc3QgKmxpbms7CisKKwlpZiAoIW4tPm1vZGUpCisJCXJldHVybiBlbnRyeTsKKwlpZiAoZW50cnkpCisJCXBhdGggPSBlbnRyeS0+cGF0aDsKKwllbHNlCisJCXBhdGggPSB0cmF2ZXJzZV9wYXRoKGluZm8sIG4pOworCWxpbmsgPSBjcmVhdGVfZW50cnkoc3RhZ2UsIG4tPm1vZGUsIG4tPnNoYTEsIHBhdGgpOworCWxpbmstPmxpbmsgPSBlbnRyeTsKKwlyZXR1cm4gbGluazsKK30KKworc3RhdGljIHZvaWQgdW5yZXNvbHZlZChjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgc3RydWN0IG5hbWVfZW50cnkgblszXSkKK3sKKwlzdHJ1Y3QgbWVyZ2VfbGlzdCAqZW50cnkgPSBOVUxMOworCWludCBpOworCXVuc2lnbmVkIGRpcm1hc2sgPSAwLCBtYXNrID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJbWFzayB8PSAoMSA8PCBpKTsKKwkJLyoKKwkJICogVHJlYXQgbWlzc2luZyBlbnRyaWVzIGFzIGRpcmVjdG9yaWVzIHNvIHRoYXQgd2UgcmV0dXJuCisJCSAqIGFmdGVyIHVucmVzb2x2ZWRfZGlyZWN0b3J5IGhhcyBoYW5kbGVkIHRoaXMuCisJCSAqLworCQlpZiAoIW5baV0ubW9kZSB8fCBTX0lTRElSKG5baV0ubW9kZSkpCisJCQlkaXJtYXNrIHw9ICgxIDw8IGkpOworCX0KKworCXVucmVzb2x2ZWRfZGlyZWN0b3J5KGluZm8sIG4pOworCisJaWYgKGRpcm1hc2sgPT0gbWFzaykKKwkJcmV0dXJuOworCisJaWYgKG5bMl0ubW9kZSAmJiAhU19JU0RJUihuWzJdLm1vZGUpKQorCQllbnRyeSA9IGxpbmtfZW50cnkoMywgaW5mbywgbiArIDIsIGVudHJ5KTsKKwlpZiAoblsxXS5tb2RlICYmICFTX0lTRElSKG5bMV0ubW9kZSkpCisJCWVudHJ5ID0gbGlua19lbnRyeSgyLCBpbmZvLCBuICsgMSwgZW50cnkpOworCWlmIChuWzBdLm1vZGUgJiYgIVNfSVNESVIoblswXS5tb2RlKSkKKwkJZW50cnkgPSBsaW5rX2VudHJ5KDEsIGluZm8sIG4gKyAwLCBlbnRyeSk7CisKKwlhZGRfbWVyZ2VfZW50cnkoZW50cnkpOworfQorCisvKgorICogTWVyZ2UgdHdvIHRyZWVzIHRvZ2V0aGVyICh0WzFdIGFuZCB0WzJdKSwgdXNpbmcgYSBjb21tb24gYmFzZSAodFswXSkKKyAqIGFzIHRoZSBvcmlnaW4uCisgKgorICogVGhpcyB3YWxrcyB0aGUgKHNvcnRlZCkgdHJlZXMgaW4gbG9jay1zdGVwLCBjaGVja2luZyBldmVyeSBwb3NzaWJsZQorICogbmFtZS4gTm90ZSB0aGF0IGRpcmVjdG9yaWVzIGF1dG9tYXRpY2FsbHkgc29ydCBkaWZmZXJlbnRseSBmcm9tIG90aGVyCisgKiBmaWxlcyAoc2VlICJiYXNlX25hbWVfY29tcGFyZSIpLCBzbyB5b3UnbGwgbmV2ZXIgc2VlIGZpbGUvZGlyZWN0b3J5CisgKiBjb25mbGljdHMsIGJlY2F1c2UgdGhleSB3b24ndCBldmVyIGNvbXBhcmUgdGhlIHNhbWUuCisgKgorICogSU9XLCBpZiBhIGRpcmVjdG9yeSBjaGFuZ2VzIHRvIGEgZmlsZW5hbWUsIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZQorICogc2VlbiBhcyB0aGUgZGlyZWN0b3J5IGdvaW5nIGF3YXksIGFuZCB0aGUgZmlsZW5hbWUgYmVpbmcgY3JlYXRlZC4KKyAqCisgKiBUaGluayBvZiB0aGlzIGFzIGEgdGhyZWUtd2F5IGRpZmYuCisgKgorICogVGhlIG91dHB1dCB3aWxsIGJlIGVpdGhlcjoKKyAqICAtIHN1Y2Nlc3NmdWwgbWVyZ2UKKyAqCSAiMCBtb2RlIHNoYTEgZmlsZW5hbWUiCisgKiAgICBOT1RFIE5PVEUgTk9URSEgRklYTUUhIFdlIHJlYWxseSByZWFsbHkgbmVlZCB0byB3YWxrIHRoZSBpbmRleAorICogICAgaW4gcGFyYWxsZWwgd2l0aCB0aGlzIHRvbyEKKyAqCisgKiAgLSBjb25mbGljdDoKKyAqCSIxIG1vZGUgc2hhMSBmaWxlbmFtZSIKKyAqCSIyIG1vZGUgc2hhMSBmaWxlbmFtZSIKKyAqCSIzIG1vZGUgc2hhMSBmaWxlbmFtZSIKKyAqICAgIHdoZXJlIG5vdCBhbGwgb2YgdGhlIDEvMi8zIGxpbmVzIG1heSBleGlzdCwgb2YgY291cnNlLgorICoKKyAqIFRoZSBzdWNjZXNzZnVsIG1lcmdlIHJ1bGVzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIHRocmVlLXdheSBtZXJnZQorICogaW4gZ2l0LXJlYWQtdHJlZS4KKyAqLworc3RhdGljIGludCB0aHJlZXdheV9jYWxsYmFjayhpbnQgbiwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGRpcm1hc2ssIHN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSwgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCit7CisJLyogU2FtZSBpbiBib3RoPyAqLworCWlmIChzYW1lX2VudHJ5KGVudHJ5KzEsIGVudHJ5KzIpIHx8IGJvdGhfZW1wdHkoZW50cnkrMSwgZW50cnkrMikpIHsKKwkJLyogTW9kaWZpZWQsIGFkZGVkIG9yIHJlbW92ZWQgaWRlbnRpY2FsbHkgKi8KKwkJcmVzb2x2ZShpbmZvLCBOVUxMLCBlbnRyeSsxKTsKKwkJcmV0dXJuIG1hc2s7CisJfQorCisJaWYgKHNhbWVfZW50cnkoZW50cnkrMCwgZW50cnkrMSkpIHsKKwkJaWYgKGVudHJ5WzJdLnNoYTEgJiYgIVNfSVNESVIoZW50cnlbMl0ubW9kZSkpIHsKKwkJCS8qIFdlIGRpZCBub3QgdG91Y2gsIHRoZXkgbW9kaWZpZWQgLS0gdGFrZSB0aGVpcnMgKi8KKwkJCXJlc29sdmUoaW5mbywgZW50cnkrMSwgZW50cnkrMik7CisJCQlyZXR1cm4gbWFzazsKKwkJfQorCQkvKgorCQkgKiBJZiB3ZSBkaWQgbm90IHRvdWNoIGEgZGlyZWN0b3J5IGJ1dCB0aGV5IG1hZGUgaXQKKwkJICogaW50byBhIGZpbGUsIHdlIGZhbGwgdGhyb3VnaCBhbmQgdW5yZXNvbHZlZCgpCisJCSAqIHJlY3Vyc2VzIGRvd24uICBMaWtld2lzZSBmb3IgdGhlIG9wcG9zaXRlIGNhc2UuCisJCSAqLworCX0KKworCWlmIChzYW1lX2VudHJ5KGVudHJ5KzAsIGVudHJ5KzIpIHx8IGJvdGhfZW1wdHkoZW50cnkrMCwgZW50cnkrMikpIHsKKwkJLyogV2UgYWRkZWQsIG1vZGlmaWVkIG9yIHJlbW92ZWQsIHRoZXkgZGlkIG5vdCB0b3VjaCAtLSB0YWtlIG91cnMgKi8KKwkJcmVzb2x2ZShpbmZvLCBOVUxMLCBlbnRyeSsxKTsKKwkJcmV0dXJuIG1hc2s7CisJfQorCisJdW5yZXNvbHZlZChpbmZvLCBlbnRyeSk7CisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX3RyZWVzKHN0cnVjdCB0cmVlX2Rlc2MgdFszXSwgY29uc3QgY2hhciAqYmFzZSkKK3sKKwlzdHJ1Y3QgdHJhdmVyc2VfaW5mbyBpbmZvOworCisJc2V0dXBfdHJhdmVyc2VfaW5mbygmaW5mbywgYmFzZSk7CisJaW5mby5mbiA9IHRocmVld2F5X2NhbGxiYWNrOworCXRyYXZlcnNlX3RyZWVzKDMsIHQsICZpbmZvKTsKK30KKworc3RhdGljIHZvaWQgKmdldF90cmVlX2Rlc2NyaXB0b3Ioc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqcmV2KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdm9pZCAqYnVmOworCisJaWYgKGdldF9zaGExKHJldiwgc2hhMSkpCisJCWRpZSgidW5rbm93biByZXYgJXMiLCByZXYpOworCWJ1ZiA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKGRlc2MsIHNoYTEpOworCWlmICghYnVmKQorCQlkaWUoIiVzIGlzIG5vdCBhIHRyZWUiLCByZXYpOworCXJldHVybiBidWY7Cit9CisKK2ludCBjbWRfbWVyZ2VfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRbM107CisJdm9pZCAqYnVmMSwgKmJ1ZjIsICpidWYzOworCisJaWYgKGFyZ2MgIT0gNCkKKwkJdXNhZ2UobWVyZ2VfdHJlZV91c2FnZSk7CisKKwlidWYxID0gZ2V0X3RyZWVfZGVzY3JpcHRvcih0KzAsIGFyZ3ZbMV0pOworCWJ1ZjIgPSBnZXRfdHJlZV9kZXNjcmlwdG9yKHQrMSwgYXJndlsyXSk7CisJYnVmMyA9IGdldF90cmVlX2Rlc2NyaXB0b3IodCsyLCBhcmd2WzNdKTsKKwltZXJnZV90cmVlcyh0LCAiIik7CisJZnJlZShidWYxKTsKKwlmcmVlKGJ1ZjIpOworCWZyZWUoYnVmMyk7CisKKwlzaG93X3Jlc3VsdCgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9tZXJnZS5jIGIvYnVpbHRpbi9tZXJnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3N2ZmZmYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21lcmdlLmMKQEAgLTAsMCArMSwxNjI1IEBACisvKgorICogQnVpbHRpbiAiZ2l0IG1lcmdlIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBNaWtsb3MgVmFqbmEgPHZtaWtsb3NAZnJ1Z2Fsd2FyZS5vcmc+CisgKgorICogQmFzZWQgb24gZ2l0LW1lcmdlLnNoIGJ5IEp1bmlvIEMgSGFtYW5vLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInJlcmVyZS5oIgorI2luY2x1ZGUgImhlbHAuaCIKKyNpbmNsdWRlICJtZXJnZS1yZWN1cnNpdmUuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJmbXQtbWVyZ2UtbXNnLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInNlcXVlbmNlci5oIgorCisjZGVmaW5lIERFRkFVTFRfVFdPSEVBRCAoMTw8MCkKKyNkZWZpbmUgREVGQVVMVF9PQ1RPUFVTICgxPDwxKQorI2RlZmluZSBOT19GQVNUX0ZPUldBUkQgKDE8PDIpCisjZGVmaW5lIE5PX1RSSVZJQUwgICAgICAoMTw8MykKKworc3RydWN0IHN0cmF0ZWd5IHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGF0dHI7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fbWVyZ2VfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIFs8Y29tbWl0Pi4uLl0iKSwKKwlOXygiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIDxtc2c+IEhFQUQgPGNvbW1pdD4iKSwKKwlOXygiZ2l0IG1lcmdlIC0tYWJvcnQiKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHNob3dfZGlmZnN0YXQgPSAxLCBzaG9ydGxvZ19sZW4gPSAtMSwgc3F1YXNoOworc3RhdGljIGludCBvcHRpb25fY29tbWl0ID0gMTsKK3N0YXRpYyBpbnQgb3B0aW9uX2VkaXQgPSAtMTsKK3N0YXRpYyBpbnQgYWxsb3dfdHJpdmlhbCA9IDEsIGhhdmVfbWVzc2FnZSwgdmVyaWZ5X3NpZ25hdHVyZXM7CitzdGF0aWMgaW50IG92ZXJ3cml0ZV9pZ25vcmUgPSAxOworc3RhdGljIHN0cnVjdCBzdHJidWYgbWVyZ2VfbXNnID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgc3RydWN0IHN0cmF0ZWd5ICoqdXNlX3N0cmF0ZWdpZXM7CitzdGF0aWMgc2l6ZV90IHVzZV9zdHJhdGVnaWVzX25yLCB1c2Vfc3RyYXRlZ2llc19hbGxvYzsKK3N0YXRpYyBjb25zdCBjaGFyICoqeG9wdHM7CitzdGF0aWMgc2l6ZV90IHhvcHRzX25yLCB4b3B0c19hbGxvYzsKK3N0YXRpYyBjb25zdCBjaGFyICpicmFuY2g7CitzdGF0aWMgY2hhciAqYnJhbmNoX21lcmdlb3B0aW9uczsKK3N0YXRpYyBpbnQgb3B0aW9uX3Jlbm9ybWFsaXplOworc3RhdGljIGludCB2ZXJib3NpdHk7CitzdGF0aWMgaW50IGFsbG93X3JlcmVyZV9hdXRvOworc3RhdGljIGludCBhYm9ydF9jdXJyZW50X21lcmdlOworc3RhdGljIGludCBzaG93X3Byb2dyZXNzID0gLTE7CitzdGF0aWMgaW50IGRlZmF1bHRfdG9fdXBzdHJlYW0gPSAxOworc3RhdGljIGNvbnN0IGNoYXIgKnNpZ25fY29tbWl0OworCitzdGF0aWMgc3RydWN0IHN0cmF0ZWd5IGFsbF9zdHJhdGVneVtdID0geworCXsgInJlY3Vyc2l2ZSIsICBERUZBVUxUX1RXT0hFQUQgfCBOT19UUklWSUFMIH0sCisJeyAib2N0b3B1cyIsICAgIERFRkFVTFRfT0NUT1BVUyB9LAorCXsgInJlc29sdmUiLCAgICAwIH0sCisJeyAib3VycyIsICAgICAgIE5PX0ZBU1RfRk9SV0FSRCB8IE5PX1RSSVZJQUwgfSwKKwl7ICJzdWJ0cmVlIiwgICAgTk9fRkFTVF9GT1JXQVJEIHwgTk9fVFJJVklBTCB9LAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnB1bGxfdHdvaGVhZCwgKnB1bGxfb2N0b3B1czsKKworZW51bSBmZl90eXBlIHsKKwlGRl9OTywKKwlGRl9BTExPVywKKwlGRl9PTkxZCit9OworCitzdGF0aWMgZW51bSBmZl90eXBlIGZhc3RfZm9yd2FyZCA9IEZGX0FMTE9XOworCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9tZXNzYWdlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpidWYgPSBvcHQtPnZhbHVlOworCisJaWYgKHVuc2V0KQorCQlzdHJidWZfc2V0bGVuKGJ1ZiwgMCk7CisJZWxzZSBpZiAoYXJnKSB7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzJXMiLCBidWYtPmxlbiA/ICJcblxuIiA6ICIiLCBhcmcpOworCQloYXZlX21lc3NhZ2UgPSAxOworCX0gZWxzZQorCQlyZXR1cm4gZXJyb3IoXygic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN0cmF0ZWd5ICpnZXRfc3RyYXRlZ3koY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYXRlZ3kgKnJldDsKKwlzdGF0aWMgc3RydWN0IGNtZG5hbWVzIG1haW5fY21kcywgb3RoZXJfY21kczsKKwlzdGF0aWMgaW50IGxvYWRlZDsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGxfc3RyYXRlZ3kpOyBpKyspCisJCWlmICghc3RyY21wKG5hbWUsIGFsbF9zdHJhdGVneVtpXS5uYW1lKSkKKwkJCXJldHVybiAmYWxsX3N0cmF0ZWd5W2ldOworCisJaWYgKCFsb2FkZWQpIHsKKwkJc3RydWN0IGNtZG5hbWVzIG5vdF9zdHJhdGVnaWVzOworCQlsb2FkZWQgPSAxOworCisJCW1lbXNldCgmbm90X3N0cmF0ZWdpZXMsIDAsIHNpemVvZihzdHJ1Y3QgY21kbmFtZXMpKTsKKwkJbG9hZF9jb21tYW5kX2xpc3QoImdpdC1tZXJnZS0iLCAmbWFpbl9jbWRzLCAmb3RoZXJfY21kcyk7CisJCWZvciAoaSA9IDA7IGkgPCBtYWluX2NtZHMuY250OyBpKyspIHsKKwkJCWludCBqLCBmb3VuZCA9IDA7CisJCQlzdHJ1Y3QgY21kbmFtZSAqZW50ID0gbWFpbl9jbWRzLm5hbWVzW2ldOworCQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoYWxsX3N0cmF0ZWd5KTsgaisrKQorCQkJCWlmICghc3RybmNtcChlbnQtPm5hbWUsIGFsbF9zdHJhdGVneVtqXS5uYW1lLCBlbnQtPmxlbikKKwkJCQkJCSYmICFhbGxfc3RyYXRlZ3lbal0ubmFtZVtlbnQtPmxlbl0pCisJCQkJCWZvdW5kID0gMTsKKwkJCWlmICghZm91bmQpCisJCQkJYWRkX2NtZG5hbWUoJm5vdF9zdHJhdGVnaWVzLCBlbnQtPm5hbWUsIGVudC0+bGVuKTsKKwkJfQorCQlleGNsdWRlX2NtZHMoJm1haW5fY21kcywgJm5vdF9zdHJhdGVnaWVzKTsKKwl9CisJaWYgKCFpc19pbl9jbWRsaXN0KCZtYWluX2NtZHMsIG5hbWUpICYmICFpc19pbl9jbWRsaXN0KCZvdGhlcl9jbWRzLCBuYW1lKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIpLCBuYW1lKTsKKwkJZnByaW50ZihzdGRlcnIsIF8oIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiKSk7CisJCWZvciAoaSA9IDA7IGkgPCBtYWluX2NtZHMuY250OyBpKyspCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIsIG1haW5fY21kcy5uYW1lc1tpXS0+bmFtZSk7CisJCWZwcmludGYoc3RkZXJyLCAiLlxuIik7CisJCWlmIChvdGhlcl9jbWRzLmNudCkgeworCQkJZnByaW50ZihzdGRlcnIsIF8oIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IikpOworCQkJZm9yIChpID0gMDsgaSA8IG90aGVyX2NtZHMuY250OyBpKyspCisJCQkJZnByaW50ZihzdGRlcnIsICIgJXMiLCBvdGhlcl9jbWRzLm5hbWVzW2ldLT5uYW1lKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiLlxuIik7CisJCX0KKwkJZXhpdCgxKTsKKwl9CisKKwlyZXQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RyYXRlZ3kpKTsKKwlyZXQtPm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCXJldC0+YXR0ciA9IE5PX1RSSVZJQUw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kX3N0cmF0ZWd5KHN0cnVjdCBzdHJhdGVneSAqcykKK3sKKwlBTExPQ19HUk9XKHVzZV9zdHJhdGVnaWVzLCB1c2Vfc3RyYXRlZ2llc19uciArIDEsIHVzZV9zdHJhdGVnaWVzX2FsbG9jKTsKKwl1c2Vfc3RyYXRlZ2llc1t1c2Vfc3RyYXRlZ2llc19ucisrXSA9IHM7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3N0cmF0ZWd5KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgY29uc3QgY2hhciAqbmFtZSwgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkKKwkJcmV0dXJuIDA7CisKKwlhcHBlbmRfc3RyYXRlZ3koZ2V0X3N0cmF0ZWd5KG5hbWUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfeChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkKKwkJcmV0dXJuIDA7CisKKwlBTExPQ19HUk9XKHhvcHRzLCB4b3B0c19uciArIDEsIHhvcHRzX2FsbG9jKTsKKwl4b3B0c1t4b3B0c19ucisrXSA9IHhzdHJkdXAoYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2Vfbihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXNob3dfZGlmZnN0YXQgPSB1bnNldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gYnVpbHRpbl9tZXJnZV9vcHRpb25zW10gPSB7CisJeyBPUFRJT05fQ0FMTEJBQ0ssICduJywgTlVMTCwgTlVMTCwgTlVMTCwKKwkJTl8oImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiKSwKKwkJUEFSU0VfT1BUX05PQVJHLCBvcHRpb25fcGFyc2VfbiB9LAorCU9QVF9CT09MKDAsICJzdGF0IiwgJnNob3dfZGlmZnN0YXQsCisJCU5fKCJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiKSksCisJT1BUX0JPT0woMCwgInN1bW1hcnkiLCAmc2hvd19kaWZmc3RhdCwgTl8oIihzeW5vbnltIHRvIC0tc3RhdCkiKSksCisJeyBPUFRJT05fSU5URUdFUiwgMCwgImxvZyIsICZzaG9ydGxvZ19sZW4sIE5fKCJuIiksCisJICBOXygiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIiksCisJICBQQVJTRV9PUFRfT1BUQVJHLCBOVUxMLCBERUZBVUxUX01FUkdFX0xPR19MRU4gfSwKKwlPUFRfQk9PTCgwLCAic3F1YXNoIiwgJnNxdWFzaCwKKwkJTl8oImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIikpLAorCU9QVF9CT09MKDAsICJjb21taXQiLCAmb3B0aW9uX2NvbW1pdCwKKwkJTl8oInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIpKSwKKwlPUFRfQk9PTCgnZScsICJlZGl0IiwgJm9wdGlvbl9lZGl0LAorCQlOXygiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIikpLAorCU9QVF9TRVRfSU5UKDAsICJmZiIsICZmYXN0X2ZvcndhcmQsIE5fKCJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIiksIEZGX0FMTE9XKSwKKwl7IE9QVElPTl9TRVRfSU5ULCAwLCAiZmYtb25seSIsICZmYXN0X2ZvcndhcmQsIE5VTEwsCisJCU5fKCJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIiksCisJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgRkZfT05MWSB9LAorCU9QVF9SRVJFUkVfQVVUT1VQREFURSgmYWxsb3dfcmVyZXJlX2F1dG8pLAorCU9QVF9CT09MKDAsICJ2ZXJpZnktc2lnbmF0dXJlcyIsICZ2ZXJpZnlfc2lnbmF0dXJlcywKKwkJTl8oIlZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIpKSwKKwlPUFRfQ0FMTEJBQ0soJ3MnLCAic3RyYXRlZ3kiLCAmdXNlX3N0cmF0ZWdpZXMsIE5fKCJzdHJhdGVneSIpLAorCQlOXygibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIiksIG9wdGlvbl9wYXJzZV9zdHJhdGVneSksCisJT1BUX0NBTExCQUNLKCdYJywgInN0cmF0ZWd5LW9wdGlvbiIsICZ4b3B0cywgTl8oIm9wdGlvbj12YWx1ZSIpLAorCQlOXygib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIpLCBvcHRpb25fcGFyc2VfeCksCisJT1BUX0NBTExCQUNLKCdtJywgIm1lc3NhZ2UiLCAmbWVyZ2VfbXNnLCBOXygibWVzc2FnZSIpLAorCQlOXygibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIiksCisJCW9wdGlvbl9wYXJzZV9tZXNzYWdlKSwKKwlPUFRfX1ZFUkJPU0lUWSgmdmVyYm9zaXR5KSwKKwlPUFRfQk9PTCgwLCAiYWJvcnQiLCAmYWJvcnRfY3VycmVudF9tZXJnZSwKKwkJTl8oImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIikpLAorCU9QVF9TRVRfSU5UKDAsICJwcm9ncmVzcyIsICZzaG93X3Byb2dyZXNzLCBOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIiksIDEpLAorCXsgT1BUSU9OX1NUUklORywgJ1MnLCAiZ3BnLXNpZ24iLCAmc2lnbl9jb21taXQsIE5fKCJrZXktaWQiKSwKKwkgIE5fKCJHUEcgc2lnbiBjb21taXQiKSwgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiIiB9LAorCU9QVF9CT09MKDAsICJvdmVyd3JpdGUtaWdub3JlIiwgJm92ZXJ3cml0ZV9pZ25vcmUsIE5fKCJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiKSksCisJT1BUX0VORCgpCit9OworCisvKiBDbGVhbnMgdXAgbWV0YWRhdGEgdGhhdCBpcyB1bmludGVyZXN0aW5nIGFmdGVyIGEgc3VjY2VlZGVkIG1lcmdlLiAqLworc3RhdGljIHZvaWQgZHJvcF9zYXZlKHZvaWQpCit7CisJdW5saW5rKGdpdF9wYXRoX21lcmdlX2hlYWQoKSk7CisJdW5saW5rKGdpdF9wYXRoX21lcmdlX21zZygpKTsKKwl1bmxpbmsoZ2l0X3BhdGhfbWVyZ2VfbW9kZSgpKTsKK30KKworc3RhdGljIGludCBzYXZlX3N0YXRlKHVuc2lnbmVkIGNoYXIgKnN0YXNoKQoreworCWludCBsZW47CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3AgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7InN0YXNoIiwgImNyZWF0ZSIsIE5VTEx9OworCisJY3AuYXJndiA9IGFyZ3Y7CisJY3Aub3V0ID0gLTE7CisJY3AuZ2l0X2NtZCA9IDE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY3ApKQorCQlkaWUoXygiY291bGQgbm90IHJ1biBzdGFzaC4iKSk7CisJbGVuID0gc3RyYnVmX3JlYWQoJmJ1ZmZlciwgY3Aub3V0LCAxMDI0KTsKKwljbG9zZShjcC5vdXQpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZjcCkgfHwgbGVuIDwgMCkKKwkJZGllKF8oInN0YXNoIGZhaWxlZCIpKTsKKwllbHNlIGlmICghbGVuKQkJLyogbm8gY2hhbmdlcyAqLworCQlyZXR1cm4gLTE7CisJc3RyYnVmX3NldGxlbigmYnVmZmVyLCBidWZmZXIubGVuLTEpOworCWlmIChnZXRfc2hhMShidWZmZXIuYnVmLCBzdGFzaCkpCisJCWRpZShfKCJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIiksIGJ1ZmZlci5idWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWFkX2VtcHR5KHVuc2lnbmVkIGNvbnN0IGNoYXIgKnNoYTEsIGludCB2ZXJib3NlKQoreworCWludCBpID0gMDsKKwljb25zdCBjaGFyICphcmdzWzddOworCisJYXJnc1tpKytdID0gInJlYWQtdHJlZSI7CisJaWYgKHZlcmJvc2UpCisJCWFyZ3NbaSsrXSA9ICItdiI7CisJYXJnc1tpKytdID0gIi1tIjsKKwlhcmdzW2krK10gPSAiLXUiOworCWFyZ3NbaSsrXSA9IEVNUFRZX1RSRUVfU0hBMV9IRVg7CisJYXJnc1tpKytdID0gc2hhMV90b19oZXgoc2hhMSk7CisJYXJnc1tpXSA9IE5VTEw7CisKKwlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJncywgUlVOX0dJVF9DTUQpKQorCQlkaWUoXygicmVhZC10cmVlIGZhaWxlZCIpKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfaGFyZCh1bnNpZ25lZCBjb25zdCBjaGFyICpzaGExLCBpbnQgdmVyYm9zZSkKK3sKKwlpbnQgaSA9IDA7CisJY29uc3QgY2hhciAqYXJnc1s2XTsKKworCWFyZ3NbaSsrXSA9ICJyZWFkLXRyZWUiOworCWlmICh2ZXJib3NlKQorCQlhcmdzW2krK10gPSAiLXYiOworCWFyZ3NbaSsrXSA9ICItLXJlc2V0IjsKKwlhcmdzW2krK10gPSAiLXUiOworCWFyZ3NbaSsrXSA9IHNoYTFfdG9faGV4KHNoYTEpOworCWFyZ3NbaV0gPSBOVUxMOworCisJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MsIFJVTl9HSVRfQ01EKSkKKwkJZGllKF8oInJlYWQtdHJlZSBmYWlsZWQiKSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfc3RhdGUoY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZCwKKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqc3Rhc2gpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmFyZ3NbXSA9IHsgInN0YXNoIiwgImFwcGx5IiwgTlVMTCwgTlVMTCB9OworCisJaWYgKGlzX251bGxfc2hhMShzdGFzaCkpCisJCXJldHVybjsKKworCXJlc2V0X2hhcmQoaGVhZCwgMSk7CisKKwlhcmdzWzJdID0gc2hhMV90b19oZXgoc3Rhc2gpOworCisJLyoKKwkgKiBJdCBpcyBPSyB0byBpZ25vcmUgZXJyb3IgaGVyZSwgZm9yIGV4YW1wbGUgd2hlbiB0aGVyZSB3YXMKKwkgKiBub3RoaW5nIHRvIHJlc3RvcmUuCisJICovCisJcnVuX2NvbW1hbmRfdl9vcHQoYXJncywgUlVOX0dJVF9DTUQpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworfQorCisvKiBUaGlzIGlzIGNhbGxlZCB3aGVuIG5vIG1lcmdlIHdhcyBuZWNlc3NhcnkuICovCitzdGF0aWMgdm9pZCBmaW5pc2hfdXBfdG9fZGF0ZShjb25zdCBjaGFyICptc2cpCit7CisJaWYgKHZlcmJvc2l0eSA+PSAwKQorCQlwcmludGYoIiVzJXNcbiIsIHNxdWFzaCA/IF8oIiAobm90aGluZyB0byBzcXVhc2gpIikgOiAiIiwgbXNnKTsKKwlkcm9wX3NhdmUoKTsKK30KKworc3RhdGljIHZvaWQgc3F1YXNoX21lc3NhZ2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IHN0cmJ1ZiBvdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmo7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJaW50IGZkOworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisKKwlwcmludGYoXygiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIikpOworCWZpbGVuYW1lID0gZ2l0X3BhdGhfc3F1YXNoX21zZygpOworCWZkID0gb3BlbihmaWxlbmFtZSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IHdyaXRlIHRvICclcyciKSwgZmlsZW5hbWUpOworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJcmV2Lmlnbm9yZV9tZXJnZXMgPSAxOworCXJldi5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfTUVESVVNOworCisJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwlhZGRfcGVuZGluZ19vYmplY3QoJnJldiwgJmNvbW1pdC0+b2JqZWN0LCBOVUxMKTsKKworCWZvciAoaiA9IHJlbW90ZWhlYWRzOyBqOyBqID0gai0+bmV4dCkKKwkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXYsICZqLT5pdGVtLT5vYmplY3QsIE5VTEwpOworCisJc2V0dXBfcmV2aXNpb25zKDAsIE5VTEwsICZyZXYsIE5VTEwpOworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldikpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKworCWN0eC5hYmJyZXYgPSByZXYuYWJicmV2OworCWN0eC5kYXRlX21vZGUgPSByZXYuZGF0ZV9tb2RlOworCWN0eC5mbXQgPSByZXYuY29tbWl0X2Zvcm1hdDsKKworCXN0cmJ1Zl9hZGRzdHIoJm91dCwgIlNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOlxuIik7CisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldikpICE9IE5VTEwpIHsKKwkJc3RyYnVmX2FkZGNoKCZvdXQsICdcbicpOworCQlzdHJidWZfYWRkZigmb3V0LCAiY29tbWl0ICVzXG4iLAorCQkJc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCQlwcmV0dHlfcHJpbnRfY29tbWl0KCZjdHgsIGNvbW1pdCwgJm91dCk7CisJfQorCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBvdXQuYnVmLCBvdXQubGVuKSAhPSBvdXQubGVuKQorCQlkaWVfZXJybm8oXygiV3JpdGluZyBTUVVBU0hfTVNHIikpOworCWlmIChjbG9zZShmZCkpCisJCWRpZV9lcnJubyhfKCJGaW5pc2hpbmcgU1FVQVNIX01TRyIpKTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0KTsKK30KKworc3RhdGljIHZvaWQgZmluaXNoKHN0cnVjdCBjb21taXQgKmhlYWRfY29tbWl0LAorCQkgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzLAorCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfaGVhZCwgY29uc3QgY2hhciAqbXNnKQoreworCXN0cnVjdCBzdHJidWYgcmVmbG9nX21lc3NhZ2UgPSBTVFJCVUZfSU5JVDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkID0gaGVhZF9jb21taXQtPm9iamVjdC5zaGExOworCisJaWYgKCFtc2cpCisJCXN0cmJ1Zl9hZGRzdHIoJnJlZmxvZ19tZXNzYWdlLCBnZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIikpOworCWVsc2UgeworCQlpZiAodmVyYm9zaXR5ID49IDApCisJCQlwcmludGYoIiVzXG4iLCBtc2cpOworCQlzdHJidWZfYWRkZigmcmVmbG9nX21lc3NhZ2UsICIlczogJXMiLAorCQkJZ2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIpLCBtc2cpOworCX0KKwlpZiAoc3F1YXNoKSB7CisJCXNxdWFzaF9tZXNzYWdlKGhlYWRfY29tbWl0LCByZW1vdGVoZWFkcyk7CisJfSBlbHNlIHsKKwkJaWYgKHZlcmJvc2l0eSA+PSAwICYmICFtZXJnZV9tc2cubGVuKQorCQkJcHJpbnRmKF8oIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIpKTsKKwkJZWxzZSB7CisJCQljb25zdCBjaGFyICphcmd2X2djX2F1dG9bXSA9IHsgImdjIiwgIi0tYXV0byIsIE5VTEwgfTsKKwkJCXVwZGF0ZV9yZWYocmVmbG9nX21lc3NhZ2UuYnVmLCAiSEVBRCIsCisJCQkJbmV3X2hlYWQsIGhlYWQsIDAsCisJCQkJVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJCQkvKgorCQkJICogV2UgaWdub3JlIGVycm9ycyBpbiAnZ2MgLS1hdXRvJywgc2luY2UgdGhlCisJCQkgKiB1c2VyIHNob3VsZCBzZWUgdGhlbS4KKwkJCSAqLworCQkJcnVuX2NvbW1hbmRfdl9vcHQoYXJndl9nY19hdXRvLCBSVU5fR0lUX0NNRCk7CisJCX0KKwl9CisJaWYgKG5ld19oZWFkICYmIHNob3dfZGlmZnN0YXQpIHsKKwkJc3RydWN0IGRpZmZfb3B0aW9ucyBvcHRzOworCQlkaWZmX3NldHVwKCZvcHRzKTsKKwkJb3B0cy5zdGF0X3dpZHRoID0gLTE7IC8qIHVzZSBmdWxsIHRlcm1pbmFsIHdpZHRoICovCisJCW9wdHMuc3RhdF9ncmFwaF93aWR0aCA9IC0xOyAvKiByZXNwZWN0IHN0YXRHcmFwaFdpZHRoIGNvbmZpZyAqLworCQlvcHRzLm91dHB1dF9mb3JtYXQgfD0KKwkJCURJRkZfRk9STUFUX1NVTU1BUlkgfCBESUZGX0ZPUk1BVF9ESUZGU1RBVDsKKwkJb3B0cy5kZXRlY3RfcmVuYW1lID0gRElGRl9ERVRFQ1RfUkVOQU1FOworCQlkaWZmX3NldHVwX2RvbmUoJm9wdHMpOworCQlkaWZmX3RyZWVfc2hhMShoZWFkLCBuZXdfaGVhZCwgIiIsICZvcHRzKTsKKwkJZGlmZmNvcmVfc3RkKCZvcHRzKTsKKwkJZGlmZl9mbHVzaCgmb3B0cyk7CisJfQorCisJLyogUnVuIGEgcG9zdC1tZXJnZSBob29rICovCisJcnVuX2hvb2tfbGUoTlVMTCwgInBvc3QtbWVyZ2UiLCBzcXVhc2ggPyAiMSIgOiAiMCIsIE5VTEwpOworCisJc3RyYnVmX3JlbGVhc2UoJnJlZmxvZ19tZXNzYWdlKTsKK30KKworLyogR2V0IHRoZSBuYW1lIGZvciB0aGUgbWVyZ2UgY29tbWl0J3MgbWVzc2FnZS4gKi8KK3N0YXRpYyB2b2lkIG1lcmdlX25hbWUoY29uc3QgY2hhciAqcmVtb3RlLCBzdHJ1Y3Qgc3RyYnVmICptc2cpCit7CisJc3RydWN0IGNvbW1pdCAqcmVtb3RlX2hlYWQ7CisJdW5zaWduZWQgY2hhciBicmFuY2hfaGVhZFsyMF07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJuYW1lID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcHRyOworCWNoYXIgKmZvdW5kX3JlZjsKKwlpbnQgbGVuLCBlYXJseTsKKworCXN0cmJ1Zl9icmFuY2huYW1lKCZibmFtZSwgcmVtb3RlKTsKKwlyZW1vdGUgPSBibmFtZS5idWY7CisKKwltZW1zZXQoYnJhbmNoX2hlYWQsIDAsIHNpemVvZihicmFuY2hfaGVhZCkpOworCXJlbW90ZV9oZWFkID0gZ2V0X21lcmdlX3BhcmVudChyZW1vdGUpOworCWlmICghcmVtb3RlX2hlYWQpCisJCWRpZShfKCInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IiksIHJlbW90ZSk7CisKKwlpZiAoZHdpbV9yZWYocmVtb3RlLCBzdHJsZW4ocmVtb3RlKSwgYnJhbmNoX2hlYWQsICZmb3VuZF9yZWYpID4gMCkgeworCQlpZiAoc3RhcnRzX3dpdGgoZm91bmRfcmVmLCAicmVmcy9oZWFkcy8iKSkgeworCQkJc3RyYnVmX2FkZGYobXNnLCAiJXNcdFx0YnJhbmNoICclcycgb2YgLlxuIiwKKwkJCQkgICAgc2hhMV90b19oZXgoYnJhbmNoX2hlYWQpLCByZW1vdGUpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJCWlmIChzdGFydHNfd2l0aChmb3VuZF9yZWYsICJyZWZzL3RhZ3MvIikpIHsKKwkJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXHRcdHRhZyAnJXMnIG9mIC5cbiIsCisJCQkJICAgIHNoYTFfdG9faGV4KGJyYW5jaF9oZWFkKSwgcmVtb3RlKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAoc3RhcnRzX3dpdGgoZm91bmRfcmVmLCAicmVmcy9yZW1vdGVzLyIpKSB7CisJCQlzdHJidWZfYWRkZihtc2csICIlc1x0XHRyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgb2YgLlxuIiwKKwkJCQkgICAgc2hhMV90b19oZXgoYnJhbmNoX2hlYWQpLCByZW1vdGUpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCisJLyogU2VlIGlmIHJlbW90ZSBtYXRjaGVzIDxuYW1lPl5eXi4uIG9yIDxuYW1lPn48bnVtYmVyPiAqLworCWZvciAobGVuID0gMCwgcHRyID0gcmVtb3RlICsgc3RybGVuKHJlbW90ZSk7CisJICAgICByZW1vdGUgPCBwdHIgJiYgcHRyWy0xXSA9PSAnXic7CisJICAgICBwdHItLSkKKwkJbGVuKys7CisJaWYgKGxlbikKKwkJZWFybHkgPSAxOworCWVsc2UgeworCQllYXJseSA9IDA7CisJCXB0ciA9IHN0cnJjaHIocmVtb3RlLCAnficpOworCQlpZiAocHRyKSB7CisJCQlpbnQgc2Vlbl9ub256ZXJvID0gMDsKKworCQkJbGVuKys7IC8qIGNvdW50IH4gKi8KKwkJCXdoaWxlICgqKytwdHIgJiYgaXNkaWdpdCgqcHRyKSkgeworCQkJCXNlZW5fbm9uemVybyB8PSAoKnB0ciAhPSAnMCcpOworCQkJCWxlbisrOworCQkJfQorCQkJaWYgKCpwdHIpCisJCQkJbGVuID0gMDsgLyogbm90IC4uLn48bnVtYmVyPiAqLworCQkJZWxzZSBpZiAoc2Vlbl9ub256ZXJvKQorCQkJCWVhcmx5ID0gMTsKKwkJCWVsc2UgaWYgKGxlbiA9PSAxKQorCQkJCWVhcmx5ID0gMTsgLyogIm5hbWV+IiBpcyAibmFtZX4xIiEgKi8KKwkJfQorCX0KKwlpZiAobGVuKSB7CisJCXN0cnVjdCBzdHJidWYgdHJ1bmFtZSA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkZigmdHJ1bmFtZSwgInJlZnMvaGVhZHMvJXMiLCByZW1vdGUpOworCQlzdHJidWZfc2V0bGVuKCZ0cnVuYW1lLCB0cnVuYW1lLmxlbiAtIGxlbik7CisJCWlmIChyZWZfZXhpc3RzKHRydW5hbWUuYnVmKSkgeworCQkJc3RyYnVmX2FkZGYobXNnLAorCQkJCSAgICAiJXNcdFx0YnJhbmNoICclcyclcyBvZiAuXG4iLAorCQkJCSAgICBzaGExX3RvX2hleChyZW1vdGVfaGVhZC0+b2JqZWN0LnNoYTEpLAorCQkJCSAgICB0cnVuYW1lLmJ1ZiArIDExLAorCQkJCSAgICAoZWFybHkgPyAiIChlYXJseSBwYXJ0KSIgOiAiIikpOworCQkJc3RyYnVmX3JlbGVhc2UoJnRydW5hbWUpOworCQkJZ290byBjbGVhbnVwOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZ0cnVuYW1lKTsKKwl9CisKKwlpZiAocmVtb3RlX2hlYWQtPnV0aWwpIHsKKwkJc3RydWN0IG1lcmdlX3JlbW90ZV9kZXNjICpkZXNjOworCQlkZXNjID0gbWVyZ2VfcmVtb3RlX3V0aWwocmVtb3RlX2hlYWQpOworCQlpZiAoZGVzYyAmJiBkZXNjLT5vYmogJiYgZGVzYy0+b2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXHRcdCVzICclcydcbiIsCisJCQkJICAgIHNoYTFfdG9faGV4KGRlc2MtPm9iai0+c2hhMSksCisJCQkJICAgIHR5cGVuYW1lKGRlc2MtPm9iai0+dHlwZSksCisJCQkJICAgIHJlbW90ZSk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKKwlzdHJidWZfYWRkZihtc2csICIlc1x0XHRjb21taXQgJyVzJ1xuIiwKKwkJc2hhMV90b19oZXgocmVtb3RlX2hlYWQtPm9iamVjdC5zaGExKSwgcmVtb3RlKTsKK2NsZWFudXA6CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJuYW1lKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfYnJhbmNoX21lcmdlX29wdGlvbnMoY2hhciAqYm1vKQoreworCWNvbnN0IGNoYXIgKiphcmd2OworCWludCBhcmdjOworCisJaWYgKCFibW8pCisJCXJldHVybjsKKwlhcmdjID0gc3BsaXRfY21kbGluZShibW8sICZhcmd2KTsKKwlpZiAoYXJnYyA8IDApCisJCWRpZShfKCJCYWQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzdHJpbmc6ICVzIiksIGJyYW5jaCwKKwkJICAgIHNwbGl0X2NtZGxpbmVfc3RyZXJyb3IoYXJnYykpOworCVJFQUxMT0NfQVJSQVkoYXJndiwgYXJnYyArIDIpOworCW1lbW1vdmUoYXJndiArIDEsIGFyZ3YsIHNpemVvZigqYXJndikgKiAoYXJnYyArIDEpKTsKKwlhcmdjKys7CisJYXJndlswXSA9ICJicmFuY2guKi5tZXJnZW9wdGlvbnMiOworCXBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgYnVpbHRpbl9tZXJnZV9vcHRpb25zLAorCQkgICAgICBidWlsdGluX21lcmdlX3VzYWdlLCAwKTsKKwlmcmVlKGFyZ3YpOworfQorCitzdGF0aWMgaW50IGdpdF9tZXJnZV9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaW50IHN0YXR1czsKKworCWlmIChicmFuY2ggJiYgc3RhcnRzX3dpdGgoaywgImJyYW5jaC4iKSAmJgorCQlzdGFydHNfd2l0aChrICsgNywgYnJhbmNoKSAmJgorCQkhc3RyY21wKGsgKyA3ICsgc3RybGVuKGJyYW5jaCksICIubWVyZ2VvcHRpb25zIikpIHsKKwkJZnJlZShicmFuY2hfbWVyZ2VvcHRpb25zKTsKKwkJYnJhbmNoX21lcmdlb3B0aW9ucyA9IHhzdHJkdXAodik7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKGssICJtZXJnZS5kaWZmc3RhdCIpIHx8ICFzdHJjbXAoaywgIm1lcmdlLnN0YXQiKSkKKwkJc2hvd19kaWZmc3RhdCA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwllbHNlIGlmICghc3RyY21wKGssICJwdWxsLnR3b2hlYWQiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZwdWxsX3R3b2hlYWQsIGssIHYpOworCWVsc2UgaWYgKCFzdHJjbXAoaywgInB1bGwub2N0b3B1cyIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnB1bGxfb2N0b3B1cywgaywgdik7CisJZWxzZSBpZiAoIXN0cmNtcChrLCAibWVyZ2UucmVub3JtYWxpemUiKSkKKwkJb3B0aW9uX3Jlbm9ybWFsaXplID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCWVsc2UgaWYgKCFzdHJjbXAoaywgIm1lcmdlLmZmIikpIHsKKwkJaW50IGJvb2x2YWwgPSBnaXRfY29uZmlnX21heWJlX2Jvb2woaywgdik7CisJCWlmICgwIDw9IGJvb2x2YWwpIHsKKwkJCWZhc3RfZm9yd2FyZCA9IGJvb2x2YWwgPyBGRl9BTExPVyA6IEZGX05POworCQl9IGVsc2UgaWYgKHYgJiYgIXN0cmNtcCh2LCAib25seSIpKSB7CisJCQlmYXN0X2ZvcndhcmQgPSBGRl9PTkxZOworCQl9IC8qIGRvIG5vdCBiYXJmIG9uIHZhbHVlcyBmcm9tIGZ1dHVyZSB2ZXJzaW9ucyBvZiBnaXQgKi8KKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKGssICJtZXJnZS5kZWZhdWx0dG91cHN0cmVhbSIpKSB7CisJCWRlZmF1bHRfdG9fdXBzdHJlYW0gPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChrLCAiY29tbWl0LmdwZ3NpZ24iKSkgeworCQlzaWduX2NvbW1pdCA9IGdpdF9jb25maWdfYm9vbChrLCB2KSA/ICIiIDogTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RhdHVzID0gZm10X21lcmdlX21zZ19jb25maWcoaywgdiwgY2IpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gZ2l0X2dwZ19jb25maWcoaywgdiwgTlVMTCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gZ2l0X2RpZmZfdWlfY29uZmlnKGssIHYsIGNiKTsKK30KKworc3RhdGljIGludCByZWFkX3RyZWVfdHJpdmlhbCh1bnNpZ25lZCBjaGFyICpjb21tb24sIHVuc2lnbmVkIGNoYXIgKmhlYWQsCisJCQkgICAgIHVuc2lnbmVkIGNoYXIgKm9uZSkKK3sKKwlpbnQgaSwgbnJfdHJlZXMgPSAwOworCXN0cnVjdCB0cmVlICp0cmVlc1tNQVhfVU5QQUNLX1RSRUVTXTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRbTUFYX1VOUEFDS19UUkVFU107CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJb3B0cy5oZWFkX2lkeCA9IDI7CisJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLnVwZGF0ZSA9IDE7CisJb3B0cy52ZXJib3NlX3VwZGF0ZSA9IDE7CisJb3B0cy50cml2aWFsX21lcmdlc19vbmx5ID0gMTsKKwlvcHRzLm1lcmdlID0gMTsKKwl0cmVlc1tucl90cmVlc10gPSBwYXJzZV90cmVlX2luZGlyZWN0KGNvbW1vbik7CisJaWYgKCF0cmVlc1tucl90cmVlcysrXSkKKwkJcmV0dXJuIC0xOworCXRyZWVzW25yX3RyZWVzXSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoaGVhZCk7CisJaWYgKCF0cmVlc1tucl90cmVlcysrXSkKKwkJcmV0dXJuIC0xOworCXRyZWVzW25yX3RyZWVzXSA9IHBhcnNlX3RyZWVfaW5kaXJlY3Qob25lKTsKKwlpZiAoIXRyZWVzW25yX3RyZWVzKytdKQorCQlyZXR1cm4gLTE7CisJb3B0cy5mbiA9IHRocmVld2F5X21lcmdlOworCWNhY2hlX3RyZWVfZnJlZSgmYWN0aXZlX2NhY2hlX3RyZWUpOworCWZvciAoaSA9IDA7IGkgPCBucl90cmVlczsgaSsrKSB7CisJCXBhcnNlX3RyZWUodHJlZXNbaV0pOworCQlpbml0X3RyZWVfZGVzYyh0K2ksIHRyZWVzW2ldLT5idWZmZXIsIHRyZWVzW2ldLT5zaXplKTsKKwl9CisJaWYgKHVucGFja190cmVlcyhucl90cmVlcywgdCwgJm9wdHMpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3RyZWVfdHJpdmlhbCh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWlmICh3cml0ZV9jYWNoZV9hc190cmVlKHNoYTEsIDAsIE5VTEwpKQorCQlkaWUoXygiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIpKTsKK30KKworc3RhdGljIGludCB0cnlfbWVyZ2Vfc3RyYXRlZ3koY29uc3QgY2hhciAqc3RyYXRlZ3ksIHN0cnVjdCBjb21taXRfbGlzdCAqY29tbW9uLAorCQkJICAgICAgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcywKKwkJCSAgICAgIHN0cnVjdCBjb21taXQgKmhlYWQsIGNvbnN0IGNoYXIgKmhlYWRfYXJnKQoreworCXN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGxvY2s7CisKKwlob2xkX2xvY2tlZF9pbmRleCgmbG9jaywgMSk7CisJcmVmcmVzaF9jYWNoZShSRUZSRVNIX1FVSUVUKTsKKwlpZiAoYWN0aXZlX2NhY2hlX2NoYW5nZWQgJiYKKwkgICAgd3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZsb2NrLCBDT01NSVRfTE9DSykpCisJCXJldHVybiBlcnJvcihfKCJVbmFibGUgdG8gd3JpdGUgaW5kZXguIikpOworCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisKKwlpZiAoIXN0cmNtcChzdHJhdGVneSwgInJlY3Vyc2l2ZSIpIHx8ICFzdHJjbXAoc3RyYXRlZ3ksICJzdWJ0cmVlIikpIHsKKwkJaW50IGNsZWFuLCB4OworCQlzdHJ1Y3QgY29tbWl0ICpyZXN1bHQ7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcmV2ZXJzZWQgPSBOVUxMOworCQlzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyBvOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmo7CisKKwkJaWYgKHJlbW90ZWhlYWRzLT5uZXh0KSB7CisJCQllcnJvcihfKCJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIikpOworCQkJcmV0dXJuIDI7CisJCX0KKworCQlpbml0X21lcmdlX29wdGlvbnMoJm8pOworCQlpZiAoIXN0cmNtcChzdHJhdGVneSwgInN1YnRyZWUiKSkKKwkJCW8uc3VidHJlZV9zaGlmdCA9ICIiOworCisJCW8ucmVub3JtYWxpemUgPSBvcHRpb25fcmVub3JtYWxpemU7CisJCW8uc2hvd19yZW5hbWVfcHJvZ3Jlc3MgPQorCQkJc2hvd19wcm9ncmVzcyA9PSAtMSA/IGlzYXR0eSgyKSA6IHNob3dfcHJvZ3Jlc3M7CisKKwkJZm9yICh4ID0gMDsgeCA8IHhvcHRzX25yOyB4KyspCisJCQlpZiAocGFyc2VfbWVyZ2Vfb3B0KCZvLCB4b3B0c1t4XSkpCisJCQkJZGllKF8oIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiKSwgeG9wdHNbeF0pOworCisJCW8uYnJhbmNoMSA9IGhlYWRfYXJnOworCQlvLmJyYW5jaDIgPSBtZXJnZV9yZW1vdGVfdXRpbChyZW1vdGVoZWFkcy0+aXRlbSktPm5hbWU7CisKKwkJZm9yIChqID0gY29tbW9uOyBqOyBqID0gai0+bmV4dCkKKwkJCWNvbW1pdF9saXN0X2luc2VydChqLT5pdGVtLCAmcmV2ZXJzZWQpOworCisJCWhvbGRfbG9ja2VkX2luZGV4KCZsb2NrLCAxKTsKKwkJY2xlYW4gPSBtZXJnZV9yZWN1cnNpdmUoJm8sIGhlYWQsCisJCQkJcmVtb3RlaGVhZHMtPml0ZW0sIHJldmVyc2VkLCAmcmVzdWx0KTsKKwkJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkICYmCisJCSAgICB3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2ssIENPTU1JVF9MT0NLKSkKKwkJCWRpZSAoXygidW5hYmxlIHRvIHdyaXRlICVzIiksIGdldF9pbmRleF9maWxlKCkpOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCQlyZXR1cm4gY2xlYW4gPyAwIDogMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gdHJ5X21lcmdlX2NvbW1hbmQoc3RyYXRlZ3ksIHhvcHRzX25yLCB4b3B0cywKKwkJCQkJCWNvbW1vbiwgaGVhZF9hcmcsIHJlbW90ZWhlYWRzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvdW50X2RpZmZfZmlsZXMoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmRhdGEpCit7CisJaW50ICpjb3VudCA9IGRhdGE7CisKKwkoKmNvdW50KSArPSBxLT5ucjsKK30KKworc3RhdGljIGludCBjb3VudF91bm1lcmdlZF9lbnRyaWVzKHZvaWQpCit7CisJaW50IGksIHJldCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspCisJCWlmIChjZV9zdGFnZShhY3RpdmVfY2FjaGVbaV0pKQorCQkJcmV0Kys7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzcGxpdF9tZXJnZV9zdHJhdGVnaWVzKGNvbnN0IGNoYXIgKnN0cmluZywgc3RydWN0IHN0cmF0ZWd5ICoqbGlzdCwKKwkJCQkgICBpbnQgKm5yLCBpbnQgKmFsbG9jKQoreworCWNoYXIgKnAsICpxLCAqYnVmOworCisJaWYgKCFzdHJpbmcpCisJCXJldHVybjsKKworCWJ1ZiA9IHhzdHJkdXAoc3RyaW5nKTsKKwlxID0gYnVmOworCWZvciAoOzspIHsKKwkJcCA9IHN0cmNocihxLCAnICcpOworCQlpZiAoIXApIHsKKwkJCUFMTE9DX0dST1coKmxpc3QsICpuciArIDEsICphbGxvYyk7CisJCQkoKmxpc3QpWygqbnIpKytdLm5hbWUgPSB4c3RyZHVwKHEpOworCQkJZnJlZShidWYpOworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJKnAgPSAnXDAnOworCQkJQUxMT0NfR1JPVygqbGlzdCwgKm5yICsgMSwgKmFsbG9jKTsKKwkJCSgqbGlzdClbKCpucikrK10ubmFtZSA9IHhzdHJkdXAocSk7CisJCQlxID0gKytwOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfc3RyYXRlZ2llcyhjb25zdCBjaGFyICpzdHJpbmcsIHVuc2lnbmVkIGF0dHIpCit7CisJc3RydWN0IHN0cmF0ZWd5ICpsaXN0ID0gTlVMTDsKKwlpbnQgbGlzdF9hbGxvYyA9IDAsIGxpc3RfbnIgPSAwLCBpOworCisJbWVtc2V0KCZsaXN0LCAwLCBzaXplb2YobGlzdCkpOworCXNwbGl0X21lcmdlX3N0cmF0ZWdpZXMoc3RyaW5nLCAmbGlzdCwgJmxpc3RfbnIsICZsaXN0X2FsbG9jKTsKKwlpZiAobGlzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbGlzdF9ucjsgaSsrKQorCQkJYXBwZW5kX3N0cmF0ZWd5KGdldF9zdHJhdGVneShsaXN0W2ldLm5hbWUpKTsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbGxfc3RyYXRlZ3kpOyBpKyspCisJCWlmIChhbGxfc3RyYXRlZ3lbaV0uYXR0ciAmIGF0dHIpCisJCQlhcHBlbmRfc3RyYXRlZ3koJmFsbF9zdHJhdGVneVtpXSk7CisKK30KKworc3RhdGljIHZvaWQgd3JpdGVfbWVyZ2VfbXNnKHN0cnVjdCBzdHJidWYgKm1zZykKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoX21lcmdlX21zZygpOworCWludCBmZCA9IG9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCwgMDY2Nik7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciKSwKKwkJCSAgZmlsZW5hbWUpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBtc2ctPmJ1ZiwgbXNnLT5sZW4pICE9IG1zZy0+bGVuKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IHdyaXRlIHRvICclcyciKSwgZmlsZW5hbWUpOworCWNsb3NlKGZkKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9tZXJnZV9tc2coc3RydWN0IHN0cmJ1ZiAqbXNnKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gZ2l0X3BhdGhfbWVyZ2VfbXNnKCk7CisJc3RyYnVmX3Jlc2V0KG1zZyk7CisJaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUobXNnLCBmaWxlbmFtZSwgMCkgPCAwKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIiksIGZpbGVuYW1lKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfbWVyZ2Vfc3RhdGUoc3RydWN0IGNvbW1pdF9saXN0ICopOworc3RhdGljIHZvaWQgYWJvcnRfY29tbWl0KHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMsIGNvbnN0IGNoYXIgKmVycl9tc2cpCit7CisJaWYgKGVycl9tc2cpCisJCWVycm9yKCIlcyIsIGVycl9tc2cpOworCWZwcmludGYoc3RkZXJyLAorCQlfKCJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iKSk7CisJd3JpdGVfbWVyZ2Vfc3RhdGUocmVtb3RlaGVhZHMpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIG1lcmdlX2VkaXRvcl9jb21tZW50W10gPQorTl8oIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorICAgImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyAgICJcbiIKKyAgICJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyAgICJ0aGUgY29tbWl0LlxuIik7CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfdG9fY29tbWl0KHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMpCit7CisJc3RydWN0IHN0cmJ1ZiBtc2cgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfYWRkYnVmKCZtc2csICZtZXJnZV9tc2cpOworCXN0cmJ1Zl9hZGRjaCgmbXNnLCAnXG4nKTsKKwlpZiAoMCA8IG9wdGlvbl9lZGl0KQorCQlzdHJidWZfY29tbWVudGVkX2FkZGYoJm1zZywgXyhtZXJnZV9lZGl0b3JfY29tbWVudCksIGNvbW1lbnRfbGluZV9jaGFyKTsKKwl3cml0ZV9tZXJnZV9tc2coJm1zZyk7CisJaWYgKHJ1bl9jb21taXRfaG9vaygwIDwgb3B0aW9uX2VkaXQsIGdldF9pbmRleF9maWxlKCksICJwcmVwYXJlLWNvbW1pdC1tc2ciLAorCQkJICAgIGdpdF9wYXRoX21lcmdlX21zZygpLCAibWVyZ2UiLCBOVUxMKSkKKwkJYWJvcnRfY29tbWl0KHJlbW90ZWhlYWRzLCBOVUxMKTsKKwlpZiAoMCA8IG9wdGlvbl9lZGl0KSB7CisJCWlmIChsYXVuY2hfZWRpdG9yKGdpdF9wYXRoX21lcmdlX21zZygpLCBOVUxMLCBOVUxMKSkKKwkJCWFib3J0X2NvbW1pdChyZW1vdGVoZWFkcywgTlVMTCk7CisJfQorCXJlYWRfbWVyZ2VfbXNnKCZtc2cpOworCXN0cmJ1Zl9zdHJpcHNwYWNlKCZtc2csIDAgPCBvcHRpb25fZWRpdCk7CisJaWYgKCFtc2cubGVuKQorCQlhYm9ydF9jb21taXQocmVtb3RlaGVhZHMsIF8oIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIpKTsKKwlzdHJidWZfcmVsZWFzZSgmbWVyZ2VfbXNnKTsKKwlzdHJidWZfYWRkYnVmKCZtZXJnZV9tc2csICZtc2cpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworfQorCitzdGF0aWMgaW50IG1lcmdlX3RyaXZpYWwoc3RydWN0IGNvbW1pdCAqaGVhZCwgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcykKK3sKKwl1bnNpZ25lZCBjaGFyIHJlc3VsdF90cmVlWzIwXSwgcmVzdWx0X2NvbW1pdFsyMF07CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLCAqKnBwdHIgPSAmcGFyZW50czsKKworCXdyaXRlX3RyZWVfdHJpdmlhbChyZXN1bHRfdHJlZSk7CisJcHJpbnRmKF8oIldvbmRlcmZ1bC5cbiIpKTsKKwlwcHRyID0gY29tbWl0X2xpc3RfYXBwZW5kKGhlYWQsIHBwdHIpOworCXBwdHIgPSBjb21taXRfbGlzdF9hcHBlbmQocmVtb3RlaGVhZHMtPml0ZW0sIHBwdHIpOworCXByZXBhcmVfdG9fY29tbWl0KHJlbW90ZWhlYWRzKTsKKwlpZiAoY29tbWl0X3RyZWUobWVyZ2VfbXNnLmJ1ZiwgbWVyZ2VfbXNnLmxlbiwgcmVzdWx0X3RyZWUsIHBhcmVudHMsCisJCQlyZXN1bHRfY29tbWl0LCBOVUxMLCBzaWduX2NvbW1pdCkpCisJCWRpZShfKCJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIpKTsKKwlmaW5pc2goaGVhZCwgcmVtb3RlaGVhZHMsIHJlc3VsdF9jb21taXQsICJJbi1pbmRleCBtZXJnZSIpOworCWRyb3Bfc2F2ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbmlzaF9hdXRvbWVyZ2Uoc3RydWN0IGNvbW1pdCAqaGVhZCwKKwkJCSAgICBpbnQgaGVhZF9zdWJzdW1lZCwKKwkJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbiwKKwkJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzLAorCQkJICAgIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF90cmVlLAorCQkJICAgIGNvbnN0IGNoYXIgKnd0X3N0cmF0ZWd5KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIHJlc3VsdF9jb21taXRbMjBdOworCisJZnJlZV9jb21taXRfbGlzdChjb21tb24pOworCXBhcmVudHMgPSByZW1vdGVoZWFkczsKKwlpZiAoIWhlYWRfc3Vic3VtZWQgfHwgZmFzdF9mb3J3YXJkID09IEZGX05PKQorCQljb21taXRfbGlzdF9pbnNlcnQoaGVhZCwgJnBhcmVudHMpOworCXN0cmJ1Zl9hZGRjaCgmbWVyZ2VfbXNnLCAnXG4nKTsKKwlwcmVwYXJlX3RvX2NvbW1pdChyZW1vdGVoZWFkcyk7CisJaWYgKGNvbW1pdF90cmVlKG1lcmdlX21zZy5idWYsIG1lcmdlX21zZy5sZW4sIHJlc3VsdF90cmVlLCBwYXJlbnRzLAorCQkJcmVzdWx0X2NvbW1pdCwgTlVMTCwgc2lnbl9jb21taXQpKQorCQlkaWUoXygiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiKSk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIk1lcmdlIG1hZGUgYnkgdGhlICclcycgc3RyYXRlZ3kuIiwgd3Rfc3RyYXRlZ3kpOworCWZpbmlzaChoZWFkLCByZW1vdGVoZWFkcywgcmVzdWx0X2NvbW1pdCwgYnVmLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJZHJvcF9zYXZlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3VnZ2VzdF9jb25mbGljdHModm9pZCkKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwlGSUxFICpmcDsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCisJZmlsZW5hbWUgPSBnaXRfcGF0aF9tZXJnZV9tc2coKTsKKwlmcCA9IGZvcGVuKGZpbGVuYW1lLCAiYSIpOworCWlmICghZnApCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksIGZpbGVuYW1lKTsKKworCWFwcGVuZF9jb25mbGljdHNfaGludCgmbXNnYnVmKTsKKwlmcHV0cyhtc2didWYuYnVmLCBmcCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7CisJZmNsb3NlKGZwKTsKKwlyZXJlcmUoYWxsb3dfcmVyZXJlX2F1dG8pOworCXByaW50ZihfKCJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyAiCisJCQkiZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIpKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmlzX29sZF9zdHlsZV9pbnZvY2F0aW9uKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpzZWNvbmRfdG9rZW4gPSBOVUxMOworCWlmIChhcmdjID4gMikgeworCQl1bnNpZ25lZCBjaGFyIHNlY29uZF9zaGExWzIwXTsKKworCQlpZiAoZ2V0X3NoYTEoYXJndlsxXSwgc2Vjb25kX3NoYTEpKQorCQkJcmV0dXJuIE5VTEw7CisJCXNlY29uZF90b2tlbiA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShzZWNvbmRfc2hhMSwgMCk7CisJCWlmICghc2Vjb25kX3Rva2VuKQorCQkJZGllKF8oIiclcycgaXMgbm90IGEgY29tbWl0IiksIGFyZ3ZbMV0pOworCQlpZiAoaGFzaGNtcChzZWNvbmRfdG9rZW4tPm9iamVjdC5zaGExLCBoZWFkKSkKKwkJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gc2Vjb25kX3Rva2VuOworfQorCitzdGF0aWMgaW50IGV2YWx1YXRlX3Jlc3VsdCh2b2lkKQoreworCWludCBjbnQgPSAwOworCXN0cnVjdCByZXZfaW5mbyByZXY7CisKKwkvKiBDaGVjayBob3cgbWFueSBmaWxlcyBkaWZmZXIuICovCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgIiIpOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCBOVUxMKTsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9CisJCURJRkZfRk9STUFUX0NBTExCQUNLOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IGNvdW50X2RpZmZfZmlsZXM7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSAmY250OworCXJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApOworCisJLyoKKwkgKiBDaGVjayBob3cgbWFueSB1bm1lcmdlZCBlbnRyaWVzIGFyZQorCSAqIHRoZXJlLgorCSAqLworCWNudCArPSBjb3VudF91bm1lcmdlZF9lbnRyaWVzKCk7CisKKwlyZXR1cm4gY250OworfQorCisvKgorICogUHJldGVuZCBhcyBpZiB0aGUgdXNlciB0b2xkIHVzIHRvIG1lcmdlIHdpdGggdGhlIHJlbW90ZS10cmFja2luZworICogYnJhbmNoIHdlIGhhdmUgZm9yIHRoZSB1cHN0cmVhbSBvZiB0aGUgY3VycmVudCBicmFuY2gKKyAqLworc3RhdGljIGludCBzZXR1cF93aXRoX3Vwc3RyZWFtKGNvbnN0IGNoYXIgKioqYXJndikKK3sKKwlzdHJ1Y3QgYnJhbmNoICpicmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCWludCBpOworCWNvbnN0IGNoYXIgKiphcmdzOworCisJaWYgKCFicmFuY2gpCisJCWRpZShfKCJObyBjdXJyZW50IGJyYW5jaC4iKSk7CisJaWYgKCFicmFuY2gtPnJlbW90ZV9uYW1lKQorCQlkaWUoXygiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIikpOworCWlmICghYnJhbmNoLT5tZXJnZV9ucikKKwkJZGllKF8oIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIpKTsKKworCWFyZ3MgPSB4Y2FsbG9jKGJyYW5jaC0+bWVyZ2VfbnIgKyAxLCBzaXplb2YoY2hhciAqKSk7CisJZm9yIChpID0gMDsgaSA8IGJyYW5jaC0+bWVyZ2VfbnI7IGkrKykgeworCQlpZiAoIWJyYW5jaC0+bWVyZ2VbaV0tPmRzdCkKKwkJCWRpZShfKCJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIiksCisJCQkgICAgYnJhbmNoLT5tZXJnZVtpXS0+c3JjLCBicmFuY2gtPnJlbW90ZV9uYW1lKTsKKwkJYXJnc1tpXSA9IGJyYW5jaC0+bWVyZ2VbaV0tPmRzdDsKKwl9CisJYXJnc1tpXSA9IE5VTEw7CisJKmFyZ3YgPSBhcmdzOworCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9tZXJnZV9zdGF0ZShzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZWhlYWRzKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWludCBmZDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmo7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoaiA9IHJlbW90ZWhlYWRzOyBqOyBqID0gai0+bmV4dCkgeworCQl1bnNpZ25lZCBjb25zdCBjaGFyICpzaGExOworCQlzdHJ1Y3QgY29tbWl0ICpjID0gai0+aXRlbTsKKwkJaWYgKGMtPnV0aWwgJiYgbWVyZ2VfcmVtb3RlX3V0aWwoYyktPm9iaikgeworCQkJc2hhMSA9IG1lcmdlX3JlbW90ZV91dGlsKGMpLT5vYmotPnNoYTE7CisJCX0gZWxzZSB7CisJCQlzaGExID0gYy0+b2JqZWN0LnNoYTE7CisJCX0KKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CisJfQorCWZpbGVuYW1lID0gZ2l0X3BhdGhfbWVyZ2VfaGVhZCgpOworCWZkID0gb3BlbihmaWxlbmFtZSwgT19XUk9OTFkgfCBPX0NSRUFULCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIpLCBmaWxlbmFtZSk7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pICE9IGJ1Zi5sZW4pCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBmaWxlbmFtZSk7CisJY2xvc2UoZmQpOworCXN0cmJ1Zl9hZGRjaCgmbWVyZ2VfbXNnLCAnXG4nKTsKKwl3cml0ZV9tZXJnZV9tc2coJm1lcmdlX21zZyk7CisKKwlmaWxlbmFtZSA9IGdpdF9wYXRoX21lcmdlX21vZGUoKTsKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NjYpOworCWlmIChmZCA8IDApCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksIGZpbGVuYW1lKTsKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJaWYgKGZhc3RfZm9yd2FyZCA9PSBGRl9OTykKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIm5vLWZmIik7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pICE9IGJ1Zi5sZW4pCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIpLCBmaWxlbmFtZSk7CisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgaW50IGRlZmF1bHRfZWRpdF9vcHRpb24odm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBuYW1lW10gPSAiR0lUX01FUkdFX0FVVE9FRElUIjsKKwljb25zdCBjaGFyICplID0gZ2V0ZW52KG5hbWUpOworCXN0cnVjdCBzdGF0IHN0X3N0ZGluLCBzdF9zdGRvdXQ7CisKKwlpZiAoaGF2ZV9tZXNzYWdlKQorCQkvKiBhbiBleHBsaWNpdCAtbSBtc2cgd2l0aG91dCAtLVtuby1dZWRpdCAqLworCQlyZXR1cm4gMDsKKworCWlmIChlKSB7CisJCWludCB2ID0gZ2l0X2NvbmZpZ19tYXliZV9ib29sKG5hbWUsIGUpOworCQlpZiAodiA8IDApCisJCQlkaWUoIkJhZCB2YWx1ZSAnJXMnIGluIGVudmlyb25tZW50ICclcyciLCBlLCBuYW1lKTsKKwkJcmV0dXJuIHY7CisJfQorCisJLyogVXNlIGVkaXRvciBpZiBzdGRpbiBhbmQgc3Rkb3V0IGFyZSB0aGUgc2FtZSBhbmQgaXMgYSB0dHkgKi8KKwlyZXR1cm4gKCFmc3RhdCgwLCAmc3Rfc3RkaW4pICYmCisJCSFmc3RhdCgxLCAmc3Rfc3Rkb3V0KSAmJgorCQlpc2F0dHkoMCkgJiYgaXNhdHR5KDEpICYmCisJCXN0X3N0ZGluLnN0X2RldiA9PSBzdF9zdGRvdXQuc3RfZGV2ICYmCisJCXN0X3N0ZGluLnN0X2lubyA9PSBzdF9zdGRvdXQuc3RfaW5vICYmCisJCXN0X3N0ZGluLnN0X21vZGUgPT0gc3Rfc3Rkb3V0LnN0X21vZGUpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpyZWR1Y2VfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpoZWFkX2NvbW1pdCwKKwkJCQkJICBpbnQgKmhlYWRfc3Vic3VtZWQsCisJCQkJCSAgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVoZWFkcykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsICpuZXh0LCAqKnJlbW90ZXMgPSAmcmVtb3RlaGVhZHM7CisKKwkvKgorCSAqIElzIHRoZSBjdXJyZW50IEhFQUQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBjb21taXQgYmVpbmcKKwkgKiBtZXJnZWQ/ICBJZiBzbyB3ZSBkbyBub3Qgd2FudCB0byByZWNvcmQgaXQgYXMgYSBwYXJlbnQgb2YKKwkgKiB0aGUgcmVzdWx0aW5nIG1lcmdlLCB1bmxlc3MgLS1uby1mZiBpcyBnaXZlbi4gIFdlIHdpbGwgZmxpcAorCSAqIHRoaXMgdmFyaWFibGUgdG8gMCB3aGVuIHdlIGZpbmQgSEVBRCBhbW9uZyB0aGUgaW5kZXBlbmRlbnQKKwkgKiB0aXBzIGJlaW5nIG1lcmdlZC4KKwkgKi8KKwkqaGVhZF9zdWJzdW1lZCA9IDE7CisKKwkvKiBGaW5kIHdoYXQgcGFyZW50cyB0byByZWNvcmQgYnkgY2hlY2tpbmcgaW5kZXBlbmRlbnQgb25lcy4gKi8KKwlwYXJlbnRzID0gcmVkdWNlX2hlYWRzKHJlbW90ZWhlYWRzKTsKKworCWZvciAocmVtb3RlaGVhZHMgPSBOVUxMLCByZW1vdGVzID0gJnJlbW90ZWhlYWRzOworCSAgICAgcGFyZW50czsKKwkgICAgIHBhcmVudHMgPSBuZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHBhcmVudHMtPml0ZW07CisJCW5leHQgPSBwYXJlbnRzLT5uZXh0OworCQlpZiAoY29tbWl0ID09IGhlYWRfY29tbWl0KQorCQkJKmhlYWRfc3Vic3VtZWQgPSAwOworCQllbHNlCisJCQlyZW1vdGVzID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHJlbW90ZXMpLT5uZXh0OworCQlmcmVlKHBhcmVudHMpOworCX0KKwlyZXR1cm4gcmVtb3RlaGVhZHM7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfbWVyZ2VfbWVzc2FnZShzdHJ1Y3Qgc3RyYnVmICptZXJnZV9uYW1lcywgc3RydWN0IHN0cmJ1ZiAqbWVyZ2VfbXNnKQoreworCXN0cnVjdCBmbXRfbWVyZ2VfbXNnX29wdHMgb3B0czsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmFkZF90aXRsZSA9ICFoYXZlX21lc3NhZ2U7CisJb3B0cy5zaG9ydGxvZ19sZW4gPSBzaG9ydGxvZ19sZW47CisJb3B0cy5jcmVkaXRfcGVvcGxlID0gKDAgPCBvcHRpb25fZWRpdCk7CisKKwlmbXRfbWVyZ2VfbXNnKG1lcmdlX25hbWVzLCBtZXJnZV9tc2csICZvcHRzKTsKKwlpZiAobWVyZ2VfbXNnLT5sZW4pCisJCXN0cmJ1Zl9zZXRsZW4obWVyZ2VfbXNnLCBtZXJnZV9tc2ctPmxlbiAtIDEpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZmV0Y2hfaGVhZChzdHJ1Y3QgY29tbWl0X2xpc3QgKipyZW1vdGVzLCBzdHJ1Y3Qgc3RyYnVmICptZXJnZV9uYW1lcykKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwlpbnQgZmQsIHBvcywgbnBvczsKKwlzdHJ1Y3Qgc3RyYnVmIGZldGNoX2hlYWRfZmlsZSA9IFNUUkJVRl9JTklUOworCisJaWYgKCFtZXJnZV9uYW1lcykKKwkJbWVyZ2VfbmFtZXMgPSAmZmV0Y2hfaGVhZF9maWxlOworCisJZmlsZW5hbWUgPSBnaXRfcGF0aF9mZXRjaF9oZWFkKCk7CisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciKSwgZmlsZW5hbWUpOworCisJaWYgKHN0cmJ1Zl9yZWFkKG1lcmdlX25hbWVzLCBmZCwgMCkgPCAwKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IHJlYWQgJyVzJyIpLCBmaWxlbmFtZSk7CisJaWYgKGNsb3NlKGZkKSA8IDApCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY2xvc2UgJyVzJyIpLCBmaWxlbmFtZSk7CisKKwlmb3IgKHBvcyA9IDA7IHBvcyA8IG1lcmdlX25hbWVzLT5sZW47IHBvcyA9IG5wb3MpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY2hhciAqcHRyOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwkJcHRyID0gc3RyY2hyKG1lcmdlX25hbWVzLT5idWYgKyBwb3MsICdcbicpOworCQlpZiAocHRyKQorCQkJbnBvcyA9IHB0ciAtIG1lcmdlX25hbWVzLT5idWYgKyAxOworCQllbHNlCisJCQlucG9zID0gbWVyZ2VfbmFtZXMtPmxlbjsKKworCQlpZiAobnBvcyAtIHBvcyA8IDQwICsgMiB8fAorCQkgICAgZ2V0X3NoYTFfaGV4KG1lcmdlX25hbWVzLT5idWYgKyBwb3MsIHNoYTEpKQorCQkJY29tbWl0ID0gTlVMTDsgLyogYmFkICovCisJCWVsc2UgaWYgKG1lbWNtcChtZXJnZV9uYW1lcy0+YnVmICsgcG9zICsgNDAsICJcdFx0IiwgMikpCisJCQljb250aW51ZTsgLyogbm90LWZvci1tZXJnZSAqLworCQllbHNlIHsKKwkJCWNoYXIgc2F2ZWQgPSBtZXJnZV9uYW1lcy0+YnVmW3BvcyArIDQwXTsKKwkJCW1lcmdlX25hbWVzLT5idWZbcG9zICsgNDBdID0gJ1wwJzsKKwkJCWNvbW1pdCA9IGdldF9tZXJnZV9wYXJlbnQobWVyZ2VfbmFtZXMtPmJ1ZiArIHBvcyk7CisJCQltZXJnZV9uYW1lcy0+YnVmW3BvcyArIDQwXSA9IHNhdmVkOworCQl9CisJCWlmICghY29tbWl0KSB7CisJCQlpZiAocHRyKQorCQkJCSpwdHIgPSAnXDAnOworCQkJZGllKCJub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSBpbiAlczogJXMiLAorCQkJICAgIGZpbGVuYW1lLCBtZXJnZV9uYW1lcy0+YnVmICsgcG9zKTsKKwkJfQorCQlyZW1vdGVzID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHJlbW90ZXMpLT5uZXh0OworCX0KKworCWlmIChtZXJnZV9uYW1lcyA9PSAmZmV0Y2hfaGVhZF9maWxlKQorCQlzdHJidWZfcmVsZWFzZSgmZmV0Y2hfaGVhZF9maWxlKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqY29sbGVjdF9wYXJlbnRzKHN0cnVjdCBjb21taXQgKmhlYWRfY29tbWl0LAorCQkJCQkgICBpbnQgKmhlYWRfc3Vic3VtZWQsCisJCQkJCSAgIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCQkJICAgc3RydWN0IHN0cmJ1ZiAqbWVyZ2VfbXNnKQoreworCWludCBpOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqKnJlbW90ZXMgPSAmcmVtb3RlaGVhZHM7CisJc3RydWN0IHN0cmJ1ZiBtZXJnZV9uYW1lcyA9IFNUUkJVRl9JTklULCAqYXV0b2dlbiA9IE5VTEw7CisKKwlpZiAobWVyZ2VfbXNnICYmICghaGF2ZV9tZXNzYWdlIHx8IHNob3J0bG9nX2xlbikpCisJCWF1dG9nZW4gPSAmbWVyZ2VfbmFtZXM7CisKKwlpZiAoaGVhZF9jb21taXQpCisJCXJlbW90ZXMgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGhlYWRfY29tbWl0LCByZW1vdGVzKS0+bmV4dDsKKworCWlmIChhcmdjID09IDEgJiYgIXN0cmNtcChhcmd2WzBdLCAiRkVUQ0hfSEVBRCIpKSB7CisJCWhhbmRsZV9mZXRjaF9oZWFkKHJlbW90ZXMsIGF1dG9nZW4pOworCQlyZW1vdGVoZWFkcyA9IHJlZHVjZV9wYXJlbnRzKGhlYWRfY29tbWl0LCBoZWFkX3N1YnN1bWVkLCByZW1vdGVoZWFkcyk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gZ2V0X21lcmdlX3BhcmVudChhcmd2W2ldKTsKKwkJCWlmICghY29tbWl0KQorCQkJCWhlbHBfdW5rbm93bl9yZWYoYXJndltpXSwgIm1lcmdlIiwKKwkJCQkJCSAibm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiKTsKKwkJCXJlbW90ZXMgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgcmVtb3RlcyktPm5leHQ7CisJCX0KKwkJcmVtb3RlaGVhZHMgPSByZWR1Y2VfcGFyZW50cyhoZWFkX2NvbW1pdCwgaGVhZF9zdWJzdW1lZCwgcmVtb3RlaGVhZHMpOworCQlpZiAoYXV0b2dlbikgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCQkJZm9yIChwID0gcmVtb3RlaGVhZHM7IHA7IHAgPSBwLT5uZXh0KQorCQkJCW1lcmdlX25hbWUobWVyZ2VfcmVtb3RlX3V0aWwocC0+aXRlbSktPm5hbWUsIGF1dG9nZW4pOworCQl9CisJfQorCisJaWYgKGF1dG9nZW4pIHsKKwkJcHJlcGFyZV9tZXJnZV9tZXNzYWdlKGF1dG9nZW4sIG1lcmdlX21zZyk7CisJCXN0cmJ1Zl9yZWxlYXNlKGF1dG9nZW4pOworCX0KKworCXJldHVybiByZW1vdGVoZWFkczsKK30KKworaW50IGNtZF9tZXJnZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHJlc3VsdF90cmVlWzIwXTsKKwl1bnNpZ25lZCBjaGFyIHN0YXNoWzIwXTsKKwl1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF07CisJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpoZWFkX2FyZzsKKwlpbnQgZmxhZywgaSwgcmV0ID0gMCwgaGVhZF9zdWJzdW1lZDsKKwlpbnQgYmVzdF9jbnQgPSAtMSwgbWVyZ2Vfd2FzX29rID0gMCwgYXV0b21lcmdlX3dhc19vayA9IDA7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjb21tb24gPSBOVUxMOworCWNvbnN0IGNoYXIgKmJlc3Rfc3RyYXRlZ3kgPSBOVUxMLCAqd3Rfc3RyYXRlZ3kgPSBOVUxMOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlaGVhZHMsICpwOworCXZvaWQgKmJyYW5jaF90b19mcmVlOworCisJaWYgKGFyZ2MgPT0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9tZXJnZV91c2FnZSwgYnVpbHRpbl9tZXJnZV9vcHRpb25zKTsKKworCS8qCisJICogQ2hlY2sgaWYgd2UgYXJlIF9ub3RfIG9uIGEgZGV0YWNoZWQgSEVBRCwgaS5lLiBpZiB0aGVyZSBpcyBhCisJICogY3VycmVudCBicmFuY2guCisJICovCisJYnJhbmNoID0gYnJhbmNoX3RvX2ZyZWUgPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsIGhlYWRfc2hhMSwgJmZsYWcpOworCWlmIChicmFuY2ggJiYgc3RhcnRzX3dpdGgoYnJhbmNoLCAicmVmcy9oZWFkcy8iKSkKKwkJYnJhbmNoICs9IDExOworCWlmICghYnJhbmNoIHx8IGlzX251bGxfc2hhMShoZWFkX3NoYTEpKQorCQloZWFkX2NvbW1pdCA9IE5VTEw7CisJZWxzZQorCQloZWFkX2NvbW1pdCA9IGxvb2t1cF9jb21taXRfb3JfZGllKGhlYWRfc2hhMSwgIkhFQUQiKTsKKworCWdpdF9jb25maWcoZ2l0X21lcmdlX2NvbmZpZywgTlVMTCk7CisKKwlpZiAoYnJhbmNoX21lcmdlb3B0aW9ucykKKwkJcGFyc2VfYnJhbmNoX21lcmdlX29wdGlvbnMoYnJhbmNoX21lcmdlb3B0aW9ucyk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX21lcmdlX29wdGlvbnMsCisJCQlidWlsdGluX21lcmdlX3VzYWdlLCAwKTsKKwlpZiAoc2hvcnRsb2dfbGVuIDwgMCkKKwkJc2hvcnRsb2dfbGVuID0gKG1lcmdlX2xvZ19jb25maWcgPiAwKSA/IG1lcmdlX2xvZ19jb25maWcgOiAwOworCisJaWYgKHZlcmJvc2l0eSA8IDAgJiYgc2hvd19wcm9ncmVzcyA9PSAtMSkKKwkJc2hvd19wcm9ncmVzcyA9IDA7CisKKwlpZiAoYWJvcnRfY3VycmVudF9tZXJnZSkgeworCQlpbnQgbmFyZ2MgPSAyOworCQljb25zdCBjaGFyICpuYXJndltdID0geyJyZXNldCIsICItLW1lcmdlIiwgTlVMTH07CisKKwkJaWYgKCFmaWxlX2V4aXN0cyhnaXRfcGF0aF9tZXJnZV9oZWFkKCkpKQorCQkJZGllKF8oIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIpKTsKKworCQkvKiBJbnZva2UgJ2dpdCByZXNldCAtLW1lcmdlJyAqLworCQlyZXQgPSBjbWRfcmVzZXQobmFyZ2MsIG5hcmd2LCBwcmVmaXgpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHJlYWRfY2FjaGVfdW5tZXJnZWQoKSkKKwkJZGllX3Jlc29sdmVfY29uZmxpY3QoIm1lcmdlIik7CisKKwlpZiAoZmlsZV9leGlzdHMoZ2l0X3BhdGhfbWVyZ2VfaGVhZCgpKSkgeworCQkvKgorCQkgKiBUaGVyZSBpcyBubyB1bm1lcmdlZCBlbnRyeSwgZG9uJ3QgYWR2aXNlICdnaXQKKwkJICogYWRkL3JtIDxmaWxlPicsIGp1c3QgJ2dpdCBjb21taXQnLgorCQkgKi8KKwkJaWYgKGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0KQorCQkJZGllKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorCQkJCSAgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIpKTsKKwkJZWxzZQorCQkJZGllKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIpKTsKKwl9CisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQoKSkpIHsKKwkJaWYgKGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0KQorCQkJZGllKF8oIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorCQkJICAgICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iKSk7CisJCWVsc2UKKwkJCWRpZShfKCJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iKSk7CisJfQorCXJlc29sdmVfdW5kb19jbGVhcigpOworCisJaWYgKHZlcmJvc2l0eSA8IDApCisJCXNob3dfZGlmZnN0YXQgPSAwOworCisJaWYgKHNxdWFzaCkgeworCQlpZiAoZmFzdF9mb3J3YXJkID09IEZGX05PKQorCQkJZGllKF8oIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIikpOworCQlvcHRpb25fY29tbWl0ID0gMDsKKwl9CisKKwlpZiAoIWFyZ2MpIHsKKwkJaWYgKGRlZmF1bHRfdG9fdXBzdHJlYW0pCisJCQlhcmdjID0gc2V0dXBfd2l0aF91cHN0cmVhbSgmYXJndik7CisJCWVsc2UKKwkJCWRpZShfKCJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIpKTsKKwl9IGVsc2UgaWYgKGFyZ2MgPT0gMSAmJiAhc3RyY21wKGFyZ3ZbMF0sICItIikpIHsKKwkJYXJndlswXSA9ICJAey0xfSI7CisJfQorCisJaWYgKCFhcmdjKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9tZXJnZV91c2FnZSwKKwkJCWJ1aWx0aW5fbWVyZ2Vfb3B0aW9ucyk7CisKKwlpZiAoIWhlYWRfY29tbWl0KSB7CisJCXN0cnVjdCBjb21taXQgKnJlbW90ZV9oZWFkOworCQkvKgorCQkgKiBJZiB0aGUgbWVyZ2VkIGhlYWQgaXMgYSB2YWxpZCBvbmUgdGhlcmUgaXMgbm8gcmVhc29uCisJCSAqIHRvIGZvcmJpZCAiZ2l0IG1lcmdlIiBpbnRvIGEgYnJhbmNoIHlldCB0byBiZSBib3JuLgorCQkgKiBXZSBkbyB0aGUgc2FtZSBmb3IgImdpdCBwdWxsIi4KKwkJICovCisJCWlmIChzcXVhc2gpCisJCQlkaWUoXygiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiKSk7CisJCWlmIChmYXN0X2ZvcndhcmQgPT0gRkZfTk8pCisJCQlkaWUoXygiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvICIKKwkJCSAgICAiYW4gZW1wdHkgaGVhZCIpKTsKKwkJcmVtb3RlaGVhZHMgPSBjb2xsZWN0X3BhcmVudHMoaGVhZF9jb21taXQsICZoZWFkX3N1YnN1bWVkLAorCQkJCQkgICAgICBhcmdjLCBhcmd2LCBOVUxMKTsKKwkJcmVtb3RlX2hlYWQgPSByZW1vdGVoZWFkcy0+aXRlbTsKKwkJaWYgKCFyZW1vdGVfaGVhZCkKKwkJCWRpZShfKCIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIiksIGFyZ3ZbMF0pOworCQlpZiAocmVtb3RlaGVhZHMtPm5leHQpCisJCQlkaWUoXygiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIpKTsKKwkJcmVhZF9lbXB0eShyZW1vdGVfaGVhZC0+b2JqZWN0LnNoYTEsIDApOworCQl1cGRhdGVfcmVmKCJpbml0aWFsIHB1bGwiLCAiSEVBRCIsIHJlbW90ZV9oZWFkLT5vYmplY3Quc2hhMSwKKwkJCSAgIE5VTEwsIDAsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyoKKwkgKiBUaGlzIGNvdWxkIGJlIHRyYWRpdGlvbmFsICJtZXJnZSA8bXNnPiBIRUFEIDxjb21taXQ+Li4uIiAgYW5kCisJICogdGhlIHdheSB3ZSBjYW4gdGVsbCBpdCBpcyB0byBzZWUgaWYgdGhlIHNlY29uZCB0b2tlbiBpcyBIRUFELAorCSAqIGJ1dCBzb21lIHBlb3BsZSBtaWdodCBoYXZlIG1pc3VzZWQgdGhlIGludGVyZmFjZSBhbmQgdXNlZCBhCisJICogY29tbWl0LWlzaCB0aGF0IGlzIHRoZSBzYW1lIGFzIEhFQUQgdGhlcmUgaW5zdGVhZC4KKwkgKiBUcmFkaXRpb25hbCBmb3JtYXQgbmV2ZXIgd291bGQgaGF2ZSAiLW0iIHNvIGl0IGlzIGFuCisJICogYWRkaXRpb25hbCBzYWZldHkgbWVhc3VyZSB0byBjaGVjayBmb3IgaXQuCisJICovCisJaWYgKCFoYXZlX21lc3NhZ2UgJiYKKwkgICAgaXNfb2xkX3N0eWxlX2ludm9jYXRpb24oYXJnYywgYXJndiwgaGVhZF9jb21taXQtPm9iamVjdC5zaGExKSkgeworCQl3YXJuaW5nKCJvbGQtc3R5bGUgJ2dpdCBtZXJnZSA8bXNnPiBIRUFEIDxjb21taXQ+JyBpcyBkZXByZWNhdGVkLiIpOworCQlzdHJidWZfYWRkc3RyKCZtZXJnZV9tc2csIGFyZ3ZbMF0pOworCQloZWFkX2FyZyA9IGFyZ3ZbMV07CisJCWFyZ3YgKz0gMjsKKwkJYXJnYyAtPSAyOworCQlyZW1vdGVoZWFkcyA9IGNvbGxlY3RfcGFyZW50cyhoZWFkX2NvbW1pdCwgJmhlYWRfc3Vic3VtZWQsCisJCQkJCSAgICAgIGFyZ2MsIGFyZ3YsIE5VTEwpOworCX0gZWxzZSB7CisJCS8qIFdlIGFyZSBpbnZva2VkIGRpcmVjdGx5IGFzIHRoZSBmaXJzdC1jbGFzcyBVSS4gKi8KKwkJaGVhZF9hcmcgPSAiSEVBRCI7CisKKwkJLyoKKwkJICogQWxsIHRoZSByZXN0IGFyZSB0aGUgY29tbWl0cyBiZWluZyBtZXJnZWQ7IHByZXBhcmUKKwkJICogdGhlIHN0YW5kYXJkIG1lcmdlIHN1bW1hcnkgbWVzc2FnZSB0byBiZSBhcHBlbmRlZAorCQkgKiB0byB0aGUgZ2l2ZW4gbWVzc2FnZS4KKwkJICovCisJCXJlbW90ZWhlYWRzID0gY29sbGVjdF9wYXJlbnRzKGhlYWRfY29tbWl0LCAmaGVhZF9zdWJzdW1lZCwKKwkJCQkJICAgICAgYXJnYywgYXJndiwgJm1lcmdlX21zZyk7CisJfQorCisJaWYgKCFoZWFkX2NvbW1pdCB8fCAhYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fbWVyZ2VfdXNhZ2UsCisJCQlidWlsdGluX21lcmdlX29wdGlvbnMpOworCisJaWYgKHZlcmlmeV9zaWduYXR1cmVzKSB7CisJCWZvciAocCA9IHJlbW90ZWhlYWRzOyBwOyBwID0gcC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcC0+aXRlbTsKKwkJCWNoYXIgaGV4W0dJVF9TSEExX0hFWFNaICsgMV07CisJCQlzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrIHNpZ25hdHVyZV9jaGVjazsKKwkJCW1lbXNldCgmc2lnbmF0dXJlX2NoZWNrLCAwLCBzaXplb2Yoc2lnbmF0dXJlX2NoZWNrKSk7CisKKwkJCWNoZWNrX2NvbW1pdF9zaWduYXR1cmUoY29tbWl0LCAmc2lnbmF0dXJlX2NoZWNrKTsKKworCQkJZmluZF91bmlxdWVfYWJicmV2X3IoaGV4LCBjb21taXQtPm9iamVjdC5zaGExLCBERUZBVUxUX0FCQlJFVik7CisJCQlzd2l0Y2ggKHNpZ25hdHVyZV9jaGVjay5yZXN1bHQpIHsKKwkJCWNhc2UgJ0cnOgorCQkJCWJyZWFrOworCQkJY2FzZSAnVSc6CisJCQkJZGllKF8oIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsICIKKwkJCQkgICAgICAiYWxsZWdlZGx5IGJ5ICVzLiIpLCBoZXgsIHNpZ25hdHVyZV9jaGVjay5zaWduZXIpOworCQkJY2FzZSAnQic6CisJCQkJZGllKF8oIkNvbW1pdCAlcyBoYXMgYSBiYWQgR1BHIHNpZ25hdHVyZSAiCisJCQkJICAgICAgImFsbGVnZWRseSBieSAlcy4iKSwgaGV4LCBzaWduYXR1cmVfY2hlY2suc2lnbmVyKTsKKwkJCWRlZmF1bHQ6IC8qICdOJyAqLworCQkJCWRpZShfKCJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIiksIGhleCk7CisJCQl9CisJCQlpZiAodmVyYm9zaXR5ID49IDAgJiYgc2lnbmF0dXJlX2NoZWNrLnJlc3VsdCA9PSAnRycpCisJCQkJcHJpbnRmKF8oIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIpLAorCQkJCSAgICAgICBoZXgsIHNpZ25hdHVyZV9jaGVjay5zaWduZXIpOworCisJCQlzaWduYXR1cmVfY2hlY2tfY2xlYXIoJnNpZ25hdHVyZV9jaGVjayk7CisJCX0KKwl9CisKKwlzdHJidWZfYWRkc3RyKCZidWYsICJtZXJnZSIpOworCWZvciAocCA9IHJlbW90ZWhlYWRzOyBwOyBwID0gcC0+bmV4dCkKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiAlcyIsIG1lcmdlX3JlbW90ZV91dGlsKHAtPml0ZW0pLT5uYW1lKTsKKwlzZXRlbnYoIkdJVF9SRUZMT0dfQUNUSU9OIiwgYnVmLmJ1ZiwgMCk7CisJc3RyYnVmX3Jlc2V0KCZidWYpOworCisJZm9yIChwID0gcmVtb3RlaGVhZHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJHSVRIRUFEXyVzIiwKKwkJCSAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCXNldGVudihidWYuYnVmLCBtZXJnZV9yZW1vdGVfdXRpbChjb21taXQpLT5uYW1lLCAxKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlpZiAoZmFzdF9mb3J3YXJkICE9IEZGX09OTFkgJiYKKwkJICAgIG1lcmdlX3JlbW90ZV91dGlsKGNvbW1pdCkgJiYKKwkJICAgIG1lcmdlX3JlbW90ZV91dGlsKGNvbW1pdCktPm9iaiAmJgorCQkgICAgbWVyZ2VfcmVtb3RlX3V0aWwoY29tbWl0KS0+b2JqLT50eXBlID09IE9CSl9UQUcpCisJCQlmYXN0X2ZvcndhcmQgPSBGRl9OTzsKKwl9CisKKwlpZiAob3B0aW9uX2VkaXQgPCAwKQorCQlvcHRpb25fZWRpdCA9IGRlZmF1bHRfZWRpdF9vcHRpb24oKTsKKworCWlmICghdXNlX3N0cmF0ZWdpZXMpIHsKKwkJaWYgKCFyZW1vdGVoZWFkcykKKwkJCTsgLyogYWxyZWFkeSB1cC10by1kYXRlICovCisJCWVsc2UgaWYgKCFyZW1vdGVoZWFkcy0+bmV4dCkKKwkJCWFkZF9zdHJhdGVnaWVzKHB1bGxfdHdvaGVhZCwgREVGQVVMVF9UV09IRUFEKTsKKwkJZWxzZQorCQkJYWRkX3N0cmF0ZWdpZXMocHVsbF9vY3RvcHVzLCBERUZBVUxUX09DVE9QVVMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB1c2Vfc3RyYXRlZ2llc19ucjsgaSsrKSB7CisJCWlmICh1c2Vfc3RyYXRlZ2llc1tpXS0+YXR0ciAmIE5PX0ZBU1RfRk9SV0FSRCkKKwkJCWZhc3RfZm9yd2FyZCA9IEZGX05POworCQlpZiAodXNlX3N0cmF0ZWdpZXNbaV0tPmF0dHIgJiBOT19UUklWSUFMKQorCQkJYWxsb3dfdHJpdmlhbCA9IDA7CisJfQorCisJaWYgKCFyZW1vdGVoZWFkcykKKwkJOyAvKiBhbHJlYWR5IHVwLXRvLWRhdGUgKi8KKwllbHNlIGlmICghcmVtb3RlaGVhZHMtPm5leHQpCisJCWNvbW1vbiA9IGdldF9tZXJnZV9iYXNlcyhoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMtPml0ZW0pOworCWVsc2UgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSByZW1vdGVoZWFkczsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGhlYWRfY29tbWl0LCAmbGlzdCk7CisJCWNvbW1vbiA9IGdldF9vY3RvcHVzX21lcmdlX2Jhc2VzKGxpc3QpOworCQlmcmVlKGxpc3QpOworCX0KKworCXVwZGF0ZV9yZWYoInVwZGF0aW5nIE9SSUdfSEVBRCIsICJPUklHX0hFQUQiLCBoZWFkX2NvbW1pdC0+b2JqZWN0LnNoYTEsCisJCSAgIE5VTEwsIDAsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCisJaWYgKHJlbW90ZWhlYWRzICYmICFjb21tb24pCisJCTsgLyogTm8gY29tbW9uIGFuY2VzdG9ycyBmb3VuZC4gV2UgbmVlZCBhIHJlYWwgbWVyZ2UuICovCisJZWxzZSBpZiAoIXJlbW90ZWhlYWRzIHx8CisJCSAoIXJlbW90ZWhlYWRzLT5uZXh0ICYmICFjb21tb24tPm5leHQgJiYKKwkJICBjb21tb24tPml0ZW0gPT0gcmVtb3RlaGVhZHMtPml0ZW0pKSB7CisJCS8qCisJCSAqIElmIGhlYWQgY2FuIHJlYWNoIGFsbCB0aGUgbWVyZ2UgdGhlbiB3ZSBhcmUgdXAgdG8gZGF0ZS4KKwkJICogYnV0IGZpcnN0IHRoZSBtb3N0IGNvbW1vbiBjYXNlIG9mIG1lcmdpbmcgb25lIHJlbW90ZS4KKwkJICovCisJCWZpbmlzaF91cF90b19kYXRlKCJBbHJlYWR5IHVwLXRvLWRhdGUuIik7CisJCWdvdG8gZG9uZTsKKwl9IGVsc2UgaWYgKGZhc3RfZm9yd2FyZCAhPSBGRl9OTyAmJiAhcmVtb3RlaGVhZHMtPm5leHQgJiYKKwkJCSFjb21tb24tPm5leHQgJiYKKwkJCSFoYXNoY21wKGNvbW1vbi0+aXRlbS0+b2JqZWN0LnNoYTEsIGhlYWRfY29tbWl0LT5vYmplY3Quc2hhMSkpIHsKKwkJLyogQWdhaW4gdGhlIG1vc3QgY29tbW9uIGNhc2Ugb2YgbWVyZ2luZyBvbmUgcmVtb3RlLiAqLworCQlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwkJaWYgKHZlcmJvc2l0eSA+PSAwKSB7CisJCQljaGFyIGZyb21bR0lUX1NIQTFfSEVYU1ogKyAxXSwgdG9bR0lUX1NIQTFfSEVYU1ogKyAxXTsKKwkJCWZpbmRfdW5pcXVlX2FiYnJldl9yKGZyb20sIGhlYWRfY29tbWl0LT5vYmplY3Quc2hhMSwKKwkJCQkJICAgICAgREVGQVVMVF9BQkJSRVYpOworCQkJZmluZF91bmlxdWVfYWJicmV2X3IodG8sIHJlbW90ZWhlYWRzLT5pdGVtLT5vYmplY3Quc2hhMSwKKwkJCQkJICAgICAgREVGQVVMVF9BQkJSRVYpOworCQkJcHJpbnRmKF8oIlVwZGF0aW5nICVzLi4lc1xuIiksIGZyb20sIHRvKTsKKwkJfQorCQlzdHJidWZfYWRkc3RyKCZtc2csICJGYXN0LWZvcndhcmQiKTsKKwkJaWYgKGhhdmVfbWVzc2FnZSkKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZywKKwkJCQkiIChubyBjb21taXQgY3JlYXRlZDsgLW0gb3B0aW9uIGlnbm9yZWQpIik7CisJCWNvbW1pdCA9IHJlbW90ZWhlYWRzLT5pdGVtOworCQlpZiAoIWNvbW1pdCkgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWlmIChjaGVja291dF9mYXN0X2ZvcndhcmQoaGVhZF9jb21taXQtPm9iamVjdC5zaGExLAorCQkJCQkgIGNvbW1pdC0+b2JqZWN0LnNoYTEsCisJCQkJCSAgb3ZlcndyaXRlX2lnbm9yZSkpIHsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlmaW5pc2goaGVhZF9jb21taXQsIHJlbW90ZWhlYWRzLCBjb21taXQtPm9iamVjdC5zaGExLCBtc2cuYnVmKTsKKwkJZHJvcF9zYXZlKCk7CisJCWdvdG8gZG9uZTsKKwl9IGVsc2UgaWYgKCFyZW1vdGVoZWFkcy0+bmV4dCAmJiBjb21tb24tPm5leHQpCisJCTsKKwkJLyoKKwkJICogV2UgYXJlIG5vdCBkb2luZyBvY3RvcHVzIGFuZCBub3QgZmFzdC1mb3J3YXJkLiAgTmVlZAorCQkgKiBhIHJlYWwgbWVyZ2UuCisJCSAqLworCWVsc2UgaWYgKCFyZW1vdGVoZWFkcy0+bmV4dCAmJiAhY29tbW9uLT5uZXh0ICYmIG9wdGlvbl9jb21taXQpIHsKKwkJLyoKKwkJICogV2UgYXJlIG5vdCBkb2luZyBvY3RvcHVzLCBub3QgZmFzdC1mb3J3YXJkLCBhbmQgaGF2ZQorCQkgKiBvbmx5IG9uZSBjb21tb24uCisJCSAqLworCQlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworCQlpZiAoYWxsb3dfdHJpdmlhbCAmJiBmYXN0X2ZvcndhcmQgIT0gRkZfT05MWSkgeworCQkJLyogU2VlIGlmIGl0IGlzIHJlYWxseSB0cml2aWFsLiAqLworCQkJZ2l0X2NvbW1pdHRlcl9pbmZvKElERU5UX1NUUklDVCk7CisJCQlwcmludGYoXygiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iKSk7CisJCQlpZiAoIXJlYWRfdHJlZV90cml2aWFsKGNvbW1vbi0+aXRlbS0+b2JqZWN0LnNoYTEsCisJCQkJCSAgICAgICBoZWFkX2NvbW1pdC0+b2JqZWN0LnNoYTEsCisJCQkJCSAgICAgICByZW1vdGVoZWFkcy0+aXRlbS0+b2JqZWN0LnNoYTEpKSB7CisJCQkJcmV0ID0gbWVyZ2VfdHJpdmlhbChoZWFkX2NvbW1pdCwgcmVtb3RlaGVhZHMpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXByaW50ZihfKCJOb3BlLlxuIikpOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQW4gb2N0b3B1cy4gIElmIHdlIGNhbiByZWFjaCBhbGwgdGhlIHJlbW90ZSB3ZSBhcmUgdXAKKwkJICogdG8gZGF0ZS4KKwkJICovCisJCWludCB1cF90b19kYXRlID0gMTsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpqOworCisJCWZvciAoaiA9IHJlbW90ZWhlYWRzOyBqOyBqID0gai0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpjb21tb25fb25lOworCisJCQkvKgorCQkJICogSGVyZSB3ZSAqaGF2ZSogdG8gY2FsY3VsYXRlIHRoZSBpbmRpdmlkdWFsCisJCQkgKiBtZXJnZV9iYXNlcyBhZ2Fpbiwgb3RoZXJ3aXNlICJnaXQgbWVyZ2UgSEVBRF4KKwkJCSAqIEhFQUReXiIgd291bGQgYmUgbWlzc2VkLgorCQkJICovCisJCQljb21tb25fb25lID0gZ2V0X21lcmdlX2Jhc2VzKGhlYWRfY29tbWl0LCBqLT5pdGVtKTsKKwkJCWlmIChoYXNoY21wKGNvbW1vbl9vbmUtPml0ZW0tPm9iamVjdC5zaGExLAorCQkJCWotPml0ZW0tPm9iamVjdC5zaGExKSkgeworCQkJCXVwX3RvX2RhdGUgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICh1cF90b19kYXRlKSB7CisJCQlmaW5pc2hfdXBfdG9fZGF0ZSgiQWxyZWFkeSB1cC10by1kYXRlLiBZZWVhaCEiKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCWlmIChmYXN0X2ZvcndhcmQgPT0gRkZfT05MWSkKKwkJZGllKF8oIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIpKTsKKworCS8qIFdlIGFyZSBnb2luZyB0byBtYWtlIGEgbmV3IGNvbW1pdC4gKi8KKwlnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfU1RSSUNUKTsKKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgd2UgbmVlZCBhIHJlYWwgbWVyZ2UuICBObyBtYXR0ZXIgd2hhdCBzdHJhdGVneQorCSAqIHdlIHVzZSwgaXQgd291bGQgb3BlcmF0ZSBvbiB0aGUgaW5kZXgsIHBvc3NpYmx5IGFmZmVjdGluZyB0aGUKKwkgKiB3b3JraW5nIHRyZWUsIGFuZCB3aGVuIHJlc29sdmVkIGNsZWFubHksIGhhdmUgdGhlIGRlc2lyZWQKKwkgKiB0cmVlIGluIHRoZSBpbmRleCAtLSB0aGlzIG1lYW5zIHRoYXQgdGhlIGluZGV4IG11c3QgYmUgaW4KKwkgKiBzeW5jIHdpdGggdGhlIGhlYWQgY29tbWl0LiAgVGhlIHN0cmF0ZWdpZXMgYXJlIHJlc3BvbnNpYmxlCisJICogdG8gZW5zdXJlIHRoaXMuCisJICovCisJaWYgKHVzZV9zdHJhdGVnaWVzX25yID09IDEgfHwKKwkgICAgLyoKKwkgICAgICogU3Rhc2ggYXdheSB0aGUgbG9jYWwgY2hhbmdlcyBzbyB0aGF0IHdlIGNhbiB0cnkgbW9yZSB0aGFuIG9uZS4KKwkgICAgICovCisJICAgIHNhdmVfc3RhdGUoc3Rhc2gpKQorCQloYXNoY3B5KHN0YXNoLCBudWxsX3NoYTEpOworCisJZm9yIChpID0gMDsgaSA8IHVzZV9zdHJhdGVnaWVzX25yOyBpKyspIHsKKwkJaW50IHJldDsKKwkJaWYgKGkpIHsKKwkJCXByaW50ZihfKCJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIpKTsKKwkJCXJlc3RvcmVfc3RhdGUoaGVhZF9jb21taXQtPm9iamVjdC5zaGExLCBzdGFzaCk7CisJCX0KKwkJaWYgKHVzZV9zdHJhdGVnaWVzX25yICE9IDEpCisJCQlwcmludGYoXygiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iKSwKKwkJCQl1c2Vfc3RyYXRlZ2llc1tpXS0+bmFtZSk7CisJCS8qCisJCSAqIFJlbWVtYmVyIHdoaWNoIHN0cmF0ZWd5IGxlZnQgdGhlIHN0YXRlIGluIHRoZSB3b3JraW5nCisJCSAqIHRyZWUuCisJCSAqLworCQl3dF9zdHJhdGVneSA9IHVzZV9zdHJhdGVnaWVzW2ldLT5uYW1lOworCisJCXJldCA9IHRyeV9tZXJnZV9zdHJhdGVneSh1c2Vfc3RyYXRlZ2llc1tpXS0+bmFtZSwKKwkJCQkJIGNvbW1vbiwgcmVtb3RlaGVhZHMsCisJCQkJCSBoZWFkX2NvbW1pdCwgaGVhZF9hcmcpOworCQlpZiAoIW9wdGlvbl9jb21taXQgJiYgIXJldCkgeworCQkJbWVyZ2Vfd2FzX29rID0gMTsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIG5lY2Vzc2FyeSBoZXJlIGp1c3QgdG8gYXZvaWQgd3JpdGluZworCQkJICogdGhlIHRyZWUsIGJ1dCBsYXRlciB3ZSB3aWxsICpub3QqIGV4aXQgd2l0aAorCQkJICogc3RhdHVzIGNvZGUgMSBiZWNhdXNlIG1lcmdlX3dhc19vayBpcyBzZXQuCisJCQkgKi8KKwkJCXJldCA9IDE7CisJCX0KKworCQlpZiAocmV0KSB7CisJCQkvKgorCQkJICogVGhlIGJhY2tlbmQgZXhpdHMgd2l0aCAxIHdoZW4gY29uZmxpY3RzIGFyZQorCQkJICogbGVmdCB0byBiZSByZXNvbHZlZCwgd2l0aCAyIHdoZW4gaXQgZG9lcyBub3QKKwkJCSAqIGhhbmRsZSB0aGUgZ2l2ZW4gbWVyZ2UgYXQgYWxsLgorCQkJICovCisJCQlpZiAocmV0ID09IDEpIHsKKwkJCQlpbnQgY250ID0gZXZhbHVhdGVfcmVzdWx0KCk7CisKKwkJCQlpZiAoYmVzdF9jbnQgPD0gMCB8fCBjbnQgPD0gYmVzdF9jbnQpIHsKKwkJCQkJYmVzdF9zdHJhdGVneSA9IHVzZV9zdHJhdGVnaWVzW2ldLT5uYW1lOworCQkJCQliZXN0X2NudCA9IGNudDsKKwkJCQl9CisJCQl9CisJCQlpZiAobWVyZ2Vfd2FzX29rKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQXV0b21lcmdlIHN1Y2NlZWRlZC4gKi8KKwkJd3JpdGVfdHJlZV90cml2aWFsKHJlc3VsdF90cmVlKTsKKwkJYXV0b21lcmdlX3dhc19vayA9IDE7CisJCWJyZWFrOworCX0KKworCS8qCisJICogSWYgd2UgaGF2ZSBhIHJlc3VsdGluZyB0cmVlLCB0aGF0IG1lYW5zIHRoZSBzdHJhdGVneSBtb2R1bGUKKwkgKiBhdXRvIHJlc29sdmVkIHRoZSBtZXJnZSBjbGVhbmx5LgorCSAqLworCWlmIChhdXRvbWVyZ2Vfd2FzX29rKSB7CisJCXJldCA9IGZpbmlzaF9hdXRvbWVyZ2UoaGVhZF9jb21taXQsIGhlYWRfc3Vic3VtZWQsCisJCQkJICAgICAgIGNvbW1vbiwgcmVtb3RlaGVhZHMsCisJCQkJICAgICAgIHJlc3VsdF90cmVlLCB3dF9zdHJhdGVneSk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIFBpY2sgdGhlIHJlc3VsdCBmcm9tIHRoZSBiZXN0IHN0cmF0ZWd5IGFuZCBoYXZlIHRoZSB1c2VyIGZpeAorCSAqIGl0IHVwLgorCSAqLworCWlmICghYmVzdF9zdHJhdGVneSkgeworCQlyZXN0b3JlX3N0YXRlKGhlYWRfY29tbWl0LT5vYmplY3Quc2hhMSwgc3Rhc2gpOworCQlpZiAodXNlX3N0cmF0ZWdpZXNfbnIgPiAxKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJXygiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iKSk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIpLAorCQkJCXVzZV9zdHJhdGVnaWVzWzBdLT5uYW1lKTsKKwkJcmV0ID0gMjsKKwkJZ290byBkb25lOworCX0gZWxzZSBpZiAoYmVzdF9zdHJhdGVneSA9PSB3dF9zdHJhdGVneSkKKwkJOyAvKiBXZSBhbHJlYWR5IGhhdmUgaXRzIHJlc3VsdCBpbiB0aGUgd29ya2luZyB0cmVlLiAqLworCWVsc2UgeworCQlwcmludGYoXygiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iKSk7CisJCXJlc3RvcmVfc3RhdGUoaGVhZF9jb21taXQtPm9iamVjdC5zaGExLCBzdGFzaCk7CisJCXByaW50ZihfKCJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIpLAorCQkJYmVzdF9zdHJhdGVneSk7CisJCXRyeV9tZXJnZV9zdHJhdGVneShiZXN0X3N0cmF0ZWd5LCBjb21tb24sIHJlbW90ZWhlYWRzLAorCQkJCSAgIGhlYWRfY29tbWl0LCBoZWFkX2FyZyk7CisJfQorCisJaWYgKHNxdWFzaCkKKwkJZmluaXNoKGhlYWRfY29tbWl0LCByZW1vdGVoZWFkcywgTlVMTCwgTlVMTCk7CisJZWxzZQorCQl3cml0ZV9tZXJnZV9zdGF0ZShyZW1vdGVoZWFkcyk7CisKKwlpZiAobWVyZ2Vfd2FzX29rKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgIgorCQkJInN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iKSk7CisJZWxzZQorCQlyZXQgPSBzdWdnZXN0X2NvbmZsaWN0cygpOworCitkb25lOgorCWZyZWUoYnJhbmNoX3RvX2ZyZWUpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL21rdGFnLmMgYi9idWlsdGluL21rdGFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMxYjc1MAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbWt0YWcuYwpAQCAtMCwwICsxLDE3NCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ0YWcuaCIKKworLyoKKyAqIEEgc2lnbmF0dXJlIGZpbGUgaGFzIGEgdmVyeSBzaW1wbGUgZml4ZWQgZm9ybWF0OiBmb3VyIGxpbmVzCisgKiBvZiAib2JqZWN0IDxzaGExPiIgKyAidHlwZSA8dHlwZW5hbWU+IiArICJ0YWcgPHRhZ25hbWU+IiArCisgKiAidGFnZ2VyIDxjb21taXR0ZXI+IiwgZm9sbG93ZWQgYnkgYSBibGFuayBsaW5lLCBhIGZyZWUtZm9ybSB0YWcKKyAqIG1lc3NhZ2UgYW5kIGEgc2lnbmF0dXJlIGJsb2NrIHRoYXQgZ2l0IGl0c2VsZiBkb2Vzbid0IGNhcmUgYWJvdXQsCisgKiBidXQgdGhhdCBjYW4gYmUgdmVyaWZpZWQgd2l0aCBncGcgb3Igc2ltaWxhci4KKyAqCisgKiBUaGUgZmlyc3QgZm91ciBsaW5lcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBhdCBsZWFzdCA4MyBieXRlczoKKyAqICJvYmplY3QgPHNoYTE+XG4iIGlzIDQ4IGJ5dGVzLCAidHlwZSB0YWdcbiIgYXQgOSBieXRlcyBpcyB0aGUKKyAqIHNob3J0ZXN0IHBvc3NpYmxlIHR5cGUtbGluZSwgInRhZyAuXG4iIGF0IDYgYnl0ZXMgaXMgdGhlIHNob3J0ZXN0CisgKiBzaW5nbGUtY2hhcmFjdGVyLXRhZyBsaW5lLCBhbmQgInRhZ2dlciAuIDw+IDAgKzAwMDBcbiIgYXQgMjAgYnl0ZXMgaXMKKyAqIHRoZSBzaG9ydGVzdCBwb3NzaWJsZSB0YWdnZXItbGluZS4KKyAqLworCisvKgorICogV2UgcmVmdXNlIHRvIHRhZyBzb21ldGhpbmcgd2UgY2FuJ3QgdmVyaWZ5LiBKdXN0IGJlY2F1c2UuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpleHBlY3RlZF90eXBlKQoreworCWludCByZXQgPSAtMTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXZvaWQgKmJ1ZmZlciA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcmVwbCA9IGxvb2t1cF9yZXBsYWNlX29iamVjdChzaGExKTsKKworCWlmIChidWZmZXIpIHsKKwkJaWYgKHR5cGUgPT0gdHlwZV9mcm9tX3N0cmluZyhleHBlY3RlZF90eXBlKSkKKwkJCXJldCA9IGNoZWNrX3NoYTFfc2lnbmF0dXJlKHJlcGwsIGJ1ZmZlciwgc2l6ZSwgZXhwZWN0ZWRfdHlwZSk7CisJCWZyZWUoYnVmZmVyKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfdGFnKGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCB0eXBlbGVuOworCWNoYXIgdHlwZVsyMF07CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljb25zdCBjaGFyICpvYmplY3QsICp0eXBlX2xpbmUsICp0YWdfbGluZSwgKnRhZ2dlcl9saW5lLCAqbGIsICpyYjsKKwlzaXplX3QgbGVuOworCisJaWYgKHNpemUgPCA4NCkKKwkJcmV0dXJuIGVycm9yKCJ3YW5uYSBmb29sIG1lID8geW91IG9idmlvdXNseSBnb3QgdGhlIHNpemUgd3JvbmcgISIpOworCisJYnVmZmVyW3NpemVdID0gMDsKKworCS8qIFZlcmlmeSBvYmplY3QgbGluZSAqLworCW9iamVjdCA9IGJ1ZmZlcjsKKwlpZiAobWVtY21wKG9iamVjdCwgIm9iamVjdCAiLCA3KSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJWQ6IGRvZXMgbm90IHN0YXJ0IHdpdGggXCJvYmplY3QgXCIiLCAwKTsKKworCWlmIChnZXRfc2hhMV9oZXgob2JqZWN0ICsgNywgc2hhMSkpCisJCXJldHVybiBlcnJvcigiY2hhciVkOiBjb3VsZCBub3QgZ2V0IFNIQTEgaGFzaCIsIDcpOworCisJLyogVmVyaWZ5IHR5cGUgbGluZSAqLworCXR5cGVfbGluZSA9IG9iamVjdCArIDQ4OworCWlmIChtZW1jbXAodHlwZV9saW5lIC0gMSwgIlxudHlwZSAiLCA2KSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJWQ6IGNvdWxkIG5vdCBmaW5kIFwiXFxudHlwZSBcIiIsIDQ3KTsKKworCS8qIFZlcmlmeSB0YWctbGluZSAqLworCXRhZ19saW5lID0gc3RyY2hyKHR5cGVfbGluZSwgJ1xuJyk7CisJaWYgKCF0YWdfbGluZSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogY291bGQgbm90IGZpbmQgbmV4dCBcIlxcblwiIiwKKwkJCQkodWludG1heF90KSAodHlwZV9saW5lIC0gYnVmZmVyKSk7CisJdGFnX2xpbmUrKzsKKwlpZiAobWVtY21wKHRhZ19saW5lLCAidGFnICIsIDQpIHx8IHRhZ19saW5lWzRdID09ICdcbicpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IG5vIFwidGFnIFwiIGZvdW5kIiwKKwkJCQkodWludG1heF90KSAodGFnX2xpbmUgLSBidWZmZXIpKTsKKworCS8qIEdldCB0aGUgYWN0dWFsIHR5cGUgKi8KKwl0eXBlbGVuID0gdGFnX2xpbmUgLSB0eXBlX2xpbmUgLSBzdHJsZW4oInR5cGUgXG4iKTsKKwlpZiAodHlwZWxlbiA+PSBzaXplb2YodHlwZSkpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IHR5cGUgdG9vIGxvbmciLAorCQkJCSh1aW50bWF4X3QpICh0eXBlX2xpbmUrNSAtIGJ1ZmZlcikpOworCisJbWVtY3B5KHR5cGUsIHR5cGVfbGluZSs1LCB0eXBlbGVuKTsKKwl0eXBlW3R5cGVsZW5dID0gMDsKKworCS8qIFZlcmlmeSB0aGF0IHRoZSBvYmplY3QgbWF0Y2hlcyAqLworCWlmICh2ZXJpZnlfb2JqZWN0KHNoYTEsIHR5cGUpKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlZDogY291bGQgbm90IHZlcmlmeSBvYmplY3QgJXMiLCA3LCBzaGExX3RvX2hleChzaGExKSk7CisKKwkvKiBWZXJpZnkgdGhlIHRhZy1uYW1lOiB3ZSBkb24ndCBhbGxvdyBjb250cm9sIGNoYXJhY3RlcnMgb3Igc3BhY2VzIGluIGl0ICovCisJdGFnX2xpbmUgKz0gNDsKKwlmb3IgKDs7KSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICp0YWdfbGluZSsrOworCQlpZiAoYyA9PSAnXG4nKQorCQkJYnJlYWs7CisJCWlmIChjID4gJyAnKQorCQkJY29udGludWU7CisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IGNvdWxkIG5vdCB2ZXJpZnkgdGFnIG5hbWUiLAorCQkJCSh1aW50bWF4X3QpICh0YWdfbGluZSAtIGJ1ZmZlcikpOworCX0KKworCS8qIFZlcmlmeSB0aGUgdGFnZ2VyIGxpbmUgKi8KKwl0YWdnZXJfbGluZSA9IHRhZ19saW5lOworCisJaWYgKG1lbWNtcCh0YWdnZXJfbGluZSwgInRhZ2dlciAiLCA3KSkKKwkJcmV0dXJuIGVycm9yKCJjaGFyJSJQUkl1TUFYIjogY291bGQgbm90IGZpbmQgXCJ0YWdnZXIgXCIiLAorCQkJKHVpbnRtYXhfdCkgKHRhZ2dlcl9saW5lIC0gYnVmZmVyKSk7CisKKwkvKgorCSAqIENoZWNrIGZvciBjb3JyZWN0IGZvcm0gZm9yIG5hbWUgYW5kIGVtYWlsCisJICogaS5lLiAiIDwiIGZvbGxvd2VkIGJ5ICI+ICIgb24gX3RoaXNfIGxpbmUKKwkgKiBObyBhbmdsZSBicmFja2V0cyB3aXRoaW4gdGhlIG5hbWUgb3IgZW1haWwgYWRkcmVzcyBmaWVsZHMuCisJICogTm8gc3BhY2VzIHdpdGhpbiB0aGUgZW1haWwgYWRkcmVzcyBmaWVsZC4KKwkgKi8KKwl0YWdnZXJfbGluZSArPSA3OworCWlmICghKGxiID0gc3Ryc3RyKHRhZ2dlcl9saW5lLCAiIDwiKSkgfHwgIShyYiA9IHN0cnN0cihsYisyLCAiPiAiKSkgfHwKKwkJc3RycGJyayh0YWdnZXJfbGluZSwgIjw+XG4iKSAhPSBsYisxIHx8CisJCXN0cnBicmsobGIrMiwgIj48XG4gIikgIT0gcmIpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IG1hbGZvcm1lZCB0YWdnZXIgZmllbGQiLAorCQkJKHVpbnRtYXhfdCkgKHRhZ2dlcl9saW5lIC0gYnVmZmVyKSk7CisKKwkvKiBDaGVjayBmb3IgYXV0aG9yIG5hbWUsIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIHNwYWNlIGlzIGFjY2VwdGFibGUgKi8KKwlpZiAobGIgPT0gdGFnZ2VyX2xpbmUpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IG1pc3NpbmcgdGFnZ2VyIG5hbWUiLAorCQkJKHVpbnRtYXhfdCkgKHRhZ2dlcl9saW5lIC0gYnVmZmVyKSk7CisKKwkvKiB0aW1lc3RhbXAsIDEgb3IgbW9yZSBkaWdpdHMgZm9sbG93ZWQgYnkgc3BhY2UgKi8KKwl0YWdnZXJfbGluZSA9IHJiICsgMjsKKwlpZiAoIShsZW4gPSBzdHJzcG4odGFnZ2VyX2xpbmUsICIwMTIzNDU2Nzg5IikpKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiBtaXNzaW5nIHRhZyB0aW1lc3RhbXAiLAorCQkJKHVpbnRtYXhfdCkgKHRhZ2dlcl9saW5lIC0gYnVmZmVyKSk7CisJdGFnZ2VyX2xpbmUgKz0gbGVuOworCWlmICgqdGFnZ2VyX2xpbmUgIT0gJyAnKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiBtYWxmb3JtZWQgdGFnIHRpbWVzdGFtcCIsCisJCQkodWludG1heF90KSAodGFnZ2VyX2xpbmUgLSBidWZmZXIpKTsKKwl0YWdnZXJfbGluZSsrOworCisJLyogdGltZXpvbmUsIDUgZGlnaXRzIFsrLV1oaG1tLCBtYXguIDE0MDAgKi8KKwlpZiAoISgodGFnZ2VyX2xpbmVbMF0gPT0gJysnIHx8IHRhZ2dlcl9saW5lWzBdID09ICctJykgJiYKKwkgICAgICBzdHJzcG4odGFnZ2VyX2xpbmUrMSwgIjAxMjM0NTY3ODkiKSA9PSA0ICYmCisJICAgICAgdGFnZ2VyX2xpbmVbNV0gPT0gJ1xuJyAmJiBhdG9pKHRhZ2dlcl9saW5lKzEpIDw9IDE0MDApKQorCQlyZXR1cm4gZXJyb3IoImNoYXIlIlBSSXVNQVgiOiBtYWxmb3JtZWQgdGFnIHRpbWV6b25lIiwKKwkJCSh1aW50bWF4X3QpICh0YWdnZXJfbGluZSAtIGJ1ZmZlcikpOworCXRhZ2dlcl9saW5lICs9IDY7CisKKwkvKiBWZXJpZnkgdGhlIGJsYW5rIGxpbmUgc2VwYXJhdGluZyB0aGUgaGVhZGVyIGZyb20gdGhlIGJvZHkgKi8KKwlpZiAoKnRhZ2dlcl9saW5lICE9ICdcbicpCisJCXJldHVybiBlcnJvcigiY2hhciUiUFJJdU1BWCI6IHRyYWlsaW5nIGdhcmJhZ2UgaW4gdGFnIGhlYWRlciIsCisJCQkodWludG1heF90KSAodGFnZ2VyX2xpbmUgLSBidWZmZXIpKTsKKworCS8qIFRoZSBhY3R1YWwgc3R1ZmYgYWZ0ZXJ3YXJkcyB3ZSBkb24ndCBjYXJlIGFib3V0Li4gKi8KKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9ta3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGNoYXIgcmVzdWx0X3NoYTFbMjBdOworCisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2UoImdpdCBta3RhZyIpOworCisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDQwOTYpIDwgMCkgeworCQlkaWVfZXJybm8oImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iKTsKKwl9CisKKwkvKiBWZXJpZnkgaXQgZm9yIHNvbWUgYmFzaWMgc2FuaXR5OiBpdCBuZWVkcyB0byBzdGFydCB3aXRoCisJICAgIm9iamVjdCA8c2hhMT5cbnR5cGVcbnRhZ2dlciAiICovCisJaWYgKHZlcmlmeV90YWcoYnVmLmJ1ZiwgYnVmLmxlbikgPCAwKQorCQlkaWUoImludmFsaWQgdGFnIHNpZ25hdHVyZSBmaWxlIik7CisKKwlpZiAod3JpdGVfc2hhMV9maWxlKGJ1Zi5idWYsIGJ1Zi5sZW4sIHRhZ190eXBlLCByZXN1bHRfc2hhMSkgPCAwKQorCQlkaWUoInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIpOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcHJpbnRmKCIlc1xuIiwgc2hhMV90b19oZXgocmVzdWx0X3NoYTEpKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbWt0cmVlLmMgYi9idWlsdGluL21rdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NjRkNmIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL21rdHJlZS5jCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogR0lUIC0gdGhlIHN0dXBpZCBjb250ZW50IHRyYWNrZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIEp1bmlvIEMgSGFtYW5vLCAyMDA2LCAyMDA5CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgc3RydWN0IHRyZWVlbnQgeworCXVuc2lnbmVkIG1vZGU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgbGVuOworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsKK30gKiplbnRyaWVzOworc3RhdGljIGludCBhbGxvYywgdXNlZDsKKworc3RhdGljIHZvaWQgYXBwZW5kX3RvX3RyZWUodW5zaWduZWQgbW9kZSwgdW5zaWduZWQgY2hhciAqc2hhMSwgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgdHJlZWVudCAqZW50OworCWludCBsZW4gPSBzdHJsZW4ocGF0aCk7CisJaWYgKHN0cmNocihwYXRoLCAnLycpKQorCQlkaWUoInBhdGggJXMgY29udGFpbnMgc2xhc2giLCBwYXRoKTsKKworCUFMTE9DX0dST1coZW50cmllcywgdXNlZCArIDEsIGFsbG9jKTsKKwllbnQgPSBlbnRyaWVzW3VzZWQrK10gPSB4bWFsbG9jKHNpemVvZigqKmVudHJpZXMpICsgbGVuICsgMSk7CisJZW50LT5tb2RlID0gbW9kZTsKKwllbnQtPmxlbiA9IGxlbjsKKwloYXNoY3B5KGVudC0+c2hhMSwgc2hhMSk7CisJbWVtY3B5KGVudC0+bmFtZSwgcGF0aCwgbGVuKzEpOworfQorCitzdGF0aWMgaW50IGVudF9jb21wYXJlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwlzdHJ1Y3QgdHJlZWVudCAqYSA9ICooc3RydWN0IHRyZWVlbnQgKiopYV87CisJc3RydWN0IHRyZWVlbnQgKmIgPSAqKHN0cnVjdCB0cmVlZW50ICoqKWJfOworCXJldHVybiBiYXNlX25hbWVfY29tcGFyZShhLT5uYW1lLCBhLT5sZW4sIGEtPm1vZGUsCisJCQkJIGItPm5hbWUsIGItPmxlbiwgYi0+bW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3RyZWUodW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKKwlzaXplX3Qgc2l6ZTsKKwlpbnQgaTsKKworCXFzb3J0KGVudHJpZXMsIHVzZWQsIHNpemVvZigqZW50cmllcyksIGVudF9jb21wYXJlKTsKKwlmb3IgKHNpemUgPSBpID0gMDsgaSA8IHVzZWQ7IGkrKykKKwkJc2l6ZSArPSAzMiArIGVudHJpZXNbaV0tPmxlbjsKKworCXN0cmJ1Zl9pbml0KCZidWYsIHNpemUpOworCWZvciAoaSA9IDA7IGkgPCB1c2VkOyBpKyspIHsKKwkJc3RydWN0IHRyZWVlbnQgKmVudCA9IGVudHJpZXNbaV07CisJCXN0cmJ1Zl9hZGRmKCZidWYsICIlbyAlcyVjIiwgZW50LT5tb2RlLCBlbnQtPm5hbWUsICdcMCcpOworCQlzdHJidWZfYWRkKCZidWYsIGVudC0+c2hhMSwgMjApOworCX0KKworCXdyaXRlX3NoYTFfZmlsZShidWYuYnVmLCBidWYubGVuLCB0cmVlX3R5cGUsIHNoYTEpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbWt0cmVlX3VzYWdlW10gPSB7CisJTl8oImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgdm9pZCBta3RyZWVfbGluZShjaGFyICpidWYsIHNpemVfdCBsZW4sIGludCBsaW5lX3Rlcm1pbmF0aW9uLCBpbnQgYWxsb3dfbWlzc2luZykKK3sKKwljaGFyICpwdHIsICpudHI7CisJdW5zaWduZWQgbW9kZTsKKwllbnVtIG9iamVjdF90eXBlIG1vZGVfdHlwZTsgLyogb2JqZWN0IHR5cGUgZGVyaXZlZCBmcm9tIG1vZGUgKi8KKwllbnVtIG9iamVjdF90eXBlIG9ial90eXBlOyAvKiBvYmplY3QgdHlwZSBkZXJpdmVkIGZyb20gc2hhICovCisJY2hhciAqcGF0aDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJcHRyID0gYnVmOworCS8qCisJICogUmVhZCBub24tcmVjdXJzaXZlIGxzLXRyZWUgb3V0cHV0IGZvcm1hdDoKKwkgKiAgICAgbW9kZSBTUCB0eXBlIFNQIHNoYTEgVEFCIG5hbWUKKwkgKi8KKwltb2RlID0gc3RydG91bChwdHIsICZudHIsIDgpOworCWlmIChwdHIgPT0gbnRyIHx8ICFudHIgfHwgKm50ciAhPSAnICcpCisJCWRpZSgiaW5wdXQgZm9ybWF0IGVycm9yOiAlcyIsIGJ1Zik7CisJcHRyID0gbnRyICsgMTsgLyogdHlwZSAqLworCW50ciA9IHN0cmNocihwdHIsICcgJyk7CisJaWYgKCFudHIgfHwgYnVmICsgbGVuIDw9IG50ciArIDQwIHx8CisJICAgIG50cls0MV0gIT0gJ1x0JyB8fAorCSAgICBnZXRfc2hhMV9oZXgobnRyICsgMSwgc2hhMSkpCisJCWRpZSgiaW5wdXQgZm9ybWF0IGVycm9yOiAlcyIsIGJ1Zik7CisKKwkvKiBJdCBpcyBwZXJmZWN0bHkgbm9ybWFsIGlmIHdlIGRvIG5vdCBoYXZlIGEgY29tbWl0IGZyb20gYSBzdWJtb2R1bGUgKi8KKwlpZiAoU19JU0dJVExJTksobW9kZSkpCisJCWFsbG93X21pc3NpbmcgPSAxOworCisKKwkqbnRyKysgPSAwOyAvKiBub3cgYXQgdGhlIGJlZ2lubmluZyBvZiBTSEExICovCisKKwlwYXRoID0gbnRyICsgNDE7ICAvKiBhdCB0aGUgYmVnaW5uaW5nIG9mIG5hbWUgKi8KKwlpZiAobGluZV90ZXJtaW5hdGlvbiAmJiBwYXRoWzBdID09ICciJykgeworCQlzdHJ1Y3Qgc3RyYnVmIHBfdXEgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKHVucXVvdGVfY19zdHlsZSgmcF91cSwgcGF0aCwgTlVMTCkpCisJCQlkaWUoImludmFsaWQgcXVvdGluZyIpOworCQlwYXRoID0gc3RyYnVmX2RldGFjaCgmcF91cSwgTlVMTCk7CisJfQorCisJLyoKKwkgKiBPYmplY3QgdHlwZSBpcyByZWR1bmRhbnRseSBkZXJpdmFibGUgdGhyZWUgd2F5cy4KKwkgKiBUaGVzZSBzaG91bGQgYWxsIGFncmVlLgorCSAqLworCW1vZGVfdHlwZSA9IG9iamVjdF90eXBlKG1vZGUpOworCWlmIChtb2RlX3R5cGUgIT0gdHlwZV9mcm9tX3N0cmluZyhwdHIpKSB7CisJCWRpZSgiZW50cnkgJyVzJyBvYmplY3QgdHlwZSAoJXMpIGRvZXNuJ3QgbWF0Y2ggbW9kZSB0eXBlICglcykiLAorCQkJcGF0aCwgcHRyLCB0eXBlbmFtZShtb2RlX3R5cGUpKTsKKwl9CisKKwkvKiBDaGVjayB0aGUgdHlwZSBvZiBvYmplY3QgaWRlbnRpZmllZCBieSBzaGExICovCisJb2JqX3R5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOworCWlmIChvYmpfdHlwZSA8IDApIHsKKwkJaWYgKGFsbG93X21pc3NpbmcpIHsKKwkJCTsgLyogbm8gcHJvYmxlbSAtIG1pc3Npbmcgb2JqZWN0cyBhcmUgcHJlc3VtZWQgdG8gYmUgb2YgdGhlIHJpZ2h0IHR5cGUgKi8KKwkJfSBlbHNlIHsKKwkJCWRpZSgiZW50cnkgJyVzJyBvYmplY3QgJXMgaXMgdW5hdmFpbGFibGUiLCBwYXRoLCBzaGExX3RvX2hleChzaGExKSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAob2JqX3R5cGUgIT0gbW9kZV90eXBlKSB7CisJCQkvKgorCQkJICogVGhlIG9iamVjdCBleGlzdHMgYnV0IGlzIG9mIHRoZSB3cm9uZyB0eXBlLgorCQkJICogVGhpcyBpcyBhIHByb2JsZW0gcmVnYXJkbGVzcyBvZiBhbGxvd19taXNzaW5nCisJCQkgKiBiZWNhdXNlIHRoZSBuZXcgdHJlZSBlbnRyeSB3aWxsIG5ldmVyIGJlIGNvcnJlY3QuCisJCQkgKi8KKwkJCWRpZSgiZW50cnkgJyVzJyBvYmplY3QgJXMgaXMgYSAlcyBidXQgc3BlY2lmaWVkIHR5cGUgd2FzICglcykiLAorCQkJCXBhdGgsIHNoYTFfdG9faGV4KHNoYTEpLCB0eXBlbmFtZShvYmpfdHlwZSksIHR5cGVuYW1lKG1vZGVfdHlwZSkpOworCQl9CisJfQorCisJYXBwZW5kX3RvX3RyZWUobW9kZSwgc2hhMSwgcGF0aCk7Cit9CisKK2ludCBjbWRfbWt0cmVlKGludCBhYywgY29uc3QgY2hhciAqKmF2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IGxpbmVfdGVybWluYXRpb24gPSAnXG4nOworCWludCBhbGxvd19taXNzaW5nID0gMDsKKwlpbnQgaXNfYmF0Y2hfbW9kZSA9IDA7CisJaW50IGdvdF9lb2YgPSAwOworCisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25bXSA9IHsKKwkJT1BUX1NFVF9JTlQoJ3onLCBOVUxMLCAmbGluZV90ZXJtaW5hdGlvbiwgTl8oImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIiksICdcMCcpLAorCQlPUFRfU0VUX0lOVCggMCAsICJtaXNzaW5nIiwgJmFsbG93X21pc3NpbmcsIE5fKCJhbGxvdyBtaXNzaW5nIG9iamVjdHMiKSwgMSksCisJCU9QVF9TRVRfSU5UKCAwICwgImJhdGNoIiwgJmlzX2JhdGNoX21vZGUsIE5fKCJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiKSwgMSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIG9wdGlvbiwgbWt0cmVlX3VzYWdlLCAwKTsKKworCXdoaWxlICghZ290X2VvZikgeworCQl3aGlsZSAoMSkgeworCQkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZzYiwgc3RkaW4sIGxpbmVfdGVybWluYXRpb24pID09IEVPRikgeworCQkJCWdvdF9lb2YgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHNiLmJ1ZlswXSA9PSAnXDAnKSB7CisJCQkJLyogZW1wdHkgbGluZXMgZGVub3RlIHRyZWUgYm91bmRhcmllcyBpbiBiYXRjaCBtb2RlICovCisJCQkJaWYgKGlzX2JhdGNoX21vZGUpCisJCQkJCWJyZWFrOworCQkJCWRpZSgiaW5wdXQgZm9ybWF0IGVycm9yOiAoYmxhbmsgbGluZSBvbmx5IHZhbGlkIGluIGJhdGNoIG1vZGUpIik7CisJCQl9CisJCQlta3RyZWVfbGluZShzYi5idWYsIHNiLmxlbiwgbGluZV90ZXJtaW5hdGlvbiwgYWxsb3dfbWlzc2luZyk7CisJCX0KKwkJaWYgKGlzX2JhdGNoX21vZGUgJiYgZ290X2VvZiAmJiB1c2VkIDwgMSkgeworCQkJLyoKKwkJCSAqIEV4ZWN1dGlvbiBnZXRzIGhlcmUgaWYgdGhlIGxhc3QgdHJlZSBlbnRyeSBpcyB0ZXJtaW5hdGVkIHdpdGggYQorCQkJICogbmV3LWxpbmUuICBUaGUgZmluYWwgbmV3LWxpbmUgaGFzIGJlZW4gbWFkZSBvcHRpb25hbCB0byBiZQorCQkJICogY29uc2lzdGVudCB3aXRoIHRoZSBvcmlnaW5hbCBub24tYmF0Y2ggYmVoYXZpb3VyIG9mIG1rdHJlZS4KKwkJCSAqLworCQkJOyAvKiBza2lwIGNyZWF0aW5nIGFuIGVtcHR5IHRyZWUgKi8KKwkJfSBlbHNlIHsKKwkJCXdyaXRlX3RyZWUoc2hhMSk7CisJCQlwdXRzKHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCWZmbHVzaChzdGRvdXQpOworCQl9CisJCXVzZWQ9MDsgLyogcmVzZXQgdHJlZSBlbnRyeSBidWZmZXIgZm9yIHJlLXVzZSBpbiBiYXRjaCBtb2RlICovCisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbXYuYyBiL2J1aWx0aW4vbXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWQ0MzE2Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9tdi5jCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogImdpdCBtdiIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEpvaGFubmVzIFNjaGluZGVsaW4KKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX212X3VzYWdlW10gPSB7CisJTl8oImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IiksCisJTlVMTAorfTsKKworI2RlZmluZSBEVVBfQkFTRU5BTUUgMQorI2RlZmluZSBLRUVQX1RSQUlMSU5HX1NMQVNIIDIKKworc3RhdGljIGNvbnN0IGNoYXIgKippbnRlcm5hbF9jb3B5X3BhdGhzcGVjKGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJICAgY29uc3QgY2hhciAqKnBhdGhzcGVjLAorCQkJCQkgICBpbnQgY291bnQsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCBpOworCWNvbnN0IGNoYXIgKipyZXN1bHQgPSB4bWFsbG9jKChjb3VudCArIDEpICogc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworCW1lbWNweShyZXN1bHQsIHBhdGhzcGVjLCBjb3VudCAqIHNpemVvZihjb25zdCBjaGFyICopKTsKKwlyZXN1bHRbY291bnRdID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpbnQgbGVuZ3RoID0gc3RybGVuKHJlc3VsdFtpXSk7CisJCWludCB0b19jb3B5ID0gbGVuZ3RoOworCQl3aGlsZSAoIShmbGFncyAmIEtFRVBfVFJBSUxJTkdfU0xBU0gpICYmCisJCSAgICAgICB0b19jb3B5ID4gMCAmJiBpc19kaXJfc2VwKHJlc3VsdFtpXVt0b19jb3B5IC0gMV0pKQorCQkJdG9fY29weS0tOworCQlpZiAodG9fY29weSAhPSBsZW5ndGggfHwgZmxhZ3MgJiBEVVBfQkFTRU5BTUUpIHsKKwkJCWNoYXIgKml0ID0geG1lbWR1cHoocmVzdWx0W2ldLCB0b19jb3B5KTsKKwkJCWlmIChmbGFncyAmIERVUF9CQVNFTkFNRSkgeworCQkJCXJlc3VsdFtpXSA9IHhzdHJkdXAoYmFzZW5hbWUoaXQpKTsKKwkJCQlmcmVlKGl0KTsKKwkJCX0gZWxzZQorCQkJCXJlc3VsdFtpXSA9IGl0OworCQl9CisJfQorCXJldHVybiBnZXRfcGF0aHNwZWMocHJlZml4LCByZXN1bHQpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYWRkX3NsYXNoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGxlbiA9IHN0cmxlbihwYXRoKTsKKwlpZiAocGF0aFtsZW4gLSAxXSAhPSAnLycpIHsKKwkJY2hhciAqd2l0aF9zbGFzaCA9IHhtYWxsb2MobGVuICsgMik7CisJCW1lbWNweSh3aXRoX3NsYXNoLCBwYXRoLCBsZW4pOworCQl3aXRoX3NsYXNoW2xlbisrXSA9ICcvJzsKKwkJd2l0aF9zbGFzaFtsZW5dID0gMDsKKwkJcmV0dXJuIHdpdGhfc2xhc2g7CisJfQorCXJldHVybiBwYXRoOworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGU7CisjZGVmaW5lIFNVQk1PRFVMRV9XSVRIX0dJVERJUiAoKGNvbnN0IGNoYXIgKikxKQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX21vdmVfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnNyYywgaW50IGZpcnN0LAorCQkJCSAgIGNvbnN0IGNoYXIgKipzdWJtb2R1bGVfZ2l0ZmlsZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHN1Ym1vZHVsZV9kb3RnaXQgPSBTVFJCVUZfSU5JVDsKKwlpZiAoIVNfSVNHSVRMSU5LKGFjdGl2ZV9jYWNoZVtmaXJzdF0tPmNlX21vZGUpKQorCQlkaWUoXygiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IiksIHNyYyk7CisJaWYgKCFpc19zdGFnaW5nX2dpdG1vZHVsZXNfb2soKSkKKwkJZGllKF8oIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIikpOworCXN0cmJ1Zl9hZGRmKCZzdWJtb2R1bGVfZG90Z2l0LCAiJXMvLmdpdCIsIHNyYyk7CisJKnN1Ym1vZHVsZV9naXRmaWxlID0gcmVhZF9naXRmaWxlKHN1Ym1vZHVsZV9kb3RnaXQuYnVmKTsKKwlpZiAoKnN1Ym1vZHVsZV9naXRmaWxlKQorCQkqc3VibW9kdWxlX2dpdGZpbGUgPSB4c3RyZHVwKCpzdWJtb2R1bGVfZ2l0ZmlsZSk7CisJZWxzZQorCQkqc3VibW9kdWxlX2dpdGZpbGUgPSBTVUJNT0RVTEVfV0lUSF9HSVRESVI7CisJc3RyYnVmX3JlbGVhc2UoJnN1Ym1vZHVsZV9kb3RnaXQpOworfQorCitzdGF0aWMgaW50IGluZGV4X3JhbmdlX29mX3NhbWVfZGlyKGNvbnN0IGNoYXIgKnNyYywgaW50IGxlbmd0aCwKKwkJCQkgICBpbnQgKmZpcnN0X3AsIGludCAqbGFzdF9wKQoreworCWNvbnN0IGNoYXIgKnNyY193X3NsYXNoID0gYWRkX3NsYXNoKHNyYyk7CisJaW50IGZpcnN0LCBsYXN0LCBsZW5fd19zbGFzaCA9IGxlbmd0aCArIDE7CisKKwlmaXJzdCA9IGNhY2hlX25hbWVfcG9zKHNyY193X3NsYXNoLCBsZW5fd19zbGFzaCk7CisJaWYgKGZpcnN0ID49IDApCisJCWRpZShfKCIlLipzIGlzIGluIGluZGV4IiksIGxlbl93X3NsYXNoLCBzcmNfd19zbGFzaCk7CisKKwlmaXJzdCA9IC0xIC0gZmlyc3Q7CisJZm9yIChsYXN0ID0gZmlyc3Q7IGxhc3QgPCBhY3RpdmVfbnI7IGxhc3QrKykgeworCQljb25zdCBjaGFyICpwYXRoID0gYWN0aXZlX2NhY2hlW2xhc3RdLT5uYW1lOworCQlpZiAoc3RybmNtcChwYXRoLCBzcmNfd19zbGFzaCwgbGVuX3dfc2xhc2gpKQorCQkJYnJlYWs7CisJfQorCWlmIChzcmNfd19zbGFzaCAhPSBzcmMpCisJCWZyZWUoKGNoYXIgKilzcmNfd19zbGFzaCk7CisJKmZpcnN0X3AgPSBmaXJzdDsKKwkqbGFzdF9wID0gbGFzdDsKKwlyZXR1cm4gbGFzdCAtIGZpcnN0OworfQorCitpbnQgY21kX212KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBnaXRtb2R1bGVzX21vZGlmaWVkID0gMDsKKwlpbnQgdmVyYm9zZSA9IDAsIHNob3dfb25seSA9IDAsIGZvcmNlID0gMCwgaWdub3JlX2Vycm9ycyA9IDA7CisJc3RydWN0IG9wdGlvbiBidWlsdGluX212X29wdGlvbnNbXSA9IHsKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX19EUllfUlVOKCZzaG93X29ubHksIE5fKCJkcnkgcnVuIikpLAorCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIpKSwKKwkJT1BUX0JPT0woJ2snLCBOVUxMLCAmaWdub3JlX2Vycm9ycywgTl8oInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIikpLAorCQlPUFRfRU5EKCksCisJfTsKKwljb25zdCBjaGFyICoqc291cmNlLCAqKmRlc3RpbmF0aW9uLCAqKmRlc3RfcGF0aCwgKipzdWJtb2R1bGVfZ2l0ZmlsZTsKKwllbnVtIHVwZGF0ZV9tb2RlIHsgQk9USCA9IDAsIFdPUktJTkdfRElSRUNUT1JZLCBJTkRFWCB9ICptb2RlczsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3JjX2Zvcl9kc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJZ2l0bW9kdWxlc19jb25maWcoKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fbXZfb3B0aW9ucywKKwkJCSAgICAgYnVpbHRpbl9tdl91c2FnZSwgMCk7CisJaWYgKC0tYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX212X3VzYWdlLCBidWlsdGluX212X29wdGlvbnMpOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZShfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisKKwlzb3VyY2UgPSBpbnRlcm5hbF9jb3B5X3BhdGhzcGVjKHByZWZpeCwgYXJndiwgYXJnYywgMCk7CisJbW9kZXMgPSB4Y2FsbG9jKGFyZ2MsIHNpemVvZihlbnVtIHVwZGF0ZV9tb2RlKSk7CisJLyoKKwkgKiBLZWVwIHRyYWlsaW5nIHNsYXNoLCBuZWVkZWQgdG8gbGV0CisJICogImdpdCBtdiBmaWxlIG5vLXN1Y2gtZGlyLyIgZXJyb3Igb3V0LgorCSAqLworCWRlc3RfcGF0aCA9IGludGVybmFsX2NvcHlfcGF0aHNwZWMocHJlZml4LCBhcmd2ICsgYXJnYywgMSwKKwkJCQkJICAgS0VFUF9UUkFJTElOR19TTEFTSCk7CisJc3VibW9kdWxlX2dpdGZpbGUgPSB4Y2FsbG9jKGFyZ2MsIHNpemVvZihjaGFyICopKTsKKworCWlmIChkZXN0X3BhdGhbMF1bMF0gPT0gJ1wwJykKKwkJLyogc3BlY2lhbCBjYXNlOiAiLiIgd2FzIG5vcm1hbGl6ZWQgdG8gIiIgKi8KKwkJZGVzdGluYXRpb24gPSBpbnRlcm5hbF9jb3B5X3BhdGhzcGVjKGRlc3RfcGF0aFswXSwgYXJndiwgYXJnYywgRFVQX0JBU0VOQU1FKTsKKwllbHNlIGlmICghbHN0YXQoZGVzdF9wYXRoWzBdLCAmc3QpICYmCisJCQlTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCWRlc3RfcGF0aFswXSA9IGFkZF9zbGFzaChkZXN0X3BhdGhbMF0pOworCQlkZXN0aW5hdGlvbiA9IGludGVybmFsX2NvcHlfcGF0aHNwZWMoZGVzdF9wYXRoWzBdLCBhcmd2LCBhcmdjLCBEVVBfQkFTRU5BTUUpOworCX0gZWxzZSB7CisJCWlmIChhcmdjICE9IDEpCisJCQlkaWUoXygiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiKSwgZGVzdF9wYXRoWzBdKTsKKwkJZGVzdGluYXRpb24gPSBkZXN0X3BhdGg7CisJfQorCisJLyogQ2hlY2tpbmcgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnNyYyA9IHNvdXJjZVtpXSwgKmRzdCA9IGRlc3RpbmF0aW9uW2ldOworCQlpbnQgbGVuZ3RoLCBzcmNfaXNfZGlyOworCQljb25zdCBjaGFyICpiYWQgPSBOVUxMOworCisJCWlmIChzaG93X29ubHkpCisJCQlwcmludGYoXygiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIiksIHNyYywgZHN0KTsKKworCQlsZW5ndGggPSBzdHJsZW4oc3JjKTsKKwkJaWYgKGxzdGF0KHNyYywgJnN0KSA8IDApCisJCQliYWQgPSBfKCJiYWQgc291cmNlIik7CisJCWVsc2UgaWYgKCFzdHJuY21wKHNyYywgZHN0LCBsZW5ndGgpICYmCisJCQkJKGRzdFtsZW5ndGhdID09IDAgfHwgZHN0W2xlbmd0aF0gPT0gJy8nKSkgeworCQkJYmFkID0gXygiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIpOworCQl9IGVsc2UgaWYgKChzcmNfaXNfZGlyID0gU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQkmJiBsc3RhdChkc3QsICZzdCkgPT0gMCkKKwkJCWJhZCA9IF8oImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiKTsKKwkJZWxzZSBpZiAoc3JjX2lzX2RpcikgeworCQkJaW50IGZpcnN0ID0gY2FjaGVfbmFtZV9wb3Moc3JjLCBsZW5ndGgpLCBsYXN0OworCisJCQlpZiAoZmlyc3QgPj0gMCkKKwkJCQlwcmVwYXJlX21vdmVfc3VibW9kdWxlKHNyYywgZmlyc3QsCisJCQkJCQkgICAgICAgc3VibW9kdWxlX2dpdGZpbGUgKyBpKTsKKwkJCWVsc2UgaWYgKGluZGV4X3JhbmdlX29mX3NhbWVfZGlyKHNyYywgbGVuZ3RoLAorCQkJCQkJCSAmZmlyc3QsICZsYXN0KSA8IDEpCisJCQkJYmFkID0gXygic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIpOworCQkJZWxzZSB7IC8qIGxhc3QgLSBmaXJzdCA+PSAxICovCisJCQkJaW50IGosIGRzdF9sZW4sIG47CisKKwkJCQltb2Rlc1tpXSA9IFdPUktJTkdfRElSRUNUT1JZOworCQkJCW4gPSBhcmdjICsgbGFzdCAtIGZpcnN0OworCQkJCVJFQUxMT0NfQVJSQVkoc291cmNlLCBuKTsKKwkJCQlSRUFMTE9DX0FSUkFZKGRlc3RpbmF0aW9uLCBuKTsKKwkJCQlSRUFMTE9DX0FSUkFZKG1vZGVzLCBuKTsKKwkJCQlSRUFMTE9DX0FSUkFZKHN1Ym1vZHVsZV9naXRmaWxlLCBuKTsKKworCQkJCWRzdCA9IGFkZF9zbGFzaChkc3QpOworCQkJCWRzdF9sZW4gPSBzdHJsZW4oZHN0KTsKKworCQkJCWZvciAoaiA9IDA7IGogPCBsYXN0IC0gZmlyc3Q7IGorKykgeworCQkJCQljb25zdCBjaGFyICpwYXRoID0gYWN0aXZlX2NhY2hlW2ZpcnN0ICsgal0tPm5hbWU7CisJCQkJCXNvdXJjZVthcmdjICsgal0gPSBwYXRoOworCQkJCQlkZXN0aW5hdGlvblthcmdjICsgal0gPQorCQkJCQkJcHJlZml4X3BhdGgoZHN0LCBkc3RfbGVuLCBwYXRoICsgbGVuZ3RoICsgMSk7CisJCQkJCW1vZGVzW2FyZ2MgKyBqXSA9IElOREVYOworCQkJCQlzdWJtb2R1bGVfZ2l0ZmlsZVthcmdjICsgal0gPSBOVUxMOworCQkJCX0KKwkJCQlhcmdjICs9IGxhc3QgLSBmaXJzdDsKKwkJCX0KKwkJfSBlbHNlIGlmIChjYWNoZV9uYW1lX3BvcyhzcmMsIGxlbmd0aCkgPCAwKQorCQkJYmFkID0gXygibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIpOworCQllbHNlIGlmIChsc3RhdChkc3QsICZzdCkgPT0gMCAmJgorCQkJICghaWdub3JlX2Nhc2UgfHwgc3RyY2FzZWNtcChzcmMsIGRzdCkpKSB7CisJCQliYWQgPSBfKCJkZXN0aW5hdGlvbiBleGlzdHMiKTsKKwkJCWlmIChmb3JjZSkgeworCQkJCS8qCisJCQkJICogb25seSBmaWxlcyBjYW4gb3ZlcndyaXRlIGVhY2ggb3RoZXI6CisJCQkJICogY2hlY2sgYm90aCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisJCQkJICovCisJCQkJaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkgfHwgU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJCQlpZiAodmVyYm9zZSkKKwkJCQkJCXdhcm5pbmcoXygib3ZlcndyaXRpbmcgJyVzJyIpLCBkc3QpOworCQkJCQliYWQgPSBOVUxMOworCQkJCX0gZWxzZQorCQkJCQliYWQgPSBfKCJDYW5ub3Qgb3ZlcndyaXRlIik7CisJCQl9CisJCX0gZWxzZSBpZiAoc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmc3JjX2Zvcl9kc3QsIGRzdCkpCisJCQliYWQgPSBfKCJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiKTsKKwkJZWxzZSBpZiAoaXNfZGlyX3NlcChkc3Rbc3RybGVuKGRzdCkgLSAxXSkpCisJCQliYWQgPSBfKCJkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiKTsKKwkJZWxzZQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZzcmNfZm9yX2RzdCwgZHN0KTsKKworCQlpZiAoIWJhZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlnbm9yZV9lcnJvcnMpCisJCQlkaWUoXygiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiKSwKKwkJCSAgICAgYmFkLCBzcmMsIGRzdCk7CisJCWlmICgtLWFyZ2MgPiAwKSB7CisJCQlpbnQgbiA9IGFyZ2MgLSBpOworCQkJbWVtbW92ZShzb3VyY2UgKyBpLCBzb3VyY2UgKyBpICsgMSwKKwkJCQluICogc2l6ZW9mKGNoYXIgKikpOworCQkJbWVtbW92ZShkZXN0aW5hdGlvbiArIGksIGRlc3RpbmF0aW9uICsgaSArIDEsCisJCQkJbiAqIHNpemVvZihjaGFyICopKTsKKwkJCW1lbW1vdmUobW9kZXMgKyBpLCBtb2RlcyArIGkgKyAxLAorCQkJCW4gKiBzaXplb2YoZW51bSB1cGRhdGVfbW9kZSkpOworCQkJbWVtbW92ZShzdWJtb2R1bGVfZ2l0ZmlsZSArIGksIHN1Ym1vZHVsZV9naXRmaWxlICsgaSArIDEsCisJCQkJbiAqIHNpemVvZihjaGFyICopKTsKKwkJCWktLTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqc3JjID0gc291cmNlW2ldLCAqZHN0ID0gZGVzdGluYXRpb25baV07CisJCWVudW0gdXBkYXRlX21vZGUgbW9kZSA9IG1vZGVzW2ldOworCQlpbnQgcG9zOworCQlpZiAoc2hvd19vbmx5IHx8IHZlcmJvc2UpCisJCQlwcmludGYoXygiUmVuYW1pbmcgJXMgdG8gJXNcbiIpLCBzcmMsIGRzdCk7CisJCWlmICghc2hvd19vbmx5ICYmIG1vZGUgIT0gSU5ERVgpIHsKKwkJCWlmIChyZW5hbWUoc3JjLCBkc3QpIDwgMCAmJiAhaWdub3JlX2Vycm9ycykKKwkJCQlkaWVfZXJybm8oXygicmVuYW1pbmcgJyVzJyBmYWlsZWQiKSwgc3JjKTsKKwkJCWlmIChzdWJtb2R1bGVfZ2l0ZmlsZVtpXSkgeworCQkJCWlmIChzdWJtb2R1bGVfZ2l0ZmlsZVtpXSAhPSBTVUJNT0RVTEVfV0lUSF9HSVRESVIpCisJCQkJCWNvbm5lY3Rfd29ya190cmVlX2FuZF9naXRfZGlyKGRzdCwgc3VibW9kdWxlX2dpdGZpbGVbaV0pOworCQkJCWlmICghdXBkYXRlX3BhdGhfaW5fZ2l0bW9kdWxlcyhzcmMsIGRzdCkpCisJCQkJCWdpdG1vZHVsZXNfbW9kaWZpZWQgPSAxOworCQkJfQorCQl9CisKKwkJaWYgKG1vZGUgPT0gV09SS0lOR19ESVJFQ1RPUlkpCisJCQljb250aW51ZTsKKworCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhzcmMsIHN0cmxlbihzcmMpKTsKKwkJYXNzZXJ0KHBvcyA+PSAwKTsKKwkJaWYgKCFzaG93X29ubHkpCisJCQlyZW5hbWVfY2FjaGVfZW50cnlfYXQocG9zLCBkc3QpOworCX0KKworCWlmIChnaXRtb2R1bGVzX21vZGlmaWVkKQorCQlzdGFnZV91cGRhdGVkX2dpdG1vZHVsZXMoKTsKKworCWlmIChhY3RpdmVfY2FjaGVfY2hhbmdlZCAmJgorCSAgICB3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmxvY2tfZmlsZSwgQ09NTUlUX0xPQ0spKQorCQlkaWUoXygiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL25hbWUtcmV2LmMgYi9idWlsdGluL25hbWUtcmV2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM3N2ZjMQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vbmFtZS1yZXYuYwpAQCAtMCwwICsxLDQwNiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic2hhMS1sb29rdXAuaCIKKworI2RlZmluZSBDVVRPRkZfREFURV9TTE9QIDg2NDAwIC8qIG9uZSBkYXkgKi8KKwordHlwZWRlZiBzdHJ1Y3QgcmV2X25hbWUgeworCWNvbnN0IGNoYXIgKnRpcF9uYW1lOworCWludCBnZW5lcmF0aW9uOworCWludCBkaXN0YW5jZTsKK30gcmV2X25hbWU7CisKK3N0YXRpYyBsb25nIGN1dG9mZiA9IExPTkdfTUFYOworCisvKiBIb3cgbWFueSBnZW5lcmF0aW9ucyBhcmUgbWF4aW1hbGx5IHByZWZlcnJlZCBvdmVyIF9vbmVfIG1lcmdlIHRyYXZlcnNhbD8gKi8KKyNkZWZpbmUgTUVSR0VfVFJBVkVSU0FMX1dFSUdIVCA2NTUzNQorCitzdGF0aWMgdm9pZCBuYW1lX3JldihzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCWNvbnN0IGNoYXIgKnRpcF9uYW1lLCBpbnQgZ2VuZXJhdGlvbiwgaW50IGRpc3RhbmNlLAorCQlpbnQgZGVyZWYpCit7CisJc3RydWN0IHJldl9uYW1lICpuYW1lID0gKHN0cnVjdCByZXZfbmFtZSAqKWNvbW1pdC0+dXRpbDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJaW50IHBhcmVudF9udW1iZXIgPSAxOworCisJcGFyc2VfY29tbWl0KGNvbW1pdCk7CisKKwlpZiAoY29tbWl0LT5kYXRlIDwgY3V0b2ZmKQorCQlyZXR1cm47CisKKwlpZiAoZGVyZWYpIHsKKwkJdGlwX25hbWUgPSB4c3RyZm10KCIlc14wIiwgdGlwX25hbWUpOworCisJCWlmIChnZW5lcmF0aW9uKQorCQkJZGllKCJnZW5lcmF0aW9uOiAlZCwgYnV0IGRlcmVmPyIsIGdlbmVyYXRpb24pOworCX0KKworCWlmIChuYW1lID09IE5VTEwpIHsKKwkJbmFtZSA9IHhtYWxsb2Moc2l6ZW9mKHJldl9uYW1lKSk7CisJCWNvbW1pdC0+dXRpbCA9IG5hbWU7CisJCWdvdG8gY29weV9kYXRhOworCX0gZWxzZSBpZiAobmFtZS0+ZGlzdGFuY2UgPiBkaXN0YW5jZSkgeworY29weV9kYXRhOgorCQluYW1lLT50aXBfbmFtZSA9IHRpcF9uYW1lOworCQluYW1lLT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKKwkJbmFtZS0+ZGlzdGFuY2UgPSBkaXN0YW5jZTsKKwl9IGVsc2UKKwkJcmV0dXJuOworCisJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQkJcGFyZW50czsKKwkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0LCBwYXJlbnRfbnVtYmVyKyspIHsKKwkJaWYgKHBhcmVudF9udW1iZXIgPiAxKSB7CisJCQlzaXplX3QgbGVuOworCQkJY2hhciAqbmV3X25hbWU7CisKKwkJCXN0cmlwX3N1ZmZpeCh0aXBfbmFtZSwgIl4wIiwgJmxlbik7CisJCQlpZiAoZ2VuZXJhdGlvbiA+IDApCisJCQkJbmV3X25hbWUgPSB4c3RyZm10KCIlLipzfiVkXiVkIiwgKGludClsZW4sIHRpcF9uYW1lLAorCQkJCQkJICAgZ2VuZXJhdGlvbiwgcGFyZW50X251bWJlcik7CisJCQllbHNlCisJCQkJbmV3X25hbWUgPSB4c3RyZm10KCIlLipzXiVkIiwgKGludClsZW4sIHRpcF9uYW1lLAorCQkJCQkJICAgcGFyZW50X251bWJlcik7CisKKwkJCW5hbWVfcmV2KHBhcmVudHMtPml0ZW0sIG5ld19uYW1lLCAwLAorCQkJCWRpc3RhbmNlICsgTUVSR0VfVFJBVkVSU0FMX1dFSUdIVCwgMCk7CisJCX0gZWxzZSB7CisJCQluYW1lX3JldihwYXJlbnRzLT5pdGVtLCB0aXBfbmFtZSwgZ2VuZXJhdGlvbiArIDEsCisJCQkJZGlzdGFuY2UgKyAxLCAwKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBzdWJwYXRoX21hdGNoZXMoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZmlsdGVyKQoreworCWNvbnN0IGNoYXIgKnN1YnBhdGggPSBwYXRoOworCisJd2hpbGUgKHN1YnBhdGgpIHsKKwkJaWYgKCF3aWxkbWF0Y2goZmlsdGVyLCBzdWJwYXRoLCAwLCBOVUxMKSkKKwkJCXJldHVybiBzdWJwYXRoIC0gcGF0aDsKKwkJc3VicGF0aCA9IHN0cmNocihzdWJwYXRoLCAnLycpOworCQlpZiAoc3VicGF0aCkKKwkJCXN1YnBhdGgrKzsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbmFtZV9yZWZfYWJicmV2KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBzaG9ydGVuX3VuYW1iaWd1b3VzKQoreworCWlmIChzaG9ydGVuX3VuYW1iaWd1b3VzKQorCQlyZWZuYW1lID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYocmVmbmFtZSwgMCk7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvaGVhZHMvIikpCisJCXJlZm5hbWUgPSByZWZuYW1lICsgMTE7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvIikpCisJCXJlZm5hbWUgPSByZWZuYW1lICsgNTsKKwlyZXR1cm4gcmVmbmFtZTsKK30KKworc3RydWN0IG5hbWVfcmVmX2RhdGEgeworCWludCB0YWdzX29ubHk7CisJaW50IG5hbWVfb25seTsKKwljb25zdCBjaGFyICpyZWZfZmlsdGVyOworfTsKKworc3RhdGljIHN0cnVjdCB0aXBfdGFibGUgeworCXN0cnVjdCB0aXBfdGFibGVfZW50cnkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljb25zdCBjaGFyICpyZWZuYW1lOworCX0gKnRhYmxlOworCWludCBucjsKKwlpbnQgYWxsb2M7CisJaW50IHNvcnRlZDsKK30gdGlwX3RhYmxlOworCitzdGF0aWMgdm9pZCBhZGRfdG9fdGlwX3RhYmxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICAgIGludCBzaG9ydGVuX3VuYW1iaWd1b3VzKQoreworCXJlZm5hbWUgPSBuYW1lX3JlZl9hYmJyZXYocmVmbmFtZSwgc2hvcnRlbl91bmFtYmlndW91cyk7CisKKwlBTExPQ19HUk9XKHRpcF90YWJsZS50YWJsZSwgdGlwX3RhYmxlLm5yICsgMSwgdGlwX3RhYmxlLmFsbG9jKTsKKwloYXNoY3B5KHRpcF90YWJsZS50YWJsZVt0aXBfdGFibGUubnJdLnNoYTEsIHNoYTEpOworCXRpcF90YWJsZS50YWJsZVt0aXBfdGFibGUubnJdLnJlZm5hbWUgPSB4c3RyZHVwKHJlZm5hbWUpOworCXRpcF90YWJsZS5ucisrOworCXRpcF90YWJsZS5zb3J0ZWQgPSAwOworfQorCitzdGF0aWMgaW50IHRpcGNtcChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IHRpcF90YWJsZV9lbnRyeSAqYSA9IGFfLCAqYiA9IGJfOworCXJldHVybiBoYXNoY21wKGEtPnNoYTEsIGItPnNoYTEpOworfQorCitzdGF0aWMgaW50IG5hbWVfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3Qob2lkLT5oYXNoKTsKKwlzdHJ1Y3QgbmFtZV9yZWZfZGF0YSAqZGF0YSA9IGNiX2RhdGE7CisJaW50IGNhbl9hYmJyZXZpYXRlX291dHB1dCA9IGRhdGEtPnRhZ3Nfb25seSAmJiBkYXRhLT5uYW1lX29ubHk7CisJaW50IGRlcmVmID0gMDsKKworCWlmIChkYXRhLT50YWdzX29ubHkgJiYgIXN0YXJ0c193aXRoKHBhdGgsICJyZWZzL3RhZ3MvIikpCisJCXJldHVybiAwOworCisJaWYgKGRhdGEtPnJlZl9maWx0ZXIpIHsKKwkJc3dpdGNoIChzdWJwYXRoX21hdGNoZXMocGF0aCwgZGF0YS0+cmVmX2ZpbHRlcikpIHsKKwkJY2FzZSAtMTogLyogZGlkIG5vdCBtYXRjaCAqLworCQkJcmV0dXJuIDA7CisJCWNhc2UgMDogIC8qIG1hdGNoZWQgZnVsbHkgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OiAvKiBtYXRjaGVkIHN1YnBhdGggKi8KKwkJCWNhbl9hYmJyZXZpYXRlX291dHB1dCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWFkZF90b190aXBfdGFibGUob2lkLT5oYXNoLCBwYXRoLCBjYW5fYWJicmV2aWF0ZV9vdXRwdXQpOworCisJd2hpbGUgKG8gJiYgby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCXN0cnVjdCB0YWcgKnQgPSAoc3RydWN0IHRhZyAqKSBvOworCQlpZiAoIXQtPnRhZ2dlZCkKKwkJCWJyZWFrOyAvKiBicm9rZW4gcmVwb3NpdG9yeSAqLworCQlvID0gcGFyc2Vfb2JqZWN0KHQtPnRhZ2dlZC0+c2hhMSk7CisJCWRlcmVmID0gMTsKKwl9CisJaWYgKG8gJiYgby0+dHlwZSA9PSBPQkpfQ09NTUlUKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopbzsKKworCQlwYXRoID0gbmFtZV9yZWZfYWJicmV2KHBhdGgsIGNhbl9hYmJyZXZpYXRlX291dHB1dCk7CisJCW5hbWVfcmV2KGNvbW1pdCwgeHN0cmR1cChwYXRoKSwgMCwgMCwgZGVyZWYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm50aF90aXBfdGFibGVfZW50KHNpemVfdCBpeCwgdm9pZCAqdGFibGVfKQoreworCXN0cnVjdCB0aXBfdGFibGVfZW50cnkgKnRhYmxlID0gdGFibGVfOworCXJldHVybiB0YWJsZVtpeF0uc2hhMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9leGFjdF9yZWZfbWF0Y2goY29uc3Qgc3RydWN0IG9iamVjdCAqbykKK3sKKwlpbnQgZm91bmQ7CisKKwlpZiAoIXRpcF90YWJsZS50YWJsZSB8fCAhdGlwX3RhYmxlLm5yKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghdGlwX3RhYmxlLnNvcnRlZCkgeworCQlxc29ydCh0aXBfdGFibGUudGFibGUsIHRpcF90YWJsZS5uciwgc2l6ZW9mKCp0aXBfdGFibGUudGFibGUpLAorCQkgICAgICB0aXBjbXApOworCQl0aXBfdGFibGUuc29ydGVkID0gMTsKKwl9CisKKwlmb3VuZCA9IHNoYTFfcG9zKG8tPnNoYTEsIHRpcF90YWJsZS50YWJsZSwgdGlwX3RhYmxlLm5yLAorCQkJIG50aF90aXBfdGFibGVfZW50KTsKKwlpZiAoMCA8PSBmb3VuZCkKKwkJcmV0dXJuIHRpcF90YWJsZS50YWJsZVtmb3VuZF0ucmVmbmFtZTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogcmV0dXJucyBhIHN0YXRpYyBidWZmZXIgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcmV2X25hbWUoY29uc3Qgc3RydWN0IG9iamVjdCAqbykKK3sKKwlzdGF0aWMgY2hhciBidWZmZXJbMTAyNF07CisJc3RydWN0IHJldl9uYW1lICpuOworCXN0cnVjdCBjb21taXQgKmM7CisKKwlpZiAoby0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gZ2V0X2V4YWN0X3JlZl9tYXRjaChvKTsKKwljID0gKHN0cnVjdCBjb21taXQgKikgbzsKKwluID0gYy0+dXRpbDsKKwlpZiAoIW4pCisJCXJldHVybiBOVUxMOworCisJaWYgKCFuLT5nZW5lcmF0aW9uKQorCQlyZXR1cm4gbi0+dGlwX25hbWU7CisJZWxzZSB7CisJCWludCBsZW4gPSBzdHJsZW4obi0+dGlwX25hbWUpOworCQlpZiAobGVuID4gMiAmJiAhc3RyY21wKG4tPnRpcF9uYW1lICsgbGVuIC0gMiwgIl4wIikpCisJCQlsZW4gLT0gMjsKKwkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiUuKnN+JWQiLCBsZW4sIG4tPnRpcF9uYW1lLAorCQkJCW4tPmdlbmVyYXRpb24pOworCisJCXJldHVybiBidWZmZXI7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X25hbWUoY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqLAorCQkgICAgICBjb25zdCBjaGFyICpjYWxsZXJfbmFtZSwKKwkJICAgICAgaW50IGFsd2F5cywgaW50IGFsbG93X3VuZGVmaW5lZCwgaW50IG5hbWVfb25seSkKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEgPSBvYmotPnNoYTE7CisKKwlpZiAoIW5hbWVfb25seSkKKwkJcHJpbnRmKCIlcyAiLCBjYWxsZXJfbmFtZSA/IGNhbGxlcl9uYW1lIDogc2hhMV90b19oZXgoc2hhMSkpOworCW5hbWUgPSBnZXRfcmV2X25hbWUob2JqKTsKKwlpZiAobmFtZSkKKwkJcHJpbnRmKCIlc1xuIiwgbmFtZSk7CisJZWxzZSBpZiAoYWxsb3dfdW5kZWZpbmVkKQorCQlwcmludGYoInVuZGVmaW5lZFxuIik7CisJZWxzZSBpZiAoYWx3YXlzKQorCQlwcmludGYoIiVzXG4iLCBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKKwllbHNlCisJCWRpZSgiY2Fubm90IGRlc2NyaWJlICclcyciLCBzaGExX3RvX2hleChzaGExKSk7Cit9CisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgbmFtZV9yZXZfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIDxjb21taXQ+Li4uIiksCisJTl8oImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIpLAorCU5fKCJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIpLAorCU5VTEwKK307CisKK3N0YXRpYyB2b2lkIG5hbWVfcmV2X2xpbmUoY2hhciAqcCwgc3RydWN0IG5hbWVfcmVmX2RhdGEgKmRhdGEpCit7CisJaW50IGZvcnR5ID0gMDsKKwljaGFyICpwX3N0YXJ0OworCWZvciAocF9zdGFydCA9IHA7ICpwOyBwKyspIHsKKyNkZWZpbmUgaXNoZXgoeCkgKGlzZGlnaXQoKHgpKSB8fCAoKHgpID49ICdhJyAmJiAoeCkgPD0gJ2YnKSkKKwkJaWYgKCFpc2hleCgqcCkpCisJCQlmb3J0eSA9IDA7CisJCWVsc2UgaWYgKCsrZm9ydHkgPT0gNDAgJiYKKwkJCSAhaXNoZXgoKihwKzEpKSkgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzQwXTsKKwkJCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworCQkJY2hhciBjID0gKihwKzEpOworCQkJaW50IHBfbGVuID0gcCAtIHBfc3RhcnQgKyAxOworCisJCQlmb3J0eSA9IDA7CisKKwkJCSoocCsxKSA9IDA7CisJCQlpZiAoIWdldF9zaGExKHAgLSAzOSwgc2hhMSkpIHsKKwkJCQlzdHJ1Y3Qgb2JqZWN0ICpvID0KKwkJCQkJbG9va3VwX29iamVjdChzaGExKTsKKwkJCQlpZiAobykKKwkJCQkJbmFtZSA9IGdldF9yZXZfbmFtZShvKTsKKwkJCX0KKwkJCSoocCsxKSA9IGM7CisKKwkJCWlmICghbmFtZSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGRhdGEtPm5hbWVfb25seSkKKwkJCQlwcmludGYoIiUuKnMlcyIsIHBfbGVuIC0gNDAsIHBfc3RhcnQsIG5hbWUpOworCQkJZWxzZQorCQkJCXByaW50ZigiJS4qcyAoJXMpIiwgcF9sZW4sIHBfc3RhcnQsIG5hbWUpOworCQkJcF9zdGFydCA9IHAgKyAxOworCQl9CisJfQorCisJLyogZmx1c2ggKi8KKwlpZiAocF9zdGFydCAhPSBwKQorCQlmd3JpdGUocF9zdGFydCwgcCAtIHBfc3RhcnQsIDEsIHN0ZG91dCk7Cit9CisKK2ludCBjbWRfbmFtZV9yZXYoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9iamVjdF9hcnJheSByZXZzID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJaW50IGFsbCA9IDAsIHRyYW5zZm9ybV9zdGRpbiA9IDAsIGFsbG93X3VuZGVmaW5lZCA9IDEsIGFsd2F5cyA9IDAsIHBlZWxfdGFnID0gMDsKKwlzdHJ1Y3QgbmFtZV9yZWZfZGF0YSBkYXRhID0geyAwLCAwLCBOVUxMIH07CisJc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CisJCU9QVF9CT09MKDAsICJuYW1lLW9ubHkiLCAmZGF0YS5uYW1lX29ubHksIE5fKCJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiKSksCisJCU9QVF9CT09MKDAsICJ0YWdzIiwgJmRhdGEudGFnc19vbmx5LCBOXygib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIikpLAorCQlPUFRfU1RSSU5HKDAsICJyZWZzIiwgJmRhdGEucmVmX2ZpbHRlciwgTl8oInBhdHRlcm4iKSwKKwkJCQkgICBOXygib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iKSksCisJCU9QVF9HUk9VUCgiIiksCisJCU9QVF9CT09MKDAsICJhbGwiLCAmYWxsLCBOXygibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIpKSwKKwkJT1BUX0JPT0woMCwgInN0ZGluIiwgJnRyYW5zZm9ybV9zdGRpbiwgTl8oInJlYWQgZnJvbSBzdGRpbiIpKSwKKwkJT1BUX0JPT0woMCwgInVuZGVmaW5lZCIsICZhbGxvd191bmRlZmluZWQsIE5fKCJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiKSksCisJCU9QVF9CT09MKDAsICJhbHdheXMiLCAgICAgJmFsd2F5cywKKwkJCSAgIE5fKCJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siKSksCisJCXsKKwkJCS8qIEEgSGlkZGVuIE9QVF9CT09MICovCisJCQlPUFRJT05fU0VUX0lOVCwgMCwgInBlZWwtdGFnIiwgJnBlZWxfdGFnLCBOVUxMLAorCQkJTl8oImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfSElEREVOLCBOVUxMLCAxLAorCQl9LAorCQlPUFRfRU5EKCksCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdHMsIG5hbWVfcmV2X3VzYWdlLCAwKTsKKwlpZiAoYWxsICsgdHJhbnNmb3JtX3N0ZGluICsgISFhcmdjID4gMSkgeworCQllcnJvcigiU3BlY2lmeSBlaXRoZXIgYSBsaXN0LCBvciAtLWFsbCwgbm90IGJvdGghIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhuYW1lX3Jldl91c2FnZSwgb3B0cyk7CisJfQorCWlmIChhbGwgfHwgdHJhbnNmb3JtX3N0ZGluKQorCQljdXRvZmYgPSAwOworCisJZm9yICg7IGFyZ2M7IGFyZ2MtLSwgYXJndisrKSB7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJCWlmIChnZXRfc2hhMSgqYXJndiwgc2hhMSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGdldCBzaGExIGZvciAlcy4gU2tpcHBpbmcuXG4iLAorCQkJCQkqYXJndik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbW1pdCA9IE5VTEw7CisJCW9iamVjdCA9IHBhcnNlX29iamVjdChzaGExKTsKKwkJaWYgKG9iamVjdCkgeworCQkJc3RydWN0IG9iamVjdCAqcGVlbGVkID0gZGVyZWZfdGFnKG9iamVjdCwgKmFyZ3YsIDApOworCQkJaWYgKHBlZWxlZCAmJiBwZWVsZWQtPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKXBlZWxlZDsKKwkJfQorCisJCWlmICghb2JqZWN0KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBnZXQgb2JqZWN0IGZvciAlcy4gU2tpcHBpbmcuXG4iLAorCQkJCQkqYXJndik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjb21taXQpIHsKKwkJCWlmIChjdXRvZmYgPiBjb21taXQtPmRhdGUpCisJCQkJY3V0b2ZmID0gY29tbWl0LT5kYXRlOworCQl9CisKKwkJaWYgKHBlZWxfdGFnKSB7CisJCQlpZiAoIWNvbW1pdCkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGdldCBjb21taXQgZm9yICVzLiBTa2lwcGluZy5cbiIsCisJCQkJCSphcmd2KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCW9iamVjdCA9IChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0OworCQl9CisJCWFkZF9vYmplY3RfYXJyYXkob2JqZWN0LCAqYXJndiwgJnJldnMpOworCX0KKworCWlmIChjdXRvZmYpCisJCWN1dG9mZiA9IGN1dG9mZiAtIENVVE9GRl9EQVRFX1NMT1A7CisJZm9yX2VhY2hfcmVmKG5hbWVfcmVmLCAmZGF0YSk7CisKKwlpZiAodHJhbnNmb3JtX3N0ZGluKSB7CisJCWNoYXIgYnVmZmVyWzIwNDhdOworCisJCXdoaWxlICghZmVvZihzdGRpbikpIHsKKwkJCWNoYXIgKnAgPSBmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbik7CisJCQlpZiAoIXApCisJCQkJYnJlYWs7CisJCQluYW1lX3Jldl9saW5lKHAsICZkYXRhKTsKKwkJfQorCX0gZWxzZSBpZiAoYWxsKSB7CisJCWludCBpLCBtYXg7CisKKwkJbWF4ID0gZ2V0X21heF9vYmplY3RfaW5kZXgoKTsKKwkJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBnZXRfaW5kZXhlZF9vYmplY3QoaSk7CisJCQlpZiAoIW9iaiB8fCBvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCQljb250aW51ZTsKKwkJCXNob3dfbmFtZShvYmosIE5VTEwsCisJCQkJICBhbHdheXMsIGFsbG93X3VuZGVmaW5lZCwgZGF0YS5uYW1lX29ubHkpOworCQl9CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCByZXZzLm5yOyBpKyspCisJCQlzaG93X25hbWUocmV2cy5vYmplY3RzW2ldLml0ZW0sIHJldnMub2JqZWN0c1tpXS5uYW1lLAorCQkJCSAgYWx3YXlzLCBhbGxvd191bmRlZmluZWQsIGRhdGEubmFtZV9vbmx5KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vbm90ZXMuYyBiL2J1aWx0aW4vbm90ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTVjZWJiCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9ub3Rlcy5jCkBAIC0wLDAgKzEsMTAxNyBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCBub3RlcyIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgSm9oYW4gSGVybGFuZCA8am9oYW5AaGVybGFuZC5uZXQ+CisgKgorICogQmFzZWQgb24gZ2l0LW5vdGVzLnNoIGJ5IEpvaGFubmVzIFNjaGluZGVsaW4sCisgKiBhbmQgYnVpbHRpbi90YWcuYyBieSBLcmlzdGlhbiBIw7hnc2JlcmcgYW5kIENhcmxvcyBSaWNhLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJub3Rlcy5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgIm5vdGVzLW1lcmdlLmgiCisjaW5jbHVkZSAibm90ZXMtdXRpbHMuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc191c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIpLAorCU5fKCJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iKSwKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iKSwKKwlOXygiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIpLAorCU5fKCJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iKSwKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iKSwKKwlOXygiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcHJ1bmUgWy1uIHwgLXZdIiksCisJTl8oImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19saXN0X3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX2FkZF91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19jb3B5X3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iKSwKKwlOXygiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19hcHBlbmRfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfZWRpdF91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfc2hvd191c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfbm90ZXNfbWVyZ2VfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IiksCisJTl8oImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIpLAorCU5fKCJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X25vdGVzX3JlbW92ZV91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19wcnVuZV91c2FnZVtdID0geworCU5fKCJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9ub3Rlc19nZXRfcmVmX3VzYWdlW10gPSB7CisJTl8oImdpdCBub3RlcyBnZXQtcmVmIiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgbm90ZV90ZW1wbGF0ZVtdID0KKwkiXG5Xcml0ZS9lZGl0IHRoZSBub3RlcyBmb3IgdGhlIGZvbGxvd2luZyBvYmplY3Q6XG4iOworCitzdHJ1Y3Qgbm90ZV9kYXRhIHsKKwlpbnQgZ2l2ZW47CisJaW50IHVzZV9lZGl0b3I7CisJY2hhciAqZWRpdF9wYXRoOworCXN0cnVjdCBzdHJidWYgYnVmOworfTsKKworc3RhdGljIHZvaWQgZnJlZV9ub3RlX2RhdGEoc3RydWN0IG5vdGVfZGF0YSAqZCkKK3sKKwlpZiAoZC0+ZWRpdF9wYXRoKSB7CisJCXVubGlua19vcl93YXJuKGQtPmVkaXRfcGF0aCk7CisJCWZyZWUoZC0+ZWRpdF9wYXRoKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmQtPmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgbGlzdF9lYWNoX25vdGUoY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGVfc2hhMSwgY2hhciAqbm90ZV9wYXRoLAorCQl2b2lkICpjYl9kYXRhKQoreworCXByaW50ZigiJXMgJXNcbiIsIHNoYTFfdG9faGV4KG5vdGVfc2hhMSksIHNoYTFfdG9faGV4KG9iamVjdF9zaGExKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfb2JqX3RvX2ZkKGludCBmZCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKGJ1ZikgeworCQlpZiAoc2l6ZSkKKwkJCXdyaXRlX29yX2RpZShmZCwgYnVmLCBzaXplKTsKKwkJZnJlZShidWYpOworCX0KK30KKworc3RhdGljIHZvaWQgd3JpdGVfY29tbWVudGVkX29iamVjdChpbnQgZmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9iamVjdCkKK3sKKwljb25zdCBjaGFyICpzaG93X2FyZ3NbNV0gPQorCQl7InNob3ciLCAiLS1zdGF0IiwgIi0tbm8tbm90ZXMiLCBzaGExX3RvX2hleChvYmplY3QpLCBOVUxMfTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBzaG93ID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBjYnVmID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBJbnZva2UgImdpdCBzaG93IC0tc3RhdCAtLW5vLW5vdGVzICRvYmplY3QiICovCisJc2hvdy5hcmd2ID0gc2hvd19hcmdzOworCXNob3cubm9fc3RkaW4gPSAxOworCXNob3cub3V0ID0gLTE7CisJc2hvdy5lcnIgPSAwOworCXNob3cuZ2l0X2NtZCA9IDE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJnNob3cpKQorCQlkaWUoXygidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciKSwKKwkJICAgIHNoYTFfdG9faGV4KG9iamVjdCkpOworCisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIHNob3cub3V0LCAwKSA8IDApCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IikpOworCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZjYnVmLCBidWYuYnVmLCBidWYubGVuKTsKKwl3cml0ZV9vcl9kaWUoZmQsIGNidWYuYnVmLCBjYnVmLmxlbik7CisKKwlzdHJidWZfcmVsZWFzZSgmY2J1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJnNob3cpKQorCQlkaWUoXygiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIiksCisJCSAgICBzaGExX3RvX2hleChvYmplY3QpKTsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9ub3RlX2RhdGEoY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0LCBzdHJ1Y3Qgbm90ZV9kYXRhICpkLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfbm90ZSkKK3sKKwlpZiAoZC0+dXNlX2VkaXRvciB8fCAhZC0+Z2l2ZW4pIHsKKwkJaW50IGZkOworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCS8qIHdyaXRlIHRoZSB0ZW1wbGF0ZSBtZXNzYWdlIGJlZm9yZSBlZGl0aW5nOiAqLworCQlkLT5lZGl0X3BhdGggPSBnaXRfcGF0aGR1cCgiTk9URVNfRURJVE1TRyIpOworCQlmZCA9IG9wZW4oZC0+ZWRpdF9wYXRoLCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZLCAwNjAwKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIpLCBkLT5lZGl0X3BhdGgpOworCisJCWlmIChkLT5naXZlbikKKwkJCXdyaXRlX29yX2RpZShmZCwgZC0+YnVmLmJ1ZiwgZC0+YnVmLmxlbik7CisJCWVsc2UgaWYgKG9sZF9ub3RlKQorCQkJY29weV9vYmpfdG9fZmQoZmQsIG9sZF9ub3RlKTsKKworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZidWYsIG5vdGVfdGVtcGxhdGUsIHN0cmxlbihub3RlX3RlbXBsYXRlKSk7CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwkJd3JpdGVfb3JfZGllKGZkLCBidWYuYnVmLCBidWYubGVuKTsKKworCQl3cml0ZV9jb21tZW50ZWRfb2JqZWN0KGZkLCBvYmplY3QpOworCisJCWNsb3NlKGZkKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmZC0+YnVmKTsKKworCQlpZiAobGF1bmNoX2VkaXRvcihkLT5lZGl0X3BhdGgsICZkLT5idWYsIE5VTEwpKSB7CisJCQlkaWUoXygiUGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIikpOworCQl9CisJCXN0cmJ1Zl9zdHJpcHNwYWNlKCZkLT5idWYsIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgd3JpdGVfbm90ZV9kYXRhKHN0cnVjdCBub3RlX2RhdGEgKmQsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaWYgKHdyaXRlX3NoYTFfZmlsZShkLT5idWYuYnVmLCBkLT5idWYubGVuLCBibG9iX3R5cGUsIHNoYTEpKSB7CisJCWVycm9yKF8oInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIpKTsKKwkJaWYgKGQtPmVkaXRfcGF0aCkKKwkJCWVycm9yKF8oIlRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIiksCisJCQkJZC0+ZWRpdF9wYXRoKTsKKwkJZXhpdCgxMjgpOworCX0KK30KKworc3RhdGljIGludCBwYXJzZV9tc2dfYXJnKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IG5vdGVfZGF0YSAqZCA9IG9wdC0+dmFsdWU7CisKKwlzdHJidWZfZ3JvdygmZC0+YnVmLCBzdHJsZW4oYXJnKSArIDIpOworCWlmIChkLT5idWYubGVuKQorCQlzdHJidWZfYWRkY2goJmQtPmJ1ZiwgJ1xuJyk7CisJc3RyYnVmX2FkZHN0cigmZC0+YnVmLCBhcmcpOworCXN0cmJ1Zl9zdHJpcHNwYWNlKCZkLT5idWYsIDApOworCisJZC0+Z2l2ZW4gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZpbGVfYXJnKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IG5vdGVfZGF0YSAqZCA9IG9wdC0+dmFsdWU7CisKKwlpZiAoZC0+YnVmLmxlbikKKwkJc3RyYnVmX2FkZGNoKCZkLT5idWYsICdcbicpOworCWlmICghc3RyY21wKGFyZywgIi0iKSkgeworCQlpZiAoc3RyYnVmX3JlYWQoJmQtPmJ1ZiwgMCwgMTAyNCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNhbm5vdCByZWFkICclcyciKSwgYXJnKTsKKwl9IGVsc2UgaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUoJmQtPmJ1ZiwgYXJnLCAxMDI0KSA8IDApCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciKSwgYXJnKTsKKwlzdHJidWZfc3RyaXBzcGFjZSgmZC0+YnVmLCAwKTsKKworCWQtPmdpdmVuID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9yZXVzZV9hcmcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgbm90ZV9kYXRhICpkID0gb3B0LT52YWx1ZTsKKwljaGFyICpidWY7CisJdW5zaWduZWQgY2hhciBvYmplY3RbMjBdOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKworCWlmIChkLT5idWYubGVuKQorCQlzdHJidWZfYWRkY2goJmQtPmJ1ZiwgJ1xuJyk7CisKKwlpZiAoZ2V0X3NoYTEoYXJnLCBvYmplY3QpKQorCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgYXJnKTsKKwlpZiAoIShidWYgPSByZWFkX3NoYTFfZmlsZShvYmplY3QsICZ0eXBlLCAmbGVuKSkpIHsKKwkJZnJlZShidWYpOworCQlkaWUoXygiRmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIiksIGFyZyk7CisJfQorCWlmICh0eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoYnVmKTsKKwkJZGllKF8oIkNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIpLCBhcmcpOworCX0KKwlzdHJidWZfYWRkKCZkLT5idWYsIGJ1ZiwgbGVuKTsKKwlmcmVlKGJ1Zik7CisKKwlkLT5naXZlbiA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcmVlZGl0X2FyZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBub3RlX2RhdGEgKmQgPSBvcHQtPnZhbHVlOworCWQtPnVzZV9lZGl0b3IgPSAxOworCXJldHVybiBwYXJzZV9yZXVzZV9hcmcob3B0LCBhcmcsIHVuc2V0KTsKK30KKworc3RhdGljIGludCBub3Rlc19jb3B5X2Zyb21fc3RkaW4oaW50IGZvcmNlLCBjb25zdCBjaGFyICpyZXdyaXRlX2NtZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqYyA9IE5VTEw7CisJc3RydWN0IG5vdGVzX3RyZWUgKnQgPSBOVUxMOworCWludCByZXQgPSAwOworCWNvbnN0IGNoYXIgKm1zZyA9ICJOb3RlcyBhZGRlZCBieSAnZ2l0IG5vdGVzIGNvcHknIjsKKworCWlmIChyZXdyaXRlX2NtZCkgeworCQljID0gaW5pdF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKHJld3JpdGVfY21kKTsKKwkJaWYgKCFjKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaW5pdF9ub3RlcyhOVUxMLCBOVUxMLCBOVUxMLCAwKTsKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJfQorCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZidWYsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJdW5zaWduZWQgY2hhciBmcm9tX29ialsyMF0sIHRvX29ialsyMF07CisJCXN0cnVjdCBzdHJidWYgKipzcGxpdDsKKwkJaW50IGVycjsKKworCQlzcGxpdCA9IHN0cmJ1Zl9zcGxpdCgmYnVmLCAnICcpOworCQlpZiAoIXNwbGl0WzBdIHx8ICFzcGxpdFsxXSkKKwkJCWRpZShfKCJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iKSwgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9ydHJpbShzcGxpdFswXSk7CisJCXN0cmJ1Zl9ydHJpbShzcGxpdFsxXSk7CisJCWlmIChnZXRfc2hhMShzcGxpdFswXS0+YnVmLCBmcm9tX29iaikpCisJCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgc3BsaXRbMF0tPmJ1Zik7CisJCWlmIChnZXRfc2hhMShzcGxpdFsxXS0+YnVmLCB0b19vYmopKQorCQkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIHNwbGl0WzFdLT5idWYpOworCisJCWlmIChyZXdyaXRlX2NtZCkKKwkJCWVyciA9IGNvcHlfbm90ZV9mb3JfcmV3cml0ZShjLCBmcm9tX29iaiwgdG9fb2JqKTsKKwkJZWxzZQorCQkJZXJyID0gY29weV9ub3RlKHQsIGZyb21fb2JqLCB0b19vYmosIGZvcmNlLAorCQkJCQljb21iaW5lX25vdGVzX292ZXJ3cml0ZSk7CisKKwkJaWYgKGVycikgeworCQkJZXJyb3IoXygiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciKSwKKwkJCSAgICAgIHNwbGl0WzBdLT5idWYsIHNwbGl0WzFdLT5idWYpOworCQkJcmV0ID0gMTsKKwkJfQorCisJCXN0cmJ1Zl9saXN0X2ZyZWUoc3BsaXQpOworCX0KKworCWlmICghcmV3cml0ZV9jbWQpIHsKKwkJY29tbWl0X25vdGVzKHQsIG1zZyk7CisJCWZyZWVfbm90ZXModCk7CisJfSBlbHNlIHsKKwkJZmluaXNoX2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoYywgbXNnKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBub3Rlc190cmVlICppbml0X25vdGVzX2NoZWNrKGNvbnN0IGNoYXIgKnN1YmNvbW1hbmQpCit7CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJaW5pdF9ub3RlcyhOVUxMLCBOVUxMLCBOVUxMLCAwKTsKKwl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKworCWlmICghc3RhcnRzX3dpdGgodC0+cmVmLCAicmVmcy9ub3Rlcy8iKSkKKwkJZGllKCJSZWZ1c2luZyB0byAlcyBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiLAorCQkgICAgc3ViY29tbWFuZCwgdC0+cmVmKTsKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIGludCBsaXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBub3Rlc190cmVlICp0OworCXVuc2lnbmVkIGNoYXIgb2JqZWN0WzIwXTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpub3RlOworCWludCByZXR2YWwgPSAtMTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjKQorCQlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkJICAgICBnaXRfbm90ZXNfbGlzdF91c2FnZSwgMCk7CisKKwlpZiAoMSA8IGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19saXN0X3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwl0ID0gaW5pdF9ub3Rlc19jaGVjaygibGlzdCIpOworCWlmIChhcmdjKSB7CisJCWlmIChnZXRfc2hhMShhcmd2WzBdLCBvYmplY3QpKQorCQkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIGFyZ3ZbMF0pOworCQlub3RlID0gZ2V0X25vdGUodCwgb2JqZWN0KTsKKwkJaWYgKG5vdGUpIHsKKwkJCXB1dHMoc2hhMV90b19oZXgobm90ZSkpOworCQkJcmV0dmFsID0gMDsKKwkJfSBlbHNlCisJCQlyZXR2YWwgPSBlcnJvcihfKCJObyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIiksCisJCQkJICAgICAgIHNoYTFfdG9faGV4KG9iamVjdCkpOworCX0gZWxzZQorCQlyZXR2YWwgPSBmb3JfZWFjaF9ub3RlKHQsIDAsIGxpc3RfZWFjaF9ub3RlLCBOVUxMKTsKKworCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhcHBlbmRfZWRpdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCk7CisKK3N0YXRpYyBpbnQgYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBmb3JjZSA9IDAsIGFsbG93X2VtcHR5ID0gMDsKKwljb25zdCBjaGFyICpvYmplY3RfcmVmOworCXN0cnVjdCBub3Rlc190cmVlICp0OworCXVuc2lnbmVkIGNoYXIgb2JqZWN0WzIwXSwgbmV3X25vdGVbMjBdOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGU7CisJc3RydWN0IG5vdGVfZGF0YSBkID0geyAwLCAwLCBOVUxMLCBTVFJCVUZfSU5JVCB9OworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQl7IE9QVElPTl9DQUxMQkFDSywgJ20nLCAibWVzc2FnZSIsICZkLCBOXygibWVzc2FnZSIpLAorCQkJTl8oIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfbXNnX2FyZ30sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnRicsICJmaWxlIiwgJmQsIE5fKCJmaWxlIiksCisJCQlOXygibm90ZSBjb250ZW50cyBpbiBhIGZpbGUiKSwgUEFSU0VfT1BUX05PTkVHLAorCQkJcGFyc2VfZmlsZV9hcmd9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ2MnLCAicmVlZGl0LW1lc3NhZ2UiLCAmZCwgTl8oIm9iamVjdCIpLAorCQkJTl8oInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9yZWVkaXRfYXJnfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdDJywgInJldXNlLW1lc3NhZ2UiLCAmZCwgTl8oIm9iamVjdCIpLAorCQkJTl8oInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9yZXVzZV9hcmd9LAorCQlPUFRfQk9PTCgwLCAiYWxsb3ctZW1wdHkiLCAmYWxsb3dfZW1wdHksCisJCQlOXygiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIikpLAorCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF9ub3Rlc19hZGRfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKworCWlmICgyIDwgYXJnYykgeworCQllcnJvcihfKCJ0b28gbWFueSBwYXJhbWV0ZXJzIikpOworCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX2FkZF91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJb2JqZWN0X3JlZiA9IGFyZ2MgPiAxID8gYXJndlsxXSA6ICJIRUFEIjsKKworCWlmIChnZXRfc2hhMShvYmplY3RfcmVmLCBvYmplY3QpKQorCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgb2JqZWN0X3JlZik7CisKKwl0ID0gaW5pdF9ub3Rlc19jaGVjaygiYWRkIik7CisJbm90ZSA9IGdldF9ub3RlKHQsIG9iamVjdCk7CisKKwlpZiAobm90ZSkgeworCQlpZiAoIWZvcmNlKSB7CisJCQlmcmVlX25vdGVzKHQpOworCQkJaWYgKGQuZ2l2ZW4pIHsKKwkJCQlmcmVlX25vdGVfZGF0YSgmZCk7CisJCQkJcmV0dXJuIGVycm9yKF8oIkNhbm5vdCBhZGQgbm90ZXMuICIKKwkJCQkJIkZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuICIKKwkJCQkJIlVzZSAnLWYnIHRvIG92ZXJ3cml0ZSBleGlzdGluZyBub3RlcyIpLAorCQkJCQlzaGExX3RvX2hleChvYmplY3QpKTsKKwkJCX0KKwkJCS8qCisJCQkgKiBSZWRpcmVjdCB0byAiZWRpdCIgc3ViY29tbWFuZC4KKwkJCSAqCisJCQkgKiBXZSBvbmx5IGVuZCB1cCBoZXJlIGlmIG5vbmUgb2YgLW0vLUYvLWMvLUMgb3IgLWYgYXJlCisJCQkgKiBnaXZlbi4gVGhlIG9yaWdpbmFsIGFyZ3MgYXJlIHRoZXJlZm9yZSBzdGlsbCBpbgorCQkJICogYXJndlswLTFdLgorCQkJICovCisJCQlhcmd2WzBdID0gImVkaXQiOworCQkJcmV0dXJuIGFwcGVuZF9lZGl0KGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJCX0KKwkJZnByaW50ZihzdGRlcnIsIF8oIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIpLAorCQkJc2hhMV90b19oZXgob2JqZWN0KSk7CisJfQorCisJcHJlcGFyZV9ub3RlX2RhdGEob2JqZWN0LCAmZCwgbm90ZSk7CisJaWYgKGQuYnVmLmxlbiB8fCBhbGxvd19lbXB0eSkgeworCQl3cml0ZV9ub3RlX2RhdGEoJmQsIG5ld19ub3RlKTsKKwkJaWYgKGFkZF9ub3RlKHQsIG9iamVjdCwgbmV3X25vdGUsIGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlKSkKKwkJCWRpZSgiQlVHOiBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSBmYWlsZWQiKTsKKwkJY29tbWl0X25vdGVzKHQsICJOb3RlcyBhZGRlZCBieSAnZ2l0IG5vdGVzIGFkZCciKTsKKwl9IGVsc2UgeworCQlmcHJpbnRmKHN0ZGVyciwgXygiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iKSwKKwkJCXNoYTFfdG9faGV4KG9iamVjdCkpOworCQlyZW1vdmVfbm90ZSh0LCBvYmplY3QpOworCQljb21taXRfbm90ZXModCwgIk5vdGVzIHJlbW92ZWQgYnkgJ2dpdCBub3RlcyBhZGQnIik7CisJfQorCisJZnJlZV9ub3RlX2RhdGEoJmQpOworCWZyZWVfbm90ZXModCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29weShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcmV0dmFsID0gMCwgZm9yY2UgPSAwLCBmcm9tX3N0ZGluID0gMDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tX25vdGUsICpub3RlOworCWNvbnN0IGNoYXIgKm9iamVjdF9yZWY7CisJdW5zaWduZWQgY2hhciBvYmplY3RbMjBdLCBmcm9tX29ialsyMF07CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJY29uc3QgY2hhciAqcmV3cml0ZV9jbWQgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiKSksCisJCU9QVF9CT09MKDAsICJzdGRpbiIsICZmcm9tX3N0ZGluLCBOXygicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iKSksCisJCU9QVF9TVFJJTkcoMCwgImZvci1yZXdyaXRlIiwgJnJld3JpdGVfY21kLCBOXygiY29tbWFuZCIpLAorCQkJICAgTl8oImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzICIKKwkJCSAgICAgICItLXN0ZGluKSIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X25vdGVzX2NvcHlfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKGZyb21fc3RkaW4gfHwgcmV3cml0ZV9jbWQpIHsKKwkJaWYgKGFyZ2MpIHsKKwkJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX2NvcHlfdXNhZ2UsIG9wdGlvbnMpOworCQl9IGVsc2UgeworCQkJcmV0dXJuIG5vdGVzX2NvcHlfZnJvbV9zdGRpbihmb3JjZSwgcmV3cml0ZV9jbWQpOworCQl9CisJfQorCisJaWYgKGFyZ2MgPCAyKSB7CisJCWVycm9yKF8oInRvbyBmZXcgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19jb3B5X3VzYWdlLCBvcHRpb25zKTsKKwl9CisJaWYgKDIgPCBhcmdjKSB7CisJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfY29weV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGdldF9zaGExKGFyZ3ZbMF0sIGZyb21fb2JqKSkKKwkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIGFyZ3ZbMF0pOworCisJb2JqZWN0X3JlZiA9IDEgPCBhcmdjID8gYXJndlsxXSA6ICJIRUFEIjsKKworCWlmIChnZXRfc2hhMShvYmplY3RfcmVmLCBvYmplY3QpKQorCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgb2JqZWN0X3JlZik7CisKKwl0ID0gaW5pdF9ub3Rlc19jaGVjaygiY29weSIpOworCW5vdGUgPSBnZXRfbm90ZSh0LCBvYmplY3QpOworCisJaWYgKG5vdGUpIHsKKwkJaWYgKCFmb3JjZSkgeworCQkJcmV0dmFsID0gZXJyb3IoXygiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nICIKKwkJCQkgICAgICAgIm5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvICIKKwkJCQkgICAgICAgIm92ZXJ3cml0ZSBleGlzdGluZyBub3RlcyIpLAorCQkJCSAgICAgICBzaGExX3RvX2hleChvYmplY3QpKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWZwcmludGYoc3RkZXJyLCBfKCJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iKSwKKwkJCXNoYTFfdG9faGV4KG9iamVjdCkpOworCX0KKworCWZyb21fbm90ZSA9IGdldF9ub3RlKHQsIGZyb21fb2JqKTsKKwlpZiAoIWZyb21fbm90ZSkgeworCQlyZXR2YWwgPSBlcnJvcihfKCJNaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCAiCisJCQkgICAgICAgImNvcHkuIiksIHNoYTFfdG9faGV4KGZyb21fb2JqKSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhZGRfbm90ZSh0LCBvYmplY3QsIGZyb21fbm90ZSwgY29tYmluZV9ub3Rlc19vdmVyd3JpdGUpKQorCQlkaWUoIkJVRzogY29tYmluZV9ub3Rlc19vdmVyd3JpdGUgZmFpbGVkIik7CisJY29tbWl0X25vdGVzKHQsICJOb3RlcyBhZGRlZCBieSAnZ2l0IG5vdGVzIGNvcHknIik7CitvdXQ6CisJZnJlZV9ub3Rlcyh0KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9lZGl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBhbGxvd19lbXB0eSA9IDA7CisJY29uc3QgY2hhciAqb2JqZWN0X3JlZjsKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwl1bnNpZ25lZCBjaGFyIG9iamVjdFsyMF0sIG5ld19ub3RlWzIwXTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpub3RlOworCWNoYXIgbG9nbXNnWzEwMF07CisJY29uc3QgY2hhciAqIGNvbnN0ICp1c2FnZTsKKwlzdHJ1Y3Qgbm90ZV9kYXRhIGQgPSB7IDAsIDAsIE5VTEwsIFNUUkJVRl9JTklUIH07CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCXsgT1BUSU9OX0NBTExCQUNLLCAnbScsICJtZXNzYWdlIiwgJmQsIE5fKCJtZXNzYWdlIiksCisJCQlOXygibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9tc2dfYXJnfSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdGJywgImZpbGUiLCAmZCwgTl8oImZpbGUiKSwKKwkJCU5fKCJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIpLCBQQVJTRV9PUFRfTk9ORUcsCisJCQlwYXJzZV9maWxlX2FyZ30sCisJCXsgT1BUSU9OX0NBTExCQUNLLCAnYycsICJyZWVkaXQtbWVzc2FnZSIsICZkLCBOXygib2JqZWN0IiksCisJCQlOXygicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IiksIFBBUlNFX09QVF9OT05FRywKKwkJCXBhcnNlX3JlZWRpdF9hcmd9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ0MnLCAicmV1c2UtbWVzc2FnZSIsICZkLCBOXygib2JqZWN0IiksCisJCQlOXygicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IiksIFBBUlNFX09QVF9OT05FRywKKwkJCXBhcnNlX3JldXNlX2FyZ30sCisJCU9QVF9CT09MKDAsICJhbGxvdy1lbXB0eSIsICZhbGxvd19lbXB0eSwKKwkJCU5fKCJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiKSksCisJCU9QVF9FTkQoKQorCX07CisJaW50IGVkaXQgPSAhc3RyY21wKGFyZ3ZbMF0sICJlZGl0Iik7CisKKwl1c2FnZSA9IGVkaXQgPyBnaXRfbm90ZXNfZWRpdF91c2FnZSA6IGdpdF9ub3Rlc19hcHBlbmRfdXNhZ2U7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCB1c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCisJaWYgKDIgPCBhcmdjKSB7CisJCWVycm9yKF8oInRvbyBtYW55IHBhcmFtZXRlcnMiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGQuZ2l2ZW4gJiYgZWRpdCkKKwkJZnByaW50ZihzdGRlcnIsIF8oIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkICIKKwkJCSJmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorCQkJIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iKSk7CisKKwlvYmplY3RfcmVmID0gMSA8IGFyZ2MgPyBhcmd2WzFdIDogIkhFQUQiOworCisJaWYgKGdldF9zaGExKG9iamVjdF9yZWYsIG9iamVjdCkpCisJCWRpZShfKCJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBvYmplY3RfcmVmKTsKKworCXQgPSBpbml0X25vdGVzX2NoZWNrKGFyZ3ZbMF0pOworCW5vdGUgPSBnZXRfbm90ZSh0LCBvYmplY3QpOworCisJcHJlcGFyZV9ub3RlX2RhdGEob2JqZWN0LCAmZCwgZWRpdCA/IG5vdGUgOiBOVUxMKTsKKworCWlmIChub3RlICYmICFlZGl0KSB7CisJCS8qIEFwcGVuZCBidWYgdG8gcHJldmlvdXMgbm90ZSBjb250ZW50cyAqLworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJY2hhciAqcHJldl9idWYgPSByZWFkX3NoYTFfZmlsZShub3RlLCAmdHlwZSwgJnNpemUpOworCisJCXN0cmJ1Zl9ncm93KCZkLmJ1Ziwgc2l6ZSArIDEpOworCQlpZiAoZC5idWYubGVuICYmIHByZXZfYnVmICYmIHNpemUpCisJCQlzdHJidWZfaW5zZXJ0KCZkLmJ1ZiwgMCwgIlxuIiwgMSk7CisJCWlmIChwcmV2X2J1ZiAmJiBzaXplKQorCQkJc3RyYnVmX2luc2VydCgmZC5idWYsIDAsIHByZXZfYnVmLCBzaXplKTsKKwkJZnJlZShwcmV2X2J1Zik7CisJfQorCisJaWYgKGQuYnVmLmxlbiB8fCBhbGxvd19lbXB0eSkgeworCQl3cml0ZV9ub3RlX2RhdGEoJmQsIG5ld19ub3RlKTsKKwkJaWYgKGFkZF9ub3RlKHQsIG9iamVjdCwgbmV3X25vdGUsIGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlKSkKKwkJCWRpZSgiQlVHOiBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSBmYWlsZWQiKTsKKwkJc25wcmludGYobG9nbXNnLCBzaXplb2YobG9nbXNnKSwgIk5vdGVzIGFkZGVkIGJ5ICdnaXQgbm90ZXMgJXMnIiwKKwkJCWFyZ3ZbMF0pOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCBfKCJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIpLAorCQkJc2hhMV90b19oZXgob2JqZWN0KSk7CisJCXJlbW92ZV9ub3RlKHQsIG9iamVjdCk7CisJCXNucHJpbnRmKGxvZ21zZywgc2l6ZW9mKGxvZ21zZyksICJOb3RlcyByZW1vdmVkIGJ5ICdnaXQgbm90ZXMgJXMnIiwKKwkJCWFyZ3ZbMF0pOworCX0KKwljb21taXRfbm90ZXModCwgbG9nbXNnKTsKKworCWZyZWVfbm90ZV9kYXRhKCZkKTsKKwlmcmVlX25vdGVzKHQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3coaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqb2JqZWN0X3JlZjsKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwl1bnNpZ25lZCBjaGFyIG9iamVjdFsyMF07CisJY29uc3QgdW5zaWduZWQgY2hhciAqbm90ZTsKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfbm90ZXNfc2hvd191c2FnZSwKKwkJCSAgICAgMCk7CisKKwlpZiAoMSA8IGFyZ2MpIHsKKwkJZXJyb3IoXygidG9vIG1hbnkgcGFyYW1ldGVycyIpKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19zaG93X3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwlvYmplY3RfcmVmID0gYXJnYyA/IGFyZ3ZbMF0gOiAiSEVBRCI7CisKKwlpZiAoZ2V0X3NoYTEob2JqZWN0X3JlZiwgb2JqZWN0KSkKKwkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiksIG9iamVjdF9yZWYpOworCisJdCA9IGluaXRfbm90ZXNfY2hlY2soInNob3ciKTsKKwlub3RlID0gZ2V0X25vdGUodCwgb2JqZWN0KTsKKworCWlmICghbm90ZSkKKwkJcmV0dmFsID0gZXJyb3IoXygiTm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIpLAorCQkJICAgICAgIHNoYTFfdG9faGV4KG9iamVjdCkpOworCWVsc2UgeworCQljb25zdCBjaGFyICpzaG93X2FyZ3NbM10gPSB7InNob3ciLCBzaGExX3RvX2hleChub3RlKSwgTlVMTH07CisJCXJldHZhbCA9IGV4ZWN2X2dpdF9jbWQoc2hvd19hcmdzKTsKKwl9CisJZnJlZV9ub3Rlcyh0KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG1lcmdlX2Fib3J0KHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvKQoreworCWludCByZXQgPSAwOworCisJLyoKKwkgKiBSZW1vdmUgLmdpdC9OT1RFU19NRVJHRV9QQVJUSUFMIGFuZCAuZ2l0L05PVEVTX01FUkdFX1JFRiwgYW5kIGNhbGwKKwkgKiBub3Rlc19tZXJnZV9hYm9ydCgpIHRvIHJlbW92ZSAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLgorCSAqLworCisJaWYgKGRlbGV0ZV9yZWYoIk5PVEVTX01FUkdFX1BBUlRJQUwiLCBOVUxMLCAwKSkKKwkJcmV0ICs9IGVycm9yKCJGYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9QQVJUSUFMIik7CisJaWYgKGRlbGV0ZV9yZWYoIk5PVEVTX01FUkdFX1JFRiIsIE5VTEwsIFJFRl9OT0RFUkVGKSkKKwkJcmV0ICs9IGVycm9yKCJGYWlsZWQgdG8gZGVsZXRlIHJlZiBOT1RFU19NRVJHRV9SRUYiKTsKKwlpZiAobm90ZXNfbWVyZ2VfYWJvcnQobykpCisJCXJldCArPSBlcnJvcigiRmFpbGVkIHRvIHJlbW92ZSAnZ2l0IG5vdGVzIG1lcmdlJyB3b3JrdHJlZSIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfY29tbWl0KHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvKQoreworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXSwgcGFyZW50X3NoYTFbMjBdOworCXN0cnVjdCBub3Rlc190cmVlICp0OworCXN0cnVjdCBjb21taXQgKnBhcnRpYWw7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHByZXR0eV9jdHg7CisJdm9pZCAqbG9jYWxfcmVmX3RvX2ZyZWU7CisJaW50IHJldDsKKworCS8qCisJICogUmVhZCBwYXJ0aWFsIG1lcmdlIHJlc3VsdCBmcm9tIC5naXQvTk9URVNfTUVSR0VfUEFSVElBTCwKKwkgKiBhbmQgdGFyZ2V0IG5vdGVzIHJlZiBmcm9tIC5naXQvTk9URVNfTUVSR0VfUkVGLgorCSAqLworCisJaWYgKGdldF9zaGExKCJOT1RFU19NRVJHRV9QQVJUSUFMIiwgc2hhMSkpCisJCWRpZSgiRmFpbGVkIHRvIHJlYWQgcmVmIE5PVEVTX01FUkdFX1BBUlRJQUwiKTsKKwllbHNlIGlmICghKHBhcnRpYWwgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKSkpCisJCWRpZSgiQ291bGQgbm90IGZpbmQgY29tbWl0IGZyb20gTk9URVNfTUVSR0VfUEFSVElBTC4iKTsKKwllbHNlIGlmIChwYXJzZV9jb21taXQocGFydGlhbCkpCisJCWRpZSgiQ291bGQgbm90IHBhcnNlIGNvbW1pdCBmcm9tIE5PVEVTX01FUkdFX1BBUlRJQUwuIik7CisKKwlpZiAocGFydGlhbC0+cGFyZW50cykKKwkJaGFzaGNweShwYXJlbnRfc2hhMSwgcGFydGlhbC0+cGFyZW50cy0+aXRlbS0+b2JqZWN0LnNoYTEpOworCWVsc2UKKwkJaGFzaGNscihwYXJlbnRfc2hhMSk7CisKKwl0ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG5vdGVzX3RyZWUpKTsKKwlpbml0X25vdGVzKHQsICJOT1RFU19NRVJHRV9QQVJUSUFMIiwgY29tYmluZV9ub3Rlc19vdmVyd3JpdGUsIDApOworCisJby0+bG9jYWxfcmVmID0gbG9jYWxfcmVmX3RvX2ZyZWUgPQorCQlyZXNvbHZlX3JlZmR1cCgiTk9URVNfTUVSR0VfUkVGIiwgMCwgc2hhMSwgTlVMTCk7CisJaWYgKCFvLT5sb2NhbF9yZWYpCisJCWRpZSgiRmFpbGVkIHRvIHJlc29sdmUgTk9URVNfTUVSR0VfUkVGIik7CisKKwlpZiAobm90ZXNfbWVyZ2VfY29tbWl0KG8sIHQsIHBhcnRpYWwsIHNoYTEpKQorCQlkaWUoIkZhaWxlZCB0byBmaW5hbGl6ZSBub3RlcyBtZXJnZSIpOworCisJLyogUmV1c2UgZXhpc3RpbmcgY29tbWl0IG1lc3NhZ2UgaW4gcmVmbG9nIG1lc3NhZ2UgKi8KKwltZW1zZXQoJnByZXR0eV9jdHgsIDAsIHNpemVvZihwcmV0dHlfY3R4KSk7CisJZm9ybWF0X2NvbW1pdF9tZXNzYWdlKHBhcnRpYWwsICIlcyIsICZtc2csICZwcmV0dHlfY3R4KTsKKwlzdHJidWZfdHJpbSgmbXNnKTsKKwlzdHJidWZfaW5zZXJ0KCZtc2csIDAsICJub3RlczogIiwgNyk7CisJdXBkYXRlX3JlZihtc2cuYnVmLCBvLT5sb2NhbF9yZWYsIHNoYTEsCisJCSAgIGlzX251bGxfc2hhMShwYXJlbnRfc2hhMSkgPyBOVUxMIDogcGFyZW50X3NoYTEsCisJCSAgIDAsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCisJZnJlZV9ub3Rlcyh0KTsKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKwlyZXQgPSBtZXJnZV9hYm9ydChvKTsKKwlmcmVlKGxvY2FsX3JlZl90b19mcmVlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdpdF9jb25maWdfZ2V0X25vdGVzX3N0cmF0ZWd5KGNvbnN0IGNoYXIgKmtleSwKKwkJCQkJIGVudW0gbm90ZXNfbWVyZ2Vfc3RyYXRlZ3kgKnN0cmF0ZWd5KQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKGdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdChrZXksICZ2YWx1ZSkpCisJCXJldHVybiAxOworCWlmIChwYXJzZV9ub3Rlc19tZXJnZV9zdHJhdGVneSh2YWx1ZSwgc3RyYXRlZ3kpKQorCQlnaXRfZGllX2NvbmZpZyhrZXksICJ1bmtub3duIG5vdGVzIG1lcmdlIHN0cmF0ZWd5ICVzIiwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiByZW1vdGVfcmVmID0gU1RSQlVGX0lOSVQsIG1zZyA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGNoYXIgcmVzdWx0X3NoYTFbMjBdOworCXN0cnVjdCBub3Rlc190cmVlICp0OworCXN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zIG87CisJaW50IGRvX21lcmdlID0gMCwgZG9fY29tbWl0ID0gMCwgZG9fYWJvcnQgPSAwOworCWludCB2ZXJib3NpdHkgPSAwLCByZXN1bHQ7CisJY29uc3QgY2hhciAqc3RyYXRlZ3kgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfR1JPVVAoTl8oIkdlbmVyYWwgb3B0aW9ucyIpKSwKKwkJT1BUX19WRVJCT1NJVFkoJnZlcmJvc2l0eSksCisJCU9QVF9HUk9VUChOXygiTWVyZ2Ugb3B0aW9ucyIpKSwKKwkJT1BUX1NUUklORygncycsICJzdHJhdGVneSIsICZzdHJhdGVneSwgTl8oInN0cmF0ZWd5IiksCisJCQkgICBOXygicmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuIHN0cmF0ZWd5ICIKKwkJCSAgICAgICIobWFudWFsL291cnMvdGhlaXJzL3VuaW9uL2NhdF9zb3J0X3VuaXEpIikpLAorCQlPUFRfR1JPVVAoTl8oIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiKSksCisJCXsgT1BUSU9OX1NFVF9JTlQsIDAsICJjb21taXQiLCAmZG9fY29tbWl0LCBOVUxMLAorCQkJTl8oImZpbmFsaXplIG5vdGVzIG1lcmdlIGJ5IGNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgMX0sCisJCU9QVF9HUk9VUChOXygiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIpKSwKKwkJeyBPUFRJT05fU0VUX0lOVCwgMCwgImFib3J0IiwgJmRvX2Fib3J0LCBOVUxMLAorCQkJTl8oImFib3J0IG5vdGVzIG1lcmdlIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIDF9LAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfbm90ZXNfbWVyZ2VfdXNhZ2UsIDApOworCisJaWYgKHN0cmF0ZWd5IHx8IGRvX2NvbW1pdCArIGRvX2Fib3J0ID09IDApCisJCWRvX21lcmdlID0gMTsKKwlpZiAoZG9fbWVyZ2UgKyBkb19jb21taXQgKyBkb19hYm9ydCAhPSAxKSB7CisJCWVycm9yKCJjYW5ub3QgbWl4IC0tY29tbWl0LCAtLWFib3J0IG9yIC1zLy0tc3RyYXRlZ3kiKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19tZXJnZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaWYgKGRvX21lcmdlICYmIGFyZ2MgIT0gMSkgeworCQllcnJvcigiTXVzdCBzcGVjaWZ5IGEgbm90ZXMgcmVmIHRvIG1lcmdlIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfbWVyZ2VfdXNhZ2UsIG9wdGlvbnMpOworCX0gZWxzZSBpZiAoIWRvX21lcmdlICYmIGFyZ2MpIHsKKwkJZXJyb3IoInRvbyBtYW55IHBhcmFtZXRlcnMiKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19tZXJnZV91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJaW5pdF9ub3Rlc19tZXJnZV9vcHRpb25zKCZvKTsKKwlvLnZlcmJvc2l0eSA9IHZlcmJvc2l0eSArIE5PVEVTX01FUkdFX1ZFUkJPU0lUWV9ERUZBVUxUOworCisJaWYgKGRvX2Fib3J0KQorCQlyZXR1cm4gbWVyZ2VfYWJvcnQoJm8pOworCWlmIChkb19jb21taXQpCisJCXJldHVybiBtZXJnZV9jb21taXQoJm8pOworCisJby5sb2NhbF9yZWYgPSBkZWZhdWx0X25vdGVzX3JlZigpOworCXN0cmJ1Zl9hZGRzdHIoJnJlbW90ZV9yZWYsIGFyZ3ZbMF0pOworCWV4cGFuZF9ub3Rlc19yZWYoJnJlbW90ZV9yZWYpOworCW8ucmVtb3RlX3JlZiA9IHJlbW90ZV9yZWYuYnVmOworCisJdCA9IGluaXRfbm90ZXNfY2hlY2soIm1lcmdlIik7CisKKwlpZiAoc3RyYXRlZ3kpIHsKKwkJaWYgKHBhcnNlX25vdGVzX21lcmdlX3N0cmF0ZWd5KHN0cmF0ZWd5LCAmby5zdHJhdGVneSkpIHsKKwkJCWVycm9yKCJVbmtub3duIC1zLy0tc3RyYXRlZ3k6ICVzIiwgc3RyYXRlZ3kpOworCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc19tZXJnZV91c2FnZSwgb3B0aW9ucyk7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIG1lcmdlX2tleSA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpzaG9ydF9yZWYgPSBOVUxMOworCisJCWlmICghc2tpcF9wcmVmaXgoby5sb2NhbF9yZWYsICJyZWZzL25vdGVzLyIsICZzaG9ydF9yZWYpKQorCQkJZGllKCJCVUc6IGxvY2FsIHJlZiAlcyBpcyBvdXRzaWRlIG9mIHJlZnMvbm90ZXMvIiwKKwkJCSAgICBvLmxvY2FsX3JlZik7CisKKwkJc3RyYnVmX2FkZGYoJm1lcmdlX2tleSwgIm5vdGVzLiVzLm1lcmdlU3RyYXRlZ3kiLCBzaG9ydF9yZWYpOworCisJCWlmIChnaXRfY29uZmlnX2dldF9ub3Rlc19zdHJhdGVneShtZXJnZV9rZXkuYnVmLCAmby5zdHJhdGVneSkpCisJCQlnaXRfY29uZmlnX2dldF9ub3Rlc19zdHJhdGVneSgibm90ZXMubWVyZ2VTdHJhdGVneSIsICZvLnN0cmF0ZWd5KTsKKworCQlzdHJidWZfcmVsZWFzZSgmbWVyZ2Vfa2V5KTsKKwl9CisKKwlzdHJidWZfYWRkZigmbXNnLCAibm90ZXM6IE1lcmdlZCBub3RlcyBmcm9tICVzIGludG8gJXMiLAorCQkgICAgcmVtb3RlX3JlZi5idWYsIGRlZmF1bHRfbm90ZXNfcmVmKCkpOworCXN0cmJ1Zl9hZGQoJihvLmNvbW1pdF9tc2cpLCBtc2cuYnVmICsgNywgbXNnLmxlbiAtIDcpOyAvKiBza2lwICJub3RlczogIiAqLworCisJcmVzdWx0ID0gbm90ZXNfbWVyZ2UoJm8sIHQsIHJlc3VsdF9zaGExKTsKKworCWlmIChyZXN1bHQgPj0gMCkgLyogTWVyZ2UgcmVzdWx0ZWQgKHRyaXZpYWxseSkgaW4gcmVzdWx0X3NoYTEgKi8KKwkJLyogVXBkYXRlIGRlZmF1bHQgbm90ZXMgcmVmIHdpdGggbmV3IGNvbW1pdCAqLworCQl1cGRhdGVfcmVmKG1zZy5idWYsIGRlZmF1bHRfbm90ZXNfcmVmKCksIHJlc3VsdF9zaGExLCBOVUxMLAorCQkJICAgMCwgVVBEQVRFX1JFRlNfRElFX09OX0VSUik7CisJZWxzZSB7IC8qIE1lcmdlIGhhcyB1bnJlc29sdmVkIGNvbmZsaWN0cyAqLworCQljaGFyICpleGlzdGluZzsKKwkJLyogVXBkYXRlIC5naXQvTk9URVNfTUVSR0VfUEFSVElBTCB3aXRoIHBhcnRpYWwgbWVyZ2UgcmVzdWx0ICovCisJCXVwZGF0ZV9yZWYobXNnLmJ1ZiwgIk5PVEVTX01FUkdFX1BBUlRJQUwiLCByZXN1bHRfc2hhMSwgTlVMTCwKKwkJCSAgIDAsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCQkvKiBTdG9yZSByZWYtdG8tYmUtdXBkYXRlZCBpbnRvIC5naXQvTk9URVNfTUVSR0VfUkVGICovCisJCWV4aXN0aW5nID0gZmluZF9zaGFyZWRfc3ltcmVmKCJOT1RFU19NRVJHRV9SRUYiLCBkZWZhdWx0X25vdGVzX3JlZigpKTsKKwkJaWYgKGV4aXN0aW5nKQorCQkJZGllKF8oIkEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIiksCisJCQkgICAgZGVmYXVsdF9ub3Rlc19yZWYoKSwgZXhpc3RpbmcpOworCQlpZiAoY3JlYXRlX3N5bXJlZigiTk9URVNfTUVSR0VfUkVGIiwgZGVmYXVsdF9ub3Rlc19yZWYoKSwgTlVMTCkpCisJCQlkaWUoIkZhaWxlZCB0byBzdG9yZSBsaW5rIHRvIGN1cnJlbnQgbm90ZXMgcmVmICglcykiLAorCQkJICAgIGRlZmF1bHRfbm90ZXNfcmVmKCkpOworCQlwcmludGYoIkF1dG9tYXRpYyBub3RlcyBtZXJnZSBmYWlsZWQuIEZpeCBjb25mbGljdHMgaW4gJXMgYW5kICIKKwkJICAgICAgICJjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQnLCBvciAiCisJCSAgICAgICAiYWJvcnQgdGhlIG1lcmdlIHdpdGggJ2dpdCBub3RlcyBtZXJnZSAtLWFib3J0Jy5cbiIsCisJCSAgICAgICBnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpOworCX0KKworCWZyZWVfbm90ZXModCk7CisJc3RyYnVmX3JlbGVhc2UoJnJlbW90ZV9yZWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZtc2cpOworCXJldHVybiByZXN1bHQgPCAwOyAvKiByZXR1cm4gbm9uLXplcm8gb24gY29uZmxpY3RzICovCit9CisKKyNkZWZpbmUgSUdOT1JFX01JU1NJTkcgMQorCitzdGF0aWMgaW50IHJlbW92ZV9vbmVfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgZmxhZykKK3sKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaWYgKGdldF9zaGExKG5hbWUsIHNoYTEpKQorCQlyZXR1cm4gZXJyb3IoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iKSwgbmFtZSk7CisJc3RhdHVzID0gcmVtb3ZlX25vdGUodCwgc2hhMSk7CisJaWYgKHN0YXR1cykKKwkJZnByaW50ZihzdGRlcnIsIF8oIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIiksIG5hbWUpOworCWVsc2UKKwkJZnByaW50ZihzdGRlcnIsIF8oIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIiksIG5hbWUpOworCXJldHVybiAoZmxhZyAmIElHTk9SRV9NSVNTSU5HKSA/IDAgOiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2NtZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwl1bnNpZ25lZCBmbGFnID0gMDsKKwlpbnQgZnJvbV9zdGRpbiA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CSVQoMCwgImlnbm9yZS1taXNzaW5nIiwgJmZsYWcsCisJCQlOXygiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIiksCisJCQlJR05PUkVfTUlTU0lORyksCisJCU9QVF9CT09MKDAsICJzdGRpbiIsICZmcm9tX3N0ZGluLAorCQkJICAgIE5fKCJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlzdHJ1Y3Qgbm90ZXNfdHJlZSAqdDsKKwlpbnQgcmV0dmFsID0gMDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgZ2l0X25vdGVzX3JlbW92ZV91c2FnZSwgMCk7CisKKwl0ID0gaW5pdF9ub3Rlc19jaGVjaygicmVtb3ZlIik7CisKKwlpZiAoIWFyZ2MgJiYgIWZyb21fc3RkaW4pIHsKKwkJcmV0dmFsID0gcmVtb3ZlX29uZV9ub3RlKHQsICJIRUFEIiwgZmxhZyk7CisJfSBlbHNlIHsKKwkJd2hpbGUgKCphcmd2KSB7CisJCQlyZXR2YWwgfD0gcmVtb3ZlX29uZV9ub3RlKHQsICphcmd2LCBmbGFnKTsKKwkJCWFyZ3YrKzsKKwkJfQorCX0KKwlpZiAoZnJvbV9zdGRpbikgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCXdoaWxlIChzdHJidWZfZ2V0d2hvbGVsaW5lKCZzYiwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQkJc3RyYnVmX3J0cmltKCZzYik7CisJCQlyZXR2YWwgfD0gcmVtb3ZlX29uZV9ub3RlKHQsIHNiLmJ1ZiwgZmxhZyk7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisJaWYgKCFyZXR2YWwpCisJCWNvbW1pdF9ub3Rlcyh0LCAiTm90ZXMgcmVtb3ZlZCBieSAnZ2l0IG5vdGVzIHJlbW92ZSciKTsKKwlmcmVlX25vdGVzKHQpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG5vdGVzX3RyZWUgKnQ7CisJaW50IHNob3dfb25seSA9IDAsIHZlcmJvc2UgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX0RSWV9SVU4oJnNob3dfb25seSwgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIpLAorCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsICJyZXBvcnQgcHJ1bmVkIG5vdGVzIiksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF9ub3Rlc19wcnVuZV91c2FnZSwKKwkJCSAgICAgMCk7CisKKwlpZiAoYXJnYykgeworCQllcnJvcihfKCJ0b28gbWFueSBwYXJhbWV0ZXJzIikpOworCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X25vdGVzX3BydW5lX3VzYWdlLCBvcHRpb25zKTsKKwl9CisKKwl0ID0gaW5pdF9ub3Rlc19jaGVjaygicHJ1bmUiKTsKKworCXBydW5lX25vdGVzKHQsICh2ZXJib3NlID8gTk9URVNfUFJVTkVfVkVSQk9TRSA6IDApIHwKKwkJKHNob3dfb25seSA/IE5PVEVTX1BSVU5FX1ZFUkJPU0V8Tk9URVNfUFJVTkVfRFJZUlVOIDogMCkgKTsKKwlpZiAoIXNob3dfb25seSkKKwkJY29tbWl0X25vdGVzKHQsICJOb3RlcyByZW1vdmVkIGJ5ICdnaXQgbm90ZXMgcHJ1bmUnIik7CisJZnJlZV9ub3Rlcyh0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geyBPUFRfRU5EKCkgfTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsCisJCQkgICAgIGdpdF9ub3Rlc19nZXRfcmVmX3VzYWdlLCAwKTsKKworCWlmIChhcmdjKSB7CisJCWVycm9yKCJ0b28gbWFueSBwYXJhbWV0ZXJzIik7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfbm90ZXNfZ2V0X3JlZl91c2FnZSwgb3B0aW9ucyk7CisJfQorCisJcHV0cyhkZWZhdWx0X25vdGVzX3JlZigpKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9ub3RlcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcmVzdWx0OworCWNvbnN0IGNoYXIgKm92ZXJyaWRlX25vdGVzX3JlZiA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoMCwgInJlZiIsICZvdmVycmlkZV9ub3Rlc19yZWYsIE5fKCJub3Rlcy1yZWYiKSwKKwkJCSAgIE5fKCJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXMtcmVmPiIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGdpdF9ub3Rlc191c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlpZiAob3ZlcnJpZGVfbm90ZXNfcmVmKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIG92ZXJyaWRlX25vdGVzX3JlZik7CisJCWV4cGFuZF9ub3Rlc19yZWYoJnNiKTsKKwkJc2V0ZW52KCJHSVRfTk9URVNfUkVGIiwgc2IuYnVmLCAxKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisKKwlpZiAoYXJnYyA8IDEgfHwgIXN0cmNtcChhcmd2WzBdLCAibGlzdCIpKQorCQlyZXN1bHQgPSBsaXN0KGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiYWRkIikpCisJCXJlc3VsdCA9IGFkZChhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImNvcHkiKSkKKwkJcmVzdWx0ID0gY29weShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgImFwcGVuZCIpIHx8ICFzdHJjbXAoYXJndlswXSwgImVkaXQiKSkKKwkJcmVzdWx0ID0gYXBwZW5kX2VkaXQoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJzaG93IikpCisJCXJlc3VsdCA9IHNob3coYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJtZXJnZSIpKQorCQlyZXN1bHQgPSBtZXJnZShhcmdjLCBhcmd2LCBwcmVmaXgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInJlbW92ZSIpKQorCQlyZXN1bHQgPSByZW1vdmVfY21kKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAicHJ1bmUiKSkKKwkJcmVzdWx0ID0gcHJ1bmUoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJnZXQtcmVmIikpCisJCXJlc3VsdCA9IGdldF9yZWYoYXJnYywgYXJndiwgcHJlZml4KTsKKwllbHNlIHsKKwkJcmVzdWx0ID0gZXJyb3IoXygiVW5rbm93biBzdWJjb21tYW5kOiAlcyIpLCBhcmd2WzBdKTsKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9ub3Rlc191c2FnZSwgb3B0aW9ucyk7CisJfQorCisJcmV0dXJuIHJlc3VsdCA/IDEgOiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9wYWNrLW9iamVjdHMuYyBiL2J1aWx0aW4vcGFjay1vYmplY3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM2M2Y4ZgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcGFjay1vYmplY3RzLmMKQEAgLTAsMCArMSwyNzg0IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorI2luY2x1ZGUgImNzdW0tZmlsZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgInBhY2stb2JqZWN0cy5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgorI2luY2x1ZGUgInBhY2stYml0bWFwLmgiCisjaW5jbHVkZSAicmVhY2hhYmxlLmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKnBhY2tfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIpLAorCU5fKCJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIiksCisJTlVMTAorfTsKKworLyoKKyAqIE9iamVjdHMgd2UgYXJlIGdvaW5nIHRvIHBhY2sgYXJlIGNvbGxlY3RlZCBpbiB0aGUgYHRvX3BhY2tgIHN0cnVjdHVyZS4KKyAqIEl0IGNvbnRhaW5zIGFuIGFycmF5IChkeW5hbWljYWxseSBleHBhbmRlZCkgb2YgdGhlIG9iamVjdCBkYXRhLCBhbmQgYSBtYXAKKyAqIHRoYXQgY2FuIHJlc29sdmUgU0hBMXMgdG8gdGhlaXIgcG9zaXRpb24gaW4gdGhlIGFycmF5LgorICovCitzdGF0aWMgc3RydWN0IHBhY2tpbmdfZGF0YSB0b19wYWNrOworCitzdGF0aWMgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqd3JpdHRlbl9saXN0Oworc3RhdGljIHVpbnQzMl90IG5yX3Jlc3VsdCwgbnJfd3JpdHRlbjsKKworc3RhdGljIGludCBub25fZW1wdHk7CitzdGF0aWMgaW50IHJldXNlX2RlbHRhID0gMSwgcmV1c2Vfb2JqZWN0ID0gMTsKK3N0YXRpYyBpbnQga2VlcF91bnJlYWNoYWJsZSwgdW5wYWNrX3VucmVhY2hhYmxlLCBpbmNsdWRlX3RhZzsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVucGFja191bnJlYWNoYWJsZV9leHBpcmF0aW9uOworc3RhdGljIGludCBsb2NhbDsKK3N0YXRpYyBpbnQgaW5jcmVtZW50YWw7CitzdGF0aWMgaW50IGlnbm9yZV9wYWNrZWRfa2VlcDsKK3N0YXRpYyBpbnQgYWxsb3dfb2ZzX2RlbHRhOworc3RhdGljIHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gcGFja19pZHhfb3B0czsKK3N0YXRpYyBjb25zdCBjaGFyICpiYXNlX25hbWU7CitzdGF0aWMgaW50IHByb2dyZXNzID0gMTsKK3N0YXRpYyBpbnQgd2luZG93ID0gMTA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYWNrX3NpemVfbGltaXQ7CitzdGF0aWMgaW50IGRlcHRoID0gNTA7CitzdGF0aWMgaW50IGRlbHRhX3NlYXJjaF90aHJlYWRzOworc3RhdGljIGludCBwYWNrX3RvX3N0ZG91dDsKK3N0YXRpYyBpbnQgbnVtX3ByZWZlcnJlZF9iYXNlOworc3RhdGljIHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3Nfc3RhdGU7CitzdGF0aWMgaW50IHBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CitzdGF0aWMgaW50IHBhY2tfY29tcHJlc3Npb25fc2VlbjsKKworc3RhdGljIHN0cnVjdCBwYWNrZWRfZ2l0ICpyZXVzZV9wYWNrZmlsZTsKK3N0YXRpYyB1aW50MzJfdCByZXVzZV9wYWNrZmlsZV9vYmplY3RzOworc3RhdGljIG9mZl90IHJldXNlX3BhY2tmaWxlX29mZnNldDsKKworc3RhdGljIGludCB1c2VfYml0bWFwX2luZGV4ID0gMTsKK3N0YXRpYyBpbnQgd3JpdGVfYml0bWFwX2luZGV4Oworc3RhdGljIHVpbnQxNl90IHdyaXRlX2JpdG1hcF9vcHRpb25zOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkZWx0YV9jYWNoZV9zaXplID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9kZWx0YV9jYWNoZV9zaXplID0gMjU2ICogMTAyNCAqIDEwMjQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWNoZV9tYXhfc21hbGxfZGVsdGFfc2l6ZSA9IDEwMDA7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHdpbmRvd19tZW1vcnlfbGltaXQgPSAwOworCisvKgorICogc3RhdHMKKyAqLworc3RhdGljIHVpbnQzMl90IHdyaXR0ZW4sIHdyaXR0ZW5fZGVsdGE7CitzdGF0aWMgdWludDMyX3QgcmV1c2VkLCByZXVzZWRfZGVsdGE7CisKKy8qCisgKiBJbmRleGVkIGNvbW1pdHMKKyAqLworc3RhdGljIHN0cnVjdCBjb21taXQgKippbmRleGVkX2NvbW1pdHM7CitzdGF0aWMgdW5zaWduZWQgaW50IGluZGV4ZWRfY29tbWl0c19ucjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5kZXhlZF9jb21taXRzX2FsbG9jOworCitzdGF0aWMgdm9pZCBpbmRleF9jb21taXRfZm9yX2JpdG1hcChzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaWYgKGluZGV4ZWRfY29tbWl0c19uciA+PSBpbmRleGVkX2NvbW1pdHNfYWxsb2MpIHsKKwkJaW5kZXhlZF9jb21taXRzX2FsbG9jID0gKGluZGV4ZWRfY29tbWl0c19hbGxvYyArIDMyKSAqIDI7CisJCVJFQUxMT0NfQVJSQVkoaW5kZXhlZF9jb21taXRzLCBpbmRleGVkX2NvbW1pdHNfYWxsb2MpOworCX0KKworCWluZGV4ZWRfY29tbWl0c1tpbmRleGVkX2NvbW1pdHNfbnIrK10gPSBjb21taXQ7Cit9CisKK3N0YXRpYyB2b2lkICpnZXRfZGVsdGEoc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkpCit7CisJdW5zaWduZWQgbG9uZyBzaXplLCBiYXNlX3NpemUsIGRlbHRhX3NpemU7CisJdm9pZCAqYnVmLCAqYmFzZV9idWYsICpkZWx0YV9idWY7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJYnVmID0gcmVhZF9zaGExX2ZpbGUoZW50cnktPmlkeC5zaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlkaWUoInVuYWJsZSB0byByZWFkICVzIiwgc2hhMV90b19oZXgoZW50cnktPmlkeC5zaGExKSk7CisJYmFzZV9idWYgPSByZWFkX3NoYTFfZmlsZShlbnRyeS0+ZGVsdGEtPmlkeC5zaGExLCAmdHlwZSwgJmJhc2Vfc2l6ZSk7CisJaWYgKCFiYXNlX2J1ZikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCAlcyIsIHNoYTFfdG9faGV4KGVudHJ5LT5kZWx0YS0+aWR4LnNoYTEpKTsKKwlkZWx0YV9idWYgPSBkaWZmX2RlbHRhKGJhc2VfYnVmLCBiYXNlX3NpemUsCisJCQkgICAgICAgYnVmLCBzaXplLCAmZGVsdGFfc2l6ZSwgMCk7CisJaWYgKCFkZWx0YV9idWYgfHwgZGVsdGFfc2l6ZSAhPSBlbnRyeS0+ZGVsdGFfc2l6ZSkKKwkJZGllKCJkZWx0YSBzaXplIGNoYW5nZWQiKTsKKwlmcmVlKGJ1Zik7CisJZnJlZShiYXNlX2J1Zik7CisJcmV0dXJuIGRlbHRhX2J1ZjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fY29tcHJlc3Modm9pZCAqKnBwdHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdm9pZCAqaW4sICpvdXQ7CisJdW5zaWduZWQgbG9uZyBtYXhzaXplOworCisJZ2l0X2RlZmxhdGVfaW5pdCgmc3RyZWFtLCBwYWNrX2NvbXByZXNzaW9uX2xldmVsKTsKKwltYXhzaXplID0gZ2l0X2RlZmxhdGVfYm91bmQoJnN0cmVhbSwgc2l6ZSk7CisKKwlpbiA9ICpwcHRyOworCW91dCA9IHhtYWxsb2MobWF4c2l6ZSk7CisJKnBwdHIgPSBvdXQ7CisKKwlzdHJlYW0ubmV4dF9pbiA9IGluOworCXN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJc3RyZWFtLm5leHRfb3V0ID0gb3V0OworCXN0cmVhbS5hdmFpbF9vdXQgPSBtYXhzaXplOworCXdoaWxlIChnaXRfZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCkgPT0gWl9PSykKKwkJOyAvKiBub3RoaW5nICovCisJZ2l0X2RlZmxhdGVfZW5kKCZzdHJlYW0pOworCisJZnJlZShpbik7CisJcmV0dXJuIHN0cmVhbS50b3RhbF9vdXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlX2xhcmdlX2Jsb2JfZGF0YShzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0LCBzdHJ1Y3Qgc2hhMWZpbGUgKmYsCisJCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCXVuc2lnbmVkIGNoYXIgaWJ1ZlsxMDI0ICogMTZdOworCXVuc2lnbmVkIGNoYXIgb2J1ZlsxMDI0ICogMTZdOworCXVuc2lnbmVkIGxvbmcgb2xlbiA9IDA7CisKKwlnaXRfZGVmbGF0ZV9pbml0KCZzdHJlYW0sIHBhY2tfY29tcHJlc3Npb25fbGV2ZWwpOworCisJZm9yICg7OykgeworCQlzc2l6ZV90IHJlYWRsZW47CisJCWludCB6cmV0ID0gWl9PSzsKKwkJcmVhZGxlbiA9IHJlYWRfaXN0cmVhbShzdCwgaWJ1Ziwgc2l6ZW9mKGlidWYpKTsKKwkJaWYgKHJlYWRsZW4gPT0gLTEpCisJCQlkaWUoXygidW5hYmxlIHRvIHJlYWQgJXMiKSwgc2hhMV90b19oZXgoc2hhMSkpOworCisJCXN0cmVhbS5uZXh0X2luID0gaWJ1ZjsKKwkJc3RyZWFtLmF2YWlsX2luID0gcmVhZGxlbjsKKwkJd2hpbGUgKChzdHJlYW0uYXZhaWxfaW4gfHwgcmVhZGxlbiA9PSAwKSAmJgorCQkgICAgICAgKHpyZXQgPT0gWl9PSyB8fCB6cmV0ID09IFpfQlVGX0VSUk9SKSkgeworCQkJc3RyZWFtLm5leHRfb3V0ID0gb2J1ZjsKKwkJCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2Yob2J1Zik7CisJCQl6cmV0ID0gZ2l0X2RlZmxhdGUoJnN0cmVhbSwgcmVhZGxlbiA/IDAgOiBaX0ZJTklTSCk7CisJCQlzaGExd3JpdGUoZiwgb2J1Ziwgc3RyZWFtLm5leHRfb3V0IC0gb2J1Zik7CisJCQlvbGVuICs9IHN0cmVhbS5uZXh0X291dCAtIG9idWY7CisJCX0KKwkJaWYgKHN0cmVhbS5hdmFpbF9pbikKKwkJCWRpZShfKCJkZWZsYXRlIGVycm9yICglZCkiKSwgenJldCk7CisJCWlmIChyZWFkbGVuID09IDApIHsKKwkJCWlmICh6cmV0ICE9IFpfU1RSRUFNX0VORCkKKwkJCQlkaWUoXygiZGVmbGF0ZSBlcnJvciAoJWQpIiksIHpyZXQpOworCQkJYnJlYWs7CisJCX0KKwl9CisJZ2l0X2RlZmxhdGVfZW5kKCZzdHJlYW0pOworCXJldHVybiBvbGVuOworfQorCisvKgorICogd2UgYXJlIGdvaW5nIHRvIHJldXNlIHRoZSBleGlzdGluZyBvYmplY3QgZGF0YSBhcyBpcy4gIG1ha2UKKyAqIHN1cmUgaXQgaXMgbm90IGNvcnJ1cHQuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfcGFja19pbmZsYXRlKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQlzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCW9mZl90IG9mZnNldCwKKwkJb2ZmX3QgbGVuLAorCQl1bnNpZ25lZCBsb25nIGV4cGVjdCkKK3sKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdW5zaWduZWQgY2hhciBmYWtlYnVmWzQwOTZdLCAqaW47CisJaW50IHN0OworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlnaXRfaW5mbGF0ZV9pbml0KCZzdHJlYW0pOworCWRvIHsKKwkJaW4gPSB1c2VfcGFjayhwLCB3X2N1cnMsIG9mZnNldCwgJnN0cmVhbS5hdmFpbF9pbik7CisJCXN0cmVhbS5uZXh0X2luID0gaW47CisJCXN0cmVhbS5uZXh0X291dCA9IGZha2VidWY7CisJCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZmFrZWJ1Zik7CisJCXN0ID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgWl9GSU5JU0gpOworCQlvZmZzZXQgKz0gc3RyZWFtLm5leHRfaW4gLSBpbjsKKwl9IHdoaWxlIChzdCA9PSBaX09LIHx8IHN0ID09IFpfQlVGX0VSUk9SKTsKKwlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJcmV0dXJuIChzdCA9PSBaX1NUUkVBTV9FTkQgJiYKKwkJc3RyZWFtLnRvdGFsX291dCA9PSBleHBlY3QgJiYKKwkJc3RyZWFtLnRvdGFsX2luID09IGxlbikgPyAwIDogLTE7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfcGFja19kYXRhKHN0cnVjdCBzaGExZmlsZSAqZiwKKwkJc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCXN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3VycywKKwkJb2ZmX3Qgb2Zmc2V0LAorCQlvZmZfdCBsZW4pCit7CisJdW5zaWduZWQgY2hhciAqaW47CisJdW5zaWduZWQgbG9uZyBhdmFpbDsKKworCXdoaWxlIChsZW4pIHsKKwkJaW4gPSB1c2VfcGFjayhwLCB3X2N1cnMsIG9mZnNldCwgJmF2YWlsKTsKKwkJaWYgKGF2YWlsID4gbGVuKQorCQkJYXZhaWwgPSAodW5zaWduZWQgbG9uZylsZW47CisJCXNoYTF3cml0ZShmLCBpbiwgYXZhaWwpOworCQlvZmZzZXQgKz0gYXZhaWw7CisJCWxlbiAtPSBhdmFpbDsKKwl9Cit9CisKKy8qIFJldHVybiAwIGlmIHdlIHdpbGwgYnVzdCB0aGUgcGFjay1zaXplIGxpbWl0ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV9ub19yZXVzZV9vYmplY3Qoc3RydWN0IHNoYTFmaWxlICpmLCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBsaW1pdCwgaW50IHVzYWJsZV9kZWx0YSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUsIGRhdGFsZW47CisJdW5zaWduZWQgY2hhciBoZWFkZXJbMTBdLCBkaGVhZGVyWzEwXTsKKwl1bnNpZ25lZCBoZHJsZW47CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXZvaWQgKmJ1ZjsKKwlzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0ID0gTlVMTDsKKworCWlmICghdXNhYmxlX2RlbHRhKSB7CisJCWlmIChlbnRyeS0+dHlwZSA9PSBPQkpfQkxPQiAmJgorCQkgICAgZW50cnktPnNpemUgPiBiaWdfZmlsZV90aHJlc2hvbGQgJiYKKwkJICAgIChzdCA9IG9wZW5faXN0cmVhbShlbnRyeS0+aWR4LnNoYTEsICZ0eXBlLCAmc2l6ZSwgTlVMTCkpICE9IE5VTEwpCisJCQlidWYgPSBOVUxMOworCQllbHNlIHsKKwkJCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKGVudHJ5LT5pZHguc2hhMSwgJnR5cGUsICZzaXplKTsKKwkJCWlmICghYnVmKQorCQkJCWRpZShfKCJ1bmFibGUgdG8gcmVhZCAlcyIpLCBzaGExX3RvX2hleChlbnRyeS0+aWR4LnNoYTEpKTsKKwkJfQorCQkvKgorCQkgKiBtYWtlIHN1cmUgbm8gY2FjaGVkIGRlbHRhIGRhdGEgcmVtYWlucyBmcm9tIGEKKwkJICogcHJldmlvdXMgYXR0ZW1wdCBiZWZvcmUgYSBwYWNrIHNwbGl0IG9jY3VycmVkLgorCQkgKi8KKwkJZnJlZShlbnRyeS0+ZGVsdGFfZGF0YSk7CisJCWVudHJ5LT5kZWx0YV9kYXRhID0gTlVMTDsKKwkJZW50cnktPnpfZGVsdGFfc2l6ZSA9IDA7CisJfSBlbHNlIGlmIChlbnRyeS0+ZGVsdGFfZGF0YSkgeworCQlzaXplID0gZW50cnktPmRlbHRhX3NpemU7CisJCWJ1ZiA9IGVudHJ5LT5kZWx0YV9kYXRhOworCQllbnRyeS0+ZGVsdGFfZGF0YSA9IE5VTEw7CisJCXR5cGUgPSAoYWxsb3dfb2ZzX2RlbHRhICYmIGVudHJ5LT5kZWx0YS0+aWR4Lm9mZnNldCkgPworCQkJT0JKX09GU19ERUxUQSA6IE9CSl9SRUZfREVMVEE7CisJfSBlbHNlIHsKKwkJYnVmID0gZ2V0X2RlbHRhKGVudHJ5KTsKKwkJc2l6ZSA9IGVudHJ5LT5kZWx0YV9zaXplOworCQl0eXBlID0gKGFsbG93X29mc19kZWx0YSAmJiBlbnRyeS0+ZGVsdGEtPmlkeC5vZmZzZXQpID8KKwkJCU9CSl9PRlNfREVMVEEgOiBPQkpfUkVGX0RFTFRBOworCX0KKworCWlmIChzdCkJLyogbGFyZ2UgYmxvYiBjYXNlLCBqdXN0IGFzc3VtZSB3ZSBkb24ndCBjb21wcmVzcyB3ZWxsICovCisJCWRhdGFsZW4gPSBzaXplOworCWVsc2UgaWYgKGVudHJ5LT56X2RlbHRhX3NpemUpCisJCWRhdGFsZW4gPSBlbnRyeS0+el9kZWx0YV9zaXplOworCWVsc2UKKwkJZGF0YWxlbiA9IGRvX2NvbXByZXNzKCZidWYsIHNpemUpOworCisJLyoKKwkgKiBUaGUgb2JqZWN0IGhlYWRlciBpcyBhIGJ5dGUgb2YgJ3R5cGUnIGZvbGxvd2VkIGJ5IHplcm8gb3IKKwkgKiBtb3JlIGJ5dGVzIG9mIGxlbmd0aC4KKwkgKi8KKwloZHJsZW4gPSBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKHR5cGUsIHNpemUsIGhlYWRlcik7CisKKwlpZiAodHlwZSA9PSBPQkpfT0ZTX0RFTFRBKSB7CisJCS8qCisJCSAqIERlbHRhcyB3aXRoIHJlbGF0aXZlIGJhc2UgY29udGFpbiBhbiBhZGRpdGlvbmFsCisJCSAqIGVuY29kaW5nIG9mIHRoZSByZWxhdGl2ZSBvZmZzZXQgZm9yIHRoZSBkZWx0YQorCQkgKiBiYXNlIGZyb20gdGhpcyBvYmplY3QncyBwb3NpdGlvbiBpbiB0aGUgcGFjay4KKwkJICovCisJCW9mZl90IG9mcyA9IGVudHJ5LT5pZHgub2Zmc2V0IC0gZW50cnktPmRlbHRhLT5pZHgub2Zmc2V0OworCQl1bnNpZ25lZCBwb3MgPSBzaXplb2YoZGhlYWRlcikgLSAxOworCQlkaGVhZGVyW3Bvc10gPSBvZnMgJiAxMjc7CisJCXdoaWxlIChvZnMgPj49IDcpCisJCQlkaGVhZGVyWy0tcG9zXSA9IDEyOCB8ICgtLW9mcyAmIDEyNyk7CisJCWlmIChsaW1pdCAmJiBoZHJsZW4gKyBzaXplb2YoZGhlYWRlcikgLSBwb3MgKyBkYXRhbGVuICsgMjAgPj0gbGltaXQpIHsKKwkJCWlmIChzdCkKKwkJCQljbG9zZV9pc3RyZWFtKHN0KTsKKwkJCWZyZWUoYnVmKTsKKwkJCXJldHVybiAwOworCQl9CisJCXNoYTF3cml0ZShmLCBoZWFkZXIsIGhkcmxlbik7CisJCXNoYTF3cml0ZShmLCBkaGVhZGVyICsgcG9zLCBzaXplb2YoZGhlYWRlcikgLSBwb3MpOworCQloZHJsZW4gKz0gc2l6ZW9mKGRoZWFkZXIpIC0gcG9zOworCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCS8qCisJCSAqIERlbHRhcyB3aXRoIGEgYmFzZSByZWZlcmVuY2UgY29udGFpbgorCQkgKiBhbiBhZGRpdGlvbmFsIDIwIGJ5dGVzIGZvciB0aGUgYmFzZSBzaGExLgorCQkgKi8KKwkJaWYgKGxpbWl0ICYmIGhkcmxlbiArIDIwICsgZGF0YWxlbiArIDIwID49IGxpbWl0KSB7CisJCQlpZiAoc3QpCisJCQkJY2xvc2VfaXN0cmVhbShzdCk7CisJCQlmcmVlKGJ1Zik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzaGExd3JpdGUoZiwgaGVhZGVyLCBoZHJsZW4pOworCQlzaGExd3JpdGUoZiwgZW50cnktPmRlbHRhLT5pZHguc2hhMSwgMjApOworCQloZHJsZW4gKz0gMjA7CisJfSBlbHNlIHsKKwkJaWYgKGxpbWl0ICYmIGhkcmxlbiArIGRhdGFsZW4gKyAyMCA+PSBsaW1pdCkgeworCQkJaWYgKHN0KQorCQkJCWNsb3NlX2lzdHJlYW0oc3QpOworCQkJZnJlZShidWYpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc2hhMXdyaXRlKGYsIGhlYWRlciwgaGRybGVuKTsKKwl9CisJaWYgKHN0KSB7CisJCWRhdGFsZW4gPSB3cml0ZV9sYXJnZV9ibG9iX2RhdGEoc3QsIGYsIGVudHJ5LT5pZHguc2hhMSk7CisJCWNsb3NlX2lzdHJlYW0oc3QpOworCX0gZWxzZSB7CisJCXNoYTF3cml0ZShmLCBidWYsIGRhdGFsZW4pOworCQlmcmVlKGJ1Zik7CisJfQorCisJcmV0dXJuIGhkcmxlbiArIGRhdGFsZW47Cit9CisKKy8qIFJldHVybiAwIGlmIHdlIHdpbGwgYnVzdCB0aGUgcGFjay1zaXplIGxpbWl0ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB3cml0ZV9yZXVzZV9vYmplY3Qoc3RydWN0IHNoYTFmaWxlICpmLCBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSwKKwkJCQkJdW5zaWduZWQgbG9uZyBsaW1pdCwgaW50IHVzYWJsZV9kZWx0YSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGVudHJ5LT5pbl9wYWNrOworCXN0cnVjdCBwYWNrX3dpbmRvdyAqd19jdXJzID0gTlVMTDsKKwlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeDsKKwlvZmZfdCBvZmZzZXQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlID0gZW50cnktPnR5cGU7CisJdW5zaWduZWQgbG9uZyBkYXRhbGVuOworCXVuc2lnbmVkIGNoYXIgaGVhZGVyWzEwXSwgZGhlYWRlclsxMF07CisJdW5zaWduZWQgaGRybGVuOworCisJaWYgKGVudHJ5LT5kZWx0YSkKKwkJdHlwZSA9IChhbGxvd19vZnNfZGVsdGEgJiYgZW50cnktPmRlbHRhLT5pZHgub2Zmc2V0KSA/CisJCQlPQkpfT0ZTX0RFTFRBIDogT0JKX1JFRl9ERUxUQTsKKwloZHJsZW4gPSBlbmNvZGVfaW5fcGFja19vYmplY3RfaGVhZGVyKHR5cGUsIGVudHJ5LT5zaXplLCBoZWFkZXIpOworCisJb2Zmc2V0ID0gZW50cnktPmluX3BhY2tfb2Zmc2V0OworCXJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBvZmZzZXQpOworCWRhdGFsZW4gPSByZXZpZHhbMV0ub2Zmc2V0IC0gb2Zmc2V0OworCWlmICghcGFja190b19zdGRvdXQgJiYgcC0+aW5kZXhfdmVyc2lvbiA+IDEgJiYKKwkgICAgY2hlY2tfcGFja19jcmMocCwgJndfY3Vycywgb2Zmc2V0LCBkYXRhbGVuLCByZXZpZHgtPm5yKSkgeworCQllcnJvcigiYmFkIHBhY2tlZCBvYmplY3QgQ1JDIGZvciAlcyIsIHNoYTFfdG9faGV4KGVudHJ5LT5pZHguc2hhMSkpOworCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQlyZXR1cm4gd3JpdGVfbm9fcmV1c2Vfb2JqZWN0KGYsIGVudHJ5LCBsaW1pdCwgdXNhYmxlX2RlbHRhKTsKKwl9CisKKwlvZmZzZXQgKz0gZW50cnktPmluX3BhY2tfaGVhZGVyX3NpemU7CisJZGF0YWxlbiAtPSBlbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZTsKKworCWlmICghcGFja190b19zdGRvdXQgJiYgcC0+aW5kZXhfdmVyc2lvbiA9PSAxICYmCisJICAgIGNoZWNrX3BhY2tfaW5mbGF0ZShwLCAmd19jdXJzLCBvZmZzZXQsIGRhdGFsZW4sIGVudHJ5LT5zaXplKSkgeworCQllcnJvcigiY29ycnVwdCBwYWNrZWQgb2JqZWN0IGZvciAlcyIsIHNoYTFfdG9faGV4KGVudHJ5LT5pZHguc2hhMSkpOworCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQlyZXR1cm4gd3JpdGVfbm9fcmV1c2Vfb2JqZWN0KGYsIGVudHJ5LCBsaW1pdCwgdXNhYmxlX2RlbHRhKTsKKwl9CisKKwlpZiAodHlwZSA9PSBPQkpfT0ZTX0RFTFRBKSB7CisJCW9mZl90IG9mcyA9IGVudHJ5LT5pZHgub2Zmc2V0IC0gZW50cnktPmRlbHRhLT5pZHgub2Zmc2V0OworCQl1bnNpZ25lZCBwb3MgPSBzaXplb2YoZGhlYWRlcikgLSAxOworCQlkaGVhZGVyW3Bvc10gPSBvZnMgJiAxMjc7CisJCXdoaWxlIChvZnMgPj49IDcpCisJCQlkaGVhZGVyWy0tcG9zXSA9IDEyOCB8ICgtLW9mcyAmIDEyNyk7CisJCWlmIChsaW1pdCAmJiBoZHJsZW4gKyBzaXplb2YoZGhlYWRlcikgLSBwb3MgKyBkYXRhbGVuICsgMjAgPj0gbGltaXQpIHsKKwkJCXVudXNlX3BhY2soJndfY3Vycyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlzaGExd3JpdGUoZiwgaGVhZGVyLCBoZHJsZW4pOworCQlzaGExd3JpdGUoZiwgZGhlYWRlciArIHBvcywgc2l6ZW9mKGRoZWFkZXIpIC0gcG9zKTsKKwkJaGRybGVuICs9IHNpemVvZihkaGVhZGVyKSAtIHBvczsKKwkJcmV1c2VkX2RlbHRhKys7CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJaWYgKGxpbWl0ICYmIGhkcmxlbiArIDIwICsgZGF0YWxlbiArIDIwID49IGxpbWl0KSB7CisJCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc2hhMXdyaXRlKGYsIGhlYWRlciwgaGRybGVuKTsKKwkJc2hhMXdyaXRlKGYsIGVudHJ5LT5kZWx0YS0+aWR4LnNoYTEsIDIwKTsKKwkJaGRybGVuICs9IDIwOworCQlyZXVzZWRfZGVsdGErKzsKKwl9IGVsc2UgeworCQlpZiAobGltaXQgJiYgaGRybGVuICsgZGF0YWxlbiArIDIwID49IGxpbWl0KSB7CisJCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc2hhMXdyaXRlKGYsIGhlYWRlciwgaGRybGVuKTsKKwl9CisJY29weV9wYWNrX2RhdGEoZiwgcCwgJndfY3Vycywgb2Zmc2V0LCBkYXRhbGVuKTsKKwl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCXJldXNlZCsrOworCXJldHVybiBoZHJsZW4gKyBkYXRhbGVuOworfQorCisvKiBSZXR1cm4gMCBpZiB3ZSB3aWxsIGJ1c3QgdGhlIHBhY2stc2l6ZSBsaW1pdCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgd3JpdGVfb2JqZWN0KHN0cnVjdCBzaGExZmlsZSAqZiwKKwkJCQkgIHN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5LAorCQkJCSAgb2ZmX3Qgd3JpdGVfb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgbGltaXQsIGxlbjsKKwlpbnQgdXNhYmxlX2RlbHRhLCB0b19yZXVzZTsKKworCWlmICghcGFja190b19zdGRvdXQpCisJCWNyYzMyX2JlZ2luKGYpOworCisJLyogYXBwbHkgc2l6ZSBsaW1pdCBpZiBsaW1pdGVkIHBhY2tzaXplIGFuZCBub3QgZmlyc3Qgb2JqZWN0ICovCisJaWYgKCFwYWNrX3NpemVfbGltaXQgfHwgIW5yX3dyaXR0ZW4pCisJCWxpbWl0ID0gMDsKKwllbHNlIGlmIChwYWNrX3NpemVfbGltaXQgPD0gd3JpdGVfb2Zmc2V0KQorCQkvKgorCQkgKiB0aGUgZWFybGllciBvYmplY3QgZGlkIG5vdCBmaXQgdGhlIGxpbWl0OyBhdm9pZAorCQkgKiBtaXN0YWtpbmcgdGhpcyB3aXRoIHVubGltaXRlZCAoaS5lLiBsaW1pdCA9IDApLgorCQkgKi8KKwkJbGltaXQgPSAxOworCWVsc2UKKwkJbGltaXQgPSBwYWNrX3NpemVfbGltaXQgLSB3cml0ZV9vZmZzZXQ7CisKKwlpZiAoIWVudHJ5LT5kZWx0YSkKKwkJdXNhYmxlX2RlbHRhID0gMDsJLyogbm8gZGVsdGEgKi8KKwllbHNlIGlmICghcGFja19zaXplX2xpbWl0KQorCSAgICAgICB1c2FibGVfZGVsdGEgPSAxOwkvKiB1bmxpbWl0ZWQgcGFja2ZpbGUgKi8KKwllbHNlIGlmIChlbnRyeS0+ZGVsdGEtPmlkeC5vZmZzZXQgPT0gKG9mZl90KS0xKQorCQl1c2FibGVfZGVsdGEgPSAwOwkvKiBiYXNlIHdhcyB3cml0dGVuIHRvIGFub3RoZXIgcGFjayAqLworCWVsc2UgaWYgKGVudHJ5LT5kZWx0YS0+aWR4Lm9mZnNldCkKKwkJdXNhYmxlX2RlbHRhID0gMTsJLyogYmFzZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGlzIHBhY2sgKi8KKwllbHNlCisJCXVzYWJsZV9kZWx0YSA9IDA7CS8qIGJhc2UgY291bGQgZW5kIHVwIGluIGFub3RoZXIgcGFjayAqLworCisJaWYgKCFyZXVzZV9vYmplY3QpCisJCXRvX3JldXNlID0gMDsJLyogZXhwbGljaXQgKi8KKwllbHNlIGlmICghZW50cnktPmluX3BhY2spCisJCXRvX3JldXNlID0gMDsJLyogY2FuJ3QgcmV1c2Ugd2hhdCB3ZSBkb24ndCBoYXZlICovCisJZWxzZSBpZiAoZW50cnktPnR5cGUgPT0gT0JKX1JFRl9ERUxUQSB8fCBlbnRyeS0+dHlwZSA9PSBPQkpfT0ZTX0RFTFRBKQorCQkJCS8qIGNoZWNrX29iamVjdCgpIGRlY2lkZWQgaXQgZm9yIHVzIC4uLiAqLworCQl0b19yZXVzZSA9IHVzYWJsZV9kZWx0YTsKKwkJCQkvKiAuLi4gYnV0IHBhY2sgc3BsaXQgbWF5IG92ZXJyaWRlIHRoYXQgKi8KKwllbHNlIGlmIChlbnRyeS0+dHlwZSAhPSBlbnRyeS0+aW5fcGFja190eXBlKQorCQl0b19yZXVzZSA9IDA7CS8qIHBhY2sgaGFzIGRlbHRhIHdoaWNoIGlzIHVudXNhYmxlICovCisJZWxzZSBpZiAoZW50cnktPmRlbHRhKQorCQl0b19yZXVzZSA9IDA7CS8qIHdlIHdhbnQgdG8gcGFjayBhZnJlc2ggKi8KKwllbHNlCisJCXRvX3JldXNlID0gMTsJLyogd2UgaGF2ZSBpdCBpbi1wYWNrIHVuZGVsdGlmaWVkLAorCQkJCSAqIGFuZCB3ZSBkbyBub3QgbmVlZCB0byBkZWx0aWZ5IGl0LgorCQkJCSAqLworCisJaWYgKCF0b19yZXVzZSkKKwkJbGVuID0gd3JpdGVfbm9fcmV1c2Vfb2JqZWN0KGYsIGVudHJ5LCBsaW1pdCwgdXNhYmxlX2RlbHRhKTsKKwllbHNlCisJCWxlbiA9IHdyaXRlX3JldXNlX29iamVjdChmLCBlbnRyeSwgbGltaXQsIHVzYWJsZV9kZWx0YSk7CisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJaWYgKHVzYWJsZV9kZWx0YSkKKwkJd3JpdHRlbl9kZWx0YSsrOworCXdyaXR0ZW4rKzsKKwlpZiAoIXBhY2tfdG9fc3Rkb3V0KQorCQllbnRyeS0+aWR4LmNyYzMyID0gY3JjMzJfZW5kKGYpOworCXJldHVybiBsZW47Cit9CisKK2VudW0gd3JpdGVfb25lX3N0YXR1cyB7CisJV1JJVEVfT05FX1NLSVAgPSAtMSwgLyogYWxyZWFkeSB3cml0dGVuICovCisJV1JJVEVfT05FX0JSRUFLID0gMCwgLyogd3JpdGluZyB0aGlzIHdpbGwgYnVzdCB0aGUgbGltaXQ7IG5vdCB3cml0dGVuICovCisJV1JJVEVfT05FX1dSSVRURU4gPSAxLCAvKiBub3JtYWwgKi8KKwlXUklURV9PTkVfUkVDVVJTSVZFID0gMiAvKiBhbHJlYWR5IHNjaGVkdWxlZCB0byBiZSB3cml0dGVuICovCit9OworCitzdGF0aWMgZW51bSB3cml0ZV9vbmVfc3RhdHVzIHdyaXRlX29uZShzdHJ1Y3Qgc2hhMWZpbGUgKmYsCisJCQkJICAgICAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUsCisJCQkJICAgICAgIG9mZl90ICpvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCByZWN1cnNpbmc7CisKKwkvKgorCSAqIHdlIHNldCBvZmZzZXQgdG8gMSAod2hpY2ggaXMgYW4gaW1wb3NzaWJsZSB2YWx1ZSkgdG8gbWFyaworCSAqIHRoZSBmYWN0IHRoYXQgdGhpcyBvYmplY3QgaXMgaW52b2x2ZWQgaW4gIndyaXRlIGl0cyBiYXNlCisJICogZmlyc3QgYmVmb3JlIHdyaXRpbmcgYSBkZWx0aWZpZWQgb2JqZWN0IiByZWN1cnNpb24uCisJICovCisJcmVjdXJzaW5nID0gKGUtPmlkeC5vZmZzZXQgPT0gMSk7CisJaWYgKHJlY3Vyc2luZykgeworCQl3YXJuaW5nKCJyZWN1cnNpdmUgZGVsdGEgZGV0ZWN0ZWQgZm9yIG9iamVjdCAlcyIsCisJCQlzaGExX3RvX2hleChlLT5pZHguc2hhMSkpOworCQlyZXR1cm4gV1JJVEVfT05FX1JFQ1VSU0lWRTsKKwl9IGVsc2UgaWYgKGUtPmlkeC5vZmZzZXQgfHwgZS0+cHJlZmVycmVkX2Jhc2UpIHsKKwkJLyogb2Zmc2V0IGlzIG5vbiB6ZXJvIGlmIG9iamVjdCBpcyB3cml0dGVuIGFscmVhZHkuICovCisJCXJldHVybiBXUklURV9PTkVfU0tJUDsKKwl9CisKKwkvKiBpZiB3ZSBhcmUgZGVsdGlmaWVkLCB3cml0ZSBvdXQgYmFzZSBvYmplY3QgZmlyc3QuICovCisJaWYgKGUtPmRlbHRhKSB7CisJCWUtPmlkeC5vZmZzZXQgPSAxOyAvKiBub3cgcmVjdXJzZSAqLworCQlzd2l0Y2ggKHdyaXRlX29uZShmLCBlLT5kZWx0YSwgb2Zmc2V0KSkgeworCQljYXNlIFdSSVRFX09ORV9SRUNVUlNJVkU6CisJCQkvKiB3ZSBjYW5ub3QgZGVwZW5kIG9uIHRoaXMgb25lICovCisJCQllLT5kZWx0YSA9IE5VTEw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQljYXNlIFdSSVRFX09ORV9CUkVBSzoKKwkJCWUtPmlkeC5vZmZzZXQgPSByZWN1cnNpbmc7CisJCQlyZXR1cm4gV1JJVEVfT05FX0JSRUFLOworCQl9CisJfQorCisJZS0+aWR4Lm9mZnNldCA9ICpvZmZzZXQ7CisJc2l6ZSA9IHdyaXRlX29iamVjdChmLCBlLCAqb2Zmc2V0KTsKKwlpZiAoIXNpemUpIHsKKwkJZS0+aWR4Lm9mZnNldCA9IHJlY3Vyc2luZzsKKwkJcmV0dXJuIFdSSVRFX09ORV9CUkVBSzsKKwl9CisJd3JpdHRlbl9saXN0W25yX3dyaXR0ZW4rK10gPSAmZS0+aWR4OworCisJLyogbWFrZSBzdXJlIG9mZl90IGlzIHN1ZmZpY2llbnRseSBsYXJnZSBub3QgdG8gd3JhcCAqLworCWlmIChzaWduZWRfYWRkX292ZXJmbG93cygqb2Zmc2V0LCBzaXplKSkKKwkJZGllKCJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90Iik7CisJKm9mZnNldCArPSBzaXplOworCXJldHVybiBXUklURV9PTkVfV1JJVFRFTjsKK30KKworc3RhdGljIGludCBtYXJrX3RhZ2dlZChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFnLAorCQkgICAgICAgdm9pZCAqY2JfZGF0YSkKK3sKKwl1bnNpZ25lZCBjaGFyIHBlZWxlZFsyMF07CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkgPSBwYWNrbGlzdF9maW5kKCZ0b19wYWNrLCBvaWQtPmhhc2gsIE5VTEwpOworCisJaWYgKGVudHJ5KQorCQllbnRyeS0+dGFnZ2VkID0gMTsKKwlpZiAoIXBlZWxfcmVmKHBhdGgsIHBlZWxlZCkpIHsKKwkJZW50cnkgPSBwYWNrbGlzdF9maW5kKCZ0b19wYWNrLCBwZWVsZWQsIE5VTEwpOworCQlpZiAoZW50cnkpCisJCQllbnRyeS0+dGFnZ2VkID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhZGRfdG9fd3JpdGVfb3JkZXIoc3RydWN0IG9iamVjdF9lbnRyeSAqKndvLAorCQkJICAgICAgIHVuc2lnbmVkIGludCAqZW5kcCwKKwkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplKQoreworCWlmIChlLT5maWxsZWQpCisJCXJldHVybjsKKwl3b1soKmVuZHApKytdID0gZTsKKwllLT5maWxsZWQgPSAxOworfQorCitzdGF0aWMgdm9pZCBhZGRfZGVzY2VuZGFudHNfdG9fd3JpdGVfb3JkZXIoc3RydWN0IG9iamVjdF9lbnRyeSAqKndvLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgKmVuZHAsCisJCQkJCSAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUpCit7CisJaW50IGFkZF90b19vcmRlciA9IDE7CisJd2hpbGUgKGUpIHsKKwkJaWYgKGFkZF90b19vcmRlcikgeworCQkJc3RydWN0IG9iamVjdF9lbnRyeSAqczsKKwkJCS8qIGFkZCB0aGlzIG5vZGUuLi4gKi8KKwkJCWFkZF90b193cml0ZV9vcmRlcih3bywgZW5kcCwgZSk7CisJCQkvKiBhbGwgaXRzIHNpYmxpbmdzLi4uICovCisJCQlmb3IgKHMgPSBlLT5kZWx0YV9zaWJsaW5nOyBzOyBzID0gcy0+ZGVsdGFfc2libGluZykgeworCQkJCWFkZF90b193cml0ZV9vcmRlcih3bywgZW5kcCwgcyk7CisJCQl9CisJCX0KKwkJLyogZHJvcCBkb3duIGEgbGV2ZWwgdG8gYWRkIGxlZnQgc3VidHJlZSBub2RlcyBpZiBwb3NzaWJsZSAqLworCQlpZiAoZS0+ZGVsdGFfY2hpbGQpIHsKKwkJCWFkZF90b19vcmRlciA9IDE7CisJCQllID0gZS0+ZGVsdGFfY2hpbGQ7CisJCX0gZWxzZSB7CisJCQlhZGRfdG9fb3JkZXIgPSAwOworCQkJLyogb3VyIHNpYmxpbmcgbWlnaHQgaGF2ZSBzb21lIGNoaWxkcmVuLCBpdCBpcyBuZXh0ICovCisJCQlpZiAoZS0+ZGVsdGFfc2libGluZykgeworCQkJCWUgPSBlLT5kZWx0YV9zaWJsaW5nOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogZ28gYmFjayB0byBvdXIgcGFyZW50IG5vZGUgKi8KKwkJCWUgPSBlLT5kZWx0YTsKKwkJCXdoaWxlIChlICYmICFlLT5kZWx0YV9zaWJsaW5nKSB7CisJCQkJLyogd2UncmUgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzdWJ0cmVlLCBrZWVwCisJCQkJICogZ29pbmcgdXAgdW50aWwgd2UgY2FuIGdvIHJpZ2h0IGFnYWluICovCisJCQkJZSA9IGUtPmRlbHRhOworCQkJfQorCQkJaWYgKCFlKSB7CisJCQkJLyogZG9uZS0gd2UgaGl0IG91ciBvcmlnaW5hbCByb290IG5vZGUgKi8KKwkJCQlyZXR1cm47CisJCQl9CisJCQkvKiBwYXNzIGl0IG9mZiB0byBzaWJsaW5nIGF0IHRoaXMgbGV2ZWwgKi8KKwkJCWUgPSBlLT5kZWx0YV9zaWJsaW5nOworCQl9CisJfTsKK30KKworc3RhdGljIHZvaWQgYWRkX2ZhbWlseV90b193cml0ZV9vcmRlcihzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqd28sCisJCQkJICAgICAgdW5zaWduZWQgaW50ICplbmRwLAorCQkJCSAgICAgIHN0cnVjdCBvYmplY3RfZW50cnkgKmUpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqcm9vdDsKKworCWZvciAocm9vdCA9IGU7IHJvb3QtPmRlbHRhOyByb290ID0gcm9vdC0+ZGVsdGEpCisJCTsgLyogbm90aGluZyAqLworCWFkZF9kZXNjZW5kYW50c190b193cml0ZV9vcmRlcih3bywgZW5kcCwgcm9vdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqY29tcHV0ZV93cml0ZV9vcmRlcih2b2lkKQoreworCXVuc2lnbmVkIGludCBpLCB3b19lbmQsIGxhc3RfdW50YWdnZWQ7CisKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqd28gPSB4bWFsbG9jKHRvX3BhY2subnJfb2JqZWN0cyAqIHNpemVvZigqd28pKTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvYmplY3RzID0gdG9fcGFjay5vYmplY3RzOworCisJZm9yIChpID0gMDsgaSA8IHRvX3BhY2subnJfb2JqZWN0czsgaSsrKSB7CisJCW9iamVjdHNbaV0udGFnZ2VkID0gMDsKKwkJb2JqZWN0c1tpXS5maWxsZWQgPSAwOworCQlvYmplY3RzW2ldLmRlbHRhX2NoaWxkID0gTlVMTDsKKwkJb2JqZWN0c1tpXS5kZWx0YV9zaWJsaW5nID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIEZ1bGx5IGNvbm5lY3QgZGVsdGFfY2hpbGQvZGVsdGFfc2libGluZyBuZXR3b3JrLgorCSAqIE1ha2Ugc3VyZSBkZWx0YV9zaWJsaW5nIGlzIHNvcnRlZCBpbiB0aGUgb3JpZ2luYWwKKwkgKiByZWNlbmN5IG9yZGVyLgorCSAqLworCWZvciAoaSA9IHRvX3BhY2subnJfb2JqZWN0czsgaSA+IDA7KSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmUgPSAmb2JqZWN0c1stLWldOworCQlpZiAoIWUtPmRlbHRhKQorCQkJY29udGludWU7CisJCS8qIE1hcmsgbWUgYXMgdGhlIGZpcnN0IGNoaWxkICovCisJCWUtPmRlbHRhX3NpYmxpbmcgPSBlLT5kZWx0YS0+ZGVsdGFfY2hpbGQ7CisJCWUtPmRlbHRhLT5kZWx0YV9jaGlsZCA9IGU7CisJfQorCisJLyoKKwkgKiBNYXJrIG9iamVjdHMgdGhhdCBhcmUgYXQgdGhlIHRpcCBvZiB0YWdzLgorCSAqLworCWZvcl9lYWNoX3RhZ19yZWYobWFya190YWdnZWQsIE5VTEwpOworCisJLyoKKwkgKiBHaXZlIHRoZSBvYmplY3RzIGluIHRoZSBvcmlnaW5hbCByZWNlbmN5IG9yZGVyIHVudGlsCisJICogd2Ugc2VlIGEgdGFnZ2VkIHRpcC4KKwkgKi8KKwlmb3IgKGkgPSB3b19lbmQgPSAwOyBpIDwgdG9fcGFjay5ucl9vYmplY3RzOyBpKyspIHsKKwkJaWYgKG9iamVjdHNbaV0udGFnZ2VkKQorCQkJYnJlYWs7CisJCWFkZF90b193cml0ZV9vcmRlcih3bywgJndvX2VuZCwgJm9iamVjdHNbaV0pOworCX0KKwlsYXN0X3VudGFnZ2VkID0gaTsKKworCS8qCisJICogVGhlbiBmaWxsIGFsbCB0aGUgdGFnZ2VkIHRpcHMuCisJICovCisJZm9yICg7IGkgPCB0b19wYWNrLm5yX29iamVjdHM7IGkrKykgeworCQlpZiAob2JqZWN0c1tpXS50YWdnZWQpCisJCQlhZGRfdG9fd3JpdGVfb3JkZXIod28sICZ3b19lbmQsICZvYmplY3RzW2ldKTsKKwl9CisKKwkvKgorCSAqIEFuZCB0aGVuIGFsbCByZW1haW5pbmcgY29tbWl0cyBhbmQgdGFncy4KKwkgKi8KKwlmb3IgKGkgPSBsYXN0X3VudGFnZ2VkOyBpIDwgdG9fcGFjay5ucl9vYmplY3RzOyBpKyspIHsKKwkJaWYgKG9iamVjdHNbaV0udHlwZSAhPSBPQkpfQ09NTUlUICYmCisJCSAgICBvYmplY3RzW2ldLnR5cGUgIT0gT0JKX1RBRykKKwkJCWNvbnRpbnVlOworCQlhZGRfdG9fd3JpdGVfb3JkZXIod28sICZ3b19lbmQsICZvYmplY3RzW2ldKTsKKwl9CisKKwkvKgorCSAqIEFuZCB0aGVuIGFsbCB0aGUgdHJlZXMuCisJICovCisJZm9yIChpID0gbGFzdF91bnRhZ2dlZDsgaSA8IHRvX3BhY2subnJfb2JqZWN0czsgaSsrKSB7CisJCWlmIChvYmplY3RzW2ldLnR5cGUgIT0gT0JKX1RSRUUpCisJCQljb250aW51ZTsKKwkJYWRkX3RvX3dyaXRlX29yZGVyKHdvLCAmd29fZW5kLCAmb2JqZWN0c1tpXSk7CisJfQorCisJLyoKKwkgKiBGaW5hbGx5IGFsbCB0aGUgcmVzdCBpbiByZWFsbHkgdGlnaHQgb3JkZXIKKwkgKi8KKwlmb3IgKGkgPSBsYXN0X3VudGFnZ2VkOyBpIDwgdG9fcGFjay5ucl9vYmplY3RzOyBpKyspIHsKKwkJaWYgKCFvYmplY3RzW2ldLmZpbGxlZCkKKwkJCWFkZF9mYW1pbHlfdG9fd3JpdGVfb3JkZXIod28sICZ3b19lbmQsICZvYmplY3RzW2ldKTsKKwl9CisKKwlpZiAod29fZW5kICE9IHRvX3BhY2subnJfb2JqZWN0cykKKwkJZGllKCJvcmRlcmVkICV1IG9iamVjdHMsIGV4cGVjdGVkICUiUFJJdTMyLCB3b19lbmQsIHRvX3BhY2subnJfb2JqZWN0cyk7CisKKwlyZXR1cm4gd287Cit9CisKK3N0YXRpYyBvZmZfdCB3cml0ZV9yZXVzZWRfcGFjayhzdHJ1Y3Qgc2hhMWZpbGUgKmYpCit7CisJdW5zaWduZWQgY2hhciBidWZmZXJbODE5Ml07CisJb2ZmX3QgdG9fd3JpdGUsIHRvdGFsOworCWludCBmZDsKKworCWlmICghaXNfcGFja192YWxpZChyZXVzZV9wYWNrZmlsZSkpCisJCWRpZSgicGFja2ZpbGUgaXMgaW52YWxpZDogJXMiLCByZXVzZV9wYWNrZmlsZS0+cGFja19uYW1lKTsKKworCWZkID0gZ2l0X29wZW5fbm9hdGltZShyZXVzZV9wYWNrZmlsZS0+cGFja19uYW1lKTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBvcGVuIHBhY2tmaWxlIGZvciByZXVzZTogJXMiLAorCQkJICByZXVzZV9wYWNrZmlsZS0+cGFja19uYW1lKTsKKworCWlmIChsc2VlayhmZCwgc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlciksIFNFRUtfU0VUKSA9PSAtMSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gc2VlayBpbiByZXVzZWQgcGFja2ZpbGUiKTsKKworCWlmIChyZXVzZV9wYWNrZmlsZV9vZmZzZXQgPCAwKQorCQlyZXVzZV9wYWNrZmlsZV9vZmZzZXQgPSByZXVzZV9wYWNrZmlsZS0+cGFja19zaXplIC0gMjA7CisKKwl0b3RhbCA9IHRvX3dyaXRlID0gcmV1c2VfcGFja2ZpbGVfb2Zmc2V0IC0gc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcik7CisKKwl3aGlsZSAodG9fd3JpdGUpIHsKKwkJaW50IHJlYWRfcGFjayA9IHhyZWFkKGZkLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKworCQlpZiAocmVhZF9wYWNrIDw9IDApCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byByZWFkIGZyb20gcmV1c2VkIHBhY2tmaWxlIik7CisKKwkJaWYgKHJlYWRfcGFjayA+IHRvX3dyaXRlKQorCQkJcmVhZF9wYWNrID0gdG9fd3JpdGU7CisKKwkJc2hhMXdyaXRlKGYsIGJ1ZmZlciwgcmVhZF9wYWNrKTsKKwkJdG9fd3JpdGUgLT0gcmVhZF9wYWNrOworCisJCS8qCisJCSAqIFdlIGRvbid0IGtub3cgdGhlIGFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyB3cml0dGVuLAorCQkgKiBvbmx5IGhvdyBtYW55IGJ5dGVzIHdyaXR0ZW4sIGhvdyBtYW55IGJ5dGVzIHRvdGFsLCBhbmQKKwkJICogaG93IG1hbnkgb2JqZWN0cyB0b3RhbC4gU28gd2UgY2FuIGZha2UgaXQgYnkgcHJldGVuZGluZyBhbGwKKwkJICogb2JqZWN0cyB3ZSBhcmUgd3JpdGluZyBhcmUgdGhlIHNhbWUgc2l6ZS4gVGhpcyBnaXZlcyB1cyBhCisJCSAqIHNtb290aCBwcm9ncmVzcyBtZXRlciwgYW5kIGF0IHRoZSBlbmQgaXQgbWF0Y2hlcyB0aGUgdHJ1ZQorCQkgKiBhbnN3ZXIuCisJCSAqLworCQl3cml0dGVuID0gcmV1c2VfcGFja2ZpbGVfb2JqZWN0cyAqCisJCQkJKCgoZG91YmxlKSh0b3RhbCAtIHRvX3dyaXRlKSkgLyB0b3RhbCk7CisJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3Nfc3RhdGUsIHdyaXR0ZW4pOworCX0KKworCWNsb3NlKGZkKTsKKwl3cml0dGVuID0gcmV1c2VfcGFja2ZpbGVfb2JqZWN0czsKKwlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzX3N0YXRlLCB3cml0dGVuKTsKKwlyZXR1cm4gcmV1c2VfcGFja2ZpbGVfb2Zmc2V0IC0gc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3BhY2tfZmlsZSh2b2lkKQoreworCXVpbnQzMl90IGkgPSAwLCBqOworCXN0cnVjdCBzaGExZmlsZSAqZjsKKwlvZmZfdCBvZmZzZXQ7CisJdWludDMyX3QgbnJfcmVtYWluaW5nID0gbnJfcmVzdWx0OworCXRpbWVfdCBsYXN0X210aW1lID0gMDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqd3JpdGVfb3JkZXI7CisKKwlpZiAocHJvZ3Jlc3MgPiBwYWNrX3RvX3N0ZG91dCkKKwkJcHJvZ3Jlc3Nfc3RhdGUgPSBzdGFydF9wcm9ncmVzcyhfKCJXcml0aW5nIG9iamVjdHMiKSwgbnJfcmVzdWx0KTsKKwl3cml0dGVuX2xpc3QgPSB4bWFsbG9jKHRvX3BhY2subnJfb2JqZWN0cyAqIHNpemVvZigqd3JpdHRlbl9saXN0KSk7CisJd3JpdGVfb3JkZXIgPSBjb21wdXRlX3dyaXRlX29yZGVyKCk7CisKKwlkbyB7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCWNoYXIgKnBhY2tfdG1wX25hbWUgPSBOVUxMOworCisJCWlmIChwYWNrX3RvX3N0ZG91dCkKKwkJCWYgPSBzaGExZmRfdGhyb3VnaHB1dCgxLCAiPHN0ZG91dD4iLCBwcm9ncmVzc19zdGF0ZSk7CisJCWVsc2UKKwkJCWYgPSBjcmVhdGVfdG1wX3BhY2tmaWxlKCZwYWNrX3RtcF9uYW1lKTsKKworCQlvZmZzZXQgPSB3cml0ZV9wYWNrX2hlYWRlcihmLCBucl9yZW1haW5pbmcpOworCisJCWlmIChyZXVzZV9wYWNrZmlsZSkgeworCQkJb2ZmX3QgcGFja2ZpbGVfc2l6ZTsKKwkJCWFzc2VydChwYWNrX3RvX3N0ZG91dCk7CisKKwkJCXBhY2tmaWxlX3NpemUgPSB3cml0ZV9yZXVzZWRfcGFjayhmKTsKKwkJCW9mZnNldCArPSBwYWNrZmlsZV9zaXplOworCQl9CisKKwkJbnJfd3JpdHRlbiA9IDA7CisJCWZvciAoOyBpIDwgdG9fcGFjay5ucl9vYmplY3RzOyBpKyspIHsKKwkJCXN0cnVjdCBvYmplY3RfZW50cnkgKmUgPSB3cml0ZV9vcmRlcltpXTsKKwkJCWlmICh3cml0ZV9vbmUoZiwgZSwgJm9mZnNldCkgPT0gV1JJVEVfT05FX0JSRUFLKQorCQkJCWJyZWFrOworCQkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzc19zdGF0ZSwgd3JpdHRlbik7CisJCX0KKworCQkvKgorCQkgKiBEaWQgd2Ugd3JpdGUgdGhlIHdyb25nICMgZW50cmllcyBpbiB0aGUgaGVhZGVyPworCQkgKiBJZiBzbywgcmV3cml0ZSBpdCBsaWtlIGluIGZhc3QtaW1wb3J0CisJCSAqLworCQlpZiAocGFja190b19zdGRvdXQpIHsKKwkJCXNoYTFjbG9zZShmLCBzaGExLCBDU1VNX0NMT1NFKTsKKwkJfSBlbHNlIGlmIChucl93cml0dGVuID09IG5yX3JlbWFpbmluZykgeworCQkJc2hhMWNsb3NlKGYsIHNoYTEsIENTVU1fRlNZTkMpOworCQl9IGVsc2UgeworCQkJaW50IGZkID0gc2hhMWNsb3NlKGYsIHNoYTEsIDApOworCQkJZml4dXBfcGFja19oZWFkZXJfZm9vdGVyKGZkLCBzaGExLCBwYWNrX3RtcF9uYW1lLAorCQkJCQkJIG5yX3dyaXR0ZW4sIHNoYTEsIG9mZnNldCk7CisJCQljbG9zZShmZCk7CisJCQl3cml0ZV9iaXRtYXBfaW5kZXggPSAwOworCQl9CisKKwkJaWYgKCFwYWNrX3RvX3N0ZG91dCkgeworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQlzdHJ1Y3Qgc3RyYnVmIHRtcG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCQkJLyoKKwkJCSAqIFBhY2tzIGFyZSBydW50aW1lIGFjY2Vzc2VkIGluIHRoZWlyIG10aW1lCisJCQkgKiBvcmRlciBzaW5jZSBuZXdlciBwYWNrcyBhcmUgbW9yZSBsaWtlbHkgdG8gY29udGFpbgorCQkJICogeW91bmdlciBvYmplY3RzLiAgU28gaWYgd2UgYXJlIGNyZWF0aW5nIG11bHRpcGxlCisJCQkgKiBwYWNrcyB0aGVuIHdlIHNob3VsZCBtb2RpZnkgdGhlIG10aW1lIG9mIGxhdGVyIG9uZXMKKwkJCSAqIHRvIHByZXNlcnZlIHRoaXMgcHJvcGVydHkuCisJCQkgKi8KKwkJCWlmIChzdGF0KHBhY2tfdG1wX25hbWUsICZzdCkgPCAwKSB7CisJCQkJd2FybmluZygiZmFpbGVkIHRvIHN0YXQgJXM6ICVzIiwKKwkJCQkJcGFja190bXBfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCX0gZWxzZSBpZiAoIWxhc3RfbXRpbWUpIHsKKwkJCQlsYXN0X210aW1lID0gc3Quc3RfbXRpbWU7CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCB1dGltYnVmIHV0YjsKKwkJCQl1dGIuYWN0aW1lID0gc3Quc3RfYXRpbWU7CisJCQkJdXRiLm1vZHRpbWUgPSAtLWxhc3RfbXRpbWU7CisJCQkJaWYgKHV0aW1lKHBhY2tfdG1wX25hbWUsICZ1dGIpIDwgMCkKKwkJCQkJd2FybmluZygiZmFpbGVkIHV0aW1lKCkgb24gJXM6ICVzIiwKKwkJCQkJCXBhY2tfdG1wX25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQl9CisKKwkJCXN0cmJ1Zl9hZGRmKCZ0bXBuYW1lLCAiJXMtIiwgYmFzZV9uYW1lKTsKKworCQkJaWYgKHdyaXRlX2JpdG1hcF9pbmRleCkgeworCQkJCWJpdG1hcF93cml0ZXJfc2V0X2NoZWNrc3VtKHNoYTEpOworCQkJCWJpdG1hcF93cml0ZXJfYnVpbGRfdHlwZV9pbmRleCh3cml0dGVuX2xpc3QsIG5yX3dyaXR0ZW4pOworCQkJfQorCisJCQlmaW5pc2hfdG1wX3BhY2tmaWxlKCZ0bXBuYW1lLCBwYWNrX3RtcF9uYW1lLAorCQkJCQkgICAgd3JpdHRlbl9saXN0LCBucl93cml0dGVuLAorCQkJCQkgICAgJnBhY2tfaWR4X29wdHMsIHNoYTEpOworCisJCQlpZiAod3JpdGVfYml0bWFwX2luZGV4KSB7CisJCQkJc3RyYnVmX2FkZGYoJnRtcG5hbWUsICIlcy5iaXRtYXAiLCBzaGExX3RvX2hleChzaGExKSk7CisKKwkJCQlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzc19zdGF0ZSk7CisKKwkJCQliaXRtYXBfd3JpdGVyX3Nob3dfcHJvZ3Jlc3MocHJvZ3Jlc3MpOworCQkJCWJpdG1hcF93cml0ZXJfcmV1c2VfYml0bWFwcygmdG9fcGFjayk7CisJCQkJYml0bWFwX3dyaXRlcl9zZWxlY3RfY29tbWl0cyhpbmRleGVkX2NvbW1pdHMsIGluZGV4ZWRfY29tbWl0c19uciwgLTEpOworCQkJCWJpdG1hcF93cml0ZXJfYnVpbGQoJnRvX3BhY2spOworCQkJCWJpdG1hcF93cml0ZXJfZmluaXNoKHdyaXR0ZW5fbGlzdCwgbnJfd3JpdHRlbiwKKwkJCQkJCSAgICAgdG1wbmFtZS5idWYsIHdyaXRlX2JpdG1hcF9vcHRpb25zKTsKKwkJCQl3cml0ZV9iaXRtYXBfaW5kZXggPSAwOworCQkJfQorCisJCQlzdHJidWZfcmVsZWFzZSgmdG1wbmFtZSk7CisJCQlmcmVlKHBhY2tfdG1wX25hbWUpOworCQkJcHV0cyhzaGExX3RvX2hleChzaGExKSk7CisJCX0KKworCQkvKiBtYXJrIHdyaXR0ZW4gb2JqZWN0cyBhcyB3cml0dGVuIHRvIHByZXZpb3VzIHBhY2sgKi8KKwkJZm9yIChqID0gMDsgaiA8IG5yX3dyaXR0ZW47IGorKykgeworCQkJd3JpdHRlbl9saXN0W2pdLT5vZmZzZXQgPSAob2ZmX3QpLTE7CisJCX0KKwkJbnJfcmVtYWluaW5nIC09IG5yX3dyaXR0ZW47CisJfSB3aGlsZSAobnJfcmVtYWluaW5nICYmIGkgPCB0b19wYWNrLm5yX29iamVjdHMpOworCisJZnJlZSh3cml0dGVuX2xpc3QpOworCWZyZWUod3JpdGVfb3JkZXIpOworCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzX3N0YXRlKTsKKwlpZiAod3JpdHRlbiAhPSBucl9yZXN1bHQpCisJCWRpZSgid3JvdGUgJSJQUkl1MzIiIG9iamVjdHMgd2hpbGUgZXhwZWN0aW5nICUiUFJJdTMyLAorCQkJd3JpdHRlbiwgbnJfcmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZGVsdGFfYXR0cl9jaGVjayhzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrKQoreworCXN0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHJfZGVsdGE7CisKKwlpZiAoIWF0dHJfZGVsdGEpCisJCWF0dHJfZGVsdGEgPSBnaXRfYXR0cigiZGVsdGEiKTsKKworCWNoZWNrWzBdLmF0dHIgPSBhdHRyX2RlbHRhOworfQorCitzdGF0aWMgaW50IG5vX3RyeV9kZWx0YShjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBnaXRfYXR0cl9jaGVjayBjaGVja1sxXTsKKworCXNldHVwX2RlbHRhX2F0dHJfY2hlY2soY2hlY2spOworCWlmIChnaXRfY2hlY2tfYXR0cihwYXRoLCBBUlJBWV9TSVpFKGNoZWNrKSwgY2hlY2spKQorCQlyZXR1cm4gMDsKKwlpZiAoQVRUUl9GQUxTRShjaGVjay0+dmFsdWUpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdoZW4gYWRkaW5nIGFuIG9iamVjdCwgY2hlY2sgd2hldGhlciB3ZSBoYXZlIGFscmVhZHkgYWRkZWQgaXQKKyAqIHRvIG91ciBwYWNraW5nIGxpc3QuIElmIHNvLCB3ZSBjYW4gc2tpcC4gSG93ZXZlciwgaWYgd2UgYXJlCisgKiBiZWluZyBhc2tlZCB0byBleGNsdWRlaSB0LCBidXQgdGhlIHByZXZpb3VzIG1lbnRpb24gd2FzIHRvIGluY2x1ZGUKKyAqIGl0LCBtYWtlIHN1cmUgdG8gYWRqdXN0IGl0cyBmbGFncyBhbmQgdHdlYWsgb3VyIG51bWJlcnMgYWNjb3JkaW5nbHkuCisgKgorICogQXMgYW4gb3B0aW1pemF0aW9uLCB3ZSBwYXNzIG91dCB0aGUgaW5kZXggcG9zaXRpb24gd2hlcmUgd2Ugd291bGQgaGF2ZQorICogZm91bmQgdGhlIGl0ZW0sIHNpbmNlIHRoYXQgc2F2ZXMgdXMgZnJvbSBoYXZpbmcgdG8gbG9vayBpdCB1cCBhZ2FpbiBhCisgKiBmZXcgbGluZXMgbGF0ZXIgd2hlbiB3ZSB3YW50IHRvIGFkZCB0aGUgbmV3IGVudHJ5LgorICovCitzdGF0aWMgaW50IGhhdmVfZHVwbGljYXRlX2VudHJ5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJaW50IGV4Y2x1ZGUsCisJCQkJdWludDMyX3QgKmluZGV4X3BvcykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeTsKKworCWVudHJ5ID0gcGFja2xpc3RfZmluZCgmdG9fcGFjaywgc2hhMSwgaW5kZXhfcG9zKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gMDsKKworCWlmIChleGNsdWRlKSB7CisJCWlmICghZW50cnktPnByZWZlcnJlZF9iYXNlKQorCQkJbnJfcmVzdWx0LS07CisJCWVudHJ5LT5wcmVmZXJyZWRfYmFzZSA9IDE7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDaGVjayB3aGV0aGVyIHdlIHdhbnQgdGhlIG9iamVjdCBpbiB0aGUgcGFjayAoZS5nLiwgd2UgZG8gbm90IHdhbnQKKyAqIG9iamVjdHMgZm91bmQgaW4gbm9uLWxvY2FsIHN0b3JlcyBpZiB0aGUgIi0tbG9jYWwiIG9wdGlvbiB3YXMgdXNlZCkuCisgKgorICogQXMgYSBzaWRlIGVmZmVjdCBvZiB0aGlzIGNoZWNrLCB3ZSB3aWxsIGZpbmQgdGhlIHBhY2tlZCB2ZXJzaW9uIG9mIHRoaXMKKyAqIG9iamVjdCwgaWYgYW55LiBXZSB0aGVyZWZvcmUgcGFzcyBvdXQgdGhlIHBhY2sgaW5mb3JtYXRpb24gdG8gYXZvaWQgaGF2aW5nCisgKiB0byBsb29rIGl0IHVwIGFnYWluIGxhdGVyLgorICovCitzdGF0aWMgaW50IHdhbnRfb2JqZWN0X2luX3BhY2soY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgICAgICBpbnQgZXhjbHVkZSwKKwkJCSAgICAgICBzdHJ1Y3QgcGFja2VkX2dpdCAqKmZvdW5kX3BhY2ssCisJCQkgICAgICAgb2ZmX3QgKmZvdW5kX29mZnNldCkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCWlmICghZXhjbHVkZSAmJiBsb2NhbCAmJiBoYXNfbG9vc2Vfb2JqZWN0X25vbmxvY2FsKHNoYTEpKQorCQlyZXR1cm4gMDsKKworCSpmb3VuZF9wYWNrID0gTlVMTDsKKwkqZm91bmRfb2Zmc2V0ID0gMDsKKworCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCW9mZl90IG9mZnNldCA9IGZpbmRfcGFja19lbnRyeV9vbmUoc2hhMSwgcCk7CisJCWlmIChvZmZzZXQpIHsKKwkJCWlmICghKmZvdW5kX3BhY2spIHsKKwkJCQlpZiAoIWlzX3BhY2tfdmFsaWQocCkpCisJCQkJCWNvbnRpbnVlOworCQkJCSpmb3VuZF9vZmZzZXQgPSBvZmZzZXQ7CisJCQkJKmZvdW5kX3BhY2sgPSBwOworCQkJfQorCQkJaWYgKGV4Y2x1ZGUpCisJCQkJcmV0dXJuIDE7CisJCQlpZiAoaW5jcmVtZW50YWwpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAobG9jYWwgJiYgIXAtPnBhY2tfbG9jYWwpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoaWdub3JlX3BhY2tlZF9rZWVwICYmIHAtPnBhY2tfbG9jYWwgJiYgcC0+cGFja19rZWVwKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9vYmplY3RfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQllbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkJdWludDMyX3QgaGFzaCwKKwkJCQlpbnQgZXhjbHVkZSwKKwkJCQlpbnQgbm9fdHJ5X2RlbHRhLAorCQkJCXVpbnQzMl90IGluZGV4X3BvcywKKwkJCQlzdHJ1Y3QgcGFja2VkX2dpdCAqZm91bmRfcGFjaywKKwkJCQlvZmZfdCBmb3VuZF9vZmZzZXQpCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9IHBhY2tsaXN0X2FsbG9jKCZ0b19wYWNrLCBzaGExLCBpbmRleF9wb3MpOworCWVudHJ5LT5oYXNoID0gaGFzaDsKKwlpZiAodHlwZSkKKwkJZW50cnktPnR5cGUgPSB0eXBlOworCWlmIChleGNsdWRlKQorCQllbnRyeS0+cHJlZmVycmVkX2Jhc2UgPSAxOworCWVsc2UKKwkJbnJfcmVzdWx0Kys7CisJaWYgKGZvdW5kX3BhY2spIHsKKwkJZW50cnktPmluX3BhY2sgPSBmb3VuZF9wYWNrOworCQllbnRyeS0+aW5fcGFja19vZmZzZXQgPSBmb3VuZF9vZmZzZXQ7CisJfQorCisJZW50cnktPm5vX3RyeV9kZWx0YSA9IG5vX3RyeV9kZWx0YTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgbm9fY2xvc3VyZV93YXJuaW5nW10gPSBOXygKKyJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIGFzIHNvbWUgb2JqZWN0cyBhcmUgbm90IGJlaW5nIHBhY2tlZCIKKyk7CisKK3N0YXRpYyBpbnQgYWRkX29iamVjdF9lbnRyeShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IGV4Y2x1ZGUpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKmZvdW5kX3BhY2s7CisJb2ZmX3QgZm91bmRfb2Zmc2V0OworCXVpbnQzMl90IGluZGV4X3BvczsKKworCWlmIChoYXZlX2R1cGxpY2F0ZV9lbnRyeShzaGExLCBleGNsdWRlLCAmaW5kZXhfcG9zKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXdhbnRfb2JqZWN0X2luX3BhY2soc2hhMSwgZXhjbHVkZSwgJmZvdW5kX3BhY2ssICZmb3VuZF9vZmZzZXQpKSB7CisJCS8qIFRoZSBwYWNrIGlzIG1pc3NpbmcgYW4gb2JqZWN0LCBzbyBpdCB3aWxsIG5vdCBoYXZlIGNsb3N1cmUgKi8KKwkJaWYgKHdyaXRlX2JpdG1hcF9pbmRleCkgeworCQkJd2FybmluZyhfKG5vX2Nsb3N1cmVfd2FybmluZykpOworCQkJd3JpdGVfYml0bWFwX2luZGV4ID0gMDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwljcmVhdGVfb2JqZWN0X2VudHJ5KHNoYTEsIHR5cGUsIHBhY2tfbmFtZV9oYXNoKG5hbWUpLAorCQkJICAgIGV4Y2x1ZGUsIG5hbWUgJiYgbm9fdHJ5X2RlbHRhKG5hbWUpLAorCQkJICAgIGluZGV4X3BvcywgZm91bmRfcGFjaywgZm91bmRfb2Zmc2V0KTsKKworCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3Nfc3RhdGUsIG5yX3Jlc3VsdCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgYWRkX29iamVjdF9lbnRyeV9mcm9tX2JpdG1hcChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCQllbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkJCWludCBmbGFncywgdWludDMyX3QgbmFtZV9oYXNoLAorCQkJCQlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFjaywgb2ZmX3Qgb2Zmc2V0KQoreworCXVpbnQzMl90IGluZGV4X3BvczsKKworCWlmIChoYXZlX2R1cGxpY2F0ZV9lbnRyeShzaGExLCAwLCAmaW5kZXhfcG9zKSkKKwkJcmV0dXJuIDA7CisKKwljcmVhdGVfb2JqZWN0X2VudHJ5KHNoYTEsIHR5cGUsIG5hbWVfaGFzaCwgMCwgMCwgaW5kZXhfcG9zLCBwYWNrLCBvZmZzZXQpOworCisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzc19zdGF0ZSwgbnJfcmVzdWx0KTsKKwlyZXR1cm4gMTsKK30KKworc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgeworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IHJlZjsKKwlpbnQgdGVtcG9yYXJ5OworCXZvaWQgKnRyZWVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHRyZWVfc2l6ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGJhc2VfdHJlZV9jYWNoZSAqKHBiYXNlX3RyZWVfY2FjaGVbMjU2XSk7CitzdGF0aWMgaW50IHBiYXNlX3RyZWVfY2FjaGVfaXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gc2hhMVswXSAlIEFSUkFZX1NJWkUocGJhc2VfdHJlZV9jYWNoZSk7Cit9CitzdGF0aWMgaW50IHBiYXNlX3RyZWVfY2FjaGVfaXhfaW5jcihpbnQgaXgpCit7CisJcmV0dXJuIChpeCsxKSAlIEFSUkFZX1NJWkUocGJhc2VfdHJlZV9jYWNoZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGJhc2VfdHJlZSB7CisJc3RydWN0IHBiYXNlX3RyZWUgKm5leHQ7CisJLyogVGhpcyBpcyBhIHBob255ICJjYWNoZSIgZW50cnk7IHdlIGFyZSBub3QKKwkgKiBnb2luZyB0byBldmljdCBpdCBvciBmaW5kIGl0IHRocm91Z2ggX2dldCgpCisJICogbWVjaGFuaXNtIC0tIHRoaXMgaXMgZm9yIHRoZSB0b3BsZXZlbCBub2RlIHRoYXQKKwkgKiB3b3VsZCBhbG1vc3QgYWx3YXlzIGNoYW5nZSB3aXRoIGFueSBjb21taXQuCisJICovCisJc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgcGNhY2hlOworfSAqcGJhc2VfdHJlZTsKKworc3RhdGljIHN0cnVjdCBwYmFzZV90cmVlX2NhY2hlICpwYmFzZV90cmVlX2dldChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBwYmFzZV90cmVlX2NhY2hlICplbnQsICpuZW50OworCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlpbnQgbmVpZ2g7CisJaW50IG15X2l4ID0gcGJhc2VfdHJlZV9jYWNoZV9peChzaGExKTsKKwlpbnQgYXZhaWxhYmxlX2l4ID0gLTE7CisKKwkvKiBwYmFzZS10cmVlLWNhY2hlIGFjdHMgYXMgYSBsaW1pdGVkIGhhc2h0YWJsZS4KKwkgKiB5b3VyIG9iamVjdCB3aWxsIGJlIGZvdW5kIGF0IHlvdXIgaW5kZXggb3Igd2l0aGluIGEgZmV3CisJICogc2xvdHMgYWZ0ZXIgdGhhdCBzbG90IGlmIGl0IGlzIGNhY2hlZC4KKwkgKi8KKwlmb3IgKG5laWdoID0gMDsgbmVpZ2ggPCA4OyBuZWlnaCsrKSB7CisJCWVudCA9IHBiYXNlX3RyZWVfY2FjaGVbbXlfaXhdOworCQlpZiAoZW50ICYmICFoYXNoY21wKGVudC0+c2hhMSwgc2hhMSkpIHsKKwkJCWVudC0+cmVmKys7CisJCQlyZXR1cm4gZW50OworCQl9CisJCWVsc2UgaWYgKCgoYXZhaWxhYmxlX2l4IDwgMCkgJiYgKCFlbnQgfHwgIWVudC0+cmVmKSkgfHwKKwkJCSAoKDAgPD0gYXZhaWxhYmxlX2l4KSAmJgorCQkJICAoIWVudCAmJiBwYmFzZV90cmVlX2NhY2hlW2F2YWlsYWJsZV9peF0pKSkKKwkJCWF2YWlsYWJsZV9peCA9IG15X2l4OworCQlpZiAoIWVudCkKKwkJCWJyZWFrOworCQlteV9peCA9IHBiYXNlX3RyZWVfY2FjaGVfaXhfaW5jcihteV9peCk7CisJfQorCisJLyogRGlkIG5vdCBmaW5kIG9uZS4gIEVpdGhlciB3ZSBnb3QgYSBib2d1cyByZXF1ZXN0IG9yCisJICogd2UgbmVlZCB0byByZWFkIGFuZCBwZXJoYXBzIGNhY2hlLgorCSAqLworCWRhdGEgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHR5cGUgIT0gT0JKX1RSRUUpIHsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogV2UgbmVlZCB0byBlaXRoZXIgY2FjaGUgb3IgcmV0dXJuIGEgdGhyb3dhd2F5IGNvcHkgKi8KKworCWlmIChhdmFpbGFibGVfaXggPCAwKQorCQllbnQgPSBOVUxMOworCWVsc2UgeworCQllbnQgPSBwYmFzZV90cmVlX2NhY2hlW2F2YWlsYWJsZV9peF07CisJCW15X2l4ID0gYXZhaWxhYmxlX2l4OworCX0KKworCWlmICghZW50KSB7CisJCW5lbnQgPSB4bWFsbG9jKHNpemVvZigqbmVudCkpOworCQluZW50LT50ZW1wb3JhcnkgPSAoYXZhaWxhYmxlX2l4IDwgMCk7CisJfQorCWVsc2UgeworCQkvKiBldmljdCBhbmQgcmV1c2UgKi8KKwkJZnJlZShlbnQtPnRyZWVfZGF0YSk7CisJCW5lbnQgPSBlbnQ7CisJfQorCWhhc2hjcHkobmVudC0+c2hhMSwgc2hhMSk7CisJbmVudC0+dHJlZV9kYXRhID0gZGF0YTsKKwluZW50LT50cmVlX3NpemUgPSBzaXplOworCW5lbnQtPnJlZiA9IDE7CisJaWYgKCFuZW50LT50ZW1wb3JhcnkpCisJCXBiYXNlX3RyZWVfY2FjaGVbbXlfaXhdID0gbmVudDsKKwlyZXR1cm4gbmVudDsKK30KKworc3RhdGljIHZvaWQgcGJhc2VfdHJlZV9wdXQoc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgKmNhY2hlKQoreworCWlmICghY2FjaGUtPnRlbXBvcmFyeSkgeworCQljYWNoZS0+cmVmLS07CisJCXJldHVybjsKKwl9CisJZnJlZShjYWNoZS0+dHJlZV9kYXRhKTsKKwlmcmVlKGNhY2hlKTsKK30KKworc3RhdGljIGludCBuYW1lX2NtcF9sZW4oY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBuYW1lW2ldICYmIG5hbWVbaV0gIT0gJ1xuJyAmJiBuYW1lW2ldICE9ICcvJzsgaSsrKQorCQk7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wYmFzZV9vYmplY3Qoc3RydWN0IHRyZWVfZGVzYyAqdHJlZSwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgaW50IGNtcGxlbiwKKwkJCSAgICAgY29uc3QgY2hhciAqZnVsbG5hbWUpCit7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IGNtcDsKKworCXdoaWxlICh0cmVlX2VudHJ5KHRyZWUsJmVudHJ5KSkgeworCQlpZiAoU19JU0dJVExJTksoZW50cnkubW9kZSkpCisJCQljb250aW51ZTsKKwkJY21wID0gdHJlZV9lbnRyeV9sZW4oJmVudHJ5KSAhPSBjbXBsZW4gPyAxIDoKKwkJICAgICAgbWVtY21wKG5hbWUsIGVudHJ5LnBhdGgsIGNtcGxlbik7CisJCWlmIChjbXAgPiAwKQorCQkJY29udGludWU7CisJCWlmIChjbXAgPCAwKQorCQkJcmV0dXJuOworCQlpZiAobmFtZVtjbXBsZW5dICE9ICcvJykgeworCQkJYWRkX29iamVjdF9lbnRyeShlbnRyeS5zaGExLAorCQkJCQkgb2JqZWN0X3R5cGUoZW50cnkubW9kZSksCisJCQkJCSBmdWxsbmFtZSwgMSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpIHsKKwkJCXN0cnVjdCB0cmVlX2Rlc2Mgc3ViOworCQkJc3RydWN0IHBiYXNlX3RyZWVfY2FjaGUgKnRyZWU7CisJCQljb25zdCBjaGFyICpkb3duID0gbmFtZStjbXBsZW4rMTsKKwkJCWludCBkb3dubGVuID0gbmFtZV9jbXBfbGVuKGRvd24pOworCisJCQl0cmVlID0gcGJhc2VfdHJlZV9nZXQoZW50cnkuc2hhMSk7CisJCQlpZiAoIXRyZWUpCisJCQkJcmV0dXJuOworCQkJaW5pdF90cmVlX2Rlc2MoJnN1YiwgdHJlZS0+dHJlZV9kYXRhLCB0cmVlLT50cmVlX3NpemUpOworCisJCQlhZGRfcGJhc2Vfb2JqZWN0KCZzdWIsIGRvd24sIGRvd25sZW4sIGZ1bGxuYW1lKTsKKwkJCXBiYXNlX3RyZWVfcHV0KHRyZWUpOworCQl9CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgKmRvbmVfcGJhc2VfcGF0aHM7CitzdGF0aWMgaW50IGRvbmVfcGJhc2VfcGF0aHNfbnVtOworc3RhdGljIGludCBkb25lX3BiYXNlX3BhdGhzX2FsbG9jOworc3RhdGljIGludCBkb25lX3BiYXNlX3BhdGhfcG9zKHVuc2lnbmVkIGhhc2gpCit7CisJaW50IGxvID0gMDsKKwlpbnQgaGkgPSBkb25lX3BiYXNlX3BhdGhzX251bTsKKwl3aGlsZSAobG8gPCBoaSkgeworCQlpbnQgbWkgPSAoaGkgKyBsbykgLyAyOworCQlpZiAoZG9uZV9wYmFzZV9wYXRoc1ttaV0gPT0gaGFzaCkKKwkJCXJldHVybiBtaTsKKwkJaWYgKGRvbmVfcGJhc2VfcGF0aHNbbWldIDwgaGFzaCkKKwkJCWhpID0gbWk7CisJCWVsc2UKKwkJCWxvID0gbWkgKyAxOworCX0KKwlyZXR1cm4gLWxvLTE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcGJhc2VfcGF0aCh1bnNpZ25lZCBoYXNoKQoreworCWludCBwb3MgPSAoIWRvbmVfcGJhc2VfcGF0aHMpID8gLTEgOiBkb25lX3BiYXNlX3BhdGhfcG9zKGhhc2gpOworCWlmICgwIDw9IHBvcykKKwkJcmV0dXJuIDE7CisJcG9zID0gLXBvcyAtIDE7CisJQUxMT0NfR1JPVyhkb25lX3BiYXNlX3BhdGhzLAorCQkgICBkb25lX3BiYXNlX3BhdGhzX251bSArIDEsCisJCSAgIGRvbmVfcGJhc2VfcGF0aHNfYWxsb2MpOworCWRvbmVfcGJhc2VfcGF0aHNfbnVtKys7CisJaWYgKHBvcyA8IGRvbmVfcGJhc2VfcGF0aHNfbnVtKQorCQltZW1tb3ZlKGRvbmVfcGJhc2VfcGF0aHMgKyBwb3MgKyAxLAorCQkJZG9uZV9wYmFzZV9wYXRocyArIHBvcywKKwkJCShkb25lX3BiYXNlX3BhdGhzX251bSAtIHBvcyAtIDEpICogc2l6ZW9mKHVuc2lnbmVkKSk7CisJZG9uZV9wYmFzZV9wYXRoc1twb3NdID0gaGFzaDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWRkX3ByZWZlcnJlZF9iYXNlX29iamVjdChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBwYmFzZV90cmVlICppdDsKKwlpbnQgY21wbGVuOworCXVuc2lnbmVkIGhhc2ggPSBwYWNrX25hbWVfaGFzaChuYW1lKTsKKworCWlmICghbnVtX3ByZWZlcnJlZF9iYXNlIHx8IGNoZWNrX3BiYXNlX3BhdGgoaGFzaCkpCisJCXJldHVybjsKKworCWNtcGxlbiA9IG5hbWVfY21wX2xlbihuYW1lKTsKKwlmb3IgKGl0ID0gcGJhc2VfdHJlZTsgaXQ7IGl0ID0gaXQtPm5leHQpIHsKKwkJaWYgKGNtcGxlbiA9PSAwKSB7CisJCQlhZGRfb2JqZWN0X2VudHJ5KGl0LT5wY2FjaGUuc2hhMSwgT0JKX1RSRUUsIE5VTEwsIDEpOworCQl9CisJCWVsc2UgeworCQkJc3RydWN0IHRyZWVfZGVzYyB0cmVlOworCQkJaW5pdF90cmVlX2Rlc2MoJnRyZWUsIGl0LT5wY2FjaGUudHJlZV9kYXRhLCBpdC0+cGNhY2hlLnRyZWVfc2l6ZSk7CisJCQlhZGRfcGJhc2Vfb2JqZWN0KCZ0cmVlLCBuYW1lLCBjbXBsZW4sIG5hbWUpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfcHJlZmVycmVkX2Jhc2UodW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgcGJhc2VfdHJlZSAqaXQ7CisJdm9pZCAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgY2hhciB0cmVlX3NoYTFbMjBdOworCisJaWYgKHdpbmRvdyA8PSBudW1fcHJlZmVycmVkX2Jhc2UrKykKKwkJcmV0dXJuOworCisJZGF0YSA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHNoYTEsIHRyZWVfdHlwZSwgJnNpemUsIHRyZWVfc2hhMSk7CisJaWYgKCFkYXRhKQorCQlyZXR1cm47CisKKwlmb3IgKGl0ID0gcGJhc2VfdHJlZTsgaXQ7IGl0ID0gaXQtPm5leHQpIHsKKwkJaWYgKCFoYXNoY21wKGl0LT5wY2FjaGUuc2hhMSwgdHJlZV9zaGExKSkgeworCQkJZnJlZShkYXRhKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWl0ID0geGNhbGxvYygxLCBzaXplb2YoKml0KSk7CisJaXQtPm5leHQgPSBwYmFzZV90cmVlOworCXBiYXNlX3RyZWUgPSBpdDsKKworCWhhc2hjcHkoaXQtPnBjYWNoZS5zaGExLCB0cmVlX3NoYTEpOworCWl0LT5wY2FjaGUudHJlZV9kYXRhID0gZGF0YTsKKwlpdC0+cGNhY2hlLnRyZWVfc2l6ZSA9IHNpemU7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfcHJlZmVycmVkX2Jhc2Uodm9pZCkKK3sKKwlzdHJ1Y3QgcGJhc2VfdHJlZSAqaXQ7CisJdW5zaWduZWQgaTsKKworCWl0ID0gcGJhc2VfdHJlZTsKKwlwYmFzZV90cmVlID0gTlVMTDsKKwl3aGlsZSAoaXQpIHsKKwkJc3RydWN0IHBiYXNlX3RyZWUgKnRoaXMgPSBpdDsKKwkJaXQgPSB0aGlzLT5uZXh0OworCQlmcmVlKHRoaXMtPnBjYWNoZS50cmVlX2RhdGEpOworCQlmcmVlKHRoaXMpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBiYXNlX3RyZWVfY2FjaGUpOyBpKyspIHsKKwkJaWYgKCFwYmFzZV90cmVlX2NhY2hlW2ldKQorCQkJY29udGludWU7CisJCWZyZWUocGJhc2VfdHJlZV9jYWNoZVtpXS0+dHJlZV9kYXRhKTsKKwkJZnJlZShwYmFzZV90cmVlX2NhY2hlW2ldKTsKKwkJcGJhc2VfdHJlZV9jYWNoZVtpXSA9IE5VTEw7CisJfQorCisJZnJlZShkb25lX3BiYXNlX3BhdGhzKTsKKwlkb25lX3BiYXNlX3BhdGhzID0gTlVMTDsKKwlkb25lX3BiYXNlX3BhdGhzX251bSA9IGRvbmVfcGJhc2VfcGF0aHNfYWxsb2MgPSAwOworfQorCitzdGF0aWMgdm9pZCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnkpCit7CisJaWYgKGVudHJ5LT5pbl9wYWNrKSB7CisJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gZW50cnktPmluX3BhY2s7CisJCXN0cnVjdCBwYWNrX3dpbmRvdyAqd19jdXJzID0gTlVMTDsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZV9yZWYgPSBOVUxMOworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpiYXNlX2VudHJ5OworCQl1bnNpZ25lZCBsb25nIHVzZWQsIHVzZWRfMDsKKwkJdW5zaWduZWQgbG9uZyBhdmFpbDsKKwkJb2ZmX3Qgb2ZzOworCQl1bnNpZ25lZCBjaGFyICpidWYsIGM7CisKKwkJYnVmID0gdXNlX3BhY2socCwgJndfY3VycywgZW50cnktPmluX3BhY2tfb2Zmc2V0LCAmYXZhaWwpOworCisJCS8qCisJCSAqIFdlIHdhbnQgaW5fcGFja190eXBlIGV2ZW4gaWYgd2UgZG8gbm90IHJldXNlIGRlbHRhCisJCSAqIHNpbmNlIG5vbi1kZWx0YSByZXByZXNlbnRhdGlvbnMgY291bGQgc3RpbGwgYmUgcmV1c2VkLgorCQkgKi8KKwkJdXNlZCA9IHVucGFja19vYmplY3RfaGVhZGVyX2J1ZmZlcihidWYsIGF2YWlsLAorCQkJCQkJICAgJmVudHJ5LT5pbl9wYWNrX3R5cGUsCisJCQkJCQkgICAmZW50cnktPnNpemUpOworCQlpZiAodXNlZCA9PSAwKQorCQkJZ290byBnaXZlX3VwOworCisJCS8qCisJCSAqIERldGVybWluZSBpZiB0aGlzIGlzIGEgZGVsdGEgYW5kIGlmIHNvIHdoZXRoZXIgd2UgY2FuCisJCSAqIHJldXNlIGl0IG9yIG5vdC4gIE90aGVyd2lzZSBsZXQncyBmaW5kIG91dCBhcyBjaGVhcGx5IGFzCisJCSAqIHBvc3NpYmxlIHdoYXQgdGhlIGFjdHVhbCB0eXBlIGFuZCBzaXplIGZvciB0aGlzIG9iamVjdCBpcy4KKwkJICovCisJCXN3aXRjaCAoZW50cnktPmluX3BhY2tfdHlwZSkgeworCQlkZWZhdWx0OgorCQkJLyogTm90IGEgZGVsdGEgaGVuY2Ugd2UndmUgYWxyZWFkeSBnb3QgYWxsIHdlIG5lZWQuICovCisJCQllbnRyeS0+dHlwZSA9IGVudHJ5LT5pbl9wYWNrX3R5cGU7CisJCQllbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZSA9IHVzZWQ7CisJCQlpZiAoZW50cnktPnR5cGUgPCBPQkpfQ09NTUlUIHx8IGVudHJ5LT50eXBlID4gT0JKX0JMT0IpCisJCQkJZ290byBnaXZlX3VwOworCQkJdW51c2VfcGFjaygmd19jdXJzKTsKKwkJCXJldHVybjsKKwkJY2FzZSBPQkpfUkVGX0RFTFRBOgorCQkJaWYgKHJldXNlX2RlbHRhICYmICFlbnRyeS0+cHJlZmVycmVkX2Jhc2UpCisJCQkJYmFzZV9yZWYgPSB1c2VfcGFjayhwLCAmd19jdXJzLAorCQkJCQkJZW50cnktPmluX3BhY2tfb2Zmc2V0ICsgdXNlZCwgTlVMTCk7CisJCQllbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZSA9IHVzZWQgKyAyMDsKKwkJCWJyZWFrOworCQljYXNlIE9CSl9PRlNfREVMVEE6CisJCQlidWYgPSB1c2VfcGFjayhwLCAmd19jdXJzLAorCQkJCSAgICAgICBlbnRyeS0+aW5fcGFja19vZmZzZXQgKyB1c2VkLCBOVUxMKTsKKwkJCXVzZWRfMCA9IDA7CisJCQljID0gYnVmW3VzZWRfMCsrXTsKKwkJCW9mcyA9IGMgJiAxMjc7CisJCQl3aGlsZSAoYyAmIDEyOCkgeworCQkJCW9mcyArPSAxOworCQkJCWlmICghb2ZzIHx8IE1TQihvZnMsIDcpKSB7CisJCQkJCWVycm9yKCJkZWx0YSBiYXNlIG9mZnNldCBvdmVyZmxvdyBpbiBwYWNrIGZvciAlcyIsCisJCQkJCSAgICAgIHNoYTFfdG9faGV4KGVudHJ5LT5pZHguc2hhMSkpOworCQkJCQlnb3RvIGdpdmVfdXA7CisJCQkJfQorCQkJCWMgPSBidWZbdXNlZF8wKytdOworCQkJCW9mcyA9IChvZnMgPDwgNykgKyAoYyAmIDEyNyk7CisJCQl9CisJCQlvZnMgPSBlbnRyeS0+aW5fcGFja19vZmZzZXQgLSBvZnM7CisJCQlpZiAob2ZzIDw9IDAgfHwgb2ZzID49IGVudHJ5LT5pbl9wYWNrX29mZnNldCkgeworCQkJCWVycm9yKCJkZWx0YSBiYXNlIG9mZnNldCBvdXQgb2YgYm91bmQgZm9yICVzIiwKKwkJCQkgICAgICBzaGExX3RvX2hleChlbnRyeS0+aWR4LnNoYTEpKTsKKwkJCQlnb3RvIGdpdmVfdXA7CisJCQl9CisJCQlpZiAocmV1c2VfZGVsdGEgJiYgIWVudHJ5LT5wcmVmZXJyZWRfYmFzZSkgeworCQkJCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqcmV2aWR4OworCQkJCXJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBvZnMpOworCQkJCWlmICghcmV2aWR4KQorCQkJCQlnb3RvIGdpdmVfdXA7CisJCQkJYmFzZV9yZWYgPSBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIHJldmlkeC0+bnIpOworCQkJfQorCQkJZW50cnktPmluX3BhY2tfaGVhZGVyX3NpemUgPSB1c2VkICsgdXNlZF8wOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYmFzZV9yZWYgJiYgKGJhc2VfZW50cnkgPSBwYWNrbGlzdF9maW5kKCZ0b19wYWNrLCBiYXNlX3JlZiwgTlVMTCkpKSB7CisJCQkvKgorCQkJICogSWYgYmFzZV9yZWYgd2FzIHNldCBhYm92ZSB0aGF0IG1lYW5zIHdlIHdpc2ggdG8KKwkJCSAqIHJldXNlIGRlbHRhIGRhdGEsIGFuZCB3ZSBldmVuIGZvdW5kIHRoYXQgYmFzZQorCQkJICogaW4gdGhlIGxpc3Qgb2Ygb2JqZWN0cyB3ZSB3YW50IHRvIHBhY2suIEdvb2RpZSEKKwkJCSAqCisJCQkgKiBEZXB0aCB2YWx1ZSBkb2VzIG5vdCBtYXR0ZXIgLSBmaW5kX2RlbHRhcygpIHdpbGwKKwkJCSAqIG5ldmVyIGNvbnNpZGVyIHJldXNlZCBkZWx0YSBhcyB0aGUgYmFzZSBvYmplY3QgdG8KKwkJCSAqIGRlbHRpZnkgb3RoZXIgb2JqZWN0cyBhZ2FpbnN0LCBpbiBvcmRlciB0byBhdm9pZAorCQkJICogY2lyY3VsYXIgZGVsdGFzLgorCQkJICovCisJCQllbnRyeS0+dHlwZSA9IGVudHJ5LT5pbl9wYWNrX3R5cGU7CisJCQllbnRyeS0+ZGVsdGEgPSBiYXNlX2VudHJ5OworCQkJZW50cnktPmRlbHRhX3NpemUgPSBlbnRyeS0+c2l6ZTsKKwkJCWVudHJ5LT5kZWx0YV9zaWJsaW5nID0gYmFzZV9lbnRyeS0+ZGVsdGFfY2hpbGQ7CisJCQliYXNlX2VudHJ5LT5kZWx0YV9jaGlsZCA9IGVudHJ5OworCQkJdW51c2VfcGFjaygmd19jdXJzKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChlbnRyeS0+dHlwZSkgeworCQkJLyoKKwkJCSAqIFRoaXMgbXVzdCBiZSBhIGRlbHRhIGFuZCB3ZSBhbHJlYWR5IGtub3cgd2hhdCB0aGUKKwkJCSAqIGZpbmFsIG9iamVjdCB0eXBlIGlzLiAgTGV0J3MgZXh0cmFjdCB0aGUgYWN0dWFsCisJCQkgKiBvYmplY3Qgc2l6ZSBmcm9tIHRoZSBkZWx0YSBoZWFkZXIuCisJCQkgKi8KKwkJCWVudHJ5LT5zaXplID0gZ2V0X3NpemVfZnJvbV9kZWx0YShwLCAmd19jdXJzLAorCQkJCQllbnRyeS0+aW5fcGFja19vZmZzZXQgKyBlbnRyeS0+aW5fcGFja19oZWFkZXJfc2l6ZSk7CisJCQlpZiAoZW50cnktPnNpemUgPT0gMCkKKwkJCQlnb3RvIGdpdmVfdXA7CisJCQl1bnVzZV9wYWNrKCZ3X2N1cnMpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogTm8gY2hvaWNlIGJ1dCB0byBmYWxsIGJhY2sgdG8gdGhlIHJlY3Vyc2l2ZSBkZWx0YSB3YWxrCisJCSAqIHdpdGggc2hhMV9vYmplY3RfaW5mbygpIHRvIGZpbmQgYWJvdXQgdGhlIG9iamVjdCB0eXBlCisJCSAqIGF0IHRoaXMgcG9pbnQuLi4KKwkJICovCisJCWdpdmVfdXA6CisJCXVudXNlX3BhY2soJndfY3Vycyk7CisJfQorCisJZW50cnktPnR5cGUgPSBzaGExX29iamVjdF9pbmZvKGVudHJ5LT5pZHguc2hhMSwgJmVudHJ5LT5zaXplKTsKKwkvKgorCSAqIFRoZSBlcnJvciBjb25kaXRpb24gaXMgY2hlY2tlZCBpbiBwcmVwYXJlX3BhY2soKS4gIFRoaXMgaXMKKwkgKiB0byBwZXJtaXQgYSBtaXNzaW5nIHByZWZlcnJlZCBiYXNlIG9iamVjdCB0byBiZSBpZ25vcmVkCisJICogYXMgYSBwcmVmZXJyZWQgYmFzZS4gIERvaW5nIHNvIGNhbiByZXN1bHQgaW4gYSBsYXJnZXIKKwkgKiBwYWNrIGZpbGUsIGJ1dCB0aGUgdHJhbnNmZXIgd2lsbCBzdGlsbCB0YWtlIHBsYWNlLgorCSAqLworfQorCitzdGF0aWMgaW50IHBhY2tfb2Zmc2V0X3NvcnQoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmEgPSAqKHN0cnVjdCBvYmplY3RfZW50cnkgKiopX2E7CisJY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqYiA9ICooc3RydWN0IG9iamVjdF9lbnRyeSAqKilfYjsKKworCS8qIGF2b2lkIGZpbGVzeXN0ZW0gdHJhc2hpbmcgd2l0aCBsb29zZSBvYmplY3RzICovCisJaWYgKCFhLT5pbl9wYWNrICYmICFiLT5pbl9wYWNrKQorCQlyZXR1cm4gaGFzaGNtcChhLT5pZHguc2hhMSwgYi0+aWR4LnNoYTEpOworCisJaWYgKGEtPmluX3BhY2sgPCBiLT5pbl9wYWNrKQorCQlyZXR1cm4gLTE7CisJaWYgKGEtPmluX3BhY2sgPiBiLT5pbl9wYWNrKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gYS0+aW5fcGFja19vZmZzZXQgPCBiLT5pbl9wYWNrX29mZnNldCA/IC0xIDoKKwkJCShhLT5pbl9wYWNrX29mZnNldCA+IGItPmluX3BhY2tfb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZ2V0X29iamVjdF9kZXRhaWxzKHZvaWQpCit7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICoqc29ydGVkX2J5X29mZnNldDsKKworCXNvcnRlZF9ieV9vZmZzZXQgPSB4Y2FsbG9jKHRvX3BhY2subnJfb2JqZWN0cywgc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkgKikpOworCWZvciAoaSA9IDA7IGkgPCB0b19wYWNrLm5yX29iamVjdHM7IGkrKykKKwkJc29ydGVkX2J5X29mZnNldFtpXSA9IHRvX3BhY2sub2JqZWN0cyArIGk7CisJcXNvcnQoc29ydGVkX2J5X29mZnNldCwgdG9fcGFjay5ucl9vYmplY3RzLCBzaXplb2YoKnNvcnRlZF9ieV9vZmZzZXQpLCBwYWNrX29mZnNldF9zb3J0KTsKKworCWZvciAoaSA9IDA7IGkgPCB0b19wYWNrLm5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9IHNvcnRlZF9ieV9vZmZzZXRbaV07CisJCWNoZWNrX29iamVjdChlbnRyeSk7CisJCWlmIChiaWdfZmlsZV90aHJlc2hvbGQgPCBlbnRyeS0+c2l6ZSkKKwkJCWVudHJ5LT5ub190cnlfZGVsdGEgPSAxOworCX0KKworCWZyZWUoc29ydGVkX2J5X29mZnNldCk7Cit9CisKKy8qCisgKiBXZSBzZWFyY2ggZm9yIGRlbHRhcyBpbiBhIGxpc3Qgc29ydGVkIGJ5IHR5cGUsIGJ5IGZpbGVuYW1lIGhhc2gsIGFuZCB0aGVuCisgKiBieSBzaXplLCBzbyB0aGF0IHdlIHNlZSBwcm9ncmVzc2l2ZWx5IHNtYWxsZXIgYW5kIHNtYWxsZXIgZmlsZXMuCisgKiBUaGF0J3MgYmVjYXVzZSB3ZSBwcmVmZXIgZGVsdGFzIHRvIGJlIGZyb20gdGhlIGJpZ2dlciBmaWxlCisgKiB0byB0aGUgc21hbGxlciAtLSBkZWxldGVzIGFyZSBwb3RlbnRpYWxseSBjaGVhcGVyLCBidXQgcGVyaGFwcworICogbW9yZSBpbXBvcnRhbnRseSwgdGhlIGJpZ2dlciBmaWxlIGlzIGxpa2VseSB0aGUgbW9yZSByZWNlbnQKKyAqIG9uZS4gIFRoZSBkZWVwZXN0IGRlbHRhcyBhcmUgdGhlcmVmb3JlIHRoZSBvbGRlc3Qgb2JqZWN0cyB3aGljaCBhcmUKKyAqIGxlc3Mgc3VzY2VwdGlibGUgdG8gYmUgYWNjZXNzZWQgb2Z0ZW4uCisgKi8KK3N0YXRpYyBpbnQgdHlwZV9zaXplX3NvcnQoY29uc3Qgdm9pZCAqX2EsIGNvbnN0IHZvaWQgKl9iKQoreworCWNvbnN0IHN0cnVjdCBvYmplY3RfZW50cnkgKmEgPSAqKHN0cnVjdCBvYmplY3RfZW50cnkgKiopX2E7CisJY29uc3Qgc3RydWN0IG9iamVjdF9lbnRyeSAqYiA9ICooc3RydWN0IG9iamVjdF9lbnRyeSAqKilfYjsKKworCWlmIChhLT50eXBlID4gYi0+dHlwZSkKKwkJcmV0dXJuIC0xOworCWlmIChhLT50eXBlIDwgYi0+dHlwZSkKKwkJcmV0dXJuIDE7CisJaWYgKGEtPmhhc2ggPiBiLT5oYXNoKQorCQlyZXR1cm4gLTE7CisJaWYgKGEtPmhhc2ggPCBiLT5oYXNoKQorCQlyZXR1cm4gMTsKKwlpZiAoYS0+cHJlZmVycmVkX2Jhc2UgPiBiLT5wcmVmZXJyZWRfYmFzZSkKKwkJcmV0dXJuIC0xOworCWlmIChhLT5wcmVmZXJyZWRfYmFzZSA8IGItPnByZWZlcnJlZF9iYXNlKQorCQlyZXR1cm4gMTsKKwlpZiAoYS0+c2l6ZSA+IGItPnNpemUpCisJCXJldHVybiAtMTsKKwlpZiAoYS0+c2l6ZSA8IGItPnNpemUpCisJCXJldHVybiAxOworCXJldHVybiBhIDwgYiA/IC0xIDogKGEgPiBiKTsgIC8qIG5ld2VzdCBmaXJzdCAqLworfQorCitzdHJ1Y3QgdW5wYWNrZWQgeworCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5OworCXZvaWQgKmRhdGE7CisJc3RydWN0IGRlbHRhX2luZGV4ICppbmRleDsKKwl1bnNpZ25lZCBkZXB0aDsKK307CisKK3N0YXRpYyBpbnQgZGVsdGFfY2FjaGVhYmxlKHVuc2lnbmVkIGxvbmcgc3JjX3NpemUsIHVuc2lnbmVkIGxvbmcgdHJnX3NpemUsCisJCQkgICB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUpCit7CisJaWYgKG1heF9kZWx0YV9jYWNoZV9zaXplICYmIGRlbHRhX2NhY2hlX3NpemUgKyBkZWx0YV9zaXplID4gbWF4X2RlbHRhX2NhY2hlX3NpemUpCisJCXJldHVybiAwOworCisJaWYgKGRlbHRhX3NpemUgPCBjYWNoZV9tYXhfc21hbGxfZGVsdGFfc2l6ZSkKKwkJcmV0dXJuIDE7CisKKwkvKiBjYWNoZSBkZWx0YSwgaWYgb2JqZWN0cyBhcmUgbGFyZ2UgZW5vdWdoIGNvbXBhcmVkIHRvIGRlbHRhIHNpemUgKi8KKwlpZiAoKHNyY19zaXplID4+IDIwKSArICh0cmdfc2l6ZSA+PiAyMSkgPiAoZGVsdGFfc2l6ZSA+PiAxMCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCByZWFkX211dGV4OworI2RlZmluZSByZWFkX2xvY2soKQkJcHRocmVhZF9tdXRleF9sb2NrKCZyZWFkX211dGV4KQorI2RlZmluZSByZWFkX3VubG9jaygpCQlwdGhyZWFkX211dGV4X3VubG9jaygmcmVhZF9tdXRleCkKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBjYWNoZV9tdXRleDsKKyNkZWZpbmUgY2FjaGVfbG9jaygpCQlwdGhyZWFkX211dGV4X2xvY2soJmNhY2hlX211dGV4KQorI2RlZmluZSBjYWNoZV91bmxvY2soKQkJcHRocmVhZF9tdXRleF91bmxvY2soJmNhY2hlX211dGV4KQorCitzdGF0aWMgcHRocmVhZF9tdXRleF90IHByb2dyZXNzX211dGV4OworI2RlZmluZSBwcm9ncmVzc19sb2NrKCkJCXB0aHJlYWRfbXV0ZXhfbG9jaygmcHJvZ3Jlc3NfbXV0ZXgpCisjZGVmaW5lIHByb2dyZXNzX3VubG9jaygpCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwcm9ncmVzc19tdXRleCkKKworI2Vsc2UKKworI2RlZmluZSByZWFkX2xvY2soKQkJKHZvaWQpMAorI2RlZmluZSByZWFkX3VubG9jaygpCQkodm9pZCkwCisjZGVmaW5lIGNhY2hlX2xvY2soKQkJKHZvaWQpMAorI2RlZmluZSBjYWNoZV91bmxvY2soKQkJKHZvaWQpMAorI2RlZmluZSBwcm9ncmVzc19sb2NrKCkJCSh2b2lkKTAKKyNkZWZpbmUgcHJvZ3Jlc3NfdW5sb2NrKCkJKHZvaWQpMAorCisjZW5kaWYKKworc3RhdGljIGludCB0cnlfZGVsdGEoc3RydWN0IHVucGFja2VkICp0cmcsIHN0cnVjdCB1bnBhY2tlZCAqc3JjLAorCQkgICAgIHVuc2lnbmVkIG1heF9kZXB0aCwgdW5zaWduZWQgbG9uZyAqbWVtX3VzYWdlKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKnRyZ19lbnRyeSA9IHRyZy0+ZW50cnk7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqc3JjX2VudHJ5ID0gc3JjLT5lbnRyeTsKKwl1bnNpZ25lZCBsb25nIHRyZ19zaXplLCBzcmNfc2l6ZSwgZGVsdGFfc2l6ZSwgc2l6ZWRpZmYsIG1heF9zaXplLCBzejsKKwl1bnNpZ25lZCByZWZfZGVwdGg7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXZvaWQgKmRlbHRhX2J1ZjsKKworCS8qIERvbid0IGJvdGhlciBkb2luZyBkaWZmcyBiZXR3ZWVuIGRpZmZlcmVudCB0eXBlcyAqLworCWlmICh0cmdfZW50cnktPnR5cGUgIT0gc3JjX2VudHJ5LT50eXBlKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIFdlIGRvIG5vdCBib3RoZXIgdG8gdHJ5IGEgZGVsdGEgdGhhdCB3ZSBkaXNjYXJkZWQgb24gYW4KKwkgKiBlYXJsaWVyIHRyeSwgYnV0IG9ubHkgd2hlbiByZXVzaW5nIGRlbHRhIGRhdGEuICBOb3RlIHRoYXQKKwkgKiBzcmNfZW50cnkgdGhhdCBpcyBtYXJrZWQgYXMgdGhlIHByZWZlcnJlZF9iYXNlIHNob3VsZCBhbHdheXMKKwkgKiBiZSBjb25zaWRlcmVkLCBhcyBldmVuIGlmIHdlIHByb2R1Y2UgYSBzdWJvcHRpbWFsIGRlbHRhIGFnYWluc3QKKwkgKiBpdCwgd2Ugd2lsbCBzdGlsbCBzYXZlIHRoZSB0cmFuc2ZlciBjb3N0LCBhcyB3ZSBhbHJlYWR5IGtub3cKKwkgKiB0aGUgb3RoZXIgc2lkZSBoYXMgaXQgYW5kIHdlIHdvbid0IHNlbmQgc3JjX2VudHJ5IGF0IGFsbC4KKwkgKi8KKwlpZiAocmV1c2VfZGVsdGEgJiYgdHJnX2VudHJ5LT5pbl9wYWNrICYmCisJICAgIHRyZ19lbnRyeS0+aW5fcGFjayA9PSBzcmNfZW50cnktPmluX3BhY2sgJiYKKwkgICAgIXNyY19lbnRyeS0+cHJlZmVycmVkX2Jhc2UgJiYKKwkgICAgdHJnX2VudHJ5LT5pbl9wYWNrX3R5cGUgIT0gT0JKX1JFRl9ERUxUQSAmJgorCSAgICB0cmdfZW50cnktPmluX3BhY2tfdHlwZSAhPSBPQkpfT0ZTX0RFTFRBKQorCQlyZXR1cm4gMDsKKworCS8qIExldCdzIG5vdCBidXN0IHRoZSBhbGxvd2VkIGRlcHRoLiAqLworCWlmIChzcmMtPmRlcHRoID49IG1heF9kZXB0aCkKKwkJcmV0dXJuIDA7CisKKwkvKiBOb3cgc29tZSBzaXplIGZpbHRlcmluZyBoZXVyaXN0aWNzLiAqLworCXRyZ19zaXplID0gdHJnX2VudHJ5LT5zaXplOworCWlmICghdHJnX2VudHJ5LT5kZWx0YSkgeworCQltYXhfc2l6ZSA9IHRyZ19zaXplLzIgLSAyMDsKKwkJcmVmX2RlcHRoID0gMTsKKwl9IGVsc2UgeworCQltYXhfc2l6ZSA9IHRyZ19lbnRyeS0+ZGVsdGFfc2l6ZTsKKwkJcmVmX2RlcHRoID0gdHJnLT5kZXB0aDsKKwl9CisJbWF4X3NpemUgPSAodWludDY0X3QpbWF4X3NpemUgKiAobWF4X2RlcHRoIC0gc3JjLT5kZXB0aCkgLworCQkJCQkJKG1heF9kZXB0aCAtIHJlZl9kZXB0aCArIDEpOworCWlmIChtYXhfc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKKwlzcmNfc2l6ZSA9IHNyY19lbnRyeS0+c2l6ZTsKKwlzaXplZGlmZiA9IHNyY19zaXplIDwgdHJnX3NpemUgPyB0cmdfc2l6ZSAtIHNyY19zaXplIDogMDsKKwlpZiAoc2l6ZWRpZmYgPj0gbWF4X3NpemUpCisJCXJldHVybiAwOworCWlmICh0cmdfc2l6ZSA8IHNyY19zaXplIC8gMzIpCisJCXJldHVybiAwOworCisJLyogTG9hZCBkYXRhIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi8KKwlpZiAoIXRyZy0+ZGF0YSkgeworCQlyZWFkX2xvY2soKTsKKwkJdHJnLT5kYXRhID0gcmVhZF9zaGExX2ZpbGUodHJnX2VudHJ5LT5pZHguc2hhMSwgJnR5cGUsICZzeik7CisJCXJlYWRfdW5sb2NrKCk7CisJCWlmICghdHJnLT5kYXRhKQorCQkJZGllKCJvYmplY3QgJXMgY2Fubm90IGJlIHJlYWQiLAorCQkJICAgIHNoYTFfdG9faGV4KHRyZ19lbnRyeS0+aWR4LnNoYTEpKTsKKwkJaWYgKHN6ICE9IHRyZ19zaXplKQorCQkJZGllKCJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCVsdSB2cyAlbHUpIiwKKwkJCSAgICBzaGExX3RvX2hleCh0cmdfZW50cnktPmlkeC5zaGExKSwgc3osIHRyZ19zaXplKTsKKwkJKm1lbV91c2FnZSArPSBzejsKKwl9CisJaWYgKCFzcmMtPmRhdGEpIHsKKwkJcmVhZF9sb2NrKCk7CisJCXNyYy0+ZGF0YSA9IHJlYWRfc2hhMV9maWxlKHNyY19lbnRyeS0+aWR4LnNoYTEsICZ0eXBlLCAmc3opOworCQlyZWFkX3VubG9jaygpOworCQlpZiAoIXNyYy0+ZGF0YSkgeworCQkJaWYgKHNyY19lbnRyeS0+cHJlZmVycmVkX2Jhc2UpIHsKKwkJCQlzdGF0aWMgaW50IHdhcm5lZCA9IDA7CisJCQkJaWYgKCF3YXJuZWQrKykKKwkJCQkJd2FybmluZygib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIiwKKwkJCQkJCXNoYTFfdG9faGV4KHNyY19lbnRyeS0+aWR4LnNoYTEpKTsKKwkJCQkvKgorCQkJCSAqIFRob3NlIG9iamVjdHMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUKKwkJCQkgKiByZXN1bHRpbmcgcGFjay4gIEJlIHJlc2lsaWVudCBhbmQgaWdub3JlCisJCQkJICogdGhlbSBpZiB0aGV5IGNhbid0IGJlIHJlYWQsIGluIGNhc2UgdGhlCisJCQkJICogcGFjayBjb3VsZCBiZSBjcmVhdGVkIG5ldmVydGhlbGVzcy4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWRpZSgib2JqZWN0ICVzIGNhbm5vdCBiZSByZWFkIiwKKwkJCSAgICBzaGExX3RvX2hleChzcmNfZW50cnktPmlkeC5zaGExKSk7CisJCX0KKwkJaWYgKHN6ICE9IHNyY19zaXplKQorCQkJZGllKCJvYmplY3QgJXMgaW5jb25zaXN0ZW50IG9iamVjdCBsZW5ndGggKCVsdSB2cyAlbHUpIiwKKwkJCSAgICBzaGExX3RvX2hleChzcmNfZW50cnktPmlkeC5zaGExKSwgc3osIHNyY19zaXplKTsKKwkJKm1lbV91c2FnZSArPSBzejsKKwl9CisJaWYgKCFzcmMtPmluZGV4KSB7CisJCXNyYy0+aW5kZXggPSBjcmVhdGVfZGVsdGFfaW5kZXgoc3JjLT5kYXRhLCBzcmNfc2l6ZSk7CisJCWlmICghc3JjLT5pbmRleCkgeworCQkJc3RhdGljIGludCB3YXJuZWQgPSAwOworCQkJaWYgKCF3YXJuZWQrKykKKwkJCQl3YXJuaW5nKCJzdWJvcHRpbWFsIHBhY2sgLSBvdXQgb2YgbWVtb3J5Iik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkqbWVtX3VzYWdlICs9IHNpemVvZl9kZWx0YV9pbmRleChzcmMtPmluZGV4KTsKKwl9CisKKwlkZWx0YV9idWYgPSBjcmVhdGVfZGVsdGEoc3JjLT5pbmRleCwgdHJnLT5kYXRhLCB0cmdfc2l6ZSwgJmRlbHRhX3NpemUsIG1heF9zaXplKTsKKwlpZiAoIWRlbHRhX2J1ZikKKwkJcmV0dXJuIDA7CisKKwlpZiAodHJnX2VudHJ5LT5kZWx0YSkgeworCQkvKiBQcmVmZXIgb25seSBzaGFsbG93ZXIgc2FtZS1zaXplZCBkZWx0YXMuICovCisJCWlmIChkZWx0YV9zaXplID09IHRyZ19lbnRyeS0+ZGVsdGFfc2l6ZSAmJgorCQkgICAgc3JjLT5kZXB0aCArIDEgPj0gdHJnLT5kZXB0aCkgeworCQkJZnJlZShkZWx0YV9idWYpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKgorCSAqIEhhbmRsZSBtZW1vcnkgYWxsb2NhdGlvbiBvdXRzaWRlIG9mIHRoZSBjYWNoZQorCSAqIGFjY291bnRpbmcgbG9jay4gIENvbXBpbGVyIHdpbGwgb3B0aW1pemUgdGhlIHN0cmFuZ2VuZXNzCisJICogYXdheSB3aGVuIE5PX1BUSFJFQURTIGlzIGRlZmluZWQuCisJICovCisJZnJlZSh0cmdfZW50cnktPmRlbHRhX2RhdGEpOworCWNhY2hlX2xvY2soKTsKKwlpZiAodHJnX2VudHJ5LT5kZWx0YV9kYXRhKSB7CisJCWRlbHRhX2NhY2hlX3NpemUgLT0gdHJnX2VudHJ5LT5kZWx0YV9zaXplOworCQl0cmdfZW50cnktPmRlbHRhX2RhdGEgPSBOVUxMOworCX0KKwlpZiAoZGVsdGFfY2FjaGVhYmxlKHNyY19zaXplLCB0cmdfc2l6ZSwgZGVsdGFfc2l6ZSkpIHsKKwkJZGVsdGFfY2FjaGVfc2l6ZSArPSBkZWx0YV9zaXplOworCQljYWNoZV91bmxvY2soKTsKKwkJdHJnX2VudHJ5LT5kZWx0YV9kYXRhID0geHJlYWxsb2MoZGVsdGFfYnVmLCBkZWx0YV9zaXplKTsKKwl9IGVsc2UgeworCQljYWNoZV91bmxvY2soKTsKKwkJZnJlZShkZWx0YV9idWYpOworCX0KKworCXRyZ19lbnRyeS0+ZGVsdGEgPSBzcmNfZW50cnk7CisJdHJnX2VudHJ5LT5kZWx0YV9zaXplID0gZGVsdGFfc2l6ZTsKKwl0cmctPmRlcHRoID0gc3JjLT5kZXB0aCArIDE7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjaGVja19kZWx0YV9saW1pdChzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICptZSwgdW5zaWduZWQgaW50IG4pCit7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqY2hpbGQgPSBtZS0+ZGVsdGFfY2hpbGQ7CisJdW5zaWduZWQgaW50IG0gPSBuOworCXdoaWxlIChjaGlsZCkgeworCQl1bnNpZ25lZCBpbnQgYyA9IGNoZWNrX2RlbHRhX2xpbWl0KGNoaWxkLCBuICsgMSk7CisJCWlmIChtIDwgYykKKwkJCW0gPSBjOworCQljaGlsZCA9IGNoaWxkLT5kZWx0YV9zaWJsaW5nOworCX0KKwlyZXR1cm4gbTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZnJlZV91bnBhY2tlZChzdHJ1Y3QgdW5wYWNrZWQgKm4pCit7CisJdW5zaWduZWQgbG9uZyBmcmVlZF9tZW0gPSBzaXplb2ZfZGVsdGFfaW5kZXgobi0+aW5kZXgpOworCWZyZWVfZGVsdGFfaW5kZXgobi0+aW5kZXgpOworCW4tPmluZGV4ID0gTlVMTDsKKwlpZiAobi0+ZGF0YSkgeworCQlmcmVlZF9tZW0gKz0gbi0+ZW50cnktPnNpemU7CisJCWZyZWUobi0+ZGF0YSk7CisJCW4tPmRhdGEgPSBOVUxMOworCX0KKwluLT5lbnRyeSA9IE5VTEw7CisJbi0+ZGVwdGggPSAwOworCXJldHVybiBmcmVlZF9tZW07Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfZGVsdGFzKHN0cnVjdCBvYmplY3RfZW50cnkgKipsaXN0LCB1bnNpZ25lZCAqbGlzdF9zaXplLAorCQkJaW50IHdpbmRvdywgaW50IGRlcHRoLCB1bnNpZ25lZCAqcHJvY2Vzc2VkKQoreworCXVpbnQzMl90IGksIGlkeCA9IDAsIGNvdW50ID0gMDsKKwlzdHJ1Y3QgdW5wYWNrZWQgKmFycmF5OworCXVuc2lnbmVkIGxvbmcgbWVtX3VzYWdlID0gMDsKKworCWFycmF5ID0geGNhbGxvYyh3aW5kb3csIHNpemVvZihzdHJ1Y3QgdW5wYWNrZWQpKTsKKworCWZvciAoOzspIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnk7CisJCXN0cnVjdCB1bnBhY2tlZCAqbiA9IGFycmF5ICsgaWR4OworCQlpbnQgaiwgbWF4X2RlcHRoLCBiZXN0X2Jhc2UgPSAtMTsKKworCQlwcm9ncmVzc19sb2NrKCk7CisJCWlmICghKmxpc3Rfc2l6ZSkgeworCQkJcHJvZ3Jlc3NfdW5sb2NrKCk7CisJCQlicmVhazsKKwkJfQorCQllbnRyeSA9ICpsaXN0Kys7CisJCSgqbGlzdF9zaXplKS0tOworCQlpZiAoIWVudHJ5LT5wcmVmZXJyZWRfYmFzZSkgeworCQkJKCpwcm9jZXNzZWQpKys7CisJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzX3N0YXRlLCAqcHJvY2Vzc2VkKTsKKwkJfQorCQlwcm9ncmVzc191bmxvY2soKTsKKworCQltZW1fdXNhZ2UgLT0gZnJlZV91bnBhY2tlZChuKTsKKwkJbi0+ZW50cnkgPSBlbnRyeTsKKworCQl3aGlsZSAod2luZG93X21lbW9yeV9saW1pdCAmJgorCQkgICAgICAgbWVtX3VzYWdlID4gd2luZG93X21lbW9yeV9saW1pdCAmJgorCQkgICAgICAgY291bnQgPiAxKSB7CisJCQl1aW50MzJfdCB0YWlsID0gKGlkeCArIHdpbmRvdyAtIGNvdW50KSAlIHdpbmRvdzsKKwkJCW1lbV91c2FnZSAtPSBmcmVlX3VucGFja2VkKGFycmF5ICsgdGFpbCk7CisJCQljb3VudC0tOworCQl9CisKKwkJLyogV2UgZG8gbm90IGNvbXB1dGUgZGVsdGEgdG8gKmNyZWF0ZSogb2JqZWN0cyB3ZSBhcmUgbm90CisJCSAqIGdvaW5nIHRvIHBhY2suCisJCSAqLworCQlpZiAoZW50cnktPnByZWZlcnJlZF9iYXNlKQorCQkJZ290byBuZXh0OworCisJCS8qCisJCSAqIElmIHRoZSBjdXJyZW50IG9iamVjdCBpcyBhdCBwYWNrIGVkZ2UsIHRha2UgdGhlIGRlcHRoIHRoZQorCQkgKiBvYmplY3RzIHRoYXQgZGVwZW5kIG9uIHRoZSBjdXJyZW50IG9iamVjdCBpbnRvIGFjY291bnQKKwkJICogb3RoZXJ3aXNlIHRoZXkgd291bGQgYmVjb21lIHRvbyBkZWVwLgorCQkgKi8KKwkJbWF4X2RlcHRoID0gZGVwdGg7CisJCWlmIChlbnRyeS0+ZGVsdGFfY2hpbGQpIHsKKwkJCW1heF9kZXB0aCAtPSBjaGVja19kZWx0YV9saW1pdChlbnRyeSwgMCk7CisJCQlpZiAobWF4X2RlcHRoIDw9IDApCisJCQkJZ290byBuZXh0OworCQl9CisKKwkJaiA9IHdpbmRvdzsKKwkJd2hpbGUgKC0taiA+IDApIHsKKwkJCWludCByZXQ7CisJCQl1aW50MzJfdCBvdGhlcl9pZHggPSBpZHggKyBqOworCQkJc3RydWN0IHVucGFja2VkICptOworCQkJaWYgKG90aGVyX2lkeCA+PSB3aW5kb3cpCisJCQkJb3RoZXJfaWR4IC09IHdpbmRvdzsKKwkJCW0gPSBhcnJheSArIG90aGVyX2lkeDsKKwkJCWlmICghbS0+ZW50cnkpCisJCQkJYnJlYWs7CisJCQlyZXQgPSB0cnlfZGVsdGEobiwgbSwgbWF4X2RlcHRoLCAmbWVtX3VzYWdlKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWJyZWFrOworCQkJZWxzZSBpZiAocmV0ID4gMCkKKwkJCQliZXN0X2Jhc2UgPSBvdGhlcl9pZHg7CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBkZWNpZGVkIHRvIGNhY2hlIHRoZSBkZWx0YSBkYXRhLCB0aGVuIGl0IGlzIGJlc3QKKwkJICogdG8gY29tcHJlc3MgaXQgcmlnaHQgYXdheS4gIEZpcnN0IGJlY2F1c2Ugd2UgaGF2ZSB0byBkbworCQkgKiBpdCBhbnl3YXksIGFuZCBkb2luZyBpdCBoZXJlIHdoaWxlIHdlJ3JlIHRocmVhZGVkIHdpbGwKKwkJICogc2F2ZSBhIGxvdCBvZiB0aW1lIGluIHRoZSBub24gdGhyZWFkZWQgd3JpdGUgcGhhc2UsCisJCSAqIGFzIHdlbGwgYXMgYWxsb3cgZm9yIGNhY2hpbmcgbW9yZSBkZWx0YXMgd2l0aGluCisJCSAqIHRoZSBzYW1lIGNhY2hlIHNpemUgbGltaXQuCisJCSAqIC4uLgorCQkgKiBCdXQgb25seSBpZiBub3Qgd3JpdGluZyB0byBzdGRvdXQsIHNpbmNlIGluIHRoYXQgY2FzZQorCQkgKiB0aGUgbmV0d29yayBpcyBtb3N0IGxpa2VseSB0aHJvdHRsaW5nIHdyaXRlcyBhbnl3YXksCisJCSAqIGFuZCB0aGVyZWZvcmUgaXQgaXMgYmVzdCB0byBnbyB0byB0aGUgd3JpdGUgcGhhc2UgQVNBUAorCQkgKiBpbnN0ZWFkLCBhcyB3ZSBjYW4gYWZmb3JkIHNwZW5kaW5nIG1vcmUgdGltZSBjb21wcmVzc2luZworCQkgKiBiZXR3ZWVuIHdyaXRlcyBhdCB0aGF0IG1vbWVudC4KKwkJICovCisJCWlmIChlbnRyeS0+ZGVsdGFfZGF0YSAmJiAhcGFja190b19zdGRvdXQpIHsKKwkJCWVudHJ5LT56X2RlbHRhX3NpemUgPSBkb19jb21wcmVzcygmZW50cnktPmRlbHRhX2RhdGEsCisJCQkJCQkJICBlbnRyeS0+ZGVsdGFfc2l6ZSk7CisJCQljYWNoZV9sb2NrKCk7CisJCQlkZWx0YV9jYWNoZV9zaXplIC09IGVudHJ5LT5kZWx0YV9zaXplOworCQkJZGVsdGFfY2FjaGVfc2l6ZSArPSBlbnRyeS0+el9kZWx0YV9zaXplOworCQkJY2FjaGVfdW5sb2NrKCk7CisJCX0KKworCQkvKiBpZiB3ZSBtYWRlIG4gYSBkZWx0YSwgYW5kIGlmIG4gaXMgYWxyZWFkeSBhdCBtYXgKKwkJICogZGVwdGgsIGxlYXZpbmcgaXQgaW4gdGhlIHdpbmRvdyBpcyBwb2ludGxlc3MuICB3ZQorCQkgKiBzaG91bGQgZXZpY3QgaXQgZmlyc3QuCisJCSAqLworCQlpZiAoZW50cnktPmRlbHRhICYmIG1heF9kZXB0aCA8PSBuLT5kZXB0aCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIE1vdmUgdGhlIGJlc3QgZGVsdGEgYmFzZSB1cCBpbiB0aGUgd2luZG93LCBhZnRlciB0aGUKKwkJICogY3VycmVudGx5IGRlbHRpZmllZCBvYmplY3QsIHRvIGtlZXAgaXQgbG9uZ2VyLiAgSXQgd2lsbAorCQkgKiBiZSB0aGUgZmlyc3QgYmFzZSBvYmplY3QgdG8gYmUgYXR0ZW1wdGVkIG5leHQuCisJCSAqLworCQlpZiAoZW50cnktPmRlbHRhKSB7CisJCQlzdHJ1Y3QgdW5wYWNrZWQgc3dhcCA9IGFycmF5W2Jlc3RfYmFzZV07CisJCQlpbnQgZGlzdCA9ICh3aW5kb3cgKyBpZHggLSBiZXN0X2Jhc2UpICUgd2luZG93OworCQkJaW50IGRzdCA9IGJlc3RfYmFzZTsKKwkJCXdoaWxlIChkaXN0LS0pIHsKKwkJCQlpbnQgc3JjID0gKGRzdCArIDEpICUgd2luZG93OworCQkJCWFycmF5W2RzdF0gPSBhcnJheVtzcmNdOworCQkJCWRzdCA9IHNyYzsKKwkJCX0KKwkJCWFycmF5W2RzdF0gPSBzd2FwOworCQl9CisKKwkJbmV4dDoKKwkJaWR4Kys7CisJCWlmIChjb3VudCArIDEgPCB3aW5kb3cpCisJCQljb3VudCsrOworCQlpZiAoaWR4ID49IHdpbmRvdykKKwkJCWlkeCA9IDA7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHdpbmRvdzsgKytpKSB7CisJCWZyZWVfZGVsdGFfaW5kZXgoYXJyYXlbaV0uaW5kZXgpOworCQlmcmVlKGFycmF5W2ldLmRhdGEpOworCX0KKwlmcmVlKGFycmF5KTsKK30KKworI2lmbmRlZiBOT19QVEhSRUFEUworCitzdGF0aWMgdm9pZCB0cnlfdG9fZnJlZV9mcm9tX3RocmVhZHMoc2l6ZV90IHNpemUpCit7CisJcmVhZF9sb2NrKCk7CisJcmVsZWFzZV9wYWNrX21lbW9yeShzaXplKTsKKwlyZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgdHJ5X3RvX2ZyZWVfdCBvbGRfdHJ5X3RvX2ZyZWVfcm91dGluZTsKKworLyoKKyAqIFRoZSBtYWluIHRocmVhZCB3YWl0cyBvbiB0aGUgY29uZGl0aW9uIHRoYXQgKGF0IGxlYXN0KSBvbmUgb2YgdGhlIHdvcmtlcnMKKyAqIGhhcyBzdG9wcGVkIHdvcmtpbmcgKHdoaWNoIGlzIGluZGljYXRlZCBpbiB0aGUgLndvcmtpbmcgbWVtYmVyIG9mCisgKiBzdHJ1Y3QgdGhyZWFkX3BhcmFtcykuCisgKiBXaGVuIGEgd29yayB0aHJlYWQgaGFzIGNvbXBsZXRlZCBpdHMgd29yaywgaXQgc2V0cyAud29ya2luZyB0byAwIGFuZAorICogc2lnbmFscyB0aGUgbWFpbiB0aHJlYWQgYW5kIHdhaXRzIG9uIHRoZSBjb25kaXRpb24gdGhhdCAuZGF0YV9yZWFkeQorICogYmVjb21lcyAxLgorICovCisKK3N0cnVjdCB0aHJlYWRfcGFyYW1zIHsKKwlwdGhyZWFkX3QgdGhyZWFkOworCXN0cnVjdCBvYmplY3RfZW50cnkgKipsaXN0OworCXVuc2lnbmVkIGxpc3Rfc2l6ZTsKKwl1bnNpZ25lZCByZW1haW5pbmc7CisJaW50IHdpbmRvdzsKKwlpbnQgZGVwdGg7CisJaW50IHdvcmtpbmc7CisJaW50IGRhdGFfcmVhZHk7CisJcHRocmVhZF9tdXRleF90IG11dGV4OworCXB0aHJlYWRfY29uZF90IGNvbmQ7CisJdW5zaWduZWQgKnByb2Nlc3NlZDsKK307CisKK3N0YXRpYyBwdGhyZWFkX2NvbmRfdCBwcm9ncmVzc19jb25kOworCisvKgorICogTXV0ZXggYW5kIGNvbmRpdGlvbmFsIHZhcmlhYmxlIGNhbid0IGJlIHN0YXRpY2FsbHktaW5pdGlhbGl6ZWQgb24gV2luZG93cy4KKyAqLworc3RhdGljIHZvaWQgaW5pdF90aHJlYWRlZF9zZWFyY2godm9pZCkKK3sKKwlpbml0X3JlY3Vyc2l2ZV9tdXRleCgmcmVhZF9tdXRleCk7CisJcHRocmVhZF9tdXRleF9pbml0KCZjYWNoZV9tdXRleCwgTlVMTCk7CisJcHRocmVhZF9tdXRleF9pbml0KCZwcm9ncmVzc19tdXRleCwgTlVMTCk7CisJcHRocmVhZF9jb25kX2luaXQoJnByb2dyZXNzX2NvbmQsIE5VTEwpOworCW9sZF90cnlfdG9fZnJlZV9yb3V0aW5lID0gc2V0X3RyeV90b19mcmVlX3JvdXRpbmUodHJ5X3RvX2ZyZWVfZnJvbV90aHJlYWRzKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cF90aHJlYWRlZF9zZWFyY2godm9pZCkKK3sKKwlzZXRfdHJ5X3RvX2ZyZWVfcm91dGluZShvbGRfdHJ5X3RvX2ZyZWVfcm91dGluZSk7CisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJnByb2dyZXNzX2NvbmQpOworCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmcmVhZF9tdXRleCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZjYWNoZV9tdXRleCk7CisJcHRocmVhZF9tdXRleF9kZXN0cm95KCZwcm9ncmVzc19tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkICp0aHJlYWRlZF9maW5kX2RlbHRhcyh2b2lkICphcmcpCit7CisJc3RydWN0IHRocmVhZF9wYXJhbXMgKm1lID0gYXJnOworCisJd2hpbGUgKG1lLT5yZW1haW5pbmcpIHsKKwkJZmluZF9kZWx0YXMobWUtPmxpc3QsICZtZS0+cmVtYWluaW5nLAorCQkJICAgIG1lLT53aW5kb3csIG1lLT5kZXB0aCwgbWUtPnByb2Nlc3NlZCk7CisKKwkJcHJvZ3Jlc3NfbG9jaygpOworCQltZS0+d29ya2luZyA9IDA7CisJCXB0aHJlYWRfY29uZF9zaWduYWwoJnByb2dyZXNzX2NvbmQpOworCQlwcm9ncmVzc191bmxvY2soKTsKKworCQkvKgorCQkgKiBXZSBtdXN0IG5vdCBzZXQgLT5kYXRhX3JlYWR5IGJlZm9yZSB3ZSB3YWl0IG9uIHRoZQorCQkgKiBjb25kaXRpb24gYmVjYXVzZSB0aGUgbWFpbiB0aHJlYWQgbWF5IGhhdmUgc2V0IGl0IHRvIDEKKwkJICogYmVmb3JlIHdlIGdldCBoZXJlLiBJbiBvcmRlciB0byBiZSBzdXJlIHRoYXQgbmV3CisJCSAqIHdvcmsgaXMgYXZhaWxhYmxlIGlmIHdlIHNlZSAxIGluIC0+ZGF0YV9yZWFkeSwgaXQKKwkJICogd2FzIGluaXRpYWxpemVkIHRvIDAgYmVmb3JlIHRoaXMgdGhyZWFkIHdhcyBzcGF3bmVkCisJCSAqIGFuZCB3ZSByZXNldCBpdCB0byAwIHJpZ2h0IGF3YXkuCisJCSAqLworCQlwdGhyZWFkX211dGV4X2xvY2soJm1lLT5tdXRleCk7CisJCXdoaWxlICghbWUtPmRhdGFfcmVhZHkpCisJCQlwdGhyZWFkX2NvbmRfd2FpdCgmbWUtPmNvbmQsICZtZS0+bXV0ZXgpOworCQltZS0+ZGF0YV9yZWFkeSA9IDA7CisJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtZS0+bXV0ZXgpOworCX0KKwkvKiBsZWF2ZSAtPndvcmtpbmcgMSBzbyB0aGF0IHRoaXMgZG9lc24ndCBnZXQgbW9yZSB3b3JrIGFzc2lnbmVkICovCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGxsX2ZpbmRfZGVsdGFzKHN0cnVjdCBvYmplY3RfZW50cnkgKipsaXN0LCB1bnNpZ25lZCBsaXN0X3NpemUsCisJCQkgICBpbnQgd2luZG93LCBpbnQgZGVwdGgsIHVuc2lnbmVkICpwcm9jZXNzZWQpCit7CisJc3RydWN0IHRocmVhZF9wYXJhbXMgKnA7CisJaW50IGksIHJldCwgYWN0aXZlX3RocmVhZHMgPSAwOworCisJaW5pdF90aHJlYWRlZF9zZWFyY2goKTsKKworCWlmIChkZWx0YV9zZWFyY2hfdGhyZWFkcyA8PSAxKSB7CisJCWZpbmRfZGVsdGFzKGxpc3QsICZsaXN0X3NpemUsIHdpbmRvdywgZGVwdGgsIHByb2Nlc3NlZCk7CisJCWNsZWFudXBfdGhyZWFkZWRfc2VhcmNoKCk7CisJCXJldHVybjsKKwl9CisJaWYgKHByb2dyZXNzID4gcGFja190b19zdGRvdXQpCisJCWZwcmludGYoc3RkZXJyLCAiRGVsdGEgY29tcHJlc3Npb24gdXNpbmcgdXAgdG8gJWQgdGhyZWFkcy5cbiIsCisJCQkJZGVsdGFfc2VhcmNoX3RocmVhZHMpOworCXAgPSB4Y2FsbG9jKGRlbHRhX3NlYXJjaF90aHJlYWRzLCBzaXplb2YoKnApKTsKKworCS8qIFBhcnRpdGlvbiB0aGUgd29yayBhbW9uZ3N0IHdvcmsgdGhyZWFkcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGVsdGFfc2VhcmNoX3RocmVhZHM7IGkrKykgeworCQl1bnNpZ25lZCBzdWJfc2l6ZSA9IGxpc3Rfc2l6ZSAvIChkZWx0YV9zZWFyY2hfdGhyZWFkcyAtIGkpOworCisJCS8qIGRvbid0IHVzZSB0b28gc21hbGwgc2VnbWVudHMgb3Igbm8gZGVsdGFzIHdpbGwgYmUgZm91bmQgKi8KKwkJaWYgKHN1Yl9zaXplIDwgMip3aW5kb3cgJiYgaSsxIDwgZGVsdGFfc2VhcmNoX3RocmVhZHMpCisJCQlzdWJfc2l6ZSA9IDA7CisKKwkJcFtpXS53aW5kb3cgPSB3aW5kb3c7CisJCXBbaV0uZGVwdGggPSBkZXB0aDsKKwkJcFtpXS5wcm9jZXNzZWQgPSBwcm9jZXNzZWQ7CisJCXBbaV0ud29ya2luZyA9IDE7CisJCXBbaV0uZGF0YV9yZWFkeSA9IDA7CisKKwkJLyogdHJ5IHRvIHNwbGl0IGNodW5rcyBvbiAicGF0aCIgYm91bmRhcmllcyAqLworCQl3aGlsZSAoc3ViX3NpemUgJiYgc3ViX3NpemUgPCBsaXN0X3NpemUgJiYKKwkJICAgICAgIGxpc3Rbc3ViX3NpemVdLT5oYXNoICYmCisJCSAgICAgICBsaXN0W3N1Yl9zaXplXS0+aGFzaCA9PSBsaXN0W3N1Yl9zaXplLTFdLT5oYXNoKQorCQkJc3ViX3NpemUrKzsKKworCQlwW2ldLmxpc3QgPSBsaXN0OworCQlwW2ldLmxpc3Rfc2l6ZSA9IHN1Yl9zaXplOworCQlwW2ldLnJlbWFpbmluZyA9IHN1Yl9zaXplOworCisJCWxpc3QgKz0gc3ViX3NpemU7CisJCWxpc3Rfc2l6ZSAtPSBzdWJfc2l6ZTsKKwl9CisKKwkvKiBTdGFydCB3b3JrIHRocmVhZHMuICovCisJZm9yIChpID0gMDsgaSA8IGRlbHRhX3NlYXJjaF90aHJlYWRzOyBpKyspIHsKKwkJaWYgKCFwW2ldLmxpc3Rfc2l6ZSkKKwkJCWNvbnRpbnVlOworCQlwdGhyZWFkX211dGV4X2luaXQoJnBbaV0ubXV0ZXgsIE5VTEwpOworCQlwdGhyZWFkX2NvbmRfaW5pdCgmcFtpXS5jb25kLCBOVUxMKTsKKwkJcmV0ID0gcHRocmVhZF9jcmVhdGUoJnBbaV0udGhyZWFkLCBOVUxMLAorCQkJCSAgICAgdGhyZWFkZWRfZmluZF9kZWx0YXMsICZwW2ldKTsKKwkJaWYgKHJldCkKKwkJCWRpZSgidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIiwgc3RyZXJyb3IocmV0KSk7CisJCWFjdGl2ZV90aHJlYWRzKys7CisJfQorCisJLyoKKwkgKiBOb3cgbGV0J3Mgd2FpdCBmb3Igd29yayBjb21wbGV0aW9uLiAgRWFjaCB0aW1lIGEgdGhyZWFkIGlzIGRvbmUKKwkgKiB3aXRoIGl0cyB3b3JrLCB3ZSBzdGVhbCBoYWxmIG9mIHRoZSByZW1haW5pbmcgd29yayBmcm9tIHRoZQorCSAqIHRocmVhZCB3aXRoIHRoZSBsYXJnZXN0IG51bWJlciBvZiB1bnByb2Nlc3NlZCBvYmplY3RzIGFuZCBnaXZlCisJICogaXQgdG8gdGhhdCBuZXdseSBpZGxlIHRocmVhZC4gIFRoaXMgZW5zdXJlIGdvb2QgbG9hZCBiYWxhbmNpbmcKKwkgKiB1bnRpbCB0aGUgcmVtYWluaW5nIG9iamVjdCBsaXN0IHNlZ21lbnRzIGFyZSBzaW1wbHkgdG9vIHNob3J0CisJICogdG8gYmUgd29ydGggc3BsaXR0aW5nIGFueW1vcmUuCisJICovCisJd2hpbGUgKGFjdGl2ZV90aHJlYWRzKSB7CisJCXN0cnVjdCB0aHJlYWRfcGFyYW1zICp0YXJnZXQgPSBOVUxMOworCQlzdHJ1Y3QgdGhyZWFkX3BhcmFtcyAqdmljdGltID0gTlVMTDsKKwkJdW5zaWduZWQgc3ViX3NpemUgPSAwOworCisJCXByb2dyZXNzX2xvY2soKTsKKwkJZm9yICg7OykgeworCQkJZm9yIChpID0gMDsgIXRhcmdldCAmJiBpIDwgZGVsdGFfc2VhcmNoX3RocmVhZHM7IGkrKykKKwkJCQlpZiAoIXBbaV0ud29ya2luZykKKwkJCQkJdGFyZ2V0ID0gJnBbaV07CisJCQlpZiAodGFyZ2V0KQorCQkJCWJyZWFrOworCQkJcHRocmVhZF9jb25kX3dhaXQoJnByb2dyZXNzX2NvbmQsICZwcm9ncmVzc19tdXRleCk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgZGVsdGFfc2VhcmNoX3RocmVhZHM7IGkrKykKKwkJCWlmIChwW2ldLnJlbWFpbmluZyA+IDIqd2luZG93ICYmCisJCQkgICAgKCF2aWN0aW0gfHwgdmljdGltLT5yZW1haW5pbmcgPCBwW2ldLnJlbWFpbmluZykpCisJCQkJdmljdGltID0gJnBbaV07CisJCWlmICh2aWN0aW0pIHsKKwkJCXN1Yl9zaXplID0gdmljdGltLT5yZW1haW5pbmcgLyAyOworCQkJbGlzdCA9IHZpY3RpbS0+bGlzdCArIHZpY3RpbS0+bGlzdF9zaXplIC0gc3ViX3NpemU7CisJCQl3aGlsZSAoc3ViX3NpemUgJiYgbGlzdFswXS0+aGFzaCAmJgorCQkJICAgICAgIGxpc3RbMF0tPmhhc2ggPT0gbGlzdFstMV0tPmhhc2gpIHsKKwkJCQlsaXN0Kys7CisJCQkJc3ViX3NpemUtLTsKKwkJCX0KKwkJCWlmICghc3ViX3NpemUpIHsKKwkJCQkvKgorCQkJCSAqIEl0IGlzIHBvc3NpYmxlIGZvciBzb21lICJwYXRocyIgdG8gaGF2ZQorCQkJCSAqIHNvIG1hbnkgb2JqZWN0cyB0aGF0IG5vIGhhc2ggYm91bmRhcnkKKwkJCQkgKiBtaWdodCBiZSBmb3VuZC4gIExldCdzIGp1c3Qgc3RlYWwgdGhlCisJCQkJICogZXhhY3QgaGFsZiBpbiB0aGF0IGNhc2UuCisJCQkJICovCisJCQkJc3ViX3NpemUgPSB2aWN0aW0tPnJlbWFpbmluZyAvIDI7CisJCQkJbGlzdCAtPSBzdWJfc2l6ZTsKKwkJCX0KKwkJCXRhcmdldC0+bGlzdCA9IGxpc3Q7CisJCQl2aWN0aW0tPmxpc3Rfc2l6ZSAtPSBzdWJfc2l6ZTsKKwkJCXZpY3RpbS0+cmVtYWluaW5nIC09IHN1Yl9zaXplOworCQl9CisJCXRhcmdldC0+bGlzdF9zaXplID0gc3ViX3NpemU7CisJCXRhcmdldC0+cmVtYWluaW5nID0gc3ViX3NpemU7CisJCXRhcmdldC0+d29ya2luZyA9IDE7CisJCXByb2dyZXNzX3VubG9jaygpOworCisJCXB0aHJlYWRfbXV0ZXhfbG9jaygmdGFyZ2V0LT5tdXRleCk7CisJCXRhcmdldC0+ZGF0YV9yZWFkeSA9IDE7CisJCXB0aHJlYWRfY29uZF9zaWduYWwoJnRhcmdldC0+Y29uZCk7CisJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0YXJnZXQtPm11dGV4KTsKKworCQlpZiAoIXN1Yl9zaXplKSB7CisJCQlwdGhyZWFkX2pvaW4odGFyZ2V0LT50aHJlYWQsIE5VTEwpOworCQkJcHRocmVhZF9jb25kX2Rlc3Ryb3koJnRhcmdldC0+Y29uZCk7CisJCQlwdGhyZWFkX211dGV4X2Rlc3Ryb3koJnRhcmdldC0+bXV0ZXgpOworCQkJYWN0aXZlX3RocmVhZHMtLTsKKwkJfQorCX0KKwljbGVhbnVwX3RocmVhZGVkX3NlYXJjaCgpOworCWZyZWUocCk7Cit9CisKKyNlbHNlCisjZGVmaW5lIGxsX2ZpbmRfZGVsdGFzKGwsIHMsIHcsIGQsIHApCWZpbmRfZGVsdGFzKGwsICZzLCB3LCBkLCBwKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgYWRkX3JlZl90YWcoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHBlZWxlZDsKKworCWlmIChzdGFydHNfd2l0aChwYXRoLCAicmVmcy90YWdzLyIpICYmIC8qIGlzIGEgdGFnPyAqLworCSAgICAhcGVlbF9yZWYocGF0aCwgcGVlbGVkLmhhc2gpICAgICYmIC8qIHBlZWxhYmxlPyAqLworCSAgICBwYWNrbGlzdF9maW5kKCZ0b19wYWNrLCBwZWVsZWQuaGFzaCwgTlVMTCkpICAgICAgLyogb2JqZWN0IHBhY2tlZD8gKi8KKwkJYWRkX29iamVjdF9lbnRyeShvaWQtPmhhc2gsIE9CSl9UQUcsIE5VTEwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3BhY2soaW50IHdpbmRvdywgaW50IGRlcHRoKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKipkZWx0YV9saXN0OworCXVpbnQzMl90IGksIG5yX2RlbHRhczsKKwl1bnNpZ25lZCBuOworCisJZ2V0X29iamVjdF9kZXRhaWxzKCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIGxvY2FsbHkgcmVwYWNraW5nIHRoZW4gd2UgbmVlZCB0byBiZSBkb3VibHkgY2FyZWZ1bAorCSAqIGZyb20gbm93IG9uIGluIG9yZGVyIHRvIG1ha2Ugc3VyZSBubyBzdGVhbHRoIGNvcnJ1cHRpb24gZ2V0cworCSAqIHByb3BhZ2F0ZWQgdG8gdGhlIG5ldyBwYWNrLiAgQ2xpZW50cyByZWNlaXZpbmcgc3RyZWFtZWQgcGFja3MKKwkgKiBzaG91bGQgdmFsaWRhdGUgZXZlcnl0aGluZyB0aGV5IGdldCBhbnl3YXkgc28gbm8gbmVlZCB0byBpbmN1cgorCSAqIHRoZSBhZGRpdGlvbmFsIGNvc3QgaGVyZSBpbiB0aGF0IGNhc2UuCisJICovCisJaWYgKCFwYWNrX3RvX3N0ZG91dCkKKwkJZG9fY2hlY2tfcGFja2VkX29iamVjdF9jcmMgPSAxOworCisJaWYgKCF0b19wYWNrLm5yX29iamVjdHMgfHwgIXdpbmRvdyB8fCAhZGVwdGgpCisJCXJldHVybjsKKworCWRlbHRhX2xpc3QgPSB4bWFsbG9jKHRvX3BhY2subnJfb2JqZWN0cyAqIHNpemVvZigqZGVsdGFfbGlzdCkpOworCW5yX2RlbHRhcyA9IG4gPSAwOworCisJZm9yIChpID0gMDsgaSA8IHRvX3BhY2subnJfb2JqZWN0czsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gdG9fcGFjay5vYmplY3RzICsgaTsKKworCQlpZiAoZW50cnktPmRlbHRhKQorCQkJLyogVGhpcyBoYXBwZW5zIGlmIHdlIGRlY2lkZWQgdG8gcmV1c2UgZXhpc3RpbmcKKwkJCSAqIGRlbHRhIGZyb20gYSBwYWNrLiAgInJldXNlX2RlbHRhICYmIiBpcyBpbXBsaWVkLgorCQkJICovCisJCQljb250aW51ZTsKKworCQlpZiAoZW50cnktPnNpemUgPCA1MCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChlbnRyeS0+bm9fdHJ5X2RlbHRhKQorCQkJY29udGludWU7CisKKwkJaWYgKCFlbnRyeS0+cHJlZmVycmVkX2Jhc2UpIHsKKwkJCW5yX2RlbHRhcysrOworCQkJaWYgKGVudHJ5LT50eXBlIDwgMCkKKwkJCQlkaWUoInVuYWJsZSB0byBnZXQgdHlwZSBvZiBvYmplY3QgJXMiLAorCQkJCSAgICBzaGExX3RvX2hleChlbnRyeS0+aWR4LnNoYTEpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChlbnRyeS0+dHlwZSA8IDApIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgb2JqZWN0IGlzIG5vdCBmb3VuZCwgYnV0IHdlCisJCQkJICogZG9uJ3QgaGF2ZSB0byBpbmNsdWRlIGl0IGFueXdheS4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWRlbHRhX2xpc3RbbisrXSA9IGVudHJ5OworCX0KKworCWlmIChucl9kZWx0YXMgJiYgbiA+IDEpIHsKKwkJdW5zaWduZWQgbnJfZG9uZSA9IDA7CisJCWlmIChwcm9ncmVzcykKKwkJCXByb2dyZXNzX3N0YXRlID0gc3RhcnRfcHJvZ3Jlc3MoXygiQ29tcHJlc3Npbmcgb2JqZWN0cyIpLAorCQkJCQkJCW5yX2RlbHRhcyk7CisJCXFzb3J0KGRlbHRhX2xpc3QsIG4sIHNpemVvZigqZGVsdGFfbGlzdCksIHR5cGVfc2l6ZV9zb3J0KTsKKwkJbGxfZmluZF9kZWx0YXMoZGVsdGFfbGlzdCwgbiwgd2luZG93KzEsIGRlcHRoLCAmbnJfZG9uZSk7CisJCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzX3N0YXRlKTsKKwkJaWYgKG5yX2RvbmUgIT0gbnJfZGVsdGFzKQorCQkJZGllKCJpbmNvbnNpc3RlbmN5IHdpdGggZGVsdGEgY291bnQiKTsKKwl9CisJZnJlZShkZWx0YV9saXN0KTsKK30KKworc3RhdGljIGludCBnaXRfcGFja19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAoaywgInBhY2sud2luZG93IikpIHsKKwkJd2luZG93ID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay53aW5kb3dtZW1vcnkiKSkgeworCQl3aW5kb3dfbWVtb3J5X2xpbWl0ID0gZ2l0X2NvbmZpZ191bG9uZyhrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLmRlcHRoIikpIHsKKwkJZGVwdGggPSBnaXRfY29uZmlnX2ludChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLmNvbXByZXNzaW9uIikpIHsKKwkJaW50IGxldmVsID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCWlmIChsZXZlbCA9PSAtMSkKKwkJCWxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworCQllbHNlIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBaX0JFU1RfQ09NUFJFU1NJT04pCisJCQlkaWUoImJhZCBwYWNrIGNvbXByZXNzaW9uIGxldmVsICVkIiwgbGV2ZWwpOworCQlwYWNrX2NvbXByZXNzaW9uX2xldmVsID0gbGV2ZWw7CisJCXBhY2tfY29tcHJlc3Npb25fc2VlbiA9IDE7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay5kZWx0YWNhY2hlc2l6ZSIpKSB7CisJCW1heF9kZWx0YV9jYWNoZV9zaXplID0gZ2l0X2NvbmZpZ19pbnQoaywgdik7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay5kZWx0YWNhY2hlbGltaXQiKSkgeworCQljYWNoZV9tYXhfc21hbGxfZGVsdGFfc2l6ZSA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoaywgInBhY2sud3JpdGViaXRtYXBoYXNoY2FjaGUiKSkgeworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKGssIHYpKQorCQkJd3JpdGVfYml0bWFwX29wdGlvbnMgfD0gQklUTUFQX09QVF9IQVNIX0NBQ0hFOworCQllbHNlCisJCQl3cml0ZV9iaXRtYXBfb3B0aW9ucyAmPSB+QklUTUFQX09QVF9IQVNIX0NBQ0hFOworCX0KKwlpZiAoIXN0cmNtcChrLCAicGFjay51c2ViaXRtYXBzIikpIHsKKwkJdXNlX2JpdG1hcF9pbmRleCA9IGdpdF9jb25maWdfYm9vbChrLCB2KTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLnRocmVhZHMiKSkgeworCQlkZWx0YV9zZWFyY2hfdGhyZWFkcyA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlpZiAoZGVsdGFfc2VhcmNoX3RocmVhZHMgPCAwKQorCQkJZGllKCJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIiwKKwkJCSAgICBkZWx0YV9zZWFyY2hfdGhyZWFkcyk7CisjaWZkZWYgTk9fUFRIUkVBRFMKKwkJaWYgKGRlbHRhX3NlYXJjaF90aHJlYWRzICE9IDEpCisJCQl3YXJuaW5nKCJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIiwgayk7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKGssICJwYWNrLmluZGV4dmVyc2lvbiIpKSB7CisJCXBhY2tfaWR4X29wdHMudmVyc2lvbiA9IGdpdF9jb25maWdfaW50KGssIHYpOworCQlpZiAocGFja19pZHhfb3B0cy52ZXJzaW9uID4gMikKKwkJCWRpZSgiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSUiUFJJdTMyLAorCQkJICAgIHBhY2tfaWR4X29wdHMudmVyc2lvbik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGssIHYsIGNiKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9vYmplY3RfbGlzdF9mcm9tX3N0ZGluKHZvaWQpCit7CisJY2hhciBsaW5lWzQwICsgMSArIFBBVEhfTUFYICsgMl07CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWZvciAoOzspIHsKKwkJaWYgKCFmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKSkgeworCQkJaWYgKGZlb2Yoc3RkaW4pKQorCQkJCWJyZWFrOworCQkJaWYgKCFmZXJyb3Ioc3RkaW4pKQorCQkJCWRpZSgiZmdldHMgcmV0dXJuZWQgTlVMTCwgbm90IEVPRiwgbm90IGVycm9yISIpOworCQkJaWYgKGVycm5vICE9IEVJTlRSKQorCQkJCWRpZV9lcnJubygiZmdldHMiKTsKKwkJCWNsZWFyZXJyKHN0ZGluKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChsaW5lWzBdID09ICctJykgeworCQkJaWYgKGdldF9zaGExX2hleChsaW5lKzEsIHNoYTEpKQorCQkJCWRpZSgiZXhwZWN0ZWQgZWRnZSBzaGExLCBnb3QgZ2FyYmFnZTpcbiAlcyIsCisJCQkJICAgIGxpbmUpOworCQkJYWRkX3ByZWZlcnJlZF9iYXNlKHNoYTEpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGdldF9zaGExX2hleChsaW5lLCBzaGExKSkKKwkJCWRpZSgiZXhwZWN0ZWQgc2hhMSwgZ290IGdhcmJhZ2U6XG4gJXMiLCBsaW5lKTsKKworCQlhZGRfcHJlZmVycmVkX2Jhc2Vfb2JqZWN0KGxpbmUrNDEpOworCQlhZGRfb2JqZWN0X2VudHJ5KHNoYTEsIDAsIGxpbmUrNDEsIDApOworCX0KK30KKworI2RlZmluZSBPQkpFQ1RfQURERUQgKDF1PDwyMCkKKworc3RhdGljIHZvaWQgc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKQoreworCWFkZF9vYmplY3RfZW50cnkoY29tbWl0LT5vYmplY3Quc2hhMSwgT0JKX0NPTU1JVCwgTlVMTCwgMCk7CisJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gT0JKRUNUX0FEREVEOworCisJaWYgKHdyaXRlX2JpdG1hcF9pbmRleCkKKwkJaW5kZXhfY29tbWl0X2Zvcl9iaXRtYXAoY29tbWl0KTsKK30KKworc3RhdGljIHZvaWQgc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLAorCQkJY29uc3Qgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwgY29uc3QgY2hhciAqbGFzdCwKKwkJCXZvaWQgKmRhdGEpCit7CisJY2hhciAqbmFtZSA9IHBhdGhfbmFtZShwYXRoLCBsYXN0KTsKKworCWFkZF9wcmVmZXJyZWRfYmFzZV9vYmplY3QobmFtZSk7CisJYWRkX29iamVjdF9lbnRyeShvYmotPnNoYTEsIG9iai0+dHlwZSwgbmFtZSwgMCk7CisJb2JqLT5mbGFncyB8PSBPQkpFQ1RfQURERUQ7CisKKwkvKgorCSAqIFdlIHdpbGwgaGF2ZSBnZW5lcmF0ZWQgdGhlIGhhc2ggZnJvbSB0aGUgbmFtZSwKKwkgKiBidXQgbm90IHNhdmVkIGEgcG9pbnRlciB0byBpdCAtIHdlIGNhbiBmcmVlIGl0CisJICovCisJZnJlZSgoY2hhciAqKW5hbWUpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2VkZ2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWFkZF9wcmVmZXJyZWRfYmFzZShjb21taXQtPm9iamVjdC5zaGExKTsKK30KKworc3RydWN0IGluX3BhY2tfb2JqZWN0IHsKKwlvZmZfdCBvZmZzZXQ7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0OworfTsKKworc3RydWN0IGluX3BhY2sgeworCWludCBhbGxvYzsKKwlpbnQgbnI7CisJc3RydWN0IGluX3BhY2tfb2JqZWN0ICphcnJheTsKK307CisKK3N0YXRpYyB2b2lkIG1hcmtfaW5fcGFja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0LCBzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgc3RydWN0IGluX3BhY2sgKmluX3BhY2spCit7CisJaW5fcGFjay0+YXJyYXlbaW5fcGFjay0+bnJdLm9mZnNldCA9IGZpbmRfcGFja19lbnRyeV9vbmUob2JqZWN0LT5zaGExLCBwKTsKKwlpbl9wYWNrLT5hcnJheVtpbl9wYWNrLT5ucl0ub2JqZWN0ID0gb2JqZWN0OworCWluX3BhY2stPm5yKys7Cit9CisKKy8qCisgKiBDb21wYXJlIHRoZSBvYmplY3RzIGluIHRoZSBvZmZzZXQgb3JkZXIsIGluIG9yZGVyIHRvIGVtdWxhdGUgdGhlCisgKiAiZ2l0IHJldi1saXN0IC0tb2JqZWN0cyIgb3V0cHV0IHRoYXQgcHJvZHVjZWQgdGhlIHBhY2sgb3JpZ2luYWxseS4KKyAqLworc3RhdGljIGludCBvZnNjbXAoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCXN0cnVjdCBpbl9wYWNrX29iamVjdCAqYSA9IChzdHJ1Y3QgaW5fcGFja19vYmplY3QgKilhXzsKKwlzdHJ1Y3QgaW5fcGFja19vYmplY3QgKmIgPSAoc3RydWN0IGluX3BhY2tfb2JqZWN0ICopYl87CisKKwlpZiAoYS0+b2Zmc2V0IDwgYi0+b2Zmc2V0KQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoYS0+b2Zmc2V0ID4gYi0+b2Zmc2V0KQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiBoYXNoY21wKGEtPm9iamVjdC0+c2hhMSwgYi0+b2JqZWN0LT5zaGExKTsKK30KKworc3RhdGljIHZvaWQgYWRkX29iamVjdHNfaW5fdW5wYWNrZWRfcGFja3Moc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCXN0cnVjdCBpbl9wYWNrIGluX3BhY2s7CisJdWludDMyX3QgaTsKKworCW1lbXNldCgmaW5fcGFjaywgMCwgc2l6ZW9mKGluX3BhY2spKTsKKworCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7CisJCXN0cnVjdCBvYmplY3QgKm87CisKKwkJaWYgKCFwLT5wYWNrX2xvY2FsIHx8IHAtPnBhY2tfa2VlcCkKKwkJCWNvbnRpbnVlOworCQlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQkJZGllKCJjYW5ub3Qgb3BlbiBwYWNrIGluZGV4Iik7CisKKwkJQUxMT0NfR1JPVyhpbl9wYWNrLmFycmF5LAorCQkJICAgaW5fcGFjay5uciArIHAtPm51bV9vYmplY3RzLAorCQkJICAgaW5fcGFjay5hbGxvYyk7CisKKwkJZm9yIChpID0gMDsgaSA8IHAtPm51bV9vYmplY3RzOyBpKyspIHsKKwkJCXNoYTEgPSBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIGkpOworCQkJbyA9IGxvb2t1cF91bmtub3duX29iamVjdChzaGExKTsKKwkJCWlmICghKG8tPmZsYWdzICYgT0JKRUNUX0FEREVEKSkKKwkJCQltYXJrX2luX3BhY2tfb2JqZWN0KG8sIHAsICZpbl9wYWNrKTsKKwkJCW8tPmZsYWdzIHw9IE9CSkVDVF9BRERFRDsKKwkJfQorCX0KKworCWlmIChpbl9wYWNrLm5yKSB7CisJCXFzb3J0KGluX3BhY2suYXJyYXksIGluX3BhY2subnIsIHNpemVvZihpbl9wYWNrLmFycmF5WzBdKSwKKwkJICAgICAgb2ZzY21wKTsKKwkJZm9yIChpID0gMDsgaSA8IGluX3BhY2subnI7IGkrKykgeworCQkJc3RydWN0IG9iamVjdCAqbyA9IGluX3BhY2suYXJyYXlbaV0ub2JqZWN0OworCQkJYWRkX29iamVjdF9lbnRyeShvLT5zaGExLCBvLT50eXBlLCAiIiwgMCk7CisJCX0KKwl9CisJZnJlZShpbl9wYWNrLmFycmF5KTsKK30KKworc3RhdGljIGludCBoYXNfc2hhMV9wYWNrX2tlcHRfb3Jfbm9ubG9jYWwoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0aWMgc3RydWN0IHBhY2tlZF9naXQgKmxhc3RfZm91bmQgPSAodm9pZCAqKTE7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisKKwlwID0gKGxhc3RfZm91bmQgIT0gKHZvaWQgKikxKSA/IGxhc3RfZm91bmQgOiBwYWNrZWRfZ2l0OworCisJd2hpbGUgKHApIHsKKwkJaWYgKCghcC0+cGFja19sb2NhbCB8fCBwLT5wYWNrX2tlZXApICYmCisJCQlmaW5kX3BhY2tfZW50cnlfb25lKHNoYTEsIHApKSB7CisJCQlsYXN0X2ZvdW5kID0gcDsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChwID09IGxhc3RfZm91bmQpCisJCQlwID0gcGFja2VkX2dpdDsKKwkJZWxzZQorCQkJcCA9IHAtPm5leHQ7CisJCWlmIChwID09IGxhc3RfZm91bmQpCisJCQlwID0gcC0+bmV4dDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTdG9yZSBhIGxpc3Qgb2Ygc2hhMXMgdGhhdCBhcmUgc2hvdWxkIG5vdCBiZSBkaXNjYXJkZWQKKyAqIGJlY2F1c2UgdGhleSBhcmUgZWl0aGVyIHdyaXR0ZW4gdG9vIHJlY2VudGx5LCBvciBhcmUKKyAqIHJlYWNoYWJsZSBmcm9tIGFub3RoZXIgb2JqZWN0IHRoYXQgd2FzLgorICoKKyAqIFRoaXMgaXMgZmlsbGVkIGJ5IGdldF9vYmplY3RfbGlzdC4KKyAqLworc3RhdGljIHN0cnVjdCBzaGExX2FycmF5IHJlY2VudF9vYmplY3RzOworCitzdGF0aWMgaW50IGxvb3NlbmVkX29iamVjdF9jYW5fYmVfZGlzY2FyZGVkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIG10aW1lKQoreworCWlmICghdW5wYWNrX3VucmVhY2hhYmxlX2V4cGlyYXRpb24pCisJCXJldHVybiAwOworCWlmIChtdGltZSA+IHVucGFja191bnJlYWNoYWJsZV9leHBpcmF0aW9uKQorCQlyZXR1cm4gMDsKKwlpZiAoc2hhMV9hcnJheV9sb29rdXAoJnJlY2VudF9vYmplY3RzLCBzaGExKSA+PSAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbG9vc2VuX3VudXNlZF9wYWNrZWRfb2JqZWN0cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJdWludDMyX3QgaTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCisJZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKCFwLT5wYWNrX2xvY2FsIHx8IHAtPnBhY2tfa2VlcCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpCisJCQlkaWUoImNhbm5vdCBvcGVuIHBhY2sgaW5kZXgiKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcC0+bnVtX29iamVjdHM7IGkrKykgeworCQkJc2hhMSA9IG50aF9wYWNrZWRfb2JqZWN0X3NoYTEocCwgaSk7CisJCQlpZiAoIXBhY2tsaXN0X2ZpbmQoJnRvX3BhY2ssIHNoYTEsIE5VTEwpICYmCisJCQkgICAgIWhhc19zaGExX3BhY2tfa2VwdF9vcl9ub25sb2NhbChzaGExKSAmJgorCQkJICAgICFsb29zZW5lZF9vYmplY3RfY2FuX2JlX2Rpc2NhcmRlZChzaGExLCBwLT5tdGltZSkpCisJCQkJaWYgKGZvcmNlX29iamVjdF9sb29zZShzaGExLCBwLT5tdGltZSkpCisJCQkJCWRpZSgidW5hYmxlIHRvIGZvcmNlIGxvb3NlIG9iamVjdCIpOworCQl9CisJfQorfQorCisvKgorICogVGhpcyB0cmFja3MgYW55IG9wdGlvbnMgd2hpY2ggYSByZWFkZXIgb2YgdGhlIHBhY2sgbWlnaHQKKyAqIG5vdCB1bmRlcnN0YW5kLCBhbmQgd2hpY2ggd291bGQgdGhlcmVmb3JlIHByZXZlbnQgYmxpbmQgcmV1c2UKKyAqIG9mIHdoYXQgd2UgaGF2ZSBvbiBkaXNrLgorICovCitzdGF0aWMgaW50IHBhY2tfb3B0aW9uc19hbGxvd19yZXVzZSh2b2lkKQoreworCXJldHVybiBhbGxvd19vZnNfZGVsdGE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29iamVjdF9saXN0X2Zyb21fYml0bWFwKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpZiAocHJlcGFyZV9iaXRtYXBfd2FsayhyZXZzKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChwYWNrX29wdGlvbnNfYWxsb3dfcmV1c2UoKSAmJgorCSAgICAhcmV1c2VfcGFydGlhbF9wYWNrZmlsZV9mcm9tX2JpdG1hcCgKKwkJCSZyZXVzZV9wYWNrZmlsZSwKKwkJCSZyZXVzZV9wYWNrZmlsZV9vYmplY3RzLAorCQkJJnJldXNlX3BhY2tmaWxlX29mZnNldCkpIHsKKwkJYXNzZXJ0KHJldXNlX3BhY2tmaWxlX29iamVjdHMpOworCQlucl9yZXN1bHQgKz0gcmV1c2VfcGFja2ZpbGVfb2JqZWN0czsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzc19zdGF0ZSwgbnJfcmVzdWx0KTsKKwl9CisKKwl0cmF2ZXJzZV9iaXRtYXBfY29tbWl0X2xpc3QoJmFkZF9vYmplY3RfZW50cnlfZnJvbV9iaXRtYXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfcmVjZW50X29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCQkJIGNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsCisJCQkJIGNvbnN0IGNoYXIgKmxhc3QsCisJCQkJIHZvaWQgKmRhdGEpCit7CisJc2hhMV9hcnJheV9hcHBlbmQoJnJlY2VudF9vYmplY3RzLCBvYmotPnNoYTEpOworfQorCitzdGF0aWMgdm9pZCByZWNvcmRfcmVjZW50X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJc2hhMV9hcnJheV9hcHBlbmQoJnJlY2VudF9vYmplY3RzLCBjb21taXQtPm9iamVjdC5zaGExKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X29iamVjdF9saXN0KGludCBhYywgY29uc3QgY2hhciAqKmF2KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCWNoYXIgbGluZVsxMDAwXTsKKwlpbnQgZmxhZ3MgPSAwOworCisJaW5pdF9yZXZpc2lvbnMoJnJldnMsIE5VTEwpOworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisJc2V0dXBfcmV2aXNpb25zKGFjLCBhdiwgJnJldnMsIE5VTEwpOworCisJLyogbWFrZSBzdXJlIHNoYWxsb3dzIGFyZSByZWFkICovCisJaXNfcmVwb3NpdG9yeV9zaGFsbG93KCk7CisKKwl3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbikgIT0gTlVMTCkgeworCQlpbnQgbGVuID0gc3RybGVuKGxpbmUpOworCQlpZiAobGVuICYmIGxpbmVbbGVuIC0gMV0gPT0gJ1xuJykKKwkJCWxpbmVbLS1sZW5dID0gMDsKKwkJaWYgKCFsZW4pCisJCQlicmVhazsKKwkJaWYgKCpsaW5lID09ICctJykgeworCQkJaWYgKCFzdHJjbXAobGluZSwgIi0tbm90IikpIHsKKwkJCQlmbGFncyBePSBVTklOVEVSRVNUSU5HOworCQkJCXdyaXRlX2JpdG1hcF9pbmRleCA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc3RhcnRzX3dpdGgobGluZSwgIi0tc2hhbGxvdyAiKSkgeworCQkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCQkJaWYgKGdldF9zaGExX2hleChsaW5lICsgMTAsIHNoYTEpKQorCQkJCQlkaWUoIm5vdCBhbiBTSEEtMSAnJXMnIiwgbGluZSArIDEwKTsKKwkJCQlyZWdpc3Rlcl9zaGFsbG93KHNoYTEpOworCQkJCXVzZV9iaXRtYXBfaW5kZXggPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZGllKCJub3QgYSByZXYgJyVzJyIsIGxpbmUpOworCQl9CisJCWlmIChoYW5kbGVfcmV2aXNpb25fYXJnKGxpbmUsICZyZXZzLCBmbGFncywgUkVWQVJHX0NBTk5PVF9CRV9GSUxFTkFNRSkpCisJCQlkaWUoImJhZCByZXZpc2lvbiAnJXMnIiwgbGluZSk7CisJfQorCisJaWYgKHVzZV9iaXRtYXBfaW5kZXggJiYgIWdldF9vYmplY3RfbGlzdF9mcm9tX2JpdG1hcCgmcmV2cykpCisJCXJldHVybjsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJbWFya19lZGdlc191bmludGVyZXN0aW5nKCZyZXZzLCBzaG93X2VkZ2UpOworCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QsIE5VTEwpOworCisJaWYgKHVucGFja191bnJlYWNoYWJsZV9leHBpcmF0aW9uKSB7CisJCXJldnMuaWdub3JlX21pc3NpbmdfbGlua3MgPSAxOworCQlpZiAoYWRkX3Vuc2Vlbl9yZWNlbnRfb2JqZWN0c190b190cmF2ZXJzYWwoJnJldnMsCisJCQkJdW5wYWNrX3VucmVhY2hhYmxlX2V4cGlyYXRpb24pKQorCQkJZGllKCJ1bmFibGUgdG8gYWRkIHJlY2VudCBvYmplY3RzIik7CisJCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCQl0cmF2ZXJzZV9jb21taXRfbGlzdCgmcmV2cywgcmVjb3JkX3JlY2VudF9jb21taXQsCisJCQkJICAgICByZWNvcmRfcmVjZW50X29iamVjdCwgTlVMTCk7CisJfQorCisJaWYgKGtlZXBfdW5yZWFjaGFibGUpCisJCWFkZF9vYmplY3RzX2luX3VucGFja2VkX3BhY2tzKCZyZXZzKTsKKwlpZiAodW5wYWNrX3VucmVhY2hhYmxlKQorCQlsb29zZW5fdW51c2VkX3BhY2tlZF9vYmplY3RzKCZyZXZzKTsKKworCXNoYTFfYXJyYXlfY2xlYXIoJnJlY2VudF9vYmplY3RzKTsKK30KKworc3RhdGljIGludCBvcHRpb25fcGFyc2VfaW5kZXhfdmVyc2lvbihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJICAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJY2hhciAqYzsKKwljb25zdCBjaGFyICp2YWwgPSBhcmc7CisJcGFja19pZHhfb3B0cy52ZXJzaW9uID0gc3RydG91bCh2YWwsICZjLCAxMCk7CisJaWYgKHBhY2tfaWR4X29wdHMudmVyc2lvbiA+IDIpCisJCWRpZShfKCJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIiksIHZhbCk7CisJaWYgKCpjID09ICcsJyAmJiBjWzFdKQorCQlwYWNrX2lkeF9vcHRzLm9mZjMyX2xpbWl0ID0gc3RydG91bChjKzEsICZjLCAwKTsKKwlpZiAoKmMgfHwgcGFja19pZHhfb3B0cy5vZmYzMl9saW1pdCAmIDB4ODAwMDAwMDApCisJCWRpZShfKCJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIiksIHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3VucGFja191bnJlYWNoYWJsZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkgeworCQl1bnBhY2tfdW5yZWFjaGFibGUgPSAwOworCQl1bnBhY2tfdW5yZWFjaGFibGVfZXhwaXJhdGlvbiA9IDA7CisJfQorCWVsc2UgeworCQl1bnBhY2tfdW5yZWFjaGFibGUgPSAxOworCQlpZiAoYXJnKQorCQkJdW5wYWNrX3VucmVhY2hhYmxlX2V4cGlyYXRpb24gPSBhcHByb3hpZGF0ZShhcmcpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNtZF9wYWNrX29iamVjdHMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHVzZV9pbnRlcm5hbF9yZXZfbGlzdCA9IDA7CisJaW50IHRoaW4gPSAwOworCWludCBzaGFsbG93ID0gMDsKKwlpbnQgYWxsX3Byb2dyZXNzX2ltcGxpZWQgPSAwOworCXN0cnVjdCBhcmd2X2FycmF5IHJwID0gQVJHVl9BUlJBWV9JTklUOworCWludCByZXZfbGlzdF91bnBhY2tlZCA9IDAsIHJldl9saXN0X2FsbCA9IDAsIHJldl9saXN0X3JlZmxvZyA9IDA7CisJaW50IHJldl9saXN0X2luZGV4ID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIHBhY2tfb2JqZWN0c19vcHRpb25zW10gPSB7CisJCU9QVF9TRVRfSU5UKCdxJywgInF1aWV0IiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIpLCAwKSwKKwkJT1BUX1NFVF9JTlQoMCwgInByb2dyZXNzIiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJzaG93IHByb2dyZXNzIG1ldGVyIiksIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAiYWxsLXByb2dyZXNzIiwgJnByb2dyZXNzLAorCQkJICAgIE5fKCJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIpLCAyKSwKKwkJT1BUX0JPT0woMCwgImFsbC1wcm9ncmVzcy1pbXBsaWVkIiwKKwkJCSAmYWxsX3Byb2dyZXNzX2ltcGxpZWQsCisJCQkgTl8oInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIpKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJpbmRleC12ZXJzaW9uIiwgTlVMTCwgTl8oInZlcnNpb25bLG9mZnNldF0iKSwKKwkJICBOXygid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIpLAorCQkgIDAsIG9wdGlvbl9wYXJzZV9pbmRleF92ZXJzaW9uIH0sCisJCU9QVF9NQUdOSVRVREUoMCwgIm1heC1wYWNrLXNpemUiLCAmcGFja19zaXplX2xpbWl0LAorCQkJICAgICAgTl8oIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiKSksCisJCU9QVF9CT09MKDAsICJsb2NhbCIsICZsb2NhbCwKKwkJCSBOXygiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIikpLAorCQlPUFRfQk9PTCgwLCAiaW5jcmVtZW50YWwiLCAmaW5jcmVtZW50YWwsCisJCQkgTl8oImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgIndpbmRvdyIsICZ3aW5kb3csCisJCQkgICAgTl8oImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiKSksCisJCU9QVF9NQUdOSVRVREUoMCwgIndpbmRvdy1tZW1vcnkiLCAmd2luZG93X21lbW9yeV9saW1pdCwKKwkJCSAgICAgIE5fKCJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IikpLAorCQlPUFRfSU5URUdFUigwLCAiZGVwdGgiLCAmZGVwdGgsCisJCQkgICAgTl8oIm1heGltdW0gbGVuZ3RoIG9mIGRlbHRhIGNoYWluIGFsbG93ZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrIikpLAorCQlPUFRfQk9PTCgwLCAicmV1c2UtZGVsdGEiLCAmcmV1c2VfZGVsdGEsCisJCQkgTl8oInJldXNlIGV4aXN0aW5nIGRlbHRhcyIpKSwKKwkJT1BUX0JPT0woMCwgInJldXNlLW9iamVjdCIsICZyZXVzZV9vYmplY3QsCisJCQkgTl8oInJldXNlIGV4aXN0aW5nIG9iamVjdHMiKSksCisJCU9QVF9CT09MKDAsICJkZWx0YS1iYXNlLW9mZnNldCIsICZhbGxvd19vZnNfZGVsdGEsCisJCQkgTl8oInVzZSBPRlNfREVMVEEgb2JqZWN0cyIpKSwKKwkJT1BUX0lOVEVHRVIoMCwgInRocmVhZHMiLCAmZGVsdGFfc2VhcmNoX3RocmVhZHMsCisJCQkgICAgTl8oInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiKSksCisJCU9QVF9CT09MKDAsICJub24tZW1wdHkiLCAmbm9uX2VtcHR5LAorCQkJIE5fKCJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IikpLAorCQlPUFRfQk9PTCgwLCAicmV2cyIsICZ1c2VfaW50ZXJuYWxfcmV2X2xpc3QsCisJCQkgTl8oInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiKSksCisJCXsgT1BUSU9OX1NFVF9JTlQsIDAsICJ1bnBhY2tlZCIsICZyZXZfbGlzdF91bnBhY2tlZCwgTlVMTCwKKwkJICBOXygibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiKSwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIDEgfSwKKwkJeyBPUFRJT05fU0VUX0lOVCwgMCwgImFsbCIsICZyZXZfbGlzdF9hbGwsIE5VTEwsCisJCSAgTl8oImluY2x1ZGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSBhbnkgcmVmZXJlbmNlIiksCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCAxIH0sCisJCXsgT1BUSU9OX1NFVF9JTlQsIDAsICJyZWZsb2ciLCAmcmV2X2xpc3RfcmVmbG9nLCBOVUxMLAorCQkgIE5fKCJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiKSwKKwkJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIDEgfSwKKwkJeyBPUFRJT05fU0VUX0lOVCwgMCwgImluZGV4ZWQtb2JqZWN0cyIsICZyZXZfbGlzdF9pbmRleCwgTlVMTCwKKwkJICBOXygiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIpLAorCQkgIFBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgMSB9LAorCQlPUFRfQk9PTCgwLCAic3Rkb3V0IiwgJnBhY2tfdG9fc3Rkb3V0LAorCQkJIE5fKCJvdXRwdXQgcGFjayB0byBzdGRvdXQiKSksCisJCU9QVF9CT09MKDAsICJpbmNsdWRlLXRhZyIsICZpbmNsdWRlX3RhZywKKwkJCSBOXygiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIikpLAorCQlPUFRfQk9PTCgwLCAia2VlcC11bnJlYWNoYWJsZSIsICZrZWVwX3VucmVhY2hhYmxlLAorCQkJIE5fKCJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAidW5wYWNrLXVucmVhY2hhYmxlIiwgTlVMTCwgTl8oInRpbWUiKSwKKwkJICBOXygidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBvcHRpb25fcGFyc2VfdW5wYWNrX3VucmVhY2hhYmxlIH0sCisJCU9QVF9CT09MKDAsICJ0aGluIiwgJnRoaW4sCisJCQkgTl8oImNyZWF0ZSB0aGluIHBhY2tzIikpLAorCQlPUFRfQk9PTCgwLCAic2hhbGxvdyIsICZzaGFsbG93LAorCQkJIE5fKCJjcmVhdGUgcGFja3Mgc3VpdGFibGUgZm9yIHNoYWxsb3cgZmV0Y2hlcyIpKSwKKwkJT1BUX0JPT0woMCwgImhvbm9yLXBhY2sta2VlcCIsICZpZ25vcmVfcGFja2VkX2tlZXAsCisJCQkgTl8oImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiKSksCisJCU9QVF9JTlRFR0VSKDAsICJjb21wcmVzc2lvbiIsICZwYWNrX2NvbXByZXNzaW9uX2xldmVsLAorCQkJICAgIE5fKCJwYWNrIGNvbXByZXNzaW9uIGxldmVsIikpLAorCQlPUFRfU0VUX0lOVCgwLCAia2VlcC10cnVlLXBhcmVudHMiLCAmZ3JhZnRzX3JlcGxhY2VfcGFyZW50cywKKwkJCSAgICBOXygiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiKSwgMCksCisJCU9QVF9CT09MKDAsICJ1c2UtYml0bWFwLWluZGV4IiwgJnVzZV9iaXRtYXBfaW5kZXgsCisJCQkgTl8oInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIpKSwKKwkJT1BUX0JPT0woMCwgIndyaXRlLWJpdG1hcC1pbmRleCIsICZ3cml0ZV9iaXRtYXBfaW5kZXgsCisJCQkgTl8oIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJY2hlY2tfcmVwbGFjZV9yZWZzID0gMDsKKworCXJlc2V0X3BhY2tfaWR4X29wdGlvbigmcGFja19pZHhfb3B0cyk7CisJZ2l0X2NvbmZpZyhnaXRfcGFja19jb25maWcsIE5VTEwpOworCWlmICghcGFja19jb21wcmVzc2lvbl9zZWVuICYmIGNvcmVfY29tcHJlc3Npb25fc2VlbikKKwkJcGFja19jb21wcmVzc2lvbl9sZXZlbCA9IGNvcmVfY29tcHJlc3Npb25fbGV2ZWw7CisKKwlwcm9ncmVzcyA9IGlzYXR0eSgyKTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIHBhY2tfb2JqZWN0c19vcHRpb25zLAorCQkJICAgICBwYWNrX3VzYWdlLCAwKTsKKworCWlmIChhcmdjKSB7CisJCWJhc2VfbmFtZSA9IGFyZ3ZbMF07CisJCWFyZ2MtLTsKKwl9CisJaWYgKHBhY2tfdG9fc3Rkb3V0ICE9ICFiYXNlX25hbWUgfHwgYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHBhY2tfdXNhZ2UsIHBhY2tfb2JqZWN0c19vcHRpb25zKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmcnAsICJwYWNrLW9iamVjdHMiKTsKKwlpZiAodGhpbikgeworCQl1c2VfaW50ZXJuYWxfcmV2X2xpc3QgPSAxOworCQlhcmd2X2FycmF5X3B1c2goJnJwLCBzaGFsbG93CisJCQkJPyAiLS1vYmplY3RzLWVkZ2UtYWdncmVzc2l2ZSIKKwkJCQk6ICItLW9iamVjdHMtZWRnZSIpOworCX0gZWxzZQorCQlhcmd2X2FycmF5X3B1c2goJnJwLCAiLS1vYmplY3RzIik7CisKKwlpZiAocmV2X2xpc3RfYWxsKSB7CisJCXVzZV9pbnRlcm5hbF9yZXZfbGlzdCA9IDE7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcnAsICItLWFsbCIpOworCX0KKwlpZiAocmV2X2xpc3RfcmVmbG9nKSB7CisJCXVzZV9pbnRlcm5hbF9yZXZfbGlzdCA9IDE7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmcnAsICItLXJlZmxvZyIpOworCX0KKwlpZiAocmV2X2xpc3RfaW5kZXgpIHsKKwkJdXNlX2ludGVybmFsX3Jldl9saXN0ID0gMTsKKwkJYXJndl9hcnJheV9wdXNoKCZycCwgIi0taW5kZXhlZC1vYmplY3RzIik7CisJfQorCWlmIChyZXZfbGlzdF91bnBhY2tlZCkgeworCQl1c2VfaW50ZXJuYWxfcmV2X2xpc3QgPSAxOworCQlhcmd2X2FycmF5X3B1c2goJnJwLCAiLS11bnBhY2tlZCIpOworCX0KKworCWlmICghcmV1c2Vfb2JqZWN0KQorCQlyZXVzZV9kZWx0YSA9IDA7CisJaWYgKHBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPT0gLTEpCisJCXBhY2tfY29tcHJlc3Npb25fbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisJZWxzZSBpZiAocGFja19jb21wcmVzc2lvbl9sZXZlbCA8IDAgfHwgcGFja19jb21wcmVzc2lvbl9sZXZlbCA+IFpfQkVTVF9DT01QUkVTU0lPTikKKwkJZGllKCJiYWQgcGFjayBjb21wcmVzc2lvbiBsZXZlbCAlZCIsIHBhY2tfY29tcHJlc3Npb25fbGV2ZWwpOworCisJaWYgKCFkZWx0YV9zZWFyY2hfdGhyZWFkcykJLyogLS10aHJlYWRzPTAgbWVhbnMgYXV0b2RldGVjdCAqLworCQlkZWx0YV9zZWFyY2hfdGhyZWFkcyA9IG9ubGluZV9jcHVzKCk7CisKKyNpZmRlZiBOT19QVEhSRUFEUworCWlmIChkZWx0YV9zZWFyY2hfdGhyZWFkcyAhPSAxKQorCQl3YXJuaW5nKCJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nIC0tdGhyZWFkcyIpOworI2VuZGlmCisJaWYgKCFwYWNrX3RvX3N0ZG91dCAmJiAhcGFja19zaXplX2xpbWl0KQorCQlwYWNrX3NpemVfbGltaXQgPSBwYWNrX3NpemVfbGltaXRfY2ZnOworCWlmIChwYWNrX3RvX3N0ZG91dCAmJiBwYWNrX3NpemVfbGltaXQpCisJCWRpZSgiLS1tYXgtcGFjay1zaXplIGNhbm5vdCBiZSB1c2VkIHRvIGJ1aWxkIGEgcGFjayBmb3IgdHJhbnNmZXIuIik7CisJaWYgKHBhY2tfc2l6ZV9saW1pdCAmJiBwYWNrX3NpemVfbGltaXQgPCAxMDI0KjEwMjQpIHsKKwkJd2FybmluZygibWluaW11bSBwYWNrIHNpemUgbGltaXQgaXMgMSBNaUIiKTsKKwkJcGFja19zaXplX2xpbWl0ID0gMTAyNCoxMDI0OworCX0KKworCWlmICghcGFja190b19zdGRvdXQgJiYgdGhpbikKKwkJZGllKCItLXRoaW4gY2Fubm90IGJlIHVzZWQgdG8gYnVpbGQgYW4gaW5kZXhhYmxlIHBhY2suIik7CisKKwlpZiAoa2VlcF91bnJlYWNoYWJsZSAmJiB1bnBhY2tfdW5yZWFjaGFibGUpCisJCWRpZSgiLS1rZWVwLXVucmVhY2hhYmxlIGFuZCAtLXVucGFjay11bnJlYWNoYWJsZSBhcmUgaW5jb21wYXRpYmxlLiIpOworCWlmICghcmV2X2xpc3RfYWxsIHx8ICFyZXZfbGlzdF9yZWZsb2cgfHwgIXJldl9saXN0X2luZGV4KQorCQl1bnBhY2tfdW5yZWFjaGFibGVfZXhwaXJhdGlvbiA9IDA7CisKKwlpZiAoIXVzZV9pbnRlcm5hbF9yZXZfbGlzdCB8fCAhcGFja190b19zdGRvdXQgfHwgaXNfcmVwb3NpdG9yeV9zaGFsbG93KCkpCisJCXVzZV9iaXRtYXBfaW5kZXggPSAwOworCisJaWYgKHBhY2tfdG9fc3Rkb3V0IHx8ICFyZXZfbGlzdF9hbGwpCisJCXdyaXRlX2JpdG1hcF9pbmRleCA9IDA7CisKKwlpZiAocHJvZ3Jlc3MgJiYgYWxsX3Byb2dyZXNzX2ltcGxpZWQpCisJCXByb2dyZXNzID0gMjsKKworCXByZXBhcmVfcGFja2VkX2dpdCgpOworCisJaWYgKHByb2dyZXNzKQorCQlwcm9ncmVzc19zdGF0ZSA9IHN0YXJ0X3Byb2dyZXNzKF8oIkNvdW50aW5nIG9iamVjdHMiKSwgMCk7CisJaWYgKCF1c2VfaW50ZXJuYWxfcmV2X2xpc3QpCisJCXJlYWRfb2JqZWN0X2xpc3RfZnJvbV9zdGRpbigpOworCWVsc2UgeworCQlnZXRfb2JqZWN0X2xpc3QocnAuYXJnYywgcnAuYXJndik7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJnJwKTsKKwl9CisJY2xlYW51cF9wcmVmZXJyZWRfYmFzZSgpOworCWlmIChpbmNsdWRlX3RhZyAmJiBucl9yZXN1bHQpCisJCWZvcl9lYWNoX3JlZihhZGRfcmVmX3RhZywgTlVMTCk7CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3Nfc3RhdGUpOworCisJaWYgKG5vbl9lbXB0eSAmJiAhbnJfcmVzdWx0KQorCQlyZXR1cm4gMDsKKwlpZiAobnJfcmVzdWx0KQorCQlwcmVwYXJlX3BhY2sod2luZG93LCBkZXB0aCk7CisJd3JpdGVfcGFja19maWxlKCk7CisJaWYgKHByb2dyZXNzKQorCQlmcHJpbnRmKHN0ZGVyciwgIlRvdGFsICUiUFJJdTMyIiAoZGVsdGEgJSJQUkl1MzIiKSwiCisJCQkiIHJldXNlZCAlIlBSSXUzMiIgKGRlbHRhICUiUFJJdTMyIilcbiIsCisJCQl3cml0dGVuLCB3cml0dGVuX2RlbHRhLCByZXVzZWQsIHJldXNlZF9kZWx0YSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3BhY2stcmVkdW5kYW50LmMgYi9idWlsdGluL3BhY2stcmVkdW5kYW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA1MzJmNgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcGFjay1yZWR1bmRhbnQuYwpAQCAtMCwwICsxLDY5NSBAQAorLyoKKyoKKyogQ29weXJpZ2h0IDIwMDUsIEx1a2FzIFNhbmRzdHJvbSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CisqCisqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLgorKgorKi8KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKworI2RlZmluZSBCTEtTSVpFIDUxMgorCitzdGF0aWMgY29uc3QgY2hhciBwYWNrX3JlZHVuZGFudF91c2FnZVtdID0KKyJnaXQgcGFjay1yZWR1bmRhbnQgWy0tdmVyYm9zZV0gWy0tYWx0LW9kYl0gKC0tYWxsIHwgPGZpbGVuYW1lLnBhY2s+Li4uKSI7CisKK3N0YXRpYyBpbnQgbG9hZF9hbGxfcGFja3MsIHZlcmJvc2UsIGFsdF9vZGI7CisKK3N0cnVjdCBsbGlzdF9pdGVtIHsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqbmV4dDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworfTsKK3N0YXRpYyBzdHJ1Y3QgbGxpc3QgeworCXN0cnVjdCBsbGlzdF9pdGVtICpmcm9udDsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqYmFjazsKKwlzaXplX3Qgc2l6ZTsKK30gKmFsbF9vYmplY3RzOyAvKiBhbGwgb2JqZWN0cyB3aGljaCBtdXN0IGJlIHByZXNlbnQgaW4gbG9jYWwgcGFja2ZpbGVzICovCisKK3N0YXRpYyBzdHJ1Y3QgcGFja19saXN0IHsKKwlzdHJ1Y3QgcGFja19saXN0ICpuZXh0OworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrOworCXN0cnVjdCBsbGlzdCAqdW5pcXVlX29iamVjdHM7CisJc3RydWN0IGxsaXN0ICphbGxfb2JqZWN0czsKK30gKmxvY2FsX3BhY2tzID0gTlVMTCwgKmFsdG9kYl9wYWNrcyA9IE5VTEw7CisKK3N0cnVjdCBwbGwgeworCXN0cnVjdCBwbGwgKm5leHQ7CisJc3RydWN0IHBhY2tfbGlzdCAqcGw7Cit9OworCitzdGF0aWMgc3RydWN0IGxsaXN0X2l0ZW0gKmZyZWVfbm9kZXM7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsbGlzdF9pdGVtX3B1dChzdHJ1Y3QgbGxpc3RfaXRlbSAqaXRlbSkKK3sKKwlpdGVtLT5uZXh0ID0gZnJlZV9ub2RlczsKKwlmcmVlX25vZGVzID0gaXRlbTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxpc3RfaXRlbSAqbGxpc3RfaXRlbV9nZXQodm9pZCkKK3sKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqbmV3OworCWlmICggZnJlZV9ub2RlcyApIHsKKwkJbmV3ID0gZnJlZV9ub2RlczsKKwkJZnJlZV9ub2RlcyA9IGZyZWVfbm9kZXMtPm5leHQ7CisJfSBlbHNlIHsKKwkJaW50IGkgPSAxOworCQluZXcgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgbGxpc3RfaXRlbSkgKiBCTEtTSVpFKTsKKwkJZm9yICg7IGkgPCBCTEtTSVpFOyBpKyspCisJCQlsbGlzdF9pdGVtX3B1dCgmbmV3W2ldKTsKKwl9CisJcmV0dXJuIG5ldzsKK30KKworc3RhdGljIHZvaWQgbGxpc3RfZnJlZShzdHJ1Y3QgbGxpc3QgKmxpc3QpCit7CisJd2hpbGUgKChsaXN0LT5iYWNrID0gbGlzdC0+ZnJvbnQpKSB7CisJCWxpc3QtPmZyb250ID0gbGlzdC0+ZnJvbnQtPm5leHQ7CisJCWxsaXN0X2l0ZW1fcHV0KGxpc3QtPmJhY2spOworCX0KKwlmcmVlKGxpc3QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGxpc3RfaW5pdChzdHJ1Y3QgbGxpc3QgKipsaXN0KQoreworCSpsaXN0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGxsaXN0KSk7CisJKCpsaXN0KS0+ZnJvbnQgPSAoKmxpc3QpLT5iYWNrID0gTlVMTDsKKwkoKmxpc3QpLT5zaXplID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBsbGlzdCAqIGxsaXN0X2NvcHkoc3RydWN0IGxsaXN0ICpsaXN0KQoreworCXN0cnVjdCBsbGlzdCAqcmV0OworCXN0cnVjdCBsbGlzdF9pdGVtICpuZXcsICpvbGQsICpwcmV2OworCisJbGxpc3RfaW5pdCgmcmV0KTsKKworCWlmICgocmV0LT5zaXplID0gbGlzdC0+c2l6ZSkgPT0gMCkKKwkJcmV0dXJuIHJldDsKKworCW5ldyA9IHJldC0+ZnJvbnQgPSBsbGlzdF9pdGVtX2dldCgpOworCW5ldy0+c2hhMSA9IGxpc3QtPmZyb250LT5zaGExOworCisJb2xkID0gbGlzdC0+ZnJvbnQtPm5leHQ7CisJd2hpbGUgKG9sZCkgeworCQlwcmV2ID0gbmV3OworCQluZXcgPSBsbGlzdF9pdGVtX2dldCgpOworCQlwcmV2LT5uZXh0ID0gbmV3OworCQluZXctPnNoYTEgPSBvbGQtPnNoYTE7CisJCW9sZCA9IG9sZC0+bmV4dDsKKwl9CisJbmV3LT5uZXh0ID0gTlVMTDsKKwlyZXQtPmJhY2sgPSBuZXc7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9pdGVtICpsbGlzdF9pbnNlcnQoc3RydWN0IGxsaXN0ICpsaXN0LAorCQkJCQkgICAgICBzdHJ1Y3QgbGxpc3RfaXRlbSAqYWZ0ZXIsCisJCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBsbGlzdF9pdGVtICpuZXcgPSBsbGlzdF9pdGVtX2dldCgpOworCW5ldy0+c2hhMSA9IHNoYTE7CisJbmV3LT5uZXh0ID0gTlVMTDsKKworCWlmIChhZnRlciAhPSBOVUxMKSB7CisJCW5ldy0+bmV4dCA9IGFmdGVyLT5uZXh0OworCQlhZnRlci0+bmV4dCA9IG5ldzsKKwkJaWYgKGFmdGVyID09IGxpc3QtPmJhY2spCisJCQlsaXN0LT5iYWNrID0gbmV3OworCX0gZWxzZSB7LyogaW5zZXJ0IGluIGZyb250ICovCisJCWlmIChsaXN0LT5zaXplID09IDApCisJCQlsaXN0LT5iYWNrID0gbmV3OworCQllbHNlCisJCQluZXctPm5leHQgPSBsaXN0LT5mcm9udDsKKwkJbGlzdC0+ZnJvbnQgPSBuZXc7CisJfQorCWxpc3QtPnNpemUrKzsKKwlyZXR1cm4gbmV3OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9pdGVtICpsbGlzdF9pbnNlcnRfYmFjayhzdHJ1Y3QgbGxpc3QgKmxpc3QsCisJCQkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXJldHVybiBsbGlzdF9pbnNlcnQobGlzdCwgbGlzdC0+YmFjaywgc2hhMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxsaXN0X2l0ZW0gKmxsaXN0X2luc2VydF9zb3J0ZWRfdW5pcXVlKHN0cnVjdCBsbGlzdCAqbGlzdCwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBsbGlzdF9pdGVtICpoaW50KQoreworCXN0cnVjdCBsbGlzdF9pdGVtICpwcmV2ID0gTlVMTCwgKmw7CisKKwlsID0gKGhpbnQgPT0gTlVMTCkgPyBsaXN0LT5mcm9udCA6IGhpbnQ7CisJd2hpbGUgKGwpIHsKKwkJaW50IGNtcCA9IGhhc2hjbXAobC0+c2hhMSwgc2hhMSk7CisJCWlmIChjbXAgPiAwKSB7IC8qIHdlIGluc2VydCBiZWZvcmUgdGhpcyBlbnRyeSAqLworCQkJcmV0dXJuIGxsaXN0X2luc2VydChsaXN0LCBwcmV2LCBzaGExKTsKKwkJfQorCQlpZiAoIWNtcCkgeyAvKiBhbHJlYWR5IGV4aXN0cyAqLworCQkJcmV0dXJuIGw7CisJCX0KKwkJcHJldiA9IGw7CisJCWwgPSBsLT5uZXh0OworCX0KKwkvKiBpbnNlcnQgYXQgdGhlIGVuZCAqLworCXJldHVybiBsbGlzdF9pbnNlcnRfYmFjayhsaXN0LCBzaGExKTsKK30KKworLyogcmV0dXJucyBhIHBvaW50ZXIgdG8gYW4gaXRlbSBpbiBmcm9udCBvZiBzaGExICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGlzdF9pdGVtICogbGxpc3Rfc29ydGVkX3JlbW92ZShzdHJ1Y3QgbGxpc3QgKmxpc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBsbGlzdF9pdGVtICpoaW50KQoreworCXN0cnVjdCBsbGlzdF9pdGVtICpwcmV2LCAqbDsKKworcmVkb19mcm9tX3N0YXJ0OgorCWwgPSAoaGludCA9PSBOVUxMKSA/IGxpc3QtPmZyb250IDogaGludDsKKwlwcmV2ID0gTlVMTDsKKwl3aGlsZSAobCkgeworCQlpbnQgY21wID0gaGFzaGNtcChsLT5zaGExLCBzaGExKTsKKwkJaWYgKGNtcCA+IDApIC8qIG5vdCBpbiBsaXN0LCBzaW5jZSBzb3J0ZWQgKi8KKwkJCXJldHVybiBwcmV2OworCQlpZiAoIWNtcCkgeyAvKiBmb3VuZCAqLworCQkJaWYgKHByZXYgPT0gTlVMTCkgeworCQkJCWlmIChoaW50ICE9IE5VTEwgJiYgaGludCAhPSBsaXN0LT5mcm9udCkgeworCQkJCQkvKiB3ZSBkb24ndCBrbm93IHRoZSBwcmV2aW91cyBlbGVtZW50ICovCisJCQkJCWhpbnQgPSBOVUxMOworCQkJCQlnb3RvIHJlZG9fZnJvbV9zdGFydDsKKwkJCQl9CisJCQkJbGlzdC0+ZnJvbnQgPSBsLT5uZXh0OworCQkJfSBlbHNlCisJCQkJcHJldi0+bmV4dCA9IGwtPm5leHQ7CisJCQlpZiAobCA9PSBsaXN0LT5iYWNrKQorCQkJCWxpc3QtPmJhY2sgPSBwcmV2OworCQkJbGxpc3RfaXRlbV9wdXQobCk7CisJCQlsaXN0LT5zaXplLS07CisJCQlyZXR1cm4gcHJldjsKKwkJfQorCQlwcmV2ID0gbDsKKwkJbCA9IGwtPm5leHQ7CisJfQorCXJldHVybiBwcmV2OworfQorCisvKiBjb21wdXRlcyBBXEIgKi8KK3N0YXRpYyB2b2lkIGxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2Uoc3RydWN0IGxsaXN0ICpBLAorCQkJCSAgICAgc3RydWN0IGxsaXN0ICpCKQoreworCXN0cnVjdCBsbGlzdF9pdGVtICpoaW50LCAqYjsKKworCWhpbnQgPSBOVUxMOworCWIgPSBCLT5mcm9udDsKKworCXdoaWxlIChiKSB7CisJCWhpbnQgPSBsbGlzdF9zb3J0ZWRfcmVtb3ZlKEEsIGItPnNoYTEsIGhpbnQpOworCQliID0gYi0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhY2tfbGlzdCAqIHBhY2tfbGlzdF9pbnNlcnQoc3RydWN0IHBhY2tfbGlzdCAqKnBsLAorCQkJCQkgICBzdHJ1Y3QgcGFja19saXN0ICplbnRyeSkKK3sKKwlzdHJ1Y3QgcGFja19saXN0ICpwID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBhY2tfbGlzdCkpOworCW1lbWNweShwLCBlbnRyeSwgc2l6ZW9mKHN0cnVjdCBwYWNrX2xpc3QpKTsKKwlwLT5uZXh0ID0gKnBsOworCSpwbCA9IHA7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHBhY2tfbGlzdF9zaXplKHN0cnVjdCBwYWNrX2xpc3QgKnBsKQoreworCXNpemVfdCByZXQgPSAwOworCXdoaWxlIChwbCkgeworCQlyZXQrKzsKKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwYWNrX2xpc3QgKiBwYWNrX2xpc3RfZGlmZmVyZW5jZShjb25zdCBzdHJ1Y3QgcGFja19saXN0ICpBLAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBhY2tfbGlzdCAqQikKK3sKKwlzdHJ1Y3QgcGFja19saXN0ICpyZXQ7CisJY29uc3Qgc3RydWN0IHBhY2tfbGlzdCAqcGw7CisKKwlpZiAoQSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXBsID0gQjsKKwl3aGlsZSAocGwgIT0gTlVMTCkgeworCQlpZiAoQS0+cGFjayA9PSBwbC0+cGFjaykKKwkJCXJldHVybiBwYWNrX2xpc3RfZGlmZmVyZW5jZShBLT5uZXh0LCBCKTsKKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisJcmV0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBhY2tfbGlzdCkpOworCW1lbWNweShyZXQsIEEsIHNpemVvZihzdHJ1Y3QgcGFja19saXN0KSk7CisJcmV0LT5uZXh0ID0gcGFja19saXN0X2RpZmZlcmVuY2UoQS0+bmV4dCwgQik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgY21wX3R3b19wYWNrcyhzdHJ1Y3QgcGFja19saXN0ICpwMSwgc3RydWN0IHBhY2tfbGlzdCAqcDIpCit7CisJdW5zaWduZWQgbG9uZyBwMV9vZmYgPSAwLCBwMl9vZmYgPSAwLCBwMV9zdGVwLCBwMl9zdGVwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAxX2Jhc2UsICpwMl9iYXNlOworCXN0cnVjdCBsbGlzdF9pdGVtICpwMV9oaW50ID0gTlVMTCwgKnAyX2hpbnQgPSBOVUxMOworCisJcDFfYmFzZSA9IHAxLT5wYWNrLT5pbmRleF9kYXRhOworCXAyX2Jhc2UgPSBwMi0+cGFjay0+aW5kZXhfZGF0YTsKKwlwMV9iYXNlICs9IDI1NiAqIDQgKyAoKHAxLT5wYWNrLT5pbmRleF92ZXJzaW9uIDwgMikgPyA0IDogOCk7CisJcDJfYmFzZSArPSAyNTYgKiA0ICsgKChwMi0+cGFjay0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDgpOworCXAxX3N0ZXAgPSAocDEtPnBhY2stPmluZGV4X3ZlcnNpb24gPCAyKSA/IDI0IDogMjA7CisJcDJfc3RlcCA9IChwMi0+cGFjay0+aW5kZXhfdmVyc2lvbiA8IDIpID8gMjQgOiAyMDsKKworCXdoaWxlIChwMV9vZmYgPCBwMS0+cGFjay0+bnVtX29iamVjdHMgKiBwMV9zdGVwICYmCisJICAgICAgIHAyX29mZiA8IHAyLT5wYWNrLT5udW1fb2JqZWN0cyAqIHAyX3N0ZXApCisJeworCQlpbnQgY21wID0gaGFzaGNtcChwMV9iYXNlICsgcDFfb2ZmLCBwMl9iYXNlICsgcDJfb2ZmKTsKKwkJLyogY21wIH4gcDEgLSBwMiAqLworCQlpZiAoY21wID09IDApIHsKKwkJCXAxX2hpbnQgPSBsbGlzdF9zb3J0ZWRfcmVtb3ZlKHAxLT51bmlxdWVfb2JqZWN0cywKKwkJCQkJcDFfYmFzZSArIHAxX29mZiwgcDFfaGludCk7CisJCQlwMl9oaW50ID0gbGxpc3Rfc29ydGVkX3JlbW92ZShwMi0+dW5pcXVlX29iamVjdHMsCisJCQkJCXAxX2Jhc2UgKyBwMV9vZmYsIHAyX2hpbnQpOworCQkJcDFfb2ZmICs9IHAxX3N0ZXA7CisJCQlwMl9vZmYgKz0gcDJfc3RlcDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjbXAgPCAwKSB7IC8qIHAxIGhhcyB0aGUgb2JqZWN0LCBwMiBkb2Vzbid0ICovCisJCQlwMV9vZmYgKz0gcDFfc3RlcDsKKwkJfSBlbHNlIHsgLyogcDIgaGFzIHRoZSBvYmplY3QsIHAxIGRvZXNuJ3QgKi8KKwkJCXAyX29mZiArPSBwMl9zdGVwOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwbGxfZnJlZShzdHJ1Y3QgcGxsICpsKQoreworCXN0cnVjdCBwbGwgKm9sZDsKKwlzdHJ1Y3QgcGFja19saXN0ICpvcGw7CisKKwl3aGlsZSAobCkgeworCQlvbGQgPSBsOworCQl3aGlsZSAobC0+cGwpIHsKKwkJCW9wbCA9IGwtPnBsOworCQkJbC0+cGwgPSBvcGwtPm5leHQ7CisJCQlmcmVlKG9wbCk7CisJCX0KKwkJbCA9IGwtPm5leHQ7CisJCWZyZWUob2xkKTsKKwl9Cit9CisKKy8qIGFsbCB0aGUgcGVybXV0YXRpb25zIGhhdmUgdG8gYmUgZnJlZSgpZCBhdCB0aGUgc2FtZSB0aW1lLAorICogc2luY2UgdGhleSByZWZlciB0byBlYWNoIG90aGVyCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxsICogZ2V0X3Blcm11dGF0aW9ucyhzdHJ1Y3QgcGFja19saXN0ICpsaXN0LCBpbnQgbikKK3sKKwlzdHJ1Y3QgcGxsICpzdWJzZXQsICpyZXQgPSBOVUxMLCAqbmV3X3BsbCA9IE5VTEw7CisKKwlpZiAobGlzdCA9PSBOVUxMIHx8IHBhY2tfbGlzdF9zaXplKGxpc3QpIDwgbiB8fCBuID09IDApCisJCXJldHVybiBOVUxMOworCisJaWYgKG4gPT0gMSkgeworCQl3aGlsZSAobGlzdCkgeworCQkJbmV3X3BsbCA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdfcGxsKSk7CisJCQluZXdfcGxsLT5wbCA9IE5VTEw7CisJCQlwYWNrX2xpc3RfaW5zZXJ0KCZuZXdfcGxsLT5wbCwgbGlzdCk7CisJCQluZXdfcGxsLT5uZXh0ID0gcmV0OworCQkJcmV0ID0gbmV3X3BsbDsKKwkJCWxpc3QgPSBsaXN0LT5uZXh0OworCQl9CisJCXJldHVybiByZXQ7CisJfQorCisJd2hpbGUgKGxpc3QtPm5leHQpIHsKKwkJc3Vic2V0ID0gZ2V0X3Blcm11dGF0aW9ucyhsaXN0LT5uZXh0LCBuIC0gMSk7CisJCXdoaWxlIChzdWJzZXQpIHsKKwkJCW5ld19wbGwgPSB4bWFsbG9jKHNpemVvZigqbmV3X3BsbCkpOworCQkJbmV3X3BsbC0+cGwgPSBzdWJzZXQtPnBsOworCQkJcGFja19saXN0X2luc2VydCgmbmV3X3BsbC0+cGwsIGxpc3QpOworCQkJbmV3X3BsbC0+bmV4dCA9IHJldDsKKwkJCXJldCA9IG5ld19wbGw7CisJCQlzdWJzZXQgPSBzdWJzZXQtPm5leHQ7CisJCX0KKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfc3VwZXJzZXQoc3RydWN0IHBhY2tfbGlzdCAqcGwsIHN0cnVjdCBsbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgbGxpc3QgKmRpZmY7CisKKwlkaWZmID0gbGxpc3RfY29weShsaXN0KTsKKworCXdoaWxlIChwbCkgeworCQlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKGRpZmYsIHBsLT5hbGxfb2JqZWN0cyk7CisJCWlmIChkaWZmLT5zaXplID09IDApIHsgLyogd2UncmUgZG9uZSAqLworCQkJbGxpc3RfZnJlZShkaWZmKTsKKwkJCXJldHVybiAxOworCQl9CisJCXBsID0gcGwtPm5leHQ7CisJfQorCWxsaXN0X2ZyZWUoZGlmZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzaXplX3Qgc2l6ZW9mX3VuaW9uKHN0cnVjdCBwYWNrZWRfZ2l0ICpwMSwgc3RydWN0IHBhY2tlZF9naXQgKnAyKQoreworCXNpemVfdCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgcDFfb2ZmID0gMCwgcDJfb2ZmID0gMCwgcDFfc3RlcCwgcDJfc3RlcDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwMV9iYXNlLCAqcDJfYmFzZTsKKworCXAxX2Jhc2UgPSBwMS0+aW5kZXhfZGF0YTsKKwlwMl9iYXNlID0gcDItPmluZGV4X2RhdGE7CisJcDFfYmFzZSArPSAyNTYgKiA0ICsgKChwMS0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDgpOworCXAyX2Jhc2UgKz0gMjU2ICogNCArICgocDItPmluZGV4X3ZlcnNpb24gPCAyKSA/IDQgOiA4KTsKKwlwMV9zdGVwID0gKHAxLT5pbmRleF92ZXJzaW9uIDwgMikgPyAyNCA6IDIwOworCXAyX3N0ZXAgPSAocDItPmluZGV4X3ZlcnNpb24gPCAyKSA/IDI0IDogMjA7CisKKwl3aGlsZSAocDFfb2ZmIDwgcDEtPm51bV9vYmplY3RzICogcDFfc3RlcCAmJgorCSAgICAgICBwMl9vZmYgPCBwMi0+bnVtX29iamVjdHMgKiBwMl9zdGVwKQorCXsKKwkJaW50IGNtcCA9IGhhc2hjbXAocDFfYmFzZSArIHAxX29mZiwgcDJfYmFzZSArIHAyX29mZik7CisJCS8qIGNtcCB+IHAxIC0gcDIgKi8KKwkJaWYgKGNtcCA9PSAwKSB7CisJCQlyZXQrKzsKKwkJCXAxX29mZiArPSBwMV9zdGVwOworCQkJcDJfb2ZmICs9IHAyX3N0ZXA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY21wIDwgMCkgeyAvKiBwMSBoYXMgdGhlIG9iamVjdCwgcDIgZG9lc24ndCAqLworCQkJcDFfb2ZmICs9IHAxX3N0ZXA7CisJCX0gZWxzZSB7IC8qIHAyIGhhcyB0aGUgb2JqZWN0LCBwMSBkb2Vzbid0ICovCisJCQlwMl9vZmYgKz0gcDJfc3RlcDsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBhbm90aGVyIE8obl4yKSBmdW5jdGlvbiAuLi4gKi8KK3N0YXRpYyBzaXplX3QgZ2V0X3BhY2tfcmVkdW5kYW5jeShzdHJ1Y3QgcGFja19saXN0ICpwbCkKK3sKKwlzdHJ1Y3QgcGFja19saXN0ICpzdWJzZXQ7CisJc2l6ZV90IHJldCA9IDA7CisKKwlpZiAocGwgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKHN1YnNldCA9IHBsLT5uZXh0KSkgeworCQl3aGlsZSAoc3Vic2V0KSB7CisJCQlyZXQgKz0gc2l6ZW9mX3VuaW9uKHBsLT5wYWNrLCBzdWJzZXQtPnBhY2spOworCQkJc3Vic2V0ID0gc3Vic2V0LT5uZXh0OworCQl9CisJCXBsID0gcGwtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgb2ZmX3QgcGFja19zZXRfYnl0ZWNvdW50KHN0cnVjdCBwYWNrX2xpc3QgKnBsKQoreworCW9mZl90IHJldCA9IDA7CisJd2hpbGUgKHBsKSB7CisJCXJldCArPSBwbC0+cGFjay0+cGFja19zaXplOworCQlyZXQgKz0gcGwtPnBhY2stPmluZGV4X3NpemU7CisJCXBsID0gcGwtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG1pbmltaXplKHN0cnVjdCBwYWNrX2xpc3QgKiptaW4pCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcGwsICp1bmlxdWUgPSBOVUxMLAorCQkqbm9uX3VuaXF1ZSA9IE5VTEwsICptaW5fcGVybSA9IE5VTEw7CisJc3RydWN0IHBsbCAqcGVybSwgKnBlcm1fYWxsLCAqcGVybV9vayA9IE5VTEwsICpuZXdfcGVybTsKKwlzdHJ1Y3QgbGxpc3QgKm1pc3Npbmc7CisJb2ZmX3QgbWluX3Blcm1fc2l6ZSA9IDAsIHBlcm1fc2l6ZTsKKwlpbnQgbjsKKworCXBsID0gbG9jYWxfcGFja3M7CisJd2hpbGUgKHBsKSB7CisJCWlmIChwbC0+dW5pcXVlX29iamVjdHMtPnNpemUpCisJCQlwYWNrX2xpc3RfaW5zZXJ0KCZ1bmlxdWUsIHBsKTsKKwkJZWxzZQorCQkJcGFja19saXN0X2luc2VydCgmbm9uX3VuaXF1ZSwgcGwpOworCQlwbCA9IHBsLT5uZXh0OworCX0KKwkvKiBmaW5kIG91dCB3aGljaCBvYmplY3RzIGFyZSBtaXNzaW5nIGZyb20gdGhlIHNldCBvZiB1bmlxdWUgcGFja3MgKi8KKwltaXNzaW5nID0gbGxpc3RfY29weShhbGxfb2JqZWN0cyk7CisJcGwgPSB1bmlxdWU7CisJd2hpbGUgKHBsKSB7CisJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UobWlzc2luZywgcGwtPmFsbF9vYmplY3RzKTsKKwkJcGwgPSBwbC0+bmV4dDsKKwl9CisKKwkvKiByZXR1cm4gaWYgdGhlcmUgYXJlIG5vIG9iamVjdHMgbWlzc2luZyBmcm9tIHRoZSB1bmlxdWUgc2V0ICovCisJaWYgKG1pc3NpbmctPnNpemUgPT0gMCkgeworCQkqbWluID0gdW5pcXVlOworCQlyZXR1cm47CisJfQorCisJLyogZmluZCB0aGUgcGVybXV0YXRpb25zIHdoaWNoIGNvbnRhaW4gYWxsIG1pc3Npbmcgb2JqZWN0cyAqLworCWZvciAobiA9IDE7IG4gPD0gcGFja19saXN0X3NpemUobm9uX3VuaXF1ZSkgJiYgIXBlcm1fb2s7IG4rKykgeworCQlwZXJtX2FsbCA9IHBlcm0gPSBnZXRfcGVybXV0YXRpb25zKG5vbl91bmlxdWUsIG4pOworCQl3aGlsZSAocGVybSkgeworCQkJaWYgKGlzX3N1cGVyc2V0KHBlcm0tPnBsLCBtaXNzaW5nKSkgeworCQkJCW5ld19wZXJtID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHBsbCkpOworCQkJCW1lbWNweShuZXdfcGVybSwgcGVybSwgc2l6ZW9mKHN0cnVjdCBwbGwpKTsKKwkJCQluZXdfcGVybS0+bmV4dCA9IHBlcm1fb2s7CisJCQkJcGVybV9vayA9IG5ld19wZXJtOworCQkJfQorCQkJcGVybSA9IHBlcm0tPm5leHQ7CisJCX0KKwkJaWYgKHBlcm1fb2spCisJCQlicmVhazsKKwkJcGxsX2ZyZWUocGVybV9hbGwpOworCX0KKwlpZiAocGVybV9vayA9PSBOVUxMKQorCQlkaWUoIkludGVybmFsIGVycm9yOiBObyBjb21wbGV0ZSBzZXRzIGZvdW5kISIpOworCisJLyogZmluZCB0aGUgcGVybXV0YXRpb24gd2l0aCB0aGUgc21hbGxlc3Qgc2l6ZSAqLworCXBlcm0gPSBwZXJtX29rOworCXdoaWxlIChwZXJtKSB7CisJCXBlcm1fc2l6ZSA9IHBhY2tfc2V0X2J5dGVjb3VudChwZXJtLT5wbCk7CisJCWlmICghbWluX3Blcm1fc2l6ZSB8fCBtaW5fcGVybV9zaXplID4gcGVybV9zaXplKSB7CisJCQltaW5fcGVybV9zaXplID0gcGVybV9zaXplOworCQkJbWluX3Blcm0gPSBwZXJtLT5wbDsKKwkJfQorCQlwZXJtID0gcGVybS0+bmV4dDsKKwl9CisJKm1pbiA9IG1pbl9wZXJtOworCS8qIGFkZCB0aGUgdW5pcXVlIHBhY2tzIHRvIHRoZSBsaXN0ICovCisJcGwgPSB1bmlxdWU7CisJd2hpbGUgKHBsKSB7CisJCXBhY2tfbGlzdF9pbnNlcnQobWluLCBwbCk7CisJCXBsID0gcGwtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX2FsbF9vYmplY3RzKHZvaWQpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqcGwgPSBsb2NhbF9wYWNrczsKKwlzdHJ1Y3QgbGxpc3RfaXRlbSAqaGludCwgKmw7CisKKwlsbGlzdF9pbml0KCZhbGxfb2JqZWN0cyk7CisKKwl3aGlsZSAocGwpIHsKKwkJaGludCA9IE5VTEw7CisJCWwgPSBwbC0+YWxsX29iamVjdHMtPmZyb250OworCQl3aGlsZSAobCkgeworCQkJaGludCA9IGxsaXN0X2luc2VydF9zb3J0ZWRfdW5pcXVlKGFsbF9vYmplY3RzLAorCQkJCQkJCSAgbC0+c2hhMSwgaGludCk7CisJCQlsID0gbC0+bmV4dDsKKwkJfQorCQlwbCA9IHBsLT5uZXh0OworCX0KKwkvKiByZW1vdmUgb2JqZWN0cyBwcmVzZW50IGluIHJlbW90ZSBwYWNrcyAqLworCXBsID0gYWx0b2RiX3BhY2tzOworCXdoaWxlIChwbCkgeworCQlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKGFsbF9vYmplY3RzLCBwbC0+YWxsX29iamVjdHMpOworCQlwbCA9IHBsLT5uZXh0OworCX0KK30KKworLyogdGhpcyBzY2FsZXMgbGlrZSBPKG5eMikgKi8KK3N0YXRpYyB2b2lkIGNtcF9sb2NhbF9wYWNrcyh2b2lkKQoreworCXN0cnVjdCBwYWNrX2xpc3QgKnN1YnNldCwgKnBsID0gbG9jYWxfcGFja3M7CisKKwl3aGlsZSAoKHN1YnNldCA9IHBsKSkgeworCQl3aGlsZSAoKHN1YnNldCA9IHN1YnNldC0+bmV4dCkpCisJCQljbXBfdHdvX3BhY2tzKHBsLCBzdWJzZXQpOworCQlwbCA9IHBsLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgc2Nhbl9hbHRfb2RiX3BhY2tzKHZvaWQpCit7CisJc3RydWN0IHBhY2tfbGlzdCAqbG9jYWwsICphbHQ7CisKKwlhbHQgPSBhbHRvZGJfcGFja3M7CisJd2hpbGUgKGFsdCkgeworCQlsb2NhbCA9IGxvY2FsX3BhY2tzOworCQl3aGlsZSAobG9jYWwpIHsKKwkJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UobG9jYWwtPnVuaXF1ZV9vYmplY3RzLAorCQkJCQkJCWFsdC0+YWxsX29iamVjdHMpOworCQkJbG9jYWwgPSBsb2NhbC0+bmV4dDsKKwkJfQorCQlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKGFsbF9vYmplY3RzLCBhbHQtPmFsbF9vYmplY3RzKTsKKwkJYWx0ID0gYWx0LT5uZXh0OworCX0KK30KKworc3RhdGljIHN0cnVjdCBwYWNrX2xpc3QgKiBhZGRfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlzdHJ1Y3QgcGFja19saXN0IGw7CisJdW5zaWduZWQgbG9uZyBvZmYgPSAwLCBzdGVwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2U7CisKKwlpZiAoIXAtPnBhY2tfbG9jYWwgJiYgIShhbHRfb2RiIHx8IHZlcmJvc2UpKQorCQlyZXR1cm4gTlVMTDsKKworCWwucGFjayA9IHA7CisJbGxpc3RfaW5pdCgmbC5hbGxfb2JqZWN0cyk7CisKKwlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQlyZXR1cm4gTlVMTDsKKworCWJhc2UgPSBwLT5pbmRleF9kYXRhOworCWJhc2UgKz0gMjU2ICogNCArICgocC0+aW5kZXhfdmVyc2lvbiA8IDIpID8gNCA6IDgpOworCXN0ZXAgPSAocC0+aW5kZXhfdmVyc2lvbiA8IDIpID8gMjQgOiAyMDsKKwl3aGlsZSAob2ZmIDwgcC0+bnVtX29iamVjdHMgKiBzdGVwKSB7CisJCWxsaXN0X2luc2VydF9iYWNrKGwuYWxsX29iamVjdHMsIGJhc2UgKyBvZmYpOworCQlvZmYgKz0gc3RlcDsKKwl9CisJLyogdGhpcyBsaXN0IHdpbGwgYmUgcHJ1bmVkIGluIGNtcF90d29fcGFja3MgbGF0ZXIgKi8KKwlsLnVuaXF1ZV9vYmplY3RzID0gbGxpc3RfY29weShsLmFsbF9vYmplY3RzKTsKKwlpZiAocC0+cGFja19sb2NhbCkKKwkJcmV0dXJuIHBhY2tfbGlzdF9pbnNlcnQoJmxvY2FsX3BhY2tzLCAmbCk7CisJZWxzZQorCQlyZXR1cm4gcGFja19saXN0X2luc2VydCgmYWx0b2RiX3BhY2tzLCAmbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFja19saXN0ICogYWRkX3BhY2tfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IHBhY2tlZF9naXQ7CisKKwlpZiAoc3RybGVuKGZpbGVuYW1lKSA8IDQwKQorCQlkaWUoIkJhZCBwYWNrIGZpbGVuYW1lOiAlcyIsIGZpbGVuYW1lKTsKKworCXdoaWxlIChwKSB7CisJCWlmIChzdHJzdHIocC0+cGFja19uYW1lLCBmaWxlbmFtZSkpCisJCQlyZXR1cm4gYWRkX3BhY2socCk7CisJCXAgPSBwLT5uZXh0OworCX0KKwlkaWUoIkZpbGVuYW1lICVzIG5vdCBmb3VuZCBpbiBwYWNrZWRfZ2l0IiwgZmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCBsb2FkX2FsbCh2b2lkKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gcGFja2VkX2dpdDsKKworCXdoaWxlIChwKSB7CisJCWFkZF9wYWNrKHApOworCQlwID0gcC0+bmV4dDsKKwl9Cit9CisKK2ludCBjbWRfcGFja19yZWR1bmRhbnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGk7CisJc3RydWN0IHBhY2tfbGlzdCAqbWluLCAqcmVkLCAqcGw7CisJc3RydWN0IGxsaXN0ICppZ25vcmU7CisJdW5zaWduZWQgY2hhciAqc2hhMTsKKwljaGFyIGJ1Zls0Ml07IC8qIDQwIGJ5dGUgc2hhMSArIFxuICsgXDAgKi8KKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2UocGFja19yZWR1bmRhbnRfdXNhZ2UpOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQlpKys7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCQlsb2FkX2FsbF9wYWNrcyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXZlcmJvc2UiKSkgeworCQkJdmVyYm9zZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWFsdC1vZGIiKSkgeworCQkJYWx0X29kYiA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKmFyZyA9PSAnLScpCisJCQl1c2FnZShwYWNrX3JlZHVuZGFudF91c2FnZSk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCXByZXBhcmVfcGFja2VkX2dpdCgpOworCisJaWYgKGxvYWRfYWxsX3BhY2tzKQorCQlsb2FkX2FsbCgpOworCWVsc2UKKwkJd2hpbGUgKCooYXJndiArIGkpICE9IE5VTEwpCisJCQlhZGRfcGFja19maWxlKCooYXJndiArIGkrKykpOworCisJaWYgKGxvY2FsX3BhY2tzID09IE5VTEwpCisJCWRpZSgiWmVybyBwYWNrcyBmb3VuZCEiKTsKKworCWxvYWRfYWxsX29iamVjdHMoKTsKKworCWNtcF9sb2NhbF9wYWNrcygpOworCWlmIChhbHRfb2RiKQorCQlzY2FuX2FsdF9vZGJfcGFja3MoKTsKKworCS8qIGlnbm9yZSBvYmplY3RzIGdpdmVuIG9uIHN0ZGluICovCisJbGxpc3RfaW5pdCgmaWdub3JlKTsKKwlpZiAoIWlzYXR0eSgwKSkgeworCQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pKSB7CisJCQlzaGExID0geG1hbGxvYygyMCk7CisJCQlpZiAoZ2V0X3NoYTFfaGV4KGJ1Ziwgc2hhMSkpCisJCQkJZGllKCJCYWQgc2hhMSBvbiBzdGRpbjogJXMiLCBidWYpOworCQkJbGxpc3RfaW5zZXJ0X3NvcnRlZF91bmlxdWUoaWdub3JlLCBzaGExLCBOVUxMKTsKKwkJfQorCX0KKwlsbGlzdF9zb3J0ZWRfZGlmZmVyZW5jZV9pbnBsYWNlKGFsbF9vYmplY3RzLCBpZ25vcmUpOworCXBsID0gbG9jYWxfcGFja3M7CisJd2hpbGUgKHBsKSB7CisJCWxsaXN0X3NvcnRlZF9kaWZmZXJlbmNlX2lucGxhY2UocGwtPnVuaXF1ZV9vYmplY3RzLCBpZ25vcmUpOworCQlwbCA9IHBsLT5uZXh0OworCX0KKworCW1pbmltaXplKCZtaW4pOworCisJaWYgKHZlcmJvc2UpIHsKKwkJZnByaW50ZihzdGRlcnIsICJUaGVyZSBhcmUgJWx1IHBhY2tzIGF2YWlsYWJsZSBpbiBhbHQtb2Ricy5cbiIsCisJCQkodW5zaWduZWQgbG9uZylwYWNrX2xpc3Rfc2l6ZShhbHRvZGJfcGFja3MpKTsKKwkJZnByaW50ZihzdGRlcnIsICJUaGUgc21hbGxlc3QgKGJ5dGV3aXNlKSBzZXQgb2YgcGFja3MgaXM6XG4iKTsKKwkJcGwgPSBtaW47CisJCXdoaWxlIChwbCkgeworCQkJZnByaW50ZihzdGRlcnIsICJcdCVzXG4iLCBwbC0+cGFjay0+cGFja19uYW1lKTsKKwkJCXBsID0gcGwtPm5leHQ7CisJCX0KKwkJZnByaW50ZihzdGRlcnIsICJjb250YWluaW5nICVsdSBkdXBsaWNhdGUgb2JqZWN0cyAiCisJCQkJIndpdGggYSB0b3RhbCBzaXplIG9mICVsdWtiLlxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKWdldF9wYWNrX3JlZHVuZGFuY3kobWluKSwKKwkJCSh1bnNpZ25lZCBsb25nKXBhY2tfc2V0X2J5dGVjb3VudChtaW4pLzEwMjQpOworCQlmcHJpbnRmKHN0ZGVyciwgIkEgdG90YWwgb2YgJWx1IHVuaXF1ZSBvYmplY3RzIHdlcmUgY29uc2lkZXJlZC5cbiIsCisJCQkodW5zaWduZWQgbG9uZylhbGxfb2JqZWN0cy0+c2l6ZSk7CisJCWZwcmludGYoc3RkZXJyLCAiUmVkdW5kYW50IHBhY2tzICh3aXRoIGluZGV4ZXMpOlxuIik7CisJfQorCXBsID0gcmVkID0gcGFja19saXN0X2RpZmZlcmVuY2UobG9jYWxfcGFja3MsIG1pbik7CisJd2hpbGUgKHBsKSB7CisJCXByaW50ZigiJXNcbiVzXG4iLAorCQkgICAgICAgc2hhMV9wYWNrX2luZGV4X25hbWUocGwtPnBhY2stPnNoYTEpLAorCQkgICAgICAgcGwtPnBhY2stPnBhY2tfbmFtZSk7CisJCXBsID0gcGwtPm5leHQ7CisJfQorCWlmICh2ZXJib3NlKQorCQlmcHJpbnRmKHN0ZGVyciwgIiVsdU1CIG9mIHJlZHVuZGFudCBwYWNrcyBpbiB0b3RhbC5cbiIsCisJCQkodW5zaWduZWQgbG9uZylwYWNrX3NldF9ieXRlY291bnQocmVkKS8oMTAyNCoxMDI0KSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcGFjay1yZWZzLmMgYi9idWlsdGluL3BhY2stcmVmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjlhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3BhY2stcmVmcy5jCkBAIC0wLDAgKzEsMjEgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIGNoYXIgY29uc3QgKiBjb25zdCBwYWNrX3JlZnNfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfcGFja19yZWZzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IFBBQ0tfUkVGU19QUlVORTsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKKwkJT1BUX0JJVCgwLCAiYWxsIiwgICAmZmxhZ3MsIE5fKCJwYWNrIGV2ZXJ5dGhpbmciKSwgUEFDS19SRUZTX0FMTCksCisJCU9QVF9CSVQoMCwgInBydW5lIiwgJmZsYWdzLCBOXygicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiKSwgUEFDS19SRUZTX1BSVU5FKSwKKwkJT1BUX0VORCgpLAorCX07CisJaWYgKHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRzLCBwYWNrX3JlZnNfdXNhZ2UsIDApKQorCQl1c2FnZV93aXRoX29wdGlvbnMocGFja19yZWZzX3VzYWdlLCBvcHRzKTsKKwlyZXR1cm4gcGFja19yZWZzKGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcGF0Y2gtaWQuYyBiL2J1aWx0aW4vcGF0Y2gtaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjZjZTVhCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9wYXRjaC1pZC5jCkBAIC0wLDAgKzEsMjAxIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorCitzdGF0aWMgdm9pZCBmbHVzaF9jdXJyZW50X2lkKGludCBwYXRjaGxlbiwgc3RydWN0IG9iamVjdF9pZCAqaWQsIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdCkKK3sKKwljaGFyIG5hbWVbNTBdOworCisJaWYgKCFwYXRjaGxlbikKKwkJcmV0dXJuOworCisJbWVtY3B5KG5hbWUsIG9pZF90b19oZXgoaWQpLCBHSVRfU0hBMV9IRVhTWiArIDEpOworCXByaW50ZigiJXMgJXNcbiIsIG9pZF90b19oZXgocmVzdWx0KSwgbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX3NwYWNlKGNoYXIgKmxpbmUpCit7CisJY2hhciAqc3JjID0gbGluZTsKKwljaGFyICpkc3QgPSBsaW5lOworCXVuc2lnbmVkIGNoYXIgYzsKKworCXdoaWxlICgoYyA9ICpzcmMrKykgIT0gJ1wwJykgeworCQlpZiAoIWlzc3BhY2UoYykpCisJCQkqZHN0KysgPSBjOworCX0KKwlyZXR1cm4gZHN0IC0gbGluZTsKK30KKworc3RhdGljIGludCBzY2FuX2h1bmtfaGVhZGVyKGNvbnN0IGNoYXIgKnAsIGludCAqcF9iZWZvcmUsIGludCAqcF9hZnRlcikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBkaWdpdHNbXSA9ICIwMTIzNDU2Nzg5IjsKKwljb25zdCBjaGFyICpxLCAqcjsKKwlpbnQgbjsKKworCXEgPSBwICsgNDsKKwluID0gc3Ryc3BuKHEsIGRpZ2l0cyk7CisJaWYgKHFbbl0gPT0gJywnKSB7CisJCXEgKz0gbiArIDE7CisJCW4gPSBzdHJzcG4ocSwgZGlnaXRzKTsKKwl9CisJaWYgKG4gPT0gMCB8fCBxW25dICE9ICcgJyB8fCBxW24rMV0gIT0gJysnKQorCQlyZXR1cm4gMDsKKworCXIgPSBxICsgbiArIDI7CisJbiA9IHN0cnNwbihyLCBkaWdpdHMpOworCWlmIChyW25dID09ICcsJykgeworCQlyICs9IG4gKyAxOworCQluID0gc3Ryc3BuKHIsIGRpZ2l0cyk7CisJfQorCWlmIChuID09IDApCisJCXJldHVybiAwOworCisJKnBfYmVmb3JlID0gYXRvaShxKTsKKwkqcF9hZnRlciA9IGF0b2kocik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX29uZV9odW5rKHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdCwgZ2l0X1NIQV9DVFggKmN0eCkKK3sKKwl1bnNpZ25lZCBjaGFyIGhhc2hbR0lUX1NIQTFfUkFXU1pdOworCXVuc2lnbmVkIHNob3J0IGNhcnJ5ID0gMDsKKwlpbnQgaTsKKworCWdpdF9TSEExX0ZpbmFsKGhhc2gsIGN0eCk7CisJZ2l0X1NIQTFfSW5pdChjdHgpOworCS8qIDIwLWJ5dGUgc3VtLCB3aXRoIGNhcnJ5ICovCisJZm9yIChpID0gMDsgaSA8IEdJVF9TSEExX1JBV1NaOyArK2kpIHsKKwkJY2FycnkgKz0gcmVzdWx0LT5oYXNoW2ldICsgaGFzaFtpXTsKKwkJcmVzdWx0LT5oYXNoW2ldID0gY2Fycnk7CisJCWNhcnJ5ID4+PSA4OworCX0KK30KKworc3RhdGljIGludCBnZXRfb25lX3BhdGNoaWQoc3RydWN0IG9iamVjdF9pZCAqbmV4dF9vaWQsIHN0cnVjdCBvYmplY3RfaWQgKnJlc3VsdCwKKwkJCSAgIHN0cnVjdCBzdHJidWYgKmxpbmVfYnVmLCBpbnQgc3RhYmxlKQoreworCWludCBwYXRjaGxlbiA9IDAsIGZvdW5kX25leHQgPSAwOworCWludCBiZWZvcmUgPSAtMSwgYWZ0ZXIgPSAtMTsKKwlnaXRfU0hBX0NUWCBjdHg7CisKKwlnaXRfU0hBMV9Jbml0KCZjdHgpOworCW9pZGNscihyZXN1bHQpOworCisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUobGluZV9idWYsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJY2hhciAqbGluZSA9IGxpbmVfYnVmLT5idWY7CisJCWNoYXIgKnAgPSBsaW5lOworCQlpbnQgbGVuOworCisJCWlmICghbWVtY21wKGxpbmUsICJkaWZmLXRyZWUgIiwgMTApKQorCQkJcCArPSAxMDsKKwkJZWxzZSBpZiAoIW1lbWNtcChsaW5lLCAiY29tbWl0ICIsIDcpKQorCQkJcCArPSA3OworCQllbHNlIGlmICghbWVtY21wKGxpbmUsICJGcm9tICIsIDUpKQorCQkJcCArPSA1OworCQllbHNlIGlmICghbWVtY21wKGxpbmUsICJcXCAiLCAyKSAmJiAxMiA8IHN0cmxlbihsaW5lKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZ2V0X29pZF9oZXgocCwgbmV4dF9vaWQpKSB7CisJCQlmb3VuZF9uZXh0ID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogSWdub3JlIGNvbW1pdCBjb21tZW50cyAqLworCQlpZiAoIXBhdGNobGVuICYmIG1lbWNtcChsaW5lLCAiZGlmZiAiLCA1KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFBhcnNpbmcgZGlmZiBoZWFkZXI/ICAqLworCQlpZiAoYmVmb3JlID09IC0xKSB7CisJCQlpZiAoIW1lbWNtcChsaW5lLCAiaW5kZXggIiwgNikpCisJCQkJY29udGludWU7CisJCQllbHNlIGlmICghbWVtY21wKGxpbmUsICItLS0gIiwgNCkpCisJCQkJYmVmb3JlID0gYWZ0ZXIgPSAxOworCQkJZWxzZSBpZiAoIWlzYWxwaGEobGluZVswXSkpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiBMb29raW5nIGZvciBhIHZhbGlkIGh1bmsgaGVhZGVyPyAgKi8KKwkJaWYgKGJlZm9yZSA9PSAwICYmIGFmdGVyID09IDApIHsKKwkJCWlmICghbWVtY21wKGxpbmUsICJAQCAtIiwgNCkpIHsKKwkJCQkvKiBQYXJzZSBuZXh0IGh1bmssIGJ1dCBpZ25vcmUgbGluZSBudW1iZXJzLiAgKi8KKwkJCQlzY2FuX2h1bmtfaGVhZGVyKGxpbmUsICZiZWZvcmUsICZhZnRlcik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qIFNwbGl0IGF0IHRoZSBlbmQgb2YgdGhlIHBhdGNoLiAgKi8KKwkJCWlmIChtZW1jbXAobGluZSwgImRpZmYgIiwgNSkpCisJCQkJYnJlYWs7CisKKwkJCS8qIEVsc2Ugd2UncmUgcGFyc2luZyBhbm90aGVyIGhlYWRlci4gICovCisJCQlpZiAoc3RhYmxlKQorCQkJCWZsdXNoX29uZV9odW5rKHJlc3VsdCwgJmN0eCk7CisJCQliZWZvcmUgPSBhZnRlciA9IC0xOworCQl9CisKKwkJLyogSWYgd2UgZ2V0IGhlcmUsIHdlJ3JlIGluc2lkZSBhIGh1bmsuICAqLworCQlpZiAobGluZVswXSA9PSAnLScgfHwgbGluZVswXSA9PSAnICcpCisJCQliZWZvcmUtLTsKKwkJaWYgKGxpbmVbMF0gPT0gJysnIHx8IGxpbmVbMF0gPT0gJyAnKQorCQkJYWZ0ZXItLTsKKworCQkvKiBDb21wdXRlIHRoZSBzaGEgd2l0aG91dCB3aGl0ZXNwYWNlICovCisJCWxlbiA9IHJlbW92ZV9zcGFjZShsaW5lKTsKKwkJcGF0Y2hsZW4gKz0gbGVuOworCQlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgbGluZSwgbGVuKTsKKwl9CisKKwlpZiAoIWZvdW5kX25leHQpCisJCW9pZGNscihuZXh0X29pZCk7CisKKwlmbHVzaF9vbmVfaHVuayhyZXN1bHQsICZjdHgpOworCisJcmV0dXJuIHBhdGNobGVuOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmF0ZV9pZF9saXN0KGludCBzdGFibGUpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQsIG4sIHJlc3VsdDsKKwlpbnQgcGF0Y2hsZW47CisJc3RydWN0IHN0cmJ1ZiBsaW5lX2J1ZiA9IFNUUkJVRl9JTklUOworCisJb2lkY2xyKCZvaWQpOworCXdoaWxlICghZmVvZihzdGRpbikpIHsKKwkJcGF0Y2hsZW4gPSBnZXRfb25lX3BhdGNoaWQoJm4sICZyZXN1bHQsICZsaW5lX2J1Ziwgc3RhYmxlKTsKKwkJZmx1c2hfY3VycmVudF9pZChwYXRjaGxlbiwgJm9pZCwgJnJlc3VsdCk7CisJCW9pZGNweSgmb2lkLCAmbik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lX2J1Zik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIHBhdGNoX2lkX3VzYWdlW10gPSAiZ2l0IHBhdGNoLWlkIFstLXN0YWJsZSB8IC0tdW5zdGFibGVdIjsKKworc3RhdGljIGludCBnaXRfcGF0Y2hfaWRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWludCAqc3RhYmxlID0gY2I7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJwYXRjaGlkLnN0YWJsZSIpKSB7CisJCSpzdGFibGUgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitpbnQgY21kX3BhdGNoX2lkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBzdGFibGUgPSAtMTsKKworCWdpdF9jb25maWcoZ2l0X3BhdGNoX2lkX2NvbmZpZywgJnN0YWJsZSk7CisKKwkvKiBJZiBub3RoaW5nIGlzIHNldCwgZGVmYXVsdCB0byB1bnN0YWJsZS4gKi8KKwlpZiAoc3RhYmxlIDwgMCkKKwkJc3RhYmxlID0gMDsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLS1zdGFibGUiKSkKKwkJc3RhYmxlID0gMTsKKwllbHNlIGlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLS11bnN0YWJsZSIpKQorCQlzdGFibGUgPSAwOworCWVsc2UgaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2UocGF0Y2hfaWRfdXNhZ2UpOworCisJZ2VuZXJhdGVfaWRfbGlzdChzdGFibGUpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9wcnVuZS1wYWNrZWQuYyBiL2J1aWx0aW4vcHJ1bmUtcGFja2VkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmOTAwZQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcHJ1bmUtcGFja2VkLmMKQEAgLTAsMCArMSw2NyBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBydW5lX3BhY2tlZF91c2FnZVtdID0geworCU5fKCJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IHByb2dyZXNzICpwcm9ncmVzczsKKworc3RhdGljIGludCBwcnVuZV9zdWJkaXIoaW50IG5yLCBjb25zdCBjaGFyICpwYXRoLCB2b2lkICpkYXRhKQoreworCWludCAqb3B0cyA9IGRhdGE7CisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgbnIgKyAxKTsKKwlpZiAoISgqb3B0cyAmIFBSVU5FX1BBQ0tFRF9EUllfUlVOKSkKKwkJcm1kaXIocGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmVfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgdm9pZCAqZGF0YSkKK3sKKwlpbnQgKm9wdHMgPSBkYXRhOworCisJaWYgKCFoYXNfc2hhMV9wYWNrKHNoYTEpKQorCQlyZXR1cm4gMDsKKworCWlmICgqb3B0cyAmIFBSVU5FX1BBQ0tFRF9EUllfUlVOKQorCQlwcmludGYoInJtIC1mICVzXG4iLCBwYXRoKTsKKwllbHNlCisJCXVubGlua19vcl93YXJuKHBhdGgpOworCXJldHVybiAwOworfQorCit2b2lkIHBydW5lX3BhY2tlZF9vYmplY3RzKGludCBvcHRzKQoreworCWlmIChvcHRzICYgUFJVTkVfUEFDS0VEX1ZFUkJPU0UpCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3NfZGVsYXkoXygiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiKSwKKwkJCTI1NiwgOTUsIDIpOworCisJZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXIoZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwKKwkJCQkgICAgICBwcnVuZV9vYmplY3QsIE5VTEwsIHBydW5lX3N1YmRpciwgJm9wdHMpOworCisJLyogRW5zdXJlIHdlIHNob3cgMTAwJSBiZWZvcmUgZmluaXNoaW5nIHByb2dyZXNzICovCisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgMjU2KTsKKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7Cit9CisKK2ludCBjbWRfcHJ1bmVfcGFja2VkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBvcHRzID0gaXNhdHR5KDIpID8gUFJVTkVfUEFDS0VEX1ZFUkJPU0UgOiAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gcHJ1bmVfcGFja2VkX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgnbicsICJkcnktcnVuIiwgJm9wdHMsIE5fKCJkcnkgcnVuIiksCisJCQlQUlVORV9QQUNLRURfRFJZX1JVTiksCisJCU9QVF9ORUdCSVQoJ3EnLCAicXVpZXQiLCAmb3B0cywgTl8oImJlIHF1aWV0IiksCisJCQkgICBQUlVORV9QQUNLRURfVkVSQk9TRSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIHBydW5lX3BhY2tlZF9vcHRpb25zLAorCQkJICAgICBwcnVuZV9wYWNrZWRfdXNhZ2UsIDApOworCisJcHJ1bmVfcGFja2VkX29iamVjdHMob3B0cyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3BydW5lLmMgYi9idWlsdGluL3BydW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0ZjA1MgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcHJ1bmUuYwpAQCAtMCwwICsxLDE1NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJlYWNoYWJsZS5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBydW5lX3VzYWdlW10gPSB7CisJTl8oImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIpLAorCU5VTEwKK307CitzdGF0aWMgaW50IHNob3dfb25seTsKK3N0YXRpYyBpbnQgdmVyYm9zZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4cGlyZTsKK3N0YXRpYyBpbnQgc2hvd19wcm9ncmVzcyA9IC0xOworCitzdGF0aWMgaW50IHBydW5lX3RtcF9maWxlKGNvbnN0IGNoYXIgKmZ1bGxwYXRoKQoreworCXN0cnVjdCBzdGF0IHN0OworCWlmIChsc3RhdChmdWxscGF0aCwgJnN0KSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgc3RhdCAnJXMnIiwgZnVsbHBhdGgpOworCWlmIChzdC5zdF9tdGltZSA+IGV4cGlyZSkKKwkJcmV0dXJuIDA7CisJaWYgKHNob3dfb25seSB8fCB2ZXJib3NlKQorCQlwcmludGYoIlJlbW92aW5nIHN0YWxlIHRlbXBvcmFyeSBmaWxlICVzXG4iLCBmdWxscGF0aCk7CisJaWYgKCFzaG93X29ubHkpCisJCXVubGlua19vcl93YXJuKGZ1bGxwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcnVuZV9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqZnVsbHBhdGgsCisJCQl2b2lkICpkYXRhKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJLyoKKwkgKiBEbyB3ZSBrbm93IGFib3V0IHRoaXMgb2JqZWN0PworCSAqIEl0IG11c3QgaGF2ZSBiZWVuIHJlYWNoYWJsZQorCSAqLworCWlmIChsb29rdXBfb2JqZWN0KHNoYTEpKQorCQlyZXR1cm4gMDsKKworCWlmIChsc3RhdChmdWxscGF0aCwgJnN0KSkgeworCQkvKiByZXBvcnQgZXJyb3JzLCBidXQgZG8gbm90IHN0b3AgcHJ1bmluZyAqLworCQllcnJvcigiQ291bGQgbm90IHN0YXQgJyVzJyIsIGZ1bGxwYXRoKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChzdC5zdF9tdGltZSA+IGV4cGlyZSkKKwkJcmV0dXJuIDA7CisJaWYgKHNob3dfb25seSB8fCB2ZXJib3NlKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJCXByaW50ZigiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpLAorCQkgICAgICAgKHR5cGUgPiAwKSA/IHR5cGVuYW1lKHR5cGUpIDogInVua25vd24iKTsKKwl9CisJaWYgKCFzaG93X29ubHkpCisJCXVubGlua19vcl93YXJuKGZ1bGxwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcnVuZV9jcnVmdChjb25zdCBjaGFyICpiYXNlbmFtZSwgY29uc3QgY2hhciAqcGF0aCwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoc3RhcnRzX3dpdGgoYmFzZW5hbWUsICJ0bXBfb2JqXyIpKQorCQlwcnVuZV90bXBfZmlsZShwYXRoKTsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCAiYmFkIHNoYTEgZmlsZTogJXNcbiIsIHBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBydW5lX3N1YmRpcihpbnQgbnIsIGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmRhdGEpCit7CisJaWYgKCFzaG93X29ubHkpCisJCXJtZGlyKHBhdGgpOworCXJldHVybiAwOworfQorCisvKgorICogV3JpdGUgZXJyb3JzIChwYXJ0aWN1bGFybHkgb3V0IG9mIHNwYWNlKSBjYW4gcmVzdWx0IGluCisgKiBmYWlsZWQgdGVtcG9yYXJ5IHBhY2tzIChhbmQgbW9yZSByYXJlbHkgaW5kZXhlcyBhbmQgb3RoZXIKKyAqIGZpbGVzIGJlZ2lubmluZyB3aXRoICJ0bXBfIikgYWNjdW11bGF0aW5nIGluIHRoZSBvYmplY3QKKyAqIGFuZCB0aGUgcGFjayBkaXJlY3Rvcmllcy4KKyAqLworc3RhdGljIHZvaWQgcmVtb3ZlX3RlbXBvcmFyeV9maWxlcyhjb25zdCBjaGFyICpwYXRoKQoreworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmRlOworCisJZGlyID0gb3BlbmRpcihwYXRoKTsKKwlpZiAoIWRpcikgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBvcGVuIGRpcmVjdG9yeSAlc1xuIiwgcGF0aCk7CisJCXJldHVybjsKKwl9CisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkKKwkJaWYgKHN0YXJ0c193aXRoKGRlLT5kX25hbWUsICJ0bXBfIikpCisJCQlwcnVuZV90bXBfZmlsZShta3BhdGgoIiVzLyVzIiwgcGF0aCwgZGUtPmRfbmFtZSkpOworCWNsb3NlZGlyKGRpcik7Cit9CisKK2ludCBjbWRfcHJ1bmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fRFJZX1JVTigmc2hvd19vbmx5LCBOXygiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IikpLAorCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsIE5fKCJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiKSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZzaG93X3Byb2dyZXNzLCBOXygic2hvdyBwcm9ncmVzcyIpKSwKKwkJT1BUX0VYUElSWV9EQVRFKDAsICJleHBpcmUiLCAmZXhwaXJlLAorCQkJCU5fKCJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwljaGFyICpzOworCisJZXhwaXJlID0gVUxPTkdfTUFYOworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisJY2hlY2tfcmVwbGFjZV9yZWZzID0gMDsKKwlyZWZfcGFyYW5vaWEgPSAxOworCWluaXRfcmV2aXNpb25zKCZyZXZzLCBwcmVmaXgpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBwcnVuZV91c2FnZSwgMCk7CisKKwlpZiAocmVwb3NpdG9yeV9mb3JtYXRfcHJlY2lvdXNfb2JqZWN0cykKKwkJZGllKF8oImNhbm5vdCBwcnVuZSBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIpKTsKKworCXdoaWxlIChhcmdjLS0pIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY29uc3QgY2hhciAqbmFtZSA9ICphcmd2Kys7CisKKwkJaWYgKCFnZXRfc2hhMShuYW1lLCBzaGExKSkgeworCQkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcGFyc2Vfb2JqZWN0X29yX2RpZShzaGExLCBuYW1lKTsKKwkJCWFkZF9wZW5kaW5nX29iamVjdCgmcmV2cywgb2JqZWN0LCAiIik7CisJCX0KKwkJZWxzZQorCQkJZGllKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiwgbmFtZSk7CisJfQorCisJaWYgKHNob3dfcHJvZ3Jlc3MgPT0gLTEpCisJCXNob3dfcHJvZ3Jlc3MgPSBpc2F0dHkoMik7CisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3NfZGVsYXkoXygiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IiksIDAsIDAsIDIpOworCisJbWFya19yZWFjaGFibGVfb2JqZWN0cygmcmV2cywgMSwgZXhwaXJlLCBwcm9ncmVzcyk7CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCWZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyKGdldF9vYmplY3RfZGlyZWN0b3J5KCksIHBydW5lX29iamVjdCwKKwkJCQkgICAgICBwcnVuZV9jcnVmdCwgcHJ1bmVfc3ViZGlyLCBOVUxMKTsKKworCXBydW5lX3BhY2tlZF9vYmplY3RzKHNob3dfb25seSA/IFBSVU5FX1BBQ0tFRF9EUllfUlVOIDogMCk7CisJcmVtb3ZlX3RlbXBvcmFyeV9maWxlcyhnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwlzID0gbWtwYXRoZHVwKCIlcy9wYWNrIiwgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSk7CisJcmVtb3ZlX3RlbXBvcmFyeV9maWxlcyhzKTsKKwlmcmVlKHMpOworCisJaWYgKGlzX3JlcG9zaXRvcnlfc2hhbGxvdygpKQorCQlwcnVuZV9zaGFsbG93KHNob3dfb25seSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcHVsbC5jIGIvYnVpbHRpbi9wdWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYzZmQzZgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcHVsbC5jCkBAIC0wLDAgKzEsODg3IEBACisvKgorICogQnVpbHRpbiAiZ2l0IHB1bGwiCisgKgorICogQmFzZWQgb24gZ2l0LXB1bGwuc2ggYnkgSnVuaW8gQyBIYW1hbm8KKyAqCisgKiBGZXRjaCBvbmUgb3IgbW9yZSByZW1vdGUgcmVmcyBhbmQgbWVyZ2UgaXQvdGhlbSBpbnRvIHRoZSBjdXJyZW50IEhFQUQuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJ0ZW1wZmlsZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisKK2VudW0gcmViYXNlX3R5cGUgeworCVJFQkFTRV9JTlZBTElEID0gLTEsCisJUkVCQVNFX0ZBTFNFID0gMCwKKwlSRUJBU0VfVFJVRSwKKwlSRUJBU0VfUFJFU0VSVkUKK307CisKKy8qKgorICogUGFyc2VzIHRoZSB2YWx1ZSBvZiAtLXJlYmFzZS4gSWYgdmFsdWUgaXMgYSBmYWxzZSB2YWx1ZSwgcmV0dXJucworICogUkVCQVNFX0ZBTFNFLiBJZiB2YWx1ZSBpcyBhIHRydWUgdmFsdWUsIHJldHVybnMgUkVCQVNFX1RSVUUuIElmIHZhbHVlIGlzCisgKiAicHJlc2VydmUiLCByZXR1cm5zIFJFQkFTRV9QUkVTRVJWRS4gSWYgdmFsdWUgaXMgYSBpbnZhbGlkIHZhbHVlLCBkaWVzIHdpdGgKKyAqIGEgZmF0YWwgZXJyb3IgaWYgZmF0YWwgaXMgdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybnMgUkVCQVNFX0lOVkFMSUQuCisgKi8KK3N0YXRpYyBlbnVtIHJlYmFzZV90eXBlIHBhcnNlX2NvbmZpZ19yZWJhc2UoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJaW50IGZhdGFsKQoreworCWludCB2ID0gZ2l0X2NvbmZpZ19tYXliZV9ib29sKCJwdWxsLnJlYmFzZSIsIHZhbHVlKTsKKworCWlmICghdikKKwkJcmV0dXJuIFJFQkFTRV9GQUxTRTsKKwllbHNlIGlmICh2ID4gMCkKKwkJcmV0dXJuIFJFQkFTRV9UUlVFOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJwcmVzZXJ2ZSIpKQorCQlyZXR1cm4gUkVCQVNFX1BSRVNFUlZFOworCisJaWYgKGZhdGFsKQorCQlkaWUoXygiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIiksIGtleSwgdmFsdWUpOworCWVsc2UKKwkJZXJyb3IoXygiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIiksIGtleSwgdmFsdWUpOworCisJcmV0dXJuIFJFQkFTRV9JTlZBTElEOworfQorCisvKioKKyAqIENhbGxiYWNrIGZvciAtLXJlYmFzZSwgd2hpY2ggcGFyc2VzIGFyZyB3aXRoIHBhcnNlX2NvbmZpZ19yZWJhc2UoKS4KKyAqLworc3RhdGljIGludCBwYXJzZV9vcHRfcmViYXNlKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJZW51bSByZWJhc2VfdHlwZSAqdmFsdWUgPSBvcHQtPnZhbHVlOworCisJaWYgKGFyZykKKwkJKnZhbHVlID0gcGFyc2VfY29uZmlnX3JlYmFzZSgiLS1yZWJhc2UiLCBhcmcsIDApOworCWVsc2UKKwkJKnZhbHVlID0gdW5zZXQgPyBSRUJBU0VfRkFMU0UgOiBSRUJBU0VfVFJVRTsKKwlyZXR1cm4gKnZhbHVlID09IFJFQkFTRV9JTlZBTElEID8gLTEgOiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHB1bGxfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHB1bGwgWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iKSwKKwlOVUxMCit9OworCisvKiBTaGFyZWQgb3B0aW9ucyAqLworc3RhdGljIGludCBvcHRfdmVyYm9zaXR5Oworc3RhdGljIGNoYXIgKm9wdF9wcm9ncmVzczsKKworLyogT3B0aW9ucyBwYXNzZWQgdG8gZ2l0LW1lcmdlIG9yIGdpdC1yZWJhc2UgKi8KK3N0YXRpYyBlbnVtIHJlYmFzZV90eXBlIG9wdF9yZWJhc2UgPSAtMTsKK3N0YXRpYyBjaGFyICpvcHRfZGlmZnN0YXQ7CitzdGF0aWMgY2hhciAqb3B0X2xvZzsKK3N0YXRpYyBjaGFyICpvcHRfc3F1YXNoOworc3RhdGljIGNoYXIgKm9wdF9jb21taXQ7CitzdGF0aWMgY2hhciAqb3B0X2VkaXQ7CitzdGF0aWMgY2hhciAqb3B0X2ZmOworc3RhdGljIGNoYXIgKm9wdF92ZXJpZnlfc2lnbmF0dXJlczsKK3N0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSBvcHRfc3RyYXRlZ2llcyA9IEFSR1ZfQVJSQVlfSU5JVDsKK3N0YXRpYyBzdHJ1Y3QgYXJndl9hcnJheSBvcHRfc3RyYXRlZ3lfb3B0cyA9IEFSR1ZfQVJSQVlfSU5JVDsKK3N0YXRpYyBjaGFyICpvcHRfZ3BnX3NpZ247CisKKy8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1mZXRjaCAqLworc3RhdGljIGNoYXIgKm9wdF9hbGw7CitzdGF0aWMgY2hhciAqb3B0X2FwcGVuZDsKK3N0YXRpYyBjaGFyICpvcHRfdXBsb2FkX3BhY2s7CitzdGF0aWMgaW50IG9wdF9mb3JjZTsKK3N0YXRpYyBjaGFyICpvcHRfdGFnczsKK3N0YXRpYyBjaGFyICpvcHRfcHJ1bmU7CitzdGF0aWMgY2hhciAqb3B0X3JlY3Vyc2Vfc3VibW9kdWxlczsKK3N0YXRpYyBpbnQgb3B0X2RyeV9ydW47CitzdGF0aWMgY2hhciAqb3B0X2tlZXA7CitzdGF0aWMgY2hhciAqb3B0X2RlcHRoOworc3RhdGljIGNoYXIgKm9wdF91bnNoYWxsb3c7CitzdGF0aWMgY2hhciAqb3B0X3VwZGF0ZV9zaGFsbG93Oworc3RhdGljIGNoYXIgKm9wdF9yZWZtYXA7CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIHB1bGxfb3B0aW9uc1tdID0geworCS8qIFNoYXJlZCBvcHRpb25zICovCisJT1BUX19WRVJCT1NJVFkoJm9wdF92ZXJib3NpdHkpLAorCU9QVF9QQVNTVEhSVSgwLCAicHJvZ3Jlc3MiLCAmb3B0X3Byb2dyZXNzLCBOVUxMLAorCQlOXygiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisKKwkvKiBPcHRpb25zIHBhc3NlZCB0byBnaXQtbWVyZ2Ugb3IgZ2l0LXJlYmFzZSAqLworCU9QVF9HUk9VUChOXygiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciKSksCisJeyBPUFRJT05fQ0FMTEJBQ0ssICdyJywgInJlYmFzZSIsICZvcHRfcmViYXNlLAorCSAgImZhbHNlfHRydWV8cHJlc2VydmUiLAorCSAgTl8oImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIpLAorCSAgUEFSU0VfT1BUX09QVEFSRywgcGFyc2Vfb3B0X3JlYmFzZSB9LAorCU9QVF9QQVNTVEhSVSgnbicsIE5VTEwsICZvcHRfZGlmZnN0YXQsIE5VTEwsCisJCU5fKCJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIiksCisJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRyksCisJT1BUX1BBU1NUSFJVKDAsICJzdGF0IiwgJm9wdF9kaWZmc3RhdCwgTlVMTCwKKwkJTl8oInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAic3VtbWFyeSIsICZvcHRfZGlmZnN0YXQsIE5VTEwsCisJCU5fKCIoc3lub255bSB0byAtLXN0YXQpIiksCisJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9ISURERU4pLAorCU9QVF9QQVNTVEhSVSgwLCAibG9nIiwgJm9wdF9sb2csIE5fKCJuIiksCisJCU5fKCJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiKSwKKwkJUEFSU0VfT1BUX09QVEFSRyksCisJT1BUX1BBU1NUSFJVKDAsICJzcXVhc2giLCAmb3B0X3NxdWFzaCwgTlVMTCwKKwkJTl8oImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKDAsICJjb21taXQiLCAmb3B0X2NvbW1pdCwgTlVMTCwKKwkJTl8oInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAiZWRpdCIsICZvcHRfZWRpdCwgTlVMTCwKKwkJTl8oImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAiZmYiLCAmb3B0X2ZmLCBOVUxMLAorCQlOXygiYWxsb3cgZmFzdC1mb3J3YXJkIiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKDAsICJmZi1vbmx5IiwgJm9wdF9mZiwgTlVMTCwKKwkJTl8oImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiKSwKKwkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHKSwKKwlPUFRfUEFTU1RIUlUoMCwgInZlcmlmeS1zaWduYXR1cmVzIiwgJm9wdF92ZXJpZnlfc2lnbmF0dXJlcywgTlVMTCwKKwkJTl8oInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVV9BUkdWKCdzJywgInN0cmF0ZWd5IiwgJm9wdF9zdHJhdGVnaWVzLCBOXygic3RyYXRlZ3kiKSwKKwkJTl8oIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIpLAorCQkwKSwKKwlPUFRfUEFTU1RIUlVfQVJHVignWCcsICJzdHJhdGVneS1vcHRpb24iLCAmb3B0X3N0cmF0ZWd5X29wdHMsCisJCU5fKCJvcHRpb249dmFsdWUiKSwKKwkJTl8oIm9wdGlvbiBmb3Igc2VsZWN0ZWQgbWVyZ2Ugc3RyYXRlZ3kiKSwKKwkJMCksCisJT1BUX1BBU1NUSFJVKCdTJywgImdwZy1zaWduIiwgJm9wdF9ncGdfc2lnbiwgTl8oImtleS1pZCIpLAorCQlOXygiR1BHIHNpZ24gY29tbWl0IiksCisJCVBBUlNFX09QVF9PUFRBUkcpLAorCisJLyogT3B0aW9ucyBwYXNzZWQgdG8gZ2l0LWZldGNoICovCisJT1BUX0dST1VQKE5fKCJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciKSksCisJT1BUX1BBU1NUSFJVKDAsICJhbGwiLCAmb3B0X2FsbCwgTlVMTCwKKwkJTl8oImZldGNoIGZyb20gYWxsIHJlbW90ZXMiKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfUEFTU1RIUlUoJ2EnLCAiYXBwZW5kIiwgJm9wdF9hcHBlbmQsIE5VTEwsCisJCU5fKCJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfUEFTU1RIUlUoMCwgInVwbG9hZC1wYWNrIiwgJm9wdF91cGxvYWRfcGFjaywgTl8oInBhdGgiKSwKKwkJTl8oInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIpLAorCQkwKSwKKwlPUFRfX0ZPUkNFKCZvcHRfZm9yY2UsIE5fKCJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoIikpLAorCU9QVF9QQVNTVEhSVSgndCcsICJ0YWdzIiwgJm9wdF90YWdzLCBOVUxMLAorCQlOXygiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgncCcsICJwcnVuZSIsICZvcHRfcHJ1bmUsIE5VTEwsCisJCU5fKCJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIpLAorCQlQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAicmVjdXJzZS1zdWJtb2R1bGVzIiwgJm9wdF9yZWN1cnNlX3N1Ym1vZHVsZXMsCisJCU5fKCJvbi1kZW1hbmQiKSwKKwkJTl8oImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiKSwKKwkJUEFSU0VfT1BUX09QVEFSRyksCisJT1BUX0JPT0woMCwgImRyeS1ydW4iLCAmb3B0X2RyeV9ydW4sCisJCU5fKCJkcnkgcnVuIikpLAorCU9QVF9QQVNTVEhSVSgnaycsICJrZWVwIiwgJm9wdF9rZWVwLCBOVUxMLAorCQlOXygia2VlcCBkb3dubG9hZGVkIHBhY2siKSwKKwkJUEFSU0VfT1BUX05PQVJHKSwKKwlPUFRfUEFTU1RIUlUoMCwgImRlcHRoIiwgJm9wdF9kZXB0aCwgTl8oImRlcHRoIiksCisJCU5fKCJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIiksCisJCTApLAorCU9QVF9QQVNTVEhSVSgwLCAidW5zaGFsbG93IiwgJm9wdF91bnNoYWxsb3csIE5VTEwsCisJCU5fKCJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIpLAorCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcpLAorCU9QVF9QQVNTVEhSVSgwLCAidXBkYXRlLXNoYWxsb3ciLCAmb3B0X3VwZGF0ZV9zaGFsbG93LCBOVUxMLAorCQlOXygiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IiksCisJCVBBUlNFX09QVF9OT0FSRyksCisJT1BUX1BBU1NUSFJVKDAsICJyZWZtYXAiLCAmb3B0X3JlZm1hcCwgTl8oInJlZm1hcCIpLAorCQlOXygic3BlY2lmeSBmZXRjaCByZWZtYXAiKSwKKwkJUEFSU0VfT1BUX05PTkVHKSwKKworCU9QVF9FTkQoKQorfTsKKworLyoqCisgKiBQdXNoZXMgIi1xIiBvciAiLXYiIHN3aXRjaGVzIGludG8gYXJyIHRvIG1hdGNoIHRoZSBvcHRfdmVyYm9zaXR5IGxldmVsLgorICovCitzdGF0aWMgdm9pZCBhcmd2X3B1c2hfdmVyYm9zaXR5KHN0cnVjdCBhcmd2X2FycmF5ICphcnIpCit7CisJaW50IHZlcmJvc2l0eTsKKworCWZvciAodmVyYm9zaXR5ID0gb3B0X3ZlcmJvc2l0eTsgdmVyYm9zaXR5ID4gMDsgdmVyYm9zaXR5LS0pCisJCWFyZ3ZfYXJyYXlfcHVzaChhcnIsICItdiIpOworCisJZm9yICh2ZXJib3NpdHkgPSBvcHRfdmVyYm9zaXR5OyB2ZXJib3NpdHkgPCAwOyB2ZXJib3NpdHkrKykKKwkJYXJndl9hcnJheV9wdXNoKGFyciwgIi1xIik7Cit9CisKKy8qKgorICogUHVzaGVzICItZiIgc3dpdGNoZXMgaW50byBhcnIgdG8gbWF0Y2ggdGhlIG9wdF9mb3JjZSBsZXZlbC4KKyAqLworc3RhdGljIHZvaWQgYXJndl9wdXNoX2ZvcmNlKHN0cnVjdCBhcmd2X2FycmF5ICphcnIpCit7CisJaW50IGZvcmNlID0gb3B0X2ZvcmNlOworCXdoaWxlIChmb3JjZS0tID4gMCkKKwkJYXJndl9hcnJheV9wdXNoKGFyciwgIi1mIik7Cit9CisKKy8qKgorICogU2V0cyB0aGUgR0lUX1JFRkxPR19BQ1RJT04gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGNvbmNhdGVuYXRpb24gb2YgYXJndgorICovCitzdGF0aWMgdm9pZCBzZXRfcmVmbG9nX21lc3NhZ2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpOworCXN0cnVjdCBzdHJidWYgbXNnID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmIChpKQorCQkJc3RyYnVmX2FkZGNoKCZtc2csICcgJyk7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZywgYXJndltpXSk7CisJfQorCisJc2V0ZW52KCJHSVRfUkVGTE9HX0FDVElPTiIsIG1zZy5idWYsIDApOworCisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7Cit9CisKKy8qKgorICogSWYgcHVsbC5mZiBpcyB1bnNldCwgcmV0dXJucyBOVUxMLiBJZiBwdWxsLmZmIGlzICJ0cnVlIiwgcmV0dXJucyAiLS1mZiIuIElmCisgKiBwdWxsLmZmIGlzICJmYWxzZSIsIHJldHVybnMgIi0tbm8tZmYiLiBJZiBwdWxsLmZmIGlzICJvbmx5IiwgcmV0dXJucworICogIi0tZmYtb25seSIuIE90aGVyd2lzZSwgaWYgcHVsbC5mZiBpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSwgZGllIHdpdGggYW4KKyAqIGVycm9yLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uZmlnX2dldF9mZih2b2lkKQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKGdpdF9jb25maWdfZ2V0X3ZhbHVlKCJwdWxsLmZmIiwgJnZhbHVlKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzd2l0Y2ggKGdpdF9jb25maWdfbWF5YmVfYm9vbCgicHVsbC5mZiIsIHZhbHVlKSkgeworCWNhc2UgMDoKKwkJcmV0dXJuICItLW5vLWZmIjsKKwljYXNlIDE6CisJCXJldHVybiAiLS1mZiI7CisJfQorCisJaWYgKCFzdHJjbXAodmFsdWUsICJvbmx5IikpCisJCXJldHVybiAiLS1mZi1vbmx5IjsKKworCWRpZShfKCJJbnZhbGlkIHZhbHVlIGZvciBwdWxsLmZmOiAlcyIpLCB2YWx1ZSk7Cit9CisKKy8qKgorICogUmV0dXJucyB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHZhbHVlIGZvciAtLXJlYmFzZS4gSXQgZmlyc3QgbG9va3MgZm9yIHRoZQorICogdmFsdWUgb2YgImJyYW5jaC4kY3Vycl9icmFuY2gucmViYXNlIiwgd2hlcmUgJGN1cnJfYnJhbmNoIGlzIHRoZSBjdXJyZW50CisgKiBicmFuY2gsIGFuZCBpZiBIRUFEIGlzIGRldGFjaGVkIG9yIHRoZSBjb25maWd1cmF0aW9uIGtleSBkb2VzIG5vdCBleGlzdCwKKyAqIGxvb2tzIGZvciB0aGUgdmFsdWUgb2YgInB1bGwucmViYXNlIi4gSWYgYm90aCBjb25maWd1cmF0aW9uIGtleXMgZG8gbm90CisgKiBleGlzdCwgcmV0dXJucyBSRUJBU0VfRkFMU0UuCisgKi8KK3N0YXRpYyBlbnVtIHJlYmFzZV90eXBlIGNvbmZpZ19nZXRfcmViYXNlKHZvaWQpCit7CisJc3RydWN0IGJyYW5jaCAqY3Vycl9icmFuY2ggPSBicmFuY2hfZ2V0KCJIRUFEIik7CisJY29uc3QgY2hhciAqdmFsdWU7CisKKwlpZiAoY3Vycl9icmFuY2gpIHsKKwkJY2hhciAqa2V5ID0geHN0cmZtdCgiYnJhbmNoLiVzLnJlYmFzZSIsIGN1cnJfYnJhbmNoLT5uYW1lKTsKKworCQlpZiAoIWdpdF9jb25maWdfZ2V0X3ZhbHVlKGtleSwgJnZhbHVlKSkgeworCQkJZW51bSByZWJhc2VfdHlwZSByZXQgPSBwYXJzZV9jb25maWdfcmViYXNlKGtleSwgdmFsdWUsIDEpOworCQkJZnJlZShrZXkpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWZyZWUoa2V5KTsKKwl9CisKKwlpZiAoIWdpdF9jb25maWdfZ2V0X3ZhbHVlKCJwdWxsLnJlYmFzZSIsICZ2YWx1ZSkpCisJCXJldHVybiBwYXJzZV9jb25maWdfcmViYXNlKCJwdWxsLnJlYmFzZSIsIHZhbHVlLCAxKTsKKworCXJldHVybiBSRUJBU0VfRkFMU0U7Cit9CisKKy8qKgorICogUmV0dXJucyAxIGlmIHRoZXJlIGFyZSB1bnN0YWdlZCBjaGFuZ2VzLCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBoYXNfdW5zdGFnZWRfY2hhbmdlcyhjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHJldl9pbmZvIHJldl9pbmZvOworCWludCByZXN1bHQ7CisKKwlpbml0X3JldmlzaW9ucygmcmV2X2luZm8sIHByZWZpeCk7CisJRElGRl9PUFRfU0VUKCZyZXZfaW5mby5kaWZmb3B0LCBJR05PUkVfU1VCTU9EVUxFUyk7CisJRElGRl9PUFRfU0VUKCZyZXZfaW5mby5kaWZmb3B0LCBRVUlDSyk7CisJZGlmZl9zZXR1cF9kb25lKCZyZXZfaW5mby5kaWZmb3B0KTsKKwlyZXN1bHQgPSBydW5fZGlmZl9maWxlcygmcmV2X2luZm8sIDApOworCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZyZXZfaW5mby5kaWZmb3B0LCByZXN1bHQpOworfQorCisvKioKKyAqIFJldHVybnMgMSBpZiB0aGVyZSBhcmUgdW5jb21taXR0ZWQgY2hhbmdlcywgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgaGFzX3VuY29tbWl0dGVkX2NoYW5nZXMoY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZfaW5mbzsKKwlpbnQgcmVzdWx0OworCisJaWYgKGlzX2NhY2hlX3VuYm9ybigpKQorCQlyZXR1cm4gMDsKKworCWluaXRfcmV2aXNpb25zKCZyZXZfaW5mbywgcHJlZml4KTsKKwlESUZGX09QVF9TRVQoJnJldl9pbmZvLmRpZmZvcHQsIElHTk9SRV9TVUJNT0RVTEVTKTsKKwlESUZGX09QVF9TRVQoJnJldl9pbmZvLmRpZmZvcHQsIFFVSUNLKTsKKwlhZGRfaGVhZF90b19wZW5kaW5nKCZyZXZfaW5mbyk7CisJZGlmZl9zZXR1cF9kb25lKCZyZXZfaW5mby5kaWZmb3B0KTsKKwlyZXN1bHQgPSBydW5fZGlmZl9pbmRleCgmcmV2X2luZm8sIDEpOworCXJldHVybiBkaWZmX3Jlc3VsdF9jb2RlKCZyZXZfaW5mby5kaWZmb3B0LCByZXN1bHQpOworfQorCisvKioKKyAqIElmIHRoZSB3b3JrIHRyZWUgaGFzIHVuc3RhZ2VkIG9yIHVuY29tbWl0dGVkIGNoYW5nZXMsIGRpZXMgd2l0aCB0aGUKKyAqIGFwcHJvcHJpYXRlIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIGRpZV9vbl91bmNsZWFuX3dvcmtfdHJlZShjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9ja19maWxlID0geGNhbGxvYygxLCBzaXplb2YoKmxvY2tfZmlsZSkpOworCWludCBkb19kaWUgPSAwOworCisJaG9sZF9sb2NrZWRfaW5kZXgobG9ja19maWxlLCAwKTsKKwlyZWZyZXNoX2NhY2hlKFJFRlJFU0hfUVVJRVQpOworCXVwZGF0ZV9pbmRleF9pZl9hYmxlKCZ0aGVfaW5kZXgsIGxvY2tfZmlsZSk7CisJcm9sbGJhY2tfbG9ja19maWxlKGxvY2tfZmlsZSk7CisKKwlpZiAoaGFzX3Vuc3RhZ2VkX2NoYW5nZXMocHJlZml4KSkgeworCQllcnJvcihfKCJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iKSk7CisJCWRvX2RpZSA9IDE7CisJfQorCisJaWYgKGhhc191bmNvbW1pdHRlZF9jaGFuZ2VzKHByZWZpeCkpIHsKKwkJaWYgKGRvX2RpZSkKKwkJCWVycm9yKF8oIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIpKTsKKwkJZWxzZQorCQkJZXJyb3IoXygiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iKSk7CisJCWRvX2RpZSA9IDE7CisJfQorCisJaWYgKGRvX2RpZSkKKwkJZXhpdCgxKTsKK30KKworLyoqCisgKiBBcHBlbmRzIG1lcmdlIGNhbmRpZGF0ZXMgZnJvbSBGRVRDSF9IRUFEIHRoYXQgYXJlIG5vdCBtYXJrZWQgbm90LWZvci1tZXJnZQorICogaW50byBtZXJnZV9oZWFkcy4KKyAqLworc3RhdGljIHZvaWQgZ2V0X21lcmdlX2hlYWRzKHN0cnVjdCBzaGExX2FycmF5ICptZXJnZV9oZWFkcykKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdpdF9wYXRoKCJGRVRDSF9IRUFEIik7CisJRklMRSAqZnA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGNoYXIgc2hhMVtHSVRfU0hBMV9SQVdTWl07CisKKwlpZiAoIShmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSkKKwkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciKSwgZmlsZW5hbWUpOworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmc2IsIGZwLCAnXG4nKSAhPSBFT0YpIHsKKwkJaWYgKGdldF9zaGExX2hleChzYi5idWYsIHNoYTEpKQorCQkJY29udGludWU7ICAvKiBpbnZhbGlkIGxpbmU6IGRvZXMgbm90IHN0YXJ0IHdpdGggU0hBMSAqLworCQlpZiAoc3RhcnRzX3dpdGgoc2IuYnVmICsgR0lUX1NIQTFfSEVYU1osICJcdG5vdC1mb3ItbWVyZ2VcdCIpKQorCQkJY29udGludWU7ICAvKiByZWYgaXMgbm90LWZvci1tZXJnZSAqLworCQlzaGExX2FycmF5X2FwcGVuZChtZXJnZV9oZWFkcywgc2hhMSk7CisJfQorCWZjbG9zZShmcCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworLyoqCisgKiBVc2VkIGJ5IGRpZV9ub19tZXJnZV9jYW5kaWRhdGVzKCkgYXMgYSBmb3JfZWFjaF9yZW1vdGUoKSBjYWxsYmFjayB0bworICogcmV0cmlldmUgdGhlIG5hbWUgb2YgdGhlIHJlbW90ZSBpZiB0aGUgcmVwb3NpdG9yeSBvbmx5IGhhcyBvbmUgcmVtb3RlLgorICovCitzdGF0aWMgaW50IGdldF9vbmx5X3JlbW90ZShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKmNiX2RhdGEpCit7CisJY29uc3QgY2hhciAqKnJlbW90ZV9uYW1lID0gY2JfZGF0YTsKKworCWlmICgqcmVtb3RlX25hbWUpCisJCXJldHVybiAtMTsKKworCSpyZW1vdGVfbmFtZSA9IHJlbW90ZS0+bmFtZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBEaWVzIHdpdGggdGhlIGFwcHJvcHJpYXRlIHJlYXNvbiBmb3Igd2h5IHRoZXJlIGFyZSBubyBtZXJnZSBjYW5kaWRhdGVzOgorICoKKyAqIDEuIFdlIGZldGNoZWQgZnJvbSBhIHNwZWNpZmljIHJlbW90ZSwgYW5kIGEgcmVmc3BlYyB3YXMgZ2l2ZW4sIGJ1dCBpdCBlbmRlZAorICogICAgdXAgbm90IGZldGNoaW5nIGFueXRoaW5nLiBUaGlzIGlzIHVzdWFsbHkgYmVjYXVzZSB0aGUgdXNlciBwcm92aWRlZCBhCisgKiAgICB3aWxkY2FyZCByZWZzcGVjIHdoaWNoIGhhZCBubyBtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLgorICoKKyAqIDIuIFdlIGZldGNoZWQgZnJvbSBhIG5vbi1kZWZhdWx0IHJlbW90ZSwgYnV0IGRpZG4ndCBzcGVjaWZ5IGEgYnJhbmNoIHRvCisgKiAgICBtZXJnZS4gV2UgY2FuJ3QgdXNlIHRoZSBjb25maWd1cmVkIG9uZSBiZWNhdXNlIGl0IGFwcGxpZXMgdG8gdGhlIGRlZmF1bHQKKyAqICAgIHJlbW90ZSwgdGh1cyB0aGUgdXNlciBtdXN0IHNwZWNpZnkgdGhlIGJyYW5jaGVzIHRvIG1lcmdlLgorICoKKyAqIDMuIFdlIGZldGNoZWQgZnJvbSB0aGUgYnJhbmNoJ3Mgb3IgcmVwbydzIGRlZmF1bHQgcmVtb3RlLCBidXQ6CisgKgorICogICAgYS4gV2UgYXJlIG5vdCBvbiBhIGJyYW5jaCwgc28gdGhlcmUgd2lsbCBuZXZlciBiZSBhIGNvbmZpZ3VyZWQgYnJhbmNoIHRvCisgKiAgICAgICBtZXJnZSB3aXRoLgorICoKKyAqICAgIGIuIFdlIGFyZSBvbiBhIGJyYW5jaCwgYnV0IHRoZXJlIGlzIG5vIGNvbmZpZ3VyZWQgYnJhbmNoIHRvIG1lcmdlIHdpdGguCisgKgorICogNC4gV2UgZmV0Y2hlZCBmcm9tIHRoZSBicmFuY2gncyBvciByZXBvJ3MgZGVmYXVsdCByZW1vdGUsIGJ1dCB0aGUgY29uZmlndXJlZAorICogICAgYnJhbmNoIHRvIG1lcmdlIGRpZG4ndCBnZXQgZmV0Y2hlZC4gKEVpdGhlciBpdCBkb2Vzbid0IGV4aXN0LCBvciB3YXNuJ3QKKyAqICAgIHBhcnQgb2YgdGhlIGNvbmZpZ3VyZWQgZmV0Y2ggcmVmc3BlYy4pCisgKi8KK3N0YXRpYyB2b2lkIE5PUkVUVVJOIGRpZV9ub19tZXJnZV9jYW5kaWRhdGVzKGNvbnN0IGNoYXIgKnJlcG8sIGNvbnN0IGNoYXIgKipyZWZzcGVjcykKK3sKKwlzdHJ1Y3QgYnJhbmNoICpjdXJyX2JyYW5jaCA9IGJyYW5jaF9nZXQoIkhFQUQiKTsKKwljb25zdCBjaGFyICpyZW1vdGUgPSBjdXJyX2JyYW5jaCA/IGN1cnJfYnJhbmNoLT5yZW1vdGVfbmFtZSA6IE5VTEw7CisKKwlpZiAoKnJlZnNwZWNzKSB7CisJCWlmIChvcHRfcmViYXNlKQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIikpOworCQllbHNlCisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIpKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKwkJCQkJIm1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuIikpOworCX0gZWxzZSBpZiAocmVwbyAmJiBjdXJyX2JyYW5jaCAmJiAoIXJlbW90ZSB8fCBzdHJjbXAocmVwbywgcmVtb3RlKSkpIHsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIllvdSBhc2tlZCB0byBwdWxsIGZyb20gdGhlIHJlbW90ZSAnJXMnLCBidXQgZGlkIG5vdCBzcGVjaWZ5XG4iCisJCQkiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGVcbiIKKwkJCSJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIpLAorCQkJcmVwbyk7CisJfSBlbHNlIGlmICghY3Vycl9icmFuY2gpIHsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iKSk7CisJCWlmIChvcHRfcmViYXNlKQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iKSk7CisJCWVsc2UKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iKSk7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIikpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCWZwcmludGZfbG4oc3RkZXJyLCAiICAgIGdpdCBwdWxsIDxyZW1vdGU+IDxicmFuY2g+Iik7CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl9IGVsc2UgaWYgKCFjdXJyX2JyYW5jaC0+bWVyZ2VfbnIpIHsKKwkJY29uc3QgY2hhciAqcmVtb3RlX25hbWUgPSBOVUxMOworCisJCWlmIChmb3JfZWFjaF9yZW1vdGUoZ2V0X29ubHlfcmVtb3RlLCAmcmVtb3RlX25hbWUpIHx8ICFyZW1vdGVfbmFtZSkKKwkJCXJlbW90ZV9uYW1lID0gIjxyZW1vdGU+IjsKKworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iKSk7CisJCWlmIChvcHRfcmViYXNlKQorCQkJZnByaW50Zl9sbihzdGRlcnIsIF8oIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iKSk7CisJCWVsc2UKKwkJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iKSk7CisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIikpOworCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCWZwcmludGZfbG4oc3RkZXJyLCAiICAgIGdpdCBwdWxsIDxyZW1vdGU+IDxicmFuY2g+Iik7CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorCQkJCSJcbiIKKwkJCQkiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMvPGJyYW5jaD4gJXNcbiIpLAorCQkJCXJlbW90ZV9uYW1lLCBjdXJyX2JyYW5jaC0+bmFtZSk7CisJfSBlbHNlCisJCWZwcmludGZfbG4oc3RkZXJyLCBfKCJZb3VyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRvIG1lcmdlIHdpdGggdGhlIHJlZiAnJXMnXG4iCisJCQkiZnJvbSB0aGUgcmVtb3RlLCBidXQgbm8gc3VjaCByZWYgd2FzIGZldGNoZWQuIiksCisJCQkqY3Vycl9icmFuY2gtPm1lcmdlX25hbWUpOworCWV4aXQoMSk7Cit9CisKKy8qKgorICogUGFyc2VzIGFyZ3YgaW50byBbPHJlcG8+IFs8cmVmc3BlY3M+Li4uXV0sIHJldHVybmluZyB0aGVpciB2YWx1ZXMgaW4gYHJlcG9gCisgKiBhcyBhIHN0cmluZyBhbmQgYHJlZnNwZWNzYCBhcyBhIG51bGwtdGVybWluYXRlZCBhcnJheSBvZiBzdHJpbmdzLiBJZiBgcmVwb2AKKyAqIGlzIG5vdCBwcm92aWRlZCBpbiBhcmd2LCBpdCBpcyBzZXQgdG8gTlVMTC4KKyAqLworc3RhdGljIHZvaWQgcGFyc2VfcmVwb19yZWZzcGVjcyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKipyZXBvLAorCQljb25zdCBjaGFyICoqKnJlZnNwZWNzKQoreworCWlmIChhcmdjID4gMCkgeworCQkqcmVwbyA9ICphcmd2Kys7CisJCWFyZ2MtLTsKKwl9IGVsc2UKKwkJKnJlcG8gPSBOVUxMOworCSpyZWZzcGVjcyA9IGFyZ3Y7Cit9CisKKy8qKgorICogUnVucyBnaXQtZmV0Y2gsIHJldHVybmluZyBpdHMgZXhpdCBzdGF0dXMuIGByZXBvYCBhbmQgYHJlZnNwZWNzYCBhcmUgdGhlCisgKiByZXBvc2l0b3J5IGFuZCByZWZzcGVjcyB0byBmZXRjaCwgb3IgTlVMTCBpZiB0aGV5IGFyZSBub3QgcHJvdmlkZWQuCisgKi8KK3N0YXRpYyBpbnQgcnVuX2ZldGNoKGNvbnN0IGNoYXIgKnJlcG8sIGNvbnN0IGNoYXIgKipyZWZzcGVjcykKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCWludCByZXQ7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAiZmV0Y2giLCAiLS11cGRhdGUtaGVhZC1vayIsIE5VTEwpOworCisJLyogU2hhcmVkIG9wdGlvbnMgKi8KKwlhcmd2X3B1c2hfdmVyYm9zaXR5KCZhcmdzKTsKKwlpZiAob3B0X3Byb2dyZXNzKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9wcm9ncmVzcyk7CisKKwkvKiBPcHRpb25zIHBhc3NlZCB0byBnaXQtZmV0Y2ggKi8KKwlpZiAob3B0X2FsbCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfYWxsKTsKKwlpZiAob3B0X2FwcGVuZCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfYXBwZW5kKTsKKwlpZiAob3B0X3VwbG9hZF9wYWNrKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF91cGxvYWRfcGFjayk7CisJYXJndl9wdXNoX2ZvcmNlKCZhcmdzKTsKKwlpZiAob3B0X3RhZ3MpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3RhZ3MpOworCWlmIChvcHRfcHJ1bmUpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3BydW5lKTsKKwlpZiAob3B0X3JlY3Vyc2Vfc3VibW9kdWxlcykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfcmVjdXJzZV9zdWJtb2R1bGVzKTsKKwlpZiAob3B0X2RyeV9ydW4pCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tZHJ5LXJ1biIpOworCWlmIChvcHRfa2VlcCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfa2VlcCk7CisJaWYgKG9wdF9kZXB0aCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfZGVwdGgpOworCWlmIChvcHRfdW5zaGFsbG93KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF91bnNoYWxsb3cpOworCWlmIChvcHRfdXBkYXRlX3NoYWxsb3cpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3VwZGF0ZV9zaGFsbG93KTsKKwlpZiAob3B0X3JlZm1hcCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfcmVmbWFwKTsKKworCWlmIChyZXBvKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgcmVwbyk7CisJCWFyZ3ZfYXJyYXlfcHVzaHYoJmFyZ3MsIHJlZnNwZWNzKTsKKwl9IGVsc2UgaWYgKCpyZWZzcGVjcykKKwkJZGllKCJCVUc6IHJlZnNwZWNzIHdpdGhvdXQgcmVwbz8iKTsKKwlyZXQgPSBydW5fY29tbWFuZF92X29wdChhcmdzLmFyZ3YsIFJVTl9HSVRfQ01EKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqICJQdWxscyBpbnRvIHZvaWQiIGJ5IGJyYW5jaGluZyBvZmYgbWVyZ2VfaGVhZC4KKyAqLworc3RhdGljIGludCBwdWxsX2ludG9fdm9pZChjb25zdCB1bnNpZ25lZCBjaGFyICptZXJnZV9oZWFkLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpjdXJyX2hlYWQpCit7CisJLyoKKwkgKiBUd28td2F5IG1lcmdlOiB3ZSB0cmVhdCB0aGUgaW5kZXggYXMgYmFzZWQgb24gYW4gZW1wdHkgdHJlZSwKKwkgKiBhbmQgdHJ5IHRvIGZhc3QtZm9yd2FyZCB0byBIRUFELiBUaGlzIGVuc3VyZXMgd2Ugd2lsbCBub3QgbG9zZQorCSAqIGluZGV4L3dvcmt0cmVlIGNoYW5nZXMgdGhhdCB0aGUgdXNlciBhbHJlYWR5IG1hZGUgb24gdGhlIHVuYm9ybgorCSAqIGJyYW5jaC4KKwkgKi8KKwlpZiAoY2hlY2tvdXRfZmFzdF9mb3J3YXJkKEVNUFRZX1RSRUVfU0hBMV9CSU4sIG1lcmdlX2hlYWQsIDApKQorCQlyZXR1cm4gMTsKKworCWlmICh1cGRhdGVfcmVmKCJpbml0aWFsIHB1bGwiLCAiSEVBRCIsIG1lcmdlX2hlYWQsIGN1cnJfaGVhZCwgMCwgVVBEQVRFX1JFRlNfRElFX09OX0VSUikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogUnVucyBnaXQtbWVyZ2UsIHJldHVybmluZyBpdHMgZXhpdCBzdGF0dXMuCisgKi8KK3N0YXRpYyBpbnQgcnVuX21lcmdlKHZvaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCisJYXJndl9hcnJheV9wdXNobCgmYXJncywgIm1lcmdlIiwgTlVMTCk7CisKKwkvKiBTaGFyZWQgb3B0aW9ucyAqLworCWFyZ3ZfcHVzaF92ZXJib3NpdHkoJmFyZ3MpOworCWlmIChvcHRfcHJvZ3Jlc3MpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X3Byb2dyZXNzKTsKKworCS8qIE9wdGlvbnMgcGFzc2VkIHRvIGdpdC1tZXJnZSAqLworCWlmIChvcHRfZGlmZnN0YXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2RpZmZzdGF0KTsKKwlpZiAob3B0X2xvZykKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfbG9nKTsKKwlpZiAob3B0X3NxdWFzaCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfc3F1YXNoKTsKKwlpZiAob3B0X2NvbW1pdCkKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfY29tbWl0KTsKKwlpZiAob3B0X2VkaXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2VkaXQpOworCWlmIChvcHRfZmYpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2ZmKTsKKwlpZiAob3B0X3ZlcmlmeV9zaWduYXR1cmVzKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF92ZXJpZnlfc2lnbmF0dXJlcyk7CisJYXJndl9hcnJheV9wdXNodigmYXJncywgb3B0X3N0cmF0ZWdpZXMuYXJndik7CisJYXJndl9hcnJheV9wdXNodigmYXJncywgb3B0X3N0cmF0ZWd5X29wdHMuYXJndik7CisJaWYgKG9wdF9ncGdfc2lnbikKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBvcHRfZ3BnX3NpZ24pOworCisJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiRkVUQ0hfSEVBRCIpOworCXJldCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogUmV0dXJucyByZW1vdGUncyB1cHN0cmVhbSBicmFuY2ggZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4gSWYgcmVtb3RlIGlzIE5VTEwsCisgKiB0aGUgY3VycmVudCBicmFuY2gncyBjb25maWd1cmVkIGRlZmF1bHQgcmVtb3RlIGlzIHVzZWQuIFJldHVybnMgTlVMTCBpZgorICogYHJlbW90ZWAgZG9lcyBub3QgbmFtZSBhIHZhbGlkIHJlbW90ZSwgSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCwKKyAqIHJlbW90ZSBpcyBub3QgdGhlIGJyYW5jaCdzIGNvbmZpZ3VyZWQgcmVtb3RlIG9yIHRoZSBicmFuY2ggZG9lcyBub3QgaGF2ZSBhbnkKKyAqIGNvbmZpZ3VyZWQgdXBzdHJlYW0gYnJhbmNoLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3Vwc3RyZWFtX2JyYW5jaChjb25zdCBjaGFyICpyZW1vdGUpCit7CisJc3RydWN0IHJlbW90ZSAqcm07CisJc3RydWN0IGJyYW5jaCAqY3Vycl9icmFuY2g7CisJY29uc3QgY2hhciAqY3Vycl9icmFuY2hfcmVtb3RlOworCisJcm0gPSByZW1vdGVfZ2V0KHJlbW90ZSk7CisJaWYgKCFybSkKKwkJcmV0dXJuIE5VTEw7CisKKwljdXJyX2JyYW5jaCA9IGJyYW5jaF9nZXQoIkhFQUQiKTsKKwlpZiAoIWN1cnJfYnJhbmNoKQorCQlyZXR1cm4gTlVMTDsKKworCWN1cnJfYnJhbmNoX3JlbW90ZSA9IHJlbW90ZV9mb3JfYnJhbmNoKGN1cnJfYnJhbmNoLCBOVUxMKTsKKwlhc3NlcnQoY3Vycl9icmFuY2hfcmVtb3RlKTsKKworCWlmIChzdHJjbXAoY3Vycl9icmFuY2hfcmVtb3RlLCBybS0+bmFtZSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGJyYW5jaF9nZXRfdXBzdHJlYW0oY3Vycl9icmFuY2gsIE5VTEwpOworfQorCisvKioKKyAqIERlcml2ZXMgdGhlIHJlbW90ZSB0cmFja2luZyBicmFuY2ggZnJvbSB0aGUgcmVtb3RlIGFuZCByZWZzcGVjLgorICoKKyAqIEZJWE1FOiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoZSBkZWZhdWx0IG1hcHBpbmcgb2YKKyAqIHJlZnMvaGVhZHMvPGJyYW5jaF9uYW1lPiB0byByZWZzL3JlbW90ZXMvPHJlbW90ZV9uYW1lPi88YnJhbmNoX25hbWU+LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3RyYWNraW5nX2JyYW5jaChjb25zdCBjaGFyICpyZW1vdGUsIGNvbnN0IGNoYXIgKnJlZnNwZWMpCit7CisJc3RydWN0IHJlZnNwZWMgKnNwZWM7CisJY29uc3QgY2hhciAqc3BlY19zcmM7CisJY29uc3QgY2hhciAqbWVyZ2VfYnJhbmNoOworCisJc3BlYyA9IHBhcnNlX2ZldGNoX3JlZnNwZWMoMSwgJnJlZnNwZWMpOworCXNwZWNfc3JjID0gc3BlYy0+c3JjOworCWlmICghKnNwZWNfc3JjIHx8ICFzdHJjbXAoc3BlY19zcmMsICJIRUFEIikpCisJCXNwZWNfc3JjID0gIkhFQUQiOworCWVsc2UgaWYgKHNraXBfcHJlZml4KHNwZWNfc3JjLCAiaGVhZHMvIiwgJnNwZWNfc3JjKSkKKwkJOworCWVsc2UgaWYgKHNraXBfcHJlZml4KHNwZWNfc3JjLCAicmVmcy9oZWFkcy8iLCAmc3BlY19zcmMpKQorCQk7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc3BlY19zcmMsICJyZWZzLyIpIHx8CisJCXN0YXJ0c193aXRoKHNwZWNfc3JjLCAidGFncy8iKSB8fAorCQlzdGFydHNfd2l0aChzcGVjX3NyYywgInJlbW90ZXMvIikpCisJCXNwZWNfc3JjID0gIiI7CisKKwlpZiAoKnNwZWNfc3JjKSB7CisJCWlmICghc3RyY21wKHJlbW90ZSwgIi4iKSkKKwkJCW1lcmdlX2JyYW5jaCA9IG1rcGF0aCgicmVmcy9oZWFkcy8lcyIsIHNwZWNfc3JjKTsKKwkJZWxzZQorCQkJbWVyZ2VfYnJhbmNoID0gbWtwYXRoKCJyZWZzL3JlbW90ZXMvJXMvJXMiLCByZW1vdGUsIHNwZWNfc3JjKTsKKwl9IGVsc2UKKwkJbWVyZ2VfYnJhbmNoID0gTlVMTDsKKworCWZyZWVfcmVmc3BlYygxLCBzcGVjKTsKKwlyZXR1cm4gbWVyZ2VfYnJhbmNoOworfQorCisvKioKKyAqIEdpdmVuIHRoZSByZXBvIGFuZCByZWZzcGVjcywgc2V0cyBmb3JrX3BvaW50IHRvIHRoZSBwb2ludCBhdCB3aGljaCB0aGUKKyAqIGN1cnJlbnQgYnJhbmNoIGZvcmtlZCBmcm9tIGl0cyByZW1vdGUgdHJhY2tpbmcgYnJhbmNoLiBSZXR1cm5zIDAgb24gc3VjY2VzcywKKyAqIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3JlYmFzZV9mb3JrX3BvaW50KHVuc2lnbmVkIGNoYXIgKmZvcmtfcG9pbnQsIGNvbnN0IGNoYXIgKnJlcG8sCisJCWNvbnN0IGNoYXIgKnJlZnNwZWMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYnJhbmNoICpjdXJyX2JyYW5jaDsKKwljb25zdCBjaGFyICpyZW1vdGVfYnJhbmNoOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWN1cnJfYnJhbmNoID0gYnJhbmNoX2dldCgiSEVBRCIpOworCWlmICghY3Vycl9icmFuY2gpCisJCXJldHVybiAtMTsKKworCWlmIChyZWZzcGVjKQorCQlyZW1vdGVfYnJhbmNoID0gZ2V0X3RyYWNraW5nX2JyYW5jaChyZXBvLCByZWZzcGVjKTsKKwllbHNlCisJCXJlbW90ZV9icmFuY2ggPSBnZXRfdXBzdHJlYW1fYnJhbmNoKHJlcG8pOworCisJaWYgKCFyZW1vdGVfYnJhbmNoKQorCQlyZXR1cm4gLTE7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAibWVyZ2UtYmFzZSIsICItLWZvcmstcG9pbnQiLAorCQkJcmVtb3RlX2JyYW5jaCwgY3Vycl9icmFuY2gtPm5hbWUsIE5VTEwpOworCWNwLm5vX3N0ZGluID0gMTsKKwljcC5ub19zdGRlcnIgPSAxOworCWNwLmdpdF9jbWQgPSAxOworCisJcmV0ID0gY2FwdHVyZV9jb21tYW5kKCZjcCwgJnNiLCBHSVRfU0hBMV9IRVhTWik7CisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwOworCisJcmV0ID0gZ2V0X3NoYTFfaGV4KHNiLmJ1ZiwgZm9ya19wb2ludCk7CisJaWYgKHJldCkKKwkJZ290byBjbGVhbnVwOworCitjbGVhbnVwOgorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldCA/IC0xIDogMDsKK30KKworLyoqCisgKiBTZXRzIG1lcmdlX2Jhc2UgdG8gdGhlIG9jdG9wdXMgbWVyZ2UgYmFzZSBvZiBjdXJyX2hlYWQsIG1lcmdlX2hlYWQgYW5kCisgKiBmb3JrX3BvaW50LiBSZXR1cm5zIDAgaWYgYSBtZXJnZSBiYXNlIGlzIGZvdW5kLCAxIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBnZXRfb2N0b3B1c19tZXJnZV9iYXNlKHVuc2lnbmVkIGNoYXIgKm1lcmdlX2Jhc2UsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnJfaGVhZCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbWVyZ2VfaGVhZCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZm9ya19wb2ludCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJldnMgPSBOVUxMLCAqcmVzdWx0OworCisJY29tbWl0X2xpc3RfaW5zZXJ0KGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKGN1cnJfaGVhZCksICZyZXZzKTsKKwljb21taXRfbGlzdF9pbnNlcnQobG9va3VwX2NvbW1pdF9yZWZlcmVuY2UobWVyZ2VfaGVhZCksICZyZXZzKTsKKwlpZiAoIWlzX251bGxfc2hhMShmb3JrX3BvaW50KSkKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKGZvcmtfcG9pbnQpLCAmcmV2cyk7CisKKwlyZXN1bHQgPSByZWR1Y2VfaGVhZHMoZ2V0X29jdG9wdXNfbWVyZ2VfYmFzZXMocmV2cykpOworCWZyZWVfY29tbWl0X2xpc3QocmV2cyk7CisJaWYgKCFyZXN1bHQpCisJCXJldHVybiAxOworCisJaGFzaGNweShtZXJnZV9iYXNlLCByZXN1bHQtPml0ZW0tPm9iamVjdC5zaGExKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBHaXZlbiB0aGUgY3VycmVudCBIRUFEIFNIQTEsIHRoZSBtZXJnZSBoZWFkIHJldHVybmVkIGZyb20gZ2l0LWZldGNoIGFuZCB0aGUKKyAqIGZvcmsgcG9pbnQgY2FsY3VsYXRlZCBieSBnZXRfcmViYXNlX2ZvcmtfcG9pbnQoKSwgcnVucyBnaXQtcmViYXNlIHdpdGggdGhlCisgKiBhcHByb3ByaWF0ZSBhcmd1bWVudHMgYW5kIHJldHVybnMgaXRzIGV4aXQgc3RhdHVzLgorICovCitzdGF0aWMgaW50IHJ1bl9yZWJhc2UoY29uc3QgdW5zaWduZWQgY2hhciAqY3Vycl9oZWFkLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICptZXJnZV9oZWFkLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpmb3JrX3BvaW50KQoreworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBvY3RfbWVyZ2VfYmFzZVtHSVRfU0hBMV9SQVdTWl07CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJncyA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCWlmICghZ2V0X29jdG9wdXNfbWVyZ2VfYmFzZShvY3RfbWVyZ2VfYmFzZSwgY3Vycl9oZWFkLCBtZXJnZV9oZWFkLCBmb3JrX3BvaW50KSkKKwkJaWYgKCFpc19udWxsX3NoYTEoZm9ya19wb2ludCkgJiYgIWhhc2hjbXAob2N0X21lcmdlX2Jhc2UsIGZvcmtfcG9pbnQpKQorCQkJZm9ya19wb2ludCA9IE5VTEw7CisKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICJyZWJhc2UiKTsKKworCS8qIFNoYXJlZCBvcHRpb25zICovCisJYXJndl9wdXNoX3ZlcmJvc2l0eSgmYXJncyk7CisKKwkvKiBPcHRpb25zIHBhc3NlZCB0byBnaXQtcmViYXNlICovCisJaWYgKG9wdF9yZWJhc2UgPT0gUkVCQVNFX1BSRVNFUlZFKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXByZXNlcnZlLW1lcmdlcyIpOworCWlmIChvcHRfZGlmZnN0YXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgb3B0X2RpZmZzdGF0KTsKKwlhcmd2X2FycmF5X3B1c2h2KCZhcmdzLCBvcHRfc3RyYXRlZ2llcy5hcmd2KTsKKwlhcmd2X2FycmF5X3B1c2h2KCZhcmdzLCBvcHRfc3RyYXRlZ3lfb3B0cy5hcmd2KTsKKwlpZiAob3B0X2dwZ19zaWduKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdF9ncGdfc2lnbik7CisKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLW9udG8iKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIHNoYTFfdG9faGV4KG1lcmdlX2hlYWQpKTsKKworCWlmIChmb3JrX3BvaW50ICYmICFpc19udWxsX3NoYTEoZm9ya19wb2ludCkpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgc2hhMV90b19oZXgoZm9ya19wb2ludCkpOworCWVsc2UKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCBzaGExX3RvX2hleChtZXJnZV9oZWFkKSk7CisKKwlyZXQgPSBydW5fY29tbWFuZF92X29wdChhcmdzLmFyZ3YsIFJVTl9HSVRfQ01EKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmdzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY21kX3B1bGwoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJY29uc3QgY2hhciAqcmVwbywgKipyZWZzcGVjczsKKwlzdHJ1Y3Qgc2hhMV9hcnJheSBtZXJnZV9oZWFkcyA9IFNIQTFfQVJSQVlfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIG9yaWdfaGVhZFtHSVRfU0hBMV9SQVdTWl0sIGN1cnJfaGVhZFtHSVRfU0hBMV9SQVdTWl07CisJdW5zaWduZWQgY2hhciByZWJhc2VfZm9ya19wb2ludFtHSVRfU0hBMV9SQVdTWl07CisKKwlpZiAoIWdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKSkKKwkJc2V0X3JlZmxvZ19tZXNzYWdlKGFyZ2MsIGFyZ3YpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBwdWxsX29wdGlvbnMsIHB1bGxfdXNhZ2UsIDApOworCisJcGFyc2VfcmVwb19yZWZzcGVjcyhhcmdjLCBhcmd2LCAmcmVwbywgJnJlZnNwZWNzKTsKKworCWlmICghb3B0X2ZmKQorCQlvcHRfZmYgPSB4c3RyZHVwX29yX251bGwoY29uZmlnX2dldF9mZigpKTsKKworCWlmIChvcHRfcmViYXNlIDwgMCkKKwkJb3B0X3JlYmFzZSA9IGNvbmZpZ19nZXRfcmViYXNlKCk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwlpZiAocmVhZF9jYWNoZV91bm1lcmdlZCgpKQorCQlkaWVfcmVzb2x2ZV9jb25mbGljdCgiUHVsbCIpOworCisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoKCJNRVJHRV9IRUFEIikpKQorCQlkaWVfY29uY2x1ZGVfbWVyZ2UoKTsKKworCWlmIChnZXRfc2hhMSgiSEVBRCIsIG9yaWdfaGVhZCkpCisJCWhhc2hjbHIob3JpZ19oZWFkKTsKKworCWlmIChvcHRfcmViYXNlKSB7CisJCWludCBhdXRvc3Rhc2ggPSAwOworCisJCWlmIChpc19udWxsX3NoYTEob3JpZ19oZWFkKSAmJiAhaXNfY2FjaGVfdW5ib3JuKCkpCisJCQlkaWUoXygiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIpKTsKKworCQlnaXRfY29uZmlnX2dldF9ib29sKCJyZWJhc2UuYXV0b3N0YXNoIiwgJmF1dG9zdGFzaCk7CisJCWlmICghYXV0b3N0YXNoKQorCQkJZGllX29uX3VuY2xlYW5fd29ya190cmVlKHByZWZpeCk7CisKKwkJaWYgKGdldF9yZWJhc2VfZm9ya19wb2ludChyZWJhc2VfZm9ya19wb2ludCwgcmVwbywgKnJlZnNwZWNzKSkKKwkJCWhhc2hjbHIocmViYXNlX2ZvcmtfcG9pbnQpOworCX0KKworCWlmIChydW5fZmV0Y2gocmVwbywgcmVmc3BlY3MpKQorCQlyZXR1cm4gMTsKKworCWlmIChvcHRfZHJ5X3J1bikKKwkJcmV0dXJuIDA7CisKKwlpZiAoZ2V0X3NoYTEoIkhFQUQiLCBjdXJyX2hlYWQpKQorCQloYXNoY2xyKGN1cnJfaGVhZCk7CisKKwlpZiAoIWlzX251bGxfc2hhMShvcmlnX2hlYWQpICYmICFpc19udWxsX3NoYTEoY3Vycl9oZWFkKSAmJgorCQkJaGFzaGNtcChvcmlnX2hlYWQsIGN1cnJfaGVhZCkpIHsKKwkJLyoKKwkJICogVGhlIGZldGNoIGludm9sdmVkIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaC4KKwkJICoKKwkJICogVGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IGZpbGUgYXJlIHN0aWxsIGJhc2VkIG9uCisJCSAqIG9yaWdfaGVhZCBjb21taXQsIGJ1dCB3ZSBhcmUgbWVyZ2luZyBpbnRvIGN1cnJfaGVhZC4KKwkJICogVXBkYXRlIHRoZSB3b3JraW5nIHRyZWUgdG8gbWF0Y2ggY3Vycl9oZWFkLgorCQkgKi8KKworCQl3YXJuaW5nKF8oImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisJCQkiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKwkJCSJjb21taXQgJXMuIiksIHNoYTFfdG9faGV4KG9yaWdfaGVhZCkpOworCisJCWlmIChjaGVja291dF9mYXN0X2ZvcndhcmQob3JpZ19oZWFkLCBjdXJyX2hlYWQsIDApKQorCQkJZGllKF8oIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisJCQkJIkFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb21cbiIKKwkJCQkiJCBnaXQgZGlmZiAlc1xuIgorCQkJCSJvdXRwdXQsIHJ1blxuIgorCQkJCSIkIGdpdCByZXNldCAtLWhhcmRcbiIKKwkJCQkidG8gcmVjb3Zlci4iKSwgc2hhMV90b19oZXgob3JpZ19oZWFkKSk7CisJfQorCisJZ2V0X21lcmdlX2hlYWRzKCZtZXJnZV9oZWFkcyk7CisKKwlpZiAoIW1lcmdlX2hlYWRzLm5yKQorCQlkaWVfbm9fbWVyZ2VfY2FuZGlkYXRlcyhyZXBvLCByZWZzcGVjcyk7CisKKwlpZiAoaXNfbnVsbF9zaGExKG9yaWdfaGVhZCkpIHsKKwkJaWYgKG1lcmdlX2hlYWRzLm5yID4gMSkKKwkJCWRpZShfKCJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkLiIpKTsKKwkJcmV0dXJuIHB1bGxfaW50b192b2lkKCptZXJnZV9oZWFkcy5zaGExLCBjdXJyX2hlYWQpOworCX0gZWxzZSBpZiAob3B0X3JlYmFzZSkgeworCQlpZiAobWVyZ2VfaGVhZHMubnIgPiAxKQorCQkJZGllKF8oIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iKSk7CisJCXJldHVybiBydW5fcmViYXNlKGN1cnJfaGVhZCwgKm1lcmdlX2hlYWRzLnNoYTEsIHJlYmFzZV9mb3JrX3BvaW50KTsKKwl9IGVsc2UKKwkJcmV0dXJuIHJ1bl9tZXJnZSgpOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9wdXNoLmMgYi9idWlsdGluL3B1c2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmRhNDMwCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9wdXNoLmMKQEAgLTAsMCArMSw1OTYgQEAKKy8qCisgKiAiZ2l0IHB1c2giCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic2VuZC1wYWNrLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHVzaF91c2FnZVtdID0geworCU5fKCJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIpLAorCU5VTEwsCit9OworCitzdGF0aWMgaW50IHRoaW4gPSAxOworc3RhdGljIGludCBkZWxldGVyZWZzOworc3RhdGljIGNvbnN0IGNoYXIgKnJlY2VpdmVwYWNrOworc3RhdGljIGludCB2ZXJib3NpdHk7CitzdGF0aWMgaW50IHByb2dyZXNzID0gLTE7CisKK3N0YXRpYyBzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uIGNhczsKKworc3RhdGljIGNvbnN0IGNoYXIgKipyZWZzcGVjOworc3RhdGljIGludCByZWZzcGVjX25yOworc3RhdGljIGludCByZWZzcGVjX2FsbG9jOworCitzdGF0aWMgdm9pZCBhZGRfcmVmc3BlYyhjb25zdCBjaGFyICpyZWYpCit7CisJcmVmc3BlY19ucisrOworCUFMTE9DX0dST1cocmVmc3BlYywgcmVmc3BlY19uciwgcmVmc3BlY19hbGxvYyk7CisJcmVmc3BlY1tyZWZzcGVjX25yLTFdID0gcmVmOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbWFwX3JlZnNwZWMoY29uc3QgY2hhciAqcmVmLAorCQkJICAgICAgIHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgc3RydWN0IHJlZiAqbG9jYWxfcmVmcykKK3sKKwlzdHJ1Y3QgcmVmICptYXRjaGVkID0gTlVMTDsKKworCS8qIERvZXMgInJlZiIgdW5pcXVlbHkgbmFtZSBvdXIgcmVmPyAqLworCWlmIChjb3VudF9yZWZzcGVjX21hdGNoKHJlZiwgbG9jYWxfcmVmcywgJm1hdGNoZWQpICE9IDEpCisJCXJldHVybiByZWY7CisKKwlpZiAocmVtb3RlLT5wdXNoKSB7CisJCXN0cnVjdCByZWZzcGVjIHF1ZXJ5OworCQltZW1zZXQoJnF1ZXJ5LCAwLCBzaXplb2Yoc3RydWN0IHJlZnNwZWMpKTsKKwkJcXVlcnkuc3JjID0gbWF0Y2hlZC0+bmFtZTsKKwkJaWYgKCFxdWVyeV9yZWZzcGVjcyhyZW1vdGUtPnB1c2gsIHJlbW90ZS0+cHVzaF9yZWZzcGVjX25yLCAmcXVlcnkpICYmCisJCSAgICBxdWVyeS5kc3QpIHsKKwkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkZigmYnVmLCAiJXMlczolcyIsCisJCQkJICAgIHF1ZXJ5LmZvcmNlID8gIisiIDogIiIsCisJCQkJICAgIHF1ZXJ5LnNyYywgcXVlcnkuZHN0KTsKKwkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCQl9CisJfQorCisJaWYgKHB1c2hfZGVmYXVsdCA9PSBQVVNIX0RFRkFVTFRfVVBTVFJFQU0gJiYKKwkgICAgc3RhcnRzX3dpdGgobWF0Y2hlZC0+bmFtZSwgInJlZnMvaGVhZHMvIikpIHsKKwkJc3RydWN0IGJyYW5jaCAqYnJhbmNoID0gYnJhbmNoX2dldChtYXRjaGVkLT5uYW1lICsgMTEpOworCQlpZiAoYnJhbmNoLT5tZXJnZV9uciA9PSAxICYmIGJyYW5jaC0+bWVyZ2VbMF0tPnNyYykgeworCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICIlczolcyIsCisJCQkJICAgIHJlZiwgYnJhbmNoLT5tZXJnZVswXS0+c3JjKTsKKwkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCQl9CisJfQorCisJcmV0dXJuIHJlZjsKK30KKworc3RhdGljIHZvaWQgc2V0X3JlZnNwZWNzKGNvbnN0IGNoYXIgKipyZWZzLCBpbnQgbnIsIGNvbnN0IGNoYXIgKnJlcG8pCit7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICpsb2NhbF9yZWZzID0gTlVMTDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnJlZiA9IHJlZnNbaV07CisJCWlmICghc3RyY21wKCJ0YWciLCByZWYpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIHRhZ3JlZiA9IFNUUkJVRl9JTklUOworCQkJaWYgKG5yIDw9ICsraSkKKwkJCQlkaWUoXygidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IikpOworCQkJcmVmID0gcmVmc1tpXTsKKwkJCWlmIChkZWxldGVyZWZzKQorCQkJCXN0cmJ1Zl9hZGRmKCZ0YWdyZWYsICI6cmVmcy90YWdzLyVzIiwgcmVmKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfYWRkZigmdGFncmVmLCAicmVmcy90YWdzLyVzIiwgcmVmKTsKKwkJCXJlZiA9IHN0cmJ1Zl9kZXRhY2goJnRhZ3JlZiwgTlVMTCk7CisJCX0gZWxzZSBpZiAoZGVsZXRlcmVmcykgeworCQkJc3RydWN0IHN0cmJ1ZiBkZWxyZWYgPSBTVFJCVUZfSU5JVDsKKwkJCWlmIChzdHJjaHIocmVmLCAnOicpKQorCQkJCWRpZShfKCItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIpKTsKKwkJCXN0cmJ1Zl9hZGRmKCZkZWxyZWYsICI6JXMiLCByZWYpOworCQkJcmVmID0gc3RyYnVmX2RldGFjaCgmZGVscmVmLCBOVUxMKTsKKwkJfSBlbHNlIGlmICghc3RyY2hyKHJlZiwgJzonKSkgeworCQkJaWYgKCFyZW1vdGUpIHsKKwkJCQkvKiBsYXppbHkgZ3JhYiByZW1vdGUgYW5kIGxvY2FsX3JlZnMgKi8KKwkJCQlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlcG8pOworCQkJCWxvY2FsX3JlZnMgPSBnZXRfbG9jYWxfaGVhZHMoKTsKKwkJCX0KKwkJCXJlZiA9IG1hcF9yZWZzcGVjKHJlZiwgcmVtb3RlLCBsb2NhbF9yZWZzKTsKKwkJfQorCQlhZGRfcmVmc3BlYyhyZWYpOworCX0KK30KKworc3RhdGljIGludCBwdXNoX3VybF9vZl9yZW1vdGUoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICoqKnVybF9wKQoreworCWlmIChyZW1vdGUtPnB1c2h1cmxfbnIpIHsKKwkJKnVybF9wID0gcmVtb3RlLT5wdXNodXJsOworCQlyZXR1cm4gcmVtb3RlLT5wdXNodXJsX25yOworCX0KKwkqdXJsX3AgPSByZW1vdGUtPnVybDsKKwlyZXR1cm4gcmVtb3RlLT51cmxfbnI7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiBpbnQgZGllX3B1c2hfc2ltcGxlKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgc3RydWN0IHJlbW90ZSAqcmVtb3RlKSB7CisJLyoKKwkgKiBUaGVyZSdzIG5vIHBvaW50IGluIHVzaW5nIHNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmIGhlcmUsCisJICogYXMgdGhlIGFtYmlndWl0eSB3b3VsZCBiZSBvbiB0aGUgcmVtb3RlIHNpZGUsIG5vdCB3aGF0CisJICogd2UgaGF2ZSBsb2NhbGx5LiBQbHVzLCB0aGlzIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzaW1wbGUKKwkgKiBtb2RlLiBJZiB0aGUgdXNlciBpcyBkb2luZyBzb21ldGhpbmcgY3JhenkgbGlrZSBzZXR0aW5nCisJICogdXBzdHJlYW0gdG8gYSBub24tYnJhbmNoLCB3ZSBzaG91bGQgcHJvYmFibHkgYmUgc2hvd2luZworCSAqIHRoZW0gdGhlIGJpZyB1Z2x5IGZ1bGx5IHF1YWxpZmllZCByZWYuCisJICovCisJY29uc3QgY2hhciAqYWR2aWNlX21heWJlID0gIiI7CisJY29uc3QgY2hhciAqc2hvcnRfdXBzdHJlYW0gPSBicmFuY2gtPm1lcmdlWzBdLT5zcmM7CisKKwlza2lwX3ByZWZpeChzaG9ydF91cHN0cmVhbSwgInJlZnMvaGVhZHMvIiwgJnNob3J0X3Vwc3RyZWFtKTsKKworCS8qCisJICogRG9uJ3Qgc2hvdyBhZHZpY2UgZm9yIHBlb3BsZSB3aG8gZXhwbGljaXRseSBzZXQKKwkgKiBwdXNoLmRlZmF1bHQuCisJICovCisJaWYgKHB1c2hfZGVmYXVsdCA9PSBQVVNIX0RFRkFVTFRfVU5TUEVDSUZJRUQpCisJCWFkdmljZV9tYXliZSA9IF8oIlxuIgorCQkJCSAiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksICIKKwkJCQkgInNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIik7CisJZGllKF8oIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorCSAgICAgICJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisJICAgICAgIm9uIHRoZSByZW1vdGUsIHVzZVxuIgorCSAgICAgICJcbiIKKwkgICAgICAiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKwkgICAgICAiXG4iCisJICAgICAgIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorCSAgICAgICJcbiIKKwkgICAgICAiICAgIGdpdCBwdXNoICVzICVzXG4iCisJICAgICAgIiVzIiksCisJICAgIHJlbW90ZS0+bmFtZSwgc2hvcnRfdXBzdHJlYW0sCisJICAgIHJlbW90ZS0+bmFtZSwgYnJhbmNoLT5uYW1lLCBhZHZpY2VfbWF5YmUpOworfQorCitzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlX2RldGFjaGVkX2hlYWRfZGllW10gPQorCU5fKCJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisJICAgIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKwkgICAic3RhdGUgbm93LCB1c2VcbiIKKwkgICAiXG4iCisJICAgIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iKTsKKworc3RhdGljIHZvaWQgc2V0dXBfcHVzaF91cHN0cmVhbShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCBicmFuY2ggKmJyYW5jaCwKKwkJCQlpbnQgdHJpYW5ndWxhciwgaW50IHNpbXBsZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlZnNwZWMgPSBTVFJCVUZfSU5JVDsKKworCWlmICghYnJhbmNoKQorCQlkaWUoXyhtZXNzYWdlX2RldGFjaGVkX2hlYWRfZGllKSwgcmVtb3RlLT5uYW1lKTsKKwlpZiAoIWJyYW5jaC0+bWVyZ2VfbnIgfHwgIWJyYW5jaC0+bWVyZ2UgfHwgIWJyYW5jaC0+cmVtb3RlX25hbWUpCisJCWRpZShfKCJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKwkJICAgICJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorCQkgICAgIlxuIgorCQkgICAgIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIiksCisJCSAgICBicmFuY2gtPm5hbWUsCisJCSAgICByZW1vdGUtPm5hbWUsCisJCSAgICBicmFuY2gtPm5hbWUpOworCWlmIChicmFuY2gtPm1lcmdlX25yICE9IDEpCisJCWRpZShfKCJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCAiCisJCSAgICAicmVmdXNpbmcgdG8gcHVzaC4iKSwgYnJhbmNoLT5uYW1lKTsKKwlpZiAodHJpYW5ndWxhcikKKwkJZGllKF8oIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorCQkgICAgICAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisJCSAgICAgICJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iKSwKKwkJICAgIHJlbW90ZS0+bmFtZSwgYnJhbmNoLT5uYW1lKTsKKworCWlmIChzaW1wbGUpIHsKKwkJLyogQWRkaXRpb25hbCBzYWZldHkgKi8KKwkJaWYgKHN0cmNtcChicmFuY2gtPnJlZm5hbWUsIGJyYW5jaC0+bWVyZ2VbMF0tPnNyYykpCisJCQlkaWVfcHVzaF9zaW1wbGUoYnJhbmNoLCByZW1vdGUpOworCX0KKworCXN0cmJ1Zl9hZGRmKCZyZWZzcGVjLCAiJXM6JXMiLCBicmFuY2gtPm5hbWUsIGJyYW5jaC0+bWVyZ2VbMF0tPnNyYyk7CisJYWRkX3JlZnNwZWMocmVmc3BlYy5idWYpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9wdXNoX2N1cnJlbnQoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBzdHJ1Y3QgYnJhbmNoICpicmFuY2gpCit7CisJaWYgKCFicmFuY2gpCisJCWRpZShfKG1lc3NhZ2VfZGV0YWNoZWRfaGVhZF9kaWUpLCByZW1vdGUtPm5hbWUpOworCWFkZF9yZWZzcGVjKGJyYW5jaC0+bmFtZSk7Cit9CisKK3N0YXRpYyBjaGFyIHdhcm5fdW5zcGVjaWZpZWRfcHVzaF9kZWZhdWx0X21zZ1tdID0KK05fKCJwdXNoLmRlZmF1bHQgaXMgdW5zZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSBoYXMgY2hhbmdlZCBpblxuIgorICAgIkdpdCAyLjAgZnJvbSAnbWF0Y2hpbmcnIHRvICdzaW1wbGUnLiBUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZVxuIgorICAgImFuZCBtYWludGFpbiB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3IsIHVzZTpcbiIKKyAgICJcbiIKKyAgICIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisgICAiXG4iCisgICAiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igbm93LCB1c2U6XG4iCisgICAiXG4iCisgICAiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyAgICJcbiIKKyAgICJXaGVuIHB1c2guZGVmYXVsdCBpcyBzZXQgdG8gJ21hdGNoaW5nJywgZ2l0IHdpbGwgcHVzaCBsb2NhbCBicmFuY2hlc1xuIgorICAgInRvIHRoZSByZW1vdGUgYnJhbmNoZXMgdGhhdCBhbHJlYWR5IGV4aXN0IHdpdGggdGhlIHNhbWUgbmFtZS5cbiIKKyAgICJcbiIKKyAgICJTaW5jZSBHaXQgMi4wLCBHaXQgZGVmYXVsdHMgdG8gdGhlIG1vcmUgY29uc2VydmF0aXZlICdzaW1wbGUnXG4iCisgICAiYmVoYXZpb3IsIHdoaWNoIG9ubHkgcHVzaGVzIHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgY29ycmVzcG9uZGluZ1xuIgorICAgInJlbW90ZSBicmFuY2ggdGhhdCAnZ2l0IHB1bGwnIHVzZXMgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC5cbiIKKyAgICJcbiIKKyAgICJTZWUgJ2dpdCBoZWxwIGNvbmZpZycgYW5kIHNlYXJjaCBmb3IgJ3B1c2guZGVmYXVsdCcgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uXG4iCisgICAiKHRoZSAnc2ltcGxlJyBtb2RlIHdhcyBpbnRyb2R1Y2VkIGluIEdpdCAxLjcuMTEuIFVzZSB0aGUgc2ltaWxhciBtb2RlXG4iCisgICAiJ2N1cnJlbnQnIGluc3RlYWQgb2YgJ3NpbXBsZScgaWYgeW91IHNvbWV0aW1lcyB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0KSIpOworCitzdGF0aWMgdm9pZCB3YXJuX3Vuc3BlY2lmaWVkX3B1c2hfZGVmYXVsdF9jb25maWd1cmF0aW9uKHZvaWQpCit7CisJc3RhdGljIGludCB3YXJuX29uY2U7CisKKwlpZiAod2Fybl9vbmNlKyspCisJCXJldHVybjsKKwl3YXJuaW5nKCIlc1xuIiwgXyh3YXJuX3Vuc3BlY2lmaWVkX3B1c2hfZGVmYXVsdF9tc2cpKTsKK30KKworc3RhdGljIGludCBpc193b3JrZmxvd190cmlhbmd1bGFyKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlzdHJ1Y3QgcmVtb3RlICpmZXRjaF9yZW1vdGUgPSByZW1vdGVfZ2V0KE5VTEwpOworCXJldHVybiAoZmV0Y2hfcmVtb3RlICYmIGZldGNoX3JlbW90ZSAhPSByZW1vdGUpOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9kZWZhdWx0X3B1c2hfcmVmc3BlY3Moc3RydWN0IHJlbW90ZSAqcmVtb3RlKQoreworCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IGJyYW5jaF9nZXQoTlVMTCk7CisJaW50IHRyaWFuZ3VsYXIgPSBpc193b3JrZmxvd190cmlhbmd1bGFyKHJlbW90ZSk7CisKKwlzd2l0Y2ggKHB1c2hfZGVmYXVsdCkgeworCWRlZmF1bHQ6CisJY2FzZSBQVVNIX0RFRkFVTFRfTUFUQ0hJTkc6CisJCWFkZF9yZWZzcGVjKCI6Iik7CisJCWJyZWFrOworCisJY2FzZSBQVVNIX0RFRkFVTFRfVU5TUEVDSUZJRUQ6CisJCXdhcm5fdW5zcGVjaWZpZWRfcHVzaF9kZWZhdWx0X2NvbmZpZ3VyYXRpb24oKTsKKwkJLyogZmFsbHRocnUgKi8KKworCWNhc2UgUFVTSF9ERUZBVUxUX1NJTVBMRToKKwkJaWYgKHRyaWFuZ3VsYXIpCisJCQlzZXR1cF9wdXNoX2N1cnJlbnQocmVtb3RlLCBicmFuY2gpOworCQllbHNlCisJCQlzZXR1cF9wdXNoX3Vwc3RyZWFtKHJlbW90ZSwgYnJhbmNoLCB0cmlhbmd1bGFyLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFBVU0hfREVGQVVMVF9VUFNUUkVBTToKKwkJc2V0dXBfcHVzaF91cHN0cmVhbShyZW1vdGUsIGJyYW5jaCwgdHJpYW5ndWxhciwgMCk7CisJCWJyZWFrOworCisJY2FzZSBQVVNIX0RFRkFVTFRfQ1VSUkVOVDoKKwkJc2V0dXBfcHVzaF9jdXJyZW50KHJlbW90ZSwgYnJhbmNoKTsKKwkJYnJlYWs7CisKKwljYXNlIFBVU0hfREVGQVVMVF9OT1RISU5HOgorCQlkaWUoXygiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgIgorCQkgICAgInB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iKSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgbWVzc2FnZV9hZHZpY2VfcHVsbF9iZWZvcmVfcHVzaFtdID0KKwlOXygiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorCSAgICJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisJICAgIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKwkgICAiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgbWVzc2FnZV9hZHZpY2VfY2hlY2tvdXRfcHVsbF9wdXNoW10gPQorCU5fKCJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisJICAgImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKwkgICAiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorCSAgICJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIpOworCitzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlX2FkdmljZV9yZWZfZmV0Y2hfZmlyc3RbXSA9CisJTl8oIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorCSAgICJub3QgaGF2ZSBsb2NhbGx5LiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFub3RoZXIgcmVwb3NpdG9yeSBwdXNoaW5nXG4iCisJICAgInRvIHRoZSBzYW1lIHJlZi4gWW91IG1heSB3YW50IHRvIGZpcnN0IGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKwkgICAiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKwkgICAiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iKTsKKworc3RhdGljIGNvbnN0IGNoYXIgbWVzc2FnZV9hZHZpY2VfcmVmX2FscmVhZHlfZXhpc3RzW10gPQorCU5fKCJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGFnIGFscmVhZHkgZXhpc3RzIGluIHRoZSByZW1vdGUuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VfYWR2aWNlX3JlZl9uZWVkc19mb3JjZVtdID0KKwlOXygiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisJICAgIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorCSAgICJ3aXRob3V0IHVzaW5nIHRoZSAnLS1mb3JjZScgb3B0aW9uLlxuIik7CisKK3N0YXRpYyB2b2lkIGFkdmlzZV9wdWxsX2JlZm9yZV9wdXNoKHZvaWQpCit7CisJaWYgKCFhZHZpY2VfcHVzaF9ub25fZmZfY3VycmVudCB8fCAhYWR2aWNlX3B1c2hfdXBkYXRlX3JlamVjdGVkKQorCQlyZXR1cm47CisJYWR2aXNlKF8obWVzc2FnZV9hZHZpY2VfcHVsbF9iZWZvcmVfcHVzaCkpOworfQorCitzdGF0aWMgdm9pZCBhZHZpc2VfY2hlY2tvdXRfcHVsbF9wdXNoKHZvaWQpCit7CisJaWYgKCFhZHZpY2VfcHVzaF9ub25fZmZfbWF0Y2hpbmcgfHwgIWFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCkKKwkJcmV0dXJuOworCWFkdmlzZShfKG1lc3NhZ2VfYWR2aWNlX2NoZWNrb3V0X3B1bGxfcHVzaCkpOworfQorCitzdGF0aWMgdm9pZCBhZHZpc2VfcmVmX2FscmVhZHlfZXhpc3RzKHZvaWQpCit7CisJaWYgKCFhZHZpY2VfcHVzaF9hbHJlYWR5X2V4aXN0cyB8fCAhYWR2aWNlX3B1c2hfdXBkYXRlX3JlamVjdGVkKQorCQlyZXR1cm47CisJYWR2aXNlKF8obWVzc2FnZV9hZHZpY2VfcmVmX2FscmVhZHlfZXhpc3RzKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkdmlzZV9yZWZfZmV0Y2hfZmlyc3Qodm9pZCkKK3sKKwlpZiAoIWFkdmljZV9wdXNoX2ZldGNoX2ZpcnN0IHx8ICFhZHZpY2VfcHVzaF91cGRhdGVfcmVqZWN0ZWQpCisJCXJldHVybjsKKwlhZHZpc2UoXyhtZXNzYWdlX2FkdmljZV9yZWZfZmV0Y2hfZmlyc3QpKTsKK30KKworc3RhdGljIHZvaWQgYWR2aXNlX3JlZl9uZWVkc19mb3JjZSh2b2lkKQoreworCWlmICghYWR2aWNlX3B1c2hfbmVlZHNfZm9yY2UgfHwgIWFkdmljZV9wdXNoX3VwZGF0ZV9yZWplY3RlZCkKKwkJcmV0dXJuOworCWFkdmlzZShfKG1lc3NhZ2VfYWR2aWNlX3JlZl9uZWVkc19mb3JjZSkpOworfQorCitzdGF0aWMgaW50IHB1c2hfd2l0aF9vcHRpb25zKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZsYWdzKQoreworCWludCBlcnI7CisJdW5zaWduZWQgaW50IHJlamVjdF9yZWFzb25zOworCisJdHJhbnNwb3J0X3NldF92ZXJib3NpdHkodHJhbnNwb3J0LCB2ZXJib3NpdHksIHByb2dyZXNzKTsKKworCWlmIChyZWNlaXZlcGFjaykKKwkJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LAorCQkJCSAgICAgVFJBTlNfT1BUX1JFQ0VJVkVQQUNLLCByZWNlaXZlcGFjayk7CisJdHJhbnNwb3J0X3NldF9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfVEhJTiwgdGhpbiA/ICJ5ZXMiIDogTlVMTCk7CisKKwlpZiAoIWlzX2VtcHR5X2NhcygmY2FzKSkgeworCQlpZiAoIXRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucykKKwkJCWRpZSgidW5kZXJseWluZyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAtLSVzIG9wdGlvbiIsCisJCQkgICAgQ0FTX09QVF9OQU1FKTsKKwkJdHJhbnNwb3J0LT5zbWFydF9vcHRpb25zLT5jYXMgPSAmY2FzOworCX0KKworCWlmICh2ZXJib3NpdHkgPiAwKQorCQlmcHJpbnRmKHN0ZGVyciwgXygiUHVzaGluZyB0byAlc1xuIiksIHRyYW5zcG9ydC0+dXJsKTsKKwllcnIgPSB0cmFuc3BvcnRfcHVzaCh0cmFuc3BvcnQsIHJlZnNwZWNfbnIsIHJlZnNwZWMsIGZsYWdzLAorCQkJICAgICAmcmVqZWN0X3JlYXNvbnMpOworCWlmIChlcnIgIT0gMCkKKwkJZXJyb3IoXygiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciKSwgdHJhbnNwb3J0LT51cmwpOworCisJZXJyIHw9IHRyYW5zcG9ydF9kaXNjb25uZWN0KHRyYW5zcG9ydCk7CisJaWYgKCFlcnIpCisJCXJldHVybiAwOworCisJaWYgKHJlamVjdF9yZWFzb25zICYgUkVKRUNUX05PTl9GRl9IRUFEKSB7CisJCWFkdmlzZV9wdWxsX2JlZm9yZV9wdXNoKCk7CisJfSBlbHNlIGlmIChyZWplY3RfcmVhc29ucyAmIFJFSkVDVF9OT05fRkZfT1RIRVIpIHsKKwkJYWR2aXNlX2NoZWNrb3V0X3B1bGxfcHVzaCgpOworCX0gZWxzZSBpZiAocmVqZWN0X3JlYXNvbnMgJiBSRUpFQ1RfQUxSRUFEWV9FWElTVFMpIHsKKwkJYWR2aXNlX3JlZl9hbHJlYWR5X2V4aXN0cygpOworCX0gZWxzZSBpZiAocmVqZWN0X3JlYXNvbnMgJiBSRUpFQ1RfRkVUQ0hfRklSU1QpIHsKKwkJYWR2aXNlX3JlZl9mZXRjaF9maXJzdCgpOworCX0gZWxzZSBpZiAocmVqZWN0X3JlYXNvbnMgJiBSRUpFQ1RfTkVFRFNfRk9SQ0UpIHsKKwkJYWR2aXNlX3JlZl9uZWVkc19mb3JjZSgpOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGRvX3B1c2goY29uc3QgY2hhciAqcmVwbywgaW50IGZsYWdzKQoreworCWludCBpLCBlcnJzOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZSA9IHB1c2hyZW1vdGVfZ2V0KHJlcG8pOworCWNvbnN0IGNoYXIgKip1cmw7CisJaW50IHVybF9ucjsKKworCWlmICghcmVtb3RlKSB7CisJCWlmIChyZXBvKQorCQkJZGllKF8oImJhZCByZXBvc2l0b3J5ICclcyciKSwgcmVwbyk7CisJCWRpZShfKCJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisJCSAgICAiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlIHJlcG9zaXRvcnkgdXNpbmdcbiIKKwkJICAgICJcbiIKKwkJICAgICIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisJCSAgICAiXG4iCisJCSAgICAiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKwkJICAgICJcbiIKKwkJICAgICIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iKSk7CisJfQorCisJaWYgKHJlbW90ZS0+bWlycm9yKQorCQlmbGFncyB8PSAoVFJBTlNQT1JUX1BVU0hfTUlSUk9SfFRSQU5TUE9SVF9QVVNIX0ZPUkNFKTsKKworCWlmICgoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BTEwpICYmIHJlZnNwZWMpIHsKKwkJaWYgKCFzdHJjbXAoKnJlZnNwZWMsICJyZWZzL3RhZ3MvKiIpKQorCQkJcmV0dXJuIGVycm9yKF8oIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIpKTsKKwkJcmV0dXJuIGVycm9yKF8oIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiKSk7CisJfQorCisJaWYgKChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUikgJiYgcmVmc3BlYykgeworCQlpZiAoIXN0cmNtcCgqcmVmc3BlYywgInJlZnMvdGFncy8qIikpCisJCQlyZXR1cm4gZXJyb3IoXygiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIikpOworCQlyZXR1cm4gZXJyb3IoXygiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIpKTsKKwl9CisKKwlpZiAoKGZsYWdzICYgKFRSQU5TUE9SVF9QVVNIX0FMTHxUUkFOU1BPUlRfUFVTSF9NSVJST1IpKSA9PQorCQkJCShUUkFOU1BPUlRfUFVTSF9BTEx8VFJBTlNQT1JUX1BVU0hfTUlSUk9SKSkgeworCQlyZXR1cm4gZXJyb3IoXygiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiKSk7CisJfQorCisJaWYgKCFyZWZzcGVjICYmICEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9BTEwpKSB7CisJCWlmIChyZW1vdGUtPnB1c2hfcmVmc3BlY19ucikgeworCQkJcmVmc3BlYyA9IHJlbW90ZS0+cHVzaF9yZWZzcGVjOworCQkJcmVmc3BlY19uciA9IHJlbW90ZS0+cHVzaF9yZWZzcGVjX25yOworCQl9IGVsc2UgaWYgKCEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9NSVJST1IpKQorCQkJc2V0dXBfZGVmYXVsdF9wdXNoX3JlZnNwZWNzKHJlbW90ZSk7CisJfQorCWVycnMgPSAwOworCXVybF9uciA9IHB1c2hfdXJsX29mX3JlbW90ZShyZW1vdGUsICZ1cmwpOworCWlmICh1cmxfbnIpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVybF9ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQgPQorCQkJCXRyYW5zcG9ydF9nZXQocmVtb3RlLCB1cmxbaV0pOworCQkJaWYgKHB1c2hfd2l0aF9vcHRpb25zKHRyYW5zcG9ydCwgZmxhZ3MpKQorCQkJCWVycnMrKzsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCA9CisJCQl0cmFuc3BvcnRfZ2V0KHJlbW90ZSwgTlVMTCk7CisKKwkJaWYgKHB1c2hfd2l0aF9vcHRpb25zKHRyYW5zcG9ydCwgZmxhZ3MpKQorCQkJZXJycysrOworCX0KKwlyZXR1cm4gISFlcnJzOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9wYXJzZV9yZWN1cnNlX3N1Ym1vZHVsZXMoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCSAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWludCAqZmxhZ3MgPSBvcHQtPnZhbHVlOworCisJaWYgKCpmbGFncyAmIChUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX0NIRUNLIHwKKwkJICAgICAgVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQpKQorCQlkaWUoIiVzIGNhbiBvbmx5IGJlIHVzZWQgb25jZS4iLCBvcHQtPmxvbmdfbmFtZSk7CisKKwlpZiAoYXJnKSB7CisJCWlmICghc3RyY21wKGFyZywgImNoZWNrIikpCisJCQkqZmxhZ3MgfD0gVFJBTlNQT1JUX1JFQ1VSU0VfU1VCTU9EVUxFU19DSEVDSzsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJvbi1kZW1hbmQiKSkKKwkJCSpmbGFncyB8PSBUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORDsKKwkJZWxzZQorCQkJZGllKCJiYWQgJXMgYXJndW1lbnQ6ICVzIiwgb3B0LT5sb25nX25hbWUsIGFyZyk7CisJfSBlbHNlCisJCWRpZSgib3B0aW9uICVzIG5lZWRzIGFuIGFyZ3VtZW50IChjaGVja3xvbi1kZW1hbmQpIiwKKwkJCQlvcHQtPmxvbmdfbmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X3B1c2hfY2VydF9mbGFncyhpbnQgKmZsYWdzLCBpbnQgdikKK3sKKwlzd2l0Y2ggKHYpIHsKKwljYXNlIFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVI6CisJCSpmbGFncyAmPSB+KFRSQU5TUE9SVF9QVVNIX0NFUlRfQUxXQVlTIHwgVFJBTlNQT1JUX1BVU0hfQ0VSVF9JRl9BU0tFRCk7CisJCWJyZWFrOworCWNhc2UgU0VORF9QQUNLX1BVU0hfQ0VSVF9BTFdBWVM6CisJCSpmbGFncyB8PSBUUkFOU1BPUlRfUFVTSF9DRVJUX0FMV0FZUzsKKwkJKmZsYWdzICY9IH5UUkFOU1BPUlRfUFVTSF9DRVJUX0lGX0FTS0VEOworCQlicmVhazsKKwljYXNlIFNFTkRfUEFDS19QVVNIX0NFUlRfSUZfQVNLRUQ6CisJCSpmbGFncyB8PSBUUkFOU1BPUlRfUFVTSF9DRVJUX0lGX0FTS0VEOworCQkqZmxhZ3MgJj0gflRSQU5TUE9SVF9QVVNIX0NFUlRfQUxXQVlTOworCQlicmVhazsKKwl9Cit9CisKKworc3RhdGljIGludCBnaXRfcHVzaF9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJaW50ICpmbGFncyA9IGNiOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBnaXRfZ3BnX2NvbmZpZyhrLCB2LCBOVUxMKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKCFzdHJjbXAoaywgInB1c2guZm9sbG93dGFncyIpKSB7CisJCWlmIChnaXRfY29uZmlnX2Jvb2woaywgdikpCisJCQkqZmxhZ3MgfD0gVFJBTlNQT1JUX1BVU0hfRk9MTE9XX1RBR1M7CisJCWVsc2UKKwkJCSpmbGFncyAmPSB+VFJBTlNQT1JUX1BVU0hfRk9MTE9XX1RBR1M7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChrLCAicHVzaC5ncGdzaWduIikpIHsKKwkJY29uc3QgY2hhciAqdmFsdWU7CisJCWlmICghZ2l0X2NvbmZpZ19nZXRfdmFsdWUoInB1c2guZ3Bnc2lnbiIsICZ2YWx1ZSkpIHsKKwkJCXN3aXRjaCAoZ2l0X2NvbmZpZ19tYXliZV9ib29sKCJwdXNoLmdwZ3NpZ24iLCB2YWx1ZSkpIHsKKwkJCWNhc2UgMDoKKwkJCQlzZXRfcHVzaF9jZXJ0X2ZsYWdzKGZsYWdzLCBTRU5EX1BBQ0tfUFVTSF9DRVJUX05FVkVSKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlzZXRfcHVzaF9jZXJ0X2ZsYWdzKGZsYWdzLCBTRU5EX1BBQ0tfUFVTSF9DRVJUX0FMV0FZUyk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImlmLWFza2VkIikpCisJCQkJCXNldF9wdXNoX2NlcnRfZmxhZ3MoZmxhZ3MsIFNFTkRfUEFDS19QVVNIX0NFUlRfSUZfQVNLRUQpOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIGVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciAnJXMnIiwgayk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKGssIHYsIE5VTEwpOworfQorCitpbnQgY21kX3B1c2goaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGZsYWdzID0gMDsKKwlpbnQgdGFncyA9IDA7CisJaW50IHB1c2hfY2VydCA9IC0xOworCWludCByYzsKKwljb25zdCBjaGFyICpyZXBvID0gTlVMTDsJLyogZGVmYXVsdCByZXBvc2l0b3J5ICovCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TSVRZKCZ2ZXJib3NpdHkpLAorCQlPUFRfU1RSSU5HKCAwICwgInJlcG8iLCAmcmVwbywgTl8oInJlcG9zaXRvcnkiKSwgTl8oInJlcG9zaXRvcnkiKSksCisJCU9QVF9CSVQoIDAgLCAiYWxsIiwgJmZsYWdzLCBOXygicHVzaCBhbGwgcmVmcyIpLCBUUkFOU1BPUlRfUFVTSF9BTEwpLAorCQlPUFRfQklUKCAwICwgIm1pcnJvciIsICZmbGFncywgTl8oIm1pcnJvciBhbGwgcmVmcyIpLAorCQkJICAgIChUUkFOU1BPUlRfUFVTSF9NSVJST1J8VFJBTlNQT1JUX1BVU0hfRk9SQ0UpKSwKKwkJT1BUX0JPT0woIDAsICJkZWxldGUiLCAmZGVsZXRlcmVmcywgTl8oImRlbGV0ZSByZWZzIikpLAorCQlPUFRfQk9PTCggMCAsICJ0YWdzIiwgJnRhZ3MsIE5fKCJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiKSksCisJCU9QVF9CSVQoJ24nICwgImRyeS1ydW4iLCAmZmxhZ3MsIE5fKCJkcnkgcnVuIiksIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU4pLAorCQlPUFRfQklUKCAwLCAgInBvcmNlbGFpbiIsICZmbGFncywgTl8oIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IiksIFRSQU5TUE9SVF9QVVNIX1BPUkNFTEFJTiksCisJCU9QVF9CSVQoJ2YnLCAiZm9yY2UiLCAmZmxhZ3MsIE5fKCJmb3JjZSB1cGRhdGVzIiksIFRSQU5TUE9SVF9QVVNIX0ZPUkNFKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssCisJCSAgMCwgQ0FTX09QVF9OQU1FLCAmY2FzLCBOXygicmVmbmFtZT46PGV4cGVjdCIpLAorCQkgIE5fKCJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIpLAorCQkgIFBBUlNFX09QVF9PUFRBUkcsIHBhcnNlb3B0X3B1c2hfY2FzX29wdGlvbiB9LAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgInJlY3Vyc2Utc3VibW9kdWxlcyIsICZmbGFncywgImNoZWNrfG9uLWRlbWFuZCIsCisJCQlOXygiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIiksCisJCQlQQVJTRV9PUFRfT1BUQVJHLCBvcHRpb25fcGFyc2VfcmVjdXJzZV9zdWJtb2R1bGVzIH0sCisJCU9QVF9CT09MKCAwICwgInRoaW4iLCAmdGhpbiwgTl8oInVzZSB0aGluIHBhY2siKSksCisJCU9QVF9TVFJJTkcoIDAgLCAicmVjZWl2ZS1wYWNrIiwgJnJlY2VpdmVwYWNrLCAicmVjZWl2ZS1wYWNrIiwgTl8oInJlY2VpdmUgcGFjayBwcm9ncmFtIikpLAorCQlPUFRfU1RSSU5HKCAwICwgImV4ZWMiLCAmcmVjZWl2ZXBhY2ssICJyZWNlaXZlLXBhY2siLCBOXygicmVjZWl2ZSBwYWNrIHByb2dyYW0iKSksCisJCU9QVF9CSVQoJ3UnLCAic2V0LXVwc3RyZWFtIiwgJmZsYWdzLCBOXygic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiKSwKKwkJCVRSQU5TUE9SVF9QVVNIX1NFVF9VUFNUUkVBTSksCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZwcm9ncmVzcywgTl8oImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwkJT1BUX0JJVCgwLCAicHJ1bmUiLCAmZmxhZ3MsIE5fKCJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIpLAorCQkJVFJBTlNQT1JUX1BVU0hfUFJVTkUpLAorCQlPUFRfQklUKDAsICJuby12ZXJpZnkiLCAmZmxhZ3MsIE5fKCJieXBhc3MgcHJlLXB1c2ggaG9vayIpLCBUUkFOU1BPUlRfUFVTSF9OT19IT09LKSwKKwkJT1BUX0JJVCgwLCAiZm9sbG93LXRhZ3MiLCAmZmxhZ3MsIE5fKCJwdXNoIG1pc3NpbmcgYnV0IHJlbGV2YW50IHRhZ3MiKSwKKwkJCVRSQU5TUE9SVF9QVVNIX0ZPTExPV19UQUdTKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssCisJCSAgMCwgInNpZ25lZCIsICZwdXNoX2NlcnQsICJ5ZXN8bm98aWYtYXNrZWQiLCBOXygiR1BHIHNpZ24gdGhlIHB1c2giKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBvcHRpb25fcGFyc2VfcHVzaF9zaWduZWQgfSwKKwkJT1BUX0JJVCgwLCAiYXRvbWljIiwgJmZsYWdzLCBOXygicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiKSwgVFJBTlNQT1JUX1BVU0hfQVRPTUlDKSwKKwkJT1BUX0VORCgpCisJfTsKKworCXBhY2tldF90cmFjZV9pZGVudGl0eSgicHVzaCIpOworCWdpdF9jb25maWcoZ2l0X3B1c2hfY29uZmlnLCAmZmxhZ3MpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgcHVzaF91c2FnZSwgMCk7CisJc2V0X3B1c2hfY2VydF9mbGFncygmZmxhZ3MsIHB1c2hfY2VydCk7CisKKwlpZiAoZGVsZXRlcmVmcyAmJiAodGFncyB8fCAoZmxhZ3MgJiAoVFJBTlNQT1JUX1BVU0hfQUxMIHwgVFJBTlNQT1JUX1BVU0hfTUlSUk9SKSkpKQorCQlkaWUoXygiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiKSk7CisJaWYgKGRlbGV0ZXJlZnMgJiYgYXJnYyA8IDIpCisJCWRpZShfKCItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIpKTsKKworCWlmICh0YWdzKQorCQlhZGRfcmVmc3BlYygicmVmcy90YWdzLyoiKTsKKworCWlmIChhcmdjID4gMCkgeworCQlyZXBvID0gYXJndlswXTsKKwkJc2V0X3JlZnNwZWNzKGFyZ3YgKyAxLCBhcmdjIC0gMSwgcmVwbyk7CisJfQorCisJcmMgPSBkb19wdXNoKHJlcG8sIGZsYWdzKTsKKwlpZiAocmMgPT0gLTEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhwdXNoX3VzYWdlLCBvcHRpb25zKTsKKwllbHNlCisJCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVhZC10cmVlLmMgYi9idWlsdGluL3JlYWQtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNjkzZTcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlYWQtdHJlZS5jCkBAIC0wLDAgKzEsMjQ5IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorCitzdGF0aWMgaW50IG5yX3RyZWVzOworc3RhdGljIGludCByZWFkX2VtcHR5Oworc3RhdGljIHN0cnVjdCB0cmVlICp0cmVlc1tNQVhfVU5QQUNLX1RSRUVTXTsKKworc3RhdGljIGludCBsaXN0X3RyZWUodW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKKworCWlmIChucl90cmVlcyA+PSBNQVhfVU5QQUNLX1RSRUVTKQorCQlkaWUoIkkgY2Fubm90IHJlYWQgbW9yZSB0aGFuICVkIHRyZWVzIiwgTUFYX1VOUEFDS19UUkVFUyk7CisJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3Qoc2hhMSk7CisJaWYgKCF0cmVlKQorCQlyZXR1cm4gLTE7CisJdHJlZXNbbnJfdHJlZXMrK10gPSB0cmVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlYWRfdHJlZV91c2FnZVtdID0geworCU5fKCJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pIFstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLWluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgaW5kZXhfb3V0cHV0X2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSBpbnQgdW5zZXQpCit7CisJc2V0X2FsdGVybmF0ZV9pbmRleF9vdXRwdXQoYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleGNsdWRlX3Blcl9kaXJlY3RvcnlfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsCisJCQkJICAgIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqb3B0czsKKworCW9wdHMgPSAoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICopb3B0LT52YWx1ZTsKKworCWlmIChvcHRzLT5kaXIpCisJCWRpZSgibW9yZSB0aGFuIG9uZSAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeSBnaXZlbi4iKTsKKworCWRpciA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpvcHRzLT5kaXIpKTsKKwlkaXItPmZsYWdzIHw9IERJUl9TSE9XX0lHTk9SRUQ7CisJZGlyLT5leGNsdWRlX3Blcl9kaXIgPSBhcmc7CisJb3B0cy0+ZGlyID0gZGlyOworCS8qIFdlIGRvIG5vdCBuZWVkIHRvIG5vciB3YW50IHRvIGRvIHJlYWQtZGlyZWN0b3J5CisJICogaGVyZTsgd2UgYXJlIG1lcmVseSBpbnRlcmVzdGVkIGluIHJldXNpbmcgdGhlCisJICogcGVyIGRpcmVjdG9yeSBpZ25vcmUgc3RhY2sgbWVjaGFuaXNtLgorCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z19zdGFnZShjb25zdCBjaGFyICpsYWJlbCwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlwcmludGYoIiVzICIsIGxhYmVsKTsKKwlpZiAoIWNlKQorCQlwcmludGYoIihtaXNzaW5nKVxuIik7CisJZWxzZSBpZiAoY2UgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCXByaW50ZigiKGNvbmZsaWN0KVxuIik7CisJZWxzZQorCQlwcmludGYoIiUwNm8gIyVkICVzICUuOHNcbiIsCisJCSAgICAgICBjZS0+Y2VfbW9kZSwgY2Vfc3RhZ2UoY2UpLCBjZS0+bmFtZSwKKwkJICAgICAgIHNoYTFfdG9faGV4KGNlLT5zaGExKSk7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnN0YWdlcywKKwkJICAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpbnQgaTsKKworCXByaW50ZigiKiAlZC13YXkgbWVyZ2VcbiIsIG8tPm1lcmdlX3NpemUpOworCWRlYnVnX3N0YWdlKCJpbmRleCIsIHN0YWdlc1swXSwgbyk7CisJZm9yIChpID0gMTsgaSA8PSBvLT5tZXJnZV9zaXplOyBpKyspIHsKKwkJY2hhciBidWZbMjRdOworCQl4c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImVudCMlZCIsIGkpOworCQlkZWJ1Z19zdGFnZShidWYsIHN0YWdlc1tpXSwgbyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBsb2NrX2ZpbGU7CisKK2ludCBjbWRfcmVhZF90cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqdW51c2VkX3ByZWZpeCkKK3sKKwlpbnQgaSwgc3RhZ2UgPSAwOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCWludCBwcmVmaXhfc2V0ID0gMDsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIHJlYWRfdHJlZV9vcHRpb25zW10gPSB7CisJCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiaW5kZXgtb3V0cHV0IiwgTlVMTCwgTl8oImZpbGUiKSwKKwkJICBOXygid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIpLAorCQkgIFBBUlNFX09QVF9OT05FRywgaW5kZXhfb3V0cHV0X2NiIH0sCisJCU9QVF9TRVRfSU5UKDAsICJlbXB0eSIsICZyZWFkX2VtcHR5LAorCQkJICAgIE5fKCJvbmx5IGVtcHR5IHRoZSBpbmRleCIpLCAxKSwKKwkJT1BUX19WRVJCT1NFKCZvcHRzLnZlcmJvc2VfdXBkYXRlLCBOXygiYmUgdmVyYm9zZSIpKSwKKwkJT1BUX0dST1VQKE5fKCJNZXJnaW5nIikpLAorCQlPUFRfU0VUX0lOVCgnbScsIE5VTEwsICZvcHRzLm1lcmdlLAorCQkJICAgIE5fKCJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIiksIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAidHJpdmlhbCIsICZvcHRzLnRyaXZpYWxfbWVyZ2VzX29ubHksCisJCQkgICAgTl8oIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIpLCAxKSwKKwkJT1BUX1NFVF9JTlQoMCwgImFnZ3Jlc3NpdmUiLCAmb3B0cy5hZ2dyZXNzaXZlLAorCQkJICAgIE5fKCIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIiksIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAicmVzZXQiLCAmb3B0cy5yZXNldCwKKwkJCSAgICBOXygic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIpLCAxKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAwLCAicHJlZml4IiwgJm9wdHMucHJlZml4LCBOXygiPHN1YmRpcmVjdG9yeT4vIiksCisJCSAgTl8oInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIiksCisJCSAgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX0xJVEVSQUxfQVJHSEVMUCB9LAorCQlPUFRfU0VUX0lOVCgndScsIE5VTEwsICZvcHRzLnVwZGF0ZSwKKwkJCSAgICBOXygidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIpLCAxKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJleGNsdWRlLXBlci1kaXJlY3RvcnkiLCAmb3B0cywKKwkJICBOXygiZ2l0aWdub3JlIiksCisJCSAgTl8oImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIpLAorCQkgIFBBUlNFX09QVF9OT05FRywgZXhjbHVkZV9wZXJfZGlyZWN0b3J5X2NiIH0sCisJCU9QVF9TRVRfSU5UKCdpJywgTlVMTCwgJm9wdHMuaW5kZXhfb25seSwKKwkJCSAgICBOXygiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIiksIDEpLAorCQlPUFRfX0RSWV9SVU4oJm9wdHMuZHJ5X3J1biwgTl8oImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgIm5vLXNwYXJzZS1jaGVja291dCIsICZvcHRzLnNraXBfc3BhcnNlX2NoZWNrb3V0LAorCQkJICAgIE5fKCJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiKSwgMSksCisJCU9QVF9TRVRfSU5UKDAsICJkZWJ1Zy11bnBhY2siLCAmb3B0cy5kZWJ1Z191bnBhY2ssCisJCQkgICAgTl8oImRlYnVnIHVucGFjay10cmVlcyIpLCAxKSwKKwkJT1BUX0VORCgpCisJfTsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlvcHRzLmhlYWRfaWR4ID0gLTE7CisJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHVudXNlZF9wcmVmaXgsIHJlYWRfdHJlZV9vcHRpb25zLAorCQkJICAgICByZWFkX3RyZWVfdXNhZ2UsIDApOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CisKKwlwcmVmaXhfc2V0ID0gb3B0cy5wcmVmaXggPyAxIDogMDsKKwlpZiAoMSA8IG9wdHMubWVyZ2UgKyBvcHRzLnJlc2V0ICsgcHJlZml4X3NldCkKKwkJZGllKCJXaGljaCBvbmU/IC1tLCAtLXJlc2V0LCBvciAtLXByZWZpeD8iKTsKKworCS8qCisJICogTkVFRFNXT1JLCisJICoKKwkgKiBUaGUgb2xkIGluZGV4IHNob3VsZCBiZSByZWFkIGFueXdheSBldmVuIGlmIHdlJ3JlIGdvaW5nIHRvCisJICogZGVzdHJveSBhbGwgaW5kZXggZW50cmllcyBiZWNhdXNlIHdlIHN0aWxsIG5lZWQgdG8gcHJlc2VydmUKKwkgKiBjZXJ0YWluIGluZm9ybWF0aW9uIHN1Y2ggYXMgaW5kZXggdmVyc2lvbiBvciBzcGxpdC1pbmRleAorCSAqIG1vZGUuCisJICovCisKKwlpZiAob3B0cy5yZXNldCB8fCBvcHRzLm1lcmdlIHx8IG9wdHMucHJlZml4KSB7CisJCWlmIChyZWFkX2NhY2hlX3VubWVyZ2VkKCkgJiYgKG9wdHMucHJlZml4IHx8IG9wdHMubWVyZ2UpKQorCQkJZGllKCJZb3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIpOworCQlzdGFnZSA9IG9wdHMubWVyZ2UgPSAxOworCX0KKwlyZXNvbHZlX3VuZG9fY2xlYXIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKworCQlpZiAoZ2V0X3NoYTEoYXJnLCBzaGExKSkKKwkJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiLCBhcmcpOworCQlpZiAobGlzdF90cmVlKHNoYTEpIDwgMCkKKwkJCWRpZSgiZmFpbGVkIHRvIHVucGFjayB0cmVlIG9iamVjdCAlcyIsIGFyZyk7CisJCXN0YWdlKys7CisJfQorCWlmIChucl90cmVlcyA9PSAwICYmICFyZWFkX2VtcHR5KQorCQl3YXJuaW5nKCJyZWFkLXRyZWU6IGVtcHR5aW5nIHRoZSBpbmRleCB3aXRoIG5vIGFyZ3VtZW50cyBpcyBkZXByZWNhdGVkOyB1c2UgLS1lbXB0eSIpOworCWVsc2UgaWYgKG5yX3RyZWVzID4gMCAmJiByZWFkX2VtcHR5KQorCQlkaWUoInBhc3NpbmcgdHJlZXMgYXMgYXJndW1lbnRzIGNvbnRyYWRpY3RzIC0tZW1wdHkiKTsKKworCWlmICgxIDwgb3B0cy5pbmRleF9vbmx5ICsgb3B0cy51cGRhdGUpCisJCWRpZSgiLXUgYW5kIC1pIGF0IHRoZSBzYW1lIHRpbWUgbWFrZXMgbm8gc2Vuc2UiKTsKKwlpZiAoKG9wdHMudXBkYXRlIHx8IG9wdHMuaW5kZXhfb25seSkgJiYgIW9wdHMubWVyZ2UpCisJCWRpZSgiJXMgaXMgbWVhbmluZ2xlc3Mgd2l0aG91dCAtbSwgLS1yZXNldCwgb3IgLS1wcmVmaXgiLAorCQkgICAgb3B0cy51cGRhdGUgPyAiLXUiIDogIi1pIik7CisJaWYgKChvcHRzLmRpciAmJiAhb3B0cy51cGRhdGUpKQorCQlkaWUoIi0tZXhjbHVkZS1wZXItZGlyZWN0b3J5IGlzIG1lYW5pbmdsZXNzIHVubGVzcyAtdSIpOworCWlmIChvcHRzLm1lcmdlICYmICFvcHRzLmluZGV4X29ubHkpCisJCXNldHVwX3dvcmtfdHJlZSgpOworCisJaWYgKG9wdHMubWVyZ2UpIHsKKwkJaWYgKHN0YWdlIDwgMikKKwkJCWRpZSgianVzdCBob3cgZG8geW91IGV4cGVjdCBtZSB0byBtZXJnZSAlZCB0cmVlcz8iLCBzdGFnZS0xKTsKKwkJc3dpdGNoIChzdGFnZSAtIDEpIHsKKwkJY2FzZSAxOgorCQkJb3B0cy5mbiA9IG9wdHMucHJlZml4ID8gYmluZF9tZXJnZSA6IG9uZXdheV9tZXJnZTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlvcHRzLmZuID0gdHdvd2F5X21lcmdlOworCQkJb3B0cy5pbml0aWFsX2NoZWNrb3V0ID0gaXNfY2FjaGVfdW5ib3JuKCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQlkZWZhdWx0OgorCQkJb3B0cy5mbiA9IHRocmVld2F5X21lcmdlOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc3RhZ2UgLSAxID49IDMpCisJCQlvcHRzLmhlYWRfaWR4ID0gc3RhZ2UgLSAyOworCQllbHNlCisJCQlvcHRzLmhlYWRfaWR4ID0gMTsKKwl9CisKKwlpZiAob3B0cy5kZWJ1Z191bnBhY2spCisJCW9wdHMuZm4gPSBkZWJ1Z19tZXJnZTsKKworCWNhY2hlX3RyZWVfZnJlZSgmYWN0aXZlX2NhY2hlX3RyZWUpOworCWZvciAoaSA9IDA7IGkgPCBucl90cmVlczsgaSsrKSB7CisJCXN0cnVjdCB0cmVlICp0cmVlID0gdHJlZXNbaV07CisJCXBhcnNlX3RyZWUodHJlZSk7CisJCWluaXRfdHJlZV9kZXNjKHQraSwgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwl9CisJaWYgKHVucGFja190cmVlcyhucl90cmVlcywgdCwgJm9wdHMpKQorCQlyZXR1cm4gMTI4OworCisJaWYgKG9wdHMuZGVidWdfdW5wYWNrIHx8IG9wdHMuZHJ5X3J1bikKKwkJcmV0dXJuIDA7IC8qIGRvIG5vdCB3cml0ZSB0aGUgaW5kZXggb3V0ICovCisKKwkvKgorCSAqIFdoZW4gcmVhZGluZyBvbmx5IG9uZSB0cmVlIChlaXRoZXIgdGhlIG1vc3QgYmFzaWMgZm9ybSwKKwkgKiAiLW0gZW50IiBvciAiLS1yZXNldCBlbnQiIGZvcm0pLCB3ZSBjYW4gb2J0YWluIGEgZnVsbHkKKwkgKiB2YWxpZCBjYWNoZS10cmVlIGJlY2F1c2UgdGhlIGluZGV4IG11c3QgbWF0Y2ggZXhhY3RseQorCSAqIHdoYXQgY2FtZSBmcm9tIHRoZSB0cmVlLgorCSAqLworCWlmIChucl90cmVlcyA9PSAxICYmICFvcHRzLnByZWZpeCkKKwkJcHJpbWVfY2FjaGVfdHJlZSgmdGhlX2luZGV4LCB0cmVlc1swXSk7CisKKwlpZiAod3JpdGVfbG9ja2VkX2luZGV4KCZ0aGVfaW5kZXgsICZsb2NrX2ZpbGUsIENPTU1JVF9MT0NLKSkKKwkJZGllKCJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVjZWl2ZS1wYWNrLmMgYi9idWlsdGluL3JlY2VpdmUtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjYjYyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlY2VpdmUtcGFjay5jCkBAIC0wLDAgKzEsMTc5NiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisjaW5jbHVkZSAiY29ubmVjdGVkLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJmc2NrLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHJlY2VpdmVfcGFja191c2FnZVtdID0gImdpdCByZWNlaXZlLXBhY2sgPGdpdC1kaXI+IjsKKworZW51bSBkZW55X2FjdGlvbiB7CisJREVOWV9VTkNPTkZJR1VSRUQsCisJREVOWV9JR05PUkUsCisJREVOWV9XQVJOLAorCURFTllfUkVGVVNFLAorCURFTllfVVBEQVRFX0lOU1RFQUQKK307CisKK3N0YXRpYyBpbnQgZGVueV9kZWxldGVzOworc3RhdGljIGludCBkZW55X25vbl9mYXN0X2ZvcndhcmRzOworc3RhdGljIGVudW0gZGVueV9hY3Rpb24gZGVueV9jdXJyZW50X2JyYW5jaCA9IERFTllfVU5DT05GSUdVUkVEOworc3RhdGljIGVudW0gZGVueV9hY3Rpb24gZGVueV9kZWxldGVfY3VycmVudCA9IERFTllfVU5DT05GSUdVUkVEOworc3RhdGljIGludCByZWNlaXZlX2ZzY2tfb2JqZWN0cyA9IC0xOworc3RhdGljIGludCB0cmFuc2Zlcl9mc2NrX29iamVjdHMgPSAtMTsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGZzY2tfbXNnX3R5cGVzID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgaW50IHJlY2VpdmVfdW5wYWNrX2xpbWl0ID0gLTE7CitzdGF0aWMgaW50IHRyYW5zZmVyX3VucGFja19saW1pdCA9IC0xOworc3RhdGljIGludCBhZHZlcnRpc2VfYXRvbWljX3B1c2ggPSAxOworc3RhdGljIGludCB1bnBhY2tfbGltaXQgPSAxMDA7CitzdGF0aWMgaW50IHJlcG9ydF9zdGF0dXM7CitzdGF0aWMgaW50IHVzZV9zaWRlYmFuZDsKK3N0YXRpYyBpbnQgdXNlX2F0b21pYzsKK3N0YXRpYyBpbnQgcXVpZXQ7CitzdGF0aWMgaW50IHByZWZlcl9vZnNfZGVsdGEgPSAxOworc3RhdGljIGludCBhdXRvX3VwZGF0ZV9zZXJ2ZXJfaW5mbzsKK3N0YXRpYyBpbnQgYXV0b19nYyA9IDE7CitzdGF0aWMgaW50IGZpeF90aGluID0gMTsKK3N0YXRpYyBpbnQgc3RhdGVsZXNzX3JwYzsKK3N0YXRpYyBjb25zdCBjaGFyICpzZXJ2aWNlX2RpcjsKK3N0YXRpYyBjb25zdCBjaGFyICpoZWFkX25hbWU7CitzdGF0aWMgdm9pZCAqaGVhZF9uYW1lX3RvX2ZyZWU7CitzdGF0aWMgaW50IHNlbnRfY2FwYWJpbGl0aWVzOworc3RhdGljIGludCBzaGFsbG93X3VwZGF0ZTsKK3N0YXRpYyBjb25zdCBjaGFyICphbHRfc2hhbGxvd19maWxlOworc3RhdGljIHN0cnVjdCBzdHJidWYgcHVzaF9jZXJ0ID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgdW5zaWduZWQgY2hhciBwdXNoX2NlcnRfc2hhMVsyMF07CitzdGF0aWMgc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWdjaGVjazsKK3N0YXRpYyBjb25zdCBjaGFyICpwdXNoX2NlcnRfbm9uY2U7CitzdGF0aWMgY29uc3QgY2hhciAqY2VydF9ub25jZV9zZWVkOworCitzdGF0aWMgY29uc3QgY2hhciAqTk9OQ0VfVU5TT0xJQ0lURUQgPSAiVU5TT0xJQ0lURUQiOworc3RhdGljIGNvbnN0IGNoYXIgKk5PTkNFX0JBRCA9ICJCQUQiOworc3RhdGljIGNvbnN0IGNoYXIgKk5PTkNFX01JU1NJTkcgPSAiTUlTU0lORyI7CitzdGF0aWMgY29uc3QgY2hhciAqTk9OQ0VfT0sgPSAiT0siOworc3RhdGljIGNvbnN0IGNoYXIgKk5PTkNFX1NMT1AgPSAiU0xPUCI7CitzdGF0aWMgY29uc3QgY2hhciAqbm9uY2Vfc3RhdHVzOworc3RhdGljIGxvbmcgbm9uY2Vfc3RhbXBfc2xvcDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG5vbmNlX3N0YW1wX3Nsb3BfbGltaXQ7CitzdGF0aWMgc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisKK3N0YXRpYyBlbnVtIGRlbnlfYWN0aW9uIHBhcnNlX2RlbnlfYWN0aW9uKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKHZhbHVlKSB7CisJCWlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImlnbm9yZSIpKQorCQkJcmV0dXJuIERFTllfSUdOT1JFOworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJ3YXJuIikpCisJCQlyZXR1cm4gREVOWV9XQVJOOworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJyZWZ1c2UiKSkKKwkJCXJldHVybiBERU5ZX1JFRlVTRTsKKwkJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAidXBkYXRlaW5zdGVhZCIpKQorCQkJcmV0dXJuIERFTllfVVBEQVRFX0lOU1RFQUQ7CisJfQorCWlmIChnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCXJldHVybiBERU5ZX1JFRlVTRTsKKwlyZXR1cm4gREVOWV9JR05PUkU7Cit9CisKK3N0YXRpYyBpbnQgcmVjZWl2ZV9wYWNrX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlpbnQgc3RhdHVzID0gcGFyc2VfaGlkZV9yZWZzX2NvbmZpZyh2YXIsIHZhbHVlLCAicmVjZWl2ZSIpOworCisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5kZW55ZGVsZXRlcyIpID09IDApIHsKKwkJZGVueV9kZWxldGVzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuZGVueW5vbmZhc3Rmb3J3YXJkcyIpID09IDApIHsKKwkJZGVueV9ub25fZmFzdF9mb3J3YXJkcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLnVucGFja2xpbWl0IikgPT0gMCkgeworCQlyZWNlaXZlX3VucGFja19saW1pdCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInRyYW5zZmVyLnVucGFja2xpbWl0IikgPT0gMCkgeworCQl0cmFuc2Zlcl91bnBhY2tfbGltaXQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmZzY2suc2tpcGxpc3QiKSA9PSAwKSB7CisJCWNvbnN0IGNoYXIgKnBhdGg7CisKKwkJaWYgKGdpdF9jb25maWdfcGF0aG5hbWUoJnBhdGgsIHZhciwgdmFsdWUpKQorCQkJcmV0dXJuIDE7CisJCXN0cmJ1Zl9hZGRmKCZmc2NrX21zZ190eXBlcywgIiVjc2tpcGxpc3Q9JXMiLAorCQkJZnNja19tc2dfdHlwZXMubGVuID8gJywnIDogJz0nLCBwYXRoKTsKKwkJZnJlZSgoY2hhciAqKXBhdGgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2tpcF9wcmVmaXgodmFyLCAicmVjZWl2ZS5mc2NrLiIsICZ2YXIpKSB7CisJCWlmIChpc192YWxpZF9tc2dfdHlwZSh2YXIsIHZhbHVlKSkKKwkJCXN0cmJ1Zl9hZGRmKCZmc2NrX21zZ190eXBlcywgIiVjJXM9JXMiLAorCQkJCWZzY2tfbXNnX3R5cGVzLmxlbiA/ICcsJyA6ICc9JywgdmFyLCB2YWx1ZSk7CisJCWVsc2UKKwkJCXdhcm5pbmcoIlNraXBwaW5nIHVua25vd24gbXNnIGlkICclcyciLCB2YXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuZnNja29iamVjdHMiKSA9PSAwKSB7CisJCXJlY2VpdmVfZnNja19vYmplY3RzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInRyYW5zZmVyLmZzY2tvYmplY3RzIikgPT0gMCkgeworCQl0cmFuc2Zlcl9mc2NrX29iamVjdHMgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInJlY2VpdmUuZGVueWN1cnJlbnRicmFuY2giKSkgeworCQlkZW55X2N1cnJlbnRfYnJhbmNoID0gcGFyc2VfZGVueV9hY3Rpb24odmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5kZW55ZGVsZXRlY3VycmVudCIpID09IDApIHsKKwkJZGVueV9kZWxldGVfY3VycmVudCA9IHBhcnNlX2RlbnlfYWN0aW9uKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlcGFjay51c2VkZWx0YWJhc2VvZmZzZXQiKSA9PSAwKSB7CisJCXByZWZlcl9vZnNfZGVsdGEgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS51cGRhdGVzZXJ2ZXJpbmZvIikgPT0gMCkgeworCQlhdXRvX3VwZGF0ZV9zZXJ2ZXJfaW5mbyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmF1dG9nYyIpID09IDApIHsKKwkJYXV0b19nYyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLnNoYWxsb3d1cGRhdGUiKSA9PSAwKSB7CisJCXNoYWxsb3dfdXBkYXRlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RyY21wKHZhciwgInJlY2VpdmUuY2VydG5vbmNlc2VlZCIpID09IDApCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmY2VydF9ub25jZV9zZWVkLCB2YXIsIHZhbHVlKTsKKworCWlmIChzdHJjbXAodmFyLCAicmVjZWl2ZS5jZXJ0bm9uY2VzbG9wIikgPT0gMCkgeworCQlub25jZV9zdGFtcF9zbG9wX2xpbWl0ID0gZ2l0X2NvbmZpZ191bG9uZyh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmNtcCh2YXIsICJyZWNlaXZlLmFkdmVydGlzZWF0b21pYyIpID09IDApIHsKKwkJYWR2ZXJ0aXNlX2F0b21pY19wdXNoID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpZiAocmVmX2lzX2hpZGRlbihwYXRoKSkKKwkJcmV0dXJuOworCisJaWYgKHNlbnRfY2FwYWJpbGl0aWVzKSB7CisJCXBhY2tldF93cml0ZSgxLCAiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpLCBwYXRoKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIGNhcCA9IFNUUkJVRl9JTklUOworCisJCXN0cmJ1Zl9hZGRzdHIoJmNhcCwKKwkJCSAgICAgICJyZXBvcnQtc3RhdHVzIGRlbGV0ZS1yZWZzIHNpZGUtYmFuZC02NGsgcXVpZXQiKTsKKwkJaWYgKGFkdmVydGlzZV9hdG9taWNfcHVzaCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJmNhcCwgIiBhdG9taWMiKTsKKwkJaWYgKHByZWZlcl9vZnNfZGVsdGEpCisJCQlzdHJidWZfYWRkc3RyKCZjYXAsICIgb2ZzLWRlbHRhIik7CisJCWlmIChwdXNoX2NlcnRfbm9uY2UpCisJCQlzdHJidWZfYWRkZigmY2FwLCAiIHB1c2gtY2VydD0lcyIsIHB1c2hfY2VydF9ub25jZSk7CisJCXN0cmJ1Zl9hZGRmKCZjYXAsICIgYWdlbnQ9JXMiLCBnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQoKSk7CisJCXBhY2tldF93cml0ZSgxLCAiJXMgJXMlYyVzXG4iLAorCQkJICAgICBzaGExX3RvX2hleChzaGExKSwgcGF0aCwgMCwgY2FwLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZjYXApOworCQlzZW50X2NhcGFiaWxpdGllcyA9IDE7CisJfQorfQorCitzdGF0aWMgaW50IHNob3dfcmVmX2NiKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWcsIHZvaWQgKnVudXNlZCkKK3sKKwlwYXRoID0gc3RyaXBfbmFtZXNwYWNlKHBhdGgpOworCS8qCisJICogQWR2ZXJ0aXNlIHJlZnMgb3V0c2lkZSBvdXIgY3VycmVudCBuYW1lc3BhY2UgYXMgIi5oYXZlIgorCSAqIHJlZnMsIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gdXNlIHRoZW0gdG8gbWluaW1pemUgZGF0YQorCSAqIHRyYW5zZmVyIGJ1dCB3aWxsIG90aGVyd2lzZSBpZ25vcmUgdGhlbS4gVGhpcyBoYXBwZW5zIHRvCisJICogY292ZXIgIi5oYXZlIiB0aGF0IGFyZSB0aHJvd24gaW4gYnkgYWRkX29uZV9hbHRlcm5hdGVfcmVmKCkKKwkgKiB0byBtYXJrIGhpc3RvcmllcyB0aGF0IGFyZSBjb21wbGV0ZSBpbiBvdXIgYWx0ZXJuYXRlcyBhcworCSAqIHdlbGwuCisJICovCisJaWYgKCFwYXRoKQorCQlwYXRoID0gIi5oYXZlIjsKKwlzaG93X3JlZihwYXRoLCBvaWQtPmhhc2gpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X29uZV9hbHRlcm5hdGVfc2hhMShjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCB2b2lkICp1bnVzZWQpCit7CisJc2hvd19yZWYoIi5oYXZlIiwgc2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxlY3Rfb25lX2FsdGVybmF0ZV9yZWYoY29uc3Qgc3RydWN0IHJlZiAqcmVmLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBzaGExX2FycmF5ICpzYSA9IGRhdGE7CisJc2hhMV9hcnJheV9hcHBlbmQoc2EsIHJlZi0+b2xkX3NoYTEpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9oZWFkX2luZm8odm9pZCkKK3sKKwlzdHJ1Y3Qgc2hhMV9hcnJheSBzYSA9IFNIQTFfQVJSQVlfSU5JVDsKKworCWZvcl9lYWNoX2FsdGVybmF0ZV9yZWYoY29sbGVjdF9vbmVfYWx0ZXJuYXRlX3JlZiwgJnNhKTsKKwlzaGExX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgmc2EsIHNob3dfb25lX2FsdGVybmF0ZV9zaGExLCBOVUxMKTsKKwlzaGExX2FycmF5X2NsZWFyKCZzYSk7CisJZm9yX2VhY2hfcmVmKHNob3dfcmVmX2NiLCBOVUxMKTsKKwlpZiAoIXNlbnRfY2FwYWJpbGl0aWVzKQorCQlzaG93X3JlZigiY2FwYWJpbGl0aWVzXnt9IiwgbnVsbF9zaGExKTsKKworCWFkdmVydGlzZV9zaGFsbG93X2dyYWZ0cygxKTsKKworCS8qIEVPRiAqLworCXBhY2tldF9mbHVzaCgxKTsKK30KKworc3RydWN0IGNvbW1hbmQgeworCXN0cnVjdCBjb21tYW5kICpuZXh0OworCWNvbnN0IGNoYXIgKmVycm9yX3N0cmluZzsKKwl1bnNpZ25lZCBpbnQgc2tpcF91cGRhdGU6MSwKKwkJICAgICBkaWRfbm90X2V4aXN0OjE7CisJaW50IGluZGV4OworCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCXVuc2lnbmVkIGNoYXIgbmV3X3NoYTFbMjBdOworCWNoYXIgcmVmX25hbWVbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKK3N0YXRpYyB2b2lkIHJwX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK3N0YXRpYyB2b2lkIHJwX3dhcm5pbmcoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworCitzdGF0aWMgdm9pZCByZXBvcnRfbWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJaW50IHN6OworCWNoYXIgbXNnWzQwOTZdOworCisJc3ogPSB4c25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIiVzIiwgcHJlZml4KTsKKwlzeiArPSB2c25wcmludGYobXNnICsgc3osIHNpemVvZihtc2cpIC0gc3osIGVyciwgcGFyYW1zKTsKKwlpZiAoc3ogPiAoc2l6ZW9mKG1zZykgLSAxKSkKKwkJc3ogPSBzaXplb2YobXNnKSAtIDE7CisJbXNnW3N6KytdID0gJ1xuJzsKKworCWlmICh1c2Vfc2lkZWJhbmQpCisJCXNlbmRfc2lkZWJhbmQoMSwgMiwgbXNnLCBzeiwgdXNlX3NpZGViYW5kKTsKKwllbHNlCisJCXh3cml0ZSgyLCBtc2csIHN6KTsKK30KKworc3RhdGljIHZvaWQgcnBfd2FybmluZyhjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJcmVwb3J0X21lc3NhZ2UoIndhcm5pbmc6ICIsIGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworc3RhdGljIHZvaWQgcnBfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCXJlcG9ydF9tZXNzYWdlKCJlcnJvcjogIiwgZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCitzdGF0aWMgaW50IGNvcHlfdG9fc2lkZWJhbmQoaW50IGluLCBpbnQgb3V0LCB2b2lkICphcmcpCit7CisJY2hhciBkYXRhWzEyOF07CisJd2hpbGUgKDEpIHsKKwkJc3NpemVfdCBzeiA9IHhyZWFkKGluLCBkYXRhLCBzaXplb2YoZGF0YSkpOworCQlpZiAoc3ogPD0gMCkKKwkJCWJyZWFrOworCQlzZW5kX3NpZGViYW5kKDEsIDIsIGRhdGEsIHN6LCB1c2Vfc2lkZWJhbmQpOworCX0KKwljbG9zZShpbik7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgSE1BQ19CTE9DS19TSVpFIDY0CisKK3N0YXRpYyB2b2lkIGhtYWNfc2hhMSh1bnNpZ25lZCBjaGFyICpvdXQsCisJCSAgICAgIGNvbnN0IGNoYXIgKmtleV9pbiwgc2l6ZV90IGtleV9sZW4sCisJCSAgICAgIGNvbnN0IGNoYXIgKnRleHQsIHNpemVfdCB0ZXh0X2xlbikKK3sKKwl1bnNpZ25lZCBjaGFyIGtleVtITUFDX0JMT0NLX1NJWkVdOworCXVuc2lnbmVkIGNoYXIga19pcGFkW0hNQUNfQkxPQ0tfU0laRV07CisJdW5zaWduZWQgY2hhciBrX29wYWRbSE1BQ19CTE9DS19TSVpFXTsKKwlpbnQgaTsKKwlnaXRfU0hBX0NUWCBjdHg7CisKKwkvKiBSRkMgMjEwNCAyLiAoMSkgKi8KKwltZW1zZXQoa2V5LCAnXDAnLCBITUFDX0JMT0NLX1NJWkUpOworCWlmIChITUFDX0JMT0NLX1NJWkUgPCBrZXlfbGVuKSB7CisJCWdpdF9TSEExX0luaXQoJmN0eCk7CisJCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCBrZXlfaW4sIGtleV9sZW4pOworCQlnaXRfU0hBMV9GaW5hbChrZXksICZjdHgpOworCX0gZWxzZSB7CisJCW1lbWNweShrZXksIGtleV9pbiwga2V5X2xlbik7CisJfQorCisJLyogUkZDIDIxMDQgMi4gKDIpICYgKDUpICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihrZXkpOyBpKyspIHsKKwkJa19pcGFkW2ldID0ga2V5W2ldIF4gMHgzNjsKKwkJa19vcGFkW2ldID0ga2V5W2ldIF4gMHg1YzsKKwl9CisKKwkvKiBSRkMgMjEwNCAyLiAoMykgJiAoNCkgKi8KKwlnaXRfU0hBMV9Jbml0KCZjdHgpOworCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCBrX2lwYWQsIHNpemVvZihrX2lwYWQpKTsKKwlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgdGV4dCwgdGV4dF9sZW4pOworCWdpdF9TSEExX0ZpbmFsKG91dCwgJmN0eCk7CisKKwkvKiBSRkMgMjEwNCAyLiAoNikgJiAoNykgKi8KKwlnaXRfU0hBMV9Jbml0KCZjdHgpOworCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCBrX29wYWQsIHNpemVvZihrX29wYWQpKTsKKwlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgb3V0LCAyMCk7CisJZ2l0X1NIQTFfRmluYWwob3V0LCAmY3R4KTsKK30KKworc3RhdGljIGNoYXIgKnByZXBhcmVfcHVzaF9jZXJ0X25vbmNlKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGxvbmcgc3RhbXApCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzOiVsdSIsIHBhdGgsIHN0YW1wKTsKKwlobWFjX3NoYTEoc2hhMSwgYnVmLmJ1ZiwgYnVmLmxlbiwgY2VydF9ub25jZV9zZWVkLCBzdHJsZW4oY2VydF9ub25jZV9zZWVkKSk7OworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJLyogUkZDIDIxMDQgNS4gSE1BQy1TSEExLTgwICovCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVsdS0lLipzIiwgc3RhbXAsIDIwLCBzaGExX3RvX2hleChzaGExKSk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKKy8qCisgKiBORUVEU1dPUks6IHJldXNlIGZpbmRfY29tbWl0X2hlYWRlcigpIGZyb20gamsvY29tbWl0LWF1dGhvci1wYXJzaW5nCisgKiBhZnRlciBkcm9wcGluZyAiX2NvbW1pdCIgZnJvbSBpdHMgbmFtZSBhbmQgcG9zc2libHkgbW92aW5nIGl0IG91dAorICogb2YgY29tbWl0LmMKKyAqLworc3RhdGljIGNoYXIgKmZpbmRfaGVhZGVyKGNvbnN0IGNoYXIgKm1zZywgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqa2V5KQoreworCWludCBrZXlfbGVuID0gc3RybGVuKGtleSk7CisJY29uc3QgY2hhciAqbGluZSA9IG1zZzsKKworCXdoaWxlIChsaW5lICYmIGxpbmUgPCBtc2cgKyBsZW4pIHsKKwkJY29uc3QgY2hhciAqZW9sID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCisJCWlmICgobXNnICsgbGVuIDw9IGVvbCkgfHwgbGluZSA9PSBlb2wpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGxpbmUgKyBrZXlfbGVuIDwgZW9sICYmCisJCSAgICAhbWVtY21wKGxpbmUsIGtleSwga2V5X2xlbikgJiYgbGluZVtrZXlfbGVuXSA9PSAnICcpIHsKKwkJCWludCBvZmZzZXQgPSBrZXlfbGVuICsgMTsKKwkJCXJldHVybiB4bWVtZHVweihsaW5lICsgb2Zmc2V0LCAoZW9sIC0gbGluZSkgLSBvZmZzZXQpOworCQl9CisJCWxpbmUgPSAqZW9sID8gZW9sICsgMSA6IE5VTEw7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY2hlY2tfbm9uY2UoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCWNoYXIgKm5vbmNlID0gZmluZF9oZWFkZXIoYnVmLCBsZW4sICJub25jZSIpOworCXVuc2lnbmVkIGxvbmcgc3RhbXAsIG9zdGFtcDsKKwljaGFyICpib2htYWMsICpleHBlY3QgPSBOVUxMOworCWNvbnN0IGNoYXIgKnJldHZhbCA9IE5PTkNFX0JBRDsKKworCWlmICghbm9uY2UpIHsKKwkJcmV0dmFsID0gTk9OQ0VfTUlTU0lORzsKKwkJZ290byBsZWF2ZTsKKwl9IGVsc2UgaWYgKCFwdXNoX2NlcnRfbm9uY2UpIHsKKwkJcmV0dmFsID0gTk9OQ0VfVU5TT0xJQ0lURUQ7CisJCWdvdG8gbGVhdmU7CisJfSBlbHNlIGlmICghc3RyY21wKHB1c2hfY2VydF9ub25jZSwgbm9uY2UpKSB7CisJCXJldHZhbCA9IE5PTkNFX09LOworCQlnb3RvIGxlYXZlOworCX0KKworCWlmICghc3RhdGVsZXNzX3JwYykgeworCQkvKiByZXR1cm5lZCBub25jZSBNVVNUIG1hdGNoIHdoYXQgd2UgZ2F2ZSBvdXQgZWFybGllciAqLworCQlyZXR2YWwgPSBOT05DRV9CQUQ7CisJCWdvdG8gbGVhdmU7CisJfQorCisJLyoKKwkgKiBJbiBzdGF0ZWxlc3MgbW9kZSwgd2UgbWF5IGJlIHJlY2VpdmluZyBhIG5vbmNlIGlzc3VlZCBieQorCSAqIGFub3RoZXIgaW5zdGFuY2Ugb2YgdGhlIHNlcnZlciB0aGF0IHNlcnZpbmcgdGhlIHNhbWUKKwkgKiByZXBvc2l0b3J5LCBhbmQgdGhlIHRpbWVzdGFtcHMgbWF5IG5vdCBtYXRjaCwgYnV0IHRoZQorCSAqIG5vbmNlLXNlZWQgYW5kIGRpciBzaG91bGQgbWF0Y2gsIHNvIHdlIGNhbiByZWNvbXB1dGUgYW5kCisJICogcmVwb3J0IHRoZSB0aW1lIHNsb3AuCisJICoKKwkgKiBJbiBhZGRpdGlvbiwgd2hlbiBhIG5vbmNlIGlzc3VlZCBieSBhbm90aGVyIGluc3RhbmNlIGhhcworCSAqIHRpbWVzdGFtcCB3aXRoaW4gcmVjZWl2ZS5jZXJ0bm9uY2VzbG9wIHNlY29uZHMsIHdlIHByZXRlbmQKKwkgKiBhcyBpZiB3ZSBpc3N1ZWQgdGhhdCBub25jZSB3aGVuIHJlcG9ydGluZyB0byB0aGUgaG9vay4KKwkgKi8KKworCS8qIG5vbmNlIGlzIGNvbmNhdCg8c2Vjb25kcy1zaW5jZS1lcG9jaD4sICItIiwgPGhtYWM+KSAqLworCWlmICgqbm9uY2UgPD0gJzAnIHx8ICc5JyA8ICpub25jZSkgeworCQlyZXR2YWwgPSBOT05DRV9CQUQ7CisJCWdvdG8gbGVhdmU7CisJfQorCXN0YW1wID0gc3RydG91bChub25jZSwgJmJvaG1hYywgMTApOworCWlmIChib2htYWMgPT0gbm9uY2UgfHwgYm9obWFjWzBdICE9ICctJykgeworCQlyZXR2YWwgPSBOT05DRV9CQUQ7CisJCWdvdG8gbGVhdmU7CisJfQorCisJZXhwZWN0ID0gcHJlcGFyZV9wdXNoX2NlcnRfbm9uY2Uoc2VydmljZV9kaXIsIHN0YW1wKTsKKwlpZiAoc3RyY21wKGV4cGVjdCwgbm9uY2UpKSB7CisJCS8qIE5vdCB3aGF0IHdlIHdvdWxkIGhhdmUgc2lnbmVkIGVhcmxpZXIgKi8KKwkJcmV0dmFsID0gTk9OQ0VfQkFEOworCQlnb3RvIGxlYXZlOworCX0KKworCS8qCisJICogQnkgaG93IG1hbnkgc2Vjb25kcyBpcyB0aGlzIG5vbmNlIHN0YWxlPyAgTmVnYXRpdmUgdmFsdWUKKwkgKiB3b3VsZCBtZWFuIGl0IHdhcyBpc3N1ZWQgYnkgYW5vdGhlciBzZXJ2ZXIgd2l0aCBpdHMgY2xvY2sKKwkgKiBza2V3ZWQgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KKwlvc3RhbXAgPSBzdHJ0b3VsKHB1c2hfY2VydF9ub25jZSwgTlVMTCwgMTApOworCW5vbmNlX3N0YW1wX3Nsb3AgPSAobG9uZylvc3RhbXAgLSAobG9uZylzdGFtcDsKKworCWlmIChub25jZV9zdGFtcF9zbG9wX2xpbWl0ICYmCisJICAgIGxhYnMobm9uY2Vfc3RhbXBfc2xvcCkgPD0gbm9uY2Vfc3RhbXBfc2xvcF9saW1pdCkgeworCQkvKgorCQkgKiBQcmV0ZW5kIGFzIGlmIHRoZSByZWNlaXZlZCBub25jZSAod2hpY2ggcGFzc2VzIHRoZQorCQkgKiBITUFDIGNoZWNrLCBzbyBpdCBpcyBub3QgYSBmb3JnZWQgYnkgdGhpcmQtcGFydHkpCisJCSAqIGlzIHdoYXQgd2UgaXNzdWVkLgorCQkgKi8KKwkJZnJlZSgodm9pZCAqKXB1c2hfY2VydF9ub25jZSk7CisJCXB1c2hfY2VydF9ub25jZSA9IHhzdHJkdXAobm9uY2UpOworCQlyZXR2YWwgPSBOT05DRV9PSzsKKwl9IGVsc2UgeworCQlyZXR2YWwgPSBOT05DRV9TTE9QOworCX0KKworbGVhdmU6CisJZnJlZShub25jZSk7CisJZnJlZShleHBlY3QpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfcHVzaF9jZXJ0X3NoYTEoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnByb2MpCit7CisJc3RhdGljIGludCBhbHJlYWR5X2RvbmU7CisKKwlpZiAoIXB1c2hfY2VydC5sZW4pCisJCXJldHVybjsKKworCWlmICghYWxyZWFkeV9kb25lKSB7CisJCXN0cnVjdCBzdHJidWYgZ3BnX291dHB1dCA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3Qgc3RyYnVmIGdwZ19zdGF0dXMgPSBTVFJCVUZfSU5JVDsKKwkJaW50IGJvZ3MgLyogYmVnaW5uaW5nX29mX2dwZ19zaWcgKi87CisKKwkJYWxyZWFkeV9kb25lID0gMTsKKwkJaWYgKHdyaXRlX3NoYTFfZmlsZShwdXNoX2NlcnQuYnVmLCBwdXNoX2NlcnQubGVuLCAiYmxvYiIsIHB1c2hfY2VydF9zaGExKSkKKwkJCWhhc2hjbHIocHVzaF9jZXJ0X3NoYTEpOworCisJCW1lbXNldCgmc2lnY2hlY2ssICdcMCcsIHNpemVvZihzaWdjaGVjaykpOworCQlzaWdjaGVjay5yZXN1bHQgPSAnTic7CisKKwkJYm9ncyA9IHBhcnNlX3NpZ25hdHVyZShwdXNoX2NlcnQuYnVmLCBwdXNoX2NlcnQubGVuKTsKKwkJaWYgKHZlcmlmeV9zaWduZWRfYnVmZmVyKHB1c2hfY2VydC5idWYsIGJvZ3MsCisJCQkJCSBwdXNoX2NlcnQuYnVmICsgYm9ncywgcHVzaF9jZXJ0LmxlbiAtIGJvZ3MsCisJCQkJCSAmZ3BnX291dHB1dCwgJmdwZ19zdGF0dXMpIDwgMCkgeworCQkJOyAvKiBlcnJvciBydW5uaW5nIGdwZyAqLworCQl9IGVsc2UgeworCQkJc2lnY2hlY2sucGF5bG9hZCA9IHB1c2hfY2VydC5idWY7CisJCQlzaWdjaGVjay5ncGdfb3V0cHV0ID0gZ3BnX291dHB1dC5idWY7CisJCQlzaWdjaGVjay5ncGdfc3RhdHVzID0gZ3BnX3N0YXR1cy5idWY7CisJCQlwYXJzZV9ncGdfb3V0cHV0KCZzaWdjaGVjayk7CisJCX0KKworCQlzdHJidWZfcmVsZWFzZSgmZ3BnX291dHB1dCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZncGdfc3RhdHVzKTsKKwkJbm9uY2Vfc3RhdHVzID0gY2hlY2tfbm9uY2UocHVzaF9jZXJ0LmJ1ZiwgYm9ncyk7CisJfQorCWlmICghaXNfbnVsbF9zaGExKHB1c2hfY2VydF9zaGExKSkgeworCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLT5lbnZfYXJyYXksICJHSVRfUFVTSF9DRVJUPSVzIiwKKwkJCQkgc2hhMV90b19oZXgocHVzaF9jZXJ0X3NoYTEpKTsKKwkJYXJndl9hcnJheV9wdXNoZigmcHJvYy0+ZW52X2FycmF5LCAiR0lUX1BVU0hfQ0VSVF9TSUdORVI9JXMiLAorCQkJCSBzaWdjaGVjay5zaWduZXIgPyBzaWdjaGVjay5zaWduZXIgOiAiIik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJnByb2MtPmVudl9hcnJheSwgIkdJVF9QVVNIX0NFUlRfS0VZPSVzIiwKKwkJCQkgc2lnY2hlY2sua2V5ID8gc2lnY2hlY2sua2V5IDogIiIpOworCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLT5lbnZfYXJyYXksICJHSVRfUFVTSF9DRVJUX1NUQVRVUz0lYyIsCisJCQkJIHNpZ2NoZWNrLnJlc3VsdCk7CisJCWlmIChwdXNoX2NlcnRfbm9uY2UpIHsKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJnByb2MtPmVudl9hcnJheSwKKwkJCQkJICJHSVRfUFVTSF9DRVJUX05PTkNFPSVzIiwKKwkJCQkJIHB1c2hfY2VydF9ub25jZSk7CisJCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLT5lbnZfYXJyYXksCisJCQkJCSAiR0lUX1BVU0hfQ0VSVF9OT05DRV9TVEFUVVM9JXMiLAorCQkJCQkgbm9uY2Vfc3RhdHVzKTsKKwkJCWlmIChub25jZV9zdGF0dXMgPT0gTk9OQ0VfU0xPUCkKKwkJCQlhcmd2X2FycmF5X3B1c2hmKCZwcm9jLT5lbnZfYXJyYXksCisJCQkJCQkgIkdJVF9QVVNIX0NFUlRfTk9OQ0VfU0xPUD0lbGQiLAorCQkJCQkJIG5vbmNlX3N0YW1wX3Nsb3ApOworCQl9CisJfQorfQorCit0eXBlZGVmIGludCAoKmZlZWRfZm4pKHZvaWQgKiwgY29uc3QgY2hhciAqKiwgc2l6ZV90ICopOworc3RhdGljIGludCBydW5fYW5kX2ZlZWRfaG9vayhjb25zdCBjaGFyICpob29rX25hbWUsIGZlZWRfZm4gZmVlZCwgdm9pZCAqZmVlZF9zdGF0ZSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBhc3luYyBtdXhlcjsKKwljb25zdCBjaGFyICphcmd2WzJdOworCWludCBjb2RlOworCisJYXJndlswXSA9IGZpbmRfaG9vayhob29rX25hbWUpOworCWlmICghYXJndlswXSkKKwkJcmV0dXJuIDA7CisKKwlhcmd2WzFdID0gTlVMTDsKKworCXByb2MuYXJndiA9IGFyZ3Y7CisJcHJvYy5pbiA9IC0xOworCXByb2Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisKKwlpZiAodXNlX3NpZGViYW5kKSB7CisJCW1lbXNldCgmbXV4ZXIsIDAsIHNpemVvZihtdXhlcikpOworCQltdXhlci5wcm9jID0gY29weV90b19zaWRlYmFuZDsKKwkJbXV4ZXIuaW4gPSAtMTsKKwkJY29kZSA9IHN0YXJ0X2FzeW5jKCZtdXhlcik7CisJCWlmIChjb2RlKQorCQkJcmV0dXJuIGNvZGU7CisJCXByb2MuZXJyID0gbXV4ZXIuaW47CisJfQorCisJcHJlcGFyZV9wdXNoX2NlcnRfc2hhMSgmcHJvYyk7CisKKwljb2RlID0gc3RhcnRfY29tbWFuZCgmcHJvYyk7CisJaWYgKGNvZGUpIHsKKwkJaWYgKHVzZV9zaWRlYmFuZCkKKwkJCWZpbmlzaF9hc3luYygmbXV4ZXIpOworCQlyZXR1cm4gY29kZTsKKwl9CisKKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCisJd2hpbGUgKDEpIHsKKwkJY29uc3QgY2hhciAqYnVmOworCQlzaXplX3QgbjsKKwkJaWYgKGZlZWQoZmVlZF9zdGF0ZSwgJmJ1ZiwgJm4pKQorCQkJYnJlYWs7CisJCWlmICh3cml0ZV9pbl9mdWxsKHByb2MuaW4sIGJ1ZiwgbikgIT0gbikKKwkJCWJyZWFrOworCX0KKwljbG9zZShwcm9jLmluKTsKKwlpZiAodXNlX3NpZGViYW5kKQorCQlmaW5pc2hfYXN5bmMoJm11eGVyKTsKKworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCXJldHVybiBmaW5pc2hfY29tbWFuZCgmcHJvYyk7Cit9CisKK3N0cnVjdCByZWNlaXZlX2hvb2tfZmVlZF9zdGF0ZSB7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlpbnQgc2tpcF9icm9rZW47CisJc3RydWN0IHN0cmJ1ZiBidWY7Cit9OworCitzdGF0aWMgaW50IGZlZWRfcmVjZWl2ZV9ob29rKHZvaWQgKnN0YXRlXywgY29uc3QgY2hhciAqKmJ1ZnAsIHNpemVfdCAqc2l6ZXApCit7CisJc3RydWN0IHJlY2VpdmVfaG9va19mZWVkX3N0YXRlICpzdGF0ZSA9IHN0YXRlXzsKKwlzdHJ1Y3QgY29tbWFuZCAqY21kID0gc3RhdGUtPmNtZDsKKworCXdoaWxlIChjbWQgJiYKKwkgICAgICAgc3RhdGUtPnNraXBfYnJva2VuICYmIChjbWQtPmVycm9yX3N0cmluZyB8fCBjbWQtPmRpZF9ub3RfZXhpc3QpKQorCQljbWQgPSBjbWQtPm5leHQ7CisJaWYgKCFjbWQpCisJCXJldHVybiAtMTsgLyogRU9GICovCisJc3RyYnVmX3Jlc2V0KCZzdGF0ZS0+YnVmKTsKKwlzdHJidWZfYWRkZigmc3RhdGUtPmJ1ZiwgIiVzICVzICVzXG4iLAorCQkgICAgc2hhMV90b19oZXgoY21kLT5vbGRfc2hhMSksIHNoYTFfdG9faGV4KGNtZC0+bmV3X3NoYTEpLAorCQkgICAgY21kLT5yZWZfbmFtZSk7CisJc3RhdGUtPmNtZCA9IGNtZC0+bmV4dDsKKwlpZiAoYnVmcCkgeworCQkqYnVmcCA9IHN0YXRlLT5idWYuYnVmOworCQkqc2l6ZXAgPSBzdGF0ZS0+YnVmLmxlbjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3JlY2VpdmVfaG9vayhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsIGNvbnN0IGNoYXIgKmhvb2tfbmFtZSwKKwkJCSAgICBpbnQgc2tpcF9icm9rZW4pCit7CisJc3RydWN0IHJlY2VpdmVfaG9va19mZWVkX3N0YXRlIHN0YXRlOworCWludCBzdGF0dXM7CisKKwlzdHJidWZfaW5pdCgmc3RhdGUuYnVmLCAwKTsKKwlzdGF0ZS5jbWQgPSBjb21tYW5kczsKKwlzdGF0ZS5za2lwX2Jyb2tlbiA9IHNraXBfYnJva2VuOworCWlmIChmZWVkX3JlY2VpdmVfaG9vaygmc3RhdGUsIE5VTEwsIE5VTEwpKQorCQlyZXR1cm4gMDsKKwlzdGF0ZS5jbWQgPSBjb21tYW5kczsKKwlzdGF0dXMgPSBydW5fYW5kX2ZlZWRfaG9vayhob29rX25hbWUsIGZlZWRfcmVjZWl2ZV9ob29rLCAmc3RhdGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdGF0ZS5idWYpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3VwZGF0ZV9ob29rKHN0cnVjdCBjb21tYW5kICpjbWQpCit7CisJY29uc3QgY2hhciAqYXJndls1XTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBjb2RlOworCisJYXJndlswXSA9IGZpbmRfaG9vaygidXBkYXRlIik7CisJaWYgKCFhcmd2WzBdKQorCQlyZXR1cm4gMDsKKworCWFyZ3ZbMV0gPSBjbWQtPnJlZl9uYW1lOworCWFyZ3ZbMl0gPSBzaGExX3RvX2hleChjbWQtPm9sZF9zaGExKTsKKwlhcmd2WzNdID0gc2hhMV90b19oZXgoY21kLT5uZXdfc2hhMSk7CisJYXJndls0XSA9IE5VTEw7CisKKwlwcm9jLm5vX3N0ZGluID0gMTsKKwlwcm9jLnN0ZG91dF90b19zdGRlcnIgPSAxOworCXByb2MuZXJyID0gdXNlX3NpZGViYW5kID8gLTEgOiAwOworCXByb2MuYXJndiA9IGFyZ3Y7CisKKwljb2RlID0gc3RhcnRfY29tbWFuZCgmcHJvYyk7CisJaWYgKGNvZGUpCisJCXJldHVybiBjb2RlOworCWlmICh1c2Vfc2lkZWJhbmQpCisJCWNvcHlfdG9fc2lkZWJhbmQocHJvYy5lcnIsIC0xLCBOVUxMKTsKKwlyZXR1cm4gZmluaXNoX2NvbW1hbmQoJnByb2MpOworfQorCitzdGF0aWMgaW50IGlzX3JlZl9jaGVja2VkX291dChjb25zdCBjaGFyICpyZWYpCit7CisJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeSgpKQorCQlyZXR1cm4gMDsKKworCWlmICghaGVhZF9uYW1lKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gIXN0cmNtcChoZWFkX25hbWUsIHJlZik7Cit9CisKK3N0YXRpYyBjaGFyICpyZWZ1c2VfdW5jb25maWd1cmVkX2RlbnlfbXNnW10gPSB7CisJIkJ5IGRlZmF1bHQsIHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCBpbiBhIG5vbi1iYXJlIHJlcG9zaXRvcnkiLAorCSJpcyBkZW5pZWQsIGJlY2F1c2UgaXQgd2lsbCBtYWtlIHRoZSBpbmRleCBhbmQgd29yayB0cmVlIGluY29uc2lzdGVudCIsCisJIndpdGggd2hhdCB5b3UgcHVzaGVkLCBhbmQgd2lsbCByZXF1aXJlICdnaXQgcmVzZXQgLS1oYXJkJyB0byBtYXRjaCIsCisJInRoZSB3b3JrIHRyZWUgdG8gSEVBRC4iLAorCSIiLAorCSJZb3UgY2FuIHNldCAncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byIsCisJIidpZ25vcmUnIG9yICd3YXJuJyBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgdG8gYWxsb3cgcHVzaGluZyBpbnRvIiwKKwkiaXRzIGN1cnJlbnQgYnJhbmNoOyBob3dldmVyLCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCB1bmxlc3MgeW91IiwKKwkiYXJyYW5nZWQgdG8gdXBkYXRlIGl0cyB3b3JrIHRyZWUgdG8gbWF0Y2ggd2hhdCB5b3UgcHVzaGVkIGluIHNvbWUiLAorCSJvdGhlciB3YXkuIiwKKwkiIiwKKwkiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIHN0aWxsIGtlZXAgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXQiLAorCSIncmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCcgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0byAncmVmdXNlJy4iCit9OworCitzdGF0aWMgdm9pZCByZWZ1c2VfdW5jb25maWd1cmVkX2Rlbnkodm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWZ1c2VfdW5jb25maWd1cmVkX2RlbnlfbXNnKTsgaSsrKQorCQlycF9lcnJvcigiJXMiLCByZWZ1c2VfdW5jb25maWd1cmVkX2RlbnlfbXNnW2ldKTsKK30KKworc3RhdGljIGNoYXIgKnJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudF9tc2dbXSA9IHsKKwkiQnkgZGVmYXVsdCwgZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIGlzIGRlbmllZCwgYmVjYXVzZSB0aGUgbmV4dCIsCisJIidnaXQgY2xvbmUnIHdvbid0IHJlc3VsdCBpbiBhbnkgZmlsZSBjaGVja2VkIG91dCwgY2F1c2luZyBjb25mdXNpb24uIiwKKwkiIiwKKwkiWW91IGNhbiBzZXQgJ3JlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQnIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgdG8iLAorCSInd2Fybicgb3IgJ2lnbm9yZScgaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHRvIGFsbG93IGRlbGV0aW5nIHRoZSIsCisJImN1cnJlbnQgYnJhbmNoLCB3aXRoIG9yIHdpdGhvdXQgYSB3YXJuaW5nIG1lc3NhZ2UuIiwKKwkiIiwKKwkiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UsIHlvdSBjYW4gc2V0IGl0IHRvICdyZWZ1c2UnLiIKK307CisKK3N0YXRpYyB2b2lkIHJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueV9kZWxldGVfY3VycmVudCh2b2lkKQoreworCWludCBpOworCWZvciAoaSA9IDA7CisJICAgICBpIDwgQVJSQVlfU0laRShyZWZ1c2VfdW5jb25maWd1cmVkX2RlbnlfZGVsZXRlX2N1cnJlbnRfbXNnKTsKKwkgICAgIGkrKykKKwkJcnBfZXJyb3IoIiVzIiwgcmVmdXNlX3VuY29uZmlndXJlZF9kZW55X2RlbGV0ZV9jdXJyZW50X21zZ1tpXSk7Cit9CisKK3N0YXRpYyBpbnQgY29tbWFuZF9zaW5nbGV0b25faXRlcmF0b3Iodm9pZCAqY2JfZGF0YSwgdW5zaWduZWQgY2hhciBzaGExWzIwXSk7CitzdGF0aWMgaW50IHVwZGF0ZV9zaGFsbG93X3JlZihzdHJ1Y3QgY29tbWFuZCAqY21kLCBzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSkKK3sKKwlzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBzaGFsbG93X2xvY2s7CisJc3RydWN0IHNoYTFfYXJyYXkgZXh0cmEgPSBTSEExX0FSUkFZX0lOSVQ7CisJY29uc3QgY2hhciAqYWx0X2ZpbGU7CisJdWludDMyX3QgbWFzayA9IDEgPDwgKGNtZC0+aW5kZXggJSAzMik7CisJaW50IGk7CisKKwl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9zaGFsbG93LAorCQkJICJzaGFsbG93OiB1cGRhdGVfc2hhbGxvd19yZWYgJXNcbiIsIGNtZC0+cmVmX25hbWUpOworCWZvciAoaSA9IDA7IGkgPCBzaS0+c2hhbGxvdy0+bnI7IGkrKykKKwkJaWYgKHNpLT51c2VkX3NoYWxsb3dbaV0gJiYKKwkJICAgIChzaS0+dXNlZF9zaGFsbG93W2ldW2NtZC0+aW5kZXggLyAzMl0gJiBtYXNrKSAmJgorCQkgICAgIWRlbGF5ZWRfcmVhY2hhYmlsaXR5X3Rlc3Qoc2ksIGkpKQorCQkJc2hhMV9hcnJheV9hcHBlbmQoJmV4dHJhLCBzaS0+c2hhbGxvdy0+c2hhMVtpXSk7CisKKwlzZXR1cF9hbHRlcm5hdGVfc2hhbGxvdygmc2hhbGxvd19sb2NrLCAmYWx0X2ZpbGUsICZleHRyYSk7CisJaWYgKGNoZWNrX3NoYWxsb3dfY29ubmVjdGVkKGNvbW1hbmRfc2luZ2xldG9uX2l0ZXJhdG9yLAorCQkJCSAgICAwLCBjbWQsIGFsdF9maWxlKSkgeworCQlyb2xsYmFja19sb2NrX2ZpbGUoJnNoYWxsb3dfbG9jayk7CisJCXNoYTFfYXJyYXlfY2xlYXIoJmV4dHJhKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWNvbW1pdF9sb2NrX2ZpbGUoJnNoYWxsb3dfbG9jayk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBzZXR1cF9hbHRlcm5hdGVfc2hhbGxvdygpIGZvciB0aGUgbmV4dCByZWYgZG9lcworCSAqIG5vdCBsb3NlIHRoZXNlIG5ldyByb290cy4uCisJICovCisJZm9yIChpID0gMDsgaSA8IGV4dHJhLm5yOyBpKyspCisJCXJlZ2lzdGVyX3NoYWxsb3coZXh0cmEuc2hhMVtpXSk7CisKKwlzaS0+c2hhbGxvd19yZWZbY21kLT5pbmRleF0gPSAwOworCXNoYTFfYXJyYXlfY2xlYXIoJmV4dHJhKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5FRURTV09SSzogd2Ugc2hvdWxkIGNvbnNvbGlkYXRlIHZhcmlvdXMgaW1wbGVtZW50aW9ucyBvZiAiYXJlIHdlCisgKiBvbiBhbiB1bmJvcm4gYnJhbmNoPyIgdGVzdCBpbnRvIG9uZSwgYW5kIG1ha2UgdGhlIHVuaWZpZWQgb25lIG1vcmUKKyAqIHJvYnVzdC4gIWdldF9zaGExKCkgYmFzZWQgY2hlY2sgdXNlZCBoZXJlIGFuZCBlbHNld2hlcmUgd291bGQgbm90CisgKiBhbGxvdyB1cyB0byB0ZWxsIGFuIHVuYm9ybiBicmFuY2ggZnJvbSBjb3JydXB0IHJlZiwgZm9yIGV4YW1wbGUuCisgKiBGb3IgdGhlIHB1cnBvc2Ugb2YgZml4aW5nICJkZXBsb3ktdG8tdXBkYXRlIGRvZXMgbm90IHdvcmsgd2hlbgorICogcHVzaGluZyBpbnRvIGFuIGVtcHR5IHJlcG9zaXRvcnkiIGlzc3VlLCB0aGlzIHNob3VsZCBzdWZmaWNlIGZvcgorICogbm93LgorICovCitzdGF0aWMgaW50IGhlYWRfaGFzX2hpc3Rvcnkodm9pZCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJcmV0dXJuICFnZXRfc2hhMSgiSEVBRCIsIHNoYTEpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcHVzaF90b19kZXBsb3kodW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgIHN0cnVjdCBhcmd2X2FycmF5ICplbnYsCisJCQkJICBjb25zdCBjaGFyICp3b3JrX3RyZWUpCit7CisJY29uc3QgY2hhciAqdXBkYXRlX3JlZnJlc2hbXSA9IHsKKwkJInVwZGF0ZS1pbmRleCIsICItcSIsICItLWlnbm9yZS1zdWJtb2R1bGVzIiwgIi0tcmVmcmVzaCIsIE5VTEwKKwl9OworCWNvbnN0IGNoYXIgKmRpZmZfZmlsZXNbXSA9IHsKKwkJImRpZmYtZmlsZXMiLCAiLS1xdWlldCIsICItLWlnbm9yZS1zdWJtb2R1bGVzIiwgIi0tIiwgTlVMTAorCX07CisJY29uc3QgY2hhciAqZGlmZl9pbmRleFtdID0geworCQkiZGlmZi1pbmRleCIsICItLXF1aWV0IiwgIi0tY2FjaGVkIiwgIi0taWdub3JlLXN1Ym1vZHVsZXMiLAorCQlOVUxMLCAiLS0iLCBOVUxMCisJfTsKKwljb25zdCBjaGFyICpyZWFkX3RyZWVbXSA9IHsKKwkJInJlYWQtdHJlZSIsICItdSIsICItbSIsIE5VTEwsIE5VTEwKKwl9OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJY2hpbGQuYXJndiA9IHVwZGF0ZV9yZWZyZXNoOworCWNoaWxkLmVudiA9IGVudi0+YXJndjsKKwljaGlsZC5kaXIgPSB3b3JrX3RyZWU7CisJY2hpbGQubm9fc3RkaW4gPSAxOworCWNoaWxkLnN0ZG91dF90b19zdGRlcnIgPSAxOworCWNoaWxkLmdpdF9jbWQgPSAxOworCWlmIChydW5fY29tbWFuZCgmY2hpbGQpKQorCQlyZXR1cm4gIlVwLXRvLWRhdGUgY2hlY2sgZmFpbGVkIjsKKworCS8qIHJ1bl9jb21tYW5kKCkgZG9lcyBub3QgY2xlYW4gdXAgY29tcGxldGVseTsgcmVpbml0aWFsaXplICovCisJY2hpbGRfcHJvY2Vzc19pbml0KCZjaGlsZCk7CisJY2hpbGQuYXJndiA9IGRpZmZfZmlsZXM7CisJY2hpbGQuZW52ID0gZW52LT5hcmd2OworCWNoaWxkLmRpciA9IHdvcmtfdHJlZTsKKwljaGlsZC5ub19zdGRpbiA9IDE7CisJY2hpbGQuc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJY2hpbGQuZ2l0X2NtZCA9IDE7CisJaWYgKHJ1bl9jb21tYW5kKCZjaGlsZCkpCisJCXJldHVybiAiV29ya2luZyBkaXJlY3RvcnkgaGFzIHVuc3RhZ2VkIGNoYW5nZXMiOworCisJLyogZGlmZi1pbmRleCB3aXRoIGVpdGhlciBIRUFEIG9yIGFuIGVtcHR5IHRyZWUgKi8KKwlkaWZmX2luZGV4WzRdID0gaGVhZF9oYXNfaGlzdG9yeSgpID8gIkhFQUQiIDogRU1QVFlfVFJFRV9TSEExX0hFWDsKKworCWNoaWxkX3Byb2Nlc3NfaW5pdCgmY2hpbGQpOworCWNoaWxkLmFyZ3YgPSBkaWZmX2luZGV4OworCWNoaWxkLmVudiA9IGVudi0+YXJndjsKKwljaGlsZC5ub19zdGRpbiA9IDE7CisJY2hpbGQubm9fc3Rkb3V0ID0gMTsKKwljaGlsZC5zdGRvdXRfdG9fc3RkZXJyID0gMDsKKwljaGlsZC5naXRfY21kID0gMTsKKwlpZiAocnVuX2NvbW1hbmQoJmNoaWxkKSkKKwkJcmV0dXJuICJXb3JraW5nIGRpcmVjdG9yeSBoYXMgc3RhZ2VkIGNoYW5nZXMiOworCisJcmVhZF90cmVlWzNdID0gc2hhMV90b19oZXgoc2hhMSk7CisJY2hpbGRfcHJvY2Vzc19pbml0KCZjaGlsZCk7CisJY2hpbGQuYXJndiA9IHJlYWRfdHJlZTsKKwljaGlsZC5lbnYgPSBlbnYtPmFyZ3Y7CisJY2hpbGQuZGlyID0gd29ya190cmVlOworCWNoaWxkLm5vX3N0ZGluID0gMTsKKwljaGlsZC5ub19zdGRvdXQgPSAxOworCWNoaWxkLnN0ZG91dF90b19zdGRlcnIgPSAwOworCWNoaWxkLmdpdF9jbWQgPSAxOworCWlmIChydW5fY29tbWFuZCgmY2hpbGQpKQorCQlyZXR1cm4gIkNvdWxkIG5vdCB1cGRhdGUgd29ya2luZyB0cmVlIHRvIG5ldyBIRUFEIjsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcHVzaF90b19jaGVja291dF9ob29rID0gInB1c2gtdG8tY2hlY2tvdXQiOworCitzdGF0aWMgY29uc3QgY2hhciAqcHVzaF90b19jaGVja291dCh1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgICBzdHJ1Y3QgYXJndl9hcnJheSAqZW52LAorCQkJCSAgICBjb25zdCBjaGFyICp3b3JrX3RyZWUpCit7CisJYXJndl9hcnJheV9wdXNoZihlbnYsICJHSVRfV09SS19UUkVFPSVzIiwgYWJzb2x1dGVfcGF0aCh3b3JrX3RyZWUpKTsKKwlpZiAocnVuX2hvb2tfbGUoZW52LT5hcmd2LCBwdXNoX3RvX2NoZWNrb3V0X2hvb2ssCisJCQlzaGExX3RvX2hleChzaGExKSwgTlVMTCkpCisJCXJldHVybiAicHVzaC10by1jaGVja291dCBob29rIGRlY2xpbmVkIjsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdXBkYXRlX3dvcmt0cmVlKHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJY29uc3QgY2hhciAqcmV0dmFsOworCWNvbnN0IGNoYXIgKndvcmtfdHJlZSA9IGdpdF93b3JrX3RyZWVfY2ZnID8gZ2l0X3dvcmtfdHJlZV9jZmcgOiAiLi4iOworCXN0cnVjdCBhcmd2X2FycmF5IGVudiA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCWlmIChpc19iYXJlX3JlcG9zaXRvcnkoKSkKKwkJcmV0dXJuICJkZW55Q3VycmVudEJyYW5jaCA9IHVwZGF0ZUluc3RlYWQgbmVlZHMgYSB3b3JrdHJlZSI7CisKKwlhcmd2X2FycmF5X3B1c2hmKCZlbnYsICJHSVRfRElSPSVzIiwgYWJzb2x1dGVfcGF0aChnZXRfZ2l0X2RpcigpKSk7CisKKwlpZiAoIWZpbmRfaG9vayhwdXNoX3RvX2NoZWNrb3V0X2hvb2spKQorCQlyZXR2YWwgPSBwdXNoX3RvX2RlcGxveShzaGExLCAmZW52LCB3b3JrX3RyZWUpOworCWVsc2UKKwkJcmV0dmFsID0gcHVzaF90b19jaGVja291dChzaGExLCAmZW52LCB3b3JrX3RyZWUpOworCisJYXJndl9hcnJheV9jbGVhcigmZW52KTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdXBkYXRlKHN0cnVjdCBjb21tYW5kICpjbWQsIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCWNvbnN0IGNoYXIgKm5hbWUgPSBjbWQtPnJlZl9uYW1lOworCXN0cnVjdCBzdHJidWYgbmFtZXNwYWNlZF9uYW1lX2J1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKm5hbWVzcGFjZWRfbmFtZSwgKnJldDsKKwl1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSA9IGNtZC0+b2xkX3NoYTE7CisJdW5zaWduZWQgY2hhciAqbmV3X3NoYTEgPSBjbWQtPm5ld19zaGExOworCisJLyogb25seSByZWZzLy4uLiBhcmUgYWxsb3dlZCAqLworCWlmICghc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvIikgfHwgY2hlY2tfcmVmbmFtZV9mb3JtYXQobmFtZSArIDUsIDApKSB7CisJCXJwX2Vycm9yKCJyZWZ1c2luZyB0byBjcmVhdGUgZnVubnkgcmVmICclcycgcmVtb3RlbHkiLCBuYW1lKTsKKwkJcmV0dXJuICJmdW5ueSByZWZuYW1lIjsKKwl9CisKKwlzdHJidWZfYWRkZigmbmFtZXNwYWNlZF9uYW1lX2J1ZiwgIiVzJXMiLCBnZXRfZ2l0X25hbWVzcGFjZSgpLCBuYW1lKTsKKwluYW1lc3BhY2VkX25hbWUgPSBzdHJidWZfZGV0YWNoKCZuYW1lc3BhY2VkX25hbWVfYnVmLCBOVUxMKTsKKworCWlmIChpc19yZWZfY2hlY2tlZF9vdXQobmFtZXNwYWNlZF9uYW1lKSkgeworCQlzd2l0Y2ggKGRlbnlfY3VycmVudF9icmFuY2gpIHsKKwkJY2FzZSBERU5ZX0lHTk9SRToKKwkJCWJyZWFrOworCQljYXNlIERFTllfV0FSTjoKKwkJCXJwX3dhcm5pbmcoInVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCIpOworCQkJYnJlYWs7CisJCWNhc2UgREVOWV9SRUZVU0U6CisJCWNhc2UgREVOWV9VTkNPTkZJR1VSRUQ6CisJCQlycF9lcnJvcigicmVmdXNpbmcgdG8gdXBkYXRlIGNoZWNrZWQgb3V0IGJyYW5jaDogJXMiLCBuYW1lKTsKKwkJCWlmIChkZW55X2N1cnJlbnRfYnJhbmNoID09IERFTllfVU5DT05GSUdVUkVEKQorCQkJCXJlZnVzZV91bmNvbmZpZ3VyZWRfZGVueSgpOworCQkJcmV0dXJuICJicmFuY2ggaXMgY3VycmVudGx5IGNoZWNrZWQgb3V0IjsKKwkJY2FzZSBERU5ZX1VQREFURV9JTlNURUFEOgorCQkJcmV0ID0gdXBkYXRlX3dvcmt0cmVlKG5ld19zaGExKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFpc19udWxsX3NoYTEobmV3X3NoYTEpICYmICFoYXNfc2hhMV9maWxlKG5ld19zaGExKSkgeworCQllcnJvcigidW5wYWNrIHNob3VsZCBoYXZlIGdlbmVyYXRlZCAlcywgIgorCQkgICAgICAiYnV0IEkgY2FuJ3QgZmluZCBpdCEiLCBzaGExX3RvX2hleChuZXdfc2hhMSkpOworCQlyZXR1cm4gImJhZCBwYWNrIjsKKwl9CisKKwlpZiAoIWlzX251bGxfc2hhMShvbGRfc2hhMSkgJiYgaXNfbnVsbF9zaGExKG5ld19zaGExKSkgeworCQlpZiAoZGVueV9kZWxldGVzICYmIHN0YXJ0c193aXRoKG5hbWUsICJyZWZzL2hlYWRzLyIpKSB7CisJCQlycF9lcnJvcigiZGVueWluZyByZWYgZGVsZXRpb24gZm9yICVzIiwgbmFtZSk7CisJCQlyZXR1cm4gImRlbGV0aW9uIHByb2hpYml0ZWQiOworCQl9CisKKwkJaWYgKGhlYWRfbmFtZSAmJiAhc3RyY21wKG5hbWVzcGFjZWRfbmFtZSwgaGVhZF9uYW1lKSkgeworCQkJc3dpdGNoIChkZW55X2RlbGV0ZV9jdXJyZW50KSB7CisJCQljYXNlIERFTllfSUdOT1JFOgorCQkJCWJyZWFrOworCQkJY2FzZSBERU5ZX1dBUk46CisJCQkJcnBfd2FybmluZygiZGVsZXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIik7CisJCQkJYnJlYWs7CisJCQljYXNlIERFTllfUkVGVVNFOgorCQkJY2FzZSBERU5ZX1VOQ09ORklHVVJFRDoKKwkJCWNhc2UgREVOWV9VUERBVEVfSU5TVEVBRDoKKwkJCQlpZiAoZGVueV9kZWxldGVfY3VycmVudCA9PSBERU5ZX1VOQ09ORklHVVJFRCkKKwkJCQkJcmVmdXNlX3VuY29uZmlndXJlZF9kZW55X2RlbGV0ZV9jdXJyZW50KCk7CisJCQkJcnBfZXJyb3IoInJlZnVzaW5nIHRvIGRlbGV0ZSB0aGUgY3VycmVudCBicmFuY2g6ICVzIiwgbmFtZSk7CisJCQkJcmV0dXJuICJkZWxldGlvbiBvZiB0aGUgY3VycmVudCBicmFuY2ggcHJvaGliaXRlZCI7CisJCQlkZWZhdWx0OgorCQkJCXJldHVybiAiSW52YWxpZCBkZW55RGVsZXRlQ3VycmVudCBzZXR0aW5nIjsKKwkJCX0KKwkJfQorCX0KKworCWlmIChkZW55X25vbl9mYXN0X2ZvcndhcmRzICYmICFpc19udWxsX3NoYTEobmV3X3NoYTEpICYmCisJICAgICFpc19udWxsX3NoYTEob2xkX3NoYTEpICYmCisJICAgIHN0YXJ0c193aXRoKG5hbWUsICJyZWZzL2hlYWRzLyIpKSB7CisJCXN0cnVjdCBvYmplY3QgKm9sZF9vYmplY3QsICpuZXdfb2JqZWN0OworCQlzdHJ1Y3QgY29tbWl0ICpvbGRfY29tbWl0LCAqbmV3X2NvbW1pdDsKKworCQlvbGRfb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KG9sZF9zaGExKTsKKwkJbmV3X29iamVjdCA9IHBhcnNlX29iamVjdChuZXdfc2hhMSk7CisKKwkJaWYgKCFvbGRfb2JqZWN0IHx8ICFuZXdfb2JqZWN0IHx8CisJCSAgICBvbGRfb2JqZWN0LT50eXBlICE9IE9CSl9DT01NSVQgfHwKKwkJICAgIG5ld19vYmplY3QtPnR5cGUgIT0gT0JKX0NPTU1JVCkgeworCQkJZXJyb3IoImJhZCBzaGExIG9iamVjdHMgZm9yICVzIiwgbmFtZSk7CisJCQlyZXR1cm4gImJhZCByZWYiOworCQl9CisJCW9sZF9jb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW9sZF9vYmplY3Q7CisJCW5ld19jb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW5ld19vYmplY3Q7CisJCWlmICghaW5fbWVyZ2VfYmFzZXMob2xkX2NvbW1pdCwgbmV3X2NvbW1pdCkpIHsKKwkJCXJwX2Vycm9yKCJkZW55aW5nIG5vbi1mYXN0LWZvcndhcmQgJXMiCisJCQkJICIgKHlvdSBzaG91bGQgcHVsbCBmaXJzdCkiLCBuYW1lKTsKKwkJCXJldHVybiAibm9uLWZhc3QtZm9yd2FyZCI7CisJCX0KKwl9CisJaWYgKHJ1bl91cGRhdGVfaG9vayhjbWQpKSB7CisJCXJwX2Vycm9yKCJob29rIGRlY2xpbmVkIHRvIHVwZGF0ZSAlcyIsIG5hbWUpOworCQlyZXR1cm4gImhvb2sgZGVjbGluZWQiOworCX0KKworCWlmIChpc19udWxsX3NoYTEobmV3X3NoYTEpKSB7CisJCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJCWlmICghcGFyc2Vfb2JqZWN0KG9sZF9zaGExKSkgeworCQkJb2xkX3NoYTEgPSBOVUxMOworCQkJaWYgKHJlZl9leGlzdHMobmFtZSkpIHsKKwkJCQlycF93YXJuaW5nKCJBbGxvd2luZyBkZWxldGlvbiBvZiBjb3JydXB0IHJlZi4iKTsKKwkJCX0gZWxzZSB7CisJCQkJcnBfd2FybmluZygiRGVsZXRpbmcgYSBub24tZXhpc3RlbnQgcmVmLiIpOworCQkJCWNtZC0+ZGlkX25vdF9leGlzdCA9IDE7CisJCQl9CisJCX0KKwkJaWYgKHJlZl90cmFuc2FjdGlvbl9kZWxldGUodHJhbnNhY3Rpb24sCisJCQkJCSAgIG5hbWVzcGFjZWRfbmFtZSwKKwkJCQkJICAgb2xkX3NoYTEsCisJCQkJCSAgIDAsICJwdXNoIiwgJmVycikpIHsKKwkJCXJwX2Vycm9yKCIlcyIsIGVyci5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCQlyZXR1cm4gImZhaWxlZCB0byBkZWxldGUiOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlyZXR1cm4gTlVMTDsgLyogZ29vZCAqLworCX0KKwllbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKHNoYWxsb3dfdXBkYXRlICYmIHNpLT5zaGFsbG93X3JlZltjbWQtPmluZGV4XSAmJgorCQkgICAgdXBkYXRlX3NoYWxsb3dfcmVmKGNtZCwgc2kpKQorCQkJcmV0dXJuICJzaGFsbG93IGVycm9yIjsKKworCQlpZiAocmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0cmFuc2FjdGlvbiwKKwkJCQkJICAgbmFtZXNwYWNlZF9uYW1lLAorCQkJCQkgICBuZXdfc2hhMSwgb2xkX3NoYTEsCisJCQkJCSAgIDAsICJwdXNoIiwKKwkJCQkJICAgJmVycikpIHsKKwkJCXJwX2Vycm9yKCIlcyIsIGVyci5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisKKwkJCXJldHVybiAiZmFpbGVkIHRvIHVwZGF0ZSByZWYiOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCisJCXJldHVybiBOVUxMOyAvKiBnb29kICovCisJfQorfQorCitzdGF0aWMgdm9pZCBydW5fdXBkYXRlX3Bvc3RfaG9vayhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlpbnQgYXJnYzsKKwljb25zdCBjaGFyICoqYXJndjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBwcm9jID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmhvb2s7CisKKwlob29rID0gZmluZF9ob29rKCJwb3N0LXVwZGF0ZSIpOworCWZvciAoYXJnYyA9IDAsIGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoY21kLT5lcnJvcl9zdHJpbmcgfHwgY21kLT5kaWRfbm90X2V4aXN0KQorCQkJY29udGludWU7CisJCWFyZ2MrKzsKKwl9CisJaWYgKCFhcmdjIHx8ICFob29rKQorCQlyZXR1cm47CisKKwlhcmd2ID0geG1hbGxvYyhzaXplb2YoKmFyZ3YpICogKDIgKyBhcmdjKSk7CisJYXJndlswXSA9IGhvb2s7CisKKwlmb3IgKGFyZ2MgPSAxLCBjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKGNtZC0+ZXJyb3Jfc3RyaW5nIHx8IGNtZC0+ZGlkX25vdF9leGlzdCkKKwkJCWNvbnRpbnVlOworCQlhcmd2W2FyZ2NdID0geHN0cmR1cChjbWQtPnJlZl9uYW1lKTsKKwkJYXJnYysrOworCX0KKwlhcmd2W2FyZ2NdID0gTlVMTDsKKworCXByb2Mubm9fc3RkaW4gPSAxOworCXByb2Muc3Rkb3V0X3RvX3N0ZGVyciA9IDE7CisJcHJvYy5lcnIgPSB1c2Vfc2lkZWJhbmQgPyAtMSA6IDA7CisJcHJvYy5hcmd2ID0gYXJndjsKKworCWlmICghc3RhcnRfY29tbWFuZCgmcHJvYykpIHsKKwkJaWYgKHVzZV9zaWRlYmFuZCkKKwkJCWNvcHlfdG9fc2lkZWJhbmQocHJvYy5lcnIsIC0xLCBOVUxMKTsKKwkJZmluaXNoX2NvbW1hbmQoJnByb2MpOworCX0KK30KKworc3RhdGljIHZvaWQgY2hlY2tfYWxpYXNlZF91cGRhdGUoc3RydWN0IGNvbW1hbmQgKmNtZCwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZHN0X25hbWU7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IGNvbW1hbmQgKmRzdF9jbWQ7CisJdW5zaWduZWQgY2hhciBzaGExW0dJVF9TSEExX1JBV1NaXTsKKwljaGFyIGNtZF9vbGRoW0dJVF9TSEExX0hFWFNaICsgMV0sCisJICAgICBjbWRfbmV3aFtHSVRfU0hBMV9IRVhTWiArIDFdLAorCSAgICAgZHN0X29sZGhbR0lUX1NIQTFfSEVYU1ogKyAxXSwKKwkgICAgIGRzdF9uZXdoW0dJVF9TSEExX0hFWFNaICsgMV07CisJaW50IGZsYWc7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMlcyIsIGdldF9naXRfbmFtZXNwYWNlKCksIGNtZC0+cmVmX25hbWUpOworCWRzdF9uYW1lID0gcmVzb2x2ZV9yZWZfdW5zYWZlKGJ1Zi5idWYsIDAsIHNoYTEsICZmbGFnKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCWlmICghKGZsYWcgJiBSRUZfSVNTWU1SRUYpKQorCQlyZXR1cm47CisKKwlkc3RfbmFtZSA9IHN0cmlwX25hbWVzcGFjZShkc3RfbmFtZSk7CisJaWYgKCFkc3RfbmFtZSkgeworCQlycF9lcnJvcigicmVmdXNpbmcgdXBkYXRlIHRvIGJyb2tlbiBzeW1yZWYgJyVzJyIsIGNtZC0+cmVmX25hbWUpOworCQljbWQtPnNraXBfdXBkYXRlID0gMTsKKwkJY21kLT5lcnJvcl9zdHJpbmcgPSAiYnJva2VuIHN5bXJlZiI7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKGl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAobGlzdCwgZHN0X25hbWUpKSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwljbWQtPnNraXBfdXBkYXRlID0gMTsKKworCWRzdF9jbWQgPSAoc3RydWN0IGNvbW1hbmQgKikgaXRlbS0+dXRpbDsKKworCWlmICghaGFzaGNtcChjbWQtPm9sZF9zaGExLCBkc3RfY21kLT5vbGRfc2hhMSkgJiYKKwkgICAgIWhhc2hjbXAoY21kLT5uZXdfc2hhMSwgZHN0X2NtZC0+bmV3X3NoYTEpKQorCQlyZXR1cm47CisKKwlkc3RfY21kLT5za2lwX3VwZGF0ZSA9IDE7CisKKwlmaW5kX3VuaXF1ZV9hYmJyZXZfcihjbWRfb2xkaCwgY21kLT5vbGRfc2hhMSwgREVGQVVMVF9BQkJSRVYpOworCWZpbmRfdW5pcXVlX2FiYnJldl9yKGNtZF9uZXdoLCBjbWQtPm5ld19zaGExLCBERUZBVUxUX0FCQlJFVik7CisJZmluZF91bmlxdWVfYWJicmV2X3IoZHN0X29sZGgsIGRzdF9jbWQtPm9sZF9zaGExLCBERUZBVUxUX0FCQlJFVik7CisJZmluZF91bmlxdWVfYWJicmV2X3IoZHN0X25ld2gsIGRzdF9jbWQtPm5ld19zaGExLCBERUZBVUxUX0FCQlJFVik7CisJcnBfZXJyb3IoInJlZnVzaW5nIGluY29uc2lzdGVudCB1cGRhdGUgYmV0d2VlbiBzeW1yZWYgJyVzJyAoJXMuLiVzKSBhbmQiCisJCSAiIGl0cyB0YXJnZXQgJyVzJyAoJXMuLiVzKSIsCisJCSBjbWQtPnJlZl9uYW1lLCBjbWRfb2xkaCwgY21kX25ld2gsCisJCSBkc3RfY21kLT5yZWZfbmFtZSwgZHN0X29sZGgsIGRzdF9uZXdoKTsKKworCWNtZC0+ZXJyb3Jfc3RyaW5nID0gZHN0X2NtZC0+ZXJyb3Jfc3RyaW5nID0KKwkJImluY29uc2lzdGVudCBhbGlhc2VkIHVwZGF0ZSI7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2FsaWFzZWRfdXBkYXRlcyhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZWZfbGlzdCwgY21kLT5yZWZfbmFtZSk7CisJCWl0ZW0tPnV0aWwgPSAodm9pZCAqKWNtZDsKKwl9CisJc3RyaW5nX2xpc3Rfc29ydCgmcmVmX2xpc3QpOworCisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKCFjbWQtPmVycm9yX3N0cmluZykKKwkJCWNoZWNrX2FsaWFzZWRfdXBkYXRlKGNtZCwgJnJlZl9saXN0KTsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmcmVmX2xpc3QsIDApOworfQorCitzdGF0aWMgaW50IGNvbW1hbmRfc2luZ2xldG9uX2l0ZXJhdG9yKHZvaWQgKmNiX2RhdGEsIHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0pCit7CisJc3RydWN0IGNvbW1hbmQgKipjbWRfbGlzdCA9IGNiX2RhdGE7CisJc3RydWN0IGNvbW1hbmQgKmNtZCA9ICpjbWRfbGlzdDsKKworCWlmICghY21kIHx8IGlzX251bGxfc2hhMShjbWQtPm5ld19zaGExKSkKKwkJcmV0dXJuIC0xOyAvKiBlbmQgb2YgbGlzdCAqLworCSpjbWRfbGlzdCA9IE5VTEw7IC8qIHRoaXMgcmV0dXJucyBvbmx5IG9uZSAqLworCWhhc2hjcHkoc2hhMSwgY21kLT5uZXdfc2hhMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jb25uZWN0aXZpdHlfZXJyb3JzKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcywKKwkJCQkgICAgc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCXN0cnVjdCBjb21tYW5kICpzaW5nbGV0b24gPSBjbWQ7CisJCWlmIChzaGFsbG93X3VwZGF0ZSAmJiBzaS0+c2hhbGxvd19yZWZbY21kLT5pbmRleF0pCisJCQkvKiB0byBiZSBjaGVja2VkIGluIHVwZGF0ZV9zaGFsbG93X3JlZigpICovCisJCQljb250aW51ZTsKKwkJaWYgKCFjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZChjb21tYW5kX3NpbmdsZXRvbl9pdGVyYXRvciwKKwkJCQkJCTAsICZzaW5nbGV0b24pKQorCQkJY29udGludWU7CisJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gIm1pc3NpbmcgbmVjZXNzYXJ5IG9iamVjdHMiOworCX0KK30KKworc3RydWN0IGl0ZXJhdGVfZGF0YSB7CisJc3RydWN0IGNvbW1hbmQgKmNtZHM7CisJc3RydWN0IHNoYWxsb3dfaW5mbyAqc2k7Cit9OworCitzdGF0aWMgaW50IGl0ZXJhdGVfcmVjZWl2ZV9jb21tYW5kX2xpc3Qodm9pZCAqY2JfZGF0YSwgdW5zaWduZWQgY2hhciBzaGExWzIwXSkKK3sKKwlzdHJ1Y3QgaXRlcmF0ZV9kYXRhICpkYXRhID0gY2JfZGF0YTsKKwlzdHJ1Y3QgY29tbWFuZCAqKmNtZF9saXN0ID0gJmRhdGEtPmNtZHM7CisJc3RydWN0IGNvbW1hbmQgKmNtZCA9ICpjbWRfbGlzdDsKKworCWZvciAoOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoc2hhbGxvd191cGRhdGUgJiYgZGF0YS0+c2ktPnNoYWxsb3dfcmVmW2NtZC0+aW5kZXhdKQorCQkJLyogdG8gYmUgY2hlY2tlZCBpbiB1cGRhdGVfc2hhbGxvd19yZWYoKSAqLworCQkJY29udGludWU7CisJCWlmICghaXNfbnVsbF9zaGExKGNtZC0+bmV3X3NoYTEpICYmICFjbWQtPnNraXBfdXBkYXRlKSB7CisJCQloYXNoY3B5KHNoYTEsIGNtZC0+bmV3X3NoYTEpOworCQkJKmNtZF9saXN0ID0gY21kLT5uZXh0OworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJKmNtZF9saXN0ID0gTlVMTDsKKwlyZXR1cm4gLTE7IC8qIGVuZCBvZiBsaXN0ICovCit9CisKK3N0YXRpYyB2b2lkIHJlamVjdF91cGRhdGVzX3RvX2hpZGRlbihzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKworCWZvciAoY21kID0gY29tbWFuZHM7IGNtZDsgY21kID0gY21kLT5uZXh0KSB7CisJCWlmIChjbWQtPmVycm9yX3N0cmluZyB8fCAhcmVmX2lzX2hpZGRlbihjbWQtPnJlZl9uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfbnVsbF9zaGExKGNtZC0+bmV3X3NoYTEpKQorCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAiZGVueSBkZWxldGluZyBhIGhpZGRlbiByZWYiOworCQllbHNlCisJCQljbWQtPmVycm9yX3N0cmluZyA9ICJkZW55IHVwZGF0aW5nIGEgaGlkZGVuIHJlZiI7CisJfQorfQorCitzdGF0aWMgaW50IHNob3VsZF9wcm9jZXNzX2NtZChzdHJ1Y3QgY29tbWFuZCAqY21kKQoreworCXJldHVybiAhY21kLT5lcnJvcl9zdHJpbmcgJiYgIWNtZC0+c2tpcF91cGRhdGU7Cit9CisKK3N0YXRpYyB2b2lkIHdhcm5faWZfc2tpcHBlZF9jb25uZWN0aXZpdHlfY2hlY2soc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzLAorCQkJCQkgICAgICAgc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlpbnQgY2hlY2tlZF9jb25uZWN0aXZpdHkgPSAxOworCisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKHNob3VsZF9wcm9jZXNzX2NtZChjbWQpICYmIHNpLT5zaGFsbG93X3JlZltjbWQtPmluZGV4XSkgeworCQkJZXJyb3IoIkJVRzogY29ubmVjdGl2aXR5IGNoZWNrIGhhcyBub3QgYmVlbiBydW4gb24gcmVmICVzIiwKKwkJCSAgICAgIGNtZC0+cmVmX25hbWUpOworCQkJY2hlY2tlZF9jb25uZWN0aXZpdHkgPSAwOworCQl9CisJfQorCWlmICghY2hlY2tlZF9jb25uZWN0aXZpdHkpCisJCWRpZSgiQlVHOiBjb25uZWN0aXZpdHkgY2hlY2sgc2tpcHBlZD8/PyIpOworfQorCitzdGF0aWMgdm9pZCBleGVjdXRlX2NvbW1hbmRzX25vbl9hdG9taWMoc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzLAorCQkJCQlzdHJ1Y3Qgc2hhbGxvd19pbmZvICpzaSkKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoIXNob3VsZF9wcm9jZXNzX2NtZChjbWQpKQorCQkJY29udGludWU7CisKKwkJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJCWlmICghdHJhbnNhY3Rpb24pIHsKKwkJCXJwX2Vycm9yKCIlcyIsIGVyci5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZlcnIpOworCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAidHJhbnNhY3Rpb24gZmFpbGVkIHRvIHN0YXJ0IjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY21kLT5lcnJvcl9zdHJpbmcgPSB1cGRhdGUoY21kLCBzaSk7CisKKwkJaWYgKCFjbWQtPmVycm9yX3N0cmluZworCQkgICAgJiYgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpIHsKKwkJCXJwX2Vycm9yKCIlcyIsIGVyci5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZlcnIpOworCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAiZmFpbGVkIHRvIHVwZGF0ZSByZWYiOworCQl9CisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmVycik7Cit9CisKK3N0YXRpYyB2b2lkIGV4ZWN1dGVfY29tbWFuZHNfYXRvbWljKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcywKKwkJCQkJc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJc3RydWN0IGNvbW1hbmQgKmNtZDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnJlcG9ydGVkX2Vycm9yID0gImF0b21pYyBwdXNoIGZhaWx1cmUiOworCisJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0cmFuc2FjdGlvbikgeworCQlycF9lcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZlcnIpOworCQlyZXBvcnRlZF9lcnJvciA9ICJ0cmFuc2FjdGlvbiBmYWlsZWQgdG8gc3RhcnQiOworCQlnb3RvIGZhaWx1cmU7CisJfQorCisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKCFzaG91bGRfcHJvY2Vzc19jbWQoY21kKSkKKwkJCWNvbnRpbnVlOworCisJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gdXBkYXRlKGNtZCwgc2kpOworCisJCWlmIChjbWQtPmVycm9yX3N0cmluZykKKwkJCWdvdG8gZmFpbHVyZTsKKwl9CisKKwlpZiAocmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpIHsKKwkJcnBfZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCXJlcG9ydGVkX2Vycm9yID0gImF0b21pYyB0cmFuc2FjdGlvbiBmYWlsZWQiOworCQlnb3RvIGZhaWx1cmU7CisJfQorCWdvdG8gY2xlYW51cDsKKworZmFpbHVyZToKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkKKwkJaWYgKCFjbWQtPmVycm9yX3N0cmluZykKKwkJCWNtZC0+ZXJyb3Jfc3RyaW5nID0gcmVwb3J0ZWRfZXJyb3I7CisKK2NsZWFudXA6CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworfQorCitzdGF0aWMgdm9pZCBleGVjdXRlX2NvbW1hbmRzKHN0cnVjdCBjb21tYW5kICpjb21tYW5kcywKKwkJCSAgICAgY29uc3QgY2hhciAqdW5wYWNrZXJfZXJyb3IsCisJCQkgICAgIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgaXRlcmF0ZV9kYXRhIGRhdGE7CisKKwlpZiAodW5wYWNrZXJfZXJyb3IpIHsKKwkJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpCisJCQljbWQtPmVycm9yX3N0cmluZyA9ICJ1bnBhY2tlciBlcnJvciI7CisJCXJldHVybjsKKwl9CisKKwlkYXRhLmNtZHMgPSBjb21tYW5kczsKKwlkYXRhLnNpID0gc2k7CisJaWYgKGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkKGl0ZXJhdGVfcmVjZWl2ZV9jb21tYW5kX2xpc3QsIDAsICZkYXRhKSkKKwkJc2V0X2Nvbm5lY3Rpdml0eV9lcnJvcnMoY29tbWFuZHMsIHNpKTsKKworCXJlamVjdF91cGRhdGVzX3RvX2hpZGRlbihjb21tYW5kcyk7CisKKwlpZiAocnVuX3JlY2VpdmVfaG9vayhjb21tYW5kcywgInByZS1yZWNlaXZlIiwgMCkpIHsKKwkJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJCWlmICghY21kLT5lcnJvcl9zdHJpbmcpCisJCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAicHJlLXJlY2VpdmUgaG9vayBkZWNsaW5lZCI7CisJCX0KKwkJcmV0dXJuOworCX0KKworCWNoZWNrX2FsaWFzZWRfdXBkYXRlcyhjb21tYW5kcyk7CisKKwlmcmVlKGhlYWRfbmFtZV90b19mcmVlKTsKKwloZWFkX25hbWUgPSBoZWFkX25hbWVfdG9fZnJlZSA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgMCwgc2hhMSwgTlVMTCk7CisKKwlpZiAodXNlX2F0b21pYykKKwkJZXhlY3V0ZV9jb21tYW5kc19hdG9taWMoY29tbWFuZHMsIHNpKTsKKwllbHNlCisJCWV4ZWN1dGVfY29tbWFuZHNfbm9uX2F0b21pYyhjb21tYW5kcywgc2kpOworCisJaWYgKHNoYWxsb3dfdXBkYXRlKQorCQl3YXJuX2lmX3NraXBwZWRfY29ubmVjdGl2aXR5X2NoZWNrKGNvbW1hbmRzLCBzaSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWFuZCAqKnF1ZXVlX2NvbW1hbmQoc3RydWN0IGNvbW1hbmQgKip0YWlsLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsCisJCQkJICAgICAgaW50IGxpbmVsZW4pCit7CisJdW5zaWduZWQgY2hhciBvbGRfc2hhMVsyMF0sIG5ld19zaGExWzIwXTsKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisJaW50IHJlZmxlbjsKKworCWlmIChsaW5lbGVuIDwgODMgfHwKKwkgICAgbGluZVs0MF0gIT0gJyAnIHx8CisJICAgIGxpbmVbODFdICE9ICcgJyB8fAorCSAgICBnZXRfc2hhMV9oZXgobGluZSwgb2xkX3NoYTEpIHx8CisJICAgIGdldF9zaGExX2hleChsaW5lICsgNDEsIG5ld19zaGExKSkKKwkJZGllKCJwcm90b2NvbCBlcnJvcjogZXhwZWN0ZWQgb2xkL25ldy9yZWYsIGdvdCAnJXMnIiwgbGluZSk7CisKKwlyZWZuYW1lID0gbGluZSArIDgyOworCXJlZmxlbiA9IGxpbmVsZW4gLSA4MjsKKwljbWQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY29tbWFuZCkgKyByZWZsZW4gKyAxKTsKKwloYXNoY3B5KGNtZC0+b2xkX3NoYTEsIG9sZF9zaGExKTsKKwloYXNoY3B5KGNtZC0+bmV3X3NoYTEsIG5ld19zaGExKTsKKwltZW1jcHkoY21kLT5yZWZfbmFtZSwgcmVmbmFtZSwgcmVmbGVuKTsKKwljbWQtPnJlZl9uYW1lW3JlZmxlbl0gPSAnXDAnOworCSp0YWlsID0gY21kOworCXJldHVybiAmY21kLT5uZXh0OworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9jb21tYW5kc19mcm9tX2NlcnQoc3RydWN0IGNvbW1hbmQgKip0YWlsLAorCQkJCSAgICAgc3RydWN0IHN0cmJ1ZiAqcHVzaF9jZXJ0KQoreworCWNvbnN0IGNoYXIgKmJvYywgKmVvYzsKKworCWlmICgqdGFpbCkKKwkJZGllKCJwcm90b2NvbCBlcnJvcjogZ290IGJvdGggcHVzaCBjZXJ0aWZpY2F0ZSBhbmQgdW5zaWduZWQgY29tbWFuZHMiKTsKKworCWJvYyA9IHN0cnN0cihwdXNoX2NlcnQtPmJ1ZiwgIlxuXG4iKTsKKwlpZiAoIWJvYykKKwkJZGllKCJtYWxmb3JtZWQgcHVzaCBjZXJ0aWZpY2F0ZSAlLipzIiwgMTAwLCBwdXNoX2NlcnQtPmJ1Zik7CisJZWxzZQorCQlib2MgKz0gMjsKKwllb2MgPSBwdXNoX2NlcnQtPmJ1ZiArIHBhcnNlX3NpZ25hdHVyZShwdXNoX2NlcnQtPmJ1ZiwgcHVzaF9jZXJ0LT5sZW4pOworCisJd2hpbGUgKGJvYyA8IGVvYykgeworCQljb25zdCBjaGFyICplb2wgPSBtZW1jaHIoYm9jLCAnXG4nLCBlb2MgLSBib2MpOworCQl0YWlsID0gcXVldWVfY29tbWFuZCh0YWlsLCBib2MsIGVvbCA/IGVvbCAtIGJvYyA6IGVvYyAtIGVvbCk7CisJCWJvYyA9IGVvbCA/IGVvbCArIDEgOiBlb2M7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNvbW1hbmQgKnJlYWRfaGVhZF9pbmZvKHN0cnVjdCBzaGExX2FycmF5ICpzaGFsbG93KQoreworCXN0cnVjdCBjb21tYW5kICpjb21tYW5kcyA9IE5VTEw7CisJc3RydWN0IGNvbW1hbmQgKipwID0gJmNvbW1hbmRzOworCWZvciAoOzspIHsKKwkJY2hhciAqbGluZTsKKwkJaW50IGxlbiwgbGluZWxlbjsKKworCQlsaW5lID0gcGFja2V0X3JlYWRfbGluZSgwLCAmbGVuKTsKKwkJaWYgKCFsaW5lKQorCQkJYnJlYWs7CisKKwkJaWYgKGxlbiA9PSA0OCAmJiBzdGFydHNfd2l0aChsaW5lLCAic2hhbGxvdyAiKSkgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJCWlmIChnZXRfc2hhMV9oZXgobGluZSArIDgsIHNoYTEpKQorCQkJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLCBnb3QgJyVzJyIsCisJCQkJICAgIGxpbmUgKyA4KTsKKwkJCXNoYTFfYXJyYXlfYXBwZW5kKHNoYWxsb3csIHNoYTEpOworCQkJY29udGludWU7CisJCX0KKworCQlsaW5lbGVuID0gc3RybGVuKGxpbmUpOworCQlpZiAobGluZWxlbiA8IGxlbikgeworCQkJY29uc3QgY2hhciAqZmVhdHVyZV9saXN0ID0gbGluZSArIGxpbmVsZW4gKyAxOworCQkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlX2xpc3QsICJyZXBvcnQtc3RhdHVzIikpCisJCQkJcmVwb3J0X3N0YXR1cyA9IDE7CisJCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVfbGlzdCwgInNpZGUtYmFuZC02NGsiKSkKKwkJCQl1c2Vfc2lkZWJhbmQgPSBMQVJHRV9QQUNLRVRfTUFYOworCQkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlX2xpc3QsICJxdWlldCIpKQorCQkJCXF1aWV0ID0gMTsKKwkJCWlmIChhZHZlcnRpc2VfYXRvbWljX3B1c2gKKwkJCSAgICAmJiBwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZV9saXN0LCAiYXRvbWljIikpCisJCQkJdXNlX2F0b21pYyA9IDE7CisJCX0KKworCQlpZiAoIXN0cmNtcChsaW5lLCAicHVzaC1jZXJ0IikpIHsKKwkJCWludCB0cnVlX2ZsdXNoID0gMDsKKwkJCWNoYXIgY2VydGJ1ZlsxMDI0XTsKKworCQkJZm9yICg7OykgeworCQkJCWxlbiA9IHBhY2tldF9yZWFkKDAsIE5VTEwsIE5VTEwsCisJCQkJCQkgIGNlcnRidWYsIHNpemVvZihjZXJ0YnVmKSwgMCk7CisJCQkJaWYgKCFsZW4pIHsKKwkJCQkJdHJ1ZV9mbHVzaCA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoIXN0cmNtcChjZXJ0YnVmLCAicHVzaC1jZXJ0LWVuZFxuIikpCisJCQkJCWJyZWFrOyAvKiBlbmQgb2YgY2VydCAqLworCQkJCXN0cmJ1Zl9hZGRzdHIoJnB1c2hfY2VydCwgY2VydGJ1Zik7CisJCQl9CisKKwkJCWlmICh0cnVlX2ZsdXNoKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKworCQlwID0gcXVldWVfY29tbWFuZChwLCBsaW5lLCBsaW5lbGVuKTsKKwl9CisKKwlpZiAocHVzaF9jZXJ0LmxlbikKKwkJcXVldWVfY29tbWFuZHNfZnJvbV9jZXJ0KHAsICZwdXNoX2NlcnQpOworCisJcmV0dXJuIGNvbW1hbmRzOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfcGFja19oZWFkZXIoc3RydWN0IHBhY2tfaGVhZGVyICpoZHIpCit7CisJc3dpdGNoIChyZWFkX3BhY2tfaGVhZGVyKDAsIGhkcikpIHsKKwljYXNlIFBIX0VSUk9SX0VPRjoKKwkJcmV0dXJuICJlb2YgYmVmb3JlIHBhY2sgaGVhZGVyIHdhcyBmdWxseSByZWFkIjsKKworCWNhc2UgUEhfRVJST1JfUEFDS19TSUdOQVRVUkU6CisJCXJldHVybiAicHJvdG9jb2wgZXJyb3IgKHBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIGRldGVjdGVkKSI7CisKKwljYXNlIFBIX0VSUk9SX1BST1RPQ09MOgorCQlyZXR1cm4gInByb3RvY29sIGVycm9yIChwYWNrIHZlcnNpb24gdW5zdXBwb3J0ZWQpIjsKKworCWRlZmF1bHQ6CisJCXJldHVybiAidW5rbm93biBlcnJvciBpbiBwYXJzZV9wYWNrX2hlYWRlciI7CisKKwljYXNlIDA6CisJCXJldHVybiBOVUxMOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhY2tfbG9ja2ZpbGU7CisKK3N0YXRpYyBjb25zdCBjaGFyICp1bnBhY2soaW50IGVycl9mZCwgc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJc3RydWN0IHBhY2tfaGVhZGVyIGhkcjsKKwljb25zdCBjaGFyICpoZHJfZXJyOworCWludCBzdGF0dXM7CisJY2hhciBoZHJfYXJnWzM4XTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlpbnQgZnNja19vYmplY3RzID0gKHJlY2VpdmVfZnNja19vYmplY3RzID49IDAKKwkJCSAgICA/IHJlY2VpdmVfZnNja19vYmplY3RzCisJCQkgICAgOiB0cmFuc2Zlcl9mc2NrX29iamVjdHMgPj0gMAorCQkJICAgID8gdHJhbnNmZXJfZnNja19vYmplY3RzCisJCQkgICAgOiAwKTsKKworCWhkcl9lcnIgPSBwYXJzZV9wYWNrX2hlYWRlcigmaGRyKTsKKwlpZiAoaGRyX2VycikgeworCQlpZiAoZXJyX2ZkID4gMCkKKwkJCWNsb3NlKGVycl9mZCk7CisJCXJldHVybiBoZHJfZXJyOworCX0KKwlzbnByaW50ZihoZHJfYXJnLCBzaXplb2YoaGRyX2FyZyksCisJCQkiLS1wYWNrX2hlYWRlcj0lIlBSSXUzMiIsJSJQUkl1MzIsCisJCQludG9obChoZHIuaGRyX3ZlcnNpb24pLCBudG9obChoZHIuaGRyX2VudHJpZXMpKTsKKworCWlmIChzaS0+bnJfb3VycyB8fCBzaS0+bnJfdGhlaXJzKSB7CisJCWFsdF9zaGFsbG93X2ZpbGUgPSBzZXR1cF90ZW1wb3Jhcnlfc2hhbGxvdyhzaS0+c2hhbGxvdyk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgIi0tc2hhbGxvdy1maWxlIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgYWx0X3NoYWxsb3dfZmlsZSk7CisJfQorCisJaWYgKG50b2hsKGhkci5oZHJfZW50cmllcykgPCB1bnBhY2tfbGltaXQpIHsKKwkJYXJndl9hcnJheV9wdXNobCgmY2hpbGQuYXJncywgInVucGFjay1vYmplY3RzIiwgaGRyX2FyZywgTlVMTCk7CisJCWlmIChxdWlldCkKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY2hpbGQuYXJncywgIi1xIik7CisJCWlmIChmc2NrX29iamVjdHMpCisJCQlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZC5hcmdzLCAiLS1zdHJpY3QlcyIsCisJCQkJZnNja19tc2dfdHlwZXMuYnVmKTsKKwkJY2hpbGQubm9fc3Rkb3V0ID0gMTsKKwkJY2hpbGQuZXJyID0gZXJyX2ZkOworCQljaGlsZC5naXRfY21kID0gMTsKKwkJc3RhdHVzID0gcnVuX2NvbW1hbmQoJmNoaWxkKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiAidW5wYWNrLW9iamVjdHMgYWJub3JtYWwgZXhpdCI7CisJfSBlbHNlIHsKKwkJY2hhciBob3N0bmFtZVsyNTZdOworCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNoaWxkLmFyZ3MsICJpbmRleC1wYWNrIiwKKwkJCQkgIi0tc3RkaW4iLCBoZHJfYXJnLCBOVUxMKTsKKworCQlpZiAoZ2V0aG9zdG5hbWUoaG9zdG5hbWUsIHNpemVvZihob3N0bmFtZSkpKQorCQkJeHNucHJpbnRmKGhvc3RuYW1lLCBzaXplb2YoaG9zdG5hbWUpLCAibG9jYWxob3N0Iik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNoaWxkLmFyZ3MsCisJCQkJICItLWtlZXA9cmVjZWl2ZS1wYWNrICUiUFJJdU1BWCIgb24gJXMiLAorCQkJCSAodWludG1heF90KWdldHBpZCgpLAorCQkJCSBob3N0bmFtZSk7CisKKwkJaWYgKGZzY2tfb2JqZWN0cykKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNoaWxkLmFyZ3MsICItLXN0cmljdCVzIiwKKwkJCQlmc2NrX21zZ190eXBlcy5idWYpOworCQlpZiAoZml4X3RoaW4pCisJCQlhcmd2X2FycmF5X3B1c2goJmNoaWxkLmFyZ3MsICItLWZpeC10aGluIik7CisJCWNoaWxkLm91dCA9IC0xOworCQljaGlsZC5lcnIgPSBlcnJfZmQ7CisJCWNoaWxkLmdpdF9jbWQgPSAxOworCQlzdGF0dXMgPSBzdGFydF9jb21tYW5kKCZjaGlsZCk7CisJCWlmIChzdGF0dXMpCisJCQlyZXR1cm4gImluZGV4LXBhY2sgZm9yayBmYWlsZWQiOworCQlwYWNrX2xvY2tmaWxlID0gaW5kZXhfcGFja19sb2NrZmlsZShjaGlsZC5vdXQpOworCQljbG9zZShjaGlsZC5vdXQpOworCQlzdGF0dXMgPSBmaW5pc2hfY29tbWFuZCgmY2hpbGQpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuICJpbmRleC1wYWNrIGFibm9ybWFsIGV4aXQiOworCQlyZXByZXBhcmVfcGFja2VkX2dpdCgpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVucGFja193aXRoX3NpZGViYW5kKHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCXN0cnVjdCBhc3luYyBtdXhlcjsKKwljb25zdCBjaGFyICpyZXQ7CisKKwlpZiAoIXVzZV9zaWRlYmFuZCkKKwkJcmV0dXJuIHVucGFjaygwLCBzaSk7CisKKwltZW1zZXQoJm11eGVyLCAwLCBzaXplb2YobXV4ZXIpKTsKKwltdXhlci5wcm9jID0gY29weV90b19zaWRlYmFuZDsKKwltdXhlci5pbiA9IC0xOworCWlmIChzdGFydF9hc3luYygmbXV4ZXIpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldCA9IHVucGFjayhtdXhlci5pbiwgc2kpOworCisJZmluaXNoX2FzeW5jKCZtdXhlcik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9zaGFsbG93X3VwZGF0ZShzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsCisJCQkJICAgc3RydWN0IHNoYWxsb3dfaW5mbyAqc2kpCit7CisJaW50IGksIGosIGssIGJpdG1hcF9zaXplID0gKHNpLT5yZWYtPm5yICsgMzEpIC8gMzI7CisKKwlzaS0+dXNlZF9zaGFsbG93ID0geG1hbGxvYyhzaXplb2YoKnNpLT51c2VkX3NoYWxsb3cpICoKKwkJCQkgICBzaS0+c2hhbGxvdy0+bnIpOworCWFzc2lnbl9zaGFsbG93X2NvbW1pdHNfdG9fcmVmcyhzaSwgc2ktPnVzZWRfc2hhbGxvdywgTlVMTCk7CisKKwlzaS0+bmVlZF9yZWFjaGFiaWxpdHlfdGVzdCA9CisJCXhjYWxsb2Moc2ktPnNoYWxsb3ctPm5yLCBzaXplb2YoKnNpLT5uZWVkX3JlYWNoYWJpbGl0eV90ZXN0KSk7CisJc2ktPnJlYWNoYWJsZSA9CisJCXhjYWxsb2Moc2ktPnNoYWxsb3ctPm5yLCBzaXplb2YoKnNpLT5yZWFjaGFibGUpKTsKKwlzaS0+c2hhbGxvd19yZWYgPSB4Y2FsbG9jKHNpLT5yZWYtPm5yLCBzaXplb2YoKnNpLT5zaGFsbG93X3JlZikpOworCisJZm9yIChpID0gMDsgaSA8IHNpLT5ucl9vdXJzOyBpKyspCisJCXNpLT5uZWVkX3JlYWNoYWJpbGl0eV90ZXN0W3NpLT5vdXJzW2ldXSA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2ktPnNoYWxsb3ctPm5yOyBpKyspIHsKKwkJaWYgKCFzaS0+dXNlZF9zaGFsbG93W2ldKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCBiaXRtYXBfc2l6ZTsgaisrKSB7CisJCQlpZiAoIXNpLT51c2VkX3NoYWxsb3dbaV1bal0pCisJCQkJY29udGludWU7CisJCQlzaS0+bmVlZF9yZWFjaGFiaWxpdHlfdGVzdFtpXSsrOworCQkJZm9yIChrID0gMDsgayA8IDMyOyBrKyspCisJCQkJaWYgKHNpLT51c2VkX3NoYWxsb3dbaV1bal0gJiAoMSA8PCBrKSkKKwkJCQkJc2ktPnNoYWxsb3dfcmVmW2ogKiAzMiArIGtdKys7CisJCX0KKworCQkvKgorCQkgKiB0cnVlIGZvciB0aG9zZSBhc3NvY2lhdGVkIHdpdGggc29tZSByZWZzIGFuZCBiZWxvbmcKKwkJICogaW4gIm91cnMiIGxpc3QgYWthICJzdGVwIDcgbm90IGRvbmUgeWV0IgorCQkgKi8KKwkJc2ktPm5lZWRfcmVhY2hhYmlsaXR5X3Rlc3RbaV0gPQorCQkJc2ktPm5lZWRfcmVhY2hhYmlsaXR5X3Rlc3RbaV0gPiAxOworCX0KKworCS8qCisJICoga2VlcCBob29rcyBoYXBweSBieSBmb3JjaW5nIGEgdGVtcG9yYXJ5IHNoYWxsb3cgZmlsZSB2aWEKKwkgKiBlbnYgdmFyaWFibGUgYmVjYXVzZSB3ZSBjYW4ndCBhZGQgLS1zaGFsbG93LWZpbGUgdG8gZXZlcnkKKwkgKiBjb21tYW5kLiBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZCgpIHdpbGwgYmUgZG9uZSB3aXRoCisJICogdHJ1ZSAuZ2l0L3NoYWxsb3cgdGhvdWdoLgorCSAqLworCXNldGVudihHSVRfU0hBTExPV19GSUxFX0VOVklST05NRU5ULCBhbHRfc2hhbGxvd19maWxlLCAxKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3NoYWxsb3dfaW5mbyhzdHJ1Y3QgY29tbWFuZCAqY29tbWFuZHMsCisJCQkJc3RydWN0IHNoYWxsb3dfaW5mbyAqc2ksCisJCQkJc3RydWN0IHNoYTFfYXJyYXkgKnJlZikKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCWludCAqcmVmX3N0YXR1czsKKwlyZW1vdmVfbm9uZXhpc3RlbnRfdGhlaXJzX3NoYWxsb3coc2kpOworCWlmICghc2ktPm5yX291cnMgJiYgIXNpLT5ucl90aGVpcnMpIHsKKwkJc2hhbGxvd191cGRhdGUgPSAwOworCQlyZXR1cm47CisJfQorCisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKGlzX251bGxfc2hhMShjbWQtPm5ld19zaGExKSkKKwkJCWNvbnRpbnVlOworCQlzaGExX2FycmF5X2FwcGVuZChyZWYsIGNtZC0+bmV3X3NoYTEpOworCQljbWQtPmluZGV4ID0gcmVmLT5uciAtIDE7CisJfQorCXNpLT5yZWYgPSByZWY7CisKKwlpZiAoc2hhbGxvd191cGRhdGUpIHsKKwkJcHJlcGFyZV9zaGFsbG93X3VwZGF0ZShjb21tYW5kcywgc2kpOworCQlyZXR1cm47CisJfQorCisJcmVmX3N0YXR1cyA9IHhtYWxsb2Moc2l6ZW9mKCpyZWZfc3RhdHVzKSAqIHJlZi0+bnIpOworCWFzc2lnbl9zaGFsbG93X2NvbW1pdHNfdG9fcmVmcyhzaSwgTlVMTCwgcmVmX3N0YXR1cyk7CisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKGlzX251bGxfc2hhMShjbWQtPm5ld19zaGExKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocmVmX3N0YXR1c1tjbWQtPmluZGV4XSkgeworCQkJY21kLT5lcnJvcl9zdHJpbmcgPSAic2hhbGxvdyB1cGRhdGUgbm90IGFsbG93ZWQiOworCQkJY21kLT5za2lwX3VwZGF0ZSA9IDE7CisJCX0KKwl9CisJZnJlZShyZWZfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0KHN0cnVjdCBjb21tYW5kICpjb21tYW5kcywgY29uc3QgY2hhciAqdW5wYWNrX3N0YXR1cykKK3sKKwlzdHJ1Y3QgY29tbWFuZCAqY21kOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlwYWNrZXRfYnVmX3dyaXRlKCZidWYsICJ1bnBhY2sgJXNcbiIsCisJCQkgdW5wYWNrX3N0YXR1cyA/IHVucGFja19zdGF0dXMgOiAib2siKTsKKwlmb3IgKGNtZCA9IGNvbW1hbmRzOyBjbWQ7IGNtZCA9IGNtZC0+bmV4dCkgeworCQlpZiAoIWNtZC0+ZXJyb3Jfc3RyaW5nKQorCQkJcGFja2V0X2J1Zl93cml0ZSgmYnVmLCAib2sgJXNcbiIsCisJCQkJCSBjbWQtPnJlZl9uYW1lKTsKKwkJZWxzZQorCQkJcGFja2V0X2J1Zl93cml0ZSgmYnVmLCAibmcgJXMgJXNcbiIsCisJCQkJCSBjbWQtPnJlZl9uYW1lLCBjbWQtPmVycm9yX3N0cmluZyk7CisJfQorCXBhY2tldF9idWZfZmx1c2goJmJ1Zik7CisKKwlpZiAodXNlX3NpZGViYW5kKQorCQlzZW5kX3NpZGViYW5kKDEsIDEsIGJ1Zi5idWYsIGJ1Zi5sZW4sIHVzZV9zaWRlYmFuZCk7CisJZWxzZQorCQl3cml0ZV9vcl9kaWUoMSwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX29ubHkoc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzKQoreworCXN0cnVjdCBjb21tYW5kICpjbWQ7CisJZm9yIChjbWQgPSBjb21tYW5kczsgY21kOyBjbWQgPSBjbWQtPm5leHQpIHsKKwkJaWYgKCFpc19udWxsX3NoYTEoY21kLT5uZXdfc2hhMSkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK2ludCBjbWRfcmVjZWl2ZV9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBhZHZlcnRpc2VfcmVmcyA9IDA7CisJaW50IGk7CisJc3RydWN0IGNvbW1hbmQgKmNvbW1hbmRzOworCXN0cnVjdCBzaGExX2FycmF5IHNoYWxsb3cgPSBTSEExX0FSUkFZX0lOSVQ7CisJc3RydWN0IHNoYTFfYXJyYXkgcmVmID0gU0hBMV9BUlJBWV9JTklUOworCXN0cnVjdCBzaGFsbG93X2luZm8gc2k7CisKKwlwYWNrZXRfdHJhY2VfaWRlbnRpdHkoInJlY2VpdmUtcGFjayIpOworCisJYXJndisrOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gKmFyZ3YrKzsKKworCQlpZiAoKmFyZyA9PSAnLScpIHsKKwkJCWlmICghc3RyY21wKGFyZywgIi0tcXVpZXQiKSkgeworCQkJCXF1aWV0ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1hZHZlcnRpc2UtcmVmcyIpKSB7CisJCQkJYWR2ZXJ0aXNlX3JlZnMgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdGF0ZWxlc3MtcnBjIikpIHsKKwkJCQlzdGF0ZWxlc3NfcnBjID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tcmVqZWN0LXRoaW4tcGFjay1mb3ItdGVzdGluZyIpKSB7CisJCQkJZml4X3RoaW4gPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQl1c2FnZShyZWNlaXZlX3BhY2tfdXNhZ2UpOworCQl9CisJCWlmIChzZXJ2aWNlX2RpcikKKwkJCXVzYWdlKHJlY2VpdmVfcGFja191c2FnZSk7CisJCXNlcnZpY2VfZGlyID0gYXJnOworCX0KKwlpZiAoIXNlcnZpY2VfZGlyKQorCQl1c2FnZShyZWNlaXZlX3BhY2tfdXNhZ2UpOworCisJc2V0dXBfcGF0aCgpOworCisJaWYgKCFlbnRlcl9yZXBvKHNlcnZpY2VfZGlyLCAwKSkKKwkJZGllKCInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIGdpdCByZXBvc2l0b3J5Iiwgc2VydmljZV9kaXIpOworCisJZ2l0X2NvbmZpZyhyZWNlaXZlX3BhY2tfY29uZmlnLCBOVUxMKTsKKwlpZiAoY2VydF9ub25jZV9zZWVkKQorCQlwdXNoX2NlcnRfbm9uY2UgPSBwcmVwYXJlX3B1c2hfY2VydF9ub25jZShzZXJ2aWNlX2RpciwgdGltZShOVUxMKSk7CisKKwlpZiAoMCA8PSB0cmFuc2Zlcl91bnBhY2tfbGltaXQpCisJCXVucGFja19saW1pdCA9IHRyYW5zZmVyX3VucGFja19saW1pdDsKKwllbHNlIGlmICgwIDw9IHJlY2VpdmVfdW5wYWNrX2xpbWl0KQorCQl1bnBhY2tfbGltaXQgPSByZWNlaXZlX3VucGFja19saW1pdDsKKworCWlmIChhZHZlcnRpc2VfcmVmcyB8fCAhc3RhdGVsZXNzX3JwYykgeworCQl3cml0ZV9oZWFkX2luZm8oKTsKKwl9CisJaWYgKGFkdmVydGlzZV9yZWZzKQorCQlyZXR1cm4gMDsKKworCWlmICgoY29tbWFuZHMgPSByZWFkX2hlYWRfaW5mbygmc2hhbGxvdykpICE9IE5VTEwpIHsKKwkJY29uc3QgY2hhciAqdW5wYWNrX3N0YXR1cyA9IE5VTEw7CisKKwkJcHJlcGFyZV9zaGFsbG93X2luZm8oJnNpLCAmc2hhbGxvdyk7CisJCWlmICghc2kubnJfb3VycyAmJiAhc2kubnJfdGhlaXJzKQorCQkJc2hhbGxvd191cGRhdGUgPSAwOworCQlpZiAoIWRlbGV0ZV9vbmx5KGNvbW1hbmRzKSkgeworCQkJdW5wYWNrX3N0YXR1cyA9IHVucGFja193aXRoX3NpZGViYW5kKCZzaSk7CisJCQl1cGRhdGVfc2hhbGxvd19pbmZvKGNvbW1hbmRzLCAmc2ksICZyZWYpOworCQl9CisJCWV4ZWN1dGVfY29tbWFuZHMoY29tbWFuZHMsIHVucGFja19zdGF0dXMsICZzaSk7CisJCWlmIChwYWNrX2xvY2tmaWxlKQorCQkJdW5saW5rX29yX3dhcm4ocGFja19sb2NrZmlsZSk7CisJCWlmIChyZXBvcnRfc3RhdHVzKQorCQkJcmVwb3J0KGNvbW1hbmRzLCB1bnBhY2tfc3RhdHVzKTsKKwkJcnVuX3JlY2VpdmVfaG9vayhjb21tYW5kcywgInBvc3QtcmVjZWl2ZSIsIDEpOworCQlydW5fdXBkYXRlX3Bvc3RfaG9vayhjb21tYW5kcyk7CisJCWlmIChhdXRvX2djKSB7CisJCQljb25zdCBjaGFyICphcmd2X2djX2F1dG9bXSA9IHsKKwkJCQkiZ2MiLCAiLS1hdXRvIiwgIi0tcXVpZXQiLCBOVUxMLAorCQkJfTsKKwkJCWludCBvcHQgPSBSVU5fR0lUX0NNRCB8IFJVTl9DT01NQU5EX1NURE9VVF9UT19TVERFUlI7CisJCQlydW5fY29tbWFuZF92X29wdChhcmd2X2djX2F1dG8sIG9wdCk7CisJCX0KKwkJaWYgKGF1dG9fdXBkYXRlX3NlcnZlcl9pbmZvKQorCQkJdXBkYXRlX3NlcnZlcl9pbmZvKDApOworCQljbGVhcl9zaGFsbG93X2luZm8oJnNpKTsKKwl9CisJaWYgKHVzZV9zaWRlYmFuZCkKKwkJcGFja2V0X2ZsdXNoKDEpOworCXNoYTFfYXJyYXlfY2xlYXIoJnNoYWxsb3cpOworCXNoYTFfYXJyYXlfY2xlYXIoJnJlZik7CisJZnJlZSgodm9pZCAqKXB1c2hfY2VydF9ub25jZSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlZmxvZy5jIGIvYnVpbHRpbi9yZWZsb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTZjYTJhCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZWZsb2cuYwpAQCAtMCwwICsxLDc1OSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJyZWFjaGFibGUuaCIKKworLyogTkVFRFNXT1JLOiBzd2l0Y2ggdG8gdXNpbmcgcGFyc2Vfb3B0aW9ucyAqLworc3RhdGljIGNvbnN0IGNoYXIgcmVmbG9nX2V4cGlyZV91c2FnZVtdID0KKyJnaXQgcmVmbG9nIGV4cGlyZSBbLS1leHBpcmU9PHRpbWU+XSBbLS1leHBpcmUtdW5yZWFjaGFibGU9PHRpbWU+XSBbLS1yZXdyaXRlXSBbLS11cGRhdGVyZWZdIFstLXN0YWxlLWZpeF0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSBbLS1hbGxdIDxyZWZzPi4uLiI7CitzdGF0aWMgY29uc3QgY2hhciByZWZsb2dfZGVsZXRlX3VzYWdlW10gPQorImdpdCByZWZsb2cgZGVsZXRlIFstLXJld3JpdGVdIFstLXVwZGF0ZXJlZl0gWy0tZHJ5LXJ1biB8IC1uXSBbLS12ZXJib3NlXSA8cmVmcz4uLi4iOworc3RhdGljIGNvbnN0IGNoYXIgcmVmbG9nX2V4aXN0c191c2FnZVtdID0KKyJnaXQgcmVmbG9nIGV4aXN0cyA8cmVmPiI7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmF1bHRfcmVmbG9nX2V4cGlyZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZTsKKworc3RydWN0IGNtZF9yZWZsb2dfZXhwaXJlX2NiIHsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlpbnQgc3RhbGVmaXg7CisJdW5zaWduZWQgbG9uZyBleHBpcmVfdG90YWw7CisJdW5zaWduZWQgbG9uZyBleHBpcmVfdW5yZWFjaGFibGU7CisJaW50IHJlY25vOworfTsKKworc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiIHsKKwllbnVtIHsKKwkJVUVfTk9STUFMLAorCQlVRV9BTFdBWVMsCisJCVVFX0hFQUQKKwl9IHVucmVhY2hhYmxlX2V4cGlyZV9raW5kOworCXN0cnVjdCBjb21taXRfbGlzdCAqbWFya19saXN0OworCXVuc2lnbmVkIGxvbmcgbWFya19saW1pdDsKKwlzdHJ1Y3QgY21kX3JlZmxvZ19leHBpcmVfY2IgY21kOworCXN0cnVjdCBjb21taXQgKnRpcF9jb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICp0aXBzOworfTsKKworc3RydWN0IGNvbGxlY3RlZF9yZWZsb2cgeworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY2hhciByZWZsb2dbRkxFWF9BUlJBWV07Cit9OworCitzdHJ1Y3QgY29sbGVjdF9yZWZsb2dfY2IgeworCXN0cnVjdCBjb2xsZWN0ZWRfcmVmbG9nICoqZTsKKwlpbnQgYWxsb2M7CisJaW50IG5yOworfTsKKworI2RlZmluZSBJTkNPTVBMRVRFCSgxdTw8MTApCisjZGVmaW5lIFNUVURZSU5HCSgxdTw8MTEpCisjZGVmaW5lIFJFQUNIQUJMRQkoMXU8PDEyKQorCitzdGF0aWMgaW50IHRyZWVfaXNfY29tcGxldGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IGNvbXBsZXRlOworCXN0cnVjdCB0cmVlICp0cmVlOworCisJdHJlZSA9IGxvb2t1cF90cmVlKHNoYTEpOworCWlmICghdHJlZSkKKwkJcmV0dXJuIDA7CisJaWYgKHRyZWUtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCXJldHVybiAxOworCWlmICh0cmVlLT5vYmplY3QuZmxhZ3MgJiBJTkNPTVBMRVRFKQorCQlyZXR1cm4gMDsKKworCWlmICghdHJlZS0+YnVmZmVyKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQl2b2lkICpkYXRhID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFkYXRhKSB7CisJCQl0cmVlLT5vYmplY3QuZmxhZ3MgfD0gSU5DT01QTEVURTsKKwkJCXJldHVybiAwOworCQl9CisJCXRyZWUtPmJ1ZmZlciA9IGRhdGE7CisJCXRyZWUtPnNpemUgPSBzaXplOworCX0KKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwljb21wbGV0ZSA9IDE7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJaWYgKCFoYXNfc2hhMV9maWxlKGVudHJ5LnNoYTEpIHx8CisJCSAgICAoU19JU0RJUihlbnRyeS5tb2RlKSAmJiAhdHJlZV9pc19jb21wbGV0ZShlbnRyeS5zaGExKSkpIHsKKwkJCXRyZWUtPm9iamVjdC5mbGFncyB8PSBJTkNPTVBMRVRFOworCQkJY29tcGxldGUgPSAwOworCQl9CisJfQorCWZyZWVfdHJlZV9idWZmZXIodHJlZSk7CisKKwlpZiAoY29tcGxldGUpCisJCXRyZWUtPm9iamVjdC5mbGFncyB8PSBTRUVOOworCXJldHVybiBjb21wbGV0ZTsKK30KKworc3RhdGljIGludCBjb21taXRfaXNfY29tcGxldGUoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBvYmplY3RfYXJyYXkgc3R1ZHk7CisJc3RydWN0IG9iamVjdF9hcnJheSBmb3VuZDsKKwlpbnQgaXNfaW5jb21wbGV0ZSA9IDA7CisJaW50IGk7CisKKwkvKiBlYXJseSByZXR1cm4gKi8KKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTRUVOKQorCQlyZXR1cm4gMTsKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBJTkNPTVBMRVRFKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIEZpbmQgYWxsIGNvbW1pdHMgdGhhdCBhcmUgcmVhY2hhYmxlIGFuZCBhcmUgbm90IG1hcmtlZCBhcworCSAqIFNFRU4uICBUaGVuIG1ha2Ugc3VyZSB0aGUgdHJlZXMgYW5kIGJsb2JzIGNvbnRhaW5lZCBhcmUKKwkgKiBjb21wbGV0ZS4gIEFmdGVyIHRoYXQsIG1hcmsgdGhlc2UgY29tbWl0cyBhbHNvIGFzIFNFRU4uCisJICogSWYgc29tZSBvZiB0aGUgb2JqZWN0cyB0aGF0IGFyZSBuZWVkZWQgdG8gY29tcGxldGUgdGhpcworCSAqIGNvbW1pdCBhcmUgbWlzc2luZywgbWFyayB0aGlzIGNvbW1pdCBhcyBJTkNPTVBMRVRFLgorCSAqLworCW1lbXNldCgmc3R1ZHksIDAsIHNpemVvZihzdHVkeSkpOworCW1lbXNldCgmZm91bmQsIDAsIHNpemVvZihmb3VuZCkpOworCWFkZF9vYmplY3RfYXJyYXkoJmNvbW1pdC0+b2JqZWN0LCBOVUxMLCAmc3R1ZHkpOworCWFkZF9vYmplY3RfYXJyYXkoJmNvbW1pdC0+b2JqZWN0LCBOVUxMLCAmZm91bmQpOworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFNUVURZSU5HOworCXdoaWxlIChzdHVkeS5ucikgeworCQlzdHJ1Y3QgY29tbWl0ICpjOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKKworCQljID0gKHN0cnVjdCBjb21taXQgKilzdHVkeS5vYmplY3RzWy0tc3R1ZHkubnJdLml0ZW07CisJCWlmICghYy0+b2JqZWN0LnBhcnNlZCAmJiAhcGFyc2Vfb2JqZWN0KGMtPm9iamVjdC5zaGExKSkKKwkJCWMtPm9iamVjdC5mbGFncyB8PSBJTkNPTVBMRVRFOworCisJCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBJTkNPTVBMRVRFKSB7CisJCQlpc19pbmNvbXBsZXRlID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKGMtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCQljb250aW51ZTsKKwkJZm9yIChwYXJlbnQgPSBjLT5wYXJlbnRzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqcCA9IHBhcmVudC0+aXRlbTsKKwkJCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBTVFVEWUlORykKKwkJCQljb250aW51ZTsKKwkJCXAtPm9iamVjdC5mbGFncyB8PSBTVFVEWUlORzsKKwkJCWFkZF9vYmplY3RfYXJyYXkoJnAtPm9iamVjdCwgTlVMTCwgJnN0dWR5KTsKKwkJCWFkZF9vYmplY3RfYXJyYXkoJnAtPm9iamVjdCwgTlVMTCwgJmZvdW5kKTsKKwkJfQorCX0KKwlpZiAoIWlzX2luY29tcGxldGUpIHsKKwkJLyoKKwkJICogbWFrZSBzdXJlIGFsbCBjb21taXRzIGluICJmb3VuZCIgYXJyYXkgaGF2ZSBhbGwgdGhlCisJCSAqIG5lY2Vzc2FyeSBvYmplY3RzLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGZvdW5kLm5yOyBpKyspIHsKKwkJCXN0cnVjdCBjb21taXQgKmMgPQorCQkJCShzdHJ1Y3QgY29tbWl0ICopZm91bmQub2JqZWN0c1tpXS5pdGVtOworCQkJaWYgKCF0cmVlX2lzX2NvbXBsZXRlKGMtPnRyZWUtPm9iamVjdC5zaGExKSkgeworCQkJCWlzX2luY29tcGxldGUgPSAxOworCQkJCWMtPm9iamVjdC5mbGFncyB8PSBJTkNPTVBMRVRFOworCQkJfQorCQl9CisJCWlmICghaXNfaW5jb21wbGV0ZSkgeworCQkJLyogbWFyayBhbGwgZm91bmQgY29tbWl0cyBhcyBjb21wbGV0ZSwgaW93IFNFRU4gKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBmb3VuZC5ucjsgaSsrKQorCQkJCWZvdW5kLm9iamVjdHNbaV0uaXRlbS0+ZmxhZ3MgfD0gU0VFTjsKKwkJfQorCX0KKwkvKiBjbGVhciBmbGFncyBmcm9tIHRoZSBvYmplY3RzIHdlIHRyYXZlcnNlZCAqLworCWZvciAoaSA9IDA7IGkgPCBmb3VuZC5ucjsgaSsrKQorCQlmb3VuZC5vYmplY3RzW2ldLml0ZW0tPmZsYWdzICY9IH5TVFVEWUlORzsKKwlpZiAoaXNfaW5jb21wbGV0ZSkKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gSU5DT01QTEVURTsKKwllbHNlIHsKKwkJLyoKKwkJICogSWYgd2UgY29tZSBoZXJlLCB3ZSBoYXZlICgxKSB0cmF2ZXJzZWQgdGhlIGFuY2VzdHJ5IGNoYWluCisJCSAqIGZyb20gdGhlICJjb21taXQiIHVudGlsIHdlIHJlYWNoIFNFRU4gY29tbWl0cyAod2hpY2ggYXJlCisJCSAqIGtub3duIHRvIGJlIGNvbXBsZXRlKSwgYW5kICgyKSBtYWRlIHN1cmUgdGhhdCB0aGUgY29tbWl0cworCQkgKiBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGFib3ZlIHRyYXZlcnNhbCByZWZlciB0byB0cmVlcyB0aGF0CisJCSAqIGFyZSBjb21wbGV0ZS4gIFdoaWNoIG1lYW5zIHRoYXQgd2Uga25vdyAqYWxsKiB0aGUgY29tbWl0cworCQkgKiB3ZSBoYXZlIHNlZW4gZHVyaW5nIHRoaXMgcHJvY2VzcyBhcmUgY29tcGxldGUuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgZm91bmQubnI7IGkrKykKKwkJCWZvdW5kLm9iamVjdHNbaV0uaXRlbS0+ZmxhZ3MgfD0gU0VFTjsKKwl9CisJLyogZnJlZSBvYmplY3QgYXJyYXlzICovCisJZnJlZShzdHVkeS5vYmplY3RzKTsKKwlmcmVlKGZvdW5kLm9iamVjdHMpOworCXJldHVybiAhaXNfaW5jb21wbGV0ZTsKK30KKworc3RhdGljIGludCBrZWVwX2VudHJ5KHN0cnVjdCBjb21taXQgKippdCwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwlpZiAoaXNfbnVsbF9zaGExKHNoYTEpKQorCQlyZXR1cm4gMTsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBNYWtlIHN1cmUgZXZlcnl0aGluZyBpbiB0aGlzIGNvbW1pdCBleGlzdHMuCisJICoKKwkgKiBXZSBoYXZlIHdhbGtlZCBhbGwgdGhlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gdGhlIHJlZnMKKwkgKiBhbmQgY2FjaGUgZWFybGllci4gIFRoZSBjb21taXRzIHJlYWNoYWJsZSBieSB0aGlzIGNvbW1pdAorCSAqIG11c3QgbWVldCBTRUVOIGNvbW1pdHMgLS0gYW5kIHRoZW4gd2Ugc2hvdWxkIG1hcmsgdGhlbSBhcworCSAqIFNFRU4gYXMgd2VsbC4KKwkgKi8KKwlpZiAoIWNvbW1pdF9pc19jb21wbGV0ZShjb21taXQpKQorCQlyZXR1cm4gMDsKKwkqaXQgPSBjb21taXQ7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBTdGFydGluZyBmcm9tIGNvbW1pdHMgaW4gdGhlIGNiLT5tYXJrX2xpc3QsIG1hcmsgY29tbWl0cyB0aGF0IGFyZQorICogcmVhY2hhYmxlIGZyb20gdGhlbS4gIFN0b3AgdGhlIHRyYXZlcnNhbCBhdCBjb21taXRzIG9sZGVyIHRoYW4KKyAqIHRoZSBleHBpcmVfbGltaXQgYW5kIHF1ZXVlIHRoZW0gYmFjaywgc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBjYWxsCisgKiB1cyBhZ2FpbiB0byByZXN0YXJ0IHRoZSB0cmF2ZXJzYWwgd2l0aCBsb25nZXIgZXhwaXJlX2xpbWl0LgorICovCitzdGF0aWMgdm9pZCBtYXJrX3JlYWNoYWJsZShzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19wb2xpY3lfY2IgKmNiKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBlbmRpbmc7CisJdW5zaWduZWQgbG9uZyBleHBpcmVfbGltaXQgPSBjYi0+bWFya19saW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxlZnRvdmVyID0gTlVMTDsKKworCWZvciAocGVuZGluZyA9IGNiLT5tYXJrX2xpc3Q7IHBlbmRpbmc7IHBlbmRpbmcgPSBwZW5kaW5nLT5uZXh0KQorCQlwZW5kaW5nLT5pdGVtLT5vYmplY3QuZmxhZ3MgJj0gflJFQUNIQUJMRTsKKworCXBlbmRpbmcgPSBjYi0+bWFya19saXN0OworCXdoaWxlIChwZW5kaW5nKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqZW50cnkgPSBwZW5kaW5nOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudDsKKwkJcGVuZGluZyA9IGVudHJ5LT5uZXh0OworCQljb21taXQgPSBlbnRyeS0+aXRlbTsKKwkJZnJlZShlbnRyeSk7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSkKKwkJCWNvbnRpbnVlOworCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCQljb250aW51ZTsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gUkVBQ0hBQkxFOworCQlpZiAoY29tbWl0LT5kYXRlIDwgZXhwaXJlX2xpbWl0KSB7CisJCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmbGVmdG92ZXIpOworCQkJY29udGludWU7CisJCX0KKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gUkVBQ0hBQkxFOworCQlwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisJCXdoaWxlIChwYXJlbnQpIHsKKwkJCWNvbW1pdCA9IHBhcmVudC0+aXRlbTsKKwkJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKwkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSkKKwkJCQljb250aW51ZTsKKwkJCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsICZwZW5kaW5nKTsKKwkJfQorCX0KKwljYi0+bWFya19saXN0ID0gbGVmdG92ZXI7Cit9CisKK3N0YXRpYyBpbnQgdW5yZWFjaGFibGUoc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiICpjYiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCS8qCisJICogV2UgbWF5IG9yIG1heSBub3QgaGF2ZSB0aGUgY29tbWl0IHlldCAtIGlmIG5vdCwgbG9vayBpdAorCSAqIHVwIHVzaW5nIHRoZSBzdXBwbGllZCBzaGExLgorCSAqLworCWlmICghY29tbWl0KSB7CisJCWlmIChpc19udWxsX3NoYTEoc2hhMSkpCisJCQlyZXR1cm4gMDsKKworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7CisKKwkJLyogTm90IGEgY29tbWl0IC0tIGtlZXAgaXQgKi8KKwkJaWYgKCFjb21taXQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBSZWFjaGFibGUgZnJvbSB0aGUgY3VycmVudCByZWY/ICBEb24ndCBwcnVuZS4gKi8KKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBSRUFDSEFCTEUpCisJCXJldHVybiAwOworCisJaWYgKGNiLT5tYXJrX2xpc3QgJiYgY2ItPm1hcmtfbGltaXQpIHsKKwkJY2ItPm1hcmtfbGltaXQgPSAwOyAvKiBkaWcgZG93biB0byB0aGUgcm9vdCAqLworCQltYXJrX3JlYWNoYWJsZShjYik7CisJfQorCisJcmV0dXJuICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBSRUFDSEFCTEUpOworfQorCisvKgorICogUmV0dXJuIHRydWUgaWZmIHRoZSBzcGVjaWZpZWQgcmVmbG9nIGVudHJ5IHNob3VsZCBiZSBleHBpcmVkLgorICovCitzdGF0aWMgaW50IHNob3VsZF9leHBpcmVfcmVmbG9nX2VudCh1bnNpZ25lZCBjaGFyICpvc2hhMSwgdW5zaWduZWQgY2hhciAqbnNoYTEsCisJCQkJICAgIGNvbnN0IGNoYXIgKmVtYWlsLCB1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCwgaW50IHR6LAorCQkJCSAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBleHBpcmVfcmVmbG9nX3BvbGljeV9jYiAqY2IgPSBjYl9kYXRhOworCXN0cnVjdCBjb21taXQgKm9sZCwgKm5ldzsKKworCWlmICh0aW1lc3RhbXAgPCBjYi0+Y21kLmV4cGlyZV90b3RhbCkKKwkJcmV0dXJuIDE7CisKKwlvbGQgPSBuZXcgPSBOVUxMOworCWlmIChjYi0+Y21kLnN0YWxlZml4ICYmCisJICAgICgha2VlcF9lbnRyeSgmb2xkLCBvc2hhMSkgfHwgIWtlZXBfZW50cnkoJm5ldywgbnNoYTEpKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAodGltZXN0YW1wIDwgY2ItPmNtZC5leHBpcmVfdW5yZWFjaGFibGUpIHsKKwkJaWYgKGNiLT51bnJlYWNoYWJsZV9leHBpcmVfa2luZCA9PSBVRV9BTFdBWVMpCisJCQlyZXR1cm4gMTsKKwkJaWYgKHVucmVhY2hhYmxlKGNiLCBvbGQsIG9zaGExKSB8fCB1bnJlYWNoYWJsZShjYiwgbmV3LCBuc2hhMSkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoY2ItPmNtZC5yZWNubyAmJiAtLShjYi0+Y21kLnJlY25vKSA9PSAwKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB1c2hfdGlwX3RvX2xpc3QoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0ID0gY2JfZGF0YTsKKwlzdHJ1Y3QgY29tbWl0ICp0aXBfY29tbWl0OworCWlmIChmbGFncyAmIFJFRl9JU1NZTVJFRikKKwkJcmV0dXJuIDA7CisJdGlwX2NvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShvaWQtPmhhc2gsIDEpOworCWlmICghdGlwX2NvbW1pdCkKKwkJcmV0dXJuIDA7CisJY29tbWl0X2xpc3RfaW5zZXJ0KHRpcF9jb21taXQsIGxpc3QpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWZsb2dfZXhwaXJ5X3ByZXBhcmUoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBleHBpcmVfcmVmbG9nX3BvbGljeV9jYiAqY2IgPSBjYl9kYXRhOworCisJaWYgKCFjYi0+Y21kLmV4cGlyZV91bnJlYWNoYWJsZSB8fCAhc3RyY21wKHJlZm5hbWUsICJIRUFEIikpIHsKKwkJY2ItPnRpcF9jb21taXQgPSBOVUxMOworCQljYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgPSBVRV9IRUFEOworCX0gZWxzZSB7CisJCWNiLT50aXBfY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTEsIDEpOworCQlpZiAoIWNiLT50aXBfY29tbWl0KQorCQkJY2ItPnVucmVhY2hhYmxlX2V4cGlyZV9raW5kID0gVUVfQUxXQVlTOworCQllbHNlCisJCQljYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgPSBVRV9OT1JNQUw7CisJfQorCisJaWYgKGNiLT5jbWQuZXhwaXJlX3VucmVhY2hhYmxlIDw9IGNiLT5jbWQuZXhwaXJlX3RvdGFsKQorCQljYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgPSBVRV9BTFdBWVM7CisKKwljYi0+bWFya19saXN0ID0gTlVMTDsKKwljYi0+dGlwcyA9IE5VTEw7CisJaWYgKGNiLT51bnJlYWNoYWJsZV9leHBpcmVfa2luZCAhPSBVRV9BTFdBWVMpIHsKKwkJaWYgKGNiLT51bnJlYWNoYWJsZV9leHBpcmVfa2luZCA9PSBVRV9IRUFEKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW07CisKKwkJCWZvcl9lYWNoX3JlZihwdXNoX3RpcF90b19saXN0LCAmY2ItPnRpcHMpOworCQkJZm9yIChlbGVtID0gY2ItPnRpcHM7IGVsZW07IGVsZW0gPSBlbGVtLT5uZXh0KQorCQkJCWNvbW1pdF9saXN0X2luc2VydChlbGVtLT5pdGVtLCAmY2ItPm1hcmtfbGlzdCk7CisJCX0gZWxzZSB7CisJCQljb21taXRfbGlzdF9pbnNlcnQoY2ItPnRpcF9jb21taXQsICZjYi0+bWFya19saXN0KTsKKwkJfQorCQljYi0+bWFya19saW1pdCA9IGNiLT5jbWQuZXhwaXJlX3RvdGFsOworCQltYXJrX3JlYWNoYWJsZShjYik7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWZsb2dfZXhwaXJ5X2NsZWFudXAodm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19wb2xpY3lfY2IgKmNiID0gY2JfZGF0YTsKKworCWlmIChjYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgIT0gVUVfQUxXQVlTKSB7CisJCWlmIChjYi0+dW5yZWFjaGFibGVfZXhwaXJlX2tpbmQgPT0gVUVfSEVBRCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICplbGVtOworCQkJZm9yIChlbGVtID0gY2ItPnRpcHM7IGVsZW07IGVsZW0gPSBlbGVtLT5uZXh0KQorCQkJCWNsZWFyX2NvbW1pdF9tYXJrcyhlbGVtLT5pdGVtLCBSRUFDSEFCTEUpOworCQkJZnJlZV9jb21taXRfbGlzdChjYi0+dGlwcyk7CisJCX0gZWxzZSB7CisJCQljbGVhcl9jb21taXRfbWFya3MoY2ItPnRpcF9jb21taXQsIFJFQUNIQUJMRSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgY29sbGVjdF9yZWZsb2coY29uc3QgY2hhciAqcmVmLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCB1bnVzZWQsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNvbGxlY3RlZF9yZWZsb2cgKmU7CisJc3RydWN0IGNvbGxlY3RfcmVmbG9nX2NiICpjYiA9IGNiX2RhdGE7CisJc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4ocmVmKTsKKworCWUgPSB4bWFsbG9jKHNpemVvZigqZSkgKyBuYW1lbGVuICsgMSk7CisJaGFzaGNweShlLT5zaGExLCBvaWQtPmhhc2gpOworCW1lbWNweShlLT5yZWZsb2csIHJlZiwgbmFtZWxlbiArIDEpOworCUFMTE9DX0dST1coY2ItPmUsIGNiLT5uciArIDEsIGNiLT5hbGxvYyk7CisJY2ItPmVbY2ItPm5yKytdID0gZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZWZsb2dfZXhwaXJlX2NmZyB7CisJc3RydWN0IHJlZmxvZ19leHBpcmVfY2ZnICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZXhwaXJlX3RvdGFsOworCXVuc2lnbmVkIGxvbmcgZXhwaXJlX3VucmVhY2hhYmxlOworCXNpemVfdCBsZW47CisJY2hhciBwYXR0ZXJuW0ZMRVhfQVJSQVldOworfSAqcmVmbG9nX2V4cGlyZV9jZmcsICoqcmVmbG9nX2V4cGlyZV9jZmdfdGFpbDsKKworc3RhdGljIHN0cnVjdCByZWZsb2dfZXhwaXJlX2NmZyAqZmluZF9jZmdfZW50KGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHJlZmxvZ19leHBpcmVfY2ZnICplbnQ7CisKKwlpZiAoIXJlZmxvZ19leHBpcmVfY2ZnX3RhaWwpCisJCXJlZmxvZ19leHBpcmVfY2ZnX3RhaWwgPSAmcmVmbG9nX2V4cGlyZV9jZmc7CisKKwlmb3IgKGVudCA9IHJlZmxvZ19leHBpcmVfY2ZnOyBlbnQ7IGVudCA9IGVudC0+bmV4dCkKKwkJaWYgKGVudC0+bGVuID09IGxlbiAmJgorCQkgICAgIW1lbWNtcChlbnQtPnBhdHRlcm4sIHBhdHRlcm4sIGxlbikpCisJCQlyZXR1cm4gZW50OworCisJZW50ID0geGNhbGxvYygxLCAoc2l6ZW9mKCplbnQpICsgbGVuKSk7CisJbWVtY3B5KGVudC0+cGF0dGVybiwgcGF0dGVybiwgbGVuKTsKKwllbnQtPmxlbiA9IGxlbjsKKwkqcmVmbG9nX2V4cGlyZV9jZmdfdGFpbCA9IGVudDsKKwlyZWZsb2dfZXhwaXJlX2NmZ190YWlsID0gJihlbnQtPm5leHQpOworCXJldHVybiBlbnQ7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZXhwaXJlX2NmZ192YWx1ZShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB1bnNpZ25lZCBsb25nICpleHBpcmUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJaWYgKHBhcnNlX2V4cGlyeV9kYXRlKHZhbHVlLCBleHBpcmUpKQorCQlyZXR1cm4gZXJyb3IoXygiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiKSwKKwkJCSAgICAgdmFsdWUsIHZhcik7CisJcmV0dXJuIDA7Cit9CisKKy8qIGV4cGlyeSB0aW1lciBzbG90ICovCisjZGVmaW5lIEVYUElSRV9UT1RBTCAgIDAxCisjZGVmaW5lIEVYUElSRV9VTlJFQUNIIDAyCisKK3N0YXRpYyBpbnQgcmVmbG9nX2V4cGlyZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqcGF0dGVybiwgKmtleTsKKwlpbnQgcGF0dGVybl9sZW47CisJdW5zaWduZWQgbG9uZyBleHBpcmU7CisJaW50IHNsb3Q7CisJc3RydWN0IHJlZmxvZ19leHBpcmVfY2ZnICplbnQ7CisKKwlpZiAocGFyc2VfY29uZmlnX2tleSh2YXIsICJnYyIsICZwYXR0ZXJuLCAmcGF0dGVybl9sZW4sICZrZXkpIDwgMCkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisKKwlpZiAoIXN0cmNtcChrZXksICJyZWZsb2dleHBpcmUiKSkgeworCQlzbG90ID0gRVhQSVJFX1RPVEFMOworCQlpZiAocGFyc2VfZXhwaXJlX2NmZ192YWx1ZSh2YXIsIHZhbHVlLCAmZXhwaXJlKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAicmVmbG9nZXhwaXJldW5yZWFjaGFibGUiKSkgeworCQlzbG90ID0gRVhQSVJFX1VOUkVBQ0g7CisJCWlmIChwYXJzZV9leHBpcmVfY2ZnX3ZhbHVlKHZhciwgdmFsdWUsICZleHBpcmUpKQorCQkJcmV0dXJuIC0xOworCX0gZWxzZQorCQlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKKworCWlmICghcGF0dGVybikgeworCQlzd2l0Y2ggKHNsb3QpIHsKKwkJY2FzZSBFWFBJUkVfVE9UQUw6CisJCQlkZWZhdWx0X3JlZmxvZ19leHBpcmUgPSBleHBpcmU7CisJCQlicmVhazsKKwkJY2FzZSBFWFBJUkVfVU5SRUFDSDoKKwkJCWRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZSA9IGV4cGlyZTsKKwkJCWJyZWFrOworCQl9CisJCXJldHVybiAwOworCX0KKworCWVudCA9IGZpbmRfY2ZnX2VudChwYXR0ZXJuLCBwYXR0ZXJuX2xlbik7CisJaWYgKCFlbnQpCisJCXJldHVybiAtMTsKKwlzd2l0Y2ggKHNsb3QpIHsKKwljYXNlIEVYUElSRV9UT1RBTDoKKwkJZW50LT5leHBpcmVfdG90YWwgPSBleHBpcmU7CisJCWJyZWFrOworCWNhc2UgRVhQSVJFX1VOUkVBQ0g6CisJCWVudC0+ZXhwaXJlX3VucmVhY2hhYmxlID0gZXhwaXJlOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yZWZsb2dfZXhwaXJ5X3BhcmFtKHN0cnVjdCBjbWRfcmVmbG9nX2V4cGlyZV9jYiAqY2IsIGludCBzbG90LCBjb25zdCBjaGFyICpyZWYpCit7CisJc3RydWN0IHJlZmxvZ19leHBpcmVfY2ZnICplbnQ7CisKKwlpZiAoc2xvdCA9PSAoRVhQSVJFX1RPVEFMfEVYUElSRV9VTlJFQUNIKSkKKwkJcmV0dXJuOyAvKiBib3RoIGdpdmVuIGV4cGxpY2l0bHkgLS0gbm90aGluZyB0byB0d2VhayAqLworCisJZm9yIChlbnQgPSByZWZsb2dfZXhwaXJlX2NmZzsgZW50OyBlbnQgPSBlbnQtPm5leHQpIHsKKwkJaWYgKCF3aWxkbWF0Y2goZW50LT5wYXR0ZXJuLCByZWYsIDAsIE5VTEwpKSB7CisJCQlpZiAoIShzbG90ICYgRVhQSVJFX1RPVEFMKSkKKwkJCQljYi0+ZXhwaXJlX3RvdGFsID0gZW50LT5leHBpcmVfdG90YWw7CisJCQlpZiAoIShzbG90ICYgRVhQSVJFX1VOUkVBQ0gpKQorCQkJCWNiLT5leHBpcmVfdW5yZWFjaGFibGUgPSBlbnQtPmV4cGlyZV91bnJlYWNoYWJsZTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qCisJICogSWYgdW5jb25maWd1cmVkLCBtYWtlIHN0YXNoIG5ldmVyIGV4cGlyZQorCSAqLworCWlmICghc3RyY21wKHJlZiwgInJlZnMvc3Rhc2giKSkgeworCQlpZiAoIShzbG90ICYgRVhQSVJFX1RPVEFMKSkKKwkJCWNiLT5leHBpcmVfdG90YWwgPSAwOworCQlpZiAoIShzbG90ICYgRVhQSVJFX1VOUkVBQ0gpKQorCQkJY2ItPmV4cGlyZV91bnJlYWNoYWJsZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKiBOb3RoaW5nIG1hdGNoZWQgLS0gdXNlIHRoZSBkZWZhdWx0IHZhbHVlICovCisJaWYgKCEoc2xvdCAmIEVYUElSRV9UT1RBTCkpCisJCWNiLT5leHBpcmVfdG90YWwgPSBkZWZhdWx0X3JlZmxvZ19leHBpcmU7CisJaWYgKCEoc2xvdCAmIEVYUElSRV9VTlJFQUNIKSkKKwkJY2ItPmV4cGlyZV91bnJlYWNoYWJsZSA9IGRlZmF1bHRfcmVmbG9nX2V4cGlyZV91bnJlYWNoYWJsZTsKK30KKworc3RhdGljIGludCBjbWRfcmVmbG9nX2V4cGlyZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19wb2xpY3lfY2IgY2I7CisJdW5zaWduZWQgbG9uZyBub3cgPSB0aW1lKE5VTEwpOworCWludCBpLCBzdGF0dXMsIGRvX2FsbDsKKwlpbnQgZXhwbGljaXRfZXhwaXJ5ID0gMDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCisJZGVmYXVsdF9yZWZsb2dfZXhwaXJlX3VucmVhY2hhYmxlID0gbm93IC0gMzAgKiAyNCAqIDM2MDA7CisJZGVmYXVsdF9yZWZsb2dfZXhwaXJlID0gbm93IC0gOTAgKiAyNCAqIDM2MDA7CisJZ2l0X2NvbmZpZyhyZWZsb2dfZXhwaXJlX2NvbmZpZywgTlVMTCk7CisKKwlzYXZlX2NvbW1pdF9idWZmZXIgPSAwOworCWRvX2FsbCA9IHN0YXR1cyA9IDA7CisJbWVtc2V0KCZjYiwgMCwgc2l6ZW9mKGNiKSk7CisKKwljYi5jbWQuZXhwaXJlX3RvdGFsID0gZGVmYXVsdF9yZWZsb2dfZXhwaXJlOworCWNiLmNtZC5leHBpcmVfdW5yZWFjaGFibGUgPSBkZWZhdWx0X3JlZmxvZ19leHBpcmVfdW5yZWFjaGFibGU7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCWlmICghc3RyY21wKGFyZywgIi0tZHJ5LXJ1biIpIHx8ICFzdHJjbXAoYXJnLCAiLW4iKSkKKwkJCWZsYWdzIHw9IEVYUElSRV9SRUZMT0dTX0RSWV9SVU47CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tZXhwaXJlPSIpKSB7CisJCQlpZiAocGFyc2VfZXhwaXJ5X2RhdGUoYXJnICsgOSwgJmNiLmNtZC5leHBpcmVfdG90YWwpKQorCQkJCWRpZShfKCInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIpLCBhcmcpOworCQkJZXhwbGljaXRfZXhwaXJ5IHw9IEVYUElSRV9UT1RBTDsKKwkJfQorCQllbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItLWV4cGlyZS11bnJlYWNoYWJsZT0iKSkgeworCQkJaWYgKHBhcnNlX2V4cGlyeV9kYXRlKGFyZyArIDIxLCAmY2IuY21kLmV4cGlyZV91bnJlYWNoYWJsZSkpCisJCQkJZGllKF8oIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIiksIGFyZyk7CisJCQlleHBsaWNpdF9leHBpcnkgfD0gRVhQSVJFX1VOUkVBQ0g7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXN0YWxlLWZpeCIpKQorCQkJY2IuY21kLnN0YWxlZml4ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJld3JpdGUiKSkKKwkJCWZsYWdzIHw9IEVYUElSRV9SRUZMT0dTX1JFV1JJVEU7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS11cGRhdGVyZWYiKSkKKwkJCWZsYWdzIHw9IEVYUElSRV9SRUZMT0dTX1VQREFURV9SRUY7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1hbGwiKSkKKwkJCWRvX2FsbCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJib3NlIikpCisJCQlmbGFncyB8PSBFWFBJUkVfUkVGTE9HU19WRVJCT1NFOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKGFyZ1swXSA9PSAnLScpCisJCQl1c2FnZShyZWZsb2dfZXhwaXJlX3VzYWdlKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBXZSBjYW4gdHJ1c3QgdGhlIGNvbW1pdHMgYW5kIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gcmVmcworCSAqIGV2ZW4gaW4gb2xkZXIgcmVwb3NpdG9yeS4gIFdlIGNhbm5vdCB0cnVzdCB3aGF0J3MgcmVhY2hhYmxlCisJICogZnJvbSByZWZsb2cgaWYgdGhlIHJlcG9zaXRvcnkgd2FzIHBydW5lZCB3aXRoIG9sZGVyIGdpdC4KKwkgKi8KKwlpZiAoY2IuY21kLnN0YWxlZml4KSB7CisJCWluaXRfcmV2aXNpb25zKCZjYi5jbWQucmV2cywgcHJlZml4KTsKKwkJaWYgKGZsYWdzICYgRVhQSVJFX1JFRkxPR1NfVkVSQk9TRSkKKwkJCXByaW50ZigiTWFya2luZyByZWFjaGFibGUgb2JqZWN0cy4uLiIpOworCQltYXJrX3JlYWNoYWJsZV9vYmplY3RzKCZjYi5jbWQucmV2cywgMCwgMCwgTlVMTCk7CisJCWlmIChmbGFncyAmIEVYUElSRV9SRUZMT0dTX1ZFUkJPU0UpCisJCQlwdXRjaGFyKCdcbicpOworCX0KKworCWlmIChkb19hbGwpIHsKKwkJc3RydWN0IGNvbGxlY3RfcmVmbG9nX2NiIGNvbGxlY3RlZDsKKwkJaW50IGk7CisKKwkJbWVtc2V0KCZjb2xsZWN0ZWQsIDAsIHNpemVvZihjb2xsZWN0ZWQpKTsKKwkJZm9yX2VhY2hfcmVmbG9nKGNvbGxlY3RfcmVmbG9nLCAmY29sbGVjdGVkKTsKKwkJZm9yIChpID0gMDsgaSA8IGNvbGxlY3RlZC5ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgY29sbGVjdGVkX3JlZmxvZyAqZSA9IGNvbGxlY3RlZC5lW2ldOworCQkJc2V0X3JlZmxvZ19leHBpcnlfcGFyYW0oJmNiLmNtZCwgZXhwbGljaXRfZXhwaXJ5LCBlLT5yZWZsb2cpOworCQkJc3RhdHVzIHw9IHJlZmxvZ19leHBpcmUoZS0+cmVmbG9nLCBlLT5zaGExLCBmbGFncywKKwkJCQkJCXJlZmxvZ19leHBpcnlfcHJlcGFyZSwKKwkJCQkJCXNob3VsZF9leHBpcmVfcmVmbG9nX2VudCwKKwkJCQkJCXJlZmxvZ19leHBpcnlfY2xlYW51cCwKKwkJCQkJCSZjYik7CisJCQlmcmVlKGUpOworCQl9CisJCWZyZWUoY29sbGVjdGVkLmUpOworCX0KKworCWZvciAoOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNoYXIgKnJlZjsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaWYgKCFkd2ltX2xvZyhhcmd2W2ldLCBzdHJsZW4oYXJndltpXSksIHNoYTEsICZyZWYpKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoIiVzIHBvaW50cyBub3doZXJlISIsIGFyZ3ZbaV0pOworCQkJY29udGludWU7CisJCX0KKwkJc2V0X3JlZmxvZ19leHBpcnlfcGFyYW0oJmNiLmNtZCwgZXhwbGljaXRfZXhwaXJ5LCByZWYpOworCQlzdGF0dXMgfD0gcmVmbG9nX2V4cGlyZShyZWYsIHNoYTEsIGZsYWdzLAorCQkJCQlyZWZsb2dfZXhwaXJ5X3ByZXBhcmUsCisJCQkJCXNob3VsZF9leHBpcmVfcmVmbG9nX2VudCwKKwkJCQkJcmVmbG9nX2V4cGlyeV9jbGVhbnVwLAorCQkJCQkmY2IpOworCX0KKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGNvdW50X3JlZmxvZ19lbnQodW5zaWduZWQgY2hhciAqb3NoYTEsIHVuc2lnbmVkIGNoYXIgKm5zaGExLAorCQljb25zdCBjaGFyICplbWFpbCwgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAsIGludCB0eiwKKwkJY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19wb2xpY3lfY2IgKmNiID0gY2JfZGF0YTsKKwlpZiAoIWNiLT5jbWQuZXhwaXJlX3RvdGFsIHx8IHRpbWVzdGFtcCA8IGNiLT5jbWQuZXhwaXJlX3RvdGFsKQorCQljYi0+Y21kLnJlY25vKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21kX3JlZmxvZ19kZWxldGUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiIGNiOworCWludCBpLCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisKKwltZW1zZXQoJmNiLCAwLCBzaXplb2YoY2IpKTsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kcnktcnVuIikgfHwgIXN0cmNtcChhcmcsICItbiIpKQorCQkJZmxhZ3MgfD0gRVhQSVJFX1JFRkxPR1NfRFJZX1JVTjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJld3JpdGUiKSkKKwkJCWZsYWdzIHw9IEVYUElSRV9SRUZMT0dTX1JFV1JJVEU7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS11cGRhdGVyZWYiKSkKKwkJCWZsYWdzIHw9IEVYUElSRV9SRUZMT0dTX1VQREFURV9SRUY7CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS12ZXJib3NlIikpCisJCQlmbGFncyB8PSBFWFBJUkVfUkVGTE9HU19WRVJCT1NFOworCQllbHNlIGlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKGFyZ1swXSA9PSAnLScpCisJCQl1c2FnZShyZWZsb2dfZGVsZXRlX3VzYWdlKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJfQorCisJaWYgKGFyZ2MgLSBpIDwgMSkKKwkJcmV0dXJuIGVycm9yKCJOb3RoaW5nIHRvIGRlbGV0ZT8iKTsKKworCWZvciAoIDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICpzcGVjID0gc3Ryc3RyKGFyZ3ZbaV0sICJAeyIpOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljaGFyICplcCwgKnJlZjsKKwkJaW50IHJlY25vOworCisJCWlmICghc3BlYykgeworCQkJc3RhdHVzIHw9IGVycm9yKCJOb3QgYSByZWZsb2c6ICVzIiwgYXJndltpXSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghZHdpbV9sb2coYXJndltpXSwgc3BlYyAtIGFyZ3ZbaV0sIHNoYTEsICZyZWYpKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoIm5vIHJlZmxvZyBmb3IgJyVzJyIsIGFyZ3ZbaV0pOworCQkJY29udGludWU7CisJCX0KKworCQlyZWNubyA9IHN0cnRvdWwoc3BlYyArIDIsICZlcCwgMTApOworCQlpZiAoKmVwID09ICd9JykgeworCQkJY2IuY21kLnJlY25vID0gLXJlY25vOworCQkJZm9yX2VhY2hfcmVmbG9nX2VudChyZWYsIGNvdW50X3JlZmxvZ19lbnQsICZjYik7CisJCX0gZWxzZSB7CisJCQljYi5jbWQuZXhwaXJlX3RvdGFsID0gYXBwcm94aWRhdGUoc3BlYyArIDIpOworCQkJZm9yX2VhY2hfcmVmbG9nX2VudChyZWYsIGNvdW50X3JlZmxvZ19lbnQsICZjYik7CisJCQljYi5jbWQuZXhwaXJlX3RvdGFsID0gMDsKKwkJfQorCisJCXN0YXR1cyB8PSByZWZsb2dfZXhwaXJlKHJlZiwgc2hhMSwgZmxhZ3MsCisJCQkJCXJlZmxvZ19leHBpcnlfcHJlcGFyZSwKKwkJCQkJc2hvdWxkX2V4cGlyZV9yZWZsb2dfZW50LAorCQkJCQlyZWZsb2dfZXhwaXJ5X2NsZWFudXAsCisJCQkJCSZjYik7CisJCWZyZWUocmVmKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBjbWRfcmVmbG9nX2V4aXN0cyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgc3RhcnQgPSAwOworCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCQlpZiAoIXN0cmNtcChhcmcsICItLSIpKSB7CisJCQlpKys7CisJCQlicmVhazsKKwkJfQorCQllbHNlIGlmIChhcmdbMF0gPT0gJy0nKQorCQkJdXNhZ2UocmVmbG9nX2V4aXN0c191c2FnZSk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCXN0YXJ0ID0gaTsKKworCWlmIChhcmdjIC0gc3RhcnQgIT0gMSkKKwkJdXNhZ2UocmVmbG9nX2V4aXN0c191c2FnZSk7CisKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoYXJndltzdGFydF0sIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwpKQorCQlkaWUoImludmFsaWQgcmVmIGZvcm1hdDogJXMiLCBhcmd2W3N0YXJ0XSk7CisJcmV0dXJuICFyZWZsb2dfZXhpc3RzKGFyZ3Zbc3RhcnRdKTsKK30KKworLyoKKyAqIG1haW4gInJlZmxvZyIKKyAqLworCitzdGF0aWMgY29uc3QgY2hhciByZWZsb2dfdXNhZ2VbXSA9CisiZ2l0IHJlZmxvZyBbIHNob3cgfCBleHBpcmUgfCBkZWxldGUgfCBleGlzdHMgXSI7CisKK2ludCBjbWRfcmVmbG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZShyZWZsb2dfdXNhZ2UpOworCisJLyogV2l0aCBubyBjb21tYW5kLCB3ZSBkZWZhdWx0IHRvIHNob3dpbmcgaXQuICovCisJaWYgKGFyZ2MgPCAyIHx8ICphcmd2WzFdID09ICctJykKKwkJcmV0dXJuIGNtZF9sb2dfcmVmbG9nKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAic2hvdyIpKQorCQlyZXR1cm4gY21kX2xvZ19yZWZsb2coYXJnYyAtIDEsIGFyZ3YgKyAxLCBwcmVmaXgpOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgImV4cGlyZSIpKQorCQlyZXR1cm4gY21kX3JlZmxvZ19leHBpcmUoYXJnYyAtIDEsIGFyZ3YgKyAxLCBwcmVmaXgpOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgImRlbGV0ZSIpKQorCQlyZXR1cm4gY21kX3JlZmxvZ19kZWxldGUoYXJnYyAtIDEsIGFyZ3YgKyAxLCBwcmVmaXgpOworCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgImV4aXN0cyIpKQorCQlyZXR1cm4gY21kX3JlZmxvZ19leGlzdHMoYXJnYyAtIDEsIGFyZ3YgKyAxLCBwcmVmaXgpOworCisJcmV0dXJuIGNtZF9sb2dfcmVmbG9nKGFyZ2MsIGFyZ3YsIHByZWZpeCk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlbW90ZS1leHQuYyBiL2J1aWx0aW4vcmVtb3RlLWV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzY2QyNWQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlbW90ZS1leHQuYwpAQCAtMCwwICsxLDIxNSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisKKy8qCisgKiBVUkwgc3ludGF4OgorICoJJ2NvbW1hbmQgW2FyZzEgW2FyZzIgWy4uLl1dXScJSW52b2tlIGNvbW1hbmQgd2l0aCBnaXZlbiBhcmd1bWVudHMuCisgKglTcGVjaWFsIGNoYXJhY3RlcnM6CisgKgknJSAnOiBMaXRlcmFsIHNwYWNlIGluIGFyZ3VtZW50LgorICoJJyUlJzogTGl0ZXJhbCBwZXJjZW50IHNpZ24uCisgKgknJVMnOiBOYW1lIG9mIHNlcnZpY2UgKGdpdC11cGxvYWQtcGFjay9naXQtdXBsb2FkLWFyY2hpdmUvCisgKgkJZ2l0LXJlY2VpdmUtcGFjay4KKyAqCSclcyc6IFNhbWUgYXMgXHMsIGJ1dCB3aXRoIHBvc3NpYmxlIGdpdC0gcHJlZml4IHN0cmlwcGVkLgorICoJJyVHJzogT25seSBhbGxvd2VkIGFzIGZpcnN0ICdjaGFyYWN0ZXInIG9mIGFyZ3VtZW50LiBEbyBub3QgcGFzcyB0aGlzCisgKgkJQXJndW1lbnQgdG8gY29tbWFuZCwgaW5zdGVhZCBzZW5kIHRoaXMgYXMgbmFtZSBvZiByZXBvc2l0b3J5CisgKgkJaW4gaW4tbGluZSBnaXQ6Ly8tc3R5bGUgcmVxdWVzdCAoYWxzbyBhY3RpdmF0ZXMgc2VuZGluZyB0aGlzCisgKgkJc3R5bGUgb2YgcmVxdWVzdCkuCisgKgknJVYnOiBPbmx5IGFsbG93ZWQgYXMgZmlyc3QgJ2NoYXJhY3Rlcicgb2YgYXJndW1lbnQuIFVzZWQgaW4KKyAqCQljb25qdW5jdGlvbiB3aXRoICclRyc6IERvIG5vdCBwYXNzIHRoaXMgYXJndW1lbnQgdG8gY29tbWFuZCwKKyAqCQlpbnN0ZWFkIHNlbmQgdGhpcyBhcyB2aG9zdCBpbiBnaXQ6Ly8tc3R5bGUgcmVxdWVzdCAobm90ZTogZG9lcworICoJCW5vdCBhY3RpdmF0ZSBzZW5kaW5nIGdpdDovLyBzdHlsZSByZXF1ZXN0KS4KKyAqLworCitzdGF0aWMgY2hhciAqZ2l0X3JlcTsKK3N0YXRpYyBjaGFyICpnaXRfcmVxX3Zob3N0OworCitzdGF0aWMgY2hhciAqc3RyaXBfZXNjYXBlcyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisJY29uc3QgY2hhciAqKm5leHQpCit7CisJc2l6ZV90IHJwb3MgPSAwOworCWludCBlc2NhcGUgPSAwOworCWNoYXIgc3BlY2lhbCA9IDA7CisJY29uc3QgY2hhciAqc2VydmljZV9ub3ByZWZpeCA9IHNlcnZpY2U7CisJc3RydWN0IHN0cmJ1ZiByZXQgPSBTVFJCVUZfSU5JVDsKKworCXNraXBfcHJlZml4KHNlcnZpY2Vfbm9wcmVmaXgsICJnaXQtIiwgJnNlcnZpY2Vfbm9wcmVmaXgpOworCisJLyogUGFzcyB0aGUgc2VydmljZSB0byBjb21tYW5kLiAqLworCXNldGVudigiR0lUX0VYVF9TRVJWSUNFIiwgc2VydmljZSwgMSk7CisJc2V0ZW52KCJHSVRfRVhUX1NFUlZJQ0VfTk9QUkVGSVgiLCBzZXJ2aWNlX25vcHJlZml4LCAxKTsKKworCS8qIFNjYW4gdGhlIGxlbmd0aCBvZiBhcmd1bWVudC4gKi8KKwl3aGlsZSAoc3RyW3Jwb3NdICYmIChlc2NhcGUgfHwgc3RyW3Jwb3NdICE9ICcgJykpIHsKKwkJaWYgKGVzY2FwZSkgeworCQkJc3dpdGNoIChzdHJbcnBvc10pIHsKKwkJCWNhc2UgJyAnOgorCQkJY2FzZSAnJSc6CisJCQljYXNlICdzJzoKKwkJCWNhc2UgJ1MnOgorCQkJCWJyZWFrOworCQkJY2FzZSAnRyc6CisJCQljYXNlICdWJzoKKwkJCQlzcGVjaWFsID0gc3RyW3Jwb3NdOworCQkJCWlmIChycG9zID09IDEpCisJCQkJCWJyZWFrOworCQkJCS8qIEZhbGwtdGhyb3VnaCB0byBlcnJvci4gKi8KKwkJCWRlZmF1bHQ6CisJCQkJZGllKCJCYWQgcmVtb3RlLWV4dCBwbGFjZWhvbGRlciAnJSUlYycuIiwKKwkJCQkJc3RyW3Jwb3NdKTsKKwkJCX0KKwkJCWVzY2FwZSA9IDA7CisJCX0gZWxzZQorCQkJZXNjYXBlID0gKHN0cltycG9zXSA9PSAnJScpOworCQlycG9zKys7CisJfQorCWlmIChlc2NhcGUgJiYgIXN0cltycG9zXSkKKwkJZGllKCJyZW1vdGUtZXh0IGNvbW1hbmQgaGFzIGluY29tcGxldGUgcGxhY2Vob2xkZXIiKTsKKwkqbmV4dCA9IHN0ciArIHJwb3M7CisJaWYgKCoqbmV4dCA9PSAnICcpCisJCSsrKm5leHQ7CS8qIFNraXAgb3ZlciBzcGFjZSAqLworCisJLyoKKwkgKiBEbyB0aGUgYWN0dWFsIHBsYWNlaG9sZGVyIHN1YnN0aXR1dGlvbi4gVGhlIHN0cmluZyB3aWxsIGJlIHNob3J0CisJICogZW5vdWdoIG5vdCB0byBvdmVyZmxvdyBpbnRlZ2Vycy4KKwkgKi8KKwlycG9zID0gc3BlY2lhbCA/IDIgOiAwOwkJLyogU2tpcCBmaXJzdCAyIGJ5dGVzIGluIHNwZWNpYWxzLiAqLworCWVzY2FwZSA9IDA7CisJd2hpbGUgKHN0cltycG9zXSAmJiAoZXNjYXBlIHx8IHN0cltycG9zXSAhPSAnICcpKSB7CisJCWlmIChlc2NhcGUpIHsKKwkJCXN3aXRjaCAoc3RyW3Jwb3NdKSB7CisJCQljYXNlICcgJzoKKwkJCWNhc2UgJyUnOgorCQkJCXN0cmJ1Zl9hZGRjaCgmcmV0LCBzdHJbcnBvc10pOworCQkJCWJyZWFrOworCQkJY2FzZSAncyc6CisJCQkJc3RyYnVmX2FkZHN0cigmcmV0LCBzZXJ2aWNlX25vcHJlZml4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1MnOgorCQkJCXN0cmJ1Zl9hZGRzdHIoJnJldCwgc2VydmljZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQllc2NhcGUgPSAwOworCQl9IGVsc2UKKwkJCXN3aXRjaCAoc3RyW3Jwb3NdKSB7CisJCQljYXNlICclJzoKKwkJCQllc2NhcGUgPSAxOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlzdHJidWZfYWRkY2goJnJldCwgc3RyW3Jwb3NdKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJcnBvcysrOworCX0KKwlzd2l0Y2ggKHNwZWNpYWwpIHsKKwljYXNlICdHJzoKKwkJZ2l0X3JlcSA9IHN0cmJ1Zl9kZXRhY2goJnJldCwgTlVMTCk7CisJCXJldHVybiBOVUxMOworCWNhc2UgJ1YnOgorCQlnaXRfcmVxX3Zob3N0ID0gc3RyYnVmX2RldGFjaCgmcmV0LCBOVUxMKTsKKwkJcmV0dXJuIE5VTEw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnJldCwgTlVMTCk7CisJfQorfQorCisvKiBTaG91bGQgYmUgZW5vdWdoLi4uICovCisjZGVmaW5lIE1BWEFSR1VNRU5UUyAyNTYKKworc3RhdGljIGNvbnN0IGNoYXIgKipwYXJzZV9hcmd2KGNvbnN0IGNoYXIgKmFyZywgY29uc3QgY2hhciAqc2VydmljZSkKK3sKKwlpbnQgYXJndW1lbnRzID0gMDsKKwlpbnQgaTsKKwljb25zdCBjaGFyICoqcmV0OworCWNoYXIgKnRlbXBhcnJheVtNQVhBUkdVTUVOVFMgKyAxXTsKKworCXdoaWxlICgqYXJnKSB7CisJCWNoYXIgKmV4cGFuZGVkOworCQlpZiAoYXJndW1lbnRzID09IE1BWEFSR1VNRU5UUykKKwkJCWRpZSgicmVtb3RlLWV4dCBjb21tYW5kIGhhcyB0b28gbWFueSBhcmd1bWVudHMiKTsKKwkJZXhwYW5kZWQgPSBzdHJpcF9lc2NhcGVzKGFyZywgc2VydmljZSwgJmFyZyk7CisJCWlmIChleHBhbmRlZCkKKwkJCXRlbXBhcnJheVthcmd1bWVudHMrK10gPSBleHBhbmRlZDsKKwl9CisKKwlyZXQgPSB4bWFsbG9jKChhcmd1bWVudHMgKyAxKSAqIHNpemVvZihjaGFyICopKTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzOyBpKyspCisJCXJldFtpXSA9IHRlbXBhcnJheVtpXTsKKwlyZXRbYXJndW1lbnRzXSA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2VuZF9naXRfcmVxdWVzdChpbnQgc3RkaW5fZmQsIGNvbnN0IGNoYXIgKnNlcnYsIGNvbnN0IGNoYXIgKnJlcG8sCisJY29uc3QgY2hhciAqdmhvc3QpCit7CisJaWYgKCF2aG9zdCkKKwkJcGFja2V0X3dyaXRlKHN0ZGluX2ZkLCAiJXMgJXMlYyIsIHNlcnYsIHJlcG8sIDApOworCWVsc2UKKwkJcGFja2V0X3dyaXRlKHN0ZGluX2ZkLCAiJXMgJXMlY2hvc3Q9JXMlYyIsIHNlcnYsIHJlcG8sIDAsCisJCQkgICAgIHZob3N0LCAwKTsKK30KKworc3RhdGljIGludCBydW5fY2hpbGQoY29uc3QgY2hhciAqYXJnLCBjb25zdCBjaGFyICpzZXJ2aWNlKQoreworCWludCByOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNoaWxkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJY2hpbGQuaW4gPSAtMTsKKwljaGlsZC5vdXQgPSAtMTsKKwljaGlsZC5lcnIgPSAwOworCWNoaWxkLmFyZ3YgPSBwYXJzZV9hcmd2KGFyZywgc2VydmljZSk7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2hpbGQpIDwgMCkKKwkJZGllKCJDYW4ndCBydW4gc3BlY2lmaWVkIGNvbW1hbmQiKTsKKworCWlmIChnaXRfcmVxKQorCQlzZW5kX2dpdF9yZXF1ZXN0KGNoaWxkLmluLCBzZXJ2aWNlLCBnaXRfcmVxLCBnaXRfcmVxX3Zob3N0KTsKKworCXIgPSBiaWRpcmVjdGlvbmFsX3RyYW5zZmVyX2xvb3AoY2hpbGQub3V0LCBjaGlsZC5pbik7CisJaWYgKCFyKQorCQlyID0gZmluaXNoX2NvbW1hbmQoJmNoaWxkKTsKKwllbHNlCisJCWZpbmlzaF9jb21tYW5kKCZjaGlsZCk7CisJcmV0dXJuIHI7Cit9CisKKyNkZWZpbmUgTUFYQ09NTUFORCA0MDk2CisKK3N0YXRpYyBpbnQgY29tbWFuZF9sb29wKGNvbnN0IGNoYXIgKmNoaWxkKQoreworCWNoYXIgYnVmZmVyW01BWENPTU1BTkRdOworCisJd2hpbGUgKDEpIHsKKwkJc2l6ZV90IGk7CisJCWlmICghZmdldHMoYnVmZmVyLCBNQVhDT01NQU5EIC0gMSwgc3RkaW4pKSB7CisJCQlpZiAoZmVycm9yKHN0ZGluKSkKKwkJCQlkaWUoIkNvbWFtbWFuZCBpbnB1dCBlcnJvciIpOworCQkJZXhpdCgwKTsKKwkJfQorCQkvKiBTdHJpcCBlbmQgb2YgbGluZSBjaGFyYWN0ZXJzLiAqLworCQlpID0gc3RybGVuKGJ1ZmZlcik7CisJCXdoaWxlIChpID4gMCAmJiBpc3NwYWNlKGJ1ZmZlcltpIC0gMV0pKQorCQkJYnVmZmVyWy0taV0gPSAwOworCisJCWlmICghc3RyY21wKGJ1ZmZlciwgImNhcGFiaWxpdGllcyIpKSB7CisJCQlwcmludGYoIipjb25uZWN0XG5cbiIpOworCQkJZmZsdXNoKHN0ZG91dCk7CisJCX0gZWxzZSBpZiAoIXN0cm5jbXAoYnVmZmVyLCAiY29ubmVjdCAiLCA4KSkgeworCQkJcHJpbnRmKCJcbiIpOworCQkJZmZsdXNoKHN0ZG91dCk7CisJCQlyZXR1cm4gcnVuX2NoaWxkKGNoaWxkLCBidWZmZXIgKyA4KTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQmFkIGNvbW1hbmQiKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorfQorCitpbnQgY21kX3JlbW90ZV9leHQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaWYgKGFyZ2MgIT0gMykKKwkJZGllKCJFeHBlY3RlZCB0d28gYXJndW1lbnRzIik7CisKKwlyZXR1cm4gY29tbWFuZF9sb29wKGFyZ3ZbMl0pOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9yZW1vdGUtZmQuYyBiL2J1aWx0aW4vcmVtb3RlLWZkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhkNzEyMQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmVtb3RlLWZkLmMKQEAgLTAsMCArMSw3OSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKworLyoKKyAqIFVSTCBzeW50YXg6CisgKgknZmQ6Ojxpbm91dGZkPlsvPGFueXRoaW5nPl0nCQlSZWFkL3dyaXRlIHNvY2tldCBwYWlyCisgKgkJCQkJCTxpbm91dGZkPi4KKyAqCSdmZDo6PGluZmQ+LDxvdXRmZD5bLzxhbnl0aGluZz5dJwlSZWFkIHBpcGUgPGluZmQ+IGFuZCB3cml0ZQorICoJCQkJCQlwaXBlIDxvdXRmZD4uCisgKglbZm9vXSBpbmRpY2F0ZXMgJ2ZvbycgaXMgb3B0aW9uYWwuIDxhbnl0aGluZz4gaXMgYW55IHN0cmluZy4KKyAqCisgKiBUaGUgZGF0YSBvdXRwdXQgdG8gPG91dGZkPi88aW5vdXRmZD4gc2hvdWxkIGJlIHBhc3NlZCB1bm1vbGVzdGVkIHRvCisgKiBnaXQtcmVjZWl2ZS1wYWNrL2dpdC11cGxvYWQtcGFjay9naXQtdXBsb2FkLWFyY2hpdmUgYW5kIG91dHB1dCBvZgorICogZ2l0LXJlY2VpdmUtcGFjay9naXQtdXBsb2FkLXBhY2svZ2l0LXVwbG9hZC1hcmNoaXZlIHNob3VsZCBiZSBwYXNzZWQKKyAqIHVubW9sZXN0ZWQgdG8gPGluZmQ+Lzxpbm91dGZkPi4KKyAqCisgKi8KKworI2RlZmluZSBNQVhDT01NQU5EIDQwOTYKKworc3RhdGljIHZvaWQgY29tbWFuZF9sb29wKGludCBpbnB1dF9mZCwgaW50IG91dHB1dF9mZCkKK3sKKwljaGFyIGJ1ZmZlcltNQVhDT01NQU5EXTsKKworCXdoaWxlICgxKSB7CisJCXNpemVfdCBpOworCQlpZiAoIWZnZXRzKGJ1ZmZlciwgTUFYQ09NTUFORCAtIDEsIHN0ZGluKSkgeworCQkJaWYgKGZlcnJvcihzdGRpbikpCisJCQkJZGllKCJJbnB1dCBlcnJvciIpOworCQkJcmV0dXJuOworCQl9CisJCS8qIFN0cmlwIGVuZCBvZiBsaW5lIGNoYXJhY3RlcnMuICovCisJCWkgPSBzdHJsZW4oYnVmZmVyKTsKKwkJd2hpbGUgKGkgPiAwICYmIGlzc3BhY2UoYnVmZmVyW2kgLSAxXSkpCisJCQlidWZmZXJbLS1pXSA9IDA7CisKKwkJaWYgKCFzdHJjbXAoYnVmZmVyLCAiY2FwYWJpbGl0aWVzIikpIHsKKwkJCXByaW50ZigiKmNvbm5lY3RcblxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJfSBlbHNlIGlmICghc3RybmNtcChidWZmZXIsICJjb25uZWN0ICIsIDgpKSB7CisJCQlwcmludGYoIlxuIik7CisJCQlmZmx1c2goc3Rkb3V0KTsKKwkJCWlmIChiaWRpcmVjdGlvbmFsX3RyYW5zZmVyX2xvb3AoaW5wdXRfZmQsCisJCQkJb3V0cHV0X2ZkKSkKKwkJCQlkaWUoIkNvcHlpbmcgZGF0YSBiZXR3ZWVuIGZpbGUgZGVzY3JpcHRvcnMgZmFpbGVkIik7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQlkaWUoIkJhZCBjb21tYW5kOiAlcyIsIGJ1ZmZlcik7CisJCX0KKwl9Cit9CisKK2ludCBjbWRfcmVtb3RlX2ZkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpbnB1dF9mZCA9IC0xOworCWludCBvdXRwdXRfZmQgPSAtMTsKKwljaGFyICplbmQ7CisKKwlpZiAoYXJnYyAhPSAzKQorCQlkaWUoIkV4cGVjdGVkIHR3byBhcmd1bWVudHMiKTsKKworCWlucHV0X2ZkID0gKGludClzdHJ0b3VsKGFyZ3ZbMl0sICZlbmQsIDEwKTsKKworCWlmICgoZW5kID09IGFyZ3ZbMl0pIHx8ICgqZW5kICE9ICcsJyAmJiAqZW5kICE9ICcvJyAmJiAqZW5kKSkKKwkJZGllKCJCYWQgVVJMIHN5bnRheCIpOworCisJaWYgKCplbmQgPT0gJy8nIHx8ICEqZW5kKSB7CisJCW91dHB1dF9mZCA9IGlucHV0X2ZkOworCX0gZWxzZSB7CisJCWNoYXIgKmVuZDI7CisJCW91dHB1dF9mZCA9IChpbnQpc3RydG91bChlbmQgKyAxLCAmZW5kMiwgMTApOworCisJCWlmICgoZW5kMiA9PSBlbmQgKyAxKSB8fCAoKmVuZDIgIT0gJy8nICYmICplbmQyKSkKKwkJCWRpZSgiQmFkIFVSTCBzeW50YXgiKTsKKwl9CisKKwljb21tYW5kX2xvb3AoaW5wdXRfZmQsIG91dHB1dF9mZCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JlbW90ZS5jIGIvYnVpbHRpbi9yZW1vdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGMzZWExCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZW1vdGUuYwpAQCAtMCwwICsxLDE2NTIgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIpLAorCU5fKCJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS1taXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iKSwKKwlOXygiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iKSwKKwlOXygiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IiksCisJTl8oImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikiKSwKKwlOXygiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iKSwKKwlOXygiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIpLAorCU5fKCJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iKSwKKwlOXygiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iKSwKKwlOXygiZ2l0IHJlbW90ZSBnZXQtdXJsIFstLXB1c2hdIFstLWFsbF0gPG5hbWU+IiksCisJTl8oImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIpLAorCU5fKCJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IiksCisJTl8oImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX2FkZF91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3JlbmFtZV91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfcm1fdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBidWlsdGluX3JlbW90ZV9zZXRoZWFkX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikiKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3NldGJyYW5jaGVzX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIpLAorCU5fKCJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3Nob3dfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfcHJ1bmVfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcmVtb3RlX3VwZGF0ZV91c2FnZVtdID0geworCU5fKCJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfZ2V0dXJsX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgZ2V0LXVybCBbLS1wdXNoXSBbLS1hbGxdIDxuYW1lPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYnVpbHRpbl9yZW1vdGVfc2V0dXJsX3VzYWdlW10gPSB7CisJTl8oImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIpLAorCU5fKCJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IiksCisJTl8oImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iKSwKKwlOVUxMCit9OworCisjZGVmaW5lIEdFVF9SRUZfU1RBVEVTICgxPDwwKQorI2RlZmluZSBHRVRfSEVBRF9OQU1FUyAoMTw8MSkKKyNkZWZpbmUgR0VUX1BVU0hfUkVGX1NUQVRFUyAoMTw8MikKKworc3RhdGljIGludCB2ZXJib3NlOworCitzdGF0aWMgaW50IGZldGNoX3JlbW90ZShjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgImZldGNoIiwgbmFtZSwgTlVMTCwgTlVMTCB9OworCWlmICh2ZXJib3NlKSB7CisJCWFyZ3ZbMV0gPSAiLXYiOworCQlhcmd2WzJdID0gbmFtZTsKKwl9CisJcHJpbnRmX2xuKF8oIlVwZGF0aW5nICVzIiksIG5hbWUpOworCWlmIChydW5fY29tbWFuZF92X29wdChhcmd2LCBSVU5fR0lUX0NNRCkpCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgZmV0Y2ggJXMiKSwgbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK2VudW0geworCVRBR1NfVU5TRVQgPSAwLAorCVRBR1NfREVGQVVMVCA9IDEsCisJVEFHU19TRVQgPSAyCit9OworCisjZGVmaW5lIE1JUlJPUl9OT05FIDAKKyNkZWZpbmUgTUlSUk9SX0ZFVENIIDEKKyNkZWZpbmUgTUlSUk9SX1BVU0ggMgorI2RlZmluZSBNSVJST1JfQk9USCAoTUlSUk9SX0ZFVENIfE1JUlJPUl9QVVNIKQorCitzdGF0aWMgaW50IGFkZF9icmFuY2goY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICpicmFuY2huYW1lLAorCQljb25zdCBjaGFyICpyZW1vdGVuYW1lLCBpbnQgbWlycm9yLCBzdHJ1Y3Qgc3RyYnVmICp0bXApCit7CisJc3RyYnVmX3Jlc2V0KHRtcCk7CisJc3RyYnVmX2FkZGNoKHRtcCwgJysnKTsKKwlpZiAobWlycm9yKQorCQlzdHJidWZfYWRkZih0bXAsICJyZWZzLyVzOnJlZnMvJXMiLAorCQkJCWJyYW5jaG5hbWUsIGJyYW5jaG5hbWUpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYodG1wLCAicmVmcy9oZWFkcy8lczpyZWZzL3JlbW90ZXMvJXMvJXMiLAorCQkJCWJyYW5jaG5hbWUsIHJlbW90ZW5hbWUsIGJyYW5jaG5hbWUpOworCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihrZXksIHRtcC0+YnVmLCAiXiQiLCAwKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgbWlycm9yX2FkdmljZVtdID0KK05fKCItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorICAgIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiKTsKKworc3RhdGljIGludCBwYXJzZV9taXJyb3Jfb3B0KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgbm90KQoreworCXVuc2lnbmVkICptaXJyb3IgPSBvcHQtPnZhbHVlOworCWlmIChub3QpCisJCSptaXJyb3IgPSBNSVJST1JfTk9ORTsKKwllbHNlIGlmICghYXJnKSB7CisJCXdhcm5pbmcoIiVzIiwgXyhtaXJyb3JfYWR2aWNlKSk7CisJCSptaXJyb3IgPSBNSVJST1JfQk9USDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJmZXRjaCIpKQorCQkqbWlycm9yID0gTUlSUk9SX0ZFVENIOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAicHVzaCIpKQorCQkqbWlycm9yID0gTUlSUk9SX1BVU0g7CisJZWxzZQorCQlyZXR1cm4gZXJyb3IoXygidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIiksIGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgZmV0Y2ggPSAwLCBmZXRjaF90YWdzID0gVEFHU19ERUZBVUxUOworCXVuc2lnbmVkIG1pcnJvciA9IE1JUlJPUl9OT05FOworCXN0cnVjdCBzdHJpbmdfbGlzdCB0cmFjayA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJY29uc3QgY2hhciAqbWFzdGVyID0gTlVMTDsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgYnVmMiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKm5hbWUsICp1cmw7CisJaW50IGk7CisKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woJ2YnLCAiZmV0Y2giLCAmZmV0Y2gsIE5fKCJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIikpLAorCQlPUFRfU0VUX0lOVCgwLCAidGFncyIsICZmZXRjaF90YWdzLAorCQkJICAgIE5fKCJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIiksCisJCQkgICAgVEFHU19TRVQpLAorCQlPUFRfU0VUX0lOVCgwLCBOVUxMLCAmZmV0Y2hfdGFncywKKwkJCSAgICBOXygib3IgZG8gbm90IGZldGNoIGFueSB0YWcgYXQgYWxsICgtLW5vLXRhZ3MpIiksIFRBR1NfVU5TRVQpLAorCQlPUFRfU1RSSU5HX0xJU1QoJ3QnLCAidHJhY2siLCAmdHJhY2ssIE5fKCJicmFuY2giKSwKKwkJCQlOXygiYnJhbmNoKGVzKSB0byB0cmFjayIpKSwKKwkJT1BUX1NUUklORygnbScsICJtYXN0ZXIiLCAmbWFzdGVyLCBOXygiYnJhbmNoIiksIE5fKCJtYXN0ZXIgYnJhbmNoIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgMCwgIm1pcnJvciIsICZtaXJyb3IsIE5fKCJwdXNofGZldGNoIiksCisJCQlOXygic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iKSwKKwkJCVBBUlNFX09QVF9PUFRBUkcsIHBhcnNlX21pcnJvcl9vcHQgfSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX2FkZF91c2FnZSwKKwkJCSAgICAgMCk7CisKKwlpZiAoYXJnYyAhPSAyKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfYWRkX3VzYWdlLCBvcHRpb25zKTsKKworCWlmIChtaXJyb3IgJiYgbWFzdGVyKQorCQlkaWUoXygic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIpKTsKKwlpZiAobWlycm9yICYmICEobWlycm9yICYgTUlSUk9SX0ZFVENIKSAmJiB0cmFjay5ucikKKwkJZGllKF8oInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiKSk7CisKKwluYW1lID0gYXJndlswXTsKKwl1cmwgPSBhcmd2WzFdOworCisJcmVtb3RlID0gcmVtb3RlX2dldChuYW1lKTsKKwlpZiAocmVtb3RlICYmIChyZW1vdGUtPnVybF9uciA+IDEgfHwKKwkJCShzdHJjbXAobmFtZSwgcmVtb3RlLT51cmxbMF0pICYmCisJCQkJc3RyY21wKHVybCwgcmVtb3RlLT51cmxbMF0pKSB8fAorCQkJcmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yKSkKKwkJZGllKF8oInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iKSwgbmFtZSk7CisKKwlzdHJidWZfYWRkZigmYnVmMiwgInJlZnMvaGVhZHMvdGVzdDpyZWZzL3JlbW90ZXMvJXMvdGVzdCIsIG5hbWUpOworCWlmICghdmFsaWRfZmV0Y2hfcmVmc3BlYyhidWYyLmJ1ZikpCisJCWRpZShfKCInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIiksIG5hbWUpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcy51cmwiLCBuYW1lKTsKKwlpZiAoZ2l0X2NvbmZpZ19zZXQoYnVmLmJ1ZiwgdXJsKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIW1pcnJvciB8fCBtaXJyb3IgJiBNSVJST1JfRkVUQ0gpIHsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzLmZldGNoIiwgbmFtZSk7CisJCWlmICh0cmFjay5uciA9PSAwKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZ0cmFjaywgIioiKTsKKwkJZm9yIChpID0gMDsgaSA8IHRyYWNrLm5yOyBpKyspIHsKKwkJCWlmIChhZGRfYnJhbmNoKGJ1Zi5idWYsIHRyYWNrLml0ZW1zW2ldLnN0cmluZywKKwkJCQkgICAgICAgbmFtZSwgbWlycm9yLCAmYnVmMikpCisJCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlpZiAobWlycm9yICYgTUlSUk9SX1BVU0gpIHsKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzLm1pcnJvciIsIG5hbWUpOworCQlpZiAoZ2l0X2NvbmZpZ19zZXQoYnVmLmJ1ZiwgInRydWUiKSkKKwkJCXJldHVybiAxOworCX0KKworCWlmIChmZXRjaF90YWdzICE9IFRBR1NfREVGQVVMVCkgeworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMudGFnb3B0IiwgbmFtZSk7CisJCWlmIChnaXRfY29uZmlnX3NldChidWYuYnVmLAorCQkJZmV0Y2hfdGFncyA9PSBUQUdTX1NFVCA/ICItLXRhZ3MiIDogIi0tbm8tdGFncyIpKQorCQkJcmV0dXJuIDE7CisJfQorCisJaWYgKGZldGNoICYmIGZldGNoX3JlbW90ZShuYW1lKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAobWFzdGVyKSB7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlZnMvcmVtb3Rlcy8lcy9IRUFEIiwgbmFtZSk7CisKKwkJc3RyYnVmX3Jlc2V0KCZidWYyKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZjIsICJyZWZzL3JlbW90ZXMvJXMvJXMiLCBuYW1lLCBtYXN0ZXIpOworCisJCWlmIChjcmVhdGVfc3ltcmVmKGJ1Zi5idWYsIGJ1ZjIuYnVmLCAicmVtb3RlIGFkZCIpKQorCQkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIpLCBtYXN0ZXIpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYyKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmdHJhY2ssIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBicmFuY2hfaW5mbyB7CisJY2hhciAqcmVtb3RlX25hbWU7CisJc3RydWN0IHN0cmluZ19saXN0IG1lcmdlOworCWludCByZWJhc2U7Cit9OworCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGJyYW5jaF9saXN0OworCitzdGF0aWMgY29uc3QgY2hhciAqYWJicmV2X3JlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc2tpcF9wcmVmaXgobmFtZSwgcHJlZml4LCAmbmFtZSk7CisJcmV0dXJuIG5hbWU7Cit9CisjZGVmaW5lIGFiYnJldl9icmFuY2gobmFtZSkgYWJicmV2X3JlZigobmFtZSksICJyZWZzL2hlYWRzLyIpCisKK3N0YXRpYyBpbnQgY29uZmlnX3JlYWRfYnJhbmNoZXMoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKHN0YXJ0c193aXRoKGtleSwgImJyYW5jaC4iKSkgeworCQljb25zdCBjaGFyICpvcmlnX2tleSA9IGtleTsKKwkJY2hhciAqbmFtZTsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCXN0cnVjdCBicmFuY2hfaW5mbyAqaW5mbzsKKwkJZW51bSB7IFJFTU9URSwgTUVSR0UsIFJFQkFTRSB9IHR5cGU7CisJCXNpemVfdCBrZXlfbGVuOworCisJCWtleSArPSA3OworCQlpZiAoc3RyaXBfc3VmZml4KGtleSwgIi5yZW1vdGUiLCAma2V5X2xlbikpIHsKKwkJCW5hbWUgPSB4bWVtZHVweihrZXksIGtleV9sZW4pOworCQkJdHlwZSA9IFJFTU9URTsKKwkJfSBlbHNlIGlmIChzdHJpcF9zdWZmaXgoa2V5LCAiLm1lcmdlIiwgJmtleV9sZW4pKSB7CisJCQluYW1lID0geG1lbWR1cHooa2V5LCBrZXlfbGVuKTsKKwkJCXR5cGUgPSBNRVJHRTsKKwkJfSBlbHNlIGlmIChzdHJpcF9zdWZmaXgoa2V5LCAiLnJlYmFzZSIsICZrZXlfbGVuKSkgeworCQkJbmFtZSA9IHhtZW1kdXB6KGtleSwga2V5X2xlbik7CisJCQl0eXBlID0gUkVCQVNFOworCQl9IGVsc2UKKwkJCXJldHVybiAwOworCisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoJmJyYW5jaF9saXN0LCBuYW1lKTsKKworCQlpZiAoIWl0ZW0tPnV0aWwpCisJCQlpdGVtLT51dGlsID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGJyYW5jaF9pbmZvKSk7CisJCWluZm8gPSBpdGVtLT51dGlsOworCQlpZiAodHlwZSA9PSBSRU1PVEUpIHsKKwkJCWlmIChpbmZvLT5yZW1vdGVfbmFtZSkKKwkJCQl3YXJuaW5nKF8oIm1vcmUgdGhhbiBvbmUgJXMiKSwgb3JpZ19rZXkpOworCQkJaW5mby0+cmVtb3RlX25hbWUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICh0eXBlID09IE1FUkdFKSB7CisJCQljaGFyICpzcGFjZSA9IHN0cmNocih2YWx1ZSwgJyAnKTsKKwkJCXZhbHVlID0gYWJicmV2X2JyYW5jaCh2YWx1ZSk7CisJCQl3aGlsZSAoc3BhY2UpIHsKKwkJCQljaGFyICptZXJnZTsKKwkJCQltZXJnZSA9IHhzdHJuZHVwKHZhbHVlLCBzcGFjZSAtIHZhbHVlKTsKKwkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmluZm8tPm1lcmdlLCBtZXJnZSk7CisJCQkJdmFsdWUgPSBhYmJyZXZfYnJhbmNoKHNwYWNlICsgMSk7CisJCQkJc3BhY2UgPSBzdHJjaHIodmFsdWUsICcgJyk7CisJCQl9CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmluZm8tPm1lcmdlLCB4c3RyZHVwKHZhbHVlKSk7CisJCX0gZWxzZSB7CisJCQlpbnQgdiA9IGdpdF9jb25maWdfbWF5YmVfYm9vbChvcmlnX2tleSwgdmFsdWUpOworCQkJaWYgKHYgPj0gMCkKKwkJCQlpbmZvLT5yZWJhc2UgPSB2OworCQkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgInByZXNlcnZlIikpCisJCQkJaW5mby0+cmViYXNlID0gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVhZF9icmFuY2hlcyh2b2lkKQoreworCWlmIChicmFuY2hfbGlzdC5ucikKKwkJcmV0dXJuOworCWdpdF9jb25maWcoY29uZmlnX3JlYWRfYnJhbmNoZXMsIE5VTEwpOworfQorCitzdHJ1Y3QgcmVmX3N0YXRlcyB7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXN0cnVjdCBzdHJpbmdfbGlzdCBuZXcsIHN0YWxlLCB0cmFja2VkLCBoZWFkcywgcHVzaDsKKwlpbnQgcXVlcmllZDsKK307CisKK3N0YXRpYyBpbnQgZ2V0X3JlZl9zdGF0ZXMoY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIHN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMpCit7CisJc3RydWN0IHJlZiAqZmV0Y2hfbWFwID0gTlVMTCwgKip0YWlsID0gJmZldGNoX21hcDsKKwlzdHJ1Y3QgcmVmICpyZWYsICpzdGFsZV9yZWZzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHN0YXRlcy0+cmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yOyBpKyspCisJCWlmIChnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCBzdGF0ZXMtPnJlbW90ZS0+ZmV0Y2ggKyBpLCAmdGFpbCwgMSkpCisJCQlkaWUoXygiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiKSwKKwkJCQlzdGF0ZXMtPnJlbW90ZS0+ZmV0Y2hfcmVmc3BlY1tpXSk7CisKKwlzdGF0ZXMtPm5ldy5zdHJkdXBfc3RyaW5ncyA9IDE7CisJc3RhdGVzLT50cmFja2VkLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdGF0ZXMtPnN0YWxlLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlmb3IgKHJlZiA9IGZldGNoX21hcDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJaWYgKCFyZWYtPnBlZXJfcmVmIHx8ICFyZWZfZXhpc3RzKHJlZi0+cGVlcl9yZWYtPm5hbWUpKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPm5ldywgYWJicmV2X2JyYW5jaChyZWYtPm5hbWUpKTsKKwkJZWxzZQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnRyYWNrZWQsIGFiYnJldl9icmFuY2gocmVmLT5uYW1lKSk7CisJfQorCXN0YWxlX3JlZnMgPSBnZXRfc3RhbGVfaGVhZHMoc3RhdGVzLT5yZW1vdGUtPmZldGNoLAorCQkJCSAgICAgc3RhdGVzLT5yZW1vdGUtPmZldGNoX3JlZnNwZWNfbnIsIGZldGNoX21hcCk7CisJZm9yIChyZWYgPSBzdGFsZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+c3RhbGUsIGFiYnJldl9icmFuY2gocmVmLT5uYW1lKSk7CisJCWl0ZW0tPnV0aWwgPSB4c3RyZHVwKHJlZi0+bmFtZSk7CisJfQorCWZyZWVfcmVmcyhzdGFsZV9yZWZzKTsKKwlmcmVlX3JlZnMoZmV0Y2hfbWFwKTsKKworCXN0cmluZ19saXN0X3NvcnQoJnN0YXRlcy0+bmV3KTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZzdGF0ZXMtPnRyYWNrZWQpOworCXN0cmluZ19saXN0X3NvcnQoJnN0YXRlcy0+c3RhbGUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwdXNoX2luZm8geworCWNoYXIgKmRlc3Q7CisJaW50IGZvcmNlZDsKKwllbnVtIHsKKwkJUFVTSF9TVEFUVVNfQ1JFQVRFID0gMCwKKwkJUFVTSF9TVEFUVVNfREVMRVRFLAorCQlQVVNIX1NUQVRVU19VUFRPREFURSwKKwkJUFVTSF9TVEFUVVNfRkFTVEZPUldBUkQsCisJCVBVU0hfU1RBVFVTX09VVE9GREFURSwKKwkJUFVTSF9TVEFUVVNfTk9UUVVFUklFRAorCX0gc3RhdHVzOworfTsKKworc3RhdGljIGludCBnZXRfcHVzaF9yZWZfc3RhdGVzKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLAorCXN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMpCit7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gc3RhdGVzLT5yZW1vdGU7CisJc3RydWN0IHJlZiAqcmVmLCAqbG9jYWxfcmVmcywgKnB1c2hfbWFwOworCWlmIChyZW1vdGUtPm1pcnJvcikKKwkJcmV0dXJuIDA7CisKKwlsb2NhbF9yZWZzID0gZ2V0X2xvY2FsX2hlYWRzKCk7CisJcHVzaF9tYXAgPSBjb3B5X3JlZl9saXN0KHJlbW90ZV9yZWZzKTsKKworCW1hdGNoX3B1c2hfcmVmcyhsb2NhbF9yZWZzLCAmcHVzaF9tYXAsIHJlbW90ZS0+cHVzaF9yZWZzcGVjX25yLAorCQkJcmVtb3RlLT5wdXNoX3JlZnNwZWMsIE1BVENIX1JFRlNfTk9ORSk7CisKKwlzdGF0ZXMtPnB1c2guc3RyZHVwX3N0cmluZ3MgPSAxOworCWZvciAocmVmID0gcHVzaF9tYXA7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlzdHJ1Y3QgcHVzaF9pbmZvICppbmZvOworCisJCWlmICghcmVmLT5wZWVyX3JlZikKKwkJCWNvbnRpbnVlOworCQloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKTsKKworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnB1c2gsCisJCQkJCSAgYWJicmV2X2JyYW5jaChyZWYtPnBlZXJfcmVmLT5uYW1lKSk7CisJCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcHVzaF9pbmZvKSk7CisJCWluZm8gPSBpdGVtLT51dGlsOworCQlpbmZvLT5mb3JjZWQgPSByZWYtPmZvcmNlOworCQlpbmZvLT5kZXN0ID0geHN0cmR1cChhYmJyZXZfYnJhbmNoKHJlZi0+bmFtZSkpOworCisJCWlmIChpc19udWxsX3NoYTEocmVmLT5uZXdfc2hhMSkpIHsKKwkJCWluZm8tPnN0YXR1cyA9IFBVU0hfU1RBVFVTX0RFTEVURTsKKwkJfSBlbHNlIGlmICghaGFzaGNtcChyZWYtPm9sZF9zaGExLCByZWYtPm5ld19zaGExKSkKKwkJCWluZm8tPnN0YXR1cyA9IFBVU0hfU1RBVFVTX1VQVE9EQVRFOworCQllbHNlIGlmIChpc19udWxsX3NoYTEocmVmLT5vbGRfc2hhMSkpCisJCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19DUkVBVEU7CisJCWVsc2UgaWYgKGhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkgJiYKKwkJCSByZWZfbmV3ZXIocmVmLT5uZXdfc2hhMSwgcmVmLT5vbGRfc2hhMSkpCisJCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19GQVNURk9SV0FSRDsKKwkJZWxzZQorCQkJaW5mby0+c3RhdHVzID0gUFVTSF9TVEFUVVNfT1VUT0ZEQVRFOworCX0KKwlmcmVlX3JlZnMobG9jYWxfcmVmcyk7CisJZnJlZV9yZWZzKHB1c2hfbWFwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfcHVzaF9yZWZfc3RhdGVzX25vcXVlcnkoc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGUgPSBzdGF0ZXMtPnJlbW90ZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgcHVzaF9pbmZvICppbmZvOworCisJaWYgKHJlbW90ZS0+bWlycm9yKQorCQlyZXR1cm4gMDsKKworCXN0YXRlcy0+cHVzaC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJaWYgKCFyZW1vdGUtPnB1c2hfcmVmc3BlY19ucikgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnB1c2gsIF8oIihtYXRjaGluZykiKSk7CisJCWluZm8gPSBpdGVtLT51dGlsID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHB1c2hfaW5mbykpOworCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19OT1RRVUVSSUVEOworCQlpbmZvLT5kZXN0ID0geHN0cmR1cChpdGVtLT5zdHJpbmcpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlLT5wdXNoX3JlZnNwZWNfbnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmc3BlYyAqc3BlYyA9IHJlbW90ZS0+cHVzaCArIGk7CisJCWlmIChzcGVjLT5tYXRjaGluZykKKwkJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+cHVzaCwgXygiKG1hdGNoaW5nKSIpKTsKKwkJZWxzZSBpZiAoc3RybGVuKHNwZWMtPnNyYykpCisJCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZzdGF0ZXMtPnB1c2gsIHNwZWMtPnNyYyk7CisJCWVsc2UKKwkJCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+cHVzaCwgXygiKGRlbGV0ZSkiKSk7CisKKwkJaW5mbyA9IGl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcHVzaF9pbmZvKSk7CisJCWluZm8tPmZvcmNlZCA9IHNwZWMtPmZvcmNlOworCQlpbmZvLT5zdGF0dXMgPSBQVVNIX1NUQVRVU19OT1RRVUVSSUVEOworCQlpbmZvLT5kZXN0ID0geHN0cmR1cChzcGVjLT5kc3QgPyBzcGVjLT5kc3QgOiBpdGVtLT5zdHJpbmcpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfaGVhZF9uYW1lcyhjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlzdHJ1Y3QgcmVmICpyZWYsICptYXRjaGVzOworCXN0cnVjdCByZWYgKmZldGNoX21hcCA9IE5VTEwsICoqZmV0Y2hfbWFwX3RhaWwgPSAmZmV0Y2hfbWFwOworCXN0cnVjdCByZWZzcGVjIHJlZnNwZWM7CisKKwlyZWZzcGVjLmZvcmNlID0gMDsKKwlyZWZzcGVjLnBhdHRlcm4gPSAxOworCXJlZnNwZWMuc3JjID0gcmVmc3BlYy5kc3QgPSAicmVmcy9oZWFkcy8qIjsKKwlzdGF0ZXMtPmhlYWRzLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlnZXRfZmV0Y2hfbWFwKHJlbW90ZV9yZWZzLCAmcmVmc3BlYywgJmZldGNoX21hcF90YWlsLCAwKTsKKwltYXRjaGVzID0gZ3Vlc3NfcmVtb3RlX2hlYWQoZmluZF9yZWZfYnlfbmFtZShyZW1vdGVfcmVmcywgIkhFQUQiKSwKKwkJCQkgICAgZmV0Y2hfbWFwLCAxKTsKKwlmb3IgKHJlZiA9IG1hdGNoZXM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+aGVhZHMsIGFiYnJldl9icmFuY2gocmVmLT5uYW1lKSk7CisKKwlmcmVlX3JlZnMoZmV0Y2hfbWFwKTsKKwlmcmVlX3JlZnMobWF0Y2hlcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGtub3duX3JlbW90ZSB7CisJc3RydWN0IGtub3duX3JlbW90ZSAqbmV4dDsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7Cit9OworCitzdHJ1Y3Qga25vd25fcmVtb3RlcyB7CisJc3RydWN0IHJlbW90ZSAqdG9fZGVsZXRlOworCXN0cnVjdCBrbm93bl9yZW1vdGUgKmxpc3Q7Cit9OworCitzdGF0aWMgaW50IGFkZF9rbm93bl9yZW1vdGUoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBrbm93bl9yZW1vdGVzICphbGwgPSBjYl9kYXRhOworCXN0cnVjdCBrbm93bl9yZW1vdGUgKnI7CisKKwlpZiAoIXN0cmNtcChhbGwtPnRvX2RlbGV0ZS0+bmFtZSwgcmVtb3RlLT5uYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlyID0geG1hbGxvYyhzaXplb2YoKnIpKTsKKwlyLT5yZW1vdGUgPSByZW1vdGU7CisJci0+bmV4dCA9IGFsbC0+bGlzdDsKKwlhbGwtPmxpc3QgPSByOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgYnJhbmNoZXNfZm9yX3JlbW90ZSB7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqYnJhbmNoZXMsICpza2lwcGVkOworCXN0cnVjdCBrbm93bl9yZW1vdGVzICprZWVwOworfTsKKworc3RhdGljIGludCBhZGRfYnJhbmNoX2Zvcl9yZW1vdmFsKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGJyYW5jaGVzX2Zvcl9yZW1vdGUgKmJyYW5jaGVzID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmc3BlYyByZWZzcGVjOworCXN0cnVjdCBrbm93bl9yZW1vdGUgKmtyOworCisJbWVtc2V0KCZyZWZzcGVjLCAwLCBzaXplb2YocmVmc3BlYykpOworCXJlZnNwZWMuZHN0ID0gKGNoYXIgKilyZWZuYW1lOworCWlmIChyZW1vdGVfZmluZF90cmFja2luZyhicmFuY2hlcy0+cmVtb3RlLCAmcmVmc3BlYykpCisJCXJldHVybiAwOworCisJLyogZG9uJ3QgZGVsZXRlIGEgYnJhbmNoIGlmIGFub3RoZXIgcmVtb3RlIGFsc28gdXNlcyBpdCAqLworCWZvciAoa3IgPSBicmFuY2hlcy0+a2VlcC0+bGlzdDsga3I7IGtyID0ga3ItPm5leHQpIHsKKwkJbWVtc2V0KCZyZWZzcGVjLCAwLCBzaXplb2YocmVmc3BlYykpOworCQlyZWZzcGVjLmRzdCA9IChjaGFyICopcmVmbmFtZTsKKwkJaWYgKCFyZW1vdGVfZmluZF90cmFja2luZyhrci0+cmVtb3RlLCAmcmVmc3BlYykpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBkb24ndCBkZWxldGUgbm9uLXJlbW90ZS10cmFja2luZyByZWZzICovCisJaWYgKCFzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIpKSB7CisJCS8qIGFkdmlzZSB1c2VyIGhvdyB0byBkZWxldGUgbG9jYWwgYnJhbmNoZXMgKi8KKwkJaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKGJyYW5jaGVzLT5za2lwcGVkLAorCQkJCQkgICBhYmJyZXZfYnJhbmNoKHJlZm5hbWUpKTsKKwkJLyogc2lsZW50bHkgc2tpcCBvdmVyIG90aGVyIG5vbi1yZW1vdGUgcmVmcyAqLworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBtYWtlIHN1cmUgdGhhdCBzeW1yZWZzIGFyZSBkZWxldGVkICovCisJaWYgKGZsYWdzICYgUkVGX0lTU1lNUkVGKQorCQlyZXR1cm4gdW5saW5rKGdpdF9wYXRoKCIlcyIsIHJlZm5hbWUpKTsKKworCXN0cmluZ19saXN0X2FwcGVuZChicmFuY2hlcy0+YnJhbmNoZXMsIHJlZm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCByZW5hbWVfaW5mbyB7CisJY29uc3QgY2hhciAqb2xkOworCWNvbnN0IGNoYXIgKm5ldzsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlbW90ZV9icmFuY2hlczsKK307CisKK3N0YXRpYyBpbnQgcmVhZF9yZW1vdGVfYnJhbmNoZXMoY29uc3QgY2hhciAqcmVmbmFtZSwKKwljb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmVuYW1lX2luZm8gKnJlbmFtZSA9IGNiX2RhdGE7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlpbnQgZmxhZzsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9yaWdfb2lkOworCWNvbnN0IGNoYXIgKnN5bXJlZjsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL3JlbW90ZXMvJXMvIiwgcmVuYW1lLT5vbGQpOworCWlmIChzdGFydHNfd2l0aChyZWZuYW1lLCBidWYuYnVmKSkgeworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKHJlbmFtZS0+cmVtb3RlX2JyYW5jaGVzLCB4c3RyZHVwKHJlZm5hbWUpKTsKKwkJc3ltcmVmID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZm5hbWUsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCSAgICBvcmlnX29pZC5oYXNoLCAmZmxhZyk7CisJCWlmIChmbGFnICYgUkVGX0lTU1lNUkVGKQorCQkJaXRlbS0+dXRpbCA9IHhzdHJkdXAoc3ltcmVmKTsKKwkJZWxzZQorCQkJaXRlbS0+dXRpbCA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWlncmF0ZV9maWxlKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcy51cmwiLCByZW1vdGUtPm5hbWUpOworCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPnVybF9ucjsgaSsrKQorCQlpZiAoZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIoYnVmLmJ1ZiwgcmVtb3RlLT51cmxbaV0sICJeJCIsIDApKQorCQkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyB0byAnJXMnIiksCisJCQkJCXJlbW90ZS0+dXJsW2ldLCBidWYuYnVmKTsKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcy5wdXNoIiwgcmVtb3RlLT5uYW1lKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlLT5wdXNoX3JlZnNwZWNfbnI7IGkrKykKKwkJaWYgKGdpdF9jb25maWdfc2V0X211bHRpdmFyKGJ1Zi5idWYsIHJlbW90ZS0+cHVzaF9yZWZzcGVjW2ldLCAiXiQiLCAwKSkKKwkJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgYXBwZW5kICclcycgdG8gJyVzJyIpLAorCQkJCQlyZW1vdGUtPnB1c2hfcmVmc3BlY1tpXSwgYnVmLmJ1Zik7CisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMuZmV0Y2giLCByZW1vdGUtPm5hbWUpOworCWZvciAoaSA9IDA7IGkgPCByZW1vdGUtPmZldGNoX3JlZnNwZWNfbnI7IGkrKykKKwkJaWYgKGdpdF9jb25maWdfc2V0X211bHRpdmFyKGJ1Zi5idWYsIHJlbW90ZS0+ZmV0Y2hfcmVmc3BlY1tpXSwgIl4kIiwgMCkpCisJCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IGFwcGVuZCAnJXMnIHRvICclcyciKSwKKwkJCQkJcmVtb3RlLT5mZXRjaF9yZWZzcGVjW2ldLCBidWYuYnVmKTsKKwlpZiAocmVtb3RlLT5vcmlnaW4gPT0gUkVNT1RFX1JFTU9URVMpCisJCXVubGlua19vcl93YXJuKGdpdF9wYXRoKCJyZW1vdGVzLyVzIiwgcmVtb3RlLT5uYW1lKSk7CisJZWxzZSBpZiAocmVtb3RlLT5vcmlnaW4gPT0gUkVNT1RFX0JSQU5DSEVTKQorCQl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aCgiYnJhbmNoZXMvJXMiLCByZW1vdGUtPm5hbWUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtdihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IHJlbW90ZSAqb2xkcmVtb3RlLCAqbmV3cmVtb3RlOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIGJ1ZjIgPSBTVFJCVUZfSU5JVCwgYnVmMyA9IFNUUkJVRl9JTklULAorCQlvbGRfcmVtb3RlX2NvbnRleHQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVtb3RlX2JyYW5jaGVzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3QgcmVuYW1lX2luZm8gcmVuYW1lOworCWludCBpLCByZWZzcGVjX3VwZGF0ZWQgPSAwOworCisJaWYgKGFyZ2MgIT0gMykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX3JlbmFtZV91c2FnZSwgb3B0aW9ucyk7CisKKwlyZW5hbWUub2xkID0gYXJndlsxXTsKKwlyZW5hbWUubmV3ID0gYXJndlsyXTsKKwlyZW5hbWUucmVtb3RlX2JyYW5jaGVzID0gJnJlbW90ZV9icmFuY2hlczsKKworCW9sZHJlbW90ZSA9IHJlbW90ZV9nZXQocmVuYW1lLm9sZCk7CisJaWYgKCFvbGRyZW1vdGUpCisJCWRpZShfKCJObyBzdWNoIHJlbW90ZTogJXMiKSwgcmVuYW1lLm9sZCk7CisKKwlpZiAoIXN0cmNtcChyZW5hbWUub2xkLCByZW5hbWUubmV3KSAmJiBvbGRyZW1vdGUtPm9yaWdpbiAhPSBSRU1PVEVfQ09ORklHKQorCQlyZXR1cm4gbWlncmF0ZV9maWxlKG9sZHJlbW90ZSk7CisKKwluZXdyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbmFtZS5uZXcpOworCWlmIChuZXdyZW1vdGUgJiYgKG5ld3JlbW90ZS0+dXJsX25yID4gMSB8fCBuZXdyZW1vdGUtPmZldGNoX3JlZnNwZWNfbnIpKQorCQlkaWUoXygicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIpLCByZW5hbWUubmV3KTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZWZzL2hlYWRzL3Rlc3Q6cmVmcy9yZW1vdGVzLyVzL3Rlc3QiLCByZW5hbWUubmV3KTsKKwlpZiAoIXZhbGlkX2ZldGNoX3JlZnNwZWMoYnVmLmJ1ZikpCisJCWRpZShfKCInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIiksIHJlbmFtZS5uZXcpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJyZW1vdGUuJXMiLCByZW5hbWUub2xkKTsKKwlzdHJidWZfYWRkZigmYnVmMiwgInJlbW90ZS4lcyIsIHJlbmFtZS5uZXcpOworCWlmIChnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uKGJ1Zi5idWYsIGJ1ZjIuYnVmKSA8IDEpCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcmVuYW1lIGNvbmZpZyBzZWN0aW9uICclcycgdG8gJyVzJyIpLAorCQkJCWJ1Zi5idWYsIGJ1ZjIuYnVmKTsKKworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlzdHJidWZfYWRkZigmYnVmLCAicmVtb3RlLiVzLmZldGNoIiwgcmVuYW1lLm5ldyk7CisJaWYgKGdpdF9jb25maWdfc2V0X211bHRpdmFyKGJ1Zi5idWYsIE5VTEwsIE5VTEwsIDEpKQorCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIiksIGJ1Zi5idWYpOworCXN0cmJ1Zl9hZGRmKCZvbGRfcmVtb3RlX2NvbnRleHQsICI6cmVmcy9yZW1vdGVzLyVzLyIsIHJlbmFtZS5vbGQpOworCWZvciAoaSA9IDA7IGkgPCBvbGRyZW1vdGUtPmZldGNoX3JlZnNwZWNfbnI7IGkrKykgeworCQljaGFyICpwdHI7CisKKwkJc3RyYnVmX3Jlc2V0KCZidWYyKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmMiwgb2xkcmVtb3RlLT5mZXRjaF9yZWZzcGVjW2ldKTsKKwkJcHRyID0gc3Ryc3RyKGJ1ZjIuYnVmLCBvbGRfcmVtb3RlX2NvbnRleHQuYnVmKTsKKwkJaWYgKHB0cikgeworCQkJcmVmc3BlY191cGRhdGVkID0gMTsKKwkJCXN0cmJ1Zl9zcGxpY2UoJmJ1ZjIsCisJCQkJICAgICAgcHRyLWJ1ZjIuYnVmICsgc3RybGVuKCI6cmVmcy9yZW1vdGVzLyIpLAorCQkJCSAgICAgIHN0cmxlbihyZW5hbWUub2xkKSwgcmVuYW1lLm5ldywKKwkJCQkgICAgICBzdHJsZW4ocmVuYW1lLm5ldykpOworCQl9IGVsc2UKKwkJCXdhcm5pbmcoXygiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKwkJCQkgICJcdCVzXG4iCisJCQkJICAiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iKSwKKwkJCQlidWYyLmJ1Zik7CisKKwkJaWYgKGdpdF9jb25maWdfc2V0X211bHRpdmFyKGJ1Zi5idWYsIGJ1ZjIuYnVmLCAiXiQiLCAwKSkKKwkJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgYXBwZW5kICclcyciKSwgYnVmLmJ1Zik7CisJfQorCisJcmVhZF9icmFuY2hlcygpOworCWZvciAoaSA9IDA7IGkgPCBicmFuY2hfbGlzdC5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gYnJhbmNoX2xpc3QuaXRlbXMgKyBpOworCQlzdHJ1Y3QgYnJhbmNoX2luZm8gKmluZm8gPSBpdGVtLT51dGlsOworCQlpZiAoaW5mby0+cmVtb3RlX25hbWUgJiYgIXN0cmNtcChpbmZvLT5yZW1vdGVfbmFtZSwgcmVuYW1lLm9sZCkpIHsKKwkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCXN0cmJ1Zl9hZGRmKCZidWYsICJicmFuY2guJXMucmVtb3RlIiwgaXRlbS0+c3RyaW5nKTsKKwkJCWlmIChnaXRfY29uZmlnX3NldChidWYuYnVmLCByZW5hbWUubmV3KSkgeworCQkJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3Qgc2V0ICclcyciKSwgYnVmLmJ1Zik7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIXJlZnNwZWNfdXBkYXRlZCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEZpcnN0IHJlbW92ZSBzeW1yZWZzLCB0aGVuIHJlbmFtZSB0aGUgcmVzdCwgZmluYWxseSBjcmVhdGUKKwkgKiB0aGUgbmV3IHN5bXJlZnMuCisJICovCisJZm9yX2VhY2hfcmVmKHJlYWRfcmVtb3RlX2JyYW5jaGVzLCAmcmVuYW1lKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlX2JyYW5jaGVzLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSByZW1vdGVfYnJhbmNoZXMuaXRlbXMgKyBpOworCQlpbnQgZmxhZyA9IDA7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCXJlYWRfcmVmX2Z1bGwoaXRlbS0+c3RyaW5nLCBSRVNPTFZFX1JFRl9SRUFESU5HLCBvaWQuaGFzaCwgJmZsYWcpOworCQlpZiAoIShmbGFnICYgUkVGX0lTU1lNUkVGKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVsZXRlX3JlZihpdGVtLT5zdHJpbmcsIE5VTEwsIFJFRl9OT0RFUkVGKSkKKwkJCWRpZShfKCJkZWxldGluZyAnJXMnIGZhaWxlZCIpLCBpdGVtLT5zdHJpbmcpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3RlX2JyYW5jaGVzLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0gPSByZW1vdGVfYnJhbmNoZXMuaXRlbXMgKyBpOworCisJCWlmIChpdGVtLT51dGlsKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBpdGVtLT5zdHJpbmcpOworCQlzdHJidWZfc3BsaWNlKCZidWYsIHN0cmxlbigicmVmcy9yZW1vdGVzLyIpLCBzdHJsZW4ocmVuYW1lLm9sZCksCisJCQkJcmVuYW1lLm5ldywgc3RybGVuKHJlbmFtZS5uZXcpKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYyKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZjIsICJyZW1vdGU6IHJlbmFtZWQgJXMgdG8gJXMiLAorCQkJCWl0ZW0tPnN0cmluZywgYnVmLmJ1Zik7CisJCWlmIChyZW5hbWVfcmVmKGl0ZW0tPnN0cmluZywgYnVmLmJ1ZiwgYnVmMi5idWYpKQorCQkJZGllKF8oInJlbmFtaW5nICclcycgZmFpbGVkIiksIGl0ZW0tPnN0cmluZyk7CisJfQorCWZvciAoaSA9IDA7IGkgPCByZW1vdGVfYnJhbmNoZXMubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IHJlbW90ZV9icmFuY2hlcy5pdGVtcyArIGk7CisKKwkJaWYgKCFpdGVtLT51dGlsKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBpdGVtLT5zdHJpbmcpOworCQlzdHJidWZfc3BsaWNlKCZidWYsIHN0cmxlbigicmVmcy9yZW1vdGVzLyIpLCBzdHJsZW4ocmVuYW1lLm9sZCksCisJCQkJcmVuYW1lLm5ldywgc3RybGVuKHJlbmFtZS5uZXcpKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYyKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmMiwgaXRlbS0+dXRpbCk7CisJCXN0cmJ1Zl9zcGxpY2UoJmJ1ZjIsIHN0cmxlbigicmVmcy9yZW1vdGVzLyIpLCBzdHJsZW4ocmVuYW1lLm9sZCksCisJCQkJcmVuYW1lLm5ldywgc3RybGVuKHJlbmFtZS5uZXcpKTsKKwkJc3RyYnVmX3Jlc2V0KCZidWYzKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZjMsICJyZW1vdGU6IHJlbmFtZWQgJXMgdG8gJXMiLAorCQkJCWl0ZW0tPnN0cmluZywgYnVmLmJ1Zik7CisJCWlmIChjcmVhdGVfc3ltcmVmKGJ1Zi5idWYsIGJ1ZjIuYnVmLCBidWYzLmJ1ZikpCisJCQlkaWUoXygiY3JlYXRpbmcgJyVzJyBmYWlsZWQiKSwgYnVmLmJ1Zik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJtKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0VORCgpCisJfTsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qga25vd25fcmVtb3RlcyBrbm93bl9yZW1vdGVzID0geyBOVUxMLCBOVUxMIH07CisJc3RydWN0IHN0cmluZ19saXN0IGJyYW5jaGVzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IHNraXBwZWQgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3QgYnJhbmNoZXNfZm9yX3JlbW90ZSBjYl9kYXRhOworCWludCBpLCByZXN1bHQ7CisKKwltZW1zZXQoJmNiX2RhdGEsIDAsIHNpemVvZihjYl9kYXRhKSk7CisJY2JfZGF0YS5icmFuY2hlcyA9ICZicmFuY2hlczsKKwljYl9kYXRhLnNraXBwZWQgPSAmc2tpcHBlZDsKKwljYl9kYXRhLmtlZXAgPSAma25vd25fcmVtb3RlczsKKworCWlmIChhcmdjICE9IDIpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9ybV91c2FnZSwgb3B0aW9ucyk7CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KGFyZ3ZbMV0pOworCWlmICghcmVtb3RlKQorCQlkaWUoXygiTm8gc3VjaCByZW1vdGU6ICVzIiksIGFyZ3ZbMV0pOworCisJa25vd25fcmVtb3Rlcy50b19kZWxldGUgPSByZW1vdGU7CisJZm9yX2VhY2hfcmVtb3RlKGFkZF9rbm93bl9yZW1vdGUsICZrbm93bl9yZW1vdGVzKTsKKworCXJlYWRfYnJhbmNoZXMoKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnJhbmNoX2xpc3QubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9IGJyYW5jaF9saXN0Lml0ZW1zICsgaTsKKwkJc3RydWN0IGJyYW5jaF9pbmZvICppbmZvID0gaXRlbS0+dXRpbDsKKwkJaWYgKGluZm8tPnJlbW90ZV9uYW1lICYmICFzdHJjbXAoaW5mby0+cmVtb3RlX25hbWUsIHJlbW90ZS0+bmFtZSkpIHsKKwkJCWNvbnN0IGNoYXIgKmtleXNbXSA9IHsgInJlbW90ZSIsICJtZXJnZSIsIE5VTEwgfSwgKiprOworCQkJZm9yIChrID0ga2V5czsgKms7IGsrKykgeworCQkJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiYnJhbmNoLiVzLiVzIiwKKwkJCQkJCWl0ZW0tPnN0cmluZywgKmspOworCQkJCWlmIChnaXRfY29uZmlnX3NldChidWYuYnVmLCBOVUxMKSkgeworCQkJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogV2UgY2Fubm90IGp1c3QgcGFzcyBhIGZ1bmN0aW9uIHRvIGZvcl9lYWNoX3JlZigpIHdoaWNoIGRlbGV0ZXMKKwkgKiB0aGUgYnJhbmNoZXMgb25lIGJ5IG9uZSwgc2luY2UgZm9yX2VhY2hfcmVmKCkgcmVsaWVzIG9uIGNhY2hlZAorCSAqIHJlZnMsIHdoaWNoIGFyZSBpbnZhbGlkYXRlZCB3aGVuIGRlbGV0aW5nIGEgYnJhbmNoLgorCSAqLworCWNiX2RhdGEucmVtb3RlID0gcmVtb3RlOworCXJlc3VsdCA9IGZvcl9lYWNoX3JlZihhZGRfYnJhbmNoX2Zvcl9yZW1vdmFsLCAmY2JfZGF0YSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlpZiAoIXJlc3VsdCkKKwkJcmVzdWx0ID0gZGVsZXRlX3JlZnMoJmJyYW5jaGVzKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmYnJhbmNoZXMsIDApOworCisJaWYgKHNraXBwZWQubnIpIHsKKwkJZnByaW50Zl9sbihzdGRlcnIsCisJCQkgICBRXygiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorCQkJICAgICAgInRvIGRlbGV0ZSBpdCwgdXNlOiIsCisJCQkgICAgICAiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorCQkJICAgICAgInRvIGRlbGV0ZSB0aGVtLCB1c2U6IiwKKwkJCSAgICAgIHNraXBwZWQubnIpKTsKKwkJZm9yIChpID0gMDsgaSA8IHNraXBwZWQubnI7IGkrKykKKwkJCWZwcmludGYoc3RkZXJyLCAiICBnaXQgYnJhbmNoIC1kICVzXG4iLAorCQkJCXNraXBwZWQuaXRlbXNbaV0uc3RyaW5nKTsKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJnNraXBwZWQsIDApOworCisJaWYgKCFyZXN1bHQpIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlbW90ZS4lcyIsIHJlbW90ZS0+bmFtZSk7CisJCWlmIChnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uKGJ1Zi5idWYsIE5VTEwpIDwgMSkKKwkJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciKSwgYnVmLmJ1Zik7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfcHVzaF9pbmZvKHZvaWQgKnV0aWwsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlzdHJ1Y3QgcHVzaF9pbmZvICppbmZvID0gdXRpbDsKKwlmcmVlKGluZm8tPmRlc3QpOworCWZyZWUoaW5mbyk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfcmVtb3RlX3JlZl9zdGF0ZXMoc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcykKK3sKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLT5uZXcsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZzdGF0ZXMtPnN0YWxlLCAxKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLT50cmFja2VkLCAwKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3RhdGVzLT5oZWFkcywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXJfZnVuYygmc3RhdGVzLT5wdXNoLCBjbGVhcl9wdXNoX2luZm8pOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9yZWZfdG9fdHJhY2tlZF9saXN0KGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IGNiX2RhdGE7CisJc3RydWN0IHJlZnNwZWMgcmVmc3BlYzsKKworCWlmIChmbGFncyAmIFJFRl9JU1NZTVJFRikKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoJnJlZnNwZWMsIDAsIHNpemVvZihyZWZzcGVjKSk7CisJcmVmc3BlYy5kc3QgPSAoY2hhciAqKXJlZm5hbWU7CisJaWYgKCFyZW1vdGVfZmluZF90cmFja2luZyhzdGF0ZXMtPnJlbW90ZSwgJnJlZnNwZWMpKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnN0YXRlcy0+dHJhY2tlZCwgYWJicmV2X2JyYW5jaChyZWZzcGVjLnNyYykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3JlbW90ZV9yZWZfc3RhdGVzKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJIHN0cnVjdCByZWZfc3RhdGVzICpzdGF0ZXMsCisJCQkJIGludCBxdWVyeSkKK3sKKwlzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnM7CisKKwlzdGF0ZXMtPnJlbW90ZSA9IHJlbW90ZV9nZXQobmFtZSk7CisJaWYgKCFzdGF0ZXMtPnJlbW90ZSkKKwkJcmV0dXJuIGVycm9yKF8oIk5vIHN1Y2ggcmVtb3RlOiAlcyIpLCBuYW1lKTsKKworCXJlYWRfYnJhbmNoZXMoKTsKKworCWlmIChxdWVyeSkgeworCQl0cmFuc3BvcnQgPSB0cmFuc3BvcnRfZ2V0KHN0YXRlcy0+cmVtb3RlLCBzdGF0ZXMtPnJlbW90ZS0+dXJsX25yID4gMCA/CisJCQlzdGF0ZXMtPnJlbW90ZS0+dXJsWzBdIDogTlVMTCk7CisJCXJlbW90ZV9yZWZzID0gdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyh0cmFuc3BvcnQpOworCQl0cmFuc3BvcnRfZGlzY29ubmVjdCh0cmFuc3BvcnQpOworCisJCXN0YXRlcy0+cXVlcmllZCA9IDE7CisJCWlmIChxdWVyeSAmIEdFVF9SRUZfU1RBVEVTKQorCQkJZ2V0X3JlZl9zdGF0ZXMocmVtb3RlX3JlZnMsIHN0YXRlcyk7CisJCWlmIChxdWVyeSAmIEdFVF9IRUFEX05BTUVTKQorCQkJZ2V0X2hlYWRfbmFtZXMocmVtb3RlX3JlZnMsIHN0YXRlcyk7CisJCWlmIChxdWVyeSAmIEdFVF9QVVNIX1JFRl9TVEFURVMpCisJCQlnZXRfcHVzaF9yZWZfc3RhdGVzKHJlbW90ZV9yZWZzLCBzdGF0ZXMpOworCX0gZWxzZSB7CisJCWZvcl9lYWNoX3JlZihhcHBlbmRfcmVmX3RvX3RyYWNrZWRfbGlzdCwgc3RhdGVzKTsKKwkJc3RyaW5nX2xpc3Rfc29ydCgmc3RhdGVzLT50cmFja2VkKTsKKwkJZ2V0X3B1c2hfcmVmX3N0YXRlc19ub3F1ZXJ5KHN0YXRlcyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBzaG93X2luZm8geworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdDsKKwlzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzOworCWludCB3aWR0aCwgd2lkdGgyOworCWludCBhbnlfcmViYXNlOworfTsKKworc3RhdGljIGludCBhZGRfcmVtb3RlX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICppbmZvID0gY2JfZGF0YTsKKwlpbnQgbiA9IHN0cmxlbihpdGVtLT5zdHJpbmcpOworCWlmIChuID4gaW5mby0+d2lkdGgpCisJCWluZm8tPndpZHRoID0gbjsKKwlzdHJpbmdfbGlzdF9pbnNlcnQoaW5mby0+bGlzdCwgaXRlbS0+c3RyaW5nKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X3JlbW90ZV9pbmZvX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNob3dfaW5mbyAqaW5mbyA9IGNiX2RhdGE7CisJc3RydWN0IHJlZl9zdGF0ZXMgKnN0YXRlcyA9IGluZm8tPnN0YXRlczsKKwljb25zdCBjaGFyICpuYW1lID0gaXRlbS0+c3RyaW5nOworCisJaWYgKHN0YXRlcy0+cXVlcmllZCkgeworCQljb25zdCBjaGFyICpmbXQgPSAiJXMiOworCQljb25zdCBjaGFyICphcmcgPSAiIjsKKwkJaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoJnN0YXRlcy0+bmV3LCBuYW1lKSkgeworCQkJZm10ID0gXygiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIik7CisJCQlhcmcgPSBzdGF0ZXMtPnJlbW90ZS0+bmFtZTsKKwkJfSBlbHNlIGlmIChzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZzdGF0ZXMtPnRyYWNrZWQsIG5hbWUpKQorCQkJYXJnID0gXygiIHRyYWNrZWQiKTsKKwkJZWxzZSBpZiAoc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmc3RhdGVzLT5zdGFsZSwgbmFtZSkpCisJCQlhcmcgPSBfKCIgc3RhbGUgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScgdG8gcmVtb3ZlKSIpOworCQllbHNlCisJCQlhcmcgPSBfKCIgPz8/Iik7CisJCXByaW50ZigiICAgICUtKnMiLCBpbmZvLT53aWR0aCwgbmFtZSk7CisJCXByaW50ZihmbXQsIGFyZyk7CisJCXByaW50ZigiXG4iKTsKKwl9IGVsc2UKKwkJcHJpbnRmKCIgICAgJXNcbiIsIG5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2xvY2FsX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqYnJhbmNoX2l0ZW0sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHNob3dfaW5mbyAqc2hvd19pbmZvID0gY2JfZGF0YTsKKwlzdHJ1Y3QgcmVmX3N0YXRlcyAqc3RhdGVzID0gc2hvd19pbmZvLT5zdGF0ZXM7CisJc3RydWN0IGJyYW5jaF9pbmZvICpicmFuY2hfaW5mbyA9IGJyYW5jaF9pdGVtLT51dGlsOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWludCBuOworCisJaWYgKCFicmFuY2hfaW5mby0+bWVyZ2UubnIgfHwgIWJyYW5jaF9pbmZvLT5yZW1vdGVfbmFtZSB8fAorCSAgICBzdHJjbXAoc3RhdGVzLT5yZW1vdGUtPm5hbWUsIGJyYW5jaF9pbmZvLT5yZW1vdGVfbmFtZSkpCisJCXJldHVybiAwOworCWlmICgobiA9IHN0cmxlbihicmFuY2hfaXRlbS0+c3RyaW5nKSkgPiBzaG93X2luZm8tPndpZHRoKQorCQlzaG93X2luZm8tPndpZHRoID0gbjsKKwlpZiAoYnJhbmNoX2luZm8tPnJlYmFzZSkKKwkJc2hvd19pbmZvLT5hbnlfcmViYXNlID0gMTsKKworCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQoc2hvd19pbmZvLT5saXN0LCBicmFuY2hfaXRlbS0+c3RyaW5nKTsKKwlpdGVtLT51dGlsID0gYnJhbmNoX2luZm87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X2xvY2FsX2luZm9faXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICpzaG93X2luZm8gPSBjYl9kYXRhOworCXN0cnVjdCBicmFuY2hfaW5mbyAqYnJhbmNoX2luZm8gPSBpdGVtLT51dGlsOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbWVyZ2UgPSAmYnJhbmNoX2luZm8tPm1lcmdlOworCWNvbnN0IGNoYXIgKmFsc287CisJaW50IGk7CisKKwlpZiAoYnJhbmNoX2luZm8tPnJlYmFzZSAmJiBicmFuY2hfaW5mby0+bWVyZ2UubnIgPiAxKSB7CisJCWVycm9yKF8oImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIpLAorCQkJaXRlbS0+c3RyaW5nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcHJpbnRmKCIgICAgJS0qcyAiLCBzaG93X2luZm8tPndpZHRoLCBpdGVtLT5zdHJpbmcpOworCWlmIChicmFuY2hfaW5mby0+cmViYXNlKSB7CisJCXByaW50Zl9sbihfKCJyZWJhc2VzIG9udG8gcmVtb3RlICVzIiksIG1lcmdlLT5pdGVtc1swXS5zdHJpbmcpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHNob3dfaW5mby0+YW55X3JlYmFzZSkgeworCQlwcmludGZfbG4oXygiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIpLCBtZXJnZS0+aXRlbXNbMF0uc3RyaW5nKTsKKwkJYWxzbyA9IF8oIiAgICBhbmQgd2l0aCByZW1vdGUiKTsKKwl9IGVsc2UgeworCQlwcmludGZfbG4oXygibWVyZ2VzIHdpdGggcmVtb3RlICVzIiksIG1lcmdlLT5pdGVtc1swXS5zdHJpbmcpOworCQlhbHNvID0gXygiICAgYW5kIHdpdGggcmVtb3RlIik7CisJfQorCWZvciAoaSA9IDE7IGkgPCBtZXJnZS0+bnI7IGkrKykKKwkJcHJpbnRmKCIgICAgJS0qcyAlcyAlc1xuIiwgc2hvd19pbmZvLT53aWR0aCwgIiIsIGFsc28sCisJCSAgICAgICBtZXJnZS0+aXRlbXNbaV0uc3RyaW5nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9wdXNoX3RvX3Nob3dfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcHVzaF9pdGVtLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzaG93X2luZm8gKnNob3dfaW5mbyA9IGNiX2RhdGE7CisJc3RydWN0IHB1c2hfaW5mbyAqcHVzaF9pbmZvID0gcHVzaF9pdGVtLT51dGlsOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCWludCBuOworCWlmICgobiA9IHN0cmxlbihwdXNoX2l0ZW0tPnN0cmluZykpID4gc2hvd19pbmZvLT53aWR0aCkKKwkJc2hvd19pbmZvLT53aWR0aCA9IG47CisJaWYgKChuID0gc3RybGVuKHB1c2hfaW5mby0+ZGVzdCkpID4gc2hvd19pbmZvLT53aWR0aDIpCisJCXNob3dfaW5mby0+d2lkdGgyID0gbjsKKwlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKHNob3dfaW5mby0+bGlzdCwgcHVzaF9pdGVtLT5zdHJpbmcpOworCWl0ZW0tPnV0aWwgPSBwdXNoX2l0ZW0tPnV0aWw7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTb3J0aW5nIGNvbXBhcmlzb24gZm9yIGEgc3RyaW5nIGxpc3QgdGhhdCBoYXMgcHVzaF9pbmZvCisgKiBzdHJ1Y3RzIGluIGl0cyB1dGlsIGZpZWxkCisgKi8KK3N0YXRpYyBpbnQgY21wX3N0cmluZ193aXRoX3B1c2goY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICphID0gdmE7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmIgPSB2YjsKKwljb25zdCBzdHJ1Y3QgcHVzaF9pbmZvICphX3B1c2ggPSBhLT51dGlsOworCWNvbnN0IHN0cnVjdCBwdXNoX2luZm8gKmJfcHVzaCA9IGItPnV0aWw7CisJaW50IGNtcCA9IHN0cmNtcChhLT5zdHJpbmcsIGItPnN0cmluZyk7CisJcmV0dXJuIGNtcCA/IGNtcCA6IHN0cmNtcChhX3B1c2gtPmRlc3QsIGJfcHVzaC0+ZGVzdCk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19wdXNoX2luZm9faXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc2hvd19pbmZvICpzaG93X2luZm8gPSBjYl9kYXRhOworCXN0cnVjdCBwdXNoX2luZm8gKnB1c2hfaW5mbyA9IGl0ZW0tPnV0aWw7CisJY29uc3QgY2hhciAqc3JjID0gaXRlbS0+c3RyaW5nLCAqc3RhdHVzID0gTlVMTDsKKworCXN3aXRjaCAocHVzaF9pbmZvLT5zdGF0dXMpIHsKKwljYXNlIFBVU0hfU1RBVFVTX0NSRUFURToKKwkJc3RhdHVzID0gXygiY3JlYXRlIik7CisJCWJyZWFrOworCWNhc2UgUFVTSF9TVEFUVVNfREVMRVRFOgorCQlzdGF0dXMgPSBfKCJkZWxldGUiKTsKKwkJc3JjID0gXygiKG5vbmUpIik7CisJCWJyZWFrOworCWNhc2UgUFVTSF9TVEFUVVNfVVBUT0RBVEU6CisJCXN0YXR1cyA9IF8oInVwIHRvIGRhdGUiKTsKKwkJYnJlYWs7CisJY2FzZSBQVVNIX1NUQVRVU19GQVNURk9SV0FSRDoKKwkJc3RhdHVzID0gXygiZmFzdC1mb3J3YXJkYWJsZSIpOworCQlicmVhazsKKwljYXNlIFBVU0hfU1RBVFVTX09VVE9GREFURToKKwkJc3RhdHVzID0gXygibG9jYWwgb3V0IG9mIGRhdGUiKTsKKwkJYnJlYWs7CisJY2FzZSBQVVNIX1NUQVRVU19OT1RRVUVSSUVEOgorCQlicmVhazsKKwl9CisJaWYgKHN0YXR1cykgeworCQlpZiAocHVzaF9pbmZvLT5mb3JjZWQpCisJCQlwcmludGZfbG4oXygiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIpLCBzaG93X2luZm8tPndpZHRoLCBzcmMsCisJCQkgICAgICAgc2hvd19pbmZvLT53aWR0aDIsIHB1c2hfaW5mby0+ZGVzdCwgc3RhdHVzKTsKKwkJZWxzZQorCQkJcHJpbnRmX2xuKF8oIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiKSwgc2hvd19pbmZvLT53aWR0aCwgc3JjLAorCQkJICAgICAgIHNob3dfaW5mby0+d2lkdGgyLCBwdXNoX2luZm8tPmRlc3QsIHN0YXR1cyk7CisJfSBlbHNlIHsKKwkJaWYgKHB1c2hfaW5mby0+Zm9yY2VkKQorCQkJcHJpbnRmX2xuKF8oIiAgICAlLSpzIGZvcmNlcyB0byAlcyIpLCBzaG93X2luZm8tPndpZHRoLCBzcmMsCisJCQkgICAgICAgcHVzaF9pbmZvLT5kZXN0KTsKKwkJZWxzZQorCQkJcHJpbnRmX2xuKF8oIiAgICAlLSpzIHB1c2hlcyB0byAlcyIpLCBzaG93X2luZm8tPndpZHRoLCBzcmMsCisJCQkgICAgICAgcHVzaF9pbmZvLT5kZXN0KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X29uZV9lbnRyeShzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKnByaXYpCit7CisJc3RydWN0IHN0cmluZ19saXN0ICpsaXN0ID0gcHJpdjsKKwlzdHJ1Y3Qgc3RyYnVmIHVybF9idWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICoqdXJsOworCWludCBpLCB1cmxfbnI7CisKKwlpZiAocmVtb3RlLT51cmxfbnIgPiAwKSB7CisJCXN0cmJ1Zl9hZGRmKCZ1cmxfYnVmLCAiJXMgKGZldGNoKSIsIHJlbW90ZS0+dXJsWzBdKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHJlbW90ZS0+bmFtZSktPnV0aWwgPQorCQkJCXN0cmJ1Zl9kZXRhY2goJnVybF9idWYsIE5VTEwpOworCX0gZWxzZQorCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcmVtb3RlLT5uYW1lKS0+dXRpbCA9IE5VTEw7CisJaWYgKHJlbW90ZS0+cHVzaHVybF9ucikgeworCQl1cmwgPSByZW1vdGUtPnB1c2h1cmw7CisJCXVybF9uciA9IHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9IGVsc2UgeworCQl1cmwgPSByZW1vdGUtPnVybDsKKwkJdXJsX25yID0gcmVtb3RlLT51cmxfbnI7CisJfQorCWZvciAoaSA9IDA7IGkgPCB1cmxfbnI7IGkrKykKKwl7CisJCXN0cmJ1Zl9hZGRmKCZ1cmxfYnVmLCAiJXMgKHB1c2gpIiwgdXJsW2ldKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHJlbW90ZS0+bmFtZSktPnV0aWwgPQorCQkJCXN0cmJ1Zl9kZXRhY2goJnVybF9idWYsIE5VTEwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfYWxsKHZvaWQpCit7CisJc3RydWN0IHN0cmluZ19saXN0IGxpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWludCByZXN1bHQ7CisKKwlsaXN0LnN0cmR1cF9zdHJpbmdzID0gMTsKKwlyZXN1bHQgPSBmb3JfZWFjaF9yZW1vdGUoZ2V0X29uZV9lbnRyeSwgJmxpc3QpOworCisJaWYgKCFyZXN1bHQpIHsKKwkJaW50IGk7CisKKwkJc3RyaW5nX2xpc3Rfc29ydCgmbGlzdCk7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtID0gbGlzdC5pdGVtcyArIGk7CisJCQlpZiAodmVyYm9zZSkKKwkJCQlwcmludGYoIiVzXHQlc1xuIiwgaXRlbS0+c3RyaW5nLAorCQkJCQlpdGVtLT51dGlsID8gKGNvbnN0IGNoYXIgKilpdGVtLT51dGlsIDogIiIpOworCQkJZWxzZSB7CisJCQkJaWYgKGkgJiYgIXN0cmNtcCgoaXRlbSAtIDEpLT5zdHJpbmcsIGl0ZW0tPnN0cmluZykpCisJCQkJCWNvbnRpbnVlOworCQkJCXByaW50ZigiJXNcbiIsIGl0ZW0tPnN0cmluZyk7CisJCQl9CisJCX0KKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJmxpc3QsIDEpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc2hvdyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IG5vX3F1ZXJ5ID0gMCwgcmVzdWx0ID0gMCwgcXVlcnlfZmxhZyA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCduJywgTlVMTCwgJm5vX3F1ZXJ5LCBOXygiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiKSksCisJCU9QVF9FTkQoKQorCX07CisJc3RydWN0IHJlZl9zdGF0ZXMgc3RhdGVzOworCXN0cnVjdCBzdHJpbmdfbGlzdCBpbmZvX2xpc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzaG93X2luZm8gaW5mbzsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3Nob3dfdXNhZ2UsCisJCQkgICAgIDApOworCisJaWYgKGFyZ2MgPCAxKQorCQlyZXR1cm4gc2hvd19hbGwoKTsKKworCWlmICghbm9fcXVlcnkpCisJCXF1ZXJ5X2ZsYWcgPSAoR0VUX1JFRl9TVEFURVMgfCBHRVRfSEVBRF9OQU1FUyB8IEdFVF9QVVNIX1JFRl9TVEFURVMpOworCisJbWVtc2V0KCZzdGF0ZXMsIDAsIHNpemVvZihzdGF0ZXMpKTsKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJaW5mby5zdGF0ZXMgPSAmc3RhdGVzOworCWluZm8ubGlzdCA9ICZpbmZvX2xpc3Q7CisJZm9yICg7IGFyZ2M7IGFyZ2MtLSwgYXJndisrKSB7CisJCWludCBpOworCQljb25zdCBjaGFyICoqdXJsOworCQlpbnQgdXJsX25yOworCisJCWdldF9yZW1vdGVfcmVmX3N0YXRlcygqYXJndiwgJnN0YXRlcywgcXVlcnlfZmxhZyk7CisKKwkJcHJpbnRmX2xuKF8oIiogcmVtb3RlICVzIiksICphcmd2KTsKKwkJcHJpbnRmX2xuKF8oIiAgRmV0Y2ggVVJMOiAlcyIpLCBzdGF0ZXMucmVtb3RlLT51cmxfbnIgPiAwID8KKwkJICAgICAgIHN0YXRlcy5yZW1vdGUtPnVybFswXSA6IF8oIihubyBVUkwpIikpOworCQlpZiAoc3RhdGVzLnJlbW90ZS0+cHVzaHVybF9ucikgeworCQkJdXJsID0gc3RhdGVzLnJlbW90ZS0+cHVzaHVybDsKKwkJCXVybF9uciA9IHN0YXRlcy5yZW1vdGUtPnB1c2h1cmxfbnI7CisJCX0gZWxzZSB7CisJCQl1cmwgPSBzdGF0ZXMucmVtb3RlLT51cmw7CisJCQl1cmxfbnIgPSBzdGF0ZXMucmVtb3RlLT51cmxfbnI7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHVybF9ucjsgaSsrKQorCQkJcHJpbnRmX2xuKF8oIiAgUHVzaCAgVVJMOiAlcyIpLCB1cmxbaV0pOworCQlpZiAoIWkpCisJCQlwcmludGZfbG4oXygiICBQdXNoICBVUkw6ICVzIiksICIobm8gVVJMKSIpOworCQlpZiAobm9fcXVlcnkpCisJCQlwcmludGZfbG4oXygiICBIRUFEIGJyYW5jaDogJXMiKSwgIihub3QgcXVlcmllZCkiKTsKKwkJZWxzZSBpZiAoIXN0YXRlcy5oZWFkcy5ucikKKwkJCXByaW50Zl9sbihfKCIgIEhFQUQgYnJhbmNoOiAlcyIpLCAiKHVua25vd24pIik7CisJCWVsc2UgaWYgKHN0YXRlcy5oZWFkcy5uciA9PSAxKQorCQkJcHJpbnRmX2xuKF8oIiAgSEVBRCBicmFuY2g6ICVzIiksIHN0YXRlcy5oZWFkcy5pdGVtc1swXS5zdHJpbmcpOworCQllbHNlIHsKKwkJCXByaW50ZihfKCIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIgorCQkJCSAiIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iKSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3RhdGVzLmhlYWRzLm5yOyBpKyspCisJCQkJcHJpbnRmKCIgICAgJXNcbiIsIHN0YXRlcy5oZWFkcy5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisKKwkJLyogcmVtb3RlIGJyYW5jaCBpbmZvICovCisJCWluZm8ud2lkdGggPSAwOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdCgmc3RhdGVzLm5ldywgYWRkX3JlbW90ZV90b19zaG93X2luZm8sICZpbmZvKTsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoJnN0YXRlcy50cmFja2VkLCBhZGRfcmVtb3RlX3RvX3Nob3dfaW5mbywgJmluZm8pOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdCgmc3RhdGVzLnN0YWxlLCBhZGRfcmVtb3RlX3RvX3Nob3dfaW5mbywgJmluZm8pOworCQlpZiAoaW5mby5saXN0LT5ucikKKwkJCXByaW50Zl9sbihRXygiICBSZW1vdGUgYnJhbmNoOiVzIiwKKwkJCQkgICAgICIgIFJlbW90ZSBicmFuY2hlczolcyIsCisJCQkJICAgICBpbmZvLmxpc3QtPm5yKSwKKwkJCQkgIG5vX3F1ZXJ5ID8gXygiIChzdGF0dXMgbm90IHF1ZXJpZWQpIikgOiAiIik7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0KGluZm8ubGlzdCwgc2hvd19yZW1vdGVfaW5mb19pdGVtLCAmaW5mbyk7CisJCXN0cmluZ19saXN0X2NsZWFyKGluZm8ubGlzdCwgMCk7CisKKwkJLyogZ2l0IHB1bGwgaW5mbyAqLworCQlpbmZvLndpZHRoID0gMDsKKwkJaW5mby5hbnlfcmViYXNlID0gMDsKKwkJZm9yX2VhY2hfc3RyaW5nX2xpc3QoJmJyYW5jaF9saXN0LCBhZGRfbG9jYWxfdG9fc2hvd19pbmZvLCAmaW5mbyk7CisJCWlmIChpbmZvLmxpc3QtPm5yKQorCQkJcHJpbnRmX2xuKFFfKCIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIsCisJCQkJICAgICAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIsCisJCQkJICAgICBpbmZvLmxpc3QtPm5yKSk7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0KGluZm8ubGlzdCwgc2hvd19sb2NhbF9pbmZvX2l0ZW0sICZpbmZvKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoaW5mby5saXN0LCAwKTsKKworCQkvKiBnaXQgcHVzaCBpbmZvICovCisJCWlmIChzdGF0ZXMucmVtb3RlLT5taXJyb3IpCisJCQlwcmludGZfbG4oXygiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIpKTsKKworCQlpbmZvLndpZHRoID0gaW5mby53aWR0aDIgPSAwOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdCgmc3RhdGVzLnB1c2gsIGFkZF9wdXNoX3RvX3Nob3dfaW5mbywgJmluZm8pOworCQlxc29ydChpbmZvLmxpc3QtPml0ZW1zLCBpbmZvLmxpc3QtPm5yLAorCQkJc2l6ZW9mKCppbmZvLmxpc3QtPml0ZW1zKSwgY21wX3N0cmluZ193aXRoX3B1c2gpOworCQlpZiAoaW5mby5saXN0LT5ucikKKwkJCXByaW50Zl9sbihRXygiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIsCisJCQkJICAgICAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiLAorCQkJCSAgICAgaW5mby5saXN0LT5uciksCisJCQkJICBub19xdWVyeSA/IF8oIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIpIDogIiIpOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdChpbmZvLmxpc3QsIHNob3dfcHVzaF9pbmZvX2l0ZW0sICZpbmZvKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoaW5mby5saXN0LCAwKTsKKworCQlmcmVlX3JlbW90ZV9yZWZfc3RhdGVzKCZzdGF0ZXMpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2hlYWQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpLCBvcHRfYSA9IDAsIG9wdF9kID0gMCwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklULCBidWYyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqaGVhZF9uYW1lID0gTlVMTDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnYScsICJhdXRvIiwgJm9wdF9hLAorCQkJIE5fKCJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiKSksCisJCU9QVF9CT09MKCdkJywgImRlbGV0ZSIsICZvcHRfZCwKKwkJCSBOXygiZGVsZXRlIHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9zZXRoZWFkX3VzYWdlLAorCQkJICAgICAwKTsKKwlpZiAoYXJnYykKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlZnMvcmVtb3Rlcy8lcy9IRUFEIiwgYXJndlswXSk7CisKKwlpZiAoIW9wdF9hICYmICFvcHRfZCAmJiBhcmdjID09IDIpIHsKKwkJaGVhZF9uYW1lID0geHN0cmR1cChhcmd2WzFdKTsKKwl9IGVsc2UgaWYgKG9wdF9hICYmICFvcHRfZCAmJiBhcmdjID09IDEpIHsKKwkJc3RydWN0IHJlZl9zdGF0ZXMgc3RhdGVzOworCQltZW1zZXQoJnN0YXRlcywgMCwgc2l6ZW9mKHN0YXRlcykpOworCQlnZXRfcmVtb3RlX3JlZl9zdGF0ZXMoYXJndlswXSwgJnN0YXRlcywgR0VUX0hFQURfTkFNRVMpOworCQlpZiAoIXN0YXRlcy5oZWFkcy5ucikKKwkJCXJlc3VsdCB8PSBlcnJvcihfKCJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIikpOworCQllbHNlIGlmIChzdGF0ZXMuaGVhZHMubnIgPiAxKSB7CisJCQlyZXN1bHQgfD0gZXJyb3IoXygiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuICIKKwkJCQkJICAiUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIpKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBzdGF0ZXMuaGVhZHMubnI7IGkrKykKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgZ2l0IHJlbW90ZSBzZXQtaGVhZCAlcyAlc1xuIiwKKwkJCQkJYXJndlswXSwgc3RhdGVzLmhlYWRzLml0ZW1zW2ldLnN0cmluZyk7CisJCX0gZWxzZQorCQkJaGVhZF9uYW1lID0geHN0cmR1cChzdGF0ZXMuaGVhZHMuaXRlbXNbMF0uc3RyaW5nKTsKKwkJZnJlZV9yZW1vdGVfcmVmX3N0YXRlcygmc3RhdGVzKTsKKwl9IGVsc2UgaWYgKG9wdF9kICYmICFvcHRfYSAmJiBhcmdjID09IDEpIHsKKwkJaWYgKGRlbGV0ZV9yZWYoYnVmLmJ1ZiwgTlVMTCwgUkVGX05PREVSRUYpKQorCQkJcmVzdWx0IHw9IGVycm9yKF8oIkNvdWxkIG5vdCBkZWxldGUgJXMiKSwgYnVmLmJ1Zik7CisJfSBlbHNlCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9zZXRoZWFkX3VzYWdlLCBvcHRpb25zKTsKKworCWlmIChoZWFkX25hbWUpIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZjIsICJyZWZzL3JlbW90ZXMvJXMvJXMiLCBhcmd2WzBdLCBoZWFkX25hbWUpOworCQkvKiBtYWtlIHN1cmUgaXQncyB2YWxpZCAqLworCQlpZiAoIXJlZl9leGlzdHMoYnVmMi5idWYpKQorCQkJcmVzdWx0IHw9IGVycm9yKF8oIk5vdCBhIHZhbGlkIHJlZjogJXMiKSwgYnVmMi5idWYpOworCQllbHNlIGlmIChjcmVhdGVfc3ltcmVmKGJ1Zi5idWYsIGJ1ZjIuYnVmLCAicmVtb3RlIHNldC1oZWFkIikpCisJCQlyZXN1bHQgfD0gZXJyb3IoXygiQ291bGQgbm90IHNldHVwICVzIiksIGJ1Zi5idWYpOworCQlpZiAob3B0X2EpCisJCQlwcmludGYoIiVzL0hFQUQgc2V0IHRvICVzXG4iLCBhcmd2WzBdLCBoZWFkX25hbWUpOworCQlmcmVlKGhlYWRfbmFtZSk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1ZjIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmVfcmVtb3RlKGNvbnN0IGNoYXIgKnJlbW90ZSwgaW50IGRyeV9ydW4pCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IHJlZl9zdGF0ZXMgc3RhdGVzOworCXN0cnVjdCBzdHJpbmdfbGlzdCByZWZzX3RvX3BydW5lID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwljb25zdCBjaGFyICpkYW5nbGluZ19tc2cgPSBkcnlfcnVuCisJCT8gXygiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIpCisJCTogXygiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIik7CisKKwltZW1zZXQoJnN0YXRlcywgMCwgc2l6ZW9mKHN0YXRlcykpOworCWdldF9yZW1vdGVfcmVmX3N0YXRlcyhyZW1vdGUsICZzdGF0ZXMsIEdFVF9SRUZfU1RBVEVTKTsKKworCWlmICghc3RhdGVzLnN0YWxlLm5yKSB7CisJCWZyZWVfcmVtb3RlX3JlZl9zdGF0ZXMoJnN0YXRlcyk7CisJCXJldHVybiAwOworCX0KKworCXByaW50Zl9sbihfKCJQcnVuaW5nICVzIiksIHJlbW90ZSk7CisJcHJpbnRmX2xuKF8oIlVSTDogJXMiKSwKKwkJICBzdGF0ZXMucmVtb3RlLT51cmxfbnIKKwkJICA/IHN0YXRlcy5yZW1vdGUtPnVybFswXQorCQkgIDogXygiKG5vIFVSTCkiKSk7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZzdGF0ZXMuc3RhbGUpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVmc190b19wcnVuZSwgaXRlbS0+dXRpbCk7CisJc3RyaW5nX2xpc3Rfc29ydCgmcmVmc190b19wcnVuZSk7CisKKwlpZiAoIWRyeV9ydW4pCisJCXJlc3VsdCB8PSBkZWxldGVfcmVmcygmcmVmc190b19wcnVuZSk7CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZzdGF0ZXMuc3RhbGUpIHsKKwkJY29uc3QgY2hhciAqcmVmbmFtZSA9IGl0ZW0tPnV0aWw7CisKKwkJaWYgKGRyeV9ydW4pCisJCQlwcmludGZfbG4oXygiICogW3dvdWxkIHBydW5lXSAlcyIpLAorCQkJICAgICAgIGFiYnJldl9yZWYocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSk7CisJCWVsc2UKKwkJCXByaW50Zl9sbihfKCIgKiBbcHJ1bmVkXSAlcyIpLAorCQkJICAgICAgIGFiYnJldl9yZWYocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSk7CisJfQorCisJd2Fybl9kYW5nbGluZ19zeW1yZWZzKHN0ZG91dCwgZGFuZ2xpbmdfbXNnLCAmcmVmc190b19wcnVuZSk7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmcmVmc190b19wcnVuZSwgMCk7CisJZnJlZV9yZW1vdGVfcmVmX3N0YXRlcygmc3RhdGVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHBydW5lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgZHJ5X3J1biA9IDAsIHJlc3VsdCA9IDA7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9fRFJZX1JVTigmZHJ5X3J1biwgTl8oImRyeSBydW4iKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9wcnVuZV91c2FnZSwKKwkJCSAgICAgMCk7CisKKwlpZiAoYXJnYyA8IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9wcnVuZV91c2FnZSwgb3B0aW9ucyk7CisKKwlmb3IgKDsgYXJnYzsgYXJnYy0tLCBhcmd2KyspCisJCXJlc3VsdCB8PSBwcnVuZV9yZW1vdGUoKmFyZ3YsIGRyeV9ydW4pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBnZXRfcmVtb3RlX2RlZmF1bHQoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqcHJpdikKK3sKKwlpZiAoc3RyY21wKGtleSwgInJlbW90ZXMuZGVmYXVsdCIpID09IDApIHsKKwkJaW50ICpmb3VuZCA9IHByaXY7CisJCSpmb3VuZCA9IDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwZGF0ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGksIHBydW5lID0gLTE7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdwJywgInBydW5lIiwgJnBydW5lLAorCQkJIE5fKCJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIikpLAorCQlPUFRfRU5EKCkKKwl9OworCXN0cnVjdCBhcmd2X2FycmF5IGZldGNoX2FyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisJaW50IGRlZmF1bHRfZGVmaW5lZCA9IDA7CisJaW50IHJldHZhbDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIGJ1aWx0aW5fcmVtb3RlX3VwZGF0ZV91c2FnZSwKKwkJCSAgICAgUEFSU0VfT1BUX0tFRVBfQVJHVjApOworCisJYXJndl9hcnJheV9wdXNoKCZmZXRjaF9hcmd2LCAiZmV0Y2giKTsKKworCWlmIChwcnVuZSAhPSAtMSkKKwkJYXJndl9hcnJheV9wdXNoKCZmZXRjaF9hcmd2LCBwcnVuZSA/ICItLXBydW5lIiA6ICItLW5vLXBydW5lIik7CisJaWYgKHZlcmJvc2UpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmZmV0Y2hfYXJndiwgIi12Iik7CisJYXJndl9hcnJheV9wdXNoKCZmZXRjaF9hcmd2LCAiLS1tdWx0aXBsZSIpOworCWlmIChhcmdjIDwgMikKKwkJYXJndl9hcnJheV9wdXNoKCZmZXRjaF9hcmd2LCAiZGVmYXVsdCIpOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaCgmZmV0Y2hfYXJndiwgYXJndltpXSk7CisKKwlpZiAoc3RyY21wKGZldGNoX2FyZ3YuYXJndltmZXRjaF9hcmd2LmFyZ2MtMV0sICJkZWZhdWx0IikgPT0gMCkgeworCQlnaXRfY29uZmlnKGdldF9yZW1vdGVfZGVmYXVsdCwgJmRlZmF1bHRfZGVmaW5lZCk7CisJCWlmICghZGVmYXVsdF9kZWZpbmVkKSB7CisJCQlhcmd2X2FycmF5X3BvcCgmZmV0Y2hfYXJndik7CisJCQlhcmd2X2FycmF5X3B1c2goJmZldGNoX2FyZ3YsICItLWFsbCIpOworCQl9CisJfQorCisJcmV0dmFsID0gcnVuX2NvbW1hbmRfdl9vcHQoZmV0Y2hfYXJndi5hcmd2LCBSVU5fR0lUX0NNRCk7CisJYXJndl9hcnJheV9jbGVhcigmZmV0Y2hfYXJndik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCByZW1vdmVfYWxsX2ZldGNoX3JlZnNwZWNzKGNvbnN0IGNoYXIgKnJlbW90ZSwgY29uc3QgY2hhciAqa2V5KQoreworCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihrZXksIE5VTEwsIE5VTEwsIDEpOworfQorCitzdGF0aWMgaW50IGFkZF9icmFuY2hlcyhzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKipicmFuY2hlcywKKwkJCWNvbnN0IGNoYXIgKmtleSkKK3sKKwljb25zdCBjaGFyICpyZW1vdGVuYW1lID0gcmVtb3RlLT5uYW1lOworCWludCBtaXJyb3IgPSByZW1vdGUtPm1pcnJvcjsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZnNwZWMgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoOyAqYnJhbmNoZXM7IGJyYW5jaGVzKyspCisJCWlmIChhZGRfYnJhbmNoKGtleSwgKmJyYW5jaGVzLCByZW1vdGVuYW1lLCBtaXJyb3IsICZyZWZzcGVjKSkgeworCQkJc3RyYnVmX3JlbGVhc2UoJnJlZnNwZWMpOworCQkJcmV0dXJuIDE7CisJCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZzcGVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfcmVtb3RlX2JyYW5jaGVzKGNvbnN0IGNoYXIgKnJlbW90ZW5hbWUsIGNvbnN0IGNoYXIgKipicmFuY2hlcywKKwkJCQlpbnQgYWRkX21vZGUpCit7CisJc3RydWN0IHN0cmJ1ZiBrZXkgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisKKwlzdHJidWZfYWRkZigma2V5LCAicmVtb3RlLiVzLmZldGNoIiwgcmVtb3RlbmFtZSk7CisKKwlpZiAoIXJlbW90ZV9pc19jb25maWd1cmVkKHJlbW90ZW5hbWUpKQorCQlkaWUoXygiTm8gc3VjaCByZW1vdGUgJyVzJyIpLCByZW1vdGVuYW1lKTsKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZW5hbWUpOworCisJaWYgKCFhZGRfbW9kZSAmJiByZW1vdmVfYWxsX2ZldGNoX3JlZnNwZWNzKHJlbW90ZW5hbWUsIGtleS5idWYpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGFkZF9icmFuY2hlcyhyZW1vdGUsIGJyYW5jaGVzLCBrZXkuYnVmKSkgeworCQlzdHJidWZfcmVsZWFzZSgma2V5KTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmtleSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2JyYW5jaGVzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgYWRkX21vZGUgPSAwOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnXDAnLCAiYWRkIiwgJmFkZF9tb2RlLCBOXygiYWRkIGJyYW5jaCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fcmVtb3RlX3NldGJyYW5jaGVzX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA9PSAwKSB7CisJCWVycm9yKF8oIm5vIHJlbW90ZSBzcGVjaWZpZWQiKSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyhidWlsdGluX3JlbW90ZV9zZXRicmFuY2hlc191c2FnZSwgb3B0aW9ucyk7CisJfQorCWFyZ3ZbYXJnY10gPSBOVUxMOworCisJcmV0dXJuIHNldF9yZW1vdGVfYnJhbmNoZXMoYXJndlswXSwgYXJndiArIDEsIGFkZF9tb2RlKTsKK30KKworc3RhdGljIGludCBnZXRfdXJsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgcHVzaF9tb2RlID0gMCwgYWxsX21vZGUgPSAwOworCWNvbnN0IGNoYXIgKnJlbW90ZW5hbWUgPSBOVUxMOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwljb25zdCBjaGFyICoqdXJsOworCWludCB1cmxfbnI7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCdcMCcsICJwdXNoIiwgJnB1c2hfbW9kZSwKKwkJCSBOXygicXVlcnkgcHVzaCBVUkxzIHJhdGhlciB0aGFuIGZldGNoIFVSTHMiKSksCisJCU9QVF9CT09MKCdcMCcsICJhbGwiLCAmYWxsX21vZGUsCisJCQkgTl8oInJldHVybiBhbGwgVVJMcyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9nZXR1cmxfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcmVtb3RlX2dldHVybF91c2FnZSwgb3B0aW9ucyk7CisKKwlyZW1vdGVuYW1lID0gYXJndlswXTsKKworCWlmICghcmVtb3RlX2lzX2NvbmZpZ3VyZWQocmVtb3RlbmFtZSkpCisJCWRpZShfKCJObyBzdWNoIHJlbW90ZSAnJXMnIiksIHJlbW90ZW5hbWUpOworCXJlbW90ZSA9IHJlbW90ZV9nZXQocmVtb3RlbmFtZSk7CisKKwl1cmxfbnIgPSAwOworCWlmIChwdXNoX21vZGUpIHsKKwkJdXJsID0gcmVtb3RlLT5wdXNodXJsOworCQl1cmxfbnIgPSByZW1vdGUtPnB1c2h1cmxfbnI7CisJfQorCS8qIGVsc2UgZmV0Y2ggbW9kZSAqLworCisJLyogVXNlIHRoZSBmZXRjaCBVUkwgd2hlbiBubyBwdXNoIFVSTHMgd2VyZSBmb3VuZCBvciByZXF1ZXN0ZWQuICovCisJaWYgKCF1cmxfbnIpIHsKKwkJdXJsID0gcmVtb3RlLT51cmw7CisJCXVybF9uciA9IHJlbW90ZS0+dXJsX25yOworCX0KKworCWlmICghdXJsX25yKQorCQlkaWUoXygibm8gVVJMcyBjb25maWd1cmVkIGZvciByZW1vdGUgJyVzJyIpLCByZW1vdGVuYW1lKTsKKworCWlmIChhbGxfbW9kZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgdXJsX25yOyBpKyspCisJCQlwcmludGZfbG4oIiVzIiwgdXJsW2ldKTsKKwl9IGVsc2UgeworCQlwcmludGZfbG4oIiVzIiwgKnVybCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3VybChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IGksIHB1c2hfbW9kZSA9IDAsIGFkZF9tb2RlID0gMCwgZGVsZXRlX21vZGUgPSAwOworCWludCBtYXRjaGVzID0gMCwgbmVnYXRpdmVfbWF0Y2hlcyA9IDA7CisJY29uc3QgY2hhciAqcmVtb3RlbmFtZSA9IE5VTEw7CisJY29uc3QgY2hhciAqbmV3dXJsID0gTlVMTDsKKwljb25zdCBjaGFyICpvbGR1cmwgPSBOVUxMOworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwlyZWdleF90IG9sZF9yZWdleDsKKwljb25zdCBjaGFyICoqdXJsc2V0OworCWludCB1cmxzZXRfbnI7CisJc3RydWN0IHN0cmJ1ZiBuYW1lX2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgnXDAnLCAicHVzaCIsICZwdXNoX21vZGUsCisJCQkgTl8oIm1hbmlwdWxhdGUgcHVzaCBVUkxzIikpLAorCQlPUFRfQk9PTCgnXDAnLCAiYWRkIiwgJmFkZF9tb2RlLAorCQkJIE5fKCJhZGQgVVJMIikpLAorCQlPUFRfQk9PTCgnXDAnLCAiZGVsZXRlIiwgJmRlbGV0ZV9tb2RlLAorCQkJICAgIE5fKCJkZWxldGUgVVJMcyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV9zZXR1cmxfdXNhZ2UsCisJCQkgICAgIFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKworCWlmIChhZGRfbW9kZSAmJiBkZWxldGVfbW9kZSkKKwkJZGllKF8oIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIpKTsKKworCWlmIChhcmdjIDwgMyB8fCBhcmdjID4gNCB8fCAoKGFkZF9tb2RlIHx8IGRlbGV0ZV9tb2RlKSAmJiBhcmdjICE9IDMpKQorCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfc2V0dXJsX3VzYWdlLCBvcHRpb25zKTsKKworCXJlbW90ZW5hbWUgPSBhcmd2WzFdOworCW5ld3VybCA9IGFyZ3ZbMl07CisJaWYgKGFyZ2MgPiAzKQorCQlvbGR1cmwgPSBhcmd2WzNdOworCisJaWYgKGRlbGV0ZV9tb2RlKQorCQlvbGR1cmwgPSBuZXd1cmw7CisKKwlpZiAoIXJlbW90ZV9pc19jb25maWd1cmVkKHJlbW90ZW5hbWUpKQorCQlkaWUoXygiTm8gc3VjaCByZW1vdGUgJyVzJyIpLCByZW1vdGVuYW1lKTsKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KHJlbW90ZW5hbWUpOworCisJaWYgKHB1c2hfbW9kZSkgeworCQlzdHJidWZfYWRkZigmbmFtZV9idWYsICJyZW1vdGUuJXMucHVzaHVybCIsIHJlbW90ZW5hbWUpOworCQl1cmxzZXQgPSByZW1vdGUtPnB1c2h1cmw7CisJCXVybHNldF9uciA9IHJlbW90ZS0+cHVzaHVybF9ucjsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZigmbmFtZV9idWYsICJyZW1vdGUuJXMudXJsIiwgcmVtb3RlbmFtZSk7CisJCXVybHNldCA9IHJlbW90ZS0+dXJsOworCQl1cmxzZXRfbnIgPSByZW1vdGUtPnVybF9ucjsKKwl9CisKKwkvKiBTcGVjaWFsIGNhc2VzIHRoYXQgYWRkIG5ldyBlbnRyeS4gKi8KKwlpZiAoKCFvbGR1cmwgJiYgIWRlbGV0ZV9tb2RlKSB8fCBhZGRfbW9kZSkgeworCQlpZiAoYWRkX21vZGUpCisJCQlnaXRfY29uZmlnX3NldF9tdWx0aXZhcihuYW1lX2J1Zi5idWYsIG5ld3VybCwKKwkJCQkiXiQiLCAwKTsKKwkJZWxzZQorCQkJZ2l0X2NvbmZpZ19zZXQobmFtZV9idWYuYnVmLCBuZXd1cmwpOworCQlzdHJidWZfcmVsZWFzZSgmbmFtZV9idWYpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBPbGQgVVJMIHNwZWNpZmllZC4gRGVtYW5kIHRoYXQgb25lIG1hdGNoZXMuICovCisJaWYgKHJlZ2NvbXAoJm9sZF9yZWdleCwgb2xkdXJsLCBSRUdfRVhURU5ERUQpKQorCQlkaWUoXygiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIiksIG9sZHVybCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXJsc2V0X25yOyBpKyspCisJCWlmICghcmVnZXhlYygmb2xkX3JlZ2V4LCB1cmxzZXRbaV0sIDAsIE5VTEwsIDApKQorCQkJbWF0Y2hlcysrOworCQllbHNlCisJCQluZWdhdGl2ZV9tYXRjaGVzKys7CisJaWYgKCFkZWxldGVfbW9kZSAmJiAhbWF0Y2hlcykKKwkJZGllKF8oIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIpLCBvbGR1cmwpOworCWlmIChkZWxldGVfbW9kZSAmJiAhbmVnYXRpdmVfbWF0Y2hlcyAmJiAhcHVzaF9tb2RlKQorCQlkaWUoXygiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIikpOworCisJcmVnZnJlZSgmb2xkX3JlZ2V4KTsKKworCWlmICghZGVsZXRlX21vZGUpCisJCWdpdF9jb25maWdfc2V0X211bHRpdmFyKG5hbWVfYnVmLmJ1ZiwgbmV3dXJsLCBvbGR1cmwsIDApOworCWVsc2UKKwkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXIobmFtZV9idWYuYnVmLCBOVUxMLCBvbGR1cmwsIDEpOworCXJldHVybiAwOworfQorCitpbnQgY21kX3JlbW90ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19WRVJCT1NFKCZ2ZXJib3NlLCBOXygiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKwlpbnQgcmVzdWx0OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBidWlsdGluX3JlbW90ZV91c2FnZSwKKwkJUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisKKwlpZiAoYXJnYyA8IDEpCisJCXJlc3VsdCA9IHNob3dfYWxsKCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiYWRkIikpCisJCXJlc3VsdCA9IGFkZChhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJyZW5hbWUiKSkKKwkJcmVzdWx0ID0gbXYoYXJnYywgYXJndik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAicm0iKSB8fCAhc3RyY21wKGFyZ3ZbMF0sICJyZW1vdmUiKSkKKwkJcmVzdWx0ID0gcm0oYXJnYywgYXJndik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic2V0LWhlYWQiKSkKKwkJcmVzdWx0ID0gc2V0X2hlYWQoYXJnYywgYXJndik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic2V0LWJyYW5jaGVzIikpCisJCXJlc3VsdCA9IHNldF9icmFuY2hlcyhhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJnZXQtdXJsIikpCisJCXJlc3VsdCA9IGdldF91cmwoYXJnYywgYXJndik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic2V0LXVybCIpKQorCQlyZXN1bHQgPSBzZXRfdXJsKGFyZ2MsIGFyZ3YpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgInNob3ciKSkKKwkJcmVzdWx0ID0gc2hvdyhhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJwcnVuZSIpKQorCQlyZXN1bHQgPSBwcnVuZShhcmdjLCBhcmd2KTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMF0sICJ1cGRhdGUiKSkKKwkJcmVzdWx0ID0gdXBkYXRlKGFyZ2MsIGFyZ3YpOworCWVsc2UgeworCQllcnJvcihfKCJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIiksIGFyZ3ZbMF0pOworCQl1c2FnZV93aXRoX29wdGlvbnMoYnVpbHRpbl9yZW1vdGVfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCXJldHVybiByZXN1bHQgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVwYWNrLmMgYi9idWlsdGluL3JlcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NTYxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlcGFjay5jCkBAIC0wLDAgKzEsNDE0IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIGludCBkZWx0YV9iYXNlX29mZnNldCA9IDE7CitzdGF0aWMgaW50IHBhY2tfa2VwdF9vYmplY3RzID0gLTE7CitzdGF0aWMgaW50IHdyaXRlX2JpdG1hcHM7CitzdGF0aWMgY2hhciAqcGFja2RpciwgKnBhY2t0bXA7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBnaXRfcmVwYWNrX3VzYWdlW10gPSB7CisJTl8oImdpdCByZXBhY2sgWzxvcHRpb25zPl0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IHJlcGFja19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAicmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCIpKSB7CisJCWRlbHRhX2Jhc2Vfb2Zmc2V0ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAicmVwYWNrLnBhY2trZXB0b2JqZWN0cyIpKSB7CisJCXBhY2tfa2VwdF9vYmplY3RzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAicmVwYWNrLndyaXRlYml0bWFwcyIpIHx8CisJICAgICFzdHJjbXAodmFyLCAicGFjay53cml0ZWJpdG1hcHMiKSkgeworCQl3cml0ZV9iaXRtYXBzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKKy8qCisgKiBSZW1vdmUgdGVtcG9yYXJ5ICRHSVRfT0JKRUNUX0RJUkVDVE9SWS9wYWNrLy50bXAtJCQtcGFjay0qIGZpbGVzLgorICovCitzdGF0aWMgdm9pZCByZW1vdmVfdGVtcG9yYXJ5X2ZpbGVzKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgZGlybGVuLCBwcmVmaXhsZW47CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZTsKKworCWRpciA9IG9wZW5kaXIocGFja2Rpcik7CisJaWYgKCFkaXIpCisJCXJldHVybjsKKworCS8qIFBvaW50IGF0IHRoZSBzbGFzaCBhdCB0aGUgZW5kIG9mICIuLi4vb2JqZWN0cy9wYWNrLyIgKi8KKwlkaXJsZW4gPSBzdHJsZW4ocGFja2RpcikgKyAxOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcGFja3RtcCk7CisJLyogSG9sZCB0aGUgbGVuZ3RoIG9mICAiLnRtcC0lZC1wYWNrLSIgKi8KKwlwcmVmaXhsZW4gPSBidWYubGVuIC0gZGlybGVuOworCisJd2hpbGUgKChlID0gcmVhZGRpcihkaXIpKSkgeworCQlpZiAoc3RybmNtcChlLT5kX25hbWUsIGJ1Zi5idWYgKyBkaXJsZW4sIHByZWZpeGxlbikpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX3NldGxlbigmYnVmLCBkaXJsZW4pOworCQlzdHJidWZfYWRkc3RyKCZidWYsIGUtPmRfbmFtZSk7CisJCXVubGluayhidWYuYnVmKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3BhY2tfb25fc2lnbmFsKGludCBzaWdubykKK3sKKwlyZW1vdmVfdGVtcG9yYXJ5X2ZpbGVzKCk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKKwlyYWlzZShzaWdubyk7Cit9CisKKy8qCisgKiBBZGRzIGFsbCBwYWNrcyBoZXggc3RyaW5ncyB0byB0aGUgZm5hbWUgbGlzdCwgd2hpY2ggZG8gbm90CisgKiBoYXZlIGEgY29ycmVzcG9uZGluZyAua2VlcCBmaWxlLgorICovCitzdGF0aWMgdm9pZCBnZXRfbm9uX2tlcHRfcGFja19maWxlbmFtZXMoc3RydWN0IHN0cmluZ19saXN0ICpmbmFtZV9saXN0KQoreworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmU7CisJY2hhciAqZm5hbWU7CisKKwlpZiAoIShkaXIgPSBvcGVuZGlyKHBhY2tkaXIpKSkKKwkJcmV0dXJuOworCisJd2hpbGUgKChlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCXNpemVfdCBsZW47CisJCWlmICghc3RyaXBfc3VmZml4KGUtPmRfbmFtZSwgIi5wYWNrIiwgJmxlbikpCisJCQljb250aW51ZTsKKworCQlmbmFtZSA9IHhtZW1kdXB6KGUtPmRfbmFtZSwgbGVuKTsKKworCQlpZiAoIWZpbGVfZXhpc3RzKG1rcGF0aCgiJXMvJXMua2VlcCIsIHBhY2tkaXIsIGZuYW1lKSkpCisJCQlzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAoZm5hbWVfbGlzdCwgZm5hbWUpOworCQllbHNlCisJCQlmcmVlKGZuYW1lKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3JlZHVuZGFudF9wYWNrKGNvbnN0IGNoYXIgKmRpcl9uYW1lLCBjb25zdCBjaGFyICpiYXNlX25hbWUpCit7CisJY29uc3QgY2hhciAqZXh0c1tdID0geyIucGFjayIsICIuaWR4IiwgIi5rZWVwIiwgIi5iaXRtYXAifTsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBwbGVuOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLyVzIiwgZGlyX25hbWUsIGJhc2VfbmFtZSk7CisJcGxlbiA9IGJ1Zi5sZW47CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShleHRzKTsgaSsrKSB7CisJCXN0cmJ1Zl9zZXRsZW4oJmJ1ZiwgcGxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgZXh0c1tpXSk7CisJCXVubGluayhidWYuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKKyNkZWZpbmUgQUxMX0lOVE9fT05FIDEKKyNkZWZpbmUgTE9PU0VOX1VOUkVBQ0hBQkxFIDIKKworaW50IGNtZF9yZXBhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQgb3B0aW9uYWw6MTsKKwl9IGV4dHNbXSA9IHsKKwkJeyIucGFjayJ9LAorCQl7Ii5pZHgifSwKKwkJeyIuYml0bWFwIiwgMX0sCisJfTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IHN0cmluZ19saXN0IG5hbWVzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IHJvbGxiYWNrID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhpc3RpbmdfcGFja3MgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZXh0LCByZXQsIGZhaWxlZDsKKwlGSUxFICpvdXQ7CisKKwkvKiB2YXJpYWJsZXMgdG8gYmUgZmlsbGVkIGJ5IG9wdGlvbiBwYXJzaW5nICovCisJaW50IHBhY2tfZXZlcnl0aGluZyA9IDA7CisJaW50IGRlbGV0ZV9yZWR1bmRhbnQgPSAwOworCWNvbnN0IGNoYXIgKnVucGFja191bnJlYWNoYWJsZSA9IE5VTEw7CisJY29uc3QgY2hhciAqd2luZG93ID0gTlVMTCwgKndpbmRvd19tZW1vcnkgPSBOVUxMOworCWNvbnN0IGNoYXIgKmRlcHRoID0gTlVMTDsKKwljb25zdCBjaGFyICptYXhfcGFja19zaXplID0gTlVMTDsKKwlpbnQgbm9fcmV1c2VfZGVsdGEgPSAwLCBub19yZXVzZV9vYmplY3QgPSAwOworCWludCBub191cGRhdGVfc2VydmVyX2luZm8gPSAwOworCWludCBxdWlldCA9IDA7CisJaW50IGxvY2FsID0gMDsKKworCXN0cnVjdCBvcHRpb24gYnVpbHRpbl9yZXBhY2tfb3B0aW9uc1tdID0geworCQlPUFRfQklUKCdhJywgTlVMTCwgJnBhY2tfZXZlcnl0aGluZywKKwkJCQlOXygicGFjayBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHBhY2siKSwgQUxMX0lOVE9fT05FKSwKKwkJT1BUX0JJVCgnQScsIE5VTEwsICZwYWNrX2V2ZXJ5dGhpbmcsCisJCQkJTl8oInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiKSwKKwkJCQkgICBMT09TRU5fVU5SRUFDSEFCTEUgfCBBTExfSU5UT19PTkUpLAorCQlPUFRfQk9PTCgnZCcsIE5VTEwsICZkZWxldGVfcmVkdW5kYW50LAorCQkJCU5fKCJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiKSksCisJCU9QVF9CT09MKCdmJywgTlVMTCwgJm5vX3JldXNlX2RlbHRhLAorCQkJCU5fKCJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIpKSwKKwkJT1BUX0JPT0woJ0YnLCBOVUxMLCAmbm9fcmV1c2Vfb2JqZWN0LAorCQkJCU5fKCJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiKSksCisJCU9QVF9CT09MKCduJywgTlVMTCwgJm5vX3VwZGF0ZV9zZXJ2ZXJfaW5mbywKKwkJCQlOXygiZG8gbm90IHJ1biBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIikpLAorCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImJlIHF1aWV0IikpLAorCQlPUFRfQk9PTCgnbCcsICJsb2NhbCIsICZsb2NhbCwKKwkJCQlOXygicGFzcyAtLWxvY2FsIHRvIGdpdC1wYWNrLW9iamVjdHMiKSksCisJCU9QVF9CT09MKCdiJywgIndyaXRlLWJpdG1hcC1pbmRleCIsICZ3cml0ZV9iaXRtYXBzLAorCQkJCU5fKCJ3cml0ZSBiaXRtYXAgaW5kZXgiKSksCisJCU9QVF9TVFJJTkcoMCwgInVucGFjay11bnJlYWNoYWJsZSIsICZ1bnBhY2tfdW5yZWFjaGFibGUsIE5fKCJhcHByb3hpZGF0ZSIpLAorCQkJCU5fKCJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIikpLAorCQlPUFRfU1RSSU5HKDAsICJ3aW5kb3ciLCAmd2luZG93LCBOXygibiIpLAorCQkJCU5fKCJzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCBmb3IgZGVsdGEgY29tcHJlc3Npb24iKSksCisJCU9QVF9TVFJJTkcoMCwgIndpbmRvdy1tZW1vcnkiLCAmd2luZG93X21lbW9yeSwgTl8oImJ5dGVzIiksCisJCQkJTl8oInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IikpLAorCQlPUFRfU1RSSU5HKDAsICJkZXB0aCIsICZkZXB0aCwgTl8oIm4iKSwKKwkJCQlOXygibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIikpLAorCQlPUFRfU1RSSU5HKDAsICJtYXgtcGFjay1zaXplIiwgJm1heF9wYWNrX3NpemUsIE5fKCJieXRlcyIpLAorCQkJCU5fKCJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIpKSwKKwkJT1BUX0JPT0woMCwgInBhY2sta2VwdC1vYmplY3RzIiwgJnBhY2tfa2VwdF9vYmplY3RzLAorCQkJCU5fKCJyZXBhY2sgb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcocmVwYWNrX2NvbmZpZywgTlVMTCk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIGJ1aWx0aW5fcmVwYWNrX29wdGlvbnMsCisJCQkJZ2l0X3JlcGFja191c2FnZSwgMCk7CisKKwlpZiAoZGVsZXRlX3JlZHVuZGFudCAmJiByZXBvc2l0b3J5X2Zvcm1hdF9wcmVjaW91c19vYmplY3RzKQorCQlkaWUoXygiY2Fubm90IGRlbGV0ZSBwYWNrcyBpbiBhIHByZWNpb3VzLW9iamVjdHMgcmVwbyIpKTsKKworCWlmIChwYWNrX2tlcHRfb2JqZWN0cyA8IDApCisJCXBhY2tfa2VwdF9vYmplY3RzID0gd3JpdGVfYml0bWFwczsKKworCXBhY2tkaXIgPSBta3BhdGhkdXAoIiVzL3BhY2siLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwlwYWNrdG1wID0gbWtwYXRoZHVwKCIlcy8udG1wLSVkLXBhY2siLCBwYWNrZGlyLCAoaW50KWdldHBpZCgpKTsKKworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHJlbW92ZV9wYWNrX29uX3NpZ25hbCk7CisKKwlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAicGFjay1vYmplY3RzIik7CisJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0ta2VlcC10cnVlLXBhcmVudHMiKTsKKwlpZiAoIXBhY2tfa2VwdF9vYmplY3RzKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1ob25vci1wYWNrLWtlZXAiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1ub24tZW1wdHkiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1hbGwiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1yZWZsb2ciKTsKKwlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1pbmRleGVkLW9iamVjdHMiKTsKKwlpZiAod2luZG93KQorCQlhcmd2X2FycmF5X3B1c2hmKCZjbWQuYXJncywgIi0td2luZG93PSVzIiwgd2luZG93KTsKKwlpZiAod2luZG93X21lbW9yeSkKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLmFyZ3MsICItLXdpbmRvdy1tZW1vcnk9JXMiLCB3aW5kb3dfbWVtb3J5KTsKKwlpZiAoZGVwdGgpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNtZC5hcmdzLCAiLS1kZXB0aD0lcyIsIGRlcHRoKTsKKwlpZiAobWF4X3BhY2tfc2l6ZSkKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLmFyZ3MsICItLW1heC1wYWNrLXNpemU9JXMiLCBtYXhfcGFja19zaXplKTsKKwlpZiAobm9fcmV1c2VfZGVsdGEpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNtZC5hcmdzLCAiLS1uby1yZXVzZS1kZWx0YSIpOworCWlmIChub19yZXVzZV9vYmplY3QpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNtZC5hcmdzLCAiLS1uby1yZXVzZS1vYmplY3QiKTsKKwlpZiAod3JpdGVfYml0bWFwcykKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0td3JpdGUtYml0bWFwLWluZGV4Iik7CisKKwlpZiAocGFja19ldmVyeXRoaW5nICYgQUxMX0lOVE9fT05FKSB7CisJCWdldF9ub25fa2VwdF9wYWNrX2ZpbGVuYW1lcygmZXhpc3RpbmdfcGFja3MpOworCisJCWlmIChleGlzdGluZ19wYWNrcy5uciAmJiBkZWxldGVfcmVkdW5kYW50KSB7CisJCQlpZiAodW5wYWNrX3VucmVhY2hhYmxlKSB7CisJCQkJYXJndl9hcnJheV9wdXNoZigmY21kLmFyZ3MsCisJCQkJCQkiLS11bnBhY2stdW5yZWFjaGFibGU9JXMiLAorCQkJCQkJdW5wYWNrX3VucmVhY2hhYmxlKTsKKwkJCQlhcmd2X2FycmF5X3B1c2goJmNtZC5lbnZfYXJyYXksICJHSVRfUkVGX1BBUkFOT0lBPTEiKTsKKwkJCX0gZWxzZSBpZiAocGFja19ldmVyeXRoaW5nICYgTE9PU0VOX1VOUkVBQ0hBQkxFKSB7CisJCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywKKwkJCQkJCSItLXVucGFjay11bnJlYWNoYWJsZSIpOworCQkJfSBlbHNlIHsKKwkJCQlhcmd2X2FycmF5X3B1c2goJmNtZC5lbnZfYXJyYXksICJHSVRfUkVGX1BBUkFOT0lBPTEiKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLXVucGFja2VkIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLWluY3JlbWVudGFsIik7CisJfQorCisJaWYgKGxvY2FsKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAgIi0tbG9jYWwiKTsKKwlpZiAocXVpZXQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICAiLS1xdWlldCIpOworCWlmIChkZWx0YV9iYXNlX29mZnNldCkKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgICItLWRlbHRhLWJhc2Utb2Zmc2V0Iik7CisKKwlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCBwYWNrdG1wKTsKKworCWNtZC5naXRfY21kID0gMTsKKwljbWQub3V0ID0gLTE7CisJY21kLm5vX3N0ZGluID0gMTsKKworCXJldCA9IHN0YXJ0X2NvbW1hbmQoJmNtZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW91dCA9IHhmZG9wZW4oY21kLm91dCwgInIiKTsKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIG91dCwgJ1xuJykgIT0gRU9GKSB7CisJCWlmIChsaW5lLmxlbiAhPSA0MCkKKwkJCWRpZSgicmVwYWNrOiBFeHBlY3RpbmcgNDAgY2hhcmFjdGVyIHNoYTEgbGluZXMgb25seSBmcm9tIHBhY2stb2JqZWN0cy4iKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZuYW1lcywgbGluZS5idWYpOworCX0KKwlmY2xvc2Uob3V0KTsKKwlyZXQgPSBmaW5pc2hfY29tbWFuZCgmY21kKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFuYW1lcy5uciAmJiAhcXVpZXQpCisJCXByaW50ZigiTm90aGluZyBuZXcgdG8gcGFjay5cbiIpOworCisJLyoKKwkgKiBPayB3ZSBoYXZlIHByZXBhcmVkIGFsbCBuZXcgcGFja2ZpbGVzLgorCSAqIEZpcnN0IHNlZSBpZiB0aGVyZSBhcmUgcGFja3Mgb2YgdGhlIHNhbWUgbmFtZSBhbmQgaWYgc28KKwkgKiBpZiB3ZSBjYW4gbW92ZSB0aGVtIG91dCBvZiB0aGUgd2F5ICh0aGlzIGNhbiBoYXBwZW4gaWYgd2UKKwkgKiByZXBhY2tlZCBpbW1lZGlhdGVseSBhZnRlciBwYWNraW5nIGZ1bGx5LgorCSAqLworCWZhaWxlZCA9IDA7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmbmFtZXMpIHsKKwkJZm9yIChleHQgPSAwOyBleHQgPCBBUlJBWV9TSVpFKGV4dHMpOyBleHQrKykgeworCQkJY2hhciAqZm5hbWUsICpmbmFtZV9vbGQ7CisJCQlmbmFtZSA9IG1rcGF0aGR1cCgiJXMvcGFjay0lcyVzIiwgcGFja2RpciwKKwkJCQkJCWl0ZW0tPnN0cmluZywgZXh0c1tleHRdLm5hbWUpOworCQkJaWYgKCFmaWxlX2V4aXN0cyhmbmFtZSkpIHsKKwkJCQlmcmVlKGZuYW1lKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJZm5hbWVfb2xkID0gbWtwYXRoZHVwKCIlcy9vbGQtJXMlcyIsIHBhY2tkaXIsCisJCQkJCQlpdGVtLT5zdHJpbmcsIGV4dHNbZXh0XS5uYW1lKTsKKwkJCWlmIChmaWxlX2V4aXN0cyhmbmFtZV9vbGQpKQorCQkJCWlmICh1bmxpbmsoZm5hbWVfb2xkKSkKKwkJCQkJZmFpbGVkID0gMTsKKworCQkJaWYgKCFmYWlsZWQgJiYgcmVuYW1lKGZuYW1lLCBmbmFtZV9vbGQpKSB7CisJCQkJZnJlZShmbmFtZSk7CisJCQkJZnJlZShmbmFtZV9vbGQpOworCQkJCWZhaWxlZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmcm9sbGJhY2ssIGZuYW1lKTsKKwkJCQlmcmVlKGZuYW1lX29sZCk7CisJCQl9CisJCX0KKwkJaWYgKGZhaWxlZCkKKwkJCWJyZWFrOworCX0KKwlpZiAoZmFpbGVkKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCByb2xsYmFja19mYWlsdXJlID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJnJvbGxiYWNrKSB7CisJCQljaGFyICpmbmFtZSwgKmZuYW1lX29sZDsKKwkJCWZuYW1lID0gbWtwYXRoZHVwKCIlcy8lcyIsIHBhY2tkaXIsIGl0ZW0tPnN0cmluZyk7CisJCQlmbmFtZV9vbGQgPSBta3BhdGhkdXAoIiVzL29sZC0lcyIsIHBhY2tkaXIsIGl0ZW0tPnN0cmluZyk7CisJCQlpZiAocmVuYW1lKGZuYW1lX29sZCwgZm5hbWUpKQorCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmcm9sbGJhY2tfZmFpbHVyZSwgZm5hbWUpOworCQkJZnJlZShmbmFtZSk7CisJCQlmcmVlKGZuYW1lX29sZCk7CisJCX0KKworCQlpZiAocm9sbGJhY2tfZmFpbHVyZS5ucikgeworCQkJaW50IGk7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiV0FSTklORzogU29tZSBwYWNrcyBpbiB1c2UgaGF2ZSBiZWVuIHJlbmFtZWQgYnlcbiIKKwkJCQkiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG9cbiIKKwkJCQkiV0FSTklORzogcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZVxuIgorCQkJCSJXQVJOSU5HOiBmaWxlLiAgQnV0IHRoZSBvcGVyYXRpb24gZmFpbGVkLCBhbmQgdGhlXG4iCisJCQkJIldBUk5JTkc6IGF0dGVtcHQgdG8gcmVuYW1lIHRoZW0gYmFjayB0byB0aGVpclxuIgorCQkJCSJXQVJOSU5HOiBvcmlnaW5hbCBuYW1lcyBhbHNvIGZhaWxlZC5cbiIKKwkJCQkiV0FSTklORzogUGxlYXNlIHJlbmFtZSB0aGVtIGluICVzIG1hbnVhbGx5OlxuIiwgcGFja2Rpcik7CisJCQlmb3IgKGkgPSAwOyBpIDwgcm9sbGJhY2tfZmFpbHVyZS5ucjsgaSsrKQorCQkJCWZwcmludGYoc3RkZXJyLCAiV0FSTklORzogICBvbGQtJXMgLT4gJXNcbiIsCisJCQkJCXJvbGxiYWNrX2ZhaWx1cmUuaXRlbXNbaV0uc3RyaW5nLAorCQkJCQlyb2xsYmFja19mYWlsdXJlLml0ZW1zW2ldLnN0cmluZyk7CisJCX0KKwkJZXhpdCgxKTsKKwl9CisKKwkvKiBOb3cgdGhlIG9uZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBvdXQgb2YgdGhlIHdheS4uLiAqLworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJm5hbWVzKSB7CisJCWZvciAoZXh0ID0gMDsgZXh0IDwgQVJSQVlfU0laRShleHRzKTsgZXh0KyspIHsKKwkJCWNoYXIgKmZuYW1lLCAqZm5hbWVfb2xkOworCQkJc3RydWN0IHN0YXQgc3RhdGJ1ZmZlcjsKKwkJCWludCBleGlzdHMgPSAwOworCQkJZm5hbWUgPSBta3BhdGhkdXAoIiVzL3BhY2stJXMlcyIsCisJCQkJCXBhY2tkaXIsIGl0ZW0tPnN0cmluZywgZXh0c1tleHRdLm5hbWUpOworCQkJZm5hbWVfb2xkID0gbWtwYXRoZHVwKCIlcy0lcyVzIiwKKwkJCQkJcGFja3RtcCwgaXRlbS0+c3RyaW5nLCBleHRzW2V4dF0ubmFtZSk7CisJCQlpZiAoIXN0YXQoZm5hbWVfb2xkLCAmc3RhdGJ1ZmZlcikpIHsKKwkJCQlzdGF0YnVmZmVyLnN0X21vZGUgJj0gfihTX0lXVVNSIHwgU19JV0dSUCB8IFNfSVdPVEgpOworCQkJCWNobW9kKGZuYW1lX29sZCwgc3RhdGJ1ZmZlci5zdF9tb2RlKTsKKwkJCQlleGlzdHMgPSAxOworCQkJfQorCQkJaWYgKGV4aXN0cyB8fCAhZXh0c1tleHRdLm9wdGlvbmFsKSB7CisJCQkJaWYgKHJlbmFtZShmbmFtZV9vbGQsIGZuYW1lKSkKKwkJCQkJZGllX2Vycm5vKF8oInJlbmFtaW5nICclcycgZmFpbGVkIiksIGZuYW1lX29sZCk7CisJCQl9CisJCQlmcmVlKGZuYW1lKTsKKwkJCWZyZWUoZm5hbWVfb2xkKTsKKwkJfQorCX0KKworCS8qIFJlbW92ZSB0aGUgIm9sZC0iIGZpbGVzICovCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCAmbmFtZXMpIHsKKwkJZm9yIChleHQgPSAwOyBleHQgPCBBUlJBWV9TSVpFKGV4dHMpOyBleHQrKykgeworCQkJY2hhciAqZm5hbWU7CisJCQlmbmFtZSA9IG1rcGF0aGR1cCgiJXMvb2xkLSVzJXMiLAorCQkJCQkgIHBhY2tkaXIsCisJCQkJCSAgaXRlbS0+c3RyaW5nLAorCQkJCQkgIGV4dHNbZXh0XS5uYW1lKTsKKwkJCWlmIChyZW1vdmVfcGF0aChmbmFtZSkpCisJCQkJd2FybmluZyhfKCJyZW1vdmluZyAnJXMnIGZhaWxlZCIpLCBmbmFtZSk7CisJCQlmcmVlKGZuYW1lKTsKKwkJfQorCX0KKworCS8qIEVuZCBvZiBwYWNrIHJlcGxhY2VtZW50LiAqLworCisJaWYgKGRlbGV0ZV9yZWR1bmRhbnQpIHsKKwkJaW50IG9wdHMgPSAwOworCQlzdHJpbmdfbGlzdF9zb3J0KCZuYW1lcyk7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmV4aXN0aW5nX3BhY2tzKSB7CisJCQljaGFyICpzaGExOworCQkJc2l6ZV90IGxlbiA9IHN0cmxlbihpdGVtLT5zdHJpbmcpOworCQkJaWYgKGxlbiA8IDQwKQorCQkJCWNvbnRpbnVlOworCQkJc2hhMSA9IGl0ZW0tPnN0cmluZyArIGxlbiAtIDQwOworCQkJaWYgKCFzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZuYW1lcywgc2hhMSkpCisJCQkJcmVtb3ZlX3JlZHVuZGFudF9wYWNrKHBhY2tkaXIsIGl0ZW0tPnN0cmluZyk7CisJCX0KKwkJaWYgKCFxdWlldCAmJiBpc2F0dHkoMikpCisJCQlvcHRzIHw9IFBSVU5FX1BBQ0tFRF9WRVJCT1NFOworCQlwcnVuZV9wYWNrZWRfb2JqZWN0cyhvcHRzKTsKKwl9CisKKwlpZiAoIW5vX3VwZGF0ZV9zZXJ2ZXJfaW5mbykKKwkJdXBkYXRlX3NlcnZlcl9pbmZvKDApOworCXJlbW92ZV90ZW1wb3JhcnlfZmlsZXMoKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbmFtZXMsIDApOworCXN0cmluZ19saXN0X2NsZWFyKCZyb2xsYmFjaywgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmV4aXN0aW5nX3BhY2tzLCAwKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVwbGFjZS5jIGIvYnVpbHRpbi9yZXBsYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIzYzQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmVwbGFjZS5jCkBAIC0wLDAgKzEsNDk4IEBACisvKgorICogQnVpbHRpbiAiZ2l0IHJlcGxhY2UiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IENocmlzdGlhbiBDb3VkZXIgPGNocmlzY29vbEB0dXhmYW1pbHkub3JnPgorICoKKyAqIEJhc2VkIG9uIGJ1aWx0aW4vdGFnLmMgYnkgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4KKyAqIGFuZCBDYXJsb3MgUmljYSA8amFzYW1wbGVyQGdtYWlsLmNvbT4gdGhhdCB3YXMgaXRzZWxmIGJhc2VkIG9uCisgKiBnaXQtdGFnLnNoIGFuZCBta3RhZy5jIGJ5IExpbnVzIFRvcnZhbGRzLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAidGFnLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ2l0X3JlcGxhY2VfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IiksCisJTl8oImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmplY3Q+IiksCisJTl8oImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIiksCisJTl8oImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIiksCisJTl8oImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIpLAorCU5VTEwKK307CisKK2VudW0gcmVwbGFjZV9mb3JtYXQgeworCVJFUExBQ0VfRk9STUFUX1NIT1JULAorCVJFUExBQ0VfRk9STUFUX01FRElVTSwKKwlSRVBMQUNFX0ZPUk1BVF9MT05HCit9OworCitzdHJ1Y3Qgc2hvd19kYXRhIHsKKwljb25zdCBjaGFyICpwYXR0ZXJuOworCWVudW0gcmVwbGFjZV9mb3JtYXQgZm9ybWF0OworfTsKKworc3RhdGljIGludCBzaG93X3JlZmVyZW5jZShjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzaG93X2RhdGEgKmRhdGEgPSBjYl9kYXRhOworCisJaWYgKCF3aWxkbWF0Y2goZGF0YS0+cGF0dGVybiwgcmVmbmFtZSwgMCwgTlVMTCkpIHsKKwkJaWYgKGRhdGEtPmZvcm1hdCA9PSBSRVBMQUNFX0ZPUk1BVF9TSE9SVCkKKwkJCXByaW50ZigiJXNcbiIsIHJlZm5hbWUpOworCQllbHNlIGlmIChkYXRhLT5mb3JtYXQgPT0gUkVQTEFDRV9GT1JNQVRfTUVESVVNKQorCQkJcHJpbnRmKCIlcyAtPiAlc1xuIiwgcmVmbmFtZSwgb2lkX3RvX2hleChvaWQpKTsKKwkJZWxzZSB7IC8qIGRhdGEtPmZvcm1hdCA9PSBSRVBMQUNFX0ZPUk1BVF9MT05HICovCisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9iamVjdDsKKwkJCWVudW0gb2JqZWN0X3R5cGUgb2JqX3R5cGUsIHJlcGxfdHlwZTsKKworCQkJaWYgKGdldF9zaGExKHJlZm5hbWUsIG9iamVjdC5oYXNoKSkKKwkJCQlyZXR1cm4gZXJyb3IoIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiwgcmVmbmFtZSk7CisKKwkJCW9ial90eXBlID0gc2hhMV9vYmplY3RfaW5mbyhvYmplY3QuaGFzaCwgTlVMTCk7CisJCQlyZXBsX3R5cGUgPSBzaGExX29iamVjdF9pbmZvKG9pZC0+aGFzaCwgTlVMTCk7CisKKwkJCXByaW50ZigiJXMgKCVzKSAtPiAlcyAoJXMpXG4iLCByZWZuYW1lLCB0eXBlbmFtZShvYmpfdHlwZSksCisJCQkgICAgICAgb2lkX3RvX2hleChvaWQpLCB0eXBlbmFtZShyZXBsX3R5cGUpKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpc3RfcmVwbGFjZV9yZWZzKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwlzdHJ1Y3Qgc2hvd19kYXRhIGRhdGE7CisKKwlpZiAocGF0dGVybiA9PSBOVUxMKQorCQlwYXR0ZXJuID0gIioiOworCWRhdGEucGF0dGVybiA9IHBhdHRlcm47CisKKwlpZiAoZm9ybWF0ID09IE5VTEwgfHwgKmZvcm1hdCA9PSAnXDAnIHx8ICFzdHJjbXAoZm9ybWF0LCAic2hvcnQiKSkKKwkJZGF0YS5mb3JtYXQgPSBSRVBMQUNFX0ZPUk1BVF9TSE9SVDsKKwllbHNlIGlmICghc3RyY21wKGZvcm1hdCwgIm1lZGl1bSIpKQorCQlkYXRhLmZvcm1hdCA9IFJFUExBQ0VfRk9STUFUX01FRElVTTsKKwllbHNlIGlmICghc3RyY21wKGZvcm1hdCwgImxvbmciKSkKKwkJZGF0YS5mb3JtYXQgPSBSRVBMQUNFX0ZPUk1BVF9MT05HOworCWVsc2UKKwkJZGllKCJpbnZhbGlkIHJlcGxhY2UgZm9ybWF0ICclcydcbiIKKwkJICAgICJ2YWxpZCBmb3JtYXRzIGFyZSAnc2hvcnQnLCAnbWVkaXVtJyBhbmQgJ2xvbmcnXG4iLAorCQkgICAgZm9ybWF0KTsKKworCWZvcl9lYWNoX3JlcGxhY2VfcmVmKHNob3dfcmVmZXJlbmNlLCAodm9pZCAqKSZkYXRhKTsKKworCXJldHVybiAwOworfQorCit0eXBlZGVmIGludCAoKmVhY2hfcmVwbGFjZV9uYW1lX2ZuKShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpyZWYsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitzdGF0aWMgaW50IGZvcl9lYWNoX3JlcGxhY2VfbmFtZShjb25zdCBjaGFyICoqYXJndiwgZWFjaF9yZXBsYWNlX25hbWVfZm4gZm4pCit7CisJY29uc3QgY2hhciAqKnAsICpmdWxsX2hleDsKKwljaGFyIHJlZltQQVRIX01BWF07CisJaW50IGhhZF9lcnJvciA9IDA7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWZvciAocCA9IGFyZ3Y7ICpwOyBwKyspIHsKKwkJaWYgKGdldF9zaGExKCpwLCBzaGExKSkgeworCQkJZXJyb3IoIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIiwgKnApOworCQkJaGFkX2Vycm9yID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZ1bGxfaGV4ID0gc2hhMV90b19oZXgoc2hhMSk7CisJCXNucHJpbnRmKHJlZiwgc2l6ZW9mKHJlZiksICIlcyVzIiwgZ2l0X3JlcGxhY2VfcmVmX2Jhc2UsIGZ1bGxfaGV4KTsKKwkJLyogcmVhZF9yZWYoKSBtYXkgcmV1c2UgdGhlIGJ1ZmZlciAqLworCQlmdWxsX2hleCA9IHJlZiArIHN0cmxlbihnaXRfcmVwbGFjZV9yZWZfYmFzZSk7CisJCWlmIChyZWFkX3JlZihyZWYsIHNoYTEpKSB7CisJCQllcnJvcigicmVwbGFjZSByZWYgJyVzJyBub3QgZm91bmQuIiwgZnVsbF9oZXgpOworCQkJaGFkX2Vycm9yID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmbihmdWxsX2hleCwgcmVmLCBzaGExKSkKKwkJCWhhZF9lcnJvciA9IDE7CisJfQorCXJldHVybiBoYWRfZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX3JlcGxhY2VfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZiwKKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaWYgKGRlbGV0ZV9yZWYocmVmLCBzaGExLCAwKSkKKwkJcmV0dXJuIDE7CisJcHJpbnRmKCJEZWxldGVkIHJlcGxhY2UgcmVmICclcydcbiIsIG5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjaGVja19yZWZfdmFsaWQodW5zaWduZWQgY2hhciBvYmplY3RbMjBdLAorCQkJICAgIHVuc2lnbmVkIGNoYXIgcHJldlsyMF0sCisJCQkgICAgY2hhciAqcmVmLAorCQkJICAgIGludCByZWZfc2l6ZSwKKwkJCSAgICBpbnQgZm9yY2UpCit7CisJaWYgKHNucHJpbnRmKHJlZiwgcmVmX3NpemUsCisJCSAgICAgIiVzJXMiLCBnaXRfcmVwbGFjZV9yZWZfYmFzZSwKKwkJICAgICBzaGExX3RvX2hleChvYmplY3QpKSA+IHJlZl9zaXplIC0gMSkKKwkJZGllKCJyZXBsYWNlIHJlZiBuYW1lIHRvbyBsb25nOiAlLipzLi4uIiwgNTAsIHJlZik7CisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZiwgMCkpCisJCWRpZSgiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYgbmFtZS4iLCByZWYpOworCisJaWYgKHJlYWRfcmVmKHJlZiwgcHJldikpCisJCWhhc2hjbHIocHJldik7CisJZWxzZSBpZiAoIWZvcmNlKQorCQlkaWUoInJlcGxhY2UgcmVmICclcycgYWxyZWFkeSBleGlzdHMiLCByZWYpOworfQorCitzdGF0aWMgaW50IHJlcGxhY2Vfb2JqZWN0X3NoYTEoY29uc3QgY2hhciAqb2JqZWN0X3JlZiwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIG9iamVjdFsyMF0sCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVwbGFjZV9yZWYsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciByZXBsWzIwXSwKKwkJCSAgICAgICBpbnQgZm9yY2UpCit7CisJdW5zaWduZWQgY2hhciBwcmV2WzIwXTsKKwllbnVtIG9iamVjdF90eXBlIG9ial90eXBlLCByZXBsX3R5cGU7CisJY2hhciByZWZbUEFUSF9NQVhdOworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisKKwlvYmpfdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8ob2JqZWN0LCBOVUxMKTsKKwlyZXBsX3R5cGUgPSBzaGExX29iamVjdF9pbmZvKHJlcGwsIE5VTEwpOworCWlmICghZm9yY2UgJiYgb2JqX3R5cGUgIT0gcmVwbF90eXBlKQorCQlkaWUoIk9iamVjdHMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlLlxuIgorCQkgICAgIiclcycgcG9pbnRzIHRvIGEgcmVwbGFjZWQgb2JqZWN0IG9mIHR5cGUgJyVzJ1xuIgorCQkgICAgIndoaWxlICclcycgcG9pbnRzIHRvIGEgcmVwbGFjZW1lbnQgb2JqZWN0IG9mIHR5cGUgJyVzJy4iLAorCQkgICAgb2JqZWN0X3JlZiwgdHlwZW5hbWUob2JqX3R5cGUpLAorCQkgICAgcmVwbGFjZV9yZWYsIHR5cGVuYW1lKHJlcGxfdHlwZSkpOworCisJY2hlY2tfcmVmX3ZhbGlkKG9iamVjdCwgcHJldiwgcmVmLCBzaXplb2YocmVmKSwgZm9yY2UpOworCisJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0cmFuc2FjdGlvbiB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWYsIHJlcGwsIHByZXYsCisJCQkJICAgMCwgTlVMTCwgJmVycikgfHwKKwkgICAgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXBsYWNlX29iamVjdChjb25zdCBjaGFyICpvYmplY3RfcmVmLCBjb25zdCBjaGFyICpyZXBsYWNlX3JlZiwgaW50IGZvcmNlKQoreworCXVuc2lnbmVkIGNoYXIgb2JqZWN0WzIwXSwgcmVwbFsyMF07CisKKwlpZiAoZ2V0X3NoYTEob2JqZWN0X3JlZiwgb2JqZWN0KSkKKwkJZGllKCJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIsIG9iamVjdF9yZWYpOworCWlmIChnZXRfc2hhMShyZXBsYWNlX3JlZiwgcmVwbCkpCisJCWRpZSgiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iLCByZXBsYWNlX3JlZik7CisKKwlyZXR1cm4gcmVwbGFjZV9vYmplY3Rfc2hhMShvYmplY3RfcmVmLCBvYmplY3QsIHJlcGxhY2VfcmVmLCByZXBsLCBmb3JjZSk7Cit9CisKKy8qCisgKiBXcml0ZSB0aGUgY29udGVudHMgb2YgdGhlIG9iamVjdCBuYW1lZCBieSAic2hhMSIgdG8gdGhlIGZpbGUgImZpbGVuYW1lIi4KKyAqIElmICJyYXciIGlzIHRydWUsIHRoZW4gdGhlIG9iamVjdCdzIHJhdyBjb250ZW50cyBhcmUgcHJpbnRlZCBhY2NvcmRpbmcgdG8KKyAqICJ0eXBlIi4gT3RoZXJ3aXNlLCB3ZSBwcmV0dHktcHJpbnQgdGhlIGNvbnRlbnRzIGZvciBodW1hbiBlZGl0aW5nLgorICovCitzdGF0aWMgdm9pZCBleHBvcnRfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSAgaW50IHJhdywgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY21kID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBmZDsKKworCWZkID0gb3BlbihmaWxlbmFtZSwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY2Nik7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZyIsIGZpbGVuYW1lKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLW5vLXJlcGxhY2Utb2JqZWN0cyIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICJjYXQtZmlsZSIpOworCWlmIChyYXcpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIHR5cGVuYW1lKHR5cGUpKTsKKwllbHNlCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItcCIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwljbWQuZ2l0X2NtZCA9IDE7CisJY21kLm91dCA9IGZkOworCisJaWYgKHJ1bl9jb21tYW5kKCZjbWQpKQorCQlkaWUoImNhdC1maWxlIHJlcG9ydGVkIGZhaWx1cmUiKTsKK30KKworLyoKKyAqIFJlYWQgYSBwcmV2aW91c2x5LWV4cG9ydGVkIChhbmQgcG9zc2libHkgZWRpdGVkKSBvYmplY3QgYmFjayBmcm9tICJmaWxlbmFtZSIsCisgKiBpbnRlcnByZXRpbmcgaXQgYXMgInR5cGUiLCBhbmQgd3JpdGluZyB0aGUgcmVzdWx0IHRvIHRoZSBvYmplY3QgZGF0YWJhc2UuCisgKiBUaGUgc2hhMSBvZiB0aGUgd3JpdHRlbiBvYmplY3QgaXMgcmV0dXJuZWQgdmlhIHNoYTEuCisgKi8KK3N0YXRpYyB2b2lkIGltcG9ydF9vYmplY3QodW5zaWduZWQgY2hhciAqc2hhMSwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICBpbnQgcmF3LCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlpbnQgZmQ7CisKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBvcGVuICVzIGZvciByZWFkaW5nIiwgZmlsZW5hbWUpOworCisJaWYgKCFyYXcgJiYgdHlwZSA9PSBPQkpfVFJFRSkgeworCQljb25zdCBjaGFyICphcmd2W10gPSB7ICJta3RyZWUiLCBOVUxMIH07CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNtZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwkJc3RydWN0IHN0cmJ1ZiByZXN1bHQgPSBTVFJCVUZfSU5JVDsKKworCQljbWQuYXJndiA9IGFyZ3Y7CisJCWNtZC5naXRfY21kID0gMTsKKwkJY21kLmluID0gZmQ7CisJCWNtZC5vdXQgPSAtMTsKKworCQlpZiAoc3RhcnRfY29tbWFuZCgmY21kKSkKKwkJCWRpZSgidW5hYmxlIHRvIHNwYXduIG1rdHJlZSIpOworCisJCWlmIChzdHJidWZfcmVhZCgmcmVzdWx0LCBjbWQub3V0LCA0MSkgPCAwKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVhZCBmcm9tIG1rdHJlZSIpOworCQljbG9zZShjbWQub3V0KTsKKworCQlpZiAoZmluaXNoX2NvbW1hbmQoJmNtZCkpCisJCQlkaWUoIm1rdHJlZSByZXBvcnRlZCBmYWlsdXJlIik7CisJCWlmIChnZXRfc2hhMV9oZXgocmVzdWx0LmJ1Ziwgc2hhMSkgPCAwKQorCQkJZGllKCJta3RyZWUgZGlkIG5vdCByZXR1cm4gYW4gb2JqZWN0IG5hbWUiKTsKKworCQlzdHJidWZfcmVsZWFzZSgmcmVzdWx0KTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaW50IGZsYWdzID0gSEFTSF9GT1JNQVRfQ0hFQ0sgfCBIQVNIX1dSSVRFX09CSkVDVDsKKworCQlpZiAoZnN0YXQoZmQsICZzdCkgPCAwKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gZnN0YXQgJXMiLCBmaWxlbmFtZSk7CisJCWlmIChpbmRleF9mZChzaGExLCBmZCwgJnN0LCB0eXBlLCBOVUxMLCBmbGFncykgPCAwKQorCQkJZGllKCJ1bmFibGUgdG8gd3JpdGUgb2JqZWN0IHRvIGRhdGFiYXNlIik7CisJCS8qIGluZGV4X2ZkIGNsb3NlKClzIGZkIGZvciB1cyAqLworCX0KKworCS8qCisJICogTm8gbmVlZCB0byBjbG9zZShmZCkgaGVyZTsgYm90aCBydW4tY29tbWFuZCBhbmQgaW5kZXgtZmQKKwkgKiB3aWxsIGhhdmUgZG9uZSBpdCBmb3IgdXMuCisJICovCit9CisKK3N0YXRpYyBpbnQgZWRpdF9hbmRfcmVwbGFjZShjb25zdCBjaGFyICpvYmplY3RfcmVmLCBpbnQgZm9yY2UsIGludCByYXcpCit7CisJY2hhciAqdG1wZmlsZSA9IGdpdF9wYXRoZHVwKCJSRVBMQUNFX0VESVRPQkoiKTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgY2hhciBvbGRbMjBdLCBuZXdbMjBdLCBwcmV2WzIwXTsKKwljaGFyIHJlZltQQVRIX01BWF07CisKKwlpZiAoZ2V0X3NoYTEob2JqZWN0X3JlZiwgb2xkKSA8IDApCisJCWRpZSgiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciLCBvYmplY3RfcmVmKTsKKworCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKG9sZCwgTlVMTCk7CisJaWYgKHR5cGUgPCAwKQorCQlkaWUoInVuYWJsZSB0byBnZXQgb2JqZWN0IHR5cGUgZm9yICVzIiwgc2hhMV90b19oZXgob2xkKSk7CisKKwljaGVja19yZWZfdmFsaWQob2xkLCBwcmV2LCByZWYsIHNpemVvZihyZWYpLCBmb3JjZSk7CisKKwlleHBvcnRfb2JqZWN0KG9sZCwgdHlwZSwgcmF3LCB0bXBmaWxlKTsKKwlpZiAobGF1bmNoX2VkaXRvcih0bXBmaWxlLCBOVUxMLCBOVUxMKSA8IDApCisJCWRpZSgiZWRpdGluZyBvYmplY3QgZmlsZSBmYWlsZWQiKTsKKwlpbXBvcnRfb2JqZWN0KG5ldywgdHlwZSwgcmF3LCB0bXBmaWxlKTsKKworCWZyZWUodG1wZmlsZSk7CisKKwlpZiAoIWhhc2hjbXAob2xkLCBuZXcpKQorCQlyZXR1cm4gZXJyb3IoIm5ldyBvYmplY3QgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6ICclcyciLCBzaGExX3RvX2hleChvbGQpKTsKKworCXJldHVybiByZXBsYWNlX29iamVjdF9zaGExKG9iamVjdF9yZWYsIG9sZCwgInJlcGxhY2VtZW50IiwgbmV3LCBmb3JjZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGxhY2VfcGFyZW50cyhzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG5ld19wYXJlbnRzID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcGFyZW50X3N0YXJ0LCAqcGFyZW50X2VuZDsKKwlpbnQgaTsKKworCS8qIGZpbmQgZXhpc3RpbmcgcGFyZW50cyAqLworCXBhcmVudF9zdGFydCA9IGJ1Zi0+YnVmOworCXBhcmVudF9zdGFydCArPSA0NjsgLyogInRyZWUgIiArICJoZXggc2hhMSIgKyAiXG4iICovCisJcGFyZW50X2VuZCA9IHBhcmVudF9zdGFydDsKKworCXdoaWxlIChzdGFydHNfd2l0aChwYXJlbnRfZW5kLCAicGFyZW50ICIpKQorCQlwYXJlbnRfZW5kICs9IDQ4OyAvKiAicGFyZW50ICIgKyAiaGV4IHNoYTEiICsgIlxuIiAqLworCisJLyogcHJlcGFyZSBuZXcgcGFyZW50cyAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaWYgKGdldF9zaGExKGFyZ3ZbaV0sIHNoYTEpIDwgMCkKKwkJCWRpZShfKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIpLCBhcmd2W2ldKTsKKwkJbG9va3VwX2NvbW1pdF9vcl9kaWUoc2hhMSwgYXJndltpXSk7CisJCXN0cmJ1Zl9hZGRmKCZuZXdfcGFyZW50cywgInBhcmVudCAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCX0KKworCS8qIHJlcGxhY2UgZXhpc3RpbmcgcGFyZW50cyB3aXRoIG5ldyBvbmVzICovCisJc3RyYnVmX3NwbGljZShidWYsIHBhcmVudF9zdGFydCAtIGJ1Zi0+YnVmLCBwYXJlbnRfZW5kIC0gcGFyZW50X3N0YXJ0LAorCQkgICAgICBuZXdfcGFyZW50cy5idWYsIG5ld19wYXJlbnRzLmxlbik7CisKKwlzdHJidWZfcmVsZWFzZSgmbmV3X3BhcmVudHMpOworfQorCitzdHJ1Y3QgY2hlY2tfbWVyZ2V0YWdfZGF0YSB7CisJaW50IGFyZ2M7CisJY29uc3QgY2hhciAqKmFyZ3Y7Cit9OworCitzdGF0aWMgdm9pZCBjaGVja19vbmVfbWVyZ2V0YWcoc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgICAgIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSwKKwkJCSAgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjaGVja19tZXJnZXRhZ19kYXRhICptZXJnZXRhZ19kYXRhID0gKHN0cnVjdCBjaGVja19tZXJnZXRhZ19kYXRhICopZGF0YTsKKwljb25zdCBjaGFyICpyZWYgPSBtZXJnZXRhZ19kYXRhLT5hcmd2WzBdOworCXVuc2lnbmVkIGNoYXIgdGFnX3NoYTFbMjBdOworCXN0cnVjdCB0YWcgKnRhZzsKKwlpbnQgaTsKKworCWhhc2hfc2hhMV9maWxlKGV4dHJhLT52YWx1ZSwgZXh0cmEtPmxlbiwgdHlwZW5hbWUoT0JKX1RBRyksIHRhZ19zaGExKTsKKwl0YWcgPSBsb29rdXBfdGFnKHRhZ19zaGExKTsKKwlpZiAoIXRhZykKKwkJZGllKF8oImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIpLCByZWYpOworCWlmIChwYXJzZV90YWdfYnVmZmVyKHRhZywgZXh0cmEtPnZhbHVlLCBleHRyYS0+bGVuKSkKKwkJZGllKF8oIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIpLCByZWYpOworCisJLyogaXRlcmF0ZSBvdmVyIG5ldyBwYXJlbnRzICovCisJZm9yIChpID0gMTsgaSA8IG1lcmdldGFnX2RhdGEtPmFyZ2M7IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlpZiAoZ2V0X3NoYTEobWVyZ2V0YWdfZGF0YS0+YXJndltpXSwgc2hhMSkgPCAwKQorCQkJZGllKF8oIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIiksIG1lcmdldGFnX2RhdGEtPmFyZ3ZbaV0pOworCQlpZiAoIWhhc2hjbXAodGFnLT50YWdnZWQtPnNoYTEsIHNoYTEpKQorCQkJcmV0dXJuOyAvKiBmb3VuZCAqLworCX0KKworCWRpZShfKCJvcmlnaW5hbCBjb21taXQgJyVzJyBjb250YWlucyBtZXJnZXRhZyAnJXMnIHRoYXQgaXMgZGlzY2FyZGVkOyAiCisJICAgICAgInVzZSAtLWVkaXQgaW5zdGVhZCBvZiAtLWdyYWZ0IiksIHJlZiwgc2hhMV90b19oZXgodGFnX3NoYTEpKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfbWVyZ2V0YWdzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjaGVja19tZXJnZXRhZ19kYXRhIG1lcmdldGFnX2RhdGE7CisKKwltZXJnZXRhZ19kYXRhLmFyZ2MgPSBhcmdjOworCW1lcmdldGFnX2RhdGEuYXJndiA9IGFyZ3Y7CisJZm9yX2VhY2hfbWVyZ2V0YWcoY2hlY2tfb25lX21lcmdldGFnLCBjb21taXQsICZtZXJnZXRhZ19kYXRhKTsKK30KKworc3RhdGljIGludCBjcmVhdGVfZ3JhZnQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgZm9yY2UpCit7CisJdW5zaWduZWQgY2hhciBvbGRbMjBdLCBuZXdbMjBdOworCWNvbnN0IGNoYXIgKm9sZF9yZWYgPSBhcmd2WzBdOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlpZiAoZ2V0X3NoYTEob2xkX3JlZiwgb2xkKSA8IDApCisJCWRpZShfKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIpLCBvbGRfcmVmKTsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X29yX2RpZShvbGQsIG9sZF9yZWYpOworCisJYnVmZmVyID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCAmc2l6ZSk7CisJc3RyYnVmX2FkZCgmYnVmLCBidWZmZXIsIHNpemUpOworCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWZmZXIpOworCisJcmVwbGFjZV9wYXJlbnRzKCZidWYsIGFyZ2MgLSAxLCAmYXJndlsxXSk7CisKKwlpZiAocmVtb3ZlX3NpZ25hdHVyZSgmYnVmKSkgeworCQl3YXJuaW5nKF8oInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlLiIpLCBvbGRfcmVmKTsKKwkJd2FybmluZyhfKCJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIpKTsKKwl9CisKKwljaGVja19tZXJnZXRhZ3MoY29tbWl0LCBhcmdjLCBhcmd2KTsKKworCWlmICh3cml0ZV9zaGExX2ZpbGUoYnVmLmJ1ZiwgYnVmLmxlbiwgY29tbWl0X3R5cGUsIG5ldykpCisJCWRpZShfKCJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIpLCBvbGRfcmVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJaWYgKCFoYXNoY21wKG9sZCwgbmV3KSkKKwkJcmV0dXJuIGVycm9yKCJuZXcgY29tbWl0IGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOiAnJXMnIiwgc2hhMV90b19oZXgob2xkKSk7CisKKwlyZXR1cm4gcmVwbGFjZV9vYmplY3Rfc2hhMShvbGRfcmVmLCBvbGQsICJyZXBsYWNlbWVudCIsIG5ldywgZm9yY2UpOworfQorCitpbnQgY21kX3JlcGxhY2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGZvcmNlID0gMDsKKwlpbnQgcmF3ID0gMDsKKwljb25zdCBjaGFyICpmb3JtYXQgPSBOVUxMOworCWVudW0geworCQlNT0RFX1VOU1BFQ0lGSUVEID0gMCwKKwkJTU9ERV9MSVNULAorCQlNT0RFX0RFTEVURSwKKwkJTU9ERV9FRElULAorCQlNT0RFX0dSQUZULAorCQlNT0RFX1JFUExBQ0UKKwl9IGNtZG1vZGUgPSBNT0RFX1VOU1BFQ0lGSUVEOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQ01ETU9ERSgnbCcsICJsaXN0IiwgJmNtZG1vZGUsIE5fKCJsaXN0IHJlcGxhY2UgcmVmcyIpLCBNT0RFX0xJU1QpLAorCQlPUFRfQ01ETU9ERSgnZCcsICJkZWxldGUiLCAmY21kbW9kZSwgTl8oImRlbGV0ZSByZXBsYWNlIHJlZnMiKSwgTU9ERV9ERUxFVEUpLAorCQlPUFRfQ01ETU9ERSgnZScsICJlZGl0IiwgJmNtZG1vZGUsIE5fKCJlZGl0IGV4aXN0aW5nIG9iamVjdCIpLCBNT0RFX0VESVQpLAorCQlPUFRfQ01ETU9ERSgnZycsICJncmFmdCIsICZjbWRtb2RlLCBOXygiY2hhbmdlIGEgY29tbWl0J3MgcGFyZW50cyIpLCBNT0RFX0dSQUZUKSwKKwkJT1BUX0JPT0woJ2YnLCAiZm9yY2UiLCAmZm9yY2UsIE5fKCJyZXBsYWNlIHRoZSByZWYgaWYgaXQgZXhpc3RzIikpLAorCQlPUFRfQk9PTCgwLCAicmF3IiwgJnJhdywgTl8oImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIpKSwKKwkJT1BUX1NUUklORygwLCAiZm9ybWF0IiwgJmZvcm1hdCwgTl8oImZvcm1hdCIpLCBOXygidXNlIHRoaXMgZm9ybWF0IikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJY2hlY2tfcmVwbGFjZV9yZWZzID0gMDsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3JlcGxhY2VfdXNhZ2UsIDApOworCisJaWYgKCFjbWRtb2RlKQorCQljbWRtb2RlID0gYXJnYyA/IE1PREVfUkVQTEFDRSA6IE1PREVfTElTVDsKKworCWlmIChmb3JtYXQgJiYgY21kbW9kZSAhPSBNT0RFX0xJU1QpCisJCXVzYWdlX21zZ19vcHQoIi0tZm9ybWF0IGNhbm5vdCBiZSB1c2VkIHdoZW4gbm90IGxpc3RpbmciLAorCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKGZvcmNlICYmCisJICAgIGNtZG1vZGUgIT0gTU9ERV9SRVBMQUNFICYmCisJICAgIGNtZG1vZGUgIT0gTU9ERV9FRElUICYmCisJICAgIGNtZG1vZGUgIT0gTU9ERV9HUkFGVCkKKwkJdXNhZ2VfbXNnX29wdCgiLWYgb25seSBtYWtlcyBzZW5zZSB3aGVuIHdyaXRpbmcgYSByZXBsYWNlbWVudCIsCisJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAocmF3ICYmIGNtZG1vZGUgIT0gTU9ERV9FRElUKQorCQl1c2FnZV9tc2dfb3B0KCItLXJhdyBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1lZGl0IiwKKwkJCSAgICAgIGdpdF9yZXBsYWNlX3VzYWdlLCBvcHRpb25zKTsKKworCXN3aXRjaCAoY21kbW9kZSkgeworCWNhc2UgTU9ERV9ERUxFVEU6CisJCWlmIChhcmdjIDwgMSkKKwkJCXVzYWdlX21zZ19vcHQoIi1kIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIsCisJCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCQlyZXR1cm4gZm9yX2VhY2hfcmVwbGFjZV9uYW1lKGFyZ3YsIGRlbGV0ZV9yZXBsYWNlX3JlZik7CisKKwljYXNlIE1PREVfUkVQTEFDRToKKwkJaWYgKGFyZ2MgIT0gMikKKwkJCXVzYWdlX21zZ19vcHQoImJhZCBudW1iZXIgb2YgYXJndW1lbnRzIiwKKwkJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisJCXJldHVybiByZXBsYWNlX29iamVjdChhcmd2WzBdLCBhcmd2WzFdLCBmb3JjZSk7CisKKwljYXNlIE1PREVfRURJVDoKKwkJaWYgKGFyZ2MgIT0gMSkKKwkJCXVzYWdlX21zZ19vcHQoIi1lIG5lZWRzIGV4YWN0bHkgb25lIGFyZ3VtZW50IiwKKwkJCQkgICAgICBnaXRfcmVwbGFjZV91c2FnZSwgb3B0aW9ucyk7CisJCXJldHVybiBlZGl0X2FuZF9yZXBsYWNlKGFyZ3ZbMF0sIGZvcmNlLCByYXcpOworCisJY2FzZSBNT0RFX0dSQUZUOgorCQlpZiAoYXJnYyA8IDEpCisJCQl1c2FnZV9tc2dfb3B0KCItZyBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQiLAorCQkJCSAgICAgIGdpdF9yZXBsYWNlX3VzYWdlLCBvcHRpb25zKTsKKwkJcmV0dXJuIGNyZWF0ZV9ncmFmdChhcmdjLCBhcmd2LCBmb3JjZSk7CisKKwljYXNlIE1PREVfTElTVDoKKwkJaWYgKGFyZ2MgPiAxKQorCQkJdXNhZ2VfbXNnX29wdCgib25seSBvbmUgcGF0dGVybiBjYW4gYmUgZ2l2ZW4gd2l0aCAtbCIsCisJCQkJICAgICAgZ2l0X3JlcGxhY2VfdXNhZ2UsIG9wdGlvbnMpOworCQlyZXR1cm4gbGlzdF9yZXBsYWNlX3JlZnMoYXJndlswXSwgZm9ybWF0KTsKKworCWRlZmF1bHQ6CisJCWRpZSgiQlVHOiBpbnZhbGlkIGNtZG1vZGUgJWQiLCAoaW50KWNtZG1vZGUpOworCX0KK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVyZXJlLmMgYi9idWlsdGluL3JlcmVyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZjcyNDIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JlcmVyZS5jCkBAIC0wLDAgKzEsMTE2IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAieGRpZmYveGRpZmYuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlcmVyZV91c2FnZVtdID0geworCU5fKCJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIiksCisJTlVMTCwKK307CisKK3N0YXRpYyBpbnQgb3V0Zih2b2lkICpkdW1teSwgbW1idWZmZXJfdCAqcHRyLCBpbnQgbmJ1ZikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrKQorCQlpZiAod3JpdGVfaW5fZnVsbCgxLCBwdHJbaV0ucHRyLCBwdHJbaV0uc2l6ZSkgIT0gcHRyW2ldLnNpemUpCisJCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl90d28oY29uc3QgY2hhciAqZmlsZTEsIGNvbnN0IGNoYXIgKmxhYmVsMSwKKwkJY29uc3QgY2hhciAqZmlsZTIsIGNvbnN0IGNoYXIgKmxhYmVsMikKK3sKKwl4cHBhcmFtX3QgeHBwOworCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwl4ZGVtaXRjYl90IGVjYjsKKwltbWZpbGVfdCBtaW51cywgcGx1czsKKwlpbnQgcmV0OworCisJaWYgKHJlYWRfbW1maWxlKCZtaW51cywgZmlsZTEpIHx8IHJlYWRfbW1maWxlKCZwbHVzLCBmaWxlMikpCisJCXJldHVybiAtMTsKKworCXByaW50ZigiLS0tIGEvJXNcbisrKyBiLyVzXG4iLCBsYWJlbDEsIGxhYmVsMik7CisJZmZsdXNoKHN0ZG91dCk7CisJbWVtc2V0KCZ4cHAsIDAsIHNpemVvZih4cHApKTsKKwl4cHAuZmxhZ3MgPSAwOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCXhlY2ZnLmN0eGxlbiA9IDM7CisJZWNiLm91dGYgPSBvdXRmOworCXJldCA9IHhkaV9kaWZmKCZtaW51cywgJnBsdXMsICZ4cHAsICZ4ZWNmZywgJmVjYik7CisKKwlmcmVlKG1pbnVzLnB0cik7CisJZnJlZShwbHVzLnB0cik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGNtZF9yZXJlcmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IHN0cmluZ19saXN0IG1lcmdlX3JyID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJaW50IGksIGF1dG91cGRhdGUgPSAtMSwgZmxhZ3MgPSAwOworCisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9TRVRfSU5UKDAsICJyZXJlcmUtYXV0b3VwZGF0ZSIsICZhdXRvdXBkYXRlLAorCQkJTl8oInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IiksIDEpLAorCQlPUFRfRU5EKCksCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgcmVyZXJlX3VzYWdlLCAwKTsKKworCWdpdF9jb25maWcoZ2l0X3htZXJnZV9jb25maWcsIE5VTEwpOworCisJaWYgKGF1dG91cGRhdGUgPT0gMSkKKwkJZmxhZ3MgPSBSRVJFUkVfQVVUT1VQREFURTsKKwlpZiAoYXV0b3VwZGF0ZSA9PSAwKQorCQlmbGFncyA9IFJFUkVSRV9OT0FVVE9VUERBVEU7CisKKwlpZiAoYXJnYyA8IDEpCisJCXJldHVybiByZXJlcmUoZmxhZ3MpOworCisJaWYgKCFzdHJjbXAoYXJndlswXSwgImZvcmdldCIpKSB7CisJCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwkJaWYgKGFyZ2MgPCAyKQorCQkJd2FybmluZygiJ2dpdCByZXJlcmUgZm9yZ2V0JyB3aXRob3V0IHBhdGhzIGlzIGRlcHJlY2F0ZWQiKTsKKwkJcGFyc2VfcGF0aHNwZWMoJnBhdGhzcGVjLCAwLCBQQVRIU1BFQ19QUkVGRVJfQ1dELAorCQkJICAgICAgIHByZWZpeCwgYXJndiArIDEpOworCQlyZXR1cm4gcmVyZXJlX2ZvcmdldCgmcGF0aHNwZWMpOworCX0KKworCWlmICghc3RyY21wKGFyZ3ZbMF0sICJjbGVhciIpKSB7CisJCXJlcmVyZV9jbGVhcigmbWVyZ2VfcnIpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiZ2MiKSkKKwkJcmVyZXJlX2djKCZtZXJnZV9ycik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAic3RhdHVzIikpIHsKKwkJaWYgKHNldHVwX3JlcmVyZSgmbWVyZ2VfcnIsIGZsYWdzIHwgUkVSRVJFX1JFQURPTkxZKSA8IDApCisJCQlyZXR1cm4gMDsKKwkJZm9yIChpID0gMDsgaSA8IG1lcmdlX3JyLm5yOyBpKyspCisJCQlwcmludGYoIiVzXG4iLCBtZXJnZV9yci5pdGVtc1tpXS5zdHJpbmcpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAicmVtYWluaW5nIikpIHsKKwkJcmVyZXJlX3JlbWFpbmluZygmbWVyZ2VfcnIpOworCQlmb3IgKGkgPSAwOyBpIDwgbWVyZ2VfcnIubnI7IGkrKykgeworCQkJaWYgKG1lcmdlX3JyLml0ZW1zW2ldLnV0aWwgIT0gUkVSRVJFX1JFU09MVkVEKQorCQkJCXByaW50ZigiJXNcbiIsIG1lcmdlX3JyLml0ZW1zW2ldLnN0cmluZyk7CisJCQllbHNlCisJCQkJLyogcHJlcGFyZSBmb3IgbGF0ZXIgY2FsbCB0bworCQkJCSAqIHN0cmluZ19saXN0X2NsZWFyKCkgKi8KKwkJCQltZXJnZV9yci5pdGVtc1tpXS51dGlsID0gTlVMTDsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzBdLCAiZGlmZiIpKSB7CisJCWlmIChzZXR1cF9yZXJlcmUoJm1lcmdlX3JyLCBmbGFncyB8IFJFUkVSRV9SRUFET05MWSkgPCAwKQorCQkJcmV0dXJuIDA7CisJCWZvciAoaSA9IDA7IGkgPCBtZXJnZV9yci5ucjsgaSsrKSB7CisJCQljb25zdCBjaGFyICpwYXRoID0gbWVyZ2VfcnIuaXRlbXNbaV0uc3RyaW5nOworCQkJY29uc3Qgc3RydWN0IHJlcmVyZV9pZCAqaWQgPSBtZXJnZV9yci5pdGVtc1tpXS51dGlsOworCQkJaWYgKGRpZmZfdHdvKHJlcmVyZV9wYXRoKGlkLCAicHJlaW1hZ2UiKSwgcGF0aCwgcGF0aCwgcGF0aCkpCisJCQkJZGllKCJ1bmFibGUgdG8gZ2VuZXJhdGUgZGlmZiBmb3IgJXMiLCByZXJlcmVfcGF0aChpZCwgTlVMTCkpOworCQl9CisJfSBlbHNlCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhyZXJlcmVfdXNhZ2UsIG9wdGlvbnMpOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJm1lcmdlX3JyLCAxKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmVzZXQuYyBiL2J1aWx0aW4vcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTAzZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZXNldC5jCkBAIC0wLDAgKzEsMzg5IEBACisvKgorICogImdpdCByZXNldCIgYnVpbHRpbiBjb21tYW5kCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IENhcmxvcyBSaWNhCisgKgorICogQmFzZWQgb24gZ2l0LXJlc2V0LnNoLCB3aGljaCBpcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBMaW51cyBUb3J2YWxkcyBhbmQgSnVuaW8gQyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJicmFuY2guaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9yZXNldF91c2FnZVtdID0geworCU5fKCJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iKSwKKwlOXygiZ2l0IHJlc2V0IFstcV0gPHRyZWUtaXNoPiBbLS1dIDxwYXRocz4uLi4iKSwKKwlOXygiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRocz4uLi5dIiksCisJTlVMTAorfTsKKworZW51bSByZXNldF90eXBlIHsgTUlYRUQsIFNPRlQsIEhBUkQsIE1FUkdFLCBLRUVQLCBOT05FIH07CitzdGF0aWMgY29uc3QgY2hhciAqcmVzZXRfdHlwZV9uYW1lc1tdID0geworCU5fKCJtaXhlZCIpLCBOXygic29mdCIpLCBOXygiaGFyZCIpLCBOXygibWVyZ2UiKSwgTl8oImtlZXAiKSwgTlVMTAorfTsKKworc3RhdGljIGlubGluZSBpbnQgaXNfbWVyZ2Uodm9pZCkKK3sKKwlyZXR1cm4gIWFjY2VzcyhnaXRfcGF0aF9tZXJnZV9oZWFkKCksIEZfT0spOworfQorCitzdGF0aWMgaW50IHJlc2V0X2luZGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCByZXNldF90eXBlLCBpbnQgcXVpZXQpCit7CisJaW50IG5yID0gMTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2NbMl07CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJb3B0cy5oZWFkX2lkeCA9IDE7CisJb3B0cy5zcmNfaW5kZXggPSAmdGhlX2luZGV4OworCW9wdHMuZHN0X2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmZuID0gb25ld2F5X21lcmdlOworCW9wdHMubWVyZ2UgPSAxOworCWlmICghcXVpZXQpCisJCW9wdHMudmVyYm9zZV91cGRhdGUgPSAxOworCXN3aXRjaCAocmVzZXRfdHlwZSkgeworCWNhc2UgS0VFUDoKKwljYXNlIE1FUkdFOgorCQlvcHRzLnVwZGF0ZSA9IDE7CisJCWJyZWFrOworCWNhc2UgSEFSRDoKKwkJb3B0cy51cGRhdGUgPSAxOworCQkvKiBmYWxsdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCW9wdHMucmVzZXQgPSAxOworCX0KKworCXJlYWRfY2FjaGVfdW5tZXJnZWQoKTsKKworCWlmIChyZXNldF90eXBlID09IEtFRVApIHsKKwkJdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOworCQlpZiAoZ2V0X3NoYTEoIkhFQUQiLCBoZWFkX3NoYTEpKQorCQkJcmV0dXJuIGVycm9yKF8oIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIikpOworCQlpZiAoIWZpbGxfdHJlZV9kZXNjcmlwdG9yKGRlc2MsIGhlYWRfc2hhMSkpCisJCQlyZXR1cm4gZXJyb3IoXygiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIpKTsKKwkJbnIrKzsKKwkJb3B0cy5mbiA9IHR3b3dheV9tZXJnZTsKKwl9CisKKwlpZiAoIWZpbGxfdHJlZV9kZXNjcmlwdG9yKGRlc2MgKyBuciAtIDEsIHNoYTEpKQorCQlyZXR1cm4gZXJyb3IoXygiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iKSwgc2hhMV90b19oZXgoc2hhMSkpOworCWlmICh1bnBhY2tfdHJlZXMobnIsIGRlc2MsICZvcHRzKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlc2V0X3R5cGUgPT0gTUlYRUQgfHwgcmVzZXRfdHlwZSA9PSBIQVJEKSB7CisJCXRyZWUgPSBwYXJzZV90cmVlX2luZGlyZWN0KHNoYTEpOworCQlwcmltZV9jYWNoZV90cmVlKCZ0aGVfaW5kZXgsIHRyZWUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcmludF9uZXdfaGVhZF9saW5lKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwljb25zdCBjaGFyICpoZXgsICpib2R5OworCWNvbnN0IGNoYXIgKm1zZzsKKworCWhleCA9IGZpbmRfdW5pcXVlX2FiYnJldihjb21taXQtPm9iamVjdC5zaGExLCBERUZBVUxUX0FCQlJFVik7CisJcHJpbnRmKF8oIkhFQUQgaXMgbm93IGF0ICVzIiksIGhleCk7CisJbXNnID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKSk7CisJYm9keSA9IHN0cnN0cihtc2csICJcblxuIik7CisJaWYgKGJvZHkpIHsKKwkJY29uc3QgY2hhciAqZW9sOworCQlzaXplX3QgbGVuOworCQlib2R5ICs9IDI7CisJCWVvbCA9IHN0cmNocihib2R5LCAnXG4nKTsKKwkJbGVuID0gZW9sID8gZW9sIC0gYm9keSA6IHN0cmxlbihib2R5KTsKKwkJcHJpbnRmKCIgJS4qc1xuIiwgKGludCkgbGVuLCBib2R5KTsKKwl9CisJZWxzZQorCQlwcmludGYoIlxuIik7CisJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIG1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9pbmRleF9mcm9tX2RpZmYoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisJaW50IGludGVudF90b19hZGQgPSAqKGludCAqKWRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lID0gcS0+cXVldWVbaV0tPm9uZTsKKwkJaW50IGlzX21pc3NpbmcgPSAhKG9uZS0+bW9kZSAmJiAhaXNfbnVsbF9zaGExKG9uZS0+c2hhMSkpOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJCWlmIChpc19taXNzaW5nICYmICFpbnRlbnRfdG9fYWRkKSB7CisJCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKG9uZS0+cGF0aCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNlID0gbWFrZV9jYWNoZV9lbnRyeShvbmUtPm1vZGUsIG9uZS0+c2hhMSwgb25lLT5wYXRoLAorCQkJCSAgICAgIDAsIDApOworCQlpZiAoIWNlKQorCQkJZGllKF8oIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciKSwKKwkJCSAgICBvbmUtPnBhdGgpOworCQlpZiAoaXNfbWlzc2luZykgeworCQkJY2UtPmNlX2ZsYWdzIHw9IENFX0lOVEVOVF9UT19BREQ7CisJCQlzZXRfb2JqZWN0X25hbWVfZm9yX2ludGVudF90b19hZGRfZW50cnkoY2UpOworCQl9CisJCWFkZF9jYWNoZV9lbnRyeShjZSwgQUREX0NBQ0hFX09LX1RPX0FERCB8IEFERF9DQUNIRV9PS19UT19SRVBMQUNFKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9mcm9tX3RyZWUoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCSAgdW5zaWduZWQgY2hhciAqdHJlZV9zaGExLAorCQkJICBpbnQgaW50ZW50X3RvX2FkZCkKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdDsKKworCW1lbXNldCgmb3B0LCAwLCBzaXplb2Yob3B0KSk7CisJY29weV9wYXRoc3BlYygmb3B0LnBhdGhzcGVjLCBwYXRoc3BlYyk7CisJb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwlvcHQuZm9ybWF0X2NhbGxiYWNrID0gdXBkYXRlX2luZGV4X2Zyb21fZGlmZjsKKwlvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSAmaW50ZW50X3RvX2FkZDsKKworCWlmIChkb19kaWZmX2NhY2hlKHRyZWVfc2hhMSwgJm9wdCkpCisJCXJldHVybiAxOworCWRpZmZjb3JlX3N0ZCgmb3B0KTsKKwlkaWZmX2ZsdXNoKCZvcHQpOworCWZyZWVfcGF0aHNwZWMoJm9wdC5wYXRoc3BlYyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0X3JlZmxvZ19tZXNzYWdlKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICphY3Rpb24sCisJCQkgICAgICAgY29uc3QgY2hhciAqcmV2KQoreworCWNvbnN0IGNoYXIgKnJsYSA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKworCXN0cmJ1Zl9yZXNldChzYik7CisJaWYgKHJsYSkKKwkJc3RyYnVmX2FkZGYoc2IsICIlczogJXMiLCBybGEsIGFjdGlvbik7CisJZWxzZSBpZiAocmV2KQorCQlzdHJidWZfYWRkZihzYiwgInJlc2V0OiBtb3ZpbmcgdG8gJXMiLCByZXYpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoc2IsICJyZXNldDogJXMiLCBhY3Rpb24pOworfQorCitzdGF0aWMgdm9pZCBkaWVfaWZfdW5tZXJnZWRfY2FjaGUoaW50IHJlc2V0X3R5cGUpCit7CisJaWYgKGlzX21lcmdlKCkgfHwgdW5tZXJnZWRfY2FjaGUoKSkKKwkJZGllKF8oIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iKSwKKwkJICAgIF8ocmVzZXRfdHlwZV9uYW1lc1tyZXNldF90eXBlXSkpOworCit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2FyZ3Moc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJICAgICAgIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgICAgICBpbnQgcGF0Y2hfbW9kZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKipyZXZfcmV0KQoreworCWNvbnN0IGNoYXIgKnJldiA9ICJIRUFEIjsKKwl1bnNpZ25lZCBjaGFyIHVudXNlZFsyMF07CisJLyoKKwkgKiBQb3NzaWJsZSBhcmd1bWVudHMgYXJlOgorCSAqCisJICogZ2l0IHJlc2V0IFstb3B0c10gWzxyZXY+XQorCSAqIGdpdCByZXNldCBbLW9wdHNdIDx0cmVlPiBbPHBhdGhzPi4uLl0KKwkgKiBnaXQgcmVzZXQgWy1vcHRzXSA8dHJlZT4gLS0gWzxwYXRocz4uLi5dCisJICogZ2l0IHJlc2V0IFstb3B0c10gLS0gWzxwYXRocz4uLi5dCisJICogZ2l0IHJlc2V0IFstb3B0c10gPHBhdGhzPi4uLgorCSAqCisJICogQXQgdGhpcyBwb2ludCwgYXJndiBwb2ludHMgaW1tZWRpYXRlbHkgYWZ0ZXIgWy1vcHRzXS4KKwkgKi8KKworCWlmIChhcmd2WzBdKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICItLSIpKSB7CisJCQlhcmd2Kys7IC8qIHJlc2V0IHRvIEhFQUQsIHBvc3NpYmx5IHdpdGggcGF0aHMgKi8KKwkJfSBlbHNlIGlmIChhcmd2WzFdICYmICFzdHJjbXAoYXJndlsxXSwgIi0tIikpIHsKKwkJCXJldiA9IGFyZ3ZbMF07CisJCQlhcmd2ICs9IDI7CisJCX0KKwkJLyoKKwkJICogT3RoZXJ3aXNlLCBhcmd2WzBdIGNvdWxkIGJlIGVpdGhlciA8cmV2PiBvciA8cGF0aHM+IGFuZAorCQkgKiBoYXMgdG8gYmUgdW5hbWJpZ3VvdXMuIElmIHRoZXJlIGlzIGEgc2luZ2xlIGFyZ3VtZW50LCBpdAorCQkgKiBjYW4gbm90IGJlIGEgdHJlZQorCQkgKi8KKwkJZWxzZSBpZiAoKCFhcmd2WzFdICYmICFnZXRfc2hhMV9jb21taXR0aXNoKGFyZ3ZbMF0sIHVudXNlZCkpIHx8CisJCQkgKGFyZ3ZbMV0gJiYgIWdldF9zaGExX3RyZWVpc2goYXJndlswXSwgdW51c2VkKSkpIHsKKwkJCS8qCisJCQkgKiBPaywgYXJndlswXSBsb29rcyBsaWtlIGEgY29tbWl0L3RyZWU7IGl0IHNob3VsZCBub3QKKwkJCSAqIGJlIGEgZmlsZW5hbWUuCisJCQkgKi8KKwkJCXZlcmlmeV9ub25fZmlsZW5hbWUocHJlZml4LCBhcmd2WzBdKTsKKwkJCXJldiA9ICphcmd2Kys7CisJCX0gZWxzZSB7CisJCQkvKiBPdGhlcndpc2Ugd2UgdHJlYXQgdGhpcyBhcyBhIGZpbGVuYW1lICovCisJCQl2ZXJpZnlfZmlsZW5hbWUocHJlZml4LCBhcmd2WzBdLCAxKTsKKwkJfQorCX0KKwkqcmV2X3JldCA9IHJldjsKKworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiaW5kZXggZmlsZSBjb3JydXB0IikpOworCisJcGFyc2VfcGF0aHNwZWMocGF0aHNwZWMsIDAsCisJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCB8CisJCSAgICAgICBQQVRIU1BFQ19TVFJJUF9TVUJNT0RVTEVfU0xBU0hfQ0hFQVAgfAorCQkgICAgICAgKHBhdGNoX21vZGUgPyBQQVRIU1BFQ19QUkVGSVhfT1JJR0lOIDogMCksCisJCSAgICAgICBwcmVmaXgsIGFyZ3YpOworfQorCitzdGF0aWMgaW50IHJlc2V0X3JlZnMoY29uc3QgY2hhciAqcmV2LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCB1cGRhdGVfcmVmX3N0YXR1czsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGNoYXIgKm9yaWcgPSBOVUxMLCBzaGExX29yaWdbMjBdLAorCQkqb2xkX29yaWcgPSBOVUxMLCBzaGExX29sZF9vcmlnWzIwXTsKKworCWlmICghZ2V0X3NoYTEoIk9SSUdfSEVBRCIsIHNoYTFfb2xkX29yaWcpKQorCQlvbGRfb3JpZyA9IHNoYTFfb2xkX29yaWc7CisJaWYgKCFnZXRfc2hhMSgiSEVBRCIsIHNoYTFfb3JpZykpIHsKKwkJb3JpZyA9IHNoYTFfb3JpZzsKKwkJc2V0X3JlZmxvZ19tZXNzYWdlKCZtc2csICJ1cGRhdGluZyBPUklHX0hFQUQiLCBOVUxMKTsKKwkJdXBkYXRlX3JlZihtc2cuYnVmLCAiT1JJR19IRUFEIiwgb3JpZywgb2xkX29yaWcsIDAsCisJCQkgICBVUERBVEVfUkVGU19NU0dfT05fRVJSKTsKKwl9IGVsc2UgaWYgKG9sZF9vcmlnKQorCQlkZWxldGVfcmVmKCJPUklHX0hFQUQiLCBvbGRfb3JpZywgMCk7CisJc2V0X3JlZmxvZ19tZXNzYWdlKCZtc2csICJ1cGRhdGluZyBIRUFEIiwgcmV2KTsKKwl1cGRhdGVfcmVmX3N0YXR1cyA9IHVwZGF0ZV9yZWYobXNnLmJ1ZiwgIkhFQUQiLCBzaGExLCBvcmlnLCAwLAorCQkJCSAgICAgICBVUERBVEVfUkVGU19NU0dfT05fRVJSKTsKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKwlyZXR1cm4gdXBkYXRlX3JlZl9zdGF0dXM7Cit9CisKK2ludCBjbWRfcmVzZXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IHJlc2V0X3R5cGUgPSBOT05FLCB1cGRhdGVfcmVmX3N0YXR1cyA9IDAsIHF1aWV0ID0gMDsKKwlpbnQgcGF0Y2hfbW9kZSA9IDAsIHVuYm9ybjsKKwljb25zdCBjaGFyICpyZXY7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJaW50IGludGVudF90b19hZGQgPSAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZxdWlldCwgTl8oImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiKSksCisJCU9QVF9TRVRfSU5UKDAsICJtaXhlZCIsICZyZXNldF90eXBlLAorCQkJCQkJTl8oInJlc2V0IEhFQUQgYW5kIGluZGV4IiksIE1JWEVEKSwKKwkJT1BUX1NFVF9JTlQoMCwgInNvZnQiLCAmcmVzZXRfdHlwZSwgTl8oInJlc2V0IG9ubHkgSEVBRCIpLCBTT0ZUKSwKKwkJT1BUX1NFVF9JTlQoMCwgImhhcmQiLCAmcmVzZXRfdHlwZSwKKwkJCQlOXygicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIpLCBIQVJEKSwKKwkJT1BUX1NFVF9JTlQoMCwgIm1lcmdlIiwgJnJlc2V0X3R5cGUsCisJCQkJTl8oInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiKSwgTUVSR0UpLAorCQlPUFRfU0VUX0lOVCgwLCAia2VlcCIsICZyZXNldF90eXBlLAorCQkJCU5fKCJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiKSwgS0VFUCksCisJCU9QVF9CT09MKCdwJywgInBhdGNoIiwgJnBhdGNoX21vZGUsIE5fKCJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIpKSwKKwkJT1BUX0JPT0woJ04nLCAiaW50ZW50LXRvLWFkZCIsICZpbnRlbnRfdG9fYWRkLAorCQkJCU5fKCJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3Jlc2V0X3VzYWdlLAorCQkJCQkJUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpOworCXBhcnNlX2FyZ3MoJnBhdGhzcGVjLCBhcmd2LCBwcmVmaXgsIHBhdGNoX21vZGUsICZyZXYpOworCisJdW5ib3JuID0gIXN0cmNtcChyZXYsICJIRUFEIikgJiYgZ2V0X3NoYTEoIkhFQUQiLCBzaGExKTsKKwlpZiAodW5ib3JuKSB7CisJCS8qIHJlc2V0IG9uIHVuYm9ybiBicmFuY2g6IHRyZWF0IGFzIHJlc2V0IHRvIGVtcHR5IHRyZWUgKi8KKwkJaGFzaGNweShzaGExLCBFTVBUWV9UUkVFX1NIQTFfQklOKTsKKwl9IGVsc2UgaWYgKCFwYXRoc3BlYy5ucikgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJCWlmIChnZXRfc2hhMV9jb21taXR0aXNoKHJldiwgc2hhMSkpCisJCQlkaWUoXygiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIpLCByZXYpOworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwkJaWYgKCFjb21taXQpCisJCQlkaWUoXygiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIpLCByZXYpOworCQloYXNoY3B5KHNoYTEsIGNvbW1pdC0+b2JqZWN0LnNoYTEpOworCX0gZWxzZSB7CisJCXN0cnVjdCB0cmVlICp0cmVlOworCQlpZiAoZ2V0X3NoYTFfdHJlZWlzaChyZXYsIHNoYTEpKQorCQkJZGllKF8oIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIpLCByZXYpOworCQl0cmVlID0gcGFyc2VfdHJlZV9pbmRpcmVjdChzaGExKTsKKwkJaWYgKCF0cmVlKQorCQkJZGllKF8oIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iKSwgcmV2KTsKKwkJaGFzaGNweShzaGExLCB0cmVlLT5vYmplY3Quc2hhMSk7CisJfQorCisJaWYgKHBhdGNoX21vZGUpIHsKKwkJaWYgKHJlc2V0X3R5cGUgIT0gTk9ORSkKKwkJCWRpZShfKCItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iKSk7CisJCXJldHVybiBydW5fYWRkX2ludGVyYWN0aXZlKHJldiwgIi0tcGF0Y2g9cmVzZXQiLCAmcGF0aHNwZWMpOworCX0KKworCS8qIGdpdCByZXNldCB0cmVlIFstLV0gcGF0aHMuLi4gY2FuIGJlIHVzZWQgdG8KKwkgKiBsb2FkIGNob3NlbiBwYXRocyBmcm9tIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHdpdGhvdXQKKwkgKiBhZmZlY3RpbmcgdGhlIHdvcmtpbmcgdHJlZSBub3IgSEVBRC4gKi8KKwlpZiAocGF0aHNwZWMubnIpIHsKKwkJaWYgKHJlc2V0X3R5cGUgPT0gTUlYRUQpCisJCQl3YXJuaW5nKF8oIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIpKTsKKwkJZWxzZSBpZiAocmVzZXRfdHlwZSAhPSBOT05FKQorCQkJZGllKF8oIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIpLAorCQkJCQlfKHJlc2V0X3R5cGVfbmFtZXNbcmVzZXRfdHlwZV0pKTsKKwl9CisJaWYgKHJlc2V0X3R5cGUgPT0gTk9ORSkKKwkJcmVzZXRfdHlwZSA9IE1JWEVEOyAvKiBieSBkZWZhdWx0ICovCisKKwlpZiAocmVzZXRfdHlwZSAhPSBTT0ZUICYmIChyZXNldF90eXBlICE9IE1JWEVEIHx8IGdldF9naXRfd29ya190cmVlKCkpKQorCQlzZXR1cF93b3JrX3RyZWUoKTsKKworCWlmIChyZXNldF90eXBlID09IE1JWEVEICYmIGlzX2JhcmVfcmVwb3NpdG9yeSgpKQorCQlkaWUoXygiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiKSwKKwkJICAgIF8ocmVzZXRfdHlwZV9uYW1lc1tyZXNldF90eXBlXSkpOworCisJaWYgKGludGVudF90b19hZGQgJiYgcmVzZXRfdHlwZSAhPSBNSVhFRCkKKwkJZGllKF8oIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIikpOworCisJLyogU29mdCByZXNldCBkb2VzIG5vdCB0b3VjaCB0aGUgaW5kZXggZmlsZSBub3IgdGhlIHdvcmtpbmcgdHJlZQorCSAqIGF0IGFsbCwgYnV0IHJlcXVpcmVzIHRoZW0gaW4gYSBnb29kIG9yZGVyLiAgT3RoZXIgcmVzZXRzIHJlc2V0CisJICogdGhlIGluZGV4IGZpbGUgdG8gdGhlIHRyZWUgb2JqZWN0IHdlIGFyZSBzd2l0Y2hpbmcgdG8uICovCisJaWYgKHJlc2V0X3R5cGUgPT0gU09GVCB8fCByZXNldF90eXBlID09IEtFRVApCisJCWRpZV9pZl91bm1lcmdlZF9jYWNoZShyZXNldF90eXBlKTsKKworCWlmIChyZXNldF90eXBlICE9IFNPRlQpIHsKKwkJc3RydWN0IGxvY2tfZmlsZSAqbG9jayA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpsb2NrKSk7CisJCWhvbGRfbG9ja2VkX2luZGV4KGxvY2ssIDEpOworCQlpZiAocmVzZXRfdHlwZSA9PSBNSVhFRCkgeworCQkJaW50IGZsYWdzID0gcXVpZXQgPyBSRUZSRVNIX1FVSUVUIDogUkVGUkVTSF9JTl9QT1JDRUxBSU47CisJCQlpZiAocmVhZF9mcm9tX3RyZWUoJnBhdGhzcGVjLCBzaGExLCBpbnRlbnRfdG9fYWRkKSkKKwkJCQlyZXR1cm4gMTsKKwkJCWlmIChnZXRfZ2l0X3dvcmtfdHJlZSgpKQorCQkJCXJlZnJlc2hfaW5kZXgoJnRoZV9pbmRleCwgZmxhZ3MsIE5VTEwsIE5VTEwsCisJCQkJCSAgICAgIF8oIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IikpOworCQl9IGVsc2UgeworCQkJaW50IGVyciA9IHJlc2V0X2luZGV4KHNoYTEsIHJlc2V0X3R5cGUsIHF1aWV0KTsKKwkJCWlmIChyZXNldF90eXBlID09IEtFRVAgJiYgIWVycikKKwkJCQllcnIgPSByZXNldF9pbmRleChzaGExLCBNSVhFRCwgcXVpZXQpOworCQkJaWYgKGVycikKKwkJCQlkaWUoXygiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iKSwgcmV2KTsKKwkJfQorCisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgbG9jaywgQ09NTUlUX0xPQ0spKQorCQkJZGllKF8oIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iKSk7CisJfQorCisJaWYgKCFwYXRoc3BlYy5uciAmJiAhdW5ib3JuKSB7CisJCS8qIEFueSByZXNldHMgd2l0aG91dCBwYXRocyB1cGRhdGUgSEVBRCB0byB0aGUgaGVhZCBiZWluZworCQkgKiBzd2l0Y2hlZCB0bywgc2F2aW5nIHRoZSBwcmV2aW91cyBoZWFkIGluIE9SSUdfSEVBRCBiZWZvcmUuICovCisJCXVwZGF0ZV9yZWZfc3RhdHVzID0gcmVzZXRfcmVmcyhyZXYsIHNoYTEpOworCisJCWlmIChyZXNldF90eXBlID09IEhBUkQgJiYgIXVwZGF0ZV9yZWZfc3RhdHVzICYmICFxdWlldCkKKwkJCXByaW50X25ld19oZWFkX2xpbmUobG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMSkpOworCX0KKwlpZiAoIXBhdGhzcGVjLm5yKQorCQlyZW1vdmVfYnJhbmNoX3N0YXRlKCk7CisKKwlyZXR1cm4gdXBkYXRlX3JlZl9zdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Jldi1saXN0LmMgYi9idWlsdGluL3Jldi1saXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxZDI5OAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vcmV2LWxpc3QuYwpAQCAtMCwwICsxLDQwNyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInBhY2stYml0bWFwLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiZ3JhcGguaCIKKyNpbmNsdWRlICJiaXNlY3QuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgcmV2X2xpc3RfdXNhZ2VbXSA9CisiZ2l0IHJldi1saXN0IFtPUFRJT05dIDxjb21taXQtaWQ+Li4uIFsgLS0gcGF0aHMuLi4gXVxuIgorIiAgbGltaXRpbmcgb3V0cHV0OlxuIgorIiAgICAtLW1heC1jb3VudD08bj5cbiIKKyIgICAgLS1tYXgtYWdlPTxlcG9jaD5cbiIKKyIgICAgLS1taW4tYWdlPTxlcG9jaD5cbiIKKyIgICAgLS1zcGFyc2VcbiIKKyIgICAgLS1uby1tZXJnZXNcbiIKKyIgICAgLS1taW4tcGFyZW50cz08bj5cbiIKKyIgICAgLS1uby1taW4tcGFyZW50c1xuIgorIiAgICAtLW1heC1wYXJlbnRzPTxuPlxuIgorIiAgICAtLW5vLW1heC1wYXJlbnRzXG4iCisiICAgIC0tcmVtb3ZlLWVtcHR5XG4iCisiICAgIC0tYWxsXG4iCisiICAgIC0tYnJhbmNoZXNcbiIKKyIgICAgLS10YWdzXG4iCisiICAgIC0tcmVtb3Rlc1xuIgorIiAgICAtLXN0ZGluXG4iCisiICAgIC0tcXVpZXRcbiIKKyIgIG9yZGVyaW5nIG91dHB1dDpcbiIKKyIgICAgLS10b3BvLW9yZGVyXG4iCisiICAgIC0tZGF0ZS1vcmRlclxuIgorIiAgICAtLXJldmVyc2VcbiIKKyIgIGZvcm1hdHRpbmcgb3V0cHV0OlxuIgorIiAgICAtLXBhcmVudHNcbiIKKyIgICAgLS1jaGlsZHJlblxuIgorIiAgICAtLW9iamVjdHMgfCAtLW9iamVjdHMtZWRnZVxuIgorIiAgICAtLXVucGFja2VkXG4iCisiICAgIC0taGVhZGVyIHwgLS1wcmV0dHlcbiIKKyIgICAgLS1hYmJyZXY9PG4+IHwgLS1uby1hYmJyZXZcbiIKKyIgICAgLS1hYmJyZXYtY29tbWl0XG4iCisiICAgIC0tbGVmdC1yaWdodFxuIgorIiAgICAtLWNvdW50XG4iCisiICBzcGVjaWFsIHB1cnBvc2U6XG4iCisiICAgIC0tYmlzZWN0XG4iCisiICAgIC0tYmlzZWN0LXZhcnNcbiIKKyIgICAgLS1iaXNlY3QtYWxsIgorOworCitzdGF0aWMgdm9pZCBmaW5pc2hfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSk7CitzdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJldl9saXN0X2luZm8gKmluZm8gPSBkYXRhOworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IGluZm8tPnJldnM7CisKKwlpZiAoaW5mby0+ZmxhZ3MgJiBSRVZfTElTVF9RVUlFVCkgeworCQlmaW5pc2hfY29tbWl0KGNvbW1pdCwgZGF0YSk7CisJCXJldHVybjsKKwl9CisKKwlncmFwaF9zaG93X2NvbW1pdChyZXZzLT5ncmFwaCk7CisKKwlpZiAocmV2cy0+Y291bnQpIHsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgUEFUQ0hTQU1FKQorCQkJcmV2cy0+Y291bnRfc2FtZSsrOworCQllbHNlIGlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKQorCQkJcmV2cy0+Y291bnRfbGVmdCsrOworCQllbHNlCisJCQlyZXZzLT5jb3VudF9yaWdodCsrOworCQlmaW5pc2hfY29tbWl0KGNvbW1pdCwgZGF0YSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaW5mby0+c2hvd190aW1lc3RhbXApCisJCXByaW50ZigiJWx1ICIsIGNvbW1pdC0+ZGF0ZSk7CisJaWYgKGluZm8tPmhlYWRlcl9wcmVmaXgpCisJCWZwdXRzKGluZm8tPmhlYWRlcl9wcmVmaXgsIHN0ZG91dCk7CisKKwlpZiAoIXJldnMtPmdyYXBoKQorCQlmcHV0cyhnZXRfcmV2aXNpb25fbWFyayhyZXZzLCBjb21taXQpLCBzdGRvdXQpOworCWlmIChyZXZzLT5hYmJyZXZfY29tbWl0ICYmIHJldnMtPmFiYnJldikKKwkJZnB1dHMoZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIHJldnMtPmFiYnJldiksCisJCSAgICAgIHN0ZG91dCk7CisJZWxzZQorCQlmcHV0cyhzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSwgc3Rkb3V0KTsKKwlpZiAocmV2cy0+cHJpbnRfcGFyZW50cykgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCXdoaWxlIChwYXJlbnRzKSB7CisJCQlwcmludGYoIiAlcyIsIHNoYTFfdG9faGV4KHBhcmVudHMtPml0ZW0tPm9iamVjdC5zaGExKSk7CisJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJfQorCX0KKwlpZiAocmV2cy0+Y2hpbGRyZW4ubmFtZSkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNoaWxkcmVuOworCisJCWNoaWxkcmVuID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPmNoaWxkcmVuLCAmY29tbWl0LT5vYmplY3QpOworCQl3aGlsZSAoY2hpbGRyZW4pIHsKKwkJCXByaW50ZigiICVzIiwgc2hhMV90b19oZXgoY2hpbGRyZW4tPml0ZW0tPm9iamVjdC5zaGExKSk7CisJCQljaGlsZHJlbiA9IGNoaWxkcmVuLT5uZXh0OworCQl9CisJfQorCXNob3dfZGVjb3JhdGlvbnMocmV2cywgY29tbWl0KTsKKwlpZiAocmV2cy0+Y29tbWl0X2Zvcm1hdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKQorCQlwdXRjaGFyKCcgJyk7CisJZWxzZQorCQlwdXRjaGFyKCdcbicpOworCisJaWYgKHJldnMtPnZlcmJvc2VfaGVhZGVyICYmIGdldF9jYWNoZWRfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisJCWN0eC5hYmJyZXYgPSByZXZzLT5hYmJyZXY7CisJCWN0eC5kYXRlX21vZGUgPSByZXZzLT5kYXRlX21vZGU7CisJCWN0eC5kYXRlX21vZGVfZXhwbGljaXQgPSByZXZzLT5kYXRlX21vZGVfZXhwbGljaXQ7CisJCWN0eC5mbXQgPSByZXZzLT5jb21taXRfZm9ybWF0OworCQljdHgub3V0cHV0X2VuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKKwkJcHJldHR5X3ByaW50X2NvbW1pdCgmY3R4LCBjb21taXQsICZidWYpOworCQlpZiAocmV2cy0+Z3JhcGgpIHsKKwkJCWlmIChidWYubGVuKSB7CisJCQkJaWYgKHJldnMtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfT05FTElORSkKKwkJCQkJZ3JhcGhfc2hvd19vbmVsaW5lKHJldnMtPmdyYXBoKTsKKworCQkJCWdyYXBoX3Nob3dfY29tbWl0X21zZyhyZXZzLT5ncmFwaCwgJmJ1Zik7CisKKwkJCQkvKgorCQkJCSAqIEFkZCBhIG5ld2xpbmUgYWZ0ZXIgdGhlIGNvbW1pdCBtZXNzYWdlLgorCQkJCSAqCisJCQkJICogVXN1YWxseSwgdGhpcyBuZXdsaW5lIHByb2R1Y2VzIGEgYmxhbmsKKwkJCQkgKiBwYWRkaW5nIGxpbmUgYmV0d2VlbiBlbnRyaWVzLCBpbiB3aGljaCBjYXNlCisJCQkJICogd2UgbmVlZCB0byBhZGQgZ3JhcGggcGFkZGluZyBvbiB0aGlzIGxpbmUuCisJCQkJICoKKwkJCQkgKiBIb3dldmVyLCB0aGUgY29tbWl0IG1lc3NhZ2UgbWF5IG5vdCBlbmQgaW4gYQorCQkJCSAqIG5ld2xpbmUuICBJbiB0aGlzIGNhc2UgdGhlIG5ld2xpbmUgc2ltcGx5CisJCQkJICogZW5kcyB0aGUgbGFzdCBsaW5lIG9mIHRoZSBjb21taXQgbWVzc2FnZSwKKwkJCQkgKiBhbmQgd2UgZG9uJ3QgbmVlZCBhbnkgZ3JhcGggb3V0cHV0LiAgKFRoaXMKKwkJCQkgKiBhbHdheXMgaGFwcGVucyB3aXRoIENNSVRfRk1UX09ORUxJTkUsIGFuZCBpdAorCQkJCSAqIGhhcHBlbnMgd2l0aCBDTUlUX0ZNVF9VU0VSRk9STUFUIHdoZW4gdGhlCisJCQkJICogZm9ybWF0IGRvZXNuJ3QgZXhwbGljaXRseSBlbmQgaW4gYSBuZXdsaW5lLikKKwkJCQkgKi8KKwkJCQlpZiAoYnVmLmxlbiAmJiBidWYuYnVmW2J1Zi5sZW4gLSAxXSA9PSAnXG4nKQorCQkJCQlncmFwaF9zaG93X3BhZGRpbmcocmV2cy0+Z3JhcGgpOworCQkJCXB1dGNoYXIoJ1xuJyk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogSWYgdGhlIG1lc3NhZ2UgYnVmZmVyIGlzIGVtcHR5LCBqdXN0IHNob3cKKwkJCQkgKiB0aGUgcmVzdCBvZiB0aGUgZ3JhcGggb3V0cHV0IGZvciB0aGlzCisJCQkJICogY29tbWl0LgorCQkJCSAqLworCQkJCWlmIChncmFwaF9zaG93X3JlbWFpbmRlcihyZXZzLT5ncmFwaCkpCisJCQkJCXB1dGNoYXIoJ1xuJyk7CisJCQkJaWYgKHJldnMtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfT05FTElORSkKKwkJCQkJcHV0Y2hhcignXG4nKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChyZXZzLT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX1VTRVJGT1JNQVQgfHwKKwkJCSAgICBidWYubGVuKSB7CisJCQkJZndyaXRlKGJ1Zi5idWYsIDEsIGJ1Zi5sZW4sIHN0ZG91dCk7CisJCQkJcHV0Y2hhcihpbmZvLT5oZHJfdGVybWluYXRpb24pOworCQkJfQorCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0gZWxzZSB7CisJCWlmIChncmFwaF9zaG93X3JlbWFpbmRlcihyZXZzLT5ncmFwaCkpCisJCQlwdXRjaGFyKCdcbicpOworCX0KKwltYXliZV9mbHVzaF9vcl9kaWUoc3Rkb3V0LCAic3Rkb3V0Iik7CisJZmluaXNoX2NvbW1pdChjb21taXQsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoY29tbWl0LT5wYXJlbnRzKSB7CisJCWZyZWVfY29tbWl0X2xpc3QoY29tbWl0LT5wYXJlbnRzKTsKKwkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwl9CisJZnJlZV9jb21taXRfYnVmZmVyKGNvbW1pdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLAorCQkJICBjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvID0gY2JfZGF0YTsKKwlpZiAob2JqLT50eXBlID09IE9CSl9CTE9CICYmICFoYXNfc2hhMV9maWxlKG9iai0+c2hhMSkpCisJCWRpZSgibWlzc2luZyBibG9iIG9iamVjdCAnJXMnIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJaWYgKGluZm8tPnJldnMtPnZlcmlmeV9vYmplY3RzICYmICFvYmotPnBhcnNlZCAmJiBvYmotPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJcGFyc2Vfb2JqZWN0KG9iai0+c2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb2JqZWN0KHN0cnVjdCBvYmplY3QgKm9iaiwKKwkJCWNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsIGNvbnN0IGNoYXIgKmNvbXBvbmVudCwKKwkJCXZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJldl9saXN0X2luZm8gKmluZm8gPSBjYl9kYXRhOworCWZpbmlzaF9vYmplY3Qob2JqLCBwYXRoLCBjb21wb25lbnQsIGNiX2RhdGEpOworCWlmIChpbmZvLT5mbGFncyAmIFJFVl9MSVNUX1FVSUVUKQorCQlyZXR1cm47CisJc2hvd19vYmplY3Rfd2l0aF9uYW1lKHN0ZG91dCwgb2JqLCBwYXRoLCBjb21wb25lbnQpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2VkZ2Uoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXByaW50ZigiLSVzXG4iLCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Zhcl9zdHIoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWwpCit7CisJcHJpbnRmKCIlcz0nJXMnXG4iLCB2YXIsIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Zhcl9pbnQoY29uc3QgY2hhciAqdmFyLCBpbnQgdmFsKQoreworCXByaW50ZigiJXM9JWRcbiIsIHZhciwgdmFsKTsKK30KKworc3RhdGljIGludCBzaG93X2Jpc2VjdF92YXJzKHN0cnVjdCByZXZfbGlzdF9pbmZvICppbmZvLCBpbnQgcmVhY2hlcywgaW50IGFsbCkKK3sKKwlpbnQgY250LCBmbGFncyA9IGluZm8tPmZsYWdzOworCWNoYXIgaGV4W0dJVF9TSEExX0hFWFNaICsgMV0gPSAiIjsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRyaWVkOworCXN0cnVjdCByZXZfaW5mbyAqcmV2cyA9IGluZm8tPnJldnM7CisKKwlpZiAoIXJldnMtPmNvbW1pdHMpCisJCXJldHVybiAxOworCisJcmV2cy0+Y29tbWl0cyA9IGZpbHRlcl9za2lwcGVkKHJldnMtPmNvbW1pdHMsICZ0cmllZCwKKwkJCQkgICAgICAgZmxhZ3MgJiBCSVNFQ1RfU0hPV19BTEwsCisJCQkJICAgICAgIE5VTEwsIE5VTEwpOworCisJLyoKKwkgKiByZXZzLT5jb21taXRzIGNhbiByZWFjaCAicmVhY2hlcyIgY29tbWl0cyBhbW9uZworCSAqICJhbGwiIGNvbW1pdHMuICBJZiBpdCBpcyBnb29kLCB0aGVuIHRoZXJlIGFyZQorCSAqIChhbGwtcmVhY2hlcykgY29tbWl0cyBsZWZ0IHRvIGJlIGJpc2VjdGVkLgorCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBpdCBpcyBiYWQsIHRoZW4gdGhlIHNldAorCSAqIHRvIGJpc2VjdCBpcyAicmVhY2hlcyIuCisJICogQSBiaXNlY3Qgc2V0IG9mIHNpemUgTiBoYXMgKE4tMSkgY29tbWl0cyBmdXJ0aGVyCisJICogdG8gdGVzdCwgYXMgd2UgYWxyZWFkeSBrbm93IG9uZSBiYWQgb25lLgorCSAqLworCWNudCA9IGFsbCAtIHJlYWNoZXM7CisJaWYgKGNudCA8IHJlYWNoZXMpCisJCWNudCA9IHJlYWNoZXM7CisKKwlpZiAocmV2cy0+Y29tbWl0cykKKwkJc2hhMV90b19oZXhfcihoZXgsIHJldnMtPmNvbW1pdHMtPml0ZW0tPm9iamVjdC5zaGExKTsKKworCWlmIChmbGFncyAmIEJJU0VDVF9TSE9XX0FMTCkgeworCQl0cmF2ZXJzZV9jb21taXRfbGlzdChyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QsIGluZm8pOworCQlwcmludGYoIi0tLS0tLVxuIik7CisJfQorCisJcHJpbnRfdmFyX3N0cigiYmlzZWN0X3JldiIsIGhleCk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X25yIiwgY250IC0gMSk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X2dvb2QiLCBhbGwgLSByZWFjaGVzIC0gMSk7CisJcHJpbnRfdmFyX2ludCgiYmlzZWN0X2JhZCIsIHJlYWNoZXMgLSAxKTsKKwlwcmludF92YXJfaW50KCJiaXNlY3RfYWxsIiwgYWxsKTsKKwlwcmludF92YXJfaW50KCJiaXNlY3Rfc3RlcHMiLCBlc3RpbWF0ZV9iaXNlY3Rfc3RlcHMoYWxsKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X29iamVjdF9mYXN0KAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCWludCBleGNsdWRlLAorCXVpbnQzMl90IG5hbWVfaGFzaCwKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqZm91bmRfcGFjaywKKwlvZmZfdCBmb3VuZF9vZmZzZXQpCit7CisJZnByaW50ZihzdGRvdXQsICIlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCXJldHVybiAxOworfQorCitpbnQgY21kX3Jldl9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCByZXZfbGlzdF9pbmZvIGluZm87CisJaW50IGk7CisJaW50IGJpc2VjdF9saXN0ID0gMDsKKwlpbnQgYmlzZWN0X3Nob3dfdmFycyA9IDA7CisJaW50IGJpc2VjdF9maW5kX2FsbCA9IDA7CisJaW50IHVzZV9iaXRtYXBfaW5kZXggPSAwOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWluaXRfcmV2aXNpb25zKCZyZXZzLCBwcmVmaXgpOworCXJldnMuYWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CisJcmV2cy5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfVU5TUEVDSUZJRUQ7CisJYXJnYyA9IHNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2cywgTlVMTCk7CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJaW5mby5yZXZzID0gJnJldnM7CisJaWYgKHJldnMuYmlzZWN0KQorCQliaXNlY3RfbGlzdCA9IDE7CisKKwlpZiAoRElGRl9PUFRfVFNUKCZyZXZzLmRpZmZvcHQsIFFVSUNLKSkKKwkJaW5mby5mbGFncyB8PSBSRVZfTElTVF9RVUlFVDsKKwlmb3IgKGkgPSAxIDsgaSA8IGFyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhcmd2W2ldOworCisJCWlmICghc3RyY21wKGFyZywgIi0taGVhZGVyIikpIHsKKwkJCXJldnMudmVyYm9zZV9oZWFkZXIgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS10aW1lc3RhbXAiKSkgeworCQkJaW5mby5zaG93X3RpbWVzdGFtcCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWJpc2VjdCIpKSB7CisJCQliaXNlY3RfbGlzdCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWJpc2VjdC1hbGwiKSkgeworCQkJYmlzZWN0X2xpc3QgPSAxOworCQkJYmlzZWN0X2ZpbmRfYWxsID0gMTsKKwkJCWluZm8uZmxhZ3MgfD0gQklTRUNUX1NIT1dfQUxMOworCQkJcmV2cy5zaG93X2RlY29yYXRpb25zID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tYmlzZWN0LXZhcnMiKSkgeworCQkJYmlzZWN0X2xpc3QgPSAxOworCQkJYmlzZWN0X3Nob3dfdmFycyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXVzZS1iaXRtYXAtaW5kZXgiKSkgeworCQkJdXNlX2JpdG1hcF9pbmRleCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXRlc3QtYml0bWFwIikpIHsKKwkJCXRlc3RfYml0bWFwX3dhbGsoJnJldnMpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJdXNhZ2UocmV2X2xpc3RfdXNhZ2UpOworCisJfQorCWlmIChyZXZzLmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfVU5TUEVDSUZJRUQpIHsKKwkJLyogVGhlIGNvbW1hbmQgbGluZSBoYXMgYSAtLXByZXR0eSAgKi8KKwkJaW5mby5oZHJfdGVybWluYXRpb24gPSAnXG4nOworCQlpZiAocmV2cy5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpCisJCQlpbmZvLmhlYWRlcl9wcmVmaXggPSAiIjsKKwkJZWxzZQorCQkJaW5mby5oZWFkZXJfcHJlZml4ID0gImNvbW1pdCAiOworCX0KKwllbHNlIGlmIChyZXZzLnZlcmJvc2VfaGVhZGVyKQorCQkvKiBPbmx5IC0taGVhZGVyIHdhcyBzcGVjaWZpZWQgKi8KKwkJcmV2cy5jb21taXRfZm9ybWF0ID0gQ01JVF9GTVRfUkFXOworCisJaWYgKCghcmV2cy5jb21taXRzICYmCisJICAgICAoIShyZXZzLnRhZ19vYmplY3RzIHx8IHJldnMudHJlZV9vYmplY3RzIHx8IHJldnMuYmxvYl9vYmplY3RzKSAmJgorCSAgICAgICFyZXZzLnBlbmRpbmcubnIpKSB8fAorCSAgICByZXZzLmRpZmYpCisJCXVzYWdlKHJldl9saXN0X3VzYWdlKTsKKworCWlmIChyZXZzLnNob3dfbm90ZXMpCisJCWRpZShfKCJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiKSk7CisKKwlzYXZlX2NvbW1pdF9idWZmZXIgPSAocmV2cy52ZXJib3NlX2hlYWRlciB8fAorCQkJICAgICAgcmV2cy5ncmVwX2ZpbHRlci5wYXR0ZXJuX2xpc3QgfHwKKwkJCSAgICAgIHJldnMuZ3JlcF9maWx0ZXIuaGVhZGVyX2xpc3QpOworCWlmIChiaXNlY3RfbGlzdCkKKwkJcmV2cy5saW1pdGVkID0gMTsKKworCWlmICh1c2VfYml0bWFwX2luZGV4ICYmICFyZXZzLnBydW5lKSB7CisJCWlmIChyZXZzLmNvdW50ICYmICFyZXZzLmxlZnRfcmlnaHQgJiYgIXJldnMuY2hlcnJ5X21hcmspIHsKKwkJCXVpbnQzMl90IGNvbW1pdF9jb3VudDsKKwkJCWlmICghcHJlcGFyZV9iaXRtYXBfd2FsaygmcmV2cykpIHsKKwkJCQljb3VudF9iaXRtYXBfY29tbWl0X2xpc3QoJmNvbW1pdF9jb3VudCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJCQkJcHJpbnRmKCIlZFxuIiwgY29tbWl0X2NvdW50KTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfSBlbHNlIGlmIChyZXZzLnRhZ19vYmplY3RzICYmIHJldnMudHJlZV9vYmplY3RzICYmIHJldnMuYmxvYl9vYmplY3RzKSB7CisJCQlpZiAoIXByZXBhcmVfYml0bWFwX3dhbGsoJnJldnMpKSB7CisJCQkJdHJhdmVyc2VfYml0bWFwX2NvbW1pdF9saXN0KCZzaG93X29iamVjdF9mYXN0KTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJaWYgKHJldnMudHJlZV9vYmplY3RzKQorCQltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcoJnJldnMsIHNob3dfZWRnZSk7CisKKwlpZiAoYmlzZWN0X2xpc3QpIHsKKwkJaW50IHJlYWNoZXMgPSByZWFjaGVzLCBhbGwgPSBhbGw7CisKKwkJcmV2cy5jb21taXRzID0gZmluZF9iaXNlY3Rpb24ocmV2cy5jb21taXRzLCAmcmVhY2hlcywgJmFsbCwKKwkJCQkJICAgICAgYmlzZWN0X2ZpbmRfYWxsKTsKKworCQlpZiAoYmlzZWN0X3Nob3dfdmFycykKKwkJCXJldHVybiBzaG93X2Jpc2VjdF92YXJzKCZpbmZvLCByZWFjaGVzLCBhbGwpOworCX0KKworCXRyYXZlcnNlX2NvbW1pdF9saXN0KCZyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QsICZpbmZvKTsKKworCWlmIChyZXZzLmNvdW50KSB7CisJCWlmIChyZXZzLmxlZnRfcmlnaHQgJiYgcmV2cy5jaGVycnlfbWFyaykKKwkJCXByaW50ZigiJWRcdCVkXHQlZFxuIiwgcmV2cy5jb3VudF9sZWZ0LCByZXZzLmNvdW50X3JpZ2h0LCByZXZzLmNvdW50X3NhbWUpOworCQllbHNlIGlmIChyZXZzLmxlZnRfcmlnaHQpCisJCQlwcmludGYoIiVkXHQlZFxuIiwgcmV2cy5jb3VudF9sZWZ0LCByZXZzLmNvdW50X3JpZ2h0KTsKKwkJZWxzZSBpZiAocmV2cy5jaGVycnlfbWFyaykKKwkJCXByaW50ZigiJWRcdCVkXG4iLCByZXZzLmNvdW50X2xlZnQgKyByZXZzLmNvdW50X3JpZ2h0LCByZXZzLmNvdW50X3NhbWUpOworCQllbHNlCisJCQlwcmludGYoIiVkXG4iLCByZXZzLmNvdW50X2xlZnQgKyByZXZzLmNvdW50X3JpZ2h0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vcmV2LXBhcnNlLmMgYi9idWlsdGluL3Jldi1wYXJzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZDc0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Jldi1wYXJzZS5jCkBAIC0wLDAgKzEsODY0IEBACisvKgorICogcmV2LXBhcnNlLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic3BsaXQtaW5kZXguaCIKKworI2RlZmluZSBET19SRVZTCQkxCisjZGVmaW5lIERPX05PUkVWCTIKKyNkZWZpbmUgRE9fRkxBR1MJNAorI2RlZmluZSBET19OT05GTEFHUwk4CitzdGF0aWMgaW50IGZpbHRlciA9IH4wOworCitzdGF0aWMgY29uc3QgY2hhciAqZGVmOworCisjZGVmaW5lIE5PUk1BTCAwCisjZGVmaW5lIFJFVkVSU0VEIDEKK3N0YXRpYyBpbnQgc2hvd190eXBlID0gTk9STUFMOworCisjZGVmaW5lIFNIT1dfU1lNQk9MSUNfQVNJUyAxCisjZGVmaW5lIFNIT1dfU1lNQk9MSUNfRlVMTCAyCitzdGF0aWMgaW50IHN5bWJvbGljOworc3RhdGljIGludCBhYmJyZXY7CitzdGF0aWMgaW50IGFiYnJldl9yZWY7CitzdGF0aWMgaW50IGFiYnJldl9yZWZfc3RyaWN0Oworc3RhdGljIGludCBvdXRwdXRfc3E7CisKK3N0YXRpYyBpbnQgc3R1Y2tfbG9uZzsKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZl9leGNsdWRlczsKKworLyoKKyAqIFNvbWUgYXJndW1lbnRzIGFyZSByZWxldmFudCAicmV2aXNpb24iIGFyZ3VtZW50cywKKyAqIG90aGVycyBhcmUgYWJvdXQgb3V0cHV0IGZvcm1hdCBvciBvdGhlciBkZXRhaWxzLgorICogVGhpcyBzb3J0cyBpdCBhbGwgb3V0LgorICovCitzdGF0aWMgaW50IGlzX3Jldl9hcmd1bWVudChjb25zdCBjaGFyICphcmcpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnJldl9hcmdzW10gPSB7CisJCSItLWFsbCIsCisJCSItLWJpc2VjdCIsCisJCSItLWRlbnNlIiwKKwkJIi0tYnJhbmNoZXM9IiwKKwkJIi0tYnJhbmNoZXMiLAorCQkiLS1oZWFkZXIiLAorCQkiLS1pZ25vcmUtbWlzc2luZyIsCisJCSItLW1heC1hZ2U9IiwKKwkJIi0tbWF4LWNvdW50PSIsCisJCSItLW1pbi1hZ2U9IiwKKwkJIi0tbm8tbWVyZ2VzIiwKKwkJIi0tbWluLXBhcmVudHM9IiwKKwkJIi0tbm8tbWluLXBhcmVudHMiLAorCQkiLS1tYXgtcGFyZW50cz0iLAorCQkiLS1uby1tYXgtcGFyZW50cyIsCisJCSItLW9iamVjdHMiLAorCQkiLS1vYmplY3RzLWVkZ2UiLAorCQkiLS1wYXJlbnRzIiwKKwkJIi0tcHJldHR5IiwKKwkJIi0tcmVtb3Rlcz0iLAorCQkiLS1yZW1vdGVzIiwKKwkJIi0tZ2xvYj0iLAorCQkiLS1zcGFyc2UiLAorCQkiLS10YWdzPSIsCisJCSItLXRhZ3MiLAorCQkiLS10b3BvLW9yZGVyIiwKKwkJIi0tZGF0ZS1vcmRlciIsCisJCSItLXVucGFja2VkIiwKKwkJTlVMTAorCX07CisJY29uc3QgY2hhciAqKnAgPSByZXZfYXJnczsKKworCS8qIGFjY2VwdCAtPGRpZ2l0PiwgbGlrZSB0cmFkaXRpb25hbCAiaGVhZCIgKi8KKwlpZiAoKCphcmcgPT0gJy0nKSAmJiBpc2RpZ2l0KGFyZ1sxXSkpCisJCXJldHVybiAxOworCisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpzdHIgPSAqcCsrOworCQlpbnQgbGVuOworCQlpZiAoIXN0cikKKwkJCXJldHVybiAwOworCQlsZW4gPSBzdHJsZW4oc3RyKTsKKwkJaWYgKCFzdHJjbXAoYXJnLCBzdHIpIHx8CisJCSAgICAoc3RyW2xlbi0xXSA9PSAnPScgJiYgIXN0cm5jbXAoYXJnLCBzdHIsIGxlbikpKQorCQkJcmV0dXJuIDE7CisJfQorfQorCisvKiBPdXRwdXQgYXJndW1lbnQgYXMgYSBzdHJpbmcsIGVpdGhlciBTUSBvciBub3JtYWwgKi8KK3N0YXRpYyB2b2lkIHNob3coY29uc3QgY2hhciAqYXJnKQoreworCWlmIChvdXRwdXRfc3EpIHsKKwkJaW50IHNxID0gJ1wnJywgY2g7CisKKwkJcHV0Y2hhcihzcSk7CisJCXdoaWxlICgoY2ggPSAqYXJnKyspKSB7CisJCQlpZiAoY2ggPT0gc3EpCisJCQkJZnB1dHMoIidcXCciLCBzdGRvdXQpOworCQkJcHV0Y2hhcihjaCk7CisJCX0KKwkJcHV0Y2hhcihzcSk7CisJCXB1dGNoYXIoJyAnKTsKKwl9CisJZWxzZQorCQlwdXRzKGFyZyk7Cit9CisKKy8qIExpa2Ugc2hvdygpLCBidXQgd2l0aCBhIG5lZ2F0aW9uIHByZWZpeCBhY2NvcmRpbmcgdG8gdHlwZSAqLworc3RhdGljIHZvaWQgc2hvd193aXRoX3R5cGUoaW50IHR5cGUsIGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAodHlwZSAhPSBzaG93X3R5cGUpCisJCXB1dGNoYXIoJ14nKTsKKwlzaG93KGFyZyk7Cit9CisKKy8qIE91dHB1dCBhIHJldmlzaW9uLCBvbmx5IGlmIGZpbHRlciBhbGxvd3MgaXQgKi8KK3N0YXRpYyB2b2lkIHNob3dfcmV2KGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghKGZpbHRlciAmIERPX1JFVlMpKQorCQlyZXR1cm47CisJZGVmID0gTlVMTDsKKworCWlmICgoc3ltYm9saWMgfHwgYWJicmV2X3JlZikgJiYgbmFtZSkgeworCQlpZiAoc3ltYm9saWMgPT0gU0hPV19TWU1CT0xJQ19GVUxMIHx8IGFiYnJldl9yZWYpIHsKKwkJCXVuc2lnbmVkIGNoYXIgZGlzY2FyZFsyMF07CisJCQljaGFyICpmdWxsOworCisJCQlzd2l0Y2ggKGR3aW1fcmVmKG5hbWUsIHN0cmxlbihuYW1lKSwgZGlzY2FyZCwgJmZ1bGwpKSB7CisJCQljYXNlIDA6CisJCQkJLyoKKwkJCQkgKiBOb3QgZm91bmQgLS0gbm90IGEgcmVmLiAgV2UgY291bGQKKwkJCQkgKiBlbWl0ICJuYW1lIiBoZXJlLCBidXQgc3ltYm9saWMtZnVsbAorCQkJCSAqIHVzZXJzIGFyZSBpbnRlcmVzdGVkIGluIGZpbmRpbmcgdGhlCisJCQkJICogcmVmcyBzcGVsbGVkIGluIGZ1bGwsIGFuZCB0aGV5IHdvdWxkCisJCQkJICogbmVlZCB0byBmaWx0ZXIgbm9uLXJlZnMgaWYgd2UgZGlkIHNvLgorCQkJCSAqLworCQkJCWJyZWFrOworCQkJY2FzZSAxOiAvKiBoYXBweSAqLworCQkJCWlmIChhYmJyZXZfcmVmKQorCQkJCQlmdWxsID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYoZnVsbCwKKwkJCQkJCWFiYnJldl9yZWZfc3RyaWN0KTsKKwkJCQlzaG93X3dpdGhfdHlwZSh0eXBlLCBmdWxsKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6IC8qIGFtYmlndW91cyAqLworCQkJCWVycm9yKCJyZWZuYW1lICclcycgaXMgYW1iaWd1b3VzIiwgbmFtZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlmcmVlKGZ1bGwpOworCQl9IGVsc2UgeworCQkJc2hvd193aXRoX3R5cGUodHlwZSwgbmFtZSk7CisJCX0KKwl9CisJZWxzZSBpZiAoYWJicmV2KQorCQlzaG93X3dpdGhfdHlwZSh0eXBlLCBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgYWJicmV2KSk7CisJZWxzZQorCQlzaG93X3dpdGhfdHlwZSh0eXBlLCBzaGExX3RvX2hleChzaGExKSk7Cit9CisKKy8qIE91dHB1dCBhIGZsYWcsIG9ubHkgaWYgZmlsdGVyIGFsbG93cyBpdC4gKi8KK3N0YXRpYyBpbnQgc2hvd19mbGFnKGNvbnN0IGNoYXIgKmFyZykKK3sKKwlpZiAoIShmaWx0ZXIgJiBET19GTEFHUykpCisJCXJldHVybiAwOworCWlmIChmaWx0ZXIgJiAoaXNfcmV2X2FyZ3VtZW50KGFyZykgPyBET19SRVZTIDogRE9fTk9SRVYpKSB7CisJCXNob3coYXJnKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNob3dfZGVmYXVsdCh2b2lkKQoreworCWNvbnN0IGNoYXIgKnMgPSBkZWY7CisKKwlpZiAocykgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJCWRlZiA9IE5VTEw7CisJCWlmICghZ2V0X3NoYTEocywgc2hhMSkpIHsKKwkJCXNob3dfcmV2KE5PUk1BTCwgc2hhMSwgcyk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaG93X3JlZmVyZW5jZShjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCWlmIChyZWZfZXhjbHVkZWQocmVmX2V4Y2x1ZGVzLCByZWZuYW1lKSkKKwkJcmV0dXJuIDA7CisJc2hvd19yZXYoTk9STUFMLCBvaWQtPmhhc2gsIHJlZm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFudGlfcmVmZXJlbmNlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc2hvd19yZXYoUkVWRVJTRUQsIG9pZC0+aGFzaCwgcmVmbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19hYmJyZXYoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzaG93X3JldihOT1JNQUwsIHNoYTEsIE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RhdGVzdHJpbmcoY29uc3QgY2hhciAqZmxhZywgY29uc3QgY2hhciAqZGF0ZXN0cikKK3sKKwlzdGF0aWMgY2hhciBidWZmZXJbMTAwXTsKKworCS8qIGRhdGUgaGFuZGxpbmcgcmVxdWlyZXMgYm90aCBmbGFncyBhbmQgcmV2cyAqLworCWlmICgoZmlsdGVyICYgKERPX0ZMQUdTIHwgRE9fUkVWUykpICE9IChET19GTEFHUyB8IERPX1JFVlMpKQorCQlyZXR1cm47CisJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzJWx1IiwgZmxhZywgYXBwcm94aWRhdGUoZGF0ZXN0cikpOworCXNob3coYnVmZmVyKTsKK30KKworc3RhdGljIGludCBzaG93X2ZpbGUoY29uc3QgY2hhciAqYXJnLCBpbnQgb3V0cHV0X3ByZWZpeCkKK3sKKwlzaG93X2RlZmF1bHQoKTsKKwlpZiAoKGZpbHRlciAmIChET19OT05GTEFHU3xET19OT1JFVikpID09IChET19OT05GTEFHU3xET19OT1JFVikpIHsKKwkJaWYgKG91dHB1dF9wcmVmaXgpIHsKKwkJCWNvbnN0IGNoYXIgKnByZWZpeCA9IHN0YXJ0dXBfaW5mby0+cHJlZml4OworCQkJc2hvdyhwcmVmaXhfZmlsZW5hbWUocHJlZml4LAorCQkJCQkgICAgIHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMCwKKwkJCQkJICAgICBhcmcpKTsKKwkJfSBlbHNlCisJCQlzaG93KGFyZyk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cnlfZGlmZmVyZW5jZShjb25zdCBjaGFyICphcmcpCit7CisJY2hhciAqZG90ZG90OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciBlbmRbMjBdOworCWNvbnN0IGNoYXIgKm5leHQ7CisJY29uc3QgY2hhciAqdGhpczsKKwlpbnQgc3ltbWV0cmljOworCXN0YXRpYyBjb25zdCBjaGFyIGhlYWRfYnlfZGVmYXVsdFtdID0gIkhFQUQiOworCisJaWYgKCEoZG90ZG90ID0gc3Ryc3RyKGFyZywgIi4uIikpKQorCQlyZXR1cm4gMDsKKwluZXh0ID0gZG90ZG90ICsgMjsKKwl0aGlzID0gYXJnOworCXN5bW1ldHJpYyA9ICgqbmV4dCA9PSAnLicpOworCisJKmRvdGRvdCA9IDA7CisJbmV4dCArPSBzeW1tZXRyaWM7CisKKwlpZiAoISpuZXh0KQorCQluZXh0ID0gaGVhZF9ieV9kZWZhdWx0OworCWlmIChkb3Rkb3QgPT0gYXJnKQorCQl0aGlzID0gaGVhZF9ieV9kZWZhdWx0OworCisJaWYgKHRoaXMgPT0gaGVhZF9ieV9kZWZhdWx0ICYmIG5leHQgPT0gaGVhZF9ieV9kZWZhdWx0ICYmCisJICAgICFzeW1tZXRyaWMpIHsKKwkJLyoKKwkJICogSnVzdCAiLi4iPyAgVGhhdCBpcyBub3QgYSByYW5nZSBidXQgdGhlCisJCSAqIHBhdGhzcGVjIGZvciB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKwkJICovCisJCSpkb3Rkb3QgPSAnLic7CisJCXJldHVybiAwOworCX0KKworCWlmICghZ2V0X3NoYTFfY29tbWl0dGlzaCh0aGlzLCBzaGExKSAmJiAhZ2V0X3NoYTFfY29tbWl0dGlzaChuZXh0LCBlbmQpKSB7CisJCXNob3dfcmV2KE5PUk1BTCwgZW5kLCBuZXh0KTsKKwkJc2hvd19yZXYoc3ltbWV0cmljID8gTk9STUFMIDogUkVWRVJTRUQsIHNoYTEsIHRoaXMpOworCQlpZiAoc3ltbWV0cmljKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmV4Y2x1ZGU7CisJCQlzdHJ1Y3QgY29tbWl0ICphLCAqYjsKKwkJCWEgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwkJCWIgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShlbmQpOworCQkJZXhjbHVkZSA9IGdldF9tZXJnZV9iYXNlcyhhLCBiKTsKKwkJCXdoaWxlIChleGNsdWRlKSB7CisJCQkJc3RydWN0IGNvbW1pdF9saXN0ICpuID0gZXhjbHVkZS0+bmV4dDsKKwkJCQlzaG93X3JldihSRVZFUlNFRCwKKwkJCQkJIGV4Y2x1ZGUtPml0ZW0tPm9iamVjdC5zaGExLE5VTEwpOworCQkJCWZyZWUoZXhjbHVkZSk7CisJCQkJZXhjbHVkZSA9IG47CisJCQl9CisJCX0KKwkJKmRvdGRvdCA9ICcuJzsKKwkJcmV0dXJuIDE7CisJfQorCSpkb3Rkb3QgPSAnLic7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X3BhcmVudF9zaG9ydGhhbmRzKGNvbnN0IGNoYXIgKmFyZykKK3sKKwljaGFyICpkb3Rkb3Q7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCWludCBwYXJlbnRzX29ubHk7CisKKwlpZiAoKGRvdGRvdCA9IHN0cnN0cihhcmcsICJeISIpKSkKKwkJcGFyZW50c19vbmx5ID0gMDsKKwllbHNlIGlmICgoZG90ZG90ID0gc3Ryc3RyKGFyZywgIl5AIikpKQorCQlwYXJlbnRzX29ubHkgPSAxOworCisJaWYgKCFkb3Rkb3QgfHwgZG90ZG90WzJdKQorCQlyZXR1cm4gMDsKKworCSpkb3Rkb3QgPSAwOworCWlmIChnZXRfc2hhMV9jb21taXR0aXNoKGFyZywgc2hhMSkpIHsKKwkJKmRvdGRvdCA9ICdeJzsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFwYXJlbnRzX29ubHkpCisJCXNob3dfcmV2KE5PUk1BTCwgc2hhMSwgYXJnKTsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KQorCQlzaG93X3JldihwYXJlbnRzX29ubHkgPyBOT1JNQUwgOiBSRVZFUlNFRCwKKwkJCQlwYXJlbnRzLT5pdGVtLT5vYmplY3Quc2hhMSwgYXJnKTsKKworCSpkb3Rkb3QgPSAnXic7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VvcHRfZHVtcChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpwYXJzZWQgPSBvLT52YWx1ZTsKKwlpZiAodW5zZXQpCisJCXN0cmJ1Zl9hZGRmKHBhcnNlZCwgIiAtLW5vLSVzIiwgby0+bG9uZ19uYW1lKTsKKwllbHNlIGlmIChvLT5zaG9ydF9uYW1lICYmIChvLT5sb25nX25hbWUgPT0gTlVMTCB8fCAhc3R1Y2tfbG9uZykpCisJCXN0cmJ1Zl9hZGRmKHBhcnNlZCwgIiAtJWMiLCBvLT5zaG9ydF9uYW1lKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKHBhcnNlZCwgIiAtLSVzIiwgby0+bG9uZ19uYW1lKTsKKwlpZiAoYXJnKSB7CisJCWlmICghc3R1Y2tfbG9uZykKKwkJCXN0cmJ1Zl9hZGRjaChwYXJzZWQsICcgJyk7CisJCWVsc2UgaWYgKG8tPmxvbmdfbmFtZSkKKwkJCXN0cmJ1Zl9hZGRjaChwYXJzZWQsICc9Jyk7CisJCXNxX3F1b3RlX2J1ZihwYXJzZWQsIGFyZyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqc2tpcHNwYWNlcyhjb25zdCBjaGFyICpzKQoreworCXdoaWxlIChpc3NwYWNlKCpzKSkKKwkJcysrOworCXJldHVybiBzOworfQorCitzdGF0aWMgaW50IGNtZF9wYXJzZW9wdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdGF0aWMgaW50IGtlZXBfZGFzaGRhc2ggPSAwLCBzdG9wX2F0X25vbl9vcHRpb24gPSAwOworCXN0YXRpYyBjaGFyIGNvbnN0ICogY29uc3QgcGFyc2VvcHRfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIpLAorCQlOVUxMCisJfTsKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBwYXJzZW9wdF9vcHRzW10gPSB7CisJCU9QVF9CT09MKDAsICJrZWVwLWRhc2hkYXNoIiwgJmtlZXBfZGFzaGRhc2gsCisJCQkJCU5fKCJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciKSksCisJCU9QVF9CT09MKDAsICJzdG9wLWF0LW5vbi1vcHRpb24iLCAmc3RvcF9hdF9ub25fb3B0aW9uLAorCQkJCQlOXygic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSAiCisJCQkJCSAgICJmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IikpLAorCQlPUFRfQk9PTCgwLCAic3R1Y2stbG9uZyIsICZzdHVja19sb25nLAorCQkJCQlOXygib3V0cHV0IGluIHN0dWNrIGxvbmcgZm9ybSIpKSwKKwkJT1BUX0VORCgpLAorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGFnX2NoYXJzID0gIio9PyEiOworCisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklULCBwYXJzZWQgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICoqdXNhZ2UgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gKm9wdHMgPSBOVUxMOworCWludCBvbmIgPSAwLCBvc3ogPSAwLCB1bmIgPSAwLCB1c3ogPSAwOworCisJc3RyYnVmX2FkZHN0cigmcGFyc2VkLCAic2V0IC0tIik7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBwYXJzZW9wdF9vcHRzLCBwYXJzZW9wdF91c2FnZSwKKwkgICAgICAgICAgICAgICAgICAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCk7CisJaWYgKGFyZ2MgPCAxIHx8IHN0cmNtcChhcmd2WzBdLCAiLS0iKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHBhcnNlb3B0X3VzYWdlLCBwYXJzZW9wdF9vcHRzKTsKKworCS8qIGdldCB0aGUgdXNhZ2UgdXAgdG8gdGhlIGZpcnN0IGxpbmUgd2l0aCBhIC0tIG9uIGl0ICovCisJZm9yICg7OykgeworCQlpZiAoc3RyYnVmX2dldGxpbmUoJnNiLCBzdGRpbiwgJ1xuJykgPT0gRU9GKQorCQkJZGllKCJwcmVtYXR1cmUgZW5kIG9mIGlucHV0Iik7CisJCUFMTE9DX0dST1codXNhZ2UsIHVuYiArIDEsIHVzeik7CisJCWlmICghc3RyY21wKCItLSIsIHNiLmJ1ZikpIHsKKwkJCWlmICh1bmIgPCAxKQorCQkJCWRpZSgibm8gdXNhZ2Ugc3RyaW5nIGdpdmVuIGJlZm9yZSB0aGUgYC0tJyBzZXBhcmF0b3IiKTsKKwkJCXVzYWdlW3VuYl0gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJdXNhZ2VbdW5iKytdID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCX0KKworCS8qIHBhcnNlOiAoPHNob3J0Pnw8c2hvcnQ+LDxsb25nPnw8bG9uZz4pWyo9PyFdKjxhcmdoaW50Pj8gU1ArIDxoZWxwPiAqLworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmc2IsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJY29uc3QgY2hhciAqczsKKwkJY29uc3QgY2hhciAqaGVscDsKKwkJc3RydWN0IG9wdGlvbiAqbzsKKworCQlpZiAoIXNiLmxlbikKKwkJCWNvbnRpbnVlOworCisJCUFMTE9DX0dST1cob3B0cywgb25iICsgMSwgb3N6KTsKKwkJbWVtc2V0KG9wdHMgKyBvbmIsIDAsIHNpemVvZihvcHRzW29uYl0pKTsKKworCQlvID0gJm9wdHNbb25iKytdOworCQloZWxwID0gc3RyY2hyKHNiLmJ1ZiwgJyAnKTsKKwkJaWYgKCFoZWxwIHx8ICpzYi5idWYgPT0gJyAnKSB7CisJCQlvLT50eXBlID0gT1BUSU9OX0dST1VQOworCQkJby0+aGVscCA9IHhzdHJkdXAoc2tpcHNwYWNlcyhzYi5idWYpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJby0+dHlwZSA9IE9QVElPTl9DQUxMQkFDSzsKKwkJby0+aGVscCA9IHhzdHJkdXAoc2tpcHNwYWNlcyhoZWxwKSk7CisJCW8tPnZhbHVlID0gJnBhcnNlZDsKKwkJby0+ZmxhZ3MgPSBQQVJTRV9PUFRfTk9BUkc7CisJCW8tPmNhbGxiYWNrID0gJnBhcnNlb3B0X2R1bXA7CisKKwkJLyogbmFtZShzKSAqLworCQlzID0gc3RycGJyayhzYi5idWYsIGZsYWdfY2hhcnMpOworCQlpZiAocyA9PSBOVUxMKQorCQkJcyA9IGhlbHA7CisKKwkJaWYgKHMgLSBzYi5idWYgPT0gMSkgLyogc2hvcnQgb3B0aW9uIG9ubHkgKi8KKwkJCW8tPnNob3J0X25hbWUgPSAqc2IuYnVmOworCQllbHNlIGlmIChzYi5idWZbMV0gIT0gJywnKSAvKiBsb25nIG9wdGlvbiBvbmx5ICovCisJCQlvLT5sb25nX25hbWUgPSB4bWVtZHVweihzYi5idWYsIHMgLSBzYi5idWYpOworCQllbHNlIHsKKwkJCW8tPnNob3J0X25hbWUgPSAqc2IuYnVmOworCQkJby0+bG9uZ19uYW1lID0geG1lbWR1cHooc2IuYnVmICsgMiwgcyAtIHNiLmJ1ZiAtIDIpOworCQl9CisKKwkJLyogZmxhZ3MgKi8KKwkJd2hpbGUgKHMgPCBoZWxwKSB7CisJCQlzd2l0Y2ggKCpzKyspIHsKKwkJCWNhc2UgJz0nOgorCQkJCW8tPmZsYWdzICY9IH5QQVJTRV9PUFRfTk9BUkc7CisJCQkJY29udGludWU7CisJCQljYXNlICc/JzoKKwkJCQlvLT5mbGFncyAmPSB+UEFSU0VfT1BUX05PQVJHOworCQkJCW8tPmZsYWdzIHw9IFBBUlNFX09QVF9PUFRBUkc7CisJCQkJY29udGludWU7CisJCQljYXNlICchJzoKKwkJCQlvLT5mbGFncyB8PSBQQVJTRV9PUFRfTk9ORUc7CisJCQkJY29udGludWU7CisJCQljYXNlICcqJzoKKwkJCQlvLT5mbGFncyB8PSBQQVJTRV9PUFRfSElEREVOOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcy0tOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocyA8IGhlbHApCisJCQlvLT5hcmdoID0geG1lbWR1cHoocywgaGVscCAtIHMpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCisJLyogcHV0IGFuIE9QVF9FTkQoKSAqLworCUFMTE9DX0dST1cob3B0cywgb25iICsgMSwgb3N6KTsKKwltZW1zZXQob3B0cyArIG9uYiwgMCwgc2l6ZW9mKG9wdHNbb25iXSkpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0cywgdXNhZ2UsCisJCQkoa2VlcF9kYXNoZGFzaCA/IFBBUlNFX09QVF9LRUVQX0RBU0hEQVNIIDogMCkgfAorCQkJKHN0b3BfYXRfbm9uX29wdGlvbiA/IFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04gOiAwKSB8CisJCQlQQVJTRV9PUFRfU0hFTExfRVZBTCk7CisKKwlzdHJidWZfYWRkZigmcGFyc2VkLCAiIC0tIik7CisJc3FfcXVvdGVfYXJndigmcGFyc2VkLCBhcmd2LCAwKTsKKwlwdXRzKHBhcnNlZC5idWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNtZF9zcV9xdW90ZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChhcmdjKQorCQlzcV9xdW90ZV9hcmd2KCZidWYsIGFyZ3YsIDApOworCXByaW50ZigiJXNcbiIsIGJ1Zi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpZV9ub19zaW5nbGVfcmV2KGludCBxdWlldCkKK3sKKwlpZiAocXVpZXQpCisJCWV4aXQoMSk7CisJZWxzZQorCQlkaWUoIk5lZWRlZCBhIHNpbmdsZSByZXZpc2lvbiIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciBidWlsdGluX3Jldl9wYXJzZV91c2FnZVtdID0KK05fKCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyAgICIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyAgICIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisgICAiXG4iCisgICAiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIpOworCitpbnQgY21kX3Jldl9wYXJzZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaSwgYXNfaXMgPSAwLCB2ZXJpZnkgPSAwLCBxdWlldCA9IDAsIHJldnNfY291bnQgPSAwLCB0eXBlID0gMDsKKwlpbnQgaGFzX2Rhc2hkYXNoID0gMDsKKwlpbnQgb3V0cHV0X3ByZWZpeCA9IDA7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisKKwlpZiAoYXJnYyA+IDEgJiYgIXN0cmNtcCgiLS1wYXJzZW9wdCIsIGFyZ3ZbMV0pKQorCQlyZXR1cm4gY21kX3BhcnNlb3B0KGFyZ2MgLSAxLCBhcmd2ICsgMSwgcHJlZml4KTsKKworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKCItLXNxLXF1b3RlIiwgYXJndlsxXSkpCisJCXJldHVybiBjbWRfc3FfcXVvdGUoYXJnYyAtIDIsIGFyZ3YgKyAyKTsKKworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKCItaCIsIGFyZ3ZbMV0pKQorCQl1c2FnZShidWlsdGluX3Jldl9wYXJzZV91c2FnZSk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWlmICghc3RyY21wKGFyZ3ZbaV0sICItLSIpKSB7CisJCQloYXNfZGFzaGRhc2ggPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKworCQlpZiAoIXN0cmNtcChhcmcsICItLWdpdC1wYXRoIikpIHsKKwkJCWlmICghYXJndltpICsgMV0pCisJCQkJZGllKCItLWdpdC1wYXRoIHJlcXVpcmVzIGFuIGFyZ3VtZW50Iik7CisJCQlwdXRzKGdpdF9wYXRoKCIlcyIsIGFyZ3ZbaSArIDFdKSk7CisJCQlpKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYXNfaXMpIHsKKwkJCWlmIChzaG93X2ZpbGUoYXJnLCBvdXRwdXRfcHJlZml4KSAmJiBhc19pcyA8IDIpCisJCQkJdmVyaWZ5X2ZpbGVuYW1lKHByZWZpeCwgYXJnLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywiLW4iKSkgeworCQkJaWYgKCsraSA+PSBhcmdjKQorCQkJCWRpZSgiLW4gcmVxdWlyZXMgYW4gYXJndW1lbnQiKTsKKwkJCWlmICgoZmlsdGVyICYgRE9fRkxBR1MpICYmIChmaWx0ZXIgJiBET19SRVZTKSkgeworCQkJCXNob3coYXJnKTsKKwkJCQlzaG93KGFyZ3ZbaV0pOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKHN0YXJ0c193aXRoKGFyZywgIi1uIikpIHsKKwkJCWlmICgoZmlsdGVyICYgRE9fRkxBR1MpICYmIChmaWx0ZXIgJiBET19SRVZTKSkKKwkJCQlzaG93KGFyZyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgqYXJnID09ICctJykgeworCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgeworCQkJCWFzX2lzID0gMjsKKwkJCQkvKiBQYXNzIG9uIHRoZSAiLS0iIGlmIHdlIHNob3cgYW55dGhpbmcgYnV0IGZpbGVzLi4gKi8KKwkJCQlpZiAoZmlsdGVyICYgKERPX0ZMQUdTIHwgRE9fUkVWUykpCisJCQkJCXNob3dfZmlsZShhcmcsIDApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kZWZhdWx0IikpIHsKKwkJCQlkZWYgPSBhcmd2WysraV07CisJCQkJaWYgKCFkZWYpCisJCQkJCWRpZSgiLS1kZWZhdWx0IHJlcXVpcmVzIGFuIGFyZ3VtZW50Iik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXByZWZpeCIpKSB7CisJCQkJcHJlZml4ID0gYXJndlsrK2ldOworCQkJCWlmICghcHJlZml4KQorCQkJCQlkaWUoIi0tcHJlZml4IHJlcXVpcmVzIGFuIGFyZ3VtZW50Iik7CisJCQkJc3RhcnR1cF9pbmZvLT5wcmVmaXggPSBwcmVmaXg7CisJCQkJb3V0cHV0X3ByZWZpeCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXJldnMtb25seSIpKSB7CisJCQkJZmlsdGVyICY9IH5ET19OT1JFVjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tbm8tcmV2cyIpKSB7CisJCQkJZmlsdGVyICY9IH5ET19SRVZTOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1mbGFncyIpKSB7CisJCQkJZmlsdGVyICY9IH5ET19OT05GTEFHUzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tbm8tZmxhZ3MiKSkgeworCQkJCWZpbHRlciAmPSB+RE9fRkxBR1M7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXZlcmlmeSIpKSB7CisJCQkJZmlsdGVyICY9IH4oRE9fRkxBR1N8RE9fTk9SRVYpOworCQkJCXZlcmlmeSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXF1aWV0IikgfHwgIXN0cmNtcChhcmcsICItcSIpKSB7CisJCQkJcXVpZXQgPSAxOworCQkJCWZsYWdzIHw9IEdFVF9TSEExX1FVSUVUTFk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXNob3J0IikgfHwKKwkJCSAgICBzdGFydHNfd2l0aChhcmcsICItLXNob3J0PSIpKSB7CisJCQkJZmlsdGVyICY9IH4oRE9fRkxBR1N8RE9fTk9SRVYpOworCQkJCXZlcmlmeSA9IDE7CisJCQkJYWJicmV2ID0gREVGQVVMVF9BQkJSRVY7CisJCQkJaWYgKGFyZ1s3XSA9PSAnPScpCisJCQkJCWFiYnJldiA9IHN0cnRvdWwoYXJnICsgOCwgTlVMTCwgMTApOworCQkJCWlmIChhYmJyZXYgPCBNSU5JTVVNX0FCQlJFVikKKwkJCQkJYWJicmV2ID0gTUlOSU1VTV9BQkJSRVY7CisJCQkJZWxzZSBpZiAoNDAgPD0gYWJicmV2KQorCQkJCQlhYmJyZXYgPSA0MDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc3EiKSkgeworCQkJCW91dHB1dF9zcSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLW5vdCIpKSB7CisJCQkJc2hvd190eXBlIF49IFJFVkVSU0VEOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zeW1ib2xpYyIpKSB7CisJCQkJc3ltYm9saWMgPSBTSE9XX1NZTUJPTElDX0FTSVM7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXN5bWJvbGljLWZ1bGwtbmFtZSIpKSB7CisJCQkJc3ltYm9saWMgPSBTSE9XX1NZTUJPTElDX0ZVTEw7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1hYmJyZXYtcmVmIikgJiYKKwkJCSAgICAoIWFyZ1sxMl0gfHwgYXJnWzEyXSA9PSAnPScpKSB7CisJCQkJYWJicmV2X3JlZiA9IDE7CisJCQkJYWJicmV2X3JlZl9zdHJpY3QgPSB3YXJuX2FtYmlndW91c19yZWZzOworCQkJCWlmIChhcmdbMTJdID09ICc9JykgeworCQkJCQlpZiAoIXN0cmNtcChhcmcgKyAxMywgInN0cmljdCIpKQorCQkJCQkJYWJicmV2X3JlZl9zdHJpY3QgPSAxOworCQkJCQllbHNlIGlmICghc3RyY21wKGFyZyArIDEzLCAibG9vc2UiKSkKKwkJCQkJCWFiYnJldl9yZWZfc3RyaWN0ID0gMDsKKwkJCQkJZWxzZQorCQkJCQkJZGllKCJ1bmtub3duIG1vZGUgZm9yICVzIiwgYXJnKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCQkJZm9yX2VhY2hfcmVmKHNob3dfcmVmZXJlbmNlLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChzdGFydHNfd2l0aChhcmcsICItLWRpc2FtYmlndWF0ZT0iKSkgeworCQkJCWZvcl9lYWNoX2FiYnJldihhcmcgKyAxNSwgc2hvd19hYmJyZXYsIE5VTEwpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1iaXNlY3QiKSkgeworCQkJCWZvcl9lYWNoX3JlZl9pbigicmVmcy9iaXNlY3QvYmFkIiwgc2hvd19yZWZlcmVuY2UsIE5VTEwpOworCQkJCWZvcl9lYWNoX3JlZl9pbigicmVmcy9iaXNlY3QvZ29vZCIsIGFudGlfcmVmZXJlbmNlLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChzdGFydHNfd2l0aChhcmcsICItLWJyYW5jaGVzPSIpKSB7CisJCQkJZm9yX2VhY2hfZ2xvYl9yZWZfaW4oc2hvd19yZWZlcmVuY2UsIGFyZyArIDExLAorCQkJCQkicmVmcy9oZWFkcy8iLCBOVUxMKTsKKwkJCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZWZfZXhjbHVkZXMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1icmFuY2hlcyIpKSB7CisJCQkJZm9yX2VhY2hfYnJhbmNoX3JlZihzaG93X3JlZmVyZW5jZSwgTlVMTCk7CisJCQkJY2xlYXJfcmVmX2V4Y2x1c2lvbigmcmVmX2V4Y2x1ZGVzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChzdGFydHNfd2l0aChhcmcsICItLXRhZ3M9IikpIHsKKwkJCQlmb3JfZWFjaF9nbG9iX3JlZl9pbihzaG93X3JlZmVyZW5jZSwgYXJnICsgNywKKwkJCQkJInJlZnMvdGFncy8iLCBOVUxMKTsKKwkJCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZWZfZXhjbHVkZXMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS10YWdzIikpIHsKKwkJCQlmb3JfZWFjaF90YWdfcmVmKHNob3dfcmVmZXJlbmNlLCBOVUxMKTsKKwkJCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZWZfZXhjbHVkZXMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tZ2xvYj0iKSkgeworCQkJCWZvcl9lYWNoX2dsb2JfcmVmKHNob3dfcmVmZXJlbmNlLCBhcmcgKyA3LCBOVUxMKTsKKwkJCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZWZfZXhjbHVkZXMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tcmVtb3Rlcz0iKSkgeworCQkJCWZvcl9lYWNoX2dsb2JfcmVmX2luKHNob3dfcmVmZXJlbmNlLCBhcmcgKyAxMCwKKwkJCQkJInJlZnMvcmVtb3Rlcy8iLCBOVUxMKTsKKwkJCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZWZfZXhjbHVkZXMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1yZW1vdGVzIikpIHsKKwkJCQlmb3JfZWFjaF9yZW1vdGVfcmVmKHNob3dfcmVmZXJlbmNlLCBOVUxMKTsKKwkJCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZWZfZXhjbHVkZXMpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tZXhjbHVkZT0iKSkgeworCQkJCWFkZF9yZWZfZXhjbHVzaW9uKCZyZWZfZXhjbHVkZXMsIGFyZyArIDEwKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tbG9jYWwtZW52LXZhcnMiKSkgeworCQkJCWludCBpOworCQkJCWZvciAoaSA9IDA7IGxvY2FsX3JlcG9fZW52W2ldOyBpKyspCisJCQkJCXByaW50ZigiJXNcbiIsIGxvY2FsX3JlcG9fZW52W2ldKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc2hvdy10b3BsZXZlbCIpKSB7CisJCQkJY29uc3QgY2hhciAqd29ya190cmVlID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKKwkJCQlpZiAod29ya190cmVlKQorCQkJCQlwdXRzKHdvcmtfdHJlZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXNob3ctcHJlZml4IikpIHsKKwkJCQlpZiAocHJlZml4KQorCQkJCQlwdXRzKHByZWZpeCk7CisJCQkJZWxzZQorCQkJCQlwdXRjaGFyKCdcbicpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG93LWNkdXAiKSkgeworCQkJCWNvbnN0IGNoYXIgKnBmeCA9IHByZWZpeDsKKwkJCQlpZiAoIWlzX2luc2lkZV93b3JrX3RyZWUoKSkgeworCQkJCQljb25zdCBjaGFyICp3b3JrX3RyZWUgPQorCQkJCQkJZ2V0X2dpdF93b3JrX3RyZWUoKTsKKwkJCQkJaWYgKHdvcmtfdHJlZSkKKwkJCQkJCXByaW50ZigiJXNcbiIsIHdvcmtfdHJlZSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQl3aGlsZSAocGZ4KSB7CisJCQkJCXBmeCA9IHN0cmNocihwZngsICcvJyk7CisJCQkJCWlmIChwZngpIHsKKwkJCQkJCXBmeCsrOworCQkJCQkJcHJpbnRmKCIuLi8iKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlwdXRjaGFyKCdcbicpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1naXQtZGlyIikpIHsKKwkJCQljb25zdCBjaGFyICpnaXRkaXIgPSBnZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCk7CisJCQkJY2hhciAqY3dkOworCQkJCWludCBsZW47CisJCQkJaWYgKGdpdGRpcikgeworCQkJCQlwdXRzKGdpdGRpcik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAoIXByZWZpeCkgeworCQkJCQlwdXRzKCIuZ2l0Iik7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQljd2QgPSB4Z2V0Y3dkKCk7CisJCQkJbGVuID0gc3RybGVuKGN3ZCk7CisJCQkJcHJpbnRmKCIlcyVzLmdpdFxuIiwgY3dkLCBsZW4gJiYgY3dkW2xlbi0xXSAhPSAnLycgPyAiLyIgOiAiIik7CisJCQkJZnJlZShjd2QpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1naXQtY29tbW9uLWRpciIpKSB7CisJCQkJcHV0cyhnZXRfZ2l0X2NvbW1vbl9kaXIoKSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXJlc29sdmUtZ2l0LWRpciIpKSB7CisJCQkJY29uc3QgY2hhciAqZ2l0ZGlyID0gYXJndlsrK2ldOworCQkJCWlmICghZ2l0ZGlyKQorCQkJCQlkaWUoIi0tcmVzb2x2ZS1naXQtZGlyIHJlcXVpcmVzIGFuIGFyZ3VtZW50Iik7CisJCQkJZ2l0ZGlyID0gcmVzb2x2ZV9naXRkaXIoZ2l0ZGlyKTsKKwkJCQlpZiAoIWdpdGRpcikKKwkJCQkJZGllKCJub3QgYSBnaXRkaXIgJyVzJyIsIGFyZ3ZbaV0pOworCQkJCXB1dHMoZ2l0ZGlyKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0taXMtaW5zaWRlLWdpdC1kaXIiKSkgeworCQkJCXByaW50ZigiJXNcbiIsIGlzX2luc2lkZV9naXRfZGlyKCkgPyAidHJ1ZSIKKwkJCQkJCTogImZhbHNlIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWlzLWluc2lkZS13b3JrLXRyZWUiKSkgeworCQkJCXByaW50ZigiJXNcbiIsIGlzX2luc2lkZV93b3JrX3RyZWUoKSA/ICJ0cnVlIgorCQkJCQkJOiAiZmFsc2UiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0taXMtYmFyZS1yZXBvc2l0b3J5IikpIHsKKwkJCQlwcmludGYoIiVzXG4iLCBpc19iYXJlX3JlcG9zaXRvcnkoKSA/ICJ0cnVlIgorCQkJCQkJOiAiZmFsc2UiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tc2hhcmVkLWluZGV4LXBhdGgiKSkgeworCQkJCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQkJCQlkaWUoXygiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IikpOworCQkJCWlmICh0aGVfaW5kZXguc3BsaXRfaW5kZXgpIHsKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9IHRoZV9pbmRleC5zcGxpdF9pbmRleC0+YmFzZV9zaGExOworCQkJCQlwdXRzKGdpdF9wYXRoKCJzaGFyZWRpbmRleC4lcyIsIHNoYTFfdG9faGV4KHNoYTEpKSk7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tc2luY2U9IikpIHsKKwkJCQlzaG93X2RhdGVzdHJpbmcoIi0tbWF4LWFnZT0iLCBhcmcrOCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1hZnRlcj0iKSkgeworCQkJCXNob3dfZGF0ZXN0cmluZygiLS1tYXgtYWdlPSIsIGFyZys4KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChzdGFydHNfd2l0aChhcmcsICItLWJlZm9yZT0iKSkgeworCQkJCXNob3dfZGF0ZXN0cmluZygiLS1taW4tYWdlPSIsIGFyZys5KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChzdGFydHNfd2l0aChhcmcsICItLXVudGlsPSIpKSB7CisJCQkJc2hvd19kYXRlc3RyaW5nKCItLW1pbi1hZ2U9IiwgYXJnKzgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHNob3dfZmxhZyhhcmcpICYmIHZlcmlmeSkKKwkJCQlkaWVfbm9fc2luZ2xlX3JldihxdWlldCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE5vdCBhIGZsYWcgYXJndW1lbnQgKi8KKwkJaWYgKHRyeV9kaWZmZXJlbmNlKGFyZykpCisJCQljb250aW51ZTsKKwkJaWYgKHRyeV9wYXJlbnRfc2hvcnRoYW5kcyhhcmcpKQorCQkJY29udGludWU7CisJCW5hbWUgPSBhcmc7CisJCXR5cGUgPSBOT1JNQUw7CisJCWlmICgqYXJnID09ICdeJykgeworCQkJbmFtZSsrOworCQkJdHlwZSA9IFJFVkVSU0VEOworCQl9CisJCWlmICghZ2V0X3NoYTFfd2l0aF9jb250ZXh0KG5hbWUsIGZsYWdzLCBzaGExLCAmdW51c2VkKSkgeworCQkJaWYgKHZlcmlmeSkKKwkJCQlyZXZzX2NvdW50Kys7CisJCQllbHNlCisJCQkJc2hvd19yZXYodHlwZSwgc2hhMSwgbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodmVyaWZ5KQorCQkJZGllX25vX3NpbmdsZV9yZXYocXVpZXQpOworCQlpZiAoaGFzX2Rhc2hkYXNoKQorCQkJZGllKCJiYWQgcmV2aXNpb24gJyVzJyIsIGFyZyk7CisJCWFzX2lzID0gMTsKKwkJaWYgKCFzaG93X2ZpbGUoYXJnLCBvdXRwdXRfcHJlZml4KSkKKwkJCWNvbnRpbnVlOworCQl2ZXJpZnlfZmlsZW5hbWUocHJlZml4LCBhcmcsIDEpOworCX0KKwlpZiAodmVyaWZ5KSB7CisJCWlmIChyZXZzX2NvdW50ID09IDEpIHsKKwkJCXNob3dfcmV2KHR5cGUsIHNoYTEsIG5hbWUpOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAocmV2c19jb3VudCA9PSAwICYmIHNob3dfZGVmYXVsdCgpKQorCQkJcmV0dXJuIDA7CisJCWRpZV9ub19zaW5nbGVfcmV2KHF1aWV0KTsKKwl9IGVsc2UKKwkJc2hvd19kZWZhdWx0KCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3JldmVydC5jIGIvYnVpbHRpbi9yZXZlcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmEyYzM2Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi9yZXZlcnQuYwpAQCAtMCwwICsxLDIxNCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJyZXJlcmUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJzZXF1ZW5jZXIuaCIKKworLyoKKyAqIFRoaXMgaW1wbGVtZW50cyB0aGUgYnVpbHRpbnMgcmV2ZXJ0IGFuZCBjaGVycnktcGljay4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorICoKKyAqIEJhc2VkIG9uIGdpdC1yZXZlcnQuc2gsIHdoaWNoIGlzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IExpbnVzIFRvcnZhbGRzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJldmVydF91c2FnZVtdID0geworCU5fKCJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIpLAorCU5fKCJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIpLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2hlcnJ5X3BpY2tfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIpLAorCU5fKCJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IiksCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmFjdGlvbl9uYW1lKGNvbnN0IHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlyZXR1cm4gb3B0cy0+YWN0aW9uID09IFJFUExBWV9SRVZFUlQgPyAicmV2ZXJ0IiA6ICJjaGVycnktcGljayI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgKnJldmVydF9vcl9jaGVycnlfcGlja191c2FnZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJcmV0dXJuIG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUkVWRVJUID8gcmV2ZXJ0X3VzYWdlIDogY2hlcnJ5X3BpY2tfdXNhZ2U7Cit9CisKK3N0YXRpYyBpbnQgb3B0aW9uX3BhcnNlX3goY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgcmVwbGF5X29wdHMgKipvcHRzX3B0ciA9IG9wdC0+dmFsdWU7CisJc3RydWN0IHJlcGxheV9vcHRzICpvcHRzID0gKm9wdHNfcHRyOworCisJaWYgKHVuc2V0KQorCQlyZXR1cm4gMDsKKworCUFMTE9DX0dST1cob3B0cy0+eG9wdHMsIG9wdHMtPnhvcHRzX25yICsgMSwgb3B0cy0+eG9wdHNfYWxsb2MpOworCW9wdHMtPnhvcHRzW29wdHMtPnhvcHRzX25yKytdID0geHN0cmR1cChhcmcpOworCXJldHVybiAwOworfQorCitMQVNUX0FSR19NVVNUX0JFX05VTEwKK3N0YXRpYyB2b2lkIHZlcmlmeV9vcHRfY29tcGF0aWJsZShjb25zdCBjaGFyICptZSwgY29uc3QgY2hhciAqYmFzZV9vcHQsIC4uLikKK3sKKwljb25zdCBjaGFyICp0aGlzX29wdDsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGJhc2Vfb3B0KTsKKwl3aGlsZSAoKHRoaXNfb3B0ID0gdmFfYXJnKGFwLCBjb25zdCBjaGFyICopKSkgeworCQlpZiAodmFfYXJnKGFwLCBpbnQpKQorCQkJYnJlYWs7CisJfQorCXZhX2VuZChhcCk7CisKKwlpZiAodGhpc19vcHQpCisJCWRpZShfKCIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIpLCBtZSwgdGhpc19vcHQsIGJhc2Vfb3B0KTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfYXJncyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwljb25zdCBjaGFyICogY29uc3QgKiB1c2FnZV9zdHIgPSByZXZlcnRfb3JfY2hlcnJ5X3BpY2tfdXNhZ2Uob3B0cyk7CisJY29uc3QgY2hhciAqbWUgPSBhY3Rpb25fbmFtZShvcHRzKTsKKwlpbnQgY21kID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0NNRE1PREUoMCwgInF1aXQiLCAmY21kLCBOXygiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIpLCAncScpLAorCQlPUFRfQ01ETU9ERSgwLCAiY29udGludWUiLCAmY21kLCBOXygicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIpLCAnYycpLAorCQlPUFRfQ01ETU9ERSgwLCAiYWJvcnQiLCAmY21kLCBOXygiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIpLCAnYScpLAorCQlPUFRfQk9PTCgnbicsICJuby1jb21taXQiLCAmb3B0cy0+bm9fY29tbWl0LCBOXygiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiKSksCisJCU9QVF9CT09MKCdlJywgImVkaXQiLCAmb3B0cy0+ZWRpdCwgTl8oImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIikpLAorCQlPUFRfTk9PUF9OT0FSRygncicsIE5VTEwpLAorCQlPUFRfQk9PTCgncycsICJzaWdub2ZmIiwgJm9wdHMtPnNpZ25vZmYsIE5fKCJhZGQgU2lnbmVkLW9mZi1ieToiKSksCisJCU9QVF9JTlRFR0VSKCdtJywgIm1haW5saW5lIiwgJm9wdHMtPm1haW5saW5lLCBOXygicGFyZW50IG51bWJlciIpKSwKKwkJT1BUX1JFUkVSRV9BVVRPVVBEQVRFKCZvcHRzLT5hbGxvd19yZXJlcmVfYXV0byksCisJCU9QVF9TVFJJTkcoMCwgInN0cmF0ZWd5IiwgJm9wdHMtPnN0cmF0ZWd5LCBOXygic3RyYXRlZ3kiKSwgTl8oIm1lcmdlIHN0cmF0ZWd5IikpLAorCQlPUFRfQ0FMTEJBQ0soJ1gnLCAic3RyYXRlZ3ktb3B0aW9uIiwgJm9wdHMsIE5fKCJvcHRpb24iKSwKKwkJCU5fKCJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IiksIG9wdGlvbl9wYXJzZV94KSwKKwkJeyBPUFRJT05fU1RSSU5HLCAnUycsICJncGctc2lnbiIsICZvcHRzLT5ncGdfc2lnbiwgTl8oImtleS1pZCIpLAorCQkgIE5fKCJHUEcgc2lnbiBjb21taXQiKSwgUEFSU0VfT1BUX09QVEFSRywgTlVMTCwgKGludHB0cl90KSAiIiB9LAorCQlPUFRfRU5EKCksCisJCU9QVF9FTkQoKSwKKwkJT1BUX0VORCgpLAorCQlPUFRfRU5EKCksCisJCU9QVF9FTkQoKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlpZiAob3B0cy0+YWN0aW9uID09IFJFUExBWV9QSUNLKSB7CisJCXN0cnVjdCBvcHRpb24gY3BfZXh0cmFbXSA9IHsKKwkJCU9QVF9CT09MKCd4JywgTlVMTCwgJm9wdHMtPnJlY29yZF9vcmlnaW4sIE5fKCJhcHBlbmQgY29tbWl0IG5hbWUiKSksCisJCQlPUFRfQk9PTCgwLCAiZmYiLCAmb3B0cy0+YWxsb3dfZmYsIE5fKCJhbGxvdyBmYXN0LWZvcndhcmQiKSksCisJCQlPUFRfQk9PTCgwLCAiYWxsb3ctZW1wdHkiLCAmb3B0cy0+YWxsb3dfZW1wdHksIE5fKCJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIpKSwKKwkJCU9QVF9CT09MKDAsICJhbGxvdy1lbXB0eS1tZXNzYWdlIiwgJm9wdHMtPmFsbG93X2VtcHR5X21lc3NhZ2UsIE5fKCJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiKSksCisJCQlPUFRfQk9PTCgwLCAia2VlcC1yZWR1bmRhbnQtY29tbWl0cyIsICZvcHRzLT5rZWVwX3JlZHVuZGFudF9jb21taXRzLCBOXygia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiKSksCisJCQlPUFRfRU5EKCksCisJCX07CisJCWlmIChwYXJzZV9vcHRpb25zX2NvbmNhdChvcHRpb25zLCBBUlJBWV9TSVpFKG9wdGlvbnMpLCBjcF9leHRyYSkpCisJCQlkaWUoXygicHJvZ3JhbSBlcnJvciIpKTsKKwl9CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZV9zdHIsCisJCQlQQVJTRV9PUFRfS0VFUF9BUkdWMCB8CisJCQlQQVJTRV9PUFRfS0VFUF9VTktOT1dOKTsKKworCS8qIGltcGxpZXMgYWxsb3dfZW1wdHkgKi8KKwlpZiAob3B0cy0+a2VlcF9yZWR1bmRhbnRfY29tbWl0cykKKwkJb3B0cy0+YWxsb3dfZW1wdHkgPSAxOworCisJLyogU2V0IHRoZSBzdWJjb21tYW5kICovCisJaWYgKGNtZCA9PSAncScpCisJCW9wdHMtPnN1YmNvbW1hbmQgPSBSRVBMQVlfUkVNT1ZFX1NUQVRFOworCWVsc2UgaWYgKGNtZCA9PSAnYycpCisJCW9wdHMtPnN1YmNvbW1hbmQgPSBSRVBMQVlfQ09OVElOVUU7CisJZWxzZSBpZiAoY21kID09ICdhJykKKwkJb3B0cy0+c3ViY29tbWFuZCA9IFJFUExBWV9ST0xMQkFDSzsKKwllbHNlCisJCW9wdHMtPnN1YmNvbW1hbmQgPSBSRVBMQVlfTk9ORTsKKworCS8qIENoZWNrIGZvciBpbmNvbXBhdGlibGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAqLworCWlmIChvcHRzLT5zdWJjb21tYW5kICE9IFJFUExBWV9OT05FKSB7CisJCWNoYXIgKnRoaXNfb3BlcmF0aW9uOworCQlpZiAob3B0cy0+c3ViY29tbWFuZCA9PSBSRVBMQVlfUkVNT1ZFX1NUQVRFKQorCQkJdGhpc19vcGVyYXRpb24gPSAiLS1xdWl0IjsKKwkJZWxzZSBpZiAob3B0cy0+c3ViY29tbWFuZCA9PSBSRVBMQVlfQ09OVElOVUUpCisJCQl0aGlzX29wZXJhdGlvbiA9ICItLWNvbnRpbnVlIjsKKwkJZWxzZSB7CisJCQlhc3NlcnQob3B0cy0+c3ViY29tbWFuZCA9PSBSRVBMQVlfUk9MTEJBQ0spOworCQkJdGhpc19vcGVyYXRpb24gPSAiLS1hYm9ydCI7CisJCX0KKworCQl2ZXJpZnlfb3B0X2NvbXBhdGlibGUobWUsIHRoaXNfb3BlcmF0aW9uLAorCQkJCSItLW5vLWNvbW1pdCIsIG9wdHMtPm5vX2NvbW1pdCwKKwkJCQkiLS1zaWdub2ZmIiwgb3B0cy0+c2lnbm9mZiwKKwkJCQkiLS1tYWlubGluZSIsIG9wdHMtPm1haW5saW5lLAorCQkJCSItLXN0cmF0ZWd5Iiwgb3B0cy0+c3RyYXRlZ3kgPyAxIDogMCwKKwkJCQkiLS1zdHJhdGVneS1vcHRpb24iLCBvcHRzLT54b3B0cyA/IDEgOiAwLAorCQkJCSIteCIsIG9wdHMtPnJlY29yZF9vcmlnaW4sCisJCQkJIi0tZmYiLCBvcHRzLT5hbGxvd19mZiwKKwkJCQlOVUxMKTsKKwl9CisKKwlpZiAob3B0cy0+YWxsb3dfZmYpCisJCXZlcmlmeV9vcHRfY29tcGF0aWJsZShtZSwgIi0tZmYiLAorCQkJCSItLXNpZ25vZmYiLCBvcHRzLT5zaWdub2ZmLAorCQkJCSItLW5vLWNvbW1pdCIsIG9wdHMtPm5vX2NvbW1pdCwKKwkJCQkiLXgiLCBvcHRzLT5yZWNvcmRfb3JpZ2luLAorCQkJCSItLWVkaXQiLCBvcHRzLT5lZGl0LAorCQkJCU5VTEwpOworCisJaWYgKG9wdHMtPnN1YmNvbW1hbmQgIT0gUkVQTEFZX05PTkUpIHsKKwkJb3B0cy0+cmV2cyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBzX3Jfb3B0OworCQlvcHRzLT5yZXZzID0geG1hbGxvYyhzaXplb2YoKm9wdHMtPnJldnMpKTsKKwkJaW5pdF9yZXZpc2lvbnMob3B0cy0+cmV2cywgTlVMTCk7CisJCW9wdHMtPnJldnMtPm5vX3dhbGsgPSBSRVZJU0lPTl9XQUxLX05PX1dBTEtfVU5TT1JURUQ7CisJCWlmIChhcmdjIDwgMikKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZV9zdHIsIG9wdGlvbnMpOworCQlpZiAoIXN0cmNtcChhcmd2WzFdLCAiLSIpKQorCQkJYXJndlsxXSA9ICJAey0xfSI7CisJCW1lbXNldCgmc19yX29wdCwgMCwgc2l6ZW9mKHNfcl9vcHQpKTsKKwkJc19yX29wdC5hc3N1bWVfZGFzaGRhc2ggPSAxOworCQlhcmdjID0gc2V0dXBfcmV2aXNpb25zKGFyZ2MsIGFyZ3YsIG9wdHMtPnJldnMsICZzX3Jfb3B0KTsKKwl9CisKKwlpZiAoYXJnYyA+IDEpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZV9zdHIsIG9wdGlvbnMpOworfQorCitpbnQgY21kX3JldmVydChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgcmVwbGF5X29wdHMgb3B0czsKKwlpbnQgcmVzOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCWlmIChpc2F0dHkoMCkpCisJCW9wdHMuZWRpdCA9IDE7CisJb3B0cy5hY3Rpb24gPSBSRVBMQVlfUkVWRVJUOworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlwYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsICZvcHRzKTsKKwlyZXMgPSBzZXF1ZW5jZXJfcGlja19yZXZpc2lvbnMoJm9wdHMpOworCWlmIChyZXMgPCAwKQorCQlkaWUoXygicmV2ZXJ0IGZhaWxlZCIpKTsKKwlyZXR1cm4gcmVzOworfQorCitpbnQgY21kX2NoZXJyeV9waWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0cnVjdCByZXBsYXlfb3B0cyBvcHRzOworCWludCByZXM7CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJb3B0cy5hY3Rpb24gPSBSRVBMQVlfUElDSzsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJcGFyc2VfYXJncyhhcmdjLCBhcmd2LCAmb3B0cyk7CisJcmVzID0gc2VxdWVuY2VyX3BpY2tfcmV2aXNpb25zKCZvcHRzKTsKKwlpZiAocmVzIDwgMCkKKwkJZGllKF8oImNoZXJyeS1waWNrIGZhaWxlZCIpKTsKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9ybS5jIGIvYnVpbHRpbi9ybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYjk3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3JtLmMKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgKiAiZ2l0IHJtIiBidWlsdGluIGNvbW1hbmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzIDIwMDYKKyAqLworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJ1aWx0aW5fcm1fdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIiksCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCB7CisJaW50IG5yLCBhbGxvYzsKKwlzdHJ1Y3QgeworCQljb25zdCBjaGFyICpuYW1lOworCQljaGFyIGlzX3N1Ym1vZHVsZTsKKwl9ICplbnRyeTsKK30gbGlzdDsKKworc3RhdGljIGludCBnZXRfb3Vyc19jYWNoZV9wb3MoY29uc3QgY2hhciAqcGF0aCwgaW50IHBvcykKK3sKKwlpbnQgaSA9IC1wb3MgLSAxOworCisJd2hpbGUgKChpIDwgYWN0aXZlX25yKSAmJiAhc3RyY21wKGFjdGl2ZV9jYWNoZVtpXS0+bmFtZSwgcGF0aCkpIHsKKwkJaWYgKGNlX3N0YWdlKGFjdGl2ZV9jYWNoZVtpXSkgPT0gMikKKwkJCXJldHVybiBpOworCQlpKys7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZXJyb3JfZmlsZXMoc3RydWN0IHN0cmluZ19saXN0ICpmaWxlc19saXN0LAorCQkJICAgICAgY29uc3QgY2hhciAqbWFpbl9tc2csCisJCQkgICAgICBjb25zdCBjaGFyICpoaW50c19tc2csCisJCQkgICAgICBpbnQgKmVycnMpCit7CisJaWYgKGZpbGVzX2xpc3QtPm5yKSB7CisJCWludCBpOworCQlzdHJ1Y3Qgc3RyYnVmIGVycl9tc2cgPSBTVFJCVUZfSU5JVDsKKworCQlzdHJidWZfYWRkc3RyKCZlcnJfbXNnLCBtYWluX21zZyk7CisJCWZvciAoaSA9IDA7IGkgPCBmaWxlc19saXN0LT5ucjsgaSsrKQorCQkJc3RyYnVmX2FkZGYoJmVycl9tc2csCisJCQkJICAgICJcbiAgICAlcyIsCisJCQkJICAgIGZpbGVzX2xpc3QtPml0ZW1zW2ldLnN0cmluZyk7CisJCWlmIChhZHZpY2Vfcm1faGludHMpCisJCQlzdHJidWZfYWRkc3RyKCZlcnJfbXNnLCBoaW50c19tc2cpOworCQkqZXJycyA9IGVycm9yKCIlcyIsIGVycl9tc2cuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycl9tc2cpOworCX0KK30KKworc3RhdGljIHZvaWQgZXJyb3JfcmVtb3ZpbmdfY29uY3JldGVfc3VibW9kdWxlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmZpbGVzLCBpbnQgKmVycnMpCit7CisJcHJpbnRfZXJyb3JfZmlsZXMoZmlsZXMsCisJCQkgIFFfKCJ0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZSAob3Igb25lIG9mIGl0cyBuZXN0ZWQgIgorCQkJICAgICAic3VibW9kdWxlcylcbiIKKwkJCSAgICAgInVzZXMgYSAuZ2l0IGRpcmVjdG9yeToiLAorCQkJICAgICAidGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzIChvciBvbmUgb2YgdGhlaXIgbmVzdGVkICIKKwkJCSAgICAgInN1Ym1vZHVsZXMpXG4iCisJCQkgICAgICJ1c2UgYSAuZ2l0IGRpcmVjdG9yeToiLCBmaWxlcy0+bnIpLAorCQkJICBfKCJcbih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSAiCisJCQkgICAgIml0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIiksCisJCQkgIGVycnMpOworCXN0cmluZ19saXN0X2NsZWFyKGZpbGVzLCAwKTsKK30KKworc3RhdGljIGludCBjaGVja19zdWJtb2R1bGVzX3VzZV9naXRmaWxlcyh2b2lkKQoreworCWludCBpOworCWludCBlcnJzID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZmlsZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gbGlzdC5lbnRyeVtpXS5uYW1lOworCQlpbnQgcG9zOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJCXBvcyA9IGNhY2hlX25hbWVfcG9zKG5hbWUsIHN0cmxlbihuYW1lKSk7CisJCWlmIChwb3MgPCAwKSB7CisJCQlwb3MgPSBnZXRfb3Vyc19jYWNoZV9wb3MobmFtZSwgcG9zKTsKKwkJCWlmIChwb3MgPCAwKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisKKwkJaWYgKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgfHwKKwkJICAgICFmaWxlX2V4aXN0cyhjZS0+bmFtZSkgfHwKKwkJICAgIGlzX2VtcHR5X2RpcihuYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghc3VibW9kdWxlX3VzZXNfZ2l0ZmlsZShuYW1lKSkKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmZmlsZXMsIG5hbWUpOworCX0KKworCWVycm9yX3JlbW92aW5nX2NvbmNyZXRlX3N1Ym1vZHVsZXMoJmZpbGVzLCAmZXJycyk7CisKKwlyZXR1cm4gZXJyczsKK30KKworc3RhdGljIGludCBjaGVja19sb2NhbF9tb2QodW5zaWduZWQgY2hhciAqaGVhZCwgaW50IGluZGV4X29ubHkpCit7CisJLyoKKwkgKiBJdGVtcyBpbiBsaXN0IGFyZSBhbHJlYWR5IHNvcnRlZCBpbiB0aGUgY2FjaGUgb3JkZXIsCisJICogc28gd2UgY291bGQgZG8gdGhpcyBhIGxvdCBtb3JlIGVmZmljaWVudGx5IGJ5IHVzaW5nCisJICogdHJlZV9kZXNjIGJhc2VkIHRyYXZlcnNhbCBpZiB3ZSB3YW50ZWQgdG8sIGJ1dCBJIGFtCisJICogbGF6eSwgYW5kIHdobyBjYXJlcyBpZiByZW1vdmFsIG9mIGZpbGVzIGlzIGEgdGFkCisJICogc2xvd2VyIHRoYW4gdGhlIHRoZW9yZXRpY2FsIG1heGltdW0gc3BlZWQ/CisJICovCisJaW50IGksIG5vX2hlYWQ7CisJaW50IGVycnMgPSAwOworCXN0cnVjdCBzdHJpbmdfbGlzdCBmaWxlc19zdGFnZWQgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBmaWxlc19jYWNoZWQgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBmaWxlc19zdWJtb2R1bGUgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBmaWxlc19sb2NhbCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisKKwlub19oZWFkID0gaXNfbnVsbF9zaGExKGhlYWQpOworCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWludCBwb3M7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSBsaXN0LmVudHJ5W2ldLm5hbWU7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCXVuc2lnbmVkIG1vZGU7CisJCWludCBsb2NhbF9jaGFuZ2VzID0gMDsKKwkJaW50IHN0YWdlZF9jaGFuZ2VzID0gMDsKKworCQlwb3MgPSBjYWNoZV9uYW1lX3BvcyhuYW1lLCBzdHJsZW4obmFtZSkpOworCQlpZiAocG9zIDwgMCkgeworCQkJLyoKKwkJCSAqIFNraXAgdW5tZXJnZWQgZW50cmllcyBleGNlcHQgZm9yIHBvcHVsYXRlZCBzdWJtb2R1bGVzCisJCQkgKiB0aGF0IGNvdWxkIGxvc2UgaGlzdG9yeSB3aGVuIHJlbW92ZWQuCisJCQkgKi8KKwkJCXBvcyA9IGdldF9vdXJzX2NhY2hlX3BvcyhuYW1lLCBwb3MpOworCQkJaWYgKHBvcyA8IDApCisJCQkJY29udGludWU7CisKKwkJCWlmICghU19JU0dJVExJTksoYWN0aXZlX2NhY2hlW3Bvc10tPmNlX21vZGUpIHx8CisJCQkgICAgaXNfZW1wdHlfZGlyKG5hbWUpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisKKwkJaWYgKGxzdGF0KGNlLT5uYW1lLCAmc3QpIDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBlcnJubyAhPSBFTk9URElSKQorCQkJCXdhcm5pbmcoIiclcyc6ICVzIiwgY2UtPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQkvKiBJdCBhbHJlYWR5IHZhbmlzaGVkIGZyb20gdGhlIHdvcmtpbmcgdHJlZSAqLworCQkJY29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJLyogaWYgYSBmaWxlIHdhcyByZW1vdmVkIGFuZCBpdCBpcyBub3cgYQorCQkJICogZGlyZWN0b3J5LCB0aGF0IGlzIHRoZSBzYW1lIGFzIEVOT0VOVCBhcworCQkJICogZmFyIGFzIGdpdCBpcyBjb25jZXJuZWQ7IHdlIGRvIG5vdCB0cmFjaworCQkJICogZGlyZWN0b3JpZXMgdW5sZXNzIHRoZXkgYXJlIHN1Ym1vZHVsZXMuCisJCQkgKi8KKwkJCWlmICghU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogInJtIiBvZiBhIHBhdGggdGhhdCBoYXMgY2hhbmdlcyBuZWVkIHRvIGJlIHRyZWF0ZWQKKwkJICogY2FyZWZ1bGx5IG5vdCB0byBhbGxvdyBsb3NpbmcgbG9jYWwgY2hhbmdlcworCQkgKiBhY2NpZGVudGFsbHkuICBBIGxvY2FsIGNoYW5nZSBjb3VsZCBiZSAoMSkgZmlsZSBpbgorCQkgKiB3b3JrIHRyZWUgaXMgZGlmZmVyZW50IHNpbmNlIHRoZSBpbmRleDsgYW5kL29yICgyKQorCQkgKiB0aGUgdXNlciBzdGFnZWQgYSBjb250ZW50IHRoYXQgaXMgZGlmZmVyZW50IGZyb20KKwkJICogdGhlIGN1cnJlbnQgY29tbWl0IGluIHRoZSBpbmRleC4KKwkJICoKKwkJICogSW4gc3VjaCBhIGNhc2UsIHlvdSB3b3VsZCBuZWVkIHRvIC0tZm9yY2UgdGhlCisJCSAqIHJlbW92YWwuICBIb3dldmVyLCAicm0gLS1jYWNoZWQiIChyZW1vdmUgb25seSBmcm9tCisJCSAqIHRoZSBpbmRleCkgaXMgc2FmZSBpZiB0aGUgaW5kZXggbWF0Y2hlcyB0aGUgZmlsZSBpbgorCQkgKiB0aGUgd29yayB0cmVlIG9yIHRoZSBIRUFEIGNvbW1pdCwgYXMgaXQgbWVhbnMgdGhhdAorCQkgKiB0aGUgY29udGVudCBiZWluZyByZW1vdmVkIGlzIGF2YWlsYWJsZSBlbHNld2hlcmUuCisJCSAqLworCisJCS8qCisJCSAqIElzIHRoZSBpbmRleCBkaWZmZXJlbnQgZnJvbSB0aGUgZmlsZSBpbiB0aGUgd29yayB0cmVlPworCQkgKiBJZiBpdCdzIGEgc3VibW9kdWxlLCBpcyBpdHMgd29yayB0cmVlIG1vZGlmaWVkPworCQkgKi8KKwkJaWYgKGNlX21hdGNoX3N0YXQoY2UsICZzdCwgMCkgfHwKKwkJICAgIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgJiYKKwkJICAgICAhb2tfdG9fcmVtb3ZlX3N1Ym1vZHVsZShjZS0+bmFtZSkpKQorCQkJbG9jYWxfY2hhbmdlcyA9IDE7CisKKwkJLyoKKwkJICogSXMgdGhlIGluZGV4IGRpZmZlcmVudCBmcm9tIHRoZSBIRUFEIGNvbW1pdD8gIEJ5CisJCSAqIGRlZmluaXRpb24sIGJlZm9yZSB0aGUgdmVyeSBpbml0aWFsIGNvbW1pdCwKKwkJICogYW55dGhpbmcgc3RhZ2VkIGluIHRoZSBpbmRleCBpcyB0cmVhdGVkIGJ5IHRoZSBzYW1lCisJCSAqIHdheSBhcyBjaGFuZ2VkIGZyb20gdGhlIEhFQUQuCisJCSAqLworCQlpZiAobm9faGVhZAorCQkgICAgIHx8IGdldF90cmVlX2VudHJ5KGhlYWQsIG5hbWUsIHNoYTEsICZtb2RlKQorCQkgICAgIHx8IGNlLT5jZV9tb2RlICE9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpCisJCSAgICAgfHwgaGFzaGNtcChjZS0+c2hhMSwgc2hhMSkpCisJCQlzdGFnZWRfY2hhbmdlcyA9IDE7CisKKwkJLyoKKwkJICogSWYgdGhlIGluZGV4IGRvZXMgbm90IG1hdGNoIHRoZSBmaWxlIGluIHRoZSB3b3JrCisJCSAqIHRyZWUgYW5kIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBIRUFEIGNvbW1pdAorCQkgKiBlaXRoZXIsICgxKSAiZ2l0IHJtIiB3aXRob3V0IC0tY2FjaGVkIGRlZmluaXRlbHkKKwkJICogd2lsbCBsb3NlIGluZm9ybWF0aW9uOyAoMikgImdpdCBybSAtLWNhY2hlZCIgd2lsbAorCQkgKiBsb3NlIGluZm9ybWF0aW9uIHVubGVzcyBpdCBpcyBhYm91dCByZW1vdmluZyBhbgorCQkgKiAiaW50ZW50IHRvIGFkZCIgZW50cnkuCisJCSAqLworCQlpZiAobG9jYWxfY2hhbmdlcyAmJiBzdGFnZWRfY2hhbmdlcykgeworCQkJaWYgKCFpbmRleF9vbmx5IHx8ICEoY2UtPmNlX2ZsYWdzICYgQ0VfSU5URU5UX1RPX0FERCkpCisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZmaWxlc19zdGFnZWQsIG5hbWUpOworCQl9CisJCWVsc2UgaWYgKCFpbmRleF9vbmx5KSB7CisJCQlpZiAoc3RhZ2VkX2NoYW5nZXMpCisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZmaWxlc19jYWNoZWQsIG5hbWUpOworCQkJaWYgKGxvY2FsX2NoYW5nZXMpIHsKKwkJCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpICYmCisJCQkJICAgICFzdWJtb2R1bGVfdXNlc19naXRmaWxlKG5hbWUpKQorCQkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmZpbGVzX3N1Ym1vZHVsZSwgbmFtZSk7CisJCQkJZWxzZQorCQkJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmZpbGVzX2xvY2FsLCBuYW1lKTsKKwkJCX0KKwkJfQorCX0KKwlwcmludF9lcnJvcl9maWxlcygmZmlsZXNfc3RhZ2VkLAorCQkJICBRXygidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgIgorCQkJICAgICAiZnJvbSBib3RoIHRoZVxuZmlsZSBhbmQgdGhlIEhFQUQ6IiwKKwkJCSAgICAgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQiCisJCQkgICAgICIgZnJvbSBib3RoIHRoZVxuZmlsZSBhbmQgdGhlIEhFQUQ6IiwKKwkJCSAgICAgZmlsZXNfc3RhZ2VkLm5yKSwKKwkJCSAgXygiXG4odXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIiksCisJCQkgICZlcnJzKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZmlsZXNfc3RhZ2VkLCAwKTsKKwlwcmludF9lcnJvcl9maWxlcygmZmlsZXNfY2FjaGVkLAorCQkJICBRXygidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzICIKKwkJCSAgICAgInN0YWdlZCBpbiB0aGUgaW5kZXg6IiwKKwkJCSAgICAgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzICIKKwkJCSAgICAgInN0YWdlZCBpbiB0aGUgaW5kZXg6IiwgZmlsZXNfY2FjaGVkLm5yKSwKKwkJCSAgXygiXG4odXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIgorCQkJICAgICIgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiKSwKKwkJCSAgJmVycnMpOworCXN0cmluZ19saXN0X2NsZWFyKCZmaWxlc19jYWNoZWQsIDApOworCisJZXJyb3JfcmVtb3ZpbmdfY29uY3JldGVfc3VibW9kdWxlcygmZmlsZXNfc3VibW9kdWxlLCAmZXJycyk7CisKKwlwcmludF9lcnJvcl9maWxlcygmZmlsZXNfbG9jYWwsCisJCQkgIFFfKCJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IiwKKwkJCSAgICAgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIsCisJCQkgICAgIGZpbGVzX2xvY2FsLm5yKSwKKwkJCSAgXygiXG4odXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIgorCQkJICAgICIgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiKSwKKwkJCSAgJmVycnMpOworCXN0cmluZ19saXN0X2NsZWFyKCZmaWxlc19sb2NhbCwgMCk7CisKKwlyZXR1cm4gZXJyczsKK30KKworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9ja19maWxlOworCitzdGF0aWMgaW50IHNob3dfb25seSA9IDAsIGZvcmNlID0gMCwgaW5kZXhfb25seSA9IDAsIHJlY3Vyc2l2ZSA9IDAsIHF1aWV0ID0gMDsKK3N0YXRpYyBpbnQgaWdub3JlX3VubWF0Y2ggPSAwOworCitzdGF0aWMgc3RydWN0IG9wdGlvbiBidWlsdGluX3JtX29wdGlvbnNbXSA9IHsKKwlPUFRfX0RSWV9SVU4oJnNob3dfb25seSwgTl8oImRyeSBydW4iKSksCisJT1BUX19RVUlFVCgmcXVpZXQsIE5fKCJkbyBub3QgbGlzdCByZW1vdmVkIGZpbGVzIikpLAorCU9QVF9CT09MKCAwICwgImNhY2hlZCIsICAgICAgICAgJmluZGV4X29ubHksIE5fKCJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIpKSwKKwlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIikpLAorCU9QVF9CT09MKCdyJywgTlVMTCwgICAgICAgICAgICAgJnJlY3Vyc2l2ZSwgIE5fKCJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIpKSwKKwlPUFRfQk9PTCggMCAsICJpZ25vcmUtdW5tYXRjaCIsICZpZ25vcmVfdW5tYXRjaCwKKwkJCQlOXygiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiKSksCisJT1BUX0VORCgpLAorfTsKKworaW50IGNtZF9ybShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJY2hhciAqc2VlbjsKKworCWdpdG1vZHVsZXNfY29uZmlnKCk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBidWlsdGluX3JtX29wdGlvbnMsCisJCQkgICAgIGJ1aWx0aW5fcm1fdXNhZ2UsIDApOworCWlmICghYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGJ1aWx0aW5fcm1fdXNhZ2UsIGJ1aWx0aW5fcm1fb3B0aW9ucyk7CisKKwlpZiAoIWluZGV4X29ubHkpCisJCXNldHVwX3dvcmtfdHJlZSgpOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmxvY2tfZmlsZSwgMSk7CisKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKF8oImluZGV4IGZpbGUgY29ycnVwdCIpKTsKKworCXBhcnNlX3BhdGhzcGVjKCZwYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9DV0QgfAorCQkgICAgICAgUEFUSFNQRUNfU1RSSVBfU1VCTU9EVUxFX1NMQVNIX0NIRUFQLAorCQkgICAgICAgcHJlZml4LCBhcmd2KTsKKwlyZWZyZXNoX2luZGV4KCZ0aGVfaW5kZXgsIFJFRlJFU0hfUVVJRVQsICZwYXRoc3BlYywgTlVMTCwgTlVMTCk7CisKKwlzZWVuID0geGNhbGxvYyhwYXRoc3BlYy5uciwgMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJaWYgKCFjZV9wYXRoX21hdGNoKGNlLCAmcGF0aHNwZWMsIHNlZW4pKQorCQkJY29udGludWU7CisJCUFMTE9DX0dST1cobGlzdC5lbnRyeSwgbGlzdC5uciArIDEsIGxpc3QuYWxsb2MpOworCQlsaXN0LmVudHJ5W2xpc3QubnJdLm5hbWUgPSB4c3RyZHVwKGNlLT5uYW1lKTsKKwkJbGlzdC5lbnRyeVtsaXN0Lm5yXS5pc19zdWJtb2R1bGUgPSBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSk7CisJCWlmIChsaXN0LmVudHJ5W2xpc3QubnIrK10uaXNfc3VibW9kdWxlICYmCisJCSAgICAhaXNfc3RhZ2luZ19naXRtb2R1bGVzX29rKCkpCisJCQlkaWUgKF8oIlBsZWFzZSwgc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIpKTsKKwl9CisKKwlpZiAocGF0aHNwZWMubnIpIHsKKwkJY29uc3QgY2hhciAqb3JpZ2luYWw7CisJCWludCBzZWVuX2FueSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBwYXRoc3BlYy5ucjsgaSsrKSB7CisJCQlvcmlnaW5hbCA9IHBhdGhzcGVjLml0ZW1zW2ldLm9yaWdpbmFsOworCQkJaWYgKCFzZWVuW2ldKSB7CisJCQkJaWYgKCFpZ25vcmVfdW5tYXRjaCkgeworCQkJCQlkaWUoXygicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIpLAorCQkJCQkgICAgb3JpZ2luYWwpOworCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCXNlZW5fYW55ID0gMTsKKwkJCX0KKwkJCWlmICghcmVjdXJzaXZlICYmIHNlZW5baV0gPT0gTUFUQ0hFRF9SRUNVUlNJVkVMWSkKKwkJCQlkaWUoXygibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIpLAorCQkJCSAgICAqb3JpZ2luYWwgPyBvcmlnaW5hbCA6ICIuIik7CisJCX0KKworCQlpZiAoIXNlZW5fYW55KQorCQkJZXhpdCgwKTsKKwl9CisKKwkvKgorCSAqIElmIG5vdCBmb3JjZWQsIHRoZSBmaWxlLCB0aGUgaW5kZXggYW5kIHRoZSBIRUFEIChpZiBleGlzdHMpCisJICogbXVzdCBtYXRjaDsgYnV0IHRoZSBmaWxlIGNhbiBhbHJlYWR5IGJlZW4gcmVtb3ZlZCwgc2luY2UKKwkgKiB0aGlzIHNlcXVlbmNlIGlzIGEgbmF0dXJhbCAibm92aWNlIiB3YXk6CisJICoKKwkgKglybSBGOyBnaXQgcm0gRgorCSAqCisJICogRnVydGhlciwgaWYgSEVBRCBjb21taXQgZXhpc3RzLCAiZGlmZi1pbmRleCAtLWNhY2hlZCIgbXVzdAorCSAqIHJlcG9ydCBubyBjaGFuZ2VzIHVubGVzcyBmb3JjZWQuCisJICovCisJaWYgKCFmb3JjZSkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlpZiAoZ2V0X3NoYTEoIkhFQUQiLCBzaGExKSkKKwkJCWhhc2hjbHIoc2hhMSk7CisJCWlmIChjaGVja19sb2NhbF9tb2Qoc2hhMSwgaW5kZXhfb25seSkpCisJCQlleGl0KDEpOworCX0gZWxzZSBpZiAoIWluZGV4X29ubHkpIHsKKwkJaWYgKGNoZWNrX3N1Ym1vZHVsZXNfdXNlX2dpdGZpbGVzKCkpCisJCQlleGl0KDEpOworCX0KKworCS8qCisJICogRmlyc3QgcmVtb3ZlIHRoZSBuYW1lcyBmcm9tIHRoZSBpbmRleDogd2Ugd29uJ3QgY29tbWl0CisJICogdGhlIGluZGV4IHVubGVzcyBhbGwgb2YgdGhlbSBzdWNjZWVkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IGxpc3QuZW50cnlbaV0ubmFtZTsKKwkJaWYgKCFxdWlldCkKKwkJCXByaW50Zigicm0gJyVzJ1xuIiwgcGF0aCk7CisKKwkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkpCisJCQlkaWUoXygiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIiksIHBhdGgpOworCX0KKworCWlmIChzaG93X29ubHkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBUaGVuLCB1bmxlc3Mgd2UgdXNlZCAiLS1jYWNoZWQiLCByZW1vdmUgdGhlIGZpbGVuYW1lcyBmcm9tCisJICogdGhlIHdvcmtzcGFjZS4gSWYgd2UgZmFpbCB0byByZW1vdmUgdGhlIGZpcnN0IG9uZSwgd2UKKwkgKiBhYm9ydCB0aGUgImdpdCBybSIgKGJ1dCBvbmNlIHdlJ3ZlIHN1Y2Nlc3NmdWxseSByZW1vdmVkCisJICogYW55IGZpbGUgYXQgYWxsLCB3ZSdsbCBnbyBhaGVhZCBhbmQgY29tbWl0IHRvIGl0IGFsbDoKKwkgKiBieSB0aGVuIHdlJ3ZlIGFscmVhZHkgY29tbWl0dGVkIG91cnNlbHZlcyBhbmQgY2FuJ3QgZmFpbAorCSAqIGluIHRoZSBtaWRkbGUpCisJICovCisJaWYgKCFpbmRleF9vbmx5KSB7CisJCWludCByZW1vdmVkID0gMCwgZ2l0bW9kdWxlc19tb2RpZmllZCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBsaXN0Lm5yOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKnBhdGggPSBsaXN0LmVudHJ5W2ldLm5hbWU7CisJCQlpZiAobGlzdC5lbnRyeVtpXS5pc19zdWJtb2R1bGUpIHsKKwkJCQlpZiAoaXNfZW1wdHlfZGlyKHBhdGgpKSB7CisJCQkJCWlmICghcm1kaXIocGF0aCkpIHsKKwkJCQkJCXJlbW92ZWQgPSAxOworCQkJCQkJaWYgKCFyZW1vdmVfcGF0aF9mcm9tX2dpdG1vZHVsZXMocGF0aCkpCisJCQkJCQkJZ2l0bW9kdWxlc19tb2RpZmllZCA9IDE7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcGF0aCk7CisJCQkJCWlmICghcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmYnVmLCAwKSkgeworCQkJCQkJcmVtb3ZlZCA9IDE7CisJCQkJCQlpZiAoIXJlbW92ZV9wYXRoX2Zyb21fZ2l0bW9kdWxlcyhwYXRoKSkKKwkJCQkJCQlnaXRtb2R1bGVzX21vZGlmaWVkID0gMTsKKwkJCQkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQkJCQkJY29udGludWU7CisJCQkJCX0gZWxzZSBpZiAoIWZpbGVfZXhpc3RzKHBhdGgpKQorCQkJCQkJLyogU3VibW9kdWxlIHdhcyByZW1vdmVkIGJ5IHVzZXIgKi8KKwkJCQkJCWlmICghcmVtb3ZlX3BhdGhfZnJvbV9naXRtb2R1bGVzKHBhdGgpKQorCQkJCQkJCWdpdG1vZHVsZXNfbW9kaWZpZWQgPSAxOworCQkJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJCQkJLyogRmFsbHRocm91Z2ggYW5kIGxldCByZW1vdmVfcGF0aCgpIGZhaWwuICovCisJCQkJfQorCQkJfQorCQkJaWYgKCFyZW1vdmVfcGF0aChwYXRoKSkgeworCQkJCXJlbW92ZWQgPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFyZW1vdmVkKQorCQkJCWRpZV9lcnJubygiZ2l0IHJtOiAnJXMnIiwgcGF0aCk7CisJCX0KKwkJaWYgKGdpdG1vZHVsZXNfbW9kaWZpZWQpCisJCQlzdGFnZV91cGRhdGVkX2dpdG1vZHVsZXMoKTsKKwl9CisKKwlpZiAoYWN0aXZlX2NhY2hlX2NoYW5nZWQpIHsKKwkJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCQlkaWUoXygiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIikpOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zZW5kLXBhY2suYyBiL2J1aWx0aW4vc2VuZC1wYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZlNWQ2NAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vc2VuZC1wYWNrLmMKQEAgLTAsMCArMSwzMDAgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzZW5kLXBhY2suaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImdldHRleHQuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZW5kX3BhY2tfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdICIKKwkgICJbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdICIKKwkgICJbPGhvc3Q+Ol08ZGlyZWN0b3J5PiBbPHJlZj4uLi5dXG4iCisJICAiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIpLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IHNlbmRfcGFja19hcmdzIGFyZ3M7CisKK3N0YXRpYyB2b2lkIHByaW50X2hlbHBlcl9zdGF0dXMoc3RydWN0IHJlZiAqcmVmKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKDsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJY29uc3QgY2hhciAqbXNnID0gTlVMTDsKKwkJY29uc3QgY2hhciAqcmVzOworCisJCXN3aXRjaChyZWYtPnN0YXR1cykgeworCQljYXNlIFJFRl9TVEFUVVNfTk9ORToKKwkJCXJlcyA9ICJlcnJvciI7CisJCQltc2cgPSAibm8gbWF0Y2giOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX09LOgorCQkJcmVzID0gIm9rIjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVGX1NUQVRVU19VUFRPREFURToKKwkJCXJlcyA9ICJvayI7CisJCQltc2cgPSAidXAgdG8gZGF0ZSI7CisJCQlicmVhazsKKworCQljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOgorCQkJcmVzID0gImVycm9yIjsKKwkJCW1zZyA9ICJub24tZmFzdCBmb3J3YXJkIjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfRkVUQ0hfRklSU1Q6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJbXNnID0gImZldGNoIGZpcnN0IjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTkVFRFNfRk9SQ0U6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJbXNnID0gIm5lZWRzIGZvcmNlIjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfU1RBTEU6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJbXNnID0gInN0YWxlIGluZm8iOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9BTFJFQURZX0VYSVNUUzoKKwkJCXJlcyA9ICJlcnJvciI7CisJCQltc2cgPSAiYWxyZWFkeSBleGlzdHMiOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT0RFTEVURToKKwkJY2FzZSBSRUZfU1RBVFVTX1JFTU9URV9SRUpFQ1Q6CisJCQlyZXMgPSAiZXJyb3IiOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRUZfU1RBVFVTX0VYUEVDVElOR19SRVBPUlQ6CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzICVzIiwgcmVzLCByZWYtPm5hbWUpOworCQlpZiAocmVmLT5yZW1vdGVfc3RhdHVzKQorCQkJbXNnID0gcmVmLT5yZW1vdGVfc3RhdHVzOworCQlpZiAobXNnKSB7CisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJyAnKTsKKwkJCXF1b3RlX3R3b19jX3N0eWxlKCZidWYsICIiLCBtc2csIDApOworCQl9CisJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKworCQl3cml0ZV9vcl9kaWUoMSwgYnVmLmJ1ZiwgYnVmLmxlbik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IHNlbmRfcGFja19jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJZ2l0X2dwZ19jb25maWcoaywgdiwgTlVMTCk7CisKKwlpZiAoIXN0cmNtcChrLCAicHVzaC5ncGdzaWduIikpIHsKKwkJY29uc3QgY2hhciAqdmFsdWU7CisJCWlmICghZ2l0X2NvbmZpZ19nZXRfdmFsdWUoInB1c2guZ3Bnc2lnbiIsICZ2YWx1ZSkpIHsKKwkJCXN3aXRjaCAoZ2l0X2NvbmZpZ19tYXliZV9ib29sKCJwdXNoLmdwZ3NpZ24iLCB2YWx1ZSkpIHsKKwkJCWNhc2UgMDoKKwkJCQlhcmdzLnB1c2hfY2VydCA9IFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVI7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJYXJncy5wdXNoX2NlcnQgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0FMV0FZUzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAiaWYtYXNrZWQiKSkKKwkJCQkJYXJncy5wdXNoX2NlcnQgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0lGX0FTS0VEOworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIGVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciAnJXMnIiwgayk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBjbWRfc2VuZF9wYWNrKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpLCBucl9yZWZzcGVjcyA9IDA7CisJY29uc3QgY2hhciAqKnJlZnNwZWNzID0gTlVMTDsKKwljb25zdCBjaGFyICpyZW1vdGVfbmFtZSA9IE5VTEw7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlID0gTlVMTDsKKwljb25zdCBjaGFyICpkZXN0ID0gTlVMTDsKKwlpbnQgZmRbMl07CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm47CisJc3RydWN0IHNoYTFfYXJyYXkgZXh0cmFfaGF2ZSA9IFNIQTFfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgc2hhMV9hcnJheSBzaGFsbG93ID0gU0hBMV9BUlJBWV9JTklUOworCXN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCAqbG9jYWxfcmVmczsKKwlpbnQgcmV0OworCWludCBoZWxwZXJfc3RhdHVzID0gMDsKKwlpbnQgc2VuZF9hbGwgPSAwOworCWludCB2ZXJib3NlID0gMDsKKwljb25zdCBjaGFyICpyZWNlaXZlcGFjayA9ICJnaXQtcmVjZWl2ZS1wYWNrIjsKKwl1bnNpZ25lZCBkcnlfcnVuID0gMDsKKwl1bnNpZ25lZCBzZW5kX21pcnJvciA9IDA7CisJdW5zaWduZWQgZm9yY2VfdXBkYXRlID0gMDsKKwl1bnNpZ25lZCBxdWlldCA9IDA7CisJaW50IHB1c2hfY2VydCA9IDA7CisJdW5zaWduZWQgdXNlX3RoaW5fcGFjayA9IDA7CisJdW5zaWduZWQgYXRvbWljID0gMDsKKwl1bnNpZ25lZCBzdGF0ZWxlc3NfcnBjID0gMDsKKwlpbnQgZmxhZ3M7CisJdW5zaWduZWQgaW50IHJlamVjdF9yZWFzb25zOworCWludCBwcm9ncmVzcyA9IC0xOworCWludCBmcm9tX3N0ZGluID0gMDsKKwlzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uIGNhcyA9IHswfTsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1ZFUkJPU0lUWSgmdmVyYm9zZSksCisJCU9QVF9TVFJJTkcoMCwgInJlY2VpdmUtcGFjayIsICZyZWNlaXZlcGFjaywgInJlY2VpdmUtcGFjayIsIE5fKCJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIpKSwKKwkJT1BUX1NUUklORygwLCAiZXhlYyIsICZyZWNlaXZlcGFjaywgInJlY2VpdmUtcGFjayIsIE5fKCJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIpKSwKKwkJT1BUX1NUUklORygwLCAicmVtb3RlIiwgJnJlbW90ZV9uYW1lLCAicmVtb3RlIiwgTl8oInJlbW90ZSBuYW1lIikpLAorCQlPUFRfQk9PTCgwLCAiYWxsIiwgJnNlbmRfYWxsLCBOXygicHVzaCBhbGwgcmVmcyIpKSwKKwkJT1BUX0JPT0woJ24nICwgImRyeS1ydW4iLCAmZHJ5X3J1biwgTl8oImRyeSBydW4iKSksCisJCU9QVF9CT09MKDAsICJtaXJyb3IiLCAmc2VuZF9taXJyb3IsIE5fKCJtaXJyb3IgYWxsIHJlZnMiKSksCisJCU9QVF9CT09MKCdmJywgImZvcmNlIiwgJmZvcmNlX3VwZGF0ZSwgTl8oImZvcmNlIHVwZGF0ZXMiKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLAorCQkgIDAsICJzaWduZWQiLCAmcHVzaF9jZXJ0LCAieWVzfG5vfGlmLWFza2VkIiwgTl8oIkdQRyBzaWduIHRoZSBwdXNoIiksCisJCSAgUEFSU0VfT1BUX09QVEFSRywgb3B0aW9uX3BhcnNlX3B1c2hfc2lnbmVkIH0sCisJCU9QVF9CT09MKDAsICJwcm9ncmVzcyIsICZwcm9ncmVzcywgTl8oImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIpKSwKKwkJT1BUX0JPT0woMCwgInRoaW4iLCAmdXNlX3RoaW5fcGFjaywgTl8oInVzZSB0aGluIHBhY2siKSksCisJCU9QVF9CT09MKDAsICJhdG9taWMiLCAmYXRvbWljLCBOXygicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiKSksCisJCU9QVF9CT09MKDAsICJzdGF0ZWxlc3MtcnBjIiwgJnN0YXRlbGVzc19ycGMsIE5fKCJ1c2Ugc3RhdGVsZXNzIFJQQyBwcm90b2NvbCIpKSwKKwkJT1BUX0JPT0woMCwgInN0ZGluIiwgJmZyb21fc3RkaW4sIE5fKCJyZWFkIHJlZnMgZnJvbSBzdGRpbiIpKSwKKwkJT1BUX0JPT0woMCwgImhlbHBlci1zdGF0dXMiLCAmaGVscGVyX3N0YXR1cywgTl8oInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiKSksCisJCXsgT1BUSU9OX0NBTExCQUNLLAorCQkgIDAsIENBU19PUFRfTkFNRSwgJmNhcywgTl8oInJlZm5hbWU+OjxleHBlY3QiKSwKKwkJICBOXygicmVxdWlyZSBvbGQgdmFsdWUgb2YgcmVmIHRvIGJlIGF0IHRoaXMgdmFsdWUiKSwKKwkJICBQQVJTRV9PUFRfT1BUQVJHLCBwYXJzZW9wdF9wdXNoX2Nhc19vcHRpb24gfSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoc2VuZF9wYWNrX2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBzZW5kX3BhY2tfdXNhZ2UsIDApOworCWlmIChhcmdjID4gMCkgeworCQlkZXN0ID0gYXJndlswXTsKKwkJcmVmc3BlY3MgPSAoY29uc3QgY2hhciAqKikoYXJndiArIDEpOworCQlucl9yZWZzcGVjcyA9IGFyZ2MgLSAxOworCX0KKworCWlmICghZGVzdCkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHNlbmRfcGFja191c2FnZSwgb3B0aW9ucyk7CisKKwlhcmdzLnZlcmJvc2UgPSB2ZXJib3NlOworCWFyZ3MuZHJ5X3J1biA9IGRyeV9ydW47CisJYXJncy5zZW5kX21pcnJvciA9IHNlbmRfbWlycm9yOworCWFyZ3MuZm9yY2VfdXBkYXRlID0gZm9yY2VfdXBkYXRlOworCWFyZ3MucXVpZXQgPSBxdWlldDsKKwlhcmdzLnB1c2hfY2VydCA9IHB1c2hfY2VydDsKKwlhcmdzLnByb2dyZXNzID0gcHJvZ3Jlc3M7CisJYXJncy51c2VfdGhpbl9wYWNrID0gdXNlX3RoaW5fcGFjazsKKwlhcmdzLmF0b21pYyA9IGF0b21pYzsKKwlhcmdzLnN0YXRlbGVzc19ycGMgPSBzdGF0ZWxlc3NfcnBjOworCisJaWYgKGZyb21fc3RkaW4pIHsKKwkJc3RydWN0IGFyZ3ZfYXJyYXkgYWxsX3JlZnNwZWNzID0gQVJHVl9BUlJBWV9JTklUOworCisJCWZvciAoaSA9IDA7IGkgPCBucl9yZWZzcGVjczsgaSsrKQorCQkJYXJndl9hcnJheV9wdXNoKCZhbGxfcmVmc3BlY3MsIHJlZnNwZWNzW2ldKTsKKworCQlpZiAoYXJncy5zdGF0ZWxlc3NfcnBjKSB7CisJCQljb25zdCBjaGFyICpidWY7CisJCQl3aGlsZSAoKGJ1ZiA9IHBhY2tldF9yZWFkX2xpbmUoMCwgTlVMTCkpKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmYWxsX3JlZnNwZWNzLCBidWYpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJCQl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIHN0ZGluLCAnXG4nKSAhPSBFT0YpCisJCQkJYXJndl9hcnJheV9wdXNoKCZhbGxfcmVmc3BlY3MsIGxpbmUuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwkJfQorCisJCXJlZnNwZWNzID0gYWxsX3JlZnNwZWNzLmFyZ3Y7CisJCW5yX3JlZnNwZWNzID0gYWxsX3JlZnNwZWNzLmFyZ2M7CisJfQorCisJLyoKKwkgKiAtLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZTsgbmVpdGhlciBtYWtlcyBzZW5zZQorCSAqIHdpdGggYW55IHJlZnNwZWNzLgorCSAqLworCWlmICgocmVmc3BlY3MgJiYgKHNlbmRfYWxsIHx8IGFyZ3Muc2VuZF9taXJyb3IpKSB8fAorCSAgICAoc2VuZF9hbGwgJiYgYXJncy5zZW5kX21pcnJvcikpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhzZW5kX3BhY2tfdXNhZ2UsIG9wdGlvbnMpOworCisJaWYgKHJlbW90ZV9uYW1lKSB7CisJCXJlbW90ZSA9IHJlbW90ZV9nZXQocmVtb3RlX25hbWUpOworCQlpZiAoIXJlbW90ZV9oYXNfdXJsKHJlbW90ZSwgZGVzdCkpIHsKKwkJCWRpZSgiRGVzdGluYXRpb24gJXMgaXMgbm90IGEgdXJpIGZvciAlcyIsCisJCQkgICAgZGVzdCwgcmVtb3RlX25hbWUpOworCQl9CisJfQorCisJaWYgKHByb2dyZXNzID09IC0xKQorCQlwcm9ncmVzcyA9ICFhcmdzLnF1aWV0ICYmIGlzYXR0eSgyKTsKKwlhcmdzLnByb2dyZXNzID0gcHJvZ3Jlc3M7CisKKwlpZiAoYXJncy5zdGF0ZWxlc3NfcnBjKSB7CisJCWNvbm4gPSBOVUxMOworCQlmZFswXSA9IDA7CisJCWZkWzFdID0gMTsKKwl9IGVsc2UgeworCQljb25uID0gZ2l0X2Nvbm5lY3QoZmQsIGRlc3QsIHJlY2VpdmVwYWNrLAorCQkJYXJncy52ZXJib3NlID8gQ09OTkVDVF9WRVJCT1NFIDogMCk7CisJfQorCisJZ2V0X3JlbW90ZV9oZWFkcyhmZFswXSwgTlVMTCwgMCwgJnJlbW90ZV9yZWZzLCBSRUZfTk9STUFMLAorCQkJICZleHRyYV9oYXZlLCAmc2hhbGxvdyk7CisKKwl0cmFuc3BvcnRfdmVyaWZ5X3JlbW90ZV9uYW1lcyhucl9yZWZzcGVjcywgcmVmc3BlY3MpOworCisJbG9jYWxfcmVmcyA9IGdldF9sb2NhbF9oZWFkcygpOworCisJZmxhZ3MgPSBNQVRDSF9SRUZTX05PTkU7CisKKwlpZiAoc2VuZF9hbGwpCisJCWZsYWdzIHw9IE1BVENIX1JFRlNfQUxMOworCWlmIChhcmdzLnNlbmRfbWlycm9yKQorCQlmbGFncyB8PSBNQVRDSF9SRUZTX01JUlJPUjsKKworCS8qIG1hdGNoIHRoZW0gdXAgKi8KKwlpZiAobWF0Y2hfcHVzaF9yZWZzKGxvY2FsX3JlZnMsICZyZW1vdGVfcmVmcywgbnJfcmVmc3BlY3MsIHJlZnNwZWNzLCBmbGFncykpCisJCXJldHVybiAtMTsKKworCWlmICghaXNfZW1wdHlfY2FzKCZjYXMpKQorCQlhcHBseV9wdXNoX2NhcygmY2FzLCByZW1vdGUsIHJlbW90ZV9yZWZzKTsKKworCXNldF9yZWZfc3RhdHVzX2Zvcl9wdXNoKHJlbW90ZV9yZWZzLCBhcmdzLnNlbmRfbWlycm9yLAorCQlhcmdzLmZvcmNlX3VwZGF0ZSk7CisKKwlyZXQgPSBzZW5kX3BhY2soJmFyZ3MsIGZkLCBjb25uLCByZW1vdGVfcmVmcywgJmV4dHJhX2hhdmUpOworCisJaWYgKGhlbHBlcl9zdGF0dXMpCisJCXByaW50X2hlbHBlcl9zdGF0dXMocmVtb3RlX3JlZnMpOworCisJY2xvc2UoZmRbMV0pOworCWNsb3NlKGZkWzBdKTsKKworCXJldCB8PSBmaW5pc2hfY29ubmVjdChjb25uKTsKKworCWlmICghaGVscGVyX3N0YXR1cykKKwkJdHJhbnNwb3J0X3ByaW50X3B1c2hfc3RhdHVzKGRlc3QsIHJlbW90ZV9yZWZzLCBhcmdzLnZlcmJvc2UsIDAsICZyZWplY3RfcmVhc29ucyk7CisKKwlpZiAoIWFyZ3MuZHJ5X3J1biAmJiByZW1vdGUpIHsKKwkJc3RydWN0IHJlZiAqcmVmOworCQlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJCXRyYW5zcG9ydF91cGRhdGVfdHJhY2tpbmdfcmVmKHJlbW90ZSwgcmVmLCBhcmdzLnZlcmJvc2UpOworCX0KKworCWlmICghcmV0ICYmICF0cmFuc3BvcnRfcmVmc19wdXNoZWQocmVtb3RlX3JlZnMpKQorCQlmcHJpbnRmKHN0ZGVyciwgIkV2ZXJ5dGhpbmcgdXAtdG8tZGF0ZVxuIik7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zaG9ydGxvZy5jIGIvYnVpbHRpbi9zaG9ydGxvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwN2NjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Nob3J0bG9nLmMKQEAgLTAsMCArMSwzMjkgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisjaW5jbHVkZSAic2hvcnRsb2cuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjaGFyIGNvbnN0ICogY29uc3Qgc2hvcnRsb2dfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSBbPHBhdGg+Li4uXV0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfYnlfbnVtYmVyKGNvbnN0IHZvaWQgKmExLCBjb25zdCB2b2lkICphMikKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaTEgPSBhMSwgKmkyID0gYTI7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsMSA9IGkxLT51dGlsLCAqbDIgPSBpMi0+dXRpbDsKKworCWlmIChsMS0+bnIgPCBsMi0+bnIpCisJCXJldHVybiAxOworCWVsc2UgaWYgKGwxLT5uciA9PSBsMi0+bnIpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfb25lX3JlY29yZChzdHJ1Y3Qgc2hvcnRsb2cgKmxvZywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm9uZWxpbmUpCit7CisJY29uc3QgY2hhciAqZG90MyA9IGxvZy0+Y29tbW9uX3JlcG9fcHJlZml4OworCWNoYXIgKmJ1ZmZlciwgKnA7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJY29uc3QgY2hhciAqbWFpbGJ1ZiwgKm5hbWVidWY7CisJc2l6ZV90IG5hbWVsZW4sIG1haWxsZW47CisJY29uc3QgY2hhciAqZW9sOworCXN0cnVjdCBzdHJidWYgc3ViamVjdCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgbmFtZW1haWxidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgaWRlbnRfc3BsaXQgaWRlbnQ7CisKKwlpZiAoc3BsaXRfaWRlbnRfbGluZSgmaWRlbnQsIGF1dGhvciwgc3RybGVuKGF1dGhvcikpKQorCQlyZXR1cm47CisKKwluYW1lYnVmID0gaWRlbnQubmFtZV9iZWdpbjsKKwltYWlsYnVmID0gaWRlbnQubWFpbF9iZWdpbjsKKwluYW1lbGVuID0gaWRlbnQubmFtZV9lbmQgLSBpZGVudC5uYW1lX2JlZ2luOworCW1haWxsZW4gPSBpZGVudC5tYWlsX2VuZCAtIGlkZW50Lm1haWxfYmVnaW47CisKKwltYXBfdXNlcigmbG9nLT5tYWlsbWFwLCAmbWFpbGJ1ZiwgJm1haWxsZW4sICZuYW1lYnVmLCAmbmFtZWxlbik7CisJc3RyYnVmX2FkZCgmbmFtZW1haWxidWYsIG5hbWVidWYsIG5hbWVsZW4pOworCisJaWYgKGxvZy0+ZW1haWwpCisJCXN0cmJ1Zl9hZGRmKCZuYW1lbWFpbGJ1ZiwgIiA8JS4qcz4iLCAoaW50KW1haWxsZW4sIG1haWxidWYpOworCisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydCgmbG9nLT5saXN0LCBuYW1lbWFpbGJ1Zi5idWYpOworCWlmIChpdGVtLT51dGlsID09IE5VTEwpCisJCWl0ZW0tPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RyaW5nX2xpc3QpKTsKKworCS8qIFNraXAgYW55IGxlYWRpbmcgd2hpdGVzcGFjZSwgaW5jbHVkaW5nIGFueSBibGFuayBsaW5lcy4gKi8KKwl3aGlsZSAoKm9uZWxpbmUgJiYgaXNzcGFjZSgqb25lbGluZSkpCisJCW9uZWxpbmUrKzsKKwllb2wgPSBzdHJjaHIob25lbGluZSwgJ1xuJyk7CisJaWYgKCFlb2wpCisJCWVvbCA9IG9uZWxpbmUgKyBzdHJsZW4ob25lbGluZSk7CisJaWYgKHN0YXJ0c193aXRoKG9uZWxpbmUsICJbUEFUQ0giKSkgeworCQljaGFyICplb2IgPSBzdHJjaHIob25lbGluZSwgJ10nKTsKKwkJaWYgKGVvYiAmJiAoIWVvbCB8fCBlb2IgPCBlb2wpKQorCQkJb25lbGluZSA9IGVvYiArIDE7CisJfQorCXdoaWxlICgqb25lbGluZSAmJiBpc3NwYWNlKCpvbmVsaW5lKSAmJiAqb25lbGluZSAhPSAnXG4nKQorCQlvbmVsaW5lKys7CisJZm9ybWF0X3N1YmplY3QoJnN1YmplY3QsIG9uZWxpbmUsICIgIik7CisJYnVmZmVyID0gc3RyYnVmX2RldGFjaCgmc3ViamVjdCwgTlVMTCk7CisKKwlpZiAoZG90MykgeworCQlpbnQgZG90M2xlbiA9IHN0cmxlbihkb3QzKTsKKwkJaWYgKGRvdDNsZW4gPiA1KSB7CisJCQl3aGlsZSAoKHAgPSBzdHJzdHIoYnVmZmVyLCBkb3QzKSkgIT0gTlVMTCkgeworCQkJCWludCB0YWlsbGVuID0gc3RybGVuKHApIC0gZG90M2xlbjsKKwkJCQltZW1jcHkocCwgIi8uLi4vIiwgNSk7CisJCQkJbWVtbW92ZShwICsgNSwgcCArIGRvdDNsZW4sIHRhaWxsZW4gKyAxKTsKKwkJCX0KKwkJfQorCX0KKworCXN0cmluZ19saXN0X2FwcGVuZChpdGVtLT51dGlsLCBidWZmZXIpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2Zyb21fc3RkaW4oc3RydWN0IHNob3J0bG9nICpsb2cpCit7CisJY2hhciBhdXRob3JbMTAyNF0sIG9uZWxpbmVbMTAyNF07CisKKwl3aGlsZSAoZmdldHMoYXV0aG9yLCBzaXplb2YoYXV0aG9yKSwgc3RkaW4pICE9IE5VTEwpIHsKKwkJaWYgKCEoYXV0aG9yWzBdID09ICdBJyB8fCBhdXRob3JbMF0gPT0gJ2EnKSB8fAorCQkgICAgIXN0YXJ0c193aXRoKGF1dGhvciArIDEsICJ1dGhvcjogIikpCisJCQljb250aW51ZTsKKwkJd2hpbGUgKGZnZXRzKG9uZWxpbmUsIHNpemVvZihvbmVsaW5lKSwgc3RkaW4pICYmCisJCSAgICAgICBvbmVsaW5lWzBdICE9ICdcbicpCisJCQk7IC8qIGRpc2NhcmQgaGVhZGVycyAqLworCQl3aGlsZSAoZmdldHMob25lbGluZSwgc2l6ZW9mKG9uZWxpbmUpLCBzdGRpbikgJiYKKwkJICAgICAgIG9uZWxpbmVbMF0gPT0gJ1xuJykKKwkJCTsgLyogZGlzY2FyZCBibGFua3MgKi8KKwkJaW5zZXJ0X29uZV9yZWNvcmQobG9nLCBhdXRob3IgKyA4LCBvbmVsaW5lKTsKKwl9Cit9CisKK3ZvaWQgc2hvcnRsb2dfYWRkX2NvbW1pdChzdHJ1Y3Qgc2hvcnRsb2cgKmxvZywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWNvbnN0IGNoYXIgKmF1dGhvciA9IE5VTEwsICpidWZmZXI7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHVmYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9SQVcsIGNvbW1pdCwgJmJ1Zik7CisJYnVmZmVyID0gYnVmLmJ1ZjsKKwl3aGlsZSAoKmJ1ZmZlciAmJiAqYnVmZmVyICE9ICdcbicpIHsKKwkJY29uc3QgY2hhciAqZW9sID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisKKwkJaWYgKGVvbCA9PSBOVUxMKQorCQkJZW9sID0gYnVmZmVyICsgc3RybGVuKGJ1ZmZlcik7CisJCWVsc2UKKwkJCWVvbCsrOworCisJCWlmIChzdGFydHNfd2l0aChidWZmZXIsICJhdXRob3IgIikpCisJCQlhdXRob3IgPSBidWZmZXIgKyA3OworCQlidWZmZXIgPSBlb2w7CisJfQorCWlmICghYXV0aG9yKSB7CisJCXdhcm5pbmcoXygiTWlzc2luZyBhdXRob3I6ICVzIiksCisJCSAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCXJldHVybjsKKwl9CisJaWYgKGxvZy0+dXNlcl9mb3JtYXQpIHsKKwkJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwkJY3R4LmZtdCA9IENNSVRfRk1UX1VTRVJGT1JNQVQ7CisJCWN0eC5hYmJyZXYgPSBsb2ctPmFiYnJldjsKKwkJY3R4LnN1YmplY3QgPSAiIjsKKwkJY3R4LmFmdGVyX3N1YmplY3QgPSAiIjsKKwkJY3R4LmRhdGVfbW9kZS50eXBlID0gREFURV9OT1JNQUw7CisJCWN0eC5vdXRwdXRfZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCQlwcmV0dHlfcHJpbnRfY29tbWl0KCZjdHgsIGNvbW1pdCwgJnVmYnVmKTsKKwkJYnVmZmVyID0gdWZidWYuYnVmOworCX0gZWxzZSBpZiAoKmJ1ZmZlcikgeworCQlidWZmZXIrKzsKKwl9CisJaW5zZXJ0X29uZV9yZWNvcmQobG9nLCBhdXRob3IsICEqYnVmZmVyID8gIjxub25lPiIgOiBidWZmZXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZ1ZmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9mcm9tX3JldihzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IHNob3J0bG9nICpsb2cpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhyZXYpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24ocmV2KSkgIT0gTlVMTCkKKwkJc2hvcnRsb2dfYWRkX2NvbW1pdChsb2csIGNvbW1pdCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfdWludChjaGFyIGNvbnN0ICoqYXJnLCBpbnQgY29tbWEsIGludCBkZWZ2YWwpCit7CisJdW5zaWduZWQgbG9uZyB1bDsKKwlpbnQgcmV0OworCWNoYXIgKmVuZHA7CisKKwl1bCA9IHN0cnRvdWwoKmFyZywgJmVuZHAsIDEwKTsKKwlpZiAoKmVuZHAgJiYgKmVuZHAgIT0gY29tbWEpCisJCXJldHVybiAtMTsKKwlpZiAodWwgPiBJTlRfTUFYKQorCQlyZXR1cm4gLTE7CisJcmV0ID0gKmFyZyA9PSBlbmRwID8gZGVmdmFsIDogKGludCl1bDsKKwkqYXJnID0gKmVuZHAgPyBlbmRwICsgMSA6IGVuZHA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgd3JhcF9hcmdfdXNhZ2VbXSA9ICItd1s8d2lkdGg+Wyw8aW5kZW50MT5bLDxpbmRlbnQyPl1dXSI7CisjZGVmaW5lIERFRkFVTFRfV1JBUExFTiA3NgorI2RlZmluZSBERUZBVUxUX0lOREVOVDEgNgorI2RlZmluZSBERUZBVUxUX0lOREVOVDIgOQorCitzdGF0aWMgaW50IHBhcnNlX3dyYXBfYXJncyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCBzaG9ydGxvZyAqbG9nID0gb3B0LT52YWx1ZTsKKworCWxvZy0+d3JhcF9saW5lcyA9ICF1bnNldDsKKwlpZiAodW5zZXQpCisJCXJldHVybiAwOworCWlmICghYXJnKSB7CisJCWxvZy0+d3JhcCA9IERFRkFVTFRfV1JBUExFTjsKKwkJbG9nLT5pbjEgPSBERUZBVUxUX0lOREVOVDE7CisJCWxvZy0+aW4yID0gREVGQVVMVF9JTkRFTlQyOworCQlyZXR1cm4gMDsKKwl9CisKKwlsb2ctPndyYXAgPSBwYXJzZV91aW50KCZhcmcsICcsJywgREVGQVVMVF9XUkFQTEVOKTsKKwlsb2ctPmluMSA9IHBhcnNlX3VpbnQoJmFyZywgJywnLCBERUZBVUxUX0lOREVOVDEpOworCWxvZy0+aW4yID0gcGFyc2VfdWludCgmYXJnLCAnXDAnLCBERUZBVUxUX0lOREVOVDIpOworCWlmIChsb2ctPndyYXAgPCAwIHx8IGxvZy0+aW4xIDwgMCB8fCBsb2ctPmluMiA8IDApCisJCXJldHVybiBlcnJvcih3cmFwX2FyZ191c2FnZSk7CisJaWYgKGxvZy0+d3JhcCAmJgorCSAgICAoKGxvZy0+aW4xICYmIGxvZy0+d3JhcCA8PSBsb2ctPmluMSkgfHwKKwkgICAgIChsb2ctPmluMiAmJiBsb2ctPndyYXAgPD0gbG9nLT5pbjIpKSkKKwkJcmV0dXJuIGVycm9yKHdyYXBfYXJnX3VzYWdlKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzaG9ydGxvZ19pbml0KHN0cnVjdCBzaG9ydGxvZyAqbG9nKQoreworCW1lbXNldChsb2csIDAsIHNpemVvZigqbG9nKSk7CisKKwlyZWFkX21haWxtYXAoJmxvZy0+bWFpbG1hcCwgJmxvZy0+Y29tbW9uX3JlcG9fcHJlZml4KTsKKworCWxvZy0+bGlzdC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJbG9nLT53cmFwID0gREVGQVVMVF9XUkFQTEVOOworCWxvZy0+aW4xID0gREVGQVVMVF9JTkRFTlQxOworCWxvZy0+aW4yID0gREVGQVVMVF9JTkRFTlQyOworfQorCitpbnQgY21kX3Nob3J0bG9nKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCXN0YXRpYyBzdHJ1Y3Qgc2hvcnRsb2cgbG9nOworCXN0YXRpYyBzdHJ1Y3QgcmV2X2luZm8gcmV2OworCWludCBub25naXQgPSAhc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnk7CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKCduJywgIm51bWJlcmVkIiwgJmxvZy5zb3J0X2J5X251bWJlciwKKwkJCSBOXygic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIikpLAorCQlPUFRfQk9PTCgncycsICJzdW1tYXJ5IiwgJmxvZy5zdW1tYXJ5LAorCQkJIE5fKCJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIpKSwKKwkJT1BUX0JPT0woJ2UnLCAiZW1haWwiLCAmbG9nLmVtYWlsLAorCQkJIE5fKCJTaG93IHRoZSBlbWFpbCBhZGRyZXNzIG9mIGVhY2ggYXV0aG9yIikpLAorCQl7IE9QVElPTl9DQUxMQkFDSywgJ3cnLCBOVUxMLCAmbG9nLCBOXygid1ssaTFbLGkyXV0iKSwKKwkJCU5fKCJMaW5ld3JhcCBvdXRwdXQiKSwgUEFSU0VfT1BUX09QVEFSRywgJnBhcnNlX3dyYXBfYXJncyB9LAorCQlPUFRfRU5EKCksCisJfTsKKworCXN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgY3R4OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCXNob3J0bG9nX2luaXQoJmxvZyk7CisJaW5pdF9yZXZpc2lvbnMoJnJldiwgcHJlZml4KTsKKwlwYXJzZV9vcHRpb25zX3N0YXJ0KCZjdHgsIGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICBQQVJTRV9PUFRfS0VFUF9EQVNIREFTSCB8IFBBUlNFX09QVF9LRUVQX0FSR1YwKTsKKworCWZvciAoOzspIHsKKwkJc3dpdGNoIChwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywgc2hvcnRsb2dfdXNhZ2UpKSB7CisJCWNhc2UgUEFSU0VfT1BUX0hFTFA6CisJCQlleGl0KDEyOSk7CisJCWNhc2UgUEFSU0VfT1BUX0RPTkU6CisJCQlnb3RvIHBhcnNlX2RvbmU7CisJCX0KKwkJcGFyc2VfcmV2aXNpb25fb3B0KCZyZXYsICZjdHgsIG9wdGlvbnMsIHNob3J0bG9nX3VzYWdlKTsKKwl9CitwYXJzZV9kb25lOgorCWFyZ2MgPSBwYXJzZV9vcHRpb25zX2VuZCgmY3R4KTsKKworCWlmIChzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCkgIT0gMSkgeworCQllcnJvcihfKCJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIiksIGFyZ3ZbMV0pOworCQl1c2FnZV93aXRoX29wdGlvbnMoc2hvcnRsb2dfdXNhZ2UsIG9wdGlvbnMpOworCX0KKworCWxvZy51c2VyX2Zvcm1hdCA9IHJldi5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX1VTRVJGT1JNQVQ7CisJbG9nLmFiYnJldiA9IHJldi5hYmJyZXY7CisKKwkvKiBhc3N1bWUgSEVBRCBpZiBmcm9tIGEgdHR5ICovCisJaWYgKCFub25naXQgJiYgIXJldi5wZW5kaW5nLm5yICYmIGlzYXR0eSgwKSkKKwkJYWRkX2hlYWRfdG9fcGVuZGluZygmcmV2KTsKKwlpZiAocmV2LnBlbmRpbmcubnIgPT0gMCkgeworCQlpZiAoaXNhdHR5KDApKQorCQkJZnByaW50ZihzdGRlcnIsIF8oIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iKSk7CisJCXJlYWRfZnJvbV9zdGRpbigmbG9nKTsKKwl9CisJZWxzZQorCQlnZXRfZnJvbV9yZXYoJnJldiwgJmxvZyk7CisKKwlzaG9ydGxvZ19vdXRwdXQoJmxvZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF93cmFwcGVkX3Nob3J0bG9nX21zZyhzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcywKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBzaG9ydGxvZyAqbG9nKQoreworCXN0cmJ1Zl9hZGRfd3JhcHBlZF90ZXh0KHNiLCBzLCBsb2ctPmluMSwgbG9nLT5pbjIsIGxvZy0+d3JhcCk7CisJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKK30KKwordm9pZCBzaG9ydGxvZ19vdXRwdXQoc3RydWN0IHNob3J0bG9nICpsb2cpCit7CisJaW50IGksIGo7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJaWYgKGxvZy0+c29ydF9ieV9udW1iZXIpCisJCXFzb3J0KGxvZy0+bGlzdC5pdGVtcywgbG9nLT5saXN0Lm5yLCBzaXplb2Yoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0pLAorCQkJY29tcGFyZV9ieV9udW1iZXIpOworCWZvciAoaSA9IDA7IGkgPCBsb2ctPmxpc3QubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm9uZWxpbmVzID0gbG9nLT5saXN0Lml0ZW1zW2ldLnV0aWw7CisKKwkJaWYgKGxvZy0+c3VtbWFyeSkgeworCQkJcHJpbnRmKCIlNmRcdCVzXG4iLCBvbmVsaW5lcy0+bnIsIGxvZy0+bGlzdC5pdGVtc1tpXS5zdHJpbmcpOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCIlcyAoJWQpOlxuIiwgbG9nLT5saXN0Lml0ZW1zW2ldLnN0cmluZywgb25lbGluZXMtPm5yKTsKKwkJCWZvciAoaiA9IG9uZWxpbmVzLT5uciAtIDE7IGogPj0gMDsgai0tKSB7CisJCQkJY29uc3QgY2hhciAqbXNnID0gb25lbGluZXMtPml0ZW1zW2pdLnN0cmluZzsKKworCQkJCWlmIChsb2ctPndyYXBfbGluZXMpIHsKKwkJCQkJc3RyYnVmX3Jlc2V0KCZzYik7CisJCQkJCWFkZF93cmFwcGVkX3Nob3J0bG9nX21zZygmc2IsIG1zZywgbG9nKTsKKwkJCQkJZndyaXRlKHNiLmJ1Ziwgc2IubGVuLCAxLCBzdGRvdXQpOworCQkJCX0KKwkJCQllbHNlCisJCQkJCXByaW50ZigiICAgICAgJXNcbiIsIG1zZyk7CisJCQl9CisJCQlwdXRjaGFyKCdcbicpOworCQl9CisKKwkJb25lbGluZXMtPnN0cmR1cF9zdHJpbmdzID0gMTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIob25lbGluZXMsIDApOworCQlmcmVlKG9uZWxpbmVzKTsKKwkJbG9nLT5saXN0Lml0ZW1zW2ldLnV0aWwgPSBOVUxMOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJbG9nLT5saXN0LnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbG9nLT5saXN0LCAxKTsKKwljbGVhcl9tYWlsbWFwKCZsb2ctPm1haWxtYXApOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zaG93LWJyYW5jaC5jIGIvYnVpbHRpbi9zaG93LWJyYW5jaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MmI1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Nob3ctYnJhbmNoLmMKQEAgLTAsMCArMSw5NzAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyKiBzaG93X2JyYW5jaF91c2FnZVtdID0geworICAgIE5fKCJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyAgICAgICAiCQlbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyAgICAgICAiCQlbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisgICAgICAgIgkJWy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIpLAorICAgIE5fKCJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iKSwKKyAgICBOVUxMCit9OworCitzdGF0aWMgaW50IHNob3dicmFuY2hfdXNlX2NvbG9yID0gLTE7CisKK3N0YXRpYyBpbnQgZGVmYXVsdF9udW07CitzdGF0aWMgaW50IGRlZmF1bHRfYWxsb2M7CitzdGF0aWMgY29uc3QgY2hhciAqKmRlZmF1bHRfYXJnOworCisjZGVmaW5lIFVOSU5URVJFU1RJTkcJMDEKKworI2RlZmluZSBSRVZfU0hJRlQJIDIKKyNkZWZpbmUgTUFYX1JFVlMJKEZMQUdfQklUUyAtIFJFVl9TSElGVCkgLyogc2hvdWxkIG5vdCBleGNlZWQgYml0c19wZXJfaW50IC0gUkVWX1NISUZUICovCisKKyNkZWZpbmUgREVGQVVMVF9SRUZMT0cJNAorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2NvbG9yX2NvZGUoaW50IGlkeCkKK3sKKwlpZiAod2FudF9jb2xvcihzaG93YnJhbmNoX3VzZV9jb2xvcikpCisJCXJldHVybiBjb2x1bW5fY29sb3JzX2Fuc2lbaWR4ICUgY29sdW1uX2NvbG9yc19hbnNpX21heF07CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2NvbG9yX3Jlc2V0X2NvZGUodm9pZCkKK3sKKwlpZiAod2FudF9jb2xvcihzaG93YnJhbmNoX3VzZV9jb2xvcikpCisJCXJldHVybiBHSVRfQ09MT1JfUkVTRVQ7CisJcmV0dXJuICIiOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCXJldHVybiBjb21taXQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqcG9wX29uZV9jb21taXQoc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdF9wKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3Q7CisJbGlzdCA9ICpsaXN0X3A7CisJY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkqbGlzdF9wID0gbGlzdC0+bmV4dDsKKwlmcmVlKGxpc3QpOworCXJldHVybiBjb21taXQ7Cit9CisKK3N0cnVjdCBjb21taXRfbmFtZSB7CisJY29uc3QgY2hhciAqaGVhZF9uYW1lOyAvKiB3aGljaCBoZWFkJ3MgYW5jZXN0b3I/ICovCisJaW50IGdlbmVyYXRpb247IC8qIGhvdyBtYW55IHBhcmVudHMgYXdheSBmcm9tIGhlYWRfbmFtZSAqLworfTsKKworLyogTmFtZSB0aGUgY29tbWl0IGFzIG50aCBnZW5lcmF0aW9uIGFuY2VzdG9yIG9mIGhlYWRfbmFtZTsKKyAqIHdlIGNvdW50IG9ubHkgdGhlIGZpcnN0LXBhcmVudCByZWxhdGlvbnNoaXAgZm9yIG5hbWluZyBwdXJwb3Nlcy4KKyAqLworc3RhdGljIHZvaWQgbmFtZV9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBjb25zdCBjaGFyICpoZWFkX25hbWUsIGludCBudGgpCit7CisJc3RydWN0IGNvbW1pdF9uYW1lICpuYW1lOworCWlmICghY29tbWl0LT51dGlsKQorCQljb21taXQtPnV0aWwgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY29tbWl0X25hbWUpKTsKKwluYW1lID0gY29tbWl0LT51dGlsOworCW5hbWUtPmhlYWRfbmFtZSA9IGhlYWRfbmFtZTsKKwluYW1lLT5nZW5lcmF0aW9uID0gbnRoOworfQorCisvKiBQYXJlbnQgaXMgdGhlIGZpcnN0IHBhcmVudCBvZiB0aGUgY29tbWl0LiAgV2UgbWF5IG5hbWUgaXQKKyAqIGFzIChuKzEpdGggZ2VuZXJhdGlvbiBhbmNlc3RvciBvZiB0aGUgc2FtZSBoZWFkX25hbWUgYXMKKyAqIGNvbW1pdCBpcyBudGggZ2VuZXJhdGlvbiBhbmNlc3RvciBvZiwgaWYgdGhhdCBnZW5lcmF0aW9uCisgKiBudW1iZXIgaXMgYmV0dGVyIHRoYW4gdGhlIG5hbWUgaXQgYWxyZWFkeSBoYXMuCisgKi8KK3N0YXRpYyB2b2lkIG5hbWVfcGFyZW50KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdCAqcGFyZW50KQoreworCXN0cnVjdCBjb21taXRfbmFtZSAqY29tbWl0X25hbWUgPSBjb21taXQtPnV0aWw7CisJc3RydWN0IGNvbW1pdF9uYW1lICpwYXJlbnRfbmFtZSA9IHBhcmVudC0+dXRpbDsKKwlpZiAoIWNvbW1pdF9uYW1lKQorCQlyZXR1cm47CisJaWYgKCFwYXJlbnRfbmFtZSB8fAorCSAgICBjb21taXRfbmFtZS0+Z2VuZXJhdGlvbiArIDEgPCBwYXJlbnRfbmFtZS0+Z2VuZXJhdGlvbikKKwkJbmFtZV9jb21taXQocGFyZW50LCBjb21taXRfbmFtZS0+aGVhZF9uYW1lLAorCQkJICAgIGNvbW1pdF9uYW1lLT5nZW5lcmF0aW9uICsgMSk7Cit9CisKK3N0YXRpYyBpbnQgbmFtZV9maXJzdF9wYXJlbnRfY2hhaW4oc3RydWN0IGNvbW1pdCAqYykKK3sKKwlpbnQgaSA9IDA7CisJd2hpbGUgKGMpIHsKKwkJc3RydWN0IGNvbW1pdCAqcDsKKwkJaWYgKCFjLT51dGlsKQorCQkJYnJlYWs7CisJCWlmICghYy0+cGFyZW50cykKKwkJCWJyZWFrOworCQlwID0gYy0+cGFyZW50cy0+aXRlbTsKKwkJaWYgKCFwLT51dGlsKSB7CisJCQluYW1lX3BhcmVudChjLCBwKTsKKwkJCWkrKzsKKwkJfQorCQllbHNlCisJCQlicmVhazsKKwkJYyA9IHA7CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgdm9pZCBuYW1lX2NvbW1pdHMoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJIHN0cnVjdCBjb21taXQgKipyZXYsCisJCQkgY2hhciAqKnJlZl9uYW1lLAorCQkJIGludCBudW1fcmV2KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqY2w7CisJc3RydWN0IGNvbW1pdCAqYzsKKwlpbnQgaTsKKworCS8qIEZpcnN0IGdpdmUgbmFtZXMgdG8gdGhlIGdpdmVuIGhlYWRzICovCisJZm9yIChjbCA9IGxpc3Q7IGNsOyBjbCA9IGNsLT5uZXh0KSB7CisJCWMgPSBjbC0+aXRlbTsKKwkJaWYgKGMtPnV0aWwpCisJCQljb250aW51ZTsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9yZXY7IGkrKykgeworCQkJaWYgKHJldltpXSA9PSBjKSB7CisJCQkJbmFtZV9jb21taXQoYywgcmVmX25hbWVbaV0sIDApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJLyogVGhlbiBjb21taXRzIG9uIHRoZSBmaXJzdCBwYXJlbnQgYW5jZXN0cnkgY2hhaW4gKi8KKwlkbyB7CisJCWkgPSAwOworCQlmb3IgKGNsID0gbGlzdDsgY2w7IGNsID0gY2wtPm5leHQpIHsKKwkJCWkgKz0gbmFtZV9maXJzdF9wYXJlbnRfY2hhaW4oY2wtPml0ZW0pOworCQl9CisJfSB3aGlsZSAoaSk7CisKKwkvKiBGaW5hbGx5LCBhbnkgdW5uYW1lZCBjb21taXRzICovCisJZG8geworCQlpID0gMDsKKwkJZm9yIChjbCA9IGxpc3Q7IGNsOyBjbCA9IGNsLT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJCQlzdHJ1Y3QgY29tbWl0X25hbWUgKm47CisJCQlpbnQgbnRoOworCQkJYyA9IGNsLT5pdGVtOworCQkJaWYgKCFjLT51dGlsKQorCQkJCWNvbnRpbnVlOworCQkJbiA9IGMtPnV0aWw7CisJCQlwYXJlbnRzID0gYy0+cGFyZW50czsKKwkJCW50aCA9IDA7CisJCQl3aGlsZSAocGFyZW50cykgeworCQkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnRzLT5pdGVtOworCQkJCXN0cnVjdCBzdHJidWYgbmV3bmFtZSA9IFNUUkJVRl9JTklUOworCQkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQkJCW50aCsrOworCQkJCWlmIChwLT51dGlsKQorCQkJCQljb250aW51ZTsKKwkJCQlzd2l0Y2ggKG4tPmdlbmVyYXRpb24pIHsKKwkJCQljYXNlIDA6CisJCQkJCXN0cmJ1Zl9hZGRzdHIoJm5ld25hbWUsIG4tPmhlYWRfbmFtZSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMToKKwkJCQkJc3RyYnVmX2FkZGYoJm5ld25hbWUsICIlc14iLCBuLT5oZWFkX25hbWUpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlzdHJidWZfYWRkZigmbmV3bmFtZSwgIiVzfiVkIiwKKwkJCQkJCSAgICBuLT5oZWFkX25hbWUsIG4tPmdlbmVyYXRpb24pOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKG50aCA9PSAxKQorCQkJCQlzdHJidWZfYWRkY2goJm5ld25hbWUsICdeJyk7CisJCQkJZWxzZQorCQkJCQlzdHJidWZfYWRkZigmbmV3bmFtZSwgIl4lZCIsIG50aCk7CisJCQkJbmFtZV9jb21taXQocCwgc3RyYnVmX2RldGFjaCgmbmV3bmFtZSwgTlVMTCksIDApOworCQkJCWkrKzsKKwkJCQluYW1lX2ZpcnN0X3BhcmVudF9jaGFpbihwKTsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKGkpOworfQorCitzdGF0aWMgaW50IG1hcmtfc2VlbihzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbGlzdCAqKnNlZW5fcCkKK3sKKwlpZiAoIWNvbW1pdC0+b2JqZWN0LmZsYWdzKSB7CisJCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHNlZW5fcCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgam9pbl9yZXZzKHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3RfcCwKKwkJICAgICAgc3RydWN0IGNvbW1pdF9saXN0ICoqc2Vlbl9wLAorCQkgICAgICBpbnQgbnVtX3JldiwgaW50IGV4dHJhKQoreworCWludCBhbGxfbWFzayA9ICgoMXUgPDwgKFJFVl9TSElGVCArIG51bV9yZXYpKSAtIDEpOworCWludCBhbGxfcmV2cyA9IGFsbF9tYXNrICYgfigoMXUgPDwgUkVWX1NISUZUKSAtIDEpOworCisJd2hpbGUgKCpsaXN0X3ApIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQlpbnQgc3RpbGxfaW50ZXJlc3RpbmcgPSAhIWludGVyZXN0aW5nKCpsaXN0X3ApOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwb3Bfb25lX2NvbW1pdChsaXN0X3ApOworCQlpbnQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFncyAmIGFsbF9tYXNrOworCisJCWlmICghc3RpbGxfaW50ZXJlc3RpbmcgJiYgZXh0cmEgPD0gMCkKKwkJCWJyZWFrOworCisJCW1hcmtfc2Vlbihjb21taXQsIHNlZW5fcCk7CisJCWlmICgoZmxhZ3MgJiBhbGxfcmV2cykgPT0gYWxsX3JldnMpCisJCQlmbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQlwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCisJCXdoaWxlIChwYXJlbnRzKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50cy0+aXRlbTsKKwkJCWludCB0aGlzX2ZsYWcgPSBwLT5vYmplY3QuZmxhZ3M7CisJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJCWlmICgodGhpc19mbGFnICYgZmxhZ3MpID09IGZsYWdzKQorCQkJCWNvbnRpbnVlOworCQkJcGFyc2VfY29tbWl0KHApOworCQkJaWYgKG1hcmtfc2VlbihwLCBzZWVuX3ApICYmICFzdGlsbF9pbnRlcmVzdGluZykKKwkJCQlleHRyYS0tOworCQkJcC0+b2JqZWN0LmZsYWdzIHw9IGZsYWdzOworCQkJY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGUocCwgbGlzdF9wKTsKKwkJfQorCX0KKworCS8qCisJICogUG9zdHByb2Nlc3MgdG8gY29tcGxldGUgd2VsbC1wb2lzb25pbmcuCisJICoKKwkgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYWxsIHRoZSBjb21taXRzIHdlIGhhdmUgc2VlbiBpbgorCSAqIHNlZW5fcCBsaXN0LiAgTWFyayBhbnl0aGluZyB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20KKwkgKiB1bmludGVyZXN0aW5nIGNvbW1pdHMgbm90IGludGVyZXN0aW5nLgorCSAqLworCWZvciAoOzspIHsKKwkJaW50IGNoYW5nZWQgPSAwOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnM7CisJCWZvciAocyA9ICpzZWVuX3A7IHM7IHMgPSBzLT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpjID0gcy0+aXRlbTsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKworCQkJaWYgKCgoYy0+b2JqZWN0LmZsYWdzICYgYWxsX3JldnMpICE9IGFsbF9yZXZzKSAmJgorCQkJICAgICEoYy0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQkJY29udGludWU7CisKKwkJCS8qIFRoZSBjdXJyZW50IGNvbW1pdCBpcyBlaXRoZXIgYSBtZXJnZSBiYXNlIG9yCisJCQkgKiBhbHJlYWR5IHVuaW50ZXJlc3Rpbmcgb25lLiAgTWFyayBpdHMgcGFyZW50cworCQkJICogYXMgdW5pbnRlcmVzdGluZyBjb21taXRzIF9vbmx5XyBpZiB0aGV5IGFyZQorCQkJICogYWxyZWFkeSBwYXJzZWQuICBObyByZWFzb24gdG8gZmluZCBuZXcgb25lcworCQkJICogaGVyZS4KKwkJCSAqLworCQkJcGFyZW50cyA9IGMtPnBhcmVudHM7CisJCQl3aGlsZSAocGFyZW50cykgeworCQkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnRzLT5pdGVtOworCQkJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQkJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpKSB7CisJCQkJCXAtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQkJCQljaGFuZ2VkID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKCFjaGFuZ2VkKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X29uZV9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgbm9fbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHByZXR0eSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKnByZXR0eV9zdHIgPSAiKHVuYXZhaWxhYmxlKSI7CisJc3RydWN0IGNvbW1pdF9uYW1lICpuYW1lID0gY29tbWl0LT51dGlsOworCisJaWYgKGNvbW1pdC0+b2JqZWN0LnBhcnNlZCkgeworCQlwcF9jb21taXRfZWFzeShDTUlUX0ZNVF9PTkVMSU5FLCBjb21taXQsICZwcmV0dHkpOworCQlwcmV0dHlfc3RyID0gcHJldHR5LmJ1ZjsKKwl9CisJaWYgKHN0YXJ0c193aXRoKHByZXR0eV9zdHIsICJbUEFUQ0hdICIpKQorCQlwcmV0dHlfc3RyICs9IDg7CisKKwlpZiAoIW5vX25hbWUpIHsKKwkJaWYgKG5hbWUgJiYgbmFtZS0+aGVhZF9uYW1lKSB7CisJCQlwcmludGYoIlslcyIsIG5hbWUtPmhlYWRfbmFtZSk7CisJCQlpZiAobmFtZS0+Z2VuZXJhdGlvbikgeworCQkJCWlmIChuYW1lLT5nZW5lcmF0aW9uID09IDEpCisJCQkJCXByaW50ZigiXiIpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRmKCJ+JWQiLCBuYW1lLT5nZW5lcmF0aW9uKTsKKwkJCX0KKwkJCXByaW50ZigiXSAiKTsKKwkJfQorCQllbHNlCisJCQlwcmludGYoIlslc10gIiwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwKKwkJCQkJCSAgREVGQVVMVF9BQkJSRVYpKTsKKwl9CisJcHV0cyhwcmV0dHlfc3RyKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJldHR5KTsKK30KKworc3RhdGljIGNoYXIgKnJlZl9uYW1lW01BWF9SRVZTICsgMV07CitzdGF0aWMgaW50IHJlZl9uYW1lX2NudDsKKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfZGlnaXRfcHJlZml4KGNvbnN0IGNoYXIgKnMsIGludCAqdikKK3sKKwljb25zdCBjaGFyICpwOworCWludCB2ZXI7CisJY2hhciBjaDsKKworCWZvciAocCA9IHMsIHZlciA9IDA7CisJICAgICAnMCcgPD0gKGNoID0gKnApICYmIGNoIDw9ICc5JzsKKwkgICAgIHArKykKKwkJdmVyID0gdmVyICogMTAgKyBjaCAtICcwJzsKKwkqdiA9IHZlcjsKKwlyZXR1cm4gcDsKK30KKworCitzdGF0aWMgaW50IHZlcnNpb25fY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJd2hpbGUgKDEpIHsKKwkJaW50IHZhLCB2YjsKKworCQlhID0gZmluZF9kaWdpdF9wcmVmaXgoYSwgJnZhKTsKKwkJYiA9IGZpbmRfZGlnaXRfcHJlZml4KGIsICZ2Yik7CisJCWlmICh2YSAhPSB2YikKKwkJCXJldHVybiB2YSAtIHZiOworCisJCXdoaWxlICgxKSB7CisJCQlpbnQgY2EgPSAqYTsKKwkJCWludCBjYiA9ICpiOworCQkJaWYgKCcwJyA8PSBjYSAmJiBjYSA8PSAnOScpCisJCQkJY2EgPSAwOworCQkJaWYgKCcwJyA8PSBjYiAmJiBjYiA8PSAnOScpCisJCQkJY2IgPSAwOworCQkJaWYgKGNhICE9IGNiKQorCQkJCXJldHVybiBjYSAtIGNiOworCQkJaWYgKCFjYSkKKwkJCQlicmVhazsKKwkJCWErKzsKKwkJCWIrKzsKKwkJfQorCQlpZiAoISphICYmICEqYikKKwkJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBjb21wYXJlX3JlZl9uYW1lKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBjaGFyICogY29uc3QqYSA9IGFfLCAqIGNvbnN0KmIgPSBiXzsKKwlyZXR1cm4gdmVyc2lvbl9jbXAoKmEsICpiKTsKK30KKworc3RhdGljIHZvaWQgc29ydF9yZWZfcmFuZ2UoaW50IGJvdHRvbSwgaW50IHRvcCkKK3sKKwlxc29ydChyZWZfbmFtZSArIGJvdHRvbSwgdG9wIC0gYm90dG9tLCBzaXplb2YocmVmX25hbWVbMF0pLAorCSAgICAgIGNvbXBhcmVfcmVmX25hbWUpOworfQorCitzdGF0aWMgaW50IGFwcGVuZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgICBpbnQgYWxsb3dfZHVwcykKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkob2lkLT5oYXNoLCAxKTsKKwlpbnQgaTsKKworCWlmICghY29tbWl0KQorCQlyZXR1cm4gMDsKKworCWlmICghYWxsb3dfZHVwcykgeworCQkvKiBBdm9pZCBhZGRpbmcgdGhlIHNhbWUgdGhpbmcgdHdpY2UgKi8KKwkJZm9yIChpID0gMDsgaSA8IHJlZl9uYW1lX2NudDsgaSsrKQorCQkJaWYgKCFzdHJjbXAocmVmbmFtZSwgcmVmX25hbWVbaV0pKQorCQkJCXJldHVybiAwOworCX0KKwlpZiAoTUFYX1JFVlMgPD0gcmVmX25hbWVfY250KSB7CisJCXdhcm5pbmcoImlnbm9yaW5nICVzOyBjYW5ub3QgaGFuZGxlIG1vcmUgdGhhbiAlZCByZWZzIiwKKwkJCXJlZm5hbWUsIE1BWF9SRVZTKTsKKwkJcmV0dXJuIDA7CisJfQorCXJlZl9uYW1lW3JlZl9uYW1lX2NudCsrXSA9IHhzdHJkdXAocmVmbmFtZSk7CisJcmVmX25hbWVbcmVmX25hbWVfY250XSA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX2hlYWRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBvYmplY3RfaWQgdG1wOworCWludCBvZnMgPSAxMTsKKwlpZiAoIXN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQlyZXR1cm4gMDsKKwkvKiBJZiBib3RoIGhlYWRzL2ZvbyBhbmQgdGFncy9mb28gZXhpc3RzLCBnZXRfc2hhMSB3b3VsZAorCSAqIGdldCBjb25mdXNlZC4KKwkgKi8KKwlpZiAoZ2V0X3NoYTEocmVmbmFtZSArIG9mcywgdG1wLmhhc2gpIHx8IG9pZGNtcCgmdG1wLCBvaWQpKQorCQlvZnMgPSA1OworCXJldHVybiBhcHBlbmRfcmVmKHJlZm5hbWUgKyBvZnMsIG9pZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX3JlbW90ZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHRtcDsKKwlpbnQgb2ZzID0gMTM7CisJaWYgKCFzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9yZW1vdGVzLyIpKQorCQlyZXR1cm4gMDsKKwkvKiBJZiBib3RoIGhlYWRzL2ZvbyBhbmQgdGFncy9mb28gZXhpc3RzLCBnZXRfc2hhMSB3b3VsZAorCSAqIGdldCBjb25mdXNlZC4KKwkgKi8KKwlpZiAoZ2V0X3NoYTEocmVmbmFtZSArIG9mcywgdG1wLmhhc2gpIHx8IG9pZGNtcCgmdG1wLCBvaWQpKQorCQlvZnMgPSA1OworCXJldHVybiBhcHBlbmRfcmVmKHJlZm5hbWUgKyBvZnMsIG9pZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgYXBwZW5kX3RhZ19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlpZiAoIXN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3RhZ3MvIikpCisJCXJldHVybiAwOworCXJldHVybiBhcHBlbmRfcmVmKHJlZm5hbWUgKyA1LCBvaWQsIDApOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbWF0Y2hfcmVmX3BhdHRlcm4gPSBOVUxMOworc3RhdGljIGludCBtYXRjaF9yZWZfc2xhc2ggPSAwOworc3RhdGljIGludCBjb3VudF9zbGFzaChjb25zdCBjaGFyICpzKQoreworCWludCBjbnQgPSAwOworCXdoaWxlICgqcykKKwkJaWYgKCpzKysgPT0gJy8nKQorCQkJY250Kys7CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludCBhcHBlbmRfbWF0Y2hpbmdfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwkvKiB3ZSB3YW50IHRvIGFsbG93IHBhdHRlcm4gaG9sZC88YXN0ZXJpc2s+IHRvIHNob3cgYWxsCisJICogYnJhbmNoZXMgdW5kZXIgcmVmcy9oZWFkcy9ob2xkLywgYW5kIHYwLjk5Ljk/IHRvIHNob3cKKwkgKiByZWZzL3RhZ3MvdjAuOTkuOWEgYW5kIGZyaWVuZHMuCisJICovCisJY29uc3QgY2hhciAqdGFpbDsKKwlpbnQgc2xhc2ggPSBjb3VudF9zbGFzaChyZWZuYW1lKTsKKwlmb3IgKHRhaWwgPSByZWZuYW1lOyAqdGFpbCAmJiBtYXRjaF9yZWZfc2xhc2ggPCBzbGFzaDsgKQorCQlpZiAoKnRhaWwrKyA9PSAnLycpCisJCQlzbGFzaC0tOworCWlmICghKnRhaWwpCisJCXJldHVybiAwOworCWlmICh3aWxkbWF0Y2gobWF0Y2hfcmVmX3BhdHRlcm4sIHRhaWwsIDAsIE5VTEwpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvaGVhZHMvIikpCisJCXJldHVybiBhcHBlbmRfaGVhZF9yZWYocmVmbmFtZSwgb2lkLCBmbGFnLCBjYl9kYXRhKTsKKwlpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvdGFncy8iKSkKKwkJcmV0dXJuIGFwcGVuZF90YWdfcmVmKHJlZm5hbWUsIG9pZCwgZmxhZywgY2JfZGF0YSk7CisJcmV0dXJuIGFwcGVuZF9yZWYocmVmbmFtZSwgb2lkLCAwKTsKK30KKworc3RhdGljIHZvaWQgc25hcmZfcmVmcyhpbnQgaGVhZCwgaW50IHJlbW90ZXMpCit7CisJaWYgKGhlYWQpIHsKKwkJaW50IG9yaWdfY250ID0gcmVmX25hbWVfY250OworCisJCWZvcl9lYWNoX3JlZihhcHBlbmRfaGVhZF9yZWYsIE5VTEwpOworCQlzb3J0X3JlZl9yYW5nZShvcmlnX2NudCwgcmVmX25hbWVfY250KTsKKwl9CisJaWYgKHJlbW90ZXMpIHsKKwkJaW50IG9yaWdfY250ID0gcmVmX25hbWVfY250OworCisJCWZvcl9lYWNoX3JlZihhcHBlbmRfcmVtb3RlX3JlZiwgTlVMTCk7CisJCXNvcnRfcmVmX3JhbmdlKG9yaWdfY250LCByZWZfbmFtZV9jbnQpOworCX0KK30KKworc3RhdGljIGludCByZXZfaXNfaGVhZChjaGFyICpoZWFkLCBpbnQgaGVhZGxlbiwgY2hhciAqbmFtZSwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmhlYWRfc2hhMSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpZiAoKCFoZWFkWzBdKSB8fAorCSAgICAoaGVhZF9zaGExICYmIHNoYTEgJiYgaGFzaGNtcChoZWFkX3NoYTEsIHNoYTEpKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN0YXJ0c193aXRoKGhlYWQsICJyZWZzL2hlYWRzLyIpKQorCQloZWFkICs9IDExOworCWlmIChzdGFydHNfd2l0aChuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJbmFtZSArPSAxMTsKKwllbHNlIGlmIChzdGFydHNfd2l0aChuYW1lLCAiaGVhZHMvIikpCisJCW5hbWUgKz0gNjsKKwlyZXR1cm4gIXN0cmNtcChoZWFkLCBuYW1lKTsKK30KKworc3RhdGljIGludCBzaG93X21lcmdlX2Jhc2Uoc3RydWN0IGNvbW1pdF9saXN0ICpzZWVuLCBpbnQgbnVtX3JldikKK3sKKwlpbnQgYWxsX21hc2sgPSAoKDF1IDw8IChSRVZfU0hJRlQgKyBudW1fcmV2KSkgLSAxKTsKKwlpbnQgYWxsX3JldnMgPSBhbGxfbWFzayAmIH4oKDF1IDw8IFJFVl9TSElGVCkgLSAxKTsKKwlpbnQgZXhpdF9zdGF0dXMgPSAxOworCisJd2hpbGUgKHNlZW4pIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcG9wX29uZV9jb21taXQoJnNlZW4pOworCQlpbnQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFncyAmIGFsbF9tYXNrOworCQlpZiAoIShmbGFncyAmIFVOSU5URVJFU1RJTkcpICYmCisJCSAgICAoKGZsYWdzICYgYWxsX3JldnMpID09IGFsbF9yZXZzKSkgeworCQkJcHV0cyhzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCQlleGl0X3N0YXR1cyA9IDA7CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQl9CisJfQorCXJldHVybiBleGl0X3N0YXR1czsKK30KKworc3RhdGljIGludCBzaG93X2luZGVwZW5kZW50KHN0cnVjdCBjb21taXQgKipyZXYsCisJCQkgICAgaW50IG51bV9yZXYsCisJCQkgICAgY2hhciAqKnJlZl9uYW1lLAorCQkJICAgIHVuc2lnbmVkIGludCAqcmV2X21hc2spCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3JldjsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHJldltpXTsKKwkJdW5zaWduZWQgaW50IGZsYWcgPSByZXZfbWFza1tpXTsKKworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgPT0gZmxhZykKKwkJCXB1dHMoc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXBwZW5kX29uZV9yZXYoY29uc3QgY2hhciAqYXYpCit7CisJc3RydWN0IG9iamVjdF9pZCByZXZrZXk7CisJaWYgKCFnZXRfc2hhMShhdiwgcmV2a2V5Lmhhc2gpKSB7CisJCWFwcGVuZF9yZWYoYXYsICZyZXZrZXksIDApOworCQlyZXR1cm47CisJfQorCWlmIChzdHJjaHIoYXYsICcqJykgfHwgc3RyY2hyKGF2LCAnPycpIHx8IHN0cmNocihhdiwgJ1snKSkgeworCQkvKiBnbG9iIHN0eWxlIG1hdGNoICovCisJCWludCBzYXZlZF9tYXRjaGVzID0gcmVmX25hbWVfY250OworCisJCW1hdGNoX3JlZl9wYXR0ZXJuID0gYXY7CisJCW1hdGNoX3JlZl9zbGFzaCA9IGNvdW50X3NsYXNoKGF2KTsKKwkJZm9yX2VhY2hfcmVmKGFwcGVuZF9tYXRjaGluZ19yZWYsIE5VTEwpOworCQlpZiAoc2F2ZWRfbWF0Y2hlcyA9PSByZWZfbmFtZV9jbnQgJiYKKwkJICAgIHJlZl9uYW1lX2NudCA8IE1BWF9SRVZTKQorCQkJZXJyb3IoIm5vIG1hdGNoaW5nIHJlZnMgd2l0aCAlcyIsIGF2KTsKKwkJaWYgKHNhdmVkX21hdGNoZXMgKyAxIDwgcmVmX25hbWVfY250KQorCQkJc29ydF9yZWZfcmFuZ2Uoc2F2ZWRfbWF0Y2hlcywgcmVmX25hbWVfY250KTsKKwkJcmV0dXJuOworCX0KKwlkaWUoImJhZCBzaGExIHJlZmVyZW5jZSAlcyIsIGF2KTsKK30KKworc3RhdGljIGludCBnaXRfc2hvd19icmFuY2hfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgInNob3dicmFuY2guZGVmYXVsdCIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJLyoKKwkJICogZGVmYXVsdF9hcmcgaXMgbm93IHBhc3NlZCB0byBwYXJzZV9vcHRpb25zKCksIHNvIHdlIG5lZWQgdG8KKwkJICogbWltaWMgdGhlIHJlYWwgYXJndiBhIGJpdCBiZXR0ZXIuCisJCSAqLworCQlpZiAoIWRlZmF1bHRfbnVtKSB7CisJCQlkZWZhdWx0X2FsbG9jID0gMjA7CisJCQlkZWZhdWx0X2FyZyA9IHhjYWxsb2MoZGVmYXVsdF9hbGxvYywgc2l6ZW9mKCpkZWZhdWx0X2FyZykpOworCQkJZGVmYXVsdF9hcmdbZGVmYXVsdF9udW0rK10gPSAic2hvdy1icmFuY2giOworCQl9IGVsc2UgaWYgKGRlZmF1bHRfYWxsb2MgPD0gZGVmYXVsdF9udW0gKyAxKSB7CisJCQlkZWZhdWx0X2FsbG9jID0gZGVmYXVsdF9hbGxvYyAqIDMgLyAyICsgMjA7CisJCQlSRUFMTE9DX0FSUkFZKGRlZmF1bHRfYXJnLCBkZWZhdWx0X2FsbG9jKTsKKwkJfQorCQlkZWZhdWx0X2FyZ1tkZWZhdWx0X251bSsrXSA9IHhzdHJkdXAodmFsdWUpOworCQlkZWZhdWx0X2FyZ1tkZWZhdWx0X251bV0gPSBOVUxMOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5zaG93YnJhbmNoIikpIHsKKwkJc2hvd2JyYW5jaF91c2VfY29sb3IgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3N0YXRpYyBpbnQgb21pdF9pbl9kZW5zZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXQgKipyZXYsIGludCBuKQoreworCS8qIElmIHRoZSBjb21taXQgaXMgdGlwIG9mIHRoZSBuYW1lZCBicmFuY2hlcywgZG8gbm90CisJICogb21pdCBpdC4KKwkgKiBPdGhlcndpc2UsIGlmIGl0IGlzIGEgbWVyZ2UgdGhhdCBpcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZQorCSAqIHRpcCwgaXQgaXMgbm90IHRoYXQgaW50ZXJlc3RpbmcuCisJICovCisJaW50IGksIGZsYWcsIGNvdW50OworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWlmIChyZXZbaV0gPT0gY29tbWl0KQorCQkJcmV0dXJuIDA7CisJZmxhZyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzOworCWZvciAoaSA9IGNvdW50ID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAoZmxhZyAmICgxdSA8PCAoaSArIFJFVl9TSElGVCkpKQorCQkJY291bnQrKzsKKwl9CisJaWYgKGNvdW50ID09IDEpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlZmxvZyA9IDA7CisKK3N0YXRpYyBpbnQgcGFyc2VfcmVmbG9nX3BhcmFtKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgICAgaW50IHVuc2V0KQoreworCWNoYXIgKmVwOworCWNvbnN0IGNoYXIgKipiYXNlID0gKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZTsKKwlpZiAoIWFyZykKKwkJYXJnID0gIiI7CisJcmVmbG9nID0gc3RydG91bChhcmcsICZlcCwgMTApOworCWlmICgqZXAgPT0gJywnKQorCQkqYmFzZSA9IGVwICsgMTsKKwllbHNlIGlmICgqZXApCisJCXJldHVybiBlcnJvcigidW5yZWNvZ25pemVkIHJlZmxvZyBwYXJhbSAnJXMnIiwgYXJnKTsKKwllbHNlCisJCSpiYXNlID0gTlVMTDsKKwlpZiAocmVmbG9nIDw9IDApCisJCXJlZmxvZyA9IERFRkFVTFRfUkVGTE9HOworCXJldHVybiAwOworfQorCitpbnQgY21kX3Nob3dfYnJhbmNoKGludCBhYywgY29uc3QgY2hhciAqKmF2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNvbW1pdCAqcmV2W01BWF9SRVZTXSwgKmNvbW1pdDsKKwljaGFyICpyZWZsb2dfbXNnW01BWF9SRVZTXTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMLCAqc2VlbiA9IE5VTEw7CisJdW5zaWduZWQgaW50IHJldl9tYXNrW01BWF9SRVZTXTsKKwlpbnQgbnVtX3JldiwgaSwgZXh0cmEgPSAwOworCWludCBhbGxfaGVhZHMgPSAwLCBhbGxfcmVtb3RlcyA9IDA7CisJaW50IGFsbF9tYXNrLCBhbGxfcmV2czsKKwllbnVtIHJldl9zb3J0X29yZGVyIHNvcnRfb3JkZXIgPSBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUjsKKwljaGFyIGhlYWRbMTI4XTsKKwljb25zdCBjaGFyICpoZWFkX3A7CisJaW50IGhlYWRfbGVuOworCXN0cnVjdCBvYmplY3RfaWQgaGVhZF9vaWQ7CisJaW50IG1lcmdlX2Jhc2UgPSAwOworCWludCBpbmRlcGVuZGVudCA9IDA7CisJaW50IG5vX25hbWUgPSAwOworCWludCBzaGExX25hbWUgPSAwOworCWludCBzaG93bl9tZXJnZV9wb2ludCA9IDA7CisJaW50IHdpdGhfY3VycmVudF9icmFuY2ggPSAwOworCWludCBoZWFkX2F0ID0gLTE7CisJaW50IHRvcGljcyA9IDA7CisJaW50IGRlbnNlID0gMTsKKwljb25zdCBjaGFyICpyZWZsb2dfYmFzZSA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBidWlsdGluX3Nob3dfYnJhbmNoX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JPT0woJ2EnLCAiYWxsIiwgJmFsbF9oZWFkcywKKwkJCSBOXygic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIikpLAorCQlPUFRfQk9PTCgncicsICJyZW1vdGVzIiwgJmFsbF9yZW1vdGVzLAorCQkJIE5fKCJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIpKSwKKwkJT1BUX19DT0xPUigmc2hvd2JyYW5jaF91c2VfY29sb3IsCisJCQkgICAgTl8oImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giKSksCisJCXsgT1BUSU9OX0lOVEVHRVIsIDAsICJtb3JlIiwgJmV4dHJhLCBOXygibiIpLAorCQkJICAgIE5fKCJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIpLAorCQkJICAgIFBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIChpbnRwdHJfdCkxIH0sCisJCU9QVF9TRVRfSU5UKDAsICJsaXN0IiwgJmV4dHJhLCBOXygic3lub255bSB0byBtb3JlPS0xIiksIC0xKSwKKwkJT1BUX0JPT0woMCwgIm5vLW5hbWUiLCAmbm9fbmFtZSwgTl8oInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIikpLAorCQlPUFRfQk9PTCgwLCAiY3VycmVudCIsICZ3aXRoX2N1cnJlbnRfYnJhbmNoLAorCQkJIE5fKCJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIpKSwKKwkJT1BUX0JPT0woMCwgInNoYTEtbmFtZSIsICZzaGExX25hbWUsCisJCQkgTl8oIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIpKSwKKwkJT1BUX0JPT0woMCwgIm1lcmdlLWJhc2UiLCAmbWVyZ2VfYmFzZSwKKwkJCSBOXygic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIpKSwKKwkJT1BUX0JPT0woMCwgImluZGVwZW5kZW50IiwgJmluZGVwZW5kZW50LAorCQkJICAgIE5fKCJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIikpLAorCQlPUFRfU0VUX0lOVCgwLCAidG9wby1vcmRlciIsICZzb3J0X29yZGVyLAorCQkJICAgIE5fKCJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiKSwKKwkJCSAgICBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUiksCisJCU9QVF9CT09MKDAsICJ0b3BpY3MiLCAmdG9waWNzLAorCQkJIE5fKCJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIpKSwKKwkJT1BUX1NFVF9JTlQoMCwgInNwYXJzZSIsICZkZW5zZSwKKwkJCSAgICBOXygic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIiksIDApLAorCQlPUFRfU0VUX0lOVCgwLCAiZGF0ZS1vcmRlciIsICZzb3J0X29yZGVyLAorCQkJICAgIE5fKCJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgIgorCQkJICAgICAgICJ3aGVyZSBwb3NzaWJsZSIpLAorCQkJICAgIFJFVl9TT1JUX0JZX0NPTU1JVF9EQVRFKSwKKwkJeyBPUFRJT05fQ0FMTEJBQ0ssICdnJywgInJlZmxvZyIsICZyZWZsb2dfYmFzZSwgTl8oIjxuPlssPGJhc2U+XSIpLAorCQkJICAgIE5fKCJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgIgorCQkJICAgICAgICJiYXNlIiksCisJCQkgICAgUEFSU0VfT1BUX09QVEFSRyB8IFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFAsCisJCQkgICAgcGFyc2VfcmVmbG9nX3BhcmFtIH0sCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9zaG93X2JyYW5jaF9jb25maWcsIE5VTEwpOworCisJLyogSWYgbm90aGluZyBpcyBzcGVjaWZpZWQsIHRyeSB0aGUgZGVmYXVsdCBmaXJzdCAqLworCWlmIChhYyA9PSAxICYmIGRlZmF1bHRfbnVtKSB7CisJCWFjID0gZGVmYXVsdF9udW07CisJCWF2ID0gZGVmYXVsdF9hcmc7CisJfQorCisJYWMgPSBwYXJzZV9vcHRpb25zKGFjLCBhdiwgcHJlZml4LCBidWlsdGluX3Nob3dfYnJhbmNoX29wdGlvbnMsCisJCQkgICBzaG93X2JyYW5jaF91c2FnZSwgUEFSU0VfT1BUX1NUT1BfQVRfTk9OX09QVElPTik7CisJaWYgKGFsbF9oZWFkcykKKwkJYWxsX3JlbW90ZXMgPSAxOworCisJaWYgKGV4dHJhIHx8IHJlZmxvZykgeworCQkvKiAibGlzdGluZyIgbW9kZSBpcyBpbmNvbXBhdGlibGUgd2l0aAorCQkgKiBpbmRlcGVuZGVudCBub3IgbWVyZ2UtYmFzZSBtb2Rlcy4KKwkJICovCisJCWlmIChpbmRlcGVuZGVudCB8fCBtZXJnZV9iYXNlKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKHNob3dfYnJhbmNoX3VzYWdlLAorCQkJCQkgICBidWlsdGluX3Nob3dfYnJhbmNoX29wdGlvbnMpOworCQlpZiAocmVmbG9nICYmICgoMCA8IGV4dHJhKSB8fCBhbGxfaGVhZHMgfHwgYWxsX3JlbW90ZXMpKQorCQkJLyoKKwkJCSAqIEFza2luZyBmb3IgLS1tb3JlIGluIHJlZmxvZyBtb2RlIGRvZXMgbm90CisJCQkgKiBtYWtlIHNlbnNlLiAgLS1saXN0IGlzIE9rLgorCQkJICoKKwkJCSAqIEFsc28gLS1hbGwgYW5kIC0tcmVtb3RlcyBkbyBub3QgbWFrZSBzZW5zZSBlaXRoZXIuCisJCQkgKi8KKwkJCWRpZSgiLS1yZWZsb2cgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tcmVtb3RlcywgIgorCQkJICAgICItLWluZGVwZW5kZW50IG9yIC0tbWVyZ2UtYmFzZSIpOworCX0KKworCS8qIElmIG5vdGhpbmcgaXMgc3BlY2lmaWVkLCBzaG93IGFsbCBicmFuY2hlcyBieSBkZWZhdWx0ICovCisJaWYgKGFjIDw9IHRvcGljcyAmJiBhbGxfaGVhZHMgKyBhbGxfcmVtb3RlcyA9PSAwKQorCQlhbGxfaGVhZHMgPSAxOworCisJaWYgKHJlZmxvZykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJY2hhciAqcmVmOworCQlpbnQgYmFzZSA9IDA7CisJCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CisKKwkJaWYgKGFjID09IDApIHsKKwkJCXN0YXRpYyBjb25zdCBjaGFyICpmYWtlX2F2WzJdOworCisJCQlmYWtlX2F2WzBdID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLAorCQkJCQkJICAgIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCQkgICAgb2lkLmhhc2gsIE5VTEwpOworCQkJZmFrZV9hdlsxXSA9IE5VTEw7CisJCQlhdiA9IGZha2VfYXY7CisJCQlhYyA9IDE7CisJCQlpZiAoISphdikKKwkJCQlkaWUoIm5vIGJyYW5jaGVzIGdpdmVuLCBhbmQgSEVBRCBpcyBub3QgdmFsaWQiKTsKKwkJfQorCQlpZiAoYWMgIT0gMSkKKwkJCWRpZSgiLS1yZWZsb2cgb3B0aW9uIG5lZWRzIG9uZSBicmFuY2ggbmFtZSIpOworCisJCWlmIChNQVhfUkVWUyA8IHJlZmxvZykKKwkJCWRpZSgiT25seSAlZCBlbnRyaWVzIGNhbiBiZSBzaG93biBhdCBvbmUgdGltZS4iLAorCQkJICAgIE1BWF9SRVZTKTsKKwkJaWYgKCFkd2ltX3JlZigqYXYsIHN0cmxlbigqYXYpLCBvaWQuaGFzaCwgJnJlZikpCisJCQlkaWUoIk5vIHN1Y2ggcmVmICVzIiwgKmF2KTsKKworCQkvKiBIYXMgdGhlIGJhc2UgYmVlbiBzcGVjaWZpZWQ/ICovCisJCWlmIChyZWZsb2dfYmFzZSkgeworCQkJY2hhciAqZXA7CisJCQliYXNlID0gc3RydG91bChyZWZsb2dfYmFzZSwgJmVwLCAxMCk7CisJCQlpZiAoKmVwKSB7CisJCQkJLyogQWgsIHRoYXQgaXMgYSBkYXRlIHNwZWMuLi4gKi8KKwkJCQl1bnNpZ25lZCBsb25nIGF0OworCQkJCWF0ID0gYXBwcm94aWRhdGUocmVmbG9nX2Jhc2UpOworCQkJCXJlYWRfcmVmX2F0KHJlZiwgZmxhZ3MsIGF0LCAtMSwgb2lkLmhhc2gsIE5VTEwsCisJCQkJCSAgICBOVUxMLCBOVUxMLCAmYmFzZSk7CisJCQl9CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgcmVmbG9nOyBpKyspIHsKKwkJCWNoYXIgKmxvZ21zZzsKKwkJCWNoYXIgKm50aF9kZXNjOworCQkJY29uc3QgY2hhciAqbXNnOworCQkJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CisJCQlpbnQgdHo7CisKKwkJCWlmIChyZWFkX3JlZl9hdChyZWYsIGZsYWdzLCAwLCBiYXNlK2ksIG9pZC5oYXNoLCAmbG9nbXNnLAorCQkJCQkmdGltZXN0YW1wLCAmdHosIE5VTEwpKSB7CisJCQkJcmVmbG9nID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1zZyA9IHN0cmNocihsb2dtc2csICdcdCcpOworCQkJaWYgKCFtc2cpCisJCQkJbXNnID0gIihub25lKSI7CisJCQllbHNlCisJCQkJbXNnKys7CisJCQlyZWZsb2dfbXNnW2ldID0geHN0cmZtdCgiKCVzKSAlcyIsCisJCQkJCQlzaG93X2RhdGUodGltZXN0YW1wLCB0eiwKKwkJCQkJCQkgIERBVEVfTU9ERShSRUxBVElWRSkpLAorCQkJCQkJbXNnKTsKKwkJCWZyZWUobG9nbXNnKTsKKworCQkJbnRoX2Rlc2MgPSB4c3RyZm10KCIlc0B7JWR9IiwgKmF2LCBiYXNlK2kpOworCQkJYXBwZW5kX3JlZihudGhfZGVzYywgJm9pZCwgMSk7CisJCQlmcmVlKG50aF9kZXNjKTsKKwkJfQorCQlmcmVlKHJlZik7CisJfQorCWVsc2UgeworCQl3aGlsZSAoMCA8IGFjKSB7CisJCQlhcHBlbmRfb25lX3JldigqYXYpOworCQkJYWMtLTsgYXYrKzsKKwkJfQorCQlpZiAoYWxsX2hlYWRzICsgYWxsX3JlbW90ZXMpCisJCQlzbmFyZl9yZWZzKGFsbF9oZWFkcywgYWxsX3JlbW90ZXMpOworCX0KKworCWhlYWRfcCA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJICAgIGhlYWRfb2lkLmhhc2gsIE5VTEwpOworCWlmIChoZWFkX3ApIHsKKwkJaGVhZF9sZW4gPSBzdHJsZW4oaGVhZF9wKTsKKwkJbWVtY3B5KGhlYWQsIGhlYWRfcCwgaGVhZF9sZW4gKyAxKTsKKwl9CisJZWxzZSB7CisJCWhlYWRfbGVuID0gMDsKKwkJaGVhZFswXSA9IDA7CisJfQorCisJaWYgKHdpdGhfY3VycmVudF9icmFuY2ggJiYgaGVhZF9wKSB7CisJCWludCBoYXNfaGVhZCA9IDA7CisJCWZvciAoaSA9IDA7ICFoYXNfaGVhZCAmJiBpIDwgcmVmX25hbWVfY250OyBpKyspIHsKKwkJCS8qIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gYWRkaW5nIHRoZSBicmFuY2gKKwkJCSAqIEhFQUQgcG9pbnRzIGF0LgorCQkJICovCisJCQlpZiAocmV2X2lzX2hlYWQoaGVhZCwKKwkJCQkJaGVhZF9sZW4sCisJCQkJCXJlZl9uYW1lW2ldLAorCQkJCQloZWFkX29pZC5oYXNoLCBOVUxMKSkKKwkJCQloYXNfaGVhZCsrOworCQl9CisJCWlmICghaGFzX2hlYWQpIHsKKwkJCWludCBvZmZzZXQgPSBzdGFydHNfd2l0aChoZWFkLCAicmVmcy9oZWFkcy8iKSA/IDExIDogMDsKKwkJCWFwcGVuZF9vbmVfcmV2KGhlYWQgKyBvZmZzZXQpOworCQl9CisJfQorCisJaWYgKCFyZWZfbmFtZV9jbnQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJObyByZXZzIHRvIGJlIHNob3duLlxuIik7CisJCWV4aXQoMCk7CisJfQorCisJZm9yIChudW1fcmV2ID0gMDsgcmVmX25hbWVbbnVtX3Jldl07IG51bV9yZXYrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHJldmtleTsKKwkJdW5zaWduZWQgaW50IGZsYWcgPSAxdSA8PCAobnVtX3JldiArIFJFVl9TSElGVCk7CisKKwkJaWYgKE1BWF9SRVZTIDw9IG51bV9yZXYpCisJCQlkaWUoImNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuICVkIHJldnMuIiwgTUFYX1JFVlMpOworCQlpZiAoZ2V0X3NoYTEocmVmX25hbWVbbnVtX3Jldl0sIHJldmtleS5oYXNoKSkKKwkJCWRpZSgiJyVzJyBpcyBub3QgYSB2YWxpZCByZWYuIiwgcmVmX25hbWVbbnVtX3Jldl0pOworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShyZXZrZXkuaGFzaCk7CisJCWlmICghY29tbWl0KQorCQkJZGllKCJjYW5ub3QgZmluZCBjb21taXQgJXMgKCVzKSIsCisJCQkgICAgcmVmX25hbWVbbnVtX3Jldl0sIG9pZF90b19oZXgoJnJldmtleSkpOworCQlwYXJzZV9jb21taXQoY29tbWl0KTsKKwkJbWFya19zZWVuKGNvbW1pdCwgJnNlZW4pOworCisJCS8qIHJldiMwIHVzZXMgYml0IFJFVl9TSElGVCwgcmV2IzEgdXNlcyBiaXQgUkVWX1NISUZUKzEsCisJCSAqIGFuZCBzbyBvbi4gIFJFVl9TSElGVCBiaXRzIGZyb20gYml0IDAgYXJlIHVzZWQgZm9yCisJCSAqIGludGVybmFsIGJvb2trZWVwaW5nLgorCQkgKi8KKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gZmxhZzsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzID09IGZsYWcpCisJCQljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShjb21taXQsICZsaXN0KTsKKwkJcmV2W251bV9yZXZdID0gY29tbWl0OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3JldjsgaSsrKQorCQlyZXZfbWFza1tpXSA9IHJldltpXS0+b2JqZWN0LmZsYWdzOworCisJaWYgKDAgPD0gZXh0cmEpCisJCWpvaW5fcmV2cygmbGlzdCwgJnNlZW4sIG51bV9yZXYsIGV4dHJhKTsKKworCWNvbW1pdF9saXN0X3NvcnRfYnlfZGF0ZSgmc2Vlbik7CisKKwlpZiAobWVyZ2VfYmFzZSkKKwkJcmV0dXJuIHNob3dfbWVyZ2VfYmFzZShzZWVuLCBudW1fcmV2KTsKKworCWlmIChpbmRlcGVuZGVudCkKKwkJcmV0dXJuIHNob3dfaW5kZXBlbmRlbnQocmV2LCBudW1fcmV2LCByZWZfbmFtZSwgcmV2X21hc2spOworCisJLyogU2hvdyBsaXN0OyAtLW1vcmU9LTEgbWVhbnMgbGlzdC1vbmx5ICovCisJaWYgKDEgPCBudW1fcmV2IHx8IGV4dHJhIDwgMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JldjsgaSsrKSB7CisJCQlpbnQgajsKKwkJCWludCBpc19oZWFkID0gcmV2X2lzX2hlYWQoaGVhZCwKKwkJCQkJCSAgaGVhZF9sZW4sCisJCQkJCQkgIHJlZl9uYW1lW2ldLAorCQkJCQkJICBoZWFkX29pZC5oYXNoLAorCQkJCQkJICByZXZbaV0tPm9iamVjdC5zaGExKTsKKwkJCWlmIChleHRyYSA8IDApCisJCQkJcHJpbnRmKCIlYyBbJXNdICIsCisJCQkJICAgICAgIGlzX2hlYWQgPyAnKicgOiAnICcsIHJlZl9uYW1lW2ldKTsKKwkJCWVsc2UgeworCQkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCisJCQkJCXB1dGNoYXIoJyAnKTsKKwkJCQlwcmludGYoIiVzJWMlcyBbJXNdICIsCisJCQkJICAgICAgIGdldF9jb2xvcl9jb2RlKGkpLAorCQkJCSAgICAgICBpc19oZWFkID8gJyonIDogJyEnLAorCQkJCSAgICAgICBnZXRfY29sb3JfcmVzZXRfY29kZSgpLCByZWZfbmFtZVtpXSk7CisJCQl9CisKKwkJCWlmICghcmVmbG9nKSB7CisJCQkJLyogaGVhZGVyIGxpbmVzIG5ldmVyIG5lZWQgbmFtZSAqLworCQkJCXNob3dfb25lX2NvbW1pdChyZXZbaV0sIDEpOworCQkJfQorCQkJZWxzZQorCQkJCXB1dHMocmVmbG9nX21zZ1tpXSk7CisKKwkJCWlmIChpc19oZWFkKQorCQkJCWhlYWRfYXQgPSBpOworCQl9CisJCWlmICgwIDw9IGV4dHJhKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JldjsgaSsrKQorCQkJCXB1dGNoYXIoJy0nKTsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCX0KKwl9CisJaWYgKGV4dHJhIDwgMCkKKwkJZXhpdCgwKTsKKworCS8qIFNvcnQgdG9wb2xvZ2ljYWxseSAqLworCXNvcnRfaW5fdG9wb2xvZ2ljYWxfb3JkZXIoJnNlZW4sIHNvcnRfb3JkZXIpOworCisJLyogR2l2ZSBuYW1lcyB0byBjb21taXRzICovCisJaWYgKCFzaGExX25hbWUgJiYgIW5vX25hbWUpCisJCW5hbWVfY29tbWl0cyhzZWVuLCByZXYsIHJlZl9uYW1lLCBudW1fcmV2KTsKKworCWFsbF9tYXNrID0gKCgxdSA8PCAoUkVWX1NISUZUICsgbnVtX3JldikpIC0gMSk7CisJYWxsX3JldnMgPSBhbGxfbWFzayAmIH4oKDF1IDw8IFJFVl9TSElGVCkgLSAxKTsKKworCXdoaWxlIChzZWVuKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHBvcF9vbmVfY29tbWl0KCZzZWVuKTsKKwkJaW50IHRoaXNfZmxhZyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzOworCQlpbnQgaXNfbWVyZ2VfcG9pbnQgPSAoKHRoaXNfZmxhZyAmIGFsbF9yZXZzKSA9PSBhbGxfcmV2cyk7CisKKwkJc2hvd25fbWVyZ2VfcG9pbnQgfD0gaXNfbWVyZ2VfcG9pbnQ7CisKKwkJaWYgKDEgPCBudW1fcmV2KSB7CisJCQlpbnQgaXNfbWVyZ2UgPSAhIShjb21taXQtPnBhcmVudHMgJiYKKwkJCQkJICBjb21taXQtPnBhcmVudHMtPm5leHQpOworCQkJaWYgKHRvcGljcyAmJgorCQkJICAgICFpc19tZXJnZV9wb2ludCAmJgorCQkJICAgICh0aGlzX2ZsYWcgJiAoMXUgPDwgUkVWX1NISUZUKSkpCisJCQkJY29udGludWU7CisJCQlpZiAoZGVuc2UgJiYgaXNfbWVyZ2UgJiYKKwkJCSAgICBvbWl0X2luX2RlbnNlKGNvbW1pdCwgcmV2LCBudW1fcmV2KSkKKwkJCQljb250aW51ZTsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fcmV2OyBpKyspIHsKKwkJCQlpbnQgbWFyazsKKwkJCQlpZiAoISh0aGlzX2ZsYWcgJiAoMXUgPDwgKGkgKyBSRVZfU0hJRlQpKSkpCisJCQkJCW1hcmsgPSAnICc7CisJCQkJZWxzZSBpZiAoaXNfbWVyZ2UpCisJCQkJCW1hcmsgPSAnLSc7CisJCQkJZWxzZSBpZiAoaSA9PSBoZWFkX2F0KQorCQkJCQltYXJrID0gJyonOworCQkJCWVsc2UKKwkJCQkJbWFyayA9ICcrJzsKKwkJCQlwcmludGYoIiVzJWMlcyIsCisJCQkJICAgICAgIGdldF9jb2xvcl9jb2RlKGkpLAorCQkJCSAgICAgICBtYXJrLCBnZXRfY29sb3JfcmVzZXRfY29kZSgpKTsKKwkJCX0KKwkJCXB1dGNoYXIoJyAnKTsKKwkJfQorCQlzaG93X29uZV9jb21taXQoY29tbWl0LCBub19uYW1lKTsKKworCQlpZiAoc2hvd25fbWVyZ2VfcG9pbnQgJiYgLS1leHRyYSA8IDApCisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3Nob3ctcmVmLmMgYi9idWlsdGluL3Nob3ctcmVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0YzM5MgotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vc2hvdy1yZWYuYwpAQCAtMCwwICsxLDIzOCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaG93X3JlZl91c2FnZVtdID0geworCU5fKCJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLWhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iKSwKKwlOXygiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSIpLAorCU5VTEwKK307CisKK3N0YXRpYyBpbnQgZGVyZWZfdGFncywgc2hvd19oZWFkLCB0YWdzX29ubHksIGhlYWRzX29ubHksIGZvdW5kX21hdGNoLCB2ZXJpZnksCisJICAgcXVpZXQsIGhhc2hfb25seSwgYWJicmV2LCBleGNsdWRlX2FyZzsKK3N0YXRpYyBjb25zdCBjaGFyICoqcGF0dGVybjsKK3N0YXRpYyBjb25zdCBjaGFyICpleGNsdWRlX2V4aXN0aW5nX2FyZzsKKworc3RhdGljIHZvaWQgc2hvd19vbmUoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCWNvbnN0IGNoYXIgKmhleCA9IGZpbmRfdW5pcXVlX2FiYnJldihvaWQtPmhhc2gsIGFiYnJldik7CisJaWYgKGhhc2hfb25seSkKKwkJcHJpbnRmKCIlc1xuIiwgaGV4KTsKKwllbHNlCisJCXByaW50ZigiJXMgJXNcbiIsIGhleCwgcmVmbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICAgaW50IGZsYWcsIHZvaWQgKmNiZGF0YSkKK3sKKwljb25zdCBjaGFyICpoZXg7CisJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisKKwlpZiAoc2hvd19oZWFkICYmICFzdHJjbXAocmVmbmFtZSwgIkhFQUQiKSkKKwkJZ290byBtYXRjaDsKKworCWlmICh0YWdzX29ubHkgfHwgaGVhZHNfb25seSkgeworCQlpbnQgbWF0Y2g7CisKKwkJbWF0Y2ggPSBoZWFkc19vbmx5ICYmIHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL2hlYWRzLyIpOworCQltYXRjaCB8PSB0YWdzX29ubHkgJiYgc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvdGFncy8iKTsKKwkJaWYgKCFtYXRjaCkKKwkJCXJldHVybiAwOworCX0KKwlpZiAocGF0dGVybikgeworCQlpbnQgcmVmbGVuID0gc3RybGVuKHJlZm5hbWUpOworCQljb25zdCBjaGFyICoqcCA9IHBhdHRlcm4sICptOworCQl3aGlsZSAoKG0gPSAqcCsrKSAhPSBOVUxMKSB7CisJCQlpbnQgbGVuID0gc3RybGVuKG0pOworCQkJaWYgKGxlbiA+IHJlZmxlbikKKwkJCQljb250aW51ZTsKKwkJCWlmIChtZW1jbXAobSwgcmVmbmFtZSArIHJlZmxlbiAtIGxlbiwgbGVuKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChsZW4gPT0gcmVmbGVuKQorCQkJCWdvdG8gbWF0Y2g7CisJCQkvKiAiLS12ZXJpZnkiIHJlcXVpcmVzIGFuIGV4YWN0IG1hdGNoICovCisJCQlpZiAodmVyaWZ5KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHJlZm5hbWVbcmVmbGVuIC0gbGVuIC0gMV0gPT0gJy8nKQorCQkJCWdvdG8gbWF0Y2g7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCittYXRjaDoKKwlmb3VuZF9tYXRjaCsrOworCisJLyogVGhpcyBjaGFuZ2VzIHRoZSBzZW1hbnRpY3Mgc2xpZ2h0bHkgdGhhdCBldmVuIHVuZGVyIHF1aWV0IHdlCisJICogZGV0ZWN0IGFuZCByZXR1cm4gZXJyb3IgaWYgdGhlIHJlcG9zaXRvcnkgaXMgY29ycnVwdCBhbmQKKwkgKiByZWYgcG9pbnRzIGF0IGEgbm9uZXhpc3RlbnQgb2JqZWN0LgorCSAqLworCWlmICghaGFzX3NoYTFfZmlsZShvaWQtPmhhc2gpKQorCQlkaWUoImdpdCBzaG93LXJlZjogYmFkIHJlZiAlcyAoJXMpIiwgcmVmbmFtZSwKKwkJICAgIG9pZF90b19oZXgob2lkKSk7CisKKwlpZiAocXVpZXQpCisJCXJldHVybiAwOworCisJc2hvd19vbmUocmVmbmFtZSwgb2lkKTsKKworCWlmICghZGVyZWZfdGFncykKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXBlZWxfcmVmKHJlZm5hbWUsIHBlZWxlZC5oYXNoKSkgeworCQloZXggPSBmaW5kX3VuaXF1ZV9hYmJyZXYocGVlbGVkLmhhc2gsIGFiYnJldik7CisJCXByaW50ZigiJXMgJXNee31cbiIsIGhleCwgcmVmbmFtZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9leGlzdGluZyhjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQlpbnQgZmxhZywgdm9pZCAqY2JkYXRhKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCA9IChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKiljYmRhdGE7CisJc3RyaW5nX2xpc3RfaW5zZXJ0KGxpc3QsIHJlZm5hbWUpOworCXJldHVybiAwOworfQorCisvKgorICogcmVhZCAiXig/Ojxhbnl0aGluZz5ccyk/PHJlZm5hbWU+KD86XF5ce1x9KT8kIiBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKyAqIGFuZAorICogKDEpIHN0cmlwICJee30iIGF0IHRoZSBlbmQgb2YgbGluZSBpZiBhbnk7CisgKiAoMikgaWdub3JlIGlmIG1hdGNoIGlzIHByb3ZpZGVkIGFuZCBkb2VzIG5vdCBoZWFkLW1hdGNoIHJlZm5hbWU7CisgKiAoMykgd2FybiBpZiByZWZuYW1lIGlzIG5vdCBhIHdlbGwtZm9ybWVkIHJlZm5hbWUgYW5kIHNraXA7CisgKiAoNCkgaWdub3JlIGlmIHJlZm5hbWUgaXMgYSByZWYgdGhhdCBleGlzdHMgaW4gdGhlIGxvY2FsIHJlcG9zaXRvcnk7CisgKiAoNSkgb3RoZXJ3aXNlIG91dHB1dCB0aGUgbGluZS4KKyAqLworc3RhdGljIGludCBleGNsdWRlX2V4aXN0aW5nKGNvbnN0IGNoYXIgKm1hdGNoKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZXhpc3RpbmdfcmVmcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWNoYXIgYnVmWzEwMjRdOworCWludCBtYXRjaGxlbiA9IG1hdGNoID8gc3RybGVuKG1hdGNoKSA6IDA7CisKKwlmb3JfZWFjaF9yZWYoYWRkX2V4aXN0aW5nLCAmZXhpc3RpbmdfcmVmcyk7CisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSkgeworCQljaGFyICpyZWY7CisJCWludCBsZW4gPSBzdHJsZW4oYnVmKTsKKworCQlpZiAobGVuID4gMCAmJiBidWZbbGVuIC0gMV0gPT0gJ1xuJykKKwkJCWJ1ZlstLWxlbl0gPSAnXDAnOworCQlpZiAoMyA8PSBsZW4gJiYgIXN0cmNtcChidWYgKyBsZW4gLSAzLCAiXnt9IikpIHsKKwkJCWxlbiAtPSAzOworCQkJYnVmW2xlbl0gPSAnXDAnOworCQl9CisJCWZvciAocmVmID0gYnVmICsgbGVuOyBidWYgPCByZWY7IHJlZi0tKQorCQkJaWYgKGlzc3BhY2UocmVmWy0xXSkpCisJCQkJYnJlYWs7CisJCWlmIChtYXRjaCkgeworCQkJaW50IHJlZmxlbiA9IGJ1ZiArIGxlbiAtIHJlZjsKKwkJCWlmIChyZWZsZW4gPCBtYXRjaGxlbikKKwkJCQljb250aW51ZTsKKwkJCWlmIChzdHJuY21wKHJlZiwgbWF0Y2gsIG1hdGNobGVuKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmLCAwKSkgeworCQkJd2FybmluZygicmVmICclcycgaWdub3JlZCIsIHJlZik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmluZ19saXN0X2hhc19zdHJpbmcoJmV4aXN0aW5nX3JlZnMsIHJlZikpIHsKKwkJCXByaW50ZigiJXNcbiIsIGJ1Zik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFzaF9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWhhc2hfb25seSA9IDE7CisJLyogVXNlIGZ1bGwgbGVuZ3RoIFNIQTEgaWYgbm8gYXJndW1lbnQgKi8KKwlpZiAoIWFyZykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBhcnNlX29wdF9hYmJyZXZfY2Iob3B0LCBhcmcsIHVuc2V0KTsKK30KKworc3RhdGljIGludCBleGNsdWRlX2V4aXN0aW5nX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJCSAgICAgaW50IHVuc2V0KQoreworCWV4Y2x1ZGVfYXJnID0gMTsKKwkqKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSA9IGFyZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZWxwX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBzaG93X3JlZl9vcHRpb25zW10gPSB7CisJT1BUX0JPT0woMCwgInRhZ3MiLCAmdGFnc19vbmx5LCBOXygib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIpKSwKKwlPUFRfQk9PTCgwLCAiaGVhZHMiLCAmaGVhZHNfb25seSwgTl8oIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiKSksCisJT1BUX0JPT0woMCwgInZlcmlmeSIsICZ2ZXJpZnksIE5fKCJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsICIKKwkJICAgICJyZXF1aXJlcyBleGFjdCByZWYgcGF0aCIpKSwKKwlPUFRfSElEREVOX0JPT0woJ2gnLCBOVUxMLCAmc2hvd19oZWFkLAorCQkJTl8oInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIpKSwKKwlPUFRfQk9PTCgwLCAiaGVhZCIsICZzaG93X2hlYWQsCisJICBOXygic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IikpLAorCU9QVF9CT09MKCdkJywgImRlcmVmZXJlbmNlIiwgJmRlcmVmX3RhZ3MsCisJCSAgICBOXygiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiKSksCisJeyBPUFRJT05fQ0FMTEJBQ0ssICdzJywgImhhc2giLCAmYWJicmV2LCBOXygibiIpLAorCSAgTl8oIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIpLAorCSAgUEFSU0VfT1BUX09QVEFSRywgJmhhc2hfY2FsbGJhY2sgfSwKKwlPUFRfX0FCQlJFVigmYWJicmV2KSwKKwlPUFRfX1FVSUVUKCZxdWlldCwKKwkJICAgTl8oImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIikpLAorCXsgT1BUSU9OX0NBTExCQUNLLCAwLCAiZXhjbHVkZS1leGlzdGluZyIsICZleGNsdWRlX2V4aXN0aW5nX2FyZywKKwkgIE5fKCJwYXR0ZXJuIiksIE5fKCJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IiksCisJICBQQVJTRV9PUFRfT1BUQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBleGNsdWRlX2V4aXN0aW5nX2NhbGxiYWNrIH0sCisJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsICJoZWxwLWFsbCIsIE5VTEwsIE5VTEwsIE5fKCJzaG93IHVzYWdlIiksCisJICBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PQVJHLCBoZWxwX2NhbGxiYWNrIH0sCisJT1BUX0VORCgpCit9OworCitpbnQgY21kX3Nob3dfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHNob3dfcmVmX3VzYWdlLCBzaG93X3JlZl9vcHRpb25zKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgc2hvd19yZWZfb3B0aW9ucywKKwkJCSAgICAgc2hvd19yZWZfdXNhZ2UsIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQKTsKKworCWlmIChleGNsdWRlX2FyZykKKwkJcmV0dXJuIGV4Y2x1ZGVfZXhpc3RpbmcoZXhjbHVkZV9leGlzdGluZ19hcmcpOworCisJcGF0dGVybiA9IGFyZ3Y7CisJaWYgKCEqcGF0dGVybikKKwkJcGF0dGVybiA9IE5VTEw7CisKKwlpZiAodmVyaWZ5KSB7CisJCWlmICghcGF0dGVybikKKwkJCWRpZSgiLS12ZXJpZnkgcmVxdWlyZXMgYSByZWZlcmVuY2UiKTsKKwkJd2hpbGUgKCpwYXR0ZXJuKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCQkJaWYgKHN0YXJ0c193aXRoKCpwYXR0ZXJuLCAicmVmcy8iKSAmJgorCQkJICAgICFyZWFkX3JlZigqcGF0dGVybiwgb2lkLmhhc2gpKSB7CisJCQkJaWYgKCFxdWlldCkKKwkJCQkJc2hvd19vbmUoKnBhdHRlcm4sICZvaWQpOworCQkJfQorCQkJZWxzZSBpZiAoIXF1aWV0KQorCQkJCWRpZSgiJyVzJyAtIG5vdCBhIHZhbGlkIHJlZiIsICpwYXR0ZXJuKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gMTsKKwkJCXBhdHRlcm4rKzsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2hvd19oZWFkKQorCQloZWFkX3JlZihzaG93X3JlZiwgTlVMTCk7CisJZm9yX2VhY2hfcmVmKHNob3dfcmVmLCBOVUxMKTsKKwlpZiAoIWZvdW5kX21hdGNoKSB7CisJCWlmICh2ZXJpZnkgJiYgIXF1aWV0KQorCQkJZGllKCJObyBtYXRjaCIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3N0cmlwc3BhY2UuYyBiL2J1aWx0aW4vc3RyaXBzcGFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjg0MzQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3N0cmlwc3BhY2UuYwpAQCAtMCwwICsxLDYxIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCitzdGF0aWMgdm9pZCBjb21tZW50X2xpbmVzKHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwljaGFyICptc2c7CisJc2l6ZV90IGxlbjsKKworCW1zZyA9IHN0cmJ1Zl9kZXRhY2goYnVmLCAmbGVuKTsKKwlzdHJidWZfYWRkX2NvbW1lbnRlZF9saW5lcyhidWYsIG1zZywgbGVuKTsKKwlmcmVlKG1zZyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3RyaXBzcGFjZV91c2FnZVtdID0geworCU5fKCJnaXQgc3RyaXBzcGFjZSBbLXMgfCAtLXN0cmlwLWNvbW1lbnRzXSIpLAorCU5fKCJnaXQgc3RyaXBzcGFjZSBbLWMgfCAtLWNvbW1lbnQtbGluZXNdIiksCisJTlVMTAorfTsKKworZW51bSBzdHJpcHNwYWNlX21vZGUgeworCVNUUklQX0RFRkFVTFQgPSAwLAorCVNUUklQX0NPTU1FTlRTLAorCUNPTU1FTlRfTElORVMKK307CisKK2ludCBjbWRfc3RyaXBzcGFjZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWVudW0gc3RyaXBzcGFjZV9tb2RlIG1vZGUgPSBTVFJJUF9ERUZBVUxUOworCisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9DTURNT0RFKCdzJywgInN0cmlwLWNvbW1lbnRzIiwgJm1vZGUsCisJCQkgICAgTl8oInNraXAgYW5kIHJlbW92ZSBhbGwgbGluZXMgc3RhcnRpbmcgd2l0aCBjb21tZW50IGNoYXJhY3RlciIpLAorCQkJICAgIFNUUklQX0NPTU1FTlRTKSwKKwkJT1BUX0NNRE1PREUoJ2MnLCAiY29tbWVudC1saW5lcyIsICZtb2RlLAorCQkJICAgIE5fKCJwcmVwZW5kIGNvbW1lbnQgY2hhcmFjdGVyIGFuZCBibGFuayB0byBlYWNoIGxpbmUiKSwKKwkJCSAgICBDT01NRU5UX0xJTkVTKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgc3RyaXBzcGFjZV91c2FnZSwgMCk7CisJaWYgKGFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhzdHJpcHNwYWNlX3VzYWdlLCBvcHRpb25zKTsKKworCWlmIChtb2RlID09IFNUUklQX0NPTU1FTlRTIHx8IG1vZGUgPT0gQ09NTUVOVF9MSU5FUykKKwkJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDEwMjQpIDwgMCkKKwkJZGllX2Vycm5vKCJjb3VsZCBub3QgcmVhZCB0aGUgaW5wdXQiKTsKKworCWlmIChtb2RlID09IFNUUklQX0RFRkFVTFQgfHwgbW9kZSA9PSBTVFJJUF9DT01NRU5UUykKKwkJc3RyYnVmX3N0cmlwc3BhY2UoJmJ1ZiwgbW9kZSA9PSBTVFJJUF9DT01NRU5UUyk7CisJZWxzZQorCQljb21tZW50X2xpbmVzKCZidWYpOworCisJd3JpdGVfb3JfZGllKDEsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jIGIvYnVpbHRpbi9zdWJtb2R1bGUtLWhlbHBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YzNlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3N1Ym1vZHVsZS0taGVscGVyLmMKQEAgLTAsMCArMSwyODIgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCitzdHJ1Y3QgbW9kdWxlX2xpc3QgeworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqKmVudHJpZXM7CisJaW50IGFsbG9jLCBucjsKK307CisjZGVmaW5lIE1PRFVMRV9MSVNUX0lOSVQgeyBOVUxMLCAwLCAwIH0KKworc3RhdGljIGludCBtb2R1bGVfbGlzdF9jb21wdXRlKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgICAgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCSAgICAgICBzdHJ1Y3QgbW9kdWxlX2xpc3QgKmxpc3QpCit7CisJaW50IGksIHJlc3VsdCA9IDA7CisJY2hhciAqbWF4X3ByZWZpeCwgKnBzX21hdGNoZWQgPSBOVUxMOworCWludCBtYXhfcHJlZml4X2xlbjsKKwlwYXJzZV9wYXRoc3BlYyhwYXRoc3BlYywgMCwKKwkJICAgICAgIFBBVEhTUEVDX1BSRUZFUl9GVUxMIHwKKwkJICAgICAgIFBBVEhTUEVDX1NUUklQX1NVQk1PRFVMRV9TTEFTSF9DSEVBUCwKKwkJICAgICAgIHByZWZpeCwgYXJndik7CisKKwkvKiBGaW5kIGNvbW1vbiBwcmVmaXggZm9yIGFsbCBwYXRoc3BlYydzICovCisJbWF4X3ByZWZpeCA9IGNvbW1vbl9wcmVmaXgocGF0aHNwZWMpOworCW1heF9wcmVmaXhfbGVuID0gbWF4X3ByZWZpeCA/IHN0cmxlbihtYXhfcHJlZml4KSA6IDA7CisKKwlpZiAocGF0aHNwZWMtPm5yKQorCQlwc19tYXRjaGVkID0geGNhbGxvYyhwYXRoc3BlYy0+bnIsIDEpOworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZShfKCJpbmRleCBmaWxlIGNvcnJ1cHQiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKworCQlpZiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSB8fAorCQkgICAgIW1hdGNoX3BhdGhzcGVjKHBhdGhzcGVjLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSksCisJCQkJICAgIG1heF9wcmVmaXhfbGVuLCBwc19tYXRjaGVkLCAxKSkKKwkJCWNvbnRpbnVlOworCisJCUFMTE9DX0dST1cobGlzdC0+ZW50cmllcywgbGlzdC0+bnIgKyAxLCBsaXN0LT5hbGxvYyk7CisJCWxpc3QtPmVudHJpZXNbbGlzdC0+bnIrK10gPSBjZTsKKwkJd2hpbGUgKGkgKyAxIDwgYWN0aXZlX25yICYmCisJCSAgICAgICAhc3RyY21wKGNlLT5uYW1lLCBhY3RpdmVfY2FjaGVbaSArIDFdLT5uYW1lKSkKKwkJCS8qCisJCQkgKiBTa2lwIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBuYW1lIGluIGRpZmZlcmVudCBzdGFnZXMKKwkJCSAqIHRvIG1ha2Ugc3VyZSBhbiBlbnRyeSBpcyByZXR1cm5lZCBvbmx5IG9uY2UuCisJCQkgKi8KKwkJCWkrKzsKKwl9CisJZnJlZShtYXhfcHJlZml4KTsKKworCWlmIChwc19tYXRjaGVkICYmIHJlcG9ydF9wYXRoX2Vycm9yKHBzX21hdGNoZWQsIHBhdGhzcGVjLCBwcmVmaXgpKQorCQlyZXN1bHQgPSAtMTsKKworCWZyZWUocHNfbWF0Y2hlZCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IG1vZHVsZV9saXN0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXN0cnVjdCBwYXRoc3BlYyBwYXRoc3BlYzsKKwlzdHJ1Y3QgbW9kdWxlX2xpc3QgbGlzdCA9IE1PRFVMRV9MSVNUX0lOSVQ7CisKKwlzdHJ1Y3Qgb3B0aW9uIG1vZHVsZV9saXN0X29wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORygwLCAicHJlZml4IiwgJnByZWZpeCwKKwkJCSAgIE5fKCJwYXRoIiksCisJCQkgICBOXygiYWx0ZXJuYXRpdmUgYW5jaG9yIGZvciByZWxhdGl2ZSBwYXRocyIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWNvbnN0IGNoYXIgKmNvbnN0IGdpdF9zdWJtb2R1bGVfaGVscGVyX3VzYWdlW10gPSB7CisJCU5fKCJnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCBbLS1wcmVmaXg9PHBhdGg+XSBbPHBhdGg+Li4uXSIpLAorCQlOVUxMCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgbW9kdWxlX2xpc3Rfb3B0aW9ucywKKwkJCSAgICAgZ2l0X3N1Ym1vZHVsZV9oZWxwZXJfdXNhZ2UsIDApOworCisJaWYgKG1vZHVsZV9saXN0X2NvbXB1dGUoYXJnYywgYXJndiwgcHJlZml4LCAmcGF0aHNwZWMsICZsaXN0KSA8IDApIHsKKwkJcHJpbnRmKCIjdW5tYXRjaGVkXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gbGlzdC5lbnRyaWVzW2ldOworCisJCWlmIChjZV9zdGFnZShjZSkpCisJCQlwcmludGYoIiUwNm8gJXMgVVx0IiwgY2UtPmNlX21vZGUsIHNoYTFfdG9faGV4KG51bGxfc2hhMSkpOworCQllbHNlCisJCQlwcmludGYoIiUwNm8gJXMgJWRcdCIsIGNlLT5jZV9tb2RlLCBzaGExX3RvX2hleChjZS0+c2hhMSksIGNlX3N0YWdlKGNlKSk7CisKKwkJdXRmOF9mcHJpbnRmKHN0ZG91dCwgIiVzXG4iLCBjZS0+bmFtZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1vZHVsZV9uYW1lKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1YjsKKworCWlmIChhcmdjICE9IDIpCisJCXVzYWdlKF8oImdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lIDxwYXRoPiIpKTsKKworCWdpdG1vZHVsZXNfY29uZmlnKCk7CisJc3ViID0gc3VibW9kdWxlX2Zyb21fcGF0aChudWxsX3NoYTEsIGFyZ3ZbMV0pOworCisJaWYgKCFzdWIpCisJCWRpZShfKCJubyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJXMnIiksCisJCSAgICBhcmd2WzFdKTsKKworCXByaW50ZigiJXNcbiIsIHN1Yi0+bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgY2xvbmVfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmdpdGRpciwgY29uc3QgY2hhciAqdXJsLAorCQkJICAgY29uc3QgY2hhciAqZGVwdGgsIGNvbnN0IGNoYXIgKnJlZmVyZW5jZSwgaW50IHF1aWV0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwOworCWNoaWxkX3Byb2Nlc3NfaW5pdCgmY3ApOworCisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiY2xvbmUiKTsKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLW5vLWNoZWNrb3V0Iik7CisJaWYgKHF1aWV0KQorCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsICItLXF1aWV0Iik7CisJaWYgKGRlcHRoICYmICpkZXB0aCkKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgIi0tZGVwdGgiLCBkZXB0aCwgTlVMTCk7CisJaWYgKHJlZmVyZW5jZSAmJiAqcmVmZXJlbmNlKQorCQlhcmd2X2FycmF5X3B1c2hsKCZjcC5hcmdzLCAiLS1yZWZlcmVuY2UiLCByZWZlcmVuY2UsIE5VTEwpOworCWlmIChnaXRkaXIgJiYgKmdpdGRpcikKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgIi0tc2VwYXJhdGUtZ2l0LWRpciIsIGdpdGRpciwgTlVMTCk7CisKKwlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIHVybCk7CisJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCBwYXRoKTsKKworCWNwLmdpdF9jbWQgPSAxOworCWNwLmVudiA9IGxvY2FsX3JlcG9fZW52OworCWNwLm5vX3N0ZGluID0gMTsKKworCXJldHVybiBydW5fY29tbWFuZCgmY3ApOworfQorCitzdGF0aWMgaW50IG1vZHVsZV9jbG9uZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwljb25zdCBjaGFyICpwYXRoID0gTlVMTCwgKm5hbWUgPSBOVUxMLCAqdXJsID0gTlVMTDsKKwljb25zdCBjaGFyICpyZWZlcmVuY2UgPSBOVUxMLCAqZGVwdGggPSBOVUxMOworCWludCBxdWlldCA9IDA7CisJRklMRSAqc3VibW9kdWxlX2RvdF9naXQ7CisJY2hhciAqc21fZ2l0ZGlyLCAqY3dkLCAqcDsKKwlzdHJ1Y3Qgc3RyYnVmIHJlbF9wYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJc3RydWN0IG9wdGlvbiBtb2R1bGVfY2xvbmVfb3B0aW9uc1tdID0geworCQlPUFRfU1RSSU5HKDAsICJwcmVmaXgiLCAmcHJlZml4LAorCQkJICAgTl8oInBhdGgiKSwKKwkJCSAgIE5fKCJhbHRlcm5hdGl2ZSBhbmNob3IgZm9yIHJlbGF0aXZlIHBhdGhzIikpLAorCQlPUFRfU1RSSU5HKDAsICJwYXRoIiwgJnBhdGgsCisJCQkgICBOXygicGF0aCIpLAorCQkJICAgTl8oIndoZXJlIHRoZSBuZXcgc3VibW9kdWxlIHdpbGwgYmUgY2xvbmVkIHRvIikpLAorCQlPUFRfU1RSSU5HKDAsICJuYW1lIiwgJm5hbWUsCisJCQkgICBOXygic3RyaW5nIiksCisJCQkgICBOXygibmFtZSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSIpKSwKKwkJT1BUX1NUUklORygwLCAidXJsIiwgJnVybCwKKwkJCSAgIE5fKCJzdHJpbmciKSwKKwkJCSAgIE5fKCJ1cmwgd2hlcmUgdG8gY2xvbmUgdGhlIHN1Ym1vZHVsZSBmcm9tIikpLAorCQlPUFRfU1RSSU5HKDAsICJyZWZlcmVuY2UiLCAmcmVmZXJlbmNlLAorCQkJICAgTl8oInN0cmluZyIpLAorCQkJICAgTl8oInJlZmVyZW5jZSByZXBvc2l0b3J5IikpLAorCQlPUFRfU1RSSU5HKDAsICJkZXB0aCIsICZkZXB0aCwKKwkJCSAgIE5fKCJzdHJpbmciKSwKKwkJCSAgIE5fKCJkZXB0aCBmb3Igc2hhbGxvdyBjbG9uZXMiKSksCisJCU9QVF9fUVVJRVQoJnF1aWV0LCAiU3VwcHJlc3Mgb3V0cHV0IGZvciBjbG9uaW5nIGEgc3VibW9kdWxlIiksCisJCU9QVF9FTkQoKQorCX07CisKKwljb25zdCBjaGFyICpjb25zdCBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZVtdID0geworCQlOXygiZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGNsb25lIFstLXByZWZpeD08cGF0aD5dIFstLXF1aWV0XSAiCisJCSAgICJbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1uYW1lIDxuYW1lPl0gWy0tdXJsIDx1cmw+XSIKKwkJICAgIlstLWRlcHRoIDxkZXB0aD5dIFstLV0gWzxwYXRoPi4uLl0iKSwKKwkJTlVMTAorCX07CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCBhcmd2LCBwcmVmaXgsIG1vZHVsZV9jbG9uZV9vcHRpb25zLAorCQkJICAgICBnaXRfc3VibW9kdWxlX2hlbHBlcl91c2FnZSwgMCk7CisKKwlzdHJidWZfYWRkZigmc2IsICIlcy9tb2R1bGVzLyVzIiwgZ2V0X2dpdF9kaXIoKSwgbmFtZSk7CisJc21fZ2l0ZGlyID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCisJaWYgKCFmaWxlX2V4aXN0cyhzbV9naXRkaXIpKSB7CisJCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHNtX2dpdGRpcikgPCAwKQorCQkJZGllKF8oImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciKSwgc21fZ2l0ZGlyKTsKKwkJaWYgKGNsb25lX3N1Ym1vZHVsZShwYXRoLCBzbV9naXRkaXIsIHVybCwgZGVwdGgsIHJlZmVyZW5jZSwgcXVpZXQpKQorCQkJZGllKF8oImNsb25lIG9mICclcycgaW50byBzdWJtb2R1bGUgcGF0aCAnJXMnIGZhaWxlZCIpLAorCQkJICAgIHVybCwgcGF0aCk7CisJfSBlbHNlIHsKKwkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QocGF0aCkgPCAwKQorCQkJZGllKF8oImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciKSwgcGF0aCk7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzL2luZGV4Iiwgc21fZ2l0ZGlyKTsKKwkJdW5saW5rX29yX3dhcm4oc2IuYnVmKTsKKwkJc3RyYnVmX3Jlc2V0KCZzYik7CisJfQorCisJLyogV3JpdGUgYSAuZ2l0IGZpbGUgaW4gdGhlIHN1Ym1vZHVsZSB0byByZWRpcmVjdCB0byB0aGUgc3VwZXJwcm9qZWN0LiAqLworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHBhdGgpIDwgMCkKKwkJZGllKF8oImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciKSwgcGF0aCk7CisKKwlpZiAocGF0aCAmJiAqcGF0aCkKKwkJc3RyYnVmX2FkZGYoJnNiLCAiJXMvLmdpdCIsIHBhdGgpOworCWVsc2UKKwkJc3RyYnVmX2FkZHN0cigmc2IsICIuZ2l0Iik7CisKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChzYi5idWYpIDwgMCkKKwkJZGllKF8oImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIiksIHNiLmJ1Zik7CisJc3VibW9kdWxlX2RvdF9naXQgPSBmb3BlbihzYi5idWYsICJ3Iik7CisJaWYgKCFzdWJtb2R1bGVfZG90X2dpdCkKKwkJZGllX2Vycm5vKF8oImNhbm5vdCBvcGVuIGZpbGUgJyVzJyIpLCBzYi5idWYpOworCisJZnByaW50ZihzdWJtb2R1bGVfZG90X2dpdCwgImdpdGRpcjogJXNcbiIsCisJCXJlbGF0aXZlX3BhdGgoc21fZ2l0ZGlyLCBwYXRoLCAmcmVsX3BhdGgpKTsKKwlpZiAoZmNsb3NlKHN1Ym1vZHVsZV9kb3RfZ2l0KSkKKwkJZGllKF8oImNvdWxkIG5vdCBjbG9zZSBmaWxlICVzIiksIHNiLmJ1Zik7CisJc3RyYnVmX3Jlc2V0KCZzYik7CisJc3RyYnVmX3Jlc2V0KCZyZWxfcGF0aCk7CisKKwljd2QgPSB4Z2V0Y3dkKCk7CisJLyogUmVkaXJlY3QgdGhlIHdvcmt0cmVlIG9mIHRoZSBzdWJtb2R1bGUgaW4gdGhlIHN1cGVycHJvamVjdCdzIGNvbmZpZyAqLworCWlmICghaXNfYWJzb2x1dGVfcGF0aChzbV9naXRkaXIpKSB7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzLyVzIiwgY3dkLCBzbV9naXRkaXIpOworCQlmcmVlKHNtX2dpdGRpcik7CisJCXNtX2dpdGRpciA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwl9CisKKwlzdHJidWZfYWRkZigmc2IsICIlcy8lcyIsIGN3ZCwgcGF0aCk7CisJcCA9IGdpdF9wYXRoZHVwX3N1Ym1vZHVsZShwYXRoLCAiY29uZmlnIik7CisJaWYgKCFwKQorCQlkaWUoXygiY291bGQgbm90IGdldCBzdWJtb2R1bGUgZGlyZWN0b3J5IGZvciAnJXMnIiksIHBhdGgpOworCWdpdF9jb25maWdfc2V0X2luX2ZpbGUocCwgImNvcmUud29ya3RyZWUiLAorCQkJICAgICAgIHJlbGF0aXZlX3BhdGgoc2IuYnVmLCBzbV9naXRkaXIsICZyZWxfcGF0aCkpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJc3RyYnVmX3JlbGVhc2UoJnJlbF9wYXRoKTsKKwlmcmVlKHNtX2dpdGRpcik7CisJZnJlZShjd2QpOworCWZyZWUocCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjbWRfc3RydWN0IHsKKwljb25zdCBjaGFyICpjbWQ7CisJaW50ICgqZm4pKGludCwgY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqKTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY21kX3N0cnVjdCBjb21tYW5kc1tdID0geworCXsibGlzdCIsIG1vZHVsZV9saXN0fSwKKwl7Im5hbWUiLCBtb2R1bGVfbmFtZX0sCisJeyJjbG9uZSIsIG1vZHVsZV9jbG9uZX0sCit9OworCitpbnQgY21kX3N1Ym1vZHVsZV9faGVscGVyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCWlmIChhcmdjIDwgMikKKwkJZGllKF8oImZhdGFsOiBzdWJtb2R1bGUtLWhlbHBlciBzdWJjb21tYW5kIG11c3QgYmUgIgorCQkgICAgICAiY2FsbGVkIHdpdGggYSBzdWJjb21tYW5kIikpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZHMpOyBpKyspCisJCWlmICghc3RyY21wKGFyZ3ZbMV0sIGNvbW1hbmRzW2ldLmNtZCkpCisJCQlyZXR1cm4gY29tbWFuZHNbaV0uZm4oYXJnYyAtIDEsIGFyZ3YgKyAxLCBwcmVmaXgpOworCisJZGllKF8oImZhdGFsOiAnJXMnIGlzIG5vdCBhIHZhbGlkIHN1Ym1vZHVsZS0taGVscGVyICIKKwkgICAgICAic3ViY29tbWFuZCIpLCBhcmd2WzFdKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vc3ltYm9saWMtcmVmLmMgYi9idWlsdGluL3N5bWJvbGljLXJlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMGZkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3N5bWJvbGljLXJlZi5jCkBAIC0wLDAgKzEsNzYgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdpdF9zeW1ib2xpY19yZWZfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+XSA8bmFtZT4gWzxyZWY+XSIpLAorCU5fKCJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPG5hbWU+IiksCisJTlVMTAorfTsKKworc3RhdGljIGludCBjaGVja19zeW1yZWYoY29uc3QgY2hhciAqSEVBRCwgaW50IHF1aWV0LCBpbnQgc2hvcnRlbiwgaW50IHByaW50KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IGZsYWc7CisJY29uc3QgY2hhciAqcmVmbmFtZSA9IHJlc29sdmVfcmVmX3Vuc2FmZShIRUFELCAwLCBzaGExLCAmZmxhZyk7CisKKwlpZiAoIXJlZm5hbWUpCisJCWRpZSgiTm8gc3VjaCByZWY6ICVzIiwgSEVBRCk7CisJZWxzZSBpZiAoIShmbGFnICYgUkVGX0lTU1lNUkVGKSkgeworCQlpZiAoIXF1aWV0KQorCQkJZGllKCJyZWYgJXMgaXMgbm90IGEgc3ltYm9saWMgcmVmIiwgSEVBRCk7CisJCWVsc2UKKwkJCXJldHVybiAxOworCX0KKwlpZiAocHJpbnQpIHsKKwkJaWYgKHNob3J0ZW4pCisJCQlyZWZuYW1lID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYocmVmbmFtZSwgMCk7CisJCXB1dHMocmVmbmFtZSk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgY21kX3N5bWJvbGljX3JlZihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcXVpZXQgPSAwLCBkZWxldGUgPSAwLCBzaG9ydGVuID0gMCwgcmV0ID0gMDsKKwljb25zdCBjaGFyICptc2cgPSBOVUxMOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX1FVSUVUKCZxdWlldCwKKwkJCU5fKCJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIikpLAorCQlPUFRfQk9PTCgnZCcsICJkZWxldGUiLCAmZGVsZXRlLCBOXygiZGVsZXRlIHN5bWJvbGljIHJlZiIpKSwKKwkJT1BUX0JPT0woMCwgInNob3J0IiwgJnNob3J0ZW4sIE5fKCJzaG9ydGVuIHJlZiBvdXRwdXQiKSksCisJCU9QVF9TVFJJTkcoJ20nLCBOVUxMLCAmbXNnLCBOXygicmVhc29uIiksIE5fKCJyZWFzb24gb2YgdGhlIHVwZGF0ZSIpKSwKKwkJT1BUX0VORCgpLAorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLAorCQkJICAgICBnaXRfc3ltYm9saWNfcmVmX3VzYWdlLCAwKTsKKwlpZiAobXNnICYmICEqbXNnKQorCQlkaWUoIlJlZnVzaW5nIHRvIHBlcmZvcm0gdXBkYXRlIHdpdGggZW1wdHkgbWVzc2FnZSIpOworCisJaWYgKGRlbGV0ZSkgeworCQlpZiAoYXJnYyAhPSAxKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9zeW1ib2xpY19yZWZfdXNhZ2UsIG9wdGlvbnMpOworCQlyZXQgPSBjaGVja19zeW1yZWYoYXJndlswXSwgMSwgMCwgMCk7CisJCWlmIChyZXQpCisJCQlkaWUoIkNhbm5vdCBkZWxldGUgJXMsIG5vdCBhIHN5bWJvbGljIHJlZiIsIGFyZ3ZbMF0pOworCQlyZXR1cm4gZGVsZXRlX3JlZihhcmd2WzBdLCBOVUxMLCBSRUZfTk9ERVJFRik7CisJfQorCisJc3dpdGNoIChhcmdjKSB7CisJY2FzZSAxOgorCQlyZXQgPSBjaGVja19zeW1yZWYoYXJndlswXSwgcXVpZXQsIHNob3J0ZW4sIDEpOworCQlicmVhazsKKwljYXNlIDI6CisJCWlmICghc3RyY21wKGFyZ3ZbMF0sICJIRUFEIikgJiYKKwkJICAgICFzdGFydHNfd2l0aChhcmd2WzFdLCAicmVmcy8iKSkKKwkJCWRpZSgiUmVmdXNpbmcgdG8gcG9pbnQgSEVBRCBvdXRzaWRlIG9mIHJlZnMvIik7CisJCWNyZWF0ZV9zeW1yZWYoYXJndlswXSwgYXJndlsxXSwgbXNnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF9zeW1ib2xpY19yZWZfdXNhZ2UsIG9wdGlvbnMpOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi90YWcuYyBiL2J1aWx0aW4vdGFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRiOGM4NwotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdGFnLmMKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiBCdWlsdGluICJnaXQgdGFnIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBLcmlzdGlhbiBIw7hnc2JlcmcgPGtyaEByZWRoYXQuY29tPiwKKyAqICAgICAgICAgICAgICAgICAgICBDYXJsb3MgUmljYSA8amFzYW1wbGVyQGdtYWlsLmNvbT4KKyAqIEJhc2VkIG9uIGdpdC10YWcuc2ggYW5kIG1rdGFnLmMgYnkgTGludXMgVG9ydmFsZHMuCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgInJlZi1maWx0ZXIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfdGFnX3VzYWdlW10gPSB7CisJTl8oImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dIDx0YWduYW1lPiBbPGhlYWQ+XSIpLAorCU5fKCJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIpLAorCU5fKCJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamVjdD5dIgorCQkiXG5cdFx0Wy0tZm9ybWF0PTxmb3JtYXQ+XSBbLS1bbm8tXW1lcmdlZCBbPGNvbW1pdD5dXSBbPHBhdHRlcm4+Li4uXSIpLAorCU5fKCJnaXQgdGFnIC12IDx0YWduYW1lPi4uLiIpLAorCU5VTEwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29sb3B0czsKKworc3RhdGljIGludCBsaXN0X3RhZ3Moc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwgc3RydWN0IHJlZl9zb3J0aW5nICpzb3J0aW5nLCBjb25zdCBjaGFyICpmb3JtYXQpCit7CisJc3RydWN0IHJlZl9hcnJheSBhcnJheTsKKwljaGFyICp0b19mcmVlID0gTlVMTDsKKwlpbnQgaTsKKworCW1lbXNldCgmYXJyYXksIDAsIHNpemVvZihhcnJheSkpOworCisJaWYgKGZpbHRlci0+bGluZXMgPT0gLTEpCisJCWZpbHRlci0+bGluZXMgPSAwOworCisJaWYgKCFmb3JtYXQpIHsKKwkJaWYgKGZpbHRlci0+bGluZXMpIHsKKwkJCXRvX2ZyZWUgPSB4c3RyZm10KCIlcyAlJShjb250ZW50czpsaW5lcz0lZCkiLAorCQkJCQkgICIlKGFsaWduOjE1KSUocmVmbmFtZTpzaG9ydCklKGVuZCkiLAorCQkJCQkgIGZpbHRlci0+bGluZXMpOworCQkJZm9ybWF0ID0gdG9fZnJlZTsKKwkJfSBlbHNlCisJCQlmb3JtYXQgPSAiJShyZWZuYW1lOnNob3J0KSI7CisJfQorCisJdmVyaWZ5X3JlZl9mb3JtYXQoZm9ybWF0KTsKKwlmaWx0ZXItPndpdGhfY29tbWl0X3RhZ19hbGdvID0gMTsKKwlmaWx0ZXJfcmVmcygmYXJyYXksIGZpbHRlciwgRklMVEVSX1JFRlNfVEFHUyk7CisJcmVmX2FycmF5X3NvcnQoc29ydGluZywgJmFycmF5KTsKKworCWZvciAoaSA9IDA7IGkgPCBhcnJheS5ucjsgaSsrKQorCQlzaG93X3JlZl9hcnJheV9pdGVtKGFycmF5Lml0ZW1zW2ldLCBmb3JtYXQsIDApOworCXJlZl9hcnJheV9jbGVhcigmYXJyYXkpOworCWZyZWUodG9fZnJlZSk7CisKKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBpbnQgKCplYWNoX3RhZ19uYW1lX2ZuKShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpyZWYsCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKK3N0YXRpYyBpbnQgZm9yX2VhY2hfdGFnX25hbWUoY29uc3QgY2hhciAqKmFyZ3YsIGVhY2hfdGFnX25hbWVfZm4gZm4pCit7CisJY29uc3QgY2hhciAqKnA7CisJY2hhciByZWZbUEFUSF9NQVhdOworCWludCBoYWRfZXJyb3IgPSAwOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlmb3IgKHAgPSBhcmd2OyAqcDsgcCsrKSB7CisJCWlmIChzbnByaW50ZihyZWYsIHNpemVvZihyZWYpLCAicmVmcy90YWdzLyVzIiwgKnApCisJCQkJCT49IHNpemVvZihyZWYpKSB7CisJCQllcnJvcihfKCJ0YWcgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIpLCA1MCwgKnApOworCQkJaGFkX2Vycm9yID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChyZWFkX3JlZihyZWYsIHNoYTEpKSB7CisJCQllcnJvcihfKCJ0YWcgJyVzJyBub3QgZm91bmQuIiksICpwKTsKKwkJCWhhZF9lcnJvciA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZm4oKnAsIHJlZiwgc2hhMSkpCisJCQloYWRfZXJyb3IgPSAxOworCX0KKwlyZXR1cm4gaGFkX2Vycm9yOworfQorCitzdGF0aWMgaW50IGRlbGV0ZV90YWcoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcmVmLAorCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaWYgKGRlbGV0ZV9yZWYocmVmLCBzaGExLCAwKSkKKwkJcmV0dXJuIDE7CisJcHJpbnRmKF8oIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIpLCBuYW1lLCBmaW5kX3VuaXF1ZV9hYmJyZXYoc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfdGFnKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnJlZiwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNvbnN0IGNoYXIgKmFyZ3ZfdmVyaWZ5X3RhZ1tdID0geyJ2ZXJpZnktdGFnIiwKKwkJCQkJIi12IiwgIlNIQTFfSEVYIiwgTlVMTH07CisJYXJndl92ZXJpZnlfdGFnWzJdID0gc2hhMV90b19oZXgoc2hhMSk7CisKKwlpZiAocnVuX2NvbW1hbmRfdl9vcHQoYXJndl92ZXJpZnlfdGFnLCBSVU5fR0lUX0NNRCkpCisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgdmVyaWZ5IHRoZSB0YWcgJyVzJyIpLCBuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb19zaWduKHN0cnVjdCBzdHJidWYgKmJ1ZmZlcikKK3sKKwlyZXR1cm4gc2lnbl9idWZmZXIoYnVmZmVyLCBidWZmZXIsIGdldF9zaWduaW5nX2tleSgpKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgdGFnX3RlbXBsYXRlW10gPQorCU5fKCJcbldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuICAlc1xuIgorCSJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIik7CisKK3N0YXRpYyBjb25zdCBjaGFyIHRhZ190ZW1wbGF0ZV9ub2NsZWFudXBbXSA9CisJTl8oIlxuV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4gICVzXG4iCisJIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0iCisJIiB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIpOworCisvKiBQYXJzZSBhcmcgZ2l2ZW4gYW5kIGFkZCBpdCB0aGUgcmVmX3NvcnRpbmcgYXJyYXkgKi8KK3N0YXRpYyBpbnQgcGFyc2Vfc29ydGluZ19zdHJpbmcoY29uc3QgY2hhciAqYXJnLCBzdHJ1Y3QgcmVmX3NvcnRpbmcgKipzb3J0aW5nX3RhaWwpCit7CisJc3RydWN0IHJlZl9zb3J0aW5nICpzOworCWludCBsZW47CisKKwlzID0geGNhbGxvYygxLCBzaXplb2YoKnMpKTsKKwlzLT5uZXh0ID0gKnNvcnRpbmdfdGFpbDsKKwkqc29ydGluZ190YWlsID0gczsKKworCWlmICgqYXJnID09ICctJykgeworCQlzLT5yZXZlcnNlID0gMTsKKwkJYXJnKys7CisJfQorCWlmIChza2lwX3ByZWZpeChhcmcsICJ2ZXJzaW9uOiIsICZhcmcpIHx8CisJICAgIHNraXBfcHJlZml4KGFyZywgInY6IiwgJmFyZykpCisJCXMtPnZlcnNpb24gPSAxOworCisJbGVuID0gc3RybGVuKGFyZyk7CisJcy0+YXRvbSA9IHBhcnNlX3JlZl9maWx0ZXJfYXRvbShhcmcsIGFyZytsZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3RhZ19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgcmVmX3NvcnRpbmcgKipzb3J0aW5nX3RhaWwgPSAoc3RydWN0IHJlZl9zb3J0aW5nICoqKWNiOworCisJaWYgKCFzdHJjbXAodmFyLCAidGFnLnNvcnQiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCXBhcnNlX3NvcnRpbmdfc3RyaW5nKHZhbHVlLCBzb3J0aW5nX3RhaWwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzdGF0dXMgPSBnaXRfZ3BnX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAiY29sdW1uLiIpKQorCQlyZXR1cm4gZ2l0X2NvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgInRhZyIsICZjb2xvcHRzKTsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfdGFnX2JvZHkoaW50IGZkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciAqYnVmLCAqc3A7CisKKwlidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmKQorCQlyZXR1cm47CisJLyogc2tpcCBoZWFkZXIgKi8KKwlzcCA9IHN0cnN0cihidWYsICJcblxuIik7CisKKwlpZiAoIXNwIHx8ICFzaXplIHx8IHR5cGUgIT0gT0JKX1RBRykgeworCQlmcmVlKGJ1Zik7CisJCXJldHVybjsKKwl9CisJc3AgKz0gMjsgLyogc2tpcCB0aGUgMiBMRnMgKi8KKwl3cml0ZV9vcl9kaWUoZmQsIHNwLCBwYXJzZV9zaWduYXR1cmUoc3AsIGJ1ZiArIHNpemUgLSBzcCkpOworCisJZnJlZShidWYpOworfQorCitzdGF0aWMgaW50IGJ1aWxkX3RhZ19vYmplY3Qoc3RydWN0IHN0cmJ1ZiAqYnVmLCBpbnQgc2lnbiwgdW5zaWduZWQgY2hhciAqcmVzdWx0KQoreworCWlmIChzaWduICYmIGRvX3NpZ24oYnVmKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIikpOworCWlmICh3cml0ZV9zaGExX2ZpbGUoYnVmLT5idWYsIGJ1Zi0+bGVuLCB0YWdfdHlwZSwgcmVzdWx0KSA8IDApCisJCXJldHVybiBlcnJvcihfKCJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjcmVhdGVfdGFnX29wdGlvbnMgeworCXVuc2lnbmVkIGludCBtZXNzYWdlX2dpdmVuOjE7CisJdW5zaWduZWQgaW50IHNpZ247CisJZW51bSB7CisJCUNMRUFOVVBfTk9ORSwKKwkJQ0xFQU5VUF9TUEFDRSwKKwkJQ0xFQU5VUF9BTEwKKwl9IGNsZWFudXBfbW9kZTsKK307CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV90YWcoY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0LCBjb25zdCBjaGFyICp0YWcsCisJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpidWYsIHN0cnVjdCBjcmVhdGVfdGFnX29wdGlvbnMgKm9wdCwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnByZXYsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJY2hhciBoZWFkZXJfYnVmWzEwMjRdOworCWludCBoZWFkZXJfbGVuOworCWNoYXIgKnBhdGggPSBOVUxMOworCisJdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8ob2JqZWN0LCBOVUxMKTsKKwlpZiAodHlwZSA8PSBPQkpfTk9ORSkKKwkgICAgZGllKF8oImJhZCBvYmplY3QgdHlwZS4iKSk7CisKKwloZWFkZXJfbGVuID0gc25wcmludGYoaGVhZGVyX2J1Ziwgc2l6ZW9mKGhlYWRlcl9idWYpLAorCQkJICAib2JqZWN0ICVzXG4iCisJCQkgICJ0eXBlICVzXG4iCisJCQkgICJ0YWcgJXNcbiIKKwkJCSAgInRhZ2dlciAlc1xuXG4iLAorCQkJICBzaGExX3RvX2hleChvYmplY3QpLAorCQkJICB0eXBlbmFtZSh0eXBlKSwKKwkJCSAgdGFnLAorCQkJICBnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfU1RSSUNUKSk7CisKKwlpZiAoaGVhZGVyX2xlbiA+IHNpemVvZihoZWFkZXJfYnVmKSAtIDEpCisJCWRpZShfKCJ0YWcgaGVhZGVyIHRvbyBiaWcuIikpOworCisJaWYgKCFvcHQtPm1lc3NhZ2VfZ2l2ZW4pIHsKKwkJaW50IGZkOworCisJCS8qIHdyaXRlIHRoZSB0ZW1wbGF0ZSBtZXNzYWdlIGJlZm9yZSBlZGl0aW5nOiAqLworCQlwYXRoID0gZ2l0X3BhdGhkdXAoIlRBR19FRElUTVNHIik7CisJCWZkID0gb3BlbihwYXRoLCBPX0NSRUFUIHwgT19UUlVOQyB8IE9fV1JPTkxZLCAwNjAwKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIpLCBwYXRoKTsKKworCQlpZiAoIWlzX251bGxfc2hhMShwcmV2KSkgeworCQkJd3JpdGVfdGFnX2JvZHkoZmQsIHByZXYpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKwkJCWlmIChvcHQtPmNsZWFudXBfbW9kZSA9PSBDTEVBTlVQX0FMTCkKKwkJCQlzdHJidWZfY29tbWVudGVkX2FkZGYoJmJ1ZiwgXyh0YWdfdGVtcGxhdGUpLCB0YWcsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfY29tbWVudGVkX2FkZGYoJmJ1ZiwgXyh0YWdfdGVtcGxhdGVfbm9jbGVhbnVwKSwgdGFnLCBjb21tZW50X2xpbmVfY2hhcik7CisJCQl3cml0ZV9vcl9kaWUoZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCQkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCX0KKwkJY2xvc2UoZmQpOworCisJCWlmIChsYXVuY2hfZWRpdG9yKHBhdGgsIGJ1ZiwgTlVMTCkpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJXygiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIikpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKworCWlmIChvcHQtPmNsZWFudXBfbW9kZSAhPSBDTEVBTlVQX05PTkUpCisJCXN0cmJ1Zl9zdHJpcHNwYWNlKGJ1Ziwgb3B0LT5jbGVhbnVwX21vZGUgPT0gQ0xFQU5VUF9BTEwpOworCisJaWYgKCFvcHQtPm1lc3NhZ2VfZ2l2ZW4gJiYgIWJ1Zi0+bGVuKQorCQlkaWUoXygibm8gdGFnIG1lc3NhZ2U/IikpOworCisJc3RyYnVmX2luc2VydChidWYsIDAsIGhlYWRlcl9idWYsIGhlYWRlcl9sZW4pOworCisJaWYgKGJ1aWxkX3RhZ19vYmplY3QoYnVmLCBvcHQtPnNpZ24sIHJlc3VsdCkgPCAwKSB7CisJCWlmIChwYXRoKQorCQkJZnByaW50ZihzdGRlcnIsIF8oIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iKSwKKwkJCQlwYXRoKTsKKwkJZXhpdCgxMjgpOworCX0KKwlpZiAocGF0aCkgeworCQl1bmxpbmtfb3Jfd2FybihwYXRoKTsKKwkJZnJlZShwYXRoKTsKKwl9Cit9CisKK3N0cnVjdCBtc2dfYXJnIHsKKwlpbnQgZ2l2ZW47CisJc3RydWN0IHN0cmJ1ZiBidWY7Cit9OworCitzdGF0aWMgaW50IHBhcnNlX21zZ19hcmcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3QgbXNnX2FyZyAqbXNnID0gb3B0LT52YWx1ZTsKKworCWlmICghYXJnKQorCQlyZXR1cm4gLTE7CisJaWYgKG1zZy0+YnVmLmxlbikKKwkJc3RyYnVmX2FkZHN0cigmKG1zZy0+YnVmKSwgIlxuXG4iKTsKKwlzdHJidWZfYWRkc3RyKCYobXNnLT5idWYpLCBhcmcpOworCW1zZy0+Z2l2ZW4gPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0cmJ1Zl9jaGVja190YWdfcmVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpuYW1lKQoreworCWlmIChuYW1lWzBdID09ICctJykKKwkJcmV0dXJuIC0xOworCisJc3RyYnVmX3Jlc2V0KHNiKTsKKwlzdHJidWZfYWRkZihzYiwgInJlZnMvdGFncy8lcyIsIG5hbWUpOworCisJcmV0dXJuIGNoZWNrX3JlZm5hbWVfZm9ybWF0KHNiLT5idWYsIDApOworfQorCitpbnQgY21kX3RhZyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcmVmID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgY2hhciBvYmplY3RbMjBdLCBwcmV2WzIwXTsKKwljb25zdCBjaGFyICpvYmplY3RfcmVmLCAqdGFnOworCXN0cnVjdCBjcmVhdGVfdGFnX29wdGlvbnMgb3B0OworCWNoYXIgKmNsZWFudXBfYXJnID0gTlVMTDsKKwlpbnQgY3JlYXRlX3JlZmxvZyA9IDA7CisJaW50IGFubm90YXRlID0gMCwgZm9yY2UgPSAwOworCWludCBjbWRtb2RlID0gMDsKKwljb25zdCBjaGFyICptc2dmaWxlID0gTlVMTCwgKmtleWlkID0gTlVMTDsKKwlzdHJ1Y3QgbXNnX2FyZyBtc2cgPSB7IDAsIFNUUkJVRl9JTklUIH07CisJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmX2ZpbHRlciBmaWx0ZXI7CisJc3RhdGljIHN0cnVjdCByZWZfc29ydGluZyAqc29ydGluZyA9IE5VTEwsICoqc29ydGluZ190YWlsID0gJnNvcnRpbmc7CisJY29uc3QgY2hhciAqZm9ybWF0ID0gTlVMTDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX0NNRE1PREUoJ2wnLCAibGlzdCIsICZjbWRtb2RlLCBOXygibGlzdCB0YWcgbmFtZXMiKSwgJ2wnKSwKKwkJeyBPUFRJT05fSU5URUdFUiwgJ24nLCBOVUxMLCAmZmlsdGVyLmxpbmVzLCBOXygibiIpLAorCQkJCU5fKCJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIpLAorCQkJCVBBUlNFX09QVF9PUFRBUkcsIE5VTEwsIDEgfSwKKwkJT1BUX0NNRE1PREUoJ2QnLCAiZGVsZXRlIiwgJmNtZG1vZGUsIE5fKCJkZWxldGUgdGFncyIpLCAnZCcpLAorCQlPUFRfQ01ETU9ERSgndicsICJ2ZXJpZnkiLCAmY21kbW9kZSwgTl8oInZlcmlmeSB0YWdzIiksICd2JyksCisKKwkJT1BUX0dST1VQKE5fKCJUYWcgY3JlYXRpb24gb3B0aW9ucyIpKSwKKwkJT1BUX0JPT0woJ2EnLCAiYW5ub3RhdGUiLCAmYW5ub3RhdGUsCisJCQkJCU5fKCJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiKSksCisJCU9QVF9DQUxMQkFDSygnbScsICJtZXNzYWdlIiwgJm1zZywgTl8oIm1lc3NhZ2UiKSwKKwkJCSAgICAgTl8oInRhZyBtZXNzYWdlIiksIHBhcnNlX21zZ19hcmcpLAorCQlPUFRfRklMRU5BTUUoJ0YnLCAiZmlsZSIsICZtc2dmaWxlLCBOXygicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIpKSwKKwkJT1BUX0JPT0woJ3MnLCAic2lnbiIsICZvcHQuc2lnbiwgTl8oImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciKSksCisJCU9QVF9TVFJJTkcoMCwgImNsZWFudXAiLCAmY2xlYW51cF9hcmcsIE5fKCJtb2RlIiksCisJCQlOXygiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIpKSwKKwkJT1BUX1NUUklORygndScsICJsb2NhbC11c2VyIiwgJmtleWlkLCBOXygia2V5LWlkIiksCisJCQkJCU5fKCJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIikpLAorCQlPUFRfX0ZPUkNFKCZmb3JjZSwgTl8oInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiKSksCisJCU9QVF9CT09MKDAsICJjcmVhdGUtcmVmbG9nIiwgJmNyZWF0ZV9yZWZsb2csIE5fKCJjcmVhdGUgYSByZWZsb2ciKSksCisKKwkJT1BUX0dST1VQKE5fKCJUYWcgbGlzdGluZyBvcHRpb25zIikpLAorCQlPUFRfQ09MVU1OKDAsICJjb2x1bW4iLCAmY29sb3B0cywgTl8oInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIpKSwKKwkJT1BUX0NPTlRBSU5TKCZmaWx0ZXIud2l0aF9jb21taXQsIE5fKCJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiKSksCisJCU9QVF9XSVRIKCZmaWx0ZXIud2l0aF9jb21taXQsIE5fKCJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiKSksCisJCU9QVF9NRVJHRUQoJmZpbHRlciwgTl8oInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBtZXJnZWQiKSksCisJCU9QVF9OT19NRVJHRUQoJmZpbHRlciwgTl8oInByaW50IG9ubHkgdGFncyB0aGF0IGFyZSBub3QgbWVyZ2VkIikpLAorCQlPUFRfQ0FMTEJBQ0soMCAsICJzb3J0Iiwgc29ydGluZ190YWlsLCBOXygia2V5IiksCisJCQkgICAgIE5fKCJmaWVsZCBuYW1lIHRvIHNvcnQgb24iKSwgJnBhcnNlX29wdF9yZWZfc29ydGluZyksCisJCXsKKwkJCU9QVElPTl9DQUxMQkFDSywgMCwgInBvaW50cy1hdCIsICZmaWx0ZXIucG9pbnRzX2F0LCBOXygib2JqZWN0IiksCisJCQlOXygicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiKSwgMCwgcGFyc2Vfb3B0X29iamVjdF9uYW1lCisJCX0sCisJCU9QVF9TVFJJTkcoICAwICwgImZvcm1hdCIsICZmb3JtYXQsIE5fKCJmb3JtYXQiKSwgTl8oImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiKSksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF90YWdfY29uZmlnLCBzb3J0aW5nX3RhaWwpOworCisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwltZW1zZXQoJmZpbHRlciwgMCwgc2l6ZW9mKGZpbHRlcikpOworCWZpbHRlci5saW5lcyA9IC0xOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCBvcHRpb25zLCBnaXRfdGFnX3VzYWdlLCAwKTsKKworCWlmIChrZXlpZCkgeworCQlvcHQuc2lnbiA9IDE7CisJCXNldF9zaWduaW5nX2tleShrZXlpZCk7CisJfQorCWlmIChvcHQuc2lnbikKKwkJYW5ub3RhdGUgPSAxOworCWlmIChhcmdjID09IDAgJiYgIWNtZG1vZGUpCisJCWNtZG1vZGUgPSAnbCc7CisKKwlpZiAoKGFubm90YXRlIHx8IG1zZy5naXZlbiB8fCBtc2dmaWxlIHx8IGZvcmNlKSAmJiAoY21kbW9kZSAhPSAwKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF90YWdfdXNhZ2UsIG9wdGlvbnMpOworCisJZmluYWxpemVfY29sb3B0cygmY29sb3B0cywgLTEpOworCWlmIChjbWRtb2RlID09ICdsJyAmJiBmaWx0ZXIubGluZXMgIT0gLTEpIHsKKwkJaWYgKGV4cGxpY2l0bHlfZW5hYmxlX2NvbHVtbihjb2xvcHRzKSkKKwkJCWRpZShfKCItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIpKTsKKwkJY29sb3B0cyA9IDA7CisJfQorCWlmICghc29ydGluZykKKwkJc29ydGluZyA9IHJlZl9kZWZhdWx0X3NvcnRpbmcoKTsKKwlpZiAoY21kbW9kZSA9PSAnbCcpIHsKKwkJaW50IHJldDsKKwkJaWYgKGNvbHVtbl9hY3RpdmUoY29sb3B0cykpIHsKKwkJCXN0cnVjdCBjb2x1bW5fb3B0aW9ucyBjb3B0czsKKwkJCW1lbXNldCgmY29wdHMsIDAsIHNpemVvZihjb3B0cykpOworCQkJY29wdHMucGFkZGluZyA9IDI7CisJCQlydW5fY29sdW1uX2ZpbHRlcihjb2xvcHRzLCAmY29wdHMpOworCQl9CisJCWZpbHRlci5uYW1lX3BhdHRlcm5zID0gYXJndjsKKwkJcmV0ID0gbGlzdF90YWdzKCZmaWx0ZXIsIHNvcnRpbmcsIGZvcm1hdCk7CisJCWlmIChjb2x1bW5fYWN0aXZlKGNvbG9wdHMpKQorCQkJc3RvcF9jb2x1bW5fZmlsdGVyKCk7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChmaWx0ZXIubGluZXMgIT0gLTEpCisJCWRpZShfKCItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIikpOworCWlmIChmaWx0ZXIud2l0aF9jb21taXQpCisJCWRpZShfKCItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iKSk7CisJaWYgKGZpbHRlci5wb2ludHNfYXQubnIpCisJCWRpZShfKCItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIikpOworCWlmIChmaWx0ZXIubWVyZ2VfY29tbWl0KQorCQlkaWUoXygiLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbiBhcmUgb25seSBhbGxvd2VkIHdpdGggLWwiKSk7CisJaWYgKGNtZG1vZGUgPT0gJ2QnKQorCQlyZXR1cm4gZm9yX2VhY2hfdGFnX25hbWUoYXJndiwgZGVsZXRlX3RhZyk7CisJaWYgKGNtZG1vZGUgPT0gJ3YnKQorCQlyZXR1cm4gZm9yX2VhY2hfdGFnX25hbWUoYXJndiwgdmVyaWZ5X3RhZyk7CisKKwlpZiAobXNnLmdpdmVuIHx8IG1zZ2ZpbGUpIHsKKwkJaWYgKG1zZy5naXZlbiAmJiBtc2dmaWxlKQorCQkJZGllKF8oIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIpKTsKKwkJYW5ub3RhdGUgPSAxOworCQlpZiAobXNnLmdpdmVuKQorCQkJc3RyYnVmX2FkZGJ1ZigmYnVmLCAmKG1zZy5idWYpKTsKKwkJZWxzZSB7CisJCQlpZiAoIXN0cmNtcChtc2dmaWxlLCAiLSIpKSB7CisJCQkJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIDAsIDEwMjQpIDwgMCkKKwkJCQkJZGllX2Vycm5vKF8oImNhbm5vdCByZWFkICclcyciKSwgbXNnZmlsZSk7CisJCQl9IGVsc2UgeworCQkJCWlmIChzdHJidWZfcmVhZF9maWxlKCZidWYsIG1zZ2ZpbGUsIDEwMjQpIDwgMCkKKwkJCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIpLAorCQkJCQkJbXNnZmlsZSk7CisJCQl9CisJCX0KKwl9CisKKwl0YWcgPSBhcmd2WzBdOworCisJb2JqZWN0X3JlZiA9IGFyZ2MgPT0gMiA/IGFyZ3ZbMV0gOiAiSEVBRCI7CisJaWYgKGFyZ2MgPiAyKQorCQlkaWUoXygidG9vIG1hbnkgcGFyYW1zIikpOworCisJaWYgKGdldF9zaGExKG9iamVjdF9yZWYsIG9iamVjdCkpCisJCWRpZShfKCJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIpLCBvYmplY3RfcmVmKTsKKworCWlmIChzdHJidWZfY2hlY2tfdGFnX3JlZigmcmVmLCB0YWcpKQorCQlkaWUoXygiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iKSwgdGFnKTsKKworCWlmIChyZWFkX3JlZihyZWYuYnVmLCBwcmV2KSkKKwkJaGFzaGNscihwcmV2KTsKKwllbHNlIGlmICghZm9yY2UpCisJCWRpZShfKCJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIpLCB0YWcpOworCisJb3B0Lm1lc3NhZ2VfZ2l2ZW4gPSBtc2cuZ2l2ZW4gfHwgbXNnZmlsZTsKKworCWlmICghY2xlYW51cF9hcmcgfHwgIXN0cmNtcChjbGVhbnVwX2FyZywgInN0cmlwIikpCisJCW9wdC5jbGVhbnVwX21vZGUgPSBDTEVBTlVQX0FMTDsKKwllbHNlIGlmICghc3RyY21wKGNsZWFudXBfYXJnLCAidmVyYmF0aW0iKSkKKwkJb3B0LmNsZWFudXBfbW9kZSA9IENMRUFOVVBfTk9ORTsKKwllbHNlIGlmICghc3RyY21wKGNsZWFudXBfYXJnLCAid2hpdGVzcGFjZSIpKQorCQlvcHQuY2xlYW51cF9tb2RlID0gQ0xFQU5VUF9TUEFDRTsKKwllbHNlCisJCWRpZShfKCJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIpLCBjbGVhbnVwX2FyZyk7CisKKwlpZiAoYW5ub3RhdGUpCisJCWNyZWF0ZV90YWcob2JqZWN0LCB0YWcsICZidWYsICZvcHQsIHByZXYsIG9iamVjdCk7CisKKwl0cmFuc2FjdGlvbiA9IHJlZl90cmFuc2FjdGlvbl9iZWdpbigmZXJyKTsKKwlpZiAoIXRyYW5zYWN0aW9uIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sIHJlZi5idWYsIG9iamVjdCwgcHJldiwKKwkJCQkgICBjcmVhdGVfcmVmbG9nID8gUkVGX0ZPUkNFX0NSRUFURV9SRUZMT0cgOiAwLAorCQkJCSAgIE5VTEwsICZlcnIpIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCWlmIChmb3JjZSAmJiAhaXNfbnVsbF9zaGExKHByZXYpICYmIGhhc2hjbXAocHJldiwgb2JqZWN0KSkKKwkJcHJpbnRmKF8oIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIpLCB0YWcsIGZpbmRfdW5pcXVlX2FiYnJldihwcmV2LCBERUZBVUxUX0FCQlJFVikpOworCisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnJlZik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VucGFjay1maWxlLmMgYi9idWlsdGluL3VucGFjay1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjNmJjZAotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdW5wYWNrLWZpbGUuYwpAQCAtMCwwICsxLDM2IEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorCitzdGF0aWMgY2hhciAqY3JlYXRlX3RlbXBfZmlsZSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0YXRpYyBjaGFyIHBhdGhbNTBdOworCXZvaWQgKmJ1ZjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBmZDsKKworCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYgfHwgdHlwZSAhPSBPQkpfQkxPQikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBibG9iIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCXhzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIubWVyZ2VfZmlsZV9YWFhYWFgiKTsKKwlmZCA9IHhta3N0ZW1wKHBhdGgpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBidWYsIHNpemUpICE9IHNpemUpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOworCWNsb3NlKGZkKTsKKwlyZXR1cm4gcGF0aDsKK30KKworaW50IGNtZF91bnBhY2tfZmlsZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJaWYgKGFyZ2MgIT0gMiB8fCAhc3RyY21wKGFyZ3ZbMV0sICItaCIpKQorCQl1c2FnZSgiZ2l0IHVucGFjay1maWxlIDxzaGExPiIpOworCWlmIChnZXRfc2hhMShhcmd2WzFdLCBzaGExKSkKKwkJZGllKCJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIsIGFyZ3ZbMV0pOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJcHV0cyhjcmVhdGVfdGVtcF9maWxlKHNoYTEpKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYyBiL2J1aWx0aW4vdW5wYWNrLW9iamVjdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzNlNzljCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jCkBAIC0wLDAgKzEsNTgwIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiZGVsdGEuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImRlY29yYXRlLmgiCisjaW5jbHVkZSAiZnNjay5oIgorCitzdGF0aWMgaW50IGRyeV9ydW4sIHF1aWV0LCByZWNvdmVyLCBoYXNfZXJyb3JzLCBzdHJpY3Q7CitzdGF0aWMgY29uc3QgY2hhciB1bnBhY2tfdXNhZ2VbXSA9ICJnaXQgdW5wYWNrLW9iamVjdHMgWy1uXSBbLXFdIFstcl0gWy0tc3RyaWN0XSI7CisKKy8qIFdlIGFsd2F5cyByZWFkIGluIDRrQiBjaHVua3MuICovCitzdGF0aWMgdW5zaWduZWQgY2hhciBidWZmZXJbNDA5Nl07CitzdGF0aWMgdW5zaWduZWQgaW50IG9mZnNldCwgbGVuOworc3RhdGljIG9mZl90IGNvbnN1bWVkX2J5dGVzOworc3RhdGljIGdpdF9TSEFfQ1RYIGN0eDsKK3N0YXRpYyBzdHJ1Y3QgZnNja19vcHRpb25zIGZzY2tfb3B0aW9ucyA9IEZTQ0tfT1BUSU9OU19TVFJJQ1Q7CisKKy8qCisgKiBXaGVuIHJ1bm5pbmcgdW5kZXIgLS1zdHJpY3QgbW9kZSwgb2JqZWN0cyB3aG9zZSByZWFjaGFiaWxpdHkgYXJlCisgKiBzdXNwZWN0IGFyZSBrZXB0IGluIGNvcmUgd2l0aG91dCBnZXR0aW5nIHdyaXR0ZW4gaW4gdGhlIG9iamVjdAorICogc3RvcmUuCisgKi8KK3N0cnVjdCBvYmpfYnVmZmVyIHsKKwljaGFyICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBzaXplOworfTsKKworc3RhdGljIHN0cnVjdCBkZWNvcmF0aW9uIG9ial9kZWNvcmF0ZTsKKworc3RhdGljIHN0cnVjdCBvYmpfYnVmZmVyICpsb29rdXBfb2JqZWN0X2J1ZmZlcihzdHJ1Y3Qgb2JqZWN0ICpiYXNlKQoreworCXJldHVybiBsb29rdXBfZGVjb3JhdGlvbigmb2JqX2RlY29yYXRlLCBiYXNlKTsKK30KKworc3RhdGljIHZvaWQgYWRkX29iamVjdF9idWZmZXIoc3RydWN0IG9iamVjdCAqb2JqZWN0LCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3Qgb2JqX2J1ZmZlciAqb2JqOworCW9iaiA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBvYmpfYnVmZmVyKSk7CisJb2JqLT5idWZmZXIgPSBidWZmZXI7CisJb2JqLT5zaXplID0gc2l6ZTsKKwlpZiAoYWRkX2RlY29yYXRpb24oJm9ial9kZWNvcmF0ZSwgb2JqZWN0LCBvYmopKQorCQlkaWUoIm9iamVjdCAlcyB0cmllZCB0byBhZGQgYnVmZmVyIHR3aWNlISIsIHNoYTFfdG9faGV4KG9iamVjdC0+c2hhMSkpOworfQorCisvKgorICogTWFrZSBzdXJlIGF0IGxlYXN0ICJtaW4iIGJ5dGVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlciwgYW5kCisgKiByZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIHZvaWQgKmZpbGwoaW50IG1pbikKK3sKKwlpZiAobWluIDw9IGxlbikKKwkJcmV0dXJuIGJ1ZmZlciArIG9mZnNldDsKKwlpZiAobWluID4gc2l6ZW9mKGJ1ZmZlcikpCisJCWRpZSgiY2Fubm90IGZpbGwgJWQgYnl0ZXMiLCBtaW4pOworCWlmIChvZmZzZXQpIHsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIGJ1ZmZlciwgb2Zmc2V0KTsKKwkJbWVtbW92ZShidWZmZXIsIGJ1ZmZlciArIG9mZnNldCwgbGVuKTsKKwkJb2Zmc2V0ID0gMDsKKwl9CisJZG8geworCQlzc2l6ZV90IHJldCA9IHhyZWFkKDAsIGJ1ZmZlciArIGxlbiwgc2l6ZW9mKGJ1ZmZlcikgLSBsZW4pOworCQlpZiAocmV0IDw9IDApIHsKKwkJCWlmICghcmV0KQorCQkJCWRpZSgiZWFybHkgRU9GIik7CisJCQlkaWVfZXJybm8oInJlYWQgZXJyb3Igb24gaW5wdXQiKTsKKwkJfQorCQlsZW4gKz0gcmV0OworCX0gd2hpbGUgKGxlbiA8IG1pbik7CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIHZvaWQgdXNlKGludCBieXRlcykKK3sKKwlpZiAoYnl0ZXMgPiBsZW4pCisJCWRpZSgidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiKTsKKwlsZW4gLT0gYnl0ZXM7CisJb2Zmc2V0ICs9IGJ5dGVzOworCisJLyogbWFrZSBzdXJlIG9mZl90IGlzIHN1ZmZpY2llbnRseSBsYXJnZSBub3QgdG8gd3JhcCAqLworCWlmIChzaWduZWRfYWRkX292ZXJmbG93cyhjb25zdW1lZF9ieXRlcywgYnl0ZXMpKQorCQlkaWUoInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiKTsKKwljb25zdW1lZF9ieXRlcyArPSBieXRlczsKK30KKworc3RhdGljIHZvaWQgKmdldF9kYXRhKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdm9pZCAqYnVmID0geG1hbGxvY3ooc2l6ZSk7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCisJc3RyZWFtLm5leHRfb3V0ID0gYnVmOworCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplOworCXN0cmVhbS5uZXh0X2luID0gZmlsbCgxKTsKKwlzdHJlYW0uYXZhaWxfaW4gPSBsZW47CisJZ2l0X2luZmxhdGVfaW5pdCgmc3RyZWFtKTsKKworCWZvciAoOzspIHsKKwkJaW50IHJldCA9IGdpdF9pbmZsYXRlKCZzdHJlYW0sIDApOworCQl1c2UobGVuIC0gc3RyZWFtLmF2YWlsX2luKTsKKwkJaWYgKHN0cmVhbS50b3RhbF9vdXQgPT0gc2l6ZSAmJiByZXQgPT0gWl9TVFJFQU1fRU5EKQorCQkJYnJlYWs7CisJCWlmIChyZXQgIT0gWl9PSykgeworCQkJZXJyb3IoImluZmxhdGUgcmV0dXJuZWQgJWQiLCByZXQpOworCQkJZnJlZShidWYpOworCQkJYnVmID0gTlVMTDsKKwkJCWlmICghcmVjb3ZlcikKKwkJCQlleGl0KDEpOworCQkJaGFzX2Vycm9ycyA9IDE7CisJCQlicmVhazsKKwkJfQorCQlzdHJlYW0ubmV4dF9pbiA9IGZpbGwoMSk7CisJCXN0cmVhbS5hdmFpbF9pbiA9IGxlbjsKKwl9CisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCXJldHVybiBidWY7Cit9CisKK3N0cnVjdCBkZWx0YV9pbmZvIHsKKwl1bnNpZ25lZCBjaGFyIGJhc2Vfc2hhMVsyMF07CisJdW5zaWduZWQgbnI7CisJb2ZmX3QgYmFzZV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXZvaWQgKmRlbHRhOworCXN0cnVjdCBkZWx0YV9pbmZvICpuZXh0OworfTsKKworc3RhdGljIHN0cnVjdCBkZWx0YV9pbmZvICpkZWx0YV9saXN0OworCitzdGF0aWMgdm9pZCBhZGRfZGVsdGFfdG9fbGlzdCh1bnNpZ25lZCBuciwgdW5zaWduZWQgY29uc3QgY2hhciAqYmFzZV9zaGExLAorCQkJICAgICAgb2ZmX3QgYmFzZV9vZmZzZXQsCisJCQkgICAgICB2b2lkICpkZWx0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBkZWx0YV9pbmZvICppbmZvID0geG1hbGxvYyhzaXplb2YoKmluZm8pKTsKKworCWhhc2hjcHkoaW5mby0+YmFzZV9zaGExLCBiYXNlX3NoYTEpOworCWluZm8tPmJhc2Vfb2Zmc2V0ID0gYmFzZV9vZmZzZXQ7CisJaW5mby0+c2l6ZSA9IHNpemU7CisJaW5mby0+ZGVsdGEgPSBkZWx0YTsKKwlpbmZvLT5uciA9IG5yOworCWluZm8tPm5leHQgPSBkZWx0YV9saXN0OworCWRlbHRhX2xpc3QgPSBpbmZvOworfQorCitzdHJ1Y3Qgb2JqX2luZm8geworCW9mZl90IG9mZnNldDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBvYmplY3QgKm9iajsKK307CisKKyNkZWZpbmUgRkxBR19PUEVOICgxdTw8MjApCisjZGVmaW5lIEZMQUdfV1JJVFRFTiAoMXU8PDIxKQorCitzdGF0aWMgc3RydWN0IG9ial9pbmZvICpvYmpfbGlzdDsKK3N0YXRpYyB1bnNpZ25lZCBucl9vYmplY3RzOworCisvKgorICogQ2FsbGVkIG9ubHkgZnJvbSBjaGVja19vYmplY3QoKSBhZnRlciBpdCB2ZXJpZmllZCB0aGlzIG9iamVjdAorICogaXMgT2suCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX2NhY2hlZF9vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBzdHJ1Y3Qgb2JqX2J1ZmZlciAqb2JqX2J1ZikKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJaWYgKHdyaXRlX3NoYTFfZmlsZShvYmpfYnVmLT5idWZmZXIsIG9ial9idWYtPnNpemUsIHR5cGVuYW1lKG9iai0+dHlwZSksIHNoYTEpIDwgMCkKKwkJZGllKCJmYWlsZWQgdG8gd3JpdGUgb2JqZWN0ICVzIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJb2JqLT5mbGFncyB8PSBGTEFHX1dSSVRURU47Cit9CisKKy8qCisgKiBBdCB0aGUgdmVyeSBlbmQgb2YgdGhlIHByb2Nlc3NpbmcsIHdyaXRlX3Jlc3QoKSBzY2FucyB0aGUgb2JqZWN0cworICogdGhhdCBoYXZlIHJlYWNoYWJpbGl0eSByZXF1aXJlbWVudHMgYW5kIGNhbGxzIHRoaXMgZnVuY3Rpb24uCisgKiBWZXJpZnkgaXRzIHJlYWNoYWJpbGl0eSBhbmQgdmFsaWRpdHkgcmVjdXJzaXZlbHkgYW5kIHdyaXRlIGl0IG91dC4KKyAqLworc3RhdGljIGludCBjaGVja19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3Qgb2JqX2J1ZmZlciAqb2JqX2J1ZjsKKworCWlmICghb2JqKQorCQlyZXR1cm4gMTsKKworCWlmIChvYmotPmZsYWdzICYgRkxBR19XUklUVEVOKQorCQlyZXR1cm4gMDsKKworCWlmICh0eXBlICE9IE9CSl9BTlkgJiYgb2JqLT50eXBlICE9IHR5cGUpCisJCWRpZSgib2JqZWN0IHR5cGUgbWlzbWF0Y2giKTsKKworCWlmICghKG9iai0+ZmxhZ3MgJiBGTEFHX09QRU4pKSB7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJaW50IHR5cGUgPSBzaGExX29iamVjdF9pbmZvKG9iai0+c2hhMSwgJnNpemUpOworCQlpZiAodHlwZSAhPSBvYmotPnR5cGUgfHwgdHlwZSA8PSAwKQorCQkJZGllKCJvYmplY3Qgb2YgdW5leHBlY3RlZCB0eXBlIik7CisJCW9iai0+ZmxhZ3MgfD0gRkxBR19XUklUVEVOOworCQlyZXR1cm4gMDsKKwl9CisKKwlvYmpfYnVmID0gbG9va3VwX29iamVjdF9idWZmZXIob2JqKTsKKwlpZiAoIW9ial9idWYpCisJCWRpZSgiV2hvb3BzISBDYW5ub3QgZmluZCBvYmplY3QgJyVzJyIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCWlmIChmc2NrX29iamVjdChvYmosIG9ial9idWYtPmJ1ZmZlciwgb2JqX2J1Zi0+c2l6ZSwgJmZzY2tfb3B0aW9ucykpCisJCWRpZSgiRXJyb3IgaW4gb2JqZWN0Iik7CisJZnNja19vcHRpb25zLndhbGsgPSBjaGVja19vYmplY3Q7CisJaWYgKGZzY2tfd2FsayhvYmosIE5VTEwsICZmc2NrX29wdGlvbnMpKQorCQlkaWUoIkVycm9yIG9uIHJlYWNoYWJsZSBvYmplY3RzIG9mICVzIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJd3JpdGVfY2FjaGVkX29iamVjdChvYmosIG9ial9idWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9yZXN0KHZvaWQpCit7CisJdW5zaWduZWQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCWlmIChvYmpfbGlzdFtpXS5vYmopCisJCQljaGVja19vYmplY3Qob2JqX2xpc3RbaV0ub2JqLCBPQkpfQU5ZLCBOVUxMLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFkZGVkX29iamVjdCh1bnNpZ25lZCBuciwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKy8qCisgKiBXcml0ZSBvdXQgbnItdGggb2JqZWN0IGZyb20gdGhlIGxpc3QsIG5vdyB3ZSBrbm93IHRoZSBjb250ZW50cworICogb2YgaXQuICBVbmRlciAtLXN0cmljdCwgdGhpcyBidWZmZXJzIHN0cnVjdHVyZWQgb2JqZWN0cyBpbi1jb3JlLAorICogdG8gYmUgY2hlY2tlZCBhdCB0aGUgZW5kLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9vYmplY3QodW5zaWduZWQgbnIsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoIXN0cmljdCkgeworCQlpZiAod3JpdGVfc2hhMV9maWxlKGJ1Ziwgc2l6ZSwgdHlwZW5hbWUodHlwZSksIG9ial9saXN0W25yXS5zaGExKSA8IDApCisJCQlkaWUoImZhaWxlZCB0byB3cml0ZSBvYmplY3QiKTsKKwkJYWRkZWRfb2JqZWN0KG5yLCB0eXBlLCBidWYsIHNpemUpOworCQlmcmVlKGJ1Zik7CisJCW9ial9saXN0W25yXS5vYmogPSBOVUxMOworCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfQkxPQikgeworCQlzdHJ1Y3QgYmxvYiAqYmxvYjsKKwkJaWYgKHdyaXRlX3NoYTFfZmlsZShidWYsIHNpemUsIHR5cGVuYW1lKHR5cGUpLCBvYmpfbGlzdFtucl0uc2hhMSkgPCAwKQorCQkJZGllKCJmYWlsZWQgdG8gd3JpdGUgb2JqZWN0Iik7CisJCWFkZGVkX29iamVjdChuciwgdHlwZSwgYnVmLCBzaXplKTsKKwkJZnJlZShidWYpOworCisJCWJsb2IgPSBsb29rdXBfYmxvYihvYmpfbGlzdFtucl0uc2hhMSk7CisJCWlmIChibG9iKQorCQkJYmxvYi0+b2JqZWN0LmZsYWdzIHw9IEZMQUdfV1JJVFRFTjsKKwkJZWxzZQorCQkJZGllKCJpbnZhbGlkIGJsb2Igb2JqZWN0Iik7CisJCW9ial9saXN0W25yXS5vYmogPSBOVUxMOworCX0gZWxzZSB7CisJCXN0cnVjdCBvYmplY3QgKm9iajsKKwkJaW50IGVhdGVuOworCQloYXNoX3NoYTFfZmlsZShidWYsIHNpemUsIHR5cGVuYW1lKHR5cGUpLCBvYmpfbGlzdFtucl0uc2hhMSk7CisJCWFkZGVkX29iamVjdChuciwgdHlwZSwgYnVmLCBzaXplKTsKKwkJb2JqID0gcGFyc2Vfb2JqZWN0X2J1ZmZlcihvYmpfbGlzdFtucl0uc2hhMSwgdHlwZSwgc2l6ZSwgYnVmLCAmZWF0ZW4pOworCQlpZiAoIW9iaikKKwkJCWRpZSgiaW52YWxpZCAlcyIsIHR5cGVuYW1lKHR5cGUpKTsKKwkJYWRkX29iamVjdF9idWZmZXIob2JqLCBidWYsIHNpemUpOworCQlvYmotPmZsYWdzIHw9IEZMQUdfT1BFTjsKKwkJb2JqX2xpc3RbbnJdLm9iaiA9IG9iajsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlc29sdmVfZGVsdGEodW5zaWduZWQgbnIsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSAgdm9pZCAqYmFzZSwgdW5zaWduZWQgbG9uZyBiYXNlX3NpemUsCisJCQkgIHZvaWQgKmRlbHRhLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUpCit7CisJdm9pZCAqcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgcmVzdWx0X3NpemU7CisKKwlyZXN1bHQgPSBwYXRjaF9kZWx0YShiYXNlLCBiYXNlX3NpemUsCisJCQkgICAgIGRlbHRhLCBkZWx0YV9zaXplLAorCQkJICAgICAmcmVzdWx0X3NpemUpOworCWlmICghcmVzdWx0KQorCQlkaWUoImZhaWxlZCB0byBhcHBseSBkZWx0YSIpOworCWZyZWUoZGVsdGEpOworCXdyaXRlX29iamVjdChuciwgdHlwZSwgcmVzdWx0LCByZXN1bHRfc2l6ZSk7Cit9CisKKy8qCisgKiBXZSBub3cga25vdyB0aGUgY29udGVudHMgb2YgYW4gb2JqZWN0ICh3aGljaCBpcyBuci10aCBpbiB0aGUgcGFjayk7CisgKiByZXNvbHZlIGFsbCB0aGUgZGVsdGlmaWVkIG9iamVjdHMgdGhhdCBhcmUgYmFzZWQgb24gaXQuCisgKi8KK3N0YXRpYyB2b2lkIGFkZGVkX29iamVjdCh1bnNpZ25lZCBuciwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGVsdGFfaW5mbyAqKnAgPSAmZGVsdGFfbGlzdDsKKwlzdHJ1Y3QgZGVsdGFfaW5mbyAqaW5mbzsKKworCXdoaWxlICgoaW5mbyA9ICpwKSAhPSBOVUxMKSB7CisJCWlmICghaGFzaGNtcChpbmZvLT5iYXNlX3NoYTEsIG9ial9saXN0W25yXS5zaGExKSB8fAorCQkgICAgaW5mby0+YmFzZV9vZmZzZXQgPT0gb2JqX2xpc3RbbnJdLm9mZnNldCkgeworCQkJKnAgPSBpbmZvLT5uZXh0OworCQkJcCA9ICZkZWx0YV9saXN0OworCQkJcmVzb2x2ZV9kZWx0YShpbmZvLT5uciwgdHlwZSwgZGF0YSwgc2l6ZSwKKwkJCQkgICAgICBpbmZvLT5kZWx0YSwgaW5mby0+c2l6ZSk7CisJCQlmcmVlKGluZm8pOworCQkJY29udGludWU7CisJCX0KKwkJcCA9ICZpbmZvLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgdW5wYWNrX25vbl9kZWx0YV9lbnRyeShlbnVtIG9iamVjdF90eXBlIHR5cGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICB1bnNpZ25lZCBucikKK3sKKwl2b2lkICpidWYgPSBnZXRfZGF0YShzaXplKTsKKworCWlmICghZHJ5X3J1biAmJiBidWYpCisJCXdyaXRlX29iamVjdChuciwgdHlwZSwgYnVmLCBzaXplKTsKKwllbHNlCisJCWZyZWUoYnVmKTsKK30KKworc3RhdGljIGludCByZXNvbHZlX2FnYWluc3RfaGVsZCh1bnNpZ25lZCBuciwgY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZSwKKwkJCQl2b2lkICpkZWx0YV9kYXRhLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCXN0cnVjdCBvYmpfYnVmZmVyICpvYmpfYnVmZmVyOworCW9iaiA9IGxvb2t1cF9vYmplY3QoYmFzZSk7CisJaWYgKCFvYmopCisJCXJldHVybiAwOworCW9ial9idWZmZXIgPSBsb29rdXBfb2JqZWN0X2J1ZmZlcihvYmopOworCWlmICghb2JqX2J1ZmZlcikKKwkJcmV0dXJuIDA7CisJcmVzb2x2ZV9kZWx0YShuciwgb2JqLT50eXBlLCBvYmpfYnVmZmVyLT5idWZmZXIsCisJCSAgICAgIG9ial9idWZmZXItPnNpemUsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB1bnBhY2tfZGVsdGFfZW50cnkoZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsCisJCQkgICAgICAgdW5zaWduZWQgbnIpCit7CisJdm9pZCAqZGVsdGFfZGF0YSwgKmJhc2U7CisJdW5zaWduZWQgbG9uZyBiYXNlX3NpemU7CisJdW5zaWduZWQgY2hhciBiYXNlX3NoYTFbMjBdOworCisJaWYgKHR5cGUgPT0gT0JKX1JFRl9ERUxUQSkgeworCQloYXNoY3B5KGJhc2Vfc2hhMSwgZmlsbCgyMCkpOworCQl1c2UoMjApOworCQlkZWx0YV9kYXRhID0gZ2V0X2RhdGEoZGVsdGFfc2l6ZSk7CisJCWlmIChkcnlfcnVuIHx8ICFkZWx0YV9kYXRhKSB7CisJCQlmcmVlKGRlbHRhX2RhdGEpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChoYXNfc2hhMV9maWxlKGJhc2Vfc2hhMSkpCisJCQk7IC8qIE9rIHdlIGhhdmUgdGhpcyBvbmUgKi8KKwkJZWxzZSBpZiAocmVzb2x2ZV9hZ2FpbnN0X2hlbGQobnIsIGJhc2Vfc2hhMSwKKwkJCQkJICAgICAgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSkpCisJCQlyZXR1cm47IC8qIHdlIGFyZSBkb25lICovCisJCWVsc2UgeworCQkJLyogY2Fubm90IHJlc29sdmUgeWV0IC0tLSBxdWV1ZSBpdCAqLworCQkJaGFzaGNweShvYmpfbGlzdFtucl0uc2hhMSwgbnVsbF9zaGExKTsKKwkJCWFkZF9kZWx0YV90b19saXN0KG5yLCBiYXNlX3NoYTEsIDAsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpOworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgYmFzZV9mb3VuZCA9IDA7CisJCXVuc2lnbmVkIGNoYXIgKnBhY2ssIGM7CisJCW9mZl90IGJhc2Vfb2Zmc2V0OworCQl1bnNpZ25lZCBsbywgbWlkLCBoaTsKKworCQlwYWNrID0gZmlsbCgxKTsKKwkJYyA9ICpwYWNrOworCQl1c2UoMSk7CisJCWJhc2Vfb2Zmc2V0ID0gYyAmIDEyNzsKKwkJd2hpbGUgKGMgJiAxMjgpIHsKKwkJCWJhc2Vfb2Zmc2V0ICs9IDE7CisJCQlpZiAoIWJhc2Vfb2Zmc2V0IHx8IE1TQihiYXNlX29mZnNldCwgNykpCisJCQkJZGllKCJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0Iik7CisJCQlwYWNrID0gZmlsbCgxKTsKKwkJCWMgPSAqcGFjazsKKwkJCXVzZSgxKTsKKwkJCWJhc2Vfb2Zmc2V0ID0gKGJhc2Vfb2Zmc2V0IDw8IDcpICsgKGMgJiAxMjcpOworCQl9CisJCWJhc2Vfb2Zmc2V0ID0gb2JqX2xpc3RbbnJdLm9mZnNldCAtIGJhc2Vfb2Zmc2V0OworCQlpZiAoYmFzZV9vZmZzZXQgPD0gMCB8fCBiYXNlX29mZnNldCA+PSBvYmpfbGlzdFtucl0ub2Zmc2V0KQorCQkJZGllKCJvZmZzZXQgdmFsdWUgb3V0IG9mIGJvdW5kIGZvciBkZWx0YSBiYXNlIG9iamVjdCIpOworCisJCWRlbHRhX2RhdGEgPSBnZXRfZGF0YShkZWx0YV9zaXplKTsKKwkJaWYgKGRyeV9ydW4gfHwgIWRlbHRhX2RhdGEpIHsKKwkJCWZyZWUoZGVsdGFfZGF0YSk7CisJCQlyZXR1cm47CisJCX0KKwkJbG8gPSAwOworCQloaSA9IG5yOworCQl3aGlsZSAobG8gPCBoaSkgeworCQkJbWlkID0gKGxvICsgaGkpLzI7CisJCQlpZiAoYmFzZV9vZmZzZXQgPCBvYmpfbGlzdFttaWRdLm9mZnNldCkgeworCQkJCWhpID0gbWlkOworCQkJfSBlbHNlIGlmIChiYXNlX29mZnNldCA+IG9ial9saXN0W21pZF0ub2Zmc2V0KSB7CisJCQkJbG8gPSBtaWQgKyAxOworCQkJfSBlbHNlIHsKKwkJCQloYXNoY3B5KGJhc2Vfc2hhMSwgb2JqX2xpc3RbbWlkXS5zaGExKTsKKwkJCQliYXNlX2ZvdW5kID0gIWlzX251bGxfc2hhMShiYXNlX3NoYTEpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghYmFzZV9mb3VuZCkgeworCQkJLyoKKwkJCSAqIFRoZSBkZWx0YSBiYXNlIG9iamVjdCBpcyBpdHNlbGYgYSBkZWx0YSB0aGF0CisJCQkgKiBoYXMgbm90IGJlZW4gcmVzb2x2ZWQgeWV0LgorCQkJICovCisJCQloYXNoY3B5KG9ial9saXN0W25yXS5zaGExLCBudWxsX3NoYTEpOworCQkJYWRkX2RlbHRhX3RvX2xpc3QobnIsIG51bGxfc2hhMSwgYmFzZV9vZmZzZXQsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKHJlc29sdmVfYWdhaW5zdF9oZWxkKG5yLCBiYXNlX3NoYTEsIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUpKQorCQlyZXR1cm47CisKKwliYXNlID0gcmVhZF9zaGExX2ZpbGUoYmFzZV9zaGExLCAmdHlwZSwgJmJhc2Vfc2l6ZSk7CisJaWYgKCFiYXNlKSB7CisJCWVycm9yKCJmYWlsZWQgdG8gcmVhZCBkZWx0YS1wYWNrIGJhc2Ugb2JqZWN0ICVzIiwKKwkJICAgICAgc2hhMV90b19oZXgoYmFzZV9zaGExKSk7CisJCWlmICghcmVjb3ZlcikKKwkJCWV4aXQoMSk7CisJCWhhc19lcnJvcnMgPSAxOworCQlyZXR1cm47CisJfQorCXJlc29sdmVfZGVsdGEobnIsIHR5cGUsIGJhc2UsIGJhc2Vfc2l6ZSwgZGVsdGFfZGF0YSwgZGVsdGFfc2l6ZSk7CisJZnJlZShiYXNlKTsKK30KKworc3RhdGljIHZvaWQgdW5wYWNrX29uZSh1bnNpZ25lZCBucikKK3sKKwl1bnNpZ25lZCBzaGlmdDsKKwl1bnNpZ25lZCBjaGFyICpwYWNrOworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgYzsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlvYmpfbGlzdFtucl0ub2Zmc2V0ID0gY29uc3VtZWRfYnl0ZXM7CisKKwlwYWNrID0gZmlsbCgxKTsKKwljID0gKnBhY2s7CisJdXNlKDEpOworCXR5cGUgPSAoYyA+PiA0KSAmIDc7CisJc2l6ZSA9IChjICYgMTUpOworCXNoaWZ0ID0gNDsKKwl3aGlsZSAoYyAmIDB4ODApIHsKKwkJcGFjayA9IGZpbGwoMSk7CisJCWMgPSAqcGFjazsKKwkJdXNlKDEpOworCQlzaXplICs9IChjICYgMHg3ZikgPDwgc2hpZnQ7CisJCXNoaWZ0ICs9IDc7CisJfQorCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBPQkpfQ09NTUlUOgorCWNhc2UgT0JKX1RSRUU6CisJY2FzZSBPQkpfQkxPQjoKKwljYXNlIE9CSl9UQUc6CisJCXVucGFja19ub25fZGVsdGFfZW50cnkodHlwZSwgc2l6ZSwgbnIpOworCQlyZXR1cm47CisJY2FzZSBPQkpfUkVGX0RFTFRBOgorCWNhc2UgT0JKX09GU19ERUxUQToKKwkJdW5wYWNrX2RlbHRhX2VudHJ5KHR5cGUsIHNpemUsIG5yKTsKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWVycm9yKCJiYWQgb2JqZWN0IHR5cGUgJWQiLCB0eXBlKTsKKwkJaGFzX2Vycm9ycyA9IDE7CisJCWlmIChyZWNvdmVyKQorCQkJcmV0dXJuOworCQlleGl0KDEpOworCX0KK30KKworc3RhdGljIHZvaWQgdW5wYWNrX2FsbCh2b2lkKQoreworCWludCBpOworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MgPSBOVUxMOworCXN0cnVjdCBwYWNrX2hlYWRlciAqaGRyID0gZmlsbChzaXplb2Yoc3RydWN0IHBhY2tfaGVhZGVyKSk7CisKKwlucl9vYmplY3RzID0gbnRvaGwoaGRyLT5oZHJfZW50cmllcyk7CisKKwlpZiAobnRvaGwoaGRyLT5oZHJfc2lnbmF0dXJlKSAhPSBQQUNLX1NJR05BVFVSRSkKKwkJZGllKCJiYWQgcGFjayBmaWxlIik7CisJaWYgKCFwYWNrX3ZlcnNpb25fb2soaGRyLT5oZHJfdmVyc2lvbikpCisJCWRpZSgidW5rbm93biBwYWNrIGZpbGUgdmVyc2lvbiAlIlBSSXUzMiwKKwkJCW50b2hsKGhkci0+aGRyX3ZlcnNpb24pKTsKKwl1c2Uoc2l6ZW9mKHN0cnVjdCBwYWNrX2hlYWRlcikpOworCisJaWYgKCFxdWlldCkKKwkJcHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcyhfKCJVbnBhY2tpbmcgb2JqZWN0cyIpLCBucl9vYmplY3RzKTsKKwlvYmpfbGlzdCA9IHhjYWxsb2MobnJfb2JqZWN0cywgc2l6ZW9mKCpvYmpfbGlzdCkpOworCWZvciAoaSA9IDA7IGkgPCBucl9vYmplY3RzOyBpKyspIHsKKwkJdW5wYWNrX29uZShpKTsKKwkJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgaSArIDEpOworCX0KKwlzdG9wX3Byb2dyZXNzKCZwcm9ncmVzcyk7CisKKwlpZiAoZGVsdGFfbGlzdCkKKwkJZGllKCJ1bnJlc29sdmVkIGRlbHRhcyBsZWZ0IGFmdGVyIHVucGFja2luZyIpOworfQorCitpbnQgY21kX3VucGFja19vYmplY3RzKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwljaGVja19yZXBsYWNlX3JlZnMgPSAwOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJcXVpZXQgPSAhaXNhdHR5KDIpOworCisJZm9yIChpID0gMSA7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKworCQlpZiAoKmFyZyA9PSAnLScpIHsKKwkJCWlmICghc3RyY21wKGFyZywgIi1uIikpIHsKKwkJCQlkcnlfcnVuID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi1xIikpIHsKKwkJCQlxdWlldCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItciIpKSB7CisJCQkJcmVjb3ZlciA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLXN0cmljdCIpKSB7CisJCQkJc3RyaWN0ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChza2lwX3ByZWZpeChhcmcsICItLXN0cmljdD0iLCAmYXJnKSkgeworCQkJCXN0cmljdCA9IDE7CisJCQkJZnNja19zZXRfbXNnX3R5cGVzKCZmc2NrX29wdGlvbnMsIGFyZyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1wYWNrX2hlYWRlcj0iKSkgeworCQkJCXN0cnVjdCBwYWNrX2hlYWRlciAqaGRyOworCQkJCWNoYXIgKmM7CisKKwkJCQloZHIgPSAoc3RydWN0IHBhY2tfaGVhZGVyICopYnVmZmVyOworCQkJCWhkci0+aGRyX3NpZ25hdHVyZSA9IGh0b25sKFBBQ0tfU0lHTkFUVVJFKTsKKwkJCQloZHItPmhkcl92ZXJzaW9uID0gaHRvbmwoc3RydG91bChhcmcgKyAxNCwgJmMsIDEwKSk7CisJCQkJaWYgKCpjICE9ICcsJykKKwkJCQkJZGllKCJiYWQgJXMiLCBhcmcpOworCQkJCWhkci0+aGRyX2VudHJpZXMgPSBodG9ubChzdHJ0b3VsKGMgKyAxLCAmYywgMTApKTsKKwkJCQlpZiAoKmMpCisJCQkJCWRpZSgiYmFkICVzIiwgYXJnKTsKKwkJCQlsZW4gPSBzaXplb2YoKmhkcik7CisJCQkJY29udGludWU7CisJCQl9CisJCQl1c2FnZSh1bnBhY2tfdXNhZ2UpOworCQl9CisKKwkJLyogV2UgZG9uJ3QgdGFrZSBhbnkgbm9uLWZsYWcgYXJndW1lbnRzIG5vdy4uIE1heWJlIHNvbWUgZGF5ICovCisJCXVzYWdlKHVucGFja191c2FnZSk7CisJfQorCWdpdF9TSEExX0luaXQoJmN0eCk7CisJdW5wYWNrX2FsbCgpOworCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCBidWZmZXIsIG9mZnNldCk7CisJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmN0eCk7CisJaWYgKHN0cmljdCkKKwkJd3JpdGVfcmVzdCgpOworCWlmIChoYXNoY21wKGZpbGwoMjApLCBzaGExKSkKKwkJZGllKCJmaW5hbCBzaGExIGRpZCBub3QgbWF0Y2giKTsKKwl1c2UoMjApOworCisJLyogV3JpdGUgdGhlIGxhc3QgcGFydCBvZiB0aGUgYnVmZmVyIHRvIHN0ZG91dCAqLworCXdoaWxlIChsZW4pIHsKKwkJaW50IHJldCA9IHh3cml0ZSgxLCBidWZmZXIgKyBvZmZzZXQsIGxlbik7CisJCWlmIChyZXQgPD0gMCkKKwkJCWJyZWFrOworCQlsZW4gLT0gcmV0OworCQlvZmZzZXQgKz0gcmV0OworCX0KKworCS8qIEFsbCBkb25lICovCisJcmV0dXJuIGhhc19lcnJvcnM7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3VwZGF0ZS1pbmRleC5jIGIvYnVpbHRpbi91cGRhdGUtaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDMxOTM4Ci0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi91cGRhdGUtaW5kZXguYwpAQCAtMCwwICsxLDExNDMgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIExpbnVzIFRvcnZhbGRzLCAyMDA1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJzcGxpdC1pbmRleC5oIgorCisvKgorICogRGVmYXVsdCB0byBub3QgYWxsb3dpbmcgY2hhbmdlcyB0byB0aGUgbGlzdCBvZiBmaWxlcy4gVGhlCisgKiB0b29sIGRvZXNuJ3QgYWN0dWFsbHkgY2FyZSwgYnV0IHRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIGFkZAorICogZmlsZXMgdG8gdGhlIHJldmlzaW9uIGNvbnRyb2wgYnkgbWlzdGFrZSBieSBkb2luZyBzb21ldGhpbmcKKyAqIGxpa2UgImdpdCB1cGRhdGUtaW5kZXggKiIgYW5kIHN1ZGRlbmx5IGhhdmluZyBhbGwgdGhlIG9iamVjdAorICogZmlsZXMgYmUgcmV2aXNpb24gY29udHJvbGxlZC4KKyAqLworc3RhdGljIGludCBhbGxvd19hZGQ7CitzdGF0aWMgaW50IGFsbG93X3JlbW92ZTsKK3N0YXRpYyBpbnQgYWxsb3dfcmVwbGFjZTsKK3N0YXRpYyBpbnQgaW5mb19vbmx5Oworc3RhdGljIGludCBmb3JjZV9yZW1vdmU7CitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IG1hcmtfdmFsaWRfb25seTsKK3N0YXRpYyBpbnQgbWFya19za2lwX3dvcmt0cmVlX29ubHk7CisjZGVmaW5lIE1BUktfRkxBRyAxCisjZGVmaW5lIFVOTUFSS19GTEFHIDIKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG10aW1lX2RpciA9IFNUUkJVRl9JTklUOworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIHZvaWQgcmVwb3J0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgdnA7CisKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKworCXZhX3N0YXJ0KHZwLCBmbXQpOworCXZwcmludGYoZm10LCB2cCk7CisJcHV0Y2hhcignXG4nKTsKKwl2YV9lbmQodnApOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfdGVzdF9kaXJlY3Rvcnkodm9pZCkKK3sKKwlpZiAobXRpbWVfZGlyLmxlbikKKwkJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmbXRpbWVfZGlyLCAwKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9tdGltZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfcmVzZXQoJnNiKTsKKwlzdHJidWZfYWRkZigmc2IsICIlcy8lcyIsIG10aW1lX2Rpci5idWYsIHBhdGgpOworCXJldHVybiBzYi5idWY7Cit9CisKK3N0YXRpYyB2b2lkIHhta2Rpcihjb25zdCBjaGFyICpwYXRoKQoreworCXBhdGggPSBnZXRfbXRpbWVfcGF0aChwYXRoKTsKKwlpZiAobWtkaXIocGF0aCwgMDcwMCkpCisJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIpLCBwYXRoKTsKK30KKworc3RhdGljIGludCB4c3RhdF9tdGltZV9kaXIoc3RydWN0IHN0YXQgKnN0KQoreworCWlmIChzdGF0KG10aW1lX2Rpci5idWYsIHN0KSkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBzdGF0ICVzIiksIG10aW1lX2Rpci5idWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGZkOworCXBhdGggPSBnZXRfbXRpbWVfcGF0aChwYXRoKTsKKwlmZCA9IG9wZW4ocGF0aCwgT19DUkVBVCB8IE9fUkRXUiwgMDY0NCk7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIpLCBwYXRoKTsKKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyB2b2lkIHh1bmxpbmsoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlwYXRoID0gZ2V0X210aW1lX3BhdGgocGF0aCk7CisJaWYgKHVubGluayhwYXRoKSkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIpLCBwYXRoKTsKK30KKworc3RhdGljIHZvaWQgeHJtZGlyKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcGF0aCA9IGdldF9tdGltZV9wYXRoKHBhdGgpOworCWlmIChybWRpcihwYXRoKSkKKwkJZGllX2Vycm5vKF8oImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIiksIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCBhdm9pZF9yYWN5KHZvaWQpCit7CisJLyoKKwkgKiBub3QgdXNlIGlmIHdlIGNvdWxkIHVzbGVlcCgxMCkgaWYgVVNFX05TRUMgaXMgZGVmaW5lZC4gVGhlCisJICogZmllbGQgbnNlYyBjb3VsZCBiZSB0aGVyZSwgYnV0IHRoZSBPUyBjb3VsZCBjaG9vc2UgdG8KKwkgKiBpZ25vcmUgaXQ/CisJICovCisJc2xlZXAoMSk7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9pZl91bnRyYWNrZWRfY2FjaGVfaXNfc3VwcG9ydGVkKHZvaWQpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHN0YXRfZGF0YSBiYXNlOworCWludCBmZCwgcmV0ID0gMDsKKworCXN0cmJ1Zl9hZGRzdHIoJm10aW1lX2RpciwgIm10aW1lLXRlc3QtWFhYWFhYIik7CisJaWYgKCFta2R0ZW1wKG10aW1lX2Rpci5idWYpKQorCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBtYWtlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKTsKKworCWZwcmludGYoc3RkZXJyLCBfKCJUZXN0aW5nICIpKTsKKwlhdGV4aXQocmVtb3ZlX3Rlc3RfZGlyZWN0b3J5KTsKKwl4c3RhdF9tdGltZV9kaXIoJnN0KTsKKwlmaWxsX3N0YXRfZGF0YSgmYmFzZSwgJnN0KTsKKwlmcHV0YygnLicsIHN0ZGVycik7CisKKwlhdm9pZF9yYWN5KCk7CisJZmQgPSBjcmVhdGVfZmlsZSgibmV3ZmlsZSIpOworCXhzdGF0X210aW1lX2Rpcigmc3QpOworCWlmICghbWF0Y2hfc3RhdF9kYXRhKCZiYXNlLCAmc3QpKSB7CisJCWNsb3NlKGZkKTsKKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsXygiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCAiCisJCQkJICAgICJjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiKSk7CisJCWdvdG8gZG9uZTsKKwl9CisJZmlsbF9zdGF0X2RhdGEoJmJhc2UsICZzdCk7CisJZnB1dGMoJy4nLCBzdGRlcnIpOworCisJYXZvaWRfcmFjeSgpOworCXhta2RpcigibmV3LWRpciIpOworCXhzdGF0X210aW1lX2Rpcigmc3QpOworCWlmICghbWF0Y2hfc3RhdF9kYXRhKCZiYXNlLCAmc3QpKSB7CisJCWNsb3NlKGZkKTsKKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlICIKKwkJCQkgICAgICJhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IikpOworCQlnb3RvIGRvbmU7CisJfQorCWZpbGxfc3RhdF9kYXRhKCZiYXNlLCAmc3QpOworCWZwdXRjKCcuJywgc3RkZXJyKTsKKworCWF2b2lkX3JhY3koKTsKKwl3cml0ZV9vcl9kaWUoZmQsICJkYXRhIiwgNCk7CisJY2xvc2UoZmQpOworCXhzdGF0X210aW1lX2Rpcigmc3QpOworCWlmIChtYXRjaF9zdGF0X2RhdGEoJmJhc2UsICZzdCkpIHsKKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwkJZnByaW50Zl9sbihzdGRlcnIsIF8oImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyAiCisJCQkJICAgICAiYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIikpOworCQlnb3RvIGRvbmU7CisJfQorCWZwdXRjKCcuJywgc3RkZXJyKTsKKworCWF2b2lkX3JhY3koKTsKKwljbG9zZShjcmVhdGVfZmlsZSgibmV3LWRpci9uZXciKSk7CisJeHN0YXRfbXRpbWVfZGlyKCZzdCk7CisJaWYgKG1hdGNoX3N0YXRfZGF0YSgmYmFzZSwgJnN0KSkgeworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyICIKKwkJCQkgICAgICJhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiKSk7CisJCWdvdG8gZG9uZTsKKwl9CisJZnB1dGMoJy4nLCBzdGRlcnIpOworCisJYXZvaWRfcmFjeSgpOworCXh1bmxpbmsoIm5ld2ZpbGUiKTsKKwl4c3RhdF9tdGltZV9kaXIoJnN0KTsKKwlpZiAoIW1hdGNoX3N0YXRfZGF0YSgmYmFzZSwgJnN0KSkgeworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCAiCisJCQkJICAgICAiY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIpKTsKKwkJZ290byBkb25lOworCX0KKwlmaWxsX3N0YXRfZGF0YSgmYmFzZSwgJnN0KTsKKwlmcHV0YygnLicsIHN0ZGVycik7CisKKwlhdm9pZF9yYWN5KCk7CisJeHVubGluaygibmV3LWRpci9uZXciKTsKKwl4cm1kaXIoIm5ldy1kaXIiKTsKKwl4c3RhdF9tdGltZV9kaXIoJnN0KTsKKwlpZiAoIW1hdGNoX3N0YXRfZGF0YSgmYmFzZSwgJnN0KSkgeworCQlmcHV0YygnXG4nLCBzdGRlcnIpOworCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCAiCisJCQkJICAgICAiY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IikpOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHJtZGlyKG10aW1lX2Rpci5idWYpKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiKSwgbXRpbWVfZGlyLmJ1Zik7CisJZnByaW50Zl9sbihzdGRlcnIsIF8oIiBPSyIpKTsKKwlyZXQgPSAxOworCitkb25lOgorCXN0cmJ1Zl9yZWxlYXNlKCZtdGltZV9kaXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWFya19jZV9mbGFncyhjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZywgaW50IG1hcmspCit7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CisJaW50IHBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIG5hbWVsZW4pOworCWlmICgwIDw9IHBvcykgeworCQlpZiAobWFyaykKKwkJCWFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9mbGFncyB8PSBmbGFnOworCQllbHNlCisJCQlhY3RpdmVfY2FjaGVbcG9zXS0+Y2VfZmxhZ3MgJj0gfmZsYWc7CisJCWFjdGl2ZV9jYWNoZVtwb3NdLT5jZV9mbGFncyB8PSBDRV9VUERBVEVfSU5fQkFTRTsKKwkJY2FjaGVfdHJlZV9pbnZhbGlkYXRlX3BhdGgoJnRoZV9pbmRleCwgcGF0aCk7CisJCWFjdGl2ZV9jYWNoZV9jaGFuZ2VkIHw9IENFX0VOVFJZX0NIQU5HRUQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX29uZV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKCFhbGxvd19yZW1vdmUpCisJCXJldHVybiBlcnJvcigiJXM6IGRvZXMgbm90IGV4aXN0IGFuZCAtLXJlbW92ZSBub3QgcGFzc2VkIiwgcGF0aCk7CisJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkpCisJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCByZW1vdmUgZnJvbSB0aGUgaW5kZXgiLCBwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhhbmRsZSBhIHBhdGggdGhhdCBjb3VsZG4ndCBiZSBsc3RhdCdlZC4gSXQncyBlaXRoZXI6CisgKiAgLSBtaXNzaW5nIGZpbGUgKEVOT0VOVCBvciBFTk9URElSKS4gVGhhdCdzIG9rIGlmIHdlJ3JlCisgKiAgICBzdXBwb3NlZCB0byBiZSByZW1vdmluZyBpdCBhbmQgdGhlIHJlbW92YWwgYWN0dWFsbHkKKyAqICAgIHN1Y2NlZWRzLgorICogIC0gcGVybWlzc2lvbiBlcnJvci4gVGhhdCdzIG5ldmVyIG9rLgorICovCitzdGF0aWMgaW50IHByb2Nlc3NfbHN0YXRfZXJyb3IoY29uc3QgY2hhciAqcGF0aCwgaW50IGVycikKK3sKKwlpZiAoZXJyID09IEVOT0VOVCB8fCBlcnIgPT0gRU5PVERJUikKKwkJcmV0dXJuIHJlbW92ZV9vbmVfcGF0aChwYXRoKTsKKwlyZXR1cm4gZXJyb3IoImxzdGF0KFwiJXNcIik6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKK30KKworc3RhdGljIGludCBhZGRfb25lX3BhdGgoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlpbnQgb3B0aW9uLCBzaXplOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwkvKiBXYXMgdGhlIG9sZCBpbmRleCBlbnRyeSBhbHJlYWR5IHVwLXRvLWRhdGU/ICovCisJaWYgKG9sZCAmJiAhY2Vfc3RhZ2Uob2xkKSAmJiAhY2VfbWF0Y2hfc3RhdChvbGQsIHN0LCAwKSkKKwkJcmV0dXJuIDA7CisKKwlzaXplID0gY2FjaGVfZW50cnlfc2l6ZShsZW4pOworCWNlID0geGNhbGxvYygxLCBzaXplKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIGxlbik7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKDApOworCWNlLT5jZV9uYW1lbGVuID0gbGVuOworCWZpbGxfc3RhdF9jYWNoZV9pbmZvKGNlLCBzdCk7CisJY2UtPmNlX21vZGUgPSBjZV9tb2RlX2Zyb21fc3RhdChvbGQsIHN0LT5zdF9tb2RlKTsKKworCWlmIChpbmRleF9wYXRoKGNlLT5zaGExLCBwYXRoLCBzdCwKKwkJICAgICAgIGluZm9fb25seSA/IDAgOiBIQVNIX1dSSVRFX09CSkVDVCkpIHsKKwkJZnJlZShjZSk7CisJCXJldHVybiAtMTsKKwl9CisJb3B0aW9uID0gYWxsb3dfYWRkID8gQUREX0NBQ0hFX09LX1RPX0FERCA6IDA7CisJb3B0aW9uIHw9IGFsbG93X3JlcGxhY2UgPyBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSA6IDA7CisJaWYgKGFkZF9jYWNoZV9lbnRyeShjZSwgb3B0aW9uKSkKKwkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IGFkZCB0byB0aGUgaW5kZXggLSBtaXNzaW5nIC0tYWRkIG9wdGlvbj8iLCBwYXRoKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhhbmRsZSBhIHBhdGggdGhhdCB3YXMgYSBkaXJlY3RvcnkuIEZvdXIgY2FzZXM6CisgKgorICogIC0gaXQncyBhbHJlYWR5IGEgZ2l0bGluayBpbiB0aGUgaW5kZXgsIGFuZCB3ZSBrZWVwIGl0IHRoYXQKKyAqICAgIHdheSwgYW5kIHVwZGF0ZSBpdCBpZiB3ZSBjYW4gKGlmIHdlIGNhbm5vdCBmaW5kIHRoZSBIRUFELAorICogICAgd2UncmUgZ29pbmcgdG8ga2VlcCBpdCB1bmNoYW5nZWQgaW4gdGhlIGluZGV4ISkKKyAqCisgKiAgLSBpdCdzIGEgKmZpbGUqIGluIHRoZSBpbmRleCwgaW4gd2hpY2ggY2FzZSBpdCBzaG91bGQgYmUKKyAqICAgIHJlbW92ZWQgYXMgYSBmaWxlIGlmIHJlbW92YWwgaXMgYWxsb3dlZCwgc2luY2UgaXQgZG9lc24ndAorICogICAgZXhpc3QgYXMgc3VjaCBhbnkgbW9yZS4gSWYgcmVtb3ZhbCBpc24ndCBhbGxvd2VkLCBpdCdzCisgKiAgICBhbiBlcnJvci4KKyAqCisgKiAgICAoTk9URSEgVGhpcyBpcyBvbGQgYW5kIGFyZ3VhYmx5IGZhaXJseSBzdHJhbmdlIGJlaGF2aW91ci4KKyAqICAgIFdlIG1pZ2h0IHdhbnQgdG8gbWFrZSB0aGlzIGFuIGVycm9yIHVuY29uZGl0aW9uYWxseSwgYW5kCisgKiAgICB1c2UgIi0tZm9yY2UtcmVtb3ZlIiBpZiB5b3UgYWN0dWFsbHkgd2FudCB0byBmb3JjZSByZW1vdmFsKS4KKyAqCisgKiAgLSBpdCB1c2VkIHRvIGV4aXN0IGFzIGEgc3ViZGlyZWN0b3J5IChpZSBtdWx0aXBsZSBmaWxlcyB3aXRoCisgKiAgICB0aGlzIHBhcnRpY3VsYXIgcHJlZml4KSBpbiB0aGUgaW5kZXgsIGluIHdoaWNoIGNhc2UgaXQncyB3cm9uZworICogICAgdG8gdHJ5IHRvIHVwZGF0ZSBpdCBhcyBhIGRpcmVjdG9yeS4KKyAqCisgKiAgLSBpdCBkb2Vzbid0IGV4aXN0IGF0IGFsbCBpbiB0aGUgaW5kZXgsIGJ1dCBpdCBpcyBhIHZhbGlkCisgKiAgICBnaXQgZGlyZWN0b3J5LCBhbmQgaXQgc2hvdWxkIGJlICphZGRlZCogYXMgYSBnaXRsaW5rLgorICovCitzdGF0aWMgaW50IHByb2Nlc3NfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBsZW4pOworCisJLyogRXhhY3QgbWF0Y2g6IGZpbGUgb3IgZXhpc3RpbmcgZ2l0bGluayAqLworCWlmIChwb3MgPj0gMCkgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpIHsKKworCQkJLyogRG8gbm90aGluZyB0byB0aGUgaW5kZXggaWYgdGhlcmUgaXMgbm8gSEVBRCEgKi8KKwkJCWlmIChyZXNvbHZlX2dpdGxpbmtfcmVmKHBhdGgsICJIRUFEIiwgc2hhMSkgPCAwKQorCQkJCXJldHVybiAwOworCisJCQlyZXR1cm4gYWRkX29uZV9wYXRoKGNlLCBwYXRoLCBsZW4sIHN0KTsKKwkJfQorCQkvKiBTaG91bGQgdGhpcyBiZSBhbiB1bmNvbmRpdGlvbmFsIGVycm9yPyAqLworCQlyZXR1cm4gcmVtb3ZlX29uZV9wYXRoKHBhdGgpOworCX0KKworCS8qIEluZXhhY3QgbWF0Y2g6IGlzIHRoZXJlIHBlcmhhcHMgYSBzdWJkaXJlY3RvcnkgbWF0Y2g/ICovCisJcG9zID0gLXBvcy0xOworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3MrK107CisKKwkJaWYgKHN0cm5jbXAoY2UtPm5hbWUsIHBhdGgsIGxlbikpCisJCQlicmVhazsKKwkJaWYgKGNlLT5uYW1lW2xlbl0gPiAnLycpCisJCQlicmVhazsKKwkJaWYgKGNlLT5uYW1lW2xlbl0gPCAnLycpCisJCQljb250aW51ZTsKKworCQkvKiBTdWJkaXJlY3RvcnkgbWF0Y2ggLSBlcnJvciBvdXQgKi8KKwkJcmV0dXJuIGVycm9yKCIlczogaXMgYSBkaXJlY3RvcnkgLSBhZGQgaW5kaXZpZHVhbCBmaWxlcyBpbnN0ZWFkIiwgcGF0aCk7CisJfQorCisJLyogTm8gbWF0Y2ggLSBzaG91bGQgd2UgYWRkIGl0IGFzIGEgZ2l0bGluaz8gKi8KKwlpZiAoIXJlc29sdmVfZ2l0bGlua19yZWYocGF0aCwgIkhFQUQiLCBzaGExKSkKKwkJcmV0dXJuIGFkZF9vbmVfcGF0aChOVUxMLCBwYXRoLCBsZW4sIHN0KTsKKworCS8qIEVycm9yIG91dC4gKi8KKwlyZXR1cm4gZXJyb3IoIiVzOiBpcyBhIGRpcmVjdG9yeSAtIGFkZCBmaWxlcyBpbnNpZGUgaW5zdGVhZCIsIHBhdGgpOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCWludCBwb3MsIGxlbjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJbGVuID0gc3RybGVuKHBhdGgpOworCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgocGF0aCwgbGVuKSkKKwkJcmV0dXJuIGVycm9yKCInJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiLCBwYXRoKTsKKworCXBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIGxlbik7CisJY2UgPSBwb3MgPCAwID8gTlVMTCA6IGFjdGl2ZV9jYWNoZVtwb3NdOworCWlmIChjZSAmJiBjZV9za2lwX3dvcmt0cmVlKGNlKSkgeworCQkvKgorCQkgKiB3b3JraW5nIGRpcmVjdG9yeSB2ZXJzaW9uIGlzIGFzc3VtZWQgImdvb2QiCisJCSAqIHNvIHVwZGF0aW5nIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UuCisJCSAqIE9uIHRoZSBvdGhlciBoYW5kLCByZW1vdmluZyBpdCBmcm9tIGluZGV4IHNob3VsZCB3b3JrCisJCSAqLworCQlpZiAoYWxsb3dfcmVtb3ZlICYmIHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkpCisJCQlyZXR1cm4gZXJyb3IoIiVzOiBjYW5ub3QgcmVtb3ZlIGZyb20gdGhlIGluZGV4IiwgcGF0aCk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogRmlyc3QgdGhpbmdzIGZpcnN0OiBnZXQgdGhlIHN0YXQgaW5mb3JtYXRpb24sIHRvIGRlY2lkZQorCSAqIHdoYXQgdG8gZG8gYWJvdXQgdGhlIHBhdGhuYW1lIQorCSAqLworCWlmIChsc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJcmV0dXJuIHByb2Nlc3NfbHN0YXRfZXJyb3IocGF0aCwgZXJybm8pOworCisJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCXJldHVybiBwcm9jZXNzX2RpcmVjdG9yeShwYXRoLCBsZW4sICZzdCk7CisKKwlyZXR1cm4gYWRkX29uZV9wYXRoKGNlLCBwYXRoLCBsZW4sICZzdCk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2NhY2hlaW5mbyh1bnNpZ25lZCBpbnQgbW9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSBjb25zdCBjaGFyICpwYXRoLCBpbnQgc3RhZ2UpCit7CisJaW50IHNpemUsIGxlbiwgb3B0aW9uOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlpZiAoIXZlcmlmeV9wYXRoKHBhdGgpKQorCQlyZXR1cm4gZXJyb3IoIkludmFsaWQgcGF0aCAnJXMnIiwgcGF0aCk7CisKKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobGVuKTsKKwljZSA9IHhjYWxsb2MoMSwgc2l6ZSk7CisKKwloYXNoY3B5KGNlLT5zaGExLCBzaGExKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIGxlbik7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKHN0YWdlKTsKKwljZS0+Y2VfbmFtZWxlbiA9IGxlbjsKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCWlmIChhc3N1bWVfdW5jaGFuZ2VkKQorCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVkFMSUQ7CisJb3B0aW9uID0gYWxsb3dfYWRkID8gQUREX0NBQ0hFX09LX1RPX0FERCA6IDA7CisJb3B0aW9uIHw9IGFsbG93X3JlcGxhY2UgPyBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSA6IDA7CisJaWYgKGFkZF9jYWNoZV9lbnRyeShjZSwgb3B0aW9uKSkKKwkJcmV0dXJuIGVycm9yKCIlczogY2Fubm90IGFkZCB0byB0aGUgaW5kZXggLSBtaXNzaW5nIC0tYWRkIG9wdGlvbj8iLAorCQkJICAgICBwYXRoKTsKKwlyZXBvcnQoImFkZCAnJXMnIiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNobW9kX3BhdGgoaW50IGZsaXAsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBvczsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCXVuc2lnbmVkIGludCBtb2RlOworCisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgc3RybGVuKHBhdGgpKTsKKwlpZiAocG9zIDwgMCkKKwkJZ290byBmYWlsOworCWNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJbW9kZSA9IGNlLT5jZV9tb2RlOworCWlmICghU19JU1JFRyhtb2RlKSkKKwkJZ290byBmYWlsOworCXN3aXRjaCAoZmxpcCkgeworCWNhc2UgJysnOgorCQljZS0+Y2VfbW9kZSB8PSAwMTExOyBicmVhazsKKwljYXNlICctJzoKKwkJY2UtPmNlX21vZGUgJj0gfjAxMTE7IGJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gZmFpbDsKKwl9CisJY2FjaGVfdHJlZV9pbnZhbGlkYXRlX3BhdGgoJnRoZV9pbmRleCwgcGF0aCk7CisJY2UtPmNlX2ZsYWdzIHw9IENFX1VQREFURV9JTl9CQVNFOworCWFjdGl2ZV9jYWNoZV9jaGFuZ2VkIHw9IENFX0VOVFJZX0NIQU5HRUQ7CisJcmVwb3J0KCJjaG1vZCAlY3ggJyVzJyIsIGZsaXAsIHBhdGgpOworCXJldHVybjsKKyBmYWlsOgorCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogY2Fubm90IGNobW9kICVjeCAnJXMnIiwgZmxpcCwgcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9vbmUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoIXZlcmlmeV9wYXRoKHBhdGgpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSWdub3JpbmcgcGF0aCAlc1xuIiwgcGF0aCk7CisJCXJldHVybjsKKwl9CisJaWYgKG1hcmtfdmFsaWRfb25seSkgeworCQlpZiAobWFya19jZV9mbGFncyhwYXRoLCBDRV9WQUxJRCwgbWFya192YWxpZF9vbmx5ID09IE1BUktfRkxBRykpCisJCQlkaWUoIlVuYWJsZSB0byBtYXJrIGZpbGUgJXMiLCBwYXRoKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobWFya19za2lwX3dvcmt0cmVlX29ubHkpIHsKKwkJaWYgKG1hcmtfY2VfZmxhZ3MocGF0aCwgQ0VfU0tJUF9XT1JLVFJFRSwgbWFya19za2lwX3dvcmt0cmVlX29ubHkgPT0gTUFSS19GTEFHKSkKKwkJCWRpZSgiVW5hYmxlIHRvIG1hcmsgZmlsZSAlcyIsIHBhdGgpOworCQlyZXR1cm47CisJfQorCisJaWYgKGZvcmNlX3JlbW92ZSkgeworCQlpZiAocmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSkKKwkJCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogdW5hYmxlIHRvIHJlbW92ZSAlcyIsIHBhdGgpOworCQlyZXBvcnQoInJlbW92ZSAnJXMnIiwgcGF0aCk7CisJCXJldHVybjsKKwl9CisJaWYgKHByb2Nlc3NfcGF0aChwYXRoKSkKKwkJZGllKCJVbmFibGUgdG8gcHJvY2VzcyBwYXRoICVzIiwgcGF0aCk7CisJcmVwb3J0KCJhZGQgJyVzJyIsIHBhdGgpOworfQorCitzdGF0aWMgdm9pZCByZWFkX2luZGV4X2luZm8oaW50IGxpbmVfdGVybWluYXRpb24pCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHVxID0gU1RSQlVGX0lOSVQ7CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sIGxpbmVfdGVybWluYXRpb24pICE9IEVPRikgeworCQljaGFyICpwdHIsICp0YWI7CisJCWNoYXIgKnBhdGhfbmFtZTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJdW5zaWduZWQgaW50IG1vZGU7CisJCXVuc2lnbmVkIGxvbmcgdWw7CisJCWludCBzdGFnZTsKKworCQkvKiBUaGlzIHJlYWRzIGxpbmVzIGZvcm1hdHRlZCBpbiBvbmUgb2YgdGhyZWUgZm9ybWF0czoKKwkJICoKKwkJICogKDEpIG1vZGUgICAgICAgICBTUCBzaGExICAgICAgICAgIFRBQiBwYXRoCisJCSAqIFRoZSBmaXJzdCBmb3JtYXQgaXMgd2hhdCAiZ2l0IGFwcGx5IC0taW5kZXgtaW5mbyIKKwkJICogcmVwb3J0cywgYW5kIHVzZWQgdG8gcmVjb25zdHJ1Y3QgYSBwYXJ0aWFsIHRyZWUKKwkJICogdGhhdCBpcyB1c2VkIGZvciBwaG9ueSBtZXJnZSBiYXNlIHRyZWUgd2hlbiBmYWxsaW5nCisJCSAqIGJhY2sgb24gMy13YXkgbWVyZ2UuCisJCSAqCisJCSAqICgyKSBtb2RlIFNQIHR5cGUgU1Agc2hhMSAgICAgICAgICBUQUIgcGF0aAorCQkgKiBUaGUgc2Vjb25kIGZvcm1hdCBpcyB0byBzdHVmZiAiZ2l0IGxzLXRyZWUiIG91dHB1dAorCQkgKiBpbnRvIHRoZSBpbmRleCBmaWxlLgorCQkgKgorCQkgKiAoMykgbW9kZSAgICAgICAgIFNQIHNoYTEgU1Agc3RhZ2UgVEFCIHBhdGgKKwkJICogVGhpcyBmb3JtYXQgaXMgdG8gcHV0IGhpZ2hlciBvcmRlciBzdGFnZXMgaW50byB0aGUKKwkJICogaW5kZXggZmlsZSBhbmQgbWF0Y2hlcyAiZ2l0IGxzLWZpbGVzIC0tc3RhZ2UiIG91dHB1dC4KKwkJICovCisJCWVycm5vID0gMDsKKwkJdWwgPSBzdHJ0b3VsKGJ1Zi5idWYsICZwdHIsIDgpOworCQlpZiAocHRyID09IGJ1Zi5idWYgfHwgKnB0ciAhPSAnICcKKwkJICAgIHx8IGVycm5vIHx8ICh1bnNpZ25lZCBpbnQpIHVsICE9IHVsKQorCQkJZ290byBiYWRfbGluZTsKKwkJbW9kZSA9IHVsOworCisJCXRhYiA9IHN0cmNocihwdHIsICdcdCcpOworCQlpZiAoIXRhYiB8fCB0YWIgLSBwdHIgPCA0MSkKKwkJCWdvdG8gYmFkX2xpbmU7CisKKwkJaWYgKHRhYlstMl0gPT0gJyAnICYmICcwJyA8PSB0YWJbLTFdICYmIHRhYlstMV0gPD0gJzMnKSB7CisJCQlzdGFnZSA9IHRhYlstMV0gLSAnMCc7CisJCQlwdHIgPSB0YWIgKyAxOyAvKiBwb2ludCBhdCB0aGUgaGVhZCBvZiBwYXRoICovCisJCQl0YWIgPSB0YWIgLSAyOyAvKiBwb2ludCBhdCB0YWlsIG9mIHNoYTEgKi8KKwkJfQorCQllbHNlIHsKKwkJCXN0YWdlID0gMDsKKwkJCXB0ciA9IHRhYiArIDE7IC8qIHBvaW50IGF0IHRoZSBoZWFkIG9mIHBhdGggKi8KKwkJfQorCisJCWlmIChnZXRfc2hhMV9oZXgodGFiIC0gNDAsIHNoYTEpIHx8IHRhYlstNDFdICE9ICcgJykKKwkJCWdvdG8gYmFkX2xpbmU7CisKKwkJcGF0aF9uYW1lID0gcHRyOworCQlpZiAobGluZV90ZXJtaW5hdGlvbiAmJiBwYXRoX25hbWVbMF0gPT0gJyInKSB7CisJCQlzdHJidWZfcmVzZXQoJnVxKTsKKwkJCWlmICh1bnF1b3RlX2Nfc3R5bGUoJnVxLCBwYXRoX25hbWUsIE5VTEwpKSB7CisJCQkJZGllKCJnaXQgdXBkYXRlLWluZGV4OiBiYWQgcXVvdGluZyBvZiBwYXRoIG5hbWUiKTsKKwkJCX0KKwkJCXBhdGhfbmFtZSA9IHVxLmJ1ZjsKKwkJfQorCisJCWlmICghdmVyaWZ5X3BhdGgocGF0aF9uYW1lKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJJZ25vcmluZyBwYXRoICVzXG4iLCBwYXRoX25hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIW1vZGUpIHsKKwkJCS8qIG1vZGUgPT0gMCBtZWFucyB0aGVyZSBpcyBubyBzdWNoIHBhdGggLS0gcmVtb3ZlICovCisJCQlpZiAocmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoX25hbWUpKQorCQkJCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogdW5hYmxlIHRvIHJlbW92ZSAlcyIsCisJCQkJICAgIHB0cik7CisJCX0KKwkJZWxzZSB7CisJCQkvKiBtb2RlICcgJyBzaGExICdcdCcgbmFtZQorCQkJICogcHRyWy0xXSBwb2ludHMgYXQgdGFiLAorCQkJICogcHRyWy00MV0gaXMgYXQgdGhlIGJlZ2lubmluZyBvZiBzaGExCisJCQkgKi8KKwkJCXB0clstNDJdID0gcHRyWy0xXSA9IDA7CisJCQlpZiAoYWRkX2NhY2hlaW5mbyhtb2RlLCBzaGExLCBwYXRoX25hbWUsIHN0YWdlKSkKKwkJCQlkaWUoImdpdCB1cGRhdGUtaW5kZXg6IHVuYWJsZSB0byB1cGRhdGUgJXMiLAorCQkJCSAgICBwYXRoX25hbWUpOworCQl9CisJCWNvbnRpbnVlOworCisJYmFkX2xpbmU6CisJCWRpZSgibWFsZm9ybWVkIGluZGV4IGluZm8gJXMiLCBidWYuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnVxKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1cGRhdGVfaW5kZXhfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIiksCisJTlVMTAorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgaGVhZF9zaGExWzIwXTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG1lcmdlX2hlYWRfc2hhMVsyMF07CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfZW50cnkgKnJlYWRfb25lX2VudChjb25zdCBjaGFyICp3aGljaCwKKwkJCQkJdW5zaWduZWQgY2hhciAqZW50LCBjb25zdCBjaGFyICpwYXRoLAorCQkJCQlpbnQgbmFtZWxlbiwgaW50IHN0YWdlKQoreworCXVuc2lnbmVkIG1vZGU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJaWYgKGdldF90cmVlX2VudHJ5KGVudCwgcGF0aCwgc2hhMSwgJm1vZGUpKSB7CisJCWlmICh3aGljaCkKKwkJCWVycm9yKCIlczogbm90IGluICVzIGJyYW5jaC4iLCBwYXRoLCB3aGljaCk7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAobW9kZSA9PSBTX0lGRElSKSB7CisJCWlmICh3aGljaCkKKwkJCWVycm9yKCIlczogbm90IGEgYmxvYiBpbiAlcyBicmFuY2guIiwgcGF0aCwgd2hpY2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobmFtZWxlbik7CisJY2UgPSB4Y2FsbG9jKDEsIHNpemUpOworCisJaGFzaGNweShjZS0+c2hhMSwgc2hhMSk7CisJbWVtY3B5KGNlLT5uYW1lLCBwYXRoLCBuYW1lbGVuKTsKKwljZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3Moc3RhZ2UpOworCWNlLT5jZV9uYW1lbGVuID0gbmFtZWxlbjsKKwljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKG1vZGUpOworCXJldHVybiBjZTsKK30KKworc3RhdGljIGludCB1bnJlc29sdmVfb25lKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CisJaW50IHBvczsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlXzIgPSBOVUxMLCAqY2VfMyA9IE5VTEw7CisKKwkvKiBTZWUgaWYgdGhlcmUgaXMgc3VjaCBlbnRyeSBpbiB0aGUgaW5kZXguICovCisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbmFtZWxlbik7CisJaWYgKDAgPD0gcG9zKSB7CisJCS8qIGFscmVhZHkgbWVyZ2VkICovCisJCXBvcyA9IHVubWVyZ2VfY2FjaGVfZW50cnlfYXQocG9zKTsKKwkJaWYgKHBvcyA8IGFjdGl2ZV9ucikgeworCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQkJaWYgKGNlX3N0YWdlKGNlKSAmJgorCQkJICAgIGNlX25hbWVsZW4oY2UpID09IG5hbWVsZW4gJiYKKwkJCSAgICAhbWVtY21wKGNlLT5uYW1lLCBwYXRoLCBuYW1lbGVuKSkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQkvKiBubyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb247IGZhbGwgYmFjayAqLworCX0gZWxzZSB7CisJCS8qIElmIHRoZXJlIGlzbid0LCBlaXRoZXIgaXQgaXMgdW5tZXJnZWQsIG9yCisJCSAqIHJlc29sdmVkIGFzICJyZW1vdmVkIiBieSBtaXN0YWtlLiAgV2UgZG8gbm90CisJCSAqIHdhbnQgdG8gZG8gYW55dGhpbmcgaW4gdGhlIGZvcm1lciBjYXNlLgorCQkgKi8KKwkJcG9zID0gLXBvcy0xOworCQlpZiAocG9zIDwgYWN0aXZlX25yKSB7CisJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3Bvc107CisJCQlpZiAoY2VfbmFtZWxlbihjZSkgPT0gbmFtZWxlbiAmJgorCQkJICAgICFtZW1jbXAoY2UtPm5hbWUsIHBhdGgsIG5hbWVsZW4pKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSIlczogc2tpcHBpbmcgc3RpbGwgdW5tZXJnZWQgcGF0aC5cbiIsCisJCQkJCXBhdGgpOworCQkJCWdvdG8gZnJlZV9yZXR1cm47CisJCQl9CisJCX0KKwl9CisKKwkvKiBHcmFiIGJsb2JzIGZyb20gZ2l2ZW4gcGF0aCBmcm9tIEhFQUQgYW5kIE1FUkdFX0hFQUQsCisJICogc3R1ZmYgSEVBRCB2ZXJzaW9uIGluIHN0YWdlICMyLAorCSAqIHN0dWZmIE1FUkdFX0hFQUQgdmVyc2lvbiBpbiBzdGFnZSAjMy4KKwkgKi8KKwljZV8yID0gcmVhZF9vbmVfZW50KCJvdXIiLCBoZWFkX3NoYTEsIHBhdGgsIG5hbWVsZW4sIDIpOworCWNlXzMgPSByZWFkX29uZV9lbnQoInRoZWlyIiwgbWVyZ2VfaGVhZF9zaGExLCBwYXRoLCBuYW1lbGVuLCAzKTsKKworCWlmICghY2VfMiB8fCAhY2VfMykgeworCQlyZXQgPSAtMTsKKwkJZ290byBmcmVlX3JldHVybjsKKwl9CisJaWYgKCFoYXNoY21wKGNlXzItPnNoYTEsIGNlXzMtPnNoYTEpICYmCisJICAgIGNlXzItPmNlX21vZGUgPT0gY2VfMy0+Y2VfbW9kZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBpZGVudGljYWwgaW4gYm90aCwgc2tpcHBpbmcuXG4iLAorCQkJcGF0aCk7CisJCWdvdG8gZnJlZV9yZXR1cm47CisJfQorCisJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKTsKKwlpZiAoYWRkX2NhY2hlX2VudHJ5KGNlXzIsIEFERF9DQUNIRV9PS19UT19BREQpKSB7CisJCWVycm9yKCIlczogY2Fubm90IGFkZCBvdXIgdmVyc2lvbiB0byB0aGUgaW5kZXguIiwgcGF0aCk7CisJCXJldCA9IC0xOworCQlnb3RvIGZyZWVfcmV0dXJuOworCX0KKwlpZiAoIWFkZF9jYWNoZV9lbnRyeShjZV8zLCBBRERfQ0FDSEVfT0tfVE9fQUREKSkKKwkJcmV0dXJuIDA7CisJZXJyb3IoIiVzOiBjYW5ub3QgYWRkIHRoZWlyIHZlcnNpb24gdG8gdGhlIGluZGV4LiIsIHBhdGgpOworCXJldCA9IC0xOworIGZyZWVfcmV0dXJuOgorCWZyZWUoY2VfMik7CisJZnJlZShjZV8zKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByZWFkX2hlYWRfcG9pbnRlcnModm9pZCkKK3sKKwlpZiAocmVhZF9yZWYoIkhFQUQiLCBoZWFkX3NoYTEpKQorCQlkaWUoIk5vIEhFQUQgLS0gbm8gaW5pdGlhbCBjb21taXQgeWV0PyIpOworCWlmIChyZWFkX3JlZigiTUVSR0VfSEVBRCIsIG1lcmdlX2hlYWRfc2hhMSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJOb3QgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLlxuIik7CisJCWV4aXQoMCk7CisJfQorfQorCitzdGF0aWMgaW50IGRvX3VucmVzb2x2ZShpbnQgYWMsIGNvbnN0IGNoYXIgKiphdiwKKwkJCWNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHByZWZpeF9sZW5ndGgpCit7CisJaW50IGk7CisJaW50IGVyciA9IDA7CisKKwkvKiBSZWFkIEhFQUQgYW5kIE1FUkdFX0hFQUQ7IGlmIE1FUkdFX0hFQUQgZG9lcyBub3QgZXhpc3QsIHdlCisJICogYXJlIG5vdCBkb2luZyBhIG1lcmdlLCBzbyBleGl0IHdpdGggc3VjY2VzcyBzdGF0dXMuCisJICovCisJcmVhZF9oZWFkX3BvaW50ZXJzKCk7CisKKwlmb3IgKGkgPSAxOyBpIDwgYWM7IGkrKykgeworCQljb25zdCBjaGFyICphcmcgPSBhdltpXTsKKwkJY2hhciAqcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgYXJnKTsKKwkJZXJyIHw9IHVucmVzb2x2ZV9vbmUocCk7CisJCWZyZWUocCk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZG9fcmV1cGRhdGUoaW50IGFjLCBjb25zdCBjaGFyICoqYXYsCisJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsIGludCBwcmVmaXhfbGVuZ3RoKQoreworCS8qIFJlYWQgSEVBRCBhbmQgcnVuIHVwZGF0ZS1pbmRleCBvbiBwYXRocyB0aGF0IGFyZQorCSAqIG1lcmdlZCBhbmQgYWxyZWFkeSBkaWZmZXJlbnQgYmV0d2VlbiBpbmRleCBhbmQgSEVBRC4KKwkgKi8KKwlpbnQgcG9zOworCWludCBoYXNfaGVhZCA9IDE7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCisJcGFyc2VfcGF0aHNwZWMoJnBhdGhzcGVjLCAwLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0NXRCwKKwkJICAgICAgIHByZWZpeCwgYXYgKyAxKTsKKworCWlmIChyZWFkX3JlZigiSEVBRCIsIGhlYWRfc2hhMSkpCisJCS8qIElmIHRoZXJlIGlzIG5vIEhFQUQsIHRoYXQgbWVhbnMgaXQgaXMgYW4gaW5pdGlhbAorCQkgKiBjb21taXQuICBVcGRhdGUgZXZlcnl0aGluZyBpbiB0aGUgaW5kZXguCisJCSAqLworCQloYXNfaGVhZCA9IDA7CisgcmVkbzoKKwlmb3IgKHBvcyA9IDA7IHBvcyA8IGFjdGl2ZV9ucjsgcG9zKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCA9IE5VTEw7CisJCWludCBzYXZlX25yOworCQljaGFyICpwYXRoOworCisJCWlmIChjZV9zdGFnZShjZSkgfHwgIWNlX3BhdGhfbWF0Y2goY2UsICZwYXRoc3BlYywgTlVMTCkpCisJCQljb250aW51ZTsKKwkJaWYgKGhhc19oZWFkKQorCQkJb2xkID0gcmVhZF9vbmVfZW50KE5VTEwsIGhlYWRfc2hhMSwKKwkJCQkJICAgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCAwKTsKKwkJaWYgKG9sZCAmJiBjZS0+Y2VfbW9kZSA9PSBvbGQtPmNlX21vZGUgJiYKKwkJICAgICFoYXNoY21wKGNlLT5zaGExLCBvbGQtPnNoYTEpKSB7CisJCQlmcmVlKG9sZCk7CisJCQljb250aW51ZTsgLyogdW5jaGFuZ2VkICovCisJCX0KKwkJLyogQmUgY2FyZWZ1bC4gIFRoZSB3b3JraW5nIHRyZWUgbWF5IG5vdCBoYXZlIHRoZQorCQkgKiBwYXRoIGFueW1vcmUsIGluIHdoaWNoIGNhc2UsIHVuZGVyICdhbGxvd19yZW1vdmUnLAorCQkgKiBvciB3b3JzZSB5ZXQgJ2FsbG93X3JlcGxhY2UnLCBhY3RpdmVfbnIgbWF5IGRlY3JlYXNlLgorCQkgKi8KKwkJc2F2ZV9uciA9IGFjdGl2ZV9ucjsKKwkJcGF0aCA9IHhzdHJkdXAoY2UtPm5hbWUpOworCQl1cGRhdGVfb25lKHBhdGgpOworCQlmcmVlKHBhdGgpOworCQlmcmVlKG9sZCk7CisJCWlmIChzYXZlX25yICE9IGFjdGl2ZV9ucikKKwkJCWdvdG8gcmVkbzsKKwl9CisJZnJlZV9wYXRoc3BlYygmcGF0aHNwZWMpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmVmcmVzaF9wYXJhbXMgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwlpbnQgKmhhc19lcnJvcnM7Cit9OworCitzdGF0aWMgaW50IHJlZnJlc2goc3RydWN0IHJlZnJlc2hfcGFyYW1zICpvLCB1bnNpZ25lZCBpbnQgZmxhZykKK3sKKwlzZXR1cF93b3JrX3RyZWUoKTsKKwlyZWFkX2NhY2hlX3ByZWxvYWQoTlVMTCk7CisJKm8tPmhhc19lcnJvcnMgfD0gcmVmcmVzaF9jYWNoZShvLT5mbGFncyB8IGZsYWcpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlZnJlc2hfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJldHVybiByZWZyZXNoKG9wdC0+dmFsdWUsIDApOworfQorCitzdGF0aWMgaW50IHJlYWxseV9yZWZyZXNoX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlyZXR1cm4gcmVmcmVzaChvcHQtPnZhbHVlLCBSRUZSRVNIX1JFQUxMWSk7Cit9CisKK3N0YXRpYyBpbnQgY2htb2RfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWNoYXIgKmZsaXAgPSBvcHQtPnZhbHVlOworCWlmICgoYXJnWzBdICE9ICctJyAmJiBhcmdbMF0gIT0gJysnKSB8fCBhcmdbMV0gIT0gJ3gnIHx8IGFyZ1syXSkKKwkJcmV0dXJuIGVycm9yKCJvcHRpb24gJ2NobW9kJyBleHBlY3RzIFwiK3hcIiBvciBcIi14XCIiKTsKKwkqZmxpcCA9IGFyZ1swXTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXNvbHZlX3VuZG9fY2xlYXJfY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJCWNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJlc29sdmVfdW5kb19jbGVhcigpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX25ld19zdHlsZV9jYWNoZWluZm8oY29uc3QgY2hhciAqYXJnLAorCQkJCSAgICAgdW5zaWduZWQgaW50ICptb2RlLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciBzaGExW10sCisJCQkJICAgICBjb25zdCBjaGFyICoqcGF0aCkKK3sKKwl1bnNpZ25lZCBsb25nIHVsOworCWNoYXIgKmVuZHA7CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCisJZXJybm8gPSAwOworCXVsID0gc3RydG91bChhcmcsICZlbmRwLCA4KTsKKwlpZiAoZXJybm8gfHwgZW5kcCA9PSBhcmcgfHwgKmVuZHAgIT0gJywnIHx8ICh1bnNpZ25lZCBpbnQpIHVsICE9IHVsKQorCQlyZXR1cm4gLTE7IC8qIG5vdCBhIG5ldy1zdHlsZSBjYWNoZWluZm8gKi8KKwkqbW9kZSA9IHVsOworCWVuZHArKzsKKwlpZiAoZ2V0X3NoYTFfaGV4KGVuZHAsIHNoYTEpIHx8IGVuZHBbNDBdICE9ICcsJykKKwkJcmV0dXJuIC0xOworCSpwYXRoID0gZW5kcCArIDQxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNhY2hlaW5mb19jYWxsYmFjayhzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkJY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBpbnQgdW5zZXQpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBpbnQgbW9kZTsKKwljb25zdCBjaGFyICpwYXRoOworCisJaWYgKCFwYXJzZV9uZXdfc3R5bGVfY2FjaGVpbmZvKGN0eC0+YXJndlsxXSwgJm1vZGUsIHNoYTEsICZwYXRoKSkgeworCQlpZiAoYWRkX2NhY2hlaW5mbyhtb2RlLCBzaGExLCBwYXRoLCAwKSkKKwkJCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogLS1jYWNoZWluZm8gY2Fubm90IGFkZCAlcyIsIHBhdGgpOworCQljdHgtPmFyZ3YrKzsKKwkJY3R4LT5hcmdjLS07CisJCXJldHVybiAwOworCX0KKwlpZiAoY3R4LT5hcmdjIDw9IDMpCisJCXJldHVybiBlcnJvcigib3B0aW9uICdjYWNoZWluZm8nIGV4cGVjdHMgPG1vZGU+LDxzaGExPiw8cGF0aD4iKTsKKwlpZiAoc3RydG91bF91aSgqKytjdHgtPmFyZ3YsIDgsICZtb2RlKSB8fAorCSAgICBnZXRfc2hhMV9oZXgoKisrY3R4LT5hcmd2LCBzaGExKSB8fAorCSAgICBhZGRfY2FjaGVpbmZvKG1vZGUsIHNoYTEsICorK2N0eC0+YXJndiwgMCkpCisJCWRpZSgiZ2l0IHVwZGF0ZS1pbmRleDogLS1jYWNoZWluZm8gY2Fubm90IGFkZCAlcyIsICpjdHgtPmFyZ3YpOworCWN0eC0+YXJnYyAtPSAzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0ZGluX2NhY2hlaW5mb19jYWxsYmFjayhzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGludCB1bnNldCkKK3sKKwlpbnQgKmxpbmVfdGVybWluYXRpb24gPSBvcHQtPnZhbHVlOworCisJaWYgKGN0eC0+YXJnYyAhPSAxKQorCQlyZXR1cm4gZXJyb3IoIm9wdGlvbiAnJXMnIG11c3QgYmUgdGhlIGxhc3QgYXJndW1lbnQiLCBvcHQtPmxvbmdfbmFtZSk7CisJYWxsb3dfYWRkID0gYWxsb3dfcmVwbGFjZSA9IGFsbG93X3JlbW92ZSA9IDE7CisJcmVhZF9pbmRleF9pbmZvKCpsaW5lX3Rlcm1pbmF0aW9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGRpbl9jYWxsYmFjayhzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkJY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBpbnQgdW5zZXQpCit7CisJaW50ICpyZWFkX2Zyb21fc3RkaW4gPSBvcHQtPnZhbHVlOworCisJaWYgKGN0eC0+YXJnYyAhPSAxKQorCQlyZXR1cm4gZXJyb3IoIm9wdGlvbiAnJXMnIG11c3QgYmUgdGhlIGxhc3QgYXJndW1lbnQiLCBvcHQtPmxvbmdfbmFtZSk7CisJKnJlYWRfZnJvbV9zdGRpbiA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdW5yZXNvbHZlX2NhbGxiYWNrKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCQljb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGludCBmbGFncykKK3sKKwlpbnQgKmhhc19lcnJvcnMgPSBvcHQtPnZhbHVlOworCWNvbnN0IGNoYXIgKnByZWZpeCA9IHN0YXJ0dXBfaW5mby0+cHJlZml4OworCisJLyogY29uc3VtZSByZW1haW5pbmcgYXJndW1lbnRzLiAqLworCSpoYXNfZXJyb3JzID0gZG9fdW5yZXNvbHZlKGN0eC0+YXJnYywgY3R4LT5hcmd2LAorCQkJCXByZWZpeCwgcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwKTsKKwlpZiAoKmhhc19lcnJvcnMpCisJCWFjdGl2ZV9jYWNoZV9jaGFuZ2VkID0gMDsKKworCWN0eC0+YXJndiArPSBjdHgtPmFyZ2MgLSAxOworCWN0eC0+YXJnYyA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmV1cGRhdGVfY2FsbGJhY2soc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgaW50IGZsYWdzKQoreworCWludCAqaGFzX2Vycm9ycyA9IG9wdC0+dmFsdWU7CisJY29uc3QgY2hhciAqcHJlZml4ID0gc3RhcnR1cF9pbmZvLT5wcmVmaXg7CisKKwkvKiBjb25zdW1lIHJlbWFpbmluZyBhcmd1bWVudHMuICovCisJc2V0dXBfd29ya190cmVlKCk7CisJKmhhc19lcnJvcnMgPSBkb19yZXVwZGF0ZShjdHgtPmFyZ2MsIGN0eC0+YXJndiwKKwkJCQlwcmVmaXgsIHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMCk7CisJaWYgKCpoYXNfZXJyb3JzKQorCQlhY3RpdmVfY2FjaGVfY2hhbmdlZCA9IDA7CisKKwljdHgtPmFyZ3YgKz0gY3R4LT5hcmdjIC0gMTsKKwljdHgtPmFyZ2MgPSAxOworCXJldHVybiAwOworfQorCitpbnQgY21kX3VwZGF0ZV9pbmRleChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgbmV3ZmQsIGVudHJpZXMsIGhhc19lcnJvcnMgPSAwLCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwlpbnQgdW50cmFja2VkX2NhY2hlID0gLTE7CisJaW50IHJlYWRfZnJvbV9zdGRpbiA9IDA7CisJaW50IHByZWZpeF9sZW5ndGggPSBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDA7CisJaW50IHByZWZlcnJlZF9pbmRleF9mb3JtYXQgPSAwOworCWNoYXIgc2V0X2V4ZWN1dGFibGVfYml0ID0gMDsKKwlzdHJ1Y3QgcmVmcmVzaF9wYXJhbXMgcmVmcmVzaF9hcmdzID0gezAsICZoYXNfZXJyb3JzfTsKKwlpbnQgbG9ja19lcnJvciA9IDA7CisJaW50IHNwbGl0X2luZGV4ID0gLTE7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9ja19maWxlOworCXN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgY3R4OworCWludCBwYXJzZW9wdF9zdGF0ZSA9IFBBUlNFX09QVF9VTktOT1dOOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQklUKCdxJywgTlVMTCwgJnJlZnJlc2hfYXJncy5mbGFncywKKwkJCU5fKCJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiKSwKKwkJCVJFRlJFU0hfUVVJRVQpLAorCQlPUFRfQklUKDAsICJpZ25vcmUtc3VibW9kdWxlcyIsICZyZWZyZXNoX2FyZ3MuZmxhZ3MsCisJCQlOXygicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiKSwKKwkJCVJFRlJFU0hfSUdOT1JFX1NVQk1PRFVMRVMpLAorCQlPUFRfU0VUX0lOVCgwLCAiYWRkIiwgJmFsbG93X2FkZCwKKwkJCU5fKCJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIpLCAxKSwKKwkJT1BUX1NFVF9JTlQoMCwgInJlcGxhY2UiLCAmYWxsb3dfcmVwbGFjZSwKKwkJCU5fKCJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIpLCAxKSwKKwkJT1BUX1NFVF9JTlQoMCwgInJlbW92ZSIsICZhbGxvd19yZW1vdmUsCisJCQlOXygibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIpLCAxKSwKKwkJT1BUX0JJVCgwLCAidW5tZXJnZWQiLCAmcmVmcmVzaF9hcmdzLmZsYWdzLAorCQkJTl8oInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIiksCisJCQlSRUZSRVNIX1VOTUVSR0VEKSwKKwkJe09QVElPTl9DQUxMQkFDSywgMCwgInJlZnJlc2giLCAmcmVmcmVzaF9hcmdzLCBOVUxMLAorCQkJTl8oInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJcmVmcmVzaF9jYWxsYmFja30sCisJCXtPUFRJT05fQ0FMTEJBQ0ssIDAsICJyZWFsbHktcmVmcmVzaCIsICZyZWZyZXNoX2FyZ3MsIE5VTEwsCisJCQlOXygibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIiksCisJCQlQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsCisJCQlyZWFsbHlfcmVmcmVzaF9jYWxsYmFja30sCisJCXtPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssIDAsICJjYWNoZWluZm8iLCBOVUxMLAorCQkJTl8oIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iKSwKKwkJCU5fKCJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IC8qIGRpc2FsbG93IC0tY2FjaGVpbmZvPTxtb2RlPiBmb3JtICovCisJCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQLAorCQkJKHBhcnNlX29wdF9jYiAqKSBjYWNoZWluZm9fY2FsbGJhY2t9LAorCQl7T1BUSU9OX0NBTExCQUNLLCAwLCAiY2htb2QiLCAmc2V0X2V4ZWN1dGFibGVfYml0LCBOXygiKCsvLSl4IiksCisJCQlOXygib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiKSwKKwkJCVBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFAsCisJCQljaG1vZF9jYWxsYmFja30sCisJCXtPUFRJT05fU0VUX0lOVCwgMCwgImFzc3VtZS11bmNoYW5nZWQiLCAmbWFya192YWxpZF9vbmx5LCBOVUxMLAorCQkJTl8oIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCBNQVJLX0ZMQUd9LAorCQl7T1BUSU9OX1NFVF9JTlQsIDAsICJuby1hc3N1bWUtdW5jaGFuZ2VkIiwgJm1hcmtfdmFsaWRfb25seSwgTlVMTCwKKwkJCU5fKCJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgVU5NQVJLX0ZMQUd9LAorCQl7T1BUSU9OX1NFVF9JTlQsIDAsICJza2lwLXdvcmt0cmVlIiwgJm1hcmtfc2tpcF93b3JrdHJlZV9vbmx5LCBOVUxMLAorCQkJTl8oIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiKSwKKwkJCVBBUlNFX09QVF9OT0FSRyB8IFBBUlNFX09QVF9OT05FRywgTlVMTCwgTUFSS19GTEFHfSwKKwkJe09QVElPTl9TRVRfSU5ULCAwLCAibm8tc2tpcC13b3JrdHJlZSIsICZtYXJrX3NraXBfd29ya3RyZWVfb25seSwgTlVMTCwKKwkJCU5fKCJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLCBOVUxMLCBVTk1BUktfRkxBR30sCisJCU9QVF9TRVRfSU5UKDAsICJpbmZvLW9ubHkiLCAmaW5mb19vbmx5LAorCQkJTl8oImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIiksIDEpLAorCQlPUFRfU0VUX0lOVCgwLCAiZm9yY2UtcmVtb3ZlIiwgJmZvcmNlX3JlbW92ZSwKKwkJCU5fKCJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIiksIDEpLAorCQlPUFRfU0VUX0lOVCgneicsIE5VTEwsICZsaW5lX3Rlcm1pbmF0aW9uLAorCQkJTl8oIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIpLCAnXDAnKSwKKwkJe09QVElPTl9MT1dMRVZFTF9DQUxMQkFDSywgMCwgInN0ZGluIiwgJnJlYWRfZnJvbV9zdGRpbiwgTlVMTCwKKwkJCU5fKCJyZWFkIGxpc3Qgb2YgcGF0aHMgdG8gYmUgdXBkYXRlZCBmcm9tIHN0YW5kYXJkIGlucHV0IiksCisJCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcsCisJCQkocGFyc2Vfb3B0X2NiICopIHN0ZGluX2NhbGxiYWNrfSwKKwkJe09QVElPTl9MT1dMRVZFTF9DQUxMQkFDSywgMCwgImluZGV4LWluZm8iLCAmbGluZV90ZXJtaW5hdGlvbiwgTlVMTCwKKwkJCU5fKCJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIpLAorCQkJUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PQVJHLAorCQkJKHBhcnNlX29wdF9jYiAqKSBzdGRpbl9jYWNoZWluZm9fY2FsbGJhY2t9LAorCQl7T1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLLCAwLCAidW5yZXNvbHZlIiwgJmhhc19lcnJvcnMsIE5VTEwsCisJCQlOXygicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIiksCisJCQlQQVJTRV9PUFRfTk9ORUcgfCBQQVJTRV9PUFRfTk9BUkcsCisJCQkocGFyc2Vfb3B0X2NiICopIHVucmVzb2x2ZV9jYWxsYmFja30sCisJCXtPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0ssICdnJywgImFnYWluIiwgJmhhc19lcnJvcnMsIE5VTEwsCisJCQlOXygib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiKSwKKwkJCVBBUlNFX09QVF9OT05FRyB8IFBBUlNFX09QVF9OT0FSRywKKwkJCShwYXJzZV9vcHRfY2IgKikgcmV1cGRhdGVfY2FsbGJhY2t9LAorCQlPUFRfQklUKDAsICJpZ25vcmUtbWlzc2luZyIsICZyZWZyZXNoX2FyZ3MuZmxhZ3MsCisJCQlOXygiaWdub3JlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIpLAorCQkJUkVGUkVTSF9JR05PUkVfTUlTU0lORyksCisJCU9QVF9TRVRfSU5UKDAsICJ2ZXJib3NlIiwgJnZlcmJvc2UsCisJCQlOXygicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IiksIDEpLAorCQl7T1BUSU9OX0NBTExCQUNLLCAwLCAiY2xlYXItcmVzb2x2ZS11bmRvIiwgTlVMTCwgTlVMTCwKKwkJCU5fKCIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIpLAorCQkJUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHLAorCQkJcmVzb2x2ZV91bmRvX2NsZWFyX2NhbGxiYWNrfSwKKwkJT1BUX0lOVEVHRVIoMCwgImluZGV4LXZlcnNpb24iLCAmcHJlZmVycmVkX2luZGV4X2Zvcm1hdCwKKwkJCU5fKCJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIpKSwKKwkJT1BUX0JPT0woMCwgInNwbGl0LWluZGV4IiwgJnNwbGl0X2luZGV4LAorCQkJTl8oImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IikpLAorCQlPUFRfQk9PTCgwLCAidW50cmFja2VkLWNhY2hlIiwgJnVudHJhY2tlZF9jYWNoZSwKKwkJCU5fKCJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiKSksCisJCU9QVF9TRVRfSU5UKDAsICJmb3JjZS11bnRyYWNrZWQtY2FjaGUiLCAmdW50cmFja2VkX2NhY2hlLAorCQkJICAgIE5fKCJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIpLCAyKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWlmIChhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVwZGF0ZV9pbmRleF91c2FnZSwgb3B0aW9ucyk7CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisKKwkvKiBXZSBjYW4ndCBmcmVlIHRoaXMgbWVtb3J5LCBpdCBiZWNvbWVzIHBhcnQgb2YgYSBsaW5rZWQgbGlzdCBwYXJzZWQgYXRleGl0KCkgKi8KKwlsb2NrX2ZpbGUgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisKKwluZXdmZCA9IGhvbGRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSwgMCk7CisJaWYgKG5ld2ZkIDwgMCkKKwkJbG9ja19lcnJvciA9IGVycm5vOworCisJZW50cmllcyA9IHJlYWRfY2FjaGUoKTsKKwlpZiAoZW50cmllcyA8IDApCisJCWRpZSgiY2FjaGUgY29ycnVwdGVkIik7CisKKwkvKgorCSAqIEN1c3RvbSBjb3B5IG9mIHBhcnNlX29wdGlvbnMoKSBiZWNhdXNlIHdlIHdhbnQgdG8gaGFuZGxlCisJICogZmlsZW5hbWUgYXJndW1lbnRzIGFzIHRoZXkgY29tZS4KKwkgKi8KKwlwYXJzZV9vcHRpb25zX3N0YXJ0KCZjdHgsIGFyZ2MsIGFyZ3YsIHByZWZpeCwKKwkJCSAgICBvcHRpb25zLCBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKTsKKwl3aGlsZSAoY3R4LmFyZ2MpIHsKKwkJaWYgKHBhcnNlb3B0X3N0YXRlICE9IFBBUlNFX09QVF9ET05FKQorCQkJcGFyc2VvcHRfc3RhdGUgPSBwYXJzZV9vcHRpb25zX3N0ZXAoJmN0eCwgb3B0aW9ucywKKwkJCQkJCQkgICAgdXBkYXRlX2luZGV4X3VzYWdlKTsKKwkJaWYgKCFjdHguYXJnYykKKwkJCWJyZWFrOworCQlzd2l0Y2ggKHBhcnNlb3B0X3N0YXRlKSB7CisJCWNhc2UgUEFSU0VfT1BUX0hFTFA6CisJCQlleGl0KDEyOSk7CisJCWNhc2UgUEFSU0VfT1BUX05PTl9PUFRJT046CisJCWNhc2UgUEFSU0VfT1BUX0RPTkU6CisJCXsKKwkJCWNvbnN0IGNoYXIgKnBhdGggPSBjdHguYXJndlswXTsKKwkJCWNoYXIgKnA7CisKKwkJCXNldHVwX3dvcmtfdHJlZSgpOworCQkJcCA9IHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbmd0aCwgcGF0aCk7CisJCQl1cGRhdGVfb25lKHApOworCQkJaWYgKHNldF9leGVjdXRhYmxlX2JpdCkKKwkJCQljaG1vZF9wYXRoKHNldF9leGVjdXRhYmxlX2JpdCwgcCk7CisJCQlmcmVlKHApOworCQkJY3R4LmFyZ2MtLTsKKwkJCWN0eC5hcmd2Kys7CisJCQlicmVhazsKKwkJfQorCQljYXNlIFBBUlNFX09QVF9VTktOT1dOOgorCQkJaWYgKGN0eC5hcmd2WzBdWzFdID09ICctJykKKwkJCQllcnJvcigidW5rbm93biBvcHRpb24gJyVzJyIsIGN0eC5hcmd2WzBdICsgMik7CisJCQllbHNlCisJCQkJZXJyb3IoInVua25vd24gc3dpdGNoICclYyciLCAqY3R4Lm9wdCk7CisJCQl1c2FnZV93aXRoX29wdGlvbnModXBkYXRlX2luZGV4X3VzYWdlLCBvcHRpb25zKTsKKwkJfQorCX0KKwlhcmdjID0gcGFyc2Vfb3B0aW9uc19lbmQoJmN0eCk7CisJaWYgKHByZWZlcnJlZF9pbmRleF9mb3JtYXQpIHsKKwkJaWYgKHByZWZlcnJlZF9pbmRleF9mb3JtYXQgPCBJTkRFWF9GT1JNQVRfTEIgfHwKKwkJICAgIElOREVYX0ZPUk1BVF9VQiA8IHByZWZlcnJlZF9pbmRleF9mb3JtYXQpCisJCQlkaWUoImluZGV4LXZlcnNpb24gJWQgbm90IGluIHJhbmdlOiAlZC4uJWQiLAorCQkJICAgIHByZWZlcnJlZF9pbmRleF9mb3JtYXQsCisJCQkgICAgSU5ERVhfRk9STUFUX0xCLCBJTkRFWF9GT1JNQVRfVUIpOworCisJCWlmICh0aGVfaW5kZXgudmVyc2lvbiAhPSBwcmVmZXJyZWRfaW5kZXhfZm9ybWF0KQorCQkJYWN0aXZlX2NhY2hlX2NoYW5nZWQgfD0gU09NRVRISU5HX0NIQU5HRUQ7CisJCXRoZV9pbmRleC52ZXJzaW9uID0gcHJlZmVycmVkX2luZGV4X2Zvcm1hdDsKKwl9CisKKwlpZiAocmVhZF9mcm9tX3N0ZGluKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIG5idWYgPSBTVFJCVUZfSU5JVDsKKworCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZidWYsIHN0ZGluLCBsaW5lX3Rlcm1pbmF0aW9uKSAhPSBFT0YpIHsKKwkJCWNoYXIgKnA7CisJCQlpZiAobGluZV90ZXJtaW5hdGlvbiAmJiBidWYuYnVmWzBdID09ICciJykgeworCQkJCXN0cmJ1Zl9yZXNldCgmbmJ1Zik7CisJCQkJaWYgKHVucXVvdGVfY19zdHlsZSgmbmJ1ZiwgYnVmLmJ1ZiwgTlVMTCkpCisJCQkJCWRpZSgibGluZSBpcyBiYWRseSBxdW90ZWQiKTsKKwkJCQlzdHJidWZfc3dhcCgmYnVmLCAmbmJ1Zik7CisJCQl9CisJCQlwID0gcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXhfbGVuZ3RoLCBidWYuYnVmKTsKKwkJCXVwZGF0ZV9vbmUocCk7CisJCQlpZiAoc2V0X2V4ZWN1dGFibGVfYml0KQorCQkJCWNobW9kX3BhdGgoc2V0X2V4ZWN1dGFibGVfYml0LCBwKTsKKwkJCWZyZWUocCk7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJm5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisKKwlpZiAoc3BsaXRfaW5kZXggPiAwKSB7CisJCWluaXRfc3BsaXRfaW5kZXgoJnRoZV9pbmRleCk7CisJCXRoZV9pbmRleC5jYWNoZV9jaGFuZ2VkIHw9IFNQTElUX0lOREVYX09SREVSRUQ7CisJfSBlbHNlIGlmICghc3BsaXRfaW5kZXggJiYgdGhlX2luZGV4LnNwbGl0X2luZGV4KSB7CisJCS8qCisJCSAqIGNhbid0IGRpc2NhcmRfc3BsaXRfaW5kZXgoJnRoZV9pbmRleCk7IGJlY2F1c2UgdGhhdAorCQkgKiB3aWxsIGRlc3Ryb3kgc3BsaXRfaW5kZXgtPmJhc2UtPmNhY2hlW10sIHdoaWNoIG1heQorCQkgKiBiZSBzaGFyZWQgd2l0aCB0aGVfaW5kZXguY2FjaGVbXS4gU28geWVhaCB3ZSdyZQorCQkgKiBsZWFraW5nIGEgYml0IGhlcmUuCisJCSAqLworCQl0aGVfaW5kZXguc3BsaXRfaW5kZXggPSBOVUxMOworCQl0aGVfaW5kZXguY2FjaGVfY2hhbmdlZCB8PSBTT01FVEhJTkdfQ0hBTkdFRDsKKwl9CisJaWYgKHVudHJhY2tlZF9jYWNoZSA+IDApIHsKKwkJc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWM7CisKKwkJaWYgKHVudHJhY2tlZF9jYWNoZSA8IDIpIHsKKwkJCXNldHVwX3dvcmtfdHJlZSgpOworCQkJaWYgKCF0ZXN0X2lmX3VudHJhY2tlZF9jYWNoZV9pc19zdXBwb3J0ZWQoKSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoIXRoZV9pbmRleC51bnRyYWNrZWQpIHsKKwkJCXVjID0geGNhbGxvYygxLCBzaXplb2YoKnVjKSk7CisJCQlzdHJidWZfaW5pdCgmdWMtPmlkZW50LCAxMDApOworCQkJdWMtPmV4Y2x1ZGVfcGVyX2RpciA9ICIuZ2l0aWdub3JlIjsKKwkJCS8qIHNob3VsZCBiZSB0aGUgc2FtZSBmbGFncyB1c2VkIGJ5IGdpdC1zdGF0dXMgKi8KKwkJCXVjLT5kaXJfZmxhZ3MgPSBESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUyB8IERJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTOworCQkJdGhlX2luZGV4LnVudHJhY2tlZCA9IHVjOworCQl9CisJCWFkZF91bnRyYWNrZWRfaWRlbnQodGhlX2luZGV4LnVudHJhY2tlZCk7CisJCXRoZV9pbmRleC5jYWNoZV9jaGFuZ2VkIHw9IFVOVFJBQ0tFRF9DSEFOR0VEOworCX0gZWxzZSBpZiAoIXVudHJhY2tlZF9jYWNoZSAmJiB0aGVfaW5kZXgudW50cmFja2VkKSB7CisJCXRoZV9pbmRleC51bnRyYWNrZWQgPSBOVUxMOworCQl0aGVfaW5kZXguY2FjaGVfY2hhbmdlZCB8PSBVTlRSQUNLRURfQ0hBTkdFRDsKKwl9CisKKwlpZiAoYWN0aXZlX2NhY2hlX2NoYW5nZWQpIHsKKwkJaWYgKG5ld2ZkIDwgMCkgeworCQkJaWYgKHJlZnJlc2hfYXJncy5mbGFncyAmIFJFRlJFU0hfUVVJRVQpCisJCQkJZXhpdCgxMjgpOworCQkJdW5hYmxlX3RvX2xvY2tfZGllKGdldF9pbmRleF9maWxlKCksIGxvY2tfZXJyb3IpOworCQl9CisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgbG9ja19maWxlLCBDT01NSVRfTE9DSykpCisJCQlkaWUoIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpOworCX0KKworCXJvbGxiYWNrX2xvY2tfZmlsZShsb2NrX2ZpbGUpOworCisJcmV0dXJuIGhhc19lcnJvcnMgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdXBkYXRlLXJlZi5jIGIvYnVpbHRpbi91cGRhdGUtcmVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzMGQzYQotLS0gL2Rldi9udWxsCisrKyBiL2J1aWx0aW4vdXBkYXRlLXJlZi5jCkBAIC0wLDAgKzEsNDQzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnaXRfdXBkYXRlX3JlZl91c2FnZVtdID0geworCU5fKCJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iKSwKKwlOXygiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIpLAorCU5fKCJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iKSwKKwlOVUxMCit9OworCitzdGF0aWMgY2hhciBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKK3N0YXRpYyBpbnQgdXBkYXRlX2ZsYWdzOworc3RhdGljIHVuc2lnbmVkIGNyZWF0ZV9yZWZsb2dfZmxhZzsKK3N0YXRpYyBjb25zdCBjaGFyICptc2c7CisKKy8qCisgKiBQYXJzZSBvbmUgd2hpdGVzcGFjZS0gb3IgTlVMLXRlcm1pbmF0ZWQsIHBvc3NpYmx5IEMtcXVvdGVkIGFyZ3VtZW50CisgKiBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gYXJnLiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgdGVybWluYXRvci4KKyAqIERpZSBpZiB0aGVyZSBpcyBhbiBlcnJvciBpbiBob3cgdGhlIGFyZ3VtZW50IGlzIEMtcXVvdGVkLiAgVGhpcworICogZnVuY3Rpb24gaXMgb25seSB1c2VkIGlmIG5vdCAtei4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2FyZyhjb25zdCBjaGFyICpuZXh0LCBzdHJ1Y3Qgc3RyYnVmICphcmcpCit7CisJaWYgKCpuZXh0ID09ICciJykgeworCQljb25zdCBjaGFyICpvcmlnID0gbmV4dDsKKworCQlpZiAodW5xdW90ZV9jX3N0eWxlKGFyZywgbmV4dCwgJm5leHQpKQorCQkJZGllKCJiYWRseSBxdW90ZWQgYXJndW1lbnQ6ICVzIiwgb3JpZyk7CisJCWlmICgqbmV4dCAmJiAhaXNzcGFjZSgqbmV4dCkpCisJCQlkaWUoInVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIHF1b3RlZCBhcmd1bWVudDogJXMiLCBvcmlnKTsKKwl9IGVsc2UgeworCQl3aGlsZSAoKm5leHQgJiYgIWlzc3BhY2UoKm5leHQpKQorCQkJc3RyYnVmX2FkZGNoKGFyZywgKm5leHQrKyk7CisJfQorCisJcmV0dXJuIG5leHQ7Cit9CisKKy8qCisgKiBQYXJzZSB0aGUgcmVmZXJlbmNlIG5hbWUgaW1tZWRpYXRlbHkgYWZ0ZXIgImNvbW1hbmQgU1AiLiAgSWYgbm90CisgKiAteiwgdGhlbiBoYW5kbGUgQy1xdW90aW5nLiAgUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZAorICogc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHJlZmVyZW5jZSwgb3IgTlVMTCBpZiB0aGVyZSB3YXMKKyAqIGFuIGVycm9yLiAgVXBkYXRlICpuZXh0IHRvIHBvaW50IGF0IHRoZSBjaGFyYWN0ZXIgdGhhdCB0ZXJtaW5hdGVzCisgKiB0aGUgYXJndW1lbnQuICBEaWUgaWYgQy1xdW90aW5nIGlzIG1hbGZvcm1lZCBvciB0aGUgcmVmZXJlbmNlIG5hbWUKKyAqIGlzIGludmFsaWQuCisgKi8KK3N0YXRpYyBjaGFyICpwYXJzZV9yZWZuYW1lKHN0cnVjdCBzdHJidWYgKmlucHV0LCBjb25zdCBjaGFyICoqbmV4dCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlZiA9IFNUUkJVRl9JTklUOworCisJaWYgKGxpbmVfdGVybWluYXRpb24pIHsKKwkJLyogV2l0aG91dCAteiwgdXNlIHRoZSBuZXh0IGFyZ3VtZW50ICovCisJCSpuZXh0ID0gcGFyc2VfYXJnKCpuZXh0LCAmcmVmKTsKKwl9IGVsc2UgeworCQkvKiBXaXRoIC16LCB1c2UgZXZlcnl0aGluZyB1cCB0byB0aGUgbmV4dCBOVUwgKi8KKwkJc3RyYnVmX2FkZHN0cigmcmVmLCAqbmV4dCk7CisJCSpuZXh0ICs9IHJlZi5sZW47CisJfQorCisJaWYgKCFyZWYubGVuKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZyZWYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmLmJ1ZiwgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkpCisJCWRpZSgiaW52YWxpZCByZWYgZm9ybWF0OiAlcyIsIHJlZi5idWYpOworCisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnJlZiwgTlVMTCk7Cit9CisKKy8qCisgKiBUaGUgdmFsdWUgYmVpbmcgcGFyc2VkIGlzIDxvbGR2YWx1ZT4gKGFzIG9wcG9zZWQgdG8gPG5ld3ZhbHVlPjsgdGhlCisgKiBkaWZmZXJlbmNlIGFmZmVjdHMgd2hpY2ggZXJyb3IgbWVzc2FnZXMgYXJlIGdlbmVyYXRlZCk6CisgKi8KKyNkZWZpbmUgUEFSU0VfU0hBMV9PTEQgMHgwMQorCisvKgorICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBhY2NlcHQgYW4gZW1wdHkgc3RyaW5nIGZvciB1cGRhdGUncworICogPG5ld3ZhbHVlPiBpbiBiaW5hcnkgbW9kZSB0byBiZSBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgemVyb3MuCisgKi8KKyNkZWZpbmUgUEFSU0VfU0hBMV9BTExPV19FTVBUWSAweDAyCisKKy8qCisgKiBQYXJzZSBhbiBhcmd1bWVudCBzZXBhcmF0b3IgZm9sbG93ZWQgYnkgdGhlIG5leHQgYXJndW1lbnQsIGlmIGFueS4KKyAqIElmIHRoZXJlIGlzIGFuIGFyZ3VtZW50LCBjb252ZXJ0IGl0IHRvIGEgU0hBLTEsIHdyaXRlIGl0IHRvIHNoYTEsCisgKiBzZXQgKm5leHQgdG8gcG9pbnQgYXQgdGhlIGNoYXJhY3RlciB0ZXJtaW5hdGluZyB0aGUgYXJndW1lbnQsIGFuZAorICogcmV0dXJuIDAuICBJZiB0aGVyZSBpcyBubyBhcmd1bWVudCBhdCBhbGwgKG5vdCBldmVuIHRoZSBlbXB0eQorICogc3RyaW5nKSwgcmV0dXJuIDEgYW5kIGxlYXZlICpuZXh0IHVuY2hhbmdlZC4gIElmIHRoZSB2YWx1ZSBpcworICogcHJvdmlkZWQgYnV0IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBTSEEtMSwgZGllLiAgZmxhZ3MgY2FuCisgKiBpbmNsdWRlIFBBUlNFX1NIQTFfT0xEIGFuZC9vciBQQVJTRV9TSEExX0FMTE9XX0VNUFRZLgorICovCitzdGF0aWMgaW50IHBhcnNlX25leHRfc2hhMShzdHJ1Y3Qgc3RyYnVmICppbnB1dCwgY29uc3QgY2hhciAqKm5leHQsCisJCQkgICB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgY29uc3QgY2hhciAqY29tbWFuZCwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGFyZyA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOworCisJaWYgKCpuZXh0ID09IGlucHV0LT5idWYgKyBpbnB1dC0+bGVuKQorCQlnb3RvIGVvZjsKKworCWlmIChsaW5lX3Rlcm1pbmF0aW9uKSB7CisJCS8qIFdpdGhvdXQgLXosIGNvbnN1bWUgU1AgYW5kIHVzZSBuZXh0IGFyZ3VtZW50ICovCisJCWlmICghKipuZXh0IHx8ICoqbmV4dCA9PSBsaW5lX3Rlcm1pbmF0aW9uKQorCQkJcmV0dXJuIDE7CisJCWlmICgqKm5leHQgIT0gJyAnKQorCQkJZGllKCIlcyAlczogZXhwZWN0ZWQgU1AgYnV0IGdvdDogJXMiLAorCQkJICAgIGNvbW1hbmQsIHJlZm5hbWUsICpuZXh0KTsKKwkJKCpuZXh0KSsrOworCQkqbmV4dCA9IHBhcnNlX2FyZygqbmV4dCwgJmFyZyk7CisJCWlmIChhcmcubGVuKSB7CisJCQlpZiAoZ2V0X3NoYTEoYXJnLmJ1Ziwgc2hhMSkpCisJCQkJZ290byBpbnZhbGlkOworCQl9IGVsc2UgeworCQkJLyogV2l0aG91dCAteiwgYW4gZW1wdHkgdmFsdWUgbWVhbnMgYWxsIHplcm9zOiAqLworCQkJaGFzaGNscihzaGExKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFdpdGggLXosIHJlYWQgdGhlIG5leHQgTlVMLXRlcm1pbmF0ZWQgbGluZSAqLworCQlpZiAoKipuZXh0KQorCQkJZGllKCIlcyAlczogZXhwZWN0ZWQgTlVMIGJ1dCBnb3Q6ICVzIiwKKwkJCSAgICBjb21tYW5kLCByZWZuYW1lLCAqbmV4dCk7CisJCSgqbmV4dCkrKzsKKwkJaWYgKCpuZXh0ID09IGlucHV0LT5idWYgKyBpbnB1dC0+bGVuKQorCQkJZ290byBlb2Y7CisJCXN0cmJ1Zl9hZGRzdHIoJmFyZywgKm5leHQpOworCQkqbmV4dCArPSBhcmcubGVuOworCisJCWlmIChhcmcubGVuKSB7CisJCQlpZiAoZ2V0X3NoYTEoYXJnLmJ1Ziwgc2hhMSkpCisJCQkJZ290byBpbnZhbGlkOworCQl9IGVsc2UgaWYgKGZsYWdzICYgUEFSU0VfU0hBMV9BTExPV19FTVBUWSkgeworCQkJLyogV2l0aCAteiwgdHJlYXQgYW4gZW1wdHkgdmFsdWUgYXMgYWxsIHplcm9zOiAqLworCQkJd2FybmluZygiJXMgJXM6IG1pc3NpbmcgPG5ld3ZhbHVlPiwgdHJlYXRpbmcgYXMgemVybyIsCisJCQkJY29tbWFuZCwgcmVmbmFtZSk7CisJCQloYXNoY2xyKHNoYTEpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFdpdGggLXosIGFuIGVtcHR5IG5vbi1yZXF1aXJlZCB2YWx1ZSBtZWFucworCQkJICogdW5zcGVjaWZpZWQ6CisJCQkgKi8KKwkJCXJldCA9IDE7CisJCX0KKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYXJnKTsKKworCXJldHVybiByZXQ7CisKKyBpbnZhbGlkOgorCWRpZShmbGFncyAmIFBBUlNFX1NIQTFfT0xEID8KKwkgICAgIiVzICVzOiBpbnZhbGlkIDxvbGR2YWx1ZT46ICVzIiA6CisJICAgICIlcyAlczogaW52YWxpZCA8bmV3dmFsdWU+OiAlcyIsCisJICAgIGNvbW1hbmQsIHJlZm5hbWUsIGFyZy5idWYpOworCisgZW9mOgorCWRpZShmbGFncyAmIFBBUlNFX1NIQTFfT0xEID8KKwkgICAgIiVzICVzOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG9sZHZhbHVlPiIgOgorCSAgICAiJXMgJXM6IHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IHdoZW4gcmVhZGluZyA8bmV3dmFsdWU+IiwKKwkgICAgY29tbWFuZCwgcmVmbmFtZSk7Cit9CisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgZml2ZSBwYXJzZV9jbWRfKigpIGZ1bmN0aW9ucyBwYXJzZSB0aGUgY29ycmVzcG9uZGluZworICogY29tbWFuZC4gIEluIGVhY2ggY2FzZSwgbmV4dCBwb2ludHMgYXQgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlCisgKiBjb21tYW5kIG5hbWUgYW5kIHRoZSBmb2xsb3dpbmcgc3BhY2UuICBUaGV5IGVhY2ggcmV0dXJuIGEgcG9pbnRlcgorICogdG8gdGhlIGNoYXJhY3RlciB0ZXJtaW5hdGluZyB0aGUgY29tbWFuZCwgYW5kIGRpZSB3aXRoIGFuCisgKiBleHBsYW5hdG9yeSBtZXNzYWdlIGlmIHRoZXJlIGFyZSBhbnkgcGFyc2luZyBwcm9ibGVtcy4gIEFsbCBvZgorICogdGhlc2UgZnVuY3Rpb25zIGhhbmRsZSBlaXRoZXIgdGV4dCBvciBiaW5hcnkgZm9ybWF0IGlucHV0LAorICogZGVwZW5kaW5nIG9uIGhvdyBsaW5lX3Rlcm1pbmF0aW9uIGlzIHNldC4KKyAqLworCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfY21kX3VwZGF0ZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqaW5wdXQsIGNvbnN0IGNoYXIgKm5leHQpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpyZWZuYW1lOworCXVuc2lnbmVkIGNoYXIgbmV3X3NoYTFbMjBdOworCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCWludCBoYXZlX29sZDsKKworCXJlZm5hbWUgPSBwYXJzZV9yZWZuYW1lKGlucHV0LCAmbmV4dCk7CisJaWYgKCFyZWZuYW1lKQorCQlkaWUoInVwZGF0ZTogbWlzc2luZyA8cmVmPiIpOworCisJaWYgKHBhcnNlX25leHRfc2hhMShpbnB1dCwgJm5leHQsIG5ld19zaGExLCAidXBkYXRlIiwgcmVmbmFtZSwKKwkJCSAgICBQQVJTRV9TSEExX0FMTE9XX0VNUFRZKSkKKwkJZGllKCJ1cGRhdGUgJXM6IG1pc3NpbmcgPG5ld3ZhbHVlPiIsIHJlZm5hbWUpOworCisJaGF2ZV9vbGQgPSAhcGFyc2VfbmV4dF9zaGExKGlucHV0LCAmbmV4dCwgb2xkX3NoYTEsICJ1cGRhdGUiLCByZWZuYW1lLAorCQkJCSAgICBQQVJTRV9TSEExX09MRCk7CisKKwlpZiAoKm5leHQgIT0gbGluZV90ZXJtaW5hdGlvbikKKwkJZGllKCJ1cGRhdGUgJXM6IGV4dHJhIGlucHV0OiAlcyIsIHJlZm5hbWUsIG5leHQpOworCisJaWYgKHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sIHJlZm5hbWUsCisJCQkJICAgbmV3X3NoYTEsIGhhdmVfb2xkID8gb2xkX3NoYTEgOiBOVUxMLAorCQkJCSAgIHVwZGF0ZV9mbGFncyB8IGNyZWF0ZV9yZWZsb2dfZmxhZywKKwkJCQkgICBtc2csICZlcnIpKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisKKwl1cGRhdGVfZmxhZ3MgPSAwOworCWZyZWUocmVmbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisKKwlyZXR1cm4gbmV4dDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2NtZF9jcmVhdGUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgIHN0cnVjdCBzdHJidWYgKmlucHV0LCBjb25zdCBjaGFyICpuZXh0KQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcmVmbmFtZTsKKwl1bnNpZ25lZCBjaGFyIG5ld19zaGExWzIwXTsKKworCXJlZm5hbWUgPSBwYXJzZV9yZWZuYW1lKGlucHV0LCAmbmV4dCk7CisJaWYgKCFyZWZuYW1lKQorCQlkaWUoImNyZWF0ZTogbWlzc2luZyA8cmVmPiIpOworCisJaWYgKHBhcnNlX25leHRfc2hhMShpbnB1dCwgJm5leHQsIG5ld19zaGExLCAiY3JlYXRlIiwgcmVmbmFtZSwgMCkpCisJCWRpZSgiY3JlYXRlICVzOiBtaXNzaW5nIDxuZXd2YWx1ZT4iLCByZWZuYW1lKTsKKworCWlmIChpc19udWxsX3NoYTEobmV3X3NoYTEpKQorCQlkaWUoImNyZWF0ZSAlczogemVybyA8bmV3dmFsdWU+IiwgcmVmbmFtZSk7CisKKwlpZiAoKm5leHQgIT0gbGluZV90ZXJtaW5hdGlvbikKKwkJZGllKCJjcmVhdGUgJXM6IGV4dHJhIGlucHV0OiAlcyIsIHJlZm5hbWUsIG5leHQpOworCisJaWYgKHJlZl90cmFuc2FjdGlvbl9jcmVhdGUodHJhbnNhY3Rpb24sIHJlZm5hbWUsIG5ld19zaGExLAorCQkJCSAgIHVwZGF0ZV9mbGFncyB8IGNyZWF0ZV9yZWZsb2dfZmxhZywKKwkJCQkgICBtc2csICZlcnIpKQorCQlkaWUoIiVzIiwgZXJyLmJ1Zik7CisKKwl1cGRhdGVfZmxhZ3MgPSAwOworCWZyZWUocmVmbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisKKwlyZXR1cm4gbmV4dDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2NtZF9kZWxldGUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkJICAgIHN0cnVjdCBzdHJidWYgKmlucHV0LCBjb25zdCBjaGFyICpuZXh0KQoreworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcmVmbmFtZTsKKwl1bnNpZ25lZCBjaGFyIG9sZF9zaGExWzIwXTsKKwlpbnQgaGF2ZV9vbGQ7CisKKwlyZWZuYW1lID0gcGFyc2VfcmVmbmFtZShpbnB1dCwgJm5leHQpOworCWlmICghcmVmbmFtZSkKKwkJZGllKCJkZWxldGU6IG1pc3NpbmcgPHJlZj4iKTsKKworCWlmIChwYXJzZV9uZXh0X3NoYTEoaW5wdXQsICZuZXh0LCBvbGRfc2hhMSwgImRlbGV0ZSIsIHJlZm5hbWUsCisJCQkgICAgUEFSU0VfU0hBMV9PTEQpKSB7CisJCWhhdmVfb2xkID0gMDsKKwl9IGVsc2UgeworCQlpZiAoaXNfbnVsbF9zaGExKG9sZF9zaGExKSkKKwkJCWRpZSgiZGVsZXRlICVzOiB6ZXJvIDxvbGR2YWx1ZT4iLCByZWZuYW1lKTsKKwkJaGF2ZV9vbGQgPSAxOworCX0KKworCWlmICgqbmV4dCAhPSBsaW5lX3Rlcm1pbmF0aW9uKQorCQlkaWUoImRlbGV0ZSAlczogZXh0cmEgaW5wdXQ6ICVzIiwgcmVmbmFtZSwgbmV4dCk7CisKKwlpZiAocmVmX3RyYW5zYWN0aW9uX2RlbGV0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZSwKKwkJCQkgICBoYXZlX29sZCA/IG9sZF9zaGExIDogTlVMTCwKKwkJCQkgICB1cGRhdGVfZmxhZ3MsIG1zZywgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCXVwZGF0ZV9mbGFncyA9IDA7CisJZnJlZShyZWZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKworCXJldHVybiBuZXh0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfY21kX3ZlcmlmeShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICAgc3RydWN0IHN0cmJ1ZiAqaW5wdXQsIGNvbnN0IGNoYXIgKm5leHQpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpyZWZuYW1lOworCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCisJcmVmbmFtZSA9IHBhcnNlX3JlZm5hbWUoaW5wdXQsICZuZXh0KTsKKwlpZiAoIXJlZm5hbWUpCisJCWRpZSgidmVyaWZ5OiBtaXNzaW5nIDxyZWY+Iik7CisKKwlpZiAocGFyc2VfbmV4dF9zaGExKGlucHV0LCAmbmV4dCwgb2xkX3NoYTEsICJ2ZXJpZnkiLCByZWZuYW1lLAorCQkJICAgIFBBUlNFX1NIQTFfT0xEKSkKKwkJaGFzaGNscihvbGRfc2hhMSk7CisKKwlpZiAoKm5leHQgIT0gbGluZV90ZXJtaW5hdGlvbikKKwkJZGllKCJ2ZXJpZnkgJXM6IGV4dHJhIGlucHV0OiAlcyIsIHJlZm5hbWUsIG5leHQpOworCisJaWYgKHJlZl90cmFuc2FjdGlvbl92ZXJpZnkodHJhbnNhY3Rpb24sIHJlZm5hbWUsIG9sZF9zaGExLAorCQkJCSAgIHVwZGF0ZV9mbGFncywgJmVycikpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCXVwZGF0ZV9mbGFncyA9IDA7CisJZnJlZShyZWZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKworCXJldHVybiBuZXh0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfY21kX29wdGlvbihzdHJ1Y3Qgc3RyYnVmICppbnB1dCwgY29uc3QgY2hhciAqbmV4dCkKK3sKKwlpZiAoIXN0cm5jbXAobmV4dCwgIm5vLWRlcmVmIiwgOCkgJiYgbmV4dFs4XSA9PSBsaW5lX3Rlcm1pbmF0aW9uKQorCQl1cGRhdGVfZmxhZ3MgfD0gUkVGX05PREVSRUY7CisJZWxzZQorCQlkaWUoIm9wdGlvbiB1bmtub3duOiAlcyIsIG5leHQpOworCXJldHVybiBuZXh0ICsgODsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3JlZnNfc3RkaW4oc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24pCit7CisJc3RydWN0IHN0cmJ1ZiBpbnB1dCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKm5leHQ7CisKKwlpZiAoc3RyYnVmX3JlYWQoJmlucHV0LCAwLCAxMDAwKSA8IDApCisJCWRpZV9lcnJubygiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIpOworCW5leHQgPSBpbnB1dC5idWY7CisJLyogUmVhZCBlYWNoIGxpbmUgZGlzcGF0Y2ggaXRzIGNvbW1hbmQgKi8KKwl3aGlsZSAobmV4dCA8IGlucHV0LmJ1ZiArIGlucHV0LmxlbikgeworCQlpZiAoKm5leHQgPT0gbGluZV90ZXJtaW5hdGlvbikKKwkJCWRpZSgiZW1wdHkgY29tbWFuZCBpbiBpbnB1dCIpOworCQllbHNlIGlmIChpc3NwYWNlKCpuZXh0KSkKKwkJCWRpZSgid2hpdGVzcGFjZSBiZWZvcmUgY29tbWFuZDogJXMiLCBuZXh0KTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgobmV4dCwgInVwZGF0ZSAiKSkKKwkJCW5leHQgPSBwYXJzZV9jbWRfdXBkYXRlKHRyYW5zYWN0aW9uLCAmaW5wdXQsIG5leHQgKyA3KTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgobmV4dCwgImNyZWF0ZSAiKSkKKwkJCW5leHQgPSBwYXJzZV9jbWRfY3JlYXRlKHRyYW5zYWN0aW9uLCAmaW5wdXQsIG5leHQgKyA3KTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgobmV4dCwgImRlbGV0ZSAiKSkKKwkJCW5leHQgPSBwYXJzZV9jbWRfZGVsZXRlKHRyYW5zYWN0aW9uLCAmaW5wdXQsIG5leHQgKyA3KTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgobmV4dCwgInZlcmlmeSAiKSkKKwkJCW5leHQgPSBwYXJzZV9jbWRfdmVyaWZ5KHRyYW5zYWN0aW9uLCAmaW5wdXQsIG5leHQgKyA3KTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgobmV4dCwgIm9wdGlvbiAiKSkKKwkJCW5leHQgPSBwYXJzZV9jbWRfb3B0aW9uKCZpbnB1dCwgbmV4dCArIDcpOworCQllbHNlCisJCQlkaWUoInVua25vd24gY29tbWFuZDogJXMiLCBuZXh0KTsKKworCQluZXh0Kys7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmlucHV0KTsKK30KKworaW50IGNtZF91cGRhdGVfcmVmKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKnJlZm5hbWUsICpvbGR2YWw7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXSwgb2xkc2hhMVsyMF07CisJaW50IGRlbGV0ZSA9IDAsIG5vX2RlcmVmID0gMCwgcmVhZF9zdGRpbiA9IDAsIGVuZF9udWxsID0gMDsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSAwOworCWludCBjcmVhdGVfcmVmbG9nID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX1NUUklORyggJ20nLCBOVUxMLCAmbXNnLCBOXygicmVhc29uIiksIE5fKCJyZWFzb24gb2YgdGhlIHVwZGF0ZSIpKSwKKwkJT1BUX0JPT0woJ2QnLCBOVUxMLCAmZGVsZXRlLCBOXygiZGVsZXRlIHRoZSByZWZlcmVuY2UiKSksCisJCU9QVF9CT09MKCAwICwgIm5vLWRlcmVmIiwgJm5vX2RlcmVmLAorCQkJCQlOXygidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iKSksCisJCU9QVF9CT09MKCd6JywgTlVMTCwgJmVuZF9udWxsLCBOXygic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIpKSwKKwkJT1BUX0JPT0woIDAgLCAic3RkaW4iLCAmcmVhZF9zdGRpbiwgTl8oInJlYWQgdXBkYXRlcyBmcm9tIHN0ZGluIikpLAorCQlPUFRfQk9PTCggMCAsICJjcmVhdGUtcmVmbG9nIiwgJmNyZWF0ZV9yZWZsb2csIE5fKCJjcmVhdGUgYSByZWZsb2ciKSksCisJCU9QVF9FTkQoKSwKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywgZ2l0X3VwZGF0ZV9yZWZfdXNhZ2UsCisJCQkgICAgIDApOworCWlmIChtc2cgJiYgISptc2cpCisJCWRpZSgiUmVmdXNpbmcgdG8gcGVyZm9ybSB1cGRhdGUgd2l0aCBlbXB0eSBtZXNzYWdlLiIpOworCisJY3JlYXRlX3JlZmxvZ19mbGFnID0gY3JlYXRlX3JlZmxvZyA/IFJFRl9GT1JDRV9DUkVBVEVfUkVGTE9HIDogMDsKKworCWlmIChyZWFkX3N0ZGluKSB7CisJCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCisJCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCQlpZiAoIXRyYW5zYWN0aW9uKQorCQkJZGllKCIlcyIsIGVyci5idWYpOworCQlpZiAoZGVsZXRlIHx8IG5vX2RlcmVmIHx8IGFyZ2MgPiAwKQorCQkJdXNhZ2Vfd2l0aF9vcHRpb25zKGdpdF91cGRhdGVfcmVmX3VzYWdlLCBvcHRpb25zKTsKKwkJaWYgKGVuZF9udWxsKQorCQkJbGluZV90ZXJtaW5hdGlvbiA9ICdcMCc7CisJCXVwZGF0ZV9yZWZzX3N0ZGluKHRyYW5zYWN0aW9uKTsKKwkJaWYgKHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpKQorCQkJZGllKCIlcyIsIGVyci5idWYpOworCQlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZW5kX251bGwpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfdXBkYXRlX3JlZl91c2FnZSwgb3B0aW9ucyk7CisKKwlpZiAoZGVsZXRlKSB7CisJCWlmIChhcmdjIDwgMSB8fCBhcmdjID4gMikKKwkJCXVzYWdlX3dpdGhfb3B0aW9ucyhnaXRfdXBkYXRlX3JlZl91c2FnZSwgb3B0aW9ucyk7CisJCXJlZm5hbWUgPSBhcmd2WzBdOworCQlvbGR2YWwgPSBhcmd2WzFdOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKnZhbHVlOworCQlpZiAoYXJnYyA8IDIgfHwgYXJnYyA+IDMpCisJCQl1c2FnZV93aXRoX29wdGlvbnMoZ2l0X3VwZGF0ZV9yZWZfdXNhZ2UsIG9wdGlvbnMpOworCQlyZWZuYW1lID0gYXJndlswXTsKKwkJdmFsdWUgPSBhcmd2WzFdOworCQlvbGR2YWwgPSBhcmd2WzJdOworCQlpZiAoZ2V0X3NoYTEodmFsdWUsIHNoYTEpKQorCQkJZGllKCIlczogbm90IGEgdmFsaWQgU0hBMSIsIHZhbHVlKTsKKwl9CisKKwlpZiAob2xkdmFsKSB7CisJCWlmICghKm9sZHZhbCkKKwkJCS8qCisJCQkgKiBUaGUgZW1wdHkgc3RyaW5nIGltcGxpZXMgdGhhdCB0aGUgcmVmZXJlbmNlCisJCQkgKiBtdXN0IG5vdCBhbHJlYWR5IGV4aXN0OgorCQkJICovCisJCQloYXNoY2xyKG9sZHNoYTEpOworCQllbHNlIGlmIChnZXRfc2hhMShvbGR2YWwsIG9sZHNoYTEpKQorCQkJZGllKCIlczogbm90IGEgdmFsaWQgb2xkIFNIQTEiLCBvbGR2YWwpOworCX0KKworCWlmIChub19kZXJlZikKKwkJZmxhZ3MgPSBSRUZfTk9ERVJFRjsKKwlpZiAoZGVsZXRlKQorCQkvKgorCQkgKiBGb3IgcHVycG9zZXMgb2YgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdlIHRyZWF0CisJCSAqIE5VTExfU0hBMSBhcyAiZG9uJ3QgY2FyZSIgaGVyZToKKwkJICovCisJCXJldHVybiBkZWxldGVfcmVmKHJlZm5hbWUsCisJCQkJICAob2xkdmFsICYmICFpc19udWxsX3NoYTEob2xkc2hhMSkpID8gb2xkc2hhMSA6IE5VTEwsCisJCQkJICBmbGFncyk7CisJZWxzZQorCQlyZXR1cm4gdXBkYXRlX3JlZihtc2csIHJlZm5hbWUsIHNoYTEsIG9sZHZhbCA/IG9sZHNoYTEgOiBOVUxMLAorCQkJCSAgZmxhZ3MgfCBjcmVhdGVfcmVmbG9nX2ZsYWcsCisJCQkJICBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmMgYi9idWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOGNjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jCkBAIC0wLDAgKzEsMjUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdXBkYXRlX3NlcnZlcl9pbmZvX3VzYWdlW10gPSB7CisJTl8oImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIiksCisJTlVMTAorfTsKKworaW50IGNtZF91cGRhdGVfc2VydmVyX2luZm8oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGZvcmNlID0gMDsKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19GT1JDRSgmZm9yY2UsIE5fKCJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgb3B0aW9ucywKKwkJCSAgICAgdXBkYXRlX3NlcnZlcl9pbmZvX3VzYWdlLCAwKTsKKwlpZiAoYXJnYyA+IDApCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1cGRhdGVfc2VydmVyX2luZm9fdXNhZ2UsIG9wdGlvbnMpOworCisJcmV0dXJuICEhdXBkYXRlX3NlcnZlcl9pbmZvKGZvcmNlKTsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdXBsb2FkLWFyY2hpdmUuYyBiL2J1aWx0aW4vdXBsb2FkLWFyY2hpdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmZlMTRmCi0tLSAvZGV2L251bGwKKysrIGIvYnVpbHRpbi91cGxvYWQtYXJjaGl2ZS5jCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEZyYW5jayBCdWktSHV1CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJhcmNoaXZlLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCitzdGF0aWMgY29uc3QgY2hhciB1cGxvYWRfYXJjaGl2ZV91c2FnZVtdID0KKwkiZ2l0IHVwbG9hZC1hcmNoaXZlIDxyZXBvPiI7CisKK3N0YXRpYyBjb25zdCBjaGFyIGRlYWRjaGlsZFtdID0KKyJnaXQgdXBsb2FkLWFyY2hpdmU6IGFyY2hpdmVyIGRpZWQgd2l0aCBlcnJvciI7CisKKyNkZWZpbmUgTUFYX0FSR1MgKDY0KQorCitpbnQgY21kX3VwbG9hZF9hcmNoaXZlX3dyaXRlcihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBzZW50X2FyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisJY29uc3QgY2hhciAqYXJnX2NtZCA9ICJhcmd1bWVudCAiOworCisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2UodXBsb2FkX2FyY2hpdmVfdXNhZ2UpOworCisJaWYgKCFlbnRlcl9yZXBvKGFyZ3ZbMV0sIDApKQorCQlkaWUoIiclcycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnkiLCBhcmd2WzFdKTsKKworCS8qIHB1dCByZWNlaXZlZCBvcHRpb25zIGluIHNlbnRfYXJndltdICovCisJYXJndl9hcnJheV9wdXNoKCZzZW50X2FyZ3YsICJnaXQtdXBsb2FkLWFyY2hpdmUiKTsKKwlmb3IgKDs7KSB7CisJCWNoYXIgKmJ1ZiA9IHBhY2tldF9yZWFkX2xpbmUoMCwgTlVMTCk7CisJCWlmICghYnVmKQorCQkJYnJlYWs7CS8qIGdvdCBhIGZsdXNoICovCisJCWlmIChzZW50X2FyZ3YuYXJnYyA+IE1BWF9BUkdTKQorCQkJZGllKCJUb28gbWFueSBvcHRpb25zICg+JWQpIiwgTUFYX0FSR1MgLSAxKTsKKworCQlpZiAoIXN0YXJ0c193aXRoKGJ1ZiwgYXJnX2NtZCkpCisJCQlkaWUoIidhcmd1bWVudCcgdG9rZW4gb3IgZmx1c2ggZXhwZWN0ZWQiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZzZW50X2FyZ3YsIGJ1ZiArIHN0cmxlbihhcmdfY21kKSk7CisJfQorCisJLyogcGFyc2UgYWxsIG9wdGlvbnMgc2VudCBieSB0aGUgY2xpZW50ICovCisJcmV0dXJuIHdyaXRlX2FyY2hpdmUoc2VudF9hcmd2LmFyZ2MsIHNlbnRfYXJndi5hcmd2LCBwcmVmaXgsIDAsIE5VTEwsIDEpOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIHZvaWQgZXJyb3JfY2xudChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXZhX2xpc3QgcGFyYW1zOworCisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOworCXN0cmJ1Zl92YWRkZigmYnVmLCBmbXQsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJc2VuZF9zaWRlYmFuZCgxLCAzLCBidWYuYnVmLCBidWYubGVuLCBMQVJHRV9QQUNLRVRfTUFYKTsKKwlkaWUoInNlbnQgZXJyb3IgdG8gdGhlIGNsaWVudDogJXMiLCBidWYuYnVmKTsKK30KKworc3RhdGljIHNzaXplX3QgcHJvY2Vzc19pbnB1dChpbnQgY2hpbGRfZmQsIGludCBiYW5kKQoreworCWNoYXIgYnVmWzE2Mzg0XTsKKwlzc2l6ZV90IHN6ID0gcmVhZChjaGlsZF9mZCwgYnVmLCBzaXplb2YoYnVmKSk7CisJaWYgKHN6IDwgMCkgeworCQlpZiAoZXJybm8gIT0gRUFHQUlOICYmIGVycm5vICE9IEVJTlRSKQorCQkJZXJyb3JfY2xudCgicmVhZCBlcnJvcjogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiBzejsKKwl9CisJc2VuZF9zaWRlYmFuZCgxLCBiYW5kLCBidWYsIHN6LCBMQVJHRV9QQUNLRVRfTUFYKTsKKwlyZXR1cm4gc3o7Cit9CisKK2ludCBjbWRfdXBsb2FkX2FyY2hpdmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3Mgd3JpdGVyID0geyBhcmd2IH07CisKKwkvKgorCSAqIFNldCB1cCBzaWRlYmFuZCBzdWJwcm9jZXNzLgorCSAqCisJICogV2UgKHBhcmVudCkgbW9uaXRvciBhbmQgcmVhZCBmcm9tIGNoaWxkLCBzZW5kaW5nIGl0cyBmZCMxIGFuZCBmZCMyCisJICogbXVsdGlwbGV4ZWQgb3V0IHRvIG91ciBmZCMxLiAgSWYgdGhlIGNoaWxkIGRpZXMsIHdlIHRlbGwgdGhlIG90aGVyCisJICogZW5kIG92ZXIgY2hhbm5lbCAjMy4KKwkgKi8KKwlhcmd2WzBdID0gInVwbG9hZC1hcmNoaXZlLS13cml0ZXIiOworCXdyaXRlci5vdXQgPSB3cml0ZXIuZXJyID0gLTE7CisJd3JpdGVyLmdpdF9jbWQgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZ3cml0ZXIpKSB7CisJCWludCBlcnIgPSBlcnJubzsKKwkJcGFja2V0X3dyaXRlKDEsICJOQUNLIHVuYWJsZSB0byBzcGF3biBzdWJwcm9jZXNzXG4iKTsKKwkJZGllKCJ1cGxvYWQtYXJjaGl2ZTogJXMiLCBzdHJlcnJvcihlcnIpKTsKKwl9CisKKwlwYWNrZXRfd3JpdGUoMSwgIkFDS1xuIik7CisJcGFja2V0X2ZsdXNoKDEpOworCisJd2hpbGUgKDEpIHsKKwkJc3RydWN0IHBvbGxmZCBwZmRbMl07CisKKwkJcGZkWzBdLmZkID0gd3JpdGVyLm91dDsKKwkJcGZkWzBdLmV2ZW50cyA9IFBPTExJTjsKKwkJcGZkWzFdLmZkID0gd3JpdGVyLmVycjsKKwkJcGZkWzFdLmV2ZW50cyA9IFBPTExJTjsKKwkJaWYgKHBvbGwocGZkLCAyLCAtMSkgPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRUlOVFIpIHsKKwkJCQllcnJvcigicG9sbCBmYWlsZWQgcmVzdW1pbmc6ICVzIiwKKwkJCQkgICAgICBzdHJlcnJvcihlcnJubykpOworCQkJCXNsZWVwKDEpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKHBmZFsxXS5yZXZlbnRzICYgUE9MTElOKQorCQkJLyogU3RhdHVzIHN0cmVhbSByZWFkeSAqLworCQkJaWYgKHByb2Nlc3NfaW5wdXQocGZkWzFdLmZkLCAyKSkKKwkJCQljb250aW51ZTsKKwkJaWYgKHBmZFswXS5yZXZlbnRzICYgUE9MTElOKQorCQkJLyogRGF0YSBzdHJlYW0gcmVhZHkgKi8KKwkJCWlmIChwcm9jZXNzX2lucHV0KHBmZFswXS5mZCwgMSkpCisJCQkJY29udGludWU7CisKKwkJaWYgKGZpbmlzaF9jb21tYW5kKCZ3cml0ZXIpKQorCQkJZXJyb3JfY2xudCgiJXMiLCBkZWFkY2hpbGQpOworCQlwYWNrZXRfZmx1c2goMSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2J1aWx0aW4vdmFyLmMgYi9idWlsdGluL3Zhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZGJiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3Zhci5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIEVyaWMgQmllZGVybWFuLCAyMDA1CisgKi8KKyNpbmNsdWRlICJidWlsdGluLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHZhcl91c2FnZVtdID0gImdpdCB2YXIgKC1sIHwgPHZhcmlhYmxlPikiOworCitzdGF0aWMgY29uc3QgY2hhciAqZWRpdG9yKGludCBmbGFnKQoreworCWNvbnN0IGNoYXIgKnBnbSA9IGdpdF9lZGl0b3IoKTsKKworCWlmICghcGdtICYmIGZsYWcgJiBJREVOVF9TVFJJQ1QpCisJCWRpZSgiVGVybWluYWwgaXMgZHVtYiwgYnV0IEVESVRPUiB1bnNldCIpOworCisJcmV0dXJuIHBnbTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhZ2VyKGludCBmbGFnKQoreworCWNvbnN0IGNoYXIgKnBnbSA9IGdpdF9wYWdlcigxKTsKKworCWlmICghcGdtKQorCQlwZ20gPSAiY2F0IjsKKwlyZXR1cm4gcGdtOworfQorCitzdHJ1Y3QgZ2l0X3ZhciB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICooKnJlYWQpKGludCk7Cit9Oworc3RhdGljIHN0cnVjdCBnaXRfdmFyIGdpdF92YXJzW10gPSB7CisJeyAiR0lUX0NPTU1JVFRFUl9JREVOVCIsIGdpdF9jb21taXR0ZXJfaW5mbyB9LAorCXsgIkdJVF9BVVRIT1JfSURFTlQiLCAgIGdpdF9hdXRob3JfaW5mbyB9LAorCXsgIkdJVF9FRElUT1IiLCBlZGl0b3IgfSwKKwl7ICJHSVRfUEFHRVIiLCBwYWdlciB9LAorCXsgIiIsIE5VTEwgfSwKK307CisKK3N0YXRpYyB2b2lkIGxpc3RfdmFycyh2b2lkKQoreworCXN0cnVjdCBnaXRfdmFyICpwdHI7CisJY29uc3QgY2hhciAqdmFsOworCisJZm9yIChwdHIgPSBnaXRfdmFyczsgcHRyLT5yZWFkOyBwdHIrKykKKwkJaWYgKCh2YWwgPSBwdHItPnJlYWQoMCkpKQorCQkJcHJpbnRmKCIlcz0lc1xuIiwgcHRyLT5uYW1lLCB2YWwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcmVhZF92YXIoY29uc3QgY2hhciAqdmFyKQoreworCXN0cnVjdCBnaXRfdmFyICpwdHI7CisJY29uc3QgY2hhciAqdmFsOworCXZhbCA9IE5VTEw7CisJZm9yIChwdHIgPSBnaXRfdmFyczsgcHRyLT5yZWFkOyBwdHIrKykgeworCQlpZiAoc3RyY21wKHZhciwgcHRyLT5uYW1lKSA9PSAwKSB7CisJCQl2YWwgPSBwdHItPnJlYWQoSURFTlRfU1RSSUNUKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2hvd19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKHZhbHVlKQorCQlwcmludGYoIiVzPSVzXG4iLCB2YXIsIHZhbHVlKTsKKwllbHNlCisJCXByaW50ZigiJXNcbiIsIHZhcik7CisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK2ludCBjbWRfdmFyKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWNvbnN0IGNoYXIgKnZhbCA9IE5VTEw7CisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2UodmFyX3VzYWdlKTsKKworCWlmIChzdHJjbXAoYXJndlsxXSwgIi1sIikgPT0gMCkgeworCQlnaXRfY29uZmlnKHNob3dfY29uZmlnLCBOVUxMKTsKKwkJbGlzdF92YXJzKCk7CisJCXJldHVybiAwOworCX0KKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJdmFsID0gcmVhZF92YXIoYXJndlsxXSk7CisJaWYgKCF2YWwpCisJCXVzYWdlKHZhcl91c2FnZSk7CisKKwlwcmludGYoIiVzXG4iLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3ZlcmlmeS1jb21taXQuYyBiL2J1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YmVkZjgKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3ZlcmlmeS1jb21taXQuYwpAQCAtMCwwICsxLDk0IEBACisvKgorICogQnVpbHRpbiAiZ2l0IGNvbW1pdC1jb21taXQiCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE1pY2hhZWwgSiBHcnViZXIgPGdpdEBkcm1pY2hhLndhcnBtYWlsLm5ldD4KKyAqCisgKiBCYXNlZCBvbiBnaXQtdmVyaWZ5LXRhZworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZlcmlmeV9jb21taXRfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iKSwKKwkJTlVMTAorfTsKKworc3RhdGljIGludCBydW5fZ3BnX3ZlcmlmeShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWduYXR1cmVfY2hlY2s7CisJaW50IHJldDsKKworCW1lbXNldCgmc2lnbmF0dXJlX2NoZWNrLCAwLCBzaXplb2Yoc2lnbmF0dXJlX2NoZWNrKSk7CisKKwlyZXQgPSBjaGVja19jb21taXRfc2lnbmF0dXJlKGxvb2t1cF9jb21taXQoc2hhMSksICZzaWduYXR1cmVfY2hlY2spOworCXByaW50X3NpZ25hdHVyZV9idWZmZXIoJnNpZ25hdHVyZV9jaGVjaywgZmxhZ3MpOworCisJc2lnbmF0dXJlX2NoZWNrX2NsZWFyKCZzaWduYXR1cmVfY2hlY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2NvbW1pdChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBmbGFncykKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCByZXQ7CisKKwlpZiAoZ2V0X3NoYTEobmFtZSwgc2hhMSkpCisJCXJldHVybiBlcnJvcigiY29tbWl0ICclcycgbm90IGZvdW5kLiIsIG5hbWUpOworCisJYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIGVycm9yKCIlczogdW5hYmxlIHRvIHJlYWQgZmlsZS4iLCBuYW1lKTsKKwlpZiAodHlwZSAhPSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBjYW5ub3QgdmVyaWZ5IGEgbm9uLWNvbW1pdCBvYmplY3Qgb2YgdHlwZSAlcy4iLAorCQkJCW5hbWUsIHR5cGVuYW1lKHR5cGUpKTsKKworCXJldCA9IHJ1bl9ncGdfdmVyaWZ5KHNoYTEsIGJ1Ziwgc2l6ZSwgZmxhZ3MpOworCisJZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3ZlcmlmeV9jb21taXRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWludCBzdGF0dXMgPSBnaXRfZ3BnX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGNtZF92ZXJpZnlfY29tbWl0KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpID0gMSwgdmVyYm9zZSA9IDAsIGhhZF9lcnJvciA9IDA7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gdmVyaWZ5X2NvbW1pdF9vcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oInByaW50IGNvbW1pdCBjb250ZW50cyIpKSwKKwkJT1BUX0JJVCgwLCAicmF3IiwgJmZsYWdzLCBOXygicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IiksIEdQR19WRVJJRllfUkFXKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X3ZlcmlmeV9jb21taXRfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgdmVyaWZ5X2NvbW1pdF9vcHRpb25zLAorCQkJICAgICB2ZXJpZnlfY29tbWl0X3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisJaWYgKGFyZ2MgPD0gaSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHZlcmlmeV9jb21taXRfdXNhZ2UsIHZlcmlmeV9jb21taXRfb3B0aW9ucyk7CisKKwlpZiAodmVyYm9zZSkKKwkJZmxhZ3MgfD0gR1BHX1ZFUklGWV9WRVJCT1NFOworCisJLyogc29tZXRpbWVzIHRoZSBwcm9ncmFtIHdhcyB0ZXJtaW5hdGVkIGJlY2F1c2UgdGhpcyBzaWduYWwKKwkgKiB3YXMgcmVjZWl2ZWQgaW4gdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyB0aGUgZ3BnIGlucHV0OiAqLworCXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKKwl3aGlsZSAoaSA8IGFyZ2MpCisJCWlmICh2ZXJpZnlfY29tbWl0KGFyZ3ZbaSsrXSwgZmxhZ3MpKQorCQkJaGFkX2Vycm9yID0gMTsKKwlyZXR1cm4gaGFkX2Vycm9yOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi92ZXJpZnktcGFjay5jIGIvYnVpbHRpbi92ZXJpZnktcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGUxNTYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3ZlcmlmeS1wYWNrLmMKQEAgLTAsMCArMSw4MiBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCisjZGVmaW5lIFZFUklGWV9QQUNLX1ZFUkJPU0UgMDEKKyNkZWZpbmUgVkVSSUZZX1BBQ0tfU1RBVF9PTkxZIDAyCisKK3N0YXRpYyBpbnQgdmVyaWZ5X29uZV9wYWNrKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBpbmRleF9wYWNrID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsiaW5kZXgtcGFjayIsIE5VTEwsIE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3Qgc3RyYnVmIGFyZyA9IFNUUkJVRl9JTklUOworCWludCB2ZXJib3NlID0gZmxhZ3MgJiBWRVJJRllfUEFDS19WRVJCT1NFOworCWludCBzdGF0X29ubHkgPSBmbGFncyAmIFZFUklGWV9QQUNLX1NUQVRfT05MWTsKKwlpbnQgZXJyOworCisJaWYgKHN0YXRfb25seSkKKwkJYXJndlsxXSA9ICItLXZlcmlmeS1zdGF0LW9ubHkiOworCWVsc2UgaWYgKHZlcmJvc2UpCisJCWFyZ3ZbMV0gPSAiLS12ZXJpZnktc3RhdCI7CisJZWxzZQorCQlhcmd2WzFdID0gIi0tdmVyaWZ5IjsKKworCS8qCisJICogSW4gYWRkaXRpb24gdG8gImZvby5wYWNrIiB3ZSBhY2NlcHQgImZvby5pZHgiIGFuZCAiZm9vIjsKKwkgKiBub3JtYWxpemUgdGhlc2UgZm9ybXMgdG8gImZvby5wYWNrIiBmb3IgImluZGV4LXBhY2sgLS12ZXJpZnkiLgorCSAqLworCXN0cmJ1Zl9hZGRzdHIoJmFyZywgcGF0aCk7CisJaWYgKHN0cmJ1Zl9zdHJpcF9zdWZmaXgoJmFyZywgIi5pZHgiKSB8fAorCSAgICAhZW5kc193aXRoKGFyZy5idWYsICIucGFjayIpKQorCQlzdHJidWZfYWRkc3RyKCZhcmcsICIucGFjayIpOworCWFyZ3ZbMl0gPSBhcmcuYnVmOworCisJaW5kZXhfcGFjay5hcmd2ID0gYXJndjsKKwlpbmRleF9wYWNrLmdpdF9jbWQgPSAxOworCisJZXJyID0gcnVuX2NvbW1hbmQoJmluZGV4X3BhY2spOworCisJaWYgKHZlcmJvc2UgfHwgc3RhdF9vbmx5KSB7CisJCWlmIChlcnIpCisJCQlwcmludGYoIiVzOiBiYWRcbiIsIGFyZy5idWYpOworCQllbHNlIHsKKwkJCWlmICghc3RhdF9vbmx5KQorCQkJCXByaW50ZigiJXM6IG9rXG4iLCBhcmcuYnVmKTsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmYXJnKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdmVyaWZ5X3BhY2tfdXNhZ2VbXSA9IHsKKwlOXygiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIpLAorCU5VTEwKK307CisKK2ludCBjbWRfdmVyaWZ5X3BhY2soaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKKwlpbnQgaTsKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uIHZlcmlmeV9wYWNrX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgndicsICJ2ZXJib3NlIiwgJmZsYWdzLCBOXygidmVyYm9zZSIpLAorCQkJVkVSSUZZX1BBQ0tfVkVSQk9TRSksCisJCU9QVF9CSVQoJ3MnLCAic3RhdC1vbmx5IiwgJmZsYWdzLCBOXygic2hvdyBzdGF0aXN0aWNzIG9ubHkiKSwKKwkJCVZFUklGWV9QQUNLX1NUQVRfT05MWSksCisJCU9QVF9FTkQoKQorCX07CisKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgcHJlZml4LCB2ZXJpZnlfcGFja19vcHRpb25zLAorCQkJICAgICB2ZXJpZnlfcGFja191c2FnZSwgMCk7CisJaWYgKGFyZ2MgPCAxKQorCQl1c2FnZV93aXRoX29wdGlvbnModmVyaWZ5X3BhY2tfdXNhZ2UsIHZlcmlmeV9wYWNrX29wdGlvbnMpOworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKHZlcmlmeV9vbmVfcGFjayhhcmd2W2ldLCBmbGFncykpCisJCQllcnIgPSAxOworCX0KKworCXJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3ZlcmlmeS10YWcuYyBiL2J1aWx0aW4vdmVyaWZ5LXRhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNjYzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3ZlcmlmeS10YWcuYwpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIEJ1aWx0aW4gImdpdCB2ZXJpZnktdGFnIgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBDYXJsb3MgUmljYSA8amFzYW1wbGVyQGdtYWlsLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBnaXQtdmVyaWZ5LXRhZy5zaAorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZlcmlmeV90YWdfdXNhZ2VbXSA9IHsKKwkJTl8oImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gPHRhZz4uLi4iKSwKKwkJTlVMTAorfTsKKworc3RhdGljIGludCBydW5fZ3BnX3ZlcmlmeShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWdjOworCWludCBsZW47CisJaW50IHJldDsKKworCW1lbXNldCgmc2lnYywgMCwgc2l6ZW9mKHNpZ2MpKTsKKworCWxlbiA9IHBhcnNlX3NpZ25hdHVyZShidWYsIHNpemUpOworCisJaWYgKHNpemUgPT0gbGVuKSB7CisJCWlmIChmbGFncyAmIEdQR19WRVJJRllfVkVSQk9TRSkKKwkJCXdyaXRlX2luX2Z1bGwoMSwgYnVmLCBsZW4pOworCQlyZXR1cm4gZXJyb3IoIm5vIHNpZ25hdHVyZSBmb3VuZCIpOworCX0KKworCXJldCA9IGNoZWNrX3NpZ25hdHVyZShidWYsIGxlbiwgYnVmICsgbGVuLCBzaXplIC0gbGVuLCAmc2lnYyk7CisJcHJpbnRfc2lnbmF0dXJlX2J1ZmZlcigmc2lnYywgZmxhZ3MpOworCisJc2lnbmF0dXJlX2NoZWNrX2NsZWFyKCZzaWdjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZlcmlmeV90YWcoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgZmxhZ3MpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgcmV0OworCisJaWYgKGdldF9zaGExKG5hbWUsIHNoYTEpKQorCQlyZXR1cm4gZXJyb3IoInRhZyAnJXMnIG5vdCBmb3VuZC4iLCBuYW1lKTsKKworCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOworCWlmICh0eXBlICE9IE9CSl9UQUcpCisJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCB2ZXJpZnkgYSBub24tdGFnIG9iamVjdCBvZiB0eXBlICVzLiIsCisJCQkJbmFtZSwgdHlwZW5hbWUodHlwZSkpOworCisJYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIGVycm9yKCIlczogdW5hYmxlIHRvIHJlYWQgZmlsZS4iLCBuYW1lKTsKKworCXJldCA9IHJ1bl9ncGdfdmVyaWZ5KGJ1Ziwgc2l6ZSwgZmxhZ3MpOworCisJZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3ZlcmlmeV90YWdfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWludCBzdGF0dXMgPSBnaXRfZ3BnX2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGNtZF92ZXJpZnlfdGFnKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWludCBpID0gMSwgdmVyYm9zZSA9IDAsIGhhZF9lcnJvciA9IDA7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCWNvbnN0IHN0cnVjdCBvcHRpb24gdmVyaWZ5X3RhZ19vcHRpb25zW10gPSB7CisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oInByaW50IHRhZyBjb250ZW50cyIpKSwKKwkJT1BUX0JJVCgwLCAicmF3IiwgJmZsYWdzLCBOXygicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IiksIEdQR19WRVJJRllfUkFXKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWdpdF9jb25maWcoZ2l0X3ZlcmlmeV90YWdfY29uZmlnLCBOVUxMKTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHByZWZpeCwgdmVyaWZ5X3RhZ19vcHRpb25zLAorCQkJICAgICB2ZXJpZnlfdGFnX3VzYWdlLCBQQVJTRV9PUFRfS0VFUF9BUkdWMCk7CisJaWYgKGFyZ2MgPD0gaSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHZlcmlmeV90YWdfdXNhZ2UsIHZlcmlmeV90YWdfb3B0aW9ucyk7CisKKwlpZiAodmVyYm9zZSkKKwkJZmxhZ3MgfD0gR1BHX1ZFUklGWV9WRVJCT1NFOworCisJLyogc29tZXRpbWVzIHRoZSBwcm9ncmFtIHdhcyB0ZXJtaW5hdGVkIGJlY2F1c2UgdGhpcyBzaWduYWwKKwkgKiB3YXMgcmVjZWl2ZWQgaW4gdGhlIHByb2Nlc3Mgb2Ygd3JpdGluZyB0aGUgZ3BnIGlucHV0OiAqLworCXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKTsKKwl3aGlsZSAoaSA8IGFyZ2MpCisJCWlmICh2ZXJpZnlfdGFnKGFyZ3ZbaSsrXSwgZmxhZ3MpKQorCQkJaGFkX2Vycm9yID0gMTsKKwlyZXR1cm4gaGFkX2Vycm9yOworfQpkaWZmIC0tZ2l0IGEvYnVpbHRpbi93b3JrdHJlZS5jIGIvYnVpbHRpbi93b3JrdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyODFmNmQKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3dvcmt0cmVlLmMKQEAgLTAsMCArMSw0NjMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgImJyYW5jaC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHdvcmt0cmVlX3VzYWdlW10gPSB7CisJTl8oImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IFs8YnJhbmNoPl0iKSwKKwlOXygiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIiksCisJTl8oImdpdCB3b3JrdHJlZSBsaXN0IFs8b3B0aW9ucz5dIiksCisJTlVMTAorfTsKKworc3RydWN0IGFkZF9vcHRzIHsKKwlpbnQgZm9yY2U7CisJaW50IGRldGFjaDsKKwljb25zdCBjaGFyICpuZXdfYnJhbmNoOworCWludCBmb3JjZV9uZXdfYnJhbmNoOworfTsKKworc3RhdGljIGludCBzaG93X29ubHk7CitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBleHBpcmU7CisKK3N0YXRpYyBpbnQgcHJ1bmVfd29ya3RyZWUoY29uc3QgY2hhciAqaWQsIHN0cnVjdCBzdHJidWYgKnJlYXNvbikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICpwYXRoOworCWludCBmZCwgbGVuOworCisJaWYgKCFpc19kaXJlY3RvcnkoZ2l0X3BhdGgoIndvcmt0cmVlcy8lcyIsIGlkKSkpIHsKKwkJc3RyYnVmX2FkZGYocmVhc29uLCBfKCJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIpLCBpZCk7CisJCXJldHVybiAxOworCX0KKwlpZiAoZmlsZV9leGlzdHMoZ2l0X3BhdGgoIndvcmt0cmVlcy8lcy9sb2NrZWQiLCBpZCkpKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RhdChnaXRfcGF0aCgid29ya3RyZWVzLyVzL2dpdGRpciIsIGlkKSwgJnN0KSkgeworCQlzdHJidWZfYWRkZihyZWFzb24sIF8oIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiKSwgaWQpOworCQlyZXR1cm4gMTsKKwl9CisJZmQgPSBvcGVuKGdpdF9wYXRoKCJ3b3JrdHJlZXMvJXMvZ2l0ZGlyIiwgaWQpLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlzdHJidWZfYWRkZihyZWFzb24sIF8oIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIpLAorCQkJICAgIGlkLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gMTsKKwl9CisJbGVuID0gc3Quc3Rfc2l6ZTsKKwlwYXRoID0geG1hbGxvYyhsZW4gKyAxKTsKKwlyZWFkX2luX2Z1bGwoZmQsIHBhdGgsIGxlbik7CisJY2xvc2UoZmQpOworCXdoaWxlIChsZW4gJiYgKHBhdGhbbGVuIC0gMV0gPT0gJ1xuJyB8fCBwYXRoW2xlbiAtIDFdID09ICdccicpKQorCQlsZW4tLTsKKwlpZiAoIWxlbikgeworCQlzdHJidWZfYWRkZihyZWFzb24sIF8oIlJlbW92aW5nIHdvcmt0cmVlcy8lczogaW52YWxpZCBnaXRkaXIgZmlsZSIpLCBpZCk7CisJCWZyZWUocGF0aCk7CisJCXJldHVybiAxOworCX0KKwlwYXRoW2xlbl0gPSAnXDAnOworCWlmICghZmlsZV9leGlzdHMocGF0aCkpIHsKKwkJc3RydWN0IHN0YXQgc3RfbGluazsKKwkJZnJlZShwYXRoKTsKKwkJLyoKKwkJICogdGhlIHJlcG8gaXMgbW92ZWQgbWFudWFsbHkgYW5kIGhhcyBub3QgYmVlbgorCQkgKiBhY2Nlc3NlZCBzaW5jZT8KKwkJICovCisJCWlmICghc3RhdChnaXRfcGF0aCgid29ya3RyZWVzLyVzL2xpbmsiLCBpZCksICZzdF9saW5rKSAmJgorCQkgICAgc3RfbGluay5zdF9ubGluayA+IDEpCisJCQlyZXR1cm4gMDsKKwkJaWYgKHN0LnN0X210aW1lIDw9IGV4cGlyZSkgeworCQkJc3RyYnVmX2FkZGYocmVhc29uLCBfKCJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iKSwgaWQpOworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlmcmVlKHBhdGgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcnVuZV93b3JrdHJlZXModm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlYXNvbiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCURJUiAqZGlyID0gb3BlbmRpcihnaXRfcGF0aCgid29ya3RyZWVzIikpOworCXN0cnVjdCBkaXJlbnQgKmQ7CisJaW50IHJldDsKKwlpZiAoIWRpcikKKwkJcmV0dXJuOworCXdoaWxlICgoZCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlpZiAoIXN0cmNtcChkLT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkLT5kX25hbWUsICIuLiIpKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9yZXNldCgmcmVhc29uKTsKKwkJaWYgKCFwcnVuZV93b3JrdHJlZShkLT5kX25hbWUsICZyZWFzb24pKQorCQkJY29udGludWU7CisJCWlmIChzaG93X29ubHkgfHwgdmVyYm9zZSkKKwkJCXByaW50ZigiJXNcbiIsIHJlYXNvbi5idWYpOworCQlpZiAoc2hvd19vbmx5KQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9yZXNldCgmcGF0aCk7CisJCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIGdpdF9wYXRoKCJ3b3JrdHJlZXMvJXMiLCBkLT5kX25hbWUpKTsKKwkJcmV0ID0gcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmcGF0aCwgMCk7CisJCWlmIChyZXQgPCAwICYmIGVycm5vID09IEVOT1RESVIpCisJCQlyZXQgPSB1bmxpbmsocGF0aC5idWYpOworCQlpZiAocmV0KQorCQkJZXJyb3IoXygiZmFpbGVkIHRvIHJlbW92ZTogJXMiKSwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlpZiAoIXNob3dfb25seSkKKwkJcm1kaXIoZ2l0X3BhdGgoIndvcmt0cmVlcyIpKTsKKwlzdHJidWZfcmVsZWFzZSgmcmVhc29uKTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgcHJ1bmUoaW50IGFjLCBjb25zdCBjaGFyICoqYXYsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKwkJT1BUX19EUllfUlVOKCZzaG93X29ubHksIE5fKCJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiKSksCisJCU9QVF9fVkVSQk9TRSgmdmVyYm9zZSwgTl8oInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIpKSwKKwkJT1BUX0VYUElSWV9EQVRFKDAsICJleHBpcmUiLCAmZXhwaXJlLAorCQkJCU5fKCJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWV4cGlyZSA9IFVMT05HX01BWDsKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIG9wdGlvbnMsIHdvcmt0cmVlX3VzYWdlLCAwKTsKKwlpZiAoYWMpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh3b3JrdHJlZV91c2FnZSwgb3B0aW9ucyk7CisJcHJ1bmVfd29ya3RyZWVzKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpqdW5rX3dvcmtfdHJlZTsKK3N0YXRpYyBjaGFyICpqdW5rX2dpdF9kaXI7CitzdGF0aWMgaW50IGlzX2p1bms7CitzdGF0aWMgcGlkX3QganVua19waWQ7CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9qdW5rKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWlmICghaXNfanVuayB8fCBnZXRwaWQoKSAhPSBqdW5rX3BpZCkKKwkJcmV0dXJuOworCWlmIChqdW5rX2dpdF9kaXIpIHsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIGp1bmtfZ2l0X2Rpcik7CisJCXJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoJnNiLCAwKTsKKwkJc3RyYnVmX3Jlc2V0KCZzYik7CisJfQorCWlmIChqdW5rX3dvcmtfdHJlZSkgeworCQlzdHJidWZfYWRkc3RyKCZzYiwganVua193b3JrX3RyZWUpOworCQlyZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZzYiwgMCk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9qdW5rX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJcmVtb3ZlX2p1bmsoKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKndvcmt0cmVlX2Jhc2VuYW1lKGNvbnN0IGNoYXIgKnBhdGgsIGludCAqb2xlbikKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWludCBsZW47CisKKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJd2hpbGUgKGxlbiAmJiBpc19kaXJfc2VwKHBhdGhbbGVuIC0gMV0pKQorCQlsZW4tLTsKKworCWZvciAobmFtZSA9IHBhdGggKyBsZW4gLSAxOyBuYW1lID4gcGF0aDsgbmFtZS0tKQorCQlpZiAoaXNfZGlyX3NlcCgqbmFtZSkpIHsKKwkJCW5hbWUrKzsKKwkJCWJyZWFrOworCQl9CisKKwkqb2xlbiA9IGxlbjsKKwlyZXR1cm4gbmFtZTsKK30KKworc3RhdGljIGludCBhZGRfd29ya3RyZWUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCWNvbnN0IHN0cnVjdCBhZGRfb3B0cyAqb3B0cykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiX2dpdCA9IFNUUkJVRl9JTklULCBzYl9yZXBvID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY3A7CisJc3RydWN0IGFyZ3ZfYXJyYXkgY2hpbGRfZW52ID0gQVJHVl9BUlJBWV9JTklUOworCWludCBjb3VudGVyID0gMCwgbGVuLCByZXQ7CisJc3RydWN0IHN0cmJ1ZiBzeW1yZWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBOVUxMOworCisJaWYgKGZpbGVfZXhpc3RzKHBhdGgpICYmICFpc19lbXB0eV9kaXIocGF0aCkpCisJCWRpZShfKCInJXMnIGFscmVhZHkgZXhpc3RzIiksIHBhdGgpOworCisJLyogaXMgJ3JlZm5hbWUnIGEgYnJhbmNoIG9yIGNvbW1pdD8gKi8KKwlpZiAob3B0cy0+Zm9yY2VfbmV3X2JyYW5jaCkgLyogZGVmaW5pdGVseSBhIGJyYW5jaCAqLworCQk7CisJZWxzZSBpZiAoIW9wdHMtPmRldGFjaCAmJiAhc3RyYnVmX2NoZWNrX2JyYW5jaF9yZWYoJnN5bXJlZiwgcmVmbmFtZSkgJiYKKwkJIHJlZl9leGlzdHMoc3ltcmVmLmJ1ZikpIHsgLyogaXQncyBhIGJyYW5jaCAqLworCQlpZiAoIW9wdHMtPmZvcmNlKQorCQkJZGllX2lmX2NoZWNrZWRfb3V0KHN5bXJlZi5idWYpOworCX0gZWxzZSB7IC8qIG11c3QgYmUgYSBjb21taXQgKi8KKwkJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShyZWZuYW1lKTsKKwkJaWYgKCFjb21taXQpCisJCQlkaWUoXygiaW52YWxpZCByZWZlcmVuY2U6ICVzIiksIHJlZm5hbWUpOworCX0KKworCW5hbWUgPSB3b3JrdHJlZV9iYXNlbmFtZShwYXRoLCAmbGVuKTsKKwlzdHJidWZfYWRkc3RyKCZzYl9yZXBvLAorCQkgICAgICBnaXRfcGF0aCgid29ya3RyZWVzLyUuKnMiLCAoaW50KShwYXRoICsgbGVuIC0gbmFtZSksIG5hbWUpKTsKKwlsZW4gPSBzYl9yZXBvLmxlbjsKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChzYl9yZXBvLmJ1ZikpCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIpLAorCQkJICBzYl9yZXBvLmJ1Zik7CisJd2hpbGUgKCFzdGF0KHNiX3JlcG8uYnVmLCAmc3QpKSB7CisJCWNvdW50ZXIrKzsKKwkJc3RyYnVmX3NldGxlbigmc2JfcmVwbywgbGVuKTsKKwkJc3RyYnVmX2FkZGYoJnNiX3JlcG8sICIlZCIsIGNvdW50ZXIpOworCX0KKwluYW1lID0gc3RycmNocihzYl9yZXBvLmJ1ZiwgJy8nKSArIDE7CisKKwlqdW5rX3BpZCA9IGdldHBpZCgpOworCWF0ZXhpdChyZW1vdmVfanVuayk7CisJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVtb3ZlX2p1bmtfb25fc2lnbmFsKTsKKworCWlmIChta2RpcihzYl9yZXBvLmJ1ZiwgMDc3NykpCisJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIiksIHNiX3JlcG8uYnVmKTsKKwlqdW5rX2dpdF9kaXIgPSB4c3RyZHVwKHNiX3JlcG8uYnVmKTsKKwlpc19qdW5rID0gMTsKKworCS8qCisJICogbG9jayB0aGUgaW5jb21wbGV0ZSByZXBvIHNvIHBydW5lIHdvbid0IGRlbGV0ZSBpdCwgdW5sb2NrCisJICogYWZ0ZXIgdGhlIHByZXBhcmF0aW9uIGlzIG92ZXIuCisJICovCisJc3RyYnVmX2FkZGYoJnNiLCAiJXMvbG9ja2VkIiwgc2JfcmVwby5idWYpOworCXdyaXRlX2ZpbGUoc2IuYnVmLCAiaW5pdGlhbGl6aW5nIik7CisKKwlzdHJidWZfYWRkZigmc2JfZ2l0LCAiJXMvLmdpdCIsIHBhdGgpOworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHNiX2dpdC5idWYpKQorCQlkaWVfZXJybm8oXygiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciKSwKKwkJCSAgc2JfZ2l0LmJ1Zik7CisJanVua193b3JrX3RyZWUgPSB4c3RyZHVwKHBhdGgpOworCisJc3RyYnVmX3Jlc2V0KCZzYik7CisJc3RyYnVmX2FkZGYoJnNiLCAiJXMvZ2l0ZGlyIiwgc2JfcmVwby5idWYpOworCXdyaXRlX2ZpbGUoc2IuYnVmLCAiJXMiLCByZWFsX3BhdGgoc2JfZ2l0LmJ1ZikpOworCXdyaXRlX2ZpbGUoc2JfZ2l0LmJ1ZiwgImdpdGRpcjogJXMvd29ya3RyZWVzLyVzIiwKKwkJICAgcmVhbF9wYXRoKGdldF9naXRfY29tbW9uX2RpcigpKSwgbmFtZSk7CisJLyoKKwkgKiBUaGlzIGlzIHRvIGtlZXAgcmVzb2x2ZV9yZWYoKSBoYXBweS4gV2UgbmVlZCBhIHZhbGlkIEhFQUQKKwkgKiBvciBpc19naXRfZGlyZWN0b3J5KCkgd2lsbCByZWplY3QgdGhlIGRpcmVjdG9yeS4gQW55IHZhbHVlIHdoaWNoCisJICogbG9va3MgbGlrZSBhbiBvYmplY3QgSUQgd2lsbCBkbyBzaW5jZSBpdCB3aWxsIGJlIGltbWVkaWF0ZWx5CisJICogcmVwbGFjZWQgYnkgdGhlIHN5bWJvbGljLXJlZiBvciB1cGRhdGUtcmVmIGludm9jYXRpb24gaW4gdGhlIG5ldworCSAqIHdvcmt0cmVlLgorCSAqLworCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzL0hFQUQiLCBzYl9yZXBvLmJ1Zik7CisJd3JpdGVfZmlsZShzYi5idWYsICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIik7CisJc3RyYnVmX3Jlc2V0KCZzYik7CisJc3RyYnVmX2FkZGYoJnNiLCAiJXMvY29tbW9uZGlyIiwgc2JfcmVwby5idWYpOworCXdyaXRlX2ZpbGUoc2IuYnVmLCAiLi4vLi4iKTsKKworCWZwcmludGZfbG4oc3RkZXJyLCBfKCJQcmVwYXJpbmcgJXMgKGlkZW50aWZpZXIgJXMpIiksIHBhdGgsIG5hbWUpOworCisJYXJndl9hcnJheV9wdXNoZigmY2hpbGRfZW52LCAiJXM9JXMiLCBHSVRfRElSX0VOVklST05NRU5ULCBzYl9naXQuYnVmKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZjaGlsZF9lbnYsICIlcz0lcyIsIEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsIHBhdGgpOworCW1lbXNldCgmY3AsIDAsIHNpemVvZihjcCkpOworCWNwLmdpdF9jbWQgPSAxOworCisJaWYgKGNvbW1pdCkKKwkJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInVwZGF0ZS1yZWYiLCAiSEVBRCIsCisJCQkJIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpLCBOVUxMKTsKKwllbHNlCisJCWFyZ3ZfYXJyYXlfcHVzaGwoJmNwLmFyZ3MsICJzeW1ib2xpYy1yZWYiLCAiSEVBRCIsCisJCQkJIHN5bXJlZi5idWYsIE5VTEwpOworCWNwLmVudiA9IGNoaWxkX2Vudi5hcmd2OworCXJldCA9IHJ1bl9jb21tYW5kKCZjcCk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCisJY3AuYXJndiA9IE5VTEw7CisJYXJndl9hcnJheV9jbGVhcigmY3AuYXJncyk7CisJYXJndl9hcnJheV9wdXNobCgmY3AuYXJncywgInJlc2V0IiwgIi0taGFyZCIsIE5VTEwpOworCWNwLmVudiA9IGNoaWxkX2Vudi5hcmd2OworCXJldCA9IHJ1bl9jb21tYW5kKCZjcCk7CisJaWYgKCFyZXQpIHsKKwkJaXNfanVuayA9IDA7CisJCWZyZWUoanVua193b3JrX3RyZWUpOworCQlmcmVlKGp1bmtfZ2l0X2Rpcik7CisJCWp1bmtfd29ya190cmVlID0gTlVMTDsKKwkJanVua19naXRfZGlyID0gTlVMTDsKKwl9Citkb25lOgorCXN0cmJ1Zl9yZXNldCgmc2IpOworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzL2xvY2tlZCIsIHNiX3JlcG8uYnVmKTsKKwl1bmxpbmtfb3Jfd2FybihzYi5idWYpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmNoaWxkX2Vudik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlzdHJidWZfcmVsZWFzZSgmc3ltcmVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2JfcmVwbyk7CisJc3RyYnVmX3JlbGVhc2UoJnNiX2dpdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZGQoaW50IGFjLCBjb25zdCBjaGFyICoqYXYsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdHJ1Y3QgYWRkX29wdHMgb3B0czsKKwljb25zdCBjaGFyICpuZXdfYnJhbmNoX2ZvcmNlID0gTlVMTDsKKwljb25zdCBjaGFyICpwYXRoLCAqYnJhbmNoOworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfX0ZPUkNFKCZvcHRzLmZvcmNlLCBOXygiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIikpLAorCQlPUFRfU1RSSU5HKCdiJywgTlVMTCwgJm9wdHMubmV3X2JyYW5jaCwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBhIG5ldyBicmFuY2giKSksCisJCU9QVF9TVFJJTkcoJ0InLCBOVUxMLCAmbmV3X2JyYW5jaF9mb3JjZSwgTl8oImJyYW5jaCIpLAorCQkJICAgTl8oImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIpKSwKKwkJT1BUX0JPT0woMCwgImRldGFjaCIsICZvcHRzLmRldGFjaCwgTl8oImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCW1lbXNldCgmb3B0cywgMCwgc2l6ZW9mKG9wdHMpKTsKKwlhYyA9IHBhcnNlX29wdGlvbnMoYWMsIGF2LCBwcmVmaXgsIG9wdGlvbnMsIHdvcmt0cmVlX3VzYWdlLCAwKTsKKwlpZiAoISFvcHRzLmRldGFjaCArICEhb3B0cy5uZXdfYnJhbmNoICsgISFuZXdfYnJhbmNoX2ZvcmNlID4gMSkKKwkJZGllKF8oIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSk7CisJaWYgKGFjIDwgMSB8fCBhYyA+IDIpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyh3b3JrdHJlZV91c2FnZSwgb3B0aW9ucyk7CisKKwlwYXRoID0gcHJlZml4ID8gcHJlZml4X2ZpbGVuYW1lKHByZWZpeCwgc3RybGVuKHByZWZpeCksIGF2WzBdKSA6IGF2WzBdOworCWJyYW5jaCA9IGFjIDwgMiA/ICJIRUFEIiA6IGF2WzFdOworCisJb3B0cy5mb3JjZV9uZXdfYnJhbmNoID0gISFuZXdfYnJhbmNoX2ZvcmNlOworCWlmIChvcHRzLmZvcmNlX25ld19icmFuY2gpCisJCW9wdHMubmV3X2JyYW5jaCA9IG5ld19icmFuY2hfZm9yY2U7CisKKwlpZiAoYWMgPCAyICYmICFvcHRzLm5ld19icmFuY2ggJiYgIW9wdHMuZGV0YWNoKSB7CisJCWludCBuOworCQljb25zdCBjaGFyICpzID0gd29ya3RyZWVfYmFzZW5hbWUocGF0aCwgJm4pOworCQlvcHRzLm5ld19icmFuY2ggPSB4c3RybmR1cChzLCBuKTsKKwl9CisKKwlpZiAob3B0cy5uZXdfYnJhbmNoKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwOworCQltZW1zZXQoJmNwLCAwLCBzaXplb2YoY3ApKTsKKwkJY3AuZ2l0X2NtZCA9IDE7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgImJyYW5jaCIpOworCQlpZiAob3B0cy5mb3JjZV9uZXdfYnJhbmNoKQorCQkJYXJndl9hcnJheV9wdXNoKCZjcC5hcmdzLCAiLS1mb3JjZSIpOworCQlhcmd2X2FycmF5X3B1c2goJmNwLmFyZ3MsIG9wdHMubmV3X2JyYW5jaCk7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY3AuYXJncywgYnJhbmNoKTsKKwkJaWYgKHJ1bl9jb21tYW5kKCZjcCkpCisJCQlyZXR1cm4gLTE7CisJCWJyYW5jaCA9IG9wdHMubmV3X2JyYW5jaDsKKwl9CisKKwlyZXR1cm4gYWRkX3dvcmt0cmVlKHBhdGgsIGJyYW5jaCwgJm9wdHMpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3dvcmt0cmVlX3BvcmNlbGFpbihzdHJ1Y3Qgd29ya3RyZWUgKnd0KQoreworCXByaW50Zigid29ya3RyZWUgJXNcbiIsIHd0LT5wYXRoKTsKKwlpZiAod3QtPmlzX2JhcmUpCisJCXByaW50ZigiYmFyZVxuIik7CisJZWxzZSB7CisJCXByaW50ZigiSEVBRCAlc1xuIiwgc2hhMV90b19oZXgod3QtPmhlYWRfc2hhMSkpOworCQlpZiAod3QtPmlzX2RldGFjaGVkKQorCQkJcHJpbnRmKCJkZXRhY2hlZFxuIik7CisJCWVsc2UKKwkJCXByaW50ZigiYnJhbmNoICVzXG4iLCB3dC0+aGVhZF9yZWYpOworCX0KKwlwcmludGYoIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfd29ya3RyZWUoc3RydWN0IHdvcmt0cmVlICp3dCwgaW50IHBhdGhfbWF4bGVuLCBpbnQgYWJicmV2X2xlbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IGN1cl9wYXRoX2xlbiA9IHN0cmxlbih3dC0+cGF0aCk7CisJaW50IHBhdGhfYWRqID0gY3VyX3BhdGhfbGVuIC0gdXRmOF9zdHJ3aWR0aCh3dC0+cGF0aCk7CisKKwlzdHJidWZfYWRkZigmc2IsICIlLSpzICIsIDEgKyBwYXRoX21heGxlbiArIHBhdGhfYWRqLCB3dC0+cGF0aCk7CisJaWYgKHd0LT5pc19iYXJlKQorCQlzdHJidWZfYWRkc3RyKCZzYiwgIihiYXJlKSIpOworCWVsc2UgeworCQlzdHJidWZfYWRkZigmc2IsICIlLSpzICIsIGFiYnJldl9sZW4sCisJCQkJZmluZF91bmlxdWVfYWJicmV2KHd0LT5oZWFkX3NoYTEsIERFRkFVTFRfQUJCUkVWKSk7CisJCWlmICghd3QtPmlzX2RldGFjaGVkKQorCQkJc3RyYnVmX2FkZGYoJnNiLCAiWyVzXSIsIHNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKHd0LT5oZWFkX3JlZiwgMCkpOworCQllbHNlCisJCQlzdHJidWZfYWRkc3RyKCZzYiwgIihkZXRhY2hlZCBIRUFEKSIpOworCX0KKwlwcmludGYoIiVzXG4iLCBzYi5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIHZvaWQgbWVhc3VyZV93aWR0aHMoc3RydWN0IHdvcmt0cmVlICoqd3QsIGludCAqYWJicmV2LCBpbnQgKm1heGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHd0W2ldOyBpKyspIHsKKwkJaW50IHNoYTFfbGVuOworCQlpbnQgcGF0aF9sZW4gPSBzdHJsZW4od3RbaV0tPnBhdGgpOworCisJCWlmIChwYXRoX2xlbiA+ICptYXhsZW4pCisJCQkqbWF4bGVuID0gcGF0aF9sZW47CisJCXNoYTFfbGVuID0gc3RybGVuKGZpbmRfdW5pcXVlX2FiYnJldih3dFtpXS0+aGVhZF9zaGExLCAqYWJicmV2KSk7CisJCWlmIChzaGExX2xlbiA+ICphYmJyZXYpCisJCQkqYWJicmV2ID0gc2hhMV9sZW47CisJfQorfQorCitzdGF0aWMgaW50IGxpc3QoaW50IGFjLCBjb25zdCBjaGFyICoqYXYsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgcG9yY2VsYWluID0gMDsKKworCXN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0geworCQlPUFRfQk9PTCgwLCAicG9yY2VsYWluIiwgJnBvcmNlbGFpbiwgTl8oIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IikpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYWMgPSBwYXJzZV9vcHRpb25zKGFjLCBhdiwgcHJlZml4LCBvcHRpb25zLCB3b3JrdHJlZV91c2FnZSwgMCk7CisJaWYgKGFjKQorCQl1c2FnZV93aXRoX29wdGlvbnMod29ya3RyZWVfdXNhZ2UsIG9wdGlvbnMpOworCWVsc2UgeworCQlzdHJ1Y3Qgd29ya3RyZWUgKip3b3JrdHJlZXMgPSBnZXRfd29ya3RyZWVzKCk7CisJCWludCBwYXRoX21heGxlbiA9IDAsIGFiYnJldiA9IERFRkFVTFRfQUJCUkVWLCBpOworCisJCWlmICghcG9yY2VsYWluKQorCQkJbWVhc3VyZV93aWR0aHMod29ya3RyZWVzLCAmYWJicmV2LCAmcGF0aF9tYXhsZW4pOworCisJCWZvciAoaSA9IDA7IHdvcmt0cmVlc1tpXTsgaSsrKSB7CisJCQlpZiAocG9yY2VsYWluKQorCQkJCXNob3dfd29ya3RyZWVfcG9yY2VsYWluKHdvcmt0cmVlc1tpXSk7CisJCQllbHNlCisJCQkJc2hvd193b3JrdHJlZSh3b3JrdHJlZXNbaV0sIHBhdGhfbWF4bGVuLCBhYmJyZXYpOworCQl9CisJCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgY21kX3dvcmt0cmVlKGludCBhYywgY29uc3QgY2hhciAqKmF2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9FTkQoKQorCX07CisKKwlpZiAoYWMgPCAyKQorCQl1c2FnZV93aXRoX29wdGlvbnMod29ya3RyZWVfdXNhZ2UsIG9wdGlvbnMpOworCWlmICghc3RyY21wKGF2WzFdLCAiYWRkIikpCisJCXJldHVybiBhZGQoYWMgLSAxLCBhdiArIDEsIHByZWZpeCk7CisJaWYgKCFzdHJjbXAoYXZbMV0sICJwcnVuZSIpKQorCQlyZXR1cm4gcHJ1bmUoYWMgLSAxLCBhdiArIDEsIHByZWZpeCk7CisJaWYgKCFzdHJjbXAoYXZbMV0sICJsaXN0IikpCisJCXJldHVybiBsaXN0KGFjIC0gMSwgYXYgKyAxLCBwcmVmaXgpOworCXVzYWdlX3dpdGhfb3B0aW9ucyh3b3JrdHJlZV91c2FnZSwgb3B0aW9ucyk7Cit9CmRpZmYgLS1naXQgYS9idWlsdGluL3dyaXRlLXRyZWUuYyBiL2J1aWx0aW4vd3JpdGUtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NGMwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9idWlsdGluL3dyaXRlLXRyZWUuYwpAQCAtMCwwICsxLDU2IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgd3JpdGVfdHJlZV91c2FnZVtdID0geworCU5fKCJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIpLAorCU5VTEwKK307CisKK2ludCBjbWRfd3JpdGVfdHJlZShpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnVudXNlZF9wcmVmaXgpCit7CisJaW50IGZsYWdzID0gMCwgcmV0OworCWNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljb25zdCBjaGFyICptZSA9ICJnaXQtd3JpdGUtdHJlZSI7CisJc3RydWN0IG9wdGlvbiB3cml0ZV90cmVlX29wdGlvbnNbXSA9IHsKKwkJT1BUX0JJVCgwLCAibWlzc2luZy1vayIsICZmbGFncywgTl8oImFsbG93IG1pc3Npbmcgb2JqZWN0cyIpLAorCQkJV1JJVEVfVFJFRV9NSVNTSU5HX09LKSwKKwkJeyBPUFRJT05fU1RSSU5HLCAwLCAicHJlZml4IiwgJnByZWZpeCwgTl8oIjxwcmVmaXg+LyIpLAorCQkgIE5fKCJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iKSAsCisJCSAgUEFSU0VfT1BUX0xJVEVSQUxfQVJHSEVMUCB9LAorCQl7IE9QVElPTl9CSVQsIDAsICJpZ25vcmUtY2FjaGUtdHJlZSIsICZmbGFncywgTlVMTCwKKwkJICBOXygib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIpLAorCQkgIFBBUlNFX09QVF9ISURERU4gfCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsCisJCSAgV1JJVEVfVFJFRV9JR05PUkVfQ0FDSEVfVFJFRSB9LAorCQlPUFRfRU5EKCkKKwl9OworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIHVudXNlZF9wcmVmaXgsIHdyaXRlX3RyZWVfb3B0aW9ucywKKwkJCSAgICAgd3JpdGVfdHJlZV91c2FnZSwgMCk7CisKKwlyZXQgPSB3cml0ZV9jYWNoZV9hc190cmVlKHNoYTEsIGZsYWdzLCBwcmVmaXgpOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOgorCQlwcmludGYoIiVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CisJCWJyZWFrOworCWNhc2UgV1JJVEVfVFJFRV9VTlJFQURBQkxFX0lOREVYOgorCQlkaWUoIiVzOiBlcnJvciByZWFkaW5nIHRoZSBpbmRleCIsIG1lKTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV9UUkVFX1VOTUVSR0VEX0lOREVYOgorCQlkaWUoIiVzOiBlcnJvciBidWlsZGluZyB0cmVlcyIsIG1lKTsKKwkJYnJlYWs7CisJY2FzZSBXUklURV9UUkVFX1BSRUZJWF9FUlJPUjoKKwkJZGllKCIlczogcHJlZml4ICVzIG5vdCBmb3VuZCIsIG1lLCBwcmVmaXgpOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2J1bGstY2hlY2tpbi5jIGIvYnVsay1jaGVja2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0N2Y1YwotLS0gL2Rldi9udWxsCisrKyBiL2J1bGstY2hlY2tpbi5jCkBAIC0wLDAgKzEsMjc3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJidWxrLWNoZWNraW4uaCIKKyNpbmNsdWRlICJjc3VtLWZpbGUuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK3N0YXRpYyBpbnQgcGFja19jb21wcmVzc2lvbl9sZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKworc3RhdGljIHN0cnVjdCBidWxrX2NoZWNraW5fc3RhdGUgeworCXVuc2lnbmVkIHBsdWdnZWQ6MTsKKworCWNoYXIgKnBhY2tfdG1wX25hbWU7CisJc3RydWN0IHNoYTFmaWxlICpmOworCW9mZl90IG9mZnNldDsKKwlzdHJ1Y3QgcGFja19pZHhfb3B0aW9uIHBhY2tfaWR4X29wdHM7CisKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKip3cml0dGVuOworCXVpbnQzMl90IGFsbG9jX3dyaXR0ZW47CisJdWludDMyX3QgbnJfd3JpdHRlbjsKK30gc3RhdGU7CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9idWxrX2NoZWNraW4oc3RydWN0IGJ1bGtfY2hlY2tpbl9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IHN0cmJ1ZiBwYWNrbmFtZSA9IFNUUkJVRl9JTklUOworCWludCBpOworCisJaWYgKCFzdGF0ZS0+ZikKKwkJcmV0dXJuOworCisJaWYgKHN0YXRlLT5ucl93cml0dGVuID09IDApIHsKKwkJY2xvc2Uoc3RhdGUtPmYtPmZkKTsKKwkJdW5saW5rKHN0YXRlLT5wYWNrX3RtcF9uYW1lKTsKKwkJZ290byBjbGVhcl9leGl0OworCX0gZWxzZSBpZiAoc3RhdGUtPm5yX3dyaXR0ZW4gPT0gMSkgeworCQlzaGExY2xvc2Uoc3RhdGUtPmYsIG9pZC5oYXNoLCBDU1VNX0ZTWU5DKTsKKwl9IGVsc2UgeworCQlpbnQgZmQgPSBzaGExY2xvc2Uoc3RhdGUtPmYsIG9pZC5oYXNoLCAwKTsKKwkJZml4dXBfcGFja19oZWFkZXJfZm9vdGVyKGZkLCBvaWQuaGFzaCwgc3RhdGUtPnBhY2tfdG1wX25hbWUsCisJCQkJCSBzdGF0ZS0+bnJfd3JpdHRlbiwgb2lkLmhhc2gsCisJCQkJCSBzdGF0ZS0+b2Zmc2V0KTsKKwkJY2xvc2UoZmQpOworCX0KKworCXN0cmJ1Zl9hZGRmKCZwYWNrbmFtZSwgIiVzL3BhY2svcGFjay0iLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwlmaW5pc2hfdG1wX3BhY2tmaWxlKCZwYWNrbmFtZSwgc3RhdGUtPnBhY2tfdG1wX25hbWUsCisJCQkgICAgc3RhdGUtPndyaXR0ZW4sIHN0YXRlLT5ucl93cml0dGVuLAorCQkJICAgICZzdGF0ZS0+cGFja19pZHhfb3B0cywgb2lkLmhhc2gpOworCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnJfd3JpdHRlbjsgaSsrKQorCQlmcmVlKHN0YXRlLT53cml0dGVuW2ldKTsKKworY2xlYXJfZXhpdDoKKwlmcmVlKHN0YXRlLT53cml0dGVuKTsKKwltZW1zZXQoc3RhdGUsIDAsIHNpemVvZigqc3RhdGUpKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwYWNrbmFtZSk7CisJLyogTWFrZSBvYmplY3RzIHdlIGp1c3Qgd3JvdGUgYXZhaWxhYmxlIHRvIG91cnNlbHZlcyAqLworCXJlcHJlcGFyZV9wYWNrZWRfZ2l0KCk7Cit9CisKK3N0YXRpYyBpbnQgYWxyZWFkeV93cml0dGVuKHN0cnVjdCBidWxrX2NoZWNraW5fc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBjaGFyIHNoYTFbXSkKK3sKKwlpbnQgaTsKKworCS8qIFRoZSBvYmplY3QgbWF5IGFscmVhZHkgZXhpc3QgaW4gdGhlIHJlcG9zaXRvcnkgKi8KKwlpZiAoaGFzX3NoYTFfZmlsZShzaGExKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBNaWdodCB3YW50IHRvIGtlZXAgdGhlIGxpc3Qgc29ydGVkICovCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5ucl93cml0dGVuOyBpKyspCisJCWlmICghaGFzaGNtcChzdGF0ZS0+d3JpdHRlbltpXS0+c2hhMSwgc2hhMSkpCisJCQlyZXR1cm4gMTsKKworCS8qIFRoaXMgaXMgYSBuZXcgb2JqZWN0IHdlIG5lZWQgdG8ga2VlcCAqLworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCB0aGUgY29udGVudHMgZnJvbSBmZCBmb3Igc2l6ZSBieXRlcywgc3RyZWFtaW5nIGl0IHRvIHRoZQorICogcGFja2ZpbGUgaW4gc3RhdGUgd2hpbGUgdXBkYXRpbmcgdGhlIGhhc2ggaW4gY3R4LiBTaWduYWwgYSBmYWlsdXJlCisgKiBieSByZXR1cm5pbmcgYSBuZWdhdGl2ZSB2YWx1ZSB3aGVuIHRoZSByZXN1bHRpbmcgcGFjayB3b3VsZCBleGNlZWQKKyAqIHRoZSBwYWNrIHNpemUgbGltaXQgYW5kIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBvYmplY3QgaW4gdGhlIHBhY2ssCisgKiBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIGRpc2NhcmQgd2hhdCB3ZSB3cm90ZSBmcm9tIHRoZSBjdXJyZW50IHBhY2sKKyAqIGJ5IHRydW5jYXRpbmcgaXQgYW5kIG9wZW5pbmcgYSBuZXcgb25lLiBUaGUgY2FsbGVyIHdpbGwgdGhlbiBjYWxsCisgKiB1cyBhZ2FpbiBhZnRlciByZXdpbmRpbmcgdGhlIGlucHV0IGZkLgorICoKKyAqIFRoZSBhbHJlYWR5X2hhc2hlZF90byBwb2ludGVyIGlzIGtlcHQgdW50b3VjaGVkIGJ5IHRoZSBjYWxsZXIgdG8KKyAqIG1ha2Ugc3VyZSB3ZSBkbyBub3QgaGFzaCB0aGUgc2FtZSBieXRlIHdoZW4gd2UgYXJlIGNhbGxlZAorICogYWdhaW4uIFRoaXMgd2F5LCB0aGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgdG8gY2hlY2twb2ludCBpdHMgaGFzaAorICogc3RhdHVzIGJlZm9yZSBjYWxsaW5nIHVzIGp1c3QgaW4gY2FzZSB3ZSBhc2sgaXQgdG8gY2FsbCB1cyBhZ2FpbgorICogd2l0aCBhIG5ldyBwYWNrLgorICovCitzdGF0aWMgaW50IHN0cmVhbV90b19wYWNrKHN0cnVjdCBidWxrX2NoZWNraW5fc3RhdGUgKnN0YXRlLAorCQkJICBnaXRfU0hBX0NUWCAqY3R4LCBvZmZfdCAqYWxyZWFkeV9oYXNoZWRfdG8sCisJCQkgIGludCBmZCwgc2l6ZV90IHNpemUsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJCSAgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpCit7CisJZ2l0X3pzdHJlYW0gczsKKwl1bnNpZ25lZCBjaGFyIG9idWZbMTYzODRdOworCXVuc2lnbmVkIGhkcmxlbjsKKwlpbnQgc3RhdHVzID0gWl9PSzsKKwlpbnQgd3JpdGVfb2JqZWN0ID0gKGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1QpOworCW9mZl90IG9mZnNldCA9IDA7CisKKwlnaXRfZGVmbGF0ZV9pbml0KCZzLCBwYWNrX2NvbXByZXNzaW9uX2xldmVsKTsKKworCWhkcmxlbiA9IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIodHlwZSwgc2l6ZSwgb2J1Zik7CisJcy5uZXh0X291dCA9IG9idWYgKyBoZHJsZW47CisJcy5hdmFpbF9vdXQgPSBzaXplb2Yob2J1ZikgLSBoZHJsZW47CisKKwl3aGlsZSAoc3RhdHVzICE9IFpfU1RSRUFNX0VORCkgeworCQl1bnNpZ25lZCBjaGFyIGlidWZbMTYzODRdOworCisJCWlmIChzaXplICYmICFzLmF2YWlsX2luKSB7CisJCQlzc2l6ZV90IHJzaXplID0gc2l6ZSA8IHNpemVvZihpYnVmKSA/IHNpemUgOiBzaXplb2YoaWJ1Zik7CisJCQlpZiAocmVhZF9pbl9mdWxsKGZkLCBpYnVmLCByc2l6ZSkgIT0gcnNpemUpCisJCQkJZGllKCJmYWlsZWQgdG8gcmVhZCAlZCBieXRlcyBmcm9tICclcyciLAorCQkJCSAgICAoaW50KXJzaXplLCBwYXRoKTsKKwkJCW9mZnNldCArPSByc2l6ZTsKKwkJCWlmICgqYWxyZWFkeV9oYXNoZWRfdG8gPCBvZmZzZXQpIHsKKwkJCQlzaXplX3QgaHNpemUgPSBvZmZzZXQgLSAqYWxyZWFkeV9oYXNoZWRfdG87CisJCQkJaWYgKHJzaXplIDwgaHNpemUpCisJCQkJCWhzaXplID0gcnNpemU7CisJCQkJaWYgKGhzaXplKQorCQkJCQlnaXRfU0hBMV9VcGRhdGUoY3R4LCBpYnVmLCBoc2l6ZSk7CisJCQkJKmFscmVhZHlfaGFzaGVkX3RvID0gb2Zmc2V0OworCQkJfQorCQkJcy5uZXh0X2luID0gaWJ1ZjsKKwkJCXMuYXZhaWxfaW4gPSByc2l6ZTsKKwkJCXNpemUgLT0gcnNpemU7CisJCX0KKworCQlzdGF0dXMgPSBnaXRfZGVmbGF0ZSgmcywgc2l6ZSA/IDAgOiBaX0ZJTklTSCk7CisKKwkJaWYgKCFzLmF2YWlsX291dCB8fCBzdGF0dXMgPT0gWl9TVFJFQU1fRU5EKSB7CisJCQlpZiAod3JpdGVfb2JqZWN0KSB7CisJCQkJc2l6ZV90IHdyaXR0ZW4gPSBzLm5leHRfb3V0IC0gb2J1ZjsKKworCQkJCS8qIHdvdWxkIHdlIGJ1c3QgdGhlIHNpemUgbGltaXQ/ICovCisJCQkJaWYgKHN0YXRlLT5ucl93cml0dGVuICYmCisJCQkJICAgIHBhY2tfc2l6ZV9saW1pdF9jZmcgJiYKKwkJCQkgICAgcGFja19zaXplX2xpbWl0X2NmZyA8IHN0YXRlLT5vZmZzZXQgKyB3cml0dGVuKSB7CisJCQkJCWdpdF9kZWZsYXRlX2Fib3J0KCZzKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKworCQkJCXNoYTF3cml0ZShzdGF0ZS0+Ziwgb2J1Ziwgd3JpdHRlbik7CisJCQkJc3RhdGUtPm9mZnNldCArPSB3cml0dGVuOworCQkJfQorCQkJcy5uZXh0X291dCA9IG9idWY7CisJCQlzLmF2YWlsX291dCA9IHNpemVvZihvYnVmKTsKKwkJfQorCisJCXN3aXRjaCAoc3RhdHVzKSB7CisJCWNhc2UgWl9PSzoKKwkJY2FzZSBaX0JVRl9FUlJPUjoKKwkJY2FzZSBaX1NUUkVBTV9FTkQ6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCWRpZSgidW5leHBlY3RlZCBkZWZsYXRlIGZhaWx1cmU6ICVkIiwgc3RhdHVzKTsKKwkJfQorCX0KKwlnaXRfZGVmbGF0ZV9lbmQoJnMpOworCXJldHVybiAwOworfQorCisvKiBMYXppbHkgY3JlYXRlIGJhY2tpbmcgcGFja2ZpbGUgZm9yIHRoZSBzdGF0ZSAqLworc3RhdGljIHZvaWQgcHJlcGFyZV90b19zdHJlYW0oc3RydWN0IGJ1bGtfY2hlY2tpbl9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpZiAoIShmbGFncyAmIEhBU0hfV1JJVEVfT0JKRUNUKSB8fCBzdGF0ZS0+ZikKKwkJcmV0dXJuOworCisJc3RhdGUtPmYgPSBjcmVhdGVfdG1wX3BhY2tmaWxlKCZzdGF0ZS0+cGFja190bXBfbmFtZSk7CisJcmVzZXRfcGFja19pZHhfb3B0aW9uKCZzdGF0ZS0+cGFja19pZHhfb3B0cyk7CisKKwkvKiBQcmV0ZW5kIHdlIGFyZSBnb2luZyB0byB3cml0ZSBvbmx5IG9uZSBvYmplY3QgKi8KKwlzdGF0ZS0+b2Zmc2V0ID0gd3JpdGVfcGFja19oZWFkZXIoc3RhdGUtPmYsIDEpOworCWlmICghc3RhdGUtPm9mZnNldCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gd3JpdGUgcGFjayBoZWFkZXIiKTsKK30KKworc3RhdGljIGludCBkZWZsYXRlX3RvX3BhY2soc3RydWN0IGJ1bGtfY2hlY2tpbl9zdGF0ZSAqc3RhdGUsCisJCQkgICB1bnNpZ25lZCBjaGFyIHJlc3VsdF9zaGExW10sCisJCQkgICBpbnQgZmQsIHNpemVfdCBzaXplLAorCQkJICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgdW5zaWduZWQgZmxhZ3MpCit7CisJb2ZmX3Qgc2Vla2JhY2ssIGFscmVhZHlfaGFzaGVkX3RvOworCWdpdF9TSEFfQ1RYIGN0eDsKKwl1bnNpZ25lZCBjaGFyIG9idWZbMTYzODRdOworCXVuc2lnbmVkIGhlYWRlcl9sZW47CisJc3RydWN0IHNoYTFmaWxlX2NoZWNrcG9pbnQgY2hlY2twb2ludDsKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKmlkeCA9IE5VTEw7CisKKwlzZWVrYmFjayA9IGxzZWVrKGZkLCAwLCBTRUVLX0NVUik7CisJaWYgKHNlZWtiYWNrID09IChvZmZfdCkgLTEpCisJCXJldHVybiBlcnJvcigiY2Fubm90IGZpbmQgdGhlIGN1cnJlbnQgb2Zmc2V0Iik7CisKKwloZWFkZXJfbGVuID0geHNucHJpbnRmKChjaGFyICopb2J1Ziwgc2l6ZW9mKG9idWYpLCAiJXMgJSIgUFJJdU1BWCwKKwkJCSAgICAgICB0eXBlbmFtZSh0eXBlKSwgKHVpbnRtYXhfdClzaXplKSArIDE7CisJZ2l0X1NIQTFfSW5pdCgmY3R4KTsKKwlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgb2J1ZiwgaGVhZGVyX2xlbik7CisKKwkvKiBOb3RlOiBpZHggaXMgbm9uLU5VTEwgd2hlbiB3ZSBhcmUgd3JpdGluZyAqLworCWlmICgoZmxhZ3MgJiBIQVNIX1dSSVRFX09CSkVDVCkgIT0gMCkKKwkJaWR4ID0geGNhbGxvYygxLCBzaXplb2YoKmlkeCkpOworCisJYWxyZWFkeV9oYXNoZWRfdG8gPSAwOworCisJd2hpbGUgKDEpIHsKKwkJcHJlcGFyZV90b19zdHJlYW0oc3RhdGUsIGZsYWdzKTsKKwkJaWYgKGlkeCkgeworCQkJc2hhMWZpbGVfY2hlY2twb2ludChzdGF0ZS0+ZiwgJmNoZWNrcG9pbnQpOworCQkJaWR4LT5vZmZzZXQgPSBzdGF0ZS0+b2Zmc2V0OworCQkJY3JjMzJfYmVnaW4oc3RhdGUtPmYpOworCQl9CisJCWlmICghc3RyZWFtX3RvX3BhY2soc3RhdGUsICZjdHgsICZhbHJlYWR5X2hhc2hlZF90bywKKwkJCQkgICAgZmQsIHNpemUsIHR5cGUsIHBhdGgsIGZsYWdzKSkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBXcml0aW5nIHRoaXMgb2JqZWN0IHRvIHRoZSBjdXJyZW50IHBhY2sgd2lsbCBtYWtlCisJCSAqIGl0IHRvbyBiaWc7IHdlIG5lZWQgdG8gdHJ1bmNhdGUgaXQsIHN0YXJ0IGEgbmV3CisJCSAqIHBhY2ssIGFuZCB3cml0ZSBpbnRvIGl0LgorCQkgKi8KKwkJaWYgKCFpZHgpCisJCQlkaWUoIkJVRzogc2hvdWxkIG5vdCBoYXBwZW4iKTsKKwkJc2hhMWZpbGVfdHJ1bmNhdGUoc3RhdGUtPmYsICZjaGVja3BvaW50KTsKKwkJc3RhdGUtPm9mZnNldCA9IGNoZWNrcG9pbnQub2Zmc2V0OworCQlmaW5pc2hfYnVsa19jaGVja2luKHN0YXRlKTsKKwkJaWYgKGxzZWVrKGZkLCBzZWVrYmFjaywgU0VFS19TRVQpID09IChvZmZfdCkgLTEpCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBzZWVrIGJhY2siKTsKKwl9CisJZ2l0X1NIQTFfRmluYWwocmVzdWx0X3NoYTEsICZjdHgpOworCWlmICghaWR4KQorCQlyZXR1cm4gMDsKKworCWlkeC0+Y3JjMzIgPSBjcmMzMl9lbmQoc3RhdGUtPmYpOworCWlmIChhbHJlYWR5X3dyaXR0ZW4oc3RhdGUsIHJlc3VsdF9zaGExKSkgeworCQlzaGExZmlsZV90cnVuY2F0ZShzdGF0ZS0+ZiwgJmNoZWNrcG9pbnQpOworCQlzdGF0ZS0+b2Zmc2V0ID0gY2hlY2twb2ludC5vZmZzZXQ7CisJCWZyZWUoaWR4KTsKKwl9IGVsc2UgeworCQloYXNoY3B5KGlkeC0+c2hhMSwgcmVzdWx0X3NoYTEpOworCQlBTExPQ19HUk9XKHN0YXRlLT53cml0dGVuLAorCQkJICAgc3RhdGUtPm5yX3dyaXR0ZW4gKyAxLAorCQkJICAgc3RhdGUtPmFsbG9jX3dyaXR0ZW4pOworCQlzdGF0ZS0+d3JpdHRlbltzdGF0ZS0+bnJfd3JpdHRlbisrXSA9IGlkeDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBpbmRleF9idWxrX2NoZWNraW4odW5zaWduZWQgY2hhciAqc2hhMSwKKwkJICAgICAgIGludCBmZCwgc2l6ZV90IHNpemUsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCBzdGF0dXMgPSBkZWZsYXRlX3RvX3BhY2soJnN0YXRlLCBzaGExLCBmZCwgc2l6ZSwgdHlwZSwKKwkJCQkgICAgIHBhdGgsIGZsYWdzKTsKKwlpZiAoIXN0YXRlLnBsdWdnZWQpCisJCWZpbmlzaF9idWxrX2NoZWNraW4oJnN0YXRlKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCit2b2lkIHBsdWdfYnVsa19jaGVja2luKHZvaWQpCit7CisJc3RhdGUucGx1Z2dlZCA9IDE7Cit9CisKK3ZvaWQgdW5wbHVnX2J1bGtfY2hlY2tpbih2b2lkKQoreworCXN0YXRlLnBsdWdnZWQgPSAwOworCWlmIChzdGF0ZS5mKQorCQlmaW5pc2hfYnVsa19jaGVja2luKCZzdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9idWxrLWNoZWNraW4uaCBiL2J1bGstY2hlY2tpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZDQwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9idWxrLWNoZWNraW4uaApAQCAtMCwwICsxLDE0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLgorICovCisjaWZuZGVmIEJVTEtfQ0hFQ0tJTl9ICisjZGVmaW5lIEJVTEtfQ0hFQ0tJTl9ICisKK2V4dGVybiBpbnQgaW5kZXhfYnVsa19jaGVja2luKHVuc2lnbmVkIGNoYXIgc2hhMVtdLAorCQkJICAgICAgaW50IGZkLCBzaXplX3Qgc2l6ZSwgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJICAgICAgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpOworCitleHRlcm4gdm9pZCBwbHVnX2J1bGtfY2hlY2tpbih2b2lkKTsKK2V4dGVybiB2b2lkIHVucGx1Z19idWxrX2NoZWNraW4odm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYnVuZGxlLmMgYi9idW5kbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWRhY2MwCi0tLSAvZGV2L251bGwKKysrIGIvYnVuZGxlLmMKQEAgLTAsMCArMSw0ODIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiYnVuZGxlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCitzdGF0aWMgY29uc3QgY2hhciBidW5kbGVfc2lnbmF0dXJlW10gPSAiIyB2MiBnaXQgYnVuZGxlXG4iOworCitzdGF0aWMgdm9pZCBhZGRfdG9fcmVmX2xpc3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqbmFtZSwKKwkJc3RydWN0IHJlZl9saXN0ICpsaXN0KQoreworCUFMTE9DX0dST1cobGlzdC0+bGlzdCwgbGlzdC0+bnIgKyAxLCBsaXN0LT5hbGxvYyk7CisJaGFzaGNweShsaXN0LT5saXN0W2xpc3QtPm5yXS5zaGExLCBzaGExKTsKKwlsaXN0LT5saXN0W2xpc3QtPm5yXS5uYW1lID0geHN0cmR1cChuYW1lKTsKKwlsaXN0LT5ucisrOworfQorCitzdGF0aWMgaW50IHBhcnNlX2J1bmRsZV9oZWFkZXIoaW50IGZkLCBzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlcG9ydF9wYXRoKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHN0YXR1cyA9IDA7CisKKwkvKiBUaGUgYnVuZGxlIGhlYWRlciBiZWdpbnMgd2l0aCB0aGUgc2lnbmF0dXJlICovCisJaWYgKHN0cmJ1Zl9nZXR3aG9sZWxpbmVfZmQoJmJ1ZiwgZmQsICdcbicpIHx8CisJICAgIHN0cmNtcChidWYuYnVmLCBidW5kbGVfc2lnbmF0dXJlKSkgeworCQlpZiAocmVwb3J0X3BhdGgpCisJCQllcnJvcihfKCInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIiksCisJCQkgICAgICByZXBvcnRfcGF0aCk7CisJCXN0YXR1cyA9IC0xOworCQlnb3RvIGFib3J0OworCX0KKworCS8qIFRoZSBidW5kbGUgaGVhZGVyIGVuZHMgd2l0aCBhbiBlbXB0eSBsaW5lICovCisJd2hpbGUgKCFzdHJidWZfZ2V0d2hvbGVsaW5lX2ZkKCZidWYsIGZkLCAnXG4nKSAmJgorCSAgICAgICBidWYubGVuICYmIGJ1Zi5idWZbMF0gIT0gJ1xuJykgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlpbnQgaXNfcHJlcmVxID0gMDsKKworCQlpZiAoKmJ1Zi5idWYgPT0gJy0nKSB7CisJCQlpc19wcmVyZXEgPSAxOworCQkJc3RyYnVmX3JlbW92ZSgmYnVmLCAwLCAxKTsKKwkJfQorCQlzdHJidWZfcnRyaW0oJmJ1Zik7CisKKwkJLyoKKwkJICogVGlwIGxpbmVzIGhhdmUgb2JqZWN0IG5hbWUsIFNQLCBhbmQgcmVmbmFtZS4KKwkJICogUHJlcmVxdWlzaXRlcyBoYXZlIG9iamVjdCBuYW1lIHRoYXQgaXMgb3B0aW9uYWxseQorCQkgKiBmb2xsb3dlZCBieSBTUCBhbmQgc3ViamVjdCBsaW5lLgorCQkgKi8KKwkJaWYgKGdldF9zaGExX2hleChidWYuYnVmLCBzaGExKSB8fAorCQkgICAgKGJ1Zi5sZW4gPiA0MCAmJiAhaXNzcGFjZShidWYuYnVmWzQwXSkpIHx8CisJCSAgICAoIWlzX3ByZXJlcSAmJiBidWYubGVuIDw9IDQwKSkgeworCQkJaWYgKHJlcG9ydF9wYXRoKQorCQkJCWVycm9yKF8oInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIpLAorCQkJCSAgICAgIChpc19wcmVyZXEgPyAiLSIgOiAiIiksIGJ1Zi5idWYsIChpbnQpYnVmLmxlbik7CisJCQlzdGF0dXMgPSAtMTsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaWYgKGlzX3ByZXJlcSkKKwkJCQlhZGRfdG9fcmVmX2xpc3Qoc2hhMSwgIiIsICZoZWFkZXItPnByZXJlcXVpc2l0ZXMpOworCQkJZWxzZQorCQkJCWFkZF90b19yZWZfbGlzdChzaGExLCBidWYuYnVmICsgNDEsICZoZWFkZXItPnJlZmVyZW5jZXMpOworCQl9CisJfQorCisgYWJvcnQ6CisJaWYgKHN0YXR1cykgeworCQljbG9zZShmZCk7CisJCWZkID0gLTE7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiBmZDsKK30KKworaW50IHJlYWRfYnVuZGxlX2hlYWRlcihjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyKQoreworCWludCBmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBvcGVuICclcyciKSwgcGF0aCk7CisJcmV0dXJuIHBhcnNlX2J1bmRsZV9oZWFkZXIoZmQsIGhlYWRlciwgcGF0aCk7Cit9CisKK2ludCBpc19idW5kbGUoY29uc3QgY2hhciAqcGF0aCwgaW50IHF1aWV0KQoreworCXN0cnVjdCBidW5kbGVfaGVhZGVyIGhlYWRlcjsKKwlpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKworCWlmIChmZCA8IDApCisJCXJldHVybiAwOworCW1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisJZmQgPSBwYXJzZV9idW5kbGVfaGVhZGVyKGZkLCAmaGVhZGVyLCBxdWlldCA/IE5VTEwgOiBwYXRoKTsKKwlpZiAoZmQgPj0gMCkKKwkJY2xvc2UoZmQpOworCXJldHVybiAoZmQgPj0gMCk7Cit9CisKK3N0YXRpYyBpbnQgbGlzdF9yZWZzKHN0cnVjdCByZWZfbGlzdCAqciwgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHItPm5yOyBpKyspIHsKKwkJaWYgKGFyZ2MgPiAxKSB7CisJCQlpbnQgajsKKwkJCWZvciAoaiA9IDE7IGogPCBhcmdjOyBqKyspCisJCQkJaWYgKCFzdHJjbXAoci0+bGlzdFtpXS5uYW1lLCBhcmd2W2pdKSkKKwkJCQkJYnJlYWs7CisJCQlpZiAoaiA9PSBhcmdjKQorCQkJCWNvbnRpbnVlOworCQl9CisJCXByaW50ZigiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHItPmxpc3RbaV0uc2hhMSksCisJCQkJci0+bGlzdFtpXS5uYW1lKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIFBSRVJFUV9NQVJLICgxdTw8MTYpCisKK2ludCB2ZXJpZnlfYnVuZGxlKHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIsIGludCB2ZXJib3NlKQoreworCS8qCisJICogRG8gZmFzdCBjaGVjaywgdGhlbiBpZiBhbnkgcHJlcmVxcyBhcmUgbWlzc2luZyB0aGVuIGdvIGxpbmUgYnkgbGluZQorCSAqIHRvIGJlIHZlcmJvc2UgYWJvdXQgdGhlIGVycm9ycworCSAqLworCXN0cnVjdCByZWZfbGlzdCAqcCA9ICZoZWFkZXItPnByZXJlcXVpc2l0ZXM7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisJY29uc3QgY2hhciAqYXJndltdID0ge05VTEwsICItLWFsbCIsIE5VTEx9OworCXN0cnVjdCBvYmplY3RfYXJyYXkgcmVmczsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJaW50IGksIHJldCA9IDAsIHJlcV9ucjsKKwljb25zdCBjaGFyICptZXNzYWdlID0gXygiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiKTsKKworCWluaXRfcmV2aXNpb25zKCZyZXZzLCBOVUxMKTsKKwlmb3IgKGkgPSAwOyBpIDwgcC0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX2xpc3RfZW50cnkgKmUgPSBwLT5saXN0ICsgaTsKKwkJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdChlLT5zaGExKTsKKwkJaWYgKG8pIHsKKwkJCW8tPmZsYWdzIHw9IFBSRVJFUV9NQVJLOworCQkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZzLCBvLCBlLT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgrK3JldCA9PSAxKQorCQkJZXJyb3IoIiVzIiwgbWVzc2FnZSk7CisJCWVycm9yKCIlcyAlcyIsIHNoYTFfdG9faGV4KGUtPnNoYTEpLCBlLT5uYW1lKTsKKwl9CisJaWYgKHJldnMucGVuZGluZy5uciAhPSBwLT5ucikKKwkJcmV0dXJuIHJldDsKKwlyZXFfbnIgPSByZXZzLnBlbmRpbmcubnI7CisJc2V0dXBfcmV2aXNpb25zKDIsIGFyZ3YsICZyZXZzLCBOVUxMKTsKKworCXJlZnMgPSByZXZzLnBlbmRpbmc7CisJcmV2cy5sZWFrX3BlbmRpbmcgPSAxOworCisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKworCWkgPSByZXFfbnI7CisJd2hpbGUgKGkgJiYgKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2cykpKQorCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBQUkVSRVFfTUFSSykKKwkJCWktLTsKKworCWZvciAoaSA9IDA7IGkgPCByZXFfbnI7IGkrKykKKwkJaWYgKCEocmVmcy5vYmplY3RzW2ldLml0ZW0tPmZsYWdzICYgU0hPV04pKSB7CisJCQlpZiAoKytyZXQgPT0gMSkKKwkJCQllcnJvcigiJXMiLCBtZXNzYWdlKTsKKwkJCWVycm9yKCIlcyAlcyIsIHNoYTFfdG9faGV4KHJlZnMub2JqZWN0c1tpXS5pdGVtLT5zaGExKSwKKwkJCQlyZWZzLm9iamVjdHNbaV0ubmFtZSk7CisJCX0KKworCWNsZWFyX2NvbW1pdF9tYXJrc19mb3Jfb2JqZWN0X2FycmF5KCZyZWZzLCBBTExfUkVWX0ZMQUdTKTsKKwlmcmVlKHJlZnMub2JqZWN0cyk7CisKKwlpZiAodmVyYm9zZSkgeworCQlzdHJ1Y3QgcmVmX2xpc3QgKnI7CisKKwkJciA9ICZoZWFkZXItPnJlZmVyZW5jZXM7CisJCXByaW50Zl9sbihRXygiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiLAorCQkJICAgICAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIsCisJCQkgICAgIHItPm5yKSwKKwkJCSAgci0+bnIpOworCQlsaXN0X3JlZnMociwgMCwgTlVMTCk7CisJCXIgPSAmaGVhZGVyLT5wcmVyZXF1aXNpdGVzOworCQlpZiAoIXItPm5yKSB7CisJCQlwcmludGZfbG4oXygiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iKSk7CisJCX0gZWxzZSB7CisJCQlwcmludGZfbG4oUV8oIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IiwKKwkJCQkgICAgICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IiwKKwkJCQkgICAgIHItPm5yKSwKKwkJCQkgIHItPm5yKTsKKwkJCWxpc3RfcmVmcyhyLCAwLCBOVUxMKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgbGlzdF9idW5kbGVfcmVmcyhzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJcmV0dXJuIGxpc3RfcmVmcygmaGVhZGVyLT5yZWZlcmVuY2VzLCBhcmdjLCBhcmd2KTsKK30KKworc3RhdGljIGludCBpc190YWdfaW5fZGF0ZV9yYW5nZShzdHJ1Y3Qgb2JqZWN0ICp0YWcsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZiA9IE5VTEwsICpsaW5lLCAqbGluZWVuZDsKKwl1bnNpZ25lZCBsb25nIGRhdGU7CisJaW50IHJlc3VsdCA9IDE7CisKKwlpZiAocmV2cy0+bWF4X2FnZSA9PSAtMSAmJiByZXZzLT5taW5fYWdlID09IC0xKQorCQlnb3RvIG91dDsKKworCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHRhZy0+c2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQ7CisJbGluZSA9IG1lbW1lbShidWYsIHNpemUsICJcbnRhZ2dlciAiLCA4KTsKKwlpZiAoIWxpbmUrKykKKwkJZ290byBvdXQ7CisJbGluZWVuZCA9IG1lbWNocihsaW5lLCAnXG4nLCBidWYgKyBzaXplIC0gbGluZSk7CisJbGluZSA9IG1lbWNocihsaW5lLCAnPicsIGxpbmVlbmQgPyBsaW5lZW5kIC0gbGluZSA6IGJ1ZiArIHNpemUgLSBsaW5lKTsKKwlpZiAoIWxpbmUrKykKKwkJZ290byBvdXQ7CisJZGF0ZSA9IHN0cnRvdWwobGluZSwgTlVMTCwgMTApOworCXJlc3VsdCA9IChyZXZzLT5tYXhfYWdlID09IC0xIHx8IHJldnMtPm1heF9hZ2UgPCBkYXRlKSAmJgorCQkocmV2cy0+bWluX2FnZSA9PSAtMSB8fCByZXZzLT5taW5fYWdlID4gZGF0ZSk7CitvdXQ6CisJZnJlZShidWYpOworCXJldHVybiByZXN1bHQ7Cit9CisKKworLyogV3JpdGUgdGhlIHBhY2sgZGF0YSB0byBidW5kbGVfZmQsIHRoZW4gY2xvc2UgaXQgaWYgaXQgaXMgPiAxLiAqLworc3RhdGljIGludCB3cml0ZV9wYWNrX2RhdGEoaW50IGJ1bmRsZV9mZCwgc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHBhY2tfb2JqZWN0cyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlpbnQgaTsKKworCWFyZ3ZfYXJyYXlfcHVzaGwoJnBhY2tfb2JqZWN0cy5hcmdzLAorCQkJICJwYWNrLW9iamVjdHMiLCAiLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZCIsCisJCQkgIi0tc3Rkb3V0IiwgIi0tdGhpbiIsICItLWRlbHRhLWJhc2Utb2Zmc2V0IiwKKwkJCSBOVUxMKTsKKwlwYWNrX29iamVjdHMuaW4gPSAtMTsKKwlwYWNrX29iamVjdHMub3V0ID0gYnVuZGxlX2ZkOworCXBhY2tfb2JqZWN0cy5naXRfY21kID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmcGFja19vYmplY3RzKSkKKwkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5pdGVtOworCQlpZiAob2JqZWN0LT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQl3cml0ZV9vcl9kaWUocGFja19vYmplY3RzLmluLCAiXiIsIDEpOworCQl3cml0ZV9vcl9kaWUocGFja19vYmplY3RzLmluLCBzaGExX3RvX2hleChvYmplY3QtPnNoYTEpLCA0MCk7CisJCXdyaXRlX29yX2RpZShwYWNrX29iamVjdHMuaW4sICJcbiIsIDEpOworCX0KKwljbG9zZShwYWNrX29iamVjdHMuaW4pOworCWlmIChmaW5pc2hfY29tbWFuZCgmcGFja19vYmplY3RzKSkKKwkJcmV0dXJuIGVycm9yKF8oInBhY2stb2JqZWN0cyBkaWVkIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXB1dGVfYW5kX3dyaXRlX3ByZXJlcXVpc2l0ZXMoaW50IGJ1bmRsZV9mZCwKKwkJCQkJICAgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcmxzID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqcmxzX2ZvdXQ7CisJaW50IGk7CisKKwlhcmd2X2FycmF5X3B1c2hsKCZybHMuYXJncywKKwkJCSAicmV2LWxpc3QiLCAiLS1ib3VuZGFyeSIsICItLXByZXR0eT1vbmVsaW5lIiwKKwkJCSBOVUxMKTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2goJnJscy5hcmdzLCBhcmd2W2ldKTsKKwlybHMub3V0ID0gLTE7CisJcmxzLmdpdF9jbWQgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZybHMpKQorCQlyZXR1cm4gLTE7CisJcmxzX2ZvdXQgPSB4ZmRvcGVuKHJscy5vdXQsICJyIik7CisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJmJ1ZiwgcmxzX2ZvdXQsICdcbicpICE9IEVPRikgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlpZiAoYnVmLmxlbiA+IDAgJiYgYnVmLmJ1ZlswXSA9PSAnLScpIHsKKwkJCXdyaXRlX29yX2RpZShidW5kbGVfZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCQkJaWYgKCFnZXRfc2hhMV9oZXgoYnVmLmJ1ZiArIDEsIHNoYTEpKSB7CisJCQkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcGFyc2Vfb2JqZWN0X29yX2RpZShzaGExLCBidWYuYnVmKTsKKwkJCQlvYmplY3QtPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQkJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIG9iamVjdCwgYnVmLmJ1Zik7CisJCQl9CisJCX0gZWxzZSBpZiAoIWdldF9zaGExX2hleChidWYuYnVmLCBzaGExKSkgeworCQkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcGFyc2Vfb2JqZWN0X29yX2RpZShzaGExLCBidWYuYnVmKTsKKwkJCW9iamVjdC0+ZmxhZ3MgfD0gU0hPV047CisJCX0KKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJZmNsb3NlKHJsc19mb3V0KTsKKwlpZiAoZmluaXNoX2NvbW1hbmQoJnJscykpCisJCXJldHVybiBlcnJvcihfKCJyZXYtbGlzdCBkaWVkIikpOworCXJldHVybiAwOworfQorCisvKgorICogV3JpdGUgb3V0IGJ1bmRsZSByZWZzIGJhc2VkIG9uIHRoZSB0aXBzIGFscmVhZHkKKyAqIHBhcnNlZCBpbnRvIHJldnMucGVuZGluZy4gQXMgYSBzaWRlIGVmZmVjdCwgbWF5CisgKiBtYW5pcHVsYXRlIHJldnMucGVuZGluZyB0byBpbmNsdWRlIGFkZGl0aW9uYWwKKyAqIG5lY2Vzc2FyeSBvYmplY3RzIChsaWtlIHRhZ3MpLgorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZWZzIHdyaXR0ZW4sIG9yIG5lZ2F0aXZlCisgKiBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCB3cml0ZV9idW5kbGVfcmVmcyhpbnQgYnVuZGxlX2ZkLCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJaW50IGk7CisJaW50IHJlZl9jb3VudCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmV2cy0+cGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmUgPSByZXZzLT5wZW5kaW5nLm9iamVjdHMgKyBpOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljaGFyICpyZWY7CisJCWNvbnN0IGNoYXIgKmRpc3BsYXlfcmVmOworCQlpbnQgZmxhZzsKKworCQlpZiAoZS0+aXRlbS0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisJCWlmIChkd2ltX3JlZihlLT5uYW1lLCBzdHJsZW4oZS0+bmFtZSksIHNoYTEsICZyZWYpICE9IDEpCisJCQlnb3RvIHNraXBfd3JpdGVfcmVmOworCQlpZiAocmVhZF9yZWZfZnVsbChlLT5uYW1lLCBSRVNPTFZFX1JFRl9SRUFESU5HLCBzaGExLCAmZmxhZykpCisJCQlmbGFnID0gMDsKKwkJZGlzcGxheV9yZWYgPSAoZmxhZyAmIFJFRl9JU1NZTVJFRikgPyBlLT5uYW1lIDogcmVmOworCisJCWlmIChlLT5pdGVtLT50eXBlID09IE9CSl9UQUcgJiYKKwkJCQkhaXNfdGFnX2luX2RhdGVfcmFuZ2UoZS0+aXRlbSwgcmV2cykpIHsKKwkJCWUtPml0ZW0tPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCQlnb3RvIHNraXBfd3JpdGVfcmVmOworCQl9CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSByZWZzIHdlIHdyb3RlIG91dCBpcyBjb3JyZWN0OyAtLW1heC1jb3VudCBhbmQKKwkJICogb3RoZXIgbGltaXRpbmcgb3B0aW9ucyBjb3VsZCBoYXZlIHByZXZlbnRlZCBhbGwgdGhlIHRpcHMKKwkJICogZnJvbSBnZXR0aW5nIG91dHB1dC4KKwkJICoKKwkJICogTm9uIGNvbW1pdCBvYmplY3RzIHN1Y2ggYXMgdGFncyBhbmQgYmxvYnMgZG8gbm90IGhhdmUKKwkJICogdGhpcyBpc3N1ZSBhcyB0aGV5IGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhvc2UgZXh0cmEKKwkJICogY29uc3RyYWludHMuCisJCSAqLworCQlpZiAoIShlLT5pdGVtLT5mbGFncyAmIFNIT1dOKSAmJiBlLT5pdGVtLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJCXdhcm5pbmcoXygicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiKSwKKwkJCQllLT5uYW1lKTsKKwkJCWdvdG8gc2tpcF93cml0ZV9yZWY7CisJCX0KKwkJLyoKKwkJICogSWYgeW91IHJ1biAiZ2l0IGJ1bmRsZSBjcmVhdGUgYm5kbCB2MS4wLi52Mi4wIiwgdGhlCisJCSAqIG5hbWUgb2YgdGhlIHBvc2l0aXZlIHJlZiBpcyAidjIuMCIgYnV0IHRoYXQgaXMgdGhlCisJCSAqIGNvbW1pdCB0aGF0IGlzIHJlZmVyZW5jZWQgYnkgdGhlIHRhZywgYW5kIG5vdCB0aGUgdGFnCisJCSAqIGl0c2VsZi4KKwkJICovCisJCWlmIChoYXNoY21wKHNoYTEsIGUtPml0ZW0tPnNoYTEpKSB7CisJCQkvKgorCQkJICogSXMgdGhpcyB0aGUgcG9zaXRpdmUgZW5kIG9mIGEgcmFuZ2UgZXhwcmVzc2VkCisJCQkgKiBpbiB0ZXJtcyBvZiBhIHRhZyAoZS5nLiB2Mi4wIGZyb20gdGhlIHJhbmdlCisJCQkgKiAidjEuMC4udjIuMCIpPworCQkJICovCisJCQlzdHJ1Y3QgY29tbWl0ICpvbmUgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwkJCXN0cnVjdCBvYmplY3QgKm9iajsKKworCQkJaWYgKGUtPml0ZW0gPT0gJihvbmUtPm9iamVjdCkpIHsKKwkJCQkvKgorCQkJCSAqIE5lZWQgdG8gaW5jbHVkZSBlLT5uYW1lIGFzIGFuCisJCQkJICogaW5kZXBlbmRlbnQgcmVmIHRvIHRoZSBwYWNrLW9iamVjdHMKKwkJCQkgKiBpbnB1dCwgc28gdGhhdCB0aGUgdGFnIGlzIGluY2x1ZGVkCisJCQkJICogaW4gdGhlIG91dHB1dDsgb3RoZXJ3aXNlIHdlIHdvdWxkCisJCQkJICogZW5kIHVwIHRyaWdnZXJpbmcgImVtcHR5IGJ1bmRsZSIKKwkJCQkgKiBlcnJvci4KKwkJCQkgKi8KKwkJCQlvYmogPSBwYXJzZV9vYmplY3Rfb3JfZGllKHNoYTEsIGUtPm5hbWUpOworCQkJCW9iai0+ZmxhZ3MgfD0gU0hPV047CisJCQkJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIG9iaiwgZS0+bmFtZSk7CisJCQl9CisJCQlnb3RvIHNraXBfd3JpdGVfcmVmOworCQl9CisKKwkJcmVmX2NvdW50Kys7CisJCXdyaXRlX29yX2RpZShidW5kbGVfZmQsIHNoYTFfdG9faGV4KGUtPml0ZW0tPnNoYTEpLCA0MCk7CisJCXdyaXRlX29yX2RpZShidW5kbGVfZmQsICIgIiwgMSk7CisJCXdyaXRlX29yX2RpZShidW5kbGVfZmQsIGRpc3BsYXlfcmVmLCBzdHJsZW4oZGlzcGxheV9yZWYpKTsKKwkJd3JpdGVfb3JfZGllKGJ1bmRsZV9mZCwgIlxuIiwgMSk7Cisgc2tpcF93cml0ZV9yZWY6CisJCWZyZWUocmVmKTsKKwl9CisKKwkvKiBlbmQgaGVhZGVyICovCisJd3JpdGVfb3JfZGllKGJ1bmRsZV9mZCwgIlxuIiwgMSk7CisJcmV0dXJuIHJlZl9jb3VudDsKK30KKworaW50IGNyZWF0ZV9idW5kbGUoc3RydWN0IGJ1bmRsZV9oZWFkZXIgKmhlYWRlciwgY29uc3QgY2hhciAqcGF0aCwKKwkJICBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9jazsKKwlpbnQgYnVuZGxlX2ZkID0gLTE7CisJaW50IGJ1bmRsZV90b19zdGRvdXQ7CisJaW50IHJlZl9jb3VudCA9IDA7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisKKwlidW5kbGVfdG9fc3Rkb3V0ID0gIXN0cmNtcChwYXRoLCAiLSIpOworCWlmIChidW5kbGVfdG9fc3Rkb3V0KQorCQlidW5kbGVfZmQgPSAxOworCWVsc2UgeworCQlidW5kbGVfZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZsb2NrLCBwYXRoLAorCQkJCQkJICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCisJCS8qCisJCSAqIHdyaXRlX3BhY2tfZGF0YSgpIHdpbGwgY2xvc2UgdGhlIGZkIHBhc3NlZCB0byBpdCwKKwkJICogYnV0IGNvbW1pdF9sb2NrX2ZpbGUoKSB3aWxsIGFsc28gdHJ5IHRvIGNsb3NlIHRoZQorCQkgKiBsb2NrZmlsZSdzIGZkLiBTbyBtYWtlIGEgY29weSBvZiB0aGUgZmlsZQorCQkgKiBkZXNjcmlwdG9yIHRvIGF2b2lkIHRyeWluZyB0byBjbG9zZSBpdCB0d2ljZS4KKwkJICovCisJCWJ1bmRsZV9mZCA9IGR1cChidW5kbGVfZmQpOworCQlpZiAoYnVuZGxlX2ZkIDwgMCkKKwkJCWRpZV9lcnJubygidW5hYmxlIHRvIGR1cCBmaWxlIGRlc2NyaXB0b3IiKTsKKwl9CisKKwkvKiB3cml0ZSBzaWduYXR1cmUgKi8KKwl3cml0ZV9vcl9kaWUoYnVuZGxlX2ZkLCBidW5kbGVfc2lnbmF0dXJlLCBzdHJsZW4oYnVuZGxlX3NpZ25hdHVyZSkpOworCisJLyogaW5pdCByZXZzIHRvIGxpc3Qgb2JqZWN0cyBmb3IgcGFjay1vYmplY3RzIGxhdGVyICovCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisKKwkvKiB3cml0ZSBwcmVyZXF1aXNpdGVzICovCisJaWYgKGNvbXB1dGVfYW5kX3dyaXRlX3ByZXJlcXVpc2l0ZXMoYnVuZGxlX2ZkLCAmcmV2cywgYXJnYywgYXJndikpCisJCXJldHVybiAtMTsKKworCWFyZ2MgPSBzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldnMsIE5VTEwpOworCisJaWYgKGFyZ2MgPiAxKQorCQlyZXR1cm4gZXJyb3IoXygidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIpLCBhcmd2WzFdKTsKKworCW9iamVjdF9hcnJheV9yZW1vdmVfZHVwbGljYXRlcygmcmV2cy5wZW5kaW5nKTsKKworCXJlZl9jb3VudCA9IHdyaXRlX2J1bmRsZV9yZWZzKGJ1bmRsZV9mZCwgJnJldnMpOworCWlmICghcmVmX2NvdW50KQorCQlkaWUoXygiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iKSk7CisJZWxzZSBpZiAocmVmX2NvdW50IDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogd3JpdGUgcGFjayAqLworCWlmICh3cml0ZV9wYWNrX2RhdGEoYnVuZGxlX2ZkLCAmcmV2cykpCisJCXJldHVybiAtMTsKKworCWlmICghYnVuZGxlX3RvX3N0ZG91dCkgeworCQlpZiAoY29tbWl0X2xvY2tfZmlsZSgmbG9jaykpCisJCQlkaWVfZXJybm8oXygiY2Fubm90IGNyZWF0ZSAnJXMnIiksIHBhdGgpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHVuYnVuZGxlKHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIsIGludCBidW5kbGVfZmQsIGludCBmbGFncykKK3sKKwljb25zdCBjaGFyICphcmd2X2luZGV4X3BhY2tbXSA9IHsiaW5kZXgtcGFjayIsCisJCQkJCSAiLS1maXgtdGhpbiIsICItLXN0ZGluIiwgTlVMTCwgTlVMTH07CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgaXAgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwlpZiAoZmxhZ3MgJiBCVU5ETEVfVkVSQk9TRSkKKwkJYXJndl9pbmRleF9wYWNrWzNdID0gIi12IjsKKworCWlmICh2ZXJpZnlfYnVuZGxlKGhlYWRlciwgMCkpCisJCXJldHVybiAtMTsKKwlpcC5hcmd2ID0gYXJndl9pbmRleF9wYWNrOworCWlwLmluID0gYnVuZGxlX2ZkOworCWlwLm5vX3N0ZG91dCA9IDE7CisJaXAuZ2l0X2NtZCA9IDE7CisJaWYgKHJ1bl9jb21tYW5kKCZpcCkpCisJCXJldHVybiBlcnJvcihfKCJpbmRleC1wYWNrIGRpZWQiKSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9idW5kbGUuaCBiL2J1bmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ODRlNGQKLS0tIC9kZXYvbnVsbAorKysgYi9idW5kbGUuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIEJVTkRMRV9ICisjZGVmaW5lIEJVTkRMRV9ICisKK3N0cnVjdCByZWZfbGlzdCB7CisJdW5zaWduZWQgaW50IG5yLCBhbGxvYzsKKwlzdHJ1Y3QgcmVmX2xpc3RfZW50cnkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljaGFyICpuYW1lOworCX0gKmxpc3Q7Cit9OworCitzdHJ1Y3QgYnVuZGxlX2hlYWRlciB7CisJc3RydWN0IHJlZl9saXN0IHByZXJlcXVpc2l0ZXM7CisJc3RydWN0IHJlZl9saXN0IHJlZmVyZW5jZXM7Cit9OworCitpbnQgaXNfYnVuZGxlKGNvbnN0IGNoYXIgKnBhdGgsIGludCBxdWlldCk7CitpbnQgcmVhZF9idW5kbGVfaGVhZGVyKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIpOworaW50IGNyZWF0ZV9idW5kbGUoc3RydWN0IGJ1bmRsZV9oZWFkZXIgKmhlYWRlciwgY29uc3QgY2hhciAqcGF0aCwKKwkJaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2ludCB2ZXJpZnlfYnVuZGxlKHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIsIGludCB2ZXJib3NlKTsKKyNkZWZpbmUgQlVORExFX1ZFUkJPU0UgMQoraW50IHVuYnVuZGxlKHN0cnVjdCBidW5kbGVfaGVhZGVyICpoZWFkZXIsIGludCBidW5kbGVfZmQsIGludCBmbGFncyk7CitpbnQgbGlzdF9idW5kbGVfcmVmcyhzdHJ1Y3QgYnVuZGxlX2hlYWRlciAqaGVhZGVyLAorCQlpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NhY2hlLXRyZWUuYyBiL2NhY2hlLXRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWFjZThiCi0tLSAvZGV2L251bGwKKysrIGIvY2FjaGUtdHJlZS5jCkBAIC0wLDAgKzEsNzI1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisKKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcgMAorI2VuZGlmCisKK3N0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlKHZvaWQpCit7CisJc3RydWN0IGNhY2hlX3RyZWUgKml0ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNhY2hlX3RyZWUpKTsKKwlpdC0+ZW50cnlfY291bnQgPSAtMTsKKwlyZXR1cm4gaXQ7Cit9CisKK3ZvaWQgY2FjaGVfdHJlZV9mcmVlKHN0cnVjdCBjYWNoZV90cmVlICoqaXRfcCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQgPSAqaXRfcDsKKworCWlmICghaXQpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgaXQtPnN1YnRyZWVfbnI7IGkrKykKKwkJaWYgKGl0LT5kb3duW2ldKSB7CisJCQljYWNoZV90cmVlX2ZyZWUoJml0LT5kb3duW2ldLT5jYWNoZV90cmVlKTsKKwkJCWZyZWUoaXQtPmRvd25baV0pOworCQl9CisJZnJlZShpdC0+ZG93bik7CisJZnJlZShpdCk7CisJKml0X3AgPSBOVUxMOworfQorCitzdGF0aWMgaW50IHN1YnRyZWVfbmFtZV9jbXAoY29uc3QgY2hhciAqb25lLCBpbnQgb25lbGVuLAorCQkJICAgIGNvbnN0IGNoYXIgKnR3bywgaW50IHR3b2xlbikKK3sKKwlpZiAob25lbGVuIDwgdHdvbGVuKQorCQlyZXR1cm4gLTE7CisJaWYgKHR3b2xlbiA8IG9uZWxlbikKKwkJcmV0dXJuIDE7CisJcmV0dXJuIG1lbWNtcChvbmUsIHR3bywgb25lbGVuKTsKK30KKworc3RhdGljIGludCBzdWJ0cmVlX3BvcyhzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRobGVuKQoreworCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqKmRvd24gPSBpdC0+ZG93bjsKKwlpbnQgbG8sIGhpOworCWxvID0gMDsKKwloaSA9IGl0LT5zdWJ0cmVlX25yOworCXdoaWxlIChsbyA8IGhpKSB7CisJCWludCBtaSA9IChsbyArIGhpKSAvIDI7CisJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqbWRsID0gZG93blttaV07CisJCWludCBjbXAgPSBzdWJ0cmVlX25hbWVfY21wKHBhdGgsIHBhdGhsZW4sCisJCQkJCSAgIG1kbC0+bmFtZSwgbWRsLT5uYW1lbGVuKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbWk7CisJCWlmIChjbXAgPCAwKQorCQkJaGkgPSBtaTsKKwkJZWxzZQorCQkJbG8gPSBtaSArIDE7CisJfQorCXJldHVybiAtbG8tMTsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV90cmVlX3N1YiAqZmluZF9zdWJ0cmVlKHN0cnVjdCBjYWNoZV90cmVlICppdCwKKwkJCQkJICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJICAgaW50IHBhdGhsZW4sCisJCQkJCSAgIGludCBjcmVhdGUpCit7CisJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpkb3duOworCWludCBwb3MgPSBzdWJ0cmVlX3BvcyhpdCwgcGF0aCwgcGF0aGxlbik7CisJaWYgKDAgPD0gcG9zKQorCQlyZXR1cm4gaXQtPmRvd25bcG9zXTsKKwlpZiAoIWNyZWF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwb3MgPSAtcG9zLTE7CisJQUxMT0NfR1JPVyhpdC0+ZG93biwgaXQtPnN1YnRyZWVfbnIgKyAxLCBpdC0+c3VidHJlZV9hbGxvYyk7CisJaXQtPnN1YnRyZWVfbnIrKzsKKworCWRvd24gPSB4bWFsbG9jKHNpemVvZigqZG93bikgKyBwYXRobGVuICsgMSk7CisJZG93bi0+Y2FjaGVfdHJlZSA9IE5VTEw7CisJZG93bi0+bmFtZWxlbiA9IHBhdGhsZW47CisJbWVtY3B5KGRvd24tPm5hbWUsIHBhdGgsIHBhdGhsZW4pOworCWRvd24tPm5hbWVbcGF0aGxlbl0gPSAwOworCisJaWYgKHBvcyA8IGl0LT5zdWJ0cmVlX25yKQorCQltZW1tb3ZlKGl0LT5kb3duICsgcG9zICsgMSwKKwkJCWl0LT5kb3duICsgcG9zLAorCQkJc2l6ZW9mKGRvd24pICogKGl0LT5zdWJ0cmVlX25yIC0gcG9zIC0gMSkpOworCWl0LT5kb3duW3Bvc10gPSBkb3duOworCXJldHVybiBkb3duOworfQorCitzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKmNhY2hlX3RyZWVfc3ViKHN0cnVjdCBjYWNoZV90cmVlICppdCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgcGF0aGxlbiA9IHN0cmxlbihwYXRoKTsKKwlyZXR1cm4gZmluZF9zdWJ0cmVlKGl0LCBwYXRoLCBwYXRobGVuLCAxKTsKK30KKworc3RhdGljIGludCBkb19pbnZhbGlkYXRlX3BhdGgoc3RydWN0IGNhY2hlX3RyZWUgKml0LCBjb25zdCBjaGFyICpwYXRoKQoreworCS8qIGEvYi9jCisJICogPT0+IGludmFsaWRhdGUgc2VsZgorCSAqID09PiBmaW5kICJhIiwgaGF2ZSBpdCBpbnZhbGlkYXRlICJiL2MiCisJICogYQorCSAqID09PiBpbnZhbGlkYXRlIHNlbGYKKwkgKiA9PT4gaWYgImEiIGV4aXN0cyBhcyBhIHN1YnRyZWUsIHJlbW92ZSBpdC4KKwkgKi8KKwljb25zdCBjaGFyICpzbGFzaDsKKwlpbnQgbmFtZWxlbjsKKwlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKmRvd247CisKKyNpZiBERUJVRworCWZwcmludGYoc3RkZXJyLCAiY2FjaGUtdHJlZSBpbnZhbGlkYXRlIDwlcz5cbiIsIHBhdGgpOworI2VuZGlmCisKKwlpZiAoIWl0KQorCQlyZXR1cm4gMDsKKwlzbGFzaCA9IHN0cmNocm51bChwYXRoLCAnLycpOworCW5hbWVsZW4gPSBzbGFzaCAtIHBhdGg7CisJaXQtPmVudHJ5X2NvdW50ID0gLTE7CisJaWYgKCEqc2xhc2gpIHsKKwkJaW50IHBvczsKKwkJcG9zID0gc3VidHJlZV9wb3MoaXQsIHBhdGgsIG5hbWVsZW4pOworCQlpZiAoMCA8PSBwb3MpIHsKKwkJCWNhY2hlX3RyZWVfZnJlZSgmaXQtPmRvd25bcG9zXS0+Y2FjaGVfdHJlZSk7CisJCQlmcmVlKGl0LT5kb3duW3Bvc10pOworCQkJLyogMCAxIDIgMyA0IDUKKwkJCSAqICAgICAgIF4gICAgIF5zdWJ0cmVlX25yID0gNgorCQkJICogICAgICAgcG9zCisJCQkgKiBtb3ZlIDQgYW5kIDUgdXAgb25lIHBsYWNlICgyIGVudHJpZXMpCisJCQkgKiAyID0gNiAtIDMgLSAxID0gc3VidHJlZV9uciAtIHBvcyAtIDEKKwkJCSAqLworCQkJbWVtbW92ZShpdC0+ZG93bitwb3MsIGl0LT5kb3duK3BvcysxLAorCQkJCXNpemVvZihzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKikgKgorCQkJCShpdC0+c3VidHJlZV9uciAtIHBvcyAtIDEpKTsKKwkJCWl0LT5zdWJ0cmVlX25yLS07CisJCX0KKwkJcmV0dXJuIDE7CisJfQorCWRvd24gPSBmaW5kX3N1YnRyZWUoaXQsIHBhdGgsIG5hbWVsZW4sIDApOworCWlmIChkb3duKQorCQlkb19pbnZhbGlkYXRlX3BhdGgoZG93bi0+Y2FjaGVfdHJlZSwgc2xhc2ggKyAxKTsKKwlyZXR1cm4gMTsKK30KKwordm9pZCBjYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoZG9faW52YWxpZGF0ZV9wYXRoKGlzdGF0ZS0+Y2FjaGVfdHJlZSwgcGF0aCkpCisJCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBDQUNIRV9UUkVFX0NIQU5HRUQ7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2NhY2hlKHN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlLAorCQkJaW50IGVudHJpZXMsIGludCBmbGFncykKK3sKKwlpbnQgaSwgZnVubnk7CisJaW50IHNpbGVudCA9IGZsYWdzICYgV1JJVEVfVFJFRV9TSUxFTlQ7CisKKwkvKiBWZXJpZnkgdGhhdCB0aGUgdHJlZSBpcyBtZXJnZWQgKi8KKwlmdW5ueSA9IDA7CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gY2FjaGVbaV07CisJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCWlmIChzaWxlbnQpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKDEwIDwgKytmdW5ueSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiLi4uXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6IHVubWVyZ2VkICglcylcbiIsCisJCQkJY2UtPm5hbWUsIHNoYTFfdG9faGV4KGNlLT5zaGExKSk7CisJCX0KKwl9CisJaWYgKGZ1bm55KQorCQlyZXR1cm4gLTE7CisKKwkvKiBBbHNvIHZlcmlmeSB0aGF0IHRoZSBjYWNoZSBkb2VzIG5vdCBoYXZlIHBhdGggYW5kIHBhdGgvZmlsZQorCSAqIGF0IHRoZSBzYW1lIHRpbWUuICBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhlIGNhY2hlIGhhcyBvbmx5CisJICogc3RhZ2UgMCBlbnRyaWVzLgorCSAqLworCWZ1bm55ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllcyAtIDE7IGkrKykgeworCQkvKiBwYXRoL2ZpbGUgYWx3YXlzIGNvbWVzIGFmdGVyIHBhdGggYmVjYXVzZSBvZiB0aGUgd2F5CisJCSAqIHRoZSBjYWNoZSBpcyBzb3J0ZWQuICBBbHNvIHBhdGggY2FuIGFwcGVhciBvbmx5IG9uY2UsCisJCSAqIHdoaWNoIG1lYW5zIGNvbmZsaWN0aW5nIG9uZSB3b3VsZCBpbW1lZGlhdGVseSBmb2xsb3cuCisJCSAqLworCQljb25zdCBjaGFyICp0aGlzX25hbWUgPSBjYWNoZVtpXS0+bmFtZTsKKwkJY29uc3QgY2hhciAqbmV4dF9uYW1lID0gY2FjaGVbaSsxXS0+bmFtZTsKKwkJaW50IHRoaXNfbGVuID0gc3RybGVuKHRoaXNfbmFtZSk7CisJCWlmICh0aGlzX2xlbiA8IHN0cmxlbihuZXh0X25hbWUpICYmCisJCSAgICBzdHJuY21wKHRoaXNfbmFtZSwgbmV4dF9uYW1lLCB0aGlzX2xlbikgPT0gMCAmJgorCQkgICAgbmV4dF9uYW1lW3RoaXNfbGVuXSA9PSAnLycpIHsKKwkJCWlmICgxMCA8ICsrZnVubnkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIi4uLlxuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlmcHJpbnRmKHN0ZGVyciwgIllvdSBoYXZlIGJvdGggJXMgYW5kICVzXG4iLAorCQkJCXRoaXNfbmFtZSwgbmV4dF9uYW1lKTsKKwkJfQorCX0KKwlpZiAoZnVubnkpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGlzY2FyZF91bnVzZWRfc3VidHJlZXMoc3RydWN0IGNhY2hlX3RyZWUgKml0KQoreworCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqKmRvd24gPSBpdC0+ZG93bjsKKwlpbnQgbnIgPSBpdC0+c3VidHJlZV9ucjsKKwlpbnQgZHN0LCBzcmM7CisJZm9yIChkc3QgPSBzcmMgPSAwOyBzcmMgPCBucjsgc3JjKyspIHsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzID0gZG93bltzcmNdOworCQlpZiAocy0+dXNlZCkKKwkJCWRvd25bZHN0KytdID0gczsKKwkJZWxzZSB7CisJCQljYWNoZV90cmVlX2ZyZWUoJnMtPmNhY2hlX3RyZWUpOworCQkJZnJlZShzKTsKKwkJCWl0LT5zdWJ0cmVlX25yLS07CisJCX0KKwl9Cit9CisKK2ludCBjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKHN0cnVjdCBjYWNoZV90cmVlICppdCkKK3sKKwlpbnQgaTsKKwlpZiAoIWl0KQorCQlyZXR1cm4gMDsKKwlpZiAoaXQtPmVudHJ5X2NvdW50IDwgMCB8fCAhaGFzX3NoYTFfZmlsZShpdC0+c2hhMSkpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBpdC0+c3VidHJlZV9ucjsgaSsrKSB7CisJCWlmICghY2FjaGVfdHJlZV9mdWxseV92YWxpZChpdC0+ZG93bltpXS0+Y2FjaGVfdHJlZSkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX29uZShzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsCisJCSAgICAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlLAorCQkgICAgICBpbnQgZW50cmllcywKKwkJICAgICAgY29uc3QgY2hhciAqYmFzZSwKKwkJICAgICAgaW50IGJhc2VsZW4sCisJCSAgICAgIGludCAqc2tpcF9jb3VudCwKKwkJICAgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgYnVmZmVyOworCWludCBtaXNzaW5nX29rID0gZmxhZ3MgJiBXUklURV9UUkVFX01JU1NJTkdfT0s7CisJaW50IGRyeXJ1biA9IGZsYWdzICYgV1JJVEVfVFJFRV9EUllfUlVOOworCWludCByZXBhaXIgPSBmbGFncyAmIFdSSVRFX1RSRUVfUkVQQUlSOworCWludCB0b19pbnZhbGlkYXRlID0gMDsKKwlpbnQgaTsKKworCWFzc2VydCghKGRyeXJ1biAmJiByZXBhaXIpKTsKKworCSpza2lwX2NvdW50ID0gMDsKKworCWlmICgwIDw9IGl0LT5lbnRyeV9jb3VudCAmJiBoYXNfc2hhMV9maWxlKGl0LT5zaGExKSkKKwkJcmV0dXJuIGl0LT5lbnRyeV9jb3VudDsKKworCS8qCisJICogV2UgZmlyc3Qgc2NhbiBmb3Igc3VidHJlZXMgYW5kIHVwZGF0ZSB0aGVtOyB3ZSBzdGFydCBieQorCSAqIG1hcmtpbmcgZXhpc3Rpbmcgc3VidHJlZXMgLS0gdGhlIG9uZXMgdGhhdCBhcmUgdW5tYXJrZWQKKwkgKiBzaG91bGQgbm90IGJlIGluIHRoZSByZXN1bHQuCisJICovCisJZm9yIChpID0gMDsgaSA8IGl0LT5zdWJ0cmVlX25yOyBpKyspCisJCWl0LT5kb3duW2ldLT51c2VkID0gMDsKKworCS8qCisJICogRmluZCB0aGUgc3VidHJlZXMgYW5kIHVwZGF0ZSB0aGVtLgorCSAqLworCWkgPSAwOworCXdoaWxlIChpIDwgZW50cmllcykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gY2FjaGVbaV07CisJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqc3ViOworCQljb25zdCBjaGFyICpwYXRoLCAqc2xhc2g7CisJCWludCBwYXRobGVuLCBzdWJsZW4sIHN1YmNudCwgc3Vic2tpcDsKKworCQlwYXRoID0gY2UtPm5hbWU7CisJCXBhdGhsZW4gPSBjZV9uYW1lbGVuKGNlKTsKKwkJaWYgKHBhdGhsZW4gPD0gYmFzZWxlbiB8fCBtZW1jbXAoYmFzZSwgcGF0aCwgYmFzZWxlbikpCisJCQlicmVhazsgLyogYXQgdGhlIGVuZCBvZiB0aGlzIGxldmVsICovCisKKwkJc2xhc2ggPSBzdHJjaHIocGF0aCArIGJhc2VsZW4sICcvJyk7CisJCWlmICghc2xhc2gpIHsKKwkJCWkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qCisJCSAqIGEvYmJiL2MgKGJhc2UgPSBhLywgc2xhc2ggPSAvYykKKwkJICogPT0+CisJCSAqIHBhdGgrYmFzZWxlbiA9IGJiYi9jLCBzdWJsZW4gPSAzCisJCSAqLworCQlzdWJsZW4gPSBzbGFzaCAtIChwYXRoICsgYmFzZWxlbik7CisJCXN1YiA9IGZpbmRfc3VidHJlZShpdCwgcGF0aCArIGJhc2VsZW4sIHN1YmxlbiwgMSk7CisJCWlmICghc3ViLT5jYWNoZV90cmVlKQorCQkJc3ViLT5jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCQlzdWJjbnQgPSB1cGRhdGVfb25lKHN1Yi0+Y2FjaGVfdHJlZSwKKwkJCQkgICAgY2FjaGUgKyBpLCBlbnRyaWVzIC0gaSwKKwkJCQkgICAgcGF0aCwKKwkJCQkgICAgYmFzZWxlbiArIHN1YmxlbiArIDEsCisJCQkJICAgICZzdWJza2lwLAorCQkJCSAgICBmbGFncyk7CisJCWlmIChzdWJjbnQgPCAwKQorCQkJcmV0dXJuIHN1YmNudDsKKwkJaWYgKCFzdWJjbnQpCisJCQlkaWUoImluZGV4IGNhY2hlLXRyZWUgcmVjb3JkcyBlbXB0eSBzdWItdHJlZSIpOworCQlpICs9IHN1YmNudDsKKwkJc3ViLT5jb3VudCA9IHN1YmNudDsgLyogdG8gYmUgdXNlZCBpbiB0aGUgbmV4dCBsb29wICovCisJCSpza2lwX2NvdW50ICs9IHN1YnNraXA7CisJCXN1Yi0+dXNlZCA9IDE7CisJfQorCisJZGlzY2FyZF91bnVzZWRfc3VidHJlZXMoaXQpOworCisJLyoKKwkgKiBUaGVuIHdyaXRlIG91dCB0aGUgdHJlZSBvYmplY3QgZm9yIHRoaXMgbGV2ZWwuCisJICovCisJc3RyYnVmX2luaXQoJmJ1ZmZlciwgODE5Mik7CisKKwlpID0gMDsKKwl3aGlsZSAoaSA8IGVudHJpZXMpIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGNhY2hlW2ldOworCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKnN1YjsKKwkJY29uc3QgY2hhciAqcGF0aCwgKnNsYXNoOworCQlpbnQgcGF0aGxlbiwgZW50bGVuOworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCQl1bnNpZ25lZCBtb2RlOworCQlpbnQgZXhwZWN0ZWRfbWlzc2luZyA9IDA7CisKKwkJcGF0aCA9IGNlLT5uYW1lOworCQlwYXRobGVuID0gY2VfbmFtZWxlbihjZSk7CisJCWlmIChwYXRobGVuIDw9IGJhc2VsZW4gfHwgbWVtY21wKGJhc2UsIHBhdGgsIGJhc2VsZW4pKQorCQkJYnJlYWs7IC8qIGF0IHRoZSBlbmQgb2YgdGhpcyBsZXZlbCAqLworCisJCXNsYXNoID0gc3RyY2hyKHBhdGggKyBiYXNlbGVuLCAnLycpOworCQlpZiAoc2xhc2gpIHsKKwkJCWVudGxlbiA9IHNsYXNoIC0gKHBhdGggKyBiYXNlbGVuKTsKKwkJCXN1YiA9IGZpbmRfc3VidHJlZShpdCwgcGF0aCArIGJhc2VsZW4sIGVudGxlbiwgMCk7CisJCQlpZiAoIXN1YikKKwkJCQlkaWUoImNhY2hlLXRyZWUuYzogJyUuKnMnIGluICclcycgbm90IGZvdW5kIiwKKwkJCQkgICAgZW50bGVuLCBwYXRoICsgYmFzZWxlbiwgcGF0aCk7CisJCQlpICs9IHN1Yi0+Y291bnQ7CisJCQlzaGExID0gc3ViLT5jYWNoZV90cmVlLT5zaGExOworCQkJbW9kZSA9IFNfSUZESVI7CisJCQlpZiAoc3ViLT5jYWNoZV90cmVlLT5lbnRyeV9jb3VudCA8IDApIHsKKwkJCQl0b19pbnZhbGlkYXRlID0gMTsKKwkJCQlleHBlY3RlZF9taXNzaW5nID0gMTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCXNoYTEgPSBjZS0+c2hhMTsKKwkJCW1vZGUgPSBjZS0+Y2VfbW9kZTsKKwkJCWVudGxlbiA9IHBhdGhsZW4gLSBiYXNlbGVuOworCQkJaSsrOworCQl9CisJCWlmIChtb2RlICE9IFNfSUZHSVRMSU5LICYmICFtaXNzaW5nX29rICYmICFoYXNfc2hhMV9maWxlKHNoYTEpKSB7CisJCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwkJCWlmIChleHBlY3RlZF9taXNzaW5nKQorCQkJCXJldHVybiAtMTsKKwkJCXJldHVybiBlcnJvcigiaW52YWxpZCBvYmplY3QgJTA2byAlcyBmb3IgJyUuKnMnIiwKKwkJCQltb2RlLCBzaGExX3RvX2hleChzaGExKSwgZW50bGVuK2Jhc2VsZW4sIHBhdGgpOworCQl9CisKKwkJLyoKKwkJICogQ0VfUkVNT1ZFIGVudHJpZXMgYXJlIHJlbW92ZWQgYmVmb3JlIHRoZSBpbmRleCBpcworCQkgKiB3cml0dGVuIHRvIGRpc2suIFNraXAgdGhlbSB0byByZW1haW4gY29uc2lzdGVudAorCQkgKiB3aXRoIHRoZSBmdXR1cmUgb24tZGlzayBpbmRleC4KKwkJICovCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpIHsKKwkJCSpza2lwX2NvdW50ID0gKnNraXBfY291bnQgKyAxOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBDRV9JTlRFTlRfVE9fQUREIGVudHJpZXMgZXhpc3Qgb24gb24tZGlzayBpbmRleCBidXQKKwkJICogdGhleSBhcmUgbm90IHBhcnQgb2YgZ2VuZXJhdGVkIHRyZWVzLiBJbnZhbGlkYXRlIHVwCisJCSAqIHRvIHJvb3QgdG8gZm9yY2UgY2FjaGUtdHJlZSB1c2VycyB0byByZWFkIGVsc2V3aGVyZS4KKwkJICovCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9JTlRFTlRfVE9fQUREKSB7CisJCQl0b19pbnZhbGlkYXRlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RyYnVmX2dyb3coJmJ1ZmZlciwgZW50bGVuICsgMTAwKTsKKwkJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgIiVvICUuKnMlYyIsIG1vZGUsIGVudGxlbiwgcGF0aCArIGJhc2VsZW4sICdcMCcpOworCQlzdHJidWZfYWRkKCZidWZmZXIsIHNoYTEsIDIwKTsKKworI2lmIERFQlVHCisJCWZwcmludGYoc3RkZXJyLCAiY2FjaGUtdHJlZSB1cGRhdGUtb25lICVvICUuKnNcbiIsCisJCQltb2RlLCBlbnRsZW4sIHBhdGggKyBiYXNlbGVuKTsKKyNlbmRpZgorCX0KKworCWlmIChyZXBhaXIpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaGFzaF9zaGExX2ZpbGUoYnVmZmVyLmJ1ZiwgYnVmZmVyLmxlbiwgdHJlZV90eXBlLCBzaGExKTsKKwkJaWYgKGhhc19zaGExX2ZpbGUoc2hhMSkpCisJCQloYXNoY3B5KGl0LT5zaGExLCBzaGExKTsKKwkJZWxzZQorCQkJdG9faW52YWxpZGF0ZSA9IDE7CisJfSBlbHNlIGlmIChkcnlydW4pCisJCWhhc2hfc2hhMV9maWxlKGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4sIHRyZWVfdHlwZSwgaXQtPnNoYTEpOworCWVsc2UgaWYgKHdyaXRlX3NoYTFfZmlsZShidWZmZXIuYnVmLCBidWZmZXIubGVuLCB0cmVlX3R5cGUsIGl0LT5zaGExKSkgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCWl0LT5lbnRyeV9jb3VudCA9IHRvX2ludmFsaWRhdGUgPyAtMSA6IGkgLSAqc2tpcF9jb3VudDsKKyNpZiBERUJVRworCWZwcmludGYoc3RkZXJyLCAiY2FjaGUtdHJlZSB1cGRhdGUtb25lICglZCBlbnQsICVkIHN1YnRyZWUpICVzXG4iLAorCQlpdC0+ZW50cnlfY291bnQsIGl0LT5zdWJ0cmVlX25yLAorCQlzaGExX3RvX2hleChpdC0+c2hhMSkpOworI2VuZGlmCisJcmV0dXJuIGk7Cit9CisKK2ludCBjYWNoZV90cmVlX3VwZGF0ZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBjYWNoZV90cmVlICppdCA9IGlzdGF0ZS0+Y2FjaGVfdHJlZTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZSA9IGlzdGF0ZS0+Y2FjaGU7CisJaW50IGVudHJpZXMgPSBpc3RhdGUtPmNhY2hlX25yOworCWludCBza2lwLCBpID0gdmVyaWZ5X2NhY2hlKGNhY2hlLCBlbnRyaWVzLCBmbGFncyk7CisKKwlpZiAoaSkKKwkJcmV0dXJuIGk7CisJaSA9IHVwZGF0ZV9vbmUoaXQsIGNhY2hlLCBlbnRyaWVzLCAiIiwgMCwgJnNraXAsIGZsYWdzKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiBpOworCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBDQUNIRV9UUkVFX0NIQU5HRUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX29uZShzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIHN0cnVjdCBjYWNoZV90cmVlICppdCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLCBpbnQgcGF0aGxlbikKK3sKKwlpbnQgaTsKKworCS8qIE9uZSAiY2FjaGUtdHJlZSIgZW50cnkgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZzoKKwkgKiBwYXRoIChOVUwgdGVybWluYXRlZCkKKwkgKiBlbnRyeV9jb3VudCwgc3VidHJlZV9uciAoIiVkICVkXG4iKQorCSAqIHRyZWUtc2hhMSAobWlzc2luZyBpZiBpbnZhbGlkKQorCSAqIHN1YnRyZWVfbnIgImNhY2hlLXRyZWUiIGVudHJpZXMgZm9yIHN1YnRyZWVzLgorCSAqLworCXN0cmJ1Zl9ncm93KGJ1ZmZlciwgcGF0aGxlbiArIDEwMCk7CisJc3RyYnVmX2FkZChidWZmZXIsIHBhdGgsIHBhdGhsZW4pOworCXN0cmJ1Zl9hZGRmKGJ1ZmZlciwgIiVjJWQgJWRcbiIsIDAsIGl0LT5lbnRyeV9jb3VudCwgaXQtPnN1YnRyZWVfbnIpOworCisjaWYgREVCVUcKKwlpZiAoMCA8PSBpdC0+ZW50cnlfY291bnQpCisJCWZwcmludGYoc3RkZXJyLCAiY2FjaGUtdHJlZSA8JS4qcz4gKCVkIGVudCwgJWQgc3VidHJlZSkgJXNcbiIsCisJCQlwYXRobGVuLCBwYXRoLCBpdC0+ZW50cnlfY291bnQsIGl0LT5zdWJ0cmVlX25yLAorCQkJc2hhMV90b19oZXgoaXQtPnNoYTEpKTsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCAiY2FjaGUtdHJlZSA8JS4qcz4gKCVkIHN1YnRyZWUpIGludmFsaWRcbiIsCisJCQlwYXRobGVuLCBwYXRoLCBpdC0+c3VidHJlZV9ucik7CisjZW5kaWYKKworCWlmICgwIDw9IGl0LT5lbnRyeV9jb3VudCkgeworCQlzdHJidWZfYWRkKGJ1ZmZlciwgaXQtPnNoYTEsIDIwKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGl0LT5zdWJ0cmVlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpkb3duID0gaXQtPmRvd25baV07CisJCWlmIChpKSB7CisJCQlzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKnByZXYgPSBpdC0+ZG93bltpLTFdOworCQkJaWYgKHN1YnRyZWVfbmFtZV9jbXAoZG93bi0+bmFtZSwgZG93bi0+bmFtZWxlbiwKKwkJCQkJICAgICBwcmV2LT5uYW1lLCBwcmV2LT5uYW1lbGVuKSA8PSAwKQorCQkJCWRpZSgiZmF0YWwgLSB1bnNvcnRlZCBjYWNoZSBzdWJ0cmVlIik7CisJCX0KKwkJd3JpdGVfb25lKGJ1ZmZlciwgZG93bi0+Y2FjaGVfdHJlZSwgZG93bi0+bmFtZSwgZG93bi0+bmFtZWxlbik7CisJfQorfQorCit2b2lkIGNhY2hlX3RyZWVfd3JpdGUoc3RydWN0IHN0cmJ1ZiAqc2IsIHN0cnVjdCBjYWNoZV90cmVlICpyb290KQoreworCXdyaXRlX29uZShzYiwgcm9vdCwgIiIsIDApOworfQorCitzdGF0aWMgc3RydWN0IGNhY2hlX3RyZWUgKnJlYWRfb25lKGNvbnN0IGNoYXIgKipidWZmZXIsIHVuc2lnbmVkIGxvbmcgKnNpemVfcCkKK3sKKwljb25zdCBjaGFyICpidWYgPSAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9ICpzaXplX3A7CisJY29uc3QgY2hhciAqY3A7CisJY2hhciAqZXA7CisJc3RydWN0IGNhY2hlX3RyZWUgKml0OworCWludCBpLCBzdWJ0cmVlX25yOworCisJaXQgPSBOVUxMOworCS8qIHNraXAgbmFtZSwgYnV0IG1ha2Ugc3VyZSBuYW1lIGV4aXN0cyAqLworCXdoaWxlIChzaXplICYmICpidWYpIHsKKwkJc2l6ZS0tOworCQlidWYrKzsKKwl9CisJaWYgKCFzaXplKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCWJ1ZisrOyBzaXplLS07CisJaXQgPSBjYWNoZV90cmVlKCk7CisKKwljcCA9IGJ1ZjsKKwlpdC0+ZW50cnlfY291bnQgPSBzdHJ0b2woY3AsICZlcCwgMTApOworCWlmIChjcCA9PSBlcCkKKwkJZ290byBmcmVlX3JldHVybjsKKwljcCA9IGVwOworCXN1YnRyZWVfbnIgPSBzdHJ0b2woY3AsICZlcCwgMTApOworCWlmIChjcCA9PSBlcCkKKwkJZ290byBmcmVlX3JldHVybjsKKwl3aGlsZSAoc2l6ZSAmJiAqYnVmICYmICpidWYgIT0gJ1xuJykgeworCQlzaXplLS07CisJCWJ1ZisrOworCX0KKwlpZiAoIXNpemUpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJYnVmKys7IHNpemUtLTsKKwlpZiAoMCA8PSBpdC0+ZW50cnlfY291bnQpIHsKKwkJaWYgKHNpemUgPCAyMCkKKwkJCWdvdG8gZnJlZV9yZXR1cm47CisJCWhhc2hjcHkoaXQtPnNoYTEsIChjb25zdCB1bnNpZ25lZCBjaGFyKilidWYpOworCQlidWYgKz0gMjA7CisJCXNpemUgLT0gMjA7CisJfQorCisjaWYgREVCVUcKKwlpZiAoMCA8PSBpdC0+ZW50cnlfY291bnQpCisJCWZwcmludGYoc3RkZXJyLCAiY2FjaGUtdHJlZSA8JXM+ICglZCBlbnQsICVkIHN1YnRyZWUpICVzXG4iLAorCQkJKmJ1ZmZlciwgaXQtPmVudHJ5X2NvdW50LCBzdWJ0cmVlX25yLAorCQkJc2hhMV90b19oZXgoaXQtPnNoYTEpKTsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCAiY2FjaGUtdHJlZSA8JXM+ICglZCBzdWJ0cmVlcykgaW52YWxpZFxuIiwKKwkJCSpidWZmZXIsIHN1YnRyZWVfbnIpOworI2VuZGlmCisKKwkvKgorCSAqIEp1c3QgYSBoZXVyaXN0aWMgLS0gd2UgZG8gbm90IGFkZCBkaXJlY3RvcmllcyB0aGF0IG9mdGVuIGJ1dAorCSAqIHdlIGRvIG5vdCB3YW50IHRvIGhhdmUgdG8gZXh0ZW5kIGl0IGltbWVkaWF0ZWx5IHdoZW4gd2UgZG8sCisJICogaGVuY2UgKzIuCisJICovCisJaXQtPnN1YnRyZWVfYWxsb2MgPSBzdWJ0cmVlX25yICsgMjsKKwlpdC0+ZG93biA9IHhjYWxsb2MoaXQtPnN1YnRyZWVfYWxsb2MsIHNpemVvZihzdHJ1Y3QgY2FjaGVfdHJlZV9zdWIgKikpOworCWZvciAoaSA9IDA7IGkgPCBzdWJ0cmVlX25yOyBpKyspIHsKKwkJLyogcmVhZCBlYWNoIHN1YnRyZWUgKi8KKwkJc3RydWN0IGNhY2hlX3RyZWUgKnN1YjsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzdWJ0cmVlOworCQljb25zdCBjaGFyICpuYW1lID0gYnVmOworCisJCXN1YiA9IHJlYWRfb25lKCZidWYsICZzaXplKTsKKwkJaWYgKCFzdWIpCisJCQlnb3RvIGZyZWVfcmV0dXJuOworCQlzdWJ0cmVlID0gY2FjaGVfdHJlZV9zdWIoaXQsIG5hbWUpOworCQlzdWJ0cmVlLT5jYWNoZV90cmVlID0gc3ViOworCX0KKwlpZiAoc3VidHJlZV9uciAhPSBpdC0+c3VidHJlZV9ucikKKwkJZGllKCJjYWNoZS10cmVlOiBpbnRlcm5hbCBlcnJvciIpOworCSpidWZmZXIgPSBidWY7CisJKnNpemVfcCA9IHNpemU7CisJcmV0dXJuIGl0OworCisgZnJlZV9yZXR1cm46CisJY2FjaGVfdHJlZV9mcmVlKCZpdCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlX3JlYWQoY29uc3QgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKGJ1ZmZlclswXSkKKwkJcmV0dXJuIE5VTEw7IC8qIG5vdCB0aGUgd2hvbGUgdHJlZSAqLworCXJldHVybiByZWFkX29uZSgmYnVmZmVyLCAmc2l6ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfdHJlZSAqY2FjaGVfdHJlZV9maW5kKHN0cnVjdCBjYWNoZV90cmVlICppdCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoIWl0KQorCQlyZXR1cm4gTlVMTDsKKwl3aGlsZSAoKnBhdGgpIHsKKwkJY29uc3QgY2hhciAqc2xhc2g7CisJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqc3ViOworCisJCXNsYXNoID0gc3RyY2hybnVsKHBhdGgsICcvJyk7CisJCS8qCisJCSAqIEJldHdlZW4gcGF0aCBhbmQgc2xhc2ggaXMgdGhlIG5hbWUgb2YgdGhlIHN1YnRyZWUKKwkJICogdG8gbG9vayBmb3IuCisJCSAqLworCQlzdWIgPSBmaW5kX3N1YnRyZWUoaXQsIHBhdGgsIHNsYXNoIC0gcGF0aCwgMCk7CisJCWlmICghc3ViKQorCQkJcmV0dXJuIE5VTEw7CisJCWl0ID0gc3ViLT5jYWNoZV90cmVlOworCisJCXBhdGggPSBzbGFzaDsKKwkJd2hpbGUgKCpwYXRoID09ICcvJykKKwkJCXBhdGgrKzsKKwl9CisJcmV0dXJuIGl0OworfQorCitpbnQgd3JpdGVfaW5kZXhfYXNfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4X3N0YXRlLCBjb25zdCBjaGFyICppbmRleF9wYXRoLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgZW50cmllcywgd2FzX3ZhbGlkLCBuZXdmZDsKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrX2ZpbGU7CisKKwkvKgorCSAqIFdlIGNhbid0IGZyZWUgdGhpcyBtZW1vcnksIGl0IGJlY29tZXMgcGFydCBvZiBhIGxpbmtlZCBsaXN0CisJICogcGFyc2VkIGF0ZXhpdCgpCisJICovCisJbG9ja19maWxlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOworCisJbmV3ZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKGxvY2tfZmlsZSwgaW5kZXhfcGF0aCwgTE9DS19ESUVfT05fRVJST1IpOworCisJZW50cmllcyA9IHJlYWRfaW5kZXhfZnJvbShpbmRleF9zdGF0ZSwgaW5kZXhfcGF0aCk7CisJaWYgKGVudHJpZXMgPCAwKQorCQlyZXR1cm4gV1JJVEVfVFJFRV9VTlJFQURBQkxFX0lOREVYOworCWlmIChmbGFncyAmIFdSSVRFX1RSRUVfSUdOT1JFX0NBQ0hFX1RSRUUpCisJCWNhY2hlX3RyZWVfZnJlZSgmaW5kZXhfc3RhdGUtPmNhY2hlX3RyZWUpOworCisJaWYgKCFpbmRleF9zdGF0ZS0+Y2FjaGVfdHJlZSkKKwkJaW5kZXhfc3RhdGUtPmNhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CisKKwl3YXNfdmFsaWQgPSBjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKGluZGV4X3N0YXRlLT5jYWNoZV90cmVlKTsKKwlpZiAoIXdhc192YWxpZCkgeworCQlpZiAoY2FjaGVfdHJlZV91cGRhdGUoaW5kZXhfc3RhdGUsIGZsYWdzKSA8IDApCisJCQlyZXR1cm4gV1JJVEVfVFJFRV9VTk1FUkdFRF9JTkRFWDsKKwkJaWYgKDAgPD0gbmV3ZmQpIHsKKwkJCWlmICghd3JpdGVfbG9ja2VkX2luZGV4KGluZGV4X3N0YXRlLCBsb2NrX2ZpbGUsIENPTU1JVF9MT0NLKSkKKwkJCQluZXdmZCA9IC0xOworCQl9CisJCS8qIE5vdCBiZWluZyBhYmxlIHRvIHdyaXRlIGlzIGZpbmUgLS0gd2UgYXJlIG9ubHkgaW50ZXJlc3RlZAorCQkgKiBpbiB1cGRhdGluZyB0aGUgY2FjaGUtdHJlZSBwYXJ0LCBhbmQgaWYgdGhlIG5leHQgY2FsbGVyCisJCSAqIGVuZHMgdXAgdXNpbmcgdGhlIG9sZCBpbmRleCB3aXRoIHVudXBkYXRlZCBjYWNoZS10cmVlIHBhcnQKKwkJICogaXQgbWlzc2VzIHRoZSB3b3JrIHdlIGRpZCBoZXJlLCBidXQgdGhhdCBpcyBqdXN0IGEKKwkJICogcGVyZm9ybWFuY2UgcGVuYWx0eSBhbmQgbm90IGEgYmlnIGRlYWwuCisJCSAqLworCX0KKworCWlmIChwcmVmaXgpIHsKKwkJc3RydWN0IGNhY2hlX3RyZWUgKnN1YnRyZWU7CisJCXN1YnRyZWUgPSBjYWNoZV90cmVlX2ZpbmQoaW5kZXhfc3RhdGUtPmNhY2hlX3RyZWUsIHByZWZpeCk7CisJCWlmICghc3VidHJlZSkKKwkJCXJldHVybiBXUklURV9UUkVFX1BSRUZJWF9FUlJPUjsKKwkJaGFzaGNweShzaGExLCBzdWJ0cmVlLT5zaGExKTsKKwl9CisJZWxzZQorCQloYXNoY3B5KHNoYTEsIGluZGV4X3N0YXRlLT5jYWNoZV90cmVlLT5zaGExKTsKKworCWlmICgwIDw9IG5ld2ZkKQorCQlyb2xsYmFja19sb2NrX2ZpbGUobG9ja19maWxlKTsKKworCXJldHVybiAwOworfQorCitpbnQgd3JpdGVfY2FjaGVfYXNfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlyZXR1cm4gd3JpdGVfaW5kZXhfYXNfdHJlZShzaGExLCAmdGhlX2luZGV4LCBnZXRfaW5kZXhfZmlsZSgpLCBmbGFncywgcHJlZml4KTsKK30KKworc3RhdGljIHZvaWQgcHJpbWVfY2FjaGVfdHJlZV9yZWMoc3RydWN0IGNhY2hlX3RyZWUgKml0LCBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IGNudDsKKworCWhhc2hjcHkoaXQtPnNoYTEsIHRyZWUtPm9iamVjdC5zaGExKTsKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwljbnQgPSAwOworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCWlmICghU19JU0RJUihlbnRyeS5tb2RlKSkKKwkJCWNudCsrOworCQllbHNlIHsKKwkJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqc3ViOworCQkJc3RydWN0IHRyZWUgKnN1YnRyZWUgPSBsb29rdXBfdHJlZShlbnRyeS5zaGExKTsKKwkJCWlmICghc3VidHJlZS0+b2JqZWN0LnBhcnNlZCkKKwkJCQlwYXJzZV90cmVlKHN1YnRyZWUpOworCQkJc3ViID0gY2FjaGVfdHJlZV9zdWIoaXQsIGVudHJ5LnBhdGgpOworCQkJc3ViLT5jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCQkJcHJpbWVfY2FjaGVfdHJlZV9yZWMoc3ViLT5jYWNoZV90cmVlLCBzdWJ0cmVlKTsKKwkJCWNudCArPSBzdWItPmNhY2hlX3RyZWUtPmVudHJ5X2NvdW50OworCQl9CisJfQorCWl0LT5lbnRyeV9jb3VudCA9IGNudDsKK30KKwordm9pZCBwcmltZV9jYWNoZV90cmVlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwljYWNoZV90cmVlX2ZyZWUoJmlzdGF0ZS0+Y2FjaGVfdHJlZSk7CisJaXN0YXRlLT5jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCXByaW1lX2NhY2hlX3RyZWVfcmVjKGlzdGF0ZS0+Y2FjaGVfdHJlZSwgdHJlZSk7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IENBQ0hFX1RSRUVfQ0hBTkdFRDsKK30KKworLyoKKyAqIGZpbmQgdGhlIGNhY2hlX3RyZWUgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBsZXZlbCB3aXRob3V0CisgKiBleHBsb2RpbmcgdGhlIGZ1bGwgcGF0aCBpbnRvIHRleHR1YWwgZm9ybS4gIFRoZSByb290IG9mIHRoZQorICogY2FjaGUgdHJlZSBpcyBnaXZlbiBhcyAicm9vdCIsIGFuZCBvdXIgY3VycmVudCBsZXZlbCBpcyAiaW5mbyIuCisgKiAoMSkgV2hlbiBhdCByb290IGxldmVsLCBpbmZvLT5wcmV2IGlzIE5VTEwsIHNvIGl0IGlzICJyb290IiBpdHNlbGYuCisgKiAoMikgT3RoZXJ3aXNlLCBmaW5kIHRoZSBjYWNoZV90cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gb25lIGxldmVsCisgKiAgICAgYWJvdmUgdXMsIGFuZCBmaW5kIG91cnNlbHZlcyBpbiB0aGVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBjYWNoZV90cmVlICpmaW5kX2NhY2hlX3RyZWVfZnJvbV90cmF2ZXJzYWwoc3RydWN0IGNhY2hlX3RyZWUgKnJvb3QsCisJCQkJCQkJIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBjYWNoZV90cmVlICpvdXJfcGFyZW50OworCisJaWYgKCFpbmZvLT5wcmV2KQorCQlyZXR1cm4gcm9vdDsKKwlvdXJfcGFyZW50ID0gZmluZF9jYWNoZV90cmVlX2Zyb21fdHJhdmVyc2FsKHJvb3QsIGluZm8tPnByZXYpOworCXJldHVybiBjYWNoZV90cmVlX2ZpbmQob3VyX3BhcmVudCwgaW5mby0+bmFtZS5wYXRoKTsKK30KKworaW50IGNhY2hlX3RyZWVfbWF0Y2hlc190cmF2ZXJzYWwoc3RydWN0IGNhY2hlX3RyZWUgKnJvb3QsCisJCQkJIHN0cnVjdCBuYW1lX2VudHJ5ICplbnQsCisJCQkJIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvKQoreworCXN0cnVjdCBjYWNoZV90cmVlICppdDsKKworCWl0ID0gZmluZF9jYWNoZV90cmVlX2Zyb21fdHJhdmVyc2FsKHJvb3QsIGluZm8pOworCWl0ID0gY2FjaGVfdHJlZV9maW5kKGl0LCBlbnQtPnBhdGgpOworCWlmIChpdCAmJiBpdC0+ZW50cnlfY291bnQgPiAwICYmICFoYXNoY21wKGVudC0+c2hhMSwgaXQtPnNoYTEpKQorCQlyZXR1cm4gaXQtPmVudHJ5X2NvdW50OworCXJldHVybiAwOworfQorCitpbnQgdXBkYXRlX21haW5fY2FjaGVfdHJlZShpbnQgZmxhZ3MpCit7CisJaWYgKCF0aGVfaW5kZXguY2FjaGVfdHJlZSkKKwkJdGhlX2luZGV4LmNhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CisJcmV0dXJuIGNhY2hlX3RyZWVfdXBkYXRlKCZ0aGVfaW5kZXgsIGZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2NhY2hlLXRyZWUuaCBiL2NhY2hlLXRyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWM1NzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvY2FjaGUtdHJlZS5oCkBAIC0wLDAgKzEsNTUgQEAKKyNpZm5kZWYgQ0FDSEVfVFJFRV9ICisjZGVmaW5lIENBQ0hFX1RSRUVfSAorCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorCitzdHJ1Y3QgY2FjaGVfdHJlZTsKK3N0cnVjdCBjYWNoZV90cmVlX3N1YiB7CisJc3RydWN0IGNhY2hlX3RyZWUgKmNhY2hlX3RyZWU7CisJaW50IGNvdW50OwkJLyogaW50ZXJuYWxseSB1c2VkIGJ5IHVwZGF0ZV9vbmUoKSAqLworCWludCBuYW1lbGVuOworCWludCB1c2VkOworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsKK307CisKK3N0cnVjdCBjYWNoZV90cmVlIHsKKwlpbnQgZW50cnlfY291bnQ7IC8qIG5lZ2F0aXZlIG1lYW5zICJpbnZhbGlkIiAqLworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IHN1YnRyZWVfbnI7CisJaW50IHN1YnRyZWVfYWxsb2M7CisJc3RydWN0IGNhY2hlX3RyZWVfc3ViICoqZG93bjsKK307CisKK3N0cnVjdCBjYWNoZV90cmVlICpjYWNoZV90cmVlKHZvaWQpOwordm9pZCBjYWNoZV90cmVlX2ZyZWUoc3RydWN0IGNhY2hlX3RyZWUgKiopOwordm9pZCBjYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqKTsKK3N0cnVjdCBjYWNoZV90cmVlX3N1YiAqY2FjaGVfdHJlZV9zdWIoc3RydWN0IGNhY2hlX3RyZWUgKiwgY29uc3QgY2hhciAqKTsKKwordm9pZCBjYWNoZV90cmVlX3dyaXRlKHN0cnVjdCBzdHJidWYgKiwgc3RydWN0IGNhY2hlX3RyZWUgKnJvb3QpOworc3RydWN0IGNhY2hlX3RyZWUgKmNhY2hlX3RyZWVfcmVhZChjb25zdCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKK2ludCBjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKHN0cnVjdCBjYWNoZV90cmVlICopOworaW50IGNhY2hlX3RyZWVfdXBkYXRlKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBpbnQpOworCitpbnQgdXBkYXRlX21haW5fY2FjaGVfdHJlZShpbnQpOworCisvKiBiaXRtYXNrcyB0byB3cml0ZV9jYWNoZV9hc190cmVlIGZsYWdzICovCisjZGVmaW5lIFdSSVRFX1RSRUVfTUlTU0lOR19PSyAxCisjZGVmaW5lIFdSSVRFX1RSRUVfSUdOT1JFX0NBQ0hFX1RSRUUgMgorI2RlZmluZSBXUklURV9UUkVFX0RSWV9SVU4gNAorI2RlZmluZSBXUklURV9UUkVFX1NJTEVOVCA4CisjZGVmaW5lIFdSSVRFX1RSRUVfUkVQQUlSIDE2CisKKy8qIGVycm9yIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBXUklURV9UUkVFX1VOUkVBREFCTEVfSU5ERVggKC0xKQorI2RlZmluZSBXUklURV9UUkVFX1VOTUVSR0VEX0lOREVYICgtMikKKyNkZWZpbmUgV1JJVEVfVFJFRV9QUkVGSVhfRVJST1IgKC0zKQorCitpbnQgd3JpdGVfaW5kZXhfYXNfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4X3N0YXRlLCBjb25zdCBjaGFyICppbmRleF9wYXRoLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKnByZWZpeCk7CitpbnQgd3JpdGVfY2FjaGVfYXNfdHJlZSh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKnByZWZpeCk7Cit2b2lkIHByaW1lX2NhY2hlX3RyZWUoc3RydWN0IGluZGV4X3N0YXRlICosIHN0cnVjdCB0cmVlICopOworCitleHRlcm4gaW50IGNhY2hlX3RyZWVfbWF0Y2hlc190cmF2ZXJzYWwoc3RydWN0IGNhY2hlX3RyZWUgKiwgc3RydWN0IG5hbWVfZW50cnkgKmVudCwgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NhY2hlLmggYi9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYTBiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9jYWNoZS5oCkBAIC0wLDAgKzEsMTc1MCBAQAorI2lmbmRlZiBDQUNIRV9ICisjZGVmaW5lIENBQ0hFX0gKKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJhZHZpY2UuaCIKKyNpbmNsdWRlICJnZXR0ZXh0LmgiCisjaW5jbHVkZSAiY29udmVydC5oIgorI2luY2x1ZGUgInRyYWNlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworI2luY2x1ZGUgU0hBMV9IRUFERVIKKyNpZm5kZWYgZ2l0X1NIQV9DVFgKKyNkZWZpbmUgZ2l0X1NIQV9DVFgJU0hBX0NUWAorI2RlZmluZSBnaXRfU0hBMV9Jbml0CVNIQTFfSW5pdAorI2RlZmluZSBnaXRfU0hBMV9VcGRhdGUJU0hBMV9VcGRhdGUKKyNkZWZpbmUgZ2l0X1NIQTFfRmluYWwJU0hBMV9GaW5hbAorI2VuZGlmCisKKyNpbmNsdWRlIDx6bGliLmg+Cit0eXBlZGVmIHN0cnVjdCBnaXRfenN0cmVhbSB7CisJel9zdHJlYW0gejsKKwl1bnNpZ25lZCBsb25nIGF2YWlsX2luOworCXVuc2lnbmVkIGxvbmcgYXZhaWxfb3V0OworCXVuc2lnbmVkIGxvbmcgdG90YWxfaW47CisJdW5zaWduZWQgbG9uZyB0b3RhbF9vdXQ7CisJdW5zaWduZWQgY2hhciAqbmV4dF9pbjsKKwl1bnNpZ25lZCBjaGFyICpuZXh0X291dDsKK30gZ2l0X3pzdHJlYW07CisKK3ZvaWQgZ2l0X2luZmxhdGVfaW5pdChnaXRfenN0cmVhbSAqKTsKK3ZvaWQgZ2l0X2luZmxhdGVfaW5pdF9nemlwX29ubHkoZ2l0X3pzdHJlYW0gKik7Cit2b2lkIGdpdF9pbmZsYXRlX2VuZChnaXRfenN0cmVhbSAqKTsKK2ludCBnaXRfaW5mbGF0ZShnaXRfenN0cmVhbSAqLCBpbnQgZmx1c2gpOworCit2b2lkIGdpdF9kZWZsYXRlX2luaXQoZ2l0X3pzdHJlYW0gKiwgaW50IGxldmVsKTsKK3ZvaWQgZ2l0X2RlZmxhdGVfaW5pdF9nemlwKGdpdF96c3RyZWFtICosIGludCBsZXZlbCk7Cit2b2lkIGdpdF9kZWZsYXRlX2luaXRfcmF3KGdpdF96c3RyZWFtICosIGludCBsZXZlbCk7Cit2b2lkIGdpdF9kZWZsYXRlX2VuZChnaXRfenN0cmVhbSAqKTsKK2ludCBnaXRfZGVmbGF0ZV9hYm9ydChnaXRfenN0cmVhbSAqKTsKK2ludCBnaXRfZGVmbGF0ZV9lbmRfZ2VudGx5KGdpdF96c3RyZWFtICopOworaW50IGdpdF9kZWZsYXRlKGdpdF96c3RyZWFtICosIGludCBmbHVzaCk7Cit1bnNpZ25lZCBsb25nIGdpdF9kZWZsYXRlX2JvdW5kKGdpdF96c3RyZWFtICosIHVuc2lnbmVkIGxvbmcpOworCisvKiBUaGUgbGVuZ3RoIGluIGJ5dGVzIGFuZCBpbiBoZXggZGlnaXRzIG9mIGFuIG9iamVjdCBuYW1lIChTSEEtMSB2YWx1ZSkuICovCisjZGVmaW5lIEdJVF9TSEExX1JBV1NaIDIwCisjZGVmaW5lIEdJVF9TSEExX0hFWFNaICgyICogR0lUX1NIQTFfUkFXU1opCisKK3N0cnVjdCBvYmplY3RfaWQgeworCXVuc2lnbmVkIGNoYXIgaGFzaFtHSVRfU0hBMV9SQVdTWl07Cit9OworCisjaWYgZGVmaW5lZChEVF9VTktOT1dOKSAmJiAhZGVmaW5lZChOT19EX1RZUEVfSU5fRElSRU5UKQorI2RlZmluZSBEVFlQRShkZSkJKChkZSktPmRfdHlwZSkKKyNlbHNlCisjdW5kZWYgRFRfVU5LTk9XTgorI3VuZGVmIERUX0RJUgorI3VuZGVmIERUX1JFRworI3VuZGVmIERUX0xOSworI2RlZmluZSBEVF9VTktOT1dOCTAKKyNkZWZpbmUgRFRfRElSCQkxCisjZGVmaW5lIERUX1JFRwkJMgorI2RlZmluZSBEVF9MTksJCTMKKyNkZWZpbmUgRFRZUEUoZGUpCURUX1VOS05PV04KKyNlbmRpZgorCisvKiB1bmtub3duIG1vZGUgKGltcG9zc2libGUgY29tYmluYXRpb24gU19JRklGT3xTX0lGQ0hSKSAqLworI2RlZmluZSBTX0lGSU5WQUxJRCAgICAgMDAzMDAwMAorCisvKgorICogQSAiZGlyZWN0b3J5IGxpbmsiIGlzIGEgbGluayB0byBhbm90aGVyIGdpdCBkaXJlY3RvcnkuCisgKgorICogVGhlIHZhbHVlIDAxNjAwMDAgaXMgbm90IG5vcm1hbGx5IGEgdmFsaWQgbW9kZSwgYW5kCisgKiBhbHNvIGp1c3QgaGFwcGVucyB0byBiZSBTX0lGRElSICsgU19JRkxOSworICovCisjZGVmaW5lIFNfSUZHSVRMSU5LCTAxNjAwMDAKKyNkZWZpbmUgU19JU0dJVExJTksobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZHSVRMSU5LKQorCisvKgorICogU29tZSBtb2RlIGJpdHMgYXJlIGFsc28gdXNlZCBpbnRlcm5hbGx5IGZvciBjb21wdXRhdGlvbnMuCisgKgorICogVGhleSAqbXVzdCogbm90IG92ZXJsYXAgd2l0aCBhbnkgdmFsaWQgbW9kZXMsIGFuZCB0aGV5ICptdXN0KiBub3QgYmUgZW1pdHRlZAorICogdG8gb3V0c2lkZSB3b3JsZCAtIGkuZS4gYXBwZWFyIG9uIGRpc2sgb3IgbmV0d29yay4gSW4gb3RoZXIgd29yZHMsIGl0J3MganVzdAorICogdGVtcG9yYXJ5IGZpZWxkcywgd2hpY2ggd2UgaW50ZXJuYWxseSB1c2UsIGJ1dCB0aGV5IGhhdmUgdG8gc3RheSBpbi1ob3VzZS4KKyAqCisgKiAoIHN1Y2ggYXBwcm9hY2ggaXMgdmFsaWQsIGFzIHN0YW5kYXJkIFNfSUYqIGZpdHMgaW50byAxNiBiaXRzLCBhbmQgaW4gR2l0CisgKiAgIGNvZGViYXNlIG1vZGUgaXMgYHVuc2lnbmVkIGludGAgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSBhdCBsZWFzdCAzMiBiaXRzICkKKyAqLworCisvKiB1c2VkIGludGVybmFsbHkgaW4gdHJlZS1kaWZmICovCisjZGVmaW5lIFNfRElGRlRSRUVfSUZYTUlOX05FUQkweDgwMDAwMDAwCisKKworLyoKKyAqIEludGVuc2l2ZSByZXNlYXJjaCBvdmVyIHRoZSBjb3Vyc2Ugb2YgbWFueSB5ZWFycyBoYXMgc2hvd24gdGhhdAorICogcG9ydCA5NDE4IGlzIHRvdGFsbHkgdW51c2VkIGJ5IGFueXRoaW5nIGVsc2UuIE9yCisgKgorICoJWW91ciBzZWFyY2ggLSAicG9ydCA5NDE4IiAtIGRpZCBub3QgbWF0Y2ggYW55IGRvY3VtZW50cy4KKyAqCisgKiBhcyB3d3cuZ29vZ2xlLmNvbSBwdXRzIGl0LgorICoKKyAqIFRoaXMgcG9ydCBoYXMgYmVlbiBwcm9wZXJseSBhc3NpZ25lZCBmb3IgZ2l0IHVzZSBieSBJQU5BOgorICogZ2l0IChBc3NpZ25lZC05NDE4KSBbSTA2LTA1MDcyOC0wMDAxXS4KKyAqCisgKglnaXQgIDk0MTgvdGNwICAgZ2l0IHBhY2sgdHJhbnNmZXIgc2VydmljZQorICoJZ2l0ICA5NDE4L3VkcCAgIGdpdCBwYWNrIHRyYW5zZmVyIHNlcnZpY2UKKyAqCisgKiB3aXRoIExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4gYXMgdGhlIHBvaW50IG9mCisgKiBjb250YWN0LiBTZXB0ZW1iZXIgMjAwNS4KKyAqCisgKiBTZWUgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9wb3J0LW51bWJlcnMKKyAqLworI2RlZmluZSBERUZBVUxUX0dJVF9QT1JUIDk0MTgKKworLyoKKyAqIEJhc2ljIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIGRpcmVjdG9yeSBjYWNoZQorICovCisKKyNkZWZpbmUgQ0FDSEVfU0lHTkFUVVJFIDB4NDQ0OTUyNDMJLyogIkRJUkMiICovCitzdHJ1Y3QgY2FjaGVfaGVhZGVyIHsKKwl1aW50MzJfdCBoZHJfc2lnbmF0dXJlOworCXVpbnQzMl90IGhkcl92ZXJzaW9uOworCXVpbnQzMl90IGhkcl9lbnRyaWVzOworfTsKKworI2RlZmluZSBJTkRFWF9GT1JNQVRfTEIgMgorI2RlZmluZSBJTkRFWF9GT1JNQVRfVUIgNAorCisvKgorICogVGhlICJjYWNoZV90aW1lIiBpcyBqdXN0IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUKKyAqIHRpbWUuIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIGl0IG92ZXJmbG93cyAtIHdlIG9ubHkKKyAqIGNoZWNrIGl0IGZvciBlcXVhbGl0eSBpbiB0aGUgMzIgYml0cyB3ZSBzYXZlLgorICovCitzdHJ1Y3QgY2FjaGVfdGltZSB7CisJdWludDMyX3Qgc2VjOworCXVpbnQzMl90IG5zZWM7Cit9OworCitzdHJ1Y3Qgc3RhdF9kYXRhIHsKKwlzdHJ1Y3QgY2FjaGVfdGltZSBzZF9jdGltZTsKKwlzdHJ1Y3QgY2FjaGVfdGltZSBzZF9tdGltZTsKKwl1bnNpZ25lZCBpbnQgc2RfZGV2OworCXVuc2lnbmVkIGludCBzZF9pbm87CisJdW5zaWduZWQgaW50IHNkX3VpZDsKKwl1bnNpZ25lZCBpbnQgc2RfZ2lkOworCXVuc2lnbmVkIGludCBzZF9zaXplOworfTsKKworc3RydWN0IGNhY2hlX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJc3RydWN0IHN0YXRfZGF0YSBjZV9zdGF0X2RhdGE7CisJdW5zaWduZWQgaW50IGNlX21vZGU7CisJdW5zaWduZWQgaW50IGNlX2ZsYWdzOworCXVuc2lnbmVkIGludCBjZV9uYW1lbGVuOworCXVuc2lnbmVkIGludCBpbmRleDsJLyogZm9yIGxpbmsgZXh0ZW5zaW9uICovCisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKKyNkZWZpbmUgQ0VfU1RBR0VNQVNLICgweDMwMDApCisjZGVmaW5lIENFX0VYVEVOREVEICAoMHg0MDAwKQorI2RlZmluZSBDRV9WQUxJRCAgICAgKDB4ODAwMCkKKyNkZWZpbmUgQ0VfU1RBR0VTSElGVCAxMgorCisvKgorICogUmFuZ2UgMHhGRkZGMEZGRiBpbiBjZV9mbGFncyBpcyBkaXZpZGVkIGludG8KKyAqIHR3byBwYXJ0czogaW4tbWVtb3J5IGZsYWdzIGFuZCBvbi1kaXNrIG9uZXMuCisgKiBGbGFncyBpbiBDRV9FWFRFTkRFRF9GTEFHUyB3aWxsIGdldCBzYXZlZCBvbi1kaXNrCisgKiBpZiB5b3Ugd2FudCB0byBzYXZlIGEgbmV3IGZsYWcsIGFkZCBpdCBpbgorICogQ0VfRVhURU5ERURfRkxBR1MKKyAqCisgKiBJbi1tZW1vcnkgb25seSBmbGFncworICovCisjZGVmaW5lIENFX1VQREFURSAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBDRV9SRU1PVkUgICAgICAgICAgICAoMSA8PCAxNykKKyNkZWZpbmUgQ0VfVVBUT0RBVEUgICAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIENFX0FEREVEICAgICAgICAgICAgICgxIDw8IDE5KQorCisjZGVmaW5lIENFX0hBU0hFRCAgICAgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSBDRV9XVF9SRU1PVkUgICAgICAgICAoMSA8PCAyMikgLyogcmVtb3ZlIGluIHdvcmsgZGlyZWN0b3J5ICovCisjZGVmaW5lIENFX0NPTkZMSUNURUQgICAgICAgICgxIDw8IDIzKQorCisjZGVmaW5lIENFX1VOUEFDS0VEICAgICAgICAgICgxIDw8IDI0KQorI2RlZmluZSBDRV9ORVdfU0tJUF9XT1JLVFJFRSAoMSA8PCAyNSkKKworLyogdXNlZCB0byB0ZW1wb3JhcmlseSBtYXJrIHBhdGhzIG1hdGNoZWQgYnkgcGF0aHNwZWNzICovCisjZGVmaW5lIENFX01BVENIRUQgICAgICAgICAgICgxIDw8IDI2KQorCisjZGVmaW5lIENFX1VQREFURV9JTl9CQVNFICAgICgxIDw8IDI3KQorI2RlZmluZSBDRV9TVFJJUF9OQU1FICAgICAgICAoMSA8PCAyOCkKKworLyoKKyAqIEV4dGVuZGVkIG9uLWRpc2sgZmxhZ3MKKyAqLworI2RlZmluZSBDRV9JTlRFTlRfVE9fQUREICAgICAoMSA8PCAyOSkKKyNkZWZpbmUgQ0VfU0tJUF9XT1JLVFJFRSAgICAgKDEgPDwgMzApCisvKiBDRV9FWFRFTkRFRDIgaXMgZm9yIGZ1dHVyZSBleHRlbnNpb24gKi8KKyNkZWZpbmUgQ0VfRVhURU5ERUQyICAgICAgICAgKDEgPDwgMzEpCisKKyNkZWZpbmUgQ0VfRVhURU5ERURfRkxBR1MgKENFX0lOVEVOVF9UT19BREQgfCBDRV9TS0lQX1dPUktUUkVFKQorCisvKgorICogU2FmZWd1YXJkIHRvIGF2b2lkIHNhdmluZyB3cm9uZyBmbGFnczoKKyAqICAtIENFX0VYVEVOREVEMiB3b24ndCBnZXQgc2F2ZWQgdW50aWwgaXRzIHNlbWFudGljIGlzIGtub3duCisgKiAgLSBCaXRzIGluIDB4MDAwMEZGRkYgaGF2ZSBiZWVuIHNhdmVkIGluIGNlX2ZsYWdzIGFscmVhZHkKKyAqICAtIEJpdHMgaW4gMHgwMDNGMDAwMCBhcmUgY3VycmVudGx5IGluLW1lbW9yeSBmbGFncworICovCisjaWYgQ0VfRVhURU5ERURfRkxBR1MgJiAweDgwM0ZGRkZGCisjZXJyb3IgIkNFX0VYVEVOREVEX0ZMQUdTIG91dCBvZiByYW5nZSIKKyNlbmRpZgorCitzdHJ1Y3QgcGF0aHNwZWM7CisKKy8qCisgKiBDb3B5IHRoZSBzaGExIGFuZCBzdGF0IHN0YXRlIG9mIGEgY2FjaGUgZW50cnkgZnJvbSBvbmUgdG8KKyAqIGFub3RoZXIuIEJ1dCB3ZSBuZXZlciBjaGFuZ2UgdGhlIG5hbWUsIG9yIHRoZSBoYXNoIHN0YXRlIQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9jYWNoZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmRzdCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpzcmMpCit7CisJdW5zaWduZWQgaW50IHN0YXRlID0gZHN0LT5jZV9mbGFncyAmIENFX0hBU0hFRDsKKworCS8qIERvbid0IGNvcHkgaGFzaCBjaGFpbiBhbmQgbmFtZSAqLworCW1lbWNweSgmZHN0LT5jZV9zdGF0X2RhdGEsICZzcmMtPmNlX3N0YXRfZGF0YSwKKwkJCW9mZnNldG9mKHN0cnVjdCBjYWNoZV9lbnRyeSwgbmFtZSkgLQorCQkJb2Zmc2V0b2Yoc3RydWN0IGNhY2hlX2VudHJ5LCBjZV9zdGF0X2RhdGEpKTsKKworCS8qIFJlc3RvcmUgdGhlIGhhc2ggc3RhdGUgKi8KKwlkc3QtPmNlX2ZsYWdzID0gKGRzdC0+Y2VfZmxhZ3MgJiB+Q0VfSEFTSEVEKSB8IHN0YXRlOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNyZWF0ZV9jZV9mbGFncyh1bnNpZ25lZCBzdGFnZSkKK3sKKwlyZXR1cm4gKHN0YWdlIDw8IENFX1NUQUdFU0hJRlQpOworfQorCisjZGVmaW5lIGNlX25hbWVsZW4oY2UpICgoY2UpLT5jZV9uYW1lbGVuKQorI2RlZmluZSBjZV9zaXplKGNlKSBjYWNoZV9lbnRyeV9zaXplKGNlX25hbWVsZW4oY2UpKQorI2RlZmluZSBjZV9zdGFnZShjZSkgKChDRV9TVEFHRU1BU0sgJiAoY2UpLT5jZV9mbGFncykgPj4gQ0VfU1RBR0VTSElGVCkKKyNkZWZpbmUgY2VfdXB0b2RhdGUoY2UpICgoY2UpLT5jZV9mbGFncyAmIENFX1VQVE9EQVRFKQorI2RlZmluZSBjZV9za2lwX3dvcmt0cmVlKGNlKSAoKGNlKS0+Y2VfZmxhZ3MgJiBDRV9TS0lQX1dPUktUUkVFKQorI2RlZmluZSBjZV9tYXJrX3VwdG9kYXRlKGNlKSAoKGNlKS0+Y2VfZmxhZ3MgfD0gQ0VfVVBUT0RBVEUpCisKKyNkZWZpbmUgY2VfcGVybWlzc2lvbnMobW9kZSkgKCgobW9kZSkgJiAwMTAwKSA/IDA3NTUgOiAwNjQ0KQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3JlYXRlX2NlX21vZGUodW5zaWduZWQgaW50IG1vZGUpCit7CisJaWYgKFNfSVNMTksobW9kZSkpCisJCXJldHVybiBTX0lGTE5LOworCWlmIChTX0lTRElSKG1vZGUpIHx8IFNfSVNHSVRMSU5LKG1vZGUpKQorCQlyZXR1cm4gU19JRkdJVExJTks7CisJcmV0dXJuIFNfSUZSRUcgfCBjZV9wZXJtaXNzaW9ucyhtb2RlKTsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNlX21vZGVfZnJvbV9zdGF0KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IG1vZGUpCit7CisJZXh0ZXJuIGludCB0cnVzdF9leGVjdXRhYmxlX2JpdCwgaGFzX3N5bWxpbmtzOworCWlmICghaGFzX3N5bWxpbmtzICYmIFNfSVNSRUcobW9kZSkgJiYKKwkgICAgY2UgJiYgU19JU0xOSyhjZS0+Y2VfbW9kZSkpCisJCXJldHVybiBjZS0+Y2VfbW9kZTsKKwlpZiAoIXRydXN0X2V4ZWN1dGFibGVfYml0ICYmIFNfSVNSRUcobW9kZSkpIHsKKwkJaWYgKGNlICYmIFNfSVNSRUcoY2UtPmNlX21vZGUpKQorCQkJcmV0dXJuIGNlLT5jZV9tb2RlOworCQlyZXR1cm4gY3JlYXRlX2NlX21vZGUoMDY2Nik7CisJfQorCXJldHVybiBjcmVhdGVfY2VfbW9kZShtb2RlKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGNlX3RvX2R0eXBlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJdW5zaWduZWQgY2VfbW9kZSA9IG50b2hsKGNlLT5jZV9tb2RlKTsKKwlpZiAoU19JU1JFRyhjZV9tb2RlKSkKKwkJcmV0dXJuIERUX1JFRzsKKwllbHNlIGlmIChTX0lTRElSKGNlX21vZGUpIHx8IFNfSVNHSVRMSU5LKGNlX21vZGUpKQorCQlyZXR1cm4gRFRfRElSOworCWVsc2UgaWYgKFNfSVNMTksoY2VfbW9kZSkpCisJCXJldHVybiBEVF9MTks7CisJZWxzZQorCQlyZXR1cm4gRFRfVU5LTk9XTjsKK30KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbm9uX21vZGUodW5zaWduZWQgaW50IG1vZGUpCit7CisJaWYgKFNfSVNSRUcobW9kZSkpCisJCXJldHVybiBTX0lGUkVHIHwgY2VfcGVybWlzc2lvbnMobW9kZSk7CisJaWYgKFNfSVNMTksobW9kZSkpCisJCXJldHVybiBTX0lGTE5LOworCWlmIChTX0lTRElSKG1vZGUpKQorCQlyZXR1cm4gU19JRkRJUjsKKwlyZXR1cm4gU19JRkdJVExJTks7Cit9CisKKyNkZWZpbmUgY2FjaGVfZW50cnlfc2l6ZShsZW4pIChvZmZzZXRvZihzdHJ1Y3QgY2FjaGVfZW50cnksbmFtZSkgKyAobGVuKSArIDEpCisKKyNkZWZpbmUgU09NRVRISU5HX0NIQU5HRUQJKDEgPDwgMCkgLyogdW5jbGFzc2lmaWVkIGNoYW5nZXMgZ28gaGVyZSAqLworI2RlZmluZSBDRV9FTlRSWV9DSEFOR0VECSgxIDw8IDEpCisjZGVmaW5lIENFX0VOVFJZX1JFTU9WRUQJKDEgPDwgMikKKyNkZWZpbmUgQ0VfRU5UUllfQURERUQJCSgxIDw8IDMpCisjZGVmaW5lIFJFU09MVkVfVU5ET19DSEFOR0VECSgxIDw8IDQpCisjZGVmaW5lIENBQ0hFX1RSRUVfQ0hBTkdFRAkoMSA8PCA1KQorI2RlZmluZSBTUExJVF9JTkRFWF9PUkRFUkVECSgxIDw8IDYpCisjZGVmaW5lIFVOVFJBQ0tFRF9DSEFOR0VECSgxIDw8IDcpCisKK3N0cnVjdCBzcGxpdF9pbmRleDsKK3N0cnVjdCB1bnRyYWNrZWRfY2FjaGU7CisKK3N0cnVjdCBpbmRleF9zdGF0ZSB7CisJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGU7CisJdW5zaWduZWQgaW50IHZlcnNpb247CisJdW5zaWduZWQgaW50IGNhY2hlX25yLCBjYWNoZV9hbGxvYywgY2FjaGVfY2hhbmdlZDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlc29sdmVfdW5kbzsKKwlzdHJ1Y3QgY2FjaGVfdHJlZSAqY2FjaGVfdHJlZTsKKwlzdHJ1Y3Qgc3BsaXRfaW5kZXggKnNwbGl0X2luZGV4OworCXN0cnVjdCBjYWNoZV90aW1lIHRpbWVzdGFtcDsKKwl1bnNpZ25lZCBuYW1lX2hhc2hfaW5pdGlhbGl6ZWQgOiAxLAorCQkgaW5pdGlhbGl6ZWQgOiAxOworCXN0cnVjdCBoYXNobWFwIG5hbWVfaGFzaDsKKwlzdHJ1Y3QgaGFzaG1hcCBkaXJfaGFzaDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnVudHJhY2tlZDsKK307CisKK2V4dGVybiBzdHJ1Y3QgaW5kZXhfc3RhdGUgdGhlX2luZGV4OworCisvKiBOYW1lIGhhc2hpbmcgKi8KK2V4dGVybiB2b2lkIGFkZF9uYW1lX2hhc2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpOworZXh0ZXJuIHZvaWQgcmVtb3ZlX25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSk7CitleHRlcm4gdm9pZCBmcmVlX25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7CisKKworI2lmbmRlZiBOT19USEVfSU5ERVhfQ09NUEFUSUJJTElUWV9NQUNST1MKKyNkZWZpbmUgYWN0aXZlX2NhY2hlICh0aGVfaW5kZXguY2FjaGUpCisjZGVmaW5lIGFjdGl2ZV9uciAodGhlX2luZGV4LmNhY2hlX25yKQorI2RlZmluZSBhY3RpdmVfYWxsb2MgKHRoZV9pbmRleC5jYWNoZV9hbGxvYykKKyNkZWZpbmUgYWN0aXZlX2NhY2hlX2NoYW5nZWQgKHRoZV9pbmRleC5jYWNoZV9jaGFuZ2VkKQorI2RlZmluZSBhY3RpdmVfY2FjaGVfdHJlZSAodGhlX2luZGV4LmNhY2hlX3RyZWUpCisKKyNkZWZpbmUgcmVhZF9jYWNoZSgpIHJlYWRfaW5kZXgoJnRoZV9pbmRleCkKKyNkZWZpbmUgcmVhZF9jYWNoZV9mcm9tKHBhdGgpIHJlYWRfaW5kZXhfZnJvbSgmdGhlX2luZGV4LCAocGF0aCkpCisjZGVmaW5lIHJlYWRfY2FjaGVfcHJlbG9hZChwYXRoc3BlYykgcmVhZF9pbmRleF9wcmVsb2FkKCZ0aGVfaW5kZXgsIChwYXRoc3BlYykpCisjZGVmaW5lIGlzX2NhY2hlX3VuYm9ybigpIGlzX2luZGV4X3VuYm9ybigmdGhlX2luZGV4KQorI2RlZmluZSByZWFkX2NhY2hlX3VubWVyZ2VkKCkgcmVhZF9pbmRleF91bm1lcmdlZCgmdGhlX2luZGV4KQorI2RlZmluZSBkaXNjYXJkX2NhY2hlKCkgZGlzY2FyZF9pbmRleCgmdGhlX2luZGV4KQorI2RlZmluZSB1bm1lcmdlZF9jYWNoZSgpIHVubWVyZ2VkX2luZGV4KCZ0aGVfaW5kZXgpCisjZGVmaW5lIGNhY2hlX25hbWVfcG9zKG5hbWUsIG5hbWVsZW4pIGluZGV4X25hbWVfcG9zKCZ0aGVfaW5kZXgsKG5hbWUpLChuYW1lbGVuKSkKKyNkZWZpbmUgYWRkX2NhY2hlX2VudHJ5KGNlLCBvcHRpb24pIGFkZF9pbmRleF9lbnRyeSgmdGhlX2luZGV4LCAoY2UpLCAob3B0aW9uKSkKKyNkZWZpbmUgcmVuYW1lX2NhY2hlX2VudHJ5X2F0KHBvcywgbmV3X25hbWUpIHJlbmFtZV9pbmRleF9lbnRyeV9hdCgmdGhlX2luZGV4LCAocG9zKSwgKG5ld19uYW1lKSkKKyNkZWZpbmUgcmVtb3ZlX2NhY2hlX2VudHJ5X2F0KHBvcykgcmVtb3ZlX2luZGV4X2VudHJ5X2F0KCZ0aGVfaW5kZXgsIChwb3MpKQorI2RlZmluZSByZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpIHJlbW92ZV9maWxlX2Zyb21faW5kZXgoJnRoZV9pbmRleCwgKHBhdGgpKQorI2RlZmluZSBhZGRfdG9fY2FjaGUocGF0aCwgc3QsIGZsYWdzKSBhZGRfdG9faW5kZXgoJnRoZV9pbmRleCwgKHBhdGgpLCAoc3QpLCAoZmxhZ3MpKQorI2RlZmluZSBhZGRfZmlsZV90b19jYWNoZShwYXRoLCBmbGFncykgYWRkX2ZpbGVfdG9faW5kZXgoJnRoZV9pbmRleCwgKHBhdGgpLCAoZmxhZ3MpKQorI2RlZmluZSByZWZyZXNoX2NhY2hlKGZsYWdzKSByZWZyZXNoX2luZGV4KCZ0aGVfaW5kZXgsIChmbGFncyksIE5VTEwsIE5VTEwsIE5VTEwpCisjZGVmaW5lIGNlX21hdGNoX3N0YXQoY2UsIHN0LCBvcHRpb25zKSBpZV9tYXRjaF9zdGF0KCZ0aGVfaW5kZXgsIChjZSksIChzdCksIChvcHRpb25zKSkKKyNkZWZpbmUgY2VfbW9kaWZpZWQoY2UsIHN0LCBvcHRpb25zKSBpZV9tb2RpZmllZCgmdGhlX2luZGV4LCAoY2UpLCAoc3QpLCAob3B0aW9ucykpCisjZGVmaW5lIGNhY2hlX2Rpcl9leGlzdHMobmFtZSwgbmFtZWxlbikgaW5kZXhfZGlyX2V4aXN0cygmdGhlX2luZGV4LCAobmFtZSksIChuYW1lbGVuKSkKKyNkZWZpbmUgY2FjaGVfZmlsZV9leGlzdHMobmFtZSwgbmFtZWxlbiwgaWduY2FzZSkgaW5kZXhfZmlsZV9leGlzdHMoJnRoZV9pbmRleCwgKG5hbWUpLCAobmFtZWxlbiksIChpZ25jYXNlKSkKKyNkZWZpbmUgY2FjaGVfbmFtZV9pc19vdGhlcihuYW1lLCBuYW1lbGVuKSBpbmRleF9uYW1lX2lzX290aGVyKCZ0aGVfaW5kZXgsIChuYW1lKSwgKG5hbWVsZW4pKQorI2RlZmluZSByZXNvbHZlX3VuZG9fY2xlYXIoKSByZXNvbHZlX3VuZG9fY2xlYXJfaW5kZXgoJnRoZV9pbmRleCkKKyNkZWZpbmUgdW5tZXJnZV9jYWNoZV9lbnRyeV9hdChhdCkgdW5tZXJnZV9pbmRleF9lbnRyeV9hdCgmdGhlX2luZGV4LCBhdCkKKyNkZWZpbmUgdW5tZXJnZV9jYWNoZShwYXRoc3BlYykgdW5tZXJnZV9pbmRleCgmdGhlX2luZGV4LCBwYXRoc3BlYykKKyNkZWZpbmUgcmVhZF9ibG9iX2RhdGFfZnJvbV9jYWNoZShwYXRoLCBzeikgcmVhZF9ibG9iX2RhdGFfZnJvbV9pbmRleCgmdGhlX2luZGV4LCAocGF0aCksIChzeikpCisjZW5kaWYKKworZW51bSBvYmplY3RfdHlwZSB7CisJT0JKX0JBRCA9IC0xLAorCU9CSl9OT05FID0gMCwKKwlPQkpfQ09NTUlUID0gMSwKKwlPQkpfVFJFRSA9IDIsCisJT0JKX0JMT0IgPSAzLAorCU9CSl9UQUcgPSA0LAorCS8qIDUgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKwlPQkpfT0ZTX0RFTFRBID0gNiwKKwlPQkpfUkVGX0RFTFRBID0gNywKKwlPQkpfQU5ZLAorCU9CSl9NQVgKK307CisKK3N0YXRpYyBpbmxpbmUgZW51bSBvYmplY3RfdHlwZSBvYmplY3RfdHlwZSh1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gU19JU0RJUihtb2RlKSA/IE9CSl9UUkVFIDoKKwkJU19JU0dJVExJTksobW9kZSkgPyBPQkpfQ09NTUlUIDoKKwkJT0JKX0JMT0I7Cit9CisKKy8qIERvdWJsZS1jaGVjayBsb2NhbF9yZXBvX2VudiBiZWxvdyBpZiB5b3UgYWRkIHRvIHRoaXMgbGlzdC4gKi8KKyNkZWZpbmUgR0lUX0RJUl9FTlZJUk9OTUVOVCAiR0lUX0RJUiIKKyNkZWZpbmUgR0lUX0NPTU1PTl9ESVJfRU5WSVJPTk1FTlQgIkdJVF9DT01NT05fRElSIgorI2RlZmluZSBHSVRfTkFNRVNQQUNFX0VOVklST05NRU5UICJHSVRfTkFNRVNQQUNFIgorI2RlZmluZSBHSVRfV09SS19UUkVFX0VOVklST05NRU5UICJHSVRfV09SS19UUkVFIgorI2RlZmluZSBHSVRfUFJFRklYX0VOVklST05NRU5UICJHSVRfUFJFRklYIgorI2RlZmluZSBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQgIi5naXQiCisjZGVmaW5lIERCX0VOVklST05NRU5UICJHSVRfT0JKRUNUX0RJUkVDVE9SWSIKKyNkZWZpbmUgSU5ERVhfRU5WSVJPTk1FTlQgIkdJVF9JTkRFWF9GSUxFIgorI2RlZmluZSBHUkFGVF9FTlZJUk9OTUVOVCAiR0lUX0dSQUZUX0ZJTEUiCisjZGVmaW5lIEdJVF9TSEFMTE9XX0ZJTEVfRU5WSVJPTk1FTlQgIkdJVF9TSEFMTE9XX0ZJTEUiCisjZGVmaW5lIFRFTVBMQVRFX0RJUl9FTlZJUk9OTUVOVCAiR0lUX1RFTVBMQVRFX0RJUiIKKyNkZWZpbmUgQ09ORklHX0VOVklST05NRU5UICJHSVRfQ09ORklHIgorI2RlZmluZSBDT05GSUdfREFUQV9FTlZJUk9OTUVOVCAiR0lUX0NPTkZJR19QQVJBTUVURVJTIgorI2RlZmluZSBFWEVDX1BBVEhfRU5WSVJPTk1FTlQgIkdJVF9FWEVDX1BBVEgiCisjZGVmaW5lIENFSUxJTkdfRElSRUNUT1JJRVNfRU5WSVJPTk1FTlQgIkdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTIgorI2RlZmluZSBOT19SRVBMQUNFX09CSkVDVFNfRU5WSVJPTk1FTlQgIkdJVF9OT19SRVBMQUNFX09CSkVDVFMiCisjZGVmaW5lIEdJVF9SRVBMQUNFX1JFRl9CQVNFX0VOVklST05NRU5UICJHSVRfUkVQTEFDRV9SRUZfQkFTRSIKKyNkZWZpbmUgR0lUQVRUUklCVVRFU19GSUxFICIuZ2l0YXR0cmlidXRlcyIKKyNkZWZpbmUgSU5GT0FUVFJJQlVURVNfRklMRSAiaW5mby9hdHRyaWJ1dGVzIgorI2RlZmluZSBBVFRSSUJVVEVfTUFDUk9fUFJFRklYICJbYXR0cl0iCisjZGVmaW5lIEdJVF9OT1RFU19SRUZfRU5WSVJPTk1FTlQgIkdJVF9OT1RFU19SRUYiCisjZGVmaW5lIEdJVF9OT1RFU19ERUZBVUxUX1JFRiAicmVmcy9ub3Rlcy9jb21taXRzIgorI2RlZmluZSBHSVRfTk9URVNfRElTUExBWV9SRUZfRU5WSVJPTk1FTlQgIkdJVF9OT1RFU19ESVNQTEFZX1JFRiIKKyNkZWZpbmUgR0lUX05PVEVTX1JFV1JJVEVfUkVGX0VOVklST05NRU5UICJHSVRfTk9URVNfUkVXUklURV9SRUYiCisjZGVmaW5lIEdJVF9OT1RFU19SRVdSSVRFX01PREVfRU5WSVJPTk1FTlQgIkdJVF9OT1RFU19SRVdSSVRFX01PREUiCisjZGVmaW5lIEdJVF9MSVRFUkFMX1BBVEhTUEVDU19FTlZJUk9OTUVOVCAiR0lUX0xJVEVSQUxfUEFUSFNQRUNTIgorI2RlZmluZSBHSVRfR0xPQl9QQVRIU1BFQ1NfRU5WSVJPTk1FTlQgIkdJVF9HTE9CX1BBVEhTUEVDUyIKKyNkZWZpbmUgR0lUX05PR0xPQl9QQVRIU1BFQ1NfRU5WSVJPTk1FTlQgIkdJVF9OT0dMT0JfUEFUSFNQRUNTIgorI2RlZmluZSBHSVRfSUNBU0VfUEFUSFNQRUNTX0VOVklST05NRU5UICJHSVRfSUNBU0VfUEFUSFNQRUNTIgorCisvKgorICogVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBleHBlY3RlZCB0byBjb250YWluIGEgYm9vbGVhbiBpbmRpY2F0aW5nCisgKiB3aGV0aGVyIHdlIHNob3VsZCBvciBzaG91bGQgbm90IHRyZWF0OgorICoKKyAqICAgR0lUX0RJUj1mb28uZ2l0IGdpdCAuLi4KKyAqCisgKiBhcyBpZiBHSVRfV09SS19UUkVFPS4gd2FzIGdpdmVuLiBJdCdzIG5vdCBleHBlY3RlZCB0aGF0IHVzZXJzIHdpbGwgbWFrZSB1c2UKKyAqIG9mIHRoaXMsIGJ1dCB3ZSB1c2UgaXQgaW50ZXJuYWxseSB0byBjb21tdW5pY2F0ZSB0byBzdWItcHJvY2Vzc2VzIHRoYXQgd2UKKyAqIGFyZSBpbiBhIGJhcmUgcmVwby4gSWYgbm90IHNldCwgZGVmYXVsdHMgdG8gdHJ1ZS4KKyAqLworI2RlZmluZSBHSVRfSU1QTElDSVRfV09SS19UUkVFX0VOVklST05NRU5UICJHSVRfSU1QTElDSVRfV09SS19UUkVFIgorCisvKgorICogUmVwb3NpdG9yeS1sb2NhbCBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IHRoZXNlIHdpbGwgYmUgY2xlYXJlZAorICogd2hlbiBnaXQgc3Bhd25zIGEgc3ViLXByb2Nlc3MgdGhhdCBydW5zIGluc2lkZSBhbm90aGVyIHJlcG9zaXRvcnkuCisgKiBUaGUgYXJyYXkgaXMgTlVMTC10ZXJtaW5hdGVkLCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIHBhc3MgaW4gdGhlICJlbnYiCisgKiBwYXJhbWV0ZXIgb2YgYSBydW4tY29tbWFuZCBpbnZvY2F0aW9uLCBvciB0byBkbyBhIHNpbXBsZSB3YWxrLgorICovCitleHRlcm4gY29uc3QgY2hhciAqIGNvbnN0IGxvY2FsX3JlcG9fZW52W107CisKK2V4dGVybiBpbnQgaXNfYmFyZV9yZXBvc2l0b3J5X2NmZzsKK2V4dGVybiBpbnQgaXNfYmFyZV9yZXBvc2l0b3J5KHZvaWQpOworZXh0ZXJuIGludCBpc19pbnNpZGVfZ2l0X2Rpcih2b2lkKTsKK2V4dGVybiBjaGFyICpnaXRfd29ya190cmVlX2NmZzsKK2V4dGVybiBpbnQgaXNfaW5zaWRlX3dvcmtfdHJlZSh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRfZ2l0X2Rpcih2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRfZ2l0X2NvbW1vbl9kaXIodm9pZCk7CitleHRlcm4gaW50IGlzX2dpdF9kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCk7CitleHRlcm4gY2hhciAqZ2V0X29iamVjdF9kaXJlY3Rvcnkodm9pZCk7CitleHRlcm4gY2hhciAqZ2V0X2luZGV4X2ZpbGUodm9pZCk7CitleHRlcm4gY2hhciAqZ2V0X2dyYWZ0X2ZpbGUodm9pZCk7CitleHRlcm4gaW50IHNldF9naXRfZGlyKGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIGludCBnZXRfY29tbW9uX2Rpcl9ub2VudihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZ2l0ZGlyKTsKK2V4dGVybiBpbnQgZ2V0X2NvbW1vbl9kaXIoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmdpdGRpcik7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0X2dpdF9uYW1lc3BhY2Uodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqc3RyaXBfbmFtZXNwYWNlKGNvbnN0IGNoYXIgKm5hbWVzcGFjZWRfcmVmKTsKK2V4dGVybiBjb25zdCBjaGFyICpnZXRfZ2l0X3dvcmtfdHJlZSh2b2lkKTsKKworI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX1NUQVRfRkFJTEVEIDEKKyNkZWZpbmUgUkVBRF9HSVRGSUxFX0VSUl9OT1RfQV9GSUxFIDIKKyNkZWZpbmUgUkVBRF9HSVRGSUxFX0VSUl9PUEVOX0ZBSUxFRCAzCisjZGVmaW5lIFJFQURfR0lURklMRV9FUlJfUkVBRF9GQUlMRUQgNAorI2RlZmluZSBSRUFEX0dJVEZJTEVfRVJSX0lOVkFMSURfRk9STUFUIDUKKyNkZWZpbmUgUkVBRF9HSVRGSUxFX0VSUl9OT19QQVRIIDYKKyNkZWZpbmUgUkVBRF9HSVRGSUxFX0VSUl9OT1RfQV9SRVBPIDcKKyNkZWZpbmUgUkVBRF9HSVRGSUxFX0VSUl9UT09fTEFSR0UgOAorZXh0ZXJuIGNvbnN0IGNoYXIgKnJlYWRfZ2l0ZmlsZV9nZW50bHkoY29uc3QgY2hhciAqcGF0aCwgaW50ICpyZXR1cm5fZXJyb3JfY29kZSk7CisjZGVmaW5lIHJlYWRfZ2l0ZmlsZShwYXRoKSByZWFkX2dpdGZpbGVfZ2VudGx5KChwYXRoKSwgTlVMTCkKK2V4dGVybiBjb25zdCBjaGFyICpyZXNvbHZlX2dpdGRpcihjb25zdCBjaGFyICpzdXNwZWN0KTsKK2V4dGVybiB2b2lkIHNldF9naXRfd29ya190cmVlKGNvbnN0IGNoYXIgKnRyZWUpOworCisjZGVmaW5lIEFMVEVSTkFURV9EQl9FTlZJUk9OTUVOVCAiR0lUX0FMVEVSTkFURV9PQkpFQ1RfRElSRUNUT1JJRVMiCisKK2V4dGVybiBjb25zdCBjaGFyICoqZ2V0X3BhdGhzcGVjKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqKnBhdGhzcGVjKTsKK2V4dGVybiB2b2lkIHNldHVwX3dvcmtfdHJlZSh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseShpbnQgKik7CitleHRlcm4gY29uc3QgY2hhciAqc2V0dXBfZ2l0X2RpcmVjdG9yeSh2b2lkKTsKK2V4dGVybiBjaGFyICpwcmVmaXhfcGF0aChjb25zdCBjaGFyICpwcmVmaXgsIGludCBsZW4sIGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIGNoYXIgKnByZWZpeF9wYXRoX2dlbnRseShjb25zdCBjaGFyICpwcmVmaXgsIGludCBsZW4sIGludCAqcmVtYWluaW5nLCBjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBjb25zdCBjaGFyICpwcmVmaXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbGVuLCBjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBpbnQgY2hlY2tfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIHZlcmlmeV9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICBpbnQgZGlhZ25vc2VfbWlzc3BlbHRfcmV2KTsKK2V4dGVybiB2b2lkIHZlcmlmeV9ub25fZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBpbnQgcGF0aF9pbnNpZGVfcmVwbyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnBhdGgpOworCisjZGVmaW5lIElOSVRfREJfUVVJRVQgMHgwMDAxCisKK2V4dGVybiBpbnQgc2V0X2dpdF9kaXJfaW5pdChjb25zdCBjaGFyICpnaXRfZGlyLCBjb25zdCBjaGFyICpyZWFsX2dpdF9kaXIsIGludCk7CitleHRlcm4gaW50IGluaXRfZGIoY29uc3QgY2hhciAqdGVtcGxhdGVfZGlyLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworCitleHRlcm4gdm9pZCBzYW5pdGl6ZV9zdGRmZHModm9pZCk7CitleHRlcm4gaW50IGRhZW1vbml6ZSh2b2lkKTsKKworI2RlZmluZSBhbGxvY19ucih4KSAoKCh4KSsxNikqMy8yKQorCisvKgorICogUmVhbGxvYyB0aGUgYnVmZmVyIHBvaW50ZWQgYXQgYnkgdmFyaWFibGUgJ3gnIHNvIHRoYXQgaXQgY2FuIGhvbGQKKyAqIGF0IGxlYXN0ICducicgZW50cmllczsgdGhlIG51bWJlciBvZiBlbnRyaWVzIGN1cnJlbnRseSBhbGxvY2F0ZWQKKyAqIGlzICdhbGxvYycsIHVzaW5nIHRoZSBzdGFuZGFyZCBncm93aW5nIGZhY3RvciBhbGxvY19ucigpIG1hY3JvLgorICoKKyAqIERPIE5PVCBVU0UgYW55IGV4cHJlc3Npb24gd2l0aCBzaWRlLWVmZmVjdCBmb3IgJ3gnLCAnbnInLCBvciAnYWxsb2MnLgorICovCisjZGVmaW5lIEFMTE9DX0dST1coeCwgbnIsIGFsbG9jKSBcCisJZG8geyBcCisJCWlmICgobnIpID4gYWxsb2MpIHsgXAorCQkJaWYgKGFsbG9jX25yKGFsbG9jKSA8IChucikpIFwKKwkJCQlhbGxvYyA9IChucik7IFwKKwkJCWVsc2UgXAorCQkJCWFsbG9jID0gYWxsb2NfbnIoYWxsb2MpOyBcCisJCQlSRUFMTE9DX0FSUkFZKHgsIGFsbG9jKTsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisvKiBJbml0aWFsaXplIGFuZCB1c2UgdGhlIGNhY2hlIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgbG9ja19maWxlOworZXh0ZXJuIGludCByZWFkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKK2V4dGVybiBpbnQgcmVhZF9pbmRleF9wcmVsb2FkKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKTsKK2V4dGVybiBpbnQgZG9fcmVhZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJCSBpbnQgbXVzdF9leGlzdCk7IC8qIGZvciB0ZXN0dGluZyBvbmx5ISAqLworZXh0ZXJuIGludCByZWFkX2luZGV4X2Zyb20oc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgpOworZXh0ZXJuIGludCBpc19pbmRleF91bmJvcm4oc3RydWN0IGluZGV4X3N0YXRlICopOworZXh0ZXJuIGludCByZWFkX2luZGV4X3VubWVyZ2VkKHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKKyNkZWZpbmUgQ09NTUlUX0xPQ0sJCSgxIDw8IDApCisjZGVmaW5lIENMT1NFX0xPQ0sJCSgxIDw8IDEpCitleHRlcm4gaW50IHdyaXRlX2xvY2tlZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgc3RydWN0IGxvY2tfZmlsZSAqbG9jaywgdW5zaWduZWQgZmxhZ3MpOworZXh0ZXJuIGludCBkaXNjYXJkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKK2V4dGVybiBpbnQgdW5tZXJnZWRfaW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICopOworZXh0ZXJuIGludCB2ZXJpZnlfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBpbnQgaW5kZXhfZGlyX2V4aXN0cyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pOworZXh0ZXJuIHZvaWQgYWRqdXN0X2Rpcm5hbWVfY2FzZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY2hhciAqbmFtZSk7CitleHRlcm4gc3RydWN0IGNhY2hlX2VudHJ5ICppbmRleF9maWxlX2V4aXN0cyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBpZ25jYXNlKTsKK2V4dGVybiBpbnQgaW5kZXhfbmFtZV9wb3MoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKTsKKyNkZWZpbmUgQUREX0NBQ0hFX09LX1RPX0FERCAxCQkvKiBPayB0byBhZGQgKi8KKyNkZWZpbmUgQUREX0NBQ0hFX09LX1RPX1JFUExBQ0UgMgkvKiBPayB0byByZXBsYWNlIGZpbGUvZGlyZWN0b3J5ICovCisjZGVmaW5lIEFERF9DQUNIRV9TS0lQX0RGQ0hFQ0sgNAkvKiBPayB0byBza2lwIERGIGNvbmZsaWN0IGNoZWNrcyAqLworI2RlZmluZSBBRERfQ0FDSEVfSlVTVF9BUFBFTkQgOAkJLyogQXBwZW5kIG9ubHk7IHRyZWUuYzo6cmVhZF90cmVlKCkgKi8KKyNkZWZpbmUgQUREX0NBQ0hFX05FV19PTkxZIDE2CQkvKiBEbyBub3QgcmVwbGFjZSBleGlzdGluZyBvbmVzICovCisjZGVmaW5lIEFERF9DQUNIRV9LRUVQX0NBQ0hFX1RSRUUgMzIJLyogRG8gbm90IGludmFsaWRhdGUgY2FjaGUtdHJlZSAqLworZXh0ZXJuIGludCBhZGRfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICosIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCBvcHRpb24pOworZXh0ZXJuIHZvaWQgcmVuYW1lX2luZGV4X2VudHJ5X2F0KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBpbnQgcG9zLCBjb25zdCBjaGFyICpuZXdfbmFtZSk7CitleHRlcm4gaW50IHJlbW92ZV9pbmRleF9lbnRyeV9hdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgaW50IHBvcyk7CitleHRlcm4gdm9pZCByZW1vdmVfbWFya2VkX2NhY2hlX2VudHJpZXMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOworZXh0ZXJuIGludCByZW1vdmVfZmlsZV9mcm9tX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoKTsKKyNkZWZpbmUgQUREX0NBQ0hFX1ZFUkJPU0UgMQorI2RlZmluZSBBRERfQ0FDSEVfUFJFVEVORCAyCisjZGVmaW5lIEFERF9DQUNIRV9JR05PUkVfRVJST1JTCTQKKyNkZWZpbmUgQUREX0NBQ0hFX0lHTk9SRV9SRU1PVkFMIDgKKyNkZWZpbmUgQUREX0NBQ0hFX0lOVEVOVCAxNgorZXh0ZXJuIGludCBhZGRfdG9faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICosIGludCBmbGFncyk7CitleHRlcm4gaW50IGFkZF9maWxlX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MpOworZXh0ZXJuIHN0cnVjdCBjYWNoZV9lbnRyeSAqbWFrZV9jYWNoZV9lbnRyeSh1bnNpZ25lZCBpbnQgbW9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlLCB1bnNpZ25lZCBpbnQgcmVmcmVzaF9vcHRpb25zKTsKK2V4dGVybiBpbnQgY2Vfc2FtZV9uYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYSwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpiKTsKK2V4dGVybiB2b2lkIHNldF9vYmplY3RfbmFtZV9mb3JfaW50ZW50X3RvX2FkZF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKTsKK2V4dGVybiBpbnQgaW5kZXhfbmFtZV9pc19vdGhlcihjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgKnJlYWRfYmxvYl9kYXRhX2Zyb21faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKKworLyogZG8gc3RhdCBjb21wYXJpc29uIGV2ZW4gaWYgQ0VfVkFMSUQgaXMgdHJ1ZSAqLworI2RlZmluZSBDRV9NQVRDSF9JR05PUkVfVkFMSUQJCTAxCisvKiBkbyBub3QgY2hlY2sgdGhlIGNvbnRlbnRzIGJ1dCByZXBvcnQgZGlydHkgb24gcmFjaWx5LWNsZWFuIGVudHJpZXMgKi8KKyNkZWZpbmUgQ0VfTUFUQ0hfUkFDWV9JU19ESVJUWQkJMDIKKy8qIGRvIHN0YXQgY29tcGFyaXNvbiBldmVuIGlmIENFX1NLSVBfV09SS1RSRUUgaXMgdHJ1ZSAqLworI2RlZmluZSBDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRQkwNAorLyogaWdub3JlIG5vbi1leGlzdGVudCBmaWxlcyBkdXJpbmcgc3RhdCB1cGRhdGUgICovCisjZGVmaW5lIENFX01BVENIX0lHTk9SRV9NSVNTSU5HCQkweDA4CisvKiBlbmFibGUgc3RhdCByZWZyZXNoICovCisjZGVmaW5lIENFX01BVENIX1JFRlJFU0gJCTB4MTAKK2V4dGVybiBpbnQgaWVfbWF0Y2hfc3RhdChjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICosIHN0cnVjdCBzdGF0ICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gaW50IGllX21vZGlmaWVkKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiwgc3RydWN0IHN0YXQgKiwgdW5zaWduZWQgaW50KTsKKworI2RlZmluZSBIQVNIX1dSSVRFX09CSkVDVCAxCisjZGVmaW5lIEhBU0hfRk9STUFUX0NIRUNLIDIKK2V4dGVybiBpbnQgaW5kZXhfZmQodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3QsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpOworZXh0ZXJuIGludCBpbmRleF9wYXRoKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpzdCwgdW5zaWduZWQgZmxhZ3MpOworCisvKgorICogUmVjb3JkIHRvIHNkIHRoZSBkYXRhIGZyb20gc3QgdGhhdCB3ZSB1c2UgdG8gY2hlY2sgd2hldGhlciBhIGZpbGUKKyAqIG1pZ2h0IGhhdmUgY2hhbmdlZC4KKyAqLworZXh0ZXJuIHZvaWQgZmlsbF9zdGF0X2RhdGEoc3RydWN0IHN0YXRfZGF0YSAqc2QsIHN0cnVjdCBzdGF0ICpzdCk7CisKKy8qCisgKiBSZXR1cm4gMCBpZiBzdCBpcyBjb25zaXN0ZW50IHdpdGggYSBmaWxlIG5vdCBoYXZpbmcgYmVlbiBjaGFuZ2VkCisgKiBzaW5jZSBzZCB3YXMgZmlsbGVkLiAgSWYgdGhlcmUgYXJlIGRpZmZlcmVuY2VzLCByZXR1cm4gYQorICogY29tYmluYXRpb24gb2YgTVRJTUVfQ0hBTkdFRCwgQ1RJTUVfQ0hBTkdFRCwgT1dORVJfQ0hBTkdFRCwKKyAqIElOT0RFX0NIQU5HRUQsIGFuZCBEQVRBX0NIQU5HRUQuCisgKi8KK2V4dGVybiBpbnQgbWF0Y2hfc3RhdF9kYXRhKGNvbnN0IHN0cnVjdCBzdGF0X2RhdGEgKnNkLCBzdHJ1Y3Qgc3RhdCAqc3QpOworZXh0ZXJuIGludCBtYXRjaF9zdGF0X2RhdGFfcmFjeShjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQljb25zdCBzdHJ1Y3Qgc3RhdF9kYXRhICpzZCwgc3RydWN0IHN0YXQgKnN0KTsKKworZXh0ZXJuIHZvaWQgZmlsbF9zdGF0X2NhY2hlX2luZm8oc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KTsKKworI2RlZmluZSBSRUZSRVNIX1JFQUxMWQkJMHgwMDAxCS8qIGlnbm9yZV92YWxpZCAqLworI2RlZmluZSBSRUZSRVNIX1VOTUVSR0VECTB4MDAwMgkvKiBhbGxvdyB1bm1lcmdlZCAqLworI2RlZmluZSBSRUZSRVNIX1FVSUVUCQkweDAwMDQJLyogYmUgcXVpZXQgYWJvdXQgaXQgKi8KKyNkZWZpbmUgUkVGUkVTSF9JR05PUkVfTUlTU0lORwkweDAwMDgJLyogaWdub3JlIG5vbi1leGlzdGVudCAqLworI2RlZmluZSBSRUZSRVNIX0lHTk9SRV9TVUJNT0RVTEVTCTB4MDAxMAkvKiBpZ25vcmUgc3VibW9kdWxlcyAqLworI2RlZmluZSBSRUZSRVNIX0lOX1BPUkNFTEFJTgkweDAwMjAJLyogdXNlciBmcmllbmRseSBvdXRwdXQsIG5vdCAibmVlZHMgdXBkYXRlIiAqLworZXh0ZXJuIGludCByZWZyZXNoX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsIGNoYXIgKnNlZW4sIGNvbnN0IGNoYXIgKmhlYWRlcl9tc2cpOworCitleHRlcm4gdm9pZCB1cGRhdGVfaW5kZXhfaWZfYWJsZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgc3RydWN0IGxvY2tfZmlsZSAqKTsKKworZXh0ZXJuIGludCBob2xkX2xvY2tlZF9pbmRleChzdHJ1Y3QgbG9ja19maWxlICosIGludCk7CitleHRlcm4gdm9pZCBzZXRfYWx0ZXJuYXRlX2luZGV4X291dHB1dChjb25zdCBjaGFyICopOworCisvKiBFbnZpcm9ubWVudCBiaXRzIGZyb20gY29uZmlndXJhdGlvbiBtZWNoYW5pc20gKi8KK2V4dGVybiBpbnQgdHJ1c3RfZXhlY3V0YWJsZV9iaXQ7CitleHRlcm4gaW50IHRydXN0X2N0aW1lOworZXh0ZXJuIGludCBjaGVja19zdGF0OworZXh0ZXJuIGludCBxdW90ZV9wYXRoX2Z1bGx5OworZXh0ZXJuIGludCBoYXNfc3ltbGlua3M7CitleHRlcm4gaW50IG1pbmltdW1fYWJicmV2LCBkZWZhdWx0X2FiYnJldjsKK2V4dGVybiBpbnQgaWdub3JlX2Nhc2U7CitleHRlcm4gaW50IGFzc3VtZV91bmNoYW5nZWQ7CitleHRlcm4gaW50IHByZWZlcl9zeW1saW5rX3JlZnM7CitleHRlcm4gaW50IGxvZ19hbGxfcmVmX3VwZGF0ZXM7CitleHRlcm4gaW50IHdhcm5fYW1iaWd1b3VzX3JlZnM7CitleHRlcm4gaW50IHdhcm5fb25fb2JqZWN0X3JlZm5hbWVfYW1iaWd1aXR5OworZXh0ZXJuIGludCBzaGFyZWRfcmVwb3NpdG9yeTsKK2V4dGVybiBjb25zdCBjaGFyICphcHBseV9kZWZhdWx0X3doaXRlc3BhY2U7CitleHRlcm4gY29uc3QgY2hhciAqYXBwbHlfZGVmYXVsdF9pZ25vcmV3aGl0ZXNwYWNlOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9hdHRyaWJ1dGVzX2ZpbGU7CitleHRlcm4gaW50IHpsaWJfY29tcHJlc3Npb25fbGV2ZWw7CitleHRlcm4gaW50IGNvcmVfY29tcHJlc3Npb25fbGV2ZWw7CitleHRlcm4gaW50IGNvcmVfY29tcHJlc3Npb25fc2VlbjsKK2V4dGVybiBzaXplX3QgcGFja2VkX2dpdF93aW5kb3dfc2l6ZTsKK2V4dGVybiBzaXplX3QgcGFja2VkX2dpdF9saW1pdDsKK2V4dGVybiBzaXplX3QgZGVsdGFfYmFzZV9jYWNoZV9saW1pdDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGJpZ19maWxlX3RocmVzaG9sZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBhY2tfc2l6ZV9saW1pdF9jZmc7CisKKy8qCisgKiBEbyByZXBsYWNlIHJlZnMgbmVlZCB0byBiZSBjaGVja2VkIHRoaXMgcnVuPyAgVGhpcyB2YXJpYWJsZSBpcworICogaW5pdGlhbGl6ZWQgdG8gdHJ1ZSB1bmxlc3MgLS1uby1yZXBsYWNlLW9iamVjdCBpcyB1c2VkIG9yCisgKiAkR0lUX05PX1JFUExBQ0VfT0JKRUNUUyBpcyBzZXQsIGJ1dCBpcyBzZXQgdG8gZmFsc2UgYnkgc29tZQorICogY29tbWFuZHMgdGhhdCBkbyBub3Qgd2FudCByZXBsYWNlIHJlZmVyZW5jZXMgdG8gYmUgYWN0aXZlLiAgQXMgYW4KKyAqIG9wdGltaXphdGlvbiBpdCBpcyBhbHNvIHNldCB0byBmYWxzZSBpZiByZXBsYWNlIHJlZmVyZW5jZXMgaGF2ZQorICogYmVlbiBzb3VnaHQgYnV0IHRoZXJlIHdlcmUgbm9uZS4KKyAqLworZXh0ZXJuIGludCBjaGVja19yZXBsYWNlX3JlZnM7CitleHRlcm4gY2hhciAqZ2l0X3JlcGxhY2VfcmVmX2Jhc2U7CisKK2V4dGVybiBpbnQgZnN5bmNfb2JqZWN0X2ZpbGVzOworZXh0ZXJuIGludCBjb3JlX3ByZWxvYWRfaW5kZXg7CitleHRlcm4gaW50IGNvcmVfYXBwbHlfc3BhcnNlX2NoZWNrb3V0OworZXh0ZXJuIGludCBwcmVjb21wb3NlZF91bmljb2RlOworZXh0ZXJuIGludCBwcm90ZWN0X2hmczsKK2V4dGVybiBpbnQgcHJvdGVjdF9udGZzOworZXh0ZXJuIGludCBnaXRfZGJfZW52LCBnaXRfaW5kZXhfZW52LCBnaXRfZ3JhZnRfZW52LCBnaXRfY29tbW9uX2Rpcl9lbnY7CisKKy8qCisgKiBJbmNsdWRlIGJyb2tlbiByZWZzIGluIGFsbCByZWYgaXRlcmF0aW9ucywgd2hpY2ggd2lsbAorICogZ2VuZXJhbGx5IGNob2tlIGRhbmdlcm91cyBvcGVyYXRpb25zIHJhdGhlciB0aGFuIGxldHRpbmcKKyAqIHRoZW0gc2lsZW50bHkgcHJvY2VlZCB3aXRob3V0IHRha2luZyB0aGUgYnJva2VuIHJlZiBpbnRvCisgKiBhY2NvdW50LgorICovCitleHRlcm4gaW50IHJlZl9wYXJhbm9pYTsKKworLyoKKyAqIFRoZSBjaGFyYWN0ZXIgdGhhdCBiZWdpbnMgYSBjb21tZW50ZWQgbGluZSBpbiB1c2VyLWVkaXRhYmxlIGZpbGUKKyAqIHRoYXQgaXMgc3ViamVjdCB0byBzdHJpcHNwYWNlLgorICovCitleHRlcm4gY2hhciBjb21tZW50X2xpbmVfY2hhcjsKK2V4dGVybiBpbnQgYXV0b19jb21tZW50X2xpbmVfY2hhcjsKKworZW51bSBicmFuY2hfdHJhY2sgeworCUJSQU5DSF9UUkFDS19VTlNQRUNJRklFRCA9IC0xLAorCUJSQU5DSF9UUkFDS19ORVZFUiA9IDAsCisJQlJBTkNIX1RSQUNLX1JFTU9URSwKKwlCUkFOQ0hfVFJBQ0tfQUxXQVlTLAorCUJSQU5DSF9UUkFDS19FWFBMSUNJVCwKKwlCUkFOQ0hfVFJBQ0tfT1ZFUlJJREUKK307CisKK2VudW0gcmViYXNlX3NldHVwX3R5cGUgeworCUFVVE9SRUJBU0VfTkVWRVIgPSAwLAorCUFVVE9SRUJBU0VfTE9DQUwsCisJQVVUT1JFQkFTRV9SRU1PVEUsCisJQVVUT1JFQkFTRV9BTFdBWVMKK307CisKK2VudW0gcHVzaF9kZWZhdWx0X3R5cGUgeworCVBVU0hfREVGQVVMVF9OT1RISU5HID0gMCwKKwlQVVNIX0RFRkFVTFRfTUFUQ0hJTkcsCisJUFVTSF9ERUZBVUxUX1NJTVBMRSwKKwlQVVNIX0RFRkFVTFRfVVBTVFJFQU0sCisJUFVTSF9ERUZBVUxUX0NVUlJFTlQsCisJUFVTSF9ERUZBVUxUX1VOU1BFQ0lGSUVECit9OworCitleHRlcm4gZW51bSBicmFuY2hfdHJhY2sgZ2l0X2JyYW5jaF90cmFjazsKK2V4dGVybiBlbnVtIHJlYmFzZV9zZXR1cF90eXBlIGF1dG9yZWJhc2U7CitleHRlcm4gZW51bSBwdXNoX2RlZmF1bHRfdHlwZSBwdXNoX2RlZmF1bHQ7CisKK2VudW0gb2JqZWN0X2NyZWF0aW9uX21vZGUgeworCU9CSkVDVF9DUkVBVElPTl9VU0VTX0hBUkRMSU5LUyA9IDAsCisJT0JKRUNUX0NSRUFUSU9OX1VTRVNfUkVOQU1FUyA9IDEKK307CisKK2V4dGVybiBlbnVtIG9iamVjdF9jcmVhdGlvbl9tb2RlIG9iamVjdF9jcmVhdGlvbl9tb2RlOworCitleHRlcm4gY2hhciAqbm90ZXNfcmVmX25hbWU7CisKK2V4dGVybiBpbnQgZ3JhZnRzX3JlcGxhY2VfcGFyZW50czsKKworLyoKKyAqIEdJVF9SRVBPX1ZFUlNJT04gaXMgdGhlIHZlcnNpb24gd2Ugd3JpdGUgYnkgZGVmYXVsdC4gVGhlCisgKiBfUkVBRCB2YXJpYW50IGlzIHRoZSBoaWdoZXN0IG51bWJlciB3ZSBrbm93IGhvdyB0bworICogaGFuZGxlLgorICovCisjZGVmaW5lIEdJVF9SRVBPX1ZFUlNJT04gMAorI2RlZmluZSBHSVRfUkVQT19WRVJTSU9OX1JFQUQgMQorZXh0ZXJuIGludCByZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uOworZXh0ZXJuIGludCByZXBvc2l0b3J5X2Zvcm1hdF9wcmVjaW91c19vYmplY3RzOworZXh0ZXJuIGludCBjaGVja19yZXBvc2l0b3J5X2Zvcm1hdCh2b2lkKTsKKworI2RlZmluZSBNVElNRV9DSEFOR0VECTB4MDAwMQorI2RlZmluZSBDVElNRV9DSEFOR0VECTB4MDAwMgorI2RlZmluZSBPV05FUl9DSEFOR0VECTB4MDAwNAorI2RlZmluZSBNT0RFX0NIQU5HRUQgICAgMHgwMDA4CisjZGVmaW5lIElOT0RFX0NIQU5HRUQgICAweDAwMTAKKyNkZWZpbmUgREFUQV9DSEFOR0VEICAgIDB4MDAyMAorI2RlZmluZSBUWVBFX0NIQU5HRUQgICAgMHgwMDQwCisKKy8qCisgKiBSZXR1cm4gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBmaWxlbmFtZSwgZWl0aGVyIGdlbmVyaWNhbGx5IChta3BhdGgpLCBpbgorICogdGhlIHJlcG9zaXRvcnkgZGlyZWN0b3J5IChnaXRfcGF0aCksIG9yIGluIGEgc3VibW9kdWxlJ3MgcmVwb3NpdG9yeQorICogZGlyZWN0b3J5IChnaXRfcGF0aF9zdWJtb2R1bGUpLiBJbiBhbGwgY2FzZXMsIG5vdGUgdGhhdCB0aGUgcmVzdWx0CisgKiBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgYW5vdGhlciBjYWxsIHRvIF9hbnlfIG9mIHRoZSBmdW5jdGlvbnMuIENvbnNpZGVyCisgKiB1c2luZyB0aGUgc2FmZXIgImR1cCIgb3IgInN0cmJ1ZiIgZm9ybWF0cyBiZWxvdyAoaW4gc29tZSBjYXNlcywgdGhlCisgKiB1bnNhZmUgdmVyc2lvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCkuCisgKi8KK2V4dGVybiBjb25zdCBjaGFyICpta3BhdGgoY29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9wYXRoKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworZXh0ZXJuIGNoYXIgKm1rc25wYXRoKGNoYXIgKmJ1Ziwgc2l6ZV90IG4sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworZXh0ZXJuIHZvaWQgc3RyYnVmX2dpdF9wYXRoKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiBjaGFyICpnaXRfcGF0aF9idWYoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKK2V4dGVybiB2b2lkIHN0cmJ1Zl9naXRfcGF0aF9zdWJtb2R1bGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CitleHRlcm4gY2hhciAqZ2l0X3BhdGhkdXAoY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitleHRlcm4gY2hhciAqbWtwYXRoZHVwKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIGNoYXIgKmdpdF9wYXRoZHVwX3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworZXh0ZXJuIHZvaWQgcmVwb3J0X2xpbmtlZF9jaGVja291dF9nYXJiYWdlKHZvaWQpOworCisvKgorICogWW91IGNhbiBkZWZpbmUgYSBzdGF0aWMgbWVtb2l6ZWQgZ2l0IHBhdGggbGlrZToKKyAqCisgKiAgICBzdGF0aWMgR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9mb28sICJGT08iKTsKKyAqCisgKiBvciB1c2Ugb25lIG9mIHRoZSBnbG9iYWwgb25lcyBiZWxvdy4KKyAqLworI2RlZmluZSBHSVRfUEFUSF9GVU5DKGZ1bmMsIGZpbGVuYW1lKSBcCisJY29uc3QgY2hhciAqZnVuYyh2b2lkKSBcCisJeyBcCisJCXN0YXRpYyBjaGFyICpyZXQ7IFwKKwkJaWYgKCFyZXQpIFwKKwkJCXJldCA9IGdpdF9wYXRoZHVwKGZpbGVuYW1lKTsgXAorCQlyZXR1cm4gcmV0OyBcCisJfQorCitjb25zdCBjaGFyICpnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKHZvaWQpOworY29uc3QgY2hhciAqZ2l0X3BhdGhfcmV2ZXJ0X2hlYWQodm9pZCk7Citjb25zdCBjaGFyICpnaXRfcGF0aF9zcXVhc2hfbXNnKHZvaWQpOworY29uc3QgY2hhciAqZ2l0X3BhdGhfbWVyZ2VfbXNnKHZvaWQpOworY29uc3QgY2hhciAqZ2l0X3BhdGhfbWVyZ2VfcnIodm9pZCk7Citjb25zdCBjaGFyICpnaXRfcGF0aF9tZXJnZV9tb2RlKHZvaWQpOworY29uc3QgY2hhciAqZ2l0X3BhdGhfbWVyZ2VfaGVhZCh2b2lkKTsKK2NvbnN0IGNoYXIgKmdpdF9wYXRoX2ZldGNoX2hlYWQodm9pZCk7Citjb25zdCBjaGFyICpnaXRfcGF0aF9zaGFsbG93KHZvaWQpOworCisvKgorICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGluIHRoZSBsb2NhbCBvYmplY3QgZGF0YWJhc2UgdGhhdCB3b3VsZAorICogYmUgdXNlZCB0byBzdG9yZSBhIGxvb3NlIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgc2hhMS4gIFRoZQorICogcmV0dXJuIHZhbHVlIGlzIGEgcG9pbnRlciB0byBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGJ1ZmZlciB0aGF0IGlzCisgKiBvdmVyd3JpdHRlbiBlYWNoIHRpbWUgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKnNoYTFfZmlsZV9uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCisvKgorICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSAobG9jYWwpIHBhY2tmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBzaGExIGluCisgKiBpdHMgbmFtZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwb2ludGVyIHRvIG1lbW9yeSB0aGF0IGlzCisgKiBvdmVyd3JpdHRlbiBlYWNoIHRpbWUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKi8KK2V4dGVybiBjaGFyICpzaGExX3BhY2tfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworLyoKKyAqIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgKGxvY2FsKSBwYWNrIGluZGV4IGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkCisgKiBzaGExIGluIGl0cyBuYW1lLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gbWVtb3J5IHRoYXQgaXMKKyAqIG92ZXJ3cml0dGVuIGVhY2ggdGltZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqLworZXh0ZXJuIGNoYXIgKnNoYTFfcGFja19pbmRleF9uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCisvKgorICogUmV0dXJuIGFuIGFiYnJldmlhdGVkIHNoYTEgdW5pcXVlIHdpdGhpbiB0aGlzIHJlcG9zaXRvcnkncyBvYmplY3QgZGF0YWJhc2UuCisgKiBUaGUgcmVzdWx0IHdpbGwgYmUgYXQgbGVhc3QgYGxlbmAgY2hhcmFjdGVycyBsb25nLCBhbmQgd2lsbCBiZSBOVUwKKyAqIHRlcm1pbmF0ZWQuCisgKgorICogVGhlIG5vbi1gX3JgIHZlcnNpb24gcmV0dXJucyBhIHN0YXRpYyBidWZmZXIgd2hpY2ggd2lsbCBiZSBvdmVyd3JpdHRlbiBieQorICogc3Vic2VxdWVudCBjYWxscy4KKyAqCisgKiBUaGUgYF9yYCB2YXJpYW50IHdyaXRlcyB0byBhIGJ1ZmZlciBzdXBwbGllZCBieSB0aGUgY2FsbGVyLCB3aGljaCBtdXN0IGJlIGF0CisgKiBsZWFzdCBgR0lUX1NIQTFfSEVYU1ogKyAxYCBieXRlcy4gVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgKiB3cml0dGVuIChleGNsdWRpbmcgdGhlIE5VTCB0ZXJtaW5hdG9yKS4KKyAqCisgKiBOb3RlIHRoYXQgd2hpbGUgdGhpcyB2ZXJzaW9uIGF2b2lkcyB0aGUgc3RhdGljIGJ1ZmZlciwgaXQgaXMgbm90IGZ1bGx5CisgKiByZWVudHJhbnQsIGFzIGl0IGNhbGxzIGludG8gb3RoZXIgbm9uLXJlZW50cmFudCBnaXQgY29kZS4KKyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmZpbmRfdW5pcXVlX2FiYnJldihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgZmluZF91bmlxdWVfYWJicmV2X3IoY2hhciAqaGV4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgbGVuKTsKKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgbnVsbF9zaGExW0dJVF9TSEExX1JBV1NaXTsKKworc3RhdGljIGlubGluZSBpbnQgaGFzaGNtcChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGEyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEdJVF9TSEExX1JBV1NaOyBpKyssIHNoYTErKywgc2hhMisrKSB7CisJCWlmICgqc2hhMSAhPSAqc2hhMikKKwkJCXJldHVybiAqc2hhMSAtICpzaGEyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBvaWRjbXAoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkMSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkMikKK3sKKwlyZXR1cm4gaGFzaGNtcChvaWQxLT5oYXNoLCBvaWQyLT5oYXNoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfbnVsbF9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJcmV0dXJuICFoYXNoY21wKHNoYTEsIG51bGxfc2hhMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX251bGxfb2lkKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCkKK3sKKwlyZXR1cm4gIWhhc2hjbXAob2lkLT5oYXNoLCBudWxsX3NoYTEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGFzaGNweSh1bnNpZ25lZCBjaGFyICpzaGFfZHN0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGFfc3JjKQoreworCW1lbWNweShzaGFfZHN0LCBzaGFfc3JjLCBHSVRfU0hBMV9SQVdTWik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvaWRjcHkoc3RydWN0IG9iamVjdF9pZCAqZHN0LCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpzcmMpCit7CisJaGFzaGNweShkc3QtPmhhc2gsIHNyYy0+aGFzaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYXNoY2xyKHVuc2lnbmVkIGNoYXIgKmhhc2gpCit7CisJbWVtc2V0KGhhc2gsIDAsIEdJVF9TSEExX1JBV1NaKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9pZGNscihzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJaGFzaGNscihvaWQtPmhhc2gpOworfQorCisKKyNkZWZpbmUgRU1QVFlfVFJFRV9TSEExX0hFWCBcCisJIjRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQiCisjZGVmaW5lIEVNUFRZX1RSRUVfU0hBMV9CSU5fTElURVJBTCBcCisJICJceDRiXHg4Mlx4NWRceGM2XHg0Mlx4Y2JceDZlXHhiOVx4YTBceDYwIiBcCisJICJceGU1XHg0Ylx4ZjhceGQ2XHg5Mlx4ODhceGZiXHhlZVx4NDlceDA0IgorI2RlZmluZSBFTVBUWV9UUkVFX1NIQTFfQklOIFwKKwkgKChjb25zdCB1bnNpZ25lZCBjaGFyICopIEVNUFRZX1RSRUVfU0hBMV9CSU5fTElURVJBTCkKKworI2RlZmluZSBFTVBUWV9CTE9CX1NIQTFfSEVYIFwKKwkiZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSIKKyNkZWZpbmUgRU1QVFlfQkxPQl9TSEExX0JJTl9MSVRFUkFMIFwKKwkiXHhlNlx4OWRceGUyXHg5Ylx4YjJceGQxXHhkNlx4NDNceDRiXHg4YiIgXAorCSJceDI5XHhhZVx4NzdceDVhXHhkOFx4YzJceGU0XHg4Y1x4NTNceDkxIgorI2RlZmluZSBFTVBUWV9CTE9CX1NIQTFfQklOIFwKKwkoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgRU1QVFlfQkxPQl9TSEExX0JJTl9MSVRFUkFMKQorCitzdGF0aWMgaW5saW5lIGludCBpc19lbXB0eV9ibG9iX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gIWhhc2hjbXAoc2hhMSwgRU1QVFlfQkxPQl9TSEExX0JJTik7Cit9CisKK2ludCBnaXRfbWtzdGVtcChjaGFyICpwYXRoLCBzaXplX3QgbiwgY29uc3QgY2hhciAqdGVtcGxhdGUpOworCitpbnQgZ2l0X21rc3RlbXBzKGNoYXIgKnBhdGgsIHNpemVfdCBuLCBjb25zdCBjaGFyICp0ZW1wbGF0ZSwgaW50IHN1ZmZpeF9sZW4pOworCisvKiBzZXQgZGVmYXVsdCBwZXJtaXNzaW9ucyBieSBwYXNzaW5nIG1vZGUgYXJndW1lbnRzIHRvIG9wZW4oMikgKi8KK2ludCBnaXRfbWtzdGVtcHNfbW9kZShjaGFyICpwYXR0ZXJuLCBpbnQgc3VmZml4X2xlbiwgaW50IG1vZGUpOworaW50IGdpdF9ta3N0ZW1wX21vZGUoY2hhciAqcGF0dGVybiwgaW50IG1vZGUpOworCisvKgorICogTk9URSBOT1RFIE5PVEUhIQorICoKKyAqIFBFUk1fVU1BU0ssIE9MRF9QRVJNX0dST1VQIGFuZCBPTERfUEVSTV9FVkVSWUJPRFkgZW51bWVyYXRpb25zIG11c3QKKyAqIG5vdCBiZSBjaGFuZ2VkLiBPbGQgcmVwb3NpdG9yaWVzIGhhdmUgY29yZS5zaGFyZWRyZXBvc2l0b3J5IHdyaXR0ZW4gaW4KKyAqIG51bWVyaWMgZm9ybWF0LCBhbmQgdGhlcmVmb3JlIHRoZXNlIHZhbHVlcyBhcmUgcHJlc2VydmVkIGZvciBjb21wYXRpYmlsaXR5CisgKiByZWFzb25zLgorICovCitlbnVtIHNoYXJlZHJlcG8geworCVBFUk1fVU1BU0sgICAgICAgICAgPSAwLAorCU9MRF9QRVJNX0dST1VQICAgICAgPSAxLAorCU9MRF9QRVJNX0VWRVJZQk9EWSAgPSAyLAorCVBFUk1fR1JPVVAgICAgICAgICAgPSAwNjYwLAorCVBFUk1fRVZFUllCT0RZICAgICAgPSAwNjY0Cit9OworaW50IGdpdF9jb25maWdfcGVybShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2ludCBhZGp1c3Rfc2hhcmVkX3Blcm0oY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBDcmVhdGUgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBuYW1lZCBwYXRoLCB1c2luZyBjYXJlIHRvIGJlCisgKiBzb21ld2hhdCBzYWZlIGFnYWluc3QgcmFjZXMuICBSZXR1cm4gb25lIG9mIHRoZSBzY2xkX2Vycm9yIHZhbHVlcworICogdG8gaW5kaWNhdGUgc3VjY2Vzcy9mYWlsdXJlLgorICoKKyAqIFNDTERfVkFOSVNIRUQgaW5kaWNhdGVzIHRoYXQgb25lIG9mIHRoZSBhbmNlc3RvciBkaXJlY3RvcmllcyBvZiB0aGUKKyAqIHBhdGggZXhpc3RlZCBhdCBvbmUgcG9pbnQgZHVyaW5nIHRoZSBmdW5jdGlvbiBjYWxsIGFuZCB0aGVuCisgKiBzdWRkZW5seSB2YW5pc2hlZCwgcHJvYmFibHkgYmVjYXVzZSBhbm90aGVyIHByb2Nlc3MgcHJ1bmVkIHRoZQorICogZGlyZWN0b3J5IHdoaWxlIHdlIHdlcmUgd29ya2luZy4gIFRvIGJlIHJvYnVzdCBhZ2FpbnN0IHRoaXMga2luZCBvZgorICogcmFjZSwgY2FsbGVycyBtaWdodCB3YW50IHRvIHRyeSBpbnZva2luZyB0aGUgZnVuY3Rpb24gYWdhaW4gd2hlbiBpdAorICogcmV0dXJucyBTQ0xEX1ZBTklTSEVELgorICovCitlbnVtIHNjbGRfZXJyb3IgeworCVNDTERfT0sgPSAwLAorCVNDTERfRkFJTEVEID0gLTEsCisJU0NMRF9QRVJNUyA9IC0yLAorCVNDTERfRVhJU1RTID0gLTMsCisJU0NMRF9WQU5JU0hFRCA9IC00Cit9OworZW51bSBzY2xkX2Vycm9yIHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMoY2hhciAqcGF0aCk7CitlbnVtIHNjbGRfZXJyb3Igc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChjb25zdCBjaGFyICpwYXRoKTsKKworaW50IG1rZGlyX2luX2dpdGRpcihjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBjaGFyICpleHBhbmRfdXNlcl9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOworY29uc3QgY2hhciAqZW50ZXJfcmVwbyhjb25zdCBjaGFyICpwYXRoLCBpbnQgc3RyaWN0KTsKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2Fic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gaXNfZGlyX3NlcChwYXRoWzBdKSB8fCBoYXNfZG9zX2RyaXZlX3ByZWZpeChwYXRoKTsKK30KK2ludCBpc19kaXJlY3RvcnkoY29uc3QgY2hhciAqKTsKK2NvbnN0IGNoYXIgKnJlYWxfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKK2NvbnN0IGNoYXIgKnJlYWxfcGF0aF9pZl92YWxpZChjb25zdCBjaGFyICpwYXRoKTsKK2NvbnN0IGNoYXIgKmFic29sdXRlX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7Citjb25zdCBjaGFyICpyZW1vdmVfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpwcmVmaXgpOworY29uc3QgY2hhciAqcmVsYXRpdmVfcGF0aChjb25zdCBjaGFyICppbiwgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3Qgc3RyYnVmICpzYik7CitpbnQgbm9ybWFsaXplX3BhdGhfY29weV9sZW4oY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCAqcHJlZml4X2xlbik7CitpbnQgbm9ybWFsaXplX3BhdGhfY29weShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYyk7CitpbnQgbG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGgoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmluZ19saXN0ICpwcmVmaXhlcyk7CitjaGFyICpzdHJpcF9wYXRoX3N1ZmZpeChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzdWZmaXgpOworaW50IGRhZW1vbl9hdm9pZF9hbGlhcyhjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBpbnQgaXNfbnRmc19kb3RnaXQoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogUmV0dXJuIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mCisgKiAiJFhER19DT05GSUdfSE9NRS9naXQvJGZpbGVuYW1lIiBpZiAkWERHX0NPTkZJR19IT01FIGlzIG5vbi1lbXB0eSwgb3RoZXJ3aXNlCisgKiAiJEhPTUUvLmNvbmZpZy9naXQvJGZpbGVuYW1lIi4gUmV0dXJuIE5VTEwgdXBvbiBlcnJvci4KKyAqLworZXh0ZXJuIGNoYXIgKnhkZ19jb25maWdfaG9tZShjb25zdCBjaGFyICpmaWxlbmFtZSk7CisKKy8qIG9iamVjdCByZXBsYWNlbWVudCAqLworI2RlZmluZSBMT09LVVBfUkVQTEFDRV9PQkpFQ1QgMQorI2RlZmluZSBMT09LVVBfVU5LTk9XTl9PQkpFQ1QgMgorZXh0ZXJuIHZvaWQgKnJlYWRfc2hhMV9maWxlX2V4dGVuZGVkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgKnNpemUsIHVuc2lnbmVkIGZsYWcpOworc3RhdGljIGlubGluZSB2b2lkICpyZWFkX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXJldHVybiByZWFkX3NoYTFfZmlsZV9leHRlbmRlZChzaGExLCB0eXBlLCBzaXplLCBMT09LVVBfUkVQTEFDRV9PQkpFQ1QpOworfQorCisvKgorICogVGhpcyBpbnRlcm5hbCBmdW5jdGlvbiBpcyBvbmx5IGRlY2xhcmVkIGhlcmUgZm9yIHRoZSBiZW5lZml0IG9mCisgKiBsb29rdXBfcmVwbGFjZV9vYmplY3QoKS4gIFBsZWFzZSBkbyBub3QgY2FsbCBpdCBkaXJlY3RseS4KKyAqLworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvX2xvb2t1cF9yZXBsYWNlX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworLyoKKyAqIElmIG9iamVjdCBzaGExIHNob3VsZCBiZSByZXBsYWNlZCwgcmV0dXJuIHRoZSByZXBsYWNlbWVudCBvYmplY3QncworICogbmFtZSAocmVwbGFjZWQgcmVjdXJzaXZlbHksIGlmIG5lY2Vzc2FyeSkuICBUaGUgcmV0dXJuIHZhbHVlIGlzCisgKiBlaXRoZXIgc2hhMSBvciBhIHBvaW50ZXIgdG8gYSBwZXJtYW5lbnRseS1hbGxvY2F0ZWQgdmFsdWUuICBXaGVuCisgKiBvYmplY3QgcmVwbGFjZW1lbnQgaXMgc3VwcHJlc3NlZCwgYWx3YXlzIHJldHVybiBzaGExLgorICovCitzdGF0aWMgaW5saW5lIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxvb2t1cF9yZXBsYWNlX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWlmICghY2hlY2tfcmVwbGFjZV9yZWZzKQorCQlyZXR1cm4gc2hhMTsKKwlyZXR1cm4gZG9fbG9va3VwX3JlcGxhY2Vfb2JqZWN0KHNoYTEpOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxvb2t1cF9yZXBsYWNlX29iamVjdF9leHRlbmRlZChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBmbGFnKQoreworCWlmICghKGZsYWcgJiBMT09LVVBfUkVQTEFDRV9PQkpFQ1QpKQorCQlyZXR1cm4gc2hhMTsKKwlyZXR1cm4gbG9va3VwX3JlcGxhY2Vfb2JqZWN0KHNoYTEpOworfQorCisvKiBSZWFkIGFuZCB1bnBhY2sgYSBzaGExIGZpbGUgaW50byBtZW1vcnksIHdyaXRlIG1lbW9yeSB0byBhIHNoYTEgZmlsZSAqLworZXh0ZXJuIGludCBzaGExX29iamVjdF9pbmZvKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiBpbnQgaGFzaF9zaGExX2ZpbGUoY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgY2hhciAqdHlwZSwgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gaW50IHdyaXRlX3NoYTFfZmlsZShjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBjb25zdCBjaGFyICp0eXBlLCB1bnNpZ25lZCBjaGFyICpyZXR1cm5fc2hhMSk7CitleHRlcm4gaW50IGhhc2hfc2hhMV9maWxlX2xpdGVyYWxseShjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBjb25zdCBjaGFyICp0eXBlLCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBmbGFncyk7CitleHRlcm4gaW50IHByZXRlbmRfc2hhMV9maWxlKHZvaWQgKiwgdW5zaWduZWQgbG9uZywgZW51bSBvYmplY3RfdHlwZSwgdW5zaWduZWQgY2hhciAqKTsKK2V4dGVybiBpbnQgZm9yY2Vfb2JqZWN0X2xvb3NlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHRpbWVfdCBtdGltZSk7CitleHRlcm4gaW50IGdpdF9vcGVuX25vYXRpbWUoY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCAqbWFwX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBsb25nICpzaXplKTsKK2V4dGVybiBpbnQgdW5wYWNrX3NoYTFfaGVhZGVyKGdpdF96c3RyZWFtICpzdHJlYW0sIHVuc2lnbmVkIGNoYXIgKm1hcCwgdW5zaWduZWQgbG9uZyBtYXBzaXplLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmc2l6KTsKK2V4dGVybiBpbnQgcGFyc2Vfc2hhMV9oZWFkZXIoY29uc3QgY2hhciAqaGRyLCB1bnNpZ25lZCBsb25nICpzaXplcCk7CisKKy8qIGdsb2JhbCBmbGFnIHRvIGVuYWJsZSBleHRyYSBjaGVja3Mgd2hlbiBhY2Nlc3NpbmcgcGFja2VkIG9iamVjdHMgKi8KK2V4dGVybiBpbnQgZG9fY2hlY2tfcGFja2VkX29iamVjdF9jcmM7CisKK2V4dGVybiBpbnQgY2hlY2tfc2hhMV9zaWduYXR1cmUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IGNoYXIgKnR5cGUpOworCitleHRlcm4gaW50IGZpbmFsaXplX29iamVjdF9maWxlKGNvbnN0IGNoYXIgKnRtcGZpbGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKworZXh0ZXJuIGludCBoYXNfc2hhMV9wYWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCisvKgorICogUmV0dXJuIHRydWUgaWZmIHdlIGhhdmUgYW4gb2JqZWN0IG5hbWVkIHNoYTEsIHdoZXRoZXIgbG9jYWwgb3IgaW4KKyAqIGFuIGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2UsIGFuZCB3aGV0aGVyIHBhY2tlZCBvciBsb29zZS4gIFRoaXMKKyAqIGZ1bmN0aW9uIGRvZXMgbm90IHJlc3BlY3QgcmVwbGFjZSByZWZlcmVuY2VzLgorICoKKyAqIElmIHRoZSBRVUlDSyBmbGFnIGlzIHNldCwgZG8gbm90IHJlLWNoZWNrIHRoZSBwYWNrIGRpcmVjdG9yeQorICogd2hlbiB3ZSBjYW5ub3QgZmluZCB0aGUgb2JqZWN0ICh0aGlzIG1lYW5zIHdlIG1heSBnaXZlIGEgZmFsc2UKKyAqIG5lZ2F0aXZlIGFuc3dlciBpZiBhbm90aGVyIHByb2Nlc3MgaXMgc2ltdWx0YW5lb3VzbHkgcmVwYWNraW5nKS4KKyAqLworI2RlZmluZSBIQVNfU0hBMV9RVUlDSyAweDEKK2V4dGVybiBpbnQgaGFzX3NoYTFfZmlsZV93aXRoX2ZsYWdzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmbGFncyk7CitzdGF0aWMgaW5saW5lIGludCBoYXNfc2hhMV9maWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJcmV0dXJuIGhhc19zaGExX2ZpbGVfd2l0aF9mbGFncyhzaGExLCAwKTsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmZiBhbiBhbHRlcm5hdGUgb2JqZWN0IGRhdGFiYXNlIGhhcyBhIGxvb3NlIG9iamVjdAorICogd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc3BlY3QgcmVwbGFjZQorICogcmVmZXJlbmNlcy4KKyAqLworZXh0ZXJuIGludCBoYXNfbG9vc2Vfb2JqZWN0X25vbmxvY2FsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitleHRlcm4gaW50IGhhc19wYWNrX2luZGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitleHRlcm4gdm9pZCBhc3NlcnRfc2hhMV90eXBlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgZXhwZWN0KTsKKworZXh0ZXJuIGNvbnN0IHNpZ25lZCBjaGFyIGhleHZhbF90YWJsZVsyNTZdOworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaGV4dmFsKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlyZXR1cm4gaGV4dmFsX3RhYmxlW2NdOworfQorCisvKiBDb252ZXJ0IHRvL2Zyb20gaGV4L3NoYTEgcmVwcmVzZW50YXRpb24gKi8KKyNkZWZpbmUgTUlOSU1VTV9BQkJSRVYgbWluaW11bV9hYmJyZXYKKyNkZWZpbmUgREVGQVVMVF9BQkJSRVYgZGVmYXVsdF9hYmJyZXYKKworc3RydWN0IG9iamVjdF9jb250ZXh0IHsKKwl1bnNpZ25lZCBjaGFyIHRyZWVbMjBdOworCWNoYXIgcGF0aFtQQVRIX01BWF07CisJdW5zaWduZWQgbW9kZTsKKwkvKgorCSAqIHN5bWxpbmtfcGF0aCBpcyBvbmx5IHVzZWQgYnkgZ2V0X3RyZWVfZW50cnlfZm9sbG93X3N5bWxpbmtzLAorCSAqIGFuZCBvbmx5IGZvciBzeW1saW5rcyB0aGF0IHBvaW50IG91dHNpZGUgdGhlIHJlcG9zaXRvcnkuCisJICovCisJc3RydWN0IHN0cmJ1ZiBzeW1saW5rX3BhdGg7Cit9OworCisjZGVmaW5lIEdFVF9TSEExX1FVSUVUTFkgICAgICAgICAgIDAxCisjZGVmaW5lIEdFVF9TSEExX0NPTU1JVCAgICAgICAgICAgIDAyCisjZGVmaW5lIEdFVF9TSEExX0NPTU1JVFRJU0ggICAgICAgIDA0CisjZGVmaW5lIEdFVF9TSEExX1RSRUUgICAgICAgICAgICAgMDEwCisjZGVmaW5lIEdFVF9TSEExX1RSRUVJU0ggICAgICAgICAgMDIwCisjZGVmaW5lIEdFVF9TSEExX0JMT0IgICAgICAgICAgICAgMDQwCisjZGVmaW5lIEdFVF9TSEExX0ZPTExPV19TWU1MSU5LUyAwMTAwCisjZGVmaW5lIEdFVF9TSEExX09OTFlfVE9fRElFICAgIDA0MDAwCisKK2V4dGVybiBpbnQgZ2V0X3NoYTEoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBpbnQgZ2V0X3NoYTFfY29tbWl0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gaW50IGdldF9zaGExX2NvbW1pdHRpc2goY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBpbnQgZ2V0X3NoYTFfdHJlZShjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBnZXRfc2hhMV90cmVlaXNoKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gaW50IGdldF9zaGExX2Jsb2IoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiB2b2lkIG1heWJlX2RpZV9vbl9taXNzcGVsdF9vYmplY3RfbmFtZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpOworZXh0ZXJuIGludCBnZXRfc2hhMV93aXRoX2NvbnRleHQoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBmbGFncywgdW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IG9iamVjdF9jb250ZXh0ICpvcmMpOworCit0eXBlZGVmIGludCBlYWNoX2FiYnJldl9mbihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICopOworZXh0ZXJuIGludCBmb3JfZWFjaF9hYmJyZXYoY29uc3QgY2hhciAqcHJlZml4LCBlYWNoX2FiYnJldl9mbiwgdm9pZCAqKTsKKworLyoKKyAqIFRyeSB0byByZWFkIGEgU0hBMSBpbiBoZXhhZGVjaW1hbCBmb3JtYXQgZnJvbSB0aGUgNDAgY2hhcmFjdGVycworICogc3RhcnRpbmcgYXQgaGV4LiAgV3JpdGUgdGhlIDIwLWJ5dGUgcmVzdWx0IHRvIHNoYTEgaW4gYmluYXJ5IGZvcm0uCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLiAgUmVhZGluZyBzdG9wcyBpZiBhIE5VTCBpcyBlbmNvdW50ZXJlZCBpbiB0aGUKKyAqIGlucHV0LCBzbyBpdCBpcyBzYWZlIHRvIHBhc3MgdGhpcyBmdW5jdGlvbiBhbiBhcmJpdHJhcnkKKyAqIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCisgKi8KK2V4dGVybiBpbnQgZ2V0X3NoYTFfaGV4KGNvbnN0IGNoYXIgKmhleCwgdW5zaWduZWQgY2hhciAqc2hhMSk7CitleHRlcm4gaW50IGdldF9vaWRfaGV4KGNvbnN0IGNoYXIgKmhleCwgc3RydWN0IG9iamVjdF9pZCAqc2hhMSk7CisKKy8qCisgKiBDb252ZXJ0IGEgYmluYXJ5IHNoYTEgdG8gaXRzIGhleCBlcXVpdmFsZW50LiBUaGUgYF9yYCB2YXJpYW50IGlzIHJlZW50cmFudCwKKyAqIGFuZCB3cml0ZXMgdGhlIE5VTC10ZXJtaW5hdGVkIG91dHB1dCB0byB0aGUgYnVmZmVyIGBvdXRgLCB3aGljaCBtdXN0IGJlIGF0CisgKiBsZWFzdCBgR0lUX1NIQTFfSEVYU1ogKyAxYCBieXRlcywgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIG91dCBmb3IKKyAqIGNvbnZlbmllbmNlLgorICoKKyAqIFRoZSBub24tYF9yYCB2YXJpYW50IHJldHVybnMgYSBzdGF0aWMgYnVmZmVyLCBidXQgdXNlcyBhIHJpbmcgb2YgNAorICogYnVmZmVycywgbWFraW5nIGl0IHNhZmUgdG8gbWFrZSBtdWx0aXBsZSBjYWxscyBmb3IgYSBzaW5nbGUgc3RhdGVtZW50LCBsaWtlOgorICoKKyAqICAgcHJpbnRmKCIlcyAtPiAlcyIsIHNoYTFfdG9faGV4KG9uZSksIHNoYTFfdG9faGV4KHR3bykpOworICovCitleHRlcm4gY2hhciAqc2hhMV90b19oZXhfcihjaGFyICpvdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGNoYXIgKnNoYTFfdG9faGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOwkvKiBzdGF0aWMgYnVmZmVyIHJlc3VsdCEgKi8KK2V4dGVybiBjaGFyICpvaWRfdG9faGV4KGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCk7CS8qIHNhbWUgc3RhdGljIGJ1ZmZlciBhcyBzaGExX3RvX2hleCAqLworCitleHRlcm4gaW50IGludGVycHJldF9icmFuY2hfbmFtZShjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHN0cnVjdCBzdHJidWYgKik7CitleHRlcm4gaW50IGdldF9zaGExX21iKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKK2V4dGVybiBpbnQgdmFsaWRhdGVfaGVhZHJlZihjb25zdCBjaGFyICpyZWYpOworCitleHRlcm4gaW50IGJhc2VfbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgaW50IG1vZGUxLCBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBtb2RlMik7CitleHRlcm4gaW50IGRmX25hbWVfY29tcGFyZShjb25zdCBjaGFyICpuYW1lMSwgaW50IGxlbjEsIGludCBtb2RlMSwgY29uc3QgY2hhciAqbmFtZTIsIGludCBsZW4yLCBpbnQgbW9kZTIpOworZXh0ZXJuIGludCBuYW1lX2NvbXBhcmUoY29uc3QgY2hhciAqbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBjaGFyICpuYW1lMiwgc2l6ZV90IGxlbjIpOworZXh0ZXJuIGludCBjYWNoZV9uYW1lX3N0YWdlX2NvbXBhcmUoY29uc3QgY2hhciAqbmFtZTEsIGludCBsZW4xLCBpbnQgc3RhZ2UxLCBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBzdGFnZTIpOworCitleHRlcm4gdm9pZCAqcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkJY29uc3QgY2hhciAqcmVxdWlyZWRfdHlwZSwKKwkJCQkJdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkJdW5zaWduZWQgY2hhciAqc2hhMV9yZXQpOworCitleHRlcm4gc3RydWN0IG9iamVjdCAqcGVlbF90b190eXBlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJCSAgIHN0cnVjdCBvYmplY3QgKm8sIGVudW0gb2JqZWN0X3R5cGUpOworCitzdHJ1Y3QgZGF0ZV9tb2RlIHsKKwllbnVtIGRhdGVfbW9kZV90eXBlIHsKKwkJREFURV9OT1JNQUwgPSAwLAorCQlEQVRFX1JFTEFUSVZFLAorCQlEQVRFX1NIT1JULAorCQlEQVRFX0lTTzg2MDEsCisJCURBVEVfSVNPODYwMV9TVFJJQ1QsCisJCURBVEVfUkZDMjgyMiwKKwkJREFURV9TVFJGVElNRSwKKwkJREFURV9SQVcKKwl9IHR5cGU7CisJY29uc3QgY2hhciAqc3RyZnRpbWVfZm10OworCWludCBsb2NhbDsKK307CisKKy8qCisgKiBDb252ZW5pZW5jZSBoZWxwZXIgZm9yIHBhc3NpbmcgYSBjb25zdGFudCB0eXBlLCBsaWtlOgorICoKKyAqICAgc2hvd19kYXRlKHQsIHR6LCBEQVRFX01PREUoTk9STUFMKSk7CisgKi8KKyNkZWZpbmUgREFURV9NT0RFKHQpIGRhdGVfbW9kZV9mcm9tX3R5cGUoREFURV8jI3QpCitzdHJ1Y3QgZGF0ZV9tb2RlICpkYXRlX21vZGVfZnJvbV90eXBlKGVudW0gZGF0ZV9tb2RlX3R5cGUgdHlwZSk7CisKK2NvbnN0IGNoYXIgKnNob3dfZGF0ZSh1bnNpZ25lZCBsb25nIHRpbWUsIGludCB0aW1lem9uZSwgY29uc3Qgc3RydWN0IGRhdGVfbW9kZSAqbW9kZSk7Cit2b2lkIHNob3dfZGF0ZV9yZWxhdGl2ZSh1bnNpZ25lZCBsb25nIHRpbWUsIGludCB0eiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKm5vdywKKwkJCXN0cnVjdCBzdHJidWYgKnRpbWVidWYpOworaW50IHBhcnNlX2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgc3RydWN0IHN0cmJ1ZiAqb3V0KTsKK2ludCBwYXJzZV9kYXRlX2Jhc2ljKGNvbnN0IGNoYXIgKmRhdGUsIHVuc2lnbmVkIGxvbmcgKnRpbWVzdGFtcCwgaW50ICpvZmZzZXQpOworaW50IHBhcnNlX2V4cGlyeV9kYXRlKGNvbnN0IGNoYXIgKmRhdGUsIHVuc2lnbmVkIGxvbmcgKnRpbWVzdGFtcCk7Cit2b2lkIGRhdGVzdGFtcChzdHJ1Y3Qgc3RyYnVmICpvdXQpOworI2RlZmluZSBhcHByb3hpZGF0ZShzKSBhcHByb3hpZGF0ZV9jYXJlZnVsKChzKSwgTlVMTCkKK3Vuc2lnbmVkIGxvbmcgYXBwcm94aWRhdGVfY2FyZWZ1bChjb25zdCBjaGFyICosIGludCAqKTsKK3Vuc2lnbmVkIGxvbmcgYXBwcm94aWRhdGVfcmVsYXRpdmUoY29uc3QgY2hhciAqZGF0ZSwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKm5vdyk7Cit2b2lkIHBhcnNlX2RhdGVfZm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCwgc3RydWN0IGRhdGVfbW9kZSAqbW9kZSk7CitpbnQgZGF0ZV9vdmVyZmxvd3ModW5zaWduZWQgbG9uZyBkYXRlKTsKKworI2RlZmluZSBJREVOVF9TVFJJQ1QJICAgICAgIDEKKyNkZWZpbmUgSURFTlRfTk9fREFURQkgICAgICAgMgorI2RlZmluZSBJREVOVF9OT19OQU1FCSAgICAgICA0CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2F1dGhvcl9pbmZvKGludCk7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2NvbW1pdHRlcl9pbmZvKGludCk7CitleHRlcm4gY29uc3QgY2hhciAqZm10X2lkZW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmVtYWlsLCBjb25zdCBjaGFyICpkYXRlX3N0ciwgaW50KTsKK2V4dGVybiBjb25zdCBjaGFyICpmbXRfbmFtZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICplbWFpbCk7CitleHRlcm4gY29uc3QgY2hhciAqaWRlbnRfZGVmYXVsdF9uYW1lKHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmlkZW50X2RlZmF1bHRfZW1haWwodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2VkaXRvcih2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICpnaXRfcGFnZXIoaW50IHN0ZG91dF9pc190dHkpOworZXh0ZXJuIGludCBnaXRfaWRlbnRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworCitzdHJ1Y3QgaWRlbnRfc3BsaXQgeworCWNvbnN0IGNoYXIgKm5hbWVfYmVnaW47CisJY29uc3QgY2hhciAqbmFtZV9lbmQ7CisJY29uc3QgY2hhciAqbWFpbF9iZWdpbjsKKwljb25zdCBjaGFyICptYWlsX2VuZDsKKwljb25zdCBjaGFyICpkYXRlX2JlZ2luOworCWNvbnN0IGNoYXIgKmRhdGVfZW5kOworCWNvbnN0IGNoYXIgKnR6X2JlZ2luOworCWNvbnN0IGNoYXIgKnR6X2VuZDsKK307CisvKgorICogU2lnbmFscyBhbiBzdWNjZXNzIHdpdGggMCwgYnV0IHRpbWUgcGFydCBvZiB0aGUgcmVzdWx0IG1heSBiZSBOVUxMCisgKiBpZiB0aGUgaW5wdXQgbGFja3MgdGltZXN0YW1wIGFuZCB6b25lCisgKi8KK2V4dGVybiBpbnQgc3BsaXRfaWRlbnRfbGluZShzdHJ1Y3QgaWRlbnRfc3BsaXQgKiwgY29uc3QgY2hhciAqLCBpbnQpOworCisvKgorICogTGlrZSBzaG93X2RhdGUsIGJ1dCBwdWxsIHRoZSB0aW1lc3RhbXAgYW5kIHR6IHBhcmFtZXRlcnMgZnJvbQorICogdGhlIGlkZW50X3NwbGl0LiBJdCB3aWxsIGFsc28gc2FuaXR5LWNoZWNrIHRoZSB2YWx1ZXMgYW5kIHByb2R1Y2UKKyAqIGEgd2VsbC1rbm93biBzZW50aW5lbCBkYXRlIGlmIHRoZXkgYXBwZWFyIGJvZ3VzLgorICovCitjb25zdCBjaGFyICpzaG93X2lkZW50X2RhdGUoY29uc3Qgc3RydWN0IGlkZW50X3NwbGl0ICppZCwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgZGF0ZV9tb2RlICptb2RlKTsKKworLyoKKyAqIENvbXBhcmUgc3BsaXQgaWRlbnRzIGZvciBlcXVhbGl0eSBvciBzdHJpY3Qgb3JkZXJpbmcuIE5vdGUgdGhhdCB3ZQorICogY29tcGFyZSBvbmx5IHRoZSBpZGVudCBwYXJ0IG9mIHRoZSBsaW5lLCBpZ25vcmluZyBhbnkgdGltZXN0YW1wLgorICoKKyAqIEJlY2F1c2UgdGhlcmUgYXJlIHR3byBmaWVsZHMsIHdlIG11c3QgY2hvb3NlIG9uZSBhcyB0aGUgcHJpbWFyeSBrZXk7IHdlCisgKiBjdXJyZW50bHkgYXJiaXRyYXJpbHkgcGljayB0aGUgZW1haWwuCisgKi8KK2V4dGVybiBpbnQgaWRlbnRfY21wKGNvbnN0IHN0cnVjdCBpZGVudF9zcGxpdCAqLCBjb25zdCBzdHJ1Y3QgaWRlbnRfc3BsaXQgKik7CisKK3N0cnVjdCBjaGVja291dCB7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGU7CisJY29uc3QgY2hhciAqYmFzZV9kaXI7CisJaW50IGJhc2VfZGlyX2xlbjsKKwl1bnNpZ25lZCBmb3JjZToxLAorCQkgcXVpZXQ6MSwKKwkJIG5vdF9uZXc6MSwKKwkJIHJlZnJlc2hfY2FjaGU6MTsKK307CisKKyNkZWZpbmUgVEVNUE9SQVJZX0ZJTEVOQU1FX0xFTkdUSCAyNQorZXh0ZXJuIGludCBjaGVja291dF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBjaGFyICp0b3BhdGgpOworCitzdHJ1Y3QgY2FjaGVfZGVmIHsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGg7CisJaW50IGZsYWdzOworCWludCB0cmFja19mbGFnczsKKwlpbnQgcHJlZml4X2xlbl9zdGF0X2Z1bmM7Cit9OworI2RlZmluZSBDQUNIRV9ERUZfSU5JVCB7IFNUUkJVRl9JTklULCAwLCAwLCAwIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV9kZWZfY2xlYXIoc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUpCit7CisJc3RyYnVmX3JlbGVhc2UoJmNhY2hlLT5wYXRoKTsKK30KKworZXh0ZXJuIGludCBoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbik7CitleHRlcm4gaW50IHRocmVhZGVkX2hhc19zeW1saW5rX2xlYWRpbmdfcGF0aChzdHJ1Y3QgY2FjaGVfZGVmICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgY2hlY2tfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pOworZXh0ZXJuIGludCBoYXNfZGlyc19vbmx5X3BhdGgoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgaW50IHByZWZpeF9sZW4pOworZXh0ZXJuIHZvaWQgc2NoZWR1bGVfZGlyX2Zvcl9yZW1vdmFsKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pOworZXh0ZXJuIHZvaWQgcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKHZvaWQpOworCitleHRlcm4gc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgeworCXN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICpuZXh0OworCWNoYXIgKm5hbWU7CisJY2hhciBiYXNlW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9ICphbHRfb2RiX2xpc3Q7CitleHRlcm4gdm9pZCBwcmVwYXJlX2FsdF9vZGIodm9pZCk7CitleHRlcm4gdm9pZCByZWFkX2luZm9fYWx0ZXJuYXRlcyhjb25zdCBjaGFyICogcmVsYXRpdmVfYmFzZSwgaW50IGRlcHRoKTsKK2V4dGVybiB2b2lkIGFkZF90b19hbHRlcm5hdGVzX2ZpbGUoY29uc3QgY2hhciAqcmVmZXJlbmNlKTsKK3R5cGVkZWYgaW50IGFsdF9vZGJfZm4oc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZm9yZWFjaF9hbHRfb2RiKGFsdF9vZGJfZm4sIHZvaWQqKTsKKworc3RydWN0IHBhY2tfd2luZG93IHsKKwlzdHJ1Y3QgcGFja193aW5kb3cgKm5leHQ7CisJdW5zaWduZWQgY2hhciAqYmFzZTsKKwlvZmZfdCBvZmZzZXQ7CisJc2l6ZV90IGxlbjsKKwl1bnNpZ25lZCBpbnQgbGFzdF91c2VkOworCXVuc2lnbmVkIGludCBpbnVzZV9jbnQ7Cit9OworCitleHRlcm4gc3RydWN0IHBhY2tlZF9naXQgeworCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXh0OworCXN0cnVjdCBwYWNrX3dpbmRvdyAqd2luZG93czsKKwlvZmZfdCBwYWNrX3NpemU7CisJY29uc3Qgdm9pZCAqaW5kZXhfZGF0YTsKKwlzaXplX3QgaW5kZXhfc2l6ZTsKKwl1aW50MzJfdCBudW1fb2JqZWN0czsKKwl1aW50MzJfdCBudW1fYmFkX29iamVjdHM7CisJdW5zaWduZWQgY2hhciAqYmFkX29iamVjdF9zaGExOworCWludCBpbmRleF92ZXJzaW9uOworCXRpbWVfdCBtdGltZTsKKwlpbnQgcGFja19mZDsKKwl1bnNpZ25lZCBwYWNrX2xvY2FsOjEsCisJCSBwYWNrX2tlZXA6MSwKKwkJIGZyZXNoZW5lZDoxLAorCQkgZG9fbm90X2Nsb3NlOjE7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkvKiBzb21ldGhpbmcgbGlrZSAiLmdpdC9vYmplY3RzL3BhY2sveHh4eHgucGFjayIgKi8KKwljaGFyIHBhY2tfbmFtZVtGTEVYX0FSUkFZXTsgLyogbW9yZSAqLworfSAqcGFja2VkX2dpdDsKKworc3RydWN0IHBhY2tfZW50cnkgeworCW9mZl90IG9mZnNldDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworfTsKKworZXh0ZXJuIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYXJzZV9wYWNrX2luZGV4KHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmlkeF9wYXRoKTsKKworLyogQSBob29rIGZvciBjb3VudC1vYmplY3RzIHRvIHJlcG9ydCBpbnZhbGlkIGZpbGVzIGluIHBhY2sgZGlyZWN0b3J5ICovCitleHRlcm4gdm9pZCAoKnJlcG9ydF9nYXJiYWdlKShjb25zdCBjaGFyICpkZXNjLCBjb25zdCBjaGFyICpwYXRoKTsKKworZXh0ZXJuIHZvaWQgcHJlcGFyZV9wYWNrZWRfZ2l0KHZvaWQpOworZXh0ZXJuIHZvaWQgcmVwcmVwYXJlX3BhY2tlZF9naXQodm9pZCk7CitleHRlcm4gdm9pZCBpbnN0YWxsX3BhY2tlZF9naXQoc3RydWN0IHBhY2tlZF9naXQgKnBhY2spOworCitleHRlcm4gc3RydWN0IHBhY2tlZF9naXQgKmZpbmRfc2hhMV9wYWNrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJCSBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja3MpOworCitleHRlcm4gdm9pZCBwYWNrX3JlcG9ydCh2b2lkKTsKKworLyoKKyAqIG1tYXAgdGhlIGluZGV4IGZpbGUgZm9yIHRoZSBzcGVjaWZpZWQgcGFja2ZpbGUgKGlmIGl0IGlzIG5vdAorICogYWxyZWFkeSBtbWFwcGVkKS4gIFJldHVybiAwIG9uIHN1Y2Nlc3MuCisgKi8KK2V4dGVybiBpbnQgb3Blbl9wYWNrX2luZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICopOworCisvKgorICogbXVubWFwIHRoZSBpbmRleCBmaWxlIGZvciB0aGUgc3BlY2lmaWVkIHBhY2tmaWxlIChpZiBpdCBpcworICogY3VycmVudGx5IG1tYXBwZWQpLgorICovCitleHRlcm4gdm9pZCBjbG9zZV9wYWNrX2luZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICopOworCitleHRlcm4gdW5zaWduZWQgY2hhciAqdXNlX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKiwgc3RydWN0IHBhY2tfd2luZG93ICoqLCBvZmZfdCwgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiB2b2lkIGNsb3NlX3BhY2tfd2luZG93cyhzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKK2V4dGVybiB2b2lkIGNsb3NlX2FsbF9wYWNrcyh2b2lkKTsKK2V4dGVybiB2b2lkIHVudXNlX3BhY2soc3RydWN0IHBhY2tfd2luZG93ICoqKTsKK2V4dGVybiB2b2lkIGZyZWVfcGFja19ieV9uYW1lKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBjbGVhcl9kZWx0YV9iYXNlX2NhY2hlKHZvaWQpOworZXh0ZXJuIHN0cnVjdCBwYWNrZWRfZ2l0ICphZGRfcGFja2VkX2dpdChjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9sZW4sIGludCBsb2NhbCk7CisKKy8qCisgKiBSZXR1cm4gdGhlIFNIQS0xIG9mIHRoZSBudGggb2JqZWN0IHdpdGhpbiB0aGUgc3BlY2lmaWVkIHBhY2tmaWxlLgorICogT3BlbiB0aGUgaW5kZXggaWYgaXQgaXMgbm90IGFscmVhZHkgb3Blbi4gIFRoZSByZXR1cm4gdmFsdWUgcG9pbnRzCisgKiBhdCB0aGUgU0hBLTEgd2l0aGluIHRoZSBtbWFwcGVkIGluZGV4LiAgUmV0dXJuIE5VTEwgaWYgdGhlcmUgaXMgYW4KKyAqIGVycm9yLgorICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciAqbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShzdHJ1Y3QgcGFja2VkX2dpdCAqLCB1aW50MzJfdCBuKTsKKworLyoKKyAqIFJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBudGggb2JqZWN0IHdpdGhpbiB0aGUgc3BlY2lmaWVkIHBhY2tmaWxlLgorICogVGhlIGluZGV4IG11c3QgYWxyZWFkeSBiZSBvcGVuZWQuCisgKi8KK2V4dGVybiBvZmZfdCBudGhfcGFja2VkX29iamVjdF9vZmZzZXQoY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKiwgdWludDMyX3Qgbik7CisKKy8qCisgKiBJZiB0aGUgb2JqZWN0IG5hbWVkIHNoYTEgaXMgcHJlc2VudCBpbiB0aGUgc3BlY2lmaWVkIHBhY2tmaWxlLAorICogcmV0dXJuIGl0cyBvZmZzZXQgd2l0aGluIHRoZSBwYWNrZmlsZTsgb3RoZXJ3aXNlLCByZXR1cm4gMC4KKyAqLworZXh0ZXJuIG9mZl90IGZpbmRfcGFja19lbnRyeV9vbmUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IHBhY2tlZF9naXQgKik7CisKK2V4dGVybiBpbnQgaXNfcGFja192YWxpZChzdHJ1Y3QgcGFja2VkX2dpdCAqKTsKK2V4dGVybiB2b2lkICp1bnBhY2tfZW50cnkoc3RydWN0IHBhY2tlZF9naXQgKiwgb2ZmX3QsIGVudW0gb2JqZWN0X3R5cGUgKiwgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHVucGFja19vYmplY3RfaGVhZGVyX2J1ZmZlcihjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLCB1bnNpZ25lZCBsb25nICpzaXplcCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBnZXRfc2l6ZV9mcm9tX2RlbHRhKHN0cnVjdCBwYWNrZWRfZ2l0ICosIHN0cnVjdCBwYWNrX3dpbmRvdyAqKiwgb2ZmX3QpOworZXh0ZXJuIGludCB1bnBhY2tfb2JqZWN0X2hlYWRlcihzdHJ1Y3QgcGFja2VkX2dpdCAqLCBzdHJ1Y3QgcGFja193aW5kb3cgKiosIG9mZl90ICosIHVuc2lnbmVkIGxvbmcgKik7CisKKy8qCisgKiBJdGVyYXRlIG92ZXIgdGhlIGZpbGVzIGluIHRoZSBsb29zZS1vYmplY3QgcGFydHMgb2YgdGhlIG9iamVjdAorICogZGlyZWN0b3J5ICJwYXRoIiwgdHJpZ2dlcmluZyB0aGUgZm9sbG93aW5nIGNhbGxiYWNrczoKKyAqCisgKiAgLSBsb29zZV9vYmplY3QgaXMgY2FsbGVkIGZvciBlYWNoIGxvb3NlIG9iamVjdCB3ZSBmaW5kLgorICoKKyAqICAtIGxvb3NlX2NydWZ0IGlzIGNhbGxlZCBmb3IgYW55IGZpbGVzIHRoYXQgZG8gbm90IGFwcGVhciB0byBiZQorICogICAgbG9vc2Ugb2JqZWN0cy4gTm90ZSB0aGF0IHdlIG9ubHkgbG9vayBpbiB0aGUgbG9vc2Ugb2JqZWN0CisgKiAgICBkaXJlY3RvcmllcyAib2JqZWN0cy9bMC05YS1mXXsyfS8iLCBzbyB3ZSB3aWxsIG5vdCByZXBvcnQKKyAqICAgICJvYmplY3RzL2Zvb2JhciIgYXMgY3J1ZnQuCisgKgorICogIC0gbG9vc2Vfc3ViZGlyIGlzIGNhbGxlZCBmb3IgZWFjaCB0b3AtbGV2ZWwgaGFzaGVkIHN1YmRpcmVjdG9yeQorICogICAgb2YgdGhlIG9iamVjdCBkaXJlY3RvcnkgKGUuZy4sICIkT0JKRElSL2YwIikuIEl0IGlzIGNhbGxlZAorICogICAgYWZ0ZXIgdGhlIG9iamVjdHMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgcHJvY2Vzc2VkLgorICoKKyAqIEFueSBjYWxsYmFjayB0aGF0IGlzIE5VTEwgd2lsbCBiZSBpZ25vcmVkLiBDYWxsYmFja3MgcmV0dXJuaW5nIG5vbi16ZXJvCisgKiB3aWxsIGVuZCB0aGUgaXRlcmF0aW9uLgorICoKKyAqIEluIHRoZSAiYnVmIiB2YXJpYW50LCAicGF0aCIgaXMgYSBzdHJidWYgd2hpY2ggd2lsbCBhbHNvIGJlIHVzZWQgYXMgYQorICogc2NyYXRjaCBidWZmZXIsIGJ1dCByZXN0b3JlZCB0byBpdHMgb3JpZ2luYWwgY29udGVudHMgYmVmb3JlCisgKiB0aGUgZnVuY3Rpb24gcmV0dXJucy4KKyAqLwordHlwZWRlZiBpbnQgZWFjaF9sb29zZV9vYmplY3RfZm4oY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkgdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCBlYWNoX2xvb3NlX2NydWZ0X2ZuKGNvbnN0IGNoYXIgKmJhc2VuYW1lLAorCQkJCWNvbnN0IGNoYXIgKnBhdGgsCisJCQkJdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCBlYWNoX2xvb3NlX3N1YmRpcl9mbihpbnQgbnIsCisJCQkJIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJIHZvaWQgKmRhdGEpOworaW50IGZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICBlYWNoX2xvb3NlX29iamVjdF9mbiBvYmpfY2IsCisJCQkJICBlYWNoX2xvb3NlX2NydWZ0X2ZuIGNydWZ0X2NiLAorCQkJCSAgZWFjaF9sb29zZV9zdWJkaXJfZm4gc3ViZGlyX2NiLAorCQkJCSAgdm9pZCAqZGF0YSk7CitpbnQgZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXJfYnVmKHN0cnVjdCBzdHJidWYgKnBhdGgsCisJCQkJICAgICAgZWFjaF9sb29zZV9vYmplY3RfZm4gb2JqX2NiLAorCQkJCSAgICAgIGVhY2hfbG9vc2VfY3J1ZnRfZm4gY3J1ZnRfY2IsCisJCQkJICAgICAgZWFjaF9sb29zZV9zdWJkaXJfZm4gc3ViZGlyX2NiLAorCQkJCSAgICAgIHZvaWQgKmRhdGEpOworCisvKgorICogSXRlcmF0ZSBvdmVyIGxvb3NlIGFuZCBwYWNrZWQgb2JqZWN0cyBpbiBib3RoIHRoZSBsb2NhbAorICogcmVwb3NpdG9yeSBhbmQgYW55IGFsdGVybmF0ZXMgcmVwb3NpdG9yaWVzICh1bmxlc3MgdGhlCisgKiBMT0NBTF9PTkxZIGZsYWcgaXMgc2V0KS4KKyAqLworI2RlZmluZSBGT1JfRUFDSF9PQkpFQ1RfTE9DQUxfT05MWSAweDEKK3R5cGVkZWYgaW50IGVhY2hfcGFja2VkX29iamVjdF9mbihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgc3RydWN0IHBhY2tlZF9naXQgKnBhY2ssCisJCQkJICB1aW50MzJfdCBwb3MsCisJCQkJICB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfbG9vc2Vfb2JqZWN0KGVhY2hfbG9vc2Vfb2JqZWN0X2ZuLCB2b2lkICosIHVuc2lnbmVkIGZsYWdzKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfcGFja2VkX29iamVjdChlYWNoX3BhY2tlZF9vYmplY3RfZm4sIHZvaWQgKiwgdW5zaWduZWQgZmxhZ3MpOworCitzdHJ1Y3Qgb2JqZWN0X2luZm8geworCS8qIFJlcXVlc3QgKi8KKwllbnVtIG9iamVjdF90eXBlICp0eXBlcDsKKwl1bnNpZ25lZCBsb25nICpzaXplcDsKKwl1bnNpZ25lZCBsb25nICpkaXNrX3NpemVwOworCXVuc2lnbmVkIGNoYXIgKmRlbHRhX2Jhc2Vfc2hhMTsKKwlzdHJ1Y3Qgc3RyYnVmICp0eXBlbmFtZTsKKworCS8qIFJlc3BvbnNlICovCisJZW51bSB7CisJCU9JX0NBQ0hFRCwKKwkJT0lfTE9PU0UsCisJCU9JX1BBQ0tFRCwKKwkJT0lfREJDQUNIRUQKKwl9IHdoZW5jZTsKKwl1bmlvbiB7CisJCS8qCisJCSAqIHN0cnVjdCB7CisJCSAqIAkuLi4gTm90aGluZyB0byBleHBvc2UgaW4gdGhpcyBjYXNlCisJCSAqIH0gY2FjaGVkOworCQkgKiBzdHJ1Y3QgeworCQkgKiAJLi4uIE5vdGhpbmcgdG8gZXhwb3NlIGluIHRoaXMgY2FzZQorCQkgKiB9IGxvb3NlOworCQkgKi8KKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrOworCQkJb2ZmX3Qgb2Zmc2V0OworCQkJdW5zaWduZWQgaW50IGlzX2RlbHRhOworCQl9IHBhY2tlZDsKKwl9IHU7Cit9OworZXh0ZXJuIGludCBzaGExX29iamVjdF9pbmZvX2V4dGVuZGVkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IG9iamVjdF9pbmZvICosIHVuc2lnbmVkIGZsYWdzKTsKKworLyogRHVtYiBzZXJ2ZXJzIHN1cHBvcnQgKi8KK2V4dGVybiBpbnQgdXBkYXRlX3NlcnZlcl9pbmZvKGludCk7CisKKy8qIGdpdF9jb25maWdfcGFyc2Vfa2V5KCkgcmV0dXJucyB0aGVzZSBuZWdhdGVkOiAqLworI2RlZmluZSBDT05GSUdfSU5WQUxJRF9LRVkgMQorI2RlZmluZSBDT05GSUdfTk9fU0VDVElPTl9PUl9OQU1FIDIKKy8qIGdpdF9jb25maWdfc2V0KCksIGdpdF9jb25maWdfc2V0X211bHRpdmFyKCkgcmV0dXJuIHRoZSBhYm92ZSBvciB0aGVzZTogKi8KKyNkZWZpbmUgQ09ORklHX05PX0xPQ0sgLTEKKyNkZWZpbmUgQ09ORklHX0lOVkFMSURfRklMRSAzCisjZGVmaW5lIENPTkZJR19OT19XUklURSA0CisjZGVmaW5lIENPTkZJR19OT1RISU5HX1NFVCA1CisjZGVmaW5lIENPTkZJR19JTlZBTElEX1BBVFRFUk4gNgorI2RlZmluZSBDT05GSUdfR0VORVJJQ19FUlJPUiA3CisKKyNkZWZpbmUgQ09ORklHX1JFR0VYX05PTkUgKCh2b2lkICopMSkKKworc3RydWN0IGdpdF9jb25maWdfc291cmNlIHsKKwl1bnNpZ25lZCBpbnQgdXNlX3N0ZGluOjE7CisJY29uc3QgY2hhciAqZmlsZTsKKwljb25zdCBjaGFyICpibG9iOworfTsKKwordHlwZWRlZiBpbnQgKCpjb25maWdfZm5fdCkoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gaW50IGdpdF9kZWZhdWx0X2NvbmZpZyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoY29uZmlnX2ZuX3QgZm4sIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19mcm9tX2J1Zihjb25maWdfZm5fdCBmbiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgZ2l0X2NvbmZpZ19wdXNoX3BhcmFtZXRlcihjb25zdCBjaGFyICp0ZXh0KTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19mcm9tX3BhcmFtZXRlcnMoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgZ2l0X2NvbmZpZyhjb25maWdfZm5fdCBmbiwgdm9pZCAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ193aXRoX29wdGlvbnMoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKiwKKwkJCQkgICBzdHJ1Y3QgZ2l0X2NvbmZpZ19zb3VyY2UgKmNvbmZpZ19zb3VyY2UsCisJCQkJICAgaW50IHJlc3BlY3RfaW5jbHVkZXMpOworZXh0ZXJuIGludCBnaXRfY29uZmlnX2Vhcmx5KGNvbmZpZ19mbl90IGZuLCB2b2lkICosIGNvbnN0IGNoYXIgKnJlcG9fY29uZmlnKTsKK2V4dGVybiBpbnQgZ2l0X3BhcnNlX3Vsb25nKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiBpbnQgZ2l0X3BhcnNlX21heWJlX2Jvb2woY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19pbnQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludDY0X3QgZ2l0X2NvbmZpZ19pbnQ2NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBnaXRfY29uZmlnX3Vsb25nKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19ib29sX29yX2ludChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnX2Jvb2woY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnX21heWJlX2Jvb2woY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnX3N0cmluZyhjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGdpdF9jb25maWdfcGF0aG5hbWUoY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnX3NldF9pbl9maWxlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnX3NldChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGdpdF9jb25maWdfcGFyc2Vfa2V5KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50ICopOworZXh0ZXJuIGludCBnaXRfY29uZmlnX2tleV9pc192YWxpZChjb25zdCBjaGFyICprZXkpOworZXh0ZXJuIGludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb25faW5fZmlsZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBjb25zdCBjaGFyICpnaXRfZXRjX2dpdGNvbmZpZyh2b2lkKTsKK2V4dGVybiBpbnQgY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CitleHRlcm4gaW50IGdpdF9lbnZfYm9vbChjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBnaXRfZW52X3Vsb25nKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IGdpdF9jb25maWdfc3lzdGVtKHZvaWQpOworZXh0ZXJuIGludCBjb25maWdfZXJyb3Jfbm9uYm9vbChjb25zdCBjaGFyICopOworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIGNvbmZpZ19lcnJvcl9ub25ib29sKHMpIChjb25maWdfZXJyb3Jfbm9uYm9vbChzKSwgY29uc3RfZXJyb3IoKSkKKyNlbmRpZgorZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9sb2dfb3V0cHV0X2VuY29kaW5nKHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9jb21taXRfb3V0cHV0X2VuY29kaW5nKHZvaWQpOworCitleHRlcm4gaW50IGdpdF9jb25maWdfcGFyc2VfcGFyYW1ldGVyKGNvbnN0IGNoYXIgKiwgY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpOworCitzdHJ1Y3QgY29uZmlnX2luY2x1ZGVfZGF0YSB7CisJaW50IGRlcHRoOworCWNvbmZpZ19mbl90IGZuOworCXZvaWQgKmRhdGE7Cit9OworI2RlZmluZSBDT05GSUdfSU5DTFVERV9JTklUIHsgMCB9CitleHRlcm4gaW50IGdpdF9jb25maWdfaW5jbHVkZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSk7CisKKy8qCisgKiBNYXRjaCBhbmQgcGFyc2UgYSBjb25maWcga2V5IG9mIHRoZSBmb3JtOgorICoKKyAqICAgc2VjdGlvbi4oc3Vic2VjdGlvbi4pP2tleQorICoKKyAqIChpLmUuLCB3aGF0IGdldHMgaGFuZGVkIHRvIGEgY29uZmlnX2ZuX3QpLiBUaGUgY2FsbGVyIHByb3ZpZGVzIHRoZSBzZWN0aW9uOworICogd2UgcmV0dXJuIC0xIGlmIGl0IGRvZXMgbm90IG1hdGNoLCAwIG90aGVyd2lzZS4gVGhlIHN1YnNlY3Rpb24gYW5kIGtleQorICogb3V0LXBhcmFtZXRlcnMgYXJlIGZpbGxlZCBieSB0aGUgZnVuY3Rpb24gKGFuZCBzdWJzZWN0aW9uIGlzIE5VTEwgaWYgaXQgaXMKKyAqIG1pc3NpbmcpLgorICovCitleHRlcm4gaW50IHBhcnNlX2NvbmZpZ19rZXkoY29uc3QgY2hhciAqdmFyLAorCQkJICAgIGNvbnN0IGNoYXIgKnNlY3Rpb24sCisJCQkgICAgY29uc3QgY2hhciAqKnN1YnNlY3Rpb24sIGludCAqc3Vic2VjdGlvbl9sZW4sCisJCQkgICAgY29uc3QgY2hhciAqKmtleSk7CisKK3N0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwljaGFyICprZXk7CisJc3RydWN0IHN0cmluZ19saXN0IHZhbHVlX2xpc3Q7Cit9OworCitzdHJ1Y3QgY29uZmlnc2V0X2xpc3RfaXRlbSB7CisJc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCAqZTsKKwlpbnQgdmFsdWVfaW5kZXg7Cit9OworCisvKgorICogdGhlIGNvbnRlbnRzIG9mIHRoZSBsaXN0IGFyZSBvcmRlcmVkIGFjY29yZGluZyB0byB0aGVpcgorICogcG9zaXRpb24gaW4gdGhlIGNvbmZpZyBmaWxlcyBhbmQgb3JkZXIgb2YgcGFyc2luZyB0aGUgZmlsZXMuCisgKiAoaS5lLiBrZXktdmFsdWUgcGFpciBhdCB0aGUgbGFzdCBwb3NpdGlvbiBvZiAuZ2l0L2NvbmZpZyB3aWxsCisgKiBiZSBhdCB0aGUgbGFzdCBpdGVtIG9mIHRoZSBsaXN0KQorICovCitzdHJ1Y3QgY29uZmlnc2V0X2xpc3QgeworCXN0cnVjdCBjb25maWdzZXRfbGlzdF9pdGVtICppdGVtczsKKwl1bnNpZ25lZCBpbnQgbnIsIGFsbG9jOworfTsKKworc3RydWN0IGNvbmZpZ19zZXQgeworCXN0cnVjdCBoYXNobWFwIGNvbmZpZ19oYXNoOworCWludCBoYXNoX2luaXRpYWxpemVkOworCXN0cnVjdCBjb25maWdzZXRfbGlzdCBsaXN0OworfTsKKworZXh0ZXJuIHZvaWQgZ2l0X2NvbmZpZ3NldF9pbml0KHN0cnVjdCBjb25maWdfc2V0ICpjcyk7CitleHRlcm4gaW50IGdpdF9jb25maWdzZXRfYWRkX2ZpbGUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CitleHRlcm4gaW50IGdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqdmFsdWUpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWVfbXVsdGkoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXkpOworZXh0ZXJuIHZvaWQgZ2l0X2NvbmZpZ3NldF9jbGVhcihzdHJ1Y3QgY29uZmlnX3NldCAqY3MpOworZXh0ZXJuIGludCBnaXRfY29uZmlnc2V0X2dldF9zdHJpbmdfY29uc3Qoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKipkZXN0KTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfc3RyaW5nKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBjaGFyICoqZGVzdCk7CitleHRlcm4gaW50IGdpdF9jb25maWdzZXRfZ2V0X2ludChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfdWxvbmcoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgKmRlc3QpOworZXh0ZXJuIGludCBnaXRfY29uZmlnc2V0X2dldF9ib29sKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpOworZXh0ZXJuIGludCBnaXRfY29uZmlnc2V0X2dldF9ib29sX29yX2ludChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgaW50ICppc19ib29sLCBpbnQgKmRlc3QpOworZXh0ZXJuIGludCBnaXRfY29uZmlnc2V0X2dldF9tYXliZV9ib29sKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpOworZXh0ZXJuIGludCBnaXRfY29uZmlnc2V0X2dldF9wYXRobmFtZShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworCitleHRlcm4gaW50IGdpdF9jb25maWdfZ2V0X3ZhbHVlKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKnZhbHVlKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpKGNvbnN0IGNoYXIgKmtleSk7CitleHRlcm4gdm9pZCBnaXRfY29uZmlnX2NsZWFyKHZvaWQpOworZXh0ZXJuIHZvaWQgZ2l0X2NvbmZpZ19pdGVyKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19nZXRfc3RyaW5nX2NvbnN0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworZXh0ZXJuIGludCBnaXRfY29uZmlnX2dldF9zdHJpbmcoY29uc3QgY2hhciAqa2V5LCBjaGFyICoqZGVzdCk7CitleHRlcm4gaW50IGdpdF9jb25maWdfZ2V0X2ludChjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CitleHRlcm4gaW50IGdpdF9jb25maWdfZ2V0X3Vsb25nKGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyAqZGVzdCk7CitleHRlcm4gaW50IGdpdF9jb25maWdfZ2V0X2Jvb2woY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpOworZXh0ZXJuIGludCBnaXRfY29uZmlnX2dldF9ib29sX29yX2ludChjb25zdCBjaGFyICprZXksIGludCAqaXNfYm9vbCwgaW50ICpkZXN0KTsKK2V4dGVybiBpbnQgZ2l0X2NvbmZpZ19nZXRfbWF5YmVfYm9vbChjb25zdCBjaGFyICprZXksIGludCAqZGVzdCk7CitleHRlcm4gaW50IGdpdF9jb25maWdfZ2V0X3BhdGhuYW1lKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpOworCitzdHJ1Y3Qga2V5X3ZhbHVlX2luZm8geworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWludCBsaW5lbnI7Cit9OworCitleHRlcm4gTk9SRVRVUk4gdm9pZCBnaXRfZGllX2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIE5PUkVUVVJOIHZvaWQgZ2l0X2RpZV9jb25maWdfbGluZW5yKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbnIpOworCitleHRlcm4gaW50IGNvbW1pdHRlcl9pZGVudF9zdWZmaWNpZW50bHlfZ2l2ZW4odm9pZCk7CitleHRlcm4gaW50IGF1dGhvcl9pZGVudF9zdWZmaWNpZW50bHlfZ2l2ZW4odm9pZCk7CisKK2V4dGVybiBjb25zdCBjaGFyICpnaXRfY29tbWl0X2VuY29kaW5nOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9sb2dfb3V0cHV0X2VuY29kaW5nOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdpdF9tYWlsbWFwX2ZpbGU7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X21haWxtYXBfYmxvYjsKKworLyogSU8gaGVscGVyIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHZvaWQgbWF5YmVfZmx1c2hfb3JfZGllKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitleHRlcm4gdm9pZCBmcHJpbnRmX29yX2RpZShGSUxFICosIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworI2RlZmluZSBDT1BZX1JFQURfRVJST1IgKC0yKQorI2RlZmluZSBDT1BZX1dSSVRFX0VSUk9SICgtMykKK2V4dGVybiBpbnQgY29weV9mZChpbnQgaWZkLCBpbnQgb2ZkKTsKK2V4dGVybiBpbnQgY29weV9maWxlKGNvbnN0IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbW9kZSk7CitleHRlcm4gaW50IGNvcHlfZmlsZV93aXRoX3RpbWUoY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBtb2RlKTsKKworZXh0ZXJuIHZvaWQgd3JpdGVfb3JfZGllKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOworZXh0ZXJuIGludCB3cml0ZV9vcl93aGluZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICptc2cpOworZXh0ZXJuIGludCB3cml0ZV9vcl93aGluZV9waXBlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsIGNvbnN0IGNoYXIgKm1zZyk7CitleHRlcm4gdm9pZCBmc3luY19vcl9kaWUoaW50IGZkLCBjb25zdCBjaGFyICopOworCitleHRlcm4gc3NpemVfdCByZWFkX2luX2Z1bGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCk7CitleHRlcm4gc3NpemVfdCB3cml0ZV9pbl9mdWxsKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpOworZXh0ZXJuIHNzaXplX3QgcHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBvZmZfdCBvZmZzZXQpOworCitzdGF0aWMgaW5saW5lIHNzaXplX3Qgd3JpdGVfc3RyX2luX2Z1bGwoaW50IGZkLCBjb25zdCBjaGFyICpzdHIpCit7CisJcmV0dXJuIHdyaXRlX2luX2Z1bGwoZmQsIHN0ciwgc3RybGVuKHN0cikpOworfQorCitleHRlcm4gaW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworZXh0ZXJuIGludCB3cml0ZV9maWxlX2dlbnRseShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKy8qIHBhZ2VyLmMgKi8KK2V4dGVybiB2b2lkIHNldHVwX3BhZ2VyKHZvaWQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnBhZ2VyX3Byb2dyYW07CitleHRlcm4gaW50IHBhZ2VyX2luX3VzZSh2b2lkKTsKK2V4dGVybiBpbnQgcGFnZXJfdXNlX2NvbG9yOworZXh0ZXJuIGludCB0ZXJtX2NvbHVtbnModm9pZCk7CitleHRlcm4gaW50IGRlY2ltYWxfd2lkdGgodWludG1heF90KTsKK2V4dGVybiBpbnQgY2hlY2tfcGFnZXJfY29uZmlnKGNvbnN0IGNoYXIgKmNtZCk7CisKK2V4dGVybiBjb25zdCBjaGFyICplZGl0b3JfcHJvZ3JhbTsKK2V4dGVybiBjb25zdCBjaGFyICphc2twYXNzX3Byb2dyYW07CitleHRlcm4gY29uc3QgY2hhciAqZXhjbHVkZXNfZmlsZTsKKworLyogYmFzZTg1ICovCitpbnQgZGVjb2RlXzg1KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqbGluZSwgaW50IGxpbmVsZW4pOwordm9pZCBlbmNvZGVfODUoY2hhciAqYnVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgYnl0ZXMpOworCisvKiBhbGxvYy5jICovCitleHRlcm4gdm9pZCAqYWxsb2NfYmxvYl9ub2RlKHZvaWQpOworZXh0ZXJuIHZvaWQgKmFsbG9jX3RyZWVfbm9kZSh2b2lkKTsKK2V4dGVybiB2b2lkICphbGxvY19jb21taXRfbm9kZSh2b2lkKTsKK2V4dGVybiB2b2lkICphbGxvY190YWdfbm9kZSh2b2lkKTsKK2V4dGVybiB2b2lkICphbGxvY19vYmplY3Rfbm9kZSh2b2lkKTsKK2V4dGVybiB2b2lkIGFsbG9jX3JlcG9ydCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYWxsb2NfY29tbWl0X2luZGV4KHZvaWQpOworCisvKiBwa3QtbGluZS5jICovCit2b2lkIHBhY2tldF90cmFjZV9pZGVudGl0eShjb25zdCBjaGFyICpwcm9nKTsKKworLyogYWRkICovCisvKgorICogcmV0dXJuIDAgaWYgc3VjY2VzcywgMSAtIGlmIGFkZGl0aW9uIG9mIGEgZmlsZSBmYWlsZWQgYW5kCisgKiBBRERfRklMRVNfSUdOT1JFX0VSUk9SUyB3YXMgc3BlY2lmaWVkIGluIGZsYWdzCisgKi8KK2ludCBhZGRfZmlsZXNfdG9fY2FjaGUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLCBpbnQgZmxhZ3MpOworCisvKiBkaWZmLmMgKi8KK2V4dGVybiBpbnQgZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXg7CisKKy8qIG1hdGNoLXRyZWVzLmMgKi8KK3ZvaWQgc2hpZnRfdHJlZShjb25zdCB1bnNpZ25lZCBjaGFyICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOwordm9pZCBzaGlmdF90cmVlX2J5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKKy8qCisgKiB3aGl0ZXNwYWNlIHJ1bGVzLgorICogdXNlZCBieSBib3RoIGRpZmYgYW5kIGFwcGx5CisgKiBsYXN0IHR3byBkaWdpdHMgYXJlIHRhYiB3aWR0aAorICovCisjZGVmaW5lIFdTX0JMQU5LX0FUX0VPTCAgICAgICAgIDAxMDAKKyNkZWZpbmUgV1NfU1BBQ0VfQkVGT1JFX1RBQiAgICAgMDIwMAorI2RlZmluZSBXU19JTkRFTlRfV0lUSF9OT05fVEFCICAwNDAwCisjZGVmaW5lIFdTX0NSX0FUX0VPTCAgICAgICAgICAgMDEwMDAKKyNkZWZpbmUgV1NfQkxBTktfQVRfRU9GICAgICAgICAwMjAwMAorI2RlZmluZSBXU19UQUJfSU5fSU5ERU5UICAgICAgIDA0MDAwCisjZGVmaW5lIFdTX1RSQUlMSU5HX1NQQUNFICAgICAgKFdTX0JMQU5LX0FUX0VPTHxXU19CTEFOS19BVF9FT0YpCisjZGVmaW5lIFdTX0RFRkFVTFRfUlVMRSAoV1NfVFJBSUxJTkdfU1BBQ0V8V1NfU1BBQ0VfQkVGT1JFX1RBQnw4KQorI2RlZmluZSBXU19UQUJfV0lEVEhfTUFTSyAgICAgICAgMDc3CitleHRlcm4gdW5zaWduZWQgd2hpdGVzcGFjZV9ydWxlX2NmZzsKK2V4dGVybiB1bnNpZ25lZCB3aGl0ZXNwYWNlX3J1bGUoY29uc3QgY2hhciAqKTsKK2V4dGVybiB1bnNpZ25lZCBwYXJzZV93aGl0ZXNwYWNlX3J1bGUoY29uc3QgY2hhciAqKTsKK2V4dGVybiB1bnNpZ25lZCB3c19jaGVjayhjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlKTsKK2V4dGVybiB2b2lkIHdzX2NoZWNrX2VtaXQoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSwgRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzZXQsIGNvbnN0IGNoYXIgKnJlc2V0LCBjb25zdCBjaGFyICp3cyk7CitleHRlcm4gY2hhciAqd2hpdGVzcGFjZV9lcnJvcl9zdHJpbmcodW5zaWduZWQgd3MpOworZXh0ZXJuIHZvaWQgd3NfZml4X2NvcHkoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICosIGludCwgdW5zaWduZWQsIGludCAqKTsKK2V4dGVybiBpbnQgd3NfYmxhbmtfbGluZShjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCB1bnNpZ25lZCB3c19ydWxlKTsKKyNkZWZpbmUgd3NfdGFiX3dpZHRoKHJ1bGUpICAgICAoKHJ1bGUpICYgV1NfVEFCX1dJRFRIX01BU0spCisKKy8qIGxzLWZpbGVzICovCit2b2lkIG92ZXJsYXlfdHJlZV9vbl9jYWNoZShjb25zdCBjaGFyICp0cmVlX25hbWUsIGNvbnN0IGNoYXIgKnByZWZpeCk7CisKK2NoYXIgKmFsaWFzX2xvb2t1cChjb25zdCBjaGFyICphbGlhcyk7CitpbnQgc3BsaXRfY21kbGluZShjaGFyICpjbWRsaW5lLCBjb25zdCBjaGFyICoqKmFyZ3YpOworLyogVGFrZXMgYSBuZWdhdGl2ZSB2YWx1ZSByZXR1cm5lZCBieSBzcGxpdF9jbWRsaW5lICovCitjb25zdCBjaGFyICpzcGxpdF9jbWRsaW5lX3N0cmVycm9yKGludCBjbWRsaW5lX2Vycm5vKTsKKworLyogZ2l0LmMgKi8KK3N0cnVjdCBzdGFydHVwX2luZm8geworCWludCBoYXZlX3JlcG9zaXRvcnk7CisJY29uc3QgY2hhciAqcHJlZml4OworfTsKK2V4dGVybiBzdHJ1Y3Qgc3RhcnR1cF9pbmZvICpzdGFydHVwX2luZm87CisKKy8qIG1lcmdlLmMgKi8KK3N0cnVjdCBjb21taXRfbGlzdDsKK2ludCB0cnlfbWVyZ2VfY29tbWFuZChjb25zdCBjaGFyICpzdHJhdGVneSwgc2l6ZV90IHhvcHRzX25yLAorCQljb25zdCBjaGFyICoqeG9wdHMsIHN0cnVjdCBjb21taXRfbGlzdCAqY29tbW9uLAorCQljb25zdCBjaGFyICpoZWFkX2FyZywgc3RydWN0IGNvbW1pdF9saXN0ICpyZW1vdGVzKTsKK2ludCBjaGVja291dF9mYXN0X2ZvcndhcmQoY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbSwKKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqdG8sCisJCQkgIGludCBvdmVyd3JpdGVfaWdub3JlKTsKKworCitpbnQgc2FuZV9leGVjdnAoY29uc3QgY2hhciAqZmlsZSwgY2hhciAqY29uc3QgYXJndltdKTsKKworLyoKKyAqIEEgc3RydWN0IHRvIGVuY2Fwc3VsYXRlIHRoZSBjb25jZXB0IG9mIHdoZXRoZXIgYSBmaWxlIGhhcyBjaGFuZ2VkCisgKiBzaW5jZSB3ZSBsYXN0IGNoZWNrZWQgaXQuIFRoaXMgdXNlcyBjcml0ZXJpYSBzaW1pbGFyIHRvIHRob3NlIHVzZWQKKyAqIGZvciB0aGUgaW5kZXguCisgKi8KK3N0cnVjdCBzdGF0X3ZhbGlkaXR5IHsKKwlzdHJ1Y3Qgc3RhdF9kYXRhICpzZDsKK307CisKK3ZvaWQgc3RhdF92YWxpZGl0eV9jbGVhcihzdHJ1Y3Qgc3RhdF92YWxpZGl0eSAqc3YpOworCisvKgorICogUmV0dXJucyAxIGlmIHRoZSBwYXRoIGlzIGEgcmVndWxhciBmaWxlIChvciBhIHN5bWxpbmsgdG8gYSByZWd1bGFyCisgKiBmaWxlKSBhbmQgbWF0Y2hlcyB0aGUgc2F2ZWQgc3RhdF92YWxpZGl0eSwgMCBvdGhlcndpc2UuICBBIG1pc3NpbmcKKyAqIG9yIGluYWNjZXNzaWJsZSBmaWxlIGlzIGNvbnNpZGVyZWQgYSBtYXRjaCBpZiB0aGUgc3RydWN0IHdhcyBqdXN0CisgKiBpbml0aWFsaXplZCwgb3IgaWYgdGhlIHByZXZpb3VzIHVwZGF0ZSBmb3VuZCBhbiBpbmFjY2Vzc2libGUgZmlsZS4KKyAqLworaW50IHN0YXRfdmFsaWRpdHlfY2hlY2soc3RydWN0IHN0YXRfdmFsaWRpdHkgKnN2LCBjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIFVwZGF0ZSB0aGUgc3RhdF92YWxpZGl0eSBmcm9tIGEgZmlsZSBvcGVuZWQgYXQgZGVzY3JpcHRvciBmZC4gSWYKKyAqIHRoZSBmaWxlIGlzIG1pc3NpbmcsIGluYWNjZXNzaWJsZSwgb3Igbm90IGEgcmVndWxhciBmaWxlLCB0aGVuCisgKiBmdXR1cmUgY2FsbHMgdG8gc3RhdF92YWxpZGl0eV9jaGVjayB3aWxsIG1hdGNoIGlmZiBvbmUgb2YgdGhvc2UKKyAqIGNvbmRpdGlvbnMgY29udGludWVzIHRvIGJlIHRydWUuCisgKi8KK3ZvaWQgc3RhdF92YWxpZGl0eV91cGRhdGUoc3RydWN0IHN0YXRfdmFsaWRpdHkgKnN2LCBpbnQgZmQpOworCitpbnQgdmVyc2lvbmNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpOwordm9pZCBzbGVlcF9taWxsaXNlYyhpbnQgbWlsbGlzZWMpOworCisjZW5kaWYgLyogQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvY2hlY2stYnVpbHRpbnMuc2ggYi9jaGVjay1idWlsdGlucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMGFhZjNhCi0tLSAvZGV2L251bGwKKysrIGIvY2hlY2stYnVpbHRpbnMuc2gKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK3sKKwljYXQgPDxcRU9GCitzYXlJdDoKKwkkKGZvcmVhY2ggYiwkKEJVSUxUX0lOUyksZWNobyBYWFggJChiOiRYPSkgWVlZOykKK0VPRgorCWNhdCBNYWtlZmlsZQorfSB8CittYWtlIC1mIC0gc2F5SXQgMj4vZGV2L251bGwgfAorc2VkIC1uIC1lICdzLy4qWFhYIFwoLipcKSBZWVkuKi9cMS9wJyB8Citzb3J0IHwKK3sKKyAgICBiYWQ9MAorICAgIHdoaWxlIHJlYWQgYnVpbHRpbgorICAgIGRvCisJYmFzZT0kKGV4cHIgIiRidWlsdGluIiA6ICdnaXQtXCguKlwpJykKKwl4PSQoc2VkIC1uZSAncy8uKnsgIickYmFzZSciLCBcKGNtZF9bXiwgXSpcKS4qLyckYmFzZScJXDEvcCcgZ2l0LmMpCisJaWYgdGVzdCAteiAiJHgiCisJdGhlbgorCQllY2hvICIkYmFzZSBpcyBidWlsdGluIGJ1dCBub3QgbGlzdGVkIGluIGdpdC5jIGNvbW1hbmQgbGlzdCIKKwkJYmFkPTEKKwlmaQorCWZvciBzZnggaW4gc2ggcGVybCBweQorCWRvCisJCWlmIHRlc3QgLWYgIiRidWlsdGluLiRzZngiCisJCXRoZW4KKwkJCWVjaG8gIiRiYXNlIGlzIGJ1aWx0aW4gYnV0ICRidWlsdGluLiRzZnggc3RpbGwgZXhpc3RzIgorCQkJYmFkPTEKKwkJZmkKKwlkb25lCisgICAgZG9uZQorICAgIGV4aXQgJGJhZAorfQpkaWZmIC0tZ2l0IGEvY2hlY2stcmFjeS5jIGIvY2hlY2stcmFjeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZDkyYTEKLS0tIC9kZXYvbnVsbAorKysgYi9jaGVjay1yYWN5LmMKQEAgLTAsMCArMSwyOCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQoreworCWludCBpOworCWludCBkaXJ0eSwgY2xlYW4sIHJhY3k7CisKKwlkaXJ0eSA9IGNsZWFuID0gcmFjeSA9IDA7CisJcmVhZF9jYWNoZSgpOworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlpZiAobHN0YXQoY2UtPm5hbWUsICZzdCkpIHsKKwkJCWVycm9yKCJsc3RhdCglcyk6ICVzIiwgY2UtPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjZV9tYXRjaF9zdGF0KGNlLCAmc3QsIDApKQorCQkJZGlydHkrKzsKKwkJZWxzZSBpZiAoY2VfbWF0Y2hfc3RhdChjZSwgJnN0LCBDRV9NQVRDSF9SQUNZX0lTX0RJUlRZKSkKKwkJCXJhY3krKzsKKwkJZWxzZQorCQkJY2xlYW4rKzsKKwl9CisJcHJpbnRmKCJkaXJ0eSAlZCwgY2xlYW4gJWQsIHJhY3kgJWRcbiIsIGRpcnR5LCBjbGVhbiwgcmFjeSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jaGVja19iaW5kaXIgYi9jaGVja19iaW5kaXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjIzZWFkYwotLS0gL2Rldi9udWxsCisrKyBiL2NoZWNrX2JpbmRpcgpAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKK2JpbmRpcj0iJDEiCitnaXRleGVjZGlyPSIkMiIKK2dpdGNtZD0iJDMiCitpZiB0ZXN0ICIkYmluZGlyIiAhPSAiJGdpdGV4ZWNkaXIiICYmIHRlc3QgLXggIiRnaXRjbWQiCit0aGVuCisJZWNobworCWVjaG8gIiEhIFlvdSBoYXZlIGluc3RhbGxlZCBnaXQtKiBjb21tYW5kcyB0byBuZXcgZ2l0ZXhlY2Rpci4iCisJZWNobyAiISEgT2xkIHZlcnNpb24gZ2l0LSogY29tbWFuZHMgc3RpbGwgcmVtYWluIGluIGJpbmRpci4iCisJZWNobyAiISEgTWl4aW5nIHR3byB2ZXJzaW9ucyBvZiBHaXQgd2lsbCBsZWFkIHRvIHByb2JsZW1zLiIKKwllY2hvICIhISBQbGVhc2UgcmVtb3ZlIG9sZCB2ZXJzaW9uIGNvbW1hbmRzIGluIGJpbmRpciBub3cuIgorCWVjaG8KK2ZpCmRpZmYgLS1naXQgYS9jb2xvci5jIGIvY29sb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Zjg1MTUzCi0tLSAvZGV2L251bGwKKysrIGIvY29sb3IuYwpAQCAtMCwwICsxLDM5NSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKworc3RhdGljIGludCBnaXRfdXNlX2NvbG9yX2RlZmF1bHQgPSBHSVRfQ09MT1JfQVVUTzsKK2ludCBjb2xvcl9zdGRvdXRfaXNfdHR5ID0gLTE7CisKKy8qCisgKiBUaGUgbGlzdCBvZiBhdmFpbGFibGUgY29sdW1uIGNvbG9ycy4KKyAqLworY29uc3QgY2hhciAqY29sdW1uX2NvbG9yc19hbnNpW10gPSB7CisJR0lUX0NPTE9SX1JFRCwKKwlHSVRfQ09MT1JfR1JFRU4sCisJR0lUX0NPTE9SX1lFTExPVywKKwlHSVRfQ09MT1JfQkxVRSwKKwlHSVRfQ09MT1JfTUFHRU5UQSwKKwlHSVRfQ09MT1JfQ1lBTiwKKwlHSVRfQ09MT1JfQk9MRF9SRUQsCisJR0lUX0NPTE9SX0JPTERfR1JFRU4sCisJR0lUX0NPTE9SX0JPTERfWUVMTE9XLAorCUdJVF9DT0xPUl9CT0xEX0JMVUUsCisJR0lUX0NPTE9SX0JPTERfTUFHRU5UQSwKKwlHSVRfQ09MT1JfQk9MRF9DWUFOLAorCUdJVF9DT0xPUl9SRVNFVCwKK307CisKKy8qIElnbm9yZSB0aGUgUkVTRVQgYXQgdGhlIGVuZCB3aGVuIGdpdmluZyB0aGUgc2l6ZSAqLworY29uc3QgaW50IGNvbHVtbl9jb2xvcnNfYW5zaV9tYXggPSBBUlJBWV9TSVpFKGNvbHVtbl9jb2xvcnNfYW5zaSkgLSAxOworCisvKiBBbiBpbmRpdmlkdWFsIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvci4gKi8KK3N0cnVjdCBjb2xvciB7CisJZW51bSB7CisJCUNPTE9SX1VOU1BFQ0lGSUVEID0gMCwKKwkJQ09MT1JfTk9STUFMLAorCQlDT0xPUl9BTlNJLCAvKiBiYXNpYyAwLTcgQU5TSSBjb2xvcnMgKi8KKwkJQ09MT1JfMjU2LAorCQlDT0xPUl9SR0IKKwl9IHR5cGU7CisJLyogVGhlIG51bWVyaWMgdmFsdWUgZm9yIEFOU0kgYW5kIDI1Ni1jb2xvciBtb2RlcyAqLworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisJLyogMjQtYml0IFJHQiBjb2xvciB2YWx1ZXMgKi8KKwl1bnNpZ25lZCBjaGFyIHJlZCwgZ3JlZW4sIGJsdWU7Cit9OworCisvKgorICogIndvcmQiIGlzIGEgYnVmZmVyIG9mIGxlbmd0aCAibGVuIjsgZG9lcyBpdCBtYXRjaCB0aGUgTlVMLXRlcm1pbmF0ZWQKKyAqICJtYXRjaCIgZXhhY3RseT8KKyAqLworc3RhdGljIGludCBtYXRjaF93b3JkKGNvbnN0IGNoYXIgKndvcmQsIGludCBsZW4sIGNvbnN0IGNoYXIgKm1hdGNoKQoreworCXJldHVybiAhc3RybmNhc2VjbXAod29yZCwgbWF0Y2gsIGxlbikgJiYgIW1hdGNoW2xlbl07Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2hleF9jb2xvcihjb25zdCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQoreworCXVuc2lnbmVkIGludCB2YWw7CisJdmFsID0gKGhleHZhbChpblswXSkgPDwgNCkgfCBoZXh2YWwoaW5bMV0pOworCWlmICh2YWwgJiB+MHhmZikKKwkJcmV0dXJuIC0xOworCSpvdXQgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY29sb3Ioc3RydWN0IGNvbG9yICpvdXQsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJLyogUG9zaXRpb25zIGluIGFycmF5IG11c3QgbWF0Y2ggQU5TSSBjb2xvciBjb2RlcyAqLworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY29sb3JfbmFtZXNbXSA9IHsKKwkJImJsYWNrIiwgInJlZCIsICJncmVlbiIsICJ5ZWxsb3ciLAorCQkiYmx1ZSIsICJtYWdlbnRhIiwgImN5YW4iLCAid2hpdGUiCisJfTsKKwljaGFyICplbmQ7CisJaW50IGk7CisJbG9uZyB2YWw7CisKKwkvKiBGaXJzdCB0cnkgdGhlIHNwZWNpYWwgd29yZCAibm9ybWFsIi4uLiAqLworCWlmIChtYXRjaF93b3JkKG5hbWUsIGxlbiwgIm5vcm1hbCIpKSB7CisJCW91dC0+dHlwZSA9IENPTE9SX05PUk1BTDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVHJ5IGEgMjQtYml0IFJHQiB2YWx1ZSAqLworCWlmIChsZW4gPT0gNyAmJiBuYW1lWzBdID09ICcjJykgeworCQlpZiAoIWdldF9oZXhfY29sb3IobmFtZSArIDEsICZvdXQtPnJlZCkgJiYKKwkJICAgICFnZXRfaGV4X2NvbG9yKG5hbWUgKyAzLCAmb3V0LT5ncmVlbikgJiYKKwkJICAgICFnZXRfaGV4X2NvbG9yKG5hbWUgKyA1LCAmb3V0LT5ibHVlKSkgeworCQkJb3V0LT50eXBlID0gQ09MT1JfUkdCOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBUaGVuIHBpY2sgZnJvbSBvdXIgaHVtYW4tcmVhZGFibGUgY29sb3IgbmFtZXMuLi4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb2xvcl9uYW1lcyk7IGkrKykgeworCQlpZiAobWF0Y2hfd29yZChuYW1lLCBsZW4sIGNvbG9yX25hbWVzW2ldKSkgeworCQkJb3V0LT50eXBlID0gQ09MT1JfQU5TSTsKKwkJCW91dC0+dmFsdWUgPSBpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBBbmQgZmluYWxseSB0cnkgYSBsaXRlcmFsIDI1Ni1jb2xvci1tb2RlIG51bWJlciAqLworCXZhbCA9IHN0cnRvbChuYW1lLCAmZW5kLCAxMCk7CisJaWYgKGVuZCAtIG5hbWUgPT0gbGVuKSB7CisJCS8qCisJCSAqIEFsbG93ICItMSIgYXMgYW4gYWxpYXMgZm9yICJub3JtYWwiLCBidXQgb3RoZXIgbmVnYXRpdmUKKwkJICogbnVtYmVycyBhcmUgYm9ndXMuCisJCSAqLworCQlpZiAodmFsIDwgLTEpCisJCQk7IC8qIGZhbGwgdGhyb3VnaCB0byBlcnJvciAqLworCQllbHNlIGlmICh2YWwgPCAwKSB7CisJCQlvdXQtPnR5cGUgPSBDT0xPUl9OT1JNQUw7CisJCQlyZXR1cm4gMDsKKwkJLyogUmV3cml0ZSBsb3cgbnVtYmVycyBhcyBtb3JlLXBvcnRhYmxlIHN0YW5kYXJkIGNvbG9ycy4gKi8KKwkJfSBlbHNlIGlmICh2YWwgPCA4KSB7CisJCQlvdXQtPnR5cGUgPSBDT0xPUl9BTlNJOworCQkJb3V0LT52YWx1ZSA9IHZhbDsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKHZhbCA8IDI1NikgeworCQkJb3V0LT50eXBlID0gQ09MT1JfMjU2OworCQkJb3V0LT52YWx1ZSA9IHZhbDsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHBhcnNlX2F0dHIoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlzdGF0aWMgY29uc3QgaW50IGF0dHJfdmFsdWVzW10gPSB7IDEsIDIsIDQsIDUsIDcsCisJCQkJCSAgIDIyLCAyMiwgMjQsIDI1LCAyNyB9OworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXR0cl9uYW1lc1tdID0geworCQkiYm9sZCIsICJkaW0iLCAidWwiLCAiYmxpbmsiLCAicmV2ZXJzZSIsCisJCSJub2JvbGQiLCAibm9kaW0iLCAibm91bCIsICJub2JsaW5rIiwgIm5vcmV2ZXJzZSIKKwl9OworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0dHJfbmFtZXMpOyBpKyspIHsKKwkJY29uc3QgY2hhciAqc3RyID0gYXR0cl9uYW1lc1tpXTsKKwkJaWYgKCFzdHJuY2FzZWNtcChuYW1lLCBzdHIsIGxlbikgJiYgIXN0cltsZW5dKQorCQkJcmV0dXJuIGF0dHJfdmFsdWVzW2ldOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK2ludCBjb2xvcl9wYXJzZShjb25zdCBjaGFyICp2YWx1ZSwgY2hhciAqZHN0KQoreworCXJldHVybiBjb2xvcl9wYXJzZV9tZW0odmFsdWUsIHN0cmxlbih2YWx1ZSksIGRzdCk7Cit9CisKK3ZvaWQgY29sb3Jfc2V0KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqY29sb3JfYnl0ZXMpCit7CisJeHNucHJpbnRmKGRzdCwgQ09MT1JfTUFYTEVOLCAiJXMiLCBjb2xvcl9ieXRlcyk7Cit9CisKKy8qCisgKiBXcml0ZSB0aGUgQU5TSSBjb2xvciBjb2RlcyBmb3IgImMiIHRvICJvdXQiOyB0aGUgc3RyaW5nIHNob3VsZAorICogYWxyZWFkeSBoYXZlIHRoZSBBTlNJIGVzY2FwZSBjb2RlIGluIGl0LiAib3V0IiBzaG91bGQgaGF2ZSBlbm91Z2gKKyAqIHNwYWNlIGluIGl0IHRvIGZpdCBhbnkgY29sb3IuCisgKi8KK3N0YXRpYyBjaGFyICpjb2xvcl9vdXRwdXQoY2hhciAqb3V0LCBpbnQgbGVuLCBjb25zdCBzdHJ1Y3QgY29sb3IgKmMsIGNoYXIgdHlwZSkKK3sKKwlzd2l0Y2ggKGMtPnR5cGUpIHsKKwljYXNlIENPTE9SX1VOU1BFQ0lGSUVEOgorCWNhc2UgQ09MT1JfTk9STUFMOgorCQlicmVhazsKKwljYXNlIENPTE9SX0FOU0k6CisJCWlmIChsZW4gPCAyKQorCQkJZGllKCJCVUc6IGNvbG9yIHBhcnNpbmcgcmFuIG91dCBvZiBzcGFjZSIpOworCQkqb3V0KysgPSB0eXBlOworCQkqb3V0KysgPSAnMCcgKyBjLT52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUl8yNTY6CisJCW91dCArPSB4c25wcmludGYob3V0LCBsZW4sICIlYzg7NTslZCIsIHR5cGUsIGMtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUl9SR0I6CisJCW91dCArPSB4c25wcmludGYob3V0LCBsZW4sICIlYzg7MjslZDslZDslZCIsIHR5cGUsCisJCQkJIGMtPnJlZCwgYy0+Z3JlZW4sIGMtPmJsdWUpOworCQlicmVhazsKKwl9CisJcmV0dXJuIG91dDsKK30KKworc3RhdGljIGludCBjb2xvcl9lbXB0eShjb25zdCBzdHJ1Y3QgY29sb3IgKmMpCit7CisJcmV0dXJuIGMtPnR5cGUgPD0gQ09MT1JfTk9STUFMOworfQorCitpbnQgY29sb3JfcGFyc2VfbWVtKGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgdmFsdWVfbGVuLCBjaGFyICpkc3QpCit7CisJY29uc3QgY2hhciAqcHRyID0gdmFsdWU7CisJaW50IGxlbiA9IHZhbHVlX2xlbjsKKwljaGFyICplbmQgPSBkc3QgKyBDT0xPUl9NQVhMRU47CisJdW5zaWduZWQgaW50IGF0dHIgPSAwOworCXN0cnVjdCBjb2xvciBmZyA9IHsgQ09MT1JfVU5TUEVDSUZJRUQgfTsKKwlzdHJ1Y3QgY29sb3IgYmcgPSB7IENPTE9SX1VOU1BFQ0lGSUVEIH07CisKKwlpZiAoIXN0cm5jYXNlY21wKHZhbHVlLCAicmVzZXQiLCBsZW4pKSB7CisJCXhzbnByaW50Zihkc3QsIGVuZCAtIGRzdCwgR0lUX0NPTE9SX1JFU0VUKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogW2ZnIFtiZ11dIFthdHRyXS4uLiAqLworCXdoaWxlIChsZW4gPiAwKSB7CisJCWNvbnN0IGNoYXIgKndvcmQgPSBwdHI7CisJCXN0cnVjdCBjb2xvciBjOworCQlpbnQgdmFsLCB3b3JkbGVuID0gMDsKKworCQl3aGlsZSAobGVuID4gMCAmJiAhaXNzcGFjZSh3b3JkW3dvcmRsZW5dKSkgeworCQkJd29yZGxlbisrOworCQkJbGVuLS07CisJCX0KKworCQlwdHIgPSB3b3JkICsgd29yZGxlbjsKKwkJd2hpbGUgKGxlbiA+IDAgJiYgaXNzcGFjZSgqcHRyKSkgeworCQkJcHRyKys7CisJCQlsZW4tLTsKKwkJfQorCisJCWlmICghcGFyc2VfY29sb3IoJmMsIHdvcmQsIHdvcmRsZW4pKSB7CisJCQlpZiAoZmcudHlwZSA9PSBDT0xPUl9VTlNQRUNJRklFRCkgeworCQkJCWZnID0gYzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChiZy50eXBlID09IENPTE9SX1VOU1BFQ0lGSUVEKSB7CisJCQkJYmcgPSBjOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZ290byBiYWQ7CisJCX0KKwkJdmFsID0gcGFyc2VfYXR0cih3b3JkLCB3b3JkbGVuKTsKKwkJaWYgKDAgPD0gdmFsKQorCQkJYXR0ciB8PSAoMSA8PCB2YWwpOworCQllbHNlCisJCQlnb3RvIGJhZDsKKwl9CisKKyN1bmRlZiBPVVQKKyNkZWZpbmUgT1VUKHgpIGRvIHsgXAorCWlmIChkc3QgPT0gZW5kKSBcCisJCWRpZSgiQlVHOiBjb2xvciBwYXJzaW5nIHJhbiBvdXQgb2Ygc3BhY2UiKTsgXAorCSpkc3QrKyA9ICh4KTsgXAorfSB3aGlsZSgwKQorCisJaWYgKGF0dHIgfHwgIWNvbG9yX2VtcHR5KCZmZykgfHwgIWNvbG9yX2VtcHR5KCZiZykpIHsKKwkJaW50IHNlcCA9IDA7CisJCWludCBpOworCisJCU9VVCgnXDAzMycpOworCQlPVVQoJ1snKTsKKworCQlmb3IgKGkgPSAwOyBhdHRyOyBpKyspIHsKKwkJCXVuc2lnbmVkIGJpdCA9ICgxIDw8IGkpOworCQkJaWYgKCEoYXR0ciAmIGJpdCkpCisJCQkJY29udGludWU7CisJCQlhdHRyICY9IH5iaXQ7CisJCQlpZiAoc2VwKyspCisJCQkJT1VUKCc7Jyk7CisJCQlkc3QgKz0geHNucHJpbnRmKGRzdCwgZW5kIC0gZHN0LCAiJWQiLCBpKTsKKwkJfQorCQlpZiAoIWNvbG9yX2VtcHR5KCZmZykpIHsKKwkJCWlmIChzZXArKykKKwkJCQlPVVQoJzsnKTsKKwkJCS8qIGZvcmVncm91bmQgY29sb3JzIGFyZSBhbGwgaW4gdGhlIDN4IHJhbmdlICovCisJCQlkc3QgPSBjb2xvcl9vdXRwdXQoZHN0LCBlbmQgLSBkc3QsICZmZywgJzMnKTsKKwkJfQorCQlpZiAoIWNvbG9yX2VtcHR5KCZiZykpIHsKKwkJCWlmIChzZXArKykKKwkJCQlPVVQoJzsnKTsKKwkJCS8qIGJhY2tncm91bmQgY29sb3JzIGFyZSBhbGwgaW4gdGhlIDR4IHJhbmdlICovCisJCQlkc3QgPSBjb2xvcl9vdXRwdXQoZHN0LCBlbmQgLSBkc3QsICZiZywgJzQnKTsKKwkJfQorCQlPVVQoJ20nKTsKKwl9CisJT1VUKDApOworCXJldHVybiAwOworYmFkOgorCXJldHVybiBlcnJvcihfKCJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIiksIHZhbHVlX2xlbiwgdmFsdWUpOworI3VuZGVmIE9VVAorfQorCitpbnQgZ2l0X2NvbmZpZ19jb2xvcmJvb2woY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAodmFsdWUpIHsKKwkJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAibmV2ZXIiKSkKKwkJCXJldHVybiAwOworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJhbHdheXMiKSkKKwkJCXJldHVybiAxOworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJhdXRvIikpCisJCQlyZXR1cm4gR0lUX0NPTE9SX0FVVE87CisJfQorCisJaWYgKCF2YXIpCisJCXJldHVybiAtMTsKKworCS8qIE1pc3Npbmcgb3IgZXhwbGljaXQgZmFsc2UgdG8gdHVybiBvZmYgY29sb3JpemF0aW9uICovCisJaWYgKCFnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkpCisJCXJldHVybiAwOworCisJLyogYW55IG5vcm1hbCB0cnV0aCB2YWx1ZSBkZWZhdWx0cyB0byAnYXV0bycgKi8KKwlyZXR1cm4gR0lUX0NPTE9SX0FVVE87Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYXV0b19jb2xvcih2b2lkKQoreworCWlmIChjb2xvcl9zdGRvdXRfaXNfdHR5IDwgMCkKKwkJY29sb3Jfc3Rkb3V0X2lzX3R0eSA9IGlzYXR0eSgxKTsKKwlpZiAoY29sb3Jfc3Rkb3V0X2lzX3R0eSB8fCAocGFnZXJfaW5fdXNlKCkgJiYgcGFnZXJfdXNlX2NvbG9yKSkgeworCQljaGFyICp0ZXJtID0gZ2V0ZW52KCJURVJNIik7CisJCWlmICh0ZXJtICYmIHN0cmNtcCh0ZXJtLCAiZHVtYiIpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgd2FudF9jb2xvcihpbnQgdmFyKQoreworCXN0YXRpYyBpbnQgd2FudF9hdXRvID0gLTE7CisKKwlpZiAodmFyIDwgMCkKKwkJdmFyID0gZ2l0X3VzZV9jb2xvcl9kZWZhdWx0OworCisJaWYgKHZhciA9PSBHSVRfQ09MT1JfQVVUTykgeworCQlpZiAod2FudF9hdXRvIDwgMCkKKwkJCXdhbnRfYXV0byA9IGNoZWNrX2F1dG9fY29sb3IoKTsKKwkJcmV0dXJuIHdhbnRfYXV0bzsKKwl9CisJcmV0dXJuIHZhcjsKK30KKworaW50IGdpdF9jb2xvcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IudWkiKSkgeworCQlnaXRfdXNlX2NvbG9yX2RlZmF1bHQgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfY29sb3JfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKGdpdF9jb2xvcl9jb25maWcodmFyLCB2YWx1ZSwgY2IpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGdpdF9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7Cit9CisKK3ZvaWQgY29sb3JfcHJpbnRfc3RyYnVmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaWYgKCpjb2xvcikKKwkJZnByaW50ZihmcCwgIiVzIiwgY29sb3IpOworCWZwcmludGYoZnAsICIlcyIsIHNiLT5idWYpOworCWlmICgqY29sb3IpCisJCWZwcmludGYoZnAsICIlcyIsIEdJVF9DT0xPUl9SRVNFVCk7Cit9CisKK3N0YXRpYyBpbnQgY29sb3JfdmZwcmludGYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsCisJCXZhX2xpc3QgYXJncywgY29uc3QgY2hhciAqdHJhaWwpCit7CisJaW50IHIgPSAwOworCisJaWYgKCpjb2xvcikKKwkJciArPSBmcHJpbnRmKGZwLCAiJXMiLCBjb2xvcik7CisJciArPSB2ZnByaW50ZihmcCwgZm10LCBhcmdzKTsKKwlpZiAoKmNvbG9yKQorCQlyICs9IGZwcmludGYoZnAsICIlcyIsIEdJVF9DT0xPUl9SRVNFVCk7CisJaWYgKHRyYWlsKQorCQlyICs9IGZwcmludGYoZnAsICIlcyIsIHRyYWlsKTsKKwlyZXR1cm4gcjsKK30KKworCisKK2ludCBjb2xvcl9mcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWludCByOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJciA9IGNvbG9yX3ZmcHJpbnRmKGZwLCBjb2xvciwgZm10LCBhcmdzLCBOVUxMKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHI7Cit9CisKK2ludCBjb2xvcl9mcHJpbnRmX2xuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWludCByOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJciA9IGNvbG9yX3ZmcHJpbnRmKGZwLCBjb2xvciwgZm10LCBhcmdzLCAiXG4iKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHI7Cit9CisKK2ludCBjb2xvcl9pc19uaWwoY29uc3QgY2hhciAqYykKK3sKKwlyZXR1cm4gIXN0cmNtcChjLCAiTklMIik7Cit9CmRpZmYgLS1naXQgYS9jb2xvci5oIGIvY29sb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTU1ZDEzCi0tLSAvZGV2L251bGwKKysrIGIvY29sb3IuaApAQCAtMCwwICsxLDk3IEBACisjaWZuZGVmIENPTE9SX0gKKyNkZWZpbmUgQ09MT1JfSAorCitzdHJ1Y3Qgc3RyYnVmOworCisvKiAgMiArICgyICogbnVtX2F0dHJzKSArIDggKyAxICsgOCArICdtJyArIE5VTCAqLworLyogIlwwMzNbMTsyOzQ7NTs3OzM4OzU7Mnh4OzQ4OzU7Mnh4bVwwIiAqLworLyoKKyAqIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBBTlNJIGNvbG9yIHNlcXVlbmNlIHdlIHdvdWxkIGdlbmVyYXRlOgorICogLSBsZWFkaW5nIEVTQyAnWycgICAgICAgICAgICAyCisgKiAtIGF0dHIgKyAnOycgICAgICAgICAgICAgICAgIDMgKiAxMCAoZS5nLiAiMTsiKQorICogLSBmZyBjb2xvciArICc7JyAgICAgICAgICAgICAxNyAoZS5nLiAiMzg7MjsyNTU7MjU1OzI1NTsiKQorICogLSBiZyBjb2xvciArICc7JyAgICAgICAgICAgICAxNyAoZS5nLiAiNDg7MjsyNTU7MjU1OzI1NTsiKQorICogLSB0ZXJtaW5hdGluZyAnbScgTlVMICAgICAgICAyCisgKgorICogVGhlIGFib3ZlIG92ZXJjb3VudHMgYXR0ciAod2Ugb25seSB1c2UgNSBub3QgOCkgYW5kIG9uZSBzZW1pY29sb24KKyAqIGJ1dCBpdCBpcyBjbG9zZSBlbm91Z2guCisgKi8KKyNkZWZpbmUgQ09MT1JfTUFYTEVOIDcwCisKKy8qCisgKiBJTVBPUlRBTlQ6IER1ZSB0byB0aGUgd2F5IHRoZXNlIGNvbG9yIGNvZGVzIGFyZSBlbXVsYXRlZCBvbiBXaW5kb3dzLAorICogd3JpdGUgdGhlbSBvbmx5IHVzaW5nIHByaW50ZigpLCBmcHJpbnRmKCksIGFuZCBmcHV0cygpLiBJbiBwYXJ0aWN1bGFyLAorICogZG8gbm90IHVzZSBwdXRzKCkgb3Igd3JpdGUoKS4KKyAqLworI2RlZmluZSBHSVRfQ09MT1JfTk9STUFMCSIiCisjZGVmaW5lIEdJVF9DT0xPUl9SRVNFVAkJIlwwMzNbbSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JPTEQJCSJcMDMzWzFtIgorI2RlZmluZSBHSVRfQ09MT1JfUkVECQkiXDAzM1szMW0iCisjZGVmaW5lIEdJVF9DT0xPUl9HUkVFTgkJIlwwMzNbMzJtIgorI2RlZmluZSBHSVRfQ09MT1JfWUVMTE9XCSJcMDMzWzMzbSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JMVUUJCSJcMDMzWzM0bSIKKyNkZWZpbmUgR0lUX0NPTE9SX01BR0VOVEEJIlwwMzNbMzVtIgorI2RlZmluZSBHSVRfQ09MT1JfQ1lBTgkJIlwwMzNbMzZtIgorI2RlZmluZSBHSVRfQ09MT1JfQk9MRF9SRUQJIlwwMzNbMTszMW0iCisjZGVmaW5lIEdJVF9DT0xPUl9CT0xEX0dSRUVOCSJcMDMzWzE7MzJtIgorI2RlZmluZSBHSVRfQ09MT1JfQk9MRF9ZRUxMT1cJIlwwMzNbMTszM20iCisjZGVmaW5lIEdJVF9DT0xPUl9CT0xEX0JMVUUJIlwwMzNbMTszNG0iCisjZGVmaW5lIEdJVF9DT0xPUl9CT0xEX01BR0VOVEEJIlwwMzNbMTszNW0iCisjZGVmaW5lIEdJVF9DT0xPUl9CT0xEX0NZQU4JIlwwMzNbMTszNm0iCisjZGVmaW5lIEdJVF9DT0xPUl9CR19SRUQJIlwwMzNbNDFtIgorI2RlZmluZSBHSVRfQ09MT1JfQkdfR1JFRU4JIlwwMzNbNDJtIgorI2RlZmluZSBHSVRfQ09MT1JfQkdfWUVMTE9XCSJcMDMzWzQzbSIKKyNkZWZpbmUgR0lUX0NPTE9SX0JHX0JMVUUJIlwwMzNbNDRtIgorI2RlZmluZSBHSVRfQ09MT1JfQkdfTUFHRU5UQQkiXDAzM1s0NW0iCisjZGVmaW5lIEdJVF9DT0xPUl9CR19DWUFOCSJcMDMzWzQ2bSIKKworLyogQSBzcGVjaWFsIHZhbHVlIG1lYW5pbmcgIm5vIGNvbG9yIHNlbGVjdGVkIiAqLworI2RlZmluZSBHSVRfQ09MT1JfTklMICJOSUwiCisKKy8qCisgKiBUaGUgZmlyc3QgdGhyZWUgYXJlIGNob3NlbiB0byBtYXRjaCBjb21tb24gdXNhZ2UgaW4gdGhlIGNvZGUsIGFuZCB3aGF0IGlzCisgKiByZXR1cm5lZCBmcm9tIGdpdF9jb25maWdfY29sb3Jib29sLiBUaGUgImF1dG8iIHZhbHVlIGNhbiBiZSByZXR1cm5lZCBmcm9tCisgKiBjb25maWdfY29sb3Jib29sLCBhbmQgd2lsbCBiZSBjb252ZXJ0ZWQgYnkgd2FudF9jb2xvcigpIGludG8gZWl0aGVyIDAgb3IgMS4KKyAqLworI2RlZmluZSBHSVRfQ09MT1JfVU5LTk9XTiAtMQorI2RlZmluZSBHSVRfQ09MT1JfTkVWRVIgIDAKKyNkZWZpbmUgR0lUX0NPTE9SX0FMV0FZUyAxCisjZGVmaW5lIEdJVF9DT0xPUl9BVVRPICAgMgorCisvKiBBIGRlZmF1bHQgbGlzdCBvZiBjb2xvcnMgdG8gdXNlIGZvciBjb21taXQgZ3JhcGhzIGFuZCBzaG93LWJyYW5jaCBvdXRwdXQgKi8KK2V4dGVybiBjb25zdCBjaGFyICpjb2x1bW5fY29sb3JzX2Fuc2lbXTsKK2V4dGVybiBjb25zdCBpbnQgY29sdW1uX2NvbG9yc19hbnNpX21heDsKKworLyoKKyAqIEdlbmVyYWxseSB0aGUgY29sb3IgY29kZSB3aWxsIGxhemlseSBmaWd1cmUgdGhpcyBvdXQgaXRzZWxmLCBidXQKKyAqIHRoaXMgcHJvdmlkZXMgYSBtZWNoYW5pc20gZm9yIGNhbGxlcnMgdG8gb3ZlcnJpZGUgYXV0b2RldGVjdGlvbi4KKyAqLworZXh0ZXJuIGludCBjb2xvcl9zdGRvdXRfaXNfdHR5OworCisvKgorICogVXNlIHRoZSBmaXJzdCBvbmUgaWYgeW91IG5lZWQgb25seSBjb2xvciBjb25maWc7IHRoZSBzZWNvbmQgaXMgYSBjb252ZW5pZW5jZQorICogaWYgeW91IGFyZSBqdXN0IGdvaW5nIHRvIGNoYW5nZSB0byBnaXRfZGVmYXVsdF9jb25maWcsIHRvby4KKyAqLworaW50IGdpdF9jb2xvcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworaW50IGdpdF9jb2xvcl9kZWZhdWx0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CisKKy8qCisgKiBTZXQgdGhlIGNvbG9yIGJ1ZmZlciAod2hpY2ggbXVzdCBiZSBDT0xPUl9NQVhMRU4gYnl0ZXMpCisgKiB0byB0aGUgcmF3IGNvbG9yIGJ5dGVzOyB0aGlzIGlzIHVzZWZ1bCBmb3IgaW5pdGlhbGl6aW5nCisgKiBkZWZhdWx0IGNvbG9yIHZhcmlhYmxlcy4KKyAqLwordm9pZCBjb2xvcl9zZXQoY2hhciAqZHN0LCBjb25zdCBjaGFyICpjb2xvcl9ieXRlcyk7CisKK2ludCBnaXRfY29uZmlnX2NvbG9yYm9vbChjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2ludCB3YW50X2NvbG9yKGludCB2YXIpOworaW50IGNvbG9yX3BhcnNlKGNvbnN0IGNoYXIgKnZhbHVlLCBjaGFyICpkc3QpOworaW50IGNvbG9yX3BhcnNlX21lbShjb25zdCBjaGFyICp2YWx1ZSwgaW50IGxlbiwgY2hhciAqZHN0KTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitpbnQgY29sb3JfZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitpbnQgY29sb3JfZnByaW50Zl9sbihGSUxFICpmcCwgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgY29sb3JfcHJpbnRfc3RyYnVmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2IpOworCitpbnQgY29sb3JfaXNfbmlsKGNvbnN0IGNoYXIgKmNvbG9yKTsKKworI2VuZGlmIC8qIENPTE9SX0ggKi8KZGlmZiAtLWdpdCBhL2NvbHVtbi5jIGIvY29sdW1uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg2YWJlNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbHVtbi5jCkBAIC0wLDAgKzEsNDE2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2x1bW4uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworI2RlZmluZSBYWTJMSU5FQVIoZCwgeCwgeSkgKENPTF9MQVlPVVQoKGQpLT5jb2xvcHRzKSA9PSBDT0xfQ09MVU1OID8gXAorCQkJICAgICh4KSAqIChkKS0+cm93cyArICh5KSA6IFwKKwkJCSAgICAoeSkgKiAoZCktPmNvbHMgKyAoeCkpCisKK3N0cnVjdCBjb2x1bW5fZGF0YSB7CisJY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0OworCXVuc2lnbmVkIGludCBjb2xvcHRzOworCXN0cnVjdCBjb2x1bW5fb3B0aW9ucyBvcHRzOworCisJaW50IHJvd3MsIGNvbHM7CisJaW50ICpsZW47CQkvKiBjZWxsIGxlbmd0aCAqLworCWludCAqd2lkdGg7CSAgICAgIC8qIGluZGV4IHRvIHRoZSBsb25nZXN0IHJvdyBpbiBjb2x1bW4gKi8KK307CisKKy8qIHJldHVybiBsZW5ndGggb2YgJ3MnIGluIGxldHRlcnMsIEFOU0kgZXNjYXBlcyBzdHJpcHBlZCAqLworc3RhdGljIGludCBpdGVtX2xlbmd0aCh1bnNpZ25lZCBpbnQgY29sb3B0cywgY29uc3QgY2hhciAqcykKK3sKKwlpbnQgbGVuLCBpID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHN0ciA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZHN0cigmc3RyLCBzKTsKKwl3aGlsZSAoKHMgPSBzdHJzdHIoc3RyLmJ1ZiArIGksICJcMDMzWyIpKSAhPSBOVUxMKSB7CisJCWludCBsZW4gPSBzdHJzcG4ocyArIDIsICIwMTIzNDU2Nzg5OyIpOworCQlpID0gcyAtIHN0ci5idWY7CisJCXN0cmJ1Zl9yZW1vdmUoJnN0ciwgaSwgbGVuICsgMyk7IC8qIFwwMzNbPGxlbj48ZnVuYyBjaGFyPiAqLworCX0KKwlsZW4gPSB1dGY4X3N0cndpZHRoKHN0ci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzdHIpOworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgY2VsbCB3aWR0aCwgcm93cyBhbmQgY29scyBmb3IgYSB0YWJsZSBvZiBlcXVhbCBjZWxscywgZ2l2ZW4KKyAqIHRhYmxlIHdpZHRoIGFuZCBob3cgbWFueSBzcGFjZXMgYmV0d2VlbiBjZWxscy4KKyAqLworc3RhdGljIHZvaWQgbGF5b3V0KHN0cnVjdCBjb2x1bW5fZGF0YSAqZGF0YSwgaW50ICp3aWR0aCkKK3sKKwlpbnQgaTsKKworCSp3aWR0aCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGRhdGEtPmxpc3QtPm5yOyBpKyspCisJCWlmICgqd2lkdGggPCBkYXRhLT5sZW5baV0pCisJCQkqd2lkdGggPSBkYXRhLT5sZW5baV07CisKKwkqd2lkdGggKz0gZGF0YS0+b3B0cy5wYWRkaW5nOworCisJZGF0YS0+Y29scyA9IChkYXRhLT5vcHRzLndpZHRoIC0gc3RybGVuKGRhdGEtPm9wdHMuaW5kZW50KSkgLyAqd2lkdGg7CisJaWYgKGRhdGEtPmNvbHMgPT0gMCkKKwkJZGF0YS0+Y29scyA9IDE7CisKKwlkYXRhLT5yb3dzID0gRElWX1JPVU5EX1VQKGRhdGEtPmxpc3QtPm5yLCBkYXRhLT5jb2xzKTsKK30KKworc3RhdGljIHZvaWQgY29tcHV0ZV9jb2x1bW5fd2lkdGgoc3RydWN0IGNvbHVtbl9kYXRhICpkYXRhKQoreworCWludCBpLCB4LCB5OworCWZvciAoeCA9IDA7IHggPCBkYXRhLT5jb2xzOyB4KyspIHsKKwkJZGF0YS0+d2lkdGhbeF0gPSBYWTJMSU5FQVIoZGF0YSwgeCwgMCk7CisJCWZvciAoeSA9IDA7IHkgPCBkYXRhLT5yb3dzOyB5KyspIHsKKwkJCWkgPSBYWTJMSU5FQVIoZGF0YSwgeCwgeSk7CisJCQlpZiAoaSA8IGRhdGEtPmxpc3QtPm5yICYmCisJCQkgICAgZGF0YS0+bGVuW2RhdGEtPndpZHRoW3hdXSA8IGRhdGEtPmxlbltpXSkKKwkJCQlkYXRhLT53aWR0aFt4XSA9IGk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBTaHJpbmsgYWxsIGNvbHVtbnMgYnkgc2hvcnRlbmluZyB0aGVtIG9uZSByb3cgZWFjaCB0aW1lIChhbmQgYWRkaW5nCisgKiBtb3JlIGNvbHVtbnMgYWxvbmcgdGhlIHdheSkuIEhvcGVmdWxseSB0aGUgbG9uZ2VzdCBjZWxsIHdpbGwgYmUKKyAqIG1vdmVkIHRvIHRoZSBuZXh0IGNvbHVtbiwgY29sdW1uIGlzIHNocnVuayBzbyB3ZSBoYXZlIG1vcmUgc3BhY2UKKyAqIGZvciBuZXcgY29sdW1ucy4gVGhlIHByb2Nlc3MgZW5kcyB3aGVuIHRoZSB3aG9sZSB0aGluZyBubyBsb25nZXIKKyAqIGZpdHMgaW4gZGF0YS0+dG90YWxfd2lkdGguCisgKi8KK3N0YXRpYyB2b2lkIHNocmlua19jb2x1bW5zKHN0cnVjdCBjb2x1bW5fZGF0YSAqZGF0YSkKK3sKKwlSRUFMTE9DX0FSUkFZKGRhdGEtPndpZHRoLCBkYXRhLT5jb2xzKTsKKwl3aGlsZSAoZGF0YS0+cm93cyA+IDEpIHsKKwkJaW50IHgsIHRvdGFsX3dpZHRoLCBjb2xzLCByb3dzOworCQlyb3dzID0gZGF0YS0+cm93czsKKwkJY29scyA9IGRhdGEtPmNvbHM7CisKKwkJZGF0YS0+cm93cy0tOworCQlkYXRhLT5jb2xzID0gRElWX1JPVU5EX1VQKGRhdGEtPmxpc3QtPm5yLCBkYXRhLT5yb3dzKTsKKwkJaWYgKGRhdGEtPmNvbHMgIT0gY29scykKKwkJCVJFQUxMT0NfQVJSQVkoZGF0YS0+d2lkdGgsIGRhdGEtPmNvbHMpOworCQljb21wdXRlX2NvbHVtbl93aWR0aChkYXRhKTsKKworCQl0b3RhbF93aWR0aCA9IHN0cmxlbihkYXRhLT5vcHRzLmluZGVudCk7CisJCWZvciAoeCA9IDA7IHggPCBkYXRhLT5jb2xzOyB4KyspIHsKKwkJCXRvdGFsX3dpZHRoICs9IGRhdGEtPmxlbltkYXRhLT53aWR0aFt4XV07CisJCQl0b3RhbF93aWR0aCArPSBkYXRhLT5vcHRzLnBhZGRpbmc7CisJCX0KKwkJaWYgKHRvdGFsX3dpZHRoID4gZGF0YS0+b3B0cy53aWR0aCkgeworCQkJZGF0YS0+cm93cyA9IHJvd3M7CisJCQlkYXRhLT5jb2xzID0gY29sczsKKwkJCWJyZWFrOworCQl9CisJfQorCWNvbXB1dGVfY29sdW1uX3dpZHRoKGRhdGEpOworfQorCisvKiBEaXNwbGF5IHdpdGhvdXQgbGF5b3V0IHdoZW4gbm90IGVuYWJsZWQgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfcGxhaW4oY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJICBjb25zdCBjaGFyICppbmRlbnQsIGNvbnN0IGNoYXIgKm5sKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspCisJCXByaW50ZigiJXMlcyVzIiwgaW5kZW50LCBsaXN0LT5pdGVtc1tpXS5zdHJpbmcsIG5sKTsKK30KKworLyogUHJpbnQgYSBjZWxsIHRvIHN0ZG91dCB3aXRoIGFsbCBuZWNlc3NhcnkgbGVhZGluZy90cmFsaW5nIHNwYWNlICovCitzdGF0aWMgaW50IGRpc3BsYXlfY2VsbChzdHJ1Y3QgY29sdW1uX2RhdGEgKmRhdGEsIGludCBpbml0aWFsX3dpZHRoLAorCQkJY29uc3QgY2hhciAqZW1wdHlfY2VsbCwgaW50IHgsIGludCB5KQoreworCWludCBpLCBsZW4sIG5ld2xpbmU7CisKKwlpID0gWFkyTElORUFSKGRhdGEsIHgsIHkpOworCWlmIChpID49IGRhdGEtPmxpc3QtPm5yKQorCQlyZXR1cm4gLTE7CisKKwlsZW4gPSBkYXRhLT5sZW5baV07CisJaWYgKGRhdGEtPndpZHRoICYmIGRhdGEtPmxlbltkYXRhLT53aWR0aFt4XV0gPCBpbml0aWFsX3dpZHRoKSB7CisJCS8qCisJCSAqIGVtcHR5X2NlbGwgaGFzIGluaXRpYWxfd2lkdGggY2hhcnMsIGlmIHJlYWwgY29sdW1uCisJCSAqIGlzIG5hcnJvd2VyLCBpbmNyZWFzZSBsZW4gYSBiaXQgc28gd2UgZmlsbCBsZXNzCisJCSAqIHNwYWNlLgorCQkgKi8KKwkJbGVuICs9IGluaXRpYWxfd2lkdGggLSBkYXRhLT5sZW5bZGF0YS0+d2lkdGhbeF1dOworCQlsZW4gLT0gZGF0YS0+b3B0cy5wYWRkaW5nOworCX0KKworCWlmIChDT0xfTEFZT1VUKGRhdGEtPmNvbG9wdHMpID09IENPTF9DT0xVTU4pCisJCW5ld2xpbmUgPSBpICsgZGF0YS0+cm93cyA+PSBkYXRhLT5saXN0LT5ucjsKKwllbHNlCisJCW5ld2xpbmUgPSB4ID09IGRhdGEtPmNvbHMgLSAxIHx8IGkgPT0gZGF0YS0+bGlzdC0+bnIgLSAxOworCisJcHJpbnRmKCIlcyVzJXMiLAorCSAgICAgICB4ID09IDAgPyBkYXRhLT5vcHRzLmluZGVudCA6ICIiLAorCSAgICAgICBkYXRhLT5saXN0LT5pdGVtc1tpXS5zdHJpbmcsCisJICAgICAgIG5ld2xpbmUgPyBkYXRhLT5vcHRzLm5sIDogZW1wdHlfY2VsbCArIGxlbik7CisJcmV0dXJuIDA7Cit9CisKKy8qIERpc3BsYXkgQ09MX0NPTFVNTiBvciBDT0xfUk9XICovCitzdGF0aWMgdm9pZCBkaXNwbGF5X3RhYmxlKGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCSAgdW5zaWduZWQgaW50IGNvbG9wdHMsCisJCQkgIGNvbnN0IHN0cnVjdCBjb2x1bW5fb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgY29sdW1uX2RhdGEgZGF0YTsKKwlpbnQgeCwgeSwgaSwgaW5pdGlhbF93aWR0aDsKKwljaGFyICplbXB0eV9jZWxsOworCisJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCWRhdGEubGlzdCA9IGxpc3Q7CisJZGF0YS5jb2xvcHRzID0gY29sb3B0czsKKwlkYXRhLm9wdHMgPSAqb3B0czsKKworCWRhdGEubGVuID0geG1hbGxvYyhzaXplb2YoKmRhdGEubGVuKSAqIGxpc3QtPm5yKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykKKwkJZGF0YS5sZW5baV0gPSBpdGVtX2xlbmd0aChjb2xvcHRzLCBsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCisJbGF5b3V0KCZkYXRhLCAmaW5pdGlhbF93aWR0aCk7CisKKwlpZiAoY29sb3B0cyAmIENPTF9ERU5TRSkKKwkJc2hyaW5rX2NvbHVtbnMoJmRhdGEpOworCisJZW1wdHlfY2VsbCA9IHhtYWxsb2MoaW5pdGlhbF93aWR0aCArIDEpOworCW1lbXNldChlbXB0eV9jZWxsLCAnICcsIGluaXRpYWxfd2lkdGgpOworCWVtcHR5X2NlbGxbaW5pdGlhbF93aWR0aF0gPSAnXDAnOworCWZvciAoeSA9IDA7IHkgPCBkYXRhLnJvd3M7IHkrKykgeworCQlmb3IgKHggPSAwOyB4IDwgZGF0YS5jb2xzOyB4KyspCisJCQlpZiAoZGlzcGxheV9jZWxsKCZkYXRhLCBpbml0aWFsX3dpZHRoLCBlbXB0eV9jZWxsLCB4LCB5KSkKKwkJCQlicmVhazsKKwl9CisKKwlmcmVlKGRhdGEubGVuKTsKKwlmcmVlKGRhdGEud2lkdGgpOworCWZyZWUoZW1wdHlfY2VsbCk7Cit9CisKK3ZvaWQgcHJpbnRfY29sdW1ucyhjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGludCBjb2xvcHRzLAorCQkgICBjb25zdCBzdHJ1Y3QgY29sdW1uX29wdGlvbnMgKm9wdHMpCit7CisJc3RydWN0IGNvbHVtbl9vcHRpb25zIG5vcHRzOworCisJaWYgKCFsaXN0LT5ucikKKwkJcmV0dXJuOworCWFzc2VydCgoY29sb3B0cyAmIENPTF9FTkFCTEVfTUFTSykgIT0gQ09MX0FVVE8pOworCisJbWVtc2V0KCZub3B0cywgMCwgc2l6ZW9mKG5vcHRzKSk7CisJbm9wdHMuaW5kZW50ID0gb3B0cyAmJiBvcHRzLT5pbmRlbnQgPyBvcHRzLT5pbmRlbnQgOiAiIjsKKwlub3B0cy5ubCA9IG9wdHMgJiYgb3B0cy0+bmwgPyBvcHRzLT5ubCA6ICJcbiI7CisJbm9wdHMucGFkZGluZyA9IG9wdHMgPyBvcHRzLT5wYWRkaW5nIDogMTsKKwlub3B0cy53aWR0aCA9IG9wdHMgJiYgb3B0cy0+d2lkdGggPyBvcHRzLT53aWR0aCA6IHRlcm1fY29sdW1ucygpIC0gMTsKKwlpZiAoIWNvbHVtbl9hY3RpdmUoY29sb3B0cykpIHsKKwkJZGlzcGxheV9wbGFpbihsaXN0LCAiIiwgIlxuIik7CisJCXJldHVybjsKKwl9CisJc3dpdGNoIChDT0xfTEFZT1VUKGNvbG9wdHMpKSB7CisJY2FzZSBDT0xfUExBSU46CisJCWRpc3BsYXlfcGxhaW4obGlzdCwgbm9wdHMuaW5kZW50LCBub3B0cy5ubCk7CisJCWJyZWFrOworCWNhc2UgQ09MX1JPVzoKKwljYXNlIENPTF9DT0xVTU46CisJCWRpc3BsYXlfdGFibGUobGlzdCwgY29sb3B0cywgJm5vcHRzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJCVUc6IGludmFsaWQgbGF5b3V0IG1vZGUgJWQiLCBDT0xfTEFZT1VUKGNvbG9wdHMpKTsKKwl9Cit9CisKK2ludCBmaW5hbGl6ZV9jb2xvcHRzKHVuc2lnbmVkIGludCAqY29sb3B0cywgaW50IHN0ZG91dF9pc190dHkpCit7CisJaWYgKCgqY29sb3B0cyAmIENPTF9FTkFCTEVfTUFTSykgPT0gQ09MX0FVVE8pIHsKKwkJaWYgKHN0ZG91dF9pc190dHkgPCAwKQorCQkJc3Rkb3V0X2lzX3R0eSA9IGlzYXR0eSgxKTsKKwkJKmNvbG9wdHMgJj0gfkNPTF9FTkFCTEVfTUFTSzsKKwkJaWYgKHN0ZG91dF9pc190dHkpCisJCQkqY29sb3B0cyB8PSBDT0xfRU5BQkxFRDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjb2xvcHQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IHZhbHVlOworCXVuc2lnbmVkIGludCBtYXNrOworfTsKKworI2RlZmluZSBMQVlPVVRfU0VUIDEKKyNkZWZpbmUgRU5BQkxFX1NFVCAyCisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0aW9uKGNvbnN0IGNoYXIgKmFyZywgaW50IGxlbiwgdW5zaWduZWQgaW50ICpjb2xvcHRzLAorCQkJaW50ICpncm91cF9zZXQpCit7CisJc3RydWN0IGNvbG9wdCBvcHRzW10gPSB7CisJCXsgImFsd2F5cyIsIENPTF9FTkFCTEVELCAgQ09MX0VOQUJMRV9NQVNLIH0sCisJCXsgIm5ldmVyIiwgIENPTF9ESVNBQkxFRCwgQ09MX0VOQUJMRV9NQVNLIH0sCisJCXsgImF1dG8iLCAgIENPTF9BVVRPLCAgICAgQ09MX0VOQUJMRV9NQVNLIH0sCisJCXsgInBsYWluIiwgIENPTF9QTEFJTiwgICAgQ09MX0xBWU9VVF9NQVNLIH0sCisJCXsgImNvbHVtbiIsIENPTF9DT0xVTU4sICAgQ09MX0xBWU9VVF9NQVNLIH0sCisJCXsgInJvdyIsICAgIENPTF9ST1csICAgICAgQ09MX0xBWU9VVF9NQVNLIH0sCisJCXsgImRlbnNlIiwgIENPTF9ERU5TRSwgICAgMCB9LAorCX07CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvcHRzKTsgaSsrKSB7CisJCWludCBzZXQgPSAxLCBhcmdfbGVuID0gbGVuLCBuYW1lX2xlbjsKKwkJY29uc3QgY2hhciAqYXJnX3N0ciA9IGFyZzsKKworCQlpZiAoIW9wdHNbaV0ubWFzaykgeworCQkJaWYgKGFyZ19sZW4gPiAyICYmICFzdHJuY21wKGFyZ19zdHIsICJubyIsIDIpKSB7CisJCQkJYXJnX3N0ciArPSAyOworCQkJCWFyZ19sZW4gLT0gMjsKKwkJCQlzZXQgPSAwOworCQkJfQorCQl9CisKKwkJbmFtZV9sZW4gPSBzdHJsZW4ob3B0c1tpXS5uYW1lKTsKKwkJaWYgKGFyZ19sZW4gIT0gbmFtZV9sZW4gfHwKKwkJICAgIHN0cm5jbXAoYXJnX3N0ciwgb3B0c1tpXS5uYW1lLCBuYW1lX2xlbikpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKG9wdHNbaV0ubWFzaykgeworCQljYXNlIENPTF9FTkFCTEVfTUFTSzoKKwkJCSpncm91cF9zZXQgfD0gRU5BQkxFX1NFVDsKKwkJCWJyZWFrOworCQljYXNlIENPTF9MQVlPVVRfTUFTSzoKKwkJCSpncm91cF9zZXQgfD0gTEFZT1VUX1NFVDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKG9wdHNbaV0ubWFzaykKKwkJCSpjb2xvcHRzID0gKCpjb2xvcHRzICYgfm9wdHNbaV0ubWFzaykgfCBvcHRzW2ldLnZhbHVlOworCQllbHNlIHsKKwkJCWlmIChzZXQpCisJCQkJKmNvbG9wdHMgfD0gb3B0c1tpXS52YWx1ZTsKKwkJCWVsc2UKKwkJCQkqY29sb3B0cyAmPSB+b3B0c1tpXS52YWx1ZTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gZXJyb3IoInVuc3VwcG9ydGVkIG9wdGlvbiAnJXMnIiwgYXJnKTsKK30KKworc3RhdGljIGludCBwYXJzZV9jb25maWcodW5zaWduZWQgaW50ICpjb2xvcHRzLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwljb25zdCBjaGFyICpzZXAgPSAiICwiOworCWludCBncm91cF9zZXQgPSAwOworCisJd2hpbGUgKCp2YWx1ZSkgeworCQlpbnQgbGVuID0gc3RyY3Nwbih2YWx1ZSwgc2VwKTsKKwkJaWYgKGxlbikgeworCQkJaWYgKHBhcnNlX29wdGlvbih2YWx1ZSwgbGVuLCBjb2xvcHRzLCAmZ3JvdXBfc2V0KSkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCXZhbHVlICs9IGxlbjsKKwkJfQorCQl2YWx1ZSArPSBzdHJzcG4odmFsdWUsIHNlcCk7CisJfQorCS8qCisJICogSWYgbm9uZSBvZiAiYWx3YXlzIiwgIm5ldmVyIiwgYW5kICJhdXRvIiBpcyBzcGVjaWZpZWQsIHRoZW4gc2V0dGluZworCSAqIGxheW91dCBpbXBsaWVzICJhbHdheXMiLgorCSAqCisJICogQ3VycmVudCB2YWx1ZSBpbiBDT0xfRU5BQkxFX01BU0sgaXMgZGlzcmVnYXJkZWQuIFRoaXMgbWVhbnMgaWYKKwkgKiB5b3Ugc2V0IGNvbHVtbi51aSA9IGF1dG8gYW5kIHBhc3MgLS1jb2x1bW49cm93LCB0aGVuICJhdXRvIgorCSAqIHdpbGwgYmVjb21lICJhbHdheXMiLgorCSAqLworCWlmICgoZ3JvdXBfc2V0ICYgTEFZT1VUX1NFVCkgJiYgIShncm91cF9zZXQgJiBFTkFCTEVfU0VUKSkKKwkJKmNvbG9wdHMgPSAoKmNvbG9wdHMgJiB+Q09MX0VOQUJMRV9NQVNLKSB8IENPTF9FTkFCTEVEOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbHVtbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCSBjb25zdCBjaGFyICprZXksIHVuc2lnbmVkIGludCAqY29sb3B0cykKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwlpZiAocGFyc2VfY29uZmlnKGNvbG9wdHMsIHZhbHVlKSkKKwkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGNvbHVtbi4lcyBtb2RlICVzIiwga2V5LCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfY29sdW1uX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkgICAgICBjb25zdCBjaGFyICpjb21tYW5kLCB1bnNpZ25lZCBpbnQgKmNvbG9wdHMpCit7CisJY29uc3QgY2hhciAqaXQ7CisKKwlpZiAoIXNraXBfcHJlZml4KHZhciwgImNvbHVtbi4iLCAmaXQpKQorCQlyZXR1cm4gMDsKKworCWlmICghc3RyY21wKGl0LCAidWkiKSkKKwkJcmV0dXJuIGNvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgInVpIiwgY29sb3B0cyk7CisKKwlpZiAoY29tbWFuZCAmJiAhc3RyY21wKGl0LCBjb21tYW5kKSkKKwkJcmV0dXJuIGNvbHVtbl9jb25maWcodmFyLCB2YWx1ZSwgaXQsIGNvbG9wdHMpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZW9wdF9jb2x1bW5fY2FsbGJhY2soY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQkJICAgICBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwl1bnNpZ25lZCBpbnQgKmNvbG9wdHMgPSBvcHQtPnZhbHVlOworCSpjb2xvcHRzIHw9IENPTF9QQVJTRU9QVDsKKwkqY29sb3B0cyAmPSB+Q09MX0VOQUJMRV9NQVNLOworCWlmICh1bnNldCkJCS8qIC0tbm8tY29sdW1uID09IG5ldmVyICovCisJCXJldHVybiAwOworCS8qIC0tY29sdW1uID09IGFsd2F5cyB1bmxlc3MgImFyZyIgc3RhdGVzIG90aGVyd2lzZSAqLworCSpjb2xvcHRzIHw9IENPTF9FTkFCTEVEOworCWlmIChhcmcpCisJCXJldHVybiBwYXJzZV9jb25maWcoY29sb3B0cywgYXJnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZkX291dCA9IC0xOworc3RhdGljIHN0cnVjdCBjaGlsZF9wcm9jZXNzIGNvbHVtbl9wcm9jZXNzID0gQ0hJTERfUFJPQ0VTU19JTklUOworCitpbnQgcnVuX2NvbHVtbl9maWx0ZXIoaW50IGNvbG9wdHMsIGNvbnN0IHN0cnVjdCBjb2x1bW5fb3B0aW9ucyAqb3B0cykKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSAqYXJndjsKKworCWlmIChmZF9vdXQgIT0gLTEpCisJCXJldHVybiAtMTsKKworCWNoaWxkX3Byb2Nlc3NfaW5pdCgmY29sdW1uX3Byb2Nlc3MpOworCWFyZ3YgPSAmY29sdW1uX3Byb2Nlc3MuYXJnczsKKworCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCAiY29sdW1uIik7CisJYXJndl9hcnJheV9wdXNoZihhcmd2LCAiLS1yYXctbW9kZT0lZCIsIGNvbG9wdHMpOworCWlmIChvcHRzICYmIG9wdHMtPndpZHRoKQorCQlhcmd2X2FycmF5X3B1c2hmKGFyZ3YsICItLXdpZHRoPSVkIiwgb3B0cy0+d2lkdGgpOworCWlmIChvcHRzICYmIG9wdHMtPmluZGVudCkKKwkJYXJndl9hcnJheV9wdXNoZihhcmd2LCAiLS1pbmRlbnQ9JXMiLCBvcHRzLT5pbmRlbnQpOworCWlmIChvcHRzICYmIG9wdHMtPnBhZGRpbmcpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoYXJndiwgIi0tcGFkZGluZz0lZCIsIG9wdHMtPnBhZGRpbmcpOworCisJZmZsdXNoKHN0ZG91dCk7CisJY29sdW1uX3Byb2Nlc3MuaW4gPSAtMTsKKwljb2x1bW5fcHJvY2Vzcy5vdXQgPSBkdXAoMSk7CisJY29sdW1uX3Byb2Nlc3MuZ2l0X2NtZCA9IDE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY29sdW1uX3Byb2Nlc3MpKQorCQlyZXR1cm4gLTI7CisKKwlmZF9vdXQgPSBkdXAoMSk7CisJY2xvc2UoMSk7CisJZHVwMihjb2x1bW5fcHJvY2Vzcy5pbiwgMSk7CisJY2xvc2UoY29sdW1uX3Byb2Nlc3MuaW4pOworCXJldHVybiAwOworfQorCitpbnQgc3RvcF9jb2x1bW5fZmlsdGVyKHZvaWQpCit7CisJaWYgKGZkX291dCA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJZmZsdXNoKHN0ZG91dCk7CisJY2xvc2UoMSk7CisJZmluaXNoX2NvbW1hbmQoJmNvbHVtbl9wcm9jZXNzKTsKKwlkdXAyKGZkX291dCwgMSk7CisJY2xvc2UoZmRfb3V0KTsKKwlmZF9vdXQgPSAtMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbHVtbi5oIGIvY29sdW1uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE2MTkxNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbHVtbi5oCkBAIC0wLDAgKzEsNDUgQEAKKyNpZm5kZWYgQ09MVU1OX0gKKyNkZWZpbmUgQ09MVU1OX0gKKworI2RlZmluZSBDT0xfTEFZT1VUX01BU0sgICAweDAwMEYKKyNkZWZpbmUgQ09MX0VOQUJMRV9NQVNLICAgMHgwMDMwICAgLyogYWx3YXlzLCBuZXZlciBvciBhdXRvICovCisjZGVmaW5lIENPTF9QQVJTRU9QVCAgICAgIDB4MDA0MCAgIC8qIC0tY29sdW1uIGlzIGdpdmVuIGZyb20gY21kbGluZSAqLworI2RlZmluZSBDT0xfREVOU0UgICAgICAgICAweDAwODAgICAvKiBTaHJpbmsgY29sdW1ucyB3aGVuIHBvc3NpYmxlLAorCQkJCSAgICAgIG1ha2luZyBzcGFjZSBmb3IgbW9yZSBjb2x1bW5zICovCisKKyNkZWZpbmUgQ09MX0RJU0FCTEVEICAgICAgMHgwMDAwICAgLyogbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lIENPTF9FTkFCTEVEICAgICAgIDB4MDAxMAorI2RlZmluZSBDT0xfQVVUTyAgICAgICAgICAweDAwMjAKKworI2RlZmluZSBDT0xfTEFZT1VUKGMpICgoYykgJiBDT0xfTEFZT1VUX01BU0spCisjZGVmaW5lIENPTF9DT0xVTU4gICAgICAgICAgICAgMCAgIC8qIEZpbGwgY29sdW1ucyBiZWZvcmUgcm93cyAqLworI2RlZmluZSBDT0xfUk9XICAgICAgICAgICAgICAgIDEgICAvKiBGaWxsIHJvd3MgYmVmb3JlIGNvbHVtbnMgKi8KKyNkZWZpbmUgQ09MX1BMQUlOICAgICAgICAgICAgIDE1ICAgLyogb25lIGNvbHVtbiAqLworCisjZGVmaW5lIGV4cGxpY2l0bHlfZW5hYmxlX2NvbHVtbihjKSBcCisJKCgoYykgJiBDT0xfUEFSU0VPUFQpICYmIGNvbHVtbl9hY3RpdmUoYykpCisKK3N0cnVjdCBjb2x1bW5fb3B0aW9ucyB7CisJaW50IHdpZHRoOworCWludCBwYWRkaW5nOworCWNvbnN0IGNoYXIgKmluZGVudDsKKwljb25zdCBjaGFyICpubDsKK307CisKK3N0cnVjdCBvcHRpb247CitleHRlcm4gaW50IHBhcnNlb3B0X2NvbHVtbl9jYWxsYmFjayhjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgZ2l0X2NvbHVtbl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCSAgICAgY29uc3QgY2hhciAqY29tbWFuZCwgdW5zaWduZWQgaW50ICpjb2xvcHRzKTsKK2V4dGVybiBpbnQgZmluYWxpemVfY29sb3B0cyh1bnNpZ25lZCBpbnQgKmNvbG9wdHMsIGludCBzdGRvdXRfaXNfdHR5KTsKK3N0YXRpYyBpbmxpbmUgaW50IGNvbHVtbl9hY3RpdmUodW5zaWduZWQgaW50IGNvbG9wdHMpCit7CisJcmV0dXJuIChjb2xvcHRzICYgQ09MX0VOQUJMRV9NQVNLKSA9PSBDT0xfRU5BQkxFRDsKK30KKworZXh0ZXJuIHZvaWQgcHJpbnRfY29sdW1ucyhjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGludCBjb2xvcHRzLAorCQkJICBjb25zdCBzdHJ1Y3QgY29sdW1uX29wdGlvbnMgKm9wdHMpOworCitleHRlcm4gaW50IHJ1bl9jb2x1bW5fZmlsdGVyKGludCBjb2xvcHRzLCBjb25zdCBzdHJ1Y3QgY29sdW1uX29wdGlvbnMgKik7CitleHRlcm4gaW50IHN0b3BfY29sdW1uX2ZpbHRlcih2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21iaW5lLWRpZmYuYyBiL2NvbWJpbmUtZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNjJmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21iaW5lLWRpZmYuYwpAQCAtMCwwICsxLDE1NDggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInhkaWZmL3htYWNyb3MuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorCitzdGF0aWMgaW50IGNvbXBhcmVfcGF0aHMoY29uc3Qgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpvbmUsCisJCQkgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28pCit7CisJaWYgKCFTX0lTRElSKG9uZS0+bW9kZSkgJiYgIVNfSVNESVIodHdvLT5tb2RlKSkKKwkJcmV0dXJuIHN0cmNtcChvbmUtPnBhdGgsIHR3by0+cGF0aCk7CisKKwlyZXR1cm4gYmFzZV9uYW1lX2NvbXBhcmUob25lLT5wYXRoLCBzdHJsZW4ob25lLT5wYXRoKSwgb25lLT5tb2RlLAorCQkJCSB0d28tPnBhdGgsIHN0cmxlbih0d28tPnBhdGgpLCB0d28tPm1vZGUpOworfQorCitzdGF0aWMgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICppbnRlcnNlY3RfcGF0aHMoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpjdXJyLCBpbnQgbiwgaW50IG51bV9wYXJlbnQpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLCAqKnRhaWwgPSAmY3VycjsKKwlpbnQgaSwgY21wOworCisJaWYgKCFuKSB7CisJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCQlpbnQgbGVuOworCQkJY29uc3QgY2hhciAqcGF0aDsKKwkJCWlmIChkaWZmX3VubW9kaWZpZWRfcGFpcihxLT5xdWV1ZVtpXSkpCisJCQkJY29udGludWU7CisJCQlwYXRoID0gcS0+cXVldWVbaV0tPnR3by0+cGF0aDsKKwkJCWxlbiA9IHN0cmxlbihwYXRoKTsKKwkJCXAgPSB4bWFsbG9jKGNvbWJpbmVfZGlmZl9wYXRoX3NpemUobnVtX3BhcmVudCwgbGVuKSk7CisJCQlwLT5wYXRoID0gKGNoYXIgKikgJihwLT5wYXJlbnRbbnVtX3BhcmVudF0pOworCQkJbWVtY3B5KHAtPnBhdGgsIHBhdGgsIGxlbik7CisJCQlwLT5wYXRoW2xlbl0gPSAwOworCQkJcC0+bmV4dCA9IE5VTEw7CisJCQltZW1zZXQocC0+cGFyZW50LCAwLAorCQkJICAgICAgIHNpemVvZihwLT5wYXJlbnRbMF0pICogbnVtX3BhcmVudCk7CisKKwkJCWhhc2hjcHkocC0+b2lkLmhhc2gsIHEtPnF1ZXVlW2ldLT50d28tPnNoYTEpOworCQkJcC0+bW9kZSA9IHEtPnF1ZXVlW2ldLT50d28tPm1vZGU7CisJCQloYXNoY3B5KHAtPnBhcmVudFtuXS5vaWQuaGFzaCwgcS0+cXVldWVbaV0tPm9uZS0+c2hhMSk7CisJCQlwLT5wYXJlbnRbbl0ubW9kZSA9IHEtPnF1ZXVlW2ldLT5vbmUtPm1vZGU7CisJCQlwLT5wYXJlbnRbbl0uc3RhdHVzID0gcS0+cXVldWVbaV0tPnN0YXR1czsKKwkJCSp0YWlsID0gcDsKKwkJCXRhaWwgPSAmcC0+bmV4dDsKKwkJfQorCQlyZXR1cm4gY3VycjsKKwl9CisKKwkvKgorCSAqIHBhdGhzIGluIGN1cnIgKGxpbmtlZCBsaXN0KSBhbmQgcS0+cXVldWVbXSAoYXJyYXkpIGFyZQorCSAqIGJvdGggc29ydGVkIGluIHRoZSB0cmVlIG9yZGVyLgorCSAqLworCWkgPSAwOworCXdoaWxlICgocCA9ICp0YWlsKSAhPSBOVUxMKSB7CisJCWNtcCA9ICgoaSA+PSBxLT5ucikKKwkJICAgICAgID8gLTEgOiBjb21wYXJlX3BhdGhzKHAsIHEtPnF1ZXVlW2ldLT50d28pKTsKKworCQlpZiAoY21wIDwgMCkgeworCQkJLyogcC0+cGF0aCBub3QgaW4gcS0+cXVldWVbXTsgZHJvcCBpdCAqLworCQkJKnRhaWwgPSBwLT5uZXh0OworCQkJZnJlZShwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNtcCA+IDApIHsKKwkJCS8qIHEtPnF1ZXVlW2ldIG5vdCBpbiBwLT5wYXRoOyBza2lwIGl0ICovCisJCQlpKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWhhc2hjcHkocC0+cGFyZW50W25dLm9pZC5oYXNoLCBxLT5xdWV1ZVtpXS0+b25lLT5zaGExKTsKKwkJcC0+cGFyZW50W25dLm1vZGUgPSBxLT5xdWV1ZVtpXS0+b25lLT5tb2RlOworCQlwLT5wYXJlbnRbbl0uc3RhdHVzID0gcS0+cXVldWVbaV0tPnN0YXR1czsKKworCQl0YWlsID0gJnAtPm5leHQ7CisJCWkrKzsKKwl9CisJcmV0dXJuIGN1cnI7Cit9CisKKy8qIExpbmVzIGxvc3QgZnJvbSBwYXJlbnQgKi8KK3N0cnVjdCBsbGluZSB7CisJc3RydWN0IGxsaW5lICpuZXh0LCAqcHJldjsKKwlpbnQgbGVuOworCXVuc2lnbmVkIGxvbmcgcGFyZW50X21hcDsKKwljaGFyIGxpbmVbRkxFWF9BUlJBWV07Cit9OworCisvKiBMaW5lcyBsb3N0IGZyb20gY3VycmVudCBwYXJlbnQgKGJlZm9yZSBjb2FsZXNjaW5nKSAqLworc3RydWN0IHBsb3N0IHsKKwlzdHJ1Y3QgbGxpbmUgKmxvc3RfaGVhZCwgKmxvc3RfdGFpbDsKKwlpbnQgbGVuOworfTsKKworLyogTGluZXMgc3Vydml2aW5nIGluIHRoZSBtZXJnZSByZXN1bHQgKi8KK3N0cnVjdCBzbGluZSB7CisJLyogQWNjdW11bGF0ZWQgYW5kIGNvYWxlc2NlZCBsb3N0IGxpbmVzICovCisJc3RydWN0IGxsaW5lICpsb3N0OworCWludCBsZW5sb3N0OworCXN0cnVjdCBwbG9zdCBwbG9zdDsKKwljaGFyICpib2w7CisJaW50IGxlbjsKKwkvKiBiaXQgMCB1cCB0byAoTi0xKSBhcmUgb24gaWYgdGhlIHBhcmVudCBoYXMgdGhpcyBsaW5lIChpLmUuCisJICogd2UgZGlkIG5vdCBjaGFuZ2UgaXQpLgorCSAqIGJpdCBOIGlzIHVzZWQgZm9yICJpbnRlcmVzdGluZyIgbGluZXMsIGluY2x1ZGluZyBjb250ZXh0LgorCSAqIGJpdCAoTisxKSBpcyB1c2VkIGZvciAiZG8gbm90IHNob3cgZGVsZXRpb24gYmVmb3JlIHRoaXMiLgorCSAqLworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwl1bnNpZ25lZCBsb25nICpwX2xubzsKK307CisKK3N0YXRpYyBpbnQgbWF0Y2hfc3RyaW5nX3NwYWNlcyhjb25zdCBjaGFyICpsaW5lMSwgaW50IGxlbjEsCisJCQkgICAgICAgY29uc3QgY2hhciAqbGluZTIsIGludCBsZW4yLAorCQkJICAgICAgIGxvbmcgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgWERGX1dISVRFU1BBQ0VfRkxBR1MpIHsKKwkJZm9yICg7IGxlbjEgPiAwICYmIFhETF9JU1NQQUNFKGxpbmUxW2xlbjEgLSAxXSk7IGxlbjEtLSk7CisJCWZvciAoOyBsZW4yID4gMCAmJiBYRExfSVNTUEFDRShsaW5lMltsZW4yIC0gMV0pOyBsZW4yLS0pOworCX0KKworCWlmICghKGZsYWdzICYgKFhERl9JR05PUkVfV0hJVEVTUEFDRSB8IFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UpKSkKKwkJcmV0dXJuIChsZW4xID09IGxlbjIgJiYgIW1lbWNtcChsaW5lMSwgbGluZTIsIGxlbjEpKTsKKworCXdoaWxlIChsZW4xID4gMCAmJiBsZW4yID4gMCkgeworCQlsZW4xLS07CisJCWxlbjItLTsKKwkJaWYgKFhETF9JU1NQQUNFKGxpbmUxW2xlbjFdKSB8fCBYRExfSVNTUEFDRShsaW5lMltsZW4yXSkpIHsKKwkJCWlmICgoZmxhZ3MgJiBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFKSAmJgorCQkJICAgICghWERMX0lTU1BBQ0UobGluZTFbbGVuMV0pIHx8ICFYRExfSVNTUEFDRShsaW5lMltsZW4yXSkpKQorCQkJCXJldHVybiAwOworCisJCQlmb3IgKDsgbGVuMSA+IDAgJiYgWERMX0lTU1BBQ0UobGluZTFbbGVuMV0pOyBsZW4xLS0pOworCQkJZm9yICg7IGxlbjIgPiAwICYmIFhETF9JU1NQQUNFKGxpbmUyW2xlbjJdKTsgbGVuMi0tKTsKKwkJfQorCQlpZiAobGluZTFbbGVuMV0gIT0gbGluZTJbbGVuMl0pCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZmxhZ3MgJiBYREZfSUdOT1JFX1dISVRFU1BBQ0UpIHsKKwkJLyogQ29uc3VtZSByZW1haW5pbmcgc3BhY2VzICovCisJCWZvciAoOyBsZW4xID4gMCAmJiBYRExfSVNTUEFDRShsaW5lMVtsZW4xIC0gMV0pOyBsZW4xLS0pOworCQlmb3IgKDsgbGVuMiA+IDAgJiYgWERMX0lTU1BBQ0UobGluZTJbbGVuMiAtIDFdKTsgbGVuMi0tKTsKKwl9CisKKwkvKiBXZSBtYXRjaGVkIGZ1bGwgbGluZTEgYW5kIGxpbmUyICovCisJaWYgKCFsZW4xICYmICFsZW4yKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitlbnVtIGNvYWxlc2NlX2RpcmVjdGlvbiB7IE1BVENILCBCQVNFLCBORVcgfTsKKworLyogQ29hbGVzY2UgbmV3IGxpbmVzIGludG8gYmFzZSBieSBmaW5kaW5nIExDUyAqLworc3RhdGljIHN0cnVjdCBsbGluZSAqY29hbGVzY2VfbGluZXMoc3RydWN0IGxsaW5lICpiYXNlLCBpbnQgKmxlbmJhc2UsCisJCQkJICAgIHN0cnVjdCBsbGluZSAqbmV3LCBpbnQgbGVubmV3LAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudCwgbG9uZyBmbGFncykKK3sKKwlpbnQgKipsY3M7CisJZW51bSBjb2FsZXNjZV9kaXJlY3Rpb24gKipkaXJlY3Rpb25zOworCXN0cnVjdCBsbGluZSAqYmFzZWVuZCwgKm5ld2VuZCA9IE5VTEw7CisJaW50IGksIGosIG9yaWdiYXNlbGVuID0gKmxlbmJhc2U7CisKKwlpZiAobmV3ID09IE5VTEwpCisJCXJldHVybiBiYXNlOworCisJaWYgKGJhc2UgPT0gTlVMTCkgeworCQkqbGVuYmFzZSA9IGxlbm5ldzsKKwkJcmV0dXJuIG5ldzsKKwl9CisKKwkvKgorCSAqIENvYWxlc2NlIG5ldyBsaW5lcyBpbnRvIGJhc2UgYnkgZmluZGluZyB0aGUgTENTCisJICogLSBDcmVhdGUgdGhlIHRhYmxlIHRvIHJ1biBkeW5hbWljIHByb2dyYW1taW5nCisJICogLSBDb21wdXRlIHRoZSBMQ1MKKwkgKiAtIFRoZW4gcmV2ZXJzZSByZWFkIHRoZSBkaXJlY3Rpb24gc3RydWN0dXJlOgorCSAqICAgLSBJZiB3ZSBoYXZlIE1BVENILCBhc3NpZ24gcGFyZW50IHRvIGJhc2UgZmxhZywgYW5kIGNvbnN1bWUKKwkgKiAgIGJvdGggYmFzZWVuZCBhbmQgbmV3ZW5kCisJICogICAtIEVsc2UgaWYgd2UgaGF2ZSBCQVNFLCBjb25zdW1lIGJhc2VlbmQKKwkgKiAgIC0gRWxzZSBpZiB3ZSBoYXZlIE5FVywgaW5zZXJ0IG5ld2VuZCBsbGluZSBpbnRvIGJhc2UgYW5kCisJICogICBjb25zdW1lIG5ld2VuZAorCSAqLworCWxjcyA9IHhjYWxsb2Mob3JpZ2Jhc2VsZW4gKyAxLCBzaXplb2YoaW50KikpOworCWRpcmVjdGlvbnMgPSB4Y2FsbG9jKG9yaWdiYXNlbGVuICsgMSwgc2l6ZW9mKGVudW0gY29hbGVzY2VfZGlyZWN0aW9uKikpOworCWZvciAoaSA9IDA7IGkgPCBvcmlnYmFzZWxlbiArIDE7IGkrKykgeworCQlsY3NbaV0gPSB4Y2FsbG9jKGxlbm5ldyArIDEsIHNpemVvZihpbnQpKTsKKwkJZGlyZWN0aW9uc1tpXSA9IHhjYWxsb2MobGVubmV3ICsgMSwgc2l6ZW9mKGVudW0gY29hbGVzY2VfZGlyZWN0aW9uKSk7CisJCWRpcmVjdGlvbnNbaV1bMF0gPSBCQVNFOworCX0KKwlmb3IgKGogPSAxOyBqIDwgbGVubmV3ICsgMTsgaisrKQorCQlkaXJlY3Rpb25zWzBdW2pdID0gTkVXOworCisJZm9yIChpID0gMSwgYmFzZWVuZCA9IGJhc2U7IGkgPCBvcmlnYmFzZWxlbiArIDE7IGkrKykgeworCQlmb3IgKGogPSAxLCBuZXdlbmQgPSBuZXc7IGogPCBsZW5uZXcgKyAxOyBqKyspIHsKKwkJCWlmIChtYXRjaF9zdHJpbmdfc3BhY2VzKGJhc2VlbmQtPmxpbmUsIGJhc2VlbmQtPmxlbiwKKwkJCQkJCW5ld2VuZC0+bGluZSwgbmV3ZW5kLT5sZW4sIGZsYWdzKSkgeworCQkJCWxjc1tpXVtqXSA9IGxjc1tpIC0gMV1baiAtIDFdICsgMTsKKwkJCQlkaXJlY3Rpb25zW2ldW2pdID0gTUFUQ0g7CisJCQl9IGVsc2UgaWYgKGxjc1tpXVtqIC0gMV0gPj0gbGNzW2kgLSAxXVtqXSkgeworCQkJCWxjc1tpXVtqXSA9IGxjc1tpXVtqIC0gMV07CisJCQkJZGlyZWN0aW9uc1tpXVtqXSA9IE5FVzsKKwkJCX0gZWxzZSB7CisJCQkJbGNzW2ldW2pdID0gbGNzW2kgLSAxXVtqXTsKKwkJCQlkaXJlY3Rpb25zW2ldW2pdID0gQkFTRTsKKwkJCX0KKwkJCWlmIChuZXdlbmQtPm5leHQpCisJCQkJbmV3ZW5kID0gbmV3ZW5kLT5uZXh0OworCQl9CisJCWlmIChiYXNlZW5kLT5uZXh0KQorCQkJYmFzZWVuZCA9IGJhc2VlbmQtPm5leHQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG9yaWdiYXNlbGVuICsgMTsgaSsrKQorCQlmcmVlKGxjc1tpXSk7CisJZnJlZShsY3MpOworCisJLyogQXQgdGhpcyBwb2ludCwgYmFzZWVuZCBhbmQgbmV3ZW5kIHBvaW50IHRvIHRoZSBlbmQgb2YgZWFjaCBsaXN0cyAqLworCWktLTsKKwlqLS07CisJd2hpbGUgKGkgIT0gMCB8fCBqICE9IDApIHsKKwkJaWYgKGRpcmVjdGlvbnNbaV1bal0gPT0gTUFUQ0gpIHsKKwkJCWJhc2VlbmQtPnBhcmVudF9tYXAgfD0gMTw8cGFyZW50OworCQkJYmFzZWVuZCA9IGJhc2VlbmQtPnByZXY7CisJCQluZXdlbmQgPSBuZXdlbmQtPnByZXY7CisJCQlpLS07CisJCQlqLS07CisJCX0gZWxzZSBpZiAoZGlyZWN0aW9uc1tpXVtqXSA9PSBORVcpIHsKKwkJCXN0cnVjdCBsbGluZSAqbGxpbmU7CisKKwkJCWxsaW5lID0gbmV3ZW5kOworCQkJLyogUmVtb3ZlIGxsaW5lIGZyb20gbmV3IGxpc3QgYW5kIHVwZGF0ZSBuZXdlbmQgKi8KKwkJCWlmIChsbGluZS0+cHJldikKKwkJCQlsbGluZS0+cHJldi0+bmV4dCA9IGxsaW5lLT5uZXh0OworCQkJZWxzZQorCQkJCW5ldyA9IGxsaW5lLT5uZXh0OworCQkJaWYgKGxsaW5lLT5uZXh0KQorCQkJCWxsaW5lLT5uZXh0LT5wcmV2ID0gbGxpbmUtPnByZXY7CisKKwkJCW5ld2VuZCA9IGxsaW5lLT5wcmV2OworCQkJai0tOworCisJCQkvKiBBZGQgbGxpbmUgdG8gYmFzZSBsaXN0ICovCisJCQlpZiAoYmFzZWVuZCkgeworCQkJCWxsaW5lLT5uZXh0ID0gYmFzZWVuZC0+bmV4dDsKKwkJCQlsbGluZS0+cHJldiA9IGJhc2VlbmQ7CisJCQkJaWYgKGxsaW5lLT5wcmV2KQorCQkJCQlsbGluZS0+cHJldi0+bmV4dCA9IGxsaW5lOworCQkJfQorCQkJZWxzZSB7CisJCQkJbGxpbmUtPm5leHQgPSBiYXNlOworCQkJCWJhc2UgPSBsbGluZTsKKwkJCX0KKwkJCSgqbGVuYmFzZSkrKzsKKworCQkJaWYgKGxsaW5lLT5uZXh0KQorCQkJCWxsaW5lLT5uZXh0LT5wcmV2ID0gbGxpbmU7CisKKwkJfSBlbHNlIHsKKwkJCWJhc2VlbmQgPSBiYXNlZW5kLT5wcmV2OworCQkJaS0tOworCQl9CisJfQorCisJbmV3ZW5kID0gbmV3OworCXdoaWxlIChuZXdlbmQpIHsKKwkJc3RydWN0IGxsaW5lICpsbGluZSA9IG5ld2VuZDsKKwkJbmV3ZW5kID0gbmV3ZW5kLT5uZXh0OworCQlmcmVlKGxsaW5lKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgb3JpZ2Jhc2VsZW4gKyAxOyBpKyspCisJCWZyZWUoZGlyZWN0aW9uc1tpXSk7CisJZnJlZShkaXJlY3Rpb25zKTsKKworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgY2hhciAqZ3JhYl9ibG9iKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwgdW5zaWduZWQgaW50IG1vZGUsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICpzaXplLCBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqYmxvYjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJYmxvYiA9IHhtYWxsb2MoMTAwKTsKKwkJKnNpemUgPSBzbnByaW50ZihibG9iLCAxMDAsCisJCQkJICJTdWJwcm9qZWN0IGNvbW1pdCAlc1xuIiwgb2lkX3RvX2hleChvaWQpKTsKKwl9IGVsc2UgaWYgKGlzX251bGxfb2lkKG9pZCkpIHsKKwkJLyogZGVsZXRlZCBibG9iICovCisJCSpzaXplID0gMDsKKwkJcmV0dXJuIHhjYWxsb2MoMSwgMSk7CisJfSBlbHNlIGlmICh0ZXh0Y29udikgeworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGYgPSBhbGxvY19maWxlc3BlYyhwYXRoKTsKKwkJZmlsbF9maWxlc3BlYyhkZiwgb2lkLT5oYXNoLCAxLCBtb2RlKTsKKwkJKnNpemUgPSBmaWxsX3RleHRjb252KHRleHRjb252LCBkZiwgJmJsb2IpOworCQlmcmVlX2ZpbGVzcGVjKGRmKTsKKwl9IGVsc2UgeworCQlibG9iID0gcmVhZF9zaGExX2ZpbGUob2lkLT5oYXNoLCAmdHlwZSwgc2l6ZSk7CisJCWlmICh0eXBlICE9IE9CSl9CTE9CKQorCQkJZGllKCJvYmplY3QgJyVzJyBpcyBub3QgYSBibG9iISIsIG9pZF90b19oZXgob2lkKSk7CisJfQorCXJldHVybiBibG9iOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfbG9zdChzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCBpbnQgbiwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbGxpbmUgKmxsaW5lOworCXVuc2lnbmVkIGxvbmcgdGhpc19tYXNrID0gKDFVTDw8bik7CisJaWYgKGxpbmVbbGVuLTFdID09ICdcbicpCisJCWxlbi0tOworCisJbGxpbmUgPSB4bWFsbG9jKHNpemVvZigqbGxpbmUpICsgbGVuICsgMSk7CisJbGxpbmUtPmxlbiA9IGxlbjsKKwlsbGluZS0+bmV4dCA9IE5VTEw7CisJbGxpbmUtPnByZXYgPSBzbGluZS0+cGxvc3QubG9zdF90YWlsOworCWlmIChsbGluZS0+cHJldikKKwkJbGxpbmUtPnByZXYtPm5leHQgPSBsbGluZTsKKwllbHNlCisJCXNsaW5lLT5wbG9zdC5sb3N0X2hlYWQgPSBsbGluZTsKKwlzbGluZS0+cGxvc3QubG9zdF90YWlsID0gbGxpbmU7CisJc2xpbmUtPnBsb3N0LmxlbisrOworCWxsaW5lLT5wYXJlbnRfbWFwID0gdGhpc19tYXNrOworCW1lbWNweShsbGluZS0+bGluZSwgbGluZSwgbGVuKTsKKwlsbGluZS0+bGluZVtsZW5dID0gMDsKK30KKworc3RydWN0IGNvbWJpbmVfZGlmZl9zdGF0ZSB7CisJdW5zaWduZWQgaW50IGxubzsKKwlpbnQgb2IsIG9uLCBuYiwgbm47CisJdW5zaWduZWQgbG9uZyBubWFzazsKKwlpbnQgbnVtX3BhcmVudDsKKwlpbnQgbjsKKwlzdHJ1Y3Qgc2xpbmUgKnNsaW5lOworCXN0cnVjdCBzbGluZSAqbG9zdF9idWNrZXQ7Cit9OworCitzdGF0aWMgdm9pZCBjb25zdW1lX2xpbmUodm9pZCAqc3RhdGVfLCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3N0YXRlICpzdGF0ZSA9IHN0YXRlXzsKKwlpZiAoNSA8IGxlbiAmJiAhbWVtY21wKCJAQCAtIiwgbGluZSwgNCkpIHsKKwkJaWYgKHBhcnNlX2h1bmtfaGVhZGVyKGxpbmUsIGxlbiwKKwkJCQkgICAgICAmc3RhdGUtPm9iLCAmc3RhdGUtPm9uLAorCQkJCSAgICAgICZzdGF0ZS0+bmIsICZzdGF0ZS0+bm4pKQorCQkJcmV0dXJuOworCQlzdGF0ZS0+bG5vID0gc3RhdGUtPm5iOworCQlpZiAoc3RhdGUtPm5uID09IDApIHsKKwkJCS8qIEBAIC1YLFkgK04sMCBAQCByZW1vdmVkIFkgbGluZXMKKwkJCSAqIHRoYXQgd291bGQgaGF2ZSBjb21lICphZnRlciogbGluZSBOCisJCQkgKiBpbiB0aGUgcmVzdWx0LiAgT3VyIGxvc3QgYnVja2V0cyBoYW5nCisJCQkgKiB0byB0aGUgbGluZSBhZnRlciB0aGUgcmVtb3ZlZCBsaW5lcywKKwkJCSAqCisJCQkgKiBOb3RlIHRoYXQgdGhpcyBpcyBjb3JyZWN0IGV2ZW4gd2hlbiBOID09IDAsCisJCQkgKiBpbiB3aGljaCBjYXNlIHRoZSBodW5rIHJlbW92ZXMgdGhlIGZpcnN0CisJCQkgKiBsaW5lIGluIHRoZSBmaWxlLgorCQkJICovCisJCQlzdGF0ZS0+bG9zdF9idWNrZXQgPSAmc3RhdGUtPnNsaW5lW3N0YXRlLT5uYl07CisJCQlpZiAoIXN0YXRlLT5uYikKKwkJCQlzdGF0ZS0+bmIgPSAxOworCQl9IGVsc2UgeworCQkJc3RhdGUtPmxvc3RfYnVja2V0ID0gJnN0YXRlLT5zbGluZVtzdGF0ZS0+bmItMV07CisJCX0KKwkJaWYgKCFzdGF0ZS0+c2xpbmVbc3RhdGUtPm5iLTFdLnBfbG5vKQorCQkJc3RhdGUtPnNsaW5lW3N0YXRlLT5uYi0xXS5wX2xubyA9CisJCQkJeGNhbGxvYyhzdGF0ZS0+bnVtX3BhcmVudCwKKwkJCQkJc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwkJc3RhdGUtPnNsaW5lW3N0YXRlLT5uYi0xXS5wX2xub1tzdGF0ZS0+bl0gPSBzdGF0ZS0+b2I7CisJCXJldHVybjsKKwl9CisJaWYgKCFzdGF0ZS0+bG9zdF9idWNrZXQpCisJCXJldHVybjsgLyogbm90IGluIGFueSBodW5rIHlldCAqLworCXN3aXRjaCAobGluZVswXSkgeworCWNhc2UgJy0nOgorCQlhcHBlbmRfbG9zdChzdGF0ZS0+bG9zdF9idWNrZXQsIHN0YXRlLT5uLCBsaW5lKzEsIGxlbi0xKTsKKwkJYnJlYWs7CisJY2FzZSAnKyc6CisJCXN0YXRlLT5zbGluZVtzdGF0ZS0+bG5vLTFdLmZsYWcgfD0gc3RhdGUtPm5tYXNrOworCQlzdGF0ZS0+bG5vKys7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgY29tYmluZV9kaWZmKGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKnBhcmVudCwgdW5zaWduZWQgaW50IG1vZGUsCisJCQkgbW1maWxlX3QgKnJlc3VsdF9maWxlLAorCQkJIHN0cnVjdCBzbGluZSAqc2xpbmUsIHVuc2lnbmVkIGludCBjbnQsIGludCBuLAorCQkJIGludCBudW1fcGFyZW50LCBpbnQgcmVzdWx0X2RlbGV0ZWQsCisJCQkgc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdGV4dGNvbnYsCisJCQkgY29uc3QgY2hhciAqcGF0aCwgbG9uZyBmbGFncykKK3sKKwl1bnNpZ25lZCBpbnQgcF9sbm8sIGxubzsKKwl1bnNpZ25lZCBsb25nIG5tYXNrID0gKDFVTCA8PCBuKTsKKwl4cHBhcmFtX3QgeHBwOworCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwltbWZpbGVfdCBwYXJlbnRfZmlsZTsKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3N0YXRlIHN0YXRlOworCXVuc2lnbmVkIGxvbmcgc3o7CisKKwlpZiAocmVzdWx0X2RlbGV0ZWQpCisJCXJldHVybjsgLyogcmVzdWx0IGRlbGV0ZWQgKi8KKworCXBhcmVudF9maWxlLnB0ciA9IGdyYWJfYmxvYihwYXJlbnQsIG1vZGUsICZzeiwgdGV4dGNvbnYsIHBhdGgpOworCXBhcmVudF9maWxlLnNpemUgPSBzejsKKwltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCXhwcC5mbGFncyA9IGZsYWdzOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCXN0YXRlLm5tYXNrID0gbm1hc2s7CisJc3RhdGUuc2xpbmUgPSBzbGluZTsKKwlzdGF0ZS5sbm8gPSAxOworCXN0YXRlLm51bV9wYXJlbnQgPSBudW1fcGFyZW50OworCXN0YXRlLm4gPSBuOworCisJaWYgKHhkaV9kaWZmX291dGYoJnBhcmVudF9maWxlLCByZXN1bHRfZmlsZSwgY29uc3VtZV9saW5lLCAmc3RhdGUsCisJCQkgICZ4cHAsICZ4ZWNmZykpCisJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIGNvbWJpbmVkIGRpZmYgZm9yICVzIiwKKwkJICAgIG9pZF90b19oZXgocGFyZW50KSk7CisJZnJlZShwYXJlbnRfZmlsZS5wdHIpOworCisJLyogQXNzaWduIGxpbmUgbnVtYmVycyBmb3IgdGhpcyBwYXJlbnQuCisJICoKKwkgKiBzbGluZVtsbm9dLnBfbG5vW25dIHJlY29yZHMgdGhlIGZpcnN0IGxpbmUgbnVtYmVyCisJICogKGNvdW50aW5nIGZyb20gMSkgZm9yIHBhcmVudCBOIGlmIHRoZSBmaW5hbCBodW5rIGRpc3BsYXkKKwkgKiBzdGFydGVkIGJ5IHNob3dpbmcgc2xpbmVbbG5vXSAocG9zc2libHkgc2hvd2luZyB0aGUgbG9zdAorCSAqIGxpbmVzIGF0dGFjaGVkIHRvIGl0IGZpcnN0KS4KKwkgKi8KKwlmb3IgKGxubyA9IDAsICBwX2xubyA9IDE7IGxubyA8PSBjbnQ7IGxubysrKSB7CisJCXN0cnVjdCBsbGluZSAqbGw7CisJCXNsaW5lW2xub10ucF9sbm9bbl0gPSBwX2xubzsKKworCQkvKiBDb2FsZXNjZSBuZXcgbGluZXMgKi8KKwkJaWYgKHNsaW5lW2xub10ucGxvc3QubG9zdF9oZWFkKSB7CisJCQlzdHJ1Y3Qgc2xpbmUgKnNsID0gJnNsaW5lW2xub107CisJCQlzbC0+bG9zdCA9IGNvYWxlc2NlX2xpbmVzKHNsLT5sb3N0LCAmc2wtPmxlbmxvc3QsCisJCQkJCQkgIHNsLT5wbG9zdC5sb3N0X2hlYWQsCisJCQkJCQkgIHNsLT5wbG9zdC5sZW4sIG4sIGZsYWdzKTsKKwkJCXNsLT5wbG9zdC5sb3N0X2hlYWQgPSBzbC0+cGxvc3QubG9zdF90YWlsID0gTlVMTDsKKwkJCXNsLT5wbG9zdC5sZW4gPSAwOworCQl9CisKKwkJLyogSG93IG1hbnkgbGluZXMgd291bGQgdGhpcyBzbGluZSBhZHZhbmNlIHRoZSBwX2xubz8gKi8KKwkJbGwgPSBzbGluZVtsbm9dLmxvc3Q7CisJCXdoaWxlIChsbCkgeworCQkJaWYgKGxsLT5wYXJlbnRfbWFwICYgbm1hc2spCisJCQkJcF9sbm8rKzsgLyogJy0nIG1lYW5zIHBhcmVudCBoYWQgaXQgKi8KKwkJCWxsID0gbGwtPm5leHQ7CisJCX0KKwkJaWYgKGxubyA8IGNudCAmJiAhKHNsaW5lW2xub10uZmxhZyAmIG5tYXNrKSkKKwkJCXBfbG5vKys7IC8qIG5vICcrJyBtZWFucyBwYXJlbnQgaGFkIGl0ICovCisJfQorCXNsaW5lW2xub10ucF9sbm9bbl0gPSBwX2xubzsgLyogdHJhaWxlciAqLworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjb250ZXh0ID0gMzsKK3N0YXRpYyBjaGFyIGNvbWJpbmVfbWFya2VyID0gJ0AnOworCitzdGF0aWMgaW50IGludGVyZXN0aW5nKHN0cnVjdCBzbGluZSAqc2xpbmUsIHVuc2lnbmVkIGxvbmcgYWxsX21hc2spCit7CisJLyogSWYgc29tZSBwYXJlbnRzIGxvc3QgbGluZXMgaGVyZSwgb3IgaWYgd2UgaGF2ZSBhZGRlZCB0bworCSAqIHNvbWUgcGFyZW50LCBpdCBpcyBpbnRlcmVzdGluZy4KKwkgKi8KKwlyZXR1cm4gKChzbGluZS0+ZmxhZyAmIGFsbF9tYXNrKSB8fCBzbGluZS0+bG9zdCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFkanVzdF9odW5rX3RhaWwoc3RydWN0IHNsaW5lICpzbGluZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFsbF9tYXNrLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgaHVua19iZWdpbiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGkpCit7CisJLyogaSBwb2ludHMgYXQgdGhlIGZpcnN0IHVuaW50ZXJlc3RpbmcgbGluZS4gIElmIHRoZSBsYXN0IGxpbmUKKwkgKiBvZiB0aGUgaHVuayB3YXMgaW50ZXJlc3Rpbmcgb25seSBiZWNhdXNlIGl0IGhhcyBzb21lCisJICogZGVsZXRpb24sIHRoZW4gaXQgaXMgbm90IGFsbCB0aGF0IGludGVyZXN0aW5nIGZvciB0aGUKKwkgKiBwdXJwb3NlIG9mIGdpdmluZyB0cmFpbGluZyBjb250ZXh0IGxpbmVzLiAgVGhpcyBpcyBiZWNhdXNlCisJICogd2Ugb3V0cHV0ICctJyBsaW5lIGFuZCB0aGVuIHVubW9kaWZpZWQgc2xpbmVbaS0xXSBpdHNlbGYgaW4KKwkgKiB0aGF0IGNhc2Ugd2hpY2ggZ2l2ZXMgdXMgb25lIGV4dHJhIGNvbnRleHQgbGluZS4KKwkgKi8KKwlpZiAoKGh1bmtfYmVnaW4gKyAxIDw9IGkpICYmICEoc2xpbmVbaS0xXS5mbGFnICYgYWxsX21hc2spKQorCQlpLS07CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfbmV4dChzdHJ1Y3Qgc2xpbmUgKnNsaW5lLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWFyaywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGksCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBjbnQsCisJCQkgICAgICAgaW50IGxvb2tfZm9yX3VuaW50ZXJlc3RpbmcpCit7CisJLyogV2UgaGF2ZSBleGFtaW5lZCB1cCB0byBpLTEgYW5kIGFyZSBhYm91dCB0byBsb29rIGF0IGkuCisJICogRmluZCBuZXh0IGludGVyZXN0aW5nIG9yIHVuaW50ZXJlc3RpbmcgbGluZS4gIEhlcmUsCisJICogImludGVyZXN0aW5nIiBkb2VzIG5vdCBtZWFuIGludGVyZXN0aW5nKCksIGJ1dCBtYXJrZWQgYnkKKwkgKiB0aGUgZ2l2ZV9jb250ZXh0KCkgZnVuY3Rpb24gYmVsb3cgKGkuZS4gaXQgaW5jbHVkZXMgY29udGV4dAorCSAqIGxpbmVzIHRoYXQgYXJlIG5vdCBpbnRlcmVzdGluZyB0byBpbnRlcmVzdGluZygpIGZ1bmN0aW9uCisJICogdGhhdCBhcmUgc3Vycm91bmRlZCBieSBpbnRlcmVzdGluZygpIG9uZXMuCisJICovCisJd2hpbGUgKGkgPD0gY250KQorCQlpZiAobG9va19mb3JfdW5pbnRlcmVzdGluZworCQkgICAgPyAhKHNsaW5lW2ldLmZsYWcgJiBtYXJrKQorCQkgICAgOiAoc2xpbmVbaV0uZmxhZyAmIG1hcmspKQorCQkJcmV0dXJuIGk7CisJCWVsc2UKKwkJCWkrKzsKKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBnaXZlX2NvbnRleHQoc3RydWN0IHNsaW5lICpzbGluZSwgdW5zaWduZWQgbG9uZyBjbnQsIGludCBudW1fcGFyZW50KQoreworCXVuc2lnbmVkIGxvbmcgYWxsX21hc2sgPSAoMVVMPDxudW1fcGFyZW50KSAtIDE7CisJdW5zaWduZWQgbG9uZyBtYXJrID0gKDFVTDw8bnVtX3BhcmVudCk7CisJdW5zaWduZWQgbG9uZyBub19wcmVfZGVsZXRlID0gKDJVTDw8bnVtX3BhcmVudCk7CisJdW5zaWduZWQgbG9uZyBpOworCisJLyogVHdvIGdyb3VwcyBvZiBpbnRlcmVzdGluZyBsaW5lcyBtYXkgaGF2ZSBhIHNob3J0IGdhcCBvZgorCSAqIHVuaW50ZXJlc3RpbmcgbGluZXMuICBDb25uZWN0IHN1Y2ggZ3JvdXBzIHRvIGdpdmUgdGhlbSBhCisJICogYml0IG9mIGNvbnRleHQuCisJICoKKwkgKiBXZSBmaXJzdCBzdGFydCBmcm9tIHdoYXQgdGhlIGludGVyZXN0aW5nKCkgZnVuY3Rpb24gc2F5cywKKwkgKiBhbmQgbWFyayB0aGVtIHdpdGggIm1hcmsiLCBhbmQgcGFpbnQgY29udGV4dCBsaW5lcyB3aXRoIHRoZQorCSAqIG1hcmsuICBTbyBpbnRlcmVzdGluZygpIHdvdWxkIHN0aWxsIHNheSBmYWxzZSBmb3Igc3VjaCBjb250ZXh0CisJICogbGluZXMgYnV0IHRoZXkgYXJlIHRyZWF0ZWQgYXMgImludGVyZXN0aW5nIiBpbiB0aGUgZW5kLgorCSAqLworCWkgPSBmaW5kX25leHQoc2xpbmUsIG1hcmssIDAsIGNudCwgMCk7CisJaWYgKGNudCA8IGkpCisJCXJldHVybiAwOworCisJd2hpbGUgKGkgPD0gY250KSB7CisJCXVuc2lnbmVkIGxvbmcgaiA9IChjb250ZXh0IDwgaSkgPyAoaSAtIGNvbnRleHQpIDogMDsKKwkJdW5zaWduZWQgbG9uZyBrOworCisJCS8qIFBhaW50IGEgZmV3IGxpbmVzIGJlZm9yZSB0aGUgZmlyc3QgaW50ZXJlc3RpbmcgbGluZS4gKi8KKwkJd2hpbGUgKGogPCBpKSB7CisJCQlpZiAoIShzbGluZVtqXS5mbGFnICYgbWFyaykpCisJCQkJc2xpbmVbal0uZmxhZyB8PSBub19wcmVfZGVsZXRlOworCQkJc2xpbmVbaisrXS5mbGFnIHw9IG1hcms7CisJCX0KKworCWFnYWluOgorCQkvKiB3ZSBrbm93IHVwIHRvIGkgaXMgdG8gYmUgaW5jbHVkZWQuICB3aGVyZSBkb2VzIHRoZQorCQkgKiBuZXh0IHVuaW50ZXJlc3Rpbmcgb25lIHN0YXJ0PworCQkgKi8KKwkJaiA9IGZpbmRfbmV4dChzbGluZSwgbWFyaywgaSwgY250LCAxKTsKKwkJaWYgKGNudCA8IGopCisJCQlicmVhazsgLyogdGhlIHJlc3QgYXJlIGFsbCBpbnRlcmVzdGluZyAqLworCisJCS8qIGxvb2thaGVhZCBjb250ZXh0IGxpbmVzICovCisJCWsgPSBmaW5kX25leHQoc2xpbmUsIG1hcmssIGosIGNudCwgMCk7CisJCWogPSBhZGp1c3RfaHVua190YWlsKHNsaW5lLCBhbGxfbWFzaywgaSwgaik7CisKKwkJaWYgKGsgPCBqICsgY29udGV4dCkgeworCQkJLyogayBpcyBpbnRlcmVzdGluZyBhbmQgW2osaykgYXJlIG5vdCwgYnV0CisJCQkgKiBwYWludCB0aGVtIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGdhcCBpcyBzbWFsbC4KKwkJCSAqLworCQkJd2hpbGUgKGogPCBrKQorCQkJCXNsaW5lW2orK10uZmxhZyB8PSBtYXJrOworCQkJaSA9IGs7CisJCQlnb3RvIGFnYWluOworCQl9CisKKwkJLyogaiBpcyB0aGUgZmlyc3QgdW5pbnRlcmVzdGluZyBsaW5lIGFuZCB0aGVyZSBpcworCQkgKiBubyBvdmVybGFwIGJleW9uZCBpdCB3aXRoaW4gY29udGV4dCBsaW5lcy4gIFBhaW50CisJCSAqIHRoZSB0cmFpbGluZyBlZGdlIGEgYml0LgorCQkgKi8KKwkJaSA9IGs7CisJCWsgPSAoaiArIGNvbnRleHQgPCBjbnQrMSkgPyBqICsgY29udGV4dCA6IGNudCsxOworCQl3aGlsZSAoaiA8IGspCisJCQlzbGluZVtqKytdLmZsYWcgfD0gbWFyazsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbWFrZV9odW5rcyhzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBsb25nIGNudCwKKwkJICAgICAgIGludCBudW1fcGFyZW50LCBpbnQgZGVuc2UpCit7CisJdW5zaWduZWQgbG9uZyBhbGxfbWFzayA9ICgxVUw8PG51bV9wYXJlbnQpIC0gMTsKKwl1bnNpZ25lZCBsb25nIG1hcmsgPSAoMVVMPDxudW1fcGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGk7CisJaW50IGhhc19pbnRlcmVzdGluZyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IGNudDsgaSsrKSB7CisJCWlmIChpbnRlcmVzdGluZygmc2xpbmVbaV0sIGFsbF9tYXNrKSkKKwkJCXNsaW5lW2ldLmZsYWcgfD0gbWFyazsKKwkJZWxzZQorCQkJc2xpbmVbaV0uZmxhZyAmPSB+bWFyazsKKwl9CisJaWYgKCFkZW5zZSkKKwkJcmV0dXJuIGdpdmVfY29udGV4dChzbGluZSwgY250LCBudW1fcGFyZW50KTsKKworCS8qIExvb2sgYXQgZWFjaCBodW5rLCBhbmQgaWYgd2UgaGF2ZSBjaGFuZ2VzIGZyb20gb25seSBvbmUKKwkgKiBwYXJlbnQsIG9yIHRoZSBjaGFuZ2VzIGFyZSB0aGUgc2FtZSBmcm9tIGFsbCBidXQgb25lCisJICogcGFyZW50LCBtYXJrIHRoYXQgdW5pbnRlcmVzdGluZy4KKwkgKi8KKwlpID0gMDsKKwl3aGlsZSAoaSA8PSBjbnQpIHsKKwkJdW5zaWduZWQgbG9uZyBqLCBodW5rX2JlZ2luLCBodW5rX2VuZDsKKwkJdW5zaWduZWQgbG9uZyBzYW1lX2RpZmY7CisJCXdoaWxlIChpIDw9IGNudCAmJiAhKHNsaW5lW2ldLmZsYWcgJiBtYXJrKSkKKwkJCWkrKzsKKwkJaWYgKGNudCA8IGkpCisJCQlicmVhazsgLyogTm8gbW9yZSBpbnRlcmVzdGluZyBodW5rcyAqLworCQlodW5rX2JlZ2luID0gaTsKKwkJZm9yIChqID0gaSArIDE7IGogPD0gY250OyBqKyspIHsKKwkJCWlmICghKHNsaW5lW2pdLmZsYWcgJiBtYXJrKSkgeworCQkJCS8qIExvb2sgYmV5b25kIHRoZSBlbmQgdG8gc2VlIGlmIHRoZXJlCisJCQkJICogaXMgYW4gaW50ZXJlc3RpbmcgbGluZSBhZnRlciB0aGlzCisJCQkJICogaHVuayB3aXRoaW4gY29udGV4dCBzcGFuLgorCQkJCSAqLworCQkJCXVuc2lnbmVkIGxvbmcgbGE7IC8qIGxvb2thaGVhZCAqLworCQkJCWludCBjb250aW4gPSAwOworCQkJCWxhID0gYWRqdXN0X2h1bmtfdGFpbChzbGluZSwgYWxsX21hc2ssCisJCQkJCQkgICAgIGh1bmtfYmVnaW4sIGopOworCQkJCWxhID0gKGxhICsgY29udGV4dCA8IGNudCArIDEpID8KKwkJCQkJKGxhICsgY29udGV4dCkgOiBjbnQgKyAxOworCQkJCXdoaWxlIChsYSAmJiBqIDw9IC0tbGEpIHsKKwkJCQkJaWYgKHNsaW5lW2xhXS5mbGFnICYgbWFyaykgeworCQkJCQkJY29udGluID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmICghY29udGluKQorCQkJCQlicmVhazsKKwkJCQlqID0gbGE7CisJCQl9CisJCX0KKwkJaHVua19lbmQgPSBqOworCisJCS8qIFtpLi5odW5rX2VuZCkgYXJlIGludGVyZXN0aW5nLiAgTm93IGlzIGl0IHJlYWxseQorCQkgKiBpbnRlcmVzdGluZz8gIFdlIGNoZWNrIGlmIHRoZXJlIGFyZSBvbmx5IHR3byB2ZXJzaW9ucworCQkgKiBhbmQgdGhlIHJlc3VsdCBtYXRjaGVzIG9uZSBvZiB0aGVtLiAgVGhhdCBpcywgd2UgbG9vaworCQkgKiBhdDoKKwkJICogICAoKykgbGluZSwgd2hpY2ggcmVjb3JkcyBsaW5lcyBhZGRlZCB0byB3aGljaCBwYXJlbnRzOworCQkgKiAgICAgICB0aGlzIGxpbmUgYXBwZWFycyBpbiB0aGUgcmVzdWx0LgorCQkgKiAgICgtKSBsaW5lLCB3aGljaCByZWNvcmRzIGZyb20gd2hhdCBwYXJlbnRzIHRoZSBsaW5lCisJCSAqICAgICAgIHdhcyByZW1vdmVkOyB0aGlzIGxpbmUgZG9lcyBub3QgYXBwZWFyIGluIHRoZSByZXN1bHQuCisJCSAqIHRoZW4gY2hlY2sgdGhlIHNldCBvZiBwYXJlbnRzIHRoZSByZXN1bHQgaGFzIGRpZmZlcmVuY2UKKwkJICogZnJvbSwgZnJvbSBhbGwgbGluZXMuICBJZiB0aGVyZSBhcmUgbGluZXMgdGhhdCBoYXMKKwkJICogZGlmZmVyZW50IHNldCBvZiBwYXJlbnRzIHRoYXQgdGhlIHJlc3VsdCBoYXMgZGlmZmVyZW5jZXMKKwkJICogZnJvbSwgdGhhdCBtZWFucyB3ZSBoYXZlIG1vcmUgdGhhbiB0d28gdmVyc2lvbnMuCisJCSAqCisJCSAqIEV2ZW4gd2hlbiB3ZSBoYXZlIG9ubHkgdHdvIHZlcnNpb25zLCBpZiB0aGUgcmVzdWx0IGRvZXMKKwkJICogbm90IG1hdGNoIGFueSBvZiB0aGUgcGFyZW50cywgdGhlIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkCisJCSAqIGludGVyZXN0aW5nLiAgSW4gc3VjaCBhIGNhc2UsIHdlIHdvdWxkIGhhdmUgYWxsICcrJyBsaW5lLgorCQkgKiBBZnRlciBwYXNzaW5nIHRoZSBhYm92ZSAidHdvIHZlcnNpb25zIiB0ZXN0LCB0aGF0IHdvdWxkCisJCSAqIGFwcGVhciBhcyAidGhlIHNhbWUgc2V0IG9mIHBhcmVudHMiIHRvIGJlICJhbGwgcGFyZW50cyIuCisJCSAqLworCQlzYW1lX2RpZmYgPSAwOworCQloYXNfaW50ZXJlc3RpbmcgPSAwOworCQlmb3IgKGogPSBpOyBqIDwgaHVua19lbmQgJiYgIWhhc19pbnRlcmVzdGluZzsgaisrKSB7CisJCQl1bnNpZ25lZCBsb25nIHRoaXNfZGlmZiA9IHNsaW5lW2pdLmZsYWcgJiBhbGxfbWFzazsKKwkJCXN0cnVjdCBsbGluZSAqbGwgPSBzbGluZVtqXS5sb3N0OworCQkJaWYgKHRoaXNfZGlmZikgeworCQkJCS8qIFRoaXMgaGFzIHNvbWUgY2hhbmdlcy4gIElzIGl0IHRoZQorCQkJCSAqIHNhbWUgYXMgb3RoZXJzPworCQkJCSAqLworCQkJCWlmICghc2FtZV9kaWZmKQorCQkJCQlzYW1lX2RpZmYgPSB0aGlzX2RpZmY7CisJCQkJZWxzZSBpZiAoc2FtZV9kaWZmICE9IHRoaXNfZGlmZikgeworCQkJCQloYXNfaW50ZXJlc3RpbmcgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQl3aGlsZSAobGwgJiYgIWhhc19pbnRlcmVzdGluZykgeworCQkJCS8qIExvc3QgdGhpcyBsaW5lIGZyb20gdGhlc2UgcGFyZW50czsKKwkJCQkgKiB3aG8gYXJlIHRoZXk/ICBBcmUgdGhleSB0aGUgc2FtZT8KKwkJCQkgKi8KKwkJCQl0aGlzX2RpZmYgPSBsbC0+cGFyZW50X21hcDsKKwkJCQlpZiAoIXNhbWVfZGlmZikKKwkJCQkJc2FtZV9kaWZmID0gdGhpc19kaWZmOworCQkJCWVsc2UgaWYgKHNhbWVfZGlmZiAhPSB0aGlzX2RpZmYpIHsKKwkJCQkJaGFzX2ludGVyZXN0aW5nID0gMTsKKwkJCQl9CisJCQkJbGwgPSBsbC0+bmV4dDsKKwkJCX0KKwkJfQorCisJCWlmICghaGFzX2ludGVyZXN0aW5nICYmIHNhbWVfZGlmZiAhPSBhbGxfbWFzaykgeworCQkJLyogVGhpcyBodW5rIGlzIG5vdCB0aGF0IGludGVyZXN0aW5nIGFmdGVyIGFsbCAqLworCQkJZm9yIChqID0gaHVua19iZWdpbjsgaiA8IGh1bmtfZW5kOyBqKyspCisJCQkJc2xpbmVbal0uZmxhZyAmPSB+bWFyazsKKwkJfQorCQlpID0gaHVua19lbmQ7CisJfQorCisJaGFzX2ludGVyZXN0aW5nID0gZ2l2ZV9jb250ZXh0KHNsaW5lLCBjbnQsIG51bV9wYXJlbnQpOworCXJldHVybiBoYXNfaW50ZXJlc3Rpbmc7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcGFyZW50X2xubyhzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCB1bnNpZ25lZCBsb25nIGwwLCB1bnNpZ25lZCBsb25nIGwxLCBpbnQgbiwgdW5zaWduZWQgbG9uZyBudWxsX2NvbnRleHQpCit7CisJbDAgPSBzbGluZVtsMF0ucF9sbm9bbl07CisJbDEgPSBzbGluZVtsMV0ucF9sbm9bbl07CisJcHJpbnRmKCIgLSVsdSwlbHUiLCBsMCwgbDEtbDAtbnVsbF9jb250ZXh0KTsKK30KKworc3RhdGljIGludCBodW5rX2NvbW1lbnRfbGluZShjb25zdCBjaGFyICpib2wpCit7CisJaW50IGNoOworCisJaWYgKCFib2wpCisJCXJldHVybiAwOworCWNoID0gKmJvbCAmIDB4ZmY7CisJcmV0dXJuIChpc2FscGhhKGNoKSB8fCBjaCA9PSAnXycgfHwgY2ggPT0gJyQnKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19saW5lX3RvX2VvbChjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLCBjb25zdCBjaGFyICpyZXNldCkKK3sKKwlpbnQgc2F3X2NyX2F0X2VvbCA9IDA7CisJaWYgKGxlbiA8IDApCisJCWxlbiA9IHN0cmxlbihsaW5lKTsKKwlzYXdfY3JfYXRfZW9sID0gKGxlbiAmJiBsaW5lW2xlbi0xXSA9PSAnXHInKTsKKworCXByaW50ZigiJS4qcyVzJXNcbiIsIGxlbiAtIHNhd19jcl9hdF9lb2wsIGxpbmUsCisJICAgICAgIHJlc2V0LAorCSAgICAgICBzYXdfY3JfYXRfZW9sID8gIlxyIiA6ICIiKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9zbGluZShzdHJ1Y3Qgc2xpbmUgKnNsaW5lLCBjb25zdCBjaGFyICpsaW5lX3ByZWZpeCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgY250LCBpbnQgbnVtX3BhcmVudCwKKwkJICAgICAgIGludCB1c2VfY29sb3IsIGludCByZXN1bHRfZGVsZXRlZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1hcmsgPSAoMVVMPDxudW1fcGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIG5vX3ByZV9kZWxldGUgPSAoMlVMPDxudW1fcGFyZW50KTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGxubyA9IDA7CisJY29uc3QgY2hhciAqY19mcmFnID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX0ZSQUdJTkZPKTsKKwljb25zdCBjaGFyICpjX2Z1bmMgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfRlVOQ0lORk8pOworCWNvbnN0IGNoYXIgKmNfbmV3ID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX0ZJTEVfTkVXKTsKKwljb25zdCBjaGFyICpjX29sZCA9IGRpZmZfZ2V0X2NvbG9yKHVzZV9jb2xvciwgRElGRl9GSUxFX09MRCk7CisJY29uc3QgY2hhciAqY19jb250ZXh0ID0gZGlmZl9nZXRfY29sb3IodXNlX2NvbG9yLCBESUZGX0NPTlRFWFQpOworCWNvbnN0IGNoYXIgKmNfcmVzZXQgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfUkVTRVQpOworCisJaWYgKHJlc3VsdF9kZWxldGVkKQorCQlyZXR1cm47IC8qIHJlc3VsdCBkZWxldGVkICovCisKKwl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBsb25nIGh1bmtfZW5kOworCQl1bnNpZ25lZCBsb25nIHJsaW5lczsKKwkJY29uc3QgY2hhciAqaHVua19jb21tZW50ID0gTlVMTDsKKwkJdW5zaWduZWQgbG9uZyBudWxsX2NvbnRleHQgPSAwOworCisJCXdoaWxlIChsbm8gPD0gY250ICYmICEoc2xpbmVbbG5vXS5mbGFnICYgbWFyaykpIHsKKwkJCWlmIChodW5rX2NvbW1lbnRfbGluZShzbGluZVtsbm9dLmJvbCkpCisJCQkJaHVua19jb21tZW50ID0gc2xpbmVbbG5vXS5ib2w7CisJCQlsbm8rKzsKKwkJfQorCQlpZiAoY250IDwgbG5vKQorCQkJYnJlYWs7CisJCWVsc2UgeworCQkJZm9yIChodW5rX2VuZCA9IGxubyArIDE7IGh1bmtfZW5kIDw9IGNudDsgaHVua19lbmQrKykKKwkJCQlpZiAoIShzbGluZVtodW5rX2VuZF0uZmxhZyAmIG1hcmspKQorCQkJCQlicmVhazsKKwkJfQorCQlybGluZXMgPSBodW5rX2VuZCAtIGxubzsKKwkJaWYgKGNudCA8IGh1bmtfZW5kKQorCQkJcmxpbmVzLS07IC8qIHBvaW50aW5nIGF0IHRoZSBsYXN0IGRlbGV0ZSBodW5rICovCisKKwkJaWYgKCFjb250ZXh0KSB7CisJCQkvKgorCQkJICogRXZlbiB3aGVuIHJ1bm5pbmcgd2l0aCAtLXVuaWZpZWQ9MCwgYWxsCisJCQkgKiBsaW5lcyBpbiB0aGUgaHVuayBuZWVkcyB0byBiZSBwcm9jZXNzZWQgaW4KKwkJCSAqIHRoZSBsb29wIGJlbG93IGluIG9yZGVyIHRvIHNob3cgdGhlCisJCQkgKiBkZWxldGlvbiByZWNvcmRlZCBpbiBsb3N0X2hlYWQuICBIb3dldmVyLAorCQkJICogd2UgZG8gbm90IHdhbnQgdG8gc2hvdyB0aGUgcmVzdWx0aW5nIGxpbmUKKwkJCSAqIHdpdGggYWxsIGJsYW5rIGNvbnRleHQgbWFya2VycyBpbiBzdWNoIGEKKwkJCSAqIGNhc2UuICBDb21wZW5zYXRlLgorCQkJICovCisJCQl1bnNpZ25lZCBsb25nIGo7CisJCQlmb3IgKGogPSBsbm87IGogPCBodW5rX2VuZDsgaisrKQorCQkJCWlmICghKHNsaW5lW2pdLmZsYWcgJiAobWFyay0xKSkpCisJCQkJCW51bGxfY29udGV4dCsrOworCQkJcmxpbmVzIC09IG51bGxfY29udGV4dDsKKwkJfQorCisJCXByaW50ZigiJXMlcyIsIGxpbmVfcHJlZml4LCBjX2ZyYWcpOworCQlmb3IgKGkgPSAwOyBpIDw9IG51bV9wYXJlbnQ7IGkrKykgcHV0Y2hhcihjb21iaW5lX21hcmtlcik7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspCisJCQlzaG93X3BhcmVudF9sbm8oc2xpbmUsIGxubywgaHVua19lbmQsIGksIG51bGxfY29udGV4dCk7CisJCXByaW50ZigiICslbHUsJWx1ICIsIGxubysxLCBybGluZXMpOworCQlmb3IgKGkgPSAwOyBpIDw9IG51bV9wYXJlbnQ7IGkrKykgcHV0Y2hhcihjb21iaW5lX21hcmtlcik7CisKKwkJaWYgKGh1bmtfY29tbWVudCkgeworCQkJaW50IGNvbW1lbnRfZW5kID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCA0MDsgaSsrKSB7CisJCQkJaW50IGNoID0gaHVua19jb21tZW50W2ldICYgMHhmZjsKKwkJCQlpZiAoIWNoIHx8IGNoID09ICdcbicpCisJCQkJCWJyZWFrOworCQkJCWlmICghaXNzcGFjZShjaCkpCisJCQkJICAgIGNvbW1lbnRfZW5kID0gaTsKKwkJCX0KKwkJCWlmIChjb21tZW50X2VuZCkKKwkJCQlwcmludGYoIiVzJXMgJXMlcyIsIGNfcmVzZXQsCisJCQkJCQkgICAgY19jb250ZXh0LCBjX3Jlc2V0LAorCQkJCQkJICAgIGNfZnVuYyk7CisJCQlmb3IgKGkgPSAwOyBpIDwgY29tbWVudF9lbmQ7IGkrKykKKwkJCQlwdXRjaGFyKGh1bmtfY29tbWVudFtpXSk7CisJCX0KKworCQlwcmludGYoIiVzXG4iLCBjX3Jlc2V0KTsKKwkJd2hpbGUgKGxubyA8IGh1bmtfZW5kKSB7CisJCQlzdHJ1Y3QgbGxpbmUgKmxsOworCQkJaW50IGo7CisJCQl1bnNpZ25lZCBsb25nIHBfbWFzazsKKwkJCXN0cnVjdCBzbGluZSAqc2wgPSAmc2xpbmVbbG5vKytdOworCQkJbGwgPSAoc2wtPmZsYWcgJiBub19wcmVfZGVsZXRlKSA/IE5VTEwgOiBzbC0+bG9zdDsKKwkJCXdoaWxlIChsbCkgeworCQkJCXByaW50ZigiJXMlcyIsIGxpbmVfcHJlZml4LCBjX29sZCk7CisJCQkJZm9yIChqID0gMDsgaiA8IG51bV9wYXJlbnQ7IGorKykgeworCQkJCQlpZiAobGwtPnBhcmVudF9tYXAgJiAoMVVMPDxqKSkKKwkJCQkJCXB1dGNoYXIoJy0nKTsKKwkJCQkJZWxzZQorCQkJCQkJcHV0Y2hhcignICcpOworCQkJCX0KKwkJCQlzaG93X2xpbmVfdG9fZW9sKGxsLT5saW5lLCAtMSwgY19yZXNldCk7CisJCQkJbGwgPSBsbC0+bmV4dDsKKwkJCX0KKwkJCWlmIChjbnQgPCBsbm8pCisJCQkJYnJlYWs7CisJCQlwX21hc2sgPSAxOworCQkJZnB1dHMobGluZV9wcmVmaXgsIHN0ZG91dCk7CisJCQlpZiAoIShzbC0+ZmxhZyAmIChtYXJrLTEpKSkgeworCQkJCS8qCisJCQkJICogVGhpcyBzbGluZSB3YXMgaGVyZSB0byBoYW5nIHRoZQorCQkJCSAqIGxvc3QgbGluZXMgaW4gZnJvbnQgb2YgaXQuCisJCQkJICovCisJCQkJaWYgKCFjb250ZXh0KQorCQkJCQljb250aW51ZTsKKwkJCQlmcHV0cyhjX2NvbnRleHQsIHN0ZG91dCk7CisJCQl9CisJCQllbHNlCisJCQkJZnB1dHMoY19uZXcsIHN0ZG91dCk7CisJCQlmb3IgKGogPSAwOyBqIDwgbnVtX3BhcmVudDsgaisrKSB7CisJCQkJaWYgKHBfbWFzayAmIHNsLT5mbGFnKQorCQkJCQlwdXRjaGFyKCcrJyk7CisJCQkJZWxzZQorCQkJCQlwdXRjaGFyKCcgJyk7CisJCQkJcF9tYXNrIDw8PSAxOworCQkJfQorCQkJc2hvd19saW5lX3RvX2VvbChzbC0+Ym9sLCBzbC0+bGVuLCBjX3Jlc2V0KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcmV1c2VfY29tYmluZV9kaWZmKHN0cnVjdCBzbGluZSAqc2xpbmUsIHVuc2lnbmVkIGxvbmcgY250LAorCQkJICAgICAgIGludCBpLCBpbnQgaikKK3sKKwkvKiBXZSBoYXZlIGFscmVhZHkgZXhhbWluZWQgcGFyZW50IGogYW5kIHdlIGtub3cgcGFyZW50IGkKKwkgKiBhbmQgcGFyZW50IGogYXJlIHRoZSBzYW1lLCBzbyByZXVzZSB0aGUgY29tYmluZWQgcmVzdWx0CisJICogb2YgcGFyZW50IGogZm9yIHBhcmVudCBpLgorCSAqLworCXVuc2lnbmVkIGxvbmcgbG5vLCBpbWFzaywgam1hc2s7CisJaW1hc2sgPSAoMVVMPDxpKTsKKwlqbWFzayA9ICgxVUw8PGopOworCisJZm9yIChsbm8gPSAwOyBsbm8gPD0gY250OyBsbm8rKykgeworCQlzdHJ1Y3QgbGxpbmUgKmxsID0gc2xpbmUtPmxvc3Q7CisJCXNsaW5lLT5wX2xub1tpXSA9IHNsaW5lLT5wX2xub1tqXTsKKwkJd2hpbGUgKGxsKSB7CisJCQlpZiAobGwtPnBhcmVudF9tYXAgJiBqbWFzaykKKwkJCQlsbC0+cGFyZW50X21hcCB8PSBpbWFzazsKKwkJCWxsID0gbGwtPm5leHQ7CisJCX0KKwkJaWYgKHNsaW5lLT5mbGFnICYgam1hc2spCisJCQlzbGluZS0+ZmxhZyB8PSBpbWFzazsKKwkJc2xpbmUrKzsKKwl9CisJLyogdGhlIG92ZXJhbGwgc2l6ZSBvZiB0aGUgZmlsZSAoc2xpbmVbY250XSkgKi8KKwlzbGluZS0+cF9sbm9baV0gPSBzbGluZS0+cF9sbm9bal07Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfcXVvdGVkX3BhdGgoY29uc3QgY2hhciAqaGVhZCwKKwkJCSAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICBjb25zdCBjaGFyICpsaW5lX3ByZWZpeCwKKwkJCSAgICAgY29uc3QgY2hhciAqY19tZXRhLCBjb25zdCBjaGFyICpjX3Jlc2V0KQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbGluZV9wcmVmaXgpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgY19tZXRhKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIGhlYWQpOworCXF1b3RlX3R3b19jX3N0eWxlKCZidWYsIHByZWZpeCwgcGF0aCwgMCk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCBjX3Jlc2V0KTsKKwlwdXRzKGJ1Zi5idWYpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2NvbWJpbmVkX2hlYWRlcihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmVsZW0sCisJCQkJIGludCBudW1fcGFyZW50LAorCQkJCSBpbnQgZGVuc2UsCisJCQkJIHN0cnVjdCByZXZfaW5mbyAqcmV2LAorCQkJCSBjb25zdCBjaGFyICpsaW5lX3ByZWZpeCwKKwkJCQkgaW50IG1vZGVfZGlmZmVycywKKwkJCQkgaW50IHNob3dfZmlsZV9oZWFkZXIpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gJnJldi0+ZGlmZm9wdDsKKwlpbnQgYWJicmV2ID0gRElGRl9PUFRfVFNUKG9wdCwgRlVMTF9JTkRFWCkgPyBHSVRfU0hBMV9IRVhTWiA6IERFRkFVTFRfQUJCUkVWOworCWNvbnN0IGNoYXIgKmFfcHJlZml4ID0gb3B0LT5hX3ByZWZpeCA/IG9wdC0+YV9wcmVmaXggOiAiYS8iOworCWNvbnN0IGNoYXIgKmJfcHJlZml4ID0gb3B0LT5iX3ByZWZpeCA/IG9wdC0+Yl9wcmVmaXggOiAiYi8iOworCWNvbnN0IGNoYXIgKmNfbWV0YSA9IGRpZmZfZ2V0X2NvbG9yX29wdChvcHQsIERJRkZfTUVUQUlORk8pOworCWNvbnN0IGNoYXIgKmNfcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQob3B0LCBESUZGX1JFU0VUKTsKKwljb25zdCBjaGFyICphYmI7CisJaW50IGFkZGVkID0gMDsKKwlpbnQgZGVsZXRlZCA9IDA7CisJaW50IGk7CisKKwlpZiAocmV2LT5sb2dpbmZvICYmICFyZXYtPm5vX2NvbW1pdF9pZCkKKwkJc2hvd19sb2cocmV2KTsKKworCWR1bXBfcXVvdGVkX3BhdGgoZGVuc2UgPyAiZGlmZiAtLWNjICIgOiAiZGlmZiAtLWNvbWJpbmVkICIsCisJCQkgIiIsIGVsZW0tPnBhdGgsIGxpbmVfcHJlZml4LCBjX21ldGEsIGNfcmVzZXQpOworCXByaW50ZigiJXMlc2luZGV4ICIsIGxpbmVfcHJlZml4LCBjX21ldGEpOworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspIHsKKwkJYWJiID0gZmluZF91bmlxdWVfYWJicmV2KGVsZW0tPnBhcmVudFtpXS5vaWQuaGFzaCwKKwkJCQkJIGFiYnJldik7CisJCXByaW50ZigiJXMlcyIsIGkgPyAiLCIgOiAiIiwgYWJiKTsKKwl9CisJYWJiID0gZmluZF91bmlxdWVfYWJicmV2KGVsZW0tPm9pZC5oYXNoLCBhYmJyZXYpOworCXByaW50ZigiLi4lcyVzXG4iLCBhYmIsIGNfcmVzZXQpOworCisJaWYgKG1vZGVfZGlmZmVycykgeworCQlkZWxldGVkID0gIWVsZW0tPm1vZGU7CisKKwkJLyogV2Ugc2F5IGl0IHdhcyBhZGRlZCBpZiBub2JvZHkgaGFkIGl0ICovCisJCWFkZGVkID0gIWRlbGV0ZWQ7CisJCWZvciAoaSA9IDA7IGFkZGVkICYmIGkgPCBudW1fcGFyZW50OyBpKyspCisJCQlpZiAoZWxlbS0+cGFyZW50W2ldLnN0YXR1cyAhPQorCQkJICAgIERJRkZfU1RBVFVTX0FEREVEKQorCQkJCWFkZGVkID0gMDsKKwkJaWYgKGFkZGVkKQorCQkJcHJpbnRmKCIlcyVzbmV3IGZpbGUgbW9kZSAlMDZvIiwKKwkJCSAgICAgICBsaW5lX3ByZWZpeCwgY19tZXRhLCBlbGVtLT5tb2RlKTsKKwkJZWxzZSB7CisJCQlpZiAoZGVsZXRlZCkKKwkJCQlwcmludGYoIiVzJXNkZWxldGVkIGZpbGUgIiwKKwkJCQkgICAgICAgbGluZV9wcmVmaXgsIGNfbWV0YSk7CisJCQlwcmludGYoIm1vZGUgIik7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKSB7CisJCQkJcHJpbnRmKCIlcyUwNm8iLCBpID8gIiwiIDogIiIsCisJCQkJICAgICAgIGVsZW0tPnBhcmVudFtpXS5tb2RlKTsKKwkJCX0KKwkJCWlmIChlbGVtLT5tb2RlKQorCQkJCXByaW50ZigiLi4lMDZvIiwgZWxlbS0+bW9kZSk7CisJCX0KKwkJcHJpbnRmKCIlc1xuIiwgY19yZXNldCk7CisJfQorCisJaWYgKCFzaG93X2ZpbGVfaGVhZGVyKQorCQlyZXR1cm47CisKKwlpZiAoYWRkZWQpCisJCWR1bXBfcXVvdGVkX3BhdGgoIi0tLSAiLCAiIiwgIi9kZXYvbnVsbCIsCisJCQkJIGxpbmVfcHJlZml4LCBjX21ldGEsIGNfcmVzZXQpOworCWVsc2UKKwkJZHVtcF9xdW90ZWRfcGF0aCgiLS0tICIsIGFfcHJlZml4LCBlbGVtLT5wYXRoLAorCQkJCSBsaW5lX3ByZWZpeCwgY19tZXRhLCBjX3Jlc2V0KTsKKwlpZiAoZGVsZXRlZCkKKwkJZHVtcF9xdW90ZWRfcGF0aCgiKysrICIsICIiLCAiL2Rldi9udWxsIiwKKwkJCQkgbGluZV9wcmVmaXgsIGNfbWV0YSwgY19yZXNldCk7CisJZWxzZQorCQlkdW1wX3F1b3RlZF9wYXRoKCIrKysgIiwgYl9wcmVmaXgsIGVsZW0tPnBhdGgsCisJCQkJIGxpbmVfcHJlZml4LCBjX21ldGEsIGNfcmVzZXQpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3BhdGNoX2RpZmYoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICplbGVtLCBpbnQgbnVtX3BhcmVudCwKKwkJCSAgICBpbnQgZGVuc2UsIGludCB3b3JraW5nX3RyZWVfZmlsZSwKKwkJCSAgICBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSAmcmV2LT5kaWZmb3B0OworCXVuc2lnbmVkIGxvbmcgcmVzdWx0X3NpemUsIGNudCwgbG5vOworCWludCByZXN1bHRfZGVsZXRlZCA9IDA7CisJY2hhciAqcmVzdWx0LCAqY3A7CisJc3RydWN0IHNsaW5lICpzbGluZTsgLyogc3Vydml2ZWQgbGluZXMgKi8KKwlpbnQgbW9kZV9kaWZmZXJzID0gMDsKKwlpbnQgaSwgc2hvd19odW5rczsKKwltbWZpbGVfdCByZXN1bHRfZmlsZTsKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZjsKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udiA9IE5VTEw7CisJaW50IGlzX2JpbmFyeTsKKwljb25zdCBjaGFyICpsaW5lX3ByZWZpeCA9IGRpZmZfbGluZV9wcmVmaXgob3B0KTsKKworCWNvbnRleHQgPSBvcHQtPmNvbnRleHQ7CisJdXNlcmRpZmYgPSB1c2VyZGlmZl9maW5kX2J5X3BhdGgoZWxlbS0+cGF0aCk7CisJaWYgKCF1c2VyZGlmZikKKwkJdXNlcmRpZmYgPSB1c2VyZGlmZl9maW5kX2J5X25hbWUoImRlZmF1bHQiKTsKKwlpZiAoRElGRl9PUFRfVFNUKG9wdCwgQUxMT1dfVEVYVENPTlYpKQorCQl0ZXh0Y29udiA9IHVzZXJkaWZmX2dldF90ZXh0Y29udih1c2VyZGlmZik7CisKKwkvKiBSZWFkIHRoZSByZXN1bHQgb2YgbWVyZ2UgZmlyc3QgKi8KKwlpZiAoIXdvcmtpbmdfdHJlZV9maWxlKQorCQlyZXN1bHQgPSBncmFiX2Jsb2IoJmVsZW0tPm9pZCwgZWxlbS0+bW9kZSwgJnJlc3VsdF9zaXplLAorCQkJCSAgIHRleHRjb252LCBlbGVtLT5wYXRoKTsKKwllbHNlIHsKKwkJLyogVXNlZCBieSBkaWZmLXRyZWUgdG8gcmVhZCBmcm9tIHRoZSB3b3JraW5nIHRyZWUgKi8KKwkJc3RydWN0IHN0YXQgc3Q7CisJCWludCBmZCA9IC0xOworCisJCWlmIChsc3RhdChlbGVtLT5wYXRoLCAmc3QpIDwgMCkKKwkJCWdvdG8gZGVsZXRlZF9maWxlOworCisJCWlmIChTX0lTTE5LKHN0LnN0X21vZGUpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZidWYsIGVsZW0tPnBhdGgsIHN0LnN0X3NpemUpIDwgMCkgeworCQkJCWVycm9yKCJyZWFkbGluayglcyk6ICVzIiwgZWxlbS0+cGF0aCwKKwkJCQkgICAgICBzdHJlcnJvcihlcnJubykpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCXJlc3VsdF9zaXplID0gYnVmLmxlbjsKKwkJCXJlc3VsdCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisJCQllbGVtLT5tb2RlID0gY2Fub25fbW9kZShzdC5zdF9tb2RlKTsKKwkJfSBlbHNlIGlmIChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKwkJCWlmIChyZXNvbHZlX2dpdGxpbmtfcmVmKGVsZW0tPnBhdGgsICJIRUFEIiwgb2lkLmhhc2gpIDwgMCkKKwkJCQlyZXN1bHQgPSBncmFiX2Jsb2IoJmVsZW0tPm9pZCwgZWxlbS0+bW9kZSwKKwkJCQkJCSAgICZyZXN1bHRfc2l6ZSwgTlVMTCwgTlVMTCk7CisJCQllbHNlCisJCQkJcmVzdWx0ID0gZ3JhYl9ibG9iKCZvaWQsIGVsZW0tPm1vZGUsCisJCQkJCQkgICAmcmVzdWx0X3NpemUsIE5VTEwsIE5VTEwpOworCQl9IGVsc2UgaWYgKHRleHRjb252KSB7CisJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGYgPSBhbGxvY19maWxlc3BlYyhlbGVtLT5wYXRoKTsKKwkJCWZpbGxfZmlsZXNwZWMoZGYsIG51bGxfc2hhMSwgMCwgc3Quc3RfbW9kZSk7CisJCQlyZXN1bHRfc2l6ZSA9IGZpbGxfdGV4dGNvbnYodGV4dGNvbnYsIGRmLCAmcmVzdWx0KTsKKwkJCWZyZWVfZmlsZXNwZWMoZGYpOworCQl9IGVsc2UgaWYgKDAgPD0gKGZkID0gb3BlbihlbGVtLT5wYXRoLCBPX1JET05MWSkpKSB7CisJCQlzaXplX3QgbGVuID0geHNpemVfdChzdC5zdF9zaXplKTsKKwkJCXNzaXplX3QgZG9uZTsKKwkJCWludCBpc19maWxlLCBpOworCisJCQllbGVtLT5tb2RlID0gY2Fub25fbW9kZShzdC5zdF9tb2RlKTsKKwkJCS8qIGlmIHN5bWxpbmtzIGRvbid0IHdvcmssIGFzc3VtZSBzeW1saW5rIGlmIGFsbCBwYXJlbnRzCisJCQkgKiBhcmUgc3ltbGlua3MKKwkJCSAqLworCQkJaXNfZmlsZSA9IGhhc19zeW1saW5rczsKKwkJCWZvciAoaSA9IDA7ICFpc19maWxlICYmIGkgPCBudW1fcGFyZW50OyBpKyspCisJCQkJaXNfZmlsZSA9ICFTX0lTTE5LKGVsZW0tPnBhcmVudFtpXS5tb2RlKTsKKwkJCWlmICghaXNfZmlsZSkKKwkJCQllbGVtLT5tb2RlID0gY2Fub25fbW9kZShTX0lGTE5LKTsKKworCQkJcmVzdWx0X3NpemUgPSBsZW47CisJCQlyZXN1bHQgPSB4bWFsbG9jKGxlbiArIDEpOworCisJCQlkb25lID0gcmVhZF9pbl9mdWxsKGZkLCByZXN1bHQsIGxlbik7CisJCQlpZiAoZG9uZSA8IDApCisJCQkJZGllX2Vycm5vKCJyZWFkIGVycm9yICclcyciLCBlbGVtLT5wYXRoKTsKKwkJCWVsc2UgaWYgKGRvbmUgPCBsZW4pCisJCQkJZGllKCJlYXJseSBFT0YgJyVzJyIsIGVsZW0tPnBhdGgpOworCisJCQlyZXN1bHRbbGVuXSA9IDA7CisKKwkJCS8qIElmIG5vdCBhIGZha2Ugc3ltbGluaywgYXBwbHkgZmlsdGVycywgZS5nLiBhdXRvY3JsZiAqLworCQkJaWYgKGlzX2ZpbGUpIHsKKwkJCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJCQkJaWYgKGNvbnZlcnRfdG9fZ2l0KGVsZW0tPnBhdGgsIHJlc3VsdCwgbGVuLCAmYnVmLCBzYWZlX2NybGYpKSB7CisJCQkJCWZyZWUocmVzdWx0KTsKKwkJCQkJcmVzdWx0ID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmbGVuKTsKKwkJCQkJcmVzdWx0X3NpemUgPSBsZW47CisJCQkJfQorCQkJfQorCQl9CisJCWVsc2UgeworCQlkZWxldGVkX2ZpbGU6CisJCQlyZXN1bHRfZGVsZXRlZCA9IDE7CisJCQlyZXN1bHRfc2l6ZSA9IDA7CisJCQllbGVtLT5tb2RlID0gMDsKKwkJCXJlc3VsdCA9IHhjYWxsb2MoMSwgMSk7CisJCX0KKworCQlpZiAoMCA8PSBmZCkKKwkJCWNsb3NlKGZkKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKSB7CisJCWlmIChlbGVtLT5wYXJlbnRbaV0ubW9kZSAhPSBlbGVtLT5tb2RlKSB7CisJCQltb2RlX2RpZmZlcnMgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAodGV4dGNvbnYpCisJCWlzX2JpbmFyeSA9IDA7CisJZWxzZSBpZiAodXNlcmRpZmYtPmJpbmFyeSAhPSAtMSkKKwkJaXNfYmluYXJ5ID0gdXNlcmRpZmYtPmJpbmFyeTsKKwllbHNlIHsKKwkJaXNfYmluYXJ5ID0gYnVmZmVyX2lzX2JpbmFyeShyZXN1bHQsIHJlc3VsdF9zaXplKTsKKwkJZm9yIChpID0gMDsgIWlzX2JpbmFyeSAmJiBpIDwgbnVtX3BhcmVudDsgaSsrKSB7CisJCQljaGFyICpidWY7CisJCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCQlidWYgPSBncmFiX2Jsb2IoJmVsZW0tPnBhcmVudFtpXS5vaWQsCisJCQkJCWVsZW0tPnBhcmVudFtpXS5tb2RlLAorCQkJCQkmc2l6ZSwgTlVMTCwgTlVMTCk7CisJCQlpZiAoYnVmZmVyX2lzX2JpbmFyeShidWYsIHNpemUpKQorCQkJCWlzX2JpbmFyeSA9IDE7CisJCQlmcmVlKGJ1Zik7CisJCX0KKwl9CisJaWYgKGlzX2JpbmFyeSkgeworCQlzaG93X2NvbWJpbmVkX2hlYWRlcihlbGVtLCBudW1fcGFyZW50LCBkZW5zZSwgcmV2LAorCQkJCSAgICAgbGluZV9wcmVmaXgsIG1vZGVfZGlmZmVycywgMCk7CisJCXByaW50ZigiQmluYXJ5IGZpbGVzIGRpZmZlclxuIik7CisJCWZyZWUocmVzdWx0KTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoY250ID0gMCwgY3AgPSByZXN1bHQ7IGNwIDwgcmVzdWx0ICsgcmVzdWx0X3NpemU7IGNwKyspIHsKKwkJaWYgKCpjcCA9PSAnXG4nKQorCQkJY250Kys7CisJfQorCWlmIChyZXN1bHRfc2l6ZSAmJiByZXN1bHRbcmVzdWx0X3NpemUtMV0gIT0gJ1xuJykKKwkJY250Kys7IC8qIGluY29tcGxldGUgbGluZSAqLworCisJc2xpbmUgPSB4Y2FsbG9jKGNudCsyLCBzaXplb2YoKnNsaW5lKSk7CisJc2xpbmVbMF0uYm9sID0gcmVzdWx0OworCWZvciAobG5vID0gMCwgY3AgPSByZXN1bHQ7IGNwIDwgcmVzdWx0ICsgcmVzdWx0X3NpemU7IGNwKyspIHsKKwkJaWYgKCpjcCA9PSAnXG4nKSB7CisJCQlzbGluZVtsbm9dLmxlbiA9IGNwIC0gc2xpbmVbbG5vXS5ib2w7CisJCQlsbm8rKzsKKwkJCWlmIChsbm8gPCBjbnQpCisJCQkJc2xpbmVbbG5vXS5ib2wgPSBjcCArIDE7CisJCX0KKwl9CisJaWYgKHJlc3VsdF9zaXplICYmIHJlc3VsdFtyZXN1bHRfc2l6ZS0xXSAhPSAnXG4nKQorCQlzbGluZVtjbnQtMV0ubGVuID0gcmVzdWx0X3NpemUgLSAoc2xpbmVbY250LTFdLmJvbCAtIHJlc3VsdCk7CisKKwlyZXN1bHRfZmlsZS5wdHIgPSByZXN1bHQ7CisJcmVzdWx0X2ZpbGUuc2l6ZSA9IHJlc3VsdF9zaXplOworCisJLyogRXZlbiBwX2xub1tjbnQrMV0gaXMgdmFsaWQgLS0gdGhhdCBpcyBmb3IgdGhlIGVuZCBsaW5lIG51bWJlcgorCSAqIGZvciBkZWxldGlvbiBodW5rIGF0IHRoZSBlbmQuCisJICovCisJc2xpbmVbMF0ucF9sbm8gPSB4Y2FsbG9jKChjbnQrMikgKiBudW1fcGFyZW50LCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWZvciAobG5vID0gMDsgbG5vIDw9IGNudDsgbG5vKyspCisJCXNsaW5lW2xubysxXS5wX2xubyA9IHNsaW5lW2xub10ucF9sbm8gKyBudW1fcGFyZW50OworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQlpbnQgajsKKwkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworCQkJaWYgKCFvaWRjbXAoJmVsZW0tPnBhcmVudFtpXS5vaWQsCisJCQkJICAgICAmZWxlbS0+cGFyZW50W2pdLm9pZCkpIHsKKwkJCQlyZXVzZV9jb21iaW5lX2RpZmYoc2xpbmUsIGNudCwgaSwgaik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkgPD0gaikKKwkJCWNvbWJpbmVfZGlmZigmZWxlbS0+cGFyZW50W2ldLm9pZCwKKwkJCQkgICAgIGVsZW0tPnBhcmVudFtpXS5tb2RlLAorCQkJCSAgICAgJnJlc3VsdF9maWxlLCBzbGluZSwKKwkJCQkgICAgIGNudCwgaSwgbnVtX3BhcmVudCwgcmVzdWx0X2RlbGV0ZWQsCisJCQkJICAgICB0ZXh0Y29udiwgZWxlbS0+cGF0aCwgb3B0LT54ZGxfb3B0cyk7CisJfQorCisJc2hvd19odW5rcyA9IG1ha2VfaHVua3Moc2xpbmUsIGNudCwgbnVtX3BhcmVudCwgZGVuc2UpOworCisJaWYgKHNob3dfaHVua3MgfHwgbW9kZV9kaWZmZXJzIHx8IHdvcmtpbmdfdHJlZV9maWxlKSB7CisJCXNob3dfY29tYmluZWRfaGVhZGVyKGVsZW0sIG51bV9wYXJlbnQsIGRlbnNlLCByZXYsCisJCQkJICAgICBsaW5lX3ByZWZpeCwgbW9kZV9kaWZmZXJzLCAxKTsKKwkJZHVtcF9zbGluZShzbGluZSwgbGluZV9wcmVmaXgsIGNudCwgbnVtX3BhcmVudCwKKwkJCSAgIG9wdC0+dXNlX2NvbG9yLCByZXN1bHRfZGVsZXRlZCk7CisJfQorCWZyZWUocmVzdWx0KTsKKworCWZvciAobG5vID0gMDsgbG5vIDwgY250OyBsbm8rKykgeworCQlpZiAoc2xpbmVbbG5vXS5sb3N0KSB7CisJCQlzdHJ1Y3QgbGxpbmUgKmxsID0gc2xpbmVbbG5vXS5sb3N0OworCQkJd2hpbGUgKGxsKSB7CisJCQkJc3RydWN0IGxsaW5lICp0bXAgPSBsbDsKKwkJCQlsbCA9IGxsLT5uZXh0OworCQkJCWZyZWUodG1wKTsKKwkJCX0KKwkJfQorCX0KKwlmcmVlKHNsaW5lWzBdLnBfbG5vKTsKKwlmcmVlKHNsaW5lKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19yYXdfZGlmZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnAsIGludCBudW1fcGFyZW50LCBzdHJ1Y3QgcmV2X2luZm8gKnJldikKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSAmcmV2LT5kaWZmb3B0OworCWludCBsaW5lX3Rlcm1pbmF0aW9uLCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uLCBpOworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4ID0gZGlmZl9saW5lX3ByZWZpeChvcHQpOworCisJbGluZV90ZXJtaW5hdGlvbiA9IG9wdC0+bGluZV90ZXJtaW5hdGlvbjsKKwlpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uID0gJ1x0JzsKKwlpZiAoIWxpbmVfdGVybWluYXRpb24pCisJCWludGVyX25hbWVfdGVybWluYXRpb24gPSAwOworCisJaWYgKHJldi0+bG9naW5mbyAmJiAhcmV2LT5ub19jb21taXRfaWQpCisJCXNob3dfbG9nKHJldik7CisKKworCWlmIChvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9SQVcpIHsKKwkJcHJpbnRmKCIlcyIsIGxpbmVfcHJlZml4KTsKKworCQkvKiBBcyBtYW55IGNvbG9ucyBhcyB0aGVyZSBhcmUgcGFyZW50cyAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKQorCQkJcHV0Y2hhcignOicpOworCisJCS8qIFNob3cgdGhlIG1vZGVzICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspCisJCQlwcmludGYoIiUwNm8gIiwgcC0+cGFyZW50W2ldLm1vZGUpOworCQlwcmludGYoIiUwNm8iLCBwLT5tb2RlKTsKKworCQkvKiBTaG93IHNoYTEncyAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhcmVudDsgaSsrKQorCQkJcHJpbnRmKCIgJXMiLCBkaWZmX3VuaXF1ZV9hYmJyZXYocC0+cGFyZW50W2ldLm9pZC5oYXNoLAorCQkJCQkJCSBvcHQtPmFiYnJldikpOworCQlwcmludGYoIiAlcyAiLCBkaWZmX3VuaXF1ZV9hYmJyZXYocC0+b2lkLmhhc2gsIG9wdC0+YWJicmV2KSk7CisJfQorCisJaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIChESUZGX0ZPUk1BVF9SQVcgfCBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykKKwkJCXB1dGNoYXIocC0+cGFyZW50W2ldLnN0YXR1cyk7CisJCXB1dGNoYXIoaW50ZXJfbmFtZV90ZXJtaW5hdGlvbik7CisJfQorCisJd3JpdGVfbmFtZV9xdW90ZWQocC0+cGF0aCwgc3Rkb3V0LCBsaW5lX3Rlcm1pbmF0aW9uKTsKK30KKworLyoKKyAqIFRoZSByZXN1bHQgKHAtPmVsZW0pIGlzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlaXIKKyAqIHBhcmVudHMgYXJlIHR5cGljYWxseSBmcm9tIG11bHRpcGxlIHN0YWdlcyBkdXJpbmcgYSBtZXJnZQorICogKGkuZS4gZGlmZi1maWxlcykgb3IgdGhlIHN0YXRlIGluIEhFQUQgYW5kIGluIHRoZSBpbmRleAorICogKGkuZS4gZGlmZi1pbmRleCkuCisgKi8KK3ZvaWQgc2hvd19jb21iaW5lZF9kaWZmKHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcCwKKwkJICAgICAgIGludCBudW1fcGFyZW50LAorCQkgICAgICAgaW50IGRlbnNlLAorCQkgICAgICAgc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gJnJldi0+ZGlmZm9wdDsKKworCWlmIChvcHQtPm91dHB1dF9mb3JtYXQgJiAoRElGRl9GT1JNQVRfUkFXIHwKKwkJCQkgIERJRkZfRk9STUFUX05BTUUgfAorCQkJCSAgRElGRl9GT1JNQVRfTkFNRV9TVEFUVVMpKQorCQlzaG93X3Jhd19kaWZmKHAsIG51bV9wYXJlbnQsIHJldik7CisJZWxzZSBpZiAob3B0LT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfUEFUQ0gpCisJCXNob3dfcGF0Y2hfZGlmZihwLCBudW1fcGFyZW50LCBkZW5zZSwgMSwgcmV2KTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9jb21iaW5lZF9wYWlyKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyKQoreworCWZyZWUocGFpci0+dHdvKTsKKwlmcmVlKHBhaXIpOworfQorCisvKgorICogQSBjb21iaW5lX2RpZmZfcGF0aCBleHByZXNzZXMgTiBwYXJlbnRzIG9uIHRoZSBMSFMgYWdhaW5zdCAxIG1lcmdlCisgKiByZXN1bHQuIFN5bnRoZXNpemUgYSBkaWZmX2ZpbGVwYWlyIHRoYXQgaGFzIE4gZW50cmllcyBvbiB0aGUgIm9uZSIKKyAqIHNpZGUgYW5kIDEgZW50cnkgb24gdGhlICJ0d28iIHNpZGUuCisgKgorICogSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgd2FudCB0byBhZGQgbW9yZSBkYXRhIHRvIGNvbWJpbmVfZGlmZl9wYXRoCisgKiBzbyB0aGF0IHdlIGNhbiBmaWxsIGZpZWxkcyB3ZSBhcmUgaWdub3JpbmcgKG1vc3Qgbm90YWJseSwgc2l6ZSkgaGVyZSwKKyAqIGJ1dCBjdXJyZW50bHkgbm9ib2R5IHVzZXMgaXQsIHNvIHRoaXMgc2hvdWxkIHN1ZmZpY2UgZm9yIG5vdy4KKyAqLworc3RhdGljIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpjb21iaW5lZF9wYWlyKHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcCwKKwkJCQkJICAgaW50IG51bV9wYXJlbnQpCit7CisJaW50IGk7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXI7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnBvb2w7CisKKwlwYWlyID0geG1hbGxvYyhzaXplb2YoKnBhaXIpKTsKKwlwb29sID0geGNhbGxvYyhudW1fcGFyZW50ICsgMSwgc2l6ZW9mKHN0cnVjdCBkaWZmX2ZpbGVzcGVjKSk7CisJcGFpci0+b25lID0gcG9vbCArIDE7CisJcGFpci0+dHdvID0gcG9vbDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFyZW50OyBpKyspIHsKKwkJcGFpci0+b25lW2ldLnBhdGggPSBwLT5wYXRoOworCQlwYWlyLT5vbmVbaV0ubW9kZSA9IHAtPnBhcmVudFtpXS5tb2RlOworCQloYXNoY3B5KHBhaXItPm9uZVtpXS5zaGExLCBwLT5wYXJlbnRbaV0ub2lkLmhhc2gpOworCQlwYWlyLT5vbmVbaV0uc2hhMV92YWxpZCA9ICFpc19udWxsX29pZCgmcC0+cGFyZW50W2ldLm9pZCk7CisJCXBhaXItPm9uZVtpXS5oYXNfbW9yZV9lbnRyaWVzID0gMTsKKwl9CisJcGFpci0+b25lW251bV9wYXJlbnQgLSAxXS5oYXNfbW9yZV9lbnRyaWVzID0gMDsKKworCXBhaXItPnR3by0+cGF0aCA9IHAtPnBhdGg7CisJcGFpci0+dHdvLT5tb2RlID0gcC0+bW9kZTsKKwloYXNoY3B5KHBhaXItPnR3by0+c2hhMSwgcC0+b2lkLmhhc2gpOworCXBhaXItPnR3by0+c2hhMV92YWxpZCA9ICFpc19udWxsX29pZCgmcC0+b2lkKTsKKwlyZXR1cm4gcGFpcjsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NvbWJpbmVkX2NhbGxiYWNrKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwKKwkJCQkgICAgIHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcGF0aHMsCisJCQkJICAgICBpbnQgbnVtX3BhcmVudCwKKwkJCQkgICAgIGludCBudW1fcGF0aHMpCit7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBxOworCWludCBpOworCisJcS5xdWV1ZSA9IHhjYWxsb2MobnVtX3BhdGhzLCBzaXplb2Yoc3RydWN0IGRpZmZfZmlsZXBhaXIgKikpOworCXEuYWxsb2MgPSBudW1fcGF0aHM7CisJcS5uciA9IG51bV9wYXRoczsKKwlmb3IgKGkgPSAwLCBwID0gcGF0aHM7IHA7IHAgPSBwLT5uZXh0KQorCQlxLnF1ZXVlW2krK10gPSBjb21iaW5lZF9wYWlyKHAsIG51bV9wYXJlbnQpOworCW9wdC0+Zm9ybWF0X2NhbGxiYWNrKCZxLCBvcHQsIG9wdC0+Zm9ybWF0X2NhbGxiYWNrX2RhdGEpOworCWZvciAoaSA9IDA7IGkgPCBudW1fcGF0aHM7IGkrKykKKwkJZnJlZV9jb21iaW5lZF9wYWlyKHEucXVldWVbaV0pOworCWZyZWUocS5xdWV1ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXRoX3BhdGgodm9pZCAqb2JqKQoreworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcGF0aCA9IChzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKilvYmo7CisKKwlyZXR1cm4gcGF0aC0+cGF0aDsKK30KKworCisvKiBmaW5kIHNldCBvZiBwYXRocyB0aGF0IGV2ZXJ5IHBhcmVudCB0b3VjaGVzICovCitzdGF0aWMgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpmaW5kX3BhdGhzX2dlbmVyaWMoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwljb25zdCBzdHJ1Y3Qgc2hhMV9hcnJheSAqcGFyZW50cywgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcGF0aHMgPSBOVUxMOworCWludCBpLCBudW1fcGFyZW50ID0gcGFyZW50cy0+bnI7CisKKwlpbnQgb3V0cHV0X2Zvcm1hdCA9IG9wdC0+b3V0cHV0X2Zvcm1hdDsKKwljb25zdCBjaGFyICpvcmRlcmZpbGUgPSBvcHQtPm9yZGVyZmlsZTsKKworCW9wdC0+b3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwkvKiB0ZWxsIGRpZmZfdHJlZSB0byBlbWl0IHBhdGhzIGluIHNvcnRlZCAoPXRyZWUpIG9yZGVyICovCisJb3B0LT5vcmRlcmZpbGUgPSBOVUxMOworCisJLyogRChBLFAxLi4uUG4pID0gRChBLFAxKSBeIC4uLiBeIEQoQSxQbikgICh3cnQgcGF0aHMpICovCisJZm9yIChpID0gMDsgaSA8IG51bV9wYXJlbnQ7IGkrKykgeworCQkvKgorCQkgKiBzaG93IHN0YXQgYWdhaW5zdCB0aGUgZmlyc3QgcGFyZW50IGV2ZW4gd2hlbiBkb2luZworCQkgKiBjb21iaW5lZCBkaWZmLgorCQkgKi8KKwkJaW50IHN0YXRfb3B0ID0gKG91dHB1dF9mb3JtYXQgJgorCQkJCShESUZGX0ZPUk1BVF9OVU1TVEFUfERJRkZfRk9STUFUX0RJRkZTVEFUKSk7CisJCWlmIChpID09IDAgJiYgc3RhdF9vcHQpCisJCQlvcHQtPm91dHB1dF9mb3JtYXQgPSBzdGF0X29wdDsKKwkJZWxzZQorCQkJb3B0LT5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfTk9fT1VUUFVUOworCQlkaWZmX3RyZWVfc2hhMShwYXJlbnRzLT5zaGExW2ldLCBzaGExLCAiIiwgb3B0KTsKKwkJZGlmZmNvcmVfc3RkKG9wdCk7CisJCXBhdGhzID0gaW50ZXJzZWN0X3BhdGhzKHBhdGhzLCBpLCBudW1fcGFyZW50KTsKKworCQkvKiBpZiBzaG93aW5nIGRpZmYsIHNob3cgaXQgaW4gcmVxdWVzdGVkIG9yZGVyICovCisJCWlmIChvcHQtPm91dHB1dF9mb3JtYXQgIT0gRElGRl9GT1JNQVRfTk9fT1VUUFVUICYmCisJCSAgICBvcmRlcmZpbGUpIHsKKwkJCWRpZmZjb3JlX29yZGVyKG9yZGVyZmlsZSk7CisJCX0KKworCQlkaWZmX2ZsdXNoKG9wdCk7CisJfQorCisJb3B0LT5vdXRwdXRfZm9ybWF0ID0gb3V0cHV0X2Zvcm1hdDsKKwlvcHQtPm9yZGVyZmlsZSA9IG9yZGVyZmlsZTsKKwlyZXR1cm4gcGF0aHM7Cit9CisKKworLyoKKyAqIGZpbmQgc2V0IG9mIHBhdGhzIHRoYXQgZXZlcnlib2R5IHRvdWNoZXMsIGFzc3VtaW5nIGRpZmYgaXMgcnVuIHdpdGhvdXQKKyAqIHJlbmFtZS9jb3B5IGRldGVjdGlvbiwgZXRjLCBjb21wYXJpbmcgYWxsIHRyZWVzIHNpbXVsdGFuZW91c2x5ICg9IGZhc3RlcikuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmZpbmRfcGF0aHNfbXVsdGl0cmVlKAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IHN0cnVjdCBzaGExX2FycmF5ICpwYXJlbnRzLAorCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlpbnQgaSwgbnBhcmVudCA9IHBhcmVudHMtPm5yOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKipwYXJlbnRzX3NoYTE7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoIHBhdGhzX2hlYWQ7CisJc3RydWN0IHN0cmJ1ZiBiYXNlOworCisJcGFyZW50c19zaGExID0geG1hbGxvYyhucGFyZW50ICogc2l6ZW9mKHBhcmVudHNfc2hhMVswXSkpOworCWZvciAoaSA9IDA7IGkgPCBucGFyZW50OyBpKyspCisJCXBhcmVudHNfc2hhMVtpXSA9IHBhcmVudHMtPnNoYTFbaV07CisKKwkvKiBmYWtlIGxpc3QgaGVhZCwgc28gd29ya2VyIGNhbiBhc3N1bWUgaXQgaXMgbm9uLU5VTEwgKi8KKwlwYXRoc19oZWFkLm5leHQgPSBOVUxMOworCisJc3RyYnVmX2luaXQoJmJhc2UsIFBBVEhfTUFYKTsKKwlkaWZmX3RyZWVfcGF0aHMoJnBhdGhzX2hlYWQsIHNoYTEsIHBhcmVudHNfc2hhMSwgbnBhcmVudCwgJmJhc2UsIG9wdCk7CisKKwlzdHJidWZfcmVsZWFzZSgmYmFzZSk7CisJZnJlZShwYXJlbnRzX3NoYTEpOworCXJldHVybiBwYXRoc19oZWFkLm5leHQ7Cit9CisKKwordm9pZCBkaWZmX3RyZWVfY29tYmluZWQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCWNvbnN0IHN0cnVjdCBzaGExX2FycmF5ICpwYXJlbnRzLAorCQkJaW50IGRlbnNlLAorCQkJc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gJnJldi0+ZGlmZm9wdDsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIGRpZmZvcHRzOworCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcCwgKnBhdGhzOworCWludCBpLCBudW1fcGF0aHMsIG5lZWRzZXAsIHNob3dfbG9nX2ZpcnN0LCBudW1fcGFyZW50ID0gcGFyZW50cy0+bnI7CisJaW50IG5lZWRfZ2VuZXJpY19wYXRoc2NhbjsKKworCS8qIG5vdGhpbmcgdG8gZG8sIGlmIG5vIHBhcmVudHMgKi8KKwlpZiAoIW51bV9wYXJlbnQpCisJCXJldHVybjsKKworCXNob3dfbG9nX2ZpcnN0ID0gISFyZXYtPmxvZ2luZm8gJiYgIXJldi0+bm9fY29tbWl0X2lkOworCW5lZWRzZXAgPSAwOworCWlmIChzaG93X2xvZ19maXJzdCkgeworCQlzaG93X2xvZyhyZXYpOworCisJCWlmIChyZXYtPnZlcmJvc2VfaGVhZGVyICYmIG9wdC0+b3V0cHV0X2Zvcm1hdCAmJgorCQkgICAgb3B0LT5vdXRwdXRfZm9ybWF0ICE9IERJRkZfRk9STUFUX05PX09VVFBVVCAmJgorCQkgICAgIWNvbW1pdF9mb3JtYXRfaXNfZW1wdHkocmV2LT5jb21taXRfZm9ybWF0KSkKKwkJCXByaW50ZigiJXMlYyIsIGRpZmZfbGluZV9wcmVmaXgob3B0KSwKKwkJCSAgICAgICBvcHQtPmxpbmVfdGVybWluYXRpb24pOworCX0KKworCWRpZmZvcHRzID0gKm9wdDsKKwljb3B5X3BhdGhzcGVjKCZkaWZmb3B0cy5wYXRoc3BlYywgJm9wdC0+cGF0aHNwZWMpOworCURJRkZfT1BUX1NFVCgmZGlmZm9wdHMsIFJFQ1VSU0lWRSk7CisJRElGRl9PUFRfQ0xSKCZkaWZmb3B0cywgQUxMT1dfRVhURVJOQUwpOworCisJLyogZmluZCBzZXQgb2YgcGF0aHMgdGhhdCBldmVyeWJvZHkgdG91Y2hlcworCSAqCisJICogTk9URQorCSAqCisJICogRGlmZmNvcmUgdHJhbnNmb3JtYXRpb25zIGFyZSBib3VuZCB0byBkaWZmX2ZpbGVzcGVjIGFuZCBsb2dpYworCSAqIGNvbXBhcmluZyB0d28gZW50cmllcyAtIGkuZS4gdGhleSBkbyBub3QgYXBwbHkgZGlyZWN0bHkgdG8gY29tYmluZQorCSAqIGRpZmYuCisJICoKKwkgKiBJZiBzb21lIG9mIHN1Y2ggdHJhbnNmb3JtYXRpb25zIGlzIHJlcXVlc3RlZCAtIHdlIGxhdW5jaCBnZW5lcmljCisJICogcGF0aCBzY2FubmluZywgd2hpY2ggd29ya3Mgc2lnbmlmaWNhbnRseSBzbG93ZXIgY29tcGFyZWQgdG8KKwkgKiBzaW11bHRhbmVvdXMgYWxsLXRyZWVzLWluLW9uZS1nbyBzY2FuIGluIGZpbmRfcGF0aHNfbXVsdGl0cmVlKCkuCisJICoKKwkgKiBUT0RPIHNvbWUgb2YgdGhlIGZpbHRlcnMgY291bGQgYmUgcG9ydGVkIHRvIHdvcmsgb24KKwkgKiBjb21iaW5lX2RpZmZfcGF0aHMgLSBpLmUuIGFsbCBmdW5jdGlvbmFsaXR5IHRoYXQgc2tpcHMgcGF0aHMsIHNvIGluCisJICogdGhlb3J5LCB3ZSBjb3VsZCBlbmQgdXAgaGF2aW5nIG9ubHkgbXVsdGl0cmVlIHBhdGggc2Nhbm5pbmcuCisJICoKKwkgKiBOT1RFIHBsZWFzZSBrZWVwIHRoaXMgc2VtYW50aWNhbGx5IGluIHN5bmMgd2l0aCBkaWZmY29yZV9zdGQoKQorCSAqLworCW5lZWRfZ2VuZXJpY19wYXRoc2NhbiA9IG9wdC0+c2tpcF9zdGF0X3VubWF0Y2gJfHwKKwkJCURJRkZfT1BUX1RTVChvcHQsIEZPTExPV19SRU5BTUVTKQl8fAorCQkJb3B0LT5icmVha19vcHQgIT0gLTEJfHwKKwkJCW9wdC0+ZGV0ZWN0X3JlbmFtZQl8fAorCQkJb3B0LT5waWNrYXhlCQl8fAorCQkJb3B0LT5maWx0ZXI7CisKKworCWlmIChuZWVkX2dlbmVyaWNfcGF0aHNjYW4pIHsKKwkJLyoKKwkJICogTk9URSBnZW5lcmljIGNhc2UgYWxzbyBoYW5kbGVzIC0tc3RhdCwgYXMgaXQgY29tcHV0ZXMKKwkJICogZGlmZihzaGExLHBhcmVudF9pKSBmb3IgYWxsIGkgdG8gZG8gdGhlIGpvYiwgc3BlY2lmaWNhbGx5CisJCSAqIGZvciBwYXJlbnQwLgorCQkgKi8KKwkJcGF0aHMgPSBmaW5kX3BhdGhzX2dlbmVyaWMoc2hhMSwgcGFyZW50cywgJmRpZmZvcHRzKTsKKwl9CisJZWxzZSB7CisJCWludCBzdGF0X29wdDsKKwkJcGF0aHMgPSBmaW5kX3BhdGhzX211bHRpdHJlZShzaGExLCBwYXJlbnRzLCAmZGlmZm9wdHMpOworCisJCS8qCisJCSAqIHNob3cgc3RhdCBhZ2FpbnN0IHRoZSBmaXJzdCBwYXJlbnQgZXZlbgorCQkgKiB3aGVuIGRvaW5nIGNvbWJpbmVkIGRpZmYuCisJCSAqLworCQlzdGF0X29wdCA9IChvcHQtPm91dHB1dF9mb3JtYXQgJgorCQkJCShESUZGX0ZPUk1BVF9OVU1TVEFUfERJRkZfRk9STUFUX0RJRkZTVEFUKSk7CisJCWlmIChzdGF0X29wdCkgeworCQkJZGlmZm9wdHMub3V0cHV0X2Zvcm1hdCA9IHN0YXRfb3B0OworCisJCQlkaWZmX3RyZWVfc2hhMShwYXJlbnRzLT5zaGExWzBdLCBzaGExLCAiIiwgJmRpZmZvcHRzKTsKKwkJCWRpZmZjb3JlX3N0ZCgmZGlmZm9wdHMpOworCQkJaWYgKG9wdC0+b3JkZXJmaWxlKQorCQkJCWRpZmZjb3JlX29yZGVyKG9wdC0+b3JkZXJmaWxlKTsKKwkJCWRpZmZfZmx1c2goJmRpZmZvcHRzKTsKKwkJfQorCX0KKworCS8qIGZpbmQgb3V0IG51bWJlciBvZiBzdXJ2aXZpbmcgcGF0aHMgKi8KKwlmb3IgKG51bV9wYXRocyA9IDAsIHAgPSBwYXRoczsgcDsgcCA9IHAtPm5leHQpCisJCW51bV9wYXRocysrOworCisJLyogb3JkZXIgcGF0aHMgYWNjb3JkaW5nIHRvIGRpZmZjb3JlX29yZGVyICovCisJaWYgKG9wdC0+b3JkZXJmaWxlICYmIG51bV9wYXRocykgeworCQlzdHJ1Y3Qgb2JqX29yZGVyICpvOworCisJCW8gPSB4bWFsbG9jKHNpemVvZigqbykgKiBudW1fcGF0aHMpOworCQlmb3IgKGkgPSAwLCBwID0gcGF0aHM7IHA7IHAgPSBwLT5uZXh0LCBpKyspCisJCQlvW2ldLm9iaiA9IHA7CisJCW9yZGVyX29iamVjdHMob3B0LT5vcmRlcmZpbGUsIHBhdGhfcGF0aCwgbywgbnVtX3BhdGhzKTsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9wYXRocyAtIDE7IGkrKykgeworCQkJcCA9IG9baV0ub2JqOworCQkJcC0+bmV4dCA9IG9baSsxXS5vYmo7CisJCX0KKworCQlwID0gb1tudW1fcGF0aHMtMV0ub2JqOworCQlwLT5uZXh0ID0gTlVMTDsKKwkJcGF0aHMgPSBvWzBdLm9iajsKKwkJZnJlZShvKTsKKwl9CisKKworCWlmIChudW1fcGF0aHMpIHsKKwkJaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIChESUZGX0ZPUk1BVF9SQVcgfAorCQkJCQkgIERJRkZfRk9STUFUX05BTUUgfAorCQkJCQkgIERJRkZfRk9STUFUX05BTUVfU1RBVFVTKSkgeworCQkJZm9yIChwID0gcGF0aHM7IHA7IHAgPSBwLT5uZXh0KQorCQkJCXNob3dfcmF3X2RpZmYocCwgbnVtX3BhcmVudCwgcmV2KTsKKwkJCW5lZWRzZXAgPSAxOworCQl9CisJCWVsc2UgaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmCisJCQkgKERJRkZfRk9STUFUX05VTVNUQVR8RElGRl9GT1JNQVRfRElGRlNUQVQpKQorCQkJbmVlZHNlcCA9IDE7CisJCWVsc2UgaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NBTExCQUNLKQorCQkJaGFuZGxlX2NvbWJpbmVkX2NhbGxiYWNrKG9wdCwgcGF0aHMsIG51bV9wYXJlbnQsIG51bV9wYXRocyk7CisKKwkJaWYgKG9wdC0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1BBVENIKSB7CisJCQlpZiAobmVlZHNlcCkKKwkJCQlwcmludGYoIiVzJWMiLCBkaWZmX2xpbmVfcHJlZml4KG9wdCksCisJCQkJICAgICAgIG9wdC0+bGluZV90ZXJtaW5hdGlvbik7CisJCQlmb3IgKHAgPSBwYXRoczsgcDsgcCA9IHAtPm5leHQpCisJCQkJc2hvd19wYXRjaF9kaWZmKHAsIG51bV9wYXJlbnQsIGRlbnNlLAorCQkJCQkJMCwgcmV2KTsKKwkJfQorCX0KKworCS8qIENsZWFuIHRoaW5ncyB1cCAqLworCXdoaWxlIChwYXRocykgeworCQlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnRtcCA9IHBhdGhzOworCQlwYXRocyA9IHBhdGhzLT5uZXh0OworCQlmcmVlKHRtcCk7CisJfQorCisJZnJlZV9wYXRoc3BlYygmZGlmZm9wdHMucGF0aHNwZWMpOworfQorCit2b2lkIGRpZmZfdHJlZV9jb21iaW5lZF9tZXJnZShjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBkZW5zZSwKKwkJCSAgICAgIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50ID0gZ2V0X3NhdmVkX3BhcmVudHMocmV2LCBjb21taXQpOworCXN0cnVjdCBzaGExX2FycmF5IHBhcmVudHMgPSBTSEExX0FSUkFZX0lOSVQ7CisKKwl3aGlsZSAocGFyZW50KSB7CisJCXNoYTFfYXJyYXlfYXBwZW5kKCZwYXJlbnRzLCBwYXJlbnQtPml0ZW0tPm9iamVjdC5zaGExKTsKKwkJcGFyZW50ID0gcGFyZW50LT5uZXh0OworCX0KKwlkaWZmX3RyZWVfY29tYmluZWQoY29tbWl0LT5vYmplY3Quc2hhMSwgJnBhcmVudHMsIGRlbnNlLCByZXYpOworCXNoYTFfYXJyYXlfY2xlYXIoJnBhcmVudHMpOworfQpkaWZmIC0tZ2l0IGEvY29tbWFuZC1saXN0LnR4dCBiL2NvbW1hbmQtbGlzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5NDEzNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1hbmQtbGlzdC50eHQKQEAgLTAsMCArMSwxNTIgQEAKKyMgY29tbW9uIGNvbW1hbmRzIGFyZSBncm91cGVkIGJ5IHRoZW1lcworIyB0aGVzZSBncm91cHMgYXJlIG91dHB1dCBieSAnZ2l0IGhlbHAnIGluIHRoZSBvcmRlciBkZWNsYXJlZCBoZXJlLgorIyBtYXAgZWFjaCBjb21tb24gY29tbWFuZCBpbiB0aGUgY29tbWFuZCBsaXN0IHRvIG9uZSBvZiB0aGVzZSBncm91cHMuCisjIyMgY29tbW9uIGdyb3VwcyAoZG8gbm90IGNoYW5nZSB0aGlzIGxpbmUpCitpbml0ICAgICAgICAgc3RhcnQgYSB3b3JraW5nIGFyZWEgKHNlZSBhbHNvOiBnaXQgaGVscCB0dXRvcmlhbCkKK3dvcmt0cmVlICAgICB3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KQoraW5mbyAgICAgICAgIGV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKQoraGlzdG9yeSAgICAgIGdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkKK3JlbW90ZSAgICAgICBjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykKKworIyMjIGNvbW1hbmQgbGlzdCAoZG8gbm90IGNoYW5nZSB0aGlzIGxpbmUpCisjIGNvbW1hbmQgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnkgW2RlcHJlY2F0ZWRdIFtjb21tb25dCitnaXQtYWRkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgd29ya3RyZWUKK2dpdC1hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtYW5ub3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LWFwcGx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtYXJjaGltcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZQorZ2l0LWFyY2hpdmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1iaXNlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBpbmZvCitnaXQtYmxhbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LWJyYW5jaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGhpc3RvcnkKK2dpdC1idW5kbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtY2F0LWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtY2hlY2stYXR0ciAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1jaGVjay1pZ25vcmUgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWNoZWNrLW1haWxtYXAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtY2hlY2tvdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LWNoZWNrb3V0LWluZGV4ICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtY2hlY2stcmVmLWZvcm1hdCAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1jaGVycnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtY2hlcnJ5LXBpY2sgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWNpdG9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1jbGVhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtY2xvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaW5pdAorZ2l0LWNvbHVtbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtY29tbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LWNvbW1pdC10cmVlICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtY291bnQtb2JqZWN0cyAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LWNyZWRlbnRpYWwgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtY3JlZGVudGlhbC1jYWNoZSAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1jcmVkZW50aWFsLXN0b3JlICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWN2c2V4cG9ydGNvbW1pdCAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1jdnNpbXBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtY3Zzc2VydmVyICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZQorZ2l0LWRhZW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtZGVzY3JpYmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWRpZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGhpc3RvcnkKK2dpdC1kaWZmLWZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1kaWZmLWluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1kaWZmLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1kaWZmdG9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtZmFzdC1leHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtZmFzdC1pbXBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtZmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgcmVtb3RlCitnaXQtZmV0Y2gtcGFjayAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hpbmdyZXBvc2l0b3JpZXMKK2dpdC1maWx0ZXItYnJhbmNoICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1mbXQtbWVyZ2UtbXNnICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LWZvci1lYWNoLXJlZiAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LWZvcm1hdC1wYXRjaCAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1mc2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtZ2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWdldC10YXItY29tbWl0LWlkICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1ncmVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBpbmZvCitnaXQtZ3VpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LWhhc2gtb2JqZWN0ICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtaGVscCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LWh0dHAtYmFja2VuZCAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtaHR0cC1mZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC1odHRwLXB1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycworZ2l0LWltYXAtc2VuZCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1pbmRleC1wYWNrICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LWluaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGluaXQKK2dpdC1pbnN0YXdlYiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtaW50ZXJwcmV0LXRyYWlsZXJzICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaW5mbworZ2l0LWxzLWZpbGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LWxzLXJlbW90ZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LWxzLXRyZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LW1haWxpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtbWFpbHNwbGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1tZXJnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBoaXN0b3J5CitnaXQtbWVyZ2UtYmFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtbWVyZ2UtZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1tZXJnZS1pbmRleCAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LW1lcmdlLW9uZS1maWxlICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtbWVyZ2V0b29sICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtbWVyZ2UtdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LW1rdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtbWt0cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1tdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICB3b3JrdHJlZQorZ2l0LW5hbWUtcmV2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LW5vdGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1wNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtcGFjay1vYmplY3RzICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1wYWNrLXJlZHVuZGFudCAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC1wYWNrLXJlZnMgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1wYXJzZS1yZW1vdGUgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycworZ2l0LXBhdGNoLWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmVoZWxwZXJzCitnaXQtcHJ1bmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5bWFuaXB1bGF0b3JzCitnaXQtcHJ1bmUtcGFja2VkICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1wdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICByZW1vdGUKK2dpdC1wdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICByZW1vdGUKK2dpdC1xdWlsdGltcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtcmVhZC10cmVlICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC1yZWJhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBoaXN0b3J5CitnaXQtcmVjZWl2ZS1wYWNrICAgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC1yZWZsb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1yZWxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1yZW1vdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1yZXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1yZXBsYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnltYW5pcHVsYXRvcnMKK2dpdC1yZXF1ZXN0LXB1bGwgICAgICAgICAgICAgICAgICAgICAgICBmb3JlaWduc2NtaW50ZXJmYWNlCitnaXQtcmVyZXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LXJlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIHdvcmt0cmVlCitnaXQtcmV2ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXJldi1saXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXJldi1wYXJzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC1ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICB3b3JrdHJlZQorZ2l0LXNlbmQtZW1haWwgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25zY21pbnRlcmZhY2UKK2dpdC1zZW5kLXBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGluZ3JlcG9zaXRvcmllcworZ2l0LXNoZWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNoZWxwZXJzCitnaXQtc2hvcnRsb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbgorZ2l0LXNob3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4gICAgICAgICAgIGluZm8KK2dpdC1zaG93LWJyYW5jaCAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXQtc2hvdy1pbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtc2hvdy1yZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdpbnRlcnJvZ2F0b3JzCitnaXQtc2gtaTE4biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1zaC1zZXR1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXJlaGVscGVycworZ2l0LXN0YXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5wb3JjZWxhaW4KK2dpdC1zdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluICAgICAgICAgICBpbmZvCitnaXQtc3RyaXBzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgcHVyZWhlbHBlcnMKK2dpdC1zdWJtb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtc3ZuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbnNjbWludGVyZmFjZQorZ2l0LXN5bWJvbGljLXJlZiAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbnBvcmNlbGFpbiAgICAgICAgICAgaGlzdG9yeQorZ2l0LXVucGFjay1maWxlICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXVucGFjay1vYmplY3RzICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5nbWFuaXB1bGF0b3JzCitnaXQtdXBkYXRlLWluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKK2dpdC11cGRhdGUtcmVmICAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ21hbmlwdWxhdG9ycworZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyAgICAgICAgICAgICAgICAgIHN5bmNoaW5ncmVwb3NpdG9yaWVzCitnaXQtdXBsb2FkLWFyY2hpdmUgICAgICAgICAgICAgICAgICAgICAgc3luY2hlbHBlcnMKK2dpdC11cGxvYWQtcGFjayAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jaGVscGVycworZ2l0LXZhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdW1iaW5naW50ZXJyb2dhdG9ycworZ2l0LXZlcmlmeS1jb21taXQgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC12ZXJpZnktcGFjayAgICAgICAgICAgICAgICAgICAgICAgICBwbHVtYmluZ2ludGVycm9nYXRvcnMKK2dpdC12ZXJpZnktdGFnICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNpbGxhcnlpbnRlcnJvZ2F0b3JzCitnaXR3ZWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaWxsYXJ5aW50ZXJyb2dhdG9ycworZ2l0LXdoYXRjaGFuZ2VkICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2lsbGFyeWludGVycm9nYXRvcnMKK2dpdC13b3JrdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWlucG9yY2VsYWluCitnaXQtd3JpdGUtdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgcGx1bWJpbmdtYW5pcHVsYXRvcnMKZGlmZiAtLWdpdCBhL2NvbW1pdC1zbGFiLmggYi9jb21taXQtc2xhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4NGI0NDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb21taXQtc2xhYi5oCkBAIC0wLDAgKzEsMTU1IEBACisjaWZuZGVmIENPTU1JVF9TTEFCX0gKKyNkZWZpbmUgQ09NTUlUX1NMQUJfSAorCisvKgorICogZGVmaW5lX2NvbW1pdF9zbGFiKHNsYWJuYW1lLCBlbGVtdHlwZSkgY3JlYXRlcyBib2lsZXJwbGF0ZSBjb2RlIHRvIGRlZmluZQorICogYSBuZXcgc3RydWN0IChzdHJ1Y3Qgc2xhYm5hbWUpIHRoYXQgaXMgdXNlZCB0byBhc3NvY2lhdGUgYSBwaWVjZSBvZiBkYXRhCisgKiBvZiBlbGVtdHlwZSB0byBjb21taXRzLCBhbmQgYSBmZXcgZnVuY3Rpb25zIHRvIHVzZSB0aGF0IHN0cnVjdC4KKyAqCisgKiBBZnRlciBpbmNsdWRpbmcgdGhpcyBoZWFkZXIgZmlsZSwgdXNpbmc6CisgKgorICogZGVmaW5lX2NvbW1pdF9zbGFiKGluZGVnZWUsIGludCk7CisgKgorICogd2lsbCBsZXQgeW91IGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisgKgorICogLSBpbnQgKmluZGVncmVlX2F0KHN0cnVjdCBpbmRlZ3JlZSAqLCBzdHJ1Y3QgY29tbWl0ICopOworICoKKyAqICAgVGhpcyBmdW5jdGlvbiBsb2NhdGVzIHRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29tbWl0IGluCisgKiAgIHRoZSBpbmRlZ3JlZSBzbGFiLCBhbmQgcmV0dXJucyB0aGUgcG9pbnRlciB0byBpdC4gIFRoZSBsb2NhdGlvbiB0bworICogICBzdG9yZSB0aGUgZGF0YSBpcyBhbGxvY2F0ZWQgYXMgbmVjZXNzYXJ5LgorICoKKyAqIC0gaW50ICppbmRlZ3JlZV9wZWVrKHN0cnVjdCBpbmRlZ3JlZSAqLCBzdHJ1Y3QgY29tbWl0ICopOworICoKKyAqICAgVGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIGluZGVncmVlX2F0KCksIGJ1dCBpdCB3aWxsIHJldHVybiBOVUxMCisgKiAgIHVudGlsIGEgY2FsbCB0byBpbmRlZ3JlZV9hdCgpIHdhcyBtYWRlIGZvciB0aGUgY29tbWl0LgorICoKKyAqIC0gdm9pZCBpbml0X2luZGVncmVlKHN0cnVjdCBpbmRlZ3JlZSAqKTsKKyAqICAgdm9pZCBpbml0X2luZGVncmVlX3dpdGhfc3RyaWRlKHN0cnVjdCBpbmRlZ3JlZSAqLCBpbnQpOworICoKKyAqICAgSW5pdGlhbGl6ZXMgdGhlIGluZGVncmVlIHNsYWIgdGhhdCBhc3NvY2lhdGVzIGFuIGFycmF5IG9mIGludGVnZXJzCisgKiAgIHRvIGVhY2ggY29tbWl0LiAnc3RyaWRlJyBzcGVjaWZpZXMgaG93IGJpZyBlYWNoIGFycmF5IGlzLiAgVGhlIHNsYWIKKyAqICAgdGhhdCBpcyBpbml0aWFsaXplZCBieSB0aGUgdmFyaWFudCB3aXRob3V0ICJfd2l0aF9zdHJpZGUiIGFzc29jaWF0ZXMKKyAqICAgZWFjaCBjb21taXQgd2l0aCBhbiBhcnJheSBvZiBvbmUgaW50ZWdlci4KKyAqCisgKiAtIHZvaWQgY2xlYXJfaW5kZWdyZWUoc3RydWN0IGluZGVncmVlICopOworICoKKyAqICAgRW1wdGllcyB0aGUgc2xhYi4gIFRoZSBzbGFiIGNhbiBiZSByZXVzZWQgd2l0aCB0aGUgc2FtZSBzdHJpZGUKKyAqICAgd2l0aG91dCBjYWxsaW5nIGluaXRfaW5kZWdyZWUoKSBhZ2FpbiBvciBjYW4gYmUgcmVjb25maWd1cmVkIHRvIGEKKyAqICAgZGlmZmVyZW50IHN0cmlkZSBieSBjYWxsaW5nIGluaXRfaW5kZWdyZWVfd2l0aF9zdHJpZGUoKS4KKyAqCisgKiAgIENhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgdGhlIHNsYWIgZmFsbHMgb3V0IG9mIHNjb3BlIHRvIGF2b2lkCisgKiAgIGxlYWtpbmcgbWVtb3J5LgorICovCisKKy8qIGFsbG9jYXRlIH41MTJrQiBhdCBvbmNlLCBhbGxvd2luZyBmb3IgbWFsbG9jIG92ZXJoZWFkICovCisjaWZuZGVmIENPTU1JVF9TTEFCX1NJWkUKKyNkZWZpbmUgQ09NTUlUX1NMQUJfU0laRSAoNTEyKjEwMjQtMzIpCisjZW5kaWYKKworI2RlZmluZSBNQVlCRV9VTlVTRUQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisKKyNkZWZpbmUgZGVmaW5lX2NvbW1pdF9zbGFiKHNsYWJuYW1lLCBlbGVtdHlwZSkgCQkJCVwKKwkJCQkJCQkJCVwKK3N0cnVjdCBzbGFibmFtZSB7CQkJCQkJCVwKKwl1bnNpZ25lZCBzbGFiX3NpemU7CQkJCQkJXAorCXVuc2lnbmVkIHN0cmlkZTsJCQkJCQlcCisJdW5zaWduZWQgc2xhYl9jb3VudDsJCQkJCQlcCisJZWxlbXR5cGUgKipzbGFiOwkJCQkJCVwKK307CQkJCQkJCQkJXAorc3RhdGljIGludCBzdGF0XyAjI3NsYWJuYW1lIyMgcmVhbGxvYzsJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBNQVlCRV9VTlVTRUQgdm9pZCBpbml0XyAjI3NsYWJuYW1lIyMgX3dpdGhfc3RyaWRlKHN0cnVjdCBzbGFibmFtZSAqcywgXAorCQkJCQkJICAgdW5zaWduZWQgc3RyaWRlKQlcCit7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGludCBlbGVtX3NpemU7CQkJCQkJXAorCWlmICghc3RyaWRlKQkJCQkJCQlcCisJCXN0cmlkZSA9IDE7CQkJCQkJXAorCXMtPnN0cmlkZSA9IHN0cmlkZTsJCQkJCQlcCisJZWxlbV9zaXplID0gc2l6ZW9mKGVsZW10eXBlKSAqIHN0cmlkZTsJCQkJXAorCXMtPnNsYWJfc2l6ZSA9IENPTU1JVF9TTEFCX1NJWkUgLyBlbGVtX3NpemU7CQkJXAorCXMtPnNsYWJfY291bnQgPSAwOwkJCQkJCVwKKwlzLT5zbGFiID0gTlVMTDsJCQkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBNQVlCRV9VTlVTRUQgdm9pZCBpbml0XyAjI3NsYWJuYW1lKHN0cnVjdCBzbGFibmFtZSAqcykJCVwKK3sJCQkJCQkJCQlcCisJaW5pdF8gIyNzbGFibmFtZSMjIF93aXRoX3N0cmlkZShzLCAxKTsJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBNQVlCRV9VTlVTRUQgdm9pZCBjbGVhcl8gIyNzbGFibmFtZShzdHJ1Y3Qgc2xhYm5hbWUgKnMpCQlcCit7CQkJCQkJCQkJXAorCWludCBpOwkJCQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBzLT5zbGFiX2NvdW50OyBpKyspCQkJCVwKKwkJZnJlZShzLT5zbGFiW2ldKTsJCQkJCVwKKwlzLT5zbGFiX2NvdW50ID0gMDsJCQkJCQlcCisJZnJlZShzLT5zbGFiKTsJCQkJCQkJXAorCXMtPnNsYWIgPSBOVUxMOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIE1BWUJFX1VOVVNFRCBlbGVtdHlwZSAqc2xhYm5hbWUjIyBfYXRfcGVlayhzdHJ1Y3Qgc2xhYm5hbWUgKnMsCVwKKwkJCQkJCSAgY29uc3Qgc3RydWN0IGNvbW1pdCAqYywgXAorCQkJCQkJICBpbnQgYWRkX2lmX21pc3NpbmcpICAgXAorewkJCQkJCQkJCVwKKwlpbnQgbnRoX3NsYWIsIG50aF9zbG90OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwludGhfc2xhYiA9IGMtPmluZGV4IC8gcy0+c2xhYl9zaXplOwkJCQlcCisJbnRoX3Nsb3QgPSBjLT5pbmRleCAlIHMtPnNsYWJfc2l6ZTsJCQkJXAorCQkJCQkJCQkJXAorCWlmIChzLT5zbGFiX2NvdW50IDw9IG50aF9zbGFiKSB7CQkJCVwKKwkJaW50IGk7CQkJCQkJCVwKKwkJaWYgKCFhZGRfaWZfbWlzc2luZykJCQkJCVwKKwkJCXJldHVybiBOVUxMOwkJCQkJXAorCQlSRUFMTE9DX0FSUkFZKHMtPnNsYWIsIG50aF9zbGFiICsgMSk7CQkJXAorCQlzdGF0XyAjI3NsYWJuYW1lIyMgcmVhbGxvYysrOwkJCQlcCisJCWZvciAoaSA9IHMtPnNsYWJfY291bnQ7IGkgPD0gbnRoX3NsYWI7IGkrKykJCVwKKwkJCXMtPnNsYWJbaV0gPSBOVUxMOwkJCQlcCisJCXMtPnNsYWJfY291bnQgPSBudGhfc2xhYiArIDE7CQkJCVwKKwl9CQkJCQkJCQlcCisJaWYgKCFzLT5zbGFiW250aF9zbGFiXSkgewkJCQkJXAorCQlpZiAoIWFkZF9pZl9taXNzaW5nKQkJCQkJXAorCQkJcmV0dXJuIE5VTEw7CQkJCQlcCisJCXMtPnNsYWJbbnRoX3NsYWJdID0geGNhbGxvYyhzLT5zbGFiX3NpemUsCQlcCisJCQkJCSAgICBzaXplb2YoKipzLT5zbGFiKSAqIHMtPnN0cmlkZSk7CQlcCisJfQkJCQkJCQkJXAorCXJldHVybiAmcy0+c2xhYltudGhfc2xhYl1bbnRoX3Nsb3QgKiBzLT5zdHJpZGVdOwkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBNQVlCRV9VTlVTRUQgZWxlbXR5cGUgKnNsYWJuYW1lIyMgX2F0KHN0cnVjdCBzbGFibmFtZSAqcywJXAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBjb21taXQgKmMpCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIHNsYWJuYW1lIyNfYXRfcGVlayhzLCBjLCAxKTsJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBNQVlCRV9VTlVTRUQgZWxlbXR5cGUgKnNsYWJuYW1lIyMgX3BlZWsoc3RydWN0IHNsYWJuYW1lICpzLAlcCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqYykJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gc2xhYm5hbWUjI19hdF9wZWVrKHMsIGMsIDApOwkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorc3RhdGljIGludCBzdGF0XyAjI3NsYWJuYW1lIyMgcmVhbGxvYworCisvKgorICogTm90ZSB0aGF0IHRoaXMgc2VlbWluZ2x5IHJlZHVuZGFudCBzZWNvbmQgZGVjbGFyYXRpb24gaXMgcmVxdWlyZWQKKyAqIHRvIGFsbG93IGEgdGVybWluYXRpbmcgc2VtaWNvbG9uLCB3aGljaCBtYWtlcyBpbnN0YW50aWF0aW9ucyBsb29rCisgKiBsaWtlIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gIEkuZS4sIHRoZSBleHBhbnNpb24gb2YKKyAqCisgKiAgICBkZWZpbmVfY29tbWl0X3NsYWIoaW5kZWdyZWUsIGludCk7CisgKgorICogZW5kcyBpbiAnc3RhdGljIGludCBzdGF0X2luZGVncmVlcmVhbGxvYzsnLiAgVGhpcyB3b3VsZCBvdGhlcndpc2UKKyAqIGJlIGEgc3ludGF4IGVycm9yIGFjY29yZGluZyAoYXQgbGVhc3QpIHRvIElTTyBDLiAgSXQncyBoYXJkIHRvCisgKiBjYXRjaCBiZWNhdXNlIEdDQyBzaWxlbnRseSBwYXJzZXMgaXQgYnkgZGVmYXVsdC4KKyAqLworCisvKgorICogU3RhdGljYWxseSBpbml0aWFsaXplIGEgY29tbWl0IHNsYWIgbmFtZWQgInZhciIuIE5vdGUgdGhhdCB0aGlzCisgKiBldmFsdWF0ZXMgInN0cmlkZSIgbXVsdGlwbGUgdGltZXMhIEV4YW1wbGU6CisgKgorICogICBzdHJ1Y3QgaW5kZWdyZWUgaW5kZWdyZWVzID0gQ09NTUlUX1NMQUJfSU5JVCgxLCBpbmRlZ3JlZXMpOworICoKKyAqLworI2RlZmluZSBDT01NSVRfU0xBQl9JTklUKHN0cmlkZSwgdmFyKSB7IFwKKwlDT01NSVRfU0xBQl9TSVpFIC8gc2l6ZW9mKCoqKCh2YXIpLnNsYWIpKSAvIChzdHJpZGUpLCBcCisJKHN0cmlkZSksIDAsIE5VTEwgXAorfQorCisjZW5kaWYgLyogQ09NTUlUX1NMQUJfSCAqLwpkaWZmIC0tZ2l0IGEvY29tbWl0LmMgYi9jb21taXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQ2MTVkCi0tLSAvZGV2L251bGwKKysrIGIvY29tbWl0LmMKQEAgLTAsMCArMSwxNzA5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJub3Rlcy5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJtZXJnZXNvcnQuaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKnJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcl9saW5lcyhjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKiopOworCitpbnQgc2F2ZV9jb21taXRfYnVmZmVyID0gMTsKKworY29uc3QgY2hhciAqY29tbWl0X3R5cGUgPSAiY29tbWl0IjsKKworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJCSAgICAgIGludCBxdWlldCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBkZXJlZl90YWcocGFyc2Vfb2JqZWN0KHNoYTEpLCBOVUxMLCAwKTsKKworCWlmICghb2JqKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gb2JqZWN0X2FzX3R5cGUob2JqLCBPQkpfQ09NTUlULCBxdWlldCk7Cit9CisKK3N0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXRfcmVmZXJlbmNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJcmV0dXJuIGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShzaGExLCAwKTsKK30KKworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9vcl9kaWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqcmVmX25hbWUpCit7CisJc3RydWN0IGNvbW1pdCAqYyA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCWlmICghYykKKwkJZGllKF8oImNvdWxkIG5vdCBwYXJzZSAlcyIpLCByZWZfbmFtZSk7CisJaWYgKGhhc2hjbXAoc2hhMSwgYy0+b2JqZWN0LnNoYTEpKSB7CisJCXdhcm5pbmcoXygiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIpLAorCQkJcmVmX25hbWUsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisJcmV0dXJuIGM7Cit9CisKK3N0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlyZXR1cm4gY3JlYXRlX29iamVjdChzaGExLCBhbGxvY19jb21taXRfbm9kZSgpKTsKKwlyZXR1cm4gb2JqZWN0X2FzX3R5cGUob2JqLCBPQkpfQ09NTUlULCAwKTsKK30KKworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWlmIChnZXRfc2hhMV9jb21taXR0aXNoKG5hbWUsIG9pZC5oYXNoKSkKKwkJcmV0dXJuIE5VTEw7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uob2lkLmhhc2gpOworCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGNvbW1pdDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFyc2VfY29tbWl0X2RhdGUoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICp0YWlsKQoreworCWNvbnN0IGNoYXIgKmRhdGVwdHI7CisKKwlpZiAoYnVmICsgNiA+PSB0YWlsKQorCQlyZXR1cm4gMDsKKwlpZiAobWVtY21wKGJ1ZiwgImF1dGhvciIsIDYpKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoYnVmIDwgdGFpbCAmJiAqYnVmKysgIT0gJ1xuJykKKwkJLyogbmFkYSAqLzsKKwlpZiAoYnVmICsgOSA+PSB0YWlsKQorCQlyZXR1cm4gMDsKKwlpZiAobWVtY21wKGJ1ZiwgImNvbW1pdHRlciIsIDkpKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoYnVmIDwgdGFpbCAmJiAqYnVmKysgIT0gJz4nKQorCQkvKiBuYWRhICovOworCWlmIChidWYgPj0gdGFpbCkKKwkJcmV0dXJuIDA7CisJZGF0ZXB0ciA9IGJ1ZjsKKwl3aGlsZSAoYnVmIDwgdGFpbCAmJiAqYnVmKysgIT0gJ1xuJykKKwkJLyogbmFkYSAqLzsKKwlpZiAoYnVmID49IHRhaWwpCisJCXJldHVybiAwOworCS8qIGRhdGVwdHIgPCBidWYgJiYgYnVmWy0xXSA9PSAnXG4nLCBzbyBzdHJ0b3VsIHdpbGwgc3RvcCBhdCBidWYtMSAqLworCXJldHVybiBzdHJ0b3VsKGRhdGVwdHIsIE5VTEwsIDEwKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfZ3JhZnQgKipjb21taXRfZ3JhZnQ7CitzdGF0aWMgaW50IGNvbW1pdF9ncmFmdF9hbGxvYywgY29tbWl0X2dyYWZ0X25yOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWl0X2dyYWZ0X3NoYTFfYWNjZXNzKHNpemVfdCBpbmRleCwgdm9pZCAqdGFibGUpCit7CisJc3RydWN0IGNvbW1pdF9ncmFmdCAqKmNvbW1pdF9ncmFmdF90YWJsZSA9IHRhYmxlOworCXJldHVybiBjb21taXRfZ3JhZnRfdGFibGVbaW5kZXhdLT5vaWQuaGFzaDsKK30KKworc3RhdGljIGludCBjb21taXRfZ3JhZnRfcG9zKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJcmV0dXJuIHNoYTFfcG9zKHNoYTEsIGNvbW1pdF9ncmFmdCwgY29tbWl0X2dyYWZ0X25yLAorCQkJY29tbWl0X2dyYWZ0X3NoYTFfYWNjZXNzKTsKK30KKworaW50IHJlZ2lzdGVyX2NvbW1pdF9ncmFmdChzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCwgaW50IGlnbm9yZV9kdXBzKQoreworCWludCBwb3MgPSBjb21taXRfZ3JhZnRfcG9zKGdyYWZ0LT5vaWQuaGFzaCk7CisKKwlpZiAoMCA8PSBwb3MpIHsKKwkJaWYgKGlnbm9yZV9kdXBzKQorCQkJZnJlZShncmFmdCk7CisJCWVsc2UgeworCQkJZnJlZShjb21taXRfZ3JhZnRbcG9zXSk7CisJCQljb21taXRfZ3JhZnRbcG9zXSA9IGdyYWZ0OworCQl9CisJCXJldHVybiAxOworCX0KKwlwb3MgPSAtcG9zIC0gMTsKKwlBTExPQ19HUk9XKGNvbW1pdF9ncmFmdCwgY29tbWl0X2dyYWZ0X25yICsgMSwgY29tbWl0X2dyYWZ0X2FsbG9jKTsKKwljb21taXRfZ3JhZnRfbnIrKzsKKwlpZiAocG9zIDwgY29tbWl0X2dyYWZ0X25yKQorCQltZW1tb3ZlKGNvbW1pdF9ncmFmdCArIHBvcyArIDEsCisJCQljb21taXRfZ3JhZnQgKyBwb3MsCisJCQkoY29tbWl0X2dyYWZ0X25yIC0gcG9zIC0gMSkgKgorCQkJc2l6ZW9mKCpjb21taXRfZ3JhZnQpKTsKKwljb21taXRfZ3JhZnRbcG9zXSA9IGdyYWZ0OworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpyZWFkX2dyYWZ0X2xpbmUoY2hhciAqYnVmLCBpbnQgbGVuKQoreworCS8qIFRoZSBmb3JtYXQgaXMganVzdCAiQ29tbWl0IFBhcmVudDEgUGFyZW50MiAuLi5cbiIgKi8KKwlpbnQgaTsKKwlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCA9IE5VTEw7CisJY29uc3QgaW50IGVudHJ5X3NpemUgPSBHSVRfU0hBMV9IRVhTWiArIDE7CisKKwl3aGlsZSAobGVuICYmIGlzc3BhY2UoYnVmW2xlbi0xXSkpCisJCWJ1ZlstLWxlbl0gPSAnXDAnOworCWlmIChidWZbMF0gPT0gJyMnIHx8IGJ1ZlswXSA9PSAnXDAnKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoKGxlbiArIDEpICUgZW50cnlfc2l6ZSkKKwkJZ290byBiYWRfZ3JhZnRfZGF0YTsKKwlpID0gKGxlbiArIDEpIC8gZW50cnlfc2l6ZSAtIDE7CisJZ3JhZnQgPSB4bWFsbG9jKHNpemVvZigqZ3JhZnQpICsgR0lUX1NIQTFfUkFXU1ogKiBpKTsKKwlncmFmdC0+bnJfcGFyZW50ID0gaTsKKwlpZiAoZ2V0X29pZF9oZXgoYnVmLCAmZ3JhZnQtPm9pZCkpCisJCWdvdG8gYmFkX2dyYWZ0X2RhdGE7CisJZm9yIChpID0gR0lUX1NIQTFfSEVYU1o7IGkgPCBsZW47IGkgKz0gZW50cnlfc2l6ZSkgeworCQlpZiAoYnVmW2ldICE9ICcgJykKKwkJCWdvdG8gYmFkX2dyYWZ0X2RhdGE7CisJCWlmIChnZXRfc2hhMV9oZXgoYnVmICsgaSArIDEsIGdyYWZ0LT5wYXJlbnRbaS9lbnRyeV9zaXplXS5oYXNoKSkKKwkJCWdvdG8gYmFkX2dyYWZ0X2RhdGE7CisJfQorCXJldHVybiBncmFmdDsKKworYmFkX2dyYWZ0X2RhdGE6CisJZXJyb3IoImJhZCBncmFmdCBkYXRhOiAlcyIsIGJ1Zik7CisJZnJlZShncmFmdCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9ncmFmdF9maWxlKGNvbnN0IGNoYXIgKmdyYWZ0X2ZpbGUpCit7CisJRklMRSAqZnAgPSBmb3BlbihncmFmdF9maWxlLCAiciIpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaWYgKCFmcCkKKwkJcmV0dXJuIC0xOworCXdoaWxlICghc3RyYnVmX2dldHdob2xlbGluZSgmYnVmLCBmcCwgJ1xuJykpIHsKKwkJLyogVGhlIGZvcm1hdCBpcyBqdXN0ICJDb21taXQgUGFyZW50MSBQYXJlbnQyIC4uLlxuIiAqLworCQlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCA9IHJlYWRfZ3JhZnRfbGluZShidWYuYnVmLCBidWYubGVuKTsKKwkJaWYgKCFncmFmdCkKKwkJCWNvbnRpbnVlOworCQlpZiAocmVnaXN0ZXJfY29tbWl0X2dyYWZ0KGdyYWZ0LCAxKSkKKwkJCWVycm9yKCJkdXBsaWNhdGUgZ3JhZnQgZGF0YTogJXMiLCBidWYuYnVmKTsKKwl9CisJZmNsb3NlKGZwKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9jb21taXRfZ3JhZnQodm9pZCkKK3sKKwlzdGF0aWMgaW50IGNvbW1pdF9ncmFmdF9wcmVwYXJlZDsKKwljaGFyICpncmFmdF9maWxlOworCisJaWYgKGNvbW1pdF9ncmFmdF9wcmVwYXJlZCkKKwkJcmV0dXJuOworCWdyYWZ0X2ZpbGUgPSBnZXRfZ3JhZnRfZmlsZSgpOworCXJlYWRfZ3JhZnRfZmlsZShncmFmdF9maWxlKTsKKwkvKiBtYWtlIHN1cmUgc2hhbGxvd3MgYXJlIHJlYWQgKi8KKwlpc19yZXBvc2l0b3J5X3NoYWxsb3coKTsKKwljb21taXRfZ3JhZnRfcHJlcGFyZWQgPSAxOworfQorCitzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpsb29rdXBfY29tbWl0X2dyYWZ0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IHBvczsKKwlwcmVwYXJlX2NvbW1pdF9ncmFmdCgpOworCXBvcyA9IGNvbW1pdF9ncmFmdF9wb3Moc2hhMSk7CisJaWYgKHBvcyA8IDApCisJCXJldHVybiBOVUxMOworCXJldHVybiBjb21taXRfZ3JhZnRbcG9zXTsKK30KKworaW50IGZvcl9lYWNoX2NvbW1pdF9ncmFmdChlYWNoX2NvbW1pdF9ncmFmdF9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgaSwgcmV0OworCWZvciAoaSA9IHJldCA9IDA7IGkgPCBjb21taXRfZ3JhZnRfbnIgJiYgIXJldDsgaSsrKQorCQlyZXQgPSBmbihjb21taXRfZ3JhZnRbaV0sIGNiX2RhdGEpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB1bnJlZ2lzdGVyX3NoYWxsb3coY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgcG9zID0gY29tbWl0X2dyYWZ0X3BvcyhzaGExKTsKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChwb3MgKyAxIDwgY29tbWl0X2dyYWZ0X25yKQorCQltZW1tb3ZlKGNvbW1pdF9ncmFmdCArIHBvcywgY29tbWl0X2dyYWZ0ICsgcG9zICsgMSwKKwkJCQlzaXplb2Yoc3RydWN0IGNvbW1pdF9ncmFmdCAqKQorCQkJCSogKGNvbW1pdF9ncmFmdF9uciAtIHBvcyAtIDEpKTsKKwljb21taXRfZ3JhZnRfbnItLTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNvbW1pdF9idWZmZXIgeworCXZvaWQgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7Cit9OworZGVmaW5lX2NvbW1pdF9zbGFiKGJ1ZmZlcl9zbGFiLCBzdHJ1Y3QgY29tbWl0X2J1ZmZlcik7CitzdGF0aWMgc3RydWN0IGJ1ZmZlcl9zbGFiIGJ1ZmZlcl9zbGFiID0gQ09NTUlUX1NMQUJfSU5JVCgxLCBidWZmZXJfc2xhYik7CisKK3ZvaWQgc2V0X2NvbW1pdF9idWZmZXIoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2J1ZmZlciAqdiA9IGJ1ZmZlcl9zbGFiX2F0KCZidWZmZXJfc2xhYiwgY29tbWl0KTsKKwl2LT5idWZmZXIgPSBidWZmZXI7CisJdi0+c2l6ZSA9IHNpemU7Cit9CisKK2NvbnN0IHZvaWQgKmdldF9jYWNoZWRfY29tbWl0X2J1ZmZlcihjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCXN0cnVjdCBjb21taXRfYnVmZmVyICp2ID0gYnVmZmVyX3NsYWJfcGVlaygmYnVmZmVyX3NsYWIsIGNvbW1pdCk7CisJaWYgKCF2KSB7CisJCWlmIChzaXplcCkKKwkJCSpzaXplcCA9IDA7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoc2l6ZXApCisJCSpzaXplcCA9IHYtPnNpemU7CisJcmV0dXJuIHYtPmJ1ZmZlcjsKK30KKworY29uc3Qgdm9pZCAqZ2V0X2NvbW1pdF9idWZmZXIoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LCB1bnNpZ25lZCBsb25nICpzaXplcCkKK3sKKwljb25zdCB2b2lkICpyZXQgPSBnZXRfY2FjaGVkX2NvbW1pdF9idWZmZXIoY29tbWl0LCBzaXplcCk7CisJaWYgKCFyZXQpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCXJldCA9IHJlYWRfc2hhMV9maWxlKGNvbW1pdC0+b2JqZWN0LnNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJCWlmICghcmV0KQorCQkJZGllKCJjYW5ub3QgcmVhZCBjb21taXQgb2JqZWN0ICVzIiwKKwkJCSAgICBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCWlmICh0eXBlICE9IE9CSl9DT01NSVQpCisJCQlkaWUoImV4cGVjdGVkIGNvbW1pdCBmb3IgJXMsIGdvdCAlcyIsCisJCQkgICAgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSksIHR5cGVuYW1lKHR5cGUpKTsKKwkJaWYgKHNpemVwKQorCQkJKnNpemVwID0gc2l6ZTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB1bnVzZV9jb21taXRfYnVmZmVyKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3Qgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBjb21taXRfYnVmZmVyICp2ID0gYnVmZmVyX3NsYWJfcGVlaygmYnVmZmVyX3NsYWIsIGNvbW1pdCk7CisJaWYgKCEodiAmJiB2LT5idWZmZXIgPT0gYnVmZmVyKSkKKwkJZnJlZSgodm9pZCAqKWJ1ZmZlcik7Cit9CisKK3ZvaWQgZnJlZV9jb21taXRfYnVmZmVyKHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2J1ZmZlciAqdiA9IGJ1ZmZlcl9zbGFiX3BlZWsoJmJ1ZmZlcl9zbGFiLCBjb21taXQpOworCWlmICh2KSB7CisJCWZyZWUodi0+YnVmZmVyKTsKKwkJdi0+YnVmZmVyID0gTlVMTDsKKwkJdi0+c2l6ZSA9IDA7CisJfQorfQorCitjb25zdCB2b2lkICpkZXRhY2hfY29tbWl0X2J1ZmZlcihzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCXN0cnVjdCBjb21taXRfYnVmZmVyICp2ID0gYnVmZmVyX3NsYWJfcGVlaygmYnVmZmVyX3NsYWIsIGNvbW1pdCk7CisJdm9pZCAqcmV0OworCisJaWYgKCF2KSB7CisJCWlmIChzaXplcCkKKwkJCSpzaXplcCA9IDA7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXQgPSB2LT5idWZmZXI7CisJaWYgKHNpemVwKQorCQkqc2l6ZXAgPSB2LT5zaXplOworCisJdi0+YnVmZmVyID0gTlVMTDsKKwl2LT5zaXplID0gMDsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcGFyc2VfY29tbWl0X2J1ZmZlcihzdHJ1Y3QgY29tbWl0ICppdGVtLCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwljb25zdCBjaGFyICp0YWlsID0gYnVmZmVyOworCWNvbnN0IGNoYXIgKmJ1ZnB0ciA9IGJ1ZmZlcjsKKwlzdHJ1Y3Qgb2JqZWN0X2lkIHBhcmVudDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcHRyOworCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0OworCWNvbnN0IGludCB0cmVlX2VudHJ5X2xlbiA9IEdJVF9TSEExX0hFWFNaICsgNTsKKwljb25zdCBpbnQgcGFyZW50X2VudHJ5X2xlbiA9IEdJVF9TSEExX0hFWFNaICsgNzsKKworCWlmIChpdGVtLT5vYmplY3QucGFyc2VkKQorCQlyZXR1cm4gMDsKKwlpdGVtLT5vYmplY3QucGFyc2VkID0gMTsKKwl0YWlsICs9IHNpemU7CisJaWYgKHRhaWwgPD0gYnVmcHRyICsgdHJlZV9lbnRyeV9sZW4gKyAxIHx8IG1lbWNtcChidWZwdHIsICJ0cmVlICIsIDUpIHx8CisJCQlidWZwdHJbdHJlZV9lbnRyeV9sZW5dICE9ICdcbicpCisJCXJldHVybiBlcnJvcigiYm9ndXMgY29tbWl0IG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CisJaWYgKGdldF9zaGExX2hleChidWZwdHIgKyA1LCBwYXJlbnQuaGFzaCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoImJhZCB0cmVlIHBvaW50ZXIgaW4gY29tbWl0ICVzIiwKKwkJCSAgICAgc2hhMV90b19oZXgoaXRlbS0+b2JqZWN0LnNoYTEpKTsKKwlpdGVtLT50cmVlID0gbG9va3VwX3RyZWUocGFyZW50Lmhhc2gpOworCWJ1ZnB0ciArPSB0cmVlX2VudHJ5X2xlbiArIDE7IC8qICJ0cmVlICIgKyAiaGV4IHNoYTEiICsgIlxuIiAqLworCXBwdHIgPSAmaXRlbS0+cGFyZW50czsKKworCWdyYWZ0ID0gbG9va3VwX2NvbW1pdF9ncmFmdChpdGVtLT5vYmplY3Quc2hhMSk7CisJd2hpbGUgKGJ1ZnB0ciArIHBhcmVudF9lbnRyeV9sZW4gPCB0YWlsICYmICFtZW1jbXAoYnVmcHRyLCAicGFyZW50ICIsIDcpKSB7CisJCXN0cnVjdCBjb21taXQgKm5ld19wYXJlbnQ7CisKKwkJaWYgKHRhaWwgPD0gYnVmcHRyICsgcGFyZW50X2VudHJ5X2xlbiArIDEgfHwKKwkJICAgIGdldF9zaGExX2hleChidWZwdHIgKyA3LCBwYXJlbnQuaGFzaCkgfHwKKwkJICAgIGJ1ZnB0cltwYXJlbnRfZW50cnlfbGVuXSAhPSAnXG4nKQorCQkJcmV0dXJuIGVycm9yKCJiYWQgcGFyZW50cyBpbiBjb21taXQgJXMiLCBzaGExX3RvX2hleChpdGVtLT5vYmplY3Quc2hhMSkpOworCQlidWZwdHIgKz0gcGFyZW50X2VudHJ5X2xlbiArIDE7CisJCS8qCisJCSAqIFRoZSBjbG9uZSBpcyBzaGFsbG93IGlmIG5yX3BhcmVudCA8IDAsIGFuZCB3ZSBtdXN0CisJCSAqIG5vdCB0cmF2ZXJzZSBpdHMgcmVhbCBwYXJlbnRzIGV2ZW4gd2hlbiB3ZSB1bmhpZGUgdGhlbS4KKwkJICovCisJCWlmIChncmFmdCAmJiAoZ3JhZnQtPm5yX3BhcmVudCA8IDAgfHwgZ3JhZnRzX3JlcGxhY2VfcGFyZW50cykpCisJCQljb250aW51ZTsKKwkJbmV3X3BhcmVudCA9IGxvb2t1cF9jb21taXQocGFyZW50Lmhhc2gpOworCQlpZiAobmV3X3BhcmVudCkKKwkJCXBwdHIgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KG5ld19wYXJlbnQsIHBwdHIpLT5uZXh0OworCX0KKwlpZiAoZ3JhZnQpIHsKKwkJaW50IGk7CisJCXN0cnVjdCBjb21taXQgKm5ld19wYXJlbnQ7CisJCWZvciAoaSA9IDA7IGkgPCBncmFmdC0+bnJfcGFyZW50OyBpKyspIHsKKwkJCW5ld19wYXJlbnQgPSBsb29rdXBfY29tbWl0KGdyYWZ0LT5wYXJlbnRbaV0uaGFzaCk7CisJCQlpZiAoIW5ld19wYXJlbnQpCisJCQkJY29udGludWU7CisJCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChuZXdfcGFyZW50LCBwcHRyKS0+bmV4dDsKKwkJfQorCX0KKwlpdGVtLT5kYXRlID0gcGFyc2VfY29tbWl0X2RhdGUoYnVmcHRyLCB0YWlsKTsKKworCXJldHVybiAwOworfQorCitpbnQgcGFyc2VfY29tbWl0X2dlbnRseShzdHJ1Y3QgY29tbWl0ICppdGVtLCBpbnQgcXVpZXRfb25fbWlzc2luZykKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgcmV0OworCisJaWYgKCFpdGVtKQorCQlyZXR1cm4gLTE7CisJaWYgKGl0ZW0tPm9iamVjdC5wYXJzZWQpCisJCXJldHVybiAwOworCWJ1ZmZlciA9IHJlYWRfc2hhMV9maWxlKGl0ZW0tPm9iamVjdC5zaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gcXVpZXRfb25fbWlzc2luZyA/IC0xIDoKKwkJCWVycm9yKCJDb3VsZCBub3QgcmVhZCAlcyIsCisJCQkgICAgIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CisJaWYgKHR5cGUgIT0gT0JKX0NPTU1JVCkgeworCQlmcmVlKGJ1ZmZlcik7CisJCXJldHVybiBlcnJvcigiT2JqZWN0ICVzIG5vdCBhIGNvbW1pdCIsCisJCQkgICAgIHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSk7CisJfQorCXJldCA9IHBhcnNlX2NvbW1pdF9idWZmZXIoaXRlbSwgYnVmZmVyLCBzaXplKTsKKwlpZiAoc2F2ZV9jb21taXRfYnVmZmVyICYmICFyZXQpIHsKKwkJc2V0X2NvbW1pdF9idWZmZXIoaXRlbSwgYnVmZmVyLCBzaXplKTsKKwkJcmV0dXJuIDA7CisJfQorCWZyZWUoYnVmZmVyKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHBhcnNlX2NvbW1pdF9vcl9kaWUoc3RydWN0IGNvbW1pdCAqaXRlbSkKK3sKKwlpZiAocGFyc2VfY29tbWl0KGl0ZW0pKQorCQlkaWUoInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiLAorCQkgICAgaXRlbSA/IHNoYTFfdG9faGV4KGl0ZW0tPm9iamVjdC5zaGExKSA6ICIobnVsbCkiKTsKK30KKworaW50IGZpbmRfY29tbWl0X3N1YmplY3QoY29uc3QgY2hhciAqY29tbWl0X2J1ZmZlciwgY29uc3QgY2hhciAqKnN1YmplY3QpCit7CisJY29uc3QgY2hhciAqZW9sOworCWNvbnN0IGNoYXIgKnAgPSBjb21taXRfYnVmZmVyOworCisJd2hpbGUgKCpwICYmICgqcCAhPSAnXG4nIHx8IHBbMV0gIT0gJ1xuJykpCisJCXArKzsKKwlpZiAoKnApIHsKKwkJcCArPSAyOworCQlmb3IgKGVvbCA9IHA7ICplb2wgJiYgKmVvbCAhPSAnXG4nOyBlb2wrKykKKwkJCTsgLyogZG8gbm90aGluZyAqLworCX0gZWxzZQorCQllb2wgPSBwOworCisJKnN1YmplY3QgPSBwOworCisJcmV0dXJuIGVvbCAtIHA7Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqY29tbWl0X2xpc3RfaW5zZXJ0KHN0cnVjdCBjb21taXQgKml0ZW0sIHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3RfcCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5ld19saXN0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9saXN0KSk7CisJbmV3X2xpc3QtPml0ZW0gPSBpdGVtOworCW5ld19saXN0LT5uZXh0ID0gKmxpc3RfcDsKKwkqbGlzdF9wID0gbmV3X2xpc3Q7CisJcmV0dXJuIG5ld19saXN0OworfQorCit1bnNpZ25lZCBjb21taXRfbGlzdF9jb3VudChjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmwpCit7CisJdW5zaWduZWQgYyA9IDA7CisJZm9yICg7IGw7IGwgPSBsLT5uZXh0ICkKKwkJYysrOworCXJldHVybiBjOworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvcHlfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqaGVhZCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHAgPSAmaGVhZDsKKwl3aGlsZSAobGlzdCkgeworCQlwcCA9IGNvbW1pdF9saXN0X2FwcGVuZChsaXN0LT5pdGVtLCBwcCk7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKwlyZXR1cm4gaGVhZDsKK30KKwordm9pZCBmcmVlX2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnRlbXAgPSBsaXN0OworCQlsaXN0ID0gdGVtcC0+bmV4dDsKKwkJZnJlZSh0ZW1wKTsKKwl9Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqIGNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHN0cnVjdCBjb21taXQgKml0ZW0sIHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHAgPSBsaXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwl3aGlsZSAoKHAgPSAqcHApICE9IE5VTEwpIHsKKwkJaWYgKHAtPml0ZW0tPmRhdGUgPCBpdGVtLT5kYXRlKSB7CisJCQlicmVhazsKKwkJfQorCQlwcCA9ICZwLT5uZXh0OworCX0KKwlyZXR1cm4gY29tbWl0X2xpc3RfaW5zZXJ0KGl0ZW0sIHBwKTsKK30KKworc3RhdGljIGludCBjb21taXRfbGlzdF9jb21wYXJlX2J5X2RhdGUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwl1bnNpZ25lZCBsb25nIGFfZGF0ZSA9ICgoY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICopYSktPml0ZW0tPmRhdGU7CisJdW5zaWduZWQgbG9uZyBiX2RhdGUgPSAoKGNvbnN0IHN0cnVjdCBjb21taXRfbGlzdCAqKWIpLT5pdGVtLT5kYXRlOworCWlmIChhX2RhdGUgPCBiX2RhdGUpCisJCXJldHVybiAxOworCWlmIChhX2RhdGUgPiBiX2RhdGUpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKmNvbW1pdF9saXN0X2dldF9uZXh0KGNvbnN0IHZvaWQgKmEpCit7CisJcmV0dXJuICgoY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICopYSktPm5leHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNvbW1pdF9saXN0X3NldF9uZXh0KHZvaWQgKmEsIHZvaWQgKm5leHQpCit7CisJKChzdHJ1Y3QgY29tbWl0X2xpc3QgKilhKS0+bmV4dCA9IG5leHQ7Cit9CisKK3ZvaWQgY29tbWl0X2xpc3Rfc29ydF9ieV9kYXRlKHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpCit7CisJKmxpc3QgPSBsbGlzdF9tZXJnZXNvcnQoKmxpc3QsIGNvbW1pdF9saXN0X2dldF9uZXh0LCBjb21taXRfbGlzdF9zZXRfbmV4dCwKKwkJCQljb21taXRfbGlzdF9jb21wYXJlX2J5X2RhdGUpOworfQorCitzdHJ1Y3QgY29tbWl0ICpwb3BfbW9zdF9yZWNlbnRfY29tbWl0KHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QsCisJCQkJICAgICAgdW5zaWduZWQgaW50IG1hcmspCit7CisJc3RydWN0IGNvbW1pdCAqcmV0ID0gKCpsaXN0KS0+aXRlbTsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSByZXQtPnBhcmVudHM7CisJc3RydWN0IGNvbW1pdF9saXN0ICpvbGQgPSAqbGlzdDsKKworCSpsaXN0ID0gKCpsaXN0KS0+bmV4dDsKKwlmcmVlKG9sZCk7CisKKwl3aGlsZSAocGFyZW50cykgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwYXJlbnRzLT5pdGVtOworCQlpZiAoIXBhcnNlX2NvbW1pdChjb21taXQpICYmICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBtYXJrKSkgeworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gbWFyazsKKwkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKGNvbW1pdCwgbGlzdCk7CisJCX0KKwkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2NvbW1pdF9tYXJrc18xKHN0cnVjdCBjb21taXRfbGlzdCAqKnBsaXN0LAorCQkJCSBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHVuc2lnbmVkIGludCBtYXJrKQoreworCXdoaWxlIChjb21taXQpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCisJCWlmICghKG1hcmsgJiBjb21taXQtPm9iamVjdC5mbGFncykpCisJCQlyZXR1cm47CisKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgJj0gfm1hcms7CisKKwkJcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKwkJaWYgKCFwYXJlbnRzKQorCQkJcmV0dXJuOworCisJCXdoaWxlICgocGFyZW50cyA9IHBhcmVudHMtPm5leHQpKQorCQkJY29tbWl0X2xpc3RfaW5zZXJ0KHBhcmVudHMtPml0ZW0sIHBsaXN0KTsKKworCQljb21taXQgPSBjb21taXQtPnBhcmVudHMtPml0ZW07CisJfQorfQorCit2b2lkIGNsZWFyX2NvbW1pdF9tYXJrc19tYW55KGludCBuciwgc3RydWN0IGNvbW1pdCAqKmNvbW1pdCwgdW5zaWduZWQgaW50IG1hcmspCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTDsKKworCXdoaWxlIChuci0tKSB7CisJCWNvbW1pdF9saXN0X2luc2VydCgqY29tbWl0LCAmbGlzdCk7CisJCWNvbW1pdCsrOworCX0KKwl3aGlsZSAobGlzdCkKKwkJY2xlYXJfY29tbWl0X21hcmtzXzEoJmxpc3QsIHBvcF9jb21taXQoJmxpc3QpLCBtYXJrKTsKK30KKwordm9pZCBjbGVhcl9jb21taXRfbWFya3Moc3RydWN0IGNvbW1pdCAqY29tbWl0LCB1bnNpZ25lZCBpbnQgbWFyaykKK3sKKwljbGVhcl9jb21taXRfbWFya3NfbWFueSgxLCAmY29tbWl0LCBtYXJrKTsKK30KKwordm9pZCBjbGVhcl9jb21taXRfbWFya3NfZm9yX29iamVjdF9hcnJheShzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphLCB1bnNpZ25lZCBtYXJrKQoreworCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYS0+bnI7IGkrKykgeworCQlvYmplY3QgPSBhLT5vYmplY3RzW2ldLml0ZW07CisJCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShvYmplY3QtPnNoYTEsIDEpOworCQlpZiAoY29tbWl0KQorCQkJY2xlYXJfY29tbWl0X21hcmtzKGNvbW1pdCwgbWFyayk7CisJfQorfQorCitzdHJ1Y3QgY29tbWl0ICpwb3BfY29tbWl0KHN0cnVjdCBjb21taXRfbGlzdCAqKnN0YWNrKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqdG9wID0gKnN0YWNrOworCXN0cnVjdCBjb21taXQgKml0ZW0gPSB0b3AgPyB0b3AtPml0ZW0gOiBOVUxMOworCisJaWYgKHRvcCkgeworCQkqc3RhY2sgPSB0b3AtPm5leHQ7CisJCWZyZWUodG9wKTsKKwl9CisJcmV0dXJuIGl0ZW07Cit9CisKKy8qCisgKiBUb3BvbG9naWNhbCBzb3J0IHN1cHBvcnQKKyAqLworCisvKiBjb3VudCBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBoYXZlIG5vdCBiZWVuIGVtaXR0ZWQgKi8KK2RlZmluZV9jb21taXRfc2xhYihpbmRlZ3JlZV9zbGFiLCBpbnQpOworCisvKiByZWNvcmQgYXV0aG9yLWRhdGUgZm9yIGVhY2ggY29tbWl0IG9iamVjdCAqLworZGVmaW5lX2NvbW1pdF9zbGFiKGF1dGhvcl9kYXRlX3NsYWIsIHVuc2lnbmVkIGxvbmcpOworCitzdGF0aWMgdm9pZCByZWNvcmRfYXV0aG9yX2RhdGUoc3RydWN0IGF1dGhvcl9kYXRlX3NsYWIgKmF1dGhvcl9kYXRlLAorCQkJICAgICAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwljb25zdCBjaGFyICpidWZmZXIgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpOworCXN0cnVjdCBpZGVudF9zcGxpdCBpZGVudDsKKwljb25zdCBjaGFyICppZGVudF9saW5lOworCXNpemVfdCBpZGVudF9sZW47CisJY2hhciAqZGF0ZV9lbmQ7CisJdW5zaWduZWQgbG9uZyBkYXRlOworCisJaWRlbnRfbGluZSA9IGZpbmRfY29tbWl0X2hlYWRlcihidWZmZXIsICJhdXRob3IiLCAmaWRlbnRfbGVuKTsKKwlpZiAoIWlkZW50X2xpbmUpCisJCWdvdG8gZmFpbF9leGl0OyAvKiBubyBhdXRob3IgbGluZSAqLworCWlmIChzcGxpdF9pZGVudF9saW5lKCZpZGVudCwgaWRlbnRfbGluZSwgaWRlbnRfbGVuKSB8fAorCSAgICAhaWRlbnQuZGF0ZV9iZWdpbiB8fCAhaWRlbnQuZGF0ZV9lbmQpCisJCWdvdG8gZmFpbF9leGl0OyAvKiBtYWxmb3JtZWQgImF1dGhvciIgbGluZSAqLworCisJZGF0ZSA9IHN0cnRvdWwoaWRlbnQuZGF0ZV9iZWdpbiwgJmRhdGVfZW5kLCAxMCk7CisJaWYgKGRhdGVfZW5kICE9IGlkZW50LmRhdGVfZW5kKQorCQlnb3RvIGZhaWxfZXhpdDsgLyogbWFsZm9ybWVkIGRhdGUgKi8KKwkqKGF1dGhvcl9kYXRlX3NsYWJfYXQoYXV0aG9yX2RhdGUsIGNvbW1pdCkpID0gZGF0ZTsKKworZmFpbF9leGl0OgorCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWZmZXIpOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfY29tbWl0c19ieV9hdXRob3JfZGF0ZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8sCisJCQkJCSAgdm9pZCAqY2JfZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICphID0gYV8sICpiID0gYl87CisJc3RydWN0IGF1dGhvcl9kYXRlX3NsYWIgKmF1dGhvcl9kYXRlID0gY2JfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGFfZGF0ZSA9ICooYXV0aG9yX2RhdGVfc2xhYl9hdChhdXRob3JfZGF0ZSwgYSkpOworCXVuc2lnbmVkIGxvbmcgYl9kYXRlID0gKihhdXRob3JfZGF0ZV9zbGFiX2F0KGF1dGhvcl9kYXRlLCBiKSk7CisKKwkvKiBuZXdlciBjb21taXRzIHdpdGggbGFyZ2VyIGRhdGUgZmlyc3QgKi8KKwlpZiAoYV9kYXRlIDwgYl9kYXRlKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChhX2RhdGUgPiBiX2RhdGUpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbXBhcmVfY29tbWl0c19ieV9jb21taXRfZGF0ZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8sIHZvaWQgKnVudXNlZCkKK3sKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICphID0gYV8sICpiID0gYl87CisJLyogbmV3ZXIgY29tbWl0cyB3aXRoIGxhcmdlciBkYXRlIGZpcnN0ICovCisJaWYgKGEtPmRhdGUgPCBiLT5kYXRlKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChhLT5kYXRlID4gYi0+ZGF0ZSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisvKgorICogUGVyZm9ybXMgYW4gaW4tcGxhY2UgdG9wb2xvZ2ljYWwgc29ydCBvbiB0aGUgbGlzdCBzdXBwbGllZC4KKyAqLwordm9pZCBzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QsIGVudW0gcmV2X3NvcnRfb3JkZXIgc29ydF9vcmRlcikKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5leHQsICpvcmlnID0gKmxpc3Q7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHB0cjsKKwlzdHJ1Y3QgaW5kZWdyZWVfc2xhYiBpbmRlZ3JlZTsKKwlzdHJ1Y3QgcHJpb19xdWV1ZSBxdWV1ZTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGF1dGhvcl9kYXRlX3NsYWIgYXV0aG9yX2RhdGU7CisKKwlpZiAoIW9yaWcpCisJCXJldHVybjsKKwkqbGlzdCA9IE5VTEw7CisKKwlpbml0X2luZGVncmVlX3NsYWIoJmluZGVncmVlKTsKKwltZW1zZXQoJnF1ZXVlLCAnXDAnLCBzaXplb2YocXVldWUpKTsKKworCXN3aXRjaCAoc29ydF9vcmRlcikgeworCWRlZmF1bHQ6IC8qIFJFVl9TT1JUX0lOX0dSQVBIX09SREVSICovCisJCXF1ZXVlLmNvbXBhcmUgPSBOVUxMOworCQlicmVhazsKKwljYXNlIFJFVl9TT1JUX0JZX0NPTU1JVF9EQVRFOgorCQlxdWV1ZS5jb21wYXJlID0gY29tcGFyZV9jb21taXRzX2J5X2NvbW1pdF9kYXRlOworCQlicmVhazsKKwljYXNlIFJFVl9TT1JUX0JZX0FVVEhPUl9EQVRFOgorCQlpbml0X2F1dGhvcl9kYXRlX3NsYWIoJmF1dGhvcl9kYXRlKTsKKwkJcXVldWUuY29tcGFyZSA9IGNvbXBhcmVfY29tbWl0c19ieV9hdXRob3JfZGF0ZTsKKwkJcXVldWUuY2JfZGF0YSA9ICZhdXRob3JfZGF0ZTsKKwkJYnJlYWs7CisJfQorCisJLyogTWFyayB0aGVtIGFuZCBjbGVhciB0aGUgaW5kZWdyZWUgKi8KKwlmb3IgKG5leHQgPSBvcmlnOyBuZXh0OyBuZXh0ID0gbmV4dC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBuZXh0LT5pdGVtOworCQkqKGluZGVncmVlX3NsYWJfYXQoJmluZGVncmVlLCBjb21taXQpKSA9IDE7CisJCS8qIGFsc28gcmVjb3JkIHRoZSBhdXRob3IgZGF0ZXMsIGlmIG5lZWRlZCAqLworCQlpZiAoc29ydF9vcmRlciA9PSBSRVZfU09SVF9CWV9BVVRIT1JfREFURSkKKwkJCXJlY29yZF9hdXRob3JfZGF0ZSgmYXV0aG9yX2RhdGUsIGNvbW1pdCk7CisJfQorCisJLyogdXBkYXRlIHRoZSBpbmRlZ3JlZSAqLworCWZvciAobmV4dCA9IG9yaWc7IG5leHQ7IG5leHQgPSBuZXh0LT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IG5leHQtPml0ZW0tPnBhcmVudHM7CisJCXdoaWxlIChwYXJlbnRzKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCQkJaW50ICpwaSA9IGluZGVncmVlX3NsYWJfYXQoJmluZGVncmVlLCBwYXJlbnQpOworCisJCQlpZiAoKnBpKQorCQkJCSgqcGkpKys7CisJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJfQorCX0KKworCS8qCisJICogZmluZCB0aGUgdGlwcworCSAqCisJICogdGlwcyBhcmUgbm9kZXMgbm90IHJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciBub2RlIGluIHRoZSBsaXN0CisJICoKKwkgKiB0aGUgdGlwcyBzZXJ2ZSBhcyBhIHN0YXJ0aW5nIHNldCBmb3IgdGhlIHdvcmsgcXVldWUuCisJICovCisJZm9yIChuZXh0ID0gb3JpZzsgbmV4dDsgbmV4dCA9IG5leHQtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbmV4dC0+aXRlbTsKKworCQlpZiAoKihpbmRlZ3JlZV9zbGFiX2F0KCZpbmRlZ3JlZSwgY29tbWl0KSkgPT0gMSkKKwkJCXByaW9fcXVldWVfcHV0KCZxdWV1ZSwgY29tbWl0KTsKKwl9CisKKwkvKgorCSAqIFRoaXMgaXMgdW5mb3J0dW5hdGU7IHRoZSBpbml0aWFsIHRpcHMgbmVlZCB0byBiZSBzaG93bgorCSAqIGluIHRoZSBvcmRlciBnaXZlbiBmcm9tIHRoZSByZXZpc2lvbiB0cmF2ZXJzYWwgbWFjaGluZXJ5LgorCSAqLworCWlmIChzb3J0X29yZGVyID09IFJFVl9TT1JUX0lOX0dSQVBIX09SREVSKQorCQlwcmlvX3F1ZXVlX3JldmVyc2UoJnF1ZXVlKTsKKworCS8qIFdlIG5vIGxvbmdlciBuZWVkIHRoZSBjb21taXQgbGlzdCAqLworCWZyZWVfY29tbWl0X2xpc3Qob3JpZyk7CisKKwlwcHRyID0gbGlzdDsKKwkqbGlzdCA9IE5VTEw7CisJd2hpbGUgKChjb21taXQgPSBwcmlvX3F1ZXVlX2dldCgmcXVldWUpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKworCQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudHMgOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJCWludCAqcGkgPSBpbmRlZ3JlZV9zbGFiX2F0KCZpbmRlZ3JlZSwgcGFyZW50KTsKKworCQkJaWYgKCEqcGkpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBwYXJlbnRzIGFyZSBvbmx5IGVucXVldWVkIGZvciBlbWlzc2lvbgorCQkJICogd2hlbiBhbGwgdGhlaXIgY2hpbGRyZW4gaGF2ZSBiZWVuIGVtaXR0ZWQgdGhlcmVieQorCQkJICogZ3VhcmFudGVlaW5nIHRvcG9sb2dpY2FsIG9yZGVyLgorCQkJICovCisJCQlpZiAoLS0oKnBpKSA9PSAxKQorCQkJCXByaW9fcXVldWVfcHV0KCZxdWV1ZSwgcGFyZW50KTsKKwkJfQorCQkvKgorCQkgKiBhbGwgY2hpbGRyZW4gb2YgY29tbWl0IGhhdmUgYWxyZWFkeSBiZWVuCisJCSAqIGVtaXR0ZWQuIHdlIGNhbiBlbWl0IGl0IG5vdy4KKwkJICovCisJCSooaW5kZWdyZWVfc2xhYl9hdCgmaW5kZWdyZWUsIGNvbW1pdCkpID0gMDsKKworCQlwcHRyID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHBwdHIpLT5uZXh0OworCX0KKworCWNsZWFyX2luZGVncmVlX3NsYWIoJmluZGVncmVlKTsKKwljbGVhcl9wcmlvX3F1ZXVlKCZxdWV1ZSk7CisJaWYgKHNvcnRfb3JkZXIgPT0gUkVWX1NPUlRfQllfQVVUSE9SX0RBVEUpCisJCWNsZWFyX2F1dGhvcl9kYXRlX3NsYWIoJmF1dGhvcl9kYXRlKTsKK30KKworLyogbWVyZ2UtYmFzZSBzdHVmZiAqLworCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBQQVJFTlQxCQkoMXU8PDE2KQorI2RlZmluZSBQQVJFTlQyCQkoMXU8PDE3KQorI2RlZmluZSBTVEFMRQkJKDF1PDwxOCkKKyNkZWZpbmUgUkVTVUxUCQkoMXU8PDE5KQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgYWxsX2ZsYWdzID0gKFBBUkVOVDEgfCBQQVJFTlQyIHwgU1RBTEUgfCBSRVNVTFQpOworCitzdGF0aWMgaW50IHF1ZXVlX2hhc19ub25zdGFsZShzdHJ1Y3QgcHJpb19xdWV1ZSAqcXVldWUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHF1ZXVlLT5hcnJheVtpXS5kYXRhOworCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIFNUQUxFKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogYWxsIGlucHV0IGNvbW1pdHMgaW4gb25lIGFuZCB0d29zW10gbXVzdCBoYXZlIGJlZW4gcGFyc2VkISAqLworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqcGFpbnRfZG93bl90b19jb21tb24oc3RydWN0IGNvbW1pdCAqb25lLCBpbnQgbiwgc3RydWN0IGNvbW1pdCAqKnR3b3MpCit7CisJc3RydWN0IHByaW9fcXVldWUgcXVldWUgPSB7IGNvbXBhcmVfY29tbWl0c19ieV9jb21taXRfZGF0ZSB9OworCXN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0ID0gTlVMTDsKKwlpbnQgaTsKKworCW9uZS0+b2JqZWN0LmZsYWdzIHw9IFBBUkVOVDE7CisJaWYgKCFuKSB7CisJCWNvbW1pdF9saXN0X2FwcGVuZChvbmUsICZyZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKwlwcmlvX3F1ZXVlX3B1dCgmcXVldWUsIG9uZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXR3b3NbaV0tPm9iamVjdC5mbGFncyB8PSBQQVJFTlQyOworCQlwcmlvX3F1ZXVlX3B1dCgmcXVldWUsIHR3b3NbaV0pOworCX0KKworCXdoaWxlIChxdWV1ZV9oYXNfbm9uc3RhbGUoJnF1ZXVlKSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwcmlvX3F1ZXVlX2dldCgmcXVldWUpOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJCWludCBmbGFnczsKKworCQlmbGFncyA9IGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgKFBBUkVOVDEgfCBQQVJFTlQyIHwgU1RBTEUpOworCQlpZiAoZmxhZ3MgPT0gKFBBUkVOVDEgfCBQQVJFTlQyKSkgeworCQkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBSRVNVTFQpKSB7CisJCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gUkVTVUxUOworCQkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKGNvbW1pdCwgJnJlc3VsdCk7CisJCQl9CisJCQkvKiBNYXJrIHBhcmVudHMgb2YgYSBmb3VuZCBtZXJnZSBzdGFsZSAqLworCQkJZmxhZ3MgfD0gU1RBTEU7CisJCX0KKwkJcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKwkJd2hpbGUgKHBhcmVudHMpIHsKKwkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnRzLT5pdGVtOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCQlpZiAoKHAtPm9iamVjdC5mbGFncyAmIGZsYWdzKSA9PSBmbGFncykKKwkJCQljb250aW51ZTsKKwkJCWlmIChwYXJzZV9jb21taXQocCkpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gZmxhZ3M7CisJCQlwcmlvX3F1ZXVlX3B1dCgmcXVldWUsIHApOworCQl9CisJfQorCisJY2xlYXJfcHJpb19xdWV1ZSgmcXVldWUpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKm1lcmdlX2Jhc2VzX21hbnkoc3RydWN0IGNvbW1pdCAqb25lLCBpbnQgbiwgc3RydWN0IGNvbW1pdCAqKnR3b3MpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdCA9IE5VTEw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChvbmUgPT0gdHdvc1tpXSkKKwkJCS8qCisJCQkgKiBXZSBkbyBub3QgbWFyayB0aGlzIGV2ZW4gd2l0aCBSRVNVTFQgc28gd2UgZG8gbm90CisJCQkgKiBoYXZlIHRvIGNsZWFuIGl0IHVwLgorCQkJICovCisJCQlyZXR1cm4gY29tbWl0X2xpc3RfaW5zZXJ0KG9uZSwgJnJlc3VsdCk7CisJfQorCisJaWYgKHBhcnNlX2NvbW1pdChvbmUpKQorCQlyZXR1cm4gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChwYXJzZV9jb21taXQodHdvc1tpXSkpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlsaXN0ID0gcGFpbnRfZG93bl90b19jb21tb24ob25lLCBuLCB0d29zKTsKKworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbmV4dCA9IGxpc3QtPm5leHQ7CisJCWlmICghKGxpc3QtPml0ZW0tPm9iamVjdC5mbGFncyAmIFNUQUxFKSkKKwkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKGxpc3QtPml0ZW0sICZyZXN1bHQpOworCQlmcmVlKGxpc3QpOworCQlsaXN0ID0gbmV4dDsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfb2N0b3B1c19tZXJnZV9iYXNlcyhzdHJ1Y3QgY29tbWl0X2xpc3QgKmluKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqaSwgKmosICprLCAqcmV0ID0gTlVMTDsKKworCWlmICghaW4pCisJCXJldHVybiByZXQ7CisKKwljb21taXRfbGlzdF9pbnNlcnQoaW4tPml0ZW0sICZyZXQpOworCisJZm9yIChpID0gaW4tPm5leHQ7IGk7IGkgPSBpLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbmV3ID0gTlVMTCwgKmVuZCA9IE5VTEw7CisKKwkJZm9yIChqID0gcmV0OyBqOyBqID0gai0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpiYXNlczsKKwkJCWJhc2VzID0gZ2V0X21lcmdlX2Jhc2VzKGktPml0ZW0sIGotPml0ZW0pOworCQkJaWYgKCFuZXcpCisJCQkJbmV3ID0gYmFzZXM7CisJCQllbHNlCisJCQkJZW5kLT5uZXh0ID0gYmFzZXM7CisJCQlmb3IgKGsgPSBiYXNlczsgazsgayA9IGstPm5leHQpCisJCQkJZW5kID0gazsKKwkJfQorCQlyZXQgPSBuZXc7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX3JlZHVuZGFudChzdHJ1Y3QgY29tbWl0ICoqYXJyYXksIGludCBjbnQpCit7CisJLyoKKwkgKiBTb21lIGNvbW1pdCBpbiB0aGUgYXJyYXkgbWF5IGJlIGFuIGFuY2VzdG9yIG9mCisJICogYW5vdGhlciBjb21taXQuICBNb3ZlIHN1Y2ggY29tbWl0IHRvIHRoZSBlbmQgb2YKKwkgKiB0aGUgYXJyYXksIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBjb21taXRzIHRoYXQKKwkgKiBhcmUgaW5kZXBlbmRlbnQgZnJvbSBlYWNoIG90aGVyLgorCSAqLworCXN0cnVjdCBjb21taXQgKip3b3JrOworCXVuc2lnbmVkIGNoYXIgKnJlZHVuZGFudDsKKwlpbnQgKmZpbGxlZF9pbmRleDsKKwlpbnQgaSwgaiwgZmlsbGVkOworCisJd29yayA9IHhjYWxsb2MoY250LCBzaXplb2YoKndvcmspKTsKKwlyZWR1bmRhbnQgPSB4Y2FsbG9jKGNudCwgMSk7CisJZmlsbGVkX2luZGV4ID0geG1hbGxvYyhzaXplb2YoKmZpbGxlZF9pbmRleCkgKiAoY250IC0gMSkpOworCisJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQorCQlwYXJzZV9jb21taXQoYXJyYXlbaV0pOworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbjsKKworCQlpZiAocmVkdW5kYW50W2ldKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IGZpbGxlZCA9IDA7IGogPCBjbnQ7IGorKykgeworCQkJaWYgKGkgPT0gaiB8fCByZWR1bmRhbnRbal0pCisJCQkJY29udGludWU7CisJCQlmaWxsZWRfaW5kZXhbZmlsbGVkXSA9IGo7CisJCQl3b3JrW2ZpbGxlZCsrXSA9IGFycmF5W2pdOworCQl9CisJCWNvbW1vbiA9IHBhaW50X2Rvd25fdG9fY29tbW9uKGFycmF5W2ldLCBmaWxsZWQsIHdvcmspOworCQlpZiAoYXJyYXlbaV0tPm9iamVjdC5mbGFncyAmIFBBUkVOVDIpCisJCQlyZWR1bmRhbnRbaV0gPSAxOworCQlmb3IgKGogPSAwOyBqIDwgZmlsbGVkOyBqKyspCisJCQlpZiAod29ya1tqXS0+b2JqZWN0LmZsYWdzICYgUEFSRU5UMSkKKwkJCQlyZWR1bmRhbnRbZmlsbGVkX2luZGV4W2pdXSA9IDE7CisJCWNsZWFyX2NvbW1pdF9tYXJrcyhhcnJheVtpXSwgYWxsX2ZsYWdzKTsKKwkJZm9yIChqID0gMDsgaiA8IGZpbGxlZDsgaisrKQorCQkJY2xlYXJfY29tbWl0X21hcmtzKHdvcmtbal0sIGFsbF9mbGFncyk7CisJCWZyZWVfY29tbWl0X2xpc3QoY29tbW9uKTsKKwl9CisKKwkvKiBOb3cgY29sbGVjdCB0aGUgcmVzdWx0ICovCisJbWVtY3B5KHdvcmssIGFycmF5LCBzaXplb2YoKmFycmF5KSAqIGNudCk7CisJZm9yIChpID0gZmlsbGVkID0gMDsgaSA8IGNudDsgaSsrKQorCQlpZiAoIXJlZHVuZGFudFtpXSkKKwkJCWFycmF5W2ZpbGxlZCsrXSA9IHdvcmtbaV07CisJZm9yIChqID0gZmlsbGVkLCBpID0gMDsgaSA8IGNudDsgaSsrKQorCQlpZiAocmVkdW5kYW50W2ldKQorCQkJYXJyYXlbaisrXSA9IHdvcmtbaV07CisJZnJlZSh3b3JrKTsKKwlmcmVlKHJlZHVuZGFudCk7CisJZnJlZShmaWxsZWRfaW5kZXgpOworCXJldHVybiBmaWxsZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9tZXJnZV9iYXNlc19tYW55XzAoc3RydWN0IGNvbW1pdCAqb25lLAorCQkJCQkJICBpbnQgbiwKKwkJCQkJCSAgc3RydWN0IGNvbW1pdCAqKnR3b3MsCisJCQkJCQkgIGludCBjbGVhbnVwKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKwlzdHJ1Y3QgY29tbWl0ICoqcnNsdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdDsKKwlpbnQgY250LCBpOworCisJcmVzdWx0ID0gbWVyZ2VfYmFzZXNfbWFueShvbmUsIG4sIHR3b3MpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKG9uZSA9PSB0d29zW2ldKQorCQkJcmV0dXJuIHJlc3VsdDsKKwl9CisJaWYgKCFyZXN1bHQgfHwgIXJlc3VsdC0+bmV4dCkgeworCQlpZiAoY2xlYW51cCkgeworCQkJY2xlYXJfY29tbWl0X21hcmtzKG9uZSwgYWxsX2ZsYWdzKTsKKwkJCWNsZWFyX2NvbW1pdF9tYXJrc19tYW55KG4sIHR3b3MsIGFsbF9mbGFncyk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKiBUaGVyZSBhcmUgbW9yZSB0aGFuIG9uZSAqLworCWNudCA9IGNvbW1pdF9saXN0X2NvdW50KHJlc3VsdCk7CisJcnNsdCA9IHhjYWxsb2MoY250LCBzaXplb2YoKnJzbHQpKTsKKwlmb3IgKGxpc3QgPSByZXN1bHQsIGkgPSAwOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwkJcnNsdFtpKytdID0gbGlzdC0+aXRlbTsKKwlmcmVlX2NvbW1pdF9saXN0KHJlc3VsdCk7CisKKwljbGVhcl9jb21taXRfbWFya3Mob25lLCBhbGxfZmxhZ3MpOworCWNsZWFyX2NvbW1pdF9tYXJrc19tYW55KG4sIHR3b3MsIGFsbF9mbGFncyk7CisKKwljbnQgPSByZW1vdmVfcmVkdW5kYW50KHJzbHQsIGNudCk7CisJcmVzdWx0ID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCisJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHJzbHRbaV0sICZyZXN1bHQpOworCWZyZWUocnNsdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfbWVyZ2VfYmFzZXNfbWFueShzdHJ1Y3QgY29tbWl0ICpvbmUsCisJCQkJCSBpbnQgbiwKKwkJCQkJIHN0cnVjdCBjb21taXQgKip0d29zKQoreworCXJldHVybiBnZXRfbWVyZ2VfYmFzZXNfbWFueV8wKG9uZSwgbiwgdHdvcywgMSk7Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqZ2V0X21lcmdlX2Jhc2VzX21hbnlfZGlydHkoc3RydWN0IGNvbW1pdCAqb25lLAorCQkJCQkgICAgICAgaW50IG4sCisJCQkJCSAgICAgICBzdHJ1Y3QgY29tbWl0ICoqdHdvcykKK3sKKwlyZXR1cm4gZ2V0X21lcmdlX2Jhc2VzX21hbnlfMChvbmUsIG4sIHR3b3MsIDApOworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9tZXJnZV9iYXNlcyhzdHJ1Y3QgY29tbWl0ICpvbmUsIHN0cnVjdCBjb21taXQgKnR3bykKK3sKKwlyZXR1cm4gZ2V0X21lcmdlX2Jhc2VzX21hbnlfMChvbmUsIDEsICZ0d28sIDEpOworfQorCisvKgorICogSXMgImNvbW1pdCIgYSBkZXNjZW5kYW50IG9mIG9uZSBvZiB0aGUgZWxlbWVudHMgb24gdGhlICJ3aXRoX2NvbW1pdCIgbGlzdD8KKyAqLworaW50IGlzX2Rlc2NlbmRhbnRfb2Yoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKndpdGhfY29tbWl0KQoreworCWlmICghd2l0aF9jb21taXQpCisJCXJldHVybiAxOworCXdoaWxlICh3aXRoX2NvbW1pdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpvdGhlcjsKKworCQlvdGhlciA9IHdpdGhfY29tbWl0LT5pdGVtOworCQl3aXRoX2NvbW1pdCA9IHdpdGhfY29tbWl0LT5uZXh0OworCQlpZiAoaW5fbWVyZ2VfYmFzZXMob3RoZXIsIGNvbW1pdCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJcyAiY29tbWl0IiBhbiBhbmNlc3RvciBvZiBvbmUgb2YgdGhlICJyZWZlcmVuY2VzIj8KKyAqLworaW50IGluX21lcmdlX2Jhc2VzX21hbnkoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgbnJfcmVmZXJlbmNlLCBzdHJ1Y3QgY29tbWl0ICoqcmVmZXJlbmNlKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqYmFzZXM7CisJaW50IHJldCA9IDAsIGk7CisKKwlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCXJldHVybiByZXQ7CisJZm9yIChpID0gMDsgaSA8IG5yX3JlZmVyZW5jZTsgaSsrKQorCQlpZiAocGFyc2VfY29tbWl0KHJlZmVyZW5jZVtpXSkpCisJCQlyZXR1cm4gcmV0OworCisJYmFzZXMgPSBwYWludF9kb3duX3RvX2NvbW1vbihjb21taXQsIG5yX3JlZmVyZW5jZSwgcmVmZXJlbmNlKTsKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBQQVJFTlQyKQorCQlyZXQgPSAxOworCWNsZWFyX2NvbW1pdF9tYXJrcyhjb21taXQsIGFsbF9mbGFncyk7CisJY2xlYXJfY29tbWl0X21hcmtzX21hbnkobnJfcmVmZXJlbmNlLCByZWZlcmVuY2UsIGFsbF9mbGFncyk7CisJZnJlZV9jb21taXRfbGlzdChiYXNlcyk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIElzICJjb21taXQiIGFuIGFuY2VzdG9yIG9mIChpLmUuIHJlYWNoYWJsZSBmcm9tKSB0aGUgInJlZmVyZW5jZSI/CisgKi8KK2ludCBpbl9tZXJnZV9iYXNlcyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXQgKnJlZmVyZW5jZSkKK3sKKwlyZXR1cm4gaW5fbWVyZ2VfYmFzZXNfbWFueShjb21taXQsIDEsICZyZWZlcmVuY2UpOworfQorCitzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlZHVjZV9oZWFkcyhzdHJ1Y3QgY29tbWl0X2xpc3QgKmhlYWRzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdCA9IE5VTEwsICoqdGFpbCA9ICZyZXN1bHQ7CisJc3RydWN0IGNvbW1pdCAqKmFycmF5OworCWludCBudW1faGVhZCwgaTsKKworCWlmICghaGVhZHMpCisJCXJldHVybiBOVUxMOworCisJLyogVW5pcXVpZnkgKi8KKwlmb3IgKHAgPSBoZWFkczsgcDsgcCA9IHAtPm5leHQpCisJCXAtPml0ZW0tPm9iamVjdC5mbGFncyAmPSB+U1RBTEU7CisJZm9yIChwID0gaGVhZHMsIG51bV9oZWFkID0gMDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPml0ZW0tPm9iamVjdC5mbGFncyAmIFNUQUxFKQorCQkJY29udGludWU7CisJCXAtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBTVEFMRTsKKwkJbnVtX2hlYWQrKzsKKwl9CisJYXJyYXkgPSB4Y2FsbG9jKG51bV9oZWFkLCBzaXplb2YoKmFycmF5KSk7CisJZm9yIChwID0gaGVhZHMsIGkgPSAwOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+aXRlbS0+b2JqZWN0LmZsYWdzICYgU1RBTEUpIHsKKwkJCWFycmF5W2krK10gPSBwLT5pdGVtOworCQkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzICY9IH5TVEFMRTsKKwkJfQorCX0KKwludW1faGVhZCA9IHJlbW92ZV9yZWR1bmRhbnQoYXJyYXksIG51bV9oZWFkKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2hlYWQ7IGkrKykKKwkJdGFpbCA9ICZjb21taXRfbGlzdF9pbnNlcnQoYXJyYXlbaV0sIHRhaWwpLT5uZXh0OworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGdwZ19zaWdfaGVhZGVyW10gPSAiZ3Bnc2lnIjsKK3N0YXRpYyBjb25zdCBpbnQgZ3BnX3NpZ19oZWFkZXJfbGVuID0gc2l6ZW9mKGdwZ19zaWdfaGVhZGVyKSAtIDE7CisKK3N0YXRpYyBpbnQgZG9fc2lnbl9jb21taXQoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICprZXlpZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNpZyA9IFNUUkJVRl9JTklUOworCWludCBpbnNwb3MsIGNvcHlwb3M7CisKKwkvKiBmaW5kIHRoZSBlbmQgb2YgdGhlIGhlYWRlciAqLworCWluc3BvcyA9IHN0cnN0cihidWYtPmJ1ZiwgIlxuXG4iKSAtIGJ1Zi0+YnVmICsgMTsKKworCWlmICgha2V5aWQgfHwgISprZXlpZCkKKwkJa2V5aWQgPSBnZXRfc2lnbmluZ19rZXkoKTsKKwlpZiAoc2lnbl9idWZmZXIoYnVmLCAmc2lnLCBrZXlpZCkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnNpZyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGNvcHlwb3MgPSAwOyBzaWcuYnVmW2NvcHlwb3NdOyApIHsKKwkJY29uc3QgY2hhciAqYm9sID0gc2lnLmJ1ZiArIGNvcHlwb3M7CisJCWNvbnN0IGNoYXIgKmVvbCA9IHN0cmNocm51bChib2wsICdcbicpOworCQlpbnQgbGVuID0gKGVvbCAtIGJvbCkgKyAhISplb2w7CisKKwkJaWYgKCFjb3B5cG9zKSB7CisJCQlzdHJidWZfaW5zZXJ0KGJ1ZiwgaW5zcG9zLCBncGdfc2lnX2hlYWRlciwgZ3BnX3NpZ19oZWFkZXJfbGVuKTsKKwkJCWluc3BvcyArPSBncGdfc2lnX2hlYWRlcl9sZW47CisJCX0KKwkJc3RyYnVmX2luc2VydChidWYsIGluc3BvcysrLCAiICIsIDEpOworCQlzdHJidWZfaW5zZXJ0KGJ1ZiwgaW5zcG9zLCBib2wsIGxlbik7CisJCWluc3BvcyArPSBsZW47CisJCWNvcHlwb3MgKz0gbGVuOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2lnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX3NpZ25lZF9jb21taXQoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJc3RydWN0IHN0cmJ1ZiAqcGF5bG9hZCwgc3RydWN0IHN0cmJ1ZiAqc2lnbmF0dXJlKQoreworCisJdW5zaWduZWQgbG9uZyBzaXplOworCWNvbnN0IGNoYXIgKmJ1ZmZlciA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgJnNpemUpOworCWludCBpbl9zaWduYXR1cmUsIHNhd19zaWduYXR1cmUgPSAtMTsKKwljb25zdCBjaGFyICpsaW5lLCAqdGFpbDsKKworCWxpbmUgPSBidWZmZXI7CisJdGFpbCA9IGJ1ZmZlciArIHNpemU7CisJaW5fc2lnbmF0dXJlID0gMDsKKwlzYXdfc2lnbmF0dXJlID0gMDsKKwl3aGlsZSAobGluZSA8IHRhaWwpIHsKKwkJY29uc3QgY2hhciAqc2lnID0gTlVMTDsKKwkJY29uc3QgY2hhciAqbmV4dCA9IG1lbWNocihsaW5lLCAnXG4nLCB0YWlsIC0gbGluZSk7CisKKwkJbmV4dCA9IG5leHQgPyBuZXh0ICsgMSA6IHRhaWw7CisJCWlmIChpbl9zaWduYXR1cmUgJiYgbGluZVswXSA9PSAnICcpCisJCQlzaWcgPSBsaW5lICsgMTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZSwgZ3BnX3NpZ19oZWFkZXIpICYmCisJCQkgbGluZVtncGdfc2lnX2hlYWRlcl9sZW5dID09ICcgJykKKwkJCXNpZyA9IGxpbmUgKyBncGdfc2lnX2hlYWRlcl9sZW4gKyAxOworCQlpZiAoc2lnKSB7CisJCQlzdHJidWZfYWRkKHNpZ25hdHVyZSwgc2lnLCBuZXh0IC0gc2lnKTsKKwkJCXNhd19zaWduYXR1cmUgPSAxOworCQkJaW5fc2lnbmF0dXJlID0gMTsKKwkJfSBlbHNlIHsKKwkJCWlmICgqbGluZSA9PSAnXG4nKQorCQkJCS8qIGR1bXAgdGhlIHdob2xlIHJlbWFpbmRlciBvZiB0aGUgYnVmZmVyICovCisJCQkJbmV4dCA9IHRhaWw7CisJCQlzdHJidWZfYWRkKHBheWxvYWQsIGxpbmUsIG5leHQgLSBsaW5lKTsKKwkJCWluX3NpZ25hdHVyZSA9IDA7CisJCX0KKwkJbGluZSA9IG5leHQ7CisJfQorCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWZmZXIpOworCXJldHVybiBzYXdfc2lnbmF0dXJlOworfQorCitpbnQgcmVtb3ZlX3NpZ25hdHVyZShzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY29uc3QgY2hhciAqbGluZSA9IGJ1Zi0+YnVmOworCWNvbnN0IGNoYXIgKnRhaWwgPSBidWYtPmJ1ZiArIGJ1Zi0+bGVuOworCWludCBpbl9zaWduYXR1cmUgPSAwOworCWNvbnN0IGNoYXIgKnNpZ19zdGFydCA9IE5VTEw7CisJY29uc3QgY2hhciAqc2lnX2VuZCA9IE5VTEw7CisKKwl3aGlsZSAobGluZSA8IHRhaWwpIHsKKwkJY29uc3QgY2hhciAqbmV4dCA9IG1lbWNocihsaW5lLCAnXG4nLCB0YWlsIC0gbGluZSk7CisJCW5leHQgPSBuZXh0ID8gbmV4dCArIDEgOiB0YWlsOworCisJCWlmIChpbl9zaWduYXR1cmUgJiYgbGluZVswXSA9PSAnICcpCisJCQlzaWdfZW5kID0gbmV4dDsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgobGluZSwgZ3BnX3NpZ19oZWFkZXIpICYmCisJCQkgbGluZVtncGdfc2lnX2hlYWRlcl9sZW5dID09ICcgJykgeworCQkJc2lnX3N0YXJ0ID0gbGluZTsKKwkJCXNpZ19lbmQgPSBuZXh0OworCQkJaW5fc2lnbmF0dXJlID0gMTsKKwkJfSBlbHNlIHsKKwkJCWlmICgqbGluZSA9PSAnXG4nKQorCQkJCS8qIGR1bXAgdGhlIHdob2xlIHJlbWFpbmRlciBvZiB0aGUgYnVmZmVyICovCisJCQkJbmV4dCA9IHRhaWw7CisJCQlpbl9zaWduYXR1cmUgPSAwOworCQl9CisJCWxpbmUgPSBuZXh0OworCX0KKworCWlmIChzaWdfc3RhcnQpCisJCXN0cmJ1Zl9yZW1vdmUoYnVmLCBzaWdfc3RhcnQgLSBidWYtPmJ1Ziwgc2lnX2VuZCAtIHNpZ19zdGFydCk7CisKKwlyZXR1cm4gc2lnX3N0YXJ0ICE9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9zaWduZWRfdGFnKHN0cnVjdCBjb21taXQgKnBhcmVudCwgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKioqdGFpbCkKK3sKKwlzdHJ1Y3QgbWVyZ2VfcmVtb3RlX2Rlc2MgKmRlc2M7CisJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKm1lcmdldGFnOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemUsIGxlbjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlkZXNjID0gbWVyZ2VfcmVtb3RlX3V0aWwocGFyZW50KTsKKwlpZiAoIWRlc2MgfHwgIWRlc2MtPm9iaikKKwkJcmV0dXJuOworCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKGRlc2MtPm9iai0+c2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZiB8fCB0eXBlICE9IE9CSl9UQUcpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJbGVuID0gcGFyc2Vfc2lnbmF0dXJlKGJ1Ziwgc2l6ZSk7CisJaWYgKHNpemUgPT0gbGVuKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCS8qCisJICogV2UgY291bGQgdmVyaWZ5IHRoaXMgc2lnbmF0dXJlIGFuZCBlaXRoZXIgb21pdCB0aGUgdGFnIHdoZW4KKwkgKiBpdCBkb2VzIG5vdCB2YWxpZGF0ZSwgYnV0IHRoZSBpbnRlZ3JhdG9yIG1heSBub3QgaGF2ZSB0aGUKKwkgKiBwdWJsaWMga2V5IG9mIHRoZSBzaWduZXIgb2YgdGhlIHRhZyBoZSBpcyBtZXJnaW5nLCB3aGlsZSBhCisJICogbGF0ZXIgYXVkaXRvciBtYXkgaGF2ZSBpdCB3aGlsZSBhdWRpdGluZywgc28gbGV0J3Mgbm90IHJ1bgorCSAqIHZlcmlmeS1zaWduZWQtYnVmZmVyIGhlcmUgZm9yIG5vdy4uLgorCSAqCisJICogaWYgKHZlcmlmeV9zaWduZWRfYnVmZmVyKGJ1ZiwgbGVuLCBidWYgKyBsZW4sIHNpemUgLSBsZW4sIC4uLikpCisJICoJd2Fybigid2FybmluZzogc2lnbmVkIHRhZyB1bnZlcmlmaWVkLiIpOworCSAqLworCW1lcmdldGFnID0geGNhbGxvYygxLCBzaXplb2YoKm1lcmdldGFnKSk7CisJbWVyZ2V0YWctPmtleSA9IHhzdHJkdXAoIm1lcmdldGFnIik7CisJbWVyZ2V0YWctPnZhbHVlID0gYnVmOworCW1lcmdldGFnLT5sZW4gPSBzaXplOworCisJKip0YWlsID0gbWVyZ2V0YWc7CisJKnRhaWwgPSAmbWVyZ2V0YWctPm5leHQ7CisJcmV0dXJuOworCitmcmVlX3JldHVybjoKKwlmcmVlKGJ1Zik7Cit9CisKK2ludCBjaGVja19jb21taXRfc2lnbmF0dXJlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBheWxvYWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNpZ25hdHVyZSA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAxOworCisJc2lnYy0+cmVzdWx0ID0gJ04nOworCisJaWYgKHBhcnNlX3NpZ25lZF9jb21taXQoY29tbWl0LCAmcGF5bG9hZCwgJnNpZ25hdHVyZSkgPD0gMCkKKwkJZ290byBvdXQ7CisJcmV0ID0gY2hlY2tfc2lnbmF0dXJlKHBheWxvYWQuYnVmLCBwYXlsb2FkLmxlbiwgc2lnbmF0dXJlLmJ1ZiwKKwkJc2lnbmF0dXJlLmxlbiwgc2lnYyk7CisKKyBvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnBheWxvYWQpOworCXN0cmJ1Zl9yZWxlYXNlKCZzaWduYXR1cmUpOworCisJcmV0dXJuIHJldDsKK30KKworCisKK3ZvaWQgYXBwZW5kX21lcmdlX3RhZ19oZWFkZXJzKHN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cywKKwkJCSAgICAgIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICoqKnRhaWwpCit7CisJd2hpbGUgKHBhcmVudHMpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJaGFuZGxlX3NpZ25lZF90YWcocGFyZW50LCB0YWlsKTsKKwkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfZXh0cmFfaGVhZGVyKHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwKKwkJCSAgICAgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhKQoreworCXN0cmJ1Zl9hZGRzdHIoYnVmZmVyLCBleHRyYS0+a2V5KTsKKwlpZiAoZXh0cmEtPmxlbikKKwkJc3RyYnVmX2FkZF9saW5lcyhidWZmZXIsICIgIiwgZXh0cmEtPnZhbHVlLCBleHRyYS0+bGVuKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRjaChidWZmZXIsICdcbicpOworfQorCitzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqcmVhZF9jb21taXRfZXh0cmFfaGVhZGVycyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkJCQkgICAgICBjb25zdCBjaGFyICoqZXhjbHVkZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwljb25zdCBjaGFyICpidWZmZXIgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsICZzaXplKTsKKwlleHRyYSA9IHJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcl9saW5lcyhidWZmZXIsIHNpemUsIGV4Y2x1ZGUpOworCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWZmZXIpOworCXJldHVybiBleHRyYTsKK30KKwordm9pZCBmb3JfZWFjaF9tZXJnZXRhZyhlYWNoX21lcmdldGFnX2ZuIGZuLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhLCAqdG9fZnJlZTsKKworCXRvX2ZyZWUgPSByZWFkX2NvbW1pdF9leHRyYV9oZWFkZXJzKGNvbW1pdCwgTlVMTCk7CisJZm9yIChleHRyYSA9IHRvX2ZyZWU7IGV4dHJhOyBleHRyYSA9IGV4dHJhLT5uZXh0KSB7CisJCWlmIChzdHJjbXAoZXh0cmEtPmtleSwgIm1lcmdldGFnIikpCisJCQljb250aW51ZTsgLyogbm90IGEgbWVyZ2UgdGFnICovCisJCWZuKGNvbW1pdCwgZXh0cmEsIGRhdGEpOworCX0KKwlmcmVlX2NvbW1pdF9leHRyYV9oZWFkZXJzKHRvX2ZyZWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzdGFuZGFyZF9oZWFkZXJfZmllbGQoY29uc3QgY2hhciAqZmllbGQsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuICgobGVuID09IDQgJiYgIW1lbWNtcChmaWVsZCwgInRyZWUgIiwgNSkpIHx8CisJCShsZW4gPT0gNiAmJiAhbWVtY21wKGZpZWxkLCAicGFyZW50ICIsIDcpKSB8fAorCQkobGVuID09IDYgJiYgIW1lbWNtcChmaWVsZCwgImF1dGhvciAiLCA3KSkgfHwKKwkJKGxlbiA9PSA5ICYmICFtZW1jbXAoZmllbGQsICJjb21taXR0ZXIgIiwgMTApKSB8fAorCQkobGVuID09IDggJiYgIW1lbWNtcChmaWVsZCwgImVuY29kaW5nICIsIDkpKSk7Cit9CisKK3N0YXRpYyBpbnQgZXhjbHVkZWRfaGVhZGVyX2ZpZWxkKGNvbnN0IGNoYXIgKmZpZWxkLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICoqZXhjbHVkZSkKK3sKKwlpZiAoIWV4Y2x1ZGUpCisJCXJldHVybiAwOworCisJd2hpbGUgKCpleGNsdWRlKSB7CisJCXNpemVfdCB4bGVuID0gc3RybGVuKCpleGNsdWRlKTsKKwkJaWYgKGxlbiA9PSB4bGVuICYmCisJCSAgICAhbWVtY21wKGZpZWxkLCAqZXhjbHVkZSwgeGxlbikgJiYgZmllbGRbeGxlbl0gPT0gJyAnKQorCQkJcmV0dXJuIDE7CisJCWV4Y2x1ZGUrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqcmVhZF9jb21taXRfZXh0cmFfaGVhZGVyX2xpbmVzKAorCWNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsCisJY29uc3QgY2hhciAqKmV4Y2x1ZGUpCit7CisJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhID0gTlVMTCwgKip0YWlsID0gJmV4dHJhLCAqaXQgPSBOVUxMOworCWNvbnN0IGNoYXIgKmxpbmUsICpuZXh0LCAqZW9mLCAqZW9iOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKGxpbmUgPSBidWZmZXIsIGVvYiA9IGxpbmUgKyBzaXplOworCSAgICAgbGluZSA8IGVvYiAmJiAqbGluZSAhPSAnXG4nOworCSAgICAgbGluZSA9IG5leHQpIHsKKwkJbmV4dCA9IG1lbWNocihsaW5lLCAnXG4nLCBlb2IgLSBsaW5lKTsKKwkJbmV4dCA9IG5leHQgPyBuZXh0ICsgMSA6IGVvYjsKKwkJaWYgKCpsaW5lID09ICcgJykgeworCQkJLyogY29udGludWF0aW9uICovCisJCQlpZiAoaXQpCisJCQkJc3RyYnVmX2FkZCgmYnVmLCBsaW5lICsgMSwgbmV4dCAtIChsaW5lICsgMSkpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGl0KQorCQkJaXQtPnZhbHVlID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmaXQtPmxlbik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJaXQgPSBOVUxMOworCisJCWVvZiA9IHN0cmNocihsaW5lLCAnICcpOworCQlpZiAobmV4dCA8PSBlb2YpCisJCQllb2YgPSBuZXh0OworCisJCWlmIChzdGFuZGFyZF9oZWFkZXJfZmllbGQobGluZSwgZW9mIC0gbGluZSkgfHwKKwkJICAgIGV4Y2x1ZGVkX2hlYWRlcl9maWVsZChsaW5lLCBlb2YgLSBsaW5lLCBleGNsdWRlKSkKKwkJCWNvbnRpbnVlOworCisJCWl0ID0geGNhbGxvYygxLCBzaXplb2YoKml0KSk7CisJCWl0LT5rZXkgPSB4bWVtZHVweihsaW5lLCBlb2YtbGluZSk7CisJCSp0YWlsID0gaXQ7CisJCXRhaWwgPSAmaXQtPm5leHQ7CisJCWlmIChlb2YgKyAxIDwgbmV4dCkKKwkJCXN0cmJ1Zl9hZGQoJmJ1ZiwgZW9mICsgMSwgbmV4dCAtIChlb2YgKyAxKSk7CisJfQorCWlmIChpdCkKKwkJaXQtPnZhbHVlID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmaXQtPmxlbik7CisJcmV0dXJuIGV4dHJhOworfQorCit2b2lkIGZyZWVfY29tbWl0X2V4dHJhX2hlYWRlcnMoc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhKQoreworCXdoaWxlIChleHRyYSkgeworCQlzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqbmV4dCA9IGV4dHJhLT5uZXh0OworCQlmcmVlKGV4dHJhLT5rZXkpOworCQlmcmVlKGV4dHJhLT52YWx1ZSk7CisJCWZyZWUoZXh0cmEpOworCQlleHRyYSA9IG5leHQ7CisJfQorfQorCitpbnQgY29tbWl0X3RyZWUoY29uc3QgY2hhciAqbXNnLCBzaXplX3QgbXNnX2xlbiwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZSwKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLCB1bnNpZ25lZCBjaGFyICpyZXQsCisJCWNvbnN0IGNoYXIgKmF1dGhvciwgY29uc3QgY2hhciAqc2lnbl9jb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhID0gTlVMTCwgKip0YWlsID0gJmV4dHJhOworCWludCByZXN1bHQ7CisKKwlhcHBlbmRfbWVyZ2VfdGFnX2hlYWRlcnMocGFyZW50cywgJnRhaWwpOworCXJlc3VsdCA9IGNvbW1pdF90cmVlX2V4dGVuZGVkKG1zZywgbXNnX2xlbiwgdHJlZSwgcGFyZW50cywgcmV0LAorCQkJCSAgICAgIGF1dGhvciwgc2lnbl9jb21taXQsIGV4dHJhKTsKKwlmcmVlX2NvbW1pdF9leHRyYV9oZWFkZXJzKGV4dHJhKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IGZpbmRfaW52YWxpZF91dGY4KGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgb2Zmc2V0ID0gMDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1heF9jb2RlcG9pbnRbXSA9IHsKKwkJMHg3ZiwgMHg3ZmYsIDB4ZmZmZiwgMHgxMGZmZmYKKwl9OworCisJd2hpbGUgKGxlbikgeworCQl1bnNpZ25lZCBjaGFyIGMgPSAqYnVmKys7CisJCWludCBieXRlcywgYmFkX29mZnNldDsKKwkJdW5zaWduZWQgaW50IGNvZGVwb2ludDsKKwkJdW5zaWduZWQgaW50IG1pbl92YWwsIG1heF92YWw7CisKKwkJbGVuLS07CisJCW9mZnNldCsrOworCisJCS8qIFNpbXBsZSBVUy1BU0NJST8gTm8gd29ycmllcy4gKi8KKwkJaWYgKGMgPCAweDgwKQorCQkJY29udGludWU7CisKKwkJYmFkX29mZnNldCA9IG9mZnNldC0xOworCisJCS8qCisJCSAqIENvdW50IGhvdyBtYW55IG1vcmUgaGlnaCBiaXRzIHNldDogdGhhdCdzIGhvdworCQkgKiBtYW55IG1vcmUgYnl0ZXMgdGhpcyBzZXF1ZW5jZSBzaG91bGQgaGF2ZS4KKwkJICovCisJCWJ5dGVzID0gMDsKKwkJd2hpbGUgKGMgJiAweDQwKSB7CisJCQljIDw8PSAxOworCQkJYnl0ZXMrKzsKKwkJfQorCisJCS8qCisJCSAqIE11c3QgYmUgYmV0d2VlbiAxIGFuZCAzIG1vcmUgYnl0ZXMuICBMb25nZXIgc2VxdWVuY2VzIHJlc3VsdCBpbgorCQkgKiBjb2RlcG9pbnRzIGJleW9uZCBVKzEwRkZGRiwgd2hpY2ggYXJlIGd1YXJhbnRlZWQgbmV2ZXIgdG8gZXhpc3QuCisJCSAqLworCQlpZiAoYnl0ZXMgPCAxIHx8IDMgPCBieXRlcykKKwkJCXJldHVybiBiYWRfb2Zmc2V0OworCisJCS8qIERvIHdlICpoYXZlKiB0aGF0IG1hbnkgYnl0ZXM/ICovCisJCWlmIChsZW4gPCBieXRlcykKKwkJCXJldHVybiBiYWRfb2Zmc2V0OworCisJCS8qCisJCSAqIFBsYWNlIHRoZSBlbmNvZGVkIGJpdHMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdmFsdWUgYW5kIGNvbXB1dGUgdGhlCisJCSAqIHZhbGlkIHJhbmdlLgorCQkgKi8KKwkJY29kZXBvaW50ID0gKGMgJiAweDdmKSA+PiBieXRlczsKKwkJbWluX3ZhbCA9IG1heF9jb2RlcG9pbnRbYnl0ZXMtMV0gKyAxOworCQltYXhfdmFsID0gbWF4X2NvZGVwb2ludFtieXRlc107CisKKwkJb2Zmc2V0ICs9IGJ5dGVzOworCQlsZW4gLT0gYnl0ZXM7CisKKwkJLyogQW5kIHZlcmlmeSB0aGF0IHRoZXkgYXJlIGdvb2QgY29udGludWF0aW9uIGJ5dGVzICovCisJCWRvIHsKKwkJCWNvZGVwb2ludCA8PD0gNjsKKwkJCWNvZGVwb2ludCB8PSAqYnVmICYgMHgzZjsKKwkJCWlmICgoKmJ1ZisrICYgMHhjMCkgIT0gMHg4MCkKKwkJCQlyZXR1cm4gYmFkX29mZnNldDsKKwkJfSB3aGlsZSAoLS1ieXRlcyk7CisKKwkJLyogUmVqZWN0IGNvZGVwb2ludHMgdGhhdCBhcmUgb3V0IG9mIHJhbmdlIGZvciB0aGUgc2VxdWVuY2UgbGVuZ3RoLiAqLworCQlpZiAoY29kZXBvaW50IDwgbWluX3ZhbCB8fCBjb2RlcG9pbnQgPiBtYXhfdmFsKQorCQkJcmV0dXJuIGJhZF9vZmZzZXQ7CisJCS8qIFN1cnJvZ2F0ZXMgYXJlIG9ubHkgZm9yIFVURi0xNiBhbmQgY2Fubm90IGJlIGVuY29kZWQgaW4gVVRGLTguICovCisJCWlmICgoY29kZXBvaW50ICYgMHgxZmY4MDApID09IDB4ZDgwMCkKKwkJCXJldHVybiBiYWRfb2Zmc2V0OworCQkvKiBVK3h4RkZGRSBhbmQgVSt4eEZGRkYgYXJlIGd1YXJhbnRlZWQgbm9uLWNoYXJhY3RlcnMuICovCisJCWlmICgoY29kZXBvaW50ICYgMHhmZmZlKSA9PSAweGZmZmUpCisJCQlyZXR1cm4gYmFkX29mZnNldDsKKwkJLyogU28gYXJlIGFueXRoaW5nIGluIHRoZSByYW5nZSBVK0ZERDAuLlUrRkRFRi4gKi8KKwkJaWYgKGNvZGVwb2ludCA+PSAweGZkZDAgJiYgY29kZXBvaW50IDw9IDB4ZmRlZikKKwkJCXJldHVybiBiYWRfb2Zmc2V0OworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBUaGlzIHZlcmlmaWVzIHRoYXQgdGhlIGJ1ZmZlciBpcyBpbiBwcm9wZXIgdXRmOCBmb3JtYXQuCisgKgorICogSWYgaXQgaXNuJ3QsIGl0IGFzc3VtZXMgYW55IG5vbi11dGY4IGNoYXJhY3RlcnMgYXJlIExhdGluMSwKKyAqIGFuZCBkb2VzIHRoZSBjb252ZXJzaW9uLgorICovCitzdGF0aWMgaW50IHZlcmlmeV91dGY4KHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpbnQgb2sgPSAxOworCWxvbmcgcG9zID0gMDsKKworCWZvciAoOzspIHsKKwkJaW50IGJhZDsKKwkJdW5zaWduZWQgY2hhciBjOworCQl1bnNpZ25lZCBjaGFyIHJlcGxhY2VbMl07CisKKwkJYmFkID0gZmluZF9pbnZhbGlkX3V0ZjgoYnVmLT5idWYgKyBwb3MsIGJ1Zi0+bGVuIC0gcG9zKTsKKwkJaWYgKGJhZCA8IDApCisJCQlyZXR1cm4gb2s7CisJCXBvcyArPSBiYWQ7CisJCW9rID0gMDsKKwkJYyA9IGJ1Zi0+YnVmW3Bvc107CisJCXN0cmJ1Zl9yZW1vdmUoYnVmLCBwb3MsIDEpOworCisJCS8qIFdlIGtub3cgJ2MnIG11c3QgYmUgaW4gdGhlIHJhbmdlIDEyOC0yNTUgKi8KKwkJcmVwbGFjZVswXSA9IDB4YzAgKyAoYyA+PiA2KTsKKwkJcmVwbGFjZVsxXSA9IDB4ODAgKyAoYyAmIDB4M2YpOworCQlzdHJidWZfaW5zZXJ0KGJ1ZiwgcG9zLCByZXBsYWNlLCAyKTsKKwkJcG9zICs9IDI7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciBjb21taXRfdXRmOF93YXJuW10gPQorIldhcm5pbmc6IGNvbW1pdCBtZXNzYWdlIGRpZCBub3QgY29uZm9ybSB0byBVVEYtOC5cbiIKKyJZb3UgbWF5IHdhbnQgdG8gYW1lbmQgaXQgYWZ0ZXIgZml4aW5nIHRoZSBtZXNzYWdlLCBvciBzZXQgdGhlIGNvbmZpZ1xuIgorInZhcmlhYmxlIGkxOG4uY29tbWl0ZW5jb2RpbmcgdG8gdGhlIGVuY29kaW5nIHlvdXIgcHJvamVjdCB1c2VzLlxuIjsKKworaW50IGNvbW1pdF90cmVlX2V4dGVuZGVkKGNvbnN0IGNoYXIgKm1zZywgc2l6ZV90IG1zZ19sZW4sCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZSwKKwkJCSBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsIHVuc2lnbmVkIGNoYXIgKnJldCwKKwkJCSBjb25zdCBjaGFyICphdXRob3IsIGNvbnN0IGNoYXIgKnNpZ25fY29tbWl0LAorCQkJIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSkKK3sKKwlpbnQgcmVzdWx0OworCWludCBlbmNvZGluZ19pc191dGY4OworCXN0cnVjdCBzdHJidWYgYnVmZmVyOworCisJYXNzZXJ0X3NoYTFfdHlwZSh0cmVlLCBPQkpfVFJFRSk7CisKKwlpZiAobWVtY2hyKG1zZywgJ1wwJywgbXNnX2xlbikpCisJCXJldHVybiBlcnJvcigiYSBOVUwgYnl0ZSBpbiBjb21taXQgbG9nIG1lc3NhZ2Ugbm90IGFsbG93ZWQuIik7CisKKwkvKiBOb3QgaGF2aW5nIGkxOG4uY29tbWl0ZW5jb2RpbmcgaXMgdGhlIHNhbWUgYXMgaGF2aW5nIHV0Zi04ICovCisJZW5jb2RpbmdfaXNfdXRmOCA9IGlzX2VuY29kaW5nX3V0ZjgoZ2l0X2NvbW1pdF9lbmNvZGluZyk7CisKKwlzdHJidWZfaW5pdCgmYnVmZmVyLCA4MTkyKTsgLyogc2hvdWxkIGF2b2lkIHJlYWxsb2NzIGZvciB0aGUgaGVhZGVycyAqLworCXN0cmJ1Zl9hZGRmKCZidWZmZXIsICJ0cmVlICVzXG4iLCBzaGExX3RvX2hleCh0cmVlKSk7CisKKwkvKgorCSAqIE5PVEUhIFRoaXMgb3JkZXJpbmcgbWVhbnMgdGhhdCB0aGUgc2FtZSBleGFjdCB0cmVlIG1lcmdlZCB3aXRoIGEKKwkgKiBkaWZmZXJlbnQgb3JkZXIgb2YgcGFyZW50cyB3aWxsIGJlIGEgX2RpZmZlcmVudF8gY2hhbmdlc2V0IGV2ZW4KKwkgKiBpZiBldmVyeXRoaW5nIGVsc2Ugc3RheXMgdGhlIHNhbWUuCisJICovCisJd2hpbGUgKHBhcmVudHMpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0ID0gcGFyZW50cy0+bmV4dDsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKworCQlzdHJidWZfYWRkZigmYnVmZmVyLCAicGFyZW50ICVzXG4iLAorCQkJICAgIHNoYTFfdG9faGV4KHBhcmVudC0+b2JqZWN0LnNoYTEpKTsKKwkJZnJlZShwYXJlbnRzKTsKKwkJcGFyZW50cyA9IG5leHQ7CisJfQorCisJLyogUGVyc29uL2RhdGUgaW5mb3JtYXRpb24gKi8KKwlpZiAoIWF1dGhvcikKKwkJYXV0aG9yID0gZ2l0X2F1dGhvcl9pbmZvKElERU5UX1NUUklDVCk7CisJc3RyYnVmX2FkZGYoJmJ1ZmZlciwgImF1dGhvciAlc1xuIiwgYXV0aG9yKTsKKwlzdHJidWZfYWRkZigmYnVmZmVyLCAiY29tbWl0dGVyICVzXG4iLCBnaXRfY29tbWl0dGVyX2luZm8oSURFTlRfU1RSSUNUKSk7CisJaWYgKCFlbmNvZGluZ19pc191dGY4KQorCQlzdHJidWZfYWRkZigmYnVmZmVyLCAiZW5jb2RpbmcgJXNcbiIsIGdpdF9jb21taXRfZW5jb2RpbmcpOworCisJd2hpbGUgKGV4dHJhKSB7CisJCWFkZF9leHRyYV9oZWFkZXIoJmJ1ZmZlciwgZXh0cmEpOworCQlleHRyYSA9IGV4dHJhLT5uZXh0OworCX0KKwlzdHJidWZfYWRkY2goJmJ1ZmZlciwgJ1xuJyk7CisKKwkvKiBBbmQgYWRkIHRoZSBjb21tZW50ICovCisJc3RyYnVmX2FkZCgmYnVmZmVyLCBtc2csIG1zZ19sZW4pOworCisJLyogQW5kIGNoZWNrIHRoZSBlbmNvZGluZyAqLworCWlmIChlbmNvZGluZ19pc191dGY4ICYmICF2ZXJpZnlfdXRmOCgmYnVmZmVyKSkKKwkJZnByaW50ZihzdGRlcnIsIGNvbW1pdF91dGY4X3dhcm4pOworCisJaWYgKHNpZ25fY29tbWl0ICYmIGRvX3NpZ25fY29tbWl0KCZidWZmZXIsIHNpZ25fY29tbWl0KSkKKwkJcmV0dXJuIC0xOworCisJcmVzdWx0ID0gd3JpdGVfc2hhMV9maWxlKGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4sIGNvbW1pdF90eXBlLCByZXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0cnVjdCBjb21taXQgKmdldF9tZXJnZV9wYXJlbnQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWlmIChnZXRfc2hhMShuYW1lLCBvaWQuaGFzaCkpCisJCXJldHVybiBOVUxMOworCW9iaiA9IHBhcnNlX29iamVjdChvaWQuaGFzaCk7CisJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilwZWVsX3RvX3R5cGUobmFtZSwgMCwgb2JqLCBPQkpfQ09NTUlUKTsKKwlpZiAoY29tbWl0ICYmICFjb21taXQtPnV0aWwpIHsKKwkJc3RydWN0IG1lcmdlX3JlbW90ZV9kZXNjICpkZXNjOworCQlkZXNjID0geG1hbGxvYyhzaXplb2YoKmRlc2MpKTsKKwkJZGVzYy0+b2JqID0gb2JqOworCQlkZXNjLT5uYW1lID0gc3RyZHVwKG5hbWUpOworCQljb21taXQtPnV0aWwgPSBkZXNjOworCX0KKwlyZXR1cm4gY29tbWl0OworfQorCisvKgorICogQXBwZW5kIGEgY29tbWl0IHRvIHRoZSBlbmQgb2YgdGhlIGNvbW1pdF9saXN0LgorICoKKyAqIG5leHQgc3RhcnRzIGJ5IHBvaW50aW5nIHRvIHRoZSB2YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSBoZWFkIG9mIGFuCisgKiBlbXB0eSBjb21taXRfbGlzdCwgYW5kIGlzIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlICJuZXh0IiBmaWVsZCBvZgorICogdGhlIGxhc3QgaXRlbSBvbiB0aGUgbGlzdCBhcyBuZXcgY29tbWl0cyBhcmUgYXBwZW5kZWQuCisgKgorICogVXNhZ2UgZXhhbXBsZToKKyAqCisgKiAgICAgc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OworICogICAgIHN0cnVjdCBjb21taXRfbGlzdCAqKm5leHQgPSAmbGlzdDsKKyAqCisgKiAgICAgbmV4dCA9IGNvbW1pdF9saXN0X2FwcGVuZChjMSwgbmV4dCk7CisgKiAgICAgbmV4dCA9IGNvbW1pdF9saXN0X2FwcGVuZChjMiwgbmV4dCk7CisgKiAgICAgYXNzZXJ0KGNvbW1pdF9saXN0X2NvdW50KGxpc3QpID09IDIpOworICogICAgIHJldHVybiBsaXN0OworICovCitzdHJ1Y3QgY29tbWl0X2xpc3QgKipjb21taXRfbGlzdF9hcHBlbmQoc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKipuZXh0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbmV3ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbW1pdF9saXN0KSk7CisJbmV3LT5pdGVtID0gY29tbWl0OworCSpuZXh0ID0gbmV3OworCW5ldy0+bmV4dCA9IE5VTEw7CisJcmV0dXJuICZuZXctPm5leHQ7Cit9CisKK3ZvaWQgcHJpbnRfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkgICAgICAgY29uc3QgY2hhciAqZm9ybWF0X2N1ciwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdF9sYXN0KQoreworCWZvciAoIDsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKwkJY29uc3QgY2hhciAqZm9ybWF0ID0gbGlzdC0+bmV4dCA/IGZvcm1hdF9jdXIgOiBmb3JtYXRfbGFzdDsKKwkJcHJpbnRmKGZvcm1hdCwgc2hhMV90b19oZXgobGlzdC0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKKwl9Cit9CisKK2NvbnN0IGNoYXIgKmZpbmRfY29tbWl0X2hlYWRlcihjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKmtleSwgc2l6ZV90ICpvdXRfbGVuKQoreworCWludCBrZXlfbGVuID0gc3RybGVuKGtleSk7CisJY29uc3QgY2hhciAqbGluZSA9IG1zZzsKKworCXdoaWxlIChsaW5lKSB7CisJCWNvbnN0IGNoYXIgKmVvbCA9IHN0cmNocm51bChsaW5lLCAnXG4nKTsKKworCQlpZiAobGluZSA9PSBlb2wpCisJCQlyZXR1cm4gTlVMTDsKKworCQlpZiAoZW9sIC0gbGluZSA+IGtleV9sZW4gJiYKKwkJICAgICFzdHJuY21wKGxpbmUsIGtleSwga2V5X2xlbikgJiYKKwkJICAgIGxpbmVba2V5X2xlbl0gPT0gJyAnKSB7CisJCQkqb3V0X2xlbiA9IGVvbCAtIGxpbmUgLSBrZXlfbGVuIC0gMTsKKwkJCXJldHVybiBsaW5lICsga2V5X2xlbiArIDE7CisJCX0KKwkJbGluZSA9ICplb2wgPyBlb2wgKyAxIDogTlVMTDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJbnNwZWN0IHNiIGFuZCBkZXRlcm1pbmUgdGhlIHRydWUgImVuZCIgb2YgdGhlIGxvZyBtZXNzYWdlLCBpbgorICogb3JkZXIgdG8gZmluZCB3aGVyZSB0byBwdXQgYSBuZXcgU2lnbmVkLW9mZi1ieTogbGluZS4gIElnbm9yZWQgYXJlCisgKiB0cmFpbGluZyBjb21tZW50IGxpbmVzIGFuZCBibGFuayBsaW5lcywgYW5kIGFsc28gdGhlIHRyYWRpdGlvbmFsCisgKiAiQ29uZmxpY3RzOiIgYmxvY2sgdGhhdCBpcyBub3QgY29tbWVudGVkIG91dCwgc28gdGhhdCB3ZSBjYW4gdXNlCisgKiAiZ2l0IGNvbW1pdCAtcyAtLWFtZW5kIiBvbiBhbiBleGlzdGluZyBjb21taXQgdGhhdCBmb3Jnb3QgdG8gcmVtb3ZlCisgKiBpdC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgdGFpbCB0byBpZ25vcmUsIHRvIGJlIGZlZCBhcworICogdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gYXBwZW5kX3NpZ25vZmYoKS4KKyAqLworaW50IGlnbm9yZV9ub25fdHJhaWxlcihzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgYm9jID0gMDsKKwlpbnQgYm9sID0gMDsKKwlpbnQgaW5fb2xkX2NvbmZsaWN0c19ibG9jayA9IDA7CisKKwl3aGlsZSAoYm9sIDwgc2ItPmxlbikgeworCQljaGFyICpuZXh0X2xpbmU7CisKKwkJaWYgKCEobmV4dF9saW5lID0gbWVtY2hyKHNiLT5idWYgKyBib2wsICdcbicsIHNiLT5sZW4gLSBib2wpKSkKKwkJCW5leHRfbGluZSA9IHNiLT5idWYgKyBzYi0+bGVuOworCQllbHNlCisJCQluZXh0X2xpbmUrKzsKKworCQlpZiAoc2ItPmJ1Zltib2xdID09IGNvbW1lbnRfbGluZV9jaGFyIHx8IHNiLT5idWZbYm9sXSA9PSAnXG4nKSB7CisJCQkvKiBpcyB0aGlzIHRoZSBmaXJzdCBvZiB0aGUgcnVuIG9mIGNvbW1lbnRzPyAqLworCQkJaWYgKCFib2MpCisJCQkJYm9jID0gYm9sOworCQkJLyogb3RoZXJ3aXNlLCBpdCBpcyBqdXN0IGNvbnRpbnVpbmcgKi8KKwkJfSBlbHNlIGlmIChzdGFydHNfd2l0aChzYi0+YnVmICsgYm9sLCAiQ29uZmxpY3RzOlxuIikpIHsKKwkJCWluX29sZF9jb25mbGljdHNfYmxvY2sgPSAxOworCQkJaWYgKCFib2MpCisJCQkJYm9jID0gYm9sOworCQl9IGVsc2UgaWYgKGluX29sZF9jb25mbGljdHNfYmxvY2sgJiYgc2ItPmJ1Zltib2xdID09ICdcdCcpIHsKKwkJCTsgLyogYSBwYXRobmFtZSBpbiB0aGUgY29uZmxpY3RzIGJsb2NrICovCisJCX0gZWxzZSBpZiAoYm9jKSB7CisJCQkvKiB0aGUgcHJldmlvdXMgd2FzIG5vdCB0cmFpbGluZyBjb21tZW50ICovCisJCQlib2MgPSAwOworCQkJaW5fb2xkX2NvbmZsaWN0c19ibG9jayA9IDA7CisJCX0KKwkJYm9sID0gbmV4dF9saW5lIC0gc2ItPmJ1ZjsKKwl9CisJcmV0dXJuIGJvYyA/IHNiLT5sZW4gLSBib2MgOiAwOworfQpkaWZmIC0tZ2l0IGEvY29tbWl0LmggYi9jb21taXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDU4YmUwCi0tLSAvZGV2L251bGwKKysrIGIvY29tbWl0LmgKQEAgLTAsMCArMSwzODkgQEAKKyNpZm5kZWYgQ09NTUlUX0gKKyNkZWZpbmUgQ09NTUlUX0gKKworI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCitzdHJ1Y3QgY29tbWl0X2xpc3QgeworCXN0cnVjdCBjb21taXQgKml0ZW07CisJc3RydWN0IGNvbW1pdF9saXN0ICpuZXh0OworfTsKKworc3RydWN0IGNvbW1pdCB7CisJc3RydWN0IG9iamVjdCBvYmplY3Q7CisJdm9pZCAqdXRpbDsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJdW5zaWduZWQgbG9uZyBkYXRlOworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50czsKKwlzdHJ1Y3QgdHJlZSAqdHJlZTsKK307CisKK2V4dGVybiBpbnQgc2F2ZV9jb21taXRfYnVmZmVyOworZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbW1pdF90eXBlOworCisvKiBXaGlsZSB3ZSBjYW4gZGVjb3JhdGUgYW55IG9iamVjdCB3aXRoIGEgbmFtZSwgaXQncyBvbmx5IHVzZWQgZm9yIGNvbW1pdHMuLiAqLworc3RydWN0IG5hbWVfZGVjb3JhdGlvbiB7CisJc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqbmV4dDsKKwlpbnQgdHlwZTsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07Cit9OworCitlbnVtIGRlY29yYXRpb25fdHlwZSB7CisJREVDT1JBVElPTl9OT05FID0gMCwKKwlERUNPUkFUSU9OX1JFRl9MT0NBTCwKKwlERUNPUkFUSU9OX1JFRl9SRU1PVEUsCisJREVDT1JBVElPTl9SRUZfVEFHLAorCURFQ09SQVRJT05fUkVGX1NUQVNILAorCURFQ09SQVRJT05fUkVGX0hFQUQsCisJREVDT1JBVElPTl9HUkFGVEVELAorfTsKKwordm9pZCBhZGRfbmFtZV9kZWNvcmF0aW9uKGVudW0gZGVjb3JhdGlvbl90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBvYmplY3QgKm9iaik7Citjb25zdCBzdHJ1Y3QgbmFtZV9kZWNvcmF0aW9uICpnZXRfbmFtZV9kZWNvcmF0aW9uKGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaik7CisKK3N0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CitzdHJ1Y3QgY29tbWl0ICpsb29rdXBfY29tbWl0X3JlZmVyZW5jZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK3N0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCQkgICAgICBpbnQgcXVpZXQpOworc3RydWN0IGNvbW1pdCAqbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworLyoKKyAqIExvb2sgdXAgb2JqZWN0IG5hbWVkIGJ5ICJzaGExIiwgZGVyZWZlcmVuY2UgdGFnIGFzIG5lY2Vzc2FyeSwKKyAqIGdldCBhIGNvbW1pdCBhbmQgcmV0dXJuIGl0LiBJZiAic2hhMSIgZG9lcyBub3QgZGVyZWZlcmVuY2UgdG8KKyAqIGEgY29tbWl0LCB1c2UgcmVmX25hbWUgdG8gcmVwb3J0IGFuIGVycm9yIGFuZCBkaWUuCisgKi8KK3N0cnVjdCBjb21taXQgKmxvb2t1cF9jb21taXRfb3JfZGllKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnJlZl9uYW1lKTsKKworaW50IHBhcnNlX2NvbW1pdF9idWZmZXIoc3RydWN0IGNvbW1pdCAqaXRlbSwgY29uc3Qgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpOworaW50IHBhcnNlX2NvbW1pdF9nZW50bHkoc3RydWN0IGNvbW1pdCAqaXRlbSwgaW50IHF1aWV0X29uX21pc3NpbmcpOworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfY29tbWl0KHN0cnVjdCBjb21taXQgKml0ZW0pCit7CisJcmV0dXJuIHBhcnNlX2NvbW1pdF9nZW50bHkoaXRlbSwgMCk7Cit9Cit2b2lkIHBhcnNlX2NvbW1pdF9vcl9kaWUoc3RydWN0IGNvbW1pdCAqaXRlbSk7CisKKy8qCisgKiBBc3NvY2lhdGUgYW4gb2JqZWN0IGJ1ZmZlciB3aXRoIHRoZSBjb21taXQuIFRoZSBvd25lcnNoaXAgb2YgdGhlCisgKiBtZW1vcnkgaXMgaGFuZGVkIG92ZXIgdG8gdGhlIGNvbW1pdCwgYW5kIG11c3QgYmUgZnJlZSgpLWFibGUuCisgKi8KK3ZvaWQgc2V0X2NvbW1pdF9idWZmZXIoc3RydWN0IGNvbW1pdCAqLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CisKKy8qCisgKiBHZXQgYW55IGNhY2hlZCBvYmplY3QgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tbWl0LiBSZXR1cm5zIE5VTEwKKyAqIGlmIG5vbmUuIFRoZSByZXN1bHRpbmcgbWVtb3J5IHNob3VsZCBub3QgYmUgZnJlZWQuCisgKi8KK2NvbnN0IHZvaWQgKmdldF9jYWNoZWRfY29tbWl0X2J1ZmZlcihjb25zdCBzdHJ1Y3QgY29tbWl0ICosIHVuc2lnbmVkIGxvbmcgKnNpemUpOworCisvKgorICogR2V0IHRoZSBjb21taXQncyBvYmplY3QgY29udGVudHMsIGVpdGhlciBmcm9tIGNhY2hlIG9yIGJ5IHJlYWRpbmcgdGhlIG9iamVjdAorICogZnJvbSBkaXNrLiBUaGUgcmVzdWx0aW5nIG1lbW9yeSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCBhbmQgbXVzdCBiZSBnaXZlbgorICogdG8gdW51c2VfY29tbWl0X2J1ZmZlciB3aGVuIHRoZSBjYWxsZXIgaXMgZG9uZS4KKyAqLworY29uc3Qgdm9pZCAqZ2V0X2NvbW1pdF9idWZmZXIoY29uc3Qgc3RydWN0IGNvbW1pdCAqLCB1bnNpZ25lZCBsb25nICpzaXplKTsKKworLyoKKyAqIFRlbGwgdGhlIGNvbW1pdCBzdWJzeXRlbSB0aGF0IHdlIGFyZSBkb25lIHdpdGggYSBwYXJ0aWN1bGFyIGNvbW1pdCBidWZmZXIuCisgKiBUaGUgY29tbWl0IGFuZCBidWZmZXIgc2hvdWxkIGJlIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHZhbHVlLCByZXNwZWN0aXZlbHksCisgKiBmcm9tIGFuIGVhcmxpZXIgY2FsbCB0byBnZXRfY29tbWl0X2J1ZmZlci4gIFRoZSBidWZmZXIgbWF5IG9yIG1heSBub3QgYmUKKyAqIGZyZWVkIGJ5IHRoaXMgY2FsbDsgY2FsbGVycyBzaG91bGQgbm90IGFjY2VzcyB0aGUgbWVtb3J5IGFmdGVyd2FyZHMuCisgKi8KK3ZvaWQgdW51c2VfY29tbWl0X2J1ZmZlcihjb25zdCBzdHJ1Y3QgY29tbWl0ICosIGNvbnN0IHZvaWQgKmJ1ZmZlcik7CisKKy8qCisgKiBGcmVlIGFueSBjYWNoZWQgb2JqZWN0IGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1pdC4KKyAqLwordm9pZCBmcmVlX2NvbW1pdF9idWZmZXIoc3RydWN0IGNvbW1pdCAqKTsKKworLyoKKyAqIERpc2Fzc29jaWF0ZSBhbnkgY2FjaGVkIG9iamVjdCBidWZmZXIgZnJvbSB0aGUgY29tbWl0LCBidXQgZG8gbm90IGZyZWUgaXQuCisgKiBUaGUgYnVmZmVyIChvciBOVUxMLCBpZiBub25lKSBpcyByZXR1cm5lZC4KKyAqLworY29uc3Qgdm9pZCAqZGV0YWNoX2NvbW1pdF9idWZmZXIoc3RydWN0IGNvbW1pdCAqLCB1bnNpZ25lZCBsb25nICpzaXplcCk7CisKKy8qIEZpbmQgYmVnaW5uaW5nIGFuZCBsZW5ndGggb2YgY29tbWl0IHN1YmplY3QuICovCitpbnQgZmluZF9jb21taXRfc3ViamVjdChjb25zdCBjaGFyICpjb21taXRfYnVmZmVyLCBjb25zdCBjaGFyICoqc3ViamVjdCk7CisKK3N0cnVjdCBjb21taXRfbGlzdCAqY29tbWl0X2xpc3RfaW5zZXJ0KHN0cnVjdCBjb21taXQgKml0ZW0sCisJCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpOworc3RydWN0IGNvbW1pdF9saXN0ICoqY29tbWl0X2xpc3RfYXBwZW5kKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJc3RydWN0IGNvbW1pdF9saXN0ICoqbmV4dCk7Cit1bnNpZ25lZCBjb21taXRfbGlzdF9jb3VudChjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmwpOworc3RydWN0IGNvbW1pdF9saXN0ICpjb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShzdHJ1Y3QgY29tbWl0ICppdGVtLAorCQkJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKipsaXN0KTsKK3ZvaWQgY29tbWl0X2xpc3Rfc29ydF9ieV9kYXRlKHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QpOworCisvKiBTaGFsbG93IGNvcHkgb2YgdGhlIGlucHV0IGxpc3QgKi8KK3N0cnVjdCBjb21taXRfbGlzdCAqY29weV9jb21taXRfbGlzdChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpOworCit2b2lkIGZyZWVfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KTsKKworLyogQ29tbWl0IGZvcm1hdHMgKi8KK2VudW0gY21pdF9mbXQgeworCUNNSVRfRk1UX1JBVywKKwlDTUlUX0ZNVF9NRURJVU0sCisJQ01JVF9GTVRfREVGQVVMVCA9IENNSVRfRk1UX01FRElVTSwKKwlDTUlUX0ZNVF9TSE9SVCwKKwlDTUlUX0ZNVF9GVUxMLAorCUNNSVRfRk1UX0ZVTExFUiwKKwlDTUlUX0ZNVF9PTkVMSU5FLAorCUNNSVRfRk1UX0VNQUlMLAorCUNNSVRfRk1UX1VTRVJGT1JNQVQsCisKKwlDTUlUX0ZNVF9VTlNQRUNJRklFRAorfTsKKworc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IHsKKwkvKgorCSAqIENhbGxlcnMgc2hvdWxkIHR3ZWFrIHRoZXNlIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgcHBfKiBmdW5jdGlvbnMuCisJICovCisJZW51bSBjbWl0X2ZtdCBmbXQ7CisJaW50IGFiYnJldjsKKwljb25zdCBjaGFyICpzdWJqZWN0OworCWNvbnN0IGNoYXIgKmFmdGVyX3N1YmplY3Q7CisJaW50IHByZXNlcnZlX3N1YmplY3Q7CisJc3RydWN0IGRhdGVfbW9kZSBkYXRlX21vZGU7CisJdW5zaWduZWQgZGF0ZV9tb2RlX2V4cGxpY2l0OjE7CisJaW50IG5lZWRfOGJpdF9jdGU7CisJY2hhciAqbm90ZXNfbWVzc2FnZTsKKwlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm87CisJY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqbWFpbG1hcDsKKwlpbnQgY29sb3I7CisJc3RydWN0IGlkZW50X3NwbGl0ICpmcm9tX2lkZW50OworCisJLyoKKwkgKiBGaWVsZHMgYmVsb3cgaGVyZSBhcmUgbWFuaXB1bGF0ZWQgaW50ZXJuYWxseSBieSBwcF8qIGZ1bmN0aW9ucyBhbmQKKwkgKiBzaG91bGQgbm90IGJlIGNvdW50ZWQgb24gYnkgY2FsbGVycy4KKwkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgaW5fYm9keV9oZWFkZXJzOworfTsKKworc3RydWN0IHVzZXJmb3JtYXRfd2FudCB7CisJdW5zaWduZWQgbm90ZXM6MTsKK307CisKK2V4dGVybiBpbnQgaGFzX25vbl9hc2NpaShjb25zdCBjaGFyICp0ZXh0KTsKK3N0cnVjdCByZXZfaW5mbzsgLyogaW4gcmV2aXNpb24uaCwgaXQgY2lyY3VsYXJseSB1c2VzIGVudW0gY21pdF9mbXQgKi8KK2V4dGVybiBjb25zdCBjaGFyICpsb2dtc2dfcmVlbmNvZGUoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCSAgIGNoYXIgKipjb21taXRfZW5jb2RpbmcsCisJCQkJICAgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nKTsKK2V4dGVybiB2b2lkIGdldF9jb21taXRfZm9ybWF0KGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHJldl9pbmZvICopOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZvcm1hdF9zdWJqZWN0KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICptc2csCisJCQkJICBjb25zdCBjaGFyICpsaW5lX3NlcGFyYXRvcik7CitleHRlcm4gdm9pZCB1c2VyZm9ybWF0X2ZpbmRfcmVxdWlyZW1lbnRzKGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHVzZXJmb3JtYXRfd2FudCAqdyk7CitleHRlcm4gaW50IGNvbW1pdF9mb3JtYXRfaXNfZW1wdHkoZW51bSBjbWl0X2ZtdCk7CitleHRlcm4gdm9pZCBmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCSAgY29uc3QgY2hhciAqZm9ybWF0LCBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqY29udGV4dCk7CitleHRlcm4gdm9pZCBwcmV0dHlfcHJpbnRfY29tbWl0KHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCisJCQkJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCXN0cnVjdCBzdHJidWYgKnNiKTsKK2V4dGVybiB2b2lkIHBwX2NvbW1pdF9lYXN5KGVudW0gY21pdF9mbXQgZm10LCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpzYik7Cit2b2lkIHBwX3VzZXJfaW5mbyhzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkgIGNvbnN0IGNoYXIgKndoYXQsIHN0cnVjdCBzdHJidWYgKnNiLAorCQkgIGNvbnN0IGNoYXIgKmxpbmUsIGNvbnN0IGNoYXIgKmVuY29kaW5nKTsKK3ZvaWQgcHBfdGl0bGVfbGluZShzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkgICBjb25zdCBjaGFyICoqbXNnX3AsCisJCSAgIHN0cnVjdCBzdHJidWYgKnNiLAorCQkgICBjb25zdCBjaGFyICplbmNvZGluZywKKwkJICAgaW50IG5lZWRfOGJpdF9jdGUpOwordm9pZCBwcF9yZW1haW5kZXIoc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJICBjb25zdCBjaGFyICoqbXNnX3AsCisJCSAgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCSAgaW50IGluZGVudCk7CisKKworLyoqIFJlbW92ZXMgdGhlIGZpcnN0IGNvbW1pdCBmcm9tIGEgbGlzdCBzb3J0ZWQgYnkgZGF0ZSwgYW5kIGFkZHMgYWxsCisgKiBvZiBpdHMgcGFyZW50cy4KKyAqKi8KK3N0cnVjdCBjb21taXQgKnBvcF9tb3N0X3JlY2VudF9jb21taXQoc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWFyayk7CisKK3N0cnVjdCBjb21taXQgKnBvcF9jb21taXQoc3RydWN0IGNvbW1pdF9saXN0ICoqc3RhY2spOworCit2b2lkIGNsZWFyX2NvbW1pdF9tYXJrcyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHVuc2lnbmVkIGludCBtYXJrKTsKK3ZvaWQgY2xlYXJfY29tbWl0X21hcmtzX21hbnkoaW50IG5yLCBzdHJ1Y3QgY29tbWl0ICoqY29tbWl0LCB1bnNpZ25lZCBpbnQgbWFyayk7Cit2b2lkIGNsZWFyX2NvbW1pdF9tYXJrc19mb3Jfb2JqZWN0X2FycmF5KHN0cnVjdCBvYmplY3RfYXJyYXkgKmEsIHVuc2lnbmVkIG1hcmspOworCisKK2VudW0gcmV2X3NvcnRfb3JkZXIgeworCVJFVl9TT1JUX0lOX0dSQVBIX09SREVSID0gMCwKKwlSRVZfU09SVF9CWV9DT01NSVRfREFURSwKKwlSRVZfU09SVF9CWV9BVVRIT1JfREFURQorfTsKKworLyoKKyAqIFBlcmZvcm1zIGFuIGluLXBsYWNlIHRvcG9sb2dpY2FsIHNvcnQgb2YgbGlzdCBzdXBwbGllZC4KKyAqCisgKiAgIGludmFyaWFudCBvZiByZXN1bHRpbmcgbGlzdCBpczoKKyAqICAgICAgYSByZWFjaGFibGUgZnJvbSBiID0+IG9yZChiKSA8IG9yZChhKQorICogICBzb3J0X29yZGVyIGZ1cnRoZXIgc3BlY2lmaWVzOgorICogICBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUjogdHJ5IHRvIHNob3cgYSBjb21taXQgb24gYSBzaW5nbGUtcGFyZW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFpbiB0b2dldGhlci4KKyAqICAgUkVWX1NPUlRfQllfQ09NTUlUX0RBVEU6IHNob3cgZWxpZ2libGUgY29tbWl0cyBpbiBjb21taXR0ZXItZGF0ZSBvcmRlci4KKyAqLwordm9pZCBzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKHN0cnVjdCBjb21taXRfbGlzdCAqKiwgZW51bSByZXZfc29ydF9vcmRlcik7CisKK3N0cnVjdCBjb21taXRfZ3JhZnQgeworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCWludCBucl9wYXJlbnQ7IC8qIDwgMCBpZiBzaGFsbG93IGNvbW1pdCAqLworCXN0cnVjdCBvYmplY3RfaWQgcGFyZW50W0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OwordHlwZWRlZiBpbnQgKCplYWNoX2NvbW1pdF9ncmFmdF9mbikoY29uc3Qgc3RydWN0IGNvbW1pdF9ncmFmdCAqLCB2b2lkICopOworCitzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpyZWFkX2dyYWZ0X2xpbmUoY2hhciAqYnVmLCBpbnQgbGVuKTsKK2ludCByZWdpc3Rlcl9jb21taXRfZ3JhZnQoc3RydWN0IGNvbW1pdF9ncmFmdCAqLCBpbnQpOworc3RydWN0IGNvbW1pdF9ncmFmdCAqbG9va3VwX2NvbW1pdF9ncmFmdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZ2V0X21lcmdlX2Jhc2VzKHN0cnVjdCBjb21taXQgKnJldjEsIHN0cnVjdCBjb21taXQgKnJldjIpOworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZ2V0X21lcmdlX2Jhc2VzX21hbnkoc3RydWN0IGNvbW1pdCAqb25lLCBpbnQgbiwgc3RydWN0IGNvbW1pdCAqKnR3b3MpOworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZ2V0X29jdG9wdXNfbWVyZ2VfYmFzZXMoc3RydWN0IGNvbW1pdF9saXN0ICppbik7CisKKy8qIFRvIGJlIHVzZWQgb25seSB3aGVuIG9iamVjdCBmbGFncyBhZnRlciB0aGlzIGNhbGwgbm8gbG9uZ2VyIG1hdHRlciAqLworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZ2V0X21lcmdlX2Jhc2VzX21hbnlfZGlydHkoc3RydWN0IGNvbW1pdCAqb25lLCBpbnQgbiwgc3RydWN0IGNvbW1pdCAqKnR3b3MpOworCisvKiBsYXJnZXN0IHBvc2l0aXZlIG51bWJlciBhIHNpZ25lZCAzMi1iaXQgaW50ZWdlciBjYW4gY29udGFpbiAqLworI2RlZmluZSBJTkZJTklURV9ERVBUSCAweDdmZmZmZmZmCisKK3N0cnVjdCBzaGExX2FycmF5Oworc3RydWN0IHJlZjsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfc2hhbGxvdyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9zaGFsbG93KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBmb3JfZWFjaF9jb21taXRfZ3JhZnQoZWFjaF9jb21taXRfZ3JhZnRfZm4sIHZvaWQgKik7CitleHRlcm4gaW50IGlzX3JlcG9zaXRvcnlfc2hhbGxvdyh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgY29tbWl0X2xpc3QgKmdldF9zaGFsbG93X2NvbW1pdHMoc3RydWN0IG9iamVjdF9hcnJheSAqaGVhZHMsCisJCWludCBkZXB0aCwgaW50IHNoYWxsb3dfZmxhZywgaW50IG5vdF9zaGFsbG93X2ZsYWcpOworZXh0ZXJuIHZvaWQgc2V0X2FsdGVybmF0ZV9zaGFsbG93X2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgaW50IG92ZXJyaWRlKTsKK2V4dGVybiBpbnQgd3JpdGVfc2hhbGxvd19jb21taXRzKHN0cnVjdCBzdHJidWYgKm91dCwgaW50IHVzZV9wYWNrX3Byb3RvY29sLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc2hhMV9hcnJheSAqZXh0cmEpOworZXh0ZXJuIHZvaWQgc2V0dXBfYWx0ZXJuYXRlX3NoYWxsb3coc3RydWN0IGxvY2tfZmlsZSAqc2hhbGxvd19sb2NrLAorCQkJCSAgICBjb25zdCBjaGFyICoqYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHNoYTFfYXJyYXkgKmV4dHJhKTsKK2V4dGVybiBjb25zdCBjaGFyICpzZXR1cF90ZW1wb3Jhcnlfc2hhbGxvdyhjb25zdCBzdHJ1Y3Qgc2hhMV9hcnJheSAqZXh0cmEpOworZXh0ZXJuIHZvaWQgYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzKGludCk7CisKK3N0cnVjdCBzaGFsbG93X2luZm8geworCXN0cnVjdCBzaGExX2FycmF5ICpzaGFsbG93OworCWludCAqb3VycywgbnJfb3VyczsKKwlpbnQgKnRoZWlycywgbnJfdGhlaXJzOworCXN0cnVjdCBzaGExX2FycmF5ICpyZWY7CisKKwkvKiBmb3IgcmVjZWl2ZS1wYWNrICovCisJdWludDMyX3QgKip1c2VkX3NoYWxsb3c7CisJaW50ICpuZWVkX3JlYWNoYWJpbGl0eV90ZXN0OworCWludCAqcmVhY2hhYmxlOworCWludCAqc2hhbGxvd19yZWY7CisJc3RydWN0IGNvbW1pdCAqKmNvbW1pdHM7CisJaW50IG5yX2NvbW1pdHM7Cit9OworCitleHRlcm4gdm9pZCBwcmVwYXJlX3NoYWxsb3dfaW5mbyhzdHJ1Y3Qgc2hhbGxvd19pbmZvICosIHN0cnVjdCBzaGExX2FycmF5ICopOworZXh0ZXJuIHZvaWQgY2xlYXJfc2hhbGxvd19pbmZvKHN0cnVjdCBzaGFsbG93X2luZm8gKik7CitleHRlcm4gdm9pZCByZW1vdmVfbm9uZXhpc3RlbnRfdGhlaXJzX3NoYWxsb3coc3RydWN0IHNoYWxsb3dfaW5mbyAqKTsKK2V4dGVybiB2b2lkIGFzc2lnbl9zaGFsbG93X2NvbW1pdHNfdG9fcmVmcyhzdHJ1Y3Qgc2hhbGxvd19pbmZvICppbmZvLAorCQkJCQkgICB1aW50MzJfdCAqKnVzZWQsCisJCQkJCSAgIGludCAqcmVmX3N0YXR1cyk7CitleHRlcm4gaW50IGRlbGF5ZWRfcmVhY2hhYmlsaXR5X3Rlc3Qoc3RydWN0IHNoYWxsb3dfaW5mbyAqc2ksIGludCBjKTsKK2V4dGVybiB2b2lkIHBydW5lX3NoYWxsb3coaW50IHNob3dfb25seSk7CitleHRlcm4gc3RydWN0IHRyYWNlX2tleSB0cmFjZV9zaGFsbG93OworCitpbnQgaXNfZGVzY2VuZGFudF9vZihzdHJ1Y3QgY29tbWl0ICosIHN0cnVjdCBjb21taXRfbGlzdCAqKTsKK2ludCBpbl9tZXJnZV9iYXNlcyhzdHJ1Y3QgY29tbWl0ICosIHN0cnVjdCBjb21taXQgKik7CitpbnQgaW5fbWVyZ2VfYmFzZXNfbWFueShzdHJ1Y3QgY29tbWl0ICosIGludCwgc3RydWN0IGNvbW1pdCAqKik7CisKK2V4dGVybiBpbnQgaW50ZXJhY3RpdmVfYWRkKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcGF0Y2gpOworZXh0ZXJuIGludCBydW5fYWRkX2ludGVyYWN0aXZlKGNvbnN0IGNoYXIgKnJldmlzaW9uLCBjb25zdCBjaGFyICpwYXRjaF9tb2RlLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpOworCitzdGF0aWMgaW5saW5lIGludCBzaW5nbGVfcGFyZW50KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlyZXR1cm4gY29tbWl0LT5wYXJlbnRzICYmICFjb21taXQtPnBhcmVudHMtPm5leHQ7Cit9CisKK3N0cnVjdCBjb21taXRfbGlzdCAqcmVkdWNlX2hlYWRzKHN0cnVjdCBjb21taXRfbGlzdCAqaGVhZHMpOworCitzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciB7CisJc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKm5leHQ7CisJY2hhciAqa2V5OworCWNoYXIgKnZhbHVlOworCXNpemVfdCBsZW47Cit9OworCitleHRlcm4gdm9pZCBhcHBlbmRfbWVyZ2VfdGFnX2hlYWRlcnMoc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzLAorCQkJCSAgICAgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKioqdGFpbCk7CisKK2V4dGVybiBpbnQgY29tbWl0X3RyZWUoY29uc3QgY2hhciAqbXNnLCBzaXplX3QgbXNnX2xlbiwKKwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRyZWUsCisJCSAgICAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsIHVuc2lnbmVkIGNoYXIgKnJldCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmF1dGhvciwgY29uc3QgY2hhciAqc2lnbl9jb21taXQpOworCitleHRlcm4gaW50IGNvbW1pdF90cmVlX2V4dGVuZGVkKGNvbnN0IGNoYXIgKm1zZywgc2l6ZV90IG1zZ19sZW4sCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZSwKKwkJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsIHVuc2lnbmVkIGNoYXIgKnJldCwKKwkJCQljb25zdCBjaGFyICphdXRob3IsIGNvbnN0IGNoYXIgKnNpZ25fY29tbWl0LAorCQkJCXN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICopOworCitleHRlcm4gc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKnJlYWRfY29tbWl0X2V4dHJhX2hlYWRlcnMoc3RydWN0IGNvbW1pdCAqLCBjb25zdCBjaGFyICoqKTsKKworZXh0ZXJuIHZvaWQgZnJlZV9jb21taXRfZXh0cmFfaGVhZGVycyhzdHJ1Y3QgY29tbWl0X2V4dHJhX2hlYWRlciAqZXh0cmEpOworCisvKgorICogU2VhcmNoIHRoZSBjb21taXQgb2JqZWN0IGNvbnRlbnRzIGdpdmVuIGJ5ICJtc2ciIGZvciB0aGUgaGVhZGVyICJrZXkiLgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXIgY29udGVudHMsIG9yIE5VTEwuIFRoZSBsZW5ndGgKKyAqIG9mIHRoZSBoZWFkZXIsIHVwIHRvIHRoZSBmaXJzdCBuZXdsaW5lLCBpcyByZXR1cm5lZCB2aWEgb3V0X2xlbi4KKyAqCisgKiBOb3RlIHRoYXQgc29tZSBoZWFkZXJzIChsaWtlIG1lcmdldGFnKSBtYXkgYmUgbXVsdGktbGluZS4gSXQgaXMgdGhlIGNhbGxlcidzCisgKiByZXNwb25zaWJpbGl0eSB0byBwYXJzZSBmdXJ0aGVyIGluIHRoaXMgY2FzZSEKKyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmZpbmRfY29tbWl0X2hlYWRlcihjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKmtleSwKKwkJCQkgICAgICBzaXplX3QgKm91dF9sZW4pOworCisvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIGxvZyBtZXNzYWdlLCB0aGUgcmlnaHQgcGxhY2UgZm9yIGEgbmV3IHRyYWlsZXIuICovCitleHRlcm4gaW50IGlnbm9yZV9ub25fdHJhaWxlcihzdHJ1Y3Qgc3RyYnVmICpzYik7CisKK3R5cGVkZWYgdm9pZCAoKmVhY2hfbWVyZ2V0YWdfZm4pKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdF9leHRyYV9oZWFkZXIgKmV4dHJhLAorCQkJCSB2b2lkICpjYl9kYXRhKTsKKworZXh0ZXJuIHZvaWQgZm9yX2VhY2hfbWVyZ2V0YWcoZWFjaF9tZXJnZXRhZ19mbiBmbiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKTsKKworc3RydWN0IG1lcmdlX3JlbW90ZV9kZXNjIHsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7IC8qIHRoZSBuYW1lZCBvYmplY3QsIGNvdWxkIGJlIGEgdGFnICovCisJY29uc3QgY2hhciAqbmFtZTsKK307CisjZGVmaW5lIG1lcmdlX3JlbW90ZV91dGlsKGNvbW1pdCkgKChzdHJ1Y3QgbWVyZ2VfcmVtb3RlX2Rlc2MgKikoKGNvbW1pdCktPnV0aWwpKQorCisvKgorICogR2l2ZW4gIm5hbWUiIGZyb20gdGhlIGNvbW1hbmQgbGluZSB0byBtZXJnZSwgZmluZCB0aGUgY29tbWl0IG9iamVjdAorICogYW5kIHJldHVybiBpdCwgd2hpbGUgc3RvcmluZyBtZXJnZV9yZW1vdGVfZGVzYyBpbiBpdHMgLT51dGlsIGZpZWxkLAorICogdG8gYWxsb3cgY2FsbGVycyB0byB0ZWxsIGlmIHdlIGFyZSB0b2xkIHRvIG1lcmdlIGEgdGFnLgorICovCitzdHJ1Y3QgY29tbWl0ICpnZXRfbWVyZ2VfcGFyZW50KGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRlcm4gaW50IHBhcnNlX3NpZ25lZF9jb21taXQoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJICAgICAgIHN0cnVjdCBzdHJidWYgKm1lc3NhZ2UsIHN0cnVjdCBzdHJidWYgKnNpZ25hdHVyZSk7CitleHRlcm4gaW50IHJlbW92ZV9zaWduYXR1cmUoc3RydWN0IHN0cmJ1ZiAqYnVmKTsKKworZXh0ZXJuIHZvaWQgcHJpbnRfY29tbWl0X2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LAorCQkJICAgICAgY29uc3QgY2hhciAqZm9ybWF0X2N1ciwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdF9sYXN0KTsKKworLyoKKyAqIENoZWNrIHRoZSBzaWduYXR1cmUgb2YgdGhlIGdpdmVuIGNvbW1pdC4gVGhlIHJlc3VsdCBvZiB0aGUgY2hlY2sgaXMgc3RvcmVkCisgKiBpbiBzaWctPmNoZWNrX3Jlc3VsdCwgJ0cnIGZvciBhIGdvb2Qgc2lnbmF0dXJlLCAnVScgZm9yIGEgZ29vZCBzaWduYXR1cmUKKyAqIGZyb20gYW4gdW50cnVzdGVkIHNpZ25lciwgJ0InIGZvciBhIGJhZCBzaWduYXR1cmUgYW5kICdOJyBmb3Igbm8gc2lnbmF0dXJlCisgKiBhdCBhbGwuICBUaGlzIG1heSBhbGxvY2F0ZSBtZW1vcnkgZm9yIHNpZy0+Z3BnX291dHB1dCwgc2lnLT5ncGdfc3RhdHVzLAorICogc2lnLT5zaWduZXIgYW5kIHNpZy0+a2V5LgorICovCitleHRlcm4gaW50IGNoZWNrX2NvbW1pdF9zaWduYXR1cmUoY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrICpzaWdjKTsKKworaW50IGNvbXBhcmVfY29tbWl0c19ieV9jb21taXRfZGF0ZShjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8sIHZvaWQgKnVudXNlZCk7CisKK0xBU1RfQVJHX01VU1RfQkVfTlVMTAorZXh0ZXJuIGludCBydW5fY29tbWl0X2hvb2soaW50IGVkaXRvcl9pc191c2VkLCBjb25zdCBjaGFyICppbmRleF9maWxlLCBjb25zdCBjaGFyICpuYW1lLCAuLi4pOworCisjZW5kaWYgLyogQ09NTUlUX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9hcHBsZS1jb21tb24tY3J5cHRvLmggYi9jb21wYXQvYXBwbGUtY29tbW9uLWNyeXB0by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjliMGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvYXBwbGUtY29tbW9uLWNyeXB0by5oCkBAIC0wLDAgKzEsODYgQEAKKy8qIHN1cHByZXNzIGluY2x1c2lvbiBvZiBjb25mbGljdGluZyBvcGVuc3NsIGZ1bmN0aW9ucyAqLworI2RlZmluZSBPUEVOU1NMX05PX01ENQorI2RlZmluZSBIRUFERVJfSE1BQ19ICisjZGVmaW5lIEhFQURFUl9TSEFfSAorI2luY2x1ZGUgPENvbW1vbkNyeXB0by9Db21tb25ITUFDLmg+CisjZGVmaW5lIEhNQUNfQ1RYIENDSG1hY0NvbnRleHQKKyNkZWZpbmUgSE1BQ19Jbml0KGhtYWMsIGtleSwgbGVuLCBhbGdvKSBDQ0htYWNJbml0KGhtYWMsIGFsZ28sIGtleSwgbGVuKQorI2RlZmluZSBITUFDX1VwZGF0ZSBDQ0htYWNVcGRhdGUKKyNkZWZpbmUgSE1BQ19GaW5hbChobWFjLCBoYXNoLCBwdHIpIENDSG1hY0ZpbmFsKGhtYWMsIGhhc2gpCisjZGVmaW5lIEhNQUNfQ1RYX2NsZWFudXAoaWdub3JlKQorI2RlZmluZSBFVlBfbWQ1KC4uLikga0NDSG1hY0FsZ01ENQorI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA3MAorI2RlZmluZSBBUFBMRV9MSU9OX09SX05FV0VSCisjaW5jbHVkZSA8U2VjdXJpdHkvU2VjdXJpdHkuaD4KKy8qIEFwcGxlJ3MgVFlQRV9CT09MIGNvbmZsaWN0cyB3aXRoIGNvbmZpZy5jICovCisjdW5kZWYgVFlQRV9CT09MCisjZW5kaWYKKworI2lmZGVmIEFQUExFX0xJT05fT1JfTkVXRVIKKyNkZWZpbmUgZ2l0X0NDX2Vycm9yX2NoZWNrKHBhdHRlcm4sIGVycikgXAorCWRvIHsgXAorCQlpZiAoZXJyKSB7IFwKKwkJCWRpZShwYXR0ZXJuLCAobG9uZylDRkVycm9yR2V0Q29kZShlcnIpKTsgXAorCQl9IFwKKwl9IHdoaWxlKDApCisKKyNkZWZpbmUgRVZQX0VuY29kZUJsb2NrIGdpdF9DQ19FVlBfRW5jb2RlQmxvY2sKK3N0YXRpYyBpbmxpbmUgaW50IGdpdF9DQ19FVlBfRW5jb2RlQmxvY2sodW5zaWduZWQgY2hhciAqb3V0LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICppbiwgaW50IGlubGVuKQoreworCUNGRXJyb3JSZWYgZXJyOworCVNlY1RyYW5zZm9ybVJlZiBlbmNvZGVyOworCUNGRGF0YVJlZiBpbnB1dCwgb3V0cHV0OworCUNGSW5kZXggbGVuZ3RoOworCisJZW5jb2RlciA9IFNlY0VuY29kZVRyYW5zZm9ybUNyZWF0ZShrU2VjQmFzZTY0RW5jb2RpbmcsICZlcnIpOworCWdpdF9DQ19lcnJvcl9jaGVjaygiU2VjRW5jb2RlVHJhbnNmb3JtQ3JlYXRlIGZhaWxlZDogJWxkIiwgZXJyKTsKKworCWlucHV0ID0gQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGluLCBpbmxlbik7CisJU2VjVHJhbnNmb3JtU2V0QXR0cmlidXRlKGVuY29kZXIsIGtTZWNUcmFuc2Zvcm1JbnB1dEF0dHJpYnV0ZU5hbWUsCisJCQlpbnB1dCwgJmVycik7CisJZ2l0X0NDX2Vycm9yX2NoZWNrKCJTZWNUcmFuc2Zvcm1TZXRBdHRyaWJ1dGUgZmFpbGVkOiAlbGQiLCBlcnIpOworCisJb3V0cHV0ID0gU2VjVHJhbnNmb3JtRXhlY3V0ZShlbmNvZGVyLCAmZXJyKTsKKwlnaXRfQ0NfZXJyb3JfY2hlY2soIlNlY1RyYW5zZm9ybUV4ZWN1dGUgZmFpbGVkOiAlbGQiLCBlcnIpOworCisJbGVuZ3RoID0gQ0ZEYXRhR2V0TGVuZ3RoKG91dHB1dCk7CisJQ0ZEYXRhR2V0Qnl0ZXMob3V0cHV0LCBDRlJhbmdlTWFrZSgwLCBsZW5ndGgpLCBvdXQpOworCisJQ0ZSZWxlYXNlKG91dHB1dCk7CisJQ0ZSZWxlYXNlKGlucHV0KTsKKwlDRlJlbGVhc2UoZW5jb2Rlcik7CisKKwlyZXR1cm4gKGludClzdHJsZW4oKGNvbnN0IGNoYXIgKilvdXQpOworfQorCisjZGVmaW5lIEVWUF9EZWNvZGVCbG9jayBnaXRfQ0NfRVZQX0RlY29kZUJsb2NrCitzdGF0aWMgaW50IGlubGluZSBnaXRfQ0NfRVZQX0RlY29kZUJsb2NrKHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIGludCBpbmxlbikKK3sKKwlDRkVycm9yUmVmIGVycjsKKwlTZWNUcmFuc2Zvcm1SZWYgZGVjb2RlcjsKKwlDRkRhdGFSZWYgaW5wdXQsIG91dHB1dDsKKwlDRkluZGV4IGxlbmd0aDsKKworCWRlY29kZXIgPSBTZWNEZWNvZGVUcmFuc2Zvcm1DcmVhdGUoa1NlY0Jhc2U2NEVuY29kaW5nLCAmZXJyKTsKKwlnaXRfQ0NfZXJyb3JfY2hlY2soIlNlY0VuY29kZVRyYW5zZm9ybUNyZWF0ZSBmYWlsZWQ6ICVsZCIsIGVycik7CisKKwlpbnB1dCA9IENGRGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBpbiwgaW5sZW4pOworCVNlY1RyYW5zZm9ybVNldEF0dHJpYnV0ZShkZWNvZGVyLCBrU2VjVHJhbnNmb3JtSW5wdXRBdHRyaWJ1dGVOYW1lLAorCQkJaW5wdXQsICZlcnIpOworCWdpdF9DQ19lcnJvcl9jaGVjaygiU2VjVHJhbnNmb3JtU2V0QXR0cmlidXRlIGZhaWxlZDogJWxkIiwgZXJyKTsKKworCW91dHB1dCA9IFNlY1RyYW5zZm9ybUV4ZWN1dGUoZGVjb2RlciwgJmVycik7CisJZ2l0X0NDX2Vycm9yX2NoZWNrKCJTZWNUcmFuc2Zvcm1FeGVjdXRlIGZhaWxlZDogJWxkIiwgZXJyKTsKKworCWxlbmd0aCA9IENGRGF0YUdldExlbmd0aChvdXRwdXQpOworCUNGRGF0YUdldEJ5dGVzKG91dHB1dCwgQ0ZSYW5nZU1ha2UoMCwgbGVuZ3RoKSwgb3V0KTsKKworCUNGUmVsZWFzZShvdXRwdXQpOworCUNGUmVsZWFzZShpbnB1dCk7CisJQ0ZSZWxlYXNlKGRlY29kZXIpOworCisJcmV0dXJuIChpbnQpc3RybGVuKChjb25zdCBjaGFyICopb3V0KTsKK30KKyNlbmRpZiAvKiBBUFBMRV9MSU9OX09SX05FV0VSICovCmRpZmYgLS1naXQgYS9jb21wYXQvYmFzZW5hbWUuYyBiL2NvbXBhdC9iYXNlbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZjhhM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvYmFzZW5hbWUuYwpAQCAtMCwwICsxLDE1IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKKy8qIEFkYXB0ZWQgZnJvbSBsaWJpYmVydHkncyBiYXNlbmFtZS5jLiAgKi8KK2NoYXIgKmdpdGJhc2VuYW1lIChjaGFyICpwYXRoKQoreworCWNvbnN0IGNoYXIgKmJhc2U7CisJLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworCWlmIChoYXNfZG9zX2RyaXZlX3ByZWZpeChwYXRoKSkKKwkJcGF0aCArPSAyOworCWZvciAoYmFzZSA9IHBhdGg7ICpwYXRoOyBwYXRoKyspIHsKKwkJaWYgKGlzX2Rpcl9zZXAoKnBhdGgpKQorCQkJYmFzZSA9IHBhdGggKyAxOworCX0KKwlyZXR1cm4gKGNoYXIgKiliYXNlOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L2Jzd2FwLmggYi9jb21wYXQvYnN3YXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmVkNjM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2Jzd2FwLmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBMZXQncyBtYWtlIHN1cmUgd2UgYWx3YXlzIGhhdmUgYSBzYW5lIGRlZmluaXRpb24gZm9yIG50b2hsKCkvaHRvbmwoKS4KKyAqIFNvbWUgbGlicmFyaWVzIGRlZmluZSB0aG9zZSBhcyBhIGZ1bmN0aW9uIGNhbGwsIGp1c3QgdG8gcGVyZm9ybSBieXRlCisgKiBzaGlmdGluZywgYnJpbmdpbmcgc2lnbmlmaWNhbnQgb3ZlcmhlYWQgdG8gd2hhdCBzaG91bGQgYmUgYSBzaW1wbGUKKyAqIG9wZXJhdGlvbi4KKyAqLworCisvKgorICogRGVmYXVsdCB2ZXJzaW9uIHRoYXQgdGhlIGNvbXBpbGVyIG91Z2h0IHRvIG9wdGltaXplIHByb3Blcmx5IHdpdGgKKyAqIGNvbnN0YW50IHZhbHVlcy4KKyAqLworc3RhdGljIGlubGluZSB1aW50MzJfdCBkZWZhdWx0X3N3YWIzMih1aW50MzJfdCB2YWwpCit7CisJcmV0dXJuICgoKHZhbCAmIDB4ZmYwMDAwMDApID4+IDI0KSB8CisJCSgodmFsICYgMHgwMGZmMDAwMCkgPj4gIDgpIHwKKwkJKCh2YWwgJiAweDAwMDBmZjAwKSA8PCAgOCkgfAorCQkoKHZhbCAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgZGVmYXVsdF9ic3dhcDY0KHVpbnQ2NF90IHZhbCkKK3sKKwlyZXR1cm4gKCgodmFsICYgKHVpbnQ2NF90KTB4MDAwMDAwMDAwMDAwMDBmZlVMTCkgPDwgNTYpIHwKKwkJKCh2YWwgJiAodWludDY0X3QpMHgwMDAwMDAwMDAwMDBmZjAwVUxMKSA8PCA0MCkgfAorCQkoKHZhbCAmICh1aW50NjRfdCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8CisJCSgodmFsICYgKHVpbnQ2NF90KTB4MDAwMDAwMDBmZjAwMDAwMFVMTCkgPDwgIDgpIHwKKwkJKCh2YWwgJiAodWludDY0X3QpMHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+PiAgOCkgfAorCQkoKHZhbCAmICh1aW50NjRfdCkweDAwMDBmZjAwMDAwMDAwMDBVTEwpID4+IDI0KSB8CisJCSgodmFsICYgKHVpbnQ2NF90KTB4MDBmZjAwMDAwMDAwMDAwMFVMTCkgPj4gNDApIHwKKwkJKCh2YWwgJiAodWludDY0X3QpMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikpOworfQorCisjdW5kZWYgYnN3YXAzMgorI3VuZGVmIGJzd2FwNjQKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorCisjZGVmaW5lIGJzd2FwMzIgZ2l0X2Jzd2FwMzIKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZ2l0X2Jzd2FwMzIodWludDMyX3QgeCkKK3sKKwl1aW50MzJfdCByZXN1bHQ7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHgpKQorCQlyZXN1bHQgPSBkZWZhdWx0X3N3YWIzMih4KTsKKwllbHNlCisJCV9fYXNtX18oImJzd2FwICUwIiA6ICI9ciIgKHJlc3VsdCkgOiAiMCIgKHgpKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5lIGJzd2FwNjQgZ2l0X2Jzd2FwNjQKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGdpdF9ic3dhcDY0KHVpbnQ2NF90IHgpCit7CisJdWludDY0X3QgcmVzdWx0OworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSkKKwkJcmVzdWx0ID0gZGVmYXVsdF9ic3dhcDY0KHgpOworCWVsc2UKKwkJX19hc21fXygiYnN3YXAgJXEwIiA6ICI9ciIgKHJlc3VsdCkgOiAiMCIgKHgpKTsKKwlyZXR1cm4gcmVzdWx0OworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgZ2l0X2Jzd2FwNjQodWludDY0X3QgeCkKK3sKKwl1bmlvbiB7IHVpbnQ2NF90IGk2NDsgdWludDMyX3QgaTMyWzJdOyB9IHRtcCwgcmVzdWx0OworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSkKKwkJcmVzdWx0Lmk2NCA9IGRlZmF1bHRfYnN3YXA2NCh4KTsKKwllbHNlIHsKKwkJdG1wLmk2NCA9IHg7CisJCXJlc3VsdC5pMzJbMF0gPSBnaXRfYnN3YXAzMih0bXAuaTMyWzFdKTsKKwkJcmVzdWx0LmkzMlsxXSA9IGdpdF9ic3dhcDMyKHRtcC5pMzJbMF0pOworCX0KKwlyZXR1cm4gcmVzdWx0Lmk2NDsKK30KKyNlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9NX1g2NCkpCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBic3dhcDMyKHgpIF9ieXRlc3dhcF91bG9uZyh4KQorI2RlZmluZSBic3dhcDY0KHgpIF9ieXRlc3dhcF91aW50NjQoeCkKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGJzd2FwMzIpCisKKyN1bmRlZiBudG9obAorI3VuZGVmIGh0b25sCisjZGVmaW5lIG50b2hsKHgpIGJzd2FwMzIoeCkKKyNkZWZpbmUgaHRvbmwoeCkgYnN3YXAzMih4KQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoYnN3YXA2NCkKKworI3VuZGVmIG50b2hsbAorI3VuZGVmIGh0b25sbAorI2RlZmluZSBudG9obGwoeCkgYnN3YXA2NCh4KQorI2RlZmluZSBodG9ubGwoeCkgYnN3YXA2NCh4KQorCisjZWxzZQorCisjdW5kZWYgbnRvaGxsCisjdW5kZWYgaHRvbmxsCisKKyNpZiBkZWZpbmVkKF9fQllURV9PUkRFUikgJiYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pICYmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCisjIGRlZmluZSBHSVRfQllURV9PUkRFUiBfX0JZVEVfT1JERVIKKyMgZGVmaW5lIEdJVF9MSVRUTEVfRU5ESUFOIF9fTElUVExFX0VORElBTgorIyBkZWZpbmUgR0lUX0JJR19FTkRJQU4gX19CSUdfRU5ESUFOCisKKyNlbGlmIGRlZmluZWQoQllURV9PUkRFUikgJiYgZGVmaW5lZChMSVRUTEVfRU5ESUFOKSAmJiBkZWZpbmVkKEJJR19FTkRJQU4pCisKKyMgZGVmaW5lIEdJVF9CWVRFX09SREVSIEJZVEVfT1JERVIKKyMgZGVmaW5lIEdJVF9MSVRUTEVfRU5ESUFOIExJVFRMRV9FTkRJQU4KKyMgZGVmaW5lIEdJVF9CSUdfRU5ESUFOIEJJR19FTkRJQU4KKworI2Vsc2UKKworIyBkZWZpbmUgR0lUX0JJR19FTkRJQU4gNDMyMQorIyBkZWZpbmUgR0lUX0xJVFRMRV9FTkRJQU4gMTIzNAorCisjIGlmIGRlZmluZWQoX0JJR19FTkRJQU4pICYmICFkZWZpbmVkKF9MSVRUTEVfRU5ESUFOKQorIyAgZGVmaW5lIEdJVF9CWVRFX09SREVSIEdJVF9CSUdfRU5ESUFOCisjIGVsaWYgZGVmaW5lZChfTElUVExFX0VORElBTikgJiYgIWRlZmluZWQoX0JJR19FTkRJQU4pCisjICBkZWZpbmUgR0lUX0JZVEVfT1JERVIgR0lUX0xJVFRMRV9FTkRJQU4KKyMgZWxpZiBkZWZpbmVkKF9fVEhXX0JJR19FTkRJQU5fXykgJiYgIWRlZmluZWQoX19USFdfTElUVExFX0VORElBTl9fKQorIyAgZGVmaW5lIEdJVF9CWVRFX09SREVSIEdJVF9CSUdfRU5ESUFOCisjIGVsaWYgZGVmaW5lZChfX1RIV19MSVRUTEVfRU5ESUFOX18pICYmICFkZWZpbmVkKF9fVEhXX0JJR19FTkRJQU5fXykKKyMgIGRlZmluZSBHSVRfQllURV9PUkRFUiBHSVRfTElUVExFX0VORElBTgorIyBlbHNlCisjICBlcnJvciAiQ2Fubm90IGRldGVybWluZSBlbmRpYW5uZXNzIgorIyBlbmRpZgorCisjZW5kaWYKKworI2lmIEdJVF9CWVRFX09SREVSID09IEdJVF9CSUdfRU5ESUFOCisjIGRlZmluZSBudG9obGwobikgKG4pCisjIGRlZmluZSBodG9ubGwobikgKG4pCisjZWxzZQorIyBkZWZpbmUgbnRvaGxsKG4pIGRlZmF1bHRfYnN3YXA2NChuKQorIyBkZWZpbmUgaHRvbmxsKG4pIGRlZmF1bHRfYnN3YXA2NChuKQorI2VuZGlmCisKKyNlbmRpZgorCisvKgorICogUGVyZm9ybWFuY2UgbWlnaHQgYmUgaW1wcm92ZWQgaWYgdGhlIENQVSBhcmNoaXRlY3R1cmUgaXMgT0sgd2l0aAorICogdW5hbGlnbmVkIDMyLWJpdCBsb2FkcyBhbmQgYSBmYXN0IG50b2hsKCkgaXMgYXZhaWxhYmxlLgorICogT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBieXRlIGxvYWRzIGFuZCBzaGlmdHMgd2hpY2ggaXMgcG9ydGFibGUsCisgKiBhbmQgaXMgZmFzdGVyIG9uIGFyY2hpdGVjdHVyZXMgd2l0aCBtZW1vcnkgYWxpZ25tZW50IGlzc3Vlcy4KKyAqLworCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBcCisgICAgZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9NX1g2NCkgfHwgXAorICAgIGRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5lZChfX3BwYzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fczM5MF9fKSB8fCBkZWZpbmVkKF9fczM5MHhfXykKKworI2RlZmluZSBnZXRfYmUxNihwKQludG9ocygqKHVuc2lnbmVkIHNob3J0ICopKHApKQorI2RlZmluZSBnZXRfYmUzMihwKQludG9obCgqKHVuc2lnbmVkIGludCAqKShwKSkKKyNkZWZpbmUgcHV0X2JlMzIocCwgdikJZG8geyAqKHVuc2lnbmVkIGludCAqKShwKSA9IGh0b25sKHYpOyB9IHdoaWxlICgwKQorCisjZWxzZQorCisjZGVmaW5lIGdldF9iZTE2KHApCSggXAorCSgqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMCkgPDwgOCkgfCBcCisJKCooKHVuc2lnbmVkIGNoYXIgKikocCkgKyAxKSA8PCAwKSApCisjZGVmaW5lIGdldF9iZTMyKHApCSggXAorCSgqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMCkgPDwgMjQpIHwgXAorCSgqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMSkgPDwgMTYpIHwgXAorCSgqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMikgPDwgIDgpIHwgXAorCSgqKCh1bnNpZ25lZCBjaGFyICopKHApICsgMykgPDwgIDApICkKKyNkZWZpbmUgcHV0X2JlMzIocCwgdikJZG8geyBcCisJdW5zaWduZWQgaW50IF9fdiA9ICh2KTsgXAorCSooKHVuc2lnbmVkIGNoYXIgKikocCkgKyAwKSA9IF9fdiA+PiAyNDsgXAorCSooKHVuc2lnbmVkIGNoYXIgKikocCkgKyAxKSA9IF9fdiA+PiAxNjsgXAorCSooKHVuc2lnbmVkIGNoYXIgKikocCkgKyAyKSA9IF9fdiA+PiAgODsgXAorCSooKHVuc2lnbmVkIGNoYXIgKikocCkgKyAzKSA9IF9fdiA+PiAgMDsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvZm9wZW4uYyBiL2NvbXBhdC9mb3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1Y2ExNDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvZm9wZW4uYwpAQCAtMCwwICsxLDM3IEBACisvKgorICogIFRoZSBvcmRlciBvZiB0aGUgZm9sbG93aW5nIHR3byBsaW5lcyBpcyBpbXBvcnRhbnQuCisgKgorICogIEZSRUFEX1JFQURTX0RJUkVDVE9SSUVTIGlzIHVuZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIGdpdC1jb21wYXQtdXRpbC5oCisgKiAgdG8gYXZvaWQgdGhlIHJlZGVmaW5pdGlvbiBvZiBmb3BlbiB3aXRoaW4gZ2l0LWNvbXBhdC11dGlsLmguIFRoaXMgaXMKKyAqICBuZWNlc3Nhcnkgc2luY2UgZm9wZW4gaXMgYSBtYWNybyBvbiBzb21lIHBsYXRmb3JtcyB3aGljaCBtYXkgYmUgc2V0CisgKiAgYmFzZWQgb24gY29tcGlsZXIgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIG9uIEFJWCBmb3BlbiBpcyBzZXQgdG8gZm9wZW42NAorICogIHdoZW4gX0xBUkdFX0ZJTEVTIGlzIGRlZmluZWQuIFRoZSBwcmV2aW91cyB0ZWNobmlxdWUgb2YgbWVyZWx5IHVuZGVmaW5pbmcKKyAqICBmb3BlbiBhZnRlciBpbmNsdWRpbmcgZ2l0LWNvbXBhdC11dGlsLmggaXMgaW5hZGVxdWF0ZSBpbiB0aGlzIGNhc2UuCisgKi8KKyN1bmRlZiBGUkVBRF9SRUFEU19ESVJFQ1RPUklFUworI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitGSUxFICpnaXRfZm9wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkKK3sKKwlGSUxFICpmcDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChtb2RlWzBdID09ICd3JyB8fCBtb2RlWzBdID09ICdhJykKKwkJcmV0dXJuIGZvcGVuKHBhdGgsIG1vZGUpOworCisJaWYgKCEoZnAgPSBmb3BlbihwYXRoLCBtb2RlKSkpCisJCXJldHVybiBOVUxMOworCisJaWYgKGZzdGF0KGZpbGVubyhmcCksICZzdCkpIHsKKwkJZmNsb3NlKGZwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJZmNsb3NlKGZwKTsKKwkJZXJybm8gPSBFSVNESVI7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBmcDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9nbXRpbWUuYyBiL2NvbXBhdC9nbXRpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODM2MmRkCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2dtdGltZS5jCkBAIC0wLDAgKzEsMjkgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKyN1bmRlZiBnbXRpbWUKKyN1bmRlZiBnbXRpbWVfcgorCitzdHJ1Y3QgdG0gKmdpdF9nbXRpbWUoY29uc3QgdGltZV90ICp0aW1lcCkKK3sKKwlzdGF0aWMgc3RydWN0IHRtIHJlc3VsdDsKKwlyZXR1cm4gZ2l0X2dtdGltZV9yKHRpbWVwLCAmcmVzdWx0KTsKK30KKworc3RydWN0IHRtICpnaXRfZ210aW1lX3IoY29uc3QgdGltZV90ICp0aW1lcCwgc3RydWN0IHRtICpyZXN1bHQpCit7CisJc3RydWN0IHRtICpyZXQ7CisKKwltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOworCXJldCA9IGdtdGltZV9yKHRpbWVwLCByZXN1bHQpOworCisJLyoKKwkgKiBSYXRoZXIgdGhhbiBOVUxMLCBGcmVlQlNEIGdtdGltZSBzaW1wbHkgbGVhdmVzIHRoZSAic3RydWN0IHRtIgorCSAqIHVudG91Y2hlZCB3aGVuIGl0IGVuY291bnRlcnMgb3ZlcmZsb3cuIFNpbmNlICJtZGF5IiBjYW5ub3Qgb3RoZXJ3aXNlCisJICogYmUgemVybywgd2UgY2FuIHRlc3QgdGhpcyB2ZXJ5IHF1aWNrbHkuCisJICovCisJaWYgKHJldCAmJiAhcmV0LT50bV9tZGF5KSB7CisJCXJldCA9IE5VTEw7CisJCWVycm5vID0gRU9WRVJGTE9XOworCX0KKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvaHN0cmVycm9yLmMgYi9jb21wYXQvaHN0cmVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1YTJmYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9oc3RyZXJyb3IuYwpAQCAtMCwwICsxLDIxIEBACisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCitjb25zdCBjaGFyICpnaXRoc3RyZXJyb3IoaW50IGVycikKK3sKKwlzdGF0aWMgY2hhciBidWZmZXJbNDhdOworCXN3aXRjaCAoZXJyKQorCXsKKwljYXNlIEhPU1RfTk9UX0ZPVU5EOgorCQlyZXR1cm4gIkF1dGhvcml0YXRpdmUgYW5zd2VyOiBob3N0IG5vdCBmb3VuZCI7CisJY2FzZSBOT19EQVRBOgorCQlyZXR1cm4gIlZhbGlkIG5hbWUsIG5vIGRhdGEgcmVjb3JkIG9mIHJlcXVlc3RlZCB0eXBlIjsKKwljYXNlIE5PX1JFQ09WRVJZOgorCQlyZXR1cm4gIk5vbiByZWNvdmVyYWJsZSBlcnJvcnMsIEZPUk1FUlIsIFJFRlVTRUQsIE5PVElNUCI7CisJY2FzZSBUUllfQUdBSU46CisJCXJldHVybiAiTm9uLWF1dGhvcml0YXRpdmUgXCJob3N0IG5vdCBmb3VuZFwiLCBvciBTRVJWRVJGQUlMIjsKKwl9CisJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIk5hbWUgcmVzb2x1dGlvbiBlcnJvciAlZCIsIGVycik7CisJcmV0dXJuIGJ1ZmZlcjsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9pbmV0X250b3AuYyBiL2NvbXBhdC9pbmV0X250b3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODMwNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L2luZXRfbnRvcC5jCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0gRElTQ0xBSU1TCisgKiBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVSTkVUIFNPRlRXQVJFCisgKiBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCisjaWZuZGVmIE5TX0lOQUREUlNaCisjZGVmaW5lIE5TX0lOQUREUlNaCTQKKyNlbmRpZgorI2lmbmRlZiBOU19JTjZBRERSU1oKKyNkZWZpbmUgTlNfSU42QUREUlNaCTE2CisjZW5kaWYKKyNpZm5kZWYgTlNfSU5UMTZTWgorI2RlZmluZSBOU19JTlQxNlNaCTIKKyNlbmRpZgorCisvKgorICogV0FSTklORzogRG9uJ3QgZXZlbiBjb25zaWRlciB0cnlpbmcgdG8gY29tcGlsZSB0aGlzIG9uIGEgc3lzdGVtIHdoZXJlCisgKiBzaXplb2YoaW50KSA8IDQuICBzaXplb2YoaW50KSA+IDQgaXMgZmluZTsgYWxsIHRoZSB3b3JsZCdzIG5vdCBhIFZBWC4KKyAqLworCisvKiBjb25zdCBjaGFyICoKKyAqIGluZXRfbnRvcDQoc3JjLCBkc3QsIHNpemUpCisgKglmb3JtYXQgYW4gSVB2NCBhZGRyZXNzCisgKiByZXR1cm46CisgKglgZHN0JyAoYXMgYSBjb25zdCkKKyAqIG5vdGVzOgorICoJKDEpIHVzZXMgbm8gc3RhdGljcworICoJKDIpIHRha2VzIGEgdV9jaGFyKiBub3QgYW4gaW5fYWRkciBhcyBpbnB1dAorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgoraW5ldF9udG9wNChjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBmbXRbXSA9ICIldS4ldS4ldS4ldSI7CisJY2hhciB0bXBbc2l6ZW9mICIyNTUuMjU1LjI1NS4yNTUiXTsKKwlpbnQgbnByaW50ZWQ7CisKKwlucHJpbnRlZCA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksIGZtdCwgc3JjWzBdLCBzcmNbMV0sIHNyY1syXSwgc3JjWzNdKTsKKwlpZiAobnByaW50ZWQgPCAwKQorCQlyZXR1cm4gKE5VTEwpOwkvKiB3ZSBhc3N1bWUgImVycm5vIiB3YXMgc2V0IGJ5ICJzbnByaW50ZigpIiAqLworCWlmICgoc2l6ZV90KW5wcmludGVkID49IHNpemUpIHsKKwkJZXJybm8gPSBFTk9TUEM7CisJCXJldHVybiAoTlVMTCk7CisJfQorCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOworCXJldHVybiAoZHN0KTsKK30KKworI2lmbmRlZiBOT19JUFY2CisvKiBjb25zdCBjaGFyICoKKyAqIGluZXRfbnRvcDYoc3JjLCBkc3QsIHNpemUpCisgKgljb252ZXJ0IElQdjYgYmluYXJ5IGFkZHJlc3MgaW50byBwcmVzZW50YXRpb24gKHByaW50YWJsZSkgZm9ybWF0CisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitpbmV0X250b3A2KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQoreworCS8qCisJICogTm90ZSB0aGF0IGludDMyX3QgYW5kIGludDE2X3QgbmVlZCBvbmx5IGJlICJhdCBsZWFzdCIgbGFyZ2UgZW5vdWdoCisJICogdG8gY29udGFpbiBhIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4gIE9uIHNvbWUgc3lzdGVtcywgbGlrZQorCSAqIENyYXlzLCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGFuIGludGVnZXIgdmFyaWFibGUgd2l0aCAxNiBiaXRzLgorCSAqIEtlZXAgdGhpcyBpbiBtaW5kIGlmIHlvdSB0aGluayB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY29kZWQKKwkgKiB0byB1c2UgcG9pbnRlciBvdmVybGF5cy4gIEFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCisJICovCisJY2hhciB0bXBbc2l6ZW9mICJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjoyNTUuMjU1LjI1NS4yNTUiXSwgKnRwOworCXN0cnVjdCB7IGludCBiYXNlLCBsZW47IH0gYmVzdCwgY3VyOworCXVuc2lnbmVkIGludCB3b3Jkc1tOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaXTsKKwlpbnQgaTsKKworCS8qCisJICogUHJlcHJvY2VzczoKKwkgKglDb3B5IHRoZSBpbnB1dCAoYnl0ZXdpc2UpIGFycmF5IGludG8gYSB3b3Jkd2lzZSBhcnJheS4KKwkgKglGaW5kIHRoZSBsb25nZXN0IHJ1biBvZiAweDAwJ3MgaW4gc3JjW10gZm9yIDo6IHNob3J0aGFuZGluZy4KKwkgKi8KKwltZW1zZXQod29yZHMsICdcMCcsIHNpemVvZiB3b3Jkcyk7CisJZm9yIChpID0gMDsgaSA8IE5TX0lONkFERFJTWjsgaSsrKQorCQl3b3Jkc1tpIC8gMl0gfD0gKHNyY1tpXSA8PCAoKDEgLSAoaSAlIDIpKSA8PCAzKSk7CisJYmVzdC5iYXNlID0gLTE7CisJYmVzdC5sZW4gPSAwOworCWN1ci5iYXNlID0gLTE7CisJY3VyLmxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IChOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaKTsgaSsrKSB7CisJCWlmICh3b3Jkc1tpXSA9PSAwKSB7CisJCQlpZiAoY3VyLmJhc2UgPT0gLTEpCisJCQkJY3VyLmJhc2UgPSBpLCBjdXIubGVuID0gMTsKKwkJCWVsc2UKKwkJCQljdXIubGVuKys7CisJCX0gZWxzZSB7CisJCQlpZiAoY3VyLmJhc2UgIT0gLTEpIHsKKwkJCQlpZiAoYmVzdC5iYXNlID09IC0xIHx8IGN1ci5sZW4gPiBiZXN0LmxlbikKKwkJCQkJYmVzdCA9IGN1cjsKKwkJCQljdXIuYmFzZSA9IC0xOworCQkJfQorCQl9CisJfQorCWlmIChjdXIuYmFzZSAhPSAtMSkgeworCQlpZiAoYmVzdC5iYXNlID09IC0xIHx8IGN1ci5sZW4gPiBiZXN0LmxlbikKKwkJCWJlc3QgPSBjdXI7CisJfQorCWlmIChiZXN0LmJhc2UgIT0gLTEgJiYgYmVzdC5sZW4gPCAyKQorCQliZXN0LmJhc2UgPSAtMTsKKworCS8qCisJICogRm9ybWF0IHRoZSByZXN1bHQuCisJICovCisJdHAgPSB0bXA7CisJZm9yIChpID0gMDsgaSA8IChOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaKTsgaSsrKSB7CisJCS8qIEFyZSB3ZSBpbnNpZGUgdGhlIGJlc3QgcnVuIG9mIDB4MDAncz8gKi8KKwkJaWYgKGJlc3QuYmFzZSAhPSAtMSAmJiBpID49IGJlc3QuYmFzZSAmJgorCQkgICAgaSA8IChiZXN0LmJhc2UgKyBiZXN0LmxlbikpIHsKKwkJCWlmIChpID09IGJlc3QuYmFzZSkKKwkJCQkqdHArKyA9ICc6JzsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIEFyZSB3ZSBmb2xsb3dpbmcgYW4gaW5pdGlhbCBydW4gb2YgMHgwMHMgb3IgYW55IHJlYWwgaGV4PyAqLworCQlpZiAoaSAhPSAwKQorCQkJKnRwKysgPSAnOic7CisJCS8qIElzIHRoaXMgYWRkcmVzcyBhbiBlbmNhcHN1bGF0ZWQgSVB2ND8gKi8KKwkJaWYgKGkgPT0gNiAmJiBiZXN0LmJhc2UgPT0gMCAmJgorCQkgICAgKGJlc3QubGVuID09IDYgfHwgKGJlc3QubGVuID09IDUgJiYgd29yZHNbNV0gPT0gMHhmZmZmKSkpIHsKKwkJCWlmICghaW5ldF9udG9wNChzcmMrMTIsIHRwLCBzaXplb2YgdG1wIC0gKHRwIC0gdG1wKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCXRwICs9IHN0cmxlbih0cCk7CisJCQlicmVhazsKKwkJfQorCQl0cCArPSBzbnByaW50Zih0cCwgc2l6ZW9mIHRtcCAtICh0cCAtIHRtcCksICIleCIsIHdvcmRzW2ldKTsKKwl9CisJLyogV2FzIGl0IGEgdHJhaWxpbmcgcnVuIG9mIDB4MDAncz8gKi8KKwlpZiAoYmVzdC5iYXNlICE9IC0xICYmIChiZXN0LmJhc2UgKyBiZXN0LmxlbikgPT0KKwkgICAgKE5TX0lONkFERFJTWiAvIE5TX0lOVDE2U1opKQorCQkqdHArKyA9ICc6JzsKKwkqdHArKyA9ICdcMCc7CisKKwkvKgorCSAqIENoZWNrIGZvciBvdmVyZmxvdywgY29weSwgYW5kIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKChzaXplX3QpKHRwIC0gdG1wKSA+IHNpemUpIHsKKwkJZXJybm8gPSBFTk9TUEM7CisJCXJldHVybiAoTlVMTCk7CisJfQorCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOworCXJldHVybiAoZHN0KTsKK30KKyNlbmRpZgorCisvKiBjaGFyICoKKyAqIGluZXRfbnRvcChhZiwgc3JjLCBkc3QsIHNpemUpCisgKgljb252ZXJ0IGEgbmV0d29yayBmb3JtYXQgYWRkcmVzcyB0byBwcmVzZW50YXRpb24gZm9ybWF0LgorICogcmV0dXJuOgorICoJcG9pbnRlciB0byBwcmVzZW50YXRpb24gZm9ybWF0IGFkZHJlc3MgKGBkc3QnKSwgb3IgTlVMTCAoc2VlIGVycm5vKS4KKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK2NvbnN0IGNoYXIgKgoraW5ldF9udG9wKGludCBhZiwgY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQoreworCXN3aXRjaCAoYWYpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiAoaW5ldF9udG9wNChzcmMsIGRzdCwgc2l6ZSkpOworI2lmbmRlZiBOT19JUFY2CisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuIChpbmV0X250b3A2KHNyYywgZHN0LCBzaXplKSk7CisjZW5kaWYKKwlkZWZhdWx0OgorCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L2luZXRfcHRvbi5jIGIvY29tcGF0L2luZXRfcHRvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiOWEwYTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvaW5ldF9wdG9uLmMKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSAgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0KKyAqIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBJTlRFUk5FVCBTT0ZUV0FSRSBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcKKyAqIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCisjaWZuZGVmIE5TX0lOVDE2U1oKKyNkZWZpbmUgTlNfSU5UMTZTWiAgICAgICAyCisjZW5kaWYKKworI2lmbmRlZiBOU19JTkFERFJTWgorI2RlZmluZSBOU19JTkFERFJTWiAgICAgIDQKKyNlbmRpZgorCisjaWZuZGVmIE5TX0lONkFERFJTWgorI2RlZmluZSBOU19JTjZBRERSU1ogICAgMTYKKyNlbmRpZgorCisvKgorICogV0FSTklORzogRG9uJ3QgZXZlbiBjb25zaWRlciB0cnlpbmcgdG8gY29tcGlsZSB0aGlzIG9uIGEgc3lzdGVtIHdoZXJlCisgKiBzaXplb2YoaW50KSA8IDQuICBzaXplb2YoaW50KSA+IDQgaXMgZmluZTsgYWxsIHRoZSB3b3JsZCdzIG5vdCBhIFZBWC4KKyAqLworCitzdGF0aWMgaW50IGluZXRfcHRvbjQoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QpOworI2lmbmRlZiBOT19JUFY2CitzdGF0aWMgaW50IGluZXRfcHRvbjYoY29uc3QgY2hhciAqc3JjLCB1bnNpZ25lZCBjaGFyICpkc3QpOworI2VuZGlmCisKKy8qIGludAorICogaW5ldF9wdG9uNChzcmMsIGRzdCkKKyAqICAgICAgbGlrZSBpbmV0X2F0b24oKSBidXQgd2l0aG91dCBhbGwgdGhlIGhleGFkZWNpbWFsIGFuZCBzaG9ydGhhbmQuCisgKiByZXR1cm46CisgKiAgICAgIDEgaWYgYHNyYycgaXMgYSB2YWxpZCBkb3R0ZWQgcXVhZCwgZWxzZSAwLgorICogbm90aWNlOgorICogICAgICBkb2VzIG5vdCB0b3VjaCBgZHN0JyB1bmxlc3MgaXQncyByZXR1cm5pbmcgMS4KKyAqIGF1dGhvcjoKKyAqICAgICAgUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworc3RhdGljIGludAoraW5ldF9wdG9uNChjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCkKK3sKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgZGlnaXRzW10gPSAiMDEyMzQ1Njc4OSI7CisgICAgICAgIGludCBzYXdfZGlnaXQsIG9jdGV0cywgY2g7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgdG1wW05TX0lOQUREUlNaXSwgKnRwOworCisgICAgICAgIHNhd19kaWdpdCA9IDA7CisgICAgICAgIG9jdGV0cyA9IDA7CisgICAgICAgICoodHAgPSB0bXApID0gMDsKKyAgICAgICAgd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgeworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBjaDsKKworICAgICAgICAgICAgICAgIGlmICgocGNoID0gc3RyY2hyKGRpZ2l0cywgY2gpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmV3ID0gKnRwICogMTAgKyAocGNoIC0gZGlnaXRzKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldyA+IDI1NSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICp0cCA9IG5ldzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIHNhd19kaWdpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytvY3RldHMgPiA0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhd19kaWdpdCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnLicgJiYgc2F3X2RpZ2l0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2N0ZXRzID09IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAqKyt0cCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBzYXdfZGlnaXQgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2N0ZXRzIDwgNCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICBtZW1jcHkoZHN0LCB0bXAsIE5TX0lOQUREUlNaKTsKKyAgICAgICAgcmV0dXJuICgxKTsKK30KKworLyogaW50CisgKiBpbmV0X3B0b242KHNyYywgZHN0KQorICogICAgICBjb252ZXJ0IHByZXNlbnRhdGlvbiBsZXZlbCBhZGRyZXNzIHRvIG5ldHdvcmsgb3JkZXIgYmluYXJ5IGZvcm0uCisgKiByZXR1cm46CisgKiAgICAgIDEgaWYgYHNyYycgaXMgYSB2YWxpZCBbUkZDMTg4NCAyLjJdIGFkZHJlc3MsIGVsc2UgMC4KKyAqIG5vdGljZToKKyAqICAgICAgKDEpIGRvZXMgbm90IHRvdWNoIGBkc3QnIHVubGVzcyBpdCdzIHJldHVybmluZyAxLgorICogICAgICAoMikgOjogaW4gYSBmdWxsIGFkZHJlc3MgaXMgc2lsZW50bHkgaWdub3JlZC4KKyAqIGNyZWRpdDoKKyAqICAgICAgaW5zcGlyZWQgYnkgTWFyayBBbmRyZXdzLgorICogYXV0aG9yOgorICogICAgICBQYXVsIFZpeGllLCAxOTk2LgorICovCisKKyNpZm5kZWYgTk9fSVBWNgorc3RhdGljIGludAoraW5ldF9wdG9uNihjb25zdCBjaGFyICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCkKK3sKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgeGRpZ2l0c19sW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHhkaWdpdHNfdVtdID0gIjAxMjM0NTY3ODlBQkNERUYiOworICAgICAgICB1bnNpZ25lZCBjaGFyIHRtcFtOU19JTjZBRERSU1pdLCAqdHAsICplbmRwLCAqY29sb25wOworICAgICAgICBjb25zdCBjaGFyICp4ZGlnaXRzLCAqY3VydG9rOworICAgICAgICBpbnQgY2gsIHNhd194ZGlnaXQ7CisgICAgICAgIHVuc2lnbmVkIGludCB2YWw7CisKKyAgICAgICAgbWVtc2V0KCh0cCA9IHRtcCksICdcMCcsIE5TX0lONkFERFJTWik7CisgICAgICAgIGVuZHAgPSB0cCArIE5TX0lONkFERFJTWjsKKyAgICAgICAgY29sb25wID0gTlVMTDsKKyAgICAgICAgLyogTGVhZGluZyA6OiByZXF1aXJlcyBzb21lIHNwZWNpYWwgaGFuZGxpbmcuICovCisgICAgICAgIGlmICgqc3JjID09ICc6JykKKyAgICAgICAgICAgICAgICBpZiAoKisrc3JjICE9ICc6JykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIGN1cnRvayA9IHNyYzsKKyAgICAgICAgc2F3X3hkaWdpdCA9IDA7CisgICAgICAgIHZhbCA9IDA7CisgICAgICAgIHdoaWxlICgoY2ggPSAqc3JjKyspICE9ICdcMCcpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwY2g7CisKKyAgICAgICAgICAgICAgICBpZiAoKHBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfbCksIGNoKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfdSksIGNoKTsKKyAgICAgICAgICAgICAgICBpZiAocGNoICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA8PD0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCB8PSAocGNoIC0geGRpZ2l0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsID4gMHhmZmZmKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICAgICAgc2F3X3hkaWdpdCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICc6JykgeworICAgICAgICAgICAgICAgICAgICAgICAgY3VydG9rID0gc3JjOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzYXdfeGRpZ2l0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvbnApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb25wID0gdHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRwICsgTlNfSU5UMTZTWiA+IGVuZHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAqdHArKyA9ICh1bnNpZ25lZCBjaGFyKSAodmFsID4+IDgpICYgMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICp0cCsrID0gKHVuc2lnbmVkIGNoYXIpIHZhbCAmIDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICBzYXdfeGRpZ2l0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICcuJyAmJiAoKHRwICsgTlNfSU5BRERSU1opIDw9IGVuZHApICYmCisgICAgICAgICAgICAgICAgICAgIGluZXRfcHRvbjQoY3VydG9rLCB0cCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cCArPSBOU19JTkFERFJTWjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhd194ZGlnaXQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAvKiAnXDAnIHdhcyBzZWVuIGJ5IGluZXRfcHRvbjQoKS4gKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2F3X3hkaWdpdCkgeworICAgICAgICAgICAgICAgIGlmICh0cCArIE5TX0lOVDE2U1ogPiBlbmRwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAqdHArKyA9ICh1bnNpZ25lZCBjaGFyKSAodmFsID4+IDgpICYgMHhmZjsKKyAgICAgICAgICAgICAgICAqdHArKyA9ICh1bnNpZ25lZCBjaGFyKSB2YWwgJiAweGZmOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xvbnAgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogU2luY2Ugc29tZSBtZW1tb3ZlKCkncyBlcnJvbmVvdXNseSBmYWlsIHRvIGhhbmRsZQorICAgICAgICAgICAgICAgICAqIG92ZXJsYXBwaW5nIHJlZ2lvbnMsIHdlJ2xsIGRvIHRoZSBzaGlmdCBieSBoYW5kLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGNvbnN0IGludCBuID0gdHAgLSBjb2xvbnA7CisgICAgICAgICAgICAgICAgaW50IGk7CisKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5kcFstIGldID0gY29sb25wW24gLSBpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ucFtuIC0gaV0gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0cCA9IGVuZHA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRwICE9IGVuZHApCisgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgbWVtY3B5KGRzdCwgdG1wLCBOU19JTjZBRERSU1opOworICAgICAgICByZXR1cm4gKDEpOworfQorI2VuZGlmCisKKy8qIGludAorICogaXNjX25ldF9wdG9uKGFmLCBzcmMsIGRzdCkKKyAqICAgICAgY29udmVydCBmcm9tIHByZXNlbnRhdGlvbiBmb3JtYXQgKHdoaWNoIHVzdWFsbHkgbWVhbnMgQVNDSUkgcHJpbnRhYmxlKQorICogICAgICB0byBuZXR3b3JrIGZvcm1hdCAod2hpY2ggaXMgdXN1YWxseSBzb21lIGtpbmQgb2YgYmluYXJ5IGZvcm1hdCkuCisgKiByZXR1cm46CisgKiAgICAgIDEgaWYgdGhlIGFkZHJlc3Mgd2FzIHZhbGlkIGZvciB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgZmFtaWx5CisgKiAgICAgIDAgaWYgdGhlIGFkZHJlc3Mgd2Fzbid0IHZhbGlkIChgZHN0JyBpcyB1bnRvdWNoZWQgaW4gdGhpcyBjYXNlKQorICogICAgICAtMSBpZiBzb21lIG90aGVyIGVycm9yIG9jY3VycmVkIChgZHN0JyBpcyB1bnRvdWNoZWQgaW4gdGhpcyBjYXNlLCB0b28pCisgKiBhdXRob3I6CisgKiAgICAgIFBhdWwgVml4aWUsIDE5OTYuCisgKi8KK2ludAoraW5ldF9wdG9uKGludCBhZiwgY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpCit7CisgICAgICAgIHN3aXRjaCAoYWYpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgICAgIHJldHVybiAoaW5ldF9wdG9uNChzcmMsIGRzdCkpOworI2lmbmRlZiBOT19JUFY2CisgICAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgICAgICAgICAgcmV0dXJuIChpbmV0X3B0b242KHNyYywgZHN0KSk7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBlcnJubyA9IEVBRk5PU1VQUE9SVDsKKyAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgfQorICAgICAgICAvKiBOT1RSRUFDSEVEICovCit9CmRpZmYgLS1naXQgYS9jb21wYXQvbWVtbWVtLmMgYi9jb21wYXQvbWVtbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiY2I0MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9tZW1tZW0uYwpAQCAtMCwwICsxLDMyIEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK3ZvaWQgKmdpdG1lbW1lbShjb25zdCB2b2lkICpoYXlzdGFjaywgc2l6ZV90IGhheXN0YWNrX2xlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpuZWVkbGUsIHNpemVfdCBuZWVkbGVfbGVuKQoreworCWNvbnN0IGNoYXIgKmJlZ2luID0gaGF5c3RhY2s7CisJY29uc3QgY2hhciAqbGFzdF9wb3NzaWJsZSA9IGJlZ2luICsgaGF5c3RhY2tfbGVuIC0gbmVlZGxlX2xlbjsKKwljb25zdCBjaGFyICp0YWlsID0gbmVlZGxlOworCWNoYXIgcG9pbnQ7CisKKwkvKgorCSAqIFRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHRoZSBlbXB0eSBzdHJpbmcgaXMgZGVlbWVkIHRvIG9jY3VyIGF0CisJICogdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLgorCSAqLworCWlmIChuZWVkbGVfbGVuID09IDApCisJCXJldHVybiAodm9pZCAqKWJlZ2luOworCisJLyoKKwkgKiBTYW5pdHkgY2hlY2ssIG90aGVyd2lzZSB0aGUgbG9vcCBtaWdodCBzZWFyY2ggdGhyb3VnaCB0aGUgd2hvbGUKKwkgKiBtZW1vcnkuCisJICovCisJaWYgKGhheXN0YWNrX2xlbiA8IG5lZWRsZV9sZW4pCisJCXJldHVybiBOVUxMOworCisJcG9pbnQgPSAqdGFpbCsrOworCWZvciAoOyBiZWdpbiA8PSBsYXN0X3Bvc3NpYmxlOyBiZWdpbisrKSB7CisJCWlmICgqYmVnaW4gPT0gcG9pbnQgJiYgIW1lbWNtcChiZWdpbiArIDEsIHRhaWwsIG5lZWRsZV9sZW4gLSAxKSkKKwkJCXJldHVybiAodm9pZCAqKWJlZ2luOworCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L21pbmd3LmMgYi9jb21wYXQvbWluZ3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJkYjFlCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21pbmd3LmMKQEAgLTAsMCArMSwyMTQzIEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAid2luMzIuaCIKKyNpbmNsdWRlIDxjb25pby5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSAiLi4vc3RyYnVmLmgiCisjaW5jbHVkZSAiLi4vcnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICIuLi9jYWNoZS5oIgorCitzdGF0aWMgY29uc3QgaW50IGRlbGF5W10gPSB7IDAsIDEsIDEwLCAyMCwgNDAgfTsKKworaW50IGVycl93aW5fdG9fcG9zaXgoRFdPUkQgd2luZXJyKQoreworCWludCBlcnJvciA9IEVOT1NZUzsKKwlzd2l0Y2god2luZXJyKSB7CisJY2FzZSBFUlJPUl9BQ0NFU1NfREVOSUVEOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9BQ0NPVU5UX0RJU0FCTEVEOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9BQ0NPVU5UX1JFU1RSSUNUSU9OOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9BTFJFQURZX0FTU0lHTkVEOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX0FMUkVBRFlfRVhJU1RTOiBlcnJvciA9IEVFWElTVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9BUklUSE1FVElDX09WRVJGTE9XOiBlcnJvciA9IEVSQU5HRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfQ09NTUFORDogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX0RFVklDRTogZXJyb3IgPSBFTk9ERVY7IGJyZWFrOworCWNhc2UgRVJST1JfQkFEX0RSSVZFUl9MRVZFTDogZXJyb3IgPSBFTlhJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfRVhFX0ZPUk1BVDogZXJyb3IgPSBFTk9FWEVDOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9GT1JNQVQ6IGVycm9yID0gRU5PRVhFQzsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfTEVOR1RIOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfUEFUSE5BTUU6IGVycm9yID0gRU5PRU5UOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9QSVBFOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX0JBRF9VTklUOiBlcnJvciA9IEVOT0RFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9CQURfVVNFUk5BTUU6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0JST0tFTl9QSVBFOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX0JVRkZFUl9PVkVSRkxPVzogZXJyb3IgPSBFTkFNRVRPT0xPTkc7IGJyZWFrOworCWNhc2UgRVJST1JfQlVTWTogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9CVVNZX0RSSVZFOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX0NBTExfTk9UX0lNUExFTUVOVEVEOiBlcnJvciA9IEVOT1NZUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9DQU5OT1RfTUFLRTogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfQ0FOVE9QRU46IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0NBTlRSRUFEOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9DQU5UV1JJVEU6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0NSQzogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfQ1VSUkVOVF9ESVJFQ1RPUlk6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0RFVklDRV9JTl9VU0U6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfREVWX05PVF9FWElTVDogZXJyb3IgPSBFTk9ERVY7IGJyZWFrOworCWNhc2UgRVJST1JfRElSRUNUT1JZOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9ESVJfTk9UX0VNUFRZOiBlcnJvciA9IEVOT1RFTVBUWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9ESVNLX0NIQU5HRTogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfRElTS19GVUxMOiBlcnJvciA9IEVOT1NQQzsgYnJlYWs7CisJY2FzZSBFUlJPUl9EUklWRV9MT0NLRUQ6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfRU5WVkFSX05PVF9GT1VORDogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfRVhFX01BUktFRF9JTlZBTElEOiBlcnJvciA9IEVOT0VYRUM7IGJyZWFrOworCWNhc2UgRVJST1JfRklMRU5BTUVfRVhDRURfUkFOR0U6IGVycm9yID0gRU5BTUVUT09MT05HOyBicmVhazsKKwljYXNlIEVSUk9SX0ZJTEVfRVhJU1RTOiBlcnJvciA9IEVFWElTVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9GSUxFX0lOVkFMSUQ6IGVycm9yID0gRU5PREVWOyBicmVhazsKKwljYXNlIEVSUk9SX0ZJTEVfTk9UX0ZPVU5EOiBlcnJvciA9IEVOT0VOVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9HRU5fRkFJTFVSRTogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfSEFORExFX0RJU0tfRlVMTDogZXJyb3IgPSBFTk9TUEM7IGJyZWFrOworCWNhc2UgRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUjogZXJyb3IgPSBFTk9NRU07IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9BQ0NFU1M6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfQUREUkVTUzogZXJyb3IgPSBFRkFVTFQ7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9CTE9DSzogZXJyb3IgPSBFRkFVTFQ7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9EQVRBOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0RSSVZFOiBlcnJvciA9IEVOT0RFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0VYRV9TSUdOQVRVUkU6IGVycm9yID0gRU5PRVhFQzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0ZMQUdTOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0ZVTkNUSU9OOiBlcnJvciA9IEVOT1NZUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0hBTkRMRTogZXJyb3IgPSBFQkFERjsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX0xPR09OX0hPVVJTOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX05BTUU6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfT1dORVI6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX1BBU1NXT1JEOiBlcnJvciA9IEVQRVJNOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfUFJJTUFSWV9HUk9VUDogZXJyb3IgPSBFSU5WQUw7IGJyZWFrOworCWNhc2UgRVJST1JfSU5WQUxJRF9TSUdOQUxfTlVNQkVSOiBlcnJvciA9IEVJTlZBTDsgYnJlYWs7CisJY2FzZSBFUlJPUl9JTlZBTElEX1RBUkdFVF9IQU5ETEU6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX0lOVkFMSURfV09SS1NUQVRJT046IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0lPX0RFVklDRTogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfSU9fSU5DT01QTEVURTogZXJyb3IgPSBFSU5UUjsgYnJlYWs7CisJY2FzZSBFUlJPUl9MT0NLRUQ6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfTE9DS19WSU9MQVRJT046IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX0xPR09OX0ZBSUxVUkU6IGVycm9yID0gRUFDQ0VTOyBicmVhazsKKwljYXNlIEVSUk9SX01BUFBFRF9BTElHTk1FTlQ6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX01FVEFfRVhQQU5TSU9OX1RPT19MT05HOiBlcnJvciA9IEUyQklHOyBicmVhazsKKwljYXNlIEVSUk9SX01PUkVfREFUQTogZXJyb3IgPSBFUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9ORUdBVElWRV9TRUVLOiBlcnJvciA9IEVTUElQRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT0FDQ0VTUzogZXJyb3IgPSBFRkFVTFQ7IGJyZWFrOworCWNhc2UgRVJST1JfTk9ORV9NQVBQRUQ6IGVycm9yID0gRUlOVkFMOyBicmVhazsKKwljYXNlIEVSUk9SX05PVF9FTk9VR0hfTUVNT1JZOiBlcnJvciA9IEVOT01FTTsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT1RfUkVBRFk6IGVycm9yID0gRUFHQUlOOyBicmVhazsKKwljYXNlIEVSUk9SX05PVF9TQU1FX0RFVklDRTogZXJyb3IgPSBFWERFVjsgYnJlYWs7CisJY2FzZSBFUlJPUl9OT19EQVRBOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX05PX01PUkVfU0VBUkNIX0hBTkRMRVM6IGVycm9yID0gRUlPOyBicmVhazsKKwljYXNlIEVSUk9SX05PX1BST0NfU0xPVFM6IGVycm9yID0gRUFHQUlOOyBicmVhazsKKwljYXNlIEVSUk9SX05PX1NVQ0hfUFJJVklMRUdFOiBlcnJvciA9IEVBQ0NFUzsgYnJlYWs7CisJY2FzZSBFUlJPUl9PUEVOX0ZBSUxFRDogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfT1BFTl9GSUxFUzogZXJyb3IgPSBFQlVTWTsgYnJlYWs7CisJY2FzZSBFUlJPUl9PUEVSQVRJT05fQUJPUlRFRDogZXJyb3IgPSBFSU5UUjsgYnJlYWs7CisJY2FzZSBFUlJPUl9PVVRPRk1FTU9SWTogZXJyb3IgPSBFTk9NRU07IGJyZWFrOworCWNhc2UgRVJST1JfUEFTU1dPUkRfRVhQSVJFRDogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfUEFUSF9CVVNZOiBlcnJvciA9IEVCVVNZOyBicmVhazsKKwljYXNlIEVSUk9SX1BBVEhfTk9UX0ZPVU5EOiBlcnJvciA9IEVOT0VOVDsgYnJlYWs7CisJY2FzZSBFUlJPUl9QSVBFX0JVU1k6IGVycm9yID0gRUJVU1k7IGJyZWFrOworCWNhc2UgRVJST1JfUElQRV9DT05ORUNURUQ6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfUElQRV9MSVNURU5JTkc6IGVycm9yID0gRVBJUEU7IGJyZWFrOworCWNhc2UgRVJST1JfUElQRV9OT1RfQ09OTkVDVEVEOiBlcnJvciA9IEVQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX1BSSVZJTEVHRV9OT1RfSEVMRDogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfUkVBRF9GQVVMVDogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfU0VFSzogZXJyb3IgPSBFSU87IGJyZWFrOworCWNhc2UgRVJST1JfU0VFS19PTl9ERVZJQ0U6IGVycm9yID0gRVNQSVBFOyBicmVhazsKKwljYXNlIEVSUk9SX1NIQVJJTkdfQlVGRkVSX0VYQ0VFREVEOiBlcnJvciA9IEVORklMRTsgYnJlYWs7CisJY2FzZSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTjogZXJyb3IgPSBFQUNDRVM7IGJyZWFrOworCWNhc2UgRVJST1JfU1RBQ0tfT1ZFUkZMT1c6IGVycm9yID0gRU5PTUVNOyBicmVhazsKKwljYXNlIEVSUk9SX1NXQVBFUlJPUjogZXJyb3IgPSBFTk9FTlQ7IGJyZWFrOworCWNhc2UgRVJST1JfVE9PX01BTllfTU9EVUxFUzogZXJyb3IgPSBFTUZJTEU7IGJyZWFrOworCWNhc2UgRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUzogZXJyb3IgPSBFTUZJTEU7IGJyZWFrOworCWNhc2UgRVJST1JfVU5SRUNPR05JWkVEX01FRElBOiBlcnJvciA9IEVOWElPOyBicmVhazsKKwljYXNlIEVSUk9SX1VOUkVDT0dOSVpFRF9WT0xVTUU6IGVycm9yID0gRU5PREVWOyBicmVhazsKKwljYXNlIEVSUk9SX1dBSVRfTk9fQ0hJTERSRU46IGVycm9yID0gRUNISUxEOyBicmVhazsKKwljYXNlIEVSUk9SX1dSSVRFX0ZBVUxUOiBlcnJvciA9IEVJTzsgYnJlYWs7CisJY2FzZSBFUlJPUl9XUklURV9QUk9URUNUOiBlcnJvciA9IEVST0ZTOyBicmVhazsKKwl9CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19maWxlX2luX3VzZV9lcnJvcihEV09SRCBlcnJjb2RlKQoreworCXN3aXRjaCAoZXJyY29kZSkgeworCWNhc2UgRVJST1JfU0hBUklOR19WSU9MQVRJT046CisJY2FzZSBFUlJPUl9BQ0NFU1NfREVOSUVEOgorCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWFkX3llc19ub19hbnN3ZXIodm9pZCkKK3sKKwljaGFyIGFuc3dlclsxMDI0XTsKKworCWlmIChmZ2V0cyhhbnN3ZXIsIHNpemVvZihhbnN3ZXIpLCBzdGRpbikpIHsKKwkJc2l6ZV90IGFuc3dlcl9sZW4gPSBzdHJsZW4oYW5zd2VyKTsKKwkJaW50IGdvdF9mdWxsX2xpbmUgPSAwLCBjOworCisJCS8qIHJlbW92ZSB0aGUgbmV3bGluZSAqLworCQlpZiAoYW5zd2VyX2xlbiA+PSAyICYmIGFuc3dlclthbnN3ZXJfbGVuLTJdID09ICdccicpIHsKKwkJCWFuc3dlclthbnN3ZXJfbGVuLTJdID0gJ1wwJzsKKwkJCWdvdF9mdWxsX2xpbmUgPSAxOworCQl9IGVsc2UgaWYgKGFuc3dlcl9sZW4gPj0gMSAmJiBhbnN3ZXJbYW5zd2VyX2xlbi0xXSA9PSAnXG4nKSB7CisJCQlhbnN3ZXJbYW5zd2VyX2xlbi0xXSA9ICdcMCc7CisJCQlnb3RfZnVsbF9saW5lID0gMTsKKwkJfQorCQkvKiBmbHVzaCB0aGUgYnVmZmVyIGluIGNhc2Ugd2UgZGlkIG5vdCBnZXQgdGhlIGZ1bGwgbGluZSAqLworCQlpZiAoIWdvdF9mdWxsX2xpbmUpCisJCQl3aGlsZSAoKGMgPSBnZXRjaGFyKCkpICE9IEVPRiAmJiBjICE9ICdcbicpCisJCQkJOworCX0gZWxzZQorCQkvKiB3ZSBjb3VsZCBub3QgcmVhZCwgcmV0dXJuIHRoZQorCQkgKiBkZWZhdWx0IGFuc3dlciB3aGljaCBpcyBubyAqLworCQlyZXR1cm4gMDsKKworCWlmICh0b2xvd2VyKGFuc3dlclswXSkgPT0gJ3knICYmICFhbnN3ZXJbMV0pCisJCXJldHVybiAxOworCWlmICghc3RybmNhc2VjbXAoYW5zd2VyLCAieWVzIiwgc2l6ZW9mKGFuc3dlcikpKQorCQlyZXR1cm4gMTsKKwlpZiAodG9sb3dlcihhbnN3ZXJbMF0pID09ICduJyAmJiAhYW5zd2VyWzFdKQorCQlyZXR1cm4gMDsKKwlpZiAoIXN0cm5jYXNlY21wKGFuc3dlciwgIm5vIiwgc2l6ZW9mKGFuc3dlcikpKQorCQlyZXR1cm4gMDsKKworCS8qIGRpZCBub3QgZmluZCBhbiBhbnN3ZXIgd2UgdW5kZXJzdGFuZCAqLworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBhc2tfeWVzX25vX2lmX3Bvc3NpYmxlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCWNoYXIgcXVlc3Rpb25bNDA5Nl07CisJY29uc3QgY2hhciAqcmV0cnlfaG9va1tdID0geyBOVUxMLCBOVUxMLCBOVUxMIH07CisJdmFfbGlzdCBhcmdzOworCisJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKwl2c25wcmludGYocXVlc3Rpb24sIHNpemVvZihxdWVzdGlvbiksIGZvcm1hdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJaWYgKChyZXRyeV9ob29rWzBdID0gbWluZ3dfZ2V0ZW52KCJHSVRfQVNLX1lFU05PIikpKSB7CisJCXJldHJ5X2hvb2tbMV0gPSBxdWVzdGlvbjsKKwkJcmV0dXJuICFydW5fY29tbWFuZF92X29wdChyZXRyeV9ob29rLCAwKTsKKwl9CisKKwlpZiAoIWlzYXR0eShfZmlsZW5vKHN0ZGluKSkgfHwgIWlzYXR0eShfZmlsZW5vKHN0ZGVycikpKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgxKSB7CisJCWludCBhbnN3ZXI7CisJCWZwcmludGYoc3RkZXJyLCAiJXMgKHkvbikgIiwgcXVlc3Rpb24pOworCisJCWlmICgoYW5zd2VyID0gcmVhZF95ZXNfbm9fYW5zd2VyKCkpID49IDApCisJCQlyZXR1cm4gYW5zd2VyOworCisJCWZwcmludGYoc3RkZXJyLCAiU29ycnksIEkgZGlkIG5vdCB1bmRlcnN0YW5kIHlvdXIgYW5zd2VyLiAiCisJCQkJIlBsZWFzZSB0eXBlICd5JyBvciAnbidcbiIpOworCX0KK30KKworaW50IG1pbmd3X3VubGluayhjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlpbnQgcmV0LCB0cmllcyA9IDA7CisJd2NoYXJfdCB3cGF0aG5hbWVbTUFYX1BBVEhdOworCWlmICh4dXRmdG93Y3NfcGF0aCh3cGF0aG5hbWUsIHBhdGhuYW1lKSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIHJlYWQtb25seSBmaWxlcyBjYW5ub3QgYmUgcmVtb3ZlZCAqLworCV93Y2htb2Qod3BhdGhuYW1lLCAwNjY2KTsKKwl3aGlsZSAoKHJldCA9IF93dW5saW5rKHdwYXRobmFtZSkpID09IC0xICYmIHRyaWVzIDwgQVJSQVlfU0laRShkZWxheSkpIHsKKwkJaWYgKCFpc19maWxlX2luX3VzZV9lcnJvcihHZXRMYXN0RXJyb3IoKSkpCisJCQlicmVhazsKKwkJLyoKKwkJICogV2UgYXNzdW1lIHRoYXQgc29tZSBvdGhlciBwcm9jZXNzIGhhZCB0aGUgc291cmNlIG9yCisJCSAqIGRlc3RpbmF0aW9uIGZpbGUgb3BlbiBhdCB0aGUgd3JvbmcgbW9tZW50IGFuZCByZXRyeS4KKwkJICogSW4gb3JkZXIgdG8gZ2l2ZSB0aGUgb3RoZXIgcHJvY2VzcyBhIGhpZ2hlciBjaGFuY2UgdG8KKwkJICogY29tcGxldGUgaXRzIG9wZXJhdGlvbiwgd2UgZ2l2ZSB1cCBvdXIgdGltZSBzbGljZSBub3cuCisJCSAqIElmIHdlIGhhdmUgdG8gcmV0cnkgYWdhaW4sIHdlIGRvIHNsZWVwIGEgYml0LgorCQkgKi8KKwkJU2xlZXAoZGVsYXlbdHJpZXNdKTsKKwkJdHJpZXMrKzsKKwl9CisJd2hpbGUgKHJldCA9PSAtMSAmJiBpc19maWxlX2luX3VzZV9lcnJvcihHZXRMYXN0RXJyb3IoKSkgJiYKKwkgICAgICAgYXNrX3llc19ub19pZl9wb3NzaWJsZSgiVW5saW5rIG9mIGZpbGUgJyVzJyBmYWlsZWQuICIKKwkJCSJTaG91bGQgSSB0cnkgYWdhaW4/IiwgcGF0aG5hbWUpKQorCSAgICAgICByZXQgPSBfd3VubGluayh3cGF0aG5hbWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfZGlyX2VtcHR5KGNvbnN0IHdjaGFyX3QgKndwYXRoKQoreworCVdJTjMyX0ZJTkRfREFUQVcgZmluZGJ1ZjsKKwlIQU5ETEUgaGFuZGxlOworCXdjaGFyX3Qgd2J1ZltNQVhfUEFUSCArIDJdOworCXdjc2NweSh3YnVmLCB3cGF0aCk7CisJd2NzY2F0KHdidWYsIEwiXFwqIik7CisJaGFuZGxlID0gRmluZEZpcnN0RmlsZVcod2J1ZiwgJmZpbmRidWYpOworCWlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXJldHVybiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9OT19NT1JFX0ZJTEVTOworCisJd2hpbGUgKCF3Y3NjbXAoZmluZGJ1Zi5jRmlsZU5hbWUsIEwiLiIpIHx8CisJCQkhd2NzY21wKGZpbmRidWYuY0ZpbGVOYW1lLCBMIi4uIikpCisJCWlmICghRmluZE5leHRGaWxlVyhoYW5kbGUsICZmaW5kYnVmKSkgeworCQkJRFdPUkQgZXJyID0gR2V0TGFzdEVycm9yKCk7CisJCQlGaW5kQ2xvc2UoaGFuZGxlKTsKKwkJCXJldHVybiBlcnIgPT0gRVJST1JfTk9fTU9SRV9GSUxFUzsKKwkJfQorCUZpbmRDbG9zZShoYW5kbGUpOworCXJldHVybiAwOworfQorCitpbnQgbWluZ3dfcm1kaXIoY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJaW50IHJldCwgdHJpZXMgPSAwOworCXdjaGFyX3Qgd3BhdGhuYW1lW01BWF9QQVRIXTsKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod3BhdGhuYW1lLCBwYXRobmFtZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoKHJldCA9IF93cm1kaXIod3BhdGhuYW1lKSkgPT0gLTEgJiYgdHJpZXMgPCBBUlJBWV9TSVpFKGRlbGF5KSkgeworCQlpZiAoIWlzX2ZpbGVfaW5fdXNlX2Vycm9yKEdldExhc3RFcnJvcigpKSkKKwkJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCWlmIChlcnJubyAhPSBFQUNDRVMpCisJCQlicmVhazsKKwkJaWYgKCFpc19kaXJfZW1wdHkod3BhdGhuYW1lKSkgeworCQkJZXJybm8gPSBFTk9URU1QVFk7CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBXZSBhc3N1bWUgdGhhdCBzb21lIG90aGVyIHByb2Nlc3MgaGFkIHRoZSBzb3VyY2Ugb3IKKwkJICogZGVzdGluYXRpb24gZmlsZSBvcGVuIGF0IHRoZSB3cm9uZyBtb21lbnQgYW5kIHJldHJ5LgorCQkgKiBJbiBvcmRlciB0byBnaXZlIHRoZSBvdGhlciBwcm9jZXNzIGEgaGlnaGVyIGNoYW5jZSB0bworCQkgKiBjb21wbGV0ZSBpdHMgb3BlcmF0aW9uLCB3ZSBnaXZlIHVwIG91ciB0aW1lIHNsaWNlIG5vdy4KKwkJICogSWYgd2UgaGF2ZSB0byByZXRyeSBhZ2Fpbiwgd2UgZG8gc2xlZXAgYSBiaXQuCisJCSAqLworCQlTbGVlcChkZWxheVt0cmllc10pOworCQl0cmllcysrOworCX0KKwl3aGlsZSAocmV0ID09IC0xICYmIGVycm5vID09IEVBQ0NFUyAmJiBpc19maWxlX2luX3VzZV9lcnJvcihHZXRMYXN0RXJyb3IoKSkgJiYKKwkgICAgICAgYXNrX3llc19ub19pZl9wb3NzaWJsZSgiRGVsZXRpb24gb2YgZGlyZWN0b3J5ICclcycgZmFpbGVkLiAiCisJCQkiU2hvdWxkIEkgdHJ5IGFnYWluPyIsIHBhdGhuYW1lKSkKKwkgICAgICAgcmV0ID0gX3dybWRpcih3cGF0aG5hbWUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBtaW5nd19ta2Rpcihjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSkKK3sKKwlpbnQgcmV0OworCXdjaGFyX3Qgd3BhdGhbTUFYX1BBVEhdOworCWlmICh4dXRmdG93Y3NfcGF0aCh3cGF0aCwgcGF0aCkgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0ID0gX3dta2Rpcih3cGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IG1pbmd3X29wZW4gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgb2ZsYWdzLCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXVuc2lnbmVkIG1vZGU7CisJaW50IGZkOworCXdjaGFyX3Qgd2ZpbGVuYW1lW01BWF9QQVRIXTsKKworCXZhX3N0YXJ0KGFyZ3MsIG9mbGFncyk7CisJbW9kZSA9IHZhX2FyZyhhcmdzLCBpbnQpOworCXZhX2VuZChhcmdzKTsKKworCWlmIChmaWxlbmFtZSAmJiAhc3RyY21wKGZpbGVuYW1lLCAiL2Rldi9udWxsIikpCisJCWZpbGVuYW1lID0gIm51bCI7CisKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod2ZpbGVuYW1lLCBmaWxlbmFtZSkgPCAwKQorCQlyZXR1cm4gLTE7CisJZmQgPSBfd29wZW4od2ZpbGVuYW1lLCBvZmxhZ3MsIG1vZGUpOworCisJaWYgKGZkIDwgMCAmJiAob2ZsYWdzICYgT19BQ0NNT0RFKSAhPSBPX1JET05MWSAmJiBlcnJubyA9PSBFQUNDRVMpIHsKKwkJRFdPUkQgYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cod2ZpbGVuYW1lKTsKKwkJaWYgKGF0dHJzICE9IElOVkFMSURfRklMRV9BVFRSSUJVVEVTICYmIChhdHRycyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkpCisJCQllcnJubyA9IEVJU0RJUjsKKwl9CisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgQk9PTCBXSU5BUEkgY3RybF9pZ25vcmUoRFdPUkQgdHlwZSkKK3sKKwlyZXR1cm4gVFJVRTsKK30KKworI3VuZGVmIGZnZXRjCitpbnQgbWluZ3dfZmdldGMoRklMRSAqc3RyZWFtKQoreworCWludCBjaDsKKwlpZiAoIWlzYXR0eShfZmlsZW5vKHN0cmVhbSkpKQorCQlyZXR1cm4gZmdldGMoc3RyZWFtKTsKKworCVNldENvbnNvbGVDdHJsSGFuZGxlcihjdHJsX2lnbm9yZSwgVFJVRSk7CisJd2hpbGUgKDEpIHsKKwkJY2ggPSBmZ2V0YyhzdHJlYW0pOworCQlpZiAoY2ggIT0gRU9GIHx8IEdldExhc3RFcnJvcigpICE9IEVSUk9SX09QRVJBVElPTl9BQk9SVEVEKQorCQkJYnJlYWs7CisKKwkJLyogQ3RybCtDIHdhcyBwcmVzc2VkLCBzaW11bGF0ZSBTSUdJTlQgYW5kIHJldHJ5ICovCisJCW1pbmd3X3JhaXNlKFNJR0lOVCk7CisJfQorCVNldENvbnNvbGVDdHJsSGFuZGxlcihjdHJsX2lnbm9yZSwgRkFMU0UpOworCXJldHVybiBjaDsKK30KKworI3VuZGVmIGZvcGVuCitGSUxFICptaW5nd19mb3BlbiAoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm90eXBlKQoreworCUZJTEUgKmZpbGU7CisJd2NoYXJfdCB3ZmlsZW5hbWVbTUFYX1BBVEhdLCB3b3R5cGVbNF07CisJaWYgKGZpbGVuYW1lICYmICFzdHJjbXAoZmlsZW5hbWUsICIvZGV2L251bGwiKSkKKwkJZmlsZW5hbWUgPSAibnVsIjsKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod2ZpbGVuYW1lLCBmaWxlbmFtZSkgPCAwIHx8CisJCXh1dGZ0b3djcyh3b3R5cGUsIG90eXBlLCBBUlJBWV9TSVpFKHdvdHlwZSkpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJZmlsZSA9IF93Zm9wZW4od2ZpbGVuYW1lLCB3b3R5cGUpOworCXJldHVybiBmaWxlOworfQorCitGSUxFICptaW5nd19mcmVvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUsIEZJTEUgKnN0cmVhbSkKK3sKKwlGSUxFICpmaWxlOworCXdjaGFyX3Qgd2ZpbGVuYW1lW01BWF9QQVRIXSwgd290eXBlWzRdOworCWlmIChmaWxlbmFtZSAmJiAhc3RyY21wKGZpbGVuYW1lLCAiL2Rldi9udWxsIikpCisJCWZpbGVuYW1lID0gIm51bCI7CisJaWYgKHh1dGZ0b3djc19wYXRoKHdmaWxlbmFtZSwgZmlsZW5hbWUpIDwgMCB8fAorCQl4dXRmdG93Y3Mod290eXBlLCBvdHlwZSwgQVJSQVlfU0laRSh3b3R5cGUpKSA8IDApCisJCXJldHVybiBOVUxMOworCWZpbGUgPSBfd2ZyZW9wZW4od2ZpbGVuYW1lLCB3b3R5cGUsIHN0cmVhbSk7CisJcmV0dXJuIGZpbGU7Cit9CisKKyN1bmRlZiBmZmx1c2gKK2ludCBtaW5nd19mZmx1c2goRklMRSAqc3RyZWFtKQoreworCWludCByZXQgPSBmZmx1c2goc3RyZWFtKTsKKworCS8qCisJICogd3JpdGUoKSBpcyB1c2VkIGJlaGluZCB0aGUgc2NlbmVzIG9mIHN0ZGlvIG91dHB1dCBmdW5jdGlvbnMuCisJICogU2luY2UgZ2l0IGNvZGUgZG9lcyBub3QgY2hlY2sgZm9yIGVycm9ycyBhZnRlciBlYWNoIHN0ZGlvIHdyaXRlCisJICogb3BlcmF0aW9uLCBpdCBjYW4gaGFwcGVuIHRoYXQgd3JpdGUoKSBpcyBjYWxsZWQgYnkgYSBsYXRlcgorCSAqIHN0ZGlvIGZ1bmN0aW9uIGV2ZW4gaWYgYW4gZWFybGllciB3cml0ZSgpIGNhbGwgZmFpbGVkLiBJbiB0aGUKKwkgKiBjYXNlIG9mIGEgcGlwZSB3aG9zZSByZWFkYWJsZSBlbmQgd2FzIGNsb3NlZCwgb25seSB0aGUgZmlyc3QKKwkgKiBjYWxsIHRvIHdyaXRlKCkgcmVwb3J0cyBFUElQRSBvbiBXaW5kb3dzLiBTdWJzZXF1ZW50IHdyaXRlKCkKKwkgKiBjYWxscyByZXBvcnQgRUlOVkFMLiBJdCBpcyBpbXBvc3NpYmxlIHRvIG5vdGljZSB3aGV0aGVyIHRoaXMKKwkgKiBmZmx1c2ggaW52b2NhdGlvbiB0cmlnZ2VyZWQgc3VjaCBhIGNhc2UsIHRoZXJlZm9yZSwgd2UgaGF2ZSB0bworCSAqIGNhdGNoIGFsbCBFSU5WQUwgZXJyb3JzIHdob2xlLXNhbGUuCisJICovCisJaWYgKHJldCAmJiBlcnJubyA9PSBFSU5WQUwpCisJCWVycm5vID0gRVBJUEU7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbWluZ3dfYWNjZXNzKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSkKK3sKKwl3Y2hhcl90IHdmaWxlbmFtZVtNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHdmaWxlbmFtZSwgZmlsZW5hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCS8qIFhfT0sgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgTVNWQ1JUIHZlcnNpb24gKi8KKwlyZXR1cm4gX3dhY2Nlc3Mod2ZpbGVuYW1lLCBtb2RlICYgflhfT0spOworfQorCitpbnQgbWluZ3dfY2hkaXIoY29uc3QgY2hhciAqZGlybmFtZSkKK3sKKwl3Y2hhcl90IHdkaXJuYW1lW01BWF9QQVRIXTsKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod2Rpcm5hbWUsIGRpcm5hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBfd2NoZGlyKHdkaXJuYW1lKTsKK30KKworaW50IG1pbmd3X2NobW9kKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSkKK3sKKwl3Y2hhcl90IHdmaWxlbmFtZVtNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHdmaWxlbmFtZSwgZmlsZW5hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBfd2NobW9kKHdmaWxlbmFtZSwgbW9kZSk7Cit9CisKKy8qCisgKiBUaGUgdW5pdCBvZiBGSUxFVElNRSBpcyAxMDAtbmFub3NlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxNjAxLCBVVEMuCisgKiBSZXR1cm5zIHRoZSAxMDAtbmFub3NlY29uZHMgKCJoZWt0byBuYW5vc2Vjb25kcyIpIHNpbmNlIHRoZSBlcG9jaC4KKyAqLworc3RhdGljIGlubGluZSBsb25nIGxvbmcgZmlsZXRpbWVfdG9faG5zZWMoY29uc3QgRklMRVRJTUUgKmZ0KQoreworCWxvbmcgbG9uZyB3aW5UaW1lID0gKChsb25nIGxvbmcpZnQtPmR3SGlnaERhdGVUaW1lIDw8IDMyKSArIGZ0LT5kd0xvd0RhdGVUaW1lOworCS8qIFdpbmRvd3MgdG8gVW5peCBFcG9jaCBjb252ZXJzaW9uICovCisJcmV0dXJuIHdpblRpbWUgLSAxMTY0NDQ3MzYwMDAwMDAwMDBMTDsKK30KKworc3RhdGljIGlubGluZSB0aW1lX3QgZmlsZXRpbWVfdG9fdGltZV90KGNvbnN0IEZJTEVUSU1FICpmdCkKK3sKKwlyZXR1cm4gKHRpbWVfdCkoZmlsZXRpbWVfdG9faG5zZWMoZnQpIC8gMTAwMDAwMDApOworfQorCisvKiBXZSBrZWVwIHRoZSBkb19sc3RhdCBjb2RlIGluIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYXZvaWQgcmVjdXJzaW9uLgorICogV2hlbiBhIHBhdGggZW5kcyB3aXRoIGEgc2xhc2gsIHRoZSBzdGF0IHdpbGwgZmFpbCB3aXRoIEVOT0VOVC4gSW4KKyAqIHRoaXMgY2FzZSwgd2Ugc3RyaXAgdGhlIHRyYWlsaW5nIHNsYXNoZXMgYW5kIHN0YXQgYWdhaW4uCisgKgorICogSWYgZm9sbG93IGlzIHRydWUgdGhlbiBhY3QgbGlrZSBzdGF0KCkgYW5kIHJlcG9ydCBvbiB0aGUgbGluaworICogdGFyZ2V0LiBPdGhlcndpc2UgcmVwb3J0IG9uIHRoZSBsaW5rIGl0c2VsZi4KKyAqLworc3RhdGljIGludCBkb19sc3RhdChpbnQgZm9sbG93LCBjb25zdCBjaGFyICpmaWxlX25hbWUsIHN0cnVjdCBzdGF0ICpidWYpCit7CisJV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBmZGF0YTsKKwl3Y2hhcl90IHdmaWxlbmFtZVtNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHdmaWxlbmFtZSwgZmlsZV9uYW1lKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChHZXRGaWxlQXR0cmlidXRlc0V4Vyh3ZmlsZW5hbWUsIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmZkYXRhKSkgeworCQlidWYtPnN0X2lubyA9IDA7CisJCWJ1Zi0+c3RfZ2lkID0gMDsKKwkJYnVmLT5zdF91aWQgPSAwOworCQlidWYtPnN0X25saW5rID0gMTsKKwkJYnVmLT5zdF9tb2RlID0gZmlsZV9hdHRyX3RvX3N0X21vZGUoZmRhdGEuZHdGaWxlQXR0cmlidXRlcyk7CisJCWJ1Zi0+c3Rfc2l6ZSA9IGZkYXRhLm5GaWxlU2l6ZUxvdyB8CisJCQkoKChvZmZfdClmZGF0YS5uRmlsZVNpemVIaWdoKTw8MzIpOworCQlidWYtPnN0X2RldiA9IGJ1Zi0+c3RfcmRldiA9IDA7IC8qIG5vdCB1c2VkIGJ5IEdpdCAqLworCQlidWYtPnN0X2F0aW1lID0gZmlsZXRpbWVfdG9fdGltZV90KCYoZmRhdGEuZnRMYXN0QWNjZXNzVGltZSkpOworCQlidWYtPnN0X210aW1lID0gZmlsZXRpbWVfdG9fdGltZV90KCYoZmRhdGEuZnRMYXN0V3JpdGVUaW1lKSk7CisJCWJ1Zi0+c3RfY3RpbWUgPSBmaWxldGltZV90b190aW1lX3QoJihmZGF0YS5mdENyZWF0aW9uVGltZSkpOworCQlpZiAoZmRhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX1JFUEFSU0VfUE9JTlQpIHsKKwkJCVdJTjMyX0ZJTkRfREFUQVcgZmluZGJ1ZjsKKwkJCUhBTkRMRSBoYW5kbGUgPSBGaW5kRmlyc3RGaWxlVyh3ZmlsZW5hbWUsICZmaW5kYnVmKTsKKwkJCWlmIChoYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJCQlpZiAoKGZpbmRidWYuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX1JFUEFSU0VfUE9JTlQpICYmCisJCQkJCQkoZmluZGJ1Zi5kd1Jlc2VydmVkMCA9PSBJT19SRVBBUlNFX1RBR19TWU1MSU5LKSkgeworCQkJCQlpZiAoZm9sbG93KSB7CisJCQkJCQljaGFyIGJ1ZmZlcltNQVhJTVVNX1JFUEFSU0VfREFUQV9CVUZGRVJfU0laRV07CisJCQkJCQlidWYtPnN0X3NpemUgPSByZWFkbGluayhmaWxlX25hbWUsIGJ1ZmZlciwgTUFYSU1VTV9SRVBBUlNFX0RBVEFfQlVGRkVSX1NJWkUpOworCQkJCQl9IGVsc2UgeworCQkJCQkJYnVmLT5zdF9tb2RlID0gU19JRkxOSzsKKwkJCQkJfQorCQkJCQlidWYtPnN0X21vZGUgfD0gU19JUkVBRDsKKwkJCQkJaWYgKCEoZmluZGJ1Zi5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpKQorCQkJCQkJYnVmLT5zdF9tb2RlIHw9IFNfSVdSSVRFOworCQkJCX0KKwkJCQlGaW5kQ2xvc2UoaGFuZGxlKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJc3dpdGNoIChHZXRMYXN0RXJyb3IoKSkgeworCWNhc2UgRVJST1JfQUNDRVNTX0RFTklFRDoKKwljYXNlIEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OOgorCWNhc2UgRVJST1JfTE9DS19WSU9MQVRJT046CisJY2FzZSBFUlJPUl9TSEFSSU5HX0JVRkZFUl9FWENFRURFRDoKKwkJZXJybm8gPSBFQUNDRVM7CisJCWJyZWFrOworCWNhc2UgRVJST1JfQlVGRkVSX09WRVJGTE9XOgorCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJYnJlYWs7CisJY2FzZSBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWToKKwkJZXJybm8gPSBFTk9NRU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm5vID0gRU5PRU5UOworCQlicmVhazsKKwl9CisJcmV0dXJuIC0xOworfQorCisvKiBXZSBwcm92aWRlIG91ciBvd24gbHN0YXQvZnN0YXQgZnVuY3Rpb25zLCBzaW5jZSB0aGUgcHJvdmlkZWQKKyAqIGxzdGF0L2ZzdGF0IGZ1bmN0aW9ucyBhcmUgc28gc2xvdy4gVGhlc2Ugc3RhdCBmdW5jdGlvbnMgYXJlCisgKiB0YWlsb3JlZCBmb3IgR2l0J3MgdXNhZ2UgKHJlYWQ6IGZhc3QpLCBhbmQgYXJlIG5vdCBtZWFudCB0byBiZQorICogY29tcGxldGUuIE5vdGUgdGhhdCBHaXQgc3RhdCgpcyBhcmUgcmVkaXJlY3RlZCB0byBtaW5nd19sc3RhdCgpCisgKiB0b28sIHNpbmNlIFdpbmRvd3MgZG9lc24ndCByZWFsbHkgaGFuZGxlIHN5bWxpbmtzIHRoYXQgd2VsbC4KKyAqLworc3RhdGljIGludCBkb19zdGF0X2ludGVybmFsKGludCBmb2xsb3csIGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlpbnQgbmFtZWxlbjsKKwljaGFyIGFsdF9uYW1lW1BBVEhfTUFYXTsKKworCWlmICghZG9fbHN0YXQoZm9sbG93LCBmaWxlX25hbWUsIGJ1ZikpCisJCXJldHVybiAwOworCisJLyogaWYgZmlsZV9uYW1lIGVuZGVkIGluIGEgJy8nLCBXaW5kb3dzIHJldHVybmVkIEVOT0VOVDsKKwkgKiB0cnkgYWdhaW4gd2l0aG91dCB0cmFpbGluZyBzbGFzaGVzCisJICovCisJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJcmV0dXJuIC0xOworCisJbmFtZWxlbiA9IHN0cmxlbihmaWxlX25hbWUpOworCWlmIChuYW1lbGVuICYmIGZpbGVfbmFtZVtuYW1lbGVuLTFdICE9ICcvJykKKwkJcmV0dXJuIC0xOworCXdoaWxlIChuYW1lbGVuICYmIGZpbGVfbmFtZVtuYW1lbGVuLTFdID09ICcvJykKKwkJLS1uYW1lbGVuOworCWlmICghbmFtZWxlbiB8fCBuYW1lbGVuID49IFBBVEhfTUFYKQorCQlyZXR1cm4gLTE7CisKKwltZW1jcHkoYWx0X25hbWUsIGZpbGVfbmFtZSwgbmFtZWxlbik7CisJYWx0X25hbWVbbmFtZWxlbl0gPSAwOworCXJldHVybiBkb19sc3RhdChmb2xsb3csIGFsdF9uYW1lLCBidWYpOworfQorCitpbnQgbWluZ3dfbHN0YXQoY29uc3QgY2hhciAqZmlsZV9uYW1lLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCXJldHVybiBkb19zdGF0X2ludGVybmFsKDAsIGZpbGVfbmFtZSwgYnVmKTsKK30KK2ludCBtaW5nd19zdGF0KGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlyZXR1cm4gZG9fc3RhdF9pbnRlcm5hbCgxLCBmaWxlX25hbWUsIGJ1Zik7Cit9CisKK2ludCBtaW5nd19mc3RhdChpbnQgZmQsIHN0cnVjdCBzdGF0ICpidWYpCit7CisJSEFORExFIGZoID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisJQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04gZmRhdGE7CisKKwlpZiAoZmggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIC0xOworCX0KKwkvKiBkaXJlY3Qgbm9uLWZpbGUgaGFuZGxlcyB0byBNUydzIGZzdGF0KCkgKi8KKwlpZiAoR2V0RmlsZVR5cGUoZmgpICE9IEZJTEVfVFlQRV9ESVNLKQorCQlyZXR1cm4gX2ZzdGF0aTY0KGZkLCBidWYpOworCisJaWYgKEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlKGZoLCAmZmRhdGEpKSB7CisJCWJ1Zi0+c3RfaW5vID0gMDsKKwkJYnVmLT5zdF9naWQgPSAwOworCQlidWYtPnN0X3VpZCA9IDA7CisJCWJ1Zi0+c3RfbmxpbmsgPSAxOworCQlidWYtPnN0X21vZGUgPSBmaWxlX2F0dHJfdG9fc3RfbW9kZShmZGF0YS5kd0ZpbGVBdHRyaWJ1dGVzKTsKKwkJYnVmLT5zdF9zaXplID0gZmRhdGEubkZpbGVTaXplTG93IHwKKwkJCSgoKG9mZl90KWZkYXRhLm5GaWxlU2l6ZUhpZ2gpPDwzMik7CisJCWJ1Zi0+c3RfZGV2ID0gYnVmLT5zdF9yZGV2ID0gMDsgLyogbm90IHVzZWQgYnkgR2l0ICovCisJCWJ1Zi0+c3RfYXRpbWUgPSBmaWxldGltZV90b190aW1lX3QoJihmZGF0YS5mdExhc3RBY2Nlc3NUaW1lKSk7CisJCWJ1Zi0+c3RfbXRpbWUgPSBmaWxldGltZV90b190aW1lX3QoJihmZGF0YS5mdExhc3RXcml0ZVRpbWUpKTsKKwkJYnVmLT5zdF9jdGltZSA9IGZpbGV0aW1lX3RvX3RpbWVfdCgmKGZkYXRhLmZ0Q3JlYXRpb25UaW1lKSk7CisJCXJldHVybiAwOworCX0KKwllcnJubyA9IEVCQURGOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVfdF90b19maWxldGltZSh0aW1lX3QgdCwgRklMRVRJTUUgKmZ0KQoreworCWxvbmcgbG9uZyB3aW5UaW1lID0gdCAqIDEwMDAwMDAwTEwgKyAxMTY0NDQ3MzYwMDAwMDAwMDBMTDsKKwlmdC0+ZHdMb3dEYXRlVGltZSA9IHdpblRpbWU7CisJZnQtPmR3SGlnaERhdGVUaW1lID0gd2luVGltZSA+PiAzMjsKK30KKworaW50IG1pbmd3X3V0aW1lIChjb25zdCBjaGFyICpmaWxlX25hbWUsIGNvbnN0IHN0cnVjdCB1dGltYnVmICp0aW1lcykKK3sKKwlGSUxFVElNRSBtZnQsIGFmdDsKKwlpbnQgZmgsIHJjOworCURXT1JEIGF0dHJzOworCXdjaGFyX3Qgd2ZpbGVuYW1lW01BWF9QQVRIXTsKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod2ZpbGVuYW1lLCBmaWxlX25hbWUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogbXVzdCBoYXZlIHdyaXRlIHBlcm1pc3Npb24gKi8KKwlhdHRycyA9IEdldEZpbGVBdHRyaWJ1dGVzVyh3ZmlsZW5hbWUpOworCWlmIChhdHRycyAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUyAmJgorCSAgICAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkpIHsKKwkJLyogaWdub3JlIGVycm9ycyBoZXJlOyBvcGVuKCkgd2lsbCByZXBvcnQgdGhlbSAqLworCQlTZXRGaWxlQXR0cmlidXRlc1cod2ZpbGVuYW1lLCBhdHRycyAmIH5GSUxFX0FUVFJJQlVURV9SRUFET05MWSk7CisJfQorCisJaWYgKChmaCA9IF93b3Blbih3ZmlsZW5hbWUsIE9fUkRXUiB8IE9fQklOQVJZKSkgPCAwKSB7CisJCXJjID0gLTE7CisJCWdvdG8gcmV2ZXJ0X2F0dHJzOworCX0KKworCWlmICh0aW1lcykgeworCQl0aW1lX3RfdG9fZmlsZXRpbWUodGltZXMtPm1vZHRpbWUsICZtZnQpOworCQl0aW1lX3RfdG9fZmlsZXRpbWUodGltZXMtPmFjdGltZSwgJmFmdCk7CisJfSBlbHNlIHsKKwkJR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJm1mdCk7CisJCWFmdCA9IG1mdDsKKwl9CisJaWYgKCFTZXRGaWxlVGltZSgoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZoKSwgTlVMTCwgJmFmdCwgJm1mdCkpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJjID0gLTE7CisJfSBlbHNlCisJCXJjID0gMDsKKwljbG9zZShmaCk7CisKK3JldmVydF9hdHRyczoKKwlpZiAoYXR0cnMgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMgJiYKKwkgICAgKGF0dHJzICYgRklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpKSB7CisJCS8qIGlnbm9yZSBlcnJvcnMgYWdhaW4gKi8KKwkJU2V0RmlsZUF0dHJpYnV0ZXNXKHdmaWxlbmFtZSwgYXR0cnMpOworCX0KKwlyZXR1cm4gcmM7Cit9CisKK3Vuc2lnbmVkIGludCBzbGVlcCAodW5zaWduZWQgaW50IHNlY29uZHMpCit7CisJU2xlZXAoc2Vjb25kcyoxMDAwKTsKKwlyZXR1cm4gMDsKK30KKworY2hhciAqbWluZ3dfbWt0ZW1wKGNoYXIgKnRlbXBsYXRlKQoreworCXdjaGFyX3Qgd3RlbXBsYXRlW01BWF9QQVRIXTsKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod3RlbXBsYXRlLCB0ZW1wbGF0ZSkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIV93bWt0ZW1wKHd0ZW1wbGF0ZSkpCisJCXJldHVybiBOVUxMOworCWlmICh4d2NzdG91dGYodGVtcGxhdGUsIHd0ZW1wbGF0ZSwgc3RybGVuKHRlbXBsYXRlKSArIDEpIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHRlbXBsYXRlOworfQorCitpbnQgbWtzdGVtcChjaGFyICp0ZW1wbGF0ZSkKK3sKKwljaGFyICpmaWxlbmFtZSA9IG1rdGVtcCh0ZW1wbGF0ZSk7CisJaWYgKGZpbGVuYW1lID09IE5VTEwpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gb3BlbihmaWxlbmFtZSwgT19SRFdSIHwgT19DUkVBVCwgMDYwMCk7Cit9CisKK2ludCBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCB2b2lkICp0eikKK3sKKwlGSUxFVElNRSBmdDsKKwlsb25nIGxvbmcgaG5zZWM7CisKKwlHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmZnQpOworCWhuc2VjID0gZmlsZXRpbWVfdG9faG5zZWMoJmZ0KTsKKwl0di0+dHZfc2VjID0gaG5zZWMgLyAxMDAwMDAwMDsKKwl0di0+dHZfdXNlYyA9IChobnNlYyAlIDEwMDAwMDAwKSAvIDEwOworCXJldHVybiAwOworfQorCitpbnQgcGlwZShpbnQgZmlsZWRlc1syXSkKK3sKKwlIQU5ETEUgaFsyXTsKKworCS8qIHRoaXMgY3JlYXRlcyBub24taW5oZXJpdGFibGUgaGFuZGxlcyAqLworCWlmICghQ3JlYXRlUGlwZSgmaFswXSwgJmhbMV0sIE5VTEwsIDgxOTIpKSB7CisJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCXJldHVybiAtMTsKKwl9CisJZmlsZWRlc1swXSA9IF9vcGVuX29zZmhhbmRsZSgoaW50KWhbMF0sIE9fTk9JTkhFUklUKTsKKwlpZiAoZmlsZWRlc1swXSA8IDApIHsKKwkJQ2xvc2VIYW5kbGUoaFswXSk7CisJCUNsb3NlSGFuZGxlKGhbMV0pOworCQlyZXR1cm4gLTE7CisJfQorCWZpbGVkZXNbMV0gPSBfb3Blbl9vc2ZoYW5kbGUoKGludCloWzFdLCBPX05PSU5IRVJJVCk7CisJaWYgKGZpbGVkZXNbMV0gPCAwKSB7CisJCWNsb3NlKGZpbGVkZXNbMF0pOworCQlDbG9zZUhhbmRsZShoWzFdKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRtICpnbXRpbWVfcihjb25zdCB0aW1lX3QgKnRpbWVwLCBzdHJ1Y3QgdG0gKnJlc3VsdCkKK3sKKwkvKiBnbXRpbWUoKSBpbiBNU1ZDUlQuRExMIGlzIHRocmVhZC1zYWZlLCBidXQgbm90IHJlZW50cmFudCAqLworCW1lbWNweShyZXN1bHQsIGdtdGltZSh0aW1lcCksIHNpemVvZihzdHJ1Y3QgdG0pKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqdGltZXAsIHN0cnVjdCB0bSAqcmVzdWx0KQoreworCS8qIGxvY2FsdGltZSgpIGluIE1TVkNSVC5ETEwgaXMgdGhyZWFkLXNhZmUsIGJ1dCBub3QgcmVlbnRyYW50ICovCisJbWVtY3B5KHJlc3VsdCwgbG9jYWx0aW1lKHRpbWVwKSwgc2l6ZW9mKHN0cnVjdCB0bSkpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIgKm1pbmd3X2dldGN3ZChjaGFyICpwb2ludGVyLCBpbnQgbGVuKQoreworCWludCBpOworCXdjaGFyX3Qgd3BvaW50ZXJbTUFYX1BBVEhdOworCWlmICghX3dnZXRjd2Qod3BvaW50ZXIsIEFSUkFZX1NJWkUod3BvaW50ZXIpKSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHh3Y3N0b3V0Zihwb2ludGVyLCB3cG9pbnRlciwgbGVuKSA8IDApCisJCXJldHVybiBOVUxMOworCWZvciAoaSA9IDA7IHBvaW50ZXJbaV07IGkrKykKKwkJaWYgKHBvaW50ZXJbaV0gPT0gJ1xcJykKKwkJCXBvaW50ZXJbaV0gPSAnLyc7CisJcmV0dXJuIHBvaW50ZXI7Cit9CisKKy8qCisgKiBTZWUgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS8xN3c1eWtmdCh2cy43MSkuYXNweAorICogKFBhcnNpbmcgQysrIENvbW1hbmQtTGluZSBBcmd1bWVudHMpCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpxdW90ZV9hcmcoY29uc3QgY2hhciAqYXJnKQoreworCS8qIGNvdW50IGNoYXJzIHRvIHF1b3RlICovCisJaW50IGxlbiA9IDAsIG4gPSAwOworCWludCBmb3JjZV9xdW90ZXMgPSAwOworCWNoYXIgKnEsICpkOworCWNvbnN0IGNoYXIgKnAgPSBhcmc7CisJaWYgKCEqcCkgZm9yY2VfcXVvdGVzID0gMTsKKwl3aGlsZSAoKnApIHsKKwkJaWYgKGlzc3BhY2UoKnApIHx8ICpwID09ICcqJyB8fCAqcCA9PSAnPycgfHwgKnAgPT0gJ3snIHx8ICpwID09ICdcJycpCisJCQlmb3JjZV9xdW90ZXMgPSAxOworCQllbHNlIGlmICgqcCA9PSAnIicpCisJCQluKys7CisJCWVsc2UgaWYgKCpwID09ICdcXCcpIHsKKwkJCWludCBjb3VudCA9IDA7CisJCQl3aGlsZSAoKnAgPT0gJ1xcJykgeworCQkJCWNvdW50Kys7CisJCQkJcCsrOworCQkJCWxlbisrOworCQkJfQorCQkJaWYgKCpwID09ICciJykKKwkJCQluICs9IGNvdW50KjIgKyAxOworCQkJY29udGludWU7CisJCX0KKwkJbGVuKys7CisJCXArKzsKKwl9CisJaWYgKCFmb3JjZV9xdW90ZXMgJiYgbiA9PSAwKQorCQlyZXR1cm4gYXJnOworCisJLyogaW5zZXJ0IFwgd2hlcmUgbmVjZXNzYXJ5ICovCisJZCA9IHEgPSB4bWFsbG9jKGxlbituKzMpOworCSpkKysgPSAnIic7CisJd2hpbGUgKCphcmcpIHsKKwkJaWYgKCphcmcgPT0gJyInKQorCQkJKmQrKyA9ICdcXCc7CisJCWVsc2UgaWYgKCphcmcgPT0gJ1xcJykgeworCQkJaW50IGNvdW50ID0gMDsKKwkJCXdoaWxlICgqYXJnID09ICdcXCcpIHsKKwkJCQljb3VudCsrOworCQkJCSpkKysgPSAqYXJnKys7CisJCQl9CisJCQlpZiAoKmFyZyA9PSAnIicpIHsKKwkJCQl3aGlsZSAoY291bnQtLSA+IDApCisJCQkJCSpkKysgPSAnXFwnOworCQkJCSpkKysgPSAnXFwnOworCQkJfQorCQl9CisJCSpkKysgPSAqYXJnKys7CisJfQorCSpkKysgPSAnIic7CisJKmQrKyA9IDA7CisJcmV0dXJuIHE7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJzZV9pbnRlcnByZXRlcihjb25zdCBjaGFyICpjbWQpCit7CisJc3RhdGljIGNoYXIgYnVmWzEwMF07CisJY2hhciAqcCwgKm9wdDsKKwlpbnQgbiwgZmQ7CisKKwkvKiBkb24ndCBldmVuIHRyeSBhIC5leGUgKi8KKwluID0gc3RybGVuKGNtZCk7CisJaWYgKG4gPj0gNCAmJiAhc3RyY2FzZWNtcChjbWQrbi00LCAiLmV4ZSIpKQorCQlyZXR1cm4gTlVMTDsKKworCWZkID0gb3BlbihjbWQsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwluID0gcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKS0xKTsKKwljbG9zZShmZCk7CisJaWYgKG4gPCA0KQkvKiBhdCBsZWFzdCAnIyEveCcgYW5kIG5vdCBlcnJvciAqLworCQlyZXR1cm4gTlVMTDsKKworCWlmIChidWZbMF0gIT0gJyMnIHx8IGJ1ZlsxXSAhPSAnIScpCisJCXJldHVybiBOVUxMOworCWJ1ZltuXSA9ICdcMCc7CisJcCA9IGJ1ZiArIHN0cmNzcG4oYnVmLCAiXHJcbiIpOworCWlmICghKnApCisJCXJldHVybiBOVUxMOworCisJKnAgPSAnXDAnOworCWlmICghKHAgPSBzdHJyY2hyKGJ1ZisyLCAnLycpKSAmJiAhKHAgPSBzdHJyY2hyKGJ1ZisyLCAnXFwnKSkpCisJCXJldHVybiBOVUxMOworCS8qIHN0cmlwIG9wdGlvbnMgKi8KKwlpZiAoKG9wdCA9IHN0cmNocihwKzEsICcgJykpKQorCQkqb3B0ID0gJ1wwJzsKKwlyZXR1cm4gcCsxOworfQorCisvKgorICogU3BsaXRzIHRoZSBQQVRIIGludG8gcGFydHMuCisgKi8KK3N0YXRpYyBjaGFyICoqZ2V0X3BhdGhfc3BsaXQodm9pZCkKK3sKKwljaGFyICpwLCAqKnBhdGgsICplbnZwYXRoID0gbWluZ3dfZ2V0ZW52KCJQQVRIIik7CisJaW50IGksIG4gPSAwOworCisJaWYgKCFlbnZwYXRoIHx8ICEqZW52cGF0aCkKKwkJcmV0dXJuIE5VTEw7CisKKwllbnZwYXRoID0geHN0cmR1cChlbnZwYXRoKTsKKwlwID0gZW52cGF0aDsKKwl3aGlsZSAocCkgeworCQljaGFyICpkaXIgPSBwOworCQlwID0gc3RyY2hyKHAsICc7Jyk7CisJCWlmIChwKSAqcCsrID0gJ1wwJzsKKwkJaWYgKCpkaXIpIHsJLyogbm90IGVhcmxpZXIsIGNhdGNoZXMgc2VyaWVzIG9mIDsgKi8KKwkJCSsrbjsKKwkJfQorCX0KKwlpZiAoIW4pCisJCXJldHVybiBOVUxMOworCisJcGF0aCA9IHhtYWxsb2MoKG4rMSkqc2l6ZW9mKGNoYXIgKikpOworCXAgPSBlbnZwYXRoOworCWkgPSAwOworCWRvIHsKKwkJaWYgKCpwKQorCQkJcGF0aFtpKytdID0geHN0cmR1cChwKTsKKwkJcCA9IHArc3RybGVuKHApKzE7CisJfSB3aGlsZSAoaSA8IG4pOworCXBhdGhbaV0gPSBOVUxMOworCisJZnJlZShlbnZwYXRoKTsKKworCXJldHVybiBwYXRoOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3BhdGhfc3BsaXQoY2hhciAqKnBhdGgpCit7CisJY2hhciAqKnAgPSBwYXRoOworCisJaWYgKCFwYXRoKQorCQlyZXR1cm47CisKKwl3aGlsZSAoKnApCisJCWZyZWUoKnArKyk7CisJZnJlZShwYXRoKTsKK30KKworLyoKKyAqIGV4ZV9vbmx5IG1lYW5zIHRoYXQgd2Ugb25seSB3YW50IHRvIGRldGVjdCAuZXhlIGZpbGVzLCBidXQgbm90IHNjcmlwdHMKKyAqICh3aGljaCBkbyBub3QgaGF2ZSBhbiBleHRlbnNpb24pCisgKi8KK3N0YXRpYyBjaGFyICpsb29rdXBfcHJvZyhjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmNtZCwgaW50IGlzZXhlLCBpbnQgZXhlX29ubHkpCit7CisJY2hhciBwYXRoW01BWF9QQVRIXTsKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy8lcy5leGUiLCBkaXIsIGNtZCk7CisKKwlpZiAoIWlzZXhlICYmIGFjY2VzcyhwYXRoLCBGX09LKSA9PSAwKQorCQlyZXR1cm4geHN0cmR1cChwYXRoKTsKKwlwYXRoW3N0cmxlbihwYXRoKS00XSA9ICdcMCc7CisJaWYgKCghZXhlX29ubHkgfHwgaXNleGUpICYmIGFjY2VzcyhwYXRoLCBGX09LKSA9PSAwKQorCQlpZiAoIShHZXRGaWxlQXR0cmlidXRlcyhwYXRoKSAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkpCisJCQlyZXR1cm4geHN0cmR1cChwYXRoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIERldGVybWluZXMgdGhlIGFic29sdXRlIHBhdGggb2YgY21kIHVzaW5nIHRoZSBzcGxpdCBwYXRoIGluIHBhdGguCisgKiBJZiBjbWQgY29udGFpbnMgYSBzbGFzaCBvciBiYWNrc2xhc2gsIG5vIGxvb2t1cCBpcyBwZXJmb3JtZWQuCisgKi8KK3N0YXRpYyBjaGFyICpwYXRoX2xvb2t1cChjb25zdCBjaGFyICpjbWQsIGNoYXIgKipwYXRoLCBpbnQgZXhlX29ubHkpCit7CisJY2hhciAqcHJvZyA9IE5VTEw7CisJaW50IGxlbiA9IHN0cmxlbihjbWQpOworCWludCBpc2V4ZSA9IGxlbiA+PSA0ICYmICFzdHJjYXNlY21wKGNtZCtsZW4tNCwgIi5leGUiKTsKKworCWlmIChzdHJjaHIoY21kLCAnLycpIHx8IHN0cmNocihjbWQsICdcXCcpKQorCQlwcm9nID0geHN0cmR1cChjbWQpOworCisJd2hpbGUgKCFwcm9nICYmICpwYXRoKQorCQlwcm9nID0gbG9va3VwX3Byb2coKnBhdGgrKywgY21kLCBpc2V4ZSwgZXhlX29ubHkpOworCisJcmV0dXJuIHByb2c7Cit9CisKK3N0YXRpYyBpbnQgZG9fcHV0ZW52KGNoYXIgKiplbnYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBzaXplLCBpbnQgZnJlZV9vbGQpOworCisvKiB1c2VkIG51bWJlciBvZiBlbGVtZW50cyBvZiBlbnZpcm9uIGFycmF5LCBpbmNsdWRpbmcgdGVybWluYXRpbmcgTlVMTCAqLworc3RhdGljIGludCBlbnZpcm9uX3NpemUgPSAwOworLyogYWxsb2NhdGVkIHNpemUgb2YgZW52aXJvbiBhcnJheSwgaW4gYnl0ZXMgKi8KK3N0YXRpYyBpbnQgZW52aXJvbl9hbGxvYyA9IDA7CisKKy8qCisgKiBDcmVhdGUgZW52aXJvbm1lbnQgYmxvY2sgc3VpdGFibGUgZm9yIENyZWF0ZVByb2Nlc3MuIE1lcmdlcyBjdXJyZW50CisgKiBwcm9jZXNzIGVudmlyb25tZW50IGFuZCB0aGUgc3VwcGxpZWQgZW52aXJvbm1lbnQgY2hhbmdlcy4KKyAqLworc3RhdGljIHdjaGFyX3QgKm1ha2VfZW52aXJvbm1lbnRfYmxvY2soY2hhciAqKmRlbHRhZW52KQoreworCXdjaGFyX3QgKndlbnZibGsgPSBOVUxMOworCWNoYXIgKip0bXBlbnY7CisJaW50IGkgPSAwLCBzaXplID0gZW52aXJvbl9zaXplLCB3ZW52c3ogPSAwLCB3ZW52cG9zID0gMDsKKworCXdoaWxlIChkZWx0YWVudiAmJiBkZWx0YWVudltpXSkKKwkJaSsrOworCisJLyogY29weSB0aGUgZW52aXJvbm1lbnQsIGxlYXZpbmcgc3BhY2UgZm9yIGNoYW5nZXMgKi8KKwl0bXBlbnYgPSB4bWFsbG9jKChzaXplICsgaSkgKiBzaXplb2YoY2hhciopKTsKKwltZW1jcHkodG1wZW52LCBlbnZpcm9uLCBzaXplICogc2l6ZW9mKGNoYXIqKSk7CisKKwkvKiBtZXJnZSBzdXBwbGllZCBlbnZpcm9ubWVudCBjaGFuZ2VzIGludG8gdGhlIHRlbXBvcmFyeSBlbnZpcm9ubWVudCAqLworCWZvciAoaSA9IDA7IGRlbHRhZW52ICYmIGRlbHRhZW52W2ldOyBpKyspCisJCXNpemUgPSBkb19wdXRlbnYodG1wZW52LCBkZWx0YWVudltpXSwgc2l6ZSwgMCk7CisKKwkvKiBjcmVhdGUgZW52aXJvbm1lbnQgYmxvY2sgZnJvbSB0ZW1wb3JhcnkgZW52aXJvbm1lbnQgKi8KKwlmb3IgKGkgPSAwOyB0bXBlbnZbaV07IGkrKykgeworCQlzaXplID0gMiAqIHN0cmxlbih0bXBlbnZbaV0pICsgMjsgLyogKzIgZm9yIGZpbmFsIFwwICovCisJCUFMTE9DX0dST1cod2VudmJsaywgKHdlbnZwb3MgKyBzaXplKSAqIHNpemVvZih3Y2hhcl90KSwgd2VudnN6KTsKKwkJd2VudnBvcyArPSB4dXRmdG93Y3MoJndlbnZibGtbd2VudnBvc10sIHRtcGVudltpXSwgc2l6ZSkgKyAxOworCX0KKwkvKiBhZGQgZmluYWwgXDAgdGVybWluYXRvciAqLworCXdlbnZibGtbd2VudnBvc10gPSAwOworCWZyZWUodG1wZW52KTsKKwlyZXR1cm4gd2VudmJsazsKK30KKworc3RydWN0IHBpbmZvX3QgeworCXN0cnVjdCBwaW5mb190ICpuZXh0OworCXBpZF90IHBpZDsKKwlIQU5ETEUgcHJvYzsKK307CitzdGF0aWMgc3RydWN0IHBpbmZvX3QgKnBpbmZvID0gTlVMTDsKK0NSSVRJQ0FMX1NFQ1RJT04gcGluZm9fY3M7CisKK3N0YXRpYyBwaWRfdCBtaW5nd19zcGF3bnZlX2ZkKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqKmFyZ3YsIGNoYXIgKipkZWx0YWVudiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmRpciwKKwkJCSAgICAgIGludCBwcmVwZW5kX2NtZCwgaW50IGZoaW4sIGludCBmaG91dCwgaW50IGZoZXJyKQoreworCVNUQVJUVVBJTkZPVyBzaTsKKwlQUk9DRVNTX0lORk9STUFUSU9OIHBpOworCXN0cnVjdCBzdHJidWYgYXJnczsKKwl3Y2hhcl90IHdjbWRbTUFYX1BBVEhdLCB3ZGlyW01BWF9QQVRIXSwgKndhcmdzLCAqd2VudmJsayA9IE5VTEw7CisJdW5zaWduZWQgZmxhZ3MgPSBDUkVBVEVfVU5JQ09ERV9FTlZJUk9OTUVOVDsKKwlCT09MIHJldDsKKworCS8qIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYXNzb2NpYXRlZCB0byBhIGNvbnNvbGUgKi8KKwlIQU5ETEUgY29ucyA9IENyZWF0ZUZpbGUoIkNPTk9VVCQiLCBHRU5FUklDX1dSSVRFLAorCQkJRklMRV9TSEFSRV9XUklURSwgTlVMTCwgT1BFTl9FWElTVElORywKKwkJCUZJTEVfQVRUUklCVVRFX05PUk1BTCwgTlVMTCk7CisJaWYgKGNvbnMgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJLyogVGhlcmUgaXMgbm8gY29uc29sZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBwcm9jZXNzLgorCQkgKiBTaW5jZSB0aGUgY2hpbGQgaXMgYSBjb25zb2xlIHByb2Nlc3MsIFdpbmRvd3MKKwkJICogd291bGQgbm9ybWFsbHkgY3JlYXRlIGEgY29uc29sZSB3aW5kb3cuIEJ1dAorCQkgKiBzaW5jZSB3ZSdsbCBiZSByZWRpcmVjdGluZyBzdGQgc3RyZWFtcywgd2UgZG8KKwkJICogbm90IG5lZWQgdGhlIGNvbnNvbGUuCisJCSAqIEl0IGlzIG5lY2Vzc2FyeSB0byB1c2UgREVUQUNIRURfUFJPQ0VTUworCQkgKiBpbnN0ZWFkIG9mIENSRUFURV9OT19XSU5ET1cgdG8gbWFrZSBzc2gKKwkJICogcmVjb2duaXplIHRoYXQgaXQgaGFzIG5vIGNvbnNvbGUuCisJCSAqLworCQlmbGFncyB8PSBERVRBQ0hFRF9QUk9DRVNTOworCX0gZWxzZSB7CisJCS8qIFRoZXJlIGlzIGFscmVhZHkgYSBjb25zb2xlLiBJZiB3ZSBzcGVjaWZpZWQKKwkJICogREVUQUNIRURfUFJPQ0VTUyBoZXJlLCB0b28sIFdpbmRvd3Mgd291bGQKKwkJICogZGlzYXNzb2NpYXRlIHRoZSBjaGlsZCBmcm9tIHRoZSBjb25zb2xlLgorCQkgKiBUaGUgc2FtZSBpcyB0cnVlIGZvciBDUkVBVEVfTk9fV0lORE9XLgorCQkgKiBHbyBmaWd1cmUhCisJCSAqLworCQlDbG9zZUhhbmRsZShjb25zKTsKKwl9CisJbWVtc2V0KCZzaSwgMCwgc2l6ZW9mKHNpKSk7CisJc2kuY2IgPSBzaXplb2Yoc2kpOworCXNpLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU1RESEFORExFUzsKKwlzaS5oU3RkSW5wdXQgPSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoZmhpbik7CisJc2kuaFN0ZE91dHB1dCA9IHdpbmFuc2lfZ2V0X29zZmhhbmRsZShmaG91dCk7CisJc2kuaFN0ZEVycm9yID0gd2luYW5zaV9nZXRfb3NmaGFuZGxlKGZoZXJyKTsKKworCWlmICh4dXRmdG93Y3NfcGF0aCh3Y21kLCBjbWQpIDwgMCkKKwkJcmV0dXJuIC0xOworCWlmIChkaXIgJiYgeHV0ZnRvd2NzX3BhdGgod2RpciwgZGlyKSA8IDApCisJCXJldHVybiAtMTsKKworCS8qIGNvbmNhdGVuYXRlIGFyZ3YsIHF1b3RpbmcgYXJncyBhcyB3ZSBnbyAqLworCXN0cmJ1Zl9pbml0KCZhcmdzLCAwKTsKKwlpZiAocHJlcGVuZF9jbWQpIHsKKwkJY2hhciAqcXVvdGVkID0gKGNoYXIgKilxdW90ZV9hcmcoY21kKTsKKwkJc3RyYnVmX2FkZHN0cigmYXJncywgcXVvdGVkKTsKKwkJaWYgKHF1b3RlZCAhPSBjbWQpCisJCQlmcmVlKHF1b3RlZCk7CisJfQorCWZvciAoOyAqYXJndjsgYXJndisrKSB7CisJCWNoYXIgKnF1b3RlZCA9IChjaGFyICopcXVvdGVfYXJnKCphcmd2KTsKKwkJaWYgKCphcmdzLmJ1ZikKKwkJCXN0cmJ1Zl9hZGRjaCgmYXJncywgJyAnKTsKKwkJc3RyYnVmX2FkZHN0cigmYXJncywgcXVvdGVkKTsKKwkJaWYgKHF1b3RlZCAhPSAqYXJndikKKwkJCWZyZWUocXVvdGVkKTsKKwl9CisKKwl3YXJncyA9IHhtYWxsb2MoKDIgKiBhcmdzLmxlbiArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKwl4dXRmdG93Y3Mod2FyZ3MsIGFyZ3MuYnVmLCAyICogYXJncy5sZW4gKyAxKTsKKwlzdHJidWZfcmVsZWFzZSgmYXJncyk7CisKKwl3ZW52YmxrID0gbWFrZV9lbnZpcm9ubWVudF9ibG9jayhkZWx0YWVudik7CisKKwltZW1zZXQoJnBpLCAwLCBzaXplb2YocGkpKTsKKwlyZXQgPSBDcmVhdGVQcm9jZXNzVyh3Y21kLCB3YXJncywgTlVMTCwgTlVMTCwgVFJVRSwgZmxhZ3MsCisJCXdlbnZibGssIGRpciA/IHdkaXIgOiBOVUxMLCAmc2ksICZwaSk7CisKKwlmcmVlKHdlbnZibGspOworCWZyZWUod2FyZ3MpOworCisJaWYgKCFyZXQpIHsKKwkJZXJybm8gPSBFTk9FTlQ7CisJCXJldHVybiAtMTsKKwl9CisJQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7CisKKwkvKgorCSAqIFRoZSBwcm9jZXNzIElEIGlzIHRoZSBodW1hbi1yZWFkYWJsZSBpZGVudGlmaWVyIG9mIHRoZSBwcm9jZXNzCisJICogdGhhdCB3ZSB3YW50IHRvIHByZXNlbnQgaW4gbG9nIGFuZCBlcnJvciBtZXNzYWdlcy4gVGhlIGhhbmRsZQorCSAqIGlzIG5vdCB1c2VmdWwgZm9yIHRoaXMgcHVycG9zZS4gQnV0IHdlIGNhbm5vdCBjbG9zZSBpdCwgZWl0aGVyLAorCSAqIGJlY2F1c2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHR1cm4gYSBwcm9jZXNzIElEIGludG8gYSBwcm9jZXNzCisJICogaGFuZGxlIGFmdGVyIHRoZSBwcm9jZXNzIHRlcm1pbmF0ZWQuCisJICogS2VlcCB0aGUgaGFuZGxlIGluIGEgbGlzdCBmb3Igd2FpdHBpZC4KKwkgKi8KKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmcGluZm9fY3MpOworCXsKKwkJc3RydWN0IHBpbmZvX3QgKmluZm8gPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcGluZm9fdCkpOworCQlpbmZvLT5waWQgPSBwaS5kd1Byb2Nlc3NJZDsKKwkJaW5mby0+cHJvYyA9IHBpLmhQcm9jZXNzOworCQlpbmZvLT5uZXh0ID0gcGluZm87CisJCXBpbmZvID0gaW5mbzsKKwl9CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJnBpbmZvX2NzKTsKKworCXJldHVybiAocGlkX3QpcGkuZHdQcm9jZXNzSWQ7Cit9CisKK3N0YXRpYyBwaWRfdCBtaW5nd19zcGF3bnYoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICoqYXJndiwgaW50IHByZXBlbmRfY21kKQoreworCXJldHVybiBtaW5nd19zcGF3bnZlX2ZkKGNtZCwgYXJndiwgTlVMTCwgTlVMTCwgcHJlcGVuZF9jbWQsIDAsIDEsIDIpOworfQorCitwaWRfdCBtaW5nd19zcGF3bnZwZShjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKiphcmd2LCBjaGFyICoqZGVsdGFlbnYsCisJCSAgICAgY29uc3QgY2hhciAqZGlyLAorCQkgICAgIGludCBmaGluLCBpbnQgZmhvdXQsIGludCBmaGVycikKK3sKKwlwaWRfdCBwaWQ7CisJY2hhciAqKnBhdGggPSBnZXRfcGF0aF9zcGxpdCgpOworCWNoYXIgKnByb2cgPSBwYXRoX2xvb2t1cChjbWQsIHBhdGgsIDApOworCisJaWYgKCFwcm9nKSB7CisJCWVycm5vID0gRU5PRU5UOworCQlwaWQgPSAtMTsKKwl9CisJZWxzZSB7CisJCWNvbnN0IGNoYXIgKmludGVycHIgPSBwYXJzZV9pbnRlcnByZXRlcihwcm9nKTsKKworCQlpZiAoaW50ZXJwcikgeworCQkJY29uc3QgY2hhciAqYXJndjAgPSBhcmd2WzBdOworCQkJY2hhciAqaXByb2cgPSBwYXRoX2xvb2t1cChpbnRlcnByLCBwYXRoLCAxKTsKKwkJCWFyZ3ZbMF0gPSBwcm9nOworCQkJaWYgKCFpcHJvZykgeworCQkJCWVycm5vID0gRU5PRU5UOworCQkJCXBpZCA9IC0xOworCQkJfQorCQkJZWxzZSB7CisJCQkJcGlkID0gbWluZ3dfc3Bhd252ZV9mZChpcHJvZywgYXJndiwgZGVsdGFlbnYsIGRpciwgMSwKKwkJCQkJCSAgICAgICBmaGluLCBmaG91dCwgZmhlcnIpOworCQkJCWZyZWUoaXByb2cpOworCQkJfQorCQkJYXJndlswXSA9IGFyZ3YwOworCQl9CisJCWVsc2UKKwkJCXBpZCA9IG1pbmd3X3NwYXdudmVfZmQocHJvZywgYXJndiwgZGVsdGFlbnYsIGRpciwgMCwKKwkJCQkJICAgICAgIGZoaW4sIGZob3V0LCBmaGVycik7CisJCWZyZWUocHJvZyk7CisJfQorCWZyZWVfcGF0aF9zcGxpdChwYXRoKTsKKwlyZXR1cm4gcGlkOworfQorCitzdGF0aWMgaW50IHRyeV9zaGVsbF9leGVjKGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqY29uc3QgKmFyZ3YpCit7CisJY29uc3QgY2hhciAqaW50ZXJwciA9IHBhcnNlX2ludGVycHJldGVyKGNtZCk7CisJY2hhciAqKnBhdGg7CisJY2hhciAqcHJvZzsKKwlpbnQgcGlkID0gMDsKKworCWlmICghaW50ZXJwcikKKwkJcmV0dXJuIDA7CisJcGF0aCA9IGdldF9wYXRoX3NwbGl0KCk7CisJcHJvZyA9IHBhdGhfbG9va3VwKGludGVycHIsIHBhdGgsIDEpOworCWlmIChwcm9nKSB7CisJCWludCBhcmdjID0gMDsKKwkJY29uc3QgY2hhciAqKmFyZ3YyOworCQl3aGlsZSAoYXJndlthcmdjXSkgYXJnYysrOworCQlhcmd2MiA9IHhtYWxsb2Moc2l6ZW9mKCphcmd2KSAqIChhcmdjKzEpKTsKKwkJYXJndjJbMF0gPSAoY2hhciAqKWNtZDsJLyogZnVsbCBwYXRoIHRvIHRoZSBzY3JpcHQgZmlsZSAqLworCQltZW1jcHkoJmFyZ3YyWzFdLCAmYXJndlsxXSwgc2l6ZW9mKCphcmd2KSAqIGFyZ2MpOworCQlwaWQgPSBtaW5nd19zcGF3bnYocHJvZywgYXJndjIsIDEpOworCQlpZiAocGlkID49IDApIHsKKwkJCWludCBzdGF0dXM7CisJCQlpZiAod2FpdHBpZChwaWQsICZzdGF0dXMsIDApIDwgMCkKKwkJCQlzdGF0dXMgPSAyNTU7CisJCQlleGl0KHN0YXR1cyk7CisJCX0KKwkJcGlkID0gMTsJLyogaW5kaWNhdGUgdGhhdCB3ZSB0cmllZCBidXQgZmFpbGVkICovCisJCWZyZWUocHJvZyk7CisJCWZyZWUoYXJndjIpOworCX0KKwlmcmVlX3BhdGhfc3BsaXQocGF0aCk7CisJcmV0dXJuIHBpZDsKK30KKworaW50IG1pbmd3X2V4ZWN2KGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqY29uc3QgKmFyZ3YpCit7CisJLyogY2hlY2sgaWYgZ2l0X2NvbW1hbmQgaXMgYSBzaGVsbCBzY3JpcHQgKi8KKwlpZiAoIXRyeV9zaGVsbF9leGVjKGNtZCwgYXJndikpIHsKKwkJaW50IHBpZCwgc3RhdHVzOworCisJCXBpZCA9IG1pbmd3X3NwYXdudihjbWQsIChjb25zdCBjaGFyICoqKWFyZ3YsIDApOworCQlpZiAocGlkIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSA8IDApCisJCQlzdGF0dXMgPSAyNTU7CisJCWV4aXQoc3RhdHVzKTsKKwl9CisJcmV0dXJuIC0xOworfQorCitpbnQgbWluZ3dfZXhlY3ZwKGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqY29uc3QgKmFyZ3YpCit7CisJY2hhciAqKnBhdGggPSBnZXRfcGF0aF9zcGxpdCgpOworCWNoYXIgKnByb2cgPSBwYXRoX2xvb2t1cChjbWQsIHBhdGgsIDApOworCisJaWYgKHByb2cpIHsKKwkJbWluZ3dfZXhlY3YocHJvZywgYXJndik7CisJCWZyZWUocHJvZyk7CisJfSBlbHNlCisJCWVycm5vID0gRU5PRU5UOworCisJZnJlZV9wYXRoX3NwbGl0KHBhdGgpOworCXJldHVybiAtMTsKK30KKworaW50IG1pbmd3X2tpbGwocGlkX3QgcGlkLCBpbnQgc2lnKQoreworCWlmIChwaWQgPiAwICYmIHNpZyA9PSBTSUdURVJNKSB7CisJCUhBTkRMRSBoID0gT3BlblByb2Nlc3MoUFJPQ0VTU19URVJNSU5BVEUsIEZBTFNFLCBwaWQpOworCisJCWlmIChUZXJtaW5hdGVQcm9jZXNzKGgsIC0xKSkgeworCQkJQ2xvc2VIYW5kbGUoaCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJCUNsb3NlSGFuZGxlKGgpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmIChwaWQgPiAwICYmIHNpZyA9PSAwKSB7CisJCUhBTkRMRSBoID0gT3BlblByb2Nlc3MoUFJPQ0VTU19RVUVSWV9JTkZPUk1BVElPTiwgRkFMU0UsIHBpZCk7CisJCWlmIChoKSB7CisJCQlDbG9zZUhhbmRsZShoKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJZXJybm8gPSBFSU5WQUw7CisJcmV0dXJuIC0xOworfQorCisvKgorICogQ29tcGFyZSBlbnZpcm9ubWVudCBlbnRyaWVzIGJ5IGtleSAoaS5lLiBzdG9wcGluZyBhdCAnPScgb3IgJ1wwJykuCisgKi8KK3N0YXRpYyBpbnQgY29tcGFyZWVudihjb25zdCB2b2lkICp2MSwgY29uc3Qgdm9pZCAqdjIpCit7CisJY29uc3QgY2hhciAqZTEgPSAqKGNvbnN0IGNoYXIqKil2MTsKKwljb25zdCBjaGFyICplMiA9ICooY29uc3QgY2hhcioqKXYyOworCisJZm9yICg7OykgeworCQlpbnQgYzEgPSAqZTErKzsKKwkJaW50IGMyID0gKmUyKys7CisJCWMxID0gKGMxID09ICc9JykgPyAwIDogdG9sb3dlcihjMSk7CisJCWMyID0gKGMyID09ICc9JykgPyAwIDogdG9sb3dlcihjMik7CisJCWlmIChjMSA+IGMyKQorCQkJcmV0dXJuIDE7CisJCWlmIChjMSA8IGMyKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYzEgPT0gMCkKKwkJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBic2VhcmNoZW52KGNoYXIgKiplbnYsIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGxvdyA9IDAsIGhpZ2ggPSBzaXplOworCXdoaWxlIChsb3cgPCBoaWdoKSB7CisJCXVuc2lnbmVkIG1pZCA9IGxvdyArICgoaGlnaCAtIGxvdykgPj4gMSk7CisJCWludCBjbXAgPSBjb21wYXJlZW52KCZlbnZbbWlkXSwgJm5hbWUpOworCQlpZiAoY21wIDwgMCkKKwkJCWxvdyA9IG1pZCArIDE7CisJCWVsc2UgaWYgKGNtcCA+IDApCisJCQloaWdoID0gbWlkOworCQllbHNlCisJCQlyZXR1cm4gbWlkOworCX0KKwlyZXR1cm4gfmxvdzsgLyogbm90IGZvdW5kLCByZXR1cm4gMSdzIGNvbXBsZW1lbnQgb2YgaW5zZXJ0IHBvc2l0aW9uICovCit9CisKKy8qCisgKiBJZiBuYW1lIGNvbnRhaW5zICc9JywgdGhlbiBzZXRzIHRoZSB2YXJpYWJsZSwgb3RoZXJ3aXNlIGl0IHVuc2V0cyBpdAorICogU2l6ZSBpbmNsdWRlcyB0aGUgdGVybWluYXRpbmcgTlVMTC4gRW52IG11c3QgaGF2ZSByb29tIGZvciBzaXplICsgMSBlbnRyaWVzCisgKiAoaW4gY2FzZSBvZiBpbnNlcnQpLiBSZXR1cm5zIHRoZSBuZXcgc2l6ZS4gT3B0aW9uYWxseSBmcmVlcyByZW1vdmVkIGVudHJpZXMuCisgKi8KK3N0YXRpYyBpbnQgZG9fcHV0ZW52KGNoYXIgKiplbnYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBzaXplLCBpbnQgZnJlZV9vbGQpCit7CisJaW50IGkgPSBic2VhcmNoZW52KGVudiwgbmFtZSwgc2l6ZSAtIDEpOworCisJLyogb3B0aW9uYWxseSBmcmVlIHJlbW92ZWQgLyByZXBsYWNlZCBlbnRyeSAqLworCWlmIChpID49IDAgJiYgZnJlZV9vbGQpCisJCWZyZWUoZW52W2ldKTsKKworCWlmIChzdHJjaHIobmFtZSwgJz0nKSkgeworCQkvKiBpZiBuZXcgdmFsdWUgKCdrZXk9dmFsdWUnKSBpcyBzcGVjaWZpZWQsIGluc2VydCBvciByZXBsYWNlIGVudHJ5ICovCisJCWlmIChpIDwgMCkgeworCQkJaSA9IH5pOworCQkJbWVtbW92ZSgmZW52W2kgKyAxXSwgJmVudltpXSwgKHNpemUgLSBpKSAqIHNpemVvZihjaGFyKikpOworCQkJc2l6ZSsrOworCQl9CisJCWVudltpXSA9IChjaGFyKikgbmFtZTsKKwl9IGVsc2UgaWYgKGkgPj0gMCkgeworCQkvKiBvdGhlcndpc2UgKCdrZXknKSByZW1vdmUgZXhpc3RpbmcgZW50cnkgKi8KKwkJc2l6ZS0tOworCQltZW1tb3ZlKCZlbnZbaV0sICZlbnZbaSArIDFdLCAoc2l6ZSAtIGkpICogc2l6ZW9mKGNoYXIqKSk7CisJfQorCXJldHVybiBzaXplOworfQorCitjaGFyICptaW5nd19nZXRlbnYoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljaGFyICp2YWx1ZTsKKwlpbnQgcG9zID0gYnNlYXJjaGVudihlbnZpcm9uLCBuYW1lLCBlbnZpcm9uX3NpemUgLSAxKTsKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJdmFsdWUgPSBzdHJjaHIoZW52aXJvbltwb3NdLCAnPScpOworCXJldHVybiB2YWx1ZSA/ICZ2YWx1ZVsxXSA6IE5VTEw7Cit9CisKK2ludCBtaW5nd19wdXRlbnYoY29uc3QgY2hhciAqbmFtZXZhbHVlKQoreworCUFMTE9DX0dST1coZW52aXJvbiwgKGVudmlyb25fc2l6ZSArIDEpICogc2l6ZW9mKGNoYXIqKSwgZW52aXJvbl9hbGxvYyk7CisJZW52aXJvbl9zaXplID0gZG9fcHV0ZW52KGVudmlyb24sIG5hbWV2YWx1ZSwgZW52aXJvbl9zaXplLCAxKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE5vdGUsIHRoaXMgaXNuJ3QgYSBjb21wbGV0ZSByZXBsYWNlbWVudCBmb3IgZ2V0YWRkcmluZm8uIEl0IGFzc3VtZXMKKyAqIHRoYXQgc2VydmljZSBjb250YWlucyBhIG51bWVyaWNhbCBwb3J0LCBvciB0aGF0IGl0IGlzIG51bGwuIEl0CisgKiBkb2VzIGEgc2ltcGxlIHNlYXJjaCB1c2luZyBnZXRob3N0YnluYW1lLCBhbmQgcmV0dXJucyBvbmUgSVB2NCBob3N0CisgKiBpZiBvbmUgd2FzIGZvdW5kLgorICovCitzdGF0aWMgaW50IFdTQUFQSSBnZXRhZGRyaW5mb19zdHViKGNvbnN0IGNoYXIgKm5vZGUsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisJCQkJICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywKKwkJCQkgICBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisJc3RydWN0IGhvc3RlbnQgKmggPSBOVUxMOworCXN0cnVjdCBhZGRyaW5mbyAqYWk7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwlpZiAobm9kZSkgeworCQloID0gZ2V0aG9zdGJ5bmFtZShub2RlKTsKKwkJaWYgKCFoKQorCQkJcmV0dXJuIFdTQUdldExhc3RFcnJvcigpOworCX0KKworCWFpID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGFkZHJpbmZvKSk7CisJKnJlcyA9IGFpOworCWFpLT5haV9mbGFncyA9IDA7CisJYWktPmFpX2ZhbWlseSA9IEFGX0lORVQ7CisJYWktPmFpX3NvY2t0eXBlID0gaGludHMgPyBoaW50cy0+YWlfc29ja3R5cGUgOiAwOworCXN3aXRjaCAoYWktPmFpX3NvY2t0eXBlKSB7CisJY2FzZSBTT0NLX1NUUkVBTToKKwkJYWktPmFpX3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CisJCWJyZWFrOworCWNhc2UgU09DS19ER1JBTToKKwkJYWktPmFpX3Byb3RvY29sID0gSVBQUk9UT19VRFA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFpLT5haV9wcm90b2NvbCA9IDA7CisJCWJyZWFrOworCX0KKwlhaS0+YWlfYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCWlmIChoaW50cyAmJiAoaGludHMtPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKSkKKwkJYWktPmFpX2Nhbm9ubmFtZSA9IGggPyB4c3RyZHVwKGgtPmhfbmFtZSkgOiBOVUxMOworCWVsc2UKKwkJYWktPmFpX2Nhbm9ubmFtZSA9IE5VTEw7CisKKwlzaW4gPSB4Y2FsbG9jKDEsIGFpLT5haV9hZGRybGVuKTsKKwlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCS8qIE5vdGU6IGdldGFkZHJpbmZvIGlzIHN1cHBvc2VkIHRvIGFsbG93IHNlcnZpY2UgdG8gYmUgYSBzdHJpbmcsCisJICogd2hpY2ggc2hvdWxkIGJlIGxvb2tlZCB1cCB1c2luZyBnZXRzZXJ2YnluYW1lLiBUaGlzIGlzCisJICogY3VycmVudGx5IG5vdCBpbXBsZW1lbnRlZCAqLworCWlmIChzZXJ2aWNlKQorCQlzaW4tPnNpbl9wb3J0ID0gaHRvbnMoYXRvaShzZXJ2aWNlKSk7CisJaWYgKGgpCisJCXNpbi0+c2luX2FkZHIgPSAqKHN0cnVjdCBpbl9hZGRyICopaC0+aF9hZGRyOworCWVsc2UgaWYgKGhpbnRzICYmIChoaW50cy0+YWlfZmxhZ3MgJiBBSV9QQVNTSVZFKSkKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworCWVsc2UKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfTE9PUEJBQ0s7CisJYWktPmFpX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2luOworCWFpLT5haV9uZXh0ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgV1NBQVBJIGZyZWVhZGRyaW5mb19zdHViKHN0cnVjdCBhZGRyaW5mbyAqcmVzKQoreworCWZyZWUocmVzLT5haV9jYW5vbm5hbWUpOworCWZyZWUocmVzLT5haV9hZGRyKTsKKwlmcmVlKHJlcyk7Cit9CisKK3N0YXRpYyBpbnQgV1NBQVBJIGdldG5hbWVpbmZvX3N0dWIoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSwgc29ja2xlbl90IHNhbGVuLAorCQkJCSAgIGNoYXIgKmhvc3QsIERXT1JEIGhvc3RsZW4sCisJCQkJICAgY2hhciAqc2VydiwgRFdPUkQgc2VydmxlbiwgaW50IGZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworCWlmIChzYS0+c2FfZmFtaWx5ICE9IEFGX0lORVQpCisJCXJldHVybiBFQUlfRkFNSUxZOworCWlmICghaG9zdCAmJiAhc2VydikKKwkJcmV0dXJuIEVBSV9OT05BTUU7CisKKwlpZiAoaG9zdCAmJiBob3N0bGVuID4gMCkgeworCQlzdHJ1Y3QgaG9zdGVudCAqZW50ID0gTlVMTDsKKwkJaWYgKCEoZmxhZ3MgJiBOSV9OVU1FUklDSE9TVCkpCisJCQllbnQgPSBnZXRob3N0YnlhZGRyKChjb25zdCBjaGFyICopJnNpbi0+c2luX2FkZHIsCisJCQkJCSAgICBzaXplb2Yoc2luLT5zaW5fYWRkciksIEFGX0lORVQpOworCisJCWlmIChlbnQpCisJCQlzbnByaW50Zihob3N0LCBob3N0bGVuLCAiJXMiLCBlbnQtPmhfbmFtZSk7CisJCWVsc2UgaWYgKGZsYWdzICYgTklfTkFNRVJFUUQpCisJCQlyZXR1cm4gRUFJX05PTkFNRTsKKwkJZWxzZQorCQkJc25wcmludGYoaG9zdCwgaG9zdGxlbiwgIiVzIiwgaW5ldF9udG9hKHNpbi0+c2luX2FkZHIpKTsKKwl9CisKKwlpZiAoc2VydiAmJiBzZXJ2bGVuID4gMCkgeworCQlzdHJ1Y3Qgc2VydmVudCAqZW50ID0gTlVMTDsKKwkJaWYgKCEoZmxhZ3MgJiBOSV9OVU1FUklDU0VSVikpCisJCQllbnQgPSBnZXRzZXJ2Ynlwb3J0KHNpbi0+c2luX3BvcnQsCisJCQkJCSAgICBmbGFncyAmIE5JX0RHUkFNID8gInVkcCIgOiAidGNwIik7CisKKwkJaWYgKGVudCkKKwkJCXNucHJpbnRmKHNlcnYsIHNlcnZsZW4sICIlcyIsIGVudC0+c19uYW1lKTsKKwkJZWxzZQorCQkJc25wcmludGYoc2Vydiwgc2VydmxlbiwgIiVkIiwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgSE1PRFVMRSBpcHY2X2RsbCA9IE5VTEw7CitzdGF0aWMgdm9pZCAoV1NBQVBJICppcHY2X2ZyZWVhZGRyaW5mbykoc3RydWN0IGFkZHJpbmZvICpyZXMpOworc3RhdGljIGludCAoV1NBQVBJICppcHY2X2dldGFkZHJpbmZvKShjb25zdCBjaGFyICpub2RlLCBjb25zdCBjaGFyICpzZXJ2aWNlLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsCisJCQkJICAgICAgc3RydWN0IGFkZHJpbmZvICoqcmVzKTsKK3N0YXRpYyBpbnQgKFdTQUFQSSAqaXB2Nl9nZXRuYW1laW5mbykoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSwgc29ja2xlbl90IHNhbGVuLAorCQkJCSAgICAgIGNoYXIgKmhvc3QsIERXT1JEIGhvc3RsZW4sCisJCQkJICAgICAgY2hhciAqc2VydiwgRFdPUkQgc2VydmxlbiwgaW50IGZsYWdzKTsKKy8qCisgKiBnYWlfc3RyZXJyb3IgaXMgYW4gaW5saW5lIGZ1bmN0aW9uIGluIHRoZSB3czJ0Y3BpcC5oIGhlYWRlciwgc28gd2UKKyAqIGRvbid0IG5lZWQgdG8gdHJ5IHRvIGxvYWQgdGhhdCBvbmUgZHluYW1pY2FsbHkuCisgKi8KKworc3RhdGljIHZvaWQgc29ja2V0X2NsZWFudXAodm9pZCkKK3sKKwlXU0FDbGVhbnVwKCk7CisJaWYgKGlwdjZfZGxsKQorCQlGcmVlTGlicmFyeShpcHY2X2RsbCk7CisJaXB2Nl9kbGwgPSBOVUxMOworCWlwdjZfZnJlZWFkZHJpbmZvID0gZnJlZWFkZHJpbmZvX3N0dWI7CisJaXB2Nl9nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3N0dWI7CisJaXB2Nl9nZXRuYW1laW5mbyA9IGdldG5hbWVpbmZvX3N0dWI7Cit9CisKK3N0YXRpYyB2b2lkIGVuc3VyZV9zb2NrZXRfaW5pdGlhbGl6YXRpb24odm9pZCkKK3sKKwlXU0FEQVRBIHdzYTsKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKwljb25zdCBjaGFyICpsaWJyYXJpZXNbXSA9IHsgIndzMl8zMi5kbGwiLCAid3NoaXA2LmRsbCIsIE5VTEwgfTsKKwljb25zdCBjaGFyICoqbmFtZTsKKworCWlmIChpbml0aWFsaXplZCkKKwkJcmV0dXJuOworCisJaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwyKSwgJndzYSkpCisJCWRpZSgidW5hYmxlIHRvIGluaXRpYWxpemUgd2luc29jayBzdWJzeXN0ZW0sIGVycm9yICVkIiwKKwkJCVdTQUdldExhc3RFcnJvcigpKTsKKworCWZvciAobmFtZSA9IGxpYnJhcmllczsgKm5hbWU7IG5hbWUrKykgeworCQlpcHY2X2RsbCA9IExvYWRMaWJyYXJ5KCpuYW1lKTsKKwkJaWYgKCFpcHY2X2RsbCkKKwkJCWNvbnRpbnVlOworCisJCWlwdjZfZnJlZWFkZHJpbmZvID0gKHZvaWQgKFdTQUFQSSAqKShzdHJ1Y3QgYWRkcmluZm8gKikpCisJCQlHZXRQcm9jQWRkcmVzcyhpcHY2X2RsbCwgImZyZWVhZGRyaW5mbyIpOworCQlpcHY2X2dldGFkZHJpbmZvID0gKGludCAoV1NBQVBJICopKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorCQkJCQkJICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICosCisJCQkJCQkgICBzdHJ1Y3QgYWRkcmluZm8gKiopKQorCQkJR2V0UHJvY0FkZHJlc3MoaXB2Nl9kbGwsICJnZXRhZGRyaW5mbyIpOworCQlpcHY2X2dldG5hbWVpbmZvID0gKGludCAoV1NBQVBJICopKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLAorCQkJCQkJICAgc29ja2xlbl90LCBjaGFyICosIERXT1JELAorCQkJCQkJICAgY2hhciAqLCBEV09SRCwgaW50KSkKKwkJCUdldFByb2NBZGRyZXNzKGlwdjZfZGxsLCAiZ2V0bmFtZWluZm8iKTsKKwkJaWYgKCFpcHY2X2ZyZWVhZGRyaW5mbyB8fCAhaXB2Nl9nZXRhZGRyaW5mbyB8fCAhaXB2Nl9nZXRuYW1laW5mbykgeworCQkJRnJlZUxpYnJhcnkoaXB2Nl9kbGwpOworCQkJaXB2Nl9kbGwgPSBOVUxMOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKwlpZiAoIWlwdjZfZnJlZWFkZHJpbmZvIHx8ICFpcHY2X2dldGFkZHJpbmZvIHx8ICFpcHY2X2dldG5hbWVpbmZvKSB7CisJCWlwdjZfZnJlZWFkZHJpbmZvID0gZnJlZWFkZHJpbmZvX3N0dWI7CisJCWlwdjZfZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb19zdHViOworCQlpcHY2X2dldG5hbWVpbmZvID0gZ2V0bmFtZWluZm9fc3R1YjsKKwl9CisKKwlhdGV4aXQoc29ja2V0X2NsZWFudXApOworCWluaXRpYWxpemVkID0gMTsKK30KKworI3VuZGVmIGdldGhvc3RuYW1lCitpbnQgbWluZ3dfZ2V0aG9zdG5hbWUoY2hhciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisgICAgZW5zdXJlX3NvY2tldF9pbml0aWFsaXphdGlvbigpOworICAgIHJldHVybiBnZXRob3N0bmFtZShuYW1lLCBuYW1lbGVuKTsKK30KKworI3VuZGVmIGdldGhvc3RieW5hbWUKK3N0cnVjdCBob3N0ZW50ICptaW5nd19nZXRob3N0YnluYW1lKGNvbnN0IGNoYXIgKmhvc3QpCit7CisJZW5zdXJlX3NvY2tldF9pbml0aWFsaXphdGlvbigpOworCXJldHVybiBnZXRob3N0YnluYW1lKGhvc3QpOworfQorCit2b2lkIG1pbmd3X2ZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKnJlcykKK3sKKwlpcHY2X2ZyZWVhZGRyaW5mbyhyZXMpOworfQorCitpbnQgbWluZ3dfZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqbm9kZSwgY29uc3QgY2hhciAqc2VydmljZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgc3RydWN0IGFkZHJpbmZvICoqcmVzKQoreworCWVuc3VyZV9zb2NrZXRfaW5pdGlhbGl6YXRpb24oKTsKKwlyZXR1cm4gaXB2Nl9nZXRhZGRyaW5mbyhub2RlLCBzZXJ2aWNlLCBoaW50cywgcmVzKTsKK30KKworaW50IG1pbmd3X2dldG5hbWVpbmZvKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIHNvY2tsZW5fdCBzYWxlbiwKKwkJICAgICAgY2hhciAqaG9zdCwgRFdPUkQgaG9zdGxlbiwgY2hhciAqc2VydiwgRFdPUkQgc2VydmxlbiwKKwkJICAgICAgaW50IGZsYWdzKQoreworCWVuc3VyZV9zb2NrZXRfaW5pdGlhbGl6YXRpb24oKTsKKwlyZXR1cm4gaXB2Nl9nZXRuYW1laW5mbyhzYSwgc2FsZW4sIGhvc3QsIGhvc3RsZW4sIHNlcnYsIHNlcnZsZW4sIGZsYWdzKTsKK30KKworaW50IG1pbmd3X3NvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQoreworCWludCBzb2NrZmQ7CisJU09DS0VUIHM7CisKKwllbnN1cmVfc29ja2V0X2luaXRpYWxpemF0aW9uKCk7CisJcyA9IFdTQVNvY2tldChkb21haW4sIHR5cGUsIHByb3RvY29sLCBOVUxMLCAwLCAwKTsKKwlpZiAocyA9PSBJTlZBTElEX1NPQ0tFVCkgeworCQkvKgorCQkgKiBXU0FHZXRMYXN0RXJyb3IoKSB2YWx1ZXMgYXJlIHJlZ3VsYXIgQlNEIGVycm9yIGNvZGVzCisJCSAqIGJpYXNlZCBieSBXU0FCQVNFRVJSLgorCQkgKiBIb3dldmVyLCBzdHJlcnJvcigpIGRvZXMgbm90IGtub3cgYWJvdXQgbmV0d29ya2luZworCQkgKiBzcGVjaWZpYyBlcnJvcnMsIHdoaWNoIGFyZSB2YWx1ZXMgYmVnaW5uaW5nIGF0IDM4IG9yIHNvLgorCQkgKiBUaGVyZWZvcmUsIHdlIGNob29zZSB0byBsZWF2ZSB0aGUgYmlhc2VkIGVycm9yIGNvZGUKKwkJICogaW4gZXJybm8gc28gdGhhdCBfaWZfIHNvbWVvbmUgbG9va3MgdXAgdGhlIGNvZGUgc29tZXdoZXJlLAorCQkgKiB0aGVuIGl0IGlzIGF0IGxlYXN0IHRoZSBudW1iZXIgdGhhdCBhcmUgdXN1YWxseSBsaXN0ZWQuCisJCSAqLworCQllcnJubyA9IFdTQUdldExhc3RFcnJvcigpOworCQlyZXR1cm4gLTE7CisJfQorCS8qIGNvbnZlcnQgaW50byBhIGZpbGUgZGVzY3JpcHRvciAqLworCWlmICgoc29ja2ZkID0gX29wZW5fb3NmaGFuZGxlKHMsIE9fUkRXUnxPX0JJTkFSWSkpIDwgMCkgeworCQljbG9zZXNvY2tldChzKTsKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gbWFrZSBhIHNvY2tldCBmaWxlIGRlc2NyaXB0b3I6ICVzIiwKKwkJCXN0cmVycm9yKGVycm5vKSk7CisJfQorCXJldHVybiBzb2NrZmQ7Cit9CisKKyN1bmRlZiBjb25uZWN0CitpbnQgbWluZ3dfY29ubmVjdChpbnQgc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzaXplX3Qgc3opCit7CisJU09DS0VUIHMgPSAoU09DS0VUKV9nZXRfb3NmaGFuZGxlKHNvY2tmZCk7CisJcmV0dXJuIGNvbm5lY3Qocywgc2EsIHN6KTsKK30KKworI3VuZGVmIGJpbmQKK2ludCBtaW5nd19iaW5kKGludCBzb2NrZmQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHNpemVfdCBzeikKK3sKKwlTT0NLRVQgcyA9IChTT0NLRVQpX2dldF9vc2ZoYW5kbGUoc29ja2ZkKTsKKwlyZXR1cm4gYmluZChzLCBzYSwgc3opOworfQorCisjdW5kZWYgc2V0c29ja29wdAoraW50IG1pbmd3X3NldHNvY2tvcHQoaW50IHNvY2tmZCwgaW50IGx2bCwgaW50IG9wdG5hbWUsIHZvaWQgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlTT0NLRVQgcyA9IChTT0NLRVQpX2dldF9vc2ZoYW5kbGUoc29ja2ZkKTsKKwlyZXR1cm4gc2V0c29ja29wdChzLCBsdmwsIG9wdG5hbWUsIChjb25zdCBjaGFyKilvcHR2YWwsIG9wdGxlbik7Cit9CisKKyN1bmRlZiBzaHV0ZG93bgoraW50IG1pbmd3X3NodXRkb3duKGludCBzb2NrZmQsIGludCBob3cpCit7CisJU09DS0VUIHMgPSAoU09DS0VUKV9nZXRfb3NmaGFuZGxlKHNvY2tmZCk7CisJcmV0dXJuIHNodXRkb3duKHMsIGhvdyk7Cit9CisKKyN1bmRlZiBsaXN0ZW4KK2ludCBtaW5nd19saXN0ZW4oaW50IHNvY2tmZCwgaW50IGJhY2tsb2cpCit7CisJU09DS0VUIHMgPSAoU09DS0VUKV9nZXRfb3NmaGFuZGxlKHNvY2tmZCk7CisJcmV0dXJuIGxpc3RlbihzLCBiYWNrbG9nKTsKK30KKworI3VuZGVmIGFjY2VwdAoraW50IG1pbmd3X2FjY2VwdChpbnQgc29ja2ZkMSwgc3RydWN0IHNvY2thZGRyICpzYSwgc29ja2xlbl90ICpzeikKK3sKKwlpbnQgc29ja2ZkMjsKKworCVNPQ0tFVCBzMSA9IChTT0NLRVQpX2dldF9vc2ZoYW5kbGUoc29ja2ZkMSk7CisJU09DS0VUIHMyID0gYWNjZXB0KHMxLCBzYSwgc3opOworCisJLyogY29udmVydCBpbnRvIGEgZmlsZSBkZXNjcmlwdG9yICovCisJaWYgKChzb2NrZmQyID0gX29wZW5fb3NmaGFuZGxlKHMyLCBPX1JEV1J8T19CSU5BUlkpKSA8IDApIHsKKwkJaW50IGVyciA9IGVycm5vOworCQljbG9zZXNvY2tldChzMik7CisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIG1ha2UgYSBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yOiAlcyIsCisJCQlzdHJlcnJvcihlcnIpKTsKKwl9CisJcmV0dXJuIHNvY2tmZDI7Cit9CisKKyN1bmRlZiByZW5hbWUKK2ludCBtaW5nd19yZW5hbWUoY29uc3QgY2hhciAqcG9sZCwgY29uc3QgY2hhciAqcG5ldykKK3sKKwlEV09SRCBhdHRycywgZ2xlOworCWludCB0cmllcyA9IDA7CisJd2NoYXJfdCB3cG9sZFtNQVhfUEFUSF0sIHdwbmV3W01BWF9QQVRIXTsKKwlpZiAoeHV0ZnRvd2NzX3BhdGgod3BvbGQsIHBvbGQpIDwgMCB8fCB4dXRmdG93Y3NfcGF0aCh3cG5ldywgcG5ldykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIFRyeSBuYXRpdmUgcmVuYW1lKCkgZmlyc3QgdG8gZ2V0IGVycm5vIHJpZ2h0LgorCSAqIEl0IGlzIGJhc2VkIG9uIE1vdmVGaWxlKCksIHdoaWNoIGNhbm5vdCBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMuCisJICovCisJaWYgKCFfd3JlbmFtZSh3cG9sZCwgd3BuZXcpKQorCQlyZXR1cm4gMDsKKwlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQlyZXR1cm4gLTE7CityZXBlYXQ6CisJaWYgKE1vdmVGaWxlRXhXKHdwb2xkLCB3cG5ldywgTU9WRUZJTEVfUkVQTEFDRV9FWElTVElORykpCisJCXJldHVybiAwOworCS8qIFRPRE86IHRyYW5zbGF0ZSBtb3JlIGVycm9ycyAqLworCWdsZSA9IEdldExhc3RFcnJvcigpOworCWlmIChnbGUgPT0gRVJST1JfQUNDRVNTX0RFTklFRCAmJgorCSAgICAoYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cod3BuZXcpKSAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgeworCQlpZiAoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpIHsKKwkJCWVycm5vID0gRUlTRElSOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICgoYXR0cnMgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkgJiYKKwkJICAgIFNldEZpbGVBdHRyaWJ1dGVzVyh3cG5ldywgYXR0cnMgJiB+RklMRV9BVFRSSUJVVEVfUkVBRE9OTFkpKSB7CisJCQlpZiAoTW92ZUZpbGVFeFcod3BvbGQsIHdwbmV3LCBNT1ZFRklMRV9SRVBMQUNFX0VYSVNUSU5HKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWdsZSA9IEdldExhc3RFcnJvcigpOworCQkJLyogcmV2ZXJ0IGZpbGUgYXR0cmlidXRlcyBvbiBmYWlsdXJlICovCisJCQlTZXRGaWxlQXR0cmlidXRlc1cod3BuZXcsIGF0dHJzKTsKKwkJfQorCX0KKwlpZiAodHJpZXMgPCBBUlJBWV9TSVpFKGRlbGF5KSAmJiBnbGUgPT0gRVJST1JfQUNDRVNTX0RFTklFRCkgeworCQkvKgorCQkgKiBXZSBhc3N1bWUgdGhhdCBzb21lIG90aGVyIHByb2Nlc3MgaGFkIHRoZSBzb3VyY2Ugb3IKKwkJICogZGVzdGluYXRpb24gZmlsZSBvcGVuIGF0IHRoZSB3cm9uZyBtb21lbnQgYW5kIHJldHJ5LgorCQkgKiBJbiBvcmRlciB0byBnaXZlIHRoZSBvdGhlciBwcm9jZXNzIGEgaGlnaGVyIGNoYW5jZSB0bworCQkgKiBjb21wbGV0ZSBpdHMgb3BlcmF0aW9uLCB3ZSBnaXZlIHVwIG91ciB0aW1lIHNsaWNlIG5vdy4KKwkJICogSWYgd2UgaGF2ZSB0byByZXRyeSBhZ2Fpbiwgd2UgZG8gc2xlZXAgYSBiaXQuCisJCSAqLworCQlTbGVlcChkZWxheVt0cmllc10pOworCQl0cmllcysrOworCQlnb3RvIHJlcGVhdDsKKwl9CisJaWYgKGdsZSA9PSBFUlJPUl9BQ0NFU1NfREVOSUVEICYmCisJICAgICAgIGFza195ZXNfbm9faWZfcG9zc2libGUoIlJlbmFtZSBmcm9tICclcycgdG8gJyVzJyBmYWlsZWQuICIKKwkJICAgICAgICJTaG91bGQgSSB0cnkgYWdhaW4/IiwgcG9sZCwgcG5ldykpCisJCWdvdG8gcmVwZWF0OworCisJZXJybm8gPSBFQUNDRVM7CisJcmV0dXJuIC0xOworfQorCisvKgorICogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYWdlc2l6ZSwgYnV0CisgKiB0aGUgYWxsb2NhdGlvbiBncmFudWxhcml0eS4gSWYgZnV0dXJlIFdpbmRvd3Mgc3BlY2lmaWMgZ2l0IGNvZGUKKyAqIG5lZWRzIHRoZSByZWFsIGdldHBhZ2VzaXplIGZ1bmN0aW9uLCB3ZSBuZWVkIHRvIGZpbmQgYW5vdGhlciBzb2x1dGlvbi4KKyAqLworaW50IG1pbmd3X2dldHBhZ2VzaXplKHZvaWQpCit7CisJU1lTVEVNX0lORk8gc2k7CisJR2V0U3lzdGVtSW5mbygmc2kpOworCXJldHVybiBzaS5kd0FsbG9jYXRpb25HcmFudWxhcml0eTsKK30KKworc3RydWN0IHBhc3N3ZCAqZ2V0cHd1aWQoaW50IHVpZCkKK3sKKwlzdGF0aWMgY2hhciB1c2VyX25hbWVbMTAwXTsKKwlzdGF0aWMgc3RydWN0IHBhc3N3ZCBwOworCisJRFdPUkQgbGVuID0gc2l6ZW9mKHVzZXJfbmFtZSk7CisJaWYgKCFHZXRVc2VyTmFtZSh1c2VyX25hbWUsICZsZW4pKQorCQlyZXR1cm4gTlVMTDsKKwlwLnB3X25hbWUgPSB1c2VyX25hbWU7CisJcC5wd19nZWNvcyA9ICJ1bmtub3duIjsKKwlwLnB3X2RpciA9IE5VTEw7CisJcmV0dXJuICZwOworfQorCitzdGF0aWMgSEFORExFIHRpbWVyX2V2ZW50Oworc3RhdGljIEhBTkRMRSB0aW1lcl90aHJlYWQ7CitzdGF0aWMgaW50IHRpbWVyX2ludGVydmFsOworc3RhdGljIGludCBvbmVfc2hvdDsKK3N0YXRpYyBzaWdfaGFuZGxlcl90IHRpbWVyX2ZuID0gU0lHX0RGTCwgc2lnaW50X2ZuID0gU0lHX0RGTDsKKworLyogVGhlIHRpbWVyIHdvcmtzIGxpa2UgdGhpczoKKyAqIFRoZSB0aHJlYWQsIHRpY2t0YWNrKCksIGlzIGEgdHJpdmlhbCByb3V0aW5lIHRoYXQgbW9zdCBvZiB0aGUgdGltZQorICogb25seSB3YWl0cyB0byByZWNlaXZlIHRoZSBzaWduYWwgdG8gdGVybWluYXRlLiBUaGUgbWFpbiB0aHJlYWQgdGVsbHMKKyAqIHRoZSB0aHJlYWQgdG8gdGVybWluYXRlIGJ5IHNldHRpbmcgdGhlIHRpbWVyX2V2ZW50IHRvIHRoZSBzaWduYWxsZWQKKyAqIHN0YXRlLgorICogQnV0IHRpY2t0YWNrKCkgaW50ZXJydXB0cyB0aGUgd2FpdCBzdGF0ZSBhZnRlciB0aGUgdGltZXIncyBpbnRlcnZhbAorICogbGVuZ3RoIHRvIGNhbGwgdGhlIHNpZ25hbCBoYW5kbGVyLgorICovCisKK3N0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgdGlja3RhY2sodm9pZCAqZHVtbXkpCit7CisJd2hpbGUgKFdhaXRGb3JTaW5nbGVPYmplY3QodGltZXJfZXZlbnQsIHRpbWVyX2ludGVydmFsKSA9PSBXQUlUX1RJTUVPVVQpIHsKKwkJbWluZ3dfcmFpc2UoU0lHQUxSTSk7CisJCWlmIChvbmVfc2hvdCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGFydF90aW1lcl90aHJlYWQodm9pZCkKK3sKKwl0aW1lcl9ldmVudCA9IENyZWF0ZUV2ZW50KE5VTEwsIEZBTFNFLCBGQUxTRSwgTlVMTCk7CisJaWYgKHRpbWVyX2V2ZW50KSB7CisJCXRpbWVyX3RocmVhZCA9IChIQU5ETEUpIF9iZWdpbnRocmVhZGV4KE5VTEwsIDAsIHRpY2t0YWNrLCBOVUxMLCAwLCBOVUxMKTsKKwkJaWYgKCF0aW1lcl90aHJlYWQgKQorCQkJcmV0dXJuIGVycm5vID0gRU5PTUVNLAorCQkJCWVycm9yKCJjYW5ub3Qgc3RhcnQgdGltZXIgdGhyZWFkIik7CisJfSBlbHNlCisJCXJldHVybiBlcnJubyA9IEVOT01FTSwKKwkJCWVycm9yKCJjYW5ub3QgYWxsb2NhdGUgcmVzb3VyY2VzIGZvciB0aW1lciIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdG9wX3RpbWVyX3RocmVhZCh2b2lkKQoreworCWlmICh0aW1lcl9ldmVudCkKKwkJU2V0RXZlbnQodGltZXJfZXZlbnQpOwkvKiB0ZWxsIHRocmVhZCB0byB0ZXJtaW5hdGUgKi8KKwlpZiAodGltZXJfdGhyZWFkKSB7CisJCWludCByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3QodGltZXJfdGhyZWFkLCAxMDAwKTsKKwkJaWYgKHJjID09IFdBSVRfVElNRU9VVCkKKwkJCWVycm9yKCJ0aW1lciB0aHJlYWQgZGlkIG5vdCB0ZXJtaW5hdGUgdGltZWx5Iik7CisJCWVsc2UgaWYgKHJjICE9IFdBSVRfT0JKRUNUXzApCisJCQllcnJvcigid2FpdGluZyBmb3IgdGltZXIgdGhyZWFkIGZhaWxlZDogJWx1IiwKKwkJCSAgICAgIEdldExhc3RFcnJvcigpKTsKKwkJQ2xvc2VIYW5kbGUodGltZXJfdGhyZWFkKTsKKwl9CisJaWYgKHRpbWVyX2V2ZW50KQorCQlDbG9zZUhhbmRsZSh0aW1lcl9ldmVudCk7CisJdGltZXJfZXZlbnQgPSBOVUxMOworCXRpbWVyX3RocmVhZCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3RpbWV2YWxfZXEoY29uc3Qgc3RydWN0IHRpbWV2YWwgKmkxLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqaTIpCit7CisJcmV0dXJuIGkxLT50dl9zZWMgPT0gaTItPnR2X3NlYyAmJiBpMS0+dHZfdXNlYyA9PSBpMi0+dHZfdXNlYzsKK30KKworaW50IHNldGl0aW1lcihpbnQgdHlwZSwgc3RydWN0IGl0aW1lcnZhbCAqaW4sIHN0cnVjdCBpdGltZXJ2YWwgKm91dCkKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHRpbWV2YWwgemVybzsKKwlzdGF0aWMgaW50IGF0ZXhpdF9kb25lOworCisJaWYgKG91dCAhPSBOVUxMKQorCQlyZXR1cm4gZXJybm8gPSBFSU5WQUwsCisJCQllcnJvcigic2V0aXRpbWVyIHBhcmFtIDMgIT0gTlVMTCBub3QgaW1wbGVtZW50ZWQiKTsKKwlpZiAoIWlzX3RpbWV2YWxfZXEoJmluLT5pdF9pbnRlcnZhbCwgJnplcm8pICYmCisJICAgICFpc190aW1ldmFsX2VxKCZpbi0+aXRfaW50ZXJ2YWwsICZpbi0+aXRfdmFsdWUpKQorCQlyZXR1cm4gZXJybm8gPSBFSU5WQUwsCisJCQllcnJvcigic2V0aXRpbWVyOiBpdF9pbnRlcnZhbCBtdXN0IGJlIHplcm8gb3IgZXEgaXRfdmFsdWUiKTsKKworCWlmICh0aW1lcl90aHJlYWQpCisJCXN0b3BfdGltZXJfdGhyZWFkKCk7CisKKwlpZiAoaXNfdGltZXZhbF9lcSgmaW4tPml0X3ZhbHVlLCAmemVybykgJiYKKwkgICAgaXNfdGltZXZhbF9lcSgmaW4tPml0X2ludGVydmFsLCAmemVybykpCisJCXJldHVybiAwOworCisJdGltZXJfaW50ZXJ2YWwgPSBpbi0+aXRfdmFsdWUudHZfc2VjICogMTAwMCArIGluLT5pdF92YWx1ZS50dl91c2VjIC8gMTAwMDsKKwlvbmVfc2hvdCA9IGlzX3RpbWV2YWxfZXEoJmluLT5pdF9pbnRlcnZhbCwgJnplcm8pOworCWlmICghYXRleGl0X2RvbmUpIHsKKwkJYXRleGl0KHN0b3BfdGltZXJfdGhyZWFkKTsKKwkJYXRleGl0X2RvbmUgPSAxOworCX0KKwlyZXR1cm4gc3RhcnRfdGltZXJfdGhyZWFkKCk7Cit9CisKK2ludCBzaWdhY3Rpb24oaW50IHNpZywgc3RydWN0IHNpZ2FjdGlvbiAqaW4sIHN0cnVjdCBzaWdhY3Rpb24gKm91dCkKK3sKKwlpZiAoc2lnICE9IFNJR0FMUk0pCisJCXJldHVybiBlcnJubyA9IEVJTlZBTCwKKwkJCWVycm9yKCJzaWdhY3Rpb24gb25seSBpbXBsZW1lbnRlZCBmb3IgU0lHQUxSTSIpOworCWlmIChvdXQgIT0gTlVMTCkKKwkJcmV0dXJuIGVycm5vID0gRUlOVkFMLAorCQkJZXJyb3IoInNpZ2FjdGlvbjogcGFyYW0gMyAhPSBOVUxMIG5vdCBpbXBsZW1lbnRlZCIpOworCisJdGltZXJfZm4gPSBpbi0+c2FfaGFuZGxlcjsKKwlyZXR1cm4gMDsKK30KKworI3VuZGVmIHNpZ25hbAorc2lnX2hhbmRsZXJfdCBtaW5nd19zaWduYWwoaW50IHNpZywgc2lnX2hhbmRsZXJfdCBoYW5kbGVyKQoreworCXNpZ19oYW5kbGVyX3Qgb2xkOworCisJc3dpdGNoIChzaWcpIHsKKwljYXNlIFNJR0FMUk06CisJCW9sZCA9IHRpbWVyX2ZuOworCQl0aW1lcl9mbiA9IGhhbmRsZXI7CisJCWJyZWFrOworCisJY2FzZSBTSUdJTlQ6CisJCW9sZCA9IHNpZ2ludF9mbjsKKwkJc2lnaW50X2ZuID0gaGFuZGxlcjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gc2lnbmFsKHNpZywgaGFuZGxlcik7CisJfQorCisJcmV0dXJuIG9sZDsKK30KKworI3VuZGVmIHJhaXNlCitpbnQgbWluZ3dfcmFpc2UoaW50IHNpZykKK3sKKwlzd2l0Y2ggKHNpZykgeworCWNhc2UgU0lHQUxSTToKKwkJaWYgKHRpbWVyX2ZuID09IFNJR19ERkwpIHsKKwkJCWlmIChpc2F0dHkoU1RERVJSX0ZJTEVOTykpCisJCQkJZnB1dHMoIkFsYXJtIGNsb2NrXG4iLCBzdGRlcnIpOworCQkJZXhpdCgxMjggKyBTSUdBTFJNKTsKKwkJfSBlbHNlIGlmICh0aW1lcl9mbiAhPSBTSUdfSUdOKQorCQkJdGltZXJfZm4oU0lHQUxSTSk7CisJCXJldHVybiAwOworCisJY2FzZSBTSUdJTlQ6CisJCWlmIChzaWdpbnRfZm4gPT0gU0lHX0RGTCkKKwkJCWV4aXQoMTI4ICsgU0lHSU5UKTsKKwkJZWxzZSBpZiAoc2lnaW50X2ZuICE9IFNJR19JR04pCisJCQlzaWdpbnRfZm4oU0lHSU5UKTsKKwkJcmV0dXJuIDA7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gcmFpc2Uoc2lnKTsKKwl9Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIgKm1ha2VfYmFja3NsYXNoX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgY2hhciBidWZbUEFUSF9NQVggKyAxXTsKKwljaGFyICpjOworCisJaWYgKHN0cmxjcHkoYnVmLCBwYXRoLCBQQVRIX01BWCkgPj0gUEFUSF9NQVgpCisJCWRpZSgiVG9vIGxvbmcgcGF0aDogJS4qcyIsIDYwLCBwYXRoKTsKKworCWZvciAoYyA9IGJ1ZjsgKmM7IGMrKykgeworCQlpZiAoKmMgPT0gJy8nKQorCQkJKmMgPSAnXFwnOworCX0KKwlyZXR1cm4gYnVmOworfQorCit2b2lkIG1pbmd3X29wZW5faHRtbChjb25zdCBjaGFyICp1bml4cGF0aCkKK3sKKwljb25zdCBjaGFyICpodG1scGF0aCA9IG1ha2VfYmFja3NsYXNoX3BhdGgodW5peHBhdGgpOworCXR5cGVkZWYgSElOU1RBTkNFIChXSU5BUEkgKlQpKEhXTkQsIGNvbnN0IGNoYXIgKiwKKwkJCWNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIElOVCk7CisJVCBTaGVsbEV4ZWN1dGU7CisJSE1PRFVMRSBzaGVsbDMyOworCWludCByOworCisJc2hlbGwzMiA9IExvYWRMaWJyYXJ5KCJzaGVsbDMyLmRsbCIpOworCWlmICghc2hlbGwzMikKKwkJZGllKCJjYW5ub3QgbG9hZCBzaGVsbDMyLmRsbCIpOworCVNoZWxsRXhlY3V0ZSA9IChUKUdldFByb2NBZGRyZXNzKHNoZWxsMzIsICJTaGVsbEV4ZWN1dGVBIik7CisJaWYgKCFTaGVsbEV4ZWN1dGUpCisJCWRpZSgiY2Fubm90IHJ1biBicm93c2VyIik7CisKKwlwcmludGYoIkxhdW5jaGluZyBkZWZhdWx0IGJyb3dzZXIgdG8gZGlzcGxheSBIVE1MIC4uLlxuIik7CisJciA9IChpbnQpU2hlbGxFeGVjdXRlKE5VTEwsICJvcGVuIiwgaHRtbHBhdGgsIE5VTEwsICJcXCIsIFNXX1NIT1dOT1JNQUwpOworCUZyZWVMaWJyYXJ5KHNoZWxsMzIpOworCS8qIHNlZSB0aGUgTVNETiBkb2N1bWVudGF0aW9uIHJlZmVycmluZyB0byB0aGUgcmVzdWx0IGNvZGVzIGhlcmUgKi8KKwlpZiAociA8PSAzMikgeworCQlkaWUoImZhaWxlZCB0byBsYXVuY2ggYnJvd3NlciBmb3IgJS4qcyIsIE1BWF9QQVRILCB1bml4cGF0aCk7CisJfQorfQorCitpbnQgbGluayhjb25zdCBjaGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKQoreworCXR5cGVkZWYgQk9PTCAoV0lOQVBJICpUKShMUENXU1RSLCBMUENXU1RSLCBMUFNFQ1VSSVRZX0FUVFJJQlVURVMpOworCXN0YXRpYyBUIGNyZWF0ZV9oYXJkX2xpbmsgPSBOVUxMOworCXdjaGFyX3Qgd29sZHBhdGhbTUFYX1BBVEhdLCB3bmV3cGF0aFtNQVhfUEFUSF07CisJaWYgKHh1dGZ0b3djc19wYXRoKHdvbGRwYXRoLCBvbGRwYXRoKSA8IDAgfHwKKwkJeHV0ZnRvd2NzX3BhdGgod25ld3BhdGgsIG5ld3BhdGgpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFjcmVhdGVfaGFyZF9saW5rKSB7CisJCWNyZWF0ZV9oYXJkX2xpbmsgPSAoVCkgR2V0UHJvY0FkZHJlc3MoCisJCQlHZXRNb2R1bGVIYW5kbGUoImtlcm5lbDMyLmRsbCIpLCAiQ3JlYXRlSGFyZExpbmtXIik7CisJCWlmICghY3JlYXRlX2hhcmRfbGluaykKKwkJCWNyZWF0ZV9oYXJkX2xpbmsgPSAoVCktMTsKKwl9CisJaWYgKGNyZWF0ZV9oYXJkX2xpbmsgPT0gKFQpLTEpIHsKKwkJZXJybm8gPSBFTk9TWVM7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFjcmVhdGVfaGFyZF9saW5rKHduZXdwYXRoLCB3b2xkcGF0aCwgTlVMTCkpIHsKKwkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KEdldExhc3RFcnJvcigpKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworcGlkX3Qgd2FpdHBpZChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucykKK3sKKwlIQU5ETEUgaCA9IE9wZW5Qcm9jZXNzKFNZTkNIUk9OSVpFIHwgUFJPQ0VTU19RVUVSWV9JTkZPUk1BVElPTiwKKwkgICAgRkFMU0UsIHBpZCk7CisJaWYgKCFoKSB7CisJCWVycm5vID0gRUNISUxEOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHBpZCA+IDAgJiYgb3B0aW9ucyAmIFdOT0hBTkcpIHsKKwkJaWYgKFdBSVRfT0JKRUNUXzAgIT0gV2FpdEZvclNpbmdsZU9iamVjdChoLCAwKSkgeworCQkJQ2xvc2VIYW5kbGUoaCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlvcHRpb25zICY9IH5XTk9IQU5HOworCX0KKworCWlmIChvcHRpb25zID09IDApIHsKKwkJc3RydWN0IHBpbmZvX3QgKipwcGluZm87CisJCWlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0KGgsIElORklOSVRFKSAhPSBXQUlUX09CSkVDVF8wKSB7CisJCQlDbG9zZUhhbmRsZShoKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJaWYgKHN0YXR1cykKKwkJCUdldEV4aXRDb2RlUHJvY2VzcyhoLCAoTFBEV09SRClzdGF0dXMpOworCisJCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZwaW5mb19jcyk7CisKKwkJcHBpbmZvID0gJnBpbmZvOworCQl3aGlsZSAoKnBwaW5mbykgeworCQkJc3RydWN0IHBpbmZvX3QgKmluZm8gPSAqcHBpbmZvOworCQkJaWYgKGluZm8tPnBpZCA9PSBwaWQpIHsKKwkJCQlDbG9zZUhhbmRsZShpbmZvLT5wcm9jKTsKKwkJCQkqcHBpbmZvID0gaW5mby0+bmV4dDsKKwkJCQlmcmVlKGluZm8pOworCQkJCWJyZWFrOworCQkJfQorCQkJcHBpbmZvID0gJmluZm8tPm5leHQ7CisJCX0KKworCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmcGluZm9fY3MpOworCisJCUNsb3NlSGFuZGxlKGgpOworCQlyZXR1cm4gcGlkOworCX0KKwlDbG9zZUhhbmRsZShoKTsKKworCWVycm5vID0gRUlOVkFMOworCXJldHVybiAtMTsKK30KKworaW50IG1pbmd3X29mZnNldF8xc3RfY29tcG9uZW50KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IG9mZnNldCA9IDA7CisJaWYgKGhhc19kb3NfZHJpdmVfcHJlZml4KHBhdGgpKQorCQlvZmZzZXQgPSAyOworCisJLyogdW5jIHBhdGhzICovCisJZWxzZSBpZiAoaXNfZGlyX3NlcChwYXRoWzBdKSAmJiBpc19kaXJfc2VwKHBhdGhbMV0pKSB7CisKKwkJLyogc2tpcCBzZXJ2ZXIgbmFtZSAqLworCQljaGFyICpwb3MgPSBzdHJwYnJrKHBhdGggKyAyLCAiXFwvIik7CisJCWlmICghcG9zKQorCQkJcmV0dXJuIDA7IC8qIEVycm9yOiBtYWxmb3JtZWQgdW5jIHBhdGggKi8KKworCQlkbyB7CisJCQlwb3MrKzsKKwkJfSB3aGlsZSAoKnBvcyAmJiAhaXNfZGlyX3NlcCgqcG9zKSk7CisKKwkJb2Zmc2V0ID0gcG9zIC0gcGF0aDsKKwl9CisKKwlyZXR1cm4gb2Zmc2V0ICsgaXNfZGlyX3NlcChwYXRoW29mZnNldF0pOworfQorCitpbnQgeHV0ZnRvd2Nzbih3Y2hhcl90ICp3Y3MsIGNvbnN0IGNoYXIgKnV0ZnMsIHNpemVfdCB3Y3NsZW4sIGludCB1dGZsZW4pCit7CisJaW50IHVwb3MgPSAwLCB3cG9zID0gMDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICp1dGYgPSAoY29uc3QgdW5zaWduZWQgY2hhciopIHV0ZnM7CisJaWYgKCF1dGYgfHwgIXdjcyB8fCB3Y3NsZW4gPCAxKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCS8qIHJlc2VydmUgc3BhY2UgZm9yIFwwICovCisJd2NzbGVuLS07CisJaWYgKHV0ZmxlbiA8IDApCisJCXV0ZmxlbiA9IElOVF9NQVg7CisKKwl3aGlsZSAodXBvcyA8IHV0ZmxlbikgeworCQlpbnQgYyA9IHV0Zlt1cG9zKytdICYgMHhmZjsKKwkJaWYgKHV0ZmxlbiA9PSBJTlRfTUFYICYmIGMgPT0gMCkKKwkJCWJyZWFrOworCisJCWlmICh3cG9zID49IHdjc2xlbikgeworCQkJd2NzW3dwb3NdID0gMDsKKwkJCWVycm5vID0gRVJBTkdFOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaWYgKGMgPCAweDgwKSB7CisJCQkvKiBBU0NJSSAqLworCQkJd2NzW3dwb3MrK10gPSBjOworCQl9IGVsc2UgaWYgKGMgPj0gMHhjMiAmJiBjIDwgMHhlMCAmJiB1cG9zIDwgdXRmbGVuICYmCisJCQkJKHV0Zlt1cG9zXSAmIDB4YzApID09IDB4ODApIHsKKwkJCS8qIDItYnl0ZSB1dGYtOCAqLworCQkJYyA9ICgoYyAmIDB4MWYpIDw8IDYpOworCQkJYyB8PSAodXRmW3Vwb3MrK10gJiAweDNmKTsKKwkJCXdjc1t3cG9zKytdID0gYzsKKwkJfSBlbHNlIGlmIChjID49IDB4ZTAgJiYgYyA8IDB4ZjAgJiYgdXBvcyArIDEgPCB1dGZsZW4gJiYKKwkJCQkhKGMgPT0gMHhlMCAmJiB1dGZbdXBvc10gPCAweGEwKSAmJiAvKiBvdmVyLWxvbmcgZW5jb2RpbmcgKi8KKwkJCQkodXRmW3Vwb3NdICYgMHhjMCkgPT0gMHg4MCAmJgorCQkJCSh1dGZbdXBvcyArIDFdICYgMHhjMCkgPT0gMHg4MCkgeworCQkJLyogMy1ieXRlIHV0Zi04ICovCisJCQljID0gKChjICYgMHgwZikgPDwgMTIpOworCQkJYyB8PSAoKHV0Zlt1cG9zKytdICYgMHgzZikgPDwgNik7CisJCQljIHw9ICh1dGZbdXBvcysrXSAmIDB4M2YpOworCQkJd2NzW3dwb3MrK10gPSBjOworCQl9IGVsc2UgaWYgKGMgPj0gMHhmMCAmJiBjIDwgMHhmNSAmJiB1cG9zICsgMiA8IHV0ZmxlbiAmJgorCQkJCXdwb3MgKyAxIDwgd2NzbGVuICYmCisJCQkJIShjID09IDB4ZjAgJiYgdXRmW3Vwb3NdIDwgMHg5MCkgJiYgLyogb3Zlci1sb25nIGVuY29kaW5nICovCisJCQkJIShjID09IDB4ZjQgJiYgdXRmW3Vwb3NdID49IDB4OTApICYmIC8qID4gXHUxMGZmZmYgKi8KKwkJCQkodXRmW3Vwb3NdICYgMHhjMCkgPT0gMHg4MCAmJgorCQkJCSh1dGZbdXBvcyArIDFdICYgMHhjMCkgPT0gMHg4MCAmJgorCQkJCSh1dGZbdXBvcyArIDJdICYgMHhjMCkgPT0gMHg4MCkgeworCQkJLyogNC1ieXRlIHV0Zi04OiBjb252ZXJ0IHRvIFx1ZDh4eCBcdWRjeHggc3Vycm9nYXRlIHBhaXIgKi8KKwkJCWMgPSAoKGMgJiAweDA3KSA8PCAxOCk7CisJCQljIHw9ICgodXRmW3Vwb3MrK10gJiAweDNmKSA8PCAxMik7CisJCQljIHw9ICgodXRmW3Vwb3MrK10gJiAweDNmKSA8PCA2KTsKKwkJCWMgfD0gKHV0Zlt1cG9zKytdICYgMHgzZik7CisJCQljIC09IDB4MTAwMDA7CisJCQl3Y3Nbd3BvcysrXSA9IDB4ZDgwMCB8IChjID4+IDEwKTsKKwkJCXdjc1t3cG9zKytdID0gMHhkYzAwIHwgKGMgJiAweDNmZik7CisJCX0gZWxzZSBpZiAoYyA+PSAweGEwKSB7CisJCQkvKiBpbnZhbGlkIHV0Zi04IGJ5dGUsIHByaW50YWJsZSB1bmljb2RlIGNoYXI6IGNvbnZlcnQgMToxICovCisJCQl3Y3Nbd3BvcysrXSA9IGM7CisJCX0gZWxzZSB7CisJCQkvKiBpbnZhbGlkIHV0Zi04IGJ5dGUsIG5vbi1wcmludGFibGUgdW5pY29kZTogY29udmVydCB0byBoZXggKi8KKwkJCXN0YXRpYyBjb25zdCBjaGFyICpoZXggPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisJCQl3Y3Nbd3BvcysrXSA9IGhleFtjID4+IDRdOworCQkJaWYgKHdwb3MgPCB3Y3NsZW4pCisJCQkJd2NzW3dwb3MrK10gPSBoZXhbYyAmIDB4MGZdOworCQl9CisJfQorCXdjc1t3cG9zXSA9IDA7CisJcmV0dXJuIHdwb3M7Cit9CisKK2ludCB4d2NzdG91dGYoY2hhciAqdXRmLCBjb25zdCB3Y2hhcl90ICp3Y3MsIHNpemVfdCB1dGZsZW4pCit7CisJaWYgKCF3Y3MgfHwgIXV0ZiB8fCB1dGZsZW4gPCAxKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCXV0ZmxlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfVVRGOCwgMCwgd2NzLCAtMSwgdXRmLCB1dGZsZW4sIE5VTEwsIE5VTEwpOworCWlmICh1dGZsZW4pCisJCXJldHVybiB1dGZsZW4gLSAxOworCWVycm5vID0gRVJBTkdFOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIERpc2FibGUgTVNWQ1JUIGNvbW1hbmQgbGluZSB3aWxkY2FyZCBleHBhbnNpb24gKF9fZ2V0bWFpbmFyZ3MgY2FsbGVkIGZyb20KKyAqIG1pbmd3IHN0YXJ0dXAgY29kZSwgc2VlIGluaXQuYyBpbiBtaW5ndyBydW50aW1lKS4KKyAqLworaW50IF9DUlRfZ2xvYiA9IDA7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlpbnQgbmV3bW9kZTsKK30gX3N0YXJ0dXBpbmZvOworCitleHRlcm4gaW50IF9fd2dldG1haW5hcmdzKGludCAqYXJnYywgd2NoYXJfdCAqKiphcmd2LCB3Y2hhcl90ICoqKmVudiwgaW50IGdsb2IsCisJCV9zdGFydHVwaW5mbyAqc2kpOworCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfc3RhcnR1cCgpCit7CisJZnB1dHMoImZhdGFsOiBub3QgZW5vdWdoIG1lbW9yeSBmb3IgaW5pdGlhbGl6YXRpb24iLCBzdGRlcnIpOworCWV4aXQoMTI4KTsKK30KKworc3RhdGljIHZvaWQgKm1hbGxvY19zdGFydHVwKHNpemVfdCBzaXplKQoreworCXZvaWQgKnJlc3VsdCA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIXJlc3VsdCkKKwkJZGllX3N0YXJ0dXAoKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgY2hhciAqd2NzdG91dGZkdXBfc3RhcnR1cChjaGFyICpidWZmZXIsIGNvbnN0IHdjaGFyX3QgKndjcywgc2l6ZV90IGxlbikKK3sKKwlsZW4gPSB4d2NzdG91dGYoYnVmZmVyLCB3Y3MsIGxlbikgKyAxOworCXJldHVybiBtZW1jcHkobWFsbG9jX3N0YXJ0dXAobGVuKSwgYnVmZmVyLCBsZW4pOworfQorCit2b2lkIG1pbmd3X3N0YXJ0dXAoKQoreworCWludCBpLCBtYXhsZW4sIGFyZ2M7CisJY2hhciAqYnVmZmVyOworCXdjaGFyX3QgKip3ZW52LCAqKndhcmd2OworCV9zdGFydHVwaW5mbyBzaTsKKworCS8qIGdldCB3aWRlIGNoYXIgYXJndW1lbnRzIGFuZCBlbnZpcm9ubWVudCAqLworCXNpLm5ld21vZGUgPSAwOworCWlmIChfX3dnZXRtYWluYXJncygmYXJnYywgJndhcmd2LCAmd2VudiwgX0NSVF9nbG9iLCAmc2kpIDwgMCkKKwkJZGllX3N0YXJ0dXAoKTsKKworCS8qIGRldGVybWluZSBzaXplIG9mIGFyZ3YgYW5kIGVudmlyb24gY29udmVyc2lvbiBidWZmZXIgKi8KKwltYXhsZW4gPSB3Y3NsZW4oX3dwZ21wdHIpOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCW1heGxlbiA9IG1heChtYXhsZW4sIHdjc2xlbih3YXJndltpXSkpOworCWZvciAoaSA9IDA7IHdlbnZbaV07IGkrKykKKwkJbWF4bGVuID0gbWF4KG1heGxlbiwgd2NzbGVuKHdlbnZbaV0pKTsKKworCS8qCisJICogbmVkbWFsbG9jIGNhbid0IGZyZWUgQ1JUIG1lbW9yeSwgYWxsb2NhdGUgcmVzaXphYmxlIGVudmlyb25tZW50CisJICogbGlzdC4gTm90ZSB0aGF0IHhtYWxsb2MgLyB4bWVtZHVweiBldGMuIGNhbGwgZ2V0ZW52LCBzbyB3ZSBjYW5ub3QKKwkgKiB1c2UgaXQgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBlbnZpcm9ubWVudCBpdHNlbGYuCisJICovCisJZW52aXJvbl9zaXplID0gaSArIDE7CisJZW52aXJvbl9hbGxvYyA9IGFsbG9jX25yKGVudmlyb25fc2l6ZSAqIHNpemVvZihjaGFyKikpOworCWVudmlyb24gPSBtYWxsb2Nfc3RhcnR1cChlbnZpcm9uX2FsbG9jKTsKKworCS8qIGFsbG9jYXRlIGJ1ZmZlciAod2NoYXJfdCBlbmNvZGVzIHRvIG1heCAzIFVURi04IGJ5dGVzKSAqLworCW1heGxlbiA9IDMgKiBtYXhsZW4gKyAxOworCWJ1ZmZlciA9IG1hbGxvY19zdGFydHVwKG1heGxlbik7CisKKwkvKiBjb252ZXJ0IGNvbW1hbmQgbGluZSBhcmd1bWVudHMgYW5kIGVudmlyb25tZW50IHRvIFVURi04ICovCisJX19hcmd2WzBdID0gd2NzdG91dGZkdXBfc3RhcnR1cChidWZmZXIsIF93cGdtcHRyLCBtYXhsZW4pOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisJCV9fYXJndltpXSA9IHdjc3RvdXRmZHVwX3N0YXJ0dXAoYnVmZmVyLCB3YXJndltpXSwgbWF4bGVuKTsKKwlmb3IgKGkgPSAwOyB3ZW52W2ldOyBpKyspCisJCWVudmlyb25baV0gPSB3Y3N0b3V0ZmR1cF9zdGFydHVwKGJ1ZmZlciwgd2VudltpXSwgbWF4bGVuKTsKKwllbnZpcm9uW2ldID0gTlVMTDsKKwlmcmVlKGJ1ZmZlcik7CisKKwkvKiBzb3J0IGVudmlyb25tZW50IGZvciBPKGxvZyBuKSBnZXRlbnYgLyBwdXRlbnYgKi8KKwlxc29ydChlbnZpcm9uLCBpLCBzaXplb2YoY2hhciopLCBjb21wYXJlZW52KTsKKworCS8qIGZpeCBXaW5kb3dzIHNwZWNpZmljIGVudmlyb25tZW50IHNldHRpbmdzICovCisKKwkvKiBvbiBXaW5kb3dzIGl0IGlzIFRNUCBhbmQgVEVNUCAqLworCWlmICghbWluZ3dfZ2V0ZW52KCJUTVBESVIiKSkgeworCQljb25zdCBjaGFyICp0bXAgPSBtaW5nd19nZXRlbnYoIlRNUCIpOworCQlpZiAoIXRtcCkKKwkJCXRtcCA9IG1pbmd3X2dldGVudigiVEVNUCIpOworCQlpZiAodG1wKQorCQkJc2V0ZW52KCJUTVBESVIiLCB0bXAsIDEpOworCX0KKworCS8qIHNpbXVsYXRlIFRFUk0gdG8gZW5hYmxlIGF1dG8tY29sb3IgKHNlZSBjb2xvci5jKSAqLworCWlmICghZ2V0ZW52KCJURVJNIikpCisJCXNldGVudigiVEVSTSIsICJjeWd3aW4iLCAxKTsKKworCS8qIGluaXRpYWxpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igd2FpdHBpZCBwaW5mb190IGxpc3QgKi8KKwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZwaW5mb19jcyk7CisKKwkvKiBzZXQgdXAgZGVmYXVsdCBmaWxlIG1vZGUgYW5kIGZpbGUgbW9kZXMgZm9yIHN0ZGluL291dC9lcnIgKi8KKwlfZm1vZGUgPSBfT19CSU5BUlk7CisJX3NldG1vZGUoX2ZpbGVubyhzdGRpbiksIF9PX0JJTkFSWSk7CisJX3NldG1vZGUoX2ZpbGVubyhzdGRvdXQpLCBfT19CSU5BUlkpOworCV9zZXRtb2RlKF9maWxlbm8oc3RkZXJyKSwgX09fQklOQVJZKTsKKworCS8qIGluaXRpYWxpemUgVW5pY29kZSBjb25zb2xlICovCisJd2luYW5zaV9pbml0KCk7Cit9CisKK2ludCB1bmFtZShzdHJ1Y3QgdXRzbmFtZSAqYnVmKQoreworCXVuc2lnbmVkIHYgPSAodW5zaWduZWQpR2V0VmVyc2lvbigpOworCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7CisJeHNucHJpbnRmKGJ1Zi0+c3lzbmFtZSwgc2l6ZW9mKGJ1Zi0+c3lzbmFtZSksICJXaW5kb3dzIik7CisJeHNucHJpbnRmKGJ1Zi0+cmVsZWFzZSwgc2l6ZW9mKGJ1Zi0+cmVsZWFzZSksCisJCSAiJXUuJXUiLCB2ICYgMHhmZiwgKHYgPj4gOCkgJiAweGZmKTsKKwkvKiBhc3N1bWluZyBOVCB2YXJpYW50cyBvbmx5Li4gKi8KKwl4c25wcmludGYoYnVmLT52ZXJzaW9uLCBzaXplb2YoYnVmLT52ZXJzaW9uKSwKKwkJICAiJXUiLCAodiA+PiAxNikgJiAweDdmZmYpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L21pbmd3LmggYi9jb21wYXQvbWluZ3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Mzg4NjVjCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21pbmd3LmgKQEAgLTAsMCArMSw1MTIgQEAKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisKKy8qCisgKiB0aGluZ3MgdGhhdCBhcmUgbm90IGF2YWlsYWJsZSBpbiBoZWFkZXIgZmlsZXMKKyAqLworCit0eXBlZGVmIGludCBwaWRfdDsKK3R5cGVkZWYgaW50IHVpZF90OwordHlwZWRlZiBpbnQgc29ja2xlbl90OworI2RlZmluZSBoc3RyZXJyb3Igc3RyZXJyb3IKKworI2RlZmluZSBTX0lGTE5LICAgIDAxMjAwMDAgLyogU3ltYm9saWMgbGluayAqLworI2RlZmluZSBTX0lTTE5LKHgpICgoKHgpICYgU19JRk1UKSA9PSBTX0lGTE5LKQorI2RlZmluZSBTX0lTU09DSyh4KSAwCisKKyNkZWZpbmUgU19JUkdSUCAwCisjZGVmaW5lIFNfSVdHUlAgMAorI2RlZmluZSBTX0lYR1JQIDAKKyNkZWZpbmUgU19JUldYRyAoU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lYR1JQKQorI2RlZmluZSBTX0lST1RIIDAKKyNkZWZpbmUgU19JV09USCAwCisjZGVmaW5lIFNfSVhPVEggMAorI2RlZmluZSBTX0lSV1hPIChTX0lST1RIIHwgU19JV09USCB8IFNfSVhPVEgpCisKKyNkZWZpbmUgU19JU1VJRCAwMDA0MDAwCisjZGVmaW5lIFNfSVNHSUQgMDAwMjAwMAorI2RlZmluZSBTX0lTVlRYIDAwMDEwMDAKKworI2RlZmluZSBXSUZFWElURUQoeCkgMQorI2RlZmluZSBXSUZTSUdOQUxFRCh4KSAwCisjZGVmaW5lIFdFWElUU1RBVFVTKHgpICgoeCkgJiAweGZmKQorI2RlZmluZSBXVEVSTVNJRyh4KSBTSUdURVJNCisKKyNpZm5kZWYgRVdPVUxEQkxPQ0sKKyNkZWZpbmUgRVdPVUxEQkxPQ0sgRUFHQUlOCisjZW5kaWYKKyNpZm5kZWYgRUxPT1AKKyNkZWZpbmUgRUxPT1AgRU1MSU5LCisjZW5kaWYKKyNkZWZpbmUgU0hVVF9XUiBTRF9TRU5ECisKKyNkZWZpbmUgU0lHSFVQIDEKKyNkZWZpbmUgU0lHUVVJVCAzCisjZGVmaW5lIFNJR0tJTEwgOQorI2RlZmluZSBTSUdQSVBFIDEzCisjZGVmaW5lIFNJR0FMUk0gMTQKKyNkZWZpbmUgU0lHQ0hMRCAxNworCisjZGVmaW5lIEZfR0VURkQgMQorI2RlZmluZSBGX1NFVEZEIDIKKyNkZWZpbmUgRkRfQ0xPRVhFQyAweDEKKworI2lmbmRlZiBFQUZOT1NVUFBPUlQKKyNkZWZpbmUgRUFGTk9TVVBQT1JUIFdTQUVBRk5PU1VQUE9SVAorI2VuZGlmCisjaWZuZGVmIEVDT05OQUJPUlRFRAorI2RlZmluZSBFQ09OTkFCT1JURUQgV1NBRUNPTk5BQk9SVEVECisjZW5kaWYKKworc3RydWN0IHBhc3N3ZCB7CisJY2hhciAqcHdfbmFtZTsKKwljaGFyICpwd19nZWNvczsKKwljaGFyICpwd19kaXI7Cit9OworCit0eXBlZGVmIHZvaWQgKF9fY2RlY2wgKnNpZ19oYW5kbGVyX3QpKGludCk7CitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwlzaWdfaGFuZGxlcl90IHNhX2hhbmRsZXI7CisJdW5zaWduZWQgc2FfZmxhZ3M7Cit9OworI2RlZmluZSBTQV9SRVNUQVJUIDAKKworc3RydWN0IGl0aW1lcnZhbCB7CisJc3RydWN0IHRpbWV2YWwgaXRfdmFsdWUsIGl0X2ludGVydmFsOworfTsKKyNkZWZpbmUgSVRJTUVSX1JFQUwgMAorCitzdHJ1Y3QgdXRzbmFtZSB7CisJY2hhciBzeXNuYW1lWzE2XTsKKwljaGFyIG5vZGVuYW1lWzFdOworCWNoYXIgcmVsZWFzZVsxNl07CisJY2hhciB2ZXJzaW9uWzE2XTsKKwljaGFyIG1hY2hpbmVbMV07Cit9OworCisvKgorICogc2FuaXRpemUgcHJlcHJvY2Vzc29yIG5hbWVzcGFjZSBwb2xsdXRlZCBieSBXaW5kb3dzIGhlYWRlcnMgZGVmaW5pbmcKKyAqIG1hY3JvcyB3aGljaCBjb2xsaWRlIHdpdGggZ2l0IGxvY2FsIHZlcnNpb25zCisgKi8KKyN1bmRlZiBIRUxQX0NPTU1BTkQgLyogZnJvbSB3aW51c2VyLmggKi8KKworLyoKKyAqIHRyaXZpYWwgc3R1YnMKKyAqLworCitzdGF0aWMgaW5saW5lIGludCByZWFkbGluayhjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZzaXopCit7IGVycm5vID0gRU5PU1lTOyByZXR1cm4gLTE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHN5bWxpbmsoY29uc3QgY2hhciAqb2xkcGF0aCwgY29uc3QgY2hhciAqbmV3cGF0aCkKK3sgZXJybm8gPSBFTk9TWVM7IHJldHVybiAtMTsgfQorc3RhdGljIGlubGluZSBpbnQgZmNobW9kKGludCBmaWxkZXMsIG1vZGVfdCBtb2RlKQoreyBlcnJubyA9IEVOT1NZUzsgcmV0dXJuIC0xOyB9CitzdGF0aWMgaW5saW5lIHBpZF90IGZvcmsodm9pZCkKK3sgZXJybm8gPSBFTk9TWVM7IHJldHVybiAtMTsgfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWxhcm0odW5zaWduZWQgaW50IHNlY29uZHMpCit7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBmc3luYyhpbnQgZmQpCit7IHJldHVybiBfY29tbWl0KGZkKTsgfQorc3RhdGljIGlubGluZSB2b2lkIHN5bmModm9pZCkKK3t9CitzdGF0aWMgaW5saW5lIHVpZF90IGdldHVpZCh2b2lkKQoreyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFzc3dkICpnZXRwd25hbShjb25zdCBjaGFyICpuYW1lKQoreyByZXR1cm4gTlVMTDsgfQorc3RhdGljIGlubGluZSBpbnQgZmNudGwoaW50IGZkLCBpbnQgY21kLCAuLi4pCit7CisJaWYgKGNtZCA9PSBGX0dFVEZEIHx8IGNtZCA9PSBGX1NFVEZEKQorCQlyZXR1cm4gMDsKKwllcnJubyA9IEVJTlZBTDsKKwlyZXR1cm4gLTE7Cit9CisvKiBiYXNoIGNhbm5vdCByZWxpYWJseSBkZXRlY3QgbmVnYXRpdmUgcmV0dXJuIGNvZGVzIGFzIGZhaWx1cmUgKi8KKyNkZWZpbmUgZXhpdChjb2RlKSBleGl0KChjb2RlKSAmIDB4ZmYpCisjZGVmaW5lIHNpZ2VtcHR5c2V0KHgpICh2b2lkKTAKK3N0YXRpYyBpbmxpbmUgaW50IHNpZ2FkZHNldChzaWdzZXRfdCAqc2V0LCBpbnQgc2lnbnVtKQoreyByZXR1cm4gMDsgfQorI2RlZmluZSBTSUdfVU5CTE9DSyAwCitzdGF0aWMgaW5saW5lIGludCBzaWdwcm9jbWFzayhpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqc2V0LCBzaWdzZXRfdCAqb2xkc2V0KQoreyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBwaWRfdCBnZXRwcGlkKHZvaWQpCit7IHJldHVybiAxOyB9CitzdGF0aWMgaW5saW5lIHBpZF90IGdldHBnaWQocGlkX3QgcGlkKQoreyByZXR1cm4gcGlkID09IDAgPyBnZXRwaWQoKSA6IHBpZDsgfQorc3RhdGljIGlubGluZSBwaWRfdCB0Y2dldHBncnAoaW50IGZkKQoreyByZXR1cm4gZ2V0cGlkKCk7IH0KKworLyoKKyAqIHNpbXBsZSBhZGFwdG9ycworICovCisKK2ludCBtaW5nd19ta2Rpcihjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSk7CisjZGVmaW5lIG1rZGlyIG1pbmd3X21rZGlyCisKKyNkZWZpbmUgV05PSEFORyAxCitwaWRfdCB3YWl0cGlkKHBpZF90IHBpZCwgaW50ICpzdGF0dXMsIGludCBvcHRpb25zKTsKKworI2RlZmluZSBraWxsIG1pbmd3X2tpbGwKK2ludCBtaW5nd19raWxsKHBpZF90IHBpZCwgaW50IHNpZyk7CisKKyNpZm5kZWYgTk9fT1BFTlNTTAorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CitzdGF0aWMgaW5saW5lIGludCBtaW5nd19TU0xfc2V0X2ZkKFNTTCAqc3NsLCBpbnQgZmQpCit7CisJcmV0dXJuIFNTTF9zZXRfZmQoc3NsLCBfZ2V0X29zZmhhbmRsZShmZCkpOworfQorI2RlZmluZSBTU0xfc2V0X2ZkIG1pbmd3X1NTTF9zZXRfZmQKKworc3RhdGljIGlubGluZSBpbnQgbWluZ3dfU1NMX3NldF9yZmQoU1NMICpzc2wsIGludCBmZCkKK3sKKwlyZXR1cm4gU1NMX3NldF9yZmQoc3NsLCBfZ2V0X29zZmhhbmRsZShmZCkpOworfQorI2RlZmluZSBTU0xfc2V0X3JmZCBtaW5nd19TU0xfc2V0X3JmZAorCitzdGF0aWMgaW5saW5lIGludCBtaW5nd19TU0xfc2V0X3dmZChTU0wgKnNzbCwgaW50IGZkKQoreworCXJldHVybiBTU0xfc2V0X3dmZChzc2wsIF9nZXRfb3NmaGFuZGxlKGZkKSk7Cit9CisjZGVmaW5lIFNTTF9zZXRfd2ZkIG1pbmd3X1NTTF9zZXRfd2ZkCisjZW5kaWYKKworLyoKKyAqIGltcGxlbWVudGF0aW9ucyBvZiBtaXNzaW5nIGZ1bmN0aW9ucworICovCisKK2ludCBwaXBlKGludCBmaWxlZGVzWzJdKTsKK3Vuc2lnbmVkIGludCBzbGVlcCAodW5zaWduZWQgaW50IHNlY29uZHMpOworaW50IG1rc3RlbXAoY2hhciAqdGVtcGxhdGUpOworaW50IGdldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHZvaWQgKnR6KTsKK3N0cnVjdCB0bSAqZ210aW1lX3IoY29uc3QgdGltZV90ICp0aW1lcCwgc3RydWN0IHRtICpyZXN1bHQpOworc3RydWN0IHRtICpsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKnRpbWVwLCBzdHJ1Y3QgdG0gKnJlc3VsdCk7CitpbnQgZ2V0cGFnZXNpemUodm9pZCk7CS8qIGRlZmluZWQgaW4gTWluR1cncyBsaWJnY2MuYSAqLworc3RydWN0IHBhc3N3ZCAqZ2V0cHd1aWQodWlkX3QgdWlkKTsKK2ludCBzZXRpdGltZXIoaW50IHR5cGUsIHN0cnVjdCBpdGltZXJ2YWwgKmluLCBzdHJ1Y3QgaXRpbWVydmFsICpvdXQpOworaW50IHNpZ2FjdGlvbihpbnQgc2lnLCBzdHJ1Y3Qgc2lnYWN0aW9uICppbiwgc3RydWN0IHNpZ2FjdGlvbiAqb3V0KTsKK2ludCBsaW5rKGNvbnN0IGNoYXIgKm9sZHBhdGgsIGNvbnN0IGNoYXIgKm5ld3BhdGgpOworaW50IHVuYW1lKHN0cnVjdCB1dHNuYW1lICpidWYpOworCisvKgorICogcmVwbGFjZW1lbnRzIG9mIGV4aXN0aW5nIGZ1bmN0aW9ucworICovCisKK2ludCBtaW5nd191bmxpbmsoY29uc3QgY2hhciAqcGF0aG5hbWUpOworI2RlZmluZSB1bmxpbmsgbWluZ3dfdW5saW5rCisKK2ludCBtaW5nd19ybWRpcihjb25zdCBjaGFyICpwYXRoKTsKKyNkZWZpbmUgcm1kaXIgbWluZ3dfcm1kaXIKKworaW50IG1pbmd3X29wZW4gKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgb2ZsYWdzLCAuLi4pOworI2RlZmluZSBvcGVuIG1pbmd3X29wZW4KKworaW50IG1pbmd3X2ZnZXRjKEZJTEUgKnN0cmVhbSk7CisjZGVmaW5lIGZnZXRjIG1pbmd3X2ZnZXRjCisKK0ZJTEUgKm1pbmd3X2ZvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUpOworI2RlZmluZSBmb3BlbiBtaW5nd19mb3BlbgorCitGSUxFICptaW5nd19mcmVvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqb3R5cGUsIEZJTEUgKnN0cmVhbSk7CisjZGVmaW5lIGZyZW9wZW4gbWluZ3dfZnJlb3BlbgorCitpbnQgbWluZ3dfZmZsdXNoKEZJTEUgKnN0cmVhbSk7CisjZGVmaW5lIGZmbHVzaCBtaW5nd19mZmx1c2gKKworaW50IG1pbmd3X2FjY2Vzcyhjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IG1vZGUpOworI3VuZGVmIGFjY2VzcworI2RlZmluZSBhY2Nlc3MgbWluZ3dfYWNjZXNzCisKK2ludCBtaW5nd19jaGRpcihjb25zdCBjaGFyICpkaXJuYW1lKTsKKyNkZWZpbmUgY2hkaXIgbWluZ3dfY2hkaXIKKworaW50IG1pbmd3X2NobW9kKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbW9kZSk7CisjZGVmaW5lIGNobW9kIG1pbmd3X2NobW9kCisKK2NoYXIgKm1pbmd3X21rdGVtcChjaGFyICp0ZW1wbGF0ZSk7CisjZGVmaW5lIG1rdGVtcCBtaW5nd19ta3RlbXAKKworY2hhciAqbWluZ3dfZ2V0Y3dkKGNoYXIgKnBvaW50ZXIsIGludCBsZW4pOworI2RlZmluZSBnZXRjd2QgbWluZ3dfZ2V0Y3dkCisKK2NoYXIgKm1pbmd3X2dldGVudihjb25zdCBjaGFyICpuYW1lKTsKKyNkZWZpbmUgZ2V0ZW52IG1pbmd3X2dldGVudgoraW50IG1pbmd3X3B1dGVudihjb25zdCBjaGFyICpuYW1ldmFsdWUpOworI2RlZmluZSBwdXRlbnYgbWluZ3dfcHV0ZW52CisjZGVmaW5lIHVuc2V0ZW52IG1pbmd3X3B1dGVudgorCitpbnQgbWluZ3dfZ2V0aG9zdG5hbWUoY2hhciAqaG9zdCwgaW50IG5hbWVsZW4pOworI2RlZmluZSBnZXRob3N0bmFtZSBtaW5nd19nZXRob3N0bmFtZQorCitzdHJ1Y3QgaG9zdGVudCAqbWluZ3dfZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpob3N0KTsKKyNkZWZpbmUgZ2V0aG9zdGJ5bmFtZSBtaW5nd19nZXRob3N0YnluYW1lCisKK3ZvaWQgbWluZ3dfZnJlZWFkZHJpbmZvKHN0cnVjdCBhZGRyaW5mbyAqcmVzKTsKKyNkZWZpbmUgZnJlZWFkZHJpbmZvIG1pbmd3X2ZyZWVhZGRyaW5mbworCitpbnQgbWluZ3dfZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqbm9kZSwgY29uc3QgY2hhciAqc2VydmljZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgc3RydWN0IGFkZHJpbmZvICoqcmVzKTsKKyNkZWZpbmUgZ2V0YWRkcmluZm8gbWluZ3dfZ2V0YWRkcmluZm8KKworaW50IG1pbmd3X2dldG5hbWVpbmZvKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIHNvY2tsZW5fdCBzYWxlbiwKKwkJICAgICAgY2hhciAqaG9zdCwgRFdPUkQgaG9zdGxlbiwgY2hhciAqc2VydiwgRFdPUkQgc2VydmxlbiwKKwkJICAgICAgaW50IGZsYWdzKTsKKyNkZWZpbmUgZ2V0bmFtZWluZm8gbWluZ3dfZ2V0bmFtZWluZm8KKworaW50IG1pbmd3X3NvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTsKKyNkZWZpbmUgc29ja2V0IG1pbmd3X3NvY2tldAorCitpbnQgbWluZ3dfY29ubmVjdChpbnQgc29ja2ZkLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzaXplX3Qgc3opOworI2RlZmluZSBjb25uZWN0IG1pbmd3X2Nvbm5lY3QKKworaW50IG1pbmd3X2JpbmQoaW50IHNvY2tmZCwgc3RydWN0IHNvY2thZGRyICpzYSwgc2l6ZV90IHN6KTsKKyNkZWZpbmUgYmluZCBtaW5nd19iaW5kCisKK2ludCBtaW5nd19zZXRzb2Nrb3B0KGludCBzb2NrZmQsIGludCBsdmwsIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsIGludCBvcHRsZW4pOworI2RlZmluZSBzZXRzb2Nrb3B0IG1pbmd3X3NldHNvY2tvcHQKKworaW50IG1pbmd3X3NodXRkb3duKGludCBzb2NrZmQsIGludCBob3cpOworI2RlZmluZSBzaHV0ZG93biBtaW5nd19zaHV0ZG93bgorCitpbnQgbWluZ3dfbGlzdGVuKGludCBzb2NrZmQsIGludCBiYWNrbG9nKTsKKyNkZWZpbmUgbGlzdGVuIG1pbmd3X2xpc3RlbgorCitpbnQgbWluZ3dfYWNjZXB0KGludCBzb2NrZmQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHNvY2tsZW5fdCAqc3opOworI2RlZmluZSBhY2NlcHQgbWluZ3dfYWNjZXB0CisKK2ludCBtaW5nd19yZW5hbWUoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKKyNkZWZpbmUgcmVuYW1lIG1pbmd3X3JlbmFtZQorCisjaWYgZGVmaW5lZChVU0VfV0lOMzJfTU1BUCkgfHwgZGVmaW5lZChfTVNDX1ZFUikKK2ludCBtaW5nd19nZXRwYWdlc2l6ZSh2b2lkKTsKKyNkZWZpbmUgZ2V0cGFnZXNpemUgbWluZ3dfZ2V0cGFnZXNpemUKKyNlbmRpZgorCitzdHJ1Y3QgcmxpbWl0IHsKKwl1bnNpZ25lZCBpbnQgcmxpbV9jdXI7Cit9OworI2RlZmluZSBSTElNSVRfTk9GSUxFIDAKKworc3RhdGljIGlubGluZSBpbnQgZ2V0cmxpbWl0KGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqcmxwKQoreworCWlmIChyZXNvdXJjZSAhPSBSTElNSVRfTk9GSUxFKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCisJcmxwLT5ybGltX2N1ciA9IDIwNDg7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVc2UgbWluZ3cgc3BlY2lmaWMgc3RhdCgpL2xzdGF0KCkvZnN0YXQoKSBpbXBsZW1lbnRhdGlvbnMgb24gV2luZG93cy4KKyAqLworI2RlZmluZSBvZmZfdCBvZmY2NF90CisjZGVmaW5lIGxzZWVrIF9sc2Vla2k2NAorCisvKiB1c2Ugc3RydWN0IHN0YXQgd2l0aCA2NCBiaXQgc3Rfc2l6ZSAqLworI2lmZGVmIHN0YXQKKyN1bmRlZiBzdGF0CisjZW5kaWYKKyNkZWZpbmUgc3RhdCBfc3RhdGk2NAoraW50IG1pbmd3X2xzdGF0KGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgc3RydWN0IHN0YXQgKmJ1Zik7CitpbnQgbWluZ3dfc3RhdChjb25zdCBjaGFyICpmaWxlX25hbWUsIHN0cnVjdCBzdGF0ICpidWYpOworaW50IG1pbmd3X2ZzdGF0KGludCBmZCwgc3RydWN0IHN0YXQgKmJ1Zik7CisjaWZkZWYgZnN0YXQKKyN1bmRlZiBmc3RhdAorI2VuZGlmCisjZGVmaW5lIGZzdGF0IG1pbmd3X2ZzdGF0CisjaWZkZWYgbHN0YXQKKyN1bmRlZiBsc3RhdAorI2VuZGlmCisjZGVmaW5lIGxzdGF0IG1pbmd3X2xzdGF0CisKKyNpZm5kZWYgX3N0YXRpNjQKKyMgZGVmaW5lIF9zdGF0aTY0KHgseSkgbWluZ3dfc3RhdCh4LHkpCisjZWxpZiBkZWZpbmVkIChfVVNFXzMyQklUX1RJTUVfVCkKKyMgZGVmaW5lIF9zdGF0MzJpNjQoeCx5KSBtaW5nd19zdGF0KHgseSkKKyNlbHNlCisjIGRlZmluZSBfc3RhdDY0KHgseSkgbWluZ3dfc3RhdCh4LHkpCisjZW5kaWYKKworaW50IG1pbmd3X3V0aW1lKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSwgY29uc3Qgc3RydWN0IHV0aW1idWYgKnRpbWVzKTsKKyNkZWZpbmUgdXRpbWUgbWluZ3dfdXRpbWUKKworcGlkX3QgbWluZ3dfc3Bhd252cGUoY29uc3QgY2hhciAqY21kLCBjb25zdCBjaGFyICoqYXJndiwgY2hhciAqKmVudiwKKwkJICAgICBjb25zdCBjaGFyICpkaXIsCisJCSAgICAgaW50IGZoaW4sIGludCBmaG91dCwgaW50IGZoZXJyKTsKK2ludCBtaW5nd19leGVjdnAoY29uc3QgY2hhciAqY21kLCBjaGFyICpjb25zdCAqYXJndik7CisjZGVmaW5lIGV4ZWN2cCBtaW5nd19leGVjdnAKK2ludCBtaW5nd19leGVjdihjb25zdCBjaGFyICpjbWQsIGNoYXIgKmNvbnN0ICphcmd2KTsKKyNkZWZpbmUgZXhlY3YgbWluZ3dfZXhlY3YKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2l0X250b2hsKHVuc2lnbmVkIGludCB4KQoreyByZXR1cm4gKHVuc2lnbmVkIGludCludG9obCh4KTsgfQorI2RlZmluZSBudG9obCBnaXRfbnRvaGwKKworc2lnX2hhbmRsZXJfdCBtaW5nd19zaWduYWwoaW50IHNpZywgc2lnX2hhbmRsZXJfdCBoYW5kbGVyKTsKKyNkZWZpbmUgc2lnbmFsIG1pbmd3X3NpZ25hbAorCitpbnQgbWluZ3dfcmFpc2UoaW50IHNpZyk7CisjZGVmaW5lIHJhaXNlIG1pbmd3X3JhaXNlCisKKy8qCisgKiBBTlNJIGVtdWxhdGlvbiB3cmFwcGVycworICovCisKK3ZvaWQgd2luYW5zaV9pbml0KHZvaWQpOworSEFORExFIHdpbmFuc2lfZ2V0X29zZmhhbmRsZShpbnQgZmQpOworCisvKgorICogZ2l0IHNwZWNpZmljIGNvbXBhdGliaWxpdHkKKyAqLworCisjZGVmaW5lIGhhc19kb3NfZHJpdmVfcHJlZml4KHBhdGgpIChpc2FscGhhKCoocGF0aCkpICYmIChwYXRoKVsxXSA9PSAnOicpCisjZGVmaW5lIGlzX2Rpcl9zZXAoYykgKChjKSA9PSAnLycgfHwgKGMpID09ICdcXCcpCitzdGF0aWMgaW5saW5lIGNoYXIgKm1pbmd3X2ZpbmRfbGFzdF9kaXJfc2VwKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqcmV0ID0gTlVMTDsKKwlmb3IgKDsgKnBhdGg7ICsrcGF0aCkKKwkJaWYgKGlzX2Rpcl9zZXAoKnBhdGgpKQorCQkJcmV0ID0gKGNoYXIgKilwYXRoOworCXJldHVybiByZXQ7Cit9CisjZGVmaW5lIGZpbmRfbGFzdF9kaXJfc2VwIG1pbmd3X2ZpbmRfbGFzdF9kaXJfc2VwCitpbnQgbWluZ3dfb2Zmc2V0XzFzdF9jb21wb25lbnQoY29uc3QgY2hhciAqcGF0aCk7CisjZGVmaW5lIG9mZnNldF8xc3RfY29tcG9uZW50IG1pbmd3X29mZnNldF8xc3RfY29tcG9uZW50CisjZGVmaW5lIFBBVEhfU0VQICc7JworI2RlZmluZSBQUkl1TUFYICJJNjR1IgorI2RlZmluZSBQUklkNjQgIkk2NGQiCisKK3ZvaWQgbWluZ3dfb3Blbl9odG1sKGNvbnN0IGNoYXIgKnBhdGgpOworI2RlZmluZSBvcGVuX2h0bWwgbWluZ3dfb3Blbl9odG1sCisKK3ZvaWQgbWluZ3dfbWFya19hc19naXRfZGlyKGNvbnN0IGNoYXIgKmRpcik7CisjZGVmaW5lIG1hcmtfYXNfZ2l0X2RpciBtaW5nd19tYXJrX2FzX2dpdF9kaXIKKworLyoqCisgKiBDb252ZXJ0cyBVVEYtOCBlbmNvZGVkIHN0cmluZyB0byBVVEYtMTZMRS4KKyAqCisgKiBUbyBzdXBwb3J0IHJlcG9zaXRvcmllcyB3aXRoIGxlZ2FjeS1lbmNvZGVkIGZpbGUgbmFtZXMsIGludmFsaWQgVVRGLTggYnl0ZXMKKyAqIDB4YTAgLSAweGZmIGFyZSBjb252ZXJ0ZWQgdG8gY29ycmVzcG9uZGluZyBwcmludGFibGUgVW5pY29kZSBjaGFycyBcdTAwYTAgLQorICogXHUwMGZmLCBhbmQgaW52YWxpZCBVVEYtOCBieXRlcyAweDgwIC0gMHg5ZiAod2hpY2ggd291bGQgbWFrZSBub24tcHJpbnRhYmxlCisgKiBVbmljb2RlKSBhcmUgY29udmVydGVkIHRvIGhleC1jb2RlLgorICoKKyAqIExlYWQtYnl0ZXMgbm90IGZvbGxvd2VkIGJ5IGFuIGFwcHJvcHJpYXRlIG51bWJlciBvZiB0cmFpbC1ieXRlcywgb3Zlci1sb25nCisgKiBlbmNvZGluZ3MgYW5kIDQtYnl0ZSBlbmNvZGluZ3MgPiBcdTEwZmZmZiBhcmUgZGV0ZWN0ZWQgYXMgaW52YWxpZCBVVEYtOC4KKyAqCisgKiBNYXhpbXVtIHNwYWNlIHJlcXVpcmVtZW50IGZvciB0aGUgdGFyZ2V0IGJ1ZmZlciBpcyB0d28gd2lkZSBjaGFycyBwZXIgVVRGLTgKKyAqIGNoYXIgKCgoc3RybGVuKHV0ZikgKiAyKSArIDEpIFsqIHNpemVvZih3Y2hhcl90KV0pLgorICoKKyAqIFRoZSBtYXhpbXVtIHNwYWNlIGlzIG5lZWRlZCBvbmx5IGlmIHRoZSBlbnRpcmUgaW5wdXQgc3RyaW5nIGNvbnNpc3RzIG9mCisgKiBpbnZhbGlkIFVURi04IGJ5dGVzIGluIHJhbmdlIDB4ODAtMHg5ZiwgYXMgcGVyIHRoZSBmb2xsb3dpbmcgdGFibGU6CisgKgorICogICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgVVRGLTggfCBVVEYtMTYgfAorICogICBDb2RlIHBvaW50ICB8ICBVVEYtOCBzZXF1ZW5jZSAgIHwgYnl0ZXMgfCB3b3JkcyAgfCByYXRpbworICogLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0KKyAqIDAwMDAwMC0wMDAwN2YgfCAwLTdmICAgICAgICAgICAgICB8ICAgMSAgIHwgICAxICAgIHwgIDEKKyAqIDAwMDA4MC0wMDA3ZmYgfCBjMi1kZiArIDgwLWJmICAgICB8ICAgMiAgIHwgICAxICAgIHwgIDAuNQorICogMDAwODAwLTAwZmZmZiB8IGUwLWVmICsgMiAqIDgwLWJmIHwgICAzICAgfCAgIDEgICAgfCAgMC4zMworICogMDEwMDAwLTEwZmZmZiB8IGYwLWY0ICsgMyAqIDgwLWJmIHwgICA0ICAgfCAgMiAoYSkgfCAgMC41CisgKiBpbnZhbGlkICAgICAgIHwgODAtOWYgICAgICAgICAgICAgfCAgIDEgICB8ICAyIChiKSB8ICAyCisgKiBpbnZhbGlkICAgICAgIHwgYTAtZmYgICAgICAgICAgICAgfCAgIDEgICB8ICAgMSAgICB8ICAxCisgKgorICogKGEpIGVuY29kZWQgYXMgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyCisgKiAoYikgZW5jb2RlZCBhcyB0d28gaGV4IGRpZ2l0cworICoKKyAqIE5vdGUgdGhhdCwgd2hpbGUgdGhlIFVURi04IGVuY29kaW5nIHNjaGVtZSBjYW4gYmUgZXh0ZW5kZWQgdG8gNS1ieXRlLCA2LWJ5dGUKKyAqIG9yIGV2ZW4gaW5kZWZpbml0ZS1ieXRlIHNlcXVlbmNlcywgdGhlIGxhcmdlc3QgdmFsaWQgY29kZSBwb2ludCBcdTEwZmZmZgorICogZW5jb2RlcyBhcyBvbmx5IDQgVVRGLTggYnl0ZXMuCisgKgorICogUGFyYW1ldGVyczoKKyAqIHdjczogd2lkZSBjaGFyIHRhcmdldCBidWZmZXIKKyAqIHV0Zjogc3RyaW5nIHRvIGNvbnZlcnQKKyAqIHdjc2xlbjogc2l6ZSBvZiB0YXJnZXQgYnVmZmVyIChpbiB3Y2hhcl90J3MpCisgKiB1dGZsZW46IHNpemUgb2Ygc3RyaW5nIHRvIGNvbnZlcnQsIG9yIC0xIGlmIDAtdGVybWluYXRlZAorICoKKyAqIFJldHVybnM6CisgKiBsZW5ndGggb2YgY29udmVydGVkIHN0cmluZyAoX3djc2xlbih3Y3MpKSwgb3IgLTEgb24gZmFpbHVyZQorICoKKyAqIEVycm9yczoKKyAqIEVJTlZBTDogb25lIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGlzIGludmFsaWQgKGUuZy4gTlVMTCkKKyAqIEVSQU5HRTogdGhlIG91dHB1dCBidWZmZXIgaXMgdG9vIHNtYWxsCisgKi8KK2ludCB4dXRmdG93Y3NuKHdjaGFyX3QgKndjcywgY29uc3QgY2hhciAqdXRmLCBzaXplX3Qgd2NzbGVuLCBpbnQgdXRmbGVuKTsKKworLyoqCisgKiBTaW1wbGlmaWVkIHZhcmlhbnQgb2YgeHV0ZnRvd2NzbiwgYXNzdW1lcyBpbnB1dCBzdHJpbmcgaXMgXDAtdGVybWluYXRlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgeHV0ZnRvd2NzKHdjaGFyX3QgKndjcywgY29uc3QgY2hhciAqdXRmLCBzaXplX3Qgd2NzbGVuKQoreworCXJldHVybiB4dXRmdG93Y3NuKHdjcywgdXRmLCB3Y3NsZW4sIC0xKTsKK30KKworLyoqCisgKiBTaW1wbGlmaWVkIGZpbGUgc3lzdGVtIHNwZWNpZmljIHZhcmlhbnQgb2YgeHV0ZnRvd2NzbiwgYXNzdW1lcyBvdXRwdXQKKyAqIGJ1ZmZlciBzaXplIGlzIE1BWF9QQVRIIHdpZGUgY2hhcnMgYW5kIGlucHV0IHN0cmluZyBpcyBcMC10ZXJtaW5hdGVkLAorICogZmFpbHMgd2l0aCBFTkFNRVRPT0xPTkcgaWYgaW5wdXQgc3RyaW5nIGlzIHRvbyBsb25nLgorICovCitzdGF0aWMgaW5saW5lIGludCB4dXRmdG93Y3NfcGF0aCh3Y2hhcl90ICp3Y3MsIGNvbnN0IGNoYXIgKnV0ZikKK3sKKwlpbnQgcmVzdWx0ID0geHV0ZnRvd2Nzbih3Y3MsIHV0ZiwgTUFYX1BBVEgsIC0xKTsKKwlpZiAocmVzdWx0IDwgMCAmJiBlcnJubyA9PSBFUkFOR0UpCisJCWVycm5vID0gRU5BTUVUT09MT05HOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogQ29udmVydHMgVVRGLTE2TEUgZW5jb2RlZCBzdHJpbmcgdG8gVVRGLTguCisgKgorICogTWF4aW11bSBzcGFjZSByZXF1aXJlbWVudCBmb3IgdGhlIHRhcmdldCBidWZmZXIgaXMgdGhyZWUgVVRGLTggY2hhcnMgcGVyCisgKiB3aWRlIGNoYXIgKChfd2NzbGVuKHdjcykgKiAzKSArIDEpLgorICoKKyAqIFRoZSBtYXhpbXVtIHNwYWNlIGlzIG5lZWRlZCBvbmx5IGlmIHRoZSBlbnRpcmUgaW5wdXQgc3RyaW5nIGNvbnNpc3RzIG9mCisgKiBVVEYtMTYgd29yZHMgaW4gcmFuZ2UgMHgwODAwLTB4ZDdmZiBvciAweGUwMDAtMHhmZmZmIChpLmUuIFx1MDgwMC1cdWZmZmYKKyAqIG1vZHVsbyBzdXJyb2dhdGUgcGFpcnMpLCBhcyBwZXIgdGhlIGZvbGxvd2luZyB0YWJsZToKKyAqCisgKiAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgVVRGLTE2IHwgVVRGLTggfAorICogICBDb2RlIHBvaW50ICB8ICBVVEYtMTYgc2VxdWVuY2UgICAgICB8IHdvcmRzICB8IGJ5dGVzIHwgcmF0aW8KKyAqIC0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLQorICogMDAwMDAwLTAwMDA3ZiB8IDAwMDAtMDA3ZiAgICAgICAgICAgICB8ICAgMSAgICB8ICAgMSAgIHwgIDEKKyAqIDAwMDA4MC0wMDA3ZmYgfCAwMDgwLTA3ZmYgICAgICAgICAgICAgfCAgIDEgICAgfCAgIDIgICB8ICAyCisgKiAwMDA4MDAtMDBmZmZmIHwgMDgwMC1kN2ZmIC8gZTAwMC1mZmZmIHwgICAxICAgIHwgICAzICAgfCAgMworICogMDEwMDAwLTEwZmZmZiB8IGQ4MDAtZGJmZiArIGRjMDAtZGZmZiB8ICAgMiAgICB8ICAgNCAgIHwgIDIKKyAqCisgKiBOb3RlIHRoYXQgaW52YWxpZCBjb2RlIHBvaW50cyA+IDEwZmZmZiBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gVVRGLTE2LgorICoKKyAqIFBhcmFtZXRlcnM6CisgKiB1dGY6IHRhcmdldCBidWZmZXIKKyAqIHdjczogd2lkZSBzdHJpbmcgdG8gY29udmVydAorICogdXRmbGVuOiBzaXplIG9mIHRhcmdldCBidWZmZXIKKyAqCisgKiBSZXR1cm5zOgorICogbGVuZ3RoIG9mIGNvbnZlcnRlZCBzdHJpbmcsIG9yIC0xIG9uIGZhaWx1cmUKKyAqCisgKiBFcnJvcnM6CisgKiBFSU5WQUw6IG9uZSBvZiB0aGUgaW5wdXQgcGFyYW1ldGVycyBpcyBpbnZhbGlkIChlLmcuIE5VTEwpCisgKiBFUkFOR0U6IHRoZSBvdXRwdXQgYnVmZmVyIGlzIHRvbyBzbWFsbAorICovCitpbnQgeHdjc3RvdXRmKGNoYXIgKnV0ZiwgY29uc3Qgd2NoYXJfdCAqd2NzLCBzaXplX3QgdXRmbGVuKTsKKworLyoKKyAqIEEgY3JpdGljYWwgc2VjdGlvbiB1c2VkIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3Bhd24KKyAqIGZ1bmN0aW9ucyAobWluZ3dfc3Bhd252W3BdZSgpKSBhbmQgd2FpdHBpZCgpLiBJbnRpYWxpc2VkIGluCisgKiB0aGUgcmVwbGFjZW1lbnQgbWFpbigpIG1hY3JvIGJlbG93LgorICovCitleHRlcm4gQ1JJVElDQUxfU0VDVElPTiBwaW5mb19jczsKKworLyoKKyAqIEEgcmVwbGFjZW1lbnQgb2YgbWFpbigpIHRoYXQgYWRkcyB3aW4zMiBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KKyAqLworCit2b2lkIG1pbmd3X3N0YXJ0dXAoKTsKKyNkZWZpbmUgbWFpbihjLHYpIGR1bW15X2RlY2xfbWluZ3dfbWFpbigpOyBcCitzdGF0aWMgaW50IG1pbmd3X21haW4oYyx2KTsgXAoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSBcCit7IFwKKwltaW5nd19zdGFydHVwKCk7IFwKKwlyZXR1cm4gbWluZ3dfbWFpbihfX2FyZ2MsICh2b2lkICopX19hcmd2KTsgXAorfSBcCitzdGF0aWMgaW50IG1pbmd3X21haW4oYyx2KQorCisvKgorICogVXNlZCBieSBQdGhyZWFkIEFQSSBpbXBsZW1lbnRhdGlvbiBmb3IgV2luZG93cworICovCitleHRlcm4gaW50IGVycl93aW5fdG9fcG9zaXgoRFdPUkQgd2luZXJyKTsKZGlmZiAtLWdpdCBhL2NvbXBhdC9ta2Rpci5jIGIvY29tcGF0L21rZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyNTNmYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9ta2Rpci5jCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKyN1bmRlZiBta2RpcgorCisvKiBmb3IgcGxhdGZvcm1zIHRoYXQgY2FuJ3QgZGVhbCB3aXRoIGEgdHJhaWxpbmcgJy8nICovCitpbnQgY29tcGF0X21rZGlyX3dvX3RyYWlsaW5nX3NsYXNoKGNvbnN0IGNoYXIgKmRpciwgbW9kZV90IG1vZGUpCit7CisJaW50IHJldHZhbDsKKwljaGFyICp0bXBfZGlyID0gTlVMTDsKKwlzaXplX3QgbGVuID0gc3RybGVuKGRpcik7CisKKwlpZiAobGVuICYmIGRpcltsZW4tMV0gPT0gJy8nKSB7CisJCWlmICgodG1wX2RpciA9IHN0cmR1cChkaXIpKSA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCQl0bXBfZGlyW2xlbi0xXSA9ICdcMCc7CisJfQorCWVsc2UKKwkJdG1wX2RpciA9IChjaGFyICopZGlyOworCisJcmV0dmFsID0gbWtkaXIodG1wX2RpciwgbW9kZSk7CisJaWYgKHRtcF9kaXIgIT0gZGlyKQorCQlmcmVlKHRtcF9kaXIpOworCisJcmV0dXJuIHJldHZhbDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9ta2R0ZW1wLmMgYi9jb21wYXQvbWtkdGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMzYxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbWtkdGVtcC5jCkBAIC0wLDAgKzEsOCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitjaGFyICpnaXRta2R0ZW1wKGNoYXIgKnRlbXBsYXRlKQoreworCWlmICghKm1rdGVtcCh0ZW1wbGF0ZSkgfHwgbWtkaXIodGVtcGxhdGUsIDA3MDApKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gdGVtcGxhdGU7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvbW1hcC5jIGIvY29tcGF0L21tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjY2MmZlCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21tYXAuYwpAQCAtMCwwICsxLDQwIEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK3ZvaWQgKmdpdF9tbWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCkKK3sKKwlzaXplX3QgbiA9IDA7CisKKwlpZiAoc3RhcnQgIT0gTlVMTCB8fCAhKGZsYWdzICYgTUFQX1BSSVZBVEUpKQorCQlkaWUoIkludmFsaWQgdXNhZ2Ugb2YgbW1hcCB3aGVuIGJ1aWx0IHdpdGggTk9fTU1BUCIpOworCisJc3RhcnQgPSB4bWFsbG9jKGxlbmd0aCk7CisJaWYgKHN0YXJ0ID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiBNQVBfRkFJTEVEOworCX0KKworCXdoaWxlIChuIDwgbGVuZ3RoKSB7CisJCXNzaXplX3QgY291bnQgPSB4cHJlYWQoZmQsIChjaGFyICopc3RhcnQgKyBuLCBsZW5ndGggLSBuLCBvZmZzZXQgKyBuKTsKKworCQlpZiAoY291bnQgPT0gMCkgeworCQkJbWVtc2V0KChjaGFyICopc3RhcnQrbiwgMCwgbGVuZ3RoLW4pOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoY291bnQgPCAwKSB7CisJCQlmcmVlKHN0YXJ0KTsKKwkJCWVycm5vID0gRUFDQ0VTOworCQkJcmV0dXJuIE1BUF9GQUlMRUQ7CisJCX0KKworCQluICs9IGNvdW50OworCX0KKworCXJldHVybiBzdGFydDsKK30KKworaW50IGdpdF9tdW5tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpCit7CisJZnJlZShzdGFydCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvbXN2Yy5jIGIvY29tcGF0L21zdmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTg0M2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L21zdmMuYwpAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJ3aW4zMi5oIgorI2luY2x1ZGUgPGNvbmlvLmg+CisjaW5jbHVkZSAiLi4vc3RyYnVmLmgiCisKKyNpbmNsdWRlICJtaW5ndy5jIgpkaWZmIC0tZ2l0IGEvY29tcGF0L21zdmMuaCBiL2NvbXBhdC9tc3ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgwYmI1NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9tc3ZjLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBfX01TVkNfX0hFQUQKKyNkZWZpbmUgX19NU1ZDX19IRUFECisKKyNpbmNsdWRlIDxkaXJlY3QuaD4KKyNpbmNsdWRlIDxwcm9jZXNzLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8aW8uaD4KKworLyogcG9ydGluZyBmdW5jdGlvbiAqLworI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKKyNkZWZpbmUgX19pbmxpbmVfXyBfX2lubGluZQorI2RlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCisjZGVmaW5lIHN0cm5jYXNlY21wICBfc3RybmljbXAKKyNkZWZpbmUgZnRydW5jYXRlICAgIF9jaHNpemUKKyNkZWZpbmUgc3RydG91bGwgICAgIF9zdHJ0b3VpNjQKKyNkZWZpbmUgc3RydG9sbCAgICAgIF9zdHJ0b2k2NAorCitzdGF0aWMgX19pbmxpbmUgaW50IHN0cmNhc2VjbXAgKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKK3sKKwlpbnQgc2l6ZTEgPSBzdHJsZW4oczEpOworCWludCBzaXN6MiA9IHN0cmxlbihzMik7CisJcmV0dXJuIF9zdHJuaWNtcChzMSwgczIsIHNpc3oyID4gc2l6ZTEgPyBzaXN6MiA6IHNpemUxKTsKK30KKworI3VuZGVmIEVSUk9SCisKKyNpbmNsdWRlICJjb21wYXQvbWluZ3cuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL0xpY2Vuc2UudHh0IGIvY29tcGF0L25lZG1hbGxvYy9MaWNlbnNlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmI3Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9MaWNlbnNlLnR4dApAQCAtMCwwICsxLDIzIEBACitCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAgLSBBdWd1c3QgMTd0aCwgMjAwMworCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBjb3ZlcmVkIGJ5Cit0aGlzIGxpY2Vuc2UgKHRoZSAiU29mdHdhcmUiKSB0byB1c2UsIHJlcHJvZHVjZSwgZGlzcGxheSwgZGlzdHJpYnV0ZSwKK2V4ZWN1dGUsIGFuZCB0cmFuc21pdCB0aGUgU29mdHdhcmUsIGFuZCB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlCitTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCB0aGlyZC1wYXJ0aWVzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0bworZG8gc28sIGFsbCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmc6CisKK1RoZSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUgYW5kIHRoaXMgZW50aXJlIHN0YXRlbWVudCwgaW5jbHVkaW5nCit0aGUgYWJvdmUgbGljZW5zZSBncmFudCwgdGhpcyByZXN0cmljdGlvbiBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorbXVzdCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kCithbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHVubGVzcyBzdWNoIGNvcGllcyBvciBkZXJpdmF0aXZlCit3b3JrcyBhcmUgc29sZWx5IGluIHRoZSBmb3JtIG9mIG1hY2hpbmUtZXhlY3V0YWJsZSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYnkKK2Egc291cmNlIGxhbmd1YWdlIHByb2Nlc3Nvci4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVAorU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIEFOWU9ORSBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFIEJFIExJQUJMRQorRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKK0RFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvUmVhZG1lLnR4dCBiL2NvbXBhdC9uZWRtYWxsb2MvUmVhZG1lLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2NiZjUwCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9SZWFkbWUudHh0CkBAIC0wLDAgKzEsMTM2IEBACituZWRhbGxvYyB2MS4wNSAxNXRoIEp1bmUgMjAwODoKKy09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPQorCitieSBOaWFsbCBEb3VnbGFzIChodHRwOi8vd3d3Lm5lZHByb2QuY29tL3Byb2dyYW1zL3BvcnRhYmxlL25lZG1hbGxvYy8pCisKK0VuY2xvc2VkIGlzIG5lZGFsbG9jLCBhbiBhbHRlcm5hdGl2ZSBtYWxsb2MgaW1wbGVtZW50YXRpb24gZm9yIG11bHRpcGxlCit0aHJlYWRzIHdpdGhvdXQgbG9jayBjb250ZW50aW9uIGJhc2VkIG9uIGRsbWFsbG9jIHYyLjguNC4gSXQgaXMgbW9yZQorb3IgbGVzcyBhIG5ld2VyIGltcGxlbWVudGF0aW9uIG9mIHB0bWFsbG9jMiwgdGhlIHN0YW5kYXJkIGFsbG9jYXRvciBpbgorTGludXggKHdoaWNoIGlzIGJhc2VkIG9uIGRsbWFsbG9jIHYyLjcuMCkgYnV0IGFsc28gY29udGFpbnMgYSBwZXItdGhyZWFkCitjYWNoZSBmb3IgbWF4aW11bSBDUFUgc2NhbGFiaWxpdHkuCisKK0l0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIHdoaWNoIGJhc2ljYWxseSBtZWFucworeW91IGNhbiBkbyBhbnl0aGluZyB5b3UgbGlrZSB3aXRoIGl0LiBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBtYWxsb2MuYy5oCitmaWxlIHdoaWNoIHJlbWFpbnMgY29weXJpZ2h0IHRvIG90aGVycy4KKworSXQgaGFzIGJlZW4gdGVzdGVkIG9uIHdpbjMyICh4ODYpLCB3aW42NCAoeDY0KSwgTGludXggKHg2NCksIEZyZWVCU0QgKHg2NCkKK2FuZCBBcHBsZSBNYWNPUyBYICh4ODYpLiBJdCB3b3JrcyB2ZXJ5IHdlbGwgb24gYWxsIG9mIHRoZXNlIGFuZCBpcyB2ZXJ5CitzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuIHRoZSBzeXN0ZW0gYWxsb2NhdG9yIG9uIGFsbCBvZiB0aGVzZSBwbGF0Zm9ybXMuCisKK0J5IGxpdGVyYWxseSBkcm9wcGluZyBpbiB0aGlzIGFsbG9jYXRvciBhcyBhIHJlcGxhY2VtZW50IGZvciB5b3VyIHN5c3RlbQorYWxsb2NhdG9yLCB5b3UgY2FuIHNlZSByZWFsIHdvcmxkIGltcHJvdmVtZW50cyBvZiB1cCB0byB0aHJlZSB0aW1lcyBpbiBub3JtYWwKK2NvZGUhCisKK1RvIHVzZToKKy09LT0tPS0KK0Ryb3AgaW4gbmVkbWFsbG9jLmgsIG5lZG1hbGxvYy5jIGFuZCBtYWxsb2MuYy5oIGludG8geW91ciBwcm9qZWN0LgorQ29uZmlndXJlIHVzaW5nIHRoZSBpbnN0cnVjdGlvbnMgaW4gbmVkbWFsbG9jLmguIFJ1biBhbmQgZW5qb3kuCisKK1RvIHRlc3QsIGNvbXBpbGUgdGVzdC5jLiBJdCB3aWxsIHJ1biBhIGNvbXBhcmlzb24gYmV0d2VlbiB5b3VyIHN5c3RlbQorYWxsb2NhdG9yIGFuZCBuZWRhbGxvYyBhbmQgdGVsbCB5b3UgaG93IG11Y2ggZmFzdGVyIG5lZGFsbG9jIGlzLiBJdCBhbHNvCitzZXJ2ZXMgYXMgYW4gZXhhbXBsZSBvZiB1c2FnZS4KKworTm90ZXM6CistPS09LT0KK0lmIHlvdSB3YW50IHRoZSB2ZXJ5IGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgYWxsb2NhdG9yLCBnZXQgaXQgZnJvbSB0aGUKK1RuRk9YIFNWTiByZXBvc2l0b3J5IGF0IHN2bjovL3N2bi5iZXJsaW9zLmRlL3ZpZXdjdnMvdG5mb3gvdHJ1bmsvc3JjL25lZG1hbGxvYworCitCZWNhdXNlIG9mIGhvdyBuZWRhbGxvYyBhbGxvY2F0ZXMgYW4gbXNwYWNlIHBlciB0aHJlYWQsIGl0IGNhbiBjYXVzZQorc2V2ZXJlIGJsb2F0aW5nIG9mIG1lbW9yeSB1c2FnZSB1bmRlciBjZXJ0YWluIGFsbG9jYXRpb24gcGF0dGVybnMuCitZb3UgY2FuIHN1YnN0YW50aWFsbHkgcmVkdWNlIHRoaXMgd2FzdGFnZSBieSBzZXR0aW5nIE1BWFRIUkVBRFNJTlBPT0wKK29yIHRoZSB0aHJlYWRzIHBhcmFtZXRlciB0byBuZWRjcmVhdGVwb29sKCkgdG8gYSBmcmFjdGlvbiBvZiB0aGUgbnVtYmVyIG9mCit0aHJlYWRzIHdoaWNoIHdvdWxkIG5vcm1hbGx5IGJlIGluIGEgcG9vbCBhdCBvbmNlLiBUaGlzIHdpbGwgcmVkdWNlCitibG9hdGluZyBhdCB0aGUgY29zdCBvZiBhbiBpbmNyZWFzZSBpbiBsb2NrIGNvbnRlbnRpb24uIElmIGFsbG9jYXRlZCBzaXplCitpcyBsZXNzIHRoYW4gVEhSRUFEQ0FDSEVNQVgsIGxvY2tpbmcgaXMgYXZvaWRlZCA5MC05OSUgb2YgdGhlIHRpbWUgYW5kCitpZiBtb3N0IG9mIHlvdXIgYWxsb2NhdGlvbnMgYXJlIGJlbG93IHRoaXMgdmFsdWUsIHlvdSBjYW4gc2FmZWx5IHNldAorTUFYVEhSRUFEU0lOUE9PTCB0byBvbmUuCisKK1lvdSB3aWxsIHN1ZmZlciBtZW1vcnkgbGVha2FnZSB1bmxlc3MgeW91IGNhbGwgbmVkZGlzYWJsZXRocmVhZGNhY2hlKCkKK3BlciBwb29sIGZvciBldmVyeSB0aHJlYWQgd2hpY2ggZXhpdHMuIFRoaXMgaXMgYmVjYXVzZSBuZWRhbGxvYyBjYW5ub3QKK3BvcnRhYmx5IGtub3cgd2hlbiBhIHRocmVhZCBleGl0cyBhbmQgdGh1cyB3aGVuIGl0cyB0aHJlYWQgY2FjaGUgY2FuCitiZSByZXR1cm5lZCBmb3IgdXNlIGJ5IG90aGVyIGNvZGUuIERvbid0IGZvcmdldCBwb29sIHplcm8sIHRoZSBzeXN0ZW0gcG9vbC4KKworRm9yIEMrKyB0eXBlIGFsbG9jYXRpb24gcGF0dGVybnMgKHdoZXJlIHRoZSBzYW1lIHNpemVzIG9mIG1lbW9yeSBhcmUKK3JlZ3VsYXJseSBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkIGFzIG9iamVjdHMgYXJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCksCit0aGUgdGhyZWFkY2FjaGUgYWx3YXlzIGJlbmVmaXRzIHBlcmZvcm1hbmNlLiBJZiBob3dldmVyIHlvdXIgYWxsb2NhdGlvbgorcGF0dGVybnMgYXJlIGRpZmZlcmVudCwgc2VhcmNoaW5nIHRoZSB0aHJlYWRjYWNoZSBtYXkgc2lnbmlmaWNhbnRseSBzbG93Citkb3duIHlvdXIgY29kZSAtIGFzIGEgcnVsZSBvZiB0aHVtYiwgaWYgY2FjaGUgdXRpbGlzYXRpb24gaXMgYmVsb3cgODAlCisoc2VlIHRoZSBzb3VyY2UgZm9yIG5lZGRpc2FibGV0aHJlYWRjYWNoZSgpIGZvciBob3cgdG8gZW5hYmxlIGRlYnVnCitwcmludGluZyBpbiByZWxlYXNlIG1vZGUpIHRoZW4geW91IHNob3VsZCBkaXNhYmxlIHRoZSB0aHJlYWQgY2FjaGUgZm9yCit0aGF0IHRocmVhZC4gWW91IGNhbiBjb21waWxlIG91dCB0aGUgdGhyZWFkY2FjaGUgY29kZSBieSBzZXR0aW5nCitUSFJFQURDQUNIRU1BWCB0byB6ZXJvLgorCitTcGVlZCBjb21wYXJpc29uczoKKy09LT0tPS09LT0tPS09LT0tPQorU2VlIEJlbmNobWFya3MueGxzIGZvciBkZXRhaWxzLgorCitUaGUgZW5jbG9zZWQgdGVzdC5jIGNhbiBkbyB0d28gdGhpbmdzOiBpdCBjYW4gYmUgYSB0b3J0dXJlIHRlc3Qgb3IgYSBzcGVlZAordGVzdC4gVGhlIHNwZWVkIHRlc3QgaXMgZGVzaWduZWQgdG8gYmUgYSByZXByZXNlbnRhdGl2ZSBzeW50aGV0aWMKK21lbW9yeSBhbGxvY2F0b3IgdGVzdC4gSXQgd29ya3MgYnkgcmFuZG9tbHkgbWl4aW5nIGFsbG9jYXRpb25zIHdpdGggZnJlZXMKK3dpdGggaGFsZiBvZiB0aGUgYWxsb2NhdGlvbiBzaXplcyBiZWluZyBhIHR3byBwb3dlciBtdWx0aXBsZSBsZXNzIHRoYW4KKzUxMiBieXRlcyAodG8gbWltaWMgQysrIHN0YWNrIGluc3RhbnRpYXRlZCBvYmplY3RzKSBhbmQgdGhlIG90aGVyIGhhbGYKK2JlaW5nIGEgc2ltcGxlIHJhbmRvbSB2YWx1ZSBsZXNzIHRoYW4gMTZLYi4KKworVGhlIHJlYWwgd29ybGQgY29kZSByZXN1bHRzIGFyZSBmcm9tIFRuJ3MgVGVzdElPIGJlbmNobWFyay4gVGhpcyBpcyBhCitoZWF2aWx5IG11bHRpdGhyZWFkZWQgYW5kIG1lbW9yeSBpbnRlbnNpdmUgYmVuY2htYXJrIHdpdGggYSBsb3Qgb2YgYnJhbmNoaW5nCithbmQgb3RoZXIgc3R1ZmYgbW9kZXJuIHByb2Nlc3NvcnMgZG9uJ3QgbGlrZSBzbyBtdWNoLiBBcyB5b3UnbGwgbm90ZSwgdGhlCit0ZXN0IGRvZXNuJ3Qgc2hvdyB0aGUgYmVuZWZpdHMgb2YgdGhlIHRocmVhZGNhY2hlIG1vc3RseSBkdWUgdG8gdGhlIHNhdHVyYXRpb24KK29mIHRoZSBtZW1vcnkgYnVzIGJlaW5nIHRoZSBsaW1pdGluZyBmYWN0b3IuCisKK0NoYW5nZUxvZzoKKy09LT0tPS09LT0KK3YxLjA1IDE1dGggSnVuZSAyMDA4OgorICogeyAxMDQyIH0gQWRkZWQgZXJyb3IgY2hlY2sgZm9yIFRMU1NFVCgpIGFuZCBUTFNGUkVFKCkgbWFjcm9zLiBUaGFua3MgdG8KK01hcmt1cyBFbGZyaW5nIGZvciByZXBvcnRpbmcgdGhpcy4KKyAqIHsgMTA0MyB9IEZpeGVkIGEgc2VnZmF1bHQgd2hlbiBmcmVlaW5nIG1lbW9yeSBhbGxvY2F0ZWQgdXNpbmcKK25lZGluZGVwZW5kZW50X2NvbWFsbG9jKCkuIFRoYW5rcyB0byBQYXZlbCBWb3plbmlsZWsgZm9yIHJlcG9ydGluZyB0aGlzLgorCit2MS4wNCAxNHRoIEp1bHkgMjAwNzoKKyAqIEZpeGVkIGEgYnVnIHdpdGggdGhlIG5ldyBvcHRpbWlzZWQgaW1wbGVtZW50YXRpb24gdGhhdCBmYWlsZWQgdG8gbG9jaworb24gYSByZWFsbG9jIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAqIEZpeGVkIGxhY2sgb2YgdGhyZWFkIHN5bmNocm9uaXNhdGlvbiBpbiBJbml0UG9vbCgpIGNhdXNpbmcgcG9vbCBjb3JydXB0aW9uCisgKiBGaXhlZCBhIG1lbW9yeSBsZWFrIG9mIHRocmVhZCBjYWNoZSBjb250ZW50cyBvbiBkaXNhYmxpbmcuIFRoYW5rcyB0byBFYXJsCitDaGV3IGZvciByZXBvcnRpbmcgdGhpcy4KKyAqIEFkZGVkIGEgc2FuaXR5IGNoZWNrIGZvciBmcmVlZCBibG9ja3MgYmVpbmcgdmFsaWQuCisgKiBSZXdvcmtlZCB0ZXN0LmMgaW50byBiZWluZyBhIHRvcnR1cmUgdGVzdC4KKyAqIEZpeGVkIEdDQyBhc3NlbWJsZXIgb3B0aW1pc2F0aW9uIG1pc3NwZWNpZmljYXRpb24KKwordjEuMDRhbHBoYV9zdm45MTUgN3RoIE9jdG9iZXIgMjAwNjoKKyAqIEZpeGVkIGZhaWx1cmUgdG8gdW5sb2NrIHRocmVhZCBjYWNoZSBsaXN0IGlmIGFsbG9jYXRpbmcgYSBuZXcgbGlzdCBmYWlsZWQuCitUaGFua3MgdG8gRG1pdHJ5IENoaWNoa292IGZvciByZXBvcnRpbmcgdGhpcy4gRnVydGhlciB0aGFua3MgdG8gQWxla3NleSBTYW5pbi4KKyAqIEZpeGVkIHJlYWxsb2MoMCwgPHNpemU+KSBzZWdmYXVsdGluZy4gVGhhbmtzIHRvIERtaXRyeSBDaGljaGtvdiBmb3IKK3JlcG9ydGluZyB0aGlzLgorICogTWFkZSBjb25maWcgZGVmaW5lcyAjaWZuZGVmIHNvIHRoZXkgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGJ1aWxkIHN5c3RlbS4KK1RoYW5rcyB0byBBbGVrc2V5IFNhbmluIGZvciBzdWdnZXN0aW5nIHRoaXMuCisgKiBGaXhlZCBkZWFkbG9jayBpbiBuZWRwcmVhbGxvYygpIGR1ZSB0byB1bm5lY2Vzc2FyeSBsb2NraW5nIG9mIHByZWZlcnJlZAordGhyZWFkIG1zcGFjZSB3aGVuIG1zcGFjZV9yZWFsbG9jKCkgYWx3YXlzIHVzZXMgdGhlIG9yaWdpbmFsIGJsb2NrJ3MgbXNwYWNlCithbnl3YXkuIFRoYW5rcyB0byBBbGVrc2V5IFNhbmluIGZvciByZXBvcnRpbmcgdGhpcy4KKyAqIE1hZGUgc29tZSBzcGVlZCBpbXByb3ZlbWVudHMgYnkgaGFja2luZyBtc3BhY2VfbWFsbG9jKCkgdG8gbm8gbG9uZ2VyIGxvY2sKK2l0cyBtc3BhY2UsIHRodXMgYWxsb3dpbmcgdGhlIHJlY3Vyc2l2ZSBtdXRleCBpbXBsZW1lbnRhdGlvbiB0byBiZSByZW1vdmVkCit3aXRoIGFuIGFzc29jaWF0ZWQgc3BlZWQgaW5jcmVhc2UuIFRoYW5rcyB0byBBbGVrc2V5IFNhbmluIGZvciBzdWdnZXN0aW5nIHRoaXMuCisgKiBGaXhlZCBhIGJ1ZyB3aGVyZSBhbGxvY2F0aW5nIG1zcGFjZXMgb3ZlcnJhbiBpdHMgbWF4IGxpbWl0LiBUaGFua3MgdG8KK0FsZWtzZXkgU2FuaW4gZm9yIHJlcG9ydGluZyB0aGlzLgorCit2MS4wMyAxMHRoIEp1bHkgMjAwNjoKKyAqIEZpeGVkIG1lbW9yeSBjb3JydXB0aW9uIGJ1ZyBpbiB0aHJlYWRjYWNoZSBjb2RlIHdoaWNoIG9ubHkgYXBwZWFyZWQgd2l0aCA+NAordGhyZWFkcyBhbmQgaW4gaGVhdnkgdXNlIG9mIHRoZSB0aHJlYWRjYWNoZS4KKwordjEuMDIgMTV0aCBNYXkgMjAwNjoKKyAqIEludGVncmF0ZWQgZGxtYWxsb2MgdjIuOC40LCBmaXhpbmcgdGhlIHdpbjMyIG1lbW9yeSByZWxlYXNlIHByb2JsZW0gYW5kCitpbXByb3ZpbmcgcGVyZm9ybWFuY2Ugc3RpbGwgZnVydGhlci4gU3BlZWQgaXMgbm93IHVwIHRvIHR3aWNlIHRoZSBzcGVlZCBvZiB2MS4wMQorKGF2ZXJhZ2UgaXMgNjclIGZhc3RlcikuCisgKiBGaXhlZCB3aW4zMiBjcml0aWNhbCBzZWN0aW9uIGltcGxlbWVudGF0aW9uLiBUaGFua3MgdG8gUGF2ZWwgS3V6bmV0c292Citmb3IgcmVwb3J0aW5nIHRoaXMuCisgKiBXYXNuJ3QgbG9ja2luZyBtc3BhY2UgaWYgYWxsIG1zcGFjZXMgd2VyZSBsb2NrZWQuIFRoYW5rcyB0byBQYXZlbCBLdXpuZXRzb3YKK2ZvciByZXBvcnRpbmcgdGhpcy4KKyAqIEFkZGVkIEFwcGxlIE1hYyBPUyBYIHN1cHBvcnQuCisKK3YxLjAxIDI0dGggRmVicnVhcnkgMjAwNjoKKyAqIEZpeGVkIG11bHRpcHJvY2Vzc29yIHNjYWxpbmcgcHJvYmxlbXMgYnkgcmVtb3Zpbmcgc291cmNlcyBvZiBjYWNoZSBzbG9zaGluZworICogRWFybCBDaGV3IDxlYXJsX2NoZXcgPGF0PiBhZ2lsZW50IDxkb3Q+IGNvbT4gc2VudCBwYXRjaGVzIGZvciB0aGUgZm9sbG93aW5nOgorICAgMS4gc2l6ZTJiaW5pZHgoKSB3YXNuJ3Qgd29ya2luZyBmb3IgZGVmYXVsdCBjb2RlIHBhdGggKG5vbiB4ODYpCisgICAyLiBGaXhlZCBmYWlsdXJlIHRvIHJlbGVhc2UgbXNwYWNlIGxvY2sgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzIHdoaWNoCisgICAgICBjYXVzZWQgYSBkZWFkbG9jaworCit2MS4wMCAxc3QgSmFudWFyeSAyMDA2OgorICogRmlyc3QgcmVsZWFzZQpkaWZmIC0tZ2l0IGEvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oIGIvY29tcGF0L25lZG1hbGxvYy9tYWxsb2MuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTZhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbmVkbWFsbG9jL21hbGxvYy5jLmgKQEAgLTAsMCArMSw1NzU2IEBACisvKgorICBUaGlzIGlzIGEgdmVyc2lvbiAoYWthIGRsbWFsbG9jKSBvZiBtYWxsb2MvZnJlZS9yZWFsbG9jIHdyaXR0ZW4gYnkKKyAgRG91ZyBMZWEgYW5kIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCBhcyBleHBsYWluZWQgYXQKKyAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvcHVibGljZG9tYWluLiAgU2VuZCBxdWVzdGlvbnMsCisgIGNvbW1lbnRzLCBjb21wbGFpbnRzLCBwZXJmb3JtYW5jZSBkYXRhLCBldGMgdG8gZGxAY3Mub3N3ZWdvLmVkdQorCisqIFZlcnNpb24gcHJlLTIuOC40IE1vbiBOb3YgMjcgMTE6MjI6MzcgMjAwNiAgICAoZGwgYXQgZ2VlKQorCisgICBOb3RlOiBUaGVyZSBtYXkgYmUgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jIG9idGFpbmFibGUgYXQKKwkgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MuYworCSBDaGVjayBiZWZvcmUgaW5zdGFsbGluZyEKKworKiBRdWlja3N0YXJ0CisKKyAgVGhpcyBsaWJyYXJ5IGlzIGFsbCBpbiBvbmUgZmlsZSB0byBzaW1wbGlmeSB0aGUgbW9zdCBjb21tb24gdXNhZ2U6CisgIGZ0cCBpdCwgY29tcGlsZSBpdCAoLU8zKSwgYW5kIGxpbmsgaXQgaW50byBhbm90aGVyIHByb2dyYW0uIEFsbCBvZgorICB0aGUgY29tcGlsZS10aW1lIG9wdGlvbnMgZGVmYXVsdCB0byByZWFzb25hYmxlIHZhbHVlcyBmb3IgdXNlIG9uCisgIG1vc3QgcGxhdGZvcm1zLiAgWW91IG1pZ2h0IGxhdGVyIHdhbnQgdG8gc3RlcCB0aHJvdWdoIHZhcmlvdXMKKyAgY29tcGlsZS10aW1lIGFuZCBkeW5hbWljIHR1bmluZyBvcHRpb25zLgorCisgIEZvciBjb252ZW5pZW5jZSwgYW4gaW5jbHVkZSBmaWxlIGZvciBjb2RlIHVzaW5nIHRoaXMgbWFsbG9jIGlzIGF0OgorICAgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MtMi44LjQuaAorICBZb3UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyAuaCBmaWxlIHVubGVzcyB5b3UgY2FsbCBmdW5jdGlvbnMgbm90CisgIGRlZmluZWQgaW4geW91ciBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4gIFRoZSAuaCBmaWxlIGNvbnRhaW5zIG9ubHkgdGhlCisgIGV4Y2VycHRzIGZyb20gdGhpcyBmaWxlIG5lZWRlZCBmb3IgdXNpbmcgdGhpcyBtYWxsb2Mgb24gQU5TSSBDL0MrKworICBzeXN0ZW1zLCBzbyBsb25nIGFzIHlvdSBoYXZlbid0IGNoYW5nZWQgY29tcGlsZS10aW1lIG9wdGlvbnMgYWJvdXQKKyAgbmFtaW5nIGFuZCB0dW5pbmcgcGFyYW1ldGVycy4gIElmIHlvdSBkbywgdGhlbiB5b3UgY2FuIGNyZWF0ZSB5b3VyCisgIG93biBtYWxsb2MuaCB0aGF0IGRvZXMgaW5jbHVkZSBhbGwgc2V0dGluZ3MgYnkgY3V0dGluZyBhdCB0aGUgcG9pbnQKKyAgaW5kaWNhdGVkIGJlbG93LiBOb3RlIHRoYXQgeW91IG1heSBhbHJlYWR5IGJ5IGRlZmF1bHQgYmUgdXNpbmcgYSBDCisgIGxpYnJhcnkgY29udGFpbmluZyBhIG1hbGxvYyB0aGF0IGlzIGJhc2VkIG9uIHNvbWUgdmVyc2lvbiBvZiB0aGlzCisgIG1hbGxvYyAoZm9yIGV4YW1wbGUgaW4gbGludXgpLiBZb3UgbWlnaHQgc3RpbGwgd2FudCB0byB1c2UgdGhlIG9uZQorICBpbiB0aGlzIGZpbGUgdG8gY3VzdG9taXplIHNldHRpbmdzIG9yIHRvIGF2b2lkIG92ZXJoZWFkcyBhc3NvY2lhdGVkCisgIHdpdGggbGlicmFyeSB2ZXJzaW9ucy4KKworKiBWaXRhbCBzdGF0aXN0aWNzOgorCisgIFN1cHBvcnRlZCBwb2ludGVyL3NpemVfdCByZXByZXNlbnRhdGlvbjogICAgICAgNCBvciA4IGJ5dGVzCisgICAgICAgc2l6ZV90IE1VU1QgYmUgYW4gdW5zaWduZWQgdHlwZSBvZiB0aGUgc2FtZSB3aWR0aCBhcworICAgICAgIHBvaW50ZXJzLiAoSWYgeW91IGFyZSB1c2luZyBhbiBhbmNpZW50IHN5c3RlbSB0aGF0IGRlY2xhcmVzCisgICAgICAgc2l6ZV90IGFzIGEgc2lnbmVkIHR5cGUsIG9yIG5lZWQgaXQgdG8gYmUgYSBkaWZmZXJlbnQgd2lkdGgKKyAgICAgICB0aGFuIHBvaW50ZXJzLCB5b3UgY2FuIHVzZSBhIHByZXZpb3VzIHJlbGVhc2Ugb2YgdGhpcyBtYWxsb2MKKyAgICAgICAoZS5nLiAyLjcuMikgc3VwcG9ydGluZyB0aGVzZS4pCisKKyAgQWxpZ25tZW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4IGJ5dGVzIChkZWZhdWx0KQorICAgICAgIFRoaXMgc3VmZmljZXMgZm9yIG5lYXJseSBhbGwgY3VycmVudCBtYWNoaW5lcyBhbmQgQyBjb21waWxlcnMuCisgICAgICAgSG93ZXZlciwgeW91IGNhbiBkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCB0byBiZSB3aWRlciB0aGFuIHRoaXMKKyAgICAgICBpZiBuZWNlc3NhcnkgKHVwIHRvIDEyOGJ5dGVzKSwgYXQgdGhlIGV4cGVuc2Ugb2YgdXNpbmcgbW9yZSBzcGFjZS4KKworICBNaW5pbXVtIG92ZXJoZWFkIHBlciBhbGxvY2F0ZWQgY2h1bms6ICAgNCBvciAgOCBieXRlcyAoaWYgNGJ5dGUgc2l6ZXMpCisJCQkJCSAgOCBvciAxNiBieXRlcyAoaWYgOGJ5dGUgc2l6ZXMpCisgICAgICAgRWFjaCBtYWxsb2NlZCBjaHVuayBoYXMgYSBoaWRkZW4gd29yZCBvZiBvdmVyaGVhZCBob2xkaW5nIHNpemUKKyAgICAgICBhbmQgc3RhdHVzIGluZm9ybWF0aW9uLCBhbmQgYWRkaXRpb25hbCBjcm9zcy1jaGVjayB3b3JkCisgICAgICAgaWYgRk9PVEVSUyBpcyBkZWZpbmVkLgorCisgIE1pbmltdW0gYWxsb2NhdGVkIHNpemU6IDQtYnl0ZSBwdHJzOiAgMTYgYnl0ZXMgICAgKGluY2x1ZGluZyBvdmVyaGVhZCkKKwkJCSAgOC1ieXRlIHB0cnM6ICAzMiBieXRlcyAgICAoaW5jbHVkaW5nIG92ZXJoZWFkKQorCisgICAgICAgRXZlbiBhIHJlcXVlc3QgZm9yIHplcm8gYnl0ZXMgKGkuZS4sIG1hbGxvYygwKSkgcmV0dXJucyBhCisgICAgICAgcG9pbnRlciB0byBzb21ldGhpbmcgb2YgdGhlIG1pbmltdW0gYWxsb2NhdGFibGUgc2l6ZS4KKyAgICAgICBUaGUgbWF4aW11bSBvdmVyaGVhZCB3YXN0YWdlIChpLmUuLCBudW1iZXIgb2YgZXh0cmEgYnl0ZXMKKyAgICAgICBhbGxvY2F0ZWQgdGhhbiB3ZXJlIHJlcXVlc3RlZCBpbiBtYWxsb2MpIGlzIGxlc3MgdGhhbiBvciBlcXVhbAorICAgICAgIHRvIHRoZSBtaW5pbXVtIHNpemUsIGV4Y2VwdCBmb3IgcmVxdWVzdHMgPj0gbW1hcF90aHJlc2hvbGQgdGhhdAorICAgICAgIGFyZSBzZXJ2aWNlZCB2aWEgbW1hcCgpLCB3aGVyZSB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGlzIGFib3V0CisgICAgICAgMzIgYnl0ZXMgcGx1cyB0aGUgcmVtYWluZGVyIGZyb20gYSBzeXN0ZW0gcGFnZSAodGhlIG1pbmltYWwKKyAgICAgICBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBvciA4MTkyIGJ5dGVzLgorCisgIFNlY3VyaXR5OiBzdGF0aWMtc2FmZTsgb3B0aW9uYWxseSBtb3JlIG9yIGxlc3MKKyAgICAgICBUaGUgInNlY3VyaXR5IiBvZiBtYWxsb2MgcmVmZXJzIHRvIHRoZSBhYmlsaXR5IG9mIG1hbGljaW91cworICAgICAgIGNvZGUgdG8gYWNjZW50dWF0ZSB0aGUgZWZmZWN0cyBvZiBlcnJvcnMgKGZvciBleGFtcGxlLCBmcmVlaW5nCisgICAgICAgc3BhY2UgdGhhdCBpcyBub3QgY3VycmVudGx5IG1hbGxvYydlZCBvciBvdmVyd3JpdGluZyBwYXN0IHRoZQorICAgICAgIGVuZHMgb2YgY2h1bmtzKSBpbiBjb2RlIHRoYXQgY2FsbHMgbWFsbG9jLiAgVGhpcyBtYWxsb2MKKyAgICAgICBndWFyYW50ZWVzIG5vdCB0byBtb2RpZnkgYW55IG1lbW9yeSBsb2NhdGlvbnMgYmVsb3cgdGhlIGJhc2Ugb2YKKyAgICAgICBoZWFwLCBpLmUuLCBzdGF0aWMgdmFyaWFibGVzLCBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB1c2FnZQorICAgICAgIGVycm9ycy4gIFRoZSByb3V0aW5lcyBhZGRpdGlvbmFsbHkgZGV0ZWN0IG1vc3QgaW1wcm9wZXIgZnJlZXMKKyAgICAgICBhbmQgcmVhbGxvY3MuICBBbGwgdGhpcyBob2xkcyBhcyBsb25nIGFzIHRoZSBzdGF0aWMgYm9va2tlZXBpbmcKKyAgICAgICBmb3IgbWFsbG9jIGl0c2VsZiBpcyBub3QgY29ycnVwdGVkIGJ5IHNvbWUgb3RoZXIgbWVhbnMuICBUaGlzCisgICAgICAgaXMgb25seSBvbmUgYXNwZWN0IG9mIHNlY3VyaXR5IC0tIHRoZXNlIGNoZWNrcyBkbyBub3QsIGFuZAorICAgICAgIGNhbm5vdCwgZGV0ZWN0IGFsbCBwb3NzaWJsZSBwcm9ncmFtbWluZyBlcnJvcnMuCisKKyAgICAgICBJZiBGT09URVJTIGlzIGRlZmluZWQgbm9uemVybywgdGhlbiBlYWNoIGFsbG9jYXRlZCBjaHVuaworICAgICAgIGNhcnJpZXMgYW4gYWRkaXRpb25hbCBjaGVjayB3b3JkIHRvIHZlcmlmeSB0aGF0IGl0IHdhcyBtYWxsb2NlZAorICAgICAgIGZyb20gaXRzIHNwYWNlLiAgVGhlc2UgY2hlY2sgd29yZHMgYXJlIHRoZSBzYW1lIHdpdGhpbiBlYWNoCisgICAgICAgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbSB1c2luZyBtYWxsb2MsIGJ1dCBkaWZmZXIgYWNyb3NzCisgICAgICAgZXhlY3V0aW9ucywgc28gZXh0ZXJuYWxseSBjcmFmdGVkIGZha2UgY2h1bmtzIGNhbm5vdCBiZQorICAgICAgIGZyZWVkLiBUaGlzIGltcHJvdmVzIHNlY3VyaXR5IGJ5IHJlamVjdGluZyBmcmVlcy9yZWFsbG9jcyB0aGF0CisgICAgICAgY291bGQgY29ycnVwdCBoZWFwIG1lbW9yeSwgaW4gYWRkaXRpb24gdG8gdGhlIGNoZWNrcyBwcmV2ZW50aW5nCisgICAgICAgd3JpdGVzIHRvIHN0YXRpY3MgdGhhdCBhcmUgYWx3YXlzIG9uLiAgVGhpcyBtYXkgZnVydGhlciBpbXByb3ZlCisgICAgICAgc2VjdXJpdHkgYXQgdGhlIGV4cGVuc2Ugb2YgdGltZSBhbmQgc3BhY2Ugb3ZlcmhlYWQuICAoTm90ZSB0aGF0CisgICAgICAgRk9PVEVSUyBtYXkgYWxzbyBiZSB3b3J0aCB1c2luZyB3aXRoIE1TUEFDRVMuKQorCisgICAgICAgQnkgZGVmYXVsdCBkZXRlY3RlZCBlcnJvcnMgY2F1c2UgdGhlIHByb2dyYW0gdG8gYWJvcnQgKGNhbGxpbmcKKyAgICAgICAiYWJvcnQoKSIpLiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgdG8gaW5zdGVhZCBwcm9jZWVkIHBhc3QKKyAgICAgICBlcnJvcnMgYnkgZGVmaW5pbmcgUFJPQ0VFRF9PTl9FUlJPUi4gIEluIHRoaXMgY2FzZSwgYSBiYWQgZnJlZQorICAgICAgIGhhcyBubyBlZmZlY3QsIGFuZCBhIG1hbGxvYyB0aGF0IGVuY291bnRlcnMgYSBiYWQgYWRkcmVzcworICAgICAgIGNhdXNlZCBieSB1c2VyIG92ZXJ3cml0ZXMgd2lsbCBpZ25vcmUgdGhlIGJhZCBhZGRyZXNzIGJ5CisgICAgICAgZHJvcHBpbmcgcG9pbnRlcnMgYW5kIGluZGljZXMgdG8gYWxsIGtub3duIG1lbW9yeS4gVGhpcyBtYXkKKyAgICAgICBiZSBhcHByb3ByaWF0ZSBmb3IgcHJvZ3JhbXMgdGhhdCBzaG91bGQgY29udGludWUgaWYgYXQgYWxsCisgICAgICAgcG9zc2libGUgaW4gdGhlIGZhY2Ugb2YgcHJvZ3JhbW1pbmcgZXJyb3JzLCBhbHRob3VnaCB0aGV5IG1heQorICAgICAgIHJ1biBvdXQgb2YgbWVtb3J5IGJlY2F1c2UgZHJvcHBlZCBtZW1vcnkgaXMgbmV2ZXIgcmVjbGFpbWVkLgorCisgICAgICAgSWYgeW91IGRvbid0IGxpa2UgZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMsIHlvdSBjYW4gZGVmaW5lCisgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gYW5kIFVTQUdFX0VSUk9SX0FDVElPTiB0byBkbyBhbnl0aGluZworICAgICAgIGVsc2UuIEFuZCBpZiB5b3UgYXJlIHN1cmUgdGhhdCB5b3VyIHByb2dyYW0gdXNpbmcgbWFsbG9jIGhhcworICAgICAgIG5vIGVycm9ycyBvciB2dWxuZXJhYmlsaXRpZXMsIHlvdSBjYW4gZGVmaW5lIElOU0VDVVJFIHRvIDEsCisgICAgICAgd2hpY2ggbWlnaHQgKG9yIG1pZ2h0IG5vdCkgcHJvdmlkZSBhIHNtYWxsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorCisgIFRocmVhZC1zYWZldHk6IE5PVCB0aHJlYWQtc2FmZSB1bmxlc3MgVVNFX0xPQ0tTIGRlZmluZWQKKyAgICAgICBXaGVuIFVTRV9MT0NLUyBpcyBkZWZpbmVkLCBlYWNoIHB1YmxpYyBjYWxsIHRvIG1hbGxvYywgZnJlZSwKKyAgICAgICBldGMgaXMgc3Vycm91bmRlZCB3aXRoIGVpdGhlciBhIHB0aHJlYWQgbXV0ZXggb3IgYSB3aW4zMgorICAgICAgIHNwaW5sb2NrIChkZXBlbmRpbmcgb24gV0lOMzIpLiBUaGlzIGlzIG5vdCBlc3BlY2lhbGx5IGZhc3QsIGFuZAorICAgICAgIGNhbiBiZSBhIG1ham9yIGJvdHRsZW5lY2suICBJdCBpcyBkZXNpZ25lZCBvbmx5IHRvIHByb3ZpZGUKKyAgICAgICBtaW5pbWFsIHByb3RlY3Rpb24gaW4gY29uY3VycmVudCBlbnZpcm9ubWVudHMsIGFuZCB0byBwcm92aWRlIGEKKyAgICAgICBiYXNpcyBmb3IgZXh0ZW5zaW9ucy4gIElmIHlvdSBhcmUgdXNpbmcgbWFsbG9jIGluIGEgY29uY3VycmVudAorICAgICAgIHByb2dyYW0sIGNvbnNpZGVyIGluc3RlYWQgdXNpbmcgbmVkbWFsbG9jCisgICAgICAgKGh0dHA6Ly93d3cubmVkcHJvZC5jb20vcHJvZ3JhbXMvcG9ydGFibGUvbmVkbWFsbG9jLykgb3IKKyAgICAgICBwdG1hbGxvYyAoU2VlIGh0dHA6Ly93d3cubWFsbG9jLmRlKSwgd2hpY2ggYXJlIGRlcml2ZWQKKyAgICAgICBmcm9tIHZlcnNpb25zIG9mIHRoaXMgbWFsbG9jLgorCisgIFN5c3RlbSByZXF1aXJlbWVudHM6IEFueSBjb21iaW5hdGlvbiBvZiBNT1JFQ09SRSBhbmQvb3IgTU1BUC9NVU5NQVAKKyAgICAgICBUaGlzIG1hbGxvYyBjYW4gdXNlIHVuaXggc2JyayBvciBhbnkgZW11bGF0aW9uIChpbnZva2VkIHVzaW5nCisgICAgICAgdGhlIENBTExfTU9SRUNPUkUgbWFjcm8pIGFuZC9vciBtbWFwL211bm1hcCBvciBhbnkgZW11bGF0aW9uCisgICAgICAgKGludm9rZWQgdXNpbmcgQ0FMTF9NTUFQL0NBTExfTVVOTUFQKSB0byBnZXQgYW5kIHJlbGVhc2Ugc3lzdGVtCisgICAgICAgbWVtb3J5LiAgT24gbW9zdCB1bml4IHN5c3RlbXMsIGl0IHRlbmRzIHRvIHdvcmsgYmVzdCBpZiBib3RoCisgICAgICAgTU9SRUNPUkUgYW5kIE1NQVAgYXJlIGVuYWJsZWQuICBPbiBXaW4zMiwgaXQgdXNlcyBlbXVsYXRpb25zCisgICAgICAgYmFzZWQgb24gVmlydHVhbEFsbG9jLiBJdCBhbHNvIHVzZXMgY29tbW9uIEMgbGlicmFyeSBmdW5jdGlvbnMKKyAgICAgICBsaWtlIG1lbXNldC4KKworICBDb21wbGlhbmNlOiBJIGJlbGlldmUgaXQgaXMgY29tcGxpYW50IHdpdGggdGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24KKyAgICAgICAoU2VlIGh0dHA6Ly93d3cudW5peC5vcmcpLiBBbHNvIFNWSUQvWFBHLCBBTlNJIEMsIGFuZCBwcm9iYWJseQorICAgICAgIG90aGVycyBhcyB3ZWxsLgorCisqIE92ZXJ2aWV3IG9mIGFsZ29yaXRobXMKKworICBUaGlzIGlzIG5vdCB0aGUgZmFzdGVzdCwgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBtb3N0IHBvcnRhYmxlLCBvcgorICBtb3N0IHR1bmFibGUgbWFsbG9jIGV2ZXIgd3JpdHRlbi4gSG93ZXZlciBpdCBpcyBhbW9uZyB0aGUgZmFzdGVzdAorICB3aGlsZSBhbHNvIGJlaW5nIGFtb25nIHRoZSBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIHBvcnRhYmxlIGFuZAorICB0dW5hYmxlLiAgQ29uc2lzdGVudCBiYWxhbmNlIGFjcm9zcyB0aGVzZSBmYWN0b3JzIHJlc3VsdHMgaW4gYSBnb29kCisgIGdlbmVyYWwtcHVycG9zZSBhbGxvY2F0b3IgZm9yIG1hbGxvYy1pbnRlbnNpdmUgcHJvZ3JhbXMuCisKKyAgSW4gbW9zdCB3YXlzLCB0aGlzIG1hbGxvYyBpcyBhIGJlc3QtZml0IGFsbG9jYXRvci4gR2VuZXJhbGx5LCBpdAorICBjaG9vc2VzIHRoZSBiZXN0LWZpdHRpbmcgZXhpc3RpbmcgY2h1bmsgZm9yIGEgcmVxdWVzdCwgd2l0aCB0aWVzCisgIGJyb2tlbiBpbiBhcHByb3hpbWF0ZWx5IGxlYXN0LXJlY2VudGx5LXVzZWQgb3JkZXIuIChUaGlzIHN0cmF0ZWd5CisgIG5vcm1hbGx5IG1haW50YWlucyBsb3cgZnJhZ21lbnRhdGlvbi4pIEhvd2V2ZXIsIGZvciByZXF1ZXN0cyBsZXNzCisgIHRoYW4gMjU2Ynl0ZXMsIGl0IGRldmlhdGVzIGZyb20gYmVzdC1maXQgd2hlbiB0aGVyZSBpcyBub3QgYW4KKyAgZXhhY3RseSBmaXR0aW5nIGF2YWlsYWJsZSBjaHVuayBieSBwcmVmZXJyaW5nIHRvIHVzZSBzcGFjZSBhZGphY2VudAorICB0byB0aGF0IHVzZWQgZm9yIHRoZSBwcmV2aW91cyBzbWFsbCByZXF1ZXN0LCBhcyB3ZWxsIGFzIGJ5IGJyZWFraW5nCisgIHRpZXMgaW4gYXBwcm94aW1hdGVseSBtb3N0LXJlY2VudGx5LXVzZWQgb3JkZXIuIChUaGVzZSBlbmhhbmNlCisgIGxvY2FsaXR5IG9mIHNlcmllcyBvZiBzbWFsbCBhbGxvY2F0aW9ucy4pICBBbmQgZm9yIHZlcnkgbGFyZ2UgcmVxdWVzdHMKKyAgKD49IDI1NktiIGJ5IGRlZmF1bHQpLCBpdCByZWxpZXMgb24gc3lzdGVtIG1lbW9yeSBtYXBwaW5nCisgIGZhY2lsaXRpZXMsIGlmIHN1cHBvcnRlZC4gIChUaGlzIGhlbHBzIGF2b2lkIGNhcnJ5aW5nIGFyb3VuZCBhbmQKKyAgcG9zc2libHkgZnJhZ21lbnRpbmcgbWVtb3J5IHVzZWQgb25seSBmb3IgbGFyZ2UgY2h1bmtzLikKKworICBBbGwgb3BlcmF0aW9ucyAoZXhjZXB0IG1hbGxvY19zdGF0cyBhbmQgbWFsbGluZm8pIGhhdmUgZXhlY3V0aW9uCisgIHRpbWVzIHRoYXQgYXJlIGJvdW5kZWQgYnkgYSBjb25zdGFudCBmYWN0b3Igb2YgdGhlIG51bWJlciBvZiBiaXRzIGluCisgIGEgc2l6ZV90LCBub3QgY291bnRpbmcgYW55IGNsZWFyaW5nIGluIGNhbGxvYyBvciBjb3B5aW5nIGluIHJlYWxsb2MsCisgIG9yIGFjdGlvbnMgc3Vycm91bmRpbmcgTU9SRUNPUkUgYW5kIE1NQVAgdGhhdCBoYXZlIHRpbWVzCisgIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIG5vbi1jb250aWd1b3VzIHJlZ2lvbnMgcmV0dXJuZWQgYnkKKyAgc3lzdGVtIGFsbG9jYXRpb24gcm91dGluZXMsIHdoaWNoIGlzIG9mdGVuIGp1c3QgMS4gSW4gcmVhbC10aW1lCisgIGFwcGxpY2F0aW9ucywgeW91IGNhbiBvcHRpb25hbGx5IHN1cHByZXNzIHNlZ21lbnQgdHJhdmVyc2FscyB1c2luZworICBOT19TRUdNRU5UX1RSQVZFUlNBTCwgd2hpY2ggYXNzdXJlcyBib3VuZGVkIGV4ZWN1dGlvbiBldmVuIHdoZW4KKyAgc3lzdGVtIGFsbG9jYXRvcnMgcmV0dXJuIG5vbi1jb250aWd1b3VzIHNwYWNlcywgYXQgdGhlIHR5cGljYWwKKyAgZXhwZW5zZSBvZiBjYXJyeWluZyBhcm91bmQgbW9yZSBtZW1vcnkgYW5kIGluY3JlYXNlZCBmcmFnbWVudGF0aW9uLgorCisgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdmVyeSBtb2R1bGFyIGFuZCBzZXJpb3VzbHkgb3ZlcnVzZXMKKyAgbWFjcm9zLiBQZXJoYXBzIHNvbWVkYXkgYWxsIEMgY29tcGlsZXJzIHdpbGwgZG8gYXMgZ29vZCBhIGpvYgorICBpbmxpbmluZyBtb2R1bGFyIGNvZGUgYXMgY2FuIG5vdyBiZSBkb25lIGJ5IGJydXRlLWZvcmNlIGV4cGFuc2lvbiwKKyAgYnV0IG5vdywgZW5vdWdoIG9mIHRoZW0gc2VlbSBub3QgdG8uCisKKyAgU29tZSBjb21waWxlcnMgaXNzdWUgYSBsb3Qgb2Ygd2FybmluZ3MgYWJvdXQgY29kZSB0aGF0IGlzCisgIGRlYWQvdW5yZWFjaGFibGUgb25seSBvbiBzb21lIHBsYXRmb3JtcywgYW5kIGFsc28gYWJvdXQgaW50ZW50aW9uYWwKKyAgdXNlcyBvZiBuZWdhdGlvbiBvbiB1bnNpZ25lZCB0eXBlcy4gQWxsIGtub3duIGNhc2VzIG9mIGVhY2ggY2FuIGJlCisgIGlnbm9yZWQuCisKKyAgRm9yIGEgbG9uZ2VyIGJ1dCBvdXQgb2YgZGF0ZSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uLCBzZWUKKyAgICAgaHR0cDovL2dlZS5jcy5vc3dlZ28uZWR1L2RsL2h0bWwvbWFsbG9jLmh0bWwKKworKiBNU1BBQ0VTCisgIElmIE1TUEFDRVMgaXMgZGVmaW5lZCwgdGhlbiBpbiBhZGRpdGlvbiB0byBtYWxsb2MsIGZyZWUsIGV0Yy4sCisgIHRoaXMgZmlsZSBhbHNvIGRlZmluZXMgbXNwYWNlX21hbGxvYywgbXNwYWNlX2ZyZWUsIGV0Yy4gVGhlc2UKKyAgYXJlIHZlcnNpb25zIG9mIG1hbGxvYyByb3V0aW5lcyB0aGF0IHRha2UgYW4gIm1zcGFjZSIgYXJndW1lbnQKKyAgb2J0YWluZWQgdXNpbmcgY3JlYXRlX21zcGFjZSwgdG8gY29udHJvbCBhbGwgaW50ZXJuYWwgYm9va2tlZXBpbmcuCisgIElmIE9OTFlfTVNQQUNFUyBpcyBkZWZpbmVkLCBvbmx5IHRoZXNlIHZlcnNpb25zIGFyZSBjb21waWxlZC4KKyAgU28gaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRoaXMgYWxsb2NhdG9yIGZvciBvbmx5IHNvbWUgYWxsb2NhdGlvbnMsCisgIGFuZCB5b3VyIHN5c3RlbSBtYWxsb2MgZm9yIG90aGVycywgeW91IGNhbiBjb21waWxlIHdpdGgKKyAgT05MWV9NU1BBQ0VTIGFuZCB0aGVuIGRvIHNvbWV0aGluZyBsaWtlLi4uCisgICAgc3RhdGljIG1zcGFjZSBteW1zcGFjZSA9IGNyZWF0ZV9tc3BhY2UoMCwwKTsgLy8gZm9yIGV4YW1wbGUKKyAgICAjZGVmaW5lIG15bWFsbG9jKGJ5dGVzKSAgbXNwYWNlX21hbGxvYyhteW1zcGFjZSwgYnl0ZXMpCisKKyAgKE5vdGU6IElmIHlvdSBvbmx5IG5lZWQgb25lIGluc3RhbmNlIG9mIGFuIG1zcGFjZSwgeW91IGNhbiBpbnN0ZWFkCisgIHVzZSAiVVNFX0RMX1BSRUZJWCIgdG8gcmVsYWJlbCB0aGUgZ2xvYmFsIG1hbGxvYy4pCisKKyAgWW91IGNhbiBzaW1pbGFybHkgY3JlYXRlIHRocmVhZC1sb2NhbCBhbGxvY2F0b3JzIGJ5IHN0b3JpbmcKKyAgbXNwYWNlcyBhcyB0aHJlYWQtbG9jYWxzLiBGb3IgZXhhbXBsZToKKyAgICBzdGF0aWMgX190aHJlYWQgbXNwYWNlIHRsbXMgPSAwOworICAgIHZvaWQqICB0bG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICAgIGlmICh0bG1zID09IDApIHRsbXMgPSBjcmVhdGVfbXNwYWNlKDAsIDApOworICAgICAgcmV0dXJuIG1zcGFjZV9tYWxsb2ModGxtcywgYnl0ZXMpOworICAgIH0KKyAgICB2b2lkICB0bGZyZWUodm9pZCogbWVtKSB7IG1zcGFjZV9mcmVlKHRsbXMsIG1lbSk7IH0KKworICBVbmxlc3MgRk9PVEVSUyBpcyBkZWZpbmVkLCBlYWNoIG1zcGFjZSBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50LgorICBZb3UgY2Fubm90IGFsbG9jYXRlIGZyb20gb25lIGFuZCBmcmVlIHRvIGFub3RoZXIgKGFsdGhvdWdoCisgIGNvbmZvcm1hbmNlIGlzIG9ubHkgd2Vha2x5IGNoZWNrZWQsIHNvIHVzYWdlIGVycm9ycyBhcmUgbm90IGFsd2F5cworICBjYXVnaHQpLiBJZiBGT09URVJTIGlzIGRlZmluZWQsIHRoZW4gZWFjaCBjaHVuayBjYXJyaWVzIGFyb3VuZCBhIHRhZworICBpbmRpY2F0aW5nIGl0cyBvcmlnaW5hdGluZyBtc3BhY2UsIGFuZCBmcmVlcyBhcmUgZGlyZWN0ZWQgdG8gdGhlaXIKKyAgb3JpZ2luYXRpbmcgc3BhY2VzLgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ29tcGlsZS10aW1lIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlIGNhcmVmdWwgaW4gc2V0dGluZyAjZGVmaW5lIHZhbHVlcyBmb3IgbnVtZXJpY2FsIGNvbnN0YW50cyBvZiB0eXBlCitzaXplX3QuIE9uIHNvbWUgc3lzdGVtcywgbGl0ZXJhbCB2YWx1ZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkCit0byBzaXplX3QgcHJlY2lzaW9uIHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5IGNhc3RlZC4gWW91IGNhbiBhbHNvCit1c2UgdGhlIHN5bWJvbGljIHZhbHVlcyBNQVhfU0laRV9ULCBTSVpFX1RfT05FLCBldGMgYmVsb3cuCisKK1dJTjMyICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGlmIF9XSU4zMiBkZWZpbmVkCisgIERlZmluaW5nIFdJTjMyIHNldHMgdXAgZGVmYXVsdHMgZm9yIE1TIGVudmlyb25tZW50IGFuZCBjb21waWxlcnMuCisgIE90aGVyd2lzZSBkZWZhdWx0cyBhcmUgZm9yIHVuaXguIEJld2FyZSB0aGF0IHRoZXJlIHNlZW0gdG8gYmUgc29tZQorICBjYXNlcyB3aGVyZSB0aGlzIG1hbGxvYyBtaWdodCBub3QgYmUgYSBwdXJlIGRyb3AtaW4gcmVwbGFjZW1lbnQgZm9yCisgIFdpbjMyIG1hbGxvYzogUmFuZG9tLWxvb2tpbmcgZmFpbHVyZXMgZnJvbSBXaW4zMiBHREkgQVBJJ3MgKGVnOworICBTZXRESUJpdHMoKSkgbWF5IGJlIGR1ZSB0byBidWdzIGluIHNvbWUgdmlkZW8gZHJpdmVyIGltcGxlbWVudGF0aW9ucworICB3aGVuIHBpeGVsIGJ1ZmZlcnMgYXJlIG1hbGxvYygpZWQsIGFuZCB0aGUgcmVnaW9uIHNwYW5zIG1vcmUgdGhhbgorICBvbmUgVmlydHVhbEFsbG9jKCllZCByZWdpb24uIEJlY2F1c2UgZGxtYWxsb2MgdXNlcyBhIHNtYWxsICg2NEtiKQorICBkZWZhdWx0IGdyYW51bGFyaXR5LCBwaXhlbCBidWZmZXJzIG1heSBzdHJhZGRsZSB2aXJ0dWFsIGFsbG9jYXRpb24KKyAgcmVnaW9ucyBtb3JlIG9mdGVuIHRoYW4gd2hlbiB1c2luZyB0aGUgTWljcm9zb2Z0IGFsbG9jYXRvci4gIFlvdSBjYW4KKyAgYXZvaWQgdGhpcyBieSB1c2luZyBWaXJ0dWFsQWxsb2MoKSBhbmQgVmlydHVhbEZyZWUoKSBmb3IgYWxsIHBpeGVsCisgIGJ1ZmZlcnMgcmF0aGVyIHRoYW4gdXNpbmcgbWFsbG9jKCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwKKyAgcmVjb21waWxlIHRoaXMgbWFsbG9jIHdpdGggYSBsYXJnZXIgREVGQVVMVF9HUkFOVUxBUklUWS4KKworTUFMTE9DX0FMSUdOTUVOVCAgICAgICAgIGRlZmF1bHQ6IChzaXplX3QpOAorICBDb250cm9scyB0aGUgbWluaW11bSBhbGlnbm1lbnQgZm9yIG1hbGxvYydlZCBjaHVua3MuICBJdCBtdXN0IGJlIGEKKyAgcG93ZXIgb2YgdHdvIGFuZCBhdCBsZWFzdCA4LCBldmVuIG9uIG1hY2hpbmVzIGZvciB3aGljaCBzbWFsbGVyCisgIGFsaWdubWVudHMgd291bGQgc3VmZmljZS4gSXQgbWF5IGJlIGRlZmluZWQgYXMgbGFyZ2VyIHRoYW4gdGhpcworICB0aG91Z2guIE5vdGUgaG93ZXZlciB0aGF0IGNvZGUgYW5kIGRhdGEgc3RydWN0dXJlcyBhcmUgb3B0aW1pemVkIGZvcgorICB0aGUgY2FzZSBvZiA4LWJ5dGUgYWxpZ25tZW50LgorCitNU1BBQ0VTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIElmIHRydWUsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnQgYWxsb2NhdGlvbiBzcGFjZXMuCisgIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgaWYgSEFWRV9NTUFQIGlzIHRydWUuCisKK09OTFlfTVNQQUNFUyAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgSWYgdHJ1ZSwgb25seSBjb21waWxlIGluIG1zcGFjZSB2ZXJzaW9ucywgbm90IHJlZ3VsYXIgdmVyc2lvbnMuCisKK1VTRV9MT0NLUyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgQ2F1c2VzIGVhY2ggY2FsbCB0byBlYWNoIHB1YmxpYyByb3V0aW5lIHRvIGJlIHN1cnJvdW5kZWQgd2l0aAorICBwdGhyZWFkIG9yIFdJTjMyIG11dGV4IGxvY2svdW5sb2NrLiAoSWYgc2V0IHRydWUsIHRoaXMgY2FuIGJlCisgIG92ZXJyaWRkZW4gb24gYSBwZXItbXNwYWNlIGJhc2lzIGZvciBtc3BhY2UgdmVyc2lvbnMuKSBJZiBzZXQgdG8gYQorICBub24temVybyB2YWx1ZSBvdGhlciB0aGFuIDEsIGxvY2tzIGFyZSB1c2VkLCBidXQgdGhlaXIKKyAgaW1wbGVtZW50YXRpb24gaXMgbGVmdCBvdXQsIHNvIGxvY2sgZnVuY3Rpb25zIG11c3QgYmUgc3VwcGxpZWQgbWFudWFsbHkuCisKK1VTRV9TUElOX0xPQ0tTICAgICAgICAgICBkZWZhdWx0OiAxIGlmZiBVU0VfTE9DS1MgYW5kIG9uIHg4NiB1c2luZyBnY2Mgb3IgTVNDCisgIElmIHRydWUsIHVzZXMgY3VzdG9tIHNwaW4gbG9ja3MgZm9yIGxvY2tpbmcuIFRoaXMgaXMgY3VycmVudGx5CisgIHN1cHBvcnRlZCBvbmx5IGZvciB4ODYgcGxhdGZvcm1zIHVzaW5nIGdjYyBvciByZWNlbnQgTVMgY29tcGlsZXJzLgorICBPdGhlcndpc2UsIHBvc2l4IGxvY2tzIG9yIHdpbjMyIGNyaXRpY2FsIHNlY3Rpb25zIGFyZSB1c2VkLgorCitGT09URVJTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiB0cnVlLCBwcm92aWRlIGV4dHJhIGNoZWNraW5nIGFuZCBkaXNwYXRjaGluZyBieSBwbGFjaW5nCisgIGluZm9ybWF0aW9uIGluIHRoZSBmb290ZXJzIG9mIGFsbG9jYXRlZCBjaHVua3MuIFRoaXMgYWRkcworICBzcGFjZSBhbmQgdGltZSBvdmVyaGVhZC4KKworSU5TRUNVUkUgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgdHJ1ZSwgb21pdCBjaGVja3MgZm9yIHVzYWdlIGVycm9ycyBhbmQgaGVhcCBzcGFjZSBvdmVyd3JpdGVzLgorCitVU0VfRExfUFJFRklYICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgQ2F1c2VzIGNvbXBpbGVyIHRvIHByZWZpeCBhbGwgcHVibGljIHJvdXRpbmVzIHdpdGggdGhlIHN0cmluZyAnZGwnLgorICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3Ugb25seSB3YW50IHRvIHVzZSB0aGlzIG1hbGxvYyBpbiBvbmUgcGFydAorICBvZiBhIHByb2dyYW0sIHVzaW5nIHlvdXIgcmVndWxhciBzeXN0ZW0gbWFsbG9jIGVsc2V3aGVyZS4KKworQUJPUlQgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgYWJvcnQoKQorICBEZWZpbmVzIGhvdyB0byBhYm9ydCBvbiBmYWlsZWQgY2hlY2tzLiAgT24gbW9zdCBzeXN0ZW1zLCBhIGZhaWxlZAorICBjaGVjayBjYW5ub3QgZGllIHdpdGggYW4gImFzc2VydCIgb3IgZXZlbiBwcmludCBhbiBpbmZvcm1hdGl2ZQorICBtZXNzYWdlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIHByaW50IHJvdXRpbmVzIGluIHR1cm4gY2FsbCBtYWxsb2MsCisgIHdoaWNoIHdpbGwgZmFpbCBhZ2Fpbi4gIEdlbmVyYWxseSwgdGhlIGJlc3QgcG9saWN5IGlzIHRvIHNpbXBseSBjYWxsCisgIGFib3J0KCkuIEl0J3Mgbm90IHZlcnkgdXNlZnVsIHRvIGRvIG1vcmUgdGhhbiB0aGlzIGJlY2F1c2UgbWFueQorICBlcnJvcnMgZHVlIHRvIG92ZXJ3cml0aW5nIHdpbGwgc2hvdyB1cCBhcyBhZGRyZXNzIGZhdWx0cyAobnVsbCwgb2RkCisgIGFkZHJlc3NlcyBldGMpIHJhdGhlciB0aGFuIG1hbGxvYy10cmlnZ2VyZWQgY2hlY2tzLCBzbyB3aWxsIGFsc28KKyAgYWJvcnQuICBBbHNvLCBtb3N0IGNvbXBpbGVycyBrbm93IHRoYXQgYWJvcnQoKSBkb2VzIG5vdCByZXR1cm4sIHNvCisgIGNhbiBiZXR0ZXIgb3B0aW1pemUgY29kZSBjb25kaXRpb25hbGx5IGNhbGxpbmcgaXQuCisKK1BST0NFRURfT05fRVJST1IgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMCAoZmFsc2UpCisgIENvbnRyb2xzIHdoZXRoZXIgZGV0ZWN0ZWQgYmFkIGFkZHJlc3NlcyBjYXVzZSB0aGVtIHRvIGJ5cGFzc2VkCisgIHJhdGhlciB0aGFuIGFib3J0aW5nLiBJZiBzZXQsIGRldGVjdGVkIGJhZCBhcmd1bWVudHMgdG8gZnJlZSBhbmQKKyAgcmVhbGxvYyBhcmUgaWdub3JlZC4gQW5kIGFsbCBib29ra2VlcGluZyBpbmZvcm1hdGlvbiBpcyB6ZXJvZWQgb3V0CisgIHVwb24gYSBkZXRlY3RlZCBvdmVyd3JpdGUgb2YgZnJlZWQgaGVhcCBzcGFjZSwgdGh1cyBsb3NpbmcgdGhlCisgIGFiaWxpdHkgdG8gZXZlciByZXR1cm4gaXQgZnJvbSBtYWxsb2MgYWdhaW4sIGJ1dCBlbmFibGluZyB0aGUKKyAgYXBwbGljYXRpb24gdG8gcHJvY2VlZC4gSWYgUFJPQ0VFRF9PTl9FUlJPUiBpcyBkZWZpbmVkLCB0aGUKKyAgc3RhdGljIHZhcmlhYmxlIG1hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50IGlzIGNvbXBpbGVkIGluCisgIGFuZCBjYW4gYmUgZXhhbWluZWQgdG8gc2VlIGlmIGVycm9ycyBoYXZlIG9jY3VycmVkLiBUaGlzIG9wdGlvbgorICBnZW5lcmF0ZXMgc2xvd2VyIGNvZGUgdGhhbiB0aGUgZGVmYXVsdCBhYm9ydCBwb2xpY3kuCisKK0RFQlVHICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBUaGUgREVCVUcgc2V0dGluZyBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHBlb3BsZSB0cnlpbmcgdG8gbW9kaWZ5CisgIHRoaXMgY29kZSBvciBkaWFnbm9zZSBwcm9ibGVtcyB3aGVuIHBvcnRpbmcgdG8gbmV3IHBsYXRmb3Jtcy4KKyAgSG93ZXZlciwgaXQgbWF5IGFsc28gYmUgYWJsZSB0byBiZXR0ZXIgaXNvbGF0ZSB1c2VyIGVycm9ycyB0aGFuIGp1c3QKKyAgdXNpbmcgcnVudGltZSBjaGVja3MuICBUaGUgYXNzZXJ0aW9ucyBpbiB0aGUgY2hlY2sgcm91dGluZXMgc3BlbGwKKyAgb3V0IGluIG1vcmUgZGV0YWlsIHRoZSBhc3N1bXB0aW9ucyBhbmQgaW52YXJpYW50cyB1bmRlcmx5aW5nIHRoZQorICBhbGdvcml0aG1zLiAgVGhlIGNoZWNraW5nIGlzIGZhaXJseSBleHRlbnNpdmUsIGFuZCB3aWxsIHNsb3cgZG93bgorICBleGVjdXRpb24gbm90aWNlYWJseS4gQ2FsbGluZyBtYWxsb2Nfc3RhdHMgb3IgbWFsbGluZm8gd2l0aCBERUJVRworICBzZXQgd2lsbCBhdHRlbXB0IHRvIGNoZWNrIGV2ZXJ5IG5vbi1tbWFwcGVkIGFsbG9jYXRlZCBhbmQgZnJlZSBjaHVuaworICBpbiB0aGUgY291cnNlIG9mIGNvbXB1dGluZyB0aGUgc3VtbWFyaWVzLgorCitBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMSAodHJ1ZSkKKyAgRGVidWdnaW5nIGFzc2VydGlvbiBmYWlsdXJlcyBjYW4gYmUgbmVhcmx5IGltcG9zc2libGUgaWYgeW91cgorICB2ZXJzaW9uIG9mIHRoZSBhc3NlcnQgbWFjcm8gY2F1c2VzIG1hbGxvYyB0byBiZSBjYWxsZWQsIHdoaWNoIHdpbGwKKyAgbGVhZCB0byBhIGNhc2NhZGUgb2YgZnVydGhlciBmYWlsdXJlcywgYmxvd2luZyB0aGUgcnVudGltZSBzdGFjay4KKyAgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgY2F1c2UgYXNzZXJ0aW9ucyBmYWlsdXJlcyB0byBjYWxsIGFib3J0KCksCisgIHdoaWNoIHdpbGwgdXN1YWxseSBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuCisKK01BTExPQ19GQUlMVVJFX0FDVElPTiAgICAgZGVmYXVsdDogc2V0cyBlcnJubyB0byBFTk9NRU0sIG9yIG5vLW9wIG9uIHdpbjMyCisgIFRoZSBhY3Rpb24gdG8gdGFrZSBiZWZvcmUgInJldHVybiAwIiB3aGVuIG1hbGxvYyBmYWlscyB0byBiZSBhYmxlIHRvCisgIHJldHVybiBtZW1vcnkgYmVjYXVzZSB0aGVyZSBpcyBub25lIGF2YWlsYWJsZS4KKworSEFWRV9NT1JFQ09SRSAgICAgICAgICAgICBkZWZhdWx0OiAxICh0cnVlKSB1bmxlc3Mgd2luMzIgb3IgT05MWV9NU1BBQ0VTCisgIFRydWUgaWYgdGhpcyBzeXN0ZW0gc3VwcG9ydHMgc2JyayBvciBhbiBlbXVsYXRpb24gb2YgaXQuCisKK01PUkVDT1JFICAgICAgICAgICAgICAgICAgZGVmYXVsdDogc2JyaworICBUaGUgbmFtZSBvZiB0aGUgc2Jyay1zdHlsZSBzeXN0ZW0gcm91dGluZSB0byBjYWxsIHRvIG9idGFpbiBtb3JlCisgIG1lbW9yeS4gIFNlZSBiZWxvdyBmb3IgZ3VpZGFuY2Ugb24gd3JpdGluZyBjdXN0b20gTU9SRUNPUkUKKyAgZnVuY3Rpb25zLiBUaGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgdG8gc2Jyay9NT1JFQ09SRSB2YXJpZXMgYWNyb3NzCisgIHN5c3RlbXMuICBJdCBjYW5ub3QgYmUgc2l6ZV90LCBiZWNhdXNlIGl0IHN1cHBvcnRzIG5lZ2F0aXZlCisgIGFyZ3VtZW50cywgc28gaXQgaXMgbm9ybWFsbHkgdGhlIHNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzCisgIHNpemVfdCAoc29tZXRpbWVzIGRlY2xhcmVkIGFzICJpbnRwdHJfdCIpLiAgSXQgZG9lc24ndCBtdWNoIG1hdHRlcgorICB0aG91Z2guIEludGVybmFsbHksIHdlIG9ubHkgY2FsbCBpdCB3aXRoIGFyZ3VtZW50cyBsZXNzIHRoYW4gaGFsZgorICB0aGUgbWF4IHZhbHVlIG9mIGEgc2l6ZV90LCB3aGljaCBzaG91bGQgd29yayBhY3Jvc3MgYWxsIHJlYXNvbmFibGUKKyAgcG9zc2liaWxpdGllcywgYWx0aG91Z2ggc29tZXRpbWVzIGdlbmVyYXRpbmcgY29tcGlsZXIgd2FybmluZ3MuCisKK01PUkVDT1JFX0NPTlRJR1VPVVMgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkgaWYgSEFWRV9NT1JFQ09SRQorICBJZiB0cnVlLCB0YWtlIGFkdmFudGFnZSBvZiBmYWN0IHRoYXQgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUKKyAgd2l0aCBwb3NpdGl2ZSBhcmd1bWVudHMgYWx3YXlzIHJldHVybiBjb250aWd1b3VzIGluY3JlYXNpbmcKKyAgYWRkcmVzc2VzLiAgVGhpcyBpcyB0cnVlIG9mIHVuaXggc2Jyay4gSXQgZG9lcyBub3QgaHVydCB0b28gbXVjaCB0bworICBzZXQgaXQgdHJ1ZSBhbnl3YXksIHNpbmNlIG1hbGxvYyBjb3BlcyB3aXRoIG5vbi1jb250aWd1aXRpZXMuCisgIFNldHRpbmcgaXQgZmFsc2Ugd2hlbiBkZWZpbml0ZWx5IG5vbi1jb250aWd1b3VzIHNhdmVzIHRpbWUKKyAgYW5kIHBvc3NpYmx5IHdhc3RlZCBzcGFjZSBpdCB3b3VsZCB0YWtlIHRvIGRpc2NvdmVyIHRoaXMgdGhvdWdoLgorCitNT1JFQ09SRV9DQU5OT1RfVFJJTSAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIFRydWUgaWYgTU9SRUNPUkUgY2Fubm90IHJlbGVhc2Ugc3BhY2UgYmFjayB0byB0aGUgc3lzdGVtIHdoZW4gZ2l2ZW4KKyAgbmVnYXRpdmUgYXJndW1lbnRzLiBUaGlzIGlzIGdlbmVyYWxseSBuZWNlc3Nhcnkgb25seSBpZiB5b3UgYXJlCisgIHVzaW5nIGEgaGFuZC1jcmFmdGVkIE1PUkVDT1JFIGZ1bmN0aW9uIHRoYXQgY2Fubm90IGhhbmRsZSBuZWdhdGl2ZQorICBhcmd1bWVudHMuCisKK05PX1NFR01FTlRfVFJBVkVSU0FMICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgbm9uLXplcm8sIHN1cHByZXNzZXMgdHJhdmVyc2FscyBvZiBtZW1vcnkgc2VnbWVudHMKKyAgcmV0dXJuZWQgYnkgZWl0aGVyIE1PUkVDT1JFIG9yIENBTExfTU1BUC4gVGhpcyBkaXNhYmxlcworICBtZXJnaW5nIG9mIHNlZ21lbnRzIHRoYXQgYXJlIGNvbnRpZ3VvdXMsIGFuZCBzZWxlY3RpdmVseQorICByZWxlYXNpbmcgdGhlbSB0byB0aGUgT1MgaWYgdW51c2VkLCBidXQgYm91bmRzIGV4ZWN1dGlvbiB0aW1lcy4KKworSEFWRV9NTUFQICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxICh0cnVlKQorICBUcnVlIGlmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIG1tYXAgb3IgYW4gZW11bGF0aW9uIG9mIGl0LiAgSWYgc28sIGFuZAorICBIQVZFX01PUkVDT1JFIGlzIG5vdCB0cnVlLCBNTUFQIGlzIHVzZWQgZm9yIGFsbCBzeXN0ZW0KKyAgYWxsb2NhdGlvbi4gSWYgc2V0IGFuZCBIQVZFX01PUkVDT1JFIGlzIHRydWUgYXMgd2VsbCwgTU1BUCBpcworICBwcmltYXJpbHkgdXNlZCB0byBkaXJlY3RseSBhbGxvY2F0ZSB2ZXJ5IGxhcmdlIGJsb2Nrcy4gSXQgaXMgYWxzbworICB1c2VkIGFzIGEgYmFja3VwIHN0cmF0ZWd5IGluIGNhc2VzIHdoZXJlIE1PUkVDT1JFIGZhaWxzIHRvIHByb3ZpZGUKKyAgc3BhY2UgZnJvbSBzeXN0ZW0uIE5vdGU6IEEgc2luZ2xlIGNhbGwgdG8gTVVOTUFQIGlzIGFzc3VtZWQgdG8gYmUKKyAgYWJsZSB0byB1bm1hcCBtZW1vcnkgdGhhdCBtYXkgaGF2ZSBiZSBhbGxvY2F0ZWQgdXNpbmcgbXVsdGlwbGUgY2FsbHMKKyAgdG8gTU1BUCwgc28gbG9uZyBhcyB0aGV5IGFyZSBhZGphY2VudC4KKworSEFWRV9NUkVNQVAgICAgICAgICAgICAgICBkZWZhdWx0OiAxIG9uIGxpbnV4LCBlbHNlIDAKKyAgSWYgdHJ1ZSByZWFsbG9jKCkgdXNlcyBtcmVtYXAoKSB0byByZS1hbGxvY2F0ZSBsYXJnZSBibG9ja3MgYW5kCisgIGV4dGVuZCBvciBzaHJpbmsgYWxsb2NhdGlvbiBzcGFjZXMuCisKK01NQVBfQ0xFQVJTICAgICAgICAgICAgICAgZGVmYXVsdDogMSBleGNlcHQgb24gV0lOQ0UuCisgIFRydWUgaWYgbW1hcCBjbGVhcnMgbWVtb3J5IHNvIGNhbGxvYyBkb2Vzbid0IG5lZWQgdG8uIFRoaXMgaXMgdHJ1ZQorICBmb3Igc3RhbmRhcmQgdW5peCBtbWFwIHVzaW5nIC9kZXYvemVybyBhbmQgb24gV0lOMzIgZXhjZXB0IGZvciBXSU5DRS4KKworVVNFX0JVSUxUSU5fRkZTICAgICAgICAgICAgZGVmYXVsdDogMCAoaS5lLiwgbm90IHVzZWQpCisgIENhdXNlcyBtYWxsb2MgdG8gdXNlIHRoZSBidWlsdGluIGZmcygpIGZ1bmN0aW9uIHRvIGNvbXB1dGUgaW5kaWNlcy4KKyAgU29tZSBjb21waWxlcnMgbWF5IHJlY29nbml6ZSBhbmQgaW50cmluc2lmeSBmZnMgdG8gYmUgZmFzdGVyIHRoYW4gdGhlCisgIHN1cHBsaWVkIEMgdmVyc2lvbi4gQWxzbywgdGhlIGNhc2Ugb2YgeDg2IHVzaW5nIGdjYyBpcyBzcGVjaWFsLWNhc2VkCisgIHRvIGFuIGFzbSBpbnN0cnVjdGlvbiwgc28gaXMgYWxyZWFkeSBhcyBmYXN0IGFzIGl0IGNhbiBiZSwgYW5kIHNvCisgIHRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0LiBTaW1pbGFybHkgZm9yIFdpbjMyIHVuZGVyIHJlY2VudCBNUyBjb21waWxlcnMuCisgIChPbiBtb3N0IHg4NnMsIHRoZSBhc20gdmVyc2lvbiBpcyBvbmx5IHNsaWdodGx5IGZhc3RlciB0aGFuIHRoZSBDIHZlcnNpb24uKQorCittYWxsb2NfZ2V0cGFnZXNpemUgICAgICAgICBkZWZhdWx0OiBkZXJpdmUgZnJvbSBzeXN0ZW0gaW5jbHVkZXMsIG9yIDQwOTYuCisgIFRoZSBzeXN0ZW0gcGFnZSBzaXplLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGlzIG1hbGxvYyBtYW5hZ2VzCisgIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0gaW4gcGFnZS1zaXplIHVuaXRzLiAgVGhpcyBtYXkgYmUgKGFuZAorICB1c3VhbGx5IGlzKSBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGEgY29uc3RhbnQuIFRoaXMgaXMgaWdub3JlZAorICBpZiBXSU4zMiwgd2hlcmUgcGFnZSBzaXplIGlzIGRldGVybWluZWQgdXNpbmcgZ2V0U3lzdGVtSW5mbyBkdXJpbmcKKyAgaW5pdGlhbGl6YXRpb24uCisKK1VTRV9ERVZfUkFORE9NICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQorICBDYXVzZXMgbWFsbG9jIHRvIHVzZSAvZGV2L3JhbmRvbSB0byBpbml0aWFsaXplIHNlY3VyZSBtYWdpYyBzZWVkIGZvcgorICBzdGFtcGluZyBmb290ZXJzLiBPdGhlcndpc2UsIHRoZSBjdXJyZW50IHRpbWUgaXMgdXNlZC4KKworTk9fTUFMTElORk8gICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiBkZWZpbmVkLCBkb24ndCBjb21waWxlICJtYWxsaW5mbyIuIFRoaXMgY2FuIGJlIGEgc2ltcGxlIHdheQorICBvZiBkZWFsaW5nIHdpdGggbWlzbWF0Y2hlcyBiZXR3ZWVuIHN5c3RlbSBkZWNsYXJhdGlvbnMgYW5kCisgIHRob3NlIGluIHRoaXMgZmlsZS4KKworTUFMTElORk9fRklFTERfVFlQRSAgICAgICAgZGVmYXVsdDogc2l6ZV90CisgIFRoZSB0eXBlIG9mIHRoZSBmaWVsZHMgaW4gdGhlIG1hbGxpbmZvIHN0cnVjdC4gVGhpcyB3YXMgb3JpZ2luYWxseQorICBkZWZpbmVkIGFzICJpbnQiIGluIFNWSUQgZXRjLCBidXQgaXMgbW9yZSB1c2VmdWxseSBkZWZpbmVkIGFzCisgIHNpemVfdC4gVGhlIHZhbHVlIGlzIHVzZWQgb25seSBpZiAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCBpcyBub3Qgc2V0CisKK1JFQUxMT0NfWkVST19CWVRFU19GUkVFUyAgICBkZWZhdWx0OiBub3QgZGVmaW5lZAorICBUaGlzIHNob3VsZCBiZSBzZXQgaWYgYSBjYWxsIHRvIHJlYWxsb2Mgd2l0aCB6ZXJvIGJ5dGVzIHNob3VsZAorICBiZSB0aGUgc2FtZSBhcyBhIGNhbGwgdG8gZnJlZS4gU29tZSBwZW9wbGUgdGhpbmsgaXQgc2hvdWxkLiBPdGhlcndpc2UsCisgIHNpbmNlIHRoaXMgbWFsbG9jIHJldHVybnMgYSB1bmlxdWUgcG9pbnRlciBmb3IgbWFsbG9jKDApLCBzbyBkb2VzCisgIHJlYWxsb2MocCwgMCkuCisKK0xBQ0tTX1VOSVNURF9ILCBMQUNLU19GQ05UTF9ILCBMQUNLU19TWVNfUEFSQU1fSCwgTEFDS1NfU1lTX01NQU5fSAorTEFDS1NfU1RSSU5HU19ILCBMQUNLU19TVFJJTkdfSCwgTEFDS1NfU1lTX1RZUEVTX0gsICBMQUNLU19FUlJOT19ICitMQUNLU19TVERMSUJfSCAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZCB1bmxlc3Mgb24gV0lOMzIKKyAgRGVmaW5lIHRoZXNlIGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlc2UgaGVhZGVyIGZpbGVzLgorICBZb3UgbWlnaHQgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgc29tZSBvZiB0aGUgZGVjbGFyYXRpb25zIHRoZXkgcHJvdmlkZS4KKworREVGQVVMVF9HUkFOVUxBUklUWSAgICAgICAgZGVmYXVsdDogcGFnZSBzaXplIGlmIE1PUkVDT1JFX0NPTlRJR1VPVVMsCisJCQkJc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHkgaW4gV0lOMzIsCisJCQkJb3RoZXJ3aXNlIDY0Sy4KKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX0dSQU5VTEFSSVRZLCB4KQorICBUaGUgdW5pdCBmb3IgYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uICBPbgorICBtb3N0IHN5c3RlbXMgd2l0aCBjb250aWd1b3VzIE1PUkVDT1JFLCB0aGVyZSBpcyBubyByZWFzb24gdG8KKyAgbWFrZSB0aGlzIG1vcmUgdGhhbiBhIHBhZ2UuIEhvd2V2ZXIsIHN5c3RlbXMgd2l0aCBNTUFQIHRlbmQgdG8KKyAgZWl0aGVyIHJlcXVpcmUgb3IgZW5jb3VyYWdlIGxhcmdlciBncmFudWxhcml0aWVzLiAgWW91IGNhbiBpbmNyZWFzZQorICB0aGlzIHZhbHVlIHRvIHByZXZlbnQgc3lzdGVtIGFsbG9jYXRpb24gZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBzbworICBvZnRlbiwgZXNwZWNpYWxseSBpZiB0aGV5IGFyZSBzbG93LiAgVGhlIHZhbHVlIG11c3QgYmUgYXQgbGVhc3Qgb25lCisgIHBhZ2UgYW5kIG11c3QgYmUgYSBwb3dlciBvZiB0d28uICBTZXR0aW5nIHRvIDAgY2F1c2VzIGluaXRpYWxpemF0aW9uCisgIHRvIGVpdGhlciBwYWdlIHNpemUgb3Igd2luMzIgcmVnaW9uIHNpemUuICAoTm90ZTogSW4gcHJldmlvdXMKKyAgdmVyc2lvbnMgb2YgbWFsbG9jLCB0aGUgZXF1aXZhbGVudCBvZiB0aGlzIG9wdGlvbiB3YXMgY2FsbGVkCisgICJUT1BfUEFEIikKKworREVGQVVMVF9UUklNX1RIUkVTSE9MRCAgICBkZWZhdWx0OiAyTUIKKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX1RSSU1fVEhSRVNIT0xELCB4KQorICBUaGUgbWF4aW11bSBhbW91bnQgb2YgdW51c2VkIHRvcC1tb3N0IG1lbW9yeSB0byBrZWVwIGJlZm9yZQorICByZWxlYXNpbmcgdmlhIG1hbGxvY190cmltIGluIGZyZWUoKS4gIEF1dG9tYXRpYyB0cmltbWluZyBpcyBtYWlubHkKKyAgdXNlZnVsIGluIGxvbmctbGl2ZWQgcHJvZ3JhbXMgdXNpbmcgY29udGlndW91cyBNT1JFQ09SRS4gIEJlY2F1c2UKKyAgdHJpbW1pbmcgdmlhIHNicmsgY2FuIGJlIHNsb3cgb24gc29tZSBzeXN0ZW1zLCBhbmQgY2FuIHNvbWV0aW1lcyBiZQorICB3YXN0ZWZ1bCAoaW4gY2FzZXMgd2hlcmUgcHJvZ3JhbXMgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkIGFsbG9jYXRlCisgIG1vcmUgbGFyZ2UgY2h1bmtzKSB0aGUgdmFsdWUgc2hvdWxkIGJlIGhpZ2ggZW5vdWdoIHNvIHRoYXQgeW91cgorICBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3b3VsZCBpbXByb3ZlIGJ5IHJlbGVhc2luZyB0aGlzIG11Y2gKKyAgbWVtb3J5LiAgQXMgYSByb3VnaCBndWlkZSwgeW91IG1pZ2h0IHNldCB0byBhIHZhbHVlIGNsb3NlIHRvIHRoZQorICBhdmVyYWdlIHNpemUgb2YgYSBwcm9jZXNzIChwcm9ncmFtKSBydW5uaW5nIG9uIHlvdXIgc3lzdGVtLgorICBSZWxlYXNpbmcgdGhpcyBtdWNoIG1lbW9yeSB3b3VsZCBhbGxvdyBzdWNoIGEgcHJvY2VzcyB0byBydW4gaW4KKyAgbWVtb3J5LiAgR2VuZXJhbGx5LCBpdCBpcyB3b3J0aCB0dW5pbmcgdHJpbSB0aHJlc2hvbGRzIHdoZW4gYQorICBwcm9ncmFtIHVuZGVyZ29lcyBwaGFzZXMgd2hlcmUgc2V2ZXJhbCBsYXJnZSBjaHVua3MgYXJlIGFsbG9jYXRlZAorICBhbmQgcmVsZWFzZWQgaW4gd2F5cyB0aGF0IGNhbiByZXVzZSBlYWNoIG90aGVyJ3Mgc3RvcmFnZSwgcGVyaGFwcworICBtaXhlZCB3aXRoIHBoYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm8gc3VjaCBjaHVua3MgYXQgYWxsLiBUaGUgdHJpbQorICB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBwYWdlIHNpemUgdG8gaGF2ZSBhbnkgdXNlZnVsIGVmZmVjdC4gIFRvCisgIGRpc2FibGUgdHJpbW1pbmcgY29tcGxldGVseSwgeW91IGNhbiBzZXQgdG8gTUFYX1NJWkVfVC4gTm90ZSB0aGF0IHRoZSB0cmljaworICBzb21lIHBlb3BsZSB1c2Ugb2YgbWFsbG9jaW5nIGEgaHVnZSBzcGFjZSBhbmQgdGhlbiBmcmVlaW5nIGl0IGF0CisgIHByb2dyYW0gc3RhcnR1cCwgaW4gYW4gYXR0ZW1wdCB0byByZXNlcnZlIHN5c3RlbSBtZW1vcnksIGRvZXNuJ3QKKyAgaGF2ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IHVuZGVyIGF1dG9tYXRpYyB0cmltbWluZywgc2luY2UgdGhhdCBtZW1vcnkKKyAgd2lsbCBpbW1lZGlhdGVseSBiZSByZXR1cm5lZCB0byB0aGUgc3lzdGVtLgorCitERUZBVUxUX01NQVBfVEhSRVNIT0xEICAgICAgIGRlZmF1bHQ6IDI1NksKKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX01NQVBfVEhSRVNIT0xELCB4KQorICBUaGUgcmVxdWVzdCBzaXplIHRocmVzaG9sZCBmb3IgdXNpbmcgTU1BUCB0byBkaXJlY3RseSBzZXJ2aWNlIGEKKyAgcmVxdWVzdC4gUmVxdWVzdHMgb2YgYXQgbGVhc3QgdGhpcyBzaXplIHRoYXQgY2Fubm90IGJlIGFsbG9jYXRlZAorICB1c2luZyBhbHJlYWR5LWV4aXN0aW5nIHNwYWNlIHdpbGwgYmUgc2VydmljZWQgdmlhIG1tYXAuICAoSWYgZW5vdWdoCisgIG5vcm1hbCBmcmVlZCBzcGFjZSBhbHJlYWR5IGV4aXN0cyBpdCBpcyB1c2VkIGluc3RlYWQuKSAgVXNpbmcgbW1hcAorICBzZWdyZWdhdGVzIHJlbGF0aXZlbHkgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSBzbyB0aGF0IHRoZXkgY2FuIGJlCisgIGluZGl2aWR1YWxseSBvYnRhaW5lZCBhbmQgcmVsZWFzZWQgZnJvbSB0aGUgaG9zdCBzeXN0ZW0uIEEgcmVxdWVzdAorICBzZXJ2aWNlZCB0aHJvdWdoIG1tYXAgaXMgbmV2ZXIgcmV1c2VkIGJ5IGFueSBvdGhlciByZXF1ZXN0IChhdCBsZWFzdAorICBub3QgZGlyZWN0bHk7IHRoZSBzeXN0ZW0gbWF5IGp1c3Qgc28gaGFwcGVuIHRvIHJlbWFwIHN1Y2Nlc3NpdmUKKyAgcmVxdWVzdHMgdG8gdGhlIHNhbWUgbG9jYXRpb25zKS4gIFNlZ3JlZ2F0aW5nIHNwYWNlIGluIHRoaXMgd2F5IGhhcworICB0aGUgYmVuZWZpdHMgdGhhdDogTW1hcHBlZCBzcGFjZSBjYW4gYWx3YXlzIGJlIGluZGl2aWR1YWxseSByZWxlYXNlZAorICBiYWNrIHRvIHRoZSBzeXN0ZW0sIHdoaWNoIGhlbHBzIGtlZXAgdGhlIHN5c3RlbSBsZXZlbCBtZW1vcnkgZGVtYW5kcworICBvZiBhIGxvbmctbGl2ZWQgcHJvZ3JhbSBsb3cuICBBbHNvLCBtYXBwZWQgbWVtb3J5IGRvZXNuJ3QgYmVjb21lCisgIGBsb2NrZWQnIGJldHdlZW4gb3RoZXIgY2h1bmtzLCBhcyBjYW4gaGFwcGVuIHdpdGggbm9ybWFsbHkgYWxsb2NhdGVkCisgIGNodW5rcywgd2hpY2ggbWVhbnMgdGhhdCBldmVuIHRyaW1taW5nIHZpYSBtYWxsb2NfdHJpbSB3b3VsZCBub3QKKyAgcmVsZWFzZSB0aGVtLiAgSG93ZXZlciwgaXQgaGFzIHRoZSBkaXNhZHZhbnRhZ2UgdGhhdCB0aGUgc3BhY2UKKyAgY2Fubm90IGJlIHJlY2xhaW1lZCwgY29uc29saWRhdGVkLCBhbmQgdGhlbiB1c2VkIHRvIHNlcnZpY2UgbGF0ZXIKKyAgcmVxdWVzdHMsIGFzIGhhcHBlbnMgd2l0aCBub3JtYWwgY2h1bmtzLiAgVGhlIGFkdmFudGFnZXMgb2YgbW1hcAorICBuZWFybHkgYWx3YXlzIG91dHdlaWdoIGRpc2FkdmFudGFnZXMgZm9yICJsYXJnZSIgY2h1bmtzLCBidXQgdGhlCisgIHZhbHVlIG9mICJsYXJnZSIgbWF5IHZhcnkgYWNyb3NzIHN5c3RlbXMuICBUaGUgZGVmYXVsdCBpcyBhbgorICBlbXBpcmljYWxseSBkZXJpdmVkIHZhbHVlIHRoYXQgd29ya3Mgd2VsbCBpbiBtb3N0IHN5c3RlbXMuIFlvdSBjYW4KKyAgZGlzYWJsZSBtbWFwIGJ5IHNldHRpbmcgdG8gTUFYX1NJWkVfVC4KKworTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSAgIGRlZmF1bHQ6IDQwOTUgdW5sZXNzIG5vdCBIQVZFX01NQVAKKyAgVGhlIG51bWJlciBvZiBjb25zb2xpZGF0ZWQgZnJlZXMgYmV0d2VlbiBjaGVja3MgdG8gcmVsZWFzZQorICB1bnVzZWQgc2VnbWVudHMgd2hlbiBmcmVlaW5nLiBXaGVuIHVzaW5nIG5vbi1jb250aWd1b3VzIHNlZ21lbnRzLAorICBlc3BlY2lhbGx5IHdpdGggbXVsdGlwbGUgbXNwYWNlcywgY2hlY2tpbmcgb25seSBmb3IgdG9wbW9zdCBzcGFjZQorICBkb2Vzbid0IGFsd2F5cyBzdWZmaWNlIHRvIHRyaWdnZXIgdHJpbW1pbmcuIFRvIGNvbXBlbnNhdGUgZm9yIHRoaXMsCisgIGZyZWUoKSB3aWxsLCB3aXRoIGEgcGVyaW9kIG9mIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgKG9yIHRoZQorICBjdXJyZW50IG51bWJlciBvZiBzZWdtZW50cywgaWYgZ3JlYXRlcikgdHJ5IHRvIHJlbGVhc2UgdW51c2VkCisgIHNlZ21lbnRzIHRvIHRoZSBPUyB3aGVuIGZyZWVpbmcgY2h1bmtzIHRoYXQgcmVzdWx0IGluCisgIGNvbnNvbGlkYXRpb24uIFRoZSBiZXN0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyBhIGNvbXByb21pc2UKKyAgYmV0d2VlbiBzbG93aW5nIGRvd24gZnJlZXMgd2l0aCByZWxhdGl2ZWx5IGNvc3RseSBjaGVja3MgdGhhdAorICByYXJlbHkgdHJpZ2dlciB2ZXJzdXMgaG9sZGluZyBvbiB0byB1bnVzZWQgbWVtb3J5LiBUbyBlZmZlY3RpdmVseQorICBkaXNhYmxlLCBzZXQgdG8gTUFYX1NJWkVfVC4gVGhpcyBtYXkgbGVhZCB0byBhIHZlcnkgc2xpZ2h0IHNwZWVkCisgIGltcHJvdmVtZW50IGF0IHRoZSBleHBlbnNlIG9mIGNhcnJ5aW5nIGFyb3VuZCBtb3JlIG1lbW9yeS4KKyovCisKKy8qIFZlcnNpb24gaWRlbnRpZmllciB0byBhbGxvdyBwZW9wbGUgdG8gc3VwcG9ydCBtdWx0aXBsZSB2ZXJzaW9ucyAqLworI2lmbmRlZiBETE1BTExPQ19WRVJTSU9OCisjZGVmaW5lIERMTUFMTE9DX1ZFUlNJT04gMjA4MDQKKyNlbmRpZiAvKiBETE1BTExPQ19WRVJTSU9OICovCisKKyNpZiBkZWZpbmVkKGxpbnV4KQorI2RlZmluZSBfR05VX1NPVVJDRSAxCisjZW5kaWYKKworI2lmbmRlZiBXSU4zMgorI2lmZGVmIF9XSU4zMgorI2RlZmluZSBXSU4zMiAxCisjZW5kaWYgIC8qIF9XSU4zMiAqLworI2lmZGVmIF9XSU4zMl9XQ0UKKyNkZWZpbmUgTEFDS1NfRkNOVExfSAorI2RlZmluZSBXSU4zMiAxCisjZW5kaWYgLyogX1dJTjMyX1dDRSAqLworI2VuZGlmICAvKiBXSU4zMiAqLworI2lmZGVmIFdJTjMyCisjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNpZm5kZWYgX1dJTjMyX1dJTk5UCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDQwMworI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2RlZmluZSBIQVZFX01NQVAgMQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgTEFDS1NfVU5JU1REX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1BBUkFNX0gKKyNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSAorI2RlZmluZSBMQUNLU19TVFJJTkdfSAorI2RlZmluZSBMQUNLU19TVFJJTkdTX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1RZUEVTX0gKKyNkZWZpbmUgTEFDS1NfRVJSTk9fSAorI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZW5kaWYgLyogTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjaWZkZWYgX1dJTjMyX1dDRSAvKiBXSU5DRSByZXBvcnRlZGx5IGRvZXMgbm90IGNsZWFyICovCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDAKKyNlbHNlCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDEKKyNlbmRpZiAvKiBfV0lOMzJfV0NFICovCisjZW5kaWYgIC8qIFdJTjMyICovCisKKyNpZiBkZWZpbmVkKERBUldJTikgfHwgZGVmaW5lZChfREFSV0lOKQorLyogTWFjIE9TWCBkb2NzIGFkdmlzZSBub3QgdG8gdXNlIHNicms7IGl0IHNlZW1zIGJldHRlciB0byB1c2UgbW1hcCAqLworI2lmbmRlZiBIQVZFX01PUkVDT1JFCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2RlZmluZSBIQVZFX01NQVAgMQorLyogT1NYIGFsbG9jYXRvcnMgcHJvdmlkZSAxNiBieXRlIGFsaWdubWVudCAqLworI2lmbmRlZiBNQUxMT0NfQUxJR05NRU5UCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgKChzaXplX3QpMTZVKQorI2VuZGlmCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNlbmRpZiAgLyogREFSV0lOICovCisKKyNpZm5kZWYgTEFDS1NfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gIC8qIEZvciBzaXplX3QgKi8KKyNlbmRpZiAgLyogTEFDS1NfU1lTX1RZUEVTX0ggKi8KKworLyogVGhlIG1heGltdW0gcG9zc2libGUgc2l6ZV90IHZhbHVlIGhhcyBhbGwgYml0cyBzZXQgKi8KKyNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApCisKKyNpZm5kZWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAwICAgICAvKiBkZWZpbmUgdG8gYSB2YWx1ZSAqLworI2Vsc2UKKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDEKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjaWZuZGVmIE1TUEFDRVMKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgTVNQQUNFUyAxCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBNU1BBQ0VTIDAKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIE1TUEFDRVMgKi8KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAorI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UICgoc2l6ZV90KThVKQorI2VuZGlmICAvKiBNQUxMT0NfQUxJR05NRU5UICovCisjaWZuZGVmIEZPT1RFUlMKKyNkZWZpbmUgRk9PVEVSUyAwCisjZW5kaWYgIC8qIEZPT1RFUlMgKi8KKyNpZm5kZWYgQUJPUlQKKyNkZWZpbmUgQUJPUlQgIGFib3J0KCkKKyNlbmRpZiAgLyogQUJPUlQgKi8KKyNpZm5kZWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUKKyNkZWZpbmUgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgMQorI2VuZGlmICAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2lmbmRlZiBQUk9DRUVEX09OX0VSUk9SCisjZGVmaW5lIFBST0NFRURfT05fRVJST1IgMAorI2VuZGlmICAvKiBQUk9DRUVEX09OX0VSUk9SICovCisjaWZuZGVmIFVTRV9MT0NLUworI2RlZmluZSBVU0VfTE9DS1MgMAorI2VuZGlmICAvKiBVU0VfTE9DS1MgKi8KKyNpZm5kZWYgVVNFX1NQSU5fTE9DS1MKKyNpZiBVU0VfTE9DS1MgJiYgKGRlZmluZWQoX19HTlVDX18pICYmICgoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkpKSB8fCAoZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMTApCisjZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDEKKyNlbHNlCisjZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDAKKyNlbmRpZiAvKiBVU0VfTE9DS1MgJiYgLi4uICovCisjZW5kaWYgLyogVVNFX1NQSU5fTE9DS1MgKi8KKyNpZm5kZWYgSU5TRUNVUkUKKyNkZWZpbmUgSU5TRUNVUkUgMAorI2VuZGlmICAvKiBJTlNFQ1VSRSAqLworI2lmbmRlZiBIQVZFX01NQVAKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjaWZuZGVmIE1NQVBfQ0xFQVJTCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDEKKyNlbmRpZiAgLyogTU1BUF9DTEVBUlMgKi8KKyNpZm5kZWYgSEFWRV9NUkVNQVAKKyNpZmRlZiBsaW51eAorI2RlZmluZSBIQVZFX01SRU1BUCAxCisjZWxzZSAgIC8qIGxpbnV4ICovCisjZGVmaW5lIEhBVkVfTVJFTUFQIDAKKyNlbmRpZiAgLyogbGludXggKi8KKyNlbmRpZiAgLyogSEFWRV9NUkVNQVAgKi8KKyNpZm5kZWYgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTiAgZXJybm8gPSBFTk9NRU07CisjZW5kaWYgIC8qIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2lmbmRlZiBIQVZFX01PUkVDT1JFCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2Vsc2UgICAvKiBPTkxZX01TUEFDRVMgKi8KKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAxCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovCisjaWYgIUhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAwCisjZWxzZSAgIC8qICFIQVZFX01PUkVDT1JFICovCisjZGVmaW5lIE1PUkVDT1JFX0RFRkFVTFQgc2JyaworI2lmbmRlZiBNT1JFQ09SRV9DT05USUdVT1VTCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZm5kZWYgREVGQVVMVF9HUkFOVUxBUklUWQorI2lmIChNT1JFQ09SRV9DT05USUdVT1VTIHx8IGRlZmluZWQoV0lOMzIpKQorI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgwKSAgLyogMCBtZWFucyB0byBjb21wdXRlIGluIGluaXRfbXBhcmFtcyAqLworI2Vsc2UgICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKChzaXplX3QpNjRVICogKHNpemVfdCkxMDI0VSkKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2VuZGlmICAvKiBERUZBVUxUX0dSQU5VTEFSSVRZICovCisjaWZuZGVmIERFRkFVTFRfVFJJTV9USFJFU0hPTEQKKyNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAoKHNpemVfdCkyVSAqIChzaXplX3QpMTAyNFUgKiAoc2l6ZV90KTEwMjRVKQorI2Vsc2UgICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNlbmRpZiAgLyogREVGQVVMVF9UUklNX1RIUkVTSE9MRCAqLworI2lmbmRlZiBERUZBVUxUX01NQVBfVEhSRVNIT0xECisjaWYgSEFWRV9NTUFQCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKChzaXplX3QpMjU2VSAqIChzaXplX3QpMTAyNFUpCisjZWxzZSAgIC8qIEhBVkVfTU1BUCAqLworI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjZW5kaWYgIC8qIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKi8KKyNpZm5kZWYgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURQorI2lmIEhBVkVfTU1BUAorI2RlZmluZSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFIDQwOTUKKyNlbHNlCisjZGVmaW5lIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgTUFYX1NJWkVfVAorI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworI2VuZGlmIC8qIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgKi8KKyNpZm5kZWYgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIFVTRV9CVUlMVElOX0ZGUyAwCisjZW5kaWYgIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2lmbmRlZiBVU0VfREVWX1JBTkRPTQorI2RlZmluZSBVU0VfREVWX1JBTkRPTSAwCisjZW5kaWYgIC8qIFVTRV9ERVZfUkFORE9NICovCisjaWZuZGVmIE5PX01BTExJTkZPCisjZGVmaW5lIE5PX01BTExJTkZPIDAKKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8KKyNpZm5kZWYgTUFMTElORk9fRklFTERfVFlQRQorI2RlZmluZSBNQUxMSU5GT19GSUVMRF9UWVBFIHNpemVfdAorI2VuZGlmICAvKiBNQUxMSU5GT19GSUVMRF9UWVBFICovCisjaWZuZGVmIE5PX1NFR01FTlRfVFJBVkVSU0FMCisjZGVmaW5lIE5PX1NFR01FTlRfVFJBVkVSU0FMIDAKKyNlbmRpZiAvKiBOT19TRUdNRU5UX1RSQVZFUlNBTCAqLworCisvKgorICBtYWxsb3B0IHR1bmluZyBvcHRpb25zLiAgU1ZJRC9YUEcgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtZXRlcgorICBudW1iZXJzIGZvciBtYWxsb3B0LCBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZQorICBhcmUgdXNlZCBpbiB0aGlzIG1hbGxvYywgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzCisgIG1hbGxvYyBkb2VzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBvcHRpb25zLgorKi8KKworI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgICAoLTEpCisjZGVmaW5lIE1fR1JBTlVMQVJJVFkgICAgICAgICgtMikKKyNkZWZpbmUgTV9NTUFQX1RIUkVTSE9MRCAgICAgKC0zKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFsbGluZm8gZGVjbGFyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBUaGlzIHZlcnNpb24gb2YgbWFsbG9jIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBTVklEL1hQRyBtYWxsaW5mbworICByb3V0aW5lIHRoYXQgcmV0dXJucyBhIHN0cnVjdCBjb250YWluaW5nIHVzYWdlIHByb3BlcnRpZXMgYW5kCisgIHN0YXRpc3RpY3MuIEl0IHNob3VsZCB3b3JrIG9uIGFueSBzeXN0ZW0gdGhhdCBoYXMgYQorICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZGVmaW5pbmcgc3RydWN0IG1hbGxpbmZvLiAgVGhlIG1haW4KKyAgZGVjbGFyYXRpb24gbmVlZGVkIGlzIHRoZSBtYWxsaW5mbyBzdHJ1Y3QgdGhhdCBpcyByZXR1cm5lZCAoYnktY29weSkKKyAgYnkgbWFsbGluZm8oKS4gIFRoZSBtYWxsb2luZm8gc3RydWN0IGNvbnRhaW5zIGEgYnVuY2ggb2YgZmllbGRzIHRoYXQKKyAgYXJlIG5vdCBldmVuIG1lYW5pbmdmdWwgaW4gdGhpcyB2ZXJzaW9uIG9mIG1hbGxvYy4gIFRoZXNlIGZpZWxkcyBhcmUKKyAgYXJlIGluc3RlYWQgZmlsbGVkIGJ5IG1hbGxpbmZvKCkgd2l0aCBvdGhlciBudW1iZXJzIHRoYXQgbWlnaHQgYmUgb2YKKyAgaW50ZXJlc3QuCisKKyAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCBzaG91bGQgYmUgc2V0IGlmIHlvdSBoYXZlIGEKKyAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGZpbGUgdGhhdCBpbmNsdWRlcyBhIGRlY2xhcmF0aW9uIG9mIHN0cnVjdAorICBtYWxsaW5mby4gIElmIHNvLCBpdCBpcyBpbmNsdWRlZDsgZWxzZSBhIGNvbXBsaWFudCB2ZXJzaW9uIGlzCisgIGRlY2xhcmVkIGJlbG93LiAgVGhlc2UgbXVzdCBiZSBwcmVjaXNlbHkgdGhlIHNhbWUgZm9yIG1hbGxpbmZvKCkgdG8KKyAgd29yay4gIFRoZSBvcmlnaW5hbCBTVklEIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3QsIGRlZmluZWQgb24gbW9zdAorICBzeXN0ZW1zIHdpdGggbWFsbGluZm8sIGRlY2xhcmVzIGFsbCBmaWVsZHMgYXMgaW50cy4gQnV0IHNvbWUgb3RoZXJzCisgIGRlZmluZSBhcyB1bnNpZ25lZCBsb25nLiBJZiB5b3VyIHN5c3RlbSBkZWZpbmVzIHRoZSBmaWVsZHMgdXNpbmcgYQorICB0eXBlIG9mIGRpZmZlcmVudCB3aWR0aCB0aGFuIGxpc3RlZCBoZXJlLCB5b3UgTVVTVCAjaW5jbHVkZSB5b3VyCisgIHN5c3RlbSB2ZXJzaW9uIGFuZCAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0guCisqLworCisvKiAjZGVmaW5lIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KKworI2lmZGVmIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0gKKyNpbmNsdWRlICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiCisjZWxzZSAvKiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisjaWZuZGVmIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRAorI2RlZmluZSBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgMQorc3RydWN0IG1hbGxpbmZvIHsKKyAgTUFMTElORk9fRklFTERfVFlQRSBhcmVuYTsgICAgLyogbm9uLW1tYXBwZWQgc3BhY2UgYWxsb2NhdGVkIGZyb20gc3lzdGVtICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgb3JkYmxrczsgIC8qIG51bWJlciBvZiBmcmVlIGNodW5rcyAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHNtYmxrczsgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtzOyAgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1c21ibGtzOyAgLyogbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBmc21ibGtzOyAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1b3JkYmxrczsgLyogdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZm9yZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBrZWVwY29zdDsgLyogcmVsZWFzYWJsZSAodmlhIG1hbGxvY190cmltKSBzcGFjZSAqLworfTsKKyNlbmRpZiAvKiBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgKi8KKyNlbmRpZiAvKiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgVHJ5IHRvIHBlcnN1YWRlIGNvbXBpbGVycyB0byBpbmxpbmUuIFRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IKKyAgaW5saW5pbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLCBzbyB0aGVzZSBhcmVuJ3QgdXNlZCBmb3IgdGhlbS4KKyovCisKKyNpZm5kZWYgRk9SQ0VJTkxJTkUKKyAgI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIEZPUkNFSU5MSU5FIF9faW5saW5lIF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSkKKyAgI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIEZPUkNFSU5MSU5FIF9fZm9yY2VpbmxpbmUKKyAgI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgTk9JTkxJTkUKKyAgI2lmIGRlZmluZWQoX19HTlVDX18pCisgICAgI2RlZmluZSBOT0lOTElORSBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorICAjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgTk9JTkxJTkUgX19kZWNsc3BlYyhub2lubGluZSkKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIE5PSU5MSU5FCisgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjaWZuZGVmIEZPUkNFSU5MSU5FCisgI2RlZmluZSBGT1JDRUlOTElORSBpbmxpbmUKKyNlbmRpZgorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjaWZuZGVmIEZPUkNFSU5MSU5FCisgI2RlZmluZSBGT1JDRUlOTElORQorI2VuZGlmCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gRGVjbGFyYXRpb25zIG9mIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgVVNFX0RMX1BSRUZJWAorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworI2RlZmluZSBkbGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorI2RlZmluZSBkbHJlYWxsb2MgICAgICAgICAgICAgIHJlYWxsb2MKKyNkZWZpbmUgZGx2YWxsb2MgICAgICAgICAgICAgICB2YWxsb2MKKyNkZWZpbmUgZGxwdmFsbG9jICAgICAgICAgICAgICBwdmFsbG9jCisjZGVmaW5lIGRsbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8KKyNkZWZpbmUgZGxtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisjZGVmaW5lIGRsbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyNkZWZpbmUgZGxtYWxsb2Nfc3RhdHMgICAgICAgICBtYWxsb2Nfc3RhdHMKKyNkZWZpbmUgZGxtYWxsb2NfdXNhYmxlX3NpemUgICBtYWxsb2NfdXNhYmxlX3NpemUKKyNkZWZpbmUgZGxtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX21heF9mb290cHJpbnQgbWFsbG9jX21heF9mb290cHJpbnQKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jb21hbGxvYyBpbmRlcGVuZGVudF9jb21hbGxvYworI2VuZGlmIC8qIFVTRV9ETF9QUkVGSVggKi8KKworCisvKgorICBtYWxsb2Moc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yCisgIG51bGwgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGVycm5vIGlzIHNldCB0byBFTk9NRU0KKyAgb24gQU5TSSBDIHN5c3RlbXMuCisKKyAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQorICBzaXplIGlzIDE2IGJ5dGVzIG9uIG1vc3QgMzJiaXQgc3lzdGVtcywgYW5kIDMyIGJ5dGVzIG9uIDY0Yml0CisgIHN5c3RlbXMuKSAgTm90ZSB0aGF0IHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxscyB3aXRoCisgIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHNpZ25lZCBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgcmVxdWVzdHMgZm9yIGh1Z2UgYW1vdW50cyBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUKKyAgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbiBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBidXQgaXMgaW4gYWxsCisgIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIG9mIGEgc2l6ZV90LgorKi8KK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCk7CisKKy8qCisgIGZyZWUodm9pZCogcCkKKyAgUmVsZWFzZXMgdGhlIGNodW5rIG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHAsIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jIG9yIGEgcmVsYXRlZCByb3V0aW5lIHN1Y2ggYXMgcmVhbGxvYy4KKyAgSXQgaGFzIG5vIGVmZmVjdCBpZiBwIGlzIG51bGwuIElmIHAgd2FzIG5vdCBtYWxsb2NlZCBvciBhbHJlYWR5CisgIGZyZWVkLCBmcmVlKHApIHdpbGwgYnkgZGVmYXVsdCBjYXVzZSB0aGUgY3VycmVudCBwcm9ncmFtIHRvIGFib3J0LgorKi8KK3ZvaWQgIGRsZnJlZSh2b2lkKik7CisKKy8qCisgIGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxvY2F0aW9ucworICBzZXQgdG8gemVyby4KKyovCit2b2lkKiBkbGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHJlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQorICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRlcywgb3IgbnVsbAorICBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUuCisKKyAgVGhlIHJldHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29yaXRobQorICBwcmVmZXJzIGV4dGVuZGluZyBwIGluIG1vc3QgY2FzZXMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0CisgIGVtcGxveXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLgorCisgIElmIHAgaXMgbnVsbCwgcmVhbGxvYyBpcyBlcXVpdmFsZW50IHRvIG1hbGxvYy4KKworICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8gaXMgc2V0IChpZiBvbgorICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCisKKyAgaWYgbiBpcyBmb3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAorICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIHJlYWxsb2Mgd2l0aCBhIHNpemUKKyAgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4KKworICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93aW5nIHRoZSBsYXN0LWZyZWUnZCBjaHVuaworICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4KKyovCisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKKworLyoKKyAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IG4pOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBuIGJ5dGVzLCBhbGlnbmVkCisgIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJndW1lbnQuCisKKyAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28uIElmIHRoZSBhcmd1bWVudCBpcworICBub3QgYSBwb3dlciBvZiB0d28sIHRoZSBuZWFyZXN0IGdyZWF0ZXIgcG93ZXIgaXMgdXNlZC4KKyAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0CisgIGJvdGhlciBjYWxsaW5nIG1lbWFsaWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLgorCisgIE92ZXJyZWxpYW5jZSBvbiBtZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLgorKi8KK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworCisvKgorICB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhlIHBhZ2UKKyAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwgNDA5NiBpcyB1c2VkLgorKi8KK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFsdWUpCisgIFNldHMgdHVuYWJsZSBwYXJhbWV0ZXJzIFRoZSBmb3JtYXQgaXMgdG8gcHJvdmlkZSBhCisgIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRoZW4gc2V0cyB0aGUKKyAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZhbHVlIGlmIGl0IGNhbiAoaS5lLiwgc28KKyAgbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1bCksIGFuZCByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBlbHNlCisgIDAuICBUbyB3b3JrYXJvdW5kIHRoZSBmYWN0IHRoYXQgbWFsbG9wdCBpcyBzcGVjaWZpZWQgdG8gdXNlIGludCwKKyAgbm90IHNpemVfdCBwYXJhbWV0ZXJzLCB0aGUgdmFsdWUgLTEgaXMgc3BlY2lhbGx5IHRyZWF0ZWQgYXMgdGhlCisgIG1heGltdW0gdW5zaWduZWQgc2l6ZV90IHZhbHVlLgorCisgIFNWSUQvWFBHL0FOU0kgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtIG51bWJlcnMgZm9yIG1hbGxvcHQsCisgIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlIGFyZSB1c2UgaW4gdGhpcyBtYWxsb2MsCisgIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhpcyBtYWxsb2MgYWxzbyBzdXBwb3J0cyBvdGhlcgorICBvcHRpb25zIGluIG1hbGxvcHQuIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4gIEJyaWVmbHksIHN1cHBvcnRlZAorICBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzIChsaXN0ZWQgZGVmYXVsdHMgYXJlIGZvciAidHlwaWNhbCIKKyAgY29uZmlndXJhdGlvbnMpLgorCisgIFN5bWJvbCAgICAgICAgICAgIHBhcmFtICMgIGRlZmF1bHQgICAgYWxsb3dlZCBwYXJhbSB2YWx1ZXMKKyAgTV9UUklNX1RIUkVTSE9MRCAgICAgLTEgICAyKjEwMjQqMTAyNCAgIGFueSAgICgtMSBkaXNhYmxlcykKKyAgTV9HUkFOVUxBUklUWSAgICAgICAgLTIgICAgIHBhZ2Ugc2l6ZSAgIGFueSBwb3dlciBvZiAyID49IHBhZ2Ugc2l6ZQorICBNX01NQVBfVEhSRVNIT0xEICAgICAtMyAgICAgIDI1NioxMDI0ICAgYW55ICAgKG9yIDAgaWYgbm8gTU1BUCBzdXBwb3J0KQorKi8KK2ludCBkbG1hbGxvcHQoaW50LCBpbnQpOworCisvKgorICBtYWxsb2NfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgdG90YWwKKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMKKyAgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZAorICByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4KKyAgRXZlbiBpZiBsb2NrcyBhcmUgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sCisgIHNvIHJlc3VsdHMgbWlnaHQgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKTsKKworLyoKKyAgbWFsbG9jX21heF9mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGlzCisgIHZhbHVlIHdpbGwgYmUgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZm9vdHByaW50IGlmIGRlYWxsb2NhdGVkIHNwYWNlCisgIGhhcyBiZWVuIHJlY2xhaW1lZCBieSB0aGUgc3lzdGVtLiBUaGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkCisgIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcyB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLAorICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZAorICBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLiAgRXZlbiBpZiBsb2NrcyBhcmUKKyAgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sIHNvIHJlc3VsdHMgbWlnaHQKKyAgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCk7CisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIG1hbGxpbmZvKCkKKyAgUmV0dXJucyAoYnkgY29weSkgYSBzdHJ1Y3QgY29udGFpbmluZyB2YXJpb3VzIHN1bW1hcnkgc3RhdGlzdGljczoKKworICBhcmVuYTogICAgIGN1cnJlbnQgdG90YWwgbm9uLW1tYXBwZWQgYnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCisgIG9yZGJsa3M6ICAgdGhlIG51bWJlciBvZiBmcmVlIGNodW5rcworICBzbWJsa3M6ICAgIGFsd2F5cyB6ZXJvLgorICBoYmxrczogICAgIGN1cnJlbnQgbnVtYmVyIG9mIG1tYXBwZWQgcmVnaW9ucworICBoYmxraGQ6ICAgIHRvdGFsIGJ5dGVzIGhlbGQgaW4gbW1hcHBlZCByZWdpb25zCisgIHVzbWJsa3M6ICAgdGhlIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlLiBUaGlzIHdpbGwgYmUgZ3JlYXRlcgorCQl0aGFuIGN1cnJlbnQgdG90YWwgaWYgdHJpbW1pbmcgaGFzIG9jY3VycmVkLgorICBmc21ibGtzOiAgIGFsd2F5cyB6ZXJvCisgIHVvcmRibGtzOiAgY3VycmVudCB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKG5vcm1hbCBvciBtbWFwcGVkKQorICBmb3JkYmxrczogIHRvdGFsIGZyZWUgc3BhY2UKKyAga2VlcGNvc3Q6ICB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBpZGVhbGx5IGJlIHJlbGVhc2VkCisJICAgICAgIGJhY2sgdG8gc3lzdGVtIHZpYSBtYWxsb2NfdHJpbS4gKCJpZGVhbGx5IiBtZWFucyB0aGF0CisJICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRjLikKKworICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2trZWVwaW5nIG1heQorICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3cmFwIGFyb3VuZCB6ZXJvIGFuZAorICB0aHVzIGJlIGluYWNjdXJhdGUuCisqLworc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIGlzIHNpbWlsYXIgdG8gY2FsbG9jLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYQorICBzaW5nbGUgY2xlYXJlZCBzcGFjZSwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBuX2VsZW1lbnRzCisgIGluZGVwZW5kZW50IGVsZW1lbnRzIHRoYXQgY2FuIGhvbGQgY29udGVudHMgb2Ygc2l6ZSBlbGVtX3NpemUsIGVhY2gKKyAgb2Ygd2hpY2ggc3RhcnRzIG91dCBjbGVhcmVkLCBhbmQgY2FuIGJlIGluZGVwZW5kZW50bHkgZnJlZWQsCisgIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWRqYWNlbnRseQorICBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aCBtdWx0aXBsZSBjYWxsb2NzIG9yCisgIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5IGluIHNvbWUKKyAgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwsIHdoaWNoIGlzCisgIHByb2JhYmx5IHRoZSBtb3N0IHR5cGljYWwgdXNhZ2UpLiBJZiBpdCBpcyBudWxsLCB0aGUgcmV0dXJuZWQgYXJyYXkKKyAgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28gYmUgZnJlZWQgd2hlbiBpdCBpcworICBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkgbXVzdCBiZSBvZiBhdCBsZWFzdAorICBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlIHBvaW50ZXJzIHRvIHRoZQorICBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NhbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kICJjaHVua3MiCisgIGlzIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSByZWd1bGFyIGNhbGxvYyBhbmQgYXNzaWduIHBvaW50ZXJzIGludG8gdGhpcworICBzcGFjZSB0byByZXByZXNlbnQgZWxlbWVudHMuICAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91IGNhbm5vdAorICBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQorCisgIGluZGVwZW5kZW50X2NhbGxvYyBzaW1wbGlmaWVzIGFuZCBzcGVlZHMgdXAgaW1wbGVtZW50YXRpb25zIG9mIG1hbnkKKyAga2luZHMgb2YgcG9vbHMuICBJdCBtYXkgYWxzbyBiZSB1c2VmdWwgd2hlbiBjb25zdHJ1Y3RpbmcgbGFyZ2UgZGF0YQorICBzdHJ1Y3R1cmVzIHRoYXQgaW5pdGlhbGx5IGhhdmUgYSBmaXhlZCBudW1iZXIgb2YgZml4ZWQtc2l6ZWQgbm9kZXMsCisgIGJ1dCB0aGUgbnVtYmVyIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCBzb21lIG9mIHRoZSBub2RlcworICBtYXkgbGF0ZXIgbmVlZCB0byBiZSBmcmVlZC4gRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IE5vZGUgeyBpbnQgaXRlbTsgc3RydWN0IE5vZGUqIG5leHQ7IH07CisKKyAgc3RydWN0IE5vZGUqIGJ1aWxkX2xpc3QoKSB7CisgICAgc3RydWN0IE5vZGUqKiBwb29sOworICAgIGludCBuID0gcmVhZF9udW1iZXJfb2Zfbm9kZXNfbmVlZGVkKCk7CisgICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7CisgICAgcG9vbCA9IChzdHJ1Y3QgTm9kZSoqKShpbmRlcGVuZGVudF9jYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBOb2RlKSwgMCk7CisgICAgaWYgKHBvb2wgPT0gMCkgZGllKCk7CisgICAgLy8gb3JnYW5pemUgaW50byBhIGxpbmtlZCBsaXN0Li4uCisgICAgc3RydWN0IE5vZGUqIGZpcnN0ID0gcG9vbFswXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbi0xOyArK2kpCisgICAgICBwb29sW2ldLT5uZXh0ID0gcG9vbFtpKzFdOworICAgIGZyZWUocG9vbCk7ICAgICAvLyBDYW4gbm93IGZyZWUgdGhlIGFycmF5IChvciBub3QsIGlmIGl0IGlzIG5lZWRlZCBsYXRlcikKKyAgICByZXR1cm4gZmlyc3Q7CisgIH0KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90LCBzaXplX3QsIHZvaWQqKik7CisKKy8qCisgIGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGFsbG9jYXRlcywgYWxsIGF0IG9uY2UsIGEgc2V0IG9mIG5fZWxlbWVudHMKKyAgY2h1bmtzIHdpdGggc2l6ZXMgaW5kaWNhdGVkIGluIHRoZSAic2l6ZXMiIGFycmF5LiAgICBJdCByZXR1cm5zCisgIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZXNlIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGNhbiBiZQorICBpbmRlcGVuZGVudGx5IGZyZWVkLCByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvCisgIGJlIGFkamFjZW50bHkgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGgKKyAgbXVsdGlwbGUgY2FsbG9jcyBvciBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eQorICBpbiBzb21lIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsKS4gSWYgaXQgaXMgbnVsbAorICB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28KKyAgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkKKyAgbXVzdCBiZSBvZiBhdCBsZWFzdCBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlCisgIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NvbWFsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgY2h1bmtzIGlzCisgIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSBhIHNpbmdsZSByZWd1bGFyIG1hbGxvYywgYW5kIGFzc2lnbiBwb2ludGVycyBhdAorICBwYXJ0aWN1bGFyIG9mZnNldHMgaW4gdGhlIGFnZ3JlZ2F0ZSBzcGFjZS4gKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdQorICBjYW5ub3QgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKKworICBpbmRlcGVuZGVudF9jb21hbGxhYyBkaWZmZXJzIGZyb20gaW5kZXBlbmRlbnRfY2FsbG9jIGluIHRoYXQgZWFjaAorICBlbGVtZW50IG1heSBoYXZlIGEgZGlmZmVyZW50IHNpemUsIGFuZCBhbHNvIHRoYXQgaXQgZG9lcyBub3QKKyAgYXV0b21hdGljYWxseSBjbGVhciBlbGVtZW50cy4KKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gYmUgdXNlZCB0byBzcGVlZCB1cCBhbGxvY2F0aW9uIGluIGNhc2VzCisgIHdoZXJlIHNldmVyYWwgc3RydWN0cyBvciBvYmplY3RzIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBhdCB0aGUKKyAgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IEhlYWQgeyAuLi4gfQorICBzdHJ1Y3QgRm9vdCB7IC4uLiB9CisKKyAgdm9pZCBzZW5kX21lc3NhZ2UoY2hhciogbXNnKSB7CisgICAgaW50IG1zZ2xlbiA9IHN0cmxlbihtc2cpOworICAgIHNpemVfdCBzaXplc1szXSA9IHsgc2l6ZW9mKHN0cnVjdCBIZWFkKSwgbXNnbGVuLCBzaXplb2Yoc3RydWN0IEZvb3QpIH07CisgICAgdm9pZCogY2h1bmtzWzNdOworICAgIGlmIChpbmRlcGVuZGVudF9jb21hbGxvYygzLCBzaXplcywgY2h1bmtzKSA9PSAwKQorICAgICAgZGllKCk7CisgICAgc3RydWN0IEhlYWQqIGhlYWQgPSAoc3RydWN0IEhlYWQqKShjaHVua3NbMF0pOworICAgIGNoYXIqICAgICAgICBib2R5ID0gKGNoYXIqKShjaHVua3NbMV0pOworICAgIHN0cnVjdCBGb290KiBmb290ID0gKHN0cnVjdCBGb290KikoY2h1bmtzWzJdKTsKKyAgICAvLyAuLi4KKyAgfQorCisgIEluIGdlbmVyYWwgdGhvdWdoLCBpbmRlcGVuZGVudF9jb21hbGxvYyBpcyB3b3J0aCB1c2luZyBvbmx5IGZvcgorICBsYXJnZXIgdmFsdWVzIG9mIG5fZWxlbWVudHMuIEZvciBzbWFsbCB2YWx1ZXMsIHlvdSBwcm9iYWJseSB3b24ndAorICBkZXRlY3QgZW5vdWdoIGRpZmZlcmVuY2UgZnJvbSBzZXJpZXMgb2YgbWFsbG9jIGNhbGxzIHRvIGJvdGhlci4KKworICBPdmVydXNlIG9mIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBpbmNyZWFzZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSwKKyAgc2luY2UgaXQgY2Fubm90IHJldXNlIGV4aXN0aW5nIG5vbmNvbnRpZ3VvdXMgc21hbGwgY2h1bmtzIHRoYXQKKyAgbWlnaHQgYmUgYXZhaWxhYmxlIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cy4KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QsIHNpemVfdCosIHZvaWQqKik7CisKKworLyoKKyAgcHZhbGxvYyhzaXplX3Qgbik7CisgIEVxdWl2YWxlbnQgdG8gdmFsbG9jKG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKKyAgcm91bmQgdXAgbiB0byBuZWFyZXN0IHBhZ2VzaXplLgorICovCit2b2lkKiAgZGxwdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY190cmltKHNpemVfdCBwYWQpOworCisgIElmIHBvc3NpYmxlLCBnaXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzCisgIHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYworICBwb29sIG9yIGluIHVudXNlZCBNTUFQIHNlZ21lbnRzLiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBmcmVlaW5nCisgIGxhcmdlIGJsb2NrcyBvZiBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5CisgIHJlcXVpcmVtZW50cyBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5vdCBndWFyYW50ZWUgdG8gcmVkdWNlCisgIG1lbW9yeS4gVW5kZXIgc29tZSBhbGxvY2F0aW9uIHBhdHRlcm5zLCBzb21lIGxhcmdlIGZyZWUgYmxvY2tzIG9mCisgIG1lbW9yeSB3aWxsIGJlIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUKKyAgZ2l2ZW4gYmFjayB0byB0aGUgc3lzdGVtLgorCisgIFRoZSBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJlZQorICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQgaXMgemVybywgb25seQorICB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWluIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICB3aWxsIGJlIGxlZnQuIE5vbi16ZXJvIGFyZ3VtZW50cyBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoCisgIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nCisgIHRvIHJlLW9idGFpbiBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLgorCisgIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuCisqLworaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLwordm9pZCAgZGxtYWxsb2Nfc3RhdHModm9pZCk7CisKKyNlbmRpZiAvKiBPTkxZX01TUEFDRVMgKi8KKworLyoKKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApOworCisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB5b3UgY2FuIGFjdHVhbGx5IHVzZSBpbgorICBhbiBhbGxvY2F0ZWQgY2h1bmssIHdoaWNoIG1heSBiZSBtb3JlIHRoYW4geW91IHJlcXVlc3RlZCAoYWx0aG91Z2gKKyAgb2Z0ZW4gbm90KSBkdWUgdG8gYWxpZ25tZW50IGFuZCBtaW5pbXVtIHNpemUgY29uc3RyYWludHMuCisgIFlvdSBjYW4gdXNlIHRoaXMgbWFueSBieXRlcyB3aXRob3V0IHdvcnJ5aW5nIGFib3V0CisgIG92ZXJ3cml0aW5nIG90aGVyIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIG5vdCBhIHBhcnRpY3VsYXJseSBncmVhdAorICBwcm9ncmFtbWluZyBwcmFjdGljZS4gbWFsbG9jX3VzYWJsZV9zaXplIGNhbiBiZSBtb3JlIHVzZWZ1bCBpbgorICBkZWJ1Z2dpbmcgYW5kIGFzc2VydGlvbnMsIGZvciBleGFtcGxlOgorCisgIHAgPSBtYWxsb2Mobik7CisgIGFzc2VydChtYWxsb2NfdXNhYmxlX3NpemUocCkgPj0gMjU2KTsKKyovCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCopOworCisKKyNpZiBNU1BBQ0VTCisKKy8qCisgIG1zcGFjZSBpcyBhbiBvcGFxdWUgdHlwZSByZXByZXNlbnRpbmcgYW4gaW5kZXBlbmRlbnQKKyAgcmVnaW9uIG9mIHNwYWNlIHRoYXQgc3VwcG9ydHMgbXNwYWNlX21hbGxvYywgZXRjLgorKi8KK3R5cGVkZWYgdm9pZCogbXNwYWNlOworCisvKgorICBjcmVhdGVfbXNwYWNlIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgaW5kZXBlbmRlbnQgc3BhY2Ugd2l0aCB0aGUKKyAgZ2l2ZW4gaW5pdGlhbCBjYXBhY2l0eSwgb3IsIGlmIDAsIHRoZSBkZWZhdWx0IGdyYW51bGFyaXR5IHNpemUuICBJdAorICByZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gc3lzdGVtIG1lbW9yeSBhdmFpbGFibGUgdG8gY3JlYXRlIHRoZQorICBzcGFjZS4gIElmIGFyZ3VtZW50IGxvY2tlZCBpcyBub24temVybywgdGhlIHNwYWNlIHVzZXMgYSBzZXBhcmF0ZQorICBsb2NrIHRvIGNvbnRyb2wgYWNjZXNzLiBUaGUgY2FwYWNpdHkgb2YgdGhlIHNwYWNlIHdpbGwgZ3JvdworICBkeW5hbWljYWxseSBhcyBuZWVkZWQgdG8gc2VydmljZSBtc3BhY2VfbWFsbG9jIHJlcXVlc3RzLiAgWW91IGNhbgorICBjb250cm9sIHRoZSBzaXplcyBvZiBpbmNyZW1lbnRhbCBpbmNyZWFzZXMgb2YgdGhpcyBzcGFjZSBieQorICBjb21waWxpbmcgd2l0aCBhIGRpZmZlcmVudCBERUZBVUxUX0dSQU5VTEFSSVRZIG9yIGR5bmFtaWNhbGx5CisgIHNldHRpbmcgd2l0aCBtYWxsb3B0KE1fR1JBTlVMQVJJVFksIHZhbHVlKS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOworCisvKgorICBkZXN0cm95X21zcGFjZSBkZXN0cm95cyB0aGUgZ2l2ZW4gc3BhY2UsIGFuZCBhdHRlbXB0cyB0byByZXR1cm4gYWxsCisgIG9mIGl0cyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtLCByZXR1cm5pbmcgdGhlIHRvdGFsIG51bWJlciBvZgorICBieXRlcyBmcmVlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24sIHRoZSByZXN1bHRzIG9mIGFjY2VzcyB0byBhbGwgbWVtb3J5CisgIHVzZWQgYnkgdGhlIHNwYWNlIGJlY29tZSB1bmRlZmluZWQuCisqLworc2l6ZV90IGRlc3Ryb3lfbXNwYWNlKG1zcGFjZSBtc3ApOworCisvKgorICBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSB1c2VzIHRoZSBtZW1vcnkgc3VwcGxpZWQgYXMgdGhlIGluaXRpYWwgYmFzZQorICBvZiBhIG5ldyBtc3BhY2UuIFBhcnQgKGxlc3MgdGhhbiAxMjgqc2l6ZW9mKHNpemVfdCkgYnl0ZXMpIG9mIHRoaXMKKyAgc3BhY2UgaXMgdXNlZCBmb3IgYm9va2tlZXBpbmcsIHNvIHRoZSBjYXBhY2l0eSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMKKyAgbGFyZ2UuIChPdGhlcndpc2UgMCBpcyByZXR1cm5lZC4pIFdoZW4gdGhpcyBpbml0aWFsIHNwYWNlIGlzCisgIGV4aGF1c3RlZCwgYWRkaXRpb25hbCBtZW1vcnkgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uCisgIERlc3Ryb3lpbmcgdGhpcyBzcGFjZSB3aWxsIGRlYWxsb2NhdGUgYWxsIGFkZGl0aW9uYWxseSBhbGxvY2F0ZWQKKyAgc3BhY2UgKGlmIHBvc3NpYmxlKSBidXQgbm90IHRoZSBpbml0aWFsIGJhc2UuCisqLworbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rcyBjb250cm9scyB3aGV0aGVyIHJlcXVlc3RzIGZvciBsYXJnZSBjaHVua3MKKyAgYXJlIGFsbG9jYXRlZCBpbiB0aGVpciBvd24gbW1hcHBlZCByZWdpb25zLCBzZXBhcmF0ZSBmcm9tIG90aGVycyBpbgorICB0aGlzIG1zcGFjZS4gQnkgZGVmYXVsdCB0aGlzIGlzIGVuYWJsZWQsIHdoaWNoIHJlZHVjZXMKKyAgZnJhZ21lbnRhdGlvbi4gSG93ZXZlciwgc3VjaCBjaHVua3MgYXJlIG5vdCBuZWNlc3NhcmlseSByZWxlYXNlZCB0bworICB0aGUgc3lzdGVtIHVwb24gZGVzdHJveV9tc3BhY2UuICBEaXNhYmxpbmcgYnkgc2V0dGluZyB0byBmYWxzZSBtYXkKKyAgaW5jcmVhc2UgZnJhZ21lbnRhdGlvbiwgYnV0IGF2b2lkcyBsZWFrYWdlIHdoZW4gcmVseWluZyBvbgorICBkZXN0cm95X21zcGFjZSB0byByZWxlYXNlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nIHRoaXMgc3BhY2UuCisqLworaW50IG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rcyhtc3BhY2UgbXNwLCBpbnQgZW5hYmxlKTsKKworCisvKgorICBtc3BhY2VfbWFsbG9jIGJlaGF2ZXMgYXMgbWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcyk7CisKKy8qCisgIG1zcGFjZV9mcmVlIGJlaGF2ZXMgYXMgZnJlZSwgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisKKyAgSWYgY29tcGlsZWQgd2l0aCBGT09URVJTPT0xLCBtc3BhY2VfZnJlZSBpcyBub3QgYWN0dWFsbHkgbmVlZGVkLgorICBmcmVlIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfZnJlZSBiZWNhdXNlIGZyZWVkIGNodW5rcyBmcm9tCisgIGFueSBzcGFjZSBhcmUgaGFuZGxlZCBieSB0aGVpciBvcmlnaW5hdGluZyBzcGFjZXMuCisqLwordm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkKiBtZW0pOworCisvKgorICBtc3BhY2VfcmVhbGxvYyBiZWhhdmVzIGFzIHJlYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX3JlYWxsb2MgaXMgbm90IGFjdHVhbGx5CisgIG5lZWRlZC4gIHJlYWxsb2MgbWF5IGJlIGNhbGxlZCBpbnN0ZWFkIG9mIG1zcGFjZV9yZWFsbG9jIGJlY2F1c2UKKyAgcmVhbGxvY2VkIGNodW5rcyBmcm9tIGFueSBzcGFjZSBhcmUgaGFuZGxlZCBieSB0aGVpciBvcmlnaW5hdGluZworICBzcGFjZXMuCisqLwordm9pZCogbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCogbWVtLCBzaXplX3QgbmV3c2l6ZSk7CisKKy8qCisgIG1zcGFjZV9jYWxsb2MgYmVoYXZlcyBhcyBjYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOworCisvKgorICBtc3BhY2VfbWVtYWxpZ24gYmVoYXZlcyBhcyBtZW1hbGlnbiwgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21lbWFsaWduKG1zcGFjZSBtc3AsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcyk7CisKKy8qCisgIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MgYmVoYXZlcyBhcyBpbmRlcGVuZGVudF9jYWxsb2MsIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NvbWFsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfbWF4X2Zvb3RwcmludCgpIHJldHVybnMgdGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4KKyovCitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCk7CisKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbXNwYWNlX21hbGxpbmZvIGJlaGF2ZXMgYXMgbWFsbGluZm8sIGJ1dCByZXBvcnRzIHByb3BlcnRpZXMgb2YKKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3N0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbWFsbG9jX3VzYWJsZV9zaXplOworKi8KKyAgc2l6ZV90IG1zcGFjZV91c2FibGVfc2l6ZSh2b2lkKiBtZW0pOworCisvKgorICBtc3BhY2VfbWFsbG9jX3N0YXRzIGJlaGF2ZXMgYXMgbWFsbG9jX3N0YXRzLCBidXQgcmVwb3J0cworICBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV90cmltIGJlaGF2ZXMgYXMgbWFsbG9jX3RyaW0sIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKTsKKworLyoKKyAgQW4gYWxpYXMgZm9yIG1hbGxvcHQuCisqLworaW50IG1zcGFjZV9tYWxsb3B0KGludCwgaW50KTsKKworI2VuZGlmIC8qIE1TUEFDRVMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9OyAgLyogZW5kIG9mIGV4dGVybiAiQyIgKi8KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgVG8gbWFrZSBhIGZ1bGx5IGN1c3RvbWl6YWJsZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSwgY3V0IGV2ZXJ5dGhpbmcKKyAgYWJvdmUgdGhpcyBsaW5lLCBwdXQgaW50byBmaWxlIG1hbGxvYy5oLCBlZGl0IHRvIHN1aXQsIGFuZCAjaW5jbHVkZSBpdAorICBvbiB0aGUgbmV4dCBsaW5lLCBhcyB3ZWxsIGFzIGluIHByb2dyYW1zIHRoYXQgdXNlIHRoaXMgbWFsbG9jLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKy8qICNpbmNsdWRlICJtYWxsb2MuaCIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW50ZXJuYWwgI2luY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIFdJTjMyCisjaWZuZGVmIF9fR05VQ19fCisjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MTQ2ICkgLyogbm8gInVuc2lnbmVkIiB3YXJuaW5ncyAqLworI2VuZGlmCisjZW5kaWYgLyogV0lOMzIgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgIC8qIGZvciBwcmludGluZyBpbiBtYWxsb2Nfc3RhdHMgKi8KKworI2lmbmRlZiBMQUNLU19FUlJOT19ICisjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgLyogZm9yIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2VuZGlmIC8qIExBQ0tTX0VSUk5PX0ggKi8KKyNpZiBGT09URVJTCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAgLyogZm9yIG1hZ2ljIGluaXRpYWxpemF0aW9uICovCisjZW5kaWYgLyogRk9PVEVSUyAqLworI2lmbmRlZiBMQUNLU19TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgIC8qIGZvciBhYm9ydCgpICovCisjZW5kaWYgLyogTEFDS1NfU1RETElCX0ggKi8KKyNpZmRlZiBERUJVRworI2lmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFCisjZGVmaW5lIGFzc2VydCh4KSBpZighKHgpKSBBQk9SVAorI2Vsc2UgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZiAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2Vsc2UgIC8qIERFQlVHICovCisjaWZuZGVmIGFzc2VydAorI2RlZmluZSBhc3NlcnQoeCkKKyNlbmRpZgorI2RlZmluZSBERUJVRyAwCisjZW5kaWYgLyogREVCVUcgKi8KKyNpZm5kZWYgTEFDS1NfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAvKiBmb3IgbWVtc2V0IGV0YyAqLworI2VuZGlmICAvKiBMQUNLU19TVFJJTkdfSCAqLworI2lmIFVTRV9CVUlMVElOX0ZGUworI2lmbmRlZiBMQUNLU19TVFJJTkdTX0gKKyNpbmNsdWRlIDxzdHJpbmdzLmg+ICAgICAvKiBmb3IgZmZzICovCisjZW5kaWYgLyogTEFDS1NfU1RSSU5HU19IICovCisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovCisjaWYgSEFWRV9NTUFQCisjaWZuZGVmIExBQ0tTX1NZU19NTUFOX0gKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPiAgICAvKiBmb3IgbW1hcCAqLworI2VuZGlmIC8qIExBQ0tTX1NZU19NTUFOX0ggKi8KKyNpZm5kZWYgTEFDS1NfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogTEFDS1NfRkNOVExfSCAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworI2lmbmRlZiBMQUNLU19VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogZm9yIHNicmssIHN5c2NvbmYgKi8KKyNlbHNlIC8qIExBQ0tTX1VOSVNURF9IICovCisjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKQorZXh0ZXJuIHZvaWQqICAgICBzYnJrKHB0cmRpZmZfdCk7CisjZW5kaWYgLyogRnJlZUJTRCBldGMgKi8KKyNlbmRpZiAvKiBMQUNLU19VTklTVERfSCAqLworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGxvY2tpbmcgKi8KKyNpZiBVU0VfTE9DS1MKKyNpZm5kZWYgV0lOMzIKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaWYgZGVmaW5lZCAoX19TVlI0KSAmJiBkZWZpbmVkIChfX3N1bikgIC8qIHNvbGFyaXMgKi8KKyNpbmNsdWRlIDx0aHJlYWQuaD4KKyNlbmRpZiAvKiBzb2xhcmlzICovCisjZWxzZQorI2lmbmRlZiBfTV9BTUQ2NAorLyogVGhlc2UgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiBBTUQ2NCBidWlsZHMgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKyNpZm5kZWYgX19NSU5HVzMyX18KK0xPTkcgX19jZGVjbCBfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoTE9ORyB2b2xhdGlsZSAqRGVzdCwgTE9ORyBFeGNoYW5nZSwgTE9ORyBDb21wKTsKK0xPTkcgX19jZGVjbCBfSW50ZXJsb2NrZWRFeGNoYW5nZShMT05HIHZvbGF0aWxlICpUYXJnZXQsIExPTkcgVmFsdWUpOworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2VuZGlmIC8qIF9NX0FNRDY0ICovCisjaWZuZGVmIF9fTUlOR1czMl9fCisjcHJhZ21hIGludHJpbnNpYyAoX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKQorI3ByYWdtYSBpbnRyaW5zaWMgKF9JbnRlcmxvY2tlZEV4Y2hhbmdlKQorI2Vsc2UKKyAgLyogLS1bIHN0YXJ0IEdDQyBjb21wYXRpYmlsaXR5IF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqIENvbXBhdGliaWxpdHkgPGludHJpbl94ODYuaD4gaGVhZGVyIGZvciBHQ0MgLS0gR0NDIGVxdWl2YWxlbnRzIG9mIGludHJpbnNpYworICAgKiBNaWNyb3NvZnQgVmlzdWFsIEMrKyBmdW5jdGlvbnMuIE9yaWdpbmFsbHkgZGV2ZWxvcGVkIGZvciB0aGUgUmVhY3RPUworICAgKiAoPGh0dHA6Ly93d3cucmVhY3Rvcy5vcmcvPikgYW5kIFRpbnlLcm5sICg8aHR0cDovL3d3dy50aW55a3JubC5vcmcvPikKKyAgICogcHJvamVjdHMuCisgICAqCisgICAqIENvcHlyaWdodCAoYykgMjAwNiBLSks6Okh5cGVyaW9uIDxoYWNrYnVubnlAcmVhY3Rvcy5jb20+CisgICAqCisgICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgICAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgICAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAgICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgICAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICAgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgKgorICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICAgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAgICoKKyAgICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAgICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgICAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICAgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgICAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgICAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgKi8KKworICAvKioqIEF0b21pYyBvcGVyYXRpb25zICoqKi8KKyAgI2lmIChfX0dOVUNfXyAqIDEwMDAwICsgX19HTlVDX01JTk9SX18gKiAxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKSA+IDQwMTAwCisgICAgI2RlZmluZSBfUmVhZFdyaXRlQmFycmllcigpIF9fc3luY19zeW5jaHJvbml6ZSgpCisgICNlbHNlCisgICAgc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGxvbmcgX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KHZvbGF0aWxlIGxvbmcgKiBjb25zdCBUYXJnZXQsIGNvbnN0IGxvbmcgVmFsdWUpCisgICAgeworICAgICAgbG9uZyByZXM7CisgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZyV6MCAlMiwgJTAiIDogIj1nIiAoKihUYXJnZXQpKSwgIj1yIiAocmVzKSA6ICIxIiAoVmFsdWUpKTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHN0YXRpYyB2b2lkIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIF9NZW1vcnlCYXJyaWVyKHZvaWQpCisgICAgeworICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgOiA6IDogIm1lbW9yeSIpOworICAgIH0KKyAgICAjZGVmaW5lIF9SZWFkV3JpdGVCYXJyaWVyKCkgX01lbW9yeUJhcnJpZXIoKQorICAjZW5kaWYKKyAgLyogQlVHQlVHOiBHQ0Mgb25seSBzdXBwb3J0cyBmdWxsIGJhcnJpZXJzICovCisgIHN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBsb25nIF9JbnRlcmxvY2tlZEV4Y2hhbmdlKHZvbGF0aWxlIGxvbmcgKiBjb25zdCBUYXJnZXQsIGNvbnN0IGxvbmcgVmFsdWUpCisgIHsKKyAgICAvKiBOT1RFOiBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQgd291bGQgYmUgYW4gYWNxdWlyZSBiYXJyaWVyLCBzbyB3ZSBmb3JjZSBhIGZ1bGwgYmFycmllciAqLworICAgIF9SZWFkV3JpdGVCYXJyaWVyKCk7CisgICAgcmV0dXJuIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldChUYXJnZXQsIFZhbHVlKTsKKyAgfQorICAvKiAtLVsgZW5kIEdDQyBjb21wYXRpYmlsaXR5IF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZW5kaWYKKyNkZWZpbmUgaW50ZXJsb2NrZWRjb21wYXJlZXhjaGFuZ2UgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlCisjZGVmaW5lIGludGVybG9ja2VkZXhjaGFuZ2UgX0ludGVybG9ja2VkRXhjaGFuZ2UKKyNlbmRpZiAvKiBXaW4zMiAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGJpdCBzY2FubmluZyBvbiB3aW4zMiAqLworI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisjaWZuZGVmIEJpdFNjYW5Gb3J3YXJkCS8qIFRyeSB0byBhdm9pZCBwdWxsaW5nIGluIFdpbk5ULmggKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5Gb3J3YXJkKHVuc2lnbmVkIGxvbmcgKmluZGV4LCB1bnNpZ25lZCBsb25nIG1hc2spOwordW5zaWduZWQgY2hhciBfQml0U2NhblJldmVyc2UodW5zaWduZWQgbG9uZyAqaW5kZXgsIHVuc2lnbmVkIGxvbmcgbWFzayk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisjZGVmaW5lIEJpdFNjYW5Gb3J3YXJkIF9CaXRTY2FuRm9yd2FyZAorI2RlZmluZSBCaXRTY2FuUmV2ZXJzZSBfQml0U2NhblJldmVyc2UKKyNwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuRm9yd2FyZCkKKyNwcmFnbWEgaW50cmluc2ljKF9CaXRTY2FuUmV2ZXJzZSkKKyNlbmRpZiAvKiBCaXRTY2FuRm9yd2FyZCAqLworI2VuZGlmIC8qIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwICovCisKKyNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgbWFsbG9jX2dldHBhZ2VzaXplCisjICBpZmRlZiBfU0NfUEFHRVNJWkUgICAgICAgICAvKiBzb21lIFNWUjQgc3lzdGVtcyBvbWl0IGFuIHVuZGVyc2NvcmUgKi8KKyMgICAgaWZuZGVmIF9TQ19QQUdFX1NJWkUKKyMgICAgICBkZWZpbmUgX1NDX1BBR0VfU0laRSBfU0NfUEFHRVNJWkUKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZmRlZiBfU0NfUEFHRV9TSVpFCisjICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgc3lzY29uZihfU0NfUEFHRV9TSVpFKQorIyAgZWxzZQorIyAgICBpZiBkZWZpbmVkKEJTRCkgfHwgZGVmaW5lZChER1VYKSB8fCBkZWZpbmVkKEhBVkVfR0VUUEFHRVNJWkUpCisgICAgICAgZXh0ZXJuIHNpemVfdCBnZXRwYWdlc2l6ZSgpOworIyAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgV0lOMzIgLyogdXNlIHN1cHBsaWVkIGVtdWxhdGlvbiBvZiBnZXRwYWdlc2l6ZSAqLworIyAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCisjICAgICAgZWxzZQorIyAgICAgICAgaWZuZGVmIExBQ0tTX1NZU19QQVJBTV9ICisjICAgICAgICAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgorIyAgICAgICAgZW5kaWYKKyMgICAgICAgIGlmZGVmIEVYRUNfUEFHRVNJWkUKKyMgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBFWEVDX1BBR0VTSVpFCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGlmZGVmIE5CUEcKKyMgICAgICAgICAgICBpZm5kZWYgQ0xTSVpFCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEcKKyMgICAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIChOQlBHICogQ0xTSVpFKQorIyAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICBpZmRlZiBOQlBDCisjICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEMKKyMgICAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgICBpZmRlZiBQQUdFU0laRQorIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIFBBR0VTSVpFCisjICAgICAgICAgICAgICBlbHNlIC8qIGp1c3QgZ3Vlc3MgKi8KKyMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoKHNpemVfdCk0MDk2VSkKKyMgICAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgZW5kaWYKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNlbmRpZgorCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBzaXplX3QgYW5kIGFsaWdubWVudCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZSBieXRlIGFuZCBiaXQgc2l6ZSBvZiBhIHNpemVfdCAqLworI2RlZmluZSBTSVpFX1RfU0laRSAgICAgICAgIChzaXplb2Yoc2l6ZV90KSkKKyNkZWZpbmUgU0laRV9UX0JJVFNJWkUgICAgICAoc2l6ZW9mKHNpemVfdCkgPDwgMykKKworLyogU29tZSBjb25zdGFudHMgY29lcmNlZCB0byBzaXplX3QgKi8KKy8qIEFubm95aW5nIGJ1dCBuZWNlc3NhcnkgdG8gYXZvaWQgZXJyb3JzIG9uIHNvbWUgcGxhdGZvcm1zICovCisjZGVmaW5lIFNJWkVfVF9aRVJPICAgICAgICAgKChzaXplX3QpMCkKKyNkZWZpbmUgU0laRV9UX09ORSAgICAgICAgICAoKHNpemVfdCkxKQorI2RlZmluZSBTSVpFX1RfVFdPICAgICAgICAgICgoc2l6ZV90KTIpCisjZGVmaW5lIFNJWkVfVF9GT1VSICAgICAgICAgKChzaXplX3QpNCkKKyNkZWZpbmUgVFdPX1NJWkVfVF9TSVpFUyAgICAoU0laRV9UX1NJWkU8PDEpCisjZGVmaW5lIEZPVVJfU0laRV9UX1NJWkVTICAgKFNJWkVfVF9TSVpFPDwyKQorI2RlZmluZSBTSVhfU0laRV9UX1NJWkVTICAgIChGT1VSX1NJWkVfVF9TSVpFUytUV09fU0laRV9UX1NJWkVTKQorI2RlZmluZSBIQUxGX01BWF9TSVpFX1QgICAgIChNQVhfU0laRV9UIC8gMlUpCisKKy8qIFRoZSBiaXQgbWFzayB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIE1BTExPQ19BTElHTk1FTlQgKi8KKyNkZWZpbmUgQ0hVTktfQUxJR05fTUFTSyAgICAoTUFMTE9DX0FMSUdOTUVOVCAtIFNJWkVfVF9PTkUpCisKKy8qIFRydWUgaWYgYWRkcmVzcyBhIGhhcyBhY2NlcHRhYmxlIGFsaWdubWVudCAqLworI2RlZmluZSBpc19hbGlnbmVkKEEpICAgICAgICgoKHNpemVfdCkoKEEpKSAmIChDSFVOS19BTElHTl9NQVNLKSkgPT0gMCkKKworLyogdGhlIG51bWJlciBvZiBieXRlcyB0byBvZmZzZXQgYW4gYWRkcmVzcyB0byBhbGlnbiBpdCAqLworI2RlZmluZSBhbGlnbl9vZmZzZXQoQSlcCisgKCgoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKT8gMCA6XAorICAoKE1BTExPQ19BTElHTk1FTlQgLSAoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSkgJiBDSFVOS19BTElHTl9NQVNLKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTU1BUCBwcmVsaW1pbmFyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgIElmIEhBVkVfTU9SRUNPUkUgb3IgSEFWRV9NTUFQIGFyZSBmYWxzZSwgd2UganVzdCBkZWZpbmUgY2FsbHMgYW5kCisgICBjaGVja3MgdG8gZmFpbCBzbyBjb21waWxlciBvcHRpbWl6ZXIgY2FuIGRlbGV0ZSBjb2RlIHJhdGhlciB0aGFuCisgICB1c2luZyBzbyBtYW55ICIjaWYicy4KKyovCisKKworLyogTU9SRUNPUkUgYW5kIE1NQVAgbXVzdCByZXR1cm4gTUZBSUwgb24gZmFpbHVyZSAqLworI2RlZmluZSBNRkFJTCAgICAgICAgICAgICAgICAoKHZvaWQqKShNQVhfU0laRV9UKSkKKyNkZWZpbmUgQ01GQUlMICAgICAgICAgICAgICAgKChjaGFyKikoTUZBSUwpKSAvKiBkZWZpbmVkIGZvciBjb252ZW5pZW5jZSAqLworCisjaWYgSEFWRV9NTUFQCisKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgTVVOTUFQX0RFRkFVTFQoYSwgcykgIG11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgTU1BUF9QUk9UICAgICAgICAgICAgKFBST1RfUkVBRHxQUk9UX1dSSVRFKQorI2lmICFkZWZpbmVkKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQoTUFQX0FOT04pCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMgICAgICAgIE1BUF9BTk9OCisjZW5kaWYgLyogTUFQX0FOT04gKi8KKyNpZmRlZiBNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTKQorI2RlZmluZSBNTUFQX0RFRkFVTFQocykgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgLTEsIDApCisjZWxzZSAvKiBNQVBfQU5PTllNT1VTICovCisvKgorICAgTmVhcmx5IGFsbCB2ZXJzaW9ucyBvZiBtbWFwIHN1cHBvcnQgTUFQX0FOT05ZTU9VUywgc28gdGhlIGZvbGxvd2luZworICAgaXMgdW5saWtlbHkgdG8gYmUgbmVlZGVkLCBidXQgaXMgc3VwcGxpZWQganVzdCBpbiBjYXNlLgorKi8KKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFKQorc3RhdGljIGludCBkZXZfemVyb19mZCA9IC0xOyAvKiBDYWNoZWQgZmlsZSBkZXNjcmlwdG9yIGZvciAvZGV2L3plcm8uICovCisjZGVmaW5lIE1NQVBfREVGQVVMVChzKSAoKGRldl96ZXJvX2ZkIDwgMCkgPyBcCisJICAgKGRldl96ZXJvX2ZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKSwgXAorCSAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpIDogXAorCSAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpCisjZW5kaWYgLyogTUFQX0FOT05ZTU9VUyAqLworCisjZGVmaW5lIERJUkVDVF9NTUFQX0RFRkFVTFQocykgTU1BUF9ERUZBVUxUKHMpCisKKyNlbHNlIC8qIFdJTjMyICovCisKKy8qIFdpbjMyIE1NQVAgdmlhIFZpcnR1YWxBbGxvYyAqLworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQqIHdpbjMybW1hcChzaXplX3Qgc2l6ZSkgeworICB2b2lkKiBwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkV8TUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogRm9yIGRpcmVjdCBNTUFQLCB1c2UgTUVNX1RPUF9ET1dOIHRvIG1pbmltaXplIGludGVyZmVyZW5jZSAqLworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQqIHdpbjMyZGlyZWN0X21tYXAoc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVR8TUVNX1RPUF9ET1dOLAorCQkJICAgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyByZWxlYXNpbmcgY29hbGVzZWQgc2VnbWVudHMgKi8KK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgd2luMzJtdW5tYXAodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgeworICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04gbWluZm87CisgIGNoYXIqIGNwdHIgPSAoY2hhciopcHRyOworICB3aGlsZSAoc2l6ZSkgeworICAgIGlmIChWaXJ0dWFsUXVlcnkoY3B0ciwgJm1pbmZvLCBzaXplb2YobWluZm8pKSA9PSAwKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmIChtaW5mby5CYXNlQWRkcmVzcyAhPSBjcHRyIHx8IG1pbmZvLkFsbG9jYXRpb25CYXNlICE9IGNwdHIgfHwKKwltaW5mby5TdGF0ZSAhPSBNRU1fQ09NTUlUIHx8IG1pbmZvLlJlZ2lvblNpemUgPiBzaXplKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmIChWaXJ0dWFsRnJlZShjcHRyLCAwLCBNRU1fUkVMRUFTRSkgPT0gMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICBjcHRyICs9IG1pbmZvLlJlZ2lvblNpemU7CisgICAgc2l6ZSAtPSBtaW5mby5SZWdpb25TaXplOworICB9CisgIHJldHVybiAwOworfQorCisjZGVmaW5lIE1NQVBfREVGQVVMVChzKSAgICAgICAgICAgICB3aW4zMm1tYXAocykKKyNkZWZpbmUgTVVOTUFQX0RFRkFVTFQoYSwgcykgICAgICAgIHdpbjMybXVubWFwKChhKSwgKHMpKQorI2RlZmluZSBESVJFQ1RfTU1BUF9ERUZBVUxUKHMpICAgICAgd2luMzJkaXJlY3RfbW1hcChzKQorI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisKKyNpZiBIQVZFX01SRU1BUAorI2lmbmRlZiBXSU4zMgorI2RlZmluZSBNUkVNQVBfREVGQVVMVChhZGRyLCBvc3osIG5zeiwgbXYpIG1yZW1hcCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkKKyNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIEhBVkVfTVJFTUFQICovCisKKworLyoqCisgKiBEZWZpbmUgQ0FMTF9NT1JFQ09SRQorICovCisjaWYgSEFWRV9NT1JFQ09SRQorICAgICNpZmRlZiBNT1JFQ09SRQorCSNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICBNT1JFQ09SRShTKQorICAgICNlbHNlICAvKiBNT1JFQ09SRSAqLworCSNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICBNT1JFQ09SRV9ERUZBVUxUKFMpCisgICAgI2VuZGlmIC8qIE1PUkVDT1JFICovCisjZWxzZSAgLyogSEFWRV9NT1JFQ09SRSAqLworICAgICNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICAgICAgTUZBSUwKKyNlbmRpZiAvKiBIQVZFX01PUkVDT1JFICovCisKKy8qKgorICogRGVmaW5lIENBTExfTU1BUC9DQUxMX01VTk1BUC9DQUxMX0RJUkVDVF9NTUFQCisgKi8KKyNpZiBIQVZFX01NQVAKKyAgICAjZGVmaW5lIElTX01NQVBQRURfQklUICAgICAgICAgIChTSVpFX1RfT05FKQorICAgICNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgICAgKFNJWkVfVF9PTkUpCisKKyAgICAjaWZkZWYgTU1BUAorCSNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICBNTUFQKHMpCisgICAgI2Vsc2UgLyogTU1BUCAqLworCSNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICBNTUFQX0RFRkFVTFQocykKKyAgICAjZW5kaWYgLyogTU1BUCAqLworICAgICNpZmRlZiBNVU5NQVAKKwkjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgTVVOTUFQKChhKSwgKHMpKQorICAgICNlbHNlIC8qIE1VTk1BUCAqLworCSNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICBNVU5NQVBfREVGQVVMVCgoYSksIChzKSkKKyAgICAjZW5kaWYgLyogTVVOTUFQICovCisgICAgI2lmZGVmIERJUkVDVF9NTUFQCisJI2RlZmluZSBDQUxMX0RJUkVDVF9NTUFQKHMpIERJUkVDVF9NTUFQKHMpCisgICAgI2Vsc2UgLyogRElSRUNUX01NQVAgKi8KKwkjZGVmaW5lIENBTExfRElSRUNUX01NQVAocykgRElSRUNUX01NQVBfREVGQVVMVChzKQorICAgICNlbmRpZiAvKiBESVJFQ1RfTU1BUCAqLworI2Vsc2UgIC8qIEhBVkVfTU1BUCAqLworICAgICNkZWZpbmUgSVNfTU1BUFBFRF9CSVQgICAgICAgICAgKFNJWkVfVF9aRVJPKQorICAgICNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgICAgKFNJWkVfVF9aRVJPKQorCisgICAgI2RlZmluZSBNTUFQKHMpICAgICAgICAgICAgICAgICBNRkFJTAorICAgICNkZWZpbmUgTVVOTUFQKGEsIHMpICAgICAgICAgICAgKC0xKQorICAgICNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgICAgTUZBSUwKKyAgICAjZGVmaW5lIENBTExfRElSRUNUX01NQVAocykgICAgIERJUkVDVF9NTUFQKHMpCisgICAgI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgICAgICBNTUFQKHMpCisgICAgI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICAgICBNVU5NQVAoKGEpLCAocykpCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisKKy8qKgorICogRGVmaW5lIENBTExfTVJFTUFQCisgKi8KKyNpZiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAKKyAgICAjaWZkZWYgTVJFTUFQCisJI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpIE1SRU1BUCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkKKyAgICAjZWxzZSAvKiBNUkVNQVAgKi8KKwkjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgTVJFTUFQX0RFRkFVTFQoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisgICAgI2VuZGlmIC8qIE1SRU1BUCAqLworI2Vsc2UgIC8qIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUCAqLworICAgICNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSAgICAgTUZBSUwKKyNlbmRpZiAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8KKworLyogbXN0YXRlIGJpdCBzZXQgaWYgY29udGluZ3VvdXMgbW9yZWNvcmUgZGlzYWJsZWQgb3IgZmFpbGVkICovCisjZGVmaW5lIFVTRV9OT05DT05USUdVT1VTX0JJVCAoNFUpCisKKy8qIHNlZ21lbnQgYml0IHNldCBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSAqLworI2RlZmluZSBFWFRFUk5fQklUICAgICAgICAgICAgKDhVKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2NrIHByZWxpbWluYXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFdoZW4gbG9ja3MgYXJlIGRlZmluZWQsIHRoZXJlIGlzIG9uZSBnbG9iYWwgbG9jaywgcGx1cworICBvbmUgcGVyLW1zcGFjZSBsb2NrLgorCisgIFRoZSBnbG9iYWwgbG9ja19lbnN1cmVzIHRoYXQgbXBhcmFtcy5tYWdpYyBhbmQgb3RoZXIgdW5pcXVlCisgIG1wYXJhbXMgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuIEl0IGFsc28gcHJvdGVjdHMKKyAgc2VxdWVuY2VzIG9mIGNhbGxzIHRvIE1PUkVDT1JFLiAgSW4gbWFueSBjYXNlcyBzeXNfYWxsb2MgcmVxdWlyZXMKKyAgdHdvIGNhbGxzLCB0aGF0IHNob3VsZCBub3QgYmUgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyBieSBvdGhlcgorICB0aHJlYWRzLiAgVGhpcyBkb2VzIG5vdCBwcm90ZWN0IGFnYWluc3QgZGlyZWN0IGNhbGxzIHRvIE1PUkVDT1JFCisgIGJ5IG90aGVyIHRocmVhZHMgbm90IHVzaW5nIHRoaXMgbG9jaywgc28gdGhlcmUgaXMgc3RpbGwgY29kZSB0bworICBjb3BlIHRoZSBiZXN0IHdlIGNhbiBvbiBpbnRlcmZlcmVuY2UuCisKKyAgUGVyLW1zcGFjZSBsb2NrcyBzdXJyb3VuZCBjYWxscyB0byBtYWxsb2MsIGZyZWUsIGV0Yy4gIFRvIGVuYWJsZSB1c2UKKyAgaW4gbGF5ZXJlZCBleHRlbnNpb25zLCBwZXItbXNwYWNlIGxvY2tzIGFyZSByZWVudHJhbnQuCisKKyAgQmVjYXVzZSBsb2NrLXByb3RlY3RlZCByZWdpb25zIGdlbmVyYWxseSBoYXZlIGJvdW5kZWQgdGltZXMsIGl0IGlzCisgIE9LIHRvIHVzZSB0aGUgc3VwcGxpZWQgc2ltcGxlIHNwaW5sb2NrcyBpbiB0aGUgY3VzdG9tIHZlcnNpb25zIGZvcgorICB4ODYuCisKKyAgSWYgVVNFX0xPQ0tTIGlzID4gMSwgdGhlIGRlZmluaXRpb25zIG9mIGxvY2sgcm91dGluZXMgaGVyZSBhcmUKKyAgYnlwYXNzZWQsIGluIHdoaWNoIGNhc2UgeW91IHdpbGwgbmVlZCB0byBkZWZpbmUgYXQgbGVhc3QKKyAgSU5JVElBTF9MT0NLLCBBQ1FVSVJFX0xPQ0ssIFJFTEVBU0VfTE9DSyBhbmQgcG9zc2libHkgVFJZX0xPQ0sKKyAgKHdoaWNoIGlzIG5vdCB1c2VkIGluIHRoaXMgbWFsbG9jLCBidXQgY29tbW9ubHkgbmVlZGVkIGluCisgIGV4dGVuc2lvbnMuKQorKi8KKworI2lmIFVTRV9MT0NLUyA9PSAxCisKKyNpZiBVU0VfU1BJTl9MT0NLUworI2lmbmRlZiBXSU4zMgorCisvKiBDdXN0b20gcHRocmVhZC1zdHlsZSBzcGluIGxvY2tzIG9uIHg4NiBhbmQgeDY0IGZvciBnY2MgKi8KK3N0cnVjdCBwdGhyZWFkX21sb2NrX3QgeworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGM7CisgIHZvbGF0aWxlIHB0aHJlYWRfdCB0aHJlYWRpZDsKK307CisjZGVmaW5lIE1MT0NLX1Qgc3RydWN0ICAgICAgICBwdGhyZWFkX21sb2NrX3QKKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIHB0aHJlYWRfc2VsZigpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhzbCkgICAgICAobWVtc2V0KHNsLCAwLCBzaXplb2YoTUxPQ0tfVCkpLCAwKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0soc2wpICAgICAgcHRocmVhZF9hY3F1aXJlX2xvY2soc2wpCisjZGVmaW5lIFJFTEVBU0VfTE9DSyhzbCkgICAgICBwdGhyZWFkX3JlbGVhc2VfbG9jayhzbCkKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgIHB0aHJlYWRfdHJ5X2xvY2soc2wpCisjZGVmaW5lIFNQSU5TX1BFUl9ZSUVMRCAgICAgICA2MworCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0geyAwLCAwLCAwfTsKKworc3RhdGljIEZPUkNFSU5MSU5FIGludCBwdGhyZWFkX2FjcXVpcmVfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgaW50IHNwaW5zID0gMDsKKyAgdm9sYXRpbGUgdW5zaWduZWQgaW50KiBscCA9ICZzbC0+bDsKKyAgZm9yICg7OykgeworICAgIGlmICgqbHAgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogcGxhY2UgYXJncyB0byBjbXB4Y2hnbCBpbiBsb2NhbHMgdG8gZXZhZGUgb2RkaXRpZXMgaW4gc29tZSBnY2NzICovCisgICAgICBpbnQgY21wID0gMDsKKyAgICAgIGludCB2YWwgPSAxOworICAgICAgaW50IHJldDsKKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICAoImxvY2s7IGNtcHhjaGdsICUxLCAlMiIKKwkJCSAgICAgOiAiPWEiIChyZXQpCisJCQkgICAgIDogInIiICh2YWwpLCAibSIgKCoobHApKSwgIjAiKGNtcCkKKwkJCSAgICAgOiAibWVtb3J5IiwgImNjIik7CisgICAgICBpZiAoIXJldCkgeworCWFzc2VydCghc2wtPnRocmVhZGlkKTsKKwlzbC0+YyA9IDE7CisJc2wtPnRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgICBpZiAoKCsrc3BpbnMgJiBTUElOU19QRVJfWUlFTEQpID09IDApIHsKKyNpZiBkZWZpbmVkIChfX1NWUjQpICYmIGRlZmluZWQgKF9fc3VuKSAvKiBzb2xhcmlzICovCisJdGhyX3lpZWxkKCk7CisjZWxzZQorI2lmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKwlzY2hlZF95aWVsZCgpOworI2Vsc2UgIC8qIG5vLW9wIHlpZWxkIG9uIHVua25vd24gc3lzdGVtcyAqLworCTsKKyNlbmRpZiAvKiBfX2xpbnV4X18gfHwgX19GcmVlQlNEX18gfHwgX19BUFBMRV9fICovCisjZW5kaWYgLyogc29sYXJpcyAqLworICAgICAgfQorICAgIH0KKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCBwdGhyZWFkX3JlbGVhc2VfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgYXNzZXJ0KHNsLT5sICE9IDApOworICBhc3NlcnQoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKTsKKyAgaWYgKC0tc2wtPmMgPT0gMCkgeworICAgIHNsLT50aHJlYWRpZCA9IDA7CisgICAgdm9sYXRpbGUgdW5zaWduZWQgaW50KiBscCA9ICZzbC0+bDsKKyAgICBpbnQgcHJldiA9IDA7CisgICAgaW50IHJldDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhjaGdsICUwLCAlMSIKKwkJCSAgOiAiPXIiIChyZXQpCisJCQkgIDogIm0iICgqKGxwKSksICIwIihwcmV2KQorCQkJICA6ICJtZW1vcnkiKTsKKyAgfQorfQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgaW50IHB0aHJlYWRfdHJ5X2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIHZvbGF0aWxlIHVuc2lnbmVkIGludCogbHAgPSAmc2wtPmw7CisgIGlmICgqbHAgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDE7CisgICAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgaW50IGNtcCA9IDA7CisgICAgaW50IHZhbCA9IDE7CisgICAgaW50IHJldDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAgKCJsb2NrOyBjbXB4Y2hnbCAlMSwgJTIiCisJCQkgICA6ICI9YSIgKHJldCkKKwkJCSAgIDogInIiICh2YWwpLCAibSIgKCoobHApKSwgIjAiKGNtcCkKKwkJCSAgIDogIm1lbW9yeSIsICJjYyIpOworICAgIGlmICghcmV0KSB7CisgICAgICBhc3NlcnQoIXNsLT50aHJlYWRpZCk7CisgICAgICBzbC0+YyA9IDE7CisgICAgICBzbC0+dGhyZWFkaWQgPSBDVVJSRU5UX1RIUkVBRDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworCisjZWxzZSAvKiBXSU4zMiAqLworLyogQ3VzdG9tIHdpbjMyLXN0eWxlIHNwaW4gbG9ja3Mgb24geDg2IGFuZCB4NjQgZm9yIE1TQyAqLworc3RydWN0IHdpbjMyX21sb2NrX3QKK3sKKyAgdm9sYXRpbGUgbG9uZyBsOworICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgYzsKKyAgdm9sYXRpbGUgbG9uZyB0aHJlYWRpZDsKK307CisKKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIHN0cnVjdCB3aW4zMl9tbG9ja190CisjZGVmaW5lIENVUlJFTlRfVEhSRUFEICAgICAgICB3aW4zMl9nZXRjdXJyZW50dGhyZWFkaWQoKQorI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAgICAgKG1lbXNldChzbCwgMCwgc2l6ZW9mKE1MT0NLX1QpKSwgMCkKKyNkZWZpbmUgQUNRVUlSRV9MT0NLKHNsKSAgICAgIHdpbjMyX2FjcXVpcmVfbG9jayhzbCkKKyNkZWZpbmUgUkVMRUFTRV9MT0NLKHNsKSAgICAgIHdpbjMyX3JlbGVhc2VfbG9jayhzbCkKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgIHdpbjMyX3RyeV9sb2NrKHNsKQorI2RlZmluZSBTUElOU19QRVJfWUlFTEQgICAgICAgNjMKKworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IHsgMCwgMCwgMH07CisKK3N0YXRpYyBGT1JDRUlOTElORSBsb25nIHdpbjMyX2dldGN1cnJlbnR0aHJlYWRpZCh2b2lkKSB7CisjaWZkZWYgX01TQ19WRVIKKyNpZiBkZWZpbmVkKF9NX0lYODYpCisgIGxvbmcgKnRocmVhZHN0cnVjdD0obG9uZyAqKV9fcmVhZGZzZHdvcmQoMHgxOCk7CisgIGxvbmcgdGhyZWFkaWQ9dGhyZWFkc3RydWN0WzB4MjQvc2l6ZW9mKGxvbmcpXTsKKyAgcmV0dXJuIHRocmVhZGlkOworI2VsaWYgZGVmaW5lZChfTV9YNjQpCisgIC8qIHRvZG8gKi8KKyAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOworI2Vsc2UKKyAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOworI2VuZGlmCisjZWxzZQorICByZXR1cm4gR2V0Q3VycmVudFRocmVhZElkKCk7CisjZW5kaWYKK30KKworc3RhdGljIEZPUkNFSU5MSU5FIGludCB3aW4zMl9hY3F1aXJlX2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGludCBzcGlucyA9IDA7CisgIGZvciAoOzspIHsKKyAgICBpZiAoc2wtPmwgIT0gMCkgeworICAgICAgaWYgKHNsLT50aHJlYWRpZCA9PSBDVVJSRU5UX1RIUkVBRCkgeworCSsrc2wtPmM7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgaWYgKCFpbnRlcmxvY2tlZGV4Y2hhbmdlKCZzbC0+bCwgMSkpIHsKKwlhc3NlcnQoIXNsLT50aHJlYWRpZCk7CisJCXNsLT5jPUNVUlJFTlRfVEhSRUFEOworCXNsLT50aHJlYWRpZCA9IENVUlJFTlRfVEhSRUFEOworCXNsLT5jID0gMTsKKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKCgrK3NwaW5zICYgU1BJTlNfUEVSX1lJRUxEKSA9PSAwKQorICAgICAgU2xlZXBFeCgwLCBGQUxTRSk7CisgIH0KK30KKworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQgd2luMzJfcmVsZWFzZV9sb2NrIChNTE9DS19UICpzbCkgeworICBhc3NlcnQoc2wtPnRocmVhZGlkID09IENVUlJFTlRfVEhSRUFEKTsKKyAgYXNzZXJ0KHNsLT5sICE9IDApOworICBpZiAoLS1zbC0+YyA9PSAwKSB7CisgICAgc2wtPnRocmVhZGlkID0gMDsKKyAgICBpbnRlcmxvY2tlZGV4Y2hhbmdlICgmc2wtPmwsIDApOworICB9Cit9CisKK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgd2luMzJfdHJ5X2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIGlmKHNsLT5sICE9IDApIHsKKyAgICAgIGlmIChzbC0+dGhyZWFkaWQgPT0gQ1VSUkVOVF9USFJFQUQpIHsKKwkrK3NsLT5jOworCXJldHVybiAxOworICAgICAgfQorICB9CisgIGVsc2UgeworICAgIGlmICghaW50ZXJsb2NrZWRleGNoYW5nZSgmc2wtPmwsIDEpKXsKKyAgICAgIGFzc2VydCghc2wtPnRocmVhZGlkKTsKKyAgICAgIHNsLT50aHJlYWRpZCA9IENVUlJFTlRfVEhSRUFEOworICAgICAgc2wtPmMgPSAxOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogV0lOMzIgKi8KKyNlbHNlIC8qIFVTRV9TUElOX0xPQ0tTICovCisKKyNpZm5kZWYgV0lOMzIKKy8qIHB0aHJlYWRzLWJhc2VkIGxvY2tzICovCisKKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdAorI2RlZmluZSBDVVJSRU5UX1RIUkVBRCAgICAgICAgcHRocmVhZF9zZWxmKCkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKHNsKSAgICAgIHB0aHJlYWRfaW5pdF9sb2NrKHNsKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0soc2wpICAgICAgcHRocmVhZF9tdXRleF9sb2NrKHNsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0soc2wpICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soc2wpCisjZGVmaW5lIFRSWV9MT0NLKHNsKSAgICAgICAgICAoIXB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhzbCkpCisKK3N0YXRpYyBNTE9DS19UIG1hbGxvY19nbG9iYWxfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCisvKiBDb3BlIHdpdGggb2xkLXN0eWxlIGxpbnV4IHJlY3Vyc2l2ZSBsb2NrIGluaXRpYWxpemF0aW9uIGJ5IGFkZGluZyAqLworLyogc2tpcHBlZCBpbnRlcm5hbCBkZWNsYXJhdGlvbiBmcm9tIHB0aHJlYWQuaCAqLworI2lmZGVmIGxpbnV4CisjaWZuZGVmIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFCitleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldGtpbmRfbnAgX19QICgocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLAorCQkJCQkgICBpbnQgX19raW5kKSk7CisjZGVmaW5lIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoeCx5KSBwdGhyZWFkX211dGV4YXR0cl9zZXRraW5kX25wKHgseSkKKyNlbmRpZgorI2VuZGlmCisKK3N0YXRpYyBpbnQgcHRocmVhZF9pbml0X2xvY2sgKE1MT0NLX1QgKnNsKSB7CisgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0cjsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpKSByZXR1cm4gMTsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJmF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKSkgcmV0dXJuIDE7CisgIGlmIChwdGhyZWFkX211dGV4X2luaXQoc2wsICZhdHRyKSkgcmV0dXJuIDE7CisgIGlmIChwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZhdHRyKSkgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCisjZWxzZSAvKiBXSU4zMiAqLworLyogV2luMzIgY3JpdGljYWwgc2VjdGlvbnMgKi8KKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIENSSVRJQ0FMX1NFQ1RJT04KKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIEdldEN1cnJlbnRUaHJlYWRJZCgpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhzKSAgICAgICAoIUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb25BbmRTcGluQ291bnQoKHMpLCAweDgwMDAwMDAwfDQwMDApKQorI2RlZmluZSBBQ1FVSVJFX0xPQ0socykgICAgICAgKEVudGVyQ3JpdGljYWxTZWN0aW9uKHMpLCAwKQorI2RlZmluZSBSRUxFQVNFX0xPQ0socykgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24ocykKKyNkZWZpbmUgVFJZX0xPQ0socykgICAgICAgICAgIFRyeUVudGVyQ3JpdGljYWxTZWN0aW9uKHMpCisjZGVmaW5lIE5FRURfR0xPQkFMX0xPQ0tfSU5JVAorCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4Oworc3RhdGljIHZvbGF0aWxlIGxvbmcgbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXM7CisKKy8qIFVzZSBzcGluIGxvb3AgdG8gaW5pdGlhbGl6ZSBnbG9iYWwgbG9jayAqLworc3RhdGljIHZvaWQgaW5pdF9tYWxsb2NfZ2xvYmFsX211dGV4KCkgeworICBmb3IgKDs7KSB7CisgICAgbG9uZyBzdGF0ID0gbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXM7CisgICAgaWYgKHN0YXQgPiAwKQorICAgICAgcmV0dXJuOworICAgIC8qIHRyYW5zaXRpb24gdG8gPCAwIHdoaWxlIGluaXRpYWxpemluZywgdGhlbiB0byA+IDApICovCisgICAgaWYgKHN0YXQgPT0gMCAmJgorCWludGVybG9ja2VkY29tcGFyZWV4Y2hhbmdlKCZtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1cywgLTEsIDApID09IDApIHsKKyAgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJm1hbGxvY19nbG9iYWxfbXV0ZXgpOworICAgICAgaW50ZXJsb2NrZWRleGNoYW5nZSgmbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXMsMSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIFNsZWVwRXgoMCwgRkFMU0UpOworICB9Cit9CisKKyNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIFVTRV9TUElOX0xPQ0tTICovCisjZW5kaWYgLyogVVNFX0xPQ0tTID09IDEgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIFVzZXItZGVmaW5lZCBsb2NrcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIFVTRV9MT0NLUyA+IDEKKy8qIERlZmluZSB5b3VyIG93biBsb2NrIGltcGxlbWVudGF0aW9uIGhlcmUgKi8KKy8qICNkZWZpbmUgSU5JVElBTF9MT0NLKHNsKSAgLi4uICovCisvKiAjZGVmaW5lIEFDUVVJUkVfTE9DSyhzbCkgIC4uLiAqLworLyogI2RlZmluZSBSRUxFQVNFX0xPQ0soc2wpICAuLi4gKi8KKy8qICNkZWZpbmUgVFJZX0xPQ0soc2wpIC4uLiAqLworLyogc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IC4uLiAqLworI2VuZGlmIC8qIFVTRV9MT0NLUyA+IDEgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIExvY2stYmFzZWQgc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBVU0VfTE9DS1MKKyNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDJVKQorI2Vsc2UgIC8qIFVTRV9MT0NLUyAqLworI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhsKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisjaWYgVVNFX0xPQ0tTCisjZGVmaW5lIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCkgIEFDUVVJUkVfTE9DSygmbWFsbG9jX2dsb2JhbF9tdXRleCk7CisjZGVmaW5lIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCkgIFJFTEVBU0VfTE9DSygmbWFsbG9jX2dsb2JhbF9tdXRleCk7CisjZWxzZSAgLyogVVNFX0xPQ0tTICovCisjZGVmaW5lIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCkKKyNkZWZpbmUgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDaHVuayByZXByZXNlbnRhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIChUaGUgZm9sbG93aW5nIGluY2x1ZGVzIGxpZ2h0bHkgZWRpdGVkIGV4cGxhbmF0aW9ucyBieSBDb2xpbiBQbHVtYi4pCisKKyAgVGhlIG1hbGxvY19jaHVuayBkZWNsYXJhdGlvbiBiZWxvdyBpcyBtaXNsZWFkaW5nIChidXQgYWNjdXJhdGUgYW5kCisgIG5lY2Vzc2FyeSkuICBJdCBkZWNsYXJlcyBhICJ2aWV3IiBpbnRvIG1lbW9yeSBhbGxvd2luZyBhY2Nlc3MgdG8KKyAgbmVjZXNzYXJ5IGZpZWxkcyBhdCBrbm93biBvZmZzZXRzIGZyb20gYSBnaXZlbiBiYXNlLgorCisgIENodW5rcyBvZiBtZW1vcnkgYXJlIG1haW50YWluZWQgdXNpbmcgYSBgYm91bmRhcnkgdGFnJyBtZXRob2QgYXMKKyAgb3JpZ2luYWxseSBkZXNjcmliZWQgYnkgS251dGguICAoU2VlIHRoZSBwYXBlciBieSBQYXVsIFdpbHNvbgorICBmdHA6Ly9mdHAuY3MudXRleGFzLmVkdS9wdWIvZ2FyYmFnZS9hbGxvY3Nydi5wcyBmb3IgYSBzdXJ2ZXkgb2Ygc3VjaAorICB0ZWNobmlxdWVzLikgIFNpemVzIG9mIGZyZWUgY2h1bmtzIGFyZSBzdG9yZWQgYm90aCBpbiB0aGUgZnJvbnQgb2YKKyAgZWFjaCBjaHVuayBhbmQgYXQgdGhlIGVuZC4gIFRoaXMgbWFrZXMgY29uc29saWRhdGluZyBmcmFnbWVudGVkCisgIGNodW5rcyBpbnRvIGJpZ2dlciBjaHVua3MgZmFzdC4gIFRoZSBoZWFkIGZpZWxkcyBhbHNvIGhvbGQgYml0cworICByZXByZXNlbnRpbmcgd2hldGhlciBjaHVua3MgYXJlIGZyZWUgb3IgaW4gdXNlLgorCisgIEhlcmUgYXJlIHNvbWUgcGljdHVyZXMgdG8gbWFrZSBpdCBjbGVhcmVyLiAgVGhleSBhcmUgImV4cGxvZGVkIiB0bworICBzaG93IHRoYXQgdGhlIHN0YXRlIG9mIGEgY2h1bmsgY2FuIGJlIHRob3VnaHQgb2YgYXMgZXh0ZW5kaW5nIGZyb20KKyAgdGhlIGhpZ2ggMzEgYml0cyBvZiB0aGUgaGVhZCBmaWVsZCBvZiBpdHMgaGVhZGVyIHRocm91Z2ggdGhlCisgIHByZXZfZm9vdCBhbmQgUElOVVNFX0JJVCBiaXQgb2YgdGhlIGZvbGxvd2luZyBjaHVuayBoZWFkZXIuCisKKyAgQSBjaHVuayB0aGF0J3MgaW4gdXNlIGxvb2tzIGxpa2U6CisKKyAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICB8IFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIFAgPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8UHwKKwkgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDF8ICstKworICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKwkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKwkgKy0gICAgICBzaXplIC0gc2l6ZW9mKHNpemVfdCkgYXZhaWxhYmxlIHBheWxvYWQgYnl0ZXMgICAgICAgICAgLSsKKwkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyBjaHVuay0+ICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisJIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwxfAorICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtYXkgb3IgbWF5IG5vdCBiZSBpbiB1c2UpICAgICAgICAgICAgICAgfCArLSsKKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgICAgQW5kIGlmIGl0J3MgZnJlZSwgaXQgbG9va3MgbGlrZSB0aGlzOgorCisgICBjaHVuay0+ICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisJICAgfCBVc2VyIHBheWxvYWQgKG11c3QgYmUgaW4gdXNlLCBvciB3ZSB3b3VsZCBoYXZlIG1lcmdlZCEpICAgICAgIHwKKwkgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfFB8CisJIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwfCArLSsKKyAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgTmV4dCBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgUHJldiBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisJICstICAgICAgc2l6ZSAtIHNpemVvZihzdHJ1Y3QgY2h1bmspIHVudXNlZCBieXRlcyAgICAgICAgICAgICAgIC0rCisJIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8MHwKKyAgICAgICB8IFNpemUgb2YgbmV4dCBjaHVuayAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkKXwgKy0rCisgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICstIFVzZXIgcGF5bG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCQkJCQkJCQkgICAgIHwwfAorCQkJCQkJCQkgICAgICstKworICBOb3RlIHRoYXQgc2luY2Ugd2UgYWx3YXlzIG1lcmdlIGFkamFjZW50IGZyZWUgY2h1bmtzLCB0aGUgY2h1bmtzCisgIGFkamFjZW50IHRvIGEgZnJlZSBjaHVuayBtdXN0IGJlIGluIHVzZS4KKworICBHaXZlbiBhIHBvaW50ZXIgdG8gYSBjaHVuayAod2hpY2ggY2FuIGJlIGRlcml2ZWQgdHJpdmlhbGx5IGZyb20gdGhlCisgIHBheWxvYWQgcG9pbnRlcikgd2UgY2FuLCBpbiBPKDEpIHRpbWUsIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGFkamFjZW50CisgIGNodW5rcyBhcmUgZnJlZSwgYW5kIGlmIHNvLCB1bmxpbmsgdGhlbSBmcm9tIHRoZSBsaXN0cyB0aGF0IHRoZXkKKyAgYXJlIG9uIGFuZCBtZXJnZSB0aGVtIHdpdGggdGhlIGN1cnJlbnQgY2h1bmsuCisKKyAgQ2h1bmtzIGFsd2F5cyBiZWdpbiBvbiBldmVuIHdvcmQgYm91bmRhcmllcywgc28gdGhlIG1lbSBwb3J0aW9uCisgICh3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgdXNlcikgaXMgYWxzbyBvbiBhbiBldmVuIHdvcmQgYm91bmRhcnksIGFuZAorICB0aHVzIGF0IGxlYXN0IGRvdWJsZS13b3JkIGFsaWduZWQuCisKKyAgVGhlIFAgKFBJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgbG93LW9yZGVyIGJpdCBvZiB0aGUKKyAgY2h1bmsgc2l6ZSAod2hpY2ggaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgdHdvIHdvcmRzKSwgaXMgYW4gaW4tdXNlCisgIGJpdCBmb3IgdGhlICpwcmV2aW91cyogY2h1bmsuICBJZiB0aGF0IGJpdCBpcyAqY2xlYXIqLCB0aGVuIHRoZQorICB3b3JkIGJlZm9yZSB0aGUgY3VycmVudCBjaHVuayBzaXplIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBjaHVuaworICBzaXplLCBhbmQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgZnJvbnQgb2YgdGhlIHByZXZpb3VzIGNodW5rLgorICBUaGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlzIGhhcyB0aGlzIGJpdCBzZXQsIHByZXZlbnRpbmcKKyAgYWNjZXNzIHRvIG5vbi1leGlzdGVudCAob3Igbm9uLW93bmVkKSBtZW1vcnkuIElmIHBpbnVzZSBpcyBzZXQgZm9yCisgIGFueSBnaXZlbiBjaHVuaywgdGhlbiB5b3UgQ0FOTk9UIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUKKyAgcHJldmlvdXMgY2h1bmssIGFuZCBtaWdodCBldmVuIGdldCBhIG1lbW9yeSBhZGRyZXNzaW5nIGZhdWx0IHdoZW4KKyAgdHJ5aW5nIHRvIGRvIHNvLgorCisgIFRoZSBDIChDSU5VU0VfQklUKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIHNlY29uZC1sb3dlc3QgYml0IG9mCisgIHRoZSBjaHVuayBzaXplIHJlZHVuZGFudGx5IHJlY29yZHMgd2hldGhlciB0aGUgY3VycmVudCBjaHVuayBpcworICBpbnVzZS4gVGhpcyByZWR1bmRhbmN5IGVuYWJsZXMgdXNhZ2UgY2hlY2tzIHdpdGhpbiBmcmVlIGFuZCByZWFsbG9jLAorICBhbmQgcmVkdWNlcyBpbmRpcmVjdGlvbiB3aGVuIGZyZWVpbmcgYW5kIGNvbnNvbGlkYXRpbmcgY2h1bmtzLgorCisgIEVhY2ggZnJlc2hseSBhbGxvY2F0ZWQgY2h1bmsgbXVzdCBoYXZlIGJvdGggY2ludXNlIGFuZCBwaW51c2Ugc2V0LgorICBUaGF0IGlzLCBlYWNoIGFsbG9jYXRlZCBjaHVuayBib3JkZXJzIGVpdGhlciBhIHByZXZpb3VzbHkgYWxsb2NhdGVkCisgIGFuZCBzdGlsbCBpbi11c2UgY2h1bmssIG9yIHRoZSBiYXNlIG9mIGl0cyBtZW1vcnkgYXJlbmEuIFRoaXMgaXMKKyAgZW5zdXJlZCBieSBtYWtpbmcgYWxsIGFsbG9jYXRpb25zIGZyb20gdGhlIGBsb3dlc3QnIHBhcnQgb2YgYW55CisgIGZvdW5kIGNodW5rLiAgRnVydGhlciwgbm8gZnJlZSBjaHVuayBwaHlzaWNhbGx5IGJvcmRlcnMgYW5vdGhlciBvbmUsCisgIHNvIGVhY2ggZnJlZSBjaHVuayBpcyBrbm93biB0byBiZSBwcmVjZWRlZCBhbmQgZm9sbG93ZWQgYnkgZWl0aGVyCisgIGludXNlIGNodW5rcyBvciB0aGUgZW5kcyBvZiBtZW1vcnkuCisKKyAgTm90ZSB0aGF0IHRoZSBgZm9vdCcgb2YgdGhlIGN1cnJlbnQgY2h1bmsgaXMgYWN0dWFsbHkgcmVwcmVzZW50ZWQKKyAgYXMgdGhlIHByZXZfZm9vdCBvZiB0aGUgTkVYVCBjaHVuay4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8KKyAgZGVhbCB3aXRoIGFsaWdubWVudHMgZXRjIGJ1dCBjYW4gYmUgdmVyeSBjb25mdXNpbmcgd2hlbiB0cnlpbmcKKyAgdG8gZXh0ZW5kIG9yIGFkYXB0IHRoaXMgY29kZS4KKworICBUaGUgZXhjZXB0aW9ucyB0byBhbGwgdGhpcyBhcmUKKworICAgICAxLiBUaGUgc3BlY2lhbCBjaHVuayBgdG9wJyBpcyB0aGUgdG9wLW1vc3QgYXZhaWxhYmxlIGNodW5rIChpLmUuLAorCXRoZSBvbmUgYm9yZGVyaW5nIHRoZSBlbmQgb2YgYXZhaWxhYmxlIG1lbW9yeSkuIEl0IGlzIHRyZWF0ZWQKKwlzcGVjaWFsbHkuICBUb3AgaXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGJpbiwgaXMgdXNlZCBvbmx5IGlmCisJbm8gb3RoZXIgY2h1bmsgaXMgYXZhaWxhYmxlLCBhbmQgaXMgcmVsZWFzZWQgYmFjayB0byB0aGUKKwlzeXN0ZW0gaWYgaXQgaXMgdmVyeSBsYXJnZSAoc2VlIE1fVFJJTV9USFJFU0hPTEQpLiAgSW4gZWZmZWN0LAorCXRoZSB0b3AgY2h1bmsgaXMgdHJlYXRlZCBhcyBsYXJnZXIgKGFuZCB0aHVzIGxlc3Mgd2VsbAorCWZpdHRpbmcpIHRoYW4gYW55IG90aGVyIGF2YWlsYWJsZSBjaHVuay4gIFRoZSB0b3AgY2h1bmsKKwlkb2Vzbid0IHVwZGF0ZSBpdHMgdHJhaWxpbmcgc2l6ZSBmaWVsZCBzaW5jZSB0aGVyZSBpcyBubyBuZXh0CisJY29udGlndW91cyBjaHVuayB0aGF0IHdvdWxkIGhhdmUgdG8gaW5kZXggb2ZmIGl0LiBIb3dldmVyLAorCXNwYWNlIGlzIHN0aWxsIGFsbG9jYXRlZCBmb3IgaXQgKFRPUF9GT09UX1NJWkUpIHRvIGVuYWJsZQorCXNlcGFyYXRpb24gb3IgbWVyZ2luZyB3aGVuIHNwYWNlIGlzIGV4dGVuZGVkLgorCisgICAgIDMuIENodW5rcyBhbGxvY2F0ZWQgdmlhIG1tYXAsIHdoaWNoIGhhdmUgdGhlIGxvd2VzdC1vcmRlciBiaXQKKwkoSVNfTU1BUFBFRF9CSVQpIHNldCBpbiB0aGVpciBwcmV2X2Zvb3QgZmllbGRzLCBhbmQgZG8gbm90IHNldAorCVBJTlVTRV9CSVQgaW4gdGhlaXIgaGVhZCBmaWVsZHMuICBCZWNhdXNlIHRoZXkgYXJlIGFsbG9jYXRlZAorCW9uZS1ieS1vbmUsIGVhY2ggbXVzdCBjYXJyeSBpdHMgb3duIHByZXZfZm9vdCBmaWVsZCwgd2hpY2ggaXMKKwlhbHNvIHVzZWQgdG8gaG9sZCB0aGUgb2Zmc2V0IHRoaXMgY2h1bmsgaGFzIHdpdGhpbiBpdHMgbW1hcHBlZAorCXJlZ2lvbiwgd2hpY2ggaXMgbmVlZGVkIHRvIHByZXNlcnZlIGFsaWdubWVudC4gRWFjaCBtbWFwcGVkCisJY2h1bmsgaXMgdHJhaWxlZCBieSB0aGUgZmlyc3QgdHdvIGZpZWxkcyBvZiBhIGZha2UgbmV4dC1jaHVuaworCWZvciBzYWtlIG9mIHVzYWdlIGNoZWNrcy4KKworKi8KKworc3RydWN0IG1hbGxvY19jaHVuayB7CisgIHNpemVfdCAgICAgICAgICAgICAgIHByZXZfZm9vdDsgIC8qIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIGZyZWUpLiAgKi8KKyAgc2l6ZV90ICAgICAgICAgICAgICAgaGVhZDsgICAgICAgLyogU2l6ZSBhbmQgaW51c2UgYml0cy4gKi8KKyAgc3RydWN0IG1hbGxvY19jaHVuayogZmQ7ICAgICAgICAgLyogZG91YmxlIGxpbmtzIC0tIHVzZWQgb25seSBpZiBmcmVlLiAqLworICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBiazsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayAgbWNodW5rOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtY2h1bmtwdHI7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIHNiaW5wdHI7ICAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIGNodW5rcyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgYmluZGV4X3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5tYXBfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsYWdfdDsgICAgICAgICAgIC8qIFRoZSB0eXBlIG9mIHZhcmlvdXMgYml0IGZsYWcgc2V0cyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIENodW5rcyBzaXplcyBhbmQgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIE1DSFVOS19TSVpFICAgICAgICAgKHNpemVvZihtY2h1bmspKQorCisjaWYgRk9PVEVSUworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChUV09fU0laRV9UX1NJWkVTKQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChTSVpFX1RfU0laRSkKKyNlbmRpZiAvKiBGT09URVJTICovCisKKy8qIE1NYXBwZWQgY2h1bmtzIG5lZWQgYSBzZWNvbmQgd29yZCBvZiBvdmVyaGVhZCAuLi4gKi8KKyNkZWZpbmUgTU1BUF9DSFVOS19PVkVSSEVBRCAoVFdPX1NJWkVfVF9TSVpFUykKKy8qIC4uLiBhbmQgYWRkaXRpb25hbCBwYWRkaW5nIGZvciBmYWtlIG5leHQtY2h1bmsgYXQgZm9vdCAqLworI2RlZmluZSBNTUFQX0ZPT1RfUEFEICAgICAgIChGT1VSX1NJWkVfVF9TSVpFUykKKworLyogVGhlIHNtYWxsZXN0IHNpemUgd2UgY2FuIG1hbGxvYyBpcyBhbiBhbGlnbmVkIG1pbmltYWwgY2h1bmsgKi8KKyNkZWZpbmUgTUlOX0NIVU5LX1NJWkVcCisgICgoTUNIVU5LX1NJWkUgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBjb252ZXJzaW9uIGZyb20gbWFsbG9jIGhlYWRlcnMgdG8gdXNlciBwb2ludGVycywgYW5kIGJhY2sgKi8KKyNkZWZpbmUgY2h1bmsybWVtKHApICAgICAgICAoKHZvaWQqKSgoY2hhciopKHApICAgICAgICsgVFdPX1NJWkVfVF9TSVpFUykpCisjZGVmaW5lIG1lbTJjaHVuayhtZW0pICAgICAgKChtY2h1bmtwdHIpKChjaGFyKikobWVtKSAtIFRXT19TSVpFX1RfU0laRVMpKQorLyogY2h1bmsgYXNzb2NpYXRlZCB3aXRoIGFsaWduZWQgYWRkcmVzcyBBICovCisjZGVmaW5lIGFsaWduX2FzX2NodW5rKEEpICAgKG1jaHVua3B0cikoKEEpICsgYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShBKSkpCisKKy8qIEJvdW5kcyBvbiByZXF1ZXN0IChub3QgY2h1bmspIHNpemVzLiAqLworI2RlZmluZSBNQVhfUkVRVUVTVCAgICAgICAgICgoLU1JTl9DSFVOS19TSVpFKSA8PCAyKQorI2RlZmluZSBNSU5fUkVRVUVTVCAgICAgICAgIChNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEIC0gU0laRV9UX09ORSkKKworLyogcGFkIHJlcXVlc3QgYnl0ZXMgaW50byBhIHVzYWJsZSBzaXplICovCisjZGVmaW5lIHBhZF9yZXF1ZXN0KHJlcSkgXAorICAgKCgocmVxKSArIENIVU5LX09WRVJIRUFEICsgQ0hVTktfQUxJR05fTUFTSykgJiB+Q0hVTktfQUxJR05fTUFTSykKKworLyogcGFkIHJlcXVlc3QsIGNoZWNraW5nIGZvciBtaW5pbXVtIChidXQgbm90IG1heGltdW0pICovCisjZGVmaW5lIHJlcXVlc3Qyc2l6ZShyZXEpIFwKKyAgKCgocmVxKSA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChyZXEpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGhlYWQgYW5kIGZvb3QgZmllbGRzIC0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFRoZSBoZWFkIGZpZWxkIG9mIGEgY2h1bmsgaXMgb3InZWQgd2l0aCBQSU5VU0VfQklUIHdoZW4gcHJldmlvdXMKKyAgYWRqYWNlbnQgY2h1bmsgaW4gdXNlLCBhbmQgb3InZWQgd2l0aCBDSU5VU0VfQklUIGlmIHRoaXMgY2h1bmsgaXMgaW4KKyAgdXNlLiBJZiB0aGUgY2h1bmsgd2FzIG9idGFpbmVkIHdpdGggbW1hcCwgdGhlIHByZXZfZm9vdCBmaWVsZCBoYXMKKyAgSVNfTU1BUFBFRF9CSVQgc2V0LCBvdGhlcndpc2UgaG9sZGluZyB0aGUgb2Zmc2V0IG9mIHRoZSBiYXNlIG9mIHRoZQorICBtbWFwcGVkIHJlZ2lvbiB0byB0aGUgYmFzZSBvZiB0aGUgY2h1bmsuCisKKyAgRkxBRzRfQklUIGlzIG5vdCB1c2VkIGJ5IHRoaXMgbWFsbG9jLCBidXQgbWlnaHQgYmUgdXNlZnVsIGluIGV4dGVuc2lvbnMuCisqLworCisjZGVmaW5lIFBJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9PTkUpCisjZGVmaW5lIENJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9UV08pCisjZGVmaW5lIEZMQUc0X0JJVCAgICAgICAgICAgKFNJWkVfVF9GT1VSKQorI2RlZmluZSBJTlVTRV9CSVRTICAgICAgICAgIChQSU5VU0VfQklUfENJTlVTRV9CSVQpCisjZGVmaW5lIEZMQUdfQklUUyAgICAgICAgICAgKFBJTlVTRV9CSVR8Q0lOVVNFX0JJVHxGTEFHNF9CSVQpCisKKy8qIEhlYWQgdmFsdWUgZm9yIGZlbmNlcG9zdHMgKi8KKyNkZWZpbmUgRkVOQ0VQT1NUX0hFQUQgICAgICAoSU5VU0VfQklUU3xTSVpFX1RfU0laRSkKKworLyogZXh0cmFjdGlvbiBvZiBmaWVsZHMgZnJvbSBoZWFkIHdvcmRzICovCisjZGVmaW5lIGNpbnVzZShwKSAgICAgICAgICAgKChwKS0+aGVhZCAmIENJTlVTRV9CSVQpCisjZGVmaW5lIHBpbnVzZShwKSAgICAgICAgICAgKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpCisjZGVmaW5lIGNodW5rc2l6ZShwKSAgICAgICAgKChwKS0+aGVhZCAmIH4oRkxBR19CSVRTKSkKKworI2RlZmluZSBjbGVhcl9waW51c2UocCkgICAgICgocCktPmhlYWQgJj0gflBJTlVTRV9CSVQpCisjZGVmaW5lIGNsZWFyX2NpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+Q0lOVVNFX0JJVCkKKworLyogVHJlYXQgc3BhY2UgYXQgcHRyICsvLSBvZmZzZXQgYXMgYSBjaHVuayAqLworI2RlZmluZSBjaHVua19wbHVzX29mZnNldChwLCBzKSAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpCisjZGVmaW5lIGNodW5rX21pbnVzX29mZnNldChwLCBzKSAoKG1jaHVua3B0cikoKChjaGFyKikocCkpIC0gKHMpKSkKKworLyogUHRyIHRvIG5leHQgb3IgcHJldmlvdXMgcGh5c2ljYWwgbWFsbG9jX2NodW5rLiAqLworI2RlZmluZSBuZXh0X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpICsgKChwKS0+aGVhZCAmIH5GTEFHX0JJVFMpKSkKKyNkZWZpbmUgcHJldl9jaHVuayhwKSAoKG1jaHVua3B0cikoICgoY2hhciopKHApKSAtICgocCktPnByZXZfZm9vdCkgKSkKKworLyogZXh0cmFjdCBuZXh0IGNodW5rJ3MgcGludXNlIGJpdCAqLworI2RlZmluZSBuZXh0X3BpbnVzZShwKSAgKChuZXh0X2NodW5rKHApLT5oZWFkKSAmIFBJTlVTRV9CSVQpCisKKy8qIEdldC9zZXQgc2l6ZSBhdCBmb290ZXIgKi8KKyNkZWZpbmUgZ2V0X2Zvb3QocCwgcykgICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QpCisjZGVmaW5lIHNldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290ID0gKHMpKQorCisvKiBTZXQgc2l6ZSwgcGludXNlIGJpdCwgYW5kIGZvb3QgKi8KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVCksIHNldF9mb290KHAsIHMpKQorCisvKiBTZXQgc2l6ZSwgcGludXNlIGJpdCwgZm9vdCwgYW5kIGNsZWFyIG5leHQgcGludXNlICovCisjZGVmaW5lIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHMsIG4pXAorICAoY2xlYXJfcGludXNlKG4pLCBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcykpCisKKyNkZWZpbmUgaXNfbW1hcHBlZChwKVwKKyAgKCEoKHApLT5oZWFkICYgUElOVVNFX0JJVCkgJiYgKChwKS0+cHJldl9mb290ICYgSVNfTU1BUFBFRF9CSVQpKQorCisvKiBHZXQgdGhlIGludGVybmFsIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBjaHVuayBwICovCisjZGVmaW5lIG92ZXJoZWFkX2ZvcihwKVwKKyAoaXNfbW1hcHBlZChwKT8gTU1BUF9DSFVOS19PVkVSSEVBRCA6IENIVU5LX09WRVJIRUFEKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBtYWxsb2NlZCBzcGFjZSBpcyBub3QgbmVjZXNzYXJpbHkgY2xlYXJlZCAqLworI2lmIE1NQVBfQ0xFQVJTCisjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICghaXNfbW1hcHBlZChwKSkKKyNlbHNlIC8qIE1NQVBfQ0xFQVJTICovCisjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICgxKQorI2VuZGlmIC8qIE1NQVBfQ0xFQVJTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3ZlcmxhaWQgZGF0YSBzdHJ1Y3R1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFdoZW4gY2h1bmtzIGFyZSBub3QgaW4gdXNlLCB0aGV5IGFyZSB0cmVhdGVkIGFzIG5vZGVzIG9mIGVpdGhlcgorICBsaXN0cyBvciB0cmVlcy4KKworICAiU21hbGwiICBjaHVua3MgYXJlIHN0b3JlZCBpbiBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3RzLCBhbmQgbG9vaworICBsaWtlIHRoaXM6CisKKyAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisJICAgIHwgICAgICAgICAgICAgU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBVbnVzZWQgc3BhY2UgKG1heSBiZSAwIGJ5dGVzIGxvbmcpICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKwkgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK25leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGZvb3Q6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgIExhcmdlciBjaHVua3MgYXJlIGtlcHQgaW4gYSBmb3JtIG9mIGJpdHdpc2UgZGlnaXRhbCB0cmVlcyAoYWthCisgIHRyaWVzKSBrZXllZCBvbiBjaHVua3NpemVzLiAgQmVjYXVzZSBtYWxsb2NfdHJlZV9jaHVua3MgYXJlIG9ubHkgZm9yCisgIGZyZWUgY2h1bmtzIGdyZWF0ZXIgdGhhbiAyNTYgYnl0ZXMsIHRoZWlyIHNpemUgZG9lc24ndCBpbXBvc2UgYW55CisgIGNvbnN0cmFpbnRzIG9uIHVzZXIgY2h1bmsgc2l6ZXMuICBFYWNoIG5vZGUgbG9va3MgbGlrZToKKworICAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKwkgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKwkgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CisgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEZvcndhcmQgcG9pbnRlciB0byBuZXh0IGNodW5rIG9mIHNhbWUgc2l6ZSAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBvZiBzYW1lIHNpemUgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gbGVmdCBjaGlsZCAoY2hpbGRbMF0pICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gcmlnaHQgY2hpbGQgKGNoaWxkWzFdKSAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gcGFyZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIGJpbiBpbmRleCBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCSAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCSAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorCSAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisJICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgRWFjaCB0cmVlIGhvbGRpbmcgdHJlZW5vZGVzIGlzIGEgdHJlZSBvZiB1bmlxdWUgY2h1bmsgc2l6ZXMuICBDaHVua3MKKyAgb2YgdGhlIHNhbWUgc2l6ZSBhcmUgYXJyYW5nZWQgaW4gYSBjaXJjdWxhcmx5LWxpbmtlZCBsaXN0LCB3aXRoIG9ubHkKKyAgdGhlIG9sZGVzdCBjaHVuayAodGhlIG5leHQgdG8gYmUgdXNlZCwgaW4gb3VyIEZJRk8gb3JkZXJpbmcpCisgIGFjdHVhbGx5IGluIHRoZSB0cmVlLiAgKFRyZWUgbWVtYmVycyBhcmUgZGlzdGluZ3Vpc2hlZCBieSBhIG5vbi1udWxsCisgIHBhcmVudCBwb2ludGVyLikgIElmIGEgY2h1bmsgd2l0aCB0aGUgc2FtZSBzaXplIGFzIGFuIGV4aXN0aW5nIG5vZGUKKyAgaXMgaW5zZXJ0ZWQsIGl0IGlzIGxpbmtlZCBvZmYgdGhlIGV4aXN0aW5nIG5vZGUgdXNpbmcgcG9pbnRlcnMgdGhhdAorICB3b3JrIGluIHRoZSBzYW1lIHdheSBhcyBmZC9iayBwb2ludGVycyBvZiBzbWFsbCBjaHVua3MuCisKKyAgRWFjaCB0cmVlIGNvbnRhaW5zIGEgcG93ZXIgb2YgMiBzaXplZCByYW5nZSBvZiBjaHVuayBzaXplcyAodGhlCisgIHNtYWxsZXN0IGlzIDB4MTAwIDw9IHggPCAweDE4MCksIHdoaWNoIGlzIGRpdmlkZWQgaW4gaGFsZiBhdCBlYWNoCisgIHRyZWUgbGV2ZWwsIHdpdGggdGhlIGNodW5rcyBpbiB0aGUgc21hbGxlciBoYWxmIG9mIHRoZSByYW5nZSAoMHgxMDAKKyAgPD0geCA8IDB4MTQwIGZvciB0aGUgdG9wIG5vc2UpIGluIHRoZSBsZWZ0IHN1YnRyZWUgYW5kIHRoZSBsYXJnZXIKKyAgaGFsZiAoMHgxNDAgPD0geCA8IDB4MTgwKSBpbiB0aGUgcmlnaHQgc3VidHJlZS4gIFRoaXMgaXMsIG9mIGNvdXJzZSwKKyAgZG9uZSBieSBpbnNwZWN0aW5nIGluZGl2aWR1YWwgYml0cy4KKworICBVc2luZyB0aGVzZSBydWxlcywgZWFjaCBub2RlJ3MgbGVmdCBzdWJ0cmVlIGNvbnRhaW5zIGFsbCBzbWFsbGVyCisgIHNpemVzIHRoYW4gaXRzIHJpZ2h0IHN1YnRyZWUuICBIb3dldmVyLCB0aGUgbm9kZSBhdCB0aGUgcm9vdCBvZiBlYWNoCisgIHN1YnRyZWUgaGFzIG5vIHBhcnRpY3VsYXIgb3JkZXJpbmcgcmVsYXRpb25zaGlwIHRvIGVpdGhlci4gIChUaGUKKyAgZGl2aWRpbmcgbGluZSBiZXR3ZWVuIHRoZSBzdWJ0cmVlIHNpemVzIGlzIGJhc2VkIG9uIHRyaWUgcmVsYXRpb24uKQorICBJZiB3ZSByZW1vdmUgdGhlIGxhc3QgY2h1bmsgb2YgYSBnaXZlbiBzaXplIGZyb20gdGhlIGludGVyaW9yIG9mIHRoZQorICB0cmVlLCB3ZSBuZWVkIHRvIHJlcGxhY2UgaXQgd2l0aCBhIGxlYWYgbm9kZS4gIFRoZSB0cmVlIG9yZGVyaW5nCisgIHJ1bGVzIHBlcm1pdCBhIG5vZGUgdG8gYmUgcmVwbGFjZWQgYnkgYW55IGxlYWYgYmVsb3cgaXQuCisKKyAgVGhlIHNtYWxsZXN0IGNodW5rIGluIGEgdHJlZSAoYSBjb21tb24gb3BlcmF0aW9uIGluIGEgYmVzdC1maXQKKyAgYWxsb2NhdG9yKSBjYW4gYmUgZm91bmQgYnkgd2Fsa2luZyBhIHBhdGggdG8gdGhlIGxlZnRtb3N0IGxlYWYgaW4KKyAgdGhlIHRyZWUuICBVbmxpa2UgYSB1c3VhbCBiaW5hcnkgdHJlZSwgd2hlcmUgd2UgZm9sbG93IGxlZnQgY2hpbGQKKyAgcG9pbnRlcnMgdW50aWwgd2UgcmVhY2ggYSBudWxsLCBoZXJlIHdlIGZvbGxvdyB0aGUgcmlnaHQgY2hpbGQKKyAgcG9pbnRlciBhbnkgdGltZSB0aGUgbGVmdCBvbmUgaXMgbnVsbCwgdW50aWwgd2UgcmVhY2ggYSBsZWFmIHdpdGgKKyAgYm90aCBjaGlsZCBwb2ludGVycyBudWxsLiBUaGUgc21hbGxlc3QgY2h1bmsgaW4gdGhlIHRyZWUgd2lsbCBiZQorICBzb21ld2hlcmUgYWxvbmcgdGhhdCBwYXRoLgorCisgIFRoZSB3b3JzdCBjYXNlIG51bWJlciBvZiBzdGVwcyB0byBhZGQsIGZpbmQsIG9yIHJlbW92ZSBhIG5vZGUgaXMKKyAgYm91bmRlZCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgZGlmZmVyZW50aWF0aW5nIGNodW5rcyB3aXRoaW4KKyAgYmlucy4gVW5kZXIgY3VycmVudCBiaW4gY2FsY3VsYXRpb25zLCB0aGlzIHJhbmdlcyBmcm9tIDYgdXAgdG8gMjEKKyAgKGZvciAzMiBiaXQgc2l6ZXMpIG9yIHVwIHRvIDUzIChmb3IgNjQgYml0IHNpemVzKS4gVGhlIHR5cGljYWwgY2FzZQorICBpcyBvZiBjb3Vyc2UgbXVjaCBiZXR0ZXIuCisqLworCitzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgeworICAvKiBUaGUgZmlyc3QgZm91ciBmaWVsZHMgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggbWFsbG9jX2NodW5rICovCisgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgcHJldl9mb290OworICBzaXplX3QgICAgICAgICAgICAgICAgICAgIGhlYWQ7CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogZmQ7CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogYms7CisKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBjaGlsZFsyXTsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBwYXJlbnQ7CisgIGJpbmRleF90ICAgICAgICAgICAgICAgICAgaW5kZXg7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayAgdGNodW5rOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHRjaHVua3B0cjsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiB0YmlucHRyOyAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIHRyZWVzICovCisKKy8qIEEgbGl0dGxlIGhlbHBlciBtYWNybyBmb3IgdHJlZXMgKi8KKyNkZWZpbmUgbGVmdG1vc3RfY2hpbGQodCkgKCh0KS0+Y2hpbGRbMF0gIT0gMD8gKHQpLT5jaGlsZFswXSA6ICh0KS0+Y2hpbGRbMV0pCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNlZ21lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIEVhY2ggbWFsbG9jIHNwYWNlIG1heSBpbmNsdWRlIG5vbi1jb250aWd1b3VzIHNlZ21lbnRzLCBoZWxkIGluIGEKKyAgbGlzdCBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUKKyAgdG9wLW1vc3Qgc3BhY2UuIFNlZ21lbnRzIGFsc28gaW5jbHVkZSBmbGFncyBob2xkaW5nIHByb3BlcnRpZXMgb2YKKyAgdGhlIHNwYWNlLiBMYXJnZSBjaHVua3MgdGhhdCBhcmUgZGlyZWN0bHkgYWxsb2NhdGVkIGJ5IG1tYXAgYXJlIG5vdAorICBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuIFRoZXkgYXJlIGluc3RlYWQgaW5kZXBlbmRlbnRseSBjcmVhdGVkIGFuZAorICBkZXN0cm95ZWQgd2l0aG91dCBvdGhlcndpc2Uga2VlcGluZyB0cmFjayBvZiB0aGVtLgorCisgIFNlZ21lbnQgbWFuYWdlbWVudCBtYWlubHkgY29tZXMgaW50byBwbGF5IGZvciBzcGFjZXMgYWxsb2NhdGVkIGJ5CisgIE1NQVAuICBBbnkgY2FsbCB0byBNTUFQIG1pZ2h0IG9yIG1pZ2h0IG5vdCByZXR1cm4gbWVtb3J5IHRoYXQgaXMKKyAgYWRqYWNlbnQgdG8gYW4gZXhpc3Rpbmcgc2VnbWVudC4gIE1PUkVDT1JFIG5vcm1hbGx5IGNvbnRpZ3VvdXNseQorICBleHRlbmRzIHRoZSBjdXJyZW50IHNwYWNlLCBzbyB0aGlzIHNwYWNlIGlzIGFsbW9zdCBhbHdheXMgYWRqYWNlbnQsCisgIHdoaWNoIGlzIHNpbXBsZXIgYW5kIGZhc3RlciB0byBkZWFsIHdpdGguIChUaGlzIGlzIHdoeSBNT1JFQ09SRSBpcworICB1c2VkIHByZWZlcmVudGlhbGx5IHRvIE1NQVAgd2hlbiBib3RoIGFyZSBhdmFpbGFibGUgLS0gc2VlCisgIHN5c19hbGxvYy4pICBXaGVuIGFsbG9jYXRpbmcgdXNpbmcgTU1BUCwgd2UgZG9uJ3QgdXNlIGFueSBvZiB0aGUKKyAgaGludGluZyBtZWNoYW5pc21zIChpbmNvbnNpc3RlbnRseSkgc3VwcG9ydGVkIGluIHZhcmlvdXMKKyAgaW1wbGVtZW50YXRpb25zIG9mIHVuaXggbW1hcCwgb3IgZGlzdGluZ3Vpc2ggcmVzZXJ2aW5nIGZyb20KKyAgY29tbWl0dGluZyBtZW1vcnkuIEluc3RlYWQsIHdlIGp1c3QgYXNrIGZvciBzcGFjZSwgYW5kIGV4cGxvaXQKKyAgY29udGlndWl0eSB3aGVuIHdlIGdldCBpdC4gIEl0IGlzIHByb2JhYmx5IHBvc3NpYmxlIHRvIGRvCisgIGJldHRlciB0aGFuIHRoaXMgb24gc29tZSBzeXN0ZW1zLCBidXQgbm8gZ2VuZXJhbCBzY2hlbWUgc2VlbXMKKyAgdG8gYmUgc2lnbmlmaWNhbnRseSBiZXR0ZXIuCisKKyAgTWFuYWdlbWVudCBlbnRhaWxzIGEgc2ltcGxlciB2YXJpYW50IG9mIHRoZSBjb25zb2xpZGF0aW9uIHNjaGVtZQorICB1c2VkIGZvciBjaHVua3MgdG8gcmVkdWNlIGZyYWdtZW50YXRpb24gLS0gbmV3IGFkamFjZW50IG1lbW9yeSBpcworICBub3JtYWxseSBwcmVwZW5kZWQgb3IgYXBwZW5kZWQgdG8gYW4gZXhpc3Rpbmcgc2VnbWVudC4gSG93ZXZlciwKKyAgdGhlcmUgYXJlIGxpbWl0YXRpb25zIGNvbXBhcmVkIHRvIGNodW5rIGNvbnNvbGlkYXRpb24gdGhhdCBtb3N0bHkKKyAgcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHNlZ21lbnQgcHJvY2Vzc2luZyBpcyByZWxhdGl2ZWx5IGluZnJlcXVlbnQKKyAgKG9jY3VycmluZyBvbmx5IHdoZW4gZ2V0dGluZyBtZW1vcnkgZnJvbSBzeXN0ZW0pIGFuZCB0aGF0IHdlCisgIGRvbid0IGV4cGVjdCB0byBoYXZlIGh1Z2UgbnVtYmVycyBvZiBzZWdtZW50czoKKworICAqIFNlZ21lbnRzIGFyZSBub3QgaW5kZXhlZCwgc28gdHJhdmVyc2FsIHJlcXVpcmVzIGxpbmVhciBzY2Fucy4gIChJdAorICAgIHdvdWxkIGJlIHBvc3NpYmxlIHRvIGluZGV4IHRoZXNlLCBidXQgaXMgbm90IHdvcnRoIHRoZSBleHRyYQorICAgIG92ZXJoZWFkIGFuZCBjb21wbGV4aXR5IGZvciBtb3N0IHByb2dyYW1zIG9uIG1vc3QgcGxhdGZvcm1zLikKKyAgKiBOZXcgc2VnbWVudHMgYXJlIG9ubHkgYXBwZW5kZWQgdG8gb2xkIG9uZXMgd2hlbiBob2xkaW5nIHRvcC1tb3N0CisgICAgbWVtb3J5OyBpZiB0aGV5IGNhbm5vdCBiZSBwcmVwZW5kZWQgdG8gb3RoZXJzLCB0aGV5IGFyZSBoZWxkIGluCisgICAgZGlmZmVyZW50IHNlZ21lbnRzLgorCisgIEV4Y2VwdCBmb3IgdGhlIHRvcC1tb3N0IHNlZ21lbnQgb2YgYW4gbXN0YXRlLCBlYWNoIHNlZ21lbnQgcmVjb3JkCisgIGlzIGtlcHQgYXQgdGhlIHRhaWwgb2YgaXRzIHNlZ21lbnQuIFNlZ21lbnRzIGFyZSBhZGRlZCBieSBwdXNoaW5nCisgIHNlZ21lbnQgcmVjb3JkcyBvbnRvIHRoZSBsaXN0IGhlYWRlZCBieSAmbXN0YXRlLnNlZyBmb3IgdGhlCisgIGNvbnRhaW5pbmcgbXN0YXRlLgorCisgIFNlZ21lbnQgZmxhZ3MgY29udHJvbCBhbGxvY2F0aW9uL21lcmdlL2RlYWxsb2NhdGlvbiBwb2xpY2llczoKKyAgKiBJZiBFWFRFUk5fQklUIHNldCwgdGhlbiB3ZSBkaWQgbm90IGFsbG9jYXRlIHRoaXMgc2VnbWVudCwKKyAgICBhbmQgc28gc2hvdWxkIG5vdCB0cnkgdG8gZGVhbGxvY2F0ZSBvciBtZXJnZSB3aXRoIG90aGVycy4KKyAgICAoVGhpcyBjdXJyZW50bHkgaG9sZHMgb25seSBmb3IgdGhlIGluaXRpYWwgc2VnbWVudCBwYXNzZWQKKyAgICBpbnRvIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlLikKKyAgKiBJZiBJU19NTUFQUEVEX0JJVCBzZXQsIHRoZSBzZWdtZW50IG1heSBiZSBtZXJnZWQgd2l0aAorICAgIG90aGVyIHN1cnJvdW5kaW5nIG1tYXBwZWQgc2VnbWVudHMgYW5kIHRyaW1tZWQvZGUtYWxsb2NhdGVkCisgICAgdXNpbmcgbXVubWFwLgorICAqIElmIG5laXRoZXIgYml0IGlzIHNldCwgdGhlbiB0aGUgc2VnbWVudCB3YXMgb2J0YWluZWQgdXNpbmcKKyAgICBNT1JFQ09SRSBzbyBjYW4gYmUgbWVyZ2VkIHdpdGggc3Vycm91bmRpbmcgTU9SRUNPUkUnZCBzZWdtZW50cworICAgIGFuZCBkZWFsbG9jYXRlZC90cmltbWVkIHVzaW5nIE1PUkVDT1JFIHdpdGggbmVnYXRpdmUgYXJndW1lbnRzLgorKi8KKworc3RydWN0IG1hbGxvY19zZWdtZW50IHsKKyAgY2hhciogICAgICAgIGJhc2U7ICAgICAgICAgICAgIC8qIGJhc2UgYWRkcmVzcyAqLworICBzaXplX3QgICAgICAgc2l6ZTsgICAgICAgICAgICAgLyogYWxsb2NhdGVkIHNpemUgKi8KKyAgc3RydWN0IG1hbGxvY19zZWdtZW50KiBuZXh0OyAgIC8qIHB0ciB0byBuZXh0IHNlZ21lbnQgKi8KKyAgZmxhZ190ICAgICAgIHNmbGFnczsgICAgICAgICAgIC8qIG1tYXAgYW5kIGV4dGVybiBmbGFnICovCit9OworCisjZGVmaW5lIGlzX21tYXBwZWRfc2VnbWVudChTKSAgKChTKS0+c2ZsYWdzICYgSVNfTU1BUFBFRF9CSVQpCisjZGVmaW5lIGlzX2V4dGVybl9zZWdtZW50KFMpICAgKChTKS0+c2ZsYWdzICYgRVhURVJOX0JJVCkKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQgIG1zZWdtZW50OwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQqIG1zZWdtZW50cHRyOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvY19zdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICAgQSBtYWxsb2Nfc3RhdGUgaG9sZHMgYWxsIG9mIHRoZSBib29ra2VlcGluZyBmb3IgYSBzcGFjZS4KKyAgIFRoZSBtYWluIGZpZWxkcyBhcmU6CisKKyAgVG9wCisgICAgVGhlIHRvcG1vc3QgY2h1bmsgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgc2VnbWVudC4gSXRzIHNpemUgaXMKKyAgICBjYWNoZWQgaW4gdG9wc2l6ZS4gIFRoZSBhY3R1YWwgc2l6ZSBvZiB0b3Btb3N0IHNwYWNlIGlzCisgICAgdG9wc2l6ZStUT1BfRk9PVF9TSVpFLCB3aGljaCBpbmNsdWRlcyBzcGFjZSByZXNlcnZlZCBmb3IgYWRkaW5nCisgICAgZmVuY2Vwb3N0cyBhbmQgc2VnbWVudCByZWNvcmRzIGlmIG5lY2Vzc2FyeSB3aGVuIGdldHRpbmcgbW9yZQorICAgIHNwYWNlIGZyb20gdGhlIHN5c3RlbS4gIFRoZSBzaXplIGF0IHdoaWNoIHRvIGF1dG90cmltIHRvcCBpcworICAgIGNhY2hlZCBmcm9tIG1wYXJhbXMgaW4gdHJpbV9jaGVjaywgZXhjZXB0IHRoYXQgaXQgaXMgZGlzYWJsZWQgaWYKKyAgICBhbiBhdXRvdHJpbSBmYWlscy4KKworICBEZXNpZ25hdGVkIHZpY3RpbSAoZHYpCisgICAgVGhpcyBpcyB0aGUgcHJlZmVycmVkIGNodW5rIGZvciBzZXJ2aWNpbmcgc21hbGwgcmVxdWVzdHMgdGhhdAorICAgIGRvbid0IGhhdmUgZXhhY3QgZml0cy4gIEl0IGlzIG5vcm1hbGx5IHRoZSBjaHVuayBzcGxpdCBvZmYgbW9zdAorICAgIHJlY2VudGx5IHRvIHNlcnZpY2UgYW5vdGhlciBzbWFsbCByZXF1ZXN0LiAgSXRzIHNpemUgaXMgY2FjaGVkIGluCisgICAgZHZzaXplLiBUaGUgbGluayBmaWVsZHMgb2YgdGhpcyBjaHVuayBhcmUgbm90IG1haW50YWluZWQgc2luY2UgaXQKKyAgICBpcyBub3Qga2VwdCBpbiBhIGJpbi4KKworICBTbWFsbEJpbnMKKyAgICBBbiBhcnJheSBvZiBiaW4gaGVhZGVycyBmb3IgZnJlZSBjaHVua3MuICBUaGVzZSBiaW5zIGhvbGQgY2h1bmtzCisgICAgd2l0aCBzaXplcyBsZXNzIHRoYW4gTUlOX0xBUkdFX1NJWkUgYnl0ZXMuIEVhY2ggYmluIGNvbnRhaW5zCisgICAgY2h1bmtzIG9mIGFsbCB0aGUgc2FtZSBzaXplLCBzcGFjZWQgOCBieXRlcyBhcGFydC4gIFRvIHNpbXBsaWZ5CisgICAgdXNlIGluIGRvdWJsZS1saW5rZWQgbGlzdHMsIGVhY2ggYmluIGhlYWRlciBhY3RzIGFzIGEgbWFsbG9jX2NodW5rCisgICAgcG9pbnRpbmcgdG8gdGhlIHJlYWwgZmlyc3Qgbm9kZSwgaWYgaXQgZXhpc3RzIChlbHNlIHBvaW50aW5nIHRvCisgICAgaXRzZWxmKS4gIFRoaXMgYXZvaWRzIHNwZWNpYWwtY2FzaW5nIGZvciBoZWFkZXJzLiAgQnV0IHRvIGF2b2lkCisgICAgd2FzdGUsIHdlIGFsbG9jYXRlIG9ubHkgdGhlIGZkL2JrIHBvaW50ZXJzIG9mIGJpbnMsIGFuZCB0aGVuIHVzZQorICAgIHJlcG9zaXRpb25pbmcgdHJpY2tzIHRvIHRyZWF0IHRoZXNlIGFzIHRoZSBmaWVsZHMgb2YgYSBjaHVuay4KKworICBUcmVlQmlucworICAgIFRyZWViaW5zIGFyZSBwb2ludGVycyB0byB0aGUgcm9vdHMgb2YgdHJlZXMgaG9sZGluZyBhIHJhbmdlIG9mCisgICAgc2l6ZXMuIFRoZXJlIGFyZSAyIGVxdWFsbHkgc3BhY2VkIHRyZWViaW5zIGZvciBlYWNoIHBvd2VyIG9mIHR3bworICAgIGZyb20gVFJFRV9TSElGVCB0byBUUkVFX1NISUZUKzE2LiBUaGUgbGFzdCBiaW4gaG9sZHMgYW55dGhpbmcKKyAgICBsYXJnZXIuCisKKyAgQmluIG1hcHMKKyAgICBUaGVyZSBpcyBvbmUgYml0IG1hcCBmb3Igc21hbGwgYmlucyAoInNtYWxsbWFwIikgYW5kIG9uZSBmb3IKKyAgICB0cmVlYmlucyAoInRyZWVtYXApLiAgRWFjaCBiaW4gc2V0cyBpdHMgYml0IHdoZW4gbm9uLWVtcHR5LCBhbmQKKyAgICBjbGVhcnMgdGhlIGJpdCB3aGVuIGVtcHR5LiAgQml0IG9wZXJhdGlvbnMgYXJlIHRoZW4gdXNlZCB0byBhdm9pZAorICAgIGJpbi1ieS1iaW4gc2VhcmNoaW5nIC0tIG5lYXJseSBhbGwgInNlYXJjaCIgaXMgZG9uZSB3aXRob3V0IGV2ZXIKKyAgICBsb29raW5nIGF0IGJpbnMgdGhhdCB3b24ndCBiZSBzZWxlY3RlZC4gIFRoZSBiaXQgbWFwcworICAgIGNvbnNlcnZhdGl2ZWx5IHVzZSAzMiBiaXRzIHBlciBtYXAgd29yZCwgZXZlbiBpZiBvbiA2NGJpdCBzeXN0ZW0uCisgICAgRm9yIGEgZ29vZCBkZXNjcmlwdGlvbiBvZiBzb21lIG9mIHRoZSBiaXQtYmFzZWQgdGVjaG5pcXVlcyB1c2VkCisgICAgaGVyZSwgc2VlIEhlbnJ5IFMuIFdhcnJlbiBKcidzIGJvb2sgIkhhY2tlcidzIERlbGlnaHQiIChhbmQKKyAgICBzdXBwbGVtZW50IGF0IGh0dHA6Ly9oYWNrZXJzZGVsaWdodC5vcmcvKS4gTWFueSBvZiB0aGVzZSBhcmUKKyAgICBpbnRlbmRlZCB0byByZWR1Y2UgdGhlIGJyYW5jaGluZXNzIG9mIHBhdGhzIHRocm91Z2ggbWFsbG9jIGV0YywgYXMKKyAgICB3ZWxsIGFzIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIG1lbW9yeSBsb2NhdGlvbnMgcmVhZCBvciB3cml0dGVuLgorCisgIFNlZ21lbnRzCisgICAgQSBsaXN0IG9mIHNlZ21lbnRzIGhlYWRlZCBieSBhbiBlbWJlZGRlZCBtYWxsb2Nfc2VnbWVudCByZWNvcmQKKyAgICByZXByZXNlbnRpbmcgdGhlIGluaXRpYWwgc3BhY2UuCisKKyAgQWRkcmVzcyBjaGVjayBzdXBwb3J0CisgICAgVGhlIGxlYXN0X2FkZHIgZmllbGQgaXMgdGhlIGxlYXN0IGFkZHJlc3MgZXZlciBvYnRhaW5lZCBmcm9tCisgICAgTU9SRUNPUkUgb3IgTU1BUC4gQXR0ZW1wdGVkIGZyZWVzIGFuZCByZWFsbG9jcyBvZiBhbnkgYWRkcmVzcyBsZXNzCisgICAgdGhhbiB0aGlzIGFyZSB0cmFwcGVkICh1bmxlc3MgSU5TRUNVUkUgaXMgZGVmaW5lZCkuCisKKyAgTWFnaWMgdGFnCisgICAgQSBjcm9zcy1jaGVjayBmaWVsZCB0aGF0IHNob3VsZCBhbHdheXMgaG9sZCBzYW1lIHZhbHVlIGFzIG1wYXJhbXMubWFnaWMuCisKKyAgRmxhZ3MKKyAgICBCaXRzIHJlY29yZGluZyB3aGV0aGVyIHRvIHVzZSBNTUFQLCBsb2Nrcywgb3IgY29udGlndW91cyBNT1JFQ09SRQorCisgIFN0YXRpc3RpY3MKKyAgICBFYWNoIHNwYWNlIGtlZXBzIHRyYWNrIG9mIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeQorICAgIG9idGFpbmVkIHZpYSBNT1JFQ09SRSBvciBNTUFQLgorCisgIFRyaW0gc3VwcG9ydAorICAgIEZpZWxkcyBob2xkaW5nIHRoZSBhbW91bnQgb2YgdW51c2VkIHRvcG1vc3QgbWVtb3J5IHRoYXQgc2hvdWxkIHRyaWdnZXIKKyAgICB0aW1taW5nLCBhbmQgYSBjb3VudGVyIHRvIGZvcmNlIHBlcmlvZGljIHNjYW5uaW5nIHRvIHJlbGVhc2UgdW51c2VkCisgICAgbm9uLXRvcG1vc3Qgc2VnbWVudHMuCisKKyAgTG9ja2luZworICAgIElmIFVTRV9MT0NLUyBpcyBkZWZpbmVkLCB0aGUgIm11dGV4IiBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZWxlYXNlZAorICAgIGFyb3VuZCBldmVyeSBwdWJsaWMgY2FsbCB1c2luZyB0aGlzIG1zcGFjZS4KKworICBFeHRlbnNpb24gc3VwcG9ydAorICAgIEEgdm9pZCogcG9pbnRlciBhbmQgYSBzaXplX3QgZmllbGQgdGhhdCBjYW4gYmUgdXNlZCB0byBoZWxwIGltcGxlbWVudAorICAgIGV4dGVuc2lvbnMgdG8gdGhpcyBtYWxsb2MuCisqLworCisvKiBCaW4gdHlwZXMsIHdpZHRocyBhbmQgc2l6ZXMgKi8KKyNkZWZpbmUgTlNNQUxMQklOUyAgICAgICAgKDMyVSkKKyNkZWZpbmUgTlRSRUVCSU5TICAgICAgICAgKDMyVSkKKyNkZWZpbmUgU01BTExCSU5fU0hJRlQgICAgKDNVKQorI2RlZmluZSBTTUFMTEJJTl9XSURUSCAgICAoU0laRV9UX09ORSA8PCBTTUFMTEJJTl9TSElGVCkKKyNkZWZpbmUgVFJFRUJJTl9TSElGVCAgICAgKDhVKQorI2RlZmluZSBNSU5fTEFSR0VfU0laRSAgICAoU0laRV9UX09ORSA8PCBUUkVFQklOX1NISUZUKQorI2RlZmluZSBNQVhfU01BTExfU0laRSAgICAoTUlOX0xBUkdFX1NJWkUgLSBTSVpFX1RfT05FKQorI2RlZmluZSBNQVhfU01BTExfUkVRVUVTVCAoTUFYX1NNQUxMX1NJWkUgLSBDSFVOS19BTElHTl9NQVNLIC0gQ0hVTktfT1ZFUkhFQUQpCisKK3N0cnVjdCBtYWxsb2Nfc3RhdGUgeworICBiaW5tYXBfdCAgIHNtYWxsbWFwOworICBiaW5tYXBfdCAgIHRyZWVtYXA7CisgIHNpemVfdCAgICAgZHZzaXplOworICBzaXplX3QgICAgIHRvcHNpemU7CisgIGNoYXIqICAgICAgbGVhc3RfYWRkcjsKKyAgbWNodW5rcHRyICBkdjsKKyAgbWNodW5rcHRyICB0b3A7CisgIHNpemVfdCAgICAgdHJpbV9jaGVjazsKKyAgc2l6ZV90ICAgICByZWxlYXNlX2NoZWNrczsKKyAgc2l6ZV90ICAgICBtYWdpYzsKKyAgbWNodW5rcHRyICBzbWFsbGJpbnNbKE5TTUFMTEJJTlMrMSkqMl07CisgIHRiaW5wdHIgICAgdHJlZWJpbnNbTlRSRUVCSU5TXTsKKyAgc2l6ZV90ICAgICBmb290cHJpbnQ7CisgIHNpemVfdCAgICAgbWF4X2Zvb3RwcmludDsKKyAgZmxhZ190ICAgICBtZmxhZ3M7CisjaWYgVVNFX0xPQ0tTCisgIE1MT0NLX1QgICAgbXV0ZXg7ICAgICAvKiBsb2NhdGUgbG9jayBhbW9uZyBmaWVsZHMgdGhhdCByYXJlbHkgY2hhbmdlICovCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisgIG1zZWdtZW50ICAgc2VnOworICB2b2lkKiAgICAgIGV4dHA7ICAgICAgLyogVW51c2VkIGJ1dCBhdmFpbGFibGUgZm9yIGV4dGVuc2lvbnMgKi8KKyAgc2l6ZV90ICAgICBleHRzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3N0YXRlKiAgICBtc3RhdGU7CisKKy8qIC0tLS0tLS0tLS0tLS0gR2xvYmFsIG1hbGxvY19zdGF0ZSBhbmQgbWFsbG9jX3BhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIG1hbGxvY19wYXJhbXMgaG9sZHMgZ2xvYmFsIHByb3BlcnRpZXMsIGluY2x1ZGluZyB0aG9zZSB0aGF0IGNhbiBiZQorICBkeW5hbWljYWxseSBzZXQgdXNpbmcgbWFsbG9wdC4gVGhlcmUgaXMgYSBzaW5nbGUgaW5zdGFuY2UsIG1wYXJhbXMsCisgIGluaXRpYWxpemVkIGluIGluaXRfbXBhcmFtcy4gTm90ZSB0aGF0IHRoZSBub24temVyb25lc3Mgb2YgIm1hZ2ljIgorICBhbHNvIHNlcnZlcyBhcyBhbiBpbml0aWFsaXphdGlvbiBmbGFnLgorKi8KKworc3RydWN0IG1hbGxvY19wYXJhbXMgeworICB2b2xhdGlsZSBzaXplX3QgbWFnaWM7CisgIHNpemVfdCBwYWdlX3NpemU7CisgIHNpemVfdCBncmFudWxhcml0eTsKKyAgc2l6ZV90IG1tYXBfdGhyZXNob2xkOworICBzaXplX3QgdHJpbV90aHJlc2hvbGQ7CisgIGZsYWdfdCBkZWZhdWx0X21mbGFnczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFsbG9jX3BhcmFtcyBtcGFyYW1zOworCisvKiBFbnN1cmUgbXBhcmFtcyBpbml0aWFsaXplZCAqLworI2RlZmluZSBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKSAoKHZvaWQpKG1wYXJhbXMubWFnaWMgIT0gMCB8fCBpbml0X21wYXJhbXMoKSkpCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIFRoZSBnbG9iYWwgbWFsbG9jX3N0YXRlIHVzZWQgZm9yIGFsbCBub24tIm1zcGFjZSIgY2FsbHMgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFsbG9jX3N0YXRlIF9nbV87CisjZGVmaW5lIGdtICAgICAgICAgICAgICAgICAoJl9nbV8pCisjZGVmaW5lIGlzX2dsb2JhbChNKSAgICAgICAoKE0pID09ICZfZ21fKQorCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLworCisjZGVmaW5lIGlzX2luaXRpYWxpemVkKE0pICAoKE0pLT50b3AgIT0gMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3lzdGVtIGFsbG9jIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogT3BlcmF0aW9ucyBvbiBtZmxhZ3MgKi8KKworI2RlZmluZSB1c2VfbG9jayhNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTE9DS19CSVQpCisjZGVmaW5lIGVuYWJsZV9sb2NrKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9MT0NLX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9sb2NrKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX0xPQ0tfQklUKQorCisjZGVmaW5lIHVzZV9tbWFwKE0pICAgICAgICAgICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9NTUFQX0JJVCkKKyNkZWZpbmUgZW5hYmxlX21tYXAoTSkgICAgICAgICgoTSktPm1mbGFncyB8PSAgVVNFX01NQVBfQklUKQorI2RlZmluZSBkaXNhYmxlX21tYXAoTSkgICAgICAgKChNKS0+bWZsYWdzICY9IH5VU0VfTU1BUF9CSVQpCisKKyNkZWZpbmUgdXNlX25vbmNvbnRpZ3VvdXMoTSkgICgoTSktPm1mbGFncyAmICAgVVNFX05PTkNPTlRJR1VPVVNfQklUKQorI2RlZmluZSBkaXNhYmxlX2NvbnRpZ3VvdXMoTSkgKChNKS0+bWZsYWdzIHw9ICBVU0VfTk9OQ09OVElHVU9VU19CSVQpCisKKyNkZWZpbmUgc2V0X2xvY2soTSxMKVwKKyAoKE0pLT5tZmxhZ3MgPSAoTCk/XAorICAoKE0pLT5tZmxhZ3MgfCBVU0VfTE9DS19CSVQpIDpcCisgICgoTSktPm1mbGFncyAmIH5VU0VfTE9DS19CSVQpKQorCisvKiBwYWdlLWFsaWduIGEgc2l6ZSAqLworI2RlZmluZSBwYWdlX2FsaWduKFMpXAorICgoKFMpICsgKG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpICYgfihtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKQorCisvKiBncmFudWxhcml0eS1hbGlnbiBhIHNpemUgKi8KKyNkZWZpbmUgZ3JhbnVsYXJpdHlfYWxpZ24oUylcCisgICgoKFMpICsgKG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSlcCisgICAmIH4obXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKQorCisKKy8qIEZvciBtbWFwLCB1c2UgZ3JhbnVsYXJpdHkgYWxpZ25tZW50IG9uIHdpbmRvd3MsIGVsc2UgcGFnZS1hbGlnbiAqLworI2lmZGVmIFdJTjMyCisjZGVmaW5lIG1tYXBfYWxpZ24oUykgZ3JhbnVsYXJpdHlfYWxpZ24oUykKKyNlbHNlCisjZGVmaW5lIG1tYXBfYWxpZ24oUykgcGFnZV9hbGlnbihTKQorI2VuZGlmCisKKy8qIEZvciBzeXNfYWxsb2MsIGVub3VnaCBwYWRkaW5nIHRvIGVuc3VyZSBjYW4gbWFsbG9jIHJlcXVlc3Qgb24gc3VjY2VzcyAqLworI2RlZmluZSBTWVNfQUxMT0NfUEFERElORyAoVE9QX0ZPT1RfU0laRSArIE1BTExPQ19BTElHTk1FTlQpCisKKyNkZWZpbmUgaXNfcGFnZV9hbGlnbmVkKFMpXAorICAgKCgoc2l6ZV90KShTKSAmIChtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKSA9PSAwKQorI2RlZmluZSBpc19ncmFudWxhcml0eV9hbGlnbmVkKFMpXAorICAgKCgoc2l6ZV90KShTKSAmIChtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpID09IDApCisKKy8qICBUcnVlIGlmIHNlZ21lbnQgUyBob2xkcyBhZGRyZXNzIEEgKi8KKyNkZWZpbmUgc2VnbWVudF9ob2xkcyhTLCBBKVwKKyAgKChjaGFyKikoQSkgPj0gUy0+YmFzZSAmJiAoY2hhciopKEEpIDwgUy0+YmFzZSArIFMtPnNpemUpCisKKy8qIFJldHVybiBzZWdtZW50IGhvbGRpbmcgZ2l2ZW4gYWRkcmVzcyAqLworc3RhdGljIG1zZWdtZW50cHRyIHNlZ21lbnRfaG9sZGluZyhtc3RhdGUgbSwgY2hhciogYWRkcikgeworICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgIGZvciAoOzspIHsKKyAgICBpZiAoYWRkciA+PSBzcC0+YmFzZSAmJiBhZGRyIDwgc3AtPmJhc2UgKyBzcC0+c2l6ZSkKKyAgICAgIHJldHVybiBzcDsKKyAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApCisgICAgICByZXR1cm4gMDsKKyAgfQorfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBzZWdtZW50IGNvbnRhaW5zIGEgc2VnbWVudCBsaW5rICovCitzdGF0aWMgaW50IGhhc19zZWdtZW50X2xpbmsobXN0YXRlIG0sIG1zZWdtZW50cHRyIHNzKSB7CisgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgZm9yICg7OykgeworICAgIGlmICgoY2hhciopc3AgPj0gc3MtPmJhc2UgJiYgKGNoYXIqKXNwIDwgc3MtPmJhc2UgKyBzcy0+c2l6ZSkKKyAgICAgIHJldHVybiAxOworICAgIGlmICgoc3AgPSBzcC0+bmV4dCkgPT0gMCkKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKKyNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0KKyNkZWZpbmUgc2hvdWxkX3RyaW0oTSxzKSAgKChzKSA+IChNKS0+dHJpbV9jaGVjaykKKyNlbHNlICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2RlZmluZSBzaG91bGRfdHJpbShNLHMpICAoMCkKKyNlbmRpZiAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworCisvKgorICBUT1BfRk9PVF9TSVpFIGlzIHBhZGRpbmcgYXQgdGhlIGVuZCBvZiBhIHNlZ21lbnQsIGluY2x1ZGluZyBzcGFjZQorICB0aGF0IG1heSBiZSBuZWVkZWQgdG8gcGxhY2Ugc2VnbWVudCByZWNvcmRzIGFuZCBmZW5jZXBvc3RzIHdoZW4gbmV3CisgIG5vbmNvbnRpZ3VvdXMgc2VnbWVudHMgYXJlIGFkZGVkLgorKi8KKyNkZWZpbmUgVE9QX0ZPT1RfU0laRVwKKyAgKGFsaWduX29mZnNldChjaHVuazJtZW0oMCkpK3BhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpKStNSU5fQ0hVTktfU0laRSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBIb29rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBQUkVBQ1RJT04gc2hvdWxkIGJlIGRlZmluZWQgdG8gcmV0dXJuIDAgb24gc3VjY2VzcywgYW5kIG5vbnplcm8gb24KKyAgZmFpbHVyZS4gSWYgeW91IGFyZSBub3QgdXNpbmcgbG9ja2luZywgeW91IGNhbiByZWRlZmluZSB0aGVzZSB0byBkbworICBhbnl0aGluZyB5b3UgbGlrZS4KKyovCisKKyNpZiBVU0VfTE9DS1MKKworI2RlZmluZSBQUkVBQ1RJT04oTSkgICgodXNlX2xvY2soTSkpPyBBQ1FVSVJFX0xPQ0soJihNKS0+bXV0ZXgpIDogMCkKKyNkZWZpbmUgUE9TVEFDVElPTihNKSB7IGlmICh1c2VfbG9jayhNKSkgUkVMRUFTRV9MT0NLKCYoTSktPm11dGV4KTsgfQorI2Vsc2UgLyogVVNFX0xPQ0tTICovCisKKyNpZm5kZWYgUFJFQUNUSU9OCisjZGVmaW5lIFBSRUFDVElPTihNKSAoMCkKKyNlbmRpZiAgLyogUFJFQUNUSU9OICovCisKKyNpZm5kZWYgUE9TVEFDVElPTgorI2RlZmluZSBQT1NUQUNUSU9OKE0pCisjZW5kaWYgIC8qIFBPU1RBQ1RJT04gKi8KKworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisvKgorICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgdXBvbiBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzLgorICBVU0FHRV9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIG9uIGRldGVjdGVkIGJhZCBmcmVlcyBhbmQKKyAgcmVhbGxvY3MuIFRoZSBhcmd1bWVudCBwIGlzIGFuIGFkZHJlc3MgdGhhdCBtaWdodCBoYXZlIHRyaWdnZXJlZCB0aGUKKyAgZmF1bHQuIEl0IGlzIGlnbm9yZWQgYnkgdGhlIHR3byBwcmVkZWZpbmVkIGFjdGlvbnMsIGJ1dCBtaWdodCBiZQorICB1c2VmdWwgaW4gY3VzdG9tIGFjdGlvbnMgdGhhdCB0cnkgdG8gaGVscCBkaWFnbm9zZSBlcnJvcnMuCisqLworCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgY29ycnVwdGlvbiBlcnJvcnMgY2F1c2luZyByZXNldHMgKi8KK2ludCBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKworLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLworc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pOworCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pICByZXNldF9vbl9lcnJvcihtKQorI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSwgcCkKKworI2Vsc2UgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisjaWZuZGVmIENPUlJVUFRJT05fRVJST1JfQUNUSU9OCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pIEFCT1JUCisjZW5kaWYgLyogQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gKi8KKworI2lmbmRlZiBVU0FHRV9FUlJPUl9BQ1RJT04KKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0scCkgQUJPUlQKKyNlbmRpZiAvKiBVU0FHRV9FUlJPUl9BQ1RJT04gKi8KKworI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWdnaW5nIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICEgREVCVUcKKworI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikKKyNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY19zdGF0ZShNKQorI2RlZmluZSBjaGVja190b3BfY2h1bmsoTSxQKQorCisjZWxzZSAvKiBERUJVRyAqLworI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkgICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKE0sUCkgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApICAgICAgICBkb19jaGVja190b3BfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pCisjZGVmaW5lIGNoZWNrX21tYXBwZWRfY2h1bmsoTSxQKSAgICBkb19jaGVja19tbWFwcGVkX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pICAgICAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShNKQorCitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2FueV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja190b3BfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19pbnVzZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19mcmVlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkKiBtZW0sIHNpemVfdCBzKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpOworc3RhdGljIHZvaWQgICBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOworc3RhdGljIHZvaWQgICBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pOworc3RhdGljIGludCAgICBiaW5fZmluZChtc3RhdGUgbSwgbWNodW5rcHRyIHgpOworc3RhdGljIHNpemVfdCB0cmF2ZXJzZV9hbmRfY2hlY2sobXN0YXRlIG0pOworI2VuZGlmIC8qIERFQlVHICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5kZXhpbmcgQmlucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgaXNfc21hbGwocykgICAgICAgICAoKChzKSA+PiBTTUFMTEJJTl9TSElGVCkgPCBOU01BTExCSU5TKQorI2RlZmluZSBzbWFsbF9pbmRleChzKSAgICAgICgocykgID4+IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBzbWFsbF9pbmRleDJzaXplKGkpICgoaSkgIDw8IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBNSU5fU01BTExfSU5ERVggICAgIChzbWFsbF9pbmRleChNSU5fQ0hVTktfU0laRSkpCisKKy8qIGFkZHJlc3NpbmcgYnkgaW5kZXguIFNlZSBhYm92ZSBhYm91dCBzbWFsbGJpbiByZXBvc2l0aW9uaW5nICovCisjZGVmaW5lIHNtYWxsYmluX2F0KE0sIGkpICAgKChzYmlucHRyKSgoY2hhciopJigoTSktPnNtYWxsYmluc1soaSk8PDFdKSkpCisjZGVmaW5lIHRyZWViaW5fYXQoTSxpKSAgICAgKCYoKE0pLT50cmVlYmluc1tpXSkpCisKKy8qIGFzc2lnbiB0cmVlIGluZGV4IGZvciBzaXplIFMgdG8gdmFyaWFibGUgSS4gVXNlIHg4NiBhc20gaWYgcG9zc2libGUgICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wKKyAgaWYgKFggPT0gMClcCisgICAgSSA9IDA7XAorICBlbHNlIGlmIChYID4gMHhGRkZGKVwKKyAgICBJID0gTlRSRUVCSU5TLTE7XAorICBlbHNlIHtcCisgICAgdW5zaWduZWQgaW50IEs7XAorICAgIF9fYXNtX18oImJzcmxcdCUxLCAlMFxuXHQiIDogIj1yIiAoSykgOiAicm0iICAoWCkpO1wKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKworI2VsaWYgZGVmaW5lZCAoX19JTlRFTF9DT01QSUxFUikKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSyA9IF9iaXRfc2Nhbl9yZXZlcnNlIChYKTsgXAorICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XAorICB9XAorfQorCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMAorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBLO1wKKyAgICBfQml0U2NhblJldmVyc2UoKERXT1JEICopICZLLCBYKTtcCisgICAgSSA9ICAoYmluZGV4X3QpKChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpKTtcCisgIH1cCit9CisKKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgWSA9ICh1bnNpZ25lZCBpbnQpWDtcCisgICAgdW5zaWduZWQgaW50IE4gPSAoKFkgLSAweDEwMCkgPj4gMTYpICYgODtcCisgICAgdW5zaWduZWQgaW50IEsgPSAoKChZIDw8PSBOKSAtIDB4MTAwMCkgPj4gMTYpICYgNDtcCisgICAgTiArPSBLO1wKKyAgICBOICs9IEsgPSAoKChZIDw8PSBLKSAtIDB4NDAwMCkgPj4gMTYpICYgMjtcCisgICAgSyA9IDE0IC0gTiArICgoWSA8PD0gSykgPj4gMTUpO1wKKyAgICBJID0gKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSk7XAorICB9XAorfQorI2VuZGlmIC8qIEdOVUMgKi8KKworLyogQml0IHJlcHJlc2VudGluZyBtYXhpbXVtIHJlc29sdmVkIHNpemUgaW4gYSB0cmVlYmluIGF0IGkgKi8KKyNkZWZpbmUgYml0X2Zvcl90cmVlX2luZGV4KGkpIFwKKyAgIChpID09IE5UUkVFQklOUy0xKT8gKFNJWkVfVF9CSVRTSVpFLTEpIDogKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikKKworLyogU2hpZnQgcGxhY2luZyBtYXhpbXVtIHJlc29sdmVkIGJpdCBpbiBhIHRyZWViaW4gYXQgaSBhcyBzaWduIGJpdCAqLworI2RlZmluZSBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKChpID09IE5UUkVFQklOUy0xKT8gMCA6IFwKKyAgICAoKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpIC0gKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikpKQorCisvKiBUaGUgc2l6ZSBvZiB0aGUgc21hbGxlc3QgY2h1bmsgaGVsZCBpbiBiaW4gd2l0aCBpbmRleCBpICovCisjZGVmaW5lIG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKChTSVpFX1RfT05FIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCkpIHwgIFwKKyAgICgoKHNpemVfdCkoKGkpICYgU0laRV9UX09ORSkpIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDEpKSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBiaW4gbWFwcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBiaXQgY29ycmVzcG9uZGluZyB0byBnaXZlbiBpbmRleCAqLworI2RlZmluZSBpZHgyYml0KGkpICAgICAgICAgICAgICAoKGJpbm1hcF90KSgxKSA8PCAoaSkpCisKKy8qIE1hcmsvQ2xlYXIgYml0cyB3aXRoIGdpdmVuIGluZGV4ICovCisjZGVmaW5lIG1hcmtfc21hbGxtYXAoTSxpKSAgICAgICgoTSktPnNtYWxsbWFwIHw9ICBpZHgyYml0KGkpKQorI2RlZmluZSBjbGVhcl9zbWFsbG1hcChNLGkpICAgICAoKE0pLT5zbWFsbG1hcCAmPSB+aWR4MmJpdChpKSkKKyNkZWZpbmUgc21hbGxtYXBfaXNfbWFya2VkKE0saSkgKChNKS0+c21hbGxtYXAgJiAgIGlkeDJiaXQoaSkpCisKKyNkZWZpbmUgbWFya190cmVlbWFwKE0saSkgICAgICAgKChNKS0+dHJlZW1hcCAgfD0gIGlkeDJiaXQoaSkpCisjZGVmaW5lIGNsZWFyX3RyZWVtYXAoTSxpKSAgICAgICgoTSktPnRyZWVtYXAgICY9IH5pZHgyYml0KGkpKQorI2RlZmluZSB0cmVlbWFwX2lzX21hcmtlZChNLGkpICAoKE0pLT50cmVlbWFwICAmICAgaWR4MmJpdChpKSkKKworLyogaXNvbGF0ZSB0aGUgbGVhc3Qgc2V0IGJpdCBvZiBhIGJpdG1hcCAqLworI2RlZmluZSBsZWFzdF9iaXQoeCkgICAgICAgICAoKHgpICYgLSh4KSkKKworLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2YgbGVhc3QgYml0IG9mIHggb24gKi8KKyNkZWZpbmUgbGVmdF9iaXRzKHgpICAgICAgICAgKCh4PDwxKSB8IC0oeDw8MSkpCisKKy8qIG1hc2sgd2l0aCBhbGwgYml0cyB0byBsZWZ0IG9mIG9yIGVxdWFsIHRvIGxlYXN0IGJpdCBvZiB4IG9uICovCisjZGVmaW5lIHNhbWVfb3JfbGVmdF9iaXRzKHgpICgoeCkgfCAtKHgpKQorCisvKiBpbmRleCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGJpdC4gVXNlIHg4NiBhc20gaWYgcG9zc2libGUgKi8KKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgSjtcCisgIF9fYXNtX18oImJzZmxcdCUxLCAlMFxuXHQiIDogIj1yIiAoSikgOiAicm0iIChYKSk7XAorICBJID0gKGJpbmRleF90KUo7XAorfQorCisjZWxpZiBkZWZpbmVkIChfX0lOVEVMX0NPTVBJTEVSKQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgSjtcCisgIEogPSBfYml0X3NjYW5fZm9yd2FyZCAoWCk7IFwKKyAgSSA9IChiaW5kZXhfdClKO1wKK30KKworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMDAKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IEo7XAorICBfQml0U2NhbkZvcndhcmQoKERXT1JEICopICZKLCBYKTtcCisgIEkgPSAoYmluZGV4X3QpSjtcCit9CisKKyNlbGlmIFVTRV9CVUlMVElOX0ZGUworI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSkgSSA9IGZmcyhYKS0xCisKKyNlbHNlCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBZID0gWCAtIDE7XAorICB1bnNpZ25lZCBpbnQgSyA9IFkgPj4gKDE2LTQpICYgMTY7XAorICB1bnNpZ25lZCBpbnQgTiA9IEs7ICAgICAgICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoOC0zKSAmICA4OyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDQtMikgJiAgNDsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICgyLTEpICYgIDI7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoMS0wKSAmICAxOyAgWSA+Pj0gSztcCisgIEkgPSAoYmluZGV4X3QpKE4gKyBZKTtcCit9CisjZW5kaWYgLyogR05VQyAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJ1bnRpbWUgQ2hlY2sgU3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIEZvciBzZWN1cml0eSwgdGhlIG1haW4gaW52YXJpYW50IGlzIHRoYXQgbWFsbG9jL2ZyZWUvZXRjIG5ldmVyCisgIHdyaXRlcyB0byBhIHN0YXRpYyBhZGRyZXNzIG90aGVyIHRoYW4gbWFsbG9jX3N0YXRlLCB1bmxlc3Mgc3RhdGljCisgIG1hbGxvY19zdGF0ZSBpdHNlbGYgaGFzIGJlZW4gY29ycnVwdGVkLCB3aGljaCBjYW5ub3Qgb2NjdXIgdmlhCisgIG1hbGxvYyAoYmVjYXVzZSBvZiB0aGVzZSBjaGVja3MpLiBJbiBlc3NlbmNlIHRoaXMgbWVhbnMgdGhhdCB3ZQorICBiZWxpZXZlIGFsbCBwb2ludGVycywgc2l6ZXMsIG1hcHMgZXRjIGhlbGQgaW4gbWFsbG9jX3N0YXRlLCBidXQKKyAgY2hlY2sgYWxsIG9mIHRob3NlIGxpbmtlZCBvciBvZmZzZXR0ZWQgZnJvbSBvdGhlciBlbWJlZGRlZCBkYXRhCisgIHN0cnVjdHVyZXMuICBUaGVzZSBjaGVja3MgYXJlIGludGVyc3BlcnNlZCB3aXRoIG1haW4gY29kZSBpbiBhIHdheQorICB0aGF0IHRlbmRzIHRvIG1pbmltaXplIHRoZWlyIHJ1bi10aW1lIGNvc3QuCisKKyAgV2hlbiBGT09URVJTIGlzIGRlZmluZWQsIGluIGFkZGl0aW9uIHRvIHJhbmdlIGNoZWNraW5nLCB3ZSBhbHNvCisgIHZlcmlmeSBmb290ZXIgZmllbGRzIG9mIGludXNlIGNodW5rcywgd2hpY2ggY2FuIGJlIHVzZWQgZ3VhcmFudGVlCisgIHRoYXQgdGhlIG1zdGF0ZSBjb250cm9sbGluZyBtYWxsb2MvZnJlZSBpcyBpbnRhY3QuICBUaGlzIGlzIGEKKyAgc3RyZWFtbGluZWQgdmVyc2lvbiBvZiB0aGUgYXBwcm9hY2ggZGVzY3JpYmVkIGJ5IFdpbGxpYW0gUm9iZXJ0c29uCisgIGV0IGFsIGluICJSdW4tdGltZSBEZXRlY3Rpb24gb2YgSGVhcC1iYXNlZCBPdmVyZmxvd3MiIExJU0EnMDMKKyAgaHR0cDovL3d3dy51c2VuaXgub3JnL2V2ZW50cy9saXNhMDMvdGVjaC9yb2JlcnRzb24uaHRtbCBUaGUgZm9vdGVyCisgIG9mIGFuIGludXNlIGNodW5rIGhvbGRzIHRoZSB4b3Igb2YgaXRzIG1zdGF0ZSBhbmQgYSByYW5kb20gc2VlZCwKKyAgdGhhdCBpcyBjaGVja2VkIHVwb24gY2FsbHMgdG8gZnJlZSgpIGFuZCByZWFsbG9jKCkuICBUaGlzIGlzCisgIChwcm9iYWJsaXN0aWNhbGx5KSB1bmd1ZXNzYWJsZSBmcm9tIG91dHNpZGUgdGhlIHByb2dyYW0sIGJ1dCBjYW4gYmUKKyAgY29tcHV0ZWQgYnkgYW55IGNvZGUgc3VjY2Vzc2Z1bGx5IG1hbGxvYydpbmcgYW55IGNodW5rLCBzbyBkb2VzIG5vdAorICBpdHNlbGYgcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgY29kZSB0aGF0IGhhcyBhbHJlYWR5IGJyb2tlbgorICBzZWN1cml0eSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuICBVbmxpa2UgUm9iZXJ0c29uIGV0IGFsLCB3ZQorICBhbHdheXMgZHluYW1pY2FsbHkgY2hlY2sgYWRkcmVzc2VzIG9mIGFsbCBvZmZzZXQgY2h1bmtzIChwcmV2aW91cywKKyAgbmV4dCwgZXRjKS4gVGhpcyB0dXJucyBvdXQgdG8gYmUgY2hlYXBlciB0aGFuIHJlbHlpbmcgb24gaGFzaGVzLgorKi8KKworI2lmICFJTlNFQ1VSRQorLyogQ2hlY2sgaWYgYWRkcmVzcyBhIGlzIGF0IGxlYXN0IGFzIGhpZ2ggYXMgYW55IGZyb20gTU9SRUNPUkUgb3IgTU1BUCAqLworI2RlZmluZSBva19hZGRyZXNzKE0sIGEpICgoY2hhciopKGEpID49IChNKS0+bGVhc3RfYWRkcikKKy8qIENoZWNrIGlmIGFkZHJlc3Mgb2YgbmV4dCBjaHVuayBuIGlzIGhpZ2hlciB0aGFuIGJhc2UgY2h1bmsgcCAqLworI2RlZmluZSBva19uZXh0KHAsIG4pICAgICgoY2hhciopKHApIDwgKGNoYXIqKShuKSkKKy8qIENoZWNrIGlmIHAgaGFzIGl0cyBjaW51c2UgYml0IG9uICovCisjZGVmaW5lIG9rX2NpbnVzZShwKSAgICAgY2ludXNlKHApCisvKiBDaGVjayBpZiBwIGhhcyBpdHMgcGludXNlIGJpdCBvbiAqLworI2RlZmluZSBva19waW51c2UocCkgICAgIHBpbnVzZShwKQorCisjZWxzZSAvKiAhSU5TRUNVUkUgKi8KKyNkZWZpbmUgb2tfYWRkcmVzcyhNLCBhKSAoMSkKKyNkZWZpbmUgb2tfbmV4dChiLCBuKSAgICAoMSkKKyNkZWZpbmUgb2tfY2ludXNlKHApICAgICAoMSkKKyNkZWZpbmUgb2tfcGludXNlKHApICAgICAoMSkKKyNlbmRpZiAvKiAhSU5TRUNVUkUgKi8KKworI2lmIChGT09URVJTICYmICFJTlNFQ1VSRSkKKy8qIENoZWNrIGlmIChhbGxlZ2VkKSBtc3RhdGUgbSBoYXMgZXhwZWN0ZWQgbWFnaWMgZmllbGQgKi8KKyNkZWZpbmUgb2tfbWFnaWMoTSkgICAgICAoKE0pLT5tYWdpYyA9PSBtcGFyYW1zLm1hZ2ljKQorI2Vsc2UgIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKyNkZWZpbmUgb2tfbWFnaWMoTSkgICAgICAoMSkKKyNlbmRpZiAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisKKworLyogSW4gZ2NjLCB1c2UgX19idWlsdGluX2V4cGVjdCB0byBtaW5pbWl6ZSBpbXBhY3Qgb2YgY2hlY2tzICovCisjaWYgIUlOU0VDVVJFCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMworI2RlZmluZSBSVENIRUNLKGUpICBfX2J1aWx0aW5fZXhwZWN0KGUsIDEpCisjZWxzZSAvKiBHTlVDICovCisjZGVmaW5lIFJUQ0hFQ0soZSkgIChlKQorI2VuZGlmIC8qIEdOVUMgKi8KKyNlbHNlIC8qICFJTlNFQ1VSRSAqLworI2RlZmluZSBSVENIRUNLKGUpICAoMSkKKyNlbmRpZiAvKiAhSU5TRUNVUkUgKi8KKworLyogbWFjcm9zIHRvIHNldCB1cCBpbnVzZSBjaHVua3Mgd2l0aCBvciB3aXRob3V0IGZvb3RlcnMgKi8KKworI2lmICFGT09URVJTCisKKyNkZWZpbmUgbWFya19pbnVzZV9mb290KE0scCxzKQorCisvKiBTZXQgY2ludXNlIGJpdCBhbmQgcGludXNlIGJpdCBvZiBuZXh0IGNodW5rICovCisjZGVmaW5lIHNldF9pbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXAorICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCkKKworLyogU2V0IGNpbnVzZSBhbmQgcGludXNlIG9mIHRoaXMgY2h1bmsgYW5kIHBpbnVzZSBvZiBuZXh0IGNodW5rICovCisjZGVmaW5lIHNldF9pbnVzZV9hbmRfcGludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCkKKworLyogU2V0IHNpemUsIGNpbnVzZSBhbmQgcGludXNlIGJpdCBvZiB0aGlzIGNodW5rICovCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoTSwgcCwgcylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpKQorCisjZWxzZSAvKiBGT09URVJTICovCisKKy8qIFNldCBmb290IG9mIGludXNlIGNodW5rIHRvIGJlIHhvciBvZiBtc3RhdGUgYW5kIHNlZWQgKi8KKyNkZWZpbmUgbWFya19pbnVzZV9mb290KE0scCxzKVwKKyAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCA9ICgoc2l6ZV90KShNKSBeIG1wYXJhbXMubWFnaWMpKQorCisjZGVmaW5lIGdldF9tc3RhdGVfZm9yKHApXAorICAoKG1zdGF0ZSkoKChtY2h1bmtwdHIpKChjaGFyKikocCkgK1wKKyAgICAoY2h1bmtzaXplKHApKSkpLT5wcmV2X2Zvb3QgXiBtcGFyYW1zLm1hZ2ljKSkKKworI2RlZmluZSBzZXRfaW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKCgocCktPmhlYWQgJiBQSU5VU0VfQklUKXxzfENJTlVTRV9CSVQpLFwKKyAgKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKSwgXAorICBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpKQorCisjZGVmaW5lIHNldF9pbnVzZV9hbmRfcGludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLFwKKyBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpKQorCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoTSwgcCwgcylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwKKyAgbWFya19pbnVzZV9mb290KE0sIHAsIHMpKQorCisjZW5kaWYgLyogIUZPT1RFUlMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzZXR0aW5nIG1wYXJhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW5pdGlhbGl6ZSBtcGFyYW1zICovCitzdGF0aWMgaW50IGluaXRfbXBhcmFtcyh2b2lkKSB7CisjaWZkZWYgTkVFRF9HTE9CQUxfTE9DS19JTklUCisgIGlmIChtYWxsb2NfZ2xvYmFsX211dGV4X3N0YXR1cyA8PSAwKQorICAgIGluaXRfbWFsbG9jX2dsb2JhbF9tdXRleCgpOworI2VuZGlmCisKKyAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgaWYgKG1wYXJhbXMubWFnaWMgPT0gMCkgeworICAgIHNpemVfdCBtYWdpYzsKKyAgICBzaXplX3QgcHNpemU7CisgICAgc2l6ZV90IGdzaXplOworCisjaWZuZGVmIFdJTjMyCisgICAgcHNpemUgPSBtYWxsb2NfZ2V0cGFnZXNpemU7CisgICAgZ3NpemUgPSAoKERFRkFVTFRfR1JBTlVMQVJJVFkgIT0gMCk/IERFRkFVTFRfR1JBTlVMQVJJVFkgOiBwc2l6ZSk7CisjZWxzZSAvKiBXSU4zMiAqLworICAgIHsKKyAgICAgIFNZU1RFTV9JTkZPIHN5c3RlbV9pbmZvOworICAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtX2luZm8pOworICAgICAgcHNpemUgPSBzeXN0ZW1faW5mby5kd1BhZ2VTaXplOworICAgICAgZ3NpemUgPSAoKERFRkFVTFRfR1JBTlVMQVJJVFkgIT0gMCk/CisJICAgICAgIERFRkFVTFRfR1JBTlVMQVJJVFkgOiBzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eSk7CisgICAgfQorI2VuZGlmIC8qIFdJTjMyICovCisKKyAgICAvKiBTYW5pdHktY2hlY2sgY29uZmlndXJhdGlvbjoKKyAgICAgICBzaXplX3QgbXVzdCBiZSB1bnNpZ25lZCBhbmQgYXMgd2lkZSBhcyBwb2ludGVyIHR5cGUuCisgICAgICAgaW50cyBtdXN0IGJlIGF0IGxlYXN0IDQgYnl0ZXMuCisgICAgICAgYWxpZ25tZW50IG11c3QgYmUgYXQgbGVhc3QgOC4KKyAgICAgICBBbGlnbm1lbnQsIG1pbiBjaHVuayBzaXplLCBhbmQgcGFnZSBzaXplIG11c3QgYWxsIGJlIHBvd2VycyBvZiAyLgorICAgICovCisgICAgaWYgKChzaXplb2Yoc2l6ZV90KSAhPSBzaXplb2YoY2hhciopKSB8fAorCShNQVhfU0laRV9UIDwgTUlOX0NIVU5LX1NJWkUpICB8fAorCShzaXplb2YoaW50KSA8IDQpICB8fAorCShNQUxMT0NfQUxJR05NRU5UIDwgKHNpemVfdCk4VSkgfHwKKwkoKE1BTExPQ19BTElHTk1FTlQgJiAoTUFMTE9DX0FMSUdOTUVOVC1TSVpFX1RfT05FKSkgIT0gMCkgfHwKKwkoKE1DSFVOS19TSVpFICAgICAgJiAoTUNIVU5LX1NJWkUtU0laRV9UX09ORSkpICAgICAgIT0gMCkgfHwKKwkoKGdzaXplICAgICAgICAgICAgJiAoZ3NpemUtU0laRV9UX09ORSkpICAgICAgICAgICAgIT0gMCkgfHwKKwkoKHBzaXplICAgICAgICAgICAgJiAocHNpemUtU0laRV9UX09ORSkpICAgICAgICAgICAgIT0gMCkpCisgICAgICBBQk9SVDsKKworICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSBnc2l6ZTsKKyAgICBtcGFyYW1zLnBhZ2Vfc2l6ZSA9IHBzaXplOworICAgIG1wYXJhbXMubW1hcF90aHJlc2hvbGQgPSBERUZBVUxUX01NQVBfVEhSRVNIT0xEOworICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEOworI2lmIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVDsKKyNlbHNlICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisgICAgbXBhcmFtcy5kZWZhdWx0X21mbGFncyA9IFVTRV9MT0NLX0JJVHxVU0VfTU1BUF9CSVR8VVNFX05PTkNPTlRJR1VPVVNfQklUOworI2VuZGlmIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKworI2lmICFPTkxZX01TUEFDRVMKKyAgICAvKiBTZXQgdXAgbG9jayBmb3IgbWFpbiBtYWxsb2MgYXJlYSAqLworICAgIGdtLT5tZmxhZ3MgPSBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzOworICAgIElOSVRJQUxfTE9DSygmZ20tPm11dGV4KTsKKyNlbmRpZgorCisjaWYgKEZPT1RFUlMgJiYgIUlOU0VDVVJFKQorICAgIHsKKyNpZiBVU0VfREVWX1JBTkRPTQorICAgICAgaW50IGZkOworICAgICAgdW5zaWduZWQgY2hhciBidWZbc2l6ZW9mKHNpemVfdCldOworICAgICAgLyogVHJ5IHRvIHVzZSAvZGV2L3VyYW5kb20sIGVsc2UgZmFsbCBiYWNrIG9uIHVzaW5nIHRpbWUgKi8KKyAgICAgIGlmICgoZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSkpID49IDAgJiYKKwkgIHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IHNpemVvZihidWYpKSB7CisJbWFnaWMgPSAqKChzaXplX3QgKikgYnVmKTsKKwljbG9zZShmZCk7CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgLyogVVNFX0RFVl9SQU5ET00gKi8KKyNpZmRlZiBXSU4zMgorCW1hZ2ljID0gKHNpemVfdCkoR2V0VGlja0NvdW50KCkgXiAoc2l6ZV90KTB4NTU1NTU1NTVVKTsKKyNlbHNlCisgICAgICBtYWdpYyA9IChzaXplX3QpKHRpbWUoMCkgXiAoc2l6ZV90KTB4NTU1NTU1NTVVKTsKKyNlbmRpZgorICAgICAgbWFnaWMgfD0gKHNpemVfdCk4VTsgICAgLyogZW5zdXJlIG5vbnplcm8gKi8KKyAgICAgIG1hZ2ljICY9IH4oc2l6ZV90KTdVOyAgIC8qIGltcHJvdmUgY2hhbmNlcyBvZiBmYXVsdCBmb3IgYmFkIHZhbHVlcyAqLworICAgIH0KKyNlbHNlIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKyAgICBtYWdpYyA9IChzaXplX3QpMHg1ODU4NTg1OFU7CisjZW5kaWYgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworCisgICAgbXBhcmFtcy5tYWdpYyA9IG1hZ2ljOworICB9CisKKyAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgcmV0dXJuIDE7Cit9CisKKy8qIHN1cHBvcnQgZm9yIG1hbGxvcHQgKi8KK3N0YXRpYyBpbnQgY2hhbmdlX21wYXJhbShpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgc2l6ZV90IHZhbCA9ICh2YWx1ZSA9PSAtMSk/IE1BWF9TSVpFX1QgOiAoc2l6ZV90KXZhbHVlOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgc3dpdGNoKHBhcmFtX251bWJlcikgeworICBjYXNlIE1fVFJJTV9USFJFU0hPTEQ6CisgICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IHZhbDsKKyAgICByZXR1cm4gMTsKKyAgY2FzZSBNX0dSQU5VTEFSSVRZOgorICAgIGlmICh2YWwgPj0gbXBhcmFtcy5wYWdlX3NpemUgJiYgKCh2YWwgJiAodmFsLTEpKSA9PSAwKSkgeworICAgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IHZhbDsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBlbHNlCisgICAgICByZXR1cm4gMDsKKyAgY2FzZSBNX01NQVBfVEhSRVNIT0xEOgorICAgIG1wYXJhbXMubW1hcF90aHJlc2hvbGQgPSB2YWw7CisgICAgcmV0dXJuIDE7CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIDA7CisgIH0KK30KKworI2lmIERFQlVHCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlYnVnZ2luZyBTdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGFueSBjaHVuaywgd2hldGhlciBmcmVlLCBpbnVzZSwgbW1hcHBlZCBldGMgICovCitzdGF0aWMgdm9pZCBkb19jaGVja19hbnlfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgdG9wIGNodW5rICovCitzdGF0aWMgdm9pZCBkb19jaGVja190b3BfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIG1zZWdtZW50cHRyIHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKilwKTsKKyAgc2l6ZV90ICBzeiA9IHAtPmhlYWQgJiB+SU5VU0VfQklUUzsgLyogdGhpcmQtbG93ZXN0IGJpdCBjYW4gYmUgc2V0ISAqLworICBhc3NlcnQoc3AgIT0gMCk7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7CisgIGFzc2VydChzeiA9PSBtLT50b3BzaXplKTsKKyAgYXNzZXJ0KHN6ID4gMCk7CisgIGFzc2VydChzeiA9PSAoKHNwLT5iYXNlICsgc3AtPnNpemUpIC0gKGNoYXIqKXApIC0gVE9QX0ZPT1RfU0laRSk7CisgIGFzc2VydChwaW51c2UocCkpOworICBhc3NlcnQoIXBpbnVzZShjaHVua19wbHVzX29mZnNldChwLCBzeikpKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiAoaW51c2UpIG1tYXBwZWQgY2h1bmtzICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tbWFwcGVkX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBzaXplX3QgIHN6ID0gY2h1bmtzaXplKHApOworICBzaXplX3QgbGVuID0gKHN6ICsgKHAtPnByZXZfZm9vdCAmIH5JU19NTUFQUEVEX0JJVCkgKyBNTUFQX0ZPT1RfUEFEKTsKKyAgYXNzZXJ0KGlzX21tYXBwZWQocCkpOworICBhc3NlcnQodXNlX21tYXAobSkpOworICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKKyAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOworICBhc3NlcnQoIWlzX3NtYWxsKHN6KSk7CisgIGFzc2VydCgobGVuICYgKG1wYXJhbXMucGFnZV9zaXplLVNJWkVfVF9PTkUpKSA9PSAwKTsKKyAgYXNzZXJ0KGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KS0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCk7CisgIGFzc2VydChjaHVua19wbHVzX29mZnNldChwLCBzeitTSVpFX1RfU0laRSktPmhlYWQgPT0gMCk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgaW51c2UgY2h1bmtzICovCitzdGF0aWMgdm9pZCBkb19jaGVja19pbnVzZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgZG9fY2hlY2tfYW55X2NodW5rKG0sIHApOworICBhc3NlcnQoY2ludXNlKHApKTsKKyAgYXNzZXJ0KG5leHRfcGludXNlKHApKTsKKyAgLyogSWYgbm90IHBpbnVzZSBhbmQgbm90IG1tYXBwZWQsIHByZXZpb3VzIGNodW5rIGhhcyBPSyBvZmZzZXQgKi8KKyAgYXNzZXJ0KGlzX21tYXBwZWQocCkgfHwgcGludXNlKHApIHx8IG5leHRfY2h1bmsocHJldl9jaHVuayhwKSkgPT0gcCk7CisgIGlmIChpc19tbWFwcGVkKHApKQorICAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobSwgcCk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgZnJlZSBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2ZyZWVfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIHNpemVfdCBzeiA9IGNodW5rc2l6ZShwKTsKKyAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBzeik7CisgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBwKTsKKyAgYXNzZXJ0KCFjaW51c2UocCkpOworICBhc3NlcnQoIW5leHRfcGludXNlKHApKTsKKyAgYXNzZXJ0ICghaXNfbW1hcHBlZChwKSk7CisgIGlmIChwICE9IG0tPmR2ICYmIHAgIT0gbS0+dG9wKSB7CisgICAgaWYgKHN6ID49IE1JTl9DSFVOS19TSVpFKSB7CisgICAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7CisgICAgICBhc3NlcnQoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKTsKKyAgICAgIGFzc2VydChuZXh0LT5wcmV2X2Zvb3QgPT0gc3opOworICAgICAgYXNzZXJ0KHBpbnVzZShwKSk7CisgICAgICBhc3NlcnQgKG5leHQgPT0gbS0+dG9wIHx8IGNpbnVzZShuZXh0KSk7CisgICAgICBhc3NlcnQocC0+ZmQtPmJrID09IHApOworICAgICAgYXNzZXJ0KHAtPmJrLT5mZCA9PSBwKTsKKyAgICB9CisgICAgZWxzZSAgLyogbWFya2VycyBhcmUgYWx3YXlzIG9mIHNpemUgU0laRV9UX1NJWkUgKi8KKyAgICAgIGFzc2VydChzeiA9PSBTSVpFX1RfU0laRSk7CisgIH0KK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBtYWxsb2NlZCBjaHVua3MgYXQgdGhlIHBvaW50IHRoZXkgYXJlIG1hbGxvY2VkICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2NlZF9jaHVuayhtc3RhdGUgbSwgdm9pZCogbWVtLCBzaXplX3QgcykgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIHNpemVfdCBzeiA9IHAtPmhlYWQgJiB+KFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCk7CisgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcCk7CisgICAgYXNzZXJ0KChzeiAmIENIVU5LX0FMSUdOX01BU0spID09IDApOworICAgIGFzc2VydChzeiA+PSBNSU5fQ0hVTktfU0laRSk7CisgICAgYXNzZXJ0KHN6ID49IHMpOworICAgIC8qIHVubGVzcyBtbWFwcGVkLCBzaXplIGlzIGxlc3MgdGhhbiBNSU5fQ0hVTktfU0laRSBtb3JlIHRoYW4gcmVxdWVzdCAqLworICAgIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHN6IDwgKHMgKyBNSU5fQ0hVTktfU0laRSkpOworICB9Cit9CisKKy8qIENoZWNrIGEgdHJlZSBhbmQgaXRzIHN1YnRyZWVzLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RyZWUobXN0YXRlIG0sIHRjaHVua3B0ciB0KSB7CisgIHRjaHVua3B0ciBoZWFkID0gMDsKKyAgdGNodW5rcHRyIHUgPSB0OworICBiaW5kZXhfdCB0aW5kZXggPSB0LT5pbmRleDsKKyAgc2l6ZV90IHRzaXplID0gY2h1bmtzaXplKHQpOworICBiaW5kZXhfdCBpZHg7CisgIGNvbXB1dGVfdHJlZV9pbmRleCh0c2l6ZSwgaWR4KTsKKyAgYXNzZXJ0KHRpbmRleCA9PSBpZHgpOworICBhc3NlcnQodHNpemUgPj0gTUlOX0xBUkdFX1NJWkUpOworICBhc3NlcnQodHNpemUgPj0gbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpZHgpKTsKKyAgYXNzZXJ0KChpZHggPT0gTlRSRUVCSU5TLTEpIHx8ICh0c2l6ZSA8IG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoKGlkeCsxKSkpKTsKKworICBkbyB7IC8qIHRyYXZlcnNlIHRocm91Z2ggY2hhaW4gb2Ygc2FtZS1zaXplZCBub2RlcyAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCAoKG1jaHVua3B0cil1KSk7CisgICAgYXNzZXJ0KHUtPmluZGV4ID09IHRpbmRleCk7CisgICAgYXNzZXJ0KGNodW5rc2l6ZSh1KSA9PSB0c2l6ZSk7CisgICAgYXNzZXJ0KCFjaW51c2UodSkpOworICAgIGFzc2VydCghbmV4dF9waW51c2UodSkpOworICAgIGFzc2VydCh1LT5mZC0+YmsgPT0gdSk7CisgICAgYXNzZXJ0KHUtPmJrLT5mZCA9PSB1KTsKKyAgICBpZiAodS0+cGFyZW50ID09IDApIHsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFswXSA9PSAwKTsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFsxXSA9PSAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBhc3NlcnQoaGVhZCA9PSAwKTsgLyogb25seSBvbmUgbm9kZSBvbiBjaGFpbiBoYXMgcGFyZW50ICovCisgICAgICBoZWFkID0gdTsKKyAgICAgIGFzc2VydCh1LT5wYXJlbnQgIT0gdSk7CisgICAgICBhc3NlcnQgKHUtPnBhcmVudC0+Y2hpbGRbMF0gPT0gdSB8fAorCSAgICAgIHUtPnBhcmVudC0+Y2hpbGRbMV0gPT0gdSB8fAorCSAgICAgICooKHRiaW5wdHIqKSh1LT5wYXJlbnQpKSA9PSB1KTsKKyAgICAgIGlmICh1LT5jaGlsZFswXSAhPSAwKSB7CisJYXNzZXJ0KHUtPmNoaWxkWzBdLT5wYXJlbnQgPT0gdSk7CisJYXNzZXJ0KHUtPmNoaWxkWzBdICE9IHUpOworCWRvX2NoZWNrX3RyZWUobSwgdS0+Y2hpbGRbMF0pOworICAgICAgfQorICAgICAgaWYgKHUtPmNoaWxkWzFdICE9IDApIHsKKwlhc3NlcnQodS0+Y2hpbGRbMV0tPnBhcmVudCA9PSB1KTsKKwlhc3NlcnQodS0+Y2hpbGRbMV0gIT0gdSk7CisJZG9fY2hlY2tfdHJlZShtLCB1LT5jaGlsZFsxXSk7CisgICAgICB9CisgICAgICBpZiAodS0+Y2hpbGRbMF0gIT0gMCAmJiB1LT5jaGlsZFsxXSAhPSAwKSB7CisJYXNzZXJ0KGNodW5rc2l6ZSh1LT5jaGlsZFswXSkgPCBjaHVua3NpemUodS0+Y2hpbGRbMV0pKTsKKyAgICAgIH0KKyAgICB9CisgICAgdSA9IHUtPmZkOworICB9IHdoaWxlICh1ICE9IHQpOworICBhc3NlcnQoaGVhZCAhPSAwKTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgdHJlZWJpbi4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKSB7CisgIHRiaW5wdHIqIHRiID0gdHJlZWJpbl9hdChtLCBpKTsKKyAgdGNodW5rcHRyIHQgPSAqdGI7CisgIGludCBlbXB0eSA9IChtLT50cmVlbWFwICYgKDFVIDw8IGkpKSA9PSAwOworICBpZiAodCA9PSAwKQorICAgIGFzc2VydChlbXB0eSk7CisgIGlmICghZW1wdHkpCisgICAgZG9fY2hlY2tfdHJlZShtLCB0KTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgc21hbGxiaW4uICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpIHsKKyAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgaSk7CisgIG1jaHVua3B0ciBwID0gYi0+Yms7CisgIHVuc2lnbmVkIGludCBlbXB0eSA9IChtLT5zbWFsbG1hcCAmICgxVSA8PCBpKSkgPT0gMDsKKyAgaWYgKHAgPT0gYikKKyAgICBhc3NlcnQoZW1wdHkpOworICBpZiAoIWVtcHR5KSB7CisgICAgZm9yICg7IHAgIT0gYjsgcCA9IHAtPmJrKSB7CisgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIG1jaHVua3B0ciBxOworICAgICAgLyogZWFjaCBjaHVuayBjbGFpbXMgdG8gYmUgZnJlZSAqLworICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtLCBwKTsKKyAgICAgIC8qIGNodW5rIGJlbG9uZ3MgaW4gYmluICovCisgICAgICBhc3NlcnQoc21hbGxfaW5kZXgoc2l6ZSkgPT0gaSk7CisgICAgICBhc3NlcnQocC0+YmsgPT0gYiB8fCBjaHVua3NpemUocC0+YmspID09IGNodW5rc2l6ZShwKSk7CisgICAgICAvKiBjaHVuayBpcyBmb2xsb3dlZCBieSBhbiBpbnVzZSBjaHVuayAqLworICAgICAgcSA9IG5leHRfY2h1bmsocCk7CisgICAgICBpZiAocS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkKKwlkb19jaGVja19pbnVzZV9jaHVuayhtLCBxKTsKKyAgICB9CisgIH0KK30KKworLyogRmluZCB4IGluIGEgYmluLiBVc2VkIGluIG90aGVyIGNoZWNrIGZ1bmN0aW9ucy4gKi8KK3N0YXRpYyBpbnQgYmluX2ZpbmQobXN0YXRlIG0sIG1jaHVua3B0ciB4KSB7CisgIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHgpOworICBpZiAoaXNfc21hbGwoc2l6ZSkpIHsKKyAgICBiaW5kZXhfdCBzaWR4ID0gc21hbGxfaW5kZXgoc2l6ZSk7CisgICAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgc2lkeCk7CisgICAgaWYgKHNtYWxsbWFwX2lzX21hcmtlZChtLCBzaWR4KSkgeworICAgICAgbWNodW5rcHRyIHAgPSBiOworICAgICAgZG8geworCWlmIChwID09IHgpCisJICByZXR1cm4gMTsKKyAgICAgIH0gd2hpbGUgKChwID0gcC0+ZmQpICE9IGIpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBiaW5kZXhfdCB0aWR4OworICAgIGNvbXB1dGVfdHJlZV9pbmRleChzaXplLCB0aWR4KTsKKyAgICBpZiAodHJlZW1hcF9pc19tYXJrZWQobSwgdGlkeCkpIHsKKyAgICAgIHRjaHVua3B0ciB0ID0gKnRyZWViaW5fYXQobSwgdGlkeCk7CisgICAgICBzaXplX3Qgc2l6ZWJpdHMgPSBzaXplIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleCh0aWR4KTsKKyAgICAgIHdoaWxlICh0ICE9IDAgJiYgY2h1bmtzaXplKHQpICE9IHNpemUpIHsKKwl0ID0gdC0+Y2hpbGRbKHNpemViaXRzID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXTsKKwlzaXplYml0cyA8PD0gMTsKKyAgICAgIH0KKyAgICAgIGlmICh0ICE9IDApIHsKKwl0Y2h1bmtwdHIgdSA9IHQ7CisJZG8geworCSAgaWYgKHUgPT0gKHRjaHVua3B0cil4KQorCSAgICByZXR1cm4gMTsKKwl9IHdoaWxlICgodSA9IHUtPmZkKSAhPSB0KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIFRyYXZlcnNlIGVhY2ggY2h1bmsgYW5kIGNoZWNrIGl0OyByZXR1cm4gdG90YWwgKi8KK3N0YXRpYyBzaXplX3QgdHJhdmVyc2VfYW5kX2NoZWNrKG1zdGF0ZSBtKSB7CisgIHNpemVfdCBzdW0gPSAwOworICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKKyAgICBzdW0gKz0gbS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkU7CisgICAgd2hpbGUgKHMgIT0gMCkgeworICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKyAgICAgIG1jaHVua3B0ciBsYXN0cSA9IDA7CisgICAgICBhc3NlcnQocGludXNlKHEpKTsKKyAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCisJICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisJc3VtICs9IGNodW5rc2l6ZShxKTsKKwlpZiAoY2ludXNlKHEpKSB7CisJICBhc3NlcnQoIWJpbl9maW5kKG0sIHEpKTsKKwkgIGRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHEpOworCX0KKwllbHNlIHsKKwkgIGFzc2VydChxID09IG0tPmR2IHx8IGJpbl9maW5kKG0sIHEpKTsKKwkgIGFzc2VydChsYXN0cSA9PSAwIHx8IGNpbnVzZShsYXN0cSkpOyAvKiBOb3QgMiBjb25zZWN1dGl2ZSBmcmVlICovCisJICBkb19jaGVja19mcmVlX2NodW5rKG0sIHEpOworCX0KKwlsYXN0cSA9IHE7CisJcSA9IG5leHRfY2h1bmsocSk7CisgICAgICB9CisgICAgICBzID0gcy0+bmV4dDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHN1bTsKK30KKworLyogQ2hlY2sgYWxsIHByb3BlcnRpZXMgb2YgbWFsbG9jX3N0YXRlLiAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKG1zdGF0ZSBtKSB7CisgIGJpbmRleF90IGk7CisgIHNpemVfdCB0b3RhbDsKKyAgLyogY2hlY2sgYmlucyAqLworICBmb3IgKGkgPSAwOyBpIDwgTlNNQUxMQklOUzsgKytpKQorICAgIGRvX2NoZWNrX3NtYWxsYmluKG0sIGkpOworICBmb3IgKGkgPSAwOyBpIDwgTlRSRUVCSU5TOyArK2kpCisgICAgZG9fY2hlY2tfdHJlZWJpbihtLCBpKTsKKworICBpZiAobS0+ZHZzaXplICE9IDApIHsgLyogY2hlY2sgZHYgY2h1bmsgKi8KKyAgICBkb19jaGVja19hbnlfY2h1bmsobSwgbS0+ZHYpOworICAgIGFzc2VydChtLT5kdnNpemUgPT0gY2h1bmtzaXplKG0tPmR2KSk7CisgICAgYXNzZXJ0KG0tPmR2c2l6ZSA+PSBNSU5fQ0hVTktfU0laRSk7CisgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPmR2KSA9PSAwKTsKKyAgfQorCisgIGlmIChtLT50b3AgIT0gMCkgeyAgIC8qIGNoZWNrIHRvcCBjaHVuayAqLworICAgIGRvX2NoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgIC8qYXNzZXJ0KG0tPnRvcHNpemUgPT0gY2h1bmtzaXplKG0tPnRvcCkpOyByZWR1bmRhbnQgKi8KKyAgICBhc3NlcnQobS0+dG9wc2l6ZSA+IDApOworICAgIGFzc2VydChiaW5fZmluZChtLCBtLT50b3ApID09IDApOworICB9CisKKyAgdG90YWwgPSB0cmF2ZXJzZV9hbmRfY2hlY2sobSk7CisgIGFzc2VydCh0b3RhbCA8PSBtLT5mb290cHJpbnQpOworICBhc3NlcnQobS0+Zm9vdHByaW50IDw9IG0tPm1heF9mb290cHJpbnQpOworfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRpc3RpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhTk9fTUFMTElORk8KK3N0YXRpYyBzdHJ1Y3QgbWFsbGluZm8gaW50ZXJuYWxfbWFsbGluZm8obXN0YXRlIG0pIHsKKyAgc3RydWN0IG1hbGxpbmZvIG5tID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIGNoZWNrX21hbGxvY19zdGF0ZShtKTsKKyAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICAgIHNpemVfdCBuZnJlZSA9IFNJWkVfVF9PTkU7IC8qIHRvcCBhbHdheXMgZnJlZSAqLworICAgICAgc2l6ZV90IG1mcmVlID0gbS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkU7CisgICAgICBzaXplX3Qgc3VtID0gbWZyZWU7CisgICAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKKyAgICAgIHdoaWxlIChzICE9IDApIHsKKwltY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworCXdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCisJICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKwkgIHNpemVfdCBzeiA9IGNodW5rc2l6ZShxKTsKKwkgIHN1bSArPSBzejsKKwkgIGlmICghY2ludXNlKHEpKSB7CisJICAgIG1mcmVlICs9IHN6OworCSAgICArK25mcmVlOworCSAgfQorCSAgcSA9IG5leHRfY2h1bmsocSk7CisJfQorCXMgPSBzLT5uZXh0OworICAgICAgfQorCisgICAgICBubS5hcmVuYSAgICA9IHN1bTsKKyAgICAgIG5tLm9yZGJsa3MgID0gbmZyZWU7CisgICAgICBubS5oYmxraGQgICA9IG0tPmZvb3RwcmludCAtIHN1bTsKKyAgICAgIG5tLnVzbWJsa3MgID0gbS0+bWF4X2Zvb3RwcmludDsKKyAgICAgIG5tLnVvcmRibGtzID0gbS0+Zm9vdHByaW50IC0gbWZyZWU7CisgICAgICBubS5mb3JkYmxrcyA9IG1mcmVlOworICAgICAgbm0ua2VlcGNvc3QgPSBtLT50b3BzaXplOworICAgIH0KKworICAgIFBPU1RBQ1RJT04obSk7CisgIH0KKyAgcmV0dXJuIG5tOworfQorI2VuZGlmIC8qICFOT19NQUxMSU5GTyAqLworCitzdGF0aWMgdm9pZCBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXN0YXRlIG0pIHsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgc2l6ZV90IG1heGZwID0gMDsKKyAgICBzaXplX3QgZnAgPSAwOworICAgIHNpemVfdCB1c2VkID0gMDsKKyAgICBjaGVja19tYWxsb2Nfc3RhdGUobSk7CisgICAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKKyAgICAgIG1heGZwID0gbS0+bWF4X2Zvb3RwcmludDsKKyAgICAgIGZwID0gbS0+Zm9vdHByaW50OworICAgICAgdXNlZCA9IGZwIC0gKG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFKTsKKworICAgICAgd2hpbGUgKHMgIT0gMCkgeworCW1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisJd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKwkgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworCSAgaWYgKCFjaW51c2UocSkpCisJICAgIHVzZWQgLT0gY2h1bmtzaXplKHEpOworCSAgcSA9IG5leHRfY2h1bmsocSk7CisJfQorCXMgPSBzLT5uZXh0OworICAgICAgfQorICAgIH0KKworICAgIGZwcmludGYoc3RkZXJyLCAibWF4IHN5c3RlbSBieXRlcyA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykobWF4ZnApKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN5c3RlbSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKGZwKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJpbiB1c2UgYnl0ZXMgICAgID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKSh1c2VkKSk7CisKKyAgICBQT1NUQUNUSU9OKG0pOworICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gc21hbGxiaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFZhcmlvdXMgZm9ybXMgb2YgbGlua2luZyBhbmQgdW5saW5raW5nIGFyZSBkZWZpbmVkIGFzIG1hY3Jvcy4gIEV2ZW4KKyAgdGhlIG9uZXMgZm9yIHRyZWVzLCB3aGljaCBhcmUgdmVyeSBsb25nIGJ1dCBoYXZlIHZlcnkgc2hvcnQgdHlwaWNhbAorICBwYXRocy4gIFRoaXMgaXMgdWdseSBidXQgcmVkdWNlcyByZWxpYW5jZSBvbiBpbmxpbmluZyBzdXBwb3J0IG9mCisgIGNvbXBpbGVycy4KKyovCisKKy8qIExpbmsgYSBmcmVlIGNodW5rIGludG8gYSBzbWFsbGJpbiAgKi8KKyNkZWZpbmUgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcCisgIGJpbmRleF90IEkgID0gc21hbGxfaW5kZXgoUyk7XAorICBtY2h1bmtwdHIgQiA9IHNtYWxsYmluX2F0KE0sIEkpO1wKKyAgbWNodW5rcHRyIEYgPSBCO1wKKyAgYXNzZXJ0KFMgPj0gTUlOX0NIVU5LX1NJWkUpO1wKKyAgaWYgKCFzbWFsbG1hcF9pc19tYXJrZWQoTSwgSSkpXAorICAgIG1hcmtfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQi0+ZmQpKSlcCisgICAgRiA9IEItPmZkO1wKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKKyAgQi0+ZmQgPSBQO1wKKyAgRi0+YmsgPSBQO1wKKyAgUC0+ZmQgPSBGO1wKKyAgUC0+YmsgPSBCO1wKK30KKworLyogVW5saW5rIGEgY2h1bmsgZnJvbSBhIHNtYWxsYmluICAqLworI2RlZmluZSB1bmxpbmtfc21hbGxfY2h1bmsoTSwgUCwgUykge1wKKyAgbWNodW5rcHRyIEYgPSBQLT5mZDtcCisgIG1jaHVua3B0ciBCID0gUC0+Yms7XAorICBiaW5kZXhfdCBJID0gc21hbGxfaW5kZXgoUyk7XAorICBhc3NlcnQoUCAhPSBCKTtcCisgIGFzc2VydChQICE9IEYpO1wKKyAgYXNzZXJ0KGNodW5rc2l6ZShQKSA9PSBzbWFsbF9pbmRleDJzaXplKEkpKTtcCisgIGlmIChGID09IEIpXAorICAgIGNsZWFyX3NtYWxsbWFwKE0sIEkpO1wKKyAgZWxzZSBpZiAoUlRDSEVDSygoRiA9PSBzbWFsbGJpbl9hdChNLEkpIHx8IG9rX2FkZHJlc3MoTSwgRikpICYmXAorCQkgICAoQiA9PSBzbWFsbGJpbl9hdChNLEkpIHx8IG9rX2FkZHJlc3MoTSwgQikpKSkge1wKKyAgICBGLT5iayA9IEI7XAorICAgIEItPmZkID0gRjtcCisgIH1cCisgIGVsc2Uge1wKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIH1cCit9CisKKy8qIFVubGluayB0aGUgZmlyc3QgY2h1bmsgZnJvbSBhIHNtYWxsYmluICovCisjZGVmaW5lIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhNLCBCLCBQLCBJKSB7XAorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wKKyAgYXNzZXJ0KFAgIT0gQik7XAorICBhc3NlcnQoUCAhPSBGKTtcCisgIGFzc2VydChjaHVua3NpemUoUCkgPT0gc21hbGxfaW5kZXgyc2l6ZShJKSk7XAorICBpZiAoQiA9PSBGKVwKKyAgICBjbGVhcl9zbWFsbG1hcChNLCBJKTtcCisgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBGKSkpIHtcCisgICAgQi0+ZmQgPSBGO1wKKyAgICBGLT5iayA9IEI7XAorICB9XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorfQorCisKKworLyogUmVwbGFjZSBkdiBub2RlLCBiaW5uaW5nIHRoZSBvbGQgb25lICovCisvKiBVc2VkIG9ubHkgd2hlbiBkdnNpemUga25vd24gdG8gYmUgc21hbGwgKi8KKyNkZWZpbmUgcmVwbGFjZV9kdihNLCBQLCBTKSB7XAorICBzaXplX3QgRFZTID0gTS0+ZHZzaXplO1wKKyAgaWYgKERWUyAhPSAwKSB7XAorICAgIG1jaHVua3B0ciBEViA9IE0tPmR2O1wKKyAgICBhc3NlcnQoaXNfc21hbGwoRFZTKSk7XAorICAgIGluc2VydF9zbWFsbF9jaHVuayhNLCBEViwgRFZTKTtcCisgIH1cCisgIE0tPmR2c2l6ZSA9IFM7XAorICBNLT5kdiA9IFA7XAorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gdHJlZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbnNlcnQgY2h1bmsgaW50byB0cmVlICovCisjZGVmaW5lIGluc2VydF9sYXJnZV9jaHVuayhNLCBYLCBTKSB7XAorICB0YmlucHRyKiBIO1wKKyAgYmluZGV4X3QgSTtcCisgIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKTtcCisgIEggPSB0cmVlYmluX2F0KE0sIEkpO1wKKyAgWC0+aW5kZXggPSBJO1wKKyAgWC0+Y2hpbGRbMF0gPSBYLT5jaGlsZFsxXSA9IDA7XAorICBpZiAoIXRyZWVtYXBfaXNfbWFya2VkKE0sIEkpKSB7XAorICAgIG1hcmtfdHJlZW1hcChNLCBJKTtcCisgICAgKkggPSBYO1wKKyAgICBYLT5wYXJlbnQgPSAodGNodW5rcHRyKUg7XAorICAgIFgtPmZkID0gWC0+YmsgPSBYO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIHRjaHVua3B0ciBUID0gKkg7XAorICAgIHNpemVfdCBLID0gUyA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoSSk7XAorICAgIGZvciAoOzspIHtcCisgICAgICBpZiAoY2h1bmtzaXplKFQpICE9IFMpIHtcCisJdGNodW5rcHRyKiBDID0gJihULT5jaGlsZFsoSyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV0pO1wKKwlLIDw8PSAxO1wKKwlpZiAoKkMgIT0gMClcCisJICBUID0gKkM7XAorCWVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDKSkpIHtcCisJICAqQyA9IFg7XAorCSAgWC0+cGFyZW50ID0gVDtcCisJICBYLT5mZCA9IFgtPmJrID0gWDtcCisJICBicmVhaztcCisJfVwKKwllbHNlIHtcCisJICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisJICBicmVhaztcCisJfVwKKyAgICAgIH1cCisgICAgICBlbHNlIHtcCisJdGNodW5rcHRyIEYgPSBULT5mZDtcCisJaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBUKSAmJiBva19hZGRyZXNzKE0sIEYpKSkge1wKKwkgIFQtPmZkID0gRi0+YmsgPSBYO1wKKwkgIFgtPmZkID0gRjtcCisJICBYLT5iayA9IFQ7XAorCSAgWC0+cGFyZW50ID0gMDtcCisJICBicmVhaztcCisJfVwKKwllbHNlIHtcCisJICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisJICBicmVhaztcCisJfVwKKyAgICAgIH1cCisgICAgfVwKKyAgfVwKK30KKworLyoKKyAgVW5saW5rIHN0ZXBzOgorCisgIDEuIElmIHggaXMgYSBjaGFpbmVkIG5vZGUsIHVubGluayBpdCBmcm9tIGl0cyBzYW1lLXNpemVkIGZkL2JrIGxpbmtzCisgICAgIGFuZCBjaG9vc2UgaXRzIGJrIG5vZGUgYXMgaXRzIHJlcGxhY2VtZW50LgorICAyLiBJZiB4IHdhcyB0aGUgbGFzdCBub2RlIG9mIGl0cyBzaXplLCBidXQgbm90IGEgbGVhZiBub2RlLCBpdCBtdXN0CisgICAgIGJlIHJlcGxhY2VkIHdpdGggYSBsZWFmIG5vZGUgKG5vdCBtZXJlbHkgb25lIHdpdGggYW4gb3BlbiBsZWZ0IG9yCisgICAgIHJpZ2h0KSwgdG8gbWFrZSBzdXJlIHRoYXQgbGVmdHMgYW5kIHJpZ2h0cyBvZiBkZXNjZW5kYW50cworICAgICBjb3JyZXNwb25kIHByb3Blcmx5IHRvIGJpdCBtYXNrcy4gIFdlIHVzZSB0aGUgcmlnaHRtb3N0IGRlc2NlbmRhbnQKKyAgICAgb2YgeC4gIFdlIGNvdWxkIHVzZSBhbnkgb3RoZXIgbGVhZiwgYnV0IHRoaXMgaXMgZWFzeSB0byBsb2NhdGUgYW5kCisgICAgIHRlbmRzIHRvIGNvdW50ZXJhY3QgcmVtb3ZhbCBvZiBsZWZ0bW9zdHMgZWxzZXdoZXJlLCBhbmQgc28ga2VlcHMKKyAgICAgcGF0aHMgc2hvcnRlciB0aGFuIG1pbmltYWxseSBndWFyYW50ZWVkLiAgVGhpcyBkb2Vzbid0IGxvb3AgbXVjaAorICAgICBiZWNhdXNlIG9uIGF2ZXJhZ2UgYSBub2RlIGluIGEgdHJlZSBpcyBuZWFyIHRoZSBib3R0b20uCisgIDMuIElmIHggaXMgdGhlIGJhc2Ugb2YgYSBjaGFpbiAoaS5lLiwgaGFzIHBhcmVudCBsaW5rcykgcmVsaW5rCisgICAgIHgncyBwYXJlbnQgYW5kIGNoaWxkcmVuIHRvIHgncyByZXBsYWNlbWVudCAob3IgbnVsbCBpZiBub25lKS4KKyovCisKKyNkZWZpbmUgdW5saW5rX2xhcmdlX2NodW5rKE0sIFgpIHtcCisgIHRjaHVua3B0ciBYUCA9IFgtPnBhcmVudDtcCisgIHRjaHVua3B0ciBSO1wKKyAgaWYgKFgtPmJrICE9IFgpIHtcCisgICAgdGNodW5rcHRyIEYgPSBYLT5mZDtcCisgICAgUiA9IFgtPmJrO1wKKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEYpKSkge1wKKyAgICAgIEYtPmJrID0gUjtcCisgICAgICBSLT5mZCA9IEY7XAorICAgIH1cCisgICAgZWxzZSB7XAorICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIH1cCisgIH1cCisgIGVsc2Uge1wKKyAgICB0Y2h1bmtwdHIqIFJQO1wKKyAgICBpZiAoKChSID0gKihSUCA9ICYoWC0+Y2hpbGRbMV0pKSkgIT0gMCkgfHxcCisJKChSID0gKihSUCA9ICYoWC0+Y2hpbGRbMF0pKSkgIT0gMCkpIHtcCisgICAgICB0Y2h1bmtwdHIqIENQO1wKKyAgICAgIHdoaWxlICgoKihDUCA9ICYoUi0+Y2hpbGRbMV0pKSAhPSAwKSB8fFwKKwkgICAgICgqKENQID0gJihSLT5jaGlsZFswXSkpICE9IDApKSB7XAorCVIgPSAqKFJQID0gQ1ApO1wKKyAgICAgIH1cCisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFJQKSkpXAorCSpSUCA9IDA7XAorICAgICAgZWxzZSB7XAorCUNPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICAgIH1cCisgICAgfVwKKyAgfVwKKyAgaWYgKFhQICE9IDApIHtcCisgICAgdGJpbnB0ciogSCA9IHRyZWViaW5fYXQoTSwgWC0+aW5kZXgpO1wKKyAgICBpZiAoWCA9PSAqSCkge1wKKyAgICAgIGlmICgoKkggPSBSKSA9PSAwKSBcCisJY2xlYXJfdHJlZW1hcChNLCBYLT5pbmRleCk7XAorICAgIH1cCisgICAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFhQKSkpIHtcCisgICAgICBpZiAoWFAtPmNoaWxkWzBdID09IFgpIFwKKwlYUC0+Y2hpbGRbMF0gPSBSO1wKKyAgICAgIGVsc2UgXAorCVhQLT5jaGlsZFsxXSA9IFI7XAorICAgIH1cCisgICAgZWxzZVwKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICBpZiAoUiAhPSAwKSB7XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSKSkpIHtcCisJdGNodW5rcHRyIEMwLCBDMTtcCisJUi0+cGFyZW50ID0gWFA7XAorCWlmICgoQzAgPSBYLT5jaGlsZFswXSkgIT0gMCkge1wKKwkgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzApKSkge1wKKwkgICAgUi0+Y2hpbGRbMF0gPSBDMDtcCisJICAgIEMwLT5wYXJlbnQgPSBSO1wKKwkgIH1cCisJICBlbHNlXAorCSAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisJfVwKKwlpZiAoKEMxID0gWC0+Y2hpbGRbMV0pICE9IDApIHtcCisJICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMxKSkpIHtcCisJICAgIFItPmNoaWxkWzFdID0gQzE7XAorCSAgICBDMS0+cGFyZW50ID0gUjtcCisJICB9XAorCSAgZWxzZVwKKwkgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorCX1cCisgICAgICB9XAorICAgICAgZWxzZVwKKwlDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgfVwKKyAgfVwKK30KKworLyogUmVsYXlzIHRvIGxhcmdlIHZzIHNtYWxsIGJpbiBvcGVyYXRpb25zICovCisKKyNkZWZpbmUgaW5zZXJ0X2NodW5rKE0sIFAsIFMpXAorICBpZiAoaXNfc21hbGwoUykpIGluc2VydF9zbWFsbF9jaHVuayhNLCBQLCBTKVwKKyAgZWxzZSB7IHRjaHVua3B0ciBUUCA9ICh0Y2h1bmtwdHIpKFApOyBpbnNlcnRfbGFyZ2VfY2h1bmsoTSwgVFAsIFMpOyB9CisKKyNkZWZpbmUgdW5saW5rX2NodW5rKE0sIFAsIFMpXAorICBpZiAoaXNfc21hbGwoUykpIHVubGlua19zbWFsbF9jaHVuayhNLCBQLCBTKVwKKyAgZWxzZSB7IHRjaHVua3B0ciBUUCA9ICh0Y2h1bmtwdHIpKFApOyB1bmxpbmtfbGFyZ2VfY2h1bmsoTSwgVFApOyB9CisKKworLyogUmVsYXlzIHRvIGludGVybmFsIGNhbGxzIHRvIG1hbGxvYy9mcmVlIGZyb20gcmVhbGxvYywgbWVtYWxpZ24gZXRjICovCisKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpIG1zcGFjZV9tYWxsb2MobSwgYikKKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pIG1zcGFjZV9mcmVlKG0sbWVtKTsKKyNlbHNlIC8qIE9OTFlfTVNQQUNFUyAqLworI2lmIE1TUEFDRVMKKyNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpXAorICAgKG0gPT0gZ20pPyBkbG1hbGxvYyhiKSA6IG1zcGFjZV9tYWxsb2MobSwgYikKKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pXAorICAgaWYgKG0gPT0gZ20pIGRsZnJlZShtZW0pOyBlbHNlIG1zcGFjZV9mcmVlKG0sbWVtKTsKKyNlbHNlIC8qIE1TUEFDRVMgKi8KKyNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpIGRsbWFsbG9jKGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBkbGZyZWUobWVtKQorI2VuZGlmIC8qIE1TUEFDRVMgKi8KKyNlbmRpZiAvKiBPTkxZX01TUEFDRVMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERpcmVjdC1tbWFwcGluZyBjaHVua3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRGlyZWN0bHkgbW1hcHBlZCBjaHVua3MgYXJlIHNldCB1cCB3aXRoIGFuIG9mZnNldCB0byB0aGUgc3RhcnQgb2YKKyAgdGhlIG1tYXBwZWQgcmVnaW9uIHN0b3JlZCBpbiB0aGUgcHJldl9mb290IGZpZWxkIG9mIHRoZSBjaHVuay4gVGhpcworICBhbGxvd3MgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50IHRvIE1VTk1BUCB3aGVuIGZyZWVkLAorICBhbmQgYWxzbyBhbGxvd3MgYWRqdXN0bWVudCBvZiB0aGUgcmV0dXJuZWQgY2h1bmsgdG8gbWVldCBhbGlnbm1lbnQKKyAgcmVxdWlyZW1lbnRzIChlc3BlY2lhbGx5IGluIG1lbWFsaWduKS4gIFRoZXJlIGlzIGFsc28gZW5vdWdoIHNwYWNlCisgIGFsbG9jYXRlZCB0byBob2xkIGEgZmFrZSBuZXh0IGNodW5rIG9mIHNpemUgU0laRV9UX1NJWkUgdG8gbWFpbnRhaW4KKyAgdGhlIFBJTlVTRSBiaXQgc28gZnJlZXMgY2FuIGJlIGNoZWNrZWQuCisqLworCisvKiBNYWxsb2MgdXNpbmcgbW1hcCAqLworc3RhdGljIHZvaWQqIG1tYXBfYWxsb2MobXN0YXRlIG0sIHNpemVfdCBuYikgeworICBzaXplX3QgbW1zaXplID0gbW1hcF9hbGlnbihuYiArIFNJWF9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgaWYgKG1tc2l6ZSA+IG5iKSB7ICAgICAvKiBDaGVjayBmb3Igd3JhcCBhcm91bmQgMCAqLworICAgIGNoYXIqIG1tID0gKGNoYXIqKShDQUxMX0RJUkVDVF9NTUFQKG1tc2l6ZSkpOworICAgIGlmIChtbSAhPSBDTUZBSUwpIHsKKyAgICAgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKG1tKSk7CisgICAgICBzaXplX3QgcHNpemUgPSBtbXNpemUgLSBvZmZzZXQgLSBNTUFQX0ZPT1RfUEFEOworICAgICAgbWNodW5rcHRyIHAgPSAobWNodW5rcHRyKShtbSArIG9mZnNldCk7CisgICAgICBwLT5wcmV2X2Zvb3QgPSBvZmZzZXQgfCBJU19NTUFQUEVEX0JJVDsKKyAgICAgIChwKS0+aGVhZCA9IChwc2l6ZXxDSU5VU0VfQklUKTsKKyAgICAgIG1hcmtfaW51c2VfZm9vdChtLCBwLCBwc2l6ZSk7CisgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSktPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplK1NJWkVfVF9TSVpFKS0+aGVhZCA9IDA7CisKKyAgICAgIGlmIChtbSA8IG0tPmxlYXN0X2FkZHIpCisJbS0+bGVhc3RfYWRkciA9IG1tOworICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gbW1zaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisJbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKyAgICAgIGFzc2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOworICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBSZWFsbG9jIHVzaW5nIG1tYXAgKi8KK3N0YXRpYyBtY2h1bmtwdHIgbW1hcF9yZXNpemUobXN0YXRlIG0sIG1jaHVua3B0ciBvbGRwLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgIGlmIChpc19zbWFsbChuYikpIC8qIENhbid0IHNocmluayBtbWFwIHJlZ2lvbnMgYmVsb3cgc21hbGwgc2l6ZSAqLworICAgIHJldHVybiAwOworICAvKiBLZWVwIG9sZCBjaHVuayBpZiBiaWcgZW5vdWdoIGJ1dCBub3QgdG9vIGJpZyAqLworICBpZiAob2xkc2l6ZSA+PSBuYiArIFNJWkVfVF9TSVpFICYmCisgICAgICAob2xkc2l6ZSAtIG5iKSA8PSAobXBhcmFtcy5ncmFudWxhcml0eSA8PCAxKSkKKyAgICByZXR1cm4gb2xkcDsKKyAgZWxzZSB7CisgICAgc2l6ZV90IG9mZnNldCA9IG9sZHAtPnByZXZfZm9vdCAmIH5JU19NTUFQUEVEX0JJVDsKKyAgICBzaXplX3Qgb2xkbW1zaXplID0gb2xkc2l6ZSArIG9mZnNldCArIE1NQVBfRk9PVF9QQUQ7CisgICAgc2l6ZV90IG5ld21tc2l6ZSA9IG1tYXBfYWxpZ24obmIgKyBTSVhfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7CisgICAgY2hhciogY3AgPSAoY2hhciopQ0FMTF9NUkVNQVAoKGNoYXIqKW9sZHAgLSBvZmZzZXQsCisJCQkJICBvbGRtbXNpemUsIG5ld21tc2l6ZSwgMSk7CisgICAgaWYgKGNwICE9IENNRkFJTCkgeworICAgICAgbWNodW5rcHRyIG5ld3AgPSAobWNodW5rcHRyKShjcCArIG9mZnNldCk7CisgICAgICBzaXplX3QgcHNpemUgPSBuZXdtbXNpemUgLSBvZmZzZXQgLSBNTUFQX0ZPT1RfUEFEOworICAgICAgbmV3cC0+aGVhZCA9IChwc2l6ZXxDSU5VU0VfQklUKTsKKyAgICAgIG1hcmtfaW51c2VfZm9vdChtLCBuZXdwLCBwc2l6ZSk7CisgICAgICBjaHVua19wbHVzX29mZnNldChuZXdwLCBwc2l6ZSktPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplK1NJWkVfVF9TSVpFKS0+aGVhZCA9IDA7CisKKyAgICAgIGlmIChjcCA8IG0tPmxlYXN0X2FkZHIpCisJbS0+bGVhc3RfYWRkciA9IGNwOworICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gbmV3bW1zaXplIC0gb2xkbW1zaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisJbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKyAgICAgIGNoZWNrX21tYXBwZWRfY2h1bmsobSwgbmV3cCk7CisgICAgICByZXR1cm4gbmV3cDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1zcGFjZSBtYW5hZ2VtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluaXRpYWxpemUgdG9wIGNodW5rIGFuZCBpdHMgc2l6ZSAqLworc3RhdGljIHZvaWQgaW5pdF90b3AobXN0YXRlIG0sIG1jaHVua3B0ciBwLCBzaXplX3QgcHNpemUpIHsKKyAgLyogRW5zdXJlIGFsaWdubWVudCAqLworICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShwKSk7CisgIHAgPSAobWNodW5rcHRyKSgoY2hhciopcCArIG9mZnNldCk7CisgIHBzaXplIC09IG9mZnNldDsKKworICBtLT50b3AgPSBwOworICBtLT50b3BzaXplID0gcHNpemU7CisgIHAtPmhlYWQgPSBwc2l6ZSB8IFBJTlVTRV9CSVQ7CisgIC8qIHNldCBzaXplIG9mIGZha2UgdHJhaWxpbmcgY2h1bmsgaG9sZGluZyBvdmVyaGVhZCBzcGFjZSBvbmx5IG9uY2UgKi8KKyAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gVE9QX0ZPT1RfU0laRTsKKyAgbS0+dHJpbV9jaGVjayA9IG1wYXJhbXMudHJpbV90aHJlc2hvbGQ7IC8qIHJlc2V0IG9uIGVhY2ggdXBkYXRlICovCit9CisKKy8qIEluaXRpYWxpemUgYmlucyBmb3IgYSBuZXcgbXN0YXRlIHRoYXQgaXMgb3RoZXJ3aXNlIHplcm9lZCBvdXQgKi8KK3N0YXRpYyB2b2lkIGluaXRfYmlucyhtc3RhdGUgbSkgeworICAvKiBFc3RhYmxpc2ggY2lyY3VsYXIgbGlua3MgZm9yIHNtYWxsYmlucyAqLworICBiaW5kZXhfdCBpOworICBmb3IgKGkgPSAwOyBpIDwgTlNNQUxMQklOUzsgKytpKSB7CisgICAgc2JpbnB0ciBiaW4gPSBzbWFsbGJpbl9hdChtLGkpOworICAgIGJpbi0+ZmQgPSBiaW4tPmJrID0gYmluOworICB9Cit9CisKKyNpZiBQUk9DRUVEX09OX0VSUk9SCisKKy8qIGRlZmF1bHQgY29ycnVwdGlvbiBhY3Rpb24gKi8KK3N0YXRpYyB2b2lkIHJlc2V0X29uX2Vycm9yKG1zdGF0ZSBtKSB7CisgIGludCBpOworICArK21hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50OworICAvKiBSZWluaXRpYWxpemUgZmllbGRzIHRvIGZvcmdldCBhYm91dCBhbGwgbWVtb3J5ICovCisgIG0tPnNtYWxsYmlucyA9IG0tPnRyZWViaW5zID0gMDsKKyAgbS0+ZHZzaXplID0gbS0+dG9wc2l6ZSA9IDA7CisgIG0tPnNlZy5iYXNlID0gMDsKKyAgbS0+c2VnLnNpemUgPSAwOworICBtLT5zZWcubmV4dCA9IDA7CisgIG0tPnRvcCA9IG0tPmR2ID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IE5UUkVFQklOUzsgKytpKQorICAgICp0cmVlYmluX2F0KG0sIGkpID0gMDsKKyAgaW5pdF9iaW5zKG0pOworfQorI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworLyogQWxsb2NhdGUgY2h1bmsgYW5kIHByZXBlbmQgcmVtYWluZGVyIHdpdGggY2h1bmsgaW4gc3VjY2Vzc29yIGJhc2UuICovCitzdGF0aWMgdm9pZCogcHJlcGVuZF9hbGxvYyhtc3RhdGUgbSwgY2hhciogbmV3YmFzZSwgY2hhciogb2xkYmFzZSwKKwkJCSAgIHNpemVfdCBuYikgeworICBtY2h1bmtwdHIgcCA9IGFsaWduX2FzX2NodW5rKG5ld2Jhc2UpOworICBtY2h1bmtwdHIgb2xkZmlyc3QgPSBhbGlnbl9hc19jaHVuayhvbGRiYXNlKTsKKyAgc2l6ZV90IHBzaXplID0gKGNoYXIqKW9sZGZpcnN0IC0gKGNoYXIqKXA7CisgIG1jaHVua3B0ciBxID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICBzaXplX3QgcXNpemUgPSBwc2l6ZSAtIG5iOworICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsKKworICBhc3NlcnQoKGNoYXIqKW9sZGZpcnN0ID4gKGNoYXIqKXEpOworICBhc3NlcnQocGludXNlKG9sZGZpcnN0KSk7CisgIGFzc2VydChxc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSk7CisKKyAgLyogY29uc29saWRhdGUgcmVtYWluZGVyIHdpdGggZmlyc3QgY2h1bmsgb2Ygb2xkIGJhc2UgKi8KKyAgaWYgKG9sZGZpcnN0ID09IG0tPnRvcCkgeworICAgIHNpemVfdCB0c2l6ZSA9IG0tPnRvcHNpemUgKz0gcXNpemU7CisgICAgbS0+dG9wID0gcTsKKyAgICBxLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworICAgIGNoZWNrX3RvcF9jaHVuayhtLCBxKTsKKyAgfQorICBlbHNlIGlmIChvbGRmaXJzdCA9PSBtLT5kdikgeworICAgIHNpemVfdCBkc2l6ZSA9IG0tPmR2c2l6ZSArPSBxc2l6ZTsKKyAgICBtLT5kdiA9IHE7CisgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHEsIGRzaXplKTsKKyAgfQorICBlbHNlIHsKKyAgICBpZiAoIWNpbnVzZShvbGRmaXJzdCkpIHsKKyAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShvbGRmaXJzdCk7CisgICAgICB1bmxpbmtfY2h1bmsobSwgb2xkZmlyc3QsIG5zaXplKTsKKyAgICAgIG9sZGZpcnN0ID0gY2h1bmtfcGx1c19vZmZzZXQob2xkZmlyc3QsIG5zaXplKTsKKyAgICAgIHFzaXplICs9IG5zaXplOworICAgIH0KKyAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBxc2l6ZSwgb2xkZmlyc3QpOworICAgIGluc2VydF9jaHVuayhtLCBxLCBxc2l6ZSk7CisgICAgY2hlY2tfZnJlZV9jaHVuayhtLCBxKTsKKyAgfQorCisgIGNoZWNrX21hbGxvY2VkX2NodW5rKG0sIGNodW5rMm1lbShwKSwgbmIpOworICByZXR1cm4gY2h1bmsybWVtKHApOworfQorCisvKiBBZGQgYSBzZWdtZW50IHRvIGhvbGQgYSBuZXcgbm9uY29udGlndW91cyByZWdpb24gKi8KK3N0YXRpYyB2b2lkIGFkZF9zZWdtZW50KG1zdGF0ZSBtLCBjaGFyKiB0YmFzZSwgc2l6ZV90IHRzaXplLCBmbGFnX3QgbW1hcHBlZCkgeworICAvKiBEZXRlcm1pbmUgbG9jYXRpb25zIGFuZCBzaXplcyBvZiBzZWdtZW50LCBmZW5jZXBvc3RzLCBvbGQgdG9wICovCisgIGNoYXIqIG9sZF90b3AgPSAoY2hhciopbS0+dG9wOworICBtc2VnbWVudHB0ciBvbGRzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCBvbGRfdG9wKTsKKyAgY2hhciogb2xkX2VuZCA9IG9sZHNwLT5iYXNlICsgb2xkc3AtPnNpemU7CisgIHNpemVfdCBzc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpKTsKKyAgY2hhciogcmF3c3AgPSBvbGRfZW5kIC0gKHNzaXplICsgRk9VUl9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocmF3c3ApKTsKKyAgY2hhciogYXNwID0gcmF3c3AgKyBvZmZzZXQ7CisgIGNoYXIqIGNzcCA9IChhc3AgPCAob2xkX3RvcCArIE1JTl9DSFVOS19TSVpFKSk/IG9sZF90b3AgOiBhc3A7CisgIG1jaHVua3B0ciBzcCA9IChtY2h1bmtwdHIpY3NwOworICBtc2VnbWVudHB0ciBzcyA9IChtc2VnbWVudHB0cikoY2h1bmsybWVtKHNwKSk7CisgIG1jaHVua3B0ciB0bmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHNwLCBzc2l6ZSk7CisgIG1jaHVua3B0ciBwID0gdG5leHQ7CisgIGludCBuZmVuY2VzID0gMDsKKworICAvKiByZXNldCB0b3AgdG8gbmV3IHNwYWNlICovCisgIGluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7CisKKyAgLyogU2V0IHVwIHNlZ21lbnQgcmVjb3JkICovCisgIGFzc2VydChpc19hbGlnbmVkKHNzKSk7CisgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgc3AsIHNzaXplKTsKKyAgKnNzID0gbS0+c2VnOyAvKiBQdXNoIGN1cnJlbnQgcmVjb3JkICovCisgIG0tPnNlZy5iYXNlID0gdGJhc2U7CisgIG0tPnNlZy5zaXplID0gdHNpemU7CisgIG0tPnNlZy5zZmxhZ3MgPSBtbWFwcGVkOworICBtLT5zZWcubmV4dCA9IHNzOworCisgIC8qIEluc2VydCB0cmFpbGluZyBmZW5jZXBvc3RzICovCisgIGZvciAoOzspIHsKKyAgICBtY2h1bmtwdHIgbmV4dHAgPSBjaHVua19wbHVzX29mZnNldChwLCBTSVpFX1RfU0laRSk7CisgICAgcC0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICsrbmZlbmNlczsKKyAgICBpZiAoKGNoYXIqKSgmKG5leHRwLT5oZWFkKSkgPCBvbGRfZW5kKQorICAgICAgcCA9IG5leHRwOworICAgIGVsc2UKKyAgICAgIGJyZWFrOworICB9CisgIGFzc2VydChuZmVuY2VzID49IDIpOworCisgIC8qIEluc2VydCB0aGUgcmVzdCBvZiBvbGQgdG9wIGludG8gYSBiaW4gYXMgYW4gb3JkaW5hcnkgZnJlZSBjaHVuayAqLworICBpZiAoY3NwICE9IG9sZF90b3ApIHsKKyAgICBtY2h1bmtwdHIgcSA9IChtY2h1bmtwdHIpb2xkX3RvcDsKKyAgICBzaXplX3QgcHNpemUgPSBjc3AgLSBvbGRfdG9wOworICAgIG1jaHVua3B0ciB0biA9IGNodW5rX3BsdXNfb2Zmc2V0KHEsIHBzaXplKTsKKyAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBwc2l6ZSwgdG4pOworICAgIGluc2VydF9jaHVuayhtLCBxLCBwc2l6ZSk7CisgIH0KKworICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3lzdGVtIGFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogR2V0IG1lbW9yeSBmcm9tIHN5c3RlbSB1c2luZyBNT1JFQ09SRSBvciBNTUFQICovCitzdGF0aWMgdm9pZCogc3lzX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgY2hhciogdGJhc2UgPSBDTUZBSUw7CisgIHNpemVfdCB0c2l6ZSA9IDA7CisgIGZsYWdfdCBtbWFwX2ZsYWcgPSAwOworCisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworCisgIC8qIERpcmVjdGx5IG1hcCBsYXJnZSBjaHVua3MgKi8KKyAgaWYgKHVzZV9tbWFwKG0pICYmIG5iID49IG1wYXJhbXMubW1hcF90aHJlc2hvbGQpIHsKKyAgICB2b2lkKiBtZW0gPSBtbWFwX2FsbG9jKG0sIG5iKTsKKyAgICBpZiAobWVtICE9IDApCisgICAgICByZXR1cm4gbWVtOworICB9CisKKyAgLyoKKyAgICBUcnkgZ2V0dGluZyBtZW1vcnkgaW4gYW55IG9mIHRocmVlIHdheXMgKGluIG1vc3QtcHJlZmVycmVkIHRvCisgICAgbGVhc3QtcHJlZmVycmVkIG9yZGVyKToKKyAgICAxLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW4gbm9ybWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnkuCisgICAgICAgKGRpc2FibGVkIGlmIG5vdCBNT1JFQ09SRV9DT05USUdVT1VTIG9yIG5vdCBIQVZFX01PUkVDT1JFIG9yCisgICAgICAgbWFpbiBzcGFjZSBpcyBtbWFwcGVkIG9yIGEgcHJldmlvdXMgY29udGlndW91cyBjYWxsIGZhaWxlZCkKKyAgICAyLiBBIGNhbGwgdG8gTU1BUCBuZXcgc3BhY2UgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01NQVApLgorICAgICAgIE5vdGUgdGhhdCB1bmRlciB0aGUgZGVmYXVsdCBzZXR0aW5ncywgaWYgTU9SRUNPUkUgaXMgdW5hYmxlIHRvCisgICAgICAgZnVsZmlsbCBhIHJlcXVlc3QsIGFuZCBIQVZFX01NQVAgaXMgdHJ1ZSwgdGhlbiBtbWFwIGlzCisgICAgICAgdXNlZCBhcyBhIG5vbmNvbnRpZ3VvdXMgc3lzdGVtIGFsbG9jYXRvci4gVGhpcyBpcyBhIHVzZWZ1bCBiYWNrdXAKKyAgICAgICBzdHJhdGVneSBmb3Igc3lzdGVtcyB3aXRoIGhvbGVzIGluIGFkZHJlc3Mgc3BhY2VzIC0tIGluIHRoaXMgY2FzZQorICAgICAgIHNicmsgY2Fubm90IGNvbnRpZ3VvdXNseSBleHBhbmQgdGhlIGhlYXAsIGJ1dCBtbWFwIG1heSBiZSBhYmxlIHRvCisgICAgICAgZmluZCBzcGFjZS4KKyAgICAzLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW5ub3QgdXN1YWxseSBjb250aWd1b3VzbHkgZXh0ZW5kIG1lbW9yeS4KKyAgICAgICAoZGlzYWJsZWQgaWYgbm90IEhBVkVfTU9SRUNPUkUpCisKKyAgIEluIGFsbCBjYXNlcywgd2UgbmVlZCB0byByZXF1ZXN0IGVub3VnaCBieXRlcyBmcm9tIHN5c3RlbSB0byBlbnN1cmUKKyAgIHdlIGNhbiBtYWxsb2MgbmIgYnl0ZXMgdXBvbiBzdWNjZXNzLCBzbyBwYWQgd2l0aCBlbm91Z2ggc3BhY2UgZm9yCisgICB0b3BfZm9vdCwgcGx1cyBhbGlnbm1lbnQtcGFkIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBsb3NlIGJ5dGVzIGlmCisgICBub3Qgb24gYm91bmRhcnksIGFuZCByb3VuZCB0aGlzIHVwIHRvIGEgZ3JhbnVsYXJpdHkgdW5pdC4KKyAgKi8KKworICBpZiAoTU9SRUNPUkVfQ09OVElHVU9VUyAmJiAhdXNlX25vbmNvbnRpZ3VvdXMobSkpIHsKKyAgICBjaGFyKiBiciA9IENNRkFJTDsKKyAgICBtc2VnbWVudHB0ciBzcyA9IChtLT50b3AgPT0gMCk/IDAgOiBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKW0tPnRvcCk7CisgICAgc2l6ZV90IGFzaXplID0gMDsKKyAgICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworCisgICAgaWYgKHNzID09IDApIHsgIC8qIEZpcnN0IHRpbWUgdGhyb3VnaCBvciByZWNvdmVyeSAqLworICAgICAgY2hhciogYmFzZSA9IChjaGFyKilDQUxMX01PUkVDT1JFKDApOworICAgICAgaWYgKGJhc2UgIT0gQ01GQUlMKSB7CisJYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HKTsKKwkvKiBBZGp1c3QgdG8gZW5kIG9uIGEgcGFnZSBib3VuZGFyeSAqLworCWlmICghaXNfcGFnZV9hbGlnbmVkKGJhc2UpKQorCSAgYXNpemUgKz0gKHBhZ2VfYWxpZ24oKHNpemVfdCliYXNlKSAtIChzaXplX3QpYmFzZSk7CisJLyogQ2FuJ3QgY2FsbCBNT1JFQ09SRSBpZiBzaXplIGlzIG5lZ2F0aXZlIHdoZW4gdHJlYXRlZCBhcyBzaWduZWQgKi8KKwlpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKwkgICAgKGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSkpID09IGJhc2UpIHsKKwkgIHRiYXNlID0gYmFzZTsKKwkgIHRzaXplID0gYXNpemU7CisJfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFN1YnRyYWN0IG91dCBleGlzdGluZyBhdmFpbGFibGUgdG9wIHNwYWNlIGZyb20gTU9SRUNPUkUgcmVxdWVzdC4gKi8KKyAgICAgIGFzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgLSBtLT50b3BzaXplICsgU1lTX0FMTE9DX1BBRERJTkcpOworICAgICAgLyogVXNlIG1lbSBoZXJlIG9ubHkgaWYgaXQgZGlkIGNvbnRpbnVvdXNseSBleHRlbmQgb2xkIHNwYWNlICovCisgICAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKwkgIChiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpKSA9PSBzcy0+YmFzZStzcy0+c2l6ZSkgeworCXRiYXNlID0gYnI7CisJdHNpemUgPSBhc2l6ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGJhc2UgPT0gQ01GQUlMKSB7ICAgIC8qIENvcGUgd2l0aCBwYXJ0aWFsIGZhaWx1cmUgKi8KKyAgICAgIGlmIChiciAhPSBDTUZBSUwpIHsgICAgLyogVHJ5IHRvIHVzZS9leHRlbmQgdGhlIHNwYWNlIHdlIGRpZCBnZXQgKi8KKwlpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKwkgICAgYXNpemUgPCBuYiArIFNZU19BTExPQ19QQURESU5HKSB7CisJICBzaXplX3QgZXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HIC0gYXNpemUpOworCSAgaWYgKGVzaXplIDwgSEFMRl9NQVhfU0laRV9UKSB7CisJICAgIGNoYXIqIGVuZCA9IChjaGFyKilDQUxMX01PUkVDT1JFKGVzaXplKTsKKwkgICAgaWYgKGVuZCAhPSBDTUZBSUwpCisJICAgICAgYXNpemUgKz0gZXNpemU7CisJICAgIGVsc2UgeyAgICAgICAgICAgIC8qIENhbid0IHVzZTsgdHJ5IHRvIHJlbGVhc2UgKi8KKwkgICAgICAodm9pZCkgQ0FMTF9NT1JFQ09SRSgtYXNpemUpOworCSAgICAgIGJyID0gQ01GQUlMOworCSAgICB9CisJICB9CisJfQorICAgICAgfQorICAgICAgaWYgKGJyICE9IENNRkFJTCkgeyAgICAvKiBVc2UgdGhlIHNwYWNlIHdlIGRpZCBnZXQgKi8KKwl0YmFzZSA9IGJyOworCXRzaXplID0gYXNpemU7CisgICAgICB9CisgICAgICBlbHNlCisJZGlzYWJsZV9jb250aWd1b3VzKG0pOyAvKiBEb24ndCB0cnkgY29udGlndW91cyBwYXRoIGluIHRoZSBmdXR1cmUgKi8KKyAgICB9CisKKyAgICBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworICB9CisKKyAgaWYgKEhBVkVfTU1BUCAmJiB0YmFzZSA9PSBDTUZBSUwpIHsgIC8qIFRyeSBNTUFQICovCisgICAgc2l6ZV90IHJzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTWVNfQUxMT0NfUEFERElORyk7CisgICAgaWYgKHJzaXplID4gbmIpIHsgLyogRmFpbCBpZiB3cmFwcyBhcm91bmQgemVybyAqLworICAgICAgY2hhciogbXAgPSAoY2hhciopKENBTExfTU1BUChyc2l6ZSkpOworICAgICAgaWYgKG1wICE9IENNRkFJTCkgeworCXRiYXNlID0gbXA7CisJdHNpemUgPSByc2l6ZTsKKwltbWFwX2ZsYWcgPSBJU19NTUFQUEVEX0JJVDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAoSEFWRV9NT1JFQ09SRSAmJiB0YmFzZSA9PSBDTUZBSUwpIHsgLyogVHJ5IG5vbmNvbnRpZ3VvdXMgTU9SRUNPUkUgKi8KKyAgICBzaXplX3QgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HKTsKKyAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QpIHsKKyAgICAgIGNoYXIqIGJyID0gQ01GQUlMOworICAgICAgY2hhciogZW5kID0gQ01GQUlMOworICAgICAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgICAgIGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSk7CisgICAgICBlbmQgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworICAgICAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgICAgIGlmIChiciAhPSBDTUZBSUwgJiYgZW5kICE9IENNRkFJTCAmJiBiciA8IGVuZCkgeworCXNpemVfdCBzc2l6ZSA9IGVuZCAtIGJyOworCWlmIChzc2l6ZSA+IG5iICsgVE9QX0ZPT1RfU0laRSkgeworCSAgdGJhc2UgPSBicjsKKwkgIHRzaXplID0gc3NpemU7CisJfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKKworICAgIGlmICgobS0+Zm9vdHByaW50ICs9IHRzaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisgICAgICBtLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworCisgICAgaWYgKCFpc19pbml0aWFsaXplZChtKSkgeyAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICovCisgICAgICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgICAgIG0tPnNlZy5zaXplID0gdHNpemU7CisgICAgICBtLT5zZWcuc2ZsYWdzID0gbW1hcF9mbGFnOworICAgICAgbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICAgICAgbS0+cmVsZWFzZV9jaGVja3MgPSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFOworICAgICAgaW5pdF9iaW5zKG0pOworI2lmICFPTkxZX01TUEFDRVMKKyAgICAgIGlmIChpc19nbG9iYWwobSkpCisJaW5pdF90b3AobSwgKG1jaHVua3B0cil0YmFzZSwgdHNpemUgLSBUT1BfRk9PVF9TSVpFKTsKKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgeworCS8qIE9mZnNldCB0b3AgYnkgZW1iZWRkZWQgbWFsbG9jX3N0YXRlICovCisJbWNodW5rcHRyIG1uID0gbmV4dF9jaHVuayhtZW0yY2h1bmsobSkpOworCWluaXRfdG9wKG0sIG1uLCAoc2l6ZV90KSgodGJhc2UgKyB0c2l6ZSkgLSAoY2hhciopbW4pIC1UT1BfRk9PVF9TSVpFKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbHNlIHsKKyAgICAgIC8qIFRyeSB0byBtZXJnZSB3aXRoIGFuIGV4aXN0aW5nIHNlZ21lbnQgKi8KKyAgICAgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgICAgIC8qIE9ubHkgY29uc2lkZXIgbW9zdCByZWNlbnQgc2VnbWVudCBpZiB0cmF2ZXJzYWwgc3VwcHJlc3NlZCAqLworICAgICAgd2hpbGUgKHNwICE9IDAgJiYgdGJhc2UgIT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkKKwlzcCA9IChOT19TRUdNRU5UX1RSQVZFUlNBTCkgPyAwIDogc3AtPm5leHQ7CisgICAgICBpZiAoc3AgIT0gMCAmJgorCSAgIWlzX2V4dGVybl9zZWdtZW50KHNwKSAmJgorCSAgKHNwLT5zZmxhZ3MgJiBJU19NTUFQUEVEX0JJVCkgPT0gbW1hcF9mbGFnICYmCisJICBzZWdtZW50X2hvbGRzKHNwLCBtLT50b3ApKSB7IC8qIGFwcGVuZCAqLworCXNwLT5zaXplICs9IHRzaXplOworCWluaXRfdG9wKG0sIG0tPnRvcCwgbS0+dG9wc2l6ZSArIHRzaXplKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworCWlmICh0YmFzZSA8IG0tPmxlYXN0X2FkZHIpCisJICBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisJc3AgPSAmbS0+c2VnOworCXdoaWxlIChzcCAhPSAwICYmIHNwLT5iYXNlICE9IHRiYXNlICsgdHNpemUpCisJICBzcCA9IChOT19TRUdNRU5UX1RSQVZFUlNBTCkgPyAwIDogc3AtPm5leHQ7CisJaWYgKHNwICE9IDAgJiYKKwkgICAgIWlzX2V4dGVybl9zZWdtZW50KHNwKSAmJgorCSAgICAoc3AtPnNmbGFncyAmIElTX01NQVBQRURfQklUKSA9PSBtbWFwX2ZsYWcpIHsKKwkgIGNoYXIqIG9sZGJhc2UgPSBzcC0+YmFzZTsKKwkgIHNwLT5iYXNlID0gdGJhc2U7CisJICBzcC0+c2l6ZSArPSB0c2l6ZTsKKwkgIHJldHVybiBwcmVwZW5kX2FsbG9jKG0sIHRiYXNlLCBvbGRiYXNlLCBuYik7CisJfQorCWVsc2UKKwkgIGFkZF9zZWdtZW50KG0sIHRiYXNlLCB0c2l6ZSwgbW1hcF9mbGFnKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPCBtLT50b3BzaXplKSB7IC8qIEFsbG9jYXRlIGZyb20gbmV3IG9yIGV4dGVuZGVkIHRvcCBzcGFjZSAqLworICAgICAgc2l6ZV90IHJzaXplID0gbS0+dG9wc2l6ZSAtPSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbS0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBtLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBuYik7CisgICAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG0sIGNodW5rMm1lbShwKSwgbmIpOworICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKKyAgICB9CisgIH0KKworICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgc3lzdGVtIGRlYWxsb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBVbm1hcCBhbmQgdW5saW5rIGFueSBtbWFwcGVkIHNlZ21lbnRzIHRoYXQgZG9uJ3QgY29udGFpbiB1c2VkIGNodW5rcyAqLworc3RhdGljIHNpemVfdCByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhtc3RhdGUgbSkgeworICBzaXplX3QgcmVsZWFzZWQgPSAwOworICBpbnQgbnNlZ3MgPSAwOworICBtc2VnbWVudHB0ciBwcmVkID0gJm0tPnNlZzsKKyAgbXNlZ21lbnRwdHIgc3AgPSBwcmVkLT5uZXh0OworICB3aGlsZSAoc3AgIT0gMCkgeworICAgIGNoYXIqIGJhc2UgPSBzcC0+YmFzZTsKKyAgICBzaXplX3Qgc2l6ZSA9IHNwLT5zaXplOworICAgIG1zZWdtZW50cHRyIG5leHQgPSBzcC0+bmV4dDsKKyAgICArK25zZWdzOworICAgIGlmIChpc19tbWFwcGVkX3NlZ21lbnQoc3ApICYmICFpc19leHRlcm5fc2VnbWVudChzcCkpIHsKKyAgICAgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsoYmFzZSk7CisgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICAvKiBDYW4gdW5tYXAgaWYgZmlyc3QgY2h1bmsgaG9sZHMgZW50aXJlIHNlZ21lbnQgYW5kIG5vdCBwaW5uZWQgKi8KKyAgICAgIGlmICghY2ludXNlKHApICYmIChjaGFyKilwICsgcHNpemUgPj0gYmFzZSArIHNpemUgLSBUT1BfRk9PVF9TSVpFKSB7CisJdGNodW5rcHRyIHRwID0gKHRjaHVua3B0cilwOworCWFzc2VydChzZWdtZW50X2hvbGRzKHNwLCAoY2hhciopc3ApKTsKKwlpZiAocCA9PSBtLT5kdikgeworCSAgbS0+ZHYgPSAwOworCSAgbS0+ZHZzaXplID0gMDsKKwl9CisJZWxzZSB7CisJICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdHApOworCX0KKwlpZiAoQ0FMTF9NVU5NQVAoYmFzZSwgc2l6ZSkgPT0gMCkgeworCSAgcmVsZWFzZWQgKz0gc2l6ZTsKKwkgIG0tPmZvb3RwcmludCAtPSBzaXplOworCSAgLyogdW5saW5rIG9ic29sZXRlZCByZWNvcmQgKi8KKwkgIHNwID0gcHJlZDsKKwkgIHNwLT5uZXh0ID0gbmV4dDsKKwl9CisJZWxzZSB7IC8qIGJhY2sgb3V0IGlmIGNhbm5vdCB1bm1hcCAqLworCSAgaW5zZXJ0X2xhcmdlX2NodW5rKG0sIHRwLCBwc2l6ZSk7CisJfQorICAgICAgfQorICAgIH0KKyAgICBpZiAoTk9fU0VHTUVOVF9UUkFWRVJTQUwpIC8qIHNjYW4gb25seSBmaXJzdCBzZWdtZW50ICovCisgICAgICBicmVhazsKKyAgICBwcmVkID0gc3A7CisgICAgc3AgPSBuZXh0OworICB9CisgIC8qIFJlc2V0IGNoZWNrIGNvdW50ZXIgKi8KKyAgbS0+cmVsZWFzZV9jaGVja3MgPSAoKG5zZWdzID4gTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSk/CisJCSAgICAgICBuc2VncyA6IE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUpOworICByZXR1cm4gcmVsZWFzZWQ7Cit9CisKK3N0YXRpYyBpbnQgc3lzX3RyaW0obXN0YXRlIG0sIHNpemVfdCBwYWQpIHsKKyAgc2l6ZV90IHJlbGVhc2VkID0gMDsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIGlmIChwYWQgPCBNQVhfUkVRVUVTVCAmJiBpc19pbml0aWFsaXplZChtKSkgeworICAgIHBhZCArPSBUT1BfRk9PVF9TSVpFOyAvKiBlbnN1cmUgZW5vdWdoIHJvb20gZm9yIHNlZ21lbnQgb3ZlcmhlYWQgKi8KKworICAgIGlmIChtLT50b3BzaXplID4gcGFkKSB7CisgICAgICAvKiBTaHJpbmsgdG9wIHNwYWNlIGluIGdyYW51bGFyaXR5LXNpemUgdW5pdHMsIGtlZXBpbmcgYXQgbGVhc3Qgb25lICovCisgICAgICBzaXplX3QgdW5pdCA9IG1wYXJhbXMuZ3JhbnVsYXJpdHk7CisgICAgICBzaXplX3QgZXh0cmEgPSAoKG0tPnRvcHNpemUgLSBwYWQgKyAodW5pdCAtIFNJWkVfVF9PTkUpKSAvIHVuaXQgLQorCQkgICAgICBTSVpFX1RfT05FKSAqIHVuaXQ7CisgICAgICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopbS0+dG9wKTsKKworICAgICAgaWYgKCFpc19leHRlcm5fc2VnbWVudChzcCkpIHsKKwlpZiAoaXNfbW1hcHBlZF9zZWdtZW50KHNwKSkgeworCSAgaWYgKEhBVkVfTU1BUCAmJgorCSAgICAgIHNwLT5zaXplID49IGV4dHJhICYmCisJICAgICAgIWhhc19zZWdtZW50X2xpbmsobSwgc3ApKSB7IC8qIGNhbid0IHNocmluayBpZiBwaW5uZWQgKi8KKwkgICAgc2l6ZV90IG5ld3NpemUgPSBzcC0+c2l6ZSAtIGV4dHJhOworCSAgICAvKiBQcmVmZXIgbXJlbWFwLCBmYWxsIGJhY2sgdG8gbXVubWFwICovCisJICAgIGlmICgoQ0FMTF9NUkVNQVAoc3AtPmJhc2UsIHNwLT5zaXplLCBuZXdzaXplLCAwKSAhPSBNRkFJTCkgfHwKKwkJKENBTExfTVVOTUFQKHNwLT5iYXNlICsgbmV3c2l6ZSwgZXh0cmEpID09IDApKSB7CisJICAgICAgcmVsZWFzZWQgPSBleHRyYTsKKwkgICAgfQorCSAgfQorCX0KKwllbHNlIGlmIChIQVZFX01PUkVDT1JFKSB7CisJICBpZiAoZXh0cmEgPj0gSEFMRl9NQVhfU0laRV9UKSAvKiBBdm9pZCB3cmFwcGluZyBuZWdhdGl2ZSAqLworCSAgICBleHRyYSA9IChIQUxGX01BWF9TSVpFX1QpICsgU0laRV9UX09ORSAtIHVuaXQ7CisJICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworCSAgeworCSAgICAvKiBNYWtlIHN1cmUgZW5kIG9mIG1lbW9yeSBpcyB3aGVyZSB3ZSBsYXN0IHNldCBpdC4gKi8KKwkgICAgY2hhciogb2xkX2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKwkgICAgaWYgKG9sZF9iciA9PSBzcC0+YmFzZSArIHNwLT5zaXplKSB7CisJICAgICAgY2hhciogcmVsX2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKC1leHRyYSkpOworCSAgICAgIGNoYXIqIG5ld19iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisJICAgICAgaWYgKHJlbF9iciAhPSBDTUZBSUwgJiYgbmV3X2JyIDwgb2xkX2JyKQorCQlyZWxlYXNlZCA9IG9sZF9iciAtIG5ld19icjsKKwkgICAgfQorCSAgfQorCSAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKwl9CisgICAgICB9CisKKyAgICAgIGlmIChyZWxlYXNlZCAhPSAwKSB7CisJc3AtPnNpemUgLT0gcmVsZWFzZWQ7CisJbS0+Zm9vdHByaW50IC09IHJlbGVhc2VkOworCWluaXRfdG9wKG0sIG0tPnRvcCwgbS0+dG9wc2l6ZSAtIHJlbGVhc2VkKTsKKwljaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBVbm1hcCBhbnkgdW51c2VkIG1tYXBwZWQgc2VnbWVudHMgKi8KKyAgICBpZiAoSEFWRV9NTUFQKQorICAgICAgcmVsZWFzZWQgKz0gcmVsZWFzZV91bnVzZWRfc2VnbWVudHMobSk7CisKKyAgICAvKiBPbiBmYWlsdXJlLCBkaXNhYmxlIGF1dG90cmltIHRvIGF2b2lkIHJlcGVhdGVkIGZhaWxlZCBmdXR1cmUgY2FsbHMgKi8KKyAgICBpZiAocmVsZWFzZWQgPT0gMCAmJiBtLT50b3BzaXplID4gbS0+dHJpbV9jaGVjaykKKyAgICAgIG0tPnRyaW1fY2hlY2sgPSBNQVhfU0laRV9UOworICB9CisKKyAgcmV0dXJuIChyZWxlYXNlZCAhPSAwKT8gMSA6IDA7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYWxsb2NhdGUgYSBsYXJnZSByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8KK3N0YXRpYyB2b2lkKiB0bWFsbG9jX2xhcmdlKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgdGNodW5rcHRyIHYgPSAwOworICBzaXplX3QgcnNpemUgPSAtbmI7IC8qIFVuc2lnbmVkIG5lZ2F0aW9uICovCisgIHRjaHVua3B0ciB0OworICBiaW5kZXhfdCBpZHg7CisgIGNvbXB1dGVfdHJlZV9pbmRleChuYiwgaWR4KTsKKyAgaWYgKCh0ID0gKnRyZWViaW5fYXQobSwgaWR4KSkgIT0gMCkgeworICAgIC8qIFRyYXZlcnNlIHRyZWUgZm9yIHRoaXMgYmluIGxvb2tpbmcgZm9yIG5vZGUgd2l0aCBzaXplID09IG5iICovCisgICAgc2l6ZV90IHNpemViaXRzID0gbmIgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KGlkeCk7CisgICAgdGNodW5rcHRyIHJzdCA9IDA7ICAvKiBUaGUgZGVlcGVzdCB1bnRha2VuIHJpZ2h0IHN1YnRyZWUgKi8KKyAgICBmb3IgKDs7KSB7CisgICAgICB0Y2h1bmtwdHIgcnQ7CisgICAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworCXYgPSB0OworCWlmICgocnNpemUgPSB0cmVtKSA9PSAwKQorCSAgYnJlYWs7CisgICAgICB9CisgICAgICBydCA9IHQtPmNoaWxkWzFdOworICAgICAgdCA9IHQtPmNoaWxkWyhzaXplYml0cyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV07CisgICAgICBpZiAocnQgIT0gMCAmJiBydCAhPSB0KQorCXJzdCA9IHJ0OworICAgICAgaWYgKHQgPT0gMCkgeworCXQgPSByc3Q7IC8qIHNldCB0IHRvIGxlYXN0IHN1YnRyZWUgaG9sZGluZyBzaXplcyA+IG5iICovCisJYnJlYWs7CisgICAgICB9CisgICAgICBzaXplYml0cyA8PD0gMTsKKyAgICB9CisgIH0KKyAgaWYgKHQgPT0gMCAmJiB2ID09IDApIHsgLyogc2V0IHQgdG8gcm9vdCBvZiBuZXh0IG5vbi1lbXB0eSB0cmVlYmluICovCisgICAgYmlubWFwX3QgbGVmdGJpdHMgPSBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKSAmIG0tPnRyZWVtYXA7CisgICAgaWYgKGxlZnRiaXRzICE9IDApIHsKKyAgICAgIGJpbmRleF90IGk7CisgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgdCA9ICp0cmVlYmluX2F0KG0sIGkpOworICAgIH0KKyAgfQorCisgIHdoaWxlICh0ICE9IDApIHsgLyogZmluZCBzbWFsbGVzdCBvZiB0cmVlIG9yIHN1YnRyZWUgKi8KKyAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgIHJzaXplID0gdHJlbTsKKyAgICAgIHYgPSB0OworICAgIH0KKyAgICB0ID0gbGVmdG1vc3RfY2hpbGQodCk7CisgIH0KKworICAvKiAgSWYgZHYgaXMgYSBiZXR0ZXIgZml0LCByZXR1cm4gMCBzbyBtYWxsb2Mgd2lsbCB1c2UgaXQgKi8KKyAgaWYgKHYgIT0gMCAmJiByc2l6ZSA8IChzaXplX3QpKG0tPmR2c2l6ZSAtIG5iKSkgeworICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7IC8qIHNwbGl0ICovCisgICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICAgIGFzc2VydChjaHVua3NpemUodikgPT0gcnNpemUgKyBuYik7CisgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgeworCXVubGlua19sYXJnZV9jaHVuayhtLCB2KTsKKwlpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKwkgIHNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7CisJZWxzZSB7CisJICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHYsIG5iKTsKKwkgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJICBpbnNlcnRfY2h1bmsobSwgciwgcnNpemUpOworCX0KKwlyZXR1cm4gY2h1bmsybWVtKHYpOworICAgICAgfQorICAgIH0KKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogYWxsb2NhdGUgYSBzbWFsbCByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8KK3N0YXRpYyB2b2lkKiB0bWFsbG9jX3NtYWxsKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgdGNodW5rcHRyIHQsIHY7CisgIHNpemVfdCByc2l6ZTsKKyAgYmluZGV4X3QgaTsKKyAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobS0+dHJlZW1hcCk7CisgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisgIHYgPSB0ID0gKnRyZWViaW5fYXQobSwgaSk7CisgIHJzaXplID0gY2h1bmtzaXplKHQpIC0gbmI7CisKKyAgd2hpbGUgKCh0ID0gbGVmdG1vc3RfY2hpbGQodCkpICE9IDApIHsKKyAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgIHJzaXplID0gdHJlbTsKKyAgICAgIHYgPSB0OworICAgIH0KKyAgfQorCisgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7CisgICAgbWNodW5rcHRyIHIgPSBjaHVua19wbHVzX29mZnNldCh2LCBuYik7CisgICAgYXNzZXJ0KGNodW5rc2l6ZSh2KSA9PSByc2l6ZSArIG5iKTsKKyAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgeworICAgICAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHYpOworICAgICAgaWYgKHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisJc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsKKyAgICAgIGVsc2UgeworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJcmVwbGFjZV9kdihtLCByLCByc2l6ZSk7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOworICAgIH0KKyAgfQorCisgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqIGludGVybmFsX3JlYWxsb2MobXN0YXRlIG0sIHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkgeworICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIG1jaHVua3B0ciBvbGRwID0gbWVtMmNodW5rKG9sZG1lbSk7CisgICAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChvbGRwLCBvbGRzaXplKTsKKyAgICBtY2h1bmtwdHIgbmV3cCA9IDA7CisgICAgdm9pZCogZXh0cmEgPSAwOworCisgICAgLyogVHJ5IHRvIGVpdGhlciBzaHJpbmsgb3IgZXh0ZW5kIGludG8gdG9wLiBFbHNlIG1hbGxvYy1jb3B5LWZyZWUgKi8KKworICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgb2xkcCkgJiYgb2tfY2ludXNlKG9sZHApICYmCisJCW9rX25leHQob2xkcCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkgeworICAgICAgc2l6ZV90IG5iID0gcmVxdWVzdDJzaXplKGJ5dGVzKTsKKyAgICAgIGlmIChpc19tbWFwcGVkKG9sZHApKQorCW5ld3AgPSBtbWFwX3Jlc2l6ZShtLCBvbGRwLCBuYik7CisgICAgICBlbHNlIGlmIChvbGRzaXplID49IG5iKSB7IC8qIGFscmVhZHkgYmlnIGVub3VnaCAqLworCXNpemVfdCByc2l6ZSA9IG9sZHNpemUgLSBuYjsKKwluZXdwID0gb2xkcDsKKwlpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsKKwkgIG1jaHVua3B0ciByZW1haW5kZXIgPSBjaHVua19wbHVzX29mZnNldChuZXdwLCBuYik7CisJICBzZXRfaW51c2UobSwgbmV3cCwgbmIpOworCSAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcnNpemUpOworCSAgZXh0cmEgPSBjaHVuazJtZW0ocmVtYWluZGVyKTsKKwl9CisgICAgICB9CisgICAgICBlbHNlIGlmIChuZXh0ID09IG0tPnRvcCAmJiBvbGRzaXplICsgbS0+dG9wc2l6ZSA+IG5iKSB7CisJLyogRXhwYW5kIGludG8gdG9wICovCisJc2l6ZV90IG5ld3NpemUgPSBvbGRzaXplICsgbS0+dG9wc2l6ZTsKKwlzaXplX3QgbmV3dG9wc2l6ZSA9IG5ld3NpemUgLSBuYjsKKwltY2h1bmtwdHIgbmV3dG9wID0gY2h1bmtfcGx1c19vZmZzZXQob2xkcCwgbmIpOworCXNldF9pbnVzZShtLCBvbGRwLCBuYik7CisJbmV3dG9wLT5oZWFkID0gbmV3dG9wc2l6ZSB8UElOVVNFX0JJVDsKKwltLT50b3AgPSBuZXd0b3A7CisJbS0+dG9wc2l6ZSA9IG5ld3RvcHNpemU7CisJbmV3cCA9IG9sZHA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7CisgICAgICBQT1NUQUNUSU9OKG0pOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUE9TVEFDVElPTihtKTsKKworICAgIGlmIChuZXdwICE9IDApIHsKKyAgICAgIGlmIChleHRyYSAhPSAwKSB7CisJaW50ZXJuYWxfZnJlZShtLCBleHRyYSk7CisgICAgICB9CisgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBuZXdwKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0obmV3cCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdm9pZCogbmV3bWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgICAgIGlmIChuZXdtZW0gIT0gMCkgeworCXNpemVfdCBvYyA9IG9sZHNpemUgLSBvdmVyaGVhZF9mb3Iob2xkcCk7CisJbWVtY3B5KG5ld21lbSwgb2xkbWVtLCAob2MgPCBieXRlcyk/IG9jIDogYnl0ZXMpOworCWludGVybmFsX2ZyZWUobSwgb2xkbWVtKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBuZXdtZW07CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVtYWxpZ24gc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCogaW50ZXJuYWxfbWVtYWxpZ24obXN0YXRlIG0sIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpICAgIC8qIENhbiBqdXN0IHVzZSBtYWxsb2MgKi8KKyAgICByZXR1cm4gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgaWYgKGFsaWdubWVudCA8ICBNSU5fQ0hVTktfU0laRSkgLyogbXVzdCBiZSBhdCBsZWFzdCBhIG1pbmltdW0gY2h1bmsgc2l6ZSAqLworICAgIGFsaWdubWVudCA9IE1JTl9DSFVOS19TSVpFOworICBpZiAoKGFsaWdubWVudCAmIChhbGlnbm1lbnQtU0laRV9UX09ORSkpICE9IDApIHsvKiBFbnN1cmUgYSBwb3dlciBvZiAyICovCisgICAgc2l6ZV90IGEgPSBNQUxMT0NfQUxJR05NRU5UIDw8IDE7CisgICAgd2hpbGUgKGEgPCBhbGlnbm1lbnQpIGEgPDw9IDE7CisgICAgYWxpZ25tZW50ID0gYTsKKyAgfQorCisgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCAtIGFsaWdubWVudCkgeworICAgIGlmIChtICE9IDApICB7IC8qIFRlc3QgaXNuJ3QgbmVlZGVkIGJ1dCBhdm9pZHMgY29tcGlsZXIgd2FybmluZyAqLworICAgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOworICAgIHNpemVfdCByZXEgPSBuYiArIGFsaWdubWVudCArIE1JTl9DSFVOS19TSVpFIC0gQ0hVTktfT1ZFUkhFQUQ7CisgICAgY2hhciogbWVtID0gKGNoYXIqKWludGVybmFsX21hbGxvYyhtLCByZXEpOworICAgIGlmIChtZW0gIT0gMCkgeworICAgICAgdm9pZCogbGVhZGVyID0gMDsKKyAgICAgIHZvaWQqIHRyYWlsZXIgPSAwOworICAgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKworICAgICAgaWYgKFBSRUFDVElPTihtKSkgcmV0dXJuIDA7CisgICAgICBpZiAoKCgoc2l6ZV90KShtZW0pKSAlIGFsaWdubWVudCkgIT0gMCkgeyAvKiBtaXNhbGlnbmVkICovCisJLyoKKwkgIEZpbmQgYW4gYWxpZ25lZCBzcG90IGluc2lkZSBjaHVuay4gIFNpbmNlIHdlIG5lZWQgdG8gZ2l2ZQorCSAgYmFjayBsZWFkaW5nIHNwYWNlIGluIGEgY2h1bmsgb2YgYXQgbGVhc3QgTUlOX0NIVU5LX1NJWkUsIGlmCisJICB0aGUgZmlyc3QgY2FsY3VsYXRpb24gcGxhY2VzIHVzIGF0IGEgc3BvdCB3aXRoIGxlc3MgdGhhbgorCSAgTUlOX0NIVU5LX1NJWkUgbGVhZGVyLCB3ZSBjYW4gbW92ZSB0byB0aGUgbmV4dCBhbGlnbmVkIHNwb3QuCisJICBXZSd2ZSBhbGxvY2F0ZWQgZW5vdWdoIHRvdGFsIHJvb20gc28gdGhhdCB0aGlzIGlzIGFsd2F5cworCSAgcG9zc2libGUuCisJKi8KKwljaGFyKiBiciA9IChjaGFyKiltZW0yY2h1bmsoKHNpemVfdCkoKChzaXplX3QpKG1lbSArCisJCQkJCQkgICAgICAgYWxpZ25tZW50IC0KKwkJCQkJCSAgICAgICBTSVpFX1RfT05FKSkgJgorCQkJCQkgICAgIC1hbGlnbm1lbnQpKTsKKwljaGFyKiBwb3MgPSAoKHNpemVfdCkoYnIgLSAoY2hhciopKHApKSA+PSBNSU5fQ0hVTktfU0laRSk/CisJICBiciA6IGJyK2FsaWdubWVudDsKKwltY2h1bmtwdHIgbmV3cCA9IChtY2h1bmtwdHIpcG9zOworCXNpemVfdCBsZWFkc2l6ZSA9IHBvcyAtIChjaGFyKikocCk7CisJc2l6ZV90IG5ld3NpemUgPSBjaHVua3NpemUocCkgLSBsZWFkc2l6ZTsKKworCWlmIChpc19tbWFwcGVkKHApKSB7IC8qIEZvciBtbWFwcGVkIGNodW5rcywganVzdCBhZGp1c3Qgb2Zmc2V0ICovCisJICBuZXdwLT5wcmV2X2Zvb3QgPSBwLT5wcmV2X2Zvb3QgKyBsZWFkc2l6ZTsKKwkgIG5ld3AtPmhlYWQgPSAobmV3c2l6ZXxDSU5VU0VfQklUKTsKKwl9CisJZWxzZSB7IC8qIE90aGVyd2lzZSwgZ2l2ZSBiYWNrIGxlYWRlciwgdXNlIHRoZSByZXN0ICovCisJICBzZXRfaW51c2UobSwgbmV3cCwgbmV3c2l6ZSk7CisJICBzZXRfaW51c2UobSwgcCwgbGVhZHNpemUpOworCSAgbGVhZGVyID0gY2h1bmsybWVtKHApOworCX0KKwlwID0gbmV3cDsKKyAgICAgIH0KKworICAgICAgLyogR2l2ZSBiYWNrIHNwYXJlIHJvb20gYXQgdGhlIGVuZCAqLworICAgICAgaWYgKCFpc19tbWFwcGVkKHApKSB7CisJc2l6ZV90IHNpemUgPSBjaHVua3NpemUocCk7CisJaWYgKHNpemUgPiBuYiArIE1JTl9DSFVOS19TSVpFKSB7CisJICBzaXplX3QgcmVtYWluZGVyX3NpemUgPSBzaXplIC0gbmI7CisJICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCSAgc2V0X2ludXNlKG0sIHAsIG5iKTsKKwkgIHNldF9pbnVzZShtLCByZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplKTsKKwkgIHRyYWlsZXIgPSBjaHVuazJtZW0ocmVtYWluZGVyKTsKKwl9CisgICAgICB9CisKKyAgICAgIGFzc2VydCAoY2h1bmtzaXplKHApID49IG5iKTsKKyAgICAgIGFzc2VydCgoKChzaXplX3QpKGNodW5rMm1lbShwKSkpICUgYWxpZ25tZW50KSA9PSAwKTsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIHApOworICAgICAgUE9TVEFDVElPTihtKTsKKyAgICAgIGlmIChsZWFkZXIgIT0gMCkgeworCWludGVybmFsX2ZyZWUobSwgbGVhZGVyKTsKKyAgICAgIH0KKyAgICAgIGlmICh0cmFpbGVyICE9IDApIHsKKwlpbnRlcm5hbF9mcmVlKG0sIHRyYWlsZXIpOworICAgICAgfQorICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21hbGxvYy9jb2FsbG9jIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkKiogaWFsbG9jKG1zdGF0ZSBtLAorCQkgICAgIHNpemVfdCBuX2VsZW1lbnRzLAorCQkgICAgIHNpemVfdCogc2l6ZXMsCisJCSAgICAgaW50IG9wdHMsCisJCSAgICAgdm9pZCogY2h1bmtzW10pIHsKKyAgLyoKKyAgICBUaGlzIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBpbmRlcGVuZGVudF9YIHJvdXRpbmVzLCBoYW5kbGluZworICAgIGFsbCBvZiB0aGUgY29tYmluYXRpb25zIHRoYXQgY2FuIHJlc3VsdC4KKworICAgIFRoZSBvcHRzIGFyZyBoYXM6CisgICAgYml0IDAgc2V0IGlmIGFsbCBlbGVtZW50cyBhcmUgc2FtZSBzaXplICh1c2luZyBzaXplc1swXSkKKyAgICBiaXQgMSBzZXQgaWYgZWxlbWVudHMgc2hvdWxkIGJlIHplcm9lZAorICAqLworCisgIHNpemVfdCAgICBlbGVtZW50X3NpemU7ICAgLyogY2h1bmtzaXplIG9mIGVhY2ggZWxlbWVudCwgaWYgYWxsIHNhbWUgKi8KKyAgc2l6ZV90ICAgIGNvbnRlbnRzX3NpemU7ICAvKiB0b3RhbCBzaXplIG9mIGVsZW1lbnRzICovCisgIHNpemVfdCAgICBhcnJheV9zaXplOyAgICAgLyogcmVxdWVzdCBzaXplIG9mIHBvaW50ZXIgYXJyYXkgKi8KKyAgdm9pZCogICAgIG1lbTsgICAgICAgICAgICAvKiBtYWxsb2NlZCBhZ2dyZWdhdGUgc3BhY2UgKi8KKyAgbWNodW5rcHRyIHA7ICAgICAgICAgICAgICAvKiBjb3JyZXNwb25kaW5nIGNodW5rICovCisgIHNpemVfdCAgICByZW1haW5kZXJfc2l6ZTsgLyogcmVtYWluaW5nIGJ5dGVzIHdoaWxlIHNwbGl0dGluZyAqLworICB2b2lkKiogICAgbWFycmF5OyAgICAgICAgIC8qIGVpdGhlciAiY2h1bmtzIiBvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8KKyAgbWNodW5rcHRyIGFycmF5X2NodW5rOyAgICAvKiBjaHVuayBmb3IgbWFsbG9jZWQgcHRyIGFycmF5ICovCisgIGZsYWdfdCAgICB3YXNfZW5hYmxlZDsgICAgLyogdG8gZGlzYWJsZSBtbWFwICovCisgIHNpemVfdCAgICBzaXplOworICBzaXplX3QgICAgaTsKKworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgLyogY29tcHV0ZSBhcnJheSBsZW5ndGgsIGlmIG5lZWRlZCAqLworICBpZiAoY2h1bmtzICE9IDApIHsKKyAgICBpZiAobl9lbGVtZW50cyA9PSAwKQorICAgICAgcmV0dXJuIGNodW5rczsgLyogbm90aGluZyB0byBkbyAqLworICAgIG1hcnJheSA9IGNodW5rczsKKyAgICBhcnJheV9zaXplID0gMDsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBpZiBlbXB0eSByZXEsIG11c3Qgc3RpbGwgcmV0dXJuIGNodW5rIHJlcHJlc2VudGluZyBlbXB0eSBhcnJheSAqLworICAgIGlmIChuX2VsZW1lbnRzID09IDApCisgICAgICByZXR1cm4gKHZvaWQqKilpbnRlcm5hbF9tYWxsb2MobSwgMCk7CisgICAgbWFycmF5ID0gMDsKKyAgICBhcnJheV9zaXplID0gcmVxdWVzdDJzaXplKG5fZWxlbWVudHMgKiAoc2l6ZW9mKHZvaWQqKSkpOworICB9CisKKyAgLyogY29tcHV0ZSB0b3RhbCBlbGVtZW50IHNpemUgKi8KKyAgaWYgKG9wdHMgJiAweDEpIHsgLyogYWxsLXNhbWUtc2l6ZSAqLworICAgIGVsZW1lbnRfc2l6ZSA9IHJlcXVlc3Qyc2l6ZSgqc2l6ZXMpOworICAgIGNvbnRlbnRzX3NpemUgPSBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplOworICB9CisgIGVsc2UgeyAvKiBhZGQgdXAgYWxsIHRoZSBzaXplcyAqLworICAgIGVsZW1lbnRfc2l6ZSA9IDA7CisgICAgY29udGVudHNfc2l6ZSA9IDA7CisgICAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpCisgICAgICBjb250ZW50c19zaXplICs9IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSk7CisgIH0KKworICBzaXplID0gY29udGVudHNfc2l6ZSArIGFycmF5X3NpemU7CisKKyAgLyoKKyAgICAgQWxsb2NhdGUgdGhlIGFnZ3JlZ2F0ZSBjaHVuay4gIEZpcnN0IGRpc2FibGUgZGlyZWN0LW1tYXBwaW5nIHNvCisgICAgIG1hbGxvYyB3b24ndCB1c2UgaXQsIHNpbmNlIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGxhdGVyCisgICAgIGZyZWUvcmVhbGxvYyBzcGFjZSBpbnRlcm5hbCB0byBhIHNlZ3JlZ2F0ZWQgbW1hcCByZWdpb24uCisgICovCisgIHdhc19lbmFibGVkID0gdXNlX21tYXAobSk7CisgIGRpc2FibGVfbW1hcChtKTsKKyAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIHNpemUgLSBDSFVOS19PVkVSSEVBRCk7CisgIGlmICh3YXNfZW5hYmxlZCkKKyAgICBlbmFibGVfbW1hcChtKTsKKyAgaWYgKG1lbSA9PSAwKQorICAgIHJldHVybiAwOworCisgIGlmIChQUkVBQ1RJT04obSkpIHJldHVybiAwOworICBwID0gbWVtMmNodW5rKG1lbSk7CisgIHJlbWFpbmRlcl9zaXplID0gY2h1bmtzaXplKHApOworCisgIGFzc2VydCghaXNfbW1hcHBlZChwKSk7CisKKyAgaWYgKG9wdHMgJiAweDIpIHsgICAgICAgLyogb3B0aW9uYWxseSBjbGVhciB0aGUgZWxlbWVudHMgKi8KKyAgICBtZW1zZXQoKHNpemVfdCopbWVtLCAwLCByZW1haW5kZXJfc2l6ZSAtIFNJWkVfVF9TSVpFIC0gYXJyYXlfc2l6ZSk7CisgIH0KKworICAvKiBJZiBub3QgcHJvdmlkZWQsIGFsbG9jYXRlIHRoZSBwb2ludGVyIGFycmF5IGFzIGZpbmFsIHBhcnQgb2YgY2h1bmsgKi8KKyAgaWYgKG1hcnJheSA9PSAwKSB7CisgICAgc2l6ZV90ICBhcnJheV9jaHVua19zaXplOworICAgIGFycmF5X2NodW5rID0gY2h1bmtfcGx1c19vZmZzZXQocCwgY29udGVudHNfc2l6ZSk7CisgICAgYXJyYXlfY2h1bmtfc2l6ZSA9IHJlbWFpbmRlcl9zaXplIC0gY29udGVudHNfc2l6ZTsKKyAgICBtYXJyYXkgPSAodm9pZCoqKSAoY2h1bmsybWVtKGFycmF5X2NodW5rKSk7CisgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBhcnJheV9jaHVuaywgYXJyYXlfY2h1bmtfc2l6ZSk7CisgICAgcmVtYWluZGVyX3NpemUgPSBjb250ZW50c19zaXplOworICB9CisKKyAgLyogc3BsaXQgb3V0IGVsZW1lbnRzICovCisgIGZvciAoaSA9IDA7IDsgKytpKSB7CisgICAgbWFycmF5W2ldID0gY2h1bmsybWVtKHApOworICAgIGlmIChpICE9IG5fZWxlbWVudHMtMSkgeworICAgICAgaWYgKGVsZW1lbnRfc2l6ZSAhPSAwKQorCXNpemUgPSBlbGVtZW50X3NpemU7CisgICAgICBlbHNlCisJc2l6ZSA9IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSk7CisgICAgICByZW1haW5kZXJfc2l6ZSAtPSBzaXplOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBzaXplKTsKKyAgICAgIHAgPSBjaHVua19wbHVzX29mZnNldChwLCBzaXplKTsKKyAgICB9CisgICAgZWxzZSB7IC8qIHRoZSBmaW5hbCBlbGVtZW50IGFic29yYnMgYW55IG92ZXJhbGxvY2F0aW9uIHNsb3AgKi8KKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgcmVtYWluZGVyX3NpemUpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyNpZiBERUJVRworICBpZiAobWFycmF5ICE9IGNodW5rcykgeworICAgIC8qIGZpbmFsIGVsZW1lbnQgbXVzdCBoYXZlIGV4YWN0bHkgZXhoYXVzdGVkIGNodW5rICovCisgICAgaWYgKGVsZW1lbnRfc2l6ZSAhPSAwKSB7CisgICAgICBhc3NlcnQocmVtYWluZGVyX3NpemUgPT0gZWxlbWVudF9zaXplKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBhc3NlcnQocmVtYWluZGVyX3NpemUgPT0gcmVxdWVzdDJzaXplKHNpemVzW2ldKSk7CisgICAgfQorICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG1lbTJjaHVuayhtYXJyYXkpKTsKKyAgfQorICBmb3IgKGkgPSAwOyBpICE9IG5fZWxlbWVudHM7ICsraSkKKyAgICBjaGVja19pbnVzZV9jaHVuayhtLCBtZW0yY2h1bmsobWFycmF5W2ldKSk7CisKKyNlbmRpZiAvKiBERUJVRyAqLworCisgIFBPU1RBQ1RJT04obSk7CisgIHJldHVybiBtYXJyYXk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHVibGljIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFPTkxZX01TUEFDRVMKKwordm9pZCogZGxtYWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIC8qCisgICAgIEJhc2ljIGFsZ29yaXRobToKKyAgICAgSWYgYSBzbWFsbCByZXF1ZXN0ICg8IDI1NiBieXRlcyBtaW51cyBwZXItY2h1bmsgb3ZlcmhlYWQpOgorICAgICAgIDEuIElmIG9uZSBleGlzdHMsIHVzZSBhIHJlbWFpbmRlcmxlc3MgY2h1bmsgaW4gYXNzb2NpYXRlZCBzbWFsbGJpbi4KKwkgIChSZW1haW5kZXJsZXNzIG1lYW5zIHRoYXQgdGhlcmUgYXJlIHRvbyBmZXcgZXhjZXNzIGJ5dGVzIHRvCisJICByZXByZXNlbnQgYXMgYSBjaHVuay4pCisgICAgICAgMi4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSBkdiBjaHVuaywgd2hpY2ggaXMgbm9ybWFsbHkgdGhlCisJICBjaHVuayBhZGphY2VudCB0byB0aGUgb25lIHVzZWQgZm9yIHRoZSBtb3N0IHJlY2VudCBzbWFsbCByZXF1ZXN0LgorICAgICAgIDMuIElmIG9uZSBleGlzdHMsIHNwbGl0IHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgY2h1bmsgaW4gYSBiaW4sCisJICBzYXZpbmcgcmVtYWluZGVyIGluIGR2LgorICAgICAgIDQuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLgorICAgICAgIDUuIElmIGF2YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0CisgICAgIE90aGVyd2lzZSwgZm9yIGEgbGFyZ2UgcmVxdWVzdDoKKyAgICAgICAxLiBGaW5kIHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgYmlubmVkIGNodW5rIHRoYXQgZml0cywgYW5kIHVzZSBpdAorCSAgaWYgaXQgaXMgYmV0dGVyIGZpdHRpbmcgdGhhbiBkdiBjaHVuaywgc3BsaXR0aW5nIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAyLiBJZiBiZXR0ZXIgZml0dGluZyB0aGFuIGFueSBiaW5uZWQgY2h1bmssIHVzZSB0aGUgZHYgY2h1bmsuCisgICAgICAgMy4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSB0b3AgY2h1bmsuCisgICAgICAgNC4gSWYgcmVxdWVzdCBzaXplID49IG1tYXAgdGhyZXNob2xkLCB0cnkgdG8gZGlyZWN0bHkgbW1hcCB0aGlzIGNodW5rLgorICAgICAgIDUuIElmIGF2YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0CisKKyAgICAgVGhlIHVnbHkgZ290bydzIGhlcmUgZW5zdXJlIHRoYXQgcG9zdGFjdGlvbiBvY2N1cnMgYWxvbmcgYWxsIHBhdGhzLgorICAqLworCisjaWYgVVNFX0xPQ0tTCisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOyAvKiBpbml0aWFsaXplIGluIHN5c19hbGxvYyBpZiBub3QgdXNpbmcgbG9ja3MgKi8KKyNlbmRpZgorCisgIGlmICghUFJFQUNUSU9OKGdtKSkgeworICAgIHZvaWQqIG1lbTsKKyAgICBzaXplX3QgbmI7CisgICAgaWYgKGJ5dGVzIDw9IE1BWF9TTUFMTF9SRVFVRVNUKSB7CisgICAgICBiaW5kZXhfdCBpZHg7CisgICAgICBiaW5tYXBfdCBzbWFsbGJpdHM7CisgICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZHggPSBzbWFsbF9pbmRleChuYik7CisgICAgICBzbWFsbGJpdHMgPSBnbS0+c21hbGxtYXAgPj4gaWR4OworCisgICAgICBpZiAoKHNtYWxsYml0cyAmIDB4M1UpICE9IDApIHsgLyogUmVtYWluZGVybGVzcyBmaXQgdG8gYSBzbWFsbGJpbi4gKi8KKwltY2h1bmtwdHIgYiwgcDsKKwlpZHggKz0gfnNtYWxsYml0cyAmIDE7ICAgICAgIC8qIFVzZXMgbmV4dCBiaW4gaWYgaWR4IGVtcHR5ICovCisJYiA9IHNtYWxsYmluX2F0KGdtLCBpZHgpOworCXAgPSBiLT5mZDsKKwlhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisJdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpZHgpOworCXNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBzbWFsbF9pbmRleDJzaXplKGlkeCkpOworCW1lbSA9IGNodW5rMm1lbShwKTsKKwljaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisJZ290byBwb3N0YWN0aW9uOworICAgICAgfQorCisgICAgICBlbHNlIGlmIChuYiA+IGdtLT5kdnNpemUpIHsKKwlpZiAoc21hbGxiaXRzICE9IDApIHsgLyogVXNlIGNodW5rIGluIG5leHQgbm9uZW1wdHkgc21hbGxiaW4gKi8KKwkgIG1jaHVua3B0ciBiLCBwLCByOworCSAgc2l6ZV90IHJzaXplOworCSAgYmluZGV4X3QgaTsKKwkgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxsYml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7CisJICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisJICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworCSAgYiA9IHNtYWxsYmluX2F0KGdtLCBpKTsKKwkgIHAgPSBiLT5mZDsKKwkgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7CisJICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoZ20sIGIsIHAsIGkpOworCSAgcnNpemUgPSBzbWFsbF9pbmRleDJzaXplKGkpIC0gbmI7CisJICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLworCSAgaWYgKFNJWkVfVF9TSVpFICE9IDQgJiYgcnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKwkgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaSkpOworCSAgZWxzZSB7CisJICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKwkgICAgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwkgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwkgICAgcmVwbGFjZV9kdihnbSwgciwgcnNpemUpOworCSAgfQorCSAgbWVtID0gY2h1bmsybWVtKHApOworCSAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworCSAgZ290byBwb3N0YWN0aW9uOworCX0KKworCWVsc2UgaWYgKGdtLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2Nfc21hbGwoZ20sIG5iKSkgIT0gMCkgeworCSAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworCSAgZ290byBwb3N0YWN0aW9uOworCX0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpCisgICAgICBuYiA9IE1BWF9TSVpFX1Q7IC8qIFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8KKyAgICBlbHNlIHsKKyAgICAgIG5iID0gcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWYgKGdtLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2NfbGFyZ2UoZ20sIG5iKSkgIT0gMCkgeworCWNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKwlnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDw9IGdtLT5kdnNpemUpIHsKKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT5kdnNpemUgLSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gZ20tPmR2OworICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7IC8qIHNwbGl0IGR2ICovCisJbWNodW5rcHRyIHIgPSBnbS0+ZHYgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisJZ20tPmR2c2l6ZSA9IHJzaXplOworCXNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworICAgICAgfQorICAgICAgZWxzZSB7IC8qIGV4aGF1c3QgZHYgKi8KKwlzaXplX3QgZHZzID0gZ20tPmR2c2l6ZTsKKwlnbS0+ZHZzaXplID0gMDsKKwlnbS0+ZHYgPSAwOworCXNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBkdnMpOworICAgICAgfQorICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIGVsc2UgaWYgKG5iIDwgZ20tPnRvcHNpemUpIHsgLyogU3BsaXQgdG9wICovCisgICAgICBzaXplX3QgcnNpemUgPSBnbS0+dG9wc2l6ZSAtPSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gZ20tPnRvcDsKKyAgICAgIG1jaHVua3B0ciByID0gZ20tPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja190b3BfY2h1bmsoZ20sIGdtLT50b3ApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgZ290byBwb3N0YWN0aW9uOworICAgIH0KKworICAgIG1lbSA9IHN5c19hbGxvYyhnbSwgbmIpOworCisgIHBvc3RhY3Rpb246CisgICAgUE9TVEFDVElPTihnbSk7CisgICAgcmV0dXJuIG1lbTsKKyAgfQorCisgIHJldHVybiAwOworfQorCit2b2lkIGRsZnJlZSh2b2lkKiBtZW0pIHsKKyAgLyoKKyAgICAgQ29uc29saWRhdGUgZnJlZWQgY2h1bmtzIHdpdGggcHJlY2VkaW5nIG9yIHN1Y2NlZWRpbmcgYm9yZGVyaW5nCisgICAgIGZyZWUgY2h1bmtzLCBpZiB0aGV5IGV4aXN0LCBhbmQgdGhlbiBwbGFjZSBpbiBhIGJpbi4gIEludGVybWl4ZWQKKyAgICAgd2l0aCBzcGVjaWFsIGNhc2VzIGZvciB0b3AsIGR2LCBtbWFwcGVkIGNodW5rcywgYW5kIHVzYWdlIGVycm9ycy4KKyAgKi8KKworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsKKyNpZiBGT09URVJTCisgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7CisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBmbSBnbQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIVBSRUFDVElPTihmbSkpIHsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHApICYmIG9rX2NpbnVzZShwKSkpIHsKKwlzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisJbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSk7CisJaWYgKCFwaW51c2UocCkpIHsKKwkgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsKKwkgIGlmICgocHJldnNpemUgJiBJU19NTUFQUEVEX0JJVCkgIT0gMCkgeworCSAgICBwcmV2c2l6ZSAmPSB+SVNfTU1BUFBFRF9CSVQ7CisJICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsKKwkgICAgaWYgKENBTExfTVVOTUFQKChjaGFyKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQorCSAgICAgIGZtLT5mb290cHJpbnQgLT0gcHNpemU7CisJICAgIGdvdG8gcG9zdGFjdGlvbjsKKwkgIH0KKwkgIGVsc2UgeworCSAgICBtY2h1bmtwdHIgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7CisJICAgIHBzaXplICs9IHByZXZzaXplOworCSAgICBwID0gcHJldjsKKwkgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKSB7IC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCisJICAgICAgaWYgKHAgIT0gZm0tPmR2KSB7CisJCXVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOworCSAgICAgIH0KKwkgICAgICBlbHNlIGlmICgobmV4dC0+aGVhZCAmIElOVVNFX0JJVFMpID09IElOVVNFX0JJVFMpIHsKKwkJZm0tPmR2c2l6ZSA9IHBzaXplOworCQlzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisJCWdvdG8gcG9zdGFjdGlvbjsKKwkgICAgICB9CisJICAgIH0KKwkgICAgZWxzZQorCSAgICAgIGdvdG8gZXJyb3JhY3Rpb247CisJICB9CisJfQorCisJaWYgKFJUQ0hFQ0sob2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisJICBpZiAoIWNpbnVzZShuZXh0KSkgeyAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLworCSAgICBpZiAobmV4dCA9PSBmbS0+dG9wKSB7CisJICAgICAgc2l6ZV90IHRzaXplID0gZm0tPnRvcHNpemUgKz0gcHNpemU7CisJICAgICAgZm0tPnRvcCA9IHA7CisJICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKwkgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKwkJZm0tPmR2ID0gMDsKKwkJZm0tPmR2c2l6ZSA9IDA7CisJICAgICAgfQorCSAgICAgIGlmIChzaG91bGRfdHJpbShmbSwgdHNpemUpKQorCQlzeXNfdHJpbShmbSwgMCk7CisJICAgICAgZ290byBwb3N0YWN0aW9uOworCSAgICB9CisJICAgIGVsc2UgaWYgKG5leHQgPT0gZm0tPmR2KSB7CisJICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsKKwkgICAgICBmbS0+ZHYgPSBwOworCSAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7CisJICAgICAgZ290byBwb3N0YWN0aW9uOworCSAgICB9CisJICAgIGVsc2UgeworCSAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsKKwkgICAgICBwc2l6ZSArPSBuc2l6ZTsKKwkgICAgICB1bmxpbmtfY2h1bmsoZm0sIG5leHQsIG5zaXplKTsKKwkgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOworCSAgICAgIGlmIChwID09IGZtLT5kdikgeworCQlmbS0+ZHZzaXplID0gcHNpemU7CisJCWdvdG8gcG9zdGFjdGlvbjsKKwkgICAgICB9CisJICAgIH0KKwkgIH0KKwkgIGVsc2UKKwkgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworCisJICBpZiAoaXNfc21hbGwocHNpemUpKSB7CisJICAgIGluc2VydF9zbWFsbF9jaHVuayhmbSwgcCwgcHNpemUpOworCSAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKwkgIH0KKwkgIGVsc2UgeworCSAgICB0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7CisJICAgIGluc2VydF9sYXJnZV9jaHVuayhmbSwgdHAsIHBzaXplKTsKKwkgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisJICAgIGlmICgtLWZtLT5yZWxlYXNlX2NoZWNrcyA9PSAwKQorCSAgICAgIHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKGZtKTsKKwkgIH0KKwkgIGdvdG8gcG9zdGFjdGlvbjsKKwl9CisgICAgICB9CisgICAgZXJyb3JhY3Rpb246CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgIHBvc3RhY3Rpb246CisgICAgICBQT1NUQUNUSU9OKGZtKTsKKyAgICB9CisgIH0KKyNpZiAhRk9PVEVSUworI3VuZGVmIGZtCisjZW5kaWYgLyogRk9PVEVSUyAqLworfQorCit2b2lkKiBkbGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgeworICB2b2lkKiBtZW07CisgIHNpemVfdCByZXEgPSAwOworICBpZiAobl9lbGVtZW50cyAhPSAwKSB7CisgICAgcmVxID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKKyAgICBpZiAoKChuX2VsZW1lbnRzIHwgZWxlbV9zaXplKSAmIH4oc2l6ZV90KTB4ZmZmZikgJiYKKwkocmVxIC8gbl9lbGVtZW50cyAhPSBlbGVtX3NpemUpKQorICAgICAgcmVxID0gTUFYX1NJWkVfVDsgLyogZm9yY2UgZG93bnN0cmVhbSBmYWlsdXJlIG9uIG92ZXJmbG93ICovCisgIH0KKyAgbWVtID0gZGxtYWxsb2MocmVxKTsKKyAgaWYgKG1lbSAhPSAwICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkKKyAgICBtZW1zZXQobWVtLCAwLCByZXEpOworICByZXR1cm4gbWVtOworfQorCit2b2lkKiBkbHJlYWxsb2Modm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKG9sZG1lbSA9PSAwKQorICAgIHJldHVybiBkbG1hbGxvYyhieXRlcyk7CisjaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCisgIGlmIChieXRlcyA9PSAwKSB7CisgICAgZGxmcmVlKG9sZG1lbSk7CisgICAgcmV0dXJuIDA7CisgIH0KKyNlbmRpZiAvKiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgKi8KKyAgZWxzZSB7CisjaWYgISBGT09URVJTCisgICAgbXN0YXRlIG0gPSBnbTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgbSA9IGdldF9tc3RhdGVfZm9yKG1lbTJjaHVuayhvbGRtZW0pKTsKKyAgICBpZiAoIW9rX21hZ2ljKG0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgcmV0dXJuIGludGVybmFsX3JlYWxsb2MobSwgb2xkbWVtLCBieXRlcyk7CisgIH0KK30KKwordm9pZCogZGxtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKGdtLCBhbGlnbm1lbnQsIGJ5dGVzKTsKK30KKwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplLAorCQkJCSB2b2lkKiBjaHVua3NbXSkgeworICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8KKyAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgJnN6LCAzLCBjaHVua3MpOworfQorCit2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sCisJCQkJICAgdm9pZCogY2h1bmtzW10pIHsKKyAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Cit9CisKK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCBieXRlcykgeworICBzaXplX3QgcGFnZXN6OworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgcGFnZXN6ID0gbXBhcmFtcy5wYWdlX3NpemU7CisgIHJldHVybiBkbG1lbWFsaWduKHBhZ2VzeiwgYnl0ZXMpOworfQorCit2b2lkKiBkbHB2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc3o7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsKKyAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCAoYnl0ZXMgKyBwYWdlc3ogLSBTSVpFX1RfT05FKSAmIH4ocGFnZXN6IC0gU0laRV9UX09ORSkpOworfQorCitpbnQgZGxtYWxsb2NfdHJpbShzaXplX3QgcGFkKSB7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBpbnQgcmVzdWx0ID0gMDsKKyAgaWYgKCFQUkVBQ1RJT04oZ20pKSB7CisgICAgcmVzdWx0ID0gc3lzX3RyaW0oZ20sIHBhZCk7CisgICAgUE9TVEFDVElPTihnbSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+Zm9vdHByaW50OworfQorCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+bWF4X2Zvb3RwcmludDsKK30KKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCkgeworICByZXR1cm4gaW50ZXJuYWxfbWFsbGluZm8oZ20pOworfQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKK3ZvaWQgZGxtYWxsb2Nfc3RhdHMoKSB7CisgIGludGVybmFsX21hbGxvY19zdGF0cyhnbSk7Cit9CisKK2ludCBkbG1hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLworCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgaWYgKGNpbnVzZShwKSkKKyAgICAgIHJldHVybiBjaHVua3NpemUocCkgLSBvdmVyaGVhZF9mb3IocCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHVzZXIgbXNwYWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBNU1BBQ0VTCisKK3N0YXRpYyBtc3RhdGUgaW5pdF91c2VyX21zdGF0ZShjaGFyKiB0YmFzZSwgc2l6ZV90IHRzaXplKSB7CisgIHNpemVfdCBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIG1jaHVua3B0ciBtbjsKKyAgbWNodW5rcHRyIG1zcCA9IGFsaWduX2FzX2NodW5rKHRiYXNlKTsKKyAgbXN0YXRlIG0gPSAobXN0YXRlKShjaHVuazJtZW0obXNwKSk7CisgIG1lbXNldChtLCAwLCBtc2l6ZSk7CisgIElOSVRJQUxfTE9DSygmbS0+bXV0ZXgpOworICBtc3AtPmhlYWQgPSAobXNpemV8UElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgIG0tPnNlZy5zaXplID0gbS0+Zm9vdHByaW50ID0gbS0+bWF4X2Zvb3RwcmludCA9IHRzaXplOworICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CisgIG0tPnJlbGVhc2VfY2hlY2tzID0gTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURTsKKyAgbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsKKyAgbS0+ZXh0cCA9IDA7CisgIG0tPmV4dHMgPSAwOworICBkaXNhYmxlX2NvbnRpZ3VvdXMobSk7CisgIGluaXRfYmlucyhtKTsKKyAgbW4gPSBuZXh0X2NodW5rKG1lbTJjaHVuayhtKSk7CisgIGluaXRfdG9wKG0sIG1uLCAoc2l6ZV90KSgodGJhc2UgKyB0c2l6ZSkgLSAoY2hhciopbW4pIC0gVE9QX0ZPT1RfU0laRSk7CisgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICByZXR1cm4gbTsKK30KKworbXNwYWNlIGNyZWF0ZV9tc3BhY2Uoc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKSB7CisgIG1zdGF0ZSBtID0gMDsKKyAgc2l6ZV90IG1zaXplOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpZiAoY2FwYWNpdHkgPCAoc2l6ZV90KSAtKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkgeworICAgIHNpemVfdCBycyA9ICgoY2FwYWNpdHkgPT0gMCk/IG1wYXJhbXMuZ3JhbnVsYXJpdHkgOgorCQkgKGNhcGFjaXR5ICsgVE9QX0ZPT1RfU0laRSArIG1zaXplKSk7CisgICAgc2l6ZV90IHRzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24ocnMpOworICAgIGNoYXIqIHRiYXNlID0gKGNoYXIqKShDQUxMX01NQVAodHNpemUpKTsKKyAgICBpZiAodGJhc2UgIT0gQ01GQUlMKSB7CisgICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSh0YmFzZSwgdHNpemUpOworICAgICAgbS0+c2VnLnNmbGFncyA9IElTX01NQVBQRURfQklUOworICAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIChtc3BhY2UpbTsKK30KKworbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCkgeworICBtc3RhdGUgbSA9IDA7CisgIHNpemVfdCBtc2l6ZTsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsKKyAgaWYgKGNhcGFjaXR5ID4gbXNpemUgKyBUT1BfRk9PVF9TSVpFICYmCisgICAgICBjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUoKGNoYXIqKWJhc2UsIGNhcGFjaXR5KTsKKyAgICBtLT5zZWcuc2ZsYWdzID0gRVhURVJOX0JJVDsKKyAgICBzZXRfbG9jayhtLCBsb2NrZWQpOworICB9CisgIHJldHVybiAobXNwYWNlKW07Cit9CisKK2ludCBtc3BhY2VfbW1hcF9sYXJnZV9jaHVua3MobXNwYWNlIG1zcCwgaW50IGVuYWJsZSkgeworICBpbnQgcmV0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgIGlmICh1c2VfbW1hcChtcykpCisgICAgICByZXQgPSAxOworICAgIGlmIChlbmFibGUpCisgICAgICBlbmFibGVfbW1hcChtcyk7CisgICAgZWxzZQorICAgICAgZGlzYWJsZV9tbWFwKG1zKTsKKyAgICBQT1NUQUNUSU9OKG1zKTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCkgeworICBzaXplX3QgZnJlZWQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIG1zZWdtZW50cHRyIHNwID0gJm1zLT5zZWc7CisgICAgd2hpbGUgKHNwICE9IDApIHsKKyAgICAgIGNoYXIqIGJhc2UgPSBzcC0+YmFzZTsKKyAgICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7CisgICAgICBmbGFnX3QgZmxhZyA9IHNwLT5zZmxhZ3M7CisgICAgICBzcCA9IHNwLT5uZXh0OworICAgICAgaWYgKChmbGFnICYgSVNfTU1BUFBFRF9CSVQpICYmICEoZmxhZyAmIEVYVEVSTl9CSVQpICYmCisJICBDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKQorCWZyZWVkICs9IHNpemU7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGZyZWVkOworfQorCisvKgorICBtc3BhY2UgdmVyc2lvbnMgb2Ygcm91dGluZXMgYXJlIG5lYXItY2xvbmVzIG9mIHRoZSBnbG9iYWwKKyAgdmVyc2lvbnMuIFRoaXMgaXMgbm90IHNvIG5pY2UgYnV0IGJldHRlciB0aGFuIHRoZSBhbHRlcm5hdGl2ZXMuCisqLworCisKK3ZvaWQqIG1zcGFjZV9tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IGJ5dGVzKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKCFQUkVBQ1RJT04obXMpKSB7CisgICAgdm9pZCogbWVtOworICAgIHNpemVfdCBuYjsKKyAgICBpZiAoYnl0ZXMgPD0gTUFYX1NNQUxMX1JFUVVFU1QpIHsKKyAgICAgIGJpbmRleF90IGlkeDsKKyAgICAgIGJpbm1hcF90IHNtYWxsYml0czsKKyAgICAgIG5iID0gKGJ5dGVzIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlkeCA9IHNtYWxsX2luZGV4KG5iKTsKKyAgICAgIHNtYWxsYml0cyA9IG1zLT5zbWFsbG1hcCA+PiBpZHg7CisKKyAgICAgIGlmICgoc21hbGxiaXRzICYgMHgzVSkgIT0gMCkgeyAvKiBSZW1haW5kZXJsZXNzIGZpdCB0byBhIHNtYWxsYmluLiAqLworCW1jaHVua3B0ciBiLCBwOworCWlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KKwliID0gc21hbGxiaW5fYXQobXMsIGlkeCk7CisJcCA9IGItPmZkOworCWFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKwl1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXMsIGIsIHAsIGlkeCk7CisJc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisJbWVtID0gY2h1bmsybWVtKHApOworCWNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKwlnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gbXMtPmR2c2l6ZSkgeworCWlmIChzbWFsbGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLworCSAgbWNodW5rcHRyIGIsIHAsIHI7CisJICBzaXplX3QgcnNpemU7CisJICBiaW5kZXhfdCBpOworCSAgYmlubWFwX3QgbGVmdGJpdHMgPSAoc21hbGxiaXRzIDw8IGlkeCkgJiBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKTsKKwkgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKwkgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisJICBiID0gc21hbGxiaW5fYXQobXMsIGkpOworCSAgcCA9IGItPmZkOworCSAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsKKwkgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhtcywgYiwgcCwgaSk7CisJICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKwkgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovCisJICBpZiAoU0laRV9UX1NJWkUgIT0gNCAmJiByc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorCSAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisJICBlbHNlIHsKKwkgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworCSAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworCSAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworCSAgICByZXBsYWNlX2R2KG1zLCByLCByc2l6ZSk7CisJICB9CisJICBtZW0gPSBjaHVuazJtZW0ocCk7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorCisJZWxzZSBpZiAobXMtPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19zbWFsbChtcywgbmIpKSAhPSAwKSB7CisJICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisJICBnb3RvIHBvc3RhY3Rpb247CisJfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkKKyAgICAgIG5iID0gTUFYX1NJWkVfVDsgLyogVG9vIGJpZyB0byBhbGxvY2F0ZS4gRm9yY2UgZmFpbHVyZSAoaW4gc3lzIGFsbG9jKSAqLworICAgIGVsc2UgeworICAgICAgbmIgPSBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZiAobXMtPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19sYXJnZShtcywgbmIpKSAhPSAwKSB7CisJY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworCWdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPD0gbXMtPmR2c2l6ZSkgeworICAgICAgc2l6ZV90IHJzaXplID0gbXMtPmR2c2l6ZSAtIG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtcy0+ZHY7CisgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsgLyogc3BsaXQgZHYgKi8KKwltY2h1bmtwdHIgciA9IG1zLT5kdiA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKwltcy0+ZHZzaXplID0gcnNpemU7CisJc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKwlzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisgICAgICB9CisgICAgICBlbHNlIHsgLyogZXhoYXVzdCBkdiAqLworCXNpemVfdCBkdnMgPSBtcy0+ZHZzaXplOworCW1zLT5kdnNpemUgPSAwOworCW1zLT5kdiA9IDA7CisJc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBtcy0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtcy0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBtcy0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhtcywgbXMtPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKG1zLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKG1zKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworI2lmIEZPT1RFUlMKKyAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgZm0gPSAobXN0YXRlKW1zcDsKKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghUFJFQUNUSU9OKGZtKSkgeworICAgICAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHApOworICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcCkgJiYgb2tfY2ludXNlKHApKSkgeworCXNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKwltY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKwlpZiAoIXBpbnVzZShwKSkgeworCSAgc2l6ZV90IHByZXZzaXplID0gcC0+cHJldl9mb290OworCSAgaWYgKChwcmV2c2l6ZSAmIElTX01NQVBQRURfQklUKSAhPSAwKSB7CisJICAgIHByZXZzaXplICY9IH5JU19NTUFQUEVEX0JJVDsKKwkgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOworCSAgICBpZiAoQ0FMTF9NVU5NQVAoKGNoYXIqKXAgLSBwcmV2c2l6ZSwgcHNpemUpID09IDApCisJICAgICAgZm0tPmZvb3RwcmludCAtPSBwc2l6ZTsKKwkgICAgZ290byBwb3N0YWN0aW9uOworCSAgfQorCSAgZWxzZSB7CisJICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKKwkgICAgcHNpemUgKz0gcHJldnNpemU7CisJICAgIHAgPSBwcmV2OworCSAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwcmV2KSkpIHsgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8KKwkgICAgICBpZiAocCAhPSBmbS0+ZHYpIHsKKwkJdW5saW5rX2NodW5rKGZtLCBwLCBwcmV2c2l6ZSk7CisJICAgICAgfQorCSAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykgeworCQlmbS0+ZHZzaXplID0gcHNpemU7CisJCXNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKwkJZ290byBwb3N0YWN0aW9uOworCSAgICAgIH0KKwkgICAgfQorCSAgICBlbHNlCisJICAgICAgZ290byBlcnJvcmFjdGlvbjsKKwkgIH0KKwl9CisKKwlpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKwkgIGlmICghY2ludXNlKG5leHQpKSB7ICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovCisJICAgIGlmIChuZXh0ID09IGZtLT50b3ApIHsKKwkgICAgICBzaXplX3QgdHNpemUgPSBmbS0+dG9wc2l6ZSArPSBwc2l6ZTsKKwkgICAgICBmbS0+dG9wID0gcDsKKwkgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworCSAgICAgIGlmIChwID09IGZtLT5kdikgeworCQlmbS0+ZHYgPSAwOworCQlmbS0+ZHZzaXplID0gMDsKKwkgICAgICB9CisJICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpCisJCXN5c190cmltKGZtLCAwKTsKKwkgICAgICBnb3RvIHBvc3RhY3Rpb247CisJICAgIH0KKwkgICAgZWxzZSBpZiAobmV4dCA9PSBmbS0+ZHYpIHsKKwkgICAgICBzaXplX3QgZHNpemUgPSBmbS0+ZHZzaXplICs9IHBzaXplOworCSAgICAgIGZtLT5kdiA9IHA7CisJICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsKKwkgICAgICBnb3RvIHBvc3RhY3Rpb247CisJICAgIH0KKwkgICAgZWxzZSB7CisJICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOworCSAgICAgIHBzaXplICs9IG5zaXplOworCSAgICAgIHVubGlua19jaHVuayhmbSwgbmV4dCwgbnNpemUpOworCSAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7CisJICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisJCWZtLT5kdnNpemUgPSBwc2l6ZTsKKwkJZ290byBwb3N0YWN0aW9uOworCSAgICAgIH0KKwkgICAgfQorCSAgfQorCSAgZWxzZQorCSAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisKKwkgIGlmIChpc19zbWFsbChwc2l6ZSkpIHsKKwkgICAgaW5zZXJ0X3NtYWxsX2NodW5rKGZtLCBwLCBwc2l6ZSk7CisJICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOworCSAgfQorCSAgZWxzZSB7CisJICAgIHRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIpcDsKKwkgICAgaW5zZXJ0X2xhcmdlX2NodW5rKGZtLCB0cCwgcHNpemUpOworCSAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKwkgICAgaWYgKC0tZm0tPnJlbGVhc2VfY2hlY2tzID09IDApCisJICAgICAgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMoZm0pOworCSAgfQorCSAgZ290byBwb3N0YWN0aW9uOworCX0KKyAgICAgIH0KKyAgICBlcnJvcmFjdGlvbjoKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgcG9zdGFjdGlvbjoKKyAgICAgIFBPU1RBQ1RJT04oZm0pOworICAgIH0KKyAgfQorfQorCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7CisgIHZvaWQqIG1lbTsKKyAgc2l6ZV90IHJlcSA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKG5fZWxlbWVudHMgIT0gMCkgeworICAgIHJlcSA9IG5fZWxlbWVudHMgKiBlbGVtX3NpemU7CisgICAgaWYgKCgobl9lbGVtZW50cyB8IGVsZW1fc2l6ZSkgJiB+KHNpemVfdCkweGZmZmYpICYmCisJKHJlcSAvIG5fZWxlbWVudHMgIT0gZWxlbV9zaXplKSkKKyAgICAgIHJlcSA9IE1BWF9TSVpFX1Q7IC8qIGZvcmNlIGRvd25zdHJlYW0gZmFpbHVyZSBvbiBvdmVyZmxvdyAqLworICB9CisgIG1lbSA9IGludGVybmFsX21hbGxvYyhtcywgcmVxKTsKKyAgaWYgKG1lbSAhPSAwICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkKKyAgICBtZW1zZXQobWVtLCAwLCByZXEpOworICByZXR1cm4gbWVtOworfQorCit2b2lkKiBtc3BhY2VfcmVhbGxvYyhtc3BhY2UgbXNwLCB2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICBpZiAob2xkbWVtID09IDApCisgICAgcmV0dXJuIG1zcGFjZV9tYWxsb2MobXNwLCBieXRlcyk7CisjaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCisgIGlmIChieXRlcyA9PSAwKSB7CisgICAgbXNwYWNlX2ZyZWUobXNwLCBvbGRtZW0pOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCisgIGVsc2UgeworI2lmIEZPT1RFUlMKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsob2xkbWVtKTsKKyAgICBtc3RhdGUgbXMgPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGludGVybmFsX3JlYWxsb2MobXMsIG9sZG1lbSwgYnl0ZXMpOworICB9Cit9CisKK3ZvaWQqIG1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaW50ZXJuYWxfbWVtYWxpZ24obXMsIGFsaWdubWVudCwgYnl0ZXMpOworfQorCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKwkJCQkgc2l6ZV90IGVsZW1fc2l6ZSwgdm9pZCogY2h1bmtzW10pIHsKKyAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovCisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGlhbGxvYyhtcywgbl9lbGVtZW50cywgJnN6LCAzLCBjaHVua3MpOworfQorCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorCQkJCSAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOworfQorCitpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCkgeworICBpbnQgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICAgIHJlc3VsdCA9IHN5c190cmltKG1zLCBwYWQpOworICAgICAgUE9TVEFDVElPTihtcyk7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXMpOworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KK30KKworc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICByZXN1bHQgPSBtcy0+Zm9vdHByaW50OworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICByZXN1bHQgPSBtcy0+bWF4X2Zvb3RwcmludDsKKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKG1zKTsKK30KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCitzaXplX3QgbXNwYWNlX3VzYWJsZV9zaXplKHZvaWQqIG1lbSkgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIGlmIChjaW51c2UocCkpCisgICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gb3ZlcmhlYWRfZm9yKHApOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgbXNwYWNlX21hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisjZW5kaWYgLyogTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBBbHRlcm5hdGl2ZSBNT1JFQ09SRSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBHdWlkZWxpbmVzIGZvciBjcmVhdGluZyBhIGN1c3RvbSB2ZXJzaW9uIG9mIE1PUkVDT1JFOgorCisgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIE1PUkVDT1JFIHNob3VsZCBhbGxvY2F0ZSBpbiBtdWx0aXBsZXMgb2YgcGFnZXNpemUuCisgICogTU9SRUNPUkUgbWF5IGFsbG9jYXRlIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkLiAoT3IgZXZlbiBsZXNzLAorICAgICAgYnV0IHRoaXMgd2lsbCB1c3VhbGx5IHJlc3VsdCBpbiBhIG1hbGxvYyBmYWlsdXJlLikKKyAgKiBNT1JFQ09SRSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2hlbiBnaXZlbiBhcmd1bWVudCB6ZXJvLCBidXQKKyAgICAgIGluc3RlYWQgcmV0dXJuIG9uZSBwYXN0IHRoZSBlbmQgYWRkcmVzcyBvZiBtZW1vcnkgZnJvbSBwcmV2aW91cworICAgICAgbm9uemVybyBjYWxsLgorICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSB3aXRoIHBvc2l0aXZlCisgICAgICBhcmd1bWVudHMgc2hvdWxkIHJldHVybiBpbmNyZWFzaW5nIGFkZHJlc3NlcywgaW5kaWNhdGluZyB0aGF0CisgICAgICBzcGFjZSBoYXMgYmVlbiBjb250aWd1b3VzbHkgZXh0ZW5kZWQuCisgICogRXZlbiB0aG91Z2ggY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgcmV0dXJuIGNvbnRpZ3VvdXMKKyAgICAgIGFkZHJlc3NlcywgaXQgbXVzdCBiZSBPSyBmb3IgbWFsbG9jJ2VkIGNodW5rcyB0byBzcGFuIG11bHRpcGxlCisgICAgICByZWdpb25zIGluIHRob3NlIGNhc2VzIHdoZXJlIHRoZXkgZG8gaGFwcGVuIHRvIGJlIGNvbnRpZ3VvdXMuCisgICogTU9SRUNPUkUgbmVlZCBub3QgaGFuZGxlIG5lZ2F0aXZlIGFyZ3VtZW50cyAtLSBpdCBtYXkgaW5zdGVhZAorICAgICAganVzdCByZXR1cm4gTUZBSUwgd2hlbiBnaXZlbiBuZWdhdGl2ZSBhcmd1bWVudHMuCisgICAgICBOZWdhdGl2ZSBhcmd1bWVudHMgYXJlIGFsd2F5cyBtdWx0aXBsZXMgb2YgcGFnZXNpemUuIE1PUkVDT1JFCisgICAgICBtdXN0IG5vdCBtaXNpbnRlcnByZXQgbmVnYXRpdmUgYXJncyBhcyBsYXJnZSBwb3NpdGl2ZSB1bnNpZ25lZAorICAgICAgYXJncy4gWW91IGNhbiBzdXBwcmVzcyBhbGwgc3VjaCBjYWxscyBmcm9tIGV2ZW4gb2NjdXJyaW5nIGJ5IGRlZmluaW5nCisgICAgICBNT1JFQ09SRV9DQU5OT1RfVFJJTSwKKworICBBcyBhbiBleGFtcGxlIGFsdGVybmF0aXZlIE1PUkVDT1JFLCBoZXJlIGlzIGEgY3VzdG9tIGFsbG9jYXRvcgorICBraW5kbHkgY29udHJpYnV0ZWQgZm9yIHByZS1PU1ggbWFjT1MuICBJdCB1c2VzIHZpcnR1YWxseSBidXQgbm90CisgIG5lY2Vzc2FyaWx5IHBoeXNpY2FsbHkgY29udGlndW91cyBub24tcGFnZWQgbWVtb3J5IChsb2NrZWQgaW4sCisgIHByZXNlbnQgYW5kIHdvbid0IGdldCBzd2FwcGVkIG91dCkuICBZb3UgY2FuIHVzZSBpdCBieSB1bmNvbW1lbnRpbmcKKyAgdGhpcyBzZWN0aW9uLCBhZGRpbmcgc29tZSAjaW5jbHVkZXMsIGFuZCBzZXR0aW5nIHVwIHRoZSBhcHByb3ByaWF0ZQorICBkZWZpbmVzIGFib3ZlOgorCisgICAgICAjZGVmaW5lIE1PUkVDT1JFIG9zTW9yZUNvcmUKKworICBUaGVyZSBpcyBhbHNvIGEgc2h1dGRvd24gcm91dGluZSB0aGF0IHNob3VsZCBzb21laG93IGJlIGNhbGxlZCBmb3IKKyAgY2xlYW51cCB1cG9uIHByb2dyYW0gZXhpdC4KKworICAjZGVmaW5lIE1BWF9QT09MX0VOVFJJRVMgMTAwCisgICNkZWZpbmUgTUlOSU1VTV9NT1JFQ09SRV9TSVpFICAoNjQgKiAxMDI0VSkKKyAgc3RhdGljIGludCBuZXh0X29zX3Bvb2w7CisgIHZvaWQgKm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsKKworICB2b2lkICpvc01vcmVDb3JlKGludCBzaXplKQorICB7CisgICAgdm9pZCAqcHRyID0gMDsKKyAgICBzdGF0aWMgdm9pZCAqc2Jya190b3AgPSAwOworCisgICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgIGlmIChzaXplIDwgTUlOSU1VTV9NT1JFQ09SRV9TSVpFKQorCSBzaXplID0gTUlOSU1VTV9NT1JFQ09SRV9TSVpFOworICAgICAgaWYgKEN1cnJlbnRFeGVjdXRpb25MZXZlbCgpID09IGtUYXNrTGV2ZWwpCisJIHB0ciA9IFBvb2xBbGxvY2F0ZVJlc2lkZW50KHNpemUgKyBSTV9QQUdFX1NJWkUsIDApOworICAgICAgaWYgKHB0ciA9PSAwKQorICAgICAgeworCXJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICAgIH0KKyAgICAgIC8vIHNhdmUgcHRycyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBkdXJpbmcgY2xlYW51cAorICAgICAgb3VyX29zX3Bvb2xzW25leHRfb3NfcG9vbF0gPSBwdHI7CisgICAgICBuZXh0X29zX3Bvb2wrKzsKKyAgICAgIHB0ciA9ICh2b2lkICopICgoKChzaXplX3QpIHB0cikgKyBSTV9QQUdFX01BU0spICYgflJNX1BBR0VfTUFTSyk7CisgICAgICBzYnJrX3RvcCA9IChjaGFyICopIHB0ciArIHNpemU7CisgICAgICByZXR1cm4gcHRyOworICAgIH0KKyAgICBlbHNlIGlmIChzaXplIDwgMCkKKyAgICB7CisgICAgICAvLyB3ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBzaHJpbmsgYmVoYXZpb3IKKyAgICAgIHJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBzYnJrX3RvcDsKKyAgICB9CisgIH0KKworICAvLyBjbGVhbnVwIGFueSBhbGxvY2F0ZWQgbWVtb3J5IHBvb2xzCisgIC8vIGNhbGxlZCBhcyBsYXN0IHRoaW5nIGJlZm9yZSBzaHV0dGluZyBkb3duIGRyaXZlcgorCisgIHZvaWQgb3NDbGVhbnVwTWVtKHZvaWQpCisgIHsKKyAgICB2b2lkICoqcHRyOworCisgICAgZm9yIChwdHIgPSBvdXJfb3NfcG9vbHM7IHB0ciA8ICZvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107IHB0cisrKQorICAgICAgaWYgKCpwdHIpCisgICAgICB7CisJIFBvb2xEZWFsbG9jYXRlKCpwdHIpOworCSAqcHRyID0gMDsKKyAgICAgIH0KKyAgfQorCisqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIaXN0b3J5OgorICAgIFYyLjguNCAobm90IHlldCByZWxlYXNlZCkKKyAgICAgICogQWRkIG1zcGFjZV9tbWFwX2xhcmdlX2NodW5rczsgdGhhbmtzIHRvIEplYW4gQnJvdXdlcnMKKyAgICAgICogRml4IGluc3VmZmljaWVudCBzeXNfYWxsb2MgcGFkZGluZyB3aGVuIHVzaW5nIDE2Ynl0ZSBhbGlnbm1lbnQKKyAgICAgICogRml4IGJhZCBlcnJvciBjaGVjayBpbiBtc3BhY2VfZm9vdHByaW50CisgICAgICAqIEFkYXB0YXRpb25zIGZvciBwdG1hbGxvYywgY291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIuCisgICAgICAqIFJlZW50cmFudCBzcGluIGxvY2tzLCBjb3VydGVzeSBvZiBFYXJsIENoZXcgYW5kIG90aGVycworICAgICAgKiBXaW4zMiBpbXByb3ZlbWVudHMsIGNvdXJ0ZXN5IG9mIE5pYWxsIERvdWdsYXMgYW5kIEVhcmwgQ2hldworICAgICAgKiBBZGQgTk9fU0VHTUVOVF9UUkFWRVJTQUwgYW5kIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgb3B0aW9ucworICAgICAgKiBFeHRlbnNpb24gaG9vayBpbiBtYWxsb2Nfc3RhdGUKKyAgICAgICogVmFyaW91cyBzbWFsbCBhZGp1c3RtZW50cyB0byByZWR1Y2Ugd2FybmluZ3Mgb24gc29tZSBjb21waWxlcnMKKyAgICAgICogVmFyaW91cyBjb25maWd1cmF0aW9uIGV4dGVuc2lvbnMvY2hhbmdlcyBmb3IgbW9yZSBwbGF0Zm9ybXMuIFRoYW5rcworCSB0byBhbGwgd2hvIGNvbnRyaWJ1dGVkIHRoZXNlLgorCisgICAgVjIuOC4zIFRodSBTZXAgMjIgMTE6MTY6MzIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZCBtYXhfZm9vdHByaW50IGZ1bmN0aW9ucworICAgICAgKiBFbnN1cmUgYWxsIGFwcHJvcHJpYXRlIGxpdGVyYWxzIGFyZSBzaXplX3QKKyAgICAgICogRml4IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHByb2JsZW0gZm9yIHNvbWUgI2RlZmluZSBzZXR0aW5ncworICAgICAgKiBBdm9pZCBjb25jYXRlbmF0aW5nIHNlZ21lbnRzIHdpdGggdGhlIG9uZSBwcm92aWRlZAorCWluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlCisgICAgICAqIFJlbmFtZSBzb21lIHZhcmlhYmxlcyB0byBhdm9pZCBjb21waWxlciBzaGFkb3dpbmcgd2FybmluZ3MKKyAgICAgICogVXNlIGV4cGxpY2l0IGxvY2sgaW5pdGlhbGl6YXRpb24uCisgICAgICAqIEJldHRlciBoYW5kbGluZyBvZiBzYnJrIGludGVyZmVyZW5jZS4KKyAgICAgICogU2ltcGxpZnkgYW5kIGZpeCBzZWdtZW50IGluc2VydGlvbiwgdHJpbW1pbmcgYW5kIG1zcGFjZV9kZXN0cm95CisgICAgICAqIFJlaW5zdGF0ZSBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgb3B0aW9uIGZyb20gMi43LngKKyAgICAgICogVGhhbmtzIGVzcGVjaWFsbHkgdG8gRGVubmlzIEZsYW5hZ2FuIGZvciBoZWxwIG9uIHRoZXNlLgorCisgICAgVjIuOC4yIFN1biBKdW4gMTIgMTY6MDE6MTAgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBtZW1hbGlnbiBicmFjZSBlcnJvci4KKworICAgIFYyLjguMSBXZWQgSnVuICA4IDE2OjExOjQ2IDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggaW1wcm9wZXIgI2VuZGlmIG5lc3RpbmcgaW4gQysrCisgICAgICAqIEFkZCBleHBsaWNpdCBjYXN0cyBuZWVkZWQgZm9yIEMrKworCisgICAgVjIuOC4wIE1vbiBNYXkgMzAgMTQ6MDk6MDIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFVzZSB0cmVlcyBmb3IgbGFyZ2UgYmlucworICAgICAgKiBTdXBwb3J0IG1zcGFjZXMKKyAgICAgICogVXNlIHNlZ21lbnRzIHRvIHVuaWZ5IHNicmstYmFzZWQgYW5kIG1tYXAtYmFzZWQgc3lzdGVtIGFsbG9jYXRpb24sCisJcmVtb3ZpbmcgbmVlZCBmb3IgZW11bGF0aW9uIG9uIG1vc3QgcGxhdGZvcm1zIHdpdGhvdXQgc2Jyay4KKyAgICAgICogRGVmYXVsdCBzYWZldHkgY2hlY2tzCisgICAgICAqIE9wdGlvbmFsIGZvb3RlciBjaGVja3MuIFRoYW5rcyB0byBXaWxsaWFtIFJvYmVydHNvbiBmb3IgdGhlIGlkZWEuCisgICAgICAqIEludGVybmFsIGNvZGUgcmVmYWN0b3JpbmcKKyAgICAgICogSW5jb3Jwb3JhdGUgc3VnZ2VzdGlvbnMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIGNoYW5nZXMuCisJVGhhbmtzIHRvIERlbm5pcyBGbGFuYWdhbiwgQ29saW4gUGx1bWIsIE5pYWxsIERvdWdsYXMsCisJQWFyb24gQmFjaG1hbm4sICBFbWVyeSBCZXJnZXIsIGFuZCBvdGhlcnMuCisgICAgICAqIFNwZWVkIHVwIG5vbi1mYXN0YmluIHByb2Nlc3NpbmcgZW5vdWdoIHRvIHJlbW92ZSBmYXN0Ymlucy4KKyAgICAgICogUmVtb3ZlIHVzZWxlc3MgY2ZyZWUoKSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBhcHBzLgorICAgICAgKiBSZW1vdmUgaW50ZXJuYWwgbWVtY3B5LCBtZW1zZXQuIENvbXBpbGVycyBoYW5kbGUgYnVpbHRpbnMgYmV0dGVyLgorICAgICAgKiBSZW1vdmUgc29tZSBvcHRpb25zIHRoYXQgbm8gb25lIGV2ZXIgdXNlZCBhbmQgcmVuYW1lIG90aGVycy4KKworICAgIFYyLjcuMiBTYXQgQXVnIDE3IDA5OjA3OjMwIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggbWFsbG9jX3N0YXRlIGJpdG1hcCBhcnJheSBtaXNkZWNsYXJhdGlvbgorCisgICAgVjIuNy4xIFRodSBKdWwgMjUgMTA6NTg6MDMgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFsbG93IHR1bmluZyBvZiBGSVJTVF9TT1JURURfQklOX1NJWkUKKyAgICAgICogVXNlIFBUUl9VSU5UIGFzIHR5cGUgZm9yIGFsbCBwdHItPmludCBjYXN0cy4gVGhhbmtzIHRvIEpvaG4gQmVsbW9udGUuCisgICAgICAqIEJldHRlciBkZXRlY3Rpb24gYW5kIHN1cHBvcnQgZm9yIG5vbi1jb250aWd1b3VzbmVzcyBvZiBNT1JFQ09SRS4KKwlUaGFua3MgdG8gQW5kcmVhcyBNdWVsbGVyLCBDb25hbCBXYWxzaCwgYW5kIFdvbGZyYW0gR2xvZ2VyCisgICAgICAqIEJ5cGFzcyBtb3N0IG9mIG1hbGxvYyBpZiBubyBmcmVlcy4gVGhhbmtzIFRvIEVtZXJ5IEJlcmdlci4KKyAgICAgICogRml4IGZyZWVpbmcgb2Ygb2xkIHRvcCBub24tY29udGlndW91cyBjaHVuayBpbSBzeXNtYWxsb2MuCisgICAgICAqIFJhaXNlZCBkZWZhdWx0IHRyaW0gYW5kIG1hcCB0aHJlc2hvbGRzIHRvIDI1NksuCisgICAgICAqIEZpeCBtbWFwLXJlbGF0ZWQgI2RlZmluZXMuIFRoYW5rcyB0byBMdWJvcyBMdW5hay4KKyAgICAgICogRml4IGNvcHkgbWFjcm9zOyBhZGRlZCBMQUNLU19GQ05UTF9ILiBUaGFua3MgdG8gTmVhbCBXYWxmaWVsZC4KKyAgICAgICogQnJhbmNoLWZyZWUgYmluIGNhbGN1bGF0aW9uCisgICAgICAqIERlZmF1bHQgdHJpbSBhbmQgbW1hcCB0aHJlc2hvbGRzIG5vdyAyNTZLLgorCisgICAgVjIuNy4wIFN1biBNYXIgMTEgMTQ6MTQ6MDYgMjAwMSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEludHJvZHVjZSBpbmRlcGVuZGVudF9jb21hbGxvYyBhbmQgaW5kZXBlbmRlbnRfY2FsbG9jLgorCVRoYW5rcyB0byBNaWNoYWVsIFBhY2hvcyBmb3IgbW90aXZhdGlvbiBhbmQgaGVscC4KKyAgICAgICogTWFrZSBvcHRpb25hbCAuaCBmaWxlIGF2YWlsYWJsZQorICAgICAgKiBBbGxvdyA+IDJHQiByZXF1ZXN0cyBvbiAzMmJpdCBzeXN0ZW1zLgorICAgICAgKiBuZXcgV0lOMzIgc2JyaywgbW1hcCwgbXVubWFwLCBsb2NrIGNvZGUgZnJvbSA8V2FsdGVyQEdlTmVTeXMtZS5kZT4uCisJVGhhbmtzIGFsc28gdG8gQW5kcmVhcyBNdWVsbGVyIDxhLm11ZWxsZXIgYXQgcGFyYWRhdGVjLmRlPiwKKwlhbmQgQW5vbnltb3VzLgorICAgICAgKiBBbGxvdyBvdmVycmlkZSBvZiBNQUxMT0NfQUxJR05NRU5UIChUaGFua3MgdG8gUnV1ZCBXYWlqIGZvcgorCWhlbHBpbmcgdGVzdCB0aGlzLikKKyAgICAgICogbWVtYWxpZ246IGNoZWNrIGFsaWdubWVudCBhcmcKKyAgICAgICogcmVhbGxvYzogZG9uJ3QgdHJ5IHRvIHNoaWZ0IGNodW5rcyBiYWNrd2FyZHMsIHNpbmNlIHRoaXMKKwlsZWFkcyB0byAgbW9yZSBmcmFnbWVudGF0aW9uIGluIHNvbWUgcHJvZ3JhbXMgYW5kIGRvZXNuJ3QKKwlzZWVtIHRvIGhlbHAgaW4gYW55IG90aGVycy4KKyAgICAgICogQ29sbGVjdCBhbGwgY2FzZXMgaW4gbWFsbG9jIHJlcXVpcmluZyBzeXN0ZW0gbWVtb3J5IGludG8gc3lzbWFsbG9jCisgICAgICAqIFVzZSBtbWFwIGFzIGJhY2t1cCB0byBzYnJrCisgICAgICAqIFBsYWNlIGFsbCBpbnRlcm5hbCBzdGF0ZSBpbiBtYWxsb2Nfc3RhdGUKKyAgICAgICogSW50cm9kdWNlIGZhc3RiaW5zIChhbHRob3VnaCBzaW1pbGFyIHRvIDIuNS4xKQorICAgICAgKiBNYW55IG1pbm9yIHR1bmluZ3MgYW5kIGNvc21ldGljIGltcHJvdmVtZW50cworICAgICAgKiBJbnRyb2R1Y2UgVVNFX1BVQkxJQ19NQUxMT0NfV1JBUFBFUlMsIFVTRV9NQUxMT0NfTE9DSworICAgICAgKiBJbnRyb2R1Y2UgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OLCBNT1JFQ09SRV9DT05USUdVT1VTCisJVGhhbmtzIHRvIFRvbnkgRS4gQmVubmV0dCA8dGJlbm5ldHRAbnZpZGlhLmNvbT4gYW5kIG90aGVycy4KKyAgICAgICogSW5jbHVkZSBlcnJuby5oIHRvIHN1cHBvcnQgZGVmYXVsdCBmYWlsdXJlIGFjdGlvbi4KKworICAgIFYyLjYuNiBTdW4gRGVjICA1IDA3OjQyOjE5IDE5OTkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRpdmUgYXJndW1lbnRzCisgICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJvbSBNYXJ0aW4gQy4gRm9uZyA8bWNmb25nIGF0IHlhaG9vLmNvbT4KKwkgKiBBZGQgJ0xBQ0tTX1NZU19QQVJBTV9IJyBmb3IgdGhvc2Ugc3lzdGVtcyB3aXRob3V0ICdzeXMvcGFyYW0uaCcKKwkgIChlLmcuIFdJTjMyIHBsYXRmb3JtcykKKwkgKiBDbGVhbnVwIGhlYWRlciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zCisJICogQ2xlYW51cCBjb2RlIHRvIGF2b2lkIE1pY3Jvc29mdCBWaXN1YWwgQysrIGNvbXBpbGVyIGNvbXBsYWludHMKKwkgKiBBZGQgJ1VTRV9ETF9QUkVGSVgnIHRvIHF1aWNrbHkgYWxsb3cgY28tZXhpc3RlbmNlIHdpdGggZXhpc3RpbmcKKwkgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcworCSAqIFNldCAnbWFsbG9jX2dldHBhZ2VzaXplJyBmb3IgV0lOMzIgcGxhdGZvcm1zIChuZWVkcyBtb3JlIHdvcmspCisJICogVXNlICdhc3NlcnQnIHJhdGhlciB0aGFuICdBU1NFUlQnIGluIFdJTjMyIGNvZGUgdG8gY29uZm9ybSB0bworCSAgIHVzYWdlIG9mICdhc3NlcnQnIGluIG5vbi1XSU4zMiBjb2RlCisJICogSW1wcm92ZSBXSU4zMiAnc2JyaygpJyBlbXVsYXRpb24ncyAnZmluZFJlZ2lvbigpJyByb3V0aW5lIHRvCisJICAgYXZvaWQgaW5maW5pdGUgbG9vcAorICAgICAgKiBBbHdheXMgY2FsbCAnZlJFZSgpJyByYXRoZXIgdGhhbiAnZnJlZSgpJworCisgICAgVjIuNi41IFdlZCBKdW4gMTcgMTU6NTc6MzEgMTk5OCAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeGVkIG9yZGVyaW5nIHByb2JsZW0gd2l0aCBib3VuZGFyeS1zdGFtcGluZworCisgICAgVjIuNi4zIFN1biBNYXkgMTkgMDg6MTc6NTggMTk5NiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZGVkIHB2YWxsb2MsIGFzIHJlY29tbWVuZGVkIGJ5IEguSi4gTGl1CisgICAgICAqIEFkZGVkIDY0Yml0IHBvaW50ZXIgc3VwcG9ydCBtYWlubHkgZnJvbSBXb2xmcmFtIEdsb2dlcgorICAgICAgKiBBZGRlZCBhbm9ueW1vdXNseSBkb25hdGVkIFdJTjMyIHNicmsgZW11bGF0aW9uCisgICAgICAqIE1hbGxvYywgY2FsbG9jLCBnZXRwYWdlc2l6ZTogYWRkIG9wdGltaXphdGlvbnMgZnJvbSBSYXltb25kIE5panNzZW4KKyAgICAgICogbWFsbG9jX2V4dGVuZF90b3A6IGZpeCBtYXNrIGVycm9yIHRoYXQgY2F1c2VkIHdhc3RhZ2UgYWZ0ZXIKKwlmb3JlaWduIHNicmtzCisgICAgICAqIEFkZCBsaW51eCBtcmVtYXAgc3VwcG9ydCBjb2RlIGZyb20gSEogTGl1CisKKyAgICBWMi42LjIgVHVlIERlYyAgNSAwNjo1Mjo1NSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogSW50ZWdyYXRlZCBtb3N0IGRvY3VtZW50YXRpb24gd2l0aCB0aGUgY29kZS4KKyAgICAgICogQWRkIHN1cHBvcnQgZm9yIG1tYXAsIHdpdGggaGVscCBmcm9tCisJV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKyAgICAgICogVXNlIGxhc3RfcmVtYWluZGVyIGluIG1vcmUgY2FzZXMuCisgICAgICAqIFBhY2sgYmlucyB1c2luZyBpZGVhIGZyb20gIGNvbGluQG55eDEwLmNzLmR1LmVkdQorICAgICAgKiBVc2Ugb3JkZXJlZCBiaW5zIGluc3RlYWQgb2YgYmVzdC1maXQgdGhyZXNob2xkCisgICAgICAqIEVsaW1pbmF0ZSBibG9jay1sb2NhbCBkZWNscyB0byBzaW1wbGlmeSB0cmFjaW5nIGFuZCBkZWJ1Z2dpbmcuCisgICAgICAqIFN1cHBvcnQgYW5vdGhlciBjYXNlIG9mIHJlYWxsb2MgdmlhIG1vdmUgaW50byB0b3AKKyAgICAgICogRml4IGVycm9yIG9jY3VycmluZyB3aGVuIGluaXRpYWwgc2Jya19iYXNlIG5vdCB3b3JkLWFsaWduZWQuCisgICAgICAqIFJlbHkgb24gcGFnZSBzaXplIGZvciB1bml0cyBpbnN0ZWFkIG9mIFNCUktfVU5JVCB0bworCWF2b2lkIHN1cnByaXNlcyBhYm91dCBzYnJrIGFsaWdubWVudCBjb252ZW50aW9ucy4KKyAgICAgICogQWRkIG1hbGxpbmZvLCBtYWxsb3B0LiBUaGFua3MgdG8gUmF5bW9uZCBOaWpzc2VuCisJKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkgZm9yIHRoZSBzdWdnZXN0aW9uLgorICAgICAgKiBBZGQgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gYW5kIHRvcF9wYWQgbWFsbG9wdCBwYXJhbWV0ZXIuCisgICAgICAqIE1vcmUgcHJlY2F1dGlvbnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywKKwljb3VydGVzeSBvZiBXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgorICAgICAgKiBBZGRlZCBtYWNyb3MgZXRjLiwgYWxsb3dpbmcgdXNlIGluIGxpbnV4IGxpYmMgZnJvbQorCUguSi4gTHUgKGhqbEBnbnUuYWkubWl0LmVkdSkKKyAgICAgICogSW52ZXJ0ZWQgdGhpcyBoaXN0b3J5IGxpc3QKKworICAgIFYyLjYuMSBTYXQgRGVjICAyIDE0OjEwOjU3IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBSZS10dW5lZCBhbmQgZml4ZWQgdG8gYmVoYXZlIG1vcmUgbmljZWx5IHdpdGggVjIuNi4wIGNoYW5nZXMuCisgICAgICAqIFJlbW92ZWQgYWxsIHByZWFsbG9jYXRpb24gY29kZSBzaW5jZSB1bmRlciBjdXJyZW50IHNjaGVtZQorCXRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKKwl0aGUgd29yayBzYXZlZCBpbiBnb29kIGNhc2VzIGZvciBtb3N0IHRlc3QgcHJvZ3JhbXMuCisgICAgICAqIE5vIGxvbmdlciB1c2UgcmV0dXJuIGxpc3Qgb3IgdW5jb25zb2xpZGF0ZWQgYmlucyBzaW5jZQorCW5vIHNjaGVtZSB1c2luZyB0aGVtIGNvbnNpc3RlbnRseSBvdXRwZXJmb3JtcyB0aG9zZSB0aGF0IGRvbid0CisJZ2l2ZW4gYWJvdmUgY2hhbmdlcy4KKyAgICAgICogVXNlIGJlc3QgZml0IGZvciB2ZXJ5IGxhcmdlIGNodW5rcyB0byBwcmV2ZW50IHNvbWUgd29yc3QtY2FzZXMuCisgICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCisKKyAgICBWMi42LjAgU2F0IE5vdiAgNCAwNzowNToyMyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5rcyB0bworCVBhdWwgV2lsc29uICh3aWxzb25AY3MudGV4YXMuZWR1KSBmb3IgdGhlIHN1Z2dlc3Rpb24uCisKKyAgICBWMi41LjQgV2VkIE5vdiAgMSAwNzo1NDo1MSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkZWQgbWFsbG9jX3RyaW0sIHdpdGggaGVscCBmcm9tIFdvbGZyYW0gR2xvZ2VyCisJKHdtZ2xvQERlbnQuTUVELlVuaS1NdWVuY2hlbi5ERSkuCisKKyAgICBWMi41LjMgVHVlIEFwciAyNiAxMDoxNjowMSAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCisKKyAgICBWMi41LjIgVHVlIEFwciAgNSAxNjoyMDo0MCAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCisgICAgICAqIHJlYWxsb2M6IHRyeSB0byBleHBhbmQgaW4gYm90aCBkaXJlY3Rpb25zCisgICAgICAqIG1hbGxvYzogc3dhcCBvcmRlciBvZiBjbGVhbi1iaW4gc3RyYXRlZ3k7CisgICAgICAqIHJlYWxsb2M6IG9ubHkgY29uZGl0aW9uYWxseSBleHBhbmQgYmFja3dhcmRzCisgICAgICAqIFRyeSBub3QgdG8gc2NhdmVuZ2UgdXNlZCBiaW5zCisgICAgICAqIFVzZSBiaW4gY291bnRzIGFzIGEgZ3VpZGUgdG8gcHJlYWxsb2NhdGlvbgorICAgICAgKiBPY2Nhc2lvbmFsbHkgYmluIHJldHVybiBsaXN0IGNodW5rcyBpbiBmaXJzdCBzY2FuCisgICAgICAqIEFkZCBhIGZldyBvcHRpbWl6YXRpb25zIGZyb20gY29saW5Abnl4MTAuY3MuZHUuZWR1CisKKyAgICBWMi41LjEgU2F0IEF1ZyAxNCAxNTo0MDo0MyAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcpCisgICAgICAqIGZhc3RlciBiaW4gY29tcHV0YXRpb24gJiBzbGlnaHRseSBkaWZmZXJlbnQgYmlubmluZworICAgICAgKiBtZXJnZWQgYWxsIGNvbnNvbGlkYXRpb25zIHRvIG9uZSBwYXJ0IG9mIG1hbGxvYyBwcm9wZXIKKwkgKGVsaW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pCisgICAgICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkKKyAgICAgICogUHJvcGFnYXRlIGZhaWx1cmUgaW4gcmVhbGxvYyBpZiBtYWxsb2MgcmV0dXJucyAwCisgICAgICAqIEFkZCBzdHVmZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMKKwkgIGZyb20ga3B2QHJlc2VhcmNoLmF0dC5jb20KKworICAgIFYyLjUgU2F0IEF1ZyAgNyAwNzo0MTo1OSAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcub3N3ZWdvLmVkdSkKKyAgICAgICogcmVtb3ZlZCBwb3RlbnRpYWwgZm9yIG9kZCBhZGRyZXNzIGFjY2VzcyBpbiBwcmV2X2NodW5rCisgICAgICAqIHJlbW92ZWQgZGVwZW5kZW5jeSBvbiBnZXRwYWdlc2l6ZS5oCisgICAgICAqIG1pc2MgY29zbWV0aWNzIGFuZCBhIGJpdCBtb3JlIGludGVybmFsIGRvY3VtZW50YXRpb24KKyAgICAgICogYW50aWNvc21ldGljczogbWFuZ2xlZCBuYW1lcyBpbiBtYWNyb3MgdG8gZXZhZGUgZGVidWdnZXIgc3RyYW5nZW5lc3MKKyAgICAgICogdGVzdGVkIG9uIHNwYXJjLCBocC03MDAsIGRlYy1taXBzLCByczYwMDAKKwkgIHdpdGggZ2NjICYgbmF0aXZlIGNjIChocCwgZGVjIG9ubHkpIGFsbG93aW5nCisJICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGljZXMuKQorCisgICAgVHJpYWwgdmVyc2lvbiBGcmkgQXVnIDI4IDEzOjE0OjI5IDE5OTIgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQorICAgICAgKiBCYXNlZCBsb29zZWx5IG9uIGxpYmcrKy0xLjJYIG1hbGxvYy4gKEl0IHJldGFpbnMgc29tZSBvZiB0aGUgb3ZlcmFsbAorCSBzdHJ1Y3R1cmUgb2Ygb2xkIHZlcnNpb24sICBidXQgbW9zdCBkZXRhaWxzIGRpZmZlci4pCisKKyovCmRpZmYgLS1naXQgYS9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5jIGIvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGExNmViCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L25lZG1hbGxvYy9uZWRtYWxsb2MuYwpAQCAtMCwwICsxLDk3MCBAQAorLyogQWx0ZXJuYXRpdmUgbWFsbG9jIGltcGxlbWVudGF0aW9uIGZvciBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQKK2xvY2sgY29udGVudGlvbiBiYXNlZCBvbiBkbG1hbGxvYy4gKEMpIDIwMDUtMjAwNiBOaWFsbCBEb3VnbGFzCisKK0Jvb3N0IFNvZnR3YXJlIExpY2Vuc2UgLSBWZXJzaW9uIDEuMCAtIEF1Z3VzdCAxN3RoLCAyMDAzCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9yIG9yZ2FuaXphdGlvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGNvdmVyZWQgYnkKK3RoaXMgbGljZW5zZSAodGhlICJTb2Z0d2FyZSIpIHRvIHVzZSwgcmVwcm9kdWNlLCBkaXNwbGF5LCBkaXN0cmlidXRlLAorZXhlY3V0ZSwgYW5kIHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKK1NvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHRoaXJkLXBhcnRpZXMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvCitkbyBzbywgYWxsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZzoKKworVGhlIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBlbnRpcmUgc3RhdGVtZW50LCBpbmNsdWRpbmcKK3RoZSBhYm92ZSBsaWNlbnNlIGdyYW50LCB0aGlzIHJlc3RyaWN0aW9uIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsCittdXN0IGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBhbmQKK2FsbCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggY29waWVzIG9yIGRlcml2YXRpdmUKK3dvcmtzIGFyZSBzb2xlbHkgaW4gdGhlIGZvcm0gb2YgbWFjaGluZS1leGVjdXRhYmxlIG9iamVjdCBjb2RlIGdlbmVyYXRlZCBieQorYSBzb3VyY2UgbGFuZ3VhZ2UgcHJvY2Vzc29yLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UCitTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IgQU5ZT05FIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUgQkUgTElBQkxFCitGT1IgQU5ZIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKK0FSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorKi8KKworI2lmZGVmIF9NU0NfVkVSCisvKiBFbmFibGUgZnVsbCBhbGlhc2luZyBvbiBNU1ZDICovCisvKiNwcmFnbWEgb3B0aW1pemUoImEiLCBvbikqLworI2VuZGlmCisKKy8qI2RlZmluZSBGVUxMU0FOSVRZQ0hFQ0tTKi8KKworI2luY2x1ZGUgIm5lZG1hbGxvYy5oIgorI2lmIGRlZmluZWQoV0lOMzIpCisgI2luY2x1ZGUgPG1hbGxvYy5oPgorI2VuZGlmCisjZGVmaW5lIE1TUEFDRVMgMQorI2RlZmluZSBPTkxZX01TUEFDRVMgMQorI2lmbmRlZiBVU0VfTE9DS1MKKyAjZGVmaW5lIFVTRV9MT0NLUyAxCisjZW5kaWYKKyNkZWZpbmUgRk9PVEVSUyAxICAgICAgICAgICAvKiBOZWVkIHRvIGVuYWJsZSBmb290ZXJzIHNvIGZyZWVzIGxvY2sgdGhlIHJpZ2h0IG1zcGFjZSAqLworI3VuZGVmIERFQlVHCQkJCS8qIGRsbWFsbG9jIHdhbnRzIERFQlVHIGVpdGhlciAwIG9yIDEgKi8KKyNpZmRlZiBfREVCVUcKKyAjZGVmaW5lIERFQlVHIDEKKyNlbHNlCisgI2RlZmluZSBERUJVRyAwCisjZW5kaWYKKyNpZmRlZiBOREVCVUcgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGFzc2VydCBjaGVja2luZyBvbiByZWxlYXNlIGJ1aWxkcyAqLworICN1bmRlZiBERUJVRworI2VuZGlmCisvKiBUaGUgZGVmYXVsdCBvZiA2NEtiIG1lYW5zIHdlIHNwZW5kIHRvbyBtdWNoIHRpbWUga2VybmVsLXNpZGUgKi8KKyNpZm5kZWYgREVGQVVMVF9HUkFOVUxBUklUWQorI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgxKjEwMjQqMTAyNCkKKyNlbmRpZgorLyojZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDAqLworCisKKy8qI2RlZmluZSBGT1JDRUlOTElORSovCisjaW5jbHVkZSAibWFsbG9jLmMuaCIKKyNpZmRlZiBOREVCVUcgICAgICAgICAgICAgICAvKiBEaXNhYmxlIGFzc2VydCBjaGVja2luZyBvbiByZWxlYXNlIGJ1aWxkcyAqLworICN1bmRlZiBERUJVRworI2VuZGlmCisKKy8qIFRoZSBtYXhpbXVtIGNvbmN1cnJlbnQgdGhyZWFkcyBpbiBhIHBvb2wgcG9zc2libGUgKi8KKyNpZm5kZWYgTUFYVEhSRUFEU0lOUE9PTAorI2RlZmluZSBNQVhUSFJFQURTSU5QT09MIDE2CisjZW5kaWYKKy8qIFRoZSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRjYWNoZXMgd2hpY2ggY2FuIGJlIGFsbG9jYXRlZCAqLworI2lmbmRlZiBUSFJFQURDQUNIRU1BWENBQ0hFUworI2RlZmluZSBUSFJFQURDQUNIRU1BWENBQ0hFUyAyNTYKKyNlbmRpZgorLyogVGhlIG1heGltdW0gc2l6ZSB0byBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgdGhyZWFkIGNhY2hlICovCisjaWZuZGVmIFRIUkVBRENBQ0hFTUFYCisjZGVmaW5lIFRIUkVBRENBQ0hFTUFYIDgxOTIKKyNlbmRpZgorI2lmIDAKKy8qIFRoZSBudW1iZXIgb2YgY2FjaGUgZW50cmllcyBmb3IgZmluZXIgZ3JhaW5lZCBiaW5zLiBUaGlzIGlzICh0b3BiaXRwb3MoVEhSRUFEQ0FDSEVNQVgpLTQpKjIgKi8KKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVhCSU5TICgoMTMtNCkqMikKKyNlbHNlCisvKiBUaGUgbnVtYmVyIG9mIGNhY2hlIGVudHJpZXMuIFRoaXMgaXMgKHRvcGJpdHBvcyhUSFJFQURDQUNIRU1BWCktNCkgKi8KKyNkZWZpbmUgVEhSRUFEQ0FDSEVNQVhCSU5TICgxMy00KQorI2VuZGlmCisvKiBQb2ludCBhdCB3aGljaCB0aGUgZnJlZSBzcGFjZSBpbiBhIHRocmVhZCBjYWNoZSBpcyBnYXJiYWdlIGNvbGxlY3RlZCAqLworI2lmbmRlZiBUSFJFQURDQUNIRU1BWEZSRUVTUEFDRQorI2RlZmluZSBUSFJFQURDQUNIRU1BWEZSRUVTUEFDRSAoNTEyKjEwMjQpCisjZW5kaWYKKworCisjaWZkZWYgV0lOMzIKKyAjZGVmaW5lIFRMU1ZBUgkJCURXT1JECisgI2RlZmluZSBUTFNBTExPQyhrKQkoKihrKT1UbHNBbGxvYygpLCBUTFNfT1VUX09GX0lOREVYRVM9PSooaykpCisgI2RlZmluZSBUTFNGUkVFKGspCQkoIVRsc0ZyZWUoaykpCisgI2RlZmluZSBUTFNHRVQoaykJCVRsc0dldFZhbHVlKGspCisgI2RlZmluZSBUTFNTRVQoaywgYSkJKCFUbHNTZXRWYWx1ZShrLCBhKSkKKyAjaWZkZWYgREVCVUcKK3N0YXRpYyBMUFZPSUQgQ2hrZWRUbHNHZXRWYWx1ZShEV09SRCBpZHgpCit7CisJTFBWT0lEIHJldD1UbHNHZXRWYWx1ZShpZHgpOworCWFzc2VydChTX09LPT1HZXRMYXN0RXJyb3IoKSk7CisJcmV0dXJuIHJldDsKK30KKyAgI3VuZGVmIFRMU0dFVAorICAjZGVmaW5lIFRMU0dFVChrKSBDaGtlZFRsc0dldFZhbHVlKGspCisgI2VuZGlmCisjZWxzZQorICNkZWZpbmUgVExTVkFSCQkJcHRocmVhZF9rZXlfdAorICNkZWZpbmUgVExTQUxMT0MoaykJcHRocmVhZF9rZXlfY3JlYXRlKGssIDApCisgI2RlZmluZSBUTFNGUkVFKGspCQlwdGhyZWFkX2tleV9kZWxldGUoaykKKyAjZGVmaW5lIFRMU0dFVChrKQkJcHRocmVhZF9nZXRzcGVjaWZpYyhrKQorICNkZWZpbmUgVExTU0VUKGssIGEpCXB0aHJlYWRfc2V0c3BlY2lmaWMoaywgYSkKKyNlbmRpZgorCisjaWYgMAorLyogT25seSBlbmFibGUgaWYgdGVzdGluZyB3aXRoIHZhbGdyaW5kLiBDYXVzZXMgbWlzb3BlcmF0aW9uICovCisjZGVmaW5lIG1zcGFjZV9tYWxsb2MocCwgcykgbWFsbG9jKHMpCisjZGVmaW5lIG1zcGFjZV9yZWFsbG9jKHAsIG0sIHMpIHJlYWxsb2MobSwgcykKKyNkZWZpbmUgbXNwYWNlX2NhbGxvYyhwLCBuLCBzKSBjYWxsb2MobiwgcykKKyNkZWZpbmUgbXNwYWNlX2ZyZWUocCwgbSkgZnJlZShtKQorI2VuZGlmCisKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjaWYgIWRlZmluZWQoTk9fTkVEX05BTUVTUEFDRSkKK25hbWVzcGFjZSBuZWRhbGxvYyB7CisjZWxzZQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKyNlbmRpZgorCitzaXplX3QgbmVkYmxrc2l6ZSh2b2lkICptZW0pIFRIUk9XU1BFQworeworI2lmIDAKKwkvKiBPbmx5IGVuYWJsZSBpZiB0ZXN0aW5nIHdpdGggdmFsZ3JpbmQuIENhdXNlcyBtaXNvcGVyYXRpb24gKi8KKwlyZXR1cm4gVEhSRUFEQ0FDSEVNQVg7CisjZWxzZQorCWlmKG1lbSkKKwl7CisJCW1jaHVua3B0ciBwPW1lbTJjaHVuayhtZW0pOworCQlhc3NlcnQoY2ludXNlKHApKTsJLyogSWYgdGhpcyBmYWlscywgc29tZW9uZSB0cmllZCB0byBmcmVlIGEgYmxvY2sgdHdpY2UgKi8KKwkJaWYoY2ludXNlKHApKQorCQkJcmV0dXJuIGNodW5rc2l6ZShwKS1vdmVyaGVhZF9mb3IocCk7CisJfQorCXJldHVybiAwOworI2VuZGlmCit9CisKK3ZvaWQgbmVkc2V0dmFsdWUodm9pZCAqdikgVEhST1dTUEVDCQkJCQl7IG5lZHBzZXR2YWx1ZSgwLCB2KTsgfQordm9pZCAqIG5lZG1hbGxvYyhzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCQkJCXsgcmV0dXJuIG5lZHBtYWxsb2MoMCwgc2l6ZSk7IH0KK3ZvaWQgKiBuZWRjYWxsb2Moc2l6ZV90IG5vLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBjYWxsb2MoMCwgbm8sIHNpemUpOyB9Cit2b2lkICogbmVkcmVhbGxvYyh2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcHJlYWxsb2MoMCwgbWVtLCBzaXplKTsgfQordm9pZCAgIG5lZGZyZWUodm9pZCAqbWVtKSBUSFJPV1NQRUMJCQkJCXsgbmVkcGZyZWUoMCwgbWVtKTsgfQordm9pZCAqIG5lZG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgVEhST1dTUEVDIHsgcmV0dXJuIG5lZHBtZW1hbGlnbigwLCBhbGlnbm1lbnQsIGJ5dGVzKTsgfQorI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG5lZG1hbGxpbmZvKHZvaWQpIFRIUk9XU1BFQwkJCXsgcmV0dXJuIG5lZHBtYWxsaW5mbygwKTsgfQorI2VuZGlmCitpbnQgICAgbmVkbWFsbG9wdChpbnQgcGFybm8sIGludCB2YWx1ZSkgVEhST1dTUEVDCXsgcmV0dXJuIG5lZHBtYWxsb3B0KDAsIHBhcm5vLCB2YWx1ZSk7IH0KK2ludCAgICBuZWRtYWxsb2NfdHJpbShzaXplX3QgcGFkKSBUSFJPV1NQRUMJCQl7IHJldHVybiBuZWRwbWFsbG9jX3RyaW0oMCwgcGFkKTsgfQordm9pZCAgIG5lZG1hbGxvY19zdGF0cyh2b2lkKSBUSFJPV1NQRUMJCQkJCXsgbmVkcG1hbGxvY19zdGF0cygwKTsgfQorc2l6ZV90IG5lZG1hbGxvY19mb290cHJpbnQodm9pZCkgVEhST1dTUEVDCQkJCXsgcmV0dXJuIG5lZHBtYWxsb2NfZm9vdHByaW50KDApOyB9Cit2b2lkICoqbmVkaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBlbGVtc25vLCBzaXplX3QgZWxlbXNpemUsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQwl7IHJldHVybiBuZWRwaW5kZXBlbmRlbnRfY2FsbG9jKDAsIGVsZW1zbm8sIGVsZW1zaXplLCBjaHVua3MpOyB9Cit2b2lkICoqbmVkaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IGVsZW1zLCBzaXplX3QgKnNpemVzLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUMJeyByZXR1cm4gbmVkcGluZGVwZW5kZW50X2NvbWFsbG9jKDAsIGVsZW1zLCBzaXplcywgY2h1bmtzKTsgfQorCitzdHJ1Y3QgdGhyZWFkY2FjaGVibGtfdDsKK3R5cGVkZWYgc3RydWN0IHRocmVhZGNhY2hlYmxrX3QgdGhyZWFkY2FjaGVibGs7CitzdHJ1Y3QgdGhyZWFkY2FjaGVibGtfdAorewkvKiBLZWVwIGxlc3MgdGhhbiAxNiBieXRlcyBvbiAzMiBiaXQgc3lzdGVtcyBhbmQgMzIgYnl0ZXMgb24gNjQgYml0IHN5c3RlbXMgKi8KKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdW5zaWduZWQgaW50IG1hZ2ljOworI2VuZGlmCisJdW5zaWduZWQgaW50IGxhc3RVc2VkLCBzaXplOworCXRocmVhZGNhY2hlYmxrICpuZXh0LCAqcHJldjsKK307Cit0eXBlZGVmIHN0cnVjdCB0aHJlYWRjYWNoZV90Cit7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXVuc2lnbmVkIGludCBtYWdpYzE7CisjZW5kaWYKKwlpbnQgbXltc3BhY2U7CQkJCQkJLyogTGFzdCBtc3BhY2UgZW50cnkgdGhpcyB0aHJlYWQgdXNlZCAqLworCWxvbmcgdGhyZWFkaWQ7CisJdW5zaWduZWQgaW50IG1hbGxvY3MsIGZyZWVzLCBzdWNjZXNzZXM7CisJc2l6ZV90IGZyZWVJbkNhY2hlOwkJCQkJLyogSG93IG11Y2ggZnJlZSBzcGFjZSBpcyBzdG9yZWQgaW4gdGhpcyBjYWNoZSAqLworCXRocmVhZGNhY2hlYmxrICpiaW5zWyhUSFJFQURDQUNIRU1BWEJJTlMrMSkqMl07CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXVuc2lnbmVkIGludCBtYWdpYzI7CisjZW5kaWYKK30gdGhyZWFkY2FjaGU7CitzdHJ1Y3QgbmVkcG9vbF90Cit7CisJTUxPQ0tfVCBtdXRleDsKKwl2b2lkICp1c2VydmFsdWU7CisJaW50IHRocmVhZHM7CQkJCQkJLyogTWF4IGVudHJpZXMgaW4gbSB0byB1c2UgKi8KKwl0aHJlYWRjYWNoZSAqY2FjaGVzW1RIUkVBRENBQ0hFTUFYQ0FDSEVTXTsKKwlUTFNWQVIgbXljYWNoZTsJCQkJCQkvKiBUaHJlYWQgY2FjaGUgZm9yIHRoaXMgdGhyZWFkLiAwIGZvciB1bnNldCwgbmVnYXRpdmUgZm9yIHVzZSBtc3BhY2UtMSBkaXJlY3RseSwgb3RoZXJ3aXNlIGlzIGNhY2hlLTEgKi8KKwltc3RhdGUgbVtNQVhUSFJFQURTSU5QT09MKzFdOwkJLyogbXNwYWNlIGVudHJpZXMgZm9yIHRoaXMgcG9vbCAqLworfTsKK3N0YXRpYyBuZWRwb29sIHN5c3Bvb2w7CisKK3N0YXRpYyBGT1JDRUlOTElORSB1bnNpZ25lZCBpbnQgc2l6ZTJiaW5pZHgoc2l6ZV90IF9zaXplKSBUSFJPV1NQRUMKK3sJLyogOD0xMDAwCTE2PTEwMDAwCTIwPTEwMTAwCTI0PTExMDAwCTMyPTEwMDAwMAk0OD0xMTAwMDAJNDA5Nj0xMDAwMDAwMDAwMDAwICovCisJdW5zaWduZWQgaW50IHRvcGJpdCwgc2l6ZT0odW5zaWduZWQgaW50KShfc2l6ZT4+NCk7CisJLyogMTY9MQkJMjA9MQkyND0xCTMyPTEwCTQ4PTExCTY0PTEwMAk5Nj0xMTAJMTI4PTEwMDAJNDA5Nj0xMDAwMDAwMDAgKi8KKworI2lmIGRlZmluZWQoX19HTlVDX18pCisJdG9wYml0ID0gc2l6ZW9mKHNpemUpKl9fQ0hBUl9CSVRfXyAtIDEgLSBfX2J1aWx0aW5fY2x6KHNpemUpOworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTEzMDAKKwl7CisJICAgIHVuc2lnbmVkIGxvbmcgYnNyVG9wQml0OworCisJICAgIF9CaXRTY2FuUmV2ZXJzZSgmYnNyVG9wQml0LCBzaXplKTsKKworCSAgICB0b3BiaXQgPSBic3JUb3BCaXQ7CisJfQorI2Vsc2UKKyNpZiAwCisJdW5pb24geworCQl1bnNpZ25lZCBhc0ludFsyXTsKKwkJZG91YmxlIGFzRG91YmxlOworCX07CisJaW50IG47CisKKwlhc0RvdWJsZSA9IChkb3VibGUpc2l6ZSArIDAuNTsKKwl0b3BiaXQgPSAoYXNJbnRbIUZPWF9CSUdFTkRJQU5dID4+IDIwKSAtIDEwMjM7CisjZWxzZQorCXsKKwkJdW5zaWduZWQgaW50IHg9c2l6ZTsKKwkJeCA9IHggfCAoeCA+PiAxKTsKKwkJeCA9IHggfCAoeCA+PiAyKTsKKwkJeCA9IHggfCAoeCA+PiA0KTsKKwkJeCA9IHggfCAoeCA+PiA4KTsKKwkJeCA9IHggfCAoeCA+PjE2KTsKKwkJeCA9IH54OworCQl4ID0geCAtICgoeCA+PiAxKSAmIDB4NTU1NTU1NTUpOworCQl4ID0gKHggJiAweDMzMzMzMzMzKSArICgoeCA+PiAyKSAmIDB4MzMzMzMzMzMpOworCQl4ID0gKHggKyAoeCA+PiA0KSkgJiAweDBGMEYwRjBGOworCQl4ID0geCArICh4IDw8IDgpOworCQl4ID0geCArICh4IDw8IDE2KTsKKwkJdG9wYml0PTMxIC0gKHggPj4gMjQpOworCX0KKyNlbmRpZgorI2VuZGlmCisJcmV0dXJuIHRvcGJpdDsKK30KKworCisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworc3RhdGljIHZvaWQgdGNzYW5pdHljaGVjayh0aHJlYWRjYWNoZWJsayAqKnB0cikgVEhST1dTUEVDCit7CisJYXNzZXJ0KChwdHJbMF0gJiYgcHRyWzFdKSB8fCAoIXB0clswXSAmJiAhcHRyWzFdKSk7CisJaWYocHRyWzBdICYmIHB0clsxXSkKKwl7CisJCWFzc2VydChuZWRibGtzaXplKHB0clswXSk+PXNpemVvZih0aHJlYWRjYWNoZWJsaykpOworCQlhc3NlcnQobmVkYmxrc2l6ZShwdHJbMV0pPj1zaXplb2YodGhyZWFkY2FjaGVibGspKTsKKwkJYXNzZXJ0KCoodW5zaWduZWQgaW50ICopICJORUROIj09cHRyWzBdLT5tYWdpYyk7CisJCWFzc2VydCgqKHVuc2lnbmVkIGludCAqKSAiTkVETiI9PXB0clsxXS0+bWFnaWMpOworCQlhc3NlcnQoIXB0clswXS0+cHJldik7CisJCWFzc2VydCghcHRyWzFdLT5uZXh0KTsKKwkJaWYocHRyWzBdPT1wdHJbMV0pCisJCXsKKwkJCWFzc2VydCghcHRyWzBdLT5uZXh0KTsKKwkJCWFzc2VydCghcHRyWzFdLT5wcmV2KTsKKwkJfQorCX0KK30KK3N0YXRpYyB2b2lkIHRjZnVsbHNhbml0eWNoZWNrKHRocmVhZGNhY2hlICp0YykgVEhST1dTUEVDCit7CisJdGhyZWFkY2FjaGVibGsgKip0Y2JwdHI9dGMtPmJpbnM7CisJaW50IG47CisJZm9yKG49MDsgbjw9VEhSRUFEQ0FDSEVNQVhCSU5TOyBuKyssIHRjYnB0cis9MikKKwl7CisJCXRocmVhZGNhY2hlYmxrICpiLCAqb2I9MDsKKwkJdGNzYW5pdHljaGVjayh0Y2JwdHIpOworCQlmb3IoYj10Y2JwdHJbMF07IGI7IG9iPWIsIGI9Yi0+bmV4dCkKKwkJeworCQkJYXNzZXJ0KCoodW5zaWduZWQgaW50ICopICJORUROIj09Yi0+bWFnaWMpOworCQkJYXNzZXJ0KCFvYiB8fCBvYi0+bmV4dD09Yik7CisJCQlhc3NlcnQoIW9iIHx8IGItPnByZXY9PW9iKTsKKwkJfQorCX0KK30KKyNlbmRpZgorCitzdGF0aWMgTk9JTkxJTkUgdm9pZCBSZW1vdmVDYWNoZUVudHJpZXMobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCB1bnNpZ25lZCBpbnQgYWdlKSBUSFJPV1NQRUMKK3sKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCisJaWYodGMtPmZyZWVJbkNhY2hlKQorCXsKKwkJdGhyZWFkY2FjaGVibGsgKip0Y2JwdHI9dGMtPmJpbnM7CisJCWludCBuOworCQlmb3Iobj0wOyBuPD1USFJFQURDQUNIRU1BWEJJTlM7IG4rKywgdGNicHRyKz0yKQorCQl7CisJCQl0aHJlYWRjYWNoZWJsayAqKnRjYj10Y2JwdHIrMTsJCS8qIGNvbWUgZnJvbSBvbGRlc3QgZW5kIG9mIGxpc3QgKi8KKwkJCS8qdGNzYW5pdHljaGVjayh0Y2JwdHIpOyovCisJCQlmb3IoOyAqdGNiICYmIHRjLT5mcmVlcy0oKnRjYiktPmxhc3RVc2VkPj1hZ2U7ICkKKwkJCXsKKwkJCQl0aHJlYWRjYWNoZWJsayAqZj0qdGNiOworCQkJCXNpemVfdCBibGtzaXplPWYtPnNpemU7IC8qbmVkYmxrc2l6ZShmKTsqLworCQkJCWFzc2VydChibGtzaXplPD1uZWRibGtzaXplKGYpKTsKKwkJCQlhc3NlcnQoYmxrc2l6ZSk7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCQkJCWFzc2VydCgqKHVuc2lnbmVkIGludCAqKSAiTkVETiI9PSgqdGNiKS0+bWFnaWMpOworI2VuZGlmCisJCQkJKnRjYj0oKnRjYiktPnByZXY7CisJCQkJaWYoKnRjYikKKwkJCQkJKCp0Y2IpLT5uZXh0PTA7CisJCQkJZWxzZQorCQkJCQkqdGNicHRyPTA7CisJCQkJdGMtPmZyZWVJbkNhY2hlLT1ibGtzaXplOworCQkJCWFzc2VydCgobG9uZykgdGMtPmZyZWVJbkNhY2hlPj0wKTsKKwkJCQltc3BhY2VfZnJlZSgwLCBmKTsKKwkJCQkvKnRjc2FuaXR5Y2hlY2sodGNicHRyKTsqLworCQkJfQorCQl9CisJfQorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Y2Z1bGxzYW5pdHljaGVjayh0Yyk7CisjZW5kaWYKK30KK3N0YXRpYyB2b2lkIERlc3Ryb3lDYWNoZXMobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJaWYocC0+Y2FjaGVzKQorCXsKKwkJdGhyZWFkY2FjaGUgKnRjOworCQlpbnQgbjsKKwkJZm9yKG49MDsgbjxUSFJFQURDQUNIRU1BWENBQ0hFUzsgbisrKQorCQl7CisJCQlpZigodGM9cC0+Y2FjaGVzW25dKSkKKwkJCXsKKwkJCQl0Yy0+ZnJlZXMrKzsKKwkJCQlSZW1vdmVDYWNoZUVudHJpZXMocCwgdGMsIDApOworCQkJCWFzc2VydCghdGMtPmZyZWVJbkNhY2hlKTsKKwkJCQl0Yy0+bXltc3BhY2U9LTE7CisJCQkJdGMtPnRocmVhZGlkPTA7CisJCQkJbXNwYWNlX2ZyZWUoMCwgdGMpOworCQkJCXAtPmNhY2hlc1tuXT0wOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgTk9JTkxJTkUgdGhyZWFkY2FjaGUgKkFsbG9jQ2FjaGUobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJdGhyZWFkY2FjaGUgKnRjPTA7CisJaW50IG4sIGVuZDsKKwlBQ1FVSVJFX0xPQ0soJnAtPm11dGV4KTsKKwlmb3Iobj0wOyBuPFRIUkVBRENBQ0hFTUFYQ0FDSEVTICYmIHAtPmNhY2hlc1tuXTsgbisrKTsKKwlpZihUSFJFQURDQUNIRU1BWENBQ0hFUz09bikKKwl7CS8qIExpc3QgZXhoYXVzdGVkLCBzbyBkaXNhYmxlIGZvciB0aGlzIHRocmVhZCAqLworCQlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCXRjPXAtPmNhY2hlc1tuXT0odGhyZWFkY2FjaGUgKikgbXNwYWNlX2NhbGxvYyhwLT5tWzBdLCAxLCBzaXplb2YodGhyZWFkY2FjaGUpKTsKKwlpZighdGMpCisJeworCQlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwl0Yy0+bWFnaWMxPSoodW5zaWduZWQgaW50ICopIk5FRE1BTEMxIjsKKwl0Yy0+bWFnaWMyPSoodW5zaWduZWQgaW50ICopIk5FRE1BTEMyIjsKKyNlbmRpZgorCXRjLT50aHJlYWRpZD0obG9uZykoc2l6ZV90KUNVUlJFTlRfVEhSRUFEOworCWZvcihlbmQ9MDsgcC0+bVtlbmRdOyBlbmQrKyk7CisJdGMtPm15bXNwYWNlPXRjLT50aHJlYWRpZCAlIGVuZDsKKwlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwlpZihUTFNTRVQocC0+bXljYWNoZSwgKHZvaWQgKikoc2l6ZV90KShuKzEpKSkgYWJvcnQoKTsKKwlyZXR1cm4gdGM7Cit9CisKK3N0YXRpYyB2b2lkICp0aHJlYWRjYWNoZV9tYWxsb2MobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCBzaXplX3QgKnNpemUpIFRIUk9XU1BFQworeworCXZvaWQgKnJldD0wOworCXVuc2lnbmVkIGludCBiZXN0c2l6ZTsKKwl1bnNpZ25lZCBpbnQgaWR4PXNpemUyYmluaWR4KCpzaXplKTsKKwlzaXplX3QgYmxrc2l6ZT0wOworCXRocmVhZGNhY2hlYmxrICpibGssICoqYmluc3B0cjsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNmdWxsc2FuaXR5Y2hlY2sodGMpOworI2VuZGlmCisJLyogQ2FsY3VsYXRlIGJlc3QgZml0IGJpbiBzaXplICovCisJYmVzdHNpemU9MTw8KGlkeCs0KTsKKyNpZiAwCisJLyogRmluZXIgZ3JhaW5lZCBiaW4gZml0ICovCisJaWR4PDw9MTsKKwlpZigqc2l6ZT5iZXN0c2l6ZSkKKwl7CisJCWlkeCsrOworCQliZXN0c2l6ZSs9YmVzdHNpemU+PjE7CisJfQorCWlmKCpzaXplPmJlc3RzaXplKQorCXsKKwkJaWR4Kys7CisJCWJlc3RzaXplPTE8PCg0KyhpZHg+PjEpKTsKKwl9CisjZWxzZQorCWlmKCpzaXplPmJlc3RzaXplKQorCXsKKwkJaWR4Kys7CisJCWJlc3RzaXplPDw9MTsKKwl9CisjZW5kaWYKKwlhc3NlcnQoYmVzdHNpemU+PSpzaXplKTsKKwlpZigqc2l6ZTxiZXN0c2l6ZSkgKnNpemU9YmVzdHNpemU7CisJYXNzZXJ0KCpzaXplPD1USFJFQURDQUNIRU1BWCk7CisJYXNzZXJ0KGlkeDw9VEhSRUFEQ0FDSEVNQVhCSU5TKTsKKwliaW5zcHRyPSZ0Yy0+Ymluc1tpZHgqMl07CisJLyogVHJ5IHRvIG1hdGNoIGNsb3NlLCBidXQgbW92ZSB1cCBhIGJpbiBpZiBuZWNlc3NhcnkgKi8KKwlibGs9KmJpbnNwdHI7CisJaWYoIWJsayB8fCBibGstPnNpemU8KnNpemUpCisJewkvKiBCdW1wIGl0IHVwIGEgYmluICovCisJCWlmKGlkeDxUSFJFQURDQUNIRU1BWEJJTlMpCisJCXsKKwkJCWlkeCsrOworCQkJYmluc3B0cis9MjsKKwkJCWJsaz0qYmluc3B0cjsKKwkJfQorCX0KKwlpZihibGspCisJeworCQlibGtzaXplPWJsay0+c2l6ZTsgLypuZWRibGtzaXplKGJsayk7Ki8KKwkJYXNzZXJ0KG5lZGJsa3NpemUoYmxrKT49Ymxrc2l6ZSk7CisJCWFzc2VydChibGtzaXplPj0qc2l6ZSk7CisJCWlmKGJsay0+bmV4dCkKKwkJCWJsay0+bmV4dC0+cHJldj0wOworCQkqYmluc3B0cj1ibGstPm5leHQ7CisJCWlmKCEqYmluc3B0cikKKwkJCWJpbnNwdHJbMV09MDsKKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJCWJsay0+bWFnaWM9MDsKKyNlbmRpZgorCQlhc3NlcnQoYmluc3B0clswXSE9YmxrICYmIGJpbnNwdHJbMV0hPWJsayk7CisJCWFzc2VydChuZWRibGtzaXplKGJsayk+PXNpemVvZih0aHJlYWRjYWNoZWJsaykgJiYgbmVkYmxrc2l6ZShibGspPD1USFJFQURDQUNIRU1BWCtDSFVOS19PVkVSSEVBRCk7CisJCS8qcHJpbnRmKCJtYWxsb2M6ICVwLCAlcCwgJXAsICVsdVxuIiwgcCwgdGMsIGJsaywgKGxvbmcpIHNpemUpOyovCisJCXJldD0odm9pZCAqKSBibGs7CisJfQorCSsrdGMtPm1hbGxvY3M7CisJaWYocmV0KQorCXsKKwkJYXNzZXJ0KGJsa3NpemU+PSpzaXplKTsKKwkJKyt0Yy0+c3VjY2Vzc2VzOworCQl0Yy0+ZnJlZUluQ2FjaGUtPWJsa3NpemU7CisJCWFzc2VydCgobG9uZykgdGMtPmZyZWVJbkNhY2hlPj0wKTsKKwl9CisjaWYgZGVmaW5lZChERUJVRykgJiYgMAorCWlmKCEodGMtPm1hbGxvY3MgJiAweGZmZikpCisJeworCQlwcmludGYoIioqKiB0aHJlYWRjYWNoZT0ldSwgbWFsbG9jcz0ldSAoJWYpLCBmcmVlPSV1ICglZiksIGZyZWVJbkNhY2hlPSV1XG4iLCAodW5zaWduZWQgaW50KSB0Yy0+dGhyZWFkaWQsIHRjLT5tYWxsb2NzLAorCQkJKGZsb2F0KSB0Yy0+c3VjY2Vzc2VzL3RjLT5tYWxsb2NzLCB0Yy0+ZnJlZXMsIChmbG9hdCkgdGMtPnN1Y2Nlc3Nlcy90Yy0+ZnJlZXMsICh1bnNpZ25lZCBpbnQpIHRjLT5mcmVlSW5DYWNoZSk7CisJfQorI2VuZGlmCisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorCXJldHVybiByZXQ7Cit9CitzdGF0aWMgTk9JTkxJTkUgdm9pZCBSZWxlYXNlRnJlZUluQ2FjaGUobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCBpbnQgbXltc3BhY2UpIFRIUk9XU1BFQworeworCXVuc2lnbmVkIGludCBhZ2U9VEhSRUFEQ0FDSEVNQVhGUkVFU1BBQ0UvODE5MjsKKwkvKkFDUVVJUkVfTE9DSygmcC0+bVtteW1zcGFjZV0tPm11dGV4KTsqLworCXdoaWxlKGFnZSAmJiB0Yy0+ZnJlZUluQ2FjaGU+PVRIUkVBRENBQ0hFTUFYRlJFRVNQQUNFKQorCXsKKwkJUmVtb3ZlQ2FjaGVFbnRyaWVzKHAsIHRjLCBhZ2UpOworCQkvKnByaW50ZigiKioqIFJlbW92aW5nIGNhY2hlIGVudHJpZXMgb2xkZXIgdGhhbiAldSAoJXUpXG4iLCBhZ2UsICh1bnNpZ25lZCBpbnQpIHRjLT5mcmVlSW5DYWNoZSk7Ki8KKwkJYWdlPj49MTsKKwl9CisJLypSRUxFQVNFX0xPQ0soJnAtPm1bbXltc3BhY2VdLT5tdXRleCk7Ki8KK30KK3N0YXRpYyB2b2lkIHRocmVhZGNhY2hlX2ZyZWUobmVkcG9vbCAqcCwgdGhyZWFkY2FjaGUgKnRjLCBpbnQgbXltc3BhY2UsIHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworeworCXVuc2lnbmVkIGludCBiZXN0c2l6ZTsKKwl1bnNpZ25lZCBpbnQgaWR4PXNpemUyYmluaWR4KHNpemUpOworCXRocmVhZGNhY2hlYmxrICoqYmluc3B0ciwgKnRjaz0odGhyZWFkY2FjaGVibGsgKikgbWVtOworCWFzc2VydChzaXplPj1zaXplb2YodGhyZWFkY2FjaGVibGspICYmIHNpemU8PVRIUkVBRENBQ0hFTUFYK0NIVU5LX09WRVJIRUFEKTsKKyNpZmRlZiBERUJVRworCXsJLyogTWFrZSBzdXJlIHRoaXMgaXMgYSB2YWxpZCBtZW1vcnkgYmxvY2sgKi8KKwkgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7CisJICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOworCSAgICBpZiAoIW9rX21hZ2ljKGZtKSkgeworCSAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJfQorI2VuZGlmCisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorCS8qIENhbGN1bGF0ZSBiZXN0IGZpdCBiaW4gc2l6ZSAqLworCWJlc3RzaXplPTE8PChpZHgrNCk7CisjaWYgMAorCS8qIEZpbmVyIGdyYWluZWQgYmluIGZpdCAqLworCWlkeDw8PTE7CisJaWYoc2l6ZT5iZXN0c2l6ZSkKKwl7CisJCXVuc2lnbmVkIGludCBiaWdnZXJiZXN0c2l6ZT1iZXN0c2l6ZStiZXN0c2l6ZTw8MTsKKwkJaWYoc2l6ZT49YmlnZ2VyYmVzdHNpemUpCisJCXsKKwkJCWlkeCsrOworCQkJYmVzdHNpemU9YmlnZ2VyYmVzdHNpemU7CisJCX0KKwl9CisjZW5kaWYKKwlpZihiZXN0c2l6ZSE9c2l6ZSkJLyogZGxtYWxsb2MgY2FuIHJvdW5kIHVwLCBzbyB3ZSByb3VuZCBkb3duIHRvIHByZXNlcnZlIGluZGV4aW5nICovCisJCXNpemU9YmVzdHNpemU7CisJYmluc3B0cj0mdGMtPmJpbnNbaWR4KjJdOworCWFzc2VydChpZHg8PVRIUkVBRENBQ0hFTUFYQklOUyk7CisJaWYodGNrPT0qYmluc3B0cikKKwl7CisJCWZwcmludGYoc3RkZXJyLCAiQXR0ZW1wdCB0byBmcmVlIGFscmVhZHkgZnJlZWQgbWVtb3J5IGJsb2NrICVwIC0gYWJvcnRpbmchXG4iLCB0Y2spOworCQlhYm9ydCgpOworCX0KKyNpZmRlZiBGVUxMU0FOSVRZQ0hFQ0tTCisJdGNrLT5tYWdpYz0qKHVuc2lnbmVkIGludCAqKSAiTkVETiI7CisjZW5kaWYKKwl0Y2stPmxhc3RVc2VkPSsrdGMtPmZyZWVzOworCXRjay0+c2l6ZT0odW5zaWduZWQgaW50KSBzaXplOworCXRjay0+bmV4dD0qYmluc3B0cjsKKwl0Y2stPnByZXY9MDsKKwlpZih0Y2stPm5leHQpCisJCXRjay0+bmV4dC0+cHJldj10Y2s7CisJZWxzZQorCQliaW5zcHRyWzFdPXRjazsKKwlhc3NlcnQoISpiaW5zcHRyIHx8ICgqYmluc3B0ciktPnNpemU9PXRjay0+c2l6ZSk7CisJKmJpbnNwdHI9dGNrOworCWFzc2VydCh0Y2s9PXRjLT5iaW5zW2lkeCoyXSk7CisJYXNzZXJ0KHRjLT5iaW5zW2lkeCoyKzFdPT10Y2sgfHwgYmluc3B0clswXS0+bmV4dC0+cHJldj09dGNrKTsKKwkvKnByaW50ZigiZnJlZTogJXAsICVwLCAlcCwgJWx1XG4iLCBwLCB0YywgbWVtLCAobG9uZykgc2l6ZSk7Ki8KKwl0Yy0+ZnJlZUluQ2FjaGUrPXNpemU7CisjaWZkZWYgRlVMTFNBTklUWUNIRUNLUworCXRjZnVsbHNhbml0eWNoZWNrKHRjKTsKKyNlbmRpZgorI2lmIDEKKwlpZih0Yy0+ZnJlZUluQ2FjaGU+PVRIUkVBRENBQ0hFTUFYRlJFRVNQQUNFKQorCQlSZWxlYXNlRnJlZUluQ2FjaGUocCwgdGMsIG15bXNwYWNlKTsKKyNlbmRpZgorfQorCisKKworCitzdGF0aWMgTk9JTkxJTkUgaW50IEluaXRQb29sKG5lZHBvb2wgKnAsIHNpemVfdCBjYXBhY2l0eSwgaW50IHRocmVhZHMpIFRIUk9XU1BFQworewkvKiB0aHJlYWRzIGlzIC0xIGZvciBzeXN0ZW0gcG9vbCAqLworCWVuc3VyZV9pbml0aWFsaXphdGlvbigpOworCUFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisJaWYocC0+dGhyZWFkcykgZ290byBkb25lOworCWlmKElOSVRJQUxfTE9DSygmcC0+bXV0ZXgpKSBnb3RvIGVycjsKKwlpZihUTFNBTExPQygmcC0+bXljYWNoZSkpIGdvdG8gZXJyOworCWlmKCEocC0+bVswXT0obXN0YXRlKSBjcmVhdGVfbXNwYWNlKGNhcGFjaXR5LCAxKSkpIGdvdG8gZXJyOworCXAtPm1bMF0tPmV4dHA9cDsKKwlwLT50aHJlYWRzPSh0aHJlYWRzPDEgfHwgdGhyZWFkcz5NQVhUSFJFQURTSU5QT09MKSA/IE1BWFRIUkVBRFNJTlBPT0wgOiB0aHJlYWRzOworZG9uZToKKwlSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpOworCXJldHVybiAxOworZXJyOgorCWlmKHRocmVhZHM8MCkKKwkJYWJvcnQoKTsJCQkvKiBJZiB5b3UgY2FuJ3QgYWxsb2NhdGUgZm9yIHN5c3RlbSBwb29sLCB3ZSdyZSBzY3Jld2VkICovCisJRGVzdHJveUNhY2hlcyhwKTsKKwlpZihwLT5tWzBdKQorCXsKKwkJZGVzdHJveV9tc3BhY2UocC0+bVswXSk7CisJCXAtPm1bMF09MDsKKwl9CisJaWYocC0+bXljYWNoZSkKKwl7CisJCWlmKFRMU0ZSRUUocC0+bXljYWNoZSkpIGFib3J0KCk7CisJCXAtPm15Y2FjaGU9MDsKKwl9CisJUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBOT0lOTElORSBtc3RhdGUgRmluZE1TcGFjZShuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIGludCAqbGFzdFVzZWQsIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sJLyogR2V0cyBjYWxsZWQgd2hlbiB0aHJlYWQncyBsYXN0IHVzZWQgbXNwYWNlIGlzIGluIHVzZS4gVGhlIHN0cmF0ZWd5CisJaXMgdG8gcnVuIHRocm91Z2ggdGhlIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSBtc3BhY2VzIGxvb2tpbmcgZm9yIGFuCisJdW5sb2NrZWQgb25lIGFuZCBpZiB3ZSBmYWlsLCB3ZSBjcmVhdGUgYSBuZXcgb25lIHNvIGxvbmcgYXMgd2UgZG9uJ3QKKwlleGNlZWQgcC0+dGhyZWFkcyAqLworCWludCBuLCBlbmQ7CisJZm9yKG49ZW5kPSpsYXN0VXNlZCsxOyBwLT5tW25dOyBlbmQ9KytuKQorCXsKKwkJaWYoVFJZX0xPQ0soJnAtPm1bbl0tPm11dGV4KSkgZ290byBmb3VuZDsKKwl9CisJZm9yKG49MDsgbjwqbGFzdFVzZWQgJiYgcC0+bVtuXTsgbisrKQorCXsKKwkJaWYoVFJZX0xPQ0soJnAtPm1bbl0tPm11dGV4KSkgZ290byBmb3VuZDsKKwl9CisJaWYoZW5kPHAtPnRocmVhZHMpCisJeworCQltc3RhdGUgdGVtcDsKKwkJaWYoISh0ZW1wPShtc3RhdGUpIGNyZWF0ZV9tc3BhY2Uoc2l6ZSwgMSkpKQorCQkJZ290byBiYWRleGl0OworCQkvKiBOb3cgd2UncmUgcmVhZHkgdG8gbW9kaWZ5IHRoZSBsaXN0cywgd2UgbG9jayAqLworCQlBQ1FVSVJFX0xPQ0soJnAtPm11dGV4KTsKKwkJd2hpbGUocC0+bVtlbmRdICYmIGVuZDxwLT50aHJlYWRzKQorCQkJZW5kKys7CisJCWlmKGVuZD49cC0+dGhyZWFkcykKKwkJewkvKiBEcmF0LCBtdXN0IGRlc3Ryb3kgaXQgbm93ICovCisJCQlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwkJCWRlc3Ryb3lfbXNwYWNlKChtc3BhY2UpIHRlbXApOworCQkJZ290byBiYWRleGl0OworCQl9CisJCS8qIFdlIHJlYWxseSB3YW50IHRvIG1ha2Ugc3VyZSB0aGlzIGdvZXMgaW50byBtZW1vcnkgbm93IGJ1dCB3ZQorCQloYXZlIHRvIGJlIGNhcmVmdWwgb2YgYnJlYWtpbmcgYWxpYXNpbmcgcnVsZXMsIHNvIHdyaXRlIGl0IHR3aWNlICovCisJCXsKKwkJCXZvbGF0aWxlIHN0cnVjdCBtYWxsb2Nfc3RhdGUgKipfbT0odm9sYXRpbGUgc3RydWN0IG1hbGxvY19zdGF0ZSAqKikgJnAtPm1bZW5kXTsKKwkJCSpfbT0ocC0+bVtlbmRdPXRlbXApOworCQl9CisJCUFDUVVJUkVfTE9DSygmcC0+bVtlbmRdLT5tdXRleCk7CisJCS8qcHJpbnRmKCJDcmVhdGVkIG1zcGFjZSBpZHggJWRcbiIsIGVuZCk7Ki8KKwkJUkVMRUFTRV9MT0NLKCZwLT5tdXRleCk7CisJCW49ZW5kOworCQlnb3RvIGZvdW5kOworCX0KKwkvKiBMZXQgaXQgbG9jayBvbiB0aGUgbGFzdCBvbmUgaXQgdXNlZCAqLworYmFkZXhpdDoKKwlBQ1FVSVJFX0xPQ0soJnAtPm1bKmxhc3RVc2VkXS0+bXV0ZXgpOworCXJldHVybiBwLT5tWypsYXN0VXNlZF07Citmb3VuZDoKKwkqbGFzdFVzZWQ9bjsKKwlpZih0YykKKwkJdGMtPm15bXNwYWNlPW47CisJZWxzZQorCXsKKwkJaWYoVExTU0VUKHAtPm15Y2FjaGUsICh2b2lkICopKHNpemVfdCkoLShuKzEpKSkpIGFib3J0KCk7CisJfQorCXJldHVybiBwLT5tW25dOworfQorCituZWRwb29sICpuZWRjcmVhdGVwb29sKHNpemVfdCBjYXBhY2l0eSwgaW50IHRocmVhZHMpIFRIUk9XU1BFQworeworCW5lZHBvb2wgKnJldDsKKwlpZighKHJldD0obmVkcG9vbCAqKSBuZWRwY2FsbG9jKDAsIDEsIHNpemVvZihuZWRwb29sKSkpKSByZXR1cm4gMDsKKwlpZighSW5pdFBvb2wocmV0LCBjYXBhY2l0eSwgdGhyZWFkcykpCisJeworCQluZWRwZnJlZSgwLCByZXQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgbmVkZGVzdHJveXBvb2wobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJaW50IG47CisJQUNRVUlSRV9MT0NLKCZwLT5tdXRleCk7CisJRGVzdHJveUNhY2hlcyhwKTsKKwlmb3Iobj0wOyBwLT5tW25dOyBuKyspCisJeworCQlkZXN0cm95X21zcGFjZShwLT5tW25dKTsKKwkJcC0+bVtuXT0wOworCX0KKwlSRUxFQVNFX0xPQ0soJnAtPm11dGV4KTsKKwlpZihUTFNGUkVFKHAtPm15Y2FjaGUpKSBhYm9ydCgpOworCW5lZHBmcmVlKDAsIHApOworfQorCit2b2lkIG5lZHBzZXR2YWx1ZShuZWRwb29sICpwLCB2b2lkICp2KSBUSFJPV1NQRUMKK3sKKwlpZighcCkgeyBwPSZzeXNwb29sOyBpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOyB9CisJcC0+dXNlcnZhbHVlPXY7Cit9Cit2b2lkICpuZWRnZXR2YWx1ZShuZWRwb29sICoqcCwgdm9pZCAqbWVtKSBUSFJPV1NQRUMKK3sKKwluZWRwb29sICpucD0wOworCW1jaHVua3B0ciBtY3A9bWVtMmNodW5rKG1lbSk7CisJbXN0YXRlIGZtOworCWlmKCEoaXNfYWxpZ25lZChjaHVuazJtZW0obWNwKSkpICYmIG1jcC0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgcmV0dXJuIDA7CisJaWYoIWNpbnVzZShtY3ApKSByZXR1cm4gMDsKKwlpZighbmV4dF9waW51c2UobWNwKSkgcmV0dXJuIDA7CisJaWYoIWlzX21tYXBwZWQobWNwKSAmJiAhcGludXNlKG1jcCkpCisJeworCQlpZihuZXh0X2NodW5rKHByZXZfY2h1bmsobWNwKSkhPW1jcCkgcmV0dXJuIDA7CisJfQorCWZtPWdldF9tc3RhdGVfZm9yKG1jcCk7CisJaWYoIW9rX21hZ2ljKGZtKSkgcmV0dXJuIDA7CisJaWYoIW9rX2FkZHJlc3MoZm0sIG1jcCkpIHJldHVybiAwOworCWlmKCFmbS0+ZXh0cCkgcmV0dXJuIDA7CisJbnA9KG5lZHBvb2wgKikgZm0tPmV4dHA7CisJaWYocCkgKnA9bnA7CisJcmV0dXJuIG5wLT51c2VydmFsdWU7Cit9CisKK3ZvaWQgbmVkZGlzYWJsZXRocmVhZGNhY2hlKG5lZHBvb2wgKnApIFRIUk9XU1BFQworeworCWludCBteWNhY2hlOworCWlmKCFwKQorCXsKKwkJcD0mc3lzcG9vbDsKKwkJaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsKKwl9CisJbXljYWNoZT0oaW50KShzaXplX3QpIFRMU0dFVChwLT5teWNhY2hlKTsKKwlpZighbXljYWNoZSkKKwl7CS8qIFNldCB0byBtc3BhY2UgMCAqLworCQlpZihUTFNTRVQocC0+bXljYWNoZSwgKHZvaWQgKiktMSkpIGFib3J0KCk7CisJfQorCWVsc2UgaWYobXljYWNoZT4wKQorCXsJLyogU2V0IHRvIGxhc3QgdXNlZCBtc3BhY2UgKi8KKwkJdGhyZWFkY2FjaGUgKnRjPXAtPmNhY2hlc1tteWNhY2hlLTFdOworI2lmIGRlZmluZWQoREVCVUcpCisJCXByaW50ZigiVGhyZWFkY2FjaGUgdXRpbGlzYXRpb246ICVsZiUlIGluIGNhY2hlIHdpdGggJWxmJSUgbG9zdCB0byBvdGhlciB0aHJlYWRzXG4iLAorCQkJMTAwLjAqdGMtPnN1Y2Nlc3Nlcy90Yy0+bWFsbG9jcywgMTAwLjAqKChkb3VibGUpIHRjLT5tYWxsb2NzLXRjLT5mcmVlcykvdGMtPm1hbGxvY3MpOworI2VuZGlmCisJCWlmKFRMU1NFVChwLT5teWNhY2hlLCAodm9pZCAqKShzaXplX3QpKC10Yy0+bXltc3BhY2UpKSkgYWJvcnQoKTsKKwkJdGMtPmZyZWVzKys7CisJCVJlbW92ZUNhY2hlRW50cmllcyhwLCB0YywgMCk7CisJCWFzc2VydCghdGMtPmZyZWVJbkNhY2hlKTsKKwkJdGMtPm15bXNwYWNlPS0xOworCQl0Yy0+dGhyZWFkaWQ9MDsKKwkJbXNwYWNlX2ZyZWUoMCwgcC0+Y2FjaGVzW215Y2FjaGUtMV0pOworCQlwLT5jYWNoZXNbbXljYWNoZS0xXT0wOworCX0KK30KKworI2RlZmluZSBHRVRNU1BBQ0UobSxwLHRjLG1zLHMsYWN0aW9uKSAgICAgICAgICAgXAorICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG1zdGF0ZSBtID0gR2V0TVNwYWNlKChwKSwodGMpLChtcyksKHMpKTsgICAgXAorICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJFTEVBU0VfTE9DSygmbS0+bXV0ZXgpOyAgICAgICAgICAgICAgICAgICAgXAorICB9IHdoaWxlICgwKQorCitzdGF0aWMgRk9SQ0VJTkxJTkUgbXN0YXRlIEdldE1TcGFjZShuZWRwb29sICpwLCB0aHJlYWRjYWNoZSAqdGMsIGludCBteW1zcGFjZSwgc2l6ZV90IHNpemUpIFRIUk9XU1BFQworewkvKiBSZXR1cm5zIGEgbG9ja2VkIGFuZCByZWFkeSBmb3IgdXNlIG1zcGFjZSAqLworCW1zdGF0ZSBtPXAtPm1bbXltc3BhY2VdOworCWFzc2VydChtKTsKKwlpZighVFJZX0xPQ0soJnAtPm1bbXltc3BhY2VdLT5tdXRleCkpIG09RmluZE1TcGFjZShwLCB0YywgJm15bXNwYWNlLCBzaXplKTtcCisJLyphc3NlcnQoSVNfTE9DS0VEKCZwLT5tW215bXNwYWNlXS0+bXV0ZXgpKTsqLworCXJldHVybiBtOworfQorc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQgR2V0VGhyZWFkQ2FjaGUobmVkcG9vbCAqKnAsIHRocmVhZGNhY2hlICoqdGMsIGludCAqbXltc3BhY2UsIHNpemVfdCAqc2l6ZSkgVEhST1dTUEVDCit7CisJaW50IG15Y2FjaGU7CisJaWYoc2l6ZSAmJiAqc2l6ZTxzaXplb2YodGhyZWFkY2FjaGVibGspKSAqc2l6ZT1zaXplb2YodGhyZWFkY2FjaGVibGspOworCWlmKCEqcCkKKwl7CisJCSpwPSZzeXNwb29sOworCQlpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOworCX0KKwlteWNhY2hlPShpbnQpKHNpemVfdCkgVExTR0VUKCgqcCktPm15Y2FjaGUpOworCWlmKG15Y2FjaGU+MCkKKwl7CisJCSp0Yz0oKnApLT5jYWNoZXNbbXljYWNoZS0xXTsKKwkJKm15bXNwYWNlPSgqdGMpLT5teW1zcGFjZTsKKwl9CisJZWxzZSBpZighbXljYWNoZSkKKwl7CisJCSp0Yz1BbGxvY0NhY2hlKCpwKTsKKwkJaWYoISp0YykKKwkJewkvKiBEaXNhYmxlICovCisJCQlpZihUTFNTRVQoKCpwKS0+bXljYWNoZSwgKHZvaWQgKiktMSkpIGFib3J0KCk7CisJCQkqbXltc3BhY2U9MDsKKwkJfQorCQllbHNlCisJCQkqbXltc3BhY2U9KCp0YyktPm15bXNwYWNlOworCX0KKwllbHNlCisJeworCQkqdGM9MDsKKwkJKm15bXNwYWNlPS1teWNhY2hlLTE7CisJfQorCWFzc2VydCgqbXltc3BhY2U+PTApOworCWFzc2VydCgobG9uZykoc2l6ZV90KUNVUlJFTlRfVEhSRUFEPT0oKnRjKS0+dGhyZWFkaWQpOworI2lmZGVmIEZVTExTQU5JVFlDSEVDS1MKKwlpZigqdGMpCisJeworCQlpZigqKHVuc2lnbmVkIGludCAqKSJORURNQUxDMSIhPSgqdGMpLT5tYWdpYzEgfHwgKih1bnNpZ25lZCBpbnQgKikiTkVETUFMQzIiIT0oKnRjKS0+bWFnaWMyKQorCQl7CisJCQlhYm9ydCgpOworCQl9CisJfQorI2VuZGlmCit9CisKK3ZvaWQgKiBuZWRwbWFsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBzaXplKSBUSFJPV1NQRUMKK3sKKwl2b2lkICpyZXQ9MDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworCUdldFRocmVhZENhY2hlKCZwLCAmdGMsICZteW1zcGFjZSwgJnNpemUpOworI2lmIFRIUkVBRENBQ0hFTUFYCisJaWYodGMgJiYgc2l6ZTw9VEhSRUFEQ0FDSEVNQVgpCisJewkvKiBVc2UgdGhlIHRocmVhZCBjYWNoZSAqLworCQlyZXQ9dGhyZWFkY2FjaGVfbWFsbG9jKHAsIHRjLCAmc2l6ZSk7CisJfQorI2VuZGlmCisJaWYoIXJldCkKKwl7CS8qIFVzZSB0aGlzIHRocmVhZCdzIG1zcGFjZSAqLworCUdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIHNpemUsCisJCSAgcmV0PW1zcGFjZV9tYWxsb2MobSwgc2l6ZSkpOworCX0KKwlyZXR1cm4gcmV0OworfQordm9pZCAqIG5lZHBjYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IG5vLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CisJc2l6ZV90IHJzaXplPXNpemUqbm87CisJdm9pZCAqcmV0PTA7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsICZyc2l6ZSk7CisjaWYgVEhSRUFEQ0FDSEVNQVgKKwlpZih0YyAmJiByc2l6ZTw9VEhSRUFEQ0FDSEVNQVgpCisJewkvKiBVc2UgdGhlIHRocmVhZCBjYWNoZSAqLworCQlpZigocmV0PXRocmVhZGNhY2hlX21hbGxvYyhwLCB0YywgJnJzaXplKSkpCisJCQltZW1zZXQocmV0LCAwLCByc2l6ZSk7CisJfQorI2VuZGlmCisJaWYoIXJldCkKKwl7CS8qIFVzZSB0aGlzIHRocmVhZCdzIG1zcGFjZSAqLworCUdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIHJzaXplLAorCQkgIHJldD1tc3BhY2VfY2FsbG9jKG0sIDEsIHJzaXplKSk7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkICogbmVkcHJlYWxsb2MobmVkcG9vbCAqcCwgdm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDCit7CisJdm9pZCAqcmV0PTA7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlpZighbWVtKSByZXR1cm4gbmVkcG1hbGxvYyhwLCBzaXplKTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsICZzaXplKTsKKyNpZiBUSFJFQURDQUNIRU1BWAorCWlmKHRjICYmIHNpemUgJiYgc2l6ZTw9VEhSRUFEQ0FDSEVNQVgpCisJewkvKiBVc2UgdGhlIHRocmVhZCBjYWNoZSAqLworCQlzaXplX3QgbWVtc2l6ZT1uZWRibGtzaXplKG1lbSk7CisJCWFzc2VydChtZW1zaXplKTsKKwkJaWYoKHJldD10aHJlYWRjYWNoZV9tYWxsb2MocCwgdGMsICZzaXplKSkpCisJCXsKKwkJCW1lbWNweShyZXQsIG1lbSwgbWVtc2l6ZTxzaXplID8gbWVtc2l6ZSA6IHNpemUpOworCQkJaWYobWVtc2l6ZTw9VEhSRUFEQ0FDSEVNQVgpCisJCQkJdGhyZWFkY2FjaGVfZnJlZShwLCB0YywgbXltc3BhY2UsIG1lbSwgbWVtc2l6ZSk7CisJCQllbHNlCisJCQkJbXNwYWNlX2ZyZWUoMCwgbWVtKTsKKwkJfQorCX0KKyNlbmRpZgorCWlmKCFyZXQpCisJewkvKiBSZWFsbG9jcyBhbHdheXMgaGFwcGVuIGluIHRoZSBtc3BhY2UgdGhleSBoYXBwZW5lZCBpbiwgc28gc2tpcAorCQlsb2NraW5nIHRoZSBwcmVmZXJyZWQgbXNwYWNlIGZvciB0aGlzIHRocmVhZCAqLworCQlyZXQ9bXNwYWNlX3JlYWxsb2MoMCwgbWVtLCBzaXplKTsKKwl9CisJcmV0dXJuIHJldDsKK30KK3ZvaWQgICBuZWRwZnJlZShuZWRwb29sICpwLCB2b2lkICptZW0pIFRIUk9XU1BFQworewkvKiBGcmVlcyBhbHdheXMgaGFwcGVuIGluIHRoZSBtc3BhY2UgdGhleSBoYXBwZW5lZCBpbiwgc28gc2tpcAorCWxvY2tpbmcgdGhlIHByZWZlcnJlZCBtc3BhY2UgZm9yIHRoaXMgdGhyZWFkICovCisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlzaXplX3QgbWVtc2l6ZTsKKwlhc3NlcnQobWVtKTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsIDApOworI2lmIFRIUkVBRENBQ0hFTUFYCisJbWVtc2l6ZT1uZWRibGtzaXplKG1lbSk7CisJYXNzZXJ0KG1lbXNpemUpOworCWlmKG1lbSAmJiB0YyAmJiBtZW1zaXplPD0oVEhSRUFEQ0FDSEVNQVgrQ0hVTktfT1ZFUkhFQUQpKQorCQl0aHJlYWRjYWNoZV9mcmVlKHAsIHRjLCBteW1zcGFjZSwgbWVtLCBtZW1zaXplKTsKKwllbHNlCisjZW5kaWYKKwkJbXNwYWNlX2ZyZWUoMCwgbWVtKTsKK30KK3ZvaWQgKiBuZWRwbWVtYWxpZ24obmVkcG9vbCAqcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSBUSFJPV1NQRUMKK3sKKwl2b2lkICpyZXQ7CisJdGhyZWFkY2FjaGUgKnRjOworCWludCBteW1zcGFjZTsKKwlHZXRUaHJlYWRDYWNoZSgmcCwgJnRjLCAmbXltc3BhY2UsICZieXRlcyk7CisJewkvKiBVc2UgdGhpcyB0aHJlYWQncyBtc3BhY2UgKi8KKwlHRVRNU1BBQ0UobSwgcCwgdGMsIG15bXNwYWNlLCBieXRlcywKKwkJICByZXQ9bXNwYWNlX21lbWFsaWduKG0sIGFsaWdubWVudCwgYnl0ZXMpKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbyBuZWRwbWFsbGluZm8obmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJaW50IG47CisJc3RydWN0IG1hbGxpbmZvIHJldD17MH07CisJaWYoIXApIHsgcD0mc3lzcG9vbDsgaWYoIXN5c3Bvb2wudGhyZWFkcykgSW5pdFBvb2woJnN5c3Bvb2wsIDAsIC0xKTsgfQorCWZvcihuPTA7IHAtPm1bbl07IG4rKykKKwl7CisJCXN0cnVjdCBtYWxsaW5mbyB0PW1zcGFjZV9tYWxsaW5mbyhwLT5tW25dKTsKKwkJcmV0LmFyZW5hKz10LmFyZW5hOworCQlyZXQub3JkYmxrcys9dC5vcmRibGtzOworCQlyZXQuaGJsa2hkKz10LmhibGtoZDsKKwkJcmV0LnVzbWJsa3MrPXQudXNtYmxrczsKKwkJcmV0LnVvcmRibGtzKz10LnVvcmRibGtzOworCQlyZXQuZm9yZGJsa3MrPXQuZm9yZGJsa3M7CisJCXJldC5rZWVwY29zdCs9dC5rZWVwY29zdDsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgoraW50ICAgIG5lZHBtYWxsb3B0KG5lZHBvb2wgKnAsIGludCBwYXJubywgaW50IHZhbHVlKSBUSFJPV1NQRUMKK3sKKwlyZXR1cm4gbXNwYWNlX21hbGxvcHQocGFybm8sIHZhbHVlKTsKK30KK2ludCAgICBuZWRwbWFsbG9jX3RyaW0obmVkcG9vbCAqcCwgc2l6ZV90IHBhZCkgVEhST1dTUEVDCit7CisJaW50IG4sIHJldD0wOworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlmb3Iobj0wOyBwLT5tW25dOyBuKyspCisJeworCQlyZXQrPW1zcGFjZV90cmltKHAtPm1bbl0sIHBhZCk7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkICAgbmVkcG1hbGxvY19zdGF0cyhuZWRwb29sICpwKSBUSFJPV1NQRUMKK3sKKwlpbnQgbjsKKwlpZighcCkgeyBwPSZzeXNwb29sOyBpZighc3lzcG9vbC50aHJlYWRzKSBJbml0UG9vbCgmc3lzcG9vbCwgMCwgLTEpOyB9CisJZm9yKG49MDsgcC0+bVtuXTsgbisrKQorCXsKKwkJbXNwYWNlX21hbGxvY19zdGF0cyhwLT5tW25dKTsKKwl9Cit9CitzaXplX3QgbmVkcG1hbGxvY19mb290cHJpbnQobmVkcG9vbCAqcCkgVEhST1dTUEVDCit7CisJc2l6ZV90IHJldD0wOworCWludCBuOworCWlmKCFwKSB7IHA9JnN5c3Bvb2w7IGlmKCFzeXNwb29sLnRocmVhZHMpIEluaXRQb29sKCZzeXNwb29sLCAwLCAtMSk7IH0KKwlmb3Iobj0wOyBwLT5tW25dOyBuKyspCisJeworCQlyZXQrPW1zcGFjZV9mb290cHJpbnQocC0+bVtuXSk7CisJfQorCXJldHVybiByZXQ7Cit9Cit2b2lkICoqbmVkcGluZGVwZW5kZW50X2NhbGxvYyhuZWRwb29sICpwLCBzaXplX3QgZWxlbXNubywgc2l6ZV90IGVsZW1zaXplLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUMKK3sKKwl2b2lkICoqcmV0OworCXRocmVhZGNhY2hlICp0YzsKKwlpbnQgbXltc3BhY2U7CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAmZWxlbXNpemUpOworICAgIEdFVE1TUEFDRShtLCBwLCB0YywgbXltc3BhY2UsIGVsZW1zbm8qZWxlbXNpemUsCisJICAgICAgcmV0PW1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobSwgZWxlbXNubywgZWxlbXNpemUsIGNodW5rcykpOworCXJldHVybiByZXQ7Cit9Cit2b2lkICoqbmVkcGluZGVwZW5kZW50X2NvbWFsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBlbGVtcywgc2l6ZV90ICpzaXplcywgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDCit7CisJdm9pZCAqKnJldDsKKwl0aHJlYWRjYWNoZSAqdGM7CisJaW50IG15bXNwYWNlOworICAgIHNpemVfdCBpLCAqYWRqdXN0ZWRzaXplcz0oc2l6ZV90ICopIGFsbG9jYShlbGVtcypzaXplb2Yoc2l6ZV90KSk7CisgICAgaWYoIWFkanVzdGVkc2l6ZXMpIHJldHVybiAwOworICAgIGZvcihpPTA7IGk8ZWxlbXM7IGkrKykKKwlhZGp1c3RlZHNpemVzW2ldPXNpemVzW2ldPHNpemVvZih0aHJlYWRjYWNoZWJsaykgPyBzaXplb2YodGhyZWFkY2FjaGVibGspIDogc2l6ZXNbaV07CisJR2V0VGhyZWFkQ2FjaGUoJnAsICZ0YywgJm15bXNwYWNlLCAwKTsKKwlHRVRNU1BBQ0UobSwgcCwgdGMsIG15bXNwYWNlLCAwLAorCSAgICAgIHJldD1tc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobSwgZWxlbXMsIGFkanVzdGVkc2l6ZXMsIGNodW5rcykpOworCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBPVkVSUklERV9TVFJEVVAKKy8qCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIHB1cmVseSB0aGVyZSB0byBvdmVycmlkZSB0aGUgbGliYyB2ZXJzaW9uLCB0bworICogYXZvaWQgYSBjcmFzaCBkdWUgdG8gYWxsb2NhdGlvbiBhbmQgZnJlZSBvbiBkaWZmZXJlbnQgJ2hlYXBzJy4KKyAqLworY2hhciAqc3RyZHVwKGNvbnN0IGNoYXIgKnMxKQoreworCWNoYXIgKnMyID0gMDsKKwlpZiAoczEpIHsKKwkJc2l6ZV90IGxlbiA9IHN0cmxlbihzMSkgKyAxOworCQlzMiA9IG1hbGxvYyhsZW4pOworCQltZW1jcHkoczIsIHMxLCBsZW4pOworCX0KKwlyZXR1cm4gczI7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC9uZWRtYWxsb2MvbmVkbWFsbG9jLmggYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjBlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvbmVkbWFsbG9jL25lZG1hbGxvYy5oCkBAIC0wLDAgKzEsMTgwIEBACisvKiBuZWRhbGxvYywgYW4gYWx0ZXJuYXRpdmUgbWFsbG9jIGltcGxlbWVudGF0aW9uIGZvciBtdWx0aXBsZSB0aHJlYWRzIHdpdGhvdXQKK2xvY2sgY29udGVudGlvbiBiYXNlZCBvbiBkbG1hbGxvYyB2Mi44LjMuIChDKSAyMDA1IE5pYWxsIERvdWdsYXMKKworQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisqLworCisjaWZuZGVmIE5FRE1BTExPQ19ICisjZGVmaW5lIE5FRE1BTExPQ19ICisKKworLyogU2VlIG1hbGxvYy5jLmggZm9yIHdoYXQgZWFjaCBmdW5jdGlvbiBkb2VzLgorCitSRVBMQUNFX1NZU1RFTV9BTExPQ0FUT1IgY2F1c2VzIG5lZGFsbG9jJ3MgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBtYWxsb2MsCitmcmVlIGV0Yy4gaW5zdGVhZCBvZiBuZWRtYWxsb2MsIG5lZGZyZWUgZXRjLiBZb3UgbWF5IG9yIG1heSBub3Qgd2FudCB0aGlzLgorCitOT19ORURfTkFNRVNQQUNFIHByZXZlbnRzIHRoZSBmdW5jdGlvbnMgZnJvbSBiZWluZyBkZWZpbmVkIGluIHRoZSBuZWRhbGxvYworbmFtZXNwYWNlIHdoZW4gaW4gQysrICh1c2VzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIGluc3RlYWQpLgorCitFWFRTUEVDIGNhbiBiZSBkZWZpbmVkIHRvIGJlIF9fZGVjbHNwZWMoZGxsZXhwb3J0KSBvcgorX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpIG9yIHdoYXRldmVyIHlvdSBsaWtlLiBJdCBkZWZhdWx0cwordG8gZXh0ZXJuLgorCitVU0VfTE9DS1MgY2FuIGJlIDIgaWYgeW91IHdhbnQgdG8gZGVmaW5lIHlvdXIgb3duIE1MT0NLX1QsIElOSVRJQUxfTE9DSywKK0FDUVVJUkVfTE9DSywgUkVMRUFTRV9MT0NLLCBUUllfTE9DSywgSVNfTE9DS0VEIGFuZCBOVUxMX0xPQ0tfSU5JVElBTElaRVIuCisKKyovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4gICAvKiBmb3Igc2l6ZV90ICovCisKKyNpZm5kZWYgRVhUU1BFQworICNkZWZpbmUgRVhUU1BFQyBleHRlcm4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVI+PTE0MDAKKyAjZGVmaW5lIE1BTExPQ0FUVFIgX19kZWNsc3BlYyhyZXN0cmljdCkKKyNlbmRpZgorI2lmZGVmIF9fR05VQ19fCisgI2RlZmluZSBNQUxMT0NBVFRSIF9fYXR0cmlidXRlX18gKChtYWxsb2MpKQorI2VuZGlmCisjaWZuZGVmIE1BTExPQ0FUVFIKKyAjZGVmaW5lIE1BTExPQ0FUVFIKKyNlbmRpZgorCisjaWZkZWYgUkVQTEFDRV9TWVNURU1fQUxMT0NBVE9SCisgI2RlZmluZSBuZWRtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyAjZGVmaW5lIG5lZGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworICNkZWZpbmUgbmVkcmVhbGxvYyAgICAgICAgICAgICAgcmVhbGxvYworICNkZWZpbmUgbmVkZnJlZSAgICAgICAgICAgICAgICAgZnJlZQorICNkZWZpbmUgbmVkbWVtYWxpZ24gICAgICAgICAgICAgbWVtYWxpZ24KKyAjZGVmaW5lIG5lZG1hbGxpbmZvICAgICAgICAgICAgIG1hbGxpbmZvCisgI2RlZmluZSBuZWRtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisgI2RlZmluZSBuZWRtYWxsb2NfdHJpbSAgICAgICAgICBtYWxsb2NfdHJpbQorICNkZWZpbmUgbmVkbWFsbG9jX3N0YXRzICAgICAgICAgbWFsbG9jX3N0YXRzCisgI2RlZmluZSBuZWRtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50CisgI2RlZmluZSBuZWRpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyAjZGVmaW5lIG5lZGluZGVwZW5kZW50X2NvbWFsbG9jIGluZGVwZW5kZW50X2NvbWFsbG9jCisgI2lmZGVmIF9NU0NfVkVSCisgICNkZWZpbmUgbmVkYmxrc2l6ZSAgICAgICAgICAgICAgX21zaXplCisgI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBOT19NQUxMSU5GTworI2RlZmluZSBOT19NQUxMSU5GTyAwCisjZW5kaWYKKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorICNpZiAhZGVmaW5lZChOT19ORURfTkFNRVNQQUNFKQorbmFtZXNwYWNlIG5lZGFsbG9jIHsKKyAjZWxzZQorZXh0ZXJuICJDIiB7CisgI2VuZGlmCisgI2RlZmluZSBUSFJPV1NQRUMgdGhyb3coKQorI2Vsc2UKKyAjZGVmaW5lIFRIUk9XU1BFQworI2VuZGlmCisKKy8qIFRoZXNlIGFyZSB0aGUgZ2xvYmFsIGZ1bmN0aW9ucyAqLworCisvKiBHZXRzIHRoZSB1c2FibGUgc2l6ZSBvZiBhbiBhbGxvY2F0ZWQgYmxvY2suIE5vdGUgdGhpcyB3aWxsIGFsd2F5cyBiZSBiaWdnZXIgdGhhbiB3aGF0IHdhcworYXNrZWQgZm9yIGR1ZSB0byByb3VuZGluZyBldGMuCisqLworRVhUU1BFQyBzaXplX3QgbmVkYmxrc2l6ZSh2b2lkICptZW0pIFRIUk9XU1BFQzsKKworRVhUU1BFQyB2b2lkIG5lZHNldHZhbHVlKHZvaWQgKnYpIFRIUk9XU1BFQzsKKworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRtYWxsb2Moc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkY2FsbG9jKHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcmVhbGxvYyh2b2lkICptZW0sIHNpemVfdCBzaXplKSBUSFJPV1NQRUM7CitFWFRTUEVDIHZvaWQgICBuZWRmcmVlKHZvaWQgKm1lbSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQzsKKyNpZiAhTk9fTUFMTElORk8KK0VYVFNQRUMgc3RydWN0IG1hbGxpbmZvIG5lZG1hbGxpbmZvKHZvaWQpIFRIUk9XU1BFQzsKKyNlbmRpZgorRVhUU1BFQyBpbnQgICAgbmVkbWFsbG9wdChpbnQgcGFybm8sIGludCB2YWx1ZSkgVEhST1dTUEVDOworRVhUU1BFQyBpbnQgICAgbmVkbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkbWFsbG9jX3N0YXRzKHZvaWQpIFRIUk9XU1BFQzsKK0VYVFNQRUMgc2l6ZV90IG5lZG1hbGxvY19mb290cHJpbnQodm9pZCkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QgZWxlbXMsIHNpemVfdCAqc2l6ZXMsIHZvaWQgKipjaHVua3MpIFRIUk9XU1BFQzsKKworLyogVGhlc2UgYXJlIHRoZSBwb29sIGZ1bmN0aW9ucyAqLworc3RydWN0IG5lZHBvb2xfdDsKK3R5cGVkZWYgc3RydWN0IG5lZHBvb2xfdCBuZWRwb29sOworCisvKiBDcmVhdGVzIGEgbWVtb3J5IHBvb2wgZm9yIHVzZSB3aXRoIHRoZSBuZWRwKiBmdW5jdGlvbnMgYmVsb3cuCitDYXBhY2l0eSBpcyBob3cgbXVjaCB0byBhbGxvY2F0ZSBpbW1lZGlhdGVseSAoaWYgeW91IGtub3cgeW91J2xsIGJlIGFsbG9jYXRpbmcgYSBsb3QKK29mIG1lbW9yeSB2ZXJ5IHNvb24pIHdoaWNoIHlvdSBjYW4gbGVhdmUgYXQgemVyby4gVGhyZWFkcyBzcGVjaWZpZXMgaG93IG1hbnkgdGhyZWFkcword2lsbCAqbm9ybWFsbHkqIGJlIGFjY2Vzc2luZyB0aGUgcG9vbCBjb25jdXJyZW50bHkuIFNldHRpbmcgdGhpcyB0byB6ZXJvIG1lYW5zIGl0CitleHRlbmRzIG9uIGRlbWFuZCwgYnV0IGJlIGNhcmVmdWwgb2YgdGhpcyBhcyBpdCBjYW4gcmFwaWRseSBjb25zdW1lIHN5c3RlbSByZXNvdXJjZXMKK3doZXJlIGJ1cnN0cyBvZiBjb25jdXJyZW50IHRocmVhZHMgdXNlIGEgcG9vbCBhdCBvbmNlLgorKi8KK0VYVFNQRUMgTUFMTE9DQVRUUiBuZWRwb29sICpuZWRjcmVhdGVwb29sKHNpemVfdCBjYXBhY2l0eSwgaW50IHRocmVhZHMpIFRIUk9XU1BFQzsKKworLyogRGVzdHJveXMgYSBtZW1vcnkgcG9vbCBwcmV2aW91c2x5IGNyZWF0ZWQgYnkgbmVkY3JlYXRlcG9vbCgpLgorKi8KK0VYVFNQRUMgdm9pZCBuZWRkZXN0cm95cG9vbChuZWRwb29sICpwKSBUSFJPV1NQRUM7CisKKy8qIFNldHMgYSB2YWx1ZSB0byBiZSBhc3NvY2lhdGVkIHdpdGggYSBwb29sLiBZb3UgY2FuIHJldHJpZXZlIHRoaXMgdmFsdWUgYnkgcGFzc2luZworYW55IG1lbW9yeSBibG9jayBhbGxvY2F0ZWQgZnJvbSB0aGF0IHBvb2wuCisqLworRVhUU1BFQyB2b2lkIG5lZHBzZXR2YWx1ZShuZWRwb29sICpwLCB2b2lkICp2KSBUSFJPV1NQRUM7CisvKiBHZXRzIGEgcHJldmlvdXNseSBzZXQgdmFsdWUgdXNpbmcgbmVkcHNldHZhbHVlKCkgb3IgemVybyBpZiBtZW1vcnkgaXMgdW5rbm93bi4KK09wdGlvbmFsbHkgY2FuIGFsc28gcmV0cmlldmUgcG9vbC4KKyovCitFWFRTUEVDIHZvaWQgKm5lZGdldHZhbHVlKG5lZHBvb2wgKipwLCB2b2lkICptZW0pIFRIUk9XU1BFQzsKKworLyogRGlzYWJsZXMgdGhlIHRocmVhZCBjYWNoZSBmb3IgdGhlIGNhbGxpbmcgdGhyZWFkLCByZXR1cm5pbmcgYW55IGV4aXN0aW5nIGNhY2hlCitkYXRhIHRvIHRoZSBjZW50cmFsIHBvb2wuCisqLworRVhUU1BFQyB2b2lkIG5lZGRpc2FibGV0aHJlYWRjYWNoZShuZWRwb29sICpwKSBUSFJPV1NQRUM7CisKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcG1hbGxvYyhuZWRwb29sICpwLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKiBuZWRwY2FsbG9jKG5lZHBvb2wgKnAsIHNpemVfdCBubywgc2l6ZV90IHNpemUpIFRIUk9XU1BFQzsKK0VYVFNQRUMgTUFMTE9DQVRUUiB2b2lkICogbmVkcHJlYWxsb2MobmVkcG9vbCAqcCwgdm9pZCAqbWVtLCBzaXplX3Qgc2l6ZSkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkcGZyZWUobmVkcG9vbCAqcCwgdm9pZCAqbWVtKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqIG5lZHBtZW1hbGlnbihuZWRwb29sICpwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIFRIUk9XU1BFQzsKKyNpZiAhTk9fTUFMTElORk8KK0VYVFNQRUMgc3RydWN0IG1hbGxpbmZvIG5lZHBtYWxsaW5mbyhuZWRwb29sICpwKSBUSFJPV1NQRUM7CisjZW5kaWYKK0VYVFNQRUMgaW50ICAgIG5lZHBtYWxsb3B0KG5lZHBvb2wgKnAsIGludCBwYXJubywgaW50IHZhbHVlKSBUSFJPV1NQRUM7CitFWFRTUEVDIGludCAgICBuZWRwbWFsbG9jX3RyaW0obmVkcG9vbCAqcCwgc2l6ZV90IHBhZCkgVEhST1dTUEVDOworRVhUU1BFQyB2b2lkICAgbmVkcG1hbGxvY19zdGF0cyhuZWRwb29sICpwKSBUSFJPV1NQRUM7CitFWFRTUEVDIHNpemVfdCBuZWRwbWFsbG9jX2Zvb3RwcmludChuZWRwb29sICpwKSBUSFJPV1NQRUM7CitFWFRTUEVDIE1BTExPQ0FUVFIgdm9pZCAqKm5lZHBpbmRlcGVuZGVudF9jYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zbm8sIHNpemVfdCBlbGVtc2l6ZSwgdm9pZCAqKmNodW5rcykgVEhST1dTUEVDOworRVhUU1BFQyBNQUxMT0NBVFRSIHZvaWQgKipuZWRwaW5kZXBlbmRlbnRfY29tYWxsb2MobmVkcG9vbCAqcCwgc2l6ZV90IGVsZW1zLCBzaXplX3QgKnNpemVzLCB2b2lkICoqY2h1bmtzKSBUSFJPV1NQRUM7CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorfQorI2VuZGlmCisKKyN1bmRlZiBNQUxMT0NBVFRSCisjdW5kZWYgRVhUU1BFQworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC9vYnN0YWNrLmMgYi9jb21wYXQvb2JzdGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzZjY2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvb2JzdGFjay5jCkBAIC0wLDAgKzEsNDEzIEBACisvKiBvYnN0YWNrLmMgLSBzdWJyb3V0aW5lcyB1c2VkIGltcGxpY2l0bHkgYnkgb2JqZWN0IHN0YWNrIG1hY3JvcworICAgQ29weXJpZ2h0IChDKSAxOTg4LCAxOTg5LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk2LCAxOTk3LCAxOTk4LAorICAgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgPGdldHRleHQuaD4KKyNpbmNsdWRlICJvYnN0YWNrLmgiCisKKy8qIE5PVEUgQkVGT1JFIE1PRElGWUlORyBUSElTIEZJTEU6IFRoaXMgdmVyc2lvbiBudW1iZXIgbXVzdCBiZQorICAgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgY2FsbGVycyBjb21waWxlZCB1c2luZyBhbiBvbGQgb2JzdGFjay5oIGNhbiBubworICAgbG9uZ2VyIHByb3Blcmx5IGNhbGwgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG9ic3RhY2suYy4gICovCisjZGVmaW5lIE9CU1RBQ0tfSU5URVJGQUNFX1ZFUlNJT04gMQorCisvKiBDb21tZW50IG91dCBhbGwgdGhpcyBjb2RlIGlmIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgTGlicmFyeSwgYW5kIGFyZSBub3QKKyAgIGFjdHVhbGx5IGNvbXBpbGluZyB0aGUgbGlicmFyeSBpdHNlbGYsIGFuZCB0aGUgaW5zdGFsbGVkIGxpYnJhcnkKKyAgIHN1cHBvcnRzIHRoZSBzYW1lIGxpYnJhcnkgaW50ZXJmYWNlIHdlIGRvLiAgVGhpcyBjb2RlIGlzIHBhcnQgb2YgdGhlIEdOVQorICAgQyBMaWJyYXJ5LCBidXQgYWxzbyBpbmNsdWRlZCBpbiBtYW55IG90aGVyIEdOVSBkaXN0cmlidXRpb25zLiAgQ29tcGlsaW5nCisgICBhbmQgbGlua2luZyBpbiB0aGlzIGNvZGUgaXMgYSB3YXN0ZSB3aGVuIHVzaW5nIHRoZSBHTlUgQyBsaWJyYXJ5CisgICAoZXNwZWNpYWxseSBpZiBpdCBpcyBhIHNoYXJlZCBsaWJyYXJ5KS4gIFJhdGhlciB0aGFuIGhhdmluZyBldmVyeSBHTlUKKyAgIHByb2dyYW0gdW5kZXJzdGFuZCBgY29uZmlndXJlIC0td2l0aC1nbnUtbGliYycgYW5kIG9taXQgdGhlIG9iamVjdAorICAgZmlsZXMsIGl0IGlzIHNpbXBsZXIgdG8ganVzdCBkbyB0aGlzIGluIHRoZSBzb3VyY2UgZm9yIGVhY2ggc3VjaCBmaWxlLiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CQkvKiBSYW5kb20gdGhpbmcgdG8gZ2V0IF9fR05VX0xJQlJBUllfXy4gICovCisjaWYgIWRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBfX0dOVV9MSUJSQVJZX18gJiYgX19HTlVfTElCUkFSWV9fID4gMQorIyBpbmNsdWRlIDxnbnUtdmVyc2lvbnMuaD4KKyMgaWYgX0dOVV9PQlNUQUNLX0lOVEVSRkFDRV9WRVJTSU9OID09IE9CU1RBQ0tfSU5URVJGQUNFX1ZFUlNJT04KKyMgIGRlZmluZSBFTElERV9DT0RFCisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZuZGVmIEVMSURFX0NPREUKKworCisjIGlmIEhBVkVfSU5UVFlQRVNfSAorIyAgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9TVERJTlRfSCB8fCBkZWZpbmVkIF9MSUJDCisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZW5kaWYKKworLyogRGV0ZXJtaW5lIGRlZmF1bHQgYWxpZ25tZW50LiAgKi8KK3VuaW9uIGZvb3JvdW5kCit7CisgIHVpbnRtYXhfdCBpOworICBsb25nIGRvdWJsZSBkOworICB2b2lkICpwOworfTsKK3N0cnVjdCBmb29hbGlnbgoreworICBjaGFyIGM7CisgIHVuaW9uIGZvb3JvdW5kIHU7Cit9OworLyogSWYgbWFsbG9jIHdlcmUgcmVhbGx5IHNtYXJ0LCBpdCB3b3VsZCByb3VuZCBhZGRyZXNzZXMgdG8gREVGQVVMVF9BTElHTk1FTlQuCisgICBCdXQgaW4gZmFjdCBpdCBtaWdodCBiZSBsZXNzIHNtYXJ0IGFuZCByb3VuZCBhZGRyZXNzZXMgdG8gYXMgbXVjaCBhcworICAgREVGQVVMVF9ST1VORElORy4gIFNvIHdlIHByZXBhcmUgZm9yIGl0IHRvIGRvIHRoYXQuICAqLworZW51bQorICB7CisgICAgREVGQVVMVF9BTElHTk1FTlQgPSBvZmZzZXRvZiAoc3RydWN0IGZvb2FsaWduLCB1KSwKKyAgICBERUZBVUxUX1JPVU5ESU5HID0gc2l6ZW9mICh1bmlvbiBmb29yb3VuZCkKKyAgfTsKKworLyogV2hlbiB3ZSBjb3B5IGEgbG9uZyBibG9jayBvZiBkYXRhLCB0aGlzIGlzIHRoZSB1bml0IHRvIGRvIGl0IHdpdGguCisgICBPbiBzb21lIG1hY2hpbmVzLCBjb3B5aW5nIHN1Y2Nlc3NpdmUgaW50cyBkb2VzIG5vdCB3b3JrOworICAgaW4gc3VjaCBhIGNhc2UsIHJlZGVmaW5lIENPUFlJTkdfVU5JVCB0byBgbG9uZycgKGlmIHRoYXQgd29ya3MpCisgICBvciBgY2hhcicgYXMgYSBsYXN0IHJlc29ydC4gICovCisjIGlmbmRlZiBDT1BZSU5HX1VOSVQKKyMgIGRlZmluZSBDT1BZSU5HX1VOSVQgaW50CisjIGVuZGlmCisKKworLyogVGhlIGZ1bmN0aW9ucyBhbGxvY2F0aW5nIG1vcmUgcm9vbSBieSBjYWxsaW5nIGBvYnN0YWNrX2NodW5rX2FsbG9jJworICAganVtcCB0byB0aGUgaGFuZGxlciBwb2ludGVkIHRvIGJ5IGBvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyJy4KKyAgIFRoaXMgY2FuIGJlIHNldCB0byBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbiB3aGljaCBzaG91bGQgZWl0aGVyCisgICBhYm9ydCBncmFjZWZ1bGx5IG9yIHVzZSBsb25nanVtcCAtIGJ1dCBzaG91bGRuJ3QgcmV0dXJuLiAgVGhpcworICAgdmFyaWFibGUgYnkgZGVmYXVsdCBwb2ludHMgdG8gdGhlIGludGVybmFsIGZ1bmN0aW9uCisgICBgcHJpbnRfYW5kX2Fib3J0Jy4gICovCitzdGF0aWMgdm9pZCBwcmludF9hbmRfYWJvcnQgKHZvaWQpOwordm9pZCAoKm9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIpICh2b2lkKSA9IHByaW50X2FuZF9hYm9ydDsKKworIyBpZmRlZiBfTElCQworIyAgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfM180KQorLyogQSBsb29vbmcgdGltZSBhZ28gKGJlZm9yZSAxOTk0LCBhbnl3YXk7IHdlJ3JlIG5vdCBzdXJlKSB0aGlzIGdsb2JhbCB2YXJpYWJsZQorICAgd2FzIHVzZWQgYnkgbm9uLUdOVS1DIG1hY3JvcyB0byBhdm9pZCBtdWx0aXBsZSBldmFsdWF0aW9uLiAgVGhlIEdOVSBDCisgICBsaWJyYXJ5IHN0aWxsIGV4cG9ydHMgaXQgYmVjYXVzZSBzb21lYm9keSBtaWdodCB1c2UgaXQuICAqLworc3RydWN0IG9ic3RhY2sgKl9vYnN0YWNrX2NvbXBhdDsKK2NvbXBhdF9zeW1ib2wgKGxpYmMsIF9vYnN0YWNrX2NvbXBhdCwgX29ic3RhY2ssIEdMSUJDXzJfMCk7CisjICBlbmRpZgorIyBlbmRpZgorCisvKiBEZWZpbmUgYSBtYWNybyB0aGF0IGVpdGhlciBjYWxscyBmdW5jdGlvbnMgd2l0aCB0aGUgdHJhZGl0aW9uYWwgbWFsbG9jL2ZyZWUKKyAgIGNhbGxpbmcgaW50ZXJmYWNlLCBvciBjYWxscyBmdW5jdGlvbnMgd2l0aCB0aGUgbW1hbGxvYy9tZnJlZSBpbnRlcmZhY2UKKyAgICh0aGF0IGFkZHMgYW4gZXh0cmEgZmlyc3QgYXJndW1lbnQpLCBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdXNlX2V4dHJhX2FyZy4KKyAgIEZvciBmcmVlLCBkbyBub3QgdXNlID86LCBzaW5jZSBzb21lIGNvbXBpbGVycywgbGlrZSB0aGUgTUlQUyBjb21waWxlcnMsCisgICBkbyBub3QgYWxsb3cgKGV4cHIpID8gdm9pZCA6IHZvaWQuICAqLworCisjIGRlZmluZSBDQUxMX0NIVU5LRlVOKGgsIHNpemUpIFwKKyAgKCgoaCkgLT4gdXNlX2V4dHJhX2FyZykgXAorICAgPyAoKihoKS0+Y2h1bmtmdW4pICgoaCktPmV4dHJhX2FyZywgKHNpemUpKSBcCisgICA6ICgqKHN0cnVjdCBfb2JzdGFja19jaHVuayAqKCopIChsb25nKSkgKGgpLT5jaHVua2Z1bikgKChzaXplKSkpCisKKyMgZGVmaW5lIENBTExfRlJFRUZVTihoLCBvbGRfY2h1bmspIFwKKyAgZG8geyBcCisgICAgaWYgKChoKSAtPiB1c2VfZXh0cmFfYXJnKSBcCisgICAgICAoKihoKS0+ZnJlZWZ1bikgKChoKS0+ZXh0cmFfYXJnLCAob2xkX2NodW5rKSk7IFwKKyAgICBlbHNlIFwKKyAgICAgICgqKHZvaWQgKCopICh2b2lkICopKSAoaCktPmZyZWVmdW4pICgob2xkX2NodW5rKSk7IFwKKyAgfSB3aGlsZSAoMCkKKworDAorLyogSW5pdGlhbGl6ZSBhbiBvYnN0YWNrIEggZm9yIHVzZS4gIFNwZWNpZnkgY2h1bmsgc2l6ZSBTSVpFICgwIG1lYW5zIGRlZmF1bHQpLgorICAgT2JqZWN0cyBzdGFydCBvbiBtdWx0aXBsZXMgb2YgQUxJR05NRU5UICgwIG1lYW5zIHVzZSBkZWZhdWx0KS4KKyAgIENIVU5LRlVOIGlzIHRoZSBmdW5jdGlvbiB0byB1c2UgdG8gYWxsb2NhdGUgY2h1bmtzLAorICAgYW5kIEZSRUVGVU4gdGhlIGZ1bmN0aW9uIHRvIGZyZWUgdGhlbS4KKworICAgUmV0dXJuIG5vbnplcm8gaWYgc3VjY2Vzc2Z1bCwgY2FsbHMgb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlciBpZgorICAgYWxsb2NhdGlvbiBmYWlscy4gICovCisKK2ludAorX29ic3RhY2tfYmVnaW4gKHN0cnVjdCBvYnN0YWNrICpoLAorCQlpbnQgc2l6ZSwgaW50IGFsaWdubWVudCwKKwkJdm9pZCAqKCpjaHVua2Z1bikgKGxvbmcpLAorCQl2b2lkICgqZnJlZWZ1bikgKHZvaWQgKikpCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqY2h1bms7IC8qIHBvaW50cyB0byBuZXcgY2h1bmsgKi8KKworICBpZiAoYWxpZ25tZW50ID09IDApCisgICAgYWxpZ25tZW50ID0gREVGQVVMVF9BTElHTk1FTlQ7CisgIGlmIChzaXplID09IDApCisgICAgLyogRGVmYXVsdCBzaXplIGlzIHdoYXQgR05VIG1hbGxvYyBjYW4gZml0IGluIGEgNDA5Ni1ieXRlIGJsb2NrLiAgKi8KKyAgICB7CisgICAgICAvKiAxMiBpcyBzaXplb2YgKG1oZWFkKSBhbmQgNCBpcyBFWFRSQSBmcm9tIEdOVSBtYWxsb2MuCisJIFVzZSB0aGUgdmFsdWVzIGZvciByYW5nZSBjaGVja2luZywgYmVjYXVzZSBpZiByYW5nZSBjaGVja2luZyBpcyBvZmYsCisJIHRoZSBleHRyYSBieXRlcyB3b24ndCBiZSBtaXNzZWQgdGVycmlibHksIGJ1dCBpZiByYW5nZSBjaGVja2luZyBpcyBvbgorCSBhbmQgd2UgdXNlZCBhIGxhcmdlciByZXF1ZXN0LCBhIHdob2xlIGV4dHJhIDQwOTYgYnl0ZXMgd291bGQgYmUKKwkgYWxsb2NhdGVkLgorCisJIFRoZXNlIG51bWJlciBhcmUgaXJyZWxldmFudCB0byB0aGUgbmV3IEdOVSBtYWxsb2MuICBJIHN1c3BlY3QgaXQgaXMKKwkgbGVzcyBzZW5zaXRpdmUgdG8gdGhlIHNpemUgb2YgdGhlIHJlcXVlc3QuICAqLworICAgICAgaW50IGV4dHJhID0gKCgoKDEyICsgREVGQVVMVF9ST1VORElORyAtIDEpICYgfihERUZBVUxUX1JPVU5ESU5HIC0gMSkpCisJCSAgICArIDQgKyBERUZBVUxUX1JPVU5ESU5HIC0gMSkKKwkJICAgJiB+KERFRkFVTFRfUk9VTkRJTkcgLSAxKSk7CisgICAgICBzaXplID0gNDA5NiAtIGV4dHJhOworICAgIH0KKworICBoLT5jaHVua2Z1biA9IChzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKiAoKikodm9pZCAqLCBsb25nKSkgY2h1bmtmdW47CisgIGgtPmZyZWVmdW4gPSAodm9pZCAoKikgKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopKSBmcmVlZnVuOworICBoLT5jaHVua19zaXplID0gc2l6ZTsKKyAgaC0+YWxpZ25tZW50X21hc2sgPSBhbGlnbm1lbnQgLSAxOworICBoLT51c2VfZXh0cmFfYXJnID0gMDsKKworICBjaHVuayA9IGgtPmNodW5rID0gQ0FMTF9DSFVOS0ZVTiAoaCwgaCAtPiBjaHVua19zaXplKTsKKyAgaWYgKCFjaHVuaykKKyAgICAoKm9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIpICgpOworICBoLT5uZXh0X2ZyZWUgPSBoLT5vYmplY3RfYmFzZSA9IF9fUFRSX0FMSUdOICgoY2hhciAqKSBjaHVuaywgY2h1bmstPmNvbnRlbnRzLAorCQkJCQkgICAgICAgYWxpZ25tZW50IC0gMSk7CisgIGgtPmNodW5rX2xpbWl0ID0gY2h1bmstPmxpbWl0CisgICAgPSAoY2hhciAqKSBjaHVuayArIGgtPmNodW5rX3NpemU7CisgIGNodW5rLT5wcmV2ID0gTlVMTDsKKyAgLyogVGhlIGluaXRpYWwgY2h1bmsgbm93IGNvbnRhaW5zIG5vIGVtcHR5IG9iamVjdC4gICovCisgIGgtPm1heWJlX2VtcHR5X29iamVjdCA9IDA7CisgIGgtPmFsbG9jX2ZhaWxlZCA9IDA7CisgIHJldHVybiAxOworfQorCitpbnQKK19vYnN0YWNrX2JlZ2luXzEgKHN0cnVjdCBvYnN0YWNrICpoLCBpbnQgc2l6ZSwgaW50IGFsaWdubWVudCwKKwkJICB2b2lkICooKmNodW5rZnVuKSAodm9pZCAqLCBsb25nKSwKKwkJICB2b2lkICgqZnJlZWZ1bikgKHZvaWQgKiwgdm9pZCAqKSwKKwkJICB2b2lkICphcmcpCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqY2h1bms7IC8qIHBvaW50cyB0byBuZXcgY2h1bmsgKi8KKworICBpZiAoYWxpZ25tZW50ID09IDApCisgICAgYWxpZ25tZW50ID0gREVGQVVMVF9BTElHTk1FTlQ7CisgIGlmIChzaXplID09IDApCisgICAgLyogRGVmYXVsdCBzaXplIGlzIHdoYXQgR05VIG1hbGxvYyBjYW4gZml0IGluIGEgNDA5Ni1ieXRlIGJsb2NrLiAgKi8KKyAgICB7CisgICAgICAvKiAxMiBpcyBzaXplb2YgKG1oZWFkKSBhbmQgNCBpcyBFWFRSQSBmcm9tIEdOVSBtYWxsb2MuCisJIFVzZSB0aGUgdmFsdWVzIGZvciByYW5nZSBjaGVja2luZywgYmVjYXVzZSBpZiByYW5nZSBjaGVja2luZyBpcyBvZmYsCisJIHRoZSBleHRyYSBieXRlcyB3b24ndCBiZSBtaXNzZWQgdGVycmlibHksIGJ1dCBpZiByYW5nZSBjaGVja2luZyBpcyBvbgorCSBhbmQgd2UgdXNlZCBhIGxhcmdlciByZXF1ZXN0LCBhIHdob2xlIGV4dHJhIDQwOTYgYnl0ZXMgd291bGQgYmUKKwkgYWxsb2NhdGVkLgorCisJIFRoZXNlIG51bWJlciBhcmUgaXJyZWxldmFudCB0byB0aGUgbmV3IEdOVSBtYWxsb2MuICBJIHN1c3BlY3QgaXQgaXMKKwkgbGVzcyBzZW5zaXRpdmUgdG8gdGhlIHNpemUgb2YgdGhlIHJlcXVlc3QuICAqLworICAgICAgaW50IGV4dHJhID0gKCgoKDEyICsgREVGQVVMVF9ST1VORElORyAtIDEpICYgfihERUZBVUxUX1JPVU5ESU5HIC0gMSkpCisJCSAgICArIDQgKyBERUZBVUxUX1JPVU5ESU5HIC0gMSkKKwkJICAgJiB+KERFRkFVTFRfUk9VTkRJTkcgLSAxKSk7CisgICAgICBzaXplID0gNDA5NiAtIGV4dHJhOworICAgIH0KKworICBoLT5jaHVua2Z1biA9IChzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKiAoKikodm9pZCAqLGxvbmcpKSBjaHVua2Z1bjsKKyAgaC0+ZnJlZWZ1biA9ICh2b2lkICgqKSAodm9pZCAqLCBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKikpIGZyZWVmdW47CisgIGgtPmNodW5rX3NpemUgPSBzaXplOworICBoLT5hbGlnbm1lbnRfbWFzayA9IGFsaWdubWVudCAtIDE7CisgIGgtPmV4dHJhX2FyZyA9IGFyZzsKKyAgaC0+dXNlX2V4dHJhX2FyZyA9IDE7CisKKyAgY2h1bmsgPSBoLT5jaHVuayA9IENBTExfQ0hVTktGVU4gKGgsIGggLT4gY2h1bmtfc2l6ZSk7CisgIGlmICghY2h1bmspCisgICAgKCpvYnN0YWNrX2FsbG9jX2ZhaWxlZF9oYW5kbGVyKSAoKTsKKyAgaC0+bmV4dF9mcmVlID0gaC0+b2JqZWN0X2Jhc2UgPSBfX1BUUl9BTElHTiAoKGNoYXIgKikgY2h1bmssIGNodW5rLT5jb250ZW50cywKKwkJCQkJICAgICAgIGFsaWdubWVudCAtIDEpOworICBoLT5jaHVua19saW1pdCA9IGNodW5rLT5saW1pdAorICAgID0gKGNoYXIgKikgY2h1bmsgKyBoLT5jaHVua19zaXplOworICBjaHVuay0+cHJldiA9IE5VTEw7CisgIC8qIFRoZSBpbml0aWFsIGNodW5rIG5vdyBjb250YWlucyBubyBlbXB0eSBvYmplY3QuICAqLworICBoLT5tYXliZV9lbXB0eV9vYmplY3QgPSAwOworICBoLT5hbGxvY19mYWlsZWQgPSAwOworICByZXR1cm4gMTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcgY3VycmVudCBjaHVuayBmb3IgdGhlIG9ic3RhY2sgKkgKKyAgIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgTEVOR1RIIGJ5dGVzIG5lZWQgdG8gYmUgYWRkZWQKKyAgIHRvIHRoZSBjdXJyZW50IG9iamVjdCwgb3IgYSBuZXcgb2JqZWN0IG9mIGxlbmd0aCBMRU5HVEggYWxsb2NhdGVkLgorICAgQ29waWVzIGFueSBwYXJ0aWFsIG9iamVjdCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9sZCBjaHVuaworICAgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IG9uZS4gICovCisKK3ZvaWQKK19vYnN0YWNrX25ld2NodW5rIChzdHJ1Y3Qgb2JzdGFjayAqaCwgaW50IGxlbmd0aCkKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpvbGRfY2h1bmsgPSBoLT5jaHVuazsKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpuZXdfY2h1bms7CisgIHJlZ2lzdGVyIGxvbmcJbmV3X3NpemU7CisgIHJlZ2lzdGVyIGxvbmcgb2JqX3NpemUgPSBoLT5uZXh0X2ZyZWUgLSBoLT5vYmplY3RfYmFzZTsKKyAgcmVnaXN0ZXIgbG9uZyBpOworICBsb25nIGFscmVhZHk7CisgIGNoYXIgKm9iamVjdF9iYXNlOworCisgIC8qIENvbXB1dGUgc2l6ZSBmb3IgbmV3IGNodW5rLiAgKi8KKyAgbmV3X3NpemUgPSAob2JqX3NpemUgKyBsZW5ndGgpICsgKG9ial9zaXplID4+IDMpICsgaC0+YWxpZ25tZW50X21hc2sgKyAxMDA7CisgIGlmIChuZXdfc2l6ZSA8IGgtPmNodW5rX3NpemUpCisgICAgbmV3X3NpemUgPSBoLT5jaHVua19zaXplOworCisgIC8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBuZXcgY2h1bmsuICAqLworICBuZXdfY2h1bmsgPSBDQUxMX0NIVU5LRlVOIChoLCBuZXdfc2l6ZSk7CisgIGlmICghbmV3X2NodW5rKQorICAgICgqb2JzdGFja19hbGxvY19mYWlsZWRfaGFuZGxlcikgKCk7CisgIGgtPmNodW5rID0gbmV3X2NodW5rOworICBuZXdfY2h1bmstPnByZXYgPSBvbGRfY2h1bms7CisgIG5ld19jaHVuay0+bGltaXQgPSBoLT5jaHVua19saW1pdCA9IChjaGFyICopIG5ld19jaHVuayArIG5ld19zaXplOworCisgIC8qIENvbXB1dGUgYW4gYWxpZ25lZCBvYmplY3RfYmFzZSBpbiB0aGUgbmV3IGNodW5rICovCisgIG9iamVjdF9iYXNlID0KKyAgICBfX1BUUl9BTElHTiAoKGNoYXIgKikgbmV3X2NodW5rLCBuZXdfY2h1bmstPmNvbnRlbnRzLCBoLT5hbGlnbm1lbnRfbWFzayk7CisKKyAgLyogTW92ZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IHRvIHRoZSBuZXcgY2h1bmsuCisgICAgIFdvcmQgYXQgYSB0aW1lIGlzIGZhc3QgYW5kIGlzIHNhZmUgaWYgdGhlIG9iamVjdAorICAgICBpcyBzdWZmaWNpZW50bHkgYWxpZ25lZC4gICovCisgIGlmIChoLT5hbGlnbm1lbnRfbWFzayArIDEgPj0gREVGQVVMVF9BTElHTk1FTlQpCisgICAgeworICAgICAgZm9yIChpID0gb2JqX3NpemUgLyBzaXplb2YgKENPUFlJTkdfVU5JVCkgLSAxOworCSAgIGkgPj0gMDsgaS0tKQorCSgoQ09QWUlOR19VTklUICopb2JqZWN0X2Jhc2UpW2ldCisJICA9ICgoQ09QWUlOR19VTklUICopaC0+b2JqZWN0X2Jhc2UpW2ldOworICAgICAgLyogV2UgdXNlZCB0byBjb3B5IHRoZSBvZGQgZmV3IHJlbWFpbmluZyBieXRlcyBhcyBvbmUgZXh0cmEgQ09QWUlOR19VTklULAorCSBidXQgdGhhdCBjYW4gY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5IG9uIGEgbWFjaGluZQorCSB3aGljaCBkb2VzIG5vdCBkbyBzdHJpY3QgYWxpZ25tZW50IGZvciBDT1BZSU5HX1VOSVRTLiAgKi8KKyAgICAgIGFscmVhZHkgPSBvYmpfc2l6ZSAvIHNpemVvZiAoQ09QWUlOR19VTklUKSAqIHNpemVvZiAoQ09QWUlOR19VTklUKTsKKyAgICB9CisgIGVsc2UKKyAgICBhbHJlYWR5ID0gMDsKKyAgLyogQ29weSByZW1haW5pbmcgYnl0ZXMgb25lIGJ5IG9uZS4gICovCisgIGZvciAoaSA9IGFscmVhZHk7IGkgPCBvYmpfc2l6ZTsgaSsrKQorICAgIG9iamVjdF9iYXNlW2ldID0gaC0+b2JqZWN0X2Jhc2VbaV07CisKKyAgLyogSWYgdGhlIG9iamVjdCBqdXN0IGNvcGllZCB3YXMgdGhlIG9ubHkgZGF0YSBpbiBPTERfQ0hVTkssCisgICAgIGZyZWUgdGhhdCBjaHVuayBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGNoYWluLgorICAgICBCdXQgbm90IGlmIHRoYXQgY2h1bmsgbWlnaHQgY29udGFpbiBhbiBlbXB0eSBvYmplY3QuICAqLworICBpZiAoISBoLT5tYXliZV9lbXB0eV9vYmplY3QKKyAgICAgICYmIChoLT5vYmplY3RfYmFzZQorCSAgPT0gX19QVFJfQUxJR04gKChjaGFyICopIG9sZF9jaHVuaywgb2xkX2NodW5rLT5jb250ZW50cywKKwkJCSAgaC0+YWxpZ25tZW50X21hc2spKSkKKyAgICB7CisgICAgICBuZXdfY2h1bmstPnByZXYgPSBvbGRfY2h1bmstPnByZXY7CisgICAgICBDQUxMX0ZSRUVGVU4gKGgsIG9sZF9jaHVuayk7CisgICAgfQorCisgIGgtPm9iamVjdF9iYXNlID0gb2JqZWN0X2Jhc2U7CisgIGgtPm5leHRfZnJlZSA9IGgtPm9iamVjdF9iYXNlICsgb2JqX3NpemU7CisgIC8qIFRoZSBuZXcgY2h1bmsgY2VydGFpbmx5IGNvbnRhaW5zIG5vIGVtcHR5IG9iamVjdCB5ZXQuICAqLworICBoLT5tYXliZV9lbXB0eV9vYmplY3QgPSAwOworfQorIyBpZmRlZiBfTElCQworbGliY19oaWRkZW5fZGVmIChfb2JzdGFja19uZXdjaHVuaykKKyMgZW5kaWYKKworLyogUmV0dXJuIG5vbnplcm8gaWYgb2JqZWN0IE9CSiBoYXMgYmVlbiBhbGxvY2F0ZWQgZnJvbSBvYnN0YWNrIEguCisgICBUaGlzIGlzIGhlcmUgZm9yIGRlYnVnZ2luZy4KKyAgIElmIHlvdSB1c2UgaXQgaW4gYSBwcm9ncmFtLCB5b3UgYXJlIHByb2JhYmx5IGxvc2luZy4gICovCisKKy8qIFN1cHByZXNzIC1XbWlzc2luZy1wcm90b3R5cGVzIHdhcm5pbmcuICBXZSBkb24ndCB3YW50IHRvIGRlY2xhcmUgdGhpcyBpbgorICAgb2JzdGFjay5oIGJlY2F1c2UgaXQgaXMganVzdCBmb3IgZGVidWdnaW5nLiAgKi8KK2ludCBfb2JzdGFja19hbGxvY2F0ZWRfcCAoc3RydWN0IG9ic3RhY2sgKmgsIHZvaWQgKm9iaik7CisKK2ludAorX29ic3RhY2tfYWxsb2NhdGVkX3AgKHN0cnVjdCBvYnN0YWNrICpoLCB2b2lkICpvYmopCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqbHA7CS8qIGJlbG93IGFkZHIgb2YgYW55IG9iamVjdHMgaW4gdGhpcyBjaHVuayAqLworICByZWdpc3RlciBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKnBscDsJLyogcG9pbnQgdG8gcHJldmlvdXMgY2h1bmsgaWYgYW55ICovCisKKyAgbHAgPSAoaCktPmNodW5rOworICAvKiBXZSB1c2UgPj0gcmF0aGVyIHRoYW4gPiBzaW5jZSB0aGUgb2JqZWN0IGNhbm5vdCBiZSBleGFjdGx5IGF0CisgICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNodW5rIGJ1dCBtaWdodCBiZSBhbiBlbXB0eSBvYmplY3QgZXhhY3RseQorICAgICBhdCB0aGUgZW5kIG9mIGFuIGFkamFjZW50IGNodW5rLiAgKi8KKyAgd2hpbGUgKGxwICE9IE5VTEwgJiYgKCh2b2lkICopIGxwID49IG9iaiB8fCAodm9pZCAqKSAobHApLT5saW1pdCA8IG9iaikpCisgICAgeworICAgICAgcGxwID0gbHAtPnByZXY7CisgICAgICBscCA9IHBscDsKKyAgICB9CisgIHJldHVybiBscCAhPSBOVUxMOworfQorDAorLyogRnJlZSBvYmplY3RzIGluIG9ic3RhY2sgSCwgaW5jbHVkaW5nIE9CSiBhbmQgZXZlcnl0aGluZyBhbGxvY2F0ZQorICAgbW9yZSByZWNlbnRseSB0aGFuIE9CSi4gIElmIE9CSiBpcyB6ZXJvLCBmcmVlIGV2ZXJ5dGhpbmcgaW4gSC4gICovCisKKyMgdW5kZWYgb2JzdGFja19mcmVlCisKK3ZvaWQKK29ic3RhY2tfZnJlZSAoc3RydWN0IG9ic3RhY2sgKmgsIHZvaWQgKm9iaikKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IF9vYnN0YWNrX2NodW5rICpscDsJLyogYmVsb3cgYWRkciBvZiBhbnkgb2JqZWN0cyBpbiB0aGlzIGNodW5rICovCisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayAqcGxwOwkvKiBwb2ludCB0byBwcmV2aW91cyBjaHVuayBpZiBhbnkgKi8KKworICBscCA9IGgtPmNodW5rOworICAvKiBXZSB1c2UgPj0gYmVjYXVzZSB0aGVyZSBjYW5ub3QgYmUgYW4gb2JqZWN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjaHVuay4KKyAgICAgQnV0IHRoZXJlIGNhbiBiZSBhbiBlbXB0eSBvYmplY3QgYXQgdGhhdCBhZGRyZXNzCisgICAgIGF0IHRoZSBlbmQgb2YgYW5vdGhlciBjaHVuay4gICovCisgIHdoaWxlIChscCAhPSBOVUxMICYmICgodm9pZCAqKSBscCA+PSBvYmogfHwgKHZvaWQgKikgKGxwKS0+bGltaXQgPCBvYmopKQorICAgIHsKKyAgICAgIHBscCA9IGxwLT5wcmV2OworICAgICAgQ0FMTF9GUkVFRlVOIChoLCBscCk7CisgICAgICBscCA9IHBscDsKKyAgICAgIC8qIElmIHdlIHN3aXRjaCBjaHVua3MsIHdlIGNhbid0IHRlbGwgd2hldGhlciB0aGUgbmV3IGN1cnJlbnQKKwkgY2h1bmsgY29udGFpbnMgYW4gZW1wdHkgb2JqZWN0LCBzbyBhc3N1bWUgdGhhdCBpdCBtYXkuICAqLworICAgICAgaC0+bWF5YmVfZW1wdHlfb2JqZWN0ID0gMTsKKyAgICB9CisgIGlmIChscCkKKyAgICB7CisgICAgICBoLT5vYmplY3RfYmFzZSA9IGgtPm5leHRfZnJlZSA9IChjaGFyICopIChvYmopOworICAgICAgaC0+Y2h1bmtfbGltaXQgPSBscC0+bGltaXQ7CisgICAgICBoLT5jaHVuayA9IGxwOworICAgIH0KKyAgZWxzZSBpZiAob2JqICE9IE5VTEwpCisgICAgLyogb2JqIGlzIG5vdCBpbiBhbnkgb2YgdGhlIGNodW5rcyEgKi8KKyAgICBhYm9ydCAoKTsKK30KKworIyBpZmRlZiBfTElCQworLyogT2xkZXIgdmVyc2lvbnMgb2YgbGliYyB1c2VkIGEgZnVuY3Rpb24gX29ic3RhY2tfZnJlZSBpbnRlbmRlZCB0byBiZQorICAgY2FsbGVkIGJ5IG5vbi1HQ0MgY29tcGlsZXJzLiAgKi8KK3N0cm9uZ19hbGlhcyAob2JzdGFja19mcmVlLCBfb2JzdGFja19mcmVlKQorIyBlbmRpZgorDAoraW50Citfb2JzdGFja19tZW1vcnlfdXNlZCAoc3RydWN0IG9ic3RhY2sgKmgpCit7CisgIHJlZ2lzdGVyIHN0cnVjdCBfb2JzdGFja19jaHVuayogbHA7CisgIHJlZ2lzdGVyIGludCBuYnl0ZXMgPSAwOworCisgIGZvciAobHAgPSBoLT5jaHVuazsgbHAgIT0gTlVMTDsgbHAgPSBscC0+cHJldikKKyAgICB7CisgICAgICBuYnl0ZXMgKz0gbHAtPmxpbWl0IC0gKGNoYXIgKikgbHA7CisgICAgfQorICByZXR1cm4gbmJ5dGVzOworfQorDAorIyBpZmRlZiBfTElCQworIyAgaW5jbHVkZSA8bGliaW8vaW9saWJpby5oPgorIyBlbmRpZgorCisjIGlmbmRlZiBfX2F0dHJpYnV0ZV9fCisvKiBUaGlzIGZlYXR1cmUgaXMgYXZhaWxhYmxlIGluIGdjYyB2ZXJzaW9ucyAyLjUgYW5kIGxhdGVyLiAgKi8KKyMgIGlmIF9fR05VQ19fIDwgMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA8IDUpCisjICAgZGVmaW5lIF9fYXR0cmlidXRlX18oU3BlYykgLyogZW1wdHkgKi8KKyMgIGVuZGlmCisjIGVuZGlmCisKK3N0YXRpYyB2b2lkCitwcmludF9hbmRfYWJvcnQgKHZvaWQpCit7CisgIC8qIERvbid0IGNoYW5nZSBhbnkgb2YgdGhlc2Ugc3RyaW5ncy4gIFllcywgaXQgd291bGQgYmUgcG9zc2libGUgdG8gYWRkCisgICAgIHRoZSBuZXdsaW5lIHRvIHRoZSBzdHJpbmcgYW5kIHVzZSBmcHV0cyBvciBzby4gIEJ1dCB0aGlzIG11c3Qgbm90CisgICAgIGhhcHBlbiBiZWNhdXNlIHRoZSAibWVtb3J5IGV4aGF1c3RlZCIgbWVzc2FnZSBhcHBlYXJzIGluIG90aGVyIHBsYWNlcworICAgICBsaWtlIHRoaXMgYW5kIHRoZSB0cmFuc2xhdGlvbiBzaG91bGQgYmUgcmV1c2VkIGluc3RlYWQgb2YgY3JlYXRpbmcKKyAgICAgYSB2ZXJ5IHNpbWlsYXIgc3RyaW5nIHdoaWNoIHJlcXVpcmVzIGEgc2VwYXJhdGUgdHJhbnNsYXRpb24uICAqLworIyBpZmRlZiBfTElCQworICAodm9pZCkgX19meHByaW50ZiAoTlVMTCwgIiVzXG4iLCBfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworIyBlbHNlCisgIGZwcmludGYgKHN0ZGVyciwgIiVzXG4iLCBfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworIyBlbmRpZgorICBleGl0ICgxKTsKK30KKworI2VuZGlmCS8qICFFTElERV9DT0RFICovCmRpZmYgLS1naXQgYS9jb21wYXQvb2JzdGFjay5oIGIvY29tcGF0L29ic3RhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWI0YmRiCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L29ic3RhY2suaApAQCAtMCwwICsxLDUwNiBAQAorLyogb2JzdGFjay5oIC0gb2JqZWN0IHN0YWNrIG1hY3JvcworICAgQ29weXJpZ2h0IChDKSAxOTg4LTE5OTQsMTk5Ni0xOTk5LDIwMDMsMjAwNCwyMDA1LDIwMDkKKwlGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogU3VtbWFyeToKKworQWxsIHRoZSBhcHBhcmVudCBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIGFyZSBtYWNyb3MuIFRoZSBpZGVhCitpcyB0aGF0IHlvdSB3b3VsZCB1c2UgdGhlc2UgcHJlLXRlc3RlZCBtYWNyb3MgdG8gc29sdmUgYQordmVyeSBzcGVjaWZpYyBzZXQgb2YgcHJvYmxlbXMsIGFuZCB0aGV5IHdvdWxkIHJ1biBmYXN0LgorQ2F1dGlvbjogbm8gc2lkZS1lZmZlY3RzIGluIGFyZ3VtZW50cyBwbGVhc2UhISBUaGV5IG1heSBiZQorZXZhbHVhdGVkIE1BTlkgdGltZXMhIQorCitUaGVzZSBtYWNyb3Mgb3BlcmF0ZSBhIHN0YWNrIG9mIG9iamVjdHMuICBFYWNoIG9iamVjdCBzdGFydHMgbGlmZQorc21hbGwsIGFuZCBtYXkgZ3JvdyB0byBtYXR1cml0eS4gIChDb25zaWRlciBidWlsZGluZyBhIHdvcmQgc3lsbGFibGUKK2J5IHN5bGxhYmxlLikgIEFuIG9iamVjdCBjYW4gbW92ZSB3aGlsZSBpdCBpcyBncm93aW5nLiAgT25jZSBpdCBoYXMKK2JlZW4gImZpbmlzaGVkIiBpdCBuZXZlciBjaGFuZ2VzIGFkZHJlc3MgYWdhaW4uICBTbyB0aGUgInRvcCBvZiB0aGUKK3N0YWNrIiBpcyB0eXBpY2FsbHkgYW4gaW1tYXR1cmUgZ3Jvd2luZyBvYmplY3QsIHdoaWxlIHRoZSByZXN0IG9mIHRoZQorc3RhY2sgaXMgb2YgbWF0dXJlLCBmaXhlZCBzaXplIGFuZCBmaXhlZCBhZGRyZXNzIG9iamVjdHMuCisKK1RoZXNlIHJvdXRpbmVzIGdyYWIgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSwgdXNpbmcgYSBmdW5jdGlvbiB5b3UKK3N1cHBseSwgY2FsbGVkIGBvYnN0YWNrX2NodW5rX2FsbG9jJy4gIE9uIG9jY2FzaW9uLCB0aGV5IGZyZWUgY2h1bmtzLAorYnkgY2FsbGluZyBgb2JzdGFja19jaHVua19mcmVlJy4gIFlvdSBtdXN0IGRlZmluZSB0aGVtIGFuZCBkZWNsYXJlCit0aGVtIGJlZm9yZSB1c2luZyBhbnkgb2JzdGFjayBtYWNyb3MuCisKK0VhY2ggaW5kZXBlbmRlbnQgc3RhY2sgaXMgcmVwcmVzZW50ZWQgYnkgYSBgc3RydWN0IG9ic3RhY2snLgorRWFjaCBvZiB0aGUgb2JzdGFjayBtYWNyb3MgZXhwZWN0cyBhIHBvaW50ZXIgdG8gc3VjaCBhIHN0cnVjdHVyZQorYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorCitPbmUgbW90aXZhdGlvbiBmb3IgdGhpcyBwYWNrYWdlIGlzIHRoZSBwcm9ibGVtIG9mIGdyb3dpbmcgY2hhciBzdHJpbmdzCitpbiBzeW1ib2wgdGFibGVzLiAgVW5sZXNzIHlvdSBhcmUgImZhc2Npc3QgcGlnIHdpdGggYSByZWFkLW9ubHkgbWluZCIKKy0tR29zcGVyJ3MgaW1tb3J0YWwgcXVvdGUgZnJvbSBIQUtNRU0gaXRlbSAxNTQsIG91dCBvZiBjb250ZXh0LS15b3UKK3dvdWxkIG5vdCBsaWtlIHRvIHB1dCBhbnkgYXJiaXRyYXJ5IHVwcGVyIGxpbWl0IG9uIHRoZSBsZW5ndGggb2YgeW91cgorc3ltYm9scy4KKworSW4gcHJhY3RpY2UgdGhpcyBvZnRlbiBtZWFucyB5b3Ugd2lsbCBidWlsZCBtYW55IHNob3J0IHN5bWJvbHMgYW5kIGEKK2ZldyBsb25nIHN5bWJvbHMuICBBdCB0aGUgdGltZSB5b3UgYXJlIHJlYWRpbmcgYSBzeW1ib2wgeW91IGRvbid0IGtub3cKK2hvdyBsb25nIGl0IGlzLiAgT25lIHRyYWRpdGlvbmFsIG1ldGhvZCBpcyB0byByZWFkIGEgc3ltYm9sIGludG8gYQorYnVmZmVyLCByZWFsbG9jKClhdGluZyB0aGUgYnVmZmVyIGV2ZXJ5IHRpbWUgeW91IHRyeSB0byByZWFkIGEgc3ltYm9sCit0aGF0IGlzIGxvbmdlciB0aGFuIHRoZSBidWZmZXIuICBUaGlzIGlzIGJlYXV0LCBidXQgeW91IHN0aWxsIHdpbGwKK3dhbnQgdG8gY29weSB0aGUgc3ltYm9sIGZyb20gdGhlIGJ1ZmZlciB0byBhIG1vcmUgcGVybWFuZW50CitzeW1ib2wtdGFibGUgZW50cnkgc2F5IGFib3V0IGhhbGYgdGhlIHRpbWUuCisKK1dpdGggb2JzdGFja3MsIHlvdSBjYW4gd29yayBkaWZmZXJlbnRseS4gIFVzZSBvbmUgb2JzdGFjayBmb3IgYWxsIHN5bWJvbAorbmFtZXMuICBBcyB5b3UgcmVhZCBhIHN5bWJvbCwgZ3JvdyB0aGUgbmFtZSBpbiB0aGUgb2JzdGFjayBncmFkdWFsbHkuCitXaGVuIHRoZSBuYW1lIGlzIGNvbXBsZXRlLCBmaW5hbGl6ZSBpdC4gIFRoZW4sIGlmIHRoZSBzeW1ib2wgZXhpc3RzIGFscmVhZHksCitmcmVlIHRoZSBuZXdseSByZWFkIG5hbWUuCisKK1RoZSB3YXkgd2UgZG8gdGhpcyBpcyB0byB0YWtlIGEgbGFyZ2UgY2h1bmssIGFsbG9jYXRpbmcgbWVtb3J5IGZyb20KK2xvdyBhZGRyZXNzZXMuICBXaGVuIHlvdSB3YW50IHRvIGJ1aWxkIGEgc3ltYm9sIGluIHRoZSBjaHVuayB5b3UganVzdAorYWRkIGNoYXJzIGFib3ZlIHRoZSBjdXJyZW50ICJoaWdoIHdhdGVyIG1hcmsiIGluIHRoZSBjaHVuay4gIFdoZW4geW91CitoYXZlIGZpbmlzaGVkIGFkZGluZyBjaGFycywgYmVjYXVzZSB5b3UgZ290IHRvIHRoZSBlbmQgb2YgdGhlIHN5bWJvbCwKK3lvdSBrbm93IGhvdyBsb25nIHRoZSBjaGFycyBhcmUsIGFuZCB5b3UgY2FuIGNyZWF0ZSBhIG5ldyBvYmplY3QuCitNb3N0bHkgdGhlIGNoYXJzIHdpbGwgbm90IGJ1cnN0IG92ZXIgdGhlIGhpZ2hlc3QgYWRkcmVzcyBvZiB0aGUgY2h1bmssCitiZWNhdXNlIHlvdSB3b3VsZCB0eXBpY2FsbHkgZXhwZWN0IGEgY2h1bmsgdG8gYmUgKHNheSkgMTAwIHRpbWVzIGFzCitsb25nIGFzIGFuIGF2ZXJhZ2Ugb2JqZWN0LgorCitJbiBjYXNlIHRoYXQgaXNuJ3QgY2xlYXIsIHdoZW4gd2UgaGF2ZSBlbm91Z2ggY2hhcnMgdG8gbWFrZSB1cAordGhlIG9iamVjdCwgVEhFWSBBUkUgQUxSRUFEWSBDT05USUdVT1VTIElOIFRIRSBDSFVOSyAoZ3VhcmFudGVlZCkKK3NvIHdlIGp1c3QgcG9pbnQgdG8gaXQgd2hlcmUgaXQgbGllcy4gIE5vIG1vdmluZyBvZiBjaGFycyBpcworbmVlZGVkIGFuZCB0aGlzIGlzIHRoZSBzZWNvbmQgd2luOiBwb3RlbnRpYWxseSBsb25nIHN0cmluZ3MgbmVlZAorbmV2ZXIgYmUgZXhwbGljaXRseSBzaHVmZmxlZC4gT25jZSBhbiBvYmplY3QgaXMgZm9ybWVkLCBpdCBkb2VzIG5vdAorY2hhbmdlIGl0cyBhZGRyZXNzIGR1cmluZyBpdHMgbGlmZXRpbWUuCisKK1doZW4gdGhlIGNoYXJzIGJ1cnN0IG92ZXIgYSBjaHVuayBib3VuZGFyeSwgd2UgYWxsb2NhdGUgYSBsYXJnZXIKK2NodW5rLCBhbmQgdGhlbiBjb3B5IHRoZSBwYXJ0bHkgZm9ybWVkIG9iamVjdCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9sZAorY2h1bmsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGxhcmdlciBjaHVuay4gIFdlIHRoZW4gY2Fycnkgb24KK2FjY3JldGluZyBjaGFyYWN0ZXJzIHRvIHRoZSBlbmQgb2YgdGhlIG9iamVjdCBhcyB3ZSBub3JtYWxseSB3b3VsZC4KKworQSBzcGVjaWFsIG1hY3JvIGlzIHByb3ZpZGVkIHRvIGFkZCBhIHNpbmdsZSBjaGFyIGF0IGEgdGltZSB0byBhCitncm93aW5nIG9iamVjdC4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgcmVnaXN0ZXIgdmFyaWFibGVzLCB3aGljaAorYnJlYWsgdGhlIG9yZGluYXJ5ICdncm93dGgnIG1hY3JvLgorCitTdW1tYXJ5OgorCVdlIGFsbG9jYXRlIGxhcmdlIGNodW5rcy4KKwlXZSBjYXJ2ZSBvdXQgb25lIG9iamVjdCBhdCBhIHRpbWUgZnJvbSB0aGUgY3VycmVudCBjaHVuay4KKwlPbmNlIGNhcnZlZCwgYW4gb2JqZWN0IG5ldmVyIG1vdmVzLgorCVdlIGFyZSBmcmVlIHRvIGFwcGVuZCBkYXRhIG9mIGFueSBzaXplIHRvIHRoZSBjdXJyZW50bHkKKwkgIGdyb3dpbmcgb2JqZWN0LgorCUV4YWN0bHkgb25lIG9iamVjdCBpcyBncm93aW5nIGluIGFuIG9ic3RhY2sgYXQgYW55IG9uZSB0aW1lLgorCVlvdSBjYW4gcnVuIG9uZSBvYnN0YWNrIHBlciBjb250cm9sIGJsb2NrLgorCVlvdSBtYXkgaGF2ZSBhcyBtYW55IGNvbnRyb2wgYmxvY2tzIGFzIHlvdSBkYXJlLgorCUJlY2F1c2Ugb2YgdGhlIHdheSB3ZSBkbyBpdCwgeW91IGNhbiBgdW53aW5kJyBhbiBvYnN0YWNrCisJICBiYWNrIHRvIGEgcHJldmlvdXMgc3RhdGUuIChZb3UgbWF5IHJlbW92ZSBvYmplY3RzIG11Y2gKKwkgIGFzIHlvdSB3b3VsZCB3aXRoIGEgc3RhY2suKQorKi8KKworCisvKiBEb24ndCBkbyB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1vcmUgdGhhbiBvbmNlLiAgKi8KKworI2lmbmRlZiBfT0JTVEFDS19ICisjZGVmaW5lIF9PQlNUQUNLX0ggMQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisMCisvKiBXZSBuZWVkIHRoZSB0eXBlIG9mIGEgcG9pbnRlciBzdWJ0cmFjdGlvbi4gIElmIF9fUFRSRElGRl9UWVBFX18gaXMKKyAgIGRlZmluZWQsIGFzIHdpdGggR05VIEMsIHVzZSB0aGF0OyB0aGF0IHdheSB3ZSBkb24ndCBwb2xsdXRlIHRoZQorICAgbmFtZXNwYWNlIHdpdGggPHN0ZGRlZi5oPidzIHN5bWJvbHMuICBPdGhlcndpc2UsIGluY2x1ZGUgPHN0ZGRlZi5oPgorICAgYW5kIHVzZSBwdHJkaWZmX3QuICAqLworCisjaWZkZWYgX19QVFJESUZGX1RZUEVfXworIyBkZWZpbmUgUFRSX0lOVF9UWVBFIF9fUFRSRElGRl9UWVBFX18KKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyBkZWZpbmUgUFRSX0lOVF9UWVBFIHB0cmRpZmZfdAorI2VuZGlmCisKKy8qIElmIEIgaXMgdGhlIGJhc2Ugb2YgYW4gb2JqZWN0IGFkZHJlc3NlZCBieSBQLCByZXR1cm4gdGhlIHJlc3VsdCBvZgorICAgYWxpZ25pbmcgUCB0byB0aGUgbmV4dCBtdWx0aXBsZSBvZiBBICsgMS4gIEIgYW5kIFAgbXVzdCBiZSBvZiB0eXBlCisgICBjaGFyICouICBBICsgMSBtdXN0IGJlIGEgcG93ZXIgb2YgMi4gICovCisKKyNkZWZpbmUgX19CUFRSX0FMSUdOKEIsIFAsIEEpICgoQikgKyAoKChQKSAtIChCKSArIChBKSkgJiB+KEEpKSkKKworLyogU2ltaWxhciB0byBfQlBUUl9BTElHTiAoQiwgUCwgQSksIGV4Y2VwdCBvcHRpbWl6ZSB0aGUgY29tbW9uIGNhc2UKKyAgIHdoZXJlIHBvaW50ZXJzIGNhbiBiZSBjb252ZXJ0ZWQgdG8gaW50ZWdlcnMsIGFsaWduZWQgYXMgaW50ZWdlcnMsCisgICBhbmQgY29udmVydGVkIGJhY2sgYWdhaW4uICBJZiBQVFJfSU5UX1RZUEUgaXMgbmFycm93ZXIgdGhhbiBhCisgICBwb2ludGVyIChlLmcuLCB0aGUgQVMvNDAwKSwgcGxheSBpdCBzYWZlIGFuZCBjb21wdXRlIHRoZSBhbGlnbm1lbnQKKyAgIHJlbGF0aXZlIHRvIEIuICBPdGhlcndpc2UsIHVzZSB0aGUgZmFzdGVyIHN0cmF0ZWd5IG9mIGNvbXB1dGluZyB0aGUKKyAgIGFsaWdubWVudCByZWxhdGl2ZSB0byAwLiAgKi8KKworI2RlZmluZSBfX1BUUl9BTElHTihCLCBQLCBBKQkJCQkJCSAgICBcCisgIF9fQlBUUl9BTElHTiAoc2l6ZW9mIChQVFJfSU5UX1RZUEUpIDwgc2l6ZW9mICh2b2lkICopID8gKEIpIDogKGNoYXIgKikgMCwgXAorCQlQLCBBKQorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0cnVjdCBfb2JzdGFja19jaHVuawkJLyogTGl2ZXMgYXQgZnJvbnQgb2YgZWFjaCBjaHVuay4gKi8KK3sKKyAgY2hhciAgKmxpbWl0OwkJCS8qIDEgcGFzdCBlbmQgb2YgdGhpcyBjaHVuayAqLworICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKnByZXY7CS8qIGFkZHJlc3Mgb2YgcHJpb3IgY2h1bmsgb3IgTlVMTCAqLworICBjaGFyCWNvbnRlbnRzWzRdOwkJLyogb2JqZWN0cyBiZWdpbiBoZXJlICovCit9OworCitzdHJ1Y3Qgb2JzdGFjawkJLyogY29udHJvbCBjdXJyZW50IG9iamVjdCBpbiBjdXJyZW50IGNodW5rICovCit7CisgIGxvbmcJY2h1bmtfc2l6ZTsJCS8qIHByZWZlcnJlZCBzaXplIHRvIGFsbG9jYXRlIGNodW5rcyBpbiAqLworICBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKmNodW5rOwkvKiBhZGRyZXNzIG9mIGN1cnJlbnQgc3RydWN0IG9ic3RhY2tfY2h1bmsgKi8KKyAgY2hhcgkqb2JqZWN0X2Jhc2U7CQkvKiBhZGRyZXNzIG9mIG9iamVjdCB3ZSBhcmUgYnVpbGRpbmcgKi8KKyAgY2hhcgkqbmV4dF9mcmVlOwkJLyogd2hlcmUgdG8gYWRkIG5leHQgY2hhciB0byBjdXJyZW50IG9iamVjdCAqLworICBjaGFyCSpjaHVua19saW1pdDsJCS8qIGFkZHJlc3Mgb2YgY2hhciBhZnRlciBjdXJyZW50IGNodW5rICovCisgIHVuaW9uCisgIHsKKyAgICBQVFJfSU5UX1RZUEUgdGVtcGludDsKKyAgICB2b2lkICp0ZW1wcHRyOworICB9IHRlbXA7CQkJLyogVGVtcG9yYXJ5IGZvciBzb21lIG1hY3Jvcy4gICovCisgIGludCAgIGFsaWdubWVudF9tYXNrOwkJLyogTWFzayBvZiBhbGlnbm1lbnQgZm9yIGVhY2ggb2JqZWN0LiAqLworICAvKiBUaGVzZSBwcm90b3R5cGVzIHZhcnkgYmFzZWQgb24gYHVzZV9leHRyYV9hcmcnLCBhbmQgd2UgdXNlCisgICAgIGNhc3RzIHRvIHRoZSBwcm90b3R5cGVsZXNzIGZ1bmN0aW9uIHR5cGUgaW4gYWxsIGFzc2lnbm1lbnRzLAorICAgICBidXQgaGF2aW5nIHByb3RvdHlwZXMgaGVyZSBxdWlldHMgLVdzdHJpY3QtcHJvdG90eXBlcy4gICovCisgIHN0cnVjdCBfb2JzdGFja19jaHVuayAqKCpjaHVua2Z1bikgKHZvaWQgKiwgbG9uZyk7CisgIHZvaWQgKCpmcmVlZnVuKSAodm9pZCAqLCBzdHJ1Y3QgX29ic3RhY2tfY2h1bmsgKik7CisgIHZvaWQgKmV4dHJhX2FyZzsJCS8qIGZpcnN0IGFyZyBmb3IgY2h1bmsgYWxsb2MvZGVhbGxvYyBmdW5jcyAqLworICB1bnNpZ25lZCB1c2VfZXh0cmFfYXJnOjE7CS8qIGNodW5rIGFsbG9jL2RlYWxsb2MgZnVuY3MgdGFrZSBleHRyYSBhcmcgKi8KKyAgdW5zaWduZWQgbWF5YmVfZW1wdHlfb2JqZWN0OjE7LyogVGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBjdXJyZW50CisJCQkJICAgY2h1bmsgY29udGFpbnMgYSB6ZXJvLWxlbmd0aCBvYmplY3QuICBUaGlzCisJCQkJICAgcHJldmVudHMgZnJlZWluZyB0aGUgY2h1bmsgaWYgd2UgYWxsb2NhdGUKKwkJCQkgICBhIGJpZ2dlciBjaHVuayB0byByZXBsYWNlIGl0LiAqLworICB1bnNpZ25lZCBhbGxvY19mYWlsZWQ6MTsJLyogTm8gbG9uZ2VyIHVzZWQsIGFzIHdlIG5vdyBjYWxsIHRoZSBmYWlsZWQKKwkJCQkgICBoYW5kbGVyIG9uIGVycm9yLCBidXQgcmV0YWluZWQgZm9yIGJpbmFyeQorCQkJCSAgIGNvbXBhdGliaWxpdHkuICAqLworfTsKKworLyogRGVjbGFyZSB0aGUgZXh0ZXJuYWwgZnVuY3Rpb25zIHdlIHVzZTsgdGhleSBhcmUgaW4gb2JzdGFjay5jLiAgKi8KKworZXh0ZXJuIHZvaWQgX29ic3RhY2tfbmV3Y2h1bmsgKHN0cnVjdCBvYnN0YWNrICosIGludCk7CitleHRlcm4gaW50IF9vYnN0YWNrX2JlZ2luIChzdHJ1Y3Qgb2JzdGFjayAqLCBpbnQsIGludCwKKwkJCSAgICB2b2lkICooKikgKGxvbmcpLCB2b2lkICgqKSAodm9pZCAqKSk7CitleHRlcm4gaW50IF9vYnN0YWNrX2JlZ2luXzEgKHN0cnVjdCBvYnN0YWNrICosIGludCwgaW50LAorCQkJICAgICB2b2lkICooKikgKHZvaWQgKiwgbG9uZyksCisJCQkgICAgIHZvaWQgKCopICh2b2lkICosIHZvaWQgKiksIHZvaWQgKik7CitleHRlcm4gaW50IF9vYnN0YWNrX21lbW9yeV91c2VkIChzdHJ1Y3Qgb2JzdGFjayAqKTsKKwordm9pZCBvYnN0YWNrX2ZyZWUgKHN0cnVjdCBvYnN0YWNrICosIHZvaWQgKik7CisKKwwKKy8qIEVycm9yIGhhbmRsZXIgY2FsbGVkIHdoZW4gYG9ic3RhY2tfY2h1bmtfYWxsb2MnIGZhaWxlZCB0byBhbGxvY2F0ZQorICAgbW9yZSBtZW1vcnkuICBUaGlzIGNhbiBiZSBzZXQgdG8gYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gd2hpY2gKKyAgIHNob3VsZCBlaXRoZXIgYWJvcnQgZ3JhY2VmdWxseSBvciB1c2UgbG9uZ2p1bXAgLSBidXQgc2hvdWxkbid0CisgICByZXR1cm4uICBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gcHJpbnQgYSBtZXNzYWdlIGFuZCBhYm9ydC4gICovCitleHRlcm4gdm9pZCAoKm9ic3RhY2tfYWxsb2NfZmFpbGVkX2hhbmRsZXIpICh2b2lkKTsKKwwKKy8qIFBvaW50ZXIgdG8gYmVnaW5uaW5nIG9mIG9iamVjdCBiZWluZyBhbGxvY2F0ZWQgb3IgdG8gYmUgYWxsb2NhdGVkIG5leHQuCisgICBOb3RlIHRoYXQgdGhpcyBtaWdodCBub3QgYmUgdGhlIGZpbmFsIGFkZHJlc3Mgb2YgdGhlIG9iamVjdAorICAgYmVjYXVzZSBhIG5ldyBjaHVuayBtaWdodCBiZSBuZWVkZWQgdG8gaG9sZCB0aGUgZmluYWwgc2l6ZS4gICovCisKKyNkZWZpbmUgb2JzdGFja19iYXNlKGgpICgodm9pZCAqKSAoaCktPm9iamVjdF9iYXNlKQorCisvKiBTaXplIGZvciBhbGxvY2F0aW5nIG9yZGluYXJ5IGNodW5rcy4gICovCisKKyNkZWZpbmUgb2JzdGFja19jaHVua19zaXplKGgpICgoaCktPmNodW5rX3NpemUpCisKKy8qIFBvaW50ZXIgdG8gbmV4dCBieXRlIG5vdCB5ZXQgYWxsb2NhdGVkIGluIGN1cnJlbnQgY2h1bmsuICAqLworCisjZGVmaW5lIG9ic3RhY2tfbmV4dF9mcmVlKGgpCSgoaCktPm5leHRfZnJlZSkKKworLyogTWFzayBzcGVjaWZ5aW5nIGxvdyBiaXRzIHRoYXQgc2hvdWxkIGJlIGNsZWFyIGluIGFkZHJlc3Mgb2YgYW4gb2JqZWN0LiAgKi8KKworI2RlZmluZSBvYnN0YWNrX2FsaWdubWVudF9tYXNrKGgpICgoaCktPmFsaWdubWVudF9tYXNrKQorCisvKiBUbyBwcmV2ZW50IHByb3RvdHlwZSB3YXJuaW5ncyBwcm92aWRlIGNvbXBsZXRlIGFyZ3VtZW50IGxpc3QuICAqLworI2RlZmluZSBvYnN0YWNrX2luaXQoaCkJCQkJCQlcCisgIF9vYnN0YWNrX2JlZ2luICgoaCksIDAsIDAsCQkJCQlcCisJCSAgKHZvaWQgKigqKSAobG9uZykpIG9ic3RhY2tfY2h1bmtfYWxsb2MsCVwKKwkJICAodm9pZCAoKikgKHZvaWQgKikpIG9ic3RhY2tfY2h1bmtfZnJlZSkKKworI2RlZmluZSBvYnN0YWNrX2JlZ2luKGgsIHNpemUpCQkJCQlcCisgIF9vYnN0YWNrX2JlZ2luICgoaCksIChzaXplKSwgMCwJCQkJXAorCQkgICh2b2lkICooKikgKGxvbmcpKSBvYnN0YWNrX2NodW5rX2FsbG9jLAlcCisJCSAgKHZvaWQgKCopICh2b2lkICopKSBvYnN0YWNrX2NodW5rX2ZyZWUpCisKKyNkZWZpbmUgb2JzdGFja19zcGVjaWZ5X2FsbG9jYXRpb24oaCwgc2l6ZSwgYWxpZ25tZW50LCBjaHVua2Z1biwgZnJlZWZ1bikgIFwKKyAgX29ic3RhY2tfYmVnaW4gKChoKSwgKHNpemUpLCAoYWxpZ25tZW50KSwJCQkJICAgXAorCQkgICh2b2lkICooKikgKGxvbmcpKSAoY2h1bmtmdW4pLAkJCSAgIFwKKwkJICAodm9pZCAoKikgKHZvaWQgKikpIChmcmVlZnVuKSkKKworI2RlZmluZSBvYnN0YWNrX3NwZWNpZnlfYWxsb2NhdGlvbl93aXRoX2FyZyhoLCBzaXplLCBhbGlnbm1lbnQsIGNodW5rZnVuLCBmcmVlZnVuLCBhcmcpIFwKKyAgX29ic3RhY2tfYmVnaW5fMSAoKGgpLCAoc2l6ZSksIChhbGlnbm1lbnQpLAkJCQlcCisJCSAgICAodm9pZCAqKCopICh2b2lkICosIGxvbmcpKSAoY2h1bmtmdW4pLAkJXAorCQkgICAgKHZvaWQgKCopICh2b2lkICosIHZvaWQgKikpIChmcmVlZnVuKSwgKGFyZykpCisKKyNkZWZpbmUgb2JzdGFja19jaHVua2Z1bihoLCBuZXdjaHVua2Z1bikgXAorICAoKGgpIC0+IGNodW5rZnVuID0gKHN0cnVjdCBfb2JzdGFja19jaHVuayAqKCopKHZvaWQgKiwgbG9uZykpIChuZXdjaHVua2Z1bikpCisKKyNkZWZpbmUgb2JzdGFja19mcmVlZnVuKGgsIG5ld2ZyZWVmdW4pIFwKKyAgKChoKSAtPiBmcmVlZnVuID0gKHZvaWQgKCopKHZvaWQgKiwgc3RydWN0IF9vYnN0YWNrX2NodW5rICopKSAobmV3ZnJlZWZ1bikpCisKKyNkZWZpbmUgb2JzdGFja18xZ3Jvd19mYXN0KGgsYWNoYXIpICgqKChoKS0+bmV4dF9mcmVlKSsrID0gKGFjaGFyKSkKKworI2RlZmluZSBvYnN0YWNrX2JsYW5rX2Zhc3QoaCxuKSAoKGgpLT5uZXh0X2ZyZWUgKz0gKG4pKQorCisjZGVmaW5lIG9ic3RhY2tfbWVtb3J5X3VzZWQoaCkgX29ic3RhY2tfbWVtb3J5X3VzZWQgKGgpCisMCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiBkZWZpbmVkIF9fU1REQ19fICYmIF9fU1REQ19fCisvKiBOZXh0U3RlcCAyLjAgY2MgaXMgcmVhbGx5IGdjYyAxLjkzIGJ1dCBpdCBkZWZpbmVzIF9fR05VQ19fID0gMiBhbmQKKyAgIGRvZXMgbm90IGltcGxlbWVudCBfX2V4dGVuc2lvbl9fLiAgQnV0IHRoYXQgY29tcGlsZXIgZG9lc24ndCBkZWZpbmUKKyAgIF9fR05VQ19NSU5PUl9fLiAgKi8KKyMgaWYgX19HTlVDX18gPCAyIHx8IChfX05lWFRfXyAmJiAhX19HTlVDX01JTk9SX18pCisjICBkZWZpbmUgX19leHRlbnNpb25fXworIyBlbmRpZgorCisvKiBGb3IgR05VIEMsIGlmIG5vdCAtdHJhZGl0aW9uYWwsCisgICB3ZSBjYW4gZGVmaW5lIHRoZXNlIG1hY3JvcyB0byBjb21wdXRlIGFsbCBhcmdzIG9ubHkgb25jZQorICAgd2l0aG91dCB1c2luZyBhIGdsb2JhbCB2YXJpYWJsZS4KKyAgIEFsc28sIHdlIGNhbiBhdm9pZCB1c2luZyB0aGUgYHRlbXAnIHNsb3QsIHRvIG1ha2UgZmFzdGVyIGNvZGUuICAqLworCisjIGRlZmluZSBvYnN0YWNrX29iamVjdF9zaXplKE9CU1RBQ0spCQkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyAgKHsgc3RydWN0IG9ic3RhY2sgY29uc3QgKl9fbyA9IChPQlNUQUNLKTsJCQkJXAorICAgICAodW5zaWduZWQpIChfX28tPm5leHRfZnJlZSAtIF9fby0+b2JqZWN0X2Jhc2UpOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX3Jvb20oT0JTVEFDSykJCQkJCQlcCisgIF9fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyAgKHsgc3RydWN0IG9ic3RhY2sgY29uc3QgKl9fbyA9IChPQlNUQUNLKTsJCQkJXAorICAgICAodW5zaWduZWQpIChfX28tPmNodW5rX2xpbWl0IC0gX19vLT5uZXh0X2ZyZWUpOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX21ha2Vfcm9vbShPQlNUQUNLLGxlbmd0aCkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGludCBfX2xlbiA9IChsZW5ndGgpOwkJCQkJCVwKKyAgIGlmIChfX28tPmNodW5rX2xpbWl0IC0gX19vLT5uZXh0X2ZyZWUgPCBfX2xlbikJCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIF9fbGVuKTsJCQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2VtcHR5X3AoT0JTVEFDSykJCQkJCVwKKyAgX19leHRlbnNpb25fXwkJCQkJCQkJXAorICAoeyBzdHJ1Y3Qgb2JzdGFjayBjb25zdCAqX19vID0gKE9CU1RBQ0spOwkJCQlcCisgICAgIChfX28tPmNodW5rLT5wcmV2ID09IDAJCQkJCQlcCisgICAgICAmJiBfX28tPm5leHRfZnJlZSA9PSBfX1BUUl9BTElHTiAoKGNoYXIgKikgX19vLT5jaHVuaywJCVwKKwkJCQkJX19vLT5jaHVuay0+Y29udGVudHMsCQlcCisJCQkJCV9fby0+YWxpZ25tZW50X21hc2spKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19ncm93KE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vID0gKE9CU1RBQ0spOwkJCQkJXAorICAgaW50IF9fbGVuID0gKGxlbmd0aCk7CQkJCQkJXAorICAgaWYgKF9fby0+bmV4dF9mcmVlICsgX19sZW4gPiBfX28tPmNodW5rX2xpbWl0KQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4pOwkJCQkJXAorICAgbWVtY3B5IChfX28tPm5leHRfZnJlZSwgd2hlcmUsIF9fbGVuKTsJCQkJXAorICAgX19vLT5uZXh0X2ZyZWUgKz0gX19sZW47CQkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfZ3JvdzAoT0JTVEFDSyx3aGVyZSxsZW5ndGgpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCisgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyBfX2xlbiArIDEgPiBfX28tPmNodW5rX2xpbWl0KQkJCVwKKyAgICAgX29ic3RhY2tfbmV3Y2h1bmsgKF9fbywgX19sZW4gKyAxKTsJCQkJXAorICAgbWVtY3B5IChfX28tPm5leHRfZnJlZSwgd2hlcmUsIF9fbGVuKTsJCQkJXAorICAgX19vLT5uZXh0X2ZyZWUgKz0gX19sZW47CQkJCQkJXAorICAgKihfX28tPm5leHRfZnJlZSkrKyA9IDA7CQkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfMWdyb3coT0JTVEFDSyxkYXR1bSkJCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyAxID4gX19vLT5jaHVua19saW1pdCkJCQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCAxKTsJCQkJCVwKKyAgIG9ic3RhY2tfMWdyb3dfZmFzdCAoX19vLCBkYXR1bSk7CQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworLyogVGhlc2UgYXNzdW1lIHRoYXQgdGhlIG9ic3RhY2sgYWxpZ25tZW50IGlzIGdvb2QgZW5vdWdoIGZvciBwb2ludGVycworICAgb3IgaW50cywgYW5kIHRoYXQgdGhlIGRhdGEgYWRkZWQgc28gZmFyIHRvIHRoZSBjdXJyZW50IG9iamVjdAorICAgc2hhcmVzIHRoYXQgbXVjaCBhbGlnbm1lbnQuICAqLworCisjIGRlZmluZSBvYnN0YWNrX3B0cl9ncm93KE9CU1RBQ0ssZGF0dW0pCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpZiAoX19vLT5uZXh0X2ZyZWUgKyBzaXplb2YgKHZvaWQgKikgPiBfX28tPmNodW5rX2xpbWl0KQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBzaXplb2YgKHZvaWQgKikpOwkJCQlcCisgICBvYnN0YWNrX3B0cl9ncm93X2Zhc3QgKF9fbywgZGF0dW0pOyB9KQkJCQlcCisKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3coT0JTVEFDSyxkYXR1bSkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIGlmIChfX28tPm5leHRfZnJlZSArIHNpemVvZiAoaW50KSA+IF9fby0+Y2h1bmtfbGltaXQpCQlcCisgICAgIF9vYnN0YWNrX25ld2NodW5rIChfX28sIHNpemVvZiAoaW50KSk7CQkJCVwKKyAgIG9ic3RhY2tfaW50X2dyb3dfZmFzdCAoX19vLCBkYXR1bSk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3dfZmFzdChPQlNUQUNLLGFwdHIpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28xID0gKE9CU1RBQ0spOwkJCQkJXAorICAgKihjb25zdCB2b2lkICoqKSBfX28xLT5uZXh0X2ZyZWUgPSAoYXB0cik7CQkJCVwKKyAgIF9fbzEtPm5leHRfZnJlZSArPSBzaXplb2YgKGNvbnN0IHZvaWQgKik7CQkJCVwKKyAgICh2b2lkKSAwOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2ludF9ncm93X2Zhc3QoT0JTVEFDSyxhaW50KQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19vMSA9IChPQlNUQUNLKTsJCQkJCVwKKyAgICooaW50ICopIF9fbzEtPm5leHRfZnJlZSA9IChhaW50KTsJCQkJCVwKKyAgIF9fbzEtPm5leHRfZnJlZSArPSBzaXplb2YgKGludCk7CQkJCQlcCisgICAodm9pZCkgMDsgfSkKKworIyBkZWZpbmUgb2JzdGFja19ibGFuayhPQlNUQUNLLGxlbmd0aCkJCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX28gPSAoT0JTVEFDSyk7CQkJCQlcCisgICBpbnQgX19sZW4gPSAobGVuZ3RoKTsJCQkJCQlcCisgICBpZiAoX19vLT5jaHVua19saW1pdCAtIF9fby0+bmV4dF9mcmVlIDwgX19sZW4pCQkJXAorICAgICBfb2JzdGFja19uZXdjaHVuayAoX19vLCBfX2xlbik7CQkJCQlcCisgICBvYnN0YWNrX2JsYW5rX2Zhc3QgKF9fbywgX19sZW4pOwkJCQkJXAorICAgKHZvaWQpIDA7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfYWxsb2MoT0JTVEFDSyxsZW5ndGgpCQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19oID0gKE9CU1RBQ0spOwkJCQkJXAorICAgb2JzdGFja19ibGFuayAoX19oLCAobGVuZ3RoKSk7CQkJCQlcCisgICBvYnN0YWNrX2ZpbmlzaCAoX19oKTsgfSkKKworIyBkZWZpbmUgb2JzdGFja19jb3B5KE9CU1RBQ0ssd2hlcmUsbGVuZ3RoKQkJCQlcCitfX2V4dGVuc2lvbl9fCQkJCQkJCQlcCisoeyBzdHJ1Y3Qgb2JzdGFjayAqX19oID0gKE9CU1RBQ0spOwkJCQkJXAorICAgb2JzdGFja19ncm93IChfX2gsICh3aGVyZSksIChsZW5ndGgpKTsJCQkJXAorICAgb2JzdGFja19maW5pc2ggKF9faCk7IH0pCisKKyMgZGVmaW5lIG9ic3RhY2tfY29weTAoT0JTVEFDSyx3aGVyZSxsZW5ndGgpCQkJCVwKK19fZXh0ZW5zaW9uX18JCQkJCQkJCVwKKyh7IHN0cnVjdCBvYnN0YWNrICpfX2ggPSAoT0JTVEFDSyk7CQkJCQlcCisgICBvYnN0YWNrX2dyb3cwIChfX2gsICh3aGVyZSksIChsZW5ndGgpKTsJCQkJXAorICAgb2JzdGFja19maW5pc2ggKF9faCk7IH0pCisKKy8qIFRoZSBsb2NhbCB2YXJpYWJsZSBpcyBuYW1lZCBfX28xIHRvIGF2b2lkIGEgbmFtZSBjb25mbGljdAorICAgd2hlbiBvYnN0YWNrX2JsYW5rIGlzIGNhbGxlZC4gICovCisjIGRlZmluZSBvYnN0YWNrX2ZpbmlzaChPQlNUQUNLKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbzEgPSAoT0JTVEFDSyk7CQkJCQlcCisgICB2b2lkICpfX3ZhbHVlID0gKHZvaWQgKikgX19vMS0+b2JqZWN0X2Jhc2U7CQkJCVwKKyAgIGlmIChfX28xLT5uZXh0X2ZyZWUgPT0gX192YWx1ZSkJCQkJCVwKKyAgICAgX19vMS0+bWF5YmVfZW1wdHlfb2JqZWN0ID0gMTsJCQkJCVwKKyAgIF9fbzEtPm5leHRfZnJlZQkJCQkJCQlcCisgICAgID0gX19QVFJfQUxJR04gKF9fbzEtPm9iamVjdF9iYXNlLCBfX28xLT5uZXh0X2ZyZWUsCQkJXAorCQkgICAgX19vMS0+YWxpZ25tZW50X21hc2spOwkJCQlcCisgICBpZiAoX19vMS0+bmV4dF9mcmVlIC0gKGNoYXIgKilfX28xLT5jaHVuawkJCQlcCisgICAgICAgPiBfX28xLT5jaHVua19saW1pdCAtIChjaGFyICopX19vMS0+Y2h1bmspCQkJXAorICAgICBfX28xLT5uZXh0X2ZyZWUgPSBfX28xLT5jaHVua19saW1pdDsJCQkJXAorICAgX19vMS0+b2JqZWN0X2Jhc2UgPSBfX28xLT5uZXh0X2ZyZWU7CQkJCQlcCisgICBfX3ZhbHVlOyB9KQorCisjIGRlZmluZSBvYnN0YWNrX2ZyZWUoT0JTVEFDSywgT0JKKQkJCQkJXAorX19leHRlbnNpb25fXwkJCQkJCQkJXAorKHsgc3RydWN0IG9ic3RhY2sgKl9fbyA9IChPQlNUQUNLKTsJCQkJCVwKKyAgIHZvaWQgKl9fb2JqID0gKE9CSik7CQkJCQkJCVwKKyAgIGlmIChfX29iaiA+ICh2b2lkICopX19vLT5jaHVuayAmJiBfX29iaiA8ICh2b2lkICopX19vLT5jaHVua19saW1pdCkgIFwKKyAgICAgX19vLT5uZXh0X2ZyZWUgPSBfX28tPm9iamVjdF9iYXNlID0gKGNoYXIgKilfX29iajsJCQlcCisgICBlbHNlIChvYnN0YWNrX2ZyZWUpIChfX28sIF9fb2JqKTsgfSkKKwwKKyNlbHNlIC8qIG5vdCBfX0dOVUNfXyBvciBub3QgX19TVERDX18gKi8KKworIyBkZWZpbmUgb2JzdGFja19vYmplY3Rfc2l6ZShoKSBcCisgKHVuc2lnbmVkKSAoKGgpLT5uZXh0X2ZyZWUgLSAoaCktPm9iamVjdF9iYXNlKQorCisjIGRlZmluZSBvYnN0YWNrX3Jvb20oaCkJCVwKKyAodW5zaWduZWQpICgoaCktPmNodW5rX2xpbWl0IC0gKGgpLT5uZXh0X2ZyZWUpCisKKyMgZGVmaW5lIG9ic3RhY2tfZW1wdHlfcChoKSBcCisgKChoKS0+Y2h1bmstPnByZXYgPT0gMAkJCQkJCQlcCisgICYmIChoKS0+bmV4dF9mcmVlID09IF9fUFRSX0FMSUdOICgoY2hhciAqKSAoaCktPmNodW5rLAkJXAorCQkJCSAgICAoaCktPmNodW5rLT5jb250ZW50cywJCVwKKwkJCQkgICAgKGgpLT5hbGlnbm1lbnRfbWFzaykpCisKKy8qIE5vdGUgdGhhdCB0aGUgY2FsbCB0byBfb2JzdGFja19uZXdjaHVuayBpcyBlbmNsb3NlZCBpbiAoLi4uLCAwKQorICAgc28gdGhhdCB3ZSBjYW4gYXZvaWQgaGF2aW5nIHZvaWQgZXhwcmVzc2lvbnMKKyAgIGluIHRoZSBhcm1zIG9mIHRoZSBjb25kaXRpb25hbCBleHByZXNzaW9uLgorICAgQ2FzdGluZyB0aGUgdGhpcmQgb3BlcmFuZCB0byB2b2lkIHdhcyB0cmllZCBiZWZvcmUsCisgICBidXQgc29tZSBjb21waWxlcnMgd29uJ3QgYWNjZXB0IGl0LiAgKi8KKworIyBkZWZpbmUgb2JzdGFja19tYWtlX3Jvb20oaCxsZW5ndGgpCQkJCQlcCisoIChoKS0+dGVtcC50ZW1waW50ID0gKGxlbmd0aCksCQkJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wLnRlbXBpbnQgPiAoaCktPmNodW5rX2xpbWl0KQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgKGgpLT50ZW1wLnRlbXBpbnQpLCAwKSA6IDApKQorCisjIGRlZmluZSBvYnN0YWNrX2dyb3coaCx3aGVyZSxsZW5ndGgpCQkJCQlcCisoIChoKS0+dGVtcC50ZW1waW50ID0gKGxlbmd0aCksCQkJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wLnRlbXBpbnQgPiAoaCktPmNodW5rX2xpbWl0KQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgKGgpLT50ZW1wLnRlbXBpbnQpLCAwKSA6IDApLAkJXAorICBtZW1jcHkgKChoKS0+bmV4dF9mcmVlLCB3aGVyZSwgKGgpLT50ZW1wLnRlbXBpbnQpLAkJCVwKKyAgKGgpLT5uZXh0X2ZyZWUgKz0gKGgpLT50ZW1wLnRlbXBpbnQpCisKKyMgZGVmaW5lIG9ic3RhY2tfZ3JvdzAoaCx3aGVyZSxsZW5ndGgpCQkJCQlcCisoIChoKS0+dGVtcC50ZW1waW50ID0gKGxlbmd0aCksCQkJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlICsgKGgpLT50ZW1wLnRlbXBpbnQgKyAxID4gKGgpLT5jaHVua19saW1pdCkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50ICsgMSksIDApIDogMCksCQlcCisgIG1lbWNweSAoKGgpLT5uZXh0X2ZyZWUsIHdoZXJlLCAoaCktPnRlbXAudGVtcGludCksCQkJXAorICAoaCktPm5leHRfZnJlZSArPSAoaCktPnRlbXAudGVtcGludCwJCQkJCVwKKyAgKigoaCktPm5leHRfZnJlZSkrKyA9IDApCisKKyMgZGVmaW5lIG9ic3RhY2tfMWdyb3coaCxkYXR1bSkJCQkJCQlcCisoICgoKGgpLT5uZXh0X2ZyZWUgKyAxID4gKGgpLT5jaHVua19saW1pdCkJCQkJXAorICAgPyAoX29ic3RhY2tfbmV3Y2h1bmsgKChoKSwgMSksIDApIDogMCksCQkJCVwKKyAgb2JzdGFja18xZ3Jvd19mYXN0IChoLCBkYXR1bSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3coaCxkYXR1bSkJCQkJCVwKKyggKCgoaCktPm5leHRfZnJlZSArIHNpemVvZiAoY2hhciAqKSA+IChoKS0+Y2h1bmtfbGltaXQpCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCBzaXplb2YgKGNoYXIgKikpLCAwKSA6IDApLAkJXAorICBvYnN0YWNrX3B0cl9ncm93X2Zhc3QgKGgsIGRhdHVtKSkKKworIyBkZWZpbmUgb2JzdGFja19pbnRfZ3JvdyhoLGRhdHVtKQkJCQkJXAorKCAoKChoKS0+bmV4dF9mcmVlICsgc2l6ZW9mIChpbnQpID4gKGgpLT5jaHVua19saW1pdCkJCQlcCisgICA/IChfb2JzdGFja19uZXdjaHVuayAoKGgpLCBzaXplb2YgKGludCkpLCAwKSA6IDApLAkJCVwKKyAgb2JzdGFja19pbnRfZ3Jvd19mYXN0IChoLCBkYXR1bSkpCisKKyMgZGVmaW5lIG9ic3RhY2tfcHRyX2dyb3dfZmFzdChoLGFwdHIpCQkJCQlcCisgICgoKGNvbnN0IHZvaWQgKiopICgoaCktPm5leHRfZnJlZSArPSBzaXplb2YgKHZvaWQgKikpKVstMV0gPSAoYXB0cikpCisKKyMgZGVmaW5lIG9ic3RhY2tfaW50X2dyb3dfZmFzdChoLGFpbnQpCQkJCQlcCisgICgoKGludCAqKSAoKGgpLT5uZXh0X2ZyZWUgKz0gc2l6ZW9mIChpbnQpKSlbLTFdID0gKGFpbnQpKQorCisjIGRlZmluZSBvYnN0YWNrX2JsYW5rKGgsbGVuZ3RoKQkJCQkJXAorKCAoaCktPnRlbXAudGVtcGludCA9IChsZW5ndGgpLAkJCQkJCVwKKyAgKCgoaCktPmNodW5rX2xpbWl0IC0gKGgpLT5uZXh0X2ZyZWUgPCAoaCktPnRlbXAudGVtcGludCkJCVwKKyAgID8gKF9vYnN0YWNrX25ld2NodW5rICgoaCksIChoKS0+dGVtcC50ZW1waW50KSwgMCkgOiAwKSwJCVwKKyAgb2JzdGFja19ibGFua19mYXN0IChoLCAoaCktPnRlbXAudGVtcGludCkpCisKKyMgZGVmaW5lIG9ic3RhY2tfYWxsb2MoaCxsZW5ndGgpCQkJCQlcCisgKG9ic3RhY2tfYmxhbmsgKChoKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKKworIyBkZWZpbmUgb2JzdGFja19jb3B5KGgsd2hlcmUsbGVuZ3RoKQkJCQkJXAorIChvYnN0YWNrX2dyb3cgKChoKSwgKHdoZXJlKSwgKGxlbmd0aCkpLCBvYnN0YWNrX2ZpbmlzaCAoKGgpKSkKKworIyBkZWZpbmUgb2JzdGFja19jb3B5MChoLHdoZXJlLGxlbmd0aCkJCQkJCVwKKyAob2JzdGFja19ncm93MCAoKGgpLCAod2hlcmUpLCAobGVuZ3RoKSksIG9ic3RhY2tfZmluaXNoICgoaCkpKQorCisjIGRlZmluZSBvYnN0YWNrX2ZpbmlzaChoKQkJCQkJCVwKKyggKChoKS0+bmV4dF9mcmVlID09IChoKS0+b2JqZWN0X2Jhc2UJCQkJCVwKKyAgID8gKCgoaCktPm1heWJlX2VtcHR5X29iamVjdCA9IDEpLCAwKQkJCQkJXAorICAgOiAwKSwJCQkJCQkJCVwKKyAgKGgpLT50ZW1wLnRlbXBwdHIgPSAoaCktPm9iamVjdF9iYXNlLAkJCQkJXAorICAoaCktPm5leHRfZnJlZQkJCQkJCQlcCisgICAgPSBfX1BUUl9BTElHTiAoKGgpLT5vYmplY3RfYmFzZSwgKGgpLT5uZXh0X2ZyZWUsCQkJXAorCQkgICAoaCktPmFsaWdubWVudF9tYXNrKSwJCQkJXAorICAoKChoKS0+bmV4dF9mcmVlIC0gKGNoYXIgKikgKGgpLT5jaHVuawkJCQlcCisgICAgPiAoaCktPmNodW5rX2xpbWl0IC0gKGNoYXIgKikgKGgpLT5jaHVuaykJCQkJXAorICAgPyAoKGgpLT5uZXh0X2ZyZWUgPSAoaCktPmNodW5rX2xpbWl0KSA6IDApLAkJCQlcCisgIChoKS0+b2JqZWN0X2Jhc2UgPSAoaCktPm5leHRfZnJlZSwJCQkJCVwKKyAgKGgpLT50ZW1wLnRlbXBwdHIpCisKKyMgZGVmaW5lIG9ic3RhY2tfZnJlZShoLG9iaikJCQkJCQlcCisoIChoKS0+dGVtcC50ZW1waW50ID0gKGNoYXIgKikgKG9iaikgLSAoY2hhciAqKSAoaCktPmNodW5rLAkJXAorICAoKCgoaCktPnRlbXAudGVtcGludCA+IDAJCQkJCQlcCisgICAgJiYgKGgpLT50ZW1wLnRlbXBpbnQgPCAoaCktPmNodW5rX2xpbWl0IC0gKGNoYXIgKikgKGgpLT5jaHVuaykpCVwKKyAgID8gKGludCkgKChoKS0+bmV4dF9mcmVlID0gKGgpLT5vYmplY3RfYmFzZQkJCQlcCisJICAgID0gKGgpLT50ZW1wLnRlbXBpbnQgKyAoY2hhciAqKSAoaCktPmNodW5rKQkJCVwKKyAgIDogKCgob2JzdGFja19mcmVlKSAoKGgpLCAoaCktPnRlbXAudGVtcGludCArIChjaGFyICopIChoKS0+Y2h1bmspLCAwKSwgMCkpKQorCisjZW5kaWYgLyogbm90IF9fR05VQ19fIG9yIG5vdCBfX1NURENfXyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30JLyogQysrICovCisjZW5kaWYKKworI2VuZGlmIC8qIG9ic3RhY2suaCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3BvbGwvcG9sbC5jIGIvY29tcGF0L3BvbGwvcG9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNGUwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcG9sbC9wb2xsLmMKQEAgLTAsMCArMSw2MjYgQEAKKy8qIEVtdWxhdGlvbiBmb3IgcG9sbCgyKQorICAgQ29udHJpYnV0ZWQgYnkgUGFvbG8gQm9uemluaS4KKworICAgQ29weXJpZ2h0IDIwMDEtMjAwMywgMjAwNi0yMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBnbnVsaWIuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBUZWxsIGdjYyBub3QgdG8gd2FybiBhYm91dCB0aGUgKG5mZCA8IDApIHRlc3RzLCBiZWxvdy4gICovCisjaWYgKF9fR05VQ19fID09IDQgJiYgMyA8PSBfX0dOVUNfTUlOT1JfXykgfHwgNCA8IF9fR05VQ19fCisjIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3R5cGUtbGltaXRzIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdJTjMyKQorIyBpbmNsdWRlIDxtYWxsb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8qIFNwZWNpZmljYXRpb24uICAqLworI2luY2x1ZGUgPHBvbGwuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fCisjIGRlZmluZSBXSU4zMl9OQVRJVkUKKyMgaWYgZGVmaW5lZCAoX01TQ19WRVIpICYmICFkZWZpbmVkKF9XSU4zMl9XSU5OVCkKKyMgIGRlZmluZSBfV0lOMzJfV0lOTlQgMHgwNTAyCisjIGVuZGlmCisjIGluY2x1ZGUgPHdpbnNvY2syLmg+CisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgaW5jbHVkZSA8aW8uaD4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMgaW5jbHVkZSA8Y29uaW8uaD4KKyNlbHNlCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyMgaWZuZGVmIE5PX1NZU19TRUxFQ1RfSAorIyAgaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorIyBlbmRpZgorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorIyBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX0ZJTElPX0gKKyMgaW5jbHVkZSA8c3lzL2ZpbGlvLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHRpbWUuaD4KKworI2lmbmRlZiBJTkZUSU0KKyMgZGVmaW5lIElORlRJTSAoLTEpCisjZW5kaWYKKworLyogQmVPUyBkb2VzIG5vdCBoYXZlIE1TR19QRUVLLiAgKi8KKyNpZm5kZWYgTVNHX1BFRUsKKyMgZGVmaW5lIE1TR19QRUVLIDAKKyNlbmRpZgorCisjaWZkZWYgV0lOMzJfTkFUSVZFCisKKyNkZWZpbmUgSXNDb25zb2xlSGFuZGxlKGgpICgoKGxvbmcpIChoKSAmIDMpID09IDMpCisKK3N0YXRpYyBCT09MCitJc1NvY2tldEhhbmRsZSAoSEFORExFIGgpCit7CisgIFdTQU5FVFdPUktFVkVOVFMgZXY7CisKKyAgaWYgKElzQ29uc29sZUhhbmRsZSAoaCkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIFVuZGVyIFdpbmUsIGl0IHNlZW1zIHRoYXQgZ2V0c29ja29wdCByZXR1cm5zIDAgZm9yIHBpcGVzIHRvby4KKyAgICAgV1NBRW51bU5ldHdvcmtFdmVudHMgaW5zdGVhZCBkaXN0aW5ndWlzaGVzIHRoZSB0d28gY29ycmVjdGx5LiAgKi8KKyAgZXYubE5ldHdvcmtFdmVudHMgPSAweERFQURCRUVGOworICBXU0FFbnVtTmV0d29ya0V2ZW50cyAoKFNPQ0tFVCkgaCwgTlVMTCwgJmV2KTsKKyAgcmV0dXJuIGV2LmxOZXR3b3JrRXZlbnRzICE9IDB4REVBREJFRUY7Cit9CisKKy8qIERlY2xhcmUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBudGRsbCBmdW5jdGlvbnMuICAqLwordHlwZWRlZiBzdHJ1Y3QgX0ZJTEVfUElQRV9MT0NBTF9JTkZPUk1BVElPTiB7CisgIFVMT05HIE5hbWVkUGlwZVR5cGU7CisgIFVMT05HIE5hbWVkUGlwZUNvbmZpZ3VyYXRpb247CisgIFVMT05HIE1heGltdW1JbnN0YW5jZXM7CisgIFVMT05HIEN1cnJlbnRJbnN0YW5jZXM7CisgIFVMT05HIEluYm91bmRRdW90YTsKKyAgVUxPTkcgUmVhZERhdGFBdmFpbGFibGU7CisgIFVMT05HIE91dGJvdW5kUXVvdGE7CisgIFVMT05HIFdyaXRlUXVvdGFBdmFpbGFibGU7CisgIFVMT05HIE5hbWVkUGlwZVN0YXRlOworICBVTE9ORyBOYW1lZFBpcGVFbmQ7Cit9IEZJTEVfUElQRV9MT0NBTF9JTkZPUk1BVElPTiwgKlBGSUxFX1BJUEVfTE9DQUxfSU5GT1JNQVRJT047CisKK3R5cGVkZWYgc3RydWN0IF9JT19TVEFUVVNfQkxPQ0sKK3sKKyAgdW5pb24geworICAgIERXT1JEIFN0YXR1czsKKyAgICBQVk9JRCBQb2ludGVyOworICB9IHU7CisgIFVMT05HX1BUUiBJbmZvcm1hdGlvbjsKK30gSU9fU1RBVFVTX0JMT0NLLCAqUElPX1NUQVRVU19CTE9DSzsKKwordHlwZWRlZiBlbnVtIF9GSUxFX0lORk9STUFUSU9OX0NMQVNTIHsKKyAgRmlsZVBpcGVMb2NhbEluZm9ybWF0aW9uID0gMjQKK30gRklMRV9JTkZPUk1BVElPTl9DTEFTUywgKlBGSUxFX0lORk9STUFUSU9OX0NMQVNTOworCit0eXBlZGVmIERXT1JEIChXSU5BUEkgKlBOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlKQorCSAoSEFORExFLCBJT19TVEFUVVNfQkxPQ0sgKiwgVk9JRCAqLCBVTE9ORywgRklMRV9JTkZPUk1BVElPTl9DTEFTUyk7CisKKyMgaWZuZGVmIFBJUEVfQlVGCisjICBkZWZpbmUgUElQRV9CVUYgICAgICA1MTIKKyMgZW5kaWYKKworLyogQ29tcHV0ZSByZXZlbnRzIHZhbHVlcyBmb3IgZmlsZSBoYW5kbGUgSC4gIElmIHNvbWUgZXZlbnRzIGNhbm5vdCBoYXBwZW4KKyAgIGZvciB0aGUgaGFuZGxlLCBlbGltaW5hdGUgdGhlbSBmcm9tICpQX1NPVUdIVC4gICovCisKK3N0YXRpYyBpbnQKK3dpbjMyX2NvbXB1dGVfcmV2ZW50cyAoSEFORExFIGgsIGludCAqcF9zb3VnaHQpCit7CisgIGludCBpLCByZXQsIGhhcHBlbmVkOworICBJTlBVVF9SRUNPUkQgKmlyYnVmZmVyOworICBEV09SRCBhdmFpbCwgbmJ1ZmZlcjsKKyAgQk9PTCBiUmV0OworICBJT19TVEFUVVNfQkxPQ0sgaW9zYjsKKyAgRklMRV9QSVBFX0xPQ0FMX0lORk9STUFUSU9OIGZwbGk7CisgIHN0YXRpYyBQTnRRdWVyeUluZm9ybWF0aW9uRmlsZSBOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlOworICBzdGF0aWMgQk9PTCBvbmNlX29ubHk7CisKKyAgc3dpdGNoIChHZXRGaWxlVHlwZSAoaCkpCisgICAgeworICAgIGNhc2UgRklMRV9UWVBFX1BJUEU6CisgICAgICBpZiAoIW9uY2Vfb25seSkKKwl7CisJICBOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlID0gKFBOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlKQorCSAgICBHZXRQcm9jQWRkcmVzcyAoR2V0TW9kdWxlSGFuZGxlICgibnRkbGwuZGxsIiksCisJCQkgICAgIk50UXVlcnlJbmZvcm1hdGlvbkZpbGUiKTsKKwkgIG9uY2Vfb25seSA9IFRSVUU7CisJfQorCisgICAgICBoYXBwZW5lZCA9IDA7CisgICAgICBpZiAoUGVla05hbWVkUGlwZSAoaCwgTlVMTCwgMCwgTlVMTCwgJmF2YWlsLCBOVUxMKSAhPSAwKQorCXsKKwkgIGlmIChhdmFpbCkKKwkgICAgaGFwcGVuZWQgfD0gKnBfc291Z2h0ICYgKFBPTExJTiB8IFBPTExSRE5PUk0pOworCX0KKyAgICAgIGVsc2UgaWYgKEdldExhc3RFcnJvciAoKSA9PSBFUlJPUl9CUk9LRU5fUElQRSkKKwloYXBwZW5lZCB8PSBQT0xMSFVQOworCisgICAgICBlbHNlCisJeworCSAgLyogSXQgd2FzIHRoZSB3cml0ZS1lbmQgb2YgdGhlIHBpcGUuICBDaGVjayBpZiBpdCBpcyB3cml0YWJsZS4KKwkgICAgIElmIE50UXVlcnlJbmZvcm1hdGlvbkZpbGUgZmFpbHMsIG9wdGltaXN0aWNhbGx5IGFzc3VtZSB0aGUgcGlwZSBpcworCSAgICAgd3JpdGFibGUuICBUaGlzIGNvdWxkIGhhcHBlbiBvbiBXaW45eCwgd2hlcmUgTnRRdWVyeUluZm9ybWF0aW9uRmlsZQorCSAgICAgaXMgbm90IGF2YWlsYWJsZSwgb3IgaWYgd2UgaW5oZXJpdCBhIHBpcGUgdGhhdCBkb2Vzbid0IHBlcm1pdAorCSAgICAgRklMRV9SRUFEX0FUVFJJQlVURVMgYWNjZXNzIG9uIHRoZSB3cml0ZSBlbmQgKEkgdGhpbmsgdGhpcyBzaG91bGQKKwkgICAgIG5vdCBoYXBwZW4gc2luY2UgV2luWFAgU1AyOyBXSU5FIHNlZW1zIGZpbmUgdG9vKS4gIE90aGVyd2lzZSwKKwkgICAgIGVuc3VyZSB0aGF0IGVub3VnaCBzcGFjZSBpcyBhdmFpbGFibGUgZm9yIGF0b21pYyB3cml0ZXMuICAqLworCSAgbWVtc2V0ICgmaW9zYiwgMCwgc2l6ZW9mIChpb3NiKSk7CisJICBtZW1zZXQgKCZmcGxpLCAwLCBzaXplb2YgKGZwbGkpKTsKKworCSAgaWYgKCFOdFF1ZXJ5SW5mb3JtYXRpb25GaWxlCisJICAgICAgfHwgTnRRdWVyeUluZm9ybWF0aW9uRmlsZSAoaCwgJmlvc2IsICZmcGxpLCBzaXplb2YgKGZwbGkpLAorCQkJCQkgRmlsZVBpcGVMb2NhbEluZm9ybWF0aW9uKQorCSAgICAgIHx8IGZwbGkuV3JpdGVRdW90YUF2YWlsYWJsZSA+PSBQSVBFX0JVRgorCSAgICAgIHx8IChmcGxpLk91dGJvdW5kUXVvdGEgPCBQSVBFX0JVRiAmJgorCQkgIGZwbGkuV3JpdGVRdW90YUF2YWlsYWJsZSA9PSBmcGxpLk91dGJvdW5kUXVvdGEpKQorCSAgICBoYXBwZW5lZCB8PSAqcF9zb3VnaHQgJiAoUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKTsKKwl9CisgICAgICByZXR1cm4gaGFwcGVuZWQ7CisKKyAgICBjYXNlIEZJTEVfVFlQRV9DSEFSOgorICAgICAgcmV0ID0gV2FpdEZvclNpbmdsZU9iamVjdCAoaCwgMCk7CisgICAgICBpZiAoIUlzQ29uc29sZUhhbmRsZSAoaCkpCisJcmV0dXJuIHJldCA9PSBXQUlUX09CSkVDVF8wID8gKnBfc291Z2h0ICYgfihQT0xMUFJJIHwgUE9MTFJEQkFORCkgOiAwOworCisgICAgICBuYnVmZmVyID0gYXZhaWwgPSAwOworICAgICAgYlJldCA9IEdldE51bWJlck9mQ29uc29sZUlucHV0RXZlbnRzIChoLCAmbmJ1ZmZlcik7CisgICAgICBpZiAoYlJldCkKKwl7CisJICAvKiBJbnB1dCBidWZmZXIuICAqLworCSAgKnBfc291Z2h0ICY9IFBPTExJTiB8IFBPTExSRE5PUk07CisJICBpZiAobmJ1ZmZlciA9PSAwKQorCSAgICByZXR1cm4gUE9MTEhVUDsKKwkgIGlmICghKnBfc291Z2h0KQorCSAgICByZXR1cm4gMDsKKworCSAgaXJidWZmZXIgPSAoSU5QVVRfUkVDT1JEICopIGFsbG9jYSAobmJ1ZmZlciAqIHNpemVvZiAoSU5QVVRfUkVDT1JEKSk7CisJICBiUmV0ID0gUGVla0NvbnNvbGVJbnB1dCAoaCwgaXJidWZmZXIsIG5idWZmZXIsICZhdmFpbCk7CisJICBpZiAoIWJSZXQgfHwgYXZhaWwgPT0gMCkKKwkgICAgcmV0dXJuIFBPTExIVVA7CisKKwkgIGZvciAoaSA9IDA7IGkgPCBhdmFpbDsgaSsrKQorCSAgICBpZiAoaXJidWZmZXJbaV0uRXZlbnRUeXBlID09IEtFWV9FVkVOVCkKKwkgICAgICByZXR1cm4gKnBfc291Z2h0OworCSAgcmV0dXJuIDA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFNjcmVlbiBidWZmZXIuICAqLworCSAgKnBfc291Z2h0ICY9IFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORDsKKwkgIHJldHVybiAqcF9zb3VnaHQ7CisJfQorCisgICAgZGVmYXVsdDoKKyAgICAgIHJldCA9IFdhaXRGb3JTaW5nbGVPYmplY3QgKGgsIDApOworICAgICAgaWYgKHJldCA9PSBXQUlUX09CSkVDVF8wKQorCXJldHVybiAqcF9zb3VnaHQgJiB+KFBPTExQUkkgfCBQT0xMUkRCQU5EKTsKKworICAgICAgcmV0dXJuICpwX3NvdWdodCAmIChQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQpOworICAgIH0KK30KKworLyogQ29udmVydCBmZF9zZXRzIHJldHVybmVkIGJ5IHNlbGVjdCBpbnRvIHJldmVudHMgdmFsdWVzLiAgKi8KKworc3RhdGljIGludAord2luMzJfY29tcHV0ZV9yZXZlbnRzX3NvY2tldCAoU09DS0VUIGgsIGludCBzb3VnaHQsIGxvbmcgbE5ldHdvcmtFdmVudHMpCit7CisgIGludCBoYXBwZW5lZCA9IDA7CisKKyAgaWYgKChsTmV0d29ya0V2ZW50cyAmIChGRF9SRUFEIHwgRkRfQUNDRVBUIHwgRkRfQ0xPU0UpKSA9PSBGRF9BQ0NFUFQpCisgICAgaGFwcGVuZWQgfD0gKFBPTExJTiB8IFBPTExSRE5PUk0pICYgc291Z2h0OworCisgIGVsc2UgaWYgKGxOZXR3b3JrRXZlbnRzICYgKEZEX1JFQUQgfCBGRF9BQ0NFUFQgfCBGRF9DTE9TRSkpCisgICAgeworICAgICAgaW50IHIsIGVycm9yOworCisgICAgICBjaGFyIGRhdGFbNjRdOworICAgICAgV1NBU2V0TGFzdEVycm9yICgwKTsKKyAgICAgIHIgPSByZWN2IChoLCBkYXRhLCBzaXplb2YgKGRhdGEpLCBNU0dfUEVFSyk7CisgICAgICBlcnJvciA9IFdTQUdldExhc3RFcnJvciAoKTsKKyAgICAgIFdTQVNldExhc3RFcnJvciAoMCk7CisKKyAgICAgIGlmIChyID4gMCB8fCBlcnJvciA9PSBXU0FFTk9UQ09OTikKKwloYXBwZW5lZCB8PSAoUE9MTElOIHwgUE9MTFJETk9STSkgJiBzb3VnaHQ7CisKKyAgICAgIC8qIERpc3Rpbmd1aXNoIGh1bmctdXAgc29ja2V0cyBmcm9tIG90aGVyIGVycm9ycy4gICovCisgICAgICBlbHNlIGlmIChyID09IDAgfHwgZXJyb3IgPT0gV1NBRVNIVVRET1dOIHx8IGVycm9yID09IFdTQUVDT05OUkVTRVQKKwkgICAgICAgfHwgZXJyb3IgPT0gV1NBRUNPTk5BQk9SVEVEIHx8IGVycm9yID09IFdTQUVORVRSRVNFVCkKKwloYXBwZW5lZCB8PSBQT0xMSFVQOworCisgICAgICBlbHNlCisJaGFwcGVuZWQgfD0gUE9MTEVSUjsKKyAgICB9CisKKyAgaWYgKGxOZXR3b3JrRXZlbnRzICYgKEZEX1dSSVRFIHwgRkRfQ09OTkVDVCkpCisgICAgaGFwcGVuZWQgfD0gKFBPTExPVVQgfCBQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCkgJiBzb3VnaHQ7CisKKyAgaWYgKGxOZXR3b3JrRXZlbnRzICYgRkRfT09CKQorICAgIGhhcHBlbmVkIHw9IChQT0xMUFJJIHwgUE9MTFJEQkFORCkgJiBzb3VnaHQ7CisKKyAgcmV0dXJuIGhhcHBlbmVkOworfQorCisjZWxzZSAvKiAhTWluR1cgKi8KKworLyogQ29udmVydCBzZWxlY3QoMikgcmV0dXJuZWQgZmRfc2V0cyBpbnRvIHBvbGwoMikgcmV2ZW50cyB2YWx1ZXMuICAqLworc3RhdGljIGludAorY29tcHV0ZV9yZXZlbnRzIChpbnQgZmQsIGludCBzb3VnaHQsIGZkX3NldCAqcmZkcywgZmRfc2V0ICp3ZmRzLCBmZF9zZXQgKmVmZHMpCit7CisgIGludCBoYXBwZW5lZCA9IDA7CisgIGlmIChGRF9JU1NFVCAoZmQsIHJmZHMpKQorICAgIHsKKyAgICAgIGludCByOworICAgICAgaW50IHNvY2tldF9lcnJubzsKKworIyBpZiBkZWZpbmVkIF9fTUFDSF9fICYmIGRlZmluZWQgX19BUFBMRV9fCisgICAgICAvKiBUaGVyZSBpcyBhIGJ1ZyBpbiBNYWMgT1MgWCB0aGF0IGNhdXNlcyBpdCB0byBpZ25vcmUgTVNHX1BFRUsKKwkgZm9yIHNvbWUga2luZHMgb2YgZGVzY3JpcHRvcnMuICBEZXRlY3QgaWYgdGhpcyBkZXNjcmlwdG9yIGlzIGEKKwkgY29ubmVjdGVkIHNvY2tldCwgYSBzZXJ2ZXIgc29ja2V0LCBvciBzb21ldGhpbmcgZWxzZSB1c2luZyBhCisJIDAtYnl0ZSByZWN2LCBhbmQgdXNlIGlvY3RsKDIpIHRvIGRldGVjdCBQT0xMSFVQLiAgKi8KKyAgICAgIHIgPSByZWN2IChmZCwgTlVMTCwgMCwgTVNHX1BFRUspOworICAgICAgc29ja2V0X2Vycm5vID0gKHIgPCAwKSA/IGVycm5vIDogMDsKKyAgICAgIGlmIChyID09IDAgfHwgc29ja2V0X2Vycm5vID09IEVOT1RTT0NLKQorCWlvY3RsIChmZCwgRklPTlJFQUQsICZyKTsKKyMgZWxzZQorICAgICAgY2hhciBkYXRhWzY0XTsKKyAgICAgIHIgPSByZWN2IChmZCwgZGF0YSwgc2l6ZW9mIChkYXRhKSwgTVNHX1BFRUspOworICAgICAgc29ja2V0X2Vycm5vID0gKHIgPCAwKSA/IGVycm5vIDogMDsKKyMgZW5kaWYKKyAgICAgIGlmIChyID09IDApCisJaGFwcGVuZWQgfD0gUE9MTEhVUDsKKworICAgICAgLyogSWYgdGhlIGV2ZW50IGhhcHBlbmVkIG9uIGFuIHVuY29ubmVjdGVkIHNlcnZlciBzb2NrZXQsCisJIHRoYXQncyBmaW5lLiAqLworICAgICAgZWxzZSBpZiAociA+IDAgfHwgKCAvKiAociA9PSAtMSkgJiYgKi8gc29ja2V0X2Vycm5vID09IEVOT1RDT05OKSkKKwloYXBwZW5lZCB8PSAoUE9MTElOIHwgUE9MTFJETk9STSkgJiBzb3VnaHQ7CisKKyAgICAgIC8qIERpc3Rpbmd1aXNoIGh1bmctdXAgc29ja2V0cyBmcm9tIG90aGVyIGVycm9ycy4gICovCisgICAgICBlbHNlIGlmIChzb2NrZXRfZXJybm8gPT0gRVNIVVRET1dOIHx8IHNvY2tldF9lcnJubyA9PSBFQ09OTlJFU0VUCisJICAgICAgIHx8IHNvY2tldF9lcnJubyA9PSBFQ09OTkFCT1JURUQgfHwgc29ja2V0X2Vycm5vID09IEVORVRSRVNFVCkKKwloYXBwZW5lZCB8PSBQT0xMSFVQOworCisgICAgICAvKiBzb21lIHN5c3RlbXMgY2FuJ3QgdXNlIHJlY3YoKSBvbiBub24tc29ja2V0LCBpbmNsdWRpbmcgSFAgTm9uU3RvcCAqLworICAgICAgZWxzZSBpZiAoLyogKHIgPT0gLTEpICYmICovIHNvY2tldF9lcnJubyA9PSBFTk9UU09DSykKKwloYXBwZW5lZCB8PSAoUE9MTElOIHwgUE9MTFJETk9STSkgJiBzb3VnaHQ7CisKKyAgICAgIGVsc2UKKwloYXBwZW5lZCB8PSBQT0xMRVJSOworICAgIH0KKworICBpZiAoRkRfSVNTRVQgKGZkLCB3ZmRzKSkKKyAgICBoYXBwZW5lZCB8PSAoUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKSAmIHNvdWdodDsKKworICBpZiAoRkRfSVNTRVQgKGZkLCBlZmRzKSkKKyAgICBoYXBwZW5lZCB8PSAoUE9MTFBSSSB8IFBPTExSREJBTkQpICYgc291Z2h0OworCisgIHJldHVybiBoYXBwZW5lZDsKK30KKyNlbmRpZiAvKiAhTWluR1cgKi8KKworaW50Citwb2xsIChzdHJ1Y3QgcG9sbGZkICpwZmQsIG5mZHNfdCBuZmQsIGludCB0aW1lb3V0KQoreworI2lmbmRlZiBXSU4zMl9OQVRJVkUKKyAgZmRfc2V0IHJmZHMsIHdmZHMsIGVmZHM7CisgIHN0cnVjdCB0aW1ldmFsIHR2OworICBzdHJ1Y3QgdGltZXZhbCAqcHR2OworICBpbnQgbWF4ZmQsIHJjOworICBuZmRzX3QgaTsKKworIyBpZmRlZiBfU0NfT1BFTl9NQVgKKyAgc3RhdGljIGludCBzY19vcGVuX21heCA9IC0xOworCisgIGlmIChuZmQgPCAwCisgICAgICB8fCAobmZkID4gc2Nfb3Blbl9tYXgKKwkgICYmIChzY19vcGVuX21heCAhPSAtMQorCSAgICAgIHx8IG5mZCA+IChzY19vcGVuX21heCA9IHN5c2NvbmYgKF9TQ19PUEVOX01BWCkpKSkpCisgICAgeworICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorIyBlbHNlIC8qICFfU0NfT1BFTl9NQVggKi8KKyMgIGlmZGVmIE9QRU5fTUFYCisgIGlmIChuZmQgPCAwIHx8IG5mZCA+IE9QRU5fTUFYKQorICAgIHsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKyMgIGVuZGlmIC8qIE9QRU5fTUFYIC0tIGVsc2UsIG5vIGNoZWNrIGlzIG5lZWRlZCAqLworIyBlbmRpZiAvKiAhX1NDX09QRU5fTUFYICovCisKKyAgLyogRUZBVUxUIGlzIG5vdCBuZWNlc3NhcnkgdG8gaW1wbGVtZW50LCBidXQgbGV0J3MgZG8gaXQgaW4gdGhlCisgICAgIHNpbXBsZXN0IGNhc2UuICovCisgIGlmICghcGZkICYmIG5mZCkKKyAgICB7CisgICAgICBlcnJubyA9IEVGQVVMVDsKKyAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgLyogY29udmVydCB0aW1lb3V0IG51bWJlciBpbnRvIGEgdGltZXZhbCBzdHJ1Y3R1cmUgKi8KKyAgaWYgKHRpbWVvdXQgPT0gMCkKKyAgICB7CisgICAgICBwdHYgPSAmdHY7CisgICAgICBwdHYtPnR2X3NlYyA9IDA7CisgICAgICBwdHYtPnR2X3VzZWMgPSAwOworICAgIH0KKyAgZWxzZSBpZiAodGltZW91dCA+IDApCisgICAgeworICAgICAgcHR2ID0gJnR2OworICAgICAgcHR2LT50dl9zZWMgPSB0aW1lb3V0IC8gMTAwMDsKKyAgICAgIHB0di0+dHZfdXNlYyA9ICh0aW1lb3V0ICUgMTAwMCkgKiAxMDAwOworICAgIH0KKyAgZWxzZSBpZiAodGltZW91dCA9PSBJTkZUSU0pCisgICAgLyogd2FpdCBmb3JldmVyICovCisgICAgcHR2ID0gTlVMTDsKKyAgZWxzZQorICAgIHsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAvKiBjcmVhdGUgZmQgc2V0cyBhbmQgZGV0ZXJtaW5lIG1heCBmZCAqLworICBtYXhmZCA9IC0xOworICBGRF9aRVJPICgmcmZkcyk7CisgIEZEX1pFUk8gKCZ3ZmRzKTsKKyAgRkRfWkVSTyAoJmVmZHMpOworICBmb3IgKGkgPSAwOyBpIDwgbmZkOyBpKyspCisgICAgeworICAgICAgaWYgKHBmZFtpXS5mZCA8IDApCisJY29udGludWU7CisKKyAgICAgIGlmIChwZmRbaV0uZXZlbnRzICYgKFBPTExJTiB8IFBPTExSRE5PUk0pKQorCUZEX1NFVCAocGZkW2ldLmZkLCAmcmZkcyk7CisKKyAgICAgIC8qIHNlZSBzZWxlY3QoMik6ICJ0aGUgb25seSBleGNlcHRpb25hbCBjb25kaXRpb24gZGV0ZWN0YWJsZQorCSBpcyBvdXQtb2YtYmFuZCBkYXRhIHJlY2VpdmVkIG9uIGEgc29ja2V0IiwgaGVuY2Ugd2UgcHVzaAorCSBQT0xMV1JCQU5EIGV2ZW50cyBvbnRvIHdmZHMgaW5zdGVhZCBvZiBlZmRzLiAqLworICAgICAgaWYgKHBmZFtpXS5ldmVudHMgJiAoUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKSkKKwlGRF9TRVQgKHBmZFtpXS5mZCwgJndmZHMpOworICAgICAgaWYgKHBmZFtpXS5ldmVudHMgJiAoUE9MTFBSSSB8IFBPTExSREJBTkQpKQorCUZEX1NFVCAocGZkW2ldLmZkLCAmZWZkcyk7CisgICAgICBpZiAocGZkW2ldLmZkID49IG1heGZkCisJICAmJiAocGZkW2ldLmV2ZW50cyAmIChQT0xMSU4gfCBQT0xMT1VUIHwgUE9MTFBSSQorCQkJICAgICAgIHwgUE9MTFJETk9STSB8IFBPTExSREJBTkQKKwkJCSAgICAgICB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKSkpCisJeworCSAgbWF4ZmQgPSBwZmRbaV0uZmQ7CisJICBpZiAobWF4ZmQgPiBGRF9TRVRTSVpFKQorCSAgICB7CisJICAgICAgZXJybm8gPSBFT1ZFUkZMT1c7CisJICAgICAgcmV0dXJuIC0xOworCSAgICB9CisJfQorICAgIH0KKworICAvKiBleGFtaW5lIGZkIHNldHMgKi8KKyAgcmMgPSBzZWxlY3QgKG1heGZkICsgMSwgJnJmZHMsICZ3ZmRzLCAmZWZkcywgcHR2KTsKKyAgaWYgKHJjIDwgMCkKKyAgICByZXR1cm4gcmM7CisKKyAgLyogZXN0YWJsaXNoIHJlc3VsdHMgKi8KKyAgcmMgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgbmZkOyBpKyspCisgICAgaWYgKHBmZFtpXS5mZCA8IDApCisgICAgICBwZmRbaV0ucmV2ZW50cyA9IDA7CisgICAgZWxzZQorICAgICAgeworCWludCBoYXBwZW5lZCA9IGNvbXB1dGVfcmV2ZW50cyAocGZkW2ldLmZkLCBwZmRbaV0uZXZlbnRzLAorCQkJCQkmcmZkcywgJndmZHMsICZlZmRzKTsKKwlpZiAoaGFwcGVuZWQpCisJICB7CisJICAgIHBmZFtpXS5yZXZlbnRzID0gaGFwcGVuZWQ7CisJICAgIHJjKys7CisJICB9CisgICAgICB9CisKKyAgcmV0dXJuIHJjOworI2Vsc2UKKyAgc3RhdGljIHN0cnVjdCB0aW1ldmFsIHR2MDsKKyAgc3RhdGljIEhBTkRMRSBoRXZlbnQ7CisgIFdTQU5FVFdPUktFVkVOVFMgZXY7CisgIEhBTkRMRSBoLCBoYW5kbGVfYXJyYXlbRkRfU0VUU0laRSArIDJdOworICBEV09SRCByZXQsIHdhaXRfdGltZW91dCwgbmhhbmRsZXMsIHN0YXJ0ID0gMCwgZWxhcHNlZCwgb3JpZ190aW1lb3V0ID0gMDsKKyAgZmRfc2V0IHJmZHMsIHdmZHMsIHhmZHM7CisgIEJPT0wgcG9sbF9hZ2FpbjsKKyAgTVNHIG1zZzsKKyAgaW50IHJjID0gMDsKKyAgbmZkc190IGk7CisKKyAgaWYgKG5mZCA8IDAgfHwgdGltZW91dCA8IC0xKQorICAgIHsKKyAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICBpZiAodGltZW91dCAhPSBJTkZUSU0pCisgICAgeworICAgICAgb3JpZ190aW1lb3V0ID0gdGltZW91dDsKKyAgICAgIHN0YXJ0ID0gR2V0VGlja0NvdW50KCk7CisgICAgfQorCisgIGlmICghaEV2ZW50KQorICAgIGhFdmVudCA9IENyZWF0ZUV2ZW50IChOVUxMLCBGQUxTRSwgRkFMU0UsIE5VTEwpOworCityZXN0YXJ0OgorICBoYW5kbGVfYXJyYXlbMF0gPSBoRXZlbnQ7CisgIG5oYW5kbGVzID0gMTsKKyAgRkRfWkVSTyAoJnJmZHMpOworICBGRF9aRVJPICgmd2Zkcyk7CisgIEZEX1pFUk8gKCZ4ZmRzKTsKKworICAvKiBDbGFzc2lmeSBzb2NrZXQgaGFuZGxlcyBhbmQgY3JlYXRlIGZkIHNldHMuICovCisgIGZvciAoaSA9IDA7IGkgPCBuZmQ7IGkrKykKKyAgICB7CisgICAgICBpbnQgc291Z2h0ID0gcGZkW2ldLmV2ZW50czsKKyAgICAgIHBmZFtpXS5yZXZlbnRzID0gMDsKKyAgICAgIGlmIChwZmRbaV0uZmQgPCAwKQorCWNvbnRpbnVlOworICAgICAgaWYgKCEoc291Z2h0ICYgKFBPTExJTiB8IFBPTExSRE5PUk0gfCBQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQKKwkJICAgICAgfCBQT0xMUFJJIHwgUE9MTFJEQkFORCkpKQorCWNvbnRpbnVlOworCisgICAgICBoID0gKEhBTkRMRSkgX2dldF9vc2ZoYW5kbGUgKHBmZFtpXS5mZCk7CisgICAgICBhc3NlcnQgKGggIT0gTlVMTCk7CisgICAgICBpZiAoSXNTb2NrZXRIYW5kbGUgKGgpKQorCXsKKwkgIGludCByZXF1ZXN0ZWQgPSBGRF9DTE9TRTsKKworCSAgLyogc2VlIGFib3ZlOyBzb2NrZXQgaGFuZGxlcyBhcmUgbWFwcGVkIG9udG8gc2VsZWN0LiAgKi8KKwkgIGlmIChzb3VnaHQgJiAoUE9MTElOIHwgUE9MTFJETk9STSkpCisJICAgIHsKKwkgICAgICByZXF1ZXN0ZWQgfD0gRkRfUkVBRCB8IEZEX0FDQ0VQVDsKKwkgICAgICBGRF9TRVQgKChTT0NLRVQpIGgsICZyZmRzKTsKKwkgICAgfQorCSAgaWYgKHNvdWdodCAmIChQT0xMT1VUIHwgUE9MTFdSTk9STSB8IFBPTExXUkJBTkQpKQorCSAgICB7CisJICAgICAgcmVxdWVzdGVkIHw9IEZEX1dSSVRFIHwgRkRfQ09OTkVDVDsKKwkgICAgICBGRF9TRVQgKChTT0NLRVQpIGgsICZ3ZmRzKTsKKwkgICAgfQorCSAgaWYgKHNvdWdodCAmIChQT0xMUFJJIHwgUE9MTFJEQkFORCkpCisJICAgIHsKKwkgICAgICByZXF1ZXN0ZWQgfD0gRkRfT09COworCSAgICAgIEZEX1NFVCAoKFNPQ0tFVCkgaCwgJnhmZHMpOworCSAgICB9CisKKwkgIGlmIChyZXF1ZXN0ZWQpCisJICAgIFdTQUV2ZW50U2VsZWN0ICgoU09DS0VUKSBoLCBoRXZlbnQsIHJlcXVlc3RlZCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFBvbGwgbm93LiAgSWYgd2UgZ2V0IGFuIGV2ZW50LCBkbyBub3QgcG9sbCBhZ2Fpbi4gIEFsc28sCisJICAgICBzY3JlZW4gYnVmZmVyIGhhbmRsZXMgYXJlIHdhaXRhYmxlLCBhbmQgdGhleSdsbCBibG9jayB1bnRpbAorCSAgICAgYSBjaGFyYWN0ZXIgaXMgYXZhaWxhYmxlLiAgd2luMzJfY29tcHV0ZV9yZXZlbnRzIGVsaW1pbmF0ZXMKKwkgICAgIGJpdHMgZm9yIHRoZSAid3JvbmciIGRpcmVjdGlvbi4gKi8KKwkgIHBmZFtpXS5yZXZlbnRzID0gd2luMzJfY29tcHV0ZV9yZXZlbnRzIChoLCAmc291Z2h0KTsKKwkgIGlmIChzb3VnaHQpCisJICAgIGhhbmRsZV9hcnJheVtuaGFuZGxlcysrXSA9IGg7CisJICBpZiAocGZkW2ldLnJldmVudHMpCisJICAgIHRpbWVvdXQgPSAwOworCX0KKyAgICB9CisKKyAgaWYgKHNlbGVjdCAoMCwgJnJmZHMsICZ3ZmRzLCAmeGZkcywgJnR2MCkgPiAwKQorICAgIHsKKyAgICAgIC8qIERvIE1zZ1dhaXRGb3JNdWx0aXBsZU9iamVjdHMgYW55d2F5IHRvIGRpc3BhdGNoIG1lc3NhZ2VzLCBidXQKKwkgbm8gbmVlZCB0byBjYWxsIHNlbGVjdCBhZ2Fpbi4gICovCisgICAgICBwb2xsX2FnYWluID0gRkFMU0U7CisgICAgICB3YWl0X3RpbWVvdXQgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHBvbGxfYWdhaW4gPSBUUlVFOworICAgICAgaWYgKHRpbWVvdXQgPT0gSU5GVElNKQorCXdhaXRfdGltZW91dCA9IElORklOSVRFOworICAgICAgZWxzZQorCXdhaXRfdGltZW91dCA9IHRpbWVvdXQ7CisgICAgfQorCisgIGZvciAoOzspCisgICAgeworICAgICAgcmV0ID0gTXNnV2FpdEZvck11bHRpcGxlT2JqZWN0cyAobmhhbmRsZXMsIGhhbmRsZV9hcnJheSwgRkFMU0UsCisJCQkJICAgICAgIHdhaXRfdGltZW91dCwgUVNfQUxMSU5QVVQpOworCisgICAgICBpZiAocmV0ID09IFdBSVRfT0JKRUNUXzAgKyBuaGFuZGxlcykKKwl7CisJICAvKiBuZXcgaW5wdXQgb2Ygc29tZSBvdGhlciBraW5kICovCisJICBCT09MIGJSZXQ7CisJICB3aGlsZSAoKGJSZXQgPSBQZWVrTWVzc2FnZSAoJm1zZywgTlVMTCwgMCwgMCwgUE1fUkVNT1ZFKSkgIT0gMCkKKwkgICAgeworCSAgICAgIFRyYW5zbGF0ZU1lc3NhZ2UgKCZtc2cpOworCSAgICAgIERpc3BhdGNoTWVzc2FnZSAoJm1zZyk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJYnJlYWs7CisgICAgfQorCisgIGlmIChwb2xsX2FnYWluKQorICAgIHNlbGVjdCAoMCwgJnJmZHMsICZ3ZmRzLCAmeGZkcywgJnR2MCk7CisKKyAgLyogUGxhY2UgYSBzZW50aW5lbCBhdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4gICovCisgIGhhbmRsZV9hcnJheVtuaGFuZGxlc10gPSBOVUxMOworICBuaGFuZGxlcyA9IDE7CisgIGZvciAoaSA9IDA7IGkgPCBuZmQ7IGkrKykKKyAgICB7CisgICAgICBpbnQgaGFwcGVuZWQ7CisKKyAgICAgIGlmIChwZmRbaV0uZmQgPCAwKQorCWNvbnRpbnVlOworICAgICAgaWYgKCEocGZkW2ldLmV2ZW50cyAmIChQT0xMSU4gfCBQT0xMUkROT1JNIHwKKwkJCSAgICAgUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKSkpCisJY29udGludWU7CisKKyAgICAgIGggPSAoSEFORExFKSBfZ2V0X29zZmhhbmRsZSAocGZkW2ldLmZkKTsKKyAgICAgIGlmIChoICE9IGhhbmRsZV9hcnJheVtuaGFuZGxlc10pCisJeworCSAgLyogSXQncyBhIHNvY2tldC4gICovCisJICBXU0FFbnVtTmV0d29ya0V2ZW50cyAoKFNPQ0tFVCkgaCwgTlVMTCwgJmV2KTsKKwkgIFdTQUV2ZW50U2VsZWN0ICgoU09DS0VUKSBoLCBOVUxMLCAwKTsKKworCSAgLyogSWYgd2UncmUgbHVja3ksIFdTQUVudW1OZXR3b3JrRXZlbnRzIGFscmVhZHkgcHJvdmlkZWQgYSB3YXkKKwkgICAgIHRvIGRpc3Rpbmd1aXNoIEZEX1JFQUQgYW5kIEZEX0FDQ0VQVDsgdGhpcyBzYXZlcyBhIHJlY3YgbGF0ZXIuICAqLworCSAgaWYgKEZEX0lTU0VUICgoU09DS0VUKSBoLCAmcmZkcykKKwkgICAgICAmJiAhKGV2LmxOZXR3b3JrRXZlbnRzICYgKEZEX1JFQUQgfCBGRF9BQ0NFUFQpKSkKKwkgICAgZXYubE5ldHdvcmtFdmVudHMgfD0gRkRfUkVBRCB8IEZEX0FDQ0VQVDsKKwkgIGlmIChGRF9JU1NFVCAoKFNPQ0tFVCkgaCwgJndmZHMpKQorCSAgICBldi5sTmV0d29ya0V2ZW50cyB8PSBGRF9XUklURSB8IEZEX0NPTk5FQ1Q7CisJICBpZiAoRkRfSVNTRVQgKChTT0NLRVQpIGgsICZ4ZmRzKSkKKwkgICAgZXYubE5ldHdvcmtFdmVudHMgfD0gRkRfT09COworCisJICBoYXBwZW5lZCA9IHdpbjMyX2NvbXB1dGVfcmV2ZW50c19zb2NrZXQgKChTT0NLRVQpIGgsIHBmZFtpXS5ldmVudHMsCisJCQkJCQkgICBldi5sTmV0d29ya0V2ZW50cyk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIE5vdCBhIHNvY2tldC4gICovCisJICBpbnQgc291Z2h0ID0gcGZkW2ldLmV2ZW50czsKKwkgIGhhcHBlbmVkID0gd2luMzJfY29tcHV0ZV9yZXZlbnRzIChoLCAmc291Z2h0KTsKKwkgIG5oYW5kbGVzKys7CisJfQorCisgICAgICAgaWYgKChwZmRbaV0ucmV2ZW50cyB8PSBoYXBwZW5lZCkgIT0gMCkKKwlyYysrOworICAgIH0KKworICBpZiAoIXJjICYmIG9yaWdfdGltZW91dCAmJiB0aW1lb3V0ICE9IElORlRJTSkKKyAgICB7CisgICAgICBlbGFwc2VkID0gR2V0VGlja0NvdW50KCkgLSBzdGFydDsKKyAgICAgIHRpbWVvdXQgPSBlbGFwc2VkID49IG9yaWdfdGltZW91dCA/IDAgOiBvcmlnX3RpbWVvdXQgLSBlbGFwc2VkOworICAgIH0KKworICBpZiAoIXJjICYmIHRpbWVvdXQpCisgICAgeworICAgICAgU2xlZXBFeCAoMSwgVFJVRSk7CisgICAgICBnb3RvIHJlc3RhcnQ7CisgICAgfQorCisgIHJldHVybiByYzsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3BvbGwvcG9sbC5oIGIvY29tcGF0L3BvbGwvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YWE1OWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcG9sbC9wb2xsLmgKQEAgLTAsMCArMSw1MyBAQAorLyogSGVhZGVyIGZvciBwb2xsKDIpIGVtdWxhdGlvbgorICAgQ29udHJpYnV0ZWQgYnkgUGFvbG8gQm9uemluaS4KKworICAgQ29weXJpZ2h0IDIwMDEsIDIwMDIsIDIwMDMsIDIwMDcsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGdudWxpYi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKyNpZm5kZWYgX0dMX1BPTExfSAorI2RlZmluZSBfR0xfUE9MTF9ICisKKy8qIGZha2UgYSBwb2xsKDIpIGVudmlyb25tZW50ICovCisjZGVmaW5lIFBPTExJTiAgICAgIDB4MDAwMSAgICAgIC8qIGFueSByZWFkYWJsZSBkYXRhIGF2YWlsYWJsZSAgICovCisjZGVmaW5lIFBPTExQUkkgICAgIDB4MDAwMiAgICAgIC8qIE9PQi9VcmdlbnQgcmVhZGFibGUgZGF0YSAgICAgICovCisjZGVmaW5lIFBPTExPVVQgICAgIDB4MDAwNCAgICAgIC8qIGZpbGUgZGVzY3JpcHRvciBpcyB3cml0ZWFibGUgICovCisjZGVmaW5lIFBPTExFUlIgICAgIDB4MDAwOCAgICAgIC8qIHNvbWUgcG9sbCBlcnJvciBvY2N1cnJlZCAgICAgICovCisjZGVmaW5lIFBPTExIVVAgICAgIDB4MDAxMCAgICAgIC8qIGZpbGUgZGVzY3JpcHRvciB3YXMgImh1bmcgdXAiICovCisjZGVmaW5lIFBPTExOVkFMICAgIDB4MDAyMCAgICAgIC8qIHJlcXVlc3RlZCBldmVudHMgImludmFsaWQiICAgICovCisjZGVmaW5lIFBPTExSRE5PUk0gIDB4MDA0MAorI2RlZmluZSBQT0xMUkRCQU5EICAweDAwODAKKyNkZWZpbmUgUE9MTFdSTk9STSAgMHgwMTAwCisjZGVmaW5lIFBPTExXUkJBTkQgIDB4MDIwMAorCitzdHJ1Y3QgcG9sbGZkCit7CisgIGludCBmZDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoaWNoIGZpbGUgZGVzY3JpcHRvciB0byBwb2xsICovCisgIHNob3J0IGV2ZW50czsgICAgICAgICAgICAgICAgIC8qIGV2ZW50cyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiAgICovCisgIHNob3J0IHJldmVudHM7ICAgICAgICAgICAgICAgIC8qIGV2ZW50cyBmb3VuZCBvbiByZXR1cm4gICAgICAgICovCit9OworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbmZkc190OworCitleHRlcm4gaW50IHBvbGwgKHN0cnVjdCBwb2xsZmQgKnBmZCwgbmZkc190IG5mZCwgaW50IHRpbWVvdXQpOworCisvKiBEZWZpbmUgSU5GVElNIG9ubHkgaWYgZG9pbmcgc28gY29uZm9ybXMgdG8gUE9TSVguICAqLworI2lmICFkZWZpbmVkIChfUE9TSVhfQ19TT1VSQ0UpICYmICFkZWZpbmVkIChfWE9QRU5fU09VUkNFKQorI2RlZmluZSBJTkZUSU0gKC0xKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfR0xfUE9MTF9IICovCmRpZmYgLS1naXQgYS9jb21wYXQvcHJlYWQuYyBiL2NvbXBhdC9wcmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGNhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcHJlYWQuYwpAQCAtMCwwICsxLDE4IEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK3NzaXplX3QgZ2l0X3ByZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsIG9mZl90IG9mZnNldCkKK3sKKyAgICAgICAgb2ZmX3QgY3VycmVudF9vZmZzZXQ7CisgICAgICAgIHNzaXplX3QgcmM7CisKKyAgICAgICAgY3VycmVudF9vZmZzZXQgPSBsc2VlayhmZCwgMCwgU0VFS19DVVIpOworCisgICAgICAgIGlmIChsc2VlayhmZCwgb2Zmc2V0LCBTRUVLX1NFVCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICByYyA9IHJlYWRfaW5fZnVsbChmZCwgYnVmLCBjb3VudCk7CisKKyAgICAgICAgaWYgKGN1cnJlbnRfb2Zmc2V0ICE9IGxzZWVrKGZkLCBjdXJyZW50X29mZnNldCwgU0VFS19TRVQpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jIGIvY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OTA3MGYKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcHJlY29tcG9zZV91dGY4LmMKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBDb252ZXJ0cyBmaWxlbmFtZXMgZnJvbSBkZWNvbXBvc2VkIHVuaWNvZGUgaW50byBwcmVjb21wb3NlZCB1bmljb2RlLgorICogVXNlZCBvbiBNYWNPUyBYLgorICovCisKKyNkZWZpbmUgUFJFQ09NUE9TRV9VTklDT0RFX0MKKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInByZWNvbXBvc2VfdXRmOC5oIgorCit0eXBlZGVmIGNoYXIgKmljb252X2licDsKK3N0YXRpYyBjb25zdCBjaGFyICpyZXBvX2VuY29kaW5nID0gIlVURi04IjsKK3N0YXRpYyBjb25zdCBjaGFyICpwYXRoX2VuY29kaW5nID0gIlVURi04LU1BQyI7CisKK3N0YXRpYyBzaXplX3QgaGFzX25vbl9hc2NpaShjb25zdCBjaGFyICpzLCBzaXplX3QgbWF4bGVuLCBzaXplX3QgKnN0cmxlbl9jKQoreworCWNvbnN0IHVpbnQ4X3QgKnB0ciA9IChjb25zdCB1aW50OF90ICopczsKKwlzaXplX3Qgc3RybGVuX2NoYXJzID0gMDsKKwlzaXplX3QgcmV0ID0gMDsKKworCWlmICghcHRyIHx8ICEqcHRyKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgqcHRyICYmIG1heGxlbikgeworCQlpZiAoKnB0ciAmIDB4ODApCisJCQlyZXQrKzsKKwkJc3RybGVuX2NoYXJzKys7CisJCXB0cisrOworCQltYXhsZW4tLTsKKwl9CisJaWYgKHN0cmxlbl9jKQorCQkqc3RybGVuX2MgPSBzdHJsZW5fY2hhcnM7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3ZvaWQgcHJvYmVfdXRmOF9wYXRobmFtZV9jb21wb3NpdGlvbih2b2lkKQoreworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBjb25zdCBjaGFyICphdW1sX25mYyA9ICJceGMzXHhhNCI7CisJc3RhdGljIGNvbnN0IGNoYXIgKmF1bWxfbmZkID0gIlx4NjFceGNjXHg4OCI7CisJaW50IG91dHB1dF9mZDsKKwlpZiAocHJlY29tcG9zZWRfdW5pY29kZSAhPSAtMSkKKwkJcmV0dXJuOyAvKiBXZSBmb3VuZCBpdCBkZWZpbmVkIGluIHRoZSBnbG9iYWwgY29uZmlnLCByZXNwZWN0IGl0ICovCisJZ2l0X3BhdGhfYnVmKCZwYXRoLCAiJXMiLCBhdW1sX25mYyk7CisJb3V0cHV0X2ZkID0gb3BlbihwYXRoLmJ1ZiwgT19DUkVBVHxPX0VYQ0x8T19SRFdSLCAwNjAwKTsKKwlpZiAob3V0cHV0X2ZkID49IDApIHsKKwkJY2xvc2Uob3V0cHV0X2ZkKTsKKwkJZ2l0X3BhdGhfYnVmKCZwYXRoLCAiJXMiLCBhdW1sX25mZCk7CisJCXByZWNvbXBvc2VkX3VuaWNvZGUgPSBhY2Nlc3MocGF0aC5idWYsIFJfT0spID8gMCA6IDE7CisJCWdpdF9jb25maWdfc2V0KCJjb3JlLnByZWNvbXBvc2V1bmljb2RlIiwgcHJlY29tcG9zZWRfdW5pY29kZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCQlnaXRfcGF0aF9idWYoJnBhdGgsICIlcyIsIGF1bWxfbmZjKTsKKwkJaWYgKHVubGluayhwYXRoLmJ1ZikpCisJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHVubGluayAnJXMnIiksIHBhdGguYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworfQorCisKK3ZvaWQgcHJlY29tcG9zZV9hcmd2KGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSA9IDA7CisJY29uc3QgY2hhciAqb2xkYXJnOworCWNoYXIgKm5ld2FyZzsKKwlpY29udl90IGljX3ByZWNvbXBvc2U7CisKKwlpZiAocHJlY29tcG9zZWRfdW5pY29kZSAhPSAxKQorCQlyZXR1cm47CisKKwlpY19wcmVjb21wb3NlID0gaWNvbnZfb3BlbihyZXBvX2VuY29kaW5nLCBwYXRoX2VuY29kaW5nKTsKKwlpZiAoaWNfcHJlY29tcG9zZSA9PSAoaWNvbnZfdCkgLTEpCisJCXJldHVybjsKKworCXdoaWxlIChpIDwgYXJnYykgeworCQlzaXplX3QgbmFtZWxlbjsKKwkJb2xkYXJnID0gYXJndltpXTsKKwkJaWYgKGhhc19ub25fYXNjaWkob2xkYXJnLCAoc2l6ZV90KS0xLCAmbmFtZWxlbikpIHsKKwkJCW5ld2FyZyA9IHJlZW5jb2RlX3N0cmluZ19pY29udihvbGRhcmcsIG5hbWVsZW4sIGljX3ByZWNvbXBvc2UsIE5VTEwpOworCQkJaWYgKG5ld2FyZykKKwkJCQlhcmd2W2ldID0gbmV3YXJnOworCQl9CisJCWkrKzsKKwl9CisJaWNvbnZfY2xvc2UoaWNfcHJlY29tcG9zZSk7Cit9CisKKworUFJFQ19ESVIgKnByZWNvbXBvc2VfdXRmOF9vcGVuZGlyKGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJUFJFQ19ESVIgKnByZWNfZGlyID0geG1hbGxvYyhzaXplb2YoUFJFQ19ESVIpKTsKKwlwcmVjX2Rpci0+ZGlyZW50X25mYyA9IHhtYWxsb2Moc2l6ZW9mKGRpcmVudF9wcmVjX3BzeCkpOworCXByZWNfZGlyLT5kaXJlbnRfbmZjLT5tYXhfbmFtZV9sZW4gPSBzaXplb2YocHJlY19kaXItPmRpcmVudF9uZmMtPmRfbmFtZSk7CisKKwlwcmVjX2Rpci0+ZGlycCA9IG9wZW5kaXIoZGlybmFtZSk7CisJaWYgKCFwcmVjX2Rpci0+ZGlycCkgeworCQlmcmVlKHByZWNfZGlyLT5kaXJlbnRfbmZjKTsKKwkJZnJlZShwcmVjX2Rpcik7CisJCXJldHVybiBOVUxMOworCX0gZWxzZSB7CisJCWludCByZXRfZXJybm8gPSBlcnJubzsKKwkJcHJlY19kaXItPmljX3ByZWNvbXBvc2UgPSBpY29udl9vcGVuKHJlcG9fZW5jb2RpbmcsIHBhdGhfZW5jb2RpbmcpOworCQkvKiBpZiBpY29udl9vcGVuKCkgZmFpbHMsIGRpZSgpIGluIHJlYWRkaXIoKSBpZiBuZWVkZWQgKi8KKwkJZXJybm8gPSByZXRfZXJybm87CisJfQorCisJcmV0dXJuIHByZWNfZGlyOworfQorCitzdHJ1Y3QgZGlyZW50X3ByZWNfcHN4ICpwcmVjb21wb3NlX3V0ZjhfcmVhZGRpcihQUkVDX0RJUiAqcHJlY19kaXIpCit7CisJc3RydWN0IGRpcmVudCAqcmVzOworCXJlcyA9IHJlYWRkaXIocHJlY19kaXItPmRpcnApOworCWlmIChyZXMpIHsKKwkJc2l6ZV90IG5hbWVsZW56ID0gc3RybGVuKHJlcy0+ZF9uYW1lKSArIDE7IC8qIFwwICovCisJCXNpemVfdCBuZXdfbWF4bGVuID0gbmFtZWxlbno7CisKKwkJaW50IHJldF9lcnJubyA9IGVycm5vOworCisJCWlmIChuZXdfbWF4bGVuID4gcHJlY19kaXItPmRpcmVudF9uZmMtPm1heF9uYW1lX2xlbikgeworCQkJc2l6ZV90IG5ld19sZW4gPSBzaXplb2YoZGlyZW50X3ByZWNfcHN4KSArIG5ld19tYXhsZW4gLQorCQkJCXNpemVvZihwcmVjX2Rpci0+ZGlyZW50X25mYy0+ZF9uYW1lKTsKKworCQkJcHJlY19kaXItPmRpcmVudF9uZmMgPSB4cmVhbGxvYyhwcmVjX2Rpci0+ZGlyZW50X25mYywgbmV3X2xlbik7CisJCQlwcmVjX2Rpci0+ZGlyZW50X25mYy0+bWF4X25hbWVfbGVuID0gbmV3X21heGxlbjsKKwkJfQorCisJCXByZWNfZGlyLT5kaXJlbnRfbmZjLT5kX2lubyAgPSByZXMtPmRfaW5vOworCQlwcmVjX2Rpci0+ZGlyZW50X25mYy0+ZF90eXBlID0gcmVzLT5kX3R5cGU7CisKKwkJaWYgKChwcmVjb21wb3NlZF91bmljb2RlID09IDEpICYmIGhhc19ub25fYXNjaWkocmVzLT5kX25hbWUsIChzaXplX3QpLTEsIE5VTEwpKSB7CisJCQlpZiAocHJlY19kaXItPmljX3ByZWNvbXBvc2UgPT0gKGljb252X3QpLTEpIHsKKwkJCQlkaWUoImljb252X29wZW4oJXMsJXMpIGZhaWxlZCwgYnV0IG5lZWRlZDpcbiIKKwkJCQkJCSIgICAgcHJlY29tcG9zZWQgdW5pY29kZSBpcyBub3Qgc3VwcG9ydGVkLlxuIgorCQkJCQkJIiAgICBJZiB5b3Ugd2FudCB0byB1c2UgZGVjb21wb3NlZCB1bmljb2RlLCBydW5cbiIKKwkJCQkJCSIgICAgXCJnaXQgY29uZmlnIGNvcmUucHJlY29tcG9zZXVuaWNvZGUgZmFsc2VcIlxuIiwKKwkJCQkJCXJlcG9fZW5jb2RpbmcsIHBhdGhfZW5jb2RpbmcpOworCQkJfSBlbHNlIHsKKwkJCQlpY29udl9pYnAJY3AgPSAoaWNvbnZfaWJwKXJlcy0+ZF9uYW1lOworCQkJCXNpemVfdCBpbmxlZnQgPSBuYW1lbGVuejsKKwkJCQljaGFyICpvdXRwb3MgPSAmcHJlY19kaXItPmRpcmVudF9uZmMtPmRfbmFtZVswXTsKKwkJCQlzaXplX3Qgb3V0c3ogPSBwcmVjX2Rpci0+ZGlyZW50X25mYy0+bWF4X25hbWVfbGVuOworCQkJCWVycm5vID0gMDsKKwkJCQlpY29udihwcmVjX2Rpci0+aWNfcHJlY29tcG9zZSwgJmNwLCAmaW5sZWZ0LCAmb3V0cG9zLCAmb3V0c3opOworCQkJCWlmIChlcnJubyB8fCBpbmxlZnQpIHsKKwkJCQkJLyoKKwkJCQkJICogaWNvbnYoKSBmYWlsZWQgYW5kIGVycm5vIGNvdWxkIGJlIEUyQklHLCBFSUxTRVEsIEVJTlZBTCwgRUJBREYKKwkJCQkJICogTWFjT1MgWCBhdm9pZHMgaWxsZWdhbCBieXRlIHNlcXVlbWNlcy4KKwkJCQkJICogSWYgdGhleSBvY2N1ciBvbiBhIG1vdW50ZWQgZHJpdmUgKGUuZy4gTkZTKSBpdCBpcyBub3Qgd29ydGggdG8KKwkJCQkJICogZGllKCkgZm9yIHRoYXQsIGJ1dCByYXRoZXIgbGV0IHRoZSB1c2VyIHNlZSB0aGUgb3JpZ2luYWwgbmFtZQorCQkJCQkqLworCQkJCQluYW1lbGVueiA9IDA7IC8qIHRyaWdnZXIgc3RybGNweSAqLworCQkJCX0KKwkJCX0KKwkJfSBlbHNlCisJCQluYW1lbGVueiA9IDA7CisKKwkJaWYgKCFuYW1lbGVueikKKwkJCXN0cmxjcHkocHJlY19kaXItPmRpcmVudF9uZmMtPmRfbmFtZSwgcmVzLT5kX25hbWUsCisJCQkJCQkJcHJlY19kaXItPmRpcmVudF9uZmMtPm1heF9uYW1lX2xlbik7CisKKwkJZXJybm8gPSByZXRfZXJybm87CisJCXJldHVybiBwcmVjX2Rpci0+ZGlyZW50X25mYzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKworaW50IHByZWNvbXBvc2VfdXRmOF9jbG9zZWRpcihQUkVDX0RJUiAqcHJlY19kaXIpCit7CisJaW50IHJldF92YWx1ZTsKKwlpbnQgcmV0X2Vycm5vOworCXJldF92YWx1ZSA9IGNsb3NlZGlyKHByZWNfZGlyLT5kaXJwKTsKKwlyZXRfZXJybm8gPSBlcnJubzsKKwlpZiAocHJlY19kaXItPmljX3ByZWNvbXBvc2UgIT0gKGljb252X3QpLTEpCisJCWljb252X2Nsb3NlKHByZWNfZGlyLT5pY19wcmVjb21wb3NlKTsKKwlmcmVlKHByZWNfZGlyLT5kaXJlbnRfbmZjKTsKKwlmcmVlKHByZWNfZGlyKTsKKwllcnJubyA9IHJldF9lcnJubzsKKwlyZXR1cm4gcmV0X3ZhbHVlOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5oIGIvY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NGU3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcHJlY29tcG9zZV91dGY4LmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBQUkVDT01QT1NFX1VOSUNPREVfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KKworCit0eXBlZGVmIHN0cnVjdCBkaXJlbnRfcHJlY19wc3ggeworCWlub190IGRfaW5vOyAgICAgICAgICAgIC8qIFBvc2l4ICovCisJc2l6ZV90IG1heF9uYW1lX2xlbjsgICAgLyogU2VlIGJlbG93ICovCisJdW5zaWduZWQgY2hhciBkX3R5cGU7ICAgLyogYXZhaWxhYmxlIG9uIGFsbCBzeXN0ZW1zIGdpdCBydW5zIG9uICovCisKKwkvKgorCSAqIFNlZSBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTY5OTkxOTc5OS9iYXNlZGVmcy9kaXJlbnQuaC5odG1sCisJICogTkFNRV9NQVggKyAxIHNob3VsZCBiZSBlbm91Z2gsIGJ1dCBzb21lIHN5c3RlbXMgaGF2ZQorCSAqIE5BTUVfTUFYPTI1NSBhbmQgc3RybGVuKGRfbmFtZSkgbWF5IHJldHVybiA1MDggb3IgNTEwCisJICogU29sdXRpb246IGFsbG9jYXRlIG1vcmUgd2hlbiBuZWVkZWQsIHNlZSBwcmVjb21wb3NlX3V0ZjhfcmVhZGRpcigpCisJICovCisJY2hhciAgIGRfbmFtZVtOQU1FX01BWCsxXTsKK30gZGlyZW50X3ByZWNfcHN4OworCisKK3R5cGVkZWYgc3RydWN0IHsKKwlpY29udl90IGljX3ByZWNvbXBvc2U7CisJRElSICpkaXJwOworCXN0cnVjdCBkaXJlbnRfcHJlY19wc3ggKmRpcmVudF9uZmM7Cit9IFBSRUNfRElSOworCit2b2lkIHByZWNvbXBvc2VfYXJndihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOwordm9pZCBwcm9iZV91dGY4X3BhdGhuYW1lX2NvbXBvc2l0aW9uKHZvaWQpOworCitQUkVDX0RJUiAqcHJlY29tcG9zZV91dGY4X29wZW5kaXIoY29uc3QgY2hhciAqZGlybmFtZSk7CitzdHJ1Y3QgZGlyZW50X3ByZWNfcHN4ICpwcmVjb21wb3NlX3V0ZjhfcmVhZGRpcihQUkVDX0RJUiAqZGlycCk7CitpbnQgcHJlY29tcG9zZV91dGY4X2Nsb3NlZGlyKFBSRUNfRElSICpkaXJwKTsKKworI2lmbmRlZiBQUkVDT01QT1NFX1VOSUNPREVfQworI2RlZmluZSBkaXJlbnQgZGlyZW50X3ByZWNfcHN4CisjZGVmaW5lIG9wZW5kaXIobikgcHJlY29tcG9zZV91dGY4X29wZW5kaXIobikKKyNkZWZpbmUgcmVhZGRpcihkKSBwcmVjb21wb3NlX3V0ZjhfcmVhZGRpcihkKQorI2RlZmluZSBjbG9zZWRpcihkKSBwcmVjb21wb3NlX3V0ZjhfY2xvc2VkaXIoZCkKKyNkZWZpbmUgRElSIFBSRUNfRElSCisjZW5kaWYgLyogUFJFQ09NUE9TRV9VTklDT0RFX0MgKi8KKworI2RlZmluZSAgUFJFQ09NUE9TRV9VTklDT0RFX0gKKyNlbmRpZiAvKiBQUkVDT01QT1NFX1VOSUNPREVfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3Fzb3J0LmMgYi9jb21wYXQvcXNvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTc0ZDUzCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3Fzb3J0LmMKQEAgLTAsMCArMSw2MiBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCisvKgorICogQSBtZXJnZSBzb3J0IGltcGxlbWVudGF0aW9uLCBzaW1wbGlmaWVkIGZyb20gdGhlIHFzb3J0IGltcGxlbWVudGF0aW9uCisgKiBieSBNaWtlIEhhZXJ0ZWwsIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAqLworCitzdGF0aWMgdm9pZCBtc29ydF93aXRoX3RtcCh2b2lkICpiLCBzaXplX3Qgbiwgc2l6ZV90IHMsCisJCQkgICBpbnQgKCpjbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSwKKwkJCSAgIGNoYXIgKnQpCit7CisJY2hhciAqdG1wOworCWNoYXIgKmIxLCAqYjI7CisJc2l6ZV90IG4xLCBuMjsKKworCWlmIChuIDw9IDEpCisJCXJldHVybjsKKworCW4xID0gbiAvIDI7CisJbjIgPSBuIC0gbjE7CisJYjEgPSBiOworCWIyID0gKGNoYXIgKiliICsgKG4xICogcyk7CisKKwltc29ydF93aXRoX3RtcChiMSwgbjEsIHMsIGNtcCwgdCk7CisJbXNvcnRfd2l0aF90bXAoYjIsIG4yLCBzLCBjbXAsIHQpOworCisJdG1wID0gdDsKKworCXdoaWxlIChuMSA+IDAgJiYgbjIgPiAwKSB7CisJCWlmIChjbXAoYjEsIGIyKSA8PSAwKSB7CisJCQltZW1jcHkodG1wLCBiMSwgcyk7CisJCQl0bXAgKz0gczsKKwkJCWIxICs9IHM7CisJCQktLW4xOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHRtcCwgYjIsIHMpOworCQkJdG1wICs9IHM7CisJCQliMiArPSBzOworCQkJLS1uMjsKKwkJfQorCX0KKwlpZiAobjEgPiAwKQorCQltZW1jcHkodG1wLCBiMSwgbjEgKiBzKTsKKwltZW1jcHkoYiwgdCwgKG4gLSBuMikgKiBzKTsKK30KKwordm9pZCBnaXRfcXNvcnQodm9pZCAqYiwgc2l6ZV90IG4sIHNpemVfdCBzLAorCSAgICAgICBpbnQgKCpjbXApKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKK3sKKwljb25zdCBzaXplX3Qgc2l6ZSA9IG4gKiBzOworCWNoYXIgYnVmWzEwMjRdOworCisJaWYgKHNpemUgPCBzaXplb2YoYnVmKSkgeworCQkvKiBUaGUgdGVtcG9yYXJ5IGFycmF5IGZpdHMgb24gdGhlIHNtYWxsIG9uLXN0YWNrIGJ1ZmZlci4gKi8KKwkJbXNvcnRfd2l0aF90bXAoYiwgbiwgcywgY21wLCBidWYpOworCX0gZWxzZSB7CisJCS8qIEl0J3Mgc29tZXdoYXQgbGFyZ2UsIHNvIG1hbGxvYyBpdC4gICovCisJCWNoYXIgKnRtcCA9IHhtYWxsb2Moc2l6ZSk7CisJCW1zb3J0X3dpdGhfdG1wKGIsIG4sIHMsIGNtcCwgdG1wKTsKKwkJZnJlZSh0bXApOworCX0KK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdjb21wLmMgYi9jb21wYXQvcmVnZXgvcmVnY29tcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZjMwODgKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcmVnZXgvcmVnY29tcC5jCkBAIC0wLDAgKzEsMzg4NCBAQAorLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA3LDIwMDksMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29tPi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAgIDAyMTEwLTEzMDEgVVNBLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QgcmVfY29tcGlsZV9pbnRlcm5hbCAocmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqIHBhdHRlcm4sCisJCQkJCSAgc2l6ZV90IGxlbmd0aCwgcmVnX3N5bnRheF90IHN5bnRheCk7CitzdGF0aWMgdm9pZCByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAocmVnZXhfdCAqYnVmcCwKKwkJCQkgICAgIGNvbnN0IHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGUsCisJCQkJICAgICBjaGFyICpmYXN0bWFwKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGluaXRfZGZhIChyZV9kZmFfdCAqZGZhLCBzaXplX3QgcGF0X2xlbik7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyB2b2lkIGZyZWVfY2hhcnNldCAocmVfY2hhcnNldF90ICpjc2V0KTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworc3RhdGljIHZvaWQgZnJlZV93b3JrYXJlYV9jb21waWxlIChyZWdleF90ICpwcmVnKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNyZWF0ZV9pbml0aWFsX3N0YXRlIChyZV9kZmFfdCAqZGZhKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHZvaWQgb3B0aW1pemVfdXRmOCAocmVfZGZhX3QgKmRmYSk7CisjZW5kaWYKK3N0YXRpYyByZWdfZXJyY29kZV90IGFuYWx5emUgKHJlZ2V4X3QgKnByZWcpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcHJlb3JkZXIgKGJpbl90cmVlX3QgKnJvb3QsCisJCQkgICAgICAgcmVnX2VycmNvZGVfdCAoZm4gKHZvaWQgKiwgYmluX3RyZWVfdCAqKSksCisJCQkgICAgICAgdm9pZCAqZXh0cmEpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcG9zdG9yZGVyIChiaW5fdHJlZV90ICpyb290LAorCQkJCXJlZ19lcnJjb2RlX3QgKGZuICh2b2lkICosIGJpbl90cmVlX3QgKikpLAorCQkJCXZvaWQgKmV4dHJhKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IG9wdGltaXplX3N1YmV4cHMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGxvd2VyX3N1YmV4cHMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpsb3dlcl9zdWJleHAgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVnZXhfdCAqcHJlZywKKwkJCQkgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjYWxjX2ZpcnN0ICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjYWxjX25leHQgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGxpbmtfbmZhX25vZGVzICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSk7CitzdGF0aWMgaW50IGR1cGxpY2F0ZV9ub2RlIChyZV9kZmFfdCAqZGZhLCBpbnQgb3JnX2lkeCwgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQpOworc3RhdGljIGludCBzZWFyY2hfZHVwbGljYXRlZF9ub2RlIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgb3JnX25vZGUsCisJCQkJICAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2FsY19lY2xvc3VyZSAocmVfZGZhX3QgKmRmYSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjYWxjX2VjbG9zdXJlX2l0ZXIgKHJlX25vZGVfc2V0ICpuZXdfc2V0LCByZV9kZmFfdCAqZGZhLAorCQkJCQkgaW50IG5vZGUsIGludCByb290KTsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNhbGNfaW52ZWNsb3N1cmUgKHJlX2RmYV90ICpkZmEpOworc3RhdGljIGludCBmZXRjaF9udW1iZXIgKHJlX3N0cmluZ190ICppbnB1dCwgcmVfdG9rZW5fdCAqdG9rZW4sCisJCQkgcmVnX3N5bnRheF90IHN5bnRheCk7CitzdGF0aWMgaW50IHBlZWtfdG9rZW4gKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsCisJCQlyZWdfc3ludGF4X3Qgc3ludGF4KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZSAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywKKwkJCSAgcmVnX3N5bnRheF90IHN5bnRheCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9yZWdfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLAorCQkJCSAgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgsCisJCQkJICBpbnQgbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9icmFuY2ggKHJlX3N0cmluZ190ICpyZWdleHAsIHJlZ2V4X3QgKnByZWcsCisJCQkJIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4LAorCQkJCSBpbnQgbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9leHByZXNzaW9uIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLAorCQkJCSAgICAgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgsCisJCQkJICAgICBpbnQgbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9zdWJfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLAorCQkJCSAgcmVfdG9rZW5fdCAqdG9rZW4sIHJlZ19zeW50YXhfdCBzeW50YXgsCisJCQkJICBpbnQgbmVzdCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9kdXBfb3AgKGJpbl90cmVlX3QgKmR1cF9lbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLAorCQkJCSByZV9kZmFfdCAqZGZhLCByZV90b2tlbl90ICp0b2tlbiwKKwkJCQkgcmVnX3N5bnRheF90IHN5bnRheCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpwYXJzZV9icmFja2V0X2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVfZGZhX3QgKmRmYSwKKwkJCQkgICAgICByZV90b2tlbl90ICp0b2tlbiwgcmVnX3N5bnRheF90IHN5bnRheCwKKwkJCQkgICAgICByZWdfZXJyY29kZV90ICplcnIpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcGFyc2VfYnJhY2tldF9lbGVtZW50IChicmFja2V0X2VsZW1fdCAqZWxlbSwKKwkJCQkJICAgIHJlX3N0cmluZ190ICpyZWdleHAsCisJCQkJCSAgICByZV90b2tlbl90ICp0b2tlbiwgaW50IHRva2VuX2xlbiwKKwkJCQkJICAgIHJlX2RmYV90ICpkZmEsCisJCQkJCSAgICByZWdfc3ludGF4X3Qgc3ludGF4LAorCQkJCQkgICAgaW50IGFjY2VwdF9oeXBoZW4pOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcGFyc2VfYnJhY2tldF9zeW1ib2wgKGJyYWNrZXRfZWxlbV90ICplbGVtLAorCQkJCQkgIHJlX3N0cmluZ190ICpyZWdleHAsCisJCQkJCSAgcmVfdG9rZW5fdCAqdG9rZW4pOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LAorCQkJCQlyZV9jaGFyc2V0X3QgKm1iY3NldCwKKwkJCQkJaW50ICplcXVpdl9jbGFzc19hbGxvYywKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLAorCQkJCSAgICAgIGJpdHNldF90IHNiY3NldCwKKwkJCQkgICAgICByZV9jaGFyc2V0X3QgKm1iY3NldCwKKwkJCQkgICAgICBpbnQgKmNoYXJfY2xhc3NfYWxsb2MsCisJCQkJICAgICAgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwKKwkJCQkgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KTsKKyNlbHNlICAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyByZWdfZXJyY29kZV90IGJ1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsCisJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpOworc3RhdGljIHJlZ19lcnJjb2RlX3QgYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywKKwkJCQkgICAgICBiaXRzZXRfdCBzYmNzZXQsCisJCQkJICAgICAgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwKKwkJCQkgICAgICByZWdfc3ludGF4X3Qgc3ludGF4KTsKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3N0YXRpYyBiaW5fdHJlZV90ICpidWlsZF9jaGFyY2xhc3Nfb3AgKHJlX2RmYV90ICpkZmEsCisJCQkJICAgICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpjbGFzc19uYW1lLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpleHRyYSwKKwkJCQkgICAgICAgaW50IG5vbl9tYXRjaCwgcmVnX2VycmNvZGVfdCAqZXJyKTsKK3N0YXRpYyBiaW5fdHJlZV90ICpjcmVhdGVfdHJlZSAocmVfZGZhX3QgKmRmYSwKKwkJCQliaW5fdHJlZV90ICpsZWZ0LCBiaW5fdHJlZV90ICpyaWdodCwKKwkJCQlyZV90b2tlbl90eXBlX3QgdHlwZSk7CitzdGF0aWMgYmluX3RyZWVfdCAqY3JlYXRlX3Rva2VuX3RyZWUgKHJlX2RmYV90ICpkZmEsCisJCQkJICAgICAgYmluX3RyZWVfdCAqbGVmdCwgYmluX3RyZWVfdCAqcmlnaHQsCisJCQkJICAgICAgY29uc3QgcmVfdG9rZW5fdCAqdG9rZW4pOworc3RhdGljIGJpbl90cmVlX3QgKmR1cGxpY2F0ZV90cmVlIChjb25zdCBiaW5fdHJlZV90ICpzcmMsIHJlX2RmYV90ICpkZmEpOworc3RhdGljIHZvaWQgZnJlZV90b2tlbiAocmVfdG9rZW5fdCAqbm9kZSk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBmcmVlX3RyZWUgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKTsKK3N0YXRpYyByZWdfZXJyY29kZV90IG1hcmtfb3B0X3N1YmV4cCAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpOworDAorLyogVGhpcyB0YWJsZSBnaXZlcyBhbiBlcnJvciBtZXNzYWdlIGZvciBlYWNoIG9mIHRoZSBlcnJvciBjb2RlcyBsaXN0ZWQKKyAgIGluIHJlZ2V4LmguICBPYnZpb3VzbHkgdGhlIG9yZGVyIGhlcmUgaGFzIHRvIGJlIHNhbWUgYXMgdGhlcmUuCisgICBQT1NJWCBkb2Vzbid0IHJlcXVpcmUgdGhhdCB3ZSBkbyBhbnl0aGluZyBmb3IgUkVHX05PRVJST1IsCisgICBidXQgd2h5IG5vdCBiZSBuaWNlPyAgKi8KKworY29uc3QgY2hhciBfX3JlX2Vycm9yX21zZ2lkW10gYXR0cmlidXRlX2hpZGRlbiA9CisgIHsKKyNkZWZpbmUgUkVHX05PRVJST1JfSURYCTAKKyAgICBnZXR0ZXh0X25vb3AgKCJTdWNjZXNzIikJLyogUkVHX05PRVJST1IgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19OT01BVENIX0lEWCAoUkVHX05PRVJST1JfSURYICsgc2l6ZW9mICJTdWNjZXNzIikKKyAgICBnZXR0ZXh0X25vb3AgKCJObyBtYXRjaCIpCS8qIFJFR19OT01BVENIICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfQkFEUEFUX0lEWAkoUkVHX05PTUFUQ0hfSURYICsgc2l6ZW9mICJObyBtYXRjaCIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iKSAvKiBSRUdfQkFEUEFUICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRUNPTExBVEVfSURYIChSRUdfQkFEUEFUX0lEWCArIHNpemVvZiAiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIpIC8qIFJFR19FQ09MTEFURSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VDVFlQRV9JRFgJKFJFR19FQ09MTEFURV9JRFggKyBzaXplb2YgIkludmFsaWQgY29sbGF0aW9uIGNoYXJhY3RlciIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MgbmFtZSIpIC8qIFJFR19FQ1RZUEUgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FRVNDQVBFX0lEWAkoUkVHX0VDVFlQRV9JRFggKyBzaXplb2YgIkludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWUiKQorICAgIGdldHRleHRfbm9vcCAoIlRyYWlsaW5nIGJhY2tzbGFzaCIpIC8qIFJFR19FRVNDQVBFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRVNVQlJFR19JRFgJKFJFR19FRVNDQVBFX0lEWCArIHNpemVvZiAiVHJhaWxpbmcgYmFja3NsYXNoIikKKyAgICBnZXR0ZXh0X25vb3AgKCJJbnZhbGlkIGJhY2sgcmVmZXJlbmNlIikgLyogUkVHX0VTVUJSRUcgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19FQlJBQ0tfSURYCShSRUdfRVNVQlJFR19JRFggKyBzaXplb2YgIkludmFsaWQgYmFjayByZWZlcmVuY2UiKQorICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCBbIG9yIFteIikJLyogUkVHX0VCUkFDSyAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VQQVJFTl9JRFgJKFJFR19FQlJBQ0tfSURYICsgc2l6ZW9mICJVbm1hdGNoZWQgWyBvciBbXiIpCisgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkICggb3IgXFwoIikgLyogUkVHX0VQQVJFTiAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VCUkFDRV9JRFgJKFJFR19FUEFSRU5fSURYICsgc2l6ZW9mICJVbm1hdGNoZWQgKCBvciBcXCgiKQorICAgIGdldHRleHRfbm9vcCAoIlVubWF0Y2hlZCBcXHsiKSAvKiBSRUdfRUJSQUNFICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfQkFEQlJfSURYCShSRUdfRUJSQUNFX0lEWCArIHNpemVvZiAiVW5tYXRjaGVkIFxceyIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBjb250ZW50IG9mIFxce1xcfSIpIC8qIFJFR19CQURCUiAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VSQU5HRV9JRFgJKFJFR19CQURCUl9JRFggKyBzaXplb2YgIkludmFsaWQgY29udGVudCBvZiBcXHtcXH0iKQorICAgIGdldHRleHRfbm9vcCAoIkludmFsaWQgcmFuZ2UgZW5kIikJLyogUkVHX0VSQU5HRSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VTUEFDRV9JRFgJKFJFR19FUkFOR0VfSURYICsgc2l6ZW9mICJJbnZhbGlkIHJhbmdlIGVuZCIpCisgICAgZ2V0dGV4dF9ub29wICgiTWVtb3J5IGV4aGF1c3RlZCIpIC8qIFJFR19FU1BBQ0UgKi8KKyAgICAiXDAiCisjZGVmaW5lIFJFR19CQURSUFRfSURYCShSRUdfRVNQQUNFX0lEWCArIHNpemVvZiAiTWVtb3J5IGV4aGF1c3RlZCIpCisgICAgZ2V0dGV4dF9ub29wICgiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIikgLyogUkVHX0JBRFJQVCAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VFTkRfSURYCShSRUdfQkFEUlBUX0lEWCArIHNpemVvZiAiSW52YWxpZCBwcmVjZWRpbmcgcmVndWxhciBleHByZXNzaW9uIikKKyAgICBnZXR0ZXh0X25vb3AgKCJQcmVtYXR1cmUgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiIpIC8qIFJFR19FRU5EICovCisgICAgIlwwIgorI2RlZmluZSBSRUdfRVNJWkVfSURYCShSRUdfRUVORF9JRFggKyBzaXplb2YgIlByZW1hdHVyZSBlbmQgb2YgcmVndWxhciBleHByZXNzaW9uIikKKyAgICBnZXR0ZXh0X25vb3AgKCJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIpIC8qIFJFR19FU0laRSAqLworICAgICJcMCIKKyNkZWZpbmUgUkVHX0VSUEFSRU5fSURYCShSRUdfRVNJWkVfSURYICsgc2l6ZW9mICJSZWd1bGFyIGV4cHJlc3Npb24gdG9vIGJpZyIpCisgICAgZ2V0dGV4dF9ub29wICgiVW5tYXRjaGVkICkgb3IgXFwpIikgLyogUkVHX0VSUEFSRU4gKi8KKyAgfTsKKworY29uc3Qgc2l6ZV90IF9fcmVfZXJyb3JfbXNnaWRfaWR4W10gYXR0cmlidXRlX2hpZGRlbiA9CisgIHsKKyAgICBSRUdfTk9FUlJPUl9JRFgsCisgICAgUkVHX05PTUFUQ0hfSURYLAorICAgIFJFR19CQURQQVRfSURYLAorICAgIFJFR19FQ09MTEFURV9JRFgsCisgICAgUkVHX0VDVFlQRV9JRFgsCisgICAgUkVHX0VFU0NBUEVfSURYLAorICAgIFJFR19FU1VCUkVHX0lEWCwKKyAgICBSRUdfRUJSQUNLX0lEWCwKKyAgICBSRUdfRVBBUkVOX0lEWCwKKyAgICBSRUdfRUJSQUNFX0lEWCwKKyAgICBSRUdfQkFEQlJfSURYLAorICAgIFJFR19FUkFOR0VfSURYLAorICAgIFJFR19FU1BBQ0VfSURYLAorICAgIFJFR19CQURSUFRfSURYLAorICAgIFJFR19FRU5EX0lEWCwKKyAgICBSRUdfRVNJWkVfSURYLAorICAgIFJFR19FUlBBUkVOX0lEWAorICB9OworDAorLyogRW50cnkgcG9pbnRzIGZvciBHTlUgY29kZS4gICovCisKKworI2lmZGVmIFpPU19VU1MKKworLyogRm9yIFpPUyBVU1Mgd2UgbXVzdCBkZWZpbmUgYnRvd2MgKi8KKword2NoYXJfdCAKK2J0b3djIChpbnQgYykKK3sKKyAgIHdjaGFyX3Qgd3RtcFsyXTsKKyAgIGNoYXIgdG1wWzJdOworCisgICB0bXBbMF0gPSBjOworICAgdG1wWzFdID0gMDsKKworICAgbWJ0b3djICh3dG1wLCB0bXAsIDEpOworICAgcmV0dXJuIHd0bXBbMF07Cit9CisjZW5kaWYKKworLyogcmVfY29tcGlsZV9wYXR0ZXJuIGlzIHRoZSBHTlUgcmVndWxhciBleHByZXNzaW9uIGNvbXBpbGVyOiBpdAorICAgY29tcGlsZXMgUEFUVEVSTiAob2YgbGVuZ3RoIExFTkdUSCkgYW5kIHB1dHMgdGhlIHJlc3VsdCBpbiBCVUZQLgorICAgUmV0dXJucyAwIGlmIHRoZSBwYXR0ZXJuIHdhcyB2YWxpZCwgb3RoZXJ3aXNlIGFuIGVycm9yIHN0cmluZy4KKworICAgQXNzdW1lcyB0aGUgYGFsbG9jYXRlZCcgKGFuZCBwZXJoYXBzIGBidWZmZXInKSBhbmQgYHRyYW5zbGF0ZScgZmllbGRzCisgICBhcmUgc2V0IGluIEJVRlAgb24gZW50cnkuICAqLworCitjb25zdCBjaGFyICoKK3JlX2NvbXBpbGVfcGF0dGVybiAoY29uc3QgY2hhciAqcGF0dGVybiwKKwkJICAgIHNpemVfdCBsZW5ndGgsCisJCSAgICBzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworCisgIC8qIEFuZCBHTlUgY29kZSBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRvIGdldCByZWdpc3RlciBpbmZvcm1hdGlvbgorICAgICBieSBwYXNzaW5nIG51bGwgZm9yIHRoZSBSRUdTIGFyZ3VtZW50IHRvIHJlX21hdGNoLCBldGMuLCBub3QgYnkKKyAgICAgc2V0dGluZyBub19zdWIsIHVubGVzcyBSRV9OT19TVUIgaXMgc2V0LiAgKi8KKyAgYnVmcC0+bm9fc3ViID0gISEocmVfc3ludGF4X29wdGlvbnMgJiBSRV9OT19TVUIpOworCisgIC8qIE1hdGNoIGFuY2hvcnMgYXQgbmV3bGluZS4gICovCisgIGJ1ZnAtPm5ld2xpbmVfYW5jaG9yID0gMTsKKworICByZXQgPSByZV9jb21waWxlX2ludGVybmFsIChidWZwLCBwYXR0ZXJuLCBsZW5ndGgsIHJlX3N5bnRheF9vcHRpb25zKTsKKworICBpZiAoIXJldCkKKyAgICByZXR1cm4gTlVMTDsKKyAgcmV0dXJuIGdldHRleHQgKF9fcmVfZXJyb3JfbXNnaWQgKyBfX3JlX2Vycm9yX21zZ2lkX2lkeFsoaW50KSByZXRdKTsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9jb21waWxlX3BhdHRlcm4sIHJlX2NvbXBpbGVfcGF0dGVybikKKyNlbmRpZgorCisvKiBTZXQgYnkgYHJlX3NldF9zeW50YXgnIHRvIHRoZSBjdXJyZW50IHJlZ2V4cCBzeW50YXggdG8gcmVjb2duaXplLiAgQ2FuCisgICBhbHNvIGJlIGFzc2lnbmVkIHRvIGFyYml0cmFyaWx5OiBlYWNoIHBhdHRlcm4gYnVmZmVyIHN0b3JlcyBpdHMgb3duCisgICBzeW50YXgsIHNvIGl0IGNhbiBiZSBjaGFuZ2VkIGJldHdlZW4gcmVnZXggY29tcGlsYXRpb25zLiAgKi8KKy8qIFRoaXMgaGFzIG5vIGluaXRpYWxpemVyIGJlY2F1c2UgaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIEVtYWNzCisgICBiZWNvbWUgcmVhZC1vbmx5IGFmdGVyIGR1bXBpbmcuICAqLworcmVnX3N5bnRheF90IHJlX3N5bnRheF9vcHRpb25zOworCisKKy8qIFNwZWNpZnkgdGhlIHByZWNpc2Ugc3ludGF4IG9mIHJlZ2V4cHMgZm9yIGNvbXBpbGF0aW9uLiAgVGhpcyBwcm92aWRlcworICAgZm9yIGNvbXBhdGliaWxpdHkgZm9yIHZhcmlvdXMgdXRpbGl0aWVzIHdoaWNoIGhpc3RvcmljYWxseSBoYXZlCisgICBkaWZmZXJlbnQsIGluY29tcGF0aWJsZSBzeW50YXhlcy4KKworICAgVGhlIGFyZ3VtZW50IFNZTlRBWCBpcyBhIGJpdCBtYXNrIGNvbXByaXNlZCBvZiB0aGUgdmFyaW91cyBiaXRzCisgICBkZWZpbmVkIGluIHJlZ2V4LmguICBXZSByZXR1cm4gdGhlIG9sZCBzeW50YXguICAqLworCityZWdfc3ludGF4X3QKK3JlX3NldF9zeW50YXggKHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHJlZ19zeW50YXhfdCByZXQgPSByZV9zeW50YXhfb3B0aW9uczsKKworICByZV9zeW50YXhfb3B0aW9ucyA9IHN5bnRheDsKKyAgcmV0dXJuIHJldDsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9zZXRfc3ludGF4LCByZV9zZXRfc3ludGF4KQorI2VuZGlmCisKK2ludAorcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnApCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgYnVmcC0+YnVmZmVyOworICBjaGFyICpmYXN0bWFwID0gYnVmcC0+ZmFzdG1hcDsKKworICBtZW1zZXQgKGZhc3RtYXAsICdcMCcsIHNpemVvZiAoY2hhcikgKiBTQkNfTUFYKTsKKyAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKGJ1ZnAsIGRmYS0+aW5pdF9zdGF0ZSwgZmFzdG1hcCk7CisgIGlmIChkZmEtPmluaXRfc3RhdGUgIT0gZGZhLT5pbml0X3N0YXRlX3dvcmQpCisgICAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKGJ1ZnAsIGRmYS0+aW5pdF9zdGF0ZV93b3JkLCBmYXN0bWFwKTsKKyAgaWYgKGRmYS0+aW5pdF9zdGF0ZSAhPSBkZmEtPmluaXRfc3RhdGVfbmwpCisgICAgcmVfY29tcGlsZV9mYXN0bWFwX2l0ZXIgKGJ1ZnAsIGRmYS0+aW5pdF9zdGF0ZV9ubCwgZmFzdG1hcCk7CisgIGlmIChkZmEtPmluaXRfc3RhdGUgIT0gZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZikKKyAgICByZV9jb21waWxlX2Zhc3RtYXBfaXRlciAoYnVmcCwgZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZiwgZmFzdG1hcCk7CisgIGJ1ZnAtPmZhc3RtYXBfYWNjdXJhdGUgPSAxOworICByZXR1cm4gMDsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9jb21waWxlX2Zhc3RtYXAsIHJlX2NvbXBpbGVfZmFzdG1hcCkKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQKK19fYXR0cmlidXRlICgoYWx3YXlzX2lubGluZSkpCityZV9zZXRfZmFzdG1hcCAoY2hhciAqZmFzdG1hcCwgaW50IGljYXNlLCBpbnQgY2gpCit7CisgIGZhc3RtYXBbY2hdID0gMTsKKyAgaWYgKGljYXNlKQorICAgIGZhc3RtYXBbdG9sb3dlciAoY2gpXSA9IDE7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVfY29tcGlsZV9mYXN0bWFwLgorICAgQ29tcGlsZSBmYXN0bWFwIGZvciB0aGUgaW5pdGlhbF9zdGF0ZSBJTklUX1NUQVRFLiAgKi8KKworc3RhdGljIHZvaWQKK3JlX2NvbXBpbGVfZmFzdG1hcF9pdGVyIChyZWdleF90ICpidWZwLCBjb25zdCByZV9kZmFzdGF0ZV90ICppbml0X3N0YXRlLAorCQkJIGNoYXIgKmZhc3RtYXApCit7CisgIHZvbGF0aWxlIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgYnVmcC0+YnVmZmVyOworICBpbnQgbm9kZV9jbnQ7CisgIGludCBpY2FzZSA9IChkZmEtPm1iX2N1cl9tYXggPT0gMSAmJiAoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpKTsKKyAgZm9yIChub2RlX2NudCA9IDA7IG5vZGVfY250IDwgaW5pdF9zdGF0ZS0+bm9kZXMubmVsZW07ICsrbm9kZV9jbnQpCisgICAgeworICAgICAgaW50IG5vZGUgPSBpbml0X3N0YXRlLT5ub2Rlcy5lbGVtc1tub2RlX2NudF07CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV0udHlwZTsKKworICAgICAgaWYgKHR5cGUgPT0gQ0hBUkFDVEVSKQorCXsKKwkgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgZGZhLT5ub2Rlc1tub2RlXS5vcHIuYyk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgIGlmICgoYnVmcC0+c3ludGF4ICYgUkVfSUNBU0UpICYmIGRmYS0+bWJfY3VyX21heCA+IDEpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSByZV9tYWxsb2MgKHVuc2lnbmVkIGNoYXIsIGRmYS0+bWJfY3VyX21heCksICpwOworCSAgICAgIHdjaGFyX3Qgd2M7CisJICAgICAgbWJzdGF0ZV90IHN0YXRlOworCisJICAgICAgcCA9IGJ1ZjsKKwkgICAgICAqcCsrID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuYzsKKwkgICAgICB3aGlsZSAoKytub2RlIDwgZGZhLT5ub2Rlc19sZW4KKwkJICAgICAmJiBkZmEtPm5vZGVzW25vZGVdLnR5cGUgPT0gQ0hBUkFDVEVSCisJCSAgICAgJiYgZGZhLT5ub2Rlc1tub2RlXS5tYl9wYXJ0aWFsKQorCQkqcCsrID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuYzsKKwkgICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChzdGF0ZSkpOworCSAgICAgIGlmIChfX21icnRvd2MgKCZ3YywgKGNvbnN0IGNoYXIgKikgYnVmLCBwIC0gYnVmLAorCQkJICAgICAmc3RhdGUpID09IHAgLSBidWYKKwkJICAmJiAoX193Y3J0b21iICgoY2hhciAqKSBidWYsIHRvd2xvd2VyICh3YyksICZzdGF0ZSkKKwkJICAgICAgIT0gKHNpemVfdCkgLTEpKQorCQlyZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgMCwgYnVmWzBdKTsKKwkgICAgICByZV9mcmVlIChidWYpOworCSAgICB9CisjZW5kaWYKKwl9CisgICAgICBlbHNlIGlmICh0eXBlID09IFNJTVBMRV9CUkFDS0VUKQorCXsKKwkgIGludCBpLCBjaDsKKwkgIGZvciAoaSA9IDAsIGNoID0gMDsgaSA8IEJJVFNFVF9XT1JEUzsgKytpKQorCSAgICB7CisJICAgICAgaW50IGo7CisJICAgICAgYml0c2V0X3dvcmRfdCB3ID0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuc2Jjc2V0W2ldOworCSAgICAgIGZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRF9CSVRTOyArK2osICsrY2gpCisJCWlmICh3ICYgKChiaXRzZXRfd29yZF90KSAxIDw8IGopKQorCQkgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgY2gpOworCSAgICB9CisJfQorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBlbHNlIGlmICh0eXBlID09IENPTVBMRVhfQlJBQ0tFVCkKKwl7CisJICByZV9jaGFyc2V0X3QgKmNzZXQgPSBkZmEtPm5vZGVzW25vZGVdLm9wci5tYmNzZXQ7CisJICBpbnQgaTsKKworIyBpZmRlZiBfTElCQworCSAgLyogU2VlIGlmIHdlIGhhdmUgdG8gdHJ5IGFsbCBieXRlcyB3aGljaCBzdGFydCBtdWx0aXBsZSBjb2xsYXRpb24KKwkgICAgIGVsZW1lbnRzLgorCSAgICAgZS5nLiBJbiBkYV9ESywgd2Ugd2FudCB0byBjYXRjaCAnYScgc2luY2UgImFhIiBpcyBhIHZhbGlkCisJCSAgY29sbGF0aW9uIGVsZW1lbnQsIGFuZCBkb24ndCBjYXRjaCAnYicgc2luY2UgJ2InIGlzCisJCSAgdGhlIG9ubHkgY29sbGF0aW9uIGVsZW1lbnQgd2hpY2ggc3RhcnRzIGZyb20gJ2InIChhbmQKKwkJICBpdCBpcyBjYXVnaHQgYnkgU0lNUExFX0JSQUNLRVQpLiAgKi8KKwkgICAgICBpZiAoX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKSAhPSAwCisJCSAgJiYgKGNzZXQtPm5jb2xsX3N5bXMgfHwgY3NldC0+bnJhbmdlcykpCisJCXsKKwkJICBjb25zdCBpbnQzMl90ICp0YWJsZSA9IChjb25zdCBpbnQzMl90ICopCisJCSAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisJCSAgZm9yIChpID0gMDsgaSA8IFNCQ19NQVg7ICsraSkKKwkJICAgIGlmICh0YWJsZVtpXSA8IDApCisJCSAgICAgIHJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBpY2FzZSwgaSk7CisJCX0KKyMgZW5kaWYgLyogX0xJQkMgKi8KKworCSAgLyogU2VlIGlmIHdlIGhhdmUgdG8gc3RhcnQgdGhlIG1hdGNoIGF0IGFsbCBtdWx0aWJ5dGUgY2hhcmFjdGVycywKKwkgICAgIGkuZS4gd2hlcmUgd2Ugd291bGQgbm90IGZpbmQgYW4gaW52YWxpZCBzZXF1ZW5jZS4gIFRoaXMgb25seQorCSAgICAgYXBwbGllcyB0byBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNldHM7IGZvciBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIKKwkgICAgIHNldHMsIHRoZSBTSU1QTEVfQlJBQ0tFVCBhZ2FpbiBzdWZmaWNlcy4gICovCisJICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMQorCSAgICAgICYmIChjc2V0LT5uY2hhcl9jbGFzc2VzIHx8IGNzZXQtPm5vbl9tYXRjaCB8fCBjc2V0LT5ucmFuZ2VzCisjIGlmZGVmIF9MSUJDCisJCSAgfHwgY3NldC0+bmVxdWl2X2NsYXNzZXMKKyMgZW5kaWYgLyogX0xJQkMgKi8KKwkJICkpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAwOworCSAgICAgIGRvCisJCXsKKwkJICBtYnN0YXRlX3QgbWJzOworCQkgIG1lbXNldCAoJm1icywgMCwgc2l6ZW9mIChtYnMpKTsKKwkJICBpZiAoX19tYnJ0b3djIChOVUxMLCAoY2hhciAqKSAmYywgMSwgJm1icykgPT0gKHNpemVfdCkgLTIpCisJCSAgICByZV9zZXRfZmFzdG1hcCAoZmFzdG1hcCwgZmFsc2UsIChpbnQpIGMpOworCQl9CisJICAgICAgd2hpbGUgKCsrYyAhPSAwKTsKKwkgICAgfQorCisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiAuLi4gRWxzZSBjYXRjaCBhbGwgYnl0ZXMgd2hpY2ggY2FuIHN0YXJ0IHRoZSBtYmNoYXJzLiAgKi8KKwkgICAgICBmb3IgKGkgPSAwOyBpIDwgY3NldC0+bm1iY2hhcnM7ICsraSkKKwkJeworCQkgIGNoYXIgYnVmWzI1Nl07CisJCSAgbWJzdGF0ZV90IHN0YXRlOworCQkgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKHN0YXRlKSk7CisJCSAgaWYgKF9fd2NydG9tYiAoYnVmLCBjc2V0LT5tYmNoYXJzW2ldLCAmc3RhdGUpICE9IChzaXplX3QpIC0xKQorCQkgICAgcmVfc2V0X2Zhc3RtYXAgKGZhc3RtYXAsIGljYXNlLCAqKHVuc2lnbmVkIGNoYXIgKikgYnVmKTsKKwkJICBpZiAoKGJ1ZnAtPnN5bnRheCAmIFJFX0lDQVNFKSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorCQkgICAgeworCQkgICAgICBpZiAoX193Y3J0b21iIChidWYsIHRvd2xvd2VyIChjc2V0LT5tYmNoYXJzW2ldKSwgJnN0YXRlKQorCQkJICAhPSAoc2l6ZV90KSAtMSkKKwkJCXJlX3NldF9mYXN0bWFwIChmYXN0bWFwLCBmYWxzZSwgKih1bnNpZ25lZCBjaGFyICopIGJ1Zik7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgZWxzZSBpZiAodHlwZSA9PSBPUF9QRVJJT0QKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgICAgICB8fCB0eXBlID09IE9QX1VURjhfUEVSSU9ECisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkgICAgICAgfHwgdHlwZSA9PSBFTkRfT0ZfUkUpCisJeworCSAgbWVtc2V0IChmYXN0bWFwLCAnXDEnLCBzaXplb2YgKGNoYXIpICogU0JDX01BWCk7CisJICBpZiAodHlwZSA9PSBFTkRfT0ZfUkUpCisJICAgIGJ1ZnAtPmNhbl9iZV9udWxsID0gMTsKKwkgIHJldHVybjsKKwl9CisgICAgfQorfQorDAorLyogRW50cnkgcG9pbnQgZm9yIFBPU0lYIGNvZGUuICAqLworLyogcmVnY29tcCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhcyBhIHN0cmluZyBhbmQgY29tcGlsZXMgaXQuCisKKyAgIFBSRUcgaXMgYSByZWdleF90ICouICBXZSBkbyBub3QgZXhwZWN0IGFueSBmaWVsZHMgdG8gYmUgaW5pdGlhbGl6ZWQsCisgICBzaW5jZSBQT1NJWCBzYXlzIHdlIHNob3VsZG4ndC4gIFRodXMsIHdlIHNldAorCisgICAgIGBidWZmZXInIHRvIHRoZSBjb21waWxlZCBwYXR0ZXJuOworICAgICBgdXNlZCcgdG8gdGhlIGxlbmd0aCBvZiB0aGUgY29tcGlsZWQgcGF0dGVybjsKKyAgICAgYHN5bnRheCcgdG8gUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIGlmIHRoZQorICAgICAgIFJFR19FWFRFTkRFRCBiaXQgaW4gQ0ZMQUdTIGlzIHNldDsgb3RoZXJ3aXNlLCB0bworICAgICAgIFJFX1NZTlRBWF9QT1NJWF9CQVNJQzsKKyAgICAgYG5ld2xpbmVfYW5jaG9yJyB0byBSRUdfTkVXTElORSBiZWluZyBzZXQgaW4gQ0ZMQUdTOworICAgICBgZmFzdG1hcCcgdG8gYW4gYWxsb2NhdGVkIHNwYWNlIGZvciB0aGUgZmFzdG1hcDsKKyAgICAgYGZhc3RtYXBfYWNjdXJhdGUnIHRvIHplcm87CisgICAgIGByZV9uc3ViJyB0byB0aGUgbnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGluIFBBVFRFUk4uCisKKyAgIFBBVFRFUk4gaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBhdHRlcm4gc3RyaW5nLgorCisgICBDRkxBR1MgaXMgYSBzZXJpZXMgb2YgYml0cyB3aGljaCBhZmZlY3QgY29tcGlsYXRpb24uCisKKyAgICAgSWYgUkVHX0VYVEVOREVEIGlzIHNldCwgd2UgdXNlIFBPU0lYIGV4dGVuZGVkIHN5bnRheDsgb3RoZXJ3aXNlLCB3ZQorICAgICB1c2UgUE9TSVggYmFzaWMgc3ludGF4LgorCisgICAgIElmIFJFR19ORVdMSU5FIGlzIHNldCwgdGhlbiAuIGFuZCBbXi4uLl0gZG9uJ3QgbWF0Y2ggbmV3bGluZS4KKyAgICAgQWxzbywgcmVnZXhlYyB3aWxsIHRyeSBhIG1hdGNoIGJlZ2lubmluZyBhZnRlciBldmVyeSBuZXdsaW5lLgorCisgICAgIElmIFJFR19JQ0FTRSBpcyBzZXQsIHRoZW4gd2UgY29uc2lkZXJzIHVwcGVyLSBhbmQgbG93ZXJjYXNlCisgICAgIHZlcnNpb25zIG9mIGxldHRlcnMgdG8gYmUgZXF1aXZhbGVudCB3aGVuIG1hdGNoaW5nLgorCisgICAgIElmIFJFR19OT1NVQiBpcyBzZXQsIHRoZW4gd2hlbiBQUkVHIGlzIHBhc3NlZCB0byByZWdleGVjLCB0aGF0CisgICAgIHJvdXRpbmUgd2lsbCByZXBvcnQgb25seSBzdWNjZXNzIG9yIGZhaWx1cmUsIGFuZCBub3RoaW5nIGFib3V0IHRoZQorICAgICByZWdpc3RlcnMuCisKKyAgIEl0IHJldHVybnMgMCBpZiBpdCBzdWNjZWVkcywgbm9uemVybyBpZiBpdCBkb2Vzbid0LiAgKFNlZSByZWdleC5oIGZvcgorICAgdGhlIHJldHVybiBjb2RlcyBhbmQgdGhlaXIgbWVhbmluZ3MuKSAgKi8KKworaW50CityZWdjb21wIChyZWdleF90ICpfX3Jlc3RyaWN0IHByZWcsCisJIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgcGF0dGVybiwKKwkgaW50IGNmbGFncykKK3sKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIHJlZ19zeW50YXhfdCBzeW50YXggPSAoKGNmbGFncyAmIFJFR19FWFRFTkRFRCkgPyBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQKKwkJCSA6IFJFX1NZTlRBWF9QT1NJWF9CQVNJQyk7CisKKyAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKyAgcHJlZy0+YWxsb2NhdGVkID0gMDsKKyAgcHJlZy0+dXNlZCA9IDA7CisKKyAgLyogVHJ5IHRvIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgZmFzdG1hcC4gICovCisgIHByZWctPmZhc3RtYXAgPSByZV9tYWxsb2MgKGNoYXIsIFNCQ19NQVgpOworICBpZiAoQkUgKHByZWctPmZhc3RtYXAgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgc3ludGF4IHw9IChjZmxhZ3MgJiBSRUdfSUNBU0UpID8gUkVfSUNBU0UgOiAwOworCisgIC8qIElmIFJFR19ORVdMSU5FIGlzIHNldCwgbmV3bGluZXMgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkuICAqLworICBpZiAoY2ZsYWdzICYgUkVHX05FV0xJTkUpCisgICAgeyAvKiBSRUdfTkVXTElORSBpbXBsaWVzIG5laXRoZXIgLiBub3IgW14uLi5dIG1hdGNoIG5ld2xpbmUuICAqLworICAgICAgc3ludGF4ICY9IH5SRV9ET1RfTkVXTElORTsKKyAgICAgIHN5bnRheCB8PSBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkU7CisgICAgICAvKiBJdCBhbHNvIGNoYW5nZXMgdGhlIG1hdGNoaW5nIGJlaGF2aW9yLiAgKi8KKyAgICAgIHByZWctPm5ld2xpbmVfYW5jaG9yID0gMTsKKyAgICB9CisgIGVsc2UKKyAgICBwcmVnLT5uZXdsaW5lX2FuY2hvciA9IDA7CisgIHByZWctPm5vX3N1YiA9ICEhKGNmbGFncyAmIFJFR19OT1NVQik7CisgIHByZWctPnRyYW5zbGF0ZSA9IE5VTEw7CisKKyAgcmV0ID0gcmVfY29tcGlsZV9pbnRlcm5hbCAocHJlZywgcGF0dGVybiwgc3RybGVuIChwYXR0ZXJuKSwgc3ludGF4KTsKKworICAvKiBQT1NJWCBkb2Vzbid0IGRpc3Rpbmd1aXNoIGJldHdlZW4gYW4gdW5tYXRjaGVkIG9wZW4tZ3JvdXAgYW5kIGFuCisgICAgIHVubWF0Y2hlZCBjbG9zZS1ncm91cDogYm90aCBhcmUgUkVHX0VQQVJFTi4gICovCisgIGlmIChyZXQgPT0gUkVHX0VSUEFSRU4pCisgICAgcmV0ID0gUkVHX0VQQVJFTjsKKworICAvKiBXZSBoYXZlIGFscmVhZHkgY2hlY2tlZCBwcmVnLT5mYXN0bWFwICE9IE5VTEwuICAqLworICBpZiAoQkUgKHJldCA9PSBSRUdfTk9FUlJPUiwgMSkpCisgICAgLyogQ29tcHV0ZSB0aGUgZmFzdG1hcCBub3csIHNpbmNlIHJlZ2V4ZWMgY2Fubm90IG1vZGlmeSB0aGUgcGF0dGVybgorICAgICAgIGJ1ZmZlci4gIFRoaXMgZnVuY3Rpb24gbmV2ZXIgZmFpbHMgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4gICovCisgICAgKHZvaWQpIHJlX2NvbXBpbGVfZmFzdG1hcCAocHJlZyk7CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBTb21lIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbXBpbGluZyB0aGUgZXhwcmVzc2lvbi4gICovCisgICAgICByZV9mcmVlIChwcmVnLT5mYXN0bWFwKTsKKyAgICAgIHByZWctPmZhc3RtYXAgPSBOVUxMOworICAgIH0KKworICByZXR1cm4gKGludCkgcmV0OworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlZ2NvbXAsIHJlZ2NvbXApCisjZW5kaWYKKworLyogUmV0dXJucyBhIG1lc3NhZ2UgY29ycmVzcG9uZGluZyB0byBhbiBlcnJvciBjb2RlLCBFUlJDT0RFLCByZXR1cm5lZAorICAgZnJvbSBlaXRoZXIgcmVnY29tcCBvciByZWdleGVjLiAgIFdlIGRvbid0IHVzZSBQUkVHIGhlcmUuICAqLworCitzaXplX3QKK3JlZ2Vycm9yKGludCBlcnJjb2RlLCBjb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IHByZWcsCisJIGNoYXIgKl9fcmVzdHJpY3QgZXJyYnVmLCBzaXplX3QgZXJyYnVmX3NpemUpCit7CisgIGNvbnN0IGNoYXIgKm1zZzsKKyAgc2l6ZV90IG1zZ19zaXplOworCisgIGlmIChCRSAoZXJyY29kZSA8IDAKKwkgIHx8IGVycmNvZGUgPj0gKGludCkgKHNpemVvZiAoX19yZV9lcnJvcl9tc2dpZF9pZHgpCisJCQkgICAgICAgLyBzaXplb2YgKF9fcmVfZXJyb3JfbXNnaWRfaWR4WzBdKSksIDApKQorICAgIC8qIE9ubHkgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgc2hvdWxkIGJlIHBhc3NlZAorICAgICAgIHRvIHRoaXMgcm91dGluZS4gIElmIHdlIGFyZSBnaXZlbiBhbnl0aGluZyBlbHNlLCBvciBpZiBvdGhlciByZWdleAorICAgICAgIGNvZGUgZ2VuZXJhdGVzIGFuIGludmFsaWQgZXJyb3IgY29kZSwgdGhlbiB0aGUgcHJvZ3JhbSBoYXMgYSBidWcuCisgICAgICAgRHVtcCBjb3JlIHNvIHdlIGNhbiBmaXggaXQuICAqLworICAgIGFib3J0ICgpOworCisgIG1zZyA9IGdldHRleHQgKF9fcmVfZXJyb3JfbXNnaWQgKyBfX3JlX2Vycm9yX21zZ2lkX2lkeFtlcnJjb2RlXSk7CisKKyAgbXNnX3NpemUgPSBzdHJsZW4gKG1zZykgKyAxOyAvKiBJbmNsdWRlcyB0aGUgbnVsbC4gICovCisKKyAgaWYgKEJFIChlcnJidWZfc2l6ZSAhPSAwLCAxKSkKKyAgICB7CisgICAgICBpZiAoQkUgKG1zZ19zaXplID4gZXJyYnVmX3NpemUsIDApKQorCXsKKwkgIG1lbWNweSAoZXJyYnVmLCBtc2csIGVycmJ1Zl9zaXplIC0gMSk7CisJICBlcnJidWZbZXJyYnVmX3NpemUgLSAxXSA9IDA7CisJfQorICAgICAgZWxzZQorCW1lbWNweSAoZXJyYnVmLCBtc2csIG1zZ19zaXplKTsKKyAgICB9CisKKyAgcmV0dXJuIG1zZ19zaXplOworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlZ2Vycm9yLCByZWdlcnJvcikKKyNlbmRpZgorCisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLyogVGhpcyBzdGF0aWMgYXJyYXkgaXMgdXNlZCBmb3IgdGhlIG1hcCB0byBzaW5nbGUtYnl0ZSBjaGFyYWN0ZXJzIHdoZW4KKyAgIFVURi04IGlzIHVzZWQuICBPdGhlcndpc2Ugd2Ugd291bGQgYWxsb2NhdGUgbWVtb3J5IGp1c3QgdG8gaW5pdGlhbGl6ZQorICAgaXQgdGhlIHNhbWUgYWxsIHRoZSB0aW1lLiAgVVRGLTggaXMgdGhlIHByZWZlcnJlZCBlbmNvZGluZyBzbyB0aGlzIGlzCisgICBhIHdvcnRod2hpbGUgb3B0aW1pemF0aW9uLiAgKi8KKyNpZiBfX0dOVUNfXyA+PSAzCitzdGF0aWMgY29uc3QgYml0c2V0X3QgdXRmOF9zYl9tYXAgPSB7CisgIC8qIFNldCB0aGUgZmlyc3QgMTI4IGJpdHMuICAqLworICBbMCAuLi4gMHg4MCAvIEJJVFNFVF9XT1JEX0JJVFMgLSAxXSA9IEJJVFNFVF9XT1JEX01BWAorfTsKKyNlbHNlIC8qICEgKF9fR05VQ19fID49IDMpICovCitzdGF0aWMgYml0c2V0X3QgdXRmOF9zYl9tYXA7CisjZW5kaWYgLyogX19HTlVDX18gPj0gMyAqLworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKworc3RhdGljIHZvaWQKK2ZyZWVfZGZhX2NvbnRlbnQgKHJlX2RmYV90ICpkZmEpCit7CisgIGludCBpLCBqOworCisgIGlmIChkZmEtPm5vZGVzKQorICAgIGZvciAoaSA9IDA7IGkgPCBkZmEtPm5vZGVzX2xlbjsgKytpKQorICAgICAgZnJlZV90b2tlbiAoZGZhLT5ub2RlcyArIGkpOworICByZV9mcmVlIChkZmEtPm5leHRzKTsKKyAgZm9yIChpID0gMDsgaSA8IGRmYS0+bm9kZXNfbGVuOyArK2kpCisgICAgeworICAgICAgaWYgKGRmYS0+ZWNsb3N1cmVzICE9IE5VTEwpCisJcmVfbm9kZV9zZXRfZnJlZSAoZGZhLT5lY2xvc3VyZXMgKyBpKTsKKyAgICAgIGlmIChkZmEtPmludmVjbG9zdXJlcyAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKGRmYS0+aW52ZWNsb3N1cmVzICsgaSk7CisgICAgICBpZiAoZGZhLT5lZGVzdHMgIT0gTlVMTCkKKwlyZV9ub2RlX3NldF9mcmVlIChkZmEtPmVkZXN0cyArIGkpOworICAgIH0KKyAgcmVfZnJlZSAoZGZhLT5lZGVzdHMpOworICByZV9mcmVlIChkZmEtPmVjbG9zdXJlcyk7CisgIHJlX2ZyZWUgKGRmYS0+aW52ZWNsb3N1cmVzKTsKKyAgcmVfZnJlZSAoZGZhLT5ub2Rlcyk7CisKKyAgaWYgKGRmYS0+c3RhdGVfdGFibGUpCisgICAgZm9yIChpID0gMDsgaSA8PSBkZmEtPnN0YXRlX2hhc2hfbWFzazsgKytpKQorICAgICAgeworCXN0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeSAqZW50cnkgPSBkZmEtPnN0YXRlX3RhYmxlICsgaTsKKwlmb3IgKGogPSAwOyBqIDwgZW50cnktPm51bTsgKytqKQorCSAgeworCSAgICByZV9kZmFzdGF0ZV90ICpzdGF0ZSA9IGVudHJ5LT5hcnJheVtqXTsKKwkgICAgZnJlZV9zdGF0ZSAoc3RhdGUpOworCSAgfQorCXJlX2ZyZWUgKGVudHJ5LT5hcnJheSk7CisgICAgICB9CisgIHJlX2ZyZWUgKGRmYS0+c3RhdGVfdGFibGUpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChkZmEtPnNiX2NoYXIgIT0gdXRmOF9zYl9tYXApCisgICAgcmVfZnJlZSAoZGZhLT5zYl9jaGFyKTsKKyNlbmRpZgorICByZV9mcmVlIChkZmEtPnN1YmV4cF9tYXApOworI2lmZGVmIERFQlVHCisgIHJlX2ZyZWUgKGRmYS0+cmVfc3RyKTsKKyNlbmRpZgorCisgIHJlX2ZyZWUgKGRmYSk7Cit9CisKKworLyogRnJlZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgc3BhY2UgdXNlZCBieSBQUkVHLiAgKi8KKwordm9pZAorcmVnZnJlZSAocmVnZXhfdCAqcHJlZykKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGlmIChCRSAoZGZhICE9IE5VTEwsIDEpKQorICAgIGZyZWVfZGZhX2NvbnRlbnQgKGRmYSk7CisgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisgIHByZWctPmFsbG9jYXRlZCA9IDA7CisKKyAgcmVfZnJlZSAocHJlZy0+ZmFzdG1hcCk7CisgIHByZWctPmZhc3RtYXAgPSBOVUxMOworCisgIHJlX2ZyZWUgKHByZWctPnRyYW5zbGF0ZSk7CisgIHByZWctPnRyYW5zbGF0ZSA9IE5VTEw7Cit9CisjaWZkZWYgX0xJQkMKK3dlYWtfYWxpYXMgKF9fcmVnZnJlZSwgcmVnZnJlZSkKKyNlbmRpZgorDAorLyogRW50cnkgcG9pbnRzIGNvbXBhdGlibGUgd2l0aCA0LjIgQlNEIHJlZ2V4IGxpYnJhcnkuICBXZSBkb24ndCBkZWZpbmUKKyAgIHRoZW0gdW5sZXNzIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQuICAqLworCisjaWYgZGVmaW5lZCBfUkVHRVhfUkVfQ09NUCB8fCBkZWZpbmVkIF9MSUJDCisKKy8qIEJTRCBoYXMgb25lIGFuZCBvbmx5IG9uZSBwYXR0ZXJuIGJ1ZmZlci4gICovCitzdGF0aWMgc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyIHJlX2NvbXBfYnVmOworCitjaGFyICoKKyMgaWZkZWYgX0xJQkMKKy8qIE1ha2UgdGhlc2UgZGVmaW5pdGlvbnMgd2VhayBpbiBsaWJjLCBzbyBQT1NJWCBwcm9ncmFtcyBjYW4gcmVkZWZpbmUKKyAgIHRoZXNlIG5hbWVzIGlmIHRoZXkgZG9uJ3QgdXNlIG91ciBmdW5jdGlvbnMsIGFuZCBzdGlsbCB1c2UKKyAgIHJlZ2NvbXAvcmVnZXhlYyBhYm92ZSB3aXRob3V0IGxpbmsgZXJyb3JzLiAgKi8KK3dlYWtfZnVuY3Rpb24KKyMgZW5kaWYKK3JlX2NvbXAgKHMpCisgICAgIGNvbnN0IGNoYXIgKnM7Cit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICBjaGFyICpmYXN0bWFwOworCisgIGlmICghcykKKyAgICB7CisgICAgICBpZiAoIXJlX2NvbXBfYnVmLmJ1ZmZlcikKKwlyZXR1cm4gZ2V0dGV4dCAoIk5vIHByZXZpb3VzIHJlZ3VsYXIgZXhwcmVzc2lvbiIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgIGlmIChyZV9jb21wX2J1Zi5idWZmZXIpCisgICAgeworICAgICAgZmFzdG1hcCA9IHJlX2NvbXBfYnVmLmZhc3RtYXA7CisgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gTlVMTDsKKyAgICAgIF9fcmVnZnJlZSAoJnJlX2NvbXBfYnVmKTsKKyAgICAgIG1lbXNldCAoJnJlX2NvbXBfYnVmLCAnXDAnLCBzaXplb2YgKHJlX2NvbXBfYnVmKSk7CisgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gZmFzdG1hcDsKKyAgICB9CisKKyAgaWYgKHJlX2NvbXBfYnVmLmZhc3RtYXAgPT0gTlVMTCkKKyAgICB7CisgICAgICByZV9jb21wX2J1Zi5mYXN0bWFwID0gKGNoYXIgKikgbWFsbG9jIChTQkNfTUFYKTsKKyAgICAgIGlmIChyZV9jb21wX2J1Zi5mYXN0bWFwID09IE5VTEwpCisJcmV0dXJuIChjaGFyICopIGdldHRleHQgKF9fcmVfZXJyb3JfbXNnaWQKKwkJCQkgKyBfX3JlX2Vycm9yX21zZ2lkX2lkeFsoaW50KSBSRUdfRVNQQUNFXSk7CisgICAgfQorCisgIC8qIFNpbmNlIGByZV9leGVjJyBhbHdheXMgcGFzc2VzIE5VTEwgZm9yIHRoZSBgcmVncycgYXJndW1lbnQsIHdlCisgICAgIGRvbid0IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgcGF0dGVybiBidWZmZXIgZmllbGRzIHdoaWNoIGFmZmVjdCBpdC4gICovCisKKyAgLyogTWF0Y2ggYW5jaG9ycyBhdCBuZXdsaW5lcy4gICovCisgIHJlX2NvbXBfYnVmLm5ld2xpbmVfYW5jaG9yID0gMTsKKworICByZXQgPSByZV9jb21waWxlX2ludGVybmFsICgmcmVfY29tcF9idWYsIHMsIHN0cmxlbiAocyksIHJlX3N5bnRheF9vcHRpb25zKTsKKworICBpZiAoIXJldCkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBZZXMsIHdlJ3JlIGRpc2NhcmRpbmcgYGNvbnN0JyBoZXJlIGlmICFIQVZFX0xJQklOVEwuICAqLworICByZXR1cm4gKGNoYXIgKikgZ2V0dGV4dCAoX19yZV9lcnJvcl9tc2dpZCArIF9fcmVfZXJyb3JfbXNnaWRfaWR4WyhpbnQpIHJldF0pOworfQorCisjaWZkZWYgX0xJQkMKK2xpYmNfZnJlZXJlc19mbiAoZnJlZV9tZW0pCit7CisgIF9fcmVnZnJlZSAoJnJlX2NvbXBfYnVmKTsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX1JFR0VYX1JFX0NPTVAgKi8KKwwKKy8qIEludGVybmFsIGVudHJ5IHBvaW50LgorICAgQ29tcGlsZSB0aGUgcmVndWxhciBleHByZXNzaW9uIFBBVFRFUk4sIHdob3NlIGxlbmd0aCBpcyBMRU5HVEguCisgICBTWU5UQVggaW5kaWNhdGUgcmVndWxhciBleHByZXNzaW9uJ3Mgc3ludGF4LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3JlX2NvbXBpbGVfaW50ZXJuYWwgKHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKiBwYXR0ZXJuLCBzaXplX3QgbGVuZ3RoLAorCQkgICAgIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisgIHJlX2RmYV90ICpkZmE7CisgIHJlX3N0cmluZ190IHJlZ2V4cDsKKworICAvKiBJbml0aWFsaXplIHRoZSBwYXR0ZXJuIGJ1ZmZlci4gICovCisgIHByZWctPmZhc3RtYXBfYWNjdXJhdGUgPSAwOworICBwcmVnLT5zeW50YXggPSBzeW50YXg7CisgIHByZWctPm5vdF9ib2wgPSBwcmVnLT5ub3RfZW9sID0gMDsKKyAgcHJlZy0+dXNlZCA9IDA7CisgIHByZWctPnJlX25zdWIgPSAwOworICBwcmVnLT5jYW5fYmVfbnVsbCA9IDA7CisgIHByZWctPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19VTkFMTE9DQVRFRDsKKworICAvKiBJbml0aWFsaXplIHRoZSBkZmEuICAqLworICBkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBpZiAoQkUgKHByZWctPmFsbG9jYXRlZCA8IHNpemVvZiAocmVfZGZhX3QpLCAwKSkKKyAgICB7CisgICAgICAvKiBJZiB6ZXJvIGFsbG9jYXRlZCwgYnV0IGJ1ZmZlciBpcyBub24tbnVsbCwgdHJ5IHRvIHJlYWxsb2MKKwkgZW5vdWdoIHNwYWNlLiAgVGhpcyBsb3NlcyBpZiBidWZmZXIncyBhZGRyZXNzIGlzIGJvZ3VzLCBidXQKKwkgdGhhdCBpcyB0aGUgdXNlcidzIHJlc3BvbnNpYmlsaXR5LiAgSWYgLT5idWZmZXIgaXMgTlVMTCB0aGlzCisJIGlzIGEgc2ltcGxlIGFsbG9jYXRpb24uICAqLworICAgICAgZGZhID0gcmVfcmVhbGxvYyAocHJlZy0+YnVmZmVyLCByZV9kZmFfdCwgMSk7CisgICAgICBpZiAoZGZhID09IE5VTEwpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBwcmVnLT5hbGxvY2F0ZWQgPSBzaXplb2YgKHJlX2RmYV90KTsKKyAgICAgIHByZWctPmJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIGRmYTsKKyAgICB9CisgIHByZWctPnVzZWQgPSBzaXplb2YgKHJlX2RmYV90KTsKKworICBlcnIgPSBpbml0X2RmYSAoZGZhLCBsZW5ndGgpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgZnJlZV9kZmFfY29udGVudCAoZGZhKTsKKyAgICAgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisgICAgICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisjaWZkZWYgREVCVUcKKyAgLyogTm90ZTogbGVuZ3RoKzEgd2lsbCBub3Qgb3ZlcmZsb3cgc2luY2UgaXQgaXMgY2hlY2tlZCBpbiBpbml0X2RmYS4gICovCisgIGRmYS0+cmVfc3RyID0gcmVfbWFsbG9jIChjaGFyLCBsZW5ndGggKyAxKTsKKyAgc3RybmNweSAoZGZhLT5yZV9zdHIsIHBhdHRlcm4sIGxlbmd0aCArIDEpOworI2VuZGlmCisKKyAgX19saWJjX2xvY2tfaW5pdCAoZGZhLT5sb2NrKTsKKworICBlcnIgPSByZV9zdHJpbmdfY29uc3RydWN0ICgmcmVnZXhwLCBwYXR0ZXJuLCBsZW5ndGgsIHByZWctPnRyYW5zbGF0ZSwKKwkJCSAgICAgc3ludGF4ICYgUkVfSUNBU0UsIGRmYSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgcmVfY29tcGlsZV9pbnRlcm5hbF9mcmVlX3JldHVybjoKKyAgICAgIGZyZWVfd29ya2FyZWFfY29tcGlsZSAocHJlZyk7CisgICAgICByZV9zdHJpbmdfZGVzdHJ1Y3QgKCZyZWdleHApOworICAgICAgZnJlZV9kZmFfY29udGVudCAoZGZhKTsKKyAgICAgIHByZWctPmJ1ZmZlciA9IE5VTEw7CisgICAgICBwcmVnLT5hbGxvY2F0ZWQgPSAwOworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgLyogUGFyc2UgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYW5kIGJ1aWxkIGEgc3RydWN0dXJlIHRyZWUuICAqLworICBwcmVnLT5yZV9uc3ViID0gMDsKKyAgZGZhLT5zdHJfdHJlZSA9IHBhcnNlICgmcmVnZXhwLCBwcmVnLCBzeW50YXgsICZlcnIpOworICBpZiAoQkUgKGRmYS0+c3RyX3RyZWUgPT0gTlVMTCwgMCkpCisgICAgZ290byByZV9jb21waWxlX2ludGVybmFsX2ZyZWVfcmV0dXJuOworCisgIC8qIEFuYWx5emUgdGhlIHRyZWUgYW5kIGNyZWF0ZSB0aGUgbmZhLiAgKi8KKyAgZXJyID0gYW5hbHl6ZSAocHJlZyk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICBnb3RvIHJlX2NvbXBpbGVfaW50ZXJuYWxfZnJlZV9yZXR1cm47CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBJZiBwb3NzaWJsZSwgZG8gc2VhcmNoaW5nIGluIHNpbmdsZSBieXRlIGVuY29kaW5nIHRvIHNwZWVkIHRoaW5ncyB1cC4gICovCisgIGlmIChkZmEtPmlzX3V0ZjggJiYgIShzeW50YXggJiBSRV9JQ0FTRSkgJiYgcHJlZy0+dHJhbnNsYXRlID09IE5VTEwpCisgICAgb3B0aW1pemVfdXRmOCAoZGZhKTsKKyNlbmRpZgorCisgIC8qIFRoZW4gY3JlYXRlIHRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBkZmEuICAqLworICBlcnIgPSBjcmVhdGVfaW5pdGlhbF9zdGF0ZSAoZGZhKTsKKworICAvKiBSZWxlYXNlIHdvcmsgYXJlYXMuICAqLworICBmcmVlX3dvcmthcmVhX2NvbXBpbGUgKHByZWcpOworICByZV9zdHJpbmdfZGVzdHJ1Y3QgKCZyZWdleHApOworCisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICB7CisgICAgICBmcmVlX2RmYV9jb250ZW50IChkZmEpOworICAgICAgcHJlZy0+YnVmZmVyID0gTlVMTDsKKyAgICAgIHByZWctPmFsbG9jYXRlZCA9IDA7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKKy8qIEluaXRpYWxpemUgREZBLiAgV2UgdXNlIHRoZSBsZW5ndGggb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBQQVRfTEVOCisgICBhcyB0aGUgaW5pdGlhbCBsZW5ndGggb2Ygc29tZSBhcnJheXMuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW5pdF9kZmEgKHJlX2RmYV90ICpkZmEsIHNpemVfdCBwYXRfbGVuKQoreworICB1bnNpZ25lZCBpbnQgdGFibGVfc2l6ZTsKKyNpZm5kZWYgX0xJQkMKKyAgY2hhciAqY29kZXNldF9uYW1lOworI2VuZGlmCisKKyAgbWVtc2V0IChkZmEsICdcMCcsIHNpemVvZiAocmVfZGZhX3QpKTsKKworICAvKiBGb3JjZSBhbGxvY2F0aW9uIG9mIHN0cl90cmVlX3N0b3JhZ2UgdGhlIGZpcnN0IHRpbWUuICAqLworICBkZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4ID0gQklOX1RSRUVfU1RPUkFHRV9TSVpFOworCisgIC8qIEF2b2lkIG92ZXJmbG93cy4gICovCisgIGlmIChwYXRfbGVuID09IFNJWkVfTUFYKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworCisgIGRmYS0+bm9kZXNfYWxsb2MgPSBwYXRfbGVuICsgMTsKKyAgZGZhLT5ub2RlcyA9IHJlX21hbGxvYyAocmVfdG9rZW5fdCwgZGZhLT5ub2Rlc19hbGxvYyk7CisKKyAgLyogIHRhYmxlX3NpemUgPSAyIF4gY2VpbChsb2cgcGF0X2xlbikgKi8KKyAgZm9yICh0YWJsZV9zaXplID0gMTsgOyB0YWJsZV9zaXplIDw8PSAxKQorICAgIGlmICh0YWJsZV9zaXplID4gcGF0X2xlbikKKyAgICAgIGJyZWFrOworCisgIGRmYS0+c3RhdGVfdGFibGUgPSBjYWxsb2MgKHNpemVvZiAoc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5KSwgdGFibGVfc2l6ZSk7CisgIGRmYS0+c3RhdGVfaGFzaF9tYXNrID0gdGFibGVfc2l6ZSAtIDE7CisKKyAgZGZhLT5tYl9jdXJfbWF4ID0gTUJfQ1VSX01BWDsKKyNpZmRlZiBfTElCQworICBpZiAoZGZhLT5tYl9jdXJfbWF4ID09IDYKKyAgICAgICYmIHN0cmNtcCAoX05MX0NVUlJFTlQgKExDX0NUWVBFLCBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FKSwgIlVURi04IikgPT0gMCkKKyAgICBkZmEtPmlzX3V0ZjggPSAxOworICBkZmEtPm1hcF9ub3Rhc2NpaSA9IChfTkxfQ1VSUkVOVF9XT1JEIChMQ19DVFlQRSwgX05MX0NUWVBFX01BUF9UT19OT05BU0NJSSkKKwkJICAgICAgICE9IDApOworI2Vsc2UKKyMgaWZkZWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUCisgIGNvZGVzZXRfbmFtZSA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsKKyMgZWxzZQorICBjb2Rlc2V0X25hbWUgPSBnZXRlbnYgKCJMQ19BTEwiKTsKKyAgaWYgKGNvZGVzZXRfbmFtZSA9PSBOVUxMIHx8IGNvZGVzZXRfbmFtZVswXSA9PSAnXDAnKQorICAgIGNvZGVzZXRfbmFtZSA9IGdldGVudiAoIkxDX0NUWVBFIik7CisgIGlmIChjb2Rlc2V0X25hbWUgPT0gTlVMTCB8fCBjb2Rlc2V0X25hbWVbMF0gPT0gJ1wwJykKKyAgICBjb2Rlc2V0X25hbWUgPSBnZXRlbnYgKCJMQU5HIik7CisgIGlmIChjb2Rlc2V0X25hbWUgPT0gTlVMTCkKKyAgICBjb2Rlc2V0X25hbWUgPSAiIjsKKyAgZWxzZSBpZiAoc3RyY2hyIChjb2Rlc2V0X25hbWUsICcuJykgIT0gIE5VTEwpCisgICAgY29kZXNldF9uYW1lID0gc3RyY2hyIChjb2Rlc2V0X25hbWUsICcuJykgKyAxOworIyBlbmRpZgorCisgIC8qIHN0cmNhc2VjbXAgaXNuJ3QgYSBzdGFuZGFyZCBpbnRlcmZhY2UuIGJydXRlIGZvcmNlIGNoZWNrICovCisjaWYgMAorICBpZiAoc3RyY2FzZWNtcCAoY29kZXNldF9uYW1lLCAiVVRGLTgiKSA9PSAwCisgICAgICB8fCBzdHJjYXNlY21wIChjb2Rlc2V0X25hbWUsICJVVEY4IikgPT0gMCkKKyAgICBkZmEtPmlzX3V0ZjggPSAxOworI2Vsc2UKKyAgaWYgKCAgIChjb2Rlc2V0X25hbWVbMF0gPT0gJ1UnIHx8IGNvZGVzZXRfbmFtZVswXSA9PSAndScpCisgICAgICAmJiAoY29kZXNldF9uYW1lWzFdID09ICdUJyB8fCBjb2Rlc2V0X25hbWVbMV0gPT0gJ3QnKQorICAgICAgJiYgKGNvZGVzZXRfbmFtZVsyXSA9PSAnRicgfHwgY29kZXNldF9uYW1lWzJdID09ICdmJykKKyAgICAgICYmIChjb2Rlc2V0X25hbWVbM10gPT0gJy0nCisgICAgICAgICAgPyBjb2Rlc2V0X25hbWVbNF0gPT0gJzgnICYmIGNvZGVzZXRfbmFtZVs1XSA9PSAnXDAnCisgICAgICAgICAgOiBjb2Rlc2V0X25hbWVbM10gPT0gJzgnICYmIGNvZGVzZXRfbmFtZVs0XSA9PSAnXDAnKSkKKyAgICBkZmEtPmlzX3V0ZjggPSAxOworI2VuZGlmCisKKyAgLyogV2UgY2hlY2sgZXhoYXVzdGl2ZWx5IGluIHRoZSBsb29wIGJlbG93IGlmIHRoaXMgY2hhcnNldCBpcyBhCisgICAgIHN1cGVyc2V0IG9mIEFTQ0lJLiAgKi8KKyAgZGZhLT5tYXBfbm90YXNjaWkgPSAwOworI2VuZGlmCisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKyAgICB7CisgICAgICBpZiAoZGZhLT5pc191dGY4KQorICAgICAgICB7CisjaWYgIWRlZmluZWQoX19HTlVDX18pIHx8IF9fR05VQ19fIDwgMworCSAgc3RhdGljIHNob3J0IHV0Zjhfc2JfbWFwX2luaXRlZCA9IDA7CisKKwkgIGlmICghIHV0Zjhfc2JfbWFwX2luaXRlZCkKKwkgICAgeworCQlpbnQgaTsKKworCSAgCXV0Zjhfc2JfbWFwX2luaXRlZCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPD0gMHg4MCAvIEJJVFNFVF9XT1JEX0JJVFMgLSAxOyBpKyspCisJCSAgdXRmOF9zYl9tYXBbaV0gPSBCSVRTRVRfV09SRF9NQVg7CisJICAgIH0KKyNlbmRpZgorCSAgZGZhLT5zYl9jaGFyID0gKHJlX2JpdHNldF9wdHJfdCkgdXRmOF9zYl9tYXA7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGludCBpLCBqLCBjaDsKKworCSAgZGZhLT5zYl9jaGFyID0gKHJlX2JpdHNldF9wdHJfdCkgY2FsbG9jIChzaXplb2YgKGJpdHNldF90KSwgMSk7CisJICBpZiAoQkUgKGRmYS0+c2JfY2hhciA9PSBOVUxMLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKwkgIC8qIFNldCB0aGUgYml0cyBjb3JyZXNwb25kaW5nIHRvIHNpbmdsZSBieXRlIGNoYXJzLiAgKi8KKwkgIGZvciAoaSA9IDAsIGNoID0gMDsgaSA8IEJJVFNFVF9XT1JEUzsgKytpKQorCSAgICBmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRfQklUUzsgKytqLCArK2NoKQorCSAgICAgIHsKKwkJd2ludF90IHdjaCA9IF9fYnRvd2MgKGNoKTsKKwkJaWYgKHdjaCAhPSBXRU9GKQorCQkgIGRmYS0+c2JfY2hhcltpXSB8PSAoYml0c2V0X3dvcmRfdCkgMSA8PCBqOworIyBpZm5kZWYgX0xJQkMKKwkJaWYgKGlzYXNjaWkgKGNoKSAmJiB3Y2ggIT0gY2gpCisJCSAgZGZhLT5tYXBfbm90YXNjaWkgPSAxOworIyBlbmRpZgorCSAgICAgIH0KKwl9CisgICAgfQorI2VuZGlmCisKKyAgaWYgKEJFIChkZmEtPm5vZGVzID09IE5VTEwgfHwgZGZhLT5zdGF0ZV90YWJsZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBJbml0aWFsaXplIFdPUkRfQ0hBUiB0YWJsZSwgd2hpY2ggaW5kaWNhdGUgd2hpY2ggY2hhcmFjdGVyIGlzCisgICAid29yZCIuICBJbiB0aGlzIGNhc2UgIndvcmQiIG1lYW5zIHRoYXQgaXQgaXMgdGhlIHdvcmQgY29uc3RydWN0aW9uCisgICBjaGFyYWN0ZXIgdXNlZCBieSBzb21lIG9wZXJhdG9ycyBsaWtlICJcPCIsICJcPiIsIGV0Yy4gICovCisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgoraW5pdF93b3JkX2NoYXIgKHJlX2RmYV90ICpkZmEpCit7CisgIGludCBpLCBqLCBjaDsKKyAgZGZhLT53b3JkX29wc191c2VkID0gMTsKKyAgZm9yIChpID0gMCwgY2ggPSAwOyBpIDwgQklUU0VUX1dPUkRTOyArK2kpCisgICAgZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEX0JJVFM7ICsraiwgKytjaCkKKyAgICAgIGlmIChpc2FsbnVtIChjaCkgfHwgY2ggPT0gJ18nKQorCWRmYS0+d29yZF9jaGFyW2ldIHw9IChiaXRzZXRfd29yZF90KSAxIDw8IGo7Cit9CisKKy8qIEZyZWUgdGhlIHdvcmsgYXJlYSB3aGljaCBhcmUgb25seSB1c2VkIHdoaWxlIGNvbXBpbGluZy4gICovCisKK3N0YXRpYyB2b2lkCitmcmVlX3dvcmthcmVhX2NvbXBpbGUgKHJlZ2V4X3QgKnByZWcpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBiaW5fdHJlZV9zdG9yYWdlX3QgKnN0b3JhZ2UsICpuZXh0OworICBmb3IgKHN0b3JhZ2UgPSBkZmEtPnN0cl90cmVlX3N0b3JhZ2U7IHN0b3JhZ2U7IHN0b3JhZ2UgPSBuZXh0KQorICAgIHsKKyAgICAgIG5leHQgPSBzdG9yYWdlLT5uZXh0OworICAgICAgcmVfZnJlZSAoc3RvcmFnZSk7CisgICAgfQorICBkZmEtPnN0cl90cmVlX3N0b3JhZ2UgPSBOVUxMOworICBkZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4ID0gQklOX1RSRUVfU1RPUkFHRV9TSVpFOworICBkZmEtPnN0cl90cmVlID0gTlVMTDsKKyAgcmVfZnJlZSAoZGZhLT5vcmdfaW5kaWNlcyk7CisgIGRmYS0+b3JnX2luZGljZXMgPSBOVUxMOworfQorCisvKiBDcmVhdGUgaW5pdGlhbCBzdGF0ZXMgZm9yIGFsbCBjb250ZXh0cy4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitjcmVhdGVfaW5pdGlhbF9zdGF0ZSAocmVfZGZhX3QgKmRmYSkKK3sKKyAgaW50IGZpcnN0LCBpOworICByZWdfZXJyY29kZV90IGVycjsKKyAgcmVfbm9kZV9zZXQgaW5pdF9ub2RlczsKKworICAvKiBJbml0aWFsIHN0YXRlcyBoYXZlIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgdGhlIG5vZGUgd2hpY2ggaXMKKyAgICAgdGhlIGZpcnN0IG5vZGUgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4gICovCisgIGZpcnN0ID0gZGZhLT5zdHJfdHJlZS0+Zmlyc3QtPm5vZGVfaWR4OworICBkZmEtPmluaXRfbm9kZSA9IGZpcnN0OworICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZpbml0X25vZGVzLCBkZmEtPmVjbG9zdXJlcyArIGZpcnN0KTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiBlcnI7CisKKyAgLyogVGhlIGJhY2stcmVmZXJlbmNlcyB3aGljaCBhcmUgaW4gaW5pdGlhbCBzdGF0ZXMgY2FuIGVwc2lsb24gdHJhbnNpdCwKKyAgICAgc2luY2UgaW4gdGhpcyBjYXNlIGFsbCBvZiB0aGUgc3ViZXhwcmVzc2lvbnMgY2FuIGJlIG51bGwuCisgICAgIFRoZW4gd2UgYWRkIGVwc2lsb24gY2xvc3VyZXMgb2YgdGhlIG5vZGVzIHdoaWNoIGFyZSB0aGUgbmV4dCBub2RlcyBvZgorICAgICB0aGUgYmFjay1yZWZlcmVuY2VzLiAgKi8KKyAgaWYgKGRmYS0+bmJhY2tyZWYgPiAwKQorICAgIGZvciAoaSA9IDA7IGkgPCBpbml0X25vZGVzLm5lbGVtOyArK2kpCisgICAgICB7CisJaW50IG5vZGVfaWR4ID0gaW5pdF9ub2Rlcy5lbGVtc1tpXTsKKwlyZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV9pZHhdLnR5cGU7CisKKwlpbnQgY2xleHBfaWR4OworCWlmICh0eXBlICE9IE9QX0JBQ0tfUkVGKQorCSAgY29udGludWU7CisJZm9yIChjbGV4cF9pZHggPSAwOyBjbGV4cF9pZHggPCBpbml0X25vZGVzLm5lbGVtOyArK2NsZXhwX2lkeCkKKwkgIHsKKwkgICAgcmVfdG9rZW5fdCAqY2xleHBfbm9kZTsKKwkgICAgY2xleHBfbm9kZSA9IGRmYS0+bm9kZXMgKyBpbml0X25vZGVzLmVsZW1zW2NsZXhwX2lkeF07CisJICAgIGlmIChjbGV4cF9ub2RlLT50eXBlID09IE9QX0NMT1NFX1NVQkVYUAorCQkmJiBjbGV4cF9ub2RlLT5vcHIuaWR4ID09IGRmYS0+bm9kZXNbbm9kZV9pZHhdLm9wci5pZHgpCisJICAgICAgYnJlYWs7CisJICB9CisJaWYgKGNsZXhwX2lkeCA9PSBpbml0X25vZGVzLm5lbGVtKQorCSAgY29udGludWU7CisKKwlpZiAodHlwZSA9PSBPUF9CQUNLX1JFRikKKwkgIHsKKwkgICAgaW50IGRlc3RfaWR4ID0gZGZhLT5lZGVzdHNbbm9kZV9pZHhdLmVsZW1zWzBdOworCSAgICBpZiAoIXJlX25vZGVfc2V0X2NvbnRhaW5zICgmaW5pdF9ub2RlcywgZGVzdF9pZHgpKQorCSAgICAgIHsKKwkJcmVnX2VycmNvZGVfdCBlcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJmluaXRfbm9kZXMsCisJCQkJCQkgICAgICAgZGZhLT5lY2xvc3VyZXMKKwkJCQkJCSAgICAgICArIGRlc3RfaWR4KTsKKwkJaWYgKGVyciAhPSBSRUdfTk9FUlJPUikKKwkJICByZXR1cm4gZXJyOworCQlpID0gMDsKKwkgICAgICB9CisJICB9CisgICAgICB9CisKKyAgLyogSXQgbXVzdCBiZSB0aGUgZmlyc3QgdGltZSB0byBpbnZva2UgYWNxdWlyZV9zdGF0ZS4gICovCisgIGRmYS0+aW5pdF9zdGF0ZSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmaW5pdF9ub2RlcywgMCk7CisgIC8qIFdlIGRvbid0IGNoZWNrIEVSUiBoZXJlLCBzaW5jZSB0aGUgaW5pdGlhbCBzdGF0ZSBtdXN0IG5vdCBiZSBOVUxMLiAgKi8KKyAgaWYgKEJFIChkZmEtPmluaXRfc3RhdGUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIGVycjsKKyAgaWYgKGRmYS0+aW5pdF9zdGF0ZS0+aGFzX2NvbnN0cmFpbnQpCisgICAgeworICAgICAgZGZhLT5pbml0X3N0YXRlX3dvcmQgPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwgJmluaXRfbm9kZXMsCisJCQkJCQkgICAgICAgQ09OVEVYVF9XT1JEKTsKKyAgICAgIGRmYS0+aW5pdF9zdGF0ZV9ubCA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmaW5pdF9ub2RlcywKKwkJCQkJCSAgICAgQ09OVEVYVF9ORVdMSU5FKTsKKyAgICAgIGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYgPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKCZlcnIsIGRmYSwKKwkJCQkJCQkgJmluaXRfbm9kZXMsCisJCQkJCQkJIENPTlRFWFRfTkVXTElORQorCQkJCQkJCSB8IENPTlRFWFRfQkVHQlVGKTsKKyAgICAgIGlmIChCRSAoZGZhLT5pbml0X3N0YXRlX3dvcmQgPT0gTlVMTCB8fCBkZmEtPmluaXRfc3RhdGVfbmwgPT0gTlVMTAorCSAgICAgIHx8IGRmYS0+aW5pdF9zdGF0ZV9iZWdidWYgPT0gTlVMTCwgMCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisgIGVsc2UKKyAgICBkZmEtPmluaXRfc3RhdGVfd29yZCA9IGRmYS0+aW5pdF9zdGF0ZV9ubAorICAgICAgPSBkZmEtPmluaXRfc3RhdGVfYmVnYnVmID0gZGZhLT5pbml0X3N0YXRlOworCisgIHJlX25vZGVfc2V0X2ZyZWUgKCZpbml0X25vZGVzKTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorDAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisvKiBJZiBpdCBpcyBwb3NzaWJsZSB0byBkbyBzZWFyY2hpbmcgaW4gc2luZ2xlIGJ5dGUgZW5jb2RpbmcgaW5zdGVhZCBvZiBVVEYtOAorICAgdG8gc3BlZWQgdGhpbmdzIHVwLCBzZXQgZGZhLT5tYl9jdXJfbWF4IHRvIDEsIGNsZWFyIGlzX3V0ZjggYW5kIGNoYW5nZQorICAgREZBIG5vZGVzIHdoZXJlIG5lZWRlZC4gICovCisKK3N0YXRpYyB2b2lkCitvcHRpbWl6ZV91dGY4IChyZV9kZmFfdCAqZGZhKQoreworICBpbnQgbm9kZSwgaSwgbWJfY2hhcnMgPSAwLCBoYXNfcGVyaW9kID0gMDsKKworICBmb3IgKG5vZGUgPSAwOyBub2RlIDwgZGZhLT5ub2Rlc19sZW47ICsrbm9kZSkKKyAgICBzd2l0Y2ggKGRmYS0+bm9kZXNbbm9kZV0udHlwZSkKKyAgICAgIHsKKyAgICAgIGNhc2UgQ0hBUkFDVEVSOgorCWlmIChkZmEtPm5vZGVzW25vZGVdLm9wci5jID49IDB4ODApCisJICBtYl9jaGFycyA9IDE7CisJYnJlYWs7CisgICAgICBjYXNlIEFOQ0hPUjoKKwlzd2l0Y2ggKGRmYS0+bm9kZXNbbm9kZV0ub3ByLmN0eF90eXBlKQorCSAgeworCSAgY2FzZSBMSU5FX0ZJUlNUOgorCSAgY2FzZSBMSU5FX0xBU1Q6CisJICBjYXNlIEJVRl9GSVJTVDoKKwkgIGNhc2UgQlVGX0xBU1Q6CisJICAgIGJyZWFrOworCSAgZGVmYXVsdDoKKwkgICAgLyogV29yZCBhbmNob3JzIGV0Yy4gY2Fubm90IGJlIGhhbmRsZWQuICBJdCdzIG9rYXkgdG8gdGVzdAorCSAgICAgICBvcHIuY3R4X3R5cGUgc2luY2UgY29uc3RyYWludHMgKGZvciBhbGwgREZBIG5vZGVzKSBhcmUKKwkgICAgICAgY3JlYXRlZCBieSBPUmluZyBvbmUgb3IgbW9yZSBvcHIuY3R4X3R5cGUgdmFsdWVzLiAgKi8KKwkgICAgcmV0dXJuOworCSAgfQorCWJyZWFrOworICAgICAgY2FzZSBPUF9QRVJJT0Q6CisJaGFzX3BlcmlvZCA9IDE7CisJYnJlYWs7CisgICAgICBjYXNlIE9QX0JBQ0tfUkVGOgorICAgICAgY2FzZSBPUF9BTFQ6CisgICAgICBjYXNlIEVORF9PRl9SRToKKyAgICAgIGNhc2UgT1BfRFVQX0FTVEVSSVNLOgorICAgICAgY2FzZSBPUF9PUEVOX1NVQkVYUDoKKyAgICAgIGNhc2UgT1BfQ0xPU0VfU1VCRVhQOgorCWJyZWFrOworICAgICAgY2FzZSBDT01QTEVYX0JSQUNLRVQ6CisJcmV0dXJuOworICAgICAgY2FzZSBTSU1QTEVfQlJBQ0tFVDoKKwkvKiBKdXN0IGRvdWJsZSBjaGVjay4gIFRoZSBub24tQVNDSUkgcmFuZ2Ugc3RhcnRzIGF0IDB4ODAuICAqLworCWFzc2VydCAoMHg4MCAlIEJJVFNFVF9XT1JEX0JJVFMgPT0gMCk7CisJZm9yIChpID0gMHg4MCAvIEJJVFNFVF9XT1JEX0JJVFM7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwkgIGlmIChkZmEtPm5vZGVzW25vZGVdLm9wci5zYmNzZXRbaV0pCisJICAgIHJldHVybjsKKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJYWJvcnQgKCk7CisgICAgICB9CisKKyAgaWYgKG1iX2NoYXJzIHx8IGhhc19wZXJpb2QpCisgICAgZm9yIChub2RlID0gMDsgbm9kZSA8IGRmYS0+bm9kZXNfbGVuOyArK25vZGUpCisgICAgICB7CisJaWYgKGRmYS0+bm9kZXNbbm9kZV0udHlwZSA9PSBDSEFSQUNURVIKKwkgICAgJiYgZGZhLT5ub2Rlc1tub2RlXS5vcHIuYyA+PSAweDgwKQorCSAgZGZhLT5ub2Rlc1tub2RlXS5tYl9wYXJ0aWFsID0gMDsKKwllbHNlIGlmIChkZmEtPm5vZGVzW25vZGVdLnR5cGUgPT0gT1BfUEVSSU9EKQorCSAgZGZhLT5ub2Rlc1tub2RlXS50eXBlID0gT1BfVVRGOF9QRVJJT0Q7CisgICAgICB9CisKKyAgLyogVGhlIHNlYXJjaCBjYW4gYmUgaW4gc2luZ2xlIGJ5dGUgbG9jYWxlLiAgKi8KKyAgZGZhLT5tYl9jdXJfbWF4ID0gMTsKKyAgZGZhLT5pc191dGY4ID0gMDsKKyAgZGZhLT5oYXNfbWJfbm9kZSA9IGRmYS0+bmJhY2tyZWYgPiAwIHx8IGhhc19wZXJpb2Q7Cit9CisjZW5kaWYKKwwKKy8qIEFuYWx5emUgdGhlIHN0cnVjdHVyZSB0cmVlLCBhbmQgY2FsY3VsYXRlICJmaXJzdCIsICJuZXh0IiwgImVkZXN0IiwKKyAgICJlY2xvc3VyZSIsIGFuZCAiaW52ZWNsb3N1cmUiLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2FuYWx5emUgKHJlZ2V4X3QgKnByZWcpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICByZWdfZXJyY29kZV90IHJldDsKKworICAvKiBBbGxvY2F0ZSBhcnJheXMuICAqLworICBkZmEtPm5leHRzID0gcmVfbWFsbG9jIChpbnQsIGRmYS0+bm9kZXNfYWxsb2MpOworICBkZmEtPm9yZ19pbmRpY2VzID0gcmVfbWFsbG9jIChpbnQsIGRmYS0+bm9kZXNfYWxsb2MpOworICBkZmEtPmVkZXN0cyA9IHJlX21hbGxvYyAocmVfbm9kZV9zZXQsIGRmYS0+bm9kZXNfYWxsb2MpOworICBkZmEtPmVjbG9zdXJlcyA9IHJlX21hbGxvYyAocmVfbm9kZV9zZXQsIGRmYS0+bm9kZXNfYWxsb2MpOworICBpZiAoQkUgKGRmYS0+bmV4dHMgPT0gTlVMTCB8fCBkZmEtPm9yZ19pbmRpY2VzID09IE5VTEwgfHwgZGZhLT5lZGVzdHMgPT0gTlVMTAorCSAgfHwgZGZhLT5lY2xvc3VyZXMgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgZGZhLT5zdWJleHBfbWFwID0gcmVfbWFsbG9jIChpbnQsIHByZWctPnJlX25zdWIpOworICBpZiAoZGZhLT5zdWJleHBfbWFwICE9IE5VTEwpCisgICAgeworICAgICAgaW50IGk7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZy0+cmVfbnN1YjsgaSsrKQorCWRmYS0+c3ViZXhwX21hcFtpXSA9IGk7CisgICAgICBwcmVvcmRlciAoZGZhLT5zdHJfdHJlZSwgb3B0aW1pemVfc3ViZXhwcywgZGZhKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmVnLT5yZV9uc3ViOyBpKyspCisJaWYgKGRmYS0+c3ViZXhwX21hcFtpXSAhPSBpKQorCSAgYnJlYWs7CisgICAgICBpZiAoaSA9PSBwcmVnLT5yZV9uc3ViKQorCXsKKwkgIGZyZWUgKGRmYS0+c3ViZXhwX21hcCk7CisJICBkZmEtPnN1YmV4cF9tYXAgPSBOVUxMOworCX0KKyAgICB9CisKKyAgcmV0ID0gcG9zdG9yZGVyIChkZmEtPnN0cl90cmVlLCBsb3dlcl9zdWJleHBzLCBwcmVnKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisgIHJldCA9IHBvc3RvcmRlciAoZGZhLT5zdHJfdHJlZSwgY2FsY19maXJzdCwgZGZhKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisgIHByZW9yZGVyIChkZmEtPnN0cl90cmVlLCBjYWxjX25leHQsIGRmYSk7CisgIHJldCA9IHByZW9yZGVyIChkZmEtPnN0cl90cmVlLCBsaW5rX25mYV9ub2RlcywgZGZhKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisgIHJldCA9IGNhbGNfZWNsb3N1cmUgKGRmYSk7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworCisgIC8qIFdlIG9ubHkgbmVlZCB0aGlzIGR1cmluZyB0aGUgcHJ1bmVfaW1wb3NzaWJsZV9ub2RlcyBwYXNzIGluIHJlZ2V4ZWMuYzsKKyAgICAgc2tpcCBpdCBpZiBwX2lfbiB3aWxsIG5vdCBydW4sIGFzIGNhbGNfaW52ZWNsb3N1cmUgY2FuIGJlIHF1YWRyYXRpYy4gICovCisgIGlmICgoIXByZWctPm5vX3N1YiAmJiBwcmVnLT5yZV9uc3ViID4gMCAmJiBkZmEtPmhhc19wbHVyYWxfbWF0Y2gpCisgICAgICB8fCBkZmEtPm5iYWNrcmVmKQorICAgIHsKKyAgICAgIGRmYS0+aW52ZWNsb3N1cmVzID0gcmVfbWFsbG9jIChyZV9ub2RlX3NldCwgZGZhLT5ub2Rlc19sZW4pOworICAgICAgaWYgKEJFIChkZmEtPmludmVjbG9zdXJlcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHJldCA9IGNhbGNfaW52ZWNsb3N1cmUgKGRmYSk7CisgICAgfQorCisgIHJldHVybiByZXQ7Cit9CisKKy8qIE91ciBwYXJzZSB0cmVlcyBhcmUgdmVyeSB1bmJhbGFuY2VkLCBzbyB3ZSBjYW5ub3QgdXNlIGEgc3RhY2sgdG8KKyAgIGltcGxlbWVudCBwYXJzZSB0cmVlIHZpc2l0cy4gIEluc3RlYWQsIHdlIHVzZSBwYXJlbnQgcG9pbnRlcnMgYW5kCisgICBzb21lIGhhaXJ5IGNvZGUgaW4gdGhlc2UgdHdvIGZ1bmN0aW9ucy4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcG9zdG9yZGVyIChiaW5fdHJlZV90ICpyb290LCByZWdfZXJyY29kZV90IChmbiAodm9pZCAqLCBiaW5fdHJlZV90ICopKSwKKwkgICB2b2lkICpleHRyYSkKK3sKKyAgYmluX3RyZWVfdCAqbm9kZSwgKnByZXY7CisKKyAgZm9yIChub2RlID0gcm9vdDsgOyApCisgICAgeworICAgICAgLyogRGVzY2VuZCBkb3duIHRoZSB0cmVlLCBwcmVmZXJhYmx5IHRvIHRoZSBsZWZ0IChvciB0byB0aGUgcmlnaHQKKwkgaWYgdGhhdCdzIHRoZSBvbmx5IGNoaWxkKS4gICovCisgICAgICB3aGlsZSAobm9kZS0+bGVmdCB8fCBub2RlLT5yaWdodCkKKwlpZiAobm9kZS0+bGVmdCkKKwkgIG5vZGUgPSBub2RlLT5sZWZ0OworCWVsc2UKKwkgIG5vZGUgPSBub2RlLT5yaWdodDsKKworICAgICAgZG8KKwl7CisJICByZWdfZXJyY29kZV90IGVyciA9IGZuIChleHRyYSwgbm9kZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJICBpZiAobm9kZS0+cGFyZW50ID09IE5VTEwpCisJICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKwkgIHByZXYgPSBub2RlOworCSAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKwl9CisgICAgICAvKiBHbyB1cCB3aGlsZSB3ZSBoYXZlIGEgbm9kZSB0aGF0IGlzIHJlYWNoZWQgZnJvbSB0aGUgcmlnaHQuICAqLworICAgICAgd2hpbGUgKG5vZGUtPnJpZ2h0ID09IHByZXYgfHwgbm9kZS0+cmlnaHQgPT0gTlVMTCk7CisgICAgICBub2RlID0gbm9kZS0+cmlnaHQ7CisgICAgfQorfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcHJlb3JkZXIgKGJpbl90cmVlX3QgKnJvb3QsIHJlZ19lcnJjb2RlX3QgKGZuICh2b2lkICosIGJpbl90cmVlX3QgKikpLAorCSAgdm9pZCAqZXh0cmEpCit7CisgIGJpbl90cmVlX3QgKm5vZGU7CisKKyAgZm9yIChub2RlID0gcm9vdDsgOyApCisgICAgeworICAgICAgcmVnX2VycmNvZGVfdCBlcnIgPSBmbiAoZXh0cmEsIG5vZGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisKKyAgICAgIC8qIEdvIHRvIHRoZSBsZWZ0IG5vZGUsIG9yIHVwIGFuZCB0byB0aGUgcmlnaHQuICAqLworICAgICAgaWYgKG5vZGUtPmxlZnQpCisJbm9kZSA9IG5vZGUtPmxlZnQ7CisgICAgICBlbHNlCisJeworCSAgYmluX3RyZWVfdCAqcHJldiA9IE5VTEw7CisJICB3aGlsZSAobm9kZS0+cmlnaHQgPT0gcHJldiB8fCBub2RlLT5yaWdodCA9PSBOVUxMKQorCSAgICB7CisJICAgICAgcHJldiA9IG5vZGU7CisJICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKwkgICAgICBpZiAoIW5vZGUpCisJCXJldHVybiBSRUdfTk9FUlJPUjsKKwkgICAgfQorCSAgbm9kZSA9IG5vZGUtPnJpZ2h0OworCX0KKyAgICB9Cit9CisKKy8qIE9wdGltaXphdGlvbiBwYXNzOiBpZiBhIFNVQkVYUCBpcyBlbnRpcmVseSBjb250YWluZWQsIHN0cmlwIGl0IGFuZCB0ZWxsCisgICByZV9zZWFyY2hfaW50ZXJuYWwgdG8gbWFwIHRoZSBpbm5lciBvbmUncyBvcHIuaWR4IHRvIHRoaXMgb25lJ3MuICBBZGp1c3QKKyAgIGJhY2tyZWZlcmVuY2VzIGFzIHdlbGwuICBSZXF1aXJlcyBhIHByZW9yZGVyIHZpc2l0LiAgKi8KK3N0YXRpYyByZWdfZXJyY29kZV90CitvcHRpbWl6ZV9zdWJleHBzICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBleHRyYTsKKworICBpZiAobm9kZS0+dG9rZW4udHlwZSA9PSBPUF9CQUNLX1JFRiAmJiBkZmEtPnN1YmV4cF9tYXApCisgICAgeworICAgICAgaW50IGlkeCA9IG5vZGUtPnRva2VuLm9wci5pZHg7CisgICAgICBub2RlLT50b2tlbi5vcHIuaWR4ID0gZGZhLT5zdWJleHBfbWFwW2lkeF07CisgICAgICBkZmEtPnVzZWRfYmtyZWZfbWFwIHw9IDEgPDwgbm9kZS0+dG9rZW4ub3ByLmlkeDsKKyAgICB9CisKKyAgZWxzZSBpZiAobm9kZS0+dG9rZW4udHlwZSA9PSBTVUJFWFAKKwkgICAmJiBub2RlLT5sZWZ0ICYmIG5vZGUtPmxlZnQtPnRva2VuLnR5cGUgPT0gU1VCRVhQKQorICAgIHsKKyAgICAgIGludCBvdGhlcl9pZHggPSBub2RlLT5sZWZ0LT50b2tlbi5vcHIuaWR4OworCisgICAgICBub2RlLT5sZWZ0ID0gbm9kZS0+bGVmdC0+bGVmdDsKKyAgICAgIGlmIChub2RlLT5sZWZ0KQorCW5vZGUtPmxlZnQtPnBhcmVudCA9IG5vZGU7CisKKyAgICAgIGRmYS0+c3ViZXhwX21hcFtvdGhlcl9pZHhdID0gZGZhLT5zdWJleHBfbWFwW25vZGUtPnRva2VuLm9wci5pZHhdOworICAgICAgaWYgKG90aGVyX2lkeCA8IEJJVFNFVF9XT1JEX0JJVFMpCisJICBkZmEtPnVzZWRfYmtyZWZfbWFwICY9IH4oKGJpdHNldF93b3JkX3QpIDEgPDwgb3RoZXJfaWR4KTsKKyAgICB9CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBMb3dlcmluZyBwYXNzOiBUdXJuIGVhY2ggU1VCRVhQIG5vZGUgaW50byB0aGUgYXBwcm9wcmlhdGUgY29uY2F0ZW5hdGlvbgorICAgb2YgT1BfT1BFTl9TVUJFWFAsIHRoZSBib2R5IG9mIHRoZSBTVUJFWFAgKGlmIGFueSkgYW5kIE9QX0NMT1NFX1NVQkVYUC4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorbG93ZXJfc3ViZXhwcyAodm9pZCAqZXh0cmEsIGJpbl90cmVlX3QgKm5vZGUpCit7CisgIHJlZ2V4X3QgKnByZWcgPSAocmVnZXhfdCAqKSBleHRyYTsKKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKworICBpZiAobm9kZS0+bGVmdCAmJiBub2RlLT5sZWZ0LT50b2tlbi50eXBlID09IFNVQkVYUCkKKyAgICB7CisgICAgICBub2RlLT5sZWZ0ID0gbG93ZXJfc3ViZXhwICgmZXJyLCBwcmVnLCBub2RlLT5sZWZ0KTsKKyAgICAgIGlmIChub2RlLT5sZWZ0KQorCW5vZGUtPmxlZnQtPnBhcmVudCA9IG5vZGU7CisgICAgfQorICBpZiAobm9kZS0+cmlnaHQgJiYgbm9kZS0+cmlnaHQtPnRva2VuLnR5cGUgPT0gU1VCRVhQKQorICAgIHsKKyAgICAgIG5vZGUtPnJpZ2h0ID0gbG93ZXJfc3ViZXhwICgmZXJyLCBwcmVnLCBub2RlLT5yaWdodCk7CisgICAgICBpZiAobm9kZS0+cmlnaHQpCisJbm9kZS0+cmlnaHQtPnBhcmVudCA9IG5vZGU7CisgICAgfQorCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK2xvd2VyX3N1YmV4cCAocmVnX2VycmNvZGVfdCAqZXJyLCByZWdleF90ICpwcmVnLCBiaW5fdHJlZV90ICpub2RlKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgYmluX3RyZWVfdCAqYm9keSA9IG5vZGUtPmxlZnQ7CisgIGJpbl90cmVlX3QgKm9wLCAqY2xzLCAqdHJlZTEsICp0cmVlOworCisgIGlmIChwcmVnLT5ub19zdWIKKyAgICAgIC8qIFdlIGRvIG5vdCBvcHRpbWl6ZSBlbXB0eSBzdWJleHByZXNzaW9ucywgYmVjYXVzZSBvdGhlcndpc2Ugd2UgbWF5CisJIGhhdmUgYmFkIENPTkNBVCBub2RlcyB3aXRoIE5VTEwgY2hpbGRyZW4uICBUaGlzIGlzIG9idmlvdXNseSBub3QKKwkgdmVyeSBjb21tb24sIHNvIHdlIGRvIG5vdCBsb3NlIG11Y2guICBBbiBleGFtcGxlIHRoYXQgdHJpZ2dlcnMKKwkgdGhpcyBjYXNlIGlzIHRoZSBzZWQgInNjcmlwdCIgL1woXCkveC4gICovCisgICAgICAmJiBub2RlLT5sZWZ0ICE9IE5VTEwKKyAgICAgICYmIChub2RlLT50b2tlbi5vcHIuaWR4ID49IEJJVFNFVF9XT1JEX0JJVFMKKwkgIHx8ICEoZGZhLT51c2VkX2JrcmVmX21hcAorCSAgICAgICAmICgoYml0c2V0X3dvcmRfdCkgMSA8PCBub2RlLT50b2tlbi5vcHIuaWR4KSkpKQorICAgIHJldHVybiBub2RlLT5sZWZ0OworCisgIC8qIENvbnZlcnQgdGhlIFNVQkVYUCBub2RlIHRvIHRoZSBjb25jYXRlbmF0aW9uIG9mIGFuCisgICAgIE9QX09QRU5fU1VCRVhQLCB0aGUgY29udGVudHMsIGFuZCBhbiBPUF9DTE9TRV9TVUJFWFAuICAqLworICBvcCA9IGNyZWF0ZV90cmVlIChkZmEsIE5VTEwsIE5VTEwsIE9QX09QRU5fU1VCRVhQKTsKKyAgY2xzID0gY3JlYXRlX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgT1BfQ0xPU0VfU1VCRVhQKTsKKyAgdHJlZTEgPSBib2R5ID8gY3JlYXRlX3RyZWUgKGRmYSwgYm9keSwgY2xzLCBDT05DQVQpIDogY2xzOworICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgb3AsIHRyZWUxLCBDT05DQVQpOworICBpZiAoQkUgKHRyZWUgPT0gTlVMTCB8fCB0cmVlMSA9PSBOVUxMIHx8IG9wID09IE5VTEwgfHwgY2xzID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfRVNQQUNFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIG9wLT50b2tlbi5vcHIuaWR4ID0gY2xzLT50b2tlbi5vcHIuaWR4ID0gbm9kZS0+dG9rZW4ub3ByLmlkeDsKKyAgb3AtPnRva2VuLm9wdF9zdWJleHAgPSBjbHMtPnRva2VuLm9wdF9zdWJleHAgPSBub2RlLT50b2tlbi5vcHRfc3ViZXhwOworICByZXR1cm4gdHJlZTsKK30KKworLyogUGFzcyAxIGluIGJ1aWxkaW5nIHRoZSBORkE6IGNvbXB1dGUgRklSU1QgYW5kIGNyZWF0ZSB1bmxpbmtlZCBhdXRvbWF0b24KKyAgIG5vZGVzLiAgUmVxdWlyZXMgYSBwb3N0b3JkZXIgdmlzaXQuICAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NhbGNfZmlyc3QgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGV4dHJhOworICBpZiAobm9kZS0+dG9rZW4udHlwZSA9PSBDT05DQVQpCisgICAgeworICAgICAgbm9kZS0+Zmlyc3QgPSBub2RlLT5sZWZ0LT5maXJzdDsKKyAgICAgIG5vZGUtPm5vZGVfaWR4ID0gbm9kZS0+bGVmdC0+bm9kZV9pZHg7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbm9kZS0+Zmlyc3QgPSBub2RlOworICAgICAgbm9kZS0+bm9kZV9pZHggPSByZV9kZmFfYWRkX25vZGUgKGRmYSwgbm9kZS0+dG9rZW4pOworICAgICAgaWYgKEJFIChub2RlLT5ub2RlX2lkeCA9PSAtMSwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBpZiAobm9kZS0+dG9rZW4udHlwZSA9PSBBTkNIT1IpCisJZGZhLT5ub2Rlc1tub2RlLT5ub2RlX2lkeF0uY29uc3RyYWludCA9IG5vZGUtPnRva2VuLm9wci5jdHhfdHlwZTsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogUGFzcyAyOiBjb21wdXRlIE5FWFQgb24gdGhlIHRyZWUuICBQcmVvcmRlciB2aXNpdC4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY2FsY19uZXh0ICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgc3dpdGNoIChub2RlLT50b2tlbi50eXBlKQorICAgIHsKKyAgICBjYXNlIE9QX0RVUF9BU1RFUklTSzoKKyAgICAgIG5vZGUtPmxlZnQtPm5leHQgPSBub2RlOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDT05DQVQ6CisgICAgICBub2RlLT5sZWZ0LT5uZXh0ID0gbm9kZS0+cmlnaHQtPmZpcnN0OworICAgICAgbm9kZS0+cmlnaHQtPm5leHQgPSBub2RlLT5uZXh0OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChub2RlLT5sZWZ0KQorCW5vZGUtPmxlZnQtPm5leHQgPSBub2RlLT5uZXh0OworICAgICAgaWYgKG5vZGUtPnJpZ2h0KQorCW5vZGUtPnJpZ2h0LT5uZXh0ID0gbm9kZS0+bmV4dDsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBQYXNzIDM6IGxpbmsgYWxsIERGQSBub2RlcyB0byB0aGVpciBORVhUIG5vZGUgKGFueSBvcmRlciB3aWxsIGRvKS4gICovCitzdGF0aWMgcmVnX2VycmNvZGVfdAorbGlua19uZmFfbm9kZXMgKHZvaWQgKmV4dHJhLCBiaW5fdHJlZV90ICpub2RlKQoreworICByZV9kZmFfdCAqZGZhID0gKHJlX2RmYV90ICopIGV4dHJhOworICBpbnQgaWR4ID0gbm9kZS0+bm9kZV9pZHg7CisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisKKyAgc3dpdGNoIChub2RlLT50b2tlbi50eXBlKQorICAgIHsKKyAgICBjYXNlIENPTkNBVDoKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBFTkRfT0ZfUkU6CisgICAgICBhc3NlcnQgKG5vZGUtPm5leHQgPT0gTlVMTCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgT1BfRFVQX0FTVEVSSVNLOgorICAgIGNhc2UgT1BfQUxUOgorICAgICAgeworCWludCBsZWZ0LCByaWdodDsKKwlkZmEtPmhhc19wbHVyYWxfbWF0Y2ggPSAxOworCWlmIChub2RlLT5sZWZ0ICE9IE5VTEwpCisJICBsZWZ0ID0gbm9kZS0+bGVmdC0+Zmlyc3QtPm5vZGVfaWR4OworCWVsc2UKKwkgIGxlZnQgPSBub2RlLT5uZXh0LT5ub2RlX2lkeDsKKwlpZiAobm9kZS0+cmlnaHQgIT0gTlVMTCkKKwkgIHJpZ2h0ID0gbm9kZS0+cmlnaHQtPmZpcnN0LT5ub2RlX2lkeDsKKwllbHNlCisJICByaWdodCA9IG5vZGUtPm5leHQtPm5vZGVfaWR4OworCWFzc2VydCAobGVmdCA+IC0xKTsKKwlhc3NlcnQgKHJpZ2h0ID4gLTEpOworCWVyciA9IHJlX25vZGVfc2V0X2luaXRfMiAoZGZhLT5lZGVzdHMgKyBpZHgsIGxlZnQsIHJpZ2h0KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBBTkNIT1I6CisgICAgY2FzZSBPUF9PUEVOX1NVQkVYUDoKKyAgICBjYXNlIE9QX0NMT1NFX1NVQkVYUDoKKyAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoZGZhLT5lZGVzdHMgKyBpZHgsIG5vZGUtPm5leHQtPm5vZGVfaWR4KTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9CQUNLX1JFRjoKKyAgICAgIGRmYS0+bmV4dHNbaWR4XSA9IG5vZGUtPm5leHQtPm5vZGVfaWR4OworICAgICAgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gT1BfQkFDS19SRUYpCisJZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xIChkZmEtPmVkZXN0cyArIGlkeCwgZGZhLT5uZXh0c1tpZHhdKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGFzc2VydCAoIUlTX0VQU0lMT05fTk9ERSAobm9kZS0+dG9rZW4udHlwZSkpOworICAgICAgZGZhLT5uZXh0c1tpZHhdID0gbm9kZS0+bmV4dC0+bm9kZV9pZHg7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIGVycjsKK30KKworLyogRHVwbGljYXRlIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgdGhlIG5vZGUgUk9PVF9OT0RFLgorICAgTm90ZSB0aGF0IGR1cGxpY2F0ZWQgbm9kZXMgaGF2ZSBjb25zdHJhaW50IElOSVRfQ09OU1RSQUlOVCBpbiBhZGRpdGlvbgorICAgdG8gdGhlaXIgb3duIGNvbnN0cmFpbnQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2R1cGxpY2F0ZV9ub2RlX2Nsb3N1cmUgKHJlX2RmYV90ICpkZmEsIGludCB0b3Bfb3JnX25vZGUsIGludCB0b3BfY2xvbmVfbm9kZSwKKwkJCWludCByb290X25vZGUsIHVuc2lnbmVkIGludCBpbml0X2NvbnN0cmFpbnQpCit7CisgIGludCBvcmdfbm9kZSwgY2xvbmVfbm9kZSwgcmV0OworICB1bnNpZ25lZCBpbnQgY29uc3RyYWludCA9IGluaXRfY29uc3RyYWludDsKKyAgZm9yIChvcmdfbm9kZSA9IHRvcF9vcmdfbm9kZSwgY2xvbmVfbm9kZSA9IHRvcF9jbG9uZV9ub2RlOzspCisgICAgeworICAgICAgaW50IG9yZ19kZXN0LCBjbG9uZV9kZXN0OworICAgICAgaWYgKGRmYS0+bm9kZXNbb3JnX25vZGVdLnR5cGUgPT0gT1BfQkFDS19SRUYpCisJeworCSAgLyogSWYgdGhlIGJhY2sgcmVmZXJlbmNlIGVwc2lsb24tdHJhbnNpdCwgaXRzIGRlc3RpbmF0aW9uIG11c3QKKwkgICAgIGFsc28gaGF2ZSB0aGUgY29uc3RyYWludC4gIFRoZW4gZHVwbGljYXRlIHRoZSBlcHNpbG9uIGNsb3N1cmUKKwkgICAgIG9mIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYmFjayByZWZlcmVuY2UsIGFuZCBzdG9yZSBpdCBpbgorCSAgICAgZWRlc3RzIG9mIHRoZSBiYWNrIHJlZmVyZW5jZS4gICovCisJICBvcmdfZGVzdCA9IGRmYS0+bmV4dHNbb3JnX25vZGVdOworCSAgcmVfbm9kZV9zZXRfZW1wdHkgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSk7CisJICBjbG9uZV9kZXN0ID0gZHVwbGljYXRlX25vZGUgKGRmYSwgb3JnX2Rlc3QsIGNvbnN0cmFpbnQpOworCSAgaWYgKEJFIChjbG9uZV9kZXN0ID09IC0xLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICBkZmEtPm5leHRzW2Nsb25lX25vZGVdID0gZGZhLT5uZXh0c1tvcmdfbm9kZV07CisJICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSwgY2xvbmVfZGVzdCk7CisJICBpZiAoQkUgKHJldCA8IDAsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgICBlbHNlIGlmIChkZmEtPmVkZXN0c1tvcmdfbm9kZV0ubmVsZW0gPT0gMCkKKwl7CisJICAvKiBJbiBjYXNlIG9mIHRoZSBub2RlIGNhbid0IGVwc2lsb24tdHJhbnNpdCwgZG9uJ3QgZHVwbGljYXRlIHRoZQorCSAgICAgZGVzdGluYXRpb24gYW5kIHN0b3JlIHRoZSBvcmlnaW5hbCBkZXN0aW5hdGlvbiBhcyB0aGUKKwkgICAgIGRlc3RpbmF0aW9uIG9mIHRoZSBub2RlLiAgKi8KKwkgIGRmYS0+bmV4dHNbY2xvbmVfbm9kZV0gPSBkZmEtPm5leHRzW29yZ19ub2RlXTsKKwkgIGJyZWFrOworCX0KKyAgICAgIGVsc2UgaWYgKGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5uZWxlbSA9PSAxKQorCXsKKwkgIC8qIEluIGNhc2Ugb2YgdGhlIG5vZGUgY2FuIGVwc2lsb24tdHJhbnNpdCwgYW5kIGl0IGhhcyBvbmx5IG9uZQorCSAgICAgZGVzdGluYXRpb24uICAqLworCSAgb3JnX2Rlc3QgPSBkZmEtPmVkZXN0c1tvcmdfbm9kZV0uZWxlbXNbMF07CisJICByZV9ub2RlX3NldF9lbXB0eSAoZGZhLT5lZGVzdHMgKyBjbG9uZV9ub2RlKTsKKwkgIC8qIElmIHRoZSBub2RlIGlzIHJvb3Rfbm9kZSBpdHNlbGYsIGl0IG1lYW5zIHRoZSBlcHNpbG9uIGNsc291cmUKKwkgICAgIGhhcyBhIGxvb3AuICAgVGhlbiB0aWUgaXQgdG8gdGhlIGRlc3RpbmF0aW9uIG9mIHRoZSByb290X25vZGUuICAqLworCSAgaWYgKG9yZ19ub2RlID09IHJvb3Rfbm9kZSAmJiBjbG9uZV9ub2RlICE9IG9yZ19ub2RlKQorCSAgICB7CisJICAgICAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIG9yZ19kZXN0KTsKKwkgICAgICBpZiAoQkUgKHJldCA8IDAsIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgLyogSW4gY2FzZSBvZiB0aGUgbm9kZSBoYXMgYW5vdGhlciBjb25zdHJhaW50LCBhZGQgaXQuICAqLworCSAgY29uc3RyYWludCB8PSBkZmEtPm5vZGVzW29yZ19ub2RlXS5jb25zdHJhaW50OworCSAgY2xvbmVfZGVzdCA9IGR1cGxpY2F0ZV9ub2RlIChkZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgIGlmIChCRSAoY2xvbmVfZGVzdCA9PSAtMSwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3QpOworCSAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgZWxzZSAvKiBkZmEtPmVkZXN0c1tvcmdfbm9kZV0ubmVsZW0gPT0gMiAqLworCXsKKwkgIC8qIEluIGNhc2Ugb2YgdGhlIG5vZGUgY2FuIGVwc2lsb24tdHJhbnNpdCwgYW5kIGl0IGhhcyB0d28KKwkgICAgIGRlc3RpbmF0aW9ucy4gSW4gdGhlIGJpbl90cmVlX3QgYW5kIERGQSwgdGhhdCdzICd8JyBhbmQgJyonLiAgICovCisJICBvcmdfZGVzdCA9IGRmYS0+ZWRlc3RzW29yZ19ub2RlXS5lbGVtc1swXTsKKwkgIHJlX25vZGVfc2V0X2VtcHR5IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUpOworCSAgLyogU2VhcmNoIGZvciBhIGR1cGxpY2F0ZWQgbm9kZSB3aGljaCBzYXRpc2ZpZXMgdGhlIGNvbnN0cmFpbnQuICAqLworCSAgY2xvbmVfZGVzdCA9IHNlYXJjaF9kdXBsaWNhdGVkX25vZGUgKGRmYSwgb3JnX2Rlc3QsIGNvbnN0cmFpbnQpOworCSAgaWYgKGNsb25lX2Rlc3QgPT0gLTEpCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBpcyBubyBzdWNoIGR1cGxpY2F0ZWQgbm9kZSwgY3JlYXRlIGEgbmV3IG9uZS4gICovCisJICAgICAgcmVnX2VycmNvZGVfdCBlcnI7CisJICAgICAgY2xvbmVfZGVzdCA9IGR1cGxpY2F0ZV9ub2RlIChkZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgICAgICBpZiAoQkUgKGNsb25lX2Rlc3QgPT0gLTEsIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRmYS0+ZWRlc3RzICsgY2xvbmVfbm9kZSwgY2xvbmVfZGVzdCk7CisJICAgICAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgICAgZXJyID0gZHVwbGljYXRlX25vZGVfY2xvc3VyZSAoZGZhLCBvcmdfZGVzdCwgY2xvbmVfZGVzdCwKKwkJCQkJICAgIHJvb3Rfbm9kZSwgY29uc3RyYWludCk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlyZXR1cm4gZXJyOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBpcyBhIGR1cGxpY2F0ZWQgbm9kZSB3aGljaCBzYXRpc2ZpZXMgdGhlIGNvbnN0cmFpbnQsCisJCSB1c2UgaXQgdG8gYXZvaWQgaW5maW5pdGUgbG9vcC4gICovCisJICAgICAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3QpOworCSAgICAgIGlmIChCRSAocmV0IDwgMCwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCSAgICB9CisKKwkgIG9yZ19kZXN0ID0gZGZhLT5lZGVzdHNbb3JnX25vZGVdLmVsZW1zWzFdOworCSAgY2xvbmVfZGVzdCA9IGR1cGxpY2F0ZV9ub2RlIChkZmEsIG9yZ19kZXN0LCBjb25zdHJhaW50KTsKKwkgIGlmIChCRSAoY2xvbmVfZGVzdCA9PSAtMSwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkZmEtPmVkZXN0cyArIGNsb25lX25vZGUsIGNsb25lX2Rlc3QpOworCSAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgb3JnX25vZGUgPSBvcmdfZGVzdDsKKyAgICAgIGNsb25lX25vZGUgPSBjbG9uZV9kZXN0OworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBTZWFyY2ggZm9yIGEgbm9kZSB3aGljaCBpcyBkdXBsaWNhdGVkIGZyb20gdGhlIG5vZGUgT1JHX05PREUsIGFuZAorICAgc2F0aXNmaWVzIHRoZSBjb25zdHJhaW50IENPTlNUUkFJTlQuICAqLworCitzdGF0aWMgaW50CitzZWFyY2hfZHVwbGljYXRlZF9ub2RlIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgb3JnX25vZGUsCisJCQl1bnNpZ25lZCBpbnQgY29uc3RyYWludCkKK3sKKyAgaW50IGlkeDsKKyAgZm9yIChpZHggPSBkZmEtPm5vZGVzX2xlbiAtIDE7IGRmYS0+bm9kZXNbaWR4XS5kdXBsaWNhdGVkICYmIGlkeCA+IDA7IC0taWR4KQorICAgIHsKKyAgICAgIGlmIChvcmdfbm9kZSA9PSBkZmEtPm9yZ19pbmRpY2VzW2lkeF0KKwkgICYmIGNvbnN0cmFpbnQgPT0gZGZhLT5ub2Rlc1tpZHhdLmNvbnN0cmFpbnQpCisJcmV0dXJuIGlkeDsgLyogRm91bmQuICAqLworICAgIH0KKyAgcmV0dXJuIC0xOyAvKiBOb3QgZm91bmQuICAqLworfQorCisvKiBEdXBsaWNhdGUgdGhlIG5vZGUgd2hvc2UgaW5kZXggaXMgT1JHX0lEWCBhbmQgc2V0IHRoZSBjb25zdHJhaW50IENPTlNUUkFJTlQuCisgICBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBuZXcgbm9kZSwgb3IgLTEgaWYgaW5zdWZmaWNpZW50IHN0b3JhZ2UgaXMKKyAgIGF2YWlsYWJsZS4gICovCisKK3N0YXRpYyBpbnQKK2R1cGxpY2F0ZV9ub2RlIChyZV9kZmFfdCAqZGZhLCBpbnQgb3JnX2lkeCwgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQpCit7CisgIGludCBkdXBfaWR4ID0gcmVfZGZhX2FkZF9ub2RlIChkZmEsIGRmYS0+bm9kZXNbb3JnX2lkeF0pOworICBpZiAoQkUgKGR1cF9pZHggIT0gLTEsIDEpKQorICAgIHsKKyAgICAgIGRmYS0+bm9kZXNbZHVwX2lkeF0uY29uc3RyYWludCA9IGNvbnN0cmFpbnQ7CisgICAgICBkZmEtPm5vZGVzW2R1cF9pZHhdLmNvbnN0cmFpbnQgfD0gZGZhLT5ub2Rlc1tvcmdfaWR4XS5jb25zdHJhaW50OworICAgICAgZGZhLT5ub2Rlc1tkdXBfaWR4XS5kdXBsaWNhdGVkID0gMTsKKworICAgICAgLyogU3RvcmUgdGhlIGluZGV4IG9mIHRoZSBvcmlnaW5hbCBub2RlLiAgKi8KKyAgICAgIGRmYS0+b3JnX2luZGljZXNbZHVwX2lkeF0gPSBvcmdfaWR4OworICAgIH0KKyAgcmV0dXJuIGR1cF9pZHg7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitjYWxjX2ludmVjbG9zdXJlIChyZV9kZmFfdCAqZGZhKQoreworICBpbnQgc3JjLCBpZHgsIHJldDsKKyAgZm9yIChpZHggPSAwOyBpZHggPCBkZmEtPm5vZGVzX2xlbjsgKytpZHgpCisgICAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGZhLT5pbnZlY2xvc3VyZXMgKyBpZHgpOworCisgIGZvciAoc3JjID0gMDsgc3JjIDwgZGZhLT5ub2Rlc19sZW47ICsrc3JjKQorICAgIHsKKyAgICAgIGludCAqZWxlbXMgPSBkZmEtPmVjbG9zdXJlc1tzcmNdLmVsZW1zOworICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBkZmEtPmVjbG9zdXJlc1tzcmNdLm5lbGVtOyArK2lkeCkKKwl7CisJICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnRfbGFzdCAoZGZhLT5pbnZlY2xvc3VyZXMgKyBlbGVtc1tpZHhdLCBzcmMpOworCSAgaWYgKEJFIChyZXQgPT0gLTEsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwl9CisgICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlICJlY2xvc3VyZSIgZm9yIGFsbCB0aGUgbm9kZSBpbiBERkEuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorY2FsY19lY2xvc3VyZSAocmVfZGZhX3QgKmRmYSkKK3sKKyAgaW50IG5vZGVfaWR4LCBpbmNvbXBsZXRlOworI2lmZGVmIERFQlVHCisgIGFzc2VydCAoZGZhLT5ub2Rlc19sZW4gPiAwKTsKKyNlbmRpZgorICBpbmNvbXBsZXRlID0gMDsKKyAgLyogRm9yIGVhY2ggbm9kZXMsIGNhbGN1bGF0ZSBlcHNpbG9uIGNsb3N1cmUuICAqLworICBmb3IgKG5vZGVfaWR4ID0gMDsgOyArK25vZGVfaWR4KQorICAgIHsKKyAgICAgIHJlZ19lcnJjb2RlX3QgZXJyOworICAgICAgcmVfbm9kZV9zZXQgZWNsb3N1cmVfZWxlbTsKKyAgICAgIGlmIChub2RlX2lkeCA9PSBkZmEtPm5vZGVzX2xlbikKKwl7CisJICBpZiAoIWluY29tcGxldGUpCisJICAgIGJyZWFrOworCSAgaW5jb21wbGV0ZSA9IDA7CisJICBub2RlX2lkeCA9IDA7CisJfQorCisjaWZkZWYgREVCVUcKKyAgICAgIGFzc2VydCAoZGZhLT5lY2xvc3VyZXNbbm9kZV9pZHhdLm5lbGVtICE9IC0xKTsKKyNlbmRpZgorCisgICAgICAvKiBJZiB3ZSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCwgc2tpcCBpdC4gICovCisgICAgICBpZiAoZGZhLT5lY2xvc3VyZXNbbm9kZV9pZHhdLm5lbGVtICE9IDApCisJY29udGludWU7CisgICAgICAvKiBDYWxjdWxhdGUgZXBzaWxvbiBjbG9zdXJlIG9mIGBub2RlX2lkeCcuICAqLworICAgICAgZXJyID0gY2FsY19lY2xvc3VyZV9pdGVyICgmZWNsb3N1cmVfZWxlbSwgZGZhLCBub2RlX2lkeCwgMSk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKworICAgICAgaWYgKGRmYS0+ZWNsb3N1cmVzW25vZGVfaWR4XS5uZWxlbSA9PSAwKQorCXsKKwkgIGluY29tcGxldGUgPSAxOworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmVjbG9zdXJlX2VsZW0pOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIGVwc2lsb24gY2xvc3VyZSBvZiBOT0RFLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2NhbGNfZWNsb3N1cmVfaXRlciAocmVfbm9kZV9zZXQgKm5ld19zZXQsIHJlX2RmYV90ICpkZmEsIGludCBub2RlLCBpbnQgcm9vdCkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBpOworICByZV9ub2RlX3NldCBlY2xvc3VyZTsKKyAgaW50IHJldDsKKyAgaW50IGluY29tcGxldGUgPSAwOworICBlcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJmVjbG9zdXJlLCBkZmEtPmVkZXN0c1tub2RlXS5uZWxlbSArIDEpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKworICAvKiBUaGlzIGluZGljYXRlcyB0aGF0IHdlIGFyZSBjYWxjdWxhdGluZyB0aGlzIG5vZGUgbm93LgorICAgICBXZSByZWZlcmVuY2UgdGhpcyB2YWx1ZSB0byBhdm9pZCBpbmZpbml0ZSBsb29wLiAgKi8KKyAgZGZhLT5lY2xvc3VyZXNbbm9kZV0ubmVsZW0gPSAtMTsKKworICAvKiBJZiB0aGUgY3VycmVudCBub2RlIGhhcyBjb25zdHJhaW50cywgZHVwbGljYXRlIGFsbCBub2RlcworICAgICBzaW5jZSB0aGV5IG11c3QgaW5oZXJpdCB0aGUgY29uc3RyYWludHMuICAqLworICBpZiAoZGZhLT5ub2Rlc1tub2RlXS5jb25zdHJhaW50CisgICAgICAmJiBkZmEtPmVkZXN0c1tub2RlXS5uZWxlbQorICAgICAgJiYgIWRmYS0+bm9kZXNbZGZhLT5lZGVzdHNbbm9kZV0uZWxlbXNbMF1dLmR1cGxpY2F0ZWQpCisgICAgeworICAgICAgZXJyID0gZHVwbGljYXRlX25vZGVfY2xvc3VyZSAoZGZhLCBub2RlLCBub2RlLCBub2RlLAorCQkJCSAgICBkZmEtPm5vZGVzW25vZGVdLmNvbnN0cmFpbnQpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgfQorCisgIC8qIEV4cGFuZCBlYWNoIGVwc2lsb24gZGVzdGluYXRpb24gbm9kZXMuICAqLworICBpZiAoSVNfRVBTSUxPTl9OT0RFKGRmYS0+bm9kZXNbbm9kZV0udHlwZSkpCisgICAgZm9yIChpID0gMDsgaSA8IGRmYS0+ZWRlc3RzW25vZGVdLm5lbGVtOyArK2kpCisgICAgICB7CisJcmVfbm9kZV9zZXQgZWNsb3N1cmVfZWxlbTsKKwlpbnQgZWRlc3QgPSBkZmEtPmVkZXN0c1tub2RlXS5lbGVtc1tpXTsKKwkvKiBJZiBjYWxjdWxhdGluZyB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIGBlZGVzdCcgaXMgaW4gcHJvZ3Jlc3MsCisJICAgcmV0dXJuIGludGVybWVkaWF0ZSByZXN1bHQuICAqLworCWlmIChkZmEtPmVjbG9zdXJlc1tlZGVzdF0ubmVsZW0gPT0gLTEpCisJICB7CisJICAgIGluY29tcGxldGUgPSAxOworCSAgICBjb250aW51ZTsKKwkgIH0KKwkvKiBJZiB3ZSBoYXZlbid0IGNhbGN1bGF0ZWQgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiBgZWRlc3QnIHlldCwKKwkgICBjYWxjdWxhdGUgbm93LiBPdGhlcndpc2UgdXNlIGNhbGN1bGF0ZWQgZXBzaWxvbiBjbG9zdXJlLiAgKi8KKwlpZiAoZGZhLT5lY2xvc3VyZXNbZWRlc3RdLm5lbGVtID09IDApCisJICB7CisJICAgIGVyciA9IGNhbGNfZWNsb3N1cmVfaXRlciAoJmVjbG9zdXJlX2VsZW0sIGRmYSwgZWRlc3QsIDApOworCSAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgICAgcmV0dXJuIGVycjsKKwkgIH0KKwllbHNlCisJICBlY2xvc3VyZV9lbGVtID0gZGZhLT5lY2xvc3VyZXNbZWRlc3RdOworCS8qIE1lcmdlIHRoZSBlcHNpbG9uIGNsb3N1cmUgb2YgYGVkZXN0Jy4gICovCisJZXJyID0gcmVfbm9kZV9zZXRfbWVyZ2UgKCZlY2xvc3VyZSwgJmVjbG9zdXJlX2VsZW0pOworCWlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgIHJldHVybiBlcnI7CisJLyogSWYgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiBgZWRlc3QnIGlzIGluY29tcGxldGUsCisJICAgdGhlIGVwc2lsb24gY2xvc3VyZSBvZiB0aGlzIG5vZGUgaXMgYWxzbyBpbmNvbXBsZXRlLiAgKi8KKwlpZiAoZGZhLT5lY2xvc3VyZXNbZWRlc3RdLm5lbGVtID09IDApCisJICB7CisJICAgIGluY29tcGxldGUgPSAxOworCSAgICByZV9ub2RlX3NldF9mcmVlICgmZWNsb3N1cmVfZWxlbSk7CisJICB9CisgICAgICB9CisKKyAgLyogQW4gZXBzaWxvbiBjbG9zdXJlIGluY2x1ZGVzIGl0c2VsZi4gICovCisgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydCAoJmVjbG9zdXJlLCBub2RlKTsKKyAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKyAgICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgaWYgKGluY29tcGxldGUgJiYgIXJvb3QpCisgICAgZGZhLT5lY2xvc3VyZXNbbm9kZV0ubmVsZW0gPSAwOworICBlbHNlCisgICAgZGZhLT5lY2xvc3VyZXNbbm9kZV0gPSBlY2xvc3VyZTsKKyAgKm5ld19zZXQgPSBlY2xvc3VyZTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorDAorLyogRnVuY3Rpb25zIGZvciB0b2tlbiB3aGljaCBhcmUgdXNlZCBpbiB0aGUgcGFyc2VyLiAgKi8KKworLyogRmV0Y2ggYSB0b2tlbiBmcm9tIElOUFVULgorICAgV2UgbXVzdCBub3QgdXNlIHRoaXMgZnVuY3Rpb24gaW5zaWRlIGJyYWNrZXQgZXhwcmVzc2lvbnMuICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK2ZldGNoX3Rva2VuIChyZV90b2tlbl90ICpyZXN1bHQsIHJlX3N0cmluZ190ICppbnB1dCwgcmVnX3N5bnRheF90IHN5bnRheCkKK3sKKyAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKGlucHV0LCBwZWVrX3Rva2VuIChyZXN1bHQsIGlucHV0LCBzeW50YXgpKTsKK30KKworLyogUGVlayBhIHRva2VuIGZyb20gSU5QVVQsIGFuZCByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdG9rZW4uCisgICBXZSBtdXN0IG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBpbnNpZGUgYnJhY2tldCBleHByZXNzaW9ucy4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitwZWVrX3Rva2VuIChyZV90b2tlbl90ICp0b2tlbiwgcmVfc3RyaW5nX3QgKmlucHV0LCByZWdfc3ludGF4X3Qgc3ludGF4KQoreworICB1bnNpZ25lZCBjaGFyIGM7CisKKyAgaWYgKHJlX3N0cmluZ19lb2kgKGlucHV0KSkKKyAgICB7CisgICAgICB0b2tlbi0+dHlwZSA9IEVORF9PRl9SRTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBjID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAoaW5wdXQsIDApOworICB0b2tlbi0+b3ByLmMgPSBjOworCisgIHRva2VuLT53b3JkX2NoYXIgPSAwOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHRva2VuLT5tYl9wYXJ0aWFsID0gMDsKKyAgaWYgKGlucHV0LT5tYl9jdXJfbWF4ID4gMSAmJgorICAgICAgIXJlX3N0cmluZ19maXJzdF9ieXRlIChpbnB1dCwgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSkpCisgICAgeworICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgICB0b2tlbi0+bWJfcGFydGlhbCA9IDE7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisjZW5kaWYKKyAgaWYgKGMgPT0gJ1xcJykKKyAgICB7CisgICAgICB1bnNpZ25lZCBjaGFyIGMyOworICAgICAgaWYgKHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxID49IHJlX3N0cmluZ19sZW5ndGggKGlucHV0KSkKKwl7CisJICB0b2tlbi0+dHlwZSA9IEJBQ0tfU0xBU0g7CisJICByZXR1cm4gMTsKKwl9CisKKyAgICAgIGMyID0gcmVfc3RyaW5nX3BlZWtfYnl0ZV9jYXNlIChpbnB1dCwgMSk7CisgICAgICB0b2tlbi0+b3ByLmMgPSBjMjsKKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorCXsKKwkgIHdpbnRfdCB3YyA9IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsCisJCQkJCSAgcmVfc3RyaW5nX2N1cl9pZHggKGlucHV0KSArIDEpOworCSAgdG9rZW4tPndvcmRfY2hhciA9IElTX1dJREVfV09SRF9DSEFSICh3YykgIT0gMDsKKwl9CisgICAgICBlbHNlCisjZW5kaWYKKwl0b2tlbi0+d29yZF9jaGFyID0gSVNfV09SRF9DSEFSIChjMikgIT0gMDsKKworICAgICAgc3dpdGNoIChjMikKKwl7CisJY2FzZSAnfCc6CisJICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVEX09QUykgJiYgIShzeW50YXggJiBSRV9OT19CS19WQkFSKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9BTFQ7CisJICBicmVhazsKKwljYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6CisJY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19CS19SRUZTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gT1BfQkFDS19SRUY7CisJICAgICAgdG9rZW4tPm9wci5pZHggPSBjMiAtICcxJzsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnPCc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBXT1JEX0ZJUlNUOworCSAgICB9CisJICBicmVhazsKKwljYXNlICc+JzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IFdPUkRfTEFTVDsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnYic6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBXT1JEX0RFTElNOworCSAgICB9CisJICBicmVhazsKKwljYXNlICdCJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBBTkNIT1I7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IE5PVF9XT1JEX0RFTElNOworCSAgICB9CisJICBicmVhazsKKwljYXNlICd3JzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX1dPUkQ7CisJICBicmVhazsKKwljYXNlICdXJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX05PVFdPUkQ7CisJICBicmVhazsKKwljYXNlICdzJzoKKwkgIGlmICghKHN5bnRheCAmIFJFX05PX0dOVV9PUFMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX1NQQUNFOworCSAgYnJlYWs7CisJY2FzZSAnUyc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9OT1RTUEFDRTsKKwkgIGJyZWFrOworCWNhc2UgJ2AnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTk9fR05VX09QUykpCisJICAgIHsKKwkgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gQlVGX0ZJUlNUOworCSAgICB9CisJICBicmVhazsKKwljYXNlICdcJyc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19HTlVfT1BTKSkKKwkgICAgeworCSAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworCSAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBCVUZfTEFTVDsKKwkgICAgfQorCSAgYnJlYWs7CisJY2FzZSAnKCc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19CS19QQVJFTlMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX09QRU5fU1VCRVhQOworCSAgYnJlYWs7CisJY2FzZSAnKSc6CisJICBpZiAoIShzeW50YXggJiBSRV9OT19CS19QQVJFTlMpKQorCSAgICB0b2tlbi0+dHlwZSA9IE9QX0NMT1NFX1NVQkVYUDsKKwkgIGJyZWFrOworCWNhc2UgJysnOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmIChzeW50YXggJiBSRV9CS19QTFVTX1FNKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9EVVBfUExVUzsKKwkgIGJyZWFrOworCWNhc2UgJz8nOgorCSAgaWYgKCEoc3ludGF4ICYgUkVfTElNSVRFRF9PUFMpICYmIChzeW50YXggJiBSRV9CS19QTFVTX1FNKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9EVVBfUVVFU1RJT047CisJICBicmVhazsKKwljYXNlICd7JzoKKwkgIGlmICgoc3ludGF4ICYgUkVfSU5URVJWQUxTKSAmJiAoIShzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX0RVUF9OVU07CisJICBicmVhazsKKwljYXNlICd9JzoKKwkgIGlmICgoc3ludGF4ICYgUkVfSU5URVJWQUxTKSAmJiAoIShzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKSkKKwkgICAgdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9EVVBfTlVNOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGJyZWFrOworCX0KKyAgICAgIHJldHVybiAyOworICAgIH0KKworICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoaW5wdXQtPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIHdpbnRfdCB3YyA9IHJlX3N0cmluZ193Y2hhcl9hdCAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpOworICAgICAgdG9rZW4tPndvcmRfY2hhciA9IElTX1dJREVfV09SRF9DSEFSICh3YykgIT0gMDsKKyAgICB9CisgIGVsc2UKKyNlbmRpZgorICAgIHRva2VuLT53b3JkX2NoYXIgPSBJU19XT1JEX0NIQVIgKHRva2VuLT5vcHIuYyk7CisKKyAgc3dpdGNoIChjKQorICAgIHsKKyAgICBjYXNlICdcbic6CisgICAgICBpZiAoc3ludGF4ICYgUkVfTkVXTElORV9BTFQpCisJdG9rZW4tPnR5cGUgPSBPUF9BTFQ7CisgICAgICBicmVhazsKKyAgICBjYXNlICd8JzoKKyAgICAgIGlmICghKHN5bnRheCAmIFJFX0xJTUlURURfT1BTKSAmJiAoc3ludGF4ICYgUkVfTk9fQktfVkJBUikpCisJdG9rZW4tPnR5cGUgPSBPUF9BTFQ7CisgICAgICBicmVhazsKKyAgICBjYXNlICcqJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfRFVQX0FTVEVSSVNLOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnKyc6CisgICAgICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVEX09QUykgJiYgIShzeW50YXggJiBSRV9CS19QTFVTX1FNKSkKKwl0b2tlbi0+dHlwZSA9IE9QX0RVUF9QTFVTOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnPyc6CisgICAgICBpZiAoIShzeW50YXggJiBSRV9MSU1JVEVEX09QUykgJiYgIShzeW50YXggJiBSRV9CS19QTFVTX1FNKSkKKwl0b2tlbi0+dHlwZSA9IE9QX0RVUF9RVUVTVElPTjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ3snOgorICAgICAgaWYgKChzeW50YXggJiBSRV9JTlRFUlZBTFMpICYmIChzeW50YXggJiBSRV9OT19CS19CUkFDRVMpKQorCXRva2VuLT50eXBlID0gT1BfT1BFTl9EVVBfTlVNOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnfSc6CisgICAgICBpZiAoKHN5bnRheCAmIFJFX0lOVEVSVkFMUykgJiYgKHN5bnRheCAmIFJFX05PX0JLX0JSQUNFUykpCisJdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9EVVBfTlVNOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnKCc6CisgICAgICBpZiAoc3ludGF4ICYgUkVfTk9fQktfUEFSRU5TKQorCXRva2VuLT50eXBlID0gT1BfT1BFTl9TVUJFWFA7CisgICAgICBicmVhazsKKyAgICBjYXNlICcpJzoKKyAgICAgIGlmIChzeW50YXggJiBSRV9OT19CS19QQVJFTlMpCisJdG9rZW4tPnR5cGUgPSBPUF9DTE9TRV9TVUJFWFA7CisgICAgICBicmVhazsKKyAgICBjYXNlICdbJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfT1BFTl9CUkFDS0VUOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnLic6CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX1BFUklPRDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgJ14nOgorICAgICAgaWYgKCEoc3ludGF4ICYgKFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyB8IFJFX0NBUkVUX0FOQ0hPUlNfSEVSRSkpICYmCisJICByZV9zdHJpbmdfY3VyX2lkeCAoaW5wdXQpICE9IDApCisJeworCSAgY2hhciBwcmV2ID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAoaW5wdXQsIC0xKTsKKwkgIGlmICghKHN5bnRheCAmIFJFX05FV0xJTkVfQUxUKSB8fCBwcmV2ICE9ICdcbicpCisJICAgIGJyZWFrOworCX0KKyAgICAgIHRva2VuLT50eXBlID0gQU5DSE9SOworICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IExJTkVfRklSU1Q7CisgICAgICBicmVhazsKKyAgICBjYXNlICckJzoKKyAgICAgIGlmICghKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUykgJiYKKwkgIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxICE9IHJlX3N0cmluZ19sZW5ndGggKGlucHV0KSkKKwl7CisJICByZV90b2tlbl90IG5leHQ7CisJICByZV9zdHJpbmdfc2tpcF9ieXRlcyAoaW5wdXQsIDEpOworCSAgcGVla190b2tlbiAoJm5leHQsIGlucHV0LCBzeW50YXgpOworCSAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKGlucHV0LCAtMSk7CisJICBpZiAobmV4dC50eXBlICE9IE9QX0FMVCAmJiBuZXh0LnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKQorCSAgICBicmVhazsKKwl9CisgICAgICB0b2tlbi0+dHlwZSA9IEFOQ0hPUjsKKyAgICAgIHRva2VuLT5vcHIuY3R4X3R5cGUgPSBMSU5FX0xBU1Q7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgfQorICByZXR1cm4gMTsKK30KKworLyogUGVlayBhIHRva2VuIGZyb20gSU5QVVQsIGFuZCByZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgdG9rZW4uCisgICBXZSBtdXN0IG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBvdXQgb2YgYnJhY2tldCBleHByZXNzaW9ucy4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitwZWVrX3Rva2VuX2JyYWNrZXQgKHJlX3Rva2VuX3QgKnRva2VuLCByZV9zdHJpbmdfdCAqaW5wdXQsIHJlZ19zeW50YXhfdCBzeW50YXgpCit7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgaWYgKHJlX3N0cmluZ19lb2kgKGlucHV0KSkKKyAgICB7CisgICAgICB0b2tlbi0+dHlwZSA9IEVORF9PRl9SRTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgYyA9IHJlX3N0cmluZ19wZWVrX2J5dGUgKGlucHV0LCAwKTsKKyAgdG9rZW4tPm9wci5jID0gYzsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEgJiYKKyAgICAgICFyZV9zdHJpbmdfZmlyc3RfYnl0ZSAoaW5wdXQsIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkpKQorICAgIHsKKyAgICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworICAgICAgcmV0dXJuIDE7CisgICAgfQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyAgaWYgKGMgPT0gJ1xcJyAmJiAoc3ludGF4ICYgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUykKKyAgICAgICYmIHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxIDwgcmVfc3RyaW5nX2xlbmd0aCAoaW5wdXQpKQorICAgIHsKKyAgICAgIC8qIEluIHRoaXMgY2FzZSwgJ1wnIGVzY2FwZSBhIGNoYXJhY3Rlci4gICovCisgICAgICB1bnNpZ25lZCBjaGFyIGMyOworICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKGlucHV0LCAxKTsKKyAgICAgIGMyID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAoaW5wdXQsIDApOworICAgICAgdG9rZW4tPm9wci5jID0gYzI7CisgICAgICB0b2tlbi0+dHlwZSA9IENIQVJBQ1RFUjsKKyAgICAgIHJldHVybiAxOworICAgIH0KKyAgaWYgKGMgPT0gJ1snKSAvKiAnWycgaXMgYSBzcGVjaWFsIGNoYXIgaW4gYSBicmFja2V0IGV4cHMuICAqLworICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CisgICAgICBpbnQgdG9rZW5fbGVuOworICAgICAgaWYgKHJlX3N0cmluZ19jdXJfaWR4IChpbnB1dCkgKyAxIDwgcmVfc3RyaW5nX2xlbmd0aCAoaW5wdXQpKQorCWMyID0gcmVfc3RyaW5nX3BlZWtfYnl0ZSAoaW5wdXQsIDEpOworICAgICAgZWxzZQorCWMyID0gMDsKKyAgICAgIHRva2VuLT5vcHIuYyA9IGMyOworICAgICAgdG9rZW5fbGVuID0gMjsKKyAgICAgIHN3aXRjaCAoYzIpCisJeworCWNhc2UgJy4nOgorCSAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX0NPTExfRUxFTTsKKwkgIGJyZWFrOworCWNhc2UgJz0nOgorCSAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX0VRVUlWX0NMQVNTOworCSAgYnJlYWs7CisJY2FzZSAnOic6CisJICBpZiAoc3ludGF4ICYgUkVfQ0hBUl9DTEFTU0VTKQorCSAgICB7CisJICAgICAgdG9rZW4tPnR5cGUgPSBPUF9PUEVOX0NIQVJfQ0xBU1M7CisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgIC8qIGVsc2UgZmFsbCB0aHJvdWdoLiAgKi8KKwlkZWZhdWx0OgorCSAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisJICB0b2tlbi0+b3ByLmMgPSBjOworCSAgdG9rZW5fbGVuID0gMTsKKwkgIGJyZWFrOworCX0KKyAgICAgIHJldHVybiB0b2tlbl9sZW47CisgICAgfQorICBzd2l0Y2ggKGMpCisgICAgeworICAgIGNhc2UgJy0nOgorICAgICAgdG9rZW4tPnR5cGUgPSBPUF9DSEFSU0VUX1JBTkdFOworICAgICAgYnJlYWs7CisgICAgY2FzZSAnXSc6CisgICAgICB0b2tlbi0+dHlwZSA9IE9QX0NMT1NFX0JSQUNLRVQ7CisgICAgICBicmVhazsKKyAgICBjYXNlICdeJzoKKyAgICAgIHRva2VuLT50eXBlID0gT1BfTk9OX01BVENIX0xJU1Q7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgfQorICByZXR1cm4gMTsKK30KKwwKKy8qIEZ1bmN0aW9ucyBmb3IgcGFyc2VyLiAgKi8KKworLyogRW50cnkgcG9pbnQgb2YgdGhlIHBhcnNlci4KKyAgIFBhcnNlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gUkVHRVhQIGFuZCByZXR1cm4gdGhlIHN0cnVjdHVyZSB0cmVlLgorICAgSWYgYW4gZXJyb3IgaGFzIG9jY3VycmVkLCBFUlIgaXMgc2V0IGJ5IGVycm9yIGNvZGUsIGFuZCByZXR1cm4gTlVMTC4KKyAgIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbiA8cmVnX2V4cD46CisJICAgQ0FUCisJICAgLyBcCisJICAvICAgXAorICAgPHJlZ19leHA+ICBFT1IKKworICAgQ0FUIG1lYW5zIGNvbmNhdGVuYXRpb24uCisgICBFT1IgbWVhbnMgZW5kIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbi4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZWdfc3ludGF4X3Qgc3ludGF4LAorICAgICAgIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWUsICplb3IsICpyb290OworICByZV90b2tlbl90IGN1cnJlbnRfdG9rZW47CisgIGRmYS0+c3ludGF4ID0gc3ludGF4OworICBmZXRjaF90b2tlbiAoJmN1cnJlbnRfdG9rZW4sIHJlZ2V4cCwgc3ludGF4IHwgUkVfQ0FSRVRfQU5DSE9SU19IRVJFKTsKKyAgdHJlZSA9IHBhcnNlX3JlZ19leHAgKHJlZ2V4cCwgcHJlZywgJmN1cnJlbnRfdG9rZW4sIHN5bnRheCwgMCwgZXJyKTsKKyAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIHRyZWUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGVvciA9IGNyZWF0ZV90cmVlIChkZmEsIE5VTEwsIE5VTEwsIEVORF9PRl9SRSk7CisgIGlmICh0cmVlICE9IE5VTEwpCisgICAgcm9vdCA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGVvciwgQ09OQ0FUKTsKKyAgZWxzZQorICAgIHJvb3QgPSBlb3I7CisgIGlmIChCRSAoZW9yID09IE5VTEwgfHwgcm9vdCA9PSBOVUxMLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgcmV0dXJuIHJvb3Q7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgPGJyYW5jaDE+fDxicmFuY2gyPjoKKwkgICBBTFQKKwkgICAvIFwKKwkgIC8gICBcCisgICA8YnJhbmNoMT4gPGJyYW5jaDI+CisKKyAgIEFMVCBtZWFucyBhbHRlcm5hdGl2ZSwgd2hpY2ggcmVwcmVzZW50cyB0aGUgb3BlcmF0b3IgYHwnLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfcmVnX2V4cCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJICAgICAgIHJlZ19zeW50YXhfdCBzeW50YXgsIGludCBuZXN0LCByZWdfZXJyY29kZV90ICplcnIpCit7CisgIHJlX2RmYV90ICpkZmEgPSAocmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBiaW5fdHJlZV90ICp0cmVlLCAqYnJhbmNoID0gTlVMTDsKKyAgdHJlZSA9IHBhcnNlX2JyYW5jaCAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gTlVMTDsKKworICB3aGlsZSAodG9rZW4tPnR5cGUgPT0gT1BfQUxUKQorICAgIHsKKyAgICAgIGZldGNoX3Rva2VuICh0b2tlbiwgcmVnZXhwLCBzeW50YXggfCBSRV9DQVJFVF9BTkNIT1JTX0hFUkUpOworICAgICAgaWYgKHRva2VuLT50eXBlICE9IE9QX0FMVCAmJiB0b2tlbi0+dHlwZSAhPSBFTkRfT0ZfUkUKKwkgICYmIChuZXN0ID09IDAgfHwgdG9rZW4tPnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKSkKKwl7CisJICBicmFuY2ggPSBwYXJzZV9icmFuY2ggKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCwgZXJyKTsKKwkgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiBicmFuY2ggPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBOVUxMOworCX0KKyAgICAgIGVsc2UKKwlicmFuY2ggPSBOVUxMOworICAgICAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGJyYW5jaCwgT1BfQUxUKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisgIHJldHVybiB0cmVlOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkIHRoZSBmb2xsb3dpbmcgdHJlZSwgZnJvbSByZWd1bGFyIGV4cHJlc3Npb24KKyAgIDxleHAxPjxleHAyPjoKKwlDQVQKKwkvIFwKKyAgICAgICAvICAgXAorICAgPGV4cDE+IDxleHAyPgorCisgICBDQVQgbWVhbnMgY29uY2F0ZW5hdGlvbi4gICovCisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK3BhcnNlX2JyYW5jaCAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgYmluX3RyZWVfdCAqdHJlZSwgKmV4cDsKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIHRyZWUgPSBwYXJzZV9leHByZXNzaW9uIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QsIGVycik7CisgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworCisgIHdoaWxlICh0b2tlbi0+dHlwZSAhPSBPUF9BTFQgJiYgdG9rZW4tPnR5cGUgIT0gRU5EX09GX1JFCisJICYmIChuZXN0ID09IDAgfHwgdG9rZW4tPnR5cGUgIT0gT1BfQ0xPU0VfU1VCRVhQKSkKKyAgICB7CisgICAgICBleHAgPSBwYXJzZV9leHByZXNzaW9uIChyZWdleHAsIHByZWcsIHRva2VuLCBzeW50YXgsIG5lc3QsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgZXhwID09IE5VTEwsIDApKQorCXsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIGlmICh0cmVlICE9IE5VTEwgJiYgZXhwICE9IE5VTEwpCisJeworCSAgdHJlZSA9IGNyZWF0ZV90cmVlIChkZmEsIHRyZWUsIGV4cCwgQ09OQ0FUKTsKKwkgIGlmICh0cmVlID09IE5VTEwpCisJICAgIHsKKwkgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKHRyZWUgPT0gTlVMTCkKKwl0cmVlID0gZXhwOworICAgICAgLyogT3RoZXJ3aXNlIGV4cCA9PSBOVUxMLCB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBuZXcgdHJlZS4gICovCisgICAgfQorICByZXR1cm4gdHJlZTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBidWlsZCB0aGUgZm9sbG93aW5nIHRyZWUsIGZyb20gcmVndWxhciBleHByZXNzaW9uIGEqOgorCSAqCisJIHwKKwkgYQorKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfZXhwcmVzc2lvbiAocmVfc3RyaW5nX3QgKnJlZ2V4cCwgcmVnZXhfdCAqcHJlZywgcmVfdG9rZW5fdCAqdG9rZW4sCisJCSAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWU7CisgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgIGNhc2UgQ0hBUkFDVEVSOgorICAgICAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJeworCSAgd2hpbGUgKCFyZV9zdHJpbmdfZW9pIChyZWdleHApCisJCSAmJiAhcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKHJlZ2V4cCwgcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCkpKQorCSAgICB7CisJICAgICAgYmluX3RyZWVfdCAqbWJjX3JlbWFpbjsKKwkgICAgICBmZXRjaF90b2tlbiAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKwkgICAgICBtYmNfcmVtYWluID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgdG9rZW4pOworCSAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBtYmNfcmVtYWluLCBDT05DQVQpOworCSAgICAgIGlmIChCRSAobWJjX3JlbWFpbiA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJCXsKKwkJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkJICByZXR1cm4gTlVMTDsKKwkJfQorCSAgICB9CisJfQorI2VuZGlmCisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX09QRU5fU1VCRVhQOgorICAgICAgdHJlZSA9IHBhcnNlX3N1Yl9leHAgKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCArIDEsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfT1BFTl9CUkFDS0VUOgorICAgICAgdHJlZSA9IHBhcnNlX2JyYWNrZXRfZXhwIChyZWdleHAsIGRmYSwgdG9rZW4sIHN5bnRheCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9CQUNLX1JFRjoKKyAgICAgIGlmICghQkUgKGRmYS0+Y29tcGxldGVkX2JrcmVmX21hcCAmICgxIDw8IHRva2VuLT5vcHIuaWR4KSwgMSkpCisJeworCSAgKmVyciA9IFJFR19FU1VCUkVHOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZGZhLT51c2VkX2JrcmVmX21hcCB8PSAxIDw8IHRva2VuLT5vcHIuaWR4OworICAgICAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKyAgICAgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgICsrZGZhLT5uYmFja3JlZjsKKyAgICAgIGRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9PUEVOX0RVUF9OVU06CisgICAgICBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTlZBTElEX0RVUCkKKwl7CisJICAqZXJyID0gUkVHX0JBRFJQVDsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisgICAgY2FzZSBPUF9EVVBfQVNURVJJU0s6CisgICAgY2FzZSBPUF9EVVBfUExVUzoKKyAgICBjYXNlIE9QX0RVUF9RVUVTVElPTjoKKyAgICAgIGlmIChzeW50YXggJiBSRV9DT05URVhUX0lOVkFMSURfT1BTKQorCXsKKwkgICplcnIgPSBSRUdfQkFEUlBUOworCSAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZSBpZiAoc3ludGF4ICYgUkVfQ09OVEVYVF9JTkRFUF9PUFMpCisJeworCSAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisJICByZXR1cm4gcGFyc2VfZXhwcmVzc2lvbiAocmVnZXhwLCBwcmVnLCB0b2tlbiwgc3ludGF4LCBuZXN0LCBlcnIpOworCX0KKyAgICAgIC8qIGVsc2UgZmFsbCB0aHJvdWdoICAqLworICAgIGNhc2UgT1BfQ0xPU0VfU1VCRVhQOgorICAgICAgaWYgKCh0b2tlbi0+dHlwZSA9PSBPUF9DTE9TRV9TVUJFWFApICYmCisJICAhKHN5bnRheCAmIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpKQorCXsKKwkgICplcnIgPSBSRUdfRVJQQVJFTjsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICAgIC8qIGVsc2UgZmFsbCB0aHJvdWdoICAqLworICAgIGNhc2UgT1BfQ0xPU0VfRFVQX05VTToKKyAgICAgIC8qIFdlIHRyZWF0IGl0IGFzIGEgbm9ybWFsIGNoYXJhY3Rlci4gICovCisKKyAgICAgIC8qIFRoZW4gd2UgY2FuIHRoZXNlIGNoYXJhY3RlcnMgYXMgbm9ybWFsIGNoYXJhY3RlcnMuICAqLworICAgICAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisgICAgICAvKiBtYl9wYXJ0aWFsIGFuZCB3b3JkX2NoYXIgYml0cyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYWxyZWFkeQorCSBieSBwZWVrX3Rva2VuLiAgKi8KKyAgICAgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisgICAgICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBicmVhazsKKyAgICBjYXNlIEFOQ0hPUjoKKyAgICAgIGlmICgodG9rZW4tPm9wci5jdHhfdHlwZQorCSAgICYgKFdPUkRfREVMSU0gfCBOT1RfV09SRF9ERUxJTSB8IFdPUkRfRklSU1QgfCBXT1JEX0xBU1QpKQorCSAgJiYgZGZhLT53b3JkX29wc191c2VkID09IDApCisJaW5pdF93b3JkX2NoYXIgKGRmYSk7CisgICAgICBpZiAodG9rZW4tPm9wci5jdHhfdHlwZSA9PSBXT1JEX0RFTElNCisJICB8fCB0b2tlbi0+b3ByLmN0eF90eXBlID09IE5PVF9XT1JEX0RFTElNKQorCXsKKwkgIGJpbl90cmVlX3QgKnRyZWVfZmlyc3QsICp0cmVlX2xhc3Q7CisJICBpZiAodG9rZW4tPm9wci5jdHhfdHlwZSA9PSBXT1JEX0RFTElNKQorCSAgICB7CisJICAgICAgdG9rZW4tPm9wci5jdHhfdHlwZSA9IFdPUkRfRklSU1Q7CisJICAgICAgdHJlZV9maXJzdCA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gV09SRF9MQVNUOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gSU5TSURFX1dPUkQ7CisJICAgICAgdHJlZV9maXJzdCA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgICAgICB0b2tlbi0+b3ByLmN0eF90eXBlID0gSU5TSURFX05PVFdPUkQ7CisJICAgIH0KKwkgIHRyZWVfbGFzdCA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlX2ZpcnN0LCB0cmVlX2xhc3QsIE9QX0FMVCk7CisJICBpZiAoQkUgKHRyZWVfZmlyc3QgPT0gTlVMTCB8fCB0cmVlX2xhc3QgPT0gTlVMTCB8fCB0cmVlID09IE5VTEwsIDApKQorCSAgICB7CisJICAgICAgKmVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworCSAgdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsIHRva2VuKTsKKwkgIGlmIChCRSAodHJlZSA9PSBOVUxMLCAwKSkKKwkgICAgeworCSAgICAgICplcnIgPSBSRUdfRVNQQUNFOworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisJfQorICAgICAgLyogV2UgbXVzdCByZXR1cm4gaGVyZSwgc2luY2UgQU5DSE9ScyBjYW4ndCBiZSBmb2xsb3dlZAorCSBieSByZXBldGl0aW9uIG9wZXJhdG9ycy4KKwkgZWcuIFJFIl4qIiBpcyBpbnZhbGlkIG9yICI8QU5DSE9SKF4pPjxDSEFSKCopPiIsCisJICAgICBpdCBtdXN0IG5vdCBiZSAiPEFOQ0hPUiheKT48UkVQRUFUKCopPiIuICAqLworICAgICAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisgICAgICByZXR1cm4gdHJlZTsKKyAgICBjYXNlIE9QX1BFUklPRDoKKyAgICAgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCB0b2tlbik7CisgICAgICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisJeworCSAgKmVyciA9IFJFR19FU1BBQ0U7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwlkZmEtPmhhc19tYl9ub2RlID0gMTsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfV09SRDoKKyAgICBjYXNlIE9QX05PVFdPUkQ6CisgICAgICB0cmVlID0gYnVpbGRfY2hhcmNsYXNzX29wIChkZmEsIHJlZ2V4cC0+dHJhbnMsCisJCQkJICJhbG51bSIsCisJCQkJICJfIiwKKwkJCQkgdG9rZW4tPnR5cGUgPT0gT1BfTk9UV09SRCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiAmJiB0cmVlID09IE5VTEwsIDApKQorCXJldHVybiBOVUxMOworICAgICAgYnJlYWs7CisgICAgY2FzZSBPUF9TUEFDRToKKyAgICBjYXNlIE9QX05PVFNQQUNFOgorICAgICAgdHJlZSA9IGJ1aWxkX2NoYXJjbGFzc19vcCAoZGZhLCByZWdleHAtPnRyYW5zLAorCQkJCSAic3BhY2UiLAorCQkJCSAiIiwKKwkJCQkgdG9rZW4tPnR5cGUgPT0gT1BfTk9UU1BBQ0UsIGVycik7CisgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IgJiYgdHJlZSA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgT1BfQUxUOgorICAgIGNhc2UgRU5EX09GX1JFOgorICAgICAgcmV0dXJuIE5VTEw7CisgICAgY2FzZSBCQUNLX1NMQVNIOgorICAgICAgKmVyciA9IFJFR19FRVNDQVBFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgZGVmYXVsdDoKKyAgICAgIC8qIE11c3Qgbm90IGhhcHBlbj8gICovCisjaWZkZWYgREVCVUcKKyAgICAgIGFzc2VydCAoMCk7CisjZW5kaWYKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyAgd2hpbGUgKHRva2VuLT50eXBlID09IE9QX0RVUF9BU1RFUklTSyB8fCB0b2tlbi0+dHlwZSA9PSBPUF9EVVBfUExVUworCSB8fCB0b2tlbi0+dHlwZSA9PSBPUF9EVVBfUVVFU1RJT04gfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9EVVBfTlVNKQorICAgIHsKKyAgICAgIHRyZWUgPSBwYXJzZV9kdXBfb3AgKHRyZWUsIHJlZ2V4cCwgZGZhLCB0b2tlbiwgc3ludGF4LCBlcnIpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SICYmIHRyZWUgPT0gTlVMTCwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgICAvKiBJbiBCUkUgY29uc2VjdXRpdmUgZHVwbGljYXRpb25zIGFyZSBub3QgYWxsb3dlZC4gICovCisgICAgICBpZiAoKHN5bnRheCAmIFJFX0NPTlRFWFRfSU5WQUxJRF9EVVApCisJICAmJiAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX0FTVEVSSVNLCisJICAgICAgfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9EVVBfTlVNKSkKKwl7CisJICAqZXJyID0gUkVHX0JBRFJQVDsKKwkgIHJldHVybiBOVUxMOworCX0KKyAgICB9CisKKyAgcmV0dXJuIHRyZWU7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gYnVpbGQgdGhlIGZvbGxvd2luZyB0cmVlLCBmcm9tIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgKDxyZWdfZXhwPik6CisJIFNVQkVYUAorCSAgICB8CisJPHJlZ19leHA+CisqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitwYXJzZV9zdWJfZXhwIChyZV9zdHJpbmdfdCAqcmVnZXhwLCByZWdleF90ICpwcmVnLCByZV90b2tlbl90ICp0b2tlbiwKKwkgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IG5lc3QsIHJlZ19lcnJjb2RlX3QgKmVycikKK3sKKyAgcmVfZGZhX3QgKmRmYSA9IChyZV9kZmFfdCAqKSBwcmVnLT5idWZmZXI7CisgIGJpbl90cmVlX3QgKnRyZWU7CisgIHNpemVfdCBjdXJfbnN1YjsKKyAgY3VyX25zdWIgPSBwcmVnLT5yZV9uc3ViKys7CisKKyAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCB8IFJFX0NBUkVUX0FOQ0hPUlNfSEVSRSk7CisKKyAgLyogVGhlIHN1YmV4cHJlc3Npb24gbWF5IGJlIGEgbnVsbCBzdHJpbmcuICAqLworICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQKQorICAgIHRyZWUgPSBOVUxMOworICBlbHNlCisgICAgeworICAgICAgdHJlZSA9IHBhcnNlX3JlZ19leHAgKHJlZ2V4cCwgcHJlZywgdG9rZW4sIHN5bnRheCwgbmVzdCwgZXJyKTsKKyAgICAgIGlmIChCRSAoKmVyciA9PSBSRUdfTk9FUlJPUiAmJiB0b2tlbi0+dHlwZSAhPSBPUF9DTE9TRV9TVUJFWFAsIDApKQorCSplcnIgPSBSRUdfRVBBUkVOOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgaWYgKGN1cl9uc3ViIDw9ICc5JyAtICcxJykKKyAgICBkZmEtPmNvbXBsZXRlZF9ia3JlZl9tYXAgfD0gMSA8PCBjdXJfbnN1YjsKKworICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgTlVMTCwgU1VCRVhQKTsKKyAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfRVNQQUNFOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICB0cmVlLT50b2tlbi5vcHIuaWR4ID0gY3VyX25zdWI7CisgIHJldHVybiB0cmVlOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHBhcnNlIHJlcGV0aXRpb24gb3BlcmF0b3JzIGxpa2UgIioiLCAiKyIsICJ7MSwzfSIgZXRjLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfZHVwX29wIChiaW5fdHJlZV90ICplbGVtLCByZV9zdHJpbmdfdCAqcmVnZXhwLCByZV9kZmFfdCAqZGZhLAorCSAgICAgIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpCit7CisgIGJpbl90cmVlX3QgKnRyZWUgPSBOVUxMLCAqb2xkX3RyZWUgPSBOVUxMOworICBpbnQgaSwgc3RhcnQsIGVuZCwgc3RhcnRfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKHJlZ2V4cCk7CisjaWZuZGVmIFJFX1RPS0VOX0lOSVRfQlVHCisgIHJlX3Rva2VuX3Qgc3RhcnRfdG9rZW4gPSAqdG9rZW47CisjZWxzZQorICByZV90b2tlbl90IHN0YXJ0X3Rva2VuOworCisgIG1lbWNweSAoKHZvaWQgKikgJnN0YXJ0X3Rva2VuLCAodm9pZCAqKSB0b2tlbiwgc2l6ZW9mIHN0YXJ0X3Rva2VuKTsKKyNlbmRpZgorCisgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0RVUF9OVU0pCisgICAgeworICAgICAgZW5kID0gMDsKKyAgICAgIHN0YXJ0ID0gZmV0Y2hfbnVtYmVyIChyZWdleHAsIHRva2VuLCBzeW50YXgpOworICAgICAgaWYgKHN0YXJ0ID09IC0xKQorCXsKKwkgIGlmICh0b2tlbi0+dHlwZSA9PSBDSEFSQUNURVIgJiYgdG9rZW4tPm9wci5jID09ICcsJykKKwkgICAgc3RhcnQgPSAwOyAvKiBXZSB0cmVhdCAieyxtfSIgYXMgInswLG19Ii4gICovCisJICBlbHNlCisJICAgIHsKKwkgICAgICAqZXJyID0gUkVHX0JBREJSOyAvKiA8cmU+e30gaXMgaW52YWxpZC4gICovCisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKwl9CisgICAgICBpZiAoQkUgKHN0YXJ0ICE9IC0yLCAxKSkKKwl7CisJICAvKiBXZSB0cmVhdCAie259IiBhcyAie24sbn0iLiAgKi8KKwkgIGVuZCA9ICgodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfRFVQX05VTSkgPyBzdGFydAorCQkgOiAoKHRva2VuLT50eXBlID09IENIQVJBQ1RFUiAmJiB0b2tlbi0+b3ByLmMgPT0gJywnKQorCQkgICAgPyBmZXRjaF9udW1iZXIgKHJlZ2V4cCwgdG9rZW4sIHN5bnRheCkgOiAtMikpOworCX0KKyAgICAgIGlmIChCRSAoc3RhcnQgPT0gLTIgfHwgZW5kID09IC0yLCAwKSkKKwl7CisJICAvKiBJbnZhbGlkIHNlcXVlbmNlLiAgKi8KKwkgIGlmIChCRSAoIShzeW50YXggJiBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCksIDApKQorCSAgICB7CisJICAgICAgaWYgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSkKKwkJKmVyciA9IFJFR19FQlJBQ0U7CisJICAgICAgZWxzZQorCQkqZXJyID0gUkVHX0JBREJSOworCisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIH0KKworCSAgLyogSWYgdGhlIHN5bnRheCBiaXQgaXMgc2V0LCByb2xsYmFjay4gICovCisJICByZV9zdHJpbmdfc2V0X2luZGV4IChyZWdleHAsIHN0YXJ0X2lkeCk7CisJICAqdG9rZW4gPSBzdGFydF90b2tlbjsKKwkgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworCSAgLyogbWJfcGFydGlhbCBhbmQgd29yZF9jaGFyIGJpdHMgc2hvdWxkIGJlIGFscmVhZHkgaW5pdGlhbGl6ZWQgYnkKKwkgICAgIHBlZWtfdG9rZW4uICAqLworCSAgcmV0dXJuIGVsZW07CisJfQorCisgICAgICBpZiAoQkUgKChlbmQgIT0gLTEgJiYgc3RhcnQgPiBlbmQpIHx8IHRva2VuLT50eXBlICE9IE9QX0NMT1NFX0RVUF9OVU0sIDApKQorCXsKKwkgIC8qIEZpcnN0IG51bWJlciBncmVhdGVyIHRoYW4gc2Vjb25kLiAgKi8KKwkgICplcnIgPSBSRUdfQkFEQlI7CisJICByZXR1cm4gTlVMTDsKKwl9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc3RhcnQgPSAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX1BMVVMpID8gMSA6IDA7CisgICAgICBlbmQgPSAodG9rZW4tPnR5cGUgPT0gT1BfRFVQX1FVRVNUSU9OKSA/IDEgOiAtMTsKKyAgICB9CisKKyAgZmV0Y2hfdG9rZW4gKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyAgaWYgKEJFIChlbGVtID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworICBpZiAoQkUgKHN0YXJ0ID09IDAgJiYgZW5kID09IDAsIDApKQorICAgIHsKKyAgICAgIHBvc3RvcmRlciAoZWxlbSwgZnJlZV90cmVlLCBOVUxMKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAvKiBFeHRyYWN0ICI8cmU+e24sbX0iIHRvICI8cmU+PHJlPi4uLjxyZT48cmU+ezAsPG0tbj59Ii4gICovCisgIGlmIChCRSAoc3RhcnQgPiAwLCAwKSkKKyAgICB7CisgICAgICB0cmVlID0gZWxlbTsKKyAgICAgIGZvciAoaSA9IDI7IGkgPD0gc3RhcnQ7ICsraSkKKwl7CisJICBlbGVtID0gZHVwbGljYXRlX3RyZWUgKGVsZW0sIGRmYSk7CisJICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgdHJlZSwgZWxlbSwgQ09OQ0FUKTsKKwkgIGlmIChCRSAoZWxlbSA9PSBOVUxMIHx8IHRyZWUgPT0gTlVMTCwgMCkpCisJICAgIGdvdG8gcGFyc2VfZHVwX29wX2VzcGFjZTsKKwl9CisKKyAgICAgIGlmIChzdGFydCA9PSBlbmQpCisJcmV0dXJuIHRyZWU7CisKKyAgICAgIC8qIER1cGxpY2F0ZSBFTEVNIGJlZm9yZSBpdCBpcyBtYXJrZWQgb3B0aW9uYWwuICAqLworICAgICAgZWxlbSA9IGR1cGxpY2F0ZV90cmVlIChlbGVtLCBkZmEpOworICAgICAgb2xkX3RyZWUgPSB0cmVlOworICAgIH0KKyAgZWxzZQorICAgIG9sZF90cmVlID0gTlVMTDsKKworICBpZiAoZWxlbS0+dG9rZW4udHlwZSA9PSBTVUJFWFApCisgICAgcG9zdG9yZGVyIChlbGVtLCBtYXJrX29wdF9zdWJleHAsICh2b2lkICopIChsb25nKSBlbGVtLT50b2tlbi5vcHIuaWR4KTsKKworICB0cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgZWxlbSwgTlVMTCwgKGVuZCA9PSAtMSA/IE9QX0RVUF9BU1RFUklTSyA6IE9QX0FMVCkpOworICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisgICAgZ290byBwYXJzZV9kdXBfb3BfZXNwYWNlOworCisgIC8qIFRoaXMgbG9vcCBpcyBhY3R1YWxseSBleGVjdXRlZCBvbmx5IHdoZW4gZW5kICE9IC0xLAorICAgICB0byByZXdyaXRlIDxyZT57MCxufSBhcyAoPHJlPig8cmU+Li4uPHJlPj8pPyk/Li4uICBXZSBoYXZlCisgICAgIGFscmVhZHkgY3JlYXRlZCB0aGUgc3RhcnQrMS10aCBjb3B5LiAgKi8KKyAgZm9yIChpID0gc3RhcnQgKyAyOyBpIDw9IGVuZDsgKytpKQorICAgIHsKKyAgICAgIGVsZW0gPSBkdXBsaWNhdGVfdHJlZSAoZWxlbSwgZGZhKTsKKyAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBlbGVtLCBDT05DQVQpOworICAgICAgaWYgKEJFIChlbGVtID09IE5VTEwgfHwgdHJlZSA9PSBOVUxMLCAwKSkKKwlnb3RvIHBhcnNlX2R1cF9vcF9lc3BhY2U7CisKKyAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBOVUxMLCBPUF9BTFQpOworICAgICAgaWYgKEJFICh0cmVlID09IE5VTEwsIDApKQorCWdvdG8gcGFyc2VfZHVwX29wX2VzcGFjZTsKKyAgICB9CisKKyAgaWYgKG9sZF90cmVlKQorICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCBvbGRfdHJlZSwgdHJlZSwgQ09OQ0FUKTsKKworICByZXR1cm4gdHJlZTsKKworIHBhcnNlX2R1cF9vcF9lc3BhY2U6CisgICplcnIgPSBSRUdfRVNQQUNFOworICByZXR1cm4gTlVMTDsKK30KKworLyogU2l6ZSBvZiB0aGUgbmFtZXMgZm9yIGNvbGxhdGluZyBzeW1ib2wvZXF1aXZhbGVuY2VfY2xhc3MvY2hhcmFjdGVyX2NsYXNzLgorICAgSSdtIG5vdCBzdXJlLCBidXQgbWF5YmUgZW5vdWdoLiAgKi8KKyNkZWZpbmUgQlJBQ0tFVF9OQU1FX0JVRl9TSVpFIDMyCisKKyNpZm5kZWYgX0xJQkMKKyAgLyogTG9jYWwgZnVuY3Rpb24gZm9yIHBhcnNlX2JyYWNrZXRfZXhwIG9ubHkgdXNlZCBpbiBjYXNlIG9mIE5PVCBfTElCQy4KKyAgICAgQnVpbGQgdGhlIHJhbmdlIGV4cHJlc3Npb24gd2hpY2ggc3RhcnRzIGZyb20gU1RBUlRfRUxFTSwgYW5kIGVuZHMKKyAgICAgYXQgRU5EX0VMRU0uICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBSQU5HRV9BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5yYW5nZV9zdGFydHMsIGFuZAorICAgICBtYmNzZXQtPnJhbmdlX2VuZHMsIGlzIGEgcG9pbnRlciBhcmd1bWVudCBzaW5jZSB3ZSBtYXkKKyAgICAgdXBkYXRlIGl0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCisjIGlmZGVmIFJFX0VOQUJMRV9JMThOCitidWlsZF9yYW5nZV9leHAgKGJpdHNldF90IHNiY3NldCwgcmVfY2hhcnNldF90ICptYmNzZXQsIGludCAqcmFuZ2VfYWxsb2MsCisJCSBicmFja2V0X2VsZW1fdCAqc3RhcnRfZWxlbSwgYnJhY2tldF9lbGVtX3QgKmVuZF9lbGVtKQorIyBlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworYnVpbGRfcmFuZ2VfZXhwIChiaXRzZXRfdCBzYmNzZXQsIGJyYWNrZXRfZWxlbV90ICpzdGFydF9lbGVtLAorCQkgYnJhY2tldF9lbGVtX3QgKmVuZF9lbGVtKQorIyBlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3sKKyAgdW5zaWduZWQgaW50IHN0YXJ0X2NoLCBlbmRfY2g7CisgIC8qIEVxdWl2YWxlbmNlIENsYXNzZXMgYW5kIENoYXJhY3RlciBDbGFzc2VzIGNhbid0IGJlIGEgcmFuZ2Ugc3RhcnQvZW5kLiAgKi8KKyAgaWYgKEJFIChzdGFydF9lbGVtLT50eXBlID09IEVRVUlWX0NMQVNTIHx8IHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ0hBUl9DTEFTUworCSAgfHwgZW5kX2VsZW0tPnR5cGUgPT0gRVFVSVZfQ0xBU1MgfHwgZW5kX2VsZW0tPnR5cGUgPT0gQ0hBUl9DTEFTUywKKwkgIDApKQorICAgIHJldHVybiBSRUdfRVJBTkdFOworCisgIC8qIFdlIGNhbiBoYW5kbGUgbm8gbXVsdGkgY2hhcmFjdGVyIGNvbGxhdGluZyBlbGVtZW50cyB3aXRob3V0IGxpYmMKKyAgICAgc3VwcG9ydC4gICovCisgIGlmIChCRSAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0KKwkgICAmJiBzdHJsZW4gKChjaGFyICopIHN0YXJ0X2VsZW0tPm9wci5uYW1lKSA+IDEpCisJICB8fCAoZW5kX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0KKwkgICAgICAmJiBzdHJsZW4gKChjaGFyICopIGVuZF9lbGVtLT5vcHIubmFtZSkgPiAxKSwgMCkpCisgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKworIyBpZmRlZiBSRV9FTkFCTEVfSTE4TgorICB7CisgICAgd2NoYXJfdCB3YzsKKyAgICB3aW50X3Qgc3RhcnRfd2M7CisgICAgd2ludF90IGVuZF93YzsKKyAgICB3Y2hhcl90IGNtcF9idWZbNl0gPSB7TCdcMCcsIEwnXDAnLCBMJ1wwJywgTCdcMCcsIEwnXDAnLCBMJ1wwJ307CisKKyAgICBzdGFydF9jaCA9ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSKSA/IHN0YXJ0X2VsZW0tPm9wci5jaAorCQk6ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkgPyBzdGFydF9lbGVtLT5vcHIubmFtZVswXQorCQkgICA6IDApKTsKKyAgICBlbmRfY2ggPSAoKGVuZF9lbGVtLT50eXBlID09IFNCX0NIQVIpID8gZW5kX2VsZW0tPm9wci5jaAorCSAgICAgIDogKChlbmRfZWxlbS0+dHlwZSA9PSBDT0xMX1NZTSkgPyBlbmRfZWxlbS0+b3ByLm5hbWVbMF0KKwkJIDogMCkpOworI2lmZGVmIEdBV0sKKyAgICAvKgorICAgICAqIEZlZG9yYSBDb3JlIDIsIG1heWJlIG90aGVycywgaGF2ZSBicm9rZW4gYGJ0b3djJyB0aGF0IHJldHVybnMgLTEKKyAgICAgKiBmb3IgYW55IHZhbHVlID4gMTI3LiBTaWdoLiBOb3RlIHRoYXQgYHN0YXJ0X2NoJyBhbmQgYGVuZF9jaCcgYXJlCisgICAgICogdW5zaWduZWQsIHNvIHdlIGRvbid0IGhhdmUgc2lnbiBleHRlbnNpb24gcHJvYmxlbXMuCisgICAgICovCisgICAgc3RhcnRfd2MgPSAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gU0JfQ0hBUiB8fCBzdGFydF9lbGVtLT50eXBlID09IENPTExfU1lNKQorCQk/IHN0YXJ0X2NoIDogc3RhcnRfZWxlbS0+b3ByLndjaCk7CisgICAgZW5kX3djID0gKChlbmRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSIHx8IGVuZF9lbGVtLT50eXBlID09IENPTExfU1lNKQorCSAgICAgID8gZW5kX2NoIDogZW5kX2VsZW0tPm9wci53Y2gpOworI2Vsc2UKKyAgICBzdGFydF93YyA9ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSIHx8IHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pCisJCT8gX19idG93YyAoc3RhcnRfY2gpIDogc3RhcnRfZWxlbS0+b3ByLndjaCk7CisgICAgZW5kX3djID0gKChlbmRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSIHx8IGVuZF9lbGVtLT50eXBlID09IENPTExfU1lNKQorCSAgICAgID8gX19idG93YyAoZW5kX2NoKSA6IGVuZF9lbGVtLT5vcHIud2NoKTsKKyNlbmRpZgorICAgIGlmIChzdGFydF93YyA9PSBXRU9GIHx8IGVuZF93YyA9PSBXRU9GKQorICAgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKyAgICBjbXBfYnVmWzBdID0gc3RhcnRfd2M7CisgICAgY21wX2J1Zls0XSA9IGVuZF93YzsKKyAgICBpZiAod2NzY29sbCAoY21wX2J1ZiwgY21wX2J1ZiArIDQpID4gMCkKKyAgICAgIHJldHVybiBSRUdfRVJBTkdFOworCisgICAgLyogR290IHZhbGlkIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZXMsIGFkZCB0aGVtIGFzIGEgbmV3IGVudHJ5LgorICAgICAgIEhvd2V2ZXIsIGZvciAhX0xJQkMgd2UgaGF2ZSBubyBjb2xsYXRpb24gZWxlbWVudHM6IGlmIHRoZQorICAgICAgIGNoYXJhY3RlciBzZXQgaXMgc2luZ2xlIGJ5dGUsIHRoZSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgc2V0CisgICAgICAgdGhhdCB3ZSBidWlsZCBiZWxvdyBzdWZmaWNlcy4gIHBhcnNlX2JyYWNrZXRfZXhwIHBhc3NlcworICAgICAgIG5vIE1CQ1NFVCBpZiBkZmEtPm1iX2N1cl9tYXggPT0gMS4gICovCisgICAgaWYgKG1iY3NldCkKKyAgICAgIHsKKwkvKiBDaGVjayB0aGUgc3BhY2Ugb2YgdGhlIGFycmF5cy4gICovCisJaWYgKEJFICgqcmFuZ2VfYWxsb2MgPT0gbWJjc2V0LT5ucmFuZ2VzLCAwKSkKKwkgIHsKKwkgICAgLyogVGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSwgbmVlZCByZWFsbG9jLiAgKi8KKwkgICAgd2NoYXJfdCAqbmV3X2FycmF5X3N0YXJ0LCAqbmV3X2FycmF5X2VuZDsKKwkgICAgaW50IG5ld19ucmFuZ2VzOworCisJICAgIC8qICsxIGluIGNhc2Ugb2YgbWJjc2V0LT5ucmFuZ2VzIGlzIDAuICAqLworCSAgICBuZXdfbnJhbmdlcyA9IDIgKiBtYmNzZXQtPm5yYW5nZXMgKyAxOworCSAgICAvKiBVc2UgcmVhbGxvYyBzaW5jZSBtYmNzZXQtPnJhbmdlX3N0YXJ0cyBhbmQgbWJjc2V0LT5yYW5nZV9lbmRzCisJICAgICAgIGFyZSBOVUxMIGlmICpyYW5nZV9hbGxvYyA9PSAwLiAgKi8KKwkgICAgbmV3X2FycmF5X3N0YXJ0ID0gcmVfcmVhbGxvYyAobWJjc2V0LT5yYW5nZV9zdGFydHMsIHdjaGFyX3QsCisJCQkJCSAgbmV3X25yYW5nZXMpOworCSAgICBuZXdfYXJyYXlfZW5kID0gcmVfcmVhbGxvYyAobWJjc2V0LT5yYW5nZV9lbmRzLCB3Y2hhcl90LAorCQkJCQluZXdfbnJhbmdlcyk7CisKKwkgICAgaWYgKEJFIChuZXdfYXJyYXlfc3RhcnQgPT0gTlVMTCB8fCBuZXdfYXJyYXlfZW5kID09IE5VTEwsIDApKQorCSAgICAgIHJldHVybiBSRUdfRVNQQUNFOworCisJICAgIG1iY3NldC0+cmFuZ2Vfc3RhcnRzID0gbmV3X2FycmF5X3N0YXJ0OworCSAgICBtYmNzZXQtPnJhbmdlX2VuZHMgPSBuZXdfYXJyYXlfZW5kOworCSAgICAqcmFuZ2VfYWxsb2MgPSBuZXdfbnJhbmdlczsKKwkgIH0KKworCW1iY3NldC0+cmFuZ2Vfc3RhcnRzW21iY3NldC0+bnJhbmdlc10gPSBzdGFydF93YzsKKwltYmNzZXQtPnJhbmdlX2VuZHNbbWJjc2V0LT5ucmFuZ2VzKytdID0gZW5kX3djOworICAgICAgfQorCisgICAgLyogQnVpbGQgdGhlIHRhYmxlIGZvciBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KKyAgICBmb3IgKHdjID0gMDsgd2MgPCBTQkNfTUFYOyArK3djKQorICAgICAgeworCWNtcF9idWZbMl0gPSB3YzsKKwlpZiAod2NzY29sbCAoY21wX2J1ZiwgY21wX2J1ZiArIDIpIDw9IDAKKwkgICAgJiYgd2NzY29sbCAoY21wX2J1ZiArIDIsIGNtcF9idWYgKyA0KSA8PSAwKQorCSAgYml0c2V0X3NldCAoc2Jjc2V0LCB3Yyk7CisgICAgICB9CisgIH0KKyMgZWxzZSAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgeworICAgIHVuc2lnbmVkIGludCBjaDsKKyAgICBzdGFydF9jaCA9ICgoc3RhcnRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSICkgPyBzdGFydF9lbGVtLT5vcHIuY2gKKwkJOiAoKHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pID8gc3RhcnRfZWxlbS0+b3ByLm5hbWVbMF0KKwkJICAgOiAwKSk7CisgICAgZW5kX2NoID0gKChlbmRfZWxlbS0+dHlwZSA9PSBTQl9DSEFSICkgPyBlbmRfZWxlbS0+b3ByLmNoCisJICAgICAgOiAoKGVuZF9lbGVtLT50eXBlID09IENPTExfU1lNKSA/IGVuZF9lbGVtLT5vcHIubmFtZVswXQorCQkgOiAwKSk7CisgICAgaWYgKHN0YXJ0X2NoID4gZW5kX2NoKQorICAgICAgcmV0dXJuIFJFR19FUkFOR0U7CisgICAgLyogQnVpbGQgdGhlIHRhYmxlIGZvciBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KKyAgICBmb3IgKGNoID0gMDsgY2ggPCBTQkNfTUFYOyArK2NoKQorICAgICAgaWYgKHN0YXJ0X2NoIDw9IGNoICAmJiBjaCA8PSBlbmRfY2gpCisJYml0c2V0X3NldCAoc2Jjc2V0LCBjaCk7CisgIH0KKyMgZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKyNlbmRpZiAvKiBub3QgX0xJQkMgKi8KKworI2lmbmRlZiBfTElCQworLyogSGVscGVyIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCBvbmx5IHVzZWQgaW4gY2FzZSBvZiBOT1QgX0xJQkMuLgorICAgQnVpbGQgdGhlIGNvbGxhdGluZyBlbGVtZW50IHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IE5BTUUuCisgICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgQ09MTF9TWU1fQUxMT0MgaXMgdGhlIGFsbG9jYXRlZCBzaXplIG9mIG1iY3NldC0+Y29sbF9zeW0sIGlzIGEKKyAgIHBvaW50ZXIgYXJndW1lbnQgc2luY2Ugd2UgbWF5IHVwZGF0ZSBpdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorIyBpZmRlZiBSRV9FTkFCTEVfSTE4TgorYnVpbGRfY29sbGF0aW5nX3N5bWJvbCAoYml0c2V0X3Qgc2Jjc2V0LCByZV9jaGFyc2V0X3QgKm1iY3NldCwKKwkJCWludCAqY29sbF9zeW1fYWxsb2MsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCisjIGVsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCitidWlsZF9jb2xsYXRpbmdfc3ltYm9sIChiaXRzZXRfdCBzYmNzZXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpCisjIGVuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworeworICBzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4gKChjb25zdCBjaGFyICopIG5hbWUpOworICBpZiAoQkUgKG5hbWVfbGVuICE9IDEsIDApKQorICAgIHJldHVybiBSRUdfRUNPTExBVEU7CisgIGVsc2UKKyAgICB7CisgICAgICBiaXRzZXRfc2V0IChzYmNzZXQsIG5hbWVbMF0pOworICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KK30KKyNlbmRpZiAvKiBub3QgX0xJQkMgKi8KKworLyogVGhpcyBmdW5jdGlvbiBwYXJzZSBicmFja2V0IGV4cHJlc3Npb24gbGlrZSAiW2FiY10iLCAiW2EtY10iLAorICAgIltbLmEtYS5dXSIgZXRjLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorcGFyc2VfYnJhY2tldF9leHAgKHJlX3N0cmluZ190ICpyZWdleHAsIHJlX2RmYV90ICpkZmEsIHJlX3Rva2VuX3QgKnRva2VuLAorCQkgICByZWdfc3ludGF4X3Qgc3ludGF4LCByZWdfZXJyY29kZV90ICplcnIpCit7CisjaWZkZWYgX0xJQkMKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqY29sbHNlcW1iOworICBjb25zdCBjaGFyICpjb2xsc2Vxd2M7CisgIHVpbnQzMl90IG5ydWxlczsKKyAgaW50MzJfdCB0YWJsZV9zaXplOworICBjb25zdCBpbnQzMl90ICpzeW1iX3RhYmxlOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpleHRyYTsKKworICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgdXNlZCBpbiBfTElCQyBlbnZpcm9ubWVudC4KKyAgICAgU2VlayB0aGUgY29sbGF0aW5nIHN5bWJvbCBlbnRyeSBjb3JyZXNwb25kaW5ncyB0byBOQU1FLgorICAgICBSZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBzeW1ib2wgaW4gdGhlIFNZTUJfVEFCTEUuICAqLworCisgIGF1dG8gaW5saW5lIGludDMyX3QKKyAgX19hdHRyaWJ1dGUgKChhbHdheXNfaW5saW5lKSkKKyAgc2Vla19jb2xsYXRpbmdfc3ltYm9sX2VudHJ5IChuYW1lLCBuYW1lX2xlbikKKwkgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZTsKKwkgc2l6ZV90IG5hbWVfbGVuOworICAgIHsKKyAgICAgIGludDMyX3QgaGFzaCA9IGVsZW1faGFzaCAoKGNvbnN0IGNoYXIgKikgbmFtZSwgbmFtZV9sZW4pOworICAgICAgaW50MzJfdCBlbGVtID0gaGFzaCAlIHRhYmxlX3NpemU7CisgICAgICBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCkKKwl7CisJICBpbnQzMl90IHNlY29uZCA9IGhhc2ggJSAodGFibGVfc2l6ZSAtIDIpICsgMTsKKworCSAgZG8KKwkgICAgeworCSAgICAgIC8qIEZpcnN0IGNvbXBhcmUgdGhlIGhhc2hpbmcgdmFsdWUuICAqLworCSAgICAgIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSA9PSBoYXNoCisJCSAgLyogQ29tcGFyZSB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lLiAgKi8KKwkJICAmJiBuYW1lX2xlbiA9PSBleHRyYVtzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV1dCisJCSAgLyogQ29tcGFyZSB0aGUgbmFtZS4gICovCisJCSAgJiYgbWVtY21wIChuYW1lLCAmZXh0cmFbc3ltYl90YWJsZVsyICogZWxlbSArIDFdICsgMV0sCisJCQkgICAgIG5hbWVfbGVuKSA9PSAwKQorCQl7CisJCSAgLyogWWVwLCB0aGlzIGlzIHRoZSBlbnRyeS4gICovCisJCSAgYnJlYWs7CisJCX0KKworCSAgICAgIC8qIE5leHQgZW50cnkuICAqLworCSAgICAgIGVsZW0gKz0gc2Vjb25kOworCSAgICB9CisJICB3aGlsZSAoc3ltYl90YWJsZVsyICogZWxlbV0gIT0gMCk7CisJfQorICAgICAgcmV0dXJuIGVsZW07CisgICAgfQorCisgIC8qIExvY2FsIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCB1c2VkIGluIF9MSUJDIGVudmlyb25tZW50LgorICAgICBMb29rIHVwIHRoZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUgb2YgQlJfRUxFTS4KKyAgICAgUmV0dXJuIHRoZSB2YWx1ZSBpZiBzdWNjZWVkZWQsIFVJTlRfTUFYIG90aGVyd2lzZS4gICovCisKKyAgYXV0byBpbmxpbmUgdW5zaWduZWQgaW50CisgIF9fYXR0cmlidXRlICgoYWx3YXlzX2lubGluZSkpCisgIGxvb2t1cF9jb2xsYXRpb25fc2VxdWVuY2VfdmFsdWUgKGJyX2VsZW0pCisJIGJyYWNrZXRfZWxlbV90ICpicl9lbGVtOworICAgIHsKKyAgICAgIGlmIChicl9lbGVtLT50eXBlID09IFNCX0NIQVIpCisJeworCSAgLyoKKwkgIGlmIChNQl9DVVJfTUFYID09IDEpCisJICAqLworCSAgaWYgKG5ydWxlcyA9PSAwKQorCSAgICByZXR1cm4gY29sbHNlcW1iW2JyX2VsZW0tPm9wci5jaF07CisJICBlbHNlCisJICAgIHsKKwkgICAgICB3aW50X3Qgd2MgPSBfX2J0b3djIChicl9lbGVtLT5vcHIuY2gpOworCSAgICAgIHJldHVybiBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIHdjKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UgaWYgKGJyX2VsZW0tPnR5cGUgPT0gTUJfQ0hBUikKKwl7CisJICBpZiAobnJ1bGVzICE9IDApCisJICAgIHJldHVybiBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIGJyX2VsZW0tPm9wci53Y2gpOworCX0KKyAgICAgIGVsc2UgaWYgKGJyX2VsZW0tPnR5cGUgPT0gQ09MTF9TWU0pCisJeworCSAgc2l6ZV90IHN5bV9uYW1lX2xlbiA9IHN0cmxlbiAoKGNoYXIgKikgYnJfZWxlbS0+b3ByLm5hbWUpOworCSAgaWYgKG5ydWxlcyAhPSAwKQorCSAgICB7CisJICAgICAgaW50MzJfdCBlbGVtLCBpZHg7CisJICAgICAgZWxlbSA9IHNlZWtfY29sbGF0aW5nX3N5bWJvbF9lbnRyeSAoYnJfZWxlbS0+b3ByLm5hbWUsCisJCQkJCQkgIHN5bV9uYW1lX2xlbik7CisJICAgICAgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dICE9IDApCisJCXsKKwkJICAvKiBXZSBmb3VuZCB0aGUgZW50cnkuICAqLworCQkgIGlkeCA9IHN5bWJfdGFibGVbMiAqIGVsZW0gKyAxXTsKKwkJICAvKiBTa2lwIHRoZSBuYW1lIG9mIGNvbGxhdGluZyBlbGVtZW50IG5hbWUuICAqLworCQkgIGlkeCArPSAxICsgZXh0cmFbaWR4XTsKKwkJICAvKiBTa2lwIHRoZSBieXRlIHNlcXVlbmNlIG9mIHRoZSBjb2xsYXRpbmcgZWxlbWVudC4gICovCisJCSAgaWR4ICs9IDEgKyBleHRyYVtpZHhdOworCQkgIC8qIEFkanVzdCBmb3IgdGhlIGFsaWdubWVudC4gICovCisJCSAgaWR4ID0gKGlkeCArIDMpICYgfjM7CisJCSAgLyogU2tpcCB0aGUgbXVsdGlieXRlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZS4gICovCisJCSAgaWR4ICs9IHNpemVvZiAodW5zaWduZWQgaW50KTsKKwkJICAvKiBTa2lwIHRoZSB3aWRlIGNoYXIgc2VxdWVuY2Ugb2YgdGhlIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKwkJICBpZHggKz0gc2l6ZW9mICh1bnNpZ25lZCBpbnQpICoKKwkJICAgICgxICsgKih1bnNpZ25lZCBpbnQgKikgKGV4dHJhICsgaWR4KSk7CisJCSAgLyogUmV0dXJuIHRoZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUuICAqLworCQkgIHJldHVybiAqKHVuc2lnbmVkIGludCAqKSAoZXh0cmEgKyBpZHgpOworCQl9CisJICAgICAgZWxzZSBpZiAoc3ltYl90YWJsZVsyICogZWxlbV0gPT0gMCAmJiBzeW1fbmFtZV9sZW4gPT0gMSkKKwkJeworCQkgIC8qIE5vIHZhbGlkIGNoYXJhY3Rlci4gIE1hdGNoIGl0IGFzIGEgc2luZ2xlIGJ5dGUKKwkJICAgICBjaGFyYWN0ZXIuICAqLworCQkgIHJldHVybiBjb2xsc2VxbWJbYnJfZWxlbS0+b3ByLm5hbWVbMF1dOworCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKHN5bV9uYW1lX2xlbiA9PSAxKQorCSAgICByZXR1cm4gY29sbHNlcW1iW2JyX2VsZW0tPm9wci5uYW1lWzBdXTsKKwl9CisgICAgICByZXR1cm4gVUlOVF9NQVg7CisgICAgfQorCisgIC8qIExvY2FsIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cCB1c2VkIGluIF9MSUJDIGVudmlyb25tZW50LgorICAgICBCdWlsZCB0aGUgcmFuZ2UgZXhwcmVzc2lvbiB3aGljaCBzdGFydHMgZnJvbSBTVEFSVF9FTEVNLCBhbmQgZW5kcworICAgICBhdCBFTkRfRUxFTS4gIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8gTUJDU0VUIGFuZCBTQkNTRVQuCisgICAgIFJBTkdFX0FMTE9DIGlzIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBtYmNzZXQtPnJhbmdlX3N0YXJ0cywgYW5kCisgICAgIG1iY3NldC0+cmFuZ2VfZW5kcywgaXMgYSBwb2ludGVyIGFyZ3VtZW50IHNpbmNlIHdlIG1heQorICAgICB1cGRhdGUgaXQuICAqLworCisgIGF1dG8gaW5saW5lIHJlZ19lcnJjb2RlX3QKKyAgX19hdHRyaWJ1dGUgKChhbHdheXNfaW5saW5lKSkKKyAgYnVpbGRfcmFuZ2VfZXhwIChzYmNzZXQsIG1iY3NldCwgcmFuZ2VfYWxsb2MsIHN0YXJ0X2VsZW0sIGVuZF9lbGVtKQorCSByZV9jaGFyc2V0X3QgKm1iY3NldDsKKwkgaW50ICpyYW5nZV9hbGxvYzsKKwkgYml0c2V0X3Qgc2Jjc2V0OworCSBicmFja2V0X2VsZW1fdCAqc3RhcnRfZWxlbSwgKmVuZF9lbGVtOworICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBjaDsKKyAgICAgIHVpbnQzMl90IHN0YXJ0X2NvbGxzZXE7CisgICAgICB1aW50MzJfdCBlbmRfY29sbHNlcTsKKworICAgICAgLyogRXF1aXZhbGVuY2UgQ2xhc3NlcyBhbmQgQ2hhcmFjdGVyIENsYXNzZXMgY2FuJ3QgYmUgYSByYW5nZQorCSBzdGFydC9lbmQuICAqLworICAgICAgaWYgKEJFIChzdGFydF9lbGVtLT50eXBlID09IEVRVUlWX0NMQVNTIHx8IHN0YXJ0X2VsZW0tPnR5cGUgPT0gQ0hBUl9DTEFTUworCSAgICAgIHx8IGVuZF9lbGVtLT50eXBlID09IEVRVUlWX0NMQVNTIHx8IGVuZF9lbGVtLT50eXBlID09IENIQVJfQ0xBU1MsCisJICAgICAgMCkpCisJcmV0dXJuIFJFR19FUkFOR0U7CisKKyAgICAgIHN0YXJ0X2NvbGxzZXEgPSBsb29rdXBfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChzdGFydF9lbGVtKTsKKyAgICAgIGVuZF9jb2xsc2VxID0gbG9va3VwX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoZW5kX2VsZW0pOworICAgICAgLyogQ2hlY2sgc3RhcnQvZW5kIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZXMuICAqLworICAgICAgaWYgKEJFIChzdGFydF9jb2xsc2VxID09IFVJTlRfTUFYIHx8IGVuZF9jb2xsc2VxID09IFVJTlRfTUFYLCAwKSkKKwlyZXR1cm4gUkVHX0VDT0xMQVRFOworICAgICAgaWYgKEJFICgoc3ludGF4ICYgUkVfTk9fRU1QVFlfUkFOR0VTKSAmJiBzdGFydF9jb2xsc2VxID4gZW5kX2NvbGxzZXEsIDApKQorCXJldHVybiBSRUdfRVJBTkdFOworCisgICAgICAvKiBHb3QgdmFsaWQgY29sbGF0aW9uIHNlcXVlbmNlIHZhbHVlcywgYWRkIHRoZW0gYXMgYSBuZXcgZW50cnkuCisJIEhvd2V2ZXIsIGlmIHdlIGhhdmUgbm8gY29sbGF0aW9uIGVsZW1lbnRzLCBhbmQgdGhlIGNoYXJhY3RlciBzZXQKKwkgaXMgc2luZ2xlIGJ5dGUsIHRoZSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIgc2V0IHRoYXQgd2UKKwkgYnVpbGQgYmVsb3cgc3VmZmljZXMuICovCisgICAgICBpZiAobnJ1bGVzID4gMCB8fCBkZmEtPm1iX2N1cl9tYXggPiAxKQorCXsKKwkgIC8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAgKi8KKwkgIGlmIChCRSAoKnJhbmdlX2FsbG9jID09IG1iY3NldC0+bnJhbmdlcywgMCkpCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlLCBuZWVkIHJlYWxsb2MuICAqLworCSAgICAgIHVpbnQzMl90ICpuZXdfYXJyYXlfc3RhcnQ7CisJICAgICAgdWludDMyX3QgKm5ld19hcnJheV9lbmQ7CisJICAgICAgaW50IG5ld19ucmFuZ2VzOworCisJICAgICAgLyogKzEgaW4gY2FzZSBvZiBtYmNzZXQtPm5yYW5nZXMgaXMgMC4gICovCisJICAgICAgbmV3X25yYW5nZXMgPSAyICogbWJjc2V0LT5ucmFuZ2VzICsgMTsKKwkgICAgICBuZXdfYXJyYXlfc3RhcnQgPSByZV9yZWFsbG9jIChtYmNzZXQtPnJhbmdlX3N0YXJ0cywgdWludDMyX3QsCisJCQkJCSAgICBuZXdfbnJhbmdlcyk7CisJICAgICAgbmV3X2FycmF5X2VuZCA9IHJlX3JlYWxsb2MgKG1iY3NldC0+cmFuZ2VfZW5kcywgdWludDMyX3QsCisJCQkJCSAgbmV3X25yYW5nZXMpOworCisJICAgICAgaWYgKEJFIChuZXdfYXJyYXlfc3RhcnQgPT0gTlVMTCB8fCBuZXdfYXJyYXlfZW5kID09IE5VTEwsIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKworCSAgICAgIG1iY3NldC0+cmFuZ2Vfc3RhcnRzID0gbmV3X2FycmF5X3N0YXJ0OworCSAgICAgIG1iY3NldC0+cmFuZ2VfZW5kcyA9IG5ld19hcnJheV9lbmQ7CisJICAgICAgKnJhbmdlX2FsbG9jID0gbmV3X25yYW5nZXM7CisJICAgIH0KKworCSAgbWJjc2V0LT5yYW5nZV9zdGFydHNbbWJjc2V0LT5ucmFuZ2VzXSA9IHN0YXJ0X2NvbGxzZXE7CisJICBtYmNzZXQtPnJhbmdlX2VuZHNbbWJjc2V0LT5ucmFuZ2VzKytdID0gZW5kX2NvbGxzZXE7CisJfQorCisgICAgICAvKiBCdWlsZCB0aGUgdGFibGUgZm9yIHNpbmdsZSBieXRlIGNoYXJhY3RlcnMuICAqLworICAgICAgZm9yIChjaCA9IDA7IGNoIDwgU0JDX01BWDsgY2grKykKKwl7CisJICB1aW50MzJfdCBjaF9jb2xsc2VxOworCSAgLyoKKwkgIGlmIChNQl9DVVJfTUFYID09IDEpCisJICAqLworCSAgaWYgKG5ydWxlcyA9PSAwKQorCSAgICBjaF9jb2xsc2VxID0gY29sbHNlcW1iW2NoXTsKKwkgIGVsc2UKKwkgICAgY2hfY29sbHNlcSA9IF9fY29sbHNlcV90YWJsZV9sb29rdXAgKGNvbGxzZXF3YywgX19idG93YyAoY2gpKTsKKwkgIGlmIChzdGFydF9jb2xsc2VxIDw9IGNoX2NvbGxzZXEgJiYgY2hfY29sbHNlcSA8PSBlbmRfY29sbHNlcSkKKwkgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBjaCk7CisJfQorICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKworICAvKiBMb2NhbCBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAgdXNlZCBpbiBfTElCQyBlbnZpcm9ubWVudC4KKyAgICAgQnVpbGQgdGhlIGNvbGxhdGluZyBlbGVtZW50IHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IE5BTUUuCisgICAgIFRoZSByZXN1bHQgYXJlIHdyaXR0ZW4gdG8gTUJDU0VUIGFuZCBTQkNTRVQuCisgICAgIENPTExfU1lNX0FMTE9DIGlzIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBtYmNzZXQtPmNvbGxfc3ltLCBpcyBhCisgICAgIHBvaW50ZXIgYXJndW1lbnQgc2luY2Ugd2UgbWF5IHVwZGF0ZSBpdC4gICovCisKKyAgYXV0byBpbmxpbmUgcmVnX2VycmNvZGVfdAorICBfX2F0dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKQorICBidWlsZF9jb2xsYXRpbmdfc3ltYm9sIChzYmNzZXQsIG1iY3NldCwgY29sbF9zeW1fYWxsb2MsIG5hbWUpCisJIHJlX2NoYXJzZXRfdCAqbWJjc2V0OworCSBpbnQgKmNvbGxfc3ltX2FsbG9jOworCSBiaXRzZXRfdCBzYmNzZXQ7CisJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWU7CisgICAgeworICAgICAgaW50MzJfdCBlbGVtLCBpZHg7CisgICAgICBzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4gKChjb25zdCBjaGFyICopIG5hbWUpOworICAgICAgaWYgKG5ydWxlcyAhPSAwKQorCXsKKwkgIGVsZW0gPSBzZWVrX2NvbGxhdGluZ19zeW1ib2xfZW50cnkgKG5hbWUsIG5hbWVfbGVuKTsKKwkgIGlmIChzeW1iX3RhYmxlWzIgKiBlbGVtXSAhPSAwKQorCSAgICB7CisJICAgICAgLyogV2UgZm91bmQgdGhlIGVudHJ5LiAgKi8KKwkgICAgICBpZHggPSBzeW1iX3RhYmxlWzIgKiBlbGVtICsgMV07CisJICAgICAgLyogU2tpcCB0aGUgbmFtZSBvZiBjb2xsYXRpbmcgZWxlbWVudCBuYW1lLiAgKi8KKwkgICAgICBpZHggKz0gMSArIGV4dHJhW2lkeF07CisJICAgIH0KKwkgIGVsc2UgaWYgKHN5bWJfdGFibGVbMiAqIGVsZW1dID09IDAgJiYgbmFtZV9sZW4gPT0gMSkKKwkgICAgeworCSAgICAgIC8qIE5vIHZhbGlkIGNoYXJhY3RlciwgdHJlYXQgaXQgYXMgYSBub3JtYWwKKwkJIGNoYXJhY3Rlci4gICovCisJICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBuYW1lWzBdKTsKKwkgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgcmV0dXJuIFJFR19FQ09MTEFURTsKKworCSAgLyogR290IHZhbGlkIGNvbGxhdGlvbiBzZXF1ZW5jZSwgYWRkIGl0IGFzIGEgbmV3IGVudHJ5LiAgKi8KKwkgIC8qIENoZWNrIHRoZSBzcGFjZSBvZiB0aGUgYXJyYXlzLiAgKi8KKwkgIGlmIChCRSAoKmNvbGxfc3ltX2FsbG9jID09IG1iY3NldC0+bmNvbGxfc3ltcywgMCkpCisJICAgIHsKKwkgICAgICAvKiBOb3QgZW5vdWdoLCByZWFsbG9jIGl0LiAgKi8KKwkgICAgICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bmNvbGxfc3ltcyBpcyAwLiAgKi8KKwkgICAgICBpbnQgbmV3X2NvbGxfc3ltX2FsbG9jID0gMiAqIG1iY3NldC0+bmNvbGxfc3ltcyArIDE7CisJICAgICAgLyogVXNlIHJlYWxsb2Mgc2luY2UgbWJjc2V0LT5jb2xsX3N5bXMgaXMgTlVMTAorCQkgaWYgKmFsbG9jID09IDAuICAqLworCSAgICAgIGludDMyX3QgKm5ld19jb2xsX3N5bXMgPSByZV9yZWFsbG9jIChtYmNzZXQtPmNvbGxfc3ltcywgaW50MzJfdCwKKwkJCQkJCSAgIG5ld19jb2xsX3N5bV9hbGxvYyk7CisJICAgICAgaWYgKEJFIChuZXdfY29sbF9zeW1zID09IE5VTEwsIDApKQorCQlyZXR1cm4gUkVHX0VTUEFDRTsKKwkgICAgICBtYmNzZXQtPmNvbGxfc3ltcyA9IG5ld19jb2xsX3N5bXM7CisJICAgICAgKmNvbGxfc3ltX2FsbG9jID0gbmV3X2NvbGxfc3ltX2FsbG9jOworCSAgICB9CisJICBtYmNzZXQtPmNvbGxfc3ltc1ttYmNzZXQtPm5jb2xsX3N5bXMrK10gPSBpZHg7CisJICByZXR1cm4gUkVHX05PRVJST1I7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChCRSAobmFtZV9sZW4gIT0gMSwgMCkpCisJICAgIHJldHVybiBSRUdfRUNPTExBVEU7CisJICBlbHNlCisJICAgIHsKKwkgICAgICBiaXRzZXRfc2V0IChzYmNzZXQsIG5hbWVbMF0pOworCSAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKwkgICAgfQorCX0KKyAgICB9CisjZW5kaWYKKworICByZV90b2tlbl90IGJyX3Rva2VuOworICByZV9iaXRzZXRfcHRyX3Qgc2Jjc2V0OworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHJlX2NoYXJzZXRfdCAqbWJjc2V0OworICBpbnQgY29sbF9zeW1fYWxsb2MgPSAwLCByYW5nZV9hbGxvYyA9IDAsIG1iY2hhcl9hbGxvYyA9IDA7CisgIGludCBlcXVpdl9jbGFzc19hbGxvYyA9IDAsIGNoYXJfY2xhc3NfYWxsb2MgPSAwOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICBpbnQgbm9uX21hdGNoID0gMDsKKyAgYmluX3RyZWVfdCAqd29ya190cmVlOworICBpbnQgdG9rZW5fbGVuOworICBpbnQgZmlyc3Rfcm91bmQgPSAxOworI2lmZGVmIF9MSUJDCisgIGNvbGxzZXFtYiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CisgIG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgIGlmIChucnVsZXMpCisgICAgeworICAgICAgLyoKKyAgICAgIGlmIChNQl9DVVJfTUFYID4gMSkKKyAgICAgICovCisgICAgICBjb2xsc2Vxd2MgPSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfQ09MTFNFUVdDKTsKKyAgICAgIHRhYmxlX3NpemUgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CKTsKKyAgICAgIHN5bWJfdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwKKwkJCQkJCSAgX05MX0NPTExBVEVfU1lNQl9UQUJMRU1CKTsKKyAgICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCQkgICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIpOworICAgIH0KKyNlbmRpZgorICBzYmNzZXQgPSAocmVfYml0c2V0X3B0cl90KSBjYWxsb2MgKHNpemVvZiAoYml0c2V0X3QpLCAxKTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBtYmNzZXQgPSAocmVfY2hhcnNldF90ICopIGNhbGxvYyAoc2l6ZW9mIChyZV9jaGFyc2V0X3QpLCAxKTsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChCRSAoc2Jjc2V0ID09IE5VTEwgfHwgbWJjc2V0ID09IE5VTEwsIDApKQorI2Vsc2UKKyAgaWYgKEJFIChzYmNzZXQgPT0gTlVMTCwgMCkpCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICB7CisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICB0b2tlbl9sZW4gPSBwZWVrX3Rva2VuX2JyYWNrZXQgKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0gRU5EX09GX1JFLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gUkVHX0JBRFBBVDsKKyAgICAgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisgICAgfQorICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfTk9OX01BVENIX0xJU1QpCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBtYmNzZXQtPm5vbl9tYXRjaCA9IDE7CisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgICAgICBub25fbWF0Y2ggPSAxOworICAgICAgaWYgKHN5bnRheCAmIFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSkKKwliaXRzZXRfc2V0IChzYmNzZXQsICdcbicpOworICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tpcCBhIHRva2VuLiAgKi8KKyAgICAgIHRva2VuX2xlbiA9IHBlZWtfdG9rZW5fYnJhY2tldCAodG9rZW4sIHJlZ2V4cCwgc3ludGF4KTsKKyAgICAgIGlmIChCRSAodG9rZW4tPnR5cGUgPT0gRU5EX09GX1JFLCAwKSkKKwl7CisJICAqZXJyID0gUkVHX0JBRFBBVDsKKwkgIGdvdG8gcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm47CisJfQorICAgIH0KKworICAvKiBXZSB0cmVhdCB0aGUgZmlyc3QgJ10nIGFzIGEgbm9ybWFsIGNoYXJhY3Rlci4gICovCisgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9DTE9TRV9CUkFDS0VUKQorICAgIHRva2VuLT50eXBlID0gQ0hBUkFDVEVSOworCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGJyYWNrZXRfZWxlbV90IHN0YXJ0X2VsZW0sIGVuZF9lbGVtOworICAgICAgdW5zaWduZWQgY2hhciBzdGFydF9uYW1lX2J1ZltCUkFDS0VUX05BTUVfQlVGX1NJWkVdOworICAgICAgdW5zaWduZWQgY2hhciBlbmRfbmFtZV9idWZbQlJBQ0tFVF9OQU1FX0JVRl9TSVpFXTsKKyAgICAgIHJlZ19lcnJjb2RlX3QgcmV0OworICAgICAgaW50IHRva2VuX2xlbjIgPSAwLCBpc19yYW5nZV9leHAgPSAwOworICAgICAgcmVfdG9rZW5fdCB0b2tlbjI7CisKKyAgICAgIHN0YXJ0X2VsZW0ub3ByLm5hbWUgPSBzdGFydF9uYW1lX2J1ZjsKKyAgICAgIHJldCA9IHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoJnN0YXJ0X2VsZW0sIHJlZ2V4cCwgdG9rZW4sIHRva2VuX2xlbiwgZGZhLAorCQkJCSAgIHN5bnRheCwgZmlyc3Rfcm91bmQpOworICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCXsKKwkgICplcnIgPSByZXQ7CisJICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCX0KKyAgICAgIGZpcnN0X3JvdW5kID0gMDsKKworICAgICAgLyogR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBuZXh0IHRva2VuLiAgV2UgbmVlZCBpdCBpbiBhbnkgY2FzZS4gICovCisgICAgICB0b2tlbl9sZW4gPSBwZWVrX3Rva2VuX2JyYWNrZXQgKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyAgICAgIC8qIERvIG5vdCBjaGVjayBmb3IgcmFuZ2VzIGlmIHdlIGtub3cgdGhleSBhcmUgbm90IGFsbG93ZWQuICAqLworICAgICAgaWYgKHN0YXJ0X2VsZW0udHlwZSAhPSBDSEFSX0NMQVNTICYmIHN0YXJ0X2VsZW0udHlwZSAhPSBFUVVJVl9DTEFTUykKKwl7CisJICBpZiAoQkUgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSwgMCkpCisJICAgIHsKKwkgICAgICAqZXJyID0gUkVHX0VCUkFDSzsKKwkgICAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCSAgICB9CisJICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0hBUlNFVF9SQU5HRSkKKwkgICAgeworCSAgICAgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIHRva2VuX2xlbik7IC8qIFNraXAgJy0nLiAgKi8KKwkgICAgICB0b2tlbl9sZW4yID0gcGVla190b2tlbl9icmFja2V0ICgmdG9rZW4yLCByZWdleHAsIHN5bnRheCk7CisJICAgICAgaWYgKEJFICh0b2tlbjIudHlwZSA9PSBFTkRfT0ZfUkUsIDApKQorCQl7CisJCSAgKmVyciA9IFJFR19FQlJBQ0s7CisJCSAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkJfQorCSAgICAgIGlmICh0b2tlbjIudHlwZSA9PSBPUF9DTE9TRV9CUkFDS0VUKQorCQl7CisJCSAgLyogV2UgdHJlYXQgdGhlIGxhc3QgJy0nIGFzIGEgbm9ybWFsIGNoYXJhY3Rlci4gICovCisJCSAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgLXRva2VuX2xlbik7CisJCSAgdG9rZW4tPnR5cGUgPSBDSEFSQUNURVI7CisJCX0KKwkgICAgICBlbHNlCisJCWlzX3JhbmdlX2V4cCA9IDE7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChpc19yYW5nZV9leHAgPT0gMSkKKwl7CisJICBlbmRfZWxlbS5vcHIubmFtZSA9IGVuZF9uYW1lX2J1ZjsKKwkgIHJldCA9IHBhcnNlX2JyYWNrZXRfZWxlbWVudCAoJmVuZF9lbGVtLCByZWdleHAsICZ0b2tlbjIsIHRva2VuX2xlbjIsCisJCQkJICAgICAgIGRmYSwgc3ludGF4LCAxKTsKKwkgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgICplcnIgPSByZXQ7CisJICAgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkgICAgfQorCisJICB0b2tlbl9sZW4gPSBwZWVrX3Rva2VuX2JyYWNrZXQgKHRva2VuLCByZWdleHAsIHN5bnRheCk7CisKKyNpZmRlZiBfTElCQworCSAgKmVyciA9IGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LCBtYmNzZXQsICZyYW5nZV9hbGxvYywKKwkJCQkgICZzdGFydF9lbGVtLCAmZW5kX2VsZW0pOworI2Vsc2UKKyMgaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICplcnIgPSBidWlsZF9yYW5nZV9leHAgKHNiY3NldCwKKwkJCQkgIGRmYS0+bWJfY3VyX21heCA+IDEgPyBtYmNzZXQgOiBOVUxMLAorCQkJCSAgJnJhbmdlX2FsbG9jLCAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKKyMgZWxzZQorCSAgKmVyciA9IGJ1aWxkX3JhbmdlX2V4cCAoc2Jjc2V0LCAmc3RhcnRfZWxlbSwgJmVuZF9lbGVtKTsKKyMgZW5kaWYKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCSAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwl9CisgICAgICBlbHNlCisJeworCSAgc3dpdGNoIChzdGFydF9lbGVtLnR5cGUpCisJICAgIHsKKwkgICAgY2FzZSBTQl9DSEFSOgorCSAgICAgIGJpdHNldF9zZXQgKHNiY3NldCwgc3RhcnRfZWxlbS5vcHIuY2gpOworCSAgICAgIGJyZWFrOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgIGNhc2UgTUJfQ0hBUjoKKwkgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgKi8KKwkgICAgICBpZiAoQkUgKG1iY2hhcl9hbGxvYyA9PSBtYmNzZXQtPm5tYmNoYXJzLCAwKSkKKwkJeworCQkgIHdjaGFyX3QgKm5ld19tYmNoYXJzOworCQkgIC8qIE5vdCBlbm91Z2gsIHJlYWxsb2MgaXQuICAqLworCQkgIC8qICsxIGluIGNhc2Ugb2YgbWJjc2V0LT5ubWJjaGFycyBpcyAwLiAgKi8KKwkJICBtYmNoYXJfYWxsb2MgPSAyICogbWJjc2V0LT5ubWJjaGFycyArIDE7CisJCSAgLyogVXNlIHJlYWxsb2Mgc2luY2UgYXJyYXkgaXMgTlVMTCBpZiAqYWxsb2MgPT0gMC4gICovCisJCSAgbmV3X21iY2hhcnMgPSByZV9yZWFsbG9jIChtYmNzZXQtPm1iY2hhcnMsIHdjaGFyX3QsCisJCQkJCSAgICBtYmNoYXJfYWxsb2MpOworCQkgIGlmIChCRSAobmV3X21iY2hhcnMgPT0gTlVMTCwgMCkpCisJCSAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsKKwkJICBtYmNzZXQtPm1iY2hhcnMgPSBuZXdfbWJjaGFyczsKKwkJfQorCSAgICAgIG1iY3NldC0+bWJjaGFyc1ttYmNzZXQtPm5tYmNoYXJzKytdID0gc3RhcnRfZWxlbS5vcHIud2NoOworCSAgICAgIGJyZWFrOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisJICAgIGNhc2UgRVFVSVZfQ0xBU1M6CisJICAgICAgKmVyciA9IGJ1aWxkX2VxdWl2X2NsYXNzIChzYmNzZXQsCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkJCQkJbWJjc2V0LCAmZXF1aXZfY2xhc3NfYWxsb2MsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkJCQkJc3RhcnRfZWxlbS5vcHIubmFtZSk7CisJICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkgICAgICBicmVhazsKKwkgICAgY2FzZSBDT0xMX1NZTToKKwkgICAgICAqZXJyID0gYnVpbGRfY29sbGF0aW5nX3N5bWJvbCAoc2Jjc2V0LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJCQkJCSAgICAgbWJjc2V0LCAmY29sbF9zeW1fYWxsb2MsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkJCQkJICAgICBzdGFydF9lbGVtLm9wci5uYW1lKTsKKwkgICAgICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2ZyZWVfcmV0dXJuOworCSAgICAgIGJyZWFrOworCSAgICBjYXNlIENIQVJfQ0xBU1M6CisJICAgICAgKmVyciA9IGJ1aWxkX2NoYXJjbGFzcyAocmVnZXhwLT50cmFucywgc2Jjc2V0LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJCQkJICAgICAgbWJjc2V0LCAmY2hhcl9jbGFzc19hbGxvYywKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCQkJCSAgICAgIChjb25zdCBjaGFyICopIHN0YXJ0X2VsZW0ub3ByLm5hbWUsIHN5bnRheCk7CisJICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgICAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwkgICAgICBicmVhazsKKwkgICAgZGVmYXVsdDoKKwkgICAgICBhc3NlcnQgKDApOworCSAgICAgIGJyZWFrOworCSAgICB9CisJfQorICAgICAgaWYgKEJFICh0b2tlbi0+dHlwZSA9PSBFTkRfT0ZfUkUsIDApKQorCXsKKwkgICplcnIgPSBSRUdfRUJSQUNLOworCSAgZ290byBwYXJzZV9icmFja2V0X2V4cF9mcmVlX3JldHVybjsKKwl9CisgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gT1BfQ0xPU0VfQlJBQ0tFVCkKKwlicmVhazsKKyAgICB9CisKKyAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tpcCBhIHRva2VuLiAgKi8KKworICAvKiBJZiBpdCBpcyBub24tbWF0Y2hpbmcgbGlzdC4gICovCisgIGlmIChub25fbWF0Y2gpCisgICAgYml0c2V0X25vdCAoc2Jjc2V0KTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIC8qIEVuc3VyZSBvbmx5IHNpbmdsZSBieXRlIGNoYXJhY3RlcnMgYXJlIHNldC4gICovCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorICAgIGJpdHNldF9tYXNrIChzYmNzZXQsIGRmYS0+c2JfY2hhcik7CisKKyAgaWYgKG1iY3NldC0+bm1iY2hhcnMgfHwgbWJjc2V0LT5uY29sbF9zeW1zIHx8IG1iY3NldC0+bmVxdWl2X2NsYXNzZXMKKyAgICAgIHx8IG1iY3NldC0+bnJhbmdlcyB8fCAoZGZhLT5tYl9jdXJfbWF4ID4gMSAmJiAobWJjc2V0LT5uY2hhcl9jbGFzc2VzCisJCQkJCQkgICAgIHx8IG1iY3NldC0+bm9uX21hdGNoKSkpCisgICAgeworICAgICAgYmluX3RyZWVfdCAqbWJjX3RyZWU7CisgICAgICBpbnQgc2JjX2lkeDsKKyAgICAgIC8qIEJ1aWxkIGEgdHJlZSBmb3IgY29tcGxleCBicmFja2V0LiAgKi8KKyAgICAgIGRmYS0+aGFzX21iX25vZGUgPSAxOworICAgICAgYnJfdG9rZW4udHlwZSA9IENPTVBMRVhfQlJBQ0tFVDsKKyAgICAgIGJyX3Rva2VuLm9wci5tYmNzZXQgPSBtYmNzZXQ7CisgICAgICBtYmNfdHJlZSA9IGNyZWF0ZV90b2tlbl90cmVlIChkZmEsIE5VTEwsIE5VTEwsICZicl90b2tlbik7CisgICAgICBpZiAoQkUgKG1iY190cmVlID09IE5VTEwsIDApKQorCWdvdG8gcGFyc2VfYnJhY2tldF9leHBfZXNwYWNlOworICAgICAgZm9yIChzYmNfaWR4ID0gMDsgc2JjX2lkeCA8IEJJVFNFVF9XT1JEUzsgKytzYmNfaWR4KQorCWlmIChzYmNzZXRbc2JjX2lkeF0pCisJICBicmVhazsKKyAgICAgIC8qIElmIHRoZXJlIGFyZSBubyBiaXRzIHNldCBpbiBzYmNzZXQsIHRoZXJlIGlzIG5vIHBvaW50CisJIG9mIGhhdmluZyBib3RoIFNJTVBMRV9CUkFDS0VUIGFuZCBDT01QTEVYX0JSQUNLRVQuICAqLworICAgICAgaWYgKHNiY19pZHggPCBCSVRTRVRfV09SRFMpCisJeworCSAgLyogQnVpbGQgYSB0cmVlIGZvciBzaW1wbGUgYnJhY2tldC4gICovCisJICBicl90b2tlbi50eXBlID0gU0lNUExFX0JSQUNLRVQ7CisJICBicl90b2tlbi5vcHIuc2Jjc2V0ID0gc2Jjc2V0OworCSAgd29ya190cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgJmJyX3Rva2VuKTsKKwkgIGlmIChCRSAod29ya190cmVlID09IE5VTEwsIDApKQorCSAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsKKworCSAgLyogVGhlbiBqb2luIHRoZW0gYnkgQUxUIG5vZGUuICAqLworCSAgd29ya190cmVlID0gY3JlYXRlX3RyZWUgKGRmYSwgd29ya190cmVlLCBtYmNfdHJlZSwgT1BfQUxUKTsKKwkgIGlmIChCRSAod29ya190cmVlID09IE5VTEwsIDApKQorCSAgICBnb3RvIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZTsKKwl9CisgICAgICBlbHNlCisJeworCSAgcmVfZnJlZSAoc2Jjc2V0KTsKKwkgIHdvcmtfdHJlZSA9IG1iY190cmVlOworCX0KKyAgICB9CisgIGVsc2UKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgICB7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGZyZWVfY2hhcnNldCAobWJjc2V0KTsKKyNlbmRpZgorICAgICAgLyogQnVpbGQgYSB0cmVlIGZvciBzaW1wbGUgYnJhY2tldC4gICovCisgICAgICBicl90b2tlbi50eXBlID0gU0lNUExFX0JSQUNLRVQ7CisgICAgICBicl90b2tlbi5vcHIuc2Jjc2V0ID0gc2Jjc2V0OworICAgICAgd29ya190cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgJmJyX3Rva2VuKTsKKyAgICAgIGlmIChCRSAod29ya190cmVlID09IE5VTEwsIDApKQorCWdvdG8gcGFyc2VfYnJhY2tldF9leHBfZXNwYWNlOworICAgIH0KKyAgcmV0dXJuIHdvcmtfdHJlZTsKKworIHBhcnNlX2JyYWNrZXRfZXhwX2VzcGFjZToKKyAgKmVyciA9IFJFR19FU1BBQ0U7CisgcGFyc2VfYnJhY2tldF9leHBfZnJlZV9yZXR1cm46CisgIHJlX2ZyZWUgKHNiY3NldCk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgIHJldHVybiBOVUxMOworfQorCisvKiBQYXJzZSBhbiBlbGVtZW50IGluIHRoZSBicmFja2V0IGV4cHJlc3Npb24uICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcGFyc2VfYnJhY2tldF9lbGVtZW50IChicmFja2V0X2VsZW1fdCAqZWxlbSwgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKwkJICAgICAgIHJlX3Rva2VuX3QgKnRva2VuLCBpbnQgdG9rZW5fbGVuLCByZV9kZmFfdCAqZGZhLAorCQkgICAgICAgcmVnX3N5bnRheF90IHN5bnRheCwgaW50IGFjY2VwdF9oeXBoZW4pCit7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaW50IGN1cl9jaGFyX3NpemU7CisgIGN1cl9jaGFyX3NpemUgPSByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChyZWdleHAsIHJlX3N0cmluZ19jdXJfaWR4IChyZWdleHApKTsKKyAgaWYgKGN1cl9jaGFyX3NpemUgPiAxKQorICAgIHsKKyAgICAgIGVsZW0tPnR5cGUgPSBNQl9DSEFSOworICAgICAgZWxlbS0+b3ByLndjaCA9IHJlX3N0cmluZ193Y2hhcl9hdCAocmVnZXhwLCByZV9zdHJpbmdfY3VyX2lkeCAocmVnZXhwKSk7CisgICAgICByZV9zdHJpbmdfc2tpcF9ieXRlcyAocmVnZXhwLCBjdXJfY2hhcl9zaXplKTsKKyAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHJlZ2V4cCwgdG9rZW5fbGVuKTsgLyogU2tpcCBhIHRva2VuLiAgKi8KKyAgaWYgKHRva2VuLT50eXBlID09IE9QX09QRU5fQ09MTF9FTEVNIHx8IHRva2VuLT50eXBlID09IE9QX09QRU5fQ0hBUl9DTEFTUworICAgICAgfHwgdG9rZW4tPnR5cGUgPT0gT1BfT1BFTl9FUVVJVl9DTEFTUykKKyAgICByZXR1cm4gcGFyc2VfYnJhY2tldF9zeW1ib2wgKGVsZW0sIHJlZ2V4cCwgdG9rZW4pOworICBpZiAoQkUgKHRva2VuLT50eXBlID09IE9QX0NIQVJTRVRfUkFOR0UsIDApICYmICFhY2NlcHRfaHlwaGVuKQorICAgIHsKKyAgICAgIC8qIEEgJy0nIG11c3Qgb25seSBhcHBlYXIgYXMgYW55dGhpbmcgYnV0IGEgcmFuZ2UgaW5kaWNhdG9yIGJlZm9yZQorCSB0aGUgY2xvc2luZyBicmFja2V0LiAgRXZlcnl0aGluZyBlbHNlIGlzIGFuIGVycm9yLiAgKi8KKyAgICAgIHJlX3Rva2VuX3QgdG9rZW4yOworICAgICAgKHZvaWQpIHBlZWtfdG9rZW5fYnJhY2tldCAoJnRva2VuMiwgcmVnZXhwLCBzeW50YXgpOworICAgICAgaWYgKHRva2VuMi50eXBlICE9IE9QX0NMT1NFX0JSQUNLRVQpCisJLyogVGhlIGFjdHVhbCBlcnJvciB2YWx1ZSBpcyBub3Qgc3RhbmRhcmRpemVkIHNpbmNlIHRoaXMgd2hvbGUKKwkgICBjYXNlIGlzIHVuZGVmaW5lZC4gIEJ1dCBFUkFOR0UgbWFrZXMgZ29vZCBzZW5zZS4gICovCisJcmV0dXJuIFJFR19FUkFOR0U7CisgICAgfQorICBlbGVtLT50eXBlID0gU0JfQ0hBUjsKKyAgZWxlbS0+b3ByLmNoID0gdG9rZW4tPm9wci5jOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFBhcnNlIGEgYnJhY2tldCBzeW1ib2wgaW4gdGhlIGJyYWNrZXQgZXhwcmVzc2lvbi4gIEJyYWNrZXQgc3ltYm9scyBhcmUKKyAgIHN1Y2ggYXMgWzo8Y2hhcmFjdGVyX2NsYXNzPjpdLCBbLjxjb2xsYXRpbmdfZWxlbWVudD4uXSwgYW5kCisgICBbPTxlcXVpdmFsZW50X2NsYXNzPj1dLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3BhcnNlX2JyYWNrZXRfc3ltYm9sIChicmFja2V0X2VsZW1fdCAqZWxlbSwgcmVfc3RyaW5nX3QgKnJlZ2V4cCwKKwkJICAgICAgcmVfdG9rZW5fdCAqdG9rZW4pCit7CisgIHVuc2lnbmVkIGNoYXIgY2gsIGRlbGltID0gdG9rZW4tPm9wci5jOworICBpbnQgaSA9IDA7CisgIGlmIChyZV9zdHJpbmdfZW9pKHJlZ2V4cCkpCisgICAgcmV0dXJuIFJFR19FQlJBQ0s7CisgIGZvciAoOzsgKytpKQorICAgIHsKKyAgICAgIGlmIChpID49IEJSQUNLRVRfTkFNRV9CVUZfU0laRSkKKwlyZXR1cm4gUkVHX0VCUkFDSzsKKyAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSBPUF9PUEVOX0NIQVJfQ0xBU1MpCisJY2ggPSByZV9zdHJpbmdfZmV0Y2hfYnl0ZV9jYXNlIChyZWdleHApOworICAgICAgZWxzZQorCWNoID0gcmVfc3RyaW5nX2ZldGNoX2J5dGUgKHJlZ2V4cCk7CisgICAgICBpZiAocmVfc3RyaW5nX2VvaShyZWdleHApKQorCXJldHVybiBSRUdfRUJSQUNLOworICAgICAgaWYgKGNoID09IGRlbGltICYmIHJlX3N0cmluZ19wZWVrX2J5dGUgKHJlZ2V4cCwgMCkgPT0gJ10nKQorCWJyZWFrOworICAgICAgZWxlbS0+b3ByLm5hbWVbaV0gPSBjaDsKKyAgICB9CisgIHJlX3N0cmluZ19za2lwX2J5dGVzIChyZWdleHAsIDEpOworICBlbGVtLT5vcHIubmFtZVtpXSA9ICdcMCc7CisgIHN3aXRjaCAodG9rZW4tPnR5cGUpCisgICAgeworICAgIGNhc2UgT1BfT1BFTl9DT0xMX0VMRU06CisgICAgICBlbGVtLT50eXBlID0gQ09MTF9TWU07CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX09QRU5fRVFVSVZfQ0xBU1M6CisgICAgICBlbGVtLT50eXBlID0gRVFVSVZfQ0xBU1M7CisgICAgICBicmVhazsKKyAgICBjYXNlIE9QX09QRU5fQ0hBUl9DTEFTUzoKKyAgICAgIGVsZW0tPnR5cGUgPSBDSEFSX0NMQVNTOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisgIC8qIEhlbHBlciBmdW5jdGlvbiBmb3IgcGFyc2VfYnJhY2tldF9leHAuCisgICAgIEJ1aWxkIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyB3aGljaCBpcyByZXByZXNlbnRlZCBieSBOQU1FLgorICAgICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBFUVVJVl9DTEFTU19BTExPQyBpcyB0aGUgYWxsb2NhdGVkIHNpemUgb2YgbWJjc2V0LT5lcXVpdl9jbGFzc2VzLAorICAgICBpcyBhIHBvaW50ZXIgYXJndW1lbnQgc2luY2Ugd2UgbWF5IHVwZGF0ZSBpdC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK2J1aWxkX2VxdWl2X2NsYXNzIChiaXRzZXRfdCBzYmNzZXQsIHJlX2NoYXJzZXRfdCAqbWJjc2V0LAorCQkgICBpbnQgKmVxdWl2X2NsYXNzX2FsbG9jLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorI2Vsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCitidWlsZF9lcXVpdl9jbGFzcyAoYml0c2V0X3Qgc2Jjc2V0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lKQorI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworeworI2lmZGVmIF9MSUJDCisgIHVpbnQzMl90IG5ydWxlcyA9IF9OTF9DVVJSRU5UX1dPUkQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX05SVUxFUyk7CisgIGlmIChucnVsZXMgIT0gMCkKKyAgICB7CisgICAgICBjb25zdCBpbnQzMl90ICp0YWJsZSwgKmluZGlyZWN0OworICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0cywgKmV4dHJhLCAqY3A7CisgICAgICB1bnNpZ25lZCBjaGFyIGNoYXJfYnVmWzJdOworICAgICAgaW50MzJfdCBpZHgxLCBpZHgyOworICAgICAgdW5zaWduZWQgaW50IGNoOworICAgICAgc2l6ZV90IGxlbjsKKyAgICAgIC8qIFRoaXMgI2luY2x1ZGUgZGVmaW5lcyBhIGxvY2FsIGZ1bmN0aW9uISAgKi8KKyMgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorICAgICAgLyogQ2FsY3VsYXRlIHRoZSBpbmRleCBmb3IgZXF1aXZhbGVuY2UgY2xhc3MuICAqLworICAgICAgY3AgPSBuYW1lOworICAgICAgdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKSBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisgICAgICB3ZWlnaHRzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsCisJCQkJCSAgICAgICBfTkxfQ09MTEFURV9XRUlHSFRNQik7CisgICAgICBleHRyYSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJICAgX05MX0NPTExBVEVfRVhUUkFNQik7CisgICAgICBpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisgICAgICBpZHgxID0gZmluZGlkeCAoJmNwKTsKKyAgICAgIGlmIChCRSAoaWR4MSA9PSAwIHx8IGNwIDwgbmFtZSArIHN0cmxlbiAoKGNvbnN0IGNoYXIgKikgbmFtZSksIDApKQorCS8qIFRoaXMgaXNuJ3QgYSB2YWxpZCBjaGFyYWN0ZXIuICAqLworCXJldHVybiBSRUdfRUNPTExBVEU7CisKKyAgICAgIC8qIEJ1aWxkIHNpbmdsZSBieXRlIG1hdGNpbmcgdGFibGUgZm9yIHRoaXMgZXF1aXZhbGVuY2UgY2xhc3MuICAqLworICAgICAgY2hhcl9idWZbMV0gPSAodW5zaWduZWQgY2hhcikgJ1wwJzsKKyAgICAgIGxlbiA9IHdlaWdodHNbaWR4MSAmIDB4ZmZmZmZmXTsKKyAgICAgIGZvciAoY2ggPSAwOyBjaCA8IFNCQ19NQVg7ICsrY2gpCisJeworCSAgY2hhcl9idWZbMF0gPSBjaDsKKwkgIGNwID0gY2hhcl9idWY7CisJICBpZHgyID0gZmluZGlkeCAoJmNwKTsKKy8qCisJICBpZHgyID0gdGFibGVbY2hdOworKi8KKwkgIGlmIChpZHgyID09IDApCisJICAgIC8qIFRoaXMgaXNuJ3QgYSB2YWxpZCBjaGFyYWN0ZXIuICAqLworCSAgICBjb250aW51ZTsKKwkgIC8qIENvbXBhcmUgb25seSBpZiB0aGUgbGVuZ3RoIG1hdGNoZXMgYW5kIHRoZSBjb2xsYXRpb24gcnVsZQorCSAgICAgaW5kZXggaXMgdGhlIHNhbWUuICAqLworCSAgaWYgKGxlbiA9PSB3ZWlnaHRzW2lkeDIgJiAweGZmZmZmZl0gJiYgKGlkeDEgPj4gMjQpID09IChpZHgyID4+IDI0KSkKKwkgICAgeworCSAgICAgIGludCBjbnQgPSAwOworCisJICAgICAgd2hpbGUgKGNudCA8PSBsZW4gJiYKKwkJICAgICB3ZWlnaHRzWyhpZHgxICYgMHhmZmZmZmYpICsgMSArIGNudF0KKwkJICAgICA9PSB3ZWlnaHRzWyhpZHgyICYgMHhmZmZmZmYpICsgMSArIGNudF0pCisJCSsrY250OworCisJICAgICAgaWYgKGNudCA+IGxlbikKKwkJYml0c2V0X3NldCAoc2Jjc2V0LCBjaCk7CisJICAgIH0KKwl9CisgICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBhcnJheSBoYXMgZW5vdWdoIHNwYWNlLiAgKi8KKyAgICAgIGlmIChCRSAoKmVxdWl2X2NsYXNzX2FsbG9jID09IG1iY3NldC0+bmVxdWl2X2NsYXNzZXMsIDApKQorCXsKKwkgIC8qIE5vdCBlbm91Z2gsIHJlYWxsb2MgaXQuICAqLworCSAgLyogKzEgaW4gY2FzZSBvZiBtYmNzZXQtPm5lcXVpdl9jbGFzc2VzIGlzIDAuICAqLworCSAgaW50IG5ld19lcXVpdl9jbGFzc19hbGxvYyA9IDIgKiBtYmNzZXQtPm5lcXVpdl9jbGFzc2VzICsgMTsKKwkgIC8qIFVzZSByZWFsbG9jIHNpbmNlIHRoZSBhcnJheSBpcyBOVUxMIGlmICphbGxvYyA9PSAwLiAgKi8KKwkgIGludDMyX3QgKm5ld19lcXVpdl9jbGFzc2VzID0gcmVfcmVhbGxvYyAobWJjc2V0LT5lcXVpdl9jbGFzc2VzLAorCQkJCQkJICAgaW50MzJfdCwKKwkJCQkJCSAgIG5ld19lcXVpdl9jbGFzc19hbGxvYyk7CisJICBpZiAoQkUgKG5ld19lcXVpdl9jbGFzc2VzID09IE5VTEwsIDApKQorCSAgICByZXR1cm4gUkVHX0VTUEFDRTsKKwkgIG1iY3NldC0+ZXF1aXZfY2xhc3NlcyA9IG5ld19lcXVpdl9jbGFzc2VzOworCSAgKmVxdWl2X2NsYXNzX2FsbG9jID0gbmV3X2VxdWl2X2NsYXNzX2FsbG9jOworCX0KKyAgICAgIG1iY3NldC0+ZXF1aXZfY2xhc3Nlc1ttYmNzZXQtPm5lcXVpdl9jbGFzc2VzKytdID0gaWR4MTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZiAvKiBfTElCQyAqLworICAgIHsKKyAgICAgIGlmIChCRSAoc3RybGVuICgoY29uc3QgY2hhciAqKSBuYW1lKSAhPSAxLCAwKSkKKwlyZXR1cm4gUkVHX0VDT0xMQVRFOworICAgICAgYml0c2V0X3NldCAoc2Jjc2V0LCAqbmFtZSk7CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKyAgLyogSGVscGVyIGZ1bmN0aW9uIGZvciBwYXJzZV9icmFja2V0X2V4cC4KKyAgICAgQnVpbGQgdGhlIGNoYXJhY3RlciBjbGFzcyB3aGljaCBpcyByZXByZXNlbnRlZCBieSBOQU1FLgorICAgICBUaGUgcmVzdWx0IGFyZSB3cml0dGVuIHRvIE1CQ1NFVCBhbmQgU0JDU0VULgorICAgICBDSEFSX0NMQVNTX0FMTE9DIGlzIHRoZSBhbGxvY2F0ZWQgc2l6ZSBvZiBtYmNzZXQtPmNoYXJfY2xhc3NlcywKKyAgICAgaXMgYSBwb2ludGVyIGFyZ3VtZW50IHNpbmNlIHdlIG1heSB1cGRhdGUgaXQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCitidWlsZF9jaGFyY2xhc3MgKFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBiaXRzZXRfdCBzYmNzZXQsCisJCSByZV9jaGFyc2V0X3QgKm1iY3NldCwgaW50ICpjaGFyX2NsYXNzX2FsbG9jLAorCQkgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwgcmVnX3N5bnRheF90IHN5bnRheCkKKyNlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworYnVpbGRfY2hhcmNsYXNzIChSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgYml0c2V0X3Qgc2Jjc2V0LAorCQkgY29uc3QgY2hhciAqY2xhc3NfbmFtZSwgcmVnX3N5bnRheF90IHN5bnRheCkKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KK3sKKyAgaW50IGk7CisKKyAgLyogSW4gY2FzZSBvZiBSRUdfSUNBU0UgInVwcGVyIiBhbmQgImxvd2VyIiBtYXRjaCB0aGUgYm90aCBvZgorICAgICB1cHBlciBhbmQgbG93ZXIgY2FzZXMuICAqLworICBpZiAoKHN5bnRheCAmIFJFX0lDQVNFKQorICAgICAgJiYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInVwcGVyIikgPT0gMCB8fCBzdHJjbXAgKGNsYXNzX25hbWUsICJsb3dlciIpID09IDApKQorICAgIGNsYXNzX25hbWUgPSAiYWxwaGEiOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogQ2hlY2sgdGhlIHNwYWNlIG9mIHRoZSBhcnJheXMuICAqLworICBpZiAoQkUgKCpjaGFyX2NsYXNzX2FsbG9jID09IG1iY3NldC0+bmNoYXJfY2xhc3NlcywgMCkpCisgICAgeworICAgICAgLyogTm90IGVub3VnaCwgcmVhbGxvYyBpdC4gICovCisgICAgICAvKiArMSBpbiBjYXNlIG9mIG1iY3NldC0+bmNoYXJfY2xhc3NlcyBpcyAwLiAgKi8KKyAgICAgIGludCBuZXdfY2hhcl9jbGFzc19hbGxvYyA9IDIgKiBtYmNzZXQtPm5jaGFyX2NsYXNzZXMgKyAxOworICAgICAgLyogVXNlIHJlYWxsb2Mgc2luY2UgYXJyYXkgaXMgTlVMTCBpZiAqYWxsb2MgPT0gMC4gICovCisgICAgICB3Y3R5cGVfdCAqbmV3X2NoYXJfY2xhc3NlcyA9IHJlX3JlYWxsb2MgKG1iY3NldC0+Y2hhcl9jbGFzc2VzLCB3Y3R5cGVfdCwKKwkJCQkJICAgICAgIG5ld19jaGFyX2NsYXNzX2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2NoYXJfY2xhc3NlcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIG1iY3NldC0+Y2hhcl9jbGFzc2VzID0gbmV3X2NoYXJfY2xhc3NlczsKKyAgICAgICpjaGFyX2NsYXNzX2FsbG9jID0gbmV3X2NoYXJfY2xhc3NfYWxsb2M7CisgICAgfQorICBtYmNzZXQtPmNoYXJfY2xhc3Nlc1ttYmNzZXQtPm5jaGFyX2NsYXNzZXMrK10gPSBfX3djdHlwZSAoY2xhc3NfbmFtZSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworI2RlZmluZSBCVUlMRF9DSEFSQ0xBU1NfTE9PUChjdHlwZV9mdW5jKQlcCisgIGRvIHsJCQkJCQlcCisgICAgaWYgKEJFICh0cmFucyAhPSBOVUxMLCAwKSkJCQlcCisgICAgICB7CQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBTQkNfTUFYOyArK2kpCQlcCisgIAkgIGlmIChjdHlwZV9mdW5jIChpKSkJCQlcCisJICAgIGJpdHNldF9zZXQgKHNiY3NldCwgdHJhbnNbaV0pOwlcCisgICAgICB9CQkJCQkJXAorICAgIGVsc2UJCQkJCVwKKyAgICAgIHsJCQkJCQlcCisJZm9yIChpID0gMDsgaSA8IFNCQ19NQVg7ICsraSkJCVwKKyAgCSAgaWYgKGN0eXBlX2Z1bmMgKGkpKQkJCVwKKwkgICAgYml0c2V0X3NldCAoc2Jjc2V0LCBpKTsJCVwKKyAgICAgIH0JCQkJCQlcCisgIH0gd2hpbGUgKDApCisKKyAgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImFsbnVtIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNhbG51bSk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImNudHJsIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNjbnRybCk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImxvd2VyIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNsb3dlcik7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInNwYWNlIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNzcGFjZSk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImFscGhhIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNhbHBoYSk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImRpZ2l0IikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNkaWdpdCk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInByaW50IikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXNwcmludCk7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgInVwcGVyIikgPT0gMCkKKyAgICBCVUlMRF9DSEFSQ0xBU1NfTE9PUCAoaXN1cHBlcik7CisgIGVsc2UgaWYgKHN0cmNtcCAoY2xhc3NfbmFtZSwgImJsYW5rIikgPT0gMCkKKyNpZm5kZWYgR0FXSworICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc2JsYW5rKTsKKyNlbHNlCisgICAgLyogc2VlIGNvbW1lbnRzIGFib3ZlICovCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzX2JsYW5rKTsKKyNlbmRpZgorICBlbHNlIGlmIChzdHJjbXAgKGNsYXNzX25hbWUsICJncmFwaCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzZ3JhcGgpOworICBlbHNlIGlmIChzdHJjbXAgKGNsYXNzX25hbWUsICJwdW5jdCIpID09IDApCisgICAgQlVJTERfQ0hBUkNMQVNTX0xPT1AgKGlzcHVuY3QpOworICBlbHNlIGlmIChzdHJjbXAgKGNsYXNzX25hbWUsICJ4ZGlnaXQiKSA9PSAwKQorICAgIEJVSUxEX0NIQVJDTEFTU19MT09QIChpc3hkaWdpdCk7CisgIGVsc2UKKyAgICByZXR1cm4gUkVHX0VDVFlQRTsKKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyBiaW5fdHJlZV90ICoKK2J1aWxkX2NoYXJjbGFzc19vcCAocmVfZGZhX3QgKmRmYSwgUkVfVFJBTlNMQVRFX1RZUEUgdHJhbnMsCisJCSAgICBjb25zdCBjaGFyICpjbGFzc19uYW1lLAorCQkgICAgY29uc3QgY2hhciAqZXh0cmEsIGludCBub25fbWF0Y2gsCisJCSAgICByZWdfZXJyY29kZV90ICplcnIpCit7CisgIHJlX2JpdHNldF9wdHJfdCBzYmNzZXQ7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgcmVfY2hhcnNldF90ICptYmNzZXQ7CisgIGludCBhbGxvYyA9IDA7CisjZW5kaWYgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIHJlZ19lcnJjb2RlX3QgcmV0OworICByZV90b2tlbl90IGJyX3Rva2VuOworICBiaW5fdHJlZV90ICp0cmVlOworCisgIHNiY3NldCA9IChyZV9iaXRzZXRfcHRyX3QpIGNhbGxvYyAoc2l6ZW9mIChiaXRzZXRfdCksIDEpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIG1iY3NldCA9IChyZV9jaGFyc2V0X3QgKikgY2FsbG9jIChzaXplb2YgKHJlX2NoYXJzZXRfdCksIDEpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAoQkUgKHNiY3NldCA9PSBOVUxMIHx8IG1iY3NldCA9PSBOVUxMLCAwKSkKKyNlbHNlIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICBpZiAoQkUgKHNiY3NldCA9PSBOVUxMLCAwKSkKKyNlbmRpZiAvKiBub3QgUkVfRU5BQkxFX0kxOE4gKi8KKyAgICB7CisgICAgICAqZXJyID0gUkVHX0VTUEFDRTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBpZiAobm9uX21hdGNoKQorICAgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgbWJjc2V0LT5ub25fbWF0Y2ggPSAxOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworICAgIH0KKworICAvKiBXZSBkb24ndCBjYXJlIHRoZSBzeW50YXggaW4gdGhpcyBjYXNlLiAgKi8KKyAgcmV0ID0gYnVpbGRfY2hhcmNsYXNzICh0cmFucywgc2Jjc2V0LAorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJCQkgbWJjc2V0LCAmYWxsb2MsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkJCSBjbGFzc19uYW1lLCAwKTsKKworICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgcmVfZnJlZSAoc2Jjc2V0KTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICAqZXJyID0gcmV0OworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAvKiBcdyBtYXRjaCAnXycgYWxzby4gICovCisgIGZvciAoOyAqZXh0cmE7IGV4dHJhKyspCisgICAgYml0c2V0X3NldCAoc2Jjc2V0LCAqZXh0cmEpOworCisgIC8qIElmIGl0IGlzIG5vbi1tYXRjaGluZyBsaXN0LiAgKi8KKyAgaWYgKG5vbl9tYXRjaCkKKyAgICBiaXRzZXRfbm90IChzYmNzZXQpOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgLyogRW5zdXJlIG9ubHkgc2luZ2xlIGJ5dGUgY2hhcmFjdGVycyBhcmUgc2V0LiAgKi8KKyAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisgICAgYml0c2V0X21hc2sgKHNiY3NldCwgZGZhLT5zYl9jaGFyKTsKKyNlbmRpZgorCisgIC8qIEJ1aWxkIGEgdHJlZSBmb3Igc2ltcGxlIGJyYWNrZXQuICAqLworICBicl90b2tlbi50eXBlID0gU0lNUExFX0JSQUNLRVQ7CisgIGJyX3Rva2VuLm9wci5zYmNzZXQgPSBzYmNzZXQ7CisgIHRyZWUgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCAmYnJfdG9rZW4pOworICBpZiAoQkUgKHRyZWUgPT0gTlVMTCwgMCkpCisgICAgZ290byBidWlsZF93b3JkX29wX2VzcGFjZTsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChkZmEtPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIGJpbl90cmVlX3QgKm1iY190cmVlOworICAgICAgLyogQnVpbGQgYSB0cmVlIGZvciBjb21wbGV4IGJyYWNrZXQuICAqLworICAgICAgYnJfdG9rZW4udHlwZSA9IENPTVBMRVhfQlJBQ0tFVDsKKyAgICAgIGJyX3Rva2VuLm9wci5tYmNzZXQgPSBtYmNzZXQ7CisgICAgICBkZmEtPmhhc19tYl9ub2RlID0gMTsKKyAgICAgIG1iY190cmVlID0gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgTlVMTCwgTlVMTCwgJmJyX3Rva2VuKTsKKyAgICAgIGlmIChCRSAobWJjX3RyZWUgPT0gTlVMTCwgMCkpCisJZ290byBidWlsZF93b3JkX29wX2VzcGFjZTsKKyAgICAgIC8qIFRoZW4gam9pbiB0aGVtIGJ5IEFMVCBub2RlLiAgKi8KKyAgICAgIHRyZWUgPSBjcmVhdGVfdHJlZSAoZGZhLCB0cmVlLCBtYmNfdHJlZSwgT1BfQUxUKTsKKyAgICAgIGlmIChCRSAobWJjX3RyZWUgIT0gTlVMTCwgMSkpCisJcmV0dXJuIHRyZWU7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworICAgICAgcmV0dXJuIHRyZWU7CisgICAgfQorI2Vsc2UgLyogbm90IFJFX0VOQUJMRV9JMThOICovCisgIHJldHVybiB0cmVlOworI2VuZGlmIC8qIG5vdCBSRV9FTkFCTEVfSTE4TiAqLworCisgYnVpbGRfd29yZF9vcF9lc3BhY2U6CisgIHJlX2ZyZWUgKHNiY3NldCk7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgZnJlZV9jaGFyc2V0IChtYmNzZXQpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICplcnIgPSBSRUdfRVNQQUNFOworICByZXR1cm4gTlVMTDsKK30KKworLyogVGhpcyBpcyBpbnRlbmRlZCBmb3IgdGhlIGV4cHJlc3Npb25zIGxpa2UgImF7MSwzfSIuCisgICBGZXRjaCBhIG51bWJlciBmcm9tIGBpbnB1dCcsIGFuZCByZXR1cm4gdGhlIG51bWJlci4KKyAgIFJldHVybiAtMSwgaWYgdGhlIG51bWJlciBmaWVsZCBpcyBlbXB0eSBsaWtlICJ7LDF9Ii4KKyAgIFJldHVybiAtMiwgaWYgYW4gZXJyb3IgaGFzIG9jY3VycmVkLiAgKi8KKworc3RhdGljIGludAorZmV0Y2hfbnVtYmVyIChyZV9zdHJpbmdfdCAqaW5wdXQsIHJlX3Rva2VuX3QgKnRva2VuLCByZWdfc3ludGF4X3Qgc3ludGF4KQoreworICBpbnQgbnVtID0gLTE7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgd2hpbGUgKDEpCisgICAgeworICAgICAgZmV0Y2hfdG9rZW4gKHRva2VuLCBpbnB1dCwgc3ludGF4KTsKKyAgICAgIGMgPSB0b2tlbi0+b3ByLmM7CisgICAgICBpZiAoQkUgKHRva2VuLT50eXBlID09IEVORF9PRl9SRSwgMCkpCisJcmV0dXJuIC0yOworICAgICAgaWYgKHRva2VuLT50eXBlID09IE9QX0NMT1NFX0RVUF9OVU0gfHwgYyA9PSAnLCcpCisJYnJlYWs7CisgICAgICBudW0gPSAoKHRva2VuLT50eXBlICE9IENIQVJBQ1RFUiB8fCBjIDwgJzAnIHx8ICc5JyA8IGMgfHwgbnVtID09IC0yKQorCSAgICAgPyAtMiA6ICgobnVtID09IC0xKSA/IGMgLSAnMCcgOiBudW0gKiAxMCArIGMgLSAnMCcpKTsKKyAgICAgIG51bSA9IChudW0gPiBSRV9EVVBfTUFYKSA/IC0yIDogbnVtOworICAgIH0KKyAgcmV0dXJuIG51bTsKK30KKwwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIHZvaWQKK2ZyZWVfY2hhcnNldCAocmVfY2hhcnNldF90ICpjc2V0KQoreworICByZV9mcmVlIChjc2V0LT5tYmNoYXJzKTsKKyMgaWZkZWYgX0xJQkMKKyAgcmVfZnJlZSAoY3NldC0+Y29sbF9zeW1zKTsKKyAgcmVfZnJlZSAoY3NldC0+ZXF1aXZfY2xhc3Nlcyk7CisgIHJlX2ZyZWUgKGNzZXQtPnJhbmdlX3N0YXJ0cyk7CisgIHJlX2ZyZWUgKGNzZXQtPnJhbmdlX2VuZHMpOworIyBlbmRpZgorICByZV9mcmVlIChjc2V0LT5jaGFyX2NsYXNzZXMpOworICByZV9mcmVlIChjc2V0KTsKK30KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworDAorLyogRnVuY3Rpb25zIGZvciBiaW5hcnkgdHJlZSBvcGVyYXRpb24uICAqLworCisvKiBDcmVhdGUgYSB0cmVlIG5vZGUuICAqLworCitzdGF0aWMgYmluX3RyZWVfdCAqCitjcmVhdGVfdHJlZSAocmVfZGZhX3QgKmRmYSwgYmluX3RyZWVfdCAqbGVmdCwgYmluX3RyZWVfdCAqcmlnaHQsCisJICAgICByZV90b2tlbl90eXBlX3QgdHlwZSkKK3sKKyAgcmVfdG9rZW5fdCB0OworICB0LnR5cGUgPSB0eXBlOworICByZXR1cm4gY3JlYXRlX3Rva2VuX3RyZWUgKGRmYSwgbGVmdCwgcmlnaHQsICZ0KTsKK30KKworc3RhdGljIGJpbl90cmVlX3QgKgorY3JlYXRlX3Rva2VuX3RyZWUgKHJlX2RmYV90ICpkZmEsIGJpbl90cmVlX3QgKmxlZnQsIGJpbl90cmVlX3QgKnJpZ2h0LAorCQkgICBjb25zdCByZV90b2tlbl90ICp0b2tlbikKK3sKKyAgYmluX3RyZWVfdCAqdHJlZTsKKyAgaWYgKEJFIChkZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4ID09IEJJTl9UUkVFX1NUT1JBR0VfU0laRSwgMCkpCisgICAgeworICAgICAgYmluX3RyZWVfc3RvcmFnZV90ICpzdG9yYWdlID0gcmVfbWFsbG9jIChiaW5fdHJlZV9zdG9yYWdlX3QsIDEpOworCisgICAgICBpZiAoc3RvcmFnZSA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgICAgc3RvcmFnZS0+bmV4dCA9IGRmYS0+c3RyX3RyZWVfc3RvcmFnZTsKKyAgICAgIGRmYS0+c3RyX3RyZWVfc3RvcmFnZSA9IHN0b3JhZ2U7CisgICAgICBkZmEtPnN0cl90cmVlX3N0b3JhZ2VfaWR4ID0gMDsKKyAgICB9CisgIHRyZWUgPSAmZGZhLT5zdHJfdHJlZV9zdG9yYWdlLT5kYXRhW2RmYS0+c3RyX3RyZWVfc3RvcmFnZV9pZHgrK107CisKKyAgdHJlZS0+cGFyZW50ID0gTlVMTDsKKyAgdHJlZS0+bGVmdCA9IGxlZnQ7CisgIHRyZWUtPnJpZ2h0ID0gcmlnaHQ7CisgIHRyZWUtPnRva2VuID0gKnRva2VuOworICB0cmVlLT50b2tlbi5kdXBsaWNhdGVkID0gMDsKKyAgdHJlZS0+dG9rZW4ub3B0X3N1YmV4cCA9IDA7CisgIHRyZWUtPmZpcnN0ID0gTlVMTDsKKyAgdHJlZS0+bmV4dCA9IE5VTEw7CisgIHRyZWUtPm5vZGVfaWR4ID0gLTE7CisKKyAgaWYgKGxlZnQgIT0gTlVMTCkKKyAgICBsZWZ0LT5wYXJlbnQgPSB0cmVlOworICBpZiAocmlnaHQgIT0gTlVMTCkKKyAgICByaWdodC0+cGFyZW50ID0gdHJlZTsKKyAgcmV0dXJuIHRyZWU7Cit9CisKKy8qIE1hcmsgdGhlIHRyZWUgU1JDIGFzIGFuIG9wdGlvbmFsIHN1YmV4cHJlc3Npb24uCisgICBUbyBiZSBjYWxsZWQgZnJvbSBwcmVvcmRlciBvciBwb3N0b3JkZXIuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorbWFya19vcHRfc3ViZXhwICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgaW50IGlkeCA9IChpbnQpIChsb25nKSBleHRyYTsKKyAgaWYgKG5vZGUtPnRva2VuLnR5cGUgPT0gU1VCRVhQICYmIG5vZGUtPnRva2VuLm9wci5pZHggPT0gaWR4KQorICAgIG5vZGUtPnRva2VuLm9wdF9zdWJleHAgPSAxOworCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogRnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpbnNpZGUgTk9ERS4gKi8KKworc3RhdGljIHZvaWQKK2ZyZWVfdG9rZW4gKHJlX3Rva2VuX3QgKm5vZGUpCit7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKG5vZGUtPnR5cGUgPT0gQ09NUExFWF9CUkFDS0VUICYmIG5vZGUtPmR1cGxpY2F0ZWQgPT0gMCkKKyAgICBmcmVlX2NoYXJzZXQgKG5vZGUtPm9wci5tYmNzZXQpOworICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICBpZiAobm9kZS0+dHlwZSA9PSBTSU1QTEVfQlJBQ0tFVCAmJiBub2RlLT5kdXBsaWNhdGVkID09IDApCisgICAgICByZV9mcmVlIChub2RlLT5vcHIuc2Jjc2V0KTsKK30KKworLyogV29ya2VyIGZ1bmN0aW9uIGZvciB0cmVlIHdhbGtpbmcuICBGcmVlIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGluc2lkZSBOT0RFCisgICBhbmQgaXRzIGNoaWxkcmVuLiAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorZnJlZV90cmVlICh2b2lkICpleHRyYSwgYmluX3RyZWVfdCAqbm9kZSkKK3sKKyAgZnJlZV90b2tlbiAoJm5vZGUtPnRva2VuKTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisKKy8qIER1cGxpY2F0ZSB0aGUgbm9kZSBTUkMsIGFuZCByZXR1cm4gbmV3IG5vZGUuICBUaGlzIGlzIGEgcHJlb3JkZXIKKyAgIHZpc2l0IHNpbWlsYXIgdG8gdGhlIG9uZSBpbXBsZW1lbnRlZCBieSB0aGUgZ2VuZXJpYyB2aXNpdG9yLCBidXQKKyAgIHdlIG5lZWQgbW9yZSBpbmZyYXN0cnVjdHVyZSB0byBtYWludGFpbiB0d28gcGFyYWxsZWwgdHJlZXMgLS0tIHNvLAorICAgaXQncyBlYXNpZXIgdG8gZHVwbGljYXRlLiAgKi8KKworc3RhdGljIGJpbl90cmVlX3QgKgorZHVwbGljYXRlX3RyZWUgKGNvbnN0IGJpbl90cmVlX3QgKnJvb3QsIHJlX2RmYV90ICpkZmEpCit7CisgIGNvbnN0IGJpbl90cmVlX3QgKm5vZGU7CisgIGJpbl90cmVlX3QgKmR1cF9yb290OworICBiaW5fdHJlZV90ICoqcF9uZXcgPSAmZHVwX3Jvb3QsICpkdXBfbm9kZSA9IHJvb3QtPnBhcmVudDsKKworICBmb3IgKG5vZGUgPSByb290OyA7ICkKKyAgICB7CisgICAgICAvKiBDcmVhdGUgYSBuZXcgdHJlZSBhbmQgbGluayBpdCBiYWNrIHRvIHRoZSBjdXJyZW50IHBhcmVudC4gICovCisgICAgICAqcF9uZXcgPSBjcmVhdGVfdG9rZW5fdHJlZSAoZGZhLCBOVUxMLCBOVUxMLCAmbm9kZS0+dG9rZW4pOworICAgICAgaWYgKCpwX25ldyA9PSBOVUxMKQorCXJldHVybiBOVUxMOworICAgICAgKCpwX25ldyktPnBhcmVudCA9IGR1cF9ub2RlOworICAgICAgKCpwX25ldyktPnRva2VuLmR1cGxpY2F0ZWQgPSAxOworICAgICAgZHVwX25vZGUgPSAqcF9uZXc7CisKKyAgICAgIC8qIEdvIHRvIHRoZSBsZWZ0IG5vZGUsIG9yIHVwIGFuZCB0byB0aGUgcmlnaHQuICAqLworICAgICAgaWYgKG5vZGUtPmxlZnQpCisJeworCSAgbm9kZSA9IG5vZGUtPmxlZnQ7CisJICBwX25ldyA9ICZkdXBfbm9kZS0+bGVmdDsKKwl9CisgICAgICBlbHNlCisJeworCSAgY29uc3QgYmluX3RyZWVfdCAqcHJldiA9IE5VTEw7CisJICB3aGlsZSAobm9kZS0+cmlnaHQgPT0gcHJldiB8fCBub2RlLT5yaWdodCA9PSBOVUxMKQorCSAgICB7CisJICAgICAgcHJldiA9IG5vZGU7CisJICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKwkgICAgICBkdXBfbm9kZSA9IGR1cF9ub2RlLT5wYXJlbnQ7CisJICAgICAgaWYgKCFub2RlKQorCQlyZXR1cm4gZHVwX3Jvb3Q7CisJICAgIH0KKwkgIG5vZGUgPSBub2RlLT5yaWdodDsKKwkgIHBfbmV3ID0gJmR1cF9ub2RlLT5yaWdodDsKKwl9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4LmMgYi9jb21wYXQvcmVnZXgvcmVnZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWFhZTAwCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4LmMKQEAgLTAsMCArMSw4NyBAQAorLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgSXNhbXUgSGFzZWdhd2EgPGlzYW11QHlhbWF0by5pYm0uY29tPi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAgIDAyMTEwLTEzMDEgVVNBLiAgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisvKiBNYWtlIHN1cmUgbm8gb25lIGNvbXBpbGVzIHRoaXMgY29kZSB3aXRoIGEgQysrIGNvbXBpbGVyLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworIyBlcnJvciAiVGhpcyBpcyBDIGNvZGUsIHVzZSBhIEMgY29tcGlsZXIiCisjZW5kaWYKKworI2lmZGVmIF9MSUJDCisvKiBXZSBoYXZlIHRvIGtlZXAgdGhlIG5hbWVzcGFjZSBjbGVhbi4gICovCisjIGRlZmluZSByZWdmcmVlKHByZWcpIF9fcmVnZnJlZSAocHJlZykKKyMgZGVmaW5lIHJlZ2V4ZWMocHIsIHN0LCBubSwgcG0sIGVmKSBfX3JlZ2V4ZWMgKHByLCBzdCwgbm0sIHBtLCBlZikKKyMgZGVmaW5lIHJlZ2NvbXAocHJlZywgcGF0dGVybiwgY2ZsYWdzKSBfX3JlZ2NvbXAgKHByZWcsIHBhdHRlcm4sIGNmbGFncykKKyMgZGVmaW5lIHJlZ2Vycm9yKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpIFwKKwlfX3JlZ2Vycm9yKGVycmNvZGUsIHByZWcsIGVycmJ1ZiwgZXJyYnVmX3NpemUpCisjIGRlZmluZSByZV9zZXRfcmVnaXN0ZXJzKGJ1LCByZSwgbnUsIHN0LCBlbikgXAorCV9fcmVfc2V0X3JlZ2lzdGVycyAoYnUsIHJlLCBudSwgc3QsIGVuKQorIyBkZWZpbmUgcmVfbWF0Y2hfMihidWZwLCBzdHJpbmcxLCBzaXplMSwgc3RyaW5nMiwgc2l6ZTIsIHBvcywgcmVncywgc3RvcCkgXAorCV9fcmVfbWF0Y2hfMiAoYnVmcCwgc3RyaW5nMSwgc2l6ZTEsIHN0cmluZzIsIHNpemUyLCBwb3MsIHJlZ3MsIHN0b3ApCisjIGRlZmluZSByZV9tYXRjaChidWZwLCBzdHJpbmcsIHNpemUsIHBvcywgcmVncykgXAorCV9fcmVfbWF0Y2ggKGJ1ZnAsIHN0cmluZywgc2l6ZSwgcG9zLCByZWdzKQorIyBkZWZpbmUgcmVfc2VhcmNoKGJ1ZnAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLCByZWdzKSBcCisJX19yZV9zZWFyY2ggKGJ1ZnAsIHN0cmluZywgc2l6ZSwgc3RhcnRwb3MsIHJhbmdlLCByZWdzKQorIyBkZWZpbmUgcmVfY29tcGlsZV9wYXR0ZXJuKHBhdHRlcm4sIGxlbmd0aCwgYnVmcCkgXAorCV9fcmVfY29tcGlsZV9wYXR0ZXJuIChwYXR0ZXJuLCBsZW5ndGgsIGJ1ZnApCisjIGRlZmluZSByZV9zZXRfc3ludGF4KHN5bnRheCkgX19yZV9zZXRfc3ludGF4IChzeW50YXgpCisjIGRlZmluZSByZV9zZWFyY2hfMihidWZwLCBzdDEsIHMxLCBzdDIsIHMyLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MsIHN0b3ApIFwKKwlfX3JlX3NlYXJjaF8yIChidWZwLCBzdDEsIHMxLCBzdDIsIHMyLCBzdGFydHBvcywgcmFuZ2UsIHJlZ3MsIHN0b3ApCisjIGRlZmluZSByZV9jb21waWxlX2Zhc3RtYXAoYnVmcCkgX19yZV9jb21waWxlX2Zhc3RtYXAgKGJ1ZnApCisKKyMgaW5jbHVkZSAiLi4vbG9jYWxlL2xvY2FsZWluZm8uaCIKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX01TQ19WRVIpCisjaW5jbHVkZSA8c3RkaW8uaD4gLyogZm9yIHNpemVfdCAqLworI2VuZGlmCisKKy8qIE9uIHNvbWUgc3lzdGVtcywgbGltaXRzLmggc2V0cyBSRV9EVVBfTUFYIHRvIGEgbG93ZXIgdmFsdWUgdGhhbgorICAgR05VIHJlZ2V4IGFsbG93cy4gIEluY2x1ZGUgaXQgYmVmb3JlIDxyZWdleC5oPiwgd2hpY2ggY29ycmVjdGx5CisgICAjdW5kZWZzIFJFX0RVUF9NQVggYW5kIHNldHMgaXQgdG8gdGhlIHJpZ2h0IHZhbHVlLiAgKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2lmZGVmIEdBV0sKKyN1bmRlZiBhbGxvY2EKKyNkZWZpbmUgYWxsb2NhIGFsbG9jYV9pc19iYWRfeW91X3Nob3VsZF9uZXZlcl91c2VfaXQKKyNlbmRpZgorI2luY2x1ZGUgPHJlZ2V4Lmg+CisjaW5jbHVkZSAicmVnZXhfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgInJlZ2V4X2ludGVybmFsLmMiCisjaWZkZWYgR0FXSworI2RlZmluZSBib29sIGludAorI2RlZmluZSB0cnVlICgxKQorI2RlZmluZSBmYWxzZSAoMCkKKyNlbmRpZgorI2luY2x1ZGUgInJlZ2NvbXAuYyIKKyNpbmNsdWRlICJyZWdleGVjLmMiCisKKy8qIEJpbmFyeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgKi8KKyNpZiBfTElCQworIyBpbmNsdWRlIDxzaGxpYi1jb21wYXQuaD4KKyMgaWYgU0hMSUJfQ09NUEFUIChsaWJjLCBHTElCQ18yXzAsIEdMSUJDXzJfMykKK2xpbmtfd2FybmluZyAocmVfbWF4X2ZhaWx1cmVzLCAidGhlICdyZV9tYXhfZmFpbHVyZXMnIHZhcmlhYmxlIGlzIG9ic29sZXRlIGFuZCB3aWxsIGdvIGF3YXkuIikKK2ludCByZV9tYXhfZmFpbHVyZXMgPSAyMDAwOworIyBlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jb21wYXQvcmVnZXgvcmVnZXguaCBiL2NvbXBhdC9yZWdleC9yZWdleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYzk2ODMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcmVnZXgvcmVnZXguaApAQCAtMCwwICsxLDU4MiBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIERlZmluaXRpb25zIGZvciBkYXRhIHN0cnVjdHVyZXMgYW5kIHJvdXRpbmVzIGZvciB0aGUgcmVndWxhcgorICAgZXhwcmVzc2lvbiBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTg1LDE5ODktOTMsMTk5NS05OCwyMDAwLDIwMDEsMjAwMiwyMDAzLDIwMDUsMjAwNiwyMDA4CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICAgMDIxMTAtMTMwMSBVU0EuICAqLworCisjaWZuZGVmIF9SRUdFWF9ICisjZGVmaW5lIF9SRUdFWF9IIDEKKworI2lmZGVmIEhBVkVfU1REREVGX0gKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZm5kZWYgX0xJQkMKKyNkZWZpbmUgX19VU0VfR05VCTEKKyNlbmRpZgorCisvKiBBbGxvdyB0aGUgdXNlIGluIEMrKyBjb2RlLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyB0d28gdHlwZXMgaGF2ZSB0byBiZSBzaWduZWQgYW5kIHVuc2lnbmVkIGludGVnZXIgdHlwZQorICAgd2lkZSBlbm91Z2ggdG8gaG9sZCBhIHZhbHVlIG9mIGEgcG9pbnRlci4gIEZvciBtb3N0IEFOU0kgY29tcGlsZXJzCisgICBwdHJkaWZmX3QgYW5kIHNpemVfdCBzaG91bGQgYmUgbGlrZWx5IE9LLiAgU3RpbGwgc2l6ZSBvZiB0aGVzZSB0d28KKyAgIHR5cGVzIGlzIDIgZm9yIE1pY3Jvc29mdCBDLiAgVWdoLi4uICovCit0eXBlZGVmIGxvbmcgaW50IHNfcmVnX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IGFjdGl2ZV9yZWdfdDsKKworLyogVGhlIGZvbGxvd2luZyBiaXRzIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgcmVnZXhwIHN5bnRheCB3ZQorICAgcmVjb2duaXplLiAgVGhlIHNldC9ub3Qtc2V0IG1lYW5pbmdzIGFyZSBjaG9zZW4gc28gdGhhdCBFbWFjcyBzeW50YXgKKyAgIHJlbWFpbnMgdGhlIHZhbHVlIDAuICBUaGUgYml0cyBhcmUgZ2l2ZW4gaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCBhbmQKKyAgIHRoZSBkZWZpbml0aW9ucyBzaGlmdGVkIGJ5IG9uZSBmcm9tIHRoZSBwcmV2aW91cyBiaXQ7IHRodXMsIHdoZW4gd2UKKyAgIGFkZCBvciByZW1vdmUgYSBiaXQsIG9ubHkgb25lIG90aGVyIGRlZmluaXRpb24gbmVlZCBjaGFuZ2UuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCByZWdfc3ludGF4X3Q7CisKKyNpZmRlZiBfX1VTRV9HTlUKKy8qIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZW4gXCBpbnNpZGUgYSBicmFja2V0IGV4cHJlc3Npb24gaXMgbGl0ZXJhbC4KKyAgIElmIHNldCwgdGhlbiBzdWNoIGEgXCBxdW90ZXMgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIuICAqLworIyBkZWZpbmUgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUyAoKHVuc2lnbmVkIGxvbmcgaW50KSAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBub3Qgc2V0LCB0aGVuICsgYW5kID8gYXJlIG9wZXJhdG9ycywgYW5kIFwrIGFuZCBcPyBhcmUKKyAgICAgbGl0ZXJhbHMuCisgICBJZiBzZXQsIHRoZW4gXCsgYW5kIFw/IGFyZSBvcGVyYXRvcnMgYW5kICsgYW5kID8gYXJlIGxpdGVyYWxzLiAgKi8KKyMgZGVmaW5lIFJFX0JLX1BMVVNfUU0gKFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGNoYXJhY3RlciBjbGFzc2VzIGFyZSBzdXBwb3J0ZWQuICBUaGV5IGFyZToKKyAgICAgWzphbHBoYTpdLCBbOnVwcGVyOl0sIFs6bG93ZXI6XSwgIFs6ZGlnaXQ6XSwgWzphbG51bTpdLCBbOnhkaWdpdDpdLAorICAgICBbOnNwYWNlOl0sIFs6cHJpbnQ6XSwgWzpwdW5jdDpdLCBbOmdyYXBoOl0sIGFuZCBbOmNudHJsOl0uCisgICBJZiBub3Qgc2V0LCB0aGVuIGNoYXJhY3RlciBjbGFzc2VzIGFyZSBub3Qgc3VwcG9ydGVkLiAgKi8KKyMgZGVmaW5lIFJFX0NIQVJfQ0xBU1NFUyAoUkVfQktfUExVU19RTSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gXiBhbmQgJCBhcmUgYWx3YXlzIGFuY2hvcnMgKG91dHNpZGUgYnJhY2tldAorICAgICBleHByZXNzaW9ucywgb2YgY291cnNlKS4KKyAgIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZW4gaXQgZGVwZW5kczoKKyAgICAgICAgXiAgaXMgYW4gYW5jaG9yIGlmIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSByZWd1bGFyCisgICAgICAgICAgIGV4cHJlc3Npb24gb3IgYWZ0ZXIgYW4gb3Blbi1ncm91cCBvciBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvcjsKKyAgICAgICAgJCAgaXMgYW4gYW5jaG9yIGlmIGl0IGlzIGF0IHRoZSBlbmQgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24sIG9yCisgICAgICAgICAgIGJlZm9yZSBhIGNsb3NlLWdyb3VwIG9yIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLgorCisgICBUaGlzIGJpdCBjb3VsZCBiZSAocmUpY29tYmluZWQgd2l0aCBSRV9DT05URVhUX0lOREVQX09QUywgYmVjYXVzZQorICAgUE9TSVggZHJhZnQgMTEuMiBzYXlzIHRoYXQgKiBldGMuIGluIGxlYWRpbmcgcG9zaXRpb25zIGlzIHVuZGVmaW5lZC4KKyAgIFdlIGFscmVhZHkgaW1wbGVtZW50ZWQgYSBwcmV2aW91cyBkcmFmdCB3aGljaCBtYWRlIHRob3NlIGNvbnN0cnVjdHMKKyAgIGludmFsaWQsIHRob3VnaCwgc28gd2UgaGF2ZW4ndCBjaGFuZ2VkIHRoZSBjb2RlIGJhY2suICAqLworIyBkZWZpbmUgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTIChSRV9DSEFSX0NMQVNTRVMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHNwZWNpYWwgY2hhcmFjdGVycyBhcmUgYWx3YXlzIHNwZWNpYWwKKyAgICAgcmVnYXJkbGVzcyBvZiB3aGVyZSB0aGV5IGFyZSBpbiB0aGUgcGF0dGVybi4KKyAgIElmIHRoaXMgYml0IGlzIG5vdCBzZXQsIHRoZW4gc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBzcGVjaWFsIG9ubHkgaW4KKyAgICAgc29tZSBjb250ZXh0czsgb3RoZXJ3aXNlIHRoZXkgYXJlIG9yZGluYXJ5LiAgU3BlY2lmaWNhbGx5LAorICAgICAqICsgPyBhbmQgaW50ZXJ2YWxzIGFyZSBvbmx5IHNwZWNpYWwgd2hlbiBub3QgYWZ0ZXIgdGhlIGJlZ2lubmluZywKKyAgICAgb3Blbi1ncm91cCwgb3IgYWx0ZXJuYXRpb24gb3BlcmF0b3IuICAqLworIyBkZWZpbmUgUkVfQ09OVEVYVF9JTkRFUF9PUFMgKFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gKiwgKywgPywgYW5kIHsgY2Fubm90IGJlIGZpcnN0IGluIGFuIHJlIG9yCisgICAgIGltbWVkaWF0ZWx5IGFmdGVyIGFuIGFsdGVybmF0aW9uIG9yIGJlZ2luLWdyb3VwIG9wZXJhdG9yLiAgKi8KKyMgZGVmaW5lIFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgKFJFX0NPTlRFWFRfSU5ERVBfT1BTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiAuIG1hdGNoZXMgbmV3bGluZS4KKyAgIElmIG5vdCBzZXQsIHRoZW4gaXQgZG9lc24ndC4gICovCisjIGRlZmluZSBSRV9ET1RfTkVXTElORSAoUkVfQ09OVEVYVF9JTlZBTElEX09QUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gLiBkb2Vzbid0IG1hdGNoIE5VTC4KKyAgIElmIG5vdCBzZXQsIHRoZW4gaXQgZG9lcy4gICovCisjIGRlZmluZSBSRV9ET1RfTk9UX05VTEwgKFJFX0RPVF9ORVdMSU5FIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgbm9ubWF0Y2hpbmcgbGlzdHMgW14uLi5dIGRvIG5vdCBtYXRjaCBuZXdsaW5lLgorICAgSWYgbm90IHNldCwgdGhleSBkby4gICovCisjIGRlZmluZSBSRV9IQVRfTElTVFNfTk9UX05FV0xJTkUgKFJFX0RPVF9OT1RfTlVMTCA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIGVpdGhlciBcey4uLlx9IG9yIHsuLi59IGRlZmluZXMgYW4KKyAgICAgaW50ZXJ2YWwsIGRlcGVuZGluZyBvbiBSRV9OT19CS19CUkFDRVMuCisgICBJZiBub3Qgc2V0LCBceywgXH0sIHssIGFuZCB9IGFyZSBsaXRlcmFscy4gICovCisjIGRlZmluZSBSRV9JTlRFUlZBTFMgKFJFX0hBVF9MSVNUU19OT1RfTkVXTElORSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsICssID8gYW5kIHwgYXJlbid0IHJlY29nbml6ZWQgYXMgb3BlcmF0b3JzLgorICAgSWYgbm90IHNldCwgdGhleSBhcmUuICAqLworIyBkZWZpbmUgUkVfTElNSVRFRF9PUFMgKFJFX0lOVEVSVkFMUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIG5ld2xpbmUgaXMgYW4gYWx0ZXJuYXRpb24gb3BlcmF0b3IuCisgICBJZiBub3Qgc2V0LCBuZXdsaW5lIGlzIGxpdGVyYWwuICAqLworIyBkZWZpbmUgUkVfTkVXTElORV9BTFQgKFJFX0xJTUlURURfT1BTIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBgey4uLn0nIGRlZmluZXMgYW4gaW50ZXJ2YWwsIGFuZCBceyBhbmQgXH0KKyAgICAgYXJlIGxpdGVyYWxzLgorICBJZiBub3Qgc2V0LCB0aGVuIGBcey4uLlx9JyBkZWZpbmVzIGFuIGludGVydmFsLiAgKi8KKyMgZGVmaW5lIFJFX05PX0JLX0JSQUNFUyAoUkVfTkVXTElORV9BTFQgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCAoLi4uKSBkZWZpbmVzIGEgZ3JvdXAsIGFuZCBcKCBhbmQgXCkgYXJlIGxpdGVyYWxzLgorICAgSWYgbm90IHNldCwgXCguLi5cKSBkZWZpbmVzIGEgZ3JvdXAsIGFuZCAoIGFuZCApIGFyZSBsaXRlcmFscy4gICovCisjIGRlZmluZSBSRV9OT19CS19QQVJFTlMgKFJFX05PX0JLX0JSQUNFUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gXDxkaWdpdD4gbWF0Y2hlcyA8ZGlnaXQ+LgorICAgSWYgbm90IHNldCwgdGhlbiBcPGRpZ2l0PiBpcyBhIGJhY2stcmVmZXJlbmNlLiAgKi8KKyMgZGVmaW5lIFJFX05PX0JLX1JFRlMgKFJFX05PX0JLX1BBUkVOUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gfCBpcyBhbiBhbHRlcm5hdGlvbiBvcGVyYXRvciwgYW5kIFx8IGlzIGxpdGVyYWwuCisgICBJZiBub3Qgc2V0LCB0aGVuIFx8IGlzIGFuIGFsdGVybmF0aW9uIG9wZXJhdG9yLCBhbmQgfCBpcyBsaXRlcmFsLiAgKi8KKyMgZGVmaW5lIFJFX05PX0JLX1ZCQVIgKFJFX05PX0JLX1JFRlMgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGFuIGVuZGluZyByYW5nZSBwb2ludCBjb2xsYXRpbmcgaGlnaGVyCisgICAgIHRoYW4gdGhlIHN0YXJ0aW5nIHJhbmdlIHBvaW50LCBhcyBpbiBbei1hXSwgaXMgaW52YWxpZC4KKyAgIElmIG5vdCBzZXQsIHRoZW4gd2hlbiBlbmRpbmcgcmFuZ2UgcG9pbnQgY29sbGF0ZXMgaGlnaGVyIHRoYW4gdGhlCisgICAgIHN0YXJ0aW5nIHJhbmdlIHBvaW50LCB0aGUgcmFuZ2UgaXMgaWdub3JlZC4gICovCisjIGRlZmluZSBSRV9OT19FTVBUWV9SQU5HRVMgKFJFX05PX0JLX1ZCQVIgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGFuIHVubWF0Y2hlZCApIGlzIG9yZGluYXJ5LgorICAgSWYgbm90IHNldCwgdGhlbiBhbiB1bm1hdGNoZWQgKSBpcyBpbnZhbGlkLiAgKi8KKyMgZGVmaW5lIFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQgKFJFX05PX0VNUFRZX1JBTkdFUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHN1Y2NlZWQgYXMgc29vbiBhcyB3ZSBtYXRjaCB0aGUgd2hvbGUgcGF0dGVybiwKKyAgIHdpdGhvdXQgZnVydGhlciBiYWNrdHJhY2tpbmcuICAqLworIyBkZWZpbmUgUkVfTk9fUE9TSVhfQkFDS1RSQUNLSU5HIChSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgZG8gbm90IHByb2Nlc3MgdGhlIEdOVSByZWdleCBvcGVyYXRvcnMuCisgICBJZiBub3Qgc2V0LCB0aGVuIHRoZSBHTlUgcmVnZXggb3BlcmF0b3JzIGFyZSByZWNvZ25pemVkLiAqLworIyBkZWZpbmUgUkVfTk9fR05VX09QUyAoUkVfTk9fUE9TSVhfQkFDS1RSQUNLSU5HIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgYSBzeW50YWN0aWNhbGx5IGludmFsaWQgaW50ZXJ2YWwgaXMgdHJlYXRlZCBhcworICAgYSBzdHJpbmcgb2Ygb3JkaW5hcnkgY2hhcmFjdGVycy4gIEZvciBleGFtcGxlLCB0aGUgRVJFICdhezEnIGlzCisgICB0cmVhdGVkIGFzICdhXHsxJy4gICovCisjIGRlZmluZSBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCAoUkVfTk9fR05VX09QUyA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gaWdub3JlIGNhc2Ugd2hlbiBtYXRjaGluZy4KKyAgIElmIG5vdCBzZXQsIHRoZW4gY2FzZSBpcyBzaWduaWZpY2FudC4gICovCisjIGRlZmluZSBSRV9JQ0FTRSAoUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQgPDwgMSkKKworLyogVGhpcyBiaXQgaXMgdXNlZCBpbnRlcm5hbGx5IGxpa2UgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTIGJ1dCBvbmx5CisgICBmb3IgXiwgYmVjYXVzZSBpdCBpcyBkaWZmaWN1bHQgdG8gc2NhbiB0aGUgcmVnZXggYmFja3dhcmRzIHRvIGZpbmQKKyAgIHdoZXRoZXIgXiBzaG91bGQgYmUgc3BlY2lhbC4gICovCisjIGRlZmluZSBSRV9DQVJFVF9BTkNIT1JTX0hFUkUgKFJFX0lDQVNFIDw8IDEpCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBceyBjYW5ub3QgYmUgZmlyc3QgaW4gYW4gYnJlIG9yCisgICBpbW1lZGlhdGVseSBhZnRlciBhbiBhbHRlcm5hdGlvbiBvciBiZWdpbi1ncm91cCBvcGVyYXRvci4gICovCisjIGRlZmluZSBSRV9DT05URVhUX0lOVkFMSURfRFVQIChSRV9DQVJFVF9BTkNIT1JTX0hFUkUgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIG5vX3N1YiB3aWxsIGJlIHNldCB0byAxIGR1cmluZworICAgcmVfY29tcGlsZV9wYXR0ZXJuLiAgKi8KKyNkZWZpbmUgUkVfTk9fU1VCIChSRV9DT05URVhUX0lOVkFMSURfRFVQIDw8IDEpCisjZW5kaWYKKworLyogVGhpcyBnbG9iYWwgdmFyaWFibGUgZGVmaW5lcyB0aGUgcGFydGljdWxhciByZWdleHAgc3ludGF4IHRvIHVzZSAoZm9yCisgICBzb21lIGludGVyZmFjZXMpLiAgV2hlbiBhIHJlZ2V4cCBpcyBjb21waWxlZCwgdGhlIHN5bnRheCB1c2VkIGlzCisgICBzdG9yZWQgaW4gdGhlIHBhdHRlcm4gYnVmZmVyLCBzbyBjaGFuZ2luZyB0aGlzIGRvZXMgbm90IGFmZmVjdAorICAgYWxyZWFkeS1jb21waWxlZCByZWdleHBzLiAgKi8KK2V4dGVybiByZWdfc3ludGF4X3QgcmVfc3ludGF4X29wdGlvbnM7CisMCisjaWZkZWYgX19VU0VfR05VCisvKiBEZWZpbmUgY29tYmluYXRpb25zIG9mIHRoZSBhYm92ZSBiaXRzIGZvciB0aGUgc3RhbmRhcmQgcG9zc2liaWxpdGllcy4KKyAgIChUaGUgW1tbIGNvbW1lbnRzIGRlbGltaXQgd2hhdCBnZXRzIHB1dCBpbnRvIHRoZSBUZXhpbmZvIGZpbGUsIHNvCisgICBkb24ndCBkZWxldGUgdGhlbSEpICAqLworLyogW1tbYmVnaW4gc3ludGF4ZXNdXV0gKi8KKyNkZWZpbmUgUkVfU1lOVEFYX0VNQUNTIDAKKworI2RlZmluZSBSRV9TWU5UQVhfQVdLCQkJCQkJCVwKKyAgKFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMgICB8IFJFX0RPVF9OT1RfTlVMTAkJCVwKKyAgIHwgUkVfTk9fQktfUEFSRU5TICAgICAgICAgICAgICB8IFJFX05PX0JLX1JFRlMJCQlcCisgICB8IFJFX05PX0JLX1ZCQVIgICAgICAgICAgICAgICAgfCBSRV9OT19FTVBUWV9SQU5HRVMJCQlcCisgICB8IFJFX0RPVF9ORVdMSU5FCQkgIHwgUkVfQ09OVEVYVF9JTkRFUF9BTkNIT1JTCQlcCisgICB8IFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQgfCBSRV9OT19HTlVfT1BTKQorCisjZGVmaW5lIFJFX1NZTlRBWF9HTlVfQVdLCQkJCQkJXAorICAoKFJFX1NZTlRBWF9QT1NJWF9FWFRFTkRFRCB8IFJFX0JBQ0tTTEFTSF9FU0NBUEVfSU5fTElTVFMJCVwKKyAgIHwgUkVfSU5WQUxJRF9JTlRFUlZBTF9PUkQpCQkJCQkJXAorICAgJiB+KFJFX0RPVF9OT1RfTlVMTCB8IFJFX0NPTlRFWFRfSU5ERVBfT1BTCQkJCVwKKyAgICAgICB8IFJFX0NPTlRFWFRfSU5WQUxJRF9PUFMgKSkKKworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfQVdLCQkJCQkJXAorICAoUkVfU1lOVEFYX1BPU0lYX0VYVEVOREVEIHwgUkVfQkFDS1NMQVNIX0VTQ0FQRV9JTl9MSVNUUwkJXAorICAgfCBSRV9JTlRFUlZBTFMJICAgIHwgUkVfTk9fR05VX09QUwkJCQlcCisgICB8IFJFX0lOVkFMSURfSU5URVJWQUxfT1JEKQorCisjZGVmaW5lIFJFX1NZTlRBWF9HUkVQCQkJCQkJCVwKKyAgKFJFX0JLX1BMVVNfUU0gICAgICAgICAgICAgIHwgUkVfQ0hBUl9DTEFTU0VTCQkJCVwKKyAgIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FIHwgUkVfSU5URVJWQUxTCQkJCVwKKyAgIHwgUkVfTkVXTElORV9BTFQpCisKKyNkZWZpbmUgUkVfU1lOVEFYX0VHUkVQCQkJCQkJCVwKKyAgKFJFX0NIQVJfQ0xBU1NFUyAgICAgICAgfCBSRV9DT05URVhUX0lOREVQX0FOQ0hPUlMJCQlcCisgICB8IFJFX0NPTlRFWFRfSU5ERVBfT1BTIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FCQkJXAorICAgfCBSRV9ORVdMSU5FX0FMVCAgICAgICB8IFJFX05PX0JLX1BBUkVOUwkJCQlcCisgICB8IFJFX05PX0JLX1ZCQVIpCisKKyNkZWZpbmUgUkVfU1lOVEFYX1BPU0lYX0VHUkVQCQkJCQkJXAorICAoUkVfU1lOVEFYX0VHUkVQIHwgUkVfSU5URVJWQUxTIHwgUkVfTk9fQktfQlJBQ0VTCQkJXAorICAgfCBSRV9JTlZBTElEX0lOVEVSVkFMX09SRCkKKworLyogUDEwMDMuMi9EMTEuMiwgc2VjdGlvbiA0LjIwLjcuMSwgbGluZXMgNTA3OGZmLiAgKi8KKyNkZWZpbmUgUkVfU1lOVEFYX0VEIFJFX1NZTlRBWF9QT1NJWF9CQVNJQworCisjZGVmaW5lIFJFX1NZTlRBWF9TRUQgUkVfU1lOVEFYX1BPU0lYX0JBU0lDCisKKy8qIFN5bnRheCBiaXRzIGNvbW1vbiB0byBib3RoIGJhc2ljIGFuZCBleHRlbmRlZCBQT1NJWCByZWdleCBzeW50YXguICAqLworI2RlZmluZSBfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTgkJCQkJCVwKKyAgKFJFX0NIQVJfQ0xBU1NFUyB8IFJFX0RPVF9ORVdMSU5FICAgICAgfCBSRV9ET1RfTk9UX05VTEwJCVwKKyAgIHwgUkVfSU5URVJWQUxTICB8IFJFX05PX0VNUFRZX1JBTkdFUykKKworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfQkFTSUMJCQkJCQlcCisgIChfUkVfU1lOVEFYX1BPU0lYX0NPTU1PTiB8IFJFX0JLX1BMVVNfUU0gfCBSRV9DT05URVhUX0lOVkFMSURfRFVQKQorCisvKiBEaWZmZXJzIGZyb20gLi4uX1BPU0lYX0JBU0lDIG9ubHkgaW4gdGhhdCBSRV9CS19QTFVTX1FNIGJlY29tZXMKKyAgIFJFX0xJTUlURURfT1BTLCBpLmUuLCBcPyBcKyBcfCBhcmUgbm90IHJlY29nbml6ZWQuICBBY3R1YWxseSwgdGhpcworICAgaXNuJ3QgbWluaW1hbCwgc2luY2Ugb3RoZXIgb3BlcmF0b3JzLCBzdWNoIGFzIFxgLCBhcmVuJ3QgZGlzYWJsZWQuICAqLworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfTUlOSU1BTF9CQVNJQwkJCQkJXAorICAoX1JFX1NZTlRBWF9QT1NJWF9DT01NT04gfCBSRV9MSU1JVEVEX09QUykKKworI2RlZmluZSBSRV9TWU5UQVhfUE9TSVhfRVhURU5ERUQJCQkJCVwKKyAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OICB8IFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUwkJCVwKKyAgIHwgUkVfQ09OVEVYVF9JTkRFUF9PUFMgICB8IFJFX05PX0JLX0JSQUNFUwkJCQlcCisgICB8IFJFX05PX0JLX1BBUkVOUyAgICAgICAgfCBSRV9OT19CS19WQkFSCQkJCVwKKyAgIHwgUkVfQ09OVEVYVF9JTlZBTElEX09QUyB8IFJFX1VOTUFUQ0hFRF9SSUdIVF9QQVJFTl9PUkQpCisKKy8qIERpZmZlcnMgZnJvbSAuLi5fUE9TSVhfRVhURU5ERUQgaW4gdGhhdCBSRV9DT05URVhUX0lOREVQX09QUyBpcworICAgcmVtb3ZlZCBhbmQgUkVfTk9fQktfUkVGUyBpcyBhZGRlZC4gICovCisjZGVmaW5lIFJFX1NZTlRBWF9QT1NJWF9NSU5JTUFMX0VYVEVOREVECQkJCVwKKyAgKF9SRV9TWU5UQVhfUE9TSVhfQ09NTU9OICB8IFJFX0NPTlRFWFRfSU5ERVBfQU5DSE9SUwkJCVwKKyAgIHwgUkVfQ09OVEVYVF9JTlZBTElEX09QUyB8IFJFX05PX0JLX0JSQUNFUwkJCQlcCisgICB8IFJFX05PX0JLX1BBUkVOUyAgICAgICAgfCBSRV9OT19CS19SRUZTCQkJCVwKKyAgIHwgUkVfTk9fQktfVkJBUgkgICAgfCBSRV9VTk1BVENIRURfUklHSFRfUEFSRU5fT1JEKQorLyogW1tbZW5kIHN5bnRheGVzXV1dICovCisMCisvKiBNYXhpbXVtIG51bWJlciBvZiBkdXBsaWNhdGVzIGFuIGludGVydmFsIGNhbiBhbGxvdy4gIFNvbWUgc3lzdGVtcworICAgKGVycm9uZW91c2x5KSBkZWZpbmUgdGhpcyBpbiBvdGhlciBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSB3YW50IG91cgorICAgdmFsdWUsIHNvIHJlbW92ZSBhbnkgcHJldmlvdXMgZGVmaW5lLiAgKi8KKyMgaWZkZWYgUkVfRFVQX01BWAorIyAgdW5kZWYgUkVfRFVQX01BWAorIyBlbmRpZgorLyogSWYgc2l6ZW9mKGludCkgPT0gMiwgdGhlbiAoKDEgPDwgMTUpIC0gMSkgb3ZlcmZsb3dzLiAgKi8KKyMgZGVmaW5lIFJFX0RVUF9NQVggKDB4N2ZmZikKKyNlbmRpZgorCisKKy8qIFBPU0lYIGBjZmxhZ3MnIGJpdHMgKGkuZS4sIGluZm9ybWF0aW9uIGZvciBgcmVnY29tcCcpLiAgKi8KKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHVzZSBleHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4LgorICAgSWYgbm90IHNldCwgdGhlbiB1c2UgYmFzaWMgcmVndWxhciBleHByZXNzaW9uIHN5bnRheC4gICovCisjZGVmaW5lIFJFR19FWFRFTkRFRCAxCisKKy8qIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiBpZ25vcmUgY2FzZSB3aGVuIG1hdGNoaW5nLgorICAgSWYgbm90IHNldCwgdGhlbiBjYXNlIGlzIHNpZ25pZmljYW50LiAgKi8KKyNkZWZpbmUgUkVHX0lDQVNFIChSRUdfRVhURU5ERUQgPDwgMSkKKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIGFuY2hvcnMgZG8gbm90IG1hdGNoIGF0IG5ld2xpbmUKKyAgICAgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nLgorICAgSWYgbm90IHNldCwgdGhlbiBhbmNob3JzIGRvIG1hdGNoIGF0IG5ld2xpbmVzLiAgKi8KKyNkZWZpbmUgUkVHX05FV0xJTkUgKFJFR19JQ0FTRSA8PCAxKQorCisvKiBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZW4gcmVwb3J0IG9ubHkgc3VjY2VzcyBvciBmYWlsIGluIHJlZ2V4ZWMuCisgICBJZiBub3Qgc2V0LCB0aGVuIHJldHVybnMgZGlmZmVyIGJldHdlZW4gbm90IG1hdGNoaW5nIGFuZCBlcnJvcnMuICAqLworI2RlZmluZSBSRUdfTk9TVUIgKFJFR19ORVdMSU5FIDw8IDEpCisKKworLyogUE9TSVggYGVmbGFncycgYml0cyAoaS5lLiwgaW5mb3JtYXRpb24gZm9yIHJlZ2V4ZWMpLiAgKi8KKworLyogSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGVuIHRoZSBiZWdpbm5pbmctb2YtbGluZSBvcGVyYXRvciBkb2Vzbid0IG1hdGNoCisgICAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyAocHJlc3VtYWJseSBiZWNhdXNlIGl0J3Mgbm90IHRoZQorICAgICBiZWdpbm5pbmcgb2YgYSBsaW5lKS4KKyAgIElmIG5vdCBzZXQsIHRoZW4gdGhlIGJlZ2lubmluZy1vZi1saW5lIG9wZXJhdG9yIGRvZXMgbWF0Y2ggdGhlCisgICAgIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLiAgKi8KKyNkZWZpbmUgUkVHX05PVEJPTCAxCisKKy8qIExpa2UgUkVHX05PVEJPTCwgZXhjZXB0IGZvciB0aGUgZW5kLW9mLWxpbmUuICAqLworI2RlZmluZSBSRUdfTk9URU9MICgxIDw8IDEpCisKKy8qIFVzZSBQTUFUQ0hbMF0gdG8gZGVsaW1pdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc2VhcmNoIGluIHRoZQorICAgYnVmZmVyLiAgKi8KKyNkZWZpbmUgUkVHX1NUQVJURU5EICgxIDw8IDIpCisKKworLyogSWYgYW55IGVycm9yIGNvZGVzIGFyZSByZW1vdmVkLCBjaGFuZ2VkLCBvciBhZGRlZCwgdXBkYXRlIHRoZQorICAgYHJlX2Vycm9yX21zZycgdGFibGUgaW4gcmVnZXguYy4gICovCit0eXBlZGVmIGVudW0KK3sKKyNpZiBkZWZpbmVkIF9YT1BFTl9TT1VSQ0UgfHwgZGVmaW5lZCBfX1VTRV9YT1BFTjJLCisgIFJFR19FTk9TWVMgPSAtMSwJLyogVGhpcyB3aWxsIG5ldmVyIGhhcHBlbiBmb3IgdGhpcyBpbXBsZW1lbnRhdGlvbi4gICovCisjZW5kaWYKKworICBSRUdfTk9FUlJPUiA9IDAsCS8qIFN1Y2Nlc3MuICAqLworICBSRUdfTk9NQVRDSCwJCS8qIERpZG4ndCBmaW5kIGEgbWF0Y2ggKGZvciByZWdleGVjKS4gICovCisKKyAgLyogUE9TSVggcmVnY29tcCByZXR1cm4gZXJyb3IgY29kZXMuICAoSW4gdGhlIG9yZGVyIGxpc3RlZCBpbiB0aGUKKyAgICAgc3RhbmRhcmQuKSAgKi8KKyAgUkVHX0JBRFBBVCwJCS8qIEludmFsaWQgcGF0dGVybi4gICovCisgIFJFR19FQ09MTEFURSwJCS8qIEluYWxpZCBjb2xsYXRpbmcgZWxlbWVudC4gICovCisgIFJFR19FQ1RZUEUsCQkvKiBJbnZhbGlkIGNoYXJhY3RlciBjbGFzcyBuYW1lLiAgKi8KKyAgUkVHX0VFU0NBUEUsCQkvKiBUcmFpbGluZyBiYWNrc2xhc2guICAqLworICBSRUdfRVNVQlJFRywJCS8qIEludmFsaWQgYmFjayByZWZlcmVuY2UuICAqLworICBSRUdfRUJSQUNLLAkJLyogVW5tYXRjaGVkIGxlZnQgYnJhY2tldC4gICovCisgIFJFR19FUEFSRU4sCQkvKiBQYXJlbnRoZXNpcyBpbWJhbGFuY2UuICAqLworICBSRUdfRUJSQUNFLAkJLyogVW5tYXRjaGVkIFx7LiAgKi8KKyAgUkVHX0JBREJSLAkJLyogSW52YWxpZCBjb250ZW50cyBvZiBce1x9LiAgKi8KKyAgUkVHX0VSQU5HRSwJCS8qIEludmFsaWQgcmFuZ2UgZW5kLiAgKi8KKyAgUkVHX0VTUEFDRSwJCS8qIFJhbiBvdXQgb2YgbWVtb3J5LiAgKi8KKyAgUkVHX0JBRFJQVCwJCS8qIE5vIHByZWNlZGluZyByZSBmb3IgcmVwZXRpdGlvbiBvcC4gICovCisKKyAgLyogRXJyb3IgY29kZXMgd2UndmUgYWRkZWQuICAqLworICBSRUdfRUVORCwJCS8qIFByZW1hdHVyZSBlbmQuICAqLworICBSRUdfRVNJWkUsCQkvKiBDb21waWxlZCBwYXR0ZXJuIGJpZ2dlciB0aGFuIDJeMTYgYnl0ZXMuICAqLworICBSRUdfRVJQQVJFTgkJLyogVW5tYXRjaGVkICkgb3IgXCk7IG5vdCByZXR1cm5lZCBmcm9tIHJlZ2NvbXAuICAqLworfSByZWdfZXJyY29kZV90OworDAorLyogVGhpcyBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgY29tcGlsZWQgcGF0dGVybi4gIEJlZm9yZSBjYWxsaW5nCisgICB0aGUgcGF0dGVybiBjb21waWxlciwgdGhlIGZpZWxkcyBgYnVmZmVyJywgYGFsbG9jYXRlZCcsIGBmYXN0bWFwJywKKyAgIGB0cmFuc2xhdGUnLCBhbmQgYG5vX3N1YicgY2FuIGJlIHNldC4gIEFmdGVyIHRoZSBwYXR0ZXJuIGhhcyBiZWVuCisgICBjb21waWxlZCwgdGhlIGByZV9uc3ViJyBmaWVsZCBpcyBhdmFpbGFibGUuICBBbGwgb3RoZXIgZmllbGRzIGFyZQorICAgcHJpdmF0ZSB0byB0aGUgcmVnZXggcm91dGluZXMuICAqLworCisjaWZuZGVmIFJFX1RSQU5TTEFURV9UWVBFCisjIGRlZmluZSBfX1JFX1RSQU5TTEFURV9UWVBFIHVuc2lnbmVkIGNoYXIgKgorIyBpZmRlZiBfX1VTRV9HTlUKKyMgIGRlZmluZSBSRV9UUkFOU0xBVEVfVFlQRSBfX1JFX1RSQU5TTEFURV9UWVBFCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgX19SRVBCX1BSRUZJWChuYW1lKSBuYW1lCisjZWxzZQorIyBkZWZpbmUgX19SRVBCX1BSRUZJWChuYW1lKSBfXyMjbmFtZQorI2VuZGlmCisKK3N0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlcgoreworICAvKiBTcGFjZSB0aGF0IGhvbGRzIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAgSXQgaXMgZGVjbGFyZWQgYXMKKyAgICAgYHVuc2lnbmVkIGNoYXIgKicgYmVjYXVzZSBpdHMgZWxlbWVudHMgYXJlIHNvbWV0aW1lcyB1c2VkIGFzCisgICAgIGFycmF5IGluZGV4ZXMuICAqLworICB1bnNpZ25lZCBjaGFyICpfX1JFUEJfUFJFRklYKGJ1ZmZlcik7CisKKyAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIHdoaWNoIGBidWZmZXInIHBvaW50cy4gICovCisgIHVuc2lnbmVkIGxvbmcgaW50IF9fUkVQQl9QUkVGSVgoYWxsb2NhdGVkKTsKKworICAvKiBOdW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgdXNlZCBpbiBgYnVmZmVyJy4gICovCisgIHVuc2lnbmVkIGxvbmcgaW50IF9fUkVQQl9QUkVGSVgodXNlZCk7CisKKyAgLyogU3ludGF4IHNldHRpbmcgd2l0aCB3aGljaCB0aGUgcGF0dGVybiB3YXMgY29tcGlsZWQuICAqLworICByZWdfc3ludGF4X3QgX19SRVBCX1BSRUZJWChzeW50YXgpOworCisgIC8qIFBvaW50ZXIgdG8gYSBmYXN0bWFwLCBpZiBhbnksIG90aGVyd2lzZSB6ZXJvLiAgcmVfc2VhcmNoIHVzZXMgdGhlCisgICAgIGZhc3RtYXAsIGlmIHRoZXJlIGlzIG9uZSwgdG8gc2tpcCBvdmVyIGltcG9zc2libGUgc3RhcnRpbmcgcG9pbnRzCisgICAgIGZvciBtYXRjaGVzLiAgKi8KKyAgY2hhciAqX19SRVBCX1BSRUZJWChmYXN0bWFwKTsKKworICAvKiBFaXRoZXIgYSB0cmFuc2xhdGUgdGFibGUgdG8gYXBwbHkgdG8gYWxsIGNoYXJhY3RlcnMgYmVmb3JlCisgICAgIGNvbXBhcmluZyB0aGVtLCBvciB6ZXJvIGZvciBubyB0cmFuc2xhdGlvbi4gIFRoZSB0cmFuc2xhdGlvbiBpcworICAgICBhcHBsaWVkIHRvIGEgcGF0dGVybiB3aGVuIGl0IGlzIGNvbXBpbGVkIGFuZCB0byBhIHN0cmluZyB3aGVuIGl0CisgICAgIGlzIG1hdGNoZWQuICAqLworICBfX1JFX1RSQU5TTEFURV9UWVBFIF9fUkVQQl9QUkVGSVgodHJhbnNsYXRlKTsKKworICAvKiBOdW1iZXIgb2Ygc3ViZXhwcmVzc2lvbnMgZm91bmQgYnkgdGhlIGNvbXBpbGVyLiAgKi8KKyAgc2l6ZV90IHJlX25zdWI7CisKKyAgLyogWmVybyBpZiB0aGlzIHBhdHRlcm4gY2Fubm90IG1hdGNoIHRoZSBlbXB0eSBzdHJpbmcsIG9uZSBlbHNlLgorICAgICBXZWxsLCBpbiB0cnV0aCBpdCdzIHVzZWQgb25seSBpbiBgcmVfc2VhcmNoXzInLCB0byBzZWUgd2hldGhlciBvcgorICAgICBub3Qgd2Ugc2hvdWxkIHVzZSB0aGUgZmFzdG1hcCwgc28gd2UgZG9uJ3Qgc2V0IHRoaXMgYWJzb2x1dGVseQorICAgICBwZXJmZWN0bHk7IHNlZSBgcmVfY29tcGlsZV9mYXN0bWFwJyAodGhlIGBkdXBsaWNhdGUnIGNhc2UpLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChjYW5fYmVfbnVsbCkgOiAxOworCisgIC8qIElmIFJFR1NfVU5BTExPQ0FURUQsIGFsbG9jYXRlIHNwYWNlIGluIHRoZSBgcmVncycgc3RydWN0dXJlCisgICAgIGZvciBgbWF4IChSRV9OUkVHUywgcmVfbnN1YiArIDEpJyBncm91cHMuCisgICAgIElmIFJFR1NfUkVBTExPQ0FURSwgcmVhbGxvY2F0ZSBzcGFjZSBpZiBuZWNlc3NhcnkuCisgICAgIElmIFJFR1NfRklYRUQsIHVzZSB3aGF0J3MgdGhlcmUuICAqLworI2lmZGVmIF9fVVNFX0dOVQorIyBkZWZpbmUgUkVHU19VTkFMTE9DQVRFRCAwCisjIGRlZmluZSBSRUdTX1JFQUxMT0NBVEUgMQorIyBkZWZpbmUgUkVHU19GSVhFRCAyCisjZW5kaWYKKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChyZWdzX2FsbG9jYXRlZCkgOiAyOworCisgIC8qIFNldCB0byB6ZXJvIHdoZW4gYHJlZ2V4X2NvbXBpbGUnIGNvbXBpbGVzIGEgcGF0dGVybjsgc2V0IHRvIG9uZQorICAgICBieSBgcmVfY29tcGlsZV9mYXN0bWFwJyBpZiBpdCB1cGRhdGVzIHRoZSBmYXN0bWFwLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChmYXN0bWFwX2FjY3VyYXRlKSA6IDE7CisKKyAgLyogSWYgc2V0LCBgcmVfbWF0Y2hfMicgZG9lcyBub3QgcmV0dXJuIGluZm9ybWF0aW9uIGFib3V0CisgICAgIHN1YmV4cHJlc3Npb25zLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChub19zdWIpIDogMTsKKworICAvKiBJZiBzZXQsIGEgYmVnaW5uaW5nLW9mLWxpbmUgYW5jaG9yIGRvZXNuJ3QgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZworICAgICBvZiB0aGUgc3RyaW5nLiAgKi8KKyAgdW5zaWduZWQgX19SRVBCX1BSRUZJWChub3RfYm9sKSA6IDE7CisKKyAgLyogU2ltaWxhcmx5IGZvciBhbiBlbmQtb2YtbGluZSBhbmNob3IuICAqLworICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKG5vdF9lb2wpIDogMTsKKworICAvKiBJZiB0cnVlLCBhbiBhbmNob3IgYXQgYSBuZXdsaW5lIG1hdGNoZXMuICAqLworICB1bnNpZ25lZCBfX1JFUEJfUFJFRklYKG5ld2xpbmVfYW5jaG9yKSA6IDE7Cit9OworCit0eXBlZGVmIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciByZWdleF90OworDAorLyogVHlwZSBmb3IgYnl0ZSBvZmZzZXRzIHdpdGhpbiB0aGUgc3RyaW5nLiAgUE9TSVggbWFuZGF0ZXMgdGhpcy4gICovCit0eXBlZGVmIGludCByZWdvZmZfdDsKKworCisjaWZkZWYgX19VU0VfR05VCisvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgd2Ugc3RvcmUgcmVnaXN0ZXIgbWF0Y2ggZGF0YSBpbi4gIFNlZQorICAgcmVnZXgudGV4aW5mbyBmb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHdoYXQgcmVnaXN0ZXJzIG1hdGNoLiAgKi8KK3N0cnVjdCByZV9yZWdpc3RlcnMKK3sKKyAgdW5zaWduZWQgbnVtX3JlZ3M7CisgIHJlZ29mZl90ICpzdGFydDsKKyAgcmVnb2ZmX3QgKmVuZDsKK307CisKKworLyogSWYgYHJlZ3NfYWxsb2NhdGVkJyBpcyBSRUdTX1VOQUxMT0NBVEVEIGluIHRoZSBwYXR0ZXJuIGJ1ZmZlciwKKyAgIGByZV9tYXRjaF8yJyByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGF0IGxlYXN0IHRoaXMgbWFueSByZWdpc3RlcnMKKyAgIHRoZSBmaXJzdCB0aW1lIGEgYHJlZ3MnIHN0cnVjdHVyZSBpcyBwYXNzZWQuICAqLworIyBpZm5kZWYgUkVfTlJFR1MKKyMgIGRlZmluZSBSRV9OUkVHUyAzMAorIyBlbmRpZgorI2VuZGlmCisKKworLyogUE9TSVggc3BlY2lmaWNhdGlvbiBmb3IgcmVnaXN0ZXJzLiAgQXNpZGUgZnJvbSB0aGUgZGlmZmVyZW50IG5hbWVzIHRoYW4KKyAgIGByZV9yZWdpc3RlcnMnLCBQT1NJWCB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdHVyZXMsIGluc3RlYWQgb2YgYQorICAgc3RydWN0dXJlIG9mIGFycmF5cy4gICovCit0eXBlZGVmIHN0cnVjdAoreworICByZWdvZmZfdCBybV9zbzsgIC8qIEJ5dGUgb2Zmc2V0IGZyb20gc3RyaW5nJ3Mgc3RhcnQgdG8gc3Vic3RyaW5nJ3Mgc3RhcnQuICAqLworICByZWdvZmZfdCBybV9lbzsgIC8qIEJ5dGUgb2Zmc2V0IGZyb20gc3RyaW5nJ3Mgc3RhcnQgdG8gc3Vic3RyaW5nJ3MgZW5kLiAgKi8KK30gcmVnbWF0Y2hfdDsKKwwKKy8qIERlY2xhcmF0aW9ucyBmb3Igcm91dGluZXMuICAqLworCisjaWZkZWYgX19VU0VfR05VCisvKiBTZXRzIHRoZSBjdXJyZW50IGRlZmF1bHQgc3ludGF4IHRvIFNZTlRBWCwgYW5kIHJldHVybiB0aGUgb2xkIHN5bnRheC4KKyAgIFlvdSBjYW4gYWxzbyBzaW1wbHkgYXNzaWduIHRvIHRoZSBgcmVfc3ludGF4X29wdGlvbnMnIHZhcmlhYmxlLiAgKi8KK2V4dGVybiByZWdfc3ludGF4X3QgcmVfc2V0X3N5bnRheCAocmVnX3N5bnRheF90IF9fc3ludGF4KTsKKworLyogQ29tcGlsZSB0aGUgcmVndWxhciBleHByZXNzaW9uIFBBVFRFUk4sIHdpdGggbGVuZ3RoIExFTkdUSAorICAgYW5kIHN5bnRheCBnaXZlbiBieSB0aGUgZ2xvYmFsIGByZV9zeW50YXhfb3B0aW9ucycsIGludG8gdGhlIGJ1ZmZlcgorICAgQlVGRkVSLiAgUmV0dXJuIE5VTEwgaWYgc3VjY2Vzc2Z1bCwgYW5kIGFuIGVycm9yIHN0cmluZyBpZiBub3QuICAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKnJlX2NvbXBpbGVfcGF0dGVybiAoY29uc3QgY2hhciAqX19wYXR0ZXJuLCBzaXplX3QgX19sZW5ndGgsCisJCQkJICAgICAgIHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIpOworCisKKy8qIENvbXBpbGUgYSBmYXN0bWFwIGZvciB0aGUgY29tcGlsZWQgcGF0dGVybiBpbiBCVUZGRVI7IHVzZWQgdG8KKyAgIGFjY2VsZXJhdGUgc2VhcmNoZXMuICBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsIGFuZCAtMiBpZiB3YXMgYW4KKyAgIGludGVybmFsIGVycm9yLiAgKi8KK2V4dGVybiBpbnQgcmVfY29tcGlsZV9mYXN0bWFwIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyKTsKKworCisvKiBTZWFyY2ggaW4gdGhlIHN0cmluZyBTVFJJTkcgKHdpdGggbGVuZ3RoIExFTkdUSCkgZm9yIHRoZSBwYXR0ZXJuCisgICBjb21waWxlZCBpbnRvIEJVRkZFUi4gIFN0YXJ0IHNlYXJjaGluZyBhdCBwb3NpdGlvbiBTVEFSVCwgZm9yIFJBTkdFCisgICBjaGFyYWN0ZXJzLiAgUmV0dXJuIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbWF0Y2gsIC0xIGZvciBubworICAgbWF0Y2gsIG9yIC0yIGZvciBhbiBpbnRlcm5hbCBlcnJvci4gIEFsc28gcmV0dXJuIHJlZ2lzdGVyCisgICBpbmZvcm1hdGlvbiBpbiBSRUdTIChpZiBSRUdTIGFuZCBCVUZGRVItPm5vX3N1YiBhcmUgbm9uemVybykuICAqLworZXh0ZXJuIGludCByZV9zZWFyY2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsIGNvbnN0IGNoYXIgKl9fY3N0cmluZywKKwkJICAgICAgaW50IF9fbGVuZ3RoLCBpbnQgX19zdGFydCwgaW50IF9fcmFuZ2UsCisJCSAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncyk7CisKKworLyogTGlrZSBgcmVfc2VhcmNoJywgYnV0IHNlYXJjaCBpbiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZAorICAgU1RSSU5HMi4gIEFsc28sIHN0b3Agc2VhcmNoaW5nIGF0IGluZGV4IFNUQVJUICsgU1RPUC4gICovCitleHRlcm4gaW50IHJlX3NlYXJjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJY29uc3QgY2hhciAqX19zdHJpbmcxLCBpbnQgX19sZW5ndGgxLAorCQkJY29uc3QgY2hhciAqX19zdHJpbmcyLCBpbnQgX19sZW5ndGgyLCBpbnQgX19zdGFydCwKKwkJCWludCBfX3JhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MsIGludCBfX3N0b3ApOworCisKKy8qIExpa2UgYHJlX3NlYXJjaCcsIGJ1dCByZXR1cm4gaG93IG1hbnkgY2hhcmFjdGVycyBpbiBTVFJJTkcgdGhlIHJlZ2V4cAorICAgaW4gQlVGRkVSIG1hdGNoZWQsIHN0YXJ0aW5nIGF0IHBvc2l0aW9uIFNUQVJULiAgKi8KK2V4dGVybiBpbnQgcmVfbWF0Y2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqX19idWZmZXIsIGNvbnN0IGNoYXIgKl9fY3N0cmluZywKKwkJICAgICBpbnQgX19sZW5ndGgsIGludCBfX3N0YXJ0LCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpfX3JlZ3MpOworCisKKy8qIFJlbGF0ZXMgdG8gYHJlX21hdGNoJyBhcyBgcmVfc2VhcmNoXzInIHJlbGF0ZXMgdG8gYHJlX3NlYXJjaCcuICAqLworZXh0ZXJuIGludCByZV9tYXRjaF8yIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkgICAgICAgY29uc3QgY2hhciAqX19zdHJpbmcxLCBpbnQgX19sZW5ndGgxLAorCQkgICAgICAgY29uc3QgY2hhciAqX19zdHJpbmcyLCBpbnQgX19sZW5ndGgyLCBpbnQgX19zdGFydCwKKwkJICAgICAgIHN0cnVjdCByZV9yZWdpc3RlcnMgKl9fcmVncywgaW50IF9fc3RvcCk7CisKKworLyogU2V0IFJFR1MgdG8gaG9sZCBOVU1fUkVHUyByZWdpc3RlcnMsIHN0b3JpbmcgdGhlbSBpbiBTVEFSVFMgYW5kCisgICBFTkRTLiAgU3Vic2VxdWVudCBtYXRjaGVzIHVzaW5nIEJVRkZFUiBhbmQgUkVHUyB3aWxsIHVzZSB0aGlzIG1lbW9yeQorICAgZm9yIHJlY29yZGluZyByZWdpc3RlciBpbmZvcm1hdGlvbi4gIFNUQVJUUyBhbmQgRU5EUyBtdXN0IGJlCisgICBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MsIGFuZCBtdXN0IGVhY2ggYmUgYXQgbGVhc3QgYE5VTV9SRUdTICogc2l6ZW9mCisgICAocmVnb2ZmX3QpJyBieXRlcyBsb25nLgorCisgICBJZiBOVU1fUkVHUyA9PSAwLCB0aGVuIHN1YnNlcXVlbnQgbWF0Y2hlcyBzaG91bGQgYWxsb2NhdGUgdGhlaXIgb3duCisgICByZWdpc3RlciBkYXRhLgorCisgICBVbmxlc3MgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSBmaXJzdCBzZWFyY2ggb3IgbWF0Y2ggdXNpbmcKKyAgIFBBVFRFUk5fQlVGRkVSIHdpbGwgYWxsb2NhdGUgaXRzIG93biByZWdpc3RlciBkYXRhLCB3aXRob3V0CisgICBmcmVlaW5nIHRoZSBvbGQgZGF0YS4gICovCitleHRlcm4gdm9pZCByZV9zZXRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKl9fYnVmZmVyLAorCQkJICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqX19yZWdzLAorCQkJICAgICAgdW5zaWduZWQgaW50IF9fbnVtX3JlZ3MsCisJCQkgICAgICByZWdvZmZfdCAqX19zdGFydHMsIHJlZ29mZl90ICpfX2VuZHMpOworI2VuZGlmCS8qIFVzZSBHTlUgKi8KKworI2lmIGRlZmluZWQgX1JFR0VYX1JFX0NPTVAgfHwgKGRlZmluZWQgX0xJQkMgJiYgZGVmaW5lZCBfX1VTRV9CU0QpCisjIGlmbmRlZiBfQ1JBWQorLyogNC4yIGJzZCBjb21wYXRpYmlsaXR5LiAgKi8KK2V4dGVybiBjaGFyICpyZV9jb21wIChjb25zdCBjaGFyICopOworZXh0ZXJuIGludCByZV9leGVjIChjb25zdCBjaGFyICopOworIyBlbmRpZgorI2VuZGlmCisKKy8qIEdDQyAyLjk1IGFuZCBsYXRlciBoYXZlICJfX3Jlc3RyaWN0IjsgQzk5IGNvbXBpbGVycyBoYXZlCisgICAicmVzdHJpY3QiLCBhbmQgImNvbmZpZ3VyZSIgbWF5IGhhdmUgZGVmaW5lZCAicmVzdHJpY3QiLiAgKi8KKyNpZm5kZWYgX19yZXN0cmljdAorIyBpZiAhICgyIDwgX19HTlVDX18gfHwgKDIgPT0gX19HTlVDX18gJiYgOTUgPD0gX19HTlVDX01JTk9SX18pKQorIyAgaWYgZGVmaW5lZCByZXN0cmljdCB8fCAxOTk5MDFMIDw9IF9fU1REQ19WRVJTSU9OX18KKyMgICBkZWZpbmUgX19yZXN0cmljdCByZXN0cmljdAorIyAgZWxzZQorIyAgIGRlZmluZSBfX3Jlc3RyaWN0CisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisvKiBnY2MgMy4xIGFuZCB1cCBzdXBwb3J0IHRoZSBbcmVzdHJpY3RdIHN5bnRheC4gICovCisjaWZuZGVmIF9fcmVzdHJpY3RfYXJyCisjIGlmIChfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPj0gMSkpIFwKKyAgICAgJiYgIWRlZmluZWQgX19HTlVHX18KKyMgIGRlZmluZSBfX3Jlc3RyaWN0X2FyciBfX3Jlc3RyaWN0CisjIGVsc2UKKyMgIGRlZmluZSBfX3Jlc3RyaWN0X2FycgorIyBlbmRpZgorI2VuZGlmCisKKy8qIFBPU0lYIGNvbXBhdGliaWxpdHkuICAqLworZXh0ZXJuIGludCByZWdjb21wIChyZWdleF90ICpfX3Jlc3RyaWN0IF9fcHJlZywKKwkJICAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXR0ZXJuLAorCQkgICAgaW50IF9fY2ZsYWdzKTsKKworZXh0ZXJuIGludCByZWdleGVjIChjb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IF9fcHJlZywKKwkJICAgIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19jc3RyaW5nLCBzaXplX3QgX19ubWF0Y2gsCisJCSAgICByZWdtYXRjaF90IF9fcG1hdGNoW19fcmVzdHJpY3RfYXJyXSwKKwkJICAgIGludCBfX2VmbGFncyk7CisKK2V4dGVybiBzaXplX3QgcmVnZXJyb3IgKGludCBfX2VycmNvZGUsIGNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgX19wcmVnLAorCQkJY2hhciAqX19yZXN0cmljdCBfX2VycmJ1Ziwgc2l6ZV90IF9fZXJyYnVmX3NpemUpOworCitleHRlcm4gdm9pZCByZWdmcmVlIChyZWdleF90ICpfX3ByZWcpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCS8qIEMrKyAqLworCisjZW5kaWYgLyogcmVnZXguaCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmMgYi9jb21wYXQvcmVnZXgvcmVnZXhfaW50ZXJuYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDEyMWYyCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmMKQEAgLTAsMCArMSwxNzQ0IEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgICAwMjExMC0xMzAxIFVTQS4gICovCisKK3N0YXRpYyB2b2lkIHJlX3N0cmluZ19jb25zdHJ1Y3RfY29tbW9uIChjb25zdCBjaGFyICpzdHIsIGludCBsZW4sCisJCQkJCXJlX3N0cmluZ190ICpwc3RyLAorCQkJCQlSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgaW50IGljYXNlLAorCQkJCQljb25zdCByZV9kZmFfdCAqZGZhKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICpjcmVhdGVfY2lfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkJCQkgIHVuc2lnbmVkIGludCBoYXNoKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICpjcmVhdGVfY2RfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLAorCQkJCQkgIHVuc2lnbmVkIGludCBjb250ZXh0LAorCQkJCQkgIHVuc2lnbmVkIGludCBoYXNoKSBpbnRlcm5hbF9mdW5jdGlvbjsKKworI2lmZGVmIEdBV0sKKyN1bmRlZiBNQVgJLyogc2FmZXR5ICovCitzdGF0aWMgaW50CitNQVgoc2l6ZV90IGEsIHNpemVfdCBiKQoreworCXJldHVybiAoYSA+IGIgPyBhIDogYik7Cit9CisjZW5kaWYKKwwKKy8qIEZ1bmN0aW9ucyBmb3Igc3RyaW5nIG9wZXJhdGlvbi4gICovCisKKy8qIFRoaXMgZnVuY3Rpb24gYWxsb2NhdGUgdGhlIGJ1ZmZlcnMuICBJdCBpcyBuZWNlc3NhcnkgdG8gY2FsbAorICAgcmVfc3RyaW5nX3JlY29uc3RydWN0IGJlZm9yZSB1c2luZyB0aGUgb2JqZWN0LiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfYWxsb2NhdGUgKHJlX3N0cmluZ190ICpwc3RyLCBjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIGludCBpbml0X2xlbiwKKwkJICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBpbnQgaWNhc2UsIGNvbnN0IHJlX2RmYV90ICpkZmEpCit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICBpbnQgaW5pdF9idWZfbGVuOworCisgIC8qIEVuc3VyZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGZpdHMgaW50byB0aGUgYnVmZmVycy4gICovCisgIGlmIChpbml0X2xlbiA8IGRmYS0+bWJfY3VyX21heCkKKyAgICBpbml0X2xlbiA9IGRmYS0+bWJfY3VyX21heDsKKyAgaW5pdF9idWZfbGVuID0gKGxlbiArIDEgPCBpbml0X2xlbikgPyBsZW4gKyAxOiBpbml0X2xlbjsKKyAgcmVfc3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKHN0ciwgbGVuLCBwc3RyLCB0cmFucywgaWNhc2UsIGRmYSk7CisKKyAgcmV0ID0gcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocHN0ciwgaW5pdF9idWZfbGVuKTsKKyAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiByZXQ7CisKKyAgcHN0ci0+d29yZF9jaGFyID0gZGZhLT53b3JkX2NoYXI7CisgIHBzdHItPndvcmRfb3BzX3VzZWQgPSBkZmEtPndvcmRfb3BzX3VzZWQ7CisgIHBzdHItPm1icyA9IHBzdHItPm1ic19hbGxvY2F0ZWQgPyBwc3RyLT5tYnMgOiAodW5zaWduZWQgY2hhciAqKSBzdHI7CisgIHBzdHItPnZhbGlkX2xlbiA9IChwc3RyLT5tYnNfYWxsb2NhdGVkIHx8IGRmYS0+bWJfY3VyX21heCA+IDEpID8gMCA6IGxlbjsKKyAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IHBzdHItPnZhbGlkX2xlbjsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlIHRoZSBidWZmZXJzLCBhbmQgaW5pdGlhbGl6ZSB0aGVtLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLAorCQkgICAgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zLCBpbnQgaWNhc2UsIGNvbnN0IHJlX2RmYV90ICpkZmEpCit7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICBtZW1zZXQgKHBzdHIsICdcMCcsIHNpemVvZiAocmVfc3RyaW5nX3QpKTsKKyAgcmVfc3RyaW5nX2NvbnN0cnVjdF9jb21tb24gKHN0ciwgbGVuLCBwc3RyLCB0cmFucywgaWNhc2UsIGRmYSk7CisKKyAgaWYgKGxlbiA+IDApCisgICAgeworICAgICAgcmV0ID0gcmVfc3RyaW5nX3JlYWxsb2NfYnVmZmVycyAocHN0ciwgbGVuICsgMSk7CisgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIHJldDsKKyAgICB9CisgIHBzdHItPm1icyA9IHBzdHItPm1ic19hbGxvY2F0ZWQgPyBwc3RyLT5tYnMgOiAodW5zaWduZWQgY2hhciAqKSBzdHI7CisKKyAgaWYgKGljYXNlKQorICAgIHsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJeworCSAgd2hpbGUgKDEpCisJICAgIHsKKwkgICAgICByZXQgPSBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChwc3RyKTsKKwkgICAgICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiByZXQ7CisJICAgICAgaWYgKHBzdHItPnZhbGlkX3Jhd19sZW4gPj0gbGVuKQorCQlicmVhazsKKwkgICAgICBpZiAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT52YWxpZF9sZW4gKyBkZmEtPm1iX2N1cl9tYXgpCisJCWJyZWFrOworCSAgICAgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHBzdHIsIHBzdHItPmJ1ZnNfbGVuICogMik7CisJICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCQlyZXR1cm4gcmV0OworCSAgICB9CisJfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCWJ1aWxkX3VwcGVyX2J1ZmZlciAocHN0cik7CisgICAgfQorICBlbHNlCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwlidWlsZF93Y3NfYnVmZmVyIChwc3RyKTsKKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KKwl7CisJICBpZiAodHJhbnMgIT0gTlVMTCkKKwkgICAgcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHBzdHIpOworCSAgZWxzZQorCSAgICB7CisJICAgICAgcHN0ci0+dmFsaWRfbGVuID0gcHN0ci0+YnVmc19sZW47CisJICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IHBzdHItPmJ1ZnNfbGVuOworCSAgICB9CisJfQorICAgIH0KKworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIHJlX3N0cmluZ19hbGxvY2F0ZSwgYW5kIHJlX3N0cmluZ19jb25zdHJ1Y3QuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgbmV3X2J1Zl9sZW4pCit7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIHdpbnRfdCAqbmV3X3djczsKKworICAgICAgLyogQXZvaWQgb3ZlcmZsb3cgaW4gcmVhbGxvYy4gICovCisgICAgICBjb25zdCBzaXplX3QgbWF4X29iamVjdF9zaXplID0gTUFYIChzaXplb2YgKHdpbnRfdCksIHNpemVvZiAoaW50KSk7CisgICAgICBpZiAoQkUgKFNJWkVfTUFYIC8gbWF4X29iamVjdF9zaXplIDwgbmV3X2J1Zl9sZW4sIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworCisgICAgICBuZXdfd2NzID0gcmVfcmVhbGxvYyAocHN0ci0+d2NzLCB3aW50X3QsIG5ld19idWZfbGVuKTsKKyAgICAgIGlmIChCRSAobmV3X3djcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHBzdHItPndjcyA9IG5ld193Y3M7CisgICAgICBpZiAocHN0ci0+b2Zmc2V0cyAhPSBOVUxMKQorCXsKKwkgIGludCAqbmV3X29mZnNldHMgPSByZV9yZWFsbG9jIChwc3RyLT5vZmZzZXRzLCBpbnQsIG5ld19idWZfbGVuKTsKKwkgIGlmIChCRSAobmV3X29mZnNldHMgPT0gTlVMTCwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCSAgcHN0ci0+b2Zmc2V0cyA9IG5ld19vZmZzZXRzOworCX0KKyAgICB9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisgIGlmIChwc3RyLT5tYnNfYWxsb2NhdGVkKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKm5ld19tYnMgPSByZV9yZWFsbG9jIChwc3RyLT5tYnMsIHVuc2lnbmVkIGNoYXIsCisJCQkJCSAgIG5ld19idWZfbGVuKTsKKyAgICAgIGlmIChCRSAobmV3X21icyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIHBzdHItPm1icyA9IG5ld19tYnM7CisgICAgfQorICBwc3RyLT5idWZzX2xlbiA9IG5ld19idWZfbGVuOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfY29uc3RydWN0X2NvbW1vbiAoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCByZV9zdHJpbmdfdCAqcHN0ciwKKwkJCSAgICBSRV9UUkFOU0xBVEVfVFlQRSB0cmFucywgaW50IGljYXNlLAorCQkJICAgIGNvbnN0IHJlX2RmYV90ICpkZmEpCit7CisgIHBzdHItPnJhd19tYnMgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHI7CisgIHBzdHItPmxlbiA9IGxlbjsKKyAgcHN0ci0+cmF3X2xlbiA9IGxlbjsKKyAgcHN0ci0+dHJhbnMgPSB0cmFuczsKKyAgcHN0ci0+aWNhc2UgPSBpY2FzZSA/IDEgOiAwOworICBwc3RyLT5tYnNfYWxsb2NhdGVkID0gKHRyYW5zICE9IE5VTEwgfHwgaWNhc2UpOworICBwc3RyLT5tYl9jdXJfbWF4ID0gZGZhLT5tYl9jdXJfbWF4OworICBwc3RyLT5pc191dGY4ID0gZGZhLT5pc191dGY4OworICBwc3RyLT5tYXBfbm90YXNjaWkgPSBkZmEtPm1hcF9ub3Rhc2NpaTsKKyAgcHN0ci0+c3RvcCA9IHBzdHItPmxlbjsKKyAgcHN0ci0+cmF3X3N0b3AgPSBwc3RyLT5zdG9wOworfQorCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKworLyogQnVpbGQgd2lkZSBjaGFyYWN0ZXIgYnVmZmVyIFBTVFItPldDUy4KKyAgIElmIHRoZSBieXRlIHNlcXVlbmNlIG9mIHRoZSBzdHJpbmcgYXJlOgorICAgICA8bWIxPigwKSwgPG1iMT4oMSksIDxtYjI+KDApLCA8bWIyPigxKSwgPHNiMz4KKyAgIFRoZW4gd2lkZSBjaGFyYWN0ZXIgYnVmZmVyIHdpbGwgYmU6CisgICAgIDx3YzE+ICAgLCBXRU9GICAgICwgPHdjMj4gICAsIFdFT0YgICAgLCA8d2MzPgorICAgV2UgdXNlIFdFT0YgZm9yIHBhZGRpbmcsIHRoZXkgaW5kaWNhdGUgdGhhdCB0aGUgcG9zaXRpb24gaXNuJ3QKKyAgIGEgZmlyc3QgYnl0ZSBvZiBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIuCisKKyAgIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgUFNUUi0+VkFMSURfTEVOIGVsZW1lbnRzIGFyZSBhbHJlYWR5CisgICBidWlsdCBhbmQgc3RhcnRzIGZyb20gUFNUUi0+VkFMSURfTEVOLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCitidWlsZF93Y3NfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKK3sKKyNpZmRlZiBfTElCQworICB1bnNpZ25lZCBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKyAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHBzdHItPm1iX2N1cl9tYXgpOworI2Vsc2UKKyAgdW5zaWduZWQgY2hhciBidWZbNjRdOworI2VuZGlmCisgIG1ic3RhdGVfdCBwcmV2X3N0OworICBpbnQgYnl0ZV9pZHgsIGVuZF9pZHgsIHJlbWFpbl9sZW47CisgIHNpemVfdCBtYmNsZW47CisKKyAgLyogQnVpbGQgdGhlIGJ1ZmZlcnMgZnJvbSBwc3RyLT52YWxpZF9sZW4gdG8gZWl0aGVyIHBzdHItPmxlbiBvcgorICAgICBwc3RyLT5idWZzX2xlbi4gICovCisgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT5sZW4pID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisgIGZvciAoYnl0ZV9pZHggPSBwc3RyLT52YWxpZF9sZW47IGJ5dGVfaWR4IDwgZW5kX2lkeDspCisgICAgeworICAgICAgd2NoYXJfdCB3YzsKKyAgICAgIGNvbnN0IGNoYXIgKnA7CisKKyAgICAgIHJlbWFpbl9sZW4gPSBlbmRfaWR4IC0gYnl0ZV9pZHg7CisgICAgICBwcmV2X3N0ID0gcHN0ci0+Y3VyX3N0YXRlOworICAgICAgLyogQXBwbHkgdGhlIHRyYW5zbGF0aW9uIGlmIHdlIG5lZWQuICAqLworICAgICAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwl7CisJICBpbnQgaSwgY2g7CisKKwkgIGZvciAoaSA9IDA7IGkgPCBwc3RyLT5tYl9jdXJfbWF4ICYmIGkgPCByZW1haW5fbGVuOyArK2kpCisJICAgIHsKKwkgICAgICBjaCA9IHBzdHItPnJhd19tYnMgW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHggKyBpXTsKKwkgICAgICBidWZbaV0gPSBwc3RyLT5tYnNbYnl0ZV9pZHggKyBpXSA9IHBzdHItPnRyYW5zW2NoXTsKKwkgICAgfQorCSAgcCA9IChjb25zdCBjaGFyICopIGJ1ZjsKKwl9CisgICAgICBlbHNlCisJcCA9IChjb25zdCBjaGFyICopIHBzdHItPnJhd19tYnMgKyBwc3RyLT5yYXdfbWJzX2lkeCArIGJ5dGVfaWR4OworICAgICAgbWJjbGVuID0gX19tYnJ0b3djICgmd2MsIHAsIHJlbWFpbl9sZW4sICZwc3RyLT5jdXJfc3RhdGUpOworICAgICAgaWYgKEJFIChtYmNsZW4gPT0gKHNpemVfdCkgLTIsIDApKQorCXsKKwkgIC8qIFRoZSBidWZmZXIgZG9lc24ndCBoYXZlIGVub3VnaCBzcGFjZSwgZmluaXNoIHRvIGJ1aWxkLiAgKi8KKwkgIHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJICBicmVhazsKKwl9CisgICAgICBlbHNlIGlmIChCRSAobWJjbGVuID09IChzaXplX3QpIC0xIHx8IG1iY2xlbiA9PSAwLCAwKSkKKwl7CisJICAvKiBXZSB0cmVhdCB0aGVzZSBjYXNlcyBhcyBhIHNpbmdsZWJ5dGUgY2hhcmFjdGVyLiAgKi8KKwkgIG1iY2xlbiA9IDE7CisJICB3YyA9ICh3Y2hhcl90KSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHhdOworCSAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwkgICAgd2MgPSBwc3RyLT50cmFuc1t3Y107CisJICBwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCX0KKworICAgICAgLyogV3JpdGUgd2lkZSBjaGFyYWN0ZXIgYW5kIHBhZGRpbmcuICAqLworICAgICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gd2M7CisgICAgICAvKiBXcml0ZSBwYWRkaW5ncy4gICovCisgICAgICBmb3IgKHJlbWFpbl9sZW4gPSBieXRlX2lkeCArIG1iY2xlbiAtIDE7IGJ5dGVfaWR4IDwgcmVtYWluX2xlbiA7KQorCXBzdHItPndjc1tieXRlX2lkeCsrXSA9IFdFT0Y7CisgICAgfQorICBwc3RyLT52YWxpZF9sZW4gPSBieXRlX2lkeDsKKyAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IGJ5dGVfaWR4OworfQorCisvKiBCdWlsZCB3aWRlIGNoYXJhY3RlciBidWZmZXIgUFNUUi0+V0NTIGxpa2UgYnVpbGRfd2NzX2J1ZmZlciwKKyAgIGJ1dCBmb3IgUkVHX0lDQVNFLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKK3sKKyAgbWJzdGF0ZV90IHByZXZfc3Q7CisgIGludCBzcmNfaWR4LCBieXRlX2lkeCwgZW5kX2lkeCwgcmVtYWluX2xlbjsKKyAgc2l6ZV90IG1iY2xlbjsKKyNpZmRlZiBfTElCQworICBjaGFyIGJ1ZltNQl9MRU5fTUFYXTsKKyAgYXNzZXJ0IChNQl9MRU5fTUFYID49IHBzdHItPm1iX2N1cl9tYXgpOworI2Vsc2UKKyAgY2hhciBidWZbNjRdOworI2VuZGlmCisKKyAgYnl0ZV9pZHggPSBwc3RyLT52YWxpZF9sZW47CisgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT5sZW4pID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisKKyAgLyogVGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb24gYXNzdW1lcyB0aGF0IEFTQ0lJIGNoYXJhY3RlcnMgY2FuIGJlCisgICAgIG1hcHBlZCB0byB3aWRlIGNoYXJhY3RlcnMgd2l0aCBhIHNpbXBsZSBjYXN0LiAgKi8KKyAgaWYgKCEgcHN0ci0+bWFwX25vdGFzY2lpICYmIHBzdHItPnRyYW5zID09IE5VTEwgJiYgIXBzdHItPm9mZnNldHNfbmVlZGVkKQorICAgIHsKKyAgICAgIHdoaWxlIChieXRlX2lkeCA8IGVuZF9pZHgpCisJeworCSAgd2NoYXJfdCB3YzsKKworCSAgaWYgKGlzYXNjaWkgKHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeF0pCisJICAgICAgJiYgbWJzaW5pdCAoJnBzdHItPmN1cl9zdGF0ZSkpCisJICAgIHsKKwkgICAgICAvKiBJbiBjYXNlIG9mIGEgc2luZ2xlYnl0ZSBjaGFyYWN0ZXIuICAqLworCSAgICAgIHBzdHItPm1ic1tieXRlX2lkeF0KKwkJPSB0b3VwcGVyIChwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHhdKTsKKwkgICAgICAvKiBUaGUgbmV4dCBzdGVwIHVzZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB3Y2hhcl90IGlzIGVuY29kZWQKKwkJIEFTQ0lJLXNhZmU6IGFsbCBBU0NJSSB2YWx1ZXMgY2FuIGJlIGNvbnZlcnRlZCBsaWtlIHRoaXMuICAqLworCSAgICAgIHBzdHItPndjc1tieXRlX2lkeF0gPSAod2NoYXJfdCkgcHN0ci0+bWJzW2J5dGVfaWR4XTsKKwkgICAgICArK2J5dGVfaWR4OworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisKKwkgIHJlbWFpbl9sZW4gPSBlbmRfaWR4IC0gYnl0ZV9pZHg7CisJICBwcmV2X3N0ID0gcHN0ci0+Y3VyX3N0YXRlOworCSAgbWJjbGVuID0gX19tYnJ0b3djICgmd2MsCisJCQkgICAgICAoKGNvbnN0IGNoYXIgKikgcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4CisJCQkgICAgICAgKyBieXRlX2lkeCksIHJlbWFpbl9sZW4sICZwc3RyLT5jdXJfc3RhdGUpOworCSAgaWYgKEJFIChtYmNsZW4gKyAyID4gMiwgMSkpCisJICAgIHsKKwkgICAgICB3Y2hhcl90IHdjdSA9IHdjOworCSAgICAgIGlmIChpc3dsb3dlciAod2MpKQorCQl7CisJCSAgc2l6ZV90IG1iY2RsZW47CisKKwkJICB3Y3UgPSB0b3d1cHBlciAod2MpOworCQkgIG1iY2RsZW4gPSB3Y3J0b21iIChidWYsIHdjdSwgJnByZXZfc3QpOworCQkgIGlmIChCRSAobWJjbGVuID09IG1iY2RsZW4sIDEpKQorCQkgICAgbWVtY3B5IChwc3RyLT5tYnMgKyBieXRlX2lkeCwgYnVmLCBtYmNsZW4pOworCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgc3JjX2lkeCA9IGJ5dGVfaWR4OworCQkgICAgICBnb3RvIG9mZnNldHNfbmVlZGVkOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQltZW1jcHkgKHBzdHItPm1icyArIGJ5dGVfaWR4LAorCQkJcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4ICsgYnl0ZV9pZHgsIG1iY2xlbik7CisJICAgICAgcHN0ci0+d2NzW2J5dGVfaWR4KytdID0gd2N1OworCSAgICAgIC8qIFdyaXRlIHBhZGRpbmdzLiAgKi8KKwkgICAgICBmb3IgKHJlbWFpbl9sZW4gPSBieXRlX2lkeCArIG1iY2xlbiAtIDE7IGJ5dGVfaWR4IDwgcmVtYWluX2xlbiA7KQorCQlwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSBXRU9GOworCSAgICB9CisJICBlbHNlIGlmIChtYmNsZW4gPT0gKHNpemVfdCkgLTEgfHwgbWJjbGVuID09IDApCisJICAgIHsKKwkgICAgICAvKiBJdCBpcyBhbiBpbnZhbGlkIGNoYXJhY3RlciBvciAnXDAnLiAgSnVzdCB1c2UgdGhlIGJ5dGUuICAqLworCSAgICAgIGludCBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBieXRlX2lkeF07CisJICAgICAgcHN0ci0+bWJzW2J5dGVfaWR4XSA9IGNoOworCSAgICAgIC8qIEFuZCBhbHNvIGNhc3QgaXQgdG8gd2lkZSBjaGFyLiAgKi8KKwkgICAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSAod2NoYXJfdCkgY2g7CisJICAgICAgaWYgKEJFIChtYmNsZW4gPT0gKHNpemVfdCkgLTEsIDApKQorCQlwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBUaGUgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3BhY2UsIGZpbmlzaCB0byBidWlsZC4gICovCisJICAgICAgcHN0ci0+Y3VyX3N0YXRlID0gcHJldl9zdDsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICAgIHBzdHItPnZhbGlkX2xlbiA9IGJ5dGVfaWR4OworICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IGJ5dGVfaWR4OworICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKyAgZWxzZQorICAgIGZvciAoc3JjX2lkeCA9IHBzdHItPnZhbGlkX3Jhd19sZW47IGJ5dGVfaWR4IDwgZW5kX2lkeDspCisgICAgICB7CisJd2NoYXJfdCB3YzsKKwljb25zdCBjaGFyICpwOworICAgICAgb2Zmc2V0c19uZWVkZWQ6CisJcmVtYWluX2xlbiA9IGVuZF9pZHggLSBieXRlX2lkeDsKKwlwcmV2X3N0ID0gcHN0ci0+Y3VyX3N0YXRlOworCWlmIChCRSAocHN0ci0+dHJhbnMgIT0gTlVMTCwgMCkpCisJICB7CisJICAgIGludCBpLCBjaDsKKworCSAgICBmb3IgKGkgPSAwOyBpIDwgcHN0ci0+bWJfY3VyX21heCAmJiBpIDwgcmVtYWluX2xlbjsgKytpKQorCSAgICAgIHsKKwkJY2ggPSBwc3RyLT5yYXdfbWJzIFtwc3RyLT5yYXdfbWJzX2lkeCArIHNyY19pZHggKyBpXTsKKwkJYnVmW2ldID0gcHN0ci0+dHJhbnNbY2hdOworCSAgICAgIH0KKwkgICAgcCA9IChjb25zdCBjaGFyICopIGJ1ZjsKKwkgIH0KKwllbHNlCisJICBwID0gKGNvbnN0IGNoYXIgKikgcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4ICsgc3JjX2lkeDsKKwltYmNsZW4gPSBfX21icnRvd2MgKCZ3YywgcCwgcmVtYWluX2xlbiwgJnBzdHItPmN1cl9zdGF0ZSk7CisJaWYgKEJFIChtYmNsZW4gKyAyID4gMiwgMSkpCisJICB7CisJICAgIHdjaGFyX3Qgd2N1ID0gd2M7CisJICAgIGlmIChpc3dsb3dlciAod2MpKQorCSAgICAgIHsKKwkJc2l6ZV90IG1iY2RsZW47CisKKwkJd2N1ID0gdG93dXBwZXIgKHdjKTsKKwkJbWJjZGxlbiA9IHdjcnRvbWIgKChjaGFyICopIGJ1Ziwgd2N1LCAmcHJldl9zdCk7CisJCWlmIChCRSAobWJjbGVuID09IG1iY2RsZW4sIDEpKQorCQkgIG1lbWNweSAocHN0ci0+bWJzICsgYnl0ZV9pZHgsIGJ1ZiwgbWJjbGVuKTsKKwkJZWxzZSBpZiAobWJjZGxlbiAhPSAoc2l6ZV90KSAtMSkKKwkJICB7CisJCSAgICBzaXplX3QgaTsKKworCQkgICAgaWYgKGJ5dGVfaWR4ICsgbWJjZGxlbiA+IHBzdHItPmJ1ZnNfbGVuKQorCQkgICAgICB7CisJCQlwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCQkJYnJlYWs7CisJCSAgICAgIH0KKworCQkgICAgaWYgKHBzdHItPm9mZnNldHMgPT0gTlVMTCkKKwkJICAgICAgeworCQkJcHN0ci0+b2Zmc2V0cyA9IHJlX21hbGxvYyAoaW50LCBwc3RyLT5idWZzX2xlbik7CisKKwkJCWlmIChwc3RyLT5vZmZzZXRzID09IE5VTEwpCisJCQkgIHJldHVybiBSRUdfRVNQQUNFOworCQkgICAgICB9CisJCSAgICBpZiAoIXBzdHItPm9mZnNldHNfbmVlZGVkKQorCQkgICAgICB7CisJCQlmb3IgKGkgPSAwOyBpIDwgKHNpemVfdCkgYnl0ZV9pZHg7ICsraSkKKwkJCSAgcHN0ci0+b2Zmc2V0c1tpXSA9IGk7CisJCQlwc3RyLT5vZmZzZXRzX25lZWRlZCA9IDE7CisJCSAgICAgIH0KKworCQkgICAgbWVtY3B5IChwc3RyLT5tYnMgKyBieXRlX2lkeCwgYnVmLCBtYmNkbGVuKTsKKwkJICAgIHBzdHItPndjc1tieXRlX2lkeF0gPSB3Y3U7CisJCSAgICBwc3RyLT5vZmZzZXRzW2J5dGVfaWR4XSA9IHNyY19pZHg7CisJCSAgICBmb3IgKGkgPSAxOyBpIDwgbWJjZGxlbjsgKytpKQorCQkgICAgICB7CisJCQlwc3RyLT5vZmZzZXRzW2J5dGVfaWR4ICsgaV0KKwkJCSAgPSBzcmNfaWR4ICsgKGkgPCBtYmNsZW4gPyBpIDogbWJjbGVuIC0gMSk7CisJCQlwc3RyLT53Y3NbYnl0ZV9pZHggKyBpXSA9IFdFT0Y7CisJCSAgICAgIH0KKwkJICAgIHBzdHItPmxlbiArPSBtYmNkbGVuIC0gbWJjbGVuOworCQkgICAgaWYgKHBzdHItPnJhd19zdG9wID4gc3JjX2lkeCkKKwkJICAgICAgcHN0ci0+c3RvcCArPSBtYmNkbGVuIC0gbWJjbGVuOworCQkgICAgZW5kX2lkeCA9IChwc3RyLT5idWZzX2xlbiA+IHBzdHItPmxlbikKKwkJCSAgICAgID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisJCSAgICBieXRlX2lkeCArPSBtYmNkbGVuOworCQkgICAgc3JjX2lkeCArPSBtYmNsZW47CisJCSAgICBjb250aW51ZTsKKwkJICB9CisJCWVsc2UKKwkJICBtZW1jcHkgKHBzdHItPm1icyArIGJ5dGVfaWR4LCBwLCBtYmNsZW4pOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIG1lbWNweSAocHN0ci0+bWJzICsgYnl0ZV9pZHgsIHAsIG1iY2xlbik7CisKKwkgICAgaWYgKEJFIChwc3RyLT5vZmZzZXRzX25lZWRlZCAhPSAwLCAwKSkKKwkgICAgICB7CisJCXNpemVfdCBpOworCQlmb3IgKGkgPSAwOyBpIDwgbWJjbGVuOyArK2kpCisJCSAgcHN0ci0+b2Zmc2V0c1tieXRlX2lkeCArIGldID0gc3JjX2lkeCArIGk7CisJICAgICAgfQorCSAgICBzcmNfaWR4ICs9IG1iY2xlbjsKKworCSAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSB3Y3U7CisJICAgIC8qIFdyaXRlIHBhZGRpbmdzLiAgKi8KKwkgICAgZm9yIChyZW1haW5fbGVuID0gYnl0ZV9pZHggKyBtYmNsZW4gLSAxOyBieXRlX2lkeCA8IHJlbWFpbl9sZW4gOykKKwkgICAgICBwc3RyLT53Y3NbYnl0ZV9pZHgrK10gPSBXRU9GOworCSAgfQorCWVsc2UgaWYgKG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gMCkKKwkgIHsKKwkgICAgLyogSXQgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIgb3IgJ1wwJy4gIEp1c3QgdXNlIHRoZSBieXRlLiAgKi8KKwkgICAgaW50IGNoID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIHNyY19pZHhdOworCisJICAgIGlmIChCRSAocHN0ci0+dHJhbnMgIT0gTlVMTCwgMCkpCisJICAgICAgY2ggPSBwc3RyLT50cmFucyBbY2hdOworCSAgICBwc3RyLT5tYnNbYnl0ZV9pZHhdID0gY2g7CisKKwkgICAgaWYgKEJFIChwc3RyLT5vZmZzZXRzX25lZWRlZCAhPSAwLCAwKSkKKwkgICAgICBwc3RyLT5vZmZzZXRzW2J5dGVfaWR4XSA9IHNyY19pZHg7CisJICAgICsrc3JjX2lkeDsKKworCSAgICAvKiBBbmQgYWxzbyBjYXN0IGl0IHRvIHdpZGUgY2hhci4gICovCisJICAgIHBzdHItPndjc1tieXRlX2lkeCsrXSA9ICh3Y2hhcl90KSBjaDsKKwkgICAgaWYgKEJFIChtYmNsZW4gPT0gKHNpemVfdCkgLTEsIDApKQorCSAgICAgIHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJICB9CisJZWxzZQorCSAgeworCSAgICAvKiBUaGUgYnVmZmVyIGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3BhY2UsIGZpbmlzaCB0byBidWlsZC4gICovCisJICAgIHBzdHItPmN1cl9zdGF0ZSA9IHByZXZfc3Q7CisJICAgIGJyZWFrOworCSAgfQorICAgICAgfQorICBwc3RyLT52YWxpZF9sZW4gPSBieXRlX2lkeDsKKyAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IHNyY19pZHg7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogU2tpcCBjaGFyYWN0ZXJzIHVudGlsIHRoZSBpbmRleCBiZWNvbWVzIGdyZWF0ZXIgdGhhbiBORVdfUkFXX0lEWC4KKyAgIFJldHVybiB0aGUgaW5kZXguICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX3NraXBfY2hhcnMgKHJlX3N0cmluZ190ICpwc3RyLCBpbnQgbmV3X3Jhd19pZHgsIHdpbnRfdCAqbGFzdF93YykKK3sKKyAgbWJzdGF0ZV90IHByZXZfc3Q7CisgIGludCByYXdidWZfaWR4OworICBzaXplX3QgbWJjbGVuOworICB3aW50X3Qgd2MgPSBXRU9GOworCisgIC8qIFNraXAgdGhlIGNoYXJhY3RlcnMgd2hpY2ggYXJlIG5vdCBuZWNlc3NhcnkgdG8gY2hlY2suICAqLworICBmb3IgKHJhd2J1Zl9pZHggPSBwc3RyLT5yYXdfbWJzX2lkeCArIHBzdHItPnZhbGlkX3Jhd19sZW47CisgICAgICAgcmF3YnVmX2lkeCA8IG5ld19yYXdfaWR4OykKKyAgICB7CisgICAgICB3Y2hhcl90IHdjMjsKKyAgICAgIGludCByZW1haW5fbGVuID0gcHN0ci0+bGVuIC0gcmF3YnVmX2lkeDsKKyAgICAgIHByZXZfc3QgPSBwc3RyLT5jdXJfc3RhdGU7CisgICAgICBtYmNsZW4gPSBfX21icnRvd2MgKCZ3YzIsIChjb25zdCBjaGFyICopIHBzdHItPnJhd19tYnMgKyByYXdidWZfaWR4LAorCQkJICByZW1haW5fbGVuLCAmcHN0ci0+Y3VyX3N0YXRlKTsKKyAgICAgIGlmIChCRSAobWJjbGVuID09IChzaXplX3QpIC0yIHx8IG1iY2xlbiA9PSAoc2l6ZV90KSAtMSB8fCBtYmNsZW4gPT0gMCwgMCkpCisJeworCSAgLyogV2UgdHJlYXQgdGhlc2UgY2FzZXMgYXMgYSBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIuICAqLworCSAgaWYgKG1iY2xlbiA9PSAwIHx8IHJlbWFpbl9sZW4gPT0gMCkKKwkgICAgd2MgPSBMJ1wwJzsKKwkgIGVsc2UKKwkgICAgd2MgPSAqKHVuc2lnbmVkIGNoYXIgKikgKHBzdHItPnJhd19tYnMgKyByYXdidWZfaWR4KTsKKwkgIG1iY2xlbiA9IDE7CisJICBwc3RyLT5jdXJfc3RhdGUgPSBwcmV2X3N0OworCX0KKyAgICAgIGVsc2UKKwl3YyA9ICh3aW50X3QpIHdjMjsKKyAgICAgIC8qIFRoZW4gcHJvY2VlZCB0aGUgbmV4dCBjaGFyYWN0ZXIuICAqLworICAgICAgcmF3YnVmX2lkeCArPSBtYmNsZW47CisgICAgfQorICAqbGFzdF93YyA9ICh3aW50X3QpIHdjOworICByZXR1cm4gcmF3YnVmX2lkeDsKK30KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAgKi8KKworLyogQnVpbGQgdGhlIGJ1ZmZlciBQU1RSLT5NQlMsIGFuZCBhcHBseSB0aGUgdHJhbnNsYXRpb24gaWYgd2UgbmVlZC4KKyAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBjYXNlIG9mIFJFR19JQ0FTRS4gICovCisKK3N0YXRpYyB2b2lkCitpbnRlcm5hbF9mdW5jdGlvbgorYnVpbGRfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKK3sKKyAgaW50IGNoYXJfaWR4LCBlbmRfaWR4OworICBlbmRfaWR4ID0gKHBzdHItPmJ1ZnNfbGVuID4gcHN0ci0+bGVuKSA/IHBzdHItPmxlbiA6IHBzdHItPmJ1ZnNfbGVuOworCisgIGZvciAoY2hhcl9pZHggPSBwc3RyLT52YWxpZF9sZW47IGNoYXJfaWR4IDwgZW5kX2lkeDsgKytjaGFyX2lkeCkKKyAgICB7CisgICAgICBpbnQgY2ggPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgY2hhcl9pZHhdOworICAgICAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwljaCA9IHBzdHItPnRyYW5zW2NoXTsKKyAgICAgIGlmIChpc2xvd2VyIChjaCkpCisJcHN0ci0+bWJzW2NoYXJfaWR4XSA9IHRvdXBwZXIgKGNoKTsKKyAgICAgIGVsc2UKKwlwc3RyLT5tYnNbY2hhcl9pZHhdID0gY2g7CisgICAgfQorICBwc3RyLT52YWxpZF9sZW4gPSBjaGFyX2lkeDsKKyAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IGNoYXJfaWR4OworfQorCisvKiBBcHBseSBUUkFOUyB0byB0aGUgYnVmZmVyIGluIFBTVFIuICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKK3sKKyAgaW50IGJ1Zl9pZHgsIGVuZF9pZHg7CisgIGVuZF9pZHggPSAocHN0ci0+YnVmc19sZW4gPiBwc3RyLT5sZW4pID8gcHN0ci0+bGVuIDogcHN0ci0+YnVmc19sZW47CisKKyAgZm9yIChidWZfaWR4ID0gcHN0ci0+dmFsaWRfbGVuOyBidWZfaWR4IDwgZW5kX2lkeDsgKytidWZfaWR4KQorICAgIHsKKyAgICAgIGludCBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBidWZfaWR4XTsKKyAgICAgIHBzdHItPm1ic1tidWZfaWR4XSA9IHBzdHItPnRyYW5zW2NoXTsKKyAgICB9CisKKyAgcHN0ci0+dmFsaWRfbGVuID0gYnVmX2lkeDsKKyAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IGJ1Zl9pZHg7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gcmUtY29uc3RydWN0IHRoZSBidWZmZXJzLgorICAgQ29uY3JldGVseSwgY29udmVydCB0byB3aWRlIGNoYXJhY3RlciBpbiBjYXNlIG9mIHBzdHItPm1iX2N1cl9tYXggPiAxLAorICAgY29udmVydCB0byB1cHBlciBjYXNlIGluIGNhc2Ugb2YgUkVHX0lDQVNFLCBhcHBseSB0cmFuc2xhdGlvbi4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfc3RyaW5nX3JlY29uc3RydWN0IChyZV9zdHJpbmdfdCAqcHN0ciwgaW50IGlkeCwgaW50IGVmbGFncykKK3sKKyAgaW50IG9mZnNldCA9IGlkeCAtIHBzdHItPnJhd19tYnNfaWR4OworICBpZiAoQkUgKG9mZnNldCA8IDAsIDApKQorICAgIHsKKyAgICAgIC8qIFJlc2V0IGJ1ZmZlci4gICovCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID4gMSkKKwltZW1zZXQgKCZwc3RyLT5jdXJfc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKyAgICAgIHBzdHItPmxlbiA9IHBzdHItPnJhd19sZW47CisgICAgICBwc3RyLT5zdG9wID0gcHN0ci0+cmF3X3N0b3A7CisgICAgICBwc3RyLT52YWxpZF9sZW4gPSAwOworICAgICAgcHN0ci0+cmF3X21ic19pZHggPSAwOworICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IDA7CisgICAgICBwc3RyLT5vZmZzZXRzX25lZWRlZCA9IDA7CisgICAgICBwc3RyLT50aXBfY29udGV4dCA9ICgoZWZsYWdzICYgUkVHX05PVEJPTCkgPyBDT05URVhUX0JFR0JVRgorCQkJICAgOiBDT05URVhUX05FV0xJTkUgfCBDT05URVhUX0JFR0JVRik7CisgICAgICBpZiAoIXBzdHItPm1ic19hbGxvY2F0ZWQpCisJcHN0ci0+bWJzID0gKHVuc2lnbmVkIGNoYXIgKikgcHN0ci0+cmF3X21iczsKKyAgICAgIG9mZnNldCA9IGlkeDsKKyAgICB9CisKKyAgaWYgKEJFIChvZmZzZXQgIT0gMCwgMSkpCisgICAgeworICAgICAgLyogU2hvdWxkIHRoZSBhbHJlYWR5IGNoZWNrZWQgY2hhcmFjdGVycyBiZSBrZXB0PyAgKi8KKyAgICAgIGlmIChCRSAob2Zmc2V0IDwgcHN0ci0+dmFsaWRfcmF3X2xlbiwgMSkpCisJeworCSAgLyogWWVzLCBtb3ZlIHRoZW0gdG8gdGhlIGZyb250IG9mIHRoZSBidWZmZXIuICAqLworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICBpZiAoQkUgKHBzdHItPm9mZnNldHNfbmVlZGVkLCAwKSkKKwkgICAgeworCSAgICAgIGludCBsb3cgPSAwLCBoaWdoID0gcHN0ci0+dmFsaWRfbGVuLCBtaWQ7CisJICAgICAgZG8KKwkJeworCQkgIG1pZCA9IChoaWdoICsgbG93KSAvIDI7CisJCSAgaWYgKHBzdHItPm9mZnNldHNbbWlkXSA+IG9mZnNldCkKKwkJICAgIGhpZ2ggPSBtaWQ7CisJCSAgZWxzZSBpZiAocHN0ci0+b2Zmc2V0c1ttaWRdIDwgb2Zmc2V0KQorCQkgICAgbG93ID0gbWlkICsgMTsKKwkJICBlbHNlCisJCSAgICBicmVhazsKKwkJfQorCSAgICAgIHdoaWxlIChsb3cgPCBoaWdoKTsKKwkgICAgICBpZiAocHN0ci0+b2Zmc2V0c1ttaWRdIDwgb2Zmc2V0KQorCQkrK21pZDsKKwkgICAgICBwc3RyLT50aXBfY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0IChwc3RyLCBtaWQgLSAxLAorCQkJCQkJCWVmbGFncyk7CisJICAgICAgLyogVGhpcyBjYW4gYmUgcXVpdGUgY29tcGxpY2F0ZWQsIHNvIGhhbmRsZSBzcGVjaWFsbHkKKwkJIG9ubHkgdGhlIGNvbW1vbiBhbmQgZWFzeSBjYXNlIHdoZXJlIHRoZSBjaGFyYWN0ZXIgd2l0aAorCQkgZGlmZmVyZW50IGxlbmd0aCByZXByZXNlbnRhdGlvbiBvZiBsb3dlciBhbmQgdXBwZXIKKwkJIGNhc2UgaXMgcHJlc2VudCBhdCBvciBhZnRlciBvZmZzZXQuICAqLworCSAgICAgIGlmIChwc3RyLT52YWxpZF9sZW4gPiBvZmZzZXQKKwkJICAmJiBtaWQgPT0gb2Zmc2V0ICYmIHBzdHItPm9mZnNldHNbbWlkXSA9PSBvZmZzZXQpCisJCXsKKwkJICBtZW1tb3ZlIChwc3RyLT53Y3MsIHBzdHItPndjcyArIG9mZnNldCwKKwkJCSAgIChwc3RyLT52YWxpZF9sZW4gLSBvZmZzZXQpICogc2l6ZW9mICh3aW50X3QpKTsKKwkJICBtZW1tb3ZlIChwc3RyLT5tYnMsIHBzdHItPm1icyArIG9mZnNldCwgcHN0ci0+dmFsaWRfbGVuIC0gb2Zmc2V0KTsKKwkJICBwc3RyLT52YWxpZF9sZW4gLT0gb2Zmc2V0OworCQkgIHBzdHItPnZhbGlkX3Jhd19sZW4gLT0gb2Zmc2V0OworCQkgIGZvciAobG93ID0gMDsgbG93IDwgcHN0ci0+dmFsaWRfbGVuOyBsb3crKykKKwkJICAgIHBzdHItPm9mZnNldHNbbG93XSA9IHBzdHItPm9mZnNldHNbbG93ICsgb2Zmc2V0XSAtIG9mZnNldDsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIC8qIE90aGVyd2lzZSwganVzdCBmaW5kIG91dCBob3cgbG9uZyB0aGUgcGFydGlhbCBtdWx0aWJ5dGUKKwkJICAgICBjaGFyYWN0ZXIgYXQgb2Zmc2V0IGlzIGFuZCBmaWxsIGl0IHdpdGggV0VPRi8yNTUuICAqLworCQkgIHBzdHItPmxlbiA9IHBzdHItPnJhd19sZW4gLSBpZHggKyBvZmZzZXQ7CisJCSAgcHN0ci0+c3RvcCA9IHBzdHItPnJhd19zdG9wIC0gaWR4ICsgb2Zmc2V0OworCQkgIHBzdHItPm9mZnNldHNfbmVlZGVkID0gMDsKKwkJICB3aGlsZSAobWlkID4gMCAmJiBwc3RyLT5vZmZzZXRzW21pZCAtIDFdID09IG9mZnNldCkKKwkJICAgIC0tbWlkOworCQkgIHdoaWxlIChtaWQgPCBwc3RyLT52YWxpZF9sZW4pCisJCSAgICBpZiAocHN0ci0+d2NzW21pZF0gIT0gV0VPRikKKwkJICAgICAgYnJlYWs7CisJCSAgICBlbHNlCisJCSAgICAgICsrbWlkOworCQkgIGlmIChtaWQgPT0gcHN0ci0+dmFsaWRfbGVuKQorCQkgICAgcHN0ci0+dmFsaWRfbGVuID0gMDsKKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIHBzdHItPnZhbGlkX2xlbiA9IHBzdHItPm9mZnNldHNbbWlkXSAtIG9mZnNldDsKKwkJICAgICAgaWYgKHBzdHItPnZhbGlkX2xlbikKKwkJCXsKKwkJCSAgZm9yIChsb3cgPSAwOyBsb3cgPCBwc3RyLT52YWxpZF9sZW47ICsrbG93KQorCQkJICAgIHBzdHItPndjc1tsb3ddID0gV0VPRjsKKwkJCSAgbWVtc2V0IChwc3RyLT5tYnMsIDI1NSwgcHN0ci0+dmFsaWRfbGVuKTsKKwkJCX0KKwkJICAgIH0KKwkJICBwc3RyLT52YWxpZF9yYXdfbGVuID0gcHN0ci0+dmFsaWRfbGVuOworCQl9CisJICAgIH0KKwkgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJICAgICAgcHN0ci0+dGlwX2NvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAocHN0ciwgb2Zmc2V0IC0gMSwKKwkJCQkJCQllZmxhZ3MpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgICAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorCQltZW1tb3ZlIChwc3RyLT53Y3MsIHBzdHItPndjcyArIG9mZnNldCwKKwkJCSAocHN0ci0+dmFsaWRfbGVuIC0gb2Zmc2V0KSAqIHNpemVvZiAod2ludF90KSk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKwkgICAgICBpZiAoQkUgKHBzdHItPm1ic19hbGxvY2F0ZWQsIDApKQorCQltZW1tb3ZlIChwc3RyLT5tYnMsIHBzdHItPm1icyArIG9mZnNldCwKKwkJCSBwc3RyLT52YWxpZF9sZW4gLSBvZmZzZXQpOworCSAgICAgIHBzdHItPnZhbGlkX2xlbiAtPSBvZmZzZXQ7CisJICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiAtPSBvZmZzZXQ7CisjaWYgREVCVUcKKwkgICAgICBhc3NlcnQgKHBzdHItPnZhbGlkX2xlbiA+IDApOworI2VuZGlmCisJICAgIH0KKwl9CisgICAgICBlbHNlCisJeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAvKiBObywgc2tpcCBhbGwgY2hhcmFjdGVycyB1bnRpbCBJRFguICAqLworCSAgaW50IHByZXZfdmFsaWRfbGVuID0gcHN0ci0+dmFsaWRfbGVuOworCisJICBpZiAoQkUgKHBzdHItPm9mZnNldHNfbmVlZGVkLCAwKSkKKwkgICAgeworCSAgICAgIHBzdHItPmxlbiA9IHBzdHItPnJhd19sZW4gLSBpZHggKyBvZmZzZXQ7CisJICAgICAgcHN0ci0+c3RvcCA9IHBzdHItPnJhd19zdG9wIC0gaWR4ICsgb2Zmc2V0OworCSAgICAgIHBzdHItPm9mZnNldHNfbmVlZGVkID0gMDsKKwkgICAgfQorI2VuZGlmCisJICBwc3RyLT52YWxpZF9sZW4gPSAwOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJICAgIHsKKwkgICAgICBpbnQgd2NzX2lkeDsKKwkgICAgICB3aW50X3Qgd2MgPSBXRU9GOworCisJICAgICAgaWYgKHBzdHItPmlzX3V0ZjgpCisJCXsKKwkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpyYXcsICpwLCAqZW5kOworCisJCSAgLyogU3BlY2lhbCBjYXNlIFVURi04LiAgTXVsdGktYnl0ZSBjaGFycyBzdGFydCB3aXRoIGFueQorCQkgICAgIGJ5dGUgb3RoZXIgdGhhbiAweDgwIC0gMHhiZi4gICovCisJCSAgcmF3ID0gcHN0ci0+cmF3X21icyArIHBzdHItPnJhd19tYnNfaWR4OworCQkgIGVuZCA9IHJhdyArIChvZmZzZXQgLSBwc3RyLT5tYl9jdXJfbWF4KTsKKwkJICBpZiAoZW5kIDwgcHN0ci0+cmF3X21icykKKwkJICAgIGVuZCA9IHBzdHItPnJhd19tYnM7CisJCSAgcCA9IHJhdyArIG9mZnNldCAtIDE7CisjaWZkZWYgX0xJQkMKKwkJICAvKiBXZSBrbm93IHRoZSB3Y2hhcl90IGVuY29kaW5nIGlzIFVDUzQsIHNvIGZvciB0aGUgc2ltcGxlCisJCSAgICAgY2FzZSwgQVNDSUkgY2hhcmFjdGVycywgc2tpcCB0aGUgY29udmVyc2lvbiBzdGVwLiAgKi8KKwkJICBpZiAoaXNhc2NpaSAoKnApICYmIEJFIChwc3RyLT50cmFucyA9PSBOVUxMLCAxKSkKKwkJICAgIHsKKwkJICAgICAgbWVtc2V0ICgmcHN0ci0+Y3VyX3N0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOworCQkgICAgICAvKiBwc3RyLT52YWxpZF9sZW4gPSAwOyAqLworCQkgICAgICB3YyA9ICh3Y2hhcl90KSAqcDsKKwkJICAgIH0KKwkJICBlbHNlCisjZW5kaWYKKwkJICAgIGZvciAoOyBwID49IGVuZDsgLS1wKQorCQkgICAgICBpZiAoKCpwICYgMHhjMCkgIT0gMHg4MCkKKwkJCXsKKwkJCSAgbWJzdGF0ZV90IGN1cl9zdGF0ZTsKKwkJCSAgd2NoYXJfdCB3YzI7CisJCQkgIGludCBtbGVuID0gcmF3ICsgcHN0ci0+bGVuIC0gcDsKKwkJCSAgdW5zaWduZWQgY2hhciBidWZbNl07CisJCQkgIHNpemVfdCBtYmNsZW47CisKKwkJCSAgaWYgKEJFIChwc3RyLT50cmFucyAhPSBOVUxMLCAwKSkKKwkJCSAgICB7CisJCQkgICAgICBpbnQgaSA9IG1sZW4gPCA2ID8gbWxlbiA6IDY7CisJCQkgICAgICB3aGlsZSAoLS1pID49IDApCisJCQkJYnVmW2ldID0gcHN0ci0+dHJhbnNbcFtpXV07CisJCQkgICAgfQorCQkJICAvKiBYWFggRG9uJ3QgdXNlIG1icnRvd2MsIHdlIGtub3cgd2hpY2ggY29udmVyc2lvbgorCQkJICAgICB0byB1c2UgKFVURi04IC0+IFVDUzQpLiAgKi8KKwkJCSAgbWVtc2V0ICgmY3VyX3N0YXRlLCAwLCBzaXplb2YgKGN1cl9zdGF0ZSkpOworCQkJICBtYmNsZW4gPSBfX21icnRvd2MgKCZ3YzIsIChjb25zdCBjaGFyICopIHAsIG1sZW4sCisJCQkJCSAgICAgICZjdXJfc3RhdGUpOworCQkJICBpZiAocmF3ICsgb2Zmc2V0IC0gcCA8PSBtYmNsZW4KKwkJCSAgICAgICYmIG1iY2xlbiA8IChzaXplX3QpIC0yKQorCQkJICAgIHsKKwkJCSAgICAgIG1lbXNldCAoJnBzdHItPmN1cl9zdGF0ZSwgJ1wwJywKKwkJCQkgICAgICBzaXplb2YgKG1ic3RhdGVfdCkpOworCQkJICAgICAgcHN0ci0+dmFsaWRfbGVuID0gbWJjbGVuIC0gKHJhdyArIG9mZnNldCAtIHApOworCQkJICAgICAgd2MgPSB3YzI7CisJCQkgICAgfQorCQkJICBicmVhazsKKwkJCX0KKwkJfQorCisJICAgICAgaWYgKHdjID09IFdFT0YpCisJCXBzdHItPnZhbGlkX2xlbiA9IHJlX3N0cmluZ19za2lwX2NoYXJzIChwc3RyLCBpZHgsICZ3YykgLSBpZHg7CisJICAgICAgaWYgKHdjID09IFdFT0YpCisJCXBzdHItPnRpcF9jb250ZXh0CisJCSAgPSByZV9zdHJpbmdfY29udGV4dF9hdCAocHN0ciwgcHJldl92YWxpZF9sZW4gLSAxLCBlZmxhZ3MpOworCSAgICAgIGVsc2UKKwkJcHN0ci0+dGlwX2NvbnRleHQgPSAoKEJFIChwc3RyLT53b3JkX29wc191c2VkICE9IDAsIDApCisJCQkJICAgICAgJiYgSVNfV0lERV9XT1JEX0NIQVIgKHdjKSkKKwkJCQkgICAgID8gQ09OVEVYVF9XT1JECisJCQkJICAgICA6ICgoSVNfV0lERV9ORVdMSU5FICh3YykKKwkJCQkJICYmIHBzdHItPm5ld2xpbmVfYW5jaG9yKQorCQkJCQk/IENPTlRFWFRfTkVXTElORSA6IDApKTsKKwkgICAgICBpZiAoQkUgKHBzdHItPnZhbGlkX2xlbiwgMCkpCisJCXsKKwkJICBmb3IgKHdjc19pZHggPSAwOyB3Y3NfaWR4IDwgcHN0ci0+dmFsaWRfbGVuOyArK3djc19pZHgpCisJCSAgICBwc3RyLT53Y3Nbd2NzX2lkeF0gPSBXRU9GOworCQkgIGlmIChwc3RyLT5tYnNfYWxsb2NhdGVkKQorCQkgICAgbWVtc2V0IChwc3RyLT5tYnMsIDI1NSwgcHN0ci0+dmFsaWRfbGVuKTsKKwkJfQorCSAgICAgIHBzdHItPnZhbGlkX3Jhd19sZW4gPSBwc3RyLT52YWxpZF9sZW47CisJICAgIH0KKwkgIGVsc2UKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCSAgICB7CisJICAgICAgaW50IGMgPSBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgb2Zmc2V0IC0gMV07CisJICAgICAgcHN0ci0+dmFsaWRfcmF3X2xlbiA9IDA7CisJICAgICAgaWYgKHBzdHItPnRyYW5zKQorCQljID0gcHN0ci0+dHJhbnNbY107CisJICAgICAgcHN0ci0+dGlwX2NvbnRleHQgPSAoYml0c2V0X2NvbnRhaW4gKHBzdHItPndvcmRfY2hhciwgYykKKwkJCQkgICA/IENPTlRFWFRfV09SRAorCQkJCSAgIDogKChJU19ORVdMSU5FIChjKSAmJiBwc3RyLT5uZXdsaW5lX2FuY2hvcikKKwkJCQkgICAgICA/IENPTlRFWFRfTkVXTElORSA6IDApKTsKKwkgICAgfQorCX0KKyAgICAgIGlmICghQkUgKHBzdHItPm1ic19hbGxvY2F0ZWQsIDApKQorCXBzdHItPm1icyArPSBvZmZzZXQ7CisgICAgfQorICBwc3RyLT5yYXdfbWJzX2lkeCA9IGlkeDsKKyAgcHN0ci0+bGVuIC09IG9mZnNldDsKKyAgcHN0ci0+c3RvcCAtPSBvZmZzZXQ7CisKKyAgLyogVGhlbiBidWlsZCB0aGUgYnVmZmVycy4gICovCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxKQorICAgIHsKKyAgICAgIGlmIChwc3RyLT5pY2FzZSkKKwl7CisJICByZWdfZXJyY29kZV90IHJldCA9IGJ1aWxkX3djc191cHBlcl9idWZmZXIgKHBzdHIpOworCSAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gcmV0OworCX0KKyAgICAgIGVsc2UKKwlidWlsZF93Y3NfYnVmZmVyIChwc3RyKTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgIGlmIChCRSAocHN0ci0+bWJzX2FsbG9jYXRlZCwgMCkpCisgICAgICB7CisJaWYgKHBzdHItPmljYXNlKQorCSAgYnVpbGRfdXBwZXJfYnVmZmVyIChwc3RyKTsKKwllbHNlIGlmIChwc3RyLT50cmFucyAhPSBOVUxMKQorCSAgcmVfc3RyaW5nX3RyYW5zbGF0ZV9idWZmZXIgKHBzdHIpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHBzdHItPnZhbGlkX2xlbiA9IHBzdHItPmxlbjsKKworICBwc3RyLT5jdXJfaWR4ID0gMDsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhcgoraW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSkKK3JlX3N0cmluZ19wZWVrX2J5dGVfY2FzZSAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCit7CisgIGludCBjaCwgb2ZmOworCisgIC8qIEhhbmRsZSB0aGUgY29tbW9uIChlYXNpZXN0KSBjYXNlcyBmaXJzdC4gICovCisgIGlmIChCRSAoIXBzdHItPm1ic19hbGxvY2F0ZWQsIDEpKQorICAgIHJldHVybiByZV9zdHJpbmdfcGVla19ieXRlIChwc3RyLCBpZHgpOworCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPiAxCisgICAgICAmJiAhIHJlX3N0cmluZ19pc19zaW5nbGVfYnl0ZV9jaGFyIChwc3RyLCBwc3RyLT5jdXJfaWR4ICsgaWR4KSkKKyAgICByZXR1cm4gcmVfc3RyaW5nX3BlZWtfYnl0ZSAocHN0ciwgaWR4KTsKKyNlbmRpZgorCisgIG9mZiA9IHBzdHItPmN1cl9pZHggKyBpZHg7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgaWYgKHBzdHItPm9mZnNldHNfbmVlZGVkKQorICAgIG9mZiA9IHBzdHItPm9mZnNldHNbb2ZmXTsKKyNlbmRpZgorCisgIGNoID0gcHN0ci0+cmF3X21ic1twc3RyLT5yYXdfbWJzX2lkeCArIG9mZl07CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBFbnN1cmUgdGhhdCBlLmcuIGZvciB0cl9UUi5VVEYtOCBCQUNLU0xBU0ggRE9UTEVTUyBTTUFMTCBMRVRURVIgSQorICAgICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgQ0FQSVRBTCBMRVRURVIgSSBpbnN0ZWFkIG9mIGZpcnN0IGJ5dGUgb2YKKyAgICAgRE9UTEVTUyBTTUFMTCBMRVRURVIgSS4gIFRoZSBsYXR0ZXIgd291bGQgY29uZnVzZSB0aGUgcGFyc2VyLAorICAgICBzaW5jZSBwZWVrX2J5dGVfY2FzZSBkb2Vzbid0IGFkdmFuY2UgY3VyX2lkeCBpbiBhbnkgd2F5LiAgKi8KKyAgaWYgKHBzdHItPm9mZnNldHNfbmVlZGVkICYmICFpc2FzY2lpIChjaCkpCisgICAgcmV0dXJuIHJlX3N0cmluZ19wZWVrX2J5dGUgKHBzdHIsIGlkeCk7CisjZW5kaWYKKworICByZXR1cm4gY2g7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyCitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX2ZldGNoX2J5dGVfY2FzZSAocmVfc3RyaW5nX3QgKnBzdHIpCit7CisgIGlmIChCRSAoIXBzdHItPm1ic19hbGxvY2F0ZWQsIDEpKQorICAgIHJldHVybiByZV9zdHJpbmdfZmV0Y2hfYnl0ZSAocHN0cik7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBpZiAocHN0ci0+b2Zmc2V0c19uZWVkZWQpCisgICAgeworICAgICAgaW50IG9mZiwgY2g7CisKKyAgICAgIC8qIEZvciB0cl9UUi5VVEYtOCBbWzppc2xvd2VyOl1dIHRoZXJlIGlzCisJIFtbOiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRE9UIGxvd2VyOl1dIGluIG1icy4gIFNraXAKKwkgaW4gdGhhdCBjYXNlIHRoZSB3aG9sZSBtdWx0aS1ieXRlIGNoYXJhY3RlciBhbmQgcmV0dXJuCisJIHRoZSBvcmlnaW5hbCBsZXR0ZXIuICBPbiB0aGUgb3RoZXIgc2lkZSwgd2l0aAorCSBbWzogRE9UTEVTUyBTTUFMTCBMRVRURVIgSSByZXR1cm4gW1s6SSwgYXMgZG9pbmcKKwkgYW55dGhpbmcgZWxzZSB3b3VsZCBjb21wbGljYXRlIHRoaW5ncyB0b28gbXVjaC4gICovCisKKyAgICAgIGlmICghcmVfc3RyaW5nX2ZpcnN0X2J5dGUgKHBzdHIsIHBzdHItPmN1cl9pZHgpKQorCXJldHVybiByZV9zdHJpbmdfZmV0Y2hfYnl0ZSAocHN0cik7CisKKyAgICAgIG9mZiA9IHBzdHItPm9mZnNldHNbcHN0ci0+Y3VyX2lkeF07CisgICAgICBjaCA9IHBzdHItPnJhd19tYnNbcHN0ci0+cmF3X21ic19pZHggKyBvZmZdOworCisgICAgICBpZiAoISBpc2FzY2lpIChjaCkpCisJcmV0dXJuIHJlX3N0cmluZ19mZXRjaF9ieXRlIChwc3RyKTsKKworICAgICAgcmVfc3RyaW5nX3NraXBfYnl0ZXMgKHBzdHIsCisJCQkgICAgcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAocHN0ciwgcHN0ci0+Y3VyX2lkeCkpOworICAgICAgcmV0dXJuIGNoOworICAgIH0KKyNlbmRpZgorCisgIHJldHVybiBwc3RyLT5yYXdfbWJzW3BzdHItPnJhd19tYnNfaWR4ICsgcHN0ci0+Y3VyX2lkeCsrXTsKK30KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9zdHJpbmdfZGVzdHJ1Y3QgKHJlX3N0cmluZ190ICpwc3RyKQoreworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHJlX2ZyZWUgKHBzdHItPndjcyk7CisgIHJlX2ZyZWUgKHBzdHItPm9mZnNldHMpOworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworICBpZiAocHN0ci0+bWJzX2FsbG9jYXRlZCkKKyAgICByZV9mcmVlIChwc3RyLT5tYnMpOworfQorCisvKiBSZXR1cm4gdGhlIGNvbnRleHQgYXQgSURYIGluIElOUFVULiAgKi8KKworc3RhdGljIHVuc2lnbmVkIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX3N0cmluZ19jb250ZXh0X2F0IChjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIGludCBpZHgsIGludCBlZmxhZ3MpCit7CisgIGludCBjOworICBpZiAoQkUgKGlkeCA8IDAsIDApKQorICAgIC8qIEluIHRoaXMgY2FzZSwgd2UgdXNlIHRoZSB2YWx1ZSBzdG9yZWQgaW4gaW5wdXQtPnRpcF9jb250ZXh0LAorICAgICAgIHNpbmNlIHdlIGNhbid0IGtub3cgdGhlIGNoYXJhY3RlciBpbiBpbnB1dC0+bWJzWy0xXSBoZXJlLiAgKi8KKyAgICByZXR1cm4gaW5wdXQtPnRpcF9jb250ZXh0OworICBpZiAoQkUgKGlkeCA9PSBpbnB1dC0+bGVuLCAwKSkKKyAgICByZXR1cm4gKChlZmxhZ3MgJiBSRUdfTk9URU9MKSA/IENPTlRFWFRfRU5EQlVGCisJICAgIDogQ09OVEVYVF9ORVdMSU5FIHwgQ09OVEVYVF9FTkRCVUYpOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIGlmIChpbnB1dC0+bWJfY3VyX21heCA+IDEpCisgICAgeworICAgICAgd2ludF90IHdjOworICAgICAgaW50IHdjX2lkeCA9IGlkeDsKKyAgICAgIHdoaWxlKGlucHV0LT53Y3Nbd2NfaWR4XSA9PSBXRU9GKQorCXsKKyNpZmRlZiBERUJVRworCSAgLyogSXQgbXVzdCBub3QgaGFwcGVuLiAgKi8KKwkgIGFzc2VydCAod2NfaWR4ID49IDApOworI2VuZGlmCisJICAtLXdjX2lkeDsKKwkgIGlmICh3Y19pZHggPCAwKQorCSAgICByZXR1cm4gaW5wdXQtPnRpcF9jb250ZXh0OworCX0KKyAgICAgIHdjID0gaW5wdXQtPndjc1t3Y19pZHhdOworICAgICAgaWYgKEJFIChpbnB1dC0+d29yZF9vcHNfdXNlZCAhPSAwLCAwKSAmJiBJU19XSURFX1dPUkRfQ0hBUiAod2MpKQorCXJldHVybiBDT05URVhUX1dPUkQ7CisgICAgICByZXR1cm4gKElTX1dJREVfTkVXTElORSAod2MpICYmIGlucHV0LT5uZXdsaW5lX2FuY2hvcgorCSAgICAgID8gQ09OVEVYVF9ORVdMSU5FIDogMCk7CisgICAgfQorICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICBjID0gcmVfc3RyaW5nX2J5dGVfYXQgKGlucHV0LCBpZHgpOworICAgICAgaWYgKGJpdHNldF9jb250YWluIChpbnB1dC0+d29yZF9jaGFyLCBjKSkKKwlyZXR1cm4gQ09OVEVYVF9XT1JEOworICAgICAgcmV0dXJuIElTX05FV0xJTkUgKGMpICYmIGlucHV0LT5uZXdsaW5lX2FuY2hvciA/IENPTlRFWFRfTkVXTElORSA6IDA7CisgICAgfQorfQorDAorLyogRnVuY3Rpb25zIGZvciBzZXQgb3BlcmF0aW9uLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9hbGxvYyAocmVfbm9kZV9zZXQgKnNldCwgaW50IHNpemUpCit7CisgIC8qCisgICAqIEFEUjogdmFsZ3JpbmQgc2F5cyBzaXplIGNhbiBiZSAwLCB3aGljaCB0aGVuIGRvZXNuJ3QKKyAgICogZnJlZSB0aGUgYmxvY2sgb2Ygc2l6ZSAwLiAgSGFydW1waC4gVGhpcyBzZWVtcworICAgKiB0byB3b3JrIG9rLCB0aG91Z2guCisgICAqLworICBpZiAoc2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICBtZW1zZXQoc2V0LCAwLCBzaXplb2YoKnNldCkpOworICAgICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgICB9CisgIHNldC0+YWxsb2MgPSBzaXplOworICBzZXQtPm5lbGVtID0gMDsKKyAgc2V0LT5lbGVtcyA9IHJlX21hbGxvYyAoaW50LCBzaXplKTsKKyAgaWYgKEJFIChzZXQtPmVsZW1zID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcmVfbm9kZV9zZXRfaW5pdF8xIChyZV9ub2RlX3NldCAqc2V0LCBpbnQgZWxlbSkKK3sKKyAgc2V0LT5hbGxvYyA9IDE7CisgIHNldC0+bmVsZW0gPSAxOworICBzZXQtPmVsZW1zID0gcmVfbWFsbG9jIChpbnQsIDEpOworICBpZiAoQkUgKHNldC0+ZWxlbXMgPT0gTlVMTCwgMCkpCisgICAgeworICAgICAgc2V0LT5hbGxvYyA9IHNldC0+bmVsZW0gPSAwOworICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgfQorICBzZXQtPmVsZW1zWzBdID0gZWxlbTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2luaXRfMiAocmVfbm9kZV9zZXQgKnNldCwgaW50IGVsZW0xLCBpbnQgZWxlbTIpCit7CisgIHNldC0+YWxsb2MgPSAyOworICBzZXQtPmVsZW1zID0gcmVfbWFsbG9jIChpbnQsIDIpOworICBpZiAoQkUgKHNldC0+ZWxlbXMgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisgIGlmIChlbGVtMSA9PSBlbGVtMikKKyAgICB7CisgICAgICBzZXQtPm5lbGVtID0gMTsKKyAgICAgIHNldC0+ZWxlbXNbMF0gPSBlbGVtMTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzZXQtPm5lbGVtID0gMjsKKyAgICAgIGlmIChlbGVtMSA8IGVsZW0yKQorCXsKKwkgIHNldC0+ZWxlbXNbMF0gPSBlbGVtMTsKKwkgIHNldC0+ZWxlbXNbMV0gPSBlbGVtMjsKKwl9CisgICAgICBlbHNlCisJeworCSAgc2V0LT5lbGVtc1swXSA9IGVsZW0yOworCSAgc2V0LT5lbGVtc1sxXSA9IGVsZW0xOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9pbml0X2NvcHkgKHJlX25vZGVfc2V0ICpkZXN0LCBjb25zdCByZV9ub2RlX3NldCAqc3JjKQoreworICBkZXN0LT5uZWxlbSA9IHNyYy0+bmVsZW07CisgIGlmIChzcmMtPm5lbGVtID4gMCkKKyAgICB7CisgICAgICBkZXN0LT5hbGxvYyA9IGRlc3QtPm5lbGVtOworICAgICAgZGVzdC0+ZWxlbXMgPSByZV9tYWxsb2MgKGludCwgZGVzdC0+YWxsb2MpOworICAgICAgaWYgKEJFIChkZXN0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKwl7CisJICBkZXN0LT5hbGxvYyA9IGRlc3QtPm5lbGVtID0gMDsKKwkgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMsIHNyYy0+ZWxlbXMsIHNyYy0+bmVsZW0gKiBzaXplb2YgKGludCkpOworICAgIH0KKyAgZWxzZQorICAgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKGRlc3QpOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIENhbGN1bGF0ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZSBzZXRzIFNSQzEgYW5kIFNSQzIuIEFuZCBtZXJnZSBpdCB0bworICAgREVTVC4gUmV0dXJuIHZhbHVlIGluZGljYXRlIHRoZSBlcnJvciBjb2RlIG9yIFJFR19OT0VSUk9SIGlmIHN1Y2NlZWRlZC4KKyAgIE5vdGU6IFdlIGFzc3VtZSBkZXN0LT5lbGVtcyBpcyBOVUxMLCB3aGVuIGRlc3QtPmFsbG9jIGlzIDAuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2FkZF9pbnRlcnNlY3QgKHJlX25vZGVfc2V0ICpkZXN0LCBjb25zdCByZV9ub2RlX3NldCAqc3JjMSwKKwkJCSAgIGNvbnN0IHJlX25vZGVfc2V0ICpzcmMyKQoreworICBpbnQgaTEsIGkyLCBpcywgaWQsIGRlbHRhLCBzYmFzZTsKKyAgaWYgKHNyYzEtPm5lbGVtID09IDAgfHwgc3JjMi0+bmVsZW0gPT0gMCkKKyAgICByZXR1cm4gUkVHX05PRVJST1I7CisKKyAgLyogV2UgbmVlZCBkZXN0LT5uZWxlbSArIDIgKiBlbGVtc19pbl9pbnRlcnNlY3Rpb247IHRoaXMgaXMgYQorICAgICBjb25zZXJ2YXRpdmUgZXN0aW1hdGUuICAqLworICBpZiAoc3JjMS0+bmVsZW0gKyBzcmMyLT5uZWxlbSArIGRlc3QtPm5lbGVtID4gZGVzdC0+YWxsb2MpCisgICAgeworICAgICAgaW50IG5ld19hbGxvYyA9IHNyYzEtPm5lbGVtICsgc3JjMi0+bmVsZW0gKyBkZXN0LT5hbGxvYzsKKyAgICAgIGludCAqbmV3X2VsZW1zID0gcmVfcmVhbGxvYyAoZGVzdC0+ZWxlbXMsIGludCwgbmV3X2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2VsZW1zID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgZGVzdC0+ZWxlbXMgPSBuZXdfZWxlbXM7CisgICAgICBkZXN0LT5hbGxvYyA9IG5ld19hbGxvYzsKKyAgICB9CisKKyAgLyogRmluZCB0aGUgaXRlbXMgaW4gdGhlIGludGVyc2VjdGlvbiBvZiBTUkMxIGFuZCBTUkMyLCBhbmQgY29weQorICAgICBpbnRvIHRoZSB0b3Agb2YgREVTVCB0aG9zZSB0aGF0IGFyZSBub3QgYWxyZWFkeSBpbiBERVNUIGl0c2VsZi4gICovCisgIHNiYXNlID0gZGVzdC0+bmVsZW0gKyBzcmMxLT5uZWxlbSArIHNyYzItPm5lbGVtOworICBpMSA9IHNyYzEtPm5lbGVtIC0gMTsKKyAgaTIgPSBzcmMyLT5uZWxlbSAtIDE7CisgIGlkID0gZGVzdC0+bmVsZW0gLSAxOworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGlmIChzcmMxLT5lbGVtc1tpMV0gPT0gc3JjMi0+ZWxlbXNbaTJdKQorCXsKKwkgIC8qIFRyeSB0byBmaW5kIHRoZSBpdGVtIGluIERFU1QuICBNYXliZSB3ZSBjb3VsZCBiaW5hcnkgc2VhcmNoPyAgKi8KKwkgIHdoaWxlIChpZCA+PSAwICYmIGRlc3QtPmVsZW1zW2lkXSA+IHNyYzEtPmVsZW1zW2kxXSkKKwkgICAgLS1pZDsKKworCSAgaWYgKGlkIDwgMCB8fCBkZXN0LT5lbGVtc1tpZF0gIT0gc3JjMS0+ZWxlbXNbaTFdKQorCSAgICBkZXN0LT5lbGVtc1stLXNiYXNlXSA9IHNyYzEtPmVsZW1zW2kxXTsKKworCSAgaWYgKC0taTEgPCAwIHx8IC0taTIgPCAwKQorCSAgICBicmVhazsKKwl9CisKKyAgICAgIC8qIExvd2VyIHRoZSBoaWdoZXN0IG9mIHRoZSB0d28gaXRlbXMuICAqLworICAgICAgZWxzZSBpZiAoc3JjMS0+ZWxlbXNbaTFdIDwgc3JjMi0+ZWxlbXNbaTJdKQorCXsKKwkgIGlmICgtLWkyIDwgMCkKKwkgICAgYnJlYWs7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmICgtLWkxIDwgMCkKKwkgICAgYnJlYWs7CisJfQorICAgIH0KKworICBpZCA9IGRlc3QtPm5lbGVtIC0gMTsKKyAgaXMgPSBkZXN0LT5uZWxlbSArIHNyYzEtPm5lbGVtICsgc3JjMi0+bmVsZW0gLSAxOworICBkZWx0YSA9IGlzIC0gc2Jhc2UgKyAxOworCisgIC8qIE5vdyBjb3B5LiAgV2hlbiBERUxUQSBiZWNvbWVzIHplcm8sIHRoZSByZW1haW5pbmcKKyAgICAgREVTVCBlbGVtZW50cyBhcmUgYWxyZWFkeSBpbiBwbGFjZTsgdGhpcyBpcyBtb3JlIG9yCisgICAgIGxlc3MgdGhlIHNhbWUgbG9vcCB0aGF0IGlzIGluIHJlX25vZGVfc2V0X21lcmdlLiAgKi8KKyAgZGVzdC0+bmVsZW0gKz0gZGVsdGE7CisgIGlmIChkZWx0YSA+IDAgJiYgaWQgPj0gMCkKKyAgICBmb3IgKDs7KQorICAgICAgeworCWlmIChkZXN0LT5lbGVtc1tpc10gPiBkZXN0LT5lbGVtc1tpZF0pCisJICB7CisJICAgIC8qIENvcHkgZnJvbSB0aGUgdG9wLiAgKi8KKwkgICAgZGVzdC0+ZWxlbXNbaWQgKyBkZWx0YS0tXSA9IGRlc3QtPmVsZW1zW2lzLS1dOworCSAgICBpZiAoZGVsdGEgPT0gMCkKKwkgICAgICBicmVhazsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIC8qIFNsaWRlIGZyb20gdGhlIGJvdHRvbS4gICovCisJICAgIGRlc3QtPmVsZW1zW2lkICsgZGVsdGFdID0gZGVzdC0+ZWxlbXNbaWRdOworCSAgICBpZiAoLS1pZCA8IDApCisJICAgICAgYnJlYWs7CisJICB9CisgICAgICB9CisKKyAgLyogQ29weSByZW1haW5pbmcgU1JDIGVsZW1lbnRzLiAgKi8KKyAgbWVtY3B5IChkZXN0LT5lbGVtcywgZGVzdC0+ZWxlbXMgKyBzYmFzZSwgZGVsdGEgKiBzaXplb2YgKGludCkpOworCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIHRoZSB1bmlvbiBzZXQgb2YgdGhlIHNldHMgU1JDMSBhbmQgU1JDMi4gQW5kIHN0b3JlIGl0IHRvCisgICBERVNULiBSZXR1cm4gdmFsdWUgaW5kaWNhdGUgdGhlIGVycm9yIGNvZGUgb3IgUkVHX05PRVJST1IgaWYgc3VjY2VlZGVkLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9pbml0X3VuaW9uIChyZV9ub2RlX3NldCAqZGVzdCwgY29uc3QgcmVfbm9kZV9zZXQgKnNyYzEsCisJCQljb25zdCByZV9ub2RlX3NldCAqc3JjMikKK3sKKyAgaW50IGkxLCBpMiwgaWQ7CisgIGlmIChzcmMxICE9IE5VTEwgJiYgc3JjMS0+bmVsZW0gPiAwICYmIHNyYzIgIT0gTlVMTCAmJiBzcmMyLT5uZWxlbSA+IDApCisgICAgeworICAgICAgZGVzdC0+YWxsb2MgPSBzcmMxLT5uZWxlbSArIHNyYzItPm5lbGVtOworICAgICAgZGVzdC0+ZWxlbXMgPSByZV9tYWxsb2MgKGludCwgZGVzdC0+YWxsb2MpOworICAgICAgaWYgKEJFIChkZXN0LT5lbGVtcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoc3JjMSAhPSBOVUxMICYmIHNyYzEtPm5lbGVtID4gMCkKKwlyZXR1cm4gcmVfbm9kZV9zZXRfaW5pdF9jb3B5IChkZXN0LCBzcmMxKTsKKyAgICAgIGVsc2UgaWYgKHNyYzIgIT0gTlVMTCAmJiBzcmMyLT5uZWxlbSA+IDApCisJcmV0dXJuIHJlX25vZGVfc2V0X2luaXRfY29weSAoZGVzdCwgc3JjMik7CisgICAgICBlbHNlCisJcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGVzdCk7CisgICAgICByZXR1cm4gUkVHX05PRVJST1I7CisgICAgfQorICBmb3IgKGkxID0gaTIgPSBpZCA9IDAgOyBpMSA8IHNyYzEtPm5lbGVtICYmIGkyIDwgc3JjMi0+bmVsZW0gOykKKyAgICB7CisgICAgICBpZiAoc3JjMS0+ZWxlbXNbaTFdID4gc3JjMi0+ZWxlbXNbaTJdKQorCXsKKwkgIGRlc3QtPmVsZW1zW2lkKytdID0gc3JjMi0+ZWxlbXNbaTIrK107CisJICBjb250aW51ZTsKKwl9CisgICAgICBpZiAoc3JjMS0+ZWxlbXNbaTFdID09IHNyYzItPmVsZW1zW2kyXSkKKwkrK2kyOworICAgICAgZGVzdC0+ZWxlbXNbaWQrK10gPSBzcmMxLT5lbGVtc1tpMSsrXTsKKyAgICB9CisgIGlmIChpMSA8IHNyYzEtPm5lbGVtKQorICAgIHsKKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMgKyBpZCwgc3JjMS0+ZWxlbXMgKyBpMSwKKwkgICAgIChzcmMxLT5uZWxlbSAtIGkxKSAqIHNpemVvZiAoaW50KSk7CisgICAgICBpZCArPSBzcmMxLT5uZWxlbSAtIGkxOworICAgIH0KKyAgZWxzZSBpZiAoaTIgPCBzcmMyLT5uZWxlbSkKKyAgICB7CisgICAgICBtZW1jcHkgKGRlc3QtPmVsZW1zICsgaWQsIHNyYzItPmVsZW1zICsgaTIsCisJICAgICAoc3JjMi0+bmVsZW0gLSBpMikgKiBzaXplb2YgKGludCkpOworICAgICAgaWQgKz0gc3JjMi0+bmVsZW0gLSBpMjsKKyAgICB9CisgIGRlc3QtPm5lbGVtID0gaWQ7CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogQ2FsY3VsYXRlIHRoZSB1bmlvbiBzZXQgb2YgdGhlIHNldHMgREVTVCBhbmQgU1JDLiBBbmQgc3RvcmUgaXQgdG8KKyAgIERFU1QuIFJldHVybiB2YWx1ZSBpbmRpY2F0ZSB0aGUgZXJyb3IgY29kZSBvciBSRUdfTk9FUlJPUiBpZiBzdWNjZWVkZWQuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X21lcmdlIChyZV9ub2RlX3NldCAqZGVzdCwgY29uc3QgcmVfbm9kZV9zZXQgKnNyYykKK3sKKyAgaW50IGlzLCBpZCwgc2Jhc2UsIGRlbHRhOworICBpZiAoc3JjID09IE5VTEwgfHwgc3JjLT5uZWxlbSA9PSAwKQorICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKyAgaWYgKGRlc3QtPmFsbG9jIDwgMiAqIHNyYy0+bmVsZW0gKyBkZXN0LT5uZWxlbSkKKyAgICB7CisgICAgICBpbnQgbmV3X2FsbG9jID0gMiAqIChzcmMtPm5lbGVtICsgZGVzdC0+YWxsb2MpOworICAgICAgaW50ICpuZXdfYnVmZmVyID0gcmVfcmVhbGxvYyAoZGVzdC0+ZWxlbXMsIGludCwgbmV3X2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2J1ZmZlciA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIGRlc3QtPmVsZW1zID0gbmV3X2J1ZmZlcjsKKyAgICAgIGRlc3QtPmFsbG9jID0gbmV3X2FsbG9jOworICAgIH0KKworICBpZiAoQkUgKGRlc3QtPm5lbGVtID09IDAsIDApKQorICAgIHsKKyAgICAgIGRlc3QtPm5lbGVtID0gc3JjLT5uZWxlbTsKKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMsIHNyYy0+ZWxlbXMsIHNyYy0+bmVsZW0gKiBzaXplb2YgKGludCkpOworICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworICAgIH0KKworICAvKiBDb3B5IGludG8gdGhlIHRvcCBvZiBERVNUIHRoZSBpdGVtcyBvZiBTUkMgdGhhdCBhcmUgbm90CisgICAgIGZvdW5kIGluIERFU1QuICBNYXliZSB3ZSBjb3VsZCBiaW5hcnkgc2VhcmNoIGluIERFU1Q/ICAqLworICBmb3IgKHNiYXNlID0gZGVzdC0+bmVsZW0gKyAyICogc3JjLT5uZWxlbSwKKyAgICAgICBpcyA9IHNyYy0+bmVsZW0gLSAxLCBpZCA9IGRlc3QtPm5lbGVtIC0gMTsgaXMgPj0gMCAmJiBpZCA+PSAwOyApCisgICAgeworICAgICAgaWYgKGRlc3QtPmVsZW1zW2lkXSA9PSBzcmMtPmVsZW1zW2lzXSkKKwlpcy0tLCBpZC0tOworICAgICAgZWxzZSBpZiAoZGVzdC0+ZWxlbXNbaWRdIDwgc3JjLT5lbGVtc1tpc10pCisJZGVzdC0+ZWxlbXNbLS1zYmFzZV0gPSBzcmMtPmVsZW1zW2lzLS1dOworICAgICAgZWxzZSAvKiBpZiAoZGVzdC0+ZWxlbXNbaWRdID4gc3JjLT5lbGVtc1tpc10pICovCisJLS1pZDsKKyAgICB9CisKKyAgaWYgKGlzID49IDApCisgICAgeworICAgICAgLyogSWYgREVTVCBpcyBleGhhdXN0ZWQsIHRoZSByZW1haW5pbmcgaXRlbXMgb2YgU1JDIG11c3QgYmUgdW5pcXVlLiAgKi8KKyAgICAgIHNiYXNlIC09IGlzICsgMTsKKyAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMgKyBzYmFzZSwgc3JjLT5lbGVtcywgKGlzICsgMSkgKiBzaXplb2YgKGludCkpOworICAgIH0KKworICBpZCA9IGRlc3QtPm5lbGVtIC0gMTsKKyAgaXMgPSBkZXN0LT5uZWxlbSArIDIgKiBzcmMtPm5lbGVtIC0gMTsKKyAgZGVsdGEgPSBpcyAtIHNiYXNlICsgMTsKKyAgaWYgKGRlbHRhID09IDApCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgIC8qIE5vdyBjb3B5LiAgV2hlbiBERUxUQSBiZWNvbWVzIHplcm8sIHRoZSByZW1haW5pbmcKKyAgICAgREVTVCBlbGVtZW50cyBhcmUgYWxyZWFkeSBpbiBwbGFjZS4gICovCisgIGRlc3QtPm5lbGVtICs9IGRlbHRhOworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGlmIChkZXN0LT5lbGVtc1tpc10gPiBkZXN0LT5lbGVtc1tpZF0pCisJeworCSAgLyogQ29weSBmcm9tIHRoZSB0b3AuICAqLworCSAgZGVzdC0+ZWxlbXNbaWQgKyBkZWx0YS0tXSA9IGRlc3QtPmVsZW1zW2lzLS1dOworCSAgaWYgKGRlbHRhID09IDApCisJICAgIGJyZWFrOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBTbGlkZSBmcm9tIHRoZSBib3R0b20uICAqLworCSAgZGVzdC0+ZWxlbXNbaWQgKyBkZWx0YV0gPSBkZXN0LT5lbGVtc1tpZF07CisJICBpZiAoLS1pZCA8IDApCisJICAgIHsKKwkgICAgICAvKiBDb3B5IHJlbWFpbmluZyBTUkMgZWxlbWVudHMuICAqLworCSAgICAgIG1lbWNweSAoZGVzdC0+ZWxlbXMsIGRlc3QtPmVsZW1zICsgc2Jhc2UsCisJCSAgICAgIGRlbHRhICogc2l6ZW9mIChpbnQpKTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBJbnNlcnQgdGhlIG5ldyBlbGVtZW50IEVMRU0gdG8gdGhlIHJlX25vZGVfc2V0KiBTRVQuCisgICBTRVQgc2hvdWxkIG5vdCBhbHJlYWR5IGhhdmUgRUxFTS4KKyAgIHJldHVybiAtMSBpZiBhbiBlcnJvciBoYXMgb2NjdXJyZWQsIHJldHVybiAxIG90aGVyd2lzZS4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCityZV9ub2RlX3NldF9pbnNlcnQgKHJlX25vZGVfc2V0ICpzZXQsIGludCBlbGVtKQoreworICBpbnQgaWR4OworICAvKiBJbiBjYXNlIHRoZSBzZXQgaXMgZW1wdHkuICAqLworICBpZiAoc2V0LT5hbGxvYyA9PSAwKQorICAgIHsKKyAgICAgIGlmIChCRSAocmVfbm9kZV9zZXRfaW5pdF8xIChzZXQsIGVsZW0pID09IFJFR19OT0VSUk9SLCAxKSkKKwlyZXR1cm4gMTsKKyAgICAgIGVsc2UKKwlyZXR1cm4gLTE7CisgICAgfQorCisgIGlmIChCRSAoc2V0LT5uZWxlbSwgMCkgPT0gMCkKKyAgICB7CisgICAgICAvKiBXZSBhbHJlYWR5IGd1YXJhbnRlZWQgYWJvdmUgdGhhdCBzZXQtPmFsbG9jICE9IDAuICAqLworICAgICAgc2V0LT5lbGVtc1swXSA9IGVsZW07CisgICAgICArK3NldC0+bmVsZW07CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgLyogUmVhbGxvYyBpZiB3ZSBuZWVkLiAgKi8KKyAgaWYgKHNldC0+YWxsb2MgPT0gc2V0LT5uZWxlbSkKKyAgICB7CisgICAgICBpbnQgKm5ld19lbGVtczsKKyAgICAgIHNldC0+YWxsb2MgPSBzZXQtPmFsbG9jICogMjsKKyAgICAgIG5ld19lbGVtcyA9IHJlX3JlYWxsb2MgKHNldC0+ZWxlbXMsIGludCwgc2V0LT5hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19lbGVtcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gLTE7CisgICAgICBzZXQtPmVsZW1zID0gbmV3X2VsZW1zOworICAgIH0KKworICAvKiBNb3ZlIHRoZSBlbGVtZW50cyB3aGljaCBmb2xsb3dzIHRoZSBuZXcgZWxlbWVudC4gIFRlc3QgdGhlCisgICAgIGZpcnN0IGVsZW1lbnQgc2VwYXJhdGVseSB0byBza2lwIGEgY2hlY2sgaW4gdGhlIGlubmVyIGxvb3AuICAqLworICBpZiAoZWxlbSA8IHNldC0+ZWxlbXNbMF0pCisgICAgeworICAgICAgaWR4ID0gMDsKKyAgICAgIGZvciAoaWR4ID0gc2V0LT5uZWxlbTsgaWR4ID4gMDsgaWR4LS0pCisJc2V0LT5lbGVtc1tpZHhdID0gc2V0LT5lbGVtc1tpZHggLSAxXTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmb3IgKGlkeCA9IHNldC0+bmVsZW07IHNldC0+ZWxlbXNbaWR4IC0gMV0gPiBlbGVtOyBpZHgtLSkKKwlzZXQtPmVsZW1zW2lkeF0gPSBzZXQtPmVsZW1zW2lkeCAtIDFdOworICAgIH0KKworICAvKiBJbnNlcnQgdGhlIG5ldyBlbGVtZW50LiAgKi8KKyAgc2V0LT5lbGVtc1tpZHhdID0gZWxlbTsKKyAgKytzZXQtPm5lbGVtOworICByZXR1cm4gMTsKK30KKworLyogSW5zZXJ0IHRoZSBuZXcgZWxlbWVudCBFTEVNIHRvIHRoZSByZV9ub2RlX3NldCogU0VULgorICAgU0VUIHNob3VsZCBub3QgYWxyZWFkeSBoYXZlIGFueSBlbGVtZW50IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBFTEVNLgorICAgUmV0dXJuIC0xIGlmIGFuIGVycm9yIGhhcyBvY2N1cnJlZCwgcmV0dXJuIDEgb3RoZXJ3aXNlLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X2luc2VydF9sYXN0IChyZV9ub2RlX3NldCAqc2V0LCBpbnQgZWxlbSkKK3sKKyAgLyogUmVhbGxvYyBpZiB3ZSBuZWVkLiAgKi8KKyAgaWYgKHNldC0+YWxsb2MgPT0gc2V0LT5uZWxlbSkKKyAgICB7CisgICAgICBpbnQgKm5ld19lbGVtczsKKyAgICAgIHNldC0+YWxsb2MgPSAoc2V0LT5hbGxvYyArIDEpICogMjsKKyAgICAgIG5ld19lbGVtcyA9IHJlX3JlYWxsb2MgKHNldC0+ZWxlbXMsIGludCwgc2V0LT5hbGxvYyk7CisgICAgICBpZiAoQkUgKG5ld19lbGVtcyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gLTE7CisgICAgICBzZXQtPmVsZW1zID0gbmV3X2VsZW1zOworICAgIH0KKworICAvKiBJbnNlcnQgdGhlIG5ldyBlbGVtZW50LiAgKi8KKyAgc2V0LT5lbGVtc1tzZXQtPm5lbGVtKytdID0gZWxlbTsKKyAgcmV0dXJuIDE7Cit9CisKKy8qIENvbXBhcmUgdHdvIG5vZGUgc2V0cyBTRVQxIGFuZCBTRVQyLgorICAgcmV0dXJuIDEgaWYgU0VUMSBhbmQgU0VUMiBhcmUgZXF1aXZhbGVudCwgcmV0dXJuIDAgb3RoZXJ3aXNlLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSkKK3JlX25vZGVfc2V0X2NvbXBhcmUgKGNvbnN0IHJlX25vZGVfc2V0ICpzZXQxLCBjb25zdCByZV9ub2RlX3NldCAqc2V0MikKK3sKKyAgaW50IGk7CisgIGlmIChzZXQxID09IE5VTEwgfHwgc2V0MiA9PSBOVUxMIHx8IHNldDEtPm5lbGVtICE9IHNldDItPm5lbGVtKQorICAgIHJldHVybiAwOworICBmb3IgKGkgPSBzZXQxLT5uZWxlbSA7IC0taSA+PSAwIDsgKQorICAgIGlmIChzZXQxLT5lbGVtc1tpXSAhPSBzZXQyLT5lbGVtc1tpXSkKKyAgICAgIHJldHVybiAwOworICByZXR1cm4gMTsKK30KKworLyogUmV0dXJuIChpZHggKyAxKSBpZiBTRVQgY29udGFpbnMgdGhlIGVsZW1lbnQgRUxFTSwgcmV0dXJuIDAgb3RoZXJ3aXNlLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSkKK3JlX25vZGVfc2V0X2NvbnRhaW5zIChjb25zdCByZV9ub2RlX3NldCAqc2V0LCBpbnQgZWxlbSkKK3sKKyAgdW5zaWduZWQgaW50IGlkeCwgcmlnaHQsIG1pZDsKKyAgaWYgKHNldC0+bmVsZW0gPD0gMCkKKyAgICByZXR1cm4gMDsKKworICAvKiBCaW5hcnkgc2VhcmNoIHRoZSBlbGVtZW50LiAgKi8KKyAgaWR4ID0gMDsKKyAgcmlnaHQgPSBzZXQtPm5lbGVtIC0gMTsKKyAgd2hpbGUgKGlkeCA8IHJpZ2h0KQorICAgIHsKKyAgICAgIG1pZCA9IChpZHggKyByaWdodCkgLyAyOworICAgICAgaWYgKHNldC0+ZWxlbXNbbWlkXSA8IGVsZW0pCisJaWR4ID0gbWlkICsgMTsKKyAgICAgIGVsc2UKKwlyaWdodCA9IG1pZDsKKyAgICB9CisgIHJldHVybiBzZXQtPmVsZW1zW2lkeF0gPT0gZWxlbSA/IGlkeCArIDEgOiAwOworfQorCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX25vZGVfc2V0X3JlbW92ZV9hdCAocmVfbm9kZV9zZXQgKnNldCwgaW50IGlkeCkKK3sKKyAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IHNldC0+bmVsZW0pCisgICAgcmV0dXJuOworICAtLXNldC0+bmVsZW07CisgIGZvciAoOyBpZHggPCBzZXQtPm5lbGVtOyBpZHgrKykKKyAgICBzZXQtPmVsZW1zW2lkeF0gPSBzZXQtPmVsZW1zW2lkeCArIDFdOworfQorDAorCisvKiBBZGQgdGhlIHRva2VuIFRPS0VOIHRvIGRmYS0+bm9kZXMsIGFuZCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSB0b2tlbi4KKyAgIE9yIHJldHVybiAtMSwgaWYgYW4gZXJyb3IgaGFzIG9jY3VycmVkLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3JlX2RmYV9hZGRfbm9kZSAocmVfZGZhX3QgKmRmYSwgcmVfdG9rZW5fdCB0b2tlbikKK3sKKyAgaWYgKEJFIChkZmEtPm5vZGVzX2xlbiA+PSBkZmEtPm5vZGVzX2FsbG9jLCAwKSkKKyAgICB7CisgICAgICBzaXplX3QgbmV3X25vZGVzX2FsbG9jID0gZGZhLT5ub2Rlc19hbGxvYyAqIDI7CisgICAgICBpbnQgKm5ld19uZXh0cywgKm5ld19pbmRpY2VzOworICAgICAgcmVfbm9kZV9zZXQgKm5ld19lZGVzdHMsICpuZXdfZWNsb3N1cmVzOworICAgICAgcmVfdG9rZW5fdCAqbmV3X25vZGVzOworCisgICAgICAvKiBBdm9pZCBvdmVyZmxvd3MgaW4gcmVhbGxvYy4gICovCisgICAgICBjb25zdCBzaXplX3QgbWF4X29iamVjdF9zaXplID0gTUFYIChzaXplb2YgKHJlX3Rva2VuX3QpLAorCQkJCQkgIE1BWCAoc2l6ZW9mIChyZV9ub2RlX3NldCksCisJCQkJCSAgICAgICBzaXplb2YgKGludCkpKTsKKyAgICAgIGlmIChCRSAoU0laRV9NQVggLyBtYXhfb2JqZWN0X3NpemUgPCBuZXdfbm9kZXNfYWxsb2MsIDApKQorCXJldHVybiAtMTsKKworICAgICAgbmV3X25vZGVzID0gcmVfcmVhbGxvYyAoZGZhLT5ub2RlcywgcmVfdG9rZW5fdCwgbmV3X25vZGVzX2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X25vZGVzID09IE5VTEwsIDApKQorCXJldHVybiAtMTsKKyAgICAgIGRmYS0+bm9kZXMgPSBuZXdfbm9kZXM7CisgICAgICBuZXdfbmV4dHMgPSByZV9yZWFsbG9jIChkZmEtPm5leHRzLCBpbnQsIG5ld19ub2Rlc19hbGxvYyk7CisgICAgICBuZXdfaW5kaWNlcyA9IHJlX3JlYWxsb2MgKGRmYS0+b3JnX2luZGljZXMsIGludCwgbmV3X25vZGVzX2FsbG9jKTsKKyAgICAgIG5ld19lZGVzdHMgPSByZV9yZWFsbG9jIChkZmEtPmVkZXN0cywgcmVfbm9kZV9zZXQsIG5ld19ub2Rlc19hbGxvYyk7CisgICAgICBuZXdfZWNsb3N1cmVzID0gcmVfcmVhbGxvYyAoZGZhLT5lY2xvc3VyZXMsIHJlX25vZGVfc2V0LCBuZXdfbm9kZXNfYWxsb2MpOworICAgICAgaWYgKEJFIChuZXdfbmV4dHMgPT0gTlVMTCB8fCBuZXdfaW5kaWNlcyA9PSBOVUxMCisJICAgICAgfHwgbmV3X2VkZXN0cyA9PSBOVUxMIHx8IG5ld19lY2xvc3VyZXMgPT0gTlVMTCwgMCkpCisJcmV0dXJuIC0xOworICAgICAgZGZhLT5uZXh0cyA9IG5ld19uZXh0czsKKyAgICAgIGRmYS0+b3JnX2luZGljZXMgPSBuZXdfaW5kaWNlczsKKyAgICAgIGRmYS0+ZWRlc3RzID0gbmV3X2VkZXN0czsKKyAgICAgIGRmYS0+ZWNsb3N1cmVzID0gbmV3X2VjbG9zdXJlczsKKyAgICAgIGRmYS0+bm9kZXNfYWxsb2MgPSBuZXdfbm9kZXNfYWxsb2M7CisgICAgfQorICBkZmEtPm5vZGVzW2RmYS0+bm9kZXNfbGVuXSA9IHRva2VuOworICBkZmEtPm5vZGVzW2RmYS0+bm9kZXNfbGVuXS5jb25zdHJhaW50ID0gMDsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBkZmEtPm5vZGVzW2RmYS0+bm9kZXNfbGVuXS5hY2NlcHRfbWIgPQorICAgICh0b2tlbi50eXBlID09IE9QX1BFUklPRCAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKSB8fCB0b2tlbi50eXBlID09IENPTVBMRVhfQlJBQ0tFVDsKKyNlbmRpZgorICBkZmEtPm5leHRzW2RmYS0+bm9kZXNfbGVuXSA9IC0xOworICByZV9ub2RlX3NldF9pbml0X2VtcHR5IChkZmEtPmVkZXN0cyArIGRmYS0+bm9kZXNfbGVuKTsKKyAgcmVfbm9kZV9zZXRfaW5pdF9lbXB0eSAoZGZhLT5lY2xvc3VyZXMgKyBkZmEtPm5vZGVzX2xlbik7CisgIHJldHVybiBkZmEtPm5vZGVzX2xlbisrOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NhbGNfc3RhdGVfaGFzaCAoY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLCB1bnNpZ25lZCBpbnQgY29udGV4dCkKK3sKKyAgdW5zaWduZWQgaW50IGhhc2ggPSBub2Rlcy0+bmVsZW0gKyBjb250ZXh0OworICBpbnQgaTsKKyAgZm9yIChpID0gMCA7IGkgPCBub2Rlcy0+bmVsZW0gOyBpKyspCisgICAgaGFzaCArPSBub2Rlcy0+ZWxlbXNbaV07CisgIHJldHVybiBoYXNoOworfQorCisvKiBTZWFyY2ggZm9yIHRoZSBzdGF0ZSB3aG9zZSBub2RlX3NldCBpcyBlcXVpdmFsZW50IHRvIE5PREVTLgorICAgUmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBzdGF0ZSwgaWYgd2UgZm91bmQgaXQgaW4gdGhlIERGQS4KKyAgIE90aGVyd2lzZSBjcmVhdGUgdGhlIG5ldyBvbmUgYW5kIHJldHVybiBpdC4gIEluIGNhc2Ugb2YgYW4gZXJyb3IKKyAgIHJldHVybiBOVUxMIGFuZCBzZXQgdGhlIGVycm9yIGNvZGUgaW4gRVJSLgorICAgTm90ZTogLSBXZSBhc3N1bWUgTlVMTCBhcyB0aGUgaW52YWxpZCBzdGF0ZSwgdGhlbiBpdCBpcyBwb3NzaWJsZSB0aGF0CisJICAgcmV0dXJuIHZhbHVlIGlzIE5VTEwgYW5kIEVSUiBpcyBSRUdfTk9FUlJPUi4KKwkgLSBXZSBuZXZlciByZXR1cm4gbm9uLU5VTEwgdmFsdWUgaW4gY2FzZSBvZiBhbnkgZXJyb3JzLCBpdCBpcyBmb3IKKwkgICBvcHRpbWl6YXRpb24uICAqLworCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCitpbnRlcm5hbF9mdW5jdGlvbgorcmVfYWNxdWlyZV9zdGF0ZSAocmVnX2VycmNvZGVfdCAqZXJyLCBjb25zdCByZV9kZmFfdCAqZGZhLAorCQkgIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcykKK3sKKyAgdW5zaWduZWQgaW50IGhhc2g7CisgIHJlX2RmYXN0YXRlX3QgKm5ld19zdGF0ZTsKKyAgc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5ICpzcG90OworICBpbnQgaTsKKyAgaWYgKEJFIChub2Rlcy0+bmVsZW0gPT0gMCwgMCkpCisgICAgeworICAgICAgKmVyciA9IFJFR19OT0VSUk9SOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICBoYXNoID0gY2FsY19zdGF0ZV9oYXNoIChub2RlcywgMCk7CisgIHNwb3QgPSBkZmEtPnN0YXRlX3RhYmxlICsgKGhhc2ggJiBkZmEtPnN0YXRlX2hhc2hfbWFzayk7CisKKyAgZm9yIChpID0gMCA7IGkgPCBzcG90LT5udW0gOyBpKyspCisgICAgeworICAgICAgcmVfZGZhc3RhdGVfdCAqc3RhdGUgPSBzcG90LT5hcnJheVtpXTsKKyAgICAgIGlmIChoYXNoICE9IHN0YXRlLT5oYXNoKQorCWNvbnRpbnVlOworICAgICAgaWYgKHJlX25vZGVfc2V0X2NvbXBhcmUgKCZzdGF0ZS0+bm9kZXMsIG5vZGVzKSkKKwlyZXR1cm4gc3RhdGU7CisgICAgfQorCisgIC8qIFRoZXJlIGFyZSBubyBhcHByb3ByaWF0ZSBzdGF0ZSBpbiB0aGUgZGZhLCBjcmVhdGUgdGhlIG5ldyBvbmUuICAqLworICBuZXdfc3RhdGUgPSBjcmVhdGVfY2lfbmV3c3RhdGUgKGRmYSwgbm9kZXMsIGhhc2gpOworICBpZiAoQkUgKG5ld19zdGF0ZSA9PSBOVUxMLCAwKSkKKyAgICAqZXJyID0gUkVHX0VTUEFDRTsKKworICByZXR1cm4gbmV3X3N0YXRlOworfQorCisvKiBTZWFyY2ggZm9yIHRoZSBzdGF0ZSB3aG9zZSBub2RlX3NldCBpcyBlcXVpdmFsZW50IHRvIE5PREVTIGFuZAorICAgd2hvc2UgY29udGV4dCBpcyBlcXVpdmFsZW50IHRvIENPTlRFWFQuCisgICBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXRlLCBpZiB3ZSBmb3VuZCBpdCBpbiB0aGUgREZBLgorICAgT3RoZXJ3aXNlIGNyZWF0ZSB0aGUgbmV3IG9uZSBhbmQgcmV0dXJuIGl0LiAgSW4gY2FzZSBvZiBhbiBlcnJvcgorICAgcmV0dXJuIE5VTEwgYW5kIHNldCB0aGUgZXJyb3IgY29kZSBpbiBFUlIuCisgICBOb3RlOiAtIFdlIGFzc3VtZSBOVUxMIGFzIHRoZSBpbnZhbGlkIHN0YXRlLCB0aGVuIGl0IGlzIHBvc3NpYmxlIHRoYXQKKwkgICByZXR1cm4gdmFsdWUgaXMgTlVMTCBhbmQgRVJSIGlzIFJFR19OT0VSUk9SLgorCSAtIFdlIG5ldmVyIHJldHVybiBub24tTlVMTCB2YWx1ZSBpbiBjYXNlIG9mIGFueSBlcnJvcnMsIGl0IGlzIGZvcgorCSAgIG9wdGltaXphdGlvbi4gICovCisKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK2ludGVybmFsX2Z1bmN0aW9uCityZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKHJlZ19lcnJjb2RlX3QgKmVyciwgY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzLCB1bnNpZ25lZCBpbnQgY29udGV4dCkKK3sKKyAgdW5zaWduZWQgaW50IGhhc2g7CisgIHJlX2RmYXN0YXRlX3QgKm5ld19zdGF0ZTsKKyAgc3RydWN0IHJlX3N0YXRlX3RhYmxlX2VudHJ5ICpzcG90OworICBpbnQgaTsKKyAgaWYgKG5vZGVzLT5uZWxlbSA9PSAwKQorICAgIHsKKyAgICAgICplcnIgPSBSRUdfTk9FUlJPUjsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgaGFzaCA9IGNhbGNfc3RhdGVfaGFzaCAobm9kZXMsIGNvbnRleHQpOworICBzcG90ID0gZGZhLT5zdGF0ZV90YWJsZSArIChoYXNoICYgZGZhLT5zdGF0ZV9oYXNoX21hc2spOworCisgIGZvciAoaSA9IDAgOyBpIDwgc3BvdC0+bnVtIDsgaSsrKQorICAgIHsKKyAgICAgIHJlX2RmYXN0YXRlX3QgKnN0YXRlID0gc3BvdC0+YXJyYXlbaV07CisgICAgICBpZiAoc3RhdGUtPmhhc2ggPT0gaGFzaAorCSAgJiYgc3RhdGUtPmNvbnRleHQgPT0gY29udGV4dAorCSAgJiYgcmVfbm9kZV9zZXRfY29tcGFyZSAoc3RhdGUtPmVudHJhbmNlX25vZGVzLCBub2RlcykpCisJcmV0dXJuIHN0YXRlOworICAgIH0KKyAgLyogVGhlcmUgYXJlIG5vIGFwcHJvcHJpYXRlIHN0YXRlIGluIGBkZmEnLCBjcmVhdGUgdGhlIG5ldyBvbmUuICAqLworICBuZXdfc3RhdGUgPSBjcmVhdGVfY2RfbmV3c3RhdGUgKGRmYSwgbm9kZXMsIGNvbnRleHQsIGhhc2gpOworICBpZiAoQkUgKG5ld19zdGF0ZSA9PSBOVUxMLCAwKSkKKyAgICAqZXJyID0gUkVHX0VTUEFDRTsKKworICByZXR1cm4gbmV3X3N0YXRlOworfQorCisvKiBGaW5pc2ggaW5pdGlhbGl6YXRpb24gb2YgdGhlIG5ldyBzdGF0ZSBORVdTVEFURSwgYW5kIHVzaW5nIGl0cyBoYXNoIHZhbHVlCisgICBIQVNIIHB1dCBpbiB0aGUgYXBwcm9wcmlhdGUgYnVja2V0IG9mIERGQSdzIHN0YXRlIHRhYmxlLiAgUmV0dXJuIHZhbHVlCisgICBpbmRpY2F0ZXMgdGhlIGVycm9yIGNvZGUgaWYgZmFpbGVkLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK3JlZ2lzdGVyX3N0YXRlIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9kZmFzdGF0ZV90ICpuZXdzdGF0ZSwKKwkJdW5zaWduZWQgaW50IGhhc2gpCit7CisgIHN0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeSAqc3BvdDsKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBpOworCisgIG5ld3N0YXRlLT5oYXNoID0gaGFzaDsKKyAgZXJyID0gcmVfbm9kZV9zZXRfYWxsb2MgKCZuZXdzdGF0ZS0+bm9uX2Vwc19ub2RlcywgbmV3c3RhdGUtPm5vZGVzLm5lbGVtKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICBmb3IgKGkgPSAwOyBpIDwgbmV3c3RhdGUtPm5vZGVzLm5lbGVtOyBpKyspCisgICAgeworICAgICAgaW50IGVsZW0gPSBuZXdzdGF0ZS0+bm9kZXMuZWxlbXNbaV07CisgICAgICBpZiAoIUlTX0VQU0lMT05fTk9ERSAoZGZhLT5ub2Rlc1tlbGVtXS50eXBlKSkKKwlpZiAocmVfbm9kZV9zZXRfaW5zZXJ0X2xhc3QgKCZuZXdzdGF0ZS0+bm9uX2Vwc19ub2RlcywgZWxlbSkgPCAwKQorCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgfQorCisgIHNwb3QgPSBkZmEtPnN0YXRlX3RhYmxlICsgKGhhc2ggJiBkZmEtPnN0YXRlX2hhc2hfbWFzayk7CisgIGlmIChCRSAoc3BvdC0+YWxsb2MgPD0gc3BvdC0+bnVtLCAwKSkKKyAgICB7CisgICAgICBpbnQgbmV3X2FsbG9jID0gMiAqIHNwb3QtPm51bSArIDI7CisgICAgICByZV9kZmFzdGF0ZV90ICoqbmV3X2FycmF5ID0gcmVfcmVhbGxvYyAoc3BvdC0+YXJyYXksIHJlX2RmYXN0YXRlX3QgKiwKKwkJCQkJICAgICAgbmV3X2FsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2FycmF5ID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgc3BvdC0+YXJyYXkgPSBuZXdfYXJyYXk7CisgICAgICBzcG90LT5hbGxvYyA9IG5ld19hbGxvYzsKKyAgICB9CisgIHNwb3QtPmFycmF5W3Nwb3QtPm51bSsrXSA9IG5ld3N0YXRlOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlX3N0YXRlIChyZV9kZmFzdGF0ZV90ICpzdGF0ZSkKK3sKKyAgcmVfbm9kZV9zZXRfZnJlZSAoJnN0YXRlLT5ub25fZXBzX25vZGVzKTsKKyAgcmVfbm9kZV9zZXRfZnJlZSAoJnN0YXRlLT5pbnZlY2xvc3VyZSk7CisgIGlmIChzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMgIT0gJnN0YXRlLT5ub2RlcykKKyAgICB7CisgICAgICByZV9ub2RlX3NldF9mcmVlIChzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMpOworICAgICAgcmVfZnJlZSAoc3RhdGUtPmVudHJhbmNlX25vZGVzKTsKKyAgICB9CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZzdGF0ZS0+bm9kZXMpOworICByZV9mcmVlIChzdGF0ZS0+d29yZF90cnRhYmxlKTsKKyAgcmVfZnJlZSAoc3RhdGUtPnRydGFibGUpOworICByZV9mcmVlIChzdGF0ZSk7Cit9CisKKy8qIENyZWF0ZSB0aGUgbmV3IHN0YXRlIHdoaWNoIGlzIGluZGVwZW5kIG9mIGNvbnRleHRzLgorICAgUmV0dXJuIHRoZSBuZXcgc3RhdGUgaWYgc3VjY2VlZGVkLCBvdGhlcndpc2UgcmV0dXJuIE5VTEwuICAqLworCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCitpbnRlcm5hbF9mdW5jdGlvbgorY3JlYXRlX2NpX25ld3N0YXRlIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsCisJCSAgICB1bnNpZ25lZCBpbnQgaGFzaCkKK3sKKyAgaW50IGk7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICByZV9kZmFzdGF0ZV90ICpuZXdzdGF0ZTsKKworICBuZXdzdGF0ZSA9IChyZV9kZmFzdGF0ZV90ICopIGNhbGxvYyAoc2l6ZW9mIChyZV9kZmFzdGF0ZV90KSwgMSk7CisgIGlmIChCRSAobmV3c3RhdGUgPT0gTlVMTCwgMCkpCisgICAgcmV0dXJuIE5VTEw7CisgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJm5ld3N0YXRlLT5ub2Rlcywgbm9kZXMpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgcmVfZnJlZSAobmV3c3RhdGUpOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgIG5ld3N0YXRlLT5lbnRyYW5jZV9ub2RlcyA9ICZuZXdzdGF0ZS0+bm9kZXM7CisgIGZvciAoaSA9IDAgOyBpIDwgbm9kZXMtPm5lbGVtIDsgaSsrKQorICAgIHsKKyAgICAgIHJlX3Rva2VuX3QgKm5vZGUgPSBkZmEtPm5vZGVzICsgbm9kZXMtPmVsZW1zW2ldOworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBub2RlLT50eXBlOworICAgICAgaWYgKHR5cGUgPT0gQ0hBUkFDVEVSICYmICFub2RlLT5jb25zdHJhaW50KQorCWNvbnRpbnVlOworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBuZXdzdGF0ZS0+YWNjZXB0X21iIHw9IG5vZGUtPmFjY2VwdF9tYjsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCisgICAgICAvKiBJZiB0aGUgc3RhdGUgaGFzIHRoZSBoYWx0IG5vZGUsIHRoZSBzdGF0ZSBpcyBhIGhhbHQgc3RhdGUuICAqLworICAgICAgaWYgKHR5cGUgPT0gRU5EX09GX1JFKQorCW5ld3N0YXRlLT5oYWx0ID0gMTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfQkFDS19SRUYpCisJbmV3c3RhdGUtPmhhc19iYWNrcmVmID0gMTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gQU5DSE9SIHx8IG5vZGUtPmNvbnN0cmFpbnQpCisJbmV3c3RhdGUtPmhhc19jb25zdHJhaW50ID0gMTsKKyAgICB9CisgIGVyciA9IHJlZ2lzdGVyX3N0YXRlIChkZmEsIG5ld3N0YXRlLCBoYXNoKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICAgIGZyZWVfc3RhdGUgKG5ld3N0YXRlKTsKKyAgICAgIG5ld3N0YXRlID0gTlVMTDsKKyAgICB9CisgIHJldHVybiBuZXdzdGF0ZTsKK30KKworLyogQ3JlYXRlIHRoZSBuZXcgc3RhdGUgd2hpY2ggaXMgZGVwZW5kIG9uIHRoZSBjb250ZXh0IENPTlRFWFQuCisgICBSZXR1cm4gdGhlIG5ldyBzdGF0ZSBpZiBzdWNjZWVkZWQsIG90aGVyd2lzZSByZXR1cm4gTlVMTC4gICovCisKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK2ludGVybmFsX2Z1bmN0aW9uCitjcmVhdGVfY2RfbmV3c3RhdGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywKKwkJICAgIHVuc2lnbmVkIGludCBjb250ZXh0LCB1bnNpZ25lZCBpbnQgaGFzaCkKK3sKKyAgaW50IGksIG5jdHhfbm9kZXMgPSAwOworICByZWdfZXJyY29kZV90IGVycjsKKyAgcmVfZGZhc3RhdGVfdCAqbmV3c3RhdGU7CisKKyAgbmV3c3RhdGUgPSAocmVfZGZhc3RhdGVfdCAqKSBjYWxsb2MgKHNpemVvZiAocmVfZGZhc3RhdGVfdCksIDEpOworICBpZiAoQkUgKG5ld3N0YXRlID09IE5VTEwsIDApKQorICAgIHJldHVybiBOVUxMOworICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZuZXdzdGF0ZS0+bm9kZXMsIG5vZGVzKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHsKKyAgICAgIHJlX2ZyZWUgKG5ld3N0YXRlKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICBuZXdzdGF0ZS0+Y29udGV4dCA9IGNvbnRleHQ7CisgIG5ld3N0YXRlLT5lbnRyYW5jZV9ub2RlcyA9ICZuZXdzdGF0ZS0+bm9kZXM7CisKKyAgZm9yIChpID0gMCA7IGkgPCBub2Rlcy0+bmVsZW0gOyBpKyspCisgICAgeworICAgICAgcmVfdG9rZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBub2Rlcy0+ZWxlbXNbaV07CisgICAgICByZV90b2tlbl90eXBlX3QgdHlwZSA9IG5vZGUtPnR5cGU7CisgICAgICB1bnNpZ25lZCBpbnQgY29uc3RyYWludCA9IG5vZGUtPmNvbnN0cmFpbnQ7CisKKyAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUiAmJiAhY29uc3RyYWludCkKKwljb250aW51ZTsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgbmV3c3RhdGUtPmFjY2VwdF9tYiB8PSBub2RlLT5hY2NlcHRfbWI7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICAgICAgLyogSWYgdGhlIHN0YXRlIGhhcyB0aGUgaGFsdCBub2RlLCB0aGUgc3RhdGUgaXMgYSBoYWx0IHN0YXRlLiAgKi8KKyAgICAgIGlmICh0eXBlID09IEVORF9PRl9SRSkKKwluZXdzdGF0ZS0+aGFsdCA9IDE7CisgICAgICBlbHNlIGlmICh0eXBlID09IE9QX0JBQ0tfUkVGKQorCW5ld3N0YXRlLT5oYXNfYmFja3JlZiA9IDE7CisKKyAgICAgIGlmIChjb25zdHJhaW50KQorCXsKKwkgIGlmIChuZXdzdGF0ZS0+ZW50cmFuY2Vfbm9kZXMgPT0gJm5ld3N0YXRlLT5ub2RlcykKKwkgICAgeworCSAgICAgIG5ld3N0YXRlLT5lbnRyYW5jZV9ub2RlcyA9IHJlX21hbGxvYyAocmVfbm9kZV9zZXQsIDEpOworCSAgICAgIGlmIChCRSAobmV3c3RhdGUtPmVudHJhbmNlX25vZGVzID09IE5VTEwsIDApKQorCQl7CisJCSAgZnJlZV9zdGF0ZSAobmV3c3RhdGUpOworCQkgIHJldHVybiBOVUxMOworCQl9CisJICAgICAgaWYgKHJlX25vZGVfc2V0X2luaXRfY29weSAobmV3c3RhdGUtPmVudHJhbmNlX25vZGVzLCBub2RlcykKKwkJICAhPSBSRUdfTk9FUlJPUikKKwkJcmV0dXJuIE5VTEw7CisJICAgICAgbmN0eF9ub2RlcyA9IDA7CisJICAgICAgbmV3c3RhdGUtPmhhc19jb25zdHJhaW50ID0gMTsKKwkgICAgfQorCisJICBpZiAoTk9UX1NBVElTRllfUFJFVl9DT05TVFJBSU5UIChjb25zdHJhaW50LGNvbnRleHQpKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfcmVtb3ZlX2F0ICgmbmV3c3RhdGUtPm5vZGVzLCBpIC0gbmN0eF9ub2Rlcyk7CisJICAgICAgKytuY3R4X25vZGVzOworCSAgICB9CisJfQorICAgIH0KKyAgZXJyID0gcmVnaXN0ZXJfc3RhdGUgKGRmYSwgbmV3c3RhdGUsIGhhc2gpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgeworICAgICAgZnJlZV9zdGF0ZSAobmV3c3RhdGUpOworICAgICAgbmV3c3RhdGUgPSBOVUxMOworICAgIH0KKyAgcmV0dXJuICBuZXdzdGF0ZTsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdleF9pbnRlcm5hbC5oIGIvY29tcGF0L3JlZ2V4L3JlZ2V4X2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE4NGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC9yZWdleC9yZWdleF9pbnRlcm5hbC5oCkBAIC0wLDAgKzEsODEwIEBACisvKiBFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgYW5kIHNlYXJjaCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUsIDIwMDcsIDIwMDgsIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvbnRyaWJ1dGVkIGJ5IElzYW11IEhhc2VnYXdhIDxpc2FtdUB5YW1hdG8uaWJtLmNvbT4uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICAgMDIxMTEtMTMwNyBVU0EuICAqLworCisjaWZuZGVmIF9SRUdFWF9JTlRFUk5BTF9ICisjZGVmaW5lIF9SRUdFWF9JTlRFUk5BTF9IIDEKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmIGRlZmluZWQgSEFWRV9MQU5HSU5GT19IIHx8IGRlZmluZWQgSEFWRV9MQU5HSU5GT19DT0RFU0VUIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNlbmRpZgorI2lmIGRlZmluZWQgSEFWRV9MT0NBTEVfSCB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPGxvY2FsZS5oPgorI2VuZGlmCisjaWYgZGVmaW5lZCBIQVZFX1dDSEFSX0ggfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDx3Y2hhci5oPgorI2VuZGlmIC8qIEhBVkVfV0NIQVJfSCB8fCBfTElCQyAqLworI2lmIGRlZmluZWQgSEFWRV9XQ1RZUEVfSCB8fCBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPHdjdHlwZS5oPgorI2VuZGlmIC8qIEhBVkVfV0NUWVBFX0ggfHwgX0xJQkMgKi8KKyNpZiBkZWZpbmVkIEhBVkVfU1REQk9PTF9IIHx8IGRlZmluZWQgX0xJQkMKKyMgaW5jbHVkZSA8c3RkYm9vbC5oPgorI2VuZGlmIC8qIEhBVkVfU1REQk9PTF9IIHx8IF9MSUJDICovCisjaWYgIWRlZmluZWQoWk9TX1VTUykKKyNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0ggfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZiAvKiBIQVZFX1NURElOVF9IIHx8IF9MSUJDICovCisjZW5kaWYgLyogIVpPU19VU1MgKi8KKyNpZiBkZWZpbmVkIF9MSUJDCisjIGluY2x1ZGUgPGJpdHMvbGliYy1sb2NrLmg+CisjZWxzZQorIyBkZWZpbmUgX19saWJjX2xvY2tfZGVmaW5lKENMQVNTLE5BTUUpCisjIGRlZmluZSBfX2xpYmNfbG9ja19pbml0KE5BTUUpIGRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIF9fbGliY19sb2NrX2xvY2soTkFNRSkgZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgX19saWJjX2xvY2tfdW5sb2NrKE5BTUUpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIEdBV0sKKy8qIEluIGNhc2UgdGhhdCB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBpc2JsYW5rKCkuICAqLworI2lmICFkZWZpbmVkIF9MSUJDICYmICFkZWZpbmVkIEhBVkVfSVNCTEFOSyAmJiAhZGVmaW5lZCBpc2JsYW5rCisjIGRlZmluZSBpc2JsYW5rKGNoKSAoKGNoKSA9PSAnICcgfHwgKGNoKSA9PSAnXHQnKQorI2VuZGlmCisjZWxzZSAvKiBHQVdLICovCisvKgorICogVGhpcyBpcyBhIGZyZWFraW5nIG1lc3MuIE9uIGdsaWJjIHN5c3RlbXMgeW91IGhhdmUgdG8gZGVmaW5lCisgKiBhIG1hZ2ljIGNvbnN0YW50IHRvIGdldCBpc2JsYW5rKCkgb3V0IG9mIDxjdHlwZS5oPiwgc2luY2UgaXQncworICogYSBDOTkgZnVuY3Rpb24uICBUbyBoZWNrIHdpdGggYWxsIHRoYXQgYW5kIGJvcnJvdyBhIHBhZ2UgZnJvbQorICogZGZhLmMncyBib29rLgorICovCisKK3N0YXRpYyBpbnQKK2lzX2JsYW5rIChpbnQgYykKK3sKKyAgIHJldHVybiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKTsKK30KKyNlbmRpZiAvKiBHQVdLICovCisKKyNpZmRlZiBfTElCQworIyBpZm5kZWYgX1JFX0RFRklORV9MT0NBTEVfRlVOQ1RJT05TCisjICBkZWZpbmUgX1JFX0RFRklORV9MT0NBTEVfRlVOQ1RJT05TIDEKKyMgICBpbmNsdWRlIDxsb2NhbGUvbG9jYWxlaW5mby5oPgorIyAgIGluY2x1ZGUgPGxvY2FsZS9lbGVtLWhhc2guaD4KKyMgICBpbmNsdWRlIDxsb2NhbGUvY29sbC1sb29rdXAuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisvKiBUaGlzIGlzIGZvciBvdGhlciBHTlUgZGlzdHJpYnV0aW9ucyB3aXRoIGludGVybmF0aW9uYWxpemVkIG1lc3NhZ2VzLiAgKi8KKyNpZiAoSEFWRV9MSUJJTlRMX0ggJiYgRU5BQkxFX05MUykgfHwgZGVmaW5lZCBfTElCQworIyBpbmNsdWRlIDxsaWJpbnRsLmg+CisjIGlmZGVmIF9MSUJDCisjICB1bmRlZiBnZXR0ZXh0CisjICBkZWZpbmUgZ2V0dGV4dChtc2dpZCkgXAorICBJTlRVU0UoX19kY2dldHRleHQpIChfbGliY19pbnRsX2RvbWFpbm5hbWUsIG1zZ2lkLCBMQ19NRVNTQUdFUykKKyMgZW5kaWYKKyNlbHNlCisjIGRlZmluZSBnZXR0ZXh0KG1zZ2lkKSAobXNnaWQpCisjZW5kaWYKKworI2lmbmRlZiBnZXR0ZXh0X25vb3AKKy8qIFRoaXMgZGVmaW5lIGlzIHNvIHhnZXR0ZXh0IGNhbiBmaW5kIHRoZSBpbnRlcm5hdGlvbmFsaXphYmxlCisgICBzdHJpbmdzLiAgKi8KKyMgZGVmaW5lIGdldHRleHRfbm9vcChTdHJpbmcpIFN0cmluZworI2VuZGlmCisKKy8qIEZvciBsb3NlciBzeXN0ZW1zIHdpdGhvdXQgdGhlIGRlZmluaXRpb24uICAqLworI2lmbmRlZiBTSVpFX01BWAorIyBkZWZpbmUgU0laRV9NQVggKChzaXplX3QpIC0xKQorI2VuZGlmCisKKyNpZm5kZWYgTk9fTUJTVVBQT1JUCisjaW5jbHVkZSAibWJzdXBwb3J0LmgiIC8qIGdhd2sgKi8KKyNlbmRpZgorI2lmbmRlZiBNQl9DVVJfTUFYCisjZGVmaW5lIE1CX0NVUl9NQVggMQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBNQlNfU1VQUE9SVCkgfHwgX0xJQkMKKyMgZGVmaW5lIFJFX0VOQUJMRV9JMThOCisjZW5kaWYKKworI2lmIF9fR05VQ19fID49IDMKKyMgZGVmaW5lIEJFKGV4cHIsIHZhbCkgX19idWlsdGluX2V4cGVjdCAoZXhwciwgdmFsKQorI2Vsc2UKKyMgZGVmaW5lIEJFKGV4cHIsIHZhbCkgKGV4cHIpCisjIGlmZGVmIGlubGluZQorIyB1bmRlZiBpbmxpbmUKKyMgZW5kaWYKKyMgZGVmaW5lIGlubGluZQorI2VuZGlmCisKKy8qIE51bWJlciBvZiBzaW5nbGUgYnl0ZSBjaGFyYWN0ZXIuICAqLworI2RlZmluZSBTQkNfTUFYIDI1NgorCisjZGVmaW5lIENPTExfRUxFTV9MRU5fTUFYIDgKKworLyogVGhlIGNoYXJhY3RlciB3aGljaCByZXByZXNlbnRzIG5ld2xpbmUuICAqLworI2RlZmluZSBORVdMSU5FX0NIQVIgJ1xuJworI2RlZmluZSBXSURFX05FV0xJTkVfQ0hBUiBMJ1xuJworCisvKiBSZW5hbWUgdG8gc3RhbmRhcmQgQVBJIGZvciB1c2luZyBvdXQgb2YgZ2xpYmMuICAqLworI2lmbmRlZiBfTElCQworIyBpZmRlZiBfX3djdHlwZQorIyB1bmRlZiBfX3djdHlwZQorIyBlbmRpZgorIyBkZWZpbmUgX193Y3R5cGUgd2N0eXBlCisjIGlmZGVmIF9faXN3Y3R5cGUKKyMgdW5kZWYgX19pc3djdHlwZQorIyBlbmRpZgorIyBkZWZpbmUgX19pc3djdHlwZSBpc3djdHlwZQorIyBkZWZpbmUgX19idG93YyBidG93YworIyBkZWZpbmUgX19tYnJ0b3djIG1icnRvd2MKKyN1bmRlZiBfX21lbXBjcHkJLyogR0FXSyAqLworIyBkZWZpbmUgX19tZW1wY3B5IG1lbXBjcHkKKyMgZGVmaW5lIF9fd2NydG9tYiB3Y3J0b21iCisjIGRlZmluZSBfX3JlZ2ZyZWUgcmVnZnJlZQorIyBkZWZpbmUgYXR0cmlidXRlX2hpZGRlbgorI2VuZGlmIC8qIG5vdCBfTElCQyAqLworCisjaWZkZWYgX19HTlVDX18KKyMgZGVmaW5lIF9fYXR0cmlidXRlKGFyZykgX19hdHRyaWJ1dGVfXyAoYXJnKQorI2Vsc2UKKyMgZGVmaW5lIF9fYXR0cmlidXRlKGFyZykKKyNlbmRpZgorCitleHRlcm4gY29uc3QgY2hhciBfX3JlX2Vycm9yX21zZ2lkW10gYXR0cmlidXRlX2hpZGRlbjsKK2V4dGVybiBjb25zdCBzaXplX3QgX19yZV9lcnJvcl9tc2dpZF9pZHhbXSBhdHRyaWJ1dGVfaGlkZGVuOworCisvKiBBbiBpbnRlZ2VyIHVzZWQgdG8gcmVwcmVzZW50IGEgc2V0IG9mIGJpdHMuICBJdCBtdXN0IGJlIHVuc2lnbmVkLAorICAgYW5kIG11c3QgYmUgYXQgbGVhc3QgYXMgd2lkZSBhcyB1bnNpZ25lZCBpbnQuICAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBiaXRzZXRfd29yZF90OworLyogQWxsIGJpdHMgc2V0IGluIGEgYml0c2V0X3dvcmRfdC4gICovCisjZGVmaW5lIEJJVFNFVF9XT1JEX01BWCBVTE9OR19NQVgKKy8qIE51bWJlciBvZiBiaXRzIGluIGEgYml0c2V0X3dvcmRfdC4gICovCisjZGVmaW5lIEJJVFNFVF9XT1JEX0JJVFMgKHNpemVvZiAoYml0c2V0X3dvcmRfdCkgKiBDSEFSX0JJVCkKKy8qIE51bWJlciBvZiBiaXRzZXRfd29yZF90IGluIGEgYml0X3NldC4gICovCisjZGVmaW5lIEJJVFNFVF9XT1JEUyAoU0JDX01BWCAvIEJJVFNFVF9XT1JEX0JJVFMpCit0eXBlZGVmIGJpdHNldF93b3JkX3QgYml0c2V0X3RbQklUU0VUX1dPUkRTXTsKK3R5cGVkZWYgYml0c2V0X3dvcmRfdCAqcmVfYml0c2V0X3B0cl90OwordHlwZWRlZiBjb25zdCBiaXRzZXRfd29yZF90ICpyZV9jb25zdF9iaXRzZXRfcHRyX3Q7CisKKyNkZWZpbmUgYml0c2V0X3NldChzZXQsaSkgXAorICAoc2V0W2kgLyBCSVRTRVRfV09SRF9CSVRTXSB8PSAoYml0c2V0X3dvcmRfdCkgMSA8PCBpICUgQklUU0VUX1dPUkRfQklUUykKKyNkZWZpbmUgYml0c2V0X2NsZWFyKHNldCxpKSBcCisgIChzZXRbaSAvIEJJVFNFVF9XT1JEX0JJVFNdICY9IH4oKGJpdHNldF93b3JkX3QpIDEgPDwgaSAlIEJJVFNFVF9XT1JEX0JJVFMpKQorI2RlZmluZSBiaXRzZXRfY29udGFpbihzZXQsaSkgXAorICAoc2V0W2kgLyBCSVRTRVRfV09SRF9CSVRTXSAmICgoYml0c2V0X3dvcmRfdCkgMSA8PCBpICUgQklUU0VUX1dPUkRfQklUUykpCisjZGVmaW5lIGJpdHNldF9lbXB0eShzZXQpIG1lbXNldCAoc2V0LCAnXDAnLCBzaXplb2YgKGJpdHNldF90KSkKKyNkZWZpbmUgYml0c2V0X3NldF9hbGwoc2V0KSBtZW1zZXQgKHNldCwgJ1x4ZmYnLCBzaXplb2YgKGJpdHNldF90KSkKKyNkZWZpbmUgYml0c2V0X2NvcHkoZGVzdCxzcmMpIG1lbWNweSAoZGVzdCwgc3JjLCBzaXplb2YgKGJpdHNldF90KSkKKworI2RlZmluZSBQUkVWX1dPUkRfQ09OU1RSQUlOVCAweDAwMDEKKyNkZWZpbmUgUFJFVl9OT1RXT1JEX0NPTlNUUkFJTlQgMHgwMDAyCisjZGVmaW5lIE5FWFRfV09SRF9DT05TVFJBSU5UIDB4MDAwNAorI2RlZmluZSBORVhUX05PVFdPUkRfQ09OU1RSQUlOVCAweDAwMDgKKyNkZWZpbmUgUFJFVl9ORVdMSU5FX0NPTlNUUkFJTlQgMHgwMDEwCisjZGVmaW5lIE5FWFRfTkVXTElORV9DT05TVFJBSU5UIDB4MDAyMAorI2RlZmluZSBQUkVWX0JFR0JVRl9DT05TVFJBSU5UIDB4MDA0MAorI2RlZmluZSBORVhUX0VOREJVRl9DT05TVFJBSU5UIDB4MDA4MAorI2RlZmluZSBXT1JEX0RFTElNX0NPTlNUUkFJTlQgMHgwMTAwCisjZGVmaW5lIE5PVF9XT1JEX0RFTElNX0NPTlNUUkFJTlQgMHgwMjAwCisKK3R5cGVkZWYgZW51bQoreworICBJTlNJREVfV09SRCA9IFBSRVZfV09SRF9DT05TVFJBSU5UIHwgTkVYVF9XT1JEX0NPTlNUUkFJTlQsCisgIFdPUkRfRklSU1QgPSBQUkVWX05PVFdPUkRfQ09OU1RSQUlOVCB8IE5FWFRfV09SRF9DT05TVFJBSU5ULAorICBXT1JEX0xBU1QgPSBQUkVWX1dPUkRfQ09OU1RSQUlOVCB8IE5FWFRfTk9UV09SRF9DT05TVFJBSU5ULAorICBJTlNJREVfTk9UV09SRCA9IFBSRVZfTk9UV09SRF9DT05TVFJBSU5UIHwgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQsCisgIExJTkVfRklSU1QgPSBQUkVWX05FV0xJTkVfQ09OU1RSQUlOVCwKKyAgTElORV9MQVNUID0gTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQsCisgIEJVRl9GSVJTVCA9IFBSRVZfQkVHQlVGX0NPTlNUUkFJTlQsCisgIEJVRl9MQVNUID0gTkVYVF9FTkRCVUZfQ09OU1RSQUlOVCwKKyAgV09SRF9ERUxJTSA9IFdPUkRfREVMSU1fQ09OU1RSQUlOVCwKKyAgTk9UX1dPUkRfREVMSU0gPSBOT1RfV09SRF9ERUxJTV9DT05TVFJBSU5UCit9IHJlX2NvbnRleHRfdHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IGFsbG9jOworICBpbnQgbmVsZW07CisgIGludCAqZWxlbXM7Cit9IHJlX25vZGVfc2V0OworCit0eXBlZGVmIGVudW0KK3sKKyAgTk9OX1RZUEUgPSAwLAorCisgIC8qIE5vZGUgdHlwZSwgVGhlc2UgYXJlIHVzZWQgYnkgdG9rZW4sIG5vZGUsIHRyZWUuICAqLworICBDSEFSQUNURVIgPSAxLAorICBFTkRfT0ZfUkUgPSAyLAorICBTSU1QTEVfQlJBQ0tFVCA9IDMsCisgIE9QX0JBQ0tfUkVGID0gNCwKKyAgT1BfUEVSSU9EID0gNSwKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICBDT01QTEVYX0JSQUNLRVQgPSA2LAorICBPUF9VVEY4X1BFUklPRCA9IDcsCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICAvKiBXZSBkZWZpbmUgRVBTSUxPTl9CSVQgYXMgYSBtYWNybyBzbyB0aGF0IE9QX09QRU5fU1VCRVhQIGlzIHVzZWQKKyAgICAgd2hlbiB0aGUgZGVidWdnZXIgc2hvd3MgdmFsdWVzIG9mIHRoaXMgZW51bSB0eXBlLiAgKi8KKyNkZWZpbmUgRVBTSUxPTl9CSVQgOAorICBPUF9PUEVOX1NVQkVYUCA9IEVQU0lMT05fQklUIHwgMCwKKyAgT1BfQ0xPU0VfU1VCRVhQID0gRVBTSUxPTl9CSVQgfCAxLAorICBPUF9BTFQgPSBFUFNJTE9OX0JJVCB8IDIsCisgIE9QX0RVUF9BU1RFUklTSyA9IEVQU0lMT05fQklUIHwgMywKKyAgQU5DSE9SID0gRVBTSUxPTl9CSVQgfCA0LAorCisgIC8qIFRyZWUgdHlwZSwgdGhlc2UgYXJlIHVzZWQgb25seSBieSB0cmVlLiAqLworICBDT05DQVQgPSAxNiwKKyAgU1VCRVhQID0gMTcsCisKKyAgLyogVG9rZW4gdHlwZSwgdGhlc2UgYXJlIHVzZWQgb25seSBieSB0b2tlbi4gICovCisgIE9QX0RVUF9QTFVTID0gMTgsCisgIE9QX0RVUF9RVUVTVElPTiwKKyAgT1BfT1BFTl9CUkFDS0VULAorICBPUF9DTE9TRV9CUkFDS0VULAorICBPUF9DSEFSU0VUX1JBTkdFLAorICBPUF9PUEVOX0RVUF9OVU0sCisgIE9QX0NMT1NFX0RVUF9OVU0sCisgIE9QX05PTl9NQVRDSF9MSVNULAorICBPUF9PUEVOX0NPTExfRUxFTSwKKyAgT1BfQ0xPU0VfQ09MTF9FTEVNLAorICBPUF9PUEVOX0VRVUlWX0NMQVNTLAorICBPUF9DTE9TRV9FUVVJVl9DTEFTUywKKyAgT1BfT1BFTl9DSEFSX0NMQVNTLAorICBPUF9DTE9TRV9DSEFSX0NMQVNTLAorICBPUF9XT1JELAorICBPUF9OT1RXT1JELAorICBPUF9TUEFDRSwKKyAgT1BfTk9UU1BBQ0UsCisgIEJBQ0tfU0xBU0gKKworfSByZV90b2tlbl90eXBlX3Q7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgLyogTXVsdGlieXRlIGNoYXJhY3RlcnMuICAqLworICB3Y2hhcl90ICptYmNoYXJzOworCisgIC8qIENvbGxhdGluZyBzeW1ib2xzLiAgKi8KKyMgaWZkZWYgX0xJQkMKKyAgaW50MzJfdCAqY29sbF9zeW1zOworIyBlbmRpZgorCisgIC8qIEVxdWl2YWxlbmNlIGNsYXNzZXMuICovCisjIGlmZGVmIF9MSUJDCisgIGludDMyX3QgKmVxdWl2X2NsYXNzZXM7CisjIGVuZGlmCisKKyAgLyogUmFuZ2UgZXhwcmVzc2lvbnMuICovCisjIGlmZGVmIF9MSUJDCisgIHVpbnQzMl90ICpyYW5nZV9zdGFydHM7CisgIHVpbnQzMl90ICpyYW5nZV9lbmRzOworIyBlbHNlIC8qIG5vdCBfTElCQyAqLworICB3Y2hhcl90ICpyYW5nZV9zdGFydHM7CisgIHdjaGFyX3QgKnJhbmdlX2VuZHM7CisjIGVuZGlmIC8qIG5vdCBfTElCQyAqLworCisgIC8qIENoYXJhY3RlciBjbGFzc2VzLiAqLworICB3Y3R5cGVfdCAqY2hhcl9jbGFzc2VzOworCisgIC8qIElmIHRoaXMgY2hhcmFjdGVyIHNldCBpcyB0aGUgbm9uLW1hdGNoaW5nIGxpc3QuICAqLworICB1bnNpZ25lZCBpbnQgbm9uX21hdGNoIDogMTsKKworICAvKiAjIG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJzLiAgKi8KKyAgaW50IG5tYmNoYXJzOworCisgIC8qICMgb2YgY29sbGF0aW5nIHN5bWJvbHMuICAqLworICBpbnQgbmNvbGxfc3ltczsKKworICAvKiAjIG9mIGVxdWl2YWxlbmNlIGNsYXNzZXMuICovCisgIGludCBuZXF1aXZfY2xhc3NlczsKKworICAvKiAjIG9mIHJhbmdlIGV4cHJlc3Npb25zLiAqLworICBpbnQgbnJhbmdlczsKKworICAvKiAjIG9mIGNoYXJhY3RlciBjbGFzc2VzLiAqLworICBpbnQgbmNoYXJfY2xhc3NlczsKK30gcmVfY2hhcnNldF90OworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHVuaW9uCisgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGM7CQkvKiBmb3IgQ0hBUkFDVEVSICovCisgICAgcmVfYml0c2V0X3B0cl90IHNiY3NldDsJLyogZm9yIFNJTVBMRV9CUkFDS0VUICovCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICByZV9jaGFyc2V0X3QgKm1iY3NldDsJLyogZm9yIENPTVBMRVhfQlJBQ0tFVCAqLworI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgaW50IGlkeDsJCQkvKiBmb3IgQkFDS19SRUYgKi8KKyAgICByZV9jb250ZXh0X3R5cGUgY3R4X3R5cGU7CS8qIGZvciBBTkNIT1IgKi8KKyAgfSBvcHI7CisjaWYgX19HTlVDX18gPj0gMgorICByZV90b2tlbl90eXBlX3QgdHlwZSA6IDg7CisjZWxzZQorICByZV90b2tlbl90eXBlX3QgdHlwZTsKKyNlbmRpZgorICB1bnNpZ25lZCBpbnQgY29uc3RyYWludCA6IDEwOwkvKiBjb250ZXh0IGNvbnN0cmFpbnQgKi8KKyAgdW5zaWduZWQgaW50IGR1cGxpY2F0ZWQgOiAxOworICB1bnNpZ25lZCBpbnQgb3B0X3N1YmV4cCA6IDE7CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgdW5zaWduZWQgaW50IGFjY2VwdF9tYiA6IDE7CisgIC8qIFRoZXNlIDIgYml0cyBjYW4gYmUgbW92ZWQgaW50byB0aGUgdW5pb24gaWYgbmVlZGVkIChlLmcuIGlmIHJ1bm5pbmcgb3V0CisgICAgIG9mIGJpdHM7IG1vdmUgb3ByLmMgdG8gb3ByLmMuYyBhbmQgbW92ZSB0aGUgZmxhZ3MgdG8gb3ByLmMuZmxhZ3MpLiAgKi8KKyAgdW5zaWduZWQgaW50IG1iX3BhcnRpYWwgOiAxOworI2VuZGlmCisgIHVuc2lnbmVkIGludCB3b3JkX2NoYXIgOiAxOworfSByZV90b2tlbl90OworCisjZGVmaW5lIElTX0VQU0lMT05fTk9ERSh0eXBlKSAoKHR5cGUpICYgRVBTSUxPTl9CSVQpCisKK3N0cnVjdCByZV9zdHJpbmdfdAoreworICAvKiBJbmRpY2F0ZSB0aGUgcmF3IGJ1ZmZlciB3aGljaCBpcyB0aGUgb3JpZ2luYWwgc3RyaW5nIHBhc3NlZCBhcyBhbgorICAgICBhcmd1bWVudCBvZiByZWdleGVjKCksIHJlX3NlYXJjaCgpLCBldGMuLiAgKi8KKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcmF3X21iczsKKyAgLyogU3RvcmUgdGhlIG11bHRpYnl0ZSBzdHJpbmcuICBJbiBjYXNlIG9mICJjYXNlIGluc2Vuc2l0aXZlIG1vZGUiIGxpa2UKKyAgICAgUkVHX0lDQVNFLCB1cHBlciBjYXNlcyBvZiB0aGUgc3RyaW5nIGFyZSBzdG9yZWQsIG90aGVyd2lzZSBNQlMgcG9pbnRzCisgICAgIHRoZSBzYW1lIGFkZHJlc3MgdGhhdCBSQVdfTUJTIHBvaW50cy4gICovCisgIHVuc2lnbmVkIGNoYXIgKm1iczsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAvKiBTdG9yZSB0aGUgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nIHdoaWNoIGlzIGNvcnJlc3BvbmRpbmcgdG8gTUJTLiAgKi8KKyAgd2ludF90ICp3Y3M7CisgIGludCAqb2Zmc2V0czsKKyAgbWJzdGF0ZV90IGN1cl9zdGF0ZTsKKyNlbmRpZgorICAvKiBJbmRleCBpbiBSQVdfTUJTLiAgRWFjaCBjaGFyYWN0ZXIgbWJzW2ldIGNvcnJlc3BvbmRzIHRvCisgICAgIHJhd19tYnNbcmF3X21ic19pZHggKyBpXS4gICovCisgIGludCByYXdfbWJzX2lkeDsKKyAgLyogVGhlIGxlbmd0aCBvZiB0aGUgdmFsaWQgY2hhcmFjdGVycyBpbiB0aGUgYnVmZmVycy4gICovCisgIGludCB2YWxpZF9sZW47CisgIC8qIFRoZSBjb3JyZXNwb25kaW5nIG51bWJlciBvZiBieXRlcyBpbiByYXdfbWJzIGFycmF5LiAgKi8KKyAgaW50IHZhbGlkX3Jhd19sZW47CisgIC8qIFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlcnMgTUJTIGFuZCBXQ1MuICAqLworICBpbnQgYnVmc19sZW47CisgIC8qIFRoZSBpbmRleCBpbiBNQlMsIHdoaWNoIGlzIHVwZGF0ZWQgYnkgcmVfc3RyaW5nX2ZldGNoX2J5dGUuICAqLworICBpbnQgY3VyX2lkeDsKKyAgLyogbGVuZ3RoIG9mIFJBV19NQlMgYXJyYXkuICAqLworICBpbnQgcmF3X2xlbjsKKyAgLyogVGhpcyBpcyBSQVdfTEVOIC0gUkFXX01CU19JRFggKyBWQUxJRF9MRU4gLSBWQUxJRF9SQVdfTEVOLiAgKi8KKyAgaW50IGxlbjsKKyAgLyogRW5kIG9mIHRoZSBidWZmZXIgbWF5IGJlIHNob3J0ZXIgdGhhbiBpdHMgbGVuZ3RoIGluIHRoZSBjYXNlcyBzdWNoCisgICAgIGFzIHJlX21hdGNoXzIsIHJlX3NlYXJjaF8yLiAgVGhlbiwgd2UgdXNlIFNUT1AgZm9yIGVuZCBvZiB0aGUgYnVmZmVyCisgICAgIGluc3RlYWQgb2YgTEVOLiAgKi8KKyAgaW50IHJhd19zdG9wOworICAvKiBUaGlzIGlzIFJBV19TVE9QIC0gUkFXX01CU19JRFggYWRqdXN0ZWQgdGhyb3VnaCBPRkZTRVRTLiAgKi8KKyAgaW50IHN0b3A7CisKKyAgLyogVGhlIGNvbnRleHQgb2YgbWJzWzBdLiAgV2Ugc3RvcmUgdGhlIGNvbnRleHQgaW5kZXBlbmRlbnRseSwgc2luY2UKKyAgICAgdGhlIGNvbnRleHQgb2YgbWJzWzBdIG1heSBiZSBkaWZmZXJlbnQgZnJvbSByYXdfbWJzWzBdLCB3aGljaCBpcworICAgICB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbnB1dCBzdHJpbmcuICAqLworICB1bnNpZ25lZCBpbnQgdGlwX2NvbnRleHQ7CisgIC8qIFRoZSB0cmFuc2xhdGlvbiBwYXNzZWQgYXMgYSBwYXJ0IG9mIGFuIGFyZ3VtZW50IG9mIHJlX2NvbXBpbGVfcGF0dGVybi4gICovCisgIFJFX1RSQU5TTEFURV9UWVBFIHRyYW5zOworICAvKiBDb3B5IG9mIHJlX2RmYV90J3Mgd29yZF9jaGFyLiAgKi8KKyAgcmVfY29uc3RfYml0c2V0X3B0cl90IHdvcmRfY2hhcjsKKyAgLyogMSBpZiBSRUdfSUNBU0UuICAqLworICB1bnNpZ25lZCBjaGFyIGljYXNlOworICB1bnNpZ25lZCBjaGFyIGlzX3V0Zjg7CisgIHVuc2lnbmVkIGNoYXIgbWFwX25vdGFzY2lpOworICB1bnNpZ25lZCBjaGFyIG1ic19hbGxvY2F0ZWQ7CisgIHVuc2lnbmVkIGNoYXIgb2Zmc2V0c19uZWVkZWQ7CisgIHVuc2lnbmVkIGNoYXIgbmV3bGluZV9hbmNob3I7CisgIHVuc2lnbmVkIGNoYXIgd29yZF9vcHNfdXNlZDsKKyAgaW50IG1iX2N1cl9tYXg7Cit9OwordHlwZWRlZiBzdHJ1Y3QgcmVfc3RyaW5nX3QgcmVfc3RyaW5nX3Q7CisKKworc3RydWN0IHJlX2RmYV90OwordHlwZWRlZiBzdHJ1Y3QgcmVfZGZhX3QgcmVfZGZhX3Q7CisKKyNpZm5kZWYgX0xJQkMKKyMgaWZkZWYgX19pMzg2X18KKyMgIGRlZmluZSBpbnRlcm5hbF9mdW5jdGlvbiAgIF9fYXR0cmlidXRlICgocmVncGFybSAoMyksIHN0ZGNhbGwpKQorIyBlbHNlCisjICBkZWZpbmUgaW50ZXJuYWxfZnVuY3Rpb24KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIE5PVF9JTl9saWJjCitzdGF0aWMgcmVnX2VycmNvZGVfdCByZV9zdHJpbmdfcmVhbGxvY19idWZmZXJzIChyZV9zdHJpbmdfdCAqcHN0ciwKKwkJCQkJCWludCBuZXdfYnVmX2xlbikKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisjIGlmZGVmIFJFX0VOQUJMRV9JMThOCitzdGF0aWMgdm9pZCBidWlsZF93Y3NfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBidWlsZF93Y3NfdXBwZXJfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikKKyAgaW50ZXJuYWxfZnVuY3Rpb247CisjIGVuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCitzdGF0aWMgdm9pZCBidWlsZF91cHBlcl9idWZmZXIgKHJlX3N0cmluZ190ICpwc3RyKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyB2b2lkIHJlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChyZV9zdHJpbmdfdCAqcHN0cikgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgdW5zaWduZWQgaW50IHJlX3N0cmluZ19jb250ZXh0X2F0IChjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIGludCBpZHgsCisJCQkJCSAgaW50IGVmbGFncykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSk7CisjZW5kaWYKKyNkZWZpbmUgcmVfc3RyaW5nX3BlZWtfYnl0ZShwc3RyLCBvZmZzZXQpIFwKKyAgKChwc3RyKS0+bWJzWyhwc3RyKS0+Y3VyX2lkeCArIG9mZnNldF0pCisjZGVmaW5lIHJlX3N0cmluZ19mZXRjaF9ieXRlKHBzdHIpIFwKKyAgKChwc3RyKS0+bWJzWyhwc3RyKS0+Y3VyX2lkeCsrXSkKKyNkZWZpbmUgcmVfc3RyaW5nX2ZpcnN0X2J5dGUocHN0ciwgaWR4KSBcCisgICgoaWR4KSA9PSAocHN0ciktPnZhbGlkX2xlbiB8fCAocHN0ciktPndjc1tpZHhdICE9IFdFT0YpCisjZGVmaW5lIHJlX3N0cmluZ19pc19zaW5nbGVfYnl0ZV9jaGFyKHBzdHIsIGlkeCkgXAorICAoKHBzdHIpLT53Y3NbaWR4XSAhPSBXRU9GICYmICgocHN0ciktPnZhbGlkX2xlbiA9PSAoaWR4KSArIDEgXAorCQkJCXx8IChwc3RyKS0+d2NzWyhpZHgpICsgMV0gIT0gV0VPRikpCisjZGVmaW5lIHJlX3N0cmluZ19lb2kocHN0cikgKChwc3RyKS0+c3RvcCA8PSAocHN0ciktPmN1cl9pZHgpCisjZGVmaW5lIHJlX3N0cmluZ19jdXJfaWR4KHBzdHIpICgocHN0ciktPmN1cl9pZHgpCisjZGVmaW5lIHJlX3N0cmluZ19nZXRfYnVmZmVyKHBzdHIpICgocHN0ciktPm1icykKKyNkZWZpbmUgcmVfc3RyaW5nX2xlbmd0aChwc3RyKSAoKHBzdHIpLT5sZW4pCisjZGVmaW5lIHJlX3N0cmluZ19ieXRlX2F0KHBzdHIsaWR4KSAoKHBzdHIpLT5tYnNbaWR4XSkKKyNkZWZpbmUgcmVfc3RyaW5nX3NraXBfYnl0ZXMocHN0cixpZHgpICgocHN0ciktPmN1cl9pZHggKz0gKGlkeCkpCisjZGVmaW5lIHJlX3N0cmluZ19zZXRfaW5kZXgocHN0cixpZHgpICgocHN0ciktPmN1cl9pZHggPSAoaWR4KSkKKworI2lmbmRlZiBfTElCQworIyBpZiBIQVZFX0FMTE9DQQorIyAgaWYgKF9NU0NfVkVSKQorIyAgIGluY2x1ZGUgPG1hbGxvYy5oPgorIyAgIGRlZmluZSBfX2xpYmNfdXNlX2FsbG9jYShuKSAwCisjICBlbHNlCisjICAgaW5jbHVkZSA8YWxsb2NhLmg+CisvKiBUaGUgT1MgdXN1YWxseSBndWFyYW50ZWVzIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCisgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5CisgICBhbGxvY2F0ZSBhbnl0aGluZyBsYXJnZXIgdGhhbiA0MDk2IGJ5dGVzLiAgQWxzbyBjYXJlIGZvciB0aGUgcG9zc2liaWxpdHkKKyAgIG9mIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLworIyAgZGVmaW5lIF9fbGliY191c2VfYWxsb2NhKG4pICgobikgPCA0MDMyKQorIyAgZW5kaWYKKyMgZWxzZQorLyogYWxsb2NhIGlzIGltcGxlbWVudGVkIHdpdGggbWFsbG9jLCBzbyBqdXN0IHVzZSBtYWxsb2MuICAqLworIyAgZGVmaW5lIF9fbGliY191c2VfYWxsb2NhKG4pIDAKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIHJlX21hbGxvYyh0LG4pICgodCAqKSBtYWxsb2MgKChuKSAqIHNpemVvZiAodCkpKQorLyogU3VuT1MgNC4xLnggcmVhbGxvYyBkb2Vzbid0IGFjY2VwdCBudWxsIHBvaW50ZXJzOiBwcmUtU3RhbmRhcmQgQy4gU2lnaC4gKi8KKyNkZWZpbmUgcmVfcmVhbGxvYyhwLHQsbikgKChwICE9IE5VTEwpID8gKHQgKikgcmVhbGxvYyAocCwobikqc2l6ZW9mKHQpKSA6ICh0ICopIGNhbGxvYyhuLHNpemVvZih0KSkpCisjZGVmaW5lIHJlX2ZyZWUocCkgZnJlZSAocCkKKworc3RydWN0IGJpbl90cmVlX3QKK3sKKyAgc3RydWN0IGJpbl90cmVlX3QgKnBhcmVudDsKKyAgc3RydWN0IGJpbl90cmVlX3QgKmxlZnQ7CisgIHN0cnVjdCBiaW5fdHJlZV90ICpyaWdodDsKKyAgc3RydWN0IGJpbl90cmVlX3QgKmZpcnN0OworICBzdHJ1Y3QgYmluX3RyZWVfdCAqbmV4dDsKKworICByZV90b2tlbl90IHRva2VuOworCisgIC8qIGBub2RlX2lkeCcgaXMgdGhlIGluZGV4IGluIGRmYS0+bm9kZXMsIGlmIGB0eXBlJyA9PSAwLgorICAgICBPdGhlcndpc2UgYHR5cGUnIGluZGljYXRlIHRoZSB0eXBlIG9mIHRoaXMgbm9kZS4gICovCisgIGludCBub2RlX2lkeDsKK307Cit0eXBlZGVmIHN0cnVjdCBiaW5fdHJlZV90IGJpbl90cmVlX3Q7CisKKyNkZWZpbmUgQklOX1RSRUVfU1RPUkFHRV9TSVpFIFwKKyAgKCgxMDI0IC0gc2l6ZW9mICh2b2lkICopKSAvIHNpemVvZiAoYmluX3RyZWVfdCkpCisKK3N0cnVjdCBiaW5fdHJlZV9zdG9yYWdlX3QKK3sKKyAgc3RydWN0IGJpbl90cmVlX3N0b3JhZ2VfdCAqbmV4dDsKKyAgYmluX3RyZWVfdCBkYXRhW0JJTl9UUkVFX1NUT1JBR0VfU0laRV07Cit9OwordHlwZWRlZiBzdHJ1Y3QgYmluX3RyZWVfc3RvcmFnZV90IGJpbl90cmVlX3N0b3JhZ2VfdDsKKworI2RlZmluZSBDT05URVhUX1dPUkQgMQorI2RlZmluZSBDT05URVhUX05FV0xJTkUgKENPTlRFWFRfV09SRCA8PCAxKQorI2RlZmluZSBDT05URVhUX0JFR0JVRiAoQ09OVEVYVF9ORVdMSU5FIDw8IDEpCisjZGVmaW5lIENPTlRFWFRfRU5EQlVGIChDT05URVhUX0JFR0JVRiA8PCAxKQorCisjZGVmaW5lIElTX1dPUkRfQ09OVEVYVChjKSAoKGMpICYgQ09OVEVYVF9XT1JEKQorI2RlZmluZSBJU19ORVdMSU5FX0NPTlRFWFQoYykgKChjKSAmIENPTlRFWFRfTkVXTElORSkKKyNkZWZpbmUgSVNfQkVHQlVGX0NPTlRFWFQoYykgKChjKSAmIENPTlRFWFRfQkVHQlVGKQorI2RlZmluZSBJU19FTkRCVUZfQ09OVEVYVChjKSAoKGMpICYgQ09OVEVYVF9FTkRCVUYpCisjZGVmaW5lIElTX09SRElOQVJZX0NPTlRFWFQoYykgKChjKSA9PSAwKQorCisjZGVmaW5lIElTX1dPUkRfQ0hBUihjaCkgKGlzYWxudW0gKGNoKSB8fCAoY2gpID09ICdfJykKKyNkZWZpbmUgSVNfTkVXTElORShjaCkgKChjaCkgPT0gTkVXTElORV9DSEFSKQorI2RlZmluZSBJU19XSURFX1dPUkRfQ0hBUihjaCkgKGlzd2FsbnVtIChjaCkgfHwgKGNoKSA9PSBMJ18nKQorI2RlZmluZSBJU19XSURFX05FV0xJTkUoY2gpICgoY2gpID09IFdJREVfTkVXTElORV9DSEFSKQorCisjZGVmaW5lIE5PVF9TQVRJU0ZZX1BSRVZfQ09OU1RSQUlOVChjb25zdHJhaW50LGNvbnRleHQpIFwKKyAoKCgoY29uc3RyYWludCkgJiBQUkVWX1dPUkRfQ09OU1RSQUlOVCkgJiYgIUlTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwgKChjb25zdHJhaW50ICYgUFJFVl9OT1RXT1JEX0NPTlNUUkFJTlQpICYmIElTX1dPUkRfQ09OVEVYVCAoY29udGV4dCkpIFwKKyAgfHwgKChjb25zdHJhaW50ICYgUFJFVl9ORVdMSU5FX0NPTlNUUkFJTlQpICYmICFJU19ORVdMSU5FX0NPTlRFWFQgKGNvbnRleHQpKVwKKyAgfHwgKChjb25zdHJhaW50ICYgUFJFVl9CRUdCVUZfQ09OU1RSQUlOVCkgJiYgIUlTX0JFR0JVRl9DT05URVhUIChjb250ZXh0KSkpCisKKyNkZWZpbmUgTk9UX1NBVElTRllfTkVYVF9DT05TVFJBSU5UKGNvbnN0cmFpbnQsY29udGV4dCkgXAorICgoKChjb25zdHJhaW50KSAmIE5FWFRfV09SRF9DT05TVFJBSU5UKSAmJiAhSVNfV09SRF9DT05URVhUIChjb250ZXh0KSkgXAorICB8fCAoKChjb25zdHJhaW50KSAmIE5FWFRfTk9UV09SRF9DT05TVFJBSU5UKSAmJiBJU19XT1JEX0NPTlRFWFQgKGNvbnRleHQpKSBcCisgIHx8ICgoKGNvbnN0cmFpbnQpICYgTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQpICYmICFJU19ORVdMSU5FX0NPTlRFWFQgKGNvbnRleHQpKSBcCisgIHx8ICgoKGNvbnN0cmFpbnQpICYgTkVYVF9FTkRCVUZfQ09OU1RSQUlOVCkgJiYgIUlTX0VOREJVRl9DT05URVhUIChjb250ZXh0KSkpCisKK3N0cnVjdCByZV9kZmFzdGF0ZV90Cit7CisgIHVuc2lnbmVkIGludCBoYXNoOworICByZV9ub2RlX3NldCBub2RlczsKKyAgcmVfbm9kZV9zZXQgbm9uX2Vwc19ub2RlczsKKyAgcmVfbm9kZV9zZXQgaW52ZWNsb3N1cmU7CisgIHJlX25vZGVfc2V0ICplbnRyYW5jZV9ub2RlczsKKyAgc3RydWN0IHJlX2RmYXN0YXRlX3QgKip0cnRhYmxlLCAqKndvcmRfdHJ0YWJsZTsKKyAgdW5zaWduZWQgaW50IGNvbnRleHQgOiA0OworICB1bnNpZ25lZCBpbnQgaGFsdCA6IDE7CisgIC8qIElmIHRoaXMgc3RhdGUgY2FuIGFjY2VwdCBgbXVsdGkgYnl0ZScuCisgICAgIE5vdGUgdGhhdCB3ZSByZWZlciB0byBtdWx0aWJ5dGUgY2hhcmFjdGVycywgYW5kIG11bHRpIGNoYXJhY3RlcgorICAgICBjb2xsYXRpbmcgZWxlbWVudHMgYXMgYG11bHRpIGJ5dGUnLiAgKi8KKyAgdW5zaWduZWQgaW50IGFjY2VwdF9tYiA6IDE7CisgIC8qIElmIHRoaXMgc3RhdGUgaGFzIGJhY2tyZWZlcmVuY2Ugbm9kZShzKS4gICovCisgIHVuc2lnbmVkIGludCBoYXNfYmFja3JlZiA6IDE7CisgIHVuc2lnbmVkIGludCBoYXNfY29uc3RyYWludCA6IDE7Cit9OwordHlwZWRlZiBzdHJ1Y3QgcmVfZGZhc3RhdGVfdCByZV9kZmFzdGF0ZV90OworCitzdHJ1Y3QgcmVfc3RhdGVfdGFibGVfZW50cnkKK3sKKyAgaW50IG51bTsKKyAgaW50IGFsbG9jOworICByZV9kZmFzdGF0ZV90ICoqYXJyYXk7Cit9OworCisvKiBBcnJheSB0eXBlIHVzZWQgaW4gcmVfc3ViX21hdGNoX2xhc3RfdCBhbmQgcmVfc3ViX21hdGNoX3RvcF90LiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IG5leHRfaWR4OworICBpbnQgYWxsb2M7CisgIHJlX2RmYXN0YXRlX3QgKiphcnJheTsKK30gc3RhdGVfYXJyYXlfdDsKKworLyogU3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vZGUgTk9ERSB3aG9zZSB0eXBlIGlzIE9QX0NMT1NFX1NVQkVYUC4gICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGludCBub2RlOworICBpbnQgc3RyX2lkeDsgLyogVGhlIHBvc2l0aW9uIE5PREUgbWF0Y2ggYXQuICAqLworICBzdGF0ZV9hcnJheV90IHBhdGg7Cit9IHJlX3N1Yl9tYXRjaF9sYXN0X3Q7CisKKy8qIFN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBub2RlIE5PREUgd2hvc2UgdHlwZSBpcyBPUF9PUEVOX1NVQkVYUC4KKyAgIEFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbm9kZSwgd2hvc2UgdHlwZSBpcyBPUF9DTE9TRV9TVUJFWFAsCisgICBjb3JyZXNwb25kaW5nIHRvIE5PREUgaXMgc3RvcmVkIGluIExBU1RTLiAgKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IHN0cl9pZHg7CisgIGludCBub2RlOworICBzdGF0ZV9hcnJheV90ICpwYXRoOworICBpbnQgYWxhc3RzOyAvKiBBbGxvY2F0aW9uIHNpemUgb2YgTEFTVFMuICAqLworICBpbnQgbmxhc3RzOyAvKiBUaGUgbnVtYmVyIG9mIExBU1RTLiAgKi8KKyAgcmVfc3ViX21hdGNoX2xhc3RfdCAqKmxhc3RzOworfSByZV9zdWJfbWF0Y2hfdG9wX3Q7CisKK3N0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5Cit7CisgIGludCBub2RlOworICBpbnQgc3RyX2lkeDsKKyAgaW50IHN1YmV4cF9mcm9tOworICBpbnQgc3ViZXhwX3RvOworICBjaGFyIG1vcmU7CisgIGNoYXIgdW51c2VkOworICB1bnNpZ25lZCBzaG9ydCBpbnQgZXBzX3JlYWNoYWJsZV9zdWJleHBzX21hcDsKK307CisKK3R5cGVkZWYgc3RydWN0Cit7CisgIC8qIFRoZSBzdHJpbmcgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlucHV0IHN0cmluZy4gICovCisgIHJlX3N0cmluZ190IGlucHV0OworI2lmIGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmE7CisjZWxzZQorICBjb25zdCByZV9kZmFfdCAqZGZhOworI2VuZGlmCisgIC8qIEVGTEFHUyBvZiB0aGUgYXJndW1lbnQgb2YgcmVnZXhlYy4gICovCisgIGludCBlZmxhZ3M7CisgIC8qIFdoZXJlIHRoZSBtYXRjaGluZyBlbmRzLiAgKi8KKyAgaW50IG1hdGNoX2xhc3Q7CisgIGludCBsYXN0X25vZGU7CisgIC8qIFRoZSBzdGF0ZSBsb2cgdXNlZCBieSB0aGUgbWF0Y2hlci4gICovCisgIHJlX2RmYXN0YXRlX3QgKipzdGF0ZV9sb2c7CisgIGludCBzdGF0ZV9sb2dfdG9wOworICAvKiBCYWNrIHJlZmVyZW5jZSBjYWNoZS4gICovCisgIGludCBuYmtyZWZfZW50czsKKyAgaW50IGFia3JlZl9lbnRzOworICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqYmtyZWZfZW50czsKKyAgaW50IG1heF9tYl9lbGVtX2xlbjsKKyAgaW50IG5zdWJfdG9wczsKKyAgaW50IGFzdWJfdG9wczsKKyAgcmVfc3ViX21hdGNoX3RvcF90ICoqc3ViX3RvcHM7Cit9IHJlX21hdGNoX2NvbnRleHRfdDsKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgcmVfZGZhc3RhdGVfdCAqKnNpZnRlZF9zdGF0ZXM7CisgIHJlX2RmYXN0YXRlX3QgKipsaW1pdGVkX3N0YXRlczsKKyAgaW50IGxhc3Rfbm9kZTsKKyAgaW50IGxhc3Rfc3RyX2lkeDsKKyAgcmVfbm9kZV9zZXQgbGltaXRzOworfSByZV9zaWZ0X2NvbnRleHRfdDsKKworc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QKK3sKKyAgaW50IGlkeDsKKyAgaW50IG5vZGU7CisgIHJlZ21hdGNoX3QgKnJlZ3M7CisgIHJlX25vZGVfc2V0IGVwc192aWFfbm9kZXM7Cit9OworCitzdHJ1Y3QgcmVfZmFpbF9zdGFja190Cit7CisgIGludCBudW07CisgIGludCBhbGxvYzsKKyAgc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QgKnN0YWNrOworfTsKKworc3RydWN0IHJlX2RmYV90Cit7CisgIHJlX3Rva2VuX3QgKm5vZGVzOworICBzaXplX3Qgbm9kZXNfYWxsb2M7CisgIHNpemVfdCBub2Rlc19sZW47CisgIGludCAqbmV4dHM7CisgIGludCAqb3JnX2luZGljZXM7CisgIHJlX25vZGVfc2V0ICplZGVzdHM7CisgIHJlX25vZGVfc2V0ICplY2xvc3VyZXM7CisgIHJlX25vZGVfc2V0ICppbnZlY2xvc3VyZXM7CisgIHN0cnVjdCByZV9zdGF0ZV90YWJsZV9lbnRyeSAqc3RhdGVfdGFibGU7CisgIHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGU7CisgIHJlX2RmYXN0YXRlX3QgKmluaXRfc3RhdGVfd29yZDsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZV9ubDsKKyAgcmVfZGZhc3RhdGVfdCAqaW5pdF9zdGF0ZV9iZWdidWY7CisgIGJpbl90cmVlX3QgKnN0cl90cmVlOworICBiaW5fdHJlZV9zdG9yYWdlX3QgKnN0cl90cmVlX3N0b3JhZ2U7CisgIHJlX2JpdHNldF9wdHJfdCBzYl9jaGFyOworICBpbnQgc3RyX3RyZWVfc3RvcmFnZV9pZHg7CisKKyAgLyogbnVtYmVyIG9mIHN1YmV4cHJlc3Npb25zIGByZV9uc3ViJyBpcyBpbiByZWdleF90LiAgKi8KKyAgdW5zaWduZWQgaW50IHN0YXRlX2hhc2hfbWFzazsKKyAgaW50IGluaXRfbm9kZTsKKyAgaW50IG5iYWNrcmVmOyAvKiBUaGUgbnVtYmVyIG9mIGJhY2tyZWZlcmVuY2UgaW4gdGhpcyBkZmEuICAqLworCisgIC8qIEJpdG1hcCBleHByZXNzaW5nIHdoaWNoIGJhY2tyZWZlcmVuY2UgaXMgdXNlZC4gICovCisgIGJpdHNldF93b3JkX3QgdXNlZF9ia3JlZl9tYXA7CisgIGJpdHNldF93b3JkX3QgY29tcGxldGVkX2JrcmVmX21hcDsKKworICB1bnNpZ25lZCBpbnQgaGFzX3BsdXJhbF9tYXRjaCA6IDE7CisgIC8qIElmIHRoaXMgZGZhIGhhcyAibXVsdGlieXRlIG5vZGUiLCB3aGljaCBpcyBhIGJhY2tyZWZlcmVuY2Ugb3IKKyAgICAgYSBub2RlIHdoaWNoIGNhbiBhY2NlcHQgbXVsdGlieXRlIGNoYXJhY3RlciBvciBtdWx0aSBjaGFyYWN0ZXIKKyAgICAgY29sbGF0aW5nIGVsZW1lbnQuICAqLworICB1bnNpZ25lZCBpbnQgaGFzX21iX25vZGUgOiAxOworICB1bnNpZ25lZCBpbnQgaXNfdXRmOCA6IDE7CisgIHVuc2lnbmVkIGludCBtYXBfbm90YXNjaWkgOiAxOworICB1bnNpZ25lZCBpbnQgd29yZF9vcHNfdXNlZCA6IDE7CisgIGludCBtYl9jdXJfbWF4OworICBiaXRzZXRfdCB3b3JkX2NoYXI7CisgIHJlZ19zeW50YXhfdCBzeW50YXg7CisgIGludCAqc3ViZXhwX21hcDsKKyNpZmRlZiBERUJVRworICBjaGFyKiByZV9zdHI7CisjZW5kaWYKKyNpZiBkZWZpbmVkIF9MSUJDCisgIF9fbGliY19sb2NrX2RlZmluZSAoLCBsb2NrKQorI2VuZGlmCit9OworCisjZGVmaW5lIHJlX25vZGVfc2V0X2luaXRfZW1wdHkoc2V0KSBtZW1zZXQgKHNldCwgJ1wwJywgc2l6ZW9mIChyZV9ub2RlX3NldCkpCisjZGVmaW5lIHJlX25vZGVfc2V0X3JlbW92ZShzZXQsaWQpIFwKKyAgKHJlX25vZGVfc2V0X3JlbW92ZV9hdCAoc2V0LCByZV9ub2RlX3NldF9jb250YWlucyAoc2V0LCBpZCkgLSAxKSkKKyNkZWZpbmUgcmVfbm9kZV9zZXRfZW1wdHkocCkgKChwKS0+bmVsZW0gPSAwKQorI2RlZmluZSByZV9ub2RlX3NldF9mcmVlKHNldCkgcmVfZnJlZSAoKHNldCktPmVsZW1zKQorDAorCit0eXBlZGVmIGVudW0KK3sKKyAgU0JfQ0hBUiwKKyAgTUJfQ0hBUiwKKyAgRVFVSVZfQ0xBU1MsCisgIENPTExfU1lNLAorICBDSEFSX0NMQVNTCit9IGJyYWNrZXRfZWxlbV90eXBlOworCit0eXBlZGVmIHN0cnVjdAoreworICBicmFja2V0X2VsZW1fdHlwZSB0eXBlOworICB1bmlvbgorICB7CisgICAgdW5zaWduZWQgY2hhciBjaDsKKyAgICB1bnNpZ25lZCBjaGFyICpuYW1lOworICAgIHdjaGFyX3Qgd2NoOworICB9IG9wcjsKK30gYnJhY2tldF9lbGVtX3Q7CisKKworLyogSW5saW5lIGZ1bmN0aW9ucyBmb3IgYml0c2V0IG9wZXJhdGlvbi4gICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9ub3QgKGJpdHNldF90IHNldCkKK3sKKyAgaW50IGJpdHNldF9pOworICBmb3IgKGJpdHNldF9pID0gMDsgYml0c2V0X2kgPCBCSVRTRVRfV09SRFM7ICsrYml0c2V0X2kpCisgICAgc2V0W2JpdHNldF9pXSA9IH5zZXRbYml0c2V0X2ldOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9tZXJnZSAoYml0c2V0X3QgZGVzdCwgY29uc3QgYml0c2V0X3Qgc3JjKQoreworICBpbnQgYml0c2V0X2k7CisgIGZvciAoYml0c2V0X2kgPSAwOyBiaXRzZXRfaSA8IEJJVFNFVF9XT1JEUzsgKytiaXRzZXRfaSkKKyAgICBkZXN0W2JpdHNldF9pXSB8PSBzcmNbYml0c2V0X2ldOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2JpdHNldF9tYXNrIChiaXRzZXRfdCBkZXN0LCBjb25zdCBiaXRzZXRfdCBzcmMpCit7CisgIGludCBiaXRzZXRfaTsKKyAgZm9yIChiaXRzZXRfaSA9IDA7IGJpdHNldF9pIDwgQklUU0VUX1dPUkRTOyArK2JpdHNldF9pKQorICAgIGRlc3RbYml0c2V0X2ldICY9IHNyY1tiaXRzZXRfaV07Cit9CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorLyogSW5saW5lIGZ1bmN0aW9ucyBmb3IgcmVfc3RyaW5nLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX2NoYXJfc2l6ZV9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCit7CisgIGludCBieXRlX2lkeDsKKyAgaWYgKHBzdHItPm1iX2N1cl9tYXggPT0gMSkKKyAgICByZXR1cm4gMTsKKyAgZm9yIChieXRlX2lkeCA9IDE7IGlkeCArIGJ5dGVfaWR4IDwgcHN0ci0+dmFsaWRfbGVuOyArK2J5dGVfaWR4KQorICAgIGlmIChwc3RyLT53Y3NbaWR4ICsgYnl0ZV9pZHhdICE9IFdFT0YpCisgICAgICBicmVhazsKKyAgcmV0dXJuIGJ5dGVfaWR4OworfQorCitzdGF0aWMgaW5saW5lIHdpbnRfdAoraW50ZXJuYWxfZnVuY3Rpb24gX19hdHRyaWJ1dGUgKChwdXJlKSkKK3JlX3N0cmluZ193Y2hhcl9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCit7CisgIGlmIChwc3RyLT5tYl9jdXJfbWF4ID09IDEpCisgICAgcmV0dXJuICh3aW50X3QpIHBzdHItPm1ic1tpZHhdOworICByZXR1cm4gKHdpbnRfdCkgcHN0ci0+d2NzW2lkeF07Cit9CisKKyMgaWZuZGVmIE5PVF9JTl9saWJjCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbiBfX2F0dHJpYnV0ZSAoKHB1cmUpKQorcmVfc3RyaW5nX2VsZW1fc2l6ZV9hdCAoY29uc3QgcmVfc3RyaW5nX3QgKnBzdHIsIGludCBpZHgpCit7CisjICBpZmRlZiBfTElCQworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwLCAqZXh0cmE7CisgIGNvbnN0IGludDMyX3QgKnRhYmxlLCAqaW5kaXJlY3Q7CisgIGludDMyX3QgdG1wOworIyAgIGluY2x1ZGUgPGxvY2FsZS93ZWlnaHQuaD4KKyAgdWludF9mYXN0MzJfdCBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworCisgIGlmIChucnVsZXMgIT0gMCkKKyAgICB7CisgICAgICB0YWJsZSA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9UQUJMRU1CKTsKKyAgICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfRVhUUkFNQik7CisgICAgICBpbmRpcmVjdCA9IChjb25zdCBpbnQzMl90ICopIF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLAorCQkJCQkJX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisgICAgICBwID0gcHN0ci0+bWJzICsgaWR4OworICAgICAgdG1wID0gZmluZGlkeCAoJnApOworICAgICAgcmV0dXJuIHAgLSBwc3RyLT5tYnMgLSBpZHg7CisgICAgfQorICBlbHNlCisjICBlbmRpZiAvKiBfTElCQyAqLworICAgIHJldHVybiAxOworfQorIyBlbmRpZgorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisKKyNlbmRpZiAvKiAgX1JFR0VYX0lOVEVSTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC9yZWdleC9yZWdleGVjLmMgYi9jb21wYXQvcmVnZXgvcmVnZXhlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWUxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvcmVnZXgvcmVnZXhlYy5jCkBAIC0wLDAgKzEsNDM2OSBAQAorLyogRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGFuZCBzZWFyY2ggbGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMjAwMi0yMDA1LCAyMDA3LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBJc2FtdSBIYXNlZ2F3YSA8aXNhbXVAeWFtYXRvLmlibS5jb20+LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICAgMDIxMTAtMTMwMSBVU0EuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdCBtYXRjaF9jdHhfaW5pdCAocmVfbWF0Y2hfY29udGV4dF90ICpjYWNoZSwgaW50IGVmbGFncywKKwkJCQkgICAgIGludCBuKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyB2b2lkIG1hdGNoX2N0eF9jbGVhbiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyB2b2lkIG1hdGNoX2N0eF9mcmVlIChyZV9tYXRjaF9jb250ZXh0X3QgKmNhY2hlKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IG1hdGNoX2N0eF9hZGRfZW50cnkgKHJlX21hdGNoX2NvbnRleHRfdCAqY2FjaGUsIGludCBub2RlLAorCQkJCQkgIGludCBzdHJfaWR4LCBpbnQgZnJvbSwgaW50IHRvKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgc3RyX2lkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBtYXRjaF9jdHhfYWRkX3N1YnRvcCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbm9kZSwKKwkJCQkJICAgaW50IHN0cl9pZHgpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKiBtYXRjaF9jdHhfYWRkX3N1Ymxhc3QgKHJlX3N1Yl9tYXRjaF90b3BfdCAqc3VidG9wLAorCQkJCQkJICAgaW50IG5vZGUsIGludCBzdHJfaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyB2b2lkIHNpZnRfY3R4X2luaXQgKHJlX3NpZnRfY29udGV4dF90ICpzY3R4LCByZV9kZmFzdGF0ZV90ICoqc2lmdGVkX3N0cywKKwkJCSAgIHJlX2RmYXN0YXRlX3QgKipsaW1pdGVkX3N0cywgaW50IGxhc3Rfbm9kZSwKKwkJCSAgIGludCBsYXN0X3N0cl9pZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgcmVfc2VhcmNoX2ludGVybmFsIChjb25zdCByZWdleF90ICpwcmVnLAorCQkJCQkgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbGVuZ3RoLAorCQkJCQkgaW50IHN0YXJ0LCBpbnQgcmFuZ2UsIGludCBzdG9wLAorCQkJCQkgc2l6ZV90IG5tYXRjaCwgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwKKwkJCQkJIGludCBlZmxhZ3MpOworc3RhdGljIGludCByZV9zZWFyY2hfMl9zdHViIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJCQkgICAgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBsZW5ndGgxLAorCQkJICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgbGVuZ3RoMiwKKwkJCSAgICAgaW50IHN0YXJ0LCBpbnQgcmFuZ2UsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJCQkgICAgIGludCBzdG9wLCBpbnQgcmV0X2xlbik7CitzdGF0aWMgaW50IHJlX3NlYXJjaF9zdHViIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJCQkgICBjb25zdCBjaGFyICpzdHJpbmcsIGludCBsZW5ndGgsIGludCBzdGFydCwKKwkJCSAgIGludCByYW5nZSwgaW50IHN0b3AsIHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJCQkgICBpbnQgcmV0X2xlbik7CitzdGF0aWMgdW5zaWduZWQgcmVfY29weV9yZWdzIChzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCByZWdtYXRjaF90ICpwbWF0Y2gsCisJCQkgICAgICBpbnQgbnJlZ3MsIGludCByZWdzX2FsbG9jYXRlZCk7CitzdGF0aWMgcmVnX2VycmNvZGVfdCBwcnVuZV9pbXBvc3NpYmxlX25vZGVzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpOworc3RhdGljIGludCBjaGVja19tYXRjaGluZyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgZmxfbG9uZ2VzdF9tYXRjaCwKKwkJCSAgIGludCAqcF9tYXRjaF9maXJzdCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50IGNoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSAgICAgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsIGludCBpZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHZvaWQgdXBkYXRlX3JlZ3MgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlZ21hdGNoX3QgKnBtYXRjaCwKKwkJCSByZWdtYXRjaF90ICpwcmV2X2lkeF9tYXRjaCwgaW50IGN1cl9ub2RlLAorCQkJIGludCBjdXJfaWR4LCBpbnQgbm1hdGNoKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IHB1c2hfZmFpbF9zdGFjayAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnMsCisJCQkJICAgICAgaW50IHN0cl9pZHgsIGludCBkZXN0X25vZGUsIGludCBucmVncywKKwkJCQkgICAgICByZWdtYXRjaF90ICpyZWdzLAorCQkJCSAgICAgIHJlX25vZGVfc2V0ICplcHNfdmlhX25vZGVzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IHNldF9yZWdzIChjb25zdCByZWdleF90ICpwcmVnLAorCQkJICAgICAgIGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSAgICAgICBzaXplX3Qgbm1hdGNoLCByZWdtYXRjaF90ICpwbWF0Y2gsCisJCQkgICAgICAgaW50IGZsX2JhY2t0cmFjaykgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBmcmVlX2ZhaWxfc3RhY2tfcmV0dXJuIChzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIGludCBzaWZ0X3N0YXRlc19pdGVyX21iIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsCisJCQkJaW50IG5vZGVfaWR4LCBpbnQgc3RyX2lkeCwgaW50IG1heF9zdHJfaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworc3RhdGljIHJlZ19lcnJjb2RlX3Qgc2lmdF9zdGF0ZXNfYmFja3dhcmQgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJICAgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgYnVpbGRfc2lmdGVkX3N0YXRlcyAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkgIHJlX3NpZnRfY29udGV4dF90ICpzY3R4LCBpbnQgc3RyX2lkeCwKKwkJCQkJICByZV9ub2RlX3NldCAqY3VyX2Rlc3QpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgdXBkYXRlX2N1cl9zaWZ0ZWRfc3RhdGUgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJICAgICAgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsCisJCQkJCSAgICAgIGludCBzdHJfaWR4LAorCQkJCQkgICAgICByZV9ub2RlX3NldCAqZGVzdF9ub2RlcykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBhZGRfZXBzaWxvbl9zcmNfbm9kZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCSAgICByZV9ub2RlX3NldCAqZGVzdF9ub2RlcywKKwkJCQkJICAgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgY2hlY2tfZHN0X2xpbWl0cyAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJICAgICByZV9ub2RlX3NldCAqbGltaXRzLAorCQkJICAgICBpbnQgZHN0X25vZGUsIGludCBkc3RfaWR4LCBpbnQgc3JjX25vZGUsCisJCQkgICAgIGludCBzcmNfaWR4KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyBpbnQgY2hlY2tfZHN0X2xpbWl0c19jYWxjX3Bvc18xIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCWludCBib3VuZGFyaWVzLCBpbnQgc3ViZXhwX2lkeCwKKwkJCQkJaW50IGZyb21fbm9kZSwgaW50IGJrcmVmX2lkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50IGNoZWNrX2RzdF9saW1pdHNfY2FsY19wb3MgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkgICAgICBpbnQgbGltaXQsIGludCBzdWJleHBfaWR4LAorCQkJCSAgICAgIGludCBub2RlLCBpbnQgc3RyX2lkeCwKKwkJCQkgICAgICBpbnQgYmtyZWZfaWR4KSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNoZWNrX3N1YmV4cF9saW1pdHMgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCSAgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMsCisJCQkJCSAgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMsCisJCQkJCSAgcmVfbm9kZV9zZXQgKmxpbWl0cywKKwkJCQkJICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqYmtyZWZfZW50cywKKwkJCQkJICBpbnQgc3RyX2lkeCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBzaWZ0X3N0YXRlc19ia3JlZiAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQlyZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJCQkJaW50IHN0cl9pZHgsIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IG1lcmdlX3N0YXRlX2FycmF5IChjb25zdCByZV9kZmFfdCAqZGZhLAorCQkJCQlyZV9kZmFzdGF0ZV90ICoqZHN0LAorCQkJCQlyZV9kZmFzdGF0ZV90ICoqc3JjLCBpbnQgbnVtKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICpmaW5kX3JlY292ZXJfc3RhdGUgKHJlZ19lcnJjb2RlX3QgKmVyciwKKwkJCQkJIHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqdHJhbnNpdF9zdGF0ZSAocmVnX2VycmNvZGVfdCAqZXJyLAorCQkJCSAgICAgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSAgICAgcmVfZGZhc3RhdGVfdCAqc3RhdGUpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlX2RmYXN0YXRlX3QgKm1lcmdlX3N0YXRlX3dpdGhfbG9nIChyZWdfZXJyY29kZV90ICplcnIsCisJCQkJCSAgICByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCSAgICByZV9kZmFzdGF0ZV90ICpuZXh0X3N0YXRlKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNoZWNrX3N1YmV4cF9tYXRjaGluZ190b3AgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkJCXJlX25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCQkJCQlpbnQgc3RyX2lkeCkgaW50ZXJuYWxfZnVuY3Rpb247CisjaWYgMAorc3RhdGljIHJlX2RmYXN0YXRlX3QgKnRyYW5zaXRfc3RhdGVfc2IgKHJlZ19lcnJjb2RlX3QgKmVyciwKKwkJCQkJcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQlyZV9kZmFzdGF0ZV90ICpwc3RhdGUpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworI2VuZGlmCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyByZWdfZXJyY29kZV90IHRyYW5zaXRfc3RhdGVfbWIgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkgICAgICAgcmVfZGZhc3RhdGVfdCAqcHN0YXRlKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworc3RhdGljIHJlZ19lcnJjb2RlX3QgdHJhbnNpdF9zdGF0ZV9ia3JlZiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCQkgIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBnZXRfc3ViZXhwIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJIGludCBia3JlZl9ub2RlLCBpbnQgYmtyZWZfc3RyX2lkeCkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBnZXRfc3ViZXhwX3N1YiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJCSAgICAgY29uc3QgcmVfc3ViX21hdGNoX3RvcF90ICpzdWJfdG9wLAorCQkJCSAgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqc3ViX2xhc3QsCisJCQkJICAgICBpbnQgYmtyZWZfbm9kZSwgaW50IGJrcmVmX3N0cikKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50IGZpbmRfc3ViZXhwX25vZGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGNvbnN0IHJlX25vZGVfc2V0ICpub2RlcywKKwkJCSAgICAgaW50IHN1YmV4cF9pZHgsIGludCB0eXBlKSBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGNoZWNrX2Fycml2YWwgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCQkgICAgc3RhdGVfYXJyYXlfdCAqcGF0aCwgaW50IHRvcF9ub2RlLAorCQkJCSAgICBpbnQgdG9wX3N0ciwgaW50IGxhc3Rfbm9kZSwgaW50IGxhc3Rfc3RyLAorCQkJCSAgICBpbnQgdHlwZSkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjaGVja19hcnJpdmFsX2FkZF9uZXh0X25vZGVzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCQkgICBpbnQgc3RyX2lkeCwKKwkJCQkJCSAgIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCQkJCQkgICByZV9ub2RlX3NldCAqbmV4dF9ub2RlcykKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgcmVnX2VycmNvZGVfdCBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2wgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkJCSAgICAgICByZV9ub2RlX3NldCAqY3VyX25vZGVzLAorCQkJCQkgICAgICAgaW50IGV4X3N1YmV4cCwgaW50IHR5cGUpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsX3N1YiAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkJCSAgIHJlX25vZGVfc2V0ICpkc3Rfbm9kZXMsCisJCQkJCQkgICBpbnQgdGFyZ2V0LCBpbnQgZXhfc3ViZXhwLAorCQkJCQkJICAgaW50IHR5cGUpIGludGVybmFsX2Z1bmN0aW9uOworc3RhdGljIHJlZ19lcnJjb2RlX3QgZXhwYW5kX2JrcmVmX2NhY2hlIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkJCSByZV9ub2RlX3NldCAqY3VyX25vZGVzLCBpbnQgY3VyX3N0ciwKKwkJCQkJIGludCBzdWJleHBfbnVtLCBpbnQgdHlwZSkKKyAgICAgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50IGJ1aWxkX3RydGFibGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsCisJCQkgIHJlX2RmYXN0YXRlX3QgKnN0YXRlKSBpbnRlcm5hbF9mdW5jdGlvbjsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIGludCBjaGVja19ub2RlX2FjY2VwdF9ieXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGVfaWR4LAorCQkJCSAgICBjb25zdCByZV9zdHJpbmdfdCAqaW5wdXQsIGludCBpZHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworIyBpZmRlZiBfTElCQworc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX2NvbGxhdGlvbl9zZXF1ZW5jZV92YWx1ZSAoY29uc3QgdW5zaWduZWQgY2hhciAqbWJzLAorCQkJCQkJICAgc2l6ZV90IG5hbWVfbGVuKQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKKyMgZW5kaWYgLyogX0xJQkMgKi8KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworc3RhdGljIGludCBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwKKwkJCQkgICAgICAgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsCisJCQkJICAgICAgIHJlX25vZGVfc2V0ICpzdGF0ZXNfbm9kZSwKKwkJCQkgICAgICAgYml0c2V0X3QgKnN0YXRlc19jaCkgaW50ZXJuYWxfZnVuY3Rpb247CitzdGF0aWMgaW50IGNoZWNrX25vZGVfYWNjZXB0IChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJCQkgICAgICBjb25zdCByZV90b2tlbl90ICpub2RlLCBpbnQgaWR4KQorICAgICBpbnRlcm5hbF9mdW5jdGlvbjsKK3N0YXRpYyByZWdfZXJyY29kZV90IGV4dGVuZF9idWZmZXJzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpCisgICAgIGludGVybmFsX2Z1bmN0aW9uOworDAorLyogRW50cnkgcG9pbnQgZm9yIFBPU0lYIGNvZGUuICAqLworCisvKiByZWdleGVjIHNlYXJjaGVzIGZvciBhIGdpdmVuIHBhdHRlcm4sIHNwZWNpZmllZCBieSBQUkVHLCBpbiB0aGUKKyAgIHN0cmluZyBTVFJJTkcuCisKKyAgIElmIE5NQVRDSCBpcyB6ZXJvIG9yIFJFR19OT1NVQiB3YXMgc2V0IGluIHRoZSBjZmxhZ3MgYXJndW1lbnQgdG8KKyAgIGByZWdjb21wJywgd2UgaWdub3JlIFBNQVRDSC4gIE90aGVyd2lzZSwgd2UgYXNzdW1lIFBNQVRDSCBoYXMgYXQKKyAgIGxlYXN0IE5NQVRDSCBlbGVtZW50cywgYW5kIHdlIHNldCB0aGVtIHRvIHRoZSBvZmZzZXRzIG9mIHRoZQorICAgY29ycmVzcG9uZGluZyBtYXRjaGVkIHN1YnN0cmluZ3MuCisKKyAgIEVGTEFHUyBzcGVjaWZpZXMgYGV4ZWN1dGlvbiBmbGFncycgd2hpY2ggYWZmZWN0IG1hdGNoaW5nOiBpZgorICAgUkVHX05PVEJPTCBpcyBzZXQsIHRoZW4gXiBkb2VzIG5vdCBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICAgc3RyaW5nOyBpZiBSRUdfTk9URU9MIGlzIHNldCwgdGhlbiAkIGRvZXMgbm90IG1hdGNoIGF0IHRoZSBlbmQuCisKKyAgIFdlIHJldHVybiAwIGlmIHdlIGZpbmQgYSBtYXRjaCBhbmQgUkVHX05PTUFUQ0ggaWYgbm90LiAgKi8KKworaW50CityZWdleGVjICgKKwljb25zdCByZWdleF90ICpfX3Jlc3RyaWN0IHByZWcsCisJY29uc3QgY2hhciAqX19yZXN0cmljdCBzdHJpbmcsCisJc2l6ZV90IG5tYXRjaCwKKwlyZWdtYXRjaF90IHBtYXRjaFtdLAorCWludCBlZmxhZ3MpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgc3RhcnQsIGxlbmd0aDsKKworICBpZiAoZWZsYWdzICYgfihSRUdfTk9UQk9MIHwgUkVHX05PVEVPTCB8IFJFR19TVEFSVEVORCkpCisgICAgcmV0dXJuIFJFR19CQURQQVQ7CisKKyAgaWYgKGVmbGFncyAmIFJFR19TVEFSVEVORCkKKyAgICB7CisgICAgICBzdGFydCA9IHBtYXRjaFswXS5ybV9zbzsKKyAgICAgIGxlbmd0aCA9IHBtYXRjaFswXS5ybV9lbzsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBzdGFydCA9IDA7CisgICAgICBsZW5ndGggPSBzdHJsZW4gKHN0cmluZyk7CisgICAgfQorCisgIF9fbGliY19sb2NrX2xvY2sgKGRmYS0+bG9jayk7CisgIGlmIChwcmVnLT5ub19zdWIpCisgICAgZXJyID0gcmVfc2VhcmNoX2ludGVybmFsIChwcmVnLCBzdHJpbmcsIGxlbmd0aCwgc3RhcnQsIGxlbmd0aCAtIHN0YXJ0LAorCQkJICAgICAgbGVuZ3RoLCAwLCBOVUxMLCBlZmxhZ3MpOworICBlbHNlCisgICAgZXJyID0gcmVfc2VhcmNoX2ludGVybmFsIChwcmVnLCBzdHJpbmcsIGxlbmd0aCwgc3RhcnQsIGxlbmd0aCAtIHN0YXJ0LAorCQkJICAgICAgbGVuZ3RoLCBubWF0Y2gsIHBtYXRjaCwgZWZsYWdzKTsKKyAgX19saWJjX2xvY2tfdW5sb2NrIChkZmEtPmxvY2spOworICByZXR1cm4gZXJyICE9IFJFR19OT0VSUk9SOworfQorCisjaWZkZWYgX0xJQkMKKyMgaW5jbHVkZSA8c2hsaWItY29tcGF0Lmg+Cit2ZXJzaW9uZWRfc3ltYm9sIChsaWJjLCBfX3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfM180KTsKKworIyBpZiBTSExJQl9DT01QQVQgKGxpYmMsIEdMSUJDXzJfMCwgR0xJQkNfMl8zXzQpCitfX3R5cGVvZl9fIChfX3JlZ2V4ZWMpIF9fY29tcGF0X3JlZ2V4ZWM7CisKK2ludAorYXR0cmlidXRlX2NvbXBhdF90ZXh0X3NlY3Rpb24KK19fY29tcGF0X3JlZ2V4ZWMgKGNvbnN0IHJlZ2V4X3QgKl9fcmVzdHJpY3QgcHJlZywKKwkJICBjb25zdCBjaGFyICpfX3Jlc3RyaWN0IHN0cmluZywgc2l6ZV90IG5tYXRjaCwKKwkJICByZWdtYXRjaF90IHBtYXRjaFtdLCBpbnQgZWZsYWdzKQoreworICByZXR1cm4gcmVnZXhlYyAocHJlZywgc3RyaW5nLCBubWF0Y2gsIHBtYXRjaCwKKwkJICBlZmxhZ3MgJiAoUkVHX05PVEJPTCB8IFJFR19OT1RFT0wpKTsKK30KK2NvbXBhdF9zeW1ib2wgKGxpYmMsIF9fY29tcGF0X3JlZ2V4ZWMsIHJlZ2V4ZWMsIEdMSUJDXzJfMCk7CisjIGVuZGlmCisjZW5kaWYKKworLyogRW50cnkgcG9pbnRzIGZvciBHTlUgY29kZS4gICovCisKKy8qIHJlX21hdGNoLCByZV9zZWFyY2gsIHJlX21hdGNoXzIsIHJlX3NlYXJjaF8yCisKKyAgIFRoZSBmb3JtZXIgdHdvIGZ1bmN0aW9ucyBvcGVyYXRlIG9uIFNUUklORyB3aXRoIGxlbmd0aCBMRU5HVEgsCisgICB3aGlsZSB0aGUgbGF0ZXIgdHdvIG9wZXJhdGUgb24gY29uY2F0ZW5hdGlvbiBvZiBTVFJJTkcxIGFuZCBTVFJJTkcyCisgICB3aXRoIGxlbmd0aHMgTEVOR1RIMSBhbmQgTEVOR1RIMiwgcmVzcGVjdGl2ZWx5LgorCisgICByZV9tYXRjaCgpIG1hdGNoZXMgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4gQlVGUCBhZ2FpbnN0IHRoZSBzdHJpbmcsCisgICBzdGFydGluZyBhdCBpbmRleCBTVEFSVC4KKworICAgcmVfc2VhcmNoKCkgZmlyc3QgdHJpZXMgbWF0Y2hpbmcgYXQgaW5kZXggU1RBUlQsIHRoZW4gaXQgdHJpZXMgdG8gbWF0Y2gKKyAgIHN0YXJ0aW5nIGZyb20gaW5kZXggU1RBUlQgKyAxLCBhbmQgc28gb24uICBUaGUgbGFzdCBzdGFydCBwb3NpdGlvbiB0cmllZAorICAgaXMgU1RBUlQgKyBSQU5HRS4gIChUaHVzIFJBTkdFID0gMCBmb3JjZXMgcmVfc2VhcmNoIHRvIG9wZXJhdGUgdGhlIHNhbWUKKyAgIHdheSBhcyByZV9tYXRjaCgpLikKKworICAgVGhlIHBhcmFtZXRlciBTVE9QIG9mIHJlX3ttYXRjaCxzZWFyY2h9XzIgc3BlY2lmaWVzIHRoYXQgbm8gbWF0Y2ggZXhjZWVkaW5nCisgICB0aGUgZmlyc3QgU1RPUCBjaGFyYWN0ZXJzIG9mIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIHNob3VsZCBiZQorICAgY29uY2VybmVkLgorCisgICBJZiBSRUdTIGlzIG5vdCBOVUxMLCBhbmQgQlVGUC0+bm9fc3ViIGlzIG5vdCBzZXQsIHRoZSBvZmZzZXRzIG9mIHRoZSBtYXRjaAorICAgYW5kIGFsbCBncm91cHMgaXMgc3Ryb2VkIGluIFJFR1MuICAoRm9yIHRoZSAiXzIiIHZhcmlhbnRzLCB0aGUgb2Zmc2V0cyBhcmUKKyAgIGNvbXB1dGVkIHJlbGF0aXZlIHRvIHRoZSBjb25jYXRlbmF0aW9uLCBub3QgcmVsYXRpdmUgdG8gdGhlIGluZGl2aWR1YWwKKyAgIHN0cmluZ3MuKQorCisgICBPbiBzdWNjZXNzLCByZV9tYXRjaCogZnVuY3Rpb25zIHJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaCwgcmVfc2VhcmNoKgorICAgcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoLiAgUmV0dXJuIHZhbHVlIC0xIG1lYW5zIG5vCisgICBtYXRjaCB3YXMgZm91bmQgYW5kIC0yIGluZGljYXRlcyBhbiBpbnRlcm5hbCBlcnJvci4gICovCisKK2ludAorcmVfbWF0Y2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkgIGNvbnN0IGNoYXIgKnN0cmluZywKKwkgIGludCBsZW5ndGgsCisJICBpbnQgc3RhcnQsCisJICBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzKQoreworICByZXR1cm4gcmVfc2VhcmNoX3N0dWIgKGJ1ZnAsIHN0cmluZywgbGVuZ3RoLCBzdGFydCwgMCwgbGVuZ3RoLCByZWdzLCAxKTsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9tYXRjaCwgcmVfbWF0Y2gpCisjZW5kaWYKKworaW50CityZV9zZWFyY2ggKHN0cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciAqYnVmcCwKKwkgICBjb25zdCBjaGFyICpzdHJpbmcsCisJICAgaW50IGxlbmd0aCwgaW50IHN0YXJ0LCBpbnQgcmFuZ2UsCisJICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncykKK3sKKyAgcmV0dXJuIHJlX3NlYXJjaF9zdHViIChidWZwLCBzdHJpbmcsIGxlbmd0aCwgc3RhcnQsIHJhbmdlLCBsZW5ndGgsIHJlZ3MsIDApOworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX3NlYXJjaCwgcmVfc2VhcmNoKQorI2VuZGlmCisKK2ludAorcmVfbWF0Y2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCSAgICBjb25zdCBjaGFyICpzdHJpbmcxLCBpbnQgbGVuZ3RoMSwKKwkgICAgY29uc3QgY2hhciAqc3RyaW5nMiwgaW50IGxlbmd0aDIsIGludCBzdGFydCwKKwkgICAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHN0b3ApCit7CisgIHJldHVybiByZV9zZWFyY2hfMl9zdHViIChidWZwLCBzdHJpbmcxLCBsZW5ndGgxLCBzdHJpbmcyLCBsZW5ndGgyLAorCQkJICAgc3RhcnQsIDAsIHJlZ3MsIHN0b3AsIDEpOworfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX21hdGNoXzIsIHJlX21hdGNoXzIpCisjZW5kaWYKKworaW50CityZV9zZWFyY2hfMiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCSAgICAgY29uc3QgY2hhciAqc3RyaW5nMSwgaW50IGxlbmd0aDEsCisJICAgICBjb25zdCBjaGFyICpzdHJpbmcyLCBpbnQgbGVuZ3RoMiwgaW50IHN0YXJ0LAorCSAgICAgaW50IHJhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLCAgaW50IHN0b3ApCit7CisgIHJldHVybiByZV9zZWFyY2hfMl9zdHViIChidWZwLCBzdHJpbmcxLCBsZW5ndGgxLCBzdHJpbmcyLCBsZW5ndGgyLAorCQkJICAgc3RhcnQsIHJhbmdlLCByZWdzLCBzdG9wLCAwKTsKK30KKyNpZmRlZiBfTElCQword2Vha19hbGlhcyAoX19yZV9zZWFyY2hfMiwgcmVfc2VhcmNoXzIpCisjZW5kaWYKKworc3RhdGljIGludAorcmVfc2VhcmNoXzJfc3R1YiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCQkgIGNvbnN0IGNoYXIgKnN0cmluZzEsIGludCBsZW5ndGgxLAorCQkgIGNvbnN0IGNoYXIgKnN0cmluZzIsIGludCBsZW5ndGgyLCBpbnQgc3RhcnQsCisJCSAgaW50IHJhbmdlLCBzdHJ1Y3QgcmVfcmVnaXN0ZXJzICpyZWdzLAorCQkgIGludCBzdG9wLCBpbnQgcmV0X2xlbikKK3sKKyAgY29uc3QgY2hhciAqc3RyOworICBpbnQgcnZhbDsKKyAgaW50IGxlbiA9IGxlbmd0aDEgKyBsZW5ndGgyOworICBpbnQgZnJlZV9zdHIgPSAwOworCisgIGlmIChCRSAobGVuZ3RoMSA8IDAgfHwgbGVuZ3RoMiA8IDAgfHwgc3RvcCA8IDAsIDApKQorICAgIHJldHVybiAtMjsKKworICAvKiBDb25jYXRlbmF0ZSB0aGUgc3RyaW5ncy4gICovCisgIGlmIChsZW5ndGgyID4gMCkKKyAgICBpZiAobGVuZ3RoMSA+IDApCisgICAgICB7CisJY2hhciAqcyA9IHJlX21hbGxvYyAoY2hhciwgbGVuKTsKKworCWlmIChCRSAocyA9PSBOVUxMLCAwKSkKKwkgIHJldHVybiAtMjsKKwltZW1jcHkgKHMsIHN0cmluZzEsIGxlbmd0aDEpOworCW1lbWNweSAocyArIGxlbmd0aDEsIHN0cmluZzIsIGxlbmd0aDIpOworCXN0ciA9IHM7CisJZnJlZV9zdHIgPSAxOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHN0ciA9IHN0cmluZzI7CisgIGVsc2UKKyAgICBzdHIgPSBzdHJpbmcxOworCisgIHJ2YWwgPSByZV9zZWFyY2hfc3R1YiAoYnVmcCwgc3RyLCBsZW4sIHN0YXJ0LCByYW5nZSwgc3RvcCwgcmVncywgcmV0X2xlbik7CisgIGlmIChmcmVlX3N0cikKKyAgICByZV9mcmVlICgoY2hhciAqKSBzdHIpOworICByZXR1cm4gcnZhbDsKK30KKworLyogVGhlIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIHRob3NlIG9mIHJlX3NlYXJjaC4KKyAgIEFkZGl0aW9uYWwgcGFyYW1ldGVyczoKKyAgIElmIFJFVF9MRU4gaXMgbm9uemVybyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaCBpcyByZXR1cm5lZCAocmVfbWF0Y2ggc3R5bGUpOworICAgb3RoZXJ3aXNlIHRoZSBwb3NpdGlvbiBvZiB0aGUgbWF0Y2ggaXMgcmV0dXJuZWQuICAqLworCitzdGF0aWMgaW50CityZV9zZWFyY2hfc3R1YiAoc3RydWN0IHJlX3BhdHRlcm5fYnVmZmVyICpidWZwLAorCQljb25zdCBjaGFyICpzdHJpbmcsIGludCBsZW5ndGgsIGludCBzdGFydCwKKwkJaW50IHJhbmdlLCBpbnQgc3RvcCwKKwkJc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywgaW50IHJldF9sZW4pCit7CisgIHJlZ19lcnJjb2RlX3QgcmVzdWx0OworICByZWdtYXRjaF90ICpwbWF0Y2g7CisgIGludCBucmVncywgcnZhbDsKKyAgaW50IGVmbGFncyA9IDA7CisKKyAgLyogQ2hlY2sgZm9yIG91dC1vZi1yYW5nZS4gICovCisgIGlmIChCRSAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gbGVuZ3RoLCAwKSkKKyAgICByZXR1cm4gLTE7CisgIGlmIChCRSAoc3RhcnQgKyByYW5nZSA+IGxlbmd0aCwgMCkpCisgICAgcmFuZ2UgPSBsZW5ndGggLSBzdGFydDsKKyAgZWxzZSBpZiAoQkUgKHN0YXJ0ICsgcmFuZ2UgPCAwLCAwKSkKKyAgICByYW5nZSA9IC1zdGFydDsKKworICBfX2xpYmNfbG9ja19sb2NrIChkZmEtPmxvY2spOworCisgIGVmbGFncyB8PSAoYnVmcC0+bm90X2JvbCkgPyBSRUdfTk9UQk9MIDogMDsKKyAgZWZsYWdzIHw9IChidWZwLT5ub3RfZW9sKSA/IFJFR19OT1RFT0wgOiAwOworCisgIC8qIENvbXBpbGUgZmFzdG1hcCBpZiB3ZSBoYXZlbid0IHlldC4gICovCisgIGlmIChyYW5nZSA+IDAgJiYgYnVmcC0+ZmFzdG1hcCAhPSBOVUxMICYmICFidWZwLT5mYXN0bWFwX2FjY3VyYXRlKQorICAgIHJlX2NvbXBpbGVfZmFzdG1hcCAoYnVmcCk7CisKKyAgaWYgKEJFIChidWZwLT5ub19zdWIsIDApKQorICAgIHJlZ3MgPSBOVUxMOworCisgIC8qIFdlIG5lZWQgYXQgbGVhc3QgMSByZWdpc3Rlci4gICovCisgIGlmIChyZWdzID09IE5VTEwpCisgICAgbnJlZ3MgPSAxOworICBlbHNlIGlmIChCRSAoYnVmcC0+cmVnc19hbGxvY2F0ZWQgPT0gUkVHU19GSVhFRCAmJgorCSAgICAgICByZWdzLT5udW1fcmVncyA8IGJ1ZnAtPnJlX25zdWIgKyAxLCAwKSkKKyAgICB7CisgICAgICBucmVncyA9IHJlZ3MtPm51bV9yZWdzOworICAgICAgaWYgKEJFIChucmVncyA8IDEsIDApKQorCXsKKwkgIC8qIE5vdGhpbmcgY2FuIGJlIGNvcGllZCB0byByZWdzLiAgKi8KKwkgIHJlZ3MgPSBOVUxMOworCSAgbnJlZ3MgPSAxOworCX0KKyAgICB9CisgIGVsc2UKKyAgICBucmVncyA9IGJ1ZnAtPnJlX25zdWIgKyAxOworICBwbWF0Y2ggPSByZV9tYWxsb2MgKHJlZ21hdGNoX3QsIG5yZWdzKTsKKyAgaWYgKEJFIChwbWF0Y2ggPT0gTlVMTCwgMCkpCisgICAgeworICAgICAgcnZhbCA9IC0yOworICAgICAgZ290byBvdXQ7CisgICAgfQorCisgIHJlc3VsdCA9IHJlX3NlYXJjaF9pbnRlcm5hbCAoYnVmcCwgc3RyaW5nLCBsZW5ndGgsIHN0YXJ0LCByYW5nZSwgc3RvcCwKKwkJCSAgICAgICBucmVncywgcG1hdGNoLCBlZmxhZ3MpOworCisgIHJ2YWwgPSAwOworCisgIC8qIEkgaG9wZSB3ZSBuZWVkbid0IGZpbGwgdGhlaXIgcmVncyB3aXRoIC0xJ3Mgd2hlbiBubyBtYXRjaCB3YXMgZm91bmQuICAqLworICBpZiAocmVzdWx0ICE9IFJFR19OT0VSUk9SKQorICAgIHJ2YWwgPSAtMTsKKyAgZWxzZSBpZiAocmVncyAhPSBOVUxMKQorICAgIHsKKyAgICAgIC8qIElmIGNhbGxlciB3YW50cyByZWdpc3RlciBjb250ZW50cyBkYXRhIGJhY2ssIGNvcHkgdGhlbS4gICovCisgICAgICBidWZwLT5yZWdzX2FsbG9jYXRlZCA9IHJlX2NvcHlfcmVncyAocmVncywgcG1hdGNoLCBucmVncywKKwkJCQkJICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQpOworICAgICAgaWYgKEJFIChidWZwLT5yZWdzX2FsbG9jYXRlZCA9PSBSRUdTX1VOQUxMT0NBVEVELCAwKSkKKwlydmFsID0gLTI7CisgICAgfQorCisgIGlmIChCRSAocnZhbCA9PSAwLCAxKSkKKyAgICB7CisgICAgICBpZiAocmV0X2xlbikKKwl7CisJICBhc3NlcnQgKHBtYXRjaFswXS5ybV9zbyA9PSBzdGFydCk7CisJICBydmFsID0gcG1hdGNoWzBdLnJtX2VvIC0gc3RhcnQ7CisJfQorICAgICAgZWxzZQorCXJ2YWwgPSBwbWF0Y2hbMF0ucm1fc287CisgICAgfQorICByZV9mcmVlIChwbWF0Y2gpOworIG91dDoKKyAgX19saWJjX2xvY2tfdW5sb2NrIChkZmEtPmxvY2spOworICByZXR1cm4gcnZhbDsKK30KKworc3RhdGljIHVuc2lnbmVkCityZV9jb3B5X3JlZ3MgKHN0cnVjdCByZV9yZWdpc3RlcnMgKnJlZ3MsCisJICAgICAgcmVnbWF0Y2hfdCAqcG1hdGNoLAorCSAgICAgIGludCBucmVncywgaW50IHJlZ3NfYWxsb2NhdGVkKQoreworICBpbnQgcnZhbCA9IFJFR1NfUkVBTExPQ0FURTsKKyAgaW50IGk7CisgIGludCBuZWVkX3JlZ3MgPSBucmVncyArIDE7CisgIC8qIFdlIG5lZWQgb25lIGV4dHJhIGVsZW1lbnQgYmV5b25kIGBudW1fcmVncycgZm9yIHRoZSBgLTEnIG1hcmtlciBHTlUgY29kZQorICAgICB1c2VzLiAgKi8KKworICAvKiBIYXZlIHRoZSByZWdpc3RlciBkYXRhIGFycmF5cyBiZWVuIGFsbG9jYXRlZD8gICovCisgIGlmIChyZWdzX2FsbG9jYXRlZCA9PSBSRUdTX1VOQUxMT0NBVEVEKQorICAgIHsgLyogTm8uICBTbyBhbGxvY2F0ZSB0aGVtIHdpdGggbWFsbG9jLiAgKi8KKyAgICAgIHJlZ3MtPnN0YXJ0ID0gcmVfbWFsbG9jIChyZWdvZmZfdCwgbmVlZF9yZWdzKTsKKyAgICAgIGlmIChCRSAocmVncy0+c3RhcnQgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR1NfVU5BTExPQ0FURUQ7CisgICAgICByZWdzLT5lbmQgPSByZV9tYWxsb2MgKHJlZ29mZl90LCBuZWVkX3JlZ3MpOworICAgICAgaWYgKEJFIChyZWdzLT5lbmQgPT0gTlVMTCwgMCkpCisJeworCSAgcmVfZnJlZSAocmVncy0+c3RhcnQpOworCSAgcmV0dXJuIFJFR1NfVU5BTExPQ0FURUQ7CisJfQorICAgICAgcmVncy0+bnVtX3JlZ3MgPSBuZWVkX3JlZ3M7CisgICAgfQorICBlbHNlIGlmIChyZWdzX2FsbG9jYXRlZCA9PSBSRUdTX1JFQUxMT0NBVEUpCisgICAgeyAvKiBZZXMuICBJZiB3ZSBuZWVkIG1vcmUgZWxlbWVudHMgdGhhbiB3ZXJlIGFscmVhZHkKKwkgYWxsb2NhdGVkLCByZWFsbG9jYXRlIHRoZW0uICBJZiB3ZSBuZWVkIGZld2VyLCBqdXN0CisJIGxlYXZlIGl0IGFsb25lLiAgKi8KKyAgICAgIGlmIChCRSAobmVlZF9yZWdzID4gcmVncy0+bnVtX3JlZ3MsIDApKQorCXsKKwkgIHJlZ29mZl90ICpuZXdfc3RhcnQgPSByZV9yZWFsbG9jIChyZWdzLT5zdGFydCwgcmVnb2ZmX3QsIG5lZWRfcmVncyk7CisJICByZWdvZmZfdCAqbmV3X2VuZDsKKwkgIGlmIChCRSAobmV3X3N0YXJ0ID09IE5VTEwsIDApKQorCSAgICByZXR1cm4gUkVHU19VTkFMTE9DQVRFRDsKKwkgIG5ld19lbmQgPSByZV9yZWFsbG9jIChyZWdzLT5lbmQsIHJlZ29mZl90LCBuZWVkX3JlZ3MpOworCSAgaWYgKEJFIChuZXdfZW5kID09IE5VTEwsIDApKQorCSAgICB7CisJICAgICAgcmVfZnJlZSAobmV3X3N0YXJ0KTsKKwkgICAgICByZXR1cm4gUkVHU19VTkFMTE9DQVRFRDsKKwkgICAgfQorCSAgcmVncy0+c3RhcnQgPSBuZXdfc3RhcnQ7CisJICByZWdzLT5lbmQgPSBuZXdfZW5kOworCSAgcmVncy0+bnVtX3JlZ3MgPSBuZWVkX3JlZ3M7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGFzc2VydCAocmVnc19hbGxvY2F0ZWQgPT0gUkVHU19GSVhFRCk7CisgICAgICAvKiBUaGlzIGZ1bmN0aW9uIG1heSBub3QgYmUgY2FsbGVkIHdpdGggUkVHU19GSVhFRCBhbmQgbnJlZ3MgdG9vIGJpZy4gICovCisgICAgICBhc3NlcnQgKHJlZ3MtPm51bV9yZWdzID49IG5yZWdzKTsKKyAgICAgIHJ2YWwgPSBSRUdTX0ZJWEVEOworICAgIH0KKworICAvKiBDb3B5IHRoZSByZWdzLiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IG5yZWdzOyArK2kpCisgICAgeworICAgICAgcmVncy0+c3RhcnRbaV0gPSBwbWF0Y2hbaV0ucm1fc287CisgICAgICByZWdzLT5lbmRbaV0gPSBwbWF0Y2hbaV0ucm1fZW87CisgICAgfQorICBmb3IgKCA7IGkgPCByZWdzLT5udW1fcmVnczsgKytpKQorICAgIHJlZ3MtPnN0YXJ0W2ldID0gcmVncy0+ZW5kW2ldID0gLTE7CisKKyAgcmV0dXJuIHJ2YWw7Cit9CisKKy8qIFNldCBSRUdTIHRvIGhvbGQgTlVNX1JFR1MgcmVnaXN0ZXJzLCBzdG9yaW5nIHRoZW0gaW4gU1RBUlRTIGFuZAorICAgRU5EUy4gIFN1YnNlcXVlbnQgbWF0Y2hlcyB1c2luZyBQQVRURVJOX0JVRkZFUiBhbmQgUkVHUyB3aWxsIHVzZQorICAgdGhpcyBtZW1vcnkgZm9yIHJlY29yZGluZyByZWdpc3RlciBpbmZvcm1hdGlvbi4gIFNUQVJUUyBhbmQgRU5EUworICAgbXVzdCBiZSBhbGxvY2F0ZWQgdXNpbmcgdGhlIG1hbGxvYyBsaWJyYXJ5IHJvdXRpbmUsIGFuZCBtdXN0IGVhY2gKKyAgIGJlIGF0IGxlYXN0IE5VTV9SRUdTICogc2l6ZW9mIChyZWdvZmZfdCkgYnl0ZXMgbG9uZy4KKworICAgSWYgTlVNX1JFR1MgPT0gMCwgdGhlbiBzdWJzZXF1ZW50IG1hdGNoZXMgc2hvdWxkIGFsbG9jYXRlIHRoZWlyIG93bgorICAgcmVnaXN0ZXIgZGF0YS4KKworICAgVW5sZXNzIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgZmlyc3Qgc2VhcmNoIG9yIG1hdGNoIHVzaW5nCisgICBQQVRURVJOX0JVRkZFUiB3aWxsIGFsbG9jYXRlIGl0cyBvd24gcmVnaXN0ZXIgZGF0YSwgd2l0aG91dAorICAgZnJlZWluZyB0aGUgb2xkIGRhdGEuICAqLworCit2b2lkCityZV9zZXRfcmVnaXN0ZXJzIChzdHJ1Y3QgcmVfcGF0dGVybl9idWZmZXIgKmJ1ZnAsCisJCSAgc3RydWN0IHJlX3JlZ2lzdGVycyAqcmVncywKKwkJICB1bnNpZ25lZCBudW1fcmVncywKKwkJICByZWdvZmZfdCAqc3RhcnRzLAorCQkgIHJlZ29mZl90ICplbmRzKQoreworICBpZiAobnVtX3JlZ3MpCisgICAgeworICAgICAgYnVmcC0+cmVnc19hbGxvY2F0ZWQgPSBSRUdTX1JFQUxMT0NBVEU7CisgICAgICByZWdzLT5udW1fcmVncyA9IG51bV9yZWdzOworICAgICAgcmVncy0+c3RhcnQgPSBzdGFydHM7CisgICAgICByZWdzLT5lbmQgPSBlbmRzOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGJ1ZnAtPnJlZ3NfYWxsb2NhdGVkID0gUkVHU19VTkFMTE9DQVRFRDsKKyAgICAgIHJlZ3MtPm51bV9yZWdzID0gMDsKKyAgICAgIHJlZ3MtPnN0YXJ0ID0gcmVncy0+ZW5kID0gKHJlZ29mZl90ICopIDA7CisgICAgfQorfQorI2lmZGVmIF9MSUJDCit3ZWFrX2FsaWFzIChfX3JlX3NldF9yZWdpc3RlcnMsIHJlX3NldF9yZWdpc3RlcnMpCisjZW5kaWYKKwwKKy8qIEVudHJ5IHBvaW50cyBjb21wYXRpYmxlIHdpdGggNC4yIEJTRCByZWdleCBsaWJyYXJ5LiAgV2UgZG9uJ3QgZGVmaW5lCisgICB0aGVtIHVubGVzcyBzcGVjaWZpY2FsbHkgcmVxdWVzdGVkLiAgKi8KKworI2lmIGRlZmluZWQgX1JFR0VYX1JFX0NPTVAgfHwgZGVmaW5lZCBfTElCQworaW50CisjIGlmZGVmIF9MSUJDCit3ZWFrX2Z1bmN0aW9uCisjIGVuZGlmCityZV9leGVjIChzKQorICAgICBjb25zdCBjaGFyICpzOworeworICByZXR1cm4gMCA9PSByZWdleGVjICgmcmVfY29tcF9idWYsIHMsIDAsIE5VTEwsIDApOworfQorI2VuZGlmIC8qIF9SRUdFWF9SRV9DT01QICovCisMCisvKiBJbnRlcm5hbCBlbnRyeSBwb2ludC4gICovCisKKy8qIFNlYXJjaGVzIGZvciBhIGNvbXBpbGVkIHBhdHRlcm4gUFJFRyBpbiB0aGUgc3RyaW5nIFNUUklORywgd2hvc2UKKyAgIGxlbmd0aCBpcyBMRU5HVEguICBOTUFUQ0gsIFBNQVRDSCwgYW5kIEVGTEFHUyBoYXZlIHRoZSBzYW1lCisgICBtaW5naW5ncyB3aXRoIHJlZ2V4ZWMuICBTVEFSVCwgYW5kIFJBTkdFIGhhdmUgdGhlIHNhbWUgbWVhbmluZ3MKKyAgIHdpdGggcmVfc2VhcmNoLgorICAgUmV0dXJuIFJFR19OT0VSUk9SIGlmIHdlIGZpbmQgYSBtYXRjaCwgYW5kIFJFR19OT01BVENIIGlmIG5vdCwKKyAgIG90aGVyd2lzZSByZXR1cm4gdGhlIGVycm9yIGNvZGUuCisgICBOb3RlOiBXZSBhc3N1bWUgZnJvbnQgZW5kIGZ1bmN0aW9ucyBhbHJlYWR5IGNoZWNrIHJhbmdlcy4KKyAgIChTVEFSVCArIFJBTkdFID49IDAgJiYgU1RBUlQgKyBSQU5HRSA8PSBMRU5HVEgpICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAorcmVfc2VhcmNoX2ludGVybmFsIChjb25zdCByZWdleF90ICpwcmVnLAorCQkgICAgY29uc3QgY2hhciAqc3RyaW5nLAorCQkgICAgaW50IGxlbmd0aCwgaW50IHN0YXJ0LCBpbnQgcmFuZ2UsIGludCBzdG9wLAorCQkgICAgc2l6ZV90IG5tYXRjaCwgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwKKwkJICAgIGludCBlZmxhZ3MpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBjb25zdCByZV9kZmFfdCAqZGZhID0gKGNvbnN0IHJlX2RmYV90ICopIHByZWctPmJ1ZmZlcjsKKyAgaW50IGxlZnRfbGltLCByaWdodF9saW0sIGluY3I7CisgIGludCBmbF9sb25nZXN0X21hdGNoLCBtYXRjaF9maXJzdCwgbWF0Y2hfa2luZCwgbWF0Y2hfbGFzdCA9IC0xOworICBpbnQgZXh0cmFfbm1hdGNoOworICBpbnQgc2IsIGNoOworI2lmIGRlZmluZWQgX0xJQkMgfHwgKGRlZmluZWQgX19TVERDX1ZFUlNJT05fXyAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisgIHJlX21hdGNoX2NvbnRleHRfdCBtY3R4ID0geyAuZGZhID0gZGZhIH07CisjZWxzZQorICByZV9tYXRjaF9jb250ZXh0X3QgbWN0eDsKKyNlbmRpZgorICBjaGFyICpmYXN0bWFwID0gKHByZWctPmZhc3RtYXAgIT0gTlVMTCAmJiBwcmVnLT5mYXN0bWFwX2FjY3VyYXRlCisJCSAgICYmIHJhbmdlICYmICFwcmVnLT5jYW5fYmVfbnVsbCkgPyBwcmVnLT5mYXN0bWFwIDogTlVMTDsKKyAgUkVfVFJBTlNMQVRFX1RZUEUgdCA9IHByZWctPnRyYW5zbGF0ZTsKKworI2lmICEoZGVmaW5lZCBfTElCQyB8fCAoZGVmaW5lZCBfX1NURENfVkVSU0lPTl9fICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkpCisgIG1lbXNldCAoJm1jdHgsICdcMCcsIHNpemVvZiAocmVfbWF0Y2hfY29udGV4dF90KSk7CisgIG1jdHguZGZhID0gZGZhOworI2VuZGlmCisKKyAgZXh0cmFfbm1hdGNoID0gKG5tYXRjaCA+IHByZWctPnJlX25zdWIpID8gbm1hdGNoIC0gKHByZWctPnJlX25zdWIgKyAxKSA6IDA7CisgIG5tYXRjaCAtPSBleHRyYV9ubWF0Y2g7CisKKyAgLyogQ2hlY2sgaWYgdGhlIERGQSBoYXZlbid0IGJlZW4gY29tcGlsZWQuICAqLworICBpZiAoQkUgKHByZWctPnVzZWQgPT0gMCB8fCBkZmEtPmluaXRfc3RhdGUgPT0gTlVMTAorCSAgfHwgZGZhLT5pbml0X3N0YXRlX3dvcmQgPT0gTlVMTCB8fCBkZmEtPmluaXRfc3RhdGVfbmwgPT0gTlVMTAorCSAgfHwgZGZhLT5pbml0X3N0YXRlX2JlZ2J1ZiA9PSBOVUxMLCAwKSkKKyAgICByZXR1cm4gUkVHX05PTUFUQ0g7CisKKyNpZmRlZiBERUJVRworICAvKiBXZSBhc3N1bWUgZnJvbnQtZW5kIGZ1bmN0aW9ucyBhbHJlYWR5IGNoZWNrIHRoZW0uICAqLworICBhc3NlcnQgKHN0YXJ0ICsgcmFuZ2UgPj0gMCAmJiBzdGFydCArIHJhbmdlIDw9IGxlbmd0aCk7CisjZW5kaWYKKworICAvKiBJZiBpbml0aWFsIHN0YXRlcyB3aXRoIG5vbi1iZWdidWYgY29udGV4dHMgaGF2ZSBubyBlbGVtZW50cywKKyAgICAgdGhlIHJlZ2V4IG11c3QgYmUgYW5jaG9yZWQuICBJZiBwcmVnLT5uZXdsaW5lX2FuY2hvciBpcyBzZXQsCisgICAgIHdlJ2xsIG5ldmVyIHVzZSBpbml0X3N0YXRlX25sLCBzbyBkbyBub3QgY2hlY2sgaXQuICAqLworICBpZiAoZGZhLT5pbml0X3N0YXRlLT5ub2Rlcy5uZWxlbSA9PSAwCisgICAgICAmJiBkZmEtPmluaXRfc3RhdGVfd29yZC0+bm9kZXMubmVsZW0gPT0gMAorICAgICAgJiYgKGRmYS0+aW5pdF9zdGF0ZV9ubC0+bm9kZXMubmVsZW0gPT0gMAorCSAgfHwgIXByZWctPm5ld2xpbmVfYW5jaG9yKSkKKyAgICB7CisgICAgICBpZiAoc3RhcnQgIT0gMCAmJiBzdGFydCArIHJhbmdlICE9IDApCisJcmV0dXJuIFJFR19OT01BVENIOworICAgICAgc3RhcnQgPSByYW5nZSA9IDA7CisgICAgfQorCisgIC8qIFdlIG11c3QgY2hlY2sgdGhlIGxvbmdlc3QgbWF0Y2hpbmcsIGlmIG5tYXRjaCA+IDAuICAqLworICBmbF9sb25nZXN0X21hdGNoID0gKG5tYXRjaCAhPSAwIHx8IGRmYS0+bmJhY2tyZWYpOworCisgIGVyciA9IHJlX3N0cmluZ19hbGxvY2F0ZSAoJm1jdHguaW5wdXQsIHN0cmluZywgbGVuZ3RoLCBkZmEtPm5vZGVzX2xlbiArIDEsCisJCQkgICAgcHJlZy0+dHJhbnNsYXRlLCBwcmVnLT5zeW50YXggJiBSRV9JQ0FTRSwgZGZhKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIGdvdG8gZnJlZV9yZXR1cm47CisgIG1jdHguaW5wdXQuc3RvcCA9IHN0b3A7CisgIG1jdHguaW5wdXQucmF3X3N0b3AgPSBzdG9wOworICBtY3R4LmlucHV0Lm5ld2xpbmVfYW5jaG9yID0gcHJlZy0+bmV3bGluZV9hbmNob3I7CisKKyAgZXJyID0gbWF0Y2hfY3R4X2luaXQgKCZtY3R4LCBlZmxhZ3MsIGRmYS0+bmJhY2tyZWYgKiAyKTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIGdvdG8gZnJlZV9yZXR1cm47CisKKyAgLyogV2Ugd2lsbCBsb2cgYWxsIHRoZSBERkEgc3RhdGVzIHRocm91Z2ggd2hpY2ggdGhlIGRmYSBwYXNzLAorICAgICBpZiBubWF0Y2ggPiAxLCBvciB0aGlzIGRmYSBoYXMgIm11bHRpYnl0ZSBub2RlIiwgd2hpY2ggaXMgYQorICAgICBiYWNrLXJlZmVyZW5jZSBvciBhIG5vZGUgd2hpY2ggY2FuIGFjY2VwdCBtdWx0aWJ5dGUgY2hhcmFjdGVyIG9yCisgICAgIG11bHRpIGNoYXJhY3RlciBjb2xsYXRpbmcgZWxlbWVudC4gICovCisgIGlmIChubWF0Y2ggPiAxIHx8IGRmYS0+aGFzX21iX25vZGUpCisgICAgeworICAgICAgLyogQXZvaWQgb3ZlcmZsb3cuICAqLworICAgICAgaWYgKEJFIChTSVpFX01BWCAvIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSA8PSBtY3R4LmlucHV0LmJ1ZnNfbGVuLCAwKSkKKwl7CisJICBlcnIgPSBSRUdfRVNQQUNFOworCSAgZ290byBmcmVlX3JldHVybjsKKwl9CisKKyAgICAgIG1jdHguc3RhdGVfbG9nID0gcmVfbWFsbG9jIChyZV9kZmFzdGF0ZV90ICosIG1jdHguaW5wdXQuYnVmc19sZW4gKyAxKTsKKyAgICAgIGlmIChCRSAobWN0eC5zdGF0ZV9sb2cgPT0gTlVMTCwgMCkpCisJeworCSAgZXJyID0gUkVHX0VTUEFDRTsKKwkgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorICAgIH0KKyAgZWxzZQorICAgIG1jdHguc3RhdGVfbG9nID0gTlVMTDsKKworICBtYXRjaF9maXJzdCA9IHN0YXJ0OworICBtY3R4LmlucHV0LnRpcF9jb250ZXh0ID0gKGVmbGFncyAmIFJFR19OT1RCT0wpID8gQ09OVEVYVF9CRUdCVUYKKwkJCSAgIDogQ09OVEVYVF9ORVdMSU5FIHwgQ09OVEVYVF9CRUdCVUY7CisKKyAgLyogQ2hlY2sgaW5jcmVtZW50YWxseSB3aGV0aGVyIG9mIG5vdCB0aGUgaW5wdXQgc3RyaW5nIG1hdGNoLiAgKi8KKyAgaW5jciA9IChyYW5nZSA8IDApID8gLTEgOiAxOworICBsZWZ0X2xpbSA9IChyYW5nZSA8IDApID8gc3RhcnQgKyByYW5nZSA6IHN0YXJ0OworICByaWdodF9saW0gPSAocmFuZ2UgPCAwKSA/IHN0YXJ0IDogc3RhcnQgKyByYW5nZTsKKyAgc2IgPSBkZmEtPm1iX2N1cl9tYXggPT0gMTsKKyAgbWF0Y2hfa2luZCA9CisgICAgKGZhc3RtYXAKKyAgICAgPyAoKHNiIHx8ICEocHJlZy0+c3ludGF4ICYgUkVfSUNBU0UgfHwgdCkgPyA0IDogMCkKKwl8IChyYW5nZSA+PSAwID8gMiA6IDApCisJfCAodCAhPSBOVUxMID8gMSA6IDApKQorICAgICA6IDgpOworCisgIGZvciAoOzsgbWF0Y2hfZmlyc3QgKz0gaW5jcikKKyAgICB7CisgICAgICBlcnIgPSBSRUdfTk9NQVRDSDsKKyAgICAgIGlmIChtYXRjaF9maXJzdCA8IGxlZnRfbGltIHx8IHJpZ2h0X2xpbSA8IG1hdGNoX2ZpcnN0KQorCWdvdG8gZnJlZV9yZXR1cm47CisKKyAgICAgIC8qIEFkdmFuY2UgYXMgcmFwaWRseSBhcyBwb3NzaWJsZSB0aHJvdWdoIHRoZSBzdHJpbmcsIHVudGlsIHdlCisJIGZpbmQgYSBwbGF1c2libGUgcGxhY2UgdG8gc3RhcnQgbWF0Y2hpbmcuICBUaGlzIG1heSBiZSBkb25lCisJIHdpdGggdmFyeWluZyBlZmZpY2llbmN5LCBzbyB0aGVyZSBhcmUgdmFyaW91cyBwb3NzaWJpbGl0aWVzOgorCSBvbmx5IHRoZSBtb3N0IGNvbW1vbiBvZiB0aGVtIGFyZSBzcGVjaWFsaXplZCwgaW4gb3JkZXIgdG8KKwkgc2F2ZSBvbiBjb2RlIHNpemUuICBXZSB1c2UgYSBzd2l0Y2ggc3RhdGVtZW50IGZvciBzcGVlZC4gICovCisgICAgICBzd2l0Y2ggKG1hdGNoX2tpbmQpCisJeworCWNhc2UgODoKKwkgIC8qIE5vIGZhc3RtYXAuICAqLworCSAgYnJlYWs7CisKKwljYXNlIDc6CisJICAvKiBGYXN0bWFwIHdpdGggc2luZ2xlLWJ5dGUgdHJhbnNsYXRpb24sIG1hdGNoIGZvcndhcmQuICAqLworCSAgd2hpbGUgKEJFIChtYXRjaF9maXJzdCA8IHJpZ2h0X2xpbSwgMSkKKwkJICYmICFmYXN0bWFwW3RbKHVuc2lnbmVkIGNoYXIpIHN0cmluZ1ttYXRjaF9maXJzdF1dXSkKKwkgICAgKyttYXRjaF9maXJzdDsKKwkgIGdvdG8gZm9yd2FyZF9tYXRjaF9mb3VuZF9zdGFydF9vcl9yZWFjaGVkX2VuZDsKKworCWNhc2UgNjoKKwkgIC8qIEZhc3RtYXAgd2l0aG91dCB0cmFuc2xhdGlvbiwgbWF0Y2ggZm9yd2FyZC4gICovCisJICB3aGlsZSAoQkUgKG1hdGNoX2ZpcnN0IDwgcmlnaHRfbGltLCAxKQorCQkgJiYgIWZhc3RtYXBbKHVuc2lnbmVkIGNoYXIpIHN0cmluZ1ttYXRjaF9maXJzdF1dKQorCSAgICArK21hdGNoX2ZpcnN0OworCisJZm9yd2FyZF9tYXRjaF9mb3VuZF9zdGFydF9vcl9yZWFjaGVkX2VuZDoKKwkgIGlmIChCRSAobWF0Y2hfZmlyc3QgPT0gcmlnaHRfbGltLCAwKSkKKwkgICAgeworCSAgICAgIGNoID0gbWF0Y2hfZmlyc3QgPj0gbGVuZ3RoCisJCSAgICAgICA/IDAgOiAodW5zaWduZWQgY2hhcikgc3RyaW5nW21hdGNoX2ZpcnN0XTsKKwkgICAgICBpZiAoIWZhc3RtYXBbdCA/IHRbY2hdIDogY2hdKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICBicmVhazsKKworCWNhc2UgNDoKKwljYXNlIDU6CisJICAvKiBGYXN0bWFwIHdpdGhvdXQgbXVsdGktYnl0ZSB0cmFuc2xhdGlvbiwgbWF0Y2ggYmFja3dhcmRzLiAgKi8KKwkgIHdoaWxlIChtYXRjaF9maXJzdCA+PSBsZWZ0X2xpbSkKKwkgICAgeworCSAgICAgIGNoID0gbWF0Y2hfZmlyc3QgPj0gbGVuZ3RoCisJCSAgICAgICA/IDAgOiAodW5zaWduZWQgY2hhcikgc3RyaW5nW21hdGNoX2ZpcnN0XTsKKwkgICAgICBpZiAoZmFzdG1hcFt0ID8gdFtjaF0gOiBjaF0pCisJCWJyZWFrOworCSAgICAgIC0tbWF0Y2hfZmlyc3Q7CisJICAgIH0KKwkgIGlmIChtYXRjaF9maXJzdCA8IGxlZnRfbGltKQorCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgLyogSW4gdGhpcyBjYXNlLCB3ZSBjYW4ndCBkZXRlcm1pbmUgZWFzaWx5IHRoZSBjdXJyZW50IGJ5dGUsCisJICAgICBzaW5jZSBpdCBtaWdodCBiZSBhIGNvbXBvbmVudCBieXRlIG9mIGEgbXVsdGlieXRlCisJICAgICBjaGFyYWN0ZXIuICBUaGVuIHdlIHVzZSB0aGUgY29uc3RydWN0ZWQgYnVmZmVyIGluc3RlYWQuICAqLworCSAgZm9yICg7OykKKwkgICAgeworCSAgICAgIC8qIElmIE1BVENIX0ZJUlNUIGlzIG91dCBvZiB0aGUgdmFsaWQgcmFuZ2UsIHJlY29uc3RydWN0IHRoZQorCQkgYnVmZmVycy4gICovCisJICAgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IG1hdGNoX2ZpcnN0IC0gbWN0eC5pbnB1dC5yYXdfbWJzX2lkeDsKKwkgICAgICBpZiAoQkUgKG9mZnNldCA+PSAodW5zaWduZWQgaW50KSBtY3R4LmlucHV0LnZhbGlkX3Jhd19sZW4sIDApKQorCQl7CisJCSAgZXJyID0gcmVfc3RyaW5nX3JlY29uc3RydWN0ICgmbWN0eC5pbnB1dCwgbWF0Y2hfZmlyc3QsCisJCQkJCSAgICAgICBlZmxhZ3MpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIGdvdG8gZnJlZV9yZXR1cm47CisKKwkJICBvZmZzZXQgPSBtYXRjaF9maXJzdCAtIG1jdHguaW5wdXQucmF3X21ic19pZHg7CisJCX0KKwkgICAgICAvKiBJZiBNQVRDSF9GSVJTVCBpcyBvdXQgb2YgdGhlIGJ1ZmZlciwgbGVhdmUgaXQgYXMgJ1wwJy4KKwkJIE5vdGUgdGhhdCBNQVRDSF9GSVJTVCBtdXN0IG5vdCBiZSBzbWFsbGVyIHRoYW4gMC4gICovCisJICAgICAgY2ggPSAobWF0Y2hfZmlyc3QgPj0gbGVuZ3RoCisJCSAgICA/IDAgOiByZV9zdHJpbmdfYnl0ZV9hdCAoJm1jdHguaW5wdXQsIG9mZnNldCkpOworCSAgICAgIGlmIChmYXN0bWFwW2NoXSkKKwkJYnJlYWs7CisJICAgICAgbWF0Y2hfZmlyc3QgKz0gaW5jcjsKKwkgICAgICBpZiAobWF0Y2hfZmlyc3QgPCBsZWZ0X2xpbSB8fCBtYXRjaF9maXJzdCA+IHJpZ2h0X2xpbSkKKwkJeworCQkgIGVyciA9IFJFR19OT01BVENIOworCQkgIGdvdG8gZnJlZV9yZXR1cm47CisJCX0KKwkgICAgfQorCSAgYnJlYWs7CisJfQorCisgICAgICAvKiBSZWNvbnN0cnVjdCB0aGUgYnVmZmVycyBzbyB0aGF0IHRoZSBtYXRjaGVyIGNhbiBhc3N1bWUgdGhhdAorCSB0aGUgbWF0Y2hpbmcgc3RhcnRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLiAgKi8KKyAgICAgIGVyciA9IHJlX3N0cmluZ19yZWNvbnN0cnVjdCAoJm1jdHguaW5wdXQsIG1hdGNoX2ZpcnN0LCBlZmxhZ3MpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCWdvdG8gZnJlZV9yZXR1cm47CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAvKiBEb24ndCBjb25zaWRlciB0aGlzIGNoYXIgYXMgYSBwb3NzaWJsZSBtYXRjaCBzdGFydCBpZiBpdCBwYXJ0LAorCXlldCBpc24ndCB0aGUgaGVhZCwgb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAgKi8KKyAgICAgIGlmICghc2IgJiYgIXJlX3N0cmluZ19maXJzdF9ieXRlICgmbWN0eC5pbnB1dCwgMCkpCisJY29udGludWU7CisjZW5kaWYKKworICAgICAgLyogSXQgc2VlbXMgdG8gYmUgYXBwcm9wcmlhdGUgb25lLCB0aGVuIHVzZSB0aGUgbWF0Y2hlci4gICovCisgICAgICAvKiBXZSBhc3N1bWUgdGhhdCB0aGUgbWF0Y2hpbmcgc3RhcnRzIGZyb20gMC4gICovCisgICAgICBtY3R4LnN0YXRlX2xvZ190b3AgPSBtY3R4Lm5ia3JlZl9lbnRzID0gbWN0eC5tYXhfbWJfZWxlbV9sZW4gPSAwOworICAgICAgbWF0Y2hfbGFzdCA9IGNoZWNrX21hdGNoaW5nICgmbWN0eCwgZmxfbG9uZ2VzdF9tYXRjaCwKKwkJCQkgICByYW5nZSA+PSAwID8gJm1hdGNoX2ZpcnN0IDogTlVMTCk7CisgICAgICBpZiAobWF0Y2hfbGFzdCAhPSAtMSkKKwl7CisJICBpZiAoQkUgKG1hdGNoX2xhc3QgPT0gLTIsIDApKQorCSAgICB7CisJICAgICAgZXJyID0gUkVHX0VTUEFDRTsKKwkgICAgICBnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBtY3R4Lm1hdGNoX2xhc3QgPSBtYXRjaF9sYXN0OworCSAgICAgIGlmICgoIXByZWctPm5vX3N1YiAmJiBubWF0Y2ggPiAxKSB8fCBkZmEtPm5iYWNrcmVmKQorCQl7CisJCSAgcmVfZGZhc3RhdGVfdCAqcHN0YXRlID0gbWN0eC5zdGF0ZV9sb2dbbWF0Y2hfbGFzdF07CisJCSAgbWN0eC5sYXN0X25vZGUgPSBjaGVja19oYWx0X3N0YXRlX2NvbnRleHQgKCZtY3R4LCBwc3RhdGUsCisJCQkJCQkJICAgICBtYXRjaF9sYXN0KTsKKwkJfQorCSAgICAgIGlmICgoIXByZWctPm5vX3N1YiAmJiBubWF0Y2ggPiAxICYmIGRmYS0+aGFzX3BsdXJhbF9tYXRjaCkKKwkJICB8fCBkZmEtPm5iYWNrcmVmKQorCQl7CisJCSAgZXJyID0gcHJ1bmVfaW1wb3NzaWJsZV9ub2RlcyAoJm1jdHgpOworCQkgIGlmIChlcnIgPT0gUkVHX05PRVJST1IpCisJCSAgICBicmVhazsKKwkJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9NQVRDSCwgMCkpCisJCSAgICBnb3RvIGZyZWVfcmV0dXJuOworCQkgIG1hdGNoX2xhc3QgPSAtMTsKKwkJfQorCSAgICAgIGVsc2UKKwkJYnJlYWs7IC8qIFdlIGZvdW5kIGEgbWF0Y2guICAqLworCSAgICB9CisJfQorCisgICAgICBtYXRjaF9jdHhfY2xlYW4gKCZtY3R4KTsKKyAgICB9CisKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKG1hdGNoX2xhc3QgIT0gLTEpOworICBhc3NlcnQgKGVyciA9PSBSRUdfTk9FUlJPUik7CisjZW5kaWYKKworICAvKiBTZXQgcG1hdGNoW10gaWYgd2UgbmVlZC4gICovCisgIGlmIChubWF0Y2ggPiAwKQorICAgIHsKKyAgICAgIGludCByZWdfaWR4OworCisgICAgICAvKiBJbml0aWFsaXplIHJlZ2lzdGVycy4gICovCisgICAgICBmb3IgKHJlZ19pZHggPSAxOyByZWdfaWR4IDwgbm1hdGNoOyArK3JlZ19pZHgpCisJcG1hdGNoW3JlZ19pZHhdLnJtX3NvID0gcG1hdGNoW3JlZ19pZHhdLnJtX2VvID0gLTE7CisKKyAgICAgIC8qIFNldCB0aGUgcG9pbnRzIHdoZXJlIG1hdGNoaW5nIHN0YXJ0L2VuZC4gICovCisgICAgICBwbWF0Y2hbMF0ucm1fc28gPSAwOworICAgICAgcG1hdGNoWzBdLnJtX2VvID0gbWN0eC5tYXRjaF9sYXN0OworCisgICAgICBpZiAoIXByZWctPm5vX3N1YiAmJiBubWF0Y2ggPiAxKQorCXsKKwkgIGVyciA9IHNldF9yZWdzIChwcmVnLCAmbWN0eCwgbm1hdGNoLCBwbWF0Y2gsCisJCQkgIGRmYS0+aGFzX3BsdXJhbF9tYXRjaCAmJiBkZmEtPm5iYWNrcmVmID4gMCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorCisgICAgICAvKiBBdCBsYXN0LCBhZGQgdGhlIG9mZnNldCB0byB0aGUgZWFjaCByZWdpc3RlcnMsIHNpbmNlIHdlIHNsaWRlZAorCSB0aGUgYnVmZmVycyBzbyB0aGF0IHdlIGNvdWxkIGFzc3VtZSB0aGF0IHRoZSBtYXRjaGluZyBzdGFydHMKKwkgZnJvbSAwLiAgKi8KKyAgICAgIGZvciAocmVnX2lkeCA9IDA7IHJlZ19pZHggPCBubWF0Y2g7ICsrcmVnX2lkeCkKKwlpZiAocG1hdGNoW3JlZ19pZHhdLnJtX3NvICE9IC0xKQorCSAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgIGlmIChCRSAobWN0eC5pbnB1dC5vZmZzZXRzX25lZWRlZCAhPSAwLCAwKSkKKwkgICAgICB7CisJCXBtYXRjaFtyZWdfaWR4XS5ybV9zbyA9CisJCSAgKHBtYXRjaFtyZWdfaWR4XS5ybV9zbyA9PSBtY3R4LmlucHV0LnZhbGlkX2xlbgorCQkgICA/IG1jdHguaW5wdXQudmFsaWRfcmF3X2xlbgorCQkgICA6IG1jdHguaW5wdXQub2Zmc2V0c1twbWF0Y2hbcmVnX2lkeF0ucm1fc29dKTsKKwkJcG1hdGNoW3JlZ19pZHhdLnJtX2VvID0KKwkJICAocG1hdGNoW3JlZ19pZHhdLnJtX2VvID09IG1jdHguaW5wdXQudmFsaWRfbGVuCisJCSAgID8gbWN0eC5pbnB1dC52YWxpZF9yYXdfbGVuCisJCSAgIDogbWN0eC5pbnB1dC5vZmZzZXRzW3BtYXRjaFtyZWdfaWR4XS5ybV9lb10pOworCSAgICAgIH0KKyNlbHNlCisJICAgIGFzc2VydCAobWN0eC5pbnB1dC5vZmZzZXRzX25lZWRlZCA9PSAwKTsKKyNlbmRpZgorCSAgICBwbWF0Y2hbcmVnX2lkeF0ucm1fc28gKz0gbWF0Y2hfZmlyc3Q7CisJICAgIHBtYXRjaFtyZWdfaWR4XS5ybV9lbyArPSBtYXRjaF9maXJzdDsKKwkgIH0KKyAgICAgIGZvciAocmVnX2lkeCA9IDA7IHJlZ19pZHggPCBleHRyYV9ubWF0Y2g7ICsrcmVnX2lkeCkKKwl7CisJICBwbWF0Y2hbbm1hdGNoICsgcmVnX2lkeF0ucm1fc28gPSAtMTsKKwkgIHBtYXRjaFtubWF0Y2ggKyByZWdfaWR4XS5ybV9lbyA9IC0xOworCX0KKworICAgICAgaWYgKGRmYS0+c3ViZXhwX21hcCkKKwlmb3IgKHJlZ19pZHggPSAwOyByZWdfaWR4ICsgMSA8IG5tYXRjaDsgcmVnX2lkeCsrKQorCSAgaWYgKGRmYS0+c3ViZXhwX21hcFtyZWdfaWR4XSAhPSByZWdfaWR4KQorCSAgICB7CisJICAgICAgcG1hdGNoW3JlZ19pZHggKyAxXS5ybV9zbworCQk9IHBtYXRjaFtkZmEtPnN1YmV4cF9tYXBbcmVnX2lkeF0gKyAxXS5ybV9zbzsKKwkgICAgICBwbWF0Y2hbcmVnX2lkeCArIDFdLnJtX2VvCisJCT0gcG1hdGNoW2RmYS0+c3ViZXhwX21hcFtyZWdfaWR4XSArIDFdLnJtX2VvOworCSAgICB9CisgICAgfQorCisgZnJlZV9yZXR1cm46CisgIHJlX2ZyZWUgKG1jdHguc3RhdGVfbG9nKTsKKyAgaWYgKGRmYS0+bmJhY2tyZWYpCisgICAgbWF0Y2hfY3R4X2ZyZWUgKCZtY3R4KTsKKyAgcmVfc3RyaW5nX2Rlc3RydWN0ICgmbWN0eC5pbnB1dCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitwcnVuZV9pbXBvc3NpYmxlX25vZGVzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCBoYWx0X25vZGUsIG1hdGNoX2xhc3Q7CisgIHJlZ19lcnJjb2RlX3QgcmV0OworICByZV9kZmFzdGF0ZV90ICoqc2lmdGVkX3N0YXRlczsKKyAgcmVfZGZhc3RhdGVfdCAqKmxpbV9zdGF0ZXMgPSBOVUxMOworICByZV9zaWZ0X2NvbnRleHRfdCBzY3R4OworI2lmZGVmIERFQlVHCisgIGFzc2VydCAobWN0eC0+c3RhdGVfbG9nICE9IE5VTEwpOworI2VuZGlmCisgIG1hdGNoX2xhc3QgPSBtY3R4LT5tYXRjaF9sYXN0OworICBoYWx0X25vZGUgPSBtY3R4LT5sYXN0X25vZGU7CisKKyAgLyogQXZvaWQgb3ZlcmZsb3cuICAqLworICBpZiAoQkUgKFNJWkVfTUFYIC8gc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopIDw9IG1hdGNoX2xhc3QsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworCisgIHNpZnRlZF9zdGF0ZXMgPSByZV9tYWxsb2MgKHJlX2RmYXN0YXRlX3QgKiwgbWF0Y2hfbGFzdCArIDEpOworICBpZiAoQkUgKHNpZnRlZF9zdGF0ZXMgPT0gTlVMTCwgMCkpCisgICAgeworICAgICAgcmV0ID0gUkVHX0VTUEFDRTsKKyAgICAgIGdvdG8gZnJlZV9yZXR1cm47CisgICAgfQorICBpZiAoZGZhLT5uYmFja3JlZikKKyAgICB7CisgICAgICBsaW1fc3RhdGVzID0gcmVfbWFsbG9jIChyZV9kZmFzdGF0ZV90ICosIG1hdGNoX2xhc3QgKyAxKTsKKyAgICAgIGlmIChCRSAobGltX3N0YXRlcyA9PSBOVUxMLCAwKSkKKwl7CisJICByZXQgPSBSRUdfRVNQQUNFOworCSAgZ290byBmcmVlX3JldHVybjsKKwl9CisgICAgICB3aGlsZSAoMSkKKwl7CisJICBtZW1zZXQgKGxpbV9zdGF0ZXMsICdcMCcsCisJCSAgc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopICogKG1hdGNoX2xhc3QgKyAxKSk7CisJICBzaWZ0X2N0eF9pbml0ICgmc2N0eCwgc2lmdGVkX3N0YXRlcywgbGltX3N0YXRlcywgaGFsdF9ub2RlLAorCQkJIG1hdGNoX2xhc3QpOworCSAgcmV0ID0gc2lmdF9zdGF0ZXNfYmFja3dhcmQgKG1jdHgsICZzY3R4KTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZzY3R4LmxpbWl0cyk7CisJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgICAgZ290byBmcmVlX3JldHVybjsKKwkgIGlmIChzaWZ0ZWRfc3RhdGVzWzBdICE9IE5VTEwgfHwgbGltX3N0YXRlc1swXSAhPSBOVUxMKQorCSAgICBicmVhazsKKwkgIGRvCisJICAgIHsKKwkgICAgICAtLW1hdGNoX2xhc3Q7CisJICAgICAgaWYgKG1hdGNoX2xhc3QgPCAwKQorCQl7CisJCSAgcmV0ID0gUkVHX05PTUFUQ0g7CisJCSAgZ290byBmcmVlX3JldHVybjsKKwkJfQorCSAgICB9IHdoaWxlIChtY3R4LT5zdGF0ZV9sb2dbbWF0Y2hfbGFzdF0gPT0gTlVMTAorCQkgICAgIHx8ICFtY3R4LT5zdGF0ZV9sb2dbbWF0Y2hfbGFzdF0tPmhhbHQpOworCSAgaGFsdF9ub2RlID0gY2hlY2tfaGFsdF9zdGF0ZV9jb250ZXh0IChtY3R4LAorCQkJCQkJbWN0eC0+c3RhdGVfbG9nW21hdGNoX2xhc3RdLAorCQkJCQkJbWF0Y2hfbGFzdCk7CisJfQorICAgICAgcmV0ID0gbWVyZ2Vfc3RhdGVfYXJyYXkgKGRmYSwgc2lmdGVkX3N0YXRlcywgbGltX3N0YXRlcywKKwkJCSAgICAgICBtYXRjaF9sYXN0ICsgMSk7CisgICAgICByZV9mcmVlIChsaW1fc3RhdGVzKTsKKyAgICAgIGxpbV9zdGF0ZXMgPSBOVUxMOworICAgICAgaWYgKEJFIChyZXQgIT0gUkVHX05PRVJST1IsIDApKQorCWdvdG8gZnJlZV9yZXR1cm47CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgc2lmdF9jdHhfaW5pdCAoJnNjdHgsIHNpZnRlZF9zdGF0ZXMsIGxpbV9zdGF0ZXMsIGhhbHRfbm9kZSwgbWF0Y2hfbGFzdCk7CisgICAgICByZXQgPSBzaWZ0X3N0YXRlc19iYWNrd2FyZCAobWN0eCwgJnNjdHgpOworICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJnNjdHgubGltaXRzKTsKKyAgICAgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIGZyZWVfcmV0dXJuOworICAgICAgaWYgKHNpZnRlZF9zdGF0ZXNbMF0gPT0gTlVMTCkKKwl7CisJICByZXQgPSBSRUdfTk9NQVRDSDsKKwkgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorICAgIH0KKyAgcmVfZnJlZSAobWN0eC0+c3RhdGVfbG9nKTsKKyAgbWN0eC0+c3RhdGVfbG9nID0gc2lmdGVkX3N0YXRlczsKKyAgc2lmdGVkX3N0YXRlcyA9IE5VTEw7CisgIG1jdHgtPmxhc3Rfbm9kZSA9IGhhbHRfbm9kZTsKKyAgbWN0eC0+bWF0Y2hfbGFzdCA9IG1hdGNoX2xhc3Q7CisgIHJldCA9IFJFR19OT0VSUk9SOworIGZyZWVfcmV0dXJuOgorICByZV9mcmVlIChzaWZ0ZWRfc3RhdGVzKTsKKyAgcmVfZnJlZSAobGltX3N0YXRlcyk7CisgIHJldHVybiByZXQ7Cit9CisKKy8qIEFjcXVpcmUgYW4gaW5pdGlhbCBzdGF0ZSBhbmQgcmV0dXJuIGl0LgorICAgV2UgbXVzdCBzZWxlY3QgYXBwcm9wcmlhdGUgaW5pdGlhbCBzdGF0ZSBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQsCisgICBzaW5jZSBpbml0aWFsIHN0YXRlcyBtYXkgaGF2ZSBjb25zdHJhaW50cyBsaWtlICJcPCIsICJeIiwgZXRjLi4gICovCisKK3N0YXRpYyBpbmxpbmUgcmVfZGZhc3RhdGVfdCAqCitfX2F0dHJpYnV0ZSAoKGFsd2F5c19pbmxpbmUpKSBpbnRlcm5hbF9mdW5jdGlvbgorYWNxdWlyZV9pbml0X3N0YXRlX2NvbnRleHQgKHJlZ19lcnJjb2RlX3QgKmVyciwgY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJICAgIGludCBpZHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGlmIChkZmEtPmluaXRfc3RhdGUtPmhhc19jb25zdHJhaW50KQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBjb250ZXh0OworICAgICAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIGlkeCAtIDEsIG1jdHgtPmVmbGFncyk7CisgICAgICBpZiAoSVNfV09SRF9DT05URVhUIChjb250ZXh0KSkKKwlyZXR1cm4gZGZhLT5pbml0X3N0YXRlX3dvcmQ7CisgICAgICBlbHNlIGlmIChJU19PUkRJTkFSWV9DT05URVhUIChjb250ZXh0KSkKKwlyZXR1cm4gZGZhLT5pbml0X3N0YXRlOworICAgICAgZWxzZSBpZiAoSVNfQkVHQlVGX0NPTlRFWFQgKGNvbnRleHQpICYmIElTX05FV0xJTkVfQ09OVEVYVCAoY29udGV4dCkpCisJcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZV9iZWdidWY7CisgICAgICBlbHNlIGlmIChJU19ORVdMSU5FX0NPTlRFWFQgKGNvbnRleHQpKQorCXJldHVybiBkZmEtPmluaXRfc3RhdGVfbmw7CisgICAgICBlbHNlIGlmIChJU19CRUdCVUZfQ09OVEVYVCAoY29udGV4dCkpCisJeworCSAgLyogSXQgaXMgcmVsYXRpdmVseSByYXJlIGNhc2UsIHRoZW4gY2FsY3VsYXRlIG9uIGRlbWFuZC4gICovCisJICByZXR1cm4gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0IChlcnIsIGRmYSwKKwkJCQkJICAgZGZhLT5pbml0X3N0YXRlLT5lbnRyYW5jZV9ub2RlcywKKwkJCQkJICAgY29udGV4dCk7CisJfQorICAgICAgZWxzZQorCS8qIE11c3Qgbm90IGhhcHBlbj8gICovCisJcmV0dXJuIGRmYS0+aW5pdF9zdGF0ZTsKKyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gZGZhLT5pbml0X3N0YXRlOworfQorCisvKiBDaGVjayB3aGV0aGVyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggaW5wdXQgc3RyaW5nIElOUFVUIG9yIG5vdCwKKyAgIGFuZCByZXR1cm4gdGhlIGluZGV4IHdoZXJlIHRoZSBtYXRjaGluZyBlbmQsIHJldHVybiAtMSBpZiBub3QgbWF0Y2gsCisgICBvciByZXR1cm4gLTIgaW4gY2FzZSBvZiBhbiBlcnJvci4KKyAgIEZMX0xPTkdFU1RfTUFUQ0ggbWVhbnMgd2Ugd2FudCB0aGUgUE9TSVggbG9uZ2VzdCBtYXRjaGluZy4KKyAgIElmIFBfTUFUQ0hfRklSU1QgaXMgbm90IE5VTEwsIGFuZCB0aGUgbWF0Y2ggZmFpbHMsIGl0IGlzIHNldCB0byB0aGUKKyAgIG5leHQgcGxhY2Ugd2hlcmUgd2UgbWF5IHdhbnQgdG8gdHJ5IG1hdGNoaW5nLgorICAgTm90ZSB0aGF0IHRoZSBtYXRjaGVyIGFzc3VtZSB0aGF0IHRoZSBtYXRjaGluZyBzdGFydHMgZnJvbSB0aGUgY3VycmVudAorICAgaW5kZXggb2YgdGhlIGJ1ZmZlci4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19tYXRjaGluZyAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgZmxfbG9uZ2VzdF9tYXRjaCwKKwkJaW50ICpwX21hdGNoX2ZpcnN0KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IG1hdGNoID0gMDsKKyAgaW50IG1hdGNoX2xhc3QgPSAtMTsKKyAgaW50IGN1cl9zdHJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCk7CisgIHJlX2RmYXN0YXRlX3QgKmN1cl9zdGF0ZTsKKyAgaW50IGF0X2luaXRfc3RhdGUgPSBwX21hdGNoX2ZpcnN0ICE9IE5VTEw7CisgIGludCBuZXh0X3N0YXJ0X2lkeCA9IGN1cl9zdHJfaWR4OworCisgIGVyciA9IFJFR19OT0VSUk9SOworICBjdXJfc3RhdGUgPSBhY3F1aXJlX2luaXRfc3RhdGVfY29udGV4dCAoJmVyciwgbWN0eCwgY3VyX3N0cl9pZHgpOworICAvKiBBbiBpbml0aWFsIHN0YXRlIG11c3Qgbm90IGJlIE5VTEwgKGludmFsaWQpLiAgKi8KKyAgaWYgKEJFIChjdXJfc3RhdGUgPT0gTlVMTCwgMCkpCisgICAgeworICAgICAgYXNzZXJ0IChlcnIgPT0gUkVHX0VTUEFDRSk7CisgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgIGlmIChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCkKKyAgICB7CisgICAgICBtY3R4LT5zdGF0ZV9sb2dbY3VyX3N0cl9pZHhdID0gY3VyX3N0YXRlOworCisgICAgICAvKiBDaGVjayBPUF9PUEVOX1NVQkVYUCBpbiB0aGUgaW5pdGlhbCBzdGF0ZSBpbiBjYXNlIHRoYXQgd2UgdXNlIHRoZW0KKwkgbGF0ZXIuICBFLmcuIFByb2Nlc3NpbmcgYmFjayByZWZlcmVuY2VzLiAgKi8KKyAgICAgIGlmIChCRSAoZGZhLT5uYmFja3JlZiwgMCkpCisJeworCSAgYXRfaW5pdF9zdGF0ZSA9IDA7CisJICBlcnIgPSBjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChtY3R4LCAmY3VyX3N0YXRlLT5ub2RlcywgMCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisKKwkgIGlmIChjdXJfc3RhdGUtPmhhc19iYWNrcmVmKQorCSAgICB7CisJICAgICAgZXJyID0gdHJhbnNpdF9zdGF0ZV9ia3JlZiAobWN0eCwgJmN1cl9zdGF0ZS0+bm9kZXMpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgLyogSWYgdGhlIFJFIGFjY2VwdHMgTlVMTCBzdHJpbmcuICAqLworICBpZiAoQkUgKGN1cl9zdGF0ZS0+aGFsdCwgMCkpCisgICAgeworICAgICAgaWYgKCFjdXJfc3RhdGUtPmhhc19jb25zdHJhaW50CisJICB8fCBjaGVja19oYWx0X3N0YXRlX2NvbnRleHQgKG1jdHgsIGN1cl9zdGF0ZSwgY3VyX3N0cl9pZHgpKQorCXsKKwkgIGlmICghZmxfbG9uZ2VzdF9tYXRjaCkKKwkgICAgcmV0dXJuIGN1cl9zdHJfaWR4OworCSAgZWxzZQorCSAgICB7CisJICAgICAgbWF0Y2hfbGFzdCA9IGN1cl9zdHJfaWR4OworCSAgICAgIG1hdGNoID0gMTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgd2hpbGUgKCFyZV9zdHJpbmdfZW9pICgmbWN0eC0+aW5wdXQpKQorICAgIHsKKyAgICAgIHJlX2RmYXN0YXRlX3QgKm9sZF9zdGF0ZSA9IGN1cl9zdGF0ZTsKKyAgICAgIGludCBuZXh0X2NoYXJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCkgKyAxOworCisgICAgICBpZiAoQkUgKG5leHRfY2hhcl9pZHggPj0gbWN0eC0+aW5wdXQuYnVmc19sZW4sIDApCisJICB8fCAoQkUgKG5leHRfY2hhcl9pZHggPj0gbWN0eC0+aW5wdXQudmFsaWRfbGVuLCAwKQorCSAgICAgICYmIG1jdHgtPmlucHV0LnZhbGlkX2xlbiA8IG1jdHgtPmlucHV0LmxlbikpCisJeworCSAgZXJyID0gZXh0ZW5kX2J1ZmZlcnMgKG1jdHgpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgYXNzZXJ0IChlcnIgPT0gUkVHX0VTUEFDRSk7CisJICAgICAgcmV0dXJuIC0yOworCSAgICB9CisJfQorCisgICAgICBjdXJfc3RhdGUgPSB0cmFuc2l0X3N0YXRlICgmZXJyLCBtY3R4LCBjdXJfc3RhdGUpOworICAgICAgaWYgKG1jdHgtPnN0YXRlX2xvZyAhPSBOVUxMKQorCWN1cl9zdGF0ZSA9IG1lcmdlX3N0YXRlX3dpdGhfbG9nICgmZXJyLCBtY3R4LCBjdXJfc3RhdGUpOworCisgICAgICBpZiAoY3VyX3N0YXRlID09IE5VTEwpCisJeworCSAgLyogUmVhY2hlZCB0aGUgaW52YWxpZCBzdGF0ZSBvciBhbiBlcnJvci4gIFRyeSB0byByZWNvdmVyIGEgdmFsaWQKKwkgICAgIHN0YXRlIHVzaW5nIHRoZSBzdGF0ZSBsb2csIGlmIGF2YWlsYWJsZSBhbmQgaWYgd2UgaGF2ZSBub3QKKwkgICAgIGFscmVhZHkgZm91bmQgYSB2YWxpZCAoZXZlbiBpZiBub3QgdGhlIGxvbmdlc3QpIG1hdGNoLiAgKi8KKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIC0yOworCisJICBpZiAobWN0eC0+c3RhdGVfbG9nID09IE5VTEwKKwkgICAgICB8fCAobWF0Y2ggJiYgIWZsX2xvbmdlc3RfbWF0Y2gpCisJICAgICAgfHwgKGN1cl9zdGF0ZSA9IGZpbmRfcmVjb3Zlcl9zdGF0ZSAoJmVyciwgbWN0eCkpID09IE5VTEwpCisJICAgIGJyZWFrOworCX0KKworICAgICAgaWYgKEJFIChhdF9pbml0X3N0YXRlLCAwKSkKKwl7CisJICBpZiAob2xkX3N0YXRlID09IGN1cl9zdGF0ZSkKKwkgICAgbmV4dF9zdGFydF9pZHggPSBuZXh0X2NoYXJfaWR4OworCSAgZWxzZQorCSAgICBhdF9pbml0X3N0YXRlID0gMDsKKwl9CisKKyAgICAgIGlmIChjdXJfc3RhdGUtPmhhbHQpCisJeworCSAgLyogUmVhY2hlZCBhIGhhbHQgc3RhdGUuCisJICAgICBDaGVjayB0aGUgaGFsdCBzdGF0ZSBjYW4gc2F0aXNmeSB0aGUgY3VycmVudCBjb250ZXh0LiAgKi8KKwkgIGlmICghY3VyX3N0YXRlLT5oYXNfY29uc3RyYWludAorCSAgICAgIHx8IGNoZWNrX2hhbHRfc3RhdGVfY29udGV4dCAobWN0eCwgY3VyX3N0YXRlLAorCQkJCQkgICByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSkpCisJICAgIHsKKwkgICAgICAvKiBXZSBmb3VuZCBhbiBhcHByb3ByaWF0ZSBoYWx0IHN0YXRlLiAgKi8KKwkgICAgICBtYXRjaF9sYXN0ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCk7CisJICAgICAgbWF0Y2ggPSAxOworCisJICAgICAgLyogV2UgZm91bmQgYSBtYXRjaCwgZG8gbm90IG1vZGlmeSBtYXRjaF9maXJzdCBiZWxvdy4gICovCisJICAgICAgcF9tYXRjaF9maXJzdCA9IE5VTEw7CisJICAgICAgaWYgKCFmbF9sb25nZXN0X21hdGNoKQorCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYgKHBfbWF0Y2hfZmlyc3QpCisgICAgKnBfbWF0Y2hfZmlyc3QgKz0gbmV4dF9zdGFydF9pZHg7CisKKyAgcmV0dXJuIG1hdGNoX2xhc3Q7Cit9CisKKy8qIENoZWNrIE5PREUgbWF0Y2ggdGhlIGN1cnJlbnQgY29udGV4dC4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19oYWx0X25vZGVfY29udGV4dCAoY29uc3QgcmVfZGZhX3QgKmRmYSwgaW50IG5vZGUsIHVuc2lnbmVkIGludCBjb250ZXh0KQoreworICByZV90b2tlbl90eXBlX3QgdHlwZSA9IGRmYS0+bm9kZXNbbm9kZV0udHlwZTsKKyAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQgPSBkZmEtPm5vZGVzW25vZGVdLmNvbnN0cmFpbnQ7CisgIGlmICh0eXBlICE9IEVORF9PRl9SRSkKKyAgICByZXR1cm4gMDsKKyAgaWYgKCFjb25zdHJhaW50KQorICAgIHJldHVybiAxOworICBpZiAoTk9UX1NBVElTRllfTkVYVF9DT05TVFJBSU5UIChjb25zdHJhaW50LCBjb250ZXh0KSkKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9CisKKy8qIENoZWNrIHRoZSBoYWx0IHN0YXRlIFNUQVRFIG1hdGNoIHRoZSBjdXJyZW50IGNvbnRleHQuCisgICBSZXR1cm4gMCBpZiBub3QgbWF0Y2gsIGlmIHRoZSBub2RlLCBTVEFURSBoYXMsIGlzIGEgaGFsdCBub2RlIGFuZAorICAgbWF0Y2ggdGhlIGNvbnRleHQsIHJldHVybiB0aGUgbm9kZS4gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19oYWx0X3N0YXRlX2NvbnRleHQgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwKKwkJCSAgY29uc3QgcmVfZGZhc3RhdGVfdCAqc3RhdGUsIGludCBpZHgpCit7CisgIGludCBpOworICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKyNpZmRlZiBERUJVRworICBhc3NlcnQgKHN0YXRlLT5oYWx0KTsKKyNlbmRpZgorICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgaWR4LCBtY3R4LT5lZmxhZ3MpOworICBmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm5vZGVzLm5lbGVtOyArK2kpCisgICAgaWYgKGNoZWNrX2hhbHRfbm9kZV9jb250ZXh0IChtY3R4LT5kZmEsIHN0YXRlLT5ub2Rlcy5lbGVtc1tpXSwgY29udGV4dCkpCisgICAgICByZXR1cm4gc3RhdGUtPm5vZGVzLmVsZW1zW2ldOworICByZXR1cm4gMDsKK30KKworLyogQ29tcHV0ZSB0aGUgbmV4dCBub2RlIHRvIHdoaWNoICJORkEiIHRyYW5zaXQgZnJvbSBOT0RFKCJORkEiIGlzIGEgTkZBCisgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBERkEpLgorICAgUmV0dXJuIHRoZSBkZXN0aW5hdGlvbiBub2RlLCBhbmQgdXBkYXRlIEVQU19WSUFfTk9ERVMsIHJldHVybiAtMSBpbiBjYXNlCisgICBvZiBlcnJvcnMuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcHJvY2VlZF9uZXh0X25vZGUgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IG5yZWdzLCByZWdtYXRjaF90ICpyZWdzLAorCQkgICBpbnQgKnBpZHgsIGludCBub2RlLCByZV9ub2RlX3NldCAqZXBzX3ZpYV9ub2RlcywKKwkJICAgc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCBpLCBlcnI7CisgIGlmIChJU19FUFNJTE9OX05PREUgKGRmYS0+bm9kZXNbbm9kZV0udHlwZSkpCisgICAgeworICAgICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcyA9ICZtY3R4LT5zdGF0ZV9sb2dbKnBpZHhdLT5ub2RlczsKKyAgICAgIHJlX25vZGVfc2V0ICplZGVzdHMgPSAmZGZhLT5lZGVzdHNbbm9kZV07CisgICAgICBpbnQgZGVzdF9ub2RlOworICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChlcHNfdmlhX25vZGVzLCBub2RlKTsKKyAgICAgIGlmIChCRSAoZXJyIDwgMCwgMCkpCisJcmV0dXJuIC0yOworICAgICAgLyogUGljayB1cCBhIHZhbGlkIGRlc3RpbmF0aW9uLCBvciByZXR1cm4gLTEgaWYgbm9uZSBpcyBmb3VuZC4gICovCisgICAgICBmb3IgKGRlc3Rfbm9kZSA9IC0xLCBpID0gMDsgaSA8IGVkZXN0cy0+bmVsZW07ICsraSkKKwl7CisJICBpbnQgY2FuZGlkYXRlID0gZWRlc3RzLT5lbGVtc1tpXTsKKwkgIGlmICghcmVfbm9kZV9zZXRfY29udGFpbnMgKGN1cl9ub2RlcywgY2FuZGlkYXRlKSkKKwkgICAgY29udGludWU7CisJICBpZiAoZGVzdF9ub2RlID09IC0xKQorCSAgICBkZXN0X25vZGUgPSBjYW5kaWRhdGU7CisKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIEluIG9yZGVyIHRvIGF2b2lkIGluZmluaXRlIGxvb3AgbGlrZSAiKGEqKSoiLCByZXR1cm4gdGhlIHNlY29uZAorCQkgZXBzaWxvbi10cmFuc2l0aW9uIGlmIHRoZSBmaXJzdCB3YXMgYWxyZWFkeSBjb25zaWRlcmVkLiAgKi8KKwkgICAgICBpZiAocmVfbm9kZV9zZXRfY29udGFpbnMgKGVwc192aWFfbm9kZXMsIGRlc3Rfbm9kZSkpCisJCXJldHVybiBjYW5kaWRhdGU7CisKKwkgICAgICAvKiBPdGhlcndpc2UsIHB1c2ggdGhlIHNlY29uZCBlcHNpbG9uLXRyYW5zaXRpb24gb24gdGhlIGZhaWwgc3RhY2suICAqLworCSAgICAgIGVsc2UgaWYgKGZzICE9IE5VTEwKKwkJICAgICAgICYmIHB1c2hfZmFpbF9zdGFjayAoZnMsICpwaWR4LCBjYW5kaWRhdGUsIG5yZWdzLCByZWdzLAorCQkJCQkgICBlcHNfdmlhX25vZGVzKSkKKwkJcmV0dXJuIC0yOworCisJICAgICAgLyogV2Uga25vdyB3ZSBhcmUgZ29pbmcgdG8gZXhpdC4gICovCisJICAgICAgYnJlYWs7CisJICAgIH0KKwl9CisgICAgICByZXR1cm4gZGVzdF9ub2RlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGludCBuYWNjZXB0ZWQgPSAwOworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVdLnR5cGU7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgICAgaWYgKGRmYS0+bm9kZXNbbm9kZV0uYWNjZXB0X21iKQorCW5hY2NlcHRlZCA9IGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChkZmEsIG5vZGUsICZtY3R4LT5pbnB1dCwgKnBpZHgpOworICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICovCisgICAgICBpZiAodHlwZSA9PSBPUF9CQUNLX1JFRikKKwl7CisJICBpbnQgc3ViZXhwX2lkeCA9IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCArIDE7CisJICBuYWNjZXB0ZWQgPSByZWdzW3N1YmV4cF9pZHhdLnJtX2VvIC0gcmVnc1tzdWJleHBfaWR4XS5ybV9zbzsKKwkgIGlmIChmcyAhPSBOVUxMKQorCSAgICB7CisJICAgICAgaWYgKHJlZ3Nbc3ViZXhwX2lkeF0ucm1fc28gPT0gLTEgfHwgcmVnc1tzdWJleHBfaWR4XS5ybV9lbyA9PSAtMSkKKwkJcmV0dXJuIC0xOworCSAgICAgIGVsc2UgaWYgKG5hY2NlcHRlZCkKKwkJeworCQkgIGNoYXIgKmJ1ZiA9IChjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyICgmbWN0eC0+aW5wdXQpOworCQkgIGlmIChtZW1jbXAgKGJ1ZiArIHJlZ3Nbc3ViZXhwX2lkeF0ucm1fc28sIGJ1ZiArICpwaWR4LAorCQkJICAgICAgbmFjY2VwdGVkKSAhPSAwKQorCQkgICAgcmV0dXJuIC0xOworCQl9CisJICAgIH0KKworCSAgaWYgKG5hY2NlcHRlZCA9PSAwKQorCSAgICB7CisJICAgICAgaW50IGRlc3Rfbm9kZTsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbnNlcnQgKGVwc192aWFfbm9kZXMsIG5vZGUpOworCSAgICAgIGlmIChCRSAoZXJyIDwgMCwgMCkpCisJCXJldHVybiAtMjsKKwkgICAgICBkZXN0X25vZGUgPSBkZmEtPmVkZXN0c1tub2RlXS5lbGVtc1swXTsKKwkgICAgICBpZiAocmVfbm9kZV9zZXRfY29udGFpbnMgKCZtY3R4LT5zdGF0ZV9sb2dbKnBpZHhdLT5ub2RlcywKKwkJCQkJZGVzdF9ub2RlKSkKKwkJcmV0dXJuIGRlc3Rfbm9kZTsKKwkgICAgfQorCX0KKworICAgICAgaWYgKG5hY2NlcHRlZCAhPSAwCisJICB8fCBjaGVja19ub2RlX2FjY2VwdCAobWN0eCwgZGZhLT5ub2RlcyArIG5vZGUsICpwaWR4KSkKKwl7CisJICBpbnQgZGVzdF9ub2RlID0gZGZhLT5uZXh0c1tub2RlXTsKKwkgICpwaWR4ID0gKG5hY2NlcHRlZCA9PSAwKSA/ICpwaWR4ICsgMSA6ICpwaWR4ICsgbmFjY2VwdGVkOworCSAgaWYgKGZzICYmICgqcGlkeCA+IG1jdHgtPm1hdGNoX2xhc3QgfHwgbWN0eC0+c3RhdGVfbG9nWypwaWR4XSA9PSBOVUxMCisJCSAgICAgfHwgIXJlX25vZGVfc2V0X2NvbnRhaW5zICgmbWN0eC0+c3RhdGVfbG9nWypwaWR4XS0+bm9kZXMsCisJCQkJCSAgICAgICBkZXN0X25vZGUpKSkKKwkgICAgcmV0dXJuIC0xOworCSAgcmVfbm9kZV9zZXRfZW1wdHkgKGVwc192aWFfbm9kZXMpOworCSAgcmV0dXJuIGRlc3Rfbm9kZTsKKwl9CisgICAgfQorICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorcHVzaF9mYWlsX3N0YWNrIChzdHJ1Y3QgcmVfZmFpbF9zdGFja190ICpmcywgaW50IHN0cl9pZHgsIGludCBkZXN0X25vZGUsCisJCSBpbnQgbnJlZ3MsIHJlZ21hdGNoX3QgKnJlZ3MsIHJlX25vZGVfc2V0ICplcHNfdmlhX25vZGVzKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IG51bSA9IGZzLT5udW0rKzsKKyAgaWYgKGZzLT5udW0gPT0gZnMtPmFsbG9jKQorICAgIHsKKyAgICAgIHN0cnVjdCByZV9mYWlsX3N0YWNrX2VudF90ICpuZXdfYXJyYXk7CisgICAgICBuZXdfYXJyYXkgPSByZWFsbG9jIChmcy0+c3RhY2ssIChzaXplb2YgKHN0cnVjdCByZV9mYWlsX3N0YWNrX2VudF90KQorCQkJCSAgICAgICAqIGZzLT5hbGxvYyAqIDIpKTsKKyAgICAgIGlmIChuZXdfYXJyYXkgPT0gTlVMTCkKKwlyZXR1cm4gUkVHX0VTUEFDRTsKKyAgICAgIGZzLT5hbGxvYyAqPSAyOworICAgICAgZnMtPnN0YWNrID0gbmV3X2FycmF5OworICAgIH0KKyAgZnMtPnN0YWNrW251bV0uaWR4ID0gc3RyX2lkeDsKKyAgZnMtPnN0YWNrW251bV0ubm9kZSA9IGRlc3Rfbm9kZTsKKyAgZnMtPnN0YWNrW251bV0ucmVncyA9IHJlX21hbGxvYyAocmVnbWF0Y2hfdCwgbnJlZ3MpOworICBpZiAoZnMtPnN0YWNrW251bV0ucmVncyA9PSBOVUxMKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICBtZW1jcHkgKGZzLT5zdGFja1tudW1dLnJlZ3MsIHJlZ3MsIHNpemVvZiAocmVnbWF0Y2hfdCkgKiBucmVncyk7CisgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJmZzLT5zdGFja1tudW1dLmVwc192aWFfbm9kZXMsIGVwc192aWFfbm9kZXMpOworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorcG9wX2ZhaWxfc3RhY2sgKHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzLCBpbnQgKnBpZHgsIGludCBucmVncywKKwkJcmVnbWF0Y2hfdCAqcmVncywgcmVfbm9kZV9zZXQgKmVwc192aWFfbm9kZXMpCit7CisgIGludCBudW0gPSAtLWZzLT5udW07CisgIGFzc2VydCAobnVtID49IDApOworICAqcGlkeCA9IGZzLT5zdGFja1tudW1dLmlkeDsKKyAgbWVtY3B5IChyZWdzLCBmcy0+c3RhY2tbbnVtXS5yZWdzLCBzaXplb2YgKHJlZ21hdGNoX3QpICogbnJlZ3MpOworICByZV9ub2RlX3NldF9mcmVlIChlcHNfdmlhX25vZGVzKTsKKyAgcmVfZnJlZSAoZnMtPnN0YWNrW251bV0ucmVncyk7CisgICplcHNfdmlhX25vZGVzID0gZnMtPnN0YWNrW251bV0uZXBzX3ZpYV9ub2RlczsKKyAgcmV0dXJuIGZzLT5zdGFja1tudW1dLm5vZGU7Cit9CisKKy8qIFNldCB0aGUgcG9zaXRpb25zIHdoZXJlIHRoZSBzdWJleHByZXNzaW9ucyBhcmUgc3RhcnRzL2VuZHMgdG8gcmVnaXN0ZXJzCisgICBQTUFUQ0guCisgICBOb3RlOiBXZSBhc3N1bWUgdGhhdCBwbWF0Y2hbMF0gaXMgYWxyZWFkeSBzZXQsIGFuZAorICAgcG1hdGNoW2ldLnJtX3NvID09IHBtYXRjaFtpXS5ybV9lbyA9PSAtMSBmb3IgMCA8IGkgPCBubWF0Y2guICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3NldF9yZWdzIChjb25zdCByZWdleF90ICpwcmVnLCBjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHNpemVfdCBubWF0Y2gsCisJICByZWdtYXRjaF90ICpwbWF0Y2gsIGludCBmbF9iYWNrdHJhY2spCit7CisgIGNvbnN0IHJlX2RmYV90ICpkZmEgPSAoY29uc3QgcmVfZGZhX3QgKikgcHJlZy0+YnVmZmVyOworICBpbnQgaWR4LCBjdXJfbm9kZTsKKyAgcmVfbm9kZV9zZXQgZXBzX3ZpYV9ub2RlczsKKyAgc3RydWN0IHJlX2ZhaWxfc3RhY2tfdCAqZnM7CisgIHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgZnNfYm9keSA9IHsgMCwgMiwgTlVMTCB9OworICByZWdtYXRjaF90ICpwcmV2X2lkeF9tYXRjaDsKKyAgaW50IHByZXZfaWR4X21hdGNoX21hbGxvY2VkID0gMDsKKworI2lmZGVmIERFQlVHCisgIGFzc2VydCAobm1hdGNoID4gMSk7CisgIGFzc2VydCAobWN0eC0+c3RhdGVfbG9nICE9IE5VTEwpOworI2VuZGlmCisgIGlmIChmbF9iYWNrdHJhY2spCisgICAgeworICAgICAgZnMgPSAmZnNfYm9keTsKKyAgICAgIGZzLT5zdGFjayA9IHJlX21hbGxvYyAoc3RydWN0IHJlX2ZhaWxfc3RhY2tfZW50X3QsIGZzLT5hbGxvYyk7CisgICAgICBpZiAoZnMtPnN0YWNrID09IE5VTEwpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgfQorICBlbHNlCisgICAgZnMgPSBOVUxMOworCisgIGN1cl9ub2RlID0gZGZhLT5pbml0X25vZGU7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZlcHNfdmlhX25vZGVzKTsKKworI2lmZGVmIEhBVkVfQUxMT0NBCisgIGlmIChfX2xpYmNfdXNlX2FsbG9jYSAobm1hdGNoICogc2l6ZW9mIChyZWdtYXRjaF90KSkpCisgICAgcHJldl9pZHhfbWF0Y2ggPSAocmVnbWF0Y2hfdCAqKSBhbGxvY2EgKG5tYXRjaCAqIHNpemVvZiAocmVnbWF0Y2hfdCkpOworICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgICBwcmV2X2lkeF9tYXRjaCA9IHJlX21hbGxvYyAocmVnbWF0Y2hfdCwgbm1hdGNoKTsKKyAgICAgIGlmIChwcmV2X2lkeF9tYXRjaCA9PSBOVUxMKQorCXsKKwkgIGZyZWVfZmFpbF9zdGFja19yZXR1cm4gKGZzKTsKKwkgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIHByZXZfaWR4X21hdGNoX21hbGxvY2VkID0gMTsKKyAgICB9CisgIG1lbWNweSAocHJldl9pZHhfbWF0Y2gsIHBtYXRjaCwgc2l6ZW9mIChyZWdtYXRjaF90KSAqIG5tYXRjaCk7CisKKyAgZm9yIChpZHggPSBwbWF0Y2hbMF0ucm1fc287IGlkeCA8PSBwbWF0Y2hbMF0ucm1fZW8gOykKKyAgICB7CisgICAgICB1cGRhdGVfcmVncyAoZGZhLCBwbWF0Y2gsIHByZXZfaWR4X21hdGNoLCBjdXJfbm9kZSwgaWR4LCBubWF0Y2gpOworCisgICAgICBpZiAoaWR4ID09IHBtYXRjaFswXS5ybV9lbyAmJiBjdXJfbm9kZSA9PSBtY3R4LT5sYXN0X25vZGUpCisJeworCSAgaW50IHJlZ19pZHg7CisJICBpZiAoZnMpCisJICAgIHsKKwkgICAgICBmb3IgKHJlZ19pZHggPSAwOyByZWdfaWR4IDwgbm1hdGNoOyArK3JlZ19pZHgpCisJCWlmIChwbWF0Y2hbcmVnX2lkeF0ucm1fc28gPiAtMSAmJiBwbWF0Y2hbcmVnX2lkeF0ucm1fZW8gPT0gLTEpCisJCSAgYnJlYWs7CisJICAgICAgaWYgKHJlZ19pZHggPT0gbm1hdGNoKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmVwc192aWFfbm9kZXMpOworCQkgIGlmIChwcmV2X2lkeF9tYXRjaF9tYWxsb2NlZCkKKwkJICAgIHJlX2ZyZWUgKHByZXZfaWR4X21hdGNoKTsKKwkJICByZXR1cm4gZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoZnMpOworCQl9CisJICAgICAgY3VyX25vZGUgPSBwb3BfZmFpbF9zdGFjayAoZnMsICZpZHgsIG5tYXRjaCwgcG1hdGNoLAorCQkJCQkgJmVwc192aWFfbm9kZXMpOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmZXBzX3ZpYV9ub2Rlcyk7CisJICAgICAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQorCQlyZV9mcmVlIChwcmV2X2lkeF9tYXRjaCk7CisJICAgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCSAgICB9CisJfQorCisgICAgICAvKiBQcm9jZWVkIHRvIG5leHQgbm9kZS4gICovCisgICAgICBjdXJfbm9kZSA9IHByb2NlZWRfbmV4dF9ub2RlIChtY3R4LCBubWF0Y2gsIHBtYXRjaCwgJmlkeCwgY3VyX25vZGUsCisJCQkJICAgICZlcHNfdmlhX25vZGVzLCBmcyk7CisKKyAgICAgIGlmIChCRSAoY3VyX25vZGUgPCAwLCAwKSkKKwl7CisJICBpZiAoQkUgKGN1cl9ub2RlID09IC0yLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZlcHNfdmlhX25vZGVzKTsKKwkgICAgICBpZiAocHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQpCisJCXJlX2ZyZWUgKHByZXZfaWR4X21hdGNoKTsKKwkgICAgICBmcmVlX2ZhaWxfc3RhY2tfcmV0dXJuIChmcyk7CisJICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKwkgIGlmIChmcykKKwkgICAgY3VyX25vZGUgPSBwb3BfZmFpbF9zdGFjayAoZnMsICZpZHgsIG5tYXRjaCwgcG1hdGNoLAorCQkJCSAgICAgICAmZXBzX3ZpYV9ub2Rlcyk7CisJICBlbHNlCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmZXBzX3ZpYV9ub2Rlcyk7CisJICAgICAgaWYgKHByZXZfaWR4X21hdGNoX21hbGxvY2VkKQorCQlyZV9mcmVlIChwcmV2X2lkeF9tYXRjaCk7CisJICAgICAgcmV0dXJuIFJFR19OT01BVENIOworCSAgICB9CisJfQorICAgIH0KKyAgcmVfbm9kZV9zZXRfZnJlZSAoJmVwc192aWFfbm9kZXMpOworICBpZiAocHJldl9pZHhfbWF0Y2hfbWFsbG9jZWQpCisgICAgcmVfZnJlZSAocHJldl9pZHhfbWF0Y2gpOworICByZXR1cm4gZnJlZV9mYWlsX3N0YWNrX3JldHVybiAoZnMpOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2ZyZWVfZmFpbF9zdGFja19yZXR1cm4gKHN0cnVjdCByZV9mYWlsX3N0YWNrX3QgKmZzKQoreworICBpZiAoZnMpCisgICAgeworICAgICAgaW50IGZzX2lkeDsKKyAgICAgIGZvciAoZnNfaWR4ID0gMDsgZnNfaWR4IDwgZnMtPm51bTsgKytmc19pZHgpCisJeworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmZzLT5zdGFja1tmc19pZHhdLmVwc192aWFfbm9kZXMpOworCSAgcmVfZnJlZSAoZnMtPnN0YWNrW2ZzX2lkeF0ucmVncyk7CisJfQorICAgICAgcmVfZnJlZSAoZnMtPnN0YWNrKTsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCit1cGRhdGVfcmVncyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVnbWF0Y2hfdCAqcG1hdGNoLAorCSAgICAgcmVnbWF0Y2hfdCAqcHJldl9pZHhfbWF0Y2gsIGludCBjdXJfbm9kZSwgaW50IGN1cl9pZHgsIGludCBubWF0Y2gpCit7CisgIGludCB0eXBlID0gZGZhLT5ub2Rlc1tjdXJfbm9kZV0udHlwZTsKKyAgaWYgKHR5cGUgPT0gT1BfT1BFTl9TVUJFWFApCisgICAgeworICAgICAgaW50IHJlZ19udW0gPSBkZmEtPm5vZGVzW2N1cl9ub2RlXS5vcHIuaWR4ICsgMTsKKworICAgICAgLyogV2UgYXJlIGF0IHRoZSBmaXJzdCBub2RlIG9mIHRoaXMgc3ViIGV4cHJlc3Npb24uICAqLworICAgICAgaWYgKHJlZ19udW0gPCBubWF0Y2gpCisJeworCSAgcG1hdGNoW3JlZ19udW1dLnJtX3NvID0gY3VyX2lkeDsKKwkgIHBtYXRjaFtyZWdfbnVtXS5ybV9lbyA9IC0xOworCX0KKyAgICB9CisgIGVsc2UgaWYgKHR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQKQorICAgIHsKKyAgICAgIGludCByZWdfbnVtID0gZGZhLT5ub2Rlc1tjdXJfbm9kZV0ub3ByLmlkeCArIDE7CisgICAgICBpZiAocmVnX251bSA8IG5tYXRjaCkKKwl7CisJICAvKiBXZSBhcmUgYXQgdGhlIGxhc3Qgbm9kZSBvZiB0aGlzIHN1YiBleHByZXNzaW9uLiAgKi8KKwkgIGlmIChwbWF0Y2hbcmVnX251bV0ucm1fc28gPCBjdXJfaWR4KQorCSAgICB7CisJICAgICAgcG1hdGNoW3JlZ19udW1dLnJtX2VvID0gY3VyX2lkeDsKKwkgICAgICAvKiBUaGlzIGlzIGEgbm9uLWVtcHR5IG1hdGNoIG9yIHdlIGFyZSBub3QgaW5zaWRlIGFuIG9wdGlvbmFsCisJCSBzdWJleHByZXNzaW9uLiAgQWNjZXB0IHRoaXMgcmlnaHQgYXdheS4gICovCisJICAgICAgbWVtY3B5IChwcmV2X2lkeF9tYXRjaCwgcG1hdGNoLCBzaXplb2YgKHJlZ21hdGNoX3QpICogbm1hdGNoKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKGRmYS0+bm9kZXNbY3VyX25vZGVdLm9wdF9zdWJleHAKKwkJICAmJiBwcmV2X2lkeF9tYXRjaFtyZWdfbnVtXS5ybV9zbyAhPSAtMSkKKwkJLyogV2UgdHJhbnNpdGVkIHRocm91Z2ggYW4gZW1wdHkgbWF0Y2ggZm9yIGFuIG9wdGlvbmFsCisJCSAgIHN1YmV4cHJlc3Npb24sIGxpa2UgKGE/KSosIGFuZCB0aGlzIGlzIG5vdCB0aGUgc3ViZXhwJ3MKKwkJICAgZmlyc3QgbWF0Y2guICBDb3B5IGJhY2sgdGhlIG9sZCBjb250ZW50IG9mIHRoZSByZWdpc3RlcnMKKwkJICAgc28gdGhhdCBtYXRjaGVzIG9mIGFuIGlubmVyIHN1YmV4cHJlc3Npb24gYXJlIHVuZG9uZSBhcworCQkgICB3ZWxsLCBsaWtlIGluICgoYT8pKSouICAqLworCQltZW1jcHkgKHBtYXRjaCwgcHJldl9pZHhfbWF0Y2gsIHNpemVvZiAocmVnbWF0Y2hfdCkgKiBubWF0Y2gpOworCSAgICAgIGVsc2UKKwkJLyogV2UgY29tcGxldGVkIGEgc3ViZXhwcmVzc2lvbiwgYnV0IGl0IG1heSBiZSBwYXJ0IG9mCisJCSAgIGFuIG9wdGlvbmFsIG9uZSwgc28gZG8gbm90IHVwZGF0ZSBQUkVWX0lEWF9NQVRDSC4gICovCisJCXBtYXRjaFtyZWdfbnVtXS5ybV9lbyA9IGN1cl9pZHg7CisJICAgIH0KKwl9CisgICAgfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgU1RBVEVfTE9HIGZyb20gdGhlIFNDVFgtPmxhc3Rfc3RyX2lkeCB0byAwCisgICBhbmQgc2lmdCB0aGUgbm9kZXMgaW4gZWFjaCBzdGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXMuCisgICBVcGRhdGVkIHN0YXRlX2xvZyB3aWxsIGJlIHdyb3RlIHRvIFNUQVRFX0xPRy4KKworICAgUnVsZXM6IFdlIHRocm93IGF3YXkgdGhlIE5vZGUgYGEnIGluIHRoZSBTVEFURV9MT0dbU1RSX0lEWF0gaWYuLi4KKyAgICAgMS4gV2hlbiBTVFJfSURYID09IE1BVENIX0xBU1QodGhlIGxhc3QgaW5kZXggaW4gdGhlIHN0YXRlX2xvZyk6CisJSWYgYGEnIGlzbid0IHRoZSBMQVNUX05PREUgYW5kIGBhJyBjYW4ndCBlcHNpbG9uIHRyYW5zaXQgdG8KKwl0aGUgTEFTVF9OT0RFLCB3ZSB0aHJvdyBhd2F5IHRoZSBub2RlIGBhJy4KKyAgICAgMi4gV2hlbiAwIDw9IFNUUl9JRFggPCBNQVRDSF9MQVNUIGFuZCBgYScgYWNjZXB0cworCXN0cmluZyBgcycgYW5kIHRyYW5zaXQgdG8gYGInOgorCWkuIElmICdiJyBpc24ndCBpbiB0aGUgU1RBVEVfTE9HW1NUUl9JRFgrc3RybGVuKCdzJyldLCB3ZSB0aHJvdworCSAgIGF3YXkgdGhlIG5vZGUgYGEnLgorCWlpLiBJZiAnYicgaXMgaW4gdGhlIFNUQVRFX0xPR1tTVFJfSURYK3N0cmxlbigncycpXSBidXQgJ2InIGlzCisJICAgIHRocm93biBhd2F5LCB3ZSB0aHJvdyBhd2F5IHRoZSBub2RlIGBhJy4KKyAgICAgMy4gV2hlbiAwIDw9IFNUUl9JRFggPCBNQVRDSF9MQVNUIGFuZCAnYScgZXBzaWxvbiB0cmFuc2l0IHRvICdiJzoKKwlpLiBJZiAnYicgaXNuJ3QgaW4gdGhlIFNUQVRFX0xPR1tTVFJfSURYXSwgd2UgdGhyb3cgYXdheSB0aGUKKwkgICBub2RlIGBhJy4KKwlpaS4gSWYgJ2InIGlzIGluIHRoZSBTVEFURV9MT0dbU1RSX0lEWF0gYnV0ICdiJyBpcyB0aHJvd24gYXdheSwKKwkgICAgd2UgdGhyb3cgYXdheSB0aGUgbm9kZSBgYScuICAqLworCisjZGVmaW5lIFNUQVRFX05PREVfQ09OVEFJTlMoc3RhdGUsbm9kZSkgXAorICAoKHN0YXRlKSAhPSBOVUxMICYmIHJlX25vZGVfc2V0X2NvbnRhaW5zICgmKHN0YXRlKS0+bm9kZXMsIG5vZGUpKQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3NpZnRfc3RhdGVzX2JhY2t3YXJkIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX3NpZnRfY29udGV4dF90ICpzY3R4KQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IG51bGxfY250ID0gMDsKKyAgaW50IHN0cl9pZHggPSBzY3R4LT5sYXN0X3N0cl9pZHg7CisgIHJlX25vZGVfc2V0IGN1cl9kZXN0OworCisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCAmJiBtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0gIT0gTlVMTCk7CisjZW5kaWYKKworICAvKiBCdWlsZCBzaWZ0ZWQgc3RhdGVfbG9nW3N0cl9pZHhdLiAgSXQgaGFzIHRoZSBub2RlcyB3aGljaCBjYW4gZXBzaWxvbgorICAgICB0cmFuc2l0IHRvIHRoZSBsYXN0X25vZGUgYW5kIHRoZSBsYXN0X25vZGUgaXRzZWxmLiAgKi8KKyAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xICgmY3VyX2Rlc3QsIHNjdHgtPmxhc3Rfbm9kZSk7CisgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gZXJyOworICBlcnIgPSB1cGRhdGVfY3VyX3NpZnRlZF9zdGF0ZSAobWN0eCwgc2N0eCwgc3RyX2lkeCwgJmN1cl9kZXN0KTsKKyAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIGdvdG8gZnJlZV9yZXR1cm47CisKKyAgLyogVGhlbiBjaGVjayBlYWNoIHN0YXRlcyBpbiB0aGUgc3RhdGVfbG9nLiAgKi8KKyAgd2hpbGUgKHN0cl9pZHggPiAwKQorICAgIHsKKyAgICAgIC8qIFVwZGF0ZSBjb3VudGVycy4gICovCisgICAgICBudWxsX2NudCA9IChzY3R4LT5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdID09IE5VTEwpID8gbnVsbF9jbnQgKyAxIDogMDsKKyAgICAgIGlmIChudWxsX2NudCA+IG1jdHgtPm1heF9tYl9lbGVtX2xlbikKKwl7CisJICBtZW1zZXQgKHNjdHgtPnNpZnRlZF9zdGF0ZXMsICdcMCcsCisJCSAgc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopICogc3RyX2lkeCk7CisJICByZV9ub2RlX3NldF9mcmVlICgmY3VyX2Rlc3QpOworCSAgcmV0dXJuIFJFR19OT0VSUk9SOworCX0KKyAgICAgIHJlX25vZGVfc2V0X2VtcHR5ICgmY3VyX2Rlc3QpOworICAgICAgLS1zdHJfaWR4OworCisgICAgICBpZiAobWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdKQorCXsKKwkgIGVyciA9IGJ1aWxkX3NpZnRlZF9zdGF0ZXMgKG1jdHgsIHNjdHgsIHN0cl9pZHgsICZjdXJfZGVzdCk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIGdvdG8gZnJlZV9yZXR1cm47CisJfQorCisgICAgICAvKiBBZGQgYWxsIHRoZSBub2RlcyB3aGljaCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKwkgLSBJdCBjYW4gZXBzaWxvbiB0cmFuc2l0IHRvIGEgbm9kZSBpbiBDVVJfREVTVC4KKwkgLSBJdCBpcyBpbiBDVVJfU1JDLgorCSBBbmQgdXBkYXRlIHN0YXRlX2xvZy4gICovCisgICAgICBlcnIgPSB1cGRhdGVfY3VyX3NpZnRlZF9zdGF0ZSAobWN0eCwgc2N0eCwgc3RyX2lkeCwgJmN1cl9kZXN0KTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIGZyZWVfcmV0dXJuOworICAgIH0KKyAgZXJyID0gUkVHX05PRVJST1I7CisgZnJlZV9yZXR1cm46CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZjdXJfZGVzdCk7CisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorYnVpbGRfc2lmdGVkX3N0YXRlcyAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9zaWZ0X2NvbnRleHRfdCAqc2N0eCwKKwkJICAgICBpbnQgc3RyX2lkeCwgcmVfbm9kZV9zZXQgKmN1cl9kZXN0KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBjb25zdCByZV9ub2RlX3NldCAqY3VyX3NyYyA9ICZtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0tPm5vbl9lcHNfbm9kZXM7CisgIGludCBpOworCisgIC8qIFRoZW4gYnVpbGQgdGhlIG5leHQgc2lmdGVkIHN0YXRlLgorICAgICBXZSBidWlsZCB0aGUgbmV4dCBzaWZ0ZWQgc3RhdGUgb24gYGN1cl9kZXN0JywgYW5kIHVwZGF0ZQorICAgICBgc2lmdGVkX3N0YXRlc1tzdHJfaWR4XScgd2l0aCBgY3VyX2Rlc3QnLgorICAgICBOb3RlOgorICAgICBgY3VyX2Rlc3QnIGlzIHRoZSBzaWZ0ZWQgc3RhdGUgZnJvbSBgc3RhdGVfbG9nW3N0cl9pZHggKyAxXScuCisgICAgIGBjdXJfc3JjJyBwb2ludHMgdGhlIG5vZGVfc2V0IG9mIHRoZSBvbGQgYHN0YXRlX2xvZ1tzdHJfaWR4XScKKyAgICAgKHdpdGggdGhlIGVwc2lsb24gbm9kZXMgcHJlLWZpbHRlcmVkIG91dCkuICAqLworICBmb3IgKGkgPSAwOyBpIDwgY3VyX3NyYy0+bmVsZW07IGkrKykKKyAgICB7CisgICAgICBpbnQgcHJldl9ub2RlID0gY3VyX3NyYy0+ZWxlbXNbaV07CisgICAgICBpbnQgbmFjY2VwdGVkID0gMDsKKyAgICAgIGludCByZXQ7CisKKyNpZmRlZiBERUJVRworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW3ByZXZfbm9kZV0udHlwZTsKKyAgICAgIGFzc2VydCAoIUlTX0VQU0lMT05fTk9ERSAodHlwZSkpOworI2VuZGlmCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIC8qIElmIHRoZSBub2RlIG1heSBhY2NlcHQgYG11bHRpIGJ5dGUnLiAgKi8KKyAgICAgIGlmIChkZmEtPm5vZGVzW3ByZXZfbm9kZV0uYWNjZXB0X21iKQorCW5hY2NlcHRlZCA9IHNpZnRfc3RhdGVzX2l0ZXJfbWIgKG1jdHgsIHNjdHgsIHByZXZfbm9kZSwKKwkJCQkJIHN0cl9pZHgsIHNjdHgtPmxhc3Rfc3RyX2lkeCk7CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICAgICAgLyogV2UgZG9uJ3QgY2hlY2sgYmFja3JlZmVyZW5jZXMgaGVyZS4KKwkgU2VlIHVwZGF0ZV9jdXJfc2lmdGVkX3N0YXRlKCkuICAqLworICAgICAgaWYgKCFuYWNjZXB0ZWQKKwkgICYmIGNoZWNrX25vZGVfYWNjZXB0IChtY3R4LCBkZmEtPm5vZGVzICsgcHJldl9ub2RlLCBzdHJfaWR4KQorCSAgJiYgU1RBVEVfTk9ERV9DT05UQUlOUyAoc2N0eC0+c2lmdGVkX3N0YXRlc1tzdHJfaWR4ICsgMV0sCisJCQkJICBkZmEtPm5leHRzW3ByZXZfbm9kZV0pKQorCW5hY2NlcHRlZCA9IDE7CisKKyAgICAgIGlmIChuYWNjZXB0ZWQgPT0gMCkKKwljb250aW51ZTsKKworICAgICAgaWYgKHNjdHgtPmxpbWl0cy5uZWxlbSkKKwl7CisJICBpbnQgdG9faWR4ID0gc3RyX2lkeCArIG5hY2NlcHRlZDsKKwkgIGlmIChjaGVja19kc3RfbGltaXRzIChtY3R4LCAmc2N0eC0+bGltaXRzLAorCQkJCWRmYS0+bmV4dHNbcHJldl9ub2RlXSwgdG9faWR4LAorCQkJCXByZXZfbm9kZSwgc3RyX2lkeCkpCisJICAgIGNvbnRpbnVlOworCX0KKyAgICAgIHJldCA9IHJlX25vZGVfc2V0X2luc2VydCAoY3VyX2Rlc3QsIHByZXZfbm9kZSk7CisgICAgICBpZiAoQkUgKHJldCA9PSAtMSwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgfQorCisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucy4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorY2xlYW5fc3RhdGVfbG9nX2lmX25lZWRlZCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbmV4dF9zdGF0ZV9sb2dfaWR4KQoreworICBpbnQgdG9wID0gbWN0eC0+c3RhdGVfbG9nX3RvcDsKKworICBpZiAobmV4dF9zdGF0ZV9sb2dfaWR4ID49IG1jdHgtPmlucHV0LmJ1ZnNfbGVuCisgICAgICB8fCAobmV4dF9zdGF0ZV9sb2dfaWR4ID49IG1jdHgtPmlucHV0LnZhbGlkX2xlbgorCSAgJiYgbWN0eC0+aW5wdXQudmFsaWRfbGVuIDwgbWN0eC0+aW5wdXQubGVuKSkKKyAgICB7CisgICAgICByZWdfZXJyY29kZV90IGVycjsKKyAgICAgIGVyciA9IGV4dGVuZF9idWZmZXJzIChtY3R4KTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworICAgIH0KKworICBpZiAodG9wIDwgbmV4dF9zdGF0ZV9sb2dfaWR4KQorICAgIHsKKyAgICAgIG1lbXNldCAobWN0eC0+c3RhdGVfbG9nICsgdG9wICsgMSwgJ1wwJywKKwkgICAgICBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgKiAobmV4dF9zdGF0ZV9sb2dfaWR4IC0gdG9wKSk7CisgICAgICBtY3R4LT5zdGF0ZV9sb2dfdG9wID0gbmV4dF9zdGF0ZV9sb2dfaWR4OworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK21lcmdlX3N0YXRlX2FycmF5IChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9kZmFzdGF0ZV90ICoqZHN0LAorCQkgICByZV9kZmFzdGF0ZV90ICoqc3JjLCBpbnQgbnVtKQoreworICBpbnQgc3RfaWR4OworICByZWdfZXJyY29kZV90IGVycjsKKyAgZm9yIChzdF9pZHggPSAwOyBzdF9pZHggPCBudW07ICsrc3RfaWR4KQorICAgIHsKKyAgICAgIGlmIChkc3Rbc3RfaWR4XSA9PSBOVUxMKQorCWRzdFtzdF9pZHhdID0gc3JjW3N0X2lkeF07CisgICAgICBlbHNlIGlmIChzcmNbc3RfaWR4XSAhPSBOVUxMKQorCXsKKwkgIHJlX25vZGVfc2V0IG1lcmdlZF9zZXQ7CisJICBlcnIgPSByZV9ub2RlX3NldF9pbml0X3VuaW9uICgmbWVyZ2VkX3NldCwgJmRzdFtzdF9pZHhdLT5ub2RlcywKKwkJCQkJJnNyY1tzdF9pZHhdLT5ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJICBkc3Rbc3RfaWR4XSA9IHJlX2FjcXVpcmVfc3RhdGUgKCZlcnIsIGRmYSwgJm1lcmdlZF9zZXQpOworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJm1lcmdlZF9zZXQpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCX0KKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCit1cGRhdGVfY3VyX3NpZnRlZF9zdGF0ZSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkJIHJlX3NpZnRfY29udGV4dF90ICpzY3R4LCBpbnQgc3RyX2lkeCwKKwkJCSByZV9ub2RlX3NldCAqZGVzdF9ub2RlcykKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKyAgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXM7CisgIGNhbmRpZGF0ZXMgPSAoKG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XSA9PSBOVUxMKSA/IE5VTEwKKwkJOiAmbWN0eC0+c3RhdGVfbG9nW3N0cl9pZHhdLT5ub2Rlcyk7CisKKyAgaWYgKGRlc3Rfbm9kZXMtPm5lbGVtID09IDApCisgICAgc2N0eC0+c2lmdGVkX3N0YXRlc1tzdHJfaWR4XSA9IE5VTEw7CisgIGVsc2UKKyAgICB7CisgICAgICBpZiAoY2FuZGlkYXRlcykKKwl7CisJICAvKiBBdCBmaXJzdCwgYWRkIHRoZSBub2RlcyB3aGljaCBjYW4gZXBzaWxvbiB0cmFuc2l0IHRvIGEgbm9kZSBpbgorCSAgICAgREVTVF9OT0RFLiAgKi8KKwkgIGVyciA9IGFkZF9lcHNpbG9uX3NyY19ub2RlcyAoZGZhLCBkZXN0X25vZGVzLCBjYW5kaWRhdGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKworCSAgLyogVGhlbiwgY2hlY2sgdGhlIGxpbWl0YXRpb25zIGluIHRoZSBjdXJyZW50IHNpZnRfY29udGV4dC4gICovCisJICBpZiAoc2N0eC0+bGltaXRzLm5lbGVtKQorCSAgICB7CisJICAgICAgZXJyID0gY2hlY2tfc3ViZXhwX2xpbWl0cyAoZGZhLCBkZXN0X25vZGVzLCBjYW5kaWRhdGVzLCAmc2N0eC0+bGltaXRzLAorCQkJCQkgbWN0eC0+YmtyZWZfZW50cywgc3RyX2lkeCk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlyZXR1cm4gZXJyOworCSAgICB9CisJfQorCisgICAgICBzY3R4LT5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdID0gcmVfYWNxdWlyZV9zdGF0ZSAoJmVyciwgZGZhLCBkZXN0X25vZGVzKTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworICAgIH0KKworICBpZiAoY2FuZGlkYXRlcyAmJiBtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0tPmhhc19iYWNrcmVmKQorICAgIHsKKyAgICAgIGVyciA9IHNpZnRfc3RhdGVzX2JrcmVmIChtY3R4LCBzY3R4LCBzdHJfaWR4LCBjYW5kaWRhdGVzKTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2FkZF9lcHNpbG9uX3NyY19ub2RlcyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMsCisJCSAgICAgICBjb25zdCByZV9ub2RlX3NldCAqY2FuZGlkYXRlcykKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKyAgaW50IGk7CisKKyAgcmVfZGZhc3RhdGVfdCAqc3RhdGUgPSByZV9hY3F1aXJlX3N0YXRlICgmZXJyLCBkZmEsIGRlc3Rfbm9kZXMpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKworICBpZiAoIXN0YXRlLT5pbnZlY2xvc3VyZS5hbGxvYykKKyAgICB7CisgICAgICBlcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJnN0YXRlLT5pbnZlY2xvc3VyZSwgZGVzdF9ub2Rlcy0+bmVsZW0pOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgZm9yIChpID0gMDsgaSA8IGRlc3Rfbm9kZXMtPm5lbGVtOyBpKyspCisJeworCSAgZXJyID0gcmVfbm9kZV9zZXRfbWVyZ2UgKCZzdGF0ZS0+aW52ZWNsb3N1cmUsCisJCQkJICAgZGZhLT5pbnZlY2xvc3VyZXMgKyBkZXN0X25vZGVzLT5lbGVtc1tpXSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICB9CisgIHJldHVybiByZV9ub2RlX3NldF9hZGRfaW50ZXJzZWN0IChkZXN0X25vZGVzLCBjYW5kaWRhdGVzLAorCQkJCSAgICAmc3RhdGUtPmludmVjbG9zdXJlKTsKK30KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitzdWJfZXBzaWxvbl9zcmNfbm9kZXMgKGNvbnN0IHJlX2RmYV90ICpkZmEsIGludCBub2RlLCByZV9ub2RlX3NldCAqZGVzdF9ub2RlcywKKwkJICAgICAgIGNvbnN0IHJlX25vZGVfc2V0ICpjYW5kaWRhdGVzKQoreworICAgIGludCBlY2xfaWR4OworICAgIHJlZ19lcnJjb2RlX3QgZXJyOworICAgIHJlX25vZGVfc2V0ICppbnZfZWNsb3N1cmUgPSBkZmEtPmludmVjbG9zdXJlcyArIG5vZGU7CisgICAgcmVfbm9kZV9zZXQgZXhjZXB0X25vZGVzOworICAgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZleGNlcHRfbm9kZXMpOworICAgIGZvciAoZWNsX2lkeCA9IDA7IGVjbF9pZHggPCBpbnZfZWNsb3N1cmUtPm5lbGVtOyArK2VjbF9pZHgpCisgICAgICB7CisJaW50IGN1cl9ub2RlID0gaW52X2VjbG9zdXJlLT5lbGVtc1tlY2xfaWR4XTsKKwlpZiAoY3VyX25vZGUgPT0gbm9kZSkKKwkgIGNvbnRpbnVlOworCWlmIChJU19FUFNJTE9OX05PREUgKGRmYS0+bm9kZXNbY3VyX25vZGVdLnR5cGUpKQorCSAgeworCSAgICBpbnQgZWRzdDEgPSBkZmEtPmVkZXN0c1tjdXJfbm9kZV0uZWxlbXNbMF07CisJICAgIGludCBlZHN0MiA9ICgoZGZhLT5lZGVzdHNbY3VyX25vZGVdLm5lbGVtID4gMSkKKwkJCSA/IGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5lbGVtc1sxXSA6IC0xKTsKKwkgICAgaWYgKCghcmVfbm9kZV9zZXRfY29udGFpbnMgKGludl9lY2xvc3VyZSwgZWRzdDEpCisJCSAmJiByZV9ub2RlX3NldF9jb250YWlucyAoZGVzdF9ub2RlcywgZWRzdDEpKQorCQl8fCAoZWRzdDIgPiAwCisJCSAgICAmJiAhcmVfbm9kZV9zZXRfY29udGFpbnMgKGludl9lY2xvc3VyZSwgZWRzdDIpCisJCSAgICAmJiByZV9ub2RlX3NldF9jb250YWlucyAoZGVzdF9ub2RlcywgZWRzdDIpKSkKKwkgICAgICB7CisJCWVyciA9IHJlX25vZGVfc2V0X2FkZF9pbnRlcnNlY3QgKCZleGNlcHRfbm9kZXMsIGNhbmRpZGF0ZXMsCisJCQkJCQkgZGZhLT5pbnZlY2xvc3VyZXMgKyBjdXJfbm9kZSk7CisJCWlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICB7CisJCSAgICByZV9ub2RlX3NldF9mcmVlICgmZXhjZXB0X25vZGVzKTsKKwkJICAgIHJldHVybiBlcnI7CisJCSAgfQorCSAgICAgIH0KKwkgIH0KKyAgICAgIH0KKyAgICBmb3IgKGVjbF9pZHggPSAwOyBlY2xfaWR4IDwgaW52X2VjbG9zdXJlLT5uZWxlbTsgKytlY2xfaWR4KQorICAgICAgeworCWludCBjdXJfbm9kZSA9IGludl9lY2xvc3VyZS0+ZWxlbXNbZWNsX2lkeF07CisJaWYgKCFyZV9ub2RlX3NldF9jb250YWlucyAoJmV4Y2VwdF9ub2RlcywgY3VyX25vZGUpKQorCSAgeworCSAgICBpbnQgaWR4ID0gcmVfbm9kZV9zZXRfY29udGFpbnMgKGRlc3Rfbm9kZXMsIGN1cl9ub2RlKSAtIDE7CisJICAgIHJlX25vZGVfc2V0X3JlbW92ZV9hdCAoZGVzdF9ub2RlcywgaWR4KTsKKwkgIH0KKyAgICAgIH0KKyAgICByZV9ub2RlX3NldF9mcmVlICgmZXhjZXB0X25vZGVzKTsKKyAgICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19kc3RfbGltaXRzIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX25vZGVfc2V0ICpsaW1pdHMsCisJCSAgaW50IGRzdF9ub2RlLCBpbnQgZHN0X2lkeCwgaW50IHNyY19ub2RlLCBpbnQgc3JjX2lkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IGxpbV9pZHgsIHNyY19wb3MsIGRzdF9wb3M7CisKKyAgaW50IGRzdF9ia3JlZl9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBkc3RfaWR4KTsKKyAgaW50IHNyY19ia3JlZl9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBzcmNfaWR4KTsKKyAgZm9yIChsaW1faWR4ID0gMDsgbGltX2lkeCA8IGxpbWl0cy0+bmVsZW07ICsrbGltX2lkeCkKKyAgICB7CisgICAgICBpbnQgc3ViZXhwX2lkeDsKKyAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICplbnQ7CisgICAgICBlbnQgPSBtY3R4LT5ia3JlZl9lbnRzICsgbGltaXRzLT5lbGVtc1tsaW1faWR4XTsKKyAgICAgIHN1YmV4cF9pZHggPSBkZmEtPm5vZGVzW2VudC0+bm9kZV0ub3ByLmlkeDsKKworICAgICAgZHN0X3BvcyA9IGNoZWNrX2RzdF9saW1pdHNfY2FsY19wb3MgKG1jdHgsIGxpbWl0cy0+ZWxlbXNbbGltX2lkeF0sCisJCQkJCSAgIHN1YmV4cF9pZHgsIGRzdF9ub2RlLCBkc3RfaWR4LAorCQkJCQkgICBkc3RfYmtyZWZfaWR4KTsKKyAgICAgIHNyY19wb3MgPSBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zIChtY3R4LCBsaW1pdHMtPmVsZW1zW2xpbV9pZHhdLAorCQkJCQkgICBzdWJleHBfaWR4LCBzcmNfbm9kZSwgc3JjX2lkeCwKKwkJCQkJICAgc3JjX2JrcmVmX2lkeCk7CisKKyAgICAgIC8qIEluIGNhc2Ugb2Y6CisJIDxzcmM+IDxkc3Q+ICggPHN1YmV4cD4gKQorCSAoIDxzdWJleHA+ICkgPHNyYz4gPGRzdD4KKwkgKCA8c3ViZXhwMT4gPHNyYz4gPHN1YmV4cDI+IDxkc3Q+IDxzdWJleHAzPiApICAqLworICAgICAgaWYgKHNyY19wb3MgPT0gZHN0X3BvcykKKwljb250aW51ZTsgLyogVGhpcyBpcyB1bnJlbGF0ZWQgbGltaXRhdGlvbi4gICovCisgICAgICBlbHNlCisJcmV0dXJuIDE7CisgICAgfQorICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2RzdF9saW1pdHNfY2FsY19wb3NfMSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgYm91bmRhcmllcywKKwkJCSAgICAgaW50IHN1YmV4cF9pZHgsIGludCBmcm9tX25vZGUsIGludCBia3JlZl9pZHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGNvbnN0IHJlX25vZGVfc2V0ICplY2xvc3VyZXMgPSBkZmEtPmVjbG9zdXJlcyArIGZyb21fbm9kZTsKKyAgaW50IG5vZGVfaWR4OworCisgIC8qIEVsc2UsIHdlIGFyZSBvbiB0aGUgYm91bmRhcnk6IGV4YW1pbmUgdGhlIG5vZGVzIG9uIHRoZSBlcHNpbG9uCisgICAgIGNsb3N1cmUuICAqLworICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBlY2xvc3VyZXMtPm5lbGVtOyArK25vZGVfaWR4KQorICAgIHsKKyAgICAgIGludCBub2RlID0gZWNsb3N1cmVzLT5lbGVtc1tub2RlX2lkeF07CisgICAgICBzd2l0Y2ggKGRmYS0+bm9kZXNbbm9kZV0udHlwZSkKKwl7CisJY2FzZSBPUF9CQUNLX1JFRjoKKwkgIGlmIChia3JlZl9pZHggIT0gLTEpCisJICAgIHsKKwkgICAgICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqZW50ID0gbWN0eC0+YmtyZWZfZW50cyArIGJrcmVmX2lkeDsKKwkgICAgICBkbworCQl7CisJCSAgaW50IGRzdCwgY3BvczsKKworCQkgIGlmIChlbnQtPm5vZGUgIT0gbm9kZSkKKwkJICAgIGNvbnRpbnVlOworCisJCSAgaWYgKHN1YmV4cF9pZHggPCBCSVRTRVRfV09SRF9CSVRTCisJCSAgICAgICYmICEoZW50LT5lcHNfcmVhY2hhYmxlX3N1YmV4cHNfbWFwCisJCQkgICAmICgoYml0c2V0X3dvcmRfdCkgMSA8PCBzdWJleHBfaWR4KSkpCisJCSAgICBjb250aW51ZTsKKworCQkgIC8qIFJlY3Vyc2UgdHJ5aW5nIHRvIHJlYWNoIHRoZSBPUF9PUEVOX1NVQkVYUCBhbmQKKwkJICAgICBPUF9DTE9TRV9TVUJFWFAgY2FzZXMgYmVsb3cuICBCdXQsIGlmIHRoZQorCQkgICAgIGRlc3RpbmF0aW9uIG5vZGUgaXMgdGhlIHNhbWUgbm9kZSBhcyB0aGUgc291cmNlCisJCSAgICAgbm9kZSwgZG9uJ3QgcmVjdXJzZSBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGFuCisJCSAgICAgaW5maW5pdGUgbG9vcDogYSByZWdleCB0aGF0IGV4aGliaXRzIHRoaXMgYmVoYXZpb3IKKwkJICAgICBpcyAoKVwxKlwxKiAgKi8KKwkJICBkc3QgPSBkZmEtPmVkZXN0c1tub2RlXS5lbGVtc1swXTsKKwkJICBpZiAoZHN0ID09IGZyb21fbm9kZSkKKwkJICAgIHsKKwkJICAgICAgaWYgKGJvdW5kYXJpZXMgJiAxKQorCQkJcmV0dXJuIC0xOworCQkgICAgICBlbHNlIC8qIGlmIChib3VuZGFyaWVzICYgMikgKi8KKwkJCXJldHVybiAwOworCQkgICAgfQorCisJCSAgY3BvcyA9CisJCSAgICBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zXzEgKG1jdHgsIGJvdW5kYXJpZXMsIHN1YmV4cF9pZHgsCisJCQkJCQkgZHN0LCBia3JlZl9pZHgpOworCQkgIGlmIChjcG9zID09IC0xIC8qICYmIChib3VuZGFyaWVzICYgMSkgKi8pCisJCSAgICByZXR1cm4gLTE7CisJCSAgaWYgKGNwb3MgPT0gMCAmJiAoYm91bmRhcmllcyAmIDIpKQorCQkgICAgcmV0dXJuIDA7CisKKwkJICBpZiAoc3ViZXhwX2lkeCA8IEJJVFNFVF9XT1JEX0JJVFMpCisJCSAgICBlbnQtPmVwc19yZWFjaGFibGVfc3ViZXhwc19tYXAKKwkJICAgICAgJj0gfigoYml0c2V0X3dvcmRfdCkgMSA8PCBzdWJleHBfaWR4KTsKKwkJfQorCSAgICAgIHdoaWxlIChlbnQrKy0+bW9yZSk7CisJICAgIH0KKwkgIGJyZWFrOworCisJY2FzZSBPUF9PUEVOX1NVQkVYUDoKKwkgIGlmICgoYm91bmRhcmllcyAmIDEpICYmIHN1YmV4cF9pZHggPT0gZGZhLT5ub2Rlc1tub2RlXS5vcHIuaWR4KQorCSAgICByZXR1cm4gLTE7CisJICBicmVhazsKKworCWNhc2UgT1BfQ0xPU0VfU1VCRVhQOgorCSAgaWYgKChib3VuZGFyaWVzICYgMikgJiYgc3ViZXhwX2lkeCA9PSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJICAgIHJldHVybiAwOworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgICBicmVhazsKKwl9CisgICAgfQorCisgIHJldHVybiAoYm91bmRhcmllcyAmIDIpID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBsaW1pdCwKKwkJCSAgIGludCBzdWJleHBfaWR4LCBpbnQgZnJvbV9ub2RlLCBpbnQgc3RyX2lkeCwKKwkJCSAgIGludCBia3JlZl9pZHgpCit7CisgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5ICpsaW0gPSBtY3R4LT5ia3JlZl9lbnRzICsgbGltaXQ7CisgIGludCBib3VuZGFyaWVzOworCisgIC8qIElmIHdlIGFyZSBvdXRzaWRlIHRoZSByYW5nZSBvZiB0aGUgc3ViZXhwcmVzc2lvbiwgcmV0dXJuIC0xIG9yIDEuICAqLworICBpZiAoc3RyX2lkeCA8IGxpbS0+c3ViZXhwX2Zyb20pCisgICAgcmV0dXJuIC0xOworCisgIGlmIChsaW0tPnN1YmV4cF90byA8IHN0cl9pZHgpCisgICAgcmV0dXJuIDE7CisKKyAgLyogSWYgd2UgYXJlIHdpdGhpbiB0aGUgc3ViZXhwcmVzc2lvbiwgcmV0dXJuIDAuICAqLworICBib3VuZGFyaWVzID0gKHN0cl9pZHggPT0gbGltLT5zdWJleHBfZnJvbSk7CisgIGJvdW5kYXJpZXMgfD0gKHN0cl9pZHggPT0gbGltLT5zdWJleHBfdG8pIDw8IDE7CisgIGlmIChib3VuZGFyaWVzID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgLyogRWxzZSwgZXhhbWluZSBlcHNpbG9uIGNsb3N1cmUuICAqLworICByZXR1cm4gY2hlY2tfZHN0X2xpbWl0c19jYWxjX3Bvc18xIChtY3R4LCBib3VuZGFyaWVzLCBzdWJleHBfaWR4LAorCQkJCSAgICAgIGZyb21fbm9kZSwgYmtyZWZfaWR4KTsKK30KKworLyogQ2hlY2sgdGhlIGxpbWl0YXRpb25zIG9mIHN1YiBleHByZXNzaW9ucyBMSU1JVFMsIGFuZCByZW1vdmUgdGhlIG5vZGVzCisgICB3aGljaCBhcmUgYWdhaW5zdCBsaW1pdGF0aW9ucyBmcm9tIERFU1RfTk9ERVMuICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfc3ViZXhwX2xpbWl0cyAoY29uc3QgcmVfZGZhX3QgKmRmYSwgcmVfbm9kZV9zZXQgKmRlc3Rfbm9kZXMsCisJCSAgICAgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMsIHJlX25vZGVfc2V0ICpsaW1pdHMsCisJCSAgICAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmJrcmVmX2VudHMsIGludCBzdHJfaWR4KQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IG5vZGVfaWR4LCBsaW1faWR4OworCisgIGZvciAobGltX2lkeCA9IDA7IGxpbV9pZHggPCBsaW1pdHMtPm5lbGVtOyArK2xpbV9pZHgpCisgICAgeworICAgICAgaW50IHN1YmV4cF9pZHg7CisgICAgICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqZW50OworICAgICAgZW50ID0gYmtyZWZfZW50cyArIGxpbWl0cy0+ZWxlbXNbbGltX2lkeF07CisKKyAgICAgIGlmIChzdHJfaWR4IDw9IGVudC0+c3ViZXhwX2Zyb20gfHwgZW50LT5zdHJfaWR4IDwgc3RyX2lkeCkKKwljb250aW51ZTsgLyogVGhpcyBpcyB1bnJlbGF0ZWQgbGltaXRhdGlvbi4gICovCisKKyAgICAgIHN1YmV4cF9pZHggPSBkZmEtPm5vZGVzW2VudC0+bm9kZV0ub3ByLmlkeDsKKyAgICAgIGlmIChlbnQtPnN1YmV4cF90byA9PSBzdHJfaWR4KQorCXsKKwkgIGludCBvcHNfbm9kZSA9IC0xOworCSAgaW50IGNsc19ub2RlID0gLTE7CisJICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBkZXN0X25vZGVzLT5uZWxlbTsgKytub2RlX2lkeCkKKwkgICAgeworCSAgICAgIGludCBub2RlID0gZGVzdF9ub2Rlcy0+ZWxlbXNbbm9kZV9pZHhdOworCSAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tub2RlXS50eXBlOworCSAgICAgIGlmICh0eXBlID09IE9QX09QRU5fU1VCRVhQCisJCSAgJiYgc3ViZXhwX2lkeCA9PSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJCW9wc19ub2RlID0gbm9kZTsKKwkgICAgICBlbHNlIGlmICh0eXBlID09IE9QX0NMT1NFX1NVQkVYUAorCQkgICAgICAgJiYgc3ViZXhwX2lkeCA9PSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJCWNsc19ub2RlID0gbm9kZTsKKwkgICAgfQorCisJICAvKiBDaGVjayB0aGUgbGltaXRhdGlvbiBvZiB0aGUgb3BlbiBzdWJleHByZXNzaW9uLiAgKi8KKwkgIC8qIE5vdGUgdGhhdCAoZW50LT5zdWJleHBfdG8gPSBzdHJfaWR4ICE9IGVudC0+c3ViZXhwX2Zyb20pLiAgKi8KKwkgIGlmIChvcHNfbm9kZSA+PSAwKQorCSAgICB7CisJICAgICAgZXJyID0gc3ViX2Vwc2lsb25fc3JjX25vZGVzIChkZmEsIG9wc19ub2RlLCBkZXN0X25vZGVzLAorCQkJCQkgICBjYW5kaWRhdGVzKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKworCSAgLyogQ2hlY2sgdGhlIGxpbWl0YXRpb24gb2YgdGhlIGNsb3NlIHN1YmV4cHJlc3Npb24uICAqLworCSAgaWYgKGNsc19ub2RlID49IDApCisJICAgIGZvciAobm9kZV9pZHggPSAwOyBub2RlX2lkeCA8IGRlc3Rfbm9kZXMtPm5lbGVtOyArK25vZGVfaWR4KQorCSAgICAgIHsKKwkJaW50IG5vZGUgPSBkZXN0X25vZGVzLT5lbGVtc1tub2RlX2lkeF07CisJCWlmICghcmVfbm9kZV9zZXRfY29udGFpbnMgKGRmYS0+aW52ZWNsb3N1cmVzICsgbm9kZSwKKwkJCQkJICAgY2xzX25vZGUpCisJCSAgICAmJiAhcmVfbm9kZV9zZXRfY29udGFpbnMgKGRmYS0+ZWNsb3N1cmVzICsgbm9kZSwKKwkJCQkJICAgICAgY2xzX25vZGUpKQorCQkgIHsKKwkJICAgIC8qIEl0IGlzIGFnYWluc3QgdGhpcyBsaW1pdGF0aW9uLgorCQkgICAgICAgUmVtb3ZlIGl0IGZvcm0gdGhlIGN1cnJlbnQgc2lmdGVkIHN0YXRlLiAgKi8KKwkJICAgIGVyciA9IHN1Yl9lcHNpbG9uX3NyY19ub2RlcyAoZGZhLCBub2RlLCBkZXN0X25vZGVzLAorCQkJCQkJIGNhbmRpZGF0ZXMpOworCQkgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgICAgICByZXR1cm4gZXJyOworCQkgICAgLS1ub2RlX2lkeDsKKwkJICB9CisJICAgICAgfQorCX0KKyAgICAgIGVsc2UgLyogKGVudC0+c3ViZXhwX3RvICE9IHN0cl9pZHgpICAqLworCXsKKwkgIGZvciAobm9kZV9pZHggPSAwOyBub2RlX2lkeCA8IGRlc3Rfbm9kZXMtPm5lbGVtOyArK25vZGVfaWR4KQorCSAgICB7CisJICAgICAgaW50IG5vZGUgPSBkZXN0X25vZGVzLT5lbGVtc1tub2RlX2lkeF07CisJICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBkZmEtPm5vZGVzW25vZGVdLnR5cGU7CisJICAgICAgaWYgKHR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQIHx8IHR5cGUgPT0gT1BfT1BFTl9TVUJFWFApCisJCXsKKwkJICBpZiAoc3ViZXhwX2lkeCAhPSBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHgpCisJCSAgICBjb250aW51ZTsKKwkJICAvKiBJdCBpcyBhZ2FpbnN0IHRoaXMgbGltaXRhdGlvbi4KKwkJICAgICBSZW1vdmUgaXQgZm9ybSB0aGUgY3VycmVudCBzaWZ0ZWQgc3RhdGUuICAqLworCQkgIGVyciA9IHN1Yl9lcHNpbG9uX3NyY19ub2RlcyAoZGZhLCBub2RlLCBkZXN0X25vZGVzLAorCQkJCQkgICAgICAgY2FuZGlkYXRlcyk7CisJCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQkgICAgcmV0dXJuIGVycjsKKwkJfQorCSAgICB9CisJfQorICAgIH0KKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3NpZnRfc3RhdGVzX2JrcmVmIChjb25zdCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX3NpZnRfY29udGV4dF90ICpzY3R4LAorCQkgICBpbnQgc3RyX2lkeCwgY29uc3QgcmVfbm9kZV9zZXQgKmNhbmRpZGF0ZXMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgbm9kZV9pZHgsIG5vZGU7CisgIHJlX3NpZnRfY29udGV4dF90IGxvY2FsX3NjdHg7CisgIGludCBmaXJzdF9pZHggPSBzZWFyY2hfY3VyX2JrcmVmX2VudHJ5IChtY3R4LCBzdHJfaWR4KTsKKworICBpZiAoZmlyc3RfaWR4ID09IC0xKQorICAgIHJldHVybiBSRUdfTk9FUlJPUjsKKworICBsb2NhbF9zY3R4LnNpZnRlZF9zdGF0ZXMgPSBOVUxMOyAvKiBNYXJrIHRoYXQgaXQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQuICAqLworCisgIGZvciAobm9kZV9pZHggPSAwOyBub2RlX2lkeCA8IGNhbmRpZGF0ZXMtPm5lbGVtOyArK25vZGVfaWR4KQorICAgIHsKKyAgICAgIGludCBlbmFibGVkX2lkeDsKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlOworICAgICAgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmVudHJ5OworICAgICAgbm9kZSA9IGNhbmRpZGF0ZXMtPmVsZW1zW25vZGVfaWR4XTsKKyAgICAgIHR5cGUgPSBkZmEtPm5vZGVzW25vZGVdLnR5cGU7CisgICAgICAvKiBBdm9pZCBpbmZpbml0ZSBsb29wIGZvciB0aGUgUkVzIGxpa2UgIigpXDErIi4gICovCisgICAgICBpZiAobm9kZSA9PSBzY3R4LT5sYXN0X25vZGUgJiYgc3RyX2lkeCA9PSBzY3R4LT5sYXN0X3N0cl9pZHgpCisJY29udGludWU7CisgICAgICBpZiAodHlwZSAhPSBPUF9CQUNLX1JFRikKKwljb250aW51ZTsKKworICAgICAgZW50cnkgPSBtY3R4LT5ia3JlZl9lbnRzICsgZmlyc3RfaWR4OworICAgICAgZW5hYmxlZF9pZHggPSBmaXJzdF9pZHg7CisgICAgICBkbworCXsKKwkgIGludCBzdWJleHBfbGVuOworCSAgaW50IHRvX2lkeDsKKwkgIGludCBkc3Rfbm9kZTsKKwkgIGludCByZXQ7CisJICByZV9kZmFzdGF0ZV90ICpjdXJfc3RhdGU7CisKKwkgIGlmIChlbnRyeS0+bm9kZSAhPSBub2RlKQorCSAgICBjb250aW51ZTsKKwkgIHN1YmV4cF9sZW4gPSBlbnRyeS0+c3ViZXhwX3RvIC0gZW50cnktPnN1YmV4cF9mcm9tOworCSAgdG9faWR4ID0gc3RyX2lkeCArIHN1YmV4cF9sZW47CisJICBkc3Rfbm9kZSA9IChzdWJleHBfbGVuID8gZGZhLT5uZXh0c1tub2RlXQorCQkgICAgICA6IGRmYS0+ZWRlc3RzW25vZGVdLmVsZW1zWzBdKTsKKworCSAgaWYgKHRvX2lkeCA+IHNjdHgtPmxhc3Rfc3RyX2lkeAorCSAgICAgIHx8IHNjdHgtPnNpZnRlZF9zdGF0ZXNbdG9faWR4XSA9PSBOVUxMCisJICAgICAgfHwgIVNUQVRFX05PREVfQ09OVEFJTlMgKHNjdHgtPnNpZnRlZF9zdGF0ZXNbdG9faWR4XSwgZHN0X25vZGUpCisJICAgICAgfHwgY2hlY2tfZHN0X2xpbWl0cyAobWN0eCwgJnNjdHgtPmxpbWl0cywgbm9kZSwKKwkJCQkgICBzdHJfaWR4LCBkc3Rfbm9kZSwgdG9faWR4KSkKKwkgICAgY29udGludWU7CisKKwkgIGlmIChsb2NhbF9zY3R4LnNpZnRlZF9zdGF0ZXMgPT0gTlVMTCkKKwkgICAgeworCSAgICAgIGxvY2FsX3NjdHggPSAqc2N0eDsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZsb2NhbF9zY3R4LmxpbWl0cywgJnNjdHgtPmxpbWl0cyk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICBsb2NhbF9zY3R4Lmxhc3Rfbm9kZSA9IG5vZGU7CisJICBsb2NhbF9zY3R4Lmxhc3Rfc3RyX2lkeCA9IHN0cl9pZHg7CisJICByZXQgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZsb2NhbF9zY3R4LmxpbWl0cywgZW5hYmxlZF9pZHgpOworCSAgaWYgKEJFIChyZXQgPCAwLCAwKSkKKwkgICAgeworCSAgICAgIGVyciA9IFJFR19FU1BBQ0U7CisJICAgICAgZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgY3VyX3N0YXRlID0gbG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdOworCSAgZXJyID0gc2lmdF9zdGF0ZXNfYmFja3dhcmQgKG1jdHgsICZsb2NhbF9zY3R4KTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBmcmVlX3JldHVybjsKKwkgIGlmIChzY3R4LT5saW1pdGVkX3N0YXRlcyAhPSBOVUxMKQorCSAgICB7CisJICAgICAgZXJyID0gbWVyZ2Vfc3RhdGVfYXJyYXkgKGRmYSwgc2N0eC0+bGltaXRlZF9zdGF0ZXMsCisJCQkJICAgICAgIGxvY2FsX3NjdHguc2lmdGVkX3N0YXRlcywKKwkJCQkgICAgICAgc3RyX2lkeCArIDEpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCSAgbG9jYWxfc2N0eC5zaWZ0ZWRfc3RhdGVzW3N0cl9pZHhdID0gY3VyX3N0YXRlOworCSAgcmVfbm9kZV9zZXRfcmVtb3ZlICgmbG9jYWxfc2N0eC5saW1pdHMsIGVuYWJsZWRfaWR4KTsKKworCSAgLyogbWN0eC0+YmtyZWZfZW50cyBtYXkgaGF2ZSBjaGFuZ2VkLCByZWxvYWQgdGhlIHBvaW50ZXIuICAqLworCSAgZW50cnkgPSBtY3R4LT5ia3JlZl9lbnRzICsgZW5hYmxlZF9pZHg7CisJfQorICAgICAgd2hpbGUgKGVuYWJsZWRfaWR4KyssIGVudHJ5KystPm1vcmUpOworICAgIH0KKyAgZXJyID0gUkVHX05PRVJST1I7CisgZnJlZV9yZXR1cm46CisgIGlmIChsb2NhbF9zY3R4LnNpZnRlZF9zdGF0ZXMgIT0gTlVMTCkKKyAgICB7CisgICAgICByZV9ub2RlX3NldF9mcmVlICgmbG9jYWxfc2N0eC5saW1pdHMpOworICAgIH0KKworICByZXR1cm4gZXJyOworfQorCisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4Tgorc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK3NpZnRfc3RhdGVzX2l0ZXJfbWIgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgcmVfc2lmdF9jb250ZXh0X3QgKnNjdHgsCisJCSAgICAgaW50IG5vZGVfaWR4LCBpbnQgc3RyX2lkeCwgaW50IG1heF9zdHJfaWR4KQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBpbnQgbmFjY2VwdGVkOworICAvKiBDaGVjayB0aGUgbm9kZSBjYW4gYWNjZXB0IGBtdWx0aSBieXRlJy4gICovCisgIG5hY2NlcHRlZCA9IGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChkZmEsIG5vZGVfaWR4LCAmbWN0eC0+aW5wdXQsIHN0cl9pZHgpOworICBpZiAobmFjY2VwdGVkID4gMCAmJiBzdHJfaWR4ICsgbmFjY2VwdGVkIDw9IG1heF9zdHJfaWR4ICYmCisgICAgICAhU1RBVEVfTk9ERV9DT05UQUlOUyAoc2N0eC0+c2lmdGVkX3N0YXRlc1tzdHJfaWR4ICsgbmFjY2VwdGVkXSwKKwkJCSAgICBkZmEtPm5leHRzW25vZGVfaWR4XSkpCisgICAgLyogVGhlIG5vZGUgY2FuJ3QgYWNjZXB0IHRoZSBgbXVsdGkgYnl0ZScsIG9yIHRoZQorICAgICAgIGRlc3RpbmF0aW9uIHdhcyBhbHJlYWR5IHRocm93biBhd2F5LCB0aGVuIHRoZSBub2RlCisgICAgICAgY291bGRuJ3QgYWNjZXB0IHRoZSBjdXJyZW50IGlucHV0IGBtdWx0aSBieXRlJy4gICAqLworICAgIG5hY2NlcHRlZCA9IDA7CisgIC8qIE90aGVyd2lzZSwgaXQgaXMgc3VyZSB0aGF0IHRoZSBub2RlIGNvdWxkIGFjY2VwdAorICAgICBgbmFjY2VwdGVkJyBieXRlcyBpbnB1dC4gICovCisgIHJldHVybiBuYWNjZXB0ZWQ7Cit9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworDAorLyogRnVuY3Rpb25zIGZvciBzdGF0ZSB0cmFuc2l0aW9uLiAgKi8KKworLyogUmV0dXJuIHRoZSBuZXh0IHN0YXRlIHRvIHdoaWNoIHRoZSBjdXJyZW50IHN0YXRlIFNUQVRFIHdpbGwgdHJhbnNpdCBieQorICAgYWNjZXB0aW5nIHRoZSBjdXJyZW50IGlucHV0IGJ5dGUsIGFuZCB1cGRhdGUgU1RBVEVfTE9HIGlmIG5lY2Vzc2FyeS4KKyAgIElmIFNUQVRFIGNhbiBhY2NlcHQgYSBtdWx0aWJ5dGUgY2hhci9jb2xsYXRpbmcgZWxlbWVudC9iYWNrIHJlZmVyZW5jZQorICAgdXBkYXRlIHRoZSBkZXN0aW5hdGlvbiBvZiBTVEFURV9MT0cuICAqLworCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCitpbnRlcm5hbF9mdW5jdGlvbgordHJhbnNpdF9zdGF0ZSAocmVnX2VycmNvZGVfdCAqZXJyLCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsCisJICAgICAgIHJlX2RmYXN0YXRlX3QgKnN0YXRlKQoreworICByZV9kZmFzdGF0ZV90ICoqdHJ0YWJsZTsKKyAgdW5zaWduZWQgY2hhciBjaDsKKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIC8qIElmIHRoZSBjdXJyZW50IHN0YXRlIGNhbiBhY2NlcHQgbXVsdGlieXRlLiAgKi8KKyAgaWYgKEJFIChzdGF0ZS0+YWNjZXB0X21iLCAwKSkKKyAgICB7CisgICAgICAqZXJyID0gdHJhbnNpdF9zdGF0ZV9tYiAobWN0eCwgc3RhdGUpOworICAgICAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworICAvKiBUaGVuIGRlY2lkZSB0aGUgbmV4dCBzdGF0ZSB3aXRoIHRoZSBzaW5nbGUgYnl0ZS4gICovCisjaWYgMAorICBpZiAoMCkKKyAgICAvKiBkb24ndCB1c2UgdHJhbnNpdGlvbiB0YWJsZSAgKi8KKyAgICByZXR1cm4gdHJhbnNpdF9zdGF0ZV9zYiAoZXJyLCBtY3R4LCBzdGF0ZSk7CisjZW5kaWYKKworICAvKiBVc2UgdHJhbnNpdGlvbiB0YWJsZSAgKi8KKyAgY2ggPSByZV9zdHJpbmdfZmV0Y2hfYnl0ZSAoJm1jdHgtPmlucHV0KTsKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB0cnRhYmxlID0gc3RhdGUtPnRydGFibGU7CisgICAgICBpZiAoQkUgKHRydGFibGUgIT0gTlVMTCwgMSkpCisJcmV0dXJuIHRydGFibGVbY2hdOworCisgICAgICB0cnRhYmxlID0gc3RhdGUtPndvcmRfdHJ0YWJsZTsKKyAgICAgIGlmIChCRSAodHJ0YWJsZSAhPSBOVUxMLCAxKSkKKwl7CisJICB1bnNpZ25lZCBpbnQgY29udGV4dDsKKwkgIGNvbnRleHQKKwkgICAgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LAorCQkJCSAgICByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSAtIDEsCisJCQkJICAgIG1jdHgtPmVmbGFncyk7CisJICBpZiAoSVNfV09SRF9DT05URVhUIChjb250ZXh0KSkKKwkgICAgcmV0dXJuIHRydGFibGVbY2ggKyBTQkNfTUFYXTsKKwkgIGVsc2UKKwkgICAgcmV0dXJuIHRydGFibGVbY2hdOworCX0KKworICAgICAgaWYgKCFidWlsZF90cnRhYmxlIChtY3R4LT5kZmEsIHN0YXRlKSkKKwl7CisJICAqZXJyID0gUkVHX0VTUEFDRTsKKwkgIHJldHVybiBOVUxMOworCX0KKworICAgICAgLyogUmV0cnksIHdlIG5vdyBoYXZlIGEgdHJhbnNpdGlvbiB0YWJsZS4gICovCisgICAgfQorfQorCisvKiBVcGRhdGUgdGhlIHN0YXRlX2xvZyBpZiB3ZSBuZWVkICovCitzdGF0aWMgcmVfZGZhc3RhdGVfdCAqCitpbnRlcm5hbF9mdW5jdGlvbgorbWVyZ2Vfc3RhdGVfd2l0aF9sb2cgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkgICAgICByZV9kZmFzdGF0ZV90ICpuZXh0X3N0YXRlKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICBpbnQgY3VyX2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpOworCisgIGlmIChjdXJfaWR4ID4gbWN0eC0+c3RhdGVfbG9nX3RvcCkKKyAgICB7CisgICAgICBtY3R4LT5zdGF0ZV9sb2dbY3VyX2lkeF0gPSBuZXh0X3N0YXRlOworICAgICAgbWN0eC0+c3RhdGVfbG9nX3RvcCA9IGN1cl9pZHg7CisgICAgfQorICBlbHNlIGlmIChtY3R4LT5zdGF0ZV9sb2dbY3VyX2lkeF0gPT0gTlVMTCkKKyAgICB7CisgICAgICBtY3R4LT5zdGF0ZV9sb2dbY3VyX2lkeF0gPSBuZXh0X3N0YXRlOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJlX2RmYXN0YXRlX3QgKnBzdGF0ZTsKKyAgICAgIHVuc2lnbmVkIGludCBjb250ZXh0OworICAgICAgcmVfbm9kZV9zZXQgbmV4dF9ub2RlcywgKmxvZ19ub2RlcywgKnRhYmxlX25vZGVzID0gTlVMTDsKKyAgICAgIC8qIElmIChzdGF0ZV9sb2dbY3VyX2lkeF0gIT0gMCksIGl0IGltcGxpZXMgdGhhdCBjdXJfaWR4IGlzCisJIHRoZSBkZXN0aW5hdGlvbiBvZiBhIG11bHRpYnl0ZSBjaGFyL2NvbGxhdGluZyBlbGVtZW50LworCSBiYWNrIHJlZmVyZW5jZS4gIFRoZW4gdGhlIG5leHQgc3RhdGUgaXMgdGhlIHVuaW9uIHNldCBvZgorCSB0aGVzZSBkZXN0aW5hdGlvbnMgYW5kIHRoZSByZXN1bHRzIG9mIHRoZSB0cmFuc2l0aW9uIHRhYmxlLiAgKi8KKyAgICAgIHBzdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tjdXJfaWR4XTsKKyAgICAgIGxvZ19ub2RlcyA9IHBzdGF0ZS0+ZW50cmFuY2Vfbm9kZXM7CisgICAgICBpZiAobmV4dF9zdGF0ZSAhPSBOVUxMKQorCXsKKwkgIHRhYmxlX25vZGVzID0gbmV4dF9zdGF0ZS0+ZW50cmFuY2Vfbm9kZXM7CisJICAqZXJyID0gcmVfbm9kZV9zZXRfaW5pdF91bmlvbiAoJm5leHRfbm9kZXMsIHRhYmxlX25vZGVzLAorCQkJCQkgICAgIGxvZ19ub2Rlcyk7CisJICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gTlVMTDsKKwl9CisgICAgICBlbHNlCisJbmV4dF9ub2RlcyA9ICpsb2dfbm9kZXM7CisgICAgICAvKiBOb3RlOiBXZSBhbHJlYWR5IGFkZCB0aGUgbm9kZXMgb2YgdGhlIGluaXRpYWwgc3RhdGUsCisJIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBhZGQgdGhlbSBoZXJlLiAgKi8KKworICAgICAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsCisJCQkJICAgICAgcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCkgLSAxLAorCQkJCSAgICAgIG1jdHgtPmVmbGFncyk7CisgICAgICBuZXh0X3N0YXRlID0gbWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdCisJPSByZV9hY3F1aXJlX3N0YXRlX2NvbnRleHQgKGVyciwgZGZhLCAmbmV4dF9ub2RlcywgY29udGV4dCk7CisgICAgICAvKiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGVycm9ycyBoZXJlLCBzaW5jZSB0aGUgcmV0dXJuIHZhbHVlIG9mCisJIHRoaXMgZnVuY3Rpb24gaXMgbmV4dF9zdGF0ZSBhbmQgRVJSIGlzIGFscmVhZHkgc2V0LiAgKi8KKworICAgICAgaWYgKHRhYmxlX25vZGVzICE9IE5VTEwpCisJcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworICAgIH0KKworICBpZiAoQkUgKGRmYS0+bmJhY2tyZWYsIDApICYmIG5leHRfc3RhdGUgIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBDaGVjayBPUF9PUEVOX1NVQkVYUCBpbiB0aGUgY3VycmVudCBzdGF0ZSBpbiBjYXNlIHRoYXQgd2UgdXNlIHRoZW0KKwkgbGF0ZXIuICBXZSBtdXN0IGNoZWNrIHRoZW0gaGVyZSwgc2luY2UgdGhlIGJhY2sgcmVmZXJlbmNlcyBpbiB0aGUKKwkgbmV4dCBzdGF0ZSBtaWdodCB1c2UgdGhlbS4gICovCisgICAgICAqZXJyID0gY2hlY2tfc3ViZXhwX21hdGNoaW5nX3RvcCAobWN0eCwgJm5leHRfc3RhdGUtPm5vZGVzLAorCQkJCQljdXJfaWR4KTsKKyAgICAgIGlmIChCRSAoKmVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIE5VTEw7CisKKyAgICAgIC8qIElmIHRoZSBuZXh0IHN0YXRlIGhhcyBiYWNrIHJlZmVyZW5jZXMuICAqLworICAgICAgaWYgKG5leHRfc3RhdGUtPmhhc19iYWNrcmVmKQorCXsKKwkgICplcnIgPSB0cmFuc2l0X3N0YXRlX2JrcmVmIChtY3R4LCAmbmV4dF9zdGF0ZS0+bm9kZXMpOworCSAgaWYgKEJFICgqZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIE5VTEw7CisJICBuZXh0X3N0YXRlID0gbWN0eC0+c3RhdGVfbG9nW2N1cl9pZHhdOworCX0KKyAgICB9CisKKyAgcmV0dXJuIG5leHRfc3RhdGU7Cit9CisKKy8qIFNraXAgYnl0ZXMgaW4gdGhlIGlucHV0IHRoYXQgY29ycmVzcG9uZCB0byBwYXJ0IG9mIGEKKyAgIG11bHRpLWJ5dGUgbWF0Y2gsIHRoZW4gbG9vayBpbiB0aGUgbG9nIGZvciBhIHN0YXRlCisgICBmcm9tIHdoaWNoIHRvIHJlc3RhcnQgbWF0Y2hpbmcuICAqLworc3RhdGljIHJlX2RmYXN0YXRlX3QgKgoraW50ZXJuYWxfZnVuY3Rpb24KK2ZpbmRfcmVjb3Zlcl9zdGF0ZSAocmVnX2VycmNvZGVfdCAqZXJyLCByZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgpCit7CisgIHJlX2RmYXN0YXRlX3QgKmN1cl9zdGF0ZTsKKyAgZG8KKyAgICB7CisgICAgICBpbnQgbWF4ID0gbWN0eC0+c3RhdGVfbG9nX3RvcDsKKyAgICAgIGludCBjdXJfc3RyX2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpOworCisgICAgICBkbworCXsKKwkgIGlmICgrK2N1cl9zdHJfaWR4ID4gbWF4KQorCSAgICByZXR1cm4gTlVMTDsKKwkgIHJlX3N0cmluZ19za2lwX2J5dGVzICgmbWN0eC0+aW5wdXQsIDEpOworCX0KKyAgICAgIHdoaWxlIChtY3R4LT5zdGF0ZV9sb2dbY3VyX3N0cl9pZHhdID09IE5VTEwpOworCisgICAgICBjdXJfc3RhdGUgPSBtZXJnZV9zdGF0ZV93aXRoX2xvZyAoZXJyLCBtY3R4LCBOVUxMKTsKKyAgICB9CisgIHdoaWxlICgqZXJyID09IFJFR19OT0VSUk9SICYmIGN1cl9zdGF0ZSA9PSBOVUxMKTsKKyAgcmV0dXJuIGN1cl9zdGF0ZTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgdHJhbnNpdF9zdGF0ZS4gICovCisKKy8qIEZyb20gdGhlIG5vZGUgc2V0IENVUl9OT0RFUywgcGljayB1cCB0aGUgbm9kZXMgd2hvc2UgdHlwZXMgYXJlCisgICBPUF9PUEVOX1NVQkVYUCBhbmQgd2hpY2ggaGF2ZSBjb3JyZXNwb25kaW5nIGJhY2sgcmVmZXJlbmNlcyBpbiB0aGUgcmVndWxhcgorICAgZXhwcmVzc2lvbi4gQW5kIHJlZ2lzdGVyIHRoZW0gdG8gdXNlIHRoZW0gbGF0ZXIgZm9yIGV2YWx1YXRpbmcgdGhlCisgICBjb3JyZXNwb2RpbmcgYmFjayByZWZlcmVuY2VzLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCQkgICBpbnQgc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgaW50IG5vZGVfaWR4OworICByZWdfZXJyY29kZV90IGVycjsKKworICAvKiBUT0RPOiBUaGlzIGlzbid0IGVmZmljaWVudC4KKwkgICBCZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIG1vcmUgdGhhbiBvbmUgbm9kZXMgd2hvc2UgdHlwZXMgYXJlCisJICAgT1BfT1BFTl9TVUJFWFAgYW5kIHdob3NlIGluZGV4IGlzIFNVQkVYUF9JRFgsIHdlIG11c3QgY2hlY2sgYWxsCisJICAgbm9kZXMuCisJICAgRS5nLiBSRTogKGEpezJ9ICAqLworICBmb3IgKG5vZGVfaWR4ID0gMDsgbm9kZV9pZHggPCBjdXJfbm9kZXMtPm5lbGVtOyArK25vZGVfaWR4KQorICAgIHsKKyAgICAgIGludCBub2RlID0gY3VyX25vZGVzLT5lbGVtc1tub2RlX2lkeF07CisgICAgICBpZiAoZGZhLT5ub2Rlc1tub2RlXS50eXBlID09IE9QX09QRU5fU1VCRVhQCisJICAmJiBkZmEtPm5vZGVzW25vZGVdLm9wci5pZHggPCBCSVRTRVRfV09SRF9CSVRTCisJICAmJiAoZGZhLT51c2VkX2JrcmVmX21hcAorCSAgICAgICYgKChiaXRzZXRfd29yZF90KSAxIDw8IGRmYS0+bm9kZXNbbm9kZV0ub3ByLmlkeCkpKQorCXsKKwkgIGVyciA9IG1hdGNoX2N0eF9hZGRfc3VidG9wIChtY3R4LCBub2RlLCBzdHJfaWR4KTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKyNpZiAwCisvKiBSZXR1cm4gdGhlIG5leHQgc3RhdGUgdG8gd2hpY2ggdGhlIGN1cnJlbnQgc3RhdGUgU1RBVEUgd2lsbCB0cmFuc2l0IGJ5CisgICBhY2NlcHRpbmcgdGhlIGN1cnJlbnQgaW5wdXQgYnl0ZS4gICovCisKK3N0YXRpYyByZV9kZmFzdGF0ZV90ICoKK3RyYW5zaXRfc3RhdGVfc2IgKHJlZ19lcnJjb2RlX3QgKmVyciwgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LAorCQkgIHJlX2RmYXN0YXRlX3QgKnN0YXRlKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZV9ub2RlX3NldCBuZXh0X25vZGVzOworICByZV9kZmFzdGF0ZV90ICpuZXh0X3N0YXRlOworICBpbnQgbm9kZV9jbnQsIGN1cl9zdHJfaWR4ID0gcmVfc3RyaW5nX2N1cl9pZHggKCZtY3R4LT5pbnB1dCk7CisgIHVuc2lnbmVkIGludCBjb250ZXh0OworCisgICplcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJm5leHRfbm9kZXMsIHN0YXRlLT5ub2Rlcy5uZWxlbSArIDEpOworICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorICAgIHJldHVybiBOVUxMOworICBmb3IgKG5vZGVfY250ID0gMDsgbm9kZV9jbnQgPCBzdGF0ZS0+bm9kZXMubmVsZW07ICsrbm9kZV9jbnQpCisgICAgeworICAgICAgaW50IGN1cl9ub2RlID0gc3RhdGUtPm5vZGVzLmVsZW1zW25vZGVfY250XTsKKyAgICAgIGlmIChjaGVja19ub2RlX2FjY2VwdCAobWN0eCwgZGZhLT5ub2RlcyArIGN1cl9ub2RlLCBjdXJfc3RyX2lkeCkpCisJeworCSAgKmVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmbmV4dF9ub2RlcywKKwkJCQkgICAgZGZhLT5lY2xvc3VyZXMgKyBkZmEtPm5leHRzW2N1cl9ub2RlXSk7CisJICBpZiAoQkUgKCplcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworCSAgICAgIHJldHVybiBOVUxMOworCSAgICB9CisJfQorICAgIH0KKyAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIGN1cl9zdHJfaWR4LCBtY3R4LT5lZmxhZ3MpOworICBuZXh0X3N0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0IChlcnIsIGRmYSwgJm5leHRfbm9kZXMsIGNvbnRleHQpOworICAvKiBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGVycm9ycyBoZXJlLCBzaW5jZSB0aGUgcmV0dXJuIHZhbHVlIG9mCisgICAgIHRoaXMgZnVuY3Rpb24gaXMgbmV4dF9zdGF0ZSBhbmQgRVJSIGlzIGFscmVhZHkgc2V0LiAgKi8KKworICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisgIHJlX3N0cmluZ19za2lwX2J5dGVzICgmbWN0eC0+aW5wdXQsIDEpOworICByZXR1cm4gbmV4dF9zdGF0ZTsKK30KKyNlbmRpZgorCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgordHJhbnNpdF9zdGF0ZV9tYiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCByZV9kZmFzdGF0ZV90ICpwc3RhdGUpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgcHN0YXRlLT5ub2Rlcy5uZWxlbTsgKytpKQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0IGRlc3Rfbm9kZXMsICpuZXdfbm9kZXM7CisgICAgICBpbnQgY3VyX25vZGVfaWR4ID0gcHN0YXRlLT5ub2Rlcy5lbGVtc1tpXTsKKyAgICAgIGludCBuYWNjZXB0ZWQsIGRlc3RfaWR4OworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisgICAgICByZV9kZmFzdGF0ZV90ICpkZXN0X3N0YXRlOworCisgICAgICBpZiAoIWRmYS0+bm9kZXNbY3VyX25vZGVfaWR4XS5hY2NlcHRfbWIpCisJY29udGludWU7CisKKyAgICAgIGlmIChkZmEtPm5vZGVzW2N1cl9ub2RlX2lkeF0uY29uc3RyYWludCkKKwl7CisJICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwKKwkJCQkJICByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSwKKwkJCQkJICBtY3R4LT5lZmxhZ3MpOworCSAgaWYgKE5PVF9TQVRJU0ZZX05FWFRfQ09OU1RSQUlOVCAoZGZhLT5ub2Rlc1tjdXJfbm9kZV9pZHhdLmNvbnN0cmFpbnQsCisJCQkJCSAgIGNvbnRleHQpKQorCSAgICBjb250aW51ZTsKKwl9CisKKyAgICAgIC8qIEhvdyBtYW55IGJ5dGVzIHRoZSBub2RlIGNhbiBhY2NlcHQ/ICAqLworICAgICAgbmFjY2VwdGVkID0gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGRmYSwgY3VyX25vZGVfaWR4LCAmbWN0eC0+aW5wdXQsCisJCQkJCSAgIHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpKTsKKyAgICAgIGlmIChuYWNjZXB0ZWQgPT0gMCkKKwljb250aW51ZTsKKworICAgICAgLyogVGhlIG5vZGUgY2FuIGFjY2VwdHMgYG5hY2NlcHRlZCcgYnl0ZXMuICAqLworICAgICAgZGVzdF9pZHggPSByZV9zdHJpbmdfY3VyX2lkeCAoJm1jdHgtPmlucHV0KSArIG5hY2NlcHRlZDsKKyAgICAgIG1jdHgtPm1heF9tYl9lbGVtX2xlbiA9ICgobWN0eC0+bWF4X21iX2VsZW1fbGVuIDwgbmFjY2VwdGVkKSA/IG5hY2NlcHRlZAorCQkJICAgICAgIDogbWN0eC0+bWF4X21iX2VsZW1fbGVuKTsKKyAgICAgIGVyciA9IGNsZWFuX3N0YXRlX2xvZ19pZl9uZWVkZWQgKG1jdHgsIGRlc3RfaWR4KTsKKyAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlyZXR1cm4gZXJyOworI2lmZGVmIERFQlVHCisgICAgICBhc3NlcnQgKGRmYS0+bmV4dHNbY3VyX25vZGVfaWR4XSAhPSAtMSk7CisjZW5kaWYKKyAgICAgIG5ld19ub2RlcyA9IGRmYS0+ZWNsb3N1cmVzICsgZGZhLT5uZXh0c1tjdXJfbm9kZV9pZHhdOworCisgICAgICBkZXN0X3N0YXRlID0gbWN0eC0+c3RhdGVfbG9nW2Rlc3RfaWR4XTsKKyAgICAgIGlmIChkZXN0X3N0YXRlID09IE5VTEwpCisJZGVzdF9ub2RlcyA9ICpuZXdfbm9kZXM7CisgICAgICBlbHNlCisJeworCSAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF91bmlvbiAoJmRlc3Rfbm9kZXMsCisJCQkJCWRlc3Rfc3RhdGUtPmVudHJhbmNlX25vZGVzLCBuZXdfbm9kZXMpOworCSAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICByZXR1cm4gZXJyOworCX0KKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBkZXN0X2lkeCAtIDEsCisJCQkJICAgICAgbWN0eC0+ZWZsYWdzKTsKKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tkZXN0X2lkeF0KKwk9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZGVzdF9ub2RlcywgY29udGV4dCk7CisgICAgICBpZiAoZGVzdF9zdGF0ZSAhPSBOVUxMKQorCXJlX25vZGVfc2V0X2ZyZWUgKCZkZXN0X25vZGVzKTsKKyAgICAgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW2Rlc3RfaWR4XSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJcmV0dXJuIGVycjsKKyAgICB9CisgIHJldHVybiBSRUdfTk9FUlJPUjsKK30KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK3RyYW5zaXRfc3RhdGVfYmtyZWYgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGk7CisgIGludCBjdXJfc3RyX2lkeCA9IHJlX3N0cmluZ19jdXJfaWR4ICgmbWN0eC0+aW5wdXQpOworCisgIGZvciAoaSA9IDA7IGkgPCBub2Rlcy0+bmVsZW07ICsraSkKKyAgICB7CisgICAgICBpbnQgZGVzdF9zdHJfaWR4LCBwcmV2X25lbGVtLCBia2NfaWR4OworICAgICAgaW50IG5vZGVfaWR4ID0gbm9kZXMtPmVsZW1zW2ldOworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQ7CisgICAgICBjb25zdCByZV90b2tlbl90ICpub2RlID0gZGZhLT5ub2RlcyArIG5vZGVfaWR4OworICAgICAgcmVfbm9kZV9zZXQgKm5ld19kZXN0X25vZGVzOworCisgICAgICAvKiBDaGVjayB3aGV0aGVyIGBub2RlJyBpcyBhIGJhY2tyZWZlcmVuY2Ugb3Igbm90LiAgKi8KKyAgICAgIGlmIChub2RlLT50eXBlICE9IE9QX0JBQ0tfUkVGKQorCWNvbnRpbnVlOworCisgICAgICBpZiAobm9kZS0+Y29uc3RyYWludCkKKwl7CisJICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgY3VyX3N0cl9pZHgsCisJCQkJCSAgbWN0eC0+ZWZsYWdzKTsKKwkgIGlmIChOT1RfU0FUSVNGWV9ORVhUX0NPTlNUUkFJTlQgKG5vZGUtPmNvbnN0cmFpbnQsIGNvbnRleHQpKQorCSAgICBjb250aW51ZTsKKwl9CisKKyAgICAgIC8qIGBub2RlJyBpcyBhIGJhY2tyZWZlcmVuY2UuCisJIENoZWNrIHRoZSBzdWJzdHJpbmcgd2hpY2ggdGhlIHN1YnN0cmluZyBtYXRjaGVkLiAgKi8KKyAgICAgIGJrY19pZHggPSBtY3R4LT5uYmtyZWZfZW50czsKKyAgICAgIGVyciA9IGdldF9zdWJleHAgKG1jdHgsIG5vZGVfaWR4LCBjdXJfc3RyX2lkeCk7CisgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJZ290byBmcmVlX3JldHVybjsKKworICAgICAgLyogQW5kIGFkZCB0aGUgZXBzaWxvbiBjbG9zdXJlcyAod2hpY2ggaXMgYG5ld19kZXN0X25vZGVzJykgb2YKKwkgdGhlIGJhY2tyZWZlcmVuY2UgdG8gYXBwcm9wcmlhdGUgc3RhdGVfbG9nLiAgKi8KKyNpZmRlZiBERUJVRworICAgICAgYXNzZXJ0IChkZmEtPm5leHRzW25vZGVfaWR4XSAhPSAtMSk7CisjZW5kaWYKKyAgICAgIGZvciAoOyBia2NfaWR4IDwgbWN0eC0+bmJrcmVmX2VudHM7ICsrYmtjX2lkeCkKKwl7CisJICBpbnQgc3ViZXhwX2xlbjsKKwkgIHJlX2RmYXN0YXRlX3QgKmRlc3Rfc3RhdGU7CisJICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqYmtyZWZfZW50OworCSAgYmtyZWZfZW50ID0gbWN0eC0+YmtyZWZfZW50cyArIGJrY19pZHg7CisJICBpZiAoYmtyZWZfZW50LT5ub2RlICE9IG5vZGVfaWR4IHx8IGJrcmVmX2VudC0+c3RyX2lkeCAhPSBjdXJfc3RyX2lkeCkKKwkgICAgY29udGludWU7CisJICBzdWJleHBfbGVuID0gYmtyZWZfZW50LT5zdWJleHBfdG8gLSBia3JlZl9lbnQtPnN1YmV4cF9mcm9tOworCSAgbmV3X2Rlc3Rfbm9kZXMgPSAoc3ViZXhwX2xlbiA9PSAwCisJCQkgICAgPyBkZmEtPmVjbG9zdXJlcyArIGRmYS0+ZWRlc3RzW25vZGVfaWR4XS5lbGVtc1swXQorCQkJICAgIDogZGZhLT5lY2xvc3VyZXMgKyBkZmEtPm5leHRzW25vZGVfaWR4XSk7CisJICBkZXN0X3N0cl9pZHggPSAoY3VyX3N0cl9pZHggKyBia3JlZl9lbnQtPnN1YmV4cF90bworCQkJICAtIGJrcmVmX2VudC0+c3ViZXhwX2Zyb20pOworCSAgY29udGV4dCA9IHJlX3N0cmluZ19jb250ZXh0X2F0ICgmbWN0eC0+aW5wdXQsIGRlc3Rfc3RyX2lkeCAtIDEsCisJCQkJCSAgbWN0eC0+ZWZsYWdzKTsKKwkgIGRlc3Rfc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XTsKKwkgIHByZXZfbmVsZW0gPSAoKG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0gPT0gTlVMTCkgPyAwCisJCQk6IG1jdHgtPnN0YXRlX2xvZ1tjdXJfc3RyX2lkeF0tPm5vZGVzLm5lbGVtKTsKKwkgIC8qIEFkZCBgbmV3X2Rlc3Rfbm9kZScgdG8gc3RhdGVfbG9nLiAgKi8KKwkgIGlmIChkZXN0X3N0YXRlID09IE5VTEwpCisJICAgIHsKKwkgICAgICBtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XQorCQk9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCBuZXdfZGVzdF9ub2RlcywKKwkJCQkJICAgIGNvbnRleHQpOworCSAgICAgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW2Rlc3Rfc3RyX2lkeF0gPT0gTlVMTAorCQkgICAgICAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldCBkZXN0X25vZGVzOworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfdW5pb24gKCZkZXN0X25vZGVzLAorCQkJCQkgICAgZGVzdF9zdGF0ZS0+ZW50cmFuY2Vfbm9kZXMsCisJCQkJCSAgICBuZXdfZGVzdF9ub2Rlcyk7CisJICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJmRlc3Rfbm9kZXMpOworCQkgIGdvdG8gZnJlZV9yZXR1cm47CisJCX0KKwkgICAgICBtY3R4LT5zdGF0ZV9sb2dbZGVzdF9zdHJfaWR4XQorCQk9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZGVzdF9ub2RlcywgY29udGV4dCk7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJmRlc3Rfbm9kZXMpOworCSAgICAgIGlmIChCRSAobWN0eC0+c3RhdGVfbG9nW2Rlc3Rfc3RyX2lkeF0gPT0gTlVMTAorCQkgICAgICAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCQlnb3RvIGZyZWVfcmV0dXJuOworCSAgICB9CisJICAvKiBXZSBuZWVkIHRvIGNoZWNrIHJlY3Vyc2l2ZWx5IGlmIHRoZSBiYWNrcmVmZXJlbmNlIGNhbiBlcHNpbG9uCisJICAgICB0cmFuc2l0LiAgKi8KKwkgIGlmIChzdWJleHBfbGVuID09IDAKKwkgICAgICAmJiBtY3R4LT5zdGF0ZV9sb2dbY3VyX3N0cl9pZHhdLT5ub2Rlcy5uZWxlbSA+IHByZXZfbmVsZW0pCisJICAgIHsKKwkgICAgICBlcnIgPSBjaGVja19zdWJleHBfbWF0Y2hpbmdfdG9wIChtY3R4LCBuZXdfZGVzdF9ub2RlcywKKwkJCQkJICAgICAgIGN1cl9zdHJfaWR4KTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZnJlZV9yZXR1cm47CisJICAgICAgZXJyID0gdHJhbnNpdF9zdGF0ZV9ia3JlZiAobWN0eCwgbmV3X2Rlc3Rfbm9kZXMpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJZ290byBmcmVlX3JldHVybjsKKwkgICAgfQorCX0KKyAgICB9CisgIGVyciA9IFJFR19OT0VSUk9SOworIGZyZWVfcmV0dXJuOgorICByZXR1cm4gZXJyOworfQorCisvKiBFbnVtZXJhdGUgYWxsIHRoZSBjYW5kaWRhdGVzIHdoaWNoIHRoZSBiYWNrcmVmZXJlbmNlIEJLUkVGX05PREUgY2FuIG1hdGNoCisgICBhdCBCS1JFRl9TVFJfSURYLCBhbmQgcmVnaXN0ZXIgdGhlbSBieSBtYXRjaF9jdHhfYWRkX2VudHJ5KCkuCisgICBOb3RlIHRoYXQgd2UgbWlnaHQgY29sbGVjdCBpbmFwcHJvcHJpYXRlIGNhbmRpZGF0ZXMgaGVyZS4KKyAgIEhvd2V2ZXIsIHRoZSBjb3N0IG9mIGNoZWNraW5nIHRoZW0gc3RyaWN0bHkgaGVyZSBpcyB0b28gaGlnaCwgdGhlbiB3ZQorICAgZGVsYXkgdGhlc2UgY2hlY2tpbmcgZm9yIHBydW5lX2ltcG9zc2libGVfbm9kZXMoKS4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZ2V0X3N1YmV4cCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgYmtyZWZfbm9kZSwgaW50IGJrcmVmX3N0cl9pZHgpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCBzdWJleHBfbnVtLCBzdWJfdG9wX2lkeDsKKyAgY29uc3QgY2hhciAqYnVmID0gKGNvbnN0IGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKCZtY3R4LT5pbnB1dCk7CisgIC8qIFJldHVybiBpZiB3ZSBoYXZlIGFscmVhZHkgY2hlY2tlZCBCS1JFRl9OT0RFIGF0IEJLUkVGX1NUUl9JRFguICAqLworICBpbnQgY2FjaGVfaWR4ID0gc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAobWN0eCwgYmtyZWZfc3RyX2lkeCk7CisgIGlmIChjYWNoZV9pZHggIT0gLTEpCisgICAgeworICAgICAgY29uc3Qgc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnkgKmVudHJ5CisJPSBtY3R4LT5ia3JlZl9lbnRzICsgY2FjaGVfaWR4OworICAgICAgZG8KKwlpZiAoZW50cnktPm5vZGUgPT0gYmtyZWZfbm9kZSkKKwkgIHJldHVybiBSRUdfTk9FUlJPUjsgLyogV2UgYWxyZWFkeSBjaGVja2VkIGl0LiAgKi8KKyAgICAgIHdoaWxlIChlbnRyeSsrLT5tb3JlKTsKKyAgICB9CisKKyAgc3ViZXhwX251bSA9IGRmYS0+bm9kZXNbYmtyZWZfbm9kZV0ub3ByLmlkeDsKKworICAvKiBGb3IgZWFjaCBzdWIgZXhwcmVzc2lvbiAgKi8KKyAgZm9yIChzdWJfdG9wX2lkeCA9IDA7IHN1Yl90b3BfaWR4IDwgbWN0eC0+bnN1Yl90b3BzOyArK3N1Yl90b3BfaWR4KQorICAgIHsKKyAgICAgIHJlZ19lcnJjb2RlX3QgZXJyOworICAgICAgcmVfc3ViX21hdGNoX3RvcF90ICpzdWJfdG9wID0gbWN0eC0+c3ViX3RvcHNbc3ViX3RvcF9pZHhdOworICAgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqc3ViX2xhc3Q7CisgICAgICBpbnQgc3ViX2xhc3RfaWR4LCBzbF9zdHIsIGJrcmVmX3N0cl9vZmY7CisKKyAgICAgIGlmIChkZmEtPm5vZGVzW3N1Yl90b3AtPm5vZGVdLm9wci5pZHggIT0gc3ViZXhwX251bSkKKwljb250aW51ZTsgLyogSXQgaXNuJ3QgcmVsYXRlZC4gICovCisKKyAgICAgIHNsX3N0ciA9IHN1Yl90b3AtPnN0cl9pZHg7CisgICAgICBia3JlZl9zdHJfb2ZmID0gYmtyZWZfc3RyX2lkeDsKKyAgICAgIC8qIEF0IGZpcnN0LCBjaGVjayB0aGUgbGFzdCBub2RlIG9mIHN1YiBleHByZXNzaW9ucyB3ZSBhbHJlYWR5CisJIGV2YWx1YXRlZC4gICovCisgICAgICBmb3IgKHN1Yl9sYXN0X2lkeCA9IDA7IHN1Yl9sYXN0X2lkeCA8IHN1Yl90b3AtPm5sYXN0czsgKytzdWJfbGFzdF9pZHgpCisJeworCSAgaW50IHNsX3N0cl9kaWZmOworCSAgc3ViX2xhc3QgPSBzdWJfdG9wLT5sYXN0c1tzdWJfbGFzdF9pZHhdOworCSAgc2xfc3RyX2RpZmYgPSBzdWJfbGFzdC0+c3RyX2lkeCAtIHNsX3N0cjsKKwkgIC8qIFRoZSBtYXRjaGVkIHN0cmluZyBieSB0aGUgc3ViIGV4cHJlc3Npb24gbWF0Y2ggd2l0aCB0aGUgc3Vic3RyaW5nCisJICAgICBhdCB0aGUgYmFjayByZWZlcmVuY2U/ICAqLworCSAgaWYgKHNsX3N0cl9kaWZmID4gMCkKKwkgICAgeworCSAgICAgIGlmIChCRSAoYmtyZWZfc3RyX29mZiArIHNsX3N0cl9kaWZmID4gbWN0eC0+aW5wdXQudmFsaWRfbGVuLCAwKSkKKwkJeworCQkgIC8qIE5vdCBlbm91Z2ggY2hhcnMgZm9yIGEgc3VjY2Vzc2Z1bCBtYXRjaC4gICovCisJCSAgaWYgKGJrcmVmX3N0cl9vZmYgKyBzbF9zdHJfZGlmZiA+IG1jdHgtPmlucHV0LmxlbikKKwkJICAgIGJyZWFrOworCisJCSAgZXJyID0gY2xlYW5fc3RhdGVfbG9nX2lmX25lZWRlZCAobWN0eCwKKwkJCQkJCSAgIGJrcmVmX3N0cl9vZmYKKwkJCQkJCSAgICsgc2xfc3RyX2RpZmYpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHJldHVybiBlcnI7CisJCSAgYnVmID0gKGNvbnN0IGNoYXIgKikgcmVfc3RyaW5nX2dldF9idWZmZXIgKCZtY3R4LT5pbnB1dCk7CisJCX0KKwkgICAgICBpZiAobWVtY21wIChidWYgKyBia3JlZl9zdHJfb2ZmLCBidWYgKyBzbF9zdHIsIHNsX3N0cl9kaWZmKSAhPSAwKQorCQkvKiBXZSBkb24ndCBuZWVkIHRvIHNlYXJjaCB0aGlzIHN1YiBleHByZXNzaW9uIGFueSBtb3JlLiAgKi8KKwkJYnJlYWs7CisJICAgIH0KKwkgIGJrcmVmX3N0cl9vZmYgKz0gc2xfc3RyX2RpZmY7CisJICBzbF9zdHIgKz0gc2xfc3RyX2RpZmY7CisJICBlcnIgPSBnZXRfc3ViZXhwX3N1YiAobWN0eCwgc3ViX3RvcCwgc3ViX2xhc3QsIGJrcmVmX25vZGUsCisJCQkJYmtyZWZfc3RyX2lkeCk7CisKKwkgIC8qIFJlbG9hZCBidWYsIHNpbmNlIHRoZSBwcmVjZWRpbmcgY2FsbCBtaWdodCBoYXZlIHJlYWxsb2NhdGVkCisJICAgICB0aGUgYnVmZmVyLiAgKi8KKwkgIGJ1ZiA9IChjb25zdCBjaGFyICopIHJlX3N0cmluZ19nZXRfYnVmZmVyICgmbWN0eC0+aW5wdXQpOworCisJICBpZiAoZXJyID09IFJFR19OT01BVENIKQorCSAgICBjb250aW51ZTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisKKyAgICAgIGlmIChzdWJfbGFzdF9pZHggPCBzdWJfdG9wLT5ubGFzdHMpCisJY29udGludWU7CisgICAgICBpZiAoc3ViX2xhc3RfaWR4ID4gMCkKKwkrK3NsX3N0cjsKKyAgICAgIC8qIFRoZW4sIHNlYXJjaCBmb3IgdGhlIG90aGVyIGxhc3Qgbm9kZXMgb2YgdGhlIHN1YiBleHByZXNzaW9uLiAgKi8KKyAgICAgIGZvciAoOyBzbF9zdHIgPD0gYmtyZWZfc3RyX2lkeDsgKytzbF9zdHIpCisJeworCSAgaW50IGNsc19ub2RlLCBzbF9zdHJfb2ZmOworCSAgY29uc3QgcmVfbm9kZV9zZXQgKm5vZGVzOworCSAgc2xfc3RyX29mZiA9IHNsX3N0ciAtIHN1Yl90b3AtPnN0cl9pZHg7CisJICAvKiBUaGUgbWF0Y2hlZCBzdHJpbmcgYnkgdGhlIHN1YiBleHByZXNzaW9uIG1hdGNoIHdpdGggdGhlIHN1YnN0cmluZworCSAgICAgYXQgdGhlIGJhY2sgcmVmZXJlbmNlPyAgKi8KKwkgIGlmIChzbF9zdHJfb2ZmID4gMCkKKwkgICAgeworCSAgICAgIGlmIChCRSAoYmtyZWZfc3RyX29mZiA+PSBtY3R4LT5pbnB1dC52YWxpZF9sZW4sIDApKQorCQl7CisJCSAgLyogSWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LCB3ZSBjYW5ub3QgbWF0Y2guICAqLworCQkgIGlmIChia3JlZl9zdHJfb2ZmID49IG1jdHgtPmlucHV0LmxlbikKKwkJICAgIGJyZWFrOworCisJCSAgZXJyID0gZXh0ZW5kX2J1ZmZlcnMgKG1jdHgpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHJldHVybiBlcnI7CisKKwkJICBidWYgPSAoY29uc3QgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoJm1jdHgtPmlucHV0KTsKKwkJfQorCSAgICAgIGlmIChidWYgW2JrcmVmX3N0cl9vZmYrK10gIT0gYnVmW3NsX3N0ciAtIDFdKQorCQlicmVhazsgLyogV2UgZG9uJ3QgbmVlZCB0byBzZWFyY2ggdGhpcyBzdWIgZXhwcmVzc2lvbgorCQkJICBhbnkgbW9yZS4gICovCisJICAgIH0KKwkgIGlmIChtY3R4LT5zdGF0ZV9sb2dbc2xfc3RyXSA9PSBOVUxMKQorCSAgICBjb250aW51ZTsKKwkgIC8qIERvZXMgdGhpcyBzdGF0ZSBoYXZlIGEgJyknIG9mIHRoZSBzdWIgZXhwcmVzc2lvbj8gICovCisJICBub2RlcyA9ICZtY3R4LT5zdGF0ZV9sb2dbc2xfc3RyXS0+bm9kZXM7CisJICBjbHNfbm9kZSA9IGZpbmRfc3ViZXhwX25vZGUgKGRmYSwgbm9kZXMsIHN1YmV4cF9udW0sCisJCQkJICAgICAgIE9QX0NMT1NFX1NVQkVYUCk7CisJICBpZiAoY2xzX25vZGUgPT0gLTEpCisJICAgIGNvbnRpbnVlOyAvKiBOby4gICovCisJICBpZiAoc3ViX3RvcC0+cGF0aCA9PSBOVUxMKQorCSAgICB7CisJICAgICAgc3ViX3RvcC0+cGF0aCA9IGNhbGxvYyAoc2l6ZW9mIChzdGF0ZV9hcnJheV90KSwKKwkJCQkgICAgICBzbF9zdHIgLSBzdWJfdG9wLT5zdHJfaWR4ICsgMSk7CisJICAgICAgaWYgKHN1Yl90b3AtPnBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKwkgIC8qIENhbiB0aGUgT1BfT1BFTl9TVUJFWFAgbm9kZSBhcnJpdmUgdGhlIE9QX0NMT1NFX1NVQkVYUCBub2RlCisJICAgICBpbiB0aGUgY3VycmVudCBjb250ZXh0PyAgKi8KKwkgIGVyciA9IGNoZWNrX2Fycml2YWwgKG1jdHgsIHN1Yl90b3AtPnBhdGgsIHN1Yl90b3AtPm5vZGUsCisJCQkgICAgICAgc3ViX3RvcC0+c3RyX2lkeCwgY2xzX25vZGUsIHNsX3N0ciwKKwkJCSAgICAgICBPUF9DTE9TRV9TVUJFWFApOworCSAgaWYgKGVyciA9PSBSRUdfTk9NQVRDSCkKKwkgICAgICBjb250aW51ZTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgICByZXR1cm4gZXJyOworCSAgc3ViX2xhc3QgPSBtYXRjaF9jdHhfYWRkX3N1Ymxhc3QgKHN1Yl90b3AsIGNsc19ub2RlLCBzbF9zdHIpOworCSAgaWYgKEJFIChzdWJfbGFzdCA9PSBOVUxMLCAwKSkKKwkgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICBlcnIgPSBnZXRfc3ViZXhwX3N1YiAobWN0eCwgc3ViX3RvcCwgc3ViX2xhc3QsIGJrcmVmX25vZGUsCisJCQkJYmtyZWZfc3RyX2lkeCk7CisJICBpZiAoZXJyID09IFJFR19OT01BVENIKQorCSAgICBjb250aW51ZTsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgZm9yIGdldF9zdWJleHAoKS4gICovCisKKy8qIENoZWNrIFNVQl9MQVNUIGNhbiBhcnJpdmUgdG8gdGhlIGJhY2sgcmVmZXJlbmNlIEJLUkVGX05PREUgYXQgQktSRUZfU1RSLgorICAgSWYgaXQgY2FuIGFycml2ZSwgcmVnaXN0ZXIgdGhlIHN1YiBleHByZXNzaW9uIGV4cHJlc3NlZCB3aXRoIFNVQl9UT1AKKyAgIGFuZCBTVUJfTEFTVC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZ2V0X3N1YmV4cF9zdWIgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgY29uc3QgcmVfc3ViX21hdGNoX3RvcF90ICpzdWJfdG9wLAorCQlyZV9zdWJfbWF0Y2hfbGFzdF90ICpzdWJfbGFzdCwgaW50IGJrcmVmX25vZGUsIGludCBia3JlZl9zdHIpCit7CisgIHJlZ19lcnJjb2RlX3QgZXJyOworICBpbnQgdG9faWR4OworICAvKiBDYW4gdGhlIHN1YmV4cHJlc3Npb24gYXJyaXZlIHRoZSBiYWNrIHJlZmVyZW5jZT8gICovCisgIGVyciA9IGNoZWNrX2Fycml2YWwgKG1jdHgsICZzdWJfbGFzdC0+cGF0aCwgc3ViX2xhc3QtPm5vZGUsCisJCSAgICAgICBzdWJfbGFzdC0+c3RyX2lkeCwgYmtyZWZfbm9kZSwgYmtyZWZfc3RyLAorCQkgICAgICAgT1BfT1BFTl9TVUJFWFApOworICBpZiAoZXJyICE9IFJFR19OT0VSUk9SKQorICAgIHJldHVybiBlcnI7CisgIGVyciA9IG1hdGNoX2N0eF9hZGRfZW50cnkgKG1jdHgsIGJrcmVmX25vZGUsIGJrcmVmX3N0ciwgc3ViX3RvcC0+c3RyX2lkeCwKKwkJCSAgICAgc3ViX2xhc3QtPnN0cl9pZHgpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKyAgdG9faWR4ID0gYmtyZWZfc3RyICsgc3ViX2xhc3QtPnN0cl9pZHggLSBzdWJfdG9wLT5zdHJfaWR4OworICByZXR1cm4gY2xlYW5fc3RhdGVfbG9nX2lmX25lZWRlZCAobWN0eCwgdG9faWR4KTsKK30KKworLyogRmluZCB0aGUgZmlyc3Qgbm9kZSB3aGljaCBpcyAnKCcgb3IgJyknIGFuZCB3aG9zZSBpbmRleCBpcyBTVUJFWFBfSURYLgorICAgU2VhcmNoICcoJyBpZiBGTF9PUEVOLCBvciBzZWFyY2ggJyknIG90aGVyd2lzZS4KKyAgIFRPRE86IFRoaXMgZnVuY3Rpb24gaXNuJ3QgZWZmaWNpZW50Li4uCisJIEJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSB0aGFuIG9uZSBub2RlcyB3aG9zZSB0eXBlcyBhcmUKKwkgT1BfT1BFTl9TVUJFWFAgYW5kIHdob3NlIGluZGV4IGlzIFNVQkVYUF9JRFgsIHdlIG11c3QgY2hlY2sgYWxsCisJIG5vZGVzLgorCSBFLmcuIFJFOiAoYSl7Mn0gICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2Z1bmN0aW9uCitmaW5kX3N1YmV4cF9ub2RlIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9ub2RlX3NldCAqbm9kZXMsCisJCSAgaW50IHN1YmV4cF9pZHgsIGludCB0eXBlKQoreworICBpbnQgY2xzX2lkeDsKKyAgZm9yIChjbHNfaWR4ID0gMDsgY2xzX2lkeCA8IG5vZGVzLT5uZWxlbTsgKytjbHNfaWR4KQorICAgIHsKKyAgICAgIGludCBjbHNfbm9kZSA9IG5vZGVzLT5lbGVtc1tjbHNfaWR4XTsKKyAgICAgIGNvbnN0IHJlX3Rva2VuX3QgKm5vZGUgPSBkZmEtPm5vZGVzICsgY2xzX25vZGU7CisgICAgICBpZiAobm9kZS0+dHlwZSA9PSB0eXBlCisJICAmJiBub2RlLT5vcHIuaWR4ID09IHN1YmV4cF9pZHgpCisJcmV0dXJuIGNsc19ub2RlOworICAgIH0KKyAgcmV0dXJuIC0xOworfQorCisvKiBDaGVjayB3aGV0aGVyIHRoZSBub2RlIFRPUF9OT0RFIGF0IFRPUF9TVFIgY2FuIGFycml2ZSB0byB0aGUgbm9kZQorICAgTEFTVF9OT0RFIGF0IExBU1RfU1RSLiAgV2UgcmVjb3JkIHRoZSBwYXRoIG9udG8gUEFUSCBzaW5jZSBpdCB3aWxsIGJlCisgICBoZWF2aWx5IHJldXNlZC4KKyAgIFJldHVybiBSRUdfTk9FUlJPUiBpZiBpdCBjYW4gYXJyaXZlLCBvciBSRUdfTk9NQVRDSCBvdGhlcndpc2UuICAqLworCitzdGF0aWMgcmVnX2VycmNvZGVfdAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX2Fycml2YWwgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgc3RhdGVfYXJyYXlfdCAqcGF0aCwgaW50IHRvcF9ub2RlLAorCSAgICAgICBpbnQgdG9wX3N0ciwgaW50IGxhc3Rfbm9kZSwgaW50IGxhc3Rfc3RyLCBpbnQgdHlwZSkKK3sKKyAgY29uc3QgcmVfZGZhX3QgKmNvbnN0IGRmYSA9IG1jdHgtPmRmYTsKKyAgcmVnX2VycmNvZGVfdCBlcnIgPSBSRUdfTk9FUlJPUjsKKyAgaW50IHN1YmV4cF9udW0sIGJhY2t1cF9jdXJfaWR4LCBzdHJfaWR4LCBudWxsX2NudDsKKyAgcmVfZGZhc3RhdGVfdCAqY3VyX3N0YXRlID0gTlVMTDsKKyAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywgbmV4dF9ub2RlczsKKyAgcmVfZGZhc3RhdGVfdCAqKmJhY2t1cF9zdGF0ZV9sb2c7CisgIHVuc2lnbmVkIGludCBjb250ZXh0OworCisgIHN1YmV4cF9udW0gPSBkZmEtPm5vZGVzW3RvcF9ub2RlXS5vcHIuaWR4OworICAvKiBFeHRlbmQgdGhlIGJ1ZmZlciBpZiB3ZSBuZWVkLiAgKi8KKyAgaWYgKEJFIChwYXRoLT5hbGxvYyA8IGxhc3Rfc3RyICsgbWN0eC0+bWF4X21iX2VsZW1fbGVuICsgMSwgMCkpCisgICAgeworICAgICAgcmVfZGZhc3RhdGVfdCAqKm5ld19hcnJheTsKKyAgICAgIGludCBvbGRfYWxsb2MgPSBwYXRoLT5hbGxvYzsKKyAgICAgIHBhdGgtPmFsbG9jICs9IGxhc3Rfc3RyICsgbWN0eC0+bWF4X21iX2VsZW1fbGVuICsgMTsKKyAgICAgIG5ld19hcnJheSA9IHJlX3JlYWxsb2MgKHBhdGgtPmFycmF5LCByZV9kZmFzdGF0ZV90ICosIHBhdGgtPmFsbG9jKTsKKyAgICAgIGlmIChCRSAobmV3X2FycmF5ID09IE5VTEwsIDApKQorCXsKKwkgIHBhdGgtPmFsbG9jID0gb2xkX2FsbG9jOworCSAgcmV0dXJuIFJFR19FU1BBQ0U7CisJfQorICAgICAgcGF0aC0+YXJyYXkgPSBuZXdfYXJyYXk7CisgICAgICBtZW1zZXQgKG5ld19hcnJheSArIG9sZF9hbGxvYywgJ1wwJywKKwkgICAgICBzaXplb2YgKHJlX2RmYXN0YXRlX3QgKikgKiAocGF0aC0+YWxsb2MgLSBvbGRfYWxsb2MpKTsKKyAgICB9CisKKyAgc3RyX2lkeCA9IHBhdGgtPm5leHRfaWR4ID8gcGF0aC0+bmV4dF9pZHggOiB0b3Bfc3RyOworCisgIC8qIFRlbXBvcmFyeSBtb2RpZnkgTUNUWC4gICovCisgIGJhY2t1cF9zdGF0ZV9sb2cgPSBtY3R4LT5zdGF0ZV9sb2c7CisgIGJhY2t1cF9jdXJfaWR4ID0gbWN0eC0+aW5wdXQuY3VyX2lkeDsKKyAgbWN0eC0+c3RhdGVfbG9nID0gcGF0aC0+YXJyYXk7CisgIG1jdHgtPmlucHV0LmN1cl9pZHggPSBzdHJfaWR4OworCisgIC8qIFNldHVwIGluaXRpYWwgbm9kZSBzZXQuICAqLworICBjb250ZXh0ID0gcmVfc3RyaW5nX2NvbnRleHRfYXQgKCZtY3R4LT5pbnB1dCwgc3RyX2lkeCAtIDEsIG1jdHgtPmVmbGFncyk7CisgIGlmIChzdHJfaWR4ID09IHRvcF9zdHIpCisgICAgeworICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xICgmbmV4dF9ub2RlcywgdG9wX25vZGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXJldHVybiBlcnI7CisgICAgICBlcnIgPSBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2wgKGRmYSwgJm5leHRfbm9kZXMsIHN1YmV4cF9udW0sIHR5cGUpOworICAgICAgaWYgKEJFIChlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCXsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgIHJldHVybiBlcnI7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGN1cl9zdGF0ZSA9IG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XTsKKyAgICAgIGlmIChjdXJfc3RhdGUgJiYgY3VyX3N0YXRlLT5oYXNfYmFja3JlZikKKwl7CisJICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKCZuZXh0X25vZGVzLCAmY3VyX3N0YXRlLT5ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgICAgZWxzZQorCXJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZuZXh0X25vZGVzKTsKKyAgICB9CisgIGlmIChzdHJfaWR4ID09IHRvcF9zdHIgfHwgKGN1cl9zdGF0ZSAmJiBjdXJfc3RhdGUtPmhhc19iYWNrcmVmKSkKKyAgICB7CisgICAgICBpZiAobmV4dF9ub2Rlcy5uZWxlbSkKKwl7CisJICBlcnIgPSBleHBhbmRfYmtyZWZfY2FjaGUgKG1jdHgsICZuZXh0X25vZGVzLCBzdHJfaWR4LAorCQkJCSAgICBzdWJleHBfbnVtLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgY3VyX3N0YXRlID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZuZXh0X25vZGVzLCBjb250ZXh0KTsKKyAgICAgIGlmIChCRSAoY3VyX3N0YXRlID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwl7CisJICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICByZXR1cm4gZXJyOworCX0KKyAgICAgIG1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4XSA9IGN1cl9zdGF0ZTsKKyAgICB9CisKKyAgZm9yIChudWxsX2NudCA9IDA7IHN0cl9pZHggPCBsYXN0X3N0ciAmJiBudWxsX2NudCA8PSBtY3R4LT5tYXhfbWJfZWxlbV9sZW47KQorICAgIHsKKyAgICAgIHJlX25vZGVfc2V0X2VtcHR5ICgmbmV4dF9ub2Rlcyk7CisgICAgICBpZiAobWN0eC0+c3RhdGVfbG9nW3N0cl9pZHggKyAxXSkKKwl7CisJICBlcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJm5leHRfbm9kZXMsCisJCQkJICAgJm1jdHgtPnN0YXRlX2xvZ1tzdHJfaWR4ICsgMV0tPm5vZGVzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgaWYgKGN1cl9zdGF0ZSkKKwl7CisJICBlcnIgPSBjaGVja19hcnJpdmFsX2FkZF9uZXh0X25vZGVzIChtY3R4LCBzdHJfaWR4LAorCQkJCQkgICAgICAmY3VyX3N0YXRlLT5ub25fZXBzX25vZGVzLAorCQkJCQkgICAgICAmbmV4dF9ub2Rlcyk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICAgICsrc3RyX2lkeDsKKyAgICAgIGlmIChuZXh0X25vZGVzLm5lbGVtKQorCXsKKwkgIGVyciA9IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbCAoZGZhLCAmbmV4dF9ub2Rlcywgc3ViZXhwX251bSwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCSAgZXJyID0gZXhwYW5kX2JrcmVmX2NhY2hlIChtY3R4LCAmbmV4dF9ub2Rlcywgc3RyX2lkeCwKKwkJCQkgICAgc3ViZXhwX251bSwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV4dF9ub2Rlcyk7CisJICAgICAgcmV0dXJuIGVycjsKKwkgICAgfQorCX0KKyAgICAgIGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBzdHJfaWR4IC0gMSwgbWN0eC0+ZWZsYWdzKTsKKyAgICAgIGN1cl9zdGF0ZSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmbmV4dF9ub2RlcywgY29udGV4dCk7CisgICAgICBpZiAoQkUgKGN1cl9zdGF0ZSA9PSBOVUxMICYmIGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJeworCSAgcmVfbm9kZV9zZXRfZnJlZSAoJm5leHRfbm9kZXMpOworCSAgcmV0dXJuIGVycjsKKwl9CisgICAgICBtY3R4LT5zdGF0ZV9sb2dbc3RyX2lkeF0gPSBjdXJfc3RhdGU7CisgICAgICBudWxsX2NudCA9IGN1cl9zdGF0ZSA9PSBOVUxMID8gbnVsbF9jbnQgKyAxIDogMDsKKyAgICB9CisgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXh0X25vZGVzKTsKKyAgY3VyX25vZGVzID0gKG1jdHgtPnN0YXRlX2xvZ1tsYXN0X3N0cl0gPT0gTlVMTCA/IE5VTEwKKwkgICAgICAgOiAmbWN0eC0+c3RhdGVfbG9nW2xhc3Rfc3RyXS0+bm9kZXMpOworICBwYXRoLT5uZXh0X2lkeCA9IHN0cl9pZHg7CisKKyAgLyogRml4IE1DVFguICAqLworICBtY3R4LT5zdGF0ZV9sb2cgPSBiYWNrdXBfc3RhdGVfbG9nOworICBtY3R4LT5pbnB1dC5jdXJfaWR4ID0gYmFja3VwX2N1cl9pZHg7CisKKyAgLyogVGhlbiBjaGVjayB0aGUgY3VycmVudCBub2RlIHNldCBoYXMgdGhlIG5vZGUgTEFTVF9OT0RFLiAgKi8KKyAgaWYgKGN1cl9ub2RlcyAhPSBOVUxMICYmIHJlX25vZGVfc2V0X2NvbnRhaW5zIChjdXJfbm9kZXMsIGxhc3Rfbm9kZSkpCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgIHJldHVybiBSRUdfTk9NQVRDSDsKK30KKworLyogSGVscGVyIGZ1bmN0aW9ucyBmb3IgY2hlY2tfYXJyaXZhbC4gICovCisKKy8qIENhbGN1bGF0ZSB0aGUgZGVzdGluYXRpb24gbm9kZXMgb2YgQ1VSX05PREVTIGF0IFNUUl9JRFgsIGFuZCBhcHBlbmQgdGhlbQorICAgdG8gTkVYVF9OT0RFUy4KKyAgIFRPRE86IFRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0byB0aGUgZnVuY3Rpb25zIHRyYW5zaXRfc3RhdGUqKCksCisJIGhvd2V2ZXIgdGhpcyBmdW5jdGlvbiBoYXMgbWFueSBhZGRpdGlvbmFsIHdvcmtzLgorCSBDYW4ndCB3ZSB1bmlmeSB0aGVtPyAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19hcnJpdmFsX2FkZF9uZXh0X25vZGVzIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIGludCBzdHJfaWR4LAorCQkJICAgICAgcmVfbm9kZV9zZXQgKmN1cl9ub2RlcywgcmVfbm9kZV9zZXQgKm5leHRfbm9kZXMpCit7CisgIGNvbnN0IHJlX2RmYV90ICpjb25zdCBkZmEgPSBtY3R4LT5kZmE7CisgIGludCByZXN1bHQ7CisgIGludCBjdXJfaWR4OworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgIHJlZ19lcnJjb2RlX3QgZXJyID0gUkVHX05PRVJST1I7CisjZW5kaWYKKyAgcmVfbm9kZV9zZXQgdW5pb25fc2V0OworICByZV9ub2RlX3NldF9pbml0X2VtcHR5ICgmdW5pb25fc2V0KTsKKyAgZm9yIChjdXJfaWR4ID0gMDsgY3VyX2lkeCA8IGN1cl9ub2Rlcy0+bmVsZW07ICsrY3VyX2lkeCkKKyAgICB7CisgICAgICBpbnQgbmFjY2VwdGVkID0gMDsKKyAgICAgIGludCBjdXJfbm9kZSA9IGN1cl9ub2Rlcy0+ZWxlbXNbY3VyX2lkeF07CisjaWZkZWYgREVCVUcKKyAgICAgIHJlX3Rva2VuX3R5cGVfdCB0eXBlID0gZGZhLT5ub2Rlc1tjdXJfbm9kZV0udHlwZTsKKyAgICAgIGFzc2VydCAoIUlTX0VQU0lMT05fTk9ERSAodHlwZSkpOworI2VuZGlmCisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIC8qIElmIHRoZSBub2RlIG1heSBhY2NlcHQgYG11bHRpIGJ5dGUnLiAgKi8KKyAgICAgIGlmIChkZmEtPm5vZGVzW2N1cl9ub2RlXS5hY2NlcHRfbWIpCisJeworCSAgbmFjY2VwdGVkID0gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXMgKGRmYSwgY3VyX25vZGUsICZtY3R4LT5pbnB1dCwKKwkJCQkJICAgICAgIHN0cl9pZHgpOworCSAgaWYgKG5hY2NlcHRlZCA+IDEpCisJICAgIHsKKwkgICAgICByZV9kZmFzdGF0ZV90ICpkZXN0X3N0YXRlOworCSAgICAgIGludCBuZXh0X25vZGUgPSBkZmEtPm5leHRzW2N1cl9ub2RlXTsKKwkgICAgICBpbnQgbmV4dF9pZHggPSBzdHJfaWR4ICsgbmFjY2VwdGVkOworCSAgICAgIGRlc3Rfc3RhdGUgPSBtY3R4LT5zdGF0ZV9sb2dbbmV4dF9pZHhdOworCSAgICAgIHJlX25vZGVfc2V0X2VtcHR5ICgmdW5pb25fc2V0KTsKKwkgICAgICBpZiAoZGVzdF9zdGF0ZSkKKwkJeworCQkgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmdW5pb25fc2V0LCAmZGVzdF9zdGF0ZS0+bm9kZXMpOworCQkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJICAgIHsKKwkJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJCSAgICAgIHJldHVybiBlcnI7CisJCSAgICB9CisJCX0KKwkgICAgICByZXN1bHQgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZ1bmlvbl9zZXQsIG5leHRfbm9kZSk7CisJICAgICAgaWYgKEJFIChyZXN1bHQgPCAwLCAwKSkKKwkJeworCQkgIHJlX25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCQkgIHJldHVybiBSRUdfRVNQQUNFOworCQl9CisJICAgICAgbWN0eC0+c3RhdGVfbG9nW25leHRfaWR4XSA9IHJlX2FjcXVpcmVfc3RhdGUgKCZlcnIsIGRmYSwKKwkJCQkJCQkgICAgJnVuaW9uX3NldCk7CisJICAgICAgaWYgKEJFIChtY3R4LT5zdGF0ZV9sb2dbbmV4dF9pZHhdID09IE5VTEwKKwkJICAgICAgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkJeworCQkgIHJlX25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCQkgIHJldHVybiBlcnI7CisJCX0KKwkgICAgfQorCX0KKyNlbmRpZiAvKiBSRV9FTkFCTEVfSTE4TiAqLworICAgICAgaWYgKG5hY2NlcHRlZAorCSAgfHwgY2hlY2tfbm9kZV9hY2NlcHQgKG1jdHgsIGRmYS0+bm9kZXMgKyBjdXJfbm9kZSwgc3RyX2lkeCkpCisJeworCSAgcmVzdWx0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChuZXh0X25vZGVzLCBkZmEtPm5leHRzW2N1cl9ub2RlXSk7CisJICBpZiAoQkUgKHJlc3VsdCA8IDAsIDApKQorCSAgICB7CisJICAgICAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJICAgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisJICAgIH0KKwl9CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlICgmdW5pb25fc2V0KTsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBGb3IgYWxsIHRoZSBub2RlcyBpbiBDVVJfTk9ERVMsIGFkZCB0aGUgZXBzaWxvbiBjbG9zdXJlcyBvZiB0aGVtIHRvCisgICBDVVJfTk9ERVMsIGhvd2V2ZXIgZXhjbHVkZSB0aGUgbm9kZXMgd2hpY2ggYXJlOgorICAgIC0gaW5zaWRlIHRoZSBzdWIgZXhwcmVzc2lvbiB3aG9zZSBudW1iZXIgaXMgRVhfU1VCRVhQLCBpZiBGTF9PUEVOLgorICAgIC0gb3V0IG9mIHRoZSBzdWIgZXhwcmVzc2lvbiB3aG9zZSBudW1iZXIgaXMgRVhfU1VCRVhQLCBpZiAhRkxfT1BFTi4KKyovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqY3VyX25vZGVzLAorCQkJICBpbnQgZXhfc3ViZXhwLCBpbnQgdHlwZSkKK3sKKyAgcmVnX2VycmNvZGVfdCBlcnI7CisgIGludCBpZHgsIG91dHNpZGVfbm9kZTsKKyAgcmVfbm9kZV9zZXQgbmV3X25vZGVzOworI2lmZGVmIERFQlVHCisgIGFzc2VydCAoY3VyX25vZGVzLT5uZWxlbSk7CisjZW5kaWYKKyAgZXJyID0gcmVfbm9kZV9zZXRfYWxsb2MgKCZuZXdfbm9kZXMsIGN1cl9ub2Rlcy0+bmVsZW0pOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgcmV0dXJuIGVycjsKKyAgLyogQ3JlYXRlIGEgbmV3IG5vZGUgc2V0IE5FV19OT0RFUyB3aXRoIHRoZSBub2RlcyB3aGljaCBhcmUgZXBzaWxvbgorICAgICBjbG9zdXJlcyBvZiB0aGUgbm9kZSBpbiBDVVJfTk9ERVMuICAqLworCisgIGZvciAoaWR4ID0gMDsgaWR4IDwgY3VyX25vZGVzLT5uZWxlbTsgKytpZHgpCisgICAgeworICAgICAgaW50IGN1cl9ub2RlID0gY3VyX25vZGVzLT5lbGVtc1tpZHhdOworICAgICAgY29uc3QgcmVfbm9kZV9zZXQgKmVjbG9zdXJlID0gZGZhLT5lY2xvc3VyZXMgKyBjdXJfbm9kZTsKKyAgICAgIG91dHNpZGVfbm9kZSA9IGZpbmRfc3ViZXhwX25vZGUgKGRmYSwgZWNsb3N1cmUsIGV4X3N1YmV4cCwgdHlwZSk7CisgICAgICBpZiAob3V0c2lkZV9ub2RlID09IC0xKQorCXsKKwkgIC8qIFRoZXJlIGFyZSBubyBwcm9ibGVtYXRpYyBub2RlcywganVzdCBtZXJnZSB0aGVtLiAgKi8KKwkgIGVyciA9IHJlX25vZGVfc2V0X21lcmdlICgmbmV3X25vZGVzLCBlY2xvc3VyZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHsKKwkgICAgICByZV9ub2RlX3NldF9mcmVlICgmbmV3X25vZGVzKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8qIFRoZXJlIGFyZSBwcm9ibGVtYXRpYyBub2RlcywgcmUtY2FsY3VsYXRlIGluY3JlbWVudGFsbHkuICAqLworCSAgZXJyID0gY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsX3N1YiAoZGZhLCAmbmV3X25vZGVzLCBjdXJfbm9kZSwKKwkJCQkJICAgICAgZXhfc3ViZXhwLCB0eXBlKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIHJlX25vZGVfc2V0X2ZyZWUgKCZuZXdfbm9kZXMpOworCSAgICAgIHJldHVybiBlcnI7CisJICAgIH0KKwl9CisgICAgfQorICByZV9ub2RlX3NldF9mcmVlIChjdXJfbm9kZXMpOworICAqY3VyX25vZGVzID0gbmV3X25vZGVzOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgY2hlY2tfYXJyaXZhbF9leHBhbmRfZWNsLgorICAgQ2hlY2sgaW5jcmVtZW50YWxseSB0aGUgZXBzaWxvbiBjbG9zdXJlIG9mIFRBUkdFVCwgYW5kIGlmIGl0IGlzbid0CisgICBwcm9ibGVtYXRpYyBhcHBlbmQgaXQgdG8gRFNUX05PREVTLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCitjaGVja19hcnJpdmFsX2V4cGFuZF9lY2xfc3ViIChjb25zdCByZV9kZmFfdCAqZGZhLCByZV9ub2RlX3NldCAqZHN0X25vZGVzLAorCQkJICAgICAgaW50IHRhcmdldCwgaW50IGV4X3N1YmV4cCwgaW50IHR5cGUpCit7CisgIGludCBjdXJfbm9kZTsKKyAgZm9yIChjdXJfbm9kZSA9IHRhcmdldDsgIXJlX25vZGVfc2V0X2NvbnRhaW5zIChkc3Rfbm9kZXMsIGN1cl9ub2RlKTspCisgICAgeworICAgICAgaW50IGVycjsKKworICAgICAgaWYgKGRmYS0+bm9kZXNbY3VyX25vZGVdLnR5cGUgPT0gdHlwZQorCSAgJiYgZGZhLT5ub2Rlc1tjdXJfbm9kZV0ub3ByLmlkeCA9PSBleF9zdWJleHApCisJeworCSAgaWYgKHR5cGUgPT0gT1BfQ0xPU0VfU1VCRVhQKQorCSAgICB7CisJICAgICAgZXJyID0gcmVfbm9kZV9zZXRfaW5zZXJ0IChkc3Rfbm9kZXMsIGN1cl9ub2RlKTsKKwkgICAgICBpZiAoQkUgKGVyciA9PSAtMSwgMCkpCisJCXJldHVybiBSRUdfRVNQQUNFOworCSAgICB9CisJICBicmVhazsKKwl9CisgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbnNlcnQgKGRzdF9ub2RlcywgY3VyX25vZGUpOworICAgICAgaWYgKEJFIChlcnIgPT0gLTEsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgaWYgKGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5uZWxlbSA9PSAwKQorCWJyZWFrOworICAgICAgaWYgKGRmYS0+ZWRlc3RzW2N1cl9ub2RlXS5uZWxlbSA9PSAyKQorCXsKKwkgIGVyciA9IGNoZWNrX2Fycml2YWxfZXhwYW5kX2VjbF9zdWIgKGRmYSwgZHN0X25vZGVzLAorCQkJCQkgICAgICBkZmEtPmVkZXN0c1tjdXJfbm9kZV0uZWxlbXNbMV0sCisJCQkJCSAgICAgIGV4X3N1YmV4cCwgdHlwZSk7CisJICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiBlcnI7CisJfQorICAgICAgY3VyX25vZGUgPSBkZmEtPmVkZXN0c1tjdXJfbm9kZV0uZWxlbXNbMF07CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKworLyogRm9yIGFsbCB0aGUgYmFjayByZWZlcmVuY2VzIGluIHRoZSBjdXJyZW50IHN0YXRlLCBjYWxjdWxhdGUgdGhlCisgICBkZXN0aW5hdGlvbiBvZiB0aGUgYmFjayByZWZlcmVuY2VzIGJ5IHRoZSBhcHByb3ByaWF0ZSBlbnRyeQorICAgaW4gTUNUWC0+QktSRUZfRU5UUy4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZXhwYW5kX2JrcmVmX2NhY2hlIChyZV9tYXRjaF9jb250ZXh0X3QgKm1jdHgsIHJlX25vZGVfc2V0ICpjdXJfbm9kZXMsCisJCSAgICBpbnQgY3VyX3N0ciwgaW50IHN1YmV4cF9udW0sIGludCB0eXBlKQoreworICBjb25zdCByZV9kZmFfdCAqY29uc3QgZGZhID0gbWN0eC0+ZGZhOworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGNhY2hlX2lkeF9zdGFydCA9IHNlYXJjaF9jdXJfYmtyZWZfZW50cnkgKG1jdHgsIGN1cl9zdHIpOworICBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSAqZW50OworCisgIGlmIChjYWNoZV9pZHhfc3RhcnQgPT0gLTEpCisgICAgcmV0dXJuIFJFR19OT0VSUk9SOworCisgcmVzdGFydDoKKyAgZW50ID0gbWN0eC0+YmtyZWZfZW50cyArIGNhY2hlX2lkeF9zdGFydDsKKyAgZG8KKyAgICB7CisgICAgICBpbnQgdG9faWR4LCBuZXh0X25vZGU7CisKKyAgICAgIC8qIElzIHRoaXMgZW50cnkgRU5UIGlzIGFwcHJvcHJpYXRlPyAgKi8KKyAgICAgIGlmICghcmVfbm9kZV9zZXRfY29udGFpbnMgKGN1cl9ub2RlcywgZW50LT5ub2RlKSkKKwljb250aW51ZTsgLyogTm8uICAqLworCisgICAgICB0b19pZHggPSBjdXJfc3RyICsgZW50LT5zdWJleHBfdG8gLSBlbnQtPnN1YmV4cF9mcm9tOworICAgICAgLyogQ2FsY3VsYXRlIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYmFjayByZWZlcmVuY2UsIGFuZCBhcHBlbmQgaXQKKwkgdG8gTUNUWC0+U1RBVEVfTE9HLiAgKi8KKyAgICAgIGlmICh0b19pZHggPT0gY3VyX3N0cikKKwl7CisJICAvKiBUaGUgYmFja3JlZmVyZW5jZSBkaWQgZXBzaWxvbiB0cmFuc2l0LCB3ZSBtdXN0IHJlLWNoZWNrIGFsbCB0aGUKKwkgICAgIG5vZGUgaW4gdGhlIGN1cnJlbnQgc3RhdGUuICAqLworCSAgcmVfbm9kZV9zZXQgbmV3X2Rlc3RzOworCSAgcmVnX2VycmNvZGVfdCBlcnIyLCBlcnIzOworCSAgbmV4dF9ub2RlID0gZGZhLT5lZGVzdHNbZW50LT5ub2RlXS5lbGVtc1swXTsKKwkgIGlmIChyZV9ub2RlX3NldF9jb250YWlucyAoY3VyX25vZGVzLCBuZXh0X25vZGUpKQorCSAgICBjb250aW51ZTsKKwkgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoJm5ld19kZXN0cywgbmV4dF9ub2RlKTsKKwkgIGVycjIgPSBjaGVja19hcnJpdmFsX2V4cGFuZF9lY2wgKGRmYSwgJm5ld19kZXN0cywgc3ViZXhwX251bSwgdHlwZSk7CisJICBlcnIzID0gcmVfbm9kZV9zZXRfbWVyZ2UgKGN1cl9ub2RlcywgJm5ld19kZXN0cyk7CisJICByZV9ub2RlX3NldF9mcmVlICgmbmV3X2Rlc3RzKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SIHx8IGVycjIgIT0gUkVHX05PRVJST1IKKwkJICB8fCBlcnIzICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgeworCSAgICAgIGVyciA9IChlcnIgIT0gUkVHX05PRVJST1IgPyBlcnIKKwkJICAgICA6IChlcnIyICE9IFJFR19OT0VSUk9SID8gZXJyMiA6IGVycjMpKTsKKwkgICAgICByZXR1cm4gZXJyOworCSAgICB9CisJICAvKiBUT0RPOiBJdCBpcyBzdGlsbCBpbmVmZmljaWVudC4uLiAgKi8KKwkgIGdvdG8gcmVzdGFydDsKKwl9CisgICAgICBlbHNlCisJeworCSAgcmVfbm9kZV9zZXQgdW5pb25fc2V0OworCSAgbmV4dF9ub2RlID0gZGZhLT5uZXh0c1tlbnQtPm5vZGVdOworCSAgaWYgKG1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdKQorCSAgICB7CisJICAgICAgaW50IHJldDsKKwkgICAgICBpZiAocmVfbm9kZV9zZXRfY29udGFpbnMgKCZtY3R4LT5zdGF0ZV9sb2dbdG9faWR4XS0+bm9kZXMsCisJCQkJCW5leHRfbm9kZSkpCisJCWNvbnRpbnVlOworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfY29weSAoJnVuaW9uX3NldCwKKwkJCQkJICAgJm1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdLT5ub2Rlcyk7CisJICAgICAgcmV0ID0gcmVfbm9kZV9zZXRfaW5zZXJ0ICgmdW5pb25fc2V0LCBuZXh0X25vZGUpOworCSAgICAgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SIHx8IHJldCA8IDAsIDApKQorCQl7CisJCSAgcmVfbm9kZV9zZXRfZnJlZSAoJnVuaW9uX3NldCk7CisJCSAgZXJyID0gZXJyICE9IFJFR19OT0VSUk9SID8gZXJyIDogUkVHX0VTUEFDRTsKKwkJICByZXR1cm4gZXJyOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGVyciA9IHJlX25vZGVfc2V0X2luaXRfMSAoJnVuaW9uX3NldCwgbmV4dF9ub2RlKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCXJldHVybiBlcnI7CisJICAgIH0KKwkgIG1jdHgtPnN0YXRlX2xvZ1t0b19pZHhdID0gcmVfYWNxdWlyZV9zdGF0ZSAoJmVyciwgZGZhLCAmdW5pb25fc2V0KTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZ1bmlvbl9zZXQpOworCSAgaWYgKEJFIChtY3R4LT5zdGF0ZV9sb2dbdG9faWR4XSA9PSBOVUxMCisJCSAgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgcmV0dXJuIGVycjsKKwl9CisgICAgfQorICB3aGlsZSAoZW50KystPm1vcmUpOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIEJ1aWxkIHRyYW5zaXRpb24gdGFibGUgZm9yIHRoZSBzdGF0ZS4KKyAgIFJldHVybiAxIGlmIHN1Y2NlZWRlZCwgb3RoZXJ3aXNlIHJldHVybiBOVUxMLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2J1aWxkX3RydGFibGUgKGNvbnN0IHJlX2RmYV90ICpkZmEsIHJlX2RmYXN0YXRlX3QgKnN0YXRlKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IGksIGosIGNoLCBuZWVkX3dvcmRfdHJ0YWJsZSA9IDA7CisgIGJpdHNldF93b3JkX3QgZWxlbSwgbWFzazsKKyAgYm9vbCBkZXN0c19ub2RlX21hbGxvY2VkID0gZmFsc2U7CisgIGJvb2wgZGVzdF9zdGF0ZXNfbWFsbG9jZWQgPSBmYWxzZTsKKyAgaW50IG5kZXN0czsgLyogTnVtYmVyIG9mIHRoZSBkZXN0aW5hdGlvbiBzdGF0ZXMgZnJvbSBgc3RhdGUnLiAgKi8KKyAgcmVfZGZhc3RhdGVfdCAqKnRydGFibGU7CisgIHJlX2RmYXN0YXRlX3QgKipkZXN0X3N0YXRlcyA9IE5VTEwsICoqZGVzdF9zdGF0ZXNfd29yZCwgKipkZXN0X3N0YXRlc19ubDsKKyAgcmVfbm9kZV9zZXQgZm9sbG93cywgKmRlc3RzX25vZGU7CisgIGJpdHNldF90ICpkZXN0c19jaDsKKyAgYml0c2V0X3QgYWNjZXB0YWJsZTsKKworICBzdHJ1Y3QgZGVzdHNfYWxsb2MKKyAgeworICAgIHJlX25vZGVfc2V0IGRlc3RzX25vZGVbU0JDX01BWF07CisgICAgYml0c2V0X3QgZGVzdHNfY2hbU0JDX01BWF07CisgIH0gKmRlc3RzX2FsbG9jOworCisgIC8qIFdlIGJ1aWxkIERGQSBzdGF0ZXMgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIGRlc3RpbmF0aW9uIG5vZGVzCisgICAgIGZyb20gYHN0YXRlJy4gIGBkZXN0c19ub2RlW2ldJyByZXByZXNlbnRzIHRoZSBub2RlcyB3aGljaCBpLXRoCisgICAgIGRlc3RpbmF0aW9uIHN0YXRlIGNvbnRhaW5zLCBhbmQgYGRlc3RzX2NoW2ldJyByZXByZXNlbnRzIHRoZQorICAgICBjaGFyYWN0ZXJzIHdoaWNoIGktdGggZGVzdGluYXRpb24gc3RhdGUgYWNjZXB0cy4gICovCisjaWZkZWYgSEFWRV9BTExPQ0EKKyAgaWYgKF9fbGliY191c2VfYWxsb2NhIChzaXplb2YgKHN0cnVjdCBkZXN0c19hbGxvYykpKQorICAgIGRlc3RzX2FsbG9jID0gKHN0cnVjdCBkZXN0c19hbGxvYyAqKSBhbGxvY2EgKHNpemVvZiAoc3RydWN0IGRlc3RzX2FsbG9jKSk7CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGRlc3RzX2FsbG9jID0gcmVfbWFsbG9jIChzdHJ1Y3QgZGVzdHNfYWxsb2MsIDEpOworICAgICAgaWYgKEJFIChkZXN0c19hbGxvYyA9PSBOVUxMLCAwKSkKKwlyZXR1cm4gMDsKKyAgICAgIGRlc3RzX25vZGVfbWFsbG9jZWQgPSB0cnVlOworICAgIH0KKyAgZGVzdHNfbm9kZSA9IGRlc3RzX2FsbG9jLT5kZXN0c19ub2RlOworICBkZXN0c19jaCA9IGRlc3RzX2FsbG9jLT5kZXN0c19jaDsKKworICAvKiBJbml0aWFsaXplIHRyYW5zaXRvbiB0YWJsZS4gICovCisgIHN0YXRlLT53b3JkX3RydGFibGUgPSBzdGF0ZS0+dHJ0YWJsZSA9IE5VTEw7CisKKyAgLyogQXQgZmlyc3QsIGdyb3VwIGFsbCBub2RlcyBiZWxvbmdpbmcgdG8gYHN0YXRlJyBpbnRvIHNldmVyYWwKKyAgICAgZGVzdGluYXRpb25zLiAgKi8KKyAgbmRlc3RzID0gZ3JvdXBfbm9kZXNfaW50b19ERkFzdGF0ZXMgKGRmYSwgc3RhdGUsIGRlc3RzX25vZGUsIGRlc3RzX2NoKTsKKyAgaWYgKEJFIChuZGVzdHMgPD0gMCwgMCkpCisgICAgeworICAgICAgaWYgKGRlc3RzX25vZGVfbWFsbG9jZWQpCisJZnJlZSAoZGVzdHNfYWxsb2MpOworICAgICAgLyogUmV0dXJuIDAgaW4gY2FzZSBvZiBhbiBlcnJvciwgMSBvdGhlcndpc2UuICAqLworICAgICAgaWYgKG5kZXN0cyA9PSAwKQorCXsKKwkgIHN0YXRlLT50cnRhYmxlID0gKHJlX2RmYXN0YXRlX3QgKiopCisJICAgIGNhbGxvYyAoc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopLCBTQkNfTUFYKTsKKwkgIHJldHVybiAxOworCX0KKyAgICAgIHJldHVybiAwOworICAgIH0KKworICBlcnIgPSByZV9ub2RlX3NldF9hbGxvYyAoJmZvbGxvd3MsIG5kZXN0cyArIDEpOworICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisgICAgZ290byBvdXRfZnJlZTsKKworICAvKiBBdm9pZCBhcml0aG1ldGljIG92ZXJmbG93IGluIHNpemUgY2FsY3VsYXRpb24uICAqLworICBpZiAoQkUgKCgoKFNJWkVfTUFYIC0gKHNpemVvZiAocmVfbm9kZV9zZXQpICsgc2l6ZW9mIChiaXRzZXRfdCkpICogU0JDX01BWCkKKwkgICAgLyAoMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSkpCisJICAgPCBuZGVzdHMpLAorCSAgMCkpCisgICAgZ290byBvdXRfZnJlZTsKKworI2lmZGVmIEhBVkVfQUxMT0NBCisgIGlmIChfX2xpYmNfdXNlX2FsbG9jYSAoKHNpemVvZiAocmVfbm9kZV9zZXQpICsgc2l6ZW9mIChiaXRzZXRfdCkpICogU0JDX01BWAorCQkJICsgbmRlc3RzICogMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSkpCisgICAgZGVzdF9zdGF0ZXMgPSAocmVfZGZhc3RhdGVfdCAqKikKKyAgICAgIGFsbG9jYSAobmRlc3RzICogMyAqIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSk7CisgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgIGRlc3Rfc3RhdGVzID0gKHJlX2RmYXN0YXRlX3QgKiopCisJbWFsbG9jIChuZGVzdHMgKiAzICogc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopKTsKKyAgICAgIGlmIChCRSAoZGVzdF9zdGF0ZXMgPT0gTlVMTCwgMCkpCisJeworb3V0X2ZyZWU6CisJICBpZiAoZGVzdF9zdGF0ZXNfbWFsbG9jZWQpCisJICAgIGZyZWUgKGRlc3Rfc3RhdGVzKTsKKwkgIHJlX25vZGVfc2V0X2ZyZWUgKCZmb2xsb3dzKTsKKwkgIGZvciAoaSA9IDA7IGkgPCBuZGVzdHM7ICsraSkKKwkgICAgcmVfbm9kZV9zZXRfZnJlZSAoZGVzdHNfbm9kZSArIGkpOworCSAgaWYgKGRlc3RzX25vZGVfbWFsbG9jZWQpCisJICAgIGZyZWUgKGRlc3RzX2FsbG9jKTsKKwkgIHJldHVybiAwOworCX0KKyAgICAgIGRlc3Rfc3RhdGVzX21hbGxvY2VkID0gdHJ1ZTsKKyAgICB9CisgIGRlc3Rfc3RhdGVzX3dvcmQgPSBkZXN0X3N0YXRlcyArIG5kZXN0czsKKyAgZGVzdF9zdGF0ZXNfbmwgPSBkZXN0X3N0YXRlc193b3JkICsgbmRlc3RzOworICBiaXRzZXRfZW1wdHkgKGFjY2VwdGFibGUpOworCisgIC8qIFRoZW4gYnVpbGQgdGhlIHN0YXRlcyBmb3IgYWxsIGRlc3RpbmF0aW9ucy4gICovCisgIGZvciAoaSA9IDA7IGkgPCBuZGVzdHM7ICsraSkKKyAgICB7CisgICAgICBpbnQgbmV4dF9ub2RlOworICAgICAgcmVfbm9kZV9zZXRfZW1wdHkgKCZmb2xsb3dzKTsKKyAgICAgIC8qIE1lcmdlIHRoZSBmb2xsb3dzIG9mIHRoaXMgZGVzdGluYXRpb24gc3RhdGVzLiAgKi8KKyAgICAgIGZvciAoaiA9IDA7IGogPCBkZXN0c19ub2RlW2ldLm5lbGVtOyArK2opCisJeworCSAgbmV4dF9ub2RlID0gZGZhLT5uZXh0c1tkZXN0c19ub2RlW2ldLmVsZW1zW2pdXTsKKwkgIGlmIChuZXh0X25vZGUgIT0gLTEpCisJICAgIHsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9tZXJnZSAoJmZvbGxvd3MsIGRmYS0+ZWNsb3N1cmVzICsgbmV4dF9ub2RlKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gb3V0X2ZyZWU7CisJICAgIH0KKwl9CisgICAgICBkZXN0X3N0YXRlc1tpXSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZm9sbG93cywgMCk7CisgICAgICBpZiAoQkUgKGRlc3Rfc3RhdGVzW2ldID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwlnb3RvIG91dF9mcmVlOworICAgICAgLyogSWYgdGhlIG5ldyBzdGF0ZSBoYXMgY29udGV4dCBjb25zdHJhaW50LAorCSBidWlsZCBhcHByb3ByaWF0ZSBzdGF0ZXMgZm9yIHRoZXNlIGNvbnRleHRzLiAgKi8KKyAgICAgIGlmIChkZXN0X3N0YXRlc1tpXS0+aGFzX2NvbnN0cmFpbnQpCisJeworCSAgZGVzdF9zdGF0ZXNfd29yZFtpXSA9IHJlX2FjcXVpcmVfc3RhdGVfY29udGV4dCAoJmVyciwgZGZhLCAmZm9sbG93cywKKwkJCQkJCQkgIENPTlRFWFRfV09SRCk7CisJICBpZiAoQkUgKGRlc3Rfc3RhdGVzX3dvcmRbaV0gPT0gTlVMTCAmJiBlcnIgIT0gUkVHX05PRVJST1IsIDApKQorCSAgICBnb3RvIG91dF9mcmVlOworCisJICBpZiAoZGVzdF9zdGF0ZXNbaV0gIT0gZGVzdF9zdGF0ZXNfd29yZFtpXSAmJiBkZmEtPm1iX2N1cl9tYXggPiAxKQorCSAgICBuZWVkX3dvcmRfdHJ0YWJsZSA9IDE7CisKKwkgIGRlc3Rfc3RhdGVzX25sW2ldID0gcmVfYWNxdWlyZV9zdGF0ZV9jb250ZXh0ICgmZXJyLCBkZmEsICZmb2xsb3dzLAorCQkJCQkJCUNPTlRFWFRfTkVXTElORSk7CisJICBpZiAoQkUgKGRlc3Rfc3RhdGVzX25sW2ldID09IE5VTEwgJiYgZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBvdXRfZnJlZTsKKyAJfQorICAgICAgZWxzZQorCXsKKwkgIGRlc3Rfc3RhdGVzX3dvcmRbaV0gPSBkZXN0X3N0YXRlc1tpXTsKKwkgIGRlc3Rfc3RhdGVzX25sW2ldID0gZGVzdF9zdGF0ZXNbaV07CisJfQorICAgICAgYml0c2V0X21lcmdlIChhY2NlcHRhYmxlLCBkZXN0c19jaFtpXSk7CisgICAgfQorCisgIGlmICghQkUgKG5lZWRfd29yZF90cnRhYmxlLCAwKSkKKyAgICB7CisgICAgICAvKiBXZSBkb24ndCBjYXJlIGFib3V0IHdoZXRoZXIgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgaXMgYSB3b3JkCisJIGNoYXJhY3Rlciwgb3Igd2UgYXJlIGluIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIHNldCBzbyB3ZSBjYW4KKwkgZGlzY2VybiBieSBsb29raW5nIGF0IHRoZSBjaGFyYWN0ZXIgY29kZTogYWxsb2NhdGUgYQorCSAyNTYtZW50cnkgdHJhbnNpdGlvbiB0YWJsZS4gICovCisgICAgICB0cnRhYmxlID0gc3RhdGUtPnRydGFibGUgPQorCShyZV9kZmFzdGF0ZV90ICoqKSBjYWxsb2MgKHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSwgU0JDX01BWCk7CisgICAgICBpZiAoQkUgKHRydGFibGUgPT0gTlVMTCwgMCkpCisJZ290byBvdXRfZnJlZTsKKworICAgICAgLyogRm9yIGFsbCBjaGFyYWN0ZXJzIGNoLi4uOiAgKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwlmb3IgKGNoID0gaSAqIEJJVFNFVF9XT1JEX0JJVFMsIGVsZW0gPSBhY2NlcHRhYmxlW2ldLCBtYXNrID0gMTsKKwkgICAgIGVsZW07CisJICAgICBtYXNrIDw8PSAxLCBlbGVtID4+PSAxLCArK2NoKQorCSAgaWYgKEJFIChlbGVtICYgMSwgMCkpCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGRlc3RpbmF0aW9uIHdoaWNoIGFjY2VwdHMKKwkJIGNoYXJhY3RlciBjaC4gIFNlZSBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcy4gICovCisJICAgICAgZm9yIChqID0gMDsgKGRlc3RzX2NoW2pdW2ldICYgbWFzaykgPT0gMDsgKytqKQorCQk7CisKKwkgICAgICAvKiBqLXRoIGRlc3RpbmF0aW9uIGFjY2VwdHMgdGhlIHdvcmQgY2hhcmFjdGVyIGNoLiAgKi8KKwkgICAgICBpZiAoZGZhLT53b3JkX2NoYXJbaV0gJiBtYXNrKQorCQl0cnRhYmxlW2NoXSA9IGRlc3Rfc3RhdGVzX3dvcmRbal07CisJICAgICAgZWxzZQorCQl0cnRhYmxlW2NoXSA9IGRlc3Rfc3RhdGVzW2pdOworCSAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgLyogV2UgY2FyZSBhYm91dCB3aGV0aGVyIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIGEgd29yZAorCSBjaGFyYWN0ZXIsIGFuZCB3ZSBhcmUgaW4gYSBtdWx0aS1ieXRlIGNoYXJhY3RlciBzZXQ6IGRpc2Nlcm4KKwkgYnkgbG9va2luZyBhdCB0aGUgY2hhcmFjdGVyIGNvZGU6IGJ1aWxkIHR3byAyNTYtZW50cnkKKwkgdHJhbnNpdGlvbiB0YWJsZXMsIG9uZSBzdGFydGluZyBhdCB0cnRhYmxlWzBdIGFuZCBvbmUKKwkgc3RhcnRpbmcgYXQgdHJ0YWJsZVtTQkNfTUFYXS4gICovCisgICAgICB0cnRhYmxlID0gc3RhdGUtPndvcmRfdHJ0YWJsZSA9CisJKHJlX2RmYXN0YXRlX3QgKiopIGNhbGxvYyAoc2l6ZW9mIChyZV9kZmFzdGF0ZV90ICopLCAyICogU0JDX01BWCk7CisgICAgICBpZiAoQkUgKHRydGFibGUgPT0gTlVMTCwgMCkpCisJZ290byBvdXRfZnJlZTsKKworICAgICAgLyogRm9yIGFsbCBjaGFyYWN0ZXJzIGNoLi4uOiAgKi8KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBCSVRTRVRfV09SRFM7ICsraSkKKwlmb3IgKGNoID0gaSAqIEJJVFNFVF9XT1JEX0JJVFMsIGVsZW0gPSBhY2NlcHRhYmxlW2ldLCBtYXNrID0gMTsKKwkgICAgIGVsZW07CisJICAgICBtYXNrIDw8PSAxLCBlbGVtID4+PSAxLCArK2NoKQorCSAgaWYgKEJFIChlbGVtICYgMSwgMCkpCisJICAgIHsKKwkgICAgICAvKiBUaGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGRlc3RpbmF0aW9uIHdoaWNoIGFjY2VwdHMKKwkJIGNoYXJhY3RlciBjaC4gIFNlZSBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcy4gICovCisJICAgICAgZm9yIChqID0gMDsgKGRlc3RzX2NoW2pdW2ldICYgbWFzaykgPT0gMDsgKytqKQorCQk7CisKKwkgICAgICAvKiBqLXRoIGRlc3RpbmF0aW9uIGFjY2VwdHMgdGhlIHdvcmQgY2hhcmFjdGVyIGNoLiAgKi8KKwkgICAgICB0cnRhYmxlW2NoXSA9IGRlc3Rfc3RhdGVzW2pdOworCSAgICAgIHRydGFibGVbY2ggKyBTQkNfTUFYXSA9IGRlc3Rfc3RhdGVzX3dvcmRbal07CisJICAgIH0KKyAgICB9CisKKyAgLyogbmV3IGxpbmUgKi8KKyAgaWYgKGJpdHNldF9jb250YWluIChhY2NlcHRhYmxlLCBORVdMSU5FX0NIQVIpKQorICAgIHsKKyAgICAgIC8qIFRoZSBjdXJyZW50IHN0YXRlIGFjY2VwdHMgbmV3bGluZSBjaGFyYWN0ZXIuICAqLworICAgICAgZm9yIChqID0gMDsgaiA8IG5kZXN0czsgKytqKQorCWlmIChiaXRzZXRfY29udGFpbiAoZGVzdHNfY2hbal0sIE5FV0xJTkVfQ0hBUikpCisJICB7CisJICAgIC8qIGstdGggZGVzdGluYXRpb24gYWNjZXB0cyBuZXdsaW5lIGNoYXJhY3Rlci4gICovCisJICAgIHRydGFibGVbTkVXTElORV9DSEFSXSA9IGRlc3Rfc3RhdGVzX25sW2pdOworCSAgICBpZiAobmVlZF93b3JkX3RydGFibGUpCisJICAgICAgdHJ0YWJsZVtORVdMSU5FX0NIQVIgKyBTQkNfTUFYXSA9IGRlc3Rfc3RhdGVzX25sW2pdOworCSAgICAvKiBUaGVyZSBtdXN0IGJlIG9ubHkgb25lIGRlc3RpbmF0aW9uIHdoaWNoIGFjY2VwdHMKKwkgICAgICAgbmV3bGluZS4gIFNlZSBncm91cF9ub2Rlc19pbnRvX0RGQXN0YXRlcy4gICovCisJICAgIGJyZWFrOworCSAgfQorICAgIH0KKworICBpZiAoZGVzdF9zdGF0ZXNfbWFsbG9jZWQpCisgICAgZnJlZSAoZGVzdF9zdGF0ZXMpOworCisgIHJlX25vZGVfc2V0X2ZyZWUgKCZmb2xsb3dzKTsKKyAgZm9yIChpID0gMDsgaSA8IG5kZXN0czsgKytpKQorICAgIHJlX25vZGVfc2V0X2ZyZWUgKGRlc3RzX25vZGUgKyBpKTsKKworICBpZiAoZGVzdHNfbm9kZV9tYWxsb2NlZCkKKyAgICBmcmVlIChkZXN0c19hbGxvYyk7CisKKyAgcmV0dXJuIDE7Cit9CisKKy8qIEdyb3VwIGFsbCBub2RlcyBiZWxvbmdpbmcgdG8gU1RBVEUgaW50byBzZXZlcmFsIGRlc3RpbmF0aW9ucy4KKyAgIFRoZW4gZm9yIGFsbCBkZXN0aW5hdGlvbnMsIHNldCB0aGUgbm9kZXMgYmVsb25naW5nIHRvIHRoZSBkZXN0aW5hdGlvbgorICAgdG8gREVTVFNfTk9ERVtpXSBhbmQgc2V0IHRoZSBjaGFyYWN0ZXJzIGFjY2VwdGVkIGJ5IHRoZSBkZXN0aW5hdGlvbgorICAgdG8gREVTVF9DSFtpXS4gIFRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZSBudW1iZXIgb2YgZGVzdGluYXRpb25zLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2dyb3VwX25vZGVzX2ludG9fREZBc3RhdGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBjb25zdCByZV9kZmFzdGF0ZV90ICpzdGF0ZSwKKwkJCSAgICByZV9ub2RlX3NldCAqZGVzdHNfbm9kZSwgYml0c2V0X3QgKmRlc3RzX2NoKQoreworICByZWdfZXJyY29kZV90IGVycjsKKyAgaW50IHJlc3VsdDsKKyAgaW50IGksIGosIGs7CisgIGludCBuZGVzdHM7IC8qIE51bWJlciBvZiB0aGUgZGVzdGluYXRpb25zIGZyb20gYHN0YXRlJy4gICovCisgIGJpdHNldF90IGFjY2VwdHM7IC8qIENoYXJhY3RlcnMgYSBub2RlIGNhbiBhY2NlcHQuICAqLworICBjb25zdCByZV9ub2RlX3NldCAqY3VyX25vZGVzID0gJnN0YXRlLT5ub2RlczsKKyAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKyAgbmRlc3RzID0gMDsKKworICAvKiBGb3IgYWxsIHRoZSBub2RlcyBiZWxvbmdpbmcgdG8gYHN0YXRlJywgICovCisgIGZvciAoaSA9IDA7IGkgPCBjdXJfbm9kZXMtPm5lbGVtOyArK2kpCisgICAgeworICAgICAgcmVfdG9rZW5fdCAqbm9kZSA9ICZkZmEtPm5vZGVzW2N1cl9ub2Rlcy0+ZWxlbXNbaV1dOworICAgICAgcmVfdG9rZW5fdHlwZV90IHR5cGUgPSBub2RlLT50eXBlOworICAgICAgdW5zaWduZWQgaW50IGNvbnN0cmFpbnQgPSBub2RlLT5jb25zdHJhaW50OworCisgICAgICAvKiBFbnVtZXJhdGUgYWxsIHNpbmdsZSBieXRlIGNoYXJhY3RlciB0aGlzIG5vZGUgY2FuIGFjY2VwdC4gICovCisgICAgICBpZiAodHlwZSA9PSBDSEFSQUNURVIpCisJYml0c2V0X3NldCAoYWNjZXB0cywgbm9kZS0+b3ByLmMpOworICAgICAgZWxzZSBpZiAodHlwZSA9PSBTSU1QTEVfQlJBQ0tFVCkKKwl7CisJICBiaXRzZXRfbWVyZ2UgKGFjY2VwdHMsIG5vZGUtPm9wci5zYmNzZXQpOworCX0KKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfUEVSSU9EKQorCXsKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorCSAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJICAgIGJpdHNldF9tZXJnZSAoYWNjZXB0cywgZGZhLT5zYl9jaGFyKTsKKwkgIGVsc2UKKyNlbmRpZgorCSAgICBiaXRzZXRfc2V0X2FsbCAoYWNjZXB0cyk7CisJICBpZiAoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXG4nKTsKKwkgIGlmIChkZmEtPnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXDAnKTsKKwl9CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gT1BfVVRGOF9QRVJJT0QpCisJeworCSAgbWVtc2V0IChhY2NlcHRzLCAnXHhmZicsIHNpemVvZiAoYml0c2V0X3QpIC8gMik7CisJICBpZiAoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXG4nKTsKKwkgIGlmIChkZmEtPnN5bnRheCAmIFJFX0RPVF9OT1RfTlVMTCkKKwkgICAgYml0c2V0X2NsZWFyIChhY2NlcHRzLCAnXDAnKTsKKwl9CisjZW5kaWYKKyAgICAgIGVsc2UKKwljb250aW51ZTsKKworICAgICAgLyogQ2hlY2sgdGhlIGBhY2NlcHRzJyBhbmQgc2lmdCB0aGUgY2hhcmFjdGVycyB3aGljaCBhcmUgbm90CisJIG1hdGNoIGl0IHRoZSBjb250ZXh0LiAgKi8KKyAgICAgIGlmIChjb25zdHJhaW50KQorCXsKKwkgIGlmIChjb25zdHJhaW50ICYgTkVYVF9ORVdMSU5FX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBib29sIGFjY2VwdHNfbmV3bGluZSA9IGJpdHNldF9jb250YWluIChhY2NlcHRzLCBORVdMSU5FX0NIQVIpOworCSAgICAgIGJpdHNldF9lbXB0eSAoYWNjZXB0cyk7CisJICAgICAgaWYgKGFjY2VwdHNfbmV3bGluZSkKKwkJYml0c2V0X3NldCAoYWNjZXB0cywgTkVXTElORV9DSEFSKTsKKwkgICAgICBlbHNlCisJCWNvbnRpbnVlOworCSAgICB9CisJICBpZiAoY29uc3RyYWludCAmIE5FWFRfRU5EQlVGX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfZW1wdHkgKGFjY2VwdHMpOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisKKwkgIGlmIChjb25zdHJhaW50ICYgTkVYVF9XT1JEX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfd29yZF90IGFueV9zZXQgPSAwOworCSAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUiAmJiAhbm9kZS0+d29yZF9jaGFyKQorCQl7CisJCSAgYml0c2V0X2VtcHR5IChhY2NlcHRzKTsKKwkJICBjb250aW51ZTsKKwkJfQorI2lmZGVmIFJFX0VOQUJMRV9JMThOCisJICAgICAgaWYgKGRmYS0+bWJfY3VyX21heCA+IDEpCisJCWZvciAoaiA9IDA7IGogPCBCSVRTRVRfV09SRFM7ICsraikKKwkJICBhbnlfc2V0IHw9IChhY2NlcHRzW2pdICY9IChkZmEtPndvcmRfY2hhcltqXSB8IH5kZmEtPnNiX2NoYXJbal0pKTsKKwkgICAgICBlbHNlCisjZW5kaWYKKwkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gZGZhLT53b3JkX2NoYXJbal0pOworCSAgICAgIGlmICghYW55X3NldCkKKwkJY29udGludWU7CisJICAgIH0KKwkgIGlmIChjb25zdHJhaW50ICYgTkVYVF9OT1RXT1JEX0NPTlNUUkFJTlQpCisJICAgIHsKKwkgICAgICBiaXRzZXRfd29yZF90IGFueV9zZXQgPSAwOworCSAgICAgIGlmICh0eXBlID09IENIQVJBQ1RFUiAmJiBub2RlLT53b3JkX2NoYXIpCisJCXsKKwkJICBiaXRzZXRfZW1wdHkgKGFjY2VwdHMpOworCQkgIGNvbnRpbnVlOworCQl9CisjaWZkZWYgUkVfRU5BQkxFX0kxOE4KKwkgICAgICBpZiAoZGZhLT5tYl9jdXJfbWF4ID4gMSkKKwkJZm9yIChqID0gMDsgaiA8IEJJVFNFVF9XT1JEUzsgKytqKQorCQkgIGFueV9zZXQgfD0gKGFjY2VwdHNbal0gJj0gfihkZmEtPndvcmRfY2hhcltqXSAmIGRmYS0+c2JfY2hhcltqXSkpOworCSAgICAgIGVsc2UKKyNlbmRpZgorCQlmb3IgKGogPSAwOyBqIDwgQklUU0VUX1dPUkRTOyArK2opCisJCSAgYW55X3NldCB8PSAoYWNjZXB0c1tqXSAmPSB+ZGZhLT53b3JkX2NoYXJbal0pOworCSAgICAgIGlmICghYW55X3NldCkKKwkJY29udGludWU7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFRoZW4gZGl2aWRlIGBhY2NlcHRzJyBpbnRvIERGQSBzdGF0ZXMsIG9yIGNyZWF0ZSBhIG5ldworCSBzdGF0ZS4gIEFib3ZlLCB3ZSBtYWtlIHN1cmUgdGhhdCBhY2NlcHRzIGlzIG5vdCBlbXB0eS4gICovCisgICAgICBmb3IgKGogPSAwOyBqIDwgbmRlc3RzOyArK2opCisJeworCSAgYml0c2V0X3QgaW50ZXJzZWM7IC8qIEludGVyc2VjdGlvbiBzZXRzLCBzZWUgYmVsb3cuICAqLworCSAgYml0c2V0X3QgcmVtYWluczsKKwkgIC8qIEZsYWdzLCBzZWUgYmVsb3cuICAqLworCSAgYml0c2V0X3dvcmRfdCBoYXNfaW50ZXJzZWMsIG5vdF9zdWJzZXQsIG5vdF9jb25zdW1lZDsKKworCSAgLyogT3B0aW1pemF0aW9uLCBza2lwIGlmIHRoaXMgc3RhdGUgZG9lc24ndCBhY2NlcHQgdGhlIGNoYXJhY3Rlci4gICovCisJICBpZiAodHlwZSA9PSBDSEFSQUNURVIgJiYgIWJpdHNldF9jb250YWluIChkZXN0c19jaFtqXSwgbm9kZS0+b3ByLmMpKQorCSAgICBjb250aW51ZTsKKworCSAgLyogRW51bWVyYXRlIHRoZSBpbnRlcnNlY3Rpb24gc2V0IG9mIHRoaXMgc3RhdGUgYW5kIGBhY2NlcHRzJy4gICovCisJICBoYXNfaW50ZXJzZWMgPSAwOworCSAgZm9yIChrID0gMDsgayA8IEJJVFNFVF9XT1JEUzsgKytrKQorCSAgICBoYXNfaW50ZXJzZWMgfD0gaW50ZXJzZWNba10gPSBhY2NlcHRzW2tdICYgZGVzdHNfY2hbal1ba107CisJICAvKiBBbmQgc2tpcCBpZiB0aGUgaW50ZXJzZWN0aW9uIHNldCBpcyBlbXB0eS4gICovCisJICBpZiAoIWhhc19pbnRlcnNlYykKKwkgICAgY29udGludWU7CisKKwkgIC8qIFRoZW4gY2hlY2sgaWYgdGhpcyBzdGF0ZSBpcyBhIHN1YnNldCBvZiBgYWNjZXB0cycuICAqLworCSAgbm90X3N1YnNldCA9IG5vdF9jb25zdW1lZCA9IDA7CisJICBmb3IgKGsgPSAwOyBrIDwgQklUU0VUX1dPUkRTOyArK2spCisJICAgIHsKKwkgICAgICBub3Rfc3Vic2V0IHw9IHJlbWFpbnNba10gPSB+YWNjZXB0c1trXSAmIGRlc3RzX2NoW2pdW2tdOworCSAgICAgIG5vdF9jb25zdW1lZCB8PSBhY2NlcHRzW2tdID0gYWNjZXB0c1trXSAmIH5kZXN0c19jaFtqXVtrXTsKKwkgICAgfQorCisJICAvKiBJZiB0aGlzIHN0YXRlIGlzbid0IGEgc3Vic2V0IG9mIGBhY2NlcHRzJywgY3JlYXRlIGEKKwkgICAgIG5ldyBncm91cCBzdGF0ZSwgd2hpY2ggaGFzIHRoZSBgcmVtYWlucycuICovCisJICBpZiAobm90X3N1YnNldCkKKwkgICAgeworCSAgICAgIGJpdHNldF9jb3B5IChkZXN0c19jaFtuZGVzdHNdLCByZW1haW5zKTsKKwkgICAgICBiaXRzZXRfY29weSAoZGVzdHNfY2hbal0sIGludGVyc2VjKTsKKwkgICAgICBlcnIgPSByZV9ub2RlX3NldF9pbml0X2NvcHkgKGRlc3RzX25vZGUgKyBuZGVzdHMsICZkZXN0c19ub2RlW2pdKTsKKwkgICAgICBpZiAoQkUgKGVyciAhPSBSRUdfTk9FUlJPUiwgMCkpCisJCWdvdG8gZXJyb3JfcmV0dXJuOworCSAgICAgICsrbmRlc3RzOworCSAgICB9CisKKwkgIC8qIFB1dCB0aGUgcG9zaXRpb24gaW4gdGhlIGN1cnJlbnQgZ3JvdXAuICovCisJICByZXN1bHQgPSByZV9ub2RlX3NldF9pbnNlcnQgKCZkZXN0c19ub2RlW2pdLCBjdXJfbm9kZXMtPmVsZW1zW2ldKTsKKwkgIGlmIChCRSAocmVzdWx0IDwgMCwgMCkpCisJICAgIGdvdG8gZXJyb3JfcmV0dXJuOworCisJICAvKiBJZiBhbGwgY2hhcmFjdGVycyBhcmUgY29uc3VtZWQsIGdvIHRvIG5leHQgbm9kZS4gKi8KKwkgIGlmICghbm90X2NvbnN1bWVkKQorCSAgICBicmVhazsKKwl9CisgICAgICAvKiBTb21lIGNoYXJhY3RlcnMgcmVtYWluLCBjcmVhdGUgYSBuZXcgZ3JvdXAuICovCisgICAgICBpZiAoaiA9PSBuZGVzdHMpCisJeworCSAgYml0c2V0X2NvcHkgKGRlc3RzX2NoW25kZXN0c10sIGFjY2VwdHMpOworCSAgZXJyID0gcmVfbm9kZV9zZXRfaW5pdF8xIChkZXN0c19ub2RlICsgbmRlc3RzLCBjdXJfbm9kZXMtPmVsZW1zW2ldKTsKKwkgIGlmIChCRSAoZXJyICE9IFJFR19OT0VSUk9SLCAwKSkKKwkgICAgZ290byBlcnJvcl9yZXR1cm47CisJICArK25kZXN0czsKKwkgIGJpdHNldF9lbXB0eSAoYWNjZXB0cyk7CisJfQorICAgIH0KKyAgcmV0dXJuIG5kZXN0czsKKyBlcnJvcl9yZXR1cm46CisgIGZvciAoaiA9IDA7IGogPCBuZGVzdHM7ICsraikKKyAgICByZV9ub2RlX3NldF9mcmVlIChkZXN0c19ub2RlICsgaik7CisgIHJldHVybiAtMTsKK30KKworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisvKiBDaGVjayBob3cgbWFueSBieXRlcyB0aGUgbm9kZSBgZGZhLT5ub2Rlc1tub2RlX2lkeF0nIGFjY2VwdHMuCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgYnl0ZXMgdGhlIG5vZGUgYWNjZXB0cy4KKyAgIFNUUl9JRFggaXMgdGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGlucHV0IHN0cmluZy4KKworICAgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBub2RlcyB3aGljaCBjYW4gYWNjZXB0IG9uZSBjaGFyYWN0ZXIsIG9yCisgICBvbmUgY29sbGF0aW5nIGVsZW1lbnQgbGlrZSAnLicsICdbYS16XScsIG9wcG9zaXRlIHRvIHRoZSBvdGhlciBub2RlcworICAgY2FuIG9ubHkgYWNjZXB0IG9uZSBieXRlLiAgKi8KKworc3RhdGljIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2NoZWNrX25vZGVfYWNjZXB0X2J5dGVzIChjb25zdCByZV9kZmFfdCAqZGZhLCBpbnQgbm9kZV9pZHgsCisJCQkgY29uc3QgcmVfc3RyaW5nX3QgKmlucHV0LCBpbnQgc3RyX2lkeCkKK3sKKyAgY29uc3QgcmVfdG9rZW5fdCAqbm9kZSA9IGRmYS0+bm9kZXMgKyBub2RlX2lkeDsKKyAgaW50IGNoYXJfbGVuLCBlbGVtX2xlbjsKKyAgaW50IGk7CisgIHdpbnRfdCB3YzsKKworICBpZiAoQkUgKG5vZGUtPnR5cGUgPT0gT1BfVVRGOF9QRVJJT0QsIDApKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCksIGQ7CisgICAgICBpZiAoQkUgKGMgPCAweGMyLCAxKSkKKwlyZXR1cm4gMDsKKworICAgICAgaWYgKHN0cl9pZHggKyAyID4gaW5wdXQtPmxlbikKKwlyZXR1cm4gMDsKKworICAgICAgZCA9IHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCArIDEpOworICAgICAgaWYgKGMgPCAweGUwKQorCXJldHVybiAoZCA8IDB4ODAgfHwgZCA+IDB4YmYpID8gMCA6IDI7CisgICAgICBlbHNlIGlmIChjIDwgMHhmMCkKKwl7CisJICBjaGFyX2xlbiA9IDM7CisJICBpZiAoYyA9PSAweGUwICYmIGQgPCAweGEwKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChjIDwgMHhmOCkKKwl7CisJICBjaGFyX2xlbiA9IDQ7CisJICBpZiAoYyA9PSAweGYwICYmIGQgPCAweDkwKQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChjIDwgMHhmYykKKwl7CisJICBjaGFyX2xlbiA9IDU7CisJICBpZiAoYyA9PSAweGY4ICYmIGQgPCAweDg4KQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlIGlmIChjIDwgMHhmZSkKKwl7CisJICBjaGFyX2xlbiA9IDY7CisJICBpZiAoYyA9PSAweGZjICYmIGQgPCAweDg0KQorCSAgICByZXR1cm4gMDsKKwl9CisgICAgICBlbHNlCisJcmV0dXJuIDA7CisKKyAgICAgIGlmIChzdHJfaWR4ICsgY2hhcl9sZW4gPiBpbnB1dC0+bGVuKQorCXJldHVybiAwOworCisgICAgICBmb3IgKGkgPSAxOyBpIDwgY2hhcl9sZW47ICsraSkKKwl7CisJICBkID0gcmVfc3RyaW5nX2J5dGVfYXQgKGlucHV0LCBzdHJfaWR4ICsgaSk7CisJICBpZiAoZCA8IDB4ODAgfHwgZCA+IDB4YmYpCisJICAgIHJldHVybiAwOworCX0KKyAgICAgIHJldHVybiBjaGFyX2xlbjsKKyAgICB9CisKKyAgY2hhcl9sZW4gPSByZV9zdHJpbmdfY2hhcl9zaXplX2F0IChpbnB1dCwgc3RyX2lkeCk7CisgIGlmIChub2RlLT50eXBlID09IE9QX1BFUklPRCkKKyAgICB7CisgICAgICBpZiAoY2hhcl9sZW4gPD0gMSkKKwlyZXR1cm4gMDsKKyAgICAgIC8qIEZJWE1FOiBJIGRvbid0IHRoaW5rIHRoaXMgaWYgaXMgbmVlZGVkLCBhcyBib3RoICdcbicKKwkgYW5kICdcMCcgYXJlIGNoYXJfbGVuID09IDEuICAqLworICAgICAgLyogJy4nIGFjY2VwdHMgYW55IG9uZSBjaGFyYWN0ZXIgZXhjZXB0IHRoZSBmb2xsb3dpbmcgdHdvIGNhc2VzLiAgKi8KKyAgICAgIGlmICgoIShkZmEtPnN5bnRheCAmIFJFX0RPVF9ORVdMSU5FKSAmJgorCSAgIHJlX3N0cmluZ19ieXRlX2F0IChpbnB1dCwgc3RyX2lkeCkgPT0gJ1xuJykgfHwKKwkgICgoZGZhLT5zeW50YXggJiBSRV9ET1RfTk9UX05VTEwpICYmCisJICAgcmVfc3RyaW5nX2J5dGVfYXQgKGlucHV0LCBzdHJfaWR4KSA9PSAnXDAnKSkKKwlyZXR1cm4gMDsKKyAgICAgIHJldHVybiBjaGFyX2xlbjsKKyAgICB9CisKKyAgZWxlbV9sZW4gPSByZV9zdHJpbmdfZWxlbV9zaXplX2F0IChpbnB1dCwgc3RyX2lkeCk7CisgIHdjID0gX19idG93YygqKGlucHV0LT5tYnMrc3RyX2lkeCkpOworICBpZiAoKChlbGVtX2xlbiA8PSAxICYmIGNoYXJfbGVuIDw9IDEpIHx8IGNoYXJfbGVuID09IDApICYmICh3YyAhPSBXRU9GICYmIHdjIDwgU0JDX01BWCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKG5vZGUtPnR5cGUgPT0gQ09NUExFWF9CUkFDS0VUKQorICAgIHsKKyAgICAgIGNvbnN0IHJlX2NoYXJzZXRfdCAqY3NldCA9IG5vZGUtPm9wci5tYmNzZXQ7CisjIGlmZGVmIF9MSUJDCisgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwaW4KKwk9ICgoY29uc3QgdW5zaWduZWQgY2hhciAqKSByZV9zdHJpbmdfZ2V0X2J1ZmZlciAoaW5wdXQpICsgc3RyX2lkeCk7CisgICAgICBpbnQgajsKKyAgICAgIHVpbnQzMl90IG5ydWxlczsKKyMgZW5kaWYgLyogX0xJQkMgKi8KKyAgICAgIGludCBtYXRjaF9sZW4gPSAwOworICAgICAgd2NoYXJfdCB3YyA9ICgoY3NldC0+bnJhbmdlcyB8fCBjc2V0LT5uY2hhcl9jbGFzc2VzIHx8IGNzZXQtPm5tYmNoYXJzKQorCQkgICAgPyByZV9zdHJpbmdfd2NoYXJfYXQgKGlucHV0LCBzdHJfaWR4KSA6IDApOworCisgICAgICAvKiBtYXRjaCB3aXRoIG11bHRpYnl0ZSBjaGFyYWN0ZXI/ICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5tYmNoYXJzOyArK2kpCisJaWYgKHdjID09IGNzZXQtPm1iY2hhcnNbaV0pCisJICB7CisJICAgIG1hdGNoX2xlbiA9IGNoYXJfbGVuOworCSAgICBnb3RvIGNoZWNrX25vZGVfYWNjZXB0X2J5dGVzX21hdGNoOworCSAgfQorICAgICAgLyogbWF0Y2ggd2l0aCBjaGFyYWN0ZXJfY2xhc3M/ICAqLworICAgICAgZm9yIChpID0gMDsgaSA8IGNzZXQtPm5jaGFyX2NsYXNzZXM7ICsraSkKKwl7CisJICB3Y3R5cGVfdCB3dCA9IGNzZXQtPmNoYXJfY2xhc3Nlc1tpXTsKKwkgIGlmIChfX2lzd2N0eXBlICh3Yywgd3QpKQorCSAgICB7CisJICAgICAgbWF0Y2hfbGVuID0gY2hhcl9sZW47CisJICAgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkgICAgfQorCX0KKworIyBpZmRlZiBfTElCQworICAgICAgbnJ1bGVzID0gX05MX0NVUlJFTlRfV09SRCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfTlJVTEVTKTsKKyAgICAgIGlmIChucnVsZXMgIT0gMCkKKwl7CisJICB1bnNpZ25lZCBpbnQgaW5fY29sbHNlcSA9IDA7CisJICBjb25zdCBpbnQzMl90ICp0YWJsZSwgKmluZGlyZWN0OworCSAgY29uc3QgdW5zaWduZWQgY2hhciAqd2VpZ2h0cywgKmV4dHJhOworCSAgY29uc3QgY2hhciAqY29sbHNlcXdjOworCSAgLyogVGhpcyAjaW5jbHVkZSBkZWZpbmVzIGEgbG9jYWwgZnVuY3Rpb24hICAqLworIyAgaW5jbHVkZSA8bG9jYWxlL3dlaWdodC5oPgorCisJICAvKiBtYXRjaCB3aXRoIGNvbGxhdGluZ19zeW1ib2w/ICAqLworCSAgaWYgKGNzZXQtPm5jb2xsX3N5bXMpCisJICAgIGV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwkgICAgICBfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKwkgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5uY29sbF9zeW1zOyArK2kpCisJICAgIHsKKwkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsX3N5bSA9IGV4dHJhICsgY3NldC0+Y29sbF9zeW1zW2ldOworCSAgICAgIC8qIENvbXBhcmUgdGhlIGxlbmd0aCBvZiBpbnB1dCBjb2xsYXRpbmcgZWxlbWVudCBhbmQKKwkJIHRoZSBsZW5ndGggb2YgY3VycmVudCBjb2xsYXRpbmcgZWxlbWVudC4gICovCisJICAgICAgaWYgKCpjb2xsX3N5bSAhPSBlbGVtX2xlbikKKwkJY29udGludWU7CisJICAgICAgLyogQ29tcGFyZSBlYWNoIGJ5dGVzLiAgKi8KKwkgICAgICBmb3IgKGogPSAwOyBqIDwgKmNvbGxfc3ltOyBqKyspCisJCWlmIChwaW5bal0gIT0gY29sbF9zeW1bMSArIGpdKQorCQkgIGJyZWFrOworCSAgICAgIGlmIChqID09ICpjb2xsX3N5bSkKKwkJeworCQkgIC8qIE1hdGNoIGlmIGV2ZXJ5IGJ5dGVzIGlzIGVxdWFsLiAgKi8KKwkJICBtYXRjaF9sZW4gPSBqOworCQkgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisJCX0KKwkgICAgfQorCisJICBpZiAoY3NldC0+bnJhbmdlcykKKwkgICAgeworCSAgICAgIGlmIChlbGVtX2xlbiA8PSBjaGFyX2xlbikKKwkJeworCQkgIGNvbGxzZXF3YyA9IF9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9DT0xMU0VRV0MpOworCQkgIGluX2NvbGxzZXEgPSBfX2NvbGxzZXFfdGFibGVfbG9va3VwIChjb2xsc2Vxd2MsIHdjKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJaW5fY29sbHNlcSA9IGZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChwaW4sIGVsZW1fbGVuKTsKKwkgICAgfQorCSAgLyogbWF0Y2ggd2l0aCByYW5nZSBleHByZXNzaW9uPyAgKi8KKwkgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5ucmFuZ2VzOyArK2kpCisJICAgIGlmIChjc2V0LT5yYW5nZV9zdGFydHNbaV0gPD0gaW5fY29sbHNlcQorCQkmJiBpbl9jb2xsc2VxIDw9IGNzZXQtPnJhbmdlX2VuZHNbaV0pCisJICAgICAgeworCQltYXRjaF9sZW4gPSBlbGVtX2xlbjsKKwkJZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkgICAgICB9CisKKwkgIC8qIG1hdGNoIHdpdGggZXF1aXZhbGVuY2VfY2xhc3M/ICAqLworCSAgaWYgKGNzZXQtPm5lcXVpdl9jbGFzc2VzKQorCSAgICB7CisJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSBwaW47CisJICAgICAgdGFibGUgPSAoY29uc3QgaW50MzJfdCAqKQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfVEFCTEVNQik7CisJICAgICAgd2VpZ2h0cyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopCisJCV9OTF9DVVJSRU5UIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9XRUlHSFRNQik7CisJICAgICAgZXh0cmEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfRVhUUkFNQik7CisJICAgICAgaW5kaXJlY3QgPSAoY29uc3QgaW50MzJfdCAqKQorCQlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfSU5ESVJFQ1RNQik7CisJICAgICAgaW50MzJfdCBpZHggPSBmaW5kaWR4ICgmY3ApOworCSAgICAgIGlmIChpZHggPiAwKQorCQlmb3IgKGkgPSAwOyBpIDwgY3NldC0+bmVxdWl2X2NsYXNzZXM7ICsraSkKKwkJICB7CisJCSAgICBpbnQzMl90IGVxdWl2X2NsYXNzX2lkeCA9IGNzZXQtPmVxdWl2X2NsYXNzZXNbaV07CisJCSAgICBzaXplX3Qgd2VpZ2h0X2xlbiA9IHdlaWdodHNbaWR4ICYgMHhmZmZmZmZdOworCQkgICAgaWYgKHdlaWdodF9sZW4gPT0gd2VpZ2h0c1tlcXVpdl9jbGFzc19pZHggJiAweGZmZmZmZl0KKwkJCSYmIChpZHggPj4gMjQpID09IChlcXVpdl9jbGFzc19pZHggPj4gMjQpKQorCQkgICAgICB7CisJCQlpbnQgY250ID0gMDsKKworCQkJaWR4ICY9IDB4ZmZmZmZmOworCQkJZXF1aXZfY2xhc3NfaWR4ICY9IDB4ZmZmZmZmOworCisJCQl3aGlsZSAoY250IDw9IHdlaWdodF9sZW4KKwkJCSAgICAgICAmJiAod2VpZ2h0c1tlcXVpdl9jbGFzc19pZHggKyAxICsgY250XQorCQkJCSAgID09IHdlaWdodHNbaWR4ICsgMSArIGNudF0pKQorCQkJICArK2NudDsKKwkJCWlmIChjbnQgPiB3ZWlnaHRfbGVuKQorCQkJICB7CisJCQkgICAgbWF0Y2hfbGVuID0gZWxlbV9sZW47CisJCQkgICAgZ290byBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDsKKwkJCSAgfQorCQkgICAgICB9CisJCSAgfQorCSAgICB9CisJfQorICAgICAgZWxzZQorIyBlbmRpZiAvKiBfTElCQyAqLworCXsKKwkgIC8qIG1hdGNoIHdpdGggcmFuZ2UgZXhwcmVzc2lvbj8gICovCisjaWYgX19HTlVDX18gPj0gMgorCSAgd2NoYXJfdCBjbXBfYnVmW10gPSB7TCdcMCcsIEwnXDAnLCB3YywgTCdcMCcsIEwnXDAnLCBMJ1wwJ307CisjZWxzZQorCSAgd2NoYXJfdCBjbXBfYnVmW10gPSB7TCdcMCcsIEwnXDAnLCBMJ1wwJywgTCdcMCcsIEwnXDAnLCBMJ1wwJ307CisJICBjbXBfYnVmWzJdID0gd2M7CisjZW5kaWYKKwkgIGZvciAoaSA9IDA7IGkgPCBjc2V0LT5ucmFuZ2VzOyArK2kpCisJICAgIHsKKwkgICAgICBjbXBfYnVmWzBdID0gY3NldC0+cmFuZ2Vfc3RhcnRzW2ldOworCSAgICAgIGNtcF9idWZbNF0gPSBjc2V0LT5yYW5nZV9lbmRzW2ldOworCSAgICAgIGlmICh3Y3Njb2xsIChjbXBfYnVmLCBjbXBfYnVmICsgMikgPD0gMAorCQkgICYmIHdjc2NvbGwgKGNtcF9idWYgKyAyLCBjbXBfYnVmICsgNCkgPD0gMCkKKwkJeworCQkgIG1hdGNoX2xlbiA9IGNoYXJfbGVuOworCQkgIGdvdG8gY2hlY2tfbm9kZV9hY2NlcHRfYnl0ZXNfbWF0Y2g7CisJCX0KKwkgICAgfQorCX0KKyAgICBjaGVja19ub2RlX2FjY2VwdF9ieXRlc19tYXRjaDoKKyAgICAgIGlmICghY3NldC0+bm9uX21hdGNoKQorCXJldHVybiBtYXRjaF9sZW47CisgICAgICBlbHNlCisJeworCSAgaWYgKG1hdGNoX2xlbiA+IDApCisJICAgIHJldHVybiAwOworCSAgZWxzZQorCSAgICByZXR1cm4gKGVsZW1fbGVuID4gY2hhcl9sZW4pID8gZWxlbV9sZW4gOiBjaGFyX2xlbjsKKwl9CisgICAgfQorICByZXR1cm4gMDsKK30KKworIyBpZmRlZiBfTElCQworc3RhdGljIHVuc2lnbmVkIGludAoraW50ZXJuYWxfZnVuY3Rpb24KK2ZpbmRfY29sbGF0aW9uX3NlcXVlbmNlX3ZhbHVlIChjb25zdCB1bnNpZ25lZCBjaGFyICptYnMsIHNpemVfdCBtYnNfbGVuKQoreworICB1aW50MzJfdCBucnVsZXMgPSBfTkxfQ1VSUkVOVF9XT1JEIChMQ19DT0xMQVRFLCBfTkxfQ09MTEFURV9OUlVMRVMpOworICBpZiAobnJ1bGVzID09IDApCisgICAgeworICAgICAgaWYgKG1ic19sZW4gPT0gMSkKKwl7CisJICAvKiBObyB2YWxpZCBjaGFyYWN0ZXIuICBNYXRjaCBpdCBhcyBhIHNpbmdsZSBieXRlIGNoYXJhY3Rlci4gICovCisJICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2xsc2VxID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwkgICAgX05MX0NVUlJFTlQgKExDX0NPTExBVEUsIF9OTF9DT0xMQVRFX0NPTExTRVFNQik7CisJICByZXR1cm4gY29sbHNlcVttYnNbMF1dOworCX0KKyAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBpbnQzMl90IGlkeDsKKyAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmV4dHJhID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CKTsKKyAgICAgIGludDMyX3QgZXh0cmFzaXplID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikKKwlfTkxfQ1VSUkVOVCAoTENfQ09MTEFURSwgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CICsgMSkgLSBleHRyYTsKKworICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBleHRyYXNpemU7KQorCXsKKwkgIGludCBtYnNfY250LCBmb3VuZCA9IDA7CisJICBpbnQzMl90IGVsZW1fbWJzX2xlbjsKKwkgIC8qIFNraXAgdGhlIG5hbWUgb2YgY29sbGF0aW5nIGVsZW1lbnQgbmFtZS4gICovCisJICBpZHggPSBpZHggKyBleHRyYVtpZHhdICsgMTsKKwkgIGVsZW1fbWJzX2xlbiA9IGV4dHJhW2lkeCsrXTsKKwkgIGlmIChtYnNfbGVuID09IGVsZW1fbWJzX2xlbikKKwkgICAgeworCSAgICAgIGZvciAobWJzX2NudCA9IDA7IG1ic19jbnQgPCBlbGVtX21ic19sZW47ICsrbWJzX2NudCkKKwkJaWYgKGV4dHJhW2lkeCArIG1ic19jbnRdICE9IG1ic1ttYnNfY250XSkKKwkJICBicmVhazsKKwkgICAgICBpZiAobWJzX2NudCA9PSBlbGVtX21ic19sZW4pCisJCS8qIEZvdW5kIHRoZSBlbnRyeS4gICovCisJCWZvdW5kID0gMTsKKwkgICAgfQorCSAgLyogU2tpcCB0aGUgYnl0ZSBzZXF1ZW5jZSBvZiB0aGUgY29sbGF0aW5nIGVsZW1lbnQuICAqLworCSAgaWR4ICs9IGVsZW1fbWJzX2xlbjsKKwkgIC8qIEFkanVzdCBmb3IgdGhlIGFsaWdubWVudC4gICovCisJICBpZHggPSAoaWR4ICsgMykgJiB+MzsKKwkgIC8qIFNraXAgdGhlIGNvbGxhdGlvbiBzZXF1ZW5jZSB2YWx1ZS4gICovCisJICBpZHggKz0gc2l6ZW9mICh1aW50MzJfdCk7CisJICAvKiBTa2lwIHRoZSB3aWRlIGNoYXIgc2VxdWVuY2Ugb2YgdGhlIGNvbGxhdGluZyBlbGVtZW50LiAgKi8KKwkgIGlkeCA9IGlkeCArIHNpemVvZiAodWludDMyX3QpICogKGV4dHJhW2lkeF0gKyAxKTsKKwkgIC8qIElmIHdlIGZvdW5kIHRoZSBlbnRyeSwgcmV0dXJuIHRoZSBzZXF1ZW5jZSB2YWx1ZS4gICovCisJICBpZiAoZm91bmQpCisJICAgIHJldHVybiAqKHVpbnQzMl90ICopIChleHRyYSArIGlkeCk7CisJICAvKiBTa2lwIHRoZSBjb2xsYXRpb24gc2VxdWVuY2UgdmFsdWUuICAqLworCSAgaWR4ICs9IHNpemVvZiAodWludDMyX3QpOworCX0KKyAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICB9Cit9CisjIGVuZGlmIC8qIF9MSUJDICovCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gKi8KKworLyogQ2hlY2sgd2hldGhlciB0aGUgbm9kZSBhY2NlcHRzIHRoZSBieXRlIHdoaWNoIGlzIElEWC10aAorICAgYnl0ZSBvZiB0aGUgSU5QVVQuICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorY2hlY2tfbm9kZV9hY2NlcHQgKGNvbnN0IHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgY29uc3QgcmVfdG9rZW5fdCAqbm9kZSwKKwkJICAgaW50IGlkeCkKK3sKKyAgdW5zaWduZWQgY2hhciBjaDsKKyAgY2ggPSByZV9zdHJpbmdfYnl0ZV9hdCAoJm1jdHgtPmlucHV0LCBpZHgpOworICBzd2l0Y2ggKG5vZGUtPnR5cGUpCisgICAgeworICAgIGNhc2UgQ0hBUkFDVEVSOgorICAgICAgaWYgKG5vZGUtPm9wci5jICE9IGNoKQorCXJldHVybiAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNJTVBMRV9CUkFDS0VUOgorICAgICAgaWYgKCFiaXRzZXRfY29udGFpbiAobm9kZS0+b3ByLnNiY3NldCwgY2gpKQorCXJldHVybiAwOworICAgICAgYnJlYWs7CisKKyNpZmRlZiBSRV9FTkFCTEVfSTE4TgorICAgIGNhc2UgT1BfVVRGOF9QRVJJT0Q6CisgICAgICBpZiAoY2ggPj0gMHg4MCkKKwlyZXR1cm4gMDsKKyAgICAgIC8qIEZBTExUSFJPVUdIICovCisjZW5kaWYKKyAgICBjYXNlIE9QX1BFUklPRDoKKyAgICAgIGlmICgoY2ggPT0gJ1xuJyAmJiAhKG1jdHgtPmRmYS0+c3ludGF4ICYgUkVfRE9UX05FV0xJTkUpKQorCSAgfHwgKGNoID09ICdcMCcgJiYgKG1jdHgtPmRmYS0+c3ludGF4ICYgUkVfRE9UX05PVF9OVUxMKSkpCisJcmV0dXJuIDA7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgaWYgKG5vZGUtPmNvbnN0cmFpbnQpCisgICAgeworICAgICAgLyogVGhlIG5vZGUgaGFzIGNvbnN0cmFpbnRzLiAgQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBjb250ZXh0CisJIHNhdGlzZmllcyB0aGUgY29uc3RyYWludHMuICAqLworICAgICAgdW5zaWduZWQgaW50IGNvbnRleHQgPSByZV9zdHJpbmdfY29udGV4dF9hdCAoJm1jdHgtPmlucHV0LCBpZHgsCisJCQkJCQkgICBtY3R4LT5lZmxhZ3MpOworICAgICAgaWYgKE5PVF9TQVRJU0ZZX05FWFRfQ09OU1RSQUlOVCAobm9kZS0+Y29uc3RyYWludCwgY29udGV4dCkpCisJcmV0dXJuIDA7CisgICAgfQorCisgIHJldHVybiAxOworfQorCisvKiBFeHRlbmQgdGhlIGJ1ZmZlcnMsIGlmIHRoZSBidWZmZXJzIGhhdmUgcnVuIG91dC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorZXh0ZW5kX2J1ZmZlcnMgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCkKK3sKKyAgcmVnX2VycmNvZGVfdCByZXQ7CisgIHJlX3N0cmluZ190ICpwc3RyID0gJm1jdHgtPmlucHV0OworCisgIC8qIEF2b2lkIG92ZXJmbG93LiAgKi8KKyAgaWYgKEJFIChJTlRfTUFYIC8gMiAvIHNpemVvZiAocmVfZGZhc3RhdGVfdCAqKSA8PSBwc3RyLT5idWZzX2xlbiwgMCkpCisgICAgcmV0dXJuIFJFR19FU1BBQ0U7CisKKyAgLyogRG91YmxlIHRoZSBsZW5ndGhlcyBvZiB0aGUgYnVmZmVycy4gICovCisgIHJldCA9IHJlX3N0cmluZ19yZWFsbG9jX2J1ZmZlcnMgKHBzdHIsIHBzdHItPmJ1ZnNfbGVuICogMik7CisgIGlmIChCRSAocmV0ICE9IFJFR19OT0VSUk9SLCAwKSkKKyAgICByZXR1cm4gcmV0OworCisgIGlmIChtY3R4LT5zdGF0ZV9sb2cgIT0gTlVMTCkKKyAgICB7CisgICAgICAvKiBBbmQgZG91YmxlIHRoZSBsZW5ndGggb2Ygc3RhdGVfbG9nLiAgKi8KKyAgICAgIC8qIFhYWCBXZSBoYXZlIG5vIGluZGljYXRpb24gb2YgdGhlIHNpemUgb2YgdGhpcyBidWZmZXIuICBJZiB0aGlzCisJIGFsbG9jYXRpb24gZmFpbCB3ZSBoYXZlIG5vIGluZGljYXRpb24gdGhhdCB0aGUgc3RhdGVfbG9nIGFycmF5CisJIGRvZXMgbm90IGhhdmUgdGhlIHJpZ2h0IHNpemUuICAqLworICAgICAgcmVfZGZhc3RhdGVfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKG1jdHgtPnN0YXRlX2xvZywgcmVfZGZhc3RhdGVfdCAqLAorCQkJCQkgICAgICBwc3RyLT5idWZzX2xlbiArIDEpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJcmV0dXJuIFJFR19FU1BBQ0U7CisgICAgICBtY3R4LT5zdGF0ZV9sb2cgPSBuZXdfYXJyYXk7CisgICAgfQorCisgIC8qIFRoZW4gcmVjb25zdHJ1Y3QgdGhlIGJ1ZmZlcnMuICAqLworICBpZiAocHN0ci0+aWNhc2UpCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJeworCSAgcmV0ID0gYnVpbGRfd2NzX3VwcGVyX2J1ZmZlciAocHN0cik7CisJICBpZiAoQkUgKHJldCAhPSBSRUdfTk9FUlJPUiwgMCkpCisJICAgIHJldHVybiByZXQ7CisJfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFJFX0VOQUJMRV9JMThOICAqLworCWJ1aWxkX3VwcGVyX2J1ZmZlciAocHN0cik7CisgICAgfQorICBlbHNlCisgICAgeworI2lmZGVmIFJFX0VOQUJMRV9JMThOCisgICAgICBpZiAocHN0ci0+bWJfY3VyX21heCA+IDEpCisJYnVpbGRfd2NzX2J1ZmZlciAocHN0cik7CisgICAgICBlbHNlCisjZW5kaWYgLyogUkVfRU5BQkxFX0kxOE4gICovCisJeworCSAgaWYgKHBzdHItPnRyYW5zICE9IE5VTEwpCisJICAgIHJlX3N0cmluZ190cmFuc2xhdGVfYnVmZmVyIChwc3RyKTsKKwl9CisgICAgfQorICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKwwKKy8qIEZ1bmN0aW9ucyBmb3IgbWF0Y2hpbmcgY29udGV4dC4gICovCisKKy8qIEluaXRpYWxpemUgTUNUWC4gICovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorbWF0Y2hfY3R4X2luaXQgKHJlX21hdGNoX2NvbnRleHRfdCAqbWN0eCwgaW50IGVmbGFncywgaW50IG4pCit7CisgIG1jdHgtPmVmbGFncyA9IGVmbGFnczsKKyAgbWN0eC0+bWF0Y2hfbGFzdCA9IC0xOworICBpZiAobiA+IDApCisgICAgeworICAgICAgbWN0eC0+YmtyZWZfZW50cyA9IHJlX21hbGxvYyAoc3RydWN0IHJlX2JhY2tyZWZfY2FjaGVfZW50cnksIG4pOworICAgICAgbWN0eC0+c3ViX3RvcHMgPSByZV9tYWxsb2MgKHJlX3N1Yl9tYXRjaF90b3BfdCAqLCBuKTsKKyAgICAgIGlmIChCRSAobWN0eC0+YmtyZWZfZW50cyA9PSBOVUxMIHx8IG1jdHgtPnN1Yl90b3BzID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgIH0KKyAgLyogQWxyZWFkeSB6ZXJvLWVkIGJ5IHRoZSBjYWxsZXIuCisgICAgIGVsc2UKKyAgICAgICBtY3R4LT5ia3JlZl9lbnRzID0gTlVMTDsKKyAgICAgbWN0eC0+bmJrcmVmX2VudHMgPSAwOworICAgICBtY3R4LT5uc3ViX3RvcHMgPSAwOyAgKi8KKyAgbWN0eC0+YWJrcmVmX2VudHMgPSBuOworICBtY3R4LT5tYXhfbWJfZWxlbV9sZW4gPSAxOworICBtY3R4LT5hc3ViX3RvcHMgPSBuOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIENsZWFuIHRoZSBlbnRyaWVzIHdoaWNoIGRlcGVuZCBvbiB0aGUgY3VycmVudCBpbnB1dCBpbiBNQ1RYLgorICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGludm9rZWQgd2hlbiB0aGUgbWF0Y2hlciBjaGFuZ2VzIHRoZSBzdGFydCBpbmRleAorICAgb2YgdGhlIGlucHV0LCBvciBjaGFuZ2VzIHRoZSBpbnB1dCBzdHJpbmcuICAqLworCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK21hdGNoX2N0eF9jbGVhbiAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICBpbnQgc3RfaWR4OworICBmb3IgKHN0X2lkeCA9IDA7IHN0X2lkeCA8IG1jdHgtPm5zdWJfdG9wczsgKytzdF9pZHgpCisgICAgeworICAgICAgaW50IHNsX2lkeDsKKyAgICAgIHJlX3N1Yl9tYXRjaF90b3BfdCAqdG9wID0gbWN0eC0+c3ViX3RvcHNbc3RfaWR4XTsKKyAgICAgIGZvciAoc2xfaWR4ID0gMDsgc2xfaWR4IDwgdG9wLT5ubGFzdHM7ICsrc2xfaWR4KQorCXsKKwkgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKmxhc3QgPSB0b3AtPmxhc3RzW3NsX2lkeF07CisJICByZV9mcmVlIChsYXN0LT5wYXRoLmFycmF5KTsKKwkgIHJlX2ZyZWUgKGxhc3QpOworCX0KKyAgICAgIHJlX2ZyZWUgKHRvcC0+bGFzdHMpOworICAgICAgaWYgKHRvcC0+cGF0aCkKKwl7CisJICByZV9mcmVlICh0b3AtPnBhdGgtPmFycmF5KTsKKwkgIHJlX2ZyZWUgKHRvcC0+cGF0aCk7CisJfQorICAgICAgZnJlZSAodG9wKTsKKyAgICB9CisKKyAgbWN0eC0+bnN1Yl90b3BzID0gMDsKKyAgbWN0eC0+bmJrcmVmX2VudHMgPSAwOworfQorCisvKiBGcmVlIGFsbCB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBNQ1RYLiAgKi8KKworc3RhdGljIHZvaWQKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfZnJlZSAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4KQoreworICAvKiBGaXJzdCwgZnJlZSBhbGwgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggTUNUWC0+U1VCX1RPUFMuICAqLworICBtYXRjaF9jdHhfY2xlYW4gKG1jdHgpOworICByZV9mcmVlIChtY3R4LT5zdWJfdG9wcyk7CisgIHJlX2ZyZWUgKG1jdHgtPmJrcmVmX2VudHMpOworfQorCisvKiBBZGQgYSBuZXcgYmFja3JlZmVyZW5jZSBlbnRyeSB0byBNQ1RYLgorICAgTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGF0IGNhbGxlciBuZXZlciBjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBkdXBsaWNhdGUKKyAgIGVudHJ5LCBhbmQgY2FsbCB3aXRoIFNUUl9JRFggd2hpY2ggaXNuJ3Qgc21hbGxlciB0aGFuIGFueSBleGlzdGluZyBlbnRyeS4KKyovCisKK3N0YXRpYyByZWdfZXJyY29kZV90CitpbnRlcm5hbF9mdW5jdGlvbgorbWF0Y2hfY3R4X2FkZF9lbnRyeSAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbm9kZSwgaW50IHN0cl9pZHgsIGludCBmcm9tLAorCQkgICAgIGludCB0bykKK3sKKyAgaWYgKG1jdHgtPm5ia3JlZl9lbnRzID49IG1jdHgtPmFia3JlZl9lbnRzKQorICAgIHsKKyAgICAgIHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5KiBuZXdfZW50cnk7CisgICAgICBuZXdfZW50cnkgPSByZV9yZWFsbG9jIChtY3R4LT5ia3JlZl9lbnRzLCBzdHJ1Y3QgcmVfYmFja3JlZl9jYWNoZV9lbnRyeSwKKwkJCSAgICAgIG1jdHgtPmFia3JlZl9lbnRzICogMik7CisgICAgICBpZiAoQkUgKG5ld19lbnRyeSA9PSBOVUxMLCAwKSkKKwl7CisJICByZV9mcmVlIChtY3R4LT5ia3JlZl9lbnRzKTsKKwkgIHJldHVybiBSRUdfRVNQQUNFOworCX0KKyAgICAgIG1jdHgtPmJrcmVmX2VudHMgPSBuZXdfZW50cnk7CisgICAgICBtZW1zZXQgKG1jdHgtPmJrcmVmX2VudHMgKyBtY3R4LT5uYmtyZWZfZW50cywgJ1wwJywKKwkgICAgICBzaXplb2YgKHN0cnVjdCByZV9iYWNrcmVmX2NhY2hlX2VudHJ5KSAqIG1jdHgtPmFia3JlZl9lbnRzKTsKKyAgICAgIG1jdHgtPmFia3JlZl9lbnRzICo9IDI7CisgICAgfQorICBpZiAobWN0eC0+bmJrcmVmX2VudHMgPiAwCisgICAgICAmJiBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzIC0gMV0uc3RyX2lkeCA9PSBzdHJfaWR4KQorICAgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHMgLSAxXS5tb3JlID0gMTsKKworICBtY3R4LT5ia3JlZl9lbnRzW21jdHgtPm5ia3JlZl9lbnRzXS5ub2RlID0gbm9kZTsKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uc3RyX2lkeCA9IHN0cl9pZHg7CisgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHNdLnN1YmV4cF9mcm9tID0gZnJvbTsKKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uc3ViZXhwX3RvID0gdG87CisKKyAgLyogVGhpcyBpcyBhIGNhY2hlIHRoYXQgc2F2ZXMgbmVnYXRpdmUgcmVzdWx0cyBvZiBjaGVja19kc3RfbGltaXRzX2NhbGNfcG9zLgorICAgICBJZiBiaXQgTiBpcyBjbGVhciwgbWVhbnMgdGhhdCB0aGlzIGVudHJ5IHdvbid0IGVwc2lsb24tdHJhbnNpdGlvbiB0bworICAgICBhbiBPUF9PUEVOX1NVQkVYUCBvciBPUF9DTE9TRV9TVUJFWFAgZm9yIHRoZSBOKzEtdGggc3ViZXhwcmVzc2lvbi4gIElmCisgICAgIGl0IGlzIHNldCwgY2hlY2tfZHN0X2xpbWl0c19jYWxjX3Bvc18xIHdpbGwgcmVjdXJzZSBhbmQgdHJ5IHRvIGZpbmQgb25lCisgICAgIHN1Y2ggbm9kZS4KKworICAgICBBIGJhY2tyZWZlcmVuY2UgZG9lcyBub3QgZXBzaWxvbi10cmFuc2l0aW9uIHVubGVzcyBpdCBpcyBlbXB0eSwgc28gc2V0CisgICAgIHRvIGFsbCB6ZXJvcyBpZiBGUk9NICE9IFRPLiAgKi8KKyAgbWN0eC0+YmtyZWZfZW50c1ttY3R4LT5uYmtyZWZfZW50c10uZXBzX3JlYWNoYWJsZV9zdWJleHBzX21hcAorICAgID0gKGZyb20gPT0gdG8gPyB+MCA6IDApOworCisgIG1jdHgtPmJrcmVmX2VudHNbbWN0eC0+bmJrcmVmX2VudHMrK10ubW9yZSA9IDA7CisgIGlmIChtY3R4LT5tYXhfbWJfZWxlbV9sZW4gPCB0byAtIGZyb20pCisgICAgbWN0eC0+bWF4X21iX2VsZW1fbGVuID0gdG8gLSBmcm9tOworICByZXR1cm4gUkVHX05PRVJST1I7Cit9CisKKy8qIFNlYXJjaCBmb3IgdGhlIGZpcnN0IGVudHJ5IHdoaWNoIGhhcyB0aGUgc2FtZSBzdHJfaWR4LCBvciAtMSBpZiBub25lIGlzCisgICBmb3VuZC4gIE5vdGUgdGhhdCBNQ1RYLT5CS1JFRl9FTlRTIGlzIGFscmVhZHkgc29ydGVkIGJ5IE1DVFgtPlNUUl9JRFguICAqLworCitzdGF0aWMgaW50CitpbnRlcm5hbF9mdW5jdGlvbgorc2VhcmNoX2N1cl9ia3JlZl9lbnRyeSAoY29uc3QgcmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgc3RyX2lkeCkKK3sKKyAgaW50IGxlZnQsIHJpZ2h0LCBtaWQsIGxhc3Q7CisgIGxhc3QgPSByaWdodCA9IG1jdHgtPm5ia3JlZl9lbnRzOworICBmb3IgKGxlZnQgPSAwOyBsZWZ0IDwgcmlnaHQ7KQorICAgIHsKKyAgICAgIG1pZCA9IChsZWZ0ICsgcmlnaHQpIC8gMjsKKyAgICAgIGlmIChtY3R4LT5ia3JlZl9lbnRzW21pZF0uc3RyX2lkeCA8IHN0cl9pZHgpCisJbGVmdCA9IG1pZCArIDE7CisgICAgICBlbHNlCisJcmlnaHQgPSBtaWQ7CisgICAgfQorICBpZiAobGVmdCA8IGxhc3QgJiYgbWN0eC0+YmtyZWZfZW50c1tsZWZ0XS5zdHJfaWR4ID09IHN0cl9pZHgpCisgICAgcmV0dXJuIGxlZnQ7CisgIGVsc2UKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIFJlZ2lzdGVyIHRoZSBub2RlIE5PREUsIHdob3NlIHR5cGUgaXMgT1BfT1BFTl9TVUJFWFAsIGFuZCB3aGljaCBtYXRjaGVzCisgICBhdCBTVFJfSURYLiAgKi8KKworc3RhdGljIHJlZ19lcnJjb2RlX3QKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfYWRkX3N1YnRvcCAocmVfbWF0Y2hfY29udGV4dF90ICptY3R4LCBpbnQgbm9kZSwgaW50IHN0cl9pZHgpCit7CisjaWZkZWYgREVCVUcKKyAgYXNzZXJ0IChtY3R4LT5zdWJfdG9wcyAhPSBOVUxMKTsKKyAgYXNzZXJ0IChtY3R4LT5hc3ViX3RvcHMgPiAwKTsKKyNlbmRpZgorICBpZiAoQkUgKG1jdHgtPm5zdWJfdG9wcyA9PSBtY3R4LT5hc3ViX3RvcHMsIDApKQorICAgIHsKKyAgICAgIGludCBuZXdfYXN1Yl90b3BzID0gbWN0eC0+YXN1Yl90b3BzICogMjsKKyAgICAgIHJlX3N1Yl9tYXRjaF90b3BfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKG1jdHgtPnN1Yl90b3BzLAorCQkJCQkJICAgcmVfc3ViX21hdGNoX3RvcF90ICosCisJCQkJCQkgICBuZXdfYXN1Yl90b3BzKTsKKyAgICAgIGlmIChCRSAobmV3X2FycmF5ID09IE5VTEwsIDApKQorCXJldHVybiBSRUdfRVNQQUNFOworICAgICAgbWN0eC0+c3ViX3RvcHMgPSBuZXdfYXJyYXk7CisgICAgICBtY3R4LT5hc3ViX3RvcHMgPSBuZXdfYXN1Yl90b3BzOworICAgIH0KKyAgbWN0eC0+c3ViX3RvcHNbbWN0eC0+bnN1Yl90b3BzXSA9IGNhbGxvYyAoMSwgc2l6ZW9mIChyZV9zdWJfbWF0Y2hfdG9wX3QpKTsKKyAgaWYgKEJFIChtY3R4LT5zdWJfdG9wc1ttY3R4LT5uc3ViX3RvcHNdID09IE5VTEwsIDApKQorICAgIHJldHVybiBSRUdfRVNQQUNFOworICBtY3R4LT5zdWJfdG9wc1ttY3R4LT5uc3ViX3RvcHNdLT5ub2RlID0gbm9kZTsKKyAgbWN0eC0+c3ViX3RvcHNbbWN0eC0+bnN1Yl90b3BzKytdLT5zdHJfaWR4ID0gc3RyX2lkeDsKKyAgcmV0dXJuIFJFR19OT0VSUk9SOworfQorCisvKiBSZWdpc3RlciB0aGUgbm9kZSBOT0RFLCB3aG9zZSB0eXBlIGlzIE9QX0NMT1NFX1NVQkVYUCwgYW5kIHdoaWNoIG1hdGNoZXMKKyAgIGF0IFNUUl9JRFgsIHdob3NlIGNvcnJlc3BvbmRpbmcgT1BfT1BFTl9TVUJFWFAgaXMgU1VCX1RPUC4gICovCisKK3N0YXRpYyByZV9zdWJfbWF0Y2hfbGFzdF90ICoKK2ludGVybmFsX2Z1bmN0aW9uCittYXRjaF9jdHhfYWRkX3N1Ymxhc3QgKHJlX3N1Yl9tYXRjaF90b3BfdCAqc3VidG9wLCBpbnQgbm9kZSwgaW50IHN0cl9pZHgpCit7CisgIHJlX3N1Yl9tYXRjaF9sYXN0X3QgKm5ld19lbnRyeTsKKyAgaWYgKEJFIChzdWJ0b3AtPm5sYXN0cyA9PSBzdWJ0b3AtPmFsYXN0cywgMCkpCisgICAgeworICAgICAgaW50IG5ld19hbGFzdHMgPSAyICogc3VidG9wLT5hbGFzdHMgKyAxOworICAgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqKm5ld19hcnJheSA9IHJlX3JlYWxsb2MgKHN1YnRvcC0+bGFzdHMsCisJCQkJCQkgICAgcmVfc3ViX21hdGNoX2xhc3RfdCAqLAorCQkJCQkJICAgIG5ld19hbGFzdHMpOworICAgICAgaWYgKEJFIChuZXdfYXJyYXkgPT0gTlVMTCwgMCkpCisJcmV0dXJuIE5VTEw7CisgICAgICBzdWJ0b3AtPmxhc3RzID0gbmV3X2FycmF5OworICAgICAgc3VidG9wLT5hbGFzdHMgPSBuZXdfYWxhc3RzOworICAgIH0KKyAgbmV3X2VudHJ5ID0gY2FsbG9jICgxLCBzaXplb2YgKHJlX3N1Yl9tYXRjaF9sYXN0X3QpKTsKKyAgaWYgKEJFIChuZXdfZW50cnkgIT0gTlVMTCwgMSkpCisgICAgeworICAgICAgc3VidG9wLT5sYXN0c1tzdWJ0b3AtPm5sYXN0c10gPSBuZXdfZW50cnk7CisgICAgICBuZXdfZW50cnktPm5vZGUgPSBub2RlOworICAgICAgbmV3X2VudHJ5LT5zdHJfaWR4ID0gc3RyX2lkeDsKKyAgICAgICsrc3VidG9wLT5ubGFzdHM7CisgICAgfQorICByZXR1cm4gbmV3X2VudHJ5OworfQorCitzdGF0aWMgdm9pZAoraW50ZXJuYWxfZnVuY3Rpb24KK3NpZnRfY3R4X2luaXQgKHJlX3NpZnRfY29udGV4dF90ICpzY3R4LCByZV9kZmFzdGF0ZV90ICoqc2lmdGVkX3N0cywKKwkgICAgICAgcmVfZGZhc3RhdGVfdCAqKmxpbWl0ZWRfc3RzLCBpbnQgbGFzdF9ub2RlLCBpbnQgbGFzdF9zdHJfaWR4KQoreworICBzY3R4LT5zaWZ0ZWRfc3RhdGVzID0gc2lmdGVkX3N0czsKKyAgc2N0eC0+bGltaXRlZF9zdGF0ZXMgPSBsaW1pdGVkX3N0czsKKyAgc2N0eC0+bGFzdF9ub2RlID0gbGFzdF9ub2RlOworICBzY3R4LT5sYXN0X3N0cl9pZHggPSBsYXN0X3N0cl9pZHg7CisgIHJlX25vZGVfc2V0X2luaXRfZW1wdHkgKCZzY3R4LT5saW1pdHMpOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3NldGVudi5jIGIvY29tcGF0L3NldGVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMTQzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc2V0ZW52LmMKQEAgLTAsMCArMSw0MCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitpbnQgZ2l0c2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgcmVwbGFjZSkKK3sKKwlpbnQgb3V0OworCXNpemVfdCBuYW1lbGVuLCB2YWx1ZWxlbjsKKwljaGFyICplbnZzdHI7CisKKwlpZiAoIW5hbWUgfHwgc3RyY2hyKG5hbWUsICc9JykgfHwgIXZhbHVlKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghcmVwbGFjZSkgeworCQljaGFyICpvbGR2YWwgPSBOVUxMOworCQlvbGR2YWwgPSBnZXRlbnYobmFtZSk7CisJCWlmIChvbGR2YWwpIHJldHVybiAwOworCX0KKworCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJdmFsdWVsZW4gPSBzdHJsZW4odmFsdWUpOworCWVudnN0ciA9IG1hbGxvYygobmFtZWxlbiArIHZhbHVlbGVuICsgMikpOworCWlmICghZW52c3RyKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gLTE7CisJfQorCisJbWVtY3B5KGVudnN0ciwgbmFtZSwgbmFtZWxlbik7CisJZW52c3RyW25hbWVsZW5dID0gJz0nOworCW1lbWNweShlbnZzdHIgKyBuYW1lbGVuICsgMSwgdmFsdWUsIHZhbHVlbGVuKTsKKwllbnZzdHJbbmFtZWxlbiArIHZhbHVlbGVuICsgMV0gPSAwOworCisJb3V0ID0gcHV0ZW52KGVudnN0cik7CisJLyogcHV0ZW52KDMpIG1ha2VzIHRoZSBhcmd1bWVudCBzdHJpbmcgcGFydCBvZiB0aGUgZW52aXJvbm1lbnQsCisJICogYW5kIGNoYW5naW5nIHRoYXQgc3RyaW5nIG1vZGlmaWVzIHRoZSBlbnZpcm9ubWVudCAtLS0gd2hpY2gKKwkgKiBtZWFucyB3ZSBkbyBub3Qgb3duIHRoYXQgc3RvcmFnZSBhbnltb3JlLiAgRG8gbm90IGZyZWUKKwkgKiBlbnZzdHIuCisJICovCisKKwlyZXR1cm4gb3V0OworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3NucHJpbnRmLmMgYi9jb21wYXQvc25wcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmVhMWFjCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3NucHJpbnRmLmMKQEAgLTAsMCArMSw2OSBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCisvKgorICogVGhlIHNpemUgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgYXZhaWxhYmxlIHNwYWNlLCBpLmUuIGluY2x1ZGVzCisgKiB0aGUgdHJhaWxpbmcgTlVMIGJ5dGU7IGJ1dCBXaW5kb3dzJ3MgdnNucHJpbnRmIHVzZXMgdGhlIGVudGlyZQorICogYnVmZmVyIGFuZCBhdm9pZHMgdGhlIHRyYWlsaW5nIE5VTCwgc2hvdWxkIHRoZSBidWZmZXIgYmUgZXhhY3RseQorICogYmlnIGVub3VnaCBmb3IgdGhlIHJlc3VsdC4gRGVmaW5pbmcgU05QUklOVEZfU0laRV9DT1JSIHRvIDEgd2lsbAorICogdGhlcmVmb3JlIHJlbW92ZSAxIGJ5dGUgZnJvbSB0aGUgcmVwb3J0ZWQgYnVmZmVyIHNpemUsIHNvIHdlCisgKiBhbHdheXMgaGF2ZSByb29tIGZvciBhIHRyYWlsaW5nIE5VTCBieXRlLgorICovCisjaWZuZGVmIFNOUFJJTlRGX1NJWkVfQ09SUgorI2lmIGRlZmluZWQoV0lOMzIpICYmICghZGVmaW5lZChfX0dOVUNfXykgfHwgX19HTlVDX18gPCA0KQorI2RlZmluZSBTTlBSSU5URl9TSVpFX0NPUlIgMQorI2Vsc2UKKyNkZWZpbmUgU05QUklOVEZfU0laRV9DT1JSIDAKKyNlbmRpZgorI2VuZGlmCisKKyN1bmRlZiB2c25wcmludGYKK2ludCBnaXRfdnNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IG1heHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCkKK3sKKwl2YV9saXN0IGNwOworCWNoYXIgKnM7CisJaW50IHJldCA9IC0xOworCisJaWYgKG1heHNpemUgPiAwKSB7CisJCXZhX2NvcHkoY3AsIGFwKTsKKwkJcmV0ID0gdnNucHJpbnRmKHN0ciwgbWF4c2l6ZS1TTlBSSU5URl9TSVpFX0NPUlIsIGZvcm1hdCwgY3ApOworCQl2YV9lbmQoY3ApOworCQlpZiAocmV0ID09IG1heHNpemUtMSkKKwkJCXJldCA9IC0xOworCQkvKiBXaW5kb3dzIGRvZXMgbm90IE5VTC10ZXJtaW5hdGUgaWYgcmVzdWx0IGZpbGxzIGJ1ZmZlciAqLworCQlzdHJbbWF4c2l6ZS0xXSA9IDA7CisJfQorCWlmIChyZXQgIT0gLTEpCisJCXJldHVybiByZXQ7CisKKwlzID0gTlVMTDsKKwlpZiAobWF4c2l6ZSA8IDEyOCkKKwkJbWF4c2l6ZSA9IDEyODsKKworCXdoaWxlIChyZXQgPT0gLTEpIHsKKwkJbWF4c2l6ZSAqPSA0OworCQlzdHIgPSByZWFsbG9jKHMsIG1heHNpemUpOworCQlpZiAoISBzdHIpCisJCQlicmVhazsKKwkJcyA9IHN0cjsKKwkJdmFfY29weShjcCwgYXApOworCQlyZXQgPSB2c25wcmludGYoc3RyLCBtYXhzaXplLVNOUFJJTlRGX1NJWkVfQ09SUiwgZm9ybWF0LCBjcCk7CisJCXZhX2VuZChjcCk7CisJCWlmIChyZXQgPT0gbWF4c2l6ZS0xKQorCQkJcmV0ID0gLTE7CisJfQorCWZyZWUocyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGdpdF9zbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCByZXQ7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwlyZXQgPSBnaXRfdnNucHJpbnRmKHN0ciwgbWF4c2l6ZSwgZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2NvbXBhdC9zdGF0LmMgYi9jb21wYXQvc3RhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDM5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc3RhdC5jCkBAIC0wLDAgKzEsNDggQEAKKyNkZWZpbmUgX1BPU0lYX0NfU09VUkNFIDIwMDExMkwKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPiAgLyogKnN0YXQsIFNfSVMqICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+IC8qIG1vZGVfdCAgICAgICAqLworCitzdGF0aWMgaW5saW5lIG1vZGVfdCBtb2RlX25hdGl2ZV90b19naXQobW9kZV90IG5hdGl2ZV9tb2RlKQoreworCW1vZGVfdCBwZXJtX2JpdHMgPSBuYXRpdmVfbW9kZSAmIDA3Nzc3OworCWlmIChTX0lTUkVHKG5hdGl2ZV9tb2RlKSkKKwkJcmV0dXJuIDAxMDAwMDAgfCBwZXJtX2JpdHM7CisJaWYgKFNfSVNESVIobmF0aXZlX21vZGUpKQorCQlyZXR1cm4gMDA0MDAwMCB8IHBlcm1fYml0czsKKwlpZiAoU19JU0xOSyhuYXRpdmVfbW9kZSkpCisJCXJldHVybiAwMTIwMDAwIHwgcGVybV9iaXRzOworCWlmIChTX0lTQkxLKG5hdGl2ZV9tb2RlKSkKKwkJcmV0dXJuIDAwNjAwMDAgfCBwZXJtX2JpdHM7CisJaWYgKFNfSVNDSFIobmF0aXZlX21vZGUpKQorCQlyZXR1cm4gMDAyMDAwMCB8IHBlcm1fYml0czsKKwlpZiAoU19JU0ZJRk8obmF0aXZlX21vZGUpKQorCQlyZXR1cm4gMDAxMDAwMCB8IHBlcm1fYml0czsKKwlpZiAoU19JU1NPQ0sobmF0aXZlX21vZGUpKQorCQlyZXR1cm4gMDE0MDAwMCB8IHBlcm1fYml0czsKKwkvKiBOb24tc3RhbmRhcmQgdHlwZSBiaXRzIHdlcmUgZ2l2ZW4uICovCisJcmV0dXJuIHBlcm1fYml0czsKK30KKworaW50IGdpdF9zdGF0KGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpidWYpCit7CisJaW50IHJjID0gc3RhdChwYXRoLCBidWYpOworCWlmIChyYyA9PSAwKQorCQlidWYtPnN0X21vZGUgPSBtb2RlX25hdGl2ZV90b19naXQoYnVmLT5zdF9tb2RlKTsKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBnaXRfZnN0YXQoaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworCWludCByYyA9IGZzdGF0KGZkLCBidWYpOworCWlmIChyYyA9PSAwKQorCQlidWYtPnN0X21vZGUgPSBtb2RlX25hdGl2ZV90b19naXQoYnVmLT5zdF9tb2RlKTsKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBnaXRfbHN0YXQoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKmJ1ZikKK3sKKwlpbnQgcmMgPSBsc3RhdChwYXRoLCBidWYpOworCWlmIChyYyA9PSAwKQorCQlidWYtPnN0X21vZGUgPSBtb2RlX25hdGl2ZV90b19naXQoYnVmLT5zdF9tb2RlKTsKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvc3RyY2FzZXN0ci5jIGIvY29tcGF0L3N0cmNhc2VzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjg5NmRlCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3N0cmNhc2VzdHIuYwpAQCAtMCwwICsxLDIyIEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK2NoYXIgKmdpdHN0cmNhc2VzdHIoY29uc3QgY2hhciAqaGF5c3RhY2ssIGNvbnN0IGNoYXIgKm5lZWRsZSkKK3sKKwlpbnQgbmxlbiA9IHN0cmxlbihuZWVkbGUpOworCWludCBobGVuID0gc3RybGVuKGhheXN0YWNrKSAtIG5sZW4gKyAxOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGhsZW47IGkrKykgeworCQlpbnQgajsKKwkJZm9yIChqID0gMDsgaiA8IG5sZW47IGorKykgeworCQkJdW5zaWduZWQgY2hhciBjMSA9IGhheXN0YWNrW2kral07CisJCQl1bnNpZ25lZCBjaGFyIGMyID0gbmVlZGxlW2pdOworCQkJaWYgKHRvdXBwZXIoYzEpICE9IHRvdXBwZXIoYzIpKQorCQkJCWdvdG8gbmV4dDsKKwkJfQorCQlyZXR1cm4gKGNoYXIgKikgaGF5c3RhY2sgKyBpOworCW5leHQ6CisJCTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9jb21wYXQvc3RybGNweS5jIGIvY29tcGF0L3N0cmxjcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDI0YzM2Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3N0cmxjcHkuYwpAQCAtMCwwICsxLDEzIEBACisjaW5jbHVkZSAiLi4vZ2l0LWNvbXBhdC11dGlsLmgiCisKK3NpemVfdCBnaXRzdHJsY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IHJldCA9IHN0cmxlbihzcmMpOworCisJaWYgKHNpemUpIHsKKwkJc2l6ZV90IGxlbiA9IChyZXQgPj0gc2l6ZSkgPyBzaXplIC0gMSA6IHJldDsKKwkJbWVtY3B5KGRlc3QsIHNyYywgbGVuKTsKKwkJZGVzdFtsZW5dID0gJ1wwJzsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC9zdHJ0b2ltYXguYyBiL2NvbXBhdC9zdHJ0b2ltYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzA5ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3N0cnRvaW1heC5jCkBAIC0wLDAgKzEsMTAgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKworaW50bWF4X3QgZ2l0c3RydG9pbWF4IChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKyNpZiBkZWZpbmVkKE5PX1NUUlRPVUxMKQorCXJldHVybiBzdHJ0b2wobnB0ciwgZW5kcHRyLCBiYXNlKTsKKyNlbHNlCisJcmV0dXJuIHN0cnRvbGwobnB0ciwgZW5kcHRyLCBiYXNlKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3N0cnRvdW1heC5jIGIvY29tcGF0L3N0cnRvdW1heC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDEzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvc3RydG91bWF4LmMKQEAgLTAsMCArMSwxMCBAQAorI2luY2x1ZGUgIi4uL2dpdC1jb21wYXQtdXRpbC5oIgorCit1aW50bWF4X3QgZ2l0c3RydG91bWF4IChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKyNpZiBkZWZpbmVkKE5PX1NUUlRPVUxMKQorCXJldHVybiBzdHJ0b3VsKG5wdHIsIGVuZHB0ciwgYmFzZSk7CisjZWxzZQorCXJldHVybiBzdHJ0b3VsbChucHRyLCBlbmRwdHIsIGJhc2UpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9jb21wYXQvdGVybWluYWwuYyBiL2NvbXBhdC90ZXJtaW5hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMzg5N2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdGVybWluYWwuYwpAQCAtMCwwICsxLDE0NyBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImNvbXBhdC90ZXJtaW5hbC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKyNpZiBkZWZpbmVkKEhBVkVfREVWX1RUWSkgfHwgZGVmaW5lZChHSVRfV0lORE9XU19OQVRJVkUpCisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfdGVybSh2b2lkKTsKKworc3RhdGljIHZvaWQgcmVzdG9yZV90ZXJtX29uX3NpZ25hbChpbnQgc2lnKQoreworCXJlc3RvcmVfdGVybSgpOworCXNpZ2NoYWluX3BvcChzaWcpOworCXJhaXNlKHNpZyk7Cit9CisKKyNpZmRlZiBIQVZFX0RFVl9UVFkKKworI2RlZmluZSBJTlBVVF9QQVRIICIvZGV2L3R0eSIKKyNkZWZpbmUgT1VUUFVUX1BBVEggIi9kZXYvdHR5IgorCitzdGF0aWMgaW50IHRlcm1fZmQgPSAtMTsKK3N0YXRpYyBzdHJ1Y3QgdGVybWlvcyBvbGRfdGVybTsKKworc3RhdGljIHZvaWQgcmVzdG9yZV90ZXJtKHZvaWQpCit7CisJaWYgKHRlcm1fZmQgPCAwKQorCQlyZXR1cm47CisKKwl0Y3NldGF0dHIodGVybV9mZCwgVENTQUZMVVNILCAmb2xkX3Rlcm0pOworCWNsb3NlKHRlcm1fZmQpOworCXRlcm1fZmQgPSAtMTsKK30KKworc3RhdGljIGludCBkaXNhYmxlX2VjaG8odm9pZCkKK3sKKwlzdHJ1Y3QgdGVybWlvcyB0OworCisJdGVybV9mZCA9IG9wZW4oIi9kZXYvdHR5IiwgT19SRFdSKTsKKwlpZiAodGNnZXRhdHRyKHRlcm1fZmQsICZ0KSA8IDApCisJCWdvdG8gZXJyb3I7CisKKwlvbGRfdGVybSA9IHQ7CisJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVzdG9yZV90ZXJtX29uX3NpZ25hbCk7CisKKwl0LmNfbGZsYWcgJj0gfkVDSE87CisJaWYgKCF0Y3NldGF0dHIodGVybV9mZCwgVENTQUZMVVNILCAmdCkpCisJCXJldHVybiAwOworCitlcnJvcjoKKwljbG9zZSh0ZXJtX2ZkKTsKKwl0ZXJtX2ZkID0gLTE7CisJcmV0dXJuIC0xOworfQorCisjZWxpZiBkZWZpbmVkKEdJVF9XSU5ET1dTX05BVElWRSkKKworI2RlZmluZSBJTlBVVF9QQVRIICJDT05JTiQiCisjZGVmaW5lIE9VVFBVVF9QQVRIICJDT05PVVQkIgorI2RlZmluZSBGT1JDRV9URVhUICJ0IgorCitzdGF0aWMgSEFORExFIGhjb25pbiA9IElOVkFMSURfSEFORExFX1ZBTFVFOworc3RhdGljIERXT1JEIGNtb2RlOworCitzdGF0aWMgdm9pZCByZXN0b3JlX3Rlcm0odm9pZCkKK3sKKwlpZiAoaGNvbmluID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQlyZXR1cm47CisKKwlTZXRDb25zb2xlTW9kZShoY29uaW4sIGNtb2RlKTsKKwlDbG9zZUhhbmRsZShoY29uaW4pOworCWhjb25pbiA9IElOVkFMSURfSEFORExFX1ZBTFVFOworfQorCitzdGF0aWMgaW50IGRpc2FibGVfZWNobyh2b2lkKQoreworCWhjb25pbiA9IENyZWF0ZUZpbGUoIkNPTklOJCIsIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUsCisJICAgIEZJTEVfU0hBUkVfUkVBRCwgTlVMTCwgT1BFTl9FWElTVElORywKKwkgICAgRklMRV9BVFRSSUJVVEVfTk9STUFMLCBOVUxMKTsKKwlpZiAoaGNvbmluID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQlyZXR1cm4gLTE7CisKKwlHZXRDb25zb2xlTW9kZShoY29uaW4sICZjbW9kZSk7CisJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVzdG9yZV90ZXJtX29uX3NpZ25hbCk7CisJaWYgKCFTZXRDb25zb2xlTW9kZShoY29uaW4sIGNtb2RlICYgKH5FTkFCTEVfRUNIT19JTlBVVCkpKSB7CisJCUNsb3NlSGFuZGxlKGhjb25pbik7CisJCWhjb25pbiA9IElOVkFMSURfSEFORExFX1ZBTFVFOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisjaWZuZGVmIEZPUkNFX1RFWFQKKyNkZWZpbmUgRk9SQ0VfVEVYVAorI2VuZGlmCisKK2NoYXIgKmdpdF90ZXJtaW5hbF9wcm9tcHQoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgZWNobykKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcjsKKwlGSUxFICppbnB1dF9maCwgKm91dHB1dF9maDsKKworCWlucHV0X2ZoID0gZm9wZW4oSU5QVVRfUEFUSCwgInIiIEZPUkNFX1RFWFQpOworCWlmICghaW5wdXRfZmgpCisJCXJldHVybiBOVUxMOworCisJb3V0cHV0X2ZoID0gZm9wZW4oT1VUUFVUX1BBVEgsICJ3IiBGT1JDRV9URVhUKTsKKwlpZiAoIW91dHB1dF9maCkgeworCQlmY2xvc2UoaW5wdXRfZmgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWVjaG8gJiYgZGlzYWJsZV9lY2hvKCkpIHsKKwkJZmNsb3NlKGlucHV0X2ZoKTsKKwkJZmNsb3NlKG91dHB1dF9maCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWZwdXRzKHByb21wdCwgb3V0cHV0X2ZoKTsKKwlmZmx1c2gob3V0cHV0X2ZoKTsKKworCXIgPSBzdHJidWZfZ2V0bGluZSgmYnVmLCBpbnB1dF9maCwgJ1xuJyk7CisJaWYgKCFlY2hvKSB7CisJCXB1dGMoJ1xuJywgb3V0cHV0X2ZoKTsKKwkJZmZsdXNoKG91dHB1dF9maCk7CisJfQorCisJcmVzdG9yZV90ZXJtKCk7CisJZmNsb3NlKGlucHV0X2ZoKTsKKwlmY2xvc2Uob3V0cHV0X2ZoKTsKKworCWlmIChyID09IEVPRikKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGJ1Zi5idWY7Cit9CisKKyNlbHNlCisKK2NoYXIgKmdpdF90ZXJtaW5hbF9wcm9tcHQoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgZWNobykKK3sKKwlyZXR1cm4gZ2V0cGFzcyhwcm9tcHQpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC90ZXJtaW5hbC5oIGIvY29tcGF0L3Rlcm1pbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdkYjdjZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC90ZXJtaW5hbC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBDT01QQVRfVEVSTUlOQUxfSAorI2RlZmluZSBDT01QQVRfVEVSTUlOQUxfSAorCitjaGFyICpnaXRfdGVybWluYWxfcHJvbXB0KGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGVjaG8pOworCisjZW5kaWYgLyogQ09NUEFUX1RFUk1JTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC91bnNldGVudi5jIGIvY29tcGF0L3Vuc2V0ZW52LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1ZmQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC91bnNldGVudi5jCkBAIC0wLDAgKzEsMjcgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKwordm9pZCBnaXR1bnNldGVudiAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyNpZiAhZGVmaW5lZChfX01JTkdXMzJfXykKKyAgICAgZXh0ZXJuIGNoYXIgKiplbnZpcm9uOworI2VuZGlmCisgICAgIGludCBzcmMsIGRzdDsKKyAgICAgc2l6ZV90IG5tbG47CisKKyAgICAgbm1sbiA9IHN0cmxlbihuYW1lKTsKKworICAgICBmb3IgKHNyYyA9IGRzdCA9IDA7IGVudmlyb25bc3JjXTsgKytzcmMpIHsKKwkgIHNpemVfdCBlbmxuOworCSAgZW5sbiA9IHN0cmxlbihlbnZpcm9uW3NyY10pOworCSAgaWYgKGVubG4gPiBubWxuKSB7CisgICAgICAgICAgICAgICAvKiBtaWdodCBtYXRjaCwgYW5kIGNhbiB0ZXN0IGZvciAnPScgc2FmZWx5ICovCisJICAgICAgIGlmICgwID09IHN0cm5jbXAgKGVudmlyb25bc3JjXSwgbmFtZSwgbm1sbikKKwkJICAgJiYgJz0nID09IGVudmlyb25bc3JjXVtubWxuXSkKKwkJICAgIC8qIG1hdGNoZXMsIHNvIHNraXAgKi8KKwkJICAgIGNvbnRpbnVlOworCSAgfQorCSAgZW52aXJvbltkc3RdID0gZW52aXJvbltzcmNdOworCSAgKytkc3Q7CisgICAgIH0KKyAgICAgZW52aXJvbltkc3RdID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL1JFQURNRSBiL2NvbXBhdC92Y2J1aWxkL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjhhNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvUkVBRE1FCkBAIC0wLDAgKzEsNTAgQEAKK1RoZSBTdGVwcyBvZiBCdWlsZCBHaXQgd2l0aCBWUzIwMDgKKworMS4gWW91IG5lZWQgdGhlIGJ1aWxkIGVudmlyb25tZW50LCB3aGljaCBjb250YWlucyB0aGUgR2l0IGRlcGVuZGVuY2llcworICAgdG8gYmUgYWJsZSB0byBjb21waWxlLCBsaW5rIGFuZCBydW4gR2l0IHdpdGggTVNWQy4KKworICAgWW91IGNhbiBlaXRoZXIgdXNlIHRoZSBiaW5hcnkgcmVwb3NpdG9yeToKKworICAgICAgIFdXVzogaHR0cDovL3JlcG8ub3IuY3ovdy9tc3ZjZ2l0LmdpdAorICAgICAgIEdpdDogZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ovbXN2Y2dpdC5naXQKKyAgICAgICBaaXA6IGh0dHA6Ly9yZXBvLm9yLmN6L3cvbXN2Y2dpdC5naXQ/YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj16aXAKKworICAgYW5kIGNhbGwgdGhlIHNldHVwXzMyYml0X2Vudi5jbWQgYmF0Y2ggc2NyaXB0IGJlZm9yZSBjb21waWxpbmcgR2l0LAorICAgKHNlZSByZXBvL3BhY2thZ2UgUkVBRE1FIGZvciBkZXRhaWxzKSwgb3IgdGhlIHNvdXJjZSByZXBvc2l0b3J5OgorCisgICAgICAgV1dXOiBodHRwOi8vcmVwby5vci5jei93L2dpdGJ1aWxkLmdpdAorICAgICAgIEdpdDogZ2l0IGNsb25lIGdpdDovL3JlcG8ub3IuY3ovZ2l0YnVpbGQuZ2l0CisgICAgICAgWmlwOiAoTm9uZSwgYXMgaXQncyBhIHByb2plY3Qgd2l0aCBzdWJtb2R1bGVzKQorCisgICBhbmQgYnVpbGQgdGhlIHN1cHBvcnQgbGlicyBhcyBpbnN0cnVjdGVkIGluIHRoYXQgcmVwby9wYWNrYWdlLgorCisyLiBFbnN1cmUgeW91IGhhdmUgdGhlIG1zeXNnaXQgZW52aXJvbm1lbnQgaW4geW91ciBwYXRoLCBzbyB5b3UgaGF2ZQorICAgR05VIE1ha2UsIGJhc2ggYW5kIHBlcmwgYXZhaWxhYmxlLgorCisgICAgICAgV1dXOiBodHRwOi8vcmVwby5vci5jei93L21zeXNnaXQuZ2l0CisgICAgICAgR2l0OiBnaXQgY2xvbmUgZ2l0Oi8vcmVwby5vci5jei9tc3lzZ2l0LmdpdAorICAgICAgIFppcDogaHR0cDovL3JlcG8ub3IuY3ovdy9tc3lzZ2l0LmdpdD9hPXNuYXBzaG90O2g9bWFzdGVyO3NmPXppcAorCisgICBUaGlzIGVudmlyb25tZW50IGlzIGFsc28gbmVlZGVkIHdoZW4geW91IHVzZSB0aGUgcmVzdWx0aW5nCisgICBleGVjdXRhYmxlcywgc2luY2UgR2l0IG1pZ2h0IG5lZWQgdG8gcnVuIHNjcmlwdHMgd2hpY2ggYXJlIHBhcnQgb2YKKyAgIHRoZSBnaXQgb3BlcmF0aW9ucy4KKworMy4gSW5zaWRlIEdpdCdzIGRpcmVjdG9yeSBydW4gdGhlIGNvbW1hbmQ6CisgICAgICAgbWFrZSBjb21tb24tY21kcy5oCisgICB0byBnZW5lcmF0ZSB0aGUgY29tbW9uLWNtZHMuaCBmaWxlIG5lZWRlZCB0byBjb21waWxlIGdpdC4KKworNC4gVGhlbiBlaXRoZXIgYnVpbGQgR2l0IHdpdGggdGhlIEdOVSBNYWtlIE1ha2VmaWxlIGluIHRoZSBHaXQgcHJvamVjdHMKKyAgIHJvb3QKKyAgICAgICBtYWtlIE1TVkM9MQorICAgb3IgZ2VuZXJhdGUgVmlzdWFsIFN0dWRpbyBzb2x1dGlvbi9wcm9qZWN0cyAoLnNsbi8udmNwcm9qKSB3aXRoIHRoZQorICAgY29tbWFuZAorICAgICAgIHBlcmwgY29udHJpYi9idWlsZHN5c3RlbXMvZ2VuZXJhdGUgLWcgVmNwcm9qCisgICBhbmQgb3BlbiBhbmQgYnVpbGQgdGhlIHNvbHV0aW9uIHdpdGggdGhlIElERQorICAgICAgIGRldmVudiBnaXQuc2xuIC91c2VlbnYKKyAgIG9yIGJ1aWxkIHdpdGggdGhlIElERSBidWlsZCBlbmdpbmUgZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZCBsaW5lCisgICAgICAgZGV2ZW52IGdpdC5zbG4gL3VzZWVudiAvYnVpbGQgIlJlbGVhc2V8V2luMzIiCisgICBUaGUgL3VzZWVudiBvcHRpb24gaXMgcmVxdWlyZWQsIHNvIFZpc3VhbCBTdHVkaW8gcGlja3MgdXAgdGhlCisgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBzdXBwb3J0IGxpYnJhcmllcyByZXF1aXJlZCB0byBidWlsZAorICAgR2l0LCB3aGljaCB5b3Ugc2V0IHVwIGluIHN0ZXAgMS4KKworRG9uZSEKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3BhcmFtLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODU1MmEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy9wYXJhbS5oCkBAIC0wLDAgKzEgQEAKKy8qIEludGVudGlvbmFsbHkgZW1wdHkgZmlsZSB0byBzdXBwb3J0IGJ1aWxkaW5nIGdpdCB3aXRoIE1TVkMgKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3RpbWUuaCBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDg1NTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS9zeXMvdGltZS5oCkBAIC0wLDAgKzEgQEAKKy8qIEludGVudGlvbmFsbHkgZW1wdHkgZmlsZSB0byBzdXBwb3J0IGJ1aWxkaW5nIGdpdCB3aXRoIE1TVkMgKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvc3lzL3V0aW1lLmggYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy91dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MjU4OWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9pbmNsdWRlL3N5cy91dGltZS5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYJX1VUSU1FX0hfCisjZGVmaW5lCV9VVElNRV9IXworLyoKKyAqIFVUSU1FLkgKKyAqIFRoaXMgZmlsZSBoYXMgbm8gY29weXJpZ2h0IGFzc2lnbmVkIGFuZCBpcyBwbGFjZWQgaW4gdGhlIFB1YmxpYyBEb21haW4uCisgKiBUaGlzIGZpbGUgaXMgYSBwYXJ0IG9mIHRoZSBtaW5ndy1ydW50aW1lIHBhY2thZ2UuCisgKgorICogVGhlIG1pbmd3LXJ1bnRpbWUgcGFja2FnZSBhbmQgaXRzIGNvZGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdAorICogd2lsbCBiZSB1c2VmdWwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLiAgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1NFRCBPUgorICogSU1QTElFRCBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBUaGlzIGluY2x1ZGVzIGJ1dCBpcyBub3QgbGltaXRlZCB0bworICogd2FycmFudGllcyBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogWW91IGFyZSBmcmVlIHRvIHVzZSB0aGlzIHBhY2thZ2UgYW5kIGl0cyBjb2RlIHdpdGhvdXQgbGltaXRhdGlvbi4KKyAqLworCisvKgorICogU3RydWN0dXJlIHVzZWQgYnkgX3V0aW1lIGZ1bmN0aW9uLgorICovCitzdHJ1Y3QgX3V0aW1idWYKK3sKKwl0aW1lX3QJYWN0aW1lOwkJLyogQWNjZXNzIHRpbWUgKi8KKwl0aW1lX3QJbW9kdGltZTsJLyogTW9kaWZpY2F0aW9uIHRpbWUgKi8KK307CisKKyNpZm5kZWYJX05PX09MRE5BTUVTCisvKiBOT1RFOiBNdXN0IGJlIHRoZSBzYW1lIGFzIF91dGltYnVmIGFib3ZlLiAqLworc3RydWN0IHV0aW1idWYKK3sKKwl0aW1lX3QJYWN0aW1lOworCXRpbWVfdAltb2R0aW1lOworfTsKKyNlbmRpZgkvKiBOb3QgX05PX09MRE5BTUVTICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS91bmlzdGQuaCBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvdW5pc3RkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY1YzJjZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvdW5pc3RkLmgKQEAgLTAsMCArMSw5OSBAQAorI2lmbmRlZiBfVU5JU1REXworI2RlZmluZSBfVU5JU1REXworCisvKiBXaW4zMiBkZWZpbmUgZm9yIHBvcnRpbmcgZ2l0Ki8KKworI2lmbmRlZiBfTU9ERV9UXworI2RlZmluZQlfTU9ERV9UXwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfbW9kZV90OworCisjaWZuZGVmCV9OT19PTEROQU1FUwordHlwZWRlZiBfbW9kZV90CW1vZGVfdDsKKyNlbmRpZgorI2VuZGlmCS8qIE5vdCBfTU9ERV9UXyAqLworCisjaWZuZGVmIF9TU0laRV9UXworI2RlZmluZSBfU1NJWkVfVF8KK3R5cGVkZWYgbG9uZyBfc3NpemVfdDsKKworI2lmbmRlZglfT0ZGX1RfCisjZGVmaW5lCV9PRkZfVF8KK3R5cGVkZWYgbG9uZyBfb2ZmX3Q7CisKKyNpZm5kZWYJX05PX09MRE5BTUVTCit0eXBlZGVmIF9vZmZfdAlvZmZfdDsKKyNlbmRpZgorI2VuZGlmCS8qIE5vdCBfT0ZGX1RfICovCisKKworI2lmbmRlZglfTk9fT0xETkFNRVMKK3R5cGVkZWYgX3NzaXplX3Qgc3NpemVfdDsKKyNlbmRpZgorI2VuZGlmIC8qIE5vdCBfU1NJWkVfVF8gKi8KKwordHlwZWRlZiBzaWduZWQgY2hhciBpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICB1aW50OF90OwordHlwZWRlZiBzaG9ydCAgaW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgIHVpbnQxNl90OwordHlwZWRlZiBpbnQgIGludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkICAgdWludDMyX3Q7Cit0eXBlZGVmIGxvbmcgbG9uZyAgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nICAgdWludDY0X3Q7CisKK3R5cGVkZWYgbG9uZyBsb25nICBpbnRtYXhfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnRtYXhfdDsKKwordHlwZWRlZiBpbnQ2NF90IG9mZjY0X3Q7CisKKyNkZWZpbmUgSU5UTUFYX01JTiAgX0k2NF9NSU4KKyNkZWZpbmUgSU5UTUFYX01BWCAgX0k2NF9NQVgKKyNkZWZpbmUgVUlOVE1BWF9NQVggX1VJNjRfTUFYCisKKyNkZWZpbmUgVUlOVDMyX01BWCAweGZmZmZmZmZmICAvKiA0Mjk0OTY3Mjk1VSAqLworCisjZGVmaW5lIFNURElOX0ZJTEVOTyAgMAorI2RlZmluZSBTVERPVVRfRklMRU5PIDEKKyNkZWZpbmUgU1RERVJSX0ZJTEVOTyAyCisKKy8qIFNvbWUgZGVmaW5lcyBmb3IgX2FjY2VzcyBuQWNjZXNzTW9kZSAoTVMgZG9lc24ndCBkZWZpbmUgdGhlbSwgYnV0CisgKiBpdCBkb2Vzbid0IHNlZW0gdG8gaHVydCB0byBhZGQgdGhlbSkuICovCisjZGVmaW5lCUZfT0sJMAkvKiBDaGVjayBmb3IgZmlsZSBleGlzdGVuY2UgKi8KKy8qIFdlbGwgbWF5YmUgaXQgZG9lcyBodXJ0LiAgT24gbmV3ZXIgdmVyc2lvbnMgb2YgTVNWQ1JULCBhbiBhY2Nlc3MgbW9kZQorICAgb2YgMSBjYXVzZXMgaW52YWxpZCBwYXJhbWV0ZXIgZXJyb3IuICovCisjZGVmaW5lCVhfT0sJMAkvKiBNUyBhY2Nlc3MoKSBkb2Vzbid0IGNoZWNrIGZvciBleGVjdXRlIHBlcm1pc3Npb24uICovCisjZGVmaW5lCVdfT0sJMgkvKiBDaGVjayBmb3Igd3JpdGUgcGVybWlzc2lvbiAqLworI2RlZmluZQlSX09LCTQJLyogQ2hlY2sgZm9yIHJlYWQgcGVybWlzc2lvbiAqLworCisjZGVmaW5lCV9TX0lGSUZPCTB4MTAwMAkvKiBGSUZPICovCisjZGVmaW5lCV9TX0lGQ0hSCTB4MjAwMAkvKiBDaGFyYWN0ZXIgKi8KKyNkZWZpbmUJX1NfSUZCTEsJMHgzMDAwCS8qIEJsb2NrOiBJcyB0aGlzIGV2ZXIgc2V0IHVuZGVyIHczMj8gKi8KKyNkZWZpbmUJX1NfSUZESVIJMHg0MDAwCS8qIERpcmVjdG9yeSAqLworI2RlZmluZQlfU19JRlJFRwkweDgwMDAJLyogUmVndWxhciAqLworCisjZGVmaW5lCV9TX0lGTVQJCTB4RjAwMAkvKiBGaWxlIHR5cGUgbWFzayAqLworCisjZGVmaW5lCV9TX0lYVVNSCV9TX0lFWEVDCisjZGVmaW5lCV9TX0lXVVNSCV9TX0lXUklURQorI2RlZmluZQlfU19JUlVTUglfU19JUkVBRAorI2RlZmluZQlfU19JU0RJUihtKQkoKChtKSAmIF9TX0lGTVQpID09IF9TX0lGRElSKQorCisjZGVmaW5lCVNfSUZJRk8JCV9TX0lGSUZPCisjZGVmaW5lCVNfSUZDSFIJCV9TX0lGQ0hSCisjZGVmaW5lCVNfSUZCTEsJCV9TX0lGQkxLCisjZGVmaW5lCVNfSUZESVIJCV9TX0lGRElSCisjZGVmaW5lCVNfSUZSRUcJCV9TX0lGUkVHCisjZGVmaW5lCVNfSUZNVAkJX1NfSUZNVAorI2RlZmluZQlTX0lFWEVDCQlfU19JRVhFQworI2RlZmluZQlTX0lXUklURQlfU19JV1JJVEUKKyNkZWZpbmUJU19JUkVBRAkJX1NfSVJFQUQKKyNkZWZpbmUJU19JUldYVQkJX1NfSVJXWFUKKyNkZWZpbmUJU19JWFVTUgkJX1NfSVhVU1IKKyNkZWZpbmUJU19JV1VTUgkJX1NfSVdVU1IKKyNkZWZpbmUJU19JUlVTUgkJX1NfSVJVU1IKKworCisjZGVmaW5lCVNfSVNESVIobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZESVIpCisjZGVmaW5lCVNfSVNSRUcobSkJKCgobSkgJiBTX0lGTVQpID09IFNfSUZSRUcpCisjZGVmaW5lCVNfSVNGSUZPKG0pCSgoKG0pICYgU19JRk1UKSA9PSBTX0lGSUZPKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvdXRpbWUuaCBiL2NvbXBhdC92Y2J1aWxkL2luY2x1ZGUvdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjg1ZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvaW5jbHVkZS91dGltZS5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxzeXMvdXRpbWUuaD4KZGlmZiAtLWdpdCBhL2NvbXBhdC92Y2J1aWxkL3NjcmlwdHMvY2xpbmsucGwgYi9jb21wYXQvdmNidWlsZC9zY3JpcHRzL2NsaW5rLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE4N2QwZGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvdmNidWlsZC9zY3JpcHRzL2NsaW5rLnBsCkBAIC0wLDAgKzEsNTQgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb21waWxlcyBvciBsaW5rcyBmaWxlcworIworIyBUaGlzIGlzIGEgd3JhcHBlciB0byBmYWNpbGl0YXRlIHRoZSBjb21waWxhdGlvbiBvZiBHaXQgd2l0aCBNU1ZDCisjIHVzaW5nIEdOVSBNYWtlIGFzIHRoZSBidWlsZCBzeXN0ZW0uIFNvLCBpbnN0ZWFkIG9mIG1hbmlwdWxhdGluZyB0aGUKKyMgTWFrZWZpbGUgaW50byBzb21ldGhpbmcgbmFzdHksIGp1c3QgdG8gc3VwcG9ydCBub24tc3BhY2UgYXJndW1lbnRzCisjIGV0Yywgd2UgdXNlIHRoaXMgd3JhcHBlciB0byBmaXggdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBNYXJpdXMgU3Rvcm0tT2xzZW4gPG1zdG9ybW9AZ21haWwuY29tPgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordXNlIHN0cmljdDsKK215IEBhcmdzID0gKCk7CitteSBAY2ZsYWdzID0gKCk7CitteSAkaXNfbGlua2luZyA9IDA7Cit3aGlsZSAoQEFSR1YpIHsKKwlteSAkYXJnID0gc2hpZnQgQEFSR1Y7CisJaWYgKCIkYXJnIiA9fiAvXi1bRElNR09dLykgeworCQlwdXNoKEBjZmxhZ3MsICRhcmcpOworCX0gZWxzaWYgKCIkYXJnIiBlcSAiLW8iKSB7CisJCW15ICRmaWxlX291dCA9IHNoaWZ0IEBBUkdWOworCQlpZiAoIiRmaWxlX291dCIgPX4gL2V4ZSQvKSB7CisJCQkkaXNfbGlua2luZyA9IDE7CisJCQlwdXNoKEBhcmdzLCAiLU9VVDokZmlsZV9vdXQiKTsKKwkJfSBlbHNlIHsKKwkJCXB1c2goQGFyZ3MsICItRm8kZmlsZV9vdXQiKTsKKwkJfQorCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWx6IikgeworCQlwdXNoKEBhcmdzLCAiemxpYi5saWIiKTsKKwl9IGVsc2lmICgiJGFyZyIgZXEgIi1saWNvbnYiKSB7CisJCXB1c2goQGFyZ3MsICJpY29udi5saWIiKTsKKwl9IGVsc2lmICgiJGFyZyIgZXEgIi1sY3J5cHRvIikgeworCQlwdXNoKEBhcmdzLCAibGliZWF5MzIubGliIik7CisJfSBlbHNpZiAoIiRhcmciIGVxICItbHNzbCIpIHsKKwkJcHVzaChAYXJncywgInNzbGVheTMyLmxpYiIpOworCX0gZWxzaWYgKCIkYXJnIiBlcSAiLWxjdXJsIikgeworCQlwdXNoKEBhcmdzLCAibGliY3VybC5saWIiKTsKKwl9IGVsc2lmICgiJGFyZyIgPX4gL14tTC8gJiYgIiRhcmciIG5lICItTFRDRyIpIHsKKwkJJGFyZyA9fiBzL14tTC8tTElCUEFUSDovOworCQlwdXNoKEBhcmdzLCAkYXJnKTsKKwl9IGVsc2lmICgiJGFyZyIgPX4gL14tUi8pIHsKKwkJIyBlYXQKKwl9IGVsc2UgeworCQlwdXNoKEBhcmdzLCAkYXJnKTsKKwl9Cit9CitpZiAoJGlzX2xpbmtpbmcpIHsKKwl1bnNoaWZ0KEBhcmdzLCAibGluay5leGUiKTsKK30gZWxzZSB7CisJdW5zaGlmdChAYXJncywgImNsLmV4ZSIpOworCXB1c2goQGFyZ3MsIEBjZmxhZ3MpOworfQorI3ByaW50ZigiKioqKiBAYXJnc1xuIik7CitleGl0IChzeXN0ZW0oQGFyZ3MpICE9IDApOwpkaWZmIC0tZ2l0IGEvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9saWIucGwgYi9jb21wYXQvdmNidWlsZC9zY3JpcHRzL2xpYi5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kODA1NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9saWIucGwKQEAgLTAsMCArMSwyNiBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExpYmlmaWVzIGZpbGVzIG9uIFdpbmRvd3MKKyMKKyMgVGhpcyBpcyBhIHdyYXBwZXIgdG8gZmFjaWxpdGF0ZSB0aGUgY29tcGlsYXRpb24gb2YgR2l0IHdpdGggTVNWQworIyB1c2luZyBHTlUgTWFrZSBhcyB0aGUgYnVpbGQgc3lzdGVtLiBTbywgaW5zdGVhZCBvZiBtYW5pcHVsYXRpbmcgdGhlCisjIE1ha2VmaWxlIGludG8gc29tZXRoaW5nIG5hc3R5LCBqdXN0IHRvIHN1cHBvcnQgbm9uLXNwYWNlIGFyZ3VtZW50cworIyBldGMsIHdlIHVzZSB0aGlzIHdyYXBwZXIgdG8gZml4IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucworIworIyBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyaXVzIFN0b3JtLU9sc2VuIDxtc3Rvcm1vQGdtYWlsLmNvbT4KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3VzZSBzdHJpY3Q7CitteSBAYXJncyA9ICgpOword2hpbGUgKEBBUkdWKSB7CisJbXkgJGFyZyA9IHNoaWZ0IEBBUkdWOworCWlmICgiJGFyZyIgZXEgInJjcyIpIHsKKwkJIyBDb25zdW1lIHRoZSByY3Mgb3B0aW9uCisJfSBlbHNpZiAoIiRhcmciID1+IC9cLmEkLykgeworCQlwdXNoKEBhcmdzLCAiLU9VVDokYXJnIik7CisJfSBlbHNlIHsKKwkJcHVzaChAYXJncywgJGFyZyk7CisJfQorfQordW5zaGlmdChAYXJncywgImxpYi5leGUiKTsKKyMgcHJpbnRmKCIqKioqIEBhcmdzXG4iKTsKK2V4aXQgKHN5c3RlbShAYXJncykgIT0gMCk7CmRpZmYgLS1naXQgYS9jb21wYXQvd2luMzIuaCBiL2NvbXBhdC93aW4zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5N2U4ODAKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIFdJTjMyX0gKKyNkZWZpbmUgV0lOMzJfSAorCisvKiBjb21tb24gV2luMzIgZnVuY3Rpb25zIGZvciBNaW5HVyBhbmQgQ3lnd2luICovCisjaWZuZGVmIEdJVF9XSU5ET1dTX05BVElWRQkvKiBOb3QgZGVmaW5lZCBmb3IgQ3lnd2luICovCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbGVfYXR0cl90b19zdF9tb2RlIChEV09SRCBhdHRyKQoreworCWludCBmTW9kZSA9IFNfSVJFQUQ7CisJaWYgKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpCisJCWZNb2RlIHw9IFNfSUZESVI7CisJZWxzZQorCQlmTW9kZSB8PSBTX0lGUkVHOworCWlmICghKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9SRUFET05MWSkpCisJCWZNb2RlIHw9IFNfSVdSSVRFOworCXJldHVybiBmTW9kZTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ2V0X2ZpbGVfYXR0cihjb25zdCBjaGFyICpmbmFtZSwgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSAqZmRhdGEpCit7CisJaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXhBKGZuYW1lLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsIGZkYXRhKSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKEdldExhc3RFcnJvcigpKSB7CisJY2FzZSBFUlJPUl9BQ0NFU1NfREVOSUVEOgorCWNhc2UgRVJST1JfU0hBUklOR19WSU9MQVRJT046CisJY2FzZSBFUlJPUl9MT0NLX1ZJT0xBVElPTjoKKwljYXNlIEVSUk9SX1NIQVJJTkdfQlVGRkVSX0VYQ0VFREVEOgorCQlyZXR1cm4gRUFDQ0VTOworCWNhc2UgRVJST1JfQlVGRkVSX09WRVJGTE9XOgorCQlyZXR1cm4gRU5BTUVUT09MT05HOworCWNhc2UgRVJST1JfTk9UX0VOT1VHSF9NRU1PUlk6CisJCXJldHVybiBFTk9NRU07CisJZGVmYXVsdDoKKwkJcmV0dXJuIEVOT0VOVDsKKwl9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL2FsbG9jYS5oIGIvY29tcGF0L3dpbjMyL2FsbG9jYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwZDc5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvYWxsb2NhLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPG1hbGxvYy5oPgpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL2RpcmVudC5jIGIvY29tcGF0L3dpbjMyL2RpcmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDIwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvZGlyZW50LmMKQEAgLTAsMCArMSw5MiBAQAorI2luY2x1ZGUgIi4uLy4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitzdHJ1Y3QgRElSIHsKKwlzdHJ1Y3QgZGlyZW50IGRkX2RpcjsgLyogaW5jbHVkZXMgZF90eXBlICovCisJSEFORExFIGRkX2hhbmRsZTsgICAgIC8qIEZpbmRGaXJzdEZpbGUgaGFuZGxlICovCisJaW50IGRkX3N0YXQ7ICAgICAgICAgIC8qIDAtYmFzZWQgaW5kZXggKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaW5kZGF0YTJkaXJlbnQoc3RydWN0IGRpcmVudCAqZW50LCBXSU4zMl9GSU5EX0RBVEFXICpmZGF0YSkKK3sKKwkvKiBjb252ZXJ0IFVURi0xNiBuYW1lIHRvIFVURi04ICovCisJeHdjc3RvdXRmKGVudC0+ZF9uYW1lLCBmZGF0YS0+Y0ZpbGVOYW1lLCBzaXplb2YoZW50LT5kX25hbWUpKTsKKworCS8qIFNldCBmaWxlIHR5cGUsIGJhc2VkIG9uIFdJTjMyX0ZJTkRfREFUQSAqLworCWlmIChmZGF0YS0+ZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKKwkJZW50LT5kX3R5cGUgPSBEVF9ESVI7CisJZWxzZQorCQllbnQtPmRfdHlwZSA9IERUX1JFRzsKK30KKworRElSICpvcGVuZGlyKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJd2NoYXJfdCBwYXR0ZXJuW01BWF9QQVRIICsgMl07IC8qICsgMiBmb3IgJy8nICcqJyAqLworCVdJTjMyX0ZJTkRfREFUQVcgZmRhdGE7CisJSEFORExFIGg7CisJaW50IGxlbjsKKwlESVIgKmRpcjsKKworCS8qIGNvbnZlcnQgbmFtZSB0byBVVEYtMTYgYW5kIGNoZWNrIGxlbmd0aCA8IE1BWF9QQVRIICovCisJaWYgKChsZW4gPSB4dXRmdG93Y3NfcGF0aChwYXR0ZXJuLCBuYW1lKSkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIGFwcGVuZCBvcHRpb25hbCAnLycgYW5kIHdpbGRjYXJkICcqJyAqLworCWlmIChsZW4gJiYgIWlzX2Rpcl9zZXAocGF0dGVybltsZW4gLSAxXSkpCisJCXBhdHRlcm5bbGVuKytdID0gJy8nOworCXBhdHRlcm5bbGVuKytdID0gJyonOworCXBhdHRlcm5bbGVuXSA9IDA7CisKKwkvKiBvcGVuIGZpbmQgaGFuZGxlICovCisJaCA9IEZpbmRGaXJzdEZpbGVXKHBhdHRlcm4sICZmZGF0YSk7CisJaWYgKGggPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKwkJRFdPUkQgZXJyID0gR2V0TGFzdEVycm9yKCk7CisJCWVycm5vID0gKGVyciA9PSBFUlJPUl9ESVJFQ1RPUlkpID8gRU5PVERJUiA6IGVycl93aW5fdG9fcG9zaXgoZXJyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogaW5pdGlhbGl6ZSBESVIgc3RydWN0dXJlIGFuZCBjb3B5IGZpcnN0IGRpciBlbnRyeSAqLworCWRpciA9IHhtYWxsb2Moc2l6ZW9mKERJUikpOworCWRpci0+ZGRfaGFuZGxlID0gaDsKKwlkaXItPmRkX3N0YXQgPSAwOworCWZpbmRkYXRhMmRpcmVudCgmZGlyLT5kZF9kaXIsICZmZGF0YSk7CisJcmV0dXJuIGRpcjsKK30KKworc3RydWN0IGRpcmVudCAqcmVhZGRpcihESVIgKmRpcikKK3sKKwlpZiAoIWRpcikgeworCQllcnJubyA9IEVCQURGOyAvKiBObyBzZXRfZXJybm8gZm9yIG1pbmd3ICovCisJCXJldHVybiBOVUxMOworCX0KKworCS8qIGlmIGZpcnN0IGVudHJ5LCBkaXJlbnQgaGFzIGFscmVhZHkgYmVlbiBzZXQgdXAgYnkgb3BlbmRpciAqLworCWlmIChkaXItPmRkX3N0YXQpIHsKKwkJLyogZ2V0IG5leHQgZW50cnkgYW5kIGNvbnZlcnQgZnJvbSBXSU4zMl9GSU5EX0RBVEEgdG8gZGlyZW50ICovCisJCVdJTjMyX0ZJTkRfREFUQVcgZmRhdGE7CisJCWlmIChGaW5kTmV4dEZpbGVXKGRpci0+ZGRfaGFuZGxlLCAmZmRhdGEpKSB7CisJCQlmaW5kZGF0YTJkaXJlbnQoJmRpci0+ZGRfZGlyLCAmZmRhdGEpOworCQl9IGVsc2UgeworCQkJRFdPUkQgbGFzdGVyciA9IEdldExhc3RFcnJvcigpOworCQkJLyogUE9TSVggc2F5cyB5b3Ugc2hvdWxkbid0IHNldCBlcnJubyB3aGVuIHJlYWRkaXIgY2FuJ3QKKwkJCSAgIGZpbmQgYW55IG1vcmUgZmlsZXM7IHNvLCBpZiBhbm90aGVyIGVycm9yIHdlIGxlYXZlIGl0IHNldC4gKi8KKwkJCWlmIChsYXN0ZXJyICE9IEVSUk9SX05PX01PUkVfRklMRVMpCisJCQkJZXJybm8gPSBlcnJfd2luX3RvX3Bvc2l4KGxhc3RlcnIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwkrK2Rpci0+ZGRfc3RhdDsKKwlyZXR1cm4gJmRpci0+ZGRfZGlyOworfQorCitpbnQgY2xvc2VkaXIoRElSICpkaXIpCit7CisJaWYgKCFkaXIpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIC0xOworCX0KKworCUZpbmRDbG9zZShkaXItPmRkX2hhbmRsZSk7CisJZnJlZShkaXIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL2RpcmVudC5oIGIvY29tcGF0L3dpbjMyL2RpcmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ODIwN2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvZGlyZW50LmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBESVJFTlRfSAorI2RlZmluZSBESVJFTlRfSAorCit0eXBlZGVmIHN0cnVjdCBESVIgRElSOworCisjZGVmaW5lIERUX1VOS05PV04gMAorI2RlZmluZSBEVF9ESVIgICAgIDEKKyNkZWZpbmUgRFRfUkVHICAgICAyCisjZGVmaW5lIERUX0xOSyAgICAgMworCitzdHJ1Y3QgZGlyZW50IHsKKwl1bnNpZ25lZCBjaGFyIGRfdHlwZTsgICAgICAvKiBmaWxlIHR5cGUgdG8gcHJldmVudCBsc3RhdCBhZnRlciByZWFkZGlyICovCisJY2hhciBkX25hbWVbTUFYX1BBVEggKiAzXTsgLyogZmlsZSBuYW1lICgqIDMgZm9yIFVURi04IGNvbnZlcnNpb24pICovCit9OworCitESVIgKm9wZW5kaXIoY29uc3QgY2hhciAqZGlybmFtZSk7CitzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyKERJUiAqZGlyKTsKK2ludCBjbG9zZWRpcihESVIgKmRpcik7CisKKyNlbmRpZiAvKiBESVJFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3B0aHJlYWQuYyBiL2NvbXBhdC93aW4zMi9wdGhyZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE4ZjVjNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi9wdGhyZWFkLmMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQW5kcnplaiBLLiBIYWN6ZXdza2kgPGFoYWN6ZXdza2lAZ21haWwuY29tPgorICoKKyAqIERJU0NMQUlNRVI6IFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBHaXQtc3BlY2lmaWMsIGl0IGlzIHN1YnNldCBvZiBvcmlnaW5hbAorICogUHRocmVhZHMgQVBJLCB3aXRob3V0IGxvdHMgb2Ygb3RoZXIgZmVhdHVyZXMgdGhhdCBHaXQgZG9lc24ndCB1c2UuCisgKiBHaXQgYWxzbyBtYWtlcyBzdXJlIHRoYXQgdGhlIHBhc3NlZCBhcmd1bWVudHMgYXJlIHZhbGlkLCBzbyB0aGVyZSdzCisgKiBubyBuZWVkIGZvciBkb3VibGUtY2hlY2tpbmcuCisgKi8KKworI2luY2x1ZGUgIi4uLy4uL2dpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInB0aHJlYWQuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBfX3N0ZGNhbGwgd2luMzJfc3RhcnRfcm91dGluZSh2b2lkICphcmcpCit7CisJcHRocmVhZF90ICp0aHJlYWQgPSBhcmc7CisJdGhyZWFkLT50aWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKKwl0aHJlYWQtPmFyZyA9IHRocmVhZC0+c3RhcnRfcm91dGluZSh0aHJlYWQtPmFyZyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFkX3QgKnRocmVhZCwgY29uc3Qgdm9pZCAqdW51c2VkLAorCQkgICB2b2lkICooKnN0YXJ0X3JvdXRpbmUpKHZvaWQqKSwgdm9pZCAqYXJnKQoreworCXRocmVhZC0+YXJnID0gYXJnOworCXRocmVhZC0+c3RhcnRfcm91dGluZSA9IHN0YXJ0X3JvdXRpbmU7CisJdGhyZWFkLT5oYW5kbGUgPSAoSEFORExFKQorCQlfYmVnaW50aHJlYWRleChOVUxMLCAwLCB3aW4zMl9zdGFydF9yb3V0aW5lLCB0aHJlYWQsIDAsIE5VTEwpOworCisJaWYgKCF0aHJlYWQtPmhhbmRsZSkKKwkJcmV0dXJuIGVycm5vOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK2ludCB3aW4zMl9wdGhyZWFkX2pvaW4ocHRocmVhZF90ICp0aHJlYWQsIHZvaWQgKip2YWx1ZV9wdHIpCit7CisJRFdPUkQgcmVzdWx0ID0gV2FpdEZvclNpbmdsZU9iamVjdCh0aHJlYWQtPmhhbmRsZSwgSU5GSU5JVEUpOworCXN3aXRjaCAocmVzdWx0KSB7CisJCWNhc2UgV0FJVF9PQkpFQ1RfMDoKKwkJCWlmICh2YWx1ZV9wdHIpCisJCQkJKnZhbHVlX3B0ciA9IHRocmVhZC0+YXJnOworCQkJcmV0dXJuIDA7CisJCWNhc2UgV0FJVF9BQkFORE9ORUQ6CisJCQlyZXR1cm4gRUlOVkFMOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIGVycl93aW5fdG9fcG9zaXgoR2V0TGFzdEVycm9yKCkpOworCX0KK30KKworcHRocmVhZF90IHB0aHJlYWRfc2VsZih2b2lkKQoreworCXB0aHJlYWRfdCB0ID0geyBOVUxMIH07CisJdC50aWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKTsKKwlyZXR1cm4gdDsKK30KKworaW50IHB0aHJlYWRfY29uZF9pbml0KHB0aHJlYWRfY29uZF90ICpjb25kLCBjb25zdCB2b2lkICp1bnVzZWQpCit7CisJY29uZC0+d2FpdGVycyA9IDA7CisJY29uZC0+d2FzX2Jyb2FkY2FzdCA9IDA7CisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKworCWNvbmQtPnNlbWEgPSBDcmVhdGVTZW1hcGhvcmUoTlVMTCwgMCwgTE9OR19NQVgsIE5VTEwpOworCWlmICghY29uZC0+c2VtYSkKKwkJZGllKCJDcmVhdGVTZW1hcGhvcmUoKSBmYWlsZWQiKTsKKworCWNvbmQtPmNvbnRpbnVlX2Jyb2FkY2FzdCA9IENyZWF0ZUV2ZW50KE5VTEwsCS8qIHNlY3VyaXR5ICovCisJCQkJRkFMU0UsCQkJLyogYXV0by1yZXNldCAqLworCQkJCUZBTFNFLAkJCS8qIG5vdCBzaWduYWxlZCAqLworCQkJCU5VTEwpOwkJCS8qIG5hbWUgKi8KKwlpZiAoIWNvbmQtPmNvbnRpbnVlX2Jyb2FkY2FzdCkKKwkJZGllKCJDcmVhdGVFdmVudCgpIGZhaWxlZCIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2NvbmRfZGVzdHJveShwdGhyZWFkX2NvbmRfdCAqY29uZCkKK3sKKwlDbG9zZUhhbmRsZShjb25kLT5zZW1hKTsKKwlDbG9zZUhhbmRsZShjb25kLT5jb250aW51ZV9icm9hZGNhc3QpOworCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfY29uZF93YWl0KHB0aHJlYWRfY29uZF90ICpjb25kLCBDUklUSUNBTF9TRUNUSU9OICptdXRleCkKK3sKKwlpbnQgbGFzdF93YWl0ZXI7CisKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKwljb25kLT53YWl0ZXJzKys7CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisKKwkvKgorCSAqIFVubG9jayBleHRlcm5hbCBtdXRleCBhbmQgd2FpdCBmb3Igc2lnbmFsLgorCSAqIE5PVEU6IHdlJ3ZlIGhlbGQgbXV0ZXggbG9ja2VkIGxvbmcgZW5vdWdoIHRvIGluY3JlbWVudAorCSAqIHdhaXRlcnMgY291bnQgYWJvdmUsIHNvIHRoZXJlJ3Mgbm8gcHJvYmxlbSB3aXRoCisJICogbGVhdmluZyBtdXRleCB1bmxvY2tlZCBiZWZvcmUgd2Ugd2FpdCBvbiBzZW1hcGhvcmUuCisJICovCisJTGVhdmVDcml0aWNhbFNlY3Rpb24obXV0ZXgpOworCisJLyogbGV0J3Mgd2FpdCAtIGlnbm9yZSByZXR1cm4gdmFsdWUgKi8KKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KGNvbmQtPnNlbWEsIElORklOSVRFKTsKKworCS8qCisJICogRGVjcmVhc2Ugd2FpdGVycyBjb3VudC4gSWYgd2UgYXJlIHRoZSBsYXN0IHdhaXRlciwgdGhlbiB3ZSBtdXN0CisJICogbm90aWZ5IHRoZSBicm9hZGNhc3RpbmcgdGhyZWFkIHRoYXQgaXQgY2FuIGNvbnRpbnVlLgorCSAqIEJ1dCBpZiB3ZSBjb250aW51ZWQgZHVlIHRvIGNvbmRfc2lnbmFsLCB3ZSBkbyBub3QgaGF2ZSB0byBkbyB0aGF0CisJICogYmVjYXVzZSB0aGUgc2lnbmFsaW5nIHRocmVhZCBrbm93cyB0aGF0IG9ubHkgb25lIHdhaXRlciBjb250aW51ZWQuCisJICovCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisJY29uZC0+d2FpdGVycy0tOworCWxhc3Rfd2FpdGVyID0gY29uZC0+d2FzX2Jyb2FkY2FzdCAmJiBjb25kLT53YWl0ZXJzID09IDA7CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisKKwlpZiAobGFzdF93YWl0ZXIpIHsKKwkJLyoKKwkJICogY29uZF9icm9hZGNhc3Qgd2FzIGlzc3VlZCB3aGlsZSBtdXRleCB3YXMgaGVsZC4gVGhpcyBtZWFucworCQkgKiB0aGF0IGFsbCBvdGhlciB3YWl0ZXJzIGhhdmUgY29udGludWVkLCBidXQgYXJlIGNvbnRlbmRpbmcKKwkJICogZm9yIHRoZSBtdXRleCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24gYmVjYXVzZSB0aGUKKwkJICogYnJvYWRjYXN0aW5nIHRocmVhZCBkaWQgbm90IGxlYXZlIGNvbmRfYnJvYWRjYXN0LCB5ZXQuCisJCSAqIChUaGlzIGlzIHNvIHRoYXQgaXQgY2FuIGJlIHN1cmUgdGhhdCBlYWNoIHdhaXRlciBoYXMKKwkJICogY29uc3VtZWQgZXhhY3RseSBvbmUgc2xpY2Ugb2YgdGhlIHNlbWFwaG9yLikKKwkJICogVGhlIGxhc3Qgd2FpdGVyIG11c3QgdGVsbCB0aGUgYnJvYWRjYXN0aW5nIHRocmVhZCB0aGF0IGl0CisJCSAqIGNhbiBnbyBvbi4KKwkJICovCisJCVNldEV2ZW50KGNvbmQtPmNvbnRpbnVlX2Jyb2FkY2FzdCk7CisJCS8qCisJCSAqIE5vdyB3ZSBnbyBvbiB0byBjb250ZW5kIHdpdGggYWxsIG90aGVyIHdhaXRlcnMgZm9yCisJCSAqIHRoZSBtdXRleC4gQXVmIGluIGRlbiBLYW1wZiEKKwkJICovCisJfQorCS8qIGxvY2sgZXh0ZXJuYWwgbXV0ZXggYWdhaW4gKi8KKwlFbnRlckNyaXRpY2FsU2VjdGlvbihtdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIElNUE9SVEFOVDogVGhpcyBpbXBsZW1lbnRhdGlvbiByZXF1aXJlcyB0aGF0IHB0aHJlYWRfY29uZF9zaWduYWwKKyAqIGlzIGNhbGxlZCB3aGlsZSB0aGUgbXV0ZXggaXMgaGVsZCB0aGF0IGlzIHVzZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcKKyAqIHB0aHJlYWRfY29uZF93YWl0IGNhbGxzIQorICovCitpbnQgcHRocmVhZF9jb25kX3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqY29uZCkKK3sKKwlpbnQgaGF2ZV93YWl0ZXJzOworCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisJaGF2ZV93YWl0ZXJzID0gY29uZC0+d2FpdGVycyA+IDA7CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisKKwkvKgorCSAqIFNpZ25hbCBvbmx5IHdoZW4gdGhlcmUgYXJlIHdhaXRlcnMKKwkgKi8KKwlpZiAoaGF2ZV93YWl0ZXJzKQorCQlyZXR1cm4gUmVsZWFzZVNlbWFwaG9yZShjb25kLT5zZW1hLCAxLCBOVUxMKSA/CisJCQkwIDogZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoKKyAqIERPVUJMWSBJTVBPUlRBTlQ6IFRoaXMgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgdGhhdCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0CisgKiBpcyBjYWxsZWQgd2hpbGUgdGhlIG11dGV4IGlzIGhlbGQgdGhhdCBpcyB1c2VkIGluIHRoZSBjb3JyZXNwb25kaW5nCisgKiBwdGhyZWFkX2NvbmRfd2FpdCBjYWxscyEKKyAqLworaW50IHB0aHJlYWRfY29uZF9icm9hZGNhc3QocHRocmVhZF9jb25kX3QgKmNvbmQpCit7CisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisKKwlpZiAoKGNvbmQtPndhc19icm9hZGNhc3QgPSBjb25kLT53YWl0ZXJzID4gMCkpIHsKKwkJLyogd2FrZSB1cCBhbGwgd2FpdGVycyAqLworCQlSZWxlYXNlU2VtYXBob3JlKGNvbmQtPnNlbWEsIGNvbmQtPndhaXRlcnMsIE5VTEwpOworCQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY29uZC0+d2FpdGVyc19sb2NrKTsKKwkJLyoKKwkJICogQXQgdGhpcyBwb2ludCBhbGwgd2FpdGVycyBjb250aW51ZS4gRWFjaCBvbmUgdGFrZXMgaXRzCisJCSAqIHNsaWNlIG9mIHRoZSBzZW1hcGhvci4gTm93IGl0J3Mgb3VyIHR1cm4gdG8gd2FpdDogU2luY2UKKwkJICogdGhlIGV4dGVybmFsIG11dGV4IGlzIGhlbGQsIG5vIHRocmVhZCBjYW4gbGVhdmUgY29uZF93YWl0LAorCQkgKiB5ZXQuIEZvciB0aGlzIHJlYXNvbiwgd2UgY2FuIGJlIHN1cmUgdGhhdCBubyB0aHJlYWQgZ2V0cworCQkgKiBhIGNoYW5jZSB0byBlYXQgKm1vcmUqIHRoYW4gb25lIHNsaWNlLiBPVE9ILCBpdCBtZWFucworCQkgKiB0aGF0IHRoZSBsYXN0IHdhaXRlciBtdXN0IHNlbmQgdXMgYSB3YWtlLXVwLgorCQkgKi8KKwkJV2FpdEZvclNpbmdsZU9iamVjdChjb25kLT5jb250aW51ZV9icm9hZGNhc3QsIElORklOSVRFKTsKKwkJLyoKKwkJICogU2luY2UgdGhlIGV4dGVybmFsIG11dGV4IGlzIGhlbGQsIG5vIHRocmVhZCBjYW4gZW50ZXIKKwkJICogY29uZF93YWl0LCBhbmQsIGhlbmNlLCBpdCBpcyBzYWZlIHRvIHJlc2V0IHRoaXMgZmxhZworCQkgKiB3aXRob3V0IGNvbmQtPndhaXRlcnNfbG9jayBoZWxkLgorCQkgKi8KKwkJY29uZC0+d2FzX2Jyb2FkY2FzdCA9IDA7CisJfSBlbHNlIHsKKwkJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmNvbmQtPndhaXRlcnNfbG9jayk7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3B0aHJlYWQuaCBiL2NvbXBhdC93aW4zMi9wdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkMTg3MwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC93aW4zMi9wdGhyZWFkLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBIZWFkZXIgdXNlZCB0byBhZGFwdCBwdGhyZWFkLWJhc2VkIFBPU0lYIGNvZGUgdG8gV2luZG93cyBBUEkgdGhyZWFkcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQW5kcnplaiBLLiBIYWN6ZXdza2kgPGFoYWN6ZXdza2lAZ21haWwuY29tPgorICovCisKKyNpZm5kZWYgUFRIUkVBRF9ICisjZGVmaW5lIFBUSFJFQURfSAorCisjaWZuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2VuZGlmCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKy8qCisgKiBEZWZpbmVzIHRoYXQgYWRhcHQgV2luZG93cyBBUEkgdGhyZWFkcyB0byBwdGhyZWFkcyBBUEkKKyAqLworI2RlZmluZSBwdGhyZWFkX211dGV4X3QgQ1JJVElDQUxfU0VDVElPTgorCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfaW5pdChhLGIpIChJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKChhKSksIDApCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhfZGVzdHJveShhKSBEZWxldGVDcml0aWNhbFNlY3Rpb24oKGEpKQorI2RlZmluZSBwdGhyZWFkX211dGV4X2xvY2sgRW50ZXJDcml0aWNhbFNlY3Rpb24KKyNkZWZpbmUgcHRocmVhZF9tdXRleF91bmxvY2sgTGVhdmVDcml0aWNhbFNlY3Rpb24KKwordHlwZWRlZiBpbnQgcHRocmVhZF9tdXRleGF0dHJfdDsKKyNkZWZpbmUgcHRocmVhZF9tdXRleGF0dHJfaW5pdChhKSAoKihhKSA9IDApCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koYSkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoYSwgdCkgMAorI2RlZmluZSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSAwCisKKy8qCisgKiBJbXBsZW1lbnQgc2ltcGxlIGNvbmRpdGlvbiB2YXJpYWJsZSBmb3IgV2luZG93cyB0aHJlYWRzLCBiYXNlZCBvbiBBQ0UKKyAqIGltcGxlbWVudGF0aW9uLgorICoKKyAqIFNlZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbjogaHR0cDovL2JpdC5seS8xdmtEam8KKyAqIEFDRSBob21lcGFnZTogaHR0cDovL3d3dy5jc2Uud3VzdGwuZWR1L35zY2htaWR0L0FDRS5odG1sCisgKiBTZWUgYWxzbzogaHR0cDovL3d3dy5jc2Uud3VzdGwuZWR1L35zY2htaWR0L3dpbjMyLWN2LTEuaHRtbAorICovCit0eXBlZGVmIHN0cnVjdCB7CisJTE9ORyB3YWl0ZXJzOworCWludCB3YXNfYnJvYWRjYXN0OworCUNSSVRJQ0FMX1NFQ1RJT04gd2FpdGVyc19sb2NrOworCUhBTkRMRSBzZW1hOworCUhBTkRMRSBjb250aW51ZV9icm9hZGNhc3Q7Cit9IHB0aHJlYWRfY29uZF90OworCitleHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0KHB0aHJlYWRfY29uZF90ICpjb25kLCBjb25zdCB2b2lkICp1bnVzZWQpOworZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfZGVzdHJveShwdGhyZWFkX2NvbmRfdCAqY29uZCk7CitleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0KHB0aHJlYWRfY29uZF90ICpjb25kLCBDUklUSUNBTF9TRUNUSU9OICptdXRleCk7CitleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwocHRocmVhZF9jb25kX3QgKmNvbmQpOworZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KHB0aHJlYWRfY29uZF90ICpjb25kKTsKKworLyoKKyAqIFNpbXBsZSB0aHJlYWQgY3JlYXRpb24gaW1wbGVtZW50YXRpb24gdXNpbmcgcHRocmVhZCBBUEkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUhBTkRMRSBoYW5kbGU7CisJdm9pZCAqKCpzdGFydF9yb3V0aW5lKSh2b2lkKik7CisJdm9pZCAqYXJnOworCURXT1JEIHRpZDsKK30gcHRocmVhZF90OworCitleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqdGhyZWFkLCBjb25zdCB2b2lkICp1bnVzZWQsCisJCQkgIHZvaWQgKigqc3RhcnRfcm91dGluZSkodm9pZCopLCB2b2lkICphcmcpOworCisvKgorICogVG8gYXZvaWQgdGhlIG5lZWQgb2YgY29weWluZyBhIHN0cnVjdCwgd2UgdXNlIHNtYWxsIG1hY3JvIHdyYXBwZXIgdG8gcGFzcworICogcG9pbnRlciB0byB3aW4zMl9wdGhyZWFkX2pvaW4gaW5zdGVhZC4KKyAqLworI2RlZmluZSBwdGhyZWFkX2pvaW4oYSwgYikgd2luMzJfcHRocmVhZF9qb2luKCYoYSksIChiKSkKKworZXh0ZXJuIGludCB3aW4zMl9wdGhyZWFkX2pvaW4ocHRocmVhZF90ICp0aHJlYWQsIHZvaWQgKip2YWx1ZV9wdHIpOworCisjZGVmaW5lIHB0aHJlYWRfZXF1YWwodDEsIHQyKSAoKHQxKS50aWQgPT0gKHQyKS50aWQpCitleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZih2b2lkKTsKKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9leGl0KHZvaWQgKnJldCkKK3sKKwlFeGl0VGhyZWFkKChEV09SRClyZXQpOworfQorCit0eXBlZGVmIERXT1JEIHB0aHJlYWRfa2V5X3Q7CitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCAqa2V5cCwgdm9pZCAoKmRlc3RydWN0b3IpKHZvaWQgKnZhbHVlKSkKK3sKKwlyZXR1cm4gKCprZXlwID0gVGxzQWxsb2MoKSkgPT0gVExTX09VVF9PRl9JTkRFWEVTID8gRUFHQUlOIDogMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHRocmVhZF9rZXlfZGVsZXRlKHB0aHJlYWRfa2V5X3Qga2V5KQoreworCXJldHVybiBUbHNGcmVlKGtleSkgPyAwIDogRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX3NldHNwZWNpZmljKHB0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICp2YWx1ZSkKK3sKKwlyZXR1cm4gVGxzU2V0VmFsdWUoa2V5LCAodm9pZCAqKXZhbHVlKSA/IDAgOiBFSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90IGtleSkKK3sKKwlyZXR1cm4gVGxzR2V0VmFsdWUoa2V5KTsKK30KKworI2VuZGlmIC8qIFBUSFJFQURfSCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0L3dpbjMyL3N5c2xvZy5jIGIvY29tcGF0L3dpbjMyL3N5c2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTVlNDMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luMzIvc3lzbG9nLmMKQEAgLTAsMCArMSw3OCBAQAorI2luY2x1ZGUgIi4uLy4uL2dpdC1jb21wYXQtdXRpbC5oIgorCitzdGF0aWMgSEFORExFIG1zX2V2ZW50bG9nOworCit2b2lkIG9wZW5sb2coY29uc3QgY2hhciAqaWRlbnQsIGludCBsb2dvcHQsIGludCBmYWNpbGl0eSkKK3sKKwlpZiAobXNfZXZlbnRsb2cpCisJCXJldHVybjsKKworCW1zX2V2ZW50bG9nID0gUmVnaXN0ZXJFdmVudFNvdXJjZUEoTlVMTCwgaWRlbnQpOworCisJaWYgKCFtc19ldmVudGxvZykKKwkJd2FybmluZygiUmVnaXN0ZXJFdmVudFNvdXJjZSgpIGZhaWxlZDogJWx1IiwgR2V0TGFzdEVycm9yKCkpOworfQorCit2b2lkIHN5c2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCVdPUkQgbG9ndHlwZTsKKwljaGFyICpzdHIsICpwb3M7CisJaW50IHN0cl9sZW47CisJdmFfbGlzdCBhcDsKKworCWlmICghbXNfZXZlbnRsb2cpCisJCXJldHVybjsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cl9sZW4gPSB2c25wcmludGYoTlVMTCwgMCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWlmIChzdHJfbGVuIDwgMCkgeworCQl3YXJuaW5nKCJ2c25wcmludGYgZmFpbGVkOiAnJXMnIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKworCXN0ciA9IG1hbGxvYyhzdHJfbGVuICsgMSk7CisJaWYgKCFzdHIpIHsKKwkJd2FybmluZygibWFsbG9jIGZhaWxlZDogJyVzJyIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybjsKKwl9CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2c25wcmludGYoc3RyLCBzdHJfbGVuICsgMSwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXdoaWxlICgocG9zID0gc3Ryc3RyKHN0ciwgIiUxIikpICE9IE5VTEwpIHsKKwkJc3RyID0gcmVhbGxvYyhzdHIsICsrc3RyX2xlbiArIDEpOworCQlpZiAoIXN0cikgeworCQkJd2FybmluZygicmVhbGxvYyBmYWlsZWQ6ICclcyciLCBzdHJlcnJvcihlcnJubykpOworCQkJcmV0dXJuOworCQl9CisJCW1lbW1vdmUocG9zICsgMiwgcG9zICsgMSwgc3RybGVuKHBvcykpOworCQlwb3NbMV0gPSAnICc7CisJfQorCisJc3dpdGNoIChwcmlvcml0eSkgeworCWNhc2UgTE9HX0VNRVJHOgorCWNhc2UgTE9HX0FMRVJUOgorCWNhc2UgTE9HX0NSSVQ6CisJY2FzZSBMT0dfRVJSOgorCQlsb2d0eXBlID0gRVZFTlRMT0dfRVJST1JfVFlQRTsKKwkJYnJlYWs7CisKKwljYXNlIExPR19XQVJOSU5HOgorCQlsb2d0eXBlID0gRVZFTlRMT0dfV0FSTklOR19UWVBFOworCQlicmVhazsKKworCWNhc2UgTE9HX05PVElDRToKKwljYXNlIExPR19JTkZPOgorCWNhc2UgTE9HX0RFQlVHOgorCWRlZmF1bHQ6CisJCWxvZ3R5cGUgPSBFVkVOVExPR19JTkZPUk1BVElPTl9UWVBFOworCQlicmVhazsKKwl9CisKKwlSZXBvcnRFdmVudEEobXNfZXZlbnRsb2csIGxvZ3R5cGUsIDAsIDAsIE5VTEwsIDEsIDAsCisJICAgIChjb25zdCBjaGFyICoqKSZzdHIsIE5VTEwpOworCWZyZWUoc3RyKTsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC93aW4zMi9zeXNsb2cuaCBiL2NvbXBhdC93aW4zMi9zeXNsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGRhYTdjCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMyL3N5c2xvZy5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgU1lTTE9HX0gKKyNkZWZpbmUgU1lTTE9HX0gKKworI2RlZmluZSBMT0dfUElEICAgICAweDAxCisKKyNkZWZpbmUgTE9HX0VNRVJHICAgMAorI2RlZmluZSBMT0dfQUxFUlQgICAxCisjZGVmaW5lIExPR19DUklUICAgIDIKKyNkZWZpbmUgTE9HX0VSUiAgICAgMworI2RlZmluZSBMT0dfV0FSTklORyA0CisjZGVmaW5lIExPR19OT1RJQ0UgIDUKKyNkZWZpbmUgTE9HX0lORk8gICAgNgorI2RlZmluZSBMT0dfREVCVUcgICA3CisKKyNkZWZpbmUgTE9HX0RBRU1PTiAgKDM8PDMpCisKK3ZvaWQgb3BlbmxvZyhjb25zdCBjaGFyICppZGVudCwgaW50IGxvZ29wdCwgaW50IGZhY2lsaXR5KTsKK3ZvaWQgc3lzbG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisjZW5kaWYgLyogU1lTTE9HX0ggKi8KZGlmZiAtLWdpdCBhL2NvbXBhdC93aW4zMm1tYXAuYyBiL2NvbXBhdC93aW4zMm1tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGE4YzlhCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0L3dpbjMybW1hcC5jCkBAIC0wLDAgKzEsNDEgQEAKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKwordm9pZCAqZ2l0X21tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KQoreworCUhBTkRMRSBobWFwOworCXZvaWQgKnRlbXA7CisJb2ZmX3QgbGVuOworCXN0cnVjdCBzdGF0IHN0OworCXVpbnQ2NF90IG8gPSBvZmZzZXQ7CisJdWludDMyX3QgbCA9IG8gJiAweEZGRkZGRkZGOworCXVpbnQzMl90IGggPSAobyA+PiAzMikgJiAweEZGRkZGRkZGOworCisJaWYgKCFmc3RhdChmZCwgJnN0KSkKKwkJbGVuID0gc3Quc3Rfc2l6ZTsKKwllbHNlCisJCWRpZSgibW1hcDogY291bGQgbm90IGRldGVybWluZSBmaWxlc2l6ZSIpOworCisJaWYgKChsZW5ndGggKyBvZmZzZXQpID4gbGVuKQorCQlsZW5ndGggPSB4c2l6ZV90KGxlbiAtIG9mZnNldCk7CisKKwlpZiAoIShmbGFncyAmIE1BUF9QUklWQVRFKSkKKwkJZGllKCJJbnZhbGlkIHVzYWdlIG9mIG1tYXAgd2hlbiBidWlsdCB3aXRoIFVTRV9XSU4zMl9NTUFQIik7CisKKwlobWFwID0gQ3JlYXRlRmlsZU1hcHBpbmcoKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCksIE5VTEwsCisJCVBBR0VfV1JJVEVDT1BZLCAwLCAwLCBOVUxMKTsKKworCWlmICghaG1hcCkKKwkJcmV0dXJuIE1BUF9GQUlMRUQ7CisKKwl0ZW1wID0gTWFwVmlld09mRmlsZUV4KGhtYXAsIEZJTEVfTUFQX0NPUFksIGgsIGwsIGxlbmd0aCwgc3RhcnQpOworCisJaWYgKCFDbG9zZUhhbmRsZShobWFwKSkKKwkJd2FybmluZygidW5hYmxlIHRvIGNsb3NlIGZpbGUgbWFwcGluZyBoYW5kbGUiKTsKKworCXJldHVybiB0ZW1wID8gdGVtcCA6IE1BUF9GQUlMRUQ7Cit9CisKK2ludCBnaXRfbXVubWFwKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoKQoreworCXJldHVybiAhVW5tYXBWaWV3T2ZGaWxlKHN0YXJ0KTsKK30KZGlmZiAtLWdpdCBhL2NvbXBhdC93aW5hbnNpLmMgYi9jb21wYXQvd2luYW5zaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlZmY1NWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb21wYXQvd2luYW5zaS5jCkBAIC0wLDAgKzEsNTc5IEBACisvKgorICogQ29weXJpZ2h0IDIwMDggUGV0ZXIgSGFycmlzIDxnaXRAcGV0ZXIuaXMtYS1nZWVrLm9yZz4KKyAqLworCisjdW5kZWYgTk9HREkKKyNpbmNsdWRlICIuLi9naXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlIDx3aW5nZGkuaD4KKyNpbmNsdWRlIDx3aW5yZWcuaD4KKworLyoKKyBBTlNJIGNvZGVzIHVzZWQgYnkgZ2l0OiBtLCBLCisKKyBUaGlzIGZpbGUgaXMgZ2l0LXNwZWNpZmljLiBUaGVyZWZvcmUsIHRoaXMgZmlsZSBkb2VzIG5vdCBhdHRlbXB0CisgdG8gaW1wbGVtZW50IGFueSBjb2RlcyB0aGF0IGFyZSBub3QgdXNlZCBieSBnaXQuCisqLworCitzdGF0aWMgSEFORExFIGNvbnNvbGU7CitzdGF0aWMgV09SRCBwbGFpbl9hdHRyOworc3RhdGljIFdPUkQgYXR0cjsKK3N0YXRpYyBpbnQgbmVnYXRpdmU7CitzdGF0aWMgaW50IG5vbl9hc2NpaV91c2VkID0gMDsKK3N0YXRpYyBIQU5ETEUgaHRocmVhZCwgaHJlYWQsIGh3cml0ZTsKK3N0YXRpYyBIQU5ETEUgaGNvbnNvbGUxLCBoY29uc29sZTI7CisKKyNpZmRlZiBfX01JTkdXMzJfXwordHlwZWRlZiBzdHJ1Y3QgX0NPTlNPTEVfRk9OVF9JTkZPRVggeworCVVMT05HIGNiU2l6ZTsKKwlEV09SRCBuRm9udDsKKwlDT09SRCBkd0ZvbnRTaXplOworCVVJTlQgRm9udEZhbWlseTsKKwlVSU5UIEZvbnRXZWlnaHQ7CisJV0NIQVIgRmFjZU5hbWVbTEZfRkFDRVNJWkVdOworfSBDT05TT0xFX0ZPTlRfSU5GT0VYLCAqUENPTlNPTEVfRk9OVF9JTkZPRVg7CisjZW5kaWYKKwordHlwZWRlZiBCT09MIChXSU5BUEkgKlBHRVRDVVJSRU5UQ09OU09MRUZPTlRFWCkoSEFORExFLCBCT09MLAorCQlQQ09OU09MRV9GT05UX0lORk9FWCk7CisKK3N0YXRpYyB2b2lkIHdhcm5faWZfcmFzdGVyX2ZvbnQodm9pZCkKK3sKKwlEV09SRCBmb250RmFtaWx5ID0gMDsKKwlQR0VUQ1VSUkVOVENPTlNPTEVGT05URVggcEdldEN1cnJlbnRDb25zb2xlRm9udEV4OworCisJLyogZG9uJ3QgYm90aGVyIGlmIG91dHB1dCB3YXMgYXNjaWkgb25seSAqLworCWlmICghbm9uX2FzY2lpX3VzZWQpCisJCXJldHVybjsKKworCS8qIEdldEN1cnJlbnRDb25zb2xlRm9udEV4IGlzIGF2YWlsYWJsZSBzaW5jZSBWaXN0YSAqLworCXBHZXRDdXJyZW50Q29uc29sZUZvbnRFeCA9IChQR0VUQ1VSUkVOVENPTlNPTEVGT05URVgpIEdldFByb2NBZGRyZXNzKAorCQkJR2V0TW9kdWxlSGFuZGxlKCJrZXJuZWwzMi5kbGwiKSwKKwkJCSJHZXRDdXJyZW50Q29uc29sZUZvbnRFeCIpOworCWlmIChwR2V0Q3VycmVudENvbnNvbGVGb250RXgpIHsKKwkJQ09OU09MRV9GT05UX0lORk9FWCBjZmk7CisJCWNmaS5jYlNpemUgPSBzaXplb2YoY2ZpKTsKKwkJaWYgKHBHZXRDdXJyZW50Q29uc29sZUZvbnRFeChjb25zb2xlLCAwLCAmY2ZpKSkKKwkJCWZvbnRGYW1pbHkgPSBjZmkuRm9udEZhbWlseTsKKwl9IGVsc2UgeworCQkvKiBwcmUtVmlzdGE6IGNoZWNrIGRlZmF1bHQgY29uc29sZSBmb250IGluIHJlZ2lzdHJ5ICovCisJCUhLRVkgaGtleTsKKwkJaWYgKEVSUk9SX1NVQ0NFU1MgPT0gUmVnT3BlbktleUV4QShIS0VZX0NVUlJFTlRfVVNFUiwgIkNvbnNvbGUiLAorCQkJCTAsIEtFWV9SRUFELCAmaGtleSkpIHsKKwkJCURXT1JEIHNpemUgPSBzaXplb2YoZm9udEZhbWlseSk7CisJCQlSZWdRdWVyeVZhbHVlRXhBKGhrZXksICJGb250RmFtaWx5IiwgTlVMTCwgTlVMTCwKKwkJCQkJKExQVk9JRCkgJmZvbnRGYW1pbHksICZzaXplKTsKKwkJCVJlZ0Nsb3NlS2V5KGhrZXkpOworCQl9CisJfQorCisJaWYgKCEoZm9udEZhbWlseSAmIFRNUEZfVFJVRVRZUEUpKSB7CisJCWNvbnN0IHdjaGFyX3QgKm1zZyA9IEwiXG5XYXJuaW5nOiBZb3VyIGNvbnNvbGUgZm9udCBwcm9iYWJseSAiCisJCQlMImRvZXNuXCd0IHN1cHBvcnQgVW5pY29kZS4gSWYgeW91IGV4cGVyaWVuY2Ugc3RyYW5nZSAiCisJCQlMImNoYXJhY3RlcnMgaW4gdGhlIG91dHB1dCwgY29uc2lkZXIgc3dpdGNoaW5nIHRvIGEgIgorCQkJTCJUcnVlVHlwZSBmb250IHN1Y2ggYXMgQ29uc29sYXMhXG4iOworCQlEV09SRCBkdW1teTsKKwkJV3JpdGVDb25zb2xlVyhjb25zb2xlLCBtc2csIHdjc2xlbihtc2cpLCAmZHVtbXksIE5VTEwpOworCX0KK30KKworc3RhdGljIGludCBpc19jb25zb2xlKGludCBmZCkKK3sKKwlDT05TT0xFX1NDUkVFTl9CVUZGRVJfSU5GTyBzYmk7CisJSEFORExFIGhjb247CisKKwlzdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKKworCS8qIGdldCBPUyBoYW5kbGUgb2YgdGhlIGZpbGUgZGVzY3JpcHRvciAqLworCWhjb24gPSAoSEFORExFKSBfZ2V0X29zZmhhbmRsZShmZCk7CisJaWYgKGhjb24gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCXJldHVybiAwOworCisJLyogY2hlY2sgaWYgaXRzIGEgZGV2aWNlIChpLmUuIGNvbnNvbGUsIHByaW50ZXIsIHNlcmlhbCBwb3J0KSAqLworCWlmIChHZXRGaWxlVHlwZShoY29uKSAhPSBGSUxFX1RZUEVfQ0hBUikKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayBpZiBpdHMgYSBoYW5kbGUgdG8gYSBjb25zb2xlIG91dHB1dCBzY3JlZW4gYnVmZmVyICovCisJaWYgKCFHZXRDb25zb2xlU2NyZWVuQnVmZmVySW5mbyhoY29uLCAmc2JpKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBpbml0aWFsaXplIGF0dHJpYnV0ZXMgKi8KKwlpZiAoIWluaXRpYWxpemVkKSB7CisJCWNvbnNvbGUgPSBoY29uOworCQlhdHRyID0gcGxhaW5fYXR0ciA9IHNiaS53QXR0cmlidXRlczsKKwkJbmVnYXRpdmUgPSAwOworCQlpbml0aWFsaXplZCA9IDE7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgQlVGRkVSX1NJWkUgNDA5NgorI2RlZmluZSBNQVhfUEFSQU1TIDE2CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NvbnNvbGUodW5zaWduZWQgY2hhciAqc3RyLCBzaXplX3QgbGVuKQoreworCS8qIG9ubHkgY2FsbGVkIGZyb20gY29uc29sZV90aHJlYWQsIHNvIGEgc3RhdGljIGJ1ZmZlciB3aWxsIGRvICovCisJc3RhdGljIHdjaGFyX3Qgd2J1ZlsyICogQlVGRkVSX1NJWkUgKyAxXTsKKwlEV09SRCBkdW1teTsKKworCS8qIGNvbnZlcnQgdXRmLTggdG8gdXRmLTE2ICovCisJaW50IHdsZW4gPSB4dXRmdG93Y3NuKHdidWYsIChjaGFyKikgc3RyLCBBUlJBWV9TSVpFKHdidWYpLCBsZW4pOworCisJLyogd3JpdGUgZGlyZWN0bHkgdG8gY29uc29sZSAqLworCVdyaXRlQ29uc29sZVcoY29uc29sZSwgd2J1Ziwgd2xlbiwgJmR1bW15LCBOVUxMKTsKKworCS8qIHJlbWVtYmVyIGlmIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIGFyZSBwcmludGVkICovCisJaWYgKHdsZW4gIT0gbGVuKQorCQlub25fYXNjaWlfdXNlZCA9IDE7Cit9CisKKyNkZWZpbmUgRk9SRUdST1VORF9BTEwgKEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRSkKKyNkZWZpbmUgQkFDS0dST1VORF9BTEwgKEJBQ0tHUk9VTkRfUkVEIHwgQkFDS0dST1VORF9HUkVFTiB8IEJBQ0tHUk9VTkRfQkxVRSkKKworc3RhdGljIHZvaWQgc2V0X2NvbnNvbGVfYXR0cih2b2lkKQoreworCVdPUkQgYXR0cmlidXRlcyA9IGF0dHI7CisJaWYgKG5lZ2F0aXZlKSB7CisJCWF0dHJpYnV0ZXMgJj0gfkZPUkVHUk9VTkRfQUxMOworCQlhdHRyaWJ1dGVzICY9IH5CQUNLR1JPVU5EX0FMTDsKKworCQkvKiBUaGlzIGNvdWxkIHByb2JhYmx5IHVzZSBhIGJpdG1hc2sKKwkJICAgaW5zdGVhZCBvZiBhIHNlcmllcyBvZiBpZnMgKi8KKwkJaWYgKGF0dHIgJiBGT1JFR1JPVU5EX1JFRCkKKwkJCWF0dHJpYnV0ZXMgfD0gQkFDS0dST1VORF9SRUQ7CisJCWlmIChhdHRyICYgRk9SRUdST1VORF9HUkVFTikKKwkJCWF0dHJpYnV0ZXMgfD0gQkFDS0dST1VORF9HUkVFTjsKKwkJaWYgKGF0dHIgJiBGT1JFR1JPVU5EX0JMVUUpCisJCQlhdHRyaWJ1dGVzIHw9IEJBQ0tHUk9VTkRfQkxVRTsKKworCQlpZiAoYXR0ciAmIEJBQ0tHUk9VTkRfUkVEKQorCQkJYXR0cmlidXRlcyB8PSBGT1JFR1JPVU5EX1JFRDsKKwkJaWYgKGF0dHIgJiBCQUNLR1JPVU5EX0dSRUVOKQorCQkJYXR0cmlidXRlcyB8PSBGT1JFR1JPVU5EX0dSRUVOOworCQlpZiAoYXR0ciAmIEJBQ0tHUk9VTkRfQkxVRSkKKwkJCWF0dHJpYnV0ZXMgfD0gRk9SRUdST1VORF9CTFVFOworCX0KKwlTZXRDb25zb2xlVGV4dEF0dHJpYnV0ZShjb25zb2xlLCBhdHRyaWJ1dGVzKTsKK30KKworc3RhdGljIHZvaWQgZXJhc2VfaW5fbGluZSh2b2lkKQoreworCUNPTlNPTEVfU0NSRUVOX0JVRkZFUl9JTkZPIHNiaTsKKwlEV09SRCBkdW1teTsgLyogTmVlZGVkIGZvciBXaW5kb3dzIDcgKG9yIFZpc3RhKSByZWdyZXNzaW9uICovCisKKwlpZiAoIWNvbnNvbGUpCisJCXJldHVybjsKKworCUdldENvbnNvbGVTY3JlZW5CdWZmZXJJbmZvKGNvbnNvbGUsICZzYmkpOworCUZpbGxDb25zb2xlT3V0cHV0Q2hhcmFjdGVyQShjb25zb2xlLCAnICcsCisJCXNiaS5kd1NpemUuWCAtIHNiaS5kd0N1cnNvclBvc2l0aW9uLlgsIHNiaS5kd0N1cnNvclBvc2l0aW9uLAorCQkmZHVtbXkpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYXR0cihjaGFyIGZ1bmMsIGNvbnN0IGludCAqcGFyYW1zLCBpbnQgcGFyYW1sZW4pCit7CisJaW50IGk7CisJc3dpdGNoIChmdW5jKSB7CisJY2FzZSAnbSc6CisJCWZvciAoaSA9IDA7IGkgPCBwYXJhbWxlbjsgaSsrKSB7CisJCQlzd2l0Y2ggKHBhcmFtc1tpXSkgeworCQkJY2FzZSAwOiAvKiByZXNldCAqLworCQkJCWF0dHIgPSBwbGFpbl9hdHRyOworCQkJCW5lZ2F0aXZlID0gMDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTogLyogYm9sZCAqLworCQkJCWF0dHIgfD0gRk9SRUdST1VORF9JTlRFTlNJVFk7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6ICAvKiBmYWludCAqLworCQkJY2FzZSAyMjogLyogbm9ybWFsICovCisJCQkJYXR0ciAmPSB+Rk9SRUdST1VORF9JTlRFTlNJVFk7CisJCQkJYnJlYWs7CisJCQljYXNlIDM6ICAvKiBpdGFsaWMgKi8KKwkJCQkvKiBVbnN1cHBvcnRlZCAqLworCQkJCWJyZWFrOworCQkJY2FzZSA0OiAgLyogdW5kZXJsaW5lICovCisJCQljYXNlIDIxOiAvKiBkb3VibGUgdW5kZXJsaW5lICovCisJCQkJLyogV2lraXBlZGlhIHNheXMgdGhpcyBmbGFnIGRvZXMgbm90aGluZyAqLworCQkJCS8qIEZ1cnRoZXJtb3JlLCBtaW5ndyBkb2Vzbid0IGRlZmluZSB0aGlzIGZsYWcKKwkJCQlhdHRyIHw9IENPTU1PTl9MVkJfVU5ERVJTQ09SRTsgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMjQ6IC8qIG5vIHVuZGVybGluZSAqLworCQkJCS8qIGF0dHIgJj0gfkNPTU1PTl9MVkJfVU5ERVJTQ09SRTsgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgNTogIC8qIHNsb3cgYmxpbmsgKi8KKwkJCWNhc2UgNjogIC8qIGZhc3QgYmxpbmsgKi8KKwkJCQkvKiBXZSBkb24ndCBoYXZlIGJsaW5rLCBidXQgd2UgZG8gaGF2ZQorCQkJCSAgIGJhY2tncm91bmQgaW50ZW5zaXR5ICovCisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX0lOVEVOU0lUWTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjU6IC8qIG5vIGJsaW5rICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9JTlRFTlNJVFk7CisJCQkJYnJlYWs7CisJCQljYXNlIDc6ICAvKiBuZWdhdGl2ZSAqLworCQkJCW5lZ2F0aXZlID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjc6IC8qIHBvc2l0aXZlICovCisJCQkJbmVnYXRpdmUgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSA4OiAgLyogY29uY2VhbCAqLworCQkJY2FzZSAyODogLyogcmV2ZWFsICovCisJCQkJLyogVW5zdXBwb3J0ZWQgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgMzA6IC8qIEJsYWNrICovCisJCQkJYXR0ciAmPSB+Rk9SRUdST1VORF9BTEw7CisJCQkJYnJlYWs7CisJCQljYXNlIDMxOiAvKiBSZWQgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfUkVEOworCQkJCWJyZWFrOworCQkJY2FzZSAzMjogLyogR3JlZW4gKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfR1JFRU47CisJCQkJYnJlYWs7CisJCQljYXNlIDMzOiAvKiBZZWxsb3cgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9HUkVFTjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzQ6IC8qIEJsdWUgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzU6IC8qIE1hZ2VudGEgKi8KKwkJCQlhdHRyICY9IH5GT1JFR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEZPUkVHUk9VTkRfUkVEIHwgRk9SRUdST1VORF9CTFVFOworCQkJCWJyZWFrOworCQkJY2FzZSAzNjogLyogQ3lhbiAqLworCQkJCWF0dHIgJj0gfkZPUkVHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gRk9SRUdST1VORF9HUkVFTiB8IEZPUkVHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMzc6IC8qIFdoaXRlICovCisJCQkJYXR0ciB8PSBGT1JFR1JPVU5EX1JFRCB8CisJCQkJCUZPUkVHUk9VTkRfR1JFRU4gfAorCQkJCQlGT1JFR1JPVU5EX0JMVUU7CisJCQkJYnJlYWs7CisJCQljYXNlIDM4OiAvKiBVbmtub3duICovCisJCQkJYnJlYWs7CisJCQljYXNlIDM5OiAvKiByZXNldCAqLworCQkJCWF0dHIgJj0gfkZPUkVHUk9VTkRfQUxMOworCQkJCWF0dHIgfD0gKHBsYWluX2F0dHIgJiBGT1JFR1JPVU5EX0FMTCk7CisJCQkJYnJlYWs7CisJCQljYXNlIDQwOiAvKiBCbGFjayAqLworCQkJCWF0dHIgJj0gfkJBQ0tHUk9VTkRfQUxMOworCQkJCWJyZWFrOworCQkJY2FzZSA0MTogLyogUmVkICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX1JFRDsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDI6IC8qIEdyZWVuICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX0dSRUVOOworCQkJCWJyZWFrOworCQkJY2FzZSA0MzogLyogWWVsbG93ICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX1JFRCB8IEJBQ0tHUk9VTkRfR1JFRU47CisJCQkJYnJlYWs7CisJCQljYXNlIDQ0OiAvKiBCbHVlICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX0JMVUU7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ1OiAvKiBNYWdlbnRhICovCisJCQkJYXR0ciAmPSB+QkFDS0dST1VORF9BTEw7CisJCQkJYXR0ciB8PSBCQUNLR1JPVU5EX1JFRCB8IEJBQ0tHUk9VTkRfQkxVRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgNDY6IC8qIEN5YW4gKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IEJBQ0tHUk9VTkRfR1JFRU4gfCBCQUNLR1JPVU5EX0JMVUU7CisJCQkJYnJlYWs7CisJCQljYXNlIDQ3OiAvKiBXaGl0ZSAqLworCQkJCWF0dHIgfD0gQkFDS0dST1VORF9SRUQgfAorCQkJCQlCQUNLR1JPVU5EX0dSRUVOIHwKKwkJCQkJQkFDS0dST1VORF9CTFVFOworCQkJCWJyZWFrOworCQkJY2FzZSA0ODogLyogVW5rbm93biAqLworCQkJCWJyZWFrOworCQkJY2FzZSA0OTogLyogcmVzZXQgKi8KKwkJCQlhdHRyICY9IH5CQUNLR1JPVU5EX0FMTDsKKwkJCQlhdHRyIHw9IChwbGFpbl9hdHRyICYgQkFDS0dST1VORF9BTEwpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBVbnN1cHBvcnRlZCBjb2RlICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc2V0X2NvbnNvbGVfYXR0cigpOworCQlicmVhazsKKwljYXNlICdLJzoKKwkJZXJhc2VfaW5fbGluZSgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbnN1cHBvcnRlZCBjb2RlICovCisJCWJyZWFrOworCX0KK30KKworZW51bSB7CisJVEVYVCA9IDAsIEVTQ0FQRSA9IDAzMywgQlJBQ0tFVCA9ICdbJworfTsKKworc3RhdGljIERXT1JEIFdJTkFQSSBjb25zb2xlX3RocmVhZChMUFZPSUQgdW51c2VkKQoreworCXVuc2lnbmVkIGNoYXIgYnVmZmVyW0JVRkZFUl9TSVpFXTsKKwlEV09SRCBieXRlczsKKwlpbnQgc3RhcnQsIGVuZCA9IDAsIGMsIHBhcmFtcG9zID0gMCwgc3RhdGUgPSBURVhUOworCWludCBwYXJhbXNbTUFYX1BBUkFNU107CisKKwl3aGlsZSAoMSkgeworCQkvKiByZWFkIG5leHQgY2h1bmsgb2YgYnl0ZXMgZnJvbSB0aGUgcGlwZSAqLworCQlpZiAoIVJlYWRGaWxlKGhyZWFkLCBidWZmZXIgKyBlbmQsIEJVRkZFUl9TSVpFIC0gZW5kLCAmYnl0ZXMsCisJCQkJTlVMTCkpIHsKKwkJCS8qIGV4aXQgaWYgcGlwZSBoYXMgYmVlbiBjbG9zZWQgb3IgZGlzY29ubmVjdGVkICovCisJCQlpZiAoR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfUElQRV9OT1RfQ09OTkVDVEVEIHx8CisJCQkJCUdldExhc3RFcnJvcigpID09IEVSUk9SX0JST0tFTl9QSVBFKQorCQkJCWJyZWFrOworCQkJLyogaWdub3JlIG90aGVyIGVycm9ycyAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBzY2FuIHRoZSBieXRlcyBhbmQgaGFuZGxlIEFOU0kgY29udHJvbCBjb2RlcyAqLworCQlieXRlcyArPSBlbmQ7CisJCXN0YXJ0ID0gZW5kID0gMDsKKwkJd2hpbGUgKGVuZCA8IGJ5dGVzKSB7CisJCQljID0gYnVmZmVyW2VuZCsrXTsKKwkJCXN3aXRjaCAoc3RhdGUpIHsKKwkJCWNhc2UgVEVYVDoKKwkJCQlpZiAoYyA9PSBFU0NBUEUpIHsKKwkJCQkJLyogcHJpbnQgdGV4dCBzZWVuIHNvIGZhciAqLworCQkJCQlpZiAoZW5kIC0gMSA+IHN0YXJ0KQorCQkJCQkJd3JpdGVfY29uc29sZShidWZmZXIgKyBzdGFydCwKKwkJCQkJCQllbmQgLSAxIC0gc3RhcnQpOworCisJCQkJCS8qIHRoZW4gc3RhcnQgcGFyc2luZyBlc2NhcGUgc2VxdWVuY2UgKi8KKwkJCQkJc3RhcnQgPSBlbmQgLSAxOworCQkJCQltZW1zZXQocGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CisJCQkJCXBhcmFtcG9zID0gMDsKKwkJCQkJc3RhdGUgPSBFU0NBUEU7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEVTQ0FQRToKKwkJCQkvKiBjb250aW51ZSBpZiAiXDAzM1siLCBvdGhlcndpc2UgYmFpbCBvdXQgKi8KKwkJCQlzdGF0ZSA9IChjID09IEJSQUNLRVQpID8gQlJBQ0tFVCA6IFRFWFQ7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQlJBQ0tFVDoKKwkJCQkvKiBwYXJzZSBbMC05O10qIGludG8gYXJyYXkgb2YgcGFyYW1ldGVycyAqLworCQkJCWlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgeworCQkJCQlwYXJhbXNbcGFyYW1wb3NdICo9IDEwOworCQkJCQlwYXJhbXNbcGFyYW1wb3NdICs9IGMgLSAnMCc7CisJCQkJfSBlbHNlIGlmIChjID09ICc7JykgeworCQkJCQkvKgorCQkJCQkgKiBuZXh0IHBhcmFtZXRlciwgYmFpbCBvdXQgaWYgb3V0IG9mCisJCQkJCSAqIGJvdW5kcworCQkJCQkgKi8KKwkJCQkJcGFyYW1wb3MrKzsKKwkJCQkJaWYgKHBhcmFtcG9zID49IE1BWF9QQVJBTVMpCisJCQkJCQlzdGF0ZSA9IFRFWFQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogZW5kIG9mIGVzY2FwZSBzZXF1ZW5jZSwgY2hhbmdlCisJCQkJCSAqIGNvbnNvbGUgYXR0cmlidXRlcworCQkJCQkgKi8KKwkJCQkJc2V0X2F0dHIoYywgcGFyYW1zLCBwYXJhbXBvcyArIDEpOworCQkJCQlzdGFydCA9IGVuZDsKKwkJCQkJc3RhdGUgPSBURVhUOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCS8qIHByaW50IHJlbWFpbmluZyB0ZXh0IHVubGVzcyBwYXJzaW5nIGFuIGVzY2FwZSBzZXF1ZW5jZSAqLworCQlpZiAoc3RhdGUgPT0gVEVYVCAmJiBlbmQgPiBzdGFydCkgeworCQkJLyogY2hlY2sgZm9yIGluY29tcGxldGUgVVRGLTggc2VxdWVuY2VzIGFuZCBmaXggZW5kICovCisJCQlpZiAoYnVmZmVyW2VuZCAtIDFdID49IDB4ODApIHsKKwkJCQlpZiAoYnVmZmVyW2VuZCAtMV0gPj0gMHhjMCkKKwkJCQkJZW5kLS07CisJCQkJZWxzZSBpZiAoZW5kIC0gMSA+IHN0YXJ0ICYmCisJCQkJCQlidWZmZXJbZW5kIC0gMl0gPj0gMHhlMCkKKwkJCQkJZW5kIC09IDI7CisJCQkJZWxzZSBpZiAoZW5kIC0gMiA+IHN0YXJ0ICYmCisJCQkJCQlidWZmZXJbZW5kIC0gM10gPj0gMHhmMCkKKwkJCQkJZW5kIC09IDM7CisJCQl9CisKKwkJCS8qIHByaW50IHJlbWFpbmluZyBjb21wbGV0ZSBVVEYtOCBzZXF1ZW5jZXMgKi8KKwkJCWlmIChlbmQgPiBzdGFydCkKKwkJCQl3cml0ZV9jb25zb2xlKGJ1ZmZlciArIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisKKwkJCS8qIG1vdmUgcmVtYWluaW5nIGJ5dGVzIHRvIHRoZSBmcm9udCAqLworCQkJaWYgKGVuZCA8IGJ5dGVzKQorCQkJCW1lbW1vdmUoYnVmZmVyLCBidWZmZXIgKyBlbmQsIGJ5dGVzIC0gZW5kKTsKKwkJCWVuZCA9IGJ5dGVzIC0gZW5kOworCQl9IGVsc2UgeworCQkJLyogYWxsIGRhdGEgaGFzIGJlZW4gY29uc3VtZWQsIG1hcmsgYnVmZmVyIGVtcHR5ICovCisJCQllbmQgPSAwOworCQl9CisJfQorCisJLyogY2hlY2sgaWYgdGhlIGNvbnNvbGUgZm9udCBzdXBwb3J0cyB1bmljb2RlICovCisJd2Fybl9pZl9yYXN0ZXJfZm9udCgpOworCisJQ2xvc2VIYW5kbGUoaHJlYWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB3aW5hbnNpX2V4aXQodm9pZCkKK3sKKwkvKiBmbHVzaCBhbGwgc3RyZWFtcyAqLworCV9mbHVzaGFsbCgpOworCisJLyogc2lnbmFsIGNvbnNvbGUgdGhyZWFkIHRvIGV4aXQgKi8KKwlGbHVzaEZpbGVCdWZmZXJzKGh3cml0ZSk7CisJRGlzY29ubmVjdE5hbWVkUGlwZShod3JpdGUpOworCisJLyogd2FpdCBmb3IgY29uc29sZSB0aHJlYWQgdG8gY29weSByZW1haW5pbmcgZGF0YSAqLworCVdhaXRGb3JTaW5nbGVPYmplY3QoaHRocmVhZCwgSU5GSU5JVEUpOworCisJLyogY2xlYW51cCBoYW5kbGVzLi4uICovCisJQ2xvc2VIYW5kbGUoaHdyaXRlKTsKKwlDbG9zZUhhbmRsZShodGhyZWFkKTsKK30KKworc3RhdGljIHZvaWQgZGllX2xhc3RlcnIoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOworCWVycm5vID0gZXJyX3dpbl90b19wb3NpeChHZXRMYXN0RXJyb3IoKSk7CisJZGllX2Vycm5vKGZtdCwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKworc3RhdGljIEhBTkRMRSBkdXBsaWNhdGVfaGFuZGxlKEhBTkRMRSBobmQpCit7CisJSEFORExFIGhyZXN1bHQsIGhwcm9jID0gR2V0Q3VycmVudFByb2Nlc3MoKTsKKwlpZiAoIUR1cGxpY2F0ZUhhbmRsZShocHJvYywgaG5kLCBocHJvYywgJmhyZXN1bHQsIDAsIFRSVUUsCisJCQlEVVBMSUNBVEVfU0FNRV9BQ0NFU1MpKQorCQlkaWVfbGFzdGVycigiRHVwbGljYXRlSGFuZGxlKCVsaSkgZmFpbGVkIiwgKGxvbmcpIGhuZCk7CisJcmV0dXJuIGhyZXN1bHQ7Cit9CisKKworLyoKKyAqIE1ha2UgTVNWQ1JUJ3MgaW50ZXJuYWwgZmlsZSBkZXNjcmlwdG9yIGNvbnRyb2wgc3RydWN0dXJlIGFjY2Vzc2libGUKKyAqIHNvIHRoYXQgd2UgY2FuIHR3ZWFrIE9TIGhhbmRsZXMgYW5kIGZsYWdzIGRpcmVjdGx5ICh3ZSBuZWVkIE1TVkNSVAorICogdG8gdHJlYXQgb3VyIHBpcGUgaGFuZGxlIGFzIGlmIGl0IHdlcmUgYSBjb25zb2xlKS4KKyAqCisgKiBXZSBhc3N1bWUgdGhhdCB0aGUgaW9pbmZvIHN0cnVjdHVyZSAoZXhwb3NlZCBieSBNU1ZDUlQuZGxsIHZpYQorICogX19waW9pbmZvKSBzdGFydHMgd2l0aCB0aGUgT1MgaGFuZGxlIGFuZCB0aGUgZmxhZ3MuIFRoZSBleGFjdCBzaXplCisgKiB2YXJpZXMgYmV0d2VlbiBNU1ZDUlQgdmVyc2lvbnMsIHNvIHdlIHRyeSBkaWZmZXJlbnQgc2l6ZXMgdW50aWwKKyAqIHRvZ2dsaW5nIHRoZSBGREVWIGJpdCBvZiBfcGlvaW5mbygxKS0+b3NmbGFncyBpcyByZWZsZWN0ZWQgaW4KKyAqIGlzYXR0eSgxKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUhBTkRMRSBvc2ZobmQ7CisJY2hhciBvc2ZsYWdzOworfSBpb2luZm87CisKK2V4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkgaW9pbmZvICpfX3Bpb2luZm9bXTsKKworc3RhdGljIHNpemVfdCBzaXplb2ZfaW9pbmZvID0gMDsKKworI2RlZmluZSBJT0lORk9fTDJFIDUKKyNkZWZpbmUgSU9JTkZPX0FSUkFZX0VMVFMgKDEgPDwgSU9JTkZPX0wyRSkKKworI2RlZmluZSBGREVWICAweDQwCisKK3N0YXRpYyBpbmxpbmUgaW9pbmZvKiBfcGlvaW5mbyhpbnQgZmQpCit7CisJcmV0dXJuIChpb2luZm8qKSgoY2hhciopX19waW9pbmZvW2ZkID4+IElPSU5GT19MMkVdICsKKwkJCShmZCAmIChJT0lORk9fQVJSQVlfRUxUUyAtIDEpKSAqIHNpemVvZl9pb2luZm8pOworfQorCitzdGF0aWMgaW50IGluaXRfc2l6ZW9mX2lvaW5mbygpCit7CisJaW50IGlzdHR5LCB3YXN0dHk7CisJLyogZG9uJ3QgaW5pdCB0d2ljZSAqLworCWlmIChzaXplb2ZfaW9pbmZvKQorCQlyZXR1cm4gc2l6ZW9mX2lvaW5mbyA+PSAyNTY7CisKKwlzaXplb2ZfaW9pbmZvID0gc2l6ZW9mKGlvaW5mbyk7CisJd2FzdHR5ID0gaXNhdHR5KDEpOworCXdoaWxlIChzaXplb2ZfaW9pbmZvIDwgMjU2KSB7CisJCS8qIHRvZ2dsZSBGREVWIGZsYWcsIGNoZWNrIGlzYXR0eSwgdGhlbiB0b2dnbGUgYmFjayAqLworCQlfcGlvaW5mbygxKS0+b3NmbGFncyBePSBGREVWOworCQlpc3R0eSA9IGlzYXR0eSgxKTsKKwkJX3Bpb2luZm8oMSktPm9zZmxhZ3MgXj0gRkRFVjsKKwkJLyogcmV0dXJuIGlmIHdlIGZvdW5kIHRoZSBjb3JyZWN0IHNpemUgKi8KKwkJaWYgKGlzdHR5ICE9IHdhc3R0eSkKKwkJCXJldHVybiAwOworCQlzaXplb2ZfaW9pbmZvICs9IHNpemVvZih2b2lkKik7CisJfQorCWVycm9yKCJUd2Vha2luZyBmaWxlIGRlc2NyaXB0b3JzIGRvZXNuJ3Qgd29yayB3aXRoIHRoaXMgTVNWQ1JULmRsbCIpOworCXJldHVybiAxOworfQorCitzdGF0aWMgSEFORExFIHN3YXBfb3NmaG5kKGludCBmZCwgSEFORExFIG5ld19oYW5kbGUpCit7CisJaW9pbmZvICpwaW9pbmZvOworCUhBTkRMRSBvbGRfaGFuZGxlOworCisJLyogaW5pdCBpb2luZm8gc2l6ZSBpZiB3ZSBoYXZlbid0IGRvbmUgc28gKi8KKwlpZiAoaW5pdF9zaXplb2ZfaW9pbmZvKCkpCisJCXJldHVybiBJTlZBTElEX0hBTkRMRV9WQUxVRTsKKworCS8qIGdldCBpb2luZm8gcG9pbnRlciBhbmQgY2hhbmdlIHRoZSBoYW5kbGVzICovCisJcGlvaW5mbyA9IF9waW9pbmZvKGZkKTsKKwlvbGRfaGFuZGxlID0gcGlvaW5mby0+b3NmaG5kOworCXBpb2luZm8tPm9zZmhuZCA9IG5ld19oYW5kbGU7CisJcmV0dXJuIG9sZF9oYW5kbGU7Cit9CisKK3ZvaWQgd2luYW5zaV9pbml0KHZvaWQpCit7CisJaW50IGNvbjEsIGNvbjI7CisJY2hhciBuYW1lWzMyXTsKKworCS8qIGNoZWNrIGlmIGVpdGhlciBzdGRvdXQgb3Igc3RkZXJyIGlzIGEgY29uc29sZSBvdXRwdXQgc2NyZWVuIGJ1ZmZlciAqLworCWNvbjEgPSBpc19jb25zb2xlKDEpOworCWNvbjIgPSBpc19jb25zb2xlKDIpOworCWlmICghY29uMSAmJiAhY29uMikKKwkJcmV0dXJuOworCisJLyogY3JlYXRlIGEgbmFtZWQgcGlwZSB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBjb25zb2xlIHRocmVhZCAqLworCXhzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJcXFxcLlxccGlwZVxcd2luYW5zaSVsdSIsIEdldEN1cnJlbnRQcm9jZXNzSWQoKSk7CisJaHdyaXRlID0gQ3JlYXRlTmFtZWRQaXBlKG5hbWUsIFBJUEVfQUNDRVNTX09VVEJPVU5ELAorCQlQSVBFX1RZUEVfQllURSB8IFBJUEVfV0FJVCwgMSwgQlVGRkVSX1NJWkUsIDAsIDAsIE5VTEwpOworCWlmIChod3JpdGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCWRpZV9sYXN0ZXJyKCJDcmVhdGVOYW1lZFBpcGUgZmFpbGVkIik7CisKKwlocmVhZCA9IENyZWF0ZUZpbGUobmFtZSwgR0VORVJJQ19SRUFELCAwLCBOVUxMLCBPUEVOX0VYSVNUSU5HLCAwLCBOVUxMKTsKKwlpZiAoaHJlYWQgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisJCWRpZV9sYXN0ZXJyKCJDcmVhdGVGaWxlIGZvciBuYW1lZCBwaXBlIGZhaWxlZCIpOworCisJLyogc3RhcnQgY29uc29sZSBzcG9vbCB0aHJlYWQgb24gdGhlIHBpcGUncyByZWFkIGVuZCAqLworCWh0aHJlYWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgY29uc29sZV90aHJlYWQsIE5VTEwsIDAsIE5VTEwpOworCWlmIChodGhyZWFkID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorCQlkaWVfbGFzdGVycigiQ3JlYXRlVGhyZWFkKGNvbnNvbGVfdGhyZWFkKSBmYWlsZWQiKTsKKworCS8qIHNjaGVkdWxlIGNsZWFudXAgcm91dGluZSAqLworCWlmIChhdGV4aXQod2luYW5zaV9leGl0KSkKKwkJZGllX2Vycm5vKCJhdGV4aXQod2luYW5zaV9leGl0KSBmYWlsZWQiKTsKKworCS8qIHJlZGlyZWN0IHN0ZG91dCAvIHN0ZGVyciB0byB0aGUgcGlwZSAqLworCWlmIChjb24xKQorCQloY29uc29sZTEgPSBzd2FwX29zZmhuZCgxLCBkdXBsaWNhdGVfaGFuZGxlKGh3cml0ZSkpOworCWlmIChjb24yKQorCQloY29uc29sZTIgPSBzd2FwX29zZmhuZCgyLCBkdXBsaWNhdGVfaGFuZGxlKGh3cml0ZSkpOworfQorCisvKgorICogUmV0dXJucyB0aGUgcmVhbCBjb25zb2xlIGhhbmRsZSBpZiBzdGRvdXQgLyBzdGRlcnIgaXMgYSBwaXBlIHJlZGlyZWN0aW5nCisgKiB0byB0aGUgY29uc29sZS4gQWxsb3dzIHNwYXduIC8gZXhlYyB0byBwYXNzIHRoZSBjb25zb2xlIHRvIHRoZSBuZXh0IHByb2Nlc3MuCisgKi8KK0hBTkRMRSB3aW5hbnNpX2dldF9vc2ZoYW5kbGUoaW50IGZkKQoreworCUhBTkRMRSBobmQgPSAoSEFORExFKSBfZ2V0X29zZmhhbmRsZShmZCk7CisJaWYgKChmZCA9PSAxIHx8IGZkID09IDIpICYmIGlzYXR0eShmZCkKKwkgICAgJiYgR2V0RmlsZVR5cGUoaG5kKSA9PSBGSUxFX1RZUEVfUElQRSkKKwkJcmV0dXJuIChmZCA9PSAxKSA/IGhjb25zb2xlMSA6IGhjb25zb2xlMjsKKwlyZXR1cm4gaG5kOworfQpkaWZmIC0tZ2l0IGEvY29uZmlnLmMgYi9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDhhMjFhCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnLmMKQEAgLTAsMCArMSwyMzg1IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICogQ29weXJpZ2h0IChDKSBKb2hhbm5lcyBTY2hpbmRlbGluLCAyMDA1CisgKgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKK3N0cnVjdCBjb25maWdfc291cmNlIHsKKwlzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqcHJldjsKKwl1bmlvbiB7CisJCUZJTEUgKmZpbGU7CisJCXN0cnVjdCBjb25maWdfYnVmIHsKKwkJCWNvbnN0IGNoYXIgKmJ1ZjsKKwkJCXNpemVfdCBsZW47CisJCQlzaXplX3QgcG9zOworCQl9IGJ1ZjsKKwl9IHU7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpwYXRoOworCWludCBkaWVfb25fZXJyb3I7CisJaW50IGxpbmVucjsKKwlpbnQgZW9mOworCXN0cnVjdCBzdHJidWYgdmFsdWU7CisJc3RydWN0IHN0cmJ1ZiB2YXI7CisKKwlpbnQgKCpkb19mZ2V0Yykoc3RydWN0IGNvbmZpZ19zb3VyY2UgKmMpOworCWludCAoKmRvX3VuZ2V0YykoaW50IGMsIHN0cnVjdCBjb25maWdfc291cmNlICpjb25mKTsKKwlsb25nICgqZG9fZnRlbGwpKHN0cnVjdCBjb25maWdfc291cmNlICpjKTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqY2Y7CisKK3N0YXRpYyBpbnQgemxpYl9jb21wcmVzc2lvbl9zZWVuOworCisvKgorICogRGVmYXVsdCBjb25maWdfc2V0IHRoYXQgY29udGFpbnMga2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIHVzdWFsIHNldCBvZiBjb25maWcKKyAqIGNvbmZpZyBmaWxlcyAoaS5lIHJlcG8gc3BlY2lmaWMgLmdpdC9jb25maWcsIHVzZXIgd2lkZSB+Ly5naXRjb25maWcsIFhERworICogY29uZmlnIGZpbGUgYW5kIHRoZSBnbG9iYWwgL2V0Yy9naXRjb25maWcpCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY29uZmlnX3NldCB0aGVfY29uZmlnX3NldDsKKworc3RhdGljIGludCBjb25maWdfZmlsZV9mZ2V0YyhzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqY29uZikKK3sKKwlyZXR1cm4gZ2V0Y191bmxvY2tlZChjb25mLT51LmZpbGUpOworfQorCitzdGF0aWMgaW50IGNvbmZpZ19maWxlX3VuZ2V0YyhpbnQgYywgc3RydWN0IGNvbmZpZ19zb3VyY2UgKmNvbmYpCit7CisJcmV0dXJuIHVuZ2V0YyhjLCBjb25mLT51LmZpbGUpOworfQorCitzdGF0aWMgbG9uZyBjb25maWdfZmlsZV9mdGVsbChzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqY29uZikKK3sKKwlyZXR1cm4gZnRlbGwoY29uZi0+dS5maWxlKTsKK30KKworCitzdGF0aWMgaW50IGNvbmZpZ19idWZfZmdldGMoc3RydWN0IGNvbmZpZ19zb3VyY2UgKmNvbmYpCit7CisJaWYgKGNvbmYtPnUuYnVmLnBvcyA8IGNvbmYtPnUuYnVmLmxlbikKKwkJcmV0dXJuIGNvbmYtPnUuYnVmLmJ1Zltjb25mLT51LmJ1Zi5wb3MrK107CisKKwlyZXR1cm4gRU9GOworfQorCitzdGF0aWMgaW50IGNvbmZpZ19idWZfdW5nZXRjKGludCBjLCBzdHJ1Y3QgY29uZmlnX3NvdXJjZSAqY29uZikKK3sKKwlpZiAoY29uZi0+dS5idWYucG9zID4gMCkgeworCQljb25mLT51LmJ1Zi5wb3MtLTsKKwkJaWYgKGNvbmYtPnUuYnVmLmJ1Zltjb25mLT51LmJ1Zi5wb3NdICE9IGMpCisJCQlkaWUoIkJVRzogY29uZmlnX2J1ZiBjYW4gb25seSB1bmdldGMgdGhlIHNhbWUgY2hhcmFjdGVyIik7CisJCXJldHVybiBjOworCX0KKworCXJldHVybiBFT0Y7Cit9CisKK3N0YXRpYyBsb25nIGNvbmZpZ19idWZfZnRlbGwoc3RydWN0IGNvbmZpZ19zb3VyY2UgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPnUuYnVmLnBvczsKK30KKworI2RlZmluZSBNQVhfSU5DTFVERV9ERVBUSCAxMAorc3RhdGljIGNvbnN0IGNoYXIgaW5jbHVkZV9kZXB0aF9hZHZpY2VbXSA9CisiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoICglZCkgd2hpbGUgaW5jbHVkaW5nXG4iCisiCSVzXG4iCisiZnJvbVxuIgorIgklc1xuIgorIkRvIHlvdSBoYXZlIGNpcmN1bGFyIGluY2x1ZGVzPyI7CitzdGF0aWMgaW50IGhhbmRsZV9wYXRoX2luY2x1ZGUoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGEgKmluYykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNoYXIgKmV4cGFuZGVkOworCisJaWYgKCFwYXRoKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2woImluY2x1ZGUucGF0aCIpOworCisJZXhwYW5kZWQgPSBleHBhbmRfdXNlcl9wYXRoKHBhdGgpOworCWlmICghZXhwYW5kZWQpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IGV4cGFuZCBpbmNsdWRlIHBhdGggJyVzJyIsIHBhdGgpOworCXBhdGggPSBleHBhbmRlZDsKKworCS8qCisJICogVXNlIGFuIGFic29sdXRlIHBhdGggYXMtaXMsIGJ1dCBpbnRlcnByZXQgcmVsYXRpdmUgcGF0aHMKKwkgKiBiYXNlZCBvbiB0aGUgaW5jbHVkaW5nIGNvbmZpZyBmaWxlLgorCSAqLworCWlmICghaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkgeworCQljaGFyICpzbGFzaDsKKworCQlpZiAoIWNmIHx8ICFjZi0+cGF0aCkKKwkJCXJldHVybiBlcnJvcigicmVsYXRpdmUgY29uZmlnIGluY2x1ZGVzIG11c3QgY29tZSBmcm9tIGZpbGVzIik7CisKKwkJc2xhc2ggPSBmaW5kX2xhc3RfZGlyX3NlcChjZi0+cGF0aCk7CisJCWlmIChzbGFzaCkKKwkJCXN0cmJ1Zl9hZGQoJmJ1ZiwgY2YtPnBhdGgsIHNsYXNoIC0gY2YtPnBhdGggKyAxKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBwYXRoKTsKKwkJcGF0aCA9IGJ1Zi5idWY7CisJfQorCisJaWYgKCFhY2Nlc3Nfb3JfZGllKHBhdGgsIFJfT0ssIDApKSB7CisJCWlmICgrK2luYy0+ZGVwdGggPiBNQVhfSU5DTFVERV9ERVBUSCkKKwkJCWRpZShpbmNsdWRlX2RlcHRoX2FkdmljZSwgTUFYX0lOQ0xVREVfREVQVEgsIHBhdGgsCisJCQkgICAgY2YgJiYgY2YtPm5hbWUgPyBjZi0+bmFtZSA6ICJ0aGUgY29tbWFuZCBsaW5lIik7CisJCXJldCA9IGdpdF9jb25maWdfZnJvbV9maWxlKGdpdF9jb25maWdfaW5jbHVkZSwgcGF0aCwgaW5jKTsKKwkJaW5jLT5kZXB0aC0tOworCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlmcmVlKGV4cGFuZGVkKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZ2l0X2NvbmZpZ19pbmNsdWRlKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGEgKmluYyA9IGRhdGE7CisJaW50IHJldDsKKworCS8qCisJICogUGFzcyBhbG9uZyBhbGwgdmFsdWVzLCBpbmNsdWRpbmcgImluY2x1ZGUiIGRpcmVjdGl2ZXM7IHRoaXMgbWFrZXMgaXQKKwkgKiBwb3NzaWJsZSB0byBxdWVyeSBpbmZvcm1hdGlvbiBvbiB0aGUgaW5jbHVkZXMgdGhlbXNlbHZlcy4KKwkgKi8KKwlyZXQgPSBpbmMtPmZuKHZhciwgdmFsdWUsIGluYy0+ZGF0YSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJpbmNsdWRlLnBhdGgiKSkKKwkJcmV0ID0gaGFuZGxlX3BhdGhfaW5jbHVkZSh2YWx1ZSwgaW5jKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGdpdF9jb25maWdfcHVzaF9wYXJhbWV0ZXIoY29uc3QgY2hhciAqdGV4dCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVudiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKm9sZCA9IGdldGVudihDT05GSUdfREFUQV9FTlZJUk9OTUVOVCk7CisJaWYgKG9sZCkgeworCQlzdHJidWZfYWRkc3RyKCZlbnYsIG9sZCk7CisJCXN0cmJ1Zl9hZGRjaCgmZW52LCAnICcpOworCX0KKwlzcV9xdW90ZV9idWYoJmVudiwgdGV4dCk7CisJc2V0ZW52KENPTkZJR19EQVRBX0VOVklST05NRU5ULCBlbnYuYnVmLCAxKTsKKwlzdHJidWZfcmVsZWFzZSgmZW52KTsKK30KKworaW50IGdpdF9jb25maWdfcGFyc2VfcGFyYW1ldGVyKGNvbnN0IGNoYXIgKnRleHQsCisJCQkgICAgICAgY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisJc3RydWN0IHN0cmJ1ZiAqKnBhaXI7CisKKwlwYWlyID0gc3RyYnVmX3NwbGl0X3N0cih0ZXh0LCAnPScsIDIpOworCWlmICghcGFpclswXSkKKwkJcmV0dXJuIGVycm9yKCJib2d1cyBjb25maWcgcGFyYW1ldGVyOiAlcyIsIHRleHQpOworCisJaWYgKHBhaXJbMF0tPmxlbiAmJiBwYWlyWzBdLT5idWZbcGFpclswXS0+bGVuIC0gMV0gPT0gJz0nKSB7CisJCXN0cmJ1Zl9zZXRsZW4ocGFpclswXSwgcGFpclswXS0+bGVuIC0gMSk7CisJCXZhbHVlID0gcGFpclsxXSA/IHBhaXJbMV0tPmJ1ZiA6ICIiOworCX0gZWxzZSB7CisJCXZhbHVlID0gTlVMTDsKKwl9CisKKwlzdHJidWZfdHJpbShwYWlyWzBdKTsKKwlpZiAoIXBhaXJbMF0tPmxlbikgeworCQlzdHJidWZfbGlzdF9mcmVlKHBhaXIpOworCQlyZXR1cm4gZXJyb3IoImJvZ3VzIGNvbmZpZyBwYXJhbWV0ZXI6ICVzIiwgdGV4dCk7CisJfQorCXN0cmJ1Zl90b2xvd2VyKHBhaXJbMF0pOworCWlmIChmbihwYWlyWzBdLT5idWYsIHZhbHVlLCBkYXRhKSA8IDApIHsKKwkJc3RyYnVmX2xpc3RfZnJlZShwYWlyKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfbGlzdF9mcmVlKHBhaXIpOworCXJldHVybiAwOworfQorCitpbnQgZ2l0X2NvbmZpZ19mcm9tX3BhcmFtZXRlcnMoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCit7CisJY29uc3QgY2hhciAqZW52ID0gZ2V0ZW52KENPTkZJR19EQVRBX0VOVklST05NRU5UKTsKKwljaGFyICplbnZ3OworCWNvbnN0IGNoYXIgKiphcmd2ID0gTlVMTDsKKwlpbnQgbnIgPSAwLCBhbGxvYyA9IDA7CisJaW50IGk7CisKKwlpZiAoIWVudikKKwkJcmV0dXJuIDA7CisJLyogc3FfZGVxdW90ZSB3aWxsIHdyaXRlIG92ZXIgaXQgKi8KKwllbnZ3ID0geHN0cmR1cChlbnYpOworCisJaWYgKHNxX2RlcXVvdGVfdG9fYXJndihlbnZ3LCAmYXJndiwgJm5yLCAmYWxsb2MpIDwgMCkgeworCQlmcmVlKGVudncpOworCQlyZXR1cm4gZXJyb3IoImJvZ3VzIGZvcm1hdCBpbiAiIENPTkZJR19EQVRBX0VOVklST05NRU5UKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlpZiAoZ2l0X2NvbmZpZ19wYXJzZV9wYXJhbWV0ZXIoYXJndltpXSwgZm4sIGRhdGEpIDwgMCkgeworCQkJZnJlZShhcmd2KTsKKwkJCWZyZWUoZW52dyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlmcmVlKGFyZ3YpOworCWZyZWUoZW52dyk7CisJcmV0dXJuIG5yID4gMDsKK30KKworc3RhdGljIGludCBnZXRfbmV4dF9jaGFyKHZvaWQpCit7CisJaW50IGMgPSBjZi0+ZG9fZmdldGMoY2YpOworCisJaWYgKGMgPT0gJ1xyJykgeworCQkvKiBET1MgbGlrZSBzeXN0ZW1zICovCisJCWMgPSBjZi0+ZG9fZmdldGMoY2YpOworCQlpZiAoYyAhPSAnXG4nKSB7CisJCQlpZiAoYyAhPSBFT0YpCisJCQkJY2YtPmRvX3VuZ2V0YyhjLCBjZik7CisJCQljID0gJ1xyJzsKKwkJfQorCX0KKwlpZiAoYyA9PSAnXG4nKQorCQljZi0+bGluZW5yKys7CisJaWYgKGMgPT0gRU9GKSB7CisJCWNmLT5lb2YgPSAxOworCQljZi0+bGluZW5yKys7CisJCWMgPSAnXG4nOworCX0KKwlyZXR1cm4gYzsKK30KKworc3RhdGljIGNoYXIgKnBhcnNlX3ZhbHVlKHZvaWQpCit7CisJaW50IHF1b3RlID0gMCwgY29tbWVudCA9IDAsIHNwYWNlID0gMDsKKworCXN0cmJ1Zl9yZXNldCgmY2YtPnZhbHVlKTsKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0X25leHRfY2hhcigpOworCQlpZiAoYyA9PSAnXG4nKSB7CisJCQlpZiAocXVvdGUpIHsKKwkJCQljZi0+bGluZW5yLS07CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlyZXR1cm4gY2YtPnZhbHVlLmJ1ZjsKKwkJfQorCQlpZiAoY29tbWVudCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNzcGFjZShjKSAmJiAhcXVvdGUpIHsKKwkJCWlmIChjZi0+dmFsdWUubGVuKQorCQkJCXNwYWNlKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXF1b3RlKSB7CisJCQlpZiAoYyA9PSAnOycgfHwgYyA9PSAnIycpIHsKKwkJCQljb21tZW50ID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlmb3IgKDsgc3BhY2U7IHNwYWNlLS0pCisJCQlzdHJidWZfYWRkY2goJmNmLT52YWx1ZSwgJyAnKTsKKwkJaWYgKGMgPT0gJ1xcJykgeworCQkJYyA9IGdldF9uZXh0X2NoYXIoKTsKKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAnXG4nOgorCQkJCWNvbnRpbnVlOworCQkJY2FzZSAndCc6CisJCQkJYyA9ICdcdCc7CisJCQkJYnJlYWs7CisJCQljYXNlICdiJzoKKwkJCQljID0gJ1xiJzsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCWMgPSAnXG4nOworCQkJCWJyZWFrOworCQkJLyogU29tZSBjaGFyYWN0ZXJzIGVzY2FwZSBhcyB0aGVtc2VsdmVzICovCisJCQljYXNlICdcXCc6IGNhc2UgJyInOgorCQkJCWJyZWFrOworCQkJLyogUmVqZWN0IHVua25vd24gZXNjYXBlIHNlcXVlbmNlcyAqLworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCXN0cmJ1Zl9hZGRjaCgmY2YtPnZhbHVlLCBjKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09ICciJykgeworCQkJcXVvdGUgPSAxLXF1b3RlOworCQkJY29udGludWU7CisJCX0KKwkJc3RyYnVmX2FkZGNoKCZjZi0+dmFsdWUsIGMpOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgaXNrZXljaGFyKGludCBjKQoreworCXJldHVybiBpc2FsbnVtKGMpIHx8IGMgPT0gJy0nOworfQorCitzdGF0aWMgaW50IGdldF92YWx1ZShjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSwgc3RydWN0IHN0cmJ1ZiAqbmFtZSkKK3sKKwlpbnQgYzsKKwljaGFyICp2YWx1ZTsKKwlpbnQgcmV0OworCisJLyogR2V0IHRoZSBmdWxsIG5hbWUgKi8KKwlmb3IgKDs7KSB7CisJCWMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCWlmIChjZi0+ZW9mKQorCQkJYnJlYWs7CisJCWlmICghaXNrZXljaGFyKGMpKQorCQkJYnJlYWs7CisJCXN0cmJ1Zl9hZGRjaChuYW1lLCB0b2xvd2VyKGMpKTsKKwl9CisKKwl3aGlsZSAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKQorCQljID0gZ2V0X25leHRfY2hhcigpOworCisJdmFsdWUgPSBOVUxMOworCWlmIChjICE9ICdcbicpIHsKKwkJaWYgKGMgIT0gJz0nKQorCQkJcmV0dXJuIC0xOworCQl2YWx1ZSA9IHBhcnNlX3ZhbHVlKCk7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gLTE7CisJfQorCS8qCisJICogV2UgYWxyZWFkeSBjb25zdW1lZCB0aGUgXG4sIGJ1dCB3ZSBuZWVkIGxpbmVuciB0byBwb2ludCB0bworCSAqIHRoZSBsaW5lIHdlIGp1c3QgcGFyc2VkIGR1cmluZyB0aGUgY2FsbCB0byBmbiB0byBnZXQKKwkgKiBhY2N1cmF0ZSBsaW5lIG51bWJlciBpbiBlcnJvciBtZXNzYWdlcy4KKwkgKi8KKwljZi0+bGluZW5yLS07CisJcmV0ID0gZm4obmFtZS0+YnVmLCB2YWx1ZSwgZGF0YSk7CisJY2YtPmxpbmVucisrOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2V4dGVuZGVkX2Jhc2VfdmFyKHN0cnVjdCBzdHJidWYgKm5hbWUsIGludCBjKQoreworCWRvIHsKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCWdvdG8gZXJyb3JfaW5jb21wbGV0ZV9saW5lOworCQljID0gZ2V0X25leHRfY2hhcigpOworCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCisJLyogV2UgcmVxdWlyZSB0aGUgZm9ybWF0IHRvIGJlICdbYmFzZSAiZXh0ZW5zaW9uIl0nICovCisJaWYgKGMgIT0gJyInKQorCQlyZXR1cm4gLTE7CisJc3RyYnVmX2FkZGNoKG5hbWUsICcuJyk7CisKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0X25leHRfY2hhcigpOworCQlpZiAoYyA9PSAnXG4nKQorCQkJZ290byBlcnJvcl9pbmNvbXBsZXRlX2xpbmU7CisJCWlmIChjID09ICciJykKKwkJCWJyZWFrOworCQlpZiAoYyA9PSAnXFwnKSB7CisJCQljID0gZ2V0X25leHRfY2hhcigpOworCQkJaWYgKGMgPT0gJ1xuJykKKwkJCQlnb3RvIGVycm9yX2luY29tcGxldGVfbGluZTsKKwkJfQorCQlzdHJidWZfYWRkY2gobmFtZSwgYyk7CisJfQorCisJLyogRmluYWwgJ10nICovCisJaWYgKGdldF9uZXh0X2NoYXIoKSAhPSAnXScpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK2Vycm9yX2luY29tcGxldGVfbGluZToKKwljZi0+bGluZW5yLS07CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9iYXNlX3ZhcihzdHJ1Y3Qgc3RyYnVmICpuYW1lKQoreworCWZvciAoOzspIHsKKwkJaW50IGMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCWlmIChjZi0+ZW9mKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYyA9PSAnXScpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGlzc3BhY2UoYykpCisJCQlyZXR1cm4gZ2V0X2V4dGVuZGVkX2Jhc2VfdmFyKG5hbWUsIGMpOworCQlpZiAoIWlza2V5Y2hhcihjKSAmJiBjICE9ICcuJykKKwkJCXJldHVybiAtMTsKKwkJc3RyYnVmX2FkZGNoKG5hbWUsIHRvbG93ZXIoYykpOworCX0KK30KKworc3RhdGljIGludCBnaXRfcGFyc2Vfc291cmNlKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQoreworCWludCBjb21tZW50ID0gMDsKKwlpbnQgYmFzZWxlbiA9IDA7CisJc3RydWN0IHN0cmJ1ZiAqdmFyID0gJmNmLT52YXI7CisKKwkvKiBVK0ZFRkYgQnl0ZSBPcmRlciBNYXJrIGluIFVURjggKi8KKwljb25zdCBjaGFyICpib21wdHIgPSB1dGY4X2JvbTsKKworCWZvciAoOzspIHsKKwkJaW50IGMgPSBnZXRfbmV4dF9jaGFyKCk7CisJCWlmIChib21wdHIgJiYgKmJvbXB0cikgeworCQkJLyogV2UgYXJlIGF0IHRoZSBmaWxlIGJlZ2lubmluZzsgc2tpcCBVVEY4LWVuY29kZWQgQk9NCisJCQkgKiBpZiBwcmVzZW50LiBTYW5lIGVkaXRvcnMgd29uJ3QgcHV0IHRoaXMgaW4gb24gdGhlaXIKKwkJCSAqIG93biwgYnV0IGUuZy4gV2luZG93cyBOb3RlcGFkIHdpbGwgZG8gaXQgaGFwcGlseS4gKi8KKwkJCWlmIChjID09ICgqYm9tcHRyICYgMDM3NykpIHsKKwkJCQlib21wdHIrKzsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJLyogRG8gbm90IHRvbGVyYXRlIHBhcnRpYWwgQk9NLiAqLworCQkJCWlmIChib21wdHIgIT0gdXRmOF9ib20pCisJCQkJCWJyZWFrOworCQkJCS8qIE5vIEJPTSBhdCBmaWxlIGJlZ2lubmluZy4gQ29vbC4gKi8KKwkJCQlib21wdHIgPSBOVUxMOworCQkJfQorCQl9CisJCWlmIChjID09ICdcbicpIHsKKwkJCWlmIChjZi0+ZW9mKQorCQkJCXJldHVybiAwOworCQkJY29tbWVudCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY29tbWVudCB8fCBpc3NwYWNlKGMpKQorCQkJY29udGludWU7CisJCWlmIChjID09ICcjJyB8fCBjID09ICc7JykgeworCQkJY29tbWVudCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYyA9PSAnWycpIHsKKwkJCS8qIFJlc2V0IHByaW9yIHRvIGRldGVybWluaW5nIGEgbmV3IHN0ZW0gKi8KKwkJCXN0cmJ1Zl9yZXNldCh2YXIpOworCQkJaWYgKGdldF9iYXNlX3Zhcih2YXIpIDwgMCB8fCB2YXItPmxlbiA8IDEpCisJCQkJYnJlYWs7CisJCQlzdHJidWZfYWRkY2godmFyLCAnLicpOworCQkJYmFzZWxlbiA9IHZhci0+bGVuOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFpc2FscGhhKGMpKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIFRydW5jYXRlIHRoZSB2YXIgbmFtZSBiYWNrIHRvIHRoZSBzZWN0aW9uIGhlYWRlcgorCQkgKiBzdGVtIHByaW9yIHRvIGdyYWJiaW5nIHRoZSBzdWZmaXggcGFydCBvZiB0aGUgbmFtZQorCQkgKiBhbmQgdGhlIHZhbHVlLgorCQkgKi8KKwkJc3RyYnVmX3NldGxlbih2YXIsIGJhc2VsZW4pOworCQlzdHJidWZfYWRkY2godmFyLCB0b2xvd2VyKGMpKTsKKwkJaWYgKGdldF92YWx1ZShmbiwgZGF0YSwgdmFyKSA8IDApCisJCQlicmVhazsKKwl9CisJaWYgKGNmLT5kaWVfb25fZXJyb3IpCisJCWRpZShfKCJiYWQgY29uZmlnIGZpbGUgbGluZSAlZCBpbiAlcyIpLCBjZi0+bGluZW5yLCBjZi0+bmFtZSk7CisJZWxzZQorCQlyZXR1cm4gZXJyb3IoXygiYmFkIGNvbmZpZyBmaWxlIGxpbmUgJWQgaW4gJXMiKSwgY2YtPmxpbmVuciwgY2YtPm5hbWUpOworfQorCitzdGF0aWMgaW50IHBhcnNlX3VuaXRfZmFjdG9yKGNvbnN0IGNoYXIgKmVuZCwgdWludG1heF90ICp2YWwpCit7CisJaWYgKCEqZW5kKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmICghc3RyY2FzZWNtcChlbmQsICJrIikpIHsKKwkJKnZhbCAqPSAxMDI0OworCQlyZXR1cm4gMTsKKwl9CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoZW5kLCAibSIpKSB7CisJCSp2YWwgKj0gMTAyNCAqIDEwMjQ7CisJCXJldHVybiAxOworCX0KKwllbHNlIGlmICghc3RyY2FzZWNtcChlbmQsICJnIikpIHsKKwkJKnZhbCAqPSAxMDI0ICogMTAyNCAqIDEwMjQ7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfcGFyc2Vfc2lnbmVkKGNvbnN0IGNoYXIgKnZhbHVlLCBpbnRtYXhfdCAqcmV0LCBpbnRtYXhfdCBtYXgpCit7CisJaWYgKHZhbHVlICYmICp2YWx1ZSkgeworCQljaGFyICplbmQ7CisJCWludG1heF90IHZhbDsKKwkJdWludG1heF90IHV2YWw7CisJCXVpbnRtYXhfdCBmYWN0b3IgPSAxOworCisJCWVycm5vID0gMDsKKwkJdmFsID0gc3RydG9pbWF4KHZhbHVlLCAmZW5kLCAwKTsKKwkJaWYgKGVycm5vID09IEVSQU5HRSkKKwkJCXJldHVybiAwOworCQlpZiAoIXBhcnNlX3VuaXRfZmFjdG9yKGVuZCwgJmZhY3RvcikpIHsKKwkJCWVycm5vID0gRUlOVkFMOworCQkJcmV0dXJuIDA7CisJCX0KKwkJdXZhbCA9IGxhYnModmFsKTsKKwkJdXZhbCAqPSBmYWN0b3I7CisJCWlmICh1dmFsID4gbWF4IHx8IGxhYnModmFsKSA+IHV2YWwpIHsKKwkJCWVycm5vID0gRVJBTkdFOworCQkJcmV0dXJuIDA7CisJCX0KKwkJdmFsICo9IGZhY3RvcjsKKwkJKnJldCA9IHZhbDsKKwkJcmV0dXJuIDE7CisJfQorCWVycm5vID0gRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9wYXJzZV91bnNpZ25lZChjb25zdCBjaGFyICp2YWx1ZSwgdWludG1heF90ICpyZXQsIHVpbnRtYXhfdCBtYXgpCit7CisJaWYgKHZhbHVlICYmICp2YWx1ZSkgeworCQljaGFyICplbmQ7CisJCXVpbnRtYXhfdCB2YWw7CisJCXVpbnRtYXhfdCBvbGR2YWw7CisKKwkJZXJybm8gPSAwOworCQl2YWwgPSBzdHJ0b3VtYXgodmFsdWUsICZlbmQsIDApOworCQlpZiAoZXJybm8gPT0gRVJBTkdFKQorCQkJcmV0dXJuIDA7CisJCW9sZHZhbCA9IHZhbDsKKwkJaWYgKCFwYXJzZV91bml0X2ZhY3RvcihlbmQsICZ2YWwpKSB7CisJCQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICh2YWwgPiBtYXggfHwgb2xkdmFsID4gdmFsKSB7CisJCQllcnJubyA9IEVSQU5HRTsKKwkJCXJldHVybiAwOworCQl9CisJCSpyZXQgPSB2YWw7CisJCXJldHVybiAxOworCX0KKwllcnJubyA9IEVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfcGFyc2VfaW50KGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgKnJldCkKK3sKKwlpbnRtYXhfdCB0bXA7CisJaWYgKCFnaXRfcGFyc2Vfc2lnbmVkKHZhbHVlLCAmdG1wLCBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKGludCkpKQorCQlyZXR1cm4gMDsKKwkqcmV0ID0gdG1wOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdpdF9wYXJzZV9pbnQ2NChjb25zdCBjaGFyICp2YWx1ZSwgaW50NjRfdCAqcmV0KQoreworCWludG1heF90IHRtcDsKKwlpZiAoIWdpdF9wYXJzZV9zaWduZWQodmFsdWUsICZ0bXAsIG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUoaW50NjRfdCkpKQorCQlyZXR1cm4gMDsKKwkqcmV0ID0gdG1wOworCXJldHVybiAxOworfQorCitpbnQgZ2l0X3BhcnNlX3Vsb25nKGNvbnN0IGNoYXIgKnZhbHVlLCB1bnNpZ25lZCBsb25nICpyZXQpCit7CisJdWludG1heF90IHRtcDsKKwlpZiAoIWdpdF9wYXJzZV91bnNpZ25lZCh2YWx1ZSwgJnRtcCwgbWF4aW11bV91bnNpZ25lZF92YWx1ZV9vZl90eXBlKGxvbmcpKSkKKwkJcmV0dXJuIDA7CisJKnJldCA9IHRtcDsKKwlyZXR1cm4gMTsKK30KKworTk9SRVRVUk4KK3N0YXRpYyB2b2lkIGRpZV9iYWRfbnVtYmVyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWNvbnN0IGNoYXIgKnJlYXNvbiA9IGVycm5vID09IEVSQU5HRSA/CisJCQkgICAgICJvdXQgb2YgcmFuZ2UiIDoKKwkJCSAgICAgImludmFsaWQgdW5pdCI7CisJaWYgKCF2YWx1ZSkKKwkJdmFsdWUgPSAiIjsKKworCWlmIChjZiAmJiBjZi0+bmFtZSkKKwkJZGllKF8oImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIpLAorCQkgICAgdmFsdWUsIG5hbWUsIGNmLT5uYW1lLCByZWFzb24pOworCWRpZShfKCJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiKSwgdmFsdWUsIG5hbWUsIHJlYXNvbik7Cit9CisKK2ludCBnaXRfY29uZmlnX2ludChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpbnQgcmV0OworCWlmICghZ2l0X3BhcnNlX2ludCh2YWx1ZSwgJnJldCkpCisJCWRpZV9iYWRfbnVtYmVyKG5hbWUsIHZhbHVlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQ2NF90IGdpdF9jb25maWdfaW50NjQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50NjRfdCByZXQ7CisJaWYgKCFnaXRfcGFyc2VfaW50NjQodmFsdWUsICZyZXQpKQorCQlkaWVfYmFkX251bWJlcihuYW1lLCB2YWx1ZSk7CisJcmV0dXJuIHJldDsKK30KKwordW5zaWduZWQgbG9uZyBnaXRfY29uZmlnX3Vsb25nKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCWlmICghZ2l0X3BhcnNlX3Vsb25nKHZhbHVlLCAmcmV0KSkKKwkJZGllX2JhZF9udW1iZXIobmFtZSwgdmFsdWUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBnaXRfcGFyc2VfbWF5YmVfYm9vbChjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gMTsKKwlpZiAoISp2YWx1ZSkKKwkJcmV0dXJuIDA7CisJaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAidHJ1ZSIpCisJICAgIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAieWVzIikKKwkgICAgfHwgIXN0cmNhc2VjbXAodmFsdWUsICJvbiIpKQorCQlyZXR1cm4gMTsKKwlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJmYWxzZSIpCisJICAgIHx8ICFzdHJjYXNlY21wKHZhbHVlLCAibm8iKQorCSAgICB8fCAhc3RyY2FzZWNtcCh2YWx1ZSwgIm9mZiIpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBnaXRfY29uZmlnX21heWJlX2Jvb2woY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IHYgPSBnaXRfcGFyc2VfbWF5YmVfYm9vbCh2YWx1ZSk7CisJaWYgKDAgPD0gdikKKwkJcmV0dXJuIHY7CisJaWYgKGdpdF9wYXJzZV9pbnQodmFsdWUsICZ2KSkKKwkJcmV0dXJuICEhdjsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgKmlzX2Jvb2wpCit7CisJaW50IHYgPSBnaXRfcGFyc2VfbWF5YmVfYm9vbCh2YWx1ZSk7CisJaWYgKDAgPD0gdikgeworCQkqaXNfYm9vbCA9IDE7CisJCXJldHVybiB2OworCX0KKwkqaXNfYm9vbCA9IDA7CisJcmV0dXJuIGdpdF9jb25maWdfaW50KG5hbWUsIHZhbHVlKTsKK30KKworaW50IGdpdF9jb25maWdfYm9vbChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpbnQgZGlzY2FyZDsKKwlyZXR1cm4gISFnaXRfY29uZmlnX2Jvb2xfb3JfaW50KG5hbWUsIHZhbHVlLCAmZGlzY2FyZCk7Cit9CisKK2ludCBnaXRfY29uZmlnX3N0cmluZyhjb25zdCBjaGFyICoqZGVzdCwgY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkqZGVzdCA9IHhzdHJkdXAodmFsdWUpOworCXJldHVybiAwOworfQorCitpbnQgZ2l0X2NvbmZpZ19wYXRobmFtZShjb25zdCBjaGFyICoqZGVzdCwgY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkqZGVzdCA9IGV4cGFuZF91c2VyX3BhdGgodmFsdWUpOworCWlmICghKmRlc3QpCisJCWRpZShfKCJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIiksIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfZGVmYXVsdF9jb3JlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCS8qIFRoaXMgbmVlZHMgYSBiZXR0ZXIgbmFtZSAqLworCWlmICghc3RyY21wKHZhciwgImNvcmUuZmlsZW1vZGUiKSkgeworCQl0cnVzdF9leGVjdXRhYmxlX2JpdCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImNvcmUudHJ1c3RjdGltZSIpKSB7CisJCXRydXN0X2N0aW1lID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5jaGVja3N0YXQiKSkgeworCQlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJkZWZhdWx0IikpCisJCQljaGVja19zdGF0ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJtaW5pbWFsIikpCisJCQljaGVja19zdGF0ID0gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnF1b3RlcGF0aCIpKSB7CisJCXF1b3RlX3BhdGhfZnVsbHkgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuc3ltbGlua3MiKSkgeworCQloYXNfc3ltbGlua3MgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuaWdub3JlY2FzZSIpKSB7CisJCWlnbm9yZV9jYXNlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmF0dHJpYnV0ZXNmaWxlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKCZnaXRfYXR0cmlidXRlc19maWxlLCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKHZhciwgImNvcmUuYmFyZSIpKSB7CisJCWlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuaWdub3Jlc3RhdCIpKSB7CisJCWFzc3VtZV91bmNoYW5nZWQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucHJlZmVyc3ltbGlua3JlZnMiKSkgeworCQlwcmVmZXJfc3ltbGlua19yZWZzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMiKSkgeworCQlsb2dfYWxsX3JlZl91cGRhdGVzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLndhcm5hbWJpZ3VvdXNyZWZzIikpIHsKKwkJd2Fybl9hbWJpZ3VvdXNfcmVmcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5hYmJyZXYiKSkgeworCQlpbnQgYWJicmV2ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCWlmIChhYmJyZXYgPCBtaW5pbXVtX2FiYnJldiB8fCBhYmJyZXYgPiA0MCkKKwkJCXJldHVybiAtMTsKKwkJZGVmYXVsdF9hYmJyZXYgPSBhYmJyZXY7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUubG9vc2Vjb21wcmVzc2lvbiIpKSB7CisJCWludCBsZXZlbCA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlpZiAobGV2ZWwgPT0gLTEpCisJCQlsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKwkJZWxzZSBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gWl9CRVNUX0NPTVBSRVNTSU9OKQorCQkJZGllKF8oImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIiksIGxldmVsKTsKKwkJemxpYl9jb21wcmVzc2lvbl9sZXZlbCA9IGxldmVsOworCQl6bGliX2NvbXByZXNzaW9uX3NlZW4gPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmNvbXByZXNzaW9uIikpIHsKKwkJaW50IGxldmVsID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCWlmIChsZXZlbCA9PSAtMSkKKwkJCWxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworCQllbHNlIGlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPiBaX0JFU1RfQ09NUFJFU1NJT04pCisJCQlkaWUoXygiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiKSwgbGV2ZWwpOworCQljb3JlX2NvbXByZXNzaW9uX2xldmVsID0gbGV2ZWw7CisJCWNvcmVfY29tcHJlc3Npb25fc2VlbiA9IDE7CisJCWlmICghemxpYl9jb21wcmVzc2lvbl9zZWVuKQorCQkJemxpYl9jb21wcmVzc2lvbl9sZXZlbCA9IGxldmVsOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnBhY2tlZGdpdHdpbmRvd3NpemUiKSkgeworCQlpbnQgcGdzel94MiA9IGdldHBhZ2VzaXplKCkgKiAyOworCQlwYWNrZWRfZ2l0X3dpbmRvd19zaXplID0gZ2l0X2NvbmZpZ191bG9uZyh2YXIsIHZhbHVlKTsKKworCQkvKiBUaGlzIHZhbHVlIG11c3QgYmUgbXVsdGlwbGUgb2YgKHBhZ2VzaXplICogMikgKi8KKwkJcGFja2VkX2dpdF93aW5kb3dfc2l6ZSAvPSBwZ3N6X3gyOworCQlpZiAocGFja2VkX2dpdF93aW5kb3dfc2l6ZSA8IDEpCisJCQlwYWNrZWRfZ2l0X3dpbmRvd19zaXplID0gMTsKKwkJcGFja2VkX2dpdF93aW5kb3dfc2l6ZSAqPSBwZ3N6X3gyOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQiKSkgeworCQliaWdfZmlsZV90aHJlc2hvbGQgPSBnaXRfY29uZmlnX3Vsb25nKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnBhY2tlZGdpdGxpbWl0IikpIHsKKwkJcGFja2VkX2dpdF9saW1pdCA9IGdpdF9jb25maWdfdWxvbmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuZGVsdGFiYXNlY2FjaGVsaW1pdCIpKSB7CisJCWRlbHRhX2Jhc2VfY2FjaGVfbGltaXQgPSBnaXRfY29uZmlnX3Vsb25nKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmF1dG9jcmxmIikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAiaW5wdXQiKSkgeworCQkJaWYgKGNvcmVfZW9sID09IEVPTF9DUkxGKQorCQkJCXJldHVybiBlcnJvcigiY29yZS5hdXRvY3JsZj1pbnB1dCBjb25mbGljdHMgd2l0aCBjb3JlLmVvbD1jcmxmIik7CisJCQlhdXRvX2NybGYgPSBBVVRPX0NSTEZfSU5QVVQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlhdXRvX2NybGYgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUuc2FmZWNybGYiKSkgeworCQlpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJ3YXJuIikpIHsKKwkJCXNhZmVfY3JsZiA9IFNBRkVfQ1JMRl9XQVJOOworCQkJcmV0dXJuIDA7CisJCX0KKwkJc2FmZV9jcmxmID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmVvbCIpKSB7CisJCWlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgImxmIikpCisJCQljb3JlX2VvbCA9IEVPTF9MRjsKKwkJZWxzZSBpZiAodmFsdWUgJiYgIXN0cmNhc2VjbXAodmFsdWUsICJjcmxmIikpCisJCQljb3JlX2VvbCA9IEVPTF9DUkxGOworCQllbHNlIGlmICh2YWx1ZSAmJiAhc3RyY2FzZWNtcCh2YWx1ZSwgIm5hdGl2ZSIpKQorCQkJY29yZV9lb2wgPSBFT0xfTkFUSVZFOworCQllbHNlCisJCQljb3JlX2VvbCA9IEVPTF9VTlNFVDsKKwkJaWYgKGNvcmVfZW9sID09IEVPTF9DUkxGICYmIGF1dG9fY3JsZiA9PSBBVVRPX0NSTEZfSU5QVVQpCisJCQlyZXR1cm4gZXJyb3IoImNvcmUuYXV0b2NybGY9aW5wdXQgY29uZmxpY3RzIHdpdGggY29yZS5lb2w9Y3JsZiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLm5vdGVzcmVmIikpIHsKKwkJbm90ZXNfcmVmX25hbWUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5wYWdlciIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnBhZ2VyX3Byb2dyYW0sIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5lZGl0b3IiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZlZGl0b3JfcHJvZ3JhbSwgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmNvbW1lbnRjaGFyIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImF1dG8iKSkKKwkJCWF1dG9fY29tbWVudF9saW5lX2NoYXIgPSAxOworCQllbHNlIGlmICh2YWx1ZVswXSAmJiAhdmFsdWVbMV0pIHsKKwkJCWNvbW1lbnRfbGluZV9jaGFyID0gdmFsdWVbMF07CisJCQlhdXRvX2NvbW1lbnRfbGluZV9jaGFyID0gMDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gZXJyb3IoImNvcmUuY29tbWVudENoYXIgc2hvdWxkIG9ubHkgYmUgb25lIGNoYXJhY3RlciIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmFza3Bhc3MiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZhc2twYXNzX3Byb2dyYW0sIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5leGNsdWRlc2ZpbGUiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfcGF0aG5hbWUoJmV4Y2x1ZGVzX2ZpbGUsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS53aGl0ZXNwYWNlIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQl3aGl0ZXNwYWNlX3J1bGVfY2ZnID0gcGFyc2Vfd2hpdGVzcGFjZV9ydWxlKHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5mc3luY29iamVjdGZpbGVzIikpIHsKKwkJZnN5bmNfb2JqZWN0X2ZpbGVzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnByZWxvYWRpbmRleCIpKSB7CisJCWNvcmVfcHJlbG9hZF9pbmRleCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5jcmVhdGVvYmplY3QiKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInJlbmFtZSIpKQorCQkJb2JqZWN0X2NyZWF0aW9uX21vZGUgPSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibGluayIpKQorCQkJb2JqZWN0X2NyZWF0aW9uX21vZGUgPSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19IQVJETElOS1M7CisJCWVsc2UKKwkJCWRpZShfKCJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiKSwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnNwYXJzZWNoZWNrb3V0IikpIHsKKwkJY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQgPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImNvcmUucHJlY29tcG9zZXVuaWNvZGUiKSkgeworCQlwcmVjb21wb3NlZF91bmljb2RlID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLnByb3RlY3RoZnMiKSkgeworCQlwcm90ZWN0X2hmcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29yZS5wcm90ZWN0bnRmcyIpKSB7CisJCXByb3RlY3RfbnRmcyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9kZWZhdWx0X2kxOG5fY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiaTE4bi5jb21taXRlbmNvZGluZyIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmdpdF9jb21taXRfZW5jb2RpbmcsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiaTE4bi5sb2dvdXRwdXRlbmNvZGluZyIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmdpdF9sb2dfb3V0cHV0X2VuY29kaW5nLCB2YXIsIHZhbHVlKTsKKworCS8qIEFkZCBvdGhlciBjb25maWcgdmFyaWFibGVzIGhlcmUgYW5kIHRvIERvY3VtZW50YXRpb24vY29uZmlnLnR4dC4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfZGVmYXVsdF9icmFuY2hfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiYnJhbmNoLmF1dG9zZXR1cG1lcmdlIikpIHsKKwkJaWYgKHZhbHVlICYmICFzdHJjYXNlY21wKHZhbHVlLCAiYWx3YXlzIikpIHsKKwkJCWdpdF9icmFuY2hfdHJhY2sgPSBCUkFOQ0hfVFJBQ0tfQUxXQVlTOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZ2l0X2JyYW5jaF90cmFjayA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImJyYW5jaC5hdXRvc2V0dXByZWJhc2UiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJuZXZlciIpKQorCQkJYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfTkVWRVI7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJsb2NhbCIpKQorCQkJYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfTE9DQUw7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJyZW1vdGUiKSkKKwkJCWF1dG9yZWJhc2UgPSBBVVRPUkVCQVNFX1JFTU9URTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImFsd2F5cyIpKQorCQkJYXV0b3JlYmFzZSA9IEFVVE9SRUJBU0VfQUxXQVlTOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3IoIk1hbGZvcm1lZCB2YWx1ZSBmb3IgJXMiLCB2YXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2RlZmF1bHRfcHVzaF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJwdXNoLmRlZmF1bHQiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJub3RoaW5nIikpCisJCQlwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfTk9USElORzsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIm1hdGNoaW5nIikpCisJCQlwdXNoX2RlZmF1bHQgPSBQVVNIX0RFRkFVTFRfTUFUQ0hJTkc7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJzaW1wbGUiKSkKKwkJCXB1c2hfZGVmYXVsdCA9IFBVU0hfREVGQVVMVF9TSU1QTEU7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJ1cHN0cmVhbSIpKQorCQkJcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX1VQU1RSRUFNOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAidHJhY2tpbmciKSkgLyogZGVwcmVjYXRlZCAqLworCQkJcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX1VQU1RSRUFNOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiY3VycmVudCIpKQorCQkJcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX0NVUlJFTlQ7CisJCWVsc2UgeworCQkJZXJyb3IoIk1hbGZvcm1lZCB2YWx1ZSBmb3IgJXM6ICVzIiwgdmFyLCB2YWx1ZSk7CisJCQlyZXR1cm4gZXJyb3IoIk11c3QgYmUgb25lIG9mIG5vdGhpbmcsIG1hdGNoaW5nLCBzaW1wbGUsICIKKwkJCQkgICAgICJ1cHN0cmVhbSBvciBjdXJyZW50LiIpOworCQl9CisJCXJldHVybiAwOworCX0KKworCS8qIEFkZCBvdGhlciBjb25maWcgdmFyaWFibGVzIGhlcmUgYW5kIHRvIERvY3VtZW50YXRpb24vY29uZmlnLnR4dC4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnaXRfZGVmYXVsdF9tYWlsbWFwX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKHZhciwgIm1haWxtYXAuZmlsZSIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19wYXRobmFtZSgmZ2l0X21haWxtYXBfZmlsZSwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAodmFyLCAibWFpbG1hcC5ibG9iIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZ2l0X21haWxtYXBfYmxvYiwgdmFyLCB2YWx1ZSk7CisKKwkvKiBBZGQgb3RoZXIgY29uZmlnIHZhcmlhYmxlcyBoZXJlIGFuZCB0byBEb2N1bWVudGF0aW9uL2NvbmZpZy50eHQuICovCisJcmV0dXJuIDA7Cit9CisKK2ludCBnaXRfZGVmYXVsdF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZHVtbXkpCit7CisJaWYgKHN0YXJ0c193aXRoKHZhciwgImNvcmUuIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9jb3JlX2NvbmZpZyh2YXIsIHZhbHVlKTsKKworCWlmIChzdGFydHNfd2l0aCh2YXIsICJ1c2VyLiIpKQorCQlyZXR1cm4gZ2l0X2lkZW50X2NvbmZpZyh2YXIsIHZhbHVlLCBkdW1teSk7CisKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAiaTE4bi4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2kxOG5fY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKHN0YXJ0c193aXRoKHZhciwgImJyYW5jaC4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X2JyYW5jaF9jb25maWcodmFyLCB2YWx1ZSk7CisKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAicHVzaC4iKSkKKwkJcmV0dXJuIGdpdF9kZWZhdWx0X3B1c2hfY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKHN0YXJ0c193aXRoKHZhciwgIm1haWxtYXAuIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9tYWlsbWFwX2NvbmZpZyh2YXIsIHZhbHVlKTsKKworCWlmIChzdGFydHNfd2l0aCh2YXIsICJhZHZpY2UuIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9hZHZpY2VfY29uZmlnKHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAicGFnZXIuY29sb3IiKSB8fCAhc3RyY21wKHZhciwgImNvbG9yLnBhZ2VyIikpIHsKKwkJcGFnZXJfdXNlX2NvbG9yID0gZ2l0X2NvbmZpZ19ib29sKHZhcix2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgInBhY2sucGFja3NpemVsaW1pdCIpKSB7CisJCXBhY2tfc2l6ZV9saW1pdF9jZmcgPSBnaXRfY29uZmlnX3Vsb25nKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJLyogQWRkIG90aGVyIGNvbmZpZyB2YXJpYWJsZXMgaGVyZSBhbmQgdG8gRG9jdW1lbnRhdGlvbi9jb25maWcudHh0LiAqLworCXJldHVybiAwOworfQorCisvKgorICogQWxsIHNvdXJjZSBzcGVjaWZpYyBmaWVsZHMgaW4gdGhlIHVuaW9uLCBkaWVfb25fZXJyb3IsIG5hbWUgYW5kIHRoZSBjYWxsYmFja3MKKyAqIGZnZXRjLCB1bmdldGMsIGZ0ZWxsIG9mIHRvcCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IGRvX2NvbmZpZ19mcm9tKHN0cnVjdCBjb25maWdfc291cmNlICp0b3AsIGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQoreworCWludCByZXQ7CisKKwkvKiBwdXNoIGNvbmZpZy1maWxlIHBhcnNpbmcgc3RhdGUgc3RhY2sgKi8KKwl0b3AtPnByZXYgPSBjZjsKKwl0b3AtPmxpbmVuciA9IDE7CisJdG9wLT5lb2YgPSAwOworCXN0cmJ1Zl9pbml0KCZ0b3AtPnZhbHVlLCAxMDI0KTsKKwlzdHJidWZfaW5pdCgmdG9wLT52YXIsIDEwMjQpOworCWNmID0gdG9wOworCisJcmV0ID0gZ2l0X3BhcnNlX3NvdXJjZShmbiwgZGF0YSk7CisKKwkvKiBwb3AgY29uZmlnLWZpbGUgcGFyc2luZyBzdGF0ZSBzdGFjayAqLworCXN0cmJ1Zl9yZWxlYXNlKCZ0b3AtPnZhbHVlKTsKKwlzdHJidWZfcmVsZWFzZSgmdG9wLT52YXIpOworCWNmID0gdG9wLT5wcmV2OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkb19jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLAorCQljb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoLCBGSUxFICpmLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb25maWdfc291cmNlIHRvcDsKKworCXRvcC51LmZpbGUgPSBmOworCXRvcC5uYW1lID0gbmFtZTsKKwl0b3AucGF0aCA9IHBhdGg7CisJdG9wLmRpZV9vbl9lcnJvciA9IDE7CisJdG9wLmRvX2ZnZXRjID0gY29uZmlnX2ZpbGVfZmdldGM7CisJdG9wLmRvX3VuZ2V0YyA9IGNvbmZpZ19maWxlX3VuZ2V0YzsKKwl0b3AuZG9fZnRlbGwgPSBjb25maWdfZmlsZV9mdGVsbDsKKworCXJldHVybiBkb19jb25maWdfZnJvbSgmdG9wLCBmbiwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X2NvbmZpZ19mcm9tX3N0ZGluKGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhKQoreworCXJldHVybiBkb19jb25maWdfZnJvbV9maWxlKGZuLCAiPHN0ZGluPiIsIE5VTEwsIHN0ZGluLCBkYXRhKTsKK30KKworaW50IGdpdF9jb25maWdfZnJvbV9maWxlKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0ID0gLTE7CisJRklMRSAqZjsKKworCWYgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwlpZiAoZikgeworCQlmbG9ja2ZpbGUoZik7CisJCXJldCA9IGRvX2NvbmZpZ19mcm9tX2ZpbGUoZm4sIGZpbGVuYW1lLCBmaWxlbmFtZSwgZiwgZGF0YSk7CisJCWZ1bmxvY2tmaWxlKGYpOworCQlmY2xvc2UoZik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBnaXRfY29uZmlnX2Zyb21fYnVmKGNvbmZpZ19mbl90IGZuLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpidWYsCisJCQlzaXplX3QgbGVuLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjb25maWdfc291cmNlIHRvcDsKKworCXRvcC51LmJ1Zi5idWYgPSBidWY7CisJdG9wLnUuYnVmLmxlbiA9IGxlbjsKKwl0b3AudS5idWYucG9zID0gMDsKKwl0b3AubmFtZSA9IG5hbWU7CisJdG9wLnBhdGggPSBOVUxMOworCXRvcC5kaWVfb25fZXJyb3IgPSAwOworCXRvcC5kb19mZ2V0YyA9IGNvbmZpZ19idWZfZmdldGM7CisJdG9wLmRvX3VuZ2V0YyA9IGNvbmZpZ19idWZfdW5nZXRjOworCXRvcC5kb19mdGVsbCA9IGNvbmZpZ19idWZfZnRlbGw7CisKKwlyZXR1cm4gZG9fY29uZmlnX2Zyb20oJnRvcCwgZm4sIGRhdGEpOworfQorCitzdGF0aWMgaW50IGdpdF9jb25maWdfZnJvbV9ibG9iX3NoYTEoY29uZmlnX2ZuX3QgZm4sCisJCQkJICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgICAgIHZvaWQgKmRhdGEpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IHJldDsKKworCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYpCisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGxvYWQgY29uZmlnIGJsb2Igb2JqZWN0ICclcyciLCBuYW1lKTsKKwlpZiAodHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKGJ1Zik7CisJCXJldHVybiBlcnJvcigicmVmZXJlbmNlICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBibG9iIiwgbmFtZSk7CisJfQorCisJcmV0ID0gZ2l0X2NvbmZpZ19mcm9tX2J1ZihmbiwgbmFtZSwgYnVmLCBzaXplLCBkYXRhKTsKKwlmcmVlKGJ1Zik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdpdF9jb25maWdfZnJvbV9ibG9iX3JlZihjb25maWdfZm5fdCBmbiwKKwkJCQkgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgdm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJaWYgKGdldF9zaGExKG5hbWUsIHNoYTEpIDwgMCkKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gcmVzb2x2ZSBjb25maWcgYmxvYiAnJXMnIiwgbmFtZSk7CisJcmV0dXJuIGdpdF9jb25maWdfZnJvbV9ibG9iX3NoYTEoZm4sIG5hbWUsIHNoYTEsIGRhdGEpOworfQorCitjb25zdCBjaGFyICpnaXRfZXRjX2dpdGNvbmZpZyh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpzeXN0ZW1fd2lkZTsKKwlpZiAoIXN5c3RlbV93aWRlKQorCQlzeXN0ZW1fd2lkZSA9IHN5c3RlbV9wYXRoKEVUQ19HSVRDT05GSUcpOworCXJldHVybiBzeXN0ZW1fd2lkZTsKK30KKworLyoKKyAqIFBhcnNlIGVudmlyb25tZW50IHZhcmlhYmxlICdrJyBhcyBhIGJvb2xlYW4gKGluIHZhcmlvdXMKKyAqIHBvc3NpYmxlIHNwZWxsaW5ncyk7IGlmIG1pc3NpbmcsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSAnZGVmJy4KKyAqLworaW50IGdpdF9lbnZfYm9vbChjb25zdCBjaGFyICprLCBpbnQgZGVmKQoreworCWNvbnN0IGNoYXIgKnYgPSBnZXRlbnYoayk7CisJcmV0dXJuIHYgPyBnaXRfY29uZmlnX2Jvb2woaywgdikgOiBkZWY7Cit9CisKKy8qCisgKiBQYXJzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnaycgYXMgdWxvbmcgd2l0aCBwb3NzaWJseSBhIHVuaXQKKyAqIHN1ZmZpeDsgaWYgbWlzc2luZywgdXNlIHRoZSBkZWZhdWx0IHZhbHVlICd2YWwnLgorICovCit1bnNpZ25lZCBsb25nIGdpdF9lbnZfdWxvbmcoY29uc3QgY2hhciAqaywgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJY29uc3QgY2hhciAqdiA9IGdldGVudihrKTsKKwlpZiAodiAmJiAhZ2l0X3BhcnNlX3Vsb25nKHYsICZ2YWwpKQorCQlkaWUoImZhaWxlZCB0byBwYXJzZSAlcyIsIGspOworCXJldHVybiB2YWw7Cit9CisKK2ludCBnaXRfY29uZmlnX3N5c3RlbSh2b2lkKQoreworCXJldHVybiAhZ2l0X2Vudl9ib29sKCJHSVRfQ09ORklHX05PU1lTVEVNIiwgMCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2Vhcmx5KGNvbmZpZ19mbl90IGZuLCB2b2lkICpkYXRhLCBjb25zdCBjaGFyICpyZXBvX2NvbmZpZykKK3sKKwlpbnQgcmV0ID0gMCwgZm91bmQgPSAwOworCWNoYXIgKnhkZ19jb25maWcgPSB4ZGdfY29uZmlnX2hvbWUoImNvbmZpZyIpOworCWNoYXIgKnVzZXJfY29uZmlnID0gZXhwYW5kX3VzZXJfcGF0aCgifi8uZ2l0Y29uZmlnIik7CisKKwlpZiAoZ2l0X2NvbmZpZ19zeXN0ZW0oKSAmJiAhYWNjZXNzX29yX2RpZShnaXRfZXRjX2dpdGNvbmZpZygpLCBSX09LLCAwKSkgeworCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIGdpdF9ldGNfZ2l0Y29uZmlnKCksCisJCQkJCSAgICBkYXRhKTsKKwkJZm91bmQgKz0gMTsKKwl9CisKKwlpZiAoeGRnX2NvbmZpZyAmJiAhYWNjZXNzX29yX2RpZSh4ZGdfY29uZmlnLCBSX09LLCBBQ0NFU1NfRUFDQ0VTX09LKSkgeworCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHhkZ19jb25maWcsIGRhdGEpOworCQlmb3VuZCArPSAxOworCX0KKworCWlmICh1c2VyX2NvbmZpZyAmJiAhYWNjZXNzX29yX2RpZSh1c2VyX2NvbmZpZywgUl9PSywgQUNDRVNTX0VBQ0NFU19PSykpIHsKKwkJcmV0ICs9IGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCB1c2VyX2NvbmZpZywgZGF0YSk7CisJCWZvdW5kICs9IDE7CisJfQorCisJaWYgKHJlcG9fY29uZmlnICYmICFhY2Nlc3Nfb3JfZGllKHJlcG9fY29uZmlnLCBSX09LLCAwKSkgeworCQlyZXQgKz0gZ2l0X2NvbmZpZ19mcm9tX2ZpbGUoZm4sIHJlcG9fY29uZmlnLCBkYXRhKTsKKwkJZm91bmQgKz0gMTsKKwl9CisKKwlzd2l0Y2ggKGdpdF9jb25maWdfZnJvbV9wYXJhbWV0ZXJzKGZuLCBkYXRhKSkgeworCWNhc2UgLTE6IC8qIGVycm9yICovCisJCWRpZShfKCJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIpKTsKKwkJYnJlYWs7CisJY2FzZSAwOiAvKiBmb3VuZCBub3RoaW5nICovCisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIGZvdW5kIGF0IGxlYXN0IG9uZSBpdGVtICovCisJCWZvdW5kKys7CisJCWJyZWFrOworCX0KKworCWZyZWUoeGRnX2NvbmZpZyk7CisJZnJlZSh1c2VyX2NvbmZpZyk7CisJcmV0dXJuIHJldCA9PSAwID8gZm91bmQgOiByZXQ7Cit9CisKK2ludCBnaXRfY29uZmlnX3dpdGhfb3B0aW9ucyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSwKKwkJCSAgICBzdHJ1Y3QgZ2l0X2NvbmZpZ19zb3VyY2UgKmNvbmZpZ19zb3VyY2UsCisJCQkgICAgaW50IHJlc3BlY3RfaW5jbHVkZXMpCit7CisJY2hhciAqcmVwb19jb25maWcgPSBOVUxMOworCWludCByZXQ7CisJc3RydWN0IGNvbmZpZ19pbmNsdWRlX2RhdGEgaW5jID0gQ09ORklHX0lOQ0xVREVfSU5JVDsKKworCWlmIChyZXNwZWN0X2luY2x1ZGVzKSB7CisJCWluYy5mbiA9IGZuOworCQlpbmMuZGF0YSA9IGRhdGE7CisJCWZuID0gZ2l0X2NvbmZpZ19pbmNsdWRlOworCQlkYXRhID0gJmluYzsKKwl9CisKKwkvKgorCSAqIElmIHdlIGhhdmUgYSBzcGVjaWZpYyBmaWxlbmFtZSwgdXNlIGl0LiBPdGhlcndpc2UsIGZvbGxvdyB0aGUKKwkgKiByZWd1bGFyIGxvb2t1cCBzZXF1ZW5jZS4KKwkgKi8KKwlpZiAoY29uZmlnX3NvdXJjZSAmJiBjb25maWdfc291cmNlLT51c2Vfc3RkaW4pCisJCXJldHVybiBnaXRfY29uZmlnX2Zyb21fc3RkaW4oZm4sIGRhdGEpOworCWVsc2UgaWYgKGNvbmZpZ19zb3VyY2UgJiYgY29uZmlnX3NvdXJjZS0+ZmlsZSkKKwkJcmV0dXJuIGdpdF9jb25maWdfZnJvbV9maWxlKGZuLCBjb25maWdfc291cmNlLT5maWxlLCBkYXRhKTsKKwllbHNlIGlmIChjb25maWdfc291cmNlICYmIGNvbmZpZ19zb3VyY2UtPmJsb2IpCisJCXJldHVybiBnaXRfY29uZmlnX2Zyb21fYmxvYl9yZWYoZm4sIGNvbmZpZ19zb3VyY2UtPmJsb2IsIGRhdGEpOworCisJcmVwb19jb25maWcgPSBnaXRfcGF0aGR1cCgiY29uZmlnIik7CisJcmV0ID0gZ2l0X2NvbmZpZ19lYXJseShmbiwgZGF0YSwgcmVwb19jb25maWcpOworCWlmIChyZXBvX2NvbmZpZykKKwkJZnJlZShyZXBvX2NvbmZpZyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZ2l0X2NvbmZpZ19yYXcoY29uZmlnX2ZuX3QgZm4sIHZvaWQgKmRhdGEpCit7CisJaWYgKGdpdF9jb25maWdfd2l0aF9vcHRpb25zKGZuLCBkYXRhLCBOVUxMLCAxKSA8IDApCisJCS8qCisJCSAqIGdpdF9jb25maWdfd2l0aF9vcHRpb25zKCkgbm9ybWFsbHkgcmV0dXJucyBvbmx5CisJCSAqIHBvc2l0aXZlIHZhbHVlcywgYXMgbW9zdCBlcnJvcnMgYXJlIGZhdGFsLCBhbmQKKwkJICogbm9uLWZhdGFsIHBvdGVudGlhbCBlcnJvcnMgYXJlIGd1YXJkZWQgYnkgImlmIgorCQkgKiBzdGF0ZW1lbnRzIHRoYXQgYXJlIGVudGVyZWQgb25seSB3aGVuIG5vIGVycm9yIGlzCisJCSAqIHBvc3NpYmxlLgorCQkgKgorCQkgKiBJZiB3ZSBldmVyIGVuY291bnRlciBhIG5vbi1mYXRhbCBlcnJvciwgaXQgbWVhbnMKKwkJICogc29tZXRoaW5nIHdlbnQgcmVhbGx5IHdyb25nIGFuZCB3ZSBzaG91bGQgc3RvcAorCQkgKiBpbW1lZGlhdGVseS4KKwkJICovCisJCWRpZShfKCJ1bmtub3duIGVycm9yIG9jY3VyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIpKTsKK30KKworc3RhdGljIHZvaWQgY29uZmlnc2V0X2l0ZXIoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaSwgdmFsdWVfaW5kZXg7CisJc3RydWN0IHN0cmluZ19saXN0ICp2YWx1ZXM7CisJc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCAqZW50cnk7CisJc3RydWN0IGNvbmZpZ3NldF9saXN0ICpsaXN0ID0gJmNzLT5saXN0OworCXN0cnVjdCBrZXlfdmFsdWVfaW5mbyAqa3ZfaW5mbzsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKSB7CisJCWVudHJ5ID0gbGlzdC0+aXRlbXNbaV0uZTsKKwkJdmFsdWVfaW5kZXggPSBsaXN0LT5pdGVtc1tpXS52YWx1ZV9pbmRleDsKKwkJdmFsdWVzID0gJmVudHJ5LT52YWx1ZV9saXN0OworCQlpZiAoZm4oZW50cnktPmtleSwgdmFsdWVzLT5pdGVtc1t2YWx1ZV9pbmRleF0uc3RyaW5nLCBkYXRhKSA8IDApIHsKKwkJCWt2X2luZm8gPSB2YWx1ZXMtPml0ZW1zW3ZhbHVlX2luZGV4XS51dGlsOworCQkJZ2l0X2RpZV9jb25maWdfbGluZW5yKGVudHJ5LT5rZXksIGt2X2luZm8tPmZpbGVuYW1lLCBrdl9pbmZvLT5saW5lbnIpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBnaXRfY29uZmlnX2NoZWNrX2luaXQodm9pZCk7CisKK3ZvaWQgZ2l0X2NvbmZpZyhjb25maWdfZm5fdCBmbiwgdm9pZCAqZGF0YSkKK3sKKwlnaXRfY29uZmlnX2NoZWNrX2luaXQoKTsKKwljb25maWdzZXRfaXRlcigmdGhlX2NvbmZpZ19zZXQsIGZuLCBkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgKmNvbmZpZ3NldF9maW5kX2VsZW1lbnQoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXkpCit7CisJc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCBrOworCXN0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgKmZvdW5kX2VudHJ5OworCWNoYXIgKm5vcm1hbGl6ZWRfa2V5OworCWludCByZXQ7CisJLyoKKwkgKiBga2V5YCBtYXkgY29tZSBmcm9tIHRoZSB1c2VyLCBzbyBub3JtYWxpemUgaXQgYmVmb3JlIHVzaW5nIGl0CisJICogZm9yIHF1ZXJ5aW5nIGVudHJpZXMgZnJvbSB0aGUgaGFzaG1hcC4KKwkgKi8KKwlyZXQgPSBnaXRfY29uZmlnX3BhcnNlX2tleShrZXksICZub3JtYWxpemVkX2tleSwgTlVMTCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gTlVMTDsKKworCWhhc2htYXBfZW50cnlfaW5pdCgmaywgc3RyaGFzaChub3JtYWxpemVkX2tleSkpOworCWsua2V5ID0gbm9ybWFsaXplZF9rZXk7CisJZm91bmRfZW50cnkgPSBoYXNobWFwX2dldCgmY3MtPmNvbmZpZ19oYXNoLCAmaywgTlVMTCk7CisJZnJlZShub3JtYWxpemVkX2tleSk7CisJcmV0dXJuIGZvdW5kX2VudHJ5OworfQorCitzdGF0aWMgaW50IGNvbmZpZ3NldF9hZGRfdmFsdWUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgKmU7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnNpOworCXN0cnVjdCBjb25maWdzZXRfbGlzdF9pdGVtICpsX2l0ZW07CisJc3RydWN0IGtleV92YWx1ZV9pbmZvICprdl9pbmZvID0geG1hbGxvYyhzaXplb2YoKmt2X2luZm8pKTsKKworCWUgPSBjb25maWdzZXRfZmluZF9lbGVtZW50KGNzLCBrZXkpOworCS8qCisJICogU2luY2UgdGhlIGtleXMgYXJlIGJlaW5nIGZlZCBieSBnaXRfY29uZmlnKigpIGNhbGxiYWNrIG1lY2hhbmlzbSwgdGhleQorCSAqIGFyZSBhbHJlYWR5IG5vcm1hbGl6ZWQuIFNvIHNpbXBseSBhZGQgdGhlbSB3aXRob3V0IGFueSBmdXJ0aGVyIG11bmdpbmcuCisJICovCisJaWYgKCFlKSB7CisJCWUgPSB4bWFsbG9jKHNpemVvZigqZSkpOworCQloYXNobWFwX2VudHJ5X2luaXQoZSwgc3RyaGFzaChrZXkpKTsKKwkJZS0+a2V5ID0geHN0cmR1cChrZXkpOworCQlzdHJpbmdfbGlzdF9pbml0KCZlLT52YWx1ZV9saXN0LCAxKTsKKwkJaGFzaG1hcF9hZGQoJmNzLT5jb25maWdfaGFzaCwgZSk7CisJfQorCXNpID0gc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKCZlLT52YWx1ZV9saXN0LCB4c3RyZHVwX29yX251bGwodmFsdWUpKTsKKworCUFMTE9DX0dST1coY3MtPmxpc3QuaXRlbXMsIGNzLT5saXN0Lm5yICsgMSwgY3MtPmxpc3QuYWxsb2MpOworCWxfaXRlbSA9ICZjcy0+bGlzdC5pdGVtc1tjcy0+bGlzdC5ucisrXTsKKwlsX2l0ZW0tPmUgPSBlOworCWxfaXRlbS0+dmFsdWVfaW5kZXggPSBlLT52YWx1ZV9saXN0Lm5yIC0gMTsKKworCWlmIChjZikgeworCQlrdl9pbmZvLT5maWxlbmFtZSA9IHN0cmludGVybihjZi0+bmFtZSk7CisJCWt2X2luZm8tPmxpbmVuciA9IGNmLT5saW5lbnI7CisJfSBlbHNlIHsKKwkJLyogZm9yIHZhbHVlcyByZWFkIGZyb20gYGdpdF9jb25maWdfZnJvbV9wYXJhbWV0ZXJzKClgICovCisJCWt2X2luZm8tPmZpbGVuYW1lID0gTlVMTDsKKwkJa3ZfaW5mby0+bGluZW5yID0gLTE7CisJfQorCXNpLT51dGlsID0ga3ZfaW5mbzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbmZpZ19zZXRfZWxlbWVudF9jbXAoY29uc3Qgc3RydWN0IGNvbmZpZ19zZXRfZWxlbWVudCAqZTEsCisJCQkJIGNvbnN0IHN0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgKmUyLCBjb25zdCB2b2lkICp1bnVzZWQpCit7CisJcmV0dXJuIHN0cmNtcChlMS0+a2V5LCBlMi0+a2V5KTsKK30KKwordm9pZCBnaXRfY29uZmlnc2V0X2luaXQoc3RydWN0IGNvbmZpZ19zZXQgKmNzKQoreworCWhhc2htYXBfaW5pdCgmY3MtPmNvbmZpZ19oYXNoLCAoaGFzaG1hcF9jbXBfZm4pY29uZmlnX3NldF9lbGVtZW50X2NtcCwgMCk7CisJY3MtPmhhc2hfaW5pdGlhbGl6ZWQgPSAxOworCWNzLT5saXN0Lm5yID0gMDsKKwljcy0+bGlzdC5hbGxvYyA9IDA7CisJY3MtPmxpc3QuaXRlbXMgPSBOVUxMOworfQorCit2b2lkIGdpdF9jb25maWdzZXRfY2xlYXIoc3RydWN0IGNvbmZpZ19zZXQgKmNzKQoreworCXN0cnVjdCBjb25maWdfc2V0X2VsZW1lbnQgKmVudHJ5OworCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwlpZiAoIWNzLT5oYXNoX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisKKwloYXNobWFwX2l0ZXJfaW5pdCgmY3MtPmNvbmZpZ19oYXNoLCAmaXRlcik7CisJd2hpbGUgKChlbnRyeSA9IGhhc2htYXBfaXRlcl9uZXh0KCZpdGVyKSkpIHsKKwkJZnJlZShlbnRyeS0+a2V5KTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmVudHJ5LT52YWx1ZV9saXN0LCAxKTsKKwl9CisJaGFzaG1hcF9mcmVlKCZjcy0+Y29uZmlnX2hhc2gsIDEpOworCWNzLT5oYXNoX2luaXRpYWxpemVkID0gMDsKKwlmcmVlKGNzLT5saXN0Lml0ZW1zKTsKKwljcy0+bGlzdC5uciA9IDA7CisJY3MtPmxpc3QuYWxsb2MgPSAwOworCWNzLT5saXN0Lml0ZW1zID0gTlVMTDsKK30KKworc3RhdGljIGludCBjb25maWdfc2V0X2NhbGxiYWNrKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBjb25maWdfc2V0ICpjcyA9IGNiOworCWNvbmZpZ3NldF9hZGRfdmFsdWUoY3MsIGtleSwgdmFsdWUpOworCXJldHVybiAwOworfQorCitpbnQgZ2l0X2NvbmZpZ3NldF9hZGRfZmlsZShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXJldHVybiBnaXRfY29uZmlnX2Zyb21fZmlsZShjb25maWdfc2V0X2NhbGxiYWNrLCBmaWxlbmFtZSwgY3MpOworfQorCitpbnQgZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWUoc3RydWN0IGNvbmZpZ19zZXQgKmNzLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKip2YWx1ZSkKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnZhbHVlcyA9IE5VTEw7CisJLyoKKwkgKiBGb2xsb3dzICJsYXN0IG9uZSB3aW5zIiBzZW1hbnRpYywgaS5lLiwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIG1hdGNoZXMgZm9yIHRoZQorCSAqIHF1ZXJpZWQga2V5IGluIHRoZSBmaWxlcyBvZiB0aGUgY29uZmlnc2V0LCB0aGUgdmFsdWUgcmV0dXJuZWQgd2lsbCBiZSB0aGUgbGFzdAorCSAqIHZhbHVlIGluIHRoZSB2YWx1ZSBsaXN0IGZvciB0aGF0IGtleS4KKwkgKi8KKwl2YWx1ZXMgPSBnaXRfY29uZmlnc2V0X2dldF92YWx1ZV9tdWx0aShjcywga2V5KTsKKworCWlmICghdmFsdWVzKQorCQlyZXR1cm4gMTsKKwlhc3NlcnQodmFsdWVzLT5uciA+IDApOworCSp2YWx1ZSA9IHZhbHVlcy0+aXRlbXNbdmFsdWVzLT5uciAtIDFdLnN0cmluZzsKKwlyZXR1cm4gMDsKK30KKworY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpnaXRfY29uZmlnc2V0X2dldF92YWx1ZV9tdWx0aShzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwlzdHJ1Y3QgY29uZmlnX3NldF9lbGVtZW50ICplID0gY29uZmlnc2V0X2ZpbmRfZWxlbWVudChjcywga2V5KTsKKwlyZXR1cm4gZSA/ICZlLT52YWx1ZV9saXN0IDogTlVMTDsKK30KKworaW50IGdpdF9jb25maWdzZXRfZ2V0X3N0cmluZ19jb25zdChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisJaWYgKCFnaXRfY29uZmlnc2V0X2dldF92YWx1ZShjcywga2V5LCAmdmFsdWUpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoZGVzdCwga2V5LCB2YWx1ZSk7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworaW50IGdpdF9jb25maWdzZXRfZ2V0X3N0cmluZyhzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgY2hhciAqKmRlc3QpCit7CisJcmV0dXJuIGdpdF9jb25maWdzZXRfZ2V0X3N0cmluZ19jb25zdChjcywga2V5LCAoY29uc3QgY2hhciAqKilkZXN0KTsKK30KKworaW50IGdpdF9jb25maWdzZXRfZ2V0X2ludChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KQoreworCWNvbnN0IGNoYXIgKnZhbHVlOworCWlmICghZ2l0X2NvbmZpZ3NldF9nZXRfdmFsdWUoY3MsIGtleSwgJnZhbHVlKSkgeworCQkqZGVzdCA9IGdpdF9jb25maWdfaW50KGtleSwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK2ludCBnaXRfY29uZmlnc2V0X2dldF91bG9uZyhzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyAqZGVzdCkKK3sKKwljb25zdCBjaGFyICp2YWx1ZTsKKwlpZiAoIWdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlKGNzLCBrZXksICZ2YWx1ZSkpIHsKKwkJKmRlc3QgPSBnaXRfY29uZmlnX3Vsb25nKGtleSwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK2ludCBnaXRfY29uZmlnc2V0X2dldF9ib29sKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisJaWYgKCFnaXRfY29uZmlnc2V0X2dldF92YWx1ZShjcywga2V5LCAmdmFsdWUpKSB7CisJCSpkZXN0ID0gZ2l0X2NvbmZpZ19ib29sKGtleSwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK2ludCBnaXRfY29uZmlnc2V0X2dldF9ib29sX29yX2ludChzdHJ1Y3QgY29uZmlnX3NldCAqY3MsIGNvbnN0IGNoYXIgKmtleSwKKwkJCQlpbnQgKmlzX2Jvb2wsIGludCAqZGVzdCkKK3sKKwljb25zdCBjaGFyICp2YWx1ZTsKKwlpZiAoIWdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlKGNzLCBrZXksICZ2YWx1ZSkpIHsKKwkJKmRlc3QgPSBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsIGlzX2Jvb2wpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK2ludCBnaXRfY29uZmlnc2V0X2dldF9tYXliZV9ib29sKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBpbnQgKmRlc3QpCit7CisJY29uc3QgY2hhciAqdmFsdWU7CisJaWYgKCFnaXRfY29uZmlnc2V0X2dldF92YWx1ZShjcywga2V5LCAmdmFsdWUpKSB7CisJCSpkZXN0ID0gZ2l0X2NvbmZpZ19tYXliZV9ib29sKGtleSwgdmFsdWUpOworCQlpZiAoKmRlc3QgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0gZWxzZQorCQlyZXR1cm4gMTsKK30KKworaW50IGdpdF9jb25maWdzZXRfZ2V0X3BhdGhuYW1lKHN0cnVjdCBjb25maWdfc2V0ICpjcywgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCkKK3sKKwljb25zdCBjaGFyICp2YWx1ZTsKKwlpZiAoIWdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlKGNzLCBrZXksICZ2YWx1ZSkpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKGRlc3QsIGtleSwgdmFsdWUpOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9jb25maWdfY2hlY2tfaW5pdCh2b2lkKQoreworCWlmICh0aGVfY29uZmlnX3NldC5oYXNoX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisJZ2l0X2NvbmZpZ3NldF9pbml0KCZ0aGVfY29uZmlnX3NldCk7CisJZ2l0X2NvbmZpZ19yYXcoY29uZmlnX3NldF9jYWxsYmFjaywgJnRoZV9jb25maWdfc2V0KTsKK30KKwordm9pZCBnaXRfY29uZmlnX2NsZWFyKHZvaWQpCit7CisJaWYgKCF0aGVfY29uZmlnX3NldC5oYXNoX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisJZ2l0X2NvbmZpZ3NldF9jbGVhcigmdGhlX2NvbmZpZ19zZXQpOworfQorCitpbnQgZ2l0X2NvbmZpZ19nZXRfdmFsdWUoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqdmFsdWUpCit7CisJZ2l0X2NvbmZpZ19jaGVja19pbml0KCk7CisJcmV0dXJuIGdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlKCZ0aGVfY29uZmlnX3NldCwga2V5LCB2YWx1ZSk7Cit9CisKK2NvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2l0X2NvbmZpZ19nZXRfdmFsdWVfbXVsdGkoY29uc3QgY2hhciAqa2V5KQoreworCWdpdF9jb25maWdfY2hlY2tfaW5pdCgpOworCXJldHVybiBnaXRfY29uZmlnc2V0X2dldF92YWx1ZV9tdWx0aSgmdGhlX2NvbmZpZ19zZXQsIGtleSk7Cit9CisKK2ludCBnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3QoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICoqZGVzdCkKK3sKKwlpbnQgcmV0OworCWdpdF9jb25maWdfY2hlY2tfaW5pdCgpOworCXJldCA9IGdpdF9jb25maWdzZXRfZ2V0X3N0cmluZ19jb25zdCgmdGhlX2NvbmZpZ19zZXQsIGtleSwgZGVzdCk7CisJaWYgKHJldCA8IDApCisJCWdpdF9kaWVfY29uZmlnKGtleSwgTlVMTCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGdpdF9jb25maWdfZ2V0X3N0cmluZyhjb25zdCBjaGFyICprZXksIGNoYXIgKipkZXN0KQoreworCWdpdF9jb25maWdfY2hlY2tfaW5pdCgpOworCXJldHVybiBnaXRfY29uZmlnX2dldF9zdHJpbmdfY29uc3Qoa2V5LCAoY29uc3QgY2hhciAqKilkZXN0KTsKK30KKworaW50IGdpdF9jb25maWdfZ2V0X2ludChjb25zdCBjaGFyICprZXksIGludCAqZGVzdCkKK3sKKwlnaXRfY29uZmlnX2NoZWNrX2luaXQoKTsKKwlyZXR1cm4gZ2l0X2NvbmZpZ3NldF9nZXRfaW50KCZ0aGVfY29uZmlnX3NldCwga2V5LCBkZXN0KTsKK30KKworaW50IGdpdF9jb25maWdfZ2V0X3Vsb25nKGNvbnN0IGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyAqZGVzdCkKK3sKKwlnaXRfY29uZmlnX2NoZWNrX2luaXQoKTsKKwlyZXR1cm4gZ2l0X2NvbmZpZ3NldF9nZXRfdWxvbmcoJnRoZV9jb25maWdfc2V0LCBrZXksIGRlc3QpOworfQorCitpbnQgZ2l0X2NvbmZpZ19nZXRfYm9vbChjb25zdCBjaGFyICprZXksIGludCAqZGVzdCkKK3sKKwlnaXRfY29uZmlnX2NoZWNrX2luaXQoKTsKKwlyZXR1cm4gZ2l0X2NvbmZpZ3NldF9nZXRfYm9vbCgmdGhlX2NvbmZpZ19zZXQsIGtleSwgZGVzdCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2dldF9ib29sX29yX2ludChjb25zdCBjaGFyICprZXksIGludCAqaXNfYm9vbCwgaW50ICpkZXN0KQoreworCWdpdF9jb25maWdfY2hlY2tfaW5pdCgpOworCXJldHVybiBnaXRfY29uZmlnc2V0X2dldF9ib29sX29yX2ludCgmdGhlX2NvbmZpZ19zZXQsIGtleSwgaXNfYm9vbCwgZGVzdCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2dldF9tYXliZV9ib29sKGNvbnN0IGNoYXIgKmtleSwgaW50ICpkZXN0KQoreworCWdpdF9jb25maWdfY2hlY2tfaW5pdCgpOworCXJldHVybiBnaXRfY29uZmlnc2V0X2dldF9tYXliZV9ib29sKCZ0aGVfY29uZmlnX3NldCwga2V5LCBkZXN0KTsKK30KKworaW50IGdpdF9jb25maWdfZ2V0X3BhdGhuYW1lKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqKmRlc3QpCit7CisJaW50IHJldDsKKwlnaXRfY29uZmlnX2NoZWNrX2luaXQoKTsKKwlyZXQgPSBnaXRfY29uZmlnc2V0X2dldF9wYXRobmFtZSgmdGhlX2NvbmZpZ19zZXQsIGtleSwgZGVzdCk7CisJaWYgKHJldCA8IDApCisJCWdpdF9kaWVfY29uZmlnKGtleSwgTlVMTCk7CisJcmV0dXJuIHJldDsKK30KKworTk9SRVRVUk4KK3ZvaWQgZ2l0X2RpZV9jb25maWdfbGluZW5yKGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbnIpCit7CisJaWYgKCFmaWxlbmFtZSkKKwkJZGllKF8oInVuYWJsZSB0byBwYXJzZSAnJXMnIGZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIpLCBrZXkpOworCWVsc2UKKwkJZGllKF8oImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyBpbiBmaWxlICclcycgYXQgbGluZSAlZCIpLAorCQkgICAga2V5LCBmaWxlbmFtZSwgbGluZW5yKTsKK30KKworTk9SRVRVUk4gX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZiwgMiwgMykpKQordm9pZCBnaXRfZGllX2NvbmZpZyhjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqdmFsdWVzOworCXN0cnVjdCBrZXlfdmFsdWVfaW5mbyAqa3ZfaW5mbzsKKworCWlmIChlcnIpIHsKKwkJdmFfbGlzdCBwYXJhbXM7CisJCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwkJdnJlcG9ydGYoImVycm9yOiAiLCBlcnIsIHBhcmFtcyk7CisJCXZhX2VuZChwYXJhbXMpOworCX0KKwl2YWx1ZXMgPSBnaXRfY29uZmlnX2dldF92YWx1ZV9tdWx0aShrZXkpOworCWt2X2luZm8gPSB2YWx1ZXMtPml0ZW1zW3ZhbHVlcy0+bnIgLSAxXS51dGlsOworCWdpdF9kaWVfY29uZmlnX2xpbmVucihrZXksIGt2X2luZm8tPmZpbGVuYW1lLCBrdl9pbmZvLT5saW5lbnIpOworfQorCisvKgorICogRmluZCBhbGwgdGhlIHN0dWZmIGZvciBnaXRfY29uZmlnX3NldCgpIGJlbG93LgorICovCisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCBiYXNlbGVuOworCWNoYXIgKmtleTsKKwlpbnQgZG9fbm90X21hdGNoOworCXJlZ2V4X3QgKnZhbHVlX3JlZ2V4OworCWludCBtdWx0aV9yZXBsYWNlOworCXNpemVfdCAqb2Zmc2V0OworCXVuc2lnbmVkIGludCBvZmZzZXRfYWxsb2M7CisJZW51bSB7IFNUQVJULCBTRUNUSU9OX1NFRU4sIFNFQ1RJT05fRU5EX1NFRU4sIEtFWV9TRUVOIH0gc3RhdGU7CisJaW50IHNlZW47Cit9IHN0b3JlOworCitzdGF0aWMgaW50IG1hdGNoZXMoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoc3RyY21wKGtleSwgc3RvcmUua2V5KSkKKwkJcmV0dXJuIDA7IC8qIG5vdCBvdXJzICovCisJaWYgKCFzdG9yZS52YWx1ZV9yZWdleCkKKwkJcmV0dXJuIDE7IC8qIGFsd2F5cyBtYXRjaGVzICovCisJaWYgKHN0b3JlLnZhbHVlX3JlZ2V4ID09IENPTkZJR19SRUdFWF9OT05FKQorCQlyZXR1cm4gMDsgLyogbmV2ZXIgbWF0Y2hlcyAqLworCisJcmV0dXJuIHN0b3JlLmRvX25vdF9tYXRjaCBeCisJCSh2YWx1ZSAmJiAhcmVnZXhlYyhzdG9yZS52YWx1ZV9yZWdleCwgdmFsdWUsIDAsIE5VTEwsIDApKTsKK30KKworc3RhdGljIGludCBzdG9yZV9hdXgoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqZXA7CisJc2l6ZV90IHNlY3Rpb25fbGVuOworCisJc3dpdGNoIChzdG9yZS5zdGF0ZSkgeworCWNhc2UgS0VZX1NFRU46CisJCWlmIChtYXRjaGVzKGtleSwgdmFsdWUpKSB7CisJCQlpZiAoc3RvcmUuc2VlbiA9PSAxICYmIHN0b3JlLm11bHRpX3JlcGxhY2UgPT0gMCkgeworCQkJCXdhcm5pbmcoXygiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIpLCBrZXkpOworCQkJfQorCisJCQlBTExPQ19HUk9XKHN0b3JlLm9mZnNldCwgc3RvcmUuc2VlbiArIDEsCisJCQkJICAgc3RvcmUub2Zmc2V0X2FsbG9jKTsKKworCQkJc3RvcmUub2Zmc2V0W3N0b3JlLnNlZW5dID0gY2YtPmRvX2Z0ZWxsKGNmKTsKKwkJCXN0b3JlLnNlZW4rKzsKKwkJfQorCQlicmVhazsKKwljYXNlIFNFQ1RJT05fU0VFTjoKKwkJLyoKKwkJICogV2hhdCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgaW4gc3RvcmUua2V5IChib3RoCisJCSAqIHNlY3Rpb24gYW5kIHZhciksIGFuZCBpdHMgc2VjdGlvbiBwYXJ0IGlzIGJhc2VsZW4KKwkJICogbG9uZy4gIFdlIGZvdW5kIGtleSAoYWdhaW4sIGJvdGggc2VjdGlvbiBhbmQgdmFyKS4KKwkJICogV2Ugd291bGQgd2FudCB0byBrbm93IGlmIHRoaXMga2V5IGlzIGluIHRoZSBzYW1lCisJCSAqIHNlY3Rpb24gYXMgd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IuICBXZSBhbHJlYWR5CisJCSAqIGtub3cgd2UgYXJlIGluIHRoZSBzYW1lIHNlY3Rpb24gYXMgd2hhdCBzaG91bGQKKwkJICogaG9sZCBzdG9yZS5rZXkuCisJCSAqLworCQllcCA9IHN0cnJjaHIoa2V5LCAnLicpOworCQlzZWN0aW9uX2xlbiA9IGVwIC0ga2V5OworCisJCWlmICgoc2VjdGlvbl9sZW4gIT0gc3RvcmUuYmFzZWxlbikgfHwKKwkJICAgIG1lbWNtcChrZXksIHN0b3JlLmtleSwgc2VjdGlvbl9sZW4rMSkpIHsKKwkJCXN0b3JlLnN0YXRlID0gU0VDVElPTl9FTkRfU0VFTjsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogRG8gbm90IGluY3JlbWVudCBtYXRjaGVzOiB0aGlzIGlzIG5vIG1hdGNoLCBidXQgd2UKKwkJICoganVzdCBtYWRlIHN1cmUgd2UgYXJlIGluIHRoZSBkZXNpcmVkIHNlY3Rpb24uCisJCSAqLworCQlBTExPQ19HUk9XKHN0b3JlLm9mZnNldCwgc3RvcmUuc2VlbiArIDEsCisJCQkgICBzdG9yZS5vZmZzZXRfYWxsb2MpOworCQlzdG9yZS5vZmZzZXRbc3RvcmUuc2Vlbl0gPSBjZi0+ZG9fZnRlbGwoY2YpOworCQkvKiBmYWxsdGhydSAqLworCWNhc2UgU0VDVElPTl9FTkRfU0VFTjoKKwljYXNlIFNUQVJUOgorCQlpZiAobWF0Y2hlcyhrZXksIHZhbHVlKSkgeworCQkJQUxMT0NfR1JPVyhzdG9yZS5vZmZzZXQsIHN0b3JlLnNlZW4gKyAxLAorCQkJCSAgIHN0b3JlLm9mZnNldF9hbGxvYyk7CisJCQlzdG9yZS5vZmZzZXRbc3RvcmUuc2Vlbl0gPSBjZi0+ZG9fZnRlbGwoY2YpOworCQkJc3RvcmUuc3RhdGUgPSBLRVlfU0VFTjsKKwkJCXN0b3JlLnNlZW4rKzsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdHJyY2hyKGtleSwgJy4nKSAtIGtleSA9PSBzdG9yZS5iYXNlbGVuICYmCisJCQkgICAgICAhc3RybmNtcChrZXksIHN0b3JlLmtleSwgc3RvcmUuYmFzZWxlbikpIHsKKwkJCQkJc3RvcmUuc3RhdGUgPSBTRUNUSU9OX1NFRU47CisJCQkJCUFMTE9DX0dST1coc3RvcmUub2Zmc2V0LAorCQkJCQkJICAgc3RvcmUuc2VlbiArIDEsCisJCQkJCQkgICBzdG9yZS5vZmZzZXRfYWxsb2MpOworCQkJCQlzdG9yZS5vZmZzZXRbc3RvcmUuc2Vlbl0gPSBjZi0+ZG9fZnRlbGwoY2YpOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX2Vycm9yKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWVycm9yKCJmYWlsZWQgdG8gd3JpdGUgbmV3IGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIsIGZpbGVuYW1lKTsKKworCS8qIFNhbWUgZXJyb3IgY29kZSBhcyAiZmFpbGVkIHRvIHJlbmFtZSIuICovCisJcmV0dXJuIDQ7Cit9CisKK3N0YXRpYyBpbnQgc3RvcmVfd3JpdGVfc2VjdGlvbihpbnQgZmQsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwljb25zdCBjaGFyICpkb3Q7CisJaW50IGksIHN1Y2Nlc3M7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZG90ID0gbWVtY2hyKGtleSwgJy4nLCBzdG9yZS5iYXNlbGVuKTsKKwlpZiAoZG90KSB7CisJCXN0cmJ1Zl9hZGRmKCZzYiwgIlslLipzIFwiIiwgKGludCkoZG90IC0ga2V5KSwga2V5KTsKKwkJZm9yIChpID0gZG90IC0ga2V5ICsgMTsgaSA8IHN0b3JlLmJhc2VsZW47IGkrKykgeworCQkJaWYgKGtleVtpXSA9PSAnIicgfHwga2V5W2ldID09ICdcXCcpCisJCQkJc3RyYnVmX2FkZGNoKCZzYiwgJ1xcJyk7CisJCQlzdHJidWZfYWRkY2goJnNiLCBrZXlbaV0pOworCQl9CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCAiXCJdXG4iKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZigmc2IsICJbJS4qc11cbiIsIHN0b3JlLmJhc2VsZW4sIGtleSk7CisJfQorCisJc3VjY2VzcyA9IHdyaXRlX2luX2Z1bGwoZmQsIHNiLmJ1Ziwgc2IubGVuKSA9PSBzYi5sZW47CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKworCXJldHVybiBzdWNjZXNzOworfQorCitzdGF0aWMgaW50IHN0b3JlX3dyaXRlX3BhaXIoaW50IGZkLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCBpLCBzdWNjZXNzOworCWludCBsZW5ndGggPSBzdHJsZW4oa2V5ICsgc3RvcmUuYmFzZWxlbiArIDEpOworCWNvbnN0IGNoYXIgKnF1b3RlID0gIiI7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJLyoKKwkgKiBDaGVjayB0byBzZWUgaWYgdGhlIHZhbHVlIG5lZWRzIHRvIGJlIHN1cnJvdW5kZWQgd2l0aCBhIGRxIHBhaXIuCisJICogTm90ZSB0aGF0IHByb2JsZW1hdGljIGNoYXJhY3RlcnMgYXJlIGFsd2F5cyBiYWNrc2xhc2gtcXVvdGVkOyB0aGlzCisJICogY2hlY2sgaXMgYWJvdXQgbm90IGxvc2luZyBsZWFkaW5nIG9yIHRyYWlsaW5nIFNQIGFuZCBzdHJpbmdzIHRoYXQKKwkgKiBmb2xsb3cgYmVnaW5uaW5nLW9mLWNvbW1lbnQgY2hhcmFjdGVycyAoaS5lLiAnOycgYW5kICcjJykgYnkgdGhlCisJICogY29uZmlndXJhdGlvbiBwYXJzZXIuCisJICovCisJaWYgKHZhbHVlWzBdID09ICcgJykKKwkJcXVvdGUgPSAiXCIiOworCWZvciAoaSA9IDA7IHZhbHVlW2ldOyBpKyspCisJCWlmICh2YWx1ZVtpXSA9PSAnOycgfHwgdmFsdWVbaV0gPT0gJyMnKQorCQkJcXVvdGUgPSAiXCIiOworCWlmIChpICYmIHZhbHVlW2kgLSAxXSA9PSAnICcpCisJCXF1b3RlID0gIlwiIjsKKworCXN0cmJ1Zl9hZGRmKCZzYiwgIlx0JS4qcyA9ICVzIiwKKwkJICAgIGxlbmd0aCwga2V5ICsgc3RvcmUuYmFzZWxlbiArIDEsIHF1b3RlKTsKKworCWZvciAoaSA9IDA7IHZhbHVlW2ldOyBpKyspCisJCXN3aXRjaCAodmFsdWVbaV0pIHsKKwkJY2FzZSAnXG4nOgorCQkJc3RyYnVmX2FkZHN0cigmc2IsICJcXG4iKTsKKwkJCWJyZWFrOworCQljYXNlICdcdCc6CisJCQlzdHJidWZfYWRkc3RyKCZzYiwgIlxcdCIpOworCQkJYnJlYWs7CisJCWNhc2UgJyInOgorCQljYXNlICdcXCc6CisJCQlzdHJidWZfYWRkY2goJnNiLCAnXFwnKTsKKwkJZGVmYXVsdDoKKwkJCXN0cmJ1Zl9hZGRjaCgmc2IsIHZhbHVlW2ldKTsKKwkJCWJyZWFrOworCQl9CisJc3RyYnVmX2FkZGYoJnNiLCAiJXNcbiIsIHF1b3RlKTsKKworCXN1Y2Nlc3MgPSB3cml0ZV9pbl9mdWxsKGZkLCBzYi5idWYsIHNiLmxlbikgPT0gc2IubGVuOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlyZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIHNzaXplX3QgZmluZF9iZWdpbm5pbmdfb2ZfbGluZShjb25zdCBjaGFyICpjb250ZW50cywgc2l6ZV90IHNpemUsCisJc2l6ZV90IG9mZnNldF8sIGludCAqZm91bmRfYnJhY2tldCkKK3sKKwlzaXplX3QgZXF1YWxfb2Zmc2V0ID0gc2l6ZSwgYnJhY2tldF9vZmZzZXQgPSBzaXplOworCXNzaXplX3Qgb2Zmc2V0OworCitjb250bGluZToKKwlmb3IgKG9mZnNldCA9IG9mZnNldF8tMjsgb2Zmc2V0ID4gMAorCQkJJiYgY29udGVudHNbb2Zmc2V0XSAhPSAnXG4nOyBvZmZzZXQtLSkKKwkJc3dpdGNoIChjb250ZW50c1tvZmZzZXRdKSB7CisJCQljYXNlICc9JzogZXF1YWxfb2Zmc2V0ID0gb2Zmc2V0OyBicmVhazsKKwkJCWNhc2UgJ10nOiBicmFja2V0X29mZnNldCA9IG9mZnNldDsgYnJlYWs7CisJCX0KKwlpZiAob2Zmc2V0ID4gMCAmJiBjb250ZW50c1tvZmZzZXQtMV0gPT0gJ1xcJykgeworCQlvZmZzZXRfID0gb2Zmc2V0OworCQlnb3RvIGNvbnRsaW5lOworCX0KKwlpZiAoYnJhY2tldF9vZmZzZXQgPCBlcXVhbF9vZmZzZXQpIHsKKwkJKmZvdW5kX2JyYWNrZXQgPSAxOworCQlvZmZzZXQgPSBicmFja2V0X29mZnNldCsxOworCX0gZWxzZQorCQlvZmZzZXQrKzsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKK2ludCBnaXRfY29uZmlnX3NldF9pbl9maWxlKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSwKKwkJCWNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoY29uZmlnX2ZpbGVuYW1lLCBrZXksIHZhbHVlLCBOVUxMLCAwKTsKK30KKworaW50IGdpdF9jb25maWdfc2V0KGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJcmV0dXJuIGdpdF9jb25maWdfc2V0X211bHRpdmFyKGtleSwgdmFsdWUsIE5VTEwsIDApOworfQorCisvKgorICogQXV4aWxpYXJ5IGZ1bmN0aW9uIHRvIHNhbml0eS1jaGVjayBhbmQgc3BsaXQgdGhlIGtleSBpbnRvIHRoZSBzZWN0aW9uCisgKiBpZGVudGlmaWVyIGFuZCB2YXJpYWJsZSBuYW1lLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSB3aGVuIHRoZXJlIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIGluIHRoZSBrZXkgYW5kCisgKiAtMiBpZiB0aGVyZSBpcyBubyBzZWN0aW9uIG5hbWUgaW4gdGhlIGtleS4KKyAqCisgKiBzdG9yZV9rZXkgLSBwb2ludGVyIHRvIGNoYXIqIHdoaWNoIHdpbGwgaG9sZCBhIGNvcHkgb2YgdGhlIGtleSB3aXRoCisgKiAgICAgICAgICAgICBsb3dlcmNhc2Ugc2VjdGlvbiBhbmQgdmFyaWFibGUgbmFtZQorICogYmFzZWxlbiAtIHBvaW50ZXIgdG8gaW50IHdoaWNoIHdpbGwgaG9sZCB0aGUgbGVuZ3RoIG9mIHRoZQorICogICAgICAgICAgIHNlY3Rpb24gKyBzdWJzZWN0aW9uIHBhcnQsIGNhbiBiZSBOVUxMCisgKi8KK3N0YXRpYyBpbnQgZ2l0X2NvbmZpZ19wYXJzZV9rZXlfMShjb25zdCBjaGFyICprZXksIGNoYXIgKipzdG9yZV9rZXksIGludCAqYmFzZWxlbl8sIGludCBxdWlldCkKK3sKKwlpbnQgaSwgZG90LCBiYXNlbGVuOworCWNvbnN0IGNoYXIgKmxhc3RfZG90ID0gc3RycmNocihrZXksICcuJyk7CisKKwkvKgorCSAqIFNpbmNlICJrZXkiIGFjdHVhbGx5IGNvbnRhaW5zIHRoZSBzZWN0aW9uIG5hbWUgYW5kIHRoZSByZWFsCisJICoga2V5IG5hbWUgc2VwYXJhdGVkIGJ5IGEgZG90LCB3ZSBoYXZlIHRvIGtub3cgd2hlcmUgdGhlIGRvdCBpcy4KKwkgKi8KKworCWlmIChsYXN0X2RvdCA9PSBOVUxMIHx8IGxhc3RfZG90ID09IGtleSkgeworCQlpZiAoIXF1aWV0KQorCQkJZXJyb3IoImtleSBkb2VzIG5vdCBjb250YWluIGEgc2VjdGlvbjogJXMiLCBrZXkpOworCQlyZXR1cm4gLUNPTkZJR19OT19TRUNUSU9OX09SX05BTUU7CisJfQorCisJaWYgKCFsYXN0X2RvdFsxXSkgeworCQlpZiAoIXF1aWV0KQorCQkJZXJyb3IoImtleSBkb2VzIG5vdCBjb250YWluIHZhcmlhYmxlIG5hbWU6ICVzIiwga2V5KTsKKwkJcmV0dXJuIC1DT05GSUdfTk9fU0VDVElPTl9PUl9OQU1FOworCX0KKworCWJhc2VsZW4gPSBsYXN0X2RvdCAtIGtleTsKKwlpZiAoYmFzZWxlbl8pCisJCSpiYXNlbGVuXyA9IGJhc2VsZW47CisKKwkvKgorCSAqIFZhbGlkYXRlIHRoZSBrZXkgYW5kIHdoaWxlIGF0IGl0LCBsb3dlciBjYXNlIGl0IGZvciBtYXRjaGluZy4KKwkgKi8KKwlpZiAoc3RvcmVfa2V5KQorCQkqc3RvcmVfa2V5ID0geG1hbGxvYyhzdHJsZW4oa2V5KSArIDEpOworCisJZG90ID0gMDsKKwlmb3IgKGkgPSAwOyBrZXlbaV07IGkrKykgeworCQl1bnNpZ25lZCBjaGFyIGMgPSBrZXlbaV07CisJCWlmIChjID09ICcuJykKKwkJCWRvdCA9IDE7CisJCS8qIExlYXZlIHRoZSBleHRlbmRlZCBiYXNlbmFtZSB1bnRvdWNoZWQuLiAqLworCQlpZiAoIWRvdCB8fCBpID4gYmFzZWxlbikgeworCQkJaWYgKCFpc2tleWNoYXIoYykgfHwKKwkJCSAgICAoaSA9PSBiYXNlbGVuICsgMSAmJiAhaXNhbHBoYShjKSkpIHsKKwkJCQlpZiAoIXF1aWV0KQorCQkJCQllcnJvcigiaW52YWxpZCBrZXk6ICVzIiwga2V5KTsKKwkJCQlnb3RvIG91dF9mcmVlX3JldF8xOworCQkJfQorCQkJYyA9IHRvbG93ZXIoYyk7CisJCX0gZWxzZSBpZiAoYyA9PSAnXG4nKSB7CisJCQlpZiAoIXF1aWV0KQorCQkJCWVycm9yKCJpbnZhbGlkIGtleSAobmV3bGluZSk6ICVzIiwga2V5KTsKKwkJCWdvdG8gb3V0X2ZyZWVfcmV0XzE7CisJCX0KKwkJaWYgKHN0b3JlX2tleSkKKwkJCSgqc3RvcmVfa2V5KVtpXSA9IGM7CisJfQorCWlmIChzdG9yZV9rZXkpCisJCSgqc3RvcmVfa2V5KVtpXSA9IDA7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfcmV0XzE6CisJaWYgKHN0b3JlX2tleSkgeworCQlmcmVlKCpzdG9yZV9rZXkpOworCQkqc3RvcmVfa2V5ID0gTlVMTDsKKwl9CisJcmV0dXJuIC1DT05GSUdfSU5WQUxJRF9LRVk7Cit9CisKK2ludCBnaXRfY29uZmlnX3BhcnNlX2tleShjb25zdCBjaGFyICprZXksIGNoYXIgKipzdG9yZV9rZXksIGludCAqYmFzZWxlbikKK3sKKwlyZXR1cm4gZ2l0X2NvbmZpZ19wYXJzZV9rZXlfMShrZXksIHN0b3JlX2tleSwgYmFzZWxlbiwgMCk7Cit9CisKK2ludCBnaXRfY29uZmlnX2tleV9pc192YWxpZChjb25zdCBjaGFyICprZXkpCit7CisJcmV0dXJuICFnaXRfY29uZmlnX3BhcnNlX2tleV8xKGtleSwgTlVMTCwgTlVMTCwgMSk7Cit9CisKKy8qCisgKiBJZiB2YWx1ZT09TlVMTCwgdW5zZXQgaW4gKHJlbW92ZSBmcm9tKSBjb25maWcsCisgKiBpZiB2YWx1ZV9yZWdleCE9TlVMTCwgZGlzcmVnYXJkIGtleS92YWx1ZSBwYWlycyB3aGVyZSB2YWx1ZSBkb2VzIG5vdCBtYXRjaC4KKyAqIGlmIHZhbHVlX3JlZ2V4PT1DT05GSUdfUkVHRVhfTk9ORSwgZG8gbm90IG1hdGNoIGFueSBleGlzdGluZyB2YWx1ZXMKKyAqICAgICAob25seSBhZGQgYSBuZXcgb25lKQorICogaWYgbXVsdGlfcmVwbGFjZT09MCwgbm90aGluZywgb3Igb25seSBvbmUgbWF0Y2hpbmcga2V5L3ZhbHVlIGlzIHJlcGxhY2VkLAorICogICAgIGVsc2UgYWxsIG1hdGNoaW5nIGtleS92YWx1ZXMgKHJlZ2FyZGxlc3MgaG93IG1hbnkpIGFyZSByZW1vdmVkLAorICogICAgIGJlZm9yZSB0aGUgbmV3IHBhaXIgaXMgd3JpdHRlbi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhpczoKKyAqCisgKiAtIGl0IGxvY2tzIHRoZSBjb25maWcgZmlsZSBieSBjcmVhdGluZyAiLmdpdC9jb25maWcubG9jayIKKyAqCisgKiAtIGl0IHRoZW4gcGFyc2VzIHRoZSBjb25maWcgdXNpbmcgc3RvcmVfYXV4KCkgYXMgdmFsaWRhdG9yIHRvIGZpbmQKKyAqICAgdGhlIHBvc2l0aW9uIG9uIHRoZSBrZXkvdmFsdWUgcGFpciB0byByZXBsYWNlLiBJZiBpdCBpcyB0byBiZSB1bnNldCwKKyAqICAgaXQgbXVzdCBiZSBmb3VuZCBleGFjdGx5IG9uY2UuCisgKgorICogLSB0aGUgY29uZmlnIGZpbGUgaXMgbW1hcCgpZWQgYW5kIHRoZSBwYXJ0IGJlZm9yZSB0aGUgbWF0Y2ggKGlmIGFueSkgaXMKKyAqICAgd3JpdHRlbiB0byB0aGUgbG9jayBmaWxlLCB0aGVuIHRoZSBjaGFuZ2VkIHBhcnQgYW5kIHRoZSByZXN0LgorICoKKyAqIC0gdGhlIGNvbmZpZyBmaWxlIGlzIHJlbW92ZWQgYW5kIHRoZSBsb2NrIGZpbGUgcmVuYW1lKClkIHRvIGl0LgorICoKKyAqLworaW50IGdpdF9jb25maWdfc2V0X211bHRpdmFyX2luX2ZpbGUoY29uc3QgY2hhciAqY29uZmlnX2ZpbGVuYW1lLAorCQkJCWNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUsCisJCQkJY29uc3QgY2hhciAqdmFsdWVfcmVnZXgsIGludCBtdWx0aV9yZXBsYWNlKQoreworCWludCBmZCA9IC0xLCBpbl9mZCA9IC0xOworCWludCByZXQ7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9jayA9IE5VTEw7CisJY2hhciAqZmlsZW5hbWVfYnVmID0gTlVMTDsKKwljaGFyICpjb250ZW50cyA9IE5VTEw7CisJc2l6ZV90IGNvbnRlbnRzX3N6OworCisJLyogcGFyc2Uta2V5IHJldHVybnMgbmVnYXRpdmU7IGZsaXAgdGhlIHNpZ24gdG8gZmVlZCBleGl0KDMpICovCisJcmV0ID0gMCAtIGdpdF9jb25maWdfcGFyc2Vfa2V5KGtleSwgJnN0b3JlLmtleSwgJnN0b3JlLmJhc2VsZW4pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlzdG9yZS5tdWx0aV9yZXBsYWNlID0gbXVsdGlfcmVwbGFjZTsKKworCWlmICghY29uZmlnX2ZpbGVuYW1lKQorCQljb25maWdfZmlsZW5hbWUgPSBmaWxlbmFtZV9idWYgPSBnaXRfcGF0aGR1cCgiY29uZmlnIik7CisKKwkvKgorCSAqIFRoZSBsb2NrIHNlcnZlcyBhIHB1cnBvc2UgaW4gYWRkaXRpb24gdG8gbG9ja2luZzogdGhlIG5ldworCSAqIGNvbnRlbnRzIG9mIC5naXQvY29uZmlnIHdpbGwgYmUgd3JpdHRlbiBpbnRvIGl0LgorCSAqLworCWxvY2sgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisJZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKGxvY2ssIGNvbmZpZ19maWxlbmFtZSwgMCk7CisJaWYgKGZkIDwgMCkgeworCQllcnJvcigiY291bGQgbm90IGxvY2sgY29uZmlnIGZpbGUgJXM6ICVzIiwgY29uZmlnX2ZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlmcmVlKHN0b3JlLmtleSk7CisJCXJldCA9IENPTkZJR19OT19MT0NLOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCS8qCisJICogSWYgLmdpdC9jb25maWcgZG9lcyBub3QgZXhpc3QgeWV0LCB3cml0ZSBhIG1pbmltYWwgdmVyc2lvbi4KKwkgKi8KKwlpbl9mZCA9IG9wZW4oY29uZmlnX2ZpbGVuYW1lLCBPX1JET05MWSk7CisJaWYgKCBpbl9mZCA8IDAgKSB7CisJCWZyZWUoc3RvcmUua2V5KTsKKworCQlpZiAoIEVOT0VOVCAhPSBlcnJubyApIHsKKwkJCWVycm9yKCJvcGVuaW5nICVzOiAlcyIsIGNvbmZpZ19maWxlbmFtZSwKKwkJCSAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXQgPSBDT05GSUdfSU5WQUxJRF9GSUxFOyAvKiBzYW1lIGFzICJpbnZhbGlkIGNvbmZpZyBmaWxlIiAqLworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCQkvKiBpZiBub3RoaW5nIHRvIHVuc2V0LCBlcnJvciBvdXQgKi8KKwkJaWYgKHZhbHVlID09IE5VTEwpIHsKKwkJCXJldCA9IENPTkZJR19OT1RISU5HX1NFVDsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKworCQlzdG9yZS5rZXkgPSAoY2hhciAqKWtleTsKKwkJaWYgKCFzdG9yZV93cml0ZV9zZWN0aW9uKGZkLCBrZXkpIHx8CisJCSAgICAhc3RvcmVfd3JpdGVfcGFpcihmZCwga2V5LCB2YWx1ZSkpCisJCQlnb3RvIHdyaXRlX2Vycl9vdXQ7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCXNpemVfdCBjb3B5X2JlZ2luLCBjb3B5X2VuZDsKKwkJaW50IGksIG5ld19saW5lID0gMDsKKworCQlpZiAodmFsdWVfcmVnZXggPT0gTlVMTCkKKwkJCXN0b3JlLnZhbHVlX3JlZ2V4ID0gTlVMTDsKKwkJZWxzZSBpZiAodmFsdWVfcmVnZXggPT0gQ09ORklHX1JFR0VYX05PTkUpCisJCQlzdG9yZS52YWx1ZV9yZWdleCA9IENPTkZJR19SRUdFWF9OT05FOworCQllbHNlIHsKKwkJCWlmICh2YWx1ZV9yZWdleFswXSA9PSAnIScpIHsKKwkJCQlzdG9yZS5kb19ub3RfbWF0Y2ggPSAxOworCQkJCXZhbHVlX3JlZ2V4Kys7CisJCQl9IGVsc2UKKwkJCQlzdG9yZS5kb19ub3RfbWF0Y2ggPSAwOworCisJCQlzdG9yZS52YWx1ZV9yZWdleCA9IChyZWdleF90Kil4bWFsbG9jKHNpemVvZihyZWdleF90KSk7CisJCQlpZiAocmVnY29tcChzdG9yZS52YWx1ZV9yZWdleCwgdmFsdWVfcmVnZXgsCisJCQkJCVJFR19FWFRFTkRFRCkpIHsKKwkJCQllcnJvcigiaW52YWxpZCBwYXR0ZXJuOiAlcyIsIHZhbHVlX3JlZ2V4KTsKKwkJCQlmcmVlKHN0b3JlLnZhbHVlX3JlZ2V4KTsKKwkJCQlyZXQgPSBDT05GSUdfSU5WQUxJRF9QQVRURVJOOworCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQl9CisJCX0KKworCQlBTExPQ19HUk9XKHN0b3JlLm9mZnNldCwgMSwgc3RvcmUub2Zmc2V0X2FsbG9jKTsKKwkJc3RvcmUub2Zmc2V0WzBdID0gMDsKKwkJc3RvcmUuc3RhdGUgPSBTVEFSVDsKKwkJc3RvcmUuc2VlbiA9IDA7CisKKwkJLyoKKwkJICogQWZ0ZXIgdGhpcywgc3RvcmUub2Zmc2V0IHdpbGwgY29udGFpbiB0aGUgKmVuZCogb2Zmc2V0CisJCSAqIG9mIHRoZSBsYXN0IG1hdGNoLCBvciByZW1haW4gYXQgMCBpZiBubyBtYXRjaCB3YXMgZm91bmQuCisJCSAqIEFzIGEgc2lkZSBlZmZlY3QsIHdlIG1ha2Ugc3VyZSB0byB0cmFuc2Zvcm0gb25seSBhIHZhbGlkCisJCSAqIGV4aXN0aW5nIGNvbmZpZyBmaWxlLgorCQkgKi8KKwkJaWYgKGdpdF9jb25maWdfZnJvbV9maWxlKHN0b3JlX2F1eCwgY29uZmlnX2ZpbGVuYW1lLCBOVUxMKSkgeworCQkJZXJyb3IoImludmFsaWQgY29uZmlnIGZpbGUgJXMiLCBjb25maWdfZmlsZW5hbWUpOworCQkJZnJlZShzdG9yZS5rZXkpOworCQkJaWYgKHN0b3JlLnZhbHVlX3JlZ2V4ICE9IE5VTEwgJiYKKwkJCSAgICBzdG9yZS52YWx1ZV9yZWdleCAhPSBDT05GSUdfUkVHRVhfTk9ORSkgeworCQkJCXJlZ2ZyZWUoc3RvcmUudmFsdWVfcmVnZXgpOworCQkJCWZyZWUoc3RvcmUudmFsdWVfcmVnZXgpOworCQkJfQorCQkJcmV0ID0gQ09ORklHX0lOVkFMSURfRklMRTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKworCQlmcmVlKHN0b3JlLmtleSk7CisJCWlmIChzdG9yZS52YWx1ZV9yZWdleCAhPSBOVUxMICYmCisJCSAgICBzdG9yZS52YWx1ZV9yZWdleCAhPSBDT05GSUdfUkVHRVhfTk9ORSkgeworCQkJcmVnZnJlZShzdG9yZS52YWx1ZV9yZWdleCk7CisJCQlmcmVlKHN0b3JlLnZhbHVlX3JlZ2V4KTsKKwkJfQorCisJCS8qIGlmIG5vdGhpbmcgdG8gdW5zZXQsIG9yIHRvbyBtYW55IG1hdGNoZXMsIGVycm9yIG91dCAqLworCQlpZiAoKHN0b3JlLnNlZW4gPT0gMCAmJiB2YWx1ZSA9PSBOVUxMKSB8fAorCQkJCShzdG9yZS5zZWVuID4gMSAmJiBtdWx0aV9yZXBsYWNlID09IDApKSB7CisJCQlyZXQgPSBDT05GSUdfTk9USElOR19TRVQ7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CisKKwkJZnN0YXQoaW5fZmQsICZzdCk7CisJCWNvbnRlbnRzX3N6ID0geHNpemVfdChzdC5zdF9zaXplKTsKKwkJY29udGVudHMgPSB4bW1hcF9nZW50bHkoTlVMTCwgY29udGVudHNfc3osIFBST1RfUkVBRCwKKwkJCQkJTUFQX1BSSVZBVEUsIGluX2ZkLCAwKTsKKwkJaWYgKGNvbnRlbnRzID09IE1BUF9GQUlMRUQpIHsKKwkJCWlmIChlcnJubyA9PSBFTk9ERVYgJiYgU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJCQllcnJubyA9IEVJU0RJUjsKKwkJCWVycm9yKCJ1bmFibGUgdG8gbW1hcCAnJXMnOiAlcyIsCisJCQkgICAgICBjb25maWdfZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXQgPSBDT05GSUdfSU5WQUxJRF9GSUxFOworCQkJY29udGVudHMgPSBOVUxMOworCQkJZ290byBvdXRfZnJlZTsKKwkJfQorCQljbG9zZShpbl9mZCk7CisJCWluX2ZkID0gLTE7CisKKwkJaWYgKGNobW9kKGdldF9sb2NrX2ZpbGVfcGF0aChsb2NrKSwgc3Quc3RfbW9kZSAmIDA3Nzc3KSA8IDApIHsKKwkJCWVycm9yKCJjaG1vZCBvbiAlcyBmYWlsZWQ6ICVzIiwKKwkJCSAgICAgIGdldF9sb2NrX2ZpbGVfcGF0aChsb2NrKSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldCA9IENPTkZJR19OT19XUklURTsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKworCQlpZiAoc3RvcmUuc2VlbiA9PSAwKQorCQkJc3RvcmUuc2VlbiA9IDE7CisKKwkJZm9yIChpID0gMCwgY29weV9iZWdpbiA9IDA7IGkgPCBzdG9yZS5zZWVuOyBpKyspIHsKKwkJCWlmIChzdG9yZS5vZmZzZXRbaV0gPT0gMCkgeworCQkJCXN0b3JlLm9mZnNldFtpXSA9IGNvcHlfZW5kID0gY29udGVudHNfc3o7CisJCQl9IGVsc2UgaWYgKHN0b3JlLnN0YXRlICE9IEtFWV9TRUVOKSB7CisJCQkJY29weV9lbmQgPSBzdG9yZS5vZmZzZXRbaV07CisJCQl9IGVsc2UKKwkJCQljb3B5X2VuZCA9IGZpbmRfYmVnaW5uaW5nX29mX2xpbmUoCisJCQkJCWNvbnRlbnRzLCBjb250ZW50c19zeiwKKwkJCQkJc3RvcmUub2Zmc2V0W2ldLTIsICZuZXdfbGluZSk7CisKKwkJCWlmIChjb3B5X2VuZCA+IDAgJiYgY29udGVudHNbY29weV9lbmQtMV0gIT0gJ1xuJykKKwkJCQluZXdfbGluZSA9IDE7CisKKwkJCS8qIHdyaXRlIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBjb25maWcgKi8KKwkJCWlmIChjb3B5X2VuZCA+IGNvcHlfYmVnaW4pIHsKKwkJCQlpZiAod3JpdGVfaW5fZnVsbChmZCwgY29udGVudHMgKyBjb3B5X2JlZ2luLAorCQkJCQkJICBjb3B5X2VuZCAtIGNvcHlfYmVnaW4pIDwKKwkJCQkgICAgY29weV9lbmQgLSBjb3B5X2JlZ2luKQorCQkJCQlnb3RvIHdyaXRlX2Vycl9vdXQ7CisJCQkJaWYgKG5ld19saW5lICYmCisJCQkJICAgIHdyaXRlX3N0cl9pbl9mdWxsKGZkLCAiXG4iKSAhPSAxKQorCQkJCQlnb3RvIHdyaXRlX2Vycl9vdXQ7CisJCQl9CisJCQljb3B5X2JlZ2luID0gc3RvcmUub2Zmc2V0W2ldOworCQl9CisKKwkJLyogd3JpdGUgdGhlIHBhaXIgKHZhbHVlID09IE5VTEwgbWVhbnMgdW5zZXQpICovCisJCWlmICh2YWx1ZSAhPSBOVUxMKSB7CisJCQlpZiAoc3RvcmUuc3RhdGUgPT0gU1RBUlQpIHsKKwkJCQlpZiAoIXN0b3JlX3dyaXRlX3NlY3Rpb24oZmQsIGtleSkpCisJCQkJCWdvdG8gd3JpdGVfZXJyX291dDsKKwkJCX0KKwkJCWlmICghc3RvcmVfd3JpdGVfcGFpcihmZCwga2V5LCB2YWx1ZSkpCisJCQkJZ290byB3cml0ZV9lcnJfb3V0OworCQl9CisKKwkJLyogd3JpdGUgdGhlIHJlc3Qgb2YgdGhlIGNvbmZpZyAqLworCQlpZiAoY29weV9iZWdpbiA8IGNvbnRlbnRzX3N6KQorCQkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGNvbnRlbnRzICsgY29weV9iZWdpbiwKKwkJCQkJICBjb250ZW50c19zeiAtIGNvcHlfYmVnaW4pIDwKKwkJCSAgICBjb250ZW50c19zeiAtIGNvcHlfYmVnaW4pCisJCQkJZ290byB3cml0ZV9lcnJfb3V0OworCisJCW11bm1hcChjb250ZW50cywgY29udGVudHNfc3opOworCQljb250ZW50cyA9IE5VTEw7CisJfQorCisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUobG9jaykgPCAwKSB7CisJCWVycm9yKCJjb3VsZCBub3QgY29tbWl0IGNvbmZpZyBmaWxlICVzIiwgY29uZmlnX2ZpbGVuYW1lKTsKKwkJcmV0ID0gQ09ORklHX05PX1dSSVRFOworCQlsb2NrID0gTlVMTDsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwkvKgorCSAqIGxvY2sgaXMgY29tbWl0dGVkLCBzbyBkb24ndCB0cnkgdG8gcm9sbCBpdCBiYWNrIGJlbG93LgorCSAqIE5PVEU6IFNpbmNlIGxvY2tmaWxlLmMga2VlcHMgYSBsaW5rZWQgbGlzdCBvZiBhbGwgY3JlYXRlZAorCSAqIGxvY2tfZmlsZSBzdHJ1Y3R1cmVzLCBpdCBpc24ndCBzYWZlIHRvIGZyZWUobG9jaykuICBJdCdzCisJICogYmV0dGVyIHRvIGp1c3QgbGVhdmUgaXQgaGFuZ2luZyBhcm91bmQuCisJICovCisJbG9jayA9IE5VTEw7CisJcmV0ID0gMDsKKworCS8qIEludmFsaWRhdGUgdGhlIGNvbmZpZyBjYWNoZSAqLworCWdpdF9jb25maWdfY2xlYXIoKTsKKworb3V0X2ZyZWU6CisJaWYgKGxvY2spCisJCXJvbGxiYWNrX2xvY2tfZmlsZShsb2NrKTsKKwlmcmVlKGZpbGVuYW1lX2J1Zik7CisJaWYgKGNvbnRlbnRzKQorCQltdW5tYXAoY29udGVudHMsIGNvbnRlbnRzX3N6KTsKKwlpZiAoaW5fZmQgPj0gMCkKKwkJY2xvc2UoaW5fZmQpOworCXJldHVybiByZXQ7CisKK3dyaXRlX2Vycl9vdXQ6CisJcmV0ID0gd3JpdGVfZXJyb3IoZ2V0X2xvY2tfZmlsZV9wYXRoKGxvY2spKTsKKwlnb3RvIG91dF9mcmVlOworCit9CisKK2ludCBnaXRfY29uZmlnX3NldF9tdWx0aXZhcihjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkJY29uc3QgY2hhciAqdmFsdWVfcmVnZXgsIGludCBtdWx0aV9yZXBsYWNlKQoreworCXJldHVybiBnaXRfY29uZmlnX3NldF9tdWx0aXZhcl9pbl9maWxlKE5VTEwsIGtleSwgdmFsdWUsIHZhbHVlX3JlZ2V4LAorCQkJCQkgICAgICAgbXVsdGlfcmVwbGFjZSk7Cit9CisKK3N0YXRpYyBpbnQgc2VjdGlvbl9uYW1lX21hdGNoIChjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGkgPSAwLCBqID0gMCwgZG90ID0gMDsKKwlpZiAoYnVmW2ldICE9ICdbJykKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMTsgYnVmW2ldICYmIGJ1ZltpXSAhPSAnXSc7IGkrKykgeworCQlpZiAoIWRvdCAmJiBpc3NwYWNlKGJ1ZltpXSkpIHsKKwkJCWRvdCA9IDE7CisJCQlpZiAobmFtZVtqKytdICE9ICcuJykKKwkJCQlicmVhazsKKwkJCWZvciAoaSsrOyBpc3NwYWNlKGJ1ZltpXSk7IGkrKykKKwkJCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwkJCWlmIChidWZbaV0gIT0gJyInKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGJ1ZltpXSA9PSAnXFwnICYmIGRvdCkKKwkJCWkrKzsKKwkJZWxzZSBpZiAoYnVmW2ldID09ICciJyAmJiBkb3QpIHsKKwkJCWZvciAoaSsrOyBpc3NwYWNlKGJ1ZltpXSk7IGkrKykKKwkJCQk7IC8qIGRvX25vdGhpbmcgKi8KKwkJCWJyZWFrOworCQl9CisJCWlmIChidWZbaV0gIT0gbmFtZVtqKytdKQorCQkJYnJlYWs7CisJfQorCWlmIChidWZbaV0gPT0gJ10nICYmIG5hbWVbal0gPT0gMCkgeworCQkvKgorCQkgKiBXZSBtYXRjaCwgbm93IGp1c3QgZmluZCB0aGUgcmlnaHQgbGVuZ3RoIG9mZnNldCBieQorCQkgKiBnb2JibGluZyB1cCBhbnkgd2hpdGVzcGFjZSBhZnRlciBpdCwgYXMgd2VsbAorCQkgKi8KKwkJaSsrOworCQlmb3IgKDsgYnVmW2ldICYmIGlzc3BhY2UoYnVmW2ldKTsgaSsrKQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCXJldHVybiBpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZWN0aW9uX25hbWVfaXNfb2soY29uc3QgY2hhciAqbmFtZSkKK3sKKwkvKiBFbXB0eSBzZWN0aW9uIG5hbWVzIGFyZSBib2d1cy4gKi8KKwlpZiAoISpuYW1lKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQmVmb3JlIGEgZG90LCB3ZSBtdXN0IGJlIGFscGhhbnVtZXJpYyBvciBkYXNoLiBBZnRlciB0aGUgZmlyc3QgZG90LAorCSAqIGFueXRoaW5nIGdvZXMsIHNvIHdlIGNhbiBzdG9wIGNoZWNraW5nLgorCSAqLworCWZvciAoOyAqbmFtZSAmJiAqbmFtZSAhPSAnLic7IG5hbWUrKykKKwkJaWYgKCpuYW1lICE9ICctJyAmJiAhaXNhbG51bSgqbmFtZSkpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogaWYgbmV3X25hbWUgPT0gTlVMTCwgdGhlIHNlY3Rpb24gaXMgcmVtb3ZlZCBpbnN0ZWFkICovCitpbnQgZ2l0X2NvbmZpZ19yZW5hbWVfc2VjdGlvbl9pbl9maWxlKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpvbGRfbmFtZSwgY29uc3QgY2hhciAqbmV3X25hbWUpCit7CisJaW50IHJldCA9IDAsIHJlbW92ZSA9IDA7CisJY2hhciAqZmlsZW5hbWVfYnVmID0gTlVMTDsKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrOworCWludCBvdXRfZmQ7CisJY2hhciBidWZbMTAyNF07CisJRklMRSAqY29uZmlnX2ZpbGU7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAobmV3X25hbWUgJiYgIXNlY3Rpb25fbmFtZV9pc19vayhuZXdfbmFtZSkpIHsKKwkJcmV0ID0gZXJyb3IoImludmFsaWQgc2VjdGlvbiBuYW1lOiAlcyIsIG5ld19uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFjb25maWdfZmlsZW5hbWUpCisJCWNvbmZpZ19maWxlbmFtZSA9IGZpbGVuYW1lX2J1ZiA9IGdpdF9wYXRoZHVwKCJjb25maWciKTsKKworCWxvY2sgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisJb3V0X2ZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShsb2NrLCBjb25maWdfZmlsZW5hbWUsIDApOworCWlmIChvdXRfZmQgPCAwKSB7CisJCXJldCA9IGVycm9yKCJjb3VsZCBub3QgbG9jayBjb25maWcgZmlsZSAlcyIsIGNvbmZpZ19maWxlbmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghKGNvbmZpZ19maWxlID0gZm9wZW4oY29uZmlnX2ZpbGVuYW1lLCAicmIiKSkpIHsKKwkJLyogbm8gY29uZmlnIGZpbGUgbWVhbnMgbm90aGluZyB0byByZW5hbWUsIG5vIGVycm9yICovCisJCWdvdG8gdW5sb2NrX2FuZF9vdXQ7CisJfQorCisJZnN0YXQoZmlsZW5vKGNvbmZpZ19maWxlKSwgJnN0KTsKKworCWlmIChjaG1vZChnZXRfbG9ja19maWxlX3BhdGgobG9jayksIHN0LnN0X21vZGUgJiAwNzc3NykgPCAwKSB7CisJCXJldCA9IGVycm9yKCJjaG1vZCBvbiAlcyBmYWlsZWQ6ICVzIiwKKwkJCSAgICBnZXRfbG9ja19maWxlX3BhdGgobG9jayksIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gb3V0OworCX0KKworCXdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBjb25maWdfZmlsZSkpIHsKKwkJaW50IGk7CisJCWludCBsZW5ndGg7CisJCWNoYXIgKm91dHB1dCA9IGJ1ZjsKKwkJZm9yIChpID0gMDsgYnVmW2ldICYmIGlzc3BhY2UoYnVmW2ldKTsgaSsrKQorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCWlmIChidWZbaV0gPT0gJ1snKSB7CisJCQkvKiBpdCdzIGEgc2VjdGlvbiAqLworCQkJaW50IG9mZnNldCA9IHNlY3Rpb25fbmFtZV9tYXRjaCgmYnVmW2ldLCBvbGRfbmFtZSk7CisJCQlpZiAob2Zmc2V0ID4gMCkgeworCQkJCXJldCsrOworCQkJCWlmIChuZXdfbmFtZSA9PSBOVUxMKSB7CisJCQkJCXJlbW92ZSA9IDE7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlzdG9yZS5iYXNlbGVuID0gc3RybGVuKG5ld19uYW1lKTsKKwkJCQlpZiAoIXN0b3JlX3dyaXRlX3NlY3Rpb24ob3V0X2ZkLCBuZXdfbmFtZSkpIHsKKwkJCQkJcmV0ID0gd3JpdGVfZXJyb3IoZ2V0X2xvY2tfZmlsZV9wYXRoKGxvY2spKTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCS8qCisJCQkJICogV2Ugd3JvdGUgb3V0IHRoZSBuZXcgc2VjdGlvbiwgd2l0aAorCQkJCSAqIGEgbmV3bGluZSwgbm93IHNraXAgdGhlIG9sZAorCQkJCSAqIHNlY3Rpb24ncyBsZW5ndGgKKwkJCQkgKi8KKwkJCQlvdXRwdXQgKz0gb2Zmc2V0ICsgaTsKKwkJCQlpZiAoc3RybGVuKG91dHB1dCkgPiAwKSB7CisJCQkJCS8qCisJCQkJCSAqIE1vcmUgY29udGVudCBtZWFucyB0aGVyZSdzCisJCQkJCSAqIGEgZGVjbGFyYXRpb24gdG8gcHV0IG9uIHRoZQorCQkJCQkgKiBuZXh0IGxpbmU7IGluZGVudCB3aXRoIGEKKwkJCQkJICogdGFiCisJCQkJCSAqLworCQkJCQlvdXRwdXQgLT0gMTsKKwkJCQkJb3V0cHV0WzBdID0gJ1x0JzsKKwkJCQl9CisJCQl9CisJCQlyZW1vdmUgPSAwOworCQl9CisJCWlmIChyZW1vdmUpCisJCQljb250aW51ZTsKKwkJbGVuZ3RoID0gc3RybGVuKG91dHB1dCk7CisJCWlmICh3cml0ZV9pbl9mdWxsKG91dF9mZCwgb3V0cHV0LCBsZW5ndGgpICE9IGxlbmd0aCkgeworCQkJcmV0ID0gd3JpdGVfZXJyb3IoZ2V0X2xvY2tfZmlsZV9wYXRoKGxvY2spKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWZjbG9zZShjb25maWdfZmlsZSk7Cit1bmxvY2tfYW5kX291dDoKKwlpZiAoY29tbWl0X2xvY2tfZmlsZShsb2NrKSA8IDApCisJCXJldCA9IGVycm9yKCJjb3VsZCBub3QgY29tbWl0IGNvbmZpZyBmaWxlICVzIiwgY29uZmlnX2ZpbGVuYW1lKTsKK291dDoKKwlmcmVlKGZpbGVuYW1lX2J1Zik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGdpdF9jb25maWdfcmVuYW1lX3NlY3Rpb24oY29uc3QgY2hhciAqb2xkX25hbWUsIGNvbnN0IGNoYXIgKm5ld19uYW1lKQoreworCXJldHVybiBnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoTlVMTCwgb2xkX25hbWUsIG5ld19uYW1lKTsKK30KKworLyoKKyAqIENhbGwgdGhpcyB0byByZXBvcnQgZXJyb3IgZm9yIHlvdXIgdmFyaWFibGUgdGhhdCBzaG91bGQgbm90CisgKiBnZXQgYSBib29sZWFuIHZhbHVlIChpLmUuICJbbXldIHZhciIgbWVhbnMgInRydWUiKS4KKyAqLworI3VuZGVmIGNvbmZpZ19lcnJvcl9ub25ib29sCitpbnQgY29uZmlnX2Vycm9yX25vbmJvb2woY29uc3QgY2hhciAqdmFyKQoreworCXJldHVybiBlcnJvcigiTWlzc2luZyB2YWx1ZSBmb3IgJyVzJyIsIHZhcik7Cit9CisKK2ludCBwYXJzZV9jb25maWdfa2V5KGNvbnN0IGNoYXIgKnZhciwKKwkJICAgICBjb25zdCBjaGFyICpzZWN0aW9uLAorCQkgICAgIGNvbnN0IGNoYXIgKipzdWJzZWN0aW9uLCBpbnQgKnN1YnNlY3Rpb25fbGVuLAorCQkgICAgIGNvbnN0IGNoYXIgKiprZXkpCit7CisJaW50IHNlY3Rpb25fbGVuID0gc3RybGVuKHNlY3Rpb24pOworCWNvbnN0IGNoYXIgKmRvdDsKKworCS8qIERvZXMgaXQgc3RhcnQgd2l0aCAic2VjdGlvbi4iID8gKi8KKwlpZiAoIXN0YXJ0c193aXRoKHZhciwgc2VjdGlvbikgfHwgdmFyW3NlY3Rpb25fbGVuXSAhPSAnLicpCisJCXJldHVybiAtMTsKKworCS8qCisJICogRmluZCB0aGUga2V5OyB3ZSBkb24ndCBrbm93IHlldCBpZiB3ZSBoYXZlIGEgc3Vic2VjdGlvbiwgYnV0IHdlIG11c3QKKwkgKiBwYXJzZSBiYWNrd2FyZHMgZnJvbSB0aGUgZW5kLCBzaW5jZSB0aGUgc3Vic2VjdGlvbiBtYXkgaGF2ZSBkb3RzIGluCisJICogaXQsIHRvby4KKwkgKi8KKwlkb3QgPSBzdHJyY2hyKHZhciwgJy4nKTsKKwkqa2V5ID0gZG90ICsgMTsKKworCS8qIERpZCB3ZSBoYXZlIGEgc3Vic2VjdGlvbiBhdCBhbGw/ICovCisJaWYgKGRvdCA9PSB2YXIgKyBzZWN0aW9uX2xlbikgeworCQkqc3Vic2VjdGlvbiA9IE5VTEw7CisJCSpzdWJzZWN0aW9uX2xlbiA9IDA7CisJfQorCWVsc2UgeworCQkqc3Vic2VjdGlvbiA9IHZhciArIHNlY3Rpb25fbGVuICsgMTsKKwkJKnN1YnNlY3Rpb25fbGVuID0gZG90IC0gKnN1YnNlY3Rpb247CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb25maWcubWFrLmluIGIvY29uZmlnLm1hay5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmE2ZDBmCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnLm1hay5pbgpAQCAtMCwwICsxLDI0IEBACisjIGdpdCBNYWtlZmlsZSBjb25maWd1cmF0aW9uLCBpbmNsdWRlZCBpbiBtYWluIE1ha2VmaWxlCisjIEBjb25maWd1cmVfaW5wdXRACisKK0NDID0gQENDQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorTERGTEFHUyA9IEBMREZMQUdTQAorQVIgPSBAQVJACitUQVIgPSBAVEFSQAorRElGRiA9IEBESUZGQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKKyNJTlNUQUxMID0gQElOU1RBTExACQkjIG5lZWRzIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBzb3VyY2VzCisKK3ByZWZpeCA9IEBwcmVmaXhACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2JpbmRpciA9IEBiaW5kaXJACitnaXRleGVjZGlyID0gQGxpYmV4ZWNkaXJAL2dpdC1jb3JlCitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK3RlbXBsYXRlX2RpciA9IEBkYXRhZGlyQC9naXQtY29yZS90ZW1wbGF0ZXMKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK2RvY2RpciA9IEBkb2NkaXJACisKK21hbmRpciA9IEBtYW5kaXJACitodG1sZGlyID0gQGh0bWxkaXJACmRpZmYgLS1naXQgYS9jb25maWcubWFrLnVuYW1lIGIvY29uZmlnLm1hay51bmFtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzRkY2FhCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnLm1hay51bmFtZQpAQCAtMCwwICsxLDU2MyBAQAorIyBQbGF0Zm9ybSBzcGVjaWZpYyBNYWtlZmlsZSB0d2Vha3MgYmFzZWQgb24gdW5hbWUgZGV0ZWN0aW9uCisKK3VuYW1lX1MgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXMgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQordW5hbWVfTSA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtbSAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9PIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1vIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKK3VuYW1lX1IgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXIgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQordW5hbWVfUCA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtcCAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9WIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC12IDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKKworaWZkZWYgTVNWQworCSMgYXZvaWQgdGhlIE1pbmdXIGFuZCBDeWd3aW4gY29uZmlndXJhdGlvbiBzZWN0aW9ucworCXVuYW1lX1MgOj0gV2luZG93cworCXVuYW1lX08gOj0gV2luZG93cworZW5kaWYKKworIyBXZSBjaG9vc2UgdG8gYXZvaWQgImlmIC4uIGVsc2UgaWYgLi4gZWxzZSAuLiBlbmRpZiBlbmRpZiIKKyMgYmVjYXVzZSBtYWludGFpbmluZyB0aGUgbmVzdGluZyB0byBtYXRjaCBpcyBhIHBhaW4uICBJZgorIyB3ZSBoYWQgImVsaWYiIHRoaW5ncyB3b3VsZCBoYXZlIGJlZW4gbXVjaCBuaWNlci4uLgorCitpZmVxICgkKHVuYW1lX00pLHg4Nl82NCkKKwlYRExfRkFTVF9IQVNIID0gWWVzUGxlYXNlCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxPU0YxKQorCSMgTmVlZCB0aGlzIGZvciB1X3Nob3J0IGRlZmluaXRpb25zIGV0IGFsCisJQkFTSUNfQ0ZMQUdTICs9IC1EX09TRl9TT1VSQ0UKKwlTT0NLTEVOX1QgPSBpbnQKKwlOT19TVFJUT1VMTCA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLExpbnV4KQorCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlIQVZFX1BBVEhTX0ggPSBZZXNQbGVhc2UKKwlMSUJDX0NPTlRBSU5TX0xJQklOVEwgPSBZZXNQbGVhc2UKKwlIQVZFX0RFVl9UVFkgPSBZZXNQbGVhc2UKKwlIQVZFX0NMT0NLX0dFVFRJTUUgPSBZZXNQbGVhc2UKKwlIQVZFX0NMT0NLX01PTk9UT05JQyA9IFllc1BsZWFzZQorCUhBVkVfR0VUREVMSU0gPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLEdOVS9rRnJlZUJTRCkKKwlIQVZFX0FMTE9DQV9IID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCisJRElSX0hBU19CU0RfR1JPVVBfU0VNQU5USUNTID0gWWVzUGxlYXNlCisJTElCQ19DT05UQUlOU19MSUJJTlRMID0gWWVzUGxlYXNlCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxVbml4V2FyZSkKKwlDQyA9IGNjCisJTkVFRFNfU09DS0VUID0gWWVzUGxlYXNlCisJTkVFRFNfTlNMID0gWWVzUGxlYXNlCisJTkVFRFNfU1NMX1dJVEhfQ1JZUFRPID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlTSEVMTF9QQVRIID0gL3Vzci9sb2NhbC9iaW4vYmFzaAorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCUJBU0lDX0NGTEFHUyArPSAtS3RocmVhZAorCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvbG9jYWwvaW5jbHVkZQorCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL2xvY2FsL2xpYgorCUlOU1RBTEwgPSBnaW5zdGFsbAorCVRBUiA9IGd0YXIKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxTQ09fU1YpCisJaWZlcSAoJCh1bmFtZV9SKSwzLjIpCisJCUNGTEFHUyA9IC1PMgorCWVuZGlmCisJaWZlcSAoJCh1bmFtZV9SKSw1KQorCQlDQyA9IGNjCisJCUJBU0lDX0NGTEFHUyArPSAtS3RocmVhZAorCWVuZGlmCisJTkVFRFNfU09DS0VUID0gWWVzUGxlYXNlCisJTkVFRFNfTlNMID0gWWVzUGxlYXNlCisJTkVFRFNfU1NMX1dJVEhfQ1JZUFRPID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlTSEVMTF9QQVRIID0gL3Vzci9iaW4vYmFzaAorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCUJBU0lDX0NGTEFHUyArPSAtSS91c3IvbG9jYWwvaW5jbHVkZQorCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL2xvY2FsL2xpYgorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlJTlNUQUxMID0gZ2luc3RhbGwKKwlUQVIgPSBndGFyCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxEYXJ3aW4pCisJTkVFRFNfQ1JZUFRPX1dJVEhfU1NMID0gWWVzUGxlYXNlCisJTkVFRFNfU1NMX1dJVEhfQ1JZUFRPID0gWWVzUGxlYXNlCisJTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwkjIE5vdGU6ICQodW5hbWVfUikgZ2l2ZXMgdXMgdGhlIHVuZGVybHlpbmcgRGFyd2luIHZlcnNpb24uCisJIyAtIE1hY09TIDEwLjAuKiBhbmQgTWFjT1MgMTAuMS4wID0gRGFyd2luIDEuKgorCSMgLSBNYWNPUyAxMC54LiogPSBEYXJ3aW4gKHgrNCkuKiBmb3IgKDEgPD0geCkKKwkjIGkuZS4gImJlZ2lucyB3aXRoIFsxNTY3OF0gYW5kIGEgZG90IiBtZWFucyAiMTAuNC4qIG9yIG9sZGVyIi4KKwlpZmVxICgkKHNoZWxsIGV4cHIgIiQodW5hbWVfUikiIDogJ1sxNTY3OF1cLicpLDIpCisJCU9MRF9JQ09OViA9IFVuZm9ydHVuYXRlbHlZZXMKKwkJTk9fQVBQTEVfQ09NTU9OX0NSWVBUTyA9IFllc1BsZWFzZQorCWVuZGlmCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICdbMTVdXC4nKSwyKQorCQlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJZW5kaWYKKwlpZmVxICgkKHNoZWxsIHRlc3QgImBleHByICIkKHVuYW1lX1IpIiA6ICdcKFswLTldWzAtOV0qXClcLidgIiAtZ2UgMTEgJiYgZWNobyAxKSwxKQorCQlIQVZFX0dFVERFTElNID0gWWVzUGxlYXNlCisJZW5kaWYKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlVU0VfU1RfVElNRVNQRUMgPSBZZXNQbGVhc2UKKwlIQVZFX0RFVl9UVFkgPSBZZXNQbGVhc2UKKwlDT01QQVRfT0JKUyArPSBjb21wYXQvcHJlY29tcG9zZV91dGY4Lm8KKwlCQVNJQ19DRkxBR1MgKz0gLURQUkVDT01QT1NFX1VOSUNPREUKKwlCQVNJQ19DRkxBR1MgKz0gLURQUk9URUNUX0hGU19ERUZBVUxUPTEKKwlIQVZFX0JTRF9TWVNDVEwgPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLFN1bk9TKQorCU5FRURTX1NPQ0tFVCA9IFllc1BsZWFzZQorCU5FRURTX05TTCA9IFllc1BsZWFzZQorCVNIRUxMX1BBVEggPSAvYmluL2Jhc2gKKwlTQU5FX1RPT0xfUEFUSCA9IC91c3IveHBnNi9iaW46L3Vzci94cGc0L2JpbgorCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJTk9fUkVHRVggPSBZZXNQbGVhc2UKKwlOT19NU0dGTVRfRVhURU5ERURfT1BUSU9OUyA9IFllc1BsZWFzZQorCUhBVkVfREVWX1RUWSA9IFllc1BsZWFzZQorCWlmZXEgKCQodW5hbWVfUiksNS42KQorCQlTT0NLTEVOX1QgPSBpbnQKKwkJTk9fSFNUUkVSUk9SID0gWWVzUGxlYXNlCisJCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwkJTk9fU09DS0FERFJfU1RPUkFHRSA9IFllc1BsZWFzZQorCQlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCQlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCQlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKKwkJR0lUX1RFU1RfQ01QID0gY21wCisJZW5kaWYKKwlpZmVxICgkKHVuYW1lX1IpLDUuNykKKwkJTkVFRFNfUkVTT0xWID0gWWVzUGxlYXNlCisJCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwkJTk9fU09DS0FERFJfU1RPUkFHRSA9IFllc1BsZWFzZQorCQlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCQlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCQlOT19TVFJUT1VNQVggPSBZZXNQbGVhc2UKKwkJR0lUX1RFU1RfQ01QID0gY21wCisJZW5kaWYKKwlpZmVxICgkKHVuYW1lX1IpLDUuOCkKKwkJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQorCQlHSVRfVEVTVF9DTVAgPSBjbXAKKwllbmRpZgorCWlmZXEgKCQodW5hbWVfUiksNS45KQorCQlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCQlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwkJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJCUdJVF9URVNUX0NNUCA9IGNtcAorCWVuZGlmCisJSU5TVEFMTCA9IC91c3IvdWNiL2luc3RhbGwKKwlUQVIgPSBndGFyCisJQkFTSUNfQ0ZMQUdTICs9IC1EX19FWFRFTlNJT05TX18gLURfX3N1bl9fCitlbmRpZgoraWZlcSAoJCh1bmFtZV9PKSxDeWd3aW4pCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICcxXC5bMS02XVwuJyksNCkKKwkJTk9fRF9UWVBFX0lOX0RJUkVOVCA9IFllc1BsZWFzZQorCQlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCQlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCQlOT19TWU1MSU5LX0hFQUQgPSBZZXNQbGVhc2UKKwkJTk9fSVBWNiA9IFllc1BsZWFzZQorCQlPTERfSUNPTlYgPSBVbmZvcnR1bmF0ZWx5WWVzCisJCSMgVGhlcmUgYXJlIGNvbmZsaWN0aW5nIHJlcG9ydHMgYWJvdXQgdGhpcy4KKwkJIyBPbiBzb21lIGJveGVzIE5PX01NQVAgaXMgbmVlZGVkLCBhbmQgbm90IHNvIGVsc2V3aGVyZS4KKwkJIyBUcnkgY29tbWVudGluZyB0aGlzIG91dCBpZiB5b3Ugc3VzcGVjdCBNTUFQIGlzIG1vcmUgZWZmaWNpZW50CisJCU5PX01NQVAgPSBZZXNQbGVhc2UKKwllbHNlCisJCU5PX1JFR0VYID0gVW5mb3J0dW5hdGVseVllcworCWVuZGlmCisJSEFWRV9BTExPQ0FfSCA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJTk9fRkFTVF9XT1JLSU5HX0RJUkVDVE9SWSA9IFVuZm9ydHVuYXRlbHlZZXMKKwlOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgPSBZZXNQbGVhc2UKKwlYID0gLmV4ZQorCVVOUkVMSUFCTEVfRlNUQVQgPSBVbmZvcnR1bmF0ZWx5WWVzCisJU1BBUlNFX0ZMQUdTID0gLWlzeXN0ZW0gL3Vzci9pbmNsdWRlL3czMmFwaSAtV25vLW9uZS1iaXQtc2lnbmVkLWJpdGZpZWxkCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxGcmVlQlNEKQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJT0xEX0lDT05WID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCisJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCisJRElSX0hBU19CU0RfR1JPVVBfU0VNQU5USUNTID0gWWVzUGxlYXNlCisJVVNFX1NUX1RJTUVTUEVDID0gWWVzUGxlYXNlCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICc0XC4nKSwyKQorCQlQVEhSRUFEX0xJQlMgPSAtcHRocmVhZAorCQlOT19VSU5UTUFYX1QgPSBZZXNQbGVhc2UKKwkJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJZW5kaWYKKwlQWVRIT05fUEFUSCA9IC91c3IvbG9jYWwvYmluL3B5dGhvbgorCUhBVkVfUEFUSFNfSCA9IFllc1BsZWFzZQorCUdNVElNRV9VTlJFTElBQkxFX0VSUk9SUyA9IFVuZm9ydHVuYXRlbHlZZXMKKwlIQVZFX0JTRF9TWVNDVEwgPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLE9wZW5CU0QpCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCVVTRV9TVF9USU1FU1BFQyA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9sb2NhbC9pbmNsdWRlCisJQkFTSUNfTERGTEFHUyArPSAtTC91c3IvbG9jYWwvbGliCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCisJSEFWRV9CU0RfU1lTQ1RMID0gWWVzUGxlYXNlCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxNaXJCU0QpCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCVVTRV9TVF9USU1FU1BFQyA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCisJSEFWRV9CU0RfU1lTQ1RMID0gWWVzUGxlYXNlCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxOZXRCU0QpCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1IpIiA6ICdbMDFdXC4nKSwyKQorCQlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCWVuZGlmCisJQkFTSUNfQ0ZMQUdTICs9IC1JL3Vzci9wa2cvaW5jbHVkZQorCUJBU0lDX0xERkxBR1MgKz0gLUwvdXNyL3BrZy9saWIgJChDQ19MRF9EWU5QQVRIKS91c3IvcGtnL2xpYgorCVVTRV9TVF9USU1FU1BFQyA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJSEFWRV9QQVRIU19IID0gWWVzUGxlYXNlCisJSEFWRV9CU0RfU1lTQ1RMID0gWWVzUGxlYXNlCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxBSVgpCisJREVGQVVMVF9QQUdFUiA9IG1vcmUKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlGUkVBRF9SRUFEU19ESVJFQ1RPUklFUyA9IFVuZm9ydHVuYXRlbHlZZXMKKwlJTlRFUk5BTF9RU09SVCA9IFVuZm9ydHVuYXRlbHlZZXMKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCUJBU0lDX0NGTEFHUyArPSAtRF9MQVJHRV9GSUxFUworCWlmZXEgKCQoc2hlbGwgZXhwciAiJCh1bmFtZV9WKSIgOiAnWzEyMzRdJyksMSkKKwkJTk9fUFRIUkVBRFMgPSBZZXNQbGVhc2UKKwllbHNlCisJCVBUSFJFQURfTElCUyA9IC1scHRocmVhZAorCWVuZGlmCisJaWZlcSAoJChzaGVsbCBleHByICIkKHVuYW1lX1YpLiQodW5hbWVfUikiIDogJzVcLjEnKSwzKQorCQlJTkxJTkUgPSAnJworCWVuZGlmCisJR0lUX1RFU1RfQ01QID0gY21wCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxHTlUpCisJIyBHTlUvSHVyZAorCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlIQVZFX1BBVEhTX0ggPSBZZXNQbGVhc2UKKwlMSUJDX0NPTlRBSU5TX0xJQklOVEwgPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLElSSVgpCisJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJTk9fVU5TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fTUtTVEVNUFMgPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJIyBXaGVuIGNvbXBpbGVkIHdpdGggdGhlIE1JUFNwcm8gNy40LjRtIGNvbXBpbGVyLCBhbmQgd2l0aG91dCBwdGhyZWFkcworCSMgKGkuZS4gTk9fUFRIUkVBRFMgaXMgc2V0KSwgYW5kIF93aXRoXyBNTUFQIChpLmUuIE5PX01NQVAgaXMgbm90IHNldCksCisJIyBnaXQgZGllcyB3aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gdHJ5aW5nIHRvIGFjY2VzcyB0aGUgZmlyc3QKKwkjIGVudHJ5IG9mIGEgcmVmbG9nLiAgVGhlIGNvbnNlcnZhdGl2ZSBjaG9pY2UgaXMgbWFkZSB0byBhbHdheXMgc2V0CisJIyBOT19NTUFQLiAgSWYgeW91IHN1c3BlY3QgdGhhdCB5b3VyIGNvbXBpbGVyIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzCisJIyBpc3N1ZSwgY29tbWVudCBvdXQgdGhlIE5PX01NQVAgc3RhdGVtZW50LgorCU5PX01NQVAgPSBZZXNQbGVhc2UKKwlOT19SRUdFWCA9IFllc1BsZWFzZQorCVNOUFJJTlRGX1JFVFVSTlNfQk9HVVMgPSBZZXNQbGVhc2UKKwlTSEVMTF9QQVRIID0gL3Vzci9nbnUvYmluL2Jhc2gKKwlORUVEU19MSUJHRU4gPSBZZXNQbGVhc2UKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLElSSVg2NCkKKwlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwkjIFdoZW4gY29tcGlsZWQgd2l0aCB0aGUgTUlQU3BybyA3LjQuNG0gY29tcGlsZXIsIGFuZCB3aXRob3V0IHB0aHJlYWRzCisJIyAoaS5lLiBOT19QVEhSRUFEUyBpcyBzZXQpLCBhbmQgX3dpdGhfIE1NQVAgKGkuZS4gTk9fTU1BUCBpcyBub3Qgc2V0KSwKKwkjIGdpdCBkaWVzIHdpdGggYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiB0cnlpbmcgdG8gYWNjZXNzIHRoZSBmaXJzdAorCSMgZW50cnkgb2YgYSByZWZsb2cuICBUaGUgY29uc2VydmF0aXZlIGNob2ljZSBpcyBtYWRlIHRvIGFsd2F5cyBzZXQKKwkjIE5PX01NQVAuICBJZiB5b3Ugc3VzcGVjdCB0aGF0IHlvdXIgY29tcGlsZXIgaXMgbm90IGFmZmVjdGVkIGJ5IHRoaXMKKwkjIGlzc3VlLCBjb21tZW50IG91dCB0aGUgTk9fTU1BUCBzdGF0ZW1lbnQuCisJTk9fTU1BUCA9IFllc1BsZWFzZQorCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJU05QUklOVEZfUkVUVVJOU19CT0dVUyA9IFllc1BsZWFzZQorCVNIRUxMX1BBVEggPSAvdXNyL2dudS9iaW4vYmFzaAorCU5FRURTX0xJQkdFTiA9IFllc1BsZWFzZQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksSFAtVVgpCisJSU5MSU5FID0gX19pbmxpbmUKKwlOT19JUFY2ID0gWWVzUGxlYXNlCisJTk9fU0VURU5WID0gWWVzUGxlYXNlCisJTk9fU1RSQ0FTRVNUUiA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwlOT19VTlNFVEVOViA9IFllc1BsZWFzZQorCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQorCU5PX1NZU19TRUxFQ1RfSCA9IFllc1BsZWFzZQorCVNOUFJJTlRGX1JFVFVSTlNfQk9HVVMgPSBZZXNQbGVhc2UKKwlOT19OU0VDID0gWWVzUGxlYXNlCisJaWZlcSAoJCh1bmFtZV9SKSxCLjExLjAwKQorCQlOT19JTkVUX05UT1AgPSBZZXNQbGVhc2UKKwkJTk9fSU5FVF9QVE9OID0gWWVzUGxlYXNlCisJZW5kaWYKKwlpZmVxICgkKHVuYW1lX1IpLEIuMTAuMjApCisJCSMgT3ZlcnJpZGUgSFAtVVggMTEueCBzZXR0aW5nOgorCQlJTkxJTkUgPQorCQlTT0NLTEVOX1QgPSBzaXplX3QKKwkJTk9fUFJFQUQgPSBZZXNQbGVhc2UKKwkJTk9fSU5FVF9OVE9QID0gWWVzUGxlYXNlCisJCU5PX0lORVRfUFRPTiA9IFllc1BsZWFzZQorCWVuZGlmCisJR0lUX1RFU1RfQ01QID0gY21wCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxXaW5kb3dzKQorCUdJVF9WRVJTSU9OIDo9ICQoR0lUX1ZFUlNJT04pLk1TVkMKKwlwYXRoc2VwID0gOworCUhBVkVfQUxMT0NBX0ggPSBZZXNQbGVhc2UKKwlOT19QUkVBRCA9IFllc1BsZWFzZQorCU5FRURTX0NSWVBUT19XSVRIX1NTTCA9IFllc1BsZWFzZQorCU5PX0xJQkdFTl9IID0gWWVzUGxlYXNlCisJTk9fUE9MTCA9IFllc1BsZWFzZQorCU5PX1NZTUxJTktfSEVBRCA9IFllc1BsZWFzZQorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlOT19VTklYX1NPQ0tFVFMgPSBZZXNQbGVhc2UKKwlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCSMgTkVFRFNfTElCSUNPTlYgPSBZZXNQbGVhc2UKKwlOT19JQ09OViA9IFllc1BsZWFzZQorCU5PX1NUUlRPVU1BWCA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCVNOUFJJTlRGX1JFVFVSTlNfQk9HVVMgPSBZZXNQbGVhc2UKKwlOT19TVk5fVEVTVFMgPSBZZXNQbGVhc2UKKwlSVU5USU1FX1BSRUZJWCA9IFllc1BsZWFzZQorCU5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVCA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlVU0VfV0lOMzJfTU1BUCA9IFllc1BsZWFzZQorCSMgVVNFX05FRF9BTExPQ0FUT1IgPSBZZXNQbGVhc2UKKwlVTlJFTElBQkxFX0ZTVEFUID0gVW5mb3J0dW5hdGVseVllcworCU9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMgPSBVbmZvcnR1bmF0ZWx5TmVlZHNUbworCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJTk9fR0VUVEVYVCA9IFllc1BsZWFzZQorCU5PX1BZVEhPTiA9IFllc1BsZWFzZQorCUJMS19TSEExID0gWWVzUGxlYXNlCisJRVRBR1NfVEFSR0VUID0gRVRBR1MKKwlOT19JTkVUX1BUT04gPSBZZXNQbGVhc2UKKwlOT19JTkVUX05UT1AgPSBZZXNQbGVhc2UKKwlOT19QT1NJWF9HT09ESUVTID0gVW5mb3J0dW5hdGVseVllcworCU5BVElWRV9DUkxGID0gWWVzUGxlYXNlCisJREVGQVVMVF9IRUxQX0ZPUk1BVCA9IGh0bWwKKworCUNDID0gY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9jbGluay5wbAorCUFSID0gY29tcGF0L3ZjYnVpbGQvc2NyaXB0cy9saWIucGwKKwlDRkxBR1MgPQorCUJBU0lDX0NGTEFHUyA9IC1ub2xvZ28gLUkuIC1JLi4vemxpYiAtSWNvbXBhdC92Y2J1aWxkIC1JY29tcGF0L3ZjYnVpbGQvaW5jbHVkZSAtRFdJTjMyIC1EX0NPTlNPTEUgLURIQVZFX1NUUklOR19IIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgLURfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFCisJQ09NUEFUX09CSlMgPSBjb21wYXQvbXN2Yy5vIGNvbXBhdC93aW5hbnNpLm8gXAorCQljb21wYXQvd2luMzIvcHRocmVhZC5vIGNvbXBhdC93aW4zMi9zeXNsb2cubyBcCisJCWNvbXBhdC93aW4zMi9kaXJlbnQubworCUNPTVBBVF9DRkxBR1MgPSAtRF9fVVNFX01JTkdXX0FDQ0VTUyAtRE5PR0RJIC1ESEFWRV9TVFJJTkdfSCAtSWNvbXBhdCAtSWNvbXBhdC9yZWdleCAtSWNvbXBhdC93aW4zMiAtRFNUUklQX0VYVEVOU0lPTj1cIi5leGVcIgorCUJBU0lDX0xERkxBR1MgPSAtSUdOT1JFOjQyMTcgLUlHTk9SRTo0MDQ5IC1OT0xPR08gLVNVQlNZU1RFTTpDT05TT0xFCisJRVhUTElCUyA9IHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIHdpbmluZXQubGliIHdzMl8zMi5saWIgaW52YWxpZGNvbnRpbnVlLm9iagorCVBUSFJFQURfTElCUyA9CisJbGliID0KKwlCQVNJQ19DRkxBR1MgKz0gLURQUk9URUNUX05URlNfREVGQVVMVD0xCitpZm5kZWYgREVCVUcKKwlCQVNJQ19DRkxBR1MgKz0gLUdMIC1PcyAtTUQKKwlCQVNJQ19MREZMQUdTICs9IC1MVENHCisJQVIgKz0gLUxUQ0cKK2Vsc2UKKwlCQVNJQ19DRkxBR1MgKz0gLVppIC1NRGQKK2VuZGlmCisJWCA9IC5leGUKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLEludGVyaXgpCisJTk9fSU5JVEdST1VQUyA9IFllc1BsZWFzZQorCU5PX0lQVjYgPSBZZXNQbGVhc2UKKwlOT19NRU1NRU0gPSBZZXNQbGVhc2UKKwlOT19NS0RURU1QID0gWWVzUGxlYXNlCisJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJTk9fTlNFQyA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJaWZlcSAoJCh1bmFtZV9SKSwzLjUpCisJCU5PX0lORVRfTlRPUCA9IFllc1BsZWFzZQorCQlOT19JTkVUX1BUT04gPSBZZXNQbGVhc2UKKwkJTk9fU09DS0FERFJfU1RPUkFHRSA9IFllc1BsZWFzZQorCWVuZGlmCisJaWZlcSAoJCh1bmFtZV9SKSw1LjIpCisJCU5PX0lORVRfTlRPUCA9IFllc1BsZWFzZQorCQlOT19JTkVUX1BUT04gPSBZZXNQbGVhc2UKKwkJTk9fU09DS0FERFJfU1RPUkFHRSA9IFllc1BsZWFzZQorCWVuZGlmCitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxNaW5peCkKKwlOT19JUFY2ID0gWWVzUGxlYXNlCisJTk9fU1RfQkxPQ0tTX0lOX1NUUlVDVF9TVEFUID0gWWVzUGxlYXNlCisJTk9fTlNFQyA9IFllc1BsZWFzZQorCU5FRURTX0xJQkdFTiA9CisJTkVFRFNfQ1JZUFRPX1dJVEhfU1NMID0gWWVzUGxlYXNlCisJTkVFRFNfSUROX1dJVEhfQ1VSTCA9IFllc1BsZWFzZQorCU5FRURTX1NTTF9XSVRIX0NVUkwgPSBZZXNQbGVhc2UKKwlORUVEU19SRVNPTFYgPQorCU5PX0hTVFJFUlJPUiA9IFllc1BsZWFzZQorCU5PX01NQVAgPSBZZXNQbGVhc2UKKwlOT19DVVJMID0KKwlOT19FWFBBVCA9CitlbmRpZgoraWZlcSAoJCh1bmFtZV9TKSxOT05TVE9QX0tFUk5FTCkKKwkjIE5lZWRzIHNvbWUgQzk5IGZlYXR1cmVzLCAiaW5saW5lIiBpcyBqdXN0IG9uZSBvZiB0aGVtLgorCSMgSU5MSU5FPScnIHdvdWxkIGp1c3QgcmVwbGFjZSBvbmUgc2V0IG9mIHdhcm5pbmdzIHdpdGggYW5vdGhlciBhbmQKKwkjIHN0aWxsIG5vdCBjb21waWxlIGluIGM4OSBtb2RlLCBkdWUgdG8gbm9uLWNvbnN0IGFycmF5IGluaXRpYWxpemF0aW9ucy4KKwlDQyA9IGNjIC1jOTkKKwkjIERpc2FibGUgYWxsIG9wdGltaXphdGlvbiwgc2VlbXMgdG8gcmVzdWx0IGluIGJhZCBjb2RlLCB3aXRoIC1PIG9yIC1PMgorCSMgb3IgZXZlbiAtTzEgKGRlZmF1bHQpLCAvdXNyL2xvY2FsL2xpYmV4ZWMvZ2l0LWNvcmUvZ2l0LXBhY2stb2JqZWN0cworCSMgYWJlbmRzIG9uICJnaXQgcHVzaCIuIE5lZWRzIG1vcmUgaW52ZXN0aWdhdGlvbi4KKwlDRkxBR1MgPSAtZyAtTzAKKwkjIFdlJ2Qgd2FudCBpdCB0byBiZSBoZXJlLgorCXByZWZpeCA9IC91c3IvbG9jYWwKKwkjIE91cidzIGFyZSBpbiAke3ByZWZpeH0vYmluIChwZXJsIG1pZ2h0IGFsc28gYmUgaW4gL3Vzci9iaW4vcGVybCkuCisJUEVSTF9QQVRIID0gJHtwcmVmaXh9L2Jpbi9wZXJsCisJUFlUSE9OX1BBVEggPSAke3ByZWZpeH0vYmluL3B5dGhvbgorCisJIyBBcyBkZXRlY3RlZCBieSAnLi9jb25maWd1cmUnLgorCSMgTWlzc2RldGVjdGVkLCBoZW5jZSBjb21tZW50ZWQgb3V0LCBzZWUgYmVsb3cuCisJI05PX0NVUkwgPSBZZXNQbGVhc2UKKwkjIEFkZGVkIG1hbnVhbGx5LCBzZWUgYWJvdmUuCisJTkVFRFNfU1NMX1dJVEhfQ1VSTCA9IFllc1BsZWFzZQorCUhBVkVfTElCQ0hBUlNFVF9IID0gWWVzUGxlYXNlCisJSEFWRV9TVFJJTkdTX0ggPSBZZXNQbGVhc2UKKwlORUVEU19MSUJJQ09OViA9IFllc1BsZWFzZQorCU5FRURTX0xJQklOVExfQkVGT1JFX0xJQklDT05WID0gWWVzUGxlYXNlCisJTk9fU1lTX1NFTEVDVF9IID0gVW5mb3J0dW5hdGVseVllcworCU5PX0RfVFlQRV9JTl9ESVJFTlQgPSBZZXNQbGVhc2UKKwlOT19IU1RSRVJST1IgPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fTUVNTUVNID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX1NFVEVOViA9IFllc1BsZWFzZQorCU5PX1VOU0VURU5WID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJIyBDdXJyZW50bHkgbGliaWNvbnYtMS45LjEuCisJT0xEX0lDT05WID0gVW5mb3J0dW5hdGVseVllcworCU5PX1JFR0VYID0gWWVzUGxlYXNlCisJTk9fUFRIUkVBRFMgPSBVbmZvcnR1bmF0ZWx5WWVzCisKKwkjIE5vdCBkZXRlY3RlZCAobm9yIGNoZWNrZWQgZm9yKSBieSAnLi9jb25maWd1cmUnLgorCSMgV2UgZG9uJ3QgaGF2ZSBTQV9SRVNUQVJUIG9uIE5vblN0b3AsIHVuZm9ydHVuYWxldHkuCisJQ09NUEFUX0NGTEFHUyArPSAtRFNBX1JFU1RBUlQ9MAorCSMgQXBwYXJlbnRseSBuZWVkZWQgaW4gY29tcGF0L2ZubWF0Y2gvZm5tYXRjaC5jLgorCUNPTVBBVF9DRkxBR1MgKz0gLURIQVZFX1NUUklOR19IPTEKKwlOT19TVF9CTE9DS1NfSU5fU1RSVUNUX1NUQVQgPSBZZXNQbGVhc2UKKwlOT19OU0VDID0gWWVzUGxlYXNlCisJTk9fUFJFQUQgPSBZZXNQbGVhc2UKKwlOT19NTUFQID0gWWVzUGxlYXNlCisJTk9fUE9MTCA9IFllc1BsZWFzZQorCU5PX0lOVFBUUl9UID0gVW5mb3J0dW5hdGVseVllcworCSMgQnVnIHJlcG9ydCAxMC0xMjA4MjItNDQ3NyBzdWJtaXR0ZWQgdG8gSFAgTm9uU3RvcCBkZXZlbG9wbWVudC4KKwlNS0RJUl9XT19UUkFJTElOR19TTEFTSCA9IFllc1BsZWFzZQorCSMgUkZFIDEwLTEyMDkxMi00NjkzIHN1Ym1pdHRlZCB0byBIUCBOb25TdG9wIGRldmVsb3BtZW50LgorCU5PX1NFVElUSU1FUiA9IFVuZm9ydHVuYXRlbHlZZXMKKwlTQU5FX1RPT0xfUEFUSCA9IC91c3IvY29yZXV0aWxzL2JpbjovdXNyL2xvY2FsL2JpbgorCVNIRUxMX1BBVEggPSAvdXNyL2xvY2FsL2Jpbi9iYXNoCisJIyBhcyBvZiBIMDYuMjUvSjA2LjE0LCB3ZSBtaWdodCBiZXR0ZXIgdXNlIHRoaXMKKwkjU0hFTExfUEFUSCA9IC91c3IvY29yZXV0aWxzL2Jpbi9iYXNoCitlbmRpZgoraWZuZXEgKCwkKGZpbmRzdHJpbmcgTUlOR1csJCh1bmFtZV9TKSkpCisJcGF0aHNlcCA9IDsKKwlIQVZFX0FMTE9DQV9IID0gWWVzUGxlYXNlCisJTk9fUFJFQUQgPSBZZXNQbGVhc2UKKwlORUVEU19DUllQVE9fV0lUSF9TU0wgPSBZZXNQbGVhc2UKKwlOT19MSUJHRU5fSCA9IFllc1BsZWFzZQorCU5PX1BPTEwgPSBZZXNQbGVhc2UKKwlOT19TWU1MSU5LX0hFQUQgPSBZZXNQbGVhc2UKKwlOT19VTklYX1NPQ0tFVFMgPSBZZXNQbGVhc2UKKwlOT19TRVRFTlYgPSBZZXNQbGVhc2UKKwlOT19TVFJDQVNFU1RSID0gWWVzUGxlYXNlCisJTk9fU1RSTENQWSA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5FRURTX0xJQklDT05WID0gWWVzUGxlYXNlCisJTk9fU1RSVE9VTUFYID0gWWVzUGxlYXNlCisJTk9fTUtEVEVNUCA9IFllc1BsZWFzZQorCU5PX01LU1RFTVBTID0gWWVzUGxlYXNlCisJTk9fU1ZOX1RFU1RTID0gWWVzUGxlYXNlCisJTk9fUEVSTF9NQUtFTUFLRVIgPSBZZXNQbGVhc2UKKwlSVU5USU1FX1BSRUZJWCA9IFllc1BsZWFzZQorCU5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVCA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlVU0VfV0lOMzJfTU1BUCA9IFllc1BsZWFzZQorCVVTRV9ORURfQUxMT0NBVE9SID0gWWVzUGxlYXNlCisJVU5SRUxJQUJMRV9GU1RBVCA9IFVuZm9ydHVuYXRlbHlZZXMKKwlPQkpFQ1RfQ1JFQVRJT05fVVNFU19SRU5BTUVTID0gVW5mb3J0dW5hdGVseU5lZWRzVG8KKwlOT19SRUdFWCA9IFllc1BsZWFzZQorCU5PX1BZVEhPTiA9IFllc1BsZWFzZQorCUJMS19TSEExID0gWWVzUGxlYXNlCisJRVRBR1NfVEFSR0VUID0gRVRBR1MKKwlOT19JTkVUX1BUT04gPSBZZXNQbGVhc2UKKwlOT19JTkVUX05UT1AgPSBZZXNQbGVhc2UKKwlOT19QT1NJWF9HT09ESUVTID0gVW5mb3J0dW5hdGVseVllcworCURFRkFVTFRfSEVMUF9GT1JNQVQgPSBodG1sCisJQ09NUEFUX0NGTEFHUyArPSAtRF9fVVNFX01JTkdXX0FDQ0VTUyAtRF9VU0VfMzJCSVRfVElNRV9UIC1ETk9HREkgLUljb21wYXQgLUljb21wYXQvd2luMzIKKwlDT01QQVRfQ0ZMQUdTICs9IC1EU1RSSVBfRVhURU5TSU9OPVwiLmV4ZVwiCisJQ09NUEFUX09CSlMgKz0gY29tcGF0L21pbmd3Lm8gY29tcGF0L3dpbmFuc2kubyBcCisJCWNvbXBhdC93aW4zMi9wdGhyZWFkLm8gY29tcGF0L3dpbjMyL3N5c2xvZy5vIFwKKwkJY29tcGF0L3dpbjMyL2RpcmVudC5vCisJQkFTSUNfQ0ZMQUdTICs9IC1EUFJPVEVDVF9OVEZTX0RFRkFVTFQ9MQorCUJBU0lDX0xERkxBR1MgKz0gLVdsLC0tbGFyZ2UtYWRkcmVzcy1hd2FyZQorCUVYVExJQlMgKz0gLWx3czJfMzIKKwlHSVRMSUJTICs9IGdpdC5yZXMKKwlQVEhSRUFEX0xJQlMgPQorCVJDID0gd2luZHJlcyAtTyBjb2ZmCisJTkFUSVZFX0NSTEYgPSBZZXNQbGVhc2UKKwlYID0gLmV4ZQorCVNQQVJTRV9GTEFHUyA9IC1Xbm8tb25lLWJpdC1zaWduZWQtYml0ZmllbGQKK2lmbmVxICgsJCh3aWxkY2FyZCAuLi9USElTX0lTX01TWVNHSVQpKQorCWh0bWxkaXIgPSBkb2MvZ2l0L2h0bWwvCisJcHJlZml4ID0KKwlJTlNUQUxMID0gL2Jpbi9pbnN0YWxsCisJRVhUTElCUyArPSAvbWluZ3cvbGliL2xpYnouYQorCU5PX1JfVE9fR0NDX0xJTktFUiA9IFllc1BsZWFzZQorCUlOVEVSTkFMX1FTT1JUID0gWWVzUGxlYXNlCisJSEFWRV9MSUJDSEFSU0VUX0ggPSBZZXNQbGVhc2UKKwlOT19HRVRURVhUID0gWWVzUGxlYXNlCitlbHNlCisJTk9fQ1VSTCA9IFllc1BsZWFzZQorZW5kaWYKK2VuZGlmCitpZmVxICgkKHVuYW1lX1MpLFFOWCkKKwlDT01QQVRfQ0ZMQUdTICs9IC1EU0FfUkVTVEFSVD0wCisJRVhQQVRfTkVFRFNfWE1MUEFSU0VfSCA9IFllc1BsZWFzZQorCUhBVkVfU1RSSU5HU19IID0gWWVzUGxlYXNlCisJTkVFRFNfU09DS0VUID0gWWVzUGxlYXNlCisJTk9fR0VUUEFHRVNJWkUgPSBZZXNQbGVhc2UKKwlOT19JQ09OViA9IFllc1BsZWFzZQorCU5PX01FTU1FTSA9IFllc1BsZWFzZQorCU5PX01LRFRFTVAgPSBZZXNQbGVhc2UKKwlOT19NS1NURU1QUyA9IFllc1BsZWFzZQorCU5PX05TRUMgPSBZZXNQbGVhc2UKKwlOT19QVEhSRUFEUyA9IFllc1BsZWFzZQorCU5PX1JfVE9fR0NDX0xJTktFUiA9IFllc1BsZWFzZQorCU5PX1NUUkNBU0VTVFIgPSBZZXNQbGVhc2UKKwlOT19TVFJMQ1BZID0gWWVzUGxlYXNlCitlbmRpZgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MTcwYWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwxMTg1IEBACisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b2NvbmYgdG8gcHJvZHVjZSBhIGNvbmZpZ3VyZSBzY3JpcHQuCisKKyMjIERlZmluaXRpb25zIG9mIHByaXZhdGUgbWFjcm9zLgorCisjIEdJVF9DT05GX1NVQlNUKFZBTCwgVkFSKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2F1c2UgdGhlIGxpbmUgIlZBUj1WQUwiIHRvIGJlIGV2ZW50dWFsbHkgYXBwZW5kZWQgdG8gJHtjb25maWdfZmlsZX0uCitBQ19ERUZVTihbR0lUX0NPTkZfU1VCU1RdLAorW0FDX1JFUVVJUkUoW0dJVF9DT05GX1NVQlNUX0lOSVRdKQorY29uZmlnX2FwcGVuZGVkX2RlZnM9IiRjb25maWdfYXBwZW5kZWRfZGVmcyR7bmV3bGluZX1kbmwKKyQxPW00X2lmKFskI10sWzFdLFskeyQxfV0sWyQyXSkiXSkKKworIyBHSVRfQ09ORl9TVUJTVF9JTklUCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJlcGFyZSBzaGVsbCB2YXJpYWJsZXMgYW5kIGF1dG9jb25mIG1hY2hpbmUgcmVxdWlyZWQgYnkgbGF0ZXIgY2FsbHMKKyMgdG8gR0lUX0NPTkZfU1VCU1QuCitBQ19ERUZVTihbR0lUX0NPTkZfU1VCU1RfSU5JVF0sCisgICAgW2NvbmZpZ19hcHBlbmRlZF9kZWZzPTsgbmV3bGluZT0nCisnCisgICAgQUNfQ09ORklHX0NPTU1BTkRTKFskY29uZmlnX2ZpbGVdLAorICAgICAgICAgICAgICAgICAgICAgICBbZWNobyAiJGNvbmZpZ19hcHBlbmRlZF9kZWZzIiA+PiAiJGNvbmZpZ19maWxlIl0sCisgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWdfZmlsZT0kY29uZmlnX2ZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19hcHBlbmRlZF9kZWZzPSIkY29uZmlnX2FwcGVuZGVkX2RlZnMiXSldKQorCisjIEdJVF9BUkdfU0VUX1BBVEgoUFJPR1JBTSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm92aWRlIC0td2l0aC1QUk9HUkFNPVBBVEggb3B0aW9uIHRvIHNldCBQQVRIIHRvIFBST0dSQU0KKyMgT3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGFsbG93cyBzZXR0aW5nIE5PX1BST0dSQU09WWVzUGxlYXNlIGlmCisjIC0td2l0aG91dC1QUk9HUkFNIHZlcnNpb24gdXNlZC4KK0FDX0RFRlVOKFtHSVRfQVJHX1NFVF9QQVRIXSwKKyAgICBbQUNfQVJHX1dJVEgoWyQxXSwKKyAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtJDE9UEFUSF0sCisgICAgICAgICAgICAgICAgICAgICAgICBbcHJvdmlkZSBQQVRIIHRvICQxXSldLAorICAgICAgICBbR0lUX0NPTkZfQVBQRU5EX1BBVEgoWyQxXSwgWyQyXSldLAorICAgICAgICBbXSldKQorCisjIEdJVF9DT05GX0FQUEVORF9QQVRIKFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBhcnNlIC0td2l0aC1QUk9HUkFNPVBBVEggb3B0aW9uIHRvIHNldCBQUk9HUkFNX1BBVEg9UEFUSAorIyBVc2VkIGJ5IEdJVF9BUkdfU0VUX1BBVEgoUFJPR1JBTSkKKyMgT3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGFsbG93cyBzZXR0aW5nIE5PX1BST0dSQU09WWVzUGxlYXNlIGlmCisjIC0td2l0aG91dC1QUk9HUkFNIGlzIHVzZWQuCitBQ19ERUZVTihbR0lUX0NPTkZfQVBQRU5EX1BBVEhdLAorICAgIFttNF9wdXNoZGVmKFtHSVRfVUNfUFJPR1JBTV0sIG00X3RvdXBwZXIoWyQxXSkpZG5sCisgICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorCWlmIHRlc3QgLW4gIiQyIjsgdGhlbgorCQlHSVRfVUNfUFJPR1JBTVtdX1BBVEg9JHdpdGh2YWwKKwkJQUNfTVNHX05PVElDRShbRGlzYWJsaW5nIHVzZSBvZiBHSVRfVUNfUFJPR1JBTV0pCisJCUdJVF9DT05GX1NVQlNUKFtOT19dR0lUX1VDX1BST0dSQU0sIFtZZXNQbGVhc2VdKQorCQlHSVRfQ09ORl9TVUJTVChHSVRfVUNfUFJPR1JBTVtdX1BBVEgsIFtdKQorCWVsc2UKKwkJQUNfTVNHX0VSUk9SKFtZb3UgY2Fubm90IHVzZSBnaXQgd2l0aG91dCAkMV0pCisJZmkKKyAgICBlbHNlCisJaWYgdGVzdCAiJHdpdGh2YWwiID0gInllcyI7IHRoZW4KKwkJQUNfTVNHX1dBUk4oW1lvdSBzaG91bGQgcHJvdmlkZSBwYXRoIGZvciAtLXdpdGgtJDE9UEFUSF0pCisJZWxzZQorCQlHSVRfVUNfUFJPR1JBTVtdX1BBVEg9JHdpdGh2YWwKKwkJQUNfTVNHX05PVElDRShbU2V0dGluZyBHSVRfVUNfUFJPR1JBTVtdX1BBVEggdG8gJHdpdGh2YWxdKQorCQlHSVRfQ09ORl9TVUJTVChHSVRfVUNfUFJPR1JBTVtdX1BBVEgsIFskd2l0aHZhbF0pCisJZmkKKyAgICBmaQorICAgIG00X3BvcGRlZihbR0lUX1VDX1BST0dSQU1dKV0pCisKKyMgR0lUX1BBUlNFX1dJVEgoUEFDS0FHRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRm9yIHVzZSBpbiBBQ19BUkdfV0lUSCBhY3Rpb24taWYtZm91bmQsIGZvciBwYWNrYWdlcyBkZWZhdWx0IE9OLgorIyAqIFNldCBOT19QQUNLQUdFPVllc1BsZWFzZSBmb3IgLS13aXRob3V0LVBBQ0tBR0UKKyMgKiBTZXQgUEFDS0FHRURJUj1QQVRIIGZvciAtLXdpdGgtUEFDS0FHRT1QQVRICisjICogVW5zZXQgTk9fUEFDS0FHRSBmb3IgLS13aXRoLVBBQ0tBR0Ugd2l0aG91dCBBUkcKK0FDX0RFRlVOKFtHSVRfUEFSU0VfV0lUSF0sCisgICAgW200X3B1c2hkZWYoW0dJVF9VQ19QQUNLQUdFXSwgbTRfdG91cHBlcihbJDFdKSlkbmwKKyAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSAibm8iOyB0aGVuCisJTk9fW11HSVRfVUNfUEFDS0FHRT1ZZXNQbGVhc2UKKyAgICBlbGlmIHRlc3QgIiR3aXRodmFsIiA9ICJ5ZXMiOyB0aGVuCisJTk9fW11HSVRfVUNfUEFDS0FHRT0KKyAgICBlbHNlCisJTk9fW11HSVRfVUNfUEFDS0FHRT0KKwlHSVRfVUNfUEFDS0FHRVtdRElSPSR3aXRodmFsCisJQUNfTVNHX05PVElDRShbU2V0dGluZyBHSVRfVUNfUEFDS0FHRVtdRElSIHRvICR3aXRodmFsXSkKKwlHSVRfQ09ORl9TVUJTVChHSVRfVUNfUEFDS0FHRVtESVJdLCBbJHdpdGh2YWxdKQorICAgIGZpCisgICAgbTRfcG9wZGVmKFtHSVRfVUNfUEFDS0FHRV0pXSkKKworIyBHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVIoV0lUSE5BTUUsIFZBUiwgSEVMUF9URVhUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgVkFSIHRvIHRoZSB2YWx1ZSBzcGVjaWVkIGJ5IC0td2l0aC1XSVRITkFNRS4KKyMgTm8gdmVyaWZpY2F0aW9uIG9mIGFyZ3VtZW50cyBpcyBwZXJmb3JtZWQsIGJ1dCB3YXJuaW5ncyBhcmUgaXNzdWVkCisjIGlmIGVpdGhlciAneWVzJyBvciAnbm8nIGlzIHNwZWNpZmllZC4KKyMgSEVMUF9URVhUIGlzIHByZXNlbnRlZCB3aGVuIC0taGVscCBpcyBjYWxsZWQuCisjIFRoaXMgaXMgYSBkaXJlY3Qgd2F5IHRvIGFsbG93IHNldHRpbmcgdmFyaWFibGVzIGluIHRoZSBNYWtlZmlsZS4KK0FDX0RFRlVOKFtHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVJdLAorW0FDX0FSR19XSVRIKFskMV0sCisgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtJDE9VkFMVUVdLCAkMyldLAorIGlmIHRlc3QgLW4gIiR3aXRodmFsIjsgdGhlbgorICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIiAtbyAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorICAgIEFDX01TR19XQVJOKFtZb3UgbGlrZWx5IGRvIG5vdCB3YW50IGVpdGhlciAneWVzJyBvciAnbm8nIGFzXQorCQkgICAgIFthIHZhbHVlIGZvciAkMSAoJDIpLiAgTWF5YmUgeW91IGRvLi4uP10pCisgIGZpCisgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgJDIgdG8gJHdpdGh2YWxdKQorICBHSVRfQ09ORl9TVUJTVChbJDJdLCBbJHdpdGh2YWxdKQorIGZpKV0pIyBHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVIKKworIworIyBHSVRfQ0hFQ0tfRlVOQyhGVU5DVElPTiwgSUZUUlVFLCBJRkZBTFNFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTaW1pbGFyIHRvIEFDX0NIRUNLX0ZVTkMsIGJ1dCBvbiBzeXN0ZW1zIHRoYXQgZG8gbm90IGdlbmVyYXRlCisjIHdhcm5pbmdzIGZvciBtaXNzaW5nIHByb3RvdHlwZXMgKGUuZy4gRnJlZUJTRCB3aGVuIGNvbXBpbGluZyB3aXRob3V0CisjIC1XYWxsKSwgaXQgZG9lcyBub3Qgd29yay4gIEJ5IGxvb2tpbmcgZm9yIGZ1bmN0aW9uIGRlZmluaXRpb24gaW4KKyMgbGlicmFyaWVzLCB0aGlzIHByb2JsZW0gY2FuIGJlIHdvcmtlZCBhcm91bmQuCitBQ19ERUZVTihbR0lUX0NIRUNLX0ZVTkNdLFtBQ19DSEVDS19GVU5DKFskMV0sWworICBBQ19TRUFSQ0hfTElCUyhbJDFdLCwKKyAgWyQyXSxbJDNdKQorXSxbJDNdKV0pCisKKyMKKyMgR0lUX1NUQVNIX0ZMQUdTKEJBU0VQQVRIX1ZBUikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWxsb3cgZm9yIGVhc3kgc3Rhc2hpbmcgb2YgTERGTEFHUyBhbmQgQ1BQRkxBR1MgYmVmb3JlIHJ1bm5pbmcKKyMgdGVzdHMgdGhhdCBtYXkgd2FudCB0byB0YWtlIHVzZXIgc2V0dGluZ3MgaW50byBhY2NvdW50LgorQUNfREVGVU4oW0dJVF9TVEFTSF9GTEFHU10sWworaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICBvbGRfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgIG9sZF9MREZMQUdTPSIkTERGTEFHUyIKKyAgIENQUEZMQUdTPSItSSQxL2luY2x1ZGUgJENQUEZMQUdTIgorICAgTERGTEFHUz0iLUwkMS8kbGliICRMREZMQUdTIgorZmkKK10pCisKK2RubAorZG5sIEdJVF9VTlNUQVNIX0ZMQUdTKEJBU0VQQVRIX1ZBUikKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFJlc3RvcmUgdGhlIHN0YXNoZWQgKkZMQUdTIHZhbHVlcy4KK0FDX0RFRlVOKFtHSVRfVU5TVEFTSF9GTEFHU10sWworaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICBDUFBGTEFHUz0iJG9sZF9DUFBGTEFHUyIKKyAgIExERkxBR1M9IiRvbGRfTERGTEFHUyIKK2ZpCitdKQorCisjIyBDb25maWd1cmUgYm9keSBzdGFydHMgaGVyZS4KKworQUNfUFJFUkVRKDIuNTkpCitBQ19JTklUKFtnaXRdLCBbQEBHSVRfVkVSU0lPTkBAXSwgW2dpdEB2Z2VyLmtlcm5lbC5vcmddKQorCitBQ19DT05GSUdfU1JDRElSKFtnaXQuY10pCisKK2NvbmZpZ19maWxlPWNvbmZpZy5tYWsuYXV0b2dlbgorY29uZmlnX2luPWNvbmZpZy5tYWsuaW4KKworR0lUX0NPTkZfU1VCU1QoW0FVVE9DT05GSUdVUkVEXSwgW1llc1BsZWFzZV0pCisKKyMgRGlyZWN0b3JpZXMgaG9sZGluZyAic2FuZXIiIHZlcnNpb25zIG9mIGNvbW1vbiBvciBQT1NJWCBiaW5hcmllcy4KK0FDX0FSR19XSVRIKFtzYW5lLXRvb2wtcGF0aF0sCisgIFtBU19IRUxQX1NUUklORygKKyAgICBbLS13aXRoLXNhbmUtdG9vbC1wYXRoPURJUi0xW1s6RElSLTIuLi46RElSLW5dXV0sCisgICAgW0RpcmVjdG9yaWVzIHRvIHByZXBlbmQgdG8gUEFUSCBpbiBidWlsZCBzeXN0ZW0gYW5kIGdlbmVyYXRlZCBzY3JpcHRzXSldLAorICBbaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorICAgIHdpdGh2YWw9JycKKyAgZWxzZQorICAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgU0FORV9UT09MX1BBVEggdG8gJyR3aXRodmFsJ10pCisgIGZpCisgIEdJVF9DT05GX1NVQlNUKFtTQU5FX1RPT0xfUEFUSF0sIFskd2l0aHZhbF0pXSwKKyAgWyMgSWYgdGhlICItLXdpdGgtc2FuZS10b29sLXBhdGgiIG9wdGlvbiB3YXMgbm90IGdpdmVuLCBkb24ndCB0b3VjaAorICAgIyBTQU5FX1RPT0xfUEFUSCBoZXJlLCBidXQgbGV0IGRlZmF1bHRzIGluIE1ha2VmaWxlIHRha2UgY2FyZSBvZiBpdC4KKyAgICMgVGhpcyBzaG91bGQgbWluaW1pemUgc3B1cmlvdXMgZGlmZmVyZW5jZXMgaW4gdGhlIGJlaGF2aW91ciBvZiB0aGUKKyAgICMgR2l0IGJ1aWxkIHN5c3RlbSB3aGVuIGNvbmZpZ3VyZSBpcyB1c2VkIHcuci50LiB3aGVuIGl0IGlzIG5vdC4KKyAgIDpdKQorCisjIyBTaXRlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBwcm9ncmFtcyAoYmVmb3JlIHRlc3RzKQorIyMgLS13aXRoLVBBQ0tBR0VbPUFSR10gYW5kIC0td2l0aG91dC1QQUNLQUdFCisjCisjIFNldCBsaWIgdG8gYWx0ZXJuYXRpdmUgbmFtZSBvZiBsaWIgZGlyZWN0b3J5IChlLmcuIGxpYjY0KQorQUNfQVJHX1dJVEgoW2xpYl0sCisgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGliPUFSR10sCisgICAgICAgICAgICAgICAgIFtBUkcgc3BlY2lmaWVzIGFsdGVybmF0aXZlIG5hbWUgZm9yIGxpYiBkaXJlY3RvcnldKV0sCisgW2lmIHRlc3QgIiR3aXRodmFsIiA9ICJubyIgfHwgdGVzdCAiJHdpdGh2YWwiID0gInllcyI7IHRoZW4KKwlBQ19NU0dfV0FSTihbWW91IHNob3VsZCBwcm92aWRlIG5hbWUgZm9yIC0td2l0aC1saWI9QVJHXSkKKyAgZWxzZQorCWxpYj0kd2l0aHZhbAorCUFDX01TR19OT1RJQ0UoW1NldHRpbmcgbGliIHRvICckbGliJ10pCisJR0lUX0NPTkZfU1VCU1QoW2xpYl0pCisgIGZpXSkKKworaWYgdGVzdCAteiAiJGxpYiI7IHRoZW4KKyAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgbGliIHRvICdsaWInICh0aGUgZGVmYXVsdCldKQorICAgbGliPWxpYgorZmkKKworQUNfQVJHX0VOQUJMRShbcHRocmVhZHNdLAorIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcHRocmVhZHM9RkxBR1NdLAorICBbRkxBR1MgaXMgdGhlIHZhbHVlIHRvIHBhc3MgdG8gdGhlIGNvbXBpbGVyIHRvIGVuYWJsZSBQT1NJWCBUaHJlYWRzLl0KKyAgW1RoZSBkZWZhdWx0IGlmIEZMQUdTIGlzIG5vdCBzcGVjaWZpZWQgaXMgdG8gdHJ5IGZpcnN0IC1wdGhyZWFkXQorICBbYW5kIHRoZW4gLWxwdGhyZWFkLl0KKyAgWy0tZGlzYWJsZS1wdGhyZWFkcyB3aWxsIGRpc2FibGUgdGhyZWFkaW5nLl0pXSwKK1sKK2lmIHRlc3QgIngkZW5hYmxldmFsIiA9ICJ4eWVzIjsgdGhlbgorICAgQUNfTVNHX05PVElDRShbV2lsbCB0cnkgLXB0aHJlYWQgdGhlbiAtbHB0aHJlYWQgdG8gZW5hYmxlIFBPU0lYIFRocmVhZHNdKQorZWxpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgIT0gInhubyI7IHRoZW4KKyAgIFBUSFJFQURfQ0ZMQUdTPSRlbmFibGV2YWwKKyAgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgJyRQVEhSRUFEX0NGTEFHUycgYXMgdGhlIEZMQUdTIHRvIGVuYWJsZSBQT1NJWCBUaHJlYWRzXSkKK2Vsc2UKKyAgIEFDX01TR19OT1RJQ0UoW1BPU0lYIFRocmVhZHMgd2lsbCBiZSBkaXNhYmxlZC5dKQorICAgTk9fUFRIUkVBRFM9WWVzUGxlYXNlCisgICBVU0VSX05PUFRIUkVBRD0xCitmaV0sCitbCisgICBBQ19NU0dfTk9USUNFKFtXaWxsIHRyeSAtcHRocmVhZCB0aGVuIC1scHRocmVhZCB0byBlbmFibGUgUE9TSVggVGhyZWFkcy5dKQorXSkKKworIyBEZWZpbmUgb3B0aW9uIHRvIGVuYWJsZSBKYXZhU2NyaXB0IG1pbmlmaWNhdGlvbgorQUNfQVJHX0VOQUJMRShbanNtaW5dLAorW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1qc21pbj1QQVRIXSwKKyAgW1BBVEggaXMgdGhlIG5hbWUgb2YgYSBKYXZhU2NyaXB0IG1pbmlmaWVyIG9yIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIG9uZS5dKV0sCitbCisgIEpTTUlOPSRlbmFibGV2YWw7CisgIEFDX01TR19OT1RJQ0UoW1NldHRpbmcgSlNNSU4gdG8gJyRKU01JTicgdG8gZW5hYmxlIEphdmFTY3JpcHQgbWluaWZ5aW5nXSkKKyAgR0lUX0NPTkZfU1VCU1QoW0pTTUlOXSkKK10pCisKKyMgRGVmaW5lIG9wdGlvbiB0byBlbmFibGUgQ1NTIG1pbmlmaWNhdGlvbgorQUNfQVJHX0VOQUJMRShbY3NzbWluXSwKK1tBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY3NzbWluPVBBVEhdLAorICBbUEFUSCBpcyB0aGUgbmFtZSBvZiBhIENTUyBtaW5pZmllciBvciB0aGUgYWJzb2x1dGUgcGF0aCB0byBvbmUuXSldLAorWworICBDU1NNSU49JGVuYWJsZXZhbDsKKyAgQUNfTVNHX05PVElDRShbU2V0dGluZyBDU1NNSU4gdG8gJyRDU1NNSU4nIHRvIGVuYWJsZSBDU1MgbWluaWZ5aW5nXSkKKyAgR0lUX0NPTkZfU1VCU1QoW0NTU01JTl0pCitdKQorCisjIyBTaXRlIGNvbmZpZ3VyYXRpb24gKG92ZXJyaWRlIGF1dG9kZXRlY3Rpb24pCisjIyAtLXdpdGgtUEFDS0FHRVs9QVJHXSBhbmQgLS13aXRob3V0LVBBQ0tBR0UKK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3Igc2l0ZSBjb25maWd1cmF0aW9uXSkKKyMKKyMgRGVmaW5lIE5PX1NWTl9URVNUUyBpZiB5b3Ugd2FudCB0byBza2lwIHRpbWUtY29uc3VtaW5nIFNWTiBpbnRlcm9wZXJhYmlsaXR5CisjIHRlc3RzLiAgVGhlc2UgdGVzdHMgdGFrZSB1cCBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aGUgdG90YWwgdGVzdCB0aW1lCisjIGJ1dCBhcmUgbm90IG5lZWRlZCB1bmxlc3MgeW91IHBsYW4gdG8gdGFsayB0byBTVk4gcmVwb3MuCisjCisjIERlZmluZSBQUENfU0hBMSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIHJ1bm5pbmcgbWFrZSB0byBtYWtlIHVzZSBvZgorIyBhIGJ1bmRsZWQgU0hBMSByb3V0aW5lIG9wdGltaXplZCBmb3IgUG93ZXJQQy4KKyMKKyMgRGVmaW5lIE5PX09QRU5TU0wgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgeW91IGRvIG5vdCBoYXZlIE9wZW5TU0wuCisjIFRoaXMgYWxzbyBpbXBsaWVzIEJMS19TSEExLgorIworIyBEZWZpbmUgT1BFTlNTTERJUj0vZm9vL2JhciBpZiB5b3VyIG9wZW5zc2wgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgorIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCitBQ19BUkdfV0lUSChvcGVuc3NsLAorQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1vcGVuc3NsXSxbdXNlIE9wZW5TU0wgbGlicmFyeSAoZGVmYXVsdCBpcyBZRVMpXSkKK0FTX0hFTFBfU1RSSU5HKFtdLCAgICAgICAgICAgICAgW0FSRyBjYW4gYmUgcHJlZml4IGZvciBvcGVuc3NsIGxpYnJhcnkgYW5kIGhlYWRlcnNdKSwKK0dJVF9QQVJTRV9XSVRIKFtvcGVuc3NsXSkpCisKKyMgRGVmaW5lIFVTRV9MSUJQQ1JFIGlmIHlvdSBoYXZlIGFuZCB3YW50IHRvIHVzZSBsaWJwY3JlLiBnaXQtZ3JlcCB3aWxsIGJlCisjIGFibGUgdG8gdXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zLgorIworIyBEZWZpbmUgTElCUENSRURJUj0vZm9vL2JhciBpZiB5b3VyIGxpYnBjcmUgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgorIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCisjCitBQ19BUkdfV0lUSChsaWJwY3JlLAorQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJwY3JlXSxbc3VwcG9ydCBQZXJsLWNvbXBhdGlibGUgcmVnZXhlcyAoZGVmYXVsdCBpcyBOTyldKQorQVNfSEVMUF9TVFJJTkcoW10sICAgICAgICAgICBbQVJHIGNhbiBiZSBhbHNvIHByZWZpeCBmb3IgbGlicGNyZSBsaWJyYXJ5IGFuZCBoZWFkZXJzXSksCisgICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorCVVTRV9MSUJQQ1JFPQorICAgIGVsaWYgdGVzdCAiJHdpdGh2YWwiID0gInllcyI7IHRoZW4KKwlVU0VfTElCUENSRT1ZZXNQbGVhc2UKKyAgICBlbHNlCisJVVNFX0xJQlBDUkU9WWVzUGxlYXNlCisJTElCUENSRURJUj0kd2l0aHZhbAorCUFDX01TR19OT1RJQ0UoW1NldHRpbmcgTElCUENSRURJUiB0byAkTElCUENSRURJUl0pCisgICAgICAgIGRubCBVU0VfTElCUENSRSBjYW4gc3RpbGwgYmUgbW9kaWZpZWQgYmVsb3csIHNvIGRvbid0IHN1YnN0aXR1dGUKKyAgICAgICAgZG5sIGl0IHlldC4KKwlHSVRfQ09ORl9TVUJTVChbTElCUENSRURJUl0pCisgICAgZmkpCisjCisjIERlZmluZSBIQVZFX0FMTE9DQV9IIGlmIHlvdSBoYXZlIHdvcmtpbmcgYWxsb2NhKDMpIGRlZmluZWQgaW4gdGhhdCBoZWFkZXIuCitBQ19GVU5DX0FMTE9DQQorY2FzZSAkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCBpbgorICAgIHllcykgICAgSEFWRV9BTExPQ0FfSD1ZZXNQbGVhc2U7OworICAgICopICAgICAgSEFWRV9BTExPQ0FfSD0nJzs7Citlc2FjCitHSVRfQ09ORl9TVUJTVChbSEFWRV9BTExPQ0FfSF0pCisjCisjIERlZmluZSBOT19DVVJMIGlmIHlvdSBkbyBub3QgaGF2ZSBjdXJsIGluc3RhbGxlZC4gIGdpdC1odHRwLXB1bGwgYW5kCisjIGdpdC1odHRwLXB1c2ggYXJlIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgdXNlIGh0dHA6Ly8gYW5kIGh0dHBzOi8vCisjIHRyYW5zcG9ydHMuCisjCisjIERlZmluZSBDVVJMRElSPS9mb28vYmFyIGlmIHlvdXIgY3VybCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXJlIGluCisjIC9mb28vYmFyL2luY2x1ZGUgYW5kIC9mb28vYmFyL2xpYiBkaXJlY3Rvcmllcy4KK0FDX0FSR19XSVRIKGN1cmwsCitBU19IRUxQX1NUUklORyhbLS13aXRoLWN1cmxdLFtzdXBwb3J0IGh0dHAocyk6Ly8gdHJhbnNwb3J0cyAoZGVmYXVsdCBpcyBZRVMpXSkKK0FTX0hFTFBfU1RSSU5HKFtdLCAgICAgICAgICAgW0FSRyBjYW4gYmUgYWxzbyBwcmVmaXggZm9yIGN1cmwgbGlicmFyeSBhbmQgaGVhZGVyc10pLAorR0lUX1BBUlNFX1dJVEgoY3VybCkpCisjCisjIERlZmluZSBOT19FWFBBVCBpZiB5b3UgZG8gbm90IGhhdmUgZXhwYXQgaW5zdGFsbGVkLiAgZ2l0LWh0dHAtcHVzaCBpcworIyBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHB1c2ggdXNpbmcgaHR0cDovLyBhbmQgaHR0cHM6Ly8gdHJhbnNwb3J0cy4KKyMKKyMgRGVmaW5lIEVYUEFURElSPS9mb28vYmFyIGlmIHlvdXIgZXhwYXQgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFyZSBpbgorIyAvZm9vL2Jhci9pbmNsdWRlIGFuZCAvZm9vL2Jhci9saWIgZGlyZWN0b3JpZXMuCitBQ19BUkdfV0lUSChleHBhdCwKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtZXhwYXRdLAorW3N1cHBvcnQgZ2l0LXB1c2ggdXNpbmcgaHR0cDovLyBhbmQgaHR0cHM6Ly8gdHJhbnNwb3J0cyB2aWEgV2ViREFWIChkZWZhdWx0IGlzIFlFUyldKQorQVNfSEVMUF9TVFJJTkcoW10sICAgICAgICAgICAgW0FSRyBjYW4gYmUgYWxzbyBwcmVmaXggZm9yIGV4cGF0IGxpYnJhcnkgYW5kIGhlYWRlcnNdKSwKK0dJVF9QQVJTRV9XSVRIKGV4cGF0KSkKKyMKKyMgRGVmaW5lIE5PX0ZJTksgaWYgeW91IGFyZSBidWlsZGluZyBvbiBEYXJ3aW4vTWFjIE9TIFgsIGhhdmUgRmluaworIyBpbnN0YWxsZWQgaW4gL3N3LCBidXQgZG9uJ3Qgd2FudCBHSVQgdG8gbGluayBhZ2FpbnN0IGFueSBsaWJyYXJpZXMKKyMgaW5zdGFsbGVkIHRoZXJlLiAgSWYgZGVmaW5lZCB5b3UgbWF5IHNwZWNpZnkgeW91ciBvd24gKG9yIEZpbmsncykKKyMgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQgbGlicmFyeSBkaXJlY3RvcmllcyBieSBkZWZpbmluZyBDRkxBR1MKKyMgYW5kIExERkxBR1MgYXBwcm9wcmlhdGVseS4KKyMKKyMgRGVmaW5lIE5PX0RBUldJTl9QT1JUUyBpZiB5b3UgYXJlIGJ1aWxkaW5nIG9uIERhcndpbi9NYWMgT1MgWCwKKyMgaGF2ZSBEYXJ3aW5Qb3J0cyBpbnN0YWxsZWQgaW4gL29wdC9sb2NhbCwgYnV0IGRvbid0IHdhbnQgR0lUIHRvCisjIGxpbmsgYWdhaW5zdCBhbnkgbGlicmFyaWVzIGluc3RhbGxlZCB0aGVyZS4gIElmIGRlZmluZWQgeW91IG1heQorIyBzcGVjaWZ5IHlvdXIgb3duIChvciBEYXJ3aW5Qb3J0J3MpIGluY2x1ZGUgZGlyZWN0b3JpZXMgYW5kCisjIGxpYnJhcnkgZGlyZWN0b3JpZXMgYnkgZGVmaW5pbmcgQ0ZMQUdTIGFuZCBMREZMQUdTIGFwcHJvcHJpYXRlbHkuCisjCisjIERlZmluZSBOT19NTUFQIGlmIHlvdSB3YW50IHRvIGF2b2lkIG1tYXAuCisjCisjIERlZmluZSBOT19JQ09OViBpZiB5b3VyIGxpYmMgZG9lcyBub3QgcHJvcGVybHkgc3VwcG9ydCBpY29udi4KK0FDX0FSR19XSVRIKGljb252LAorQVNfSEVMUF9TVFJJTkcoWy0td2l0aG91dC1pY29udl0sCitbaWYgeW91ciBhcmNoaXRlY3R1cmUgZG9lc24ndCBwcm9wZXJseSBzdXBwb3J0IGljb252XSkKK0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtaWNvbnY9UEFUSF0sCitbUEFUSCBpcyBwcmVmaXggZm9yIGxpYmljb252IGxpYnJhcnkgYW5kIGhlYWRlcnNdKQorQVNfSEVMUF9TVFJJTkcoW10sCitbdXNlZCBvbmx5IGlmIHlvdSBuZWVkIGxpbmtpbmcgd2l0aCBsaWJpY29udl0pLAorR0lUX1BBUlNFX1dJVEgoaWNvbnYpKQorCisjIyAtLWVuYWJsZS1GRUFUVVJFWz1BUkddIGFuZCAtLWRpc2FibGUtRkVBVFVSRQorIworIyBEZWZpbmUgVVNFX05TRUMgYmVsb3cgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcworIyBhbmQgY3RpbWVzLiBOb3RlIHRoYXQgeW91IG5lZWQgcmVjZW50IGdsaWJjIChhdCBsZWFzdCAyLjIuNCkgZm9yIHRoaXMsIGFuZAorIyBpdCB3aWxsIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkKKyMgcmFuZG9tbHkgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQKKyMgdGltZXMgKG15IGV4dDMgZG9lc24ndCkuCisjCisjIERlZmluZSBVU0VfU1RERVYgYmVsb3cgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgdGhlIHVuZGVybHlpbmcgZGV2aWNlCisjIGNoYW5nZSBiZWluZyBjb25zaWRlcmVkIGFuIGlub2RlIGNoYW5nZSBmcm9tIHRoZSB1cGRhdGUtaW5kZXggcGVyc3BlY3RpdmUuCisKKyMKKyMgQWxsb3cgdXNlciB0byBzZXQgRVRDX0dJVENPTkZJRyB2YXJpYWJsZQorR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSKGdpdGNvbmZpZywgRVRDX0dJVENPTkZJRywKKwkJCVVzZSBWQUxVRSBpbnN0ZWFkIG9mIC9ldGMvZ2l0Y29uZmlnIGFzIHRoZQorCQkJZ2xvYmFsIGdpdCBjb25maWd1cmF0aW9uIGZpbGUuCisJCQlJZiBWQUxVRSBpcyBub3QgZnVsbHkgcXVhbGlmaWVkIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQKKwkJCWFzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgY29tcHV0ZWQgcHJlZml4IGF0IHJ1bnRpbWUuKQorCisjCisjIEFsbG93IHVzZXIgdG8gc2V0IEVUQ19HSVRBVFRSSUJVVEVTIHZhcmlhYmxlCitHSVRfUEFSU0VfV0lUSF9TRVRfTUFLRV9WQVIoZ2l0YXR0cmlidXRlcywgRVRDX0dJVEFUVFJJQlVURVMsCisJCQlVc2UgVkFMVUUgaW5zdGVhZCBvZiAvZXRjL2dpdGF0dHJpYnV0ZXMgYXMgdGhlCisJCQlnbG9iYWwgZ2l0IGF0dHJpYnV0ZXMgZmlsZS4KKwkJCUlmIFZBTFVFIGlzIG5vdCBmdWxseSBxdWFsaWZpZWQgaXQgd2lsbCBiZSBpbnRlcnByZXRlZAorCQkJYXMgYSBwYXRoIHJlbGF0aXZlIHRvIHRoZSBjb21wdXRlZCBwcmVmaXggYXQgcnVudGltZS4pCisKKyMKKyMgQWxsb3cgdXNlciB0byBzZXQgdGhlIGRlZmF1bHQgcGFnZXIKK0dJVF9QQVJTRV9XSVRIX1NFVF9NQUtFX1ZBUihwYWdlciwgREVGQVVMVF9QQUdFUiwKKwkJCVVzZSBWQUxVRSBhcyB0aGUgZmFsbC1iYWNrIHBhZ2VyIGluc3RlYWQgb2YgJ2xlc3MnLgorCQkJVGhpcyBpcyB1c2VkIGJ5IHRoaW5ncyBsaWtlICdnaXQgbG9nJyB3aGVuIHRoZSB1c2VyCisJCQlkb2VzIG5vdCBzcGVjaWZ5IGEgcGFnZXIgdG8gdXNlIHRocm91Z2ggYWx0ZXJuYXRlCisJCQltZXRob2RzLiBlZzogL3Vzci9iaW4vcGFnZXIpCisjCisjIEFsbG93IHVzZXIgdG8gc2V0IHRoZSBkZWZhdWx0IGVkaXRvcgorR0lUX1BBUlNFX1dJVEhfU0VUX01BS0VfVkFSKGVkaXRvciwgREVGQVVMVF9FRElUT1IsCisJCQlVc2UgVkFMVUUgYXMgdGhlIGZhbGwtYmFjayBlZGl0b3IgaW5zdGVhZCBvZiAndmknLgorCQkJVGhpcyBpcyB1c2VkIGJ5IHRoaW5ncyBsaWtlICdnaXQgY29tbWl0JyB3aGVuIHRoZSB1c2VyCisJCQlkb2VzIG5vdCBzcGVjaWZ5IGEgcHJlZmVycmVkIGVkaXRvciB0aHJvdWdoIG90aGVyCisJCQltZXRob2RzLiBlZzogL3Vzci9iaW4vZWRpdG9yKQorCisjCisjIERlZmluZSBTSEVMTF9QQVRIIHRvIHByb3ZpZGUgcGF0aCB0byBzaGVsbC4KK0dJVF9BUkdfU0VUX1BBVEgoc2hlbGwpCisjCisjIERlZmluZSBQRVJMX1BBVEggdG8gcHJvdmlkZSBwYXRoIHRvIFBlcmwuCitHSVRfQVJHX1NFVF9QQVRIKHBlcmwpCisjCisjIERlZmluZSBQWVRIT05fUEFUSCB0byBwcm92aWRlIHBhdGggdG8gUHl0aG9uLgorR0lUX0FSR19TRVRfUEFUSChweXRob24sIGFsbG93LXdpdGhvdXQpCisjCisjIERlZmluZSBaTElCX1BBVEggdG8gcHJvdmlkZSBwYXRoIHRvIHpsaWIuCitHSVRfQVJHX1NFVF9QQVRIKHpsaWIpCisjCisjIERlY2xhcmUgdGhlIHdpdGgtdGNsdGsvd2l0aG91dC10Y2x0ayBvcHRpb25zLgorQUNfQVJHX1dJVEgodGNsdGssCitBU19IRUxQX1NUUklORyhbLS13aXRoLXRjbHRrXSxbdXNlIFRjbC9UayBHVUkgKGRlZmF1bHQgaXMgWUVTKV0pCitBU19IRUxQX1NUUklORyhbXSxbQVJHIGlzIHRoZSBmdWxsIHBhdGggdG8gdGhlIFRjbC9UayBpbnRlcnByZXRlci5dKQorQVNfSEVMUF9TVFJJTkcoW10sW0JhcmUgLS13aXRoLXRjbHRrIHdpbGwgbWFrZSB0aGUgR1VJIHBhcnQgb25seSBpZl0pCitBU19IRUxQX1NUUklORyhbXSxbVGNsL1RrIGludGVycHJldGVyIHdpbGwgYmUgZm91bmQgaW4gYSBzeXN0ZW0uXSksCitHSVRfUEFSU0VfV0lUSCh0Y2x0aykpCisjCisKKworIyMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgcHJvZ3JhbXNdKQorIworQUNfUFJPR19DQyhbY2MgZ2NjXSkKK0FDX0NfSU5MSU5FCitjYXNlICRhY19jdl9jX2lubGluZSBpbgorICBpbmxpbmUgfCB5ZXMgfCBubykgSU5MSU5FPScnOzsKKyAgKikgICAgICAgICAgICAgICAgIElOTElORT0kYWNfY3ZfY19pbmxpbmUgOzsKK2VzYWMKK0dJVF9DT05GX1NVQlNUKFtJTkxJTkVdKQorCisjIHdoaWNoIHN3aXRjaCB0byBwYXNzIHJ1bnRpbWUgcGF0aCB0byBkeW5hbWljIGxpYnJhcmllcyB0byB0aGUgbGlua2VyCitBQ19DQUNIRV9DSEVDSyhbaWYgbGlua2VyIHN1cHBvcnRzIC1SXSwgZ2l0X2N2X2xkX2Rhc2hyLCBbCisgICBTQVZFX0xERkxBR1M9IiR7TERGTEFHU30iCisgICBMREZMQUdTPSIke1NBVkVfTERGTEFHU30gLVIgLyIKKyAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtdKV0sIFtnaXRfY3ZfbGRfZGFzaHI9eWVzXSwgW2dpdF9jdl9sZF9kYXNocj1ub10pCisgICBMREZMQUdTPSIke1NBVkVfTERGTEFHU30iCitdKQoraWYgdGVzdCAiJGdpdF9jdl9sZF9kYXNociIgPSAieWVzIjsgdGhlbgorICAgQ0NfTERfRFlOUEFUSD0tUgorZWxzZQorICAgQUNfQ0FDSEVfQ0hFQ0soW2lmIGxpbmtlciBzdXBwb3J0cyAtV2wsLXJwYXRoLF0sIGdpdF9jdl9sZF93bF9ycGF0aCwgWworICAgICAgU0FWRV9MREZMQUdTPSIke0xERkxBR1N9IgorICAgICAgTERGTEFHUz0iJHtTQVZFX0xERkxBR1N9IC1XbCwtcnBhdGgsLyIKKyAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtdKV0sIFtnaXRfY3ZfbGRfd2xfcnBhdGg9eWVzXSwgW2dpdF9jdl9sZF93bF9ycGF0aD1ub10pCisgICAgICBMREZMQUdTPSIke1NBVkVfTERGTEFHU30iCisgICBdKQorICAgaWYgdGVzdCAiJGdpdF9jdl9sZF93bF9ycGF0aCIgPSAieWVzIjsgdGhlbgorICAgICAgQ0NfTERfRFlOUEFUSD0tV2wsLXJwYXRoLAorICAgZWxzZQorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2lmIGxpbmtlciBzdXBwb3J0cyAtcnBhdGhdLCBnaXRfY3ZfbGRfcnBhdGgsIFsKKyAgICAgICAgIFNBVkVfTERGTEFHUz0iJHtMREZMQUdTfSIKKyAgICAgICAgIExERkxBR1M9IiR7U0FWRV9MREZMQUdTfSAtcnBhdGggLyIKKyAgICAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtdKV0sIFtnaXRfY3ZfbGRfcnBhdGg9eWVzXSwgW2dpdF9jdl9sZF9ycGF0aD1ub10pCisgICAgICAgICBMREZMQUdTPSIke1NBVkVfTERGTEFHU30iCisgICAgICBdKQorICAgICAgaWYgdGVzdCAiJGdpdF9jdl9sZF9ycGF0aCIgPSAieWVzIjsgdGhlbgorICAgICAgICAgQ0NfTERfRFlOUEFUSD0tcnBhdGgKKyAgICAgIGVsc2UKKyAgICAgICAgIENDX0xEX0RZTlBBVEg9CisgICAgICAgICBBQ19NU0dfV0FSTihbbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgcnVudGltZSBwYXRoIHRvIGR5bmFtaWMgbGlicmFyaWVzXSkKKyAgICAgIGZpCisgICBmaQorZmkKK0dJVF9DT05GX1NVQlNUKFtDQ19MRF9EWU5QQVRIXSkKKyNBQ19QUk9HX0lOU1RBTEwJCSMgbmVlZHMgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIHNvdXJjZXMKK0FDX0NIRUNLX1RPT0xTKEFSLCBbZ2FyIGFyXSwgOikKK0FDX0NIRUNLX1BST0dTKFRBUiwgW2d0YXIgdGFyXSkKK0FDX0NIRUNLX1BST0dTKERJRkYsIFtnbnVkaWZmIGdkaWZmIGRpZmZdKQorIyBUQ0xUS19QQVRIIHdpbGwgYmUgc2V0IHRvIHNvbWUgdmFsdWUgaWYgd2Ugd2FudCBUY2wvVGsKKyMgb3Igd2lsbCBiZSBlbXB0eSBvdGhlcndpc2UuCitpZiB0ZXN0IC1uICIkTk9fVENMVEsiOyB0aGVuCisgIFRDTFRLX1BBVEg9CitlbHNlCisgIGlmIHRlc3QgIiR3aXRoX3RjbHRrIiA9ICIiOyB0aGVuCisgICMgTm8gVGNsL1RrIHN3aXRjaGVzIGdpdmVuLiBEbyBub3QgY2hlY2sgZm9yIFRjbC9UaywgdXNlIGJhcmUgJ3dpc2gnLgorICAgIFRDTFRLX1BBVEg9d2lzaAorICBlbGlmIHRlc3QgIiR3aXRoX3RjbHRrIiA9ICJ5ZXMiOyB0aGVuCisgICMgVGNsL1RrIGNoZWNrIHJlcXVlc3RlZC4KKyAgICBBQ19DSEVDS19QUk9HUyhUQ0xUS19QQVRILCBbd2lzaF0sICkKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoW1VzaW5nIFRjbC9UayBpbnRlcnByZXRlciAkd2l0aF90Y2x0a10pCisgICAgVENMVEtfUEFUSD0iJHdpdGhfdGNsdGsiCisgIGZpCitmaQorR0lUX0NPTkZfU1VCU1QoW1RDTFRLX1BBVEhdKQorQUNfQ0hFQ0tfUFJPR1MoQVNDSUlET0MsIFthc2NpaWRvY10pCitpZiB0ZXN0IC1uICIkQVNDSUlET0MiOyB0aGVuCisJQUNfTVNHX0NIRUNLSU5HKFtmb3IgYXNjaWlkb2MgdmVyc2lvbl0pCisJYXNjaWlkb2NfdmVyc2lvbj1gJEFTQ0lJRE9DIC0tdmVyc2lvbiAyPi9kZXYvbnVsbGAKKwljYXNlICIke2FzY2lpZG9jX3ZlcnNpb259IiBpbgorCWFzY2lpZG9jJyAnOCopCisJCUFDX01TR19SRVNVTFQoWyR7YXNjaWlkb2NfdmVyc2lvbn1dKQorCQk7OworCSopCisJCUFDX01TR19SRVNVTFQoWyR7YXNjaWlkb2NfdmVyc2lvbn0gKHVua25vd24pXSkKKwkJOzsKKwllc2FjCitmaQorCisKKyMjIENoZWNrcyBmb3IgbGlicmFyaWVzLgorQUNfTVNHX05PVElDRShbQ0hFQ0tTIGZvciBsaWJyYXJpZXNdKQorIworIyBEZWZpbmUgTk9fT1BFTlNTTCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UgZG8gbm90IGhhdmUgT3BlblNTTC4KKyMgRGVmaW5lIE5FRURTX1NTTF9XSVRIX0NSWVBUTyBpZiB5b3UgbmVlZCAtbGNyeXB0byB3aXRoIC1sc3NsIChEYXJ3aW4pLgorCitHSVRfU1RBU0hfRkxBR1MoJE9QRU5TU0xESVIpCisKK0FDX0NIRUNLX0xJQihbY3J5cHRvXSwgW1NIQTFfSW5pdF0sCitbTkVFRFNfU1NMX1dJVEhfQ1JZUFRPPV0sCitbQUNfQ0hFQ0tfTElCKFtzc2xdLCBbU0hBMV9Jbml0XSwKKyBbTkVFRFNfU1NMX1dJVEhfQ1JZUFRPPVllc1BsZWFzZSBOT19PUEVOU1NMPV0sCisgW05FRURTX1NTTF9XSVRIX0NSWVBUTz0gICAgICAgICAgTk9fT1BFTlNTTD1ZZXNQbGVhc2VdKV0pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRPUEVOU1NMRElSKQorCitHSVRfQ09ORl9TVUJTVChbTkVFRFNfU1NMX1dJVEhfQ1JZUFRPXSkKK0dJVF9DT05GX1NVQlNUKFtOT19PUEVOU1NMXSkKKworIworIyBEZWZpbmUgVVNFX0xJQlBDUkUgaWYgeW91IGhhdmUgYW5kIHdhbnQgdG8gdXNlIGxpYnBjcmUuIGdpdC1ncmVwIHdpbGwgYmUKKyMgYWJsZSB0byB1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisjCisKK2lmIHRlc3QgLW4gIiRVU0VfTElCUENSRSI7IHRoZW4KKworR0lUX1NUQVNIX0ZMQUdTKCRMSUJQQ1JFRElSKQorCitBQ19DSEVDS19MSUIoW3BjcmVdLCBbcGNyZV92ZXJzaW9uXSwKK1tVU0VfTElCUENSRT1ZZXNQbGVhc2VdLAorW1VTRV9MSUJQQ1JFPV0pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRMSUJQQ1JFRElSKQorCitHSVRfQ09ORl9TVUJTVChbVVNFX0xJQlBDUkVdKQorCitmaQorCisjCisjIERlZmluZSBOT19DVVJMIGlmIHlvdSBkbyBub3QgaGF2ZSBsaWJjdXJsIGluc3RhbGxlZC4gIGdpdC1odHRwLXB1bGwgYW5kCisjIGdpdC1odHRwLXB1c2ggYXJlIG5vdCBidWlsdCwgYW5kIHlvdSBjYW5ub3QgdXNlIGh0dHA6Ly8gYW5kIGh0dHBzOi8vCisjIHRyYW5zcG9ydHMuCisKK0dJVF9TVEFTSF9GTEFHUygkQ1VSTERJUikKKworQUNfQ0hFQ0tfTElCKFtjdXJsXSwgW2N1cmxfZ2xvYmFsX2luaXRdLAorW05PX0NVUkw9XSwKK1tOT19DVVJMPVllc1BsZWFzZV0pCisKK2lmIHRlc3QgLXogIiR7Tk9fQ1VSTH0iICYmIHRlc3QgLXogIiR7Tk9fT1BFTlNTTH0iOyB0aGVuCisKK0FDX0NIRUNLX0xJQihbY3VybF0sIFtDdXJsX3NzbF9pbml0XSwKK1tORUVEU19TU0xfV0lUSF9DVVJMPVllc1BsZWFzZV0sCitbTkVFRFNfU1NMX1dJVEhfQ1VSTD1dKQorCitHSVRfQ09ORl9TVUJTVChbTkVFRFNfU1NMX1dJVEhfQ1VSTF0pCisKK2ZpCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRDVVJMRElSKQorCitHSVRfQ09ORl9TVUJTVChbTk9fQ1VSTF0pCisKK2lmIHRlc3QgLXogIiROT19DVVJMIjsgdGhlbgorCitBQ19DSEVDS19QUk9HKFtDVVJMX0NPTkZJR10sIFtjdXJsLWNvbmZpZ10sCitbY3VybC1jb25maWddLAorW25vXSkKKworaWYgdGVzdCAkQ1VSTF9DT05GSUcgIT0gbm87IHRoZW4KKyAgICBHSVRfQ09ORl9TVUJTVChbQ1VSTF9DT05GSUddKQorZmkKKworZmkKKworCisjCisjIERlZmluZSBOT19FWFBBVCBpZiB5b3UgZG8gbm90IGhhdmUgZXhwYXQgaW5zdGFsbGVkLiAgZ2l0LWh0dHAtcHVzaCBpcworIyBub3QgYnVpbHQsIGFuZCB5b3UgY2Fubm90IHB1c2ggdXNpbmcgaHR0cDovLyBhbmQgaHR0cHM6Ly8gdHJhbnNwb3J0cy4KKworR0lUX1NUQVNIX0ZMQUdTKCRFWFBBVERJUikKKworQUNfQ0hFQ0tfTElCKFtleHBhdF0sIFtYTUxfUGFyc2VyQ3JlYXRlXSwKK1tOT19FWFBBVD1dLAorW05PX0VYUEFUPVllc1BsZWFzZV0pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRFWFBBVERJUikKKworR0lUX0NPTkZfU1VCU1QoW05PX0VYUEFUXSkKKworIworIyBEZWZpbmUgTkVFRFNfTElCSUNPTlYgaWYgbGlua2luZyB3aXRoIGxpYmMgaXMgbm90IGVub3VnaCAoRGFyd2luIGFuZAorIyBzb21lIFNvbGFyaXMgaW5zdGFsbGF0aW9ucykuCisjIERlZmluZSBOT19JQ09OViBpZiBuZWl0aGVyIGxpYmMgbm9yIGxpYmljb252IHN1cHBvcnQgaWNvbnYuCisKK2lmIHRlc3QgLXogIiROT19JQ09OViI7IHRoZW4KKworR0lUX1NUQVNIX0ZMQUdTKCRJQ09OVkRJUikKKworQUNfREVGVU4oW0lDT05WVEVTVF9TUkNdLAorW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPGljb252Lmg+XSwKKyBbaWNvbnZfb3BlbigiIiwgIiIpO10pXSkKKworaWYgdGVzdCAtbiAiJElDT05WRElSIjsgdGhlbgorICAgbGliX29yZGVyPSItbGljb252IC1sYyIKK2Vsc2UKKyAgIGxpYl9vcmRlcj0iLWxjIC1saWNvbnYiCitmaQorCitOT19JQ09OVj1ZZXNQbGVhc2UKKworZm9yIGwgaW4gJGxpYl9vcmRlcjsgZG8KKyAgICBpZiB0ZXN0ICIkbCIgPSAiLWxpY29udiI7IHRoZW4KKyAgICAgICBORUVEU19MSUJJQ09OVj1ZZXNQbGVhc2UKKyAgICBlbHNlCisgICAgICAgTkVFRFNfTElCSUNPTlY9CisgICAgZmkKKworICAgIG9sZF9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkTElCUyAkbCIKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBpY29udiBpbiAkbF0pCisgICAgQUNfTElOS19JRkVMU0UoW0lDT05WVEVTVF9TUkNdLAorCVtBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCU5PX0lDT05WPQorCWJyZWFrXSwKKwlbQUNfTVNHX1JFU1VMVChbbm9dKV0pCisgICAgTElCUz0iJG9sZF9MSUJTIgorZG9uZQorCisjaW4gY2FzZSBvZiBicmVhaworTElCUz0iJG9sZF9MSUJTIgorCitHSVRfVU5TVEFTSF9GTEFHUygkSUNPTlZESVIpCisKK0dJVF9DT05GX1NVQlNUKFtORUVEU19MSUJJQ09OVl0pCitHSVRfQ09ORl9TVUJTVChbTk9fSUNPTlZdKQorCitpZiB0ZXN0IC1uICIkTk9fSUNPTlYiOyB0aGVuCisgICAgTkVFRFNfTElCSUNPTlY9CitmaQorCitmaQorCisjCisjIERlZmluZSBOT19ERUZMQVRFX0JPVU5EIGlmIGRlZmxhdGVCb3VuZCBpcyBtaXNzaW5nIGZyb20gemxpYi4KKworR0lUX1NUQVNIX0ZMQUdTKCRaTElCX1BBVEgpCisKK0FDX0RFRlVOKFtaTElCVEVTVF9TUkNdLCBbCitBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDx6bGliLmg+XSwKKyBbZGVmbGF0ZUJvdW5kKDAsIDApO10pXSkKK0FDX01TR19DSEVDS0lORyhbZm9yIGRlZmxhdGVCb3VuZCBpbiAtbHpdKQorb2xkX0xJQlM9IiRMSUJTIgorTElCUz0iJExJQlMgLWx6IgorQUNfTElOS19JRkVMU0UoW1pMSUJURVNUX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pXSwKKwlbQUNfTVNHX1JFU1VMVChbbm9dKQorCU5PX0RFRkxBVEVfQk9VTkQ9eWVzXSkKK0xJQlM9IiRvbGRfTElCUyIKKworR0lUX1VOU1RBU0hfRkxBR1MoJFpMSUJfUEFUSCkKKworR0lUX0NPTkZfU1VCU1QoW05PX0RFRkxBVEVfQk9VTkRdKQorCisjCisjIERlZmluZSBORUVEU19TT0NLRVQgaWYgbGlua2luZyB3aXRoIGxpYmMgaXMgbm90IGVub3VnaCAoU3VuT1MsCisjIFBhdHJpY2sgTWF1cml0eikuCitBQ19DSEVDS19MSUIoW2NdLCBbc29ja2V0XSwKK1tORUVEU19TT0NLRVQ9XSwKK1tORUVEU19TT0NLRVQ9WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtORUVEU19TT0NLRVRdKQordGVzdCAtbiAiJE5FRURTX1NPQ0tFVCIgJiYgTElCUz0iJExJQlMgLWxzb2NrZXQiCisKKyMKKyMgVGhlIG5leHQgZmV3IHRlc3RzIHdpbGwgZGVmaW5lIE5FRURTX1JFU09MViBpZiBsaW5raW5nIHdpdGgKKyMgbGlicmVzb2x2IHByb3ZpZGVzIHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyB3ZSB3b3VsZCBub3JtYWxseSBnZXQKKyMgZnJvbSBsaWJjLgorTkVFRFNfUkVTT0xWPQorIworIyBEZWZpbmUgTk9fSU5FVF9OVE9QIGlmIGxpbmtpbmcgd2l0aCAtbHJlc29sdiBpcyBub3QgZW5vdWdoLgorIyBTb2xhcmlzIDIuNyBpbiBwYXJ0aWN1bGFyIGhvcyBpbmV0X250b3AgaW4gLWxyZXNvbHYuCitOT19JTkVUX05UT1A9CitBQ19DSEVDS19GVU5DKFtpbmV0X250b3BdLAorICAgIFtdLAorICAgIFtBQ19DSEVDS19MSUIoW3Jlc29sdl0sIFtpbmV0X250b3BdLAorCVtORUVEU19SRVNPTFY9WWVzUGxlYXNlXSwKKwlbTk9fSU5FVF9OVE9QPVllc1BsZWFzZV0pCitdKQorR0lUX0NPTkZfU1VCU1QoW05PX0lORVRfTlRPUF0pCisjCisjIERlZmluZSBOT19JTkVUX1BUT04gaWYgbGlua2luZyB3aXRoIC1scmVzb2x2IGlzIG5vdCBlbm91Z2guCisjIFNvbGFyaXMgMi43IGluIHBhcnRpY3VsYXIgaG9zIGluZXRfcHRvbiBpbiAtbHJlc29sdi4KK05PX0lORVRfUFRPTj0KK0FDX0NIRUNLX0ZVTkMoW2luZXRfcHRvbl0sCisgICAgW10sCisgICAgW0FDX0NIRUNLX0xJQihbcmVzb2x2XSwgW2luZXRfcHRvbl0sCisJW05FRURTX1JFU09MVj1ZZXNQbGVhc2VdLAorCVtOT19JTkVUX1BUT049WWVzUGxlYXNlXSkKK10pCitHSVRfQ09ORl9TVUJTVChbTk9fSU5FVF9QVE9OXSkKKyMKKyMgRGVmaW5lIE5PX0hTVFJFUlJPUiBpZiBsaW5raW5nIHdpdGggLWxyZXNvbHYgaXMgbm90IGVub3VnaC4KKyMgU29sYXJpcyAyLjYgaW4gcGFydGljdWxhciBoYXMgbm8gaHN0cmVycm9yLCBldmVuIGluIC1scmVzb2x2LgorTk9fSFNUUkVSUk9SPQorQUNfQ0hFQ0tfRlVOQyhbaHN0cmVycm9yXSwKKyAgICBbXSwKKyAgICBbQUNfQ0hFQ0tfTElCKFtyZXNvbHZdLCBbaHN0cmVycm9yXSwKKwlbTkVFRFNfUkVTT0xWPVllc1BsZWFzZV0sCisJW05PX0hTVFJFUlJPUj1ZZXNQbGVhc2VdKQorXSkKK0dJVF9DT05GX1NVQlNUKFtOT19IU1RSRVJST1JdKQorCitkbmwgVGhpcyBtdXN0IGdvIGFmdGVyIGFsbCB0aGUgcG9zc2libGUgcGxhY2VzIGZvciBpdHMgaW5pdGlhbGl6YXRpb24sCitkbmwgaW4gdGhlIEFDX0NIRUNLX0ZVTkMgaW52b2NhdGlvbnMgYWJvdmUuCitHSVRfQ09ORl9TVUJTVChbTkVFRFNfUkVTT0xWXSkKKyMKKyMgSWYgYW55IG9mIHRoZSBhYm92ZSB0ZXN0cyBkZXRlcm1pbmVkIHRoYXQgLWxyZXNvbHYgaXMgbmVlZGVkIGF0CisjIGJ1aWxkLXRpbWUsIGFsc28gc2V0IGl0IGhlcmUgZm9yIHJlbWFpbmluZyBjb25maWd1cmUtdGltZSBjaGVja3MuCit0ZXN0IC1uICIkTkVFRFNfUkVTT0xWIiAmJiBMSUJTPSIkTElCUyAtbHJlc29sdiIKKworQUNfQ0hFQ0tfTElCKFtjXSwgW2Jhc2VuYW1lXSwKK1tORUVEU19MSUJHRU49XSwKK1tORUVEU19MSUJHRU49WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtORUVEU19MSUJHRU5dKQordGVzdCAtbiAiJE5FRURTX0xJQkdFTiIgJiYgTElCUz0iJExJQlMgLWxnZW4iCisKK0FDX0NIRUNLX0xJQihbY10sIFtnZXR0ZXh0XSwKK1tMSUJDX0NPTlRBSU5TX0xJQklOVEw9WWVzUGxlYXNlXSwKK1tMSUJDX0NPTlRBSU5TX0xJQklOVEw9XSkKK0dJVF9DT05GX1NVQlNUKFtMSUJDX0NPTlRBSU5TX0xJQklOVExdKQorCisjCisjIERlZmluZSBOT19HRVRURVhUIGlmIHlvdSBkb24ndCB3YW50IEdpdCBvdXRwdXQgdG8gYmUgdHJhbnNsYXRlZC4KKyMgQSB0cmFuc2xhdGVkIEdpdCByZXF1aXJlcyBHTlUgbGliaW50bCBvciBhbm90aGVyIGdldHRleHQgaW1wbGVtZW50YXRpb24KK0FDX0NIRUNLX0hFQURFUihbbGliaW50bC5oXSwKK1tOT19HRVRURVhUPV0sCitbTk9fR0VUVEVYVD1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX0dFVFRFWFRdKQorCitpZiB0ZXN0IC16ICIkTk9fR0VUVEVYVCI7IHRoZW4KKyAgICB0ZXN0IC1uICIkTElCQ19DT05UQUlOU19MSUJJTlRMIiB8fCBMSUJTPSIkTElCUyAtbGludGwiCitmaQorCisjIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgaGVhZGVyIGZpbGVzXSkKKyMKKyMgRGVmaW5lIE5PX1NZU19TRUxFQ1RfSCBpZiB5b3UgZG9uJ3QgaGF2ZSBzeXMvc2VsZWN0LmguCitBQ19DSEVDS19IRUFERVIoW3N5cy9zZWxlY3QuaF0sCitbTk9fU1lTX1NFTEVDVF9IPV0sCitbTk9fU1lTX1NFTEVDVF9IPVVuZm9ydHVuYXRlbHlZZXNdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NZU19TRUxFQ1RfSF0pCisjCisjIERlZmluZSBOT19TWVNfUE9MTF9IIGlmIHlvdSBkb24ndCBoYXZlIHN5cy9wb2xsLmgKK0FDX0NIRUNLX0hFQURFUihbc3lzL3BvbGwuaF0sCitbTk9fU1lTX1BPTExfSD1dLAorW05PX1NZU19QT0xMX0g9VW5mb3J0dW5hdGVseVllc10pCitHSVRfQ09ORl9TVUJTVChbTk9fU1lTX1BPTExfSF0pCisjCisjIERlZmluZSBOT19JTlRUWVBFU19IIGlmIHlvdSBkb24ndCBoYXZlIGludHR5cGVzLmgKK0FDX0NIRUNLX0hFQURFUihbaW50dHlwZXMuaF0sCitbTk9fSU5UVFlQRVNfSD1dLAorW05PX0lOVFRZUEVTX0g9VW5mb3J0dW5hdGVseVllc10pCitHSVRfQ09ORl9TVUJTVChbTk9fSU5UVFlQRVNfSF0pCisjCisjIERlZmluZSBPTERfSUNPTlYgaWYgeW91ciBsaWJyYXJ5IGhhcyBhbiBvbGQgaWNvbnYoKSwgd2hlcmUgdGhlIHNlY29uZAorIyAoaW5wdXQgYnVmZmVyIHBvaW50ZXIpIHBhcmFtZXRlciBpcyBkZWNsYXJlZCB3aXRoIHR5cGUgKGNvbnN0IGNoYXIgKiopLgorQUNfREVGVU4oW09MRElDT05WVEVTVF9TUkNdLCBbCitBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxpY29udi5oPgorCitleHRlcm4gc2l6ZV90IGljb252KGljb252X3QgY2QsCisJCSAgICBjaGFyICoqaW5idWYsIHNpemVfdCAqaW5ieXRlc2xlZnQsCisJCSAgICBjaGFyICoqb3V0YnVmLCBzaXplX3QgKm91dGJ5dGVzbGVmdCk7CitdXSwgW10pXSkKKworR0lUX1NUQVNIX0ZMQUdTKCRJQ09OVkRJUikKKworQUNfTVNHX0NIRUNLSU5HKFtmb3Igb2xkIGljb252KCldKQorQUNfQ09NUElMRV9JRkVMU0UoW09MRElDT05WVEVTVF9TUkNdLAorCVtBQ19NU0dfUkVTVUxUKFtub10pXSwKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSkKKwlPTERfSUNPTlY9VW5mb3J0dW5hdGVseVllc10pCisKK0dJVF9VTlNUQVNIX0ZMQUdTKCRJQ09OVkRJUikKKworR0lUX0NPTkZfU1VCU1QoW09MRF9JQ09OVl0pCisKKyMjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCitBQ19NU0dfTk9USUNFKFtDSEVDS1MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzXSkKKyMKK1RZUEVfU09DS0xFTl9UCitjYXNlICRhY19jdl90eXBlX3NvY2tsZW5fdCBpbgorICB5ZXMpCVNPQ0tMRU5fVD0nJzs7CisgICopICAJU09DS0xFTl9UPSRnaXRfY3Zfc29ja2xlbl90X2VxdWl2OzsKK2VzYWMKK0dJVF9DT05GX1NVQlNUKFtTT0NLTEVOX1RdKQorCisjCisjIERlZmluZSBOT19TVFJVQ1RfSVRJTUVSVkFMIGlmIHlvdSBkb24ndCBoYXZlIHN0cnVjdCBpdGltZXJ2YWwuCitBQ19DSEVDS19UWVBFUyhbc3RydWN0IGl0aW1lcnZhbF0sCitbTk9fU1RSVUNUX0lUSU1FUlZBTD1dLAorW05PX1NUUlVDVF9JVElNRVJWQUw9VW5mb3J0dW5hdGVseVllc10sCitbI2luY2x1ZGUgPHN5cy90aW1lLmg+XSkKK0dJVF9DT05GX1NVQlNUKFtOT19TVFJVQ1RfSVRJTUVSVkFMXSkKKyMKKyMgRGVmaW5lIFVTRV9TVF9USU1FU1BFQz1ZZXNQbGVhc2Ugd2hlbiBzdGF0LnN0X210aW1lc3BlYy50dl9uc2VjIGV4aXN0cy4KKyMgRGVmaW5lIE5PX05TRUM9WWVzUGxlYXNlIHdoZW4gbmVpdGhlciBzdGF0LnN0X210aW0udHZfbnNlYyBub3IKKyMgc3RhdC5zdF9tdGltZXNwZWMudHZfbnNlYyBleGlzdHMuCitBQ19DSEVDS19NRU1CRVIoW3N0cnVjdCBzdGF0LnN0X210aW1lc3BlYy50dl9uc2VjXSkKK0FDX0NIRUNLX01FTUJFUihbc3RydWN0IHN0YXQuc3RfbXRpbS50dl9uc2VjXSkKK2lmIHRlc3QgeCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfbXRpbWVzcGVjX3R2X25zZWMgPSB4eWVzOyB0aGVuCisJVVNFX1NUX1RJTUVTUEVDPVllc1BsZWFzZQorCUdJVF9DT05GX1NVQlNUKFtVU0VfU1RfVElNRVNQRUNdKQorZWxpZiB0ZXN0IHgkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X210aW1fdHZfbnNlYyAhPSB4eWVzOyB0aGVuCisJTk9fTlNFQz1ZZXNQbGVhc2UKKwlHSVRfQ09ORl9TVUJTVChbTk9fTlNFQ10pCitmaQorIworIyBEZWZpbmUgTk9fRF9UWVBFX0lOX0RJUkVOVCBpZiB5b3VyIHBsYXRmb3JtIGRlZmluZXMgRFRfVU5LTk9XTiBidXQgbGFja3MKKyMgZF90eXBlIGluIHN0cnVjdCBkaXJlbnQgKGxhdGVzdCBDeWd3aW4gLS0gd2lsbCBiZSBmaXhlZCBzb29uaXNoKS4KK0FDX0NIRUNLX01FTUJFUihzdHJ1Y3QgZGlyZW50LmRfdHlwZSwKK1tOT19EX1RZUEVfSU5fRElSRU5UPV0sCitbTk9fRF9UWVBFX0lOX0RJUkVOVD1ZZXNQbGVhc2VdLAorWyNpbmNsdWRlIDxkaXJlbnQuaD5dKQorR0lUX0NPTkZfU1VCU1QoW05PX0RfVFlQRV9JTl9ESVJFTlRdKQorIworIyBEZWZpbmUgTk9fR0VDT1NfSU5fUFdFTlQgaWYgeW91IGRvbid0IGhhdmUgcHdfZ2Vjb3MgaW4gc3RydWN0IHBhc3N3ZAorIyBpbiB0aGUgQyBsaWJyYXJ5LgorQUNfQ0hFQ0tfTUVNQkVSKHN0cnVjdCBwYXNzd2QucHdfZ2Vjb3MsCitbTk9fR0VDT1NfSU5fUFdFTlQ9XSwKK1tOT19HRUNPU19JTl9QV0VOVD1ZZXNQbGVhc2VdLAorWyNpbmNsdWRlIDxwd2QuaD5dKQorR0lUX0NPTkZfU1VCU1QoW05PX0dFQ09TX0lOX1BXRU5UXSkKKyMKKyMgRGVmaW5lIE5PX1NPQ0tBRERSX1NUT1JBR0UgaWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIHN0cnVjdAorIyBzb2NrYWRkcl9zdG9yYWdlLgorQUNfQ0hFQ0tfVFlQRShzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSwKK1tOT19TT0NLQUREUl9TVE9SQUdFPV0sCitbTk9fU09DS0FERFJfU1RPUkFHRT1ZZXNQbGVhc2VdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CitdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NPQ0tBRERSX1NUT1JBR0VdKQorIworIyBEZWZpbmUgTk9fSVBWNiBpZiB5b3UgbGFjayBJUHY2IHN1cHBvcnQgYW5kIGdldGFkZHJpbmZvKCkuCitBQ19DSEVDS19UWVBFKFtzdHJ1Y3QgYWRkcmluZm9dLFsKKyBHSVRfQ0hFQ0tfRlVOQyhbZ2V0YWRkcmluZm9dLAorICBbTk9fSVBWNj1dLAorICBbTk9fSVBWNj1ZZXNQbGVhc2VdKQorXSxbTk9fSVBWNj1ZZXNQbGVhc2VdLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KK10pCitHSVRfQ09ORl9TVUJTVChbTk9fSVBWNl0pCisjCisjIERlZmluZSBOT19SRUdFWCBpZiB5b3UgaGF2ZSBubyBvciBpbmZlcmlvciByZWdleCBzdXBwb3J0IGluIHlvdXIgQyBsaWJyYXJ5LgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIHBsYXRmb3JtIHJlZ2V4IGNhbiBoYW5kbGUgbnVsbCBieXRlc10sCisgW2FjX2N2X2NfZXhjZWxsZW50X3JlZ2V4XSwgWworQUNfRUdSRVBfQ1BQKHlpcHBlZXllc3dlaGF2ZWl0LAorCUFDX0xBTkdfUFJPR1JBTShbQUNfSU5DTFVERVNfREVGQVVMVAorI2luY2x1ZGUgPHJlZ2V4Lmg+CitdLAorWyNpZmRlZiBSRUdfU1RBUlRFTkQKK3lpcHBlZXllc3dlaGF2ZWl0CisjZW5kaWYKK10pLAorCVthY19jdl9jX2V4Y2VsbGVudF9yZWdleD15ZXNdLAorCVthY19jdl9jX2V4Y2VsbGVudF9yZWdleD1ub10pCitdKQoraWYgdGVzdCAkYWNfY3ZfY19leGNlbGxlbnRfcmVnZXggPSB5ZXM7IHRoZW4KKwlOT19SRUdFWD0KK2Vsc2UKKwlOT19SRUdFWD1ZZXNQbGVhc2UKK2ZpCitHSVRfQ09ORl9TVUJTVChbTk9fUkVHRVhdKQorIworIyBEZWZpbmUgRlJFQURfUkVBRFNfRElSRUNUT1JJRVMgaWYgeW91ciBhcmUgb24gYSBzeXN0ZW0gd2hpY2ggc3VjY2VlZHMKKyMgd2hlbiBhdHRlbXB0aW5nIHRvIHJlYWQgZnJvbSBhbiBmb3BlbidlZCBkaXJlY3RvcnkuCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBzeXN0ZW0gc3VjY2VlZHMgdG8gcmVhZCBmb3BlbidlZCBkaXJlY3RvcnldLAorIFthY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllc10sCitbCitBQ19SVU5fSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oW0FDX0lOQ0xVREVTX0RFRkFVTFRdLAorCQlbW2NoYXIgYzsKKwkJRklMRSAqZiA9IGZvcGVuKCIuIiwgInIiKTsKKwkJcmV0dXJuIGYgJiYgZnJlYWQoJmMsIDEsIDEsIGYpXV0pXSwKKwlbYWNfY3ZfZnJlYWRfcmVhZHNfZGlyZWN0b3JpZXM9bm9dLAorCVthY19jdl9mcmVhZF9yZWFkc19kaXJlY3Rvcmllcz15ZXNdKQorXSkKK2lmIHRlc3QgJGFjX2N2X2ZyZWFkX3JlYWRzX2RpcmVjdG9yaWVzID0geWVzOyB0aGVuCisJRlJFQURfUkVBRFNfRElSRUNUT1JJRVM9VW5mb3J0dW5hdGVseVllcworZWxzZQorCUZSRUFEX1JFQURTX0RJUkVDVE9SSUVTPQorZmkKK0dJVF9DT05GX1NVQlNUKFtGUkVBRF9SRUFEU19ESVJFQ1RPUklFU10pCisjCisjIERlZmluZSBTTlBSSU5URl9SRVRVUk5TX0JPR1VTIGlmIHlvdXIgYXJlIG9uIGEgc3lzdGVtIHdoaWNoIHNucHJpbnRmKCkKKyMgb3IgdnNucHJpbnRmKCkgcmV0dXJuIC0xIGluc3RlYWQgb2YgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggd291bGQKKyMgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8gdGhlIGZpbmFsIHN0cmluZyBpZiBlbm91Z2ggc3BhY2UgaGFkIGJlZW4gYXZhaWxhYmxlLgorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgc25wcmludGYoKSBhbmQvb3IgdnNucHJpbnRmKCkgcmV0dXJuIGJvZ3VzIHZhbHVlXSwKKyBbYWNfY3Zfc25wcmludGZfcmV0dXJuc19ib2d1c10sCitbCitBQ19SVU5fSUZFTFNFKAorCVtBQ19MQU5HX1BST0dSQU0oW0FDX0lOQ0xVREVTX0RFRkFVTFQKKwkJI2luY2x1ZGUgInN0ZGFyZy5oIgorCisJCWludCB0ZXN0X3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBtYXhzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKwkJeworCQkgIGludCByZXQ7CisJCSAgdmFfbGlzdCBhcDsKKwkJICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKwkJICByZXQgPSB2c25wcmludGYoc3RyLCBtYXhzaXplLCBmb3JtYXQsIGFwKTsKKwkJICB2YV9lbmQoYXApOworCQkgIHJldHVybiByZXQ7CisJCX1dLAorCQlbW2NoYXIgYnVmWzZdOworCQkgIGlmICh0ZXN0X3ZzbnByaW50ZihidWYsIDMsICIlcyIsICIxMjM0NSIpICE9IDUKKwkJICAgICAgfHwgc3RyY21wKGJ1ZiwgIjEyIikpIHJldHVybiAxOworCQkgIGlmIChzbnByaW50ZihidWYsIDMsICIlcyIsICIxMjM0NSIpICE9IDUKKwkJICAgICAgfHwgc3RyY21wKGJ1ZiwgIjEyIikpIHJldHVybiAxXV0pXSwKKwlbYWNfY3Zfc25wcmludGZfcmV0dXJuc19ib2d1cz1ub10sCisJW2FjX2N2X3NucHJpbnRmX3JldHVybnNfYm9ndXM9eWVzXSkKK10pCitpZiB0ZXN0ICRhY19jdl9zbnByaW50Zl9yZXR1cm5zX2JvZ3VzID0geWVzOyB0aGVuCisJU05QUklOVEZfUkVUVVJOU19CT0dVUz1VbmZvcnR1bmF0ZWx5WWVzCitlbHNlCisJU05QUklOVEZfUkVUVVJOU19CT0dVUz0KK2ZpCitHSVRfQ09ORl9TVUJTVChbU05QUklOVEZfUkVUVVJOU19CT0dVU10pCisjCisjIERlZmluZSBORUVEU19NT0RFX1RSQU5TTEFUSU9OIGlmIHlvdXIgT1Mgc3RyYXlzIGZyb20gdGhlIHR5cGljYWwgZmlsZSB0eXBlCisjIGJpdHMgaW4gbW9kZSB2YWx1ZXMuCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgcGxhdGZvcm0gdXNlcyB0eXBpY2FsIGZpbGUgdHlwZSBiaXRzXSwKKyBbYWNfY3Zfc2FuZV9tb2RlX2JpdHNdLCBbCitBQ19FR1JFUF9DUFAoeWlwcGVleWVzd2VoYXZlaXQsCisJQUNfTEFOR19QUk9HUkFNKFtBQ19JTkNMVURFU19ERUZBVUxUXSwKK1sjaWYgU19JRk1UID09IDAxNzAwMDAgJiYgXAorCVNfSUZSRUcgPT0gMDEwMDAwMCAmJiBTX0lGRElSID09IDAwNDAwMDAgJiYgU19JRkxOSyA9PSAwMTIwMDAwICYmIFwKKwlTX0lGQkxLID09IDAwNjAwMDAgJiYgU19JRkNIUiA9PSAwMDIwMDAwICYmIFwKKwlTX0lGSUZPID09IDAwMTAwMDAgJiYgU19JRlNPQ0sgPT0gMDE0MDAwMAoreWlwcGVleWVzd2VoYXZlaXQKKyNlbmRpZgorXSksCisJW2FjX2N2X3NhbmVfbW9kZV9iaXRzPXllc10sCisJW2FjX2N2X3NhbmVfbW9kZV9iaXRzPW5vXSkKK10pCitpZiB0ZXN0ICRhY19jdl9zYW5lX21vZGVfYml0cyA9IHllczsgdGhlbgorCU5FRURTX01PREVfVFJBTlNMQVRJT049CitlbHNlCisJTkVFRFNfTU9ERV9UUkFOU0xBVElPTj1VbmZvcnR1bmF0ZWx5WWVzCitmaQorR0lUX0NPTkZfU1VCU1QoW05FRURTX01PREVfVFJBTlNMQVRJT05dKQorCisKKyMjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCisjIyAoaW4gZGVmYXVsdCBDIGxpYnJhcnkgYW5kIGxpYnJhcmllcyBjaGVja2VkIGJ5IEFDX0NIRUNLX0xJQikKK0FDX01TR19OT1RJQ0UoW0NIRUNLUyBmb3IgbGlicmFyeSBmdW5jdGlvbnNdKQorIworIyBEZWZpbmUgTk9fTElCR0VOX0ggaWYgeW91IGRvbid0IGhhdmUgbGliZ2VuLmguCitBQ19DSEVDS19IRUFERVIoW2xpYmdlbi5oXSwKK1tOT19MSUJHRU5fSD1dLAorW05PX0xJQkdFTl9IPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fTElCR0VOX0hdKQorIworIyBEZWZpbmUgSEFWRV9QQVRIU19IIGlmIHlvdSBoYXZlIHBhdGhzLmguCitBQ19DSEVDS19IRUFERVIoW3BhdGhzLmhdLAorW0hBVkVfUEFUSFNfSD1ZZXNQbGVhc2VdLAorW0hBVkVfUEFUSFNfSD1dKQorR0lUX0NPTkZfU1VCU1QoW0hBVkVfUEFUSFNfSF0pCisjCisjIERlZmluZSBIQVZFX0xJQkNIQVJTRVRfSCBpZiBoYXZlIGxpYmNoYXJzZXQuaAorQUNfQ0hFQ0tfSEVBREVSKFtsaWJjaGFyc2V0LmhdLAorW0hBVkVfTElCQ0hBUlNFVF9IPVllc1BsZWFzZV0sCitbSEFWRV9MSUJDSEFSU0VUX0g9XSkKK0dJVF9DT05GX1NVQlNUKFtIQVZFX0xJQkNIQVJTRVRfSF0pCisjCisjIERlZmluZSBIQVZFX1NUUklOR1NfSCBpZiB5b3UgaGF2ZSBzdHJpbmdzLmgKK0FDX0NIRUNLX0hFQURFUihbc3RyaW5ncy5oXSwKK1tIQVZFX1NUUklOR1NfSD1ZZXNQbGVhc2VdLAorW0hBVkVfU1RSSU5HU19IPV0pCitHSVRfQ09ORl9TVUJTVChbSEFWRV9TVFJJTkdTX0hdKQorIyBEZWZpbmUgQ0hBUlNFVF9MSUIgaWYgbGliaWNvbnYgZG9lcyBub3QgZXhwb3J0IHRoZSBsb2NhbGVfY2hhcnNldCBzeW1ib2wKKyMgYW5kIGxpYmNoYXJzZXQgZG9lcworQ0hBUlNFVF9MSUI9CitBQ19DSEVDS19MSUIoW2ljb252XSwgW2xvY2FsZV9jaGFyc2V0XSwKKyAgICAgICBbQ0hBUlNFVF9MSUI9LWxpY29udl0sCisgICAgICAgW0FDX0NIRUNLX0xJQihbY2hhcnNldF0sIFtsb2NhbGVfY2hhcnNldF0sCisgICAgICAgICAgICAgICAgICAgICBbQ0hBUlNFVF9MSUI9LWxjaGFyc2V0XSldKQorR0lUX0NPTkZfU1VCU1QoW0NIQVJTRVRfTElCXSkKKyMKKyMgRGVmaW5lIE5PX0hNQUNfQ1RYX0NMRUFOVVA9WWVzUGxlYXNlIGlmIEhNQUNfQ1RYX2NsZWFudXAgaXMgbWlzc2luZy4KK0FDX0NIRUNLX0xJQihbY3J5cHRvXSwgW0hNQUNfQ1RYX2NsZWFudXBdLAorCVtdLCBbR0lUX0NPTkZfU1VCU1QoW05PX0hNQUNfQ1RYX0NMRUFOVVBdLCBbWWVzUGxlYXNlXSldKQorIworIyBEZWZpbmUgSEFWRV9DTE9DS19HRVRUSU1FPVllc1BsZWFzZSBpZiBjbG9ja19nZXR0aW1lIGlzIGF2YWlsYWJsZS4KK0dJVF9DSEVDS19GVU5DKGNsb2NrX2dldHRpbWUsCisJW0hBVkVfQ0xPQ0tfR0VUVElNRT1ZZXNQbGVhc2VdLAorCVtIQVZFX0NMT0NLX0dFVFRJTUU9XSkKK0dJVF9DT05GX1NVQlNUKFtIQVZFX0NMT0NLX0dFVFRJTUVdKQorCitBQ19ERUZVTihbQ0xPQ0tfTU9OT1RPTklDX1NSQ10sIFsKK0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHRpbWUuaD4KK2Nsb2NraWRfdCBpZCA9IENMT0NLX01PTk9UT05JQzsKK11dKV0pCisKKyMKKyMgRGVmaW5lIEhBVkVfQ0xPQ0tfTU9OT1RPTklDPVllc1BsZWFzZSBpZiBDTE9DS19NT05PVE9OSUMgaXMgYXZhaWxhYmxlLgorQUNfTVNHX0NIRUNLSU5HKFtmb3IgQ0xPQ0tfTU9OT1RPTklDXSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtDTE9DS19NT05PVE9OSUNfU1JDXSwKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSkKKwlIQVZFX0NMT0NLX01PTk9UT05JQz1ZZXNQbGVhc2VdLAorCVtBQ19NU0dfUkVTVUxUKFtub10pCisJSEFWRV9DTE9DS19NT05PVE9OSUM9XSkKK0dJVF9DT05GX1NVQlNUKFtIQVZFX0NMT0NLX01PTk9UT05JQ10pCisjCisjIERlZmluZSBOT19TRVRJVElNRVIgaWYgeW91IGRvbid0IGhhdmUgc2V0aXRpbWVyLgorR0lUX0NIRUNLX0ZVTkMoc2V0aXRpbWVyLAorW05PX1NFVElUSU1FUj1dLAorW05PX1NFVElUSU1FUj1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX1NFVElUSU1FUl0pCisjCisjIERlZmluZSBOT19TVFJDQVNFU1RSIGlmIHlvdSBkb24ndCBoYXZlIHN0cmNhc2VzdHIuCitHSVRfQ0hFQ0tfRlVOQyhzdHJjYXNlc3RyLAorW05PX1NUUkNBU0VTVFI9XSwKK1tOT19TVFJDQVNFU1RSPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fU1RSQ0FTRVNUUl0pCisjCisjIERlZmluZSBOT19NRU1NRU0gaWYgeW91IGRvbid0IGhhdmUgbWVtbWVtLgorR0lUX0NIRUNLX0ZVTkMobWVtbWVtLAorW05PX01FTU1FTT1dLAorW05PX01FTU1FTT1ZZXNQbGVhc2VdKQorR0lUX0NPTkZfU1VCU1QoW05PX01FTU1FTV0pCisjCisjIERlZmluZSBOT19TVFJMQ1BZIGlmIHlvdSBkb24ndCBoYXZlIHN0cmxjcHkuCitHSVRfQ0hFQ0tfRlVOQyhzdHJsY3B5LAorW05PX1NUUkxDUFk9XSwKK1tOT19TVFJMQ1BZPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fU1RSTENQWV0pCisjCisjIERlZmluZSBOT19VSU5UTUFYX1QgaWYgeW91ciBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIHVpbnRtYXhfdAorQUNfQ0hFQ0tfVFlQRSh1aW50bWF4X3QsCitbTk9fVUlOVE1BWF9UPV0sCitbTk9fVUlOVE1BWF9UPVllc1BsZWFzZV0sWworI2luY2x1ZGUgPGludHR5cGVzLmg+CitdKQorR0lUX0NPTkZfU1VCU1QoW05PX1VJTlRNQVhfVF0pCisjCisjIERlZmluZSBOT19TVFJUT1VNQVggaWYgeW91IGRvbid0IGhhdmUgc3RydG91bWF4IGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyhzdHJ0b3VtYXgsCitbTk9fU1RSVE9VTUFYPV0sCitbTk9fU1RSVE9VTUFYPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fU1RSVE9VTUFYXSkKKyMKKyMgRGVmaW5lIE5PX1NFVEVOViBpZiB5b3UgZG9uJ3QgaGF2ZSBzZXRlbnYgaW4gdGhlIEMgbGlicmFyeS4KK0dJVF9DSEVDS19GVU5DKHNldGVudiwKK1tOT19TRVRFTlY9XSwKK1tOT19TRVRFTlY9WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19TRVRFTlZdKQorIworIyBEZWZpbmUgTk9fVU5TRVRFTlYgaWYgeW91IGRvbid0IGhhdmUgdW5zZXRlbnYgaW4gdGhlIEMgbGlicmFyeS4KK0dJVF9DSEVDS19GVU5DKHVuc2V0ZW52LAorW05PX1VOU0VURU5WPV0sCitbTk9fVU5TRVRFTlY9WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19VTlNFVEVOVl0pCisjCisjIERlZmluZSBOT19NS0RURU1QIGlmIHlvdSBkb24ndCBoYXZlIG1rZHRlbXAgaW4gdGhlIEMgbGlicmFyeS4KK0dJVF9DSEVDS19GVU5DKG1rZHRlbXAsCitbTk9fTUtEVEVNUD1dLAorW05PX01LRFRFTVA9WWVzUGxlYXNlXSkKK0dJVF9DT05GX1NVQlNUKFtOT19NS0RURU1QXSkKKyMKKyMgRGVmaW5lIE5PX01LU1RFTVBTIGlmIHlvdSBkb24ndCBoYXZlIG1rc3RlbXBzIGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyhta3N0ZW1wcywKK1tOT19NS1NURU1QUz1dLAorW05PX01LU1RFTVBTPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fTUtTVEVNUFNdKQorIworIyBEZWZpbmUgTk9fSU5JVEdST1VQUyBpZiB5b3UgZG9uJ3QgaGF2ZSBpbml0Z3JvdXBzIGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyhpbml0Z3JvdXBzLAorW05PX0lOSVRHUk9VUFM9XSwKK1tOT19JTklUR1JPVVBTPVllc1BsZWFzZV0pCitHSVRfQ09ORl9TVUJTVChbTk9fSU5JVEdST1VQU10pCisjCisjIERlZmluZSBIQVZFX0dFVERFTElNIGlmIHlvdSBoYXZlIGdldGRlbGltIGluIHRoZSBDIGxpYnJhcnkuCitHSVRfQ0hFQ0tfRlVOQyhnZXRkZWxpbSwKK1tIQVZFX0dFVERFTElNPVllc1BsZWFzZV0sCitbSEFWRV9HRVRERUxJTT1dKQorR0lUX0NPTkZfU1VCU1QoW0hBVkVfR0VUREVMSU1dKQorIworIworIyBEZWZpbmUgTk9fTU1BUCBpZiB5b3Ugd2FudCB0byBhdm9pZCBtbWFwLgorIworIyBEZWZpbmUgTk9fSUNPTlYgaWYgeW91ciBsaWJjIGRvZXMgbm90IHByb3Blcmx5IHN1cHBvcnQgaWNvbnYuCisKK0FDX0RFRlVOKFtCU0RfU1lTQ1RMX1NSQ10sIFsKK0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KK11dLFtbCitpbnQgdmFsLCBtaWJbMl07CitzaXplX3QgbGVuOworbWliWzBdID0gQ1RMX0hXOworbWliWzFdID0gMTsKK2xlbiA9IHNpemVvZih2YWwpOworcmV0dXJuIHN5c2N0bChtaWIsIDIsICZ2YWwsICZsZW4sIE5VTEwsIDApID8gMSA6IDA7CitdXSldKQorCisjCisjIERlZmluZSBIQVZFX0JTRF9TWVNDVEw9WWVzUGxlYXNlIGlmIGEgQlNELWNvbXBhdGlibGUgc3lzY3RsIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZS4KK0FDX01TR19DSEVDS0lORyhbZm9yIEJTRCBzeXNjdGxdKQorQUNfQ09NUElMRV9JRkVMU0UoW0JTRF9TWVNDVExfU1JDXSwKKwlbQUNfTVNHX1JFU1VMVChbeWVzXSkKKwlIQVZFX0JTRF9TWVNDVEw9WWVzUGxlYXNlXSwKKwlbQUNfTVNHX1JFU1VMVChbbm9dKQorCUhBVkVfQlNEX1NZU0NUTD1dKQorR0lUX0NPTkZfU1VCU1QoW0hBVkVfQlNEX1NZU0NUTF0pCisKKyMjIE90aGVyIGNoZWNrcy4KKyMgRGVmaW5lIFVTRV9QSUMgaWYgeW91IG5lZWQgdGhlIG1haW4gZ2l0IG9iamVjdHMgdG8gYmUgYnVpbHQgd2l0aCAtZlBJQworIyBpbiBvcmRlciB0byBidWlsZCBhbmQgbGluayBwZXJsL0dpdC5zby4gIHg4Ni02NCBzZWVtcyB0byBuZWVkIHRoaXMuCisjCisjIERlZmluZSBOT19TWU1MSU5LX0hFQUQgaWYgeW91IG5ldmVyIHdhbnQgLmdpdC9IRUFEIHRvIGJlIGEgc3ltYm9saWMgbGluay4KKyMgRW5hYmxlIGl0IG9uIFdpbmRvd3MuICBCeSBkZWZhdWx0LCBzeW1yZWZzIGFyZSBzdGlsbCB1c2VkLgorIworIyBEZWZpbmUgTk9fUFRIUkVBRFMgaWYgd2UgZG8gbm90IGhhdmUgcHRocmVhZHMuCisjCisjIERlZmluZSBQVEhSRUFEX0xJQlMgdG8gdGhlIGxpbmtlciBmbGFnIHVzZWQgZm9yIFB0aHJlYWQgc3VwcG9ydC4KK0FDX0RFRlVOKFtQVEhSRUFEVEVTVF9TUkNdLCBbCitBQ19MQU5HX1BST0dSQU0oW1sKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CitdXSwgW1sKKwlwdGhyZWFkX211dGV4X3QgdGVzdF9tdXRleDsKKwlwdGhyZWFkX2tleV90IHRlc3Rfa2V5OworCWludCByZXRjb2RlID0gMDsKKwlyZXRjb2RlIHw9IHB0aHJlYWRfa2V5X2NyZWF0ZSgmdGVzdF9rZXksICh2b2lkICopMCk7CisJcmV0Y29kZSB8PSBwdGhyZWFkX211dGV4X2luaXQoJnRlc3RfbXV0ZXgsKHZvaWQgKikwKTsKKwlyZXRjb2RlIHw9IHB0aHJlYWRfbXV0ZXhfbG9jaygmdGVzdF9tdXRleCk7CisJcmV0Y29kZSB8PSBwdGhyZWFkX211dGV4X3VubG9jaygmdGVzdF9tdXRleCk7CisJcmV0dXJuIHJldGNvZGU7CitdXSldKQorCitkbmwgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKAorZG5sICAgW1sjaW5jbHVkZSA8cHRocmVhZC5oPl1dLAorZG5sICAgW1twdGhyZWFkX211dGV4X3QgdGVzdF9tdXRleDtdXQorZG5sICldKQorCitOT19QVEhSRUFEUz1VbmZvcnR1bmF0ZWx5WWVzCitQVEhSRUFEX0xJQlM9CisKK2lmIHRlc3QgLW4gIiRVU0VSX05PUFRIUkVBRCI7IHRoZW4KKyAgIEFDX01TR19OT1RJQ0UoW1NraXBwaW5nIFBPU0lYIFRocmVhZHMgYXQgdXNlciByZXF1ZXN0Ll0pCisjIGhhbmRsZSB0aGVzZSBzZXBhcmF0ZWx5IHNpbmNlIFBUSFJFQURfQ0ZMQUdTIGNvdWxkIGJlICctbHB0aHJlYWRzCisjIC1EX1JFRU5UUkFOVCcgb3Igc29tZSBzdWNoLgorZWxpZiB0ZXN0IC16ICIkUFRIUkVBRF9DRkxBR1MiOyB0aGVuCisgIHRocmVhZHNfZm91bmQ9bm8KKyAgIyBBdHRlbXB0IHRvIGNvbXBpbGUgYW5kIGxpbmsgc29tZSBjb2RlIHVzaW5nIHB0aHJlYWRzIHRvIGRldGVybWluZQorICAjIHJlcXVpcmVkIGxpbmtlciBmbGFncy4gVGhlIG9yZGVyIGlzIHNvbWV3aGF0IGltcG9ydGFudCBoZXJlOiBXZQorICAjIGZpcnN0IHRyeSBpdCB3aXRob3V0IGFueSBleHRyYSBmbGFncywgdG8gY2F0Y2ggc3lzdGVtcyB3aGVyZQorICAjIHB0aHJlYWRzIGFyZSBwYXJ0IG9mIHRoZSBDIGxpYnJhcnksIHRoZW4gZ28gb24gdGVzdGluZyB2YXJpb3VzIG90aGVyCisgICMgZmxhZ3MuIFdlIGRvIHNvIHRvIGF2b2lkIGZhbHNlIHBvc2l0aXZlcy4gRm9yIGV4YW1wbGUsIG9uIE1hYyBPUyBYCisgICMgcHRocmVhZHMgYXJlIHBhcnQgb2YgdGhlIEMgbGlicmFyeTsgbW9yZW92ZXIsIHRoZSBjb21waWxlciBhbGxvd3MgdXMKKyAgIyB0byBhZGQgIi1tdCIgdG8gdGhlIENGTEFHUyAoYWx0aG91Z2ggaXQgd2lsbCBkbyBub3RoaW5nIGV4Y2VwdAorICAjIHRyaWdnZXIgYSB3YXJuaW5nIGFib3V0IGFuIHVudXNlZCBmbGFnKS4gSGVuY2UgaWYgd2UgY2hlY2tlZCBmb3IKKyAgIyAiLW10IiBiZWZvcmUgIiIgd2Ugd291bGQgZW5kIHVwIHBpY2tpbmcgaXQuIEJ1dCB1bmZvcnR1bmF0ZWx5IHRoaXMKKyAgIyB3b3VsZCB0aGVuIHRyaWdnZXIgY29tcGlsZXIgd2FybmluZ3Mgb24gZXZlcnkgc2luZ2xlIGZpbGUgd2UgY29tcGlsZS4KKyAgZm9yIG9wdCBpbiAiIiAtbXQgLXB0aHJlYWQgLWxwdGhyZWFkOyBkbworICAgICBvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBDRkxBR1M9IiRvcHQgJENGTEFHUyIKKyAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgUE9TSVggVGhyZWFkcyB3aXRoICckb3B0J10pCisgICAgIEFDX0xJTktfSUZFTFNFKFtQVEhSRUFEVEVTVF9TUkNdLAorCVtBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCQlOT19QVEhSRUFEUz0KKwkJUFRIUkVBRF9MSUJTPSIkb3B0IgorCQlQVEhSRUFEX0NGTEFHUz0iJG9wdCIKKwkJdGhyZWFkc19mb3VuZD15ZXMKKwkJYnJlYWsKKwldLAorCVtBQ19NU0dfUkVTVUxUKFtub10pXSkKKyAgICAgIENGTEFHUz0iJG9sZF9DRkxBR1MiCisgIGRvbmUKKyAgaWYgdGVzdCAkdGhyZWFkc19mb3VuZCAhPSB5ZXM7IHRoZW4KKyAgICBBQ19DSEVDS19MSUIoW3B0aHJlYWRdLCBbcHRocmVhZF9jcmVhdGVdLAorCVtQVEhSRUFEX0xJQlM9Ii1scHRocmVhZCJdLAorCVtOT19QVEhSRUFEUz1VbmZvcnR1bmF0ZWx5WWVzXSkKKyAgZmkKK2Vsc2UKKyAgb2xkX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkUFRIUkVBRF9DRkxBR1MgJENGTEFHUyIKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgUE9TSVggVGhyZWFkcyB3aXRoICckUFRIUkVBRF9DRkxBR1MnXSkKKyAgQUNfTElOS19JRkVMU0UoW1BUSFJFQURURVNUX1NSQ10sCisJW0FDX01TR19SRVNVTFQoW3llc10pCisJCU5PX1BUSFJFQURTPQorCQlQVEhSRUFEX0xJQlM9IiRQVEhSRUFEX0NGTEFHUyIKKwldLAorCVtBQ19NU0dfUkVTVUxUKFtub10pXSkKKworICBDRkxBR1M9IiRvbGRfQ0ZMQUdTIgorZmkKKworQ0ZMQUdTPSIkb2xkX0NGTEFHUyIKKworR0lUX0NPTkZfU1VCU1QoW1BUSFJFQURfQ0ZMQUdTXSkKK0dJVF9DT05GX1NVQlNUKFtQVEhSRUFEX0xJQlNdKQorR0lUX0NPTkZfU1VCU1QoW05PX1BUSFJFQURTXSkKKworIyMgT3V0cHV0IGZpbGVzCitBQ19DT05GSUdfRklMRVMoWyIke2NvbmZpZ19maWxlfSI6IiR7Y29uZmlnX2lufSJdKQorQUNfT1VUUFVUCmRpZmYgLS1naXQgYS9jb25uZWN0LmMgYi9jb25uZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4ZjVhYgotLS0gL2Rldi9udWxsCisrKyBiL2Nvbm5lY3QuYwpAQCAtMCwwICsxLDgyMyBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKworc3RhdGljIGNoYXIgKnNlcnZlcl9jYXBhYmlsaXRpZXM7CitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfZmVhdHVyZV92YWx1ZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50ICopOworCitzdGF0aWMgaW50IGNoZWNrX3JlZihjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaWYgKCFmbGFncykKKwkJcmV0dXJuIDE7CisKKwlpZiAoIXNraXBfcHJlZml4KG5hbWUsICJyZWZzLyIsICZuYW1lKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBSRUZfTk9STUFMIG1lYW5zIHRoYXQgd2UgZG9uJ3Qgd2FudCB0aGUgbWFnaWMgZmFrZSB0YWcgcmVmcyAqLworCWlmICgoZmxhZ3MgJiBSRUZfTk9STUFMKSAmJiBjaGVja19yZWZuYW1lX2Zvcm1hdChuYW1lLCAwKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBSRUZfSEVBRFMgbWVhbnMgdGhhdCB3ZSB3YW50IHJlZ3VsYXIgYnJhbmNoIGhlYWRzICovCisJaWYgKChmbGFncyAmIFJFRl9IRUFEUykgJiYgc3RhcnRzX3dpdGgobmFtZSwgImhlYWRzLyIpKQorCQlyZXR1cm4gMTsKKworCS8qIFJFRl9UQUdTIG1lYW5zIHRoYXQgd2Ugd2FudCB0YWdzICovCisJaWYgKChmbGFncyAmIFJFRl9UQUdTKSAmJiBzdGFydHNfd2l0aChuYW1lLCAidGFncy8iKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBBbGwgdHlwZSBiaXRzIGNsZWFyIG1lYW5zIHRoYXQgd2UgYXJlIG9rIHdpdGggYW55dGhpbmcgKi8KKwlyZXR1cm4gIShmbGFncyAmIH5SRUZfTk9STUFMKTsKK30KKworaW50IGNoZWNrX3JlZl90eXBlKGNvbnN0IHN0cnVjdCByZWYgKnJlZiwgaW50IGZsYWdzKQoreworCXJldHVybiBjaGVja19yZWYocmVmLT5uYW1lLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZV9pbml0aWFsX2NvbnRhY3QoaW50IGdvdF9hdF9sZWFzdF9vbmVfaGVhZCkKK3sKKwlpZiAoZ290X2F0X2xlYXN0X29uZV9oZWFkKQorCQlkaWUoIlRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdXBvbiBpbml0aWFsIGNvbnRhY3QiKTsKKwllbHNlCisJCWRpZSgiQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS5cblxuIgorCQkgICAgIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0c1xuIgorCQkgICAgImFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuIik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX29uZV9zeW1yZWZfaW5mbyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnN5bXJlZiwgY29uc3QgY2hhciAqdmFsLCBpbnQgbGVuKQoreworCWNoYXIgKnN5bSwgKnRhcmdldDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWlmICghbGVuKQorCQlyZXR1cm47IC8qIGp1c3QgInN5bXJlZiIgKi8KKwkvKiBlLmcuICJzeW1yZWY9SEVBRDpyZWZzL2hlYWRzL21hc3RlciIgKi8KKwlzeW0gPSB4bWVtZHVweih2YWwsIGxlbik7CisJdGFyZ2V0ID0gc3RyY2hyKHN5bSwgJzonKTsKKwlpZiAoIXRhcmdldCkKKwkJLyoganVzdCAic3ltcmVmPXNvbWV0aGluZyIgKi8KKwkJZ290byByZWplY3Q7CisJKih0YXJnZXQrKykgPSAnXDAnOworCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChzeW0sIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwpIHx8CisJICAgIGNoZWNrX3JlZm5hbWVfZm9ybWF0KHRhcmdldCwgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkpCisJCS8qICJzeW1yZWY9Ym9ndXM6cGFpciAqLworCQlnb3RvIHJlamVjdDsKKwlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKHN5bXJlZiwgc3ltKTsKKwlpdGVtLT51dGlsID0gdGFyZ2V0OworCXJldHVybjsKK3JlamVjdDoKKwlmcmVlKHN5bSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBhbm5vdGF0ZV9yZWZzX3dpdGhfc3ltcmVmX2luZm8oc3RydWN0IHJlZiAqcmVmKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBzeW1yZWYgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwljb25zdCBjaGFyICpmZWF0dXJlX2xpc3QgPSBzZXJ2ZXJfY2FwYWJpbGl0aWVzOworCisJd2hpbGUgKGZlYXR1cmVfbGlzdCkgeworCQlpbnQgbGVuOworCQljb25zdCBjaGFyICp2YWw7CisKKwkJdmFsID0gcGFyc2VfZmVhdHVyZV92YWx1ZShmZWF0dXJlX2xpc3QsICJzeW1yZWYiLCAmbGVuKTsKKwkJaWYgKCF2YWwpCisJCQlicmVhazsKKwkJcGFyc2Vfb25lX3N5bXJlZl9pbmZvKCZzeW1yZWYsIHZhbCwgbGVuKTsKKwkJZmVhdHVyZV9saXN0ID0gdmFsICsgMTsKKwl9CisJc3RyaW5nX2xpc3Rfc29ydCgmc3ltcmVmKTsKKworCWZvciAoOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cCgmc3ltcmVmLCByZWYtPm5hbWUpOworCQlpZiAoIWl0ZW0pCisJCQljb250aW51ZTsKKwkJcmVmLT5zeW1yZWYgPSB4c3RyZHVwKChjaGFyICopaXRlbS0+dXRpbCk7CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZzeW1yZWYsIDApOworfQorCisvKgorICogUmVhZCBhbGwgdGhlIHJlZnMgZnJvbSB0aGUgb3RoZXIgZW5kCisgKi8KK3N0cnVjdCByZWYgKipnZXRfcmVtb3RlX2hlYWRzKGludCBpbiwgY2hhciAqc3JjX2J1Ziwgc2l6ZV90IHNyY19sZW4sCisJCQkgICAgICBzdHJ1Y3QgcmVmICoqbGlzdCwgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJICAgICAgc3RydWN0IHNoYTFfYXJyYXkgKmV4dHJhX2hhdmUsCisJCQkgICAgICBzdHJ1Y3Qgc2hhMV9hcnJheSAqc2hhbGxvd19wb2ludHMpCit7CisJc3RydWN0IHJlZiAqKm9yaWdfbGlzdCA9IGxpc3Q7CisJaW50IGdvdF9hdF9sZWFzdF9vbmVfaGVhZCA9IDA7CisKKwkqbGlzdCA9IE5VTEw7CisJZm9yICg7OykgeworCQlzdHJ1Y3QgcmVmICpyZWY7CisJCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCQljaGFyICpuYW1lOworCQlpbnQgbGVuLCBuYW1lX2xlbjsKKwkJY2hhciAqYnVmZmVyID0gcGFja2V0X2J1ZmZlcjsKKwkJY29uc3QgY2hhciAqYXJnOworCisJCWxlbiA9IHBhY2tldF9yZWFkKGluLCAmc3JjX2J1ZiwgJnNyY19sZW4sCisJCQkJICBwYWNrZXRfYnVmZmVyLCBzaXplb2YocGFja2V0X2J1ZmZlciksCisJCQkJICBQQUNLRVRfUkVBRF9HRU5UTEVfT05fRU9GIHwKKwkJCQkgIFBBQ0tFVF9SRUFEX0NIT01QX05FV0xJTkUpOworCQlpZiAobGVuIDwgMCkKKwkJCWRpZV9pbml0aWFsX2NvbnRhY3QoZ290X2F0X2xlYXN0X29uZV9oZWFkKTsKKworCQlpZiAoIWxlbikKKwkJCWJyZWFrOworCisJCWlmIChsZW4gPiA0ICYmIHNraXBfcHJlZml4KGJ1ZmZlciwgIkVSUiAiLCAmYXJnKSkKKwkJCWRpZSgicmVtb3RlIGVycm9yOiAlcyIsIGFyZyk7CisKKwkJaWYgKGxlbiA9PSA0OCAmJiBza2lwX3ByZWZpeChidWZmZXIsICJzaGFsbG93ICIsICZhcmcpKSB7CisJCQlpZiAoZ2V0X3NoYTFfaGV4KGFyZywgb2xkX3NoYTEpKQorCQkJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYWxsb3cgc2hhLTEsIGdvdCAnJXMnIiwgYXJnKTsKKwkJCWlmICghc2hhbGxvd19wb2ludHMpCisJCQkJZGllKCJyZXBvc2l0b3J5IG9uIHRoZSBvdGhlciBlbmQgY2Fubm90IGJlIHNoYWxsb3ciKTsKKwkJCXNoYTFfYXJyYXlfYXBwZW5kKHNoYWxsb3dfcG9pbnRzLCBvbGRfc2hhMSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsZW4gPCA0MiB8fCBnZXRfc2hhMV9oZXgoYnVmZmVyLCBvbGRfc2hhMSkgfHwgYnVmZmVyWzQwXSAhPSAnICcpCisJCQlkaWUoInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJyVzJyIsIGJ1ZmZlcik7CisJCW5hbWUgPSBidWZmZXIgKyA0MTsKKworCQluYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKwkJaWYgKGxlbiAhPSBuYW1lX2xlbiArIDQxKSB7CisJCQlmcmVlKHNlcnZlcl9jYXBhYmlsaXRpZXMpOworCQkJc2VydmVyX2NhcGFiaWxpdGllcyA9IHhzdHJkdXAobmFtZSArIG5hbWVfbGVuICsgMSk7CisJCX0KKworCQlpZiAoZXh0cmFfaGF2ZSAmJiAhc3RyY21wKG5hbWUsICIuaGF2ZSIpKSB7CisJCQlzaGExX2FycmF5X2FwcGVuZChleHRyYV9oYXZlLCBvbGRfc2hhMSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghY2hlY2tfcmVmKG5hbWUsIGZsYWdzKSkKKwkJCWNvbnRpbnVlOworCQlyZWYgPSBhbGxvY19yZWYoYnVmZmVyICsgNDEpOworCQloYXNoY3B5KHJlZi0+b2xkX3NoYTEsIG9sZF9zaGExKTsKKwkJKmxpc3QgPSByZWY7CisJCWxpc3QgPSAmcmVmLT5uZXh0OworCQlnb3RfYXRfbGVhc3Rfb25lX2hlYWQgPSAxOworCX0KKworCWFubm90YXRlX3JlZnNfd2l0aF9zeW1yZWZfaW5mbygqb3JpZ19saXN0KTsKKworCXJldHVybiBsaXN0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfZmVhdHVyZV92YWx1ZShjb25zdCBjaGFyICpmZWF0dXJlX2xpc3QsIGNvbnN0IGNoYXIgKmZlYXR1cmUsIGludCAqbGVucCkKK3sKKwlpbnQgbGVuOworCisJaWYgKCFmZWF0dXJlX2xpc3QpCisJCXJldHVybiBOVUxMOworCisJbGVuID0gc3RybGVuKGZlYXR1cmUpOworCXdoaWxlICgqZmVhdHVyZV9saXN0KSB7CisJCWNvbnN0IGNoYXIgKmZvdW5kID0gc3Ryc3RyKGZlYXR1cmVfbGlzdCwgZmVhdHVyZSk7CisJCWlmICghZm91bmQpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGZlYXR1cmVfbGlzdCA9PSBmb3VuZCB8fCBpc3NwYWNlKGZvdW5kWy0xXSkpIHsKKwkJCWNvbnN0IGNoYXIgKnZhbHVlID0gZm91bmQgKyBsZW47CisJCQkvKiBmZWF0dXJlIHdpdGggbm8gdmFsdWUgKGUuZy4sICJ0aGluLXBhY2siKSAqLworCQkJaWYgKCEqdmFsdWUgfHwgaXNzcGFjZSgqdmFsdWUpKSB7CisJCQkJaWYgKGxlbnApCisJCQkJCSpsZW5wID0gMDsKKwkJCQlyZXR1cm4gdmFsdWU7CisJCQl9CisJCQkvKiBmZWF0dXJlIHdpdGggYSB2YWx1ZSAoZS5nLiwgImFnZW50PWdpdC8xLjIuMyIpICovCisJCQllbHNlIGlmICgqdmFsdWUgPT0gJz0nKSB7CisJCQkJdmFsdWUrKzsKKwkJCQlpZiAobGVucCkKKwkJCQkJKmxlbnAgPSBzdHJjc3BuKHZhbHVlLCAiIFx0XG4iKTsKKwkJCQlyZXR1cm4gdmFsdWU7CisJCQl9CisJCQkvKgorCQkJICogb3RoZXJ3aXNlIHdlIG1hdGNoZWQgYSBzdWJzdHJpbmcgb2YgYW5vdGhlciBmZWF0dXJlOworCQkJICoga2VlcCBsb29raW5nCisJCQkgKi8KKwkJfQorCQlmZWF0dXJlX2xpc3QgPSBmb3VuZCArIDE7CisJfQorCXJldHVybiBOVUxMOworfQorCitpbnQgcGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGNvbnN0IGNoYXIgKmZlYXR1cmVfbGlzdCwgY29uc3QgY2hhciAqZmVhdHVyZSkKK3sKKwlyZXR1cm4gISFwYXJzZV9mZWF0dXJlX3ZhbHVlKGZlYXR1cmVfbGlzdCwgZmVhdHVyZSwgTlVMTCk7Cit9CisKK2NvbnN0IGNoYXIgKnNlcnZlcl9mZWF0dXJlX3ZhbHVlKGNvbnN0IGNoYXIgKmZlYXR1cmUsIGludCAqbGVuKQoreworCXJldHVybiBwYXJzZV9mZWF0dXJlX3ZhbHVlKHNlcnZlcl9jYXBhYmlsaXRpZXMsIGZlYXR1cmUsIGxlbik7Cit9CisKK2ludCBzZXJ2ZXJfc3VwcG9ydHMoY29uc3QgY2hhciAqZmVhdHVyZSkKK3sKKwlyZXR1cm4gISFzZXJ2ZXJfZmVhdHVyZV92YWx1ZShmZWF0dXJlLCBOVUxMKTsKK30KKworZW51bSBwcm90b2NvbCB7CisJUFJPVE9fTE9DQUwgPSAxLAorCVBST1RPX0ZJTEUsCisJUFJPVE9fU1NILAorCVBST1RPX0dJVAorfTsKKworaW50IHVybF9pc19sb2NhbF9ub3Rfc3NoKGNvbnN0IGNoYXIgKnVybCkKK3sKKwljb25zdCBjaGFyICpjb2xvbiA9IHN0cmNocih1cmwsICc6Jyk7CisJY29uc3QgY2hhciAqc2xhc2ggPSBzdHJjaHIodXJsLCAnLycpOworCXJldHVybiAhY29sb24gfHwgKHNsYXNoICYmIHNsYXNoIDwgY29sb24pIHx8CisJCWhhc19kb3NfZHJpdmVfcHJlZml4KHVybCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcm90X25hbWUoZW51bSBwcm90b2NvbCBwcm90b2NvbCkKK3sKKwlzd2l0Y2ggKHByb3RvY29sKSB7CisJCWNhc2UgUFJPVE9fTE9DQUw6CisJCWNhc2UgUFJPVE9fRklMRToKKwkJCXJldHVybiAiZmlsZSI7CisJCWNhc2UgUFJPVE9fU1NIOgorCQkJcmV0dXJuICJzc2giOworCQljYXNlIFBST1RPX0dJVDoKKwkJCXJldHVybiAiZ2l0IjsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAidW5rbm93biBwcm90b2NvbCI7CisJfQorfQorCitzdGF0aWMgZW51bSBwcm90b2NvbCBnZXRfcHJvdG9jb2woY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIXN0cmNtcChuYW1lLCAic3NoIikpCisJCXJldHVybiBQUk9UT19TU0g7CisJaWYgKCFzdHJjbXAobmFtZSwgImdpdCIpKQorCQlyZXR1cm4gUFJPVE9fR0lUOworCWlmICghc3RyY21wKG5hbWUsICJnaXQrc3NoIikpCisJCXJldHVybiBQUk9UT19TU0g7CisJaWYgKCFzdHJjbXAobmFtZSwgInNzaCtnaXQiKSkKKwkJcmV0dXJuIFBST1RPX1NTSDsKKwlpZiAoIXN0cmNtcChuYW1lLCAiZmlsZSIpKQorCQlyZXR1cm4gUFJPVE9fRklMRTsKKwlkaWUoIkkgZG9uJ3QgaGFuZGxlIHByb3RvY29sICclcyciLCBuYW1lKTsKK30KKworc3RhdGljIGNoYXIgKmhvc3RfZW5kKGNoYXIgKipob3N0c3RhcnQsIGludCByZW1vdmVicmFja2V0cykKK3sKKwljaGFyICpob3N0ID0gKmhvc3RzdGFydDsKKwljaGFyICplbmQ7CisJY2hhciAqc3RhcnQgPSBzdHJzdHIoaG9zdCwgIkBbIik7CisJaWYgKHN0YXJ0KQorCQlzdGFydCsrOyAvKiBKdW1wIG92ZXIgJ0AnICovCisJZWxzZQorCQlzdGFydCA9IGhvc3Q7CisJaWYgKHN0YXJ0WzBdID09ICdbJykgeworCQllbmQgPSBzdHJjaHIoc3RhcnQgKyAxLCAnXScpOworCQlpZiAoZW5kKSB7CisJCQlpZiAocmVtb3ZlYnJhY2tldHMpIHsKKwkJCQkqZW5kID0gMDsKKwkJCQltZW1tb3ZlKHN0YXJ0LCBzdGFydCArIDEsIGVuZCAtIHN0YXJ0KTsKKwkJCQllbmQrKzsKKwkJCX0KKwkJfSBlbHNlCisJCQllbmQgPSBob3N0OworCX0gZWxzZQorCQllbmQgPSBob3N0OworCXJldHVybiBlbmQ7Cit9CisKKyNkZWZpbmUgU1RSXyhzKQkjIHMKKyNkZWZpbmUgU1RSKHMpCVNUUl8ocykKKworc3RhdGljIHZvaWQgZ2V0X2hvc3RfYW5kX3BvcnQoY2hhciAqKmhvc3QsIGNvbnN0IGNoYXIgKipwb3J0KQoreworCWNoYXIgKmNvbG9uLCAqZW5kOworCWVuZCA9IGhvc3RfZW5kKGhvc3QsIDEpOworCWNvbG9uID0gc3RyY2hyKGVuZCwgJzonKTsKKwlpZiAoY29sb24pIHsKKwkJbG9uZyBwb3J0bnIgPSBzdHJ0b2woY29sb24gKyAxLCAmZW5kLCAxMCk7CisJCWlmIChlbmQgIT0gY29sb24gKyAxICYmICplbmQgPT0gJ1wwJyAmJiAwIDw9IHBvcnRuciAmJiBwb3J0bnIgPCA2NTUzNikgeworCQkJKmNvbG9uID0gMDsKKwkJCSpwb3J0ID0gY29sb24gKyAxOworCQl9IGVsc2UgaWYgKCFjb2xvblsxXSkgeworCQkJKmNvbG9uID0gMDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZW5hYmxlX2tlZXBhbGl2ZShpbnQgc29ja2ZkKQoreworCWludCBrYSA9IDE7CisKKwlpZiAoc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwgJmthLCBzaXplb2Yoa2EpKSA8IDApCisJCWZwcmludGYoc3RkZXJyLCAidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0OiAlc1xuIiwKKwkJCXN0cmVycm9yKGVycm5vKSk7Cit9CisKKyNpZm5kZWYgTk9fSVBWNgorCitzdGF0aWMgY29uc3QgY2hhciAqYWlfbmFtZShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmFpKQoreworCXN0YXRpYyBjaGFyIGFkZHJbTklfTUFYSE9TVF07CisJaWYgKGdldG5hbWVpbmZvKGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiwgYWRkciwgc2l6ZW9mKGFkZHIpLCBOVUxMLCAwLAorCQkJTklfTlVNRVJJQ0hPU1QpICE9IDApCisJCXhzbnByaW50ZihhZGRyLCBzaXplb2YoYWRkciksICIodW5rbm93bikiKTsKKworCXJldHVybiBhZGRyOworfQorCisvKgorICogUmV0dXJucyBhIGNvbm5lY3RlZCBzb2NrZXQoKSBmZCwgb3IgZWxzZSBkaWUoKXMuCisgKi8KK3N0YXRpYyBpbnQgZ2l0X3RjcF9jb25uZWN0X3NvY2soY2hhciAqaG9zdCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgZXJyb3JfbWVzc2FnZSA9IFNUUkJVRl9JTklUOworCWludCBzb2NrZmQgPSAtMTsKKwljb25zdCBjaGFyICpwb3J0ID0gU1RSKERFRkFVTFRfR0lUX1BPUlQpOworCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpMCwgKmFpOworCWludCBnYWk7CisJaW50IGNudCA9IDA7CisKKwlnZXRfaG9zdF9hbmRfcG9ydCgmaG9zdCwgJnBvcnQpOworCWlmICghKnBvcnQpCisJCXBvcnQgPSAiPG5vbmU+IjsKKworCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKworCWlmIChmbGFncyAmIENPTk5FQ1RfVkVSQk9TRSkKKwkJZnByaW50ZihzdGRlcnIsICJMb29raW5nIHVwICVzIC4uLiAiLCBob3N0KTsKKworCWdhaSA9IGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsICZoaW50cywgJmFpKTsKKwlpZiAoZ2FpKQorCQlkaWUoIlVuYWJsZSB0byBsb29rIHVwICVzIChwb3J0ICVzKSAoJXMpIiwgaG9zdCwgcG9ydCwgZ2FpX3N0cmVycm9yKGdhaSkpOworCisJaWYgKGZsYWdzICYgQ09OTkVDVF9WRVJCT1NFKQorCQlmcHJpbnRmKHN0ZGVyciwgImRvbmUuXG5Db25uZWN0aW5nIHRvICVzIChwb3J0ICVzKSAuLi4gIiwgaG9zdCwgcG9ydCk7CisKKwlmb3IgKGFpMCA9IGFpOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCwgY250KyspIHsKKwkJc29ja2ZkID0gc29ja2V0KGFpLT5haV9mYW1pbHksCisJCQkJYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOworCQlpZiAoKHNvY2tmZCA8IDApIHx8CisJCSAgICAoY29ubmVjdChzb2NrZmQsIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwKSkgeworCQkJc3RyYnVmX2FkZGYoJmVycm9yX21lc3NhZ2UsICIlc1slZDogJXNdOiBlcnJubz0lc1xuIiwKKwkJCQkgICAgaG9zdCwgY250LCBhaV9uYW1lKGFpKSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWlmICgwIDw9IHNvY2tmZCkKKwkJCQljbG9zZShzb2NrZmQpOworCQkJc29ja2ZkID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzICIsIGFpX25hbWUoYWkpKTsKKwkJYnJlYWs7CisJfQorCisJZnJlZWFkZHJpbmZvKGFpMCk7CisKKwlpZiAoc29ja2ZkIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gY29ubmVjdCB0byAlczpcbiVzIiwgaG9zdCwgZXJyb3JfbWVzc2FnZS5idWYpOworCisJZW5hYmxlX2tlZXBhbGl2ZShzb2NrZmQpOworCisJaWYgKGZsYWdzICYgQ09OTkVDVF9WRVJCT1NFKQorCQlmcHJpbnRmKHN0ZGVyciwgImRvbmUuXG4iKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZlcnJvcl9tZXNzYWdlKTsKKworCXJldHVybiBzb2NrZmQ7Cit9CisKKyNlbHNlIC8qIE5PX0lQVjYgKi8KKworLyoKKyAqIFJldHVybnMgYSBjb25uZWN0ZWQgc29ja2V0KCkgZmQsIG9yIGVsc2UgZGllKClzLgorICovCitzdGF0aWMgaW50IGdpdF90Y3BfY29ubmVjdF9zb2NrKGNoYXIgKmhvc3QsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVycm9yX21lc3NhZ2UgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc29ja2ZkID0gLTE7CisJY29uc3QgY2hhciAqcG9ydCA9IFNUUihERUZBVUxUX0dJVF9QT1JUKTsKKwljaGFyICplcDsKKwlzdHJ1Y3QgaG9zdGVudCAqaGU7CisJc3RydWN0IHNvY2thZGRyX2luIHNhOworCWNoYXIgKiphcDsKKwl1bnNpZ25lZCBpbnQgbnBvcnQ7CisJaW50IGNudDsKKworCWdldF9ob3N0X2FuZF9wb3J0KCZob3N0LCAmcG9ydCk7CisKKwlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCWZwcmludGYoc3RkZXJyLCAiTG9va2luZyB1cCAlcyAuLi4gIiwgaG9zdCk7CisKKwloZSA9IGdldGhvc3RieW5hbWUoaG9zdCk7CisJaWYgKCFoZSkKKwkJZGllKCJVbmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiwgaG9zdCwgaHN0cmVycm9yKGhfZXJybm8pKTsKKwlucG9ydCA9IHN0cnRvdWwocG9ydCwgJmVwLCAxMCk7CisJaWYgKCBlcCA9PSBwb3J0IHx8ICplcCApIHsKKwkJLyogTm90IG51bWVyaWMgKi8KKwkJc3RydWN0IHNlcnZlbnQgKnNlID0gZ2V0c2VydmJ5bmFtZShwb3J0LCJ0Y3AiKTsKKwkJaWYgKCAhc2UgKQorCQkJZGllKCJVbmtub3duIHBvcnQgJXMiLCBwb3J0KTsKKwkJbnBvcnQgPSBzZS0+c19wb3J0OworCX0KKworCWlmIChmbGFncyAmIENPTk5FQ1RfVkVSQk9TRSkKKwkJZnByaW50ZihzdGRlcnIsICJkb25lLlxuQ29ubmVjdGluZyB0byAlcyAocG9ydCAlcykgLi4uICIsIGhvc3QsIHBvcnQpOworCisJZm9yIChjbnQgPSAwLCBhcCA9IGhlLT5oX2FkZHJfbGlzdDsgKmFwOyBhcCsrLCBjbnQrKykgeworCQltZW1zZXQoJnNhLCAwLCBzaXplb2Ygc2EpOworCQlzYS5zaW5fZmFtaWx5ID0gaGUtPmhfYWRkcnR5cGU7CisJCXNhLnNpbl9wb3J0ID0gaHRvbnMobnBvcnQpOworCQltZW1jcHkoJnNhLnNpbl9hZGRyLCAqYXAsIGhlLT5oX2xlbmd0aCk7CisKKwkJc29ja2ZkID0gc29ja2V0KGhlLT5oX2FkZHJ0eXBlLCBTT0NLX1NUUkVBTSwgMCk7CisJCWlmICgoc29ja2ZkIDwgMCkgfHwKKwkJICAgIGNvbm5lY3Qoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyICopJnNhLCBzaXplb2Ygc2EpIDwgMCkgeworCQkJc3RyYnVmX2FkZGYoJmVycm9yX21lc3NhZ2UsICIlc1slZDogJXNdOiBlcnJubz0lc1xuIiwKKwkJCQlob3N0LAorCQkJCWNudCwKKwkJCQlpbmV0X250b2EoKihzdHJ1Y3QgaW5fYWRkciAqKSZzYS5zaW5fYWRkciksCisJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCWlmICgwIDw9IHNvY2tmZCkKKwkJCQljbG9zZShzb2NrZmQpOworCQkJc29ja2ZkID0gLTE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBDT05ORUNUX1ZFUkJPU0UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzICIsCisJCQkJaW5ldF9udG9hKCooc3RydWN0IGluX2FkZHIgKikmc2Euc2luX2FkZHIpKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHNvY2tmZCA8IDApCisJCWRpZSgidW5hYmxlIHRvIGNvbm5lY3QgdG8gJXM6XG4lcyIsIGhvc3QsIGVycm9yX21lc3NhZ2UuYnVmKTsKKworCWVuYWJsZV9rZWVwYWxpdmUoc29ja2ZkKTsKKworCWlmIChmbGFncyAmIENPTk5FQ1RfVkVSQk9TRSkKKwkJZnByaW50ZihzdGRlcnIsICJkb25lLlxuIik7CisKKwlyZXR1cm4gc29ja2ZkOworfQorCisjZW5kaWYgLyogTk9fSVBWNiAqLworCisKK3N0YXRpYyB2b2lkIGdpdF90Y3BfY29ubmVjdChpbnQgZmRbMl0sIGNoYXIgKmhvc3QsIGludCBmbGFncykKK3sKKwlpbnQgc29ja2ZkID0gZ2l0X3RjcF9jb25uZWN0X3NvY2soaG9zdCwgZmxhZ3MpOworCisJZmRbMF0gPSBzb2NrZmQ7CisJZmRbMV0gPSBkdXAoc29ja2ZkKTsKK30KKworCitzdGF0aWMgY2hhciAqZ2l0X3Byb3h5X2NvbW1hbmQ7CisKK3N0YXRpYyBpbnQgZ2l0X3Byb3h5X2NvbW1hbmRfb3B0aW9ucyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQl2b2lkICpjYikKK3sKKwlpZiAoIXN0cmNtcCh2YXIsICJjb3JlLmdpdHByb3h5IikpIHsKKwkJY29uc3QgY2hhciAqZm9yX3BvczsKKwkJaW50IG1hdGNobGVuID0gLTE7CisJCWludCBob3N0bGVuOworCQljb25zdCBjaGFyICpyaG9zdF9uYW1lID0gY2I7CisJCWludCByaG9zdF9sZW4gPSBzdHJsZW4ocmhvc3RfbmFtZSk7CisKKwkJaWYgKGdpdF9wcm94eV9jb21tYW5kKQorCQkJcmV0dXJuIDA7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJLyogW2NvcmVdCisJCSAqIDsjIG1hdGNoZXMgd3d3Lmtlcm5lbC5vcmcgYXMgd2VsbAorCQkgKiBnaXRwcm94eSA9IG5ldGNhdHRlci0xIGZvciBrZXJuZWwub3JnCisJCSAqIGdpdHByb3h5ID0gbmV0Y2F0dGVyLTIgZm9yIHNhbXBsZS54egorCQkgKiBnaXRwcm94eSA9IG5ldGNhdHRlci1kZWZhdWx0CisJCSAqLworCQlmb3JfcG9zID0gc3Ryc3RyKHZhbHVlLCAiIGZvciAiKTsKKwkJaWYgKCFmb3JfcG9zKQorCQkJLyogbWF0Y2hlcyBldmVyeWJvZHkgKi8KKwkJCW1hdGNobGVuID0gc3RybGVuKHZhbHVlKTsKKwkJZWxzZSB7CisJCQlob3N0bGVuID0gc3RybGVuKGZvcl9wb3MgKyA1KTsKKwkJCWlmIChyaG9zdF9sZW4gPCBob3N0bGVuKQorCQkJCW1hdGNobGVuID0gLTE7CisJCQllbHNlIGlmICghc3RybmNtcChmb3JfcG9zICsgNSwKKwkJCQkJICByaG9zdF9uYW1lICsgcmhvc3RfbGVuIC0gaG9zdGxlbiwKKwkJCQkJICBob3N0bGVuKSAmJgorCQkJCSAoKHJob3N0X2xlbiA9PSBob3N0bGVuKSB8fAorCQkJCSAgcmhvc3RfbmFtZVtyaG9zdF9sZW4gLSBob3N0bGVuIC0xXSA9PSAnLicpKQorCQkJCW1hdGNobGVuID0gZm9yX3BvcyAtIHZhbHVlOworCQkJZWxzZQorCQkJCW1hdGNobGVuID0gLTE7CisJCX0KKwkJaWYgKDAgPD0gbWF0Y2hsZW4pIHsKKwkJCS8qIGNvcmUuZ2l0cHJveHkgPSBub25lIGZvciBrZXJuZWwub3JnICovCisJCQlpZiAobWF0Y2hsZW4gPT0gNCAmJgorCQkJICAgICFtZW1jbXAodmFsdWUsICJub25lIiwgNCkpCisJCQkJbWF0Y2hsZW4gPSAwOworCQkJZ2l0X3Byb3h5X2NvbW1hbmQgPSB4bWVtZHVweih2YWx1ZSwgbWF0Y2hsZW4pOworCQl9CisJCXJldHVybiAwOworCX0KKworCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgY2IpOworfQorCitzdGF0aWMgaW50IGdpdF91c2VfcHJveHkoY29uc3QgY2hhciAqaG9zdCkKK3sKKwlnaXRfcHJveHlfY29tbWFuZCA9IGdldGVudigiR0lUX1BST1hZX0NPTU1BTkQiKTsKKwlnaXRfY29uZmlnKGdpdF9wcm94eV9jb21tYW5kX29wdGlvbnMsICh2b2lkKilob3N0KTsKKwlyZXR1cm4gKGdpdF9wcm94eV9jb21tYW5kICYmICpnaXRfcHJveHlfY29tbWFuZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2l0X3Byb3h5X2Nvbm5lY3QoaW50IGZkWzJdLCBjaGFyICpob3N0KQoreworCWNvbnN0IGNoYXIgKnBvcnQgPSBTVFIoREVGQVVMVF9HSVRfUE9SVCk7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKnByb3h5OworCisJZ2V0X2hvc3RfYW5kX3BvcnQoJmhvc3QsICZwb3J0KTsKKworCXByb3h5ID0geG1hbGxvYyhzaXplb2YoKnByb3h5KSk7CisJY2hpbGRfcHJvY2Vzc19pbml0KHByb3h5KTsKKwlhcmd2X2FycmF5X3B1c2goJnByb3h5LT5hcmdzLCBnaXRfcHJveHlfY29tbWFuZCk7CisJYXJndl9hcnJheV9wdXNoKCZwcm94eS0+YXJncywgaG9zdCk7CisJYXJndl9hcnJheV9wdXNoKCZwcm94eS0+YXJncywgcG9ydCk7CisJcHJveHktPmluID0gLTE7CisJcHJveHktPm91dCA9IC0xOworCWlmIChzdGFydF9jb21tYW5kKHByb3h5KSkKKwkJZGllKCJjYW5ub3Qgc3RhcnQgcHJveHkgJXMiLCBnaXRfcHJveHlfY29tbWFuZCk7CisJZmRbMF0gPSBwcm94eS0+b3V0OyAvKiByZWFkIGZyb20gcHJveHkgc3Rkb3V0ICovCisJZmRbMV0gPSBwcm94eS0+aW47ICAvKiB3cml0ZSB0byBwcm94eSBzdGRpbiAqLworCXJldHVybiBwcm94eTsKK30KKworc3RhdGljIGNoYXIgKmdldF9wb3J0KGNoYXIgKmhvc3QpCit7CisJY2hhciAqZW5kOworCWNoYXIgKnAgPSBzdHJjaHIoaG9zdCwgJzonKTsKKworCWlmIChwKSB7CisJCWxvbmcgcG9ydCA9IHN0cnRvbChwICsgMSwgJmVuZCwgMTApOworCQlpZiAoZW5kICE9IHAgKyAxICYmICplbmQgPT0gJ1wwJyAmJiAwIDw9IHBvcnQgJiYgcG9ydCA8IDY1NTM2KSB7CisJCQkqcCA9ICdcMCc7CisJCQlyZXR1cm4gcCsxOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBFeHRyYWN0IHByb3RvY29sIGFuZCByZWxldmFudCBwYXJ0cyBmcm9tIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbiBVUkwuCisgKiBUaGUgY2FsbGVyIG11c3QgZnJlZSgpIHRoZSByZXR1cm5lZCBzdHJpbmdzLgorICovCitzdGF0aWMgZW51bSBwcm90b2NvbCBwYXJzZV9jb25uZWN0X3VybChjb25zdCBjaGFyICp1cmxfb3JpZywgY2hhciAqKnJldF9ob3N0LAorCQkJCSAgICAgICBjaGFyICoqcmV0X3BhdGgpCit7CisJY2hhciAqdXJsOworCWNoYXIgKmhvc3QsICpwYXRoOworCWNoYXIgKmVuZDsKKwlpbnQgc2VwYXJhdG9yID0gJy8nOworCWVudW0gcHJvdG9jb2wgcHJvdG9jb2wgPSBQUk9UT19MT0NBTDsKKworCWlmIChpc191cmwodXJsX29yaWcpKQorCQl1cmwgPSB1cmxfZGVjb2RlKHVybF9vcmlnKTsKKwllbHNlCisJCXVybCA9IHhzdHJkdXAodXJsX29yaWcpOworCisJaG9zdCA9IHN0cnN0cih1cmwsICI6Ly8iKTsKKwlpZiAoaG9zdCkgeworCQkqaG9zdCA9ICdcMCc7CisJCXByb3RvY29sID0gZ2V0X3Byb3RvY29sKHVybCk7CisJCWhvc3QgKz0gMzsKKwl9IGVsc2UgeworCQlob3N0ID0gdXJsOworCQlpZiAoIXVybF9pc19sb2NhbF9ub3Rfc3NoKHVybCkpIHsKKwkJCXByb3RvY29sID0gUFJPVE9fU1NIOworCQkJc2VwYXJhdG9yID0gJzonOworCQl9CisJfQorCisJLyoKKwkgKiBEb24ndCBkbyBkZXN0cnVjdGl2ZSB0cmFuc2Zvcm1zIGFzIHByb3RvY29sIGNvZGUgZG9lcworCSAqICdbXScgdW53cmFwcGluZyBpbiBnZXRfaG9zdF9hbmRfcG9ydCgpCisJICovCisJZW5kID0gaG9zdF9lbmQoJmhvc3QsIDApOworCisJaWYgKHByb3RvY29sID09IFBST1RPX0xPQ0FMKQorCQlwYXRoID0gZW5kOworCWVsc2UgaWYgKHByb3RvY29sID09IFBST1RPX0ZJTEUgJiYgaGFzX2Rvc19kcml2ZV9wcmVmaXgoZW5kKSkKKwkJcGF0aCA9IGVuZDsgLyogImZpbGU6Ly8kKHB3ZCkiIG1heSBiZSAiZmlsZTovL0M6L3Byb2plY3RzL3JlcG8iICovCisJZWxzZQorCQlwYXRoID0gc3RyY2hyKGVuZCwgc2VwYXJhdG9yKTsKKworCWlmICghcGF0aCB8fCAhKnBhdGgpCisJCWRpZSgiTm8gcGF0aCBzcGVjaWZpZWQuIFNlZSAnbWFuIGdpdC1wdWxsJyBmb3IgdmFsaWQgdXJsIHN5bnRheCIpOworCisJLyoKKwkgKiBudWxsLXRlcm1pbmF0ZSBob3N0bmFtZSBhbmQgcG9pbnQgcGF0aCB0byB+IGZvciBVUkwncyBsaWtlIHRoaXM6CisJICogICAgc3NoOi8vaG9zdC54ei9+dXNlci9yZXBvCisJICovCisKKwllbmQgPSBwYXRoOyAvKiBOZWVkIHRvIFwwIHRlcm1pbmF0ZSBob3N0IGhlcmUgKi8KKwlpZiAoc2VwYXJhdG9yID09ICc6JykKKwkJcGF0aCsrOyAvKiBwYXRoIHN0YXJ0cyBhZnRlciAnOicgKi8KKwlpZiAocHJvdG9jb2wgPT0gUFJPVE9fR0lUIHx8IHByb3RvY29sID09IFBST1RPX1NTSCkgeworCQlpZiAocGF0aFsxXSA9PSAnficpCisJCQlwYXRoKys7CisJfQorCisJcGF0aCA9IHhzdHJkdXAocGF0aCk7CisJKmVuZCA9ICdcMCc7CisKKwkqcmV0X2hvc3QgPSB4c3RyZHVwKGhvc3QpOworCSpyZXRfcGF0aCA9IHBhdGg7CisJZnJlZSh1cmwpOworCXJldHVybiBwcm90b2NvbDsKK30KKworc3RhdGljIHN0cnVjdCBjaGlsZF9wcm9jZXNzIG5vX2ZvcmsgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKy8qCisgKiBUaGlzIHJldHVybnMgYSBkdW1teSBjaGlsZF9wcm9jZXNzIGlmIHRoZSB0cmFuc3BvcnQgcHJvdG9jb2wgZG9lcyBub3QKKyAqIG5lZWQgZm9yaygyKSwgb3IgYSBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBvYmplY3QgaWYgaXQgZG9lcy4gIE9uY2UgZG9uZSwKKyAqIGZpbmlzaCB0aGUgY29ubmVjdGlvbiB3aXRoIGZpbmlzaF9jb25uZWN0KCkgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbQorICogdGhpcyBmdW5jdGlvbiAoaXQgaXMgc2FmZSB0byBjYWxsIGZpbmlzaF9jb25uZWN0KCkgd2l0aCBOVUxMIHRvIHN1cHBvcnQKKyAqIHRoZSBmb3JtZXIgY2FzZSkuCisgKgorICogSWYgaXQgcmV0dXJucywgdGhlIGNvbm5lY3QgaXMgc3VjY2Vzc2Z1bDsgaXQganVzdCBkaWVzIG9uIGVycm9ycyAodGhpcworICogd2lsbCBob3BlZnVsbHkgYmUgY2hhbmdlZCBpbiBhIGxpYmlmaWNhdGlvbiBlZmZvcnQsIHRvIHJldHVybiBOVUxMIHdoZW4KKyAqIHRoZSBjb25uZWN0aW9uIGZhaWxlZCkuCisgKi8KK3N0cnVjdCBjaGlsZF9wcm9jZXNzICpnaXRfY29ubmVjdChpbnQgZmRbMl0sIGNvbnN0IGNoYXIgKnVybCwKKwkJCQkgIGNvbnN0IGNoYXIgKnByb2csIGludCBmbGFncykKK3sKKwljaGFyICpob3N0YW5kcG9ydCwgKnBhdGg7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4gPSAmbm9fZm9yazsKKwllbnVtIHByb3RvY29sIHByb3RvY29sOworCXN0cnVjdCBzdHJidWYgY21kID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBXaXRob3V0IHRoaXMgd2UgY2Fubm90IHJlbHkgb24gd2FpdHBpZCgpIHRvIHRlbGwKKwkgKiB3aGF0IGhhcHBlbmVkIHRvIG91ciBjaGlsZHJlbi4KKwkgKi8KKwlzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCk7CisKKwlwcm90b2NvbCA9IHBhcnNlX2Nvbm5lY3RfdXJsKHVybCwgJmhvc3RhbmRwb3J0LCAmcGF0aCk7CisJaWYgKChmbGFncyAmIENPTk5FQ1RfRElBR19VUkwpICYmIChwcm90b2NvbCAhPSBQUk9UT19TU0gpKSB7CisJCXByaW50ZigiRGlhZzogdXJsPSVzXG4iLCB1cmwgPyB1cmwgOiAiTlVMTCIpOworCQlwcmludGYoIkRpYWc6IHByb3RvY29sPSVzXG4iLCBwcm90X25hbWUocHJvdG9jb2wpKTsKKwkJcHJpbnRmKCJEaWFnOiBob3N0YW5kcG9ydD0lc1xuIiwgaG9zdGFuZHBvcnQgPyBob3N0YW5kcG9ydCA6ICJOVUxMIik7CisJCXByaW50ZigiRGlhZzogcGF0aD0lc1xuIiwgcGF0aCA/IHBhdGggOiAiTlVMTCIpOworCQljb25uID0gTlVMTDsKKwl9IGVsc2UgaWYgKHByb3RvY29sID09IFBST1RPX0dJVCkgeworCQkvKgorCQkgKiBTZXQgdXAgdmlydHVhbCBob3N0IGluZm9ybWF0aW9uIGJhc2VkIG9uIHdoZXJlIHdlIHdpbGwKKwkJICogY29ubmVjdCwgdW5sZXNzIHRoZSB1c2VyIGhhcyBvdmVycmlkZGVuIHVzIGluCisJCSAqIHRoZSBlbnZpcm9ubWVudC4KKwkJICovCisJCWNoYXIgKnRhcmdldF9ob3N0ID0gZ2V0ZW52KCJHSVRfT1ZFUlJJREVfVklSVFVBTF9IT1NUIik7CisJCWlmICh0YXJnZXRfaG9zdCkKKwkJCXRhcmdldF9ob3N0ID0geHN0cmR1cCh0YXJnZXRfaG9zdCk7CisJCWVsc2UKKwkJCXRhcmdldF9ob3N0ID0geHN0cmR1cChob3N0YW5kcG9ydCk7CisKKwkJdHJhbnNwb3J0X2NoZWNrX2FsbG93ZWQoImdpdCIpOworCisJCS8qIFRoZXNlIHVuZGVybHlpbmcgY29ubmVjdGlvbiBjb21tYW5kcyBkaWUoKSBpZiB0aGV5CisJCSAqIGNhbm5vdCBjb25uZWN0LgorCQkgKi8KKwkJaWYgKGdpdF91c2VfcHJveHkoaG9zdGFuZHBvcnQpKQorCQkJY29ubiA9IGdpdF9wcm94eV9jb25uZWN0KGZkLCBob3N0YW5kcG9ydCk7CisJCWVsc2UKKwkJCWdpdF90Y3BfY29ubmVjdChmZCwgaG9zdGFuZHBvcnQsIGZsYWdzKTsKKwkJLyoKKwkJICogU2VwYXJhdGUgb3JpZ2luYWwgcHJvdG9jb2wgY29tcG9uZW50cyBwcm9nIGFuZCBwYXRoCisJCSAqIGZyb20gZXh0ZW5kZWQgaG9zdCBoZWFkZXIgd2l0aCBhIE5VTCBieXRlLgorCQkgKgorCQkgKiBOb3RlOiBEbyBub3QgYWRkIGFueSBvdGhlciBoZWFkZXJzIGhlcmUhICBEb2luZyBzbworCQkgKiB3aWxsIGNhdXNlIG9sZGVyIGdpdC1kYWVtb24gc2VydmVycyB0byBjcmFzaC4KKwkJICovCisJCXBhY2tldF93cml0ZShmZFsxXSwKKwkJCSAgICAgIiVzICVzJWNob3N0PSVzJWMiLAorCQkJICAgICBwcm9nLCBwYXRoLCAwLAorCQkJICAgICB0YXJnZXRfaG9zdCwgMCk7CisJCWZyZWUodGFyZ2V0X2hvc3QpOworCX0gZWxzZSB7CisJCWNvbm4gPSB4bWFsbG9jKHNpemVvZigqY29ubikpOworCQljaGlsZF9wcm9jZXNzX2luaXQoY29ubik7CisKKwkJc3RyYnVmX2FkZHN0cigmY21kLCBwcm9nKTsKKwkJc3RyYnVmX2FkZGNoKCZjbWQsICcgJyk7CisJCXNxX3F1b3RlX2J1ZigmY21kLCBwYXRoKTsKKworCQkvKiByZW1vdmUgcmVwby1sb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQgKi8KKwkJY29ubi0+ZW52ID0gbG9jYWxfcmVwb19lbnY7CisJCWNvbm4tPnVzZV9zaGVsbCA9IDE7CisJCWNvbm4tPmluID0gY29ubi0+b3V0ID0gLTE7CisJCWlmIChwcm90b2NvbCA9PSBQUk9UT19TU0gpIHsKKwkJCWNvbnN0IGNoYXIgKnNzaDsKKwkJCWludCBwdXR0eSA9IDAsIHRvcnRvaXNlcGxpbmsgPSAwOworCQkJY2hhciAqc3NoX2hvc3QgPSBob3N0YW5kcG9ydDsKKwkJCWNvbnN0IGNoYXIgKnBvcnQgPSBOVUxMOworCQkJdHJhbnNwb3J0X2NoZWNrX2FsbG93ZWQoInNzaCIpOworCQkJZ2V0X2hvc3RfYW5kX3BvcnQoJnNzaF9ob3N0LCAmcG9ydCk7CisKKwkJCWlmICghcG9ydCkKKwkJCQlwb3J0ID0gZ2V0X3BvcnQoc3NoX2hvc3QpOworCisJCQlpZiAoZmxhZ3MgJiBDT05ORUNUX0RJQUdfVVJMKSB7CisJCQkJcHJpbnRmKCJEaWFnOiB1cmw9JXNcbiIsIHVybCA/IHVybCA6ICJOVUxMIik7CisJCQkJcHJpbnRmKCJEaWFnOiBwcm90b2NvbD0lc1xuIiwgcHJvdF9uYW1lKHByb3RvY29sKSk7CisJCQkJcHJpbnRmKCJEaWFnOiB1c2VyYW5kaG9zdD0lc1xuIiwgc3NoX2hvc3QgPyBzc2hfaG9zdCA6ICJOVUxMIik7CisJCQkJcHJpbnRmKCJEaWFnOiBwb3J0PSVzXG4iLCBwb3J0ID8gcG9ydCA6ICJOT05FIik7CisJCQkJcHJpbnRmKCJEaWFnOiBwYXRoPSVzXG4iLCBwYXRoID8gcGF0aCA6ICJOVUxMIik7CisKKwkJCQlmcmVlKGhvc3RhbmRwb3J0KTsKKwkJCQlmcmVlKHBhdGgpOworCQkJCWZyZWUoY29ubik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisKKwkJCXNzaCA9IGdldGVudigiR0lUX1NTSF9DT01NQU5EIik7CisJCQlpZiAoIXNzaCkgeworCQkJCWNvbnN0IGNoYXIgKmJhc2U7CisJCQkJY2hhciAqc3NoX2R1cDsKKworCQkJCS8qCisJCQkJICogR0lUX1NTSCBpcyB0aGUgbm8tc2hlbGwgdmVyc2lvbiBvZgorCQkJCSAqIEdJVF9TU0hfQ09NTUFORCAoYW5kIG11c3QgcmVtYWluIHNvIGZvcgorCQkJCSAqIGhpc3RvcmljYWwgY29tcGF0aWJpbGl0eSkuCisJCQkJICovCisJCQkJY29ubi0+dXNlX3NoZWxsID0gMDsKKworCQkJCXNzaCA9IGdldGVudigiR0lUX1NTSCIpOworCQkJCWlmICghc3NoKQorCQkJCQlzc2ggPSAic3NoIjsKKworCQkJCXNzaF9kdXAgPSB4c3RyZHVwKHNzaCk7CisJCQkJYmFzZSA9IGJhc2VuYW1lKHNzaF9kdXApOworCisJCQkJdG9ydG9pc2VwbGluayA9ICFzdHJjYXNlY21wKGJhc2UsICJ0b3J0b2lzZXBsaW5rIikgfHwKKwkJCQkJIXN0cmNhc2VjbXAoYmFzZSwgInRvcnRvaXNlcGxpbmsuZXhlIik7CisJCQkJcHV0dHkgPSB0b3J0b2lzZXBsaW5rIHx8CisJCQkJCSFzdHJjYXNlY21wKGJhc2UsICJwbGluayIpIHx8CisJCQkJCSFzdHJjYXNlY21wKGJhc2UsICJwbGluay5leGUiKTsKKworCQkJCWZyZWUoc3NoX2R1cCk7CisJCQl9CisKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY29ubi0+YXJncywgc3NoKTsKKwkJCWlmICh0b3J0b2lzZXBsaW5rKQorCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmY29ubi0+YXJncywgIi1iYXRjaCIpOworCQkJaWYgKHBvcnQpIHsKKwkJCQkvKiBQIGlzIGZvciBQdVRUWSwgcCBpcyBmb3IgT3BlblNTSCAqLworCQkJCWFyZ3ZfYXJyYXlfcHVzaCgmY29ubi0+YXJncywgcHV0dHkgPyAiLVAiIDogIi1wIik7CisJCQkJYXJndl9hcnJheV9wdXNoKCZjb25uLT5hcmdzLCBwb3J0KTsKKwkJCX0KKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmY29ubi0+YXJncywgc3NoX2hvc3QpOworCQl9IGVsc2UgeworCQkJdHJhbnNwb3J0X2NoZWNrX2FsbG93ZWQoImZpbGUiKTsKKwkJfQorCQlhcmd2X2FycmF5X3B1c2goJmNvbm4tPmFyZ3MsIGNtZC5idWYpOworCisJCWlmIChzdGFydF9jb21tYW5kKGNvbm4pKQorCQkJZGllKCJ1bmFibGUgdG8gZm9yayIpOworCisJCWZkWzBdID0gY29ubi0+b3V0OyAvKiByZWFkIGZyb20gY2hpbGQncyBzdGRvdXQgKi8KKwkJZmRbMV0gPSBjb25uLT5pbjsgIC8qIHdyaXRlIHRvIGNoaWxkJ3Mgc3RkaW4gKi8KKwkJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJfQorCWZyZWUoaG9zdGFuZHBvcnQpOworCWZyZWUocGF0aCk7CisJcmV0dXJuIGNvbm47Cit9CisKK2ludCBnaXRfY29ubmVjdGlvbl9pc19zb2NrZXQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4pCit7CisJcmV0dXJuIGNvbm4gPT0gJm5vX2Zvcms7Cit9CisKK2ludCBmaW5pc2hfY29ubmVjdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubikKK3sKKwlpbnQgY29kZTsKKwlpZiAoIWNvbm4gfHwgZ2l0X2Nvbm5lY3Rpb25faXNfc29ja2V0KGNvbm4pKQorCQlyZXR1cm4gMDsKKworCWNvZGUgPSBmaW5pc2hfY29tbWFuZChjb25uKTsKKwlmcmVlKGNvbm4pOworCXJldHVybiBjb2RlOworfQpkaWZmIC0tZ2l0IGEvY29ubmVjdC5oIGIvY29ubmVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MWE2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9jb25uZWN0LmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBDT05ORUNUX0gKKyNkZWZpbmUgQ09OTkVDVF9ICisKKyNkZWZpbmUgQ09OTkVDVF9WRVJCT1NFICAgICAgICgxdSA8PCAwKQorI2RlZmluZSBDT05ORUNUX0RJQUdfVVJMICAgICAgKDF1IDw8IDEpCitleHRlcm4gc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmdpdF9jb25uZWN0KGludCBmZFsyXSwgY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpwcm9nLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBmaW5pc2hfY29ubmVjdChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubik7CitleHRlcm4gaW50IGdpdF9jb25uZWN0aW9uX2lzX3NvY2tldChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubik7CitleHRlcm4gaW50IHNlcnZlcl9zdXBwb3J0cyhjb25zdCBjaGFyICpmZWF0dXJlKTsKK2V4dGVybiBpbnQgcGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGNvbnN0IGNoYXIgKmZlYXR1cmVzLCBjb25zdCBjaGFyICpmZWF0dXJlKTsKK2V4dGVybiBjb25zdCBjaGFyICpzZXJ2ZXJfZmVhdHVyZV92YWx1ZShjb25zdCBjaGFyICpmZWF0dXJlLCBpbnQgKmxlbl9yZXQpOworZXh0ZXJuIGludCB1cmxfaXNfbG9jYWxfbm90X3NzaChjb25zdCBjaGFyICp1cmwpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Nvbm5lY3RlZC5jIGIvY29ubmVjdGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5YzU2MAotLS0gL2Rldi9udWxsCisrKyBiL2Nvbm5lY3RlZC5jCkBAIC0wLDAgKzEsMTE5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAiY29ubmVjdGVkLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisKK2ludCBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZChzaGExX2l0ZXJhdGVfZm4gZm4sIGludCBxdWlldCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gY2hlY2tfZXZlcnl0aGluZ19jb25uZWN0ZWRfd2l0aF90cmFuc3BvcnQoZm4sIHF1aWV0LCBjYl9kYXRhLCBOVUxMKTsKK30KKy8qCisgKiBJZiB3ZSBmZWVkIGFsbCB0aGUgY29tbWl0cyB3ZSB3YW50IHRvIHZlcmlmeSB0byB0aGlzIGNvbW1hbmQKKyAqCisgKiAgJCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tc3RkaW4gLS1ub3QgLS1hbGwKKyAqCisgKiBhbmQgaWYgaXQgZG9lcyBub3QgZXJyb3Igb3V0LCB0aGF0IG1lYW5zIGV2ZXJ5dGhpbmcgcmVhY2hhYmxlIGZyb20KKyAqIHRoZXNlIGNvbW1pdHMgbG9jYWxseSBleGlzdHMgYW5kIGlzIGNvbm5lY3RlZCB0byBvdXIgZXhpc3RpbmcgcmVmcy4KKyAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgX25vdF8gdmFsaWRhdGUgdGhlIGluZGl2aWR1YWwgb2JqZWN0cy4KKyAqCisgKiBSZXR1cm5zIDAgaWYgZXZlcnl0aGluZyBpcyBjb25uZWN0ZWQsIG5vbi16ZXJvIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZF9yZWFsKHNoYTFfaXRlcmF0ZV9mbiBmbiwKKwkJCQkJICAgaW50IHF1aWV0LAorCQkJCQkgICB2b2lkICpjYl9kYXRhLAorCQkJCQkgICBzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnNoYWxsb3dfZmlsZSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyByZXZfbGlzdCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmd2WzldOworCWNoYXIgY29tbWl0WzQxXTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBlcnIgPSAwLCBhYyA9IDA7CisJc3RydWN0IHBhY2tlZF9naXQgKm5ld19wYWNrID0gTlVMTDsKKwlzaXplX3QgYmFzZV9sZW47CisKKwlpZiAoZm4oY2JfZGF0YSwgc2hhMSkpCisJCXJldHVybiBlcnI7CisKKwlpZiAodHJhbnNwb3J0ICYmIHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucyAmJgorCSAgICB0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMtPnNlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgJiYKKwkgICAgdHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlICYmCisJICAgIHN0cmlwX3N1ZmZpeCh0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUsICIua2VlcCIsICZiYXNlX2xlbikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBpZHhfZmlsZSA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkKCZpZHhfZmlsZSwgdHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlLCBiYXNlX2xlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJmlkeF9maWxlLCAiLmlkeCIpOworCQluZXdfcGFjayA9IGFkZF9wYWNrZWRfZ2l0KGlkeF9maWxlLmJ1ZiwgaWR4X2ZpbGUubGVuLCAxKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmlkeF9maWxlKTsKKwl9CisKKwlpZiAoc2hhbGxvd19maWxlKSB7CisJCWFyZ3ZbYWMrK10gPSAiLS1zaGFsbG93LWZpbGUiOworCQlhcmd2W2FjKytdID0gc2hhbGxvd19maWxlOworCX0KKwlhcmd2W2FjKytdID0gInJldi1saXN0IjsKKwlhcmd2W2FjKytdID0gIi0tb2JqZWN0cyI7CisJYXJndlthYysrXSA9ICItLXN0ZGluIjsKKwlhcmd2W2FjKytdID0gIi0tbm90IjsKKwlhcmd2W2FjKytdID0gIi0tYWxsIjsKKwlpZiAocXVpZXQpCisJCWFyZ3ZbYWMrK10gPSAiLS1xdWlldCI7CisJYXJndlthY10gPSBOVUxMOworCisJcmV2X2xpc3QuYXJndiA9IGFyZ3Y7CisJcmV2X2xpc3QuZ2l0X2NtZCA9IDE7CisJcmV2X2xpc3QuaW4gPSAtMTsKKwlyZXZfbGlzdC5ub19zdGRvdXQgPSAxOworCXJldl9saXN0Lm5vX3N0ZGVyciA9IHF1aWV0OworCWlmIChzdGFydF9jb21tYW5kKCZyZXZfbGlzdCkpCisJCXJldHVybiBlcnJvcihfKCJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIikpOworCisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKworCWNvbW1pdFs0MF0gPSAnXG4nOworCWRvIHsKKwkJLyoKKwkJICogSWYgaW5kZXgtcGFjayBhbHJlYWR5IGNoZWNrZWQgdGhhdDoKKwkJICogLSB0aGVyZSBhcmUgbm8gZGFuZ2xpbmcgcG9pbnRlcnMgaW4gdGhlIG5ldyBwYWNrCisJCSAqIC0gdGhlIHBhY2sgaXMgc2VsZiBjb250YWluZWQKKwkJICogVGhlbiBpZiB0aGUgdXBkYXRlZCByZWYgaXMgaW4gdGhlIG5ldyBwYWNrLCB0aGVuIHdlCisJCSAqIGFyZSBzdXJlIHRoZSByZWYgaXMgZ29vZCBhbmQgbm90IHNlbmRpbmcgaXQgdG8KKwkJICogcmV2LWxpc3QgZm9yIHZlcmlmaWNhdGlvbi4KKwkJICovCisJCWlmIChuZXdfcGFjayAmJiBmaW5kX3BhY2tfZW50cnlfb25lKHNoYTEsIG5ld19wYWNrKSkKKwkJCWNvbnRpbnVlOworCisJCW1lbWNweShjb21taXQsIHNoYTFfdG9faGV4KHNoYTEpLCA0MCk7CisJCWlmICh3cml0ZV9pbl9mdWxsKHJldl9saXN0LmluLCBjb21taXQsIDQxKSA8IDApIHsKKwkJCWlmIChlcnJubyAhPSBFUElQRSAmJiBlcnJubyAhPSBFSU5WQUwpCisJCQkJZXJyb3IoXygiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0OiAlcyIpLAorCQkJCSAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQllcnIgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoIWZuKGNiX2RhdGEsIHNoYTEpKTsKKworCWlmIChjbG9zZShyZXZfbGlzdC5pbikpIHsKKwkJZXJyb3IoXygiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW46ICVzIiksIHN0cmVycm9yKGVycm5vKSk7CisJCWVyciA9IC0xOworCX0KKworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKwlyZXR1cm4gZmluaXNoX2NvbW1hbmQoJnJldl9saXN0KSB8fCBlcnI7Cit9CisKK2ludCBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZF93aXRoX3RyYW5zcG9ydChzaGExX2l0ZXJhdGVfZm4gZm4sCisJCQkJCSAgICAgIGludCBxdWlldCwKKwkJCQkJICAgICAgdm9pZCAqY2JfZGF0YSwKKwkJCQkJICAgICAgc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCXJldHVybiBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZF9yZWFsKGZuLCBxdWlldCwgY2JfZGF0YSwKKwkJCQkJICAgICAgIHRyYW5zcG9ydCwgTlVMTCk7Cit9CisKK2ludCBjaGVja19zaGFsbG93X2Nvbm5lY3RlZChzaGExX2l0ZXJhdGVfZm4gZm4sIGludCBxdWlldCwgdm9pZCAqY2JfZGF0YSwKKwkJCSAgICBjb25zdCBjaGFyICpzaGFsbG93X2ZpbGUpCit7CisJcmV0dXJuIGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkX3JlYWwoZm4sIHF1aWV0LCBjYl9kYXRhLAorCQkJCQkgICAgICAgTlVMTCwgc2hhbGxvd19maWxlKTsKK30KZGlmZiAtLWdpdCBhL2Nvbm5lY3RlZC5oIGIvY29ubmVjdGVkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxZDQwOAotLS0gL2Rldi9udWxsCisrKyBiL2Nvbm5lY3RlZC5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgQ09OTkVDVEVEX0gKKyNkZWZpbmUgQ09OTkVDVEVEX0gKKworc3RydWN0IHRyYW5zcG9ydDsKKworLyoKKyAqIFRha2UgY2FsbGJhY2sgZGF0YSwgYW5kIHJldHVybiBuZXh0IG9iamVjdCBuYW1lIGluIHRoZSBidWZmZXIuCisgKiBXaGVuIGNhbGxlZCBhZnRlciByZXR1cm5pbmcgdGhlIG5hbWUgZm9yIHRoZSBsYXN0IG9iamVjdCwgcmV0dXJuIC0xCisgKiB0byBzaWduYWwgRU9GLCBvdGhlcndpc2UgcmV0dXJuIDAuCisgKi8KK3R5cGVkZWYgaW50ICgqc2hhMV9pdGVyYXRlX2ZuKSh2b2lkICosIHVuc2lnbmVkIGNoYXIgWzIwXSk7CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCBvdXIgb2JqZWN0IHN0b3JlIGhhcyBhbGwgdGhlIGNvbW1pdHMgbmVjZXNzYXJ5IHRvCisgKiBjb25uZWN0IHRoZSBhbmNlc3RyeSBjaGFpbiB0byBzb21lIG9mIG91ciBleGlzdGluZyByZWZzLCBhbmQgYWxsCisgKiB0aGUgdHJlZXMgYW5kIGJsb2JzIHRoYXQgdGhlc2UgY29tbWl0cyB1c2UuCisgKgorICogUmV0dXJuIDAgaWYgT2ssIG5vbiB6ZXJvIG90aGVyd2lzZSAoaS5lLiBzb21lIG1pc3Npbmcgb2JqZWN0cykKKyAqLworZXh0ZXJuIGludCBjaGVja19ldmVyeXRoaW5nX2Nvbm5lY3RlZChzaGExX2l0ZXJhdGVfZm4sIGludCBxdWlldCwgdm9pZCAqY2JfZGF0YSk7CitleHRlcm4gaW50IGNoZWNrX3NoYWxsb3dfY29ubmVjdGVkKHNoYTFfaXRlcmF0ZV9mbiwgaW50IHF1aWV0LCB2b2lkICpjYl9kYXRhLAorCQkJCSAgIGNvbnN0IGNoYXIgKnNoYWxsb3dfZmlsZSk7CitleHRlcm4gaW50IGNoZWNrX2V2ZXJ5dGhpbmdfY29ubmVjdGVkX3dpdGhfdHJhbnNwb3J0KHNoYTFfaXRlcmF0ZV9mbiwgaW50IHF1aWV0LAorCQkJCQkJICAgICB2b2lkICpjYl9kYXRhLAorCQkJCQkJICAgICBzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpOworCisjZW5kaWYgLyogQ09OTkVDVEVEX0ggKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvUkVBRE1FIGIvY29udHJpYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmMjkxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvUkVBRE1FCkBAIC0wLDAgKzEsNDMgQEAKK0NvbnRyaWJ1dGVkIFNvZnR3YXJlCisKK0FsdGhvdWdoIHRoZXNlIHBpZWNlcyBhcmUgYXZhaWxhYmxlIGFzIHBhcnQgb2YgdGhlIG9mZmljaWFsIGdpdAorc291cmNlIHRyZWUsIHRoZXkgYXJlIGluIHNvbWV3aGF0IGRpZmZlcmVudCBzdGF0dXMuICBUaGUKK2ludGVudGlvbiBpcyB0byBrZWVwIGludGVyZXN0aW5nIHRvb2xzIGFyb3VuZCBnaXQgaGVyZSwgbWF5YmUKK2V2ZW4gZXhwZXJpbWVudGFsIG9uZXMsIHRvIGdpdmUgdXNlcnMgYW4gZWFzaWVyIGFjY2VzcyB0byB0aGVtLAorYW5kIHRvIGdpdmUgdG9vbHMgd2lkZXIgZXhwb3N1cmUsIHNvIHRoYXQgdGhleSBjYW4gYmUgaW1wcm92ZWQKK2Zhc3Rlci4KKworSSBhbSBub3QgZXhwZWN0aW5nIHRvIHRvdWNoIHRoZXNlIG15c2VsZiB0aGF0IG11Y2guICBBcyBmYXIgYXMKK215IGRheS10by1kYXkgb3BlcmF0aW9uIGlzIGNvbmNlcm5lZCwgdGhlc2Ugc3ViZGlyZWN0b3JpZXMgYXJlCitvd25lZCBieSB0aGVpciByZXNwZWN0aXZlIHByaW1hcnkgYXV0aG9ycy4gIEkgYW0gd2lsbGluZyB0byBoZWxwCitpZiB1c2VycyBvZiB0aGVzZSBjb21wb25lbnRzIGFuZCB0aGUgY29udHJpYi8gc3VidHJlZSAib3duZXJzIgoraGF2ZSB0ZWNobmljYWwvZGVzaWduIGlzc3VlcyB0byByZXNvbHZlLCBidXQgdGhlIGluaXRpYXRpdmUgdG8KK2ZpeCBhbmQvb3IgZW5oYW5jZSB0aGluZ3MgX211c3RfIGJlIG9uIHRoZSBzaWRlIG9mIHRoZSBzdWJ0cmVlCitvd25lcnMuICBJT1csIEkgd29uJ3QgYmUgYWN0aXZlbHkgbG9va2luZyBmb3IgYnVncyBhbmQgcm9vbXMgZm9yCitlbmhhbmNlbWVudHMgaW4gdGhlbSBhcyB0aGUgZ2l0IG1haW50YWluZXIgLS0gSSBtYXkgb25seSBkbyBzbworanVzdCBhcyBvbmUgb2YgdGhlIHVzZXJzIHdoZW4gSSB3YW50IHRvIHNjcmF0Y2ggbXkgb3duIGl0Y2guICBJZgoreW91IGhhdmUgcGF0Y2hlcyB0byB0aGluZ3MgaW4gY29udHJpYi8gYXJlYSwgdGhlIHBhdGNoIHNob3VsZCBiZQorZmlyc3Qgc2VudCB0byB0aGUgcHJpbWFyeSBhdXRob3IsIGFuZCB0aGVuIHRoZSBwcmltYXJ5IGF1dGhvcgorc2hvdWxkIGFjayBhbmQgZm9yd2FyZCBpdCB0byBtZSAoZ2l0IHB1bGwgcmVxdWVzdCBpcyBuaWNlcikuCitUaGlzIGlzIHRoZSBzYW1lIHdheSBhcyBob3cgSSBoYXZlIGJlZW4gdHJlYXRpbmcgZ2l0aywgYW5kIHRvIGEKK2xlc3NlciBkZWdyZWUgdmFyaW91cyBmb3JlaWduIFNDTSBpbnRlcmZhY2VzLCBzbyB5b3Uga25vdyB0aGUKK2RyaWxsLgorCitJIGV4cGVjdCB0aGF0IHRoaW5ncyB0aGF0IHN0YXJ0IHRoZWlyIGxpZmUgaW4gdGhlIGNvbnRyaWIvIGFyZWEKK3RvIGdyYWR1YXRlIG91dCBvZiBjb250cmliLyBvbmNlIHRoZXkgbWF0dXJlLCBlaXRoZXIgYnkgYmVjb21pbmcKK3Byb2plY3RzIG9uIHRoZWlyIG93biwgb3IgbW92aW5nIHRvIHRoZSB0b3BsZXZlbCBkaXJlY3RvcnkuICBPbgordGhlIG90aGVyIGhhbmQsIEkgZXhwZWN0IEknbGwgYmUgcHJvcG9zaW5nIHJlbW92YWwgb2YgZGlzdXNlZAorYW5kIGluYWN0aXZlIG9uZXMgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0lmIHlvdSBoYXZlIG5ldyB0aGluZ3MgdG8gYWRkIHRvIHRoaXMgYXJlYSwgcGxlYXNlIGZpcnN0IHByb3Bvc2UKK2l0IG9uIHRoZSBnaXQgbWFpbGluZyBsaXN0LCBhbmQgYWZ0ZXIgYSBsaXN0IGRpc2N1c3Npb24gcHJvdmVzCit0aGVyZSBhcmUgc29tZSBnZW5lcmFsIGludGVyZXN0cyAoaXQgZG9lcyBub3QgaGF2ZSB0byBiZSBhCitsaXN0LXdpZGUgY29uc2Vuc3VzIGZvciBhIHRvb2wgdGFyZ2V0ZWQgdG8gYSByZWxhdGl2ZWx5IG5hcnJvdworYXVkaWVuY2UgLS0gZm9yIGV4YW1wbGUgSSBkbyBub3Qgd29yayB3aXRoIHByb2plY3RzIHdob3NlCit1cHN0cmVhbSBpcyBzdm4sIHNvIEkgaGF2ZSBubyB1c2UgZm9yIGdpdC1zdm4gbXlzZWxmLCBidXQgaXQgaXMKK29mIGdlbmVyYWwgaW50ZXJlc3QgZm9yIHBlb3BsZSB3aG8gbmVlZCB0byBpbnRlcm9wZXJhdGUgd2l0aCBTVk4KK3JlcG9zaXRvcmllcyBpbiBhIHdheSBnaXQtc3ZuIHdvcmtzIGJldHRlciB0aGFuIGdpdC1zdm5pbXBvcnQpLAorc3VibWl0IGEgcGF0Y2ggdG8gY3JlYXRlIGEgc3ViZGlyZWN0b3J5IG9mIGNvbnRyaWIvIGFuZCBwdXQgeW91cgorc3R1ZmYgdGhlcmUuCisKKy1qYwpkaWZmIC0tZ2l0IGEvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy5wbSBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4ZWY3MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMucG0KQEAgLTAsMCArMSw0MiBAQAorcGFja2FnZSBHZW5lcmF0b3JzOworcmVxdWlyZSBFeHBvcnRlcjsKKwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK25vIHN0cmljdCAncmVmcyc7Cit1c2UgdmFycyBxdygkVkVSU0lPTiBAQVZBSUxBQkxFKTsKKworb3VyICRWRVJTSU9OID0gJzEuMDAnOworb3VyKEBJU0EsIEBFWFBPUlQsIEBFWFBPUlRfT0ssIEBBVkFJTEFCTEUpOworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQkVHSU4geworICAgIGxvY2FsKCpEKTsKKyAgICBteSAkbWUgPSAkSU5DeyJHZW5lcmF0b3JzLnBtIn07CisgICAgZGllICJDb3VsZG4ndCBmaW5kIG15c2VsZiBpbiBcQElOQywgd2hpY2ggaXMgcmVxdWlyZWQgdG8gbG9hZCB0aGUgZ2VuZXJhdG9ycyEiIGlmICgiJG1lIiBlcSAiIik7CisgICAgJG1lID0gZGlybmFtZSgkbWUpOworICAgIGlmIChvcGVuZGlyKEQsIiRtZS9HZW5lcmF0b3JzIikpIHsKKyAgICAgICAgZm9yZWFjaCBteSAkZ2VuIChyZWFkZGlyKEQpKSB7CisgICAgICAgICAgICBuZXh0IGlmICgkZ2VuICA9fiAvXlwuXC4/JC8pOworICAgICAgICAgICAgcmVxdWlyZSAiJHttZX0vR2VuZXJhdG9ycy8kZ2VuIjsKKyAgICAgICAgICAgICRnZW4gPX4gcyxcLnBtLCw7CisgICAgICAgICAgICBwdXNoKEBBVkFJTEFCTEUsICRnZW4pOworICAgICAgICB9CisgICAgICAgIGNsb3NlZGlyKEQpOworICAgICAgICBteSAkZ2VucyA9IGpvaW4oJywgJywgQEFWQUlMQUJMRSk7CisgICAgfQorCisgICAgcHVzaCBARVhQT1JUX09LLCBxdyhhdmFpbGFibGUpOworfQorCitzdWIgYXZhaWxhYmxlIHsKKyAgICByZXR1cm4gQEFWQUlMQUJMRTsKK30KKworc3ViIGdlbmVyYXRlIHsKKyAgICBteSAoJGdlbiwgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICByZXR1cm4gZXZhbCgiR2VuZXJhdG9yczo6JHtnZW59OjpnZW5lcmF0ZShcJGdpdF9kaXIsIFwkb3V0X2RpciwgXCRyZWxfZGlyLCBcJWJ1aWxkX3N0cnVjdHVyZSkiKSBpZiBncmVwKC9eJGdlbiQvLCBAQVZBSUxBQkxFKTsKKyAgICBkaWUgIkdlbmVyYXRvciBcIiR7Z2VufVwiIGlzIG5vdCBhdmFpbGFibGUhXG5BdmFpbGFibGUgZ2VuZXJhdG9ycyBhcmU6IEBBVkFJTEFCTEVcbiI7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1FNYWtlLnBtIGIvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9RTWFrZS5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjNiNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9idWlsZHN5c3RlbXMvR2VuZXJhdG9ycy9RTWFrZS5wbQpAQCAtMCwwICsxLDE4OSBAQAorcGFja2FnZSBHZW5lcmF0b3JzOjpRTWFrZTsKK3JlcXVpcmUgRXhwb3J0ZXI7CisKK3VzZSBzdHJpY3Q7Cit1c2UgdmFycyBxdygkVkVSU0lPTik7CisKK291ciAkVkVSU0lPTiA9ICcxLjAwJzsKK291cihASVNBLCBARVhQT1JULCBARVhQT1JUX09LLCBAQVZBSUxBQkxFKTsKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKK0JFR0lOIHsKKyAgICBwdXNoIEBFWFBPUlRfT0ssIHF3KGdlbmVyYXRlKTsKK30KKworc3ViIGdlbmVyYXRlIHsKKyAgICBteSAoJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKworICAgIG15IEBsaWJzID0gQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19OworICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgIGNyZWF0ZUxpYlByb2plY3QoJF8sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpOworICAgIH0KKworICAgIG15IEBhcHBzID0gQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19OworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIGNyZWF0ZUFwcFByb2plY3QoJF8sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpOworICAgIH0KKworICAgIGNyZWF0ZUdsdWVQcm9qZWN0KCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpOworICAgIHJldHVybiAwOworfQorCitzdWIgY3JlYXRlTGliUHJvamVjdCB7CisgICAgbXkgKCRsaWJuYW1lLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHByaW50ICJHZW5lcmF0ZSAkbGlibmFtZSBsaWIgcHJvamVjdFxuIjsKKyAgICAkcmVsX2RpciA9ICIuLi8kcmVsX2RpciI7CisKKyAgICBteSAkc291cmNlcyA9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KG1hcCgiJHJlbF9kaXIvJF8iLCBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9TT1VSQ0VTIn19KSkpOworICAgIG15ICRkZWZpbmVzID0gam9pbigiIFxcXG5cdCIsIHNvcnQoQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fREVGSU5FUyJ9fSkpOworICAgIG15ICRpbmNsdWRlcz0gam9pbigiIFxcXG5cdCIsIHNvcnQobWFwKCIkcmVsX2Rpci8kXyIsIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0lOQ0xVREVTIn19KSkpOworICAgIG15ICRjZmxhZ3MgID0gam9pbigiICIsIHNvcnQoQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fQ0ZMQUdTIn19KSk7CisKKyAgICBteSAkY2ZsYWdzX2RlYnVnID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU1ULy1NVGQvOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTy4vLzsKKworICAgIG15ICRjZmxhZ3NfcmVsZWFzZSA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19yZWxlYXNlID1+IHMvLU1UZC8tTVQvOworCisgICAgbXkgQHRtcCAgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9MRkxBR1MifX07CisgICAgbXkgQHRtcDIgPSAoKTsKKyAgICBmb3JlYWNoIChAdG1wKSB7CisgICAgICAgIGlmICgvXi1MVENHLykgeworICAgICAgICB9IGVsc2lmICgvXi1MLykgeworICAgICAgICAgICAgJF8gPX4gcy9eLUwvLUxJQlBBVEg6JHJlbF9kaXJcLy87CisgICAgICAgIH0KKyAgICAgICAgcHVzaChAdG1wMiwgJF8pOworICAgIH0KKyAgICBteSAkbGZsYWdzID0gam9pbigiICIsIHNvcnQoQHRtcCkpOworCisgICAgbXkgJHRhcmdldCA9ICRsaWJuYW1lOworICAgICR0YXJnZXQgPX4gcy9cLy9fL2c7CisgICAgJGRlZmluZXMgPX4gcy8tRC8vZzsKKyAgICAkZGVmaW5lcyA9fiBzLyIvXFxcXCIvZzsKKyAgICAkaW5jbHVkZXMgPX4gcy8tSS8vZzsKKyAgICBta2RpciAiJHRhcmdldCIgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgJHRhcmdldCBmb3IgbGliIHByb2plY3QhXG4iOworICAgIG9wZW4gRiwgIj4kdGFyZ2V0LyR0YXJnZXQucHJvIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICR0YXJnZXQvJHRhcmdldC5wcm8gZm9yIHdyaXRpbmchXG4iOworICAgIHByaW50IEYgPDwgIkVPTSI7CitURU1QTEFURSA9IGxpYgorVEFSR0VUID0gJHRhcmdldAorREVTVERJUiA9ICRyZWxfZGlyCisKK0NPTkZJRyAtPSBxdAorQ09ORklHICs9IHN0YXRpYworCitRTUFLRV9DRkxBR1MgPQorUU1BS0VfQ0ZMQUdTX1JFTEVBU0UgPSAkY2ZsYWdzX3JlbGVhc2UKK1FNQUtFX0NGTEFHU19ERUJVRyA9ICRjZmxhZ3NfZGVidWcKK1FNQUtFX0xJQkZMQUdTID0gJGxmbGFncworCitERUZJTkVTICs9IFxcCisgICAgICAgICRkZWZpbmVzCisKK0lOQ0xVREVQQVRIICs9IFxcCisgICAgICAgICRpbmNsdWRlcworCitTT1VSQ0VTICs9IFxcCisgICAgICAgICRzb3VyY2VzCitFT00KKyAgICBjbG9zZSBGOworfQorCitzdWIgY3JlYXRlQXBwUHJvamVjdCB7CisgICAgbXkgKCRhcHBuYW1lLCAkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKSA9IEBfOworICAgIHByaW50ICJHZW5lcmF0ZSAkYXBwbmFtZSBhcHAgcHJvamVjdFxuIjsKKyAgICAkcmVsX2RpciA9ICIuLi8kcmVsX2RpciI7CisKKyAgICBteSAkc291cmNlcyA9IGpvaW4oIiBcXFxuXHQiLCBzb3J0KG1hcCgiJHJlbF9kaXIvJF8iLCBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9TT1VSQ0VTIn19KSkpOworICAgIG15ICRkZWZpbmVzID0gam9pbigiIFxcXG5cdCIsIHNvcnQoQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fREVGSU5FUyJ9fSkpOworICAgIG15ICRpbmNsdWRlcz0gam9pbigiIFxcXG5cdCIsIHNvcnQobWFwKCIkcmVsX2Rpci8kXyIsIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0lOQ0xVREVTIn19KSkpOworICAgIG15ICRjZmxhZ3MgID0gam9pbigiICIsIHNvcnQoQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fQ0ZMQUdTIn19KSk7CisKKyAgICBteSAkY2ZsYWdzX2RlYnVnID0gJGNmbGFnczsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU1ULy1NVGQvOworICAgICRjZmxhZ3NfZGVidWcgPX4gcy8tTy4vLzsKKworICAgIG15ICRjZmxhZ3NfcmVsZWFzZSA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19yZWxlYXNlID1+IHMvLU1UZC8tTVQvOworCisgICAgbXkgJGxpYnM7CisgICAgZm9yZWFjaCAoc29ydChAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBuYW1lfV9MSUJTIn19KSkgeworICAgICAgICAkXyA9fiBzL1wvL18vZzsKKyAgICAgICAgJGxpYnMgLj0gIiAkXyI7CisgICAgfQorICAgIG15IEB0bXAgID0gQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fTEZMQUdTIn19OworICAgIG15IEB0bXAyID0gKCk7CisgICAgZm9yZWFjaCAoQHRtcCkgeworICAgICAgICAjIG5leHQgaWYgKCRfIGVxICItTk9ERUZBVUxUTElCOk1TVkNSVC5saWIiKTsKKyAgICAgICAgaWYgKC9eLUxUQ0cvKSB7CisgICAgICAgIH0gZWxzaWYgKC9eLUwvKSB7CisgICAgICAgICAgICAkXyA9fiBzL14tTC8tTElCUEFUSDokcmVsX2RpclwvLzsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEB0bXAyLCAkXyk7CisgICAgfQorICAgIG15ICRsZmxhZ3MgPSBqb2luKCIgIiwgc29ydChAdG1wKSk7CisKKyAgICBteSAkdGFyZ2V0ID0gJGFwcG5hbWU7CisgICAgJHRhcmdldCA9fiBzL1wuZXhlLy87CisgICAgJHRhcmdldCA9fiBzL1wvL18vZzsKKyAgICAkZGVmaW5lcyA9fiBzLy1ELy9nOworICAgICRkZWZpbmVzID1+IHMvIi9cXFxcIi9nOworICAgICRpbmNsdWRlcyA9fiBzLy1JLy9nOworICAgIG1rZGlyICIkdGFyZ2V0IiB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGRpcmVjdG9yeSAkdGFyZ2V0IGZvciBhcHAgcHJvamVjdCFcbiI7CisgICAgb3BlbiBGLCAiPiR0YXJnZXQvJHRhcmdldC5wcm8iIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gJHRhcmdldC8kdGFyZ2V0LnBybyBmb3Igd3JpdGluZyFcbiI7CisgICAgcHJpbnQgRiA8PCAiRU9NIjsKK1RFTVBMQVRFID0gYXBwCitUQVJHRVQgPSAkdGFyZ2V0CitERVNURElSID0gJHJlbF9kaXIKKworQ09ORklHIC09IHF0IGVtYmVkX21hbmlmZXN0X2V4ZQorQ09ORklHICs9IGNvbnNvbGUKKworUU1BS0VfQ0ZMQUdTID0KK1FNQUtFX0NGTEFHU19SRUxFQVNFID0gJGNmbGFnc19yZWxlYXNlCitRTUFLRV9DRkxBR1NfREVCVUcgPSAkY2ZsYWdzX2RlYnVnCitRTUFLRV9MRkxBR1MgPSAkbGZsYWdzCitMSUJTICAgPSAkbGlicworCitERUZJTkVTICs9IFxcCisgICAgICAgICRkZWZpbmVzCisKK0lOQ0xVREVQQVRIICs9IFxcCisgICAgICAgICRpbmNsdWRlcworCit3aW4zMjpRTUFLRV9MRkxBR1MgKz0gLUxJQlBBVEg6JHJlbF9kaXIKK2Vsc2U6IFFNQUtFX0xGTEFHUyArPSAtTCRyZWxfZGlyCisKK1NPVVJDRVMgKz0gXFwKKyAgICAgICAgJHNvdXJjZXMKK0VPTQorICAgIGNsb3NlIEY7Cit9CisKK3N1YiBjcmVhdGVHbHVlUHJvamVjdCB7CisgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgbXkgJGxpYnMgPSBqb2luKCIgXFwgXG4iLCBtYXAoIlx0JF98JF8ucHJvIiwgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19KSk7CisgICAgbXkgJGFwcHMgPSBqb2luKCIgXFwgXG4iLCBtYXAoIlx0JF98JF8ucHJvIiwgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19KSk7CisgICAgJGxpYnMgPX4gcy9cLmEvL2c7CisgICAgJGxpYnMgPX4gcy9cLy9fL2c7CisgICAgJGxpYnMgPX4gcy9cfC9cLy9nOworICAgICRhcHBzID1+IHMvXC5leGUvL2c7CisgICAgJGFwcHMgPX4gcy9cLy9fL2c7CisgICAgJGFwcHMgPX4gcy9cfC9cLy9nOworCisgICAgbXkgJGZpbGVuYW1lID0gJG91dF9kaXI7CisgICAgJGZpbGVuYW1lID1+IHMvLipcLyhbXlwvXSspJC8kMS87CisgICAgJGZpbGVuYW1lID1+IHMvXC8kLy87CisgICAgcHJpbnQgIkdlbmVyYXRlIGdsdWUgcHJvamVjdCAkZmlsZW5hbWUucHJvXG4iOworICAgIG9wZW4gRiwgIj4kZmlsZW5hbWUucHJvIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICRmaWxlbmFtZS5wcm8gZm9yIHdyaXRpbmchXG4iOworICAgIHByaW50IEYgPDwgIkVPTSI7CitURU1QTEFURSA9IHN1YmRpcnMKK0NPTkZJRyArPSBvcmRlcmVkCitTVUJESVJTICs9IFxcCiskbGlicyBcXAorJGFwcHMKK0VPTQorICAgIGNsb3NlIEY7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1ZjcHJvai5wbSBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL0dlbmVyYXRvcnMvVmNwcm9qLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTc0YWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9HZW5lcmF0b3JzL1ZjcHJvai5wbQpAQCAtMCwwICsxLDYyNiBAQAorcGFja2FnZSBHZW5lcmF0b3JzOjpWY3Byb2o7CityZXF1aXJlIEV4cG9ydGVyOworCit1c2Ugc3RyaWN0OwordXNlIHZhcnMgcXcoJFZFUlNJT04pOworCitvdXIgJFZFUlNJT04gPSAnMS4wMCc7CitvdXIoQElTQSwgQEVYUE9SVCwgQEVYUE9SVF9PSywgQEFWQUlMQUJMRSk7CitASVNBID0gcXcoRXhwb3J0ZXIpOworCitCRUdJTiB7CisgICAgcHVzaCBARVhQT1JUX09LLCBxdyhnZW5lcmF0ZSk7Cit9CisKK215ICRndWlkX2luZGV4ID0gMDsKK215IEBHVUlEUyA9ICgKKyAgICAie0UwN0I5OTg5LTJCRjctNEYyMS04OTE4LUJFMjJCQTQ2N0FDM30iLAorICAgICJ7Mjc4RkZCNTEtMDI5Ni00QTQ0LUE4MUEtMjJCODdCN0MzNTkyfSIsCisgICAgIns3MzQ2QTJDNC1GMEZELTQ0NEYtOUVCRS0xQUYyM0IyQjU2NTB9IiwKKyAgICAiezY3RjQyMUFDLUVCMzQtNEQ0OS04MjBCLTMxOTY4MDdCNDIzRn0iLAorICAgICJ7Mzg1RENGRTEtQ0M4Qy00MjExLUE0NTEtODBGQ0ZDMzFDQTUxfSIsCisgICAgIns5N0NDNDZDNS1EMkNDLTREMjYtQjYzNC1FNzU3OTJCNzk5MTZ9IiwKKyAgICAie0M3Q0UyMUZFLTZFRjgtNDAxMi1BNUM3LUEyMkJDRURGQkExMX0iLAorICAgICJ7NTE1NzUxMzQtM0ZERi00MkQxLUJBQkQtM0ZCMTI2NjlDNkM5fSIsCisgICAgInswQUUxOTVFNC05ODIzLTRCODctOEU2Ri0yMEM1NjE0QUYyRkZ9IiwKKyAgICAiezRCOTE4MjU1LTY3Q0EtNDNCQi1BNDZDLTI2NzA0QjY2NkU2Qn0iLAorICAgICJ7MThDQ0ZFRUYtQzhFRS00Q0MxLUEyNjUtMjZGOTVDOUY0NjQ5fSIsCisgICAgIns1RDVEOTBGQS0wMUI3LTQ5NzMtQUZFNS1DQTg4QzUzQUMxOTd9IiwKKyAgICAiezFGMDU0MzIwLTAzNkQtNDlFMS1CMzg0LUZCNURGMEJDOEFDMH0iLAorICAgICJ7N0NFRDY1RUUtRjJEOS00MTcxLTgyNUItQzdENTYxRkU1Nzg2fSIsCisgICAgIns4RDM0MTY3OS0wRjA3LTQ2NjQtOUE1Ni0zQkEwREU4OEI5QkN9IiwKKyAgICAie0MxODlGRURDLTI5NTctNEJENy05RkE0LTc2MjIyNDFFQTE0NX0iLAorICAgICJ7NjY4NDQyMDMtMUI5Ri00QzUzLTkyNzQtMTY0RkZGOTVCODQ3fSIsCisgICAgIntFNEZFQTE0NS1ERUNDLTQ0MEQtQUVFQS01OThDRjM4MUZENDN9IiwKKyAgICAiezczMzAwQThFLUM4QUMtNDFCMC1CNTU1LTRGNTk2QjY4MUJBN30iLAorICAgICJ7ODczRkRFQjEtRDAxRC00MEJGLUExQkYtOEJCQzU4RUMwRjUxfSIsCisgICAgIns3OTIyQzhCRS03NkM1LTRBQzYtOEJGNy04ODVDMEY5M0I3ODJ9IiwKKyAgICAie0UyNDVEMzcwLTMwOEItNEE0OS1CRkMxLTFFNTI3ODI3OTc1Rn0iLAorICAgICJ7RjZGQTk1N0ItNjZGQy00RUQ3LUIyNjAtRTU5QkJFNEZFODEzfSIsCisgICAgIntFNjA1NTA3MC0wMTk4LTQzMUEtQkM0OS04REI2Q0VFNzcwQUV9IiwKKyAgICAiezU0MTU5MjM0LUMzRUItNDNEQS05MDZCLUNFNURBNUM3NDY1NH0iLAorICAgICJ7NTk0Q0ZDMzUtMEI2MC00NkY2LUI4RUYtOTk4M0FDQzExODdEfSIsCisgICAgIntEOTNGQ0FCNy0xRjAxLTQ4RDItQjgzMi1GNzYxQjgzMjMxQTV9IiwKKyAgICAie0RCQTVFNkFDLUU3QkUtNDJEMy04NzAzLTRFNzg3MTQxNTI2RX0iLAorICAgICJ7NjE3MTk1M0YtREQyNi00NEM3LUEzQkUtQ0M0NUY4NkZDMTFGfSIsCisgICAgIns5RTE5RERCRS1GNUU0LTRBMjYtQTJGRS0wNjE2RTA0ODc5Qjh9IiwKKyAgICAie0FFODFBNjE1LTk5RTMtNDg4NS05Q0UwLUQ5Q0FBMTkzRTg2N30iLAorICAgICJ7RkJGNDA2N0UtMTg1NS00RjZDLThCQ0QtNEQ2MkU4MDFBMDREfSIsCisgICAgInsxNzAwNzk0OC02NTkzLTRBRUItODEwNi1GNzg4NEI0RjJDMTl9IiwKKyAgICAiezE5OUQ0QzhELTg2MzktNERBNi04MkVGLTA4NjY4QzM1REVFMH0iLAorICAgICJ7RTA4NUU1MEUtQzE0MC00Q0YzLUJFNEItMDk0QjE0RjBEREQ2fSIsCisgICAgInswMDc4NTI2OC1BOUNDLTRFNDAtQUMyOS1CQUMwMDE5MTU5Q0V9IiwKKyAgICAiezRDMDZGNTZBLURDREItNDZBNi1CNjdDLTAyMzM5OTM1Q0YxMn0iLAorICAgICJ7M0E2MkQzRkQtNTE5RS00RUM5LTgxNzEtRDJDMUJGRUEwMjJGfSIsCisgICAgInszQTYyRDNGRC01MTlFLTRFQzktODE3MS1EMkMxQkZFQTAyMkZ9IiwKKyAgICAiezkzOTJFQjU4LUQ3QkEtNDEwQi1CMUYwLUIyRkFBNkJDODlBN30iLAorICAgICJ7MkFDQUIyRDUtRTBDRS00MDI3LUJDQTAtRDc4QjJEN0E2QzY2fSIsCisgICAgIns4NkUyMTZDMy00M0NFLTQ4MUEtQkNCMi1CRTVFNjI4NTA2MzV9IiwKKyAgICAie0ZCNjMxMjkxLTc5MjMtNEI5MS05QTU3LTdCMThGREJCN0E0Mn0iLAorICAgICJ7MEExNzZFQzktRTkzNC00NUI4LUI4N0YtMTZDN0Y0QzgwMDM5fSIsCisgICAgIntERjU1Q0E4MC00NkU4LTRDNTMtQjY1Qi00OTkwQTIzREQ0NDR9IiwKKyAgICAiezNBMEY5ODk1LTU1RDItNDcxMC1CRTVFLUFENzQ5OEI1QkY0NH0iLAorICAgICJ7Mjk0QkRDNUEtRjQ0OC00OEI2LTgxMTAtREQwQTgxODIwRjhDfSIsCisgICAgIns0QjlGNjZFOS1GQUM5LTQ3QUItQjFFRi1DMTY3NTZGQkZEMDZ9IiwKKyAgICAiezcyRUE0OUM2LTI4MDYtNDhCRC1CODFCLUQ0OTA1MTAyRTE5Q30iLAorICAgICJ7NTcyOEVCN0UtODkyOS00ODZDLThDRDUtMzIzOEQwNjBFNzY4fSIKKyk7CisKK3N1YiBnZW5lcmF0ZSB7CisgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgbXkgQGxpYnMgPSBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlMifX07CisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgY3JlYXRlTGliUHJvamVjdCgkXywgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgXCVidWlsZF9zdHJ1Y3R1cmUpOworICAgIH0KKworICAgIG15IEBhcHBzID0gQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19OworICAgIGZvcmVhY2ggKEBhcHBzKSB7CisgICAgICAgIGNyZWF0ZUFwcFByb2plY3QoJF8sICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsIFwlYnVpbGRfc3RydWN0dXJlKTsKKyAgICB9CisKKyAgICBjcmVhdGVHbHVlUHJvamVjdCgkZ2l0X2RpciwgJG91dF9kaXIsICRyZWxfZGlyLCAlYnVpbGRfc3RydWN0dXJlKTsKKyAgICByZXR1cm4gMDsKK30KKworc3ViIGNyZWF0ZUxpYlByb2plY3QgeworICAgIG15ICgkbGlibmFtZSwgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJGJ1aWxkX3N0cnVjdHVyZSkgPSBAXzsKKyAgICBwcmludCAiR2VuZXJhdGUgJGxpYm5hbWUgdmNwcm9qIGxpYiBwcm9qZWN0XG4iOworICAgICRyZWxfZGlyID0gIi4uXFwkcmVsX2RpciI7CisgICAgJHJlbF9kaXIgPX4gcy9cLy9cXC9nOworCisgICAgbXkgJHRhcmdldCA9ICRsaWJuYW1lOworICAgICR0YXJnZXQgPX4gcy9cLy9fL2c7CisgICAgJHRhcmdldCA9fiBzL1wuYS8vOworCisgICAgbXkgJHV1aWQgPSAkR1VJRFNbJGd1aWRfaW5kZXhdOworICAgICQkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7dGFyZ2V0fV9HVUlEIn0gPSAkdXVpZDsKKyAgICAkZ3VpZF9pbmRleCArPSAxOworCisgICAgbXkgQHNyY3MgPSBzb3J0KG1hcCgiJHJlbF9kaXJcXCRfIiwgQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X1NPVVJDRVMifX0pKTsKKyAgICBteSBAc291cmNlczsKKyAgICBmb3JlYWNoIChAc3JjcykgeworICAgICAgICAkXyA9fiBzL1wvL1xcL2c7CisgICAgICAgIHB1c2goQHNvdXJjZXMsICRfKTsKKyAgICB9CisgICAgbXkgJGRlZmluZXMgPSBqb2luKCIsIiwgc29ydChAeyQkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fREVGSU5FUyJ9fSkpOworICAgIG15ICRpbmNsdWRlcz0gam9pbigiOyIsIHNvcnQobWFwKCImcXVvdDskcmVsX2RpclxcJF8mcXVvdDsiLCBAeyQkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fSU5DTFVERVMifX0pKSk7CisgICAgbXkgJGNmbGFncyAgPSBqb2luKCIgIiwgc29ydChAeyQkYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlibmFtZX1fQ0ZMQUdTIn19KSk7CisgICAgJGNmbGFncyA9fiBzL1wiLyZxdW90Oy9nOworCisgICAgbXkgJGNmbGFnc19kZWJ1ZyA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1NVC8tTVRkLzsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU8uLy87CisKKyAgICBteSAkY2ZsYWdzX3JlbGVhc2UgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfcmVsZWFzZSA9fiBzLy1NVGQvLU1ULzsKKworICAgIG15IEB0bXAgID0gQHskJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0xGTEFHUyJ9fTsKKyAgICBteSBAdG1wMiA9ICgpOworICAgIGZvcmVhY2ggKEB0bXApIHsKKyAgICAgICAgaWYgKC9eLUxUQ0cvKSB7CisgICAgICAgIH0gZWxzaWYgKC9eLUwvKSB7CisgICAgICAgICAgICAkXyA9fiBzL14tTC8tTElCUEFUSDokcmVsX2RpclwvLzsKKyAgICAgICAgfQorICAgICAgICBwdXNoKEB0bXAyLCAkXyk7CisgICAgfQorICAgIG15ICRsZmxhZ3MgPSBqb2luKCIgIiwgc29ydChAdG1wKSk7CisKKyAgICAkZGVmaW5lcyA9fiBzLy1ELy9nOworICAgICRkZWZpbmVzID1+IHMvXCIvXFwmcXVvdDsvZzsKKyAgICAkZGVmaW5lcyA9fiBzL1wnLy9nOworICAgICRpbmNsdWRlcyA9fiBzLy1JLy9nOworICAgIG1rZGlyICIkdGFyZ2V0IiB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgdGhlIGRpcmVjdG9yeSAkdGFyZ2V0IGZvciBsaWIgcHJvamVjdCFcbiI7CisgICAgb3BlbiBGLCAiPiR0YXJnZXQvJHRhcmdldC52Y3Byb2oiIHx8IGRpZSAiQ291bGQgbm90IG9wZW4gJHRhcmdldC8kdGFyZ2V0LnBybyBmb3Igd3JpdGluZyFcbiI7CisgICAgYmlubW9kZSBGLCAiOmNybGYiOworICAgIHByaW50IEYgPDwgIkVPTSI7Cis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nID0gIldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI5LDAwIgorCU5hbWU9IiR0YXJnZXQiCisJUHJvamVjdEdVSUQ9IiR1dWlkIj4KKwk8UGxhdGZvcm1zPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9IldpbjMyIi8+CisJPC9QbGF0Zm9ybXM+CisJPFRvb2xGaWxlcz4KKwk8L1Rvb2xGaWxlcz4KKwk8Q29uZmlndXJhdGlvbnM+CisJCTxDb25maWd1cmF0aW9uCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJHJlbF9kaXIiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iNCIKKwkJCUNoYXJhY3RlclNldD0iMCIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iXCQoUHJvamVjdERpcilcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iJGNmbGFnc19kZWJ1ZyIKKwkJCQlPcHRpbWl6YXRpb249IjAiCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJGluY2x1ZGVzIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMixfREVCVUcsJGRlZmluZXMiCisJCQkJTWluaW1hbFJlYnVpbGQ9InRydWUiCisJCQkJUnVudGltZUxpYnJhcnk9IjEiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9IlwkKEludERpcilcXFwkKFRhcmdldE5hbWUpLnBkYiIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlicmFyaWFuVG9vbCIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCTwvQ29uZmlndXJhdGlvbj4KKwkJPENvbmZpZ3VyYXRpb24KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiRyZWxfZGlyIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjQiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlwkKFByb2plY3REaXIpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRjZmxhZ3NfcmVsZWFzZSIKKwkJCQlPcHRpbWl6YXRpb249IjIiCisJCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiCisJCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiRpbmNsdWRlcyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzIsTkRFQlVHLCRkZWZpbmVzIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSJcJChJbnREaXIpXFxcJChUYXJnZXROYW1lKS5wZGIiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpYnJhcmlhblRvb2wiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSI+CitFT00KKyAgICBmb3JlYWNoKEBzb3VyY2VzKSB7CisgICAgICAgIHByaW50IEYgPDwgIkVPTSI7CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJF8iLz4KK0VPTQorICAgIH0KKyAgICBwcmludCBGIDw8ICJFT00iOworCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KK0VPTQorICAgIGNsb3NlIEY7Cit9CisKK3N1YiBjcmVhdGVBcHBQcm9qZWN0IHsKKyAgICBteSAoJGFwcG5hbWUsICRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICRidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgcHJpbnQgIkdlbmVyYXRlICRhcHBuYW1lIHZjcHJvaiBhcHAgcHJvamVjdFxuIjsKKyAgICAkcmVsX2RpciA9ICIuLlxcJHJlbF9kaXIiOworICAgICRyZWxfZGlyID1+IHMvXC8vXFwvZzsKKworICAgIG15ICR0YXJnZXQgPSAkYXBwbmFtZTsKKyAgICAkdGFyZ2V0ID1+IHMvXC8vXy9nOworICAgICR0YXJnZXQgPX4gcy9cLmV4ZS8vOworCisgICAgbXkgJHV1aWQgPSAkR1VJRFNbJGd1aWRfaW5kZXhdOworICAgICQkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7dGFyZ2V0fV9HVUlEIn0gPSAkdXVpZDsKKyAgICAkZ3VpZF9pbmRleCArPSAxOworCisgICAgbXkgQHNyY3MgPSBzb3J0KG1hcCgiJHJlbF9kaXJcXCRfIiwgQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X1NPVVJDRVMifX0pKTsKKyAgICBteSBAc291cmNlczsKKyAgICBmb3JlYWNoIChAc3JjcykgeworICAgICAgICAkXyA9fiBzL1wvL1xcL2c7CisgICAgICAgIHB1c2goQHNvdXJjZXMsICRfKTsKKyAgICB9CisgICAgbXkgJGRlZmluZXMgPSBqb2luKCIsIiwgc29ydChAeyQkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fREVGSU5FUyJ9fSkpOworICAgIG15ICRpbmNsdWRlcz0gam9pbigiOyIsIHNvcnQobWFwKCImcXVvdDskcmVsX2RpclxcJF8mcXVvdDsiLCBAeyQkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fSU5DTFVERVMifX0pKSk7CisgICAgbXkgJGNmbGFncyAgPSBqb2luKCIgIiwgc29ydChAeyQkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fQ0ZMQUdTIn19KSk7CisgICAgJGNmbGFncyA9fiBzL1wiLyZxdW90Oy9nOworCisgICAgbXkgJGNmbGFnc19kZWJ1ZyA9ICRjZmxhZ3M7CisgICAgJGNmbGFnc19kZWJ1ZyA9fiBzLy1NVC8tTVRkLzsKKyAgICAkY2ZsYWdzX2RlYnVnID1+IHMvLU8uLy87CisKKyAgICBteSAkY2ZsYWdzX3JlbGVhc2UgPSAkY2ZsYWdzOworICAgICRjZmxhZ3NfcmVsZWFzZSA9fiBzLy1NVGQvLU1ULzsKKworICAgIG15ICRsaWJzOworICAgIGZvcmVhY2ggKHNvcnQoQHskJGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG5hbWV9X0xJQlMifX0pKSB7CisgICAgICAgICRfID1+IHMvXC8vXy9nOworICAgICAgICAkbGlicyAuPSAiICRfIjsKKyAgICB9CisgICAgbXkgQHRtcCAgPSBAeyQkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fTEZMQUdTIn19OworICAgIG15IEB0bXAyID0gKCk7CisgICAgZm9yZWFjaCAoQHRtcCkgeworICAgICAgICBpZiAoL14tTFRDRy8pIHsKKyAgICAgICAgfSBlbHNpZiAoL14tTC8pIHsKKyAgICAgICAgICAgICRfID1+IHMvXi1MLy1MSUJQQVRIOiRyZWxfZGlyXC8vOworICAgICAgICB9CisgICAgICAgIHB1c2goQHRtcDIsICRfKTsKKyAgICB9CisgICAgbXkgJGxmbGFncyA9IGpvaW4oIiAiLCBzb3J0KEB0bXApKSAuICIgLUxJQlBBVEg6JHJlbF9kaXIiOworCisgICAgJGRlZmluZXMgPX4gcy8tRC8vZzsKKyAgICAkZGVmaW5lcyA9fiBzL1wiL1xcJnF1b3Q7L2c7CisgICAgJGRlZmluZXMgPX4gcy9cJy8vZzsKKyAgICAkZGVmaW5lcyA9fiBzL1xcXFwvXFwvZzsKKyAgICAkaW5jbHVkZXMgPX4gcy8tSS8vZzsKKyAgICBta2RpciAiJHRhcmdldCIgfHwgZGllICJDb3VsZCBub3QgY3JlYXRlIHRoZSBkaXJlY3RvcnkgJHRhcmdldCBmb3IgbGliIHByb2plY3QhXG4iOworICAgIG9wZW4gRiwgIj4kdGFyZ2V0LyR0YXJnZXQudmNwcm9qIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuICR0YXJnZXQvJHRhcmdldC5wcm8gZm9yIHdyaXRpbmchXG4iOworICAgIGJpbm1vZGUgRiwgIjpjcmxmIjsKKyAgICBwcmludCBGIDw8ICJFT00iOworPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZyA9ICJXaW5kb3dzLTEyNTIiPz4KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0CisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiCisJVmVyc2lvbj0iOSwwMCIKKwlOYW1lPSIkdGFyZ2V0IgorCVByb2plY3RHVUlEPSIkdXVpZCI+CisJPFBsYXRmb3Jtcz4KKwkJPFBsYXRmb3JtCisJCQlOYW1lPSJXaW4zMiIvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9IiRyZWxfZGlyIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlDaGFyYWN0ZXJTZXQ9IjAiCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9IlwkKFByb2plY3REaXIpXCQoQ29uZmlndXJhdGlvbk5hbWUpIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRjZmxhZ3NfZGVidWciCisJCQkJT3B0aW1pemF0aW9uPSIwIgorCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiRpbmNsdWRlcyIKKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzIsX0RFQlVHLCRkZWZpbmVzIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgorCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSJcJChJbnREaXIpXFxcJChUYXJnZXROYW1lKS5wZGIiCisJCQkJV2FybmluZ0xldmVsPSIzIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJGxpYnMiCisJCQkJQWRkaXRpb25hbE9wdGlvbnM9IiRsZmxhZ3MiCisJCQkJTGlua0luY3JlbWVudGFsPSIyIgorCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0idHJ1ZSIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iJHJlbF9kaXIiCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUNoYXJhY3RlclNldD0iMCIKKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iXCQoUHJvamVjdERpcilcJChDb25maWd1cmF0aW9uTmFtZSkiCisJCQk+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01JRExUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iJGNmbGFnc19yZWxlYXNlIgorCQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKKwkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiCisJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJGluY2x1ZGVzIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMixOREVCVUcsJGRlZmluZXMiCisJCQkJUnVudGltZUxpYnJhcnk9IjAiCisJCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiCisJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCisJCQkJUHJvZ3JhbURhdGFCYXNlRmlsZU5hbWU9IlwkKEludERpcilcXFwkKFRhcmdldE5hbWUpLnBkYiIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCIKKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkbGlicyIKKwkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iJGxmbGFncyIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjEiCisJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJ0cnVlIgorCQkJCVN1YlN5c3RlbT0iMSIKKwkJCQlUYXJnZXRNYWNoaW5lPSIxIgorCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiIKKwkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIyIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8RmlsZXM+CisJCTxGaWx0ZXIKKwkJCU5hbWU9IlNvdXJjZSBGaWxlcyIKKwkJCUZpbHRlcj0iY3BwO2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXgiCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSI+CitFT00KKyAgICBmb3JlYWNoKEBzb3VyY2VzKSB7CisgICAgICAgIHByaW50IEYgPDwgIkVPTSI7CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iJF8iLz4KK0VPTQorICAgIH0KKyAgICBwcmludCBGIDw8ICJFT00iOworCQk8L0ZpbHRlcj4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KK0VPTQorICAgIGNsb3NlIEY7Cit9CisKK3N1YiBjcmVhdGVHbHVlUHJvamVjdCB7CisgICAgbXkgKCRnaXRfZGlyLCAkb3V0X2RpciwgJHJlbF9kaXIsICVidWlsZF9zdHJ1Y3R1cmUpID0gQF87CisgICAgcHJpbnQgIkdlbmVyYXRlIHNvbHV0aW9ucyBmaWxlXG4iOworICAgICRyZWxfZGlyID0gIi4uXFwkcmVsX2RpciI7CisgICAgJHJlbF9kaXIgPX4gcy9cLy9cXC9nOworICAgIG15ICRTTE5fSEVBRCA9ICJNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMC4wMFxuIyBWaXN1YWwgU3R1ZGlvIDIwMDhcbiI7CisgICAgbXkgJFNMTl9QUkUgID0gIlByb2plY3QoXCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfVwiKSA9ICI7CisgICAgbXkgJFNMTl9QT1NUID0gIlxuRW5kUHJvamVjdFxuIjsKKworICAgIG15IEBsaWJzID0gQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19OworICAgIG15IEB0bXA7CisgICAgZm9yZWFjaCAoQGxpYnMpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9fL2c7CisgICAgICAgICRfID1+IHMvXC5hLy87CisgICAgICAgIHB1c2goQHRtcCwgJF8pOworICAgIH0KKyAgICBAbGlicyA9IEB0bXA7CisKKyAgICBteSBAYXBwcyA9IEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fTsKKyAgICBAdG1wID0gKCk7CisgICAgZm9yZWFjaCAoQGFwcHMpIHsKKyAgICAgICAgJF8gPX4gcy9cLy9fL2c7CisgICAgICAgICRfID1+IHMvXC5leGUvLzsKKyAgICAgICAgcHVzaChAdG1wLCAkXyk7CisgICAgfQorICAgIEBhcHBzID0gQHRtcDsKKworICAgIG9wZW4gRiwgIj5naXQuc2xuIiB8fCBkaWUgIkNvdWxkIG5vdCBvcGVuIGdpdC5zbG4gZm9yIHdyaXRpbmchXG4iOworICAgIGJpbm1vZGUgRiwgIjpjcmxmIjsKKyAgICBwcmludCBGICIkU0xOX0hFQUQiOworICAgIGZvcmVhY2ggKEBsaWJzKSB7CisgICAgICAgIG15ICRsaWJuYW1lID0gJF87CisgICAgICAgIG15ICR1dWlkID0gJGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm5hbWV9X0dVSUQifTsKKyAgICAgICAgcHJpbnQgRiAiJFNMTl9QUkUiOworICAgICAgICBwcmludCBGICJcIiR7bGlibmFtZX1cIiwgXCIke2xpYm5hbWV9XFwke2xpYm5hbWV9LnZjcHJvalwiLCBcIiR7dXVpZH1cIiI7CisgICAgICAgIHByaW50IEYgIiRTTE5fUE9TVCI7CisgICAgfQorICAgIG15ICR1dWlkX2xpYmdpdCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfbGliZ2l0X0dVSUQifTsKKyAgICBteSAkdXVpZF94ZGlmZl9saWIgPSAkYnVpbGRfc3RydWN0dXJleyJMSUJTX3hkaWZmX2xpYl9HVUlEIn07CisgICAgZm9yZWFjaCAoQGFwcHMpIHsKKyAgICAgICAgbXkgJGFwcG5hbWUgPSAkXzsKKyAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fR1VJRCJ9OworICAgICAgICBwcmludCBGICIkU0xOX1BSRSI7CisgICAgICAgIHByaW50IEYgIlwiJHthcHBuYW1lfVwiLCBcIiR7YXBwbmFtZX1cXCR7YXBwbmFtZX0udmNwcm9qXCIsIFwiJHt1dWlkfVwiXG4iOworICAgICAgICBwcmludCBGICIJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdFxuIjsKKyAgICAgICAgcHJpbnQgRiAiCQkke3V1aWRfbGliZ2l0fSA9ICR7dXVpZF9saWJnaXR9XG4iOworICAgICAgICBwcmludCBGICIJCSR7dXVpZF94ZGlmZl9saWJ9ID0gJHt1dWlkX3hkaWZmX2xpYn1cbiI7CisgICAgICAgIHByaW50IEYgIglFbmRQcm9qZWN0U2VjdGlvbiI7CisgICAgICAgIHByaW50IEYgIiRTTE5fUE9TVCI7CisgICAgfQorCisgICAgcHJpbnQgRiA8PCAiRU9NIjsKK0dsb2JhbAorCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uCisJCURlYnVnfFdpbjMyID0gRGVidWd8V2luMzIKKwkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzIKKwlFbmRHbG9iYWxTZWN0aW9uCitFT00KKyAgICBwcmludCBGIDw8ICJFT00iOworCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uCitFT00KKyAgICBmb3JlYWNoIChAbGlicykgeworICAgICAgICBteSAkbGlibmFtZSA9ICRfOworICAgICAgICBteSAkdXVpZCA9ICRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJuYW1lfV9HVUlEIn07CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyXG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMlxuIjsKKyAgICB9CisgICAgZm9yZWFjaCAoQGFwcHMpIHsKKyAgICAgICAgbXkgJGFwcG5hbWUgPSAkXzsKKyAgICAgICAgbXkgJHV1aWQgPSAkYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwbmFtZX1fR1VJRCJ9OworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMlxuIjsKKyAgICAgICAgcHJpbnQgRiAiXHRcdCR7dXVpZH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyXG4iOworICAgICAgICBwcmludCBGICJcdFx0JHt1dWlkfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgICAgIHByaW50IEYgIlx0XHQke3V1aWR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzJcbiI7CisgICAgfQorCisgICAgcHJpbnQgRiA8PCAiRU9NIjsKKwlFbmRHbG9iYWxTZWN0aW9uCitFbmRHbG9iYWwKK0VPTQorICAgIGNsb3NlIEY7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9lbmdpbmUucGwgYi9jb250cmliL2J1aWxkc3lzdGVtcy9lbmdpbmUucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjNkYTc4NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2VuZ2luZS5wbApAQCAtMCwwICsxLDM1OSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERvIG5vdCBjYWxsIHRoaXMgc2NyaXB0IGRpcmVjdGx5IQorIworIyBUaGUgZ2VuZXJhdGUgc2NyaXB0IGVuc3VyZXMgdGhhdCBASU5DIGlzIGNvcnJlY3QgYmVmb3JlIHRoZSBlbmdpbmUKKyMgaXMgZXhlY3V0ZWQuCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBNYXJpdXMgU3Rvcm0tT2xzZW4gPG1zdG9ybW9AZ21haWwuY29tPgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBGaWxlOjpTcGVjOwordXNlIEN3ZDsKK3VzZSBHZW5lcmF0b3JzOworCitteSAoJWJ1aWxkX3N0cnVjdHVyZSwgJWNvbXBpbGVfb3B0aW9ucywgQG1ha2VkcnkpOworbXkgJG91dF9kaXIgPSBnZXRjd2QoKTsKK215ICRnaXRfZGlyID0gJG91dF9kaXI7CiskZ2l0X2RpciA9fiBzPVxcPS89ZzsKKyRnaXRfZGlyID0gZGlybmFtZSgkZ2l0X2Rpcikgd2hpbGUgKCEtZSAiJGdpdF9kaXIvZ2l0LmMiICYmICIkZ2l0X2RpciIgbmUgIiIpOworZGllICJDb3VsZG4ndCBmaW5kIEdpdCByZXBvIiBpZiAoIiRnaXRfZGlyIiBlcSAiIik7CisKK215IEBnZW5zID0gR2VuZXJhdG9yczo6YXZhaWxhYmxlKCk7CitteSAkZ2VuID0gIlZjcHJvaiI7CisKK3N1YiBzaG93VXNhZ2UKK3sKKyAgICBteSAkZ2VubGlzdCA9IGpvaW4oJywgJywgQGdlbnMpOworICAgIHByaW50IDw8ICJFT00iOworZ2VuZXJhdGUgdXNhZ2U6CisgIC1nIDxHRU5FUkFUT1I+ICAtLWdlbiA8R0VORVJBVE9SPiBTcGVjaWZ5IHRoZSBidWlsZHN5c3RlbSBnZW5lcmF0b3IgICAgKGRlZmF1bHQ6ICRnZW4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdmFpbGFibGU6ICRnZW5saXN0CisgIC1vIDxQQVRIPiAgICAgICAtLW91dCA8UEFUSD4gICAgICBTcGVjaWZ5IG91dHB1dCBkaXJlY3RvcnkgZ2VuZXJhdGlvbiAgKGRlZmF1bHQ6IC4pCisgIC1pIDxGSUxFPiAgICAgICAtLWluIDxGSUxFPiAgICAgICBTcGVjaWZ5IGlucHV0IGZpbGUsIGluc3RlYWQgb2YgcnVubmluZyBHTlUgTWFrZQorICAtaCwtPyAgICAgICAgICAgLS1oZWxwICAgICAgICAgICAgVGhpcyBoZWxwCitFT00KKyAgICBleGl0IDA7Cit9CisKKyMgUGFyc2UgY29tbWFuZC1saW5lIG9wdGlvbnMKK3doaWxlIChAQVJHVikgeworICAgIG15ICRhcmcgPSBzaGlmdCBAQVJHVjsKKyAgICBpZiAoIiRhcmciIGVxICItaCIgfHwgIiRhcmciIGVxICItLWhlbHAiIHx8ICIkYXJnIiBlcSAiLT8iKSB7CisJc2hvd1VzYWdlKCk7CisJZXhpdCgwKTsKKyAgICB9IGVsc2lmKCIkYXJnIiBlcSAiLS1vdXQiIHx8ICIkYXJnIiBlcSAiLW8iKSB7CisJJG91dF9kaXIgPSBzaGlmdCBAQVJHVjsKKyAgICB9IGVsc2lmKCIkYXJnIiBlcSAiLS1nZW4iIHx8ICIkYXJnIiBlcSAiLWciKSB7CisJJGdlbiA9IHNoaWZ0IEBBUkdWOworICAgIH0gZWxzaWYoIiRhcmciIGVxICItLWluIiB8fCAiJGFyZyIgZXEgIi1pIikgeworCW15ICRpbmZpbGUgPSBzaGlmdCBAQVJHVjsKKyAgICAgICAgb3BlbihGLCAiPCRpbmZpbGUiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkaW5maWxlIjsKKyAgICAgICAgQG1ha2VkcnkgPSA8Rj47CisgICAgICAgIGNsb3NlKEYpOworICAgIH0KK30KKworIyBOT1QgdXNpbmcgRmlsZTo6U3BlYy0+cmVsMmFicygkcGF0aCwgJGJhc2UpIGhlcmUsIGFzCisjIGl0IGZhaWxzIGJhZGx5IGZvciBtZSBpbiB0aGUgbXN5c2dpdCBlbnZpcm9ubWVudAorJGdpdF9kaXIgPSBGaWxlOjpTcGVjLT5yZWwyYWJzKCRnaXRfZGlyKTsKKyRvdXRfZGlyID0gRmlsZTo6U3BlYy0+cmVsMmFicygkb3V0X2Rpcik7CitteSAkcmVsX2RpciA9IG1ha2VPdXRSZWwyR2l0KCRnaXRfZGlyLCAkb3V0X2Rpcik7CisKKyMgUHJpbnQgc29tZSBpbmZvcm1hdGlvbiBzbyB0aGUgdXNlciBmZWVscyBpbmZvcm1lZAorcHJpbnQgPDwgIkVPTSI7CistLS0tLQorR2VuZXJhdG9yOiAkZ2VuCitHaXQgZGlyOiAgICRnaXRfZGlyCitPdXQgZGlyOiAgICRvdXRfZGlyCistLS0tLQorUnVubmluZyBHTlUgTWFrZSB0byBmaWd1cmUgb3V0IGJ1aWxkIHN0cnVjdHVyZS4uLgorRU9NCisKKyMgUGlwZSBhIG1ha2UgLS1kcnktcnVuIGludG8gYSB2YXJpYWJsZSwgaWYgbm90IGFscmVhZHkgbG9hZGVkIGZyb20gZmlsZQorQG1ha2VkcnkgPSBgY2QgJGdpdF9kaXIgJiYgbWFrZSAtbiBNU1ZDPTEgVj0xIDI+L2Rldi9udWxsYCBpZiAhQG1ha2Vkcnk7CisKKyMgUGFyc2UgdGhlIG1ha2Ugb3V0cHV0IGludG8gdXNhYmxlIGluZm8KK3BhcnNlTWFrZU91dHB1dCgpOworCisjIEZpbmFsbHksIGFzayB0aGUgZ2VuZXJhdG9yIHRvIHN0YXJ0IGdlbmVyYXRpbmcuLgorR2VuZXJhdG9yczo6Z2VuZXJhdGUoJGdlbiwgJGdpdF9kaXIsICRvdXRfZGlyLCAkcmVsX2RpciwgJWJ1aWxkX3N0cnVjdHVyZSk7CisKKyMgbWFpbiBmbG93IGVuZHMgaGVyZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworIyAxKSBwYXRoOiAvZm9vL2Jhci9iYXogICAgICAgIDIpIHBhdGg6IC9mb28vYmFyL2JheiAgIDMpIHBhdGg6IC9mb28vYmFyL2JhegorIyAgICBiYXNlOiAvZm9vL2Jhci9iYXovdGVtcCAgICAgIGJhc2U6IC9mb28vYmFyICAgICAgICAgIGJhc2U6IC90bXAKKyMgICAgcmVsOiAgLi4gICAgICAgICAgICAgICAgICAgICByZWw6ICBiYXogICAgICAgICAgICAgICByZWw6ICAuLi9mb28vYmFyL2Jhegorc3ViIG1ha2VPdXRSZWwyR2l0Cit7CisgICAgbXkgKCRwYXRoLCAkYmFzZSkgPSBAXzsKKyAgICBteSAkcmVsOworICAgIGlmICgiJHBhdGgiIGVxICIkYmFzZSIpIHsKKyAgICAgICAgcmV0dXJuICIuIjsKKyAgICB9IGVsc2lmICgkYmFzZSA9fiAvXiRwYXRoLykgeworICAgICAgICAjIGNhc2UgMQorICAgICAgICBteSAkdG1wID0gJGJhc2U7CisgICAgICAgICR0bXAgPX4gcy9eJHBhdGgvLzsKKyAgICAgICAgZm9yZWFjaCAoc3BsaXQoJy8nLCAkdG1wKSkgeworICAgICAgICAgICAgJHJlbCAuPSAiLi4vIiBpZiAoIiRfIiBuZSAiIik7CisgICAgICAgIH0KKyAgICB9IGVsc2lmICgkcGF0aCA9fiAvXiRiYXNlLykgeworICAgICAgICAjIGNhc2UgMgorICAgICAgICAkcmVsID0gJHBhdGg7CisgICAgICAgICRyZWwgPX4gcy9eJGJhc2UvLzsKKyAgICAgICAgJHJlbCA9ICIuLyRyZWwiOworICAgIH0gZWxzZSB7CisgICAgICAgIG15ICR0bXAgPSAkYmFzZTsKKyAgICAgICAgZm9yZWFjaCAoc3BsaXQoJy8nLCAkdG1wKSkgeworICAgICAgICAgICAgJHJlbCAuPSAiLi4vIiBpZiAoIiRfIiBuZSAiIik7CisgICAgICAgIH0KKyAgICAgICAgJHJlbCAuPSAkcGF0aDsKKyAgICB9CisgICAgJHJlbCA9fiBzL1wvXC8vXC8vZzsgIyBzaW1wbGlmeQorICAgICRyZWwgPX4gcy9cLyQvLzsgICAgICMgZG9uJ3QgZW5kIHdpdGggLworICAgIHJldHVybiAkcmVsOworfQorCitzdWIgcGFyc2VNYWtlT3V0cHV0Cit7CisgICAgcHJpbnQgIlBhcnNpbmcgR05VIE1ha2Ugb3V0cHV0IHRvIGZpZ3VyZSBvdXQgYnVpbGQgc3RydWN0dXJlLi4uXG4iOworICAgIG15ICRsaW5lID0gMDsKKyAgICB3aGlsZSAobXkgJHRleHQgPSBzaGlmdCBAbWFrZWRyeSkgeworICAgICAgICBteSAkYXRlX25leHQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICRhdGVfbmV4dCA9IDA7CisgICAgICAgICAgICAkbGluZSsrOworICAgICAgICAgICAgY2hvbXAgJHRleHQ7CisgICAgICAgICAgICBjaG9wICR0ZXh0IGlmICgkdGV4dCA9fiAvXHIkLyk7CisgICAgICAgICAgICBpZiAoJHRleHQgPX4gL1xcJC8pIHsKKyAgICAgICAgICAgICAgICAkdGV4dCA9fiBzL1xcJC8vOworICAgICAgICAgICAgICAgICR0ZXh0IC49IHNoaWZ0IEBtYWtlZHJ5OworICAgICAgICAgICAgICAgICRhdGVfbmV4dCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUoJGF0ZV9uZXh0KTsKKworICAgICAgICBpZiAoJHRleHQgPX4gL150ZXN0IC8pIHsKKyAgICAgICAgICAgICMgb3B0aW9ucyB0byB0ZXN0IChlZyAtbykgbWF5IGJlIG1pc3Rha2VuIGZvciBsaW5rZXIgb3B0aW9ucworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCR0ZXh0ID1+IC8gLWMgLykgeworICAgICAgICAgICAgIyBjb21waWxhdGlvbgorICAgICAgICAgICAgaGFuZGxlQ29tcGlsZUxpbmUoJHRleHQsICRsaW5lKTsKKworICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvIC1vIC8pIHsKKyAgICAgICAgICAgICMgbGlua2luZyBleGVjdXRhYmxlCisgICAgICAgICAgICBoYW5kbGVMaW5rTGluZSgkdGV4dCwgJGxpbmUpOworCisgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9cLm8gLyAmJiAkdGV4dCA9fiAvXC5hIC8pIHsKKyAgICAgICAgICAgICMgbGliaWZ5aW5nCisgICAgICAgICAgICBoYW5kbGVMaWJMaW5lKCR0ZXh0LCAkbGluZSk7CisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXmNwIC8pIHsKKyMgICAgICAgICAgICAjIGNvcHkgZmlsZSBhcm91bmQKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ecm0gLWYgLykgeworIyAgICAgICAgICAgICMgc2hlbGwgY29tbWFuZAorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL15tYWtlWyBcW10vKSB7CisjICAgICAgICAgICAgIyBtYWtlIG91dHB1dAorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL15lY2hvIC8pIHsKKyMgICAgICAgICAgICAjIGVjaG8gdG8gZmlsZQorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL15pZiAvKSB7CisjICAgICAgICAgICAgIyBzaGVsbCBjb25kaXRpb25hbAorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL150Y2xzaCAvKSB7CisjICAgICAgICAgICAgIyB0cmFuc2xhdGlvbiBzdHVmZgorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL151bWFzayAvKSB7CisjICAgICAgICAgICAgIyBoYW5kbGluZyBib2lsZXJwbGF0ZXMKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9cJFwoXDpcKS8pIHsKKyMgICAgICAgICAgICAjIGlnbm9yZQorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL15GTEFHUz0vKSB7CisjICAgICAgICAgICAgIyBmbGFncyBjaGVjayBmb3IgZGVwZW5kZW5jaWVzCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvXidcL3VzclwvYmluXC9wZXJsJyAtTUVycm9yIC1lLykgeworIyAgICAgICAgICAgICMgcGVybCBjb21tYW5kcyBmb3IgY29weWluZyBmaWxlcworIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gL2dlbmVyYXRlLWNtZGxpc3RcLnNoLykgeworIyAgICAgICAgICAgICMgY29tbWFuZCBmb3IgZ2VuZXJhdGluZyBsaXN0IG9mIGNvbW1hbmRzCisjCisjICAgICAgICB9IGVsc2lmICgkdGV4dCA9fiAvbmV3IGxvY2F0aW9ucyBvciBUY2wvKSB7CisjICAgICAgICAgICAgIyBjb21tYW5kIGZvciBkZXRlY3RpbmcgVGNsL1RrIGNoYW5nZXMKKyMKKyMgICAgICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9ta2RpciAtcC8pIHsKKyMgICAgICAgICAgICAjIGNvbW1hbmQgY3JlYXRpbmcgcGF0aAorIworIyAgICAgICAgfSBlbHNpZiAoJHRleHQgPX4gLzogbm8gY3VzdG9tIHRlbXBsYXRlcyB5ZXQvKSB7CisjICAgICAgICAgICAgIyB3aGF0ZXZlcgorIworIyAgICAgICAgfSBlbHNlIHsKKyMgICAgICAgICAgICBwcmludCAiVW5oYW5kbGVkIChsaW5lOiAkbGluZSk6ICR0ZXh0XG4iOworICAgICAgICB9CisgICAgfQorCisjICAgIHVzZSBEYXRhOjpEdW1wZXI7CisjICAgIHByaW50ICJQYXJzZWQgYnVpbGQgc3RydWN0dXJlOlxuIjsKKyMgICAgcHJpbnQgRHVtcGVyKCVidWlsZF9zdHJ1Y3R1cmUpOworfQorCisjIHZhcmlhYmxlcyBmb3IgdGhlIGNvbXBpbGF0aW9uIHBhcnQgb2YgZWFjaCBzdGVwCitteSAoQGRlZmluZXMsIEBpbmNwYXRocywgQGNmbGFncywgQHNvdXJjZXMpOworCitzdWIgY2xlYXJDb21waWxlU3RlcAoreworICAgIEBkZWZpbmVzID0gKCk7CisgICAgQGluY3BhdGhzID0gKCk7CisgICAgQGNmbGFncyA9ICgpOworICAgIEBzb3VyY2VzID0gKCk7Cit9CisKK3N1YiByZW1vdmVEdXBsaWNhdGVzCit7CisgICAgbXkgKCVkdXBIYXNoLCAkZW50cnkpOworICAgICVkdXBIYXNoID0gbWFwIHsgJF8sIDEgfSBAZGVmaW5lczsKKyAgICBAZGVmaW5lcyA9IGtleXMgJWR1cEhhc2g7CisKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQGluY3BhdGhzOworICAgIEBpbmNwYXRocyA9IGtleXMgJWR1cEhhc2g7CisKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQGNmbGFnczsKKyAgICBAY2ZsYWdzID0ga2V5cyAlZHVwSGFzaDsKK30KKworc3ViIGhhbmRsZUNvbXBpbGVMaW5lCit7CisgICAgbXkgKCRsaW5lLCAkbGluZW5vKSA9IEBfOworICAgIG15IEBwYXJ0cyA9IHNwbGl0KCcgJywgJGxpbmUpOworICAgIG15ICRzb3VyY2VmaWxlOworICAgIHNoaWZ0KEBwYXJ0cyk7ICMgaWdub3JlIGNtZAorICAgIHdoaWxlIChteSAkcGFydCA9IHNoaWZ0IEBwYXJ0cykgeworICAgICAgICBpZiAoIiRwYXJ0IiBlcSAiLW8iKSB7CisgICAgICAgICAgICAjIGlnbm9yZSBvYmplY3QgZmlsZQorICAgICAgICAgICAgc2hpZnQgQHBhcnRzOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItYyIpIHsKKyAgICAgICAgICAgICMgaWdub3JlIGNvbXBpbGUgZmxhZworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItYyIpIHsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14uPy1JLykgeworICAgICAgICAgICAgcHVzaChAaW5jcGF0aHMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14uPy1ELykgeworICAgICAgICAgICAgcHVzaChAZGVmaW5lcywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXi0vKSB7CisgICAgICAgICAgICBwdXNoKEBjZmxhZ3MsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKGN8Y2N8Y3BwKSQvKSB7CisgICAgICAgICAgICAkc291cmNlZmlsZSA9ICRwYXJ0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgY29tcGlsZXIgb3B0aW9uIEAgbGluZSAkbGluZW5vOiAkcGFydCI7CisgICAgICAgIH0KKyAgICB9CisgICAgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0NGTEFHUyJ9fSA9IEBjZmxhZ3M7CisgICAgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0RFRklORVMifX0gPSBAZGVmaW5lczsKKyAgICBAeyRjb21waWxlX29wdGlvbnN7IiR7c291cmNlZmlsZX1fSU5DUEFUSFMifX0gPSBAaW5jcGF0aHM7CisgICAgY2xlYXJDb21waWxlU3RlcCgpOworfQorCitzdWIgaGFuZGxlTGliTGluZQoreworICAgIG15ICgkbGluZSwgJGxpbmVubykgPSBAXzsKKyAgICBteSAoQG9iamZpbGVzLCBAbGZsYWdzLCAkbGlib3V0LCAkcGFydCk7CisgICAgIyBraWxsIGNtZCBhbmQgcm0gJ3ByZWZpeCcKKyAgICAkbGluZSA9fiBzL15ybSAtZiAuKiAmJiAuKiByY3MgLy87CisgICAgbXkgQHBhcnRzID0gc3BsaXQoJyAnLCAkbGluZSk7CisgICAgd2hpbGUgKCRwYXJ0ID0gc2hpZnQgQHBhcnRzKSB7CisgICAgICAgIGlmICgkcGFydCA9fiAvXi0vKSB7CisgICAgICAgICAgICBwdXNoKEBsZmxhZ3MsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKG98b2JqKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBvYmpmaWxlcywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4oYXxsaWIpJC8pIHsKKyAgICAgICAgICAgICRsaWJvdXQgPSAkcGFydDsKKyAgICAgICAgICAgICRsaWJvdXQgPX4gcy9cLmEkLy87CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkaWUgIlVuaGFuZGxlZCBsaWIgb3B0aW9uIEAgbGluZSAkbGluZW5vOiAkcGFydCI7CisgICAgICAgIH0KKyAgICB9CisjICAgIHByaW50ICJMaWJPdXQ6ICckbGlib3V0J1xuTEZsYWdzOiBAbGZsYWdzXG5PZmlsZXM6IEBvYmpmaWxlc1xuIjsKKyMgICAgZXhpdCgxKTsKKyAgICBmb3JlYWNoIChAb2JqZmlsZXMpIHsKKyAgICAgICAgbXkgJHNvdXJjZWZpbGUgPSAkXzsKKyAgICAgICAgJHNvdXJjZWZpbGUgPX4gcy9cLm8vLmMvOworICAgICAgICBwdXNoKEBzb3VyY2VzLCAkc291cmNlZmlsZSk7CisgICAgICAgIHB1c2goQGNmbGFncywgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0NGTEFHUyJ9fSk7CisgICAgICAgIHB1c2goQGRlZmluZXMsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9ERUZJTkVTIn19KTsKKyAgICAgICAgcHVzaChAaW5jcGF0aHMsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9JTkNQQVRIUyJ9fSk7CisgICAgfQorICAgIHJlbW92ZUR1cGxpY2F0ZXMoKTsKKworICAgIHB1c2goQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19LCAkbGlib3V0KTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9In19ID0gKCJfREVGSU5FUyIsICJfSU5DTFVERVMiLCAiX0NGTEFHUyIsICJfU09VUkNFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX09CSkVDVFMiKTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0RFRklORVMifX0gPSBAZGVmaW5lczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0lOQ0xVREVTIn19ID0gQGluY3BhdGhzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fQ0ZMQUdTIn19ID0gQGNmbGFnczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0xGTEFHUyJ9fSA9IEBsZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9TT1VSQ0VTIn19ID0gQHNvdXJjZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJMSUJTXyR7bGlib3V0fV9PQkpFQ1RTIn19ID0gQG9iamZpbGVzOworICAgIGNsZWFyQ29tcGlsZVN0ZXAoKTsKK30KKworc3ViIGhhbmRsZUxpbmtMaW5lCit7CisgICAgbXkgKCRsaW5lLCAkbGluZW5vKSA9IEBfOworICAgIG15IChAb2JqZmlsZXMsIEBsZmxhZ3MsIEBsaWJzLCAkYXBwb3V0LCAkcGFydCk7CisgICAgbXkgQHBhcnRzID0gc3BsaXQoJyAnLCAkbGluZSk7CisgICAgc2hpZnQoQHBhcnRzKTsgIyBpZ25vcmUgY21kCisgICAgd2hpbGUgKCRwYXJ0ID0gc2hpZnQgQHBhcnRzKSB7CisgICAgICAgIGlmICgkcGFydCA9fiAvXi1JR05PUkUvKSB7CisgICAgICAgICAgICBwdXNoKEBsZmxhZ3MsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14tW0dSSU1ET10vKSB7CisgICAgICAgICAgICAjIGVhdCBjb21waWxlciBmbGFncworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbyIpIHsKKyAgICAgICAgICAgICRhcHBvdXQgPSBzaGlmdCBAcGFydHM7CisgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1seiIpIHsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICJ6bGliLmxpYiIpOworCX0gZWxzaWYgKCIkcGFydCIgZXEgIi1sY3J5cHRvIikgeworICAgICAgICAgICAgcHVzaChAbGlicywgImxpYmVheTMyLmxpYiIpOworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbHNzbCIpIHsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICJzc2xlYXkzMi5saWIiKTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL14tLykgeworICAgICAgICAgICAgcHVzaChAbGZsYWdzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihhfGxpYikkLykgeworICAgICAgICAgICAgJHBhcnQgPX4gcy9cLmEkLy5saWIvOworICAgICAgICAgICAgcHVzaChAbGlicywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4ob3xvYmopJC8pIHsKKyAgICAgICAgICAgIHB1c2goQG9iamZpbGVzLCAkcGFydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkaWUgIlVuaGFuZGxlZCBsaWIgb3B0aW9uIEAgbGluZSAkbGluZW5vOiAkcGFydCI7CisgICAgICAgIH0KKyAgICB9CisjICAgIHByaW50ICJBcHBPdXQ6ICckYXBwb3V0J1xuTEZsYWdzOiBAbGZsYWdzXG5MaWJzICA6IEBsaWJzXG5PZmlsZXM6IEBvYmpmaWxlc1xuIjsKKyMgICAgZXhpdCgxKTsKKyAgICBmb3JlYWNoIChAb2JqZmlsZXMpIHsKKyAgICAgICAgbXkgJHNvdXJjZWZpbGUgPSAkXzsKKyAgICAgICAgJHNvdXJjZWZpbGUgPX4gcy9cLm8vLmMvOworICAgICAgICBwdXNoKEBzb3VyY2VzLCAkc291cmNlZmlsZSk7CisgICAgICAgIHB1c2goQGNmbGFncywgQHskY29tcGlsZV9vcHRpb25zeyIke3NvdXJjZWZpbGV9X0NGTEFHUyJ9fSk7CisgICAgICAgIHB1c2goQGRlZmluZXMsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9ERUZJTkVTIn19KTsKKyAgICAgICAgcHVzaChAaW5jcGF0aHMsIEB7JGNvbXBpbGVfb3B0aW9uc3siJHtzb3VyY2VmaWxlfV9JTkNQQVRIUyJ9fSk7CisgICAgfQorICAgIHJlbW92ZUR1cGxpY2F0ZXMoKTsKKworICAgIHJlbW92ZUR1cGxpY2F0ZXMoKTsKKyAgICBwdXNoKEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQUyJ9fSwgJGFwcG91dCk7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fSJ9fSA9ICgiX0RFRklORVMiLCAiX0lOQ0xVREVTIiwgIl9DRkxBR1MiLCAiX0xGTEFHUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX1NPVVJDRVMiLCAiX09CSkVDVFMiLCAiX0xJQlMiKTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0RFRklORVMifX0gPSBAZGVmaW5lczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0lOQ0xVREVTIn19ID0gQGluY3BhdGhzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fQ0ZMQUdTIn19ID0gQGNmbGFnczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X0xGTEFHUyJ9fSA9IEBsZmxhZ3M7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9TT1VSQ0VTIn19ID0gQHNvdXJjZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9PQkpFQ1RTIn19ID0gQG9iamZpbGVzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fTElCUyJ9fSA9IEBsaWJzOworICAgIGNsZWFyQ29tcGlsZVN0ZXAoKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2dlbmVyYXRlIGIvY29udHJpYi9idWlsZHN5c3RlbXMvZ2VuZXJhdGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmMxMGYyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2dlbmVyYXRlCkBAIC0wLDAgKzEsMjkgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHZW5lcmF0ZSBidWlsZHN5c3RlbSBmaWxlcworIworIyBUaGlzIHNjcmlwdCBnZW5lcmF0ZSBidWlsZHN5c3RlbSBmaWxlcyBiYXNlZCBvbiB0aGUgb3V0cHV0IG9mIGEKKyMgR05VIE1ha2UgLS1kcnktcnVuLCBlbmFibGluZyBXaW5kb3dzIHVzZXJzIHRvIGRldmVsb3AgR2l0IHdpdGggdGhlaXIKKyMgdHJ1c3RlZCBJREUgd2l0aCBuYXRpdmUgcHJvamVjdHMuCisjCisjIE5vdGU6CisjIEl0IGlzIG5vdCBtZWFudCBhcyAqdGhlKiB3YXkgb2YgYnVpbGRpbmcgR2l0IHdpdGggTVNWQywgYnV0IG1lcmVseSBhCisjIGNvbnZlbmllbmNlLiBUaGUgY29ycmVjdCB3YXkgb2YgYnVpbGRpbmcgR2l0IHdpdGggTVNWQyBpcyB0byB1c2UgdGhlCisjIEdOVSBNYWtlIHRvb2wgdG8gYnVpbGQgd2l0aCB0aGUgbWFpbnRhaW5lZCBNYWtlZmlsZSBpbiB0aGUgcm9vdCBvZgorIyB0aGUgcHJvamVjdC4gSWYgeW91IGhhdmUgdGhlIG1zeXNnaXQgZW52aXJvbm1lbnQgaW5zdGFsbGVkIGFuZAorIyBhdmFpbGFibGUgaW4geW91ciBjdXJyZW50IGNvbnNvbGUsIHRvZ2V0aGVyIHdpdGggdGhlIFZpc3VhbCBTdHVkaW8KKyMgZW52aXJvbm1lbnQgeW91IHdpc2ggdG8gYnVpbGQgZm9yLCBhbGwgeW91IGhhdmUgdG8gZG8gaXMgcnVuIHRoZQorIyBjb21tYW5kOgorIyAgICAgbWFrZSBNU1ZDPTEKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IE1hcml1cyBTdG9ybS1PbHNlbiA8bXN0b3Jtb0BnbWFpbC5jb20+CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCit1c2Ugc3RyaWN0OwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEN3ZDsKKworbXkgJGdpdF9kaXIgPSBnZXRjd2QoKTsKKyRnaXRfZGlyID1+IHM9XFw9Lz1nOworJGdpdF9kaXIgPSBkaXJuYW1lKCRnaXRfZGlyKSB3aGlsZSAoIS1lICIkZ2l0X2Rpci9naXQuYyIgJiYgIiRnaXRfZGlyIiBuZSAiIik7CitkaWUgIkNvdWxkbid0IGZpbmQgR2l0IHJlcG8iIGlmICgiJGdpdF9kaXIiIGVxICIiKTsKK2V4ZWMgam9pbigiICIsICgiUEVSTDVMSUI9JHtnaXRfZGlyfS9jb250cmliL2J1aWxkc3lzdGVtcyAke2dpdF9kaXJ9L2NvbnRyaWIvYnVpbGRzeXN0ZW1zL2VuZ2luZS5wbCIsIEBBUkdWKSk7CmRpZmYgLS1naXQgYS9jb250cmliL2J1aWxkc3lzdGVtcy9wYXJzZS5wbCBiL2NvbnRyaWIvYnVpbGRzeXN0ZW1zL3BhcnNlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM5NjU2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2J1aWxkc3lzdGVtcy9wYXJzZS5wbApAQCAtMCwwICsxLDIyOCBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERvIG5vdCBjYWxsIHRoaXMgc2NyaXB0IGRpcmVjdGx5IQorIworIyBUaGUgZ2VuZXJhdGUgc2NyaXB0IGVuc3VyZXMgdGhhdCBASU5DIGlzIGNvcnJlY3QgYmVmb3JlIHRoZSBlbmdpbmUKKyMgaXMgZXhlY3V0ZWQuCisjCisjIENvcHlyaWdodCAoQykgMjAwOSBNYXJpdXMgU3Rvcm0tT2xzZW4gPG1zdG9ybW9AZ21haWwuY29tPgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBDd2Q7CisKK215ICRmaWxlID0gJEFSR1ZbMF07CitkaWUgIk5vIGZpbGUgcHJvdmlkZWQhIiBpZiAhZGVmaW5lZCAkZmlsZTsKKworbXkgKCRjZmxhZ3MsICR0YXJnZXQsICR0eXBlLCAkbGluZSk7CisKK29wZW4oRiwgIjwkZmlsZSIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRmaWxlIjsKK215IEBkYXRhID0gPEY+OworY2xvc2UoRik7CisKK3doaWxlIChteSAkdGV4dCA9IHNoaWZ0IEBkYXRhKSB7CisgICAgbXkgJGF0ZV9uZXh0OworICAgIGRvIHsKKyAgICAgICAgJGF0ZV9uZXh0ID0gMDsKKyAgICAgICAgJGxpbmUrKzsKKyAgICAgICAgY2hvbXAgJHRleHQ7CisgICAgICAgIGNob3AgJHRleHQgaWYgKCR0ZXh0ID1+IC9cciQvKTsKKyAgICAgICAgaWYgKCR0ZXh0ID1+IC9cXCQvKSB7CisgICAgICAgICAgICAkdGV4dCA9fiBzL1xcJC8vOworICAgICAgICAgICAgJHRleHQgLj0gc2hpZnQgQGRhdGE7CisgICAgICAgICAgICAkYXRlX25leHQgPSAxOworICAgICAgICB9CisgICAgfSB3aGlsZSgkYXRlX25leHQpOworCisgICAgaWYoJHRleHQgPX4gLyAtYyAvKSB7CisgICAgICAgICMgY29tcGlsYXRpb24KKyAgICAgICAgaGFuZGxlQ29tcGlsZUxpbmUoJHRleHQsICRsaW5lKTsKKworICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC8gLW8gLykgeworICAgICAgICAjIGxpbmtpbmcgZXhlY3V0YWJsZQorICAgICAgICBoYW5kbGVMaW5rTGluZSgkdGV4dCwgJGxpbmUpOworCisgICAgfSBlbHNpZiAoJHRleHQgPX4gL1wubyAvICYmICR0ZXh0ID1+IC9cLmEgLykgeworICAgICAgICAjIGxpYmlmeWluZworICAgICAgICBoYW5kbGVMaWJMaW5lKCR0ZXh0LCAkbGluZSk7CisKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL15jcCAvKSB7CisjICAgICAgICAjIGNvcHkgZmlsZSBhcm91bmQKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL15ybSAtZiAvKSB7CisjICAgICAgICAjIHNoZWxsIGNvbW1hbmQKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL15tYWtlWyBcW10vKSB7CisjICAgICAgICAjIG1ha2Ugb3V0cHV0CisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9eZWNobyAvKSB7CisjICAgICAgICAjIGVjaG8gdG8gZmlsZQorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXmlmIC8pIHsKKyMgICAgICAgICMgc2hlbGwgY29uZGl0aW9uYWwKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL150Y2xzaCAvKSB7CisjICAgICAgICAjIHRyYW5zbGF0aW9uIHN0dWZmCisjCisjICAgIH0gZWxzaWYgKCR0ZXh0ID1+IC9edW1hc2sgLykgeworIyAgICAgICAgIyBoYW5kbGluZyBib2lsZXJwbGF0ZXMKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL1wkXChcOlwpLykgeworIyAgICAgICAgIyBpZ25vcmUKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL15GTEFHUz0vKSB7CisjICAgICAgICAjIGZsYWdzIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMKKyMKKyMgICAgfSBlbHNpZiAoJHRleHQgPX4gL14nXC91c3JcL2JpblwvcGVybCcgLU1FcnJvciAtZS8pIHsKKyMgICAgICAgICMgcGVybCBjb21tYW5kcyBmb3IgY29weWluZyBmaWxlcworIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvZ2VuZXJhdGUtY21kbGlzdFwuc2gvKSB7CisjICAgICAgICAjIGNvbW1hbmQgZm9yIGdlbmVyYXRpbmcgbGlzdCBvZiBjb21tYW5kcworIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvXnRlc3QgLyAmJiAkdGV4dCA9fiAvfHwgcm0gLWYgLykgeworIyAgICAgICAgIyBjb21tYW5kcyByZW1vdmluZyBleGVjdXRhYmxlcywgaWYgdGhleSBleGlzdAorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvbmV3IGxvY2F0aW9ucyBvciBUY2wvKSB7CisjICAgICAgICAjIGNvbW1hbmQgZm9yIGRldGVjdGluZyBUY2wvVGsgY2hhbmdlcworIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvbWtkaXIgLXAvKSB7CisjICAgICAgICAjIGNvbW1hbmQgY3JlYXRpbmcgcGF0aAorIworIyAgICB9IGVsc2lmICgkdGV4dCA9fiAvOiBubyBjdXN0b20gdGVtcGxhdGVzIHlldC8pIHsKKyMgICAgICAgICMgd2hhdGV2ZXIKKworICAgIH0gZWxzZSB7CisjICAgICAgICBwcmludCAiVW5oYW5kbGVkIChsaW5lOiAkbGluZSk6ICR0ZXh0XG4iOworICAgIH0KK30KK2Nsb3NlKEYpOworCisjIHVzZSBEYXRhOjpEdW1wZXI7CisjIHByaW50ICJQYXJzZWQgYnVpbGQgc3RydWN0dXJlOlxuIjsKKyMgcHJpbnQgRHVtcGVyKCVidWlsZF9zdHJ1Y3R1cmUpOworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRnVuY3Rpb25zIHVuZGVyIGhlcmUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbXkgKCVidWlsZF9zdHJ1Y3R1cmUsIEBkZWZpbmVzLCBAaW5jcGF0aHMsIEBjZmxhZ3MsIEBzb3VyY2VzKTsKKworc3ViIGNsZWFyQ29tcGlsZVN0ZXAKK3sKKyAgICBAZGVmaW5lcyA9ICgpOworICAgIEBpbmNwYXRocyA9ICgpOworICAgIEBjZmxhZ3MgPSAoKTsKKyAgICBAc291cmNlcyA9ICgpOworfQorCitzdWIgcmVtb3ZlRHVwbGljYXRlcworeworICAgIG15ICglZHVwSGFzaCwgJGVudHJ5KTsKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQGRlZmluZXM7CisgICAgQGRlZmluZXMgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBpbmNwYXRoczsKKyAgICBAaW5jcGF0aHMgPSBrZXlzICVkdXBIYXNoOworCisgICAgJWR1cEhhc2ggPSBtYXAgeyAkXywgMSB9IEBjZmxhZ3M7CisgICAgQGNmbGFncyA9IGtleXMgJWR1cEhhc2g7CisKKyAgICAlZHVwSGFzaCA9IG1hcCB7ICRfLCAxIH0gQHNvdXJjZXM7CisgICAgQHNvdXJjZXMgPSBrZXlzICVkdXBIYXNoOworfQorCitzdWIgaGFuZGxlQ29tcGlsZUxpbmUKK3sKKyAgICBteSAoJGxpbmUsICRsaW5lbm8pID0gQF87CisgICAgbXkgQHBhcnRzID0gc3BsaXQoJyAnLCAkbGluZSk7CisgICAgc2hpZnQoQHBhcnRzKTsgIyBpZ25vcmUgY21kCisgICAgd2hpbGUgKG15ICRwYXJ0ID0gc2hpZnQgQHBhcnRzKSB7CisgICAgICAgIGlmICgiJHBhcnQiIGVxICItbyIpIHsKKyAgICAgICAgICAgICMgaWdub3JlIG9iamVjdCBmaWxlCisgICAgICAgICAgICBzaGlmdCBAcGFydHM7CisgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1jIikgeworICAgICAgICAgICAgIyBpZ25vcmUgY29tcGlsZSBmbGFnCisgICAgICAgIH0gZWxzaWYgKCIkcGFydCIgZXEgIi1jIikgeworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXi4/LUkvKSB7CisgICAgICAgICAgICBwdXNoKEBpbmNwYXRocywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXi4/LUQvKSB7CisgICAgICAgICAgICBwdXNoKEBkZWZpbmVzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLS8pIHsKKyAgICAgICAgICAgIHB1c2goQGNmbGFncywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4oY3xjY3xjcHApJC8pIHsKKyAgICAgICAgICAgIHB1c2goQHNvdXJjZXMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRpZSAiVW5oYW5kbGVkIGNvbXBpbGVyIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorICAgICNwcmludCAiU291cmNlczogQHNvdXJjZXNcbkNGbGFnczogQGNmbGFnc1xuRGVmaW5lOiBAZGVmaW5lc1xuSW5jcGF0OiBAaW5jcGF0aHNcbiI7CisgICAgI2V4aXQoMSk7Cit9CisKK3N1YiBoYW5kbGVMaWJMaW5lCit7CisgICAgbXkgKCRsaW5lLCAkbGluZW5vKSA9IEBfOworICAgIG15IChAb2JqZmlsZXMsIEBsZmxhZ3MsICRsaWJvdXQsICRwYXJ0KTsKKyAgICAjIGtpbGwgY21kIGFuZCBybSAncHJlZml4JworICAgICRsaW5lID1+IHMvXnJtIC1mIC4qICYmIC4qIHJjcyAvLzsKKyAgICBteSBAcGFydHMgPSBzcGxpdCgnICcsICRsaW5lKTsKKyAgICB3aGlsZSAoJHBhcnQgPSBzaGlmdCBAcGFydHMpIHsKKyAgICAgICAgaWYgKCRwYXJ0ID1+IC9eLS8pIHsKKyAgICAgICAgICAgIHB1c2goQGxmbGFncywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4ob3xvYmopJC8pIHsKKyAgICAgICAgICAgIHB1c2goQG9iamZpbGVzLCAkcGFydCk7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9cLihhfGxpYikkLykgeworICAgICAgICAgICAgJGxpYm91dCA9ICRwYXJ0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgbGliIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorICAgICNwcmludCAiTGliT3V0OiAnJGxpYm91dCdcbkxGbGFnczogQGxmbGFnc1xuT2ZpbGVzOiBAb2JqZmlsZXNcbiI7CisgICAgI2V4aXQoMSk7CisgICAgcmVtb3ZlRHVwbGljYXRlcygpOworICAgIHB1c2goQHskYnVpbGRfc3RydWN0dXJleyJMSUJTIn19LCAkbGlib3V0KTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9In19ID0gKCJfREVGSU5FUyIsICJfSU5DTFVERVMiLCAiX0NGTEFHUyIsICJfU09VUkNFUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX09CSkVDVFMiKTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0RFRklORVMifX0gPSBAZGVmaW5lczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X0lOQ0xVREVTIn19ID0gQGluY3BhdGhzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiTElCU18ke2xpYm91dH1fQ0ZMQUdTIn19ID0gQGNmbGFnczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X1NPVVJDRVMifX0gPSBAc291cmNlczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkxJQlNfJHtsaWJvdXR9X09CSkVDVFMifX0gPSBAb2JqZmlsZXM7CisgICAgY2xlYXJDb21waWxlU3RlcCgpOworfQorCitzdWIgaGFuZGxlTGlua0xpbmUKK3sKKyAgICBteSAoJGxpbmUsICRsaW5lbm8pID0gQF87CisgICAgbXkgKEBvYmpmaWxlcywgQGxmbGFncywgQGxpYnMsICRhcHBvdXQsICRwYXJ0KTsKKyAgICBteSBAcGFydHMgPSBzcGxpdCgnICcsICRsaW5lKTsKKyAgICBzaGlmdChAcGFydHMpOyAjIGlnbm9yZSBjbWQKKyAgICB3aGlsZSAoJHBhcnQgPSBzaGlmdCBAcGFydHMpIHsKKyAgICAgICAgaWYgKCRwYXJ0ID1+IC9eLVtHUklET10vKSB7CisgICAgICAgICAgICAjIGVhdCBjb21waWxlciBmbGFncworICAgICAgICB9IGVsc2lmICgiJHBhcnQiIGVxICItbyIpIHsKKyAgICAgICAgICAgICRhcHBvdXQgPSBzaGlmdCBAcGFydHM7CisgICAgICAgIH0gZWxzaWYgKCRwYXJ0ID1+IC9eLS8pIHsKKyAgICAgICAgICAgIHB1c2goQGxmbGFncywgJHBhcnQpOworICAgICAgICB9IGVsc2lmICgkcGFydCA9fiAvXC4oYXxsaWIpJC8pIHsKKyAgICAgICAgICAgIHB1c2goQGxpYnMsICRwYXJ0KTsKKyAgICAgICAgfSBlbHNpZiAoJHBhcnQgPX4gL1wuKG98b2JqKSQvKSB7CisgICAgICAgICAgICBwdXNoKEBvYmpmaWxlcywgJHBhcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGllICJVbmhhbmRsZWQgbGliIG9wdGlvbiBAIGxpbmUgJGxpbmVubzogJHBhcnQiOworICAgICAgICB9CisgICAgfQorICAgICNwcmludCAiQXBwT3V0OiAnJGFwcG91dCdcbkxGbGFnczogQGxmbGFnc1xuTGlicyAgOiBAbGlic1xuT2ZpbGVzOiBAb2JqZmlsZXNcbiI7CisgICAgI2V4aXQoMSk7CisgICAgcmVtb3ZlRHVwbGljYXRlcygpOworICAgIHB1c2goQHskYnVpbGRfc3RydWN0dXJleyJBUFBTIn19LCAkYXBwb3V0KTsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9In19ID0gKCJfREVGSU5FUyIsICJfSU5DTFVERVMiLCAiX0NGTEFHUyIsICJfTEZMQUdTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfU09VUkNFUyIsICJfT0JKRUNUUyIsICJfTElCUyIpOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fREVGSU5FUyJ9fSA9IEBkZWZpbmVzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fSU5DTFVERVMifX0gPSBAaW5jcGF0aHM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9DRkxBR1MifX0gPSBAY2ZsYWdzOworICAgIEB7JGJ1aWxkX3N0cnVjdHVyZXsiQVBQU18ke2FwcG91dH1fTEZMQUdTIn19ID0gQGxmbGFnczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X1NPVVJDRVMifX0gPSBAc291cmNlczsKKyAgICBAeyRidWlsZF9zdHJ1Y3R1cmV7IkFQUFNfJHthcHBvdXR9X09CSkVDVFMifX0gPSBAb2JqZmlsZXM7CisgICAgQHskYnVpbGRfc3RydWN0dXJleyJBUFBTXyR7YXBwb3V0fV9MSUJTIn19ID0gQGxpYnM7CisgICAgY2xlYXJDb21waWxlU3RlcCgpOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2ggYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODJjYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2gKQEAgLTAsMCArMSwyNzQyIEBACisjIGJhc2gvenNoIGNvbXBsZXRpb24gc3VwcG9ydCBmb3IgY29yZSBHaXQuCisjCisjIENvcHlyaWdodCAoQykgMjAwNiwyMDA3IFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KKyMgQ29uY2VwdHVhbGx5IGJhc2VkIG9uIGdpdGNvbXBsZXRpb24gKGh0dHA6Ly9naXR3ZWIuaGF3YWdhLm9yZy51ay8pLgorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4wLgorIworIyBUaGUgY29udGFpbmVkIGNvbXBsZXRpb24gcm91dGluZXMgcHJvdmlkZSBzdXBwb3J0IGZvciBjb21wbGV0aW5nOgorIworIyAgICAqKSBsb2NhbCBhbmQgcmVtb3RlIGJyYW5jaCBuYW1lcworIyAgICAqKSBsb2NhbCBhbmQgcmVtb3RlIHRhZyBuYW1lcworIyAgICAqKSAuZ2l0L3JlbW90ZXMgZmlsZSBuYW1lcworIyAgICAqKSBnaXQgJ3N1YmNvbW1hbmRzJworIyAgICAqKSB0cmVlIHBhdGhzIHdpdGhpbiAncmVmOnBhdGgvdG8vZmlsZScgZXhwcmVzc2lvbnMKKyMgICAgKikgZmlsZSBwYXRocyB3aXRoaW4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXgKKyMgICAgKikgY29tbW9uIC0tbG9uZy1vcHRpb25zCisjCisjIFRvIHVzZSB0aGVzZSByb3V0aW5lczoKKyMKKyMgICAgMSkgQ29weSB0aGlzIGZpbGUgdG8gc29tZXdoZXJlIChlLmcuIH4vLmdpdC1jb21wbGV0aW9uLmJhc2gpLgorIyAgICAyKSBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgLmJhc2hyYy8uenNocmM6CisjICAgICAgICBzb3VyY2Ugfi8uZ2l0LWNvbXBsZXRpb24uYmFzaAorIyAgICAzKSBDb25zaWRlciBjaGFuZ2luZyB5b3VyIFBTMSB0byBhbHNvIHNob3cgdGhlIGN1cnJlbnQgYnJhbmNoLAorIyAgICAgICBzZWUgZ2l0LXByb21wdC5zaCBmb3IgZGV0YWlscy4KKyMKKyMgSWYgeW91IHVzZSBjb21wbGV4IGFsaWFzZXMgb2YgZm9ybSAnIWYoKSB7IC4uLiB9OyBmJywgeW91IGNhbiB1c2UgdGhlIG51bGwKKyMgY29tbWFuZCAnOicgYXMgdGhlIGZpcnN0IGNvbW1hbmQgaW4gdGhlIGZ1bmN0aW9uIGJvZHkgdG8gZGVjbGFyZSB0aGUgZGVzaXJlZAorIyBjb21wbGV0aW9uIHN0eWxlLiAgRm9yIGV4YW1wbGUgJyFmKCkgeyA6IGdpdCBjb21taXQgOyAuLi4gfTsgZicgd2lsbAorIyB0ZWxsIHRoZSBjb21wbGV0aW9uIHRvIHVzZSBjb21taXQgY29tcGxldGlvbi4gIFRoaXMgYWxzbyB3b3JrcyB3aXRoIGFsaWFzZXMKKyMgb2YgZm9ybSAiIXNoIC1jICcuLi4nIi4gIEZvciBleGFtcGxlLCAiIXNoIC1jICc6IGdpdCBjb21taXQgOyAuLi4gJyIuCisKK2Nhc2UgIiRDT01QX1dPUkRCUkVBS1MiIGluCisqOiopIDogZ3JlYXQgOzsKKyopICAgQ09NUF9XT1JEQlJFQUtTPSIkQ09NUF9XT1JEQlJFQUtTOiIKK2VzYWMKKworIyBfX2dpdGRpciBhY2NlcHRzIDAgb3IgMSBhcmd1bWVudHMgKGkuZS4sIGxvY2F0aW9uKQorIyByZXR1cm5zIGxvY2F0aW9uIG9mIC5naXQgcmVwbworX19naXRkaXIgKCkKK3sKKwlpZiBbIC16ICIkezEtfSIgXTsgdGhlbgorCQlpZiBbIC1uICIke19fZ2l0X2Rpci19IiBdOyB0aGVuCisJCQllY2hvICIkX19naXRfZGlyIgorCQllbGlmIFsgLW4gIiR7R0lUX0RJUi19IiBdOyB0aGVuCisJCQl0ZXN0IC1kICIke0dJVF9ESVItfSIgfHwgcmV0dXJuIDEKKwkJCWVjaG8gIiRHSVRfRElSIgorCQllbGlmIFsgLWQgLmdpdCBdOyB0aGVuCisJCQllY2hvIC5naXQKKwkJZWxzZQorCQkJZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIgMj4vZGV2L251bGwKKwkJZmkKKwllbGlmIFsgLWQgIiQxLy5naXQiIF07IHRoZW4KKwkJZWNobyAiJDEvLmdpdCIKKwllbHNlCisJCWVjaG8gIiQxIgorCWZpCit9CisKKyMgVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBjb2RlIGZyb206CisjCisjICAgYmFzaF9jb21wbGV0aW9uIC0gcHJvZ3JhbW1hYmxlIGNvbXBsZXRpb24gZnVuY3Rpb25zIGZvciBiYXNoIDMuMisKKyMKKyMgICBDb3B5cmlnaHQgwqkgMjAwNi0yMDA4LCBJYW4gTWFjZG9uYWxkIDxpYW5AY2FsaWJhbi5vcmc+CisjICAgICAgICAgICAgIMKpIDIwMDktMjAxMCwgQmFzaCBDb21wbGV0aW9uIE1haW50YWluZXJzCisjICAgICAgICAgICAgICAgICAgICAgPGJhc2gtY29tcGxldGlvbi1kZXZlbEBsaXN0cy5hbGlvdGguZGViaWFuLm9yZz4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyAgIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjICAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc29mdHdhcmUgY2FuIGJlIG9idGFpbmVkIGhlcmU6CisjCisjICAgaHR0cDovL2Jhc2gtY29tcGxldGlvbi5hbGlvdGguZGViaWFuLm9yZy8KKyMKKyMgICBSRUxFQVNFOiAyLngKKworIyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBhIHRva2VuaXplZCBsaXN0IG9mIHdvcmRzCisjIG9uIHRoZSBjb21tYW5kIGxpbmU6CisjCisjCV9fZ2l0X3JlYXNzZW1ibGVfY29tcF93b3Jkc19ieV9yZWYgJz06JworIwlpZiB0ZXN0ICIke3dvcmRzX1tjd29yZF8tMV19IiA9IC13CisjCXRoZW4KKyMJCS4uLgorIwlmaQorIworIyBUaGUgYXJndW1lbnQgc2hvdWxkIGJlIGEgY29sbGVjdGlvbiBvZiBjaGFyYWN0ZXJzIGZyb20gdGhlIGxpc3Qgb2YKKyMgd29yZCBjb21wbGV0aW9uIHNlcGFyYXRvcnMgKENPTVBfV09SREJSRUFLUykgdG8gdHJlYXQgYXMgb3JkaW5hcnkKKyMgY2hhcmFjdGVycy4KKyMKKyMgVGhpcyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gZ29pbmcgYmFjayBpbiB0aW1lIGFuZCBzZXR0aW5nCisjIENPTVBfV09SREJSRUFLUyB0byBleGNsdWRlIHRob3NlIGNoYXJhY3RlcnMuICBUaGUgaW50ZW50IGlzIHRvCisjIG1ha2Ugb3B0aW9uIHR5cGVzIGxpa2UgLS1kYXRlPTx0eXBlPiBhbmQgPHJldj46PHBhdGg+IGVhc3kgdG8KKyMgcmVjb2duaXplIGJ5IHRyZWF0aW5nIGVhY2ggc2hlbGwgd29yZCBhcyBhIHNpbmdsZSB0b2tlbi4KKyMKKyMgSXQgaXMgYmVzdCBub3QgdG8gc2V0IENPTVBfV09SREJSRUFLUyBkaXJlY3RseSBiZWNhdXNlIHRoZSB2YWx1ZSBpcworIyBzaGFyZWQgd2l0aCBvdGhlciBjb21wbGV0aW9uIHNjcmlwdHMuICBCeSB0aGUgdGltZSB0aGUgY29tcGxldGlvbgorIyBmdW5jdGlvbiBnZXRzIGNhbGxlZCwgQ09NUF9XT1JEUyBoYXMgYWxyZWFkeSBiZWVuIHBvcHVsYXRlZCBzbyBsb2NhbAorIyBjaGFuZ2VzIHRvIENPTVBfV09SREJSRUFLUyBoYXZlIG5vIGVmZmVjdC4KKyMKKyMgT3V0cHV0OiB3b3Jkc18sIGN3b3JkXywgY3VyXy4KKworX19naXRfcmVhc3NlbWJsZV9jb21wX3dvcmRzX2J5X3JlZigpCit7CisJbG9jYWwgZXhjbHVkZSBpIGogZmlyc3QKKwkjIFdoaWNoIHdvcmQgc2VwYXJhdG9ycyB0byBleGNsdWRlPworCWV4Y2x1ZGU9IiR7MS8vW14kQ09NUF9XT1JEQlJFQUtTXX0iCisJY3dvcmRfPSRDT01QX0NXT1JECisJaWYgWyAteiAiJGV4Y2x1ZGUiIF07IHRoZW4KKwkJd29yZHNfPSgiJHtDT01QX1dPUkRTW0BdfSIpCisJCXJldHVybgorCWZpCisJIyBMaXN0IG9mIHdvcmQgY29tcGxldGlvbiBzZXBhcmF0b3JzIGhhcyBzaHJ1bms7CisJIyByZS1hc3NlbWJsZSB3b3JkcyB0byBjb21wbGV0ZS4KKwlmb3IgKChpPTAsIGo9MDsgaSA8ICR7I0NPTVBfV09SRFNbQF19OyBpKyssIGorKykpOyBkbworCQkjIEFwcGVuZCBlYWNoIG5vbmVtcHR5IHdvcmQgY29uc2lzdGluZyBvZiBqdXN0CisJCSMgd29yZCBzZXBhcmF0b3IgY2hhcmFjdGVycyB0byB0aGUgY3VycmVudCB3b3JkLgorCQlmaXJzdD10CisJCXdoaWxlCisJCQlbICRpIC1ndCAwIF0gJiYKKwkJCVsgLW4gIiR7Q09NUF9XT1JEU1skaV19IiBdICYmCisJCQkjIHdvcmQgY29uc2lzdHMgb2YgZXhjbHVkZWQgd29yZCBzZXBhcmF0b3JzCisJCQlbICIke0NPTVBfV09SRFNbJGldLy9bXiRleGNsdWRlXX0iID0gIiR7Q09NUF9XT1JEU1skaV19IiBdCisJCWRvCisJCQkjIEF0dGFjaCB0byB0aGUgcHJldmlvdXMgdG9rZW4sCisJCQkjIHVubGVzcyB0aGUgcHJldmlvdXMgdG9rZW4gaXMgdGhlIGNvbW1hbmQgbmFtZS4KKwkJCWlmIFsgJGogLWdlIDIgXSAmJiBbIC1uICIkZmlyc3QiIF07IHRoZW4KKwkJCQkoKGotLSkpCisJCQlmaQorCQkJZmlyc3Q9CisJCQl3b3Jkc19bJGpdPSR7d29yZHNfW2pdfSR7Q09NUF9XT1JEU1tpXX0KKwkJCWlmIFsgJGkgPSAkQ09NUF9DV09SRCBdOyB0aGVuCisJCQkJY3dvcmRfPSRqCisJCQlmaQorCQkJaWYgKCgkaSA8ICR7I0NPTVBfV09SRFNbQF19IC0gMSkpOyB0aGVuCisJCQkJKChpKyspKQorCQkJZWxzZQorCQkJCSMgRG9uZS4KKwkJCQlyZXR1cm4KKwkJCWZpCisJCWRvbmUKKwkJd29yZHNfWyRqXT0ke3dvcmRzX1tqXX0ke0NPTVBfV09SRFNbaV19CisJCWlmIFsgJGkgPSAkQ09NUF9DV09SRCBdOyB0aGVuCisJCQljd29yZF89JGoKKwkJZmkKKwlkb25lCit9CisKK2lmICEgdHlwZSBfZ2V0X2NvbXBfd29yZHNfYnlfcmVmID4vZGV2L251bGwgMj4mMTsgdGhlbgorX2dldF9jb21wX3dvcmRzX2J5X3JlZiAoKQoreworCWxvY2FsIGV4Y2x1ZGUgY3VyXyB3b3Jkc18gY3dvcmRfCisJaWYgWyAiJDEiID0gIi1uIiBdOyB0aGVuCisJCWV4Y2x1ZGU9JDIKKwkJc2hpZnQgMgorCWZpCisJX19naXRfcmVhc3NlbWJsZV9jb21wX3dvcmRzX2J5X3JlZiAiJGV4Y2x1ZGUiCisJY3VyXz0ke3dvcmRzX1tjd29yZF9dfQorCXdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KKwkJY2FzZSAiJDEiIGluCisJCWN1cikKKwkJCWN1cj0kY3VyXworCQkJOzsKKwkJcHJldikKKwkJCXByZXY9JHt3b3Jkc19bJGN3b3JkXy0xXX0KKwkJCTs7CisJCXdvcmRzKQorCQkJd29yZHM9KCIke3dvcmRzX1tAXX0iKQorCQkJOzsKKwkJY3dvcmQpCisJCQljd29yZD0kY3dvcmRfCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorfQorZmkKKworX19naXRjb21wYXBwZW5kICgpCit7CisJbG9jYWwgeCBpPSR7I0NPTVBSRVBMWVtAXX0KKwlmb3IgeCBpbiAkMTsgZG8KKwkJaWYgW1sgIiR4IiA9PSAiJDMiKiBdXTsgdGhlbgorCQkJQ09NUFJFUExZW2krK109IiQyJHgkNCIKKwkJZmkKKwlkb25lCit9CisKK19fZ2l0Y29tcGFkZCAoKQoreworCUNPTVBSRVBMWT0oKQorCV9fZ2l0Y29tcGFwcGVuZCAiJEAiCit9CisKKyMgR2VuZXJhdGVzIGNvbXBsZXRpb24gcmVwbHksIGFwcGVuZGluZyBhIHNwYWNlIHRvIHBvc3NpYmxlIGNvbXBsZXRpb24gd29yZHMsCisjIGlmIG5lY2Vzc2FyeS4KKyMgSXQgYWNjZXB0cyAxIHRvIDQgYXJndW1lbnRzOgorIyAxOiBMaXN0IG9mIHBvc3NpYmxlIGNvbXBsZXRpb24gd29yZHMuCisjIDI6IEEgcHJlZml4IHRvIGJlIGFkZGVkIHRvIGVhY2ggcG9zc2libGUgY29tcGxldGlvbiB3b3JkIChvcHRpb25hbCkuCisjIDM6IEdlbmVyYXRlIHBvc3NpYmxlIGNvbXBsZXRpb24gbWF0Y2hlcyBmb3IgdGhpcyB3b3JkIChvcHRpb25hbCkuCisjIDQ6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggcG9zc2libGUgY29tcGxldGlvbiB3b3JkIChvcHRpb25hbCkuCitfX2dpdGNvbXAgKCkKK3sKKwlsb2NhbCBjdXJfPSIkezMtJGN1cn0iCisKKwljYXNlICIkY3VyXyIgaW4KKwktLSo9KQorCQk7OworCSopCisJCWxvY2FsIGMgaT0wIElGUz0kJyBcdFxuJworCQlmb3IgYyBpbiAkMTsgZG8KKwkJCWM9IiRjJHs0LX0iCisJCQlpZiBbWyAkYyA9PSAiJGN1cl8iKiBdXTsgdGhlbgorCQkJCWNhc2UgJGMgaW4KKwkJCQktLSo9KnwqLikgOzsKKwkJCQkqKSBjPSIkYyAiIDs7CisJCQkJZXNhYworCQkJCUNPTVBSRVBMWVtpKytdPSIkezItfSRjIgorCQkJZmkKKwkJZG9uZQorCQk7OworCWVzYWMKK30KKworIyBWYXJpYXRpb24gb2YgX19naXRjb21wX25sICgpIHRoYXQgYXBwZW5kcyB0byB0aGUgZXhpc3RpbmcgbGlzdCBvZgorIyBjb21wbGV0aW9uIGNhbmRpZGF0ZXMsIENPTVBSRVBMWS4KK19fZ2l0Y29tcF9ubF9hcHBlbmQgKCkKK3sKKwlsb2NhbCBJRlM9JCdcbicKKwlfX2dpdGNvbXBhcHBlbmQgIiQxIiAiJHsyLX0iICIkezMtJGN1cn0iICIkezQtIH0iCit9CisKKyMgR2VuZXJhdGVzIGNvbXBsZXRpb24gcmVwbHkgZnJvbSBuZXdsaW5lLXNlcGFyYXRlZCBwb3NzaWJsZSBjb21wbGV0aW9uIHdvcmRzCisjIGJ5IGFwcGVuZGluZyBhIHNwYWNlIHRvIGFsbCBvZiB0aGVtLgorIyBJdCBhY2NlcHRzIDEgdG8gNCBhcmd1bWVudHM6CisjIDE6IExpc3Qgb2YgcG9zc2libGUgY29tcGxldGlvbiB3b3Jkcywgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIG5ld2xpbmUuCisjIDI6IEEgcHJlZml4IHRvIGJlIGFkZGVkIHRvIGVhY2ggcG9zc2libGUgY29tcGxldGlvbiB3b3JkIChvcHRpb25hbCkuCisjIDM6IEdlbmVyYXRlIHBvc3NpYmxlIGNvbXBsZXRpb24gbWF0Y2hlcyBmb3IgdGhpcyB3b3JkIChvcHRpb25hbCkuCisjIDQ6IEEgc3VmZml4IHRvIGJlIGFwcGVuZGVkIHRvIGVhY2ggcG9zc2libGUgY29tcGxldGlvbiB3b3JkIGluc3RlYWQgb2YKKyMgICAgdGhlIGRlZmF1bHQgc3BhY2UgKG9wdGlvbmFsKS4gIElmIHNwZWNpZmllZCBidXQgZW1wdHksIG5vdGhpbmcgaXMKKyMgICAgYXBwZW5kZWQuCitfX2dpdGNvbXBfbmwgKCkKK3sKKwlDT01QUkVQTFk9KCkKKwlfX2dpdGNvbXBfbmxfYXBwZW5kICIkQCIKK30KKworIyBHZW5lcmF0ZXMgY29tcGxldGlvbiByZXBseSB3aXRoIGNvbXBnZW4gZnJvbSBuZXdsaW5lLXNlcGFyYXRlZCBwb3NzaWJsZQorIyBjb21wbGV0aW9uIGZpbGVuYW1lcy4KKyMgSXQgYWNjZXB0cyAxIHRvIDMgYXJndW1lbnRzOgorIyAxOiBMaXN0IG9mIHBvc3NpYmxlIGNvbXBsZXRpb24gZmlsZW5hbWVzLCBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgbmV3bGluZS4KKyMgMjogQSBkaXJlY3RvcnkgcHJlZml4IHRvIGJlIGFkZGVkIHRvIGVhY2ggcG9zc2libGUgY29tcGxldGlvbiBmaWxlbmFtZQorIyAgICAob3B0aW9uYWwpLgorIyAzOiBHZW5lcmF0ZSBwb3NzaWJsZSBjb21wbGV0aW9uIG1hdGNoZXMgZm9yIHRoaXMgd29yZCAob3B0aW9uYWwpLgorX19naXRjb21wX2ZpbGUgKCkKK3sKKwlsb2NhbCBJRlM9JCdcbicKKworCSMgWFhYIGRvZXMgbm90IHdvcmsgd2hlbiB0aGUgZGlyZWN0b3J5IHByZWZpeCBjb250YWlucyBhIHRpbGRlLAorCSMgc2luY2UgdGlsZGUgZXhwYW5zaW9uIGlzIG5vdCBhcHBsaWVkLgorCSMgVGhpcyBtZWFucyB0aGF0IENPTVBSRVBMWSB3aWxsIGJlIGVtcHR5IGFuZCBCYXNoIGRlZmF1bHQKKwkjIGNvbXBsZXRpb24gd2lsbCBiZSB1c2VkLgorCV9fZ2l0Y29tcGFkZCAiJDEiICIkezItfSIgIiR7My0kY3VyfSIgIiIKKworCSMgdXNlIGEgaGFjayB0byBlbmFibGUgZmlsZSBtb2RlIGluIGJhc2ggPCA0CisJY29tcG9wdCAtbyBmaWxlbmFtZXMgK28gbm9zcGFjZSAyPi9kZXYvbnVsbCB8fAorCWNvbXBnZW4gLWYgL25vbi1leGlzdGluZy1kaXIvID4gL2Rldi9udWxsCit9CisKKyMgRXhlY3V0ZSAnZ2l0IGxzLWZpbGVzJywgdW5sZXNzIHRoZSAtLWNvbW1pdHRhYmxlIG9wdGlvbiBpcyBzcGVjaWZpZWQsIGluCisjIHdoaWNoIGNhc2UgaXQgcnVucyAnZ2l0IGRpZmYtaW5kZXgnIHRvIGZpbmQgb3V0IHRoZSBmaWxlcyB0aGF0IGNhbiBiZQorIyBjb21taXR0ZWQuICBJdCByZXR1cm4gcGF0aHMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBzcGVjaWZpZWQgaW4gdGhlIGZpcnN0CisjIGFyZ3VtZW50LCBhbmQgdXNpbmcgdGhlIG9wdGlvbnMgc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgYXJndW1lbnQuCitfX2dpdF9sc19maWxlc19oZWxwZXIgKCkKK3sKKwlpZiBbICIkMiIgPT0gIi0tY29tbWl0dGFibGUiIF07IHRoZW4KKwkJZ2l0IC1DICIkMSIgZGlmZi1pbmRleCAtLW5hbWUtb25seSAtLXJlbGF0aXZlIEhFQUQKKwllbHNlCisJCSMgTk9URTogJDIgaXMgbm90IHF1b3RlZCBpbiBvcmRlciB0byBzdXBwb3J0IG11bHRpcGxlIG9wdGlvbnMKKwkJZ2l0IC1DICIkMSIgbHMtZmlsZXMgLS1leGNsdWRlLXN0YW5kYXJkICQyCisJZmkgMj4vZGV2L251bGwKK30KKworCisjIF9fZ2l0X2luZGV4X2ZpbGVzIGFjY2VwdHMgMSBvciAyIGFyZ3VtZW50czoKKyMgMTogT3B0aW9ucyB0byBwYXNzIHRvIGxzLWZpbGVzIChyZXF1aXJlZCkuCisjIDI6IEEgZGlyZWN0b3J5IHBhdGggKG9wdGlvbmFsKS4KKyMgICAgSWYgcHJvdmlkZWQsIG9ubHkgZmlsZXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IGFyZSBsaXN0ZWQuCisjICAgIFN1YiBkaXJlY3RvcmllcyBhcmUgbmV2ZXIgcmVjdXJzZWQuICBQYXRoIG11c3QgaGF2ZSBhIHRyYWlsaW5nCisjICAgIHNsYXNoLgorX19naXRfaW5kZXhfZmlsZXMgKCkKK3sKKwlsb2NhbCBkaXI9IiQoX19naXRkaXIpIiByb290PSIkezItLn0iIGZpbGUKKworCWlmIFsgLWQgIiRkaXIiIF07IHRoZW4KKwkJX19naXRfbHNfZmlsZXNfaGVscGVyICIkcm9vdCIgIiQxIiB8CisJCXdoaWxlIHJlYWQgLXIgZmlsZTsgZG8KKwkJCWNhc2UgIiRmaWxlIiBpbgorCQkJPyovKikgZWNobyAiJHtmaWxlJSUvKn0iIDs7CisJCQkqKSBlY2hvICIkZmlsZSIgOzsKKwkJCWVzYWMKKwkJZG9uZSB8IHNvcnQgfCB1bmlxCisJZmkKK30KKworX19naXRfaGVhZHMgKCkKK3sKKwlsb2NhbCBkaXI9IiQoX19naXRkaXIpIgorCWlmIFsgLWQgIiRkaXIiIF07IHRoZW4KKwkJZ2l0IC0tZ2l0LWRpcj0iJGRpciIgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWU6c2hvcnQpJyBcCisJCQlyZWZzL2hlYWRzCisJCXJldHVybgorCWZpCit9CisKK19fZ2l0X3RhZ3MgKCkKK3sKKwlsb2NhbCBkaXI9IiQoX19naXRkaXIpIgorCWlmIFsgLWQgIiRkaXIiIF07IHRoZW4KKwkJZ2l0IC0tZ2l0LWRpcj0iJGRpciIgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWU6c2hvcnQpJyBcCisJCQlyZWZzL3RhZ3MKKwkJcmV0dXJuCisJZmkKK30KKworIyBfX2dpdF9yZWZzIGFjY2VwdHMgMCwgMSAodG8gcGFzcyB0byBfX2dpdGRpciksIG9yIDIgYXJndW1lbnRzCisjIHByZXNlbmNlIG9mIDJuZCBhcmd1bWVudCBtZWFucyB1c2UgdGhlIGd1ZXNzIGhldXJpc3RpYyBlbXBsb3llZAorIyBieSBjaGVja291dCBmb3IgdHJhY2tpbmcgYnJhbmNoZXMKK19fZ2l0X3JlZnMgKCkKK3sKKwlsb2NhbCBpIGhhc2ggZGlyPSIkKF9fZ2l0ZGlyICIkezEtfSIpIiB0cmFjaz0iJHsyLX0iCisJbG9jYWwgZm9ybWF0IHJlZnMKKwlpZiBbIC1kICIkZGlyIiBdOyB0aGVuCisJCWNhc2UgIiRjdXIiIGluCisJCXJlZnN8cmVmcy8qKQorCQkJZm9ybWF0PSJyZWZuYW1lIgorCQkJcmVmcz0iJHtjdXIlLyp9IgorCQkJdHJhY2s9IiIKKwkJCTs7CisJCSopCisJCQlmb3IgaSBpbiBIRUFEIEZFVENIX0hFQUQgT1JJR19IRUFEIE1FUkdFX0hFQUQ7IGRvCisJCQkJaWYgWyAtZSAiJGRpci8kaSIgXTsgdGhlbiBlY2hvICRpOyBmaQorCQkJZG9uZQorCQkJZm9ybWF0PSJyZWZuYW1lOnNob3J0IgorCQkJcmVmcz0icmVmcy90YWdzIHJlZnMvaGVhZHMgcmVmcy9yZW1vdGVzIgorCQkJOzsKKwkJZXNhYworCQlnaXQgLS1naXQtZGlyPSIkZGlyIiBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoJGZvcm1hdCkiIFwKKwkJCSRyZWZzCisJCWlmIFsgLW4gIiR0cmFjayIgXTsgdGhlbgorCQkJIyBlbXBsb3kgdGhlIGhldXJpc3RpYyB1c2VkIGJ5IGdpdCBjaGVja291dAorCQkJIyBUcnkgdG8gZmluZCBhIHJlbW90ZSBicmFuY2ggdGhhdCBtYXRjaGVzIHRoZSBjb21wbGV0aW9uIHdvcmQKKwkJCSMgYnV0IG9ubHkgb3V0cHV0IGlmIHRoZSBicmFuY2ggbmFtZSBpcyB1bmlxdWUKKwkJCWxvY2FsIHJlZiBlbnRyeQorCQkJZ2l0IC0tZ2l0LWRpcj0iJGRpciIgZm9yLWVhY2gtcmVmIC0tc2hlbGwgLS1mb3JtYXQ9InJlZj0lKHJlZm5hbWU6c2hvcnQpIiBcCisJCQkJInJlZnMvcmVtb3Rlcy8iIHwgXAorCQkJd2hpbGUgcmVhZCAtciBlbnRyeTsgZG8KKwkJCQlldmFsICIkZW50cnkiCisJCQkJcmVmPSIke3JlZiMqL30iCisJCQkJaWYgW1sgIiRyZWYiID09ICIkY3VyIiogXV07IHRoZW4KKwkJCQkJZWNobyAiJHJlZiIKKwkJCQlmaQorCQkJZG9uZSB8IHNvcnQgfCB1bmlxIC11CisJCWZpCisJCXJldHVybgorCWZpCisJY2FzZSAiJGN1ciIgaW4KKwlyZWZzfHJlZnMvKikKKwkJZ2l0IGxzLXJlbW90ZSAiJGRpciIgIiRjdXIqIiAyPi9kZXYvbnVsbCB8IFwKKwkJd2hpbGUgcmVhZCAtciBoYXNoIGk7IGRvCisJCQljYXNlICIkaSIgaW4KKwkJCSpee30pIDs7CisJCQkqKSBlY2hvICIkaSIgOzsKKwkJCWVzYWMKKwkJZG9uZQorCQk7OworCSopCisJCWVjaG8gIkhFQUQiCisJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZTpzaG9ydCkiIC0tIFwKKwkJCSJyZWZzL3JlbW90ZXMvJGRpci8iIDI+L2Rldi9udWxsIHwgc2VkIC1lICJzI14kZGlyLyMjIgorCQk7OworCWVzYWMKK30KKworIyBfX2dpdF9yZWZzMiByZXF1aXJlcyAxIGFyZ3VtZW50ICh0byBwYXNzIHRvIF9fZ2l0X3JlZnMpCitfX2dpdF9yZWZzMiAoKQoreworCWxvY2FsIGkKKwlmb3IgaSBpbiAkKF9fZ2l0X3JlZnMgIiQxIik7IGRvCisJCWVjaG8gIiRpOiRpIgorCWRvbmUKK30KKworIyBfX2dpdF9yZWZzX3JlbW90ZXMgcmVxdWlyZXMgMSBhcmd1bWVudCAodG8gcGFzcyB0byBscy1yZW1vdGUpCitfX2dpdF9yZWZzX3JlbW90ZXMgKCkKK3sKKwlsb2NhbCBpIGhhc2gKKwlnaXQgbHMtcmVtb3RlICIkMSIgJ3JlZnMvaGVhZHMvKicgMj4vZGV2L251bGwgfCBcCisJd2hpbGUgcmVhZCAtciBoYXNoIGk7IGRvCisJCWVjaG8gIiRpOnJlZnMvcmVtb3Rlcy8kMS8ke2kjcmVmcy9oZWFkcy99IgorCWRvbmUKK30KKworX19naXRfcmVtb3RlcyAoKQoreworCWxvY2FsIGQ9IiQoX19naXRkaXIpIgorCXRlc3QgLWQgIiRkL3JlbW90ZXMiICYmIGxzIC0xICIkZC9yZW1vdGVzIgorCWdpdCAtLWdpdC1kaXI9IiRkIiByZW1vdGUKK30KKworX19naXRfbGlzdF9tZXJnZV9zdHJhdGVnaWVzICgpCit7CisJZ2l0IG1lcmdlIC1zIGhlbHAgMj4mMSB8CisJc2VkIC1uIC1lICcvW0FhXXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiAvLC9eJC97CisJCXMvXC4kLy8KKwkJcy8uKjovLworCQlzL15bIAldKi8vCisJCXMvWyAJXSokLy8KKwkJcAorCX0nCit9CisKK19fZ2l0X21lcmdlX3N0cmF0ZWdpZXM9CisjICdnaXQgbWVyZ2UgLXMgaGVscCcgKGFuZCB0aHVzIGRldGVjdGlvbiBvZiB0aGUgbWVyZ2Ugc3RyYXRlZ3kKKyMgbGlzdCkgZmFpbHMsIHVuZm9ydHVuYXRlbHksIGlmIHJ1biBvdXRzaWRlIG9mIGFueSBnaXQgd29ya2luZworIyB0cmVlLiAgX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyBpcyBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBpbgorIyB0aGF0IGNhc2UsIGFuZCB0aGUgZGV0ZWN0aW9uIHdpbGwgYmUgcmVwZWF0ZWQgdGhlIG5leHQgdGltZSBpdAorIyBpcyBuZWVkZWQuCitfX2dpdF9jb21wdXRlX21lcmdlX3N0cmF0ZWdpZXMgKCkKK3sKKwl0ZXN0IC1uICIkX19naXRfbWVyZ2Vfc3RyYXRlZ2llcyIgfHwKKwlfX2dpdF9tZXJnZV9zdHJhdGVnaWVzPSQoX19naXRfbGlzdF9tZXJnZV9zdHJhdGVnaWVzKQorfQorCitfX2dpdF9jb21wbGV0ZV9yZXZsaXN0X2ZpbGUgKCkKK3sKKwlsb2NhbCBwZnggbHMgcmVmIGN1cl89IiRjdXIiCisJY2FzZSAiJGN1cl8iIGluCisJKi4uPyo6KikKKwkJcmV0dXJuCisJCTs7CisJPyo6KikKKwkJcmVmPSIke2N1cl8lJToqfSIKKwkJY3VyXz0iJHtjdXJfIyo6fSIKKwkJY2FzZSAiJGN1cl8iIGluCisJCT8qLyopCisJCQlwZng9IiR7Y3VyXyUvKn0iCisJCQljdXJfPSIke2N1cl8jIyovfSIKKwkJCWxzPSIkcmVmOiRwZngiCisJCQlwZng9IiRwZngvIgorCQkJOzsKKwkJKikKKwkJCWxzPSIkcmVmIgorCQkJOzsKKwkJZXNhYworCisJCWNhc2UgIiRDT01QX1dPUkRCUkVBS1MiIGluCisJCSo6KikgOiBncmVhdCA7OworCQkqKSAgIHBmeD0iJHJlZjokcGZ4IiA7OworCQllc2FjCisKKwkJX19naXRjb21wX25sICIkKGdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBscy10cmVlICIkbHMiIDI+L2Rldi9udWxsIFwKKwkJCQl8IHNlZCAnL14xMDAuLi4gYmxvYiAveworCQkJCSAgICAgICAgICAgcyxeLioJLCwKKwkJCQkgICAgICAgICAgIHMsJCwgLAorCQkJCSAgICAgICB9CisJCQkJICAgICAgIC9eMTIwMDAwIGJsb2IgL3sKKwkJCQkgICAgICAgICAgIHMsXi4qCSwsCisJCQkJICAgICAgICAgICBzLCQsICwKKwkJCQkgICAgICAgfQorCQkJCSAgICAgICAvXjA0MDAwMCB0cmVlIC97CisJCQkJICAgICAgICAgICBzLF4uKgksLAorCQkJCSAgICAgICAgICAgcywkLC8sCisJCQkJICAgICAgIH0KKwkJCQkgICAgICAgcy9eLioJLy8nKSIgXAorCQkJIiRwZngiICIkY3VyXyIgIiIKKwkJOzsKKwkqLi4uKikKKwkJcGZ4PSIke2N1cl8lLi4uKn0uLi4iCisJCWN1cl89IiR7Y3VyXyMqLi4ufSIKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIiAiJHBmeCIgIiRjdXJfIgorCQk7OworCSouLiopCisJCXBmeD0iJHtjdXJfJS4uKn0uLiIKKwkJY3VyXz0iJHtjdXJfIyouLn0iCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIgIiRwZngiICIkY3VyXyIKKwkJOzsKKwkqKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiCisJCTs7CisJZXNhYworfQorCisKKyMgX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSByZXF1aXJlcyAxIGFyZ3VtZW50OgorIyAxOiB0aGUgb3B0aW9ucyB0byBwYXNzIHRvIGxzLWZpbGUKKyMKKyMgVGhlIGV4Y2VwdGlvbiBpcyAtLWNvbW1pdHRhYmxlLCB3aGljaCBmaW5kcyB0aGUgZmlsZXMgYXBwcm9wcmlhdGUgY29tbWl0LgorX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAoKQoreworCWxvY2FsIHBmeD0iIiBjdXJfPSIkY3VyIgorCisJY2FzZSAiJGN1cl8iIGluCisJPyovKikKKwkJcGZ4PSIke2N1cl8lLyp9IgorCQljdXJfPSIke2N1cl8jIyovfSIKKwkJcGZ4PSIke3BmeH0vIgorCQk7OworCWVzYWMKKworCV9fZ2l0Y29tcF9maWxlICIkKF9fZ2l0X2luZGV4X2ZpbGVzICIkMSIgJHtwZng6KyIkcGZ4In0pIiAiJHBmeCIgIiRjdXJfIgorfQorCitfX2dpdF9jb21wbGV0ZV9maWxlICgpCit7CisJX19naXRfY29tcGxldGVfcmV2bGlzdF9maWxlCit9CisKK19fZ2l0X2NvbXBsZXRlX3Jldmxpc3QgKCkKK3sKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0X2ZpbGUKK30KKworX19naXRfY29tcGxldGVfcmVtb3RlX29yX3JlZnNwZWMgKCkKK3sKKwlsb2NhbCBjdXJfPSIkY3VyIiBjbWQ9IiR7d29yZHNbMV19IgorCWxvY2FsIGkgYz0yIHJlbW90ZT0iIiBwZng9IiIgbGhzPTEgbm9fY29tcGxldGVfcmVmc3BlYz0wCisJaWYgWyAiJGNtZCIgPSAicmVtb3RlIiBdOyB0aGVuCisJCSgoYysrKSkKKwlmaQorCXdoaWxlIFsgJGMgLWx0ICRjd29yZCBdOyBkbworCQlpPSIke3dvcmRzW2NdfSIKKwkJY2FzZSAiJGkiIGluCisJCS0tbWlycm9yKSBbICIkY21kIiA9ICJwdXNoIiBdICYmIG5vX2NvbXBsZXRlX3JlZnNwZWM9MSA7OworCQktLWFsbCkKKwkJCWNhc2UgIiRjbWQiIGluCisJCQlwdXNoKSBub19jb21wbGV0ZV9yZWZzcGVjPTEgOzsKKwkJCWZldGNoKQorCQkJCXJldHVybgorCQkJCTs7CisJCQkqKSA7OworCQkJZXNhYworCQkJOzsKKwkJLSopIDs7CisJCSopIHJlbW90ZT0iJGkiOyBicmVhayA7OworCQllc2FjCisJCSgoYysrKSkKKwlkb25lCisJaWYgWyAteiAiJHJlbW90ZSIgXTsgdGhlbgorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiCisJCXJldHVybgorCWZpCisJaWYgWyAkbm9fY29tcGxldGVfcmVmc3BlYyA9IDEgXTsgdGhlbgorCQlyZXR1cm4KKwlmaQorCVsgIiRyZW1vdGUiID0gIi4iIF0gJiYgcmVtb3RlPQorCWNhc2UgIiRjdXJfIiBpbgorCSo6KikKKwkJY2FzZSAiJENPTVBfV09SREJSRUFLUyIgaW4KKwkJKjoqKSA6IGdyZWF0IDs7CisJCSopICAgcGZ4PSIke2N1cl8lJToqfToiIDs7CisJCWVzYWMKKwkJY3VyXz0iJHtjdXJfIyo6fSIKKwkJbGhzPTAKKwkJOzsKKwkrKikKKwkJcGZ4PSIrIgorCQljdXJfPSIke2N1cl8jK30iCisJCTs7CisJZXNhYworCWNhc2UgIiRjbWQiIGluCisJZmV0Y2gpCisJCWlmIFsgJGxocyA9IDEgXTsgdGhlbgorCQkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMyICIkcmVtb3RlIikiICIkcGZ4IiAiJGN1cl8iCisJCWVsc2UKKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIgIiRwZngiICIkY3VyXyIKKwkJZmkKKwkJOzsKKwlwdWxsfHJlbW90ZSkKKwkJaWYgWyAkbGhzID0gMSBdOyB0aGVuCisJCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcyAiJHJlbW90ZSIpIiAiJHBmeCIgIiRjdXJfIgorCQllbHNlCisJCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiICIkcGZ4IiAiJGN1cl8iCisJCWZpCisJCTs7CisJcHVzaCkKKwkJaWYgWyAkbGhzID0gMSBdOyB0aGVuCisJCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiICIkcGZ4IiAiJGN1cl8iCisJCWVsc2UKKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzICIkcmVtb3RlIikiICIkcGZ4IiAiJGN1cl8iCisJCWZpCisJCTs7CisJZXNhYworfQorCitfX2dpdF9jb21wbGV0ZV9zdHJhdGVneSAoKQoreworCV9fZ2l0X2NvbXB1dGVfbWVyZ2Vfc3RyYXRlZ2llcworCWNhc2UgIiRwcmV2IiBpbgorCS1zfC0tc3RyYXRlZ3kpCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X21lcmdlX3N0cmF0ZWdpZXMiCisJCXJldHVybiAwCisJZXNhYworCWNhc2UgIiRjdXIiIGluCisJLS1zdHJhdGVneT0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZV9zdHJhdGVnaWVzIiAiIiAiJHtjdXIjIy0tc3RyYXRlZ3k9fSIKKwkJcmV0dXJuIDAKKwkJOzsKKwllc2FjCisJcmV0dXJuIDEKK30KKworX19naXRfY29tbWFuZHMgKCkgeworCWlmIHRlc3QgLW4gIiR7R0lUX1RFU1RJTkdfQ09NTUFORF9DT01QTEVUSU9OOi19IgorCXRoZW4KKwkJcHJpbnRmICIlcyIgIiR7R0lUX1RFU1RJTkdfQ09NTUFORF9DT01QTEVUSU9OfSIKKwllbHNlCisJCWdpdCBoZWxwIC1hfGVncmVwICdeICBbYS16QS1aMC05XScKKwlmaQorfQorCitfX2dpdF9saXN0X2FsbF9jb21tYW5kcyAoKQoreworCWxvY2FsIGkgSUZTPSIgIiQnXG4nCisJZm9yIGkgaW4gJChfX2dpdF9jb21tYW5kcykKKwlkbworCQljYXNlICRpIGluCisJCSotLSopICAgICAgICAgICAgIDogaGVscGVyIHBhdHRlcm47OworCQkqKSBlY2hvICRpOzsKKwkJZXNhYworCWRvbmUKK30KKworX19naXRfYWxsX2NvbW1hbmRzPQorX19naXRfY29tcHV0ZV9hbGxfY29tbWFuZHMgKCkKK3sKKwl0ZXN0IC1uICIkX19naXRfYWxsX2NvbW1hbmRzIiB8fAorCV9fZ2l0X2FsbF9jb21tYW5kcz0kKF9fZ2l0X2xpc3RfYWxsX2NvbW1hbmRzKQorfQorCitfX2dpdF9saXN0X3BvcmNlbGFpbl9jb21tYW5kcyAoKQoreworCWxvY2FsIGkgSUZTPSIgIiQnXG4nCisJX19naXRfY29tcHV0ZV9hbGxfY29tbWFuZHMKKwlmb3IgaSBpbiAkX19naXRfYWxsX2NvbW1hbmRzCisJZG8KKwkJY2FzZSAkaSBpbgorCQkqLS0qKSAgICAgICAgICAgICA6IGhlbHBlciBwYXR0ZXJuOzsKKwkJYXBwbHltYm94KSAgICAgICAgOiBhc2sgZ2l0dHVzOzsKKwkJYXBwbHlwYXRjaCkgICAgICAgOiBhc2sgZ2l0dHVzOzsKKwkJYXJjaGltcG9ydCkgICAgICAgOiBpbXBvcnQ7OworCQljYXQtZmlsZSkgICAgICAgICA6IHBsdW1iaW5nOzsKKwkJY2hlY2stYXR0cikgICAgICAgOiBwbHVtYmluZzs7CisJCWNoZWNrLWlnbm9yZSkgICAgIDogcGx1bWJpbmc7OworCQljaGVjay1tYWlsbWFwKSAgICA6IHBsdW1iaW5nOzsKKwkJY2hlY2stcmVmLWZvcm1hdCkgOiBwbHVtYmluZzs7CisJCWNoZWNrb3V0LWluZGV4KSAgIDogcGx1bWJpbmc7OworCQljb21taXQtdHJlZSkgICAgICA6IHBsdW1iaW5nOzsKKwkJY291bnQtb2JqZWN0cykgICAgOiBpbmZyZXF1ZW50OzsKKwkJY3JlZGVudGlhbCkgICAgICAgOiBjcmVkZW50aWFsczs7CisJCWNyZWRlbnRpYWwtKikgICAgIDogY3JlZGVudGlhbHMgaGVscGVyOzsKKwkJY3ZzZXhwb3J0Y29tbWl0KSAgOiBleHBvcnQ7OworCQljdnNpbXBvcnQpICAgICAgICA6IGltcG9ydDs7CisJCWN2c3NlcnZlcikgICAgICAgIDogZGFlbW9uOzsKKwkJZGFlbW9uKSAgICAgICAgICAgOiBkYWVtb247OworCQlkaWZmLWZpbGVzKSAgICAgICA6IHBsdW1iaW5nOzsKKwkJZGlmZi1pbmRleCkgICAgICAgOiBwbHVtYmluZzs7CisJCWRpZmYtdHJlZSkgICAgICAgIDogcGx1bWJpbmc7OworCQlmYXN0LWltcG9ydCkgICAgICA6IGltcG9ydDs7CisJCWZhc3QtZXhwb3J0KSAgICAgIDogZXhwb3J0OzsKKwkJZnNjay1vYmplY3RzKSAgICAgOiBwbHVtYmluZzs7CisJCWZldGNoLXBhY2spICAgICAgIDogcGx1bWJpbmc7OworCQlmbXQtbWVyZ2UtbXNnKSAgICA6IHBsdW1iaW5nOzsKKwkJZm9yLWVhY2gtcmVmKSAgICAgOiBwbHVtYmluZzs7CisJCWhhc2gtb2JqZWN0KSAgICAgIDogcGx1bWJpbmc7OworCQlodHRwLSopICAgICAgICAgICA6IHRyYW5zcG9ydDs7CisJCWluZGV4LXBhY2spICAgICAgIDogcGx1bWJpbmc7OworCQlpbml0LWRiKSAgICAgICAgICA6IGRlcHJlY2F0ZWQ7OworCQlsb2NhbC1mZXRjaCkgICAgICA6IHBsdW1iaW5nOzsKKwkJbHMtZmlsZXMpICAgICAgICAgOiBwbHVtYmluZzs7CisJCWxzLXJlbW90ZSkgICAgICAgIDogcGx1bWJpbmc7OworCQlscy10cmVlKSAgICAgICAgICA6IHBsdW1iaW5nOzsKKwkJbWFpbGluZm8pICAgICAgICAgOiBwbHVtYmluZzs7CisJCW1haWxzcGxpdCkgICAgICAgIDogcGx1bWJpbmc7OworCQltZXJnZS0qKSAgICAgICAgICA6IHBsdW1iaW5nOzsKKwkJbWt0cmVlKSAgICAgICAgICAgOiBwbHVtYmluZzs7CisJCW1rdGFnKSAgICAgICAgICAgIDogcGx1bWJpbmc7OworCQlwYWNrLW9iamVjdHMpICAgICA6IHBsdW1iaW5nOzsKKwkJcGFjay1yZWR1bmRhbnQpICAgOiBwbHVtYmluZzs7CisJCXBhY2stcmVmcykgICAgICAgIDogcGx1bWJpbmc7OworCQlwYXJzZS1yZW1vdGUpICAgICA6IHBsdW1iaW5nOzsKKwkJcGF0Y2gtaWQpICAgICAgICAgOiBwbHVtYmluZzs7CisJCXBydW5lKSAgICAgICAgICAgIDogcGx1bWJpbmc7OworCQlwcnVuZS1wYWNrZWQpICAgICA6IHBsdW1iaW5nOzsKKwkJcXVpbHRpbXBvcnQpICAgICAgOiBpbXBvcnQ7OworCQlyZWFkLXRyZWUpICAgICAgICA6IHBsdW1iaW5nOzsKKwkJcmVjZWl2ZS1wYWNrKSAgICAgOiBwbHVtYmluZzs7CisJCXJlbW90ZS0qKSAgICAgICAgIDogdHJhbnNwb3J0OzsKKwkJcmVyZXJlKSAgICAgICAgICAgOiBwbHVtYmluZzs7CisJCXJldi1saXN0KSAgICAgICAgIDogcGx1bWJpbmc7OworCQlyZXYtcGFyc2UpICAgICAgICA6IHBsdW1iaW5nOzsKKwkJcnVuc3RhdHVzKSAgICAgICAgOiBwbHVtYmluZzs7CisJCXNoLXNldHVwKSAgICAgICAgIDogaW50ZXJuYWw7OworCQlzaGVsbCkgICAgICAgICAgICA6IGRhZW1vbjs7CisJCXNob3ctcmVmKSAgICAgICAgIDogcGx1bWJpbmc7OworCQlzZW5kLXBhY2spICAgICAgICA6IHBsdW1iaW5nOzsKKwkJc2hvdy1pbmRleCkgICAgICAgOiBwbHVtYmluZzs7CisJCXNzaC0qKSAgICAgICAgICAgIDogdHJhbnNwb3J0OzsKKwkJc3RyaXBzcGFjZSkgICAgICAgOiBwbHVtYmluZzs7CisJCXN5bWJvbGljLXJlZikgICAgIDogcGx1bWJpbmc7OworCQl1bnBhY2stZmlsZSkgICAgICA6IHBsdW1iaW5nOzsKKwkJdW5wYWNrLW9iamVjdHMpICAgOiBwbHVtYmluZzs7CisJCXVwZGF0ZS1pbmRleCkgICAgIDogcGx1bWJpbmc7OworCQl1cGRhdGUtcmVmKSAgICAgICA6IHBsdW1iaW5nOzsKKwkJdXBkYXRlLXNlcnZlci1pbmZvKSA6IGRhZW1vbjs7CisJCXVwbG9hZC1hcmNoaXZlKSAgIDogcGx1bWJpbmc7OworCQl1cGxvYWQtcGFjaykgICAgICA6IHBsdW1iaW5nOzsKKwkJd3JpdGUtdHJlZSkgICAgICAgOiBwbHVtYmluZzs7CisJCXZhcikgICAgICAgICAgICAgIDogaW5mcmVxdWVudDs7CisJCXZlcmlmeS1wYWNrKSAgICAgIDogaW5mcmVxdWVudDs7CisJCXZlcmlmeS10YWcpICAgICAgIDogcGx1bWJpbmc7OworCQkqKSBlY2hvICRpOzsKKwkJZXNhYworCWRvbmUKK30KKworX19naXRfcG9yY2VsYWluX2NvbW1hbmRzPQorX19naXRfY29tcHV0ZV9wb3JjZWxhaW5fY29tbWFuZHMgKCkKK3sKKwl0ZXN0IC1uICIkX19naXRfcG9yY2VsYWluX2NvbW1hbmRzIiB8fAorCV9fZ2l0X3BvcmNlbGFpbl9jb21tYW5kcz0kKF9fZ2l0X2xpc3RfcG9yY2VsYWluX2NvbW1hbmRzKQorfQorCisjIExpc3RzIGFsbCBzZXQgY29uZmlnIHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBnaXZlbiBzZWN0aW9uIHByZWZpeCwKKyMgd2l0aCB0aGUgcHJlZml4IHJlbW92ZWQuCitfX2dpdF9nZXRfY29uZmlnX3ZhcmlhYmxlcyAoKQoreworCWxvY2FsIHNlY3Rpb249IiQxIiBpIElGUz0kJ1xuJworCWZvciBpIGluICQoZ2l0IC0tZ2l0LWRpcj0iJChfX2dpdGRpcikiIGNvbmZpZyAtLW5hbWUtb25seSAtLWdldC1yZWdleHAgIl4kc2VjdGlvblwuLioiIDI+L2Rldi9udWxsKTsgZG8KKwkJZWNobyAiJHtpIyRzZWN0aW9uLn0iCisJZG9uZQorfQorCitfX2dpdF9wcmV0dHlfYWxpYXNlcyAoKQoreworCV9fZ2l0X2dldF9jb25maWdfdmFyaWFibGVzICJwcmV0dHkiCit9CisKK19fZ2l0X2FsaWFzZXMgKCkKK3sKKwlfX2dpdF9nZXRfY29uZmlnX3ZhcmlhYmxlcyAiYWxpYXMiCit9CisKKyMgX19naXRfYWxpYXNlZF9jb21tYW5kIHJlcXVpcmVzIDEgYXJndW1lbnQKK19fZ2l0X2FsaWFzZWRfY29tbWFuZCAoKQoreworCWxvY2FsIHdvcmQgY21kbGluZT0kKGdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBcCisJCWNvbmZpZyAtLWdldCAiYWxpYXMuJDEiKQorCWZvciB3b3JkIGluICRjbWRsaW5lOyBkbworCQljYXNlICIkd29yZCIgaW4KKwkJXCFnaXRrfGdpdGspCisJCQllY2hvICJnaXRrIgorCQkJcmV0dXJuCisJCQk7OworCQlcISopCTogc2hlbGwgY29tbWFuZCBhbGlhcyA7OworCQktKikJOiBvcHRpb24gOzsKKwkJKj0qKQk6IHNldHRpbmcgZW52IDs7CisJCWdpdCkJOiBnaXQgaXRzZWxmIDs7CisJCVwoXCkpICAgOiBza2lwIHBhcmVucyBvZiBzaGVsbCBmdW5jdGlvbiBkZWZpbml0aW9uIDs7CisJCXspCTogc2tpcCBzdGFydCBvZiBzaGVsbCBoZWxwZXIgZnVuY3Rpb24gOzsKKwkJOikJOiBza2lwIG51bGwgY29tbWFuZCA7OworCQlcJyopCTogc2tpcCBvcGVuaW5nIHF1b3RlIGFmdGVyIHNoIC1jIDs7CisJCSopCisJCQllY2hvICIkd29yZCIKKwkJCXJldHVybgorCQllc2FjCisJZG9uZQorfQorCisjIF9fZ2l0X2ZpbmRfb25fY21kbGluZSByZXF1aXJlcyAxIGFyZ3VtZW50CitfX2dpdF9maW5kX29uX2NtZGxpbmUgKCkKK3sKKwlsb2NhbCB3b3JkIHN1YmNvbW1hbmQgYz0xCisJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCisJCXdvcmQ9IiR7d29yZHNbY119IgorCQlmb3Igc3ViY29tbWFuZCBpbiAkMTsgZG8KKwkJCWlmIFsgIiRzdWJjb21tYW5kIiA9ICIkd29yZCIgXTsgdGhlbgorCQkJCWVjaG8gIiRzdWJjb21tYW5kIgorCQkJCXJldHVybgorCQkJZmkKKwkJZG9uZQorCQkoKGMrKykpCisJZG9uZQorfQorCitfX2dpdF9oYXNfZG91YmxlZGFzaCAoKQoreworCWxvY2FsIGM9MQorCXdoaWxlIFsgJGMgLWx0ICRjd29yZCBdOyBkbworCQlpZiBbICItLSIgPSAiJHt3b3Jkc1tjXX0iIF07IHRoZW4KKwkJCXJldHVybiAwCisJCWZpCisJCSgoYysrKSkKKwlkb25lCisJcmV0dXJuIDEKK30KKworIyBUcnkgdG8gY291bnQgbm9uIG9wdGlvbiBhcmd1bWVudHMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgZm9yIHRoZQorIyBzcGVjaWZpZWQgZ2l0IGNvbW1hbmQuCisjIFdoZW4gb3B0aW9ucyBhcmUgdXNlZCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSB0aGUgc3BlY2lhbCAtLSBvcHRpb24gdG8KKyMgdGVsbCB0aGUgaW1wbGVtZW50YXRpb24gd2VyZSBub24gb3B0aW9uIGFyZ3VtZW50cyBiZWdpbi4KKyMgWFhYIHRoaXMgY2FuIG5vdCBiZSBpbXByb3ZlZCwgc2luY2Ugb3B0aW9ucyBjYW4gYXBwZWFyIGV2ZXJ5d2hlcmUsIGFzCisjIGFuIGV4YW1wbGU6CisjCWdpdCBtdiB4IC1uIHkKKyMKKyMgX19naXRfY291bnRfYXJndW1lbnRzIHJlcXVpcmVzIDEgYXJndW1lbnQ6IHRoZSBnaXQgY29tbWFuZCBleGVjdXRlZC4KK19fZ2l0X2NvdW50X2FyZ3VtZW50cyAoKQoreworCWxvY2FsIHdvcmQgaSBjPTAKKworCSMgU2tpcCAiZ2l0IiAoZmlyc3QgYXJndW1lbnQpCisJZm9yICgoaT0xOyBpIDwgJHsjd29yZHNbQF19OyBpKyspKTsgZG8KKwkJd29yZD0iJHt3b3Jkc1tpXX0iCisKKwkJY2FzZSAiJHdvcmQiIGluCisJCQktLSkKKwkJCQkjIEdvb2Q7IHdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgZm9sbG93aW5nIGFyZSBvbmx5IG5vbgorCQkJCSMgb3B0aW9uIGFyZ3VtZW50cy4KKwkJCQkoKGMgPSAwKSkKKwkJCQk7OworCQkJIiQxIikKKwkJCQkjIFNraXAgdGhlIHNwZWNpZmllZCBnaXQgY29tbWFuZCBhbmQgZGlzY2FyZCBnaXQKKwkJCQkjIG1haW4gb3B0aW9ucworCQkJCSgoYyA9IDApKQorCQkJCTs7CisJCQk/KikKKwkJCQkoKGMrKykpCisJCQkJOzsKKwkJZXNhYworCWRvbmUKKworCXByaW50ZiAiJWQiICRjCit9CisKK19fZ2l0X3doaXRlc3BhY2VsaXN0PSJub3dhcm4gd2FybiBlcnJvciBlcnJvci1hbGwgZml4IgorCitfZ2l0X2FtICgpCit7CisJbG9jYWwgZGlyPSIkKF9fZ2l0ZGlyKSIKKwlpZiBbIC1kICIkZGlyIi9yZWJhc2UtYXBwbHkgXTsgdGhlbgorCQlfX2dpdGNvbXAgIi0tc2tpcCAtLWNvbnRpbnVlIC0tcmVzb2x2ZWQgLS1hYm9ydCIKKwkJcmV0dXJuCisJZmkKKwljYXNlICIkY3VyIiBpbgorCS0td2hpdGVzcGFjZT0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF93aGl0ZXNwYWNlbGlzdCIgIiIgIiR7Y3VyIyMtLXdoaXRlc3BhY2U9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS0zd2F5IC0tY29tbWl0dGVyLWRhdGUtaXMtYXV0aG9yLWRhdGUgLS1pZ25vcmUtZGF0ZQorCQkJLS1pZ25vcmUtd2hpdGVzcGFjZSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UKKwkJCS0taW50ZXJhY3RpdmUgLS1rZWVwIC0tbm8tdXRmOCAtLXNpZ25vZmYgLS11dGY4CisJCQktLXdoaXRlc3BhY2U9IC0tc2Npc3NvcnMKKwkJCSIKKwkJcmV0dXJuCisJZXNhYworfQorCitfZ2l0X2FwcGx5ICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLXdoaXRlc3BhY2U9KikKKwkJX19naXRjb21wICIkX19naXRfd2hpdGVzcGFjZWxpc3QiICIiICIke2N1ciMjLS13aGl0ZXNwYWNlPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wICIKKwkJCS0tc3RhdCAtLW51bXN0YXQgLS1zdW1tYXJ5IC0tY2hlY2sgLS1pbmRleAorCQkJLS1jYWNoZWQgLS1pbmRleC1pbmZvIC0tcmV2ZXJzZSAtLXJlamVjdCAtLXVuaWRpZmYtemVybworCQkJLS1hcHBseSAtLW5vLWFkZCAtLWV4Y2x1ZGU9CisJCQktLWlnbm9yZS13aGl0ZXNwYWNlIC0taWdub3JlLXNwYWNlLWNoYW5nZQorCQkJLS13aGl0ZXNwYWNlPSAtLWluYWNjdXJhdGUtZW9mIC0tdmVyYm9zZQorCQkJIgorCQlyZXR1cm4KKwllc2FjCit9CisKK19naXRfYWRkICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWludGVyYWN0aXZlIC0tcmVmcmVzaCAtLXBhdGNoIC0tdXBkYXRlIC0tZHJ5LXJ1bgorCQkJLS1pZ25vcmUtZXJyb3JzIC0taW50ZW50LXRvLWFkZAorCQkJIgorCQlyZXR1cm4KKwllc2FjCisKKwkjIFhYWCBzaG91bGQgd2UgY2hlY2sgZm9yIC0tdXBkYXRlIGFuZCAtLWFsbCBvcHRpb25zID8KKwlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICItLW90aGVycyAtLW1vZGlmaWVkIC0tZGlyZWN0b3J5IC0tbm8tZW1wdHktZGlyZWN0b3J5IgorfQorCitfZ2l0X2FyY2hpdmUgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tZm9ybWF0PSopCisJCV9fZ2l0Y29tcCAiJChnaXQgYXJjaGl2ZSAtLWxpc3QpIiAiIiAiJHtjdXIjIy0tZm9ybWF0PX0iCisJCXJldHVybgorCQk7OworCS0tcmVtb3RlPSopCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZW1vdGVzKSIgIiIgIiR7Y3VyIyMtLXJlbW90ZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWZvcm1hdD0gLS1saXN0IC0tdmVyYm9zZQorCQkJLS1wcmVmaXg9IC0tcmVtb3RlPSAtLWV4ZWM9CisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9maWxlCit9CisKK19naXRfYmlzZWN0ICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwlsb2NhbCBzdWJjb21tYW5kcz0ic3RhcnQgYmFkIGdvb2Qgc2tpcCByZXNldCB2aXN1YWxpemUgcmVwbGF5IGxvZyBydW4iCisJbG9jYWwgc3ViY29tbWFuZD0iJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIgorCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCisJCWlmIFsgLWYgIiQoX19naXRkaXIpIi9CSVNFQ1RfU1RBUlQgXTsgdGhlbgorCQkJX19naXRjb21wICIkc3ViY29tbWFuZHMiCisJCWVsc2UKKwkJCV9fZ2l0Y29tcCAicmVwbGF5IHN0YXJ0IgorCQlmaQorCQlyZXR1cm4KKwlmaQorCisJY2FzZSAiJHN1YmNvbW1hbmQiIGluCisJYmFkfGdvb2R8cmVzZXR8c2tpcHxzdGFydCkKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorCQk7OworCSopCisJCTs7CisJZXNhYworfQorCitfZ2l0X2JyYW5jaCAoKQoreworCWxvY2FsIGkgYz0xIG9ubHlfbG9jYWxfcmVmPSJuIiBoYXNfcj0ibiIKKworCXdoaWxlIFsgJGMgLWx0ICRjd29yZCBdOyBkbworCQlpPSIke3dvcmRzW2NdfSIKKwkJY2FzZSAiJGkiIGluCisJCS1kfC1tKQlvbmx5X2xvY2FsX3JlZj0ieSIgOzsKKwkJLXIpCWhhc19yPSJ5IiA7OworCQllc2FjCisJCSgoYysrKSkKKwlkb25lCisKKwljYXNlICIkY3VyIiBpbgorCS0tc2V0LXVwc3RyZWFtLXRvPSopCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIgIiIgIiR7Y3VyIyMtLXNldC11cHN0cmVhbS10bz19IgorCQk7OworCS0tKikKKwkJX19naXRjb21wICIKKwkJCS0tY29sb3IgLS1uby1jb2xvciAtLXZlcmJvc2UgLS1hYmJyZXY9IC0tbm8tYWJicmV2CisJCQktLXRyYWNrIC0tbm8tdHJhY2sgLS1jb250YWlucyAtLW1lcmdlZCAtLW5vLW1lcmdlZAorCQkJLS1zZXQtdXBzdHJlYW0tdG89IC0tZWRpdC1kZXNjcmlwdGlvbiAtLWxpc3QKKwkJCS0tdW5zZXQtdXBzdHJlYW0KKwkJCSIKKwkJOzsKKwkqKQorCQlpZiBbICRvbmx5X2xvY2FsX3JlZiA9ICJ5IiAtYSAkaGFzX3IgPSAibiIgXTsgdGhlbgorCQkJX19naXRjb21wX25sICIkKF9fZ2l0X2hlYWRzKSIKKwkJZWxzZQorCQkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorCQlmaQorCQk7OworCWVzYWMKK30KKworX2dpdF9idW5kbGUgKCkKK3sKKwlsb2NhbCBjbWQ9IiR7d29yZHNbMl19IgorCWNhc2UgIiRjd29yZCIgaW4KKwkyKQorCQlfX2dpdGNvbXAgImNyZWF0ZSBsaXN0LWhlYWRzIHZlcmlmeSB1bmJ1bmRsZSIKKwkJOzsKKwkzKQorCQkjIGxvb2tpbmcgZm9yIGEgZmlsZQorCQk7OworCSopCisJCWNhc2UgIiRjbWQiIGluCisJCQljcmVhdGUpCisJCQkJX19naXRfY29tcGxldGVfcmV2bGlzdAorCQkJOzsKKwkJZXNhYworCQk7OworCWVzYWMKK30KKworX2dpdF9jaGVja291dCAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLWNvbmZsaWN0PSopCisJCV9fZ2l0Y29tcCAiZGlmZjMgbWVyZ2UiICIiICIke2N1ciMjLS1jb25mbGljdD19IgorCQk7OworCS0tKikKKwkJX19naXRjb21wICIKKwkJCS0tcXVpZXQgLS1vdXJzIC0tdGhlaXJzIC0tdHJhY2sgLS1uby10cmFjayAtLW1lcmdlCisJCQktLWNvbmZsaWN0PSAtLW9ycGhhbiAtLXBhdGNoCisJCQkiCisJCTs7CisJKikKKwkJIyBjaGVjayBpZiAtLXRyYWNrLCAtLW5vLXRyYWNrLCBvciAtLW5vLWd1ZXNzIHdhcyBzcGVjaWZpZWQKKwkJIyBpZiBzbywgZGlzYWJsZSBEV0lNIG1vZGUKKwkJbG9jYWwgZmxhZ3M9Ii0tdHJhY2sgLS1uby10cmFjayAtLW5vLWd1ZXNzIiB0cmFjaz0xCisJCWlmIFsgLW4gIiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkZmxhZ3MiKSIgXTsgdGhlbgorCQkJdHJhY2s9JycKKwkJZmkKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMgJycgJHRyYWNrKSIKKwkJOzsKKwllc2FjCit9CisKK19naXRfY2hlcnJ5ICgpCit7CisJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorfQorCitfZ2l0X2NoZXJyeV9waWNrICgpCit7CisJbG9jYWwgZGlyPSIkKF9fZ2l0ZGlyKSIKKwlpZiBbIC1mICIkZGlyIi9DSEVSUllfUElDS19IRUFEIF07IHRoZW4KKwkJX19naXRjb21wICItLWNvbnRpbnVlIC0tcXVpdCAtLWFib3J0IgorCQlyZXR1cm4KKwlmaQorCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIi0tZWRpdCAtLW5vLWNvbW1pdCAtLXNpZ25vZmYgLS1zdHJhdGVneT0gLS1tYWlubGluZSIKKwkJOzsKKwkqKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiCisJCTs7CisJZXNhYworfQorCitfZ2l0X2NsZWFuICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiLS1kcnktcnVuIC0tcXVpZXQiCisJCXJldHVybgorCQk7OworCWVzYWMKKworCSMgWFhYIHNob3VsZCB3ZSBjaGVjayBmb3IgLXggb3B0aW9uID8KKwlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICItLW90aGVycyAtLWRpcmVjdG9yeSIKK30KKworX2dpdF9jbG9uZSAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS1sb2NhbAorCQkJLS1uby1oYXJkbGlua3MKKwkJCS0tc2hhcmVkCisJCQktLXJlZmVyZW5jZQorCQkJLS1xdWlldAorCQkJLS1uby1jaGVja291dAorCQkJLS1iYXJlCisJCQktLW1pcnJvcgorCQkJLS1vcmlnaW4KKwkJCS0tdXBsb2FkLXBhY2sKKwkJCS0tdGVtcGxhdGU9CisJCQktLWRlcHRoCisJCQktLXNpbmdsZS1icmFuY2gKKwkJCS0tYnJhbmNoCisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKK30KKworX2dpdF9jb21taXQgKCkKK3sKKwljYXNlICIkcHJldiIgaW4KKwktY3wtQykKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIiAiIiAiJHtjdXJ9IgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwljYXNlICIkY3VyIiBpbgorCS0tY2xlYW51cD0qKQorCQlfX2dpdGNvbXAgImRlZmF1bHQgc2Npc3NvcnMgc3RyaXAgdmVyYmF0aW0gd2hpdGVzcGFjZQorCQkJIiAiIiAiJHtjdXIjIy0tY2xlYW51cD19IgorCQlyZXR1cm4KKwkJOzsKKwktLXJldXNlLW1lc3NhZ2U9KnwtLXJlZWRpdC1tZXNzYWdlPSp8XAorCS0tZml4dXA9KnwtLXNxdWFzaD0qKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiICIiICIke2N1ciMqPX0iCisJCXJldHVybgorCQk7OworCS0tdW50cmFja2VkLWZpbGVzPSopCisJCV9fZ2l0Y29tcCAiYWxsIG5vIG5vcm1hbCIgIiIgIiR7Y3VyIyMtLXVudHJhY2tlZC1maWxlcz19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWFsbCAtLWF1dGhvcj0gLS1zaWdub2ZmIC0tdmVyaWZ5IC0tbm8tdmVyaWZ5CisJCQktLWVkaXQgLS1uby1lZGl0CisJCQktLWFtZW5kIC0taW5jbHVkZSAtLW9ubHkgLS1pbnRlcmFjdGl2ZQorCQkJLS1kcnktcnVuIC0tcmV1c2UtbWVzc2FnZT0gLS1yZWVkaXQtbWVzc2FnZT0KKwkJCS0tcmVzZXQtYXV0aG9yIC0tZmlsZT0gLS1tZXNzYWdlPSAtLXRlbXBsYXRlPQorCQkJLS1jbGVhbnVwPSAtLXVudHJhY2tlZC1maWxlcyAtLXVudHJhY2tlZC1maWxlcz0KKwkJCS0tdmVyYm9zZSAtLXF1aWV0IC0tZml4dXA9IC0tc3F1YXNoPQorCQkJIgorCQlyZXR1cm4KKwllc2FjCisKKwlpZiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgSEVBRCA+L2Rldi9udWxsOyB0aGVuCisJCV9fZ2l0X2NvbXBsZXRlX2luZGV4X2ZpbGUgIi0tY29tbWl0dGFibGUiCisJZWxzZQorCQkjIFRoaXMgaXMgdGhlIGZpcnN0IGNvbW1pdAorCQlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICItLWNhY2hlZCIKKwlmaQorfQorCitfZ2l0X2Rlc2NyaWJlICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWFsbCAtLXRhZ3MgLS1jb250YWlucyAtLWFiYnJldj0gLS1jYW5kaWRhdGVzPQorCQkJLS1leGFjdC1tYXRjaCAtLWRlYnVnIC0tbG9uZyAtLW1hdGNoIC0tYWx3YXlzCisJCQkiCisJCXJldHVybgorCWVzYWMKKwlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiCit9CisKK19fZ2l0X2RpZmZfYWxnb3JpdGhtcz0ibXllcnMgbWluaW1hbCBwYXRpZW5jZSBoaXN0b2dyYW0iCisKK19fZ2l0X2RpZmZfY29tbW9uX29wdGlvbnM9Ii0tc3RhdCAtLW51bXN0YXQgLS1zaG9ydHN0YXQgLS1zdW1tYXJ5CisJCQktLXBhdGNoLXdpdGgtc3RhdCAtLW5hbWUtb25seSAtLW5hbWUtc3RhdHVzIC0tY29sb3IKKwkJCS0tbm8tY29sb3IgLS1jb2xvci13b3JkcyAtLW5vLXJlbmFtZXMgLS1jaGVjaworCQkJLS1mdWxsLWluZGV4IC0tYmluYXJ5IC0tYWJicmV2IC0tZGlmZi1maWx0ZXI9CisJCQktLWZpbmQtY29waWVzLWhhcmRlcgorCQkJLS10ZXh0IC0taWdub3JlLXNwYWNlLWF0LWVvbCAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UKKwkJCS0taWdub3JlLWFsbC1zcGFjZSAtLWlnbm9yZS1ibGFuay1saW5lcyAtLWV4aXQtY29kZQorCQkJLS1xdWlldCAtLWV4dC1kaWZmIC0tbm8tZXh0LWRpZmYKKwkJCS0tbm8tcHJlZml4IC0tc3JjLXByZWZpeD0gLS1kc3QtcHJlZml4PQorCQkJLS1pbnRlci1odW5rLWNvbnRleHQ9CisJCQktLXBhdGllbmNlIC0taGlzdG9ncmFtIC0tbWluaW1hbAorCQkJLS1yYXcgLS13b3JkLWRpZmYKKwkJCS0tZGlyc3RhdCAtLWRpcnN0YXQ9IC0tZGlyc3RhdC1ieS1maWxlCisJCQktLWRpcnN0YXQtYnktZmlsZT0gLS1jdW11bGF0aXZlCisJCQktLWRpZmYtYWxnb3JpdGhtPQorIgorCitfZ2l0X2RpZmYgKCkKK3sKKwlfX2dpdF9oYXNfZG91YmxlZGFzaCAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS1kaWZmLWFsZ29yaXRobT0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9kaWZmX2FsZ29yaXRobXMiICIiICIke2N1ciMjLS1kaWZmLWFsZ29yaXRobT19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiLS1jYWNoZWQgLS1zdGFnZWQgLS1waWNrYXhlLWFsbCAtLXBpY2theGUtcmVnZXgKKwkJCS0tYmFzZSAtLW91cnMgLS10aGVpcnMgLS1uby1pbmRleAorCQkJJF9fZ2l0X2RpZmZfY29tbW9uX29wdGlvbnMKKwkJCSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3RfZmlsZQorfQorCitfX2dpdF9tZXJnZXRvb2xzX2NvbW1vbj0iZGlmZnVzZSBkaWZmbWVyZ2UgZWNtZXJnZSBlbWVyZ2Uga2RpZmYzIG1lbGQgb3BlbmRpZmYKKwkJCXRrZGlmZiB2aW1kaWZmIGd2aW1kaWZmIHh4ZGlmZiBhcmF4aXMgcDRtZXJnZSBiYyBjb2RlY29tcGFyZQorIgorCitfZ2l0X2RpZmZ0b29sICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwljYXNlICIkY3VyIiBpbgorCS0tdG9vbD0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZXRvb2xzX2NvbW1vbiBrb21wYXJlIiAiIiAiJHtjdXIjIy0tdG9vbD19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiLS1jYWNoZWQgLS1zdGFnZWQgLS1waWNrYXhlLWFsbCAtLXBpY2theGUtcmVnZXgKKwkJCS0tYmFzZSAtLW91cnMgLS10aGVpcnMKKwkJCS0tbm8tcmVuYW1lcyAtLWRpZmYtZmlsdGVyPSAtLWZpbmQtY29waWVzLWhhcmRlcgorCQkJLS1yZWxhdGl2ZSAtLWlnbm9yZS1zdWJtb2R1bGVzCisJCQktLXRvb2w9IgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmV2bGlzdF9maWxlCit9CisKK19fZ2l0X2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcz0ieWVzIG9uLWRlbWFuZCBubyIKKworX19naXRfZmV0Y2hfb3B0aW9ucz0iCisJLS1xdWlldCAtLXZlcmJvc2UgLS1hcHBlbmQgLS11cGxvYWQtcGFjayAtLWZvcmNlIC0ta2VlcCAtLWRlcHRoPQorCS0tdGFncyAtLW5vLXRhZ3MgLS1hbGwgLS1wcnVuZSAtLWRyeS1ydW4gLS1yZWN1cnNlLXN1Ym1vZHVsZXM9CisiCisKK19naXRfZmV0Y2ggKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tcmVjdXJzZS1zdWJtb2R1bGVzPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcyIgIiIgIiR7Y3VyIyMtLXJlY3Vyc2Utc3VibW9kdWxlcz19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2ZldGNoX29wdGlvbnMiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZW1vdGVfb3JfcmVmc3BlYworfQorCitfX2dpdF9mb3JtYXRfcGF0Y2hfb3B0aW9ucz0iCisJLS1zdGRvdXQgLS1hdHRhY2ggLS1uby1hdHRhY2ggLS10aHJlYWQgLS10aHJlYWQ9IC0tbm8tdGhyZWFkCisJLS1udW1iZXJlZCAtLXN0YXJ0LW51bWJlciAtLW51bWJlcmVkLWZpbGVzIC0ta2VlcC1zdWJqZWN0IC0tc2lnbm9mZgorCS0tc2lnbmF0dXJlIC0tbm8tc2lnbmF0dXJlIC0taW4tcmVwbHktdG89IC0tY2M9IC0tZnVsbC1pbmRleCAtLWJpbmFyeQorCS0tbm90IC0tYWxsIC0tY292ZXItbGV0dGVyIC0tbm8tcHJlZml4IC0tc3JjLXByZWZpeD0gLS1kc3QtcHJlZml4PQorCS0taW5saW5lIC0tc3VmZml4PSAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSAtLXN1YmplY3QtcHJlZml4PQorCS0tb3V0cHV0LWRpcmVjdG9yeSAtLXJlcm9sbC1jb3VudCAtLXRvPSAtLXF1aWV0IC0tbm90ZXMKKyIKKworX2dpdF9mb3JtYXRfcGF0Y2ggKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tdGhyZWFkPSopCisJCV9fZ2l0Y29tcCAiCisJCQlkZWVwIHNoYWxsb3cKKwkJCSIgIiIgIiR7Y3VyIyMtLXRocmVhZD19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2Zvcm1hdF9wYXRjaF9vcHRpb25zIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmV2bGlzdAorfQorCitfZ2l0X2ZzY2sgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICIKKwkJCS0tdGFncyAtLXJvb3QgLS11bnJlYWNoYWJsZSAtLWNhY2hlIC0tbm8tcmVmbG9ncyAtLWZ1bGwKKwkJCS0tc3RyaWN0IC0tdmVyYm9zZSAtLWxvc3QtZm91bmQKKwkJCSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworfQorCitfZ2l0X2djICgpCit7CisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiLS1wcnVuZSAtLWFnZ3Jlc3NpdmUiCisJCXJldHVybgorCQk7OworCWVzYWMKK30KKworX2dpdF9naXRrICgpCit7CisJX2dpdGsKK30KKworX19naXRfbWF0Y2hfY3RhZygpIHsKKwlhd2sgIi9eJHsxLy9cLy9cXC99LyB7IHByaW50IFwkMSB9IiAiJDIiCit9CisKK19naXRfZ3JlcCAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWNhY2hlZAorCQkJLS10ZXh0IC0taWdub3JlLWNhc2UgLS13b3JkLXJlZ2V4cCAtLWludmVydC1tYXRjaAorCQkJLS1mdWxsLW5hbWUgLS1saW5lLW51bWJlcgorCQkJLS1leHRlbmRlZC1yZWdleHAgLS1iYXNpYy1yZWdleHAgLS1maXhlZC1zdHJpbmdzCisJCQktLXBlcmwtcmVnZXhwCisJCQktLWZpbGVzLXdpdGgtbWF0Y2hlcyAtLW5hbWUtb25seQorCQkJLS1maWxlcy13aXRob3V0LW1hdGNoCisJCQktLW1heC1kZXB0aAorCQkJLS1jb3VudAorCQkJLS1hbmQgLS1vciAtLW5vdCAtLWFsbC1tYXRjaAorCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwljYXNlICIkY3dvcmQsJHByZXYiIGluCisJMiwqfCosLSopCisJCWlmIHRlc3QgLXIgdGFnczsgdGhlbgorCQkJX19naXRjb21wX25sICIkKF9fZ2l0X21hdGNoX2N0YWcgIiRjdXIiIHRhZ3MpIgorCQkJcmV0dXJuCisJCWZpCisJCTs7CisJZXNhYworCisJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorfQorCitfZ2l0X2hlbHAgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICItLWFsbCAtLWluZm8gLS1tYW4gLS13ZWIiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wdXRlX2FsbF9jb21tYW5kcworCV9fZ2l0Y29tcCAiJF9fZ2l0X2FsbF9jb21tYW5kcyAkKF9fZ2l0X2FsaWFzZXMpCisJCWF0dHJpYnV0ZXMgY2xpIGNvcmUtdHV0b3JpYWwgY3ZzLW1pZ3JhdGlvbgorCQlkaWZmY29yZSBnaXRrIGdsb3NzYXJ5IGhvb2tzIGlnbm9yZSBtb2R1bGVzCisJCW5hbWVzcGFjZXMgcmVwb3NpdG9yeS1sYXlvdXQgdHV0b3JpYWwgdHV0b3JpYWwtMgorCQl3b3JrZmxvd3MKKwkJIgorfQorCitfZ2l0X2luaXQgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tc2hhcmVkPSopCisJCV9fZ2l0Y29tcCAiCisJCQlmYWxzZSB0cnVlIHVtYXNrIGdyb3VwIGFsbCB3b3JsZCBldmVyeWJvZHkKKwkJCSIgIiIgIiR7Y3VyIyMtLXNoYXJlZD19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiLS1xdWlldCAtLWJhcmUgLS10ZW1wbGF0ZT0gLS1zaGFyZWQgLS1zaGFyZWQ9IgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCit9CisKK19naXRfbHNfZmlsZXMgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICItLWNhY2hlZCAtLWRlbGV0ZWQgLS1tb2RpZmllZCAtLW90aGVycyAtLWlnbm9yZWQKKwkJCS0tc3RhZ2UgLS1kaXJlY3RvcnkgLS1uby1lbXB0eS1kaXJlY3RvcnkgLS11bm1lcmdlZAorCQkJLS1raWxsZWQgLS1leGNsdWRlPSAtLWV4Y2x1ZGUtZnJvbT0KKwkJCS0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PSAtLWV4Y2x1ZGUtc3RhbmRhcmQKKwkJCS0tZXJyb3ItdW5tYXRjaCAtLXdpdGgtdHJlZT0gLS1mdWxsLW5hbWUKKwkJCS0tYWJicmV2IC0taWdub3JlZCAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeQorCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwkjIFhYWCBpZ25vcmUgb3B0aW9ucyBsaWtlIC0tbW9kaWZpZWQgYW5kIGFsd2F5cyBzdWdnZXN0IGFsbCBjYWNoZWQKKwkjIGZpbGVzLgorCV9fZ2l0X2NvbXBsZXRlX2luZGV4X2ZpbGUgIi0tY2FjaGVkIgorfQorCitfZ2l0X2xzX3JlbW90ZSAoKQoreworCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZW1vdGVzKSIKK30KKworX2dpdF9sc190cmVlICgpCit7CisJX19naXRfY29tcGxldGVfZmlsZQorfQorCisjIE9wdGlvbnMgdGhhdCBnbyB3ZWxsIGZvciBsb2csIHNob3J0bG9nIGFuZCBnaXRrCitfX2dpdF9sb2dfY29tbW9uX29wdGlvbnM9IgorCS0tbm90IC0tYWxsCisJLS1icmFuY2hlcyAtLXRhZ3MgLS1yZW1vdGVzCisJLS1maXJzdC1wYXJlbnQgLS1tZXJnZXMgLS1uby1tZXJnZXMKKwktLW1heC1jb3VudD0KKwktLW1heC1hZ2U9IC0tc2luY2U9IC0tYWZ0ZXI9CisJLS1taW4tYWdlPSAtLXVudGlsPSAtLWJlZm9yZT0KKwktLW1pbi1wYXJlbnRzPSAtLW1heC1wYXJlbnRzPQorCS0tbm8tbWluLXBhcmVudHMgLS1uby1tYXgtcGFyZW50cworIgorIyBPcHRpb25zIHRoYXQgZ28gd2VsbCBmb3IgbG9nIGFuZCBnaXRrIChub3Qgc2hvcnRsb2cpCitfX2dpdF9sb2dfZ2l0a19vcHRpb25zPSIKKwktLWRlbnNlIC0tc3BhcnNlIC0tZnVsbC1oaXN0b3J5CisJLS1zaW1wbGlmeS1tZXJnZXMgLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uCisJLS1sZWZ0LXJpZ2h0IC0tbm90ZXMgLS1uby1ub3RlcworIgorIyBPcHRpb25zIHRoYXQgZ28gd2VsbCBmb3IgbG9nIGFuZCBzaG9ydGxvZyAobm90IGdpdGspCitfX2dpdF9sb2dfc2hvcnRsb2dfb3B0aW9ucz0iCisJLS1hdXRob3I9IC0tY29tbWl0dGVyPSAtLWdyZXA9CisJLS1hbGwtbWF0Y2ggLS1pbnZlcnQtZ3JlcAorIgorCitfX2dpdF9sb2dfcHJldHR5X2Zvcm1hdHM9Im9uZWxpbmUgc2hvcnQgbWVkaXVtIGZ1bGwgZnVsbGVyIGVtYWlsIHJhdyBmb3JtYXQ6IgorX19naXRfbG9nX2RhdGVfZm9ybWF0cz0icmVsYXRpdmUgaXNvODYwMSByZmMyODIyIHNob3J0IGxvY2FsIGRlZmF1bHQgcmF3IgorCitfZ2l0X2xvZyAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJbG9jYWwgZz0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbCkiCisJbG9jYWwgbWVyZ2U9IiIKKwlpZiBbIC1mICIkZy9NRVJHRV9IRUFEIiBdOyB0aGVuCisJCW1lcmdlPSItLW1lcmdlIgorCWZpCisJY2FzZSAiJGN1ciIgaW4KKwktLXByZXR0eT0qfC0tZm9ybWF0PSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2xvZ19wcmV0dHlfZm9ybWF0cyAkKF9fZ2l0X3ByZXR0eV9hbGlhc2VzKQorCQkJIiAiIiAiJHtjdXIjKj19IgorCQlyZXR1cm4KKwkJOzsKKwktLWRhdGU9KikKKwkJX19naXRjb21wICIkX19naXRfbG9nX2RhdGVfZm9ybWF0cyIgIiIgIiR7Y3VyIyMtLWRhdGU9fSIKKwkJcmV0dXJuCisJCTs7CisJLS1kZWNvcmF0ZT0qKQorCQlfX2dpdGNvbXAgImZ1bGwgc2hvcnQgbm8iICIiICIke2N1ciMjLS1kZWNvcmF0ZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQkkX19naXRfbG9nX2NvbW1vbl9vcHRpb25zCisJCQkkX19naXRfbG9nX3Nob3J0bG9nX29wdGlvbnMKKwkJCSRfX2dpdF9sb2dfZ2l0a19vcHRpb25zCisJCQktLXJvb3QgLS10b3BvLW9yZGVyIC0tZGF0ZS1vcmRlciAtLXJldmVyc2UKKwkJCS0tZm9sbG93IC0tZnVsbC1kaWZmCisJCQktLWFiYnJldi1jb21taXQgLS1hYmJyZXY9CisJCQktLXJlbGF0aXZlLWRhdGUgLS1kYXRlPQorCQkJLS1wcmV0dHk9IC0tZm9ybWF0PSAtLW9uZWxpbmUKKwkJCS0tc2hvdy1zaWduYXR1cmUKKwkJCS0tY2hlcnJ5LXBpY2sKKwkJCS0tZ3JhcGgKKwkJCS0tZGVjb3JhdGUgLS1kZWNvcmF0ZT0KKwkJCS0td2Fsay1yZWZsb2dzCisJCQktLXBhcmVudHMgLS1jaGlsZHJlbgorCQkJJG1lcmdlCisJCQkkX19naXRfZGlmZl9jb21tb25fb3B0aW9ucworCQkJLS1waWNrYXhlLWFsbCAtLXBpY2theGUtcmVnZXgKKwkJCSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0X2NvbXBsZXRlX3Jldmxpc3QKK30KKworIyBDb21tb24gbWVyZ2Ugb3B0aW9ucyBzaGFyZWQgYnkgZ2l0LW1lcmdlKDEpIGFuZCBnaXQtcHVsbCgxKS4KK19fZ2l0X21lcmdlX29wdGlvbnM9IgorCS0tbm8tY29tbWl0IC0tbm8tc3RhdCAtLWxvZyAtLW5vLWxvZyAtLXNxdWFzaCAtLXN0cmF0ZWd5CisJLS1jb21taXQgLS1zdGF0IC0tbm8tc3F1YXNoIC0tZmYgLS1uby1mZiAtLWZmLW9ubHkgLS1lZGl0IC0tbm8tZWRpdAorCS0tdmVyaWZ5LXNpZ25hdHVyZXMgLS1uby12ZXJpZnktc2lnbmF0dXJlcyAtLWdwZy1zaWduCisJLS1xdWlldCAtLXZlcmJvc2UgLS1wcm9ncmVzcyAtLW5vLXByb2dyZXNzCisiCisKK19naXRfbWVyZ2UgKCkKK3sKKwlfX2dpdF9jb21wbGV0ZV9zdHJhdGVneSAmJiByZXR1cm4KKworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZV9vcHRpb25zCisJCQktLXJlcmVyZS1hdXRvdXBkYXRlIC0tbm8tcmVyZXJlLWF1dG91cGRhdGUgLS1hYm9ydCIKKwkJcmV0dXJuCisJZXNhYworCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKK30KKworX2dpdF9tZXJnZXRvb2wgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tdG9vbD0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZXRvb2xzX2NvbW1vbiB0b3J0b2lzZW1lcmdlIiAiIiAiJHtjdXIjIy0tdG9vbD19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiLS10b29sPSIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworfQorCitfZ2l0X21lcmdlX2Jhc2UgKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICItLW9jdG9wdXMgLS1pbmRlcGVuZGVudCAtLWlzLWFuY2VzdG9yIC0tZm9yay1wb2ludCIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKK30KKworX2dpdF9tdiAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIi0tZHJ5LXJ1biIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCisJaWYgWyAkKF9fZ2l0X2NvdW50X2FyZ3VtZW50cyAibXYiKSAtZ3QgMCBdOyB0aGVuCisJCSMgV2UgbmVlZCB0byBzaG93IGJvdGggY2FjaGVkIGFuZCB1bnRyYWNrZWQgZmlsZXMgKGluY2x1ZGluZworCQkjIGVtcHR5IGRpcmVjdG9yaWVzKSBzaW5jZSB0aGlzIG1heSBub3QgYmUgdGhlIGxhc3QgYXJndW1lbnQuCisJCV9fZ2l0X2NvbXBsZXRlX2luZGV4X2ZpbGUgIi0tY2FjaGVkIC0tb3RoZXJzIC0tZGlyZWN0b3J5IgorCWVsc2UKKwkJX19naXRfY29tcGxldGVfaW5kZXhfZmlsZSAiLS1jYWNoZWQiCisJZmkKK30KKworX2dpdF9uYW1lX3JldiAoKQoreworCV9fZ2l0Y29tcCAiLS10YWdzIC0tYWxsIC0tc3RkaW4iCit9CisKK19naXRfbm90ZXMgKCkKK3sKKwlsb2NhbCBzdWJjb21tYW5kcz0nYWRkIGFwcGVuZCBjb3B5IGVkaXQgbGlzdCBwcnVuZSByZW1vdmUgc2hvdycKKwlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiCisKKwljYXNlICIkc3ViY29tbWFuZCwkY3VyIiBpbgorCSwtLSopCisJCV9fZ2l0Y29tcCAnLS1yZWYnCisJCTs7CisJLCopCisJCWNhc2UgIiRwcmV2IiBpbgorCQktLXJlZikKKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKKwkJCTs7CisJCSopCisJCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyAtLXJlZiIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlhZGQsLS1yZXVzZS1tZXNzYWdlPSp8YXBwZW5kLC0tcmV1c2UtbWVzc2FnZT0qfFwKKwlhZGQsLS1yZWVkaXQtbWVzc2FnZT0qfGFwcGVuZCwtLXJlZWRpdC1tZXNzYWdlPSopCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIgIiIgIiR7Y3VyIyo9fSIKKwkJOzsKKwlhZGQsLS0qfGFwcGVuZCwtLSopCisJCV9fZ2l0Y29tcCAnLS1maWxlPSAtLW1lc3NhZ2U9IC0tcmVlZGl0LW1lc3NhZ2U9CisJCQkJLS1yZXVzZS1tZXNzYWdlPScKKwkJOzsKKwljb3B5LC0tKikKKwkJX19naXRjb21wICctLXN0ZGluJworCQk7OworCXBydW5lLC0tKikKKwkJX19naXRjb21wICctLWRyeS1ydW4gLS12ZXJib3NlJworCQk7OworCXBydW5lLCopCisJCTs7CisJKikKKwkJY2FzZSAiJHByZXYiIGluCisJCS1tfC1GKQorCQkJOzsKKwkJKikKKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwllc2FjCit9CisKK19naXRfcHVsbCAoKQoreworCV9fZ2l0X2NvbXBsZXRlX3N0cmF0ZWd5ICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLXJlY3Vyc2Utc3VibW9kdWxlcz0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXMiICIiICIke2N1ciMjLS1yZWN1cnNlLXN1Ym1vZHVsZXM9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS1yZWJhc2UgLS1uby1yZWJhc2UKKwkJCSRfX2dpdF9tZXJnZV9vcHRpb25zCisJCQkkX19naXRfZmV0Y2hfb3B0aW9ucworCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZW1vdGVfb3JfcmVmc3BlYworfQorCitfX2dpdF9wdXNoX3JlY3Vyc2Vfc3VibW9kdWxlcz0iY2hlY2sgb24tZGVtYW5kIgorCitfX2dpdF9jb21wbGV0ZV9mb3JjZV93aXRoX2xlYXNlICgpCit7CisJbG9jYWwgY3VyXz0kMQorCisJY2FzZSAiJGN1cl8iIGluCisJLS0qPSkKKwkJOzsKKwkqOiopCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIgIiIgIiR7Y3VyXyMqOn0iCisJCTs7CisJKikKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIiAiIiAiJGN1cl8iCisJCTs7CisJZXNhYworfQorCitfZ2l0X3B1c2ggKCkKK3sKKwljYXNlICIkcHJldiIgaW4KKwktLXJlcG8pCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZW1vdGVzKSIKKwkJcmV0dXJuCisJCTs7CisJLS1yZWN1cnNlLXN1Ym1vZHVsZXMpCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3B1c2hfcmVjdXJzZV9zdWJtb2R1bGVzIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJY2FzZSAiJGN1ciIgaW4KKwktLXJlcG89KikKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIiAiIiAiJHtjdXIjIy0tcmVwbz19IgorCQlyZXR1cm4KKwkJOzsKKwktLXJlY3Vyc2Utc3VibW9kdWxlcz0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9wdXNoX3JlY3Vyc2Vfc3VibW9kdWxlcyIgIiIgIiR7Y3VyIyMtLXJlY3Vyc2Utc3VibW9kdWxlcz19IgorCQlyZXR1cm4KKwkJOzsKKwktLWZvcmNlLXdpdGgtbGVhc2U9KikKKwkJX19naXRfY29tcGxldGVfZm9yY2Vfd2l0aF9sZWFzZSAiJHtjdXIjIy0tZm9yY2Utd2l0aC1sZWFzZT19IgorCQlyZXR1cm4KKwkJOzsKKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWFsbCAtLW1pcnJvciAtLXRhZ3MgLS1kcnktcnVuIC0tZm9yY2UgLS12ZXJib3NlCisJCQktLXF1aWV0IC0tcHJ1bmUgLS1kZWxldGUgLS1mb2xsb3ctdGFncworCQkJLS1yZWNlaXZlLXBhY2s9IC0tcmVwbz0gLS1zZXQtdXBzdHJlYW0KKwkJCS0tZm9yY2Utd2l0aC1sZWFzZSAtLWZvcmNlLXdpdGgtbGVhc2U9IC0tcmVjdXJzZS1zdWJtb2R1bGVzPQorCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZW1vdGVfb3JfcmVmc3BlYworfQorCitfZ2l0X3JlYmFzZSAoKQoreworCWxvY2FsIGRpcj0iJChfX2dpdGRpcikiCisJaWYgWyAtZiAiJGRpciIvcmViYXNlLW1lcmdlL2ludGVyYWN0aXZlIF07IHRoZW4KKwkJX19naXRjb21wICItLWNvbnRpbnVlIC0tc2tpcCAtLWFib3J0IC0tZWRpdC10b2RvIgorCQlyZXR1cm4KKwllbGlmIFsgLWQgIiRkaXIiL3JlYmFzZS1hcHBseSBdIHx8IFsgLWQgIiRkaXIiL3JlYmFzZS1tZXJnZSBdOyB0aGVuCisJCV9fZ2l0Y29tcCAiLS1jb250aW51ZSAtLXNraXAgLS1hYm9ydCIKKwkJcmV0dXJuCisJZmkKKwlfX2dpdF9jb21wbGV0ZV9zdHJhdGVneSAmJiByZXR1cm4KKwljYXNlICIkY3VyIiBpbgorCS0td2hpdGVzcGFjZT0qKQorCQlfX2dpdGNvbXAgIiRfX2dpdF93aGl0ZXNwYWNlbGlzdCIgIiIgIiR7Y3VyIyMtLXdoaXRlc3BhY2U9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS1vbnRvIC0tbWVyZ2UgLS1zdHJhdGVneSAtLWludGVyYWN0aXZlCisJCQktLXByZXNlcnZlLW1lcmdlcyAtLXN0YXQgLS1uby1zdGF0CisJCQktLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlIC0taWdub3JlLWRhdGUKKwkJCS0taWdub3JlLXdoaXRlc3BhY2UgLS13aGl0ZXNwYWNlPQorCQkJLS1hdXRvc3F1YXNoIC0tZm9yay1wb2ludCAtLW5vLWZvcmstcG9pbnQKKwkJCS0tYXV0b3N0YXNoCisJCQkiCisKKwkJcmV0dXJuCisJZXNhYworCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKK30KKworX2dpdF9yZWZsb2cgKCkKK3sKKwlsb2NhbCBzdWJjb21tYW5kcz0ic2hvdyBkZWxldGUgZXhwaXJlIgorCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKKworCWlmIFsgLXogIiRzdWJjb21tYW5kIiBdOyB0aGVuCisJCV9fZ2l0Y29tcCAiJHN1YmNvbW1hbmRzIgorCWVsc2UKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlZnMpIgorCWZpCit9CisKK19fZ2l0X3NlbmRfZW1haWxfY29uZmlybV9vcHRpb25zPSJhbHdheXMgbmV2ZXIgYXV0byBjYyBjb21wb3NlIgorX19naXRfc2VuZF9lbWFpbF9zdXBwcmVzc2NjX29wdGlvbnM9ImF1dGhvciBzZWxmIGNjIGJvZHljYyBzb2IgY2NjbWQgYm9keSBhbGwiCisKK19naXRfc2VuZF9lbWFpbCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS1jb25maXJtPSopCisJCV9fZ2l0Y29tcCAiCisJCQkkX19naXRfc2VuZF9lbWFpbF9jb25maXJtX29wdGlvbnMKKwkJCSIgIiIgIiR7Y3VyIyMtLWNvbmZpcm09fSIKKwkJcmV0dXJuCisJCTs7CisJLS1zdXBwcmVzcy1jYz0qKQorCQlfX2dpdGNvbXAgIgorCQkJJF9fZ2l0X3NlbmRfZW1haWxfc3VwcHJlc3NjY19vcHRpb25zCisJCQkiICIiICIke2N1ciMjLS1zdXBwcmVzcy1jYz19IgorCisJCXJldHVybgorCQk7OworCS0tc210cC1lbmNyeXB0aW9uPSopCisJCV9fZ2l0Y29tcCAic3NsIHRscyIgIiIgIiR7Y3VyIyMtLXNtdHAtZW5jcnlwdGlvbj19IgorCQlyZXR1cm4KKwkJOzsKKwktLXRocmVhZD0qKQorCQlfX2dpdGNvbXAgIgorCQkJZGVlcCBzaGFsbG93CisJCQkiICIiICIke2N1ciMjLS10aHJlYWQ9fSIKKwkJcmV0dXJuCisJCTs7CisJLS0qKQorCQlfX2dpdGNvbXAgIi0tYW5ub3RhdGUgLS1iY2MgLS1jYyAtLWNjLWNtZCAtLWNoYWluLXJlcGx5LXRvCisJCQktLWNvbXBvc2UgLS1jb25maXJtPSAtLWRyeS1ydW4gLS1lbnZlbG9wZS1zZW5kZXIKKwkJCS0tZnJvbSAtLWlkZW50aXR5CisJCQktLWluLXJlcGx5LXRvIC0tbm8tY2hhaW4tcmVwbHktdG8gLS1uby1zaWduZWQtb2ZmLWJ5LWNjCisJCQktLW5vLXN1cHByZXNzLWZyb20gLS1uby10aHJlYWQgLS1xdWlldAorCQkJLS1zaWduZWQtb2ZmLWJ5LWNjIC0tc210cC1wYXNzIC0tc210cC1zZXJ2ZXIKKwkJCS0tc210cC1zZXJ2ZXItcG9ydCAtLXNtdHAtZW5jcnlwdGlvbj0gLS1zbXRwLXVzZXIKKwkJCS0tc3ViamVjdCAtLXN1cHByZXNzLWNjPSAtLXN1cHByZXNzLWZyb20gLS10aHJlYWQgLS10bworCQkJLS12YWxpZGF0ZSAtLW5vLXZhbGlkYXRlCisJCQkkX19naXRfZm9ybWF0X3BhdGNoX29wdGlvbnMiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK19naXRfc3RhZ2UgKCkKK3sKKwlfZ2l0X2FkZAorfQorCitfX2dpdF9jb25maWdfZ2V0X3NldF92YXJpYWJsZXMgKCkKK3sKKwlsb2NhbCBwcmV2d29yZCB3b3JkIGNvbmZpZ19maWxlPSBjPSRjd29yZAorCXdoaWxlIFsgJGMgLWd0IDEgXTsgZG8KKwkJd29yZD0iJHt3b3Jkc1tjXX0iCisJCWNhc2UgIiR3b3JkIiBpbgorCQktLXN5c3RlbXwtLWdsb2JhbHwtLWxvY2FsfC0tZmlsZT0qKQorCQkJY29uZmlnX2ZpbGU9IiR3b3JkIgorCQkJYnJlYWsKKwkJCTs7CisJCS1mfC0tZmlsZSkKKwkJCWNvbmZpZ19maWxlPSIkd29yZCAkcHJldndvcmQiCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlwcmV2d29yZD0kd29yZAorCQljPSQoKC0tYykpCisJZG9uZQorCisJZ2l0IC0tZ2l0LWRpcj0iJChfX2dpdGRpcikiIGNvbmZpZyAkY29uZmlnX2ZpbGUgLS1uYW1lLW9ubHkgLS1saXN0IDI+L2Rldi9udWxsCit9CisKK19naXRfY29uZmlnICgpCit7CisJY2FzZSAiJHByZXYiIGluCisJYnJhbmNoLioucmVtb3RlfGJyYW5jaC4qLnB1c2hyZW1vdGUpCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZW1vdGVzKSIKKwkJcmV0dXJuCisJCTs7CisJYnJhbmNoLioubWVyZ2UpCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKKwkJcmV0dXJuCisJCTs7CisJYnJhbmNoLioucmViYXNlKQorCQlfX2dpdGNvbXAgImZhbHNlIHRydWUiCisJCXJldHVybgorCQk7OworCXJlbW90ZS5wdXNoZGVmYXVsdCkKKwkJX19naXRjb21wX25sICIkKF9fZ2l0X3JlbW90ZXMpIgorCQlyZXR1cm4KKwkJOzsKKwlyZW1vdGUuKi5mZXRjaCkKKwkJbG9jYWwgcmVtb3RlPSIke3ByZXYjcmVtb3RlLn0iCisJCXJlbW90ZT0iJHtyZW1vdGUlLmZldGNofSIKKwkJaWYgWyAteiAiJGN1ciIgXTsgdGhlbgorCQkJX19naXRjb21wX25sICJyZWZzL2hlYWRzLyIgIiIgIiIgIiIKKwkJCXJldHVybgorCQlmaQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmc19yZW1vdGVzICIkcmVtb3RlIikiCisJCXJldHVybgorCQk7OworCXJlbW90ZS4qLnB1c2gpCisJCWxvY2FsIHJlbW90ZT0iJHtwcmV2I3JlbW90ZS59IgorCQlyZW1vdGU9IiR7cmVtb3RlJS5wdXNofSIKKwkJX19naXRjb21wX25sICIkKGdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBcCisJCQlmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUocmVmbmFtZSk6JShyZWZuYW1lKScgXAorCQkJcmVmcy9oZWFkcykiCisJCXJldHVybgorCQk7OworCXB1bGwudHdvaGVhZHxwdWxsLm9jdG9wdXMpCisJCV9fZ2l0X2NvbXB1dGVfbWVyZ2Vfc3RyYXRlZ2llcworCQlfX2dpdGNvbXAgIiRfX2dpdF9tZXJnZV9zdHJhdGVnaWVzIgorCQlyZXR1cm4KKwkJOzsKKwljb2xvci5icmFuY2h8Y29sb3IuZGlmZnxjb2xvci5pbnRlcmFjdGl2ZXxcCisJY29sb3Iuc2hvd2JyYW5jaHxjb2xvci5zdGF0dXN8Y29sb3IudWkpCisJCV9fZ2l0Y29tcCAiYWx3YXlzIG5ldmVyIGF1dG8iCisJCXJldHVybgorCQk7OworCWNvbG9yLnBhZ2VyKQorCQlfX2dpdGNvbXAgImZhbHNlIHRydWUiCisJCXJldHVybgorCQk7OworCWNvbG9yLiouKikKKwkJX19naXRjb21wICIKKwkJCW5vcm1hbCBibGFjayByZWQgZ3JlZW4geWVsbG93IGJsdWUgbWFnZW50YSBjeWFuIHdoaXRlCisJCQlib2xkIGRpbSB1bCBibGluayByZXZlcnNlCisJCQkiCisJCXJldHVybgorCQk7OworCWRpZmYuc3VibW9kdWxlKQorCQlfX2dpdGNvbXAgImxvZyBzaG9ydCIKKwkJcmV0dXJuCisJCTs7CisJaGVscC5mb3JtYXQpCisJCV9fZ2l0Y29tcCAibWFuIGluZm8gd2ViIGh0bWwiCisJCXJldHVybgorCQk7OworCWxvZy5kYXRlKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9sb2dfZGF0ZV9mb3JtYXRzIgorCQlyZXR1cm4KKwkJOzsKKwlzZW5kZW1haWwuYWxpYXNlc2ZpbGV0eXBlKQorCQlfX2dpdGNvbXAgIm11dHQgbWFpbHJjIHBpbmUgZWxtIGdudXMiCisJCXJldHVybgorCQk7OworCXNlbmRlbWFpbC5jb25maXJtKQorCQlfX2dpdGNvbXAgIiRfX2dpdF9zZW5kX2VtYWlsX2NvbmZpcm1fb3B0aW9ucyIKKwkJcmV0dXJuCisJCTs7CisJc2VuZGVtYWlsLnN1cHByZXNzY2MpCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X3NlbmRfZW1haWxfc3VwcHJlc3NjY19vcHRpb25zIgorCQlyZXR1cm4KKwkJOzsKKwlzZW5kZW1haWwudHJhbnNmZXJlbmNvZGluZykKKwkJX19naXRjb21wICI3Yml0IDhiaXQgcXVvdGVkLXByaW50YWJsZSBiYXNlNjQiCisJCXJldHVybgorCQk7OworCS0tZ2V0fC0tZ2V0LWFsbHwtLXVuc2V0fC0tdW5zZXQtYWxsKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfY29uZmlnX2dldF9zZXRfdmFyaWFibGVzKSIKKwkJcmV0dXJuCisJCTs7CisJKi4qKQorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLXN5c3RlbSAtLWdsb2JhbCAtLWxvY2FsIC0tZmlsZT0KKwkJCS0tbGlzdCAtLXJlcGxhY2UtYWxsCisJCQktLWdldCAtLWdldC1hbGwgLS1nZXQtcmVnZXhwCisJCQktLWFkZCAtLXVuc2V0IC0tdW5zZXQtYWxsCisJCQktLXJlbW92ZS1zZWN0aW9uIC0tcmVuYW1lLXNlY3Rpb24KKwkJCS0tbmFtZS1vbmx5CisJCQkiCisJCXJldHVybgorCQk7OworCWJyYW5jaC4qLiopCisJCWxvY2FsIHBmeD0iJHtjdXIlLip9LiIgY3VyXz0iJHtjdXIjIyoufSIKKwkJX19naXRjb21wICJyZW1vdGUgcHVzaHJlbW90ZSBtZXJnZSBtZXJnZW9wdGlvbnMgcmViYXNlIiAiJHBmeCIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlicmFuY2guKikKKwkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIiBjdXJfPSIke2N1ciMqLn0iCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9oZWFkcykiICIkcGZ4IiAiJGN1cl8iICIuIgorCQlfX2dpdGNvbXBfbmxfYXBwZW5kICQnYXV0b3NldHVwbWVyZ2VcbmF1dG9zZXR1cHJlYmFzZVxuJyAiJHBmeCIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlndWl0b29sLiouKikKKwkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIiBjdXJfPSIke2N1ciMjKi59IgorCQlfX2dpdGNvbXAgIgorCQkJYXJncHJvbXB0IGNtZCBjb25maXJtIG5lZWRzZmlsZSBub2NvbnNvbGUgbm9yZXNjYW4KKwkJCXByb21wdCByZXZwcm9tcHQgcmV2dW5tZXJnZWQgdGl0bGUKKwkJCSIgIiRwZngiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJZGlmZnRvb2wuKi4qKQorCQlsb2NhbCBwZng9IiR7Y3VyJS4qfS4iIGN1cl89IiR7Y3VyIyMqLn0iCisJCV9fZ2l0Y29tcCAiY21kIHBhdGgiICIkcGZ4IiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCW1hbi4qLiopCisJCWxvY2FsIHBmeD0iJHtjdXIlLip9LiIgY3VyXz0iJHtjdXIjIyoufSIKKwkJX19naXRjb21wICJjbWQgcGF0aCIgIiRwZngiICIkY3VyXyIKKwkJcmV0dXJuCisJCTs7CisJbWVyZ2V0b29sLiouKikKKwkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIiBjdXJfPSIke2N1ciMjKi59IgorCQlfX2dpdGNvbXAgImNtZCBwYXRoIHRydXN0RXhpdENvZGUiICIkcGZ4IiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCXBhZ2VyLiopCisJCWxvY2FsIHBmeD0iJHtjdXIlLip9LiIgY3VyXz0iJHtjdXIjKi59IgorCQlfX2dpdF9jb21wdXRlX2FsbF9jb21tYW5kcworCQlfX2dpdGNvbXBfbmwgIiRfX2dpdF9hbGxfY29tbWFuZHMiICIkcGZ4IiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCXJlbW90ZS4qLiopCisJCWxvY2FsIHBmeD0iJHtjdXIlLip9LiIgY3VyXz0iJHtjdXIjIyoufSIKKwkJX19naXRjb21wICIKKwkJCXVybCBwcm94eSBmZXRjaCBwdXNoIG1pcnJvciBza2lwRGVmYXVsdFVwZGF0ZQorCQkJcmVjZWl2ZXBhY2sgdXBsb2FkcGFjayB0YWdvcHQgcHVzaHVybAorCQkJIiAiJHBmeCIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwlyZW1vdGUuKikKKwkJbG9jYWwgcGZ4PSIke2N1ciUuKn0uIiBjdXJfPSIke2N1ciMqLn0iCisJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZW1vdGVzKSIgIiRwZngiICIkY3VyXyIgIi4iCisJCV9fZ2l0Y29tcF9ubF9hcHBlbmQgInB1c2hkZWZhdWx0IiAiJHBmeCIgIiRjdXJfIgorCQlyZXR1cm4KKwkJOzsKKwl1cmwuKi4qKQorCQlsb2NhbCBwZng9IiR7Y3VyJS4qfS4iIGN1cl89IiR7Y3VyIyMqLn0iCisJCV9fZ2l0Y29tcCAiaW5zdGVhZE9mIHB1c2hJbnN0ZWFkT2YiICIkcGZ4IiAiJGN1cl8iCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdGNvbXAgIgorCQlhZGQuaWdub3JlRXJyb3JzCisJCWFkdmljZS5jb21taXRCZWZvcmVNZXJnZQorCQlhZHZpY2UuZGV0YWNoZWRIZWFkCisJCWFkdmljZS5pbXBsaWNpdElkZW50aXR5CisJCWFkdmljZS5wdXNoTm9uRmFzdEZvcndhcmQKKwkJYWR2aWNlLnJlc29sdmVDb25mbGljdAorCQlhZHZpY2Uuc3RhdHVzSGludHMKKwkJYWxpYXMuCisJCWFtLmtlZXBjcgorCQlhcHBseS5pZ25vcmV3aGl0ZXNwYWNlCisJCWFwcGx5LndoaXRlc3BhY2UKKwkJYnJhbmNoLmF1dG9zZXR1cG1lcmdlCisJCWJyYW5jaC5hdXRvc2V0dXByZWJhc2UKKwkJYnJvd3Nlci4KKwkJY2xlYW4ucmVxdWlyZUZvcmNlCisJCWNvbG9yLmJyYW5jaAorCQljb2xvci5icmFuY2guY3VycmVudAorCQljb2xvci5icmFuY2gubG9jYWwKKwkJY29sb3IuYnJhbmNoLnBsYWluCisJCWNvbG9yLmJyYW5jaC5yZW1vdGUKKwkJY29sb3IuZGVjb3JhdGUuSEVBRAorCQljb2xvci5kZWNvcmF0ZS5icmFuY2gKKwkJY29sb3IuZGVjb3JhdGUucmVtb3RlQnJhbmNoCisJCWNvbG9yLmRlY29yYXRlLnN0YXNoCisJCWNvbG9yLmRlY29yYXRlLnRhZworCQljb2xvci5kaWZmCisJCWNvbG9yLmRpZmYuY29tbWl0CisJCWNvbG9yLmRpZmYuZnJhZworCQljb2xvci5kaWZmLmZ1bmMKKwkJY29sb3IuZGlmZi5tZXRhCisJCWNvbG9yLmRpZmYubmV3CisJCWNvbG9yLmRpZmYub2xkCisJCWNvbG9yLmRpZmYucGxhaW4KKwkJY29sb3IuZGlmZi53aGl0ZXNwYWNlCisJCWNvbG9yLmdyZXAKKwkJY29sb3IuZ3JlcC5jb250ZXh0CisJCWNvbG9yLmdyZXAuZmlsZW5hbWUKKwkJY29sb3IuZ3JlcC5mdW5jdGlvbgorCQljb2xvci5ncmVwLmxpbmVudW1iZXIKKwkJY29sb3IuZ3JlcC5tYXRjaAorCQljb2xvci5ncmVwLnNlbGVjdGVkCisJCWNvbG9yLmdyZXAuc2VwYXJhdG9yCisJCWNvbG9yLmludGVyYWN0aXZlCisJCWNvbG9yLmludGVyYWN0aXZlLmVycm9yCisJCWNvbG9yLmludGVyYWN0aXZlLmhlYWRlcgorCQljb2xvci5pbnRlcmFjdGl2ZS5oZWxwCisJCWNvbG9yLmludGVyYWN0aXZlLnByb21wdAorCQljb2xvci5wYWdlcgorCQljb2xvci5zaG93YnJhbmNoCisJCWNvbG9yLnN0YXR1cworCQljb2xvci5zdGF0dXMuYWRkZWQKKwkJY29sb3Iuc3RhdHVzLmNoYW5nZWQKKwkJY29sb3Iuc3RhdHVzLmhlYWRlcgorCQljb2xvci5zdGF0dXMubm9icmFuY2gKKwkJY29sb3Iuc3RhdHVzLnVubWVyZ2VkCisJCWNvbG9yLnN0YXR1cy51bnRyYWNrZWQKKwkJY29sb3Iuc3RhdHVzLnVwZGF0ZWQKKwkJY29sb3IudWkKKwkJY29tbWl0LnN0YXR1cworCQljb21taXQudGVtcGxhdGUKKwkJY29yZS5hYmJyZXYKKwkJY29yZS5hc2twYXNzCisJCWNvcmUuYXR0cmlidXRlc2ZpbGUKKwkJY29yZS5hdXRvY3JsZgorCQljb3JlLmJhcmUKKwkJY29yZS5iaWdGaWxlVGhyZXNob2xkCisJCWNvcmUuY29tcHJlc3Npb24KKwkJY29yZS5jcmVhdGVPYmplY3QKKwkJY29yZS5kZWx0YUJhc2VDYWNoZUxpbWl0CisJCWNvcmUuZWRpdG9yCisJCWNvcmUuZW9sCisJCWNvcmUuZXhjbHVkZXNmaWxlCisJCWNvcmUuZmlsZU1vZGUKKwkJY29yZS5mc3luY29iamVjdGZpbGVzCisJCWNvcmUuZ2l0UHJveHkKKwkJY29yZS5pZ25vcmVTdGF0CisJCWNvcmUuaWdub3JlY2FzZQorCQljb3JlLmxvZ0FsbFJlZlVwZGF0ZXMKKwkJY29yZS5sb29zZWNvbXByZXNzaW9uCisJCWNvcmUubm90ZXNSZWYKKwkJY29yZS5wYWNrZWRHaXRMaW1pdAorCQljb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUKKwkJY29yZS5wYWdlcgorCQljb3JlLnByZWZlclN5bWxpbmtSZWZzCisJCWNvcmUucHJlbG9hZGluZGV4CisJCWNvcmUucXVvdGVwYXRoCisJCWNvcmUucmVwb3NpdG9yeUZvcm1hdFZlcnNpb24KKwkJY29yZS5zYWZlY3JsZgorCQljb3JlLnNoYXJlZFJlcG9zaXRvcnkKKwkJY29yZS5zcGFyc2VDaGVja291dAorCQljb3JlLnN5bWxpbmtzCisJCWNvcmUudHJ1c3RjdGltZQorCQljb3JlLndhcm5BbWJpZ3VvdXNSZWZzCisJCWNvcmUud2hpdGVzcGFjZQorCQljb3JlLndvcmt0cmVlCisJCWRpZmYuYXV0b3JlZnJlc2hpbmRleAorCQlkaWZmLmV4dGVybmFsCisJCWRpZmYuaWdub3JlU3VibW9kdWxlcworCQlkaWZmLm1uZW1vbmljcHJlZml4CisJCWRpZmYubm9wcmVmaXgKKwkJZGlmZi5yZW5hbWVMaW1pdAorCQlkaWZmLnJlbmFtZXMKKwkJZGlmZi5zdGF0R3JhcGhXaWR0aAorCQlkaWZmLnN1Ym1vZHVsZQorCQlkaWZmLnN1cHByZXNzQmxhbmtFbXB0eQorCQlkaWZmLnRvb2wKKwkJZGlmZi53b3JkUmVnZXgKKwkJZGlmZi5hbGdvcml0aG0KKwkJZGlmZnRvb2wuCisJCWRpZmZ0b29sLnByb21wdAorCQlmZXRjaC5yZWN1cnNlU3VibW9kdWxlcworCQlmZXRjaC51bnBhY2tMaW1pdAorCQlmb3JtYXQuYXR0YWNoCisJCWZvcm1hdC5jYworCQlmb3JtYXQuY292ZXJMZXR0ZXIKKwkJZm9ybWF0LmhlYWRlcnMKKwkJZm9ybWF0Lm51bWJlcmVkCisJCWZvcm1hdC5wcmV0dHkKKwkJZm9ybWF0LnNpZ25hdHVyZQorCQlmb3JtYXQuc2lnbm9mZgorCQlmb3JtYXQuc3ViamVjdHByZWZpeAorCQlmb3JtYXQuc3VmZml4CisJCWZvcm1hdC50aHJlYWQKKwkJZm9ybWF0LnRvCisJCWdjLgorCQlnYy5hZ2dyZXNzaXZlV2luZG93CisJCWdjLmF1dG8KKwkJZ2MuYXV0b3BhY2tsaW1pdAorCQlnYy5wYWNrcmVmcworCQlnYy5wcnVuZWV4cGlyZQorCQlnYy5yZWZsb2dleHBpcmUKKwkJZ2MucmVmbG9nZXhwaXJldW5yZWFjaGFibGUKKwkJZ2MucmVyZXJlcmVzb2x2ZWQKKwkJZ2MucmVyZXJldW5yZXNvbHZlZAorCQlnaXRjdnMuYWxsYmluYXJ5CisJCWdpdGN2cy5jb21taXRtc2dhbm5vdGF0aW9uCisJCWdpdGN2cy5kYlRhYmxlTmFtZVByZWZpeAorCQlnaXRjdnMuZGJkcml2ZXIKKwkJZ2l0Y3ZzLmRibmFtZQorCQlnaXRjdnMuZGJwYXNzCisJCWdpdGN2cy5kYnVzZXIKKwkJZ2l0Y3ZzLmVuYWJsZWQKKwkJZ2l0Y3ZzLmxvZ2ZpbGUKKwkJZ2l0Y3ZzLnVzZWNybGZhdHRyCisJCWd1aXRvb2wuCisJCWd1aS5ibGFtZWhpc3RvcnljdHgKKwkJZ3VpLmNvbW1pdG1zZ3dpZHRoCisJCWd1aS5jb3B5YmxhbWV0aHJlc2hvbGQKKwkJZ3VpLmRpZmZjb250ZXh0CisJCWd1aS5lbmNvZGluZworCQlndWkuZmFzdGNvcHlibGFtZQorCQlndWkubWF0Y2h0cmFja2luZ2JyYW5jaAorCQlndWkubmV3YnJhbmNodGVtcGxhdGUKKwkJZ3VpLnBydW5lZHVyaW5nZmV0Y2gKKwkJZ3VpLnNwZWxsaW5nZGljdGlvbmFyeQorCQlndWkudHJ1c3RtdGltZQorCQloZWxwLmF1dG9jb3JyZWN0CisJCWhlbHAuYnJvd3NlcgorCQloZWxwLmZvcm1hdAorCQlodHRwLmxvd1NwZWVkTGltaXQKKwkJaHR0cC5sb3dTcGVlZFRpbWUKKwkJaHR0cC5tYXhSZXF1ZXN0cworCQlodHRwLm1pblNlc3Npb25zCisJCWh0dHAubm9FUFNWCisJCWh0dHAucG9zdEJ1ZmZlcgorCQlodHRwLnByb3h5CisJCWh0dHAuc3NsQ2lwaGVyTGlzdAorCQlodHRwLnNzbFZlcnNpb24KKwkJaHR0cC5zc2xDQUluZm8KKwkJaHR0cC5zc2xDQVBhdGgKKwkJaHR0cC5zc2xDZXJ0CisJCWh0dHAuc3NsQ2VydFBhc3N3b3JkUHJvdGVjdGVkCisJCWh0dHAuc3NsS2V5CisJCWh0dHAuc3NsVmVyaWZ5CisJCWh0dHAudXNlcmFnZW50CisJCWkxOG4uY29tbWl0RW5jb2RpbmcKKwkJaTE4bi5sb2dPdXRwdXRFbmNvZGluZworCQlpbWFwLmF1dGhNZXRob2QKKwkJaW1hcC5mb2xkZXIKKwkJaW1hcC5ob3N0CisJCWltYXAucGFzcworCQlpbWFwLnBvcnQKKwkJaW1hcC5wcmVmb3JtYXR0ZWRIVE1MCisJCWltYXAuc3NsdmVyaWZ5CisJCWltYXAudHVubmVsCisJCWltYXAudXNlcgorCQlpbml0LnRlbXBsYXRlZGlyCisJCWluc3Rhd2ViLmJyb3dzZXIKKwkJaW5zdGF3ZWIuaHR0cGQKKwkJaW5zdGF3ZWIubG9jYWwKKwkJaW5zdGF3ZWIubW9kdWxlcGF0aAorCQlpbnN0YXdlYi5wb3J0CisJCWludGVyYWN0aXZlLnNpbmdsZWtleQorCQlsb2cuZGF0ZQorCQlsb2cuZGVjb3JhdGUKKwkJbG9nLnNob3dyb290CisJCW1haWxtYXAuZmlsZQorCQltYW4uCisJCW1hbi52aWV3ZXIKKwkJbWVyZ2UuCisJCW1lcmdlLmNvbmZsaWN0c3R5bGUKKwkJbWVyZ2UubG9nCisJCW1lcmdlLnJlbmFtZUxpbWl0CisJCW1lcmdlLnJlbm9ybWFsaXplCisJCW1lcmdlLnN0YXQKKwkJbWVyZ2UudG9vbAorCQltZXJnZS52ZXJib3NpdHkKKwkJbWVyZ2V0b29sLgorCQltZXJnZXRvb2wua2VlcEJhY2t1cAorCQltZXJnZXRvb2wua2VlcFRlbXBvcmFyaWVzCisJCW1lcmdldG9vbC5wcm9tcHQKKwkJbm90ZXMuZGlzcGxheVJlZgorCQlub3Rlcy5yZXdyaXRlLgorCQlub3Rlcy5yZXdyaXRlLmFtZW5kCisJCW5vdGVzLnJld3JpdGUucmViYXNlCisJCW5vdGVzLnJld3JpdGVNb2RlCisJCW5vdGVzLnJld3JpdGVSZWYKKwkJcGFjay5jb21wcmVzc2lvbgorCQlwYWNrLmRlbHRhQ2FjaGVMaW1pdAorCQlwYWNrLmRlbHRhQ2FjaGVTaXplCisJCXBhY2suZGVwdGgKKwkJcGFjay5pbmRleFZlcnNpb24KKwkJcGFjay5wYWNrU2l6ZUxpbWl0CisJCXBhY2sudGhyZWFkcworCQlwYWNrLndpbmRvdworCQlwYWNrLndpbmRvd01lbW9yeQorCQlwYWdlci4KKwkJcHJldHR5LgorCQlwdWxsLm9jdG9wdXMKKwkJcHVsbC50d29oZWFkCisJCXB1c2guZGVmYXVsdAorCQlwdXNoLmZvbGxvd1RhZ3MKKwkJcmViYXNlLmF1dG9zcXVhc2gKKwkJcmViYXNlLnN0YXQKKwkJcmVjZWl2ZS5hdXRvZ2MKKwkJcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaAorCQlyZWNlaXZlLmRlbnlEZWxldGVDdXJyZW50CisJCXJlY2VpdmUuZGVueURlbGV0ZXMKKwkJcmVjZWl2ZS5kZW55Tm9uRmFzdEZvcndhcmRzCisJCXJlY2VpdmUuZnNja09iamVjdHMKKwkJcmVjZWl2ZS51bnBhY2tMaW1pdAorCQlyZWNlaXZlLnVwZGF0ZXNlcnZlcmluZm8KKwkJcmVtb3RlLnB1c2hkZWZhdWx0CisJCXJlbW90ZXMuCisJCXJlcGFjay51c2VkZWx0YWJhc2VvZmZzZXQKKwkJcmVyZXJlLmF1dG91cGRhdGUKKwkJcmVyZXJlLmVuYWJsZWQKKwkJc2VuZGVtYWlsLgorCQlzZW5kZW1haWwuYWxpYXNlc2ZpbGUKKwkJc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGUKKwkJc2VuZGVtYWlsLmJjYworCQlzZW5kZW1haWwuY2MKKwkJc2VuZGVtYWlsLmNjY21kCisJCXNlbmRlbWFpbC5jaGFpbnJlcGx5dG8KKwkJc2VuZGVtYWlsLmNvbmZpcm0KKwkJc2VuZGVtYWlsLmVudmVsb3Blc2VuZGVyCisJCXNlbmRlbWFpbC5mcm9tCisJCXNlbmRlbWFpbC5pZGVudGl0eQorCQlzZW5kZW1haWwubXVsdGllZGl0CisJCXNlbmRlbWFpbC5zaWduZWRvZmZieWNjCisJCXNlbmRlbWFpbC5zbXRwZG9tYWluCisJCXNlbmRlbWFpbC5zbXRwZW5jcnlwdGlvbgorCQlzZW5kZW1haWwuc210cHBhc3MKKwkJc2VuZGVtYWlsLnNtdHBzZXJ2ZXIKKwkJc2VuZGVtYWlsLnNtdHBzZXJ2ZXJvcHRpb24KKwkJc2VuZGVtYWlsLnNtdHBzZXJ2ZXJwb3J0CisJCXNlbmRlbWFpbC5zbXRwdXNlcgorCQlzZW5kZW1haWwuc3VwcHJlc3NjYworCQlzZW5kZW1haWwuc3VwcHJlc3Nmcm9tCisJCXNlbmRlbWFpbC50aHJlYWQKKwkJc2VuZGVtYWlsLnRvCisJCXNlbmRlbWFpbC52YWxpZGF0ZQorCQlzaG93YnJhbmNoLmRlZmF1bHQKKwkJc3RhdHVzLnJlbGF0aXZlUGF0aHMKKwkJc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcworCQlzdGF0dXMuc3VibW9kdWxlc3VtbWFyeQorCQlzdWJtb2R1bGUuCisJCXRhci51bWFzaworCQl0cmFuc2Zlci51bnBhY2tMaW1pdAorCQl1cmwuCisJCXVzZXIuZW1haWwKKwkJdXNlci5uYW1lCisJCXVzZXIuc2lnbmluZ2tleQorCQl3ZWIuYnJvd3NlcgorCQlicmFuY2guIHJlbW90ZS4KKwkiCit9CisKK19naXRfcmVtb3RlICgpCit7CisJbG9jYWwgc3ViY29tbWFuZHM9ImFkZCByZW5hbWUgcmVtb3ZlIHNldC1oZWFkIHNldC1icmFuY2hlcyBzZXQtdXJsIHNob3cgcHJ1bmUgdXBkYXRlIgorCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKKwlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgorCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKKwkJcmV0dXJuCisJZmkKKworCWNhc2UgIiRzdWJjb21tYW5kIiBpbgorCXJlbmFtZXxyZW1vdmV8c2V0LXVybHxzaG93fHBydW5lKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVtb3RlcykiCisJCTs7CisJc2V0LWhlYWR8c2V0LWJyYW5jaGVzKQorCQlfX2dpdF9jb21wbGV0ZV9yZW1vdGVfb3JfcmVmc3BlYworCQk7OworCXVwZGF0ZSkKKwkJX19naXRjb21wICIkKF9fZ2l0X2dldF9jb25maWdfdmFyaWFibGVzICJyZW1vdGVzIikiCisJCTs7CisJKikKKwkJOzsKKwllc2FjCit9CisKK19naXRfcmVwbGFjZSAoKQoreworCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKK30KKworX2dpdF9yZXNldCAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiLS1tZXJnZSAtLW1peGVkIC0taGFyZCAtLXNvZnQgLS1wYXRjaCIKKwkJcmV0dXJuCisJCTs7CisJZXNhYworCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF9yZWZzKSIKK30KKworX2dpdF9yZXZlcnQgKCkKK3sKKwlsb2NhbCBkaXI9IiQoX19naXRkaXIpIgorCWlmIFsgLWYgIiRkaXIiL1JFVkVSVF9IRUFEIF07IHRoZW4KKwkJX19naXRjb21wICItLWNvbnRpbnVlIC0tcXVpdCAtLWFib3J0IgorCQlyZXR1cm4KKwlmaQorCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIi0tZWRpdCAtLW1haW5saW5lIC0tbm8tZWRpdCAtLW5vLWNvbW1pdCAtLXNpZ25vZmYiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiCit9CisKK19naXRfcm0gKCkKK3sKKwljYXNlICIkY3VyIiBpbgorCS0tKikKKwkJX19naXRjb21wICItLWNhY2hlZCAtLWRyeS1ydW4gLS1pZ25vcmUtdW5tYXRjaCAtLXF1aWV0IgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisKKwlfX2dpdF9jb21wbGV0ZV9pbmRleF9maWxlICItLWNhY2hlZCIKK30KKworX2dpdF9zaG9ydGxvZyAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQkkX19naXRfbG9nX2NvbW1vbl9vcHRpb25zCisJCQkkX19naXRfbG9nX3Nob3J0bG9nX29wdGlvbnMKKwkJCS0tbnVtYmVyZWQgLS1zdW1tYXJ5CisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK19naXRfc2hvdyAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJY2FzZSAiJGN1ciIgaW4KKwktLXByZXR0eT0qfC0tZm9ybWF0PSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2xvZ19wcmV0dHlfZm9ybWF0cyAkKF9fZ2l0X3ByZXR0eV9hbGlhc2VzKQorCQkJIiAiIiAiJHtjdXIjKj19IgorCQlyZXR1cm4KKwkJOzsKKwktLWRpZmYtYWxnb3JpdGhtPSopCisJCV9fZ2l0Y29tcCAiJF9fZ2l0X2RpZmZfYWxnb3JpdGhtcyIgIiIgIiR7Y3VyIyMtLWRpZmYtYWxnb3JpdGhtPX0iCisJCXJldHVybgorCQk7OworCS0tKikKKwkJX19naXRjb21wICItLXByZXR0eT0gLS1mb3JtYXQ9IC0tYWJicmV2LWNvbW1pdCAtLW9uZWxpbmUKKwkJCS0tc2hvdy1zaWduYXR1cmUKKwkJCSRfX2dpdF9kaWZmX2NvbW1vbl9vcHRpb25zCisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0X2ZpbGUKK30KKworX2dpdF9zaG93X2JyYW5jaCAoKQoreworCWNhc2UgIiRjdXIiIGluCisJLS0qKQorCQlfX2dpdGNvbXAgIgorCQkJLS1hbGwgLS1yZW1vdGVzIC0tdG9wby1vcmRlciAtLWN1cnJlbnQgLS1tb3JlPQorCQkJLS1saXN0IC0taW5kZXBlbmRlbnQgLS1tZXJnZS1iYXNlIC0tbm8tbmFtZQorCQkJLS1jb2xvciAtLW5vLWNvbG9yCisJCQktLXNoYTEtbmFtZSAtLXNwYXJzZSAtLXRvcGljcyAtLXJlZmxvZworCQkJIgorCQlyZXR1cm4KKwkJOzsKKwllc2FjCisJX19naXRfY29tcGxldGVfcmV2bGlzdAorfQorCitfZ2l0X3N0YXNoICgpCit7CisJbG9jYWwgc2F2ZV9vcHRzPSctLWtlZXAtaW5kZXggLS1uby1rZWVwLWluZGV4IC0tcXVpZXQgLS1wYXRjaCcKKwlsb2NhbCBzdWJjb21tYW5kcz0nc2F2ZSBsaXN0IHNob3cgYXBwbHkgY2xlYXIgZHJvcCBwb3AgY3JlYXRlIGJyYW5jaCcKKwlsb2NhbCBzdWJjb21tYW5kPSIkKF9fZ2l0X2ZpbmRfb25fY21kbGluZSAiJHN1YmNvbW1hbmRzIikiCisJaWYgWyAteiAiJHN1YmNvbW1hbmQiIF07IHRoZW4KKwkJY2FzZSAiJGN1ciIgaW4KKwkJLS0qKQorCQkJX19naXRjb21wICIkc2F2ZV9vcHRzIgorCQkJOzsKKwkJKikKKwkJCWlmIFsgLXogIiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc2F2ZV9vcHRzIikiIF07IHRoZW4KKwkJCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKKwkJCWZpCisJCQk7OworCQllc2FjCisJZWxzZQorCQljYXNlICIkc3ViY29tbWFuZCwkY3VyIiBpbgorCQlzYXZlLC0tKikKKwkJCV9fZ2l0Y29tcCAiJHNhdmVfb3B0cyIKKwkJCTs7CisJCWFwcGx5LC0tKnxwb3AsLS0qKQorCQkJX19naXRjb21wICItLWluZGV4IC0tcXVpZXQiCisJCQk7OworCQlzaG93LC0tKnxkcm9wLC0tKnxicmFuY2gsLS0qKQorCQkJOzsKKwkJc2hvdywqfGFwcGx5LCp8ZHJvcCwqfHBvcCwqfGJyYW5jaCwqKQorCQkJX19naXRjb21wX25sICIkKGdpdCAtLWdpdC1kaXI9IiQoX19naXRkaXIpIiBzdGFzaCBsaXN0IFwKKwkJCQkJfCBzZWQgLW4gLWUgJ3MvOi4qLy9wJykiCisJCQk7OworCQkqKQorCQkJOzsKKwkJZXNhYworCWZpCit9CisKK19naXRfc3VibW9kdWxlICgpCit7CisJX19naXRfaGFzX2RvdWJsZWRhc2ggJiYgcmV0dXJuCisKKwlsb2NhbCBzdWJjb21tYW5kcz0iYWRkIHN0YXR1cyBpbml0IGRlaW5pdCB1cGRhdGUgc3VtbWFyeSBmb3JlYWNoIHN5bmMiCisJaWYgWyAteiAiJChfX2dpdF9maW5kX29uX2NtZGxpbmUgIiRzdWJjb21tYW5kcyIpIiBdOyB0aGVuCisJCWNhc2UgIiRjdXIiIGluCisJCS0tKikKKwkJCV9fZ2l0Y29tcCAiLS1xdWlldCAtLWNhY2hlZCIKKwkJCTs7CisJCSopCisJCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKKwkJCTs7CisJCWVzYWMKKwkJcmV0dXJuCisJZmkKK30KKworX2dpdF9zdm4gKCkKK3sKKwlsb2NhbCBzdWJjb21tYW5kcz0iCisJCWluaXQgZmV0Y2ggY2xvbmUgcmViYXNlIGRjb21taXQgbG9nIGZpbmQtcmV2CisJCXNldC10cmVlIGNvbW1pdC1kaWZmIGluZm8gY3JlYXRlLWlnbm9yZSBwcm9wZ2V0CisJCXByb3BsaXN0IHNob3ctaWdub3JlIHNob3ctZXh0ZXJuYWxzIGJyYW5jaCB0YWcgYmxhbWUKKwkJbWlncmF0ZSBta2RpcnMgcmVzZXQgZ2MKKwkJIgorCWxvY2FsIHN1YmNvbW1hbmQ9IiQoX19naXRfZmluZF9vbl9jbWRsaW5lICIkc3ViY29tbWFuZHMiKSIKKwlpZiBbIC16ICIkc3ViY29tbWFuZCIgXTsgdGhlbgorCQlfX2dpdGNvbXAgIiRzdWJjb21tYW5kcyIKKwllbHNlCisJCWxvY2FsIHJlbW90ZV9vcHRzPSItLXVzZXJuYW1lPSAtLWNvbmZpZy1kaXI9IC0tbm8tYXV0aC1jYWNoZSIKKwkJbG9jYWwgZmNfb3B0cz0iCisJCQktLWZvbGxvdy1wYXJlbnQgLS1hdXRob3JzLWZpbGU9IC0tcmVwYWNrPQorCQkJLS1uby1tZXRhZGF0YSAtLXVzZS1zdm0tcHJvcHMgLS11c2Utc3Zuc3luYy1wcm9wcworCQkJLS1sb2ctd2luZG93LXNpemU9IC0tbm8tY2hlY2tvdXQgLS1xdWlldAorCQkJLS1yZXBhY2stZmxhZ3MgLS11c2UtbG9nLWF1dGhvciAtLWxvY2FsdGltZQorCQkJLS1pZ25vcmUtcGF0aHM9IC0taW5jbHVkZS1wYXRocz0gJHJlbW90ZV9vcHRzCisJCQkiCisJCWxvY2FsIGluaXRfb3B0cz0iCisJCQktLXRlbXBsYXRlPSAtLXNoYXJlZD0gLS10cnVuaz0gLS10YWdzPQorCQkJLS1icmFuY2hlcz0gLS1zdGRsYXlvdXQgLS1taW5pbWl6ZS11cmwKKwkJCS0tbm8tbWV0YWRhdGEgLS11c2Utc3ZtLXByb3BzIC0tdXNlLXN2bnN5bmMtcHJvcHMKKwkJCS0tcmV3cml0ZS1yb290PSAtLXByZWZpeD0gLS11c2UtbG9nLWF1dGhvcgorCQkJLS1hZGQtYXV0aG9yLWZyb20gJHJlbW90ZV9vcHRzCisJCQkiCisJCWxvY2FsIGNtdF9vcHRzPSIKKwkJCS0tZWRpdCAtLXJtZGlyIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tY29weS1zaW1pbGFyaXR5PQorCQkJIgorCisJCWNhc2UgIiRzdWJjb21tYW5kLCRjdXIiIGluCisJCWZldGNoLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1yZXZpc2lvbj0gLS1mZXRjaC1hbGwgJGZjX29wdHMiCisJCQk7OworCQljbG9uZSwtLSopCisJCQlfX2dpdGNvbXAgIi0tcmV2aXNpb249ICRmY19vcHRzICRpbml0X29wdHMiCisJCQk7OworCQlpbml0LC0tKikKKwkJCV9fZ2l0Y29tcCAiJGluaXRfb3B0cyIKKwkJCTs7CisJCWRjb21taXQsLS0qKQorCQkJX19naXRjb21wICIKKwkJCQktLW1lcmdlIC0tc3RyYXRlZ3k9IC0tdmVyYm9zZSAtLWRyeS1ydW4KKwkJCQktLWZldGNoLWFsbCAtLW5vLXJlYmFzZSAtLWNvbW1pdC11cmwKKwkJCQktLXJldmlzaW9uIC0taW50ZXJhY3RpdmUgJGNtdF9vcHRzICRmY19vcHRzCisJCQkJIgorCQkJOzsKKwkJc2V0LXRyZWUsLS0qKQorCQkJX19naXRjb21wICItLXN0ZGluICRjbXRfb3B0cyAkZmNfb3B0cyIKKwkJCTs7CisJCWNyZWF0ZS1pZ25vcmUsLS0qfHByb3BnZXQsLS0qfHByb3BsaXN0LC0tKnxzaG93LWlnbm9yZSwtLSp8XAorCQlzaG93LWV4dGVybmFscywtLSp8bWtkaXJzLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1yZXZpc2lvbj0iCisJCQk7OworCQlsb2csLS0qKQorCQkJX19naXRjb21wICIKKwkJCQktLWxpbWl0PSAtLXJldmlzaW9uPSAtLXZlcmJvc2UgLS1pbmNyZW1lbnRhbAorCQkJCS0tb25lbGluZSAtLXNob3ctY29tbWl0IC0tbm9uLXJlY3Vyc2l2ZQorCQkJCS0tYXV0aG9ycy1maWxlPSAtLWNvbG9yCisJCQkJIgorCQkJOzsKKwkJcmViYXNlLC0tKikKKwkJCV9fZ2l0Y29tcCAiCisJCQkJLS1tZXJnZSAtLXZlcmJvc2UgLS1zdHJhdGVneT0gLS1sb2NhbAorCQkJCS0tZmV0Y2gtYWxsIC0tZHJ5LXJ1biAkZmNfb3B0cworCQkJCSIKKwkJCTs7CisJCWNvbW1pdC1kaWZmLC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1tZXNzYWdlPSAtLWZpbGU9IC0tcmV2aXNpb249ICRjbXRfb3B0cyIKKwkJCTs7CisJCWluZm8sLS0qKQorCQkJX19naXRjb21wICItLXVybCIKKwkJCTs7CisJCWJyYW5jaCwtLSopCisJCQlfX2dpdGNvbXAgIi0tZHJ5LXJ1biAtLW1lc3NhZ2UgLS10YWciCisJCQk7OworCQl0YWcsLS0qKQorCQkJX19naXRjb21wICItLWRyeS1ydW4gLS1tZXNzYWdlIgorCQkJOzsKKwkJYmxhbWUsLS0qKQorCQkJX19naXRjb21wICItLWdpdC1mb3JtYXQiCisJCQk7OworCQltaWdyYXRlLC0tKikKKwkJCV9fZ2l0Y29tcCAiCisJCQkJLS1jb25maWctZGlyPSAtLWlnbm9yZS1wYXRocz0gLS1taW5pbWl6ZQorCQkJCS0tbm8tYXV0aC1jYWNoZSAtLXVzZXJuYW1lPQorCQkJCSIKKwkJCTs7CisJCXJlc2V0LC0tKikKKwkJCV9fZ2l0Y29tcCAiLS1yZXZpc2lvbj0gLS1wYXJlbnQiCisJCQk7OworCQkqKQorCQkJOzsKKwkJZXNhYworCWZpCit9CisKK19naXRfdGFnICgpCit7CisJbG9jYWwgaSBjPTEgZj0wCisJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCisJCWk9IiR7d29yZHNbY119IgorCQljYXNlICIkaSIgaW4KKwkJLWR8LXYpCisJCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfdGFncykiCisJCQlyZXR1cm4KKwkJCTs7CisJCS1mKQorCQkJZj0xCisJCQk7OworCQllc2FjCisJCSgoYysrKSkKKwlkb25lCisKKwljYXNlICIkcHJldiIgaW4KKwktbXwtRikKKwkJOzsKKwktKnx0YWcpCisJCWlmIFsgJGYgPSAxIF07IHRoZW4KKwkJCV9fZ2l0Y29tcF9ubCAiJChfX2dpdF90YWdzKSIKKwkJZmkKKwkJOzsKKwkqKQorCQlfX2dpdGNvbXBfbmwgIiQoX19naXRfcmVmcykiCisJCTs7CisJZXNhYworCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQktLWxpc3QgLS1kZWxldGUgLS12ZXJpZnkgLS1hbm5vdGF0ZSAtLW1lc3NhZ2UgLS1maWxlCisJCQktLXNpZ24gLS1jbGVhbnVwIC0tbG9jYWwtdXNlciAtLWZvcmNlIC0tY29sdW1uIC0tc29ydAorCQkJLS1jb250YWlucyAtLXBvaW50cy1hdAorCQkJIgorCQk7OworCWVzYWMKK30KKworX2dpdF93aGF0Y2hhbmdlZCAoKQoreworCV9naXRfbG9nCit9CisKK19fZ2l0X21haW4gKCkKK3sKKwlsb2NhbCBpIGM9MSBjb21tYW5kIF9fZ2l0X2RpcgorCisJd2hpbGUgWyAkYyAtbHQgJGN3b3JkIF07IGRvCisJCWk9IiR7d29yZHNbY119IgorCQljYXNlICIkaSIgaW4KKwkJLS1naXQtZGlyPSopIF9fZ2l0X2Rpcj0iJHtpIy0tZ2l0LWRpcj19IiA7OworCQktLWdpdC1kaXIpICAgKChjKyspKSA7IF9fZ2l0X2Rpcj0iJHt3b3Jkc1tjXX0iIDs7CisJCS0tYmFyZSkgICAgICBfX2dpdF9kaXI9Ii4iIDs7CisJCS0taGVscCkgY29tbWFuZD0iaGVscCI7IGJyZWFrIDs7CisJCS1jfC0td29yay10cmVlfC0tbmFtZXNwYWNlKSAoKGMrKykpIDs7CisJCS0qKSA7OworCQkqKSBjb21tYW5kPSIkaSI7IGJyZWFrIDs7CisJCWVzYWMKKwkJKChjKyspKQorCWRvbmUKKworCWlmIFsgLXogIiRjb21tYW5kIiBdOyB0aGVuCisJCWNhc2UgIiRjdXIiIGluCisJCS0tKikgICBfX2dpdGNvbXAgIgorCQkJLS1wYWdpbmF0ZQorCQkJLS1uby1wYWdlcgorCQkJLS1naXQtZGlyPQorCQkJLS1iYXJlCisJCQktLXZlcnNpb24KKwkJCS0tZXhlYy1wYXRoCisJCQktLWV4ZWMtcGF0aD0KKwkJCS0taHRtbC1wYXRoCisJCQktLW1hbi1wYXRoCisJCQktLWluZm8tcGF0aAorCQkJLS13b3JrLXRyZWU9CisJCQktLW5hbWVzcGFjZT0KKwkJCS0tbm8tcmVwbGFjZS1vYmplY3RzCisJCQktLWhlbHAKKwkJCSIKKwkJCTs7CisJCSopICAgICBfX2dpdF9jb21wdXRlX3BvcmNlbGFpbl9jb21tYW5kcworCQkgICAgICAgX19naXRjb21wICIkX19naXRfcG9yY2VsYWluX2NvbW1hbmRzICQoX19naXRfYWxpYXNlcykiIDs7CisJCWVzYWMKKwkJcmV0dXJuCisJZmkKKworCWxvY2FsIGNvbXBsZXRpb25fZnVuYz0iX2dpdF8ke2NvbW1hbmQvLy0vX30iCisJZGVjbGFyZSAtZiAkY29tcGxldGlvbl9mdW5jID4vZGV2L251bGwgJiYgJGNvbXBsZXRpb25fZnVuYyAmJiByZXR1cm4KKworCWxvY2FsIGV4cGFuc2lvbj0kKF9fZ2l0X2FsaWFzZWRfY29tbWFuZCAiJGNvbW1hbmQiKQorCWlmIFsgLW4gIiRleHBhbnNpb24iIF07IHRoZW4KKwkJd29yZHNbMV09JGV4cGFuc2lvbgorCQljb21wbGV0aW9uX2Z1bmM9Il9naXRfJHtleHBhbnNpb24vLy0vX30iCisJCWRlY2xhcmUgLWYgJGNvbXBsZXRpb25fZnVuYyA+L2Rldi9udWxsICYmICRjb21wbGV0aW9uX2Z1bmMKKwlmaQorfQorCitfX2dpdGtfbWFpbiAoKQoreworCV9fZ2l0X2hhc19kb3VibGVkYXNoICYmIHJldHVybgorCisJbG9jYWwgZz0iJChfX2dpdGRpcikiCisJbG9jYWwgbWVyZ2U9IiIKKwlpZiBbIC1mICIkZy9NRVJHRV9IRUFEIiBdOyB0aGVuCisJCW1lcmdlPSItLW1lcmdlIgorCWZpCisJY2FzZSAiJGN1ciIgaW4KKwktLSopCisJCV9fZ2l0Y29tcCAiCisJCQkkX19naXRfbG9nX2NvbW1vbl9vcHRpb25zCisJCQkkX19naXRfbG9nX2dpdGtfb3B0aW9ucworCQkJJG1lcmdlCisJCQkiCisJCXJldHVybgorCQk7OworCWVzYWMKKwlfX2dpdF9jb21wbGV0ZV9yZXZsaXN0Cit9CisKK2lmIFtbIC1uICR7WlNIX1ZFUlNJT04tfSBdXTsgdGhlbgorCWVjaG8gIldBUk5JTkc6IHRoaXMgc2NyaXB0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSBzZWUgZ2l0LWNvbXBsZXRpb24uenNoIiAxPiYyCisKKwlhdXRvbG9hZCAtVSArWCBjb21waW5pdCAmJiBjb21waW5pdAorCisJX19naXRjb21wICgpCisJeworCQllbXVsYXRlIC1MIHpzaAorCisJCWxvY2FsIGN1cl89IiR7My0kY3VyfSIKKworCQljYXNlICIkY3VyXyIgaW4KKwkJLS0qPSkKKwkJCTs7CisJCSopCisJCQlsb2NhbCBjIElGUz0kJyBcdFxuJworCQkJbG9jYWwgLWEgYXJyYXkKKwkJCWZvciBjIGluICR7PTF9OyBkbworCQkJCWM9IiRjJHs0LX0iCisJCQkJY2FzZSAkYyBpbgorCQkJCS0tKj0qfCouKSA7OworCQkJCSopIGM9IiRjICIgOzsKKwkJCQllc2FjCisJCQkJYXJyYXlbJHsjYXJyYXlbQF19KzFdPSIkYyIKKwkJCWRvbmUKKwkJCWNvbXBzZXQgLVAgJypbPTpdJworCQkJY29tcGFkZCAtUSAtUyAnJyAtcCAiJHsyLX0iIC1hIC0tIGFycmF5ICYmIF9yZXQ9MAorCQkJOzsKKwkJZXNhYworCX0KKworCV9fZ2l0Y29tcF9ubCAoKQorCXsKKwkJZW11bGF0ZSAtTCB6c2gKKworCQlsb2NhbCBJRlM9JCdcbicKKwkJY29tcHNldCAtUCAnKls9Ol0nCisJCWNvbXBhZGQgLVEgLVMgIiR7NC0gfSIgLXAgIiR7Mi19IiAtLSAkez0xfSAmJiBfcmV0PTAKKwl9CisKKwlfX2dpdGNvbXBfZmlsZSAoKQorCXsKKwkJZW11bGF0ZSAtTCB6c2gKKworCQlsb2NhbCBJRlM9JCdcbicKKwkJY29tcHNldCAtUCAnKls9Ol0nCisJCWNvbXBhZGQgLVEgLXAgIiR7Mi19IiAtZiAtLSAkez0xfSAmJiBfcmV0PTAKKwl9CisKKwlfZ2l0ICgpCisJeworCQlsb2NhbCBfcmV0PTEgY3VyIGN3b3JkIHByZXYKKwkJY3VyPSR7d29yZHNbQ1VSUkVOVF19CisJCXByZXY9JHt3b3Jkc1tDVVJSRU5ULTFdfQorCQlsZXQgY3dvcmQ9Q1VSUkVOVC0xCisJCWVtdWxhdGUga3NoIC1jIF9fJHtzZXJ2aWNlfV9tYWluCisJCWxldCBfcmV0ICYmIF9kZWZhdWx0ICYmIF9yZXQ9MAorCQlyZXR1cm4gX3JldAorCX0KKworCWNvbXBkZWYgX2dpdCBnaXQgZ2l0aworCXJldHVybgorZmkKKworX19naXRfZnVuY193cmFwICgpCit7CisJbG9jYWwgY3VyIHdvcmRzIGN3b3JkIHByZXYKKwlfZ2V0X2NvbXBfd29yZHNfYnlfcmVmIC1uID06IGN1ciB3b3JkcyBjd29yZCBwcmV2CisJJDEKK30KKworIyBTZXR1cCBjb21wbGV0aW9uIGZvciBjZXJ0YWluIGZ1bmN0aW9ucyBkZWZpbmVkIGFib3ZlIGJ5IHNldHRpbmcgY29tbW9uCisjIHZhcmlhYmxlcyBhbmQgd29ya2Fyb3VuZHMuCisjIFRoaXMgaXMgTk9UIGEgcHVibGljIGZ1bmN0aW9uOyB1c2UgYXQgeW91ciBvd24gcmlzay4KK19fZ2l0X2NvbXBsZXRlICgpCit7CisJbG9jYWwgd3JhcHBlcj0iX19naXRfd3JhcCR7Mn0iCisJZXZhbCAiJHdyYXBwZXIgKCkgeyBfX2dpdF9mdW5jX3dyYXAgJDIgOyB9IgorCWNvbXBsZXRlIC1vIGJhc2hkZWZhdWx0IC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiAkd3JhcHBlciAkMSAyPi9kZXYvbnVsbCBcCisJCXx8IGNvbXBsZXRlIC1vIGRlZmF1bHQgLW8gbm9zcGFjZSAtRiAkd3JhcHBlciAkMQorfQorCisjIHdyYXBwZXIgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CitfZ2l0ICgpCit7CisJX19naXRfd3JhcF9fZ2l0X21haW4KK30KKworIyB3cmFwcGVyIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorX2dpdGsgKCkKK3sKKwlfX2dpdF93cmFwX19naXRrX21haW4KK30KKworX19naXRfY29tcGxldGUgZ2l0IF9fZ2l0X21haW4KK19fZ2l0X2NvbXBsZXRlIGdpdGsgX19naXRrX21haW4KKworIyBUaGUgZm9sbG93aW5nIGFyZSBuZWNlc3Nhcnkgb25seSBmb3IgQ3lnd2luLCBhbmQgb25seSBhcmUgbmVlZGVkCisjIHdoZW4gdGhlIHVzZXIgaGFzIHRhYi1jb21wbGV0ZWQgdGhlIGV4ZWN1dGFibGUgbmFtZSBhbmQgY29uc2VxdWVudGx5CisjIGluY2x1ZGVkIHRoZSAnLmV4ZScgc3VmZml4LgorIworaWYgWyBDeWd3aW4gPSAiJCh1bmFtZSAtbyAyPi9kZXYvbnVsbCkiIF07IHRoZW4KK19fZ2l0X2NvbXBsZXRlIGdpdC5leGUgX19naXRfbWFpbgorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi50Y3NoIGIvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLnRjc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE3OTBkOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi50Y3NoCkBAIC0wLDAgKzEsMTI2IEBACisjIHRjc2ggY29tcGxldGlvbiBzdXBwb3J0IGZvciBjb3JlIEdpdC4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyIE1hcmMgS2hvdXphbSA8bWFyYy5raG91emFtQGdtYWlsLmNvbT4KKyMgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuMC4KKyMKKyMgV2hlbiBzb3VyY2VkLCB0aGlzIHNjcmlwdCB3aWxsIGdlbmVyYXRlIGEgbmV3IHNjcmlwdCB0aGF0IHVzZXMKKyMgdGhlIGdpdC1jb21wbGV0aW9uLmJhc2ggc2NyaXB0IHByb3ZpZGVkIGJ5IGNvcmUgR2l0LiAgVGhpcyBuZXcKKyMgc2NyaXB0IGNhbiBiZSB1c2VkIGJ5IHRjc2ggdG8gcGVyZm9ybSBnaXQgY29tcGxldGlvbi4KKyMgVGhlIGN1cnJlbnQgc2NyaXB0IGFsc28gaXNzdWVzIHRoZSBuZWNlc3NhcnkgdGNzaCAnY29tcGxldGUnCisjIGNvbW1hbmRzLgorIworIyBUbyB1c2UgdGhpcyBjb21wbGV0aW9uIHNjcmlwdDoKKyMKKyMgICAgMCkgWW91IG5lZWQgdGNzaCA2LjE2LjAwIG9yIG5ld2VyLgorIyAgICAxKSBDb3B5IGJvdGggdGhpcyBmaWxlIGFuZCB0aGUgYmFzaCBjb21wbGV0aW9uIHNjcmlwdCB0byAke0hPTUV9LgorIyAgICAgICBZb3UgX211c3RfIHVzZSB0aGUgbmFtZSAke0hPTUV9Ly5naXQtY29tcGxldGlvbi5iYXNoIGZvciB0aGUKKyMgICAgICAgYmFzaCBzY3JpcHQuCisjICAgICAgIChlLmcuIH4vLmdpdC1jb21wbGV0aW9uLnRjc2ggYW5kIH4vLmdpdC1jb21wbGV0aW9uLmJhc2gpLgorIyAgICAyKSBBZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHlvdXIgLnRjc2hyYy8uY3NocmM6CisjICAgICAgICBzb3VyY2Ugfi8uZ2l0LWNvbXBsZXRpb24udGNzaAorIyAgICAzKSBGb3IgY29tcGxldGlvbiBzaW1pbGFyIHRvIGJhc2gsIGl0IGlzIHJlY29tbWVuZGVkIHRvIGFsc28KKyMgICAgICAgYWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byB5b3VyIC50Y3NocmMvLmNzaHJjOgorIyAgICAgICAgc2V0IGF1dG9saXN0PWFtYmlndW91cworIyAgICAgICBJdCB3aWxsIHRlbGwgdGNzaCB0byBsaXN0IHRoZSBwb3NzaWJsZSBjb21wbGV0aW9uIGNob2ljZXMuCisKK3NldCBfX2dpdF90Y3NoX2NvbXBsZXRpb25fdmVyc2lvbiA9IGBcZWNobyAke3Rjc2h9IHwgXHNlZCAncy9cLi8gL2cnYAoraWYgKCAke19fZ2l0X3Rjc2hfY29tcGxldGlvbl92ZXJzaW9uWzFdfSA8IDYgfHwgXAorICAgICAoICR7X19naXRfdGNzaF9jb21wbGV0aW9uX3ZlcnNpb25bMV19ID09IDYgJiYgXAorICAgICAgICR7X19naXRfdGNzaF9jb21wbGV0aW9uX3ZlcnNpb25bMl19IDwgMTYgKSApIHRoZW4KKwllY2hvICJnaXQtY29tcGxldGlvbi50Y3NoOiBZb3VyIHZlcnNpb24gb2YgdGNzaCBpcyB0b28gb2xkLCB5b3UgbmVlZCB2ZXJzaW9uIDYuMTYuMDAgb3IgbmV3ZXIuICBHaXQgY29tcGxldGlvbiB3aWxsIG5vdCB3b3JrLiIKKwlleGl0CitlbmRpZgordW5zZXQgX19naXRfdGNzaF9jb21wbGV0aW9uX3ZlcnNpb24KKworc2V0IF9fZ2l0X3Rjc2hfY29tcGxldGlvbl9vcmlnaW5hbF9zY3JpcHQgPSAke0hPTUV9Ly5naXQtY29tcGxldGlvbi5iYXNoCitzZXQgX19naXRfdGNzaF9jb21wbGV0aW9uX3NjcmlwdCA9ICR7SE9NRX0vLmdpdC1jb21wbGV0aW9uLnRjc2guYmFzaAorCisjIENoZWNrIHRoYXQgdGhlIHVzZXIgcHV0IHRoZSBzY3JpcHQgaW4gdGhlIHJpZ2h0IHBsYWNlCitpZiAoICEgLWUgJHtfX2dpdF90Y3NoX2NvbXBsZXRpb25fb3JpZ2luYWxfc2NyaXB0fSApIHRoZW4KKwllY2hvICJnaXQtY29tcGxldGlvbi50Y3NoOiBDYW5ub3QgZmluZDogJHtfX2dpdF90Y3NoX2NvbXBsZXRpb25fb3JpZ2luYWxfc2NyaXB0fS4gIEdpdCBjb21wbGV0aW9uIHdpbGwgbm90IHdvcmsuIgorCWV4aXQKK2VuZGlmCisKK2NhdCA8PCBFT0YgPiEgJHtfX2dpdF90Y3NoX2NvbXBsZXRpb25fc2NyaXB0fQorIyFiYXNoCisjCisjIFRoaXMgc2NyaXB0IGlzIEdFTkVSQVRFRCBhbmQgd2lsbCBiZSBvdmVyd3JpdHRlbiBhdXRvbWF0aWNhbGx5LgorIyBEbyBub3QgbW9kaWZ5IGl0IGRpcmVjdGx5LiAgSW5zdGVhZCwgbW9kaWZ5IGdpdC1jb21wbGV0aW9uLnRjc2gKKyMgYW5kIHNvdXJjZSBpdCBhZ2Fpbi4KKworc291cmNlICR7X19naXRfdGNzaF9jb21wbGV0aW9uX29yaWdpbmFsX3NjcmlwdH0KKworIyBSZW1vdmUgdGhlIGNvbG9uIGFzIGEgY29tcGxldGlvbiBzZXBhcmF0b3IgYmVjYXVzZSB0Y3NoIGNhbm5vdCBoYW5kbGUgaXQKK0NPTVBfV09SREJSRUFLUz1cJHtDT01QX1dPUkRCUkVBS1MvLzp9CisKKyMgRm9yIGZpbGUgY29tcGxldGlvbiwgdGNzaCBuZWVkcyB0aGUgJy8nIHRvIGJlIGFwcGVuZGVkIHRvIGRpcmVjdG9yaWVzLgorIyBCeSBkZWZhdWx0LCB0aGUgYmFzaCBzY3JpcHQgZG9lcyBub3QgZG8gdGhhdC4KKyMgV2UgY2FuIGFjaGlldmUgdGhpcyBieSB1c2luZyB0aGUgYmVsb3cgY29tcGF0aWJpbGl0eQorIyBtZXRob2Qgb2YgdGhlIGdpdC1jb21wbGV0aW9uLmJhc2ggc2NyaXB0LgorX19naXRfaW5kZXhfZmlsZV9saXN0X2ZpbHRlciAoKQoreworCV9fZ2l0X2luZGV4X2ZpbGVfbGlzdF9maWx0ZXJfY29tcGF0Cit9CisKKyMgU2V0IENPTVBfV09SRFMgaW4gYSB3YXkgdGhhdCBjYW4gYmUgaGFuZGxlZCBieSB0aGUgYmFzaCBzY3JpcHQuCitDT01QX1dPUkRTPShcJDIpCisKKyMgVGhlIGN1cnNvciBpcyBhdCB0aGUgZW5kIG9mIHBhcmFtZXRlciAjMS4KKyMgV2UgbXVzdCBjaGVjayBmb3IgYSBzcGFjZSBhcyB0aGUgbGFzdCBjaGFyYWN0ZXIgd2hpY2ggd2lsbAorIyB0ZWxsIHVzIHRoYXQgdGhlIHByZXZpb3VzIHdvcmQgaXMgY29tcGxldGUgYW5kIHRoZSBjdXJzb3IKKyMgaXMgb24gdGhlIG5leHQgd29yZC4KK2lmIFsgIlwkezI6IC0xfSIgPT0gIiAiIF07IHRoZW4KKwkjIFRoZSBsYXN0IGNoYXJhY3RlciBpcyBhIHNwYWNlLCBzbyBvdXIgbG9jYXRpb24gaXMgYXQgdGhlIGVuZAorCSMgb2YgdGhlIGNvbW1hbmQtbGluZSBhcnJheQorCUNPTVBfQ1dPUkQ9XCR7I0NPTVBfV09SRFNbQF19CitlbHNlCisJIyBUaGUgbGFzdCBjaGFyYWN0ZXIgaXMgbm90IGEgc3BhY2UsIHNvIG91ciBsb2NhdGlvbiBpcyBvbiB0aGUKKwkjIGxhc3Qgd29yZCBvZiB0aGUgY29tbWFuZC1saW5lIGFycmF5LCBzbyB3ZSBtdXN0IGRlY3JlbWVudCB0aGUKKwkjIGNvdW50IGJ5IDEKKwlDT01QX0NXT1JEPVwkKChcJHsjQ09NUF9XT1JEU1tAXX0tMSkpCitmaQorCisjIENhbGwgX2dpdCgpIG9yIF9naXRrKCkgb2YgdGhlIGJhc2ggc2NyaXB0LCBiYXNlZCBvbiB0aGUgZmlyc3QgYXJndW1lbnQKK19cJHsxfQorCitJRlM9XCQnXG4nCitpZiBbIFwkeyNDT01QUkVQTFlbKl19IC1lcSAwIF07IHRoZW4KKwkjIE5vIGNvbXBsZXRpb25zIHN1Z2dlc3RlZC4gIEluIHRoaXMgY2FzZSwgd2Ugd2FudCB0Y3NoIHRvIHBlcmZvcm0KKwkjIHN0YW5kYXJkIGZpbGUgY29tcGxldGlvbi4gIEhvd2V2ZXIsIHRoZXJlIGRvZXMgbm90IHNlZW0gdG8gYmUgd2F5CisJIyB0byB0ZWxsIHRjc2ggdG8gZG8gdGhhdC4gIFRvIGhlbHAgdGhlIHVzZXIsIHdlIHRyeSB0byBzaW11bGF0ZQorCSMgZmlsZSBjb21wbGV0aW9uIGRpcmVjdGx5IGluIHRoaXMgc2NyaXB0LgorCSMKKwkjIEtub3duIGlzc3VlczoKKwkjICAgICAtIFBvc3NpYmxlIGNvbXBsZXRpb25zIGFyZSBzaG93biB3aXRoIHRoZWlyIGRpcmVjdG9yeSBwcmVmaXguCisJIyAgICAgLSBDb21wbGV0aW9ucyBjb250YWluaW5nIHNoZWxsIHZhcmlhYmxlcyBhcmUgbm90IGhhbmRsZWQuCisJIyAgICAgLSBDb21wbGV0aW9ucyB3aXRoIH4gYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBhcmUgbm90IGhhbmRsZWQuCisKKwkjIE5vIGZpbGUgY29tcGxldGlvbiBzaG91bGQgYmUgZG9uZSB1bmxlc3Mgd2UgYXJlIGNvbXBsZXRpbmcgYmV5b25kCisJIyB0aGUgZ2l0IHN1Yi1jb21tYW5kLiAgQW4gaW1wcm92ZW1lbnQgb24gdGhlIGJhc2ggY29tcGxldGlvbiA6KQorCWlmIFsgXCR7Q09NUF9DV09SRH0gLWd0IDEgXTsgdGhlbgorCQlUT19DT01QTEVURT0iXCR7Q09NUF9XT1JEU1tcJHtDT01QX0NXT1JEfV19IgorCisJCSMgV2UgZG9uJ3Qgc3VwcG9ydCB+IGV4cGFuc2lvbjogdG9vIHRyaWNreS4KKwkJaWYgWyAiXCR7VE9fQ09NUExFVEU6MDoxfSIgIT0gIn4iIF07IHRoZW4KKwkJCSMgVXNlIGxzIHNvIGFzIHRvIGFkZCB0aGUgJy8nIGF0IHRoZSBlbmQgb2YgZGlyZWN0b3JpZXMuCisJCQlDT01QUkVQTFk9KFxgbHMgLWRwIFwke1RPX0NPTVBMRVRFfSogMj4gL2Rldi9udWxsXGApCisJCWZpCisJZmkKK2ZpCisKKyMgdGNzaCBkb2VzIG5vdCBhdXRvbWF0aWNhbGx5IHJlbW92ZSBkdXBsaWNhdGVzLCBzbyB3ZSBkbyBpdCBvdXJzZWx2ZXMKK2VjaG8gIlwke0NPTVBSRVBMWVsqXX0iIHwgc29ydCB8IHVuaXEKKworIyBJZiB0aGVyZSBpcyBhIHNpbmdsZSBjb21wbGV0aW9uIGFuZCBpdCBpcyBhIGRpcmVjdG9yeSwgd2Ugb3V0cHV0IGl0CisjIGEgc2Vjb25kIHRpbWUgdG8gdHJpY2sgdGNzaCBpbnRvIG5vdCBhZGRpbmcgYSBzcGFjZSBhZnRlciBpdC4KK2lmIFsgXCR7I0NPTVBSRVBMWVsqXX0gLWVxIDEgXSAmJiBbICJcJHtDT01QUkVQTFlbMF06IC0xfSIgPT0gIi8iIF07IHRoZW4KKwllY2hvICJcJHtDT01QUkVQTFlbKl19IgorZmkKKworRU9GCisKKyMgRG9uJ3QgbmVlZCB0aGlzIHZhcmlhYmxlIGFueW1vcmUsIHNvIGRvbid0IHBvbGx1dGUgdGhlIHVzZXJzIGVudmlyb25tZW50Cit1bnNldCBfX2dpdF90Y3NoX2NvbXBsZXRpb25fb3JpZ2luYWxfc2NyaXB0CisKK2NvbXBsZXRlIGdpdCAgJ3AsKixgYmFzaCAke19fZ2l0X3Rjc2hfY29tcGxldGlvbl9zY3JpcHR9IGdpdCAiJHtDT01NQU5EX0xJTkV9ImAsJworY29tcGxldGUgZ2l0ayAncCwqLGBiYXNoICR7X19naXRfdGNzaF9jb21wbGV0aW9uX3NjcmlwdH0gZ2l0ayAiJHtDT01NQU5EX0xJTkV9ImAsJwpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLnpzaCBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi56c2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1NTQxMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtY29tcGxldGlvbi56c2gKQEAgLTAsMCArMSwyMjUgQEAKKyNjb21wZGVmIGdpdCBnaXRrCisKKyMgenNoIGNvbXBsZXRpb24gd3JhcHBlciBmb3IgZ2l0CisjCisjIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIEZlbGlwZSBDb250cmVyYXMgPGZlbGlwZS5jb250cmVyYXNAZ21haWwuY29tPgorIworIyBZb3UgbmVlZCBnaXQncyBiYXNoIGNvbXBsZXRpb24gc2NyaXB0IGluc3RhbGxlZCBzb21ld2hlcmUsIGJ5IGRlZmF1bHQgaXQKKyMgd291bGQgYmUgdGhlIGxvY2F0aW9uIGJhc2gtY29tcGxldGlvbiB1c2VzLgorIworIyBJZiB5b3VyIHNjcmlwdCBpcyBzb21ld2hlcmUgZWxzZSwgeW91IGNhbiBjb25maWd1cmUgaXQgb24geW91ciB+Ly56c2hyYzoKKyMKKyMgIHpzdHlsZSAnOmNvbXBsZXRpb246KjoqOmdpdDoqJyBzY3JpcHQgfi8uZ2l0LWNvbXBsZXRpb24uenNoCisjCisjIFRoZSByZWNvbW1lbmRlZCB3YXkgdG8gaW5zdGFsbCB0aGlzIHNjcmlwdCBpcyB0byBjb3B5IHRvICd+Ly56c2gvX2dpdCcsIGFuZAorIyB0aGVuIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgfi8uenNocmMgZmlsZToKKyMKKyMgIGZwYXRoPSh+Ly56c2ggJGZwYXRoKQorCitjb21wbGV0ZSAoKQoreworCSMgZG8gbm90aGluZworCXJldHVybiAwCit9CisKK3pzdHlsZSAtVCAnOmNvbXBsZXRpb246KjoqOmdpdDoqJyB0YWctb3JkZXIgJiYgXAorCXpzdHlsZSAnOmNvbXBsZXRpb246KjoqOmdpdDoqJyB0YWctb3JkZXIgJ2NvbW1vbi1jb21tYW5kcycKKworenN0eWxlIC1zICI6Y29tcGxldGlvbjoqOio6Z2l0OioiIHNjcmlwdCBzY3JpcHQKK2lmIFsgLXogIiRzY3JpcHQiIF07IHRoZW4KKwlsb2NhbCAtYSBsb2NhdGlvbnMKKwlsb2NhbCBlCisJbG9jYXRpb25zPSgKKwkJJChkaXJuYW1lICR7ZnVuY3NvdXJjZXRyYWNlWzFdJToqfSkvZ2l0LWNvbXBsZXRpb24uYmFzaAorCQknL2V0Yy9iYXNoX2NvbXBsZXRpb24uZC9naXQnICMgZmVkb3JhLCBvbGQgZGViaWFuCisJCScvdXNyL3NoYXJlL2Jhc2gtY29tcGxldGlvbi9jb21wbGV0aW9ucy9naXQnICMgYXJjaCwgdWJ1bnR1LCBuZXcgZGViaWFuCisJCScvdXNyL3NoYXJlL2Jhc2gtY29tcGxldGlvbi9naXQnICMgZ2VudG9vCisJCSkKKwlmb3IgZSBpbiAkbG9jYXRpb25zOyBkbworCQl0ZXN0IC1mICRlICYmIHNjcmlwdD0iJGUiICYmIGJyZWFrCisJZG9uZQorZmkKK1pTSF9WRVJTSU9OPScnIC4gIiRzY3JpcHQiCisKK19fZ2l0Y29tcCAoKQoreworCWVtdWxhdGUgLUwgenNoCisKKwlsb2NhbCBjdXJfPSIkezMtJGN1cn0iCisKKwljYXNlICIkY3VyXyIgaW4KKwktLSo9KQorCQk7OworCSopCisJCWxvY2FsIGMgSUZTPSQnIFx0XG4nCisJCWxvY2FsIC1hIGFycmF5CisJCWZvciBjIGluICR7PTF9OyBkbworCQkJYz0iJGMkezQtfSIKKwkJCWNhc2UgJGMgaW4KKwkJCS0tKj0qfCouKSA7OworCQkJKikgYz0iJGMgIiA7OworCQkJZXNhYworCQkJYXJyYXkrPSgiJGMiKQorCQlkb25lCisJCWNvbXBzZXQgLVAgJypbPTpdJworCQljb21wYWRkIC1RIC1TICcnIC1wICIkezItfSIgLWEgLS0gYXJyYXkgJiYgX3JldD0wCisJCTs7CisJZXNhYworfQorCitfX2dpdGNvbXBfbmwgKCkKK3sKKwllbXVsYXRlIC1MIHpzaAorCisJbG9jYWwgSUZTPSQnXG4nCisJY29tcHNldCAtUCAnKls9Ol0nCisJY29tcGFkZCAtUSAtUyAiJHs0LSB9IiAtcCAiJHsyLX0iIC0tICR7PTF9ICYmIF9yZXQ9MAorfQorCitfX2dpdGNvbXBfbmxfYXBwZW5kICgpCit7CisJZW11bGF0ZSAtTCB6c2gKKworCWxvY2FsIElGUz0kJ1xuJworCWNvbXBhZGQgLVEgLVMgIiR7NC0gfSIgLXAgIiR7Mi19IiAtLSAkez0xfSAmJiBfcmV0PTAKK30KKworX19naXRjb21wX2ZpbGUgKCkKK3sKKwllbXVsYXRlIC1MIHpzaAorCisJbG9jYWwgSUZTPSQnXG4nCisJY29tcHNldCAtUCAnKls9Ol0nCisJY29tcGFkZCAtUSAtcCAiJHsyLX0iIC1mIC0tICR7PTF9ICYmIF9yZXQ9MAorfQorCitfX2dpdF96c2hfYmFzaF9mdW5jICgpCit7CisJZW11bGF0ZSAtTCBrc2gKKworCWxvY2FsIGNvbW1hbmQ9JDEKKworCWxvY2FsIGNvbXBsZXRpb25fZnVuYz0iX2dpdF8ke2NvbW1hbmQvLy0vX30iCisJZGVjbGFyZSAtZiAkY29tcGxldGlvbl9mdW5jID4vZGV2L251bGwgJiYgJGNvbXBsZXRpb25fZnVuYyAmJiByZXR1cm4KKworCWxvY2FsIGV4cGFuc2lvbj0kKF9fZ2l0X2FsaWFzZWRfY29tbWFuZCAiJGNvbW1hbmQiKQorCWlmIFsgLW4gIiRleHBhbnNpb24iIF07IHRoZW4KKwkJd29yZHNbMV09JGV4cGFuc2lvbgorCQljb21wbGV0aW9uX2Z1bmM9Il9naXRfJHtleHBhbnNpb24vLy0vX30iCisJCWRlY2xhcmUgLWYgJGNvbXBsZXRpb25fZnVuYyA+L2Rldi9udWxsICYmICRjb21wbGV0aW9uX2Z1bmMKKwlmaQorfQorCitfX2dpdF96c2hfY21kX2NvbW1vbiAoKQoreworCWxvY2FsIC1hIGxpc3QKKwlsaXN0PSgKKwlhZGQ6J2FkZCBmaWxlIGNvbnRlbnRzIHRvIHRoZSBpbmRleCcKKwliaXNlY3Q6J2ZpbmQgYnkgYmluYXJ5IHNlYXJjaCB0aGUgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1ZycKKwlicmFuY2g6J2xpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzJworCWNoZWNrb3V0OidjaGVja291dCBhIGJyYW5jaCBvciBwYXRocyB0byB0aGUgd29ya2luZyB0cmVlJworCWNsb25lOidjbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnknCisJY29tbWl0OidyZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeScKKwlkaWZmOidzaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjJworCWZldGNoOidkb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5JworCWdyZXA6J3ByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybicKKwlpbml0OidjcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZScKKwlsb2c6J3Nob3cgY29tbWl0IGxvZ3MnCisJbWVyZ2U6J2pvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyJworCW12Oidtb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsnCisJcHVsbDonZmV0Y2ggZnJvbSBhbmQgbWVyZ2Ugd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2gnCisJcHVzaDondXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzJworCXJlYmFzZTonZm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCcKKwlyZXNldDoncmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUnCisJcm06J3JlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4JworCXNob3c6J3Nob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzJworCXN0YXR1czonc2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cycKKwl0YWc6J2NyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHJykKKwlfZGVzY3JpYmUgLXQgY29tbW9uLWNvbW1hbmRzICdjb21tb24gY29tbWFuZHMnIGxpc3QgJiYgX3JldD0wCit9CisKK19fZ2l0X3pzaF9jbWRfYWxpYXMgKCkKK3sKKwlsb2NhbCAtYSBsaXN0CisJbGlzdD0oJHskeyR7KDApIiQoZ2l0IGNvbmZpZyAteiAtLWdldC1yZWdleHAgJ15hbGlhc1wuJykifSNhbGlhcy59JSQnXG4nKn0pCisJX2Rlc2NyaWJlIC10IGFsaWFzLWNvbW1hbmRzICdhbGlhc2VzJyBsaXN0ICQqICYmIF9yZXQ9MAorfQorCitfX2dpdF96c2hfY21kX2FsbCAoKQoreworCWxvY2FsIC1hIGxpc3QKKwllbXVsYXRlIGtzaCAtYyBfX2dpdF9jb21wdXRlX2FsbF9jb21tYW5kcworCWxpc3Q9KCAkez1fX2dpdF9hbGxfY29tbWFuZHN9ICkKKwlfZGVzY3JpYmUgLXQgYWxsLWNvbW1hbmRzICdhbGwgY29tbWFuZHMnIGxpc3QgJiYgX3JldD0wCit9CisKK19fZ2l0X3pzaF9tYWluICgpCit7CisJbG9jYWwgY3VyY29udGV4dD0iJGN1cmNvbnRleHQiIHN0YXRlIHN0YXRlX2Rlc2NyIGxpbmUKKwl0eXBlc2V0IC1BIG9wdF9hcmdzCisJbG9jYWwgLWEgb3JpZ193b3JkcworCisJb3JpZ193b3Jkcz0oICR7d29yZHNbQF19ICkKKworCV9hcmd1bWVudHMgLUMgXAorCQknKC1wIC0tcGFnaW5hdGUgLS1uby1wYWdlcikney1wLC0tcGFnaW5hdGV9J1twaXBlIGFsbCBvdXRwdXQgaW50byAnJ2xlc3MnJ10nIFwKKwkJJygtcCAtLXBhZ2luYXRlKS0tbm8tcGFnZXJbZG8gbm90IHBpcGUgZ2l0IG91dHB1dCBpbnRvIGEgcGFnZXJdJyBcCisJCSctLWdpdC1kaXI9LVtzZXQgdGhlIHBhdGggdG8gdGhlIHJlcG9zaXRvcnldOiA6X2RpcmVjdG9yaWVzJyBcCisJCSctLWJhcmVbdHJlYXQgdGhlIHJlcG9zaXRvcnkgYXMgYSBiYXJlIHJlcG9zaXRvcnldJyBcCisJCScoLSA6KS0tdmVyc2lvbltwcmludHMgdGhlIGdpdCBzdWl0ZSB2ZXJzaW9uXScgXAorCQknLS1leGVjLXBhdGg9LVtwYXRoIHRvIHdoZXJlIHlvdXIgY29yZSBnaXQgcHJvZ3JhbXMgYXJlIGluc3RhbGxlZF06OiA6X2RpcmVjdG9yaWVzJyBcCisJCSctLWh0bWwtcGF0aFtwcmludCB0aGUgcGF0aCB3aGVyZSBnaXQnJ3MgSFRNTCBkb2N1bWVudGF0aW9uIGlzIGluc3RhbGxlZF0nIFwKKwkJJy0taW5mby1wYXRoW3ByaW50IHRoZSBwYXRoIHdoZXJlIHRoZSBJbmZvIGZpbGVzIGFyZSBpbnN0YWxsZWRdJyBcCisJCSctLW1hbi1wYXRoW3ByaW50IHRoZSBtYW5wYXRoIChzZWUgYG1hbigxKWApIGZvciB0aGUgbWFuIHBhZ2VzXScgXAorCQknLS13b3JrLXRyZWU9LVtzZXQgdGhlIHBhdGggdG8gdGhlIHdvcmtpbmcgdHJlZV06IDpfZGlyZWN0b3JpZXMnIFwKKwkJJy0tbmFtZXNwYWNlPS1bc2V0IHRoZSBnaXQgbmFtZXNwYWNlXScgXAorCQknLS1uby1yZXBsYWNlLW9iamVjdHNbZG8gbm90IHVzZSByZXBsYWNlbWVudCByZWZzIHRvIHJlcGxhY2UgZ2l0IG9iamVjdHNdJyBcCisJCScoLSA6KS0taGVscFtwcmludHMgdGhlIHN5bm9wc2lzIGFuZCBhIGxpc3Qgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBjb21tYW5kc106IDotPmFyZycgXAorCQknKC0pOiA6LT5jb21tYW5kJyBcCisJCScoLSkqOjogOi0+YXJnJyAmJiByZXR1cm4KKworCWNhc2UgJHN0YXRlIGluCisJKGNvbW1hbmQpCisJCV9hbHRlcm5hdGl2ZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsaWFzLWNvbW1hbmRzOmFsaWFzOl9fZ2l0X3pzaF9jbWRfYWxpYXMnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbW9uLWNvbW1hbmRzOmNvbW1vbjpfX2dpdF96c2hfY21kX2NvbW1vbicgXAorICAgICAgICAgICAgICAgICAgICAgICAgICdhbGwtY29tbWFuZHM6YWxsOl9fZ2l0X3pzaF9jbWRfYWxsJyAmJiBfcmV0PTAKKwkJOzsKKwkoYXJnKQorCQlsb2NhbCBjb21tYW5kPSIke3dvcmRzWzFdfSIgX19naXRfZGlyCisKKwkJaWYgKCggJCtvcHRfYXJnc1stLWJhcmVdICkpOyB0aGVuCisJCQlfX2dpdF9kaXI9Jy4nCisJCWVsc2UKKwkJCV9fZ2l0X2Rpcj0ke29wdF9hcmdzWy0tZ2l0LWRpcl19CisJCWZpCisKKwkJKCggJCtvcHRfYXJnc1stLWhlbHBdICkpICYmIGNvbW1hbmQ9J2hlbHAnCisKKwkJd29yZHM9KCAke29yaWdfd29yZHNbQF19ICkKKworCQlfX2dpdF96c2hfYmFzaF9mdW5jICRjb21tYW5kCisJCTs7CisJZXNhYworfQorCitfZ2l0ICgpCit7CisJbG9jYWwgX3JldD0xCisJbG9jYWwgY3VyIGN3b3JkIHByZXYKKworCWN1cj0ke3dvcmRzW0NVUlJFTlRdfQorCXByZXY9JHt3b3Jkc1tDVVJSRU5ULTFdfQorCWxldCBjd29yZD1DVVJSRU5ULTEKKworCWlmICgoICQrZnVuY3Rpb25zW19fJHtzZXJ2aWNlfV96c2hfbWFpbl0gKSk7IHRoZW4KKwkJX18ke3NlcnZpY2V9X3pzaF9tYWluCisJZWxzZQorCQllbXVsYXRlIGtzaCAtYyBfXyR7c2VydmljZX1fbWFpbgorCWZpCisKKwlsZXQgX3JldCAmJiBfZGVmYXVsdCAmJiBfcmV0PTAKKwlyZXR1cm4gX3JldAorfQorCitfZ2l0CmRpZmYgLS1naXQgYS9jb250cmliL2NvbXBsZXRpb24vZ2l0LXByb21wdC5zaCBiL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YjUyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvbXBsZXRpb24vZ2l0LXByb21wdC5zaApAQCAtMCwwICsxLDUzMiBAQAorIyBiYXNoL3pzaCBnaXQgcHJvbXB0IHN1cHBvcnQKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPgorIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4wLgorIworIyBUaGlzIHNjcmlwdCBhbGxvd3MgeW91IHRvIHNlZSByZXBvc2l0b3J5IHN0YXR1cyBpbiB5b3VyIHByb21wdC4KKyMKKyMgVG8gZW5hYmxlOgorIworIyAgICAxKSBDb3B5IHRoaXMgZmlsZSB0byBzb21ld2hlcmUgKGUuZy4gfi8uZ2l0LXByb21wdC5zaCkuCisjICAgIDIpIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8geW91ciAuYmFzaHJjLy56c2hyYzoKKyMgICAgICAgIHNvdXJjZSB+Ly5naXQtcHJvbXB0LnNoCisjICAgIDNhKSBDaGFuZ2UgeW91ciBQUzEgdG8gY2FsbCBfX2dpdF9wczEgYXMKKyMgICAgICAgIGNvbW1hbmQtc3Vic3RpdHV0aW9uOgorIyAgICAgICAgQmFzaDogUFMxPSdbXHVAXGggXFckKF9fZ2l0X3BzMSAiICglcykiKV1cJCAnCisjICAgICAgICBaU0g6ICBzZXRvcHQgUFJPTVBUX1NVQlNUIDsgUFMxPSdbJW5AJW0gJWMkKF9fZ2l0X3BzMSAiICglcykiKV1cJCAnCisjICAgICAgICB0aGUgb3B0aW9uYWwgYXJndW1lbnQgd2lsbCBiZSB1c2VkIGFzIGZvcm1hdCBzdHJpbmcuCisjICAgIDNiKSBBbHRlcm5hdGl2ZWx5LCBmb3IgYSBzbGlnaHRseSBmYXN0ZXIgcHJvbXB0LCBfX2dpdF9wczEgY2FuCisjICAgICAgICBiZSB1c2VkIGZvciBQUk9NUFRfQ09NTUFORCBpbiBCYXNoIG9yIGZvciBwcmVjbWQoKSBpbiBac2gKKyMgICAgICAgIHdpdGggdHdvIHBhcmFtZXRlcnMsIDxwcmU+IGFuZCA8cG9zdD4sIHdoaWNoIGFyZSBzdHJpbmdzCisjICAgICAgICB5b3Ugd291bGQgcHV0IGluICRQUzEgYmVmb3JlIGFuZCBhZnRlciB0aGUgc3RhdHVzIHN0cmluZworIyAgICAgICAgZ2VuZXJhdGVkIGJ5IHRoZSBnaXQtcHJvbXB0IG1hY2hpbmVyeS4gIGUuZy4KKyMgICAgICAgIEJhc2g6IFBST01QVF9DT01NQU5EPSdfX2dpdF9wczEgIlx1QFxoOlx3IiAiXFxcJCAiJworIyAgICAgICAgICB3aWxsIHNob3cgdXNlcm5hbWUsIGF0LXNpZ24sIGhvc3QsIGNvbG9uLCBjd2QsIHRoZW4KKyMgICAgICAgICAgdmFyaW91cyBzdGF0dXMgc3RyaW5nLCBmb2xsb3dlZCBieSBkb2xsYXIgYW5kIFNQLCBhcworIyAgICAgICAgICB5b3VyIHByb21wdC4KKyMgICAgICAgIFpTSDogIHByZWNtZCAoKSB7IF9fZ2l0X3BzMSAiJW4iICI6JX4kICIgInwlcyIgfQorIyAgICAgICAgICB3aWxsIHNob3cgdXNlcm5hbWUsIHBpcGUsIHRoZW4gdmFyaW91cyBzdGF0dXMgc3RyaW5nLAorIyAgICAgICAgICBmb2xsb3dlZCBieSBjb2xvbiwgY3dkLCBkb2xsYXIgYW5kIFNQLCBhcyB5b3VyIHByb21wdC4KKyMgICAgICAgIE9wdGlvbmFsbHksIHlvdSBjYW4gc3VwcGx5IGEgdGhpcmQgYXJndW1lbnQgd2l0aCBhIHByaW50ZgorIyAgICAgICAgZm9ybWF0IHN0cmluZyB0byBmaW5ldHVuZSB0aGUgb3V0cHV0IG9mIHRoZSBicmFuY2ggc3RhdHVzCisjCisjIFRoZSByZXBvc2l0b3J5IHN0YXR1cyB3aWxsIGJlIGRpc3BsYXllZCBvbmx5IGlmIHlvdSBhcmUgY3VycmVudGx5IGluIGEKKyMgZ2l0IHJlcG9zaXRvcnkuIFRoZSAlcyB0b2tlbiBpcyB0aGUgcGxhY2Vob2xkZXIgZm9yIHRoZSBzaG93biBzdGF0dXMuCisjCisjIFRoZSBwcm9tcHQgc3RhdHVzIGFsd2F5cyBpbmNsdWRlcyB0aGUgY3VycmVudCBicmFuY2ggbmFtZS4KKyMKKyMgSW4gYWRkaXRpb24sIGlmIHlvdSBzZXQgR0lUX1BTMV9TSE9XRElSVFlTVEFURSB0byBhIG5vbmVtcHR5IHZhbHVlLAorIyB1bnN0YWdlZCAoKikgYW5kIHN0YWdlZCAoKykgY2hhbmdlcyB3aWxsIGJlIHNob3duIG5leHQgdG8gdGhlIGJyYW5jaAorIyBuYW1lLiAgWW91IGNhbiBjb25maWd1cmUgdGhpcyBwZXItcmVwb3NpdG9yeSB3aXRoIHRoZQorIyBiYXNoLnNob3dEaXJ0eVN0YXRlIHZhcmlhYmxlLCB3aGljaCBkZWZhdWx0cyB0byB0cnVlIG9uY2UKKyMgR0lUX1BTMV9TSE9XRElSVFlTVEFURSBpcyBlbmFibGVkLgorIworIyBZb3UgY2FuIGFsc28gc2VlIGlmIGN1cnJlbnRseSBzb21ldGhpbmcgaXMgc3Rhc2hlZCwgYnkgc2V0dGluZworIyBHSVRfUFMxX1NIT1dTVEFTSFNUQVRFIHRvIGEgbm9uZW1wdHkgdmFsdWUuIElmIHNvbWV0aGluZyBpcyBzdGFzaGVkLAorIyB0aGVuIGEgJyQnIHdpbGwgYmUgc2hvd24gbmV4dCB0byB0aGUgYnJhbmNoIG5hbWUuCisjCisjIElmIHlvdSB3b3VsZCBsaWtlIHRvIHNlZSBpZiB0aGVyZSdyZSB1bnRyYWNrZWQgZmlsZXMsIHRoZW4geW91IGNhbiBzZXQKKyMgR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVMgdG8gYSBub25lbXB0eSB2YWx1ZS4gSWYgdGhlcmUncmUgdW50cmFja2VkCisjIGZpbGVzLCB0aGVuIGEgJyUnIHdpbGwgYmUgc2hvd24gbmV4dCB0byB0aGUgYnJhbmNoIG5hbWUuICBZb3UgY2FuCisjIGNvbmZpZ3VyZSB0aGlzIHBlci1yZXBvc2l0b3J5IHdpdGggdGhlIGJhc2guc2hvd1VudHJhY2tlZEZpbGVzCisjIHZhcmlhYmxlLCB3aGljaCBkZWZhdWx0cyB0byB0cnVlIG9uY2UgR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVMgaXMKKyMgZW5hYmxlZC4KKyMKKyMgSWYgeW91IHdvdWxkIGxpa2UgdG8gc2VlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gSEVBRCBhbmQgaXRzIHVwc3RyZWFtLAorIyBzZXQgR0lUX1BTMV9TSE9XVVBTVFJFQU09ImF1dG8iLiAgQSAiPCIgaW5kaWNhdGVzIHlvdSBhcmUgYmVoaW5kLCAiPiIKKyMgaW5kaWNhdGVzIHlvdSBhcmUgYWhlYWQsICI8PiIgaW5kaWNhdGVzIHlvdSBoYXZlIGRpdmVyZ2VkIGFuZCAiPSIKKyMgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZS4gWW91IGNhbiBmdXJ0aGVyIGNvbnRyb2wKKyMgYmVoYXZpb3VyIGJ5IHNldHRpbmcgR0lUX1BTMV9TSE9XVVBTVFJFQU0gdG8gYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdAorIyBvZiB2YWx1ZXM6CisjCisjICAgICB2ZXJib3NlICAgICAgIHNob3cgbnVtYmVyIG9mIGNvbW1pdHMgYWhlYWQvYmVoaW5kICgrLy0pIHVwc3RyZWFtCisjICAgICBuYW1lICAgICAgICAgIGlmIHZlcmJvc2UsIHRoZW4gYWxzbyBzaG93IHRoZSB1cHN0cmVhbSBhYmJyZXYgbmFtZQorIyAgICAgbGVnYWN5ICAgICAgICBkb24ndCB1c2UgdGhlICctLWNvdW50JyBvcHRpb24gYXZhaWxhYmxlIGluIHJlY2VudAorIyAgICAgICAgICAgICAgICAgICB2ZXJzaW9ucyBvZiBnaXQtcmV2LWxpc3QKKyMgICAgIGdpdCAgICAgICAgICAgYWx3YXlzIGNvbXBhcmUgSEVBRCB0byBAe3Vwc3RyZWFtfQorIyAgICAgc3ZuICAgICAgICAgICBhbHdheXMgY29tcGFyZSBIRUFEIHRvIHlvdXIgU1ZOIHVwc3RyZWFtCisjCisjIFlvdSBjYW4gY2hhbmdlIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgYnJhbmNoIG5hbWUgYW5kIHRoZSBhYm92ZQorIyBzdGF0ZSBzeW1ib2xzIGJ5IHNldHRpbmcgR0lUX1BTMV9TVEFURVNFUEFSQVRPUi4gVGhlIGRlZmF1bHQgc2VwYXJhdG9yCisjIGlzIFNQLgorIworIyBCeSBkZWZhdWx0LCBfX2dpdF9wczEgd2lsbCBjb21wYXJlIEhFQUQgdG8geW91ciBTVk4gdXBzdHJlYW0gaWYgaXQgY2FuCisjIGZpbmQgb25lLCBvciBAe3Vwc3RyZWFtfSBvdGhlcndpc2UuICBPbmNlIHlvdSBoYXZlIHNldAorIyBHSVRfUFMxX1NIT1dVUFNUUkVBTSwgeW91IGNhbiBvdmVycmlkZSBpdCBvbiBhIHBlci1yZXBvc2l0b3J5IGJhc2lzIGJ5CisjIHNldHRpbmcgdGhlIGJhc2guc2hvd1Vwc3RyZWFtIGNvbmZpZyB2YXJpYWJsZS4KKyMKKyMgSWYgeW91IHdvdWxkIGxpa2UgdG8gc2VlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGlkZW50aXR5IG9mCisjIGNvbW1pdHMgY2hlY2tlZCBvdXQgYXMgYSBkZXRhY2hlZCBIRUFELCBzZXQgR0lUX1BTMV9ERVNDUklCRV9TVFlMRQorIyB0byBvbmUgb2YgdGhlc2UgdmFsdWVzOgorIworIyAgICAgY29udGFpbnMgICAgICByZWxhdGl2ZSB0byBuZXdlciBhbm5vdGF0ZWQgdGFnICh2MS42LjMuMn4zNSkKKyMgICAgIGJyYW5jaCAgICAgICAgcmVsYXRpdmUgdG8gbmV3ZXIgdGFnIG9yIGJyYW5jaCAobWFzdGVyfjQpCisjICAgICBkZXNjcmliZSAgICAgIHJlbGF0aXZlIHRvIG9sZGVyIGFubm90YXRlZCB0YWcgKHYxLjYuMy4xLTEzLWdkZDQyYzJmKQorIyAgICAgZGVmYXVsdCAgICAgICBleGFjdGx5IG1hdGNoaW5nIHRhZworIworIyBJZiB5b3Ugd291bGQgbGlrZSBhIGNvbG9yZWQgaGludCBhYm91dCB0aGUgY3VycmVudCBkaXJ0eSBzdGF0ZSwgc2V0CisjIEdJVF9QUzFfU0hPV0NPTE9SSElOVFMgdG8gYSBub25lbXB0eSB2YWx1ZS4gVGhlIGNvbG9ycyBhcmUgYmFzZWQgb24KKyMgdGhlIGNvbG9yZWQgb3V0cHV0IG9mICJnaXQgc3RhdHVzIC1zYiIgYW5kIGFyZSBhdmFpbGFibGUgb25seSB3aGVuCisjIHVzaW5nIF9fZ2l0X3BzMSBmb3IgUFJPTVBUX0NPTU1BTkQgb3IgcHJlY21kLgorIworIyBJZiB5b3Ugd291bGQgbGlrZSBfX2dpdF9wczEgdG8gZG8gbm90aGluZyBpbiB0aGUgY2FzZSB3aGVuIHRoZSBjdXJyZW50CisjIGRpcmVjdG9yeSBpcyBzZXQgdXAgdG8gYmUgaWdub3JlZCBieSBnaXQsIHRoZW4gc2V0CisjIEdJVF9QUzFfSElERV9JRl9QV0RfSUdOT1JFRCB0byBhIG5vbmVtcHR5IHZhbHVlLiBPdmVycmlkZSB0aGlzIG9uIHRoZQorIyByZXBvc2l0b3J5IGxldmVsIGJ5IHNldHRpbmcgYmFzaC5oaWRlSWZQd2RJZ25vcmVkIHRvICJmYWxzZSIuCisKKyMgY2hlY2sgd2hldGhlciBwcmludGYgc3VwcG9ydHMgLXYKK19fZ2l0X3ByaW50Zl9zdXBwb3J0c192PQorcHJpbnRmIC12IF9fZ2l0X3ByaW50Zl9zdXBwb3J0c192IC0tICclcycgeWVzID4vZGV2L251bGwgMj4mMQorCisjIHN0b3JlcyB0aGUgZGl2ZXJnZW5jZSBmcm9tIHVwc3RyZWFtIGluICRwCisjIHVzZWQgYnkgR0lUX1BTMV9TSE9XVVBTVFJFQU0KK19fZ2l0X3BzMV9zaG93X3Vwc3RyZWFtICgpCit7CisJbG9jYWwga2V5IHZhbHVlCisJbG9jYWwgc3ZuX3JlbW90ZSBzdm5fdXJsX3BhdHRlcm4gY291bnQgbgorCWxvY2FsIHVwc3RyZWFtPWdpdCBsZWdhY3k9IiIgdmVyYm9zZT0iIiBuYW1lPSIiCisKKwlzdm5fcmVtb3RlPSgpCisJIyBnZXQgc29tZSBjb25maWcgb3B0aW9ucyBmcm9tIGdpdC1jb25maWcKKwlsb2NhbCBvdXRwdXQ9IiQoZ2l0IGNvbmZpZyAteiAtLWdldC1yZWdleHAgJ14oc3ZuLXJlbW90ZVwuLipcLnVybHxiYXNoXC5zaG93dXBzdHJlYW0pJCcgMj4vZGV2L251bGwgfCB0ciAnXDBcbicgJ1xuICcpIgorCXdoaWxlIHJlYWQgLXIga2V5IHZhbHVlOyBkbworCQljYXNlICIka2V5IiBpbgorCQliYXNoLnNob3d1cHN0cmVhbSkKKwkJCUdJVF9QUzFfU0hPV1VQU1RSRUFNPSIkdmFsdWUiCisJCQlpZiBbWyAteiAiJHtHSVRfUFMxX1NIT1dVUFNUUkVBTX0iIF1dOyB0aGVuCisJCQkJcD0iIgorCQkJCXJldHVybgorCQkJZmkKKwkJCTs7CisJCXN2bi1yZW1vdGUuKi51cmwpCisJCQlzdm5fcmVtb3RlWyQoKCR7I3N2bl9yZW1vdGVbQF19ICsgMSkpXT0iJHZhbHVlIgorCQkJc3ZuX3VybF9wYXR0ZXJuPSIkc3ZuX3VybF9wYXR0ZXJuXFx8JHZhbHVlIgorCQkJdXBzdHJlYW09c3ZuK2dpdCAjIGRlZmF1bHQgdXBzdHJlYW0gaXMgU1ZOIGlmIGF2YWlsYWJsZSwgZWxzZSBnaXQKKwkJCTs7CisJCWVzYWMKKwlkb25lIDw8PCAiJG91dHB1dCIKKworCSMgcGFyc2UgY29uZmlndXJhdGlvbiB2YWx1ZXMKKwlmb3Igb3B0aW9uIGluICR7R0lUX1BTMV9TSE9XVVBTVFJFQU19OyBkbworCQljYXNlICIkb3B0aW9uIiBpbgorCQlnaXR8c3ZuKSB1cHN0cmVhbT0iJG9wdGlvbiIgOzsKKwkJdmVyYm9zZSkgdmVyYm9zZT0xIDs7CisJCWxlZ2FjeSkgIGxlZ2FjeT0xICA7OworCQluYW1lKSAgICBuYW1lPTEgOzsKKwkJZXNhYworCWRvbmUKKworCSMgRmluZCBvdXIgdXBzdHJlYW0KKwljYXNlICIkdXBzdHJlYW0iIGluCisJZ2l0KSAgICB1cHN0cmVhbT0iQHt1cHN0cmVhbX0iIDs7CisJc3ZuKikKKwkJIyBnZXQgdGhlIHVwc3RyZWFtIGZyb20gdGhlICJnaXQtc3ZuLWlkOiAuLi4iIGluIGEgY29tbWl0IG1lc3NhZ2UKKwkJIyAoZ2l0LXN2biB1c2VzIGVzc2VudGlhbGx5IHRoZSBzYW1lIHByb2NlZHVyZSBpbnRlcm5hbGx5KQorCQlsb2NhbCAtYSBzdm5fdXBzdHJlYW0KKwkJc3ZuX3Vwc3RyZWFtPSgkKGdpdCBsb2cgLS1maXJzdC1wYXJlbnQgLTEgXAorCQkJCQktLWdyZXA9Il5naXQtc3ZuLWlkOiBcKCR7c3ZuX3VybF9wYXR0ZXJuIz8/fVwpIiAyPi9kZXYvbnVsbCkpCisJCWlmIFtbIDAgLW5lICR7I3N2bl91cHN0cmVhbVtAXX0gXV07IHRoZW4KKwkJCXN2bl91cHN0cmVhbT0ke3N2bl91cHN0cmVhbVskeyNzdm5fdXBzdHJlYW1bQF19IC0gMl19CisJCQlzdm5fdXBzdHJlYW09JHtzdm5fdXBzdHJlYW0lQCp9CisJCQlsb2NhbCBuX3N0b3A9IiR7I3N2bl9yZW1vdGVbQF19IgorCQkJZm9yICgobj0xOyBuIDw9IG5fc3RvcDsgbisrKSk7IGRvCisJCQkJc3ZuX3Vwc3RyZWFtPSR7c3ZuX3Vwc3RyZWFtIyR7c3ZuX3JlbW90ZVskbl19fQorCQkJZG9uZQorCisJCQlpZiBbWyAteiAiJHN2bl91cHN0cmVhbSIgXV07IHRoZW4KKwkJCQkjIGRlZmF1bHQgYnJhbmNoIG5hbWUgZm9yIGNoZWNrb3V0cyB3aXRoIG5vIGxheW91dDoKKwkJCQl1cHN0cmVhbT0ke0dJVF9TVk5fSUQ6LWdpdC1zdm59CisJCQllbHNlCisJCQkJdXBzdHJlYW09JHtzdm5fdXBzdHJlYW0jL30KKwkJCWZpCisJCWVsaWYgW1sgInN2bitnaXQiID0gIiR1cHN0cmVhbSIgXV07IHRoZW4KKwkJCXVwc3RyZWFtPSJAe3Vwc3RyZWFtfSIKKwkJZmkKKwkJOzsKKwllc2FjCisKKwkjIEZpbmQgaG93IG1hbnkgY29tbWl0cyB3ZSBhcmUgYWhlYWQvYmVoaW5kIG91ciB1cHN0cmVhbQorCWlmIFtbIC16ICIkbGVnYWN5IiBdXTsgdGhlbgorCQljb3VudD0iJChnaXQgcmV2LWxpc3QgLS1jb3VudCAtLWxlZnQtcmlnaHQgXAorCQkJCSIkdXBzdHJlYW0iLi4uSEVBRCAyPi9kZXYvbnVsbCkiCisJZWxzZQorCQkjIHByb2R1Y2UgZXF1aXZhbGVudCBvdXRwdXQgdG8gLS1jb3VudCBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgZ2l0CisJCWxvY2FsIGNvbW1pdHMKKwkJaWYgY29tbWl0cz0iJChnaXQgcmV2LWxpc3QgLS1sZWZ0LXJpZ2h0ICIkdXBzdHJlYW0iLi4uSEVBRCAyPi9kZXYvbnVsbCkiCisJCXRoZW4KKwkJCWxvY2FsIGNvbW1pdCBiZWhpbmQ9MCBhaGVhZD0wCisJCQlmb3IgY29tbWl0IGluICRjb21taXRzCisJCQlkbworCQkJCWNhc2UgIiRjb21taXQiIGluCisJCQkJIjwiKikgKChiZWhpbmQrKykpIDs7CisJCQkJKikgICAgKChhaGVhZCsrKSkgIDs7CisJCQkJZXNhYworCQkJZG9uZQorCQkJY291bnQ9IiRiZWhpbmQJJGFoZWFkIgorCQllbHNlCisJCQljb3VudD0iIgorCQlmaQorCWZpCisKKwkjIGNhbGN1bGF0ZSB0aGUgcmVzdWx0CisJaWYgW1sgLXogIiR2ZXJib3NlIiBdXTsgdGhlbgorCQljYXNlICIkY291bnQiIGluCisJCSIiKSAjIG5vIHVwc3RyZWFtCisJCQlwPSIiIDs7CisJCSIwCTAiKSAjIGVxdWFsIHRvIHVwc3RyZWFtCisJCQlwPSI9IiA7OworCQkiMAkiKikgIyBhaGVhZCBvZiB1cHN0cmVhbQorCQkJcD0iPiIgOzsKKwkJKiIJMCIpICMgYmVoaW5kIHVwc3RyZWFtCisJCQlwPSI8IiA7OworCQkqKQkgICAgIyBkaXZlcmdlZCBmcm9tIHVwc3RyZWFtCisJCQlwPSI8PiIgOzsKKwkJZXNhYworCWVsc2UKKwkJY2FzZSAiJGNvdW50IiBpbgorCQkiIikgIyBubyB1cHN0cmVhbQorCQkJcD0iIiA7OworCQkiMAkwIikgIyBlcXVhbCB0byB1cHN0cmVhbQorCQkJcD0iIHU9IiA7OworCQkiMAkiKikgIyBhaGVhZCBvZiB1cHN0cmVhbQorCQkJcD0iIHUrJHtjb3VudCMwCX0iIDs7CisJCSoiCTAiKSAjIGJlaGluZCB1cHN0cmVhbQorCQkJcD0iIHUtJHtjb3VudCUJMH0iIDs7CisJCSopCSAgICAjIGRpdmVyZ2VkIGZyb20gdXBzdHJlYW0KKwkJCXA9IiB1KyR7Y291bnQjKgl9LSR7Y291bnQlCSp9IiA7OworCQllc2FjCisJCWlmIFtbIC1uICIkY291bnQiICYmIC1uICIkbmFtZSIgXV07IHRoZW4KKwkJCV9fZ2l0X3BzMV91cHN0cmVhbV9uYW1lPSQoZ2l0IHJldi1wYXJzZSBcCisJCQkJLS1hYmJyZXYtcmVmICIkdXBzdHJlYW0iIDI+L2Rldi9udWxsKQorCQkJaWYgWyAkcGNtb2RlID0geWVzIF0gJiYgWyAkcHMxX2V4cGFuZGVkID0geWVzIF07IHRoZW4KKwkJCQlwPSIkcCBcJHtfX2dpdF9wczFfdXBzdHJlYW1fbmFtZX0iCisJCQllbHNlCisJCQkJcD0iJHAgJHtfX2dpdF9wczFfdXBzdHJlYW1fbmFtZX0iCisJCQkJIyBub3QgbmVlZGVkIGFueW1vcmU7IGtlZXAgdXNlcidzCisJCQkJIyBlbnZpcm9ubWVudCBjbGVhbgorCQkJCXVuc2V0IF9fZ2l0X3BzMV91cHN0cmVhbV9uYW1lCisJCQlmaQorCQlmaQorCWZpCisKK30KKworIyBIZWxwZXIgZnVuY3Rpb24gdGhhdCBpcyBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSBfX2dpdF9wczEuICBJdAorIyBpbmplY3RzIGNvbG9yIGNvZGVzIGludG8gdGhlIGFwcHJvcHJpYXRlIGdpdHN0cmluZyB2YXJpYWJsZXMgdXNlZAorIyB0byBidWlsZCBhIGdpdHN0cmluZy4KK19fZ2l0X3BzMV9jb2xvcml6ZV9naXRzdHJpbmcgKCkKK3sKKwlpZiBbWyAtbiAke1pTSF9WRVJTSU9OLX0gXV07IHRoZW4KKwkJbG9jYWwgY19yZWQ9JyVGe3JlZH0nCisJCWxvY2FsIGNfZ3JlZW49JyVGe2dyZWVufScKKwkJbG9jYWwgY19sYmx1ZT0nJUZ7Ymx1ZX0nCisJCWxvY2FsIGNfY2xlYXI9JyVmJworCWVsc2UKKwkJIyBVc2luZyBcWyBhbmQgXF0gYXJvdW5kIGNvbG9ycyBpcyBuZWNlc3NhcnkgdG8gcHJldmVudAorCQkjIGlzc3VlcyB3aXRoIGNvbW1hbmQgbGluZSBlZGl0aW5nL2Jyb3dzaW5nL2NvbXBsZXRpb24hCisJCWxvY2FsIGNfcmVkPSdcW1xlWzMxbVxdJworCQlsb2NhbCBjX2dyZWVuPSdcW1xlWzMybVxdJworCQlsb2NhbCBjX2xibHVlPSdcW1xlWzE7MzRtXF0nCisJCWxvY2FsIGNfY2xlYXI9J1xbXGVbMG1cXScKKwlmaQorCWxvY2FsIGJhZF9jb2xvcj0kY19yZWQKKwlsb2NhbCBva19jb2xvcj0kY19ncmVlbgorCWxvY2FsIGZsYWdzX2NvbG9yPSIkY19sYmx1ZSIKKworCWxvY2FsIGJyYW5jaF9jb2xvcj0iIgorCWlmIFsgJGRldGFjaGVkID0gbm8gXTsgdGhlbgorCQlicmFuY2hfY29sb3I9IiRva19jb2xvciIKKwllbHNlCisJCWJyYW5jaF9jb2xvcj0iJGJhZF9jb2xvciIKKwlmaQorCWM9IiRicmFuY2hfY29sb3IkYyIKKworCXo9IiRjX2NsZWFyJHoiCisJaWYgWyAiJHciID0gIioiIF07IHRoZW4KKwkJdz0iJGJhZF9jb2xvciR3IgorCWZpCisJaWYgWyAtbiAiJGkiIF07IHRoZW4KKwkJaT0iJG9rX2NvbG9yJGkiCisJZmkKKwlpZiBbIC1uICIkcyIgXTsgdGhlbgorCQlzPSIkZmxhZ3NfY29sb3IkcyIKKwlmaQorCWlmIFsgLW4gIiR1IiBdOyB0aGVuCisJCXU9IiRiYWRfY29sb3IkdSIKKwlmaQorCXI9IiRjX2NsZWFyJHIiCit9CisKK19fZ2l0X2VyZWFkICgpCit7CisJbG9jYWwgZj0iJDEiCisJc2hpZnQKKwl0ZXN0IC1yICIkZiIgJiYgcmVhZCAiJEAiIDwiJGYiCit9CisKKyMgX19naXRfcHMxIGFjY2VwdHMgMCBvciAxIGFyZ3VtZW50cyAoaS5lLiwgZm9ybWF0IHN0cmluZykKKyMgd2hlbiBjYWxsZWQgZnJvbSBQUzEgdXNpbmcgY29tbWFuZCBzdWJzdGl0dXRpb24KKyMgaW4gdGhpcyBtb2RlIGl0IHByaW50cyB0ZXh0IHRvIGFkZCB0byBiYXNoIFBTMSBwcm9tcHQgKGluY2x1ZGVzIGJyYW5jaCBuYW1lKQorIworIyBfX2dpdF9wczEgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyB3aGVuIGNhbGxlZCBmcm9tIFBST01QVF9DT01NQU5EIChwYykKKyMgaW4gdGhhdCBjYXNlIGl0IF9zZXRzXyBQUzEuIFRoZSBhcmd1bWVudHMgYXJlIHBhcnRzIG9mIGEgUFMxIHN0cmluZy4KKyMgd2hlbiB0d28gYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhlIGZpcnN0IGlzIHByZXBlbmRlZCBhbmQgdGhlIHNlY29uZCBhcHBlbmRlZAorIyB0byB0aGUgc3RhdGUgc3RyaW5nIHdoZW4gYXNzaWduZWQgdG8gUFMxLgorIyBUaGUgb3B0aW9uYWwgdGhpcmQgcGFyYW1ldGVyIHdpbGwgYmUgdXNlZCBhcyBwcmludGYgZm9ybWF0IHN0cmluZyB0byBmdXJ0aGVyCisjIGN1c3RvbWl6ZSB0aGUgb3V0cHV0IG9mIHRoZSBnaXQtc3RhdHVzIHN0cmluZy4KKyMgSW4gdGhpcyBtb2RlIHlvdSBjYW4gcmVxdWVzdCBjb2xvcmVkIGhpbnRzIHVzaW5nIEdJVF9QUzFfU0hPV0NPTE9SSElOVFM9dHJ1ZQorX19naXRfcHMxICgpCit7CisJIyBwcmVzZXJ2ZSBleGl0IHN0YXR1cworCWxvY2FsIGV4aXQ9JD8KKwlsb2NhbCBwY21vZGU9bm8KKwlsb2NhbCBkZXRhY2hlZD1ubworCWxvY2FsIHBzMXBjX3N0YXJ0PSdcdUBcaDpcdyAnCisJbG9jYWwgcHMxcGNfZW5kPSdcJCAnCisJbG9jYWwgcHJpbnRmX2Zvcm1hdD0nICglcyknCisKKwljYXNlICIkIyIgaW4KKwkJMnwzKQlwY21vZGU9eWVzCisJCQlwczFwY19zdGFydD0iJDEiCisJCQlwczFwY19lbmQ9IiQyIgorCQkJcHJpbnRmX2Zvcm1hdD0iJHszOi0kcHJpbnRmX2Zvcm1hdH0iCisJCQkjIHNldCBQUzEgdG8gYSBwbGFpbiBwcm9tcHQgc28gdGhhdCB3ZSBjYW4KKwkJCSMgc2ltcGx5IHJldHVybiBlYXJseSBpZiB0aGUgcHJvbXB0IHNob3VsZCBub3QKKwkJCSMgYmUgZGVjb3JhdGVkCisJCQlQUzE9IiRwczFwY19zdGFydCRwczFwY19lbmQiCisJCTs7CisJCTB8MSkJcHJpbnRmX2Zvcm1hdD0iJHsxOi0kcHJpbnRmX2Zvcm1hdH0iCisJCTs7CisJCSopCXJldHVybiAkZXhpdAorCQk7OworCWVzYWMKKworCSMgcHMxX2V4cGFuZGVkOiAgVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gJ3llcycgaWYgdGhlIHNoZWxsCisJIyBzdWJqZWN0cyB0aGUgdmFsdWUgb2YgUFMxIHRvIHBhcmFtZXRlciBleHBhbnNpb246CisJIworCSMgICAqIGJhc2ggZG9lcyB1bmxlc3MgdGhlIHByb21wdHZhcnMgb3B0aW9uIGlzIGRpc2FibGVkCisJIyAgICogenNoIGRvZXMgbm90IHVubGVzcyB0aGUgUFJPTVBUX1NVQlNUIG9wdGlvbiBpcyBzZXQKKwkjICAgKiBQT1NJWCBzaGVsbHMgYWx3YXlzIGRvCisJIworCSMgSWYgdGhlIHNoZWxsIHdvdWxkIGV4cGFuZCB0aGUgY29udGVudHMgb2YgUFMxIHdoZW4gZHJhd2luZworCSMgdGhlIHByb21wdCwgYSByYXcgcmVmIG5hbWUgbXVzdCBub3QgYmUgaW5jbHVkZWQgaW4gUFMxLgorCSMgVGhpcyBwcm90ZWN0cyB0aGUgdXNlciBmcm9tIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiB2aWEKKwkjIHNwZWNpYWxseSBjcmFmdGVkIHJlZiBuYW1lcy4gIEZvciBleGFtcGxlLCBhIHJlZiBuYW1lZAorCSMgJ3JlZnMvaGVhZHMvJChJRlM9XztjbWQ9c3Vkb19ybV8tcmZfLzskY21kKScgbWlnaHQgY2F1c2UgdGhlCisJIyBzaGVsbCB0byBleGVjdXRlICdzdWRvIHJtIC1yZiAvJyB3aGVuIHRoZSBwcm9tcHQgaXMgZHJhd24uCisJIworCSMgSW5zdGVhZCwgdGhlIHJlZiBuYW1lIHNob3VsZCBiZSBwbGFjZWQgaW4gYSBzZXBhcmF0ZSBnbG9iYWwKKwkjIHZhcmlhYmxlIChpbiB0aGUgX19naXRfcHMxXyogbmFtZXNwYWNlIHRvIGF2b2lkIGNvbGxpZGluZworCSMgd2l0aCB0aGUgdXNlcidzIGVudmlyb25tZW50KSBhbmQgdGhhdCB2YXJpYWJsZSBzaG91bGQgYmUKKwkjIHJlZmVyZW5jZWQgZnJvbSBQUzEuICBGb3IgZXhhbXBsZToKKwkjCisJIyAgICAgX19naXRfcHMxX2Zvbz0kKGRvX3NvbWV0aGluZ190b19nZXRfcmVmX25hbWUpCisJIyAgICAgUFMxPSIuLi5zdHVmZi4uLlwke19fZ2l0X3BzMV9mb299Li4uc3R1ZmYuLi4iCisJIworCSMgSWYgdGhlIHNoZWxsIGRvZXMgbm90IGV4cGFuZCB0aGUgY29udGVudHMgb2YgUFMxLCB0aGUgcmF3CisJIyByZWYgbmFtZSBtdXN0IGJlIGluY2x1ZGVkIGluIFBTMS4KKwkjCisJIyBUaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBpcyBvbmx5IHJlbGV2YW50IHdoZW4gaW4gcGNtb2RlLgorCSMKKwkjIEFzc3VtZSB0aGF0IHRoZSBzaGVsbCBmb2xsb3dzIHRoZSBQT1NJWCBzcGVjaWZpY2F0aW9uIGFuZAorCSMgZXhwYW5kcyBQUzEgdW5sZXNzIGRldGVybWluZWQgb3RoZXJ3aXNlLiAgKFRoaXMgaXMgbW9yZQorCSMgbGlrZWx5IHRvIGJlIGNvcnJlY3QgaWYgdGhlIHVzZXIgaGFzIGEgbm9uLWJhc2gsIG5vbi16c2gKKwkjIHNoZWxsIGFuZCBzYWZlciB0aGFuIHRoZSBhbHRlcm5hdGl2ZSBpZiB0aGUgYXNzdW1wdGlvbiBpcworCSMgaW5jb3JyZWN0LikKKwkjCisJbG9jYWwgcHMxX2V4cGFuZGVkPXllcworCVsgLXogIiRaU0hfVkVSU0lPTiIgXSB8fCBbWyAtbyBQUk9NUFRfU1VCU1QgXV0gfHwgcHMxX2V4cGFuZGVkPW5vCisJWyAteiAiJEJBU0hfVkVSU0lPTiIgXSB8fCBzaG9wdCAtcSBwcm9tcHR2YXJzIHx8IHBzMV9leHBhbmRlZD1ubworCisJbG9jYWwgcmVwb19pbmZvIHJldl9wYXJzZV9leGl0X2NvZGUKKwlyZXBvX2luZm89IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIgLS1pcy1pbnNpZGUtZ2l0LWRpciBcCisJCS0taXMtYmFyZS1yZXBvc2l0b3J5IC0taXMtaW5zaWRlLXdvcmstdHJlZSBcCisJCS0tc2hvcnQgSEVBRCAyPi9kZXYvbnVsbCkiCisJcmV2X3BhcnNlX2V4aXRfY29kZT0iJD8iCisKKwlpZiBbIC16ICIkcmVwb19pbmZvIiBdOyB0aGVuCisJCXJldHVybiAkZXhpdAorCWZpCisKKwlsb2NhbCBzaG9ydF9zaGEKKwlpZiBbICIkcmV2X3BhcnNlX2V4aXRfY29kZSIgPSAiMCIgXTsgdGhlbgorCQlzaG9ydF9zaGE9IiR7cmVwb19pbmZvIyMqJCdcbid9IgorCQlyZXBvX2luZm89IiR7cmVwb19pbmZvJSQnXG4nKn0iCisJZmkKKwlsb2NhbCBpbnNpZGVfd29ya3RyZWU9IiR7cmVwb19pbmZvIyMqJCdcbid9IgorCXJlcG9faW5mbz0iJHtyZXBvX2luZm8lJCdcbicqfSIKKwlsb2NhbCBiYXJlX3JlcG89IiR7cmVwb19pbmZvIyMqJCdcbid9IgorCXJlcG9faW5mbz0iJHtyZXBvX2luZm8lJCdcbicqfSIKKwlsb2NhbCBpbnNpZGVfZ2l0ZGlyPSIke3JlcG9faW5mbyMjKiQnXG4nfSIKKwlsb2NhbCBnPSIke3JlcG9faW5mbyUkJ1xuJyp9IgorCisJaWYgWyAidHJ1ZSIgPSAiJGluc2lkZV93b3JrdHJlZSIgXSAmJgorCSAgIFsgLW4gIiR7R0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVELX0iIF0gJiYKKwkgICBbICIkKGdpdCBjb25maWcgLS1ib29sIGJhc2guaGlkZUlmUHdkSWdub3JlZCkiICE9ICJmYWxzZSIgXSAmJgorCSAgIGdpdCBjaGVjay1pZ25vcmUgLXEgLgorCXRoZW4KKwkJcmV0dXJuICRleGl0CisJZmkKKworCWxvY2FsIHI9IiIKKwlsb2NhbCBiPSIiCisJbG9jYWwgc3RlcD0iIgorCWxvY2FsIHRvdGFsPSIiCisJaWYgWyAtZCAiJGcvcmViYXNlLW1lcmdlIiBdOyB0aGVuCisJCV9fZ2l0X2VyZWFkICIkZy9yZWJhc2UtbWVyZ2UvaGVhZC1uYW1lIiBiCisJCV9fZ2l0X2VyZWFkICIkZy9yZWJhc2UtbWVyZ2UvbXNnbnVtIiBzdGVwCisJCV9fZ2l0X2VyZWFkICIkZy9yZWJhc2UtbWVyZ2UvZW5kIiB0b3RhbAorCQlpZiBbIC1mICIkZy9yZWJhc2UtbWVyZ2UvaW50ZXJhY3RpdmUiIF07IHRoZW4KKwkJCXI9InxSRUJBU0UtaSIKKwkJZWxzZQorCQkJcj0ifFJFQkFTRS1tIgorCQlmaQorCWVsc2UKKwkJaWYgWyAtZCAiJGcvcmViYXNlLWFwcGx5IiBdOyB0aGVuCisJCQlfX2dpdF9lcmVhZCAiJGcvcmViYXNlLWFwcGx5L25leHQiIHN0ZXAKKwkJCV9fZ2l0X2VyZWFkICIkZy9yZWJhc2UtYXBwbHkvbGFzdCIgdG90YWwKKwkJCWlmIFsgLWYgIiRnL3JlYmFzZS1hcHBseS9yZWJhc2luZyIgXTsgdGhlbgorCQkJCV9fZ2l0X2VyZWFkICIkZy9yZWJhc2UtYXBwbHkvaGVhZC1uYW1lIiBiCisJCQkJcj0ifFJFQkFTRSIKKwkJCWVsaWYgWyAtZiAiJGcvcmViYXNlLWFwcGx5L2FwcGx5aW5nIiBdOyB0aGVuCisJCQkJcj0ifEFNIgorCQkJZWxzZQorCQkJCXI9InxBTS9SRUJBU0UiCisJCQlmaQorCQllbGlmIFsgLWYgIiRnL01FUkdFX0hFQUQiIF07IHRoZW4KKwkJCXI9InxNRVJHSU5HIgorCQllbGlmIFsgLWYgIiRnL0NIRVJSWV9QSUNLX0hFQUQiIF07IHRoZW4KKwkJCXI9InxDSEVSUlktUElDS0lORyIKKwkJZWxpZiBbIC1mICIkZy9SRVZFUlRfSEVBRCIgXTsgdGhlbgorCQkJcj0ifFJFVkVSVElORyIKKwkJZWxpZiBbIC1mICIkZy9CSVNFQ1RfTE9HIiBdOyB0aGVuCisJCQlyPSJ8QklTRUNUSU5HIgorCQlmaQorCisJCWlmIFsgLW4gIiRiIiBdOyB0aGVuCisJCQk6CisJCWVsaWYgWyAtaCAiJGcvSEVBRCIgXTsgdGhlbgorCQkJIyBzeW1saW5rIHN5bWJvbGljIHJlZgorCQkJYj0iJChnaXQgc3ltYm9saWMtcmVmIEhFQUQgMj4vZGV2L251bGwpIgorCQllbHNlCisJCQlsb2NhbCBoZWFkPSIiCisJCQlpZiAhIF9fZ2l0X2VyZWFkICIkZy9IRUFEIiBoZWFkOyB0aGVuCisJCQkJcmV0dXJuICRleGl0CisJCQlmaQorCQkJIyBpcyBpdCBhIHN5bWJvbGljIHJlZj8KKwkJCWI9IiR7aGVhZCNyZWY6IH0iCisJCQlpZiBbICIkaGVhZCIgPSAiJGIiIF07IHRoZW4KKwkJCQlkZXRhY2hlZD15ZXMKKwkJCQliPSIkKAorCQkJCWNhc2UgIiR7R0lUX1BTMV9ERVNDUklCRV9TVFlMRS19IiBpbgorCQkJCShjb250YWlucykKKwkJCQkJZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMgSEVBRCA7OworCQkJCShicmFuY2gpCisJCQkJCWdpdCBkZXNjcmliZSAtLWNvbnRhaW5zIC0tYWxsIEhFQUQgOzsKKwkJCQkoZGVzY3JpYmUpCisJCQkJCWdpdCBkZXNjcmliZSBIRUFEIDs7CisJCQkJKCogfCBkZWZhdWx0KQorCQkJCQlnaXQgZGVzY3JpYmUgLS10YWdzIC0tZXhhY3QtbWF0Y2ggSEVBRCA7OworCQkJCWVzYWMgMj4vZGV2L251bGwpIiB8fAorCisJCQkJYj0iJHNob3J0X3NoYS4uLiIKKwkJCQliPSIoJGIpIgorCQkJZmkKKwkJZmkKKwlmaQorCisJaWYgWyAtbiAiJHN0ZXAiIF0gJiYgWyAtbiAiJHRvdGFsIiBdOyB0aGVuCisJCXI9IiRyICRzdGVwLyR0b3RhbCIKKwlmaQorCisJbG9jYWwgdz0iIgorCWxvY2FsIGk9IiIKKwlsb2NhbCBzPSIiCisJbG9jYWwgdT0iIgorCWxvY2FsIGM9IiIKKwlsb2NhbCBwPSIiCisKKwlpZiBbICJ0cnVlIiA9ICIkaW5zaWRlX2dpdGRpciIgXTsgdGhlbgorCQlpZiBbICJ0cnVlIiA9ICIkYmFyZV9yZXBvIiBdOyB0aGVuCisJCQljPSJCQVJFOiIKKwkJZWxzZQorCQkJYj0iR0lUX0RJUiEiCisJCWZpCisJZWxpZiBbICJ0cnVlIiA9ICIkaW5zaWRlX3dvcmt0cmVlIiBdOyB0aGVuCisJCWlmIFsgLW4gIiR7R0lUX1BTMV9TSE9XRElSVFlTVEFURS19IiBdICYmCisJCSAgIFsgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgYmFzaC5zaG93RGlydHlTdGF0ZSkiICE9ICJmYWxzZSIgXQorCQl0aGVuCisJCQlnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIC0tcXVpZXQgLS1leGl0LWNvZGUgfHwgdz0iKiIKKwkJCWlmIFsgLW4gIiRzaG9ydF9zaGEiIF07IHRoZW4KKwkJCQlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLXF1aWV0IEhFQUQgLS0gfHwgaT0iKyIKKwkJCWVsc2UKKwkJCQlpPSIjIgorCQkJZmkKKwkJZmkKKwkJaWYgWyAtbiAiJHtHSVRfUFMxX1NIT1dTVEFTSFNUQVRFLX0iIF0gJiYKKwkJICAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0IHJlZnMvc3Rhc2ggPi9kZXYvbnVsbAorCQl0aGVuCisJCQlzPSIkIgorCQlmaQorCisJCWlmIFsgLW4gIiR7R0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVMtfSIgXSAmJgorCQkgICBbICIkKGdpdCBjb25maWcgLS1ib29sIGJhc2guc2hvd1VudHJhY2tlZEZpbGVzKSIgIT0gImZhbHNlIiBdICYmCisJCSAgIGdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUtc3RhbmRhcmQgLS1kaXJlY3RvcnkgLS1uby1lbXB0eS1kaXJlY3RvcnkgLS1lcnJvci11bm1hdGNoIC0tICc6LyonID4vZGV2L251bGwgMj4vZGV2L251bGwKKwkJdGhlbgorCQkJdT0iJSR7WlNIX1ZFUlNJT04rJX0iCisJCWZpCisKKwkJaWYgWyAtbiAiJHtHSVRfUFMxX1NIT1dVUFNUUkVBTS19IiBdOyB0aGVuCisJCQlfX2dpdF9wczFfc2hvd191cHN0cmVhbQorCQlmaQorCWZpCisKKwlsb2NhbCB6PSIke0dJVF9QUzFfU1RBVEVTRVBBUkFUT1ItIiAifSIKKworCSMgTk8gY29sb3Igb3B0aW9uIHVubGVzcyBpbiBQUk9NUFRfQ09NTUFORCBtb2RlCisJaWYgWyAkcGNtb2RlID0geWVzIF0gJiYgWyAtbiAiJHtHSVRfUFMxX1NIT1dDT0xPUkhJTlRTLX0iIF07IHRoZW4KKwkJX19naXRfcHMxX2NvbG9yaXplX2dpdHN0cmluZworCWZpCisKKwliPSR7YiMjcmVmcy9oZWFkcy99CisJaWYgWyAkcGNtb2RlID0geWVzIF0gJiYgWyAkcHMxX2V4cGFuZGVkID0geWVzIF07IHRoZW4KKwkJX19naXRfcHMxX2JyYW5jaF9uYW1lPSRiCisJCWI9Ilwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0iCisJZmkKKworCWxvY2FsIGY9IiR3JGkkcyR1IgorCWxvY2FsIGdpdHN0cmluZz0iJGMkYiR7ZjorJHokZn0kciRwIgorCisJaWYgWyAkcGNtb2RlID0geWVzIF07IHRoZW4KKwkJaWYgWyAiJHtfX2dpdF9wcmludGZfc3VwcG9ydHNfdi19IiAhPSB5ZXMgXTsgdGhlbgorCQkJZ2l0c3RyaW5nPSQocHJpbnRmIC0tICIkcHJpbnRmX2Zvcm1hdCIgIiRnaXRzdHJpbmciKQorCQllbHNlCisJCQlwcmludGYgLXYgZ2l0c3RyaW5nIC0tICIkcHJpbnRmX2Zvcm1hdCIgIiRnaXRzdHJpbmciCisJCWZpCisJCVBTMT0iJHBzMXBjX3N0YXJ0JGdpdHN0cmluZyRwczFwY19lbmQiCisJZWxzZQorCQlwcmludGYgLS0gIiRwcmludGZfZm9ybWF0IiAiJGdpdHN0cmluZyIKKwlmaQorCisJcmV0dXJuICRleGl0Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NvbnRhY3RzLy5naXRpZ25vcmUgYi9jb250cmliL2NvbnRhY3RzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM4NWVlNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29udGFjdHMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKK2dpdC1jb250YWN0cy4xCitnaXQtY29udGFjdHMuaHRtbAorZ2l0LWNvbnRhY3RzLnhtbApkaWZmIC0tZ2l0IGEvY29udHJpYi9jb250YWN0cy9NYWtlZmlsZSBiL2NvbnRyaWIvY29udGFjdHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5OTBmMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29udGFjdHMvTWFrZWZpbGUKQEAgLTAsMCArMSw3MSBAQAorIyBUaGUgZGVmYXVsdCB0YXJnZXQgb2YgdGhpcyBNYWtlZmlsZSBpcy4uLgorYWxsOjoKKworLWluY2x1ZGUgLi4vLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi8uLi9jb25maWcubWFrCisKK3ByZWZpeCA/PSAvdXNyL2xvY2FsCitnaXRleGVjZGlyID89ICQocHJlZml4KS9saWJleGVjL2dpdC1jb3JlCittYW5kaXIgPz0gJChwcmVmaXgpL3NoYXJlL21hbgorbWFuMWRpciA/PSAkKG1hbmRpcikvbWFuMQoraHRtbGRpciA/PSAkKHByZWZpeCkvc2hhcmUvZG9jL2dpdC1kb2MKKworLi4vLi4vR0lULVZFUlNJT04tRklMRTogRk9SQ0UKKwkkKE1BS0UpIC1DIC4uLy4uLyBHSVQtVkVSU0lPTi1GSUxFCisKKy1pbmNsdWRlIC4uLy4uL0dJVC1WRVJTSU9OLUZJTEUKKworIyB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYSAnc3RhbmRhcmQnIGJzZC10eXBlIGluc3RhbGwgcHJvZ3JhbQorSU5TVEFMTCAgPz0gaW5zdGFsbAorUk0gICAgICAgPz0gcm0gLWYKKworQVNDSUlET0MgPSBhc2NpaWRvYworWE1MVE8gICAgPSB4bWx0bworCitpZm5kZWYgU0hFTExfUEFUSAorCVNIRUxMX1BBVEggPSAvYmluL3NoCitlbmRpZgorU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpCisKK0FTQ0lJRE9DX0NPTkYgPSAuLi8uLi9Eb2N1bWVudGF0aW9uL2FzY2lpZG9jLmNvbmYKK01BTlBBR0VfWFNMICAgPSAuLi8uLi9Eb2N1bWVudGF0aW9uL21hbnBhZ2Utbm9ybWFsLnhzbAorCitHSVRfQ09OVEFDVFMgOj0gZ2l0LWNvbnRhY3RzCisKK0dJVF9DT05UQUNUU19ET0MgOj0gZ2l0LWNvbnRhY3RzLjEKK0dJVF9DT05UQUNUU19YTUwgOj0gZ2l0LWNvbnRhY3RzLnhtbAorR0lUX0NPTlRBQ1RTX1RYVCA6PSBnaXQtY29udGFjdHMudHh0CitHSVRfQ09OVEFDVFNfSFRNTCA6PSBnaXQtY29udGFjdHMuaHRtbAorCitkb2M6ICQoR0lUX0NPTlRBQ1RTX0RPQykgJChHSVRfQ09OVEFDVFNfSFRNTCkKKworaW5zdGFsbDogJChHSVRfQ09OVEFDVFMpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQoZ2l0ZXhlY2RpcikKKwkkKElOU1RBTEwpIC1tIDc1NSAkKEdJVF9DT05UQUNUUykgJChERVNURElSKSQoZ2l0ZXhlY2RpcikKKworaW5zdGFsbC1kb2M6IGluc3RhbGwtbWFuIGluc3RhbGwtaHRtbAorCitpbnN0YWxsLW1hbjogJChHSVRfQ09OVEFDVFNfRE9DKQorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKG1hbjFkaXIpCisJJChJTlNUQUxMKSAtbSA2NDQgJF4gJChERVNURElSKSQobWFuMWRpcikKKworaW5zdGFsbC1odG1sOiAkKEdJVF9DT05UQUNUU19IVE1MKQorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKGh0bWxkaXIpCisJJChJTlNUQUxMKSAtbSA2NDQgJF4gJChERVNURElSKSQoaHRtbGRpcikKKworJChHSVRfQ09OVEFDVFNfRE9DKTogJChHSVRfQ09OVEFDVFNfWE1MKQorCSQoWE1MVE8pIC1tICQoTUFOUEFHRV9YU0wpIG1hbiAkXgorCiskKEdJVF9DT05UQUNUU19YTUwpOiAkKEdJVF9DT05UQUNUU19UWFQpCisJJChBU0NJSURPQykgLWIgZG9jYm9vayAtZCBtYW5wYWdlIC1mICQoQVNDSUlET0NfQ09ORikgXAorCQktYWdpdF92ZXJzaW9uPSQoR0lUX1ZFUlNJT04pICReCisKKyQoR0lUX0NPTlRBQ1RTX0hUTUwpOiAkKEdJVF9DT05UQUNUU19UWFQpCisJJChBU0NJSURPQykgLWIgeGh0bWwxMSAtZCBtYW5wYWdlIC1mICQoQVNDSUlET0NfQ09ORikgXAorCQktYWdpdF92ZXJzaW9uPSQoR0lUX1ZFUlNJT04pICReCisKK2NsZWFuOgorCSQoUk0pICQoR0lUX0NPTlRBQ1RTKQorCSQoUk0pICoueG1sICouaHRtbCAqLjEKKworLlBIT05ZOiBGT1JDRQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb250YWN0cy9naXQtY29udGFjdHMgYi9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYmUyYWJmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb250YWN0cy9naXQtY29udGFjdHMKQEAgLTAsMCArMSwyMDMgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIExpc3QgcGVvcGxlIHdobyBtaWdodCBiZSBpbnRlcmVzdGVkIGluIGEgcGF0Y2guICBVc2VmdWwgYXMgdGhlIGFyZ3VtZW50IHRvCisjIGdpdC1zZW5kLWVtYWlsIC0tY2MtY21kIG9wdGlvbiwgYW5kIGluIG90aGVyIHNpdHVhdGlvbnMuCisjCisjIFVzYWdlOiBnaXQgY29udGFjdHMgPGZpbGUgfCByZXYtbGlzdCBvcHRpb24+IC4uLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIElQQzo6T3BlbjI7CisKK215ICRzaW5jZSA9ICc1LXllYXJzLWFnbyc7CitteSAkbWluX3BlcmNlbnQgPSAxMDsKK215ICRsYWJlbHNfcnggPSBxci9TaWduZWQtb2ZmLWJ5fFJldmlld2VkLWJ5fEFja2VkLWJ5fENjL2k7CitteSAlc2VlbjsKKworc3ViIGZvcm1hdF9jb250YWN0IHsKKwlteSAoJG5hbWUsICRlbWFpbCkgPSBAXzsKKwlyZXR1cm4gIiRuYW1lIDwkZW1haWw+IjsKK30KKworc3ViIHBhcnNlX2NvbW1pdCB7CisJbXkgKCRjb21taXQsICRkYXRhKSA9IEBfOworCW15ICRjb250YWN0cyA9ICRjb21taXQtPntjb250YWN0c307CisJbXkgJGluYm9keSA9IDA7CisJZm9yIChzcGxpdCgvXi9tLCAkZGF0YSkpIHsKKwkJaWYgKG5vdCAkaW5ib2R5KSB7CisJCQlpZiAoL15hdXRob3IgKFtePD5dKykgPChcUyspPiAuKyQvKSB7CisJCQkJJGNvbnRhY3RzLT57Zm9ybWF0X2NvbnRhY3QoJDEsICQyKX0gPSAxOworCQkJfSBlbHNpZiAoL14kLykgeworCQkJCSRpbmJvZHkgPSAxOworCQkJfQorCQl9IGVsc2lmICgvXiRsYWJlbHNfcng6XHMrKFtePD5dKylccys8KFxTKz8pPiQvbykgeworCQkJJGNvbnRhY3RzLT57Zm9ybWF0X2NvbnRhY3QoJDEsICQyKX0gPSAxOworCQl9CisJfQorfQorCitzdWIgaW1wb3J0X2NvbW1pdHMgeworCW15ICgkY29tbWl0cykgPSBAXzsKKwlyZXR1cm4gdW5sZXNzICUkY29tbWl0czsKKwlteSAkcGlkID0gb3BlbjIgbXkgJHJlYWRlciwgbXkgJHdyaXRlciwgcXcoZ2l0IGNhdC1maWxlIC0tYmF0Y2gpOworCWZvciBteSAkaWQgKGtleXMoJSRjb21taXRzKSkgeworCQlwcmludCAkd3JpdGVyICIkaWRcbiI7CisJCW15ICRsaW5lID0gPCRyZWFkZXI+OworCQlpZiAoJGxpbmUgPX4gL14oWzAtOWEtZl17NDB9KSBjb21taXQgKFxkKykvKSB7CisJCQlteSAoJGNpZCwgJGxlbikgPSAoJDEsICQyKTsKKwkJCWRpZSAiZXhwZWN0ZWQgJGlkIGJ1dCBnb3QgJGNpZFxuIiB1bmxlc3MgJGlkIGVxICRjaWQ7CisJCQlteSAkZGF0YTsKKwkJCSMgY2F0LWZpbGUgZW1pdHMgbmV3bGluZSBhZnRlciBkYXRhLCBzbyByZWFkIGxlbisxCisJCQlyZWFkICRyZWFkZXIsICRkYXRhLCAkbGVuICsgMTsKKwkJCXBhcnNlX2NvbW1pdCgkY29tbWl0cy0+eyRpZH0sICRkYXRhKTsKKwkJfQorCX0KKwljbG9zZSAkcmVhZGVyOworCWNsb3NlICR3cml0ZXI7CisJd2FpdHBpZCgkcGlkLCAwKTsKKwlkaWUgImdpdC1jYXQtZmlsZSBlcnJvcjogJD9cbiIgaWYgJD87Cit9CisKK3N1YiBnZXRfYmxhbWUgeworCW15ICgkY29tbWl0cywgJHNvdXJjZSwgJGZyb20sICRyYW5nZXMpID0gQF87CisJcmV0dXJuIHVubGVzcyBAJHJhbmdlczsKKwlvcGVuIG15ICRmLCAnLXwnLAorCQlxdyhnaXQgYmxhbWUgLS1wb3JjZWxhaW4gLUMpLAorCQltYXAoeyItTCRfLT5bMF0sKyRfLT5bMV0ifSBAJHJhbmdlcyksCisJCSctLXNpbmNlJywgJHNpbmNlLCAiJGZyb21eIiwgJy0tJywgJHNvdXJjZSBvciBkaWU7CisJd2hpbGUgKDwkZj4pIHsKKwkJaWYgKC9eKFswLTlhLWZdezQwfSkgXGQrIFxkKyBcZCskLykgeworCQkJbXkgJGlkID0gJDE7CisJCQkkY29tbWl0cy0+eyRpZH0gPSB7IGlkID0+ICRpZCwgY29udGFjdHMgPT4ge30gfQorCQkJCXVubGVzcyAkc2VlbnskaWR9OworCQkJJHNlZW57JGlkfSA9IDE7CisJCX0KKwl9CisJY2xvc2UgJGY7Cit9CisKK3N1YiBibGFtZV9zb3VyY2VzIHsKKwlteSAoJHNvdXJjZXMsICRjb21taXRzKSA9IEBfOworCWZvciBteSAkcyAoa2V5cyAlJHNvdXJjZXMpIHsKKwkJZm9yIG15ICRpZCAoa2V5cyAleyRzb3VyY2VzLT57JHN9fSkgeworCQkJZ2V0X2JsYW1lKCRjb21taXRzLCAkcywgJGlkLCAkc291cmNlcy0+eyRzfXskaWR9KTsKKwkJfQorCX0KK30KKworc3ViIHNjYW5fcGF0Y2hlcyB7CisJbXkgKCRzb3VyY2VzLCAkaWQsICRmKSA9IEBfOworCW15ICRzb3VyY2U7CisJd2hpbGUgKDwkZj4pIHsKKwkJaWYgKC9eRnJvbSAoWzAtOWEtZl17NDB9KSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEkLykgeworCQkJJGlkID0gJDE7CisJCQkkc2VlbnskaWR9ID0gMTsKKwkJfQorCQluZXh0IHVubGVzcyAkaWQ7CisJCWlmIChte14tLS0gKD86YS8oLispfC9kZXYvbnVsbCkkfSkgeworCQkJJHNvdXJjZSA9ICQxOworCQl9IGVsc2lmICgvXkBAIC0oXGQrKSg/OiwoXGQrKSk/LyAmJiAkc291cmNlKSB7CisJCQlteSAkbGVuID0gZGVmaW5lZCgkMikgPyAkMiA6IDE7CisJCQlwdXNoIEB7JHNvdXJjZXMtPnskc291cmNlfXskaWR9fSwgWyQxLCAkbGVuXSBpZiAkbGVuOworCQl9CisJfQorfQorCitzdWIgc2Nhbl9wYXRjaF9maWxlIHsKKwlteSAoJGNvbW1pdHMsICRmaWxlKSA9IEBfOworCW9wZW4gbXkgJGYsICc8JywgJGZpbGUgb3IgZGllICJyZWFkIGZhaWx1cmU6ICRmaWxlOiAkIVxuIjsKKwlzY2FuX3BhdGNoZXMoJGNvbW1pdHMsIHVuZGVmLCAkZik7CisJY2xvc2UgJGY7Cit9CisKK3N1YiBwYXJzZV9yZXZfYXJncyB7CisJbXkgQGFyZ3MgPSBAXzsKKwlvcGVuIG15ICRmLCAnLXwnLAorCQlxdyhnaXQgcmV2LXBhcnNlIC0tcmV2cy1vbmx5IC0tZGVmYXVsdCBIRUFEIC0tc3ltYm9saWMpLCBAYXJncworCQlvciBkaWU7CisJbXkgQHJldnM7CisJd2hpbGUgKDwkZj4pIHsKKwkJY2hvbXA7CisJCXB1c2ggQHJldnMsICRfOworCX0KKwljbG9zZSAkZjsKKwlyZXR1cm4gQHJldnMgaWYgc2NhbGFyKEByZXZzKSAhPSAxOworCXJldHVybiAiXiRyZXZzWzBdIiwgJ0hFQUQnIHVubGVzcyAkcmV2c1swXSA9fiAvXi0vOworCXJldHVybiAkcmV2c1swXSwgJ0hFQUQnOworfQorCitzdWIgc2Nhbl9yZXZfYXJncyB7CisJbXkgKCRjb21taXRzLCAkYXJncykgPSBAXzsKKwlteSBAcmV2cyA9IHBhcnNlX3Jldl9hcmdzKEAkYXJncyk7CisJb3BlbiBteSAkZiwgJy18JywgcXcoZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSksIEByZXZzIG9yIGRpZTsKKwl3aGlsZSAoPCRmPikgeworCQljaG9tcDsKKwkJbXkgJGlkID0gJF87CisJCSRzZWVueyRpZH0gPSAxOworCQlvcGVuIG15ICRnLCAnLXwnLCBxdyhnaXQgc2hvdyAtQyAtLW9uZWxpbmUpLCAkaWQgb3IgZGllOworCQlzY2FuX3BhdGNoZXMoJGNvbW1pdHMsICRpZCwgJGcpOworCQljbG9zZSAkZzsKKwl9CisJY2xvc2UgJGY7Cit9CisKK3N1YiBtYWlsbWFwX2NvbnRhY3RzIHsKKwlteSAoJGNvbnRhY3RzKSA9IEBfOworCW15ICVtYXBwZWQ7CisJbXkgJHBpZCA9IG9wZW4yIG15ICRyZWFkZXIsIG15ICR3cml0ZXIsIHF3KGdpdCBjaGVjay1tYWlsbWFwIC0tc3RkaW4pOworCWZvciBteSAkY29udGFjdCAoa2V5cyglJGNvbnRhY3RzKSkgeworCQlwcmludCAkd3JpdGVyICIkY29udGFjdFxuIjsKKwkJbXkgJGNhbm9uaWNhbCA9IDwkcmVhZGVyPjsKKwkJY2hvbXAgJGNhbm9uaWNhbDsKKwkJJG1hcHBlZHskY2Fub25pY2FsfSArPSAkY29udGFjdHMtPnskY29udGFjdH07CisJfQorCWNsb3NlICRyZWFkZXI7CisJY2xvc2UgJHdyaXRlcjsKKwl3YWl0cGlkKCRwaWQsIDApOworCWRpZSAiZ2l0LWNoZWNrLW1haWxtYXAgZXJyb3I6ICQ/XG4iIGlmICQ/OworCXJldHVybiBcJW1hcHBlZDsKK30KKworaWYgKCFAQVJHVikgeworCWRpZSAiTm8gaW5wdXQgcmV2aXNpb25zIG9yIHBhdGNoIGZpbGVzXG4iOworfQorCitteSAoQGZpbGVzLCBAcmV2X2FyZ3MpOworZm9yIChAQVJHVikgeworCWlmICgtZSkgeworCQlwdXNoIEBmaWxlcywgJF87CisJfSBlbHNlIHsKKwkJcHVzaCBAcmV2X2FyZ3MsICRfOworCX0KK30KKworbXkgJXNvdXJjZXM7Citmb3IgKEBmaWxlcykgeworCXNjYW5fcGF0Y2hfZmlsZShcJXNvdXJjZXMsICRfKTsKK30KK2lmIChAcmV2X2FyZ3MpIHsKKwlzY2FuX3Jldl9hcmdzKFwlc291cmNlcywgXEByZXZfYXJncykKK30KKworbXkgJHRvcGxldmVsID0gYGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsYDsKK2Nob21wICR0b3BsZXZlbDsKK2NoZGlyKCR0b3BsZXZlbCkgb3IgZGllICJjaGRpciBmYWlsdXJlOiAkdG9wbGV2ZWw6ICQhXG4iOworCitteSAlY29tbWl0czsKK2JsYW1lX3NvdXJjZXMoXCVzb3VyY2VzLCBcJWNvbW1pdHMpOworaW1wb3J0X2NvbW1pdHMoXCVjb21taXRzKTsKKworbXkgJGNvbnRhY3RzID0ge307Citmb3IgbXkgJGNvbW1pdCAodmFsdWVzICVjb21taXRzKSB7CisJZm9yIG15ICRjb250YWN0IChrZXlzICV7JGNvbW1pdC0+e2NvbnRhY3RzfX0pIHsKKwkJJGNvbnRhY3RzLT57JGNvbnRhY3R9Kys7CisJfQorfQorJGNvbnRhY3RzID0gbWFpbG1hcF9jb250YWN0cygkY29udGFjdHMpOworCitteSAkbmNvbW1pdHMgPSBzY2FsYXIoa2V5cyAlY29tbWl0cyk7Citmb3IgbXkgJGNvbnRhY3QgKGtleXMgJSRjb250YWN0cykgeworCW15ICRwZXJjZW50ID0gJGNvbnRhY3RzLT57JGNvbnRhY3R9ICogMTAwIC8gJG5jb21taXRzOworCW5leHQgaWYgJHBlcmNlbnQgPCAkbWluX3BlcmNlbnQ7CisJcHJpbnQgIiRjb250YWN0XG4iOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb250YWN0cy9naXQtY29udGFjdHMudHh0IGIvY29udHJpYi9jb250YWN0cy9naXQtY29udGFjdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOTE0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvbnRhY3RzL2dpdC1jb250YWN0cy50eHQKQEAgLTAsMCArMSw5NCBAQAorZ2l0LWNvbnRhY3RzKDEpCis9PT09PT09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0LWNvbnRhY3RzIC0gTGlzdCBwZW9wbGUgd2hvIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gYSBzZXQgb2YgY2hhbmdlcworCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdCBjb250YWN0cycgKDxwYXRjaD58PHJhbmdlPnw8cmV2PikuLi4KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KKworR2l2ZW4gYSBzZXQgb2YgY2hhbmdlcywgc3BlY2lmaWVkIGFzIHBhdGNoIGZpbGVzIG9yIHJldmlzaW9ucywgZGV0ZXJtaW5lIHBlb3BsZQord2hvIG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gdGhvc2UgY2hhbmdlcy4gIFRoaXMgaXMgZG9uZSBieSBjb25zdWx0aW5nIHRoZQoraGlzdG9yeSBvZiBlYWNoIHBhdGNoIG9yIHJldmlzaW9uIGh1bmsgdG8gZmluZCBwZW9wbGUgbWVudGlvbmVkIGJ5IGNvbW1pdHMKK3doaWNoIHRvdWNoZWQgdGhlIGxpbmVzIG9mIGZpbGVzIHVuZGVyIGNvbnNpZGVyYXRpb24uCisKK0lucHV0IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIHBhdGNoIGZpbGVzIG9yIHJldmlzaW9uIGFyZ3VtZW50cy4gIEEgcmV2aXNpb24KK2FyZ3VtZW50IGNhbiBiZSBhIHJhbmdlIG9yIGEgc2luZ2xlIGA8cmV2PmAgd2hpY2ggaXMgaW50ZXJwcmV0ZWQgYXMKK2A8cmV2Pi4uSEVBRGAsIHRodXMgdGhlIHNhbWUgcmV2aXNpb24gYXJndW1lbnRzIGFyZSBhY2NlcHRlZCBhcyBmb3IKK2xpbmtnaXQ6Z2l0LWZvcm1hdC1wYXRjaFsxXS4gUGF0Y2ggZmlsZXMgYW5kIHJldmlzaW9uIGFyZ3VtZW50cyBjYW4gYmUgY29tYmluZWQKK2luIHRoZSBzYW1lIGludm9jYXRpb24uCisKK1RoaXMgY29tbWFuZCBjYW4gYmUgdXNlZnVsIGZvciBkZXRlcm1pbmluZyB0aGUgbGlzdCBvZiBwZW9wbGUgd2l0aCB3aG9tIHRvCitkaXNjdXNzIHByb3Bvc2VkIGNoYW5nZXMsIG9yIGZvciBmaW5kaW5nIHRoZSBsaXN0IG9mIHJlY2lwaWVudHMgdG8gQ2M6IHdoZW4KK3N1Ym1pdHRpbmcgYSBwYXRjaCBzZXJpZXMgdmlhIGBnaXQgc2VuZC1lbWFpbGAuIEZvciB0aGUgbGF0dGVyIGNhc2UsIGBnaXQKK2NvbnRhY3RzYCBjYW4gYmUgdXNlZCBhcyB0aGUgYXJndW1lbnQgdG8gYGdpdCBzZW5kLWVtYWlsYCdzIGAtLWNjLWNtZGAgb3B0aW9uLgorCisKK0RJU0NVU1NJT04KKy0tLS0tLS0tLS0KKworYGdpdCBibGFtZWAgaXMgaW52b2tlZCBmb3IgZWFjaCBodW5rIGluIGEgcGF0Y2ggZmlsZSBvciByZXZpc2lvbi4gIEZvciBlYWNoCitjb21taXQgbWVudGlvbmVkIGJ5IGBnaXQgYmxhbWVgLCB0aGUgY29tbWl0IG1lc3NhZ2UgaXMgY29uc3VsdGVkIGZvciBwZW9wbGUgd2hvCithdXRob3JlZCwgcmV2aWV3ZWQsIHNpZ25lZCwgYWNrbm93bGVkZ2VkLCBvciB3ZXJlIENjOidkLiAgT25jZSB0aGUgbGlzdCBvZgorcGFydGljaXBhbnRzIGlzIGtub3duLCBlYWNoIHBlcnNvbidzIHJlbGV2YW5jZSBpcyBjb21wdXRlZCBieSBjb25zaWRlcmluZyBob3cKK21hbnkgY29tbWl0cyBtZW50aW9uZWQgdGhhdCBwZXJzb24gY29tcGFyZWQgd2l0aCB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbW1pdHMKK3VuZGVyIGNvbnNpZGVyYXRpb24uICBUaGUgZmluYWwgb3V0cHV0IGNvbnNpc3RzIG9ubHkgb2YgcGFydGljaXBhbnRzIHdobyBleGNlZWQKK2EgbWluaW11bSB0aHJlc2hvbGQgb2YgcGFydGljaXBhdGlvbi4KKworCitPVVRQVVQKKy0tLS0tLQorCitGb3IgZWFjaCBwZXJzb24gb2YgaW50ZXJlc3QsIGEgc2luZ2xlIGxpbmUgaXMgb3V0cHV0LCB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZS4KK0lmIHRoZSBwZXJzb24ncyBuYW1lIGlzIGtub3duLCBgYE5hbWUgJCQ8dXNlckBob3N0PiQkJycgaXMgcHJpbnRlZDsgb3RoZXJ3aXNlCitvbmx5IGBgJCQ8dXNlckBob3N0PiQkJycgaXMgcHJpbnRlZC4KKworCitFWEFNUExFUworLS0tLS0tLS0KKworKiBDb25zdWx0IHBhdGNoIGZpbGVzOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb250YWN0cyBmZWF0dXJlLyoucGF0Y2gKKy0tLS0tLS0tLS0tLQorCisqIFJldmlzaW9uIHJhbmdlOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb250YWN0cyBSMS4uUjIKKy0tLS0tLS0tLS0tLQorCisqIEZyb20gYSBzaW5nbGUgcmV2aXNpb24gdG8gYEhFQURgOgorKworLS0tLS0tLS0tLS0tCiskIGdpdCBjb250YWN0cyBvcmlnaW4KKy0tLS0tLS0tLS0tLQorCisqIEhlbHBlciBmb3IgYGdpdCBzZW5kLWVtYWlsYDoKKysKKy0tLS0tLS0tLS0tLQorJCBnaXQgc2VuZC1lbWFpbCAtLWNjLWNtZD0nZ2l0IGNvbnRhY3RzJyBmZWF0dXJlLyoucGF0Y2gKKy0tLS0tLS0tLS0tLQorCisKK0xJTUlUQVRJT05TCistLS0tLS0tLS0tLQorCitTZXZlcmFsIGNvbmRpdGlvbnMgY29udHJvbGxpbmcgYSBwZXJzb24ncyBzaWduaWZpY2FuY2UgYXJlIGN1cnJlbnRseQoraGFyZC1jb2RlZCwgc3VjaCBhcyBtaW5pbXVtIHBhcnRpY2lwYXRpb24gbGV2ZWwgKDEwJSksIGJsYW1lIGRhdGUtbGltaXRpbmcgKDUKK3llYXJzKSwgYW5kIGAtQ2AgbGV2ZWwgZm9yIGRldGVjdGluZyBtb3ZlZCBhbmQgY29waWVkIGxpbmVzIChhIHNpbmdsZSBgLUNgKS4gSW4KK3RoZSBmdXR1cmUsIHRoZXNlIGNvbmRpdGlvbnMgbWF5IGJlY29tZSBjb25maWd1cmFibGUuCisKKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzFdIHN1aXRlCmRpZmYgLS1naXQgYS9jb250cmliL2NvbnZlcnQtZ3JhZnRzLXRvLXJlcGxhY2UtcmVmcy5zaCBiL2NvbnRyaWIvY29udmVydC1ncmFmdHMtdG8tcmVwbGFjZS1yZWZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjYmM5MTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NvbnZlcnQtZ3JhZnRzLXRvLXJlcGxhY2UtcmVmcy5zaApAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKworIyBZb3Ugc2hvdWxkIGV4ZWN1dGUgdGhpcyBzY3JpcHQgaW4gdGhlIHJlcG9zaXRvcnkgd2hlcmUgeW91CisjIHdhbnQgdG8gY29udmVydCBncmFmdHMgdG8gcmVwbGFjZSByZWZzLgorCitHUkFGVFNfRklMRT0iJHtHSVRfRElSOi0uZ2l0fS9pbmZvL2dyYWZ0cyIKKworLiAkKGdpdCAtLWV4ZWMtcGF0aCkvZ2l0LXNoLXNldHVwCisKK3Rlc3QgLWYgIiRHUkFGVFNfRklMRSIgfHwgZGllICJDb3VsZCBub3QgZmluZCBncmFmdCBmaWxlOiAnJEdSQUZUU19GSUxFJyIKKworZ3JlcCAnXlteIyBdJyAiJEdSQUZUU19GSUxFIiB8Cit3aGlsZSByZWFkIGRlZmluaXRpb24KK2RvCisJaWYgdGVzdCAtbiAiJGRlZmluaXRpb24iCisJdGhlbgorCQllY2hvICJDb252ZXJ0aW5nOiAkZGVmaW5pdGlvbiIKKwkJZ2l0IHJlcGxhY2UgLS1ncmFmdCAkZGVmaW5pdGlvbiB8fAorCQkJZGllICJDb252ZXJzaW9uIGZhaWxlZCBmb3I6ICRkZWZpbml0aW9uIgorCWZpCitkb25lCisKK212ICIkR1JBRlRTX0ZJTEUiICIkR1JBRlRTX0ZJTEUuYmFrIiB8fAorCWRpZSAiQ291bGQgbm90IHJlbmFtZSAnJEdSQUZUU19GSUxFJyB0byAnJEdSQUZUU19GSUxFLmJhayciCisKK2VjaG8gIlN1Y2Nlc3MhIgorZWNobyAiQWxsIHRoZSBncmFmdHMgaW4gJyRHUkFGVFNfRklMRScgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byByZXBsYWNlIHJlZnMhIgorZWNobyAiVGhlIGdyYWZ0cyBmaWxlICckR1JBRlRTX0ZJTEUnIGhhcyBiZWVuIHJlbmFtZWQ6ICckR1JBRlRTX0ZJTEUuYmFrJyIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY29udmVydC1vYmplY3RzL2NvbnZlcnQtb2JqZWN0cy5jIGIvY29udHJpYi9jb252ZXJ0LW9iamVjdHMvY29udmVydC1vYmplY3RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNiNTdiZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY29udmVydC1vYmplY3RzL2NvbnZlcnQtb2JqZWN0cy5jCkBAIC0wLDAgKzEsMzI5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidHJlZS5oIgorCitzdHJ1Y3QgZW50cnkgeworCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCXVuc2lnbmVkIGNoYXIgbmV3X3NoYTFbMjBdOworCWludCBjb252ZXJ0ZWQ7Cit9OworCisjZGVmaW5lIE1BWE9CSkVDVFMgKDEwMDAwMDApCisKK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKmNvbnZlcnRbTUFYT0JKRUNUU107CitzdGF0aWMgaW50IG5yX2NvbnZlcnQ7CisKK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKiBjb252ZXJ0X2VudHJ5KHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitzdGF0aWMgc3RydWN0IGVudHJ5ICppbnNlcnRfbmV3KHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBwb3MpCit7CisJc3RydWN0IGVudHJ5ICpuZXcgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZW50cnkpKTsKKwloYXNoY3B5KG5ldy0+b2xkX3NoYTEsIHNoYTEpOworCW1lbW1vdmUoY29udmVydCArIHBvcyArIDEsIGNvbnZlcnQgKyBwb3MsIChucl9jb252ZXJ0IC0gcG9zKSAqIHNpemVvZihzdHJ1Y3QgZW50cnkgKikpOworCWNvbnZlcnRbcG9zXSA9IG5ldzsKKwlucl9jb252ZXJ0Kys7CisJaWYgKG5yX2NvbnZlcnQgPT0gTUFYT0JKRUNUUykKKwkJZGllKCJ5b3UncmUga2lkZGluZyBtZSAtIGhpdCBtYXhpbXVtIG9iamVjdCBsaW1pdCIpOworCXJldHVybiBuZXc7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZW50cnkgKmxvb2t1cF9lbnRyeSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBsb3cgPSAwLCBoaWdoID0gbnJfY29udmVydDsKKworCXdoaWxlIChsb3cgPCBoaWdoKSB7CisJCWludCBuZXh0ID0gKGxvdyArIGhpZ2gpIC8gMjsKKwkJc3RydWN0IGVudHJ5ICpuID0gY29udmVydFtuZXh0XTsKKwkJaW50IGNtcCA9IGhhc2hjbXAoc2hhMSwgbi0+b2xkX3NoYTEpOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiBuOworCQlpZiAoY21wIDwgMCkgeworCQkJaGlnaCA9IG5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlsb3cgPSBuZXh0KzE7CisJfQorCXJldHVybiBpbnNlcnRfbmV3KHNoYTEsIGxvdyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfYmluYXJ5X3NoYTEodm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBlbnRyeSAqZW50cnkgPSBjb252ZXJ0X2VudHJ5KGJ1ZmZlcik7CisJaGFzaGNweShidWZmZXIsIGVudHJ5LT5uZXdfc2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfYXNjaWlfc2hhMSh2b2lkICpidWZmZXIpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgZW50cnkgKmVudHJ5OworCisJaWYgKGdldF9zaGExX2hleChidWZmZXIsIHNoYTEpKQorCQlkaWUoImV4cGVjdGVkIHNoYTEsIGdvdCAnJXMnIiwgKGNoYXIgKikgYnVmZmVyKTsKKwllbnRyeSA9IGNvbnZlcnRfZW50cnkoc2hhMSk7CisJbWVtY3B5KGJ1ZmZlciwgc2hhMV90b19oZXgoZW50cnktPm5ld19zaGExKSwgNDApOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNvbnZlcnRfbW9kZSh1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgbmV3bW9kZTsKKworCW5ld21vZGUgPSBtb2RlICYgU19JRk1UOworCWlmIChTX0lTUkVHKG1vZGUpKQorCQluZXdtb2RlIHw9IChtb2RlICYgMDEwMCkgPyAwNzU1IDogMDY0NDsKKwlyZXR1cm4gbmV3bW9kZTsKK30KKworc3RhdGljIGludCB3cml0ZV9zdWJkaXJlY3Rvcnkodm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUsIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwljaGFyICpuZXcgPSB4bWFsbG9jKHNpemUpOworCXVuc2lnbmVkIGxvbmcgbmV3bGVuID0gMDsKKwl1bnNpZ25lZCBsb25nIHVzZWQ7CisKKwl1c2VkID0gMDsKKwl3aGlsZSAoc2l6ZSkgeworCQlpbnQgbGVuID0gMjEgKyBzdHJsZW4oYnVmZmVyKTsKKwkJY2hhciAqcGF0aCA9IHN0cmNocihidWZmZXIsICcgJyk7CisJCXVuc2lnbmVkIGNoYXIgKnNoYTE7CisJCXVuc2lnbmVkIGludCBtb2RlOworCQljaGFyICpzbGFzaCwgKm9yaWdwYXRoOworCisJCWlmICghcGF0aCB8fCBzdHJ0b3VsX3VpKGJ1ZmZlciwgOCwgJm1vZGUpKQorCQkJZGllKCJiYWQgdHJlZSBjb252ZXJzaW9uIik7CisJCW1vZGUgPSBjb252ZXJ0X21vZGUobW9kZSk7CisJCXBhdGgrKzsKKwkJaWYgKG1lbWNtcChwYXRoLCBiYXNlLCBiYXNlbGVuKSkKKwkJCWJyZWFrOworCQlvcmlncGF0aCA9IHBhdGg7CisJCXBhdGggKz0gYmFzZWxlbjsKKwkJc2xhc2ggPSBzdHJjaHIocGF0aCwgJy8nKTsKKwkJaWYgKCFzbGFzaCkgeworCQkJbmV3bGVuICs9IHNwcmludGYobmV3ICsgbmV3bGVuLCAiJW8gJXMiLCBtb2RlLCBwYXRoKTsKKwkJCW5ld1tuZXdsZW4rK10gPSAnXDAnOworCQkJaGFzaGNweSgodW5zaWduZWQgY2hhciAqKW5ldyArIG5ld2xlbiwgKHVuc2lnbmVkIGNoYXIgKikgYnVmZmVyICsgbGVuIC0gMjApOworCQkJbmV3bGVuICs9IDIwOworCisJCQl1c2VkICs9IGxlbjsKKwkJCXNpemUgLT0gbGVuOworCQkJYnVmZmVyID0gKGNoYXIgKikgYnVmZmVyICsgbGVuOworCQkJY29udGludWU7CisJCX0KKworCQluZXdsZW4gKz0gc3ByaW50ZihuZXcgKyBuZXdsZW4sICIlbyAlLipzIiwgU19JRkRJUiwgKGludCkoc2xhc2ggLSBwYXRoKSwgcGF0aCk7CisJCW5ld1tuZXdsZW4rK10gPSAwOworCQlzaGExID0gKHVuc2lnbmVkIGNoYXIgKikobmV3ICsgbmV3bGVuKTsKKwkJbmV3bGVuICs9IDIwOworCisJCWxlbiA9IHdyaXRlX3N1YmRpcmVjdG9yeShidWZmZXIsIHNpemUsIG9yaWdwYXRoLCBzbGFzaC1vcmlncGF0aCsxLCBzaGExKTsKKworCQl1c2VkICs9IGxlbjsKKwkJc2l6ZSAtPSBsZW47CisJCWJ1ZmZlciA9IChjaGFyICopIGJ1ZmZlciArIGxlbjsKKwl9CisKKwl3cml0ZV9zaGExX2ZpbGUobmV3LCBuZXdsZW4sIHRyZWVfdHlwZSwgcmVzdWx0X3NoYTEpOworCWZyZWUobmV3KTsKKwlyZXR1cm4gdXNlZDsKK30KKworc3RhdGljIHZvaWQgY29udmVydF90cmVlKHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwl2b2lkICpvcmlnX2J1ZmZlciA9IGJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIG9yaWdfc2l6ZSA9IHNpemU7CisKKwl3aGlsZSAoc2l6ZSkgeworCQlzaXplX3QgbGVuID0gMStzdHJsZW4oYnVmZmVyKTsKKworCQljb252ZXJ0X2JpbmFyeV9zaGExKChjaGFyICopIGJ1ZmZlciArIGxlbik7CisKKwkJbGVuICs9IDIwOworCQlpZiAobGVuID4gc2l6ZSkKKwkJCWRpZSgiY29ycnVwdCB0cmVlIG9iamVjdCIpOworCQlzaXplIC09IGxlbjsKKwkJYnVmZmVyID0gKGNoYXIgKikgYnVmZmVyICsgbGVuOworCX0KKworCXdyaXRlX3N1YmRpcmVjdG9yeShvcmlnX2J1ZmZlciwgb3JpZ19zaXplLCAiIiwgMCwgcmVzdWx0X3NoYTEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYXJzZV9vbGRzdHlsZV9kYXRlKGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwljaGFyIGMsICpwOworCWNoYXIgYnVmZmVyWzEwMF07CisJc3RydWN0IHRtIHRtOworCWNvbnN0IGNoYXIgKmZvcm1hdHNbXSA9IHsKKwkJIiVjIiwKKwkJIiVhICViICVkICVUIiwKKwkJIiVaIiwKKwkJIiVZIiwKKwkJIiAlWSIsCisJCU5VTEwKKwl9OworCS8qIFdlIG9ubHkgZXZlciBkaWQgdHdvIHRpbWV6b25lcyBpbiB0aGUgYmFkIG9sZCBmb3JtYXQgLi4gKi8KKwljb25zdCBjaGFyICp0aW1lem9uZXNbXSA9IHsKKwkJIlBEVCIsICJQU1QiLCAiQ0VTVCIsIE5VTEwKKwl9OworCWNvbnN0IGNoYXIgKipmbXQgPSBmb3JtYXRzOworCisJcCA9IGJ1ZmZlcjsKKwl3aGlsZSAoaXNzcGFjZShjID0gKmJ1ZikpCisJCWJ1ZisrOworCXdoaWxlICgoYyA9ICpidWYrKykgIT0gJ1xuJykKKwkJKnArKyA9IGM7CisJKnArKyA9IDA7CisJYnVmID0gYnVmZmVyOworCW1lbXNldCgmdG0sIDAsIHNpemVvZih0bSkpOworCWRvIHsKKwkJY29uc3QgY2hhciAqbmV4dCA9IHN0cnB0aW1lKGJ1ZiwgKmZtdCwgJnRtKTsKKwkJaWYgKG5leHQpIHsKKwkJCWlmICghKm5leHQpCisJCQkJcmV0dXJuIG1rdGltZSgmdG0pOworCQkJYnVmID0gbmV4dDsKKwkJfSBlbHNlIHsKKwkJCWNvbnN0IGNoYXIgKipwID0gdGltZXpvbmVzOworCQkJd2hpbGUgKGlzc3BhY2UoKmJ1ZikpCisJCQkJYnVmKys7CisJCQl3aGlsZSAoKnApIHsKKwkJCQlpZiAoIW1lbWNtcChidWYsICpwLCBzdHJsZW4oKnApKSkgeworCQkJCQlidWYgKz0gc3RybGVuKCpwKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXArKzsKKwkJCX0KKwkJfQorCQlmbXQrKzsKKwl9IHdoaWxlICgqYnVmICYmICpmbXQpOworCXByaW50ZigibGVmdDogJXNcbiIsIGJ1Zik7CisJcmV0dXJuIG1rdGltZSgmdG0pOworfQorCitzdGF0aWMgaW50IGNvbnZlcnRfZGF0ZV9saW5lKGNoYXIgKmRzdCwgdm9pZCAqKmJ1ZiwgdW5zaWduZWQgbG9uZyAqc3ApCit7CisJdW5zaWduZWQgbG9uZyBzaXplID0gKnNwOworCWNoYXIgKmxpbmUgPSAqYnVmOworCWNoYXIgKm5leHQgPSBzdHJjaHIobGluZSwgJ1xuJyk7CisJY2hhciAqZGF0ZSA9IHN0cmNocihsaW5lLCAnPicpOworCWludCBsZW47CisKKwlpZiAoIW5leHQgfHwgIWRhdGUpCisJCWRpZSgibWlzc2luZyBvciBiYWQgYXV0aG9yL2NvbW1pdHRlciBsaW5lICVzIiwgbGluZSk7CisJbmV4dCsrOyBkYXRlICs9IDI7CisKKwkqYnVmID0gbmV4dDsKKwkqc3AgPSBzaXplIC0gKG5leHQgLSBsaW5lKTsKKworCWxlbiA9IGRhdGUgLSBsaW5lOworCW1lbWNweShkc3QsIGxpbmUsIGxlbik7CisJZHN0ICs9IGxlbjsKKworCS8qIElzIGl0IGFscmVhZHkgaW4gbmV3IGZvcm1hdD8gKi8KKwlpZiAoaXNkaWdpdCgqZGF0ZSkpIHsKKwkJaW50IGRhdGVsZW4gPSBuZXh0IC0gZGF0ZTsKKwkJbWVtY3B5KGRzdCwgZGF0ZSwgZGF0ZWxlbik7CisJCXJldHVybiBsZW4gKyBkYXRlbGVuOworCX0KKworCS8qCisJICogSGFja3kgaGFja3k6IG9uZSBvZiB0aGUgc3BhcnNlIG9sZC1zdHlsZSBjb21taXRzIGRvZXMgbm90IGhhdmUKKwkgKiBhbnkgZGF0ZSBhdCBhbGwsIGJ1dCB3ZSBjYW4gZmFrZSBpdCBieSB1c2luZyB0aGUgY29tbWl0dGVyIGRhdGUuCisJICovCisJaWYgKCpkYXRlID09ICdcbicgJiYgc3RyY2hyKG5leHQsICc+JykpCisJCWRhdGUgPSBzdHJjaHIobmV4dCwgJz4nKSsyOworCisJcmV0dXJuIGxlbiArIHNwcmludGYoZHN0LCAiJWx1IC0wNzAwXG4iLCBwYXJzZV9vbGRzdHlsZV9kYXRlKGRhdGUpKTsKK30KKworc3RhdGljIHZvaWQgY29udmVydF9kYXRlKHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwljaGFyICpuZXcgPSB4bWFsbG9jKHNpemUgKyAxMDApOworCXVuc2lnbmVkIGxvbmcgbmV3bGVuID0gMDsKKworCS8qICJ0cmVlIDxzaGExPlxuIiAqLworCW1lbWNweShuZXcgKyBuZXdsZW4sIGJ1ZmZlciwgNDYpOworCW5ld2xlbiArPSA0NjsKKwlidWZmZXIgPSAoY2hhciAqKSBidWZmZXIgKyA0NjsKKwlzaXplIC09IDQ2OworCisJLyogInBhcmVudCA8c2hhMT5cbiIgKi8KKwl3aGlsZSAoIW1lbWNtcChidWZmZXIsICJwYXJlbnQgIiwgNykpIHsKKwkJbWVtY3B5KG5ldyArIG5ld2xlbiwgYnVmZmVyLCA0OCk7CisJCW5ld2xlbiArPSA0ODsKKwkJYnVmZmVyID0gKGNoYXIgKikgYnVmZmVyICsgNDg7CisJCXNpemUgLT0gNDg7CisJfQorCisJLyogImF1dGhvciB4eXogPHh5ej4gZGF0ZSIgKi8KKwluZXdsZW4gKz0gY29udmVydF9kYXRlX2xpbmUobmV3ICsgbmV3bGVuLCAmYnVmZmVyLCAmc2l6ZSk7CisJLyogImNvbW1pdHRlciB4eXogPHh5ej4gZGF0ZSIgKi8KKwluZXdsZW4gKz0gY29udmVydF9kYXRlX2xpbmUobmV3ICsgbmV3bGVuLCAmYnVmZmVyLCAmc2l6ZSk7CisKKwkvKiBSZXN0ICovCisJbWVtY3B5KG5ldyArIG5ld2xlbiwgYnVmZmVyLCBzaXplKTsKKwluZXdsZW4gKz0gc2l6ZTsKKworCXdyaXRlX3NoYTFfZmlsZShuZXcsIG5ld2xlbiwgY29tbWl0X3R5cGUsIHJlc3VsdF9zaGExKTsKKwlmcmVlKG5ldyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfY29tbWl0KHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwl2b2lkICpvcmlnX2J1ZmZlciA9IGJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIG9yaWdfc2l6ZSA9IHNpemU7CisKKwlpZiAobWVtY21wKGJ1ZmZlciwgInRyZWUgIiwgNSkpCisJCWRpZSgiQmFkIGNvbW1pdCAnJXMnIiwgKGNoYXIgKikgYnVmZmVyKTsKKwljb252ZXJ0X2FzY2lpX3NoYTEoKGNoYXIgKikgYnVmZmVyICsgNSk7CisJYnVmZmVyID0gKGNoYXIgKikgYnVmZmVyICsgNDY7ICAgIC8qICJ0cmVlICIgKyAiaGV4IHNoYTEiICsgIlxuIiAqLworCXdoaWxlICghbWVtY21wKGJ1ZmZlciwgInBhcmVudCAiLCA3KSkgeworCQljb252ZXJ0X2FzY2lpX3NoYTEoKGNoYXIgKikgYnVmZmVyICsgNyk7CisJCWJ1ZmZlciA9IChjaGFyICopIGJ1ZmZlciArIDQ4OworCX0KKwljb252ZXJ0X2RhdGUob3JpZ19idWZmZXIsIG9yaWdfc2l6ZSwgcmVzdWx0X3NoYTEpOworfQorCitzdGF0aWMgc3RydWN0IGVudHJ5ICogY29udmVydF9lbnRyeSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBlbnRyeSAqZW50cnkgPSBsb29rdXBfZW50cnkoc2hhMSk7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXZvaWQgKmJ1ZmZlciwgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJaWYgKGVudHJ5LT5jb252ZXJ0ZWQpCisJCXJldHVybiBlbnRyeTsKKwlkYXRhID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWRhdGEpCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgb2JqZWN0ICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJYnVmZmVyID0geG1hbGxvYyhzaXplKTsKKwltZW1jcHkoYnVmZmVyLCBkYXRhLCBzaXplKTsKKworCWlmICh0eXBlID09IE9CSl9CTE9CKSB7CisJCXdyaXRlX3NoYTFfZmlsZShidWZmZXIsIHNpemUsIGJsb2JfdHlwZSwgZW50cnktPm5ld19zaGExKTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gT0JKX1RSRUUpCisJCWNvbnZlcnRfdHJlZShidWZmZXIsIHNpemUsIGVudHJ5LT5uZXdfc2hhMSk7CisJZWxzZSBpZiAodHlwZSA9PSBPQkpfQ09NTUlUKQorCQljb252ZXJ0X2NvbW1pdChidWZmZXIsIHNpemUsIGVudHJ5LT5uZXdfc2hhMSk7CisJZWxzZQorCQlkaWUoInVua25vd24gb2JqZWN0IHR5cGUgJWQgaW4gJXMiLCB0eXBlLCBzaGExX3RvX2hleChzaGExKSk7CisJZW50cnktPmNvbnZlcnRlZCA9IDE7CisJZnJlZShidWZmZXIpOworCWZyZWUoZGF0YSk7CisJcmV0dXJuIGVudHJ5OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgZW50cnkgKmVudHJ5OworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2UoImdpdC1jb252ZXJ0LW9iamVjdHMgPHNoYTE+Iik7CisJaWYgKGdldF9zaGExKGFyZ3ZbMV0sIHNoYTEpKQorCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIiwgYXJndlsxXSk7CisKKwllbnRyeSA9IGNvbnZlcnRfZW50cnkoc2hhMSk7CisJcHJpbnRmKCJuZXcgc2hhMTogJXNcbiIsIHNoYTFfdG9faGV4KGVudHJ5LT5uZXdfc2hhMSkpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jb252ZXJ0LW9iamVjdHMvZ2l0LWNvbnZlcnQtb2JqZWN0cy50eHQgYi9jb250cmliL2NvbnZlcnQtb2JqZWN0cy9naXQtY29udmVydC1vYmplY3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODcxODgwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jb252ZXJ0LW9iamVjdHMvZ2l0LWNvbnZlcnQtb2JqZWN0cy50eHQKQEAgLTAsMCArMSwyOSBAQAorZ2l0LWNvbnZlcnQtb2JqZWN0cygxKQorPT09PT09PT09PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtY29udmVydC1vYmplY3RzIC0gQ29udmVydHMgb2xkLXN0eWxlIGdpdCByZXBvc2l0b3J5CisKKworU1lOT1BTSVMKKy0tLS0tLS0tCitbdmVyc2VdCisnZ2l0LWNvbnZlcnQtb2JqZWN0cycKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCitDb252ZXJ0cyBvbGQtc3R5bGUgZ2l0IHJlcG9zaXRvcnkgdG8gdGhlIGxhdGVzdCBmb3JtYXQKKworCitBdXRob3IKKy0tLS0tLQorV3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAb3NkbC5vcmc+CisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IERhdmlkIEdyZWF2ZXMsIEp1bmlvIEMgSGFtYW5vIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgorCitHSVQKKy0tLQorUGFydCBvZiB0aGUgbGlua2dpdDpnaXRbN10gc3VpdGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nLy5naXRpZ25vcmUgYi9jb250cmliL2NyZWRlbnRpYWwvZ25vbWUta2V5cmluZy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZDhmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvZ25vbWUta2V5cmluZy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK2dpdC1jcmVkZW50aWFsLWdub21lLWtleXJpbmcKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL01ha2VmaWxlIGIvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNjN2M5OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL01ha2VmaWxlCkBAIC0wLDAgKzEsMjQgQEAKK01BSU46PWdpdC1jcmVkZW50aWFsLWdub21lLWtleXJpbmcKK2FsbDo6ICQoTUFJTikKKworQ0MgPSBnY2MKK1JNID0gcm0gLWYKK0NGTEFHUyA9IC1nIC1PMiAtV2FsbAorCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKKworSU5DUzo9JChzaGVsbCBwa2ctY29uZmlnIC0tY2ZsYWdzIGdub21lLWtleXJpbmctMSBnbGliLTIuMCkKK0xJQlM6PSQoc2hlbGwgcGtnLWNvbmZpZyAtLWxpYnMgZ25vbWUta2V5cmluZy0xIGdsaWItMi4wKQorCitTUkNTOj0kKE1BSU4pLmMKK09CSlM6PSQoU1JDUzouYz0ubykKKworJS5vOiAlLmMKKwkkKENDKSAkKENGTEFHUykgJChDUFBGTEFHUykgJChJTkNTKSAtbyAkQCAtYyAkPAorCiskKE1BSU4pOiAkKE9CSlMpCisJJChDQykgLW8gJEAgJChMREZMQUdTKSAkXiAkKExJQlMpCisKK2NsZWFuOgorCUAkKFJNKSAkKE1BSU4pICQoT0JKUykKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL2dpdC1jcmVkZW50aWFsLWdub21lLWtleXJpbmcuYyBiL2NvbnRyaWIvY3JlZGVudGlhbC9nbm9tZS1rZXlyaW5nL2dpdC1jcmVkZW50aWFsLWdub21lLWtleXJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTMxN2ZjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL2dub21lLWtleXJpbmcvZ2l0LWNyZWRlbnRpYWwtZ25vbWUta2V5cmluZy5jCkBAIC0wLDAgKzEsNDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEpvaG4gU3pha21laXN0ZXIgPGpvaG5Ac3pha21laXN0ZXIubmV0PgorICogICAgICAgICAgICAgICAyMDEyIFBoaWxpcHAgQS4gSGFydG1hbm4gPHBhaEBxby5jeD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKgorICogQ3JlZGl0czoKKyAqIC0gR05PTUUgS2V5cmluZyBBUEkgaGFuZGxpbmcgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEpvaG4gU3pha21laXN0ZXIKKyAqIC0gcG9ydGVkIHRvIGNyZWRlbnRpYWwgaGVscGVyIEFQSSBieSBQaGlsaXBwIEEuIEhhcnRtYW5uCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdub21lLWtleXJpbmcuaD4KKworI2lmZGVmIEdOT01FX0tFWVJJTkdfREVGQVVMVAorCisgICAvKiBNb2Rlcm4gZ25vbWUta2V5cmluZyAqLworCisjaW5jbHVkZSA8Z25vbWUta2V5cmluZy1tZW1vcnkuaD4KKworI2Vsc2UKKworICAgLyoKKyAgICAqIFN1cHBvcnQgYW5jaWVudCBnbm9tZS1rZXlyaW5nLCBjaXJjLiBSSEVMIDUuWC4KKyAgICAqIEdOT01FX0tFWVJJTkdfREVGQVVMVCBzZWVtcyB0byBoYXZlIGJlZW4gaW50cm9kdWNlZCB3aXRoIEdub21lIDIuMjIsCisgICAgKiBhbmQgdGhlIG90aGVyIGZlYXR1cmVzIHJvdWdobHkgYXJvdW5kIEdub21lIDIuMjAsIDYgbW9udGhzIGJlZm9yZS4KKyAgICAqIFVidW50dSA4LjA0IHVzZWQgR25vbWUgMi4yMiAoSSB0aGluaykuICBOb3Qgc3VyZSBhbnkgZGlzdHJvIHVzZWQgMi4yMC4KKyAgICAqIFNvIHRoZSBleGlzdGVuY2Uvbm9uLWV4aXN0ZW5jZSBvZiBHTk9NRV9LRVlSSU5HX0RFRkFVTFQgc2VlbXMgbGlrZQorICAgICogYSBkZWNlbnQgdGhpbmcgdG8gdXNlIGFzIGFuIGluZGljYXRvci4KKyAgICAqLworCisjZGVmaW5lIEdOT01FX0tFWVJJTkdfREVGQVVMVCBOVUxMCisKKy8qCisgKiBhbmNpZW50IGdub21lLWtleXJpbmcgcmV0dXJucyBERU5JRUQgd2hlbiBhbiBlbnRyeSBpcyBub3QgZm91bmQuCisgKiBTZXR0aW5nIE5PX01BVENIIHRvIERFTklFRCB3aWxsIHByZXZlbnQgdXMgZnJvbSByZXBvcnRpbmcgREVOSUVECisgKiBlcnJvcnMgZHVyaW5nIGdldCBhbmQgZXJhc2Ugb3BlcmF0aW9ucywgYnV0IHdlIHdpbGwgc3RpbGwgcmVwb3J0CisgKiBERU5JRUQgZXJyb3JzIGR1cmluZyBhIHN0b3JlLgorICovCisjZGVmaW5lIEdOT01FX0tFWVJJTkdfUkVTVUxUX05PX01BVENIIEdOT01FX0tFWVJJTkdfUkVTVUxUX0RFTklFRAorCisjZGVmaW5lIGdub21lX2tleXJpbmdfbWVtb3J5X2FsbG9jIGdfbWFsbG9jCisjZGVmaW5lIGdub21lX2tleXJpbmdfbWVtb3J5X2ZyZWUgZ25vbWVfa2V5cmluZ19mcmVlX3Bhc3N3b3JkCisjZGVmaW5lIGdub21lX2tleXJpbmdfbWVtb3J5X3N0cmR1cCBnX3N0cmR1cAorCitzdGF0aWMgY29uc3QgY2hhciAqZ25vbWVfa2V5cmluZ19yZXN1bHRfdG9fbWVzc2FnZShHbm9tZUtleXJpbmdSZXN1bHQgcmVzdWx0KQoreworCXN3aXRjaCAocmVzdWx0KSB7CisJY2FzZSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9PSzoKKwkJcmV0dXJuICJPSyI7CisJY2FzZSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9ERU5JRUQ6CisJCXJldHVybiAiRGVuaWVkIjsKKwljYXNlIEdOT01FX0tFWVJJTkdfUkVTVUxUX05PX0tFWVJJTkdfREFFTU9OOgorCQlyZXR1cm4gIk5vIEtleXJpbmcgRGFlbW9uIjsKKwljYXNlIEdOT01FX0tFWVJJTkdfUkVTVUxUX0FMUkVBRFlfVU5MT0NLRUQ6CisJCXJldHVybiAiQWxyZWFkeSBVbkxvY2tlZCI7CisJY2FzZSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9OT19TVUNIX0tFWVJJTkc6CisJCXJldHVybiAiTm8gU3VjaCBLZXlyaW5nIjsKKwljYXNlIEdOT01FX0tFWVJJTkdfUkVTVUxUX0JBRF9BUkdVTUVOVFM6CisJCXJldHVybiAiQmFkIEFyZ3VtZW50cyI7CisJY2FzZSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9JT19FUlJPUjoKKwkJcmV0dXJuICJJTyBFcnJvciI7CisJY2FzZSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9DQU5DRUxMRUQ6CisJCXJldHVybiAiQ2FuY2VsbGVkIjsKKwljYXNlIEdOT01FX0tFWVJJTkdfUkVTVUxUX0FMUkVBRFlfRVhJU1RTOgorCQlyZXR1cm4gIkFscmVhZHkgRXhpc3RzIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIlVua25vd24gRXJyb3IiOworCX0KK30KKworLyoKKyAqIFN1cHBvcnQgcmVhbGx5IGFuY2llbnQgZ25vbWUta2V5cmluZywgY2lyYy4gUkhFTCA0LlguCisgKiBKdXN0IGEgZ3Vlc3MgZm9yIHRoZSBHbGliIHZlcnNpb24uICBHbGliIDIuOCB3YXMgcm91Z2hseSBHbm9tZSAyLjEyID8KKyAqIFdoaWNoIHdhcyByZWxlYXNlZCB3aXRoIGdub21lLWtleXJpbmcgMC40LjMgPz8KKyAqLworI2lmIEdMSUJfTUFKT1JfVkVSU0lPTiA9PSAyICYmIEdMSUJfTUlOT1JfVkVSU0lPTiA8IDgKKworc3RhdGljIHZvaWQgZ25vbWVfa2V5cmluZ19kb25lX2NiKEdub21lS2V5cmluZ1Jlc3VsdCByZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlncG9pbnRlciAqZGF0YSA9IChncG9pbnRlciAqKXVzZXJfZGF0YTsKKwlpbnQgKmRvbmUgPSAoaW50ICopZGF0YVswXTsKKwlHbm9tZUtleXJpbmdSZXN1bHQgKnIgPSAoR25vbWVLZXlyaW5nUmVzdWx0ICopZGF0YVsxXTsKKworCSpyID0gcmVzdWx0OworCSpkb25lID0gMTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9mb3JfcmVxdWVzdF9jb21wbGV0aW9uKGludCAqZG9uZSkKK3sKKwlHTWFpbkNvbnRleHQgKm1jID0gZ19tYWluX2NvbnRleHRfZGVmYXVsdCgpOworCXdoaWxlICghKmRvbmUpCisJCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihtYywgVFJVRSk7Cit9CisKK3N0YXRpYyBHbm9tZUtleXJpbmdSZXN1bHQgZ25vbWVfa2V5cmluZ19pdGVtX2RlbGV0ZV9zeW5jKGNvbnN0IGNoYXIgKmtleXJpbmcsIGd1aW50MzIgaWQpCit7CisJaW50IGRvbmUgPSAwOworCUdub21lS2V5cmluZ1Jlc3VsdCByZXN1bHQ7CisJZ3BvaW50ZXIgZGF0YVtdID0geyAmZG9uZSwgJnJlc3VsdCB9OworCisJZ25vbWVfa2V5cmluZ19pdGVtX2RlbGV0ZShrZXlyaW5nLCBpZCwgZ25vbWVfa2V5cmluZ19kb25lX2NiLCBkYXRhLAorCQlOVUxMKTsKKworCXdhaXRfZm9yX3JlcXVlc3RfY29tcGxldGlvbigmZG9uZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogVGhpcyBjcmVkZW50aWFsIHN0cnVjdCBhbmQgQVBJIGlzIHNpbXBsaWZpZWQgZnJvbSBnaXQncyBjcmVkZW50aWFsLntoLGN9CisgKi8KK3N0cnVjdCBjcmVkZW50aWFsIHsKKwljaGFyICpwcm90b2NvbDsKKwljaGFyICpob3N0OworCXVuc2lnbmVkIHNob3J0IHBvcnQ7CisJY2hhciAqcGF0aDsKKwljaGFyICp1c2VybmFtZTsKKwljaGFyICpwYXNzd29yZDsKK307CisKKyNkZWZpbmUgQ1JFREVOVElBTF9JTklUIHsgTlVMTCwgTlVMTCwgMCwgTlVMTCwgTlVMTCwgTlVMTCB9CisKK3R5cGVkZWYgaW50ICgqY3JlZGVudGlhbF9vcF9jYikoc3RydWN0IGNyZWRlbnRpYWwgKik7CisKK3N0cnVjdCBjcmVkZW50aWFsX29wZXJhdGlvbiB7CisJY2hhciAqbmFtZTsKKwljcmVkZW50aWFsX29wX2NiIG9wOworfTsKKworI2RlZmluZSBDUkVERU5USUFMX09QX0VORCB7IE5VTEwsIE5VTEwgfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBHTk9NRSBLZXlyaW5nIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBjcmVhdGUgYSBzcGVjaWFsIGtleXJpbmcgb3B0aW9uIHN0cmluZywgaWYgcGF0aCBpcyBnaXZlbiAqLworc3RhdGljIGNoYXIgKmtleXJpbmdfb2JqZWN0KHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWlmICghYy0+cGF0aCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoYy0+cG9ydCkKKwkJcmV0dXJuIGdfc3RyZHVwX3ByaW50ZigiJXM6JWhkLyVzIiwgYy0+aG9zdCwgYy0+cG9ydCwgYy0+cGF0aCk7CisKKwlyZXR1cm4gZ19zdHJkdXBfcHJpbnRmKCIlcy8lcyIsIGMtPmhvc3QsIGMtPnBhdGgpOworfQorCitzdGF0aWMgaW50IGtleXJpbmdfZ2V0KHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWNoYXIgKm9iamVjdCA9IE5VTEw7CisJR0xpc3QgKmVudHJpZXM7CisJR25vbWVLZXlyaW5nTmV0d29ya1Bhc3N3b3JkRGF0YSAqcGFzc3dvcmRfZGF0YTsKKwlHbm9tZUtleXJpbmdSZXN1bHQgcmVzdWx0OworCisJaWYgKCFjLT5wcm90b2NvbCB8fCAhKGMtPmhvc3QgfHwgYy0+cGF0aCkpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwlvYmplY3QgPSBrZXlyaW5nX29iamVjdChjKTsKKworCXJlc3VsdCA9IGdub21lX2tleXJpbmdfZmluZF9uZXR3b3JrX3Bhc3N3b3JkX3N5bmMoCisJCQkJYy0+dXNlcm5hbWUsCisJCQkJTlVMTCAvKiBkb21haW4gKi8sCisJCQkJYy0+aG9zdCwKKwkJCQlvYmplY3QsCisJCQkJYy0+cHJvdG9jb2wsCisJCQkJTlVMTCAvKiBhdXRodHlwZSAqLywKKwkJCQljLT5wb3J0LAorCQkJCSZlbnRyaWVzKTsKKworCWdfZnJlZShvYmplY3QpOworCisJaWYgKHJlc3VsdCA9PSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9OT19NQVRDSCkKKwkJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKworCWlmIChyZXN1bHQgPT0gR05PTUVfS0VZUklOR19SRVNVTFRfQ0FOQ0VMTEVEKQorCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCisJaWYgKHJlc3VsdCAhPSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9PSykgeworCQlnX2NyaXRpY2FsKCIlcyIsIGdub21lX2tleXJpbmdfcmVzdWx0X3RvX21lc3NhZ2UocmVzdWx0KSk7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJLyogcGljayB0aGUgZmlyc3Qgb25lIGZyb20gdGhlIGxpc3QgKi8KKwlwYXNzd29yZF9kYXRhID0gKEdub21lS2V5cmluZ05ldHdvcmtQYXNzd29yZERhdGEgKillbnRyaWVzLT5kYXRhOworCisJZ25vbWVfa2V5cmluZ19tZW1vcnlfZnJlZShjLT5wYXNzd29yZCk7CisJYy0+cGFzc3dvcmQgPSBnbm9tZV9rZXlyaW5nX21lbW9yeV9zdHJkdXAocGFzc3dvcmRfZGF0YS0+cGFzc3dvcmQpOworCisJaWYgKCFjLT51c2VybmFtZSkKKwkJYy0+dXNlcm5hbWUgPSBnX3N0cmR1cChwYXNzd29yZF9kYXRhLT51c2VyKTsKKworCWdub21lX2tleXJpbmdfbmV0d29ya19wYXNzd29yZF9saXN0X2ZyZWUoZW50cmllcyk7CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCisKK3N0YXRpYyBpbnQga2V5cmluZ19zdG9yZShzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlndWludDMyIGl0ZW1faWQ7CisJY2hhciAqb2JqZWN0ID0gTlVMTDsKKwlHbm9tZUtleXJpbmdSZXN1bHQgcmVzdWx0OworCisJLyoKKwkgKiBTYW5pdHkgY2hlY2sgdGhhdCB3aGF0IHdlIGFyZSBzdG9yaW5nIGlzIGFjdHVhbGx5IHNlbnNpYmxlLgorCSAqIEluIHBhcnRpY3VsYXIsIHdlIGNhbid0IG1ha2UgYSBVUkwgd2l0aG91dCBhIHByb3RvY29sIGZpZWxkLgorCSAqIFdpdGhvdXQgZWl0aGVyIGEgaG9zdCBvciBwYXRobmFtZSAoZGVwZW5kaW5nIG9uIHRoZSBzY2hlbWUpLAorCSAqIHdlIGhhdmUgbm8gcHJpbWFyeSBrZXkuIEFuZCB3aXRob3V0IGEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLAorCSAqIHdlIGFyZSBub3QgYWN0dWFsbHkgc3RvcmluZyBhIGNyZWRlbnRpYWwuCisJICovCisJaWYgKCFjLT5wcm90b2NvbCB8fCAhKGMtPmhvc3QgfHwgYy0+cGF0aCkgfHwKKwkgICAgIWMtPnVzZXJuYW1lIHx8ICFjLT5wYXNzd29yZCkKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworCW9iamVjdCA9IGtleXJpbmdfb2JqZWN0KGMpOworCisJcmVzdWx0ID0gZ25vbWVfa2V5cmluZ19zZXRfbmV0d29ya19wYXNzd29yZF9zeW5jKAorCQkJCUdOT01FX0tFWVJJTkdfREVGQVVMVCwKKwkJCQljLT51c2VybmFtZSwKKwkJCQlOVUxMIC8qIGRvbWFpbiAqLywKKwkJCQljLT5ob3N0LAorCQkJCW9iamVjdCwKKwkJCQljLT5wcm90b2NvbCwKKwkJCQlOVUxMIC8qIGF1dGh0eXBlICovLAorCQkJCWMtPnBvcnQsCisJCQkJYy0+cGFzc3dvcmQsCisJCQkJJml0ZW1faWQpOworCisJZ19mcmVlKG9iamVjdCk7CisKKwlpZiAocmVzdWx0ICE9IEdOT01FX0tFWVJJTkdfUkVTVUxUX09LICYmCisJICAgIHJlc3VsdCAhPSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9DQU5DRUxMRUQpIHsKKwkJZ19jcml0aWNhbCgiJXMiLCBnbm9tZV9rZXlyaW5nX3Jlc3VsdF90b19tZXNzYWdlKHJlc3VsdCkpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQga2V5cmluZ19lcmFzZShzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwljaGFyICpvYmplY3QgPSBOVUxMOworCUdMaXN0ICplbnRyaWVzOworCUdub21lS2V5cmluZ05ldHdvcmtQYXNzd29yZERhdGEgKnBhc3N3b3JkX2RhdGE7CisJR25vbWVLZXlyaW5nUmVzdWx0IHJlc3VsdDsKKworCS8qCisJICogU2FuaXR5IGNoZWNrIHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBzb21ldGhpbmcgdG8gbWF0Y2gKKwkgKiBhZ2FpbnN0LiBUaGUgaW5wdXQgd2UgZ2V0IGlzIGEgcmVzdHJpY3RpdmUgcGF0dGVybiwKKwkgKiBzbyB0ZWNobmljYWxseSBhIGJsYW5rIGNyZWRlbnRpYWwgbWVhbnMgImVyYXNlIGV2ZXJ5dGhpbmciLgorCSAqIEJ1dCBpdCBpcyB0b28gZWFzeSB0byBhY2NpZGVudGFsbHkgc2VuZCB0aGlzLCBzaW5jZSBpdCBpcyBlcXVpdmFsZW50CisJICogdG8gZW1wdHkgaW5wdXQuIFNvIGV4cGxpY2l0bHkgZGlzYWxsb3cgaXQsIGFuZCByZXF1aXJlIHRoYXQgdGhlCisJICogcGF0dGVybiBoYXZlIHNvbWUgYWN0dWFsIGNvbnRlbnQgdG8gbWF0Y2guCisJICovCisJaWYgKCFjLT5wcm90b2NvbCAmJiAhYy0+aG9zdCAmJiAhYy0+cGF0aCAmJiAhYy0+dXNlcm5hbWUpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwlvYmplY3QgPSBrZXlyaW5nX29iamVjdChjKTsKKworCXJlc3VsdCA9IGdub21lX2tleXJpbmdfZmluZF9uZXR3b3JrX3Bhc3N3b3JkX3N5bmMoCisJCQkJYy0+dXNlcm5hbWUsCisJCQkJTlVMTCAvKiBkb21haW4gKi8sCisJCQkJYy0+aG9zdCwKKwkJCQlvYmplY3QsCisJCQkJYy0+cHJvdG9jb2wsCisJCQkJTlVMTCAvKiBhdXRodHlwZSAqLywKKwkJCQljLT5wb3J0LAorCQkJCSZlbnRyaWVzKTsKKworCWdfZnJlZShvYmplY3QpOworCisJaWYgKHJlc3VsdCA9PSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9OT19NQVRDSCkKKwkJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKworCWlmIChyZXN1bHQgPT0gR05PTUVfS0VZUklOR19SRVNVTFRfQ0FOQ0VMTEVEKQorCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCisJaWYgKHJlc3VsdCAhPSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9PSykgeworCQlnX2NyaXRpY2FsKCIlcyIsIGdub21lX2tleXJpbmdfcmVzdWx0X3RvX21lc3NhZ2UocmVzdWx0KSk7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJLyogcGljayB0aGUgZmlyc3Qgb25lIGZyb20gdGhlIGxpc3QgKGRlbGV0ZSBhbGwgbWF0Y2hlcz8pICovCisJcGFzc3dvcmRfZGF0YSA9IChHbm9tZUtleXJpbmdOZXR3b3JrUGFzc3dvcmREYXRhICopZW50cmllcy0+ZGF0YTsKKworCXJlc3VsdCA9IGdub21lX2tleXJpbmdfaXRlbV9kZWxldGVfc3luYygKKwkJcGFzc3dvcmRfZGF0YS0+a2V5cmluZywgcGFzc3dvcmRfZGF0YS0+aXRlbV9pZCk7CisKKwlnbm9tZV9rZXlyaW5nX25ldHdvcmtfcGFzc3dvcmRfbGlzdF9mcmVlKGVudHJpZXMpOworCisJaWYgKHJlc3VsdCAhPSBHTk9NRV9LRVlSSU5HX1JFU1VMVF9PSykgeworCQlnX2NyaXRpY2FsKCIlcyIsIGdub21lX2tleXJpbmdfcmVzdWx0X3RvX21lc3NhZ2UocmVzdWx0KSk7CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworLyoKKyAqIFRhYmxlIHdpdGggaGVscGVyIG9wZXJhdGlvbiBjYWxsYmFja3MsIHVzZWQgYnkgZ2VuZXJpYworICogY3JlZGVudGlhbCBoZWxwZXIgbWFpbiBmdW5jdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBjcmVkZW50aWFsX29wZXJhdGlvbiBjb25zdCBjcmVkZW50aWFsX2hlbHBlcl9vcHNbXSA9IHsKKwl7ICJnZXQiLCAgIGtleXJpbmdfZ2V0IH0sCisJeyAic3RvcmUiLCBrZXlyaW5nX3N0b3JlIH0sCisJeyAiZXJhc2UiLCBrZXlyaW5nX2VyYXNlIH0sCisJQ1JFREVOVElBTF9PUF9FTkQKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBjcmVkZW50aWFsIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9pbml0KHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9jbGVhcihzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlnX2ZyZWUoYy0+cHJvdG9jb2wpOworCWdfZnJlZShjLT5ob3N0KTsKKwlnX2ZyZWUoYy0+cGF0aCk7CisJZ19mcmVlKGMtPnVzZXJuYW1lKTsKKwlnbm9tZV9rZXlyaW5nX21lbW9yeV9mcmVlKGMtPnBhc3N3b3JkKTsKKworCWNyZWRlbnRpYWxfaW5pdChjKTsKK30KKworc3RhdGljIGludCBjcmVkZW50aWFsX3JlYWQoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJY2hhciAqYnVmOworCXNpemVfdCBsaW5lX2xlbjsKKwljaGFyICprZXk7CisJY2hhciAqdmFsdWU7CisKKwlrZXkgPSBidWYgPSBnbm9tZV9rZXlyaW5nX21lbW9yeV9hbGxvYygxMDI0KTsKKworCXdoaWxlIChmZ2V0cyhidWYsIDEwMjQsIHN0ZGluKSkgeworCQlsaW5lX2xlbiA9IHN0cmxlbihidWYpOworCisJCWlmIChsaW5lX2xlbiAmJiBidWZbbGluZV9sZW4tMV0gPT0gJ1xuJykKKwkJCWJ1ZlstLWxpbmVfbGVuXSA9ICdcMCc7CisKKwkJaWYgKCFsaW5lX2xlbikKKwkJCWJyZWFrOworCisJCXZhbHVlID0gc3RyY2hyKGJ1ZiwgJz0nKTsKKwkJaWYgKCF2YWx1ZSkgeworCQkJZ193YXJuaW5nKCJpbnZhbGlkIGNyZWRlbnRpYWwgbGluZTogJXMiLCBrZXkpOworCQkJZ25vbWVfa2V5cmluZ19tZW1vcnlfZnJlZShidWYpOworCQkJcmV0dXJuIC0xOworCQl9CisJCSp2YWx1ZSsrID0gJ1wwJzsKKworCQlpZiAoIXN0cmNtcChrZXksICJwcm90b2NvbCIpKSB7CisJCQlnX2ZyZWUoYy0+cHJvdG9jb2wpOworCQkJYy0+cHJvdG9jb2wgPSBnX3N0cmR1cCh2YWx1ZSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJob3N0IikpIHsKKwkJCWdfZnJlZShjLT5ob3N0KTsKKwkJCWMtPmhvc3QgPSBnX3N0cmR1cCh2YWx1ZSk7CisJCQl2YWx1ZSA9IHN0cnJjaHIoYy0+aG9zdCwgJzonKTsKKwkJCWlmICh2YWx1ZSkgeworCQkJCSp2YWx1ZSsrID0gJ1wwJzsKKwkJCQljLT5wb3J0ID0gYXRvaSh2YWx1ZSk7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJwYXRoIikpIHsKKwkJCWdfZnJlZShjLT5wYXRoKTsKKwkJCWMtPnBhdGggPSBnX3N0cmR1cCh2YWx1ZSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJ1c2VybmFtZSIpKSB7CisJCQlnX2ZyZWUoYy0+dXNlcm5hbWUpOworCQkJYy0+dXNlcm5hbWUgPSBnX3N0cmR1cCh2YWx1ZSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChrZXksICJwYXNzd29yZCIpKSB7CisJCQlnbm9tZV9rZXlyaW5nX21lbW9yeV9mcmVlKGMtPnBhc3N3b3JkKTsKKwkJCWMtPnBhc3N3b3JkID0gZ25vbWVfa2V5cmluZ19tZW1vcnlfc3RyZHVwKHZhbHVlKTsKKwkJCXdoaWxlICgqdmFsdWUpCisJCQkJKnZhbHVlKysgPSAnXDAnOworCQl9CisJCS8qCisJCSAqIElnbm9yZSBvdGhlciBsaW5lczsgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZXkgbWVhbiwgYnV0CisJCSAqIHRoaXMgZnV0dXJlLXByb29mcyB1cyB3aGVuIGxhdGVyIHZlcnNpb25zIG9mIGdpdCBkbworCQkgKiBsZWFybiBuZXcgbGluZXMsIGFuZCB0aGUgaGVscGVycyBhcmUgdXBkYXRlZCB0byBtYXRjaC4KKwkJICovCisJfQorCisJZ25vbWVfa2V5cmluZ19tZW1vcnlfZnJlZShidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWRlbnRpYWxfd3JpdGVfaXRlbShGSUxFICpmcCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm47CisJZnByaW50ZihmcCwgIiVzPSVzXG4iLCBrZXksIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF93cml0ZShjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwkvKiBvbmx5IHdyaXRlIHVzZXJuYW1lL3Bhc3N3b3JkLCBpZiBzZXQgKi8KKwljcmVkZW50aWFsX3dyaXRlX2l0ZW0oc3Rkb3V0LCAidXNlcm5hbWUiLCBjLT51c2VybmFtZSk7CisJY3JlZGVudGlhbF93cml0ZV9pdGVtKHN0ZG91dCwgInBhc3N3b3JkIiwgYy0+cGFzc3dvcmQpOworfQorCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBjcmVkZW50aWFsX29wZXJhdGlvbiBjb25zdCAqdHJ5X29wID0gY3JlZGVudGlhbF9oZWxwZXJfb3BzOworCWNvbnN0IGNoYXIgKmJhc2VuYW1lID0gc3RycmNocihuYW1lLCAnLycpOworCisJYmFzZW5hbWUgPSAoYmFzZW5hbWUpID8gYmFzZW5hbWUgKyAxIDogbmFtZTsKKwlmcHJpbnRmKHN0ZGVyciwgInVzYWdlOiAlcyA8IiwgYmFzZW5hbWUpOworCXdoaWxlICh0cnlfb3AtPm5hbWUpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsICh0cnlfb3ArKyktPm5hbWUpOworCQlpZiAodHJ5X29wLT5uYW1lKQorCQkJZnByaW50ZihzdGRlcnIsICIlcyIsICJ8Iik7CisJfQorCWZwcmludGYoc3RkZXJyLCAiJXMiLCAiPlxuIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IHJldCA9IEVYSVRfU1VDQ0VTUzsKKworCXN0cnVjdCBjcmVkZW50aWFsX29wZXJhdGlvbiBjb25zdCAqdHJ5X29wID0gY3JlZGVudGlhbF9oZWxwZXJfb3BzOworCXN0cnVjdCBjcmVkZW50aWFsIGNyZWQgPSBDUkVERU5USUFMX0lOSVQ7CisKKwlpZiAoIWFyZ3ZbMV0pIHsKKwkJdXNhZ2UoYXJndlswXSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlnX3NldF9hcHBsaWNhdGlvbl9uYW1lKCJHaXQgQ3JlZGVudGlhbCBIZWxwZXIiKTsKKworCS8qIGxvb2t1cCBvcGVyYXRpb24gY2FsbGJhY2sgKi8KKwl3aGlsZSAodHJ5X29wLT5uYW1lICYmIHN0cmNtcChhcmd2WzFdLCB0cnlfb3AtPm5hbWUpKQorCQl0cnlfb3ArKzsKKworCS8qIHVuc3VwcG9ydGVkIG9wZXJhdGlvbiBnaXZlbiAtLSBpZ25vcmUgc2lsZW50bHkgKi8KKwlpZiAoIXRyeV9vcC0+bmFtZSB8fCAhdHJ5X29wLT5vcCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBjcmVkZW50aWFsX3JlYWQoJmNyZWQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogcGVyZm9ybSBjcmVkZW50aWFsIG9wZXJhdGlvbiAqLworCXJldCA9ICgqdHJ5X29wLT5vcCkoJmNyZWQpOworCisJY3JlZGVudGlhbF93cml0ZSgmY3JlZCk7CisKK291dDoKKwljcmVkZW50aWFsX2NsZWFyKCZjcmVkKTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL01ha2VmaWxlIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYjc2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACit0ZXN0OgorCS4vdGVzdC5wbAorCit0ZXN0dmVyYm9zZToKKwkuL3Rlc3QucGwgLWQgLXYKZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy9naXQtY3JlZGVudGlhbC1uZXRyYyBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy9naXQtY3JlZGVudGlhbC1uZXRyYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNTcxYTdiCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL2dpdC1jcmVkZW50aWFsLW5ldHJjCkBAIC0wLDAgKzEsNDIzIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIEdldG9wdDo6TG9uZzsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKworbXkgJFZFUlNJT04gPSAiMC4xIjsKKworbXkgJW9wdGlvbnMgPSAoCisJICAgICAgIGhlbHAgPT4gMCwKKwkgICAgICAgZGVidWcgPT4gMCwKKwkgICAgICAgdmVyYm9zZSA9PiAwLAorCSAgICAgICBpbnNlY3VyZSA9PiAwLAorCSAgICAgICBmaWxlID0+IFtdLAorCisJICAgICAgICMgaWRlbnRpY2FsIHRva2VuIG1hcHMsIGUuZy4gaG9zdCAtPiBob3N0LCB3aWxsIGJlIGluc2VydGVkIGxhdGVyCisJICAgICAgIHRtYXAgPT4geworCQkJcG9ydCA9PiAncHJvdG9jb2wnLAorCQkJbWFjaGluZSA9PiAnaG9zdCcsCisJCQlwYXRoID0+ICdwYXRoJywKKwkJCWxvZ2luID0+ICd1c2VybmFtZScsCisJCQl1c2VyID0+ICd1c2VybmFtZScsCisJCQlwYXNzd29yZCA9PiAncGFzc3dvcmQnLAorCQkgICAgICAgfQorCSAgICAgICk7CisKKyMgTWFwIGVhY2ggY3JlZGVudGlhbCBwcm90b2NvbCB0b2tlbiB0byBpdHNlbGYgb24gdGhlIG5ldHJjIHNpZGUuCitmb3JlYWNoICh2YWx1ZXMgJXskb3B0aW9uc3t0bWFwfX0pIHsKKwkkb3B0aW9uc3t0bWFwfS0+eyRffSA9ICRfOworfQorCisjIE5vdywgJG9wdGlvbnN7dG1hcH0gaGFzIGEgbWFwcGluZyBmcm9tIHRoZSBuZXRyYyBmb3JtYXQgdG8gdGhlIEdpdCBjcmVkZW50aWFsCisjIGhlbHBlciBwcm90b2NvbC4KKworIyBOZXh0LCB3ZSBidWlsZCB0aGUgcmV2ZXJzZSB0b2tlbiBtYXAuCisKKyMgV2hlbiAkcm1hcHtmb299IGNvbnRhaW5zICdiYXInLCB0aGF0IG1lYW5zIHRoYXQgd2hhdCB0aGUgR2l0IGNyZWRlbnRpYWwgaGVscGVyCisjIHByb3RvY29sIGNhbGxzICdiYXInIGlzIGZvdW5kIGFzICdmb28nIGluIHRoZSBuZXRyYy9hdXRoaW5mbyBmaWxlLiAgS2V5cyBpbgorIyAlcm1hcCBhcmUgd2hhdCB3ZSBleHBlY3QgdG8gcmVhZCBmcm9tIHRoZSBuZXRyYy9hdXRoaW5mbyBmaWxlLgorCitteSAlcm1hcDsKK2ZvcmVhY2ggbXkgJGsgKGtleXMgJXskb3B0aW9uc3t0bWFwfX0pIHsKKwlwdXNoIEB7JHJtYXB7JG9wdGlvbnN7dG1hcH0tPnska319fSwgJGs7Cit9CisKK0dldG9wdDo6TG9uZzo6Q29uZmlndXJlKCJidW5kbGluZyIpOworCisjIFRPRE86IG1heWJlIGFsbG93IHRoZSB0b2tlbiBtYXAgJG9wdGlvbnN7dG1hcH0gdG8gYmUgY29uZmlndXJhYmxlLgorR2V0T3B0aW9ucyhcJW9wdGlvbnMsCisgICAgICAgICAgICJoZWxwfGgiLAorICAgICAgICAgICAiZGVidWd8ZCIsCisgICAgICAgICAgICJpbnNlY3VyZXxrIiwKKyAgICAgICAgICAgInZlcmJvc2V8diIsCisgICAgICAgICAgICJmaWxlfGY9c0AiLAorICAgICAgICAgICk7CisKK2lmICgkb3B0aW9uc3toZWxwfSkgeworCW15ICRzaG9ydG5hbWUgPSBiYXNlbmFtZSgkMCk7CisJJHNob3J0bmFtZSA9fiBzL2dpdC1jcmVkZW50aWFsLS8vOworCisJcHJpbnQgPDxFT0hJUFBVUzsKKworJDAgWy1mIEFVVEhGSUxFMV0gWy1mIEFVVEhGSUxFTl0gWy1kXSBbLXZdIFsta10gZ2V0CisKK1ZlcnNpb24gJFZFUlNJT04gYnkgdHp6XEBsaWZlbG9ncy5jb20uICBMaWNlbnNlOiBCU0QuCisKK09wdGlvbnM6CisKKyAgLWZ8LS1maWxlIEFVVEhGSUxFIDogc3BlY2lmeSBuZXRyYy1zdHlsZSBmaWxlcy4gIEZpbGVzIHdpdGggdGhlIC5ncGcgZXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgZGVjcnlwdGVkIGJ5IEdQRyBiZWZvcmUgcGFyc2luZy4gIE11bHRpcGxlIC1mCisgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBhcmUgT0suICBUaGV5IGFyZSBwcm9jZXNzZWQgaW4gb3JkZXIsIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgbWF0Y2hpbmcgZW50cnkgZm91bmQgaXMgcmV0dXJuZWQgdmlhIHRoZSBjcmVkZW50aWFsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlciBwcm90b2NvbCAoc2VlIGJlbG93KS4KKworICAgICAgICAgICAgICAgICAgICAgICBXaGVuIG5vIC1mIG9wdGlvbiBpcyBnaXZlbiwgLmF1dGhpbmZvLmdwZywgLm5ldHJjLmdwZywKKwkJICAgICAgIC5hdXRoaW5mbywgYW5kIC5uZXRyYyBmaWxlcyBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IGFyZSB1c2VkCisJCSAgICAgICBpbiB0aGlzIG9yZGVyLgorCisgIC1rfC0taW5zZWN1cmUgICAgICA6IGlnbm9yZSBiYWQgZmlsZSBvd25lcnNoaXAgb3IgcGVybWlzc2lvbnMKKworICAtZHwtLWRlYnVnICAgICAgICAgOiB0dXJuIG9uIGRlYnVnZ2luZyAoZGV2ZWxvcGVyIGluZm8pCisKKyAgLXZ8LS12ZXJib3NlICAgICAgIDogYmUgbW9yZSB2ZXJib3NlIChzaG93IGZpbGVzIGFuZCBpbmZvcm1hdGlvbiBmb3VuZCkKKworVG8gZW5hYmxlIHRoaXMgY3JlZGVudGlhbCBoZWxwZXI6CisKKyAgZ2l0IGNvbmZpZyBjcmVkZW50aWFsLmhlbHBlciAnJHNob3J0bmFtZSAtZiBBVVRIRklMRTEgLWYgQVVUSEZJTEUyJworCisoTm90ZSB0aGF0IEdpdCB3aWxsIHByZXBlbmQgImdpdC1jcmVkZW50aWFsLSIgdG8gdGhlIGhlbHBlciBuYW1lIGFuZCBsb29rIGZvciBpdAoraW4gdGhlIHBhdGguKQorCisuLi5hbmQgaWYgeW91IHdhbnQgbG90cyBvZiBkZWJ1Z2dpbmcgaW5mbzoKKworICBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICckc2hvcnRuYW1lIC1mIEFVVEhGSUxFIC1kJworCisuLi5vciB0byBzZWUgdGhlIGZpbGVzIG9wZW5lZCBhbmQgZGF0YSBmb3VuZDoKKworICBnaXQgY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICckc2hvcnRuYW1lIC1mIEFVVEhGSUxFIC12JworCitPbmx5ICJnZXQiIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoaXMgY3JlZGVudGlhbCBoZWxwZXIuICBJdCBvcGVucyBldmVyeSBBVVRIRklMRQorYW5kIGxvb2tzIGZvciB0aGUgZmlyc3QgZW50cnkgdGhhdCBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQgc2VhcmNoIGNyaXRlcmlhOgorCisgJ3BvcnR8cHJvdG9jb2wnOgorICAgVGhlIHByb3RvY29sIHRoYXQgd2lsbCBiZSB1c2VkIChlLmcuLCBodHRwcykuIChwcm90b2NvbD1YKQorCisgJ21hY2hpbmV8aG9zdCc6CisgICBUaGUgcmVtb3RlIGhvc3RuYW1lIGZvciBhIG5ldHdvcmsgY3JlZGVudGlhbC4gKGhvc3Q9WCkKKworICdwYXRoJzoKKyAgIFRoZSBwYXRoIHdpdGggd2hpY2ggdGhlIGNyZWRlbnRpYWwgd2lsbCBiZSB1c2VkLiAocGF0aD1YKQorCisgJ2xvZ2lufHVzZXJ8dXNlcm5hbWUnOgorICAgVGhlIGNyZWRlbnRpYWzigJlzIHVzZXJuYW1lLCBpZiB3ZSBhbHJlYWR5IGhhdmUgb25lLiAodXNlcm5hbWU9WCkKKworVGh1cywgd2hlbiB3ZSBnZXQgdGhpcyBxdWVyeSBvbiBTVERJTjoKKworaG9zdD1naXRodWIuY29tCitwcm90b2NvbD1odHRwcwordXNlcm5hbWU9dHp6CisKK3RoaXMgY3JlZGVudGlhbCBoZWxwZXIgd2lsbCBsb29rIGZvciB0aGUgZmlyc3QgZW50cnkgaW4gZXZlcnkgQVVUSEZJTEUgdGhhdAorbWF0Y2hlcworCittYWNoaW5lIGdpdGh1Yi5jb20gcG9ydCBodHRwcyBsb2dpbiB0enoKKworT1IKKworbWFjaGluZSBnaXRodWIuY29tIHByb3RvY29sIGh0dHBzIGxvZ2luIHR6egorCitPUi4uLiBldGMuIGFjY2VwdGFibGUgdG9rZW5zIGFzIGxpc3RlZCBhYm92ZS4gIEFueSB1bmtub3duIHRva2VucyBhcmUKK3NpbXBseSBpZ25vcmVkLgorCitUaGVuLCB0aGUgaGVscGVyIHdpbGwgcHJpbnQgb3V0IHdoYXRldmVyIHRva2VucyBpdCBnb3QgZnJvbSB0aGUgZW50cnksIGluY2x1ZGluZworInBhc3N3b3JkIiB0b2tlbnMsIG1hcHBpbmcgYmFjayB0byBHaXQncyBoZWxwZXIgcHJvdG9jb2w7IGUuZy4gInBvcnQiIGlzIG1hcHBlZAorYmFjayB0byAicHJvdG9jb2wiLiAgQW55IHJlZHVuZGFudCBlbnRyeSB0b2tlbnMgKHBhcnQgb2YgdGhlIG9yaWdpbmFsIHF1ZXJ5KSBhcmUKK3NraXBwZWQuCisKK0FnYWluLCBub3RlIHRoYXQgb25seSB0aGUgZmlyc3QgbWF0Y2hpbmcgZW50cnkgZnJvbSBhbGwgdGhlIEFVVEhGSUxFcywgcHJvY2Vzc2VkCitpbiB0aGUgc2VxdWVuY2UgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgaXMgdXNlZC4KKworTmV0cmMvYXV0aGluZm8gdG9rZW5zIGNhbiBiZSBxdW90ZWQgYXMgJ1NUUklORycgb3IgIlNUUklORyIuCisKK05vIGNhY2hpbmcgaXMgcGVyZm9ybWVkIGJ5IHRoaXMgY3JlZGVudGlhbCBoZWxwZXIuCisKK0VPSElQUFVTCisKKwlleGl0IDA7Cit9CisKK215ICRtb2RlID0gc2hpZnQgQEFSR1Y7CisKKyMgQ3JlZGVudGlhbHMgbXVzdCBnZXQgYSBwYXJhbWV0ZXIsIHNvIGRpZSBpZiBpdCdzIG1pc3NpbmcuCitkaWUgIlN5bnRheDogJDAgWy1mIEFVVEhGSUxFMV0gWy1mIEFVVEhGSUxFTl0gWy1kXSBnZXQiIHVubGVzcyBkZWZpbmVkICRtb2RlOworCisjIE9ubHkgc3VwcG9ydCAnZ2V0JyBtb2RlOyB3aXRoIGFueSBvdGhlciB1bnN1cHBvcnRlZCBvbmVzIHdlIGp1c3QgZXhpdC4KK2V4aXQgMCB1bmxlc3MgJG1vZGUgZXEgJ2dldCc7CisKK215ICRmaWxlcyA9ICRvcHRpb25ze2ZpbGV9OworCisjIGlmIG5vIGZpbGVzIHdlcmUgZ2l2ZW4sIHVzZSBhIHByZWRlZmluZWQgbGlzdC4KKyMgbm90ZSB0aGF0IC5ncGcgZmlsZXMgY29tZSBmaXJzdAordW5sZXNzIChzY2FsYXIgQCRmaWxlcykgeworCW15IEBjYW5kaWRhdGVzID0gcXdbCisJCQkJICAgfi8uYXV0aGluZm8uZ3BnCisJCQkJICAgfi8ubmV0cmMuZ3BnCisJCQkJICAgfi8uYXV0aGluZm8KKwkJCQkgICB+Ly5uZXRyYworCQkJICBdOworCisJJGZpbGVzID0gJG9wdGlvbnN7ZmlsZX0gPSBbIG1hcCB7IGdsb2IgJF8gfSBAY2FuZGlkYXRlcyBdOworfQorCitteSAkcXVlcnkgPSByZWFkX2NyZWRlbnRpYWxfZGF0YV9mcm9tX3N0ZGluKCk7CisKK0ZJTEU6Citmb3JlYWNoIG15ICRmaWxlIChAJGZpbGVzKSB7CisJbXkgJGdwZ21vZGUgPSAkZmlsZSA9fiBtL1wuZ3BnJC87CisJdW5sZXNzICgtciAkZmlsZSkgeworCQlsb2dfdmVyYm9zZSgiVW5hYmxlIHRvIHJlYWQgJGZpbGU7IHNraXBwaW5nIGl0Iik7CisJCW5leHQgRklMRTsKKwl9CisKKwkjIHRoZSBmb2xsb3dpbmcgY2hlY2sgaXMgY29waWVkIGZyb20gTmV0OjpOZXRyYywgZm9yIG5vbi1HUEcgZmlsZXMKKwkjIE9TLzIgYW5kIFdpbjMyIGRvIG5vdCBoYW5kbGUgc3RhdCBpbiBhIHdheSBjb21wYXRpYmxlIHdpdGggdGhpcyBjaGVjayA6LSgKKwl1bmxlc3MgKCRncGdtb2RlIHx8ICRvcHRpb25ze2luc2VjdXJlfSB8fAorCQkkXk8gZXEgJ29zMicKKwkJfHwgJF5PIGVxICdNU1dpbjMyJworCQl8fCAkXk8gZXEgJ01hY09TJworCQl8fCAkXk8gPX4gL15jeWd3aW4vKSB7CisJCW15IEBzdGF0ID0gc3RhdCgkZmlsZSk7CisKKwkJaWYgKEBzdGF0KSB7CisJCQlpZiAoJHN0YXRbMl0gJiAwNzcpIHsKKwkJCQlsb2dfdmVyYm9zZSgiSW5zZWN1cmUgJGZpbGUgKG1vZGU9JTA0byk7IHNraXBwaW5nIGl0IiwKKwkJCQkJICAgICRzdGF0WzJdICYgMDc3NzcpOworCQkJCW5leHQgRklMRTsKKwkJCX0KKworCQkJaWYgKCRzdGF0WzRdICE9ICQ8KSB7CisJCQkJbG9nX3ZlcmJvc2UoIk5vdCBvd25lciBvZiAkZmlsZTsgc2tpcHBpbmcgaXQiKTsKKwkJCQluZXh0IEZJTEU7CisJCQl9CisJCX0KKwl9CisKKwlteSBAZW50cmllcyA9IGxvYWRfbmV0cmMoJGZpbGUsICRncGdtb2RlKTsKKworCXVubGVzcyAoc2NhbGFyIEBlbnRyaWVzKSB7CisJCWlmICgkISkgeworCQkJbG9nX3ZlcmJvc2UoIlVuYWJsZSB0byBvcGVuICRmaWxlOiAkISIpOworCQl9IGVsc2UgeworCQkJbG9nX3ZlcmJvc2UoIk5vIG5ldHJjIGVudHJpZXMgZm91bmQgaW4gJGZpbGUiKTsKKwkJfQorCisJCW5leHQgRklMRTsKKwl9CisKKwlteSAkZW50cnkgPSBmaW5kX25ldHJjX2VudHJ5KCRxdWVyeSwgQGVudHJpZXMpOworCWlmICgkZW50cnkpIHsKKwkJcHJpbnRfY3JlZGVudGlhbF9kYXRhKCRlbnRyeSwgJHF1ZXJ5KTsKKwkJIyB3ZSdyZSBkb25lIQorCQlsYXN0IEZJTEU7CisJfQorfQorCitleGl0IDA7CisKK3N1YiBsb2FkX25ldHJjIHsKKwlteSAkZmlsZSA9IHNoaWZ0IEBfOworCW15ICRncGdtb2RlID0gc2hpZnQgQF87CisKKwlteSAkaW87CisJaWYgKCRncGdtb2RlKSB7CisJCW15IEBjbWQgPSAocXcoZ3BnIC0tZGVjcnlwdCksICRmaWxlKTsKKwkJbG9nX3ZlcmJvc2UoIlVzaW5nIEdQRyB0byBvcGVuICRmaWxlOiBbQGNtZF0iKTsKKwkJb3BlbiAkaW8sICItfCIsIEBjbWQ7CisJfSBlbHNlIHsKKwkJbG9nX3ZlcmJvc2UoIk9wZW5pbmcgJGZpbGUuLi4iKTsKKwkJb3BlbiAkaW8sICc8JywgJGZpbGU7CisJfQorCisJIyBub3RoaW5nIHRvIGRvIGlmIHRoZSBvcGVuIGZhaWxlZCAod2UgbG9nIHRoZSBlcnJvciBsYXRlcikKKwlyZXR1cm4gdW5sZXNzICRpbzsKKworCSMgTmV0OjpOZXRyYyBkb2VzIHRoaXMsIGJ1dCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBtZXJnZWQgd2l0aCB0aGUgZmlsZQorCSMgZGV0ZWN0aW9uIGxvZ2ljLCBzbyB3ZSBoYXZlIHRvIGV4dHJhY3QganVzdCB0aGUgcGFydCB3ZSBuZWVkCisJbXkgQG5ldHJjX2VudHJpZXMgPSBuZXRfbmV0cmNfbG9hZGVyKCRpbyk7CisKKwkjIHRoZXNlIGVudHJpZXMgd2lsbCB1c2UgdGhlIGNyZWRlbnRpYWwgaGVscGVyIHByb3RvY29sIHRva2VuIG5hbWVzCisJbXkgQGVudHJpZXM7CisKKwlmb3JlYWNoIG15ICRuZW50cnkgKEBuZXRyY19lbnRyaWVzKSB7CisJCW15ICVlbnRyeTsKKwkJbXkgJG51bV9wb3J0OworCisJCWlmICghZGVmaW5lZCAkbmVudHJ5LT57bWFjaGluZX0pIHsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKGRlZmluZWQgJG5lbnRyeS0+e3BvcnR9ICYmICRuZW50cnktPntwb3J0fSA9fiBtL15cZCskLykgeworCQkJJG51bV9wb3J0ID0gJG5lbnRyeS0+e3BvcnR9OworCQkJZGVsZXRlICRuZW50cnktPntwb3J0fTsKKwkJfQorCisJCSMgY3JlYXRlIHRoZSBuZXcgZW50cnkgZm9yIHRoZSBjcmVkZW50aWFsIGhlbHBlciBwcm90b2NvbAorCQkkZW50cnl7JG9wdGlvbnN7dG1hcH0tPnskX319ID0gJG5lbnRyeS0+eyRffSBmb3JlYWNoIGtleXMgJSRuZW50cnk7CisKKwkJIyBmb3IgImhvc3QgWCBwb3J0IFkiIHdoZXJlIFkgaXMgYW4gaW50ZWdlciAoY2FwdHVyZWQgYnkKKwkJIyAkbnVtX3BvcnQgYWJvdmUpLCBzZXQgdGhlIGhvc3QgdG8gIlg6WSIKKwkJaWYgKGRlZmluZWQgJGVudHJ5e2hvc3R9ICYmIGRlZmluZWQgJG51bV9wb3J0KSB7CisJCQkkZW50cnl7aG9zdH0gPSBqb2luKCc6JywgJGVudHJ5e2hvc3R9LCAkbnVtX3BvcnQpOworCQl9CisKKwkJcHVzaCBAZW50cmllcywgXCVlbnRyeTsKKwl9CisKKwlyZXR1cm4gQGVudHJpZXM7Cit9CisKK3N1YiBuZXRfbmV0cmNfbG9hZGVyIHsKKwlteSAkZmggPSBzaGlmdCBAXzsKKwlteSBAZW50cmllczsKKwlteSAoJG1hY2gsICRtYWNkZWYsICR0b2ssIEB0b2spOworCisgICAgTElORToKKwl3aGlsZSAoPCRmaD4pIHsKKwkJdW5kZWYgJG1hY2RlZiBpZiAvXEFcblxaLzsKKworCQlpZiAoJG1hY2RlZikgeworCQkJbmV4dCBMSU5FOworCQl9CisKKwkJcy9eXHMqLy87CisJCWNob21wOworCisJCXdoaWxlIChsZW5ndGggJiYgcy9eKCIoKD86W14iXSt8XFwuKSopInwoKD86W15cXFxzXSt8XFwuKSopKVxzKi8vKSB7CisJCQkobXkgJHRvayA9ICQrKSA9fiBzL1xcKC4pLyQxL2c7CisJCQlwdXNoKEB0b2ssICR0b2spOworCQl9CisKKwkgICAgVE9LRU46CisJCXdoaWxlIChAdG9rKSB7CisJCQlpZiAoJHRva1swXSBlcSAiZGVmYXVsdCIpIHsKKwkJCQlzaGlmdChAdG9rKTsKKwkJCQkkbWFjaCA9IHsgbWFjaGluZSA9PiB1bmRlZiB9OworCQkJCW5leHQgVE9LRU47CisJCQl9CisKKwkJCSR0b2sgPSBzaGlmdChAdG9rKTsKKworCQkJaWYgKCR0b2sgZXEgIm1hY2hpbmUiKSB7CisJCQkJbXkgJGhvc3QgPSBzaGlmdCBAdG9rOworCQkJCSRtYWNoID0geyBtYWNoaW5lID0+ICRob3N0IH07CisJCQkJcHVzaCBAZW50cmllcywgJG1hY2g7CisJCQl9IGVsc2lmIChleGlzdHMgJG9wdGlvbnN7dG1hcH0tPnskdG9rfSkgeworCQkJCXVubGVzcyAoJG1hY2gpIHsKKwkJCQkJbG9nX2RlYnVnKCJTa2lwcGluZyB0b2tlbiAkdG9rIGJlY2F1c2Ugbm8gbWFjaGluZSB3YXMgZ2l2ZW4iKTsKKwkJCQkJbmV4dCBUT0tFTjsKKwkJCQl9CisKKwkJCQlteSAkdmFsdWUgPSBzaGlmdCBAdG9rOworCQkJCXVubGVzcyAoZGVmaW5lZCAkdmFsdWUpIHsKKwkJCQkJbG9nX2RlYnVnKCJUb2tlbiAkdG9rIGhhZCBubyB2YWx1ZSwgc2tpcHBpbmcgaXQuIik7CisJCQkJCW5leHQgVE9LRU47CisJCQkJfQorCisJCQkJIyBGb2xsb3dpbmcgbGluZSBhZGRlZCBieSBybWVycmVsbCB0byByZW1vdmUgJy8nIGVzY2FwZSBjaGFyIGluIC5uZXRyYworCQkJCSR2YWx1ZSA9fiBzL1wvXFwvXFwvZzsKKwkJCQkkbWFjaC0+eyR0b2t9ID0gJHZhbHVlOworCQkJfSBlbHNpZiAoJHRvayBlcSAibWFjZGVmIikgeyAjIHdlIGlnbm9yZSBtYWNyb3MKKwkJCQluZXh0IFRPS0VOIHVubGVzcyAkbWFjaDsKKwkJCQlteSAkdmFsdWUgPSBzaGlmdCBAdG9rOworCQkJCSRtYWNkZWYgPSAxOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIEBlbnRyaWVzOworfQorCitzdWIgcmVhZF9jcmVkZW50aWFsX2RhdGFfZnJvbV9zdGRpbiB7CisJIyB0aGUgcXVlcnk6IHN0YXJ0IHdpdGggZXZlcnkgdG9rZW4gd2l0aCBubyB2YWx1ZQorCW15ICVxID0gbWFwIHsgJF8gPT4gdW5kZWYgfSB2YWx1ZXMoJXskb3B0aW9uc3t0bWFwfX0pOworCisJd2hpbGUgKDxTVERJTj4pIHsKKwkJbmV4dCB1bmxlc3MgbS9eKFtePV0rKT0oLispLzsKKworCQlteSAoJHRva2VuLCAkdmFsdWUpID0gKCQxLCAkMik7CisJCWRpZSAiVW5rbm93biBzZWFyY2ggdG9rZW4gJHRva2VuIiB1bmxlc3MgZXhpc3RzICRxeyR0b2tlbn07CisJCSRxeyR0b2tlbn0gPSAkdmFsdWU7CisJCWxvZ19kZWJ1ZygiV2Ugd2VyZSBnaXZlbiBzZWFyY2ggdG9rZW4gJHRva2VuIGFuZCB2YWx1ZSAkdmFsdWUiKTsKKwl9CisKKwlmb3JlYWNoIChzb3J0IGtleXMgJXEpIHsKKwkJbG9nX2RlYnVnKCJTZWFyY2hpbmcgZm9yICVzID0gJXMiLCAkXywgJHF7JF99IHx8ICcoYW55IHZhbHVlKScpOworCX0KKworCXJldHVybiBcJXE7Cit9CisKKyMgdGFrZXMgdGhlIHNlYXJjaCB0b2tlbnMgYW5kIHRoZW4gYSBsaXN0IG9mIGVudHJpZXMKKyMgZWFjaCBlbnRyeSBpcyBhIGhhc2ggcmVmZXJlbmNlCitzdWIgZmluZF9uZXRyY19lbnRyeSB7CisJbXkgJHF1ZXJ5ID0gc2hpZnQgQF87CisKKyAgICBFTlRSWToKKwlmb3JlYWNoIG15ICRlbnRyeSAoQF8pCisJeworCQlteSAkZW50cnlfdGV4dCA9IGpvaW4gJywgJywgbWFwIHsgIiRfPSRlbnRyeS0+eyRffSIgfSBrZXlzICUkZW50cnk7CisJCWZvcmVhY2ggbXkgJGNoZWNrIChzb3J0IGtleXMgJSRxdWVyeSkgeworCQkJaWYgKCFkZWZpbmVkICRlbnRyeS0+eyRjaGVja30pIHsKKwkJCSAgICAgICAgbG9nX2RlYnVnKCJPSzogZW50cnkgaGFzIG5vICRjaGVjayB0b2tlbiwgc28gYW55IHZhbHVlIHNhdGlzZmllcyBjaGVjayAkY2hlY2siKTsKKwkJCX0gZWxzaWYgKGRlZmluZWQgJHF1ZXJ5LT57JGNoZWNrfSkgeworCQkJCWxvZ19kZWJ1ZygiY29tcGFyZSAlcyBbJXNdIHRvIFslc10gKGVudHJ5OiAlcykiLAorCQkJCQkgICRjaGVjaywKKwkJCQkJICAkZW50cnktPnskY2hlY2t9LAorCQkJCQkgICRxdWVyeS0+eyRjaGVja30sCisJCQkJCSAgJGVudHJ5X3RleHQpOworCQkJCXVubGVzcyAoJHF1ZXJ5LT57JGNoZWNrfSBlcSAkZW50cnktPnskY2hlY2t9KSB7CisJCQkJCW5leHQgRU5UUlk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlsb2dfZGVidWcoIk9LOiBhbnkgdmFsdWUgc2F0aXNmaWVzIGNoZWNrICRjaGVjayIpOworCQkJfQorCQl9CisKKwkJcmV0dXJuICRlbnRyeTsKKwl9CisKKwkjIG5vdGhpbmcgd2FzIGZvdW5kCisJcmV0dXJuOworfQorCitzdWIgcHJpbnRfY3JlZGVudGlhbF9kYXRhIHsKKwlteSAkZW50cnkgPSBzaGlmdCBAXzsKKwlteSAkcXVlcnkgPSBzaGlmdCBAXzsKKworCWxvZ19kZWJ1ZygiZW50cnkgaGFzIHBhc3NlZCBhbGwgdGhlIHNlYXJjaCBjaGVja3MiKTsKKyBUT0tFTjoKKwlmb3JlYWNoIG15ICRnaXRfdG9rZW4gKHNvcnQga2V5cyAlJGVudHJ5KSB7CisJCWxvZ19kZWJ1ZygibG9va2luZyBmb3IgdXNlZnVsIHRva2VuICRnaXRfdG9rZW4iKTsKKwkJIyBkb24ndCBwcmludCB1bmtub3duICh0byB0aGUgY3JlZGVudGlhbCBoZWxwZXIgcHJvdG9jb2wpIHRva2VucworCQluZXh0IFRPS0VOIHVubGVzcyBleGlzdHMgJHF1ZXJ5LT57JGdpdF90b2tlbn07CisKKwkJIyBkb24ndCBwcmludCB0aGluZ3MgYXNrZWQgaW4gdGhlIHF1ZXJ5ICh0aGUgZW50cnkgbWF0Y2hlcyB0aGVtKQorCQluZXh0IFRPS0VOIGlmIGRlZmluZWQgJHF1ZXJ5LT57JGdpdF90b2tlbn07CisKKwkJbG9nX2RlYnVnKCJGT1VORDogJGdpdF90b2tlbj0kZW50cnktPnskZ2l0X3Rva2VufSIpOworCQlwcmludGYgIiVzPSVzXG4iLCAkZ2l0X3Rva2VuLCAkZW50cnktPnskZ2l0X3Rva2VufTsKKwl9Cit9CitzdWIgbG9nX3ZlcmJvc2UgeworCXJldHVybiB1bmxlc3MgJG9wdGlvbnN7dmVyYm9zZX07CisJcHJpbnRmIFNUREVSUiBAXzsKKwlwcmludGYgU1RERVJSICJcbiI7Cit9CisKK3N1YiBsb2dfZGVidWcgeworCXJldHVybiB1bmxlc3MgJG9wdGlvbnN7ZGVidWd9OworCXByaW50ZiBTVERFUlIgQF87CisJcHJpbnRmIFNUREVSUiAiXG4iOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QubmV0cmMgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdGVzdC5uZXRyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTExOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9jcmVkZW50aWFsL25ldHJjL3Rlc3QubmV0cmMKQEAgLTAsMCArMSwxMyBAQAorbWFjaGluZSBpbWFwIGxvZ2luIHR6ekBsaWZlbG9ncy5jb20gcG9ydCBpbWFwcyBwYXNzd29yZCBsZXRtZWtub3cKK21hY2hpbmUgaW1hcCBsb2dpbiBib2IgcG9ydCBpbWFwcyBwYXNzd29yZCBib2J3aWxsa25vdworCisjIGNvbW1lbnQgdGVzdAorCittYWNoaW5lIGltYXAyIGxvZ2luIHR6eiBwb3J0IDEwOTkgcGFzc3dvcmQgdHp6a25vdworbWFjaGluZSBpbWFwMiBsb2dpbiBib2IgcGFzc3dvcmQgYm9id2lsbGtub3cKKworIyBhbm90aGVyIGNvbW1hbmQKKworbWFjaGluZSBnaXRodWIuY29tCisgIG11bHRpbGluZXRva2VuIGFub3RoZXJ2YWx1ZQorICBsb2dpbiBjYXJvbCBwYXNzd29yZCBjYXJvbGtub3dzCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdGVzdC5wbCBiL2NvbnRyaWIvY3JlZGVudGlhbC9uZXRyYy90ZXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE2OWI2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvbmV0cmMvdGVzdC5wbApAQCAtMCwwICsxLDEwNiBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7Cit1c2UgVGVzdDsKK3VzZSBJUEM6Ok9wZW4yOworCitCRUdJTiB7IHBsYW4gdGVzdHMgPT4gMTUgfQorCitteSBAZ2xvYmFsX2NyZWRlbnRpYWxfYXJncyA9IEBBUkdWOworbXkgJG5ldHJjID0gJy4vdGVzdC5uZXRyYyc7CitwcmludCAiIyBUZXN0aW5nIGluc2VjdXJlIGZpbGUsIG5vdGhpbmcgc2hvdWxkIGJlIGZvdW5kXG4iOworY2htb2QgMDY0NCwgJG5ldHJjOworbXkgJGNyZWQgPSBydW5fY3JlZGVudGlhbChbJy1mJywgJG5ldHJjLCAnZ2V0J10sCisJCQkgIHsgaG9zdCA9PiAnZ2l0aHViLmNvbScgfSk7CisKK29rKHNjYWxhciBrZXlzICUkY3JlZCwgMCwgIkdvdCAwIGtleXMgZnJvbSBpbnNlY3VyZSBmaWxlIik7CisKK3ByaW50ICIjIFRlc3RpbmcgbWlzc2luZyBmaWxlLCBub3RoaW5nIHNob3VsZCBiZSBmb3VuZFxuIjsKK2NobW9kIDA2NDQsICRuZXRyYzsKKyRjcmVkID0gcnVuX2NyZWRlbnRpYWwoWyctZicsICcvLy9ub3N1Y2hmaWxlLy8vJywgJ2dldCddLAorCQkgICAgICAgeyBob3N0ID0+ICdnaXRodWIuY29tJyB9KTsKKworb2soc2NhbGFyIGtleXMgJSRjcmVkLCAwLCAiR290IDAga2V5cyBmcm9tIG1pc3NpbmcgZmlsZSIpOworCitjaG1vZCAwNjAwLCAkbmV0cmM7CisKK3ByaW50ICIjIFRlc3Rpbmcgd2l0aCBpbnZhbGlkIGRhdGFcbiI7CiskY3JlZCA9IHJ1bl9jcmVkZW50aWFsKFsnLWYnLCAkbmV0cmMsICdnZXQnXSwKKwkJICAgICAgICJiYWQgZGF0YSIpOworb2soc2NhbGFyIGtleXMgJSRjcmVkLCA0LCAiR290IGZpcnN0IGZvdW5kIGtleXMgd2l0aCBiYWQgZGF0YSIpOworCitwcmludCAiIyBUZXN0aW5nIG5ldHJjIGZpbGUgZm9yIGEgbWlzc2luZyBjb3JvdmFtaWxrYmFyIGVudHJ5XG4iOworJGNyZWQgPSBydW5fY3JlZGVudGlhbChbJy1mJywgJG5ldHJjLCAnZ2V0J10sCisJCSAgICAgICB7IGhvc3QgPT4gJ2Nvcm92YW1pbGtiYXInIH0pOworCitvayhzY2FsYXIga2V5cyAlJGNyZWQsIDAsICJHb3Qgbm8gY29yb3ZhbWlsa2JhciBrZXlzIik7CisKK3ByaW50ICIjIFRlc3RpbmcgbmV0cmMgZmlsZSBmb3IgYSBnaXRodWIuY29tIGVudHJ5XG4iOworJGNyZWQgPSBydW5fY3JlZGVudGlhbChbJy1mJywgJG5ldHJjLCAnZ2V0J10sCisJCSAgICAgICB7IGhvc3QgPT4gJ2dpdGh1Yi5jb20nIH0pOworCitvayhzY2FsYXIga2V5cyAlJGNyZWQsIDIsICJHb3QgMiBHaXRodWIga2V5cyIpOworCitvaygkY3JlZC0+e3Bhc3N3b3JkfSwgJ2Nhcm9sa25vd3MnLCAiR290IGNvcnJlY3QgR2l0aHViIHBhc3N3b3JkIik7CitvaygkY3JlZC0+e3VzZXJuYW1lfSwgJ2Nhcm9sJywgIkdvdCBjb3JyZWN0IEdpdGh1YiB1c2VybmFtZSIpOworCitwcmludCAiIyBUZXN0aW5nIG5ldHJjIGZpbGUgZm9yIGEgdXNlcm5hbWUtc3BlY2lmaWMgZW50cnlcbiI7CiskY3JlZCA9IHJ1bl9jcmVkZW50aWFsKFsnLWYnLCAkbmV0cmMsICdnZXQnXSwKKwkJICAgICAgIHsgaG9zdCA9PiAnaW1hcCcsIHVzZXJuYW1lID0+ICdib2InIH0pOworCitvayhzY2FsYXIga2V5cyAlJGNyZWQsIDIsICJHb3QgMiB1c2VybmFtZS1zcGVjaWZpYyBrZXlzIik7CisKK29rKCRjcmVkLT57cGFzc3dvcmR9LCAnYm9id2lsbGtub3cnLCAiR290IGNvcnJlY3QgdXNlci1zcGVjaWZpYyBwYXNzd29yZCIpOworb2soJGNyZWQtPntwcm90b2NvbH0sICdpbWFwcycsICJHb3QgY29ycmVjdCB1c2VyLXNwZWNpZmljIHByb3RvY29sIik7CisKK3ByaW50ICIjIFRlc3RpbmcgbmV0cmMgZmlsZSBmb3IgYSBob3N0OnBvcnQtc3BlY2lmaWMgZW50cnlcbiI7CiskY3JlZCA9IHJ1bl9jcmVkZW50aWFsKFsnLWYnLCAkbmV0cmMsICdnZXQnXSwKKwkJICAgICAgIHsgaG9zdCA9PiAnaW1hcDI6MTA5OScgfSk7CisKK29rKHNjYWxhciBrZXlzICUkY3JlZCwgMiwgIkdvdCAyIGhvc3Q6cG9ydC1zcGVjaWZpYyBrZXlzIik7CisKK29rKCRjcmVkLT57cGFzc3dvcmR9LCAndHp6a25vdycsICJHb3QgY29ycmVjdCBob3N0OnBvcnQtc3BlY2lmaWMgcGFzc3dvcmQiKTsKK29rKCRjcmVkLT57dXNlcm5hbWV9LCAndHp6JywgIkdvdCBjb3JyZWN0IGhvc3Q6cG9ydC1zcGVjaWZpYyB1c2VybmFtZSIpOworCitwcmludCAiIyBUZXN0aW5nIG5ldHJjIGZpbGUgdGhhdCAnaG9zdDpwb3J0IGtpbGxzIGhvc3QnIGVudHJ5XG4iOworJGNyZWQgPSBydW5fY3JlZGVudGlhbChbJy1mJywgJG5ldHJjLCAnZ2V0J10sCisJCSAgICAgICB7IGhvc3QgPT4gJ2ltYXAyJyB9KTsKKworb2soc2NhbGFyIGtleXMgJSRjcmVkLCAyLCAiR290IDIgJ2hvc3Q6cG9ydCBraWxscyBob3N0JyBrZXlzIik7CisKK29rKCRjcmVkLT57cGFzc3dvcmR9LCAnYm9id2lsbGtub3cnLCAiR290IGNvcnJlY3QgJ2hvc3Q6cG9ydCBraWxscyBob3N0JyBwYXNzd29yZCIpOworb2soJGNyZWQtPnt1c2VybmFtZX0sICdib2InLCAiR290IGNvcnJlY3QgJ2hvc3Q6cG9ydCBraWxscyBob3N0JyB1c2VybmFtZSIpOworCitzdWIgcnVuX2NyZWRlbnRpYWwKK3sKKwlteSAkYXJncyA9IHNoaWZ0IEBfOworCW15ICRkYXRhID0gc2hpZnQgQF87CisJbXkgJHBpZCA9IG9wZW4yKG15ICRjaGxkX291dCwgbXkgJGNobGRfaW4sCisJCQknLi9naXQtY3JlZGVudGlhbC1uZXRyYycsIEBnbG9iYWxfY3JlZGVudGlhbF9hcmdzLAorCQkJQCRhcmdzKTsKKworCWRpZSAiQ291bGRuJ3Qgb3BlbiBwaXBlIHRvIG5ldHJjIGNyZWRlbnRpYWwgaGVscGVyOiAkISIgdW5sZXNzICRwaWQ7CisKKwlpZiAocmVmICRkYXRhIGVxICdIQVNIJykKKwl7CisJCXByaW50ICRjaGxkX2luICIkXz0kZGF0YS0+eyRffVxuIiBmb3JlYWNoIHNvcnQga2V5cyAlJGRhdGE7CisJfQorCWVsc2UKKwl7CisJCXByaW50ICRjaGxkX2luICIkZGF0YVxuIjsKKwl9CisKKwljbG9zZSAkY2hsZF9pbjsKKwlteSAlcmV0OworCisJd2hpbGUgKDwkY2hsZF9vdXQ+KQorCXsKKwkJY2hvbXA7CisJCW5leHQgdW5sZXNzIG0vXihbXj1dKyk9KC4rKS87CisKKwkJJHJldHskMX0gPSAkMjsKKwl9CisKKwlyZXR1cm4gXCVyZXQ7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vLmdpdGlnbm9yZSBiL2NvbnRyaWIvY3JlZGVudGlhbC9vc3hrZXljaGFpbi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNWI3MDIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitnaXQtY3JlZGVudGlhbC1vc3hrZXljaGFpbgpkaWZmIC0tZ2l0IGEvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluL01ha2VmaWxlIGIvY29udHJpYi9jcmVkZW50aWFsL29zeGtleWNoYWluL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiM2EwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vTWFrZWZpbGUKQEAgLTAsMCArMSwxNyBAQAorYWxsOjogZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4KKworQ0MgPSBnY2MKK1JNID0gcm0gLWYKK0NGTEFHUyA9IC1nIC1PMiAtV2FsbAorCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKKworZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW46IGdpdC1jcmVkZW50aWFsLW9zeGtleWNoYWluLm8KKwkkKENDKSAkKENGTEFHUykgLW8gJEAgJDwgJChMREZMQUdTKSAtV2wsLWZyYW1ld29yayAtV2wsU2VjdXJpdHkKKworZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4ubzogZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4uYworCSQoQ0MpIC1jICQoQ0ZMQUdTKSAkPAorCitjbGVhbjoKKwkkKFJNKSBnaXQtY3JlZGVudGlhbC1vc3hrZXljaGFpbiBnaXQtY3JlZGVudGlhbC1vc3hrZXljaGFpbi5vCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4uYyBiL2NvbnRyaWIvY3JlZGVudGlhbC9vc3hrZXljaGFpbi9naXQtY3JlZGVudGlhbC1vc3hrZXljaGFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDNmNTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2NyZWRlbnRpYWwvb3N4a2V5Y2hhaW4vZ2l0LWNyZWRlbnRpYWwtb3N4a2V5Y2hhaW4uYwpAQCAtMCwwICsxLDE4MyBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8U2VjdXJpdHkvU2VjdXJpdHkuaD4KKworc3RhdGljIFNlY1Byb3RvY29sVHlwZSBwcm90b2NvbDsKK3N0YXRpYyBjaGFyICpob3N0Oworc3RhdGljIGNoYXIgKnBhdGg7CitzdGF0aWMgY2hhciAqdXNlcm5hbWU7CitzdGF0aWMgY2hhciAqcGFzc3dvcmQ7CitzdGF0aWMgVUludDE2IHBvcnQ7CisKK3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwljaGFyIG1zZ1s0MDk2XTsKKwl2YV9saXN0IHBhcmFtczsKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJdnNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksIGVyciwgcGFyYW1zKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworCXZhX2VuZChwYXJhbXMpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkICp4c3RyZHVwKGNvbnN0IGNoYXIgKnMxKQoreworCXZvaWQgKnJldCA9IHN0cmR1cChzMSk7CisJaWYgKCFyZXQpCisJCWRpZSgiT3V0IG9mIG1lbW9yeSIpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgS0VZQ0hBSU5fSVRFTSh4KSAoeCA/IHN0cmxlbih4KSA6IDApLCB4CisjZGVmaW5lIEtFWUNIQUlOX0FSR1MgXAorCU5VTEwsIC8qIGRlZmF1bHQga2V5Y2hhaW4gKi8gXAorCUtFWUNIQUlOX0lURU0oaG9zdCksIFwKKwkwLCBOVUxMLCAvKiBhY2NvdW50IGRvbWFpbiAqLyBcCisJS0VZQ0hBSU5fSVRFTSh1c2VybmFtZSksIFwKKwlLRVlDSEFJTl9JVEVNKHBhdGgpLCBcCisJcG9ydCwgXAorCXByb3RvY29sLCBcCisJa1NlY0F1dGhlbnRpY2F0aW9uVHlwZURlZmF1bHQKKworc3RhdGljIHZvaWQgd3JpdGVfaXRlbShjb25zdCBjaGFyICp3aGF0LCBjb25zdCBjaGFyICpidWYsIGludCBsZW4pCit7CisJcHJpbnRmKCIlcz0iLCB3aGF0KTsKKwlmd3JpdGUoYnVmLCAxLCBsZW4sIHN0ZG91dCk7CisJcHV0Y2hhcignXG4nKTsKK30KKworc3RhdGljIHZvaWQgZmluZF91c2VybmFtZV9pbl9pdGVtKFNlY0tleWNoYWluSXRlbVJlZiBpdGVtKQoreworCVNlY0tleWNoYWluQXR0cmlidXRlTGlzdCBsaXN0OworCVNlY0tleWNoYWluQXR0cmlidXRlIGF0dHI7CisKKwlsaXN0LmNvdW50ID0gMTsKKwlsaXN0LmF0dHIgPSAmYXR0cjsKKwlhdHRyLnRhZyA9IGtTZWNBY2NvdW50SXRlbUF0dHI7CisKKwlpZiAoU2VjS2V5Y2hhaW5JdGVtQ29weUNvbnRlbnQoaXRlbSwgTlVMTCwgJmxpc3QsIE5VTEwsIE5VTEwpKQorCQlyZXR1cm47CisKKwl3cml0ZV9pdGVtKCJ1c2VybmFtZSIsIGF0dHIuZGF0YSwgYXR0ci5sZW5ndGgpOworCVNlY0tleWNoYWluSXRlbUZyZWVDb250ZW50KCZsaXN0LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZmluZF9pbnRlcm5ldF9wYXNzd29yZCh2b2lkKQoreworCXZvaWQgKmJ1ZjsKKwlVSW50MzIgbGVuOworCVNlY0tleWNoYWluSXRlbVJlZiBpdGVtOworCisJaWYgKFNlY0tleWNoYWluRmluZEludGVybmV0UGFzc3dvcmQoS0VZQ0hBSU5fQVJHUywgJmxlbiwgJmJ1ZiwgJml0ZW0pKQorCQlyZXR1cm47CisKKwl3cml0ZV9pdGVtKCJwYXNzd29yZCIsIGJ1ZiwgbGVuKTsKKwlpZiAoIXVzZXJuYW1lKQorCQlmaW5kX3VzZXJuYW1lX2luX2l0ZW0oaXRlbSk7CisKKwlTZWNLZXljaGFpbkl0ZW1GcmVlQ29udGVudChOVUxMLCBidWYpOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfaW50ZXJuZXRfcGFzc3dvcmQodm9pZCkKK3sKKwlTZWNLZXljaGFpbkl0ZW1SZWYgaXRlbTsKKworCS8qCisJICogUmVxdWlyZSBhdCBsZWFzdCBhIHByb3RvY29sIGFuZCBob3N0IGZvciByZW1vdmFsLCB3aGljaCBpcyB3aGF0IGdpdAorCSAqIHdpbGwgZ2l2ZSB1czsgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIG1vcmUgZmFuY3ksIHVzZSB0aGUKKwkgKiBLZXljaGFpbiBtYW5hZ2VyLgorCSAqLworCWlmICghcHJvdG9jb2wgfHwgIWhvc3QpCisJCXJldHVybjsKKworCWlmIChTZWNLZXljaGFpbkZpbmRJbnRlcm5ldFBhc3N3b3JkKEtFWUNIQUlOX0FSR1MsIDAsIE5VTEwsICZpdGVtKSkKKwkJcmV0dXJuOworCisJU2VjS2V5Y2hhaW5JdGVtRGVsZXRlKGl0ZW0pOworfQorCitzdGF0aWMgdm9pZCBhZGRfaW50ZXJuZXRfcGFzc3dvcmQodm9pZCkKK3sKKwkvKiBPbmx5IHN0b3JlIGNvbXBsZXRlIGNyZWRlbnRpYWxzICovCisJaWYgKCFwcm90b2NvbCB8fCAhaG9zdCB8fCAhdXNlcm5hbWUgfHwgIXBhc3N3b3JkKQorCQlyZXR1cm47CisKKwlpZiAoU2VjS2V5Y2hhaW5BZGRJbnRlcm5ldFBhc3N3b3JkKAorCSAgICAgIEtFWUNIQUlOX0FSR1MsCisJICAgICAgS0VZQ0hBSU5fSVRFTShwYXNzd29yZCksCisJICAgICAgTlVMTCkpCisJCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcmVhZF9jcmVkZW50aWFsKHZvaWQpCit7CisJY2hhciBidWZbMTAyNF07CisKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pKSB7CisJCWNoYXIgKnY7CisKKwkJaWYgKCFzdHJjbXAoYnVmLCAiXG4iKSkKKwkJCWJyZWFrOworCQlidWZbc3RybGVuKGJ1ZiktMV0gPSAnXDAnOworCisJCXYgPSBzdHJjaHIoYnVmLCAnPScpOworCQlpZiAoIXYpCisJCQlkaWUoImJhZCBpbnB1dDogJXMiLCBidWYpOworCQkqdisrID0gJ1wwJzsKKworCQlpZiAoIXN0cmNtcChidWYsICJwcm90b2NvbCIpKSB7CisJCQlpZiAoIXN0cmNtcCh2LCAiaW1hcCIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUlNQVA7CisJCQllbHNlIGlmICghc3RyY21wKHYsICJpbWFwcyIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUlNQVBTOworCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiZnRwIikpCisJCQkJcHJvdG9jb2wgPSBrU2VjUHJvdG9jb2xUeXBlRlRQOworCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiZnRwcyIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUZUUFM7CisJCQllbHNlIGlmICghc3RyY21wKHYsICJodHRwcyIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUhUVFBTOworCQkJZWxzZSBpZiAoIXN0cmNtcCh2LCAiaHR0cCIpKQorCQkJCXByb3RvY29sID0ga1NlY1Byb3RvY29sVHlwZUhUVFA7CisJCQllbHNlIGlmICghc3RyY21wKHYsICJzbXRwIikpCisJCQkJcHJvdG9jb2wgPSBrU2VjUHJvdG9jb2xUeXBlU01UUDsKKwkJCWVsc2UgLyogd2UgZG9uJ3QgeWV0IGhhbmRsZSBvdGhlciBwcm90b2NvbHMgKi8KKwkJCQlleGl0KDApOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiaG9zdCIpKSB7CisJCQljaGFyICpjb2xvbiA9IHN0cmNocih2LCAnOicpOworCQkJaWYgKGNvbG9uKSB7CisJCQkJKmNvbG9uKysgPSAnXDAnOworCQkJCXBvcnQgPSBhdG9pKGNvbG9uKTsKKwkJCX0KKwkJCWhvc3QgPSB4c3RyZHVwKHYpOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAicGF0aCIpKQorCQkJcGF0aCA9IHhzdHJkdXAodik7CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAidXNlcm5hbWUiKSkKKwkJCXVzZXJuYW1lID0geHN0cmR1cCh2KTsKKwkJZWxzZSBpZiAoIXN0cmNtcChidWYsICJwYXNzd29yZCIpKQorCQkJcGFzc3dvcmQgPSB4c3RyZHVwKHYpOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnVzYWdlID0KKwkJInVzYWdlOiBnaXQgY3JlZGVudGlhbC1vc3hrZXljaGFpbiA8Z2V0fHN0b3JlfGVyYXNlPiI7CisKKwlpZiAoIWFyZ3ZbMV0pCisJCWRpZSh1c2FnZSk7CisKKwlyZWFkX2NyZWRlbnRpYWwoKTsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJnZXQiKSkKKwkJZmluZF9pbnRlcm5ldF9wYXNzd29yZCgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInN0b3JlIikpCisJCWFkZF9pbnRlcm5ldF9wYXNzd29yZCgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImVyYXNlIikpCisJCWRlbGV0ZV9pbnRlcm5ldF9wYXNzd29yZCgpOworCS8qIG90aGVyd2lzZSwgaWdub3JlIHVua25vd24gYWN0aW9uICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvY3JlZGVudGlhbC93aW5jcmVkL01ha2VmaWxlIGIvY29udHJpYi9jcmVkZW50aWFsL3dpbmNyZWQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU5OTJjMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC93aW5jcmVkL01ha2VmaWxlCkBAIC0wLDAgKzEsMjIgQEAKK2FsbDogZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5leGUKKworLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrCisKK0NDID89IGdjYworUk0gPz0gcm0gLWYKK0NGTEFHUyA/PSAtTzIgLVdhbGwKKworcHJlZml4ID89IC91c3IvbG9jYWwKK2xpYmV4ZWNkaXIgPz0gJChwcmVmaXgpL2xpYmV4ZWMvZ2l0LWNvcmUKKworSU5TVEFMTCA/PSBpbnN0YWxsCisKK2dpdC1jcmVkZW50aWFsLXdpbmNyZWQuZXhlIDogZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5jCisJJChMSU5LLmMpICReICQoTE9BRExJQkVTKSAkKExETElCUykgLW8gJEAKKworaW5zdGFsbDogZ2l0LWNyZWRlbnRpYWwtd2luY3JlZC5leGUKKwkkKElOU1RBTEwpIC1tIDc1NSAkXiAkKGxpYmV4ZWNkaXIpCisKK2NsZWFuOgorCSQoUk0pIGdpdC1jcmVkZW50aWFsLXdpbmNyZWQuZXhlCmRpZmYgLS1naXQgYS9jb250cmliL2NyZWRlbnRpYWwvd2luY3JlZC9naXQtY3JlZGVudGlhbC13aW5jcmVkLmMgYi9jb250cmliL2NyZWRlbnRpYWwvd2luY3JlZC9naXQtY3JlZGVudGlhbC13aW5jcmVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2MTM0MAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvY3JlZGVudGlhbC93aW5jcmVkL2dpdC1jcmVkZW50aWFsLXdpbmNyZWQuYwpAQCAtMCwwICsxLDMyMCBAQAorLyoKKyAqIEEgZ2l0IGNyZWRlbnRpYWwgaGVscGVyIHRoYXQgaW50ZXJmYWNlIHdpdGggV2luZG93cycgQ3JlZGVudGlhbCBNYW5hZ2VyCisgKgorICovCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8aW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisvKiBjb21tb24gaGVscGVycyAqLworCisjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KS9zaXplb2YoeFswXSkpCisKK3N0YXRpYyB2b2lkIGRpZShjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwljaGFyIG1zZ1s0MDk2XTsKKwl2YV9saXN0IHBhcmFtczsKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJdnNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksIGVyciwgcGFyYW1zKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworCXZhX2VuZChwYXJhbXMpOworCWV4aXQoMSk7Cit9CisKK3N0YXRpYyB2b2lkICp4bWFsbG9jKHNpemVfdCBzaXplKQoreworCXZvaWQgKnJldCA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIXJldCAmJiAhc2l6ZSkKKwkJcmV0ID0gbWFsbG9jKDEpOworCWlmICghcmV0KQorCQkgZGllKCJPdXQgb2YgbWVtb3J5Iik7CisJcmV0dXJuIHJldDsKK30KKworLyogTWluR1cgZG9lc24ndCBoYXZlIHdpbmNyZWQuaCwgc28gd2UgbmVlZCB0byBkZWZpbmUgc3R1ZmYgKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0NSRURFTlRJQUxfQVRUUklCVVRFVyB7CisJTFBXU1RSIEtleXdvcmQ7CisJRFdPUkQgIEZsYWdzOworCURXT1JEICBWYWx1ZVNpemU7CisJTFBCWVRFIFZhbHVlOworfSBDUkVERU5USUFMX0FUVFJJQlVURVcsICpQQ1JFREVOVElBTF9BVFRSSUJVVEVXOworCit0eXBlZGVmIHN0cnVjdCBfQ1JFREVOVElBTFcgeworCURXT1JEICAgICAgICAgICAgICAgICAgRmxhZ3M7CisJRFdPUkQgICAgICAgICAgICAgICAgICBUeXBlOworCUxQV1NUUiAgICAgICAgICAgICAgICAgVGFyZ2V0TmFtZTsKKwlMUFdTVFIgICAgICAgICAgICAgICAgIENvbW1lbnQ7CisJRklMRVRJTUUgICAgICAgICAgICAgICBMYXN0V3JpdHRlbjsKKwlEV09SRCAgICAgICAgICAgICAgICAgIENyZWRlbnRpYWxCbG9iU2l6ZTsKKwlMUEJZVEUgICAgICAgICAgICAgICAgIENyZWRlbnRpYWxCbG9iOworCURXT1JEICAgICAgICAgICAgICAgICAgUGVyc2lzdDsKKwlEV09SRCAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUNvdW50OworCVBDUkVERU5USUFMX0FUVFJJQlVURVcgQXR0cmlidXRlczsKKwlMUFdTVFIgICAgICAgICAgICAgICAgIFRhcmdldEFsaWFzOworCUxQV1NUUiAgICAgICAgICAgICAgICAgVXNlck5hbWU7Cit9IENSRURFTlRJQUxXLCAqUENSRURFTlRJQUxXOworCisjZGVmaW5lIENSRURfVFlQRV9HRU5FUklDIDEKKyNkZWZpbmUgQ1JFRF9QRVJTSVNUX0xPQ0FMX01BQ0hJTkUgMgorI2RlZmluZSBDUkVEX01BWF9BVFRSSUJVVEVTIDY0CisKK3R5cGVkZWYgQk9PTCAoV0lOQVBJICpDcmVkV3JpdGVXVCkoUENSRURFTlRJQUxXLCBEV09SRCk7Cit0eXBlZGVmIEJPT0wgKFdJTkFQSSAqQ3JlZEVudW1lcmF0ZVdUKShMUENXU1RSLCBEV09SRCwgRFdPUkQgKiwKKyAgICBQQ1JFREVOVElBTFcgKiopOwordHlwZWRlZiBWT0lEIChXSU5BUEkgKkNyZWRGcmVlVCkoUFZPSUQpOwordHlwZWRlZiBCT09MIChXSU5BUEkgKkNyZWREZWxldGVXVCkoTFBDV1NUUiwgRFdPUkQsIERXT1JEKTsKKworc3RhdGljIEhNT0RVTEUgYWR2YXBpOworc3RhdGljIENyZWRXcml0ZVdUIENyZWRXcml0ZVc7CitzdGF0aWMgQ3JlZEVudW1lcmF0ZVdUIENyZWRFbnVtZXJhdGVXOworc3RhdGljIENyZWRGcmVlVCBDcmVkRnJlZTsKK3N0YXRpYyBDcmVkRGVsZXRlV1QgQ3JlZERlbGV0ZVc7CisKK3N0YXRpYyB2b2lkIGxvYWRfY3JlZF9mdW5jcyh2b2lkKQoreworCS8qIGxvYWQgRExMcyAqLworCWFkdmFwaSA9IExvYWRMaWJyYXJ5KCJhZHZhcGkzMi5kbGwiKTsKKwlpZiAoIWFkdmFwaSkKKwkJZGllKCJmYWlsZWQgdG8gbG9hZCBhZHZhcGkzMi5kbGwiKTsKKworCS8qIGdldCBmdW5jdGlvbiBwb2ludGVycyAqLworCUNyZWRXcml0ZVcgPSAoQ3JlZFdyaXRlV1QpR2V0UHJvY0FkZHJlc3MoYWR2YXBpLCAiQ3JlZFdyaXRlVyIpOworCUNyZWRFbnVtZXJhdGVXID0gKENyZWRFbnVtZXJhdGVXVClHZXRQcm9jQWRkcmVzcyhhZHZhcGksCisJICAgICJDcmVkRW51bWVyYXRlVyIpOworCUNyZWRGcmVlID0gKENyZWRGcmVlVClHZXRQcm9jQWRkcmVzcyhhZHZhcGksICJDcmVkRnJlZSIpOworCUNyZWREZWxldGVXID0gKENyZWREZWxldGVXVClHZXRQcm9jQWRkcmVzcyhhZHZhcGksICJDcmVkRGVsZXRlVyIpOworCWlmICghQ3JlZFdyaXRlVyB8fCAhQ3JlZEVudW1lcmF0ZVcgfHwgIUNyZWRGcmVlIHx8ICFDcmVkRGVsZXRlVykKKwkJZGllKCJmYWlsZWQgdG8gbG9hZCBmdW5jdGlvbnMiKTsKK30KKworc3RhdGljIFdDSEFSICp3dXNlcm5hbWUsICpwYXNzd29yZCwgKnByb3RvY29sLCAqaG9zdCwgKnBhdGgsIHRhcmdldFsxMDI0XTsKKworc3RhdGljIHZvaWQgd3JpdGVfaXRlbShjb25zdCBjaGFyICp3aGF0LCBMUENXU1RSIHdidWYsIGludCB3bGVuKQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgbGVuID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9VVEY4LCAwLCB3YnVmLCB3bGVuLCBOVUxMLCAwLCBOVUxMLAorCSAgICBGQUxTRSk7CisJYnVmID0geG1hbGxvYyhsZW4pOworCisJaWYgKCFXaWRlQ2hhclRvTXVsdGlCeXRlKENQX1VURjgsIDAsIHdidWYsIHdsZW4sIGJ1ZiwgbGVuLCBOVUxMLCBGQUxTRSkpCisJCWRpZSgiV2lkZUNoYXJUb011bHRpQnl0ZSBmYWlsZWQhIik7CisKKwlwcmludGYoIiVzPSIsIHdoYXQpOworCWZ3cml0ZShidWYsIDEsIGxlbiwgc3Rkb3V0KTsKKwlwdXRjaGFyKCdcbicpOworCWZyZWUoYnVmKTsKK30KKworLyoKKyAqIE1hdGNoIGFuIChvcHRpb25hbCkgZXhwZWN0ZWQgc3RyaW5nIGFuZCBhIGRlbGltaXRlciBpbiB0aGUgdGFyZ2V0IHN0cmluZywKKyAqIGNvbnN1bWluZyB0aGUgbWF0Y2hlZCB0ZXh0IGJ5IHVwZGF0aW5nIHRoZSB0YXJnZXQgcG9pbnRlci4KKyAqLworCitzdGF0aWMgTFBDV1NUUiB3Y3NzdHJfbGFzdChMUENXU1RSIHN0ciwgTFBDV1NUUiBmaW5kKQoreworCUxQQ1dTVFIgcmVzID0gTlVMTCwgcG9zOworCWZvciAocG9zID0gd2Nzc3RyKHN0ciwgZmluZCk7IHBvczsgcG9zID0gd2Nzc3RyKHBvcyArIDEsIGZpbmQpKQorCQlyZXMgPSBwb3M7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBtYXRjaF9wYXJ0X3dpdGhfbGFzdChMUENXU1RSICpwdGFyZ2V0LCBMUENXU1RSIHdhbnQsIExQQ1dTVFIgZGVsaW0sIGludCBsYXN0KQoreworCUxQQ1dTVFIgZGVsaW1fcG9zLCBzdGFydCA9ICpwdGFyZ2V0OworCWludCBsZW47CisKKwkvKiBmaW5kIHN0YXJ0IG9mIGRlbGltaXRlciAob3IgZW5kLW9mLXN0cmluZyBpZiBkZWxpbSBpcyBlbXB0eSkgKi8KKwlpZiAoKmRlbGltKQorCQlkZWxpbV9wb3MgPSBsYXN0ID8gd2Nzc3RyX2xhc3Qoc3RhcnQsIGRlbGltKSA6IHdjc3N0cihzdGFydCwgZGVsaW0pOworCWVsc2UKKwkJZGVsaW1fcG9zID0gc3RhcnQgKyB3Y3NsZW4oc3RhcnQpOworCisJLyoKKwkgKiBtYXRjaCB0ZXh0IHVwIHRvIGRlbGltaXRlciwgb3IgZW5kIG9mIHN0cmluZyAoZS5nLiB0aGUgJy8nIGFmdGVyCisJICogaG9zdCBpcyBvcHRpb25hbCBpZiBub3QgZm9sbG93ZWQgYnkgYSBwYXRoKQorCSAqLworCWlmIChkZWxpbV9wb3MpCisJCWxlbiA9IGRlbGltX3BvcyAtIHN0YXJ0OworCWVsc2UKKwkJbGVuID0gd2NzbGVuKHN0YXJ0KTsKKworCS8qIHVwZGF0ZSBwdGFyZ2V0IGlmIHdlIGVpdGhlciBmb3VuZCBhIGRlbGltaXRlciBvciBuZWVkIGEgbWF0Y2ggKi8KKwlpZiAoZGVsaW1fcG9zIHx8IHdhbnQpCisJCSpwdGFyZ2V0ID0gZGVsaW1fcG9zID8gZGVsaW1fcG9zICsgd2NzbGVuKGRlbGltKSA6IHN0YXJ0ICsgbGVuOworCisJcmV0dXJuICF3YW50IHx8ICghd2NzbmNtcCh3YW50LCBzdGFydCwgbGVuKSAmJiAhd2FudFtsZW5dKTsKK30KKworc3RhdGljIGludCBtYXRjaF9wYXJ0KExQQ1dTVFIgKnB0YXJnZXQsIExQQ1dTVFIgd2FudCwgTFBDV1NUUiBkZWxpbSkKK3sKKwlyZXR1cm4gbWF0Y2hfcGFydF93aXRoX2xhc3QocHRhcmdldCwgd2FudCwgZGVsaW0sIDApOworfQorCitzdGF0aWMgaW50IG1hdGNoX3BhcnRfbGFzdChMUENXU1RSICpwdGFyZ2V0LCBMUENXU1RSIHdhbnQsIExQQ1dTVFIgZGVsaW0pCit7CisJcmV0dXJuIG1hdGNoX3BhcnRfd2l0aF9sYXN0KHB0YXJnZXQsIHdhbnQsIGRlbGltLCAxKTsKK30KKworc3RhdGljIGludCBtYXRjaF9jcmVkKGNvbnN0IENSRURFTlRJQUxXICpjcmVkKQoreworCUxQQ1dTVFIgdGFyZ2V0ID0gY3JlZC0+VGFyZ2V0TmFtZTsKKwlpZiAod3VzZXJuYW1lICYmIHdjc2NtcCh3dXNlcm5hbWUsIGNyZWQtPlVzZXJOYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gbWF0Y2hfcGFydCgmdGFyZ2V0LCBMImdpdCIsIEwiOiIpICYmCisJCW1hdGNoX3BhcnQoJnRhcmdldCwgcHJvdG9jb2wsIEwiOi8vIikgJiYKKwkJbWF0Y2hfcGFydF9sYXN0KCZ0YXJnZXQsIHd1c2VybmFtZSwgTCJAIikgJiYKKwkJbWF0Y2hfcGFydCgmdGFyZ2V0LCBob3N0LCBMIi8iKSAmJgorCQltYXRjaF9wYXJ0KCZ0YXJnZXQsIHBhdGgsIEwiIik7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9jcmVkZW50aWFsKHZvaWQpCit7CisJQ1JFREVOVElBTFcgKipjcmVkczsKKwlEV09SRCBudW1fY3JlZHM7CisJaW50IGk7CisKKwlpZiAoIUNyZWRFbnVtZXJhdGVXKEwiZ2l0OioiLCAwLCAmbnVtX2NyZWRzLCAmY3JlZHMpKQorCQlyZXR1cm47CisKKwkvKiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBjcmVkZW50aWFsIHRoYXQgbWF0Y2hlcyB1c2VybmFtZSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fY3JlZHM7ICsraSkKKwkJaWYgKG1hdGNoX2NyZWQoY3JlZHNbaV0pKSB7CisJCQl3cml0ZV9pdGVtKCJ1c2VybmFtZSIsIGNyZWRzW2ldLT5Vc2VyTmFtZSwKKwkJCQl3Y3NsZW4oY3JlZHNbaV0tPlVzZXJOYW1lKSk7CisJCQl3cml0ZV9pdGVtKCJwYXNzd29yZCIsCisJCQkJKExQQ1dTVFIpY3JlZHNbaV0tPkNyZWRlbnRpYWxCbG9iLAorCQkJCWNyZWRzW2ldLT5DcmVkZW50aWFsQmxvYlNpemUgLyBzaXplb2YoV0NIQVIpKTsKKwkJCWJyZWFrOworCQl9CisKKwlDcmVkRnJlZShjcmVkcyk7Cit9CisKK3N0YXRpYyB2b2lkIHN0b3JlX2NyZWRlbnRpYWwodm9pZCkKK3sKKwlDUkVERU5USUFMVyBjcmVkOworCisJaWYgKCF3dXNlcm5hbWUgfHwgIXBhc3N3b3JkKQorCQlyZXR1cm47CisKKwljcmVkLkZsYWdzID0gMDsKKwljcmVkLlR5cGUgPSBDUkVEX1RZUEVfR0VORVJJQzsKKwljcmVkLlRhcmdldE5hbWUgPSB0YXJnZXQ7CisJY3JlZC5Db21tZW50ID0gTCJzYXZlZCBieSBnaXQtY3JlZGVudGlhbC13aW5jcmVkIjsKKwljcmVkLkNyZWRlbnRpYWxCbG9iU2l6ZSA9ICh3Y3NsZW4ocGFzc3dvcmQpKSAqIHNpemVvZihXQ0hBUik7CisJY3JlZC5DcmVkZW50aWFsQmxvYiA9IChMUFZPSUQpcGFzc3dvcmQ7CisJY3JlZC5QZXJzaXN0ID0gQ1JFRF9QRVJTSVNUX0xPQ0FMX01BQ0hJTkU7CisJY3JlZC5BdHRyaWJ1dGVDb3VudCA9IDA7CisJY3JlZC5BdHRyaWJ1dGVzID0gTlVMTDsKKwljcmVkLlRhcmdldEFsaWFzID0gTlVMTDsKKwljcmVkLlVzZXJOYW1lID0gd3VzZXJuYW1lOworCisJaWYgKCFDcmVkV3JpdGVXKCZjcmVkLCAwKSkKKwkJZGllKCJDcmVkV3JpdGUgZmFpbGVkIik7Cit9CisKK3N0YXRpYyB2b2lkIGVyYXNlX2NyZWRlbnRpYWwodm9pZCkKK3sKKwlDUkVERU5USUFMVyAqKmNyZWRzOworCURXT1JEIG51bV9jcmVkczsKKwlpbnQgaTsKKworCWlmICghQ3JlZEVudW1lcmF0ZVcoTCJnaXQ6KiIsIDAsICZudW1fY3JlZHMsICZjcmVkcykpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY3JlZHM7ICsraSkgeworCQlpZiAobWF0Y2hfY3JlZChjcmVkc1tpXSkpCisJCQlDcmVkRGVsZXRlVyhjcmVkc1tpXS0+VGFyZ2V0TmFtZSwgY3JlZHNbaV0tPlR5cGUsIDApOworCX0KKworCUNyZWRGcmVlKGNyZWRzKTsKK30KKworc3RhdGljIFdDSEFSICp1dGY4X3RvX3V0ZjE2X2R1cChjb25zdCBjaGFyICpzdHIpCit7CisJaW50IHdsZW4gPSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX1VURjgsIDAsIHN0ciwgLTEsIE5VTEwsIDApOworCVdDSEFSICp3c3RyID0geG1hbGxvYyhzaXplb2YoV0NIQVIpICogd2xlbik7CisJTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9VVEY4LCAwLCBzdHIsIC0xLCB3c3RyLCB3bGVuKTsKKwlyZXR1cm4gd3N0cjsKK30KKworc3RhdGljIHZvaWQgcmVhZF9jcmVkZW50aWFsKHZvaWQpCit7CisJY2hhciBidWZbMTAyNF07CisKKwl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pKSB7CisJCWNoYXIgKnY7CisJCWludCBsZW4gPSBzdHJsZW4oYnVmKTsKKwkJLyogc3RyaXAgdHJhaWxpbmcgQ1IgLyBMRiAqLworCQl3aGlsZSAobGVuICYmIHN0cmNocigiXHJcbiIsIGJ1ZltsZW4gLSAxXSkpCisJCQlidWZbLS1sZW5dID0gMDsKKworCQlpZiAoISpidWYpCisJCQlicmVhazsKKworCQl2ID0gc3RyY2hyKGJ1ZiwgJz0nKTsKKwkJaWYgKCF2KQorCQkJZGllKCJiYWQgaW5wdXQ6ICVzIiwgYnVmKTsKKwkJKnYrKyA9ICdcMCc7CisKKwkJaWYgKCFzdHJjbXAoYnVmLCAicHJvdG9jb2wiKSkKKwkJCXByb3RvY29sID0gdXRmOF90b191dGYxNl9kdXAodik7CisJCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiaG9zdCIpKQorCQkJaG9zdCA9IHV0ZjhfdG9fdXRmMTZfZHVwKHYpOworCQllbHNlIGlmICghc3RyY21wKGJ1ZiwgInBhdGgiKSkKKwkJCXBhdGggPSB1dGY4X3RvX3V0ZjE2X2R1cCh2KTsKKwkJZWxzZSBpZiAoIXN0cmNtcChidWYsICJ1c2VybmFtZSIpKSB7CisJCQl3dXNlcm5hbWUgPSB1dGY4X3RvX3V0ZjE2X2R1cCh2KTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgInBhc3N3b3JkIikpCisJCQlwYXNzd29yZCA9IHV0ZjhfdG9fdXRmMTZfZHVwKHYpOworCQllbHNlCisJCQlkaWUoInVucmVjb2duaXplZCBpbnB1dCIpOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFyICp1c2FnZSA9CisJICAgICJ1c2FnZTogZ2l0IGNyZWRlbnRpYWwtd2luY3JlZCA8Z2V0fHN0b3JlfGVyYXNlPlxuIjsKKworCWlmICghYXJndlsxXSkKKwkJZGllKHVzYWdlKTsKKworCS8qIGdpdCB1c2UgYmluYXJ5IHBpcGVzIHRvIGF2b2lkIENSTEYtaXNzdWVzICovCisJX3NldG1vZGUoX2ZpbGVubyhzdGRpbiksIF9PX0JJTkFSWSk7CisJX3NldG1vZGUoX2ZpbGVubyhzdGRvdXQpLCBfT19CSU5BUlkpOworCisJcmVhZF9jcmVkZW50aWFsKCk7CisKKwlsb2FkX2NyZWRfZnVuY3MoKTsKKworCWlmICghcHJvdG9jb2wgfHwgIShob3N0IHx8IHBhdGgpKQorCQlyZXR1cm4gMDsKKworCS8qIHByZXBhcmUgJ3RhcmdldCcsIHRoZSB1bmlxdWUga2V5IGZvciB0aGUgY3JlZGVudGlhbCAqLworCXdjc2NweSh0YXJnZXQsIEwiZ2l0OiIpOworCXdjc25jYXQodGFyZ2V0LCBwcm90b2NvbCwgQVJSQVlfU0laRSh0YXJnZXQpKTsKKwl3Y3NuY2F0KHRhcmdldCwgTCI6Ly8iLCBBUlJBWV9TSVpFKHRhcmdldCkpOworCWlmICh3dXNlcm5hbWUpIHsKKwkJd2NzbmNhdCh0YXJnZXQsIHd1c2VybmFtZSwgQVJSQVlfU0laRSh0YXJnZXQpKTsKKwkJd2NzbmNhdCh0YXJnZXQsIEwiQCIsIEFSUkFZX1NJWkUodGFyZ2V0KSk7CisJfQorCWlmIChob3N0KQorCQl3Y3NuY2F0KHRhcmdldCwgaG9zdCwgQVJSQVlfU0laRSh0YXJnZXQpKTsKKwlpZiAocGF0aCkgeworCQl3Y3NuY2F0KHRhcmdldCwgTCIvIiwgQVJSQVlfU0laRSh0YXJnZXQpKTsKKwkJd2NzbmNhdCh0YXJnZXQsIHBhdGgsIEFSUkFZX1NJWkUodGFyZ2V0KSk7CisJfQorCisJaWYgKCFzdHJjbXAoYXJndlsxXSwgImdldCIpKQorCQlnZXRfY3JlZGVudGlhbCgpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInN0b3JlIikpCisJCXN0b3JlX2NyZWRlbnRpYWwoKTsKKwllbHNlIGlmICghc3RyY21wKGFyZ3ZbMV0sICJlcmFzZSIpKQorCQllcmFzZV9jcmVkZW50aWFsKCk7CisJLyogb3RoZXJ3aXNlLCBpZ25vcmUgdW5rbm93biBhY3Rpb24gKi8KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvUkVBRE1FIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM2Yjk3YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZGlmZi1oaWdobGlnaHQvUkVBRE1FCkBAIC0wLDAgKzEsMTkzIEBACitkaWZmLWhpZ2hsaWdodAorPT09PT09PT09PT09PT0KKworTGluZSBvcmllbnRlZCBkaWZmcyBhcmUgZ3JlYXQgZm9yIHJldmlld2luZyBjb2RlLCBiZWNhdXNlIGZvciBtb3N0CitodW5rcywgeW91IHdhbnQgdG8gc2VlIHRoZSBvbGQgYW5kIHRoZSBuZXcgc2VnbWVudHMgb2YgY29kZSBuZXh0IHRvIGVhY2gKK290aGVyLiBTb21ldGltZXMsIHRob3VnaCwgd2hlbiBhbiBvbGQgbGluZSBhbmQgYSBuZXcgbGluZSBhcmUgdmVyeQorc2ltaWxhciwgaXQncyBoYXJkIHRvIGltbWVkaWF0ZWx5IHNlZSB0aGUgZGlmZmVyZW5jZS4KKworWW91IGNhbiB1c2UgIi0tY29sb3Itd29yZHMiIHRvIGhpZ2hsaWdodCBvbmx5IHRoZSBjaGFuZ2VkIHBvcnRpb25zIG9mCitsaW5lcy4gSG93ZXZlciwgdGhpcyBjYW4gb2Z0ZW4gYmUgaGFyZCB0byByZWFkIGZvciBjb2RlLCBhcyBpdCBsb3NlcwordGhlIGxpbmUgc3RydWN0dXJlLCBhbmQgeW91IGVuZCB1cCB3aXRoIG9kZGx5IGZvcm1hdHRlZCBiaXRzLgorCitJbnN0ZWFkLCB0aGlzIHNjcmlwdCBwb3N0LXByb2Nlc3NlcyB0aGUgbGluZS1vcmllbnRlZCBkaWZmLCBmaW5kcyBwYWlycworb2YgbGluZXMsIGFuZCBoaWdobGlnaHRzIHRoZSBkaWZmZXJpbmcgc2VnbWVudHMuICBJdCdzIGN1cnJlbnRseSB2ZXJ5CitzaW1wbGUgYW5kIHN0dXBpZCBhYm91dCBkb2luZyB0aGVzZSB0YXNrcy4gSW4gcGFydGljdWxhcjoKKworICAxLiBJdCB3aWxsIG9ubHkgaGlnaGxpZ2h0IGh1bmtzIGluIHdoaWNoIHRoZSBudW1iZXIgb2YgcmVtb3ZlZCBhbmQKKyAgICAgYWRkZWQgbGluZXMgaXMgdGhlIHNhbWUsIGFuZCBpdCB3aWxsIHBhaXIgbGluZXMgd2l0aGluIHRoZSBodW5rIGJ5CisgICAgIHBvc2l0aW9uIChzbyB0aGUgZmlyc3QgcmVtb3ZlZCBsaW5lIGlzIGNvbXBhcmVkIHRvIHRoZSBmaXJzdCBhZGRlZAorICAgICBsaW5lLCBhbmQgc28gZm9ydGgpLiBUaGlzIGlzIHNpbXBsZSBhbmQgdGVuZHMgdG8gd29yayB3ZWxsIGluCisgICAgIHByYWN0aWNlLiBNb3JlIGNvbXBsZXggY2hhbmdlcyBkb24ndCBoaWdobGlnaHQgd2VsbCwgc28gd2UgdGVuZCB0bworICAgICBleGNsdWRlIHRoZW0gZHVlIHRvIHRoZSAic2FtZSBudW1iZXIgb2YgcmVtb3ZlZCBhbmQgYWRkZWQgbGluZXMiCisgICAgIHJlc3RyaWN0aW9uLiBPciBldmVuIGlmIHdlIGRvIHRyeSB0byBoaWdobGlnaHQgdGhlbSwgdGhleSBlbmQgdXAKKyAgICAgbm90IGhpZ2hsaWdodGluZyBiZWNhdXNlIG9mIG91ciAiZG9uJ3QgaGlnaGxpZ2h0IGlmIHRoZSB3aG9sZSBsaW5lCisgICAgIHdvdWxkIGJlIGhpZ2hsaWdodGVkIiBydWxlLgorCisgIDIuIEl0IHdpbGwgZmluZCB0aGUgY29tbW9uIHByZWZpeCBhbmQgc3VmZml4IG9mIHR3byBsaW5lcywgYW5kCisgICAgIGNvbnNpZGVyIGV2ZXJ5dGhpbmcgaW4gdGhlIG1pZGRsZSB0byBiZSAiZGlmZmVyZW50Ii4gSXQgY291bGQKKyAgICAgaW5zdGVhZCBkbyBhIHJlYWwgZGlmZiBvZiB0aGUgY2hhcmFjdGVycyBiZXR3ZWVuIHRoZSB0d28gbGluZXMgYW5kCisgICAgIGZpbmQgY29tbW9uIHN1YnNlcXVlbmNlcy4gSG93ZXZlciwgdGhlIHBvaW50IG9mIHRoZSBoaWdobGlnaHQgaXMgdG8KKyAgICAgY2FsbCBhdHRlbnRpb24gdG8gYSBjZXJ0YWluIGFyZWEuIEV2ZW4gaWYgc29tZSBzbWFsbCBzdWJzZXQgb2YgdGhlCisgICAgIGhpZ2hsaWdodGVkIGFyZWEgYWN0dWFsbHkgZGlkbid0IGNoYW5nZSwgdGhhdCdzIE9LLiBJbiBwcmFjdGljZSBpdAorICAgICBlbmRzIHVwIGJlaW5nIG1vcmUgcmVhZGFibGUgdG8ganVzdCBoYXZlIGEgc2luZ2xlIGJsb2Igb24gdGhlIGxpbmUKKyAgICAgc2hvd2luZyB0aGUgaW50ZXJlc3RpbmcgYml0LgorCitUaGUgZ29hbCBvZiB0aGUgc2NyaXB0IGlzIHRoZXJlZm9yZSBub3QgdG8gYmUgZXhhY3QgYWJvdXQgaGlnaGxpZ2h0aW5nCitjaGFuZ2VzLCBidXQgdG8gY2FsbCBhdHRlbnRpb24gdG8gYXJlYXMgb2YgaW50ZXJlc3Qgd2l0aG91dCBiZWluZwordmlzdWFsbHkgZGlzdHJhY3RpbmcuICBOb24tZGlmZiBsaW5lcyBhbmQgZXhpc3RpbmcgZGlmZiBjb2xvcmF0aW9uIGlzCitwcmVzZXJ2ZWQ7IHRoZSBpbnRlbnQgaXMgdGhhdCB0aGUgb3V0cHV0IHNob3VsZCBsb29rIGV4YWN0bHkgdGhlIHNhbWUgYXMKK3RoZSBpbnB1dCwgZXhjZXB0IGZvciB0aGUgb2NjYXNpb25hbCBoaWdobGlnaHQuCisKK1VzZQorLS0tCisKK1lvdSBjYW4gdHJ5IG91dCB0aGUgZGlmZi1oaWdobGlnaHQgcHJvZ3JhbSB3aXRoOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dpdCBsb2cgLXAgLS1jb2xvciB8IC9wYXRoL3RvL2RpZmYtaGlnaGxpZ2h0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IHdhbnQgdG8gdXNlIGl0IGFsbCB0aGUgdGltZSwgZHJvcCBpdCBpbiB5b3VyICRQQVRIIGFuZCBwdXQgdGhlCitmb2xsb3dpbmcgaW4geW91ciBnaXQgY29uZmlndXJhdGlvbjoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitbcGFnZXJdCisJbG9nID0gZGlmZi1oaWdobGlnaHQgfCBsZXNzCisJc2hvdyA9IGRpZmYtaGlnaGxpZ2h0IHwgbGVzcworCWRpZmYgPSBkaWZmLWhpZ2hsaWdodCB8IGxlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0NvbG9yIENvbmZpZworLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gY29uZmlndXJlIHRoZSBoaWdobGlnaHQgY29sb3JzIGFuZCBhdHRyaWJ1dGVzIHVzaW5nIGdpdCdzCitjb25maWcuIFRoZSBjb2xvcnMgZm9yICJvbGQiIGFuZCAibmV3IiBsaW5lcyBjYW4gYmUgc3BlY2lmaWVkCitpbmRlcGVuZGVudGx5LiBUaGVyZSBhcmUgdHdvICJtb2RlcyIgb2YgY29uZmlndXJhdGlvbjoKKworICAxLiBZb3UgY2FuIHNwZWNpZnkgYSAiaGlnaGxpZ2h0IiBjb2xvciBhbmQgYSBtYXRjaGluZyAicmVzZXQiIGNvbG9yLgorICAgICBUaGlzIHdpbGwgcmV0YWluIGFueSBleGlzdGluZyBjb2xvcnMgaW4gdGhlIGRpZmYsIGFuZCBhcHBseSB0aGUKKyAgICAgImhpZ2hsaWdodCIgYW5kICJyZXNldCIgY29sb3JzIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGhpZ2hsaWdodGVkCisgICAgIHBvcnRpb24uCisKKyAgMi4gWW91IGNhbiBzcGVjaWZ5IGEgIm5vcm1hbCIgY29sb3IgYW5kIGEgImhpZ2hsaWdodCIgY29sb3IuIEluIHRoaXMKKyAgICAgY2FzZSwgZXhpc3RpbmcgY29sb3JzIGFyZSBkcm9wcGVkIGZyb20gdGhhdCBsaW5lLiBUaGUgbm9uLWhpZ2hsaWdodGVkCisgICAgIGJpdHMgb2YgdGhlIGxpbmUgZ2V0IHRoZSAibm9ybWFsIiBjb2xvciwgYW5kIHRoZSBoaWdobGlnaHRzIGdldCB0aGUKKyAgICAgImhpZ2hsaWdodCIgY29sb3IuCisKK0lmIG5vICJuZXciIGNvbG9ycyBhcmUgc3BlY2lmaWVkLCB0aGV5IGRlZmF1bHQgdG8gdGhlICJvbGQiIGNvbG9ycy4gSWYKK25vICJvbGQiIGNvbG9ycyBhcmUgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBpcyB0byByZXZlcnNlIHRoZSBmb3JlZ3JvdW5kCithbmQgYmFja2dyb3VuZCBmb3IgaGlnaGxpZ2h0ZWQgcG9ydGlvbnMuCisKK0V4YW1wbGVzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVW5kZXJsaW5lIGhpZ2hsaWdodGVkIHBvcnRpb25zCitbY29sb3IgImRpZmYtaGlnaGxpZ2h0Il0KK29sZEhpZ2hsaWdodCA9IHVsCitvbGRSZXNldCA9IG5vdWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVmFyeWluZyBiYWNrZ3JvdW5kIGludGVuc2l0aWVzCitbY29sb3IgImRpZmYtaGlnaGxpZ2h0Il0KK29sZE5vcm1hbCA9ICJibGFjayAjZjhjYmNiIgorb2xkSGlnaGxpZ2h0ID0gImJsYWNrICNmZmFhYWEiCituZXdOb3JtYWwgPSAiYmxhY2sgI2NiZWVjYiIKK25ld0hpZ2hsaWdodCA9ICJibGFjayAjYWFmZmFhIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQnVncworLS0tLQorCitCZWNhdXNlIGRpZmYtaGlnaGxpZ2h0IHJlbGllcyBvbiBoZXVyaXN0aWNzIHRvIGd1ZXNzIHdoaWNoIHBhcnRzIG9mCitjaGFuZ2VzIGFyZSBpbXBvcnRhbnQsIHRoZXJlIGFyZSBzb21lIGNhc2VzIHdoZXJlIHRoZSBoaWdobGlnaHRpbmcgaXMKK21vcmUgZGlzdHJhY3RpbmcgdGhhbiB1c2VmdWwuIEZvcnR1bmF0ZWx5LCB0aGVzZSBjYXNlcyBhcmUgcmFyZSBpbgorcHJhY3RpY2UsIGFuZCB3aGVuIHRoZXkgZG8gb2NjdXIsIHRoZSB3b3JzdCBjYXNlIGlzIHNpbXBseSBhIGxpdHRsZQorZXh0cmEgaGlnaGxpZ2h0aW5nLiBUaGlzIHNlY3Rpb24gZG9jdW1lbnRzIHNvbWUgY2FzZXMga25vd24gdG8gYmUKK3N1Yi1vcHRpbWFsLCBpbiBjYXNlIHNvbWVib2R5IGZlZWxzIGxpa2Ugd29ya2luZyBvbiBpbXByb3ZpbmcgdGhlCitoZXVyaXN0aWNzLgorCisxLiBUd28gY2hhbmdlcyBvbiB0aGUgc2FtZSBsaW5lIGdldCBoaWdobGlnaHRlZCBpbiBhIGJsb2IuIEZvciBleGFtcGxlLAorICAgaGlnaGxpZ2h0aW5nOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZm9vKGJ1Ziwgc2l6ZSk7CisrZm9vKG9iai0+YnVmLCBvYmotPnNpemUpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB5aWVsZHMgKHdoZXJlIHRoZSBpbnNpZGUgb2YgIit7fSIgd291bGQgYmUgaGlnaGxpZ2h0ZWQpOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistZm9vKGJ1Ziwgc2l6ZSk7CisrZm9vKCt7b2JqLT5idWYsIG9iai0+fXNpemUpOworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aGVyZWFzIGEgbW9yZSBzZW1hbnRpY2FsbHkgbWVhbmluZ2Z1bCBvdXRwdXQgd291bGQgYmU6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1mb28oYnVmLCBzaXplKTsKKytmb28oK3tvYmotPn1idWYsICt7b2JqLT59c2l6ZSk7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIE5vdGUgdGhhdCBkb2luZyB0aGlzIHJpZ2h0IHdvdWxkIHByb2JhYmx5IGludm9sdmUgYSBzZXQgb2YKKyAgIGNvbnRlbnQtc3BlY2lmaWMgYm91bmRhcnkgcGF0dGVybnMsIHNpbWlsYXIgdG8gd29yZC1kaWZmLiBPdGhlcndpc2UKKyAgIHlvdSBnZXQganVuayBsaWtlOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLXRoaXMgbGluZSBoYXMgc29tZSAte2l9bnQte2VyZX1zdGkte25nfSB0ZXh0IG9uIGl0CisrdGhpcyBsaW5lIGhhcyBzb21lICt7ZmF9bnQre2F9c3RpK3tjfSB0ZXh0IG9uIGl0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aGljaCBpcyBsZXNzIHJlYWRhYmxlIHRoYW4gdGhlIGN1cnJlbnQgb3V0cHV0LgorCisyLiBUaGUgbXVsdGktbGluZSBtYXRjaGluZyBhc3N1bWVzIHRoYXQgbGluZXMgaW4gdGhlIHByZS0gYW5kIHBvc3QtaW1hZ2UKKyAgIG1hdGNoIGJ5IHBvc2l0aW9uLiBUaGlzIGlzIG9mdGVuIHRoZSBjYXNlLCBidXQgY2FuIGJlIGZvb2xlZCB3aGVuIGEKKyAgIGxpbmUgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0b3AgYW5kIGEgbmV3IG9uZSBhZGRlZCBhdCB0aGUgYm90dG9tIChvcgorICAgdmljZSB2ZXJzYSkuIFVubGVzcyB0aGUgbGluZXMgaW4gdGhlIG1pZGRsZSBhcmUgYWxzbyBjaGFuZ2VkLCBkaWZmcworICAgd2lsbCBzaG93IHRoaXMgYXMgdHdvIGh1bmtzLCBhbmQgaXQgd2lsbCBub3QgZ2V0IGhpZ2hsaWdodGVkIGF0IGFsbAorICAgKHdoaWNoIGlzIGdvb2QpLiBCdXQgaWYgdGhlIGxpbmVzIGluIHRoZSBtaWRkbGUgYXJlIGNoYW5nZWQsIHRoZQorICAgaGlnaGxpZ2h0aW5nIGNhbiBiZSBtaXNsZWFkaW5nLiBIZXJlJ3MgYSBwYXRob2xvZ2ljYWwgY2FzZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1vbmUKKy10d28KKy10aHJlZQorLWZvdXIKKyt0d28gMgorK3RocmVlIDMKKytmb3VyIDQKKytmaXZlIDUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHdoaWNoIGdldHMgaGlnaGxpZ2h0ZWQgYXM6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistb25lCistdC17d299CistdGhyZWUKKy1mLXtvdXJ9CisrdHdvIDIKKyt0K3tocmVlIDN9CisrZm91ciA0CisrZit7aXZlIDV9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICBiZWNhdXNlIGl0IG1hdGNoZXMgInR3byIgdG8gInRocmVlIDMiLCBhbmQgc28gZm9ydGguIEl0IHdvdWxkIGJlCisgICBuaWNlciBhczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1vbmUKKy10d28KKy10aHJlZQorLWZvdXIKKyt0d28gK3syfQorK3RocmVlICt7M30KKytmb3VyICt7NH0KKytmaXZlIDUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIHdoaWNoIHdvdWxkIHByb2JhYmx5IGludm9sdmUgcHJlLW1hdGNoaW5nIHRoZSBsaW5lcyBpbnRvIHBhaXJzCisgICBhY2NvcmRpbmcgdG8gc29tZSBoZXVyaXN0aWMuCmRpZmYgLS1naXQgYS9jb250cmliL2RpZmYtaGlnaGxpZ2h0L2RpZmYtaGlnaGxpZ2h0IGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9kaWZmLWhpZ2hsaWdodApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZmVmYzMxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9kaWZmLWhpZ2hsaWdodC9kaWZmLWhpZ2hsaWdodApAQCAtMCwwICsxLDIxOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSA1LjAwODsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKK3VzZSBzdHJpY3Q7CisKKyMgSGlnaGxpZ2h0IGJ5IHJldmVyc2luZyBmb3JlZ3JvdW5kIGFuZCBiYWNrZ3JvdW5kLiBZb3UgY291bGQgZG8KKyMgb3RoZXIgdGhpbmdzIGxpa2UgYm9sZCBvciB1bmRlcmxpbmUgaWYgeW91IHByZWZlci4KK215IEBPTERfSElHSExJR0hUID0gKAorCWNvbG9yX2NvbmZpZygnY29sb3IuZGlmZi1oaWdobGlnaHQub2xkbm9ybWFsJyksCisJY29sb3JfY29uZmlnKCdjb2xvci5kaWZmLWhpZ2hsaWdodC5vbGRoaWdobGlnaHQnLCAiXHgxYls3bSIpLAorCWNvbG9yX2NvbmZpZygnY29sb3IuZGlmZi1oaWdobGlnaHQub2xkcmVzZXQnLCAiXHgxYlsyN20iKQorKTsKK215IEBORVdfSElHSExJR0hUID0gKAorCWNvbG9yX2NvbmZpZygnY29sb3IuZGlmZi1oaWdobGlnaHQubmV3bm9ybWFsJywgJE9MRF9ISUdITElHSFRbMF0pLAorCWNvbG9yX2NvbmZpZygnY29sb3IuZGlmZi1oaWdobGlnaHQubmV3aGlnaGxpZ2h0JywgJE9MRF9ISUdITElHSFRbMV0pLAorCWNvbG9yX2NvbmZpZygnY29sb3IuZGlmZi1oaWdobGlnaHQubmV3cmVzZXQnLCAkT0xEX0hJR0hMSUdIVFsyXSkKKyk7CisKK215ICRSRVNFVCA9ICJceDFiW20iOworbXkgJENPTE9SID0gcXIvXHgxYlxbWzAtOTtdKm0vOworbXkgJEJPUklORyA9IHFyLyRDT0xPUnxccy87CisKK215IEByZW1vdmVkOworbXkgQGFkZGVkOworbXkgJGluX2h1bms7CisKKyMgU29tZSBzY3JpcHRzIG1heSBub3QgcmVhbGl6ZSB0aGF0IFNJR1BJUEUgaXMgYmVpbmcgaWdub3JlZCB3aGVuIGxhdW5jaGluZyB0aGUKKyMgcGFnZXItLWZvciBpbnN0YW5jZSBzY3JpcHRzIHdyaXR0ZW4gaW4gUHl0aG9uLgorJFNJR3tQSVBFfSA9ICdERUZBVUxUJzsKKword2hpbGUgKDw+KSB7CisJaWYgKCEkaW5faHVuaykgeworCQlwcmludDsKKwkJJGluX2h1bmsgPSAvXiRDT0xPUipcQC87CisJfQorCWVsc2lmICgvXiRDT0xPUiotLykgeworCQlwdXNoIEByZW1vdmVkLCAkXzsKKwl9CisJZWxzaWYgKC9eJENPTE9SKlwrLykgeworCQlwdXNoIEBhZGRlZCwgJF87CisJfQorCWVsc2UgeworCQlzaG93X2h1bmsoXEByZW1vdmVkLCBcQGFkZGVkKTsKKwkJQHJlbW92ZWQgPSAoKTsKKwkJQGFkZGVkID0gKCk7CisKKwkJcHJpbnQ7CisJCSRpbl9odW5rID0gL14kQ09MT1IqW1xAIF0vOworCX0KKworCSMgTW9zdCBvZiB0aGUgdGltZSB0aGVyZSBpcyBlbm91Z2ggb3V0cHV0IHRvIGtlZXAgdGhpbmdzIHN0cmVhbWluZywKKwkjIGJ1dCBmb3Igc29tZXRoaW5nIGxpa2UgImdpdCBsb2cgLVNmb28iLCB5b3UgY2FuIGdldCBvbmUgZWFybHkKKwkjIGNvbW1pdCBhbmQgdGhlbiBtYW55IHNlY29uZHMgb2Ygbm90aGluZy4gV2Ugd2FudCB0byBzaG93CisJIyB0aGF0IG9uZSBjb21taXQgYXMgc29vbiBhcyBwb3NzaWJsZS4KKwkjCisJIyBTaW5jZSB3ZSBjYW4gcmVjZWl2ZSBhcmJpdHJhcnkgaW5wdXQsIHRoZXJlJ3Mgbm8gb3B0aW1hbAorCSMgcGxhY2UgdG8gZmx1c2guIEZsdXNoaW5nIG9uIGEgYmxhbmsgbGluZSBpcyBhIGhldXJpc3RpYyB0aGF0CisJIyBoYXBwZW5zIHRvIG1hdGNoIGdpdC1sb2cgb3V0cHV0LgorCWlmICghbGVuZ3RoKSB7CisJCWxvY2FsICR8ID0gMTsKKwl9Cit9CisKKyMgRmx1c2ggYW55IHF1ZXVlZCBodW5rICh0aGlzIGNhbiBoYXBwZW4gd2hlbiB0aGVyZSBpcyBubyB0cmFpbGluZyBjb250ZXh0IGluCisjIHRoZSBmaW5hbCBkaWZmIG9mIHRoZSBpbnB1dCkuCitzaG93X2h1bmsoXEByZW1vdmVkLCBcQGFkZGVkKTsKKworZXhpdCAwOworCisjIElkZWFsbHkgd2Ugd291bGQgZmVlZCB0aGUgZGVmYXVsdCBhcyBhIGh1bWFuLXJlYWRhYmxlIGNvbG9yIHRvCisjIGdpdC1jb25maWcgYXMgdGhlIGZhbGxiYWNrIHZhbHVlLiBCdXQgZGlmZi1oaWdobGlnaHQgZG9lcworIyBub3Qgb3RoZXJ3aXNlIGRlcGVuZCBvbiBnaXQgYXQgYWxsLCBhbmQgdGhlcmUgYXJlIHJlcG9ydHMKKyMgb2YgaXQgYmVpbmcgdXNlZCBpbiBvdGhlciBzZXR0aW5ncy4gTGV0J3MgaGFuZGxlIG91ciBvd24KKyMgZmFsbGJhY2ssIHdoaWNoIG1lYW5zIHdlIHdpbGwgd29yayBldmVuIGlmIGdpdCBjYW4ndCBiZSBydW4uCitzdWIgY29sb3JfY29uZmlnIHsKKwlteSAoJGtleSwgJGRlZmF1bHQpID0gQF87CisJbXkgJHMgPSBgZ2l0IGNvbmZpZyAtLWdldC1jb2xvciAka2V5IDI+L2Rldi9udWxsYDsKKwlyZXR1cm4gbGVuZ3RoKCRzKSA/ICRzIDogJGRlZmF1bHQ7Cit9CisKK3N1YiBzaG93X2h1bmsgeworCW15ICgkYSwgJGIpID0gQF87CisKKwkjIElmIG9uZSBzaWRlIGlzIGVtcHR5LCB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gY29tcGFyZSBvciBoaWdobGlnaHQuCisJaWYgKCFAJGEgfHwgIUAkYikgeworCQlwcmludCBAJGEsIEAkYjsKKwkJcmV0dXJuOworCX0KKworCSMgSWYgd2UgaGF2ZSBtaXNtYXRjaGVkIG51bWJlcnMgb2YgbGluZXMgb24gZWFjaCBzaWRlLCB3ZSBjb3VsZCB0cnkgdG8KKwkjIGJlIGNsZXZlciBhbmQgbWF0Y2ggdXAgc2ltaWxhciBsaW5lcy4gQnV0IGZvciBub3cgd2UgYXJlIHNpbXBsZSBhbmQKKwkjIHN0dXBpZCwgYW5kIG9ubHkgaGFuZGxlIG11bHRpLWxpbmUgaHVua3MgdGhhdCByZW1vdmUgYW5kIGFkZCB0aGUgc2FtZQorCSMgbnVtYmVyIG9mIGxpbmVzLgorCWlmIChAJGEgIT0gQCRiKSB7CisJCXByaW50IEAkYSwgQCRiOworCQlyZXR1cm47CisJfQorCisJbXkgQHF1ZXVlOworCWZvciAobXkgJGkgPSAwOyAkaSA8IEAkYTsgJGkrKykgeworCQlteSAoJHJtLCAkYWRkKSA9IGhpZ2hsaWdodF9wYWlyKCRhLT5bJGldLCAkYi0+WyRpXSk7CisJCXByaW50ICRybTsKKwkJcHVzaCBAcXVldWUsICRhZGQ7CisJfQorCXByaW50IEBxdWV1ZTsKK30KKworc3ViIGhpZ2hsaWdodF9wYWlyIHsKKwlteSBAYSA9IHNwbGl0X2xpbmUoc2hpZnQpOworCW15IEBiID0gc3BsaXRfbGluZShzaGlmdCk7CisKKwkjIEZpbmQgY29tbW9uIHByZWZpeCwgdGFraW5nIGNhcmUgdG8gc2tpcCBhbnkgYW5zaQorCSMgY29sb3IgY29kZXMuCisJbXkgJHNlZW5fcGx1c21pbnVzOworCW15ICgkcGEsICRwYikgPSAoMCwgMCk7CisJd2hpbGUgKCRwYSA8IEBhICYmICRwYiA8IEBiKSB7CisJCWlmICgkYVskcGFdID1+IC8kQ09MT1IvKSB7CisJCQkkcGErKzsKKwkJfQorCQllbHNpZiAoJGJbJHBiXSA9fiAvJENPTE9SLykgeworCQkJJHBiKys7CisJCX0KKwkJZWxzaWYgKCRhWyRwYV0gZXEgJGJbJHBiXSkgeworCQkJJHBhKys7CisJCQkkcGIrKzsKKwkJfQorCQllbHNpZiAoISRzZWVuX3BsdXNtaW51cyAmJiAkYVskcGFdIGVxICctJyAmJiAkYlskcGJdIGVxICcrJykgeworCQkJJHNlZW5fcGx1c21pbnVzID0gMTsKKwkJCSRwYSsrOworCQkJJHBiKys7CisJCX0KKwkJZWxzZSB7CisJCQlsYXN0OworCQl9CisJfQorCisJIyBGaW5kIGNvbW1vbiBzdWZmaXgsIGlnbm9yaW5nIGNvbG9ycy4KKwlteSAoJHNhLCAkc2IpID0gKCQjYSwgJCNiKTsKKwl3aGlsZSAoJHNhID49ICRwYSAmJiAkc2IgPj0gJHBiKSB7CisJCWlmICgkYVskc2FdID1+IC8kQ09MT1IvKSB7CisJCQkkc2EtLTsKKwkJfQorCQllbHNpZiAoJGJbJHNiXSA9fiAvJENPTE9SLykgeworCQkJJHNiLS07CisJCX0KKwkJZWxzaWYgKCRhWyRzYV0gZXEgJGJbJHNiXSkgeworCQkJJHNhLS07CisJCQkkc2ItLTsKKwkJfQorCQllbHNlIHsKKwkJCWxhc3Q7CisJCX0KKwl9CisKKwlpZiAoaXNfcGFpcl9pbnRlcmVzdGluZyhcQGEsICRwYSwgJHNhLCBcQGIsICRwYiwgJHNiKSkgeworCQlyZXR1cm4gaGlnaGxpZ2h0X2xpbmUoXEBhLCAkcGEsICRzYSwgXEBPTERfSElHSExJR0hUKSwKKwkJICAgICAgIGhpZ2hsaWdodF9saW5lKFxAYiwgJHBiLCAkc2IsIFxATkVXX0hJR0hMSUdIVCk7CisJfQorCWVsc2UgeworCQlyZXR1cm4gam9pbignJywgQGEpLAorCQkgICAgICAgam9pbignJywgQGIpOworCX0KK30KKworc3ViIHNwbGl0X2xpbmUgeworCWxvY2FsICRfID0gc2hpZnQ7CisJcmV0dXJuIHV0Zjg6OmRlY29kZSgkXykgPworCQltYXAgeyB1dGY4OjplbmNvZGUoJF8pOyAkXyB9CisJCQltYXAgeyAvJENPTE9SLyA/ICRfIDogKHNwbGl0IC8vKSB9CisJCQlzcGxpdCAvKCRDT0xPUispLyA6CisJCW1hcCB7IC8kQ09MT1IvID8gJF8gOiAoc3BsaXQgLy8pIH0KKwkJc3BsaXQgLygkQ09MT1IrKS87Cit9CisKK3N1YiBoaWdobGlnaHRfbGluZSB7CisJbXkgKCRsaW5lLCAkcHJlZml4LCAkc3VmZml4LCAkdGhlbWUpID0gQF87CisKKwlteSAkc3RhcnQgPSBqb2luKCcnLCBAeyRsaW5lfVswLi4oJHByZWZpeC0xKV0pOworCW15ICRtaWQgPSBqb2luKCcnLCBAeyRsaW5lfVskcHJlZml4Li4kc3VmZml4XSk7CisJbXkgJGVuZCA9IGpvaW4oJycsIEB7JGxpbmV9Wygkc3VmZml4KzEpLi4kIyRsaW5lXSk7CisKKwkjIElmIHdlIGhhdmUgYSAibm9ybWFsIiBjb2xvciBzcGVjaWZpZWQsIHRoZW4gdGFrZSBvdmVyIHRoZSB3aG9sZSBsaW5lLgorCSMgT3RoZXJ3aXNlLCB3ZSB0cnkgdG8ganVzdCBtYW5pcHVsYXRlIHRoZSBoaWdobGlnaHRlZCBiaXRzLgorCWlmIChkZWZpbmVkICR0aGVtZS0+WzBdKSB7CisJCXMvJENPTE9SLy9nIGZvciAoJHN0YXJ0LCAkbWlkLCAkZW5kKTsKKwkJY2hvbXAgJGVuZDsKKwkJcmV0dXJuIGpvaW4oJycsCisJCQkkdGhlbWUtPlswXSwgJHN0YXJ0LCAkUkVTRVQsCisJCQkkdGhlbWUtPlsxXSwgJG1pZCwgJFJFU0VULAorCQkJJHRoZW1lLT5bMF0sICRlbmQsICRSRVNFVCwKKwkJCSJcbiIKKwkJKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gam9pbignJywKKwkJCSRzdGFydCwKKwkJCSR0aGVtZS0+WzFdLCAkbWlkLCAkdGhlbWUtPlsyXSwKKwkJCSRlbmQKKwkJKTsKKwl9Cit9CisKKyMgUGFpcnMgYXJlIGludGVyZXN0aW5nIHRvIGhpZ2hsaWdodCBvbmx5IGlmIHdlIGFyZSBnb2luZyB0byBlbmQgdXAKKyMgaGlnaGxpZ2h0aW5nIGEgc3Vic2V0IChpLmUuLCBub3QgdGhlIHdob2xlIGxpbmUpLiBPdGhlcndpc2UsIHRoZSBoaWdobGlnaHRpbmcKKyMgaXMganVzdCB1c2VsZXNzIG5vaXNlLiBXZSBjYW4gZGV0ZWN0IHRoaXMgYnkgZmluZGluZyBlaXRoZXIgYSBtYXRjaGluZyBwcmVmaXgKKyMgb3Igc3VmZml4IChkaXNyZWdhcmRpbmcgYm9yaW5nIGJpdHMgbGlrZSB3aGl0ZXNwYWNlIGFuZCBjb2xvcml6YXRpb24pLgorc3ViIGlzX3BhaXJfaW50ZXJlc3RpbmcgeworCW15ICgkYSwgJHBhLCAkc2EsICRiLCAkcGIsICRzYikgPSBAXzsKKwlteSAkcHJlZml4X2EgPSBqb2luKCcnLCBAJGFbMC4uKCRwYS0xKV0pOworCW15ICRwcmVmaXhfYiA9IGpvaW4oJycsIEAkYlswLi4oJHBiLTEpXSk7CisJbXkgJHN1ZmZpeF9hID0gam9pbignJywgQCRhWygkc2ErMSkuLiQjJGFdKTsKKwlteSAkc3VmZml4X2IgPSBqb2luKCcnLCBAJGJbKCRzYisxKS4uJCMkYl0pOworCisJcmV0dXJuICRwcmVmaXhfYSAhfiAvXiRDT0xPUiotJEJPUklORyokLyB8fAorCSAgICAgICAkcHJlZml4X2IgIX4gL14kQ09MT1IqXCskQk9SSU5HKiQvIHx8CisJICAgICAgICRzdWZmaXhfYSAhfiAvXiRCT1JJTkcqJC8gfHwKKwkgICAgICAgJHN1ZmZpeF9iICF+IC9eJEJPUklORyokLzsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZW1hY3MvLmdpdGlnbm9yZSBiL2NvbnRyaWIvZW1hY3MvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTMxZDk4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9lbWFjcy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKKyouZWxjCmRpZmYgLS1naXQgYS9jb250cmliL2VtYWNzL01ha2VmaWxlIGIvY29udHJpYi9lbWFjcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGQ5MzEyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9lbWFjcy9NYWtlZmlsZQpAQCAtMCwwICsxLDIxIEBACisjIyBCdWlsZCBhbmQgaW5zdGFsbCBzdHVmZgorCitFTUFDUyA9IGVtYWNzCisKK0VMQyA9IGdpdC5lbGMgZ2l0LWJsYW1lLmVsYworSU5TVEFMTCA/PSBpbnN0YWxsCitJTlNUQUxMX0VMQyA9ICQoSU5TVEFMTCkgLW0gNjQ0CitwcmVmaXggPz0gJChIT01FKQorZW1hY3NkaXIgPSAkKHByZWZpeCkvc2hhcmUvZW1hY3Mvc2l0ZS1saXNwCitSTSA/PSBybSAtZgorCithbGw6ICQoRUxDKQorCitpbnN0YWxsOiBhbGwKKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikkKGVtYWNzZGlyKQorCSQoSU5TVEFMTF9FTEMpICQoRUxDOi5lbGM9LmVsKSAkKEVMQykgJChERVNURElSKSQoZW1hY3NkaXIpCisKKyUuZWxjOiAlLmVsCisJJChFTUFDUykgLWJhdGNoIC1mIGJhdGNoLWJ5dGUtY29tcGlsZSAkPAorCitjbGVhbjo7ICQoUk0pICQoRUxDKQpkaWZmIC0tZ2l0IGEvY29udHJpYi9lbWFjcy9SRUFETUUgYi9jb250cmliL2VtYWNzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjM2OGJkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9lbWFjcy9SRUFETUUKQEAgLTAsMCArMSwzOSBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdmFyaW91cyBtb2R1bGVzIGZvciBFbWFjcyBzdXBwb3J0LgorCitUbyBtYWtlIHRoZSBtb2R1bGVzIGF2YWlsYWJsZSB0byBFbWFjcywgeW91IHNob3VsZCBhZGQgdGhpcyBkaXJlY3RvcnkKK3RvIHlvdXIgbG9hZC1wYXRoLCBhbmQgdGhlbiByZXF1aXJlIHRoZSBtb2R1bGVzIHlvdSB3YW50LiBUaGlzIGNhbiBiZQorZG9uZSBieSBhZGRpbmcgdG8geW91ciAuZW1hY3Mgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAoYWRkLXRvLWxpc3QgJ2xvYWQtcGF0aCAiLi4uL2dpdC9jb250cmliL2VtYWNzIikKKyAgKHJlcXVpcmUgJ2dpdCkKKyAgKHJlcXVpcmUgJ2dpdC1ibGFtZSkKKworCitUaGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIGF2YWlsYWJsZToKKworKiBnaXQuZWw6CisKKyAgU3RhdHVzIG1hbmFnZXIgdGhhdCBkaXNwbGF5cyB0aGUgc3RhdGUgb2YgYWxsIHRoZSBmaWxlcyBvZiB0aGUKKyAgcHJvamVjdCwgYW5kIHByb3ZpZGVzIGVhc3kgYWNjZXNzIHRvIHRoZSBtb3N0IGZyZXF1ZW50bHkgdXNlZCBnaXQKKyAgY29tbWFuZHMuIFRoZSB1c2VyIGludGVyZmFjZSBpcyBhcyBmYXIgYXMgcG9zc2libGUgY29tcGF0aWJsZSB3aXRoCisgIHRoZSBwY2wtY3ZzIG1vZGUuIEl0IGNhbiBiZSBzdGFydGVkIHdpdGggYE0teCBnaXQtc3RhdHVzJy4KKworKiBnaXQtYmxhbWUuZWw6CisKKyAgRW1hY3MgaW1wbGVtZW50YXRpb24gb2YgaW5jcmVtZW50YWwgZ2l0LWJsYW1lLiAgV2hlbiB5b3UgdHVybiBpdCBvbgorICB3aGlsZSB2aWV3aW5nIGEgZmlsZSwgdGhlIGVkaXRvciBidWZmZXIgd2lsbCBiZSB1cGRhdGVkIGJ5IHNldHRpbmcKKyAgdGhlIGJhY2tncm91bmQgb2YgaW5kaXZpZHVhbCBsaW5lcyB0byBhIGNvbG9yIHRoYXQgcmVmbGVjdHMgd2hpY2gKKyAgY29tbWl0IGl0IGNvbWVzIGZyb20uICBBbmQgd2hlbiB5b3UgbW92ZSBhcm91bmQgdGhlIGJ1ZmZlciwgYQorICBvbmUtbGluZSBzdW1tYXJ5IHdpbGwgYmUgc2hvd24gaW4gdGhlIGVjaG8gYXJlYS4KKworKiB2Yy1naXQuZWw6CisKKyAgVGhpcyBmaWxlIHVzZWQgdG8gY29udGFpbiB0aGUgVkMtbW9kZSBiYWNrZW5kIGZvciBnaXQsIGJ1dCBpdCBpcyBubworICBsb25nZXIgZGlzdHJpYnV0ZWQgd2l0aCBnaXQuIEl0IGlzIG5vdyBtYWludGFpbmVkIGFzIHBhcnQgb2YgRW1hY3MKKyAgYW5kIGluY2x1ZGVkIGluIHN0YW5kYXJkIEVtYWNzIGRpc3RyaWJ1dGlvbnMgc3RhcnRpbmcgZnJvbSB2ZXJzaW9uCisgIDIyLjIuCisKKyAgSWYgeW91IGhhdmUgYW4gZWFybGllciBFbWFjcyB2ZXJzaW9uLCB1cGdyYWRpbmcgdG8gRW1hY3MgMjIgaXMKKyAgcmVjb21tZW5kZWQsIHNpbmNlIHRoZSBWQyBtb2RlIGluIG9sZGVyIEVtYWNzIGlzIG5vdCBnZW5lcmljIGVub3VnaAorICB0byBiZSBhYmxlIHRvIHN1cHBvcnQgZ2l0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIsIGFuZCBubyBhdHRlbXB0IGhhcworICBiZWVuIG1hZGUgdG8gYmFja3BvcnQgdmMtZ2l0LmVsLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9lbWFjcy9naXQtYmxhbWUuZWwgYi9jb250cmliL2VtYWNzL2dpdC1ibGFtZS5lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjcxZjZjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9lbWFjcy9naXQtYmxhbWUuZWwKQEAgLTAsMCArMSw0ODQgQEAKKzs7OyBnaXQtYmxhbWUuZWwgLS0tIE1pbm9yIG1vZGUgZm9yIGluY3JlbWVudGFsIGJsYW1lIGZvciBHaXQgIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQorOzsKKzs7IENvcHlyaWdodCAoQykgMjAwNyAgRGF2aWQgS8OlZ2VkYWwKKzs7Cis7OyBBdXRob3JzOiAgICBEYXZpZCBLw6VnZWRhbCA8ZGF2aWRrQGx5c2F0b3IubGl1LnNlPgorOzsgQ3JlYXRlZDogICAgMzEgSmFuIDIwMDcKKzs7IE1lc3NhZ2UtSUQ6IDw4N2lyZW4ydnF4LmZzZkBtb3JwaGV1cy5sb2NhbD4KKzs7IExpY2Vuc2U6ICAgIEdQTAorOzsgS2V5d29yZHM6ICAgZ2l0LCB2ZXJzaW9uIGNvbnRyb2wsIHJlbGVhc2UgbWFuYWdlbWVudAorOzsKKzs7IENvbXBhdGliaWxpdHk6IEVtYWNzMjEsIEVtYWNzMjIgYW5kIEVtYWNzQ1ZTCis7OyAgICAgICAgICAgICAgICBHaXQgMS41IGFuZCB1cAorCis7OyBUaGlzIGZpbGUgaXMgKk5PVCogcGFydCBvZiBHTlUgRW1hY3MuCis7OyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgR05VIEVtYWNzLgorCis7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7OyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOzsgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzs7IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCis7OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCis7OyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCis7OyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCis7OyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCis7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKzs7IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKzs7IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCis7OyBNQSAwMjExMS0xMzA3IFVTQQorCis7OyBodHRwOi8vd3d3LmZzZi5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKworCis7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cis7OworOzs7IENvbW1lbnRhcnk6Cis7OworOzsgSGVyZSBpcyBhbiBFbWFjcyBpbXBsZW1lbnRhdGlvbiBvZiBpbmNyZW1lbnRhbCBnaXQtYmxhbWUuICBXaGVuIHlvdQorOzsgdHVybiBpdCBvbiB3aGlsZSB2aWV3aW5nIGEgZmlsZSwgdGhlIGVkaXRvciBidWZmZXIgd2lsbCBiZSB1cGRhdGVkIGJ5Cis7OyBzZXR0aW5nIHRoZSBiYWNrZ3JvdW5kIG9mIGluZGl2aWR1YWwgbGluZXMgdG8gYSBjb2xvciB0aGF0IHJlZmxlY3RzCis7OyB3aGljaCBjb21taXQgaXQgY29tZXMgZnJvbS4gIEFuZCB3aGVuIHlvdSBtb3ZlIGFyb3VuZCB0aGUgYnVmZmVyLCBhCis7OyBvbmUtbGluZSBzdW1tYXJ5IHdpbGwgYmUgc2hvd24gaW4gdGhlIGVjaG8gYXJlYS4KKworOzs7IEluc3RhbGxhdGlvbjoKKzs7Cis7OyBUbyB1c2UgdGhpcyBwYWNrYWdlLCBwdXQgaXQgc29tZXdoZXJlIGluIGBsb2FkLXBhdGgnIChvciBhZGQKKzs7IGRpcmVjdG9yeSB3aXRoIGdpdC1ibGFtZS5lbCB0byBgbG9hZC1wYXRoJyksIGFuZCBhZGQgdGhlIGZvbGxvd2luZworOzsgbGluZSB0byB5b3VyIC5lbWFjczoKKzs7Cis7OyAgICAocmVxdWlyZSAnZ2l0LWJsYW1lKQorOzsKKzs7IElmIHlvdSBkbyBub3Qgd2FudCB0byBsb2FkIHRoaXMgcGFja2FnZSBiZWZvcmUgaXQgaXMgbmVjZXNzYXJ5LCB5b3UKKzs7IGNhbiBtYWtlIHVzZSBvZiB0aGUgYGF1dG9sb2FkJyBmZWF0dXJlLCBlLmcuIGJ5IGFkZGluZyB0byB5b3VyIC5lbWFjcworOzsgdGhlIGZvbGxvd2luZyBsaW5lcworOzsKKzs7ICAgIChhdXRvbG9hZCAnZ2l0LWJsYW1lLW1vZGUgImdpdC1ibGFtZSIKKzs7ICAgICAgICAgICAgICAiTWlub3IgbW9kZSBmb3IgaW5jcmVtZW50YWwgYmxhbWUgZm9yIEdpdC4iIHQpCis7OworOzsgVGhlbiBmaXJzdCB1c2Ugb2YgYE0teCBnaXQtYmxhbWUtbW9kZScgd291bGQgbG9hZCB0aGUgcGFja2FnZS4KKworOzs7IENvbXBhdGliaWxpdHk6Cis7OworOzsgSXQgcmVxdWlyZXMgR05VIEVtYWNzIDIxIG9yIGxhdGVyIGFuZCBHaXQgMS41LjAgYW5kIHVwCis7OworOzsgSWYgeW91J2FyZSB1c2luZyBFbWFjcyAyMCwgdHJ5IGNoYW5naW5nIHRoaXM6Cis7OworOzsgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZsICdmYWNlIChsaXN0IDpiYWNrZ3JvdW5kCis7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkciAoYXNzcSAnY29sb3IgKGNkZGRkciBpbmZvKSkpKSkKKzs7Cis7OyB0bworOzsKKzs7ICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92bCAnZmFjZSAoY29ucyAnYmFja2dyb3VuZC1jb2xvcgorOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZHIgKGFzc3EgJ2NvbG9yIChjZGRkZHIgaW5mbykpKSkpCisKKworOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OworOzsKKzs7OyBDb2RlOgorCisoZXZhbC13aGVuLWNvbXBpbGUgKHJlcXVpcmUgJ2NsKSkJCQkgICAgICA7IHRvIHVzZSBgcHVzaCcsIGBwb3AnCisocmVxdWlyZSAnZm9ybWF0LXNwZWMpCisKKyhkZWZmYWNlIGdpdC1ibGFtZS1wcmVmaXgtZmFjZQorICAnKCgoKGJhY2tncm91bmQgZGFyaykpICg6Zm9yZWdyb3VuZCAiZ3JheSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOmJhY2tncm91bmQgImJsYWNrIikpCisgICAgKCgoYmFja2dyb3VuZCBsaWdodCkpICg6Zm9yZWdyb3VuZCAiZ3JheSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpiYWNrZ3JvdW5kICJ3aGl0ZSIpKQorICAgICh0ICg6d2VpZ2h0IGJvbGQpKSkKKyAgIlRoZSBmYWNlIHVzZWQgZm9yIHRoZSBoYXNoIHByZWZpeC4iCisgIDpncm91cCAnZ2l0LWJsYW1lKQorCisoZGVmZ3JvdXAgZ2l0LWJsYW1lIG5pbAorICAiQSBtaW5vciBtb2RlIHNob3dpbmcgR2l0IGJsYW1lIGluZm9ybWF0aW9uLiIKKyAgOmdyb3VwICdnaXQKKyAgOmxpbmsgJyhmdW5jdGlvbi1saW5rIGdpdC1ibGFtZS1tb2RlKSkKKworCisoZGVmY3VzdG9tIGdpdC1ibGFtZS11c2UtY29sb3JzIHQKKyAgIlVzZSBjb2xvcnMgdG8gaW5kaWNhdGUgY29tbWl0cyBpbiBgZ2l0LWJsYW1lLW1vZGUnLiIKKyAgOnR5cGUgJ2Jvb2xlYW4KKyAgOmdyb3VwICdnaXQtYmxhbWUpCisKKyhkZWZjdXN0b20gZ2l0LWJsYW1lLXByZWZpeC1mb3JtYXQKKyAgIiVoICUyMEE6IgorICAiVGhlIGZvcm1hdCBvZiB0aGUgcHJlZml4IGFkZGVkIHRvIGVhY2ggbGluZSBpbiBgZ2l0LWJsYW1lJworbW9kZS4gVGhlIGZvcm1hdCBpcyBwYXNzZWQgdG8gYGZvcm1hdC1zcGVjJyB3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGtleXM6CisKKyAgJWggLSB0aGUgYWJicmV2aWF0ZWQgaGFzaAorICAlSCAtIHRoZSBmdWxsIGhhc2gKKyAgJWEgLSB0aGUgYXV0aG9yIG5hbWUKKyAgJUEgLSB0aGUgYXV0aG9yIGVtYWlsCisgICVjIC0gdGhlIGNvbW1pdHRlciBuYW1lCisgICVDIC0gdGhlIGNvbW1pdHRlciBlbWFpbAorICAlcyAtIHRoZSBjb21taXQgc3VtbWFyeQorIgorICA6Z3JvdXAgJ2dpdC1ibGFtZSkKKworKGRlZmN1c3RvbSBnaXQtYmxhbWUtbW91c2VvdmVyLWZvcm1hdAorICAiJWggJWEgJUE6ICVzIgorICAiVGhlIGZvcm1hdCBvZiB0aGUgZGVzY3JpcHRpb24gc2hvd24gd2hlbiBwb2ludGluZyBhdCBhIGxpbmUgaW4KK2BnaXQtYmxhbWUnIG1vZGUuIFRoZSBmb3JtYXQgc3RyaW5nIGlzIHBhc3NlZCB0byBgZm9ybWF0LXNwZWMnCit3aXRoIHRoZSBmb2xsb3dpbmcgZm9ybWF0IGtleXM6CisKKyAgJWggLSB0aGUgYWJicmV2aWF0ZWQgaGFzaAorICAlSCAtIHRoZSBmdWxsIGhhc2gKKyAgJWEgLSB0aGUgYXV0aG9yIG5hbWUKKyAgJUEgLSB0aGUgYXV0aG9yIGVtYWlsCisgICVjIC0gdGhlIGNvbW1pdHRlciBuYW1lCisgICVDIC0gdGhlIGNvbW1pdHRlciBlbWFpbAorICAlcyAtIHRoZSBjb21taXQgc3VtbWFyeQorIgorICA6Z3JvdXAgJ2dpdC1ibGFtZSkKKworCisoZGVmdW4gZ2l0LWJsYW1lLWNvbG9yLXNjYWxlICgmcmVzdCBlbGVtZW50cykKKyAgIkdpdmVuIGEgbGlzdCwgcmV0dXJucyBhIGxpc3Qgb2YgdHJpcGxlcyBmb3JtZWQgd2l0aCBlYWNoCitlbGVtZW50cyBvZiB0aGUgbGlzdC4KKworYSBiID0+IGJiYiBiYmEgYmFiIGJhYSBhYmIgYWJhIGFhYSBhYWIiCisgIChsZXQgKHJlc3VsdCkKKyAgICAoZG9saXN0IChhIGVsZW1lbnRzKQorICAgICAgKGRvbGlzdCAoYiBlbGVtZW50cykKKyAgICAgICAgKGRvbGlzdCAoYyBlbGVtZW50cykKKyAgICAgICAgICAoc2V0cSByZXN1bHQgKGNvbnMgKGZvcm1hdCAiIyVzJXMlcyIgYSBiIGMpIHJlc3VsdCkpKSkpCisgICAgcmVzdWx0KSkKKworOzsgKGdpdC1ibGFtZS1jb2xvci1zY2FsZSAiMGMiICIwNCIgIjI0IiAiMWMiICIyYyIgIjM0IiAiMTQiICIzYyIpID0+Cis7OyAoIiMzYzNjM2MiICIjM2MzYzE0IiAiIzNjM2MzNCIgIiMzYzNjMmMiICIjM2MzYzFjIiAiIzNjM2MyNCIKKzs7ICIjM2MzYzA0IiAiIzNjM2MwYyIgIiMzYzE0M2MiICIjM2MxNDE0IiAiIzNjMTQzNCIgIiMzYzE0MmMiIC4uLikKKworKGRlZm1hY3JvIGdpdC1ibGFtZS1yYW5kb20tcG9wIChsKQorICAiU2VsZWN0IGEgcmFuZG9tIGVsZW1lbnQgZnJvbSBMIGFuZCByZXR1cm5zIGl0LiBBbHNvIHJlbW92ZQorc2VsZWN0ZWQgZWxlbWVudCBmcm9tIGwuIgorICA7OyBvbmx5IHdvcmtzIG9uIGxpc3RzIHdpdGggdW5pcXVlIGVsZW1lbnRzCisgIGAobGV0ICgoZSAoZWx0ICxsIChyYW5kb20gKGxlbmd0aCAsbCkpKSkpCisgICAgIChzZXRxICxsIChyZW1vdmUgZSAsbCkpCisgICAgIGUpKQorCisoZGVmdmFyIGdpdC1ibGFtZS1sb2ctb25lbGluZS1mb3JtYXQKKyAgImZvcm1hdDpbJWNyXSAlY246ICVzIgorICAiKkZvcm1hdHRpbmcgb3B0aW9uIHVzZWQgZm9yIGRlc2NyaWJpbmcgY3VycmVudCBsaW5lIGluIHRoZSBtaW5pYnVmZmVyLgorCitUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHBhc3MgdG8gZ2l0IGxvZyAtLXByZXR0eT0gY29tbWFuZC1saW5lIG9wdGlvbiwKK2FuZCBkZXNjcmliZSB3aGljaCBjb21taXQgdGhlIGN1cnJlbnQgbGluZSB3YXMgbWFkZS4iKQorCisoZGVmdmFyIGdpdC1ibGFtZS1kYXJrLWNvbG9ycworICAoZ2l0LWJsYW1lLWNvbG9yLXNjYWxlICIwYyIgIjA0IiAiMjQiICIxYyIgIjJjIiAiMzQiICIxNCIgIjNjIikKKyAgIipMaXN0IG9mIGNvbG9ycyAoZm9ybWF0ICNSR0IpIHRvIHVzZSBpbiBhIGRhcmsgZW52aXJvbm1lbnQuCisKK1RvIGNoZWNrIG91dCB0aGUgbGlzdCwgZXZhbHVhdGUgKGxpc3QtY29sb3JzLWRpc3BsYXkgZ2l0LWJsYW1lLWRhcmstY29sb3JzKS4iKQorCisoZGVmdmFyIGdpdC1ibGFtZS1saWdodC1jb2xvcnMKKyAgKGdpdC1ibGFtZS1jb2xvci1zY2FsZSAiYzQiICJkNCIgImNjIiAiZGMiICJmNCIgImU0IiAiZmMiICJlYyIpCisgICIqTGlzdCBvZiBjb2xvcnMgKGZvcm1hdCAjUkdCKSB0byB1c2UgaW4gYSBsaWdodCBlbnZpcm9ubWVudC4KKworVG8gY2hlY2sgb3V0IHRoZSBsaXN0LCBldmFsdWF0ZSAobGlzdC1jb2xvcnMtZGlzcGxheSBnaXQtYmxhbWUtbGlnaHQtY29sb3JzKS4iKQorCisoZGVmdmFyIGdpdC1ibGFtZS1jb2xvcnMgJygpCisgICJDb2xvcnMgdXNlZCBieSBnaXQtYmxhbWUuIFRoZSBsaXN0IGlzIGJ1aWx0IG9uY2Ugd2hlbiBhY3RpdmF0aW5nIGdpdC1ibGFtZQorbWlub3IgbW9kZS4iKQorCisoZGVmdmFyIGdpdC1ibGFtZS1hbmNpZW50LWNvbG9yICJkYXJrIGdyZWVuIgorICAiKkNvbG9yIHRvIGJlIHVzZWQgZm9yIGFuY2llbnQgY29tbWl0LiIpCisKKyhkZWZ2YXIgZ2l0LWJsYW1lLWF1dG91cGRhdGUgdAorICAiKkF1dG9tYXRpY2FsbHkgdXBkYXRlIHRoZSBibGFtZSBkaXNwbGF5IHdoaWxlIGVkaXRpbmciKQorCisoZGVmdmFyIGdpdC1ibGFtZS1wcm9jIG5pbAorICAiVGhlIHJ1bm5pbmcgZ2l0LWJsYW1lIHByb2Nlc3MiKQorKG1ha2UtdmFyaWFibGUtYnVmZmVyLWxvY2FsICdnaXQtYmxhbWUtcHJvYykKKworKGRlZnZhciBnaXQtYmxhbWUtb3ZlcmxheXMgbmlsCisgICJUaGUgZ2l0LWJsYW1lIG92ZXJsYXlzIHVzZWQgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLiIpCisobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2dpdC1ibGFtZS1vdmVybGF5cykKKworKGRlZnZhciBnaXQtYmxhbWUtY2FjaGUgbmlsCisgICJBIGNhY2hlIG9mIGdpdC1ibGFtZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyIikKKyhtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnZ2l0LWJsYW1lLWNhY2hlKQorCisoZGVmdmFyIGdpdC1ibGFtZS1pZGxlLXRpbWVyIG5pbAorICAiQW4gaWRsZSB0aW1lciB0aGF0IHVwZGF0ZXMgdGhlIGJsYW1lIikKKyhtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnZ2l0LWJsYW1lLWNhY2hlKQorCisoZGVmdmFyIGdpdC1ibGFtZS11cGRhdGUtcXVldWUgbmlsCisgICJBIHF1ZXVlIG9mIHVwZGF0ZSByZXF1ZXN0cyIpCisobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2dpdC1ibGFtZS11cGRhdGUtcXVldWUpCisKKzs7IEZJWE1FOiBkb2NzdHJpbmdzCisoZGVmdmFyIGdpdC1ibGFtZS1maWxlIG5pbCkKKyhkZWZ2YXIgZ2l0LWJsYW1lLWN1cnJlbnQgbmlsKQorCisoZGVmdmFyIGdpdC1ibGFtZS1tb2RlIG5pbCkKKyhtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnZ2l0LWJsYW1lLW1vZGUpCisKKyhkZWZ2YXIgZ2l0LWJsYW1lLW1vZGUtbGluZS1zdHJpbmcgIiBibGFtZSIKKyAgIlN0cmluZyB0byBkaXNwbGF5IG9uIHRoZSBtb2RlIGxpbmUgd2hlbiBnaXQtYmxhbWUgaXMgYWN0aXZlLiIpCisKKyhvciAoYXNzcSAnZ2l0LWJsYW1lLW1vZGUgbWlub3ItbW9kZS1hbGlzdCkKKyAgICAoc2V0cSBtaW5vci1tb2RlLWFsaXN0CisJICAoY29ucyAnKGdpdC1ibGFtZS1tb2RlIGdpdC1ibGFtZS1tb2RlLWxpbmUtc3RyaW5nKSBtaW5vci1tb2RlLWFsaXN0KSkpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gZ2l0LWJsYW1lLW1vZGUgKCZvcHRpb25hbCBhcmcpCisgICJUb2dnbGUgbWlub3IgbW9kZSBmb3IgZGlzcGxheWluZyBHaXQgYmxhbWUKKworV2l0aCBwcmVmaXggQVJHLCB0dXJuIHRoZSBtb2RlIG9uIGlmIEFSRyBpcyBwb3NpdGl2ZS4iCisgIChpbnRlcmFjdGl2ZSAiUCIpCisgIChjb25kCisgICAoKG51bGwgYXJnKQorICAgIChpZiBnaXQtYmxhbWUtbW9kZSAoZ2l0LWJsYW1lLW1vZGUtb2ZmKSAoZ2l0LWJsYW1lLW1vZGUtb24pKSkKKyAgICgoPiAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSAwKSAoZ2l0LWJsYW1lLW1vZGUtb24pKQorICAgKHQgKGdpdC1ibGFtZS1tb2RlLW9mZikpKSkKKworKGRlZnVuIGdpdC1ibGFtZS1tb2RlLW9uICgpCisgICJUdXJuIG9uIGdpdC1ibGFtZSBtb2RlLgorCitTZWUgYWxzbyBmdW5jdGlvbiBgZ2l0LWJsYW1lLW1vZGUnLiIKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2dpdC1ibGFtZS1jb2xvcnMpCisgIChpZiBnaXQtYmxhbWUtYXV0b3VwZGF0ZQorICAgICAgKGFkZC1ob29rICdhZnRlci1jaGFuZ2UtZnVuY3Rpb25zICdnaXQtYmxhbWUtYWZ0ZXItY2hhbmdlIG5pbCB0KQorICAgIChyZW1vdmUtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyAnZ2l0LWJsYW1lLWFmdGVyLWNoYW5nZSB0KSkKKyAgKGdpdC1ibGFtZS1jbGVhbnVwKQorICAobGV0ICgoYmdtb2RlIChjZHIgKGFzc29jICdiYWNrZ3JvdW5kLW1vZGUgKGZyYW1lLXBhcmFtZXRlcnMpKSkpKQorICAgIChpZiAoZXEgYmdtb2RlICdkYXJrKQorCShzZXRxIGdpdC1ibGFtZS1jb2xvcnMgZ2l0LWJsYW1lLWRhcmstY29sb3JzKQorICAgICAgKHNldHEgZ2l0LWJsYW1lLWNvbG9ycyBnaXQtYmxhbWUtbGlnaHQtY29sb3JzKSkpCisgIChzZXRxIGdpdC1ibGFtZS1jYWNoZSAobWFrZS1oYXNoLXRhYmxlIDp0ZXN0ICdlcXVhbCkpCisgIChzZXRxIGdpdC1ibGFtZS1tb2RlIHQpCisgIChnaXQtYmxhbWUtcnVuKSkKKworKGRlZnVuIGdpdC1ibGFtZS1tb2RlLW9mZiAoKQorICAiVHVybiBvZmYgZ2l0LWJsYW1lIG1vZGUuCisKK1NlZSBhbHNvIGZ1bmN0aW9uIGBnaXQtYmxhbWUtbW9kZScuIgorICAoZ2l0LWJsYW1lLWNsZWFudXApCisgIChpZiBnaXQtYmxhbWUtaWRsZS10aW1lciAoY2FuY2VsLXRpbWVyIGdpdC1ibGFtZS1pZGxlLXRpbWVyKSkKKyAgKHNldHEgZ2l0LWJsYW1lLW1vZGUgbmlsKSkKKworOzs7IyMjYXV0b2xvYWQKKyhkZWZ1biBnaXQtcmVibGFtZSAoKQorICAiUmVjYWxjdWxhdGUgYWxsIGJsYW1lIGluZm9ybWF0aW9uIGluIHRoZSBjdXJyZW50IGJ1ZmZlciIKKyAgKGludGVyYWN0aXZlKQorICAodW5sZXNzIGdpdC1ibGFtZS1tb2RlCisgICAgKGVycm9yICJHaXQtYmxhbWUgaXMgbm90IGFjdGl2ZSIpKQorCisgIChnaXQtYmxhbWUtY2xlYW51cCkKKyAgKGdpdC1ibGFtZS1ydW4pKQorCisoZGVmdW4gZ2l0LWJsYW1lLXJ1biAoJm9wdGlvbmFsIHN0YXJ0bGluZSBlbmRsaW5lKQorICAoaWYgZ2l0LWJsYW1lLXByb2MKKyAgICAgIDs7IFNob3VsZCBtYXliZSBxdWV1ZSB1cCBhIG5ldyBydW4gaGVyZQorICAgICAgKG1lc3NhZ2UgIkFscmVhZHkgcnVubmluZyBnaXQgYmxhbWUiKQorICAgIChsZXQgKChkaXNwbGF5LWJ1ZiAoY3VycmVudC1idWZmZXIpKQorICAgICAgICAgIChibGFtZS1idWYgKGdldC1idWZmZXItY3JlYXRlCisgICAgICAgICAgICAgICAgICAgICAgKGNvbmNhdCAiIGdpdCBibGFtZSBmb3IgIiAoYnVmZmVyLW5hbWUpKSkpCisgICAgICAgICAgKGFyZ3MgJygiLS1pbmNyZW1lbnRhbCIgIi0tY29udGVudHMiICItIikpKQorICAgICAgKGlmIHN0YXJ0bGluZQorICAgICAgICAgIChzZXRxIGFyZ3MgKGFwcGVuZCBhcmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0ICItTCIgKGZvcm1hdCAiJWQsJWQiIHN0YXJ0bGluZSBlbmRsaW5lKSkpKSkKKyAgICAgIChzZXRxIGFyZ3MgKGFwcGVuZCBhcmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkgYnVmZmVyLWZpbGUtbmFtZSkpKSkKKyAgICAgIChzZXRxIGdpdC1ibGFtZS1wcm9jCisgICAgICAgICAgICAoYXBwbHkgJ3N0YXJ0LXByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAiZ2l0LWJsYW1lIiBibGFtZS1idWYKKyAgICAgICAgICAgICAgICAgICAiZ2l0IiAiYmxhbWUiCisgICAgICAgICAgICAgICAgICAgYXJncykpCisgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBibGFtZS1idWYKKyAgICAgICAgKGVyYXNlLWJ1ZmZlcikKKyAgICAgICAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2dpdC1ibGFtZS1maWxlKQorICAgICAgICAobWFrZS1sb2NhbC12YXJpYWJsZSAnZ2l0LWJsYW1lLWN1cnJlbnQpCisgICAgICAgIChzZXRxIGdpdC1ibGFtZS1maWxlIGRpc3BsYXktYnVmKQorICAgICAgICAoc2V0cSBnaXQtYmxhbWUtY3VycmVudCBuaWwpKQorICAgICAgKHNldC1wcm9jZXNzLWZpbHRlciBnaXQtYmxhbWUtcHJvYyAnZ2l0LWJsYW1lLWZpbHRlcikKKyAgICAgIChzZXQtcHJvY2Vzcy1zZW50aW5lbCBnaXQtYmxhbWUtcHJvYyAnZ2l0LWJsYW1lLXNlbnRpbmVsKQorICAgICAgKHByb2Nlc3Mtc2VuZC1yZWdpb24gZ2l0LWJsYW1lLXByb2MgKHBvaW50LW1pbikgKHBvaW50LW1heCkpCisgICAgICAocHJvY2Vzcy1zZW5kLWVvZiBnaXQtYmxhbWUtcHJvYykpKSkKKworKGRlZnVuIHJlbW92ZS1naXQtYmxhbWUtdGV4dC1wcm9wZXJ0aWVzIChzdGFydCBlbmQpCisgIChsZXQgKChtb2RpZmllZCAoYnVmZmVyLW1vZGlmaWVkLXApKQorICAgICAgICAoaW5oaWJpdC1yZWFkLW9ubHkgdCkpCisgICAgKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgc3RhcnQgZW5kICcocG9pbnQtZW50ZXJlZCBuaWwpKQorICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgbW9kaWZpZWQpKSkKKworKGRlZnVuIGdpdC1ibGFtZS1jbGVhbnVwICgpCisgICJSZW1vdmUgYWxsIGJsYW1lIHByb3BlcnRpZXMiCisgICAgKG1hcGMgJ2RlbGV0ZS1vdmVybGF5IGdpdC1ibGFtZS1vdmVybGF5cykKKyAgICAoc2V0cSBnaXQtYmxhbWUtb3ZlcmxheXMgbmlsKQorICAgIChyZW1vdmUtZ2l0LWJsYW1lLXRleHQtcHJvcGVydGllcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpCisKKyhkZWZ1biBnaXQtYmxhbWUtdXBkYXRlLXJlZ2lvbiAoc3RhcnQgZW5kKQorICAiUmVydW4gYmxhbWUgdG8gZ2V0IHVwZGF0ZXMgYmV0d2VlbiBTVEFSVCBhbmQgRU5EIgorICAobGV0ICgob3ZlcmxheXMgKG92ZXJsYXlzLWluIHN0YXJ0IGVuZCkpKQorICAgICh3aGlsZSBvdmVybGF5cworICAgICAgKGxldCAoKG92ZXJsYXkgKHBvcCBvdmVybGF5cykpKQorICAgICAgICAoaWYgKDwgKG92ZXJsYXktc3RhcnQgb3ZlcmxheSkgc3RhcnQpCisgICAgICAgICAgICAoc2V0cSBzdGFydCAob3ZlcmxheS1zdGFydCBvdmVybGF5KSkpCisgICAgICAgIChpZiAoPiAob3ZlcmxheS1lbmQgb3ZlcmxheSkgZW5kKQorICAgICAgICAgICAgKHNldHEgZW5kIChvdmVybGF5LWVuZCBvdmVybGF5KSkpCisgICAgICAgIChzZXRxIGdpdC1ibGFtZS1vdmVybGF5cyAoZGVsZXRlIG92ZXJsYXkgZ2l0LWJsYW1lLW92ZXJsYXlzKSkKKyAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG92ZXJsYXkpKSkpCisgIChyZW1vdmUtZ2l0LWJsYW1lLXRleHQtcHJvcGVydGllcyBzdGFydCBlbmQpCisgIDs7IFdlIGNhbiBiZSBzdXJlIHRoYXQgc3RhcnQgYW5kIGVuZCBhcmUgYXQgbGluZSBicmVha3MKKyAgKGdpdC1ibGFtZS1ydW4gKDErIChjb3VudC1saW5lcyAocG9pbnQtbWluKSBzdGFydCkpCisgICAgICAgICAgICAgICAgIChjb3VudC1saW5lcyAocG9pbnQtbWluKSBlbmQpKSkKKworKGRlZnVuIGdpdC1ibGFtZS1zZW50aW5lbCAocHJvYyBzdGF0dXMpCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChwcm9jZXNzLWJ1ZmZlciBwcm9jKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGdpdC1ibGFtZS1maWxlCisgICAgICAoc2V0cSBnaXQtYmxhbWUtcHJvYyBuaWwpCisgICAgICAoaWYgZ2l0LWJsYW1lLXVwZGF0ZS1xdWV1ZQorICAgICAgICAgIChnaXQtYmxhbWUtZGVsYXllZC11cGRhdGUpKSkpCisgIDs7KGtpbGwtYnVmZmVyIChwcm9jZXNzLWJ1ZmZlciBwcm9jKSkKKyAgOzsobWVzc2FnZSAiZ2l0IGJsYW1lIGZpbmlzaGVkIikKKyAgKQorCisoZGVmdmFyIGluLWJsYW1lLWZpbHRlciBuaWwpCisKKyhkZWZ1biBnaXQtYmxhbWUtZmlsdGVyIChwcm9jIHN0cikKKyAgKHdpdGgtY3VycmVudC1idWZmZXIgKHByb2Nlc3MtYnVmZmVyIHByb2MpCisgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAoZ290by1jaGFyIChwcm9jZXNzLW1hcmsgcHJvYykpCisgICAgICAoaW5zZXJ0LWJlZm9yZS1tYXJrZXJzIHN0cikKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAodW5sZXNzIGluLWJsYW1lLWZpbHRlcgorICAgICAgICAobGV0ICgobW9yZSB0KQorICAgICAgICAgICAgICAoaW4tYmxhbWUtZmlsdGVyIHQpKQorICAgICAgICAgICh3aGlsZSBtb3JlCisgICAgICAgICAgICAoc2V0cSBtb3JlIChnaXQtYmxhbWUtcGFyc2UpKSkpKSkpKQorCisoZGVmdW4gZ2l0LWJsYW1lLXBhcnNlICgpCisgIChjb25kICgobG9va2luZy1hdCAiXFwoWzAtOWEtZl1cXHs0MFxcfVxcKSBcXChbMC05XStcXCkgXFwoWzAtOV0rXFwpIFxcKFswLTldK1xcKVxuIikKKyAgICAgICAgIChsZXQgKChoYXNoIChtYXRjaC1zdHJpbmcgMSkpCisgICAgICAgICAgICAgICAoc3JjLWxpbmUgKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAyKSkpCisgICAgICAgICAgICAgICAocmVzLWxpbmUgKHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAzKSkpCisgICAgICAgICAgICAgICAobnVtLWxpbmVzIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgNCkpKSkKKyAgICAgICAgICAgKGRlbGV0ZS1yZWdpb24gKHBvaW50KSAobWF0Y2gtZW5kIDApKQorICAgICAgICAgICAoc2V0cSBnaXQtYmxhbWUtY3VycmVudCAobGlzdCAoZ2l0LWJsYW1lLW5ldy1jb21taXQgaGFzaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLWxpbmUgcmVzLWxpbmUgbnVtLWxpbmVzKSkpCisgICAgICAgICB0KQorICAgICAgICAoKGxvb2tpbmctYXQgIlxcKFthLXotXStcXCkgXFwoLitcXClcbiIpCisgICAgICAgICAobGV0ICgoa2V5IChtYXRjaC1zdHJpbmcgMSkpCisgICAgICAgICAgICAgICAodmFsdWUgKG1hdGNoLXN0cmluZyAyKSkpCisgICAgICAgICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKG1hdGNoLWVuZCAwKSkKKyAgICAgICAgICAgKGdpdC1ibGFtZS1hZGQtaW5mbyAoY2FyIGdpdC1ibGFtZS1jdXJyZW50KSBrZXkgdmFsdWUpCisgICAgICAgICAgICh3aGVuIChzdHJpbmc9IGtleSAiZmlsZW5hbWUiKQorICAgICAgICAgICAgIChnaXQtYmxhbWUtY3JlYXRlLW92ZXJsYXkgKGNhciBnaXQtYmxhbWUtY3VycmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWRkciBnaXQtYmxhbWUtY3VycmVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWRkZHIgZ2l0LWJsYW1lLWN1cnJlbnQpKQorICAgICAgICAgICAgIChzZXRxIGdpdC1ibGFtZS1jdXJyZW50IG5pbCkpKQorICAgICAgICAgdCkKKyAgICAgICAgKHQKKyAgICAgICAgIG5pbCkpKQorCisoZGVmdW4gZ2l0LWJsYW1lLW5ldy1jb21taXQgKGhhc2gpCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGdpdC1ibGFtZS1maWxlCisgICAgKG9yIChnZXRoYXNoIGhhc2ggZ2l0LWJsYW1lLWNhY2hlKQorICAgICAgICA7OyBBc3NpZ24gYSByYW5kb20gY29sb3IgdG8gZWFjaCBuZXcgY29tbWl0IGluZm8KKyAgICAgICAgOzsgVGFrZSBjYXJlIG5vdCB0byBzZWxlY3QgdGhlIHNhbWUgY29sb3IgbXVsdGlwbGUgdGltZXMKKyAgICAgICAgKGxldCogKChjb2xvciAoaWYgZ2l0LWJsYW1lLWNvbG9ycworICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2l0LWJsYW1lLXJhbmRvbS1wb3AgZ2l0LWJsYW1lLWNvbG9ycykKKyAgICAgICAgICAgICAgICAgICAgICAgIGdpdC1ibGFtZS1hbmNpZW50LWNvbG9yKSkKKyAgICAgICAgICAgICAgIChpbmZvIGAoLGhhc2ggKGNvbG9yIC4gLGNvbG9yKSkpKQorICAgICAgICAgIChwdXRoYXNoIGhhc2ggaW5mbyBnaXQtYmxhbWUtY2FjaGUpCisgICAgICAgICAgaW5mbykpKSkKKworKGRlZnVuIGdpdC1ibGFtZS1jcmVhdGUtb3ZlcmxheSAoaW5mbyBzdGFydC1saW5lIG51bS1saW5lcykKKyAgKHdpdGgtY3VycmVudC1idWZmZXIgZ2l0LWJsYW1lLWZpbGUKKyAgICAoc2F2ZS1leGN1cnNpb24KKyAgICAgIChsZXQgKChpbmhpYml0LXBvaW50LW1vdGlvbi1ob29rcyB0KQorICAgICAgICAgICAgKGluaGliaXQtbW9kaWZpY2F0aW9uLWhvb2tzIHQpKQorICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgICAoZm9yd2FyZC1saW5lICgxLSBzdGFydC1saW5lKSkKKyAgICAgICAgKGxldCogKChzdGFydCAocG9pbnQpKQorICAgICAgICAgICAgICAgKGVuZCAocHJvZ24gKGZvcndhcmQtbGluZSBudW0tbGluZXMpIChwb2ludCkpKQorICAgICAgICAgICAgICAgKG92bCAobWFrZS1vdmVybGF5IHN0YXJ0IGVuZCkpCisgICAgICAgICAgICAgICAoaGFzaCAoY2FyIGluZm8pKQorICAgICAgICAgICAgICAgKHNwZWMgYCgoP2ggLiAsKHN1YnN0cmluZyBoYXNoIDAgNikpCisgICAgICAgICAgICAgICAgICAgICAgICg/SCAuICxoYXNoKQorICAgICAgICAgICAgICAgICAgICAgICAoP2EgLiAsKGdpdC1ibGFtZS1nZXQtaW5mbyBpbmZvICdhdXRob3IpKQorICAgICAgICAgICAgICAgICAgICAgICAoP0EgLiAsKGdpdC1ibGFtZS1nZXQtaW5mbyBpbmZvICdhdXRob3ItbWFpbCkpCisgICAgICAgICAgICAgICAgICAgICAgICg/YyAuICwoZ2l0LWJsYW1lLWdldC1pbmZvIGluZm8gJ2NvbW1pdHRlcikpCisgICAgICAgICAgICAgICAgICAgICAgICg/QyAuICwoZ2l0LWJsYW1lLWdldC1pbmZvIGluZm8gJ2NvbW1pdHRlci1tYWlsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgKD9zIC4gLChnaXQtYmxhbWUtZ2V0LWluZm8gaW5mbyAnc3VtbWFyeSkpKSkpCisgICAgICAgICAgKHB1c2ggb3ZsIGdpdC1ibGFtZS1vdmVybGF5cykKKyAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZsICdnaXQtYmxhbWUgaW5mbykKKyAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZsICdoZWxwLWVjaG8KKyAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdC1zcGVjIGdpdC1ibGFtZS1tb3VzZW92ZXItZm9ybWF0IHNwZWMpKQorICAgICAgICAgIChpZiBnaXQtYmxhbWUtdXNlLWNvbG9ycworICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZsICdmYWNlIChsaXN0IDpiYWNrZ3JvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNkciAoYXNzcSAnY29sb3IgKGNkciBpbmZvKSkpKSkpCisgICAgICAgICAgKG92ZXJsYXktcHV0IG92bCAnbGluZS1wcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgKHByb3BlcnRpemUgKGZvcm1hdC1zcGVjIGdpdC1ibGFtZS1wcmVmaXgtZm9ybWF0IHNwZWMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWNlICdnaXQtYmxhbWUtcHJlZml4LWZhY2UpKSkpKSkpCisKKyhkZWZ1biBnaXQtYmxhbWUtYWRkLWluZm8gKGluZm8ga2V5IHZhbHVlKQorICAobmNvbmMgaW5mbyAobGlzdCAoY29ucyAoaW50ZXJuIGtleSkgdmFsdWUpKSkpCisKKyhkZWZ1biBnaXQtYmxhbWUtZ2V0LWluZm8gKGluZm8ga2V5KQorICAoY2RyIChhc3NxIGtleSAoY2RyIGluZm8pKSkpCisKKyhkZWZ1biBnaXQtYmxhbWUtY3VycmVudC1jb21taXQgKCkKKyAgKGxldCAoKGluZm8gKGdldC1jaGFyLXByb3BlcnR5IChwb2ludCkgJ2dpdC1ibGFtZSkpKQorICAgIChpZiBpbmZvCisgICAgICAgIChjYXIgaW5mbykKKyAgICAgIChlcnJvciAiTm8gY29tbWl0IGluZm8iKSkpKQorCisoZGVmdW4gZ2l0LWRlc2NyaWJlLWNvbW1pdCAoaGFzaCkKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAoY2FsbC1wcm9jZXNzICJnaXQiIG5pbCB0IG5pbAorICAgICAgICAgICAgICAgICAgImxvZyIgIi0xIgorCQkgIChjb25jYXQgIi0tcHJldHR5PSIgZ2l0LWJsYW1lLWxvZy1vbmVsaW5lLWZvcm1hdCkKKyAgICAgICAgICAgICAgICAgIGhhc2gpCisgICAgKGJ1ZmZlci1zdWJzdHJpbmcgKHBvaW50LW1pbikgKHBvaW50LW1heCkpKSkKKworKGRlZnZhciBnaXQtYmxhbWUtbGFzdC1pZGVudGlmaWNhdGlvbiBuaWwpCisobWFrZS12YXJpYWJsZS1idWZmZXItbG9jYWwgJ2dpdC1ibGFtZS1sYXN0LWlkZW50aWZpY2F0aW9uKQorKGRlZnVuIGdpdC1ibGFtZS1pZGVudGlmeSAoJm9wdGlvbmFsIGhhc2gpCisgIChpbnRlcmFjdGl2ZSkKKyAgKGxldCAoKGluZm8gKGdldGhhc2ggKG9yIGhhc2ggKGdpdC1ibGFtZS1jdXJyZW50LWNvbW1pdCkpIGdpdC1ibGFtZS1jYWNoZSkpKQorICAgICh3aGVuIChhbmQgaW5mbyAobm90IChlcSBpbmZvIGdpdC1ibGFtZS1sYXN0LWlkZW50aWZpY2F0aW9uKSkpCisgICAgICAobWVzc2FnZSAiJXMiIChudGggNCBpbmZvKSkKKyAgICAgIChzZXRxIGdpdC1ibGFtZS1sYXN0LWlkZW50aWZpY2F0aW9uIGluZm8pKSkpCisKKzs7IChkZWZ1biBnaXQtYmxhbWUtYWZ0ZXItc2F2ZSAoKQorOzsgICAod2hlbiBnaXQtYmxhbWUtbW9kZQorOzsgICAgIChnaXQtYmxhbWUtY2xlYW51cCkKKzs7ICAgICAoZ2l0LWJsYW1lLXJ1bikpKQorOzsgKGFkZC1ob29rICdhZnRlci1zYXZlLWhvb2sgJ2dpdC1ibGFtZS1hZnRlci1zYXZlKQorCisoZGVmdW4gZ2l0LWJsYW1lLWFmdGVyLWNoYW5nZSAoc3RhcnQgZW5kIGxlbmd0aCkKKyAgKHdoZW4gZ2l0LWJsYW1lLW1vZGUKKyAgICAoZ2l0LWJsYW1lLWVucS11cGRhdGUgc3RhcnQgZW5kKSkpCisKKyhkZWZ2YXIgZ2l0LWJsYW1lLWxhc3QtdXBkYXRlIG5pbCkKKyhtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnZ2l0LWJsYW1lLWxhc3QtdXBkYXRlKQorKGRlZnVuIGdpdC1ibGFtZS1lbnEtdXBkYXRlIChzdGFydCBlbmQpCisgICJNYXJrIHRoZSByZWdpb24gYmV0d2VlbiBTVEFSVCBhbmQgRU5EIGFzIG5lZWRpbmcgYmxhbWUgdXBkYXRlIgorICA7OyBUcnkgdG8gYmUgc21hcnQgYW5kIGF2b2lkIG11bHRpcGxlIGNhbGxvdXRzIGZvciBzZXF1ZW50aWFsCisgIDs7IGVkaXRpbmcKKyAgKGNvbmQgKChhbmQgZ2l0LWJsYW1lLWxhc3QtdXBkYXRlCisgICAgICAgICAgICAgICg9IHN0YXJ0IChjZHIgZ2l0LWJsYW1lLWxhc3QtdXBkYXRlKSkpCisgICAgICAgICAoc2V0Y2RyIGdpdC1ibGFtZS1sYXN0LXVwZGF0ZSBlbmQpKQorICAgICAgICAoKGFuZCBnaXQtYmxhbWUtbGFzdC11cGRhdGUKKyAgICAgICAgICAgICAgKD0gZW5kIChjYXIgZ2l0LWJsYW1lLWxhc3QtdXBkYXRlKSkpCisgICAgICAgICAoc2V0Y2FyIGdpdC1ibGFtZS1sYXN0LXVwZGF0ZSBzdGFydCkpCisgICAgICAgICh0CisgICAgICAgICAoc2V0cSBnaXQtYmxhbWUtbGFzdC11cGRhdGUgKGNvbnMgc3RhcnQgZW5kKSkKKyAgICAgICAgIChzZXRxIGdpdC1ibGFtZS11cGRhdGUtcXVldWUgKG5jb25jIGdpdC1ibGFtZS11cGRhdGUtcXVldWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaXN0IGdpdC1ibGFtZS1sYXN0LXVwZGF0ZSkpKSkpCisgICh1bmxlc3MgKG9yIGdpdC1ibGFtZS1wcm9jIGdpdC1ibGFtZS1pZGxlLXRpbWVyKQorICAgIChzZXRxIGdpdC1ibGFtZS1pZGxlLXRpbWVyCisgICAgICAgICAgKHJ1bi13aXRoLWlkbGUtdGltZXIgMC41IG5pbCAnZ2l0LWJsYW1lLWRlbGF5ZWQtdXBkYXRlKSkpKQorCisoZGVmdW4gZ2l0LWJsYW1lLWRlbGF5ZWQtdXBkYXRlICgpCisgIChzZXRxIGdpdC1ibGFtZS1pZGxlLXRpbWVyIG5pbCkKKyAgKGlmIGdpdC1ibGFtZS11cGRhdGUtcXVldWUKKyAgICAgIChsZXQgKChmaXJzdCAocG9wIGdpdC1ibGFtZS11cGRhdGUtcXVldWUpKQorICAgICAgICAgICAgKGluaGliaXQtcG9pbnQtbW90aW9uLWhvb2tzIHQpKQorICAgICAgICAoZ2l0LWJsYW1lLXVwZGF0ZS1yZWdpb24gKGNhciBmaXJzdCkgKGNkciBmaXJzdCkpKSkpCisKKyhwcm92aWRlICdnaXQtYmxhbWUpCisKKzs7OyBnaXQtYmxhbWUuZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9jb250cmliL2VtYWNzL2dpdC5lbCBiL2NvbnRyaWIvZW1hY3MvZ2l0LmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZmM1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2VtYWNzL2dpdC5lbApAQCAtMCwwICsxLDE3MDUgQEAKKzs7OyBnaXQuZWwgLS0tIEEgdXNlciBpbnRlcmZhY2UgZm9yIGdpdAorCis7OyBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQWxleGFuZHJlIEp1bGxpYXJkIDxqdWxsaWFyZEB3aW5laHEub3JnPgorCis7OyBWZXJzaW9uOiAxLjAKKworOzsgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOzsgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKzs7IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCis7OyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7Cis7OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCis7OyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCis7OyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCis7OyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzsKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworOzsgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorOzsgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKzs7IE1BIDAyMTExLTEzMDcgVVNBCisKKzs7OyBDb21tZW50YXJ5OgorCis7OyBUaGlzIGZpbGUgY29udGFpbnMgYW4gaW50ZXJmYWNlIGZvciB0aGUgZ2l0IHZlcnNpb24gY29udHJvbAorOzsgc3lzdGVtLiBJdCBwcm92aWRlcyBlYXN5IGFjY2VzcyB0byB0aGUgbW9zdCBmcmVxdWVudGx5IHVzZWQgZ2l0Cis7OyBjb21tYW5kcy4gVGhlIHVzZXIgaW50ZXJmYWNlIGlzIGFzIGZhciBhcyBwb3NzaWJsZSBpZGVudGljYWwgdG8KKzs7IHRoYXQgb2YgdGhlIFBDTC1DVlMgbW9kZS4KKzs7Cis7OyBUbyBpbnN0YWxsOiBwdXQgdGhpcyBmaWxlIG9uIHRoZSBsb2FkLXBhdGggYW5kIHBsYWNlIHRoZSBmb2xsb3dpbmcKKzs7IGluIHlvdXIgLmVtYWNzIGZpbGU6Cis7OworOzsgICAgKHJlcXVpcmUgJ2dpdCkKKzs7Cis7OyBUbyBzdGFydDogYE0teCBnaXQtc3RhdHVzJworOzsKKzs7IFRPRE8KKzs7ICAtIGRpZmYgYWdhaW5zdCBvdGhlciBicmFuY2gKKzs7ICAtIHJlbmFtaW5nIGZpbGVzIGZyb20gdGhlIHN0YXR1cyBidWZmZXIKKzs7ICAtIGNyZWF0aW5nIHRhZ3MKKzs7ICAtIGZldGNoL3B1bGwKKzs7ICAtIHJldmxpc3QgYnJvd3NlcgorOzsgIC0gZ2l0LXNob3ctYnJhbmNoIGJyb3dzZXIKKzs7CisKKzs7OyBDb21wYXRpYmlsaXR5OgorOzsKKzs7IFRoaXMgZmlsZSB3b3JrcyBvbiBHTlUgRW1hY3MgMjEgb3IgbGF0ZXIuIEl0IG1heSB3b3JrIG9uIG9sZGVyCis7OyB2ZXJzaW9ucyBidXQgdGhpcyBpcyBub3QgZ3VhcmFudGVlZC4KKzs7Cis7OyBJdCBtYXkgd29yayBvbiBYRW1hY3MgMjEsIHByb3ZpZGVkIHRoYXQgeW91IGZpcnN0IGluc3RhbGwgdGhlIGV3b2MKKzs7IGFuZCBsb2ctZWRpdCBwYWNrYWdlcy4KKzs7CisKKyhldmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAnY2wpKQorKHJlcXVpcmUgJ2V3b2MpCisocmVxdWlyZSAnbG9nLWVkaXQpCisocmVxdWlyZSAnZWFzeW1lbnUpCisKKworOzs7OyBDdXN0b21pemF0aW9ucworOzs7OyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKGRlZmdyb3VwIGdpdCBuaWwKKyAgIkEgdXNlciBpbnRlcmZhY2UgZm9yIHRoZSBnaXQgdmVyc2lvbmluZyBzeXN0ZW0uIgorICA6Z3JvdXAgJ3Rvb2xzKQorCisoZGVmY3VzdG9tIGdpdC1jb21taXR0ZXItbmFtZSBuaWwKKyAgIlVzZXIgbmFtZSB0byB1c2UgZm9yIGNvbW1pdHMuCitUaGUgZGVmYXVsdCBpcyB0byBmYWxsIGJhY2sgdG8gdGhlIHJlcG9zaXRvcnkgY29uZmlnLAordGhlbiB0byBgYWRkLWxvZy1mdWxsLW5hbWUnIGFuZCB0aGVuIHRvIGB1c2VyLWZ1bGwtbmFtZScuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiRGVmYXVsdCIgbmlsKQorICAgICAgICAgICAgICAgICAoc3RyaW5nIDp0YWcgIk5hbWUiKSkpCisKKyhkZWZjdXN0b20gZ2l0LWNvbW1pdHRlci1lbWFpbCBuaWwKKyAgIkVtYWlsIGFkZHJlc3MgdG8gdXNlIGZvciBjb21taXRzLgorVGhlIGRlZmF1bHQgaXMgdG8gZmFsbCBiYWNrIHRvIHRoZSBnaXQgcmVwb3NpdG9yeSBjb25maWcsCit0aGVuIHRvIGBhZGQtbG9nLW1haWxpbmctYWRkcmVzcycgYW5kIHRoZW4gdG8gYHVzZXItbWFpbC1hZGRyZXNzJy4iCisgIDpncm91cCAnZ2l0CisgIDp0eXBlICcoY2hvaWNlIChjb25zdCA6dGFnICJEZWZhdWx0IiBuaWwpCisgICAgICAgICAgICAgICAgIChzdHJpbmcgOnRhZyAiRW1haWwiKSkpCisKKyhkZWZjdXN0b20gZ2l0LWNvbW1pdHMtY29kaW5nLXN5c3RlbSBuaWwKKyAgIkRlZmF1bHQgY29kaW5nIHN5c3RlbSBmb3IgdGhlIGxvZyBtZXNzYWdlIG9mIGdpdCBjb21taXRzLiIKKyAgOmdyb3VwICdnaXQKKyAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIkZyb20gcmVwb3NpdG9yeSBjb25maWciIG5pbCkKKyAgICAgICAgICAgICAgICAgKGNvZGluZy1zeXN0ZW0pKSkKKworKGRlZmN1c3RvbSBnaXQtYXBwZW5kLXNpZ25lZC1vZmYtYnkgbmlsCisgICJXaGV0aGVyIHRvIGFwcGVuZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UgYmVmb3JlIGVkaXRpbmcuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnYm9vbGVhbikKKworKGRlZmN1c3RvbSBnaXQtcmV1c2Utc3RhdHVzLWJ1ZmZlciB0CisgICJXaGV0aGVyIGBnaXQtc3RhdHVzJyBzaG91bGQgdHJ5IHRvIHJldXNlIGFuIGV4aXN0aW5nIGJ1ZmZlcgoraWYgdGhlcmUgaXMgYWxyZWFkeSBvbmUgdGhhdCBkaXNwbGF5cyB0aGUgc2FtZSBkaXJlY3RvcnkuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnYm9vbGVhbikKKworKGRlZmN1c3RvbSBnaXQtcGVyLWRpci1pZ25vcmUtZmlsZSAiLmdpdGlnbm9yZSIKKyAgIk5hbWUgb2YgdGhlIHBlci1kaXJlY3RvcnkgaWdub3JlIGZpbGUuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnc3RyaW5nKQorCisoZGVmY3VzdG9tIGdpdC1zaG93LXVwdG9kYXRlIG5pbAorICAiV2hldGhlciB0byBkaXNwbGF5IHVwLXRvLWRhdGUgZmlsZXMuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnYm9vbGVhbikKKworKGRlZmN1c3RvbSBnaXQtc2hvdy1pZ25vcmVkIG5pbAorICAiV2hldGhlciB0byBkaXNwbGF5IGlnbm9yZWQgZmlsZXMuIgorICA6Z3JvdXAgJ2dpdAorICA6dHlwZSAnYm9vbGVhbikKKworKGRlZmN1c3RvbSBnaXQtc2hvdy11bmtub3duIHQKKyAgIldoZXRoZXIgdG8gZGlzcGxheSB1bmtub3duIGZpbGVzLiIKKyAgOmdyb3VwICdnaXQKKyAgOnR5cGUgJ2Jvb2xlYW4pCisKKworKGRlZmZhY2UgZ2l0LXN0YXR1cy1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGxpZ2h0KSkgKDpmb3JlZ3JvdW5kICJwdXJwbGUiKSkKKyAgICAoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgZGFyaykpICg6Zm9yZWdyb3VuZCAic2FsbW9uIikpKQorICAiR2l0IG1vZGUgZmFjZSB1c2VkIHRvIGhpZ2hsaWdodCBhZGRlZCBhbmQgbW9kaWZpZWQgZmlsZXMuIgorICA6Z3JvdXAgJ2dpdCkKKworKGRlZmZhY2UgZ2l0LXVubWVyZ2VkLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgbGlnaHQpKSAoOmZvcmVncm91bmQgInJlZCIgOmJvbGQgdCkpCisgICAgKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGRhcmspKSAoOmZvcmVncm91bmQgInJlZCIgOmJvbGQgdCkpKQorICAiR2l0IG1vZGUgZmFjZSB1c2VkIHRvIGhpZ2hsaWdodCB1bm1lcmdlZCBmaWxlcy4iCisgIDpncm91cCAnZ2l0KQorCisoZGVmZmFjZSBnaXQtdW5rbm93bi1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGxpZ2h0KSkgKDpmb3JlZ3JvdW5kICJnb2xkZW5yb2QiIDpib2xkIHQpKQorICAgICgoKGNsYXNzIGNvbG9yKSAoYmFja2dyb3VuZCBkYXJrKSkgKDpmb3JlZ3JvdW5kICJnb2xkZW5yb2QiIDpib2xkIHQpKSkKKyAgIkdpdCBtb2RlIGZhY2UgdXNlZCB0byBoaWdobGlnaHQgdW5rbm93biBmaWxlcy4iCisgIDpncm91cCAnZ2l0KQorCisoZGVmZmFjZSBnaXQtdXB0b2RhdGUtZmFjZQorICAnKCgoKGNsYXNzIGNvbG9yKSAoYmFja2dyb3VuZCBsaWdodCkpICg6Zm9yZWdyb3VuZCAiZ3JleTYwIikpCisgICAgKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGRhcmspKSAoOmZvcmVncm91bmQgImdyZXk0MCIpKSkKKyAgIkdpdCBtb2RlIGZhY2UgdXNlZCB0byBoaWdobGlnaHQgdXAtdG8tZGF0ZSBmaWxlcy4iCisgIDpncm91cCAnZ2l0KQorCisoZGVmZmFjZSBnaXQtaWdub3JlZC1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGxpZ2h0KSkgKDpmb3JlZ3JvdW5kICJncmV5NjAiKSkKKyAgICAoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgZGFyaykpICg6Zm9yZWdyb3VuZCAiZ3JleTQwIikpKQorICAiR2l0IG1vZGUgZmFjZSB1c2VkIHRvIGhpZ2hsaWdodCBpZ25vcmVkIGZpbGVzLiIKKyAgOmdyb3VwICdnaXQpCisKKyhkZWZmYWNlIGdpdC1tYXJrLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgbGlnaHQpKSAoOmZvcmVncm91bmQgInJlZCIgOmJvbGQgdCkpCisgICAgKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGRhcmspKSAoOmZvcmVncm91bmQgInRvbWF0byIgOmJvbGQgdCkpKQorICAiR2l0IG1vZGUgZmFjZSB1c2VkIGZvciB0aGUgZmlsZSBtYXJrcy4iCisgIDpncm91cCAnZ2l0KQorCisoZGVmZmFjZSBnaXQtaGVhZGVyLWZhY2UKKyAgJygoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgbGlnaHQpKSAoOmZvcmVncm91bmQgImJsdWUiKSkKKyAgICAoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgZGFyaykpICg6Zm9yZWdyb3VuZCAiYmx1ZSIpKSkKKyAgIkdpdCBtb2RlIGZhY2UgdXNlZCBmb3IgY29tbWl0IGhlYWRlcnMuIgorICA6Z3JvdXAgJ2dpdCkKKworKGRlZmZhY2UgZ2l0LXNlcGFyYXRvci1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGxpZ2h0KSkgKDpmb3JlZ3JvdW5kICJicm93biIpKQorICAgICgoKGNsYXNzIGNvbG9yKSAoYmFja2dyb3VuZCBkYXJrKSkgKDpmb3JlZ3JvdW5kICJicm93biIpKSkKKyAgIkdpdCBtb2RlIGZhY2UgdXNlZCBmb3IgY29tbWl0IHNlcGFyYXRvci4iCisgIDpncm91cCAnZ2l0KQorCisoZGVmZmFjZSBnaXQtcGVybWlzc2lvbi1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGxpZ2h0KSkgKDpmb3JlZ3JvdW5kICJncmVlbiIgOmJvbGQgdCkpCisgICAgKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGRhcmspKSAoOmZvcmVncm91bmQgImdyZWVuIiA6Ym9sZCB0KSkpCisgICJHaXQgbW9kZSBmYWNlIHVzZWQgZm9yIHBlcm1pc3Npb24gY2hhbmdlcy4iCisgIDpncm91cCAnZ2l0KQorCisKKzs7OzsgVXRpbGl0aWVzCis7Ozs7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoZGVmY29uc3QgZ2l0LWxvZy1tc2ctc2VwYXJhdG9yICItLS0gbG9nIG1lc3NhZ2UgZm9sbG93cyB0aGlzIGxpbmUgLS0tIikKKworKGRlZnZhciBnaXQtbG9nLWVkaXQtZm9udC1sb2NrLWtleXdvcmRzCisgIGAoKCJeXFwoQXV0aG9yOlxcfERhdGU6XFx8TWVyZ2U6XFx8U2lnbmVkLW9mZi1ieTpcXClcXCguKlxcKSQiCisgICAgICgxIGZvbnQtbG9jay1rZXl3b3JkLWZhY2UpCisgICAgICgyIGZvbnQtbG9jay1mdW5jdGlvbi1uYW1lLWZhY2UpKQorICAgICgsKGNvbmNhdCAiXlxcKCIgKHJlZ2V4cC1xdW90ZSBnaXQtbG9nLW1zZy1zZXBhcmF0b3IpICJcXCkkIikKKyAgICAgKDEgZm9udC1sb2NrLWNvbW1lbnQtZmFjZSkpKSkKKworKGRlZnVuIGdpdC1nZXQtZW52LXN0cmluZ3MgKGVudikKKyAgIkJ1aWxkIGEgbGlzdCBvZiBOQU1FPVZBTFVFIHN0cmluZ3MgZnJvbSBhIGxpc3Qgb2YgZW52aXJvbm1lbnQgc3RyaW5ncy4iCisgIChtYXBjYXIgKGxhbWJkYSAoZW50cnkpIChjb25jYXQgKGNhciBlbnRyeSkgIj0iIChjZHIgZW50cnkpKSkgZW52KSkKKworKGRlZnVuIGdpdC1jYWxsLXByb2Nlc3MgKGJ1ZmZlciAmcmVzdCBhcmdzKQorICAiV3JhcHBlciBmb3IgY2FsbC1wcm9jZXNzIHRoYXQgc2V0cyBlbnZpcm9ubWVudCBzdHJpbmdzLiIKKyAgKGFwcGx5ICMnY2FsbC1wcm9jZXNzICJnaXQiIG5pbCBidWZmZXIgbmlsIGFyZ3MpKQorCisoZGVmdW4gZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICgmcmVzdCBhcmdzKQorICAiV3JhcHBlciBmb3IgY2FsbC1wcm9jZXNzIHRoYXQgZGlzcGxheXMgZXJyb3IgbWVzc2FnZXMuIgorICAobGV0KiAoKGRpciBkZWZhdWx0LWRpcmVjdG9yeSkKKyAgICAgICAgIChidWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqR2l0IENvbW1hbmQgT3V0cHV0KiIpKQorICAgICAgICAgKG9rICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgorICAgICAgICAgICAgICAgKGxldCAoKGRlZmF1bHQtZGlyZWN0b3J5IGRpcikKKyAgICAgICAgICAgICAgICAgICAgIChidWZmZXItcmVhZC1vbmx5IG5pbCkpCisgICAgICAgICAgICAgICAgIChlcmFzZS1idWZmZXIpCisgICAgICAgICAgICAgICAgIChlcSAwIChhcHBseSAjJ2dpdC1jYWxsLXByb2Nlc3MgKGxpc3QgYnVmZmVyIHQpIGFyZ3MpKSkpKSkKKyAgICAodW5sZXNzIG9rIChkaXNwbGF5LW1lc3NhZ2Utb3ItYnVmZmVyIGJ1ZmZlcikpCisgICAgb2spKQorCisoZGVmdW4gZ2l0LWNhbGwtcHJvY2Vzcy1zdHJpbmcgKCZyZXN0IGFyZ3MpCisgICJXcmFwcGVyIGZvciBjYWxsLXByb2Nlc3MgdGhhdCByZXR1cm5zIHRoZSBwcm9jZXNzIG91dHB1dCBhcyBhIHN0cmluZywKK29yIG5pbCBpZiB0aGUgZ2l0IGNvbW1hbmQgZmFpbGVkLiIKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAoYW5kIChlcSAwIChhcHBseSAjJ2dpdC1jYWxsLXByb2Nlc3MgdCBhcmdzKSkKKyAgICAgICAgIChidWZmZXItc3RyaW5nKSkpKQorCisoZGVmdW4gZ2l0LWNhbGwtcHJvY2Vzcy1zdHJpbmctZGlzcGxheS1lcnJvciAoJnJlc3QgYXJncykKKyAgIldyYXBwZXIgZm9yIGNhbGwtcHJvY2VzcyB0aGF0IGRpc3BsYXlzIGVycm9yIG1lc3NhZ2UgYW5kIHJldHVybnMKK3RoZSBwcm9jZXNzIG91dHB1dCBhcyBhIHN0cmluZywgb3IgbmlsIGlmIHRoZSBnaXQgY29tbWFuZCBmYWlsZWQuIgorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgIChpZiAoZXEgMCAoYXBwbHkgIydnaXQtY2FsbC1wcm9jZXNzIChsaXN0IHQgdCkgYXJncykpCisgICAgICAgIChidWZmZXItc3RyaW5nKQorICAgICAgKGRpc3BsYXktbWVzc2FnZS1vci1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKKyAgICAgIG5pbCkpKQorCisoZGVmdW4gZ2l0LXJ1bi1wcm9jZXNzLXJlZ2lvbiAoYnVmZmVyIHN0YXJ0IGVuZCBwcm9ncmFtIGFyZ3MpCisgICJSdW4gYSBnaXQgcHJvY2VzcyB3aXRoIGEgYnVmZmVyIHJlZ2lvbiBhcyBpbnB1dC4iCisgIChsZXQgKChvdXRwdXQtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpCisgICAgICAgIChkaXIgZGVmYXVsdC1kaXJlY3RvcnkpKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgorICAgICAgKGNkIGRpcikKKyAgICAgIChhcHBseSAjJ2NhbGwtcHJvY2Vzcy1yZWdpb24gc3RhcnQgZW5kIHByb2dyYW0KKyAgICAgICAgICAgICBuaWwgKGxpc3Qgb3V0cHV0LWJ1ZmZlciB0KSBuaWwgYXJncykpKSkKKworKGRlZnVuIGdpdC1ydW4tY29tbWFuZC1idWZmZXIgKGJ1ZmZlci1uYW1lICZyZXN0IGFyZ3MpCisgICJSdW4gYSBnaXQgY29tbWFuZCwgc2VuZGluZyB0aGUgb3V0cHV0IHRvIGEgYnVmZmVyIG5hbWVkIEJVRkZFUi1OQU1FLiIKKyAgKGxldCAoKGRpciBkZWZhdWx0LWRpcmVjdG9yeSkKKyAgICAgICAgKGJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgYnVmZmVyLW5hbWUpKSkKKyAgICAobWVzc2FnZSAiUnVubmluZyBnaXQgJXMuLi4iIChjYXIgYXJncykpCisgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCisgICAgICAobGV0ICgoZGVmYXVsdC1kaXJlY3RvcnkgZGlyKQorICAgICAgICAgICAgKGJ1ZmZlci1yZWFkLW9ubHkgbmlsKSkKKyAgICAgICAgKGVyYXNlLWJ1ZmZlcikKKyAgICAgICAgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2VzcyBidWZmZXIgYXJncykpKQorICAgIChtZXNzYWdlICJSdW5uaW5nIGdpdCAlcy4uLmRvbmUiIChjYXIgYXJncykpCisgICAgYnVmZmVyKSkKKworKGRlZnVuIGdpdC1ydW4tY29tbWFuZC1yZWdpb24gKGJ1ZmZlciBzdGFydCBlbmQgZW52ICZyZXN0IGFyZ3MpCisgICJSdW4gYSBnaXQgY29tbWFuZCB3aXRoIHNwZWNpZmllZCBidWZmZXIgcmVnaW9uIGFzIGlucHV0LiIKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAoaWYgKGVxIDAgKGlmIGVudgorICAgICAgICAgICAgICAgICAgKGdpdC1ydW4tcHJvY2Vzcy1yZWdpb24KKyAgICAgICAgICAgICAgICAgICBidWZmZXIgc3RhcnQgZW5kICJlbnYiCisgICAgICAgICAgICAgICAgICAgKGFwcGVuZCAoZ2l0LWdldC1lbnYtc3RyaW5ncyBlbnYpIChsaXN0ICJnaXQiKSBhcmdzKSkKKyAgICAgICAgICAgICAgICAoZ2l0LXJ1bi1wcm9jZXNzLXJlZ2lvbiBidWZmZXIgc3RhcnQgZW5kICJnaXQiIGFyZ3MpKSkKKyAgICAgICAgKGJ1ZmZlci1zdHJpbmcpCisgICAgICAoZGlzcGxheS1tZXNzYWdlLW9yLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQorICAgICAgbmlsKSkpCisKKyhkZWZ1biBnaXQtcnVuLWhvb2sgKGhvb2sgZW52ICZyZXN0IGFyZ3MpCisgICJSdW4gYSBnaXQgaG9vayBhbmQgZGlzcGxheSBpdHMgb3V0cHV0IGlmIGFueS4iCisgIChsZXQgKChkaXIgZGVmYXVsdC1kaXJlY3RvcnkpCisgICAgICAgIChob29rLW5hbWUgKGV4cGFuZC1maWxlLW5hbWUgKGNvbmNhdCAiLmdpdC9ob29rcy8iIGhvb2spKSkpCisgICAgKG9yIChub3QgKGZpbGUtZXhlY3V0YWJsZS1wIGhvb2stbmFtZSkpCisgICAgICAgIChsZXQgKHN0YXR1cyAoYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKkdpdCBIb29rIE91dHB1dCoiKSkpCisgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCisgICAgICAgICAgICAoZXJhc2UtYnVmZmVyKQorICAgICAgICAgICAgKGNkIGRpcikKKyAgICAgICAgICAgIChzZXRxIHN0YXR1cworICAgICAgICAgICAgICAgICAgKGlmIGVudgorICAgICAgICAgICAgICAgICAgICAgIChhcHBseSAjJ2NhbGwtcHJvY2VzcyAiZW52IiBuaWwgKGxpc3QgYnVmZmVyIHQpIG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kIChnaXQtZ2V0LWVudi1zdHJpbmdzIGVudikgKGxpc3QgaG9vay1uYW1lKSBhcmdzKSkKKyAgICAgICAgICAgICAgICAgICAgKGFwcGx5ICMnY2FsbC1wcm9jZXNzIGhvb2stbmFtZSBuaWwgKGxpc3QgYnVmZmVyIHQpIG5pbCBhcmdzKSkpKQorICAgICAgICAgIChkaXNwbGF5LW1lc3NhZ2Utb3ItYnVmZmVyIGJ1ZmZlcikKKyAgICAgICAgICAoZXEgMCBzdGF0dXMpKSkpKQorCisoZGVmdW4gZ2l0LWdldC1zdHJpbmctc2hhMSAoc3RyaW5nKQorICAiUmVhZCBhIFNIQTEgZnJvbSB0aGUgc3BlY2lmaWVkIHN0cmluZy4iCisgIChhbmQgc3RyaW5nCisgICAgICAgKHN0cmluZy1tYXRjaCAiWzAtOWEtZl1cXHs0MFxcfSIgc3RyaW5nKQorICAgICAgIChtYXRjaC1zdHJpbmcgMCBzdHJpbmcpKSkKKworKGRlZnVuIGdpdC1nZXQtY29tbWl0dGVyLW5hbWUgKCkKKyAgIlJldHVybiB0aGUgbmFtZSB0byB1c2UgYXMgR0lUX0NPTU1JVFRFUl9OQU1FLiIKKyAgOyBjb3BpZWQgZnJvbSBsb2ctZWRpdAorICAob3IgZ2l0LWNvbW1pdHRlci1uYW1lCisgICAgICAoZ2l0LWNvbmZpZyAidXNlci5uYW1lIikKKyAgICAgIChhbmQgKGJvdW5kcCAnYWRkLWxvZy1mdWxsLW5hbWUpIGFkZC1sb2ctZnVsbC1uYW1lKQorICAgICAgKGFuZCAoZmJvdW5kcCAndXNlci1mdWxsLW5hbWUpICh1c2VyLWZ1bGwtbmFtZSkpCisgICAgICAoYW5kIChib3VuZHAgJ3VzZXItZnVsbC1uYW1lKSB1c2VyLWZ1bGwtbmFtZSkpKQorCisoZGVmdW4gZ2l0LWdldC1jb21taXR0ZXItZW1haWwgKCkKKyAgIlJldHVybiB0aGUgZW1haWwgYWRkcmVzcyB0byB1c2UgYXMgR0lUX0NPTU1JVFRFUl9FTUFJTC4iCisgIDsgY29waWVkIGZyb20gbG9nLWVkaXQKKyAgKG9yIGdpdC1jb21taXR0ZXItZW1haWwKKyAgICAgIChnaXQtY29uZmlnICJ1c2VyLmVtYWlsIikKKyAgICAgIChhbmQgKGJvdW5kcCAnYWRkLWxvZy1tYWlsaW5nLWFkZHJlc3MpIGFkZC1sb2ctbWFpbGluZy1hZGRyZXNzKQorICAgICAgKGFuZCAoZmJvdW5kcCAndXNlci1tYWlsLWFkZHJlc3MpICh1c2VyLW1haWwtYWRkcmVzcykpCisgICAgICAoYW5kIChib3VuZHAgJ3VzZXItbWFpbC1hZGRyZXNzKSB1c2VyLW1haWwtYWRkcmVzcykpKQorCisoZGVmdW4gZ2l0LWdldC1jb21taXRzLWNvZGluZy1zeXN0ZW0gKCkKKyAgIlJldHVybiB0aGUgY29kaW5nIHN5c3RlbSB0byB1c2UgZm9yIGNvbW1pdHMuIgorICAobGV0ICgocmVwby1jb25maWcgKGdpdC1jb25maWcgImkxOG4uY29tbWl0ZW5jb2RpbmciKSkpCisgICAgKG9yIGdpdC1jb21taXRzLWNvZGluZy1zeXN0ZW0KKyAgICAgICAgKGFuZCByZXBvLWNvbmZpZworICAgICAgICAgICAgIChmYm91bmRwICdsb2NhbGUtY2hhcnNldC10by1jb2Rpbmctc3lzdGVtKQorICAgICAgICAgICAgIChsb2NhbGUtY2hhcnNldC10by1jb2Rpbmctc3lzdGVtIHJlcG8tY29uZmlnKSkKKyAgICAgICd1dGYtOCkpKQorCisoZGVmdW4gZ2l0LWdldC1sb2dvdXRwdXQtY29kaW5nLXN5c3RlbSAoKQorICAiUmV0dXJuIHRoZSBjb2Rpbmcgc3lzdGVtIHVzZWQgZm9yIGdpdC1sb2cgb3V0cHV0LiIKKyAgKGxldCAoKHJlcG8tY29uZmlnIChvciAoZ2l0LWNvbmZpZyAiaTE4bi5sb2dvdXRwdXRlbmNvZGluZyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGdpdC1jb25maWcgImkxOG4uY29tbWl0ZW5jb2RpbmciKSkpKQorICAgIChvciBnaXQtY29tbWl0cy1jb2Rpbmctc3lzdGVtCisgICAgICAgIChhbmQgcmVwby1jb25maWcKKyAgICAgICAgICAgICAoZmJvdW5kcCAnbG9jYWxlLWNoYXJzZXQtdG8tY29kaW5nLXN5c3RlbSkKKyAgICAgICAgICAgICAobG9jYWxlLWNoYXJzZXQtdG8tY29kaW5nLXN5c3RlbSByZXBvLWNvbmZpZykpCisgICAgICAndXRmLTgpKSkKKworKGRlZnVuIGdpdC1lc2NhcGUtZmlsZS1uYW1lIChuYW1lKQorICAiRXNjYXBlIGEgZmlsZSBuYW1lIGlmIG5lY2Vzc2FyeS4iCisgIChpZiAoc3RyaW5nLW1hdGNoICJbXG5cdFwiXFxdIiBuYW1lKQorICAgICAgKGNvbmNhdCAiXCIiCisgICAgICAgICAgICAgIChtYXBjb25jYXQgKGxhbWJkYSAoYykKKyAgICAgICAgICAgICAgICAgICAoY2FzZSBjCisgICAgICAgICAgICAgICAgICAgICAoP1xuICJcXG4iKQorICAgICAgICAgICAgICAgICAgICAgKD9cdCAiXFx0IikKKyAgICAgICAgICAgICAgICAgICAgICg/XFwgIlxcXFwiKQorICAgICAgICAgICAgICAgICAgICAgKD9cIiAiXFxcIiIpCisgICAgICAgICAgICAgICAgICAgICAodCAoY2hhci10by1zdHJpbmcgYykpKSkKKyAgICAgICAgICAgICAgICAgbmFtZSAiIikKKyAgICAgICAgICAgICAgIlwiIikKKyAgICBuYW1lKSkKKworKGRlZnVuIGdpdC1zdWNjZXNzLW1lc3NhZ2UgKHRleHQgZmlsZXMpCisgICJQcmludCBhIHN1Y2Nlc3MgbWVzc2FnZSBhZnRlciBoYXZpbmcgaGFuZGxlZCBGSUxFUy4iCisgIChsZXQgKChuIChsZW5ndGggZmlsZXMpKSkKKyAgICAoaWYgKGVxdWFsIG4gMSkKKyAgICAgICAgKG1lc3NhZ2UgIiVzICVzIiB0ZXh0IChjYXIgZmlsZXMpKQorICAgICAgKG1lc3NhZ2UgIiVzICVkIGZpbGVzIiB0ZXh0IG4pKSkpCisKKyhkZWZ1biBnaXQtZ2V0LXRvcC1kaXIgKGRpcikKKyAgIlJldHJpZXZlIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIGEgZ2l0IHRyZWUuIgorICAobGV0ICgoY2R1cCAod2l0aC1vdXRwdXQtdG8tc3RyaW5nCisgICAgICAgICAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgc3RhbmRhcmQtb3V0cHV0CisgICAgICAgICAgICAgICAgICAoY2QgZGlyKQorICAgICAgICAgICAgICAgICAgKHVubGVzcyAoZXEgMCAoZ2l0LWNhbGwtcHJvY2VzcyB0ICJyZXYtcGFyc2UiICItLXNob3ctY2R1cCIpKQorICAgICAgICAgICAgICAgICAgICAoZXJyb3IgImNhbm5vdCBmaW5kIHRvcC1sZXZlbCBnaXQgdHJlZSBmb3IgJXMuIiBkaXIpKSkpKSkKKyAgICAoZXhwYW5kLWZpbGUtbmFtZSAoY29uY2F0IChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IGRpcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYXIgKHNwbGl0LXN0cmluZyBjZHVwICJcbiIpKSkpKSkKKworO3N0b2xlbiBmcm9tIHBjbC1jdnMKKyhkZWZ1biBnaXQtYXBwZW5kLXRvLWlnbm9yZSAoZmlsZSkKKyAgIkFkZCBhIGZpbGUgbmFtZSB0byB0aGUgaWdub3JlIGZpbGUgaW4gaXRzIGRpcmVjdG9yeS4iCisgIChsZXQqICgoZnVsbG5hbWUgKGV4cGFuZC1maWxlLW5hbWUgZmlsZSkpCisgICAgICAgICAoZGlyIChmaWxlLW5hbWUtZGlyZWN0b3J5IGZ1bGxuYW1lKSkKKyAgICAgICAgIChuYW1lIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGZ1bGxuYW1lKSkKKyAgICAgICAgIChpZ25vcmUtbmFtZSAoZXhwYW5kLWZpbGUtbmFtZSBnaXQtcGVyLWRpci1pZ25vcmUtZmlsZSBkaXIpKQorICAgICAgICAgKGNyZWF0ZWQgKG5vdCAoZmlsZS1leGlzdHMtcCBpZ25vcmUtbmFtZSkpKSkKKyAgKHNhdmUtd2luZG93LWV4Y3Vyc2lvbgorICAgIChzZXQtYnVmZmVyIChmaW5kLWZpbGUtbm9zZWxlY3QgaWdub3JlLW5hbWUpKQorICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpCisgICAgKHVubGVzcyAoemVyb3AgKGN1cnJlbnQtY29sdW1uKSkgKGluc2VydCAiXG4iKSkKKyAgICAoaW5zZXJ0ICIvIiBuYW1lICJcbiIpCisgICAgKHNvcnQtbGluZXMgbmlsIChwb2ludC1taW4pIChwb2ludC1tYXgpKQorICAgIChzYXZlLWJ1ZmZlcikpCisgICh3aGVuIGNyZWF0ZWQKKyAgICAoZ2l0LWNhbGwtcHJvY2VzcyBuaWwgInVwZGF0ZS1pbmRleCIgIi0tYWRkIiAiLS0iIChmaWxlLXJlbGF0aXZlLW5hbWUgaWdub3JlLW5hbWUpKSkKKyAgKGdpdC11cGRhdGUtc3RhdHVzLWZpbGVzIChsaXN0IChmaWxlLXJlbGF0aXZlLW5hbWUgaWdub3JlLW5hbWUpKSkpKQorCis7IHByb3BlcnRpemUgZGVmaW5pdGlvbiBmb3IgWEVtYWNzLCBzdG9sZW4gZnJvbSBlcmMtY29tcGF0CisoZXZhbC13aGVuLWNvbXBpbGUKKyAgKHVubGVzcyAoZmJvdW5kcCAncHJvcGVydGl6ZSkKKyAgICAoZGVmdW4gcHJvcGVydGl6ZSAoc3RyaW5nICZyZXN0IHByb3BzKQorICAgICAgKGxldCAoKHN0cmluZyAoY29weS1zZXF1ZW5jZSBzdHJpbmcpKSkKKyAgICAgICAgKHdoaWxlIHByb3BzCisgICAgICAgICAgKHB1dC10ZXh0LXByb3BlcnR5IDAgKGxlbmd0aCBzdHJpbmcpIChudGggMCBwcm9wcykgKG50aCAxIHByb3BzKSBzdHJpbmcpCisgICAgICAgICAgKHNldHEgcHJvcHMgKGNkZHIgcHJvcHMpKSkKKyAgICAgICAgc3RyaW5nKSkpKQorCis7Ozs7IFdyYXBwZXJzIGZvciBiYXNpYyBnaXQgY29tbWFuZHMKKzs7OzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhkZWZ1biBnaXQtcmV2LXBhcnNlIChyZXYpCisgICJQYXJzZSBhIHJldmlzaW9uIG5hbWUgYW5kIHJldHVybiBpdHMgU0hBMS4iCisgIChnaXQtZ2V0LXN0cmluZy1zaGExCisgICAoZ2l0LWNhbGwtcHJvY2Vzcy1zdHJpbmcgInJldi1wYXJzZSIgcmV2KSkpCisKKyhkZWZ1biBnaXQtY29uZmlnIChrZXkpCisgICJSZXRyaWV2ZSB0aGUgdmFsdWUgYXNzb2NpYXRlZCB0byBLRVkgaW4gdGhlIGdpdCByZXBvc2l0b3J5IGNvbmZpZyBmaWxlLiIKKyAgKGxldCAoKHN0ciAoZ2l0LWNhbGwtcHJvY2Vzcy1zdHJpbmcgImNvbmZpZyIga2V5KSkpCisgICAgKGFuZCBzdHIgKGNhciAoc3BsaXQtc3RyaW5nIHN0ciAiXG4iKSkpKSkKKworKGRlZnVuIGdpdC1zeW1ib2xpYy1yZWYgKHJlZikKKyAgIldyYXBwZXIgZm9yIHRoZSBnaXQtc3ltYm9saWMtcmVmIGNvbW1hbmQuIgorICAobGV0ICgoc3RyIChnaXQtY2FsbC1wcm9jZXNzLXN0cmluZyAic3ltYm9saWMtcmVmIiByZWYpKSkKKyAgICAoYW5kIHN0ciAoY2FyIChzcGxpdC1zdHJpbmcgc3RyICJcbiIpKSkpKQorCisoZGVmdW4gZ2l0LXVwZGF0ZS1yZWYgKHJlZiBuZXd2YWwgJm9wdGlvbmFsIG9sZHZhbCByZWFzb24pCisgICJVcGRhdGUgYSByZWZlcmVuY2UgYnkgY2FsbGluZyBnaXQtdXBkYXRlLXJlZi4iCisgIChsZXQgKChhcmdzIChhbmQgb2xkdmFsIChsaXN0IG9sZHZhbCkpKSkKKyAgICAod2hlbiBuZXd2YWwgKHB1c2ggbmV3dmFsIGFyZ3MpKQorICAgIChwdXNoIHJlZiBhcmdzKQorICAgICh3aGVuIHJlYXNvbgorICAgICAocHVzaCByZWFzb24gYXJncykKKyAgICAgKHB1c2ggIi1tIiBhcmdzKSkKKyAgICAodW5sZXNzIG5ld3ZhbCAocHVzaCAiLWQiIGFyZ3MpKQorICAgIChhcHBseSAnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtcmVmIiBhcmdzKSkpCisKKyhkZWZ1biBnaXQtZm9yLWVhY2gtcmVmICgmcmVzdCBzcGVjcykKKyAgIlJldHVybiBhIGxpc3Qgb2YgcmVmcyB1c2luZyBnaXQtZm9yLWVhY2gtcmVmLgorRWFjaCBlbnRyeSBpcyBhIGNvbnMgb2YgKFNIT1JULU5BTUUgLiBGVUxMLU5BTUUpLiIKKyAgKGxldCAocmVmcykKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2VzcyB0ICJmb3ItZWFjaC1yZWYiICItLWZvcm1hdD0lKHJlZm5hbWUpIiBzcGVjcykKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJeW14vXG5dKy9bXi9cbl0rL1xcKC4rXFwpJCIgbmlsIHQpCisJKHB1c2ggKGNvbnMgKG1hdGNoLXN0cmluZyAxKSAobWF0Y2gtc3RyaW5nIDApKSByZWZzKSkpCisgICAgKG5yZXZlcnNlIHJlZnMpKSkKKworKGRlZnVuIGdpdC1yZWFkLXRyZWUgKHRyZWUgJm9wdGlvbmFsIGluZGV4LWZpbGUpCisgICJSZWFkIGEgdHJlZSBpbnRvIHRoZSBpbmRleCBmaWxlLiIKKyAgKGxldCAoKHByb2Nlc3MtZW52aXJvbm1lbnQKKyAgICAgICAgIChhcHBlbmQgKGFuZCBpbmRleC1maWxlIChsaXN0IChjb25jYXQgIkdJVF9JTkRFWF9GSUxFPSIgaW5kZXgtZmlsZSkpKSBwcm9jZXNzLWVudmlyb25tZW50KSkpCisgICAgKGFwcGx5ICdnaXQtY2FsbC1wcm9jZXNzLWRpc3BsYXktZXJyb3IgInJlYWQtdHJlZSIgKGlmIHRyZWUgKGxpc3QgdHJlZSkpKSkpCisKKyhkZWZ1biBnaXQtd3JpdGUtdHJlZSAoJm9wdGlvbmFsIGluZGV4LWZpbGUpCisgICJDYWxsIGdpdC13cml0ZS10cmVlIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyB0cmVlIFNIQTEgYXMgYSBzdHJpbmcuIgorICAobGV0ICgocHJvY2Vzcy1lbnZpcm9ubWVudAorICAgICAgICAgKGFwcGVuZCAoYW5kIGluZGV4LWZpbGUgKGxpc3QgKGNvbmNhdCAiR0lUX0lOREVYX0ZJTEU9IiBpbmRleC1maWxlKSkpIHByb2Nlc3MtZW52aXJvbm1lbnQpKSkKKyAgICAoZ2l0LWdldC1zdHJpbmctc2hhMQorICAgICAoZ2l0LWNhbGwtcHJvY2Vzcy1zdHJpbmctZGlzcGxheS1lcnJvciAid3JpdGUtdHJlZSIpKSkpCisKKyhkZWZ1biBnaXQtY29tbWl0LXRyZWUgKGJ1ZmZlciB0cmVlIHBhcmVudCkKKyAgIkNyZWF0ZSBhIGNvbW1pdCBhbmQgcG9zc2libHkgdXBkYXRlIEhFQUQuCitDcmVhdGUgYSBjb21taXQgd2l0aCB0aGUgbWVzc2FnZSBpbiBCVUZGRVIgdXNpbmcgdGhlIHRyZWUgd2l0aCBoYXNoIFRSRUUuCitVc2UgUEFSRU5UIGFzIHRoZSBwYXJlbnQgb2YgdGhlIG5ldyBjb21taXQuIElmIFBBUkVOVCBpcyB0aGUgY3VycmVudCBcIkhFQURcIiwKK3VwZGF0ZSB0aGUgXCJIRUFEXCIgcmVmZXJlbmNlIHRvIHRoZSBuZXcgY29tbWl0LiIKKyAgKGxldCAoKGF1dGhvci1uYW1lIChnaXQtZ2V0LWNvbW1pdHRlci1uYW1lKSkKKyAgICAgICAgKGF1dGhvci1lbWFpbCAoZ2l0LWdldC1jb21taXR0ZXItZW1haWwpKQorICAgICAgICAoc3ViamVjdCAiY29tbWl0IChpbml0aWFsKTogIikKKyAgICAgICAgYXV0aG9yLWRhdGUgbG9nLXN0YXJ0IGxvZy1lbmQgYXJncyBjb2Rpbmctc3lzdGVtLWZvci13cml0ZSkKKyAgICAod2hlbiBwYXJlbnQKKyAgICAgIChzZXRxIHN1YmplY3QgImNvbW1pdDogIikKKyAgICAgIChwdXNoICItcCIgYXJncykKKyAgICAgIChwdXNoIHBhcmVudCBhcmdzKSkKKyAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAoaWYKKyAgICAgICAgICAoc2V0cSBsb2ctc3RhcnQgKHJlLXNlYXJjaC1mb3J3YXJkIChjb25jYXQgIl4iIChyZWdleHAtcXVvdGUgZ2l0LWxvZy1tc2ctc2VwYXJhdG9yKSAiXG4iKSBuaWwgdCkpCisgICAgICAgICAgKHNhdmUtcmVzdHJpY3Rpb24KKyAgICAgICAgICAgIChuYXJyb3ctdG8tcmVnaW9uIChwb2ludC1taW4pIGxvZy1zdGFydCkKKyAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5BdXRob3I6ICtcXCguKj9cXCkgKjxcXCguKlxcKT4gKiQiIG5pbCB0KQorICAgICAgICAgICAgICAoc2V0cSBhdXRob3ItbmFtZSAobWF0Y2gtc3RyaW5nIDEpCisgICAgICAgICAgICAgICAgICAgIGF1dGhvci1lbWFpbCAobWF0Y2gtc3RyaW5nIDIpKSkKKyAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5EYXRlOiArXFwoLipcXCkkIiBuaWwgdCkKKyAgICAgICAgICAgICAgKHNldHEgYXV0aG9yLWRhdGUgKG1hdGNoLXN0cmluZyAxKSkpCisgICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkICJeTWVyZ2U6ICtcXCguKlxcKSIgbmlsIHQpCisgICAgICAgICAgICAgIChzZXRxIHN1YmplY3QgImNvbW1pdCAobWVyZ2UpOiAiKQorICAgICAgICAgICAgICAoZG9saXN0IChwYXJlbnQgKHNwbGl0LXN0cmluZyAobWF0Y2gtc3RyaW5nIDEpICIgKyIgdCkpCisgICAgICAgICAgICAgICAgKHB1c2ggIi1wIiBhcmdzKQorICAgICAgICAgICAgICAgIChwdXNoIHBhcmVudCBhcmdzKSkpKQorICAgICAgICAoc2V0cSBsb2ctc3RhcnQgKHBvaW50LW1pbikpKQorICAgICAgKHNldHEgbG9nLWVuZCAocG9pbnQtbWF4KSkKKyAgICAgIChnb3RvLWNoYXIgbG9nLXN0YXJ0KQorICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkICIuKiQiIG5pbCB0KQorICAgICAgICAoc2V0cSBzdWJqZWN0IChjb25jYXQgc3ViamVjdCAobWF0Y2gtc3RyaW5nIDApKSkpCisgICAgICAoc2V0cSBjb2Rpbmctc3lzdGVtLWZvci13cml0ZSBidWZmZXItZmlsZS1jb2Rpbmctc3lzdGVtKSkKKyAgICAobGV0ICgoY29tbWl0CisgICAgICAgICAgIChnaXQtZ2V0LXN0cmluZy1zaGExCisgICAgICAgICAgICAobGV0ICgoZW52IGAoKCJHSVRfQVVUSE9SX05BTUUiIC4gLGF1dGhvci1uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICgiR0lUX0FVVEhPUl9FTUFJTCIgLiAsYXV0aG9yLWVtYWlsKQorICAgICAgICAgICAgICAgICAgICAgICAgICgiR0lUX0NPTU1JVFRFUl9OQU1FIiAuICwoZ2l0LWdldC1jb21taXR0ZXItbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJHSVRfQ09NTUlUVEVSX0VNQUlMIiAuICwoZ2l0LWdldC1jb21taXR0ZXItZW1haWwpKSkpKQorICAgICAgICAgICAgICAod2hlbiBhdXRob3ItZGF0ZSAocHVzaCBgKCJHSVRfQVVUSE9SX0RBVEUiIC4gLGF1dGhvci1kYXRlKSBlbnYpKQorICAgICAgICAgICAgICAoYXBwbHkgIydnaXQtcnVuLWNvbW1hbmQtcmVnaW9uCisgICAgICAgICAgICAgICAgICAgICBidWZmZXIgbG9nLXN0YXJ0IGxvZy1lbmQgZW52CisgICAgICAgICAgICAgICAgICAgICAiY29tbWl0LXRyZWUiIHRyZWUgKG5yZXZlcnNlIGFyZ3MpKSkpKSkKKyAgICAgICh3aGVuIGNvbW1pdCAoZ2l0LXVwZGF0ZS1yZWYgIkhFQUQiIGNvbW1pdCBwYXJlbnQgc3ViamVjdCkpCisgICAgICBjb21taXQpKSkKKworKGRlZnVuIGdpdC1lbXB0eS1kYi1wICgpCisgICJDaGVjayBpZiB0aGUgZ2l0IGRiIGlzIGVtcHR5IChubyBjb21taXQgZG9uZSB5ZXQpLiIKKyAgKG5vdCAoZXEgMCAoZ2l0LWNhbGwtcHJvY2VzcyBuaWwgInJldi1wYXJzZSIgIi0tdmVyaWZ5IiAiSEVBRCIpKSkpCisKKyhkZWZ1biBnaXQtZ2V0LW1lcmdlLWhlYWRzICgpCisgICJSZXRyaWV2ZSB0aGUgbWVyZ2UgaGVhZHMgZnJvbSB0aGUgTUVSR0VfSEVBRCBmaWxlIGlmIHByZXNlbnQuIgorICAobGV0IChoZWFkcykKKyAgICAod2hlbiAoZmlsZS1yZWFkYWJsZS1wICIuZ2l0L01FUkdFX0hFQUQiKQorICAgICAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAgICAgKGluc2VydC1maWxlLWNvbnRlbnRzICIuZ2l0L01FUkdFX0hFQUQiIG5pbCBuaWwgbmlsIHQpCisgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgIlswLTlhLWZdXFx7NDBcXH0iIG5pbCB0KQorICAgICAgICAgIChwdXNoIChtYXRjaC1zdHJpbmcgMCkgaGVhZHMpKSkpCisgICAgKG5yZXZlcnNlIGhlYWRzKSkpCisKKyhkZWZ1biBnaXQtZ2V0LWNvbW1pdC1kZXNjcmlwdGlvbiAoY29tbWl0KQorICAiR2V0IGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgQ09NTUlULiIKKyAgKGxldCAoKGNvZGluZy1zeXN0ZW0tZm9yLXJlYWQgKGdpdC1nZXQtbG9nb3V0cHV0LWNvZGluZy1zeXN0ZW0pKSkKKyAgICAobGV0ICgoZGVzY3IgKGdpdC1jYWxsLXByb2Nlc3Mtc3RyaW5nICJsb2ciICItLW1heC1jb3VudD0xIiAiLS1wcmV0dHk9b25lbGluZSIgY29tbWl0KSkpCisgICAgICAoaWYgKGFuZCBkZXNjciAoc3RyaW5nLW1hdGNoICJcXGBcXChbMC05YS1mXVxcezQwXFx9XFwpICpcXCguKlxcKSQiIGRlc2NyKSkKKyAgICAgICAgICAoY29uY2F0IChzdWJzdHJpbmcgKG1hdGNoLXN0cmluZyAxIGRlc2NyKSAwIDEwKSAiIC0gIiAobWF0Y2gtc3RyaW5nIDIgZGVzY3IpKQorICAgICAgICBkZXNjcikpKSkKKworOzs7OyBGaWxlIGluZm8gc3RydWN0dXJlCis7Ozs7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7IGZpbGVpbmZvIHN0cnVjdHVyZSBzdG9sZW4gZnJvbSBwY2wtY3ZzCisoZGVmc3RydWN0IChnaXQtZmlsZWluZm8KKyAgICAgICAgICAgICg6Y29waWVyIG5pbCkKKyAgICAgICAgICAgICg6Y29uc3RydWN0b3IgZ2l0LWNyZWF0ZS1maWxlaW5mbyAoc3RhdGUgbmFtZSAmb3B0aW9uYWwgb2xkLXBlcm0gbmV3LXBlcm0gcmVuYW1lLXN0YXRlIG9yaWctbmFtZSBtYXJrZWQpKQorICAgICAgICAgICAgKDpjb25jLW5hbWUgZ2l0LWZpbGVpbmZvLT4pKQorICBtYXJrZWQgICAgICAgICAgICAgIDs7IHQvbmlsCisgIHN0YXRlICAgICAgICAgICAgICAgOzsgY3VycmVudCBzdGF0ZQorICBuYW1lICAgICAgICAgICAgICAgIDs7IGZpbGUgbmFtZQorICBvbGQtcGVybSBuZXctcGVybSAgIDs7IHBlcm1pc3Npb24gZmxhZ3MKKyAgcmVuYW1lLXN0YXRlICAgICAgICA7OyByZW5hbWUgb3IgY29weSBzdGF0ZQorICBvcmlnLW5hbWUgICAgICAgICAgIDs7IG9yaWdpbmFsIG5hbWUgZm9yIHJlbmFtZXMgb3IgY29waWVzCisgIG5lZWRzLXVwZGF0ZSAgICAgICAgOzsgd2hldGhlciBmaWxlIG5lZWRzIHRvIGJlIHVwZGF0ZWQKKyAgbmVlZHMtcmVmcmVzaCkgICAgICA7OyB3aGV0aGVyIGZpbGUgbmVlZHMgdG8gYmUgcmVmcmVzaGVkCisKKyhkZWZ2YXIgZ2l0LXN0YXR1cyBuaWwpCisKKyhkZWZ1biBnaXQtc2V0LWZpbGVpbmZvLXN0YXRlIChpbmZvIHN0YXRlKQorICAiU2V0IHRoZSBzdGF0ZSBvZiBhIGZpbGUgaW5mby4iCisgICh1bmxlc3MgKGVxIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pIHN0YXRlKQorICAgIChzZXRmIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pIHN0YXRlCisJICAoZ2l0LWZpbGVpbmZvLT5uZXctcGVybSBpbmZvKSAoZ2l0LWZpbGVpbmZvLT5vbGQtcGVybSBpbmZvKQorICAgICAgICAgIChnaXQtZmlsZWluZm8tPnJlbmFtZS1zdGF0ZSBpbmZvKSBuaWwKKyAgICAgICAgICAoZ2l0LWZpbGVpbmZvLT5vcmlnLW5hbWUgaW5mbykgbmlsCisgICAgICAgICAgKGdpdC1maWxlaW5mby0+bmVlZHMtdXBkYXRlIGluZm8pIG5pbAorICAgICAgICAgIChnaXQtZmlsZWluZm8tPm5lZWRzLXJlZnJlc2ggaW5mbykgdCkpKQorCisoZGVmdW4gZ2l0LXN0YXR1cy1maWxlbmFtZXMtbWFwIChzdGF0dXMgZnVuYyBmaWxlcyAmcmVzdCBhcmdzKQorICAiQXBwbHkgRlVOQyB0byB0aGUgc3RhdHVzIGZpbGVzIG5hbWVzIGluIHRoZSBGSUxFUyBsaXN0LgorVGhlIGxpc3QgbXVzdCBiZSBzb3J0ZWQuIgorICAod2hlbiBmaWxlcworICAgIChsZXQgKChmaWxlIChwb3AgZmlsZXMpKQorICAgICAgICAgIChub2RlIChld29jLW50aCBzdGF0dXMgMCkpKQorICAgICAgKHdoaWxlIChhbmQgZmlsZSBub2RlKQorICAgICAgICAobGV0KiAoKGluZm8gKGV3b2MtZGF0YSBub2RlKSkKKyAgICAgICAgICAgICAgIChuYW1lIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbykpKQorICAgICAgICAgIChpZiAoc3RyaW5nLWxlc3NwIG5hbWUgZmlsZSkKKyAgICAgICAgICAgICAgKHNldHEgbm9kZSAoZXdvYy1uZXh0IHN0YXR1cyBub2RlKSkKKyAgICAgICAgICAgIChpZiAoc3RyaW5nLWVxdWFsIG5hbWUgZmlsZSkKKyAgICAgICAgICAgICAgICAoYXBwbHkgZnVuYyBpbmZvIGFyZ3MpKQorICAgICAgICAgICAgKHNldHEgZmlsZSAocG9wIGZpbGVzKSkpKSkpKSkKKworKGRlZnVuIGdpdC1zZXQtZmlsZW5hbWVzLXN0YXRlIChzdGF0dXMgZmlsZXMgc3RhdGUpCisgICJTZXQgdGhlIHN0YXRlIG9mIGEgbGlzdCBvZiBuYW1lZCBmaWxlcy4gVGhlIGxpc3QgbXVzdCBiZSBzb3J0ZWQiCisgICh3aGVuIGZpbGVzCisgICAgKGdpdC1zdGF0dXMtZmlsZW5hbWVzLW1hcCBzdGF0dXMgIydnaXQtc2V0LWZpbGVpbmZvLXN0YXRlIGZpbGVzIHN0YXRlKQorICAgICh1bmxlc3Mgc3RhdGUgIDs7IGRlbGV0ZSBmaWxlcyB3aG9zZSBzdGF0ZSBoYXMgYmVlbiBzZXQgdG8gbmlsCisgICAgICAoZXdvYy1maWx0ZXIgc3RhdHVzIChsYW1iZGEgKGluZm8pIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pKSkpKSkKKworKGRlZnVuIGdpdC1zdGF0ZS1jb2RlIChjb2RlKQorICAiQ29udmVydCBmcm9tIGEgc3RyaW5nIHRvIGEgYWRkZWQvZGVsZXRlZC9tb2RpZmllZCBzdGF0ZS4iCisgIChjYXNlIChzdHJpbmctdG8tY2hhciBjb2RlKQorICAgICg/TSAnbW9kaWZpZWQpCisgICAgKD8/ICd1bmtub3duKQorICAgICg/QSAnYWRkZWQpCisgICAgKD9EICdkZWxldGVkKQorICAgICg/VSAndW5tZXJnZWQpCisgICAgKD9UICdtb2RpZmllZCkKKyAgICAodCBuaWwpKSkKKworKGRlZnVuIGdpdC1zdGF0dXMtY29kZS1hcy1zdHJpbmcgKGNvZGUpCisgICJGb3JtYXQgYSBnaXQgc3RhdHVzIGNvZGUgYXMgc3RyaW5nLiIKKyAgKGNhc2UgY29kZQorICAgICgnbW9kaWZpZWQgKHByb3BlcnRpemUgIk1vZGlmaWVkIiAnZmFjZSAnZ2l0LXN0YXR1cy1mYWNlKSkKKyAgICAoJ3Vua25vd24gIChwcm9wZXJ0aXplICJVbmtub3duICIgJ2ZhY2UgJ2dpdC11bmtub3duLWZhY2UpKQorICAgICgnYWRkZWQgICAgKHByb3BlcnRpemUgIkFkZGVkICAgIiAnZmFjZSAnZ2l0LXN0YXR1cy1mYWNlKSkKKyAgICAoJ2RlbGV0ZWQgIChwcm9wZXJ0aXplICJEZWxldGVkICIgJ2ZhY2UgJ2dpdC1zdGF0dXMtZmFjZSkpCisgICAgKCd1bm1lcmdlZCAocHJvcGVydGl6ZSAiVW5tZXJnZWQiICdmYWNlICdnaXQtdW5tZXJnZWQtZmFjZSkpCisgICAgKCd1cHRvZGF0ZSAocHJvcGVydGl6ZSAiVXB0b2RhdGUiICdmYWNlICdnaXQtdXB0b2RhdGUtZmFjZSkpCisgICAgKCdpZ25vcmVkICAocHJvcGVydGl6ZSAiSWdub3JlZCAiICdmYWNlICdnaXQtaWdub3JlZC1mYWNlKSkKKyAgICAodCAiPyAgICAgICAiKSkpCisKKyhkZWZ1biBnaXQtZmlsZS10eXBlLWFzLXN0cmluZyAob2xkLXBlcm0gbmV3LXBlcm0pCisgICJSZXR1cm4gYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZmlsZSB0eXBlIGJhc2VkIG9uIGl0cyBwZXJtaXNzaW9ucy4iCisgIChsZXQqICgob2xkLXR5cGUgKGxzaCAob3Igb2xkLXBlcm0gMCkgLTkpKQorCSAobmV3LXR5cGUgKGxzaCAob3IgbmV3LXBlcm0gMCkgLTkpKQorCSAoc3RyIChjYXNlIG5ldy10eXBlCisJCSg2NCAgOzsgZmlsZQorCQkgKGNhc2Ugb2xkLXR5cGUKKwkJICAgKDY0IG5pbCkKKwkJICAgKDgwICIgICAodHlwZSBjaGFuZ2Ugc3ltbGluayAtPiBmaWxlKSIpCisJCSAgICgxMTIgIiAgICh0eXBlIGNoYW5nZSBzdWJwcm9qZWN0IC0+IGZpbGUpIikpKQorCQkgKDgwICA7OyBzeW1saW5rCisJCSAgKGNhc2Ugb2xkLXR5cGUKKwkJICAgICg2NCAiICAgKHR5cGUgY2hhbmdlIGZpbGUgLT4gc3ltbGluaykiKQorCQkgICAgKDExMiAiICAgKHR5cGUgY2hhbmdlIHN1YnByb2plY3QgLT4gc3ltbGluaykiKQorCQkgICAgKHQgIiAgIChzeW1saW5rKSIpKSkKKwkJICAoMTEyICA7OyBzdWJwcm9qZWN0CisJCSAgIChjYXNlIG9sZC10eXBlCisJCSAgICAgKDY0ICIgICAodHlwZSBjaGFuZ2UgZmlsZSAtPiBzdWJwcm9qZWN0KSIpCisJCSAgICAgKDgwICIgICAodHlwZSBjaGFuZ2Ugc3ltbGluayAtPiBzdWJwcm9qZWN0KSIpCisJCSAgICAgKHQgIiAgIChzdWJwcm9qZWN0KSIpKSkKKyAgICAgICAgICAgICAgICAgICg3MiBuaWwpICA7OyBkaXJlY3RvcnkgKGludGVybmFsLCBub3QgYSByZWFsIGdpdCBzdGF0ZSkKKwkJICAoMCAgOzsgZGVsZXRlZCBvciB1bmtub3duCisJCSAgIChjYXNlIG9sZC10eXBlCisJCSAgICAgKDgwICIgICAoc3ltbGluaykiKQorCQkgICAgICgxMTIgIiAgIChzdWJwcm9qZWN0KSIpKSkKKwkJICAodCAoZm9ybWF0ICIgICAodW5rbm93biB0eXBlICVvKSIgbmV3LXR5cGUpKSkpKQorICAgIChjb25kIChzdHIgKHByb3BlcnRpemUgc3RyICdmYWNlICdnaXQtc3RhdHVzLWZhY2UpKQorICAgICAgICAgICgoZXEgbmV3LXR5cGUgNzIpICIvIikKKyAgICAgICAgICAodCAiIikpKSkKKworKGRlZnVuIGdpdC1yZW5hbWUtYXMtc3RyaW5nIChpbmZvKQorICAiUmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNvcHkgb3IgcmVuYW1lIGFzc29jaWF0ZWQgd2l0aCBJTkZPLCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgbm9uZS4iCisgIChsZXQgKChzdGF0ZSAoZ2l0LWZpbGVpbmZvLT5yZW5hbWUtc3RhdGUgaW5mbykpKQorICAgIChpZiBzdGF0ZQorICAgICAgICAocHJvcGVydGl6ZQorICAgICAgICAgKGNvbmNhdCAiICAgKCIKKyAgICAgICAgICAgICAgICAgKGlmIChlcSBzdGF0ZSAnY29weSkgImNvcGllZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAoaWYgKGVxIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pICdhZGRlZCkgInJlbmFtZWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAicmVuYW1lZCB0byAiKSkKKyAgICAgICAgICAgICAgICAgKGdpdC1lc2NhcGUtZmlsZS1uYW1lIChnaXQtZmlsZWluZm8tPm9yaWctbmFtZSBpbmZvKSkKKyAgICAgICAgICAgICAgICAgIikiKSAnZmFjZSAnZ2l0LXN0YXR1cy1mYWNlKQorICAgICAgIiIpKSkKKworKGRlZnVuIGdpdC1wZXJtaXNzaW9ucy1hcy1zdHJpbmcgKG9sZC1wZXJtIG5ldy1wZXJtKQorICAiRm9ybWF0IGEgcGVybWlzc2lvbiBjaGFuZ2UgYXMgc3RyaW5nLiIKKyAgKHByb3BlcnRpemUKKyAgIChpZiAob3IgKG5vdCBvbGQtcGVybSkKKyAgICAgICAgICAgKG5vdCBuZXctcGVybSkKKyAgICAgICAgICAgKGVxIDAgKGxvZ2FuZCA/XDExMSAobG9neG9yIG9sZC1wZXJtIG5ldy1wZXJtKSkpKQorICAgICAgICIgICIKKyAgICAgKGlmIChlcSAwIChsb2dhbmQgP1wxMTEgb2xkLXBlcm0pKSAiK3giICIteCIpKQorICAnZmFjZSAnZ2l0LXBlcm1pc3Npb24tZmFjZSkpCisKKyhkZWZ1biBnaXQtZmlsZWluZm8tcHJldHR5cHJpbnQgKGluZm8pCisgICJQcmV0dHktcHJpbnRlciBmb3IgdGhlIGdpdC1maWxlaW5mbyBzdHJ1Y3R1cmUuIgorICAobGV0ICgob2xkLXBlcm0gKGdpdC1maWxlaW5mby0+b2xkLXBlcm0gaW5mbykpCisJKG5ldy1wZXJtIChnaXQtZmlsZWluZm8tPm5ldy1wZXJtIGluZm8pKSkKKyAgICAoaW5zZXJ0IChjb25jYXQgIiAgICIgKGlmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSAocHJvcGVydGl6ZSAiKiIgJ2ZhY2UgJ2dpdC1tYXJrLWZhY2UpICIgIikKKwkJICAgICIgIiAoZ2l0LXN0YXR1cy1jb2RlLWFzLXN0cmluZyAoZ2l0LWZpbGVpbmZvLT5zdGF0ZSBpbmZvKSkKKwkJICAgICIgIiAoZ2l0LXBlcm1pc3Npb25zLWFzLXN0cmluZyBvbGQtcGVybSBuZXctcGVybSkKKwkJICAgICIgICIgKGdpdC1lc2NhcGUtZmlsZS1uYW1lIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbykpCisJCSAgICAoZ2l0LWZpbGUtdHlwZS1hcy1zdHJpbmcgb2xkLXBlcm0gbmV3LXBlcm0pCisJCSAgICAoZ2l0LXJlbmFtZS1hcy1zdHJpbmcgaW5mbykpKSkpCisKKyhkZWZ1biBnaXQtdXBkYXRlLW5vZGUtZmlsZWluZm8gKG5vZGUgaW5mbykKKyAgIlVwZGF0ZSB0aGUgZmlsZWluZm8gb2YgdGhlIHNwZWNpZmllZCBub2RlLiBUaGUgbmFtZXMgYXJlIGFzc3VtZWQgdG8gbWF0Y2ggYWxyZWFkeS4iCisgIChsZXQgKChkYXRhIChld29jLWRhdGEgbm9kZSkpKQorICAgIChzZXRmCisgICAgIDs7IHByZXNlcnZlIHRoZSBtYXJrZWQgZmxhZworICAgICAoZ2l0LWZpbGVpbmZvLT5tYXJrZWQgaW5mbykgKGdpdC1maWxlaW5mby0+bWFya2VkIGRhdGEpCisgICAgIChnaXQtZmlsZWluZm8tPm5lZWRzLXVwZGF0ZSBkYXRhKSBuaWwpCisgICAgKHdoZW4gKG5vdCAoZXF1YWwgaW5mbyBkYXRhKSkKKyAgICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm5lZWRzLXJlZnJlc2ggaW5mbykgdAorICAgICAgICAgICAgKGV3b2MtZGF0YSBub2RlKSBpbmZvKSkpKQorCisoZGVmdW4gZ2l0LWluc2VydC1pbmZvLWxpc3QgKHN0YXR1cyBpbmZvbGlzdCBmaWxlcykKKyAgIkluc2VydCBhIHNvcnRlZCBsaXN0IG9mIGZpbGUgaW5mb3MgaW4gdGhlIHN0YXR1cyBidWZmZXIsIHJlcGxhY2luZyBleGlzdGluZyBvbmVzIGlmIGFueS4iCisgIChsZXQqICgoaW5mbyAocG9wIGluZm9saXN0KSkKKyAgICAgICAgIChub2RlIChld29jLW50aCBzdGF0dXMgMCkpCisgICAgICAgICAobmFtZSAoYW5kIGluZm8gKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkpCisgICAgICAgICByZW1haW5pbmcpCisgICAgKHdoaWxlIGluZm8KKyAgICAgIChsZXQgKChub2RlbmFtZSAoYW5kIG5vZGUgKGdpdC1maWxlaW5mby0+bmFtZSAoZXdvYy1kYXRhIG5vZGUpKSkpKQorICAgICAgICAod2hpbGUgKGFuZCBmaWxlcyAoc3RyaW5nLWxlc3NwIChjYXIgZmlsZXMpIG5hbWUpKQorICAgICAgICAgIChwdXNoIChwb3AgZmlsZXMpIHJlbWFpbmluZykpCisgICAgICAgICh3aGVuIChhbmQgZmlsZXMgKHN0cmluZy1lcXVhbCAoY2FyIGZpbGVzKSBuYW1lKSkKKyAgICAgICAgICAoc2V0cSBmaWxlcyAoY2RyIGZpbGVzKSkpCisgICAgICAgIChjb25kICgobm90IG5vZGVuYW1lKQorICAgICAgICAgICAgICAgKHNldHEgbm9kZSAoZXdvYy1lbnRlci1sYXN0IHN0YXR1cyBpbmZvKSkKKyAgICAgICAgICAgICAgIChzZXRxIGluZm8gKHBvcCBpbmZvbGlzdCkpCisgICAgICAgICAgICAgICAoc2V0cSBuYW1lIChhbmQgaW5mbyAoZ2l0LWZpbGVpbmZvLT5uYW1lIGluZm8pKSkpCisgICAgICAgICAgICAgICgoc3RyaW5nLWxlc3NwIG5vZGVuYW1lIG5hbWUpCisgICAgICAgICAgICAgICAoc2V0cSBub2RlIChld29jLW5leHQgc3RhdHVzIG5vZGUpKSkKKyAgICAgICAgICAgICAgKChzdHJpbmctZXF1YWwgbm9kZW5hbWUgbmFtZSkKKyAgICAgICAgICAgICAgIDs7IHByZXNlcnZlIHRoZSBtYXJrZWQgZmxhZworICAgICAgICAgICAgICAgKGdpdC11cGRhdGUtbm9kZS1maWxlaW5mbyBub2RlIGluZm8pCisgICAgICAgICAgICAgICAoc2V0cSBpbmZvIChwb3AgaW5mb2xpc3QpKQorICAgICAgICAgICAgICAgKHNldHEgbmFtZSAoYW5kIGluZm8gKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkpKQorICAgICAgICAgICAgICAodAorICAgICAgICAgICAgICAgKHNldHEgbm9kZSAoZXdvYy1lbnRlci1iZWZvcmUgc3RhdHVzIG5vZGUgaW5mbykpCisgICAgICAgICAgICAgICAoc2V0cSBpbmZvIChwb3AgaW5mb2xpc3QpKQorICAgICAgICAgICAgICAgKHNldHEgbmFtZSAoYW5kIGluZm8gKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkpKSkpKQorICAgIChuY29uYyAobnJldmVyc2UgcmVtYWluaW5nKSBmaWxlcykpKQorCisoZGVmdW4gZ2l0LXJ1bi1kaWZmLWluZGV4IChzdGF0dXMgZmlsZXMpCisgICJSdW4gZ2l0LWRpZmYtaW5kZXggb24gRklMRVMgYW5kIHBhcnNlIHRoZSByZXN1bHRzIGludG8gU1RBVFVTLgorUmV0dXJuIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgaGF2ZW4ndCBiZWVuIGhhbmRsZWQuIgorICAobGV0IChpbmZvbGlzdCkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2VzcyB0ICJkaWZmLWluZGV4IiAiLXoiICItTSIgIkhFQUQiICItLSIgZmlsZXMpCisgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZAorCSAgICAgICI6XFwoWzAtN11cXHs2XFx9XFwpIFxcKFswLTddXFx7NlxcfVxcKSBbMC05YS1mXVxcezQwXFx9IFswLTlhLWZdXFx7NDBcXH0gXFwoXFwoW0FETVVUXVxcKVwwXFwoW15cMF0rXFwpXFx8XFwoW0NSXVxcKVswLTldKlwwXFwoW15cMF0rXFwpXDBcXChbXlwwXStcXClcXClcMCIKKyAgICAgICAgICAgICAgbmlsIHQgMSkKKyAgICAgICAgKGxldCAoKG9sZC1wZXJtIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMSkgOCkpCisgICAgICAgICAgICAgIChuZXctcGVybSAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDIpIDgpKQorICAgICAgICAgICAgICAoc3RhdGUgKG9yIChtYXRjaC1zdHJpbmcgNCkgKG1hdGNoLXN0cmluZyA2KSkpCisgICAgICAgICAgICAgIChuYW1lIChvciAobWF0Y2gtc3RyaW5nIDUpIChtYXRjaC1zdHJpbmcgNykpKQorICAgICAgICAgICAgICAobmV3LW5hbWUgKG1hdGNoLXN0cmluZyA4KSkpCisgICAgICAgICAgKGlmIG5ldy1uYW1lICA7IGNvcHkgb3IgcmVuYW1lCisgICAgICAgICAgICAgIChpZiAoZXEgP0MgKHN0cmluZy10by1jaGFyIHN0YXRlKSkKKyAgICAgICAgICAgICAgICAgIChwdXNoIChnaXQtY3JlYXRlLWZpbGVpbmZvICdhZGRlZCBuZXctbmFtZSBvbGQtcGVybSBuZXctcGVybSAnY29weSBuYW1lKSBpbmZvbGlzdCkKKyAgICAgICAgICAgICAgICAocHVzaCAoZ2l0LWNyZWF0ZS1maWxlaW5mbyAnZGVsZXRlZCBuYW1lIDAgMCAncmVuYW1lIG5ldy1uYW1lKSBpbmZvbGlzdCkKKyAgICAgICAgICAgICAgICAocHVzaCAoZ2l0LWNyZWF0ZS1maWxlaW5mbyAnYWRkZWQgbmV3LW5hbWUgb2xkLXBlcm0gbmV3LXBlcm0gJ3JlbmFtZSBuYW1lKSBpbmZvbGlzdCkpCisgICAgICAgICAgICAocHVzaCAoZ2l0LWNyZWF0ZS1maWxlaW5mbyAoZ2l0LXN0YXRlLWNvZGUgc3RhdGUpIG5hbWUgb2xkLXBlcm0gbmV3LXBlcm0pIGluZm9saXN0KSkpKSkKKyAgICAoc2V0cSBpbmZvbGlzdCAoc29ydCAobnJldmVyc2UgaW5mb2xpc3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAoaW5mbzEgaW5mbzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWxlc3NwIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbzIpKSkpKQorICAgIChnaXQtaW5zZXJ0LWluZm8tbGlzdCBzdGF0dXMgaW5mb2xpc3QgZmlsZXMpKSkKKworKGRlZnVuIGdpdC1maW5kLXN0YXR1cy1maWxlIChzdGF0dXMgZmlsZSkKKyAgIkZpbmQgYSBnaXZlbiBmaWxlIGluIHRoZSBzdGF0dXMgZXdvYyBhbmQgcmV0dXJuIGl0cyBub2RlLiIKKyAgKGxldCAoKG5vZGUgKGV3b2MtbnRoIHN0YXR1cyAwKSkpCisgICAgKHdoaWxlIChhbmQgbm9kZSAobm90IChzdHJpbmc9IGZpbGUgKGdpdC1maWxlaW5mby0+bmFtZSAoZXdvYy1kYXRhIG5vZGUpKSkpKQorICAgICAgKHNldHEgbm9kZSAoZXdvYy1uZXh0IHN0YXR1cyBub2RlKSkpCisgICAgbm9kZSkpCisKKyhkZWZ1biBnaXQtcnVuLWxzLWZpbGVzIChzdGF0dXMgZmlsZXMgZGVmYXVsdC1zdGF0ZSAmcmVzdCBvcHRpb25zKQorICAiUnVuIGdpdC1scy1maWxlcyBvbiBGSUxFUyBhbmQgcGFyc2UgdGhlIHJlc3VsdHMgaW50byBTVEFUVVMuCitSZXR1cm4gdGhlIGxpc3Qgb2YgZmlsZXMgdGhhdCBoYXZlbid0IGJlZW4gaGFuZGxlZC4iCisgIChsZXQgKGluZm9saXN0KQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAoYXBwbHkgIydnaXQtY2FsbC1wcm9jZXNzIHQgImxzLWZpbGVzIiAiLXoiIChhcHBlbmQgb3B0aW9ucyAobGlzdCAiLS0iKSBmaWxlcykpCisgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiXFwoW15cMF0qP1xcKVxcKC8/XFwpXDAiIG5pbCB0IDEpCisgICAgICAgIChsZXQgKChuYW1lIChtYXRjaC1zdHJpbmcgMSkpKQorICAgICAgICAgIChwdXNoIChnaXQtY3JlYXRlLWZpbGVpbmZvIGRlZmF1bHQtc3RhdGUgbmFtZSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChzdHJpbmctZXF1YWwgIi8iIChtYXRjaC1zdHJpbmcgMikpIChsc2ggP1wxMTAgOSkgMCkpCisgICAgICAgICAgICAgICAgaW5mb2xpc3QpKSkpCisgICAgKHNldHEgaW5mb2xpc3QgKG5yZXZlcnNlIGluZm9saXN0KSkgIDs7IGFzc3VtZSBpdCBpcyBzb3J0ZWQgYWxyZWFkeQorICAgIChnaXQtaW5zZXJ0LWluZm8tbGlzdCBzdGF0dXMgaW5mb2xpc3QgZmlsZXMpKSkKKworKGRlZnVuIGdpdC1ydW4tbHMtZmlsZXMtY2FjaGVkIChzdGF0dXMgZmlsZXMgZGVmYXVsdC1zdGF0ZSkKKyAgIlJ1biBnaXQtbHMtZmlsZXMgLWMgb24gRklMRVMgYW5kIHBhcnNlIHRoZSByZXN1bHRzIGludG8gU1RBVFVTLgorUmV0dXJuIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgaGF2ZW4ndCBiZWVuIGhhbmRsZWQuIgorICAobGV0IChpbmZvbGlzdCkKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2VzcyB0ICJscy1maWxlcyIgIi16IiAiLXMiICItYyIgIi0tIiBmaWxlcykKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJcXChbMC03XVxcezZcXH1cXCkgWzAtOWEtZl1cXHs0MFxcfSAwXHRcXChbXlwwXStcXClcMCIgbmlsIHQpCisJKGxldCogKChuZXctcGVybSAoc3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDEpIDgpKQorCSAgICAgICAob2xkLXBlcm0gKGlmIChlcSBkZWZhdWx0LXN0YXRlICdhZGRlZCkgMCBuZXctcGVybSkpCisJICAgICAgIChuYW1lIChtYXRjaC1zdHJpbmcgMikpKQorCSAgKHB1c2ggKGdpdC1jcmVhdGUtZmlsZWluZm8gZGVmYXVsdC1zdGF0ZSBuYW1lIG9sZC1wZXJtIG5ldy1wZXJtKSBpbmZvbGlzdCkpKSkKKyAgICAoc2V0cSBpbmZvbGlzdCAobnJldmVyc2UgaW5mb2xpc3QpKSAgOzsgYXNzdW1lIGl0IGlzIHNvcnRlZCBhbHJlYWR5CisgICAgKGdpdC1pbnNlcnQtaW5mby1saXN0IHN0YXR1cyBpbmZvbGlzdCBmaWxlcykpKQorCisoZGVmdW4gZ2l0LXJ1bi1scy11bm1lcmdlZCAoc3RhdHVzIGZpbGVzKQorICAiUnVuIGdpdC1scy1maWxlcyAtdSBvbiBGSUxFUyBhbmQgcGFyc2UgdGhlIHJlc3VsdHMgaW50byBTVEFUVVMuIgorICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgIChhcHBseSAjJ2dpdC1jYWxsLXByb2Nlc3MgdCAibHMtZmlsZXMiICIteiIgIi11IiAiLS0iIGZpbGVzKQorICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgKGxldCAodW5tZXJnZWQtZmlsZXMpCisgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkICJbMC03XVxcezZcXH0gWzAtOWEtZl1cXHs0MFxcfSBbMTIzXVx0XFwoW15cMF0rXFwpXDAiIG5pbCB0KQorICAgICAgICAocHVzaCAobWF0Y2gtc3RyaW5nIDEpIHVubWVyZ2VkLWZpbGVzKSkKKyAgICAgIChzZXRxIHVubWVyZ2VkLWZpbGVzIChucmV2ZXJzZSB1bm1lcmdlZC1maWxlcykpICA7OyBhc3N1bWUgaXQgaXMgc29ydGVkIGFscmVhZHkKKyAgICAgIChnaXQtc2V0LWZpbGVuYW1lcy1zdGF0ZSBzdGF0dXMgdW5tZXJnZWQtZmlsZXMgJ3VubWVyZ2VkKSkpKQorCisoZGVmdW4gZ2l0LWdldC1leGNsdWRlLWZpbGVzICgpCisgICJHZXQgdGhlIGxpc3Qgb2YgZXhjbHVkZSBmaWxlcyB0byBwYXNzIHRvIGdpdC1scy1maWxlcy4iCisgIChsZXQgKGZpbGVzCisgICAgICAgIChjb25maWcgKGdpdC1jb25maWcgImNvcmUuZXhjbHVkZXNmaWxlIikpKQorICAgICh3aGVuIChmaWxlLXJlYWRhYmxlLXAgIi5naXQvaW5mby9leGNsdWRlIikKKyAgICAgIChwdXNoICIuZ2l0L2luZm8vZXhjbHVkZSIgZmlsZXMpKQorICAgICh3aGVuIChhbmQgY29uZmlnIChmaWxlLXJlYWRhYmxlLXAgY29uZmlnKSkKKyAgICAgIChwdXNoIGNvbmZpZyBmaWxlcykpCisgICAgZmlsZXMpKQorCisoZGVmdW4gZ2l0LXJ1bi1scy1maWxlcy13aXRoLWV4Y2x1ZGVzIChzdGF0dXMgZmlsZXMgZGVmYXVsdC1zdGF0ZSAmcmVzdCBvcHRpb25zKQorICAiUnVuIGdpdC1scy1maWxlcyBvbiBGSUxFUyB3aXRoIGFwcHJvcHJpYXRlIC0tZXhjbHVkZS1mcm9tIG9wdGlvbnMuIgorICAobGV0ICgoZXhjbHVkZS1maWxlcyAoZ2l0LWdldC1leGNsdWRlLWZpbGVzKSkpCisgICAgKGFwcGx5ICMnZ2l0LXJ1bi1scy1maWxlcyBzdGF0dXMgZmlsZXMgZGVmYXVsdC1zdGF0ZSAiLS1kaXJlY3RvcnkiICItLW5vLWVtcHR5LWRpcmVjdG9yeSIKKyAgICAgICAgICAgKGNvbmNhdCAiLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9IiBnaXQtcGVyLWRpci1pZ25vcmUtZmlsZSkKKyAgICAgICAgICAgKGFwcGVuZCBvcHRpb25zIChtYXBjYXIgKGxhbWJkYSAoZikgKGNvbmNhdCAiLS1leGNsdWRlLWZyb209IiBmKSkgZXhjbHVkZS1maWxlcykpKSkpCisKKyhkZWZ1biBnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyAoJm9wdGlvbmFsIGZpbGVzIG1hcmstZmlsZXMpCisgICJVcGRhdGUgdGhlIHN0YXR1cyBvZiBGSUxFUyBmcm9tIHRoZSBpbmRleC4KK1RoZSBGSUxFUyBsaXN0IG11c3QgYmUgc29ydGVkLiIKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICA7OyBzZXQgdGhlIG5lZWRzLXVwZGF0ZSBmbGFnIG9uIGV4aXN0aW5nIGZpbGVzCisgIChpZiBmaWxlcworICAgICAgKGdpdC1zdGF0dXMtZmlsZW5hbWVzLW1hcAorICAgICAgIGdpdC1zdGF0dXMgKGxhbWJkYSAoaW5mbykgKHNldGYgKGdpdC1maWxlaW5mby0+bmVlZHMtdXBkYXRlIGluZm8pIHQpKSBmaWxlcykKKyAgICAoZXdvYy1tYXAgKGxhbWJkYSAoaW5mbykgKHNldGYgKGdpdC1maWxlaW5mby0+bmVlZHMtdXBkYXRlIGluZm8pIHQpIG5pbCkgZ2l0LXN0YXR1cykKKyAgICAoZ2l0LWNhbGwtcHJvY2VzcyBuaWwgInVwZGF0ZS1pbmRleCIgIi0tcmVmcmVzaCIpCisgICAgKHdoZW4gZ2l0LXNob3ctdXB0b2RhdGUKKyAgICAgIChnaXQtcnVuLWxzLWZpbGVzLWNhY2hlZCBnaXQtc3RhdHVzIG5pbCAndXB0b2RhdGUpKSkKKyAgKGxldCAoKHJlbWFpbmluZy1maWxlcworICAgICAgICAgIChpZiAoZ2l0LWVtcHR5LWRiLXApIDsgd2UgbmVlZCBzb21lIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFuIGVtcHR5IGRiCisJICAgICAgKGdpdC1ydW4tbHMtZmlsZXMtY2FjaGVkIGdpdC1zdGF0dXMgZmlsZXMgJ2FkZGVkKQorICAgICAgICAgICAgKGdpdC1ydW4tZGlmZi1pbmRleCBnaXQtc3RhdHVzIGZpbGVzKSkpKQorICAgIChnaXQtcnVuLWxzLXVubWVyZ2VkIGdpdC1zdGF0dXMgZmlsZXMpCisgICAgKHdoZW4gKG9yIHJlbWFpbmluZy1maWxlcyAoYW5kIGdpdC1zaG93LXVua25vd24gKG5vdCBmaWxlcykpKQorICAgICAgKHNldHEgcmVtYWluaW5nLWZpbGVzIChnaXQtcnVuLWxzLWZpbGVzLXdpdGgtZXhjbHVkZXMgZ2l0LXN0YXR1cyByZW1haW5pbmctZmlsZXMgJ3Vua25vd24gIi1vIikpKQorICAgICh3aGVuIChvciByZW1haW5pbmctZmlsZXMgKGFuZCBnaXQtc2hvdy1pZ25vcmVkIChub3QgZmlsZXMpKSkKKyAgICAgIChzZXRxIHJlbWFpbmluZy1maWxlcyAoZ2l0LXJ1bi1scy1maWxlcy13aXRoLWV4Y2x1ZGVzIGdpdC1zdGF0dXMgcmVtYWluaW5nLWZpbGVzICdpZ25vcmVkICItbyIgIi1pIikpKQorICAgICh1bmxlc3MgZmlsZXMKKyAgICAgIChzZXRxIHJlbWFpbmluZy1maWxlcyAoZ2l0LWdldC1maWxlbmFtZXMgKGV3b2MtY29sbGVjdCBnaXQtc3RhdHVzICMnZ2l0LWZpbGVpbmZvLT5uZWVkcy11cGRhdGUpKSkpCisgICAgKHdoZW4gcmVtYWluaW5nLWZpbGVzCisgICAgICAoc2V0cSByZW1haW5pbmctZmlsZXMgKGdpdC1ydW4tbHMtZmlsZXMtY2FjaGVkIGdpdC1zdGF0dXMgcmVtYWluaW5nLWZpbGVzICd1cHRvZGF0ZSkpKQorICAgIChnaXQtc2V0LWZpbGVuYW1lcy1zdGF0ZSBnaXQtc3RhdHVzIHJlbWFpbmluZy1maWxlcyBuaWwpCisgICAgKHdoZW4gbWFyay1maWxlcyAoZ2l0LW1hcmstZmlsZXMgZ2l0LXN0YXR1cyBmaWxlcykpCisgICAgKGdpdC1yZWZyZXNoLWZpbGVzKQorICAgIChnaXQtcmVmcmVzaC1ld29jLWhmIGdpdC1zdGF0dXMpKSkKKworKGRlZnVuIGdpdC1tYXJrLWZpbGVzIChzdGF0dXMgZmlsZXMpCisgICJNYXJrIGFsbCB0aGUgc3BlY2lmaWVkIEZJTEVTLCBhbmQgdW5tYXJrIHRoZSBvdGhlcnMuIgorICAobGV0ICgoZmlsZSAoYW5kIGZpbGVzIChwb3AgZmlsZXMpKSkKKyAgICAgICAgKG5vZGUgKGV3b2MtbnRoIHN0YXR1cyAwKSkpCisgICAgKHdoaWxlIG5vZGUKKyAgICAgIChsZXQgKChpbmZvIChld29jLWRhdGEgbm9kZSkpKQorICAgICAgICAoaWYgKGFuZCBmaWxlIChzdHJpbmctZXF1YWwgKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSBmaWxlKSkKKyAgICAgICAgICAgIChwcm9nbgorICAgICAgICAgICAgICAodW5sZXNzIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKQorICAgICAgICAgICAgICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSB0KQorICAgICAgICAgICAgICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm5lZWRzLXJlZnJlc2ggaW5mbykgdCkpCisgICAgICAgICAgICAgIChzZXRxIGZpbGUgKHBvcCBmaWxlcykpCisgICAgICAgICAgICAgIChzZXRxIG5vZGUgKGV3b2MtbmV4dCBzdGF0dXMgbm9kZSkpKQorICAgICAgICAgICh3aGVuIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKQorICAgICAgICAgICAgKHNldGYgKGdpdC1maWxlaW5mby0+bWFya2VkIGluZm8pIG5pbCkKKyAgICAgICAgICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm5lZWRzLXJlZnJlc2ggaW5mbykgdCkpCisgICAgICAgICAgKGlmIChhbmQgZmlsZSAoc3RyaW5nLWxlc3NwIGZpbGUgKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkpCisgICAgICAgICAgICAgIChzZXRxIGZpbGUgKHBvcCBmaWxlcykpCisgICAgICAgICAgICAoc2V0cSBub2RlIChld29jLW5leHQgc3RhdHVzIG5vZGUpKSkpKSkpKQorCisoZGVmdW4gZ2l0LW1hcmtlZC1maWxlcyAoKQorICAiUmV0dXJuIGEgbGlzdCBvZiBhbGwgbWFya2VkIGZpbGVzLCBvciBpZiBub25lIGEgbGlzdCBjb250YWluaW5nIGp1c3QgdGhlIGZpbGUgYXQgY3Vyc29yIHBvc2l0aW9uLiIKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAob3IgKGV3b2MtY29sbGVjdCBnaXQtc3RhdHVzIChsYW1iZGEgKGluZm8pIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSkpCisgICAgICAobGlzdCAoZXdvYy1kYXRhIChld29jLWxvY2F0ZSBnaXQtc3RhdHVzKSkpKSkKKworKGRlZnVuIGdpdC1tYXJrZWQtZmlsZXMtc3RhdGUgKCZyZXN0IHN0YXRlcykKKyAgIlJldHVybiBhIHNvcnRlZCBsaXN0IG9mIG1hcmtlZCBmaWxlcyB0aGF0IGFyZSBpbiB0aGUgc3BlY2lmaWVkIHN0YXRlcy4iCisgIChsZXQgKChmaWxlcyAoZ2l0LW1hcmtlZC1maWxlcykpCisgICAgICAgIHJlc3VsdCkKKyAgICAoZG9saXN0IChpbmZvIGZpbGVzKQorICAgICAgKHdoZW4gKG1lbXEgKGdpdC1maWxlaW5mby0+c3RhdGUgaW5mbykgc3RhdGVzKQorICAgICAgICAocHVzaCBpbmZvIHJlc3VsdCkpKQorICAgIChucmV2ZXJzZSByZXN1bHQpKSkKKworKGRlZnVuIGdpdC1yZWZyZXNoLWZpbGVzICgpCisgICJSZWZyZXNoIGFsbCBmaWxlcyB0aGF0IG5lZWQgaXQgYW5kIGNsZWFyIHRoZSBuZWVkcy1yZWZyZXNoIGZsYWcuIgorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChld29jLW1hcAorICAgKGxhbWJkYSAoaW5mbykKKyAgICAgKGxldCAoKHJlZnJlc2ggKGdpdC1maWxlaW5mby0+bmVlZHMtcmVmcmVzaCBpbmZvKSkpCisgICAgICAgKHNldGYgKGdpdC1maWxlaW5mby0+bmVlZHMtcmVmcmVzaCBpbmZvKSBuaWwpCisgICAgICAgcmVmcmVzaCkpCisgICBnaXQtc3RhdHVzKQorICA7IG1vdmUgYmFjayB0byBnb2FsIGNvbHVtbgorICAod2hlbiBnb2FsLWNvbHVtbiAobW92ZS10by1jb2x1bW4gZ29hbC1jb2x1bW4pKSkKKworKGRlZnVuIGdpdC1yZWZyZXNoLWV3b2MtaGYgKHN0YXR1cykKKyAgIlJlZnJlc2ggdGhlIGV3b2MgaGVhZGVyIGFuZCBmb290ZXIuIgorICAobGV0ICgoYnJhbmNoIChnaXQtc3ltYm9saWMtcmVmICJIRUFEIikpCisgICAgICAgIChoZWFkIChpZiAoZ2l0LWVtcHR5LWRiLXApICJOb3RoaW5nIGNvbW1pdHRlZCB5ZXQiCisgICAgICAgICAgICAgICAgKGdpdC1nZXQtY29tbWl0LWRlc2NyaXB0aW9uICJIRUFEIikpKQorICAgICAgICAobWVyZ2UtaGVhZHMgKGdpdC1nZXQtbWVyZ2UtaGVhZHMpKSkKKyAgICAoZXdvYy1zZXQtaGYgc3RhdHVzCisgICAgICAgICAgICAgICAgIChmb3JtYXQgIkRpcmVjdG9yeTogICVzXG5CcmFuY2g6ICAgICAlc1xuSGVhZDogICAgICAgJXMlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQtZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIGJyYW5jaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHN0cmluZy1tYXRjaCAiXnJlZnMvaGVhZHMvIiBicmFuY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Vic3RyaW5nIGJyYW5jaCAobWF0Y2gtZW5kIDApKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJub25lIChkZXRhY2hlZCBIRUFEKSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZAorICAgICAgICAgICAgICAgICAgICAgICAgIChpZiBtZXJnZS1oZWFkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uY2F0ICJcbk1lcmdpbmc6ICAgICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFwY29uY2F0IChsYW1iZGEgKHN0cikgKGdpdC1nZXQtY29tbWl0LWRlc2NyaXB0aW9uIHN0cikpIG1lcmdlLWhlYWRzICJcbiAgICAgICAgICAgICIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIpKQorICAgICAgICAgICAgICAgICAoaWYgKGV3b2MtbnRoIHN0YXR1cyAwKSAiIiAiICAgIE5vIGNoYW5nZXMuIikpKSkKKworKGRlZnVuIGdpdC1nZXQtZmlsZW5hbWVzIChmaWxlcykKKyAgKG1hcGNhciAobGFtYmRhIChpbmZvKSAoZ2l0LWZpbGVpbmZvLT5uYW1lIGluZm8pKSBmaWxlcykpCisKKyhkZWZ1biBnaXQtdXBkYXRlLWluZGV4IChpbmRleC1maWxlIGZpbGVzKQorICAiUnVuIGdpdC11cGRhdGUtaW5kZXggb24gYSBsaXN0IG9mIGZpbGVzLiIKKyAgKGxldCAoKHByb2Nlc3MtZW52aXJvbm1lbnQgKGFwcGVuZCAoYW5kIGluZGV4LWZpbGUgKGxpc3QgKGNvbmNhdCAiR0lUX0lOREVYX0ZJTEU9IiBpbmRleC1maWxlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy1lbnZpcm9ubWVudCkpCisgICAgICAgIGFkZGVkIGRlbGV0ZWQgbW9kaWZpZWQpCisgICAgKGRvbGlzdCAoaW5mbyBmaWxlcykKKyAgICAgIChjYXNlIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pCisgICAgICAgICgnYWRkZWQgKHB1c2ggaW5mbyBhZGRlZCkpCisgICAgICAgICgnZGVsZXRlZCAocHVzaCBpbmZvIGRlbGV0ZWQpKQorICAgICAgICAoJ21vZGlmaWVkIChwdXNoIGluZm8gbW9kaWZpZWQpKSkpCisgICAgKGFuZAorICAgICAob3IgKG5vdCBhZGRlZCkgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtaW5kZXgiICItLWFkZCIgIi0tIiAoZ2l0LWdldC1maWxlbmFtZXMgYWRkZWQpKSkKKyAgICAgKG9yIChub3QgZGVsZXRlZCkgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtaW5kZXgiICItLXJlbW92ZSIgIi0tIiAoZ2l0LWdldC1maWxlbmFtZXMgZGVsZXRlZCkpKQorICAgICAob3IgKG5vdCBtb2RpZmllZCkgKGFwcGx5ICMnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtaW5kZXgiICItLSIgKGdpdC1nZXQtZmlsZW5hbWVzIG1vZGlmaWVkKSkpKSkpCisKKyhkZWZ1biBnaXQtcnVuLXByZS1jb21taXQtaG9vayAoKQorICAiUnVuIHRoZSBwcmUtY29tbWl0IGhvb2sgaWYgYW55LiIKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0ICgoZmlsZXMgKGdpdC1tYXJrZWQtZmlsZXMtc3RhdGUgJ2FkZGVkICdkZWxldGVkICdtb2RpZmllZCkpKQorICAgIChvciAobm90IGZpbGVzKQorICAgICAgICAobm90IChmaWxlLWV4ZWN1dGFibGUtcCAiLmdpdC9ob29rcy9wcmUtY29tbWl0IikpCisgICAgICAgIChsZXQgKChpbmRleC1maWxlIChtYWtlLXRlbXAtZmlsZSAiZ2l0aWR4IikpKQorICAgICAgICAgICh1bndpbmQtcHJvdGVjdAorICAgICAgICAgICAgKGxldCAoKGhlYWQtdHJlZSAodW5sZXNzIChnaXQtZW1wdHktZGItcCkgKGdpdC1yZXYtcGFyc2UgIkhFQURee3RyZWV9IikpKSkKKyAgICAgICAgICAgICAgKGdpdC1yZWFkLXRyZWUgaGVhZC10cmVlIGluZGV4LWZpbGUpCisgICAgICAgICAgICAgIChnaXQtdXBkYXRlLWluZGV4IGluZGV4LWZpbGUgZmlsZXMpCisgICAgICAgICAgICAgIChnaXQtcnVuLWhvb2sgInByZS1jb21taXQiIGAoKCJHSVRfSU5ERVhfRklMRSIgLiAsaW5kZXgtZmlsZSkpKSkKKyAgICAgICAgICAoZGVsZXRlLWZpbGUgaW5kZXgtZmlsZSkpKSkpKQorCisoZGVmdW4gZ2l0LWRvLWNvbW1pdCAoKQorICAiUGVyZm9ybSB0aGUgYWN0dWFsIGNvbW1pdCB1c2luZyB0aGUgY3VycmVudCBidWZmZXIgYXMgbG9nIG1lc3NhZ2UuIgorICAoaW50ZXJhY3RpdmUpCisgIChsZXQgKChidWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKKyAgICAgICAgKGluZGV4LWZpbGUgKG1ha2UtdGVtcC1maWxlICJnaXRpZHgiKSkpCisgICAgKHdpdGgtY3VycmVudC1idWZmZXIgbG9nLWVkaXQtcGFyZW50LWJ1ZmZlcgorICAgICAgKGlmIChnaXQtbWFya2VkLWZpbGVzLXN0YXRlICd1bm1lcmdlZCkKKyAgICAgICAgICAobWVzc2FnZSAiWW91IGNhbm5vdCBjb21taXQgdW5tZXJnZWQgZmlsZXMsIHJlc29sdmUgdGhlbSBmaXJzdC4iKQorICAgICAgICAodW53aW5kLXByb3RlY3QKKyAgICAgICAgICAgIChsZXQgKChmaWxlcyAoZ2l0LW1hcmtlZC1maWxlcy1zdGF0ZSAnYWRkZWQgJ2RlbGV0ZWQgJ21vZGlmaWVkKSkKKyAgICAgICAgICAgICAgICAgIGhlYWQgdHJlZSBoZWFkLXRyZWUpCisgICAgICAgICAgICAgICh1bmxlc3MgKGdpdC1lbXB0eS1kYi1wKQorICAgICAgICAgICAgICAgIChzZXRxIGhlYWQgKGdpdC1yZXYtcGFyc2UgIkhFQUQiKQorICAgICAgICAgICAgICAgICAgICAgIGhlYWQtdHJlZSAoZ2l0LXJldi1wYXJzZSAiSEVBRF57dHJlZX0iKSkpCisgICAgICAgICAgICAgIChtZXNzYWdlICJSdW5uaW5nIGdpdCBjb21taXQuLi4iKQorICAgICAgICAgICAgICAod2hlbgorICAgICAgICAgICAgICAgICAgKGFuZAorICAgICAgICAgICAgICAgICAgIChnaXQtcmVhZC10cmVlIGhlYWQtdHJlZSBpbmRleC1maWxlKQorICAgICAgICAgICAgICAgICAgIChnaXQtdXBkYXRlLWluZGV4IG5pbCBmaWxlcykgICAgICAgICA7dXBkYXRlIGJvdGggdGhlIGRlZmF1bHQgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAoZ2l0LXVwZGF0ZS1pbmRleCBpbmRleC1maWxlIGZpbGVzKSAgO2FuZCB0aGUgdGVtcG9yYXJ5IG9uZQorICAgICAgICAgICAgICAgICAgIChzZXRxIHRyZWUgKGdpdC13cml0ZS10cmVlIGluZGV4LWZpbGUpKSkKKyAgICAgICAgICAgICAgICAoaWYgKG9yIChub3QgKHN0cmluZy1lcXVhbCB0cmVlIGhlYWQtdHJlZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAoeWVzLW9yLW5vLXAgIlRoZSB0cmVlIHdhcyBub3QgbW9kaWZpZWQsIGRvIHlvdSByZWFsbHkgd2FudCB0byBwZXJmb3JtIGFuIGVtcHR5IGNvbW1pdD8gIikpCisgICAgICAgICAgICAgICAgICAgIChsZXQgKChjb21taXQgKGdpdC1jb21taXQtdHJlZSBidWZmZXIgdHJlZSBoZWFkKSkpCisgICAgICAgICAgICAgICAgICAgICAgKHdoZW4gY29tbWl0CisgICAgICAgICAgICAgICAgICAgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsIChkZWxldGUtZmlsZSAiLmdpdC9NRVJHRV9IRUFEIikgKGVycm9yIG5pbCkpCisgICAgICAgICAgICAgICAgICAgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsIChkZWxldGUtZmlsZSAiLmdpdC9NRVJHRV9NU0ciKSAoZXJyb3IgbmlsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlciAoZXJhc2UtYnVmZmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyAoZ2l0LWdldC1maWxlbmFtZXMgZmlsZXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgKGdpdC1jYWxsLXByb2Nlc3MgbmlsICJyZXJlcmUiKQorICAgICAgICAgICAgICAgICAgICAgICAgKGdpdC1jYWxsLXByb2Nlc3MgbmlsICJnYyIgIi0tYXV0byIpCisgICAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZSAiQ29tbWl0dGVkICVzLiIgY29tbWl0KQorICAgICAgICAgICAgICAgICAgICAgICAgKGdpdC1ydW4taG9vayAicG9zdC1jb21taXQiIG5pbCkpKQorICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UgIkNvbW1pdCBhYm9ydGVkLiIpKSkpCisgICAgICAgICAgKGRlbGV0ZS1maWxlIGluZGV4LWZpbGUpKSkpKSkKKworCis7Ozs7IEludGVyYWN0aXZlIGZ1bmN0aW9ucworOzs7OyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKGRlZnVuIGdpdC1tYXJrLWZpbGUgKCkKKyAgIk1hcmsgdGhlIGZpbGUgdGhhdCB0aGUgY3Vyc29yIGlzIG9uIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IG9uZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0KiAoKHBvcyAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpCisgICAgICAgICAoaW5mbyAoZXdvYy1kYXRhIHBvcykpKQorICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSB0KQorICAgIChld29jLWludmFsaWRhdGUgZ2l0LXN0YXR1cyBwb3MpCisgICAgKGV3b2MtZ290by1uZXh0IGdpdC1zdGF0dXMgMSkpKQorCisoZGVmdW4gZ2l0LXVubWFyay1maWxlICgpCisgICJVbm1hcmsgdGhlIGZpbGUgdGhhdCB0aGUgY3Vyc29yIGlzIG9uIGFuZCBtb3ZlIHRvIHRoZSBuZXh0IG9uZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0KiAoKHBvcyAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpCisgICAgICAgICAoaW5mbyAoZXdvYy1kYXRhIHBvcykpKQorICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSBuaWwpCisgICAgKGV3b2MtaW52YWxpZGF0ZSBnaXQtc3RhdHVzIHBvcykKKyAgICAoZXdvYy1nb3RvLW5leHQgZ2l0LXN0YXR1cyAxKSkpCisKKyhkZWZ1biBnaXQtdW5tYXJrLWZpbGUtdXAgKCkKKyAgIlVubWFyayB0aGUgZmlsZSB0aGF0IHRoZSBjdXJzb3IgaXMgb24gYW5kIG1vdmUgdG8gdGhlIHByZXZpb3VzIG9uZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0KiAoKHBvcyAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpCisgICAgICAgICAoaW5mbyAoZXdvYy1kYXRhIHBvcykpKQorICAgIChzZXRmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSBuaWwpCisgICAgKGV3b2MtaW52YWxpZGF0ZSBnaXQtc3RhdHVzIHBvcykKKyAgICAoZXdvYy1nb3RvLXByZXYgZ2l0LXN0YXR1cyAxKSkpCisKKyhkZWZ1biBnaXQtbWFyay1hbGwgKCkKKyAgIk1hcmsgYWxsIGZpbGVzLiIKKyAgKGludGVyYWN0aXZlKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChld29jLW1hcCAobGFtYmRhIChpbmZvKSAodW5sZXNzIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoZ2l0LWZpbGVpbmZvLT5tYXJrZWQgaW5mbykgdCkpKSBnaXQtc3RhdHVzKQorICA7IG1vdmUgYmFjayB0byBnb2FsIGNvbHVtbiBhZnRlciBpbnZhbGlkYXRlCisgICh3aGVuIGdvYWwtY29sdW1uIChtb3ZlLXRvLWNvbHVtbiBnb2FsLWNvbHVtbikpKQorCisoZGVmdW4gZ2l0LXVubWFyay1hbGwgKCkKKyAgIlVubWFyayBhbGwgZmlsZXMuIgorICAoaW50ZXJhY3RpdmUpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGV3b2MtbWFwIChsYW1iZGEgKGluZm8pICh3aGVuIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2V0ZiAoZ2l0LWZpbGVpbmZvLT5tYXJrZWQgaW5mbykgbmlsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0KSkgZ2l0LXN0YXR1cykKKyAgOyBtb3ZlIGJhY2sgdG8gZ29hbCBjb2x1bW4gYWZ0ZXIgaW52YWxpZGF0ZQorICAod2hlbiBnb2FsLWNvbHVtbiAobW92ZS10by1jb2x1bW4gZ29hbC1jb2x1bW4pKSkKKworKGRlZnVuIGdpdC10b2dnbGUtYWxsLW1hcmtzICgpCisgICJUb2dnbGUgYWxsIGZpbGUgbWFya3MuIgorICAoaW50ZXJhY3RpdmUpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGV3b2MtbWFwIChsYW1iZGEgKGluZm8pIChzZXRmIChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSAobm90IChnaXQtZmlsZWluZm8tPm1hcmtlZCBpbmZvKSkpIHQpIGdpdC1zdGF0dXMpCisgIDsgbW92ZSBiYWNrIHRvIGdvYWwgY29sdW1uIGFmdGVyIGludmFsaWRhdGUKKyAgKHdoZW4gZ29hbC1jb2x1bW4gKG1vdmUtdG8tY29sdW1uIGdvYWwtY29sdW1uKSkpCisKKyhkZWZ1biBnaXQtbmV4dC1maWxlICgmb3B0aW9uYWwgbikKKyAgIk1vdmUgdGhlIHNlbGVjdGlvbiBkb3duIE4gZmlsZXMuIgorICAoaW50ZXJhY3RpdmUgInAiKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChld29jLWdvdG8tbmV4dCBnaXQtc3RhdHVzIG4pKQorCisoZGVmdW4gZ2l0LXByZXYtZmlsZSAoJm9wdGlvbmFsIG4pCisgICJNb3ZlIHRoZSBzZWxlY3Rpb24gdXAgTiBmaWxlcy4iCisgIChpbnRlcmFjdGl2ZSAicCIpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGV3b2MtZ290by1wcmV2IGdpdC1zdGF0dXMgbikpCisKKyhkZWZ1biBnaXQtbmV4dC11bm1lcmdlZC1maWxlICgmb3B0aW9uYWwgbikKKyAgIk1vdmUgdGhlIHNlbGVjdGlvbiBkb3duIE4gdW5tZXJnZWQgZmlsZXMuIgorICAoaW50ZXJhY3RpdmUgInAiKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChsZXQqICgobGFzdCAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpCisgICAgICAgICAobm9kZSAoZXdvYy1uZXh0IGdpdC1zdGF0dXMgbGFzdCkpKQorICAgICh3aGlsZSAoYW5kIG5vZGUgKD4gbiAwKSkKKyAgICAgICh3aGVuIChlcSAndW5tZXJnZWQgKGdpdC1maWxlaW5mby0+c3RhdGUgKGV3b2MtZGF0YSBub2RlKSkpCisgICAgICAgIChzZXRxIG4gKDEtIG4pKQorICAgICAgICAoc2V0cSBsYXN0IG5vZGUpKQorICAgICAgKHNldHEgbm9kZSAoZXdvYy1uZXh0IGdpdC1zdGF0dXMgbm9kZSkpKQorICAgIChld29jLWdvdG8tbm9kZSBnaXQtc3RhdHVzIGxhc3QpKSkKKworKGRlZnVuIGdpdC1wcmV2LXVubWVyZ2VkLWZpbGUgKCZvcHRpb25hbCBuKQorICAiTW92ZSB0aGUgc2VsZWN0aW9uIHVwIE4gdW5tZXJnZWQgZmlsZXMuIgorICAoaW50ZXJhY3RpdmUgInAiKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChsZXQqICgobGFzdCAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpCisgICAgICAgICAobm9kZSAoZXdvYy1wcmV2IGdpdC1zdGF0dXMgbGFzdCkpKQorICAgICh3aGlsZSAoYW5kIG5vZGUgKD4gbiAwKSkKKyAgICAgICh3aGVuIChlcSAndW5tZXJnZWQgKGdpdC1maWxlaW5mby0+c3RhdGUgKGV3b2MtZGF0YSBub2RlKSkpCisgICAgICAgIChzZXRxIG4gKDEtIG4pKQorICAgICAgICAoc2V0cSBsYXN0IG5vZGUpKQorICAgICAgKHNldHEgbm9kZSAoZXdvYy1wcmV2IGdpdC1zdGF0dXMgbm9kZSkpKQorICAgIChld29jLWdvdG8tbm9kZSBnaXQtc3RhdHVzIGxhc3QpKSkKKworKGRlZnVuIGdpdC1pbnNlcnQtZmlsZSAoZmlsZSkKKyAgIkluc2VydCBmaWxlKHMpIGludG8gdGhlIGdpdC1zdGF0dXMgYnVmZmVyLiIKKyAgKGludGVyYWN0aXZlICJmSW5zZXJ0IGZpbGU6ICIpCisgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyAobGlzdCAoZmlsZS1yZWxhdGl2ZS1uYW1lIGZpbGUpKSkpCisKKyhkZWZ1biBnaXQtYWRkLWZpbGUgKCkKKyAgIkFkZCBtYXJrZWQgZmlsZShzKSB0byB0aGUgaW5kZXggY2FjaGUuIgorICAoaW50ZXJhY3RpdmUpCisgIChsZXQgKChmaWxlcyAoZ2l0LWdldC1maWxlbmFtZXMgKGdpdC1tYXJrZWQtZmlsZXMtc3RhdGUgJ3Vua25vd24gJ2lnbm9yZWQgJ3VubWVyZ2VkKSkpKQorICAgIDs7IEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZGlyZWN0b3JpZXMKKyAgICAodW5sZXNzIGZpbGVzCisgICAgICAocHVzaCAoZmlsZS1yZWxhdGl2ZS1uYW1lIChyZWFkLWZpbGUtbmFtZSAiRmlsZSB0byBhZGQ6ICIgbmlsIG5pbCB0KSkgZmlsZXMpKQorICAgICh3aGVuIChhcHBseSAnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJ1cGRhdGUtaW5kZXgiICItLWFkZCIgIi0tIiBmaWxlcykKKyAgICAgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyBmaWxlcykKKyAgICAgIChnaXQtc3VjY2Vzcy1tZXNzYWdlICJBZGRlZCIgZmlsZXMpKSkpCisKKyhkZWZ1biBnaXQtaWdub3JlLWZpbGUgKCkKKyAgIkFkZCBtYXJrZWQgZmlsZShzKSB0byB0aGUgaWdub3JlIGxpc3QuIgorICAoaW50ZXJhY3RpdmUpCisgIChsZXQgKChmaWxlcyAoZ2l0LWdldC1maWxlbmFtZXMgKGdpdC1tYXJrZWQtZmlsZXMtc3RhdGUgJ3Vua25vd24pKSkpCisgICAgKHVubGVzcyBmaWxlcworICAgICAgKHB1c2ggKGZpbGUtcmVsYXRpdmUtbmFtZSAocmVhZC1maWxlLW5hbWUgIkZpbGUgdG8gaWdub3JlOiAiIG5pbCBuaWwgdCkpIGZpbGVzKSkKKyAgICAoZG9saXN0IChmIGZpbGVzKSAoZ2l0LWFwcGVuZC10by1pZ25vcmUgZikpCisgICAgKGdpdC11cGRhdGUtc3RhdHVzLWZpbGVzIGZpbGVzKQorICAgIChnaXQtc3VjY2Vzcy1tZXNzYWdlICJJZ25vcmVkIiBmaWxlcykpKQorCisoZGVmdW4gZ2l0LXJlbW92ZS1maWxlICgpCisgICJSZW1vdmUgdGhlIG1hcmtlZCBmaWxlKHMpLiIKKyAgKGludGVyYWN0aXZlKQorICAobGV0ICgoZmlsZXMgKGdpdC1nZXQtZmlsZW5hbWVzIChnaXQtbWFya2VkLWZpbGVzLXN0YXRlICdhZGRlZCAnbW9kaWZpZWQgJ3Vua25vd24gJ3VwdG9kYXRlICdpZ25vcmVkKSkpKQorICAgICh1bmxlc3MgZmlsZXMKKyAgICAgIChwdXNoIChmaWxlLXJlbGF0aXZlLW5hbWUgKHJlYWQtZmlsZS1uYW1lICJGaWxlIHRvIHJlbW92ZTogIiBuaWwgbmlsIHQpKSBmaWxlcykpCisgICAgKGlmICh5ZXMtb3Itbm8tcAorICAgICAgICAgKGlmIChjZHIgZmlsZXMpCisgICAgICAgICAgICAgKGZvcm1hdCAiUmVtb3ZlICVkIGZpbGVzPyAiIChsZW5ndGggZmlsZXMpKQorICAgICAgICAgICAoZm9ybWF0ICJSZW1vdmUgJXM/ICIgKGNhciBmaWxlcykpKSkKKyAgICAgICAgKHByb2duCisgICAgICAgICAgKGRvbGlzdCAobmFtZSBmaWxlcykKKyAgICAgICAgICAgIChpZ25vcmUtZXJyb3JzCisgICAgICAgICAgICAgIChpZiAoZmlsZS1kaXJlY3RvcnktcCBuYW1lKQorICAgICAgICAgICAgICAgICAgKGRlbGV0ZS1kaXJlY3RvcnkgbmFtZSkKKyAgICAgICAgICAgICAgICAoZGVsZXRlLWZpbGUgbmFtZSkpKSkKKyAgICAgICAgICAod2hlbiAoYXBwbHkgJ2dpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAidXBkYXRlLWluZGV4IiAiLS1yZW1vdmUiICItLSIgZmlsZXMpCisgICAgICAgICAgICAoZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMgZmlsZXMpCisgICAgICAgICAgICAoZ2l0LXN1Y2Nlc3MtbWVzc2FnZSAiUmVtb3ZlZCIgZmlsZXMpKSkKKyAgICAgIChtZXNzYWdlICJBYm9ydGluZyIpKSkpCisKKyhkZWZ1biBnaXQtcmV2ZXJ0LWZpbGUgKCkKKyAgIlJldmVydCBjaGFuZ2VzIHRvIHRoZSBtYXJrZWQgZmlsZShzKS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGxldCAoKGZpbGVzIChnaXQtbWFya2VkLWZpbGVzLXN0YXRlICdhZGRlZCAnZGVsZXRlZCAnbW9kaWZpZWQgJ3VubWVyZ2VkKSkKKyAgICAgICAgYWRkZWQgbW9kaWZpZWQpCisgICAgKHdoZW4gKGFuZCBmaWxlcworICAgICAgICAgICAgICAgKHllcy1vci1uby1wCisgICAgICAgICAgICAgICAgKGlmIChjZHIgZmlsZXMpCisgICAgICAgICAgICAgICAgICAgIChmb3JtYXQgIlJldmVydCAlZCBmaWxlcz8gIiAobGVuZ3RoIGZpbGVzKSkKKyAgICAgICAgICAgICAgICAgIChmb3JtYXQgIlJldmVydCAlcz8gIiAoZ2l0LWZpbGVpbmZvLT5uYW1lIChjYXIgZmlsZXMpKSkpKSkKKyAgICAgIChkb2xpc3QgKGluZm8gZmlsZXMpCisgICAgICAgIChjYXNlIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pCisgICAgICAgICAgKCdhZGRlZCAocHVzaCAoZ2l0LWZpbGVpbmZvLT5uYW1lIGluZm8pIGFkZGVkKSkKKyAgICAgICAgICAoJ2RlbGV0ZWQgKHB1c2ggKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSBtb2RpZmllZCkpCisgICAgICAgICAgKCd1bm1lcmdlZCAocHVzaCAoZ2l0LWZpbGVpbmZvLT5uYW1lIGluZm8pIG1vZGlmaWVkKSkKKyAgICAgICAgICAoJ21vZGlmaWVkIChwdXNoIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbykgbW9kaWZpZWQpKSkpCisgICAgICA7OyBjaGVjayBpZiBhIGJ1ZmZlciBjb250YWlucyBvbmUgb2YgdGhlIGZpbGVzIGFuZCBpc24ndCBzYXZlZAorICAgICAgKGRvbGlzdCAoZmlsZSBtb2RpZmllZCkKKyAgICAgICAgKGxldCAoKGJ1ZmZlciAoZ2V0LWZpbGUtYnVmZmVyIGZpbGUpKSkKKyAgICAgICAgICAod2hlbiAoYW5kIGJ1ZmZlciAoYnVmZmVyLW1vZGlmaWVkLXAgYnVmZmVyKSkKKyAgICAgICAgICAgIChlcnJvciAiQnVmZmVyICVzIGlzIG1vZGlmaWVkLiBQbGVhc2Uga2lsbCBvciBzYXZlIG1vZGlmaWVkIGJ1ZmZlcnMgYmVmb3JlIHJldmVydGluZy4iIChidWZmZXItbmFtZSBidWZmZXIpKSkpKQorICAgICAgKGxldCAoKG9rIChhbmQKKyAgICAgICAgICAgICAgICAgKG9yIChub3QgYWRkZWQpCisgICAgICAgICAgICAgICAgICAgICAoYXBwbHkgJ2dpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAidXBkYXRlLWluZGV4IiAiLS1mb3JjZS1yZW1vdmUiICItLSIgYWRkZWQpKQorICAgICAgICAgICAgICAgICAob3IgKG5vdCBtb2RpZmllZCkKKyAgICAgICAgICAgICAgICAgICAgIChhcHBseSAnZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJjaGVja291dCIgIkhFQUQiIG1vZGlmaWVkKSkpKQorICAgICAgICAgICAgKG5hbWVzIChnaXQtZ2V0LWZpbGVuYW1lcyBmaWxlcykpKQorICAgICAgICAoZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMgbmFtZXMpCisgICAgICAgICh3aGVuIG9rCisgICAgICAgICAgKGRvbGlzdCAoZmlsZSBtb2RpZmllZCkKKyAgICAgICAgICAgIChsZXQgKChidWZmZXIgKGdldC1maWxlLWJ1ZmZlciBmaWxlKSkpCisgICAgICAgICAgICAgICh3aGVuIGJ1ZmZlciAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIgKHJldmVydC1idWZmZXIgdCB0IHQpKSkpKQorICAgICAgICAgIChnaXQtc3VjY2Vzcy1tZXNzYWdlICJSZXZlcnRlZCIgbmFtZXMpKSkpKSkKKworKGRlZnVuIGdpdC1yZW1vdmUtaGFuZGxlZCAoKQorICAiUmVtb3ZlIGhhbmRsZWQgZmlsZXMgZnJvbSB0aGUgc3RhdHVzIGxpc3QuIgorICAoaW50ZXJhY3RpdmUpCisgIChld29jLWZpbHRlciBnaXQtc3RhdHVzCisgICAgICAgICAgICAgICAobGFtYmRhIChpbmZvKQorICAgICAgICAgICAgICAgICAoY2FzZSAoZ2l0LWZpbGVpbmZvLT5zdGF0ZSBpbmZvKQorICAgICAgICAgICAgICAgICAgICgnaWdub3JlZCBnaXQtc2hvdy1pZ25vcmVkKQorICAgICAgICAgICAgICAgICAgICgndXB0b2RhdGUgZ2l0LXNob3ctdXB0b2RhdGUpCisgICAgICAgICAgICAgICAgICAgKCd1bmtub3duIGdpdC1zaG93LXVua25vd24pCisgICAgICAgICAgICAgICAgICAgKHQgdCkpKSkKKyAgKHVubGVzcyAoZXdvYy1udGggZ2l0LXN0YXR1cyAwKSAgOyByZWZyZXNoIGhlYWRlciBpZiBsaXN0IGlzIGVtcHR5CisgICAgKGdpdC1yZWZyZXNoLWV3b2MtaGYgZ2l0LXN0YXR1cykpKQorCisoZGVmdW4gZ2l0LXRvZ2dsZS1zaG93LXVwdG9kYXRlICgpCisgICJUb29nbGUgdGhlIG9wdGlvbiBmb3Igc2hvd2luZyB1cC10by1kYXRlIGZpbGVzLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgKHNldHEgZ2l0LXNob3ctdXB0b2RhdGUgKG5vdCBnaXQtc2hvdy11cHRvZGF0ZSkpCisgICAgICAoZ2l0LXJlZnJlc2gtc3RhdHVzKQorICAgIChnaXQtcmVtb3ZlLWhhbmRsZWQpKSkKKworKGRlZnVuIGdpdC10b2dnbGUtc2hvdy1pZ25vcmVkICgpCisgICJUb29nbGUgdGhlIG9wdGlvbiBmb3Igc2hvd2luZyBpZ25vcmVkIGZpbGVzLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgKHNldHEgZ2l0LXNob3ctaWdub3JlZCAobm90IGdpdC1zaG93LWlnbm9yZWQpKQorICAgICAgKHByb2duCisgICAgICAgIChtZXNzYWdlICJJbnNlcnRpbmcgaWdub3JlZCBmaWxlcy4uLiIpCisgICAgICAgIChnaXQtcnVuLWxzLWZpbGVzLXdpdGgtZXhjbHVkZXMgZ2l0LXN0YXR1cyBuaWwgJ2lnbm9yZWQgIi1vIiAiLWkiKQorICAgICAgICAoZ2l0LXJlZnJlc2gtZmlsZXMpCisgICAgICAgIChnaXQtcmVmcmVzaC1ld29jLWhmIGdpdC1zdGF0dXMpCisgICAgICAgIChtZXNzYWdlICJJbnNlcnRpbmcgaWdub3JlZCBmaWxlcy4uLmRvbmUiKSkKKyAgICAoZ2l0LXJlbW92ZS1oYW5kbGVkKSkpCisKKyhkZWZ1biBnaXQtdG9nZ2xlLXNob3ctdW5rbm93biAoKQorICAiVG9vZ2xlIHRoZSBvcHRpb24gZm9yIHNob3dpbmcgdW5rbm93biBmaWxlcy4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGlmIChzZXRxIGdpdC1zaG93LXVua25vd24gKG5vdCBnaXQtc2hvdy11bmtub3duKSkKKyAgICAgIChwcm9nbgorICAgICAgICAobWVzc2FnZSAiSW5zZXJ0aW5nIHVua25vd24gZmlsZXMuLi4iKQorICAgICAgICAoZ2l0LXJ1bi1scy1maWxlcy13aXRoLWV4Y2x1ZGVzIGdpdC1zdGF0dXMgbmlsICd1bmtub3duICItbyIpCisgICAgICAgIChnaXQtcmVmcmVzaC1maWxlcykKKyAgICAgICAgKGdpdC1yZWZyZXNoLWV3b2MtaGYgZ2l0LXN0YXR1cykKKyAgICAgICAgKG1lc3NhZ2UgIkluc2VydGluZyB1bmtub3duIGZpbGVzLi4uZG9uZSIpKQorICAgIChnaXQtcmVtb3ZlLWhhbmRsZWQpKSkKKworKGRlZnVuIGdpdC1leHBhbmQtZGlyZWN0b3J5IChpbmZvKQorICAiRXhwYW5kIHRoZSBkaXJlY3RvcnkgcmVwcmVzZW50ZWQgYnkgSU5GTyB0byBsaXN0IGl0cyBmaWxlcy4iCisgICh3aGVuIChlcSAobHNoIChnaXQtZmlsZWluZm8tPm5ldy1wZXJtIGluZm8pIC05KSA/XDExMCkKKyAgICAobGV0ICgoZGlyIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbykpKQorICAgICAgKGdpdC1zZXQtZmlsZW5hbWVzLXN0YXRlIGdpdC1zdGF0dXMgKGxpc3QgZGlyKSBuaWwpCisgICAgICAoZ2l0LXJ1bi1scy1maWxlcy13aXRoLWV4Y2x1ZGVzIGdpdC1zdGF0dXMgKGxpc3QgKGNvbmNhdCBkaXIgIi8iKSkgJ3Vua25vd24gIi1vIikKKyAgICAgIChnaXQtcmVmcmVzaC1maWxlcykKKyAgICAgIChnaXQtcmVmcmVzaC1ld29jLWhmIGdpdC1zdGF0dXMpCisgICAgICB0KSkpCisKKyhkZWZ1biBnaXQtc2V0dXAtZGlmZi1idWZmZXIgKGJ1ZmZlcikKKyAgIlNldHVwIGEgYnVmZmVyIGZvciBkaXNwbGF5aW5nIGEgZGlmZi4iCisgIChsZXQgKChkaXIgZGVmYXVsdC1kaXJlY3RvcnkpKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgorICAgICAgKGRpZmYtbW9kZSkKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAoc2V0cSBkZWZhdWx0LWRpcmVjdG9yeSBkaXIpCisgICAgICAoc2V0cSBidWZmZXItcmVhZC1vbmx5IHQpKSkKKyAgKGRpc3BsYXktYnVmZmVyIGJ1ZmZlcikKKyAgOyBzaHJpbmsgd2luZG93IG9ubHkgaWYgaXQgZGlzcGxheXMgdGhlIHN0YXR1cyBidWZmZXIKKyAgKHdoZW4gKGVxICh3aW5kb3ctYnVmZmVyKSAoY3VycmVudC1idWZmZXIpKQorICAgIChzaHJpbmstd2luZG93LWlmLWxhcmdlci10aGFuLWJ1ZmZlcikpKQorCisoZGVmdW4gZ2l0LWRpZmYtZmlsZSAoKQorICAiRGlmZiB0aGUgbWFya2VkIGZpbGUocykgYWdhaW5zdCBIRUFELiIKKyAgKGludGVyYWN0aXZlKQorICAobGV0ICgoZmlsZXMgKGdpdC1tYXJrZWQtZmlsZXMpKSkKKyAgICAoZ2l0LXNldHVwLWRpZmYtYnVmZmVyCisgICAgIChhcHBseSAjJ2dpdC1ydW4tY29tbWFuZC1idWZmZXIgIipnaXQtZGlmZioiICJkaWZmLWluZGV4IiAiLXAiICItTSIgIkhFQUQiICItLSIgKGdpdC1nZXQtZmlsZW5hbWVzIGZpbGVzKSkpKSkKKworKGRlZnVuIGdpdC1kaWZmLWZpbGUtbWVyZ2UtaGVhZCAoYXJnKQorICAiRGlmZiB0aGUgbWFya2VkIGZpbGUocykgYWdhaW5zdCB0aGUgZmlyc3QgbWVyZ2UgaGVhZCAob3IgdGhlIG50aCBvbmUgd2l0aCBhIG51bWVyaWMgcHJlZml4KS4iCisgIChpbnRlcmFjdGl2ZSAicCIpCisgIChsZXQgKChmaWxlcyAoZ2l0LW1hcmtlZC1maWxlcykpCisgICAgICAgIChtZXJnZS1oZWFkcyAoZ2l0LWdldC1tZXJnZS1oZWFkcykpKQorICAgICh1bmxlc3MgbWVyZ2UtaGVhZHMgKGVycm9yICJObyBtZXJnZSBpbiBwcm9ncmVzcyIpKQorICAgIChnaXQtc2V0dXAtZGlmZi1idWZmZXIKKyAgICAgKGFwcGx5ICMnZ2l0LXJ1bi1jb21tYW5kLWJ1ZmZlciAiKmdpdC1kaWZmKiIgImRpZmYtaW5kZXgiICItcCIgIi1NIgorICAgICAgICAgICAgKG9yIChudGggKDEtIGFyZykgbWVyZ2UtaGVhZHMpICJIRUFEIikgIi0tIiAoZ2l0LWdldC1maWxlbmFtZXMgZmlsZXMpKSkpKQorCisoZGVmdW4gZ2l0LWRpZmYtdW5tZXJnZWQtZmlsZSAoc3RhZ2UpCisgICJEaWZmIHRoZSBtYXJrZWQgdW5tZXJnZWQgZmlsZShzKSBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgc3RhZ2UuIgorICAobGV0ICgoZmlsZXMgKGdpdC1tYXJrZWQtZmlsZXMpKSkKKyAgICAoZ2l0LXNldHVwLWRpZmYtYnVmZmVyCisgICAgIChhcHBseSAjJ2dpdC1ydW4tY29tbWFuZC1idWZmZXIgIipnaXQtZGlmZioiICJkaWZmLWZpbGVzIiAiLXAiIHN0YWdlICItLSIgKGdpdC1nZXQtZmlsZW5hbWVzIGZpbGVzKSkpKSkKKworKGRlZnVuIGdpdC1kaWZmLWZpbGUtYmFzZSAoKQorICAiRGlmZiB0aGUgbWFya2VkIHVubWVyZ2VkIGZpbGUocykgYWdhaW5zdCB0aGUgY29tbW9uIGJhc2UgZmlsZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGdpdC1kaWZmLXVubWVyZ2VkLWZpbGUgIi0xIikpCisKKyhkZWZ1biBnaXQtZGlmZi1maWxlLW1pbmUgKCkKKyAgIkRpZmYgdGhlIG1hcmtlZCB1bm1lcmdlZCBmaWxlKHMpIGFnYWluc3QgbXkgcHJlLW1lcmdlIHZlcnNpb24uIgorICAoaW50ZXJhY3RpdmUpCisgIChnaXQtZGlmZi11bm1lcmdlZC1maWxlICItMiIpKQorCisoZGVmdW4gZ2l0LWRpZmYtZmlsZS1vdGhlciAoKQorICAiRGlmZiB0aGUgbWFya2VkIHVubWVyZ2VkIGZpbGUocykgYWdhaW5zdCB0aGUgb3RoZXIncyBwcmUtbWVyZ2UgdmVyc2lvbi4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGdpdC1kaWZmLXVubWVyZ2VkLWZpbGUgIi0zIikpCisKKyhkZWZ1biBnaXQtZGlmZi1maWxlLWNvbWJpbmVkICgpCisgICJEbyBhIGNvbWJpbmVkIGRpZmYgb2YgdGhlIG1hcmtlZCB1bm1lcmdlZCBmaWxlKHMpLiIKKyAgKGludGVyYWN0aXZlKQorICAoZ2l0LWRpZmYtdW5tZXJnZWQtZmlsZSAiLWMiKSkKKworKGRlZnVuIGdpdC1kaWZmLWZpbGUtaWRpZmYgKCkKKyAgIlBlcmZvcm0gYW4gaW50ZXJhY3RpdmUgZGlmZiBvbiB0aGUgY3VycmVudCBmaWxlLiIKKyAgKGludGVyYWN0aXZlKQorICAobGV0ICgoZmlsZXMgKGdpdC1tYXJrZWQtZmlsZXMtc3RhdGUgJ2FkZGVkICdkZWxldGVkICdtb2RpZmllZCkpKQorICAgICh1bmxlc3MgKGVxIDEgKGxlbmd0aCBmaWxlcykpCisgICAgICAoZXJyb3IgIkNhbm5vdCBwZXJmb3JtIGFuIGludGVyYWN0aXZlIGRpZmYgb24gbXVsdGlwbGUgZmlsZXMuIikpCisgICAgKGxldCogKChmaWxlbmFtZSAoY2FyIChnaXQtZ2V0LWZpbGVuYW1lcyBmaWxlcykpKQorICAgICAgICAgICAoYnVmZjEgKGZpbmQtZmlsZS1ub3NlbGVjdCBmaWxlbmFtZSkpCisgICAgICAgICAgIChidWZmMiAoZ2l0LXJ1bi1jb21tYW5kLWJ1ZmZlciAoY29uY2F0IGZpbGVuYW1lICIufkhFQUR+IikgImNhdC1maWxlIiAiYmxvYiIgKGNvbmNhdCAiSEVBRDoiIGZpbGVuYW1lKSkpKQorICAgICAgKGVkaWZmLWJ1ZmZlcnMgYnVmZjEgYnVmZjIpKSkpCisKKyhkZWZ1biBnaXQtbG9nLWZpbGUgKCkKKyAgIkRpc3BsYXkgYSBsb2cgb2YgY2hhbmdlcyB0byB0aGUgbWFya2VkIGZpbGUocykuIgorICAoaW50ZXJhY3RpdmUpCisgIChsZXQqICgoZmlsZXMgKGdpdC1tYXJrZWQtZmlsZXMpKQorICAgICAgICAgKGNvZGluZy1zeXN0ZW0tZm9yLXJlYWQgZ2l0LWNvbW1pdHMtY29kaW5nLXN5c3RlbSkKKyAgICAgICAgIChidWZmZXIgKGFwcGx5ICMnZ2l0LXJ1bi1jb21tYW5kLWJ1ZmZlciAiKmdpdC1sb2cqIiAicmV2LWxpc3QiICItLXByZXR0eSIgIkhFQUQiICItLSIgKGdpdC1nZXQtZmlsZW5hbWVzIGZpbGVzKSkpKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgorICAgICAgOyAoZ2l0LWxvZy1tb2RlKSAgRklYTUU6IGltcGxlbWVudCBsb2cgbW9kZQorICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgIChzZXRxIGJ1ZmZlci1yZWFkLW9ubHkgdCkpCisgICAgKGRpc3BsYXktYnVmZmVyIGJ1ZmZlcikpKQorCisoZGVmdW4gZ2l0LWxvZy1lZGl0LWZpbGVzICgpCisgICJSZXR1cm4gYSBsaXN0IG9mIG1hcmtlZCBmaWxlcyBmb3IgdXNlIGluIHRoZSBsb2ctZWRpdCBidWZmZXIuIgorICAod2l0aC1jdXJyZW50LWJ1ZmZlciBsb2ctZWRpdC1wYXJlbnQtYnVmZmVyCisgICAgKGdpdC1nZXQtZmlsZW5hbWVzIChnaXQtbWFya2VkLWZpbGVzLXN0YXRlICdhZGRlZCAnZGVsZXRlZCAnbW9kaWZpZWQpKSkpCisKKyhkZWZ1biBnaXQtbG9nLWVkaXQtZGlmZiAoKQorICAiUnVuIGEgZGlmZiBvZiB0aGUgY3VycmVudCBmaWxlcyBiZWluZyBjb21taXR0ZWQgZnJvbSBhIGxvZy1lZGl0IGJ1ZmZlci4iCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGxvZy1lZGl0LXBhcmVudC1idWZmZXIKKyAgICAoZ2l0LWRpZmYtZmlsZSkpKQorCisoZGVmdW4gZ2l0LWFwcGVuZC1zaWduLW9mZiAobmFtZSBlbWFpbCkKKyAgIkFwcGVuZCBhIFNpZ25lZC1vZmYtYnkgZW50cnkgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLCBhdm9pZGluZyBkdXBsaWNhdGVzLiIKKyAgKGxldCAoKHNpZ24tb2ZmIChmb3JtYXQgIlNpZ25lZC1vZmYtYnk6ICVzIDwlcz4iIG5hbWUgZW1haWwpKQorICAgICAgICAoY2FzZS1mb2xkLXNlYXJjaCB0KSkKKyAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICh1bmxlc3MgKHJlLXNlYXJjaC1mb3J3YXJkIChjb25jYXQgIl4iIChyZWdleHAtcXVvdGUgc2lnbi1vZmYpKSBuaWwgdCkKKyAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAodW5sZXNzIChyZS1zZWFyY2gtZm9yd2FyZCAiXlNpZ25lZC1vZmYtYnk6ICIgbmlsIHQpCisgICAgICAgIChzZXRxIHNpZ24tb2ZmIChjb25jYXQgIlxuIiBzaWduLW9mZikpKQorICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkKKyAgICAgIChpbnNlcnQgc2lnbi1vZmYgIlxuIikpKSkKKworKGRlZnVuIGdpdC1zZXR1cC1sb2ctYnVmZmVyIChidWZmZXIgJm9wdGlvbmFsIG1lcmdlLWhlYWRzIGF1dGhvci1uYW1lIGF1dGhvci1lbWFpbCBzdWJqZWN0IGRhdGUgbXNnKQorICAiU2V0dXAgdGhlIGxvZyBidWZmZXIgZm9yIGEgY29tbWl0LiIKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0ICgoZGlyIGRlZmF1bHQtZGlyZWN0b3J5KQorICAgICAgICAoY29tbWl0dGVyLW5hbWUgKGdpdC1nZXQtY29tbWl0dGVyLW5hbWUpKQorICAgICAgICAoY29tbWl0dGVyLWVtYWlsIChnaXQtZ2V0LWNvbW1pdHRlci1lbWFpbCkpCisgICAgICAgIChzaWduLW9mZiBnaXQtYXBwZW5kLXNpZ25lZC1vZmYtYnkpKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1ZmZlcgorICAgICAgKGNkIGRpcikKKyAgICAgIChlcmFzZS1idWZmZXIpCisgICAgICAoaW5zZXJ0CisgICAgICAgKHByb3BlcnRpemUKKyAgICAgICAgKGZvcm1hdCAiQXV0aG9yOiAlcyA8JXM+XG4lcyVzIgorICAgICAgICAgICAgICAgIChvciBhdXRob3ItbmFtZSBjb21taXR0ZXItbmFtZSkKKyAgICAgICAgICAgICAgICAob3IgYXV0aG9yLWVtYWlsIGNvbW1pdHRlci1lbWFpbCkKKyAgICAgICAgICAgICAgICAoaWYgZGF0ZSAoZm9ybWF0ICJEYXRlOiAlc1xuIiBkYXRlKSAiIikKKyAgICAgICAgICAgICAgICAoaWYgbWVyZ2UtaGVhZHMKKyAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCAiTWVyZ2U6ICVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNvbmNhdCAnaWRlbnRpdHkgbWVyZ2UtaGVhZHMgIiAiKSkKKyAgICAgICAgICAgICAgICAgICIiKSkKKyAgICAgICAgJ2ZhY2UgJ2dpdC1oZWFkZXItZmFjZSkKKyAgICAgICAocHJvcGVydGl6ZSBnaXQtbG9nLW1zZy1zZXBhcmF0b3IgJ2ZhY2UgJ2dpdC1zZXBhcmF0b3ItZmFjZSkKKyAgICAgICAiXG4iKQorICAgICAgKHdoZW4gc3ViamVjdCAoaW5zZXJ0IHN1YmplY3QgIlxuXG4iKSkKKyAgICAgIChjb25kIChtc2cgKGluc2VydCBtc2cgIlxuIikpCisgICAgICAgICAgICAoKGZpbGUtcmVhZGFibGUtcCAiLmdpdC9yZWJhc2UtYXBwbHkvbXNnIikKKyAgICAgICAgICAgICAoaW5zZXJ0LWZpbGUtY29udGVudHMgIi5naXQvcmViYXNlLWFwcGx5L21zZyIpKQorICAgICAgICAgICAgKChmaWxlLXJlYWRhYmxlLXAgIi5naXQvTUVSR0VfTVNHIikKKyAgICAgICAgICAgICAoaW5zZXJ0LWZpbGUtY29udGVudHMgIi5naXQvTUVSR0VfTVNHIikpKQorICAgICAgOyBkZWxldGUgZW1wdHkgbGluZXMgYXQgZW5kCisgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkICJcbitcXCciIG5pbCB0KQorICAgICAgICAocmVwbGFjZS1tYXRjaCAiXG4iIHQgdCkpCisgICAgICAod2hlbiBzaWduLW9mZiAoZ2l0LWFwcGVuZC1zaWduLW9mZiBjb21taXR0ZXItbmFtZSBjb21taXR0ZXItZW1haWwpKSkKKyAgICBidWZmZXIpKQorCisoZGVmaW5lLWRlcml2ZWQtbW9kZSBnaXQtbG9nLWVkaXQtbW9kZSBsb2ctZWRpdC1tb2RlICJHaXQtTG9nLUVkaXQiCisgICJNYWpvciBtb2RlIGZvciBlZGl0aW5nIGdpdCBsb2cgbWVzc2FnZXMuCisKK1NldCB1cCBnaXQtc3BlY2lmaWMgYGZvbnQtbG9jay1rZXl3b3JkcycgZm9yIGBsb2ctZWRpdC1tb2RlJy4iCisgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2ZvbnQtbG9jay1kZWZhdWx0cykKKyAgICAgICAnKGdpdC1sb2ctZWRpdC1mb250LWxvY2sta2V5d29yZHMgdCB0KSkpCisKKyhkZWZ1biBnaXQtY29tbWl0LWZpbGUgKCkKKyAgIkNvbW1pdCB0aGUgbWFya2VkIGZpbGUocyksIGFza2luZyBmb3IgYSBjb21taXQgbWVzc2FnZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAod2hlbiAoZ2l0LXJ1bi1wcmUtY29tbWl0LWhvb2spCisgICAgKGxldCAoKGJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIipnaXQtY29tbWl0KiIpKQorICAgICAgICAgIChjb2Rpbmctc3lzdGVtIChnaXQtZ2V0LWNvbW1pdHMtY29kaW5nLXN5c3RlbSkpCisgICAgICAgICAgYXV0aG9yLW5hbWUgYXV0aG9yLWVtYWlsIHN1YmplY3QgZGF0ZSkKKyAgICAgICh3aGVuIChlcSAwIChidWZmZXItc2l6ZSBidWZmZXIpKQorICAgICAgICAod2hlbiAoZmlsZS1yZWFkYWJsZS1wICIuZ2l0L3JlYmFzZS1hcHBseS9pbmZvIikKKyAgICAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgICAgICAgKGluc2VydC1maWxlLWNvbnRlbnRzICIuZ2l0L3JlYmFzZS1hcHBseS9pbmZvIikKKyAgICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5BdXRob3I6IFxcKC4qXFwpXG5FbWFpbDogXFwoLipcXCkkIiBuaWwgdCkKKyAgICAgICAgICAgICAgKHNldHEgYXV0aG9yLW5hbWUgKG1hdGNoLXN0cmluZyAxKSkKKyAgICAgICAgICAgICAgKHNldHEgYXV0aG9yLWVtYWlsIChtYXRjaC1zdHJpbmcgMikpKQorICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgICAgICAgICh3aGVuIChyZS1zZWFyY2gtZm9yd2FyZCAiXlN1YmplY3Q6IFxcKC4qXFwpJCIgbmlsIHQpCisgICAgICAgICAgICAgIChzZXRxIHN1YmplY3QgKG1hdGNoLXN0cmluZyAxKSkpCisgICAgICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgICAgICAgKHdoZW4gKHJlLXNlYXJjaC1mb3J3YXJkICJeRGF0ZTogXFwoLipcXCkkIiBuaWwgdCkKKyAgICAgICAgICAgICAgKHNldHEgZGF0ZSAobWF0Y2gtc3RyaW5nIDEpKSkpKQorICAgICAgICAoZ2l0LXNldHVwLWxvZy1idWZmZXIgYnVmZmVyIChnaXQtZ2V0LW1lcmdlLWhlYWRzKSBhdXRob3ItbmFtZSBhdXRob3ItZW1haWwgc3ViamVjdCBkYXRlKSkKKyAgICAgIChpZiAoYm91bmRwICdsb2ctZWRpdC1kaWZmLWZ1bmN0aW9uKQorCSAgKGxvZy1lZGl0ICdnaXQtZG8tY29tbWl0IG5pbCAnKChsb2ctZWRpdC1saXN0ZnVuIC4gZ2l0LWxvZy1lZGl0LWZpbGVzKQorCQkJCQkgKGxvZy1lZGl0LWRpZmYtZnVuY3Rpb24gLiBnaXQtbG9nLWVkaXQtZGlmZikpIGJ1ZmZlciAnZ2l0LWxvZy1lZGl0LW1vZGUpCisJKGxvZy1lZGl0ICdnaXQtZG8tY29tbWl0IG5pbCAnZ2l0LWxvZy1lZGl0LWZpbGVzIGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgJ2dpdC1sb2ctZWRpdC1tb2RlKSkKKyAgICAgIChzZXRxIHBhcmFncmFwaC1zZXBhcmF0ZSAoY29uY2F0IChyZWdleHAtcXVvdGUgZ2l0LWxvZy1tc2ctc2VwYXJhdG9yKSAiJFxcfEF1dGhvcjogXFx8RGF0ZTogXFx8TWVyZ2U6IFxcfFNpZ25lZC1vZmYtYnk6IFxcfFxmXFx8WyAJXSokIikpCisgICAgICAoc2V0cSBidWZmZXItZmlsZS1jb2Rpbmctc3lzdGVtIGNvZGluZy1zeXN0ZW0pCisgICAgICAocmUtc2VhcmNoLWZvcndhcmQgKHJlZ2V4cC1xdW90ZSAoY29uY2F0IGdpdC1sb2ctbXNnLXNlcGFyYXRvciAiXG4iKSkgbmlsIHQpKSkpCisKKyhkZWZ1biBnaXQtc2V0dXAtY29tbWl0LWJ1ZmZlciAoY29tbWl0KQorICAiU2V0dXAgdGhlIGNvbW1pdCBidWZmZXIgd2l0aCB0aGUgY29udGVudHMgb2YgQ09NTUlULiIKKyAgKGxldCAocGFyZW50cyBhdXRob3ItbmFtZSBhdXRob3ItZW1haWwgc3ViamVjdCBkYXRlIG1zZykKKyAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgKGxldCAoKGNvZGluZy1zeXN0ZW0gKGdpdC1nZXQtbG9nb3V0cHV0LWNvZGluZy1zeXN0ZW0pKSkKKyAgICAgICAgKGdpdC1jYWxsLXByb2Nlc3MgdCAibG9nIiAiLTEiICItLXByZXR0eT1tZWRpdW0iICItLWFiYnJldj00MCIgY29tbWl0KQorICAgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5NZXJnZTogKlxcKC4qXFwpJCIgbmlsIHQpCisgICAgICAgICAgKHNldHEgcGFyZW50cyAoY2RyIChzcGxpdC1zdHJpbmcgKG1hdGNoLXN0cmluZyAxKSAiICsiKSkpKQorICAgICAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5BdXRob3I6ICpcXCguKlxcKSA8XFwoLipcXCk+JCIgbmlsIHQpCisgICAgICAgICAgKHNldHEgYXV0aG9yLW5hbWUgKG1hdGNoLXN0cmluZyAxKSkKKyAgICAgICAgICAoc2V0cSBhdXRob3ItZW1haWwgKG1hdGNoLXN0cmluZyAyKSkpCisgICAgICAgICh3aGVuIChyZS1zZWFyY2gtZm9yd2FyZCAiXkRhdGU6ICpcXCguKlxcKSQiIG5pbCB0KQorICAgICAgICAgIChzZXRxIGRhdGUgKG1hdGNoLXN0cmluZyAxKSkpCisgICAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgIl4gICAgXFwoLipcXCkkIiBuaWwgdCkKKyAgICAgICAgICAocHVzaCAobWF0Y2gtc3RyaW5nIDEpIG1zZykpCisgICAgICAgIChzZXRxIG1zZyAobnJldmVyc2UgbXNnKSkKKyAgICAgICAgKHNldHEgc3ViamVjdCAocG9wIG1zZykpCisgICAgICAgICh3aGlsZSAoYW5kIG1zZyAoemVyb3AgKGxlbmd0aCAoY2FyIG1zZykpKSAocG9wIG1zZykpKSkpCisgICAgKGdpdC1zZXR1cC1sb2ctYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKmdpdC1jb21taXQqIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50cyBhdXRob3ItbmFtZSBhdXRob3ItZW1haWwgc3ViamVjdCBkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXBjb25jYXQgIydpZGVudGl0eSBtc2cgIlxuIikpKSkKKworKGRlZnVuIGdpdC1nZXQtY29tbWl0LWZpbGVzIChjb21taXQpCisgICJSZXRyaWV2ZSBhIHNvcnRlZCBsaXN0IG9mIGZpbGVzIG1vZGlmaWVkIGJ5IENPTU1JVC4iCisgIChsZXQgKGZpbGVzKQorICAgICh3aXRoLXRlbXAtYnVmZmVyCisgICAgICAoZ2l0LWNhbGwtcHJvY2VzcyB0ICJkaWZmLXRyZWUiICItbSIgIi1yIiAiLXoiICItLW5hbWUtb25seSIgIi0tbm8tY29tbWl0LWlkIiAiLS1yb290IiBjb21taXQpCisgICAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCAiXFwoW15cMF0qXFwpXDAiIG5pbCB0IDEpCisgICAgICAgIChwdXNoIChtYXRjaC1zdHJpbmcgMSkgZmlsZXMpKSkKKyAgICAoc29ydCBmaWxlcyAjJ3N0cmluZy1sZXNzcCkpKQorCisoZGVmdW4gZ2l0LXJlYWQtY29tbWl0LW5hbWUgKHByb21wdCAmb3B0aW9uYWwgZGVmYXVsdCkKKyAgIkFzayBmb3IgYSBjb21taXQgbmFtZSwgd2l0aCBjb21wbGV0aW9uIGZvciBsb2NhbCBicmFuY2gsIHJlbW90ZSBicmFuY2ggYW5kIHRhZy4iCisgIChjb21wbGV0aW5nLXJlYWQgcHJvbXB0CisgICAgICAgICAgICAgICAgICAgKGxpc3QqICJIRUFEIiAiT1JJR19IRUFEIiAiRkVUQ0hfSEVBRCIgKG1hcGNhciAjJ2NhciAoZ2l0LWZvci1lYWNoLXJlZikpKQorCQkgICBuaWwgbmlsIG5pbCBuaWwgZGVmYXVsdCkpCisKKyhkZWZ1biBnaXQtY2hlY2tvdXQgKGJyYW5jaCAmb3B0aW9uYWwgbWVyZ2UpCisgICJDaGVja291dCBhIGJyYW5jaCwgdGFnLCBvciBhbnkgY29tbWl0LgorVXNlIGEgcHJlZml4IGFyZyBpZiBnaXQgc2hvdWxkIG1lcmdlIHdoaWxlIGNoZWNraW5nIG91dC4iCisgIChpbnRlcmFjdGl2ZQorICAgKGxpc3QgKGdpdC1yZWFkLWNvbW1pdC1uYW1lICJDaGVja291dDogIikKKyAgICAgICAgIGN1cnJlbnQtcHJlZml4LWFyZykpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGxldCAoKGFyZ3MgKGxpc3QgYnJhbmNoICItLSIpKSkKKyAgICAod2hlbiBtZXJnZSAocHVzaCAiLW0iIGFyZ3MpKQorICAgICh3aGVuIChhcHBseSAjJ2dpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAiY2hlY2tvdXQiIGFyZ3MpCisgICAgICAoZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMpKSkpCisKKyhkZWZ1biBnaXQtYnJhbmNoIChicmFuY2gpCisgICJDcmVhdGUgYSBicmFuY2ggZnJvbSB0aGUgY3VycmVudCBIRUFEIGFuZCBzd2l0Y2ggdG8gaXQuIgorICAoaW50ZXJhY3RpdmUgKGxpc3QgKGdpdC1yZWFkLWNvbW1pdC1uYW1lICJCcmFuY2g6ICIpKSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAoaWYgKGdpdC1yZXYtcGFyc2UgKGNvbmNhdCAicmVmcy9oZWFkcy8iIGJyYW5jaCkpCisgICAgICAoaWYgKHllcy1vci1uby1wIChmb3JtYXQgIkJyYW5jaCAlcyBhbHJlYWR5IGV4aXN0cywgcmVwbGFjZSBpdD8gIiBicmFuY2gpKQorICAgICAgICAgIChhbmQgKGdpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAiYnJhbmNoIiAiLWYiIGJyYW5jaCkKKyAgICAgICAgICAgICAgIChnaXQtY2FsbC1wcm9jZXNzLWRpc3BsYXktZXJyb3IgImNoZWNrb3V0IiBicmFuY2gpKQorICAgICAgICAobWVzc2FnZSAiQ2FuY2VsZWQuIikpCisgICAgKGdpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAiY2hlY2tvdXQiICItYiIgYnJhbmNoKSkKKyAgICAoZ2l0LXJlZnJlc2gtZXdvYy1oZiBnaXQtc3RhdHVzKSkKKworKGRlZnVuIGdpdC1hbWVuZC1jb21taXQgKCkKKyAgIlVuZG8gdGhlIGxhc3QgY29tbWl0IG9uIEhFQUQsIGFuZCBzZXQgdGhpbmdzIHVwIHRvIGNvbW1pdCBhbgorYW1lbmRlZCB2ZXJzaW9uIG9mIGl0LiIKKyAgKGludGVyYWN0aXZlKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgICh3aGVuIChnaXQtZW1wdHktZGItcCkgKGVycm9yICJObyBjb21taXQgdG8gYW1lbmQuIikpCisgIChsZXQqICgoY29tbWl0IChnaXQtcmV2LXBhcnNlICJIRUFEIikpCisgICAgICAgICAoZmlsZXMgKGdpdC1nZXQtY29tbWl0LWZpbGVzIGNvbW1pdCkpKQorICAgICh3aGVuIChpZiAoZ2l0LXJldi1wYXJzZSAiSEVBRF4iKQorICAgICAgICAgICAgICAoZ2l0LWNhbGwtcHJvY2Vzcy1kaXNwbGF5LWVycm9yICJyZXNldCIgIi0tc29mdCIgIkhFQUReIikKKyAgICAgICAgICAgIChhbmQgKGdpdC11cGRhdGUtcmVmICJPUklHX0hFQUQiIGNvbW1pdCkKKyAgICAgICAgICAgICAgICAgKGdpdC11cGRhdGUtcmVmICJIRUFEIiBuaWwgY29tbWl0KSkpCisgICAgICAoZ2l0LXVwZGF0ZS1zdGF0dXMtZmlsZXMgZmlsZXMgdCkKKyAgICAgIChnaXQtc2V0dXAtY29tbWl0LWJ1ZmZlciBjb21taXQpCisgICAgICAoZ2l0LWNvbW1pdC1maWxlKSkpKQorCisoZGVmdW4gZ2l0LWNoZXJyeS1waWNrLWNvbW1pdCAoYXJnKQorICAiQ2hlcnJ5LXBpY2sgYSBjb21taXQuIgorICAoaW50ZXJhY3RpdmUgKGxpc3QgKGdpdC1yZWFkLWNvbW1pdC1uYW1lICJDaGVycnktcGljayBjb21taXQ6ICIpKSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0ICgoY29tbWl0IChnaXQtcmV2LXBhcnNlIChjb25jYXQgYXJnICJeMCIpKSkpCisgICAgKHVubGVzcyBjb21taXQgKGVycm9yICJOb3QgYSB2YWxpZCBjb21taXQgJyVzJy4iIGFyZykpCisgICAgKHdoZW4gKGdpdC1yZXYtcGFyc2UgKGNvbmNhdCBjb21taXQgIl4yIikpCisgICAgICAoZXJyb3IgIkNhbm5vdCBjaGVycnktcGljayBhIG1lcmdlIGNvbW1pdC4iKSkKKyAgICAobGV0ICgoZmlsZXMgKGdpdC1nZXQtY29tbWl0LWZpbGVzIGNvbW1pdCkpCisgICAgICAgICAgKG9rIChnaXQtY2FsbC1wcm9jZXNzLWRpc3BsYXktZXJyb3IgImNoZXJyeS1waWNrIiAiLW4iIGNvbW1pdCkpKQorICAgICAgKGdpdC11cGRhdGUtc3RhdHVzLWZpbGVzIGZpbGVzIG9rKQorICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdpdC1zZXR1cC1jb21taXQtYnVmZmVyIGNvbW1pdCkKKyAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAgICAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZCAiXlxuKlNpZ25lZC1vZmYtYnk6IiBuaWwgdCAxKQorICAgICAgICAgICAgKGdvdG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDApKQorICAgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpKQorICAgICAgICAoaW5zZXJ0ICIoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAiIGNvbW1pdCAiKVxuIikpCisgICAgICAod2hlbiBvayAoZ2l0LWNvbW1pdC1maWxlKSkpKSkKKworKGRlZnVuIGdpdC1yZXZlcnQtY29tbWl0IChhcmcpCisgICJSZXZlcnQgYSBjb21taXQuIgorICAoaW50ZXJhY3RpdmUgKGxpc3QgKGdpdC1yZWFkLWNvbW1pdC1uYW1lICJSZXZlcnQgY29tbWl0OiAiKSkpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGxldCAoKGNvbW1pdCAoZ2l0LXJldi1wYXJzZSAoY29uY2F0IGFyZyAiXjAiKSkpKQorICAgICh1bmxlc3MgY29tbWl0IChlcnJvciAiTm90IGEgdmFsaWQgY29tbWl0ICclcycuIiBhcmcpKQorICAgICh3aGVuIChnaXQtcmV2LXBhcnNlIChjb25jYXQgY29tbWl0ICJeMiIpKQorICAgICAgKGVycm9yICJDYW5ub3QgcmV2ZXJ0IGEgbWVyZ2UgY29tbWl0LiIpKQorICAgIChsZXQgKChmaWxlcyAoZ2l0LWdldC1jb21taXQtZmlsZXMgY29tbWl0KSkKKyAgICAgICAgICAoc3ViamVjdCAoZ2l0LWdldC1jb21taXQtZGVzY3JpcHRpb24gY29tbWl0KSkKKyAgICAgICAgICAob2sgKGdpdC1jYWxsLXByb2Nlc3MtZGlzcGxheS1lcnJvciAicmV2ZXJ0IiAiLW4iIGNvbW1pdCkpKQorICAgICAgKGdpdC11cGRhdGUtc3RhdHVzLWZpbGVzIGZpbGVzIG9rKQorICAgICAgKHdoZW4gKHN0cmluZy1tYXRjaCAiXlswLTlhLWZdKyAtIFxcKC4qXFwpJCIgc3ViamVjdCkKKyAgICAgICAgKHNldHEgc3ViamVjdCAobWF0Y2gtc3RyaW5nIDEgc3ViamVjdCkpKQorICAgICAgKGdpdC1zZXR1cC1sb2ctYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKmdpdC1jb21taXQqIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2l0LWdldC1tZXJnZS1oZWFkcykgbmlsIG5pbCAoZm9ybWF0ICJSZXZlcnQgXCIlc1wiIiBzdWJqZWN0KSBuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICJUaGlzIHJldmVydHMgY29tbWl0ICVzLlxuIiBjb21taXQpKQorICAgICAgKHdoZW4gb2sgKGdpdC1jb21taXQtZmlsZSkpKSkpCisKKyhkZWZ1biBnaXQtZmluZC1maWxlICgpCisgICJWaXNpdCB0aGUgY3VycmVudCBmaWxlIGluIGl0cyBvd24gYnVmZmVyLiIKKyAgKGludGVyYWN0aXZlKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChsZXQgKChpbmZvIChld29jLWRhdGEgKGV3b2MtbG9jYXRlIGdpdC1zdGF0dXMpKSkpCisgICAgKHVubGVzcyAoZ2l0LWV4cGFuZC1kaXJlY3RvcnkgaW5mbykKKyAgICAgIChmaW5kLWZpbGUgKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkKKyAgICAgICh3aGVuIChlcSAndW5tZXJnZWQgKGdpdC1maWxlaW5mby0+c3RhdGUgaW5mbykpCisgICAgICAgIChzbWVyZ2UtbW9kZSAxKSkpKSkKKworKGRlZnVuIGdpdC1maW5kLWZpbGUtb3RoZXItd2luZG93ICgpCisgICJWaXNpdCB0aGUgY3VycmVudCBmaWxlIGluIGl0cyBvd24gYnVmZmVyIGluIGFub3RoZXIgd2luZG93LiIKKyAgKGludGVyYWN0aXZlKQorICAodW5sZXNzIGdpdC1zdGF0dXMgKGVycm9yICJOb3QgaW4gZ2l0LXN0YXR1cyBidWZmZXIuIikpCisgIChsZXQgKChpbmZvIChld29jLWRhdGEgKGV3b2MtbG9jYXRlIGdpdC1zdGF0dXMpKSkpCisgICAgKGZpbmQtZmlsZS1vdGhlci13aW5kb3cgKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkKKyAgICAod2hlbiAoZXEgJ3VubWVyZ2VkIChnaXQtZmlsZWluZm8tPnN0YXRlIGluZm8pKQorICAgICAgKHNtZXJnZS1tb2RlKSkpKQorCisoZGVmdW4gZ2l0LWZpbmQtZmlsZS1pbWVyZ2UgKCkKKyAgIlZpc2l0IHRoZSBjdXJyZW50IGZpbGUgaW4gaW50ZXJhY3RpdmUgbWVyZ2UgbW9kZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHVubGVzcyBnaXQtc3RhdHVzIChlcnJvciAiTm90IGluIGdpdC1zdGF0dXMgYnVmZmVyLiIpKQorICAobGV0ICgoaW5mbyAoZXdvYy1kYXRhIChld29jLWxvY2F0ZSBnaXQtc3RhdHVzKSkpKQorICAgIChmaW5kLWZpbGUgKGdpdC1maWxlaW5mby0+bmFtZSBpbmZvKSkKKyAgICAoc21lcmdlLWVkaWZmKSkpCisKKyhkZWZ1biBnaXQtdmlldy1maWxlICgpCisgICJWaWV3IHRoZSBjdXJyZW50IGZpbGUgaW4gaXRzIG93biBidWZmZXIuIgorICAoaW50ZXJhY3RpdmUpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKGxldCAoKGluZm8gKGV3b2MtZGF0YSAoZXdvYy1sb2NhdGUgZ2l0LXN0YXR1cykpKSkKKyAgICAodmlldy1maWxlIChnaXQtZmlsZWluZm8tPm5hbWUgaW5mbykpKSkKKworKGRlZnVuIGdpdC1yZWZyZXNoLXN0YXR1cyAoKQorICAiUmVmcmVzaCB0aGUgZ2l0IHN0YXR1cyBidWZmZXIuIgorICAoaW50ZXJhY3RpdmUpCisgICh1bmxlc3MgZ2l0LXN0YXR1cyAoZXJyb3IgIk5vdCBpbiBnaXQtc3RhdHVzIGJ1ZmZlci4iKSkKKyAgKG1lc3NhZ2UgIlJlZnJlc2hpbmcgZ2l0IHN0YXR1cy4uLiIpCisgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcykKKyAgKG1lc3NhZ2UgIlJlZnJlc2hpbmcgZ2l0IHN0YXR1cy4uLmRvbmUiKSkKKworKGRlZnVuIGdpdC1zdGF0dXMtcXVpdCAoKQorICAiUXVpdCBnaXQtc3RhdHVzIG1vZGUuIgorICAoaW50ZXJhY3RpdmUpCisgIChidXJ5LWJ1ZmZlcikpCisKKzs7OzsgTWFqb3IgTW9kZQorOzs7OyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKGRlZnZhciBnaXQtc3RhdHVzLW1vZGUtaG9vayBuaWwKKyAgIlJ1biBhZnRlciBgZ2l0LXN0YXR1cy1tb2RlJyBpcyBzZXR1cC4iKQorCisoZGVmdmFyIGdpdC1zdGF0dXMtbW9kZS1tYXAgbmlsCisgICJLZXltYXAgZm9yIGdpdCBtYWpvciBtb2RlLiIpCisKKyhkZWZ2YXIgZ2l0LXN0YXR1cyBuaWwKKyAgIkxpc3Qgb2YgYWxsIGZpbGVzIG1hbmFnZWQgYnkgdGhlIGdpdC1zdGF0dXMgbW9kZS4iKQorCisodW5sZXNzIGdpdC1zdGF0dXMtbW9kZS1tYXAKKyAgKGxldCAoKG1hcCAobWFrZS1rZXltYXApKQorICAgICAgICAoY29tbWl0LW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkKKyAgICAgICAgKGRpZmYtbWFwIChtYWtlLXNwYXJzZS1rZXltYXApKQorICAgICAgICAodG9nZ2xlLW1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCisgICAgKHN1cHByZXNzLWtleW1hcCBtYXApCisgICAgKGRlZmluZS1rZXkgbWFwICI/IiAgICdnaXQtaGVscCkKKyAgICAoZGVmaW5lLWtleSBtYXAgImgiICAgJ2dpdC1oZWxwKQorICAgIChkZWZpbmUta2V5IG1hcCAiICIgICAnZ2l0LW5leHQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgImEiICAgJ2dpdC1hZGQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgImMiICAgJ2dpdC1jb21taXQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgIlxDLWMiIGNvbW1pdC1tYXApCisgICAgKGRlZmluZS1rZXkgbWFwICJkIiAgICBkaWZmLW1hcCkKKyAgICAoZGVmaW5lLWtleSBtYXAgIj0iICAgJ2dpdC1kaWZmLWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJmIiAgICdnaXQtZmluZC1maWxlKQorICAgIChkZWZpbmUta2V5IG1hcCAiXHIiICAnZ2l0LWZpbmQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgImciICAgJ2dpdC1yZWZyZXNoLXN0YXR1cykKKyAgICAoZGVmaW5lLWtleSBtYXAgImkiICAgJ2dpdC1pZ25vcmUtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgIkkiICAgJ2dpdC1pbnNlcnQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgImwiICAgJ2dpdC1sb2ctZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgIm0iICAgJ2dpdC1tYXJrLWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJNIiAgICdnaXQtbWFyay1hbGwpCisgICAgKGRlZmluZS1rZXkgbWFwICJuIiAgICdnaXQtbmV4dC1maWxlKQorICAgIChkZWZpbmUta2V5IG1hcCAiTiIgICAnZ2l0LW5leHQtdW5tZXJnZWQtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgIm8iICAgJ2dpdC1maW5kLWZpbGUtb3RoZXItd2luZG93KQorICAgIChkZWZpbmUta2V5IG1hcCAicCIgICAnZ2l0LXByZXYtZmlsZSkKKyAgICAoZGVmaW5lLWtleSBtYXAgIlAiICAgJ2dpdC1wcmV2LXVubWVyZ2VkLWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJxIiAgICdnaXQtc3RhdHVzLXF1aXQpCisgICAgKGRlZmluZS1rZXkgbWFwICJyIiAgICdnaXQtcmVtb3ZlLWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJ0IiAgICB0b2dnbGUtbWFwKQorICAgIChkZWZpbmUta2V5IG1hcCAiVCIgICAnZ2l0LXRvZ2dsZS1hbGwtbWFya3MpCisgICAgKGRlZmluZS1rZXkgbWFwICJ1IiAgICdnaXQtdW5tYXJrLWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJVIiAgICdnaXQtcmV2ZXJ0LWZpbGUpCisgICAgKGRlZmluZS1rZXkgbWFwICJ2IiAgICdnaXQtdmlldy1maWxlKQorICAgIChkZWZpbmUta2V5IG1hcCAieCIgICAnZ2l0LXJlbW92ZS1oYW5kbGVkKQorICAgIChkZWZpbmUta2V5IG1hcCAiXEMtPyIgJ2dpdC11bm1hcmstZmlsZS11cCkKKyAgICAoZGVmaW5lLWtleSBtYXAgIlxNLVxDLT8iICdnaXQtdW5tYXJrLWFsbCkKKyAgICA7IHRoZSBjb21taXQgc3VibWFwCisgICAgKGRlZmluZS1rZXkgY29tbWl0LW1hcCAiXEMtYSIgJ2dpdC1hbWVuZC1jb21taXQpCisgICAgKGRlZmluZS1rZXkgY29tbWl0LW1hcCAiXEMtYiIgJ2dpdC1icmFuY2gpCisgICAgKGRlZmluZS1rZXkgY29tbWl0LW1hcCAiXEMtbyIgJ2dpdC1jaGVja291dCkKKyAgICAoZGVmaW5lLWtleSBjb21taXQtbWFwICJcQy1wIiAnZ2l0LWNoZXJyeS1waWNrLWNvbW1pdCkKKyAgICAoZGVmaW5lLWtleSBjb21taXQtbWFwICJcQy12IiAnZ2l0LXJldmVydC1jb21taXQpCisgICAgOyB0aGUgZGlmZiBzdWJtYXAKKyAgICAoZGVmaW5lLWtleSBkaWZmLW1hcCAiYiIgJ2dpdC1kaWZmLWZpbGUtYmFzZSkKKyAgICAoZGVmaW5lLWtleSBkaWZmLW1hcCAiYyIgJ2dpdC1kaWZmLWZpbGUtY29tYmluZWQpCisgICAgKGRlZmluZS1rZXkgZGlmZi1tYXAgIj0iICdnaXQtZGlmZi1maWxlKQorICAgIChkZWZpbmUta2V5IGRpZmYtbWFwICJlIiAnZ2l0LWRpZmYtZmlsZS1pZGlmZikKKyAgICAoZGVmaW5lLWtleSBkaWZmLW1hcCAiRSIgJ2dpdC1maW5kLWZpbGUtaW1lcmdlKQorICAgIChkZWZpbmUta2V5IGRpZmYtbWFwICJoIiAnZ2l0LWRpZmYtZmlsZS1tZXJnZS1oZWFkKQorICAgIChkZWZpbmUta2V5IGRpZmYtbWFwICJtIiAnZ2l0LWRpZmYtZmlsZS1taW5lKQorICAgIChkZWZpbmUta2V5IGRpZmYtbWFwICJvIiAnZ2l0LWRpZmYtZmlsZS1vdGhlcikKKyAgICA7IHRoZSB0b2dnbGUgc3VibWFwCisgICAgKGRlZmluZS1rZXkgdG9nZ2xlLW1hcCAidSIgJ2dpdC10b2dnbGUtc2hvdy11cHRvZGF0ZSkKKyAgICAoZGVmaW5lLWtleSB0b2dnbGUtbWFwICJpIiAnZ2l0LXRvZ2dsZS1zaG93LWlnbm9yZWQpCisgICAgKGRlZmluZS1rZXkgdG9nZ2xlLW1hcCAiayIgJ2dpdC10b2dnbGUtc2hvdy11bmtub3duKQorICAgIChkZWZpbmUta2V5IHRvZ2dsZS1tYXAgIm0iICdnaXQtdG9nZ2xlLWFsbC1tYXJrcykKKyAgICAoc2V0cSBnaXQtc3RhdHVzLW1vZGUtbWFwIG1hcCkpCisgIChlYXN5LW1lbnUtZGVmaW5lIGdpdC1tZW51IGdpdC1zdGF0dXMtbW9kZS1tYXAKKyAgICAiR2l0IE1lbnUiCisgICAgYCgiR2l0IgorICAgICAgWyJSZWZyZXNoIiBnaXQtcmVmcmVzaC1zdGF0dXMgdF0KKyAgICAgIFsiQ29tbWl0IiBnaXQtY29tbWl0LWZpbGUgdF0KKyAgICAgIFsiQ2hlY2tvdXQuLi4iIGdpdC1jaGVja291dCB0XQorICAgICAgWyJOZXcgQnJhbmNoLi4uIiBnaXQtYnJhbmNoIHRdCisgICAgICBbIkNoZXJyeS1waWNrIENvbW1pdC4uLiIgZ2l0LWNoZXJyeS1waWNrLWNvbW1pdCB0XQorICAgICAgWyJSZXZlcnQgQ29tbWl0Li4uIiBnaXQtcmV2ZXJ0LWNvbW1pdCB0XQorICAgICAgKCJNZXJnZSIKKwlbIk5leHQgVW5tZXJnZWQgRmlsZSIgZ2l0LW5leHQtdW5tZXJnZWQtZmlsZSB0XQorCVsiUHJldiBVbm1lcmdlZCBGaWxlIiBnaXQtcHJldi11bm1lcmdlZC1maWxlIHRdCisJWyJJbnRlcmFjdGl2ZSBNZXJnZSBGaWxlIiBnaXQtZmluZC1maWxlLWltZXJnZSB0XQorCVsiRGlmZiBBZ2FpbnN0IENvbW1vbiBCYXNlIEZpbGUiIGdpdC1kaWZmLWZpbGUtYmFzZSB0XQorCVsiRGlmZiBDb21iaW5lZCIgZ2l0LWRpZmYtZmlsZS1jb21iaW5lZCB0XQorCVsiRGlmZiBBZ2FpbnN0IE1lcmdlIEhlYWQiIGdpdC1kaWZmLWZpbGUtbWVyZ2UtaGVhZCB0XQorCVsiRGlmZiBBZ2FpbnN0IE1pbmUiIGdpdC1kaWZmLWZpbGUtbWluZSB0XQorCVsiRGlmZiBBZ2FpbnN0IE90aGVyIiBnaXQtZGlmZi1maWxlLW90aGVyIHRdKQorICAgICAgIi0tLS0tLS0tIgorICAgICAgWyJBZGQgRmlsZSIgZ2l0LWFkZC1maWxlIHRdCisgICAgICBbIlJldmVydCBGaWxlIiBnaXQtcmV2ZXJ0LWZpbGUgdF0KKyAgICAgIFsiSWdub3JlIEZpbGUiIGdpdC1pZ25vcmUtZmlsZSB0XQorICAgICAgWyJSZW1vdmUgRmlsZSIgZ2l0LXJlbW92ZS1maWxlIHRdCisgICAgICBbIkluc2VydCBGaWxlIiBnaXQtaW5zZXJ0LWZpbGUgdF0KKyAgICAgICItLS0tLS0tLSIKKyAgICAgIFsiRmluZCBGaWxlIiBnaXQtZmluZC1maWxlIHRdCisgICAgICBbIlZpZXcgRmlsZSIgZ2l0LXZpZXctZmlsZSB0XQorICAgICAgWyJEaWZmIEZpbGUiIGdpdC1kaWZmLWZpbGUgdF0KKyAgICAgIFsiSW50ZXJhY3RpdmUgRGlmZiBGaWxlIiBnaXQtZGlmZi1maWxlLWlkaWZmIHRdCisgICAgICBbIkxvZyIgZ2l0LWxvZy1maWxlIHRdCisgICAgICAiLS0tLS0tLS0iCisgICAgICBbIk1hcmsiIGdpdC1tYXJrLWZpbGUgdF0KKyAgICAgIFsiTWFyayBBbGwiIGdpdC1tYXJrLWFsbCB0XQorICAgICAgWyJVbm1hcmsiIGdpdC11bm1hcmstZmlsZSB0XQorICAgICAgWyJVbm1hcmsgQWxsIiBnaXQtdW5tYXJrLWFsbCB0XQorICAgICAgWyJUb2dnbGUgQWxsIE1hcmtzIiBnaXQtdG9nZ2xlLWFsbC1tYXJrcyB0XQorICAgICAgWyJIaWRlIEhhbmRsZWQgRmlsZXMiIGdpdC1yZW1vdmUtaGFuZGxlZCB0XQorICAgICAgIi0tLS0tLS0tIgorICAgICAgWyJTaG93IFVwdG9kYXRlIEZpbGVzIiBnaXQtdG9nZ2xlLXNob3ctdXB0b2RhdGUgOnN0eWxlIHRvZ2dsZSA6c2VsZWN0ZWQgZ2l0LXNob3ctdXB0b2RhdGVdCisgICAgICBbIlNob3cgSWdub3JlZCBGaWxlcyIgZ2l0LXRvZ2dsZS1zaG93LWlnbm9yZWQgOnN0eWxlIHRvZ2dsZSA6c2VsZWN0ZWQgZ2l0LXNob3ctaWdub3JlZF0KKyAgICAgIFsiU2hvdyBVbmtub3duIEZpbGVzIiBnaXQtdG9nZ2xlLXNob3ctdW5rbm93biA6c3R5bGUgdG9nZ2xlIDpzZWxlY3RlZCBnaXQtc2hvdy11bmtub3duXQorICAgICAgIi0tLS0tLS0tIgorICAgICAgWyJRdWl0IiBnaXQtc3RhdHVzLXF1aXQgdF0pKSkKKworCis7OyBnaXQgbW9kZSBzaG91bGQgb25seSBydW4gaW4gdGhlICpnaXQgc3RhdHVzKiBidWZmZXIKKyhwdXQgJ2dpdC1zdGF0dXMtbW9kZSAnbW9kZS1jbGFzcyAnc3BlY2lhbCkKKworKGRlZnVuIGdpdC1zdGF0dXMtbW9kZSAoKQorICAiTWFqb3IgbW9kZSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBHaXQuCitDb21tYW5kczoKK1xce2dpdC1zdGF0dXMtbW9kZS1tYXB9IgorICAoa2lsbC1hbGwtbG9jYWwtdmFyaWFibGVzKQorICAoYnVmZmVyLWRpc2FibGUtdW5kbykKKyAgKHNldHEgbW9kZS1uYW1lICJnaXQgc3RhdHVzIgorICAgICAgICBtYWpvci1tb2RlICdnaXQtc3RhdHVzLW1vZGUKKyAgICAgICAgZ29hbC1jb2x1bW4gMTcKKyAgICAgICAgYnVmZmVyLXJlYWQtb25seSB0KQorICAodXNlLWxvY2FsLW1hcCBnaXQtc3RhdHVzLW1vZGUtbWFwKQorICAobGV0ICgoYnVmZmVyLXJlYWQtb25seSBuaWwpKQorICAgIChlcmFzZS1idWZmZXIpCisgIChsZXQgKChzdGF0dXMgKGV3b2MtY3JlYXRlICdnaXQtZmlsZWluZm8tcHJldHR5cHJpbnQgIiIgIiIpKSkKKyAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdnaXQtc3RhdHVzKSBzdGF0dXMpKQorICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdsaXN0LWJ1ZmZlcnMtZGlyZWN0b3J5KSBkZWZhdWx0LWRpcmVjdG9yeSkKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2dpdC1zaG93LXVwdG9kYXRlKQorICAobWFrZS1sb2NhbC12YXJpYWJsZSAnZ2l0LXNob3ctaWdub3JlZCkKKyAgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2dpdC1zaG93LXVua25vd24pCisgIChydW4taG9va3MgJ2dpdC1zdGF0dXMtbW9kZS1ob29rKSkpCisKKyhkZWZ1biBnaXQtZmluZC1zdGF0dXMtYnVmZmVyIChkaXIpCisgICJGaW5kIHRoZSBnaXQgc3RhdHVzIGJ1ZmZlciBoYW5kbGluZyBhIHNwZWNpZmllZCBkaXJlY3RvcnkuIgorICAobGV0ICgobGlzdCAoYnVmZmVyLWxpc3QpKQorICAgICAgICAoZnVsbGRpciAoZXhwYW5kLWZpbGUtbmFtZSBkaXIpKQorICAgICAgICBmb3VuZCkKKyAgICAod2hpbGUgKGFuZCBsaXN0IChub3QgZm91bmQpKQorICAgICAgKGxldCAoKGJ1ZmZlciAoY2FyIGxpc3QpKSkKKyAgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCisgICAgICAgICAgKHdoZW4gKGFuZCBsaXN0LWJ1ZmZlcnMtZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWVxdWFsIGZ1bGxkaXIgKGV4cGFuZC1maWxlLW5hbWUgbGlzdC1idWZmZXJzLWRpcmVjdG9yeSkpCisJCSAgICAgKGVxIG1ham9yLW1vZGUgJ2dpdC1zdGF0dXMtbW9kZSkpCisgICAgICAgICAgICAoc2V0cSBmb3VuZCBidWZmZXIpKSkpCisgICAgICAoc2V0cSBsaXN0IChjZHIgbGlzdCkpKQorICAgIGZvdW5kKSkKKworKGRlZnVuIGdpdC1zdGF0dXMgKGRpcikKKyAgIkVudHJ5IHBvaW50IGludG8gZ2l0LXN0YXR1cyBtb2RlLiIKKyAgKGludGVyYWN0aXZlICJEU2VsZWN0IGRpcmVjdG9yeTogIikKKyAgKHNldHEgZGlyIChnaXQtZ2V0LXRvcC1kaXIgZGlyKSkKKyAgKGlmIChmaWxlLWV4aXN0cy1wIChjb25jYXQgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkgZGlyKSAiLmdpdCIpKQorICAgICAgKGxldCAoKGJ1ZmZlciAob3IgKGFuZCBnaXQtcmV1c2Utc3RhdHVzLWJ1ZmZlciAoZ2l0LWZpbmQtc3RhdHVzLWJ1ZmZlciBkaXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgKGNyZWF0ZS1maWxlLWJ1ZmZlciAoZXhwYW5kLWZpbGUtbmFtZSAiKmdpdC1zdGF0dXMqIiBkaXIpKSkpKQorICAgICAgICAoc3dpdGNoLXRvLWJ1ZmZlciBidWZmZXIpCisgICAgICAgIChjZCBkaXIpCisgICAgICAgIChnaXQtc3RhdHVzLW1vZGUpCisgICAgICAgIChnaXQtcmVmcmVzaC1zdGF0dXMpCisgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgICAgIChhZGQtaG9vayAnYWZ0ZXItc2F2ZS1ob29rICdnaXQtdXBkYXRlLXNhdmVkLWZpbGUpKQorICAgIChtZXNzYWdlICIlcyBpcyBub3QgYSBnaXQgd29ya2luZyB0cmVlLiIgZGlyKSkpCisKKyhkZWZ1biBnaXQtdXBkYXRlLXNhdmVkLWZpbGUgKCkKKyAgIlVwZGF0ZSB0aGUgY29ycmVzcG9uZGluZyBnaXQtc3RhdHVzIGJ1ZmZlciB3aGVuIGEgZmlsZSBpcyBzYXZlZC4KK01lYW50IHRvIGJlIHVzZWQgaW4gYGFmdGVyLXNhdmUtaG9vaycuIgorICAobGV0KiAoKGZpbGUgKGV4cGFuZC1maWxlLW5hbWUgYnVmZmVyLWZpbGUtbmFtZSkpCisgICAgICAgICAoZGlyIChjb25kaXRpb24tY2FzZSBuaWwgKGdpdC1nZXQtdG9wLWRpciAoZmlsZS1uYW1lLWRpcmVjdG9yeSBmaWxlKSkgKGVycm9yIG5pbCkpKQorICAgICAgICAgKGJ1ZmZlciAoYW5kIGRpciAoZ2l0LWZpbmQtc3RhdHVzLWJ1ZmZlciBkaXIpKSkpCisgICAgKHdoZW4gYnVmZmVyCisgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKKyAgICAgICAgKGxldCAoKGZpbGVuYW1lIChmaWxlLXJlbGF0aXZlLW5hbWUgZmlsZSBkaXIpKSkKKyAgICAgICAgICA7IHNraXAgZmlsZXMgbG9jYXRlZCBpbnNpZGUgdGhlIC5naXQgZGlyZWN0b3J5CisgICAgICAgICAgKHVubGVzcyAoc3RyaW5nLW1hdGNoICJeXFwuZ2l0LyIgZmlsZW5hbWUpCisgICAgICAgICAgICAoZ2l0LWNhbGwtcHJvY2VzcyBuaWwgImFkZCIgIi0tcmVmcmVzaCIgIi0tIiBmaWxlbmFtZSkKKyAgICAgICAgICAgIChnaXQtdXBkYXRlLXN0YXR1cy1maWxlcyAobGlzdCBmaWxlbmFtZSkpKSkpKSkpCisKKyhkZWZ1biBnaXQtaGVscCAoKQorICAiRGlzcGxheSBoZWxwIGZvciBHaXQgbW9kZS4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGRlc2NyaWJlLWZ1bmN0aW9uICdnaXQtc3RhdHVzLW1vZGUpKQorCisocHJvdmlkZSAnZ2l0KQorOzs7IGdpdC5lbCBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvUkVBRE1FIGIvY29udHJpYi9leGFtcGxlcy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk0NmYzZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvUkVBRE1FCkBAIC0wLDAgKzEsMyBAQAorVGhlc2UgYXJlIG9yaWdpbmFsIHNjcmlwdGVkIGltcGxlbWVudGF0aW9ucywga2VwdCBwcmltYXJpbHkgZm9yIHRoZWlyCityZWZlcmVuY2UgdmFsdWUgdG8gYW55IGFzcGlyaW5nIHBsdW1iaW5nIHVzZXJzIHdobyB3YW50IHRvIGxlYXJuIGhvdworcGllY2VzIGNhbiBiZSBmaXQgdG9nZXRoZXIuCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2J1aWx0aW4tZmV0Y2gtLXRvb2wuYyBiL2NvbnRyaWIvZXhhbXBsZXMvYnVpbHRpbi1mZXRjaC0tdG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZWIxOWQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2J1aWx0aW4tZmV0Y2gtLXRvb2wuYwpAQCAtMCwwICsxLDU3NSBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorCitzdGF0aWMgY2hhciAqZ2V0X3N0ZGluKHZvaWQpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMTAyNCkgPCAwKSB7CisJCWRpZV9lcnJubygiZXJyb3IgcmVhZGluZyBzdGFuZGFyZCBpbnB1dCIpOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19uZXcoZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBjaGFyICpzaGExX25ldykKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIiAgJXM6ICVzXG4iLCB0eXBlbmFtZSh0eXBlKSwKKwkJZmluZF91bmlxdWVfYWJicmV2KHNoYTFfbmV3LCBERUZBVUxUX0FCQlJFVikpOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9yZWZfZW52KGNvbnN0IGNoYXIgKmFjdGlvbiwKKwkJICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqb2xkdmFsKQoreworCWNoYXIgbXNnWzEwMjRdOworCWNvbnN0IGNoYXIgKnJsYSA9IGdldGVudigiR0lUX1JFRkxPR19BQ1RJT04iKTsKKworCWlmICghcmxhKQorCQlybGEgPSAiKHJlZmxvZyB1cGRhdGUpIjsKKwlpZiAoc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIiVzOiAlcyIsIHJsYSwgYWN0aW9uKSA+PSBzaXplb2YobXNnKSkKKwkJd2FybmluZygicmVmbG9nIG1lc3NhZ2UgdG9vIGxvbmc6ICUuKnMuLi4iLCA1MCwgbXNnKTsKKwlyZXR1cm4gdXBkYXRlX3JlZihtc2csIHJlZm5hbWUsIHNoYTEsIG9sZHZhbCwgMCwKKwkJCSAgVVBEQVRFX1JFRlNfUVVJRVRfT05fRVJSKTsKK30KKworc3RhdGljIGludCB1cGRhdGVfbG9jYWxfcmVmKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgY29uc3QgY2hhciAqbmV3X2hlYWQsCisJCQkgICAgY29uc3QgY2hhciAqbm90ZSwKKwkJCSAgICBpbnQgdmVyYm9zZSwgaW50IGZvcmNlKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMV9vbGRbMjBdLCBzaGExX25ld1syMF07CisJY2hhciBvbGRoWzQxXSwgbmV3aFs0MV07CisJc3RydWN0IGNvbW1pdCAqY3VycmVudCwgKnVwZGF0ZWQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJaWYgKGdldF9zaGExX2hleChuZXdfaGVhZCwgc2hhMV9uZXcpKQorCQlkaWUoIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIsIG5ld19oZWFkKTsKKworCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTFfbmV3LCBOVUxMKTsKKwlpZiAodHlwZSA8IDApCisJCWRpZSgib2JqZWN0ICVzIG5vdCBmb3VuZCIsIG5ld19oZWFkKTsKKworCWlmICghKm5hbWUpIHsKKwkJLyogTm90IHN0b3JpbmcgKi8KKwkJaWYgKHZlcmJvc2UpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiKiBmZXRjaGVkICVzXG4iLCBub3RlKTsKKwkJCXNob3dfbmV3KHR5cGUsIHNoYTFfbmV3KTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ2V0X3NoYTEobmFtZSwgc2hhMV9vbGQpKSB7CisJCWNvbnN0IGNoYXIgKm1zZzsKKwlqdXN0X3N0b3JlOgorCQkvKiBuZXcgcmVmICovCisJCWlmICghc3RybmNtcChuYW1lLCAicmVmcy90YWdzLyIsIDEwKSkKKwkJCW1zZyA9ICJzdG9yaW5nIHRhZyI7CisJCWVsc2UKKwkJCW1zZyA9ICJzdG9yaW5nIGhlYWQiOworCQlmcHJpbnRmKHN0ZGVyciwgIiogJXM6IHN0b3JpbmcgJXNcbiIsCisJCQluYW1lLCBub3RlKTsKKwkJc2hvd19uZXcodHlwZSwgc2hhMV9uZXcpOworCQlyZXR1cm4gdXBkYXRlX3JlZl9lbnYobXNnLCBuYW1lLCBzaGExX25ldywgTlVMTCk7CisJfQorCisJaWYgKCFoYXNoY21wKHNoYTFfb2xkLCBzaGExX25ldykpIHsKKwkJaWYgKHZlcmJvc2UpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiKiAlczogc2FtZSBhcyAlc1xuIiwgbmFtZSwgbm90ZSk7CisJCQlzaG93X25ldyh0eXBlLCBzaGExX25ldyk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJuY21wKG5hbWUsICJyZWZzL3RhZ3MvIiwgMTApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiKiAlczogdXBkYXRpbmcgd2l0aCAlc1xuIiwgbmFtZSwgbm90ZSk7CisJCXNob3dfbmV3KHR5cGUsIHNoYTFfbmV3KTsKKwkJcmV0dXJuIHVwZGF0ZV9yZWZfZW52KCJ1cGRhdGluZyB0YWciLCBuYW1lLCBzaGExX25ldywgTlVMTCk7CisJfQorCisJY3VycmVudCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTFfb2xkKTsKKwl1cGRhdGVkID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2Uoc2hhMV9uZXcpOworCWlmICghY3VycmVudCB8fCAhdXBkYXRlZCkKKwkJZ290byBqdXN0X3N0b3JlOworCisJc3RyY3B5KG9sZGgsIGZpbmRfdW5pcXVlX2FiYnJldihjdXJyZW50LT5vYmplY3Quc2hhMSwgREVGQVVMVF9BQkJSRVYpKTsKKwlzdHJjcHkobmV3aCwgZmluZF91bmlxdWVfYWJicmV2KHNoYTFfbmV3LCBERUZBVUxUX0FCQlJFVikpOworCisJaWYgKGluX21lcmdlX2Jhc2VzKGN1cnJlbnQsIHVwZGF0ZWQpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiKiAlczogZmFzdC1mb3J3YXJkIHRvICVzXG4iLAorCQkJbmFtZSwgbm90ZSk7CisJCWZwcmludGYoc3RkZXJyLCAiICBvbGQuLm5ldzogJXMuLiVzXG4iLCBvbGRoLCBuZXdoKTsKKwkJcmV0dXJuIHVwZGF0ZV9yZWZfZW52KCJmYXN0LWZvcndhcmQiLCBuYW1lLCBzaGExX25ldywgc2hhMV9vbGQpOworCX0KKwlpZiAoIWZvcmNlKSB7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIiogJXM6IG5vdCB1cGRhdGluZyB0byBub24tZmFzdC1mb3J3YXJkICVzXG4iLAorCQkJbmFtZSwgbm90ZSk7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIiAgb2xkLi4ubmV3OiAlcy4uLiVzXG4iLCBvbGRoLCBuZXdoKTsKKwkJcmV0dXJuIDE7CisJfQorCWZwcmludGYoc3RkZXJyLAorCQkiKiAlczogZm9yY2luZyB1cGRhdGUgdG8gbm9uLWZhc3QtZm9yd2FyZCAlc1xuIiwKKwkJbmFtZSwgbm90ZSk7CisJZnByaW50ZihzdGRlcnIsICIgIG9sZC4uLm5ldzogJXMuLi4lc1xuIiwgb2xkaCwgbmV3aCk7CisJcmV0dXJuIHVwZGF0ZV9yZWZfZW52KCJmb3JjZWQtdXBkYXRlIiwgbmFtZSwgc2hhMV9uZXcsIHNoYTFfb2xkKTsKK30KKworc3RhdGljIGludCBhcHBlbmRfZmV0Y2hfaGVhZChGSUxFICpmcCwKKwkJCSAgICAgY29uc3QgY2hhciAqaGVhZCwgY29uc3QgY2hhciAqcmVtb3RlLAorCQkJICAgICBjb25zdCBjaGFyICpyZW1vdGVfbmFtZSwgY29uc3QgY2hhciAqcmVtb3RlX25pY2ssCisJCQkgICAgIGNvbnN0IGNoYXIgKmxvY2FsX25hbWUsIGludCBub3RfZm9yX21lcmdlLAorCQkJICAgICBpbnQgdmVyYm9zZSwgaW50IGZvcmNlKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlpbnQgcmVtb3RlX2xlbiwgaSwgbm90ZV9sZW47CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIG5vdGVbMTAyNF07CisJY29uc3QgY2hhciAqd2hhdCwgKmtpbmQ7CisKKwlpZiAoZ2V0X3NoYTEoaGVhZCwgc2hhMSkpCisJCXJldHVybiBlcnJvcigiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICVzIiwgaGVhZCk7CisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTEsIDEpOworCWlmICghY29tbWl0KQorCQlub3RfZm9yX21lcmdlID0gMTsKKworCWlmICghc3RyY21wKHJlbW90ZV9uYW1lLCAiSEVBRCIpKSB7CisJCWtpbmQgPSAiIjsKKwkJd2hhdCA9ICIiOworCX0KKwllbHNlIGlmICghc3RybmNtcChyZW1vdGVfbmFtZSwgInJlZnMvaGVhZHMvIiwgMTEpKSB7CisJCWtpbmQgPSAiYnJhbmNoIjsKKwkJd2hhdCA9IHJlbW90ZV9uYW1lICsgMTE7CisJfQorCWVsc2UgaWYgKCFzdHJuY21wKHJlbW90ZV9uYW1lLCAicmVmcy90YWdzLyIsIDEwKSkgeworCQlraW5kID0gInRhZyI7CisJCXdoYXQgPSByZW1vdGVfbmFtZSArIDEwOworCX0KKwllbHNlIGlmICghc3RybmNtcChyZW1vdGVfbmFtZSwgInJlZnMvcmVtb3Rlcy8iLCAxMykpIHsKKwkJa2luZCA9ICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoIjsKKwkJd2hhdCA9IHJlbW90ZV9uYW1lICsgMTM7CisJfQorCWVsc2UgeworCQlraW5kID0gIiI7CisJCXdoYXQgPSByZW1vdGVfbmFtZTsKKwl9CisKKwlyZW1vdGVfbGVuID0gc3RybGVuKHJlbW90ZSk7CisJZm9yIChpID0gcmVtb3RlX2xlbiAtIDE7IHJlbW90ZVtpXSA9PSAnLycgJiYgMCA8PSBpOyBpLS0pCisJCTsKKwlyZW1vdGVfbGVuID0gaSArIDE7CisJaWYgKDQgPCBpICYmICFzdHJuY21wKCIuZ2l0IiwgcmVtb3RlICsgaSAtIDMsIDQpKQorCQlyZW1vdGVfbGVuID0gaSAtIDM7CisKKwlub3RlX2xlbiA9IDA7CisJaWYgKCp3aGF0KSB7CisJCWlmICgqa2luZCkKKwkJCW5vdGVfbGVuICs9IHNwcmludGYobm90ZSArIG5vdGVfbGVuLCAiJXMgIiwga2luZCk7CisJCW5vdGVfbGVuICs9IHNwcmludGYobm90ZSArIG5vdGVfbGVuLCAiJyVzJyBvZiAiLCB3aGF0KTsKKwl9CisJbm90ZV9sZW4gKz0gc3ByaW50Zihub3RlICsgbm90ZV9sZW4sICIlLipzIiwgcmVtb3RlX2xlbiwgcmVtb3RlKTsKKwlmcHJpbnRmKGZwLCAiJXNcdCVzXHQlc1xuIiwKKwkJc2hhMV90b19oZXgoY29tbWl0ID8gY29tbWl0LT5vYmplY3Quc2hhMSA6IHNoYTEpLAorCQlub3RfZm9yX21lcmdlID8gIm5vdC1mb3ItbWVyZ2UiIDogIiIsCisJCW5vdGUpOworCXJldHVybiB1cGRhdGVfbG9jYWxfcmVmKGxvY2FsX25hbWUsIGhlYWQsIG5vdGUsIHZlcmJvc2UsIGZvcmNlKTsKK30KKworc3RhdGljIGNoYXIgKmtlZXA7CitzdGF0aWMgdm9pZCByZW1vdmVfa2VlcCh2b2lkKQoreworCWlmIChrZWVwICYmICprZWVwKQorCQl1bmxpbmsoa2VlcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9rZWVwX29uX3NpZ25hbChpbnQgc2lnbm8pCit7CisJcmVtb3ZlX2tlZXAoKTsKKwlzaWdjaGFpbl9wb3Aoc2lnbm8pOworCXJhaXNlKHNpZ25vKTsKK30KKworc3RhdGljIGNoYXIgKmZpbmRfbG9jYWxfbmFtZShjb25zdCBjaGFyICpyZW1vdGVfbmFtZSwgY29uc3QgY2hhciAqcmVmcywKKwkJCSAgICAgaW50ICpmb3JjZV9wLCBpbnQgKm5vdF9mb3JfbWVyZ2VfcCkKK3sKKwljb25zdCBjaGFyICpyZWYgPSByZWZzOworCWludCBsZW4gPSBzdHJsZW4ocmVtb3RlX25hbWUpOworCisJd2hpbGUgKHJlZikgeworCQljb25zdCBjaGFyICpuZXh0OworCQlpbnQgc2luZ2xlX2ZvcmNlLCBub3RfZm9yX21lcmdlOworCisJCXdoaWxlICgqcmVmID09ICdcbicpCisJCQlyZWYrKzsKKwkJaWYgKCEqcmVmKQorCQkJYnJlYWs7CisJCW5leHQgPSBzdHJjaHIocmVmLCAnXG4nKTsKKworCQlzaW5nbGVfZm9yY2UgPSBub3RfZm9yX21lcmdlID0gMDsKKwkJaWYgKCpyZWYgPT0gJysnKSB7CisJCQlzaW5nbGVfZm9yY2UgPSAxOworCQkJcmVmKys7CisJCX0KKwkJaWYgKCpyZWYgPT0gJy4nKSB7CisJCQlub3RfZm9yX21lcmdlID0gMTsKKwkJCXJlZisrOworCQkJaWYgKCpyZWYgPT0gJysnKSB7CisJCQkJc2luZ2xlX2ZvcmNlID0gMTsKKwkJCQlyZWYrKzsKKwkJCX0KKwkJfQorCQlpZiAoIXN0cm5jbXAocmVtb3RlX25hbWUsIHJlZiwgbGVuKSAmJiByZWZbbGVuXSA9PSAnOicpIHsKKwkJCWNvbnN0IGNoYXIgKmxvY2FsX3BhcnQgPSByZWYgKyBsZW4gKyAxOworCQkJaW50IHJldGxlbjsKKworCQkJaWYgKCFuZXh0KQorCQkJCXJldGxlbiA9IHN0cmxlbihsb2NhbF9wYXJ0KTsKKwkJCWVsc2UKKwkJCQlyZXRsZW4gPSBuZXh0IC0gbG9jYWxfcGFydDsKKwkJCSpmb3JjZV9wID0gc2luZ2xlX2ZvcmNlOworCQkJKm5vdF9mb3JfbWVyZ2VfcCA9IG5vdF9mb3JfbWVyZ2U7CisJCQlyZXR1cm4geG1lbWR1cHoobG9jYWxfcGFydCwgcmV0bGVuKTsKKwkJfQorCQlyZWYgPSBuZXh0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBmZXRjaF9uYXRpdmVfc3RvcmUoRklMRSAqZnAsCisJCQkgICAgICBjb25zdCBjaGFyICpyZW1vdGUsCisJCQkgICAgICBjb25zdCBjaGFyICpyZW1vdGVfbmljaywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKnJlZnMsCisJCQkgICAgICBpbnQgdmVyYm9zZSwgaW50IGZvcmNlKQoreworCWNoYXIgYnVmZmVyWzEwMjRdOworCWludCBlcnIgPSAwOworCisJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVtb3ZlX2tlZXBfb25fc2lnbmFsKTsKKwlhdGV4aXQocmVtb3ZlX2tlZXApOworCisJd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKSkgeworCQlpbnQgbGVuOworCQljaGFyICpjcDsKKwkJY2hhciAqbG9jYWxfbmFtZTsKKwkJaW50IHNpbmdsZV9mb3JjZSwgbm90X2Zvcl9tZXJnZTsKKworCQlmb3IgKGNwID0gYnVmZmVyOyAqY3AgJiYgIWlzc3BhY2UoKmNwKTsgY3ArKykKKwkJCTsKKwkJaWYgKCpjcCkKKwkJCSpjcCsrID0gMDsKKwkJbGVuID0gc3RybGVuKGNwKTsKKwkJaWYgKGxlbiAmJiBjcFtsZW4tMV0gPT0gJ1xuJykKKwkJCWNwWy0tbGVuXSA9IDA7CisJCWlmICghc3RyY21wKGJ1ZmZlciwgImZhaWxlZCIpKQorCQkJZGllKCJGZXRjaCBmYWlsdXJlOiAlcyIsIHJlbW90ZSk7CisJCWlmICghc3RyY21wKGJ1ZmZlciwgInBhY2siKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXN0cmNtcChidWZmZXIsICJrZWVwIikpIHsKKwkJCWNoYXIgKm9kID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKwkJCWludCBsZW4gPSBzdHJsZW4ob2QpICsgc3RybGVuKGNwKSArIDUwOworCQkJa2VlcCA9IHhtYWxsb2MobGVuKTsKKwkJCXNwcmludGYoa2VlcCwgIiVzL3BhY2svcGFjay0lcy5rZWVwIiwgb2QsIGNwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbG9jYWxfbmFtZSA9IGZpbmRfbG9jYWxfbmFtZShjcCwgcmVmcywKKwkJCQkJICAgICAmc2luZ2xlX2ZvcmNlLCAmbm90X2Zvcl9tZXJnZSk7CisJCWlmICghbG9jYWxfbmFtZSkKKwkJCWNvbnRpbnVlOworCQllcnIgfD0gYXBwZW5kX2ZldGNoX2hlYWQoZnAsCisJCQkJCSBidWZmZXIsIHJlbW90ZSwgY3AsIHJlbW90ZV9uaWNrLAorCQkJCQkgbG9jYWxfbmFtZSwgbm90X2Zvcl9tZXJnZSwKKwkJCQkJIHZlcmJvc2UsIGZvcmNlIHx8IHNpbmdsZV9mb3JjZSk7CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcmVmbGlzdChjb25zdCBjaGFyICpyZWZsaXN0KQoreworCWNvbnN0IGNoYXIgKnJlZjsKKworCXByaW50ZigicmVmcz0nIik7CisJZm9yIChyZWYgPSByZWZsaXN0OyByZWY7ICkgeworCQljb25zdCBjaGFyICpuZXh0OworCQl3aGlsZSAoKnJlZiAmJiBpc3NwYWNlKCpyZWYpKQorCQkJcmVmKys7CisJCWlmICghKnJlZikKKwkJCWJyZWFrOworCQlmb3IgKG5leHQgPSByZWY7ICpuZXh0ICYmICFpc3NwYWNlKCpuZXh0KTsgbmV4dCsrKQorCQkJOworCQlwcmludGYoIlxuJS4qcyIsIChpbnQpKG5leHQgLSByZWYpLCByZWYpOworCQlyZWYgPSBuZXh0OworCX0KKwlwcmludGYoIidcbiIpOworCisJcHJpbnRmKCJycmVmPSciKTsKKwlmb3IgKHJlZiA9IHJlZmxpc3Q7IHJlZjsgKSB7CisJCWNvbnN0IGNoYXIgKm5leHQsICpjb2xvbjsKKwkJd2hpbGUgKCpyZWYgJiYgaXNzcGFjZSgqcmVmKSkKKwkJCXJlZisrOworCQlpZiAoISpyZWYpCisJCQlicmVhazsKKwkJZm9yIChuZXh0ID0gcmVmOyAqbmV4dCAmJiAhaXNzcGFjZSgqbmV4dCk7IG5leHQrKykKKwkJCTsKKwkJaWYgKCpyZWYgPT0gJy4nKQorCQkJcmVmKys7CisJCWlmICgqcmVmID09ICcrJykKKwkJCXJlZisrOworCQljb2xvbiA9IHN0cmNocihyZWYsICc6Jyk7CisJCXB1dGNoYXIoJ1xuJyk7CisJCXByaW50ZigiJS4qcyIsIChpbnQpKChjb2xvbiA/IGNvbG9uIDogbmV4dCkgLSByZWYpLCByZWYpOworCQlyZWYgPSBuZXh0OworCX0KKwlwcmludGYoIidcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4cGFuZF9yZWZzX3dpbGRjYXJkKGNvbnN0IGNoYXIgKmxzX3JlbW90ZV9yZXN1bHQsIGludCBudW1yZWZzLAorCQkJCWNvbnN0IGNoYXIgKipyZWZzKQoreworCWludCBpLCBtYXRjaGxlbiwgcmVwbGFjZWxlbjsKKwlpbnQgZm91bmRfb25lID0gMDsKKwljb25zdCBjaGFyICpyZW1vdGUgPSAqcmVmcysrOworCW51bXJlZnMtLTsKKworCWlmIChudW1yZWZzID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJOb3RoaW5nIHNwZWNpZmllZCBmb3IgZmV0Y2hpbmcgd2l0aCByZW1vdGUuJXMuZmV0Y2hcbiIsCisJCQlyZW1vdGUpOworCQlwcmludGYoImVtcHR5XG4iKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtcmVmczsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnJlZiA9IHJlZnNbaV07CisJCWNvbnN0IGNoYXIgKmxyZWYgPSByZWY7CisJCWNvbnN0IGNoYXIgKmNvbG9uOworCQljb25zdCBjaGFyICp0YWlsOworCQljb25zdCBjaGFyICpsczsKKwkJY29uc3QgY2hhciAqbmV4dDsKKworCQlpZiAoKmxyZWYgPT0gJysnKQorCQkJbHJlZisrOworCQljb2xvbiA9IHN0cmNocihscmVmLCAnOicpOworCQl0YWlsID0gbHJlZiArIHN0cmxlbihscmVmKTsKKwkJaWYgKCEoY29sb24gJiYKKwkJICAgICAgMiA8IGNvbG9uIC0gbHJlZiAmJgorCQkgICAgICBjb2xvblstMV0gPT0gJyonICYmCisJCSAgICAgIGNvbG9uWy0yXSA9PSAnLycgJiYKKwkJICAgICAgMiA8IHRhaWwgLSAoY29sb24gKyAxKSAmJgorCQkgICAgICB0YWlsWy0xXSA9PSAnKicgJiYKKwkJICAgICAgdGFpbFstMl0gPT0gJy8nKSkgeworCQkJLyogbm90IGEgZ2xvYiAqLworCQkJaWYgKCFmb3VuZF9vbmUrKykKKwkJCQlwcmludGYoImV4cGxpY2l0XG4iKTsKKwkJCXByaW50ZigiJXNcbiIsIHJlZik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGdsb2IgKi8KKwkJaWYgKCFmb3VuZF9vbmUrKykKKwkJCXByaW50ZigiZ2xvYlxuIik7CisKKwkJLyogbHJlZiB0byBjb2xvbi0yIGlzIHJlbW90ZSBoaWVyYXJjaHkgbmFtZTsKKwkJICogY29sb24rMSB0byB0YWlsLTIgaXMgbG9jYWwuCisJCSAqLworCQltYXRjaGxlbiA9IChjb2xvbi0xKSAtIGxyZWY7CisJCXJlcGxhY2VsZW4gPSAodGFpbC0xKSAtIChjb2xvbisxKTsKKwkJZm9yIChscyA9IGxzX3JlbW90ZV9yZXN1bHQ7IGxzOyBscyA9IG5leHQpIHsKKwkJCWNvbnN0IGNoYXIgKmVvbDsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCQlpbnQgbmFtZWxlbjsKKworCQkJd2hpbGUgKCpscyAmJiBpc3NwYWNlKCpscykpCisJCQkJbHMrKzsKKwkJCW5leHQgPSBzdHJjaHIobHMsICdcbicpOworCQkJZW9sID0gIW5leHQgPyAobHMgKyBzdHJsZW4obHMpKSA6IG5leHQ7CisJCQlpZiAoIW1lbWNtcCgiXnt9IiwgZW9sLTMsIDMpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGVvbCAtIGxzIDwgNDApCisJCQkJY29udGludWU7CisJCQlpZiAoZ2V0X3NoYTFfaGV4KGxzLCBzaGExKSkKKwkJCQljb250aW51ZTsKKwkJCWxzICs9IDQwOworCQkJd2hpbGUgKGxzIDwgZW9sICYmIGlzc3BhY2UoKmxzKSkKKwkJCQlscysrOworCQkJLyogbHMgdG8gbmV4dCAob3IgZW9sKSBpcyB0aGUgbmFtZS4KKwkJCSAqIGlzIGl0IGlkZW50aWNhbCB0byBscmVmIHRvIGNvbG9uLTI/CisJCQkgKi8KKwkJCWlmICgoZW9sIC0gbHMpIDw9IG1hdGNobGVuIHx8CisJCQkgICAgc3RybmNtcChscywgbHJlZiwgbWF0Y2hsZW4pKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBZZXMsIGl0IGlzIGEgbWF0Y2ggKi8KKwkJCW5hbWVsZW4gPSBlb2wgLSBsczsKKwkJCWlmIChscmVmICE9IHJlZikKKwkJCQlwdXRjaGFyKCcrJyk7CisJCQlwcmludGYoIiUuKnM6JS4qcyUuKnNcbiIsCisJCQkgICAgICAgbmFtZWxlbiwgbHMsCisJCQkgICAgICAgcmVwbGFjZWxlbiwgY29sb24gKyAxLAorCQkJICAgICAgIG5hbWVsZW4gLSBtYXRjaGxlbiwgbHMgKyBtYXRjaGxlbik7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGlja19ycmVmKGludCBzaGExX29ubHksIGNvbnN0IGNoYXIgKnJyZWYsIGNvbnN0IGNoYXIgKmxzX3JlbW90ZV9yZXN1bHQpCit7CisJaW50IGVyciA9IDA7CisJaW50IGxycl9jb3VudCA9IGxycl9jb3VudCwgaSwgcGFzczsKKwljb25zdCBjaGFyICpjcDsKKwlzdHJ1Y3QgbHJyIHsKKwkJY29uc3QgY2hhciAqbGluZTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJaW50IG5hbWVsZW47CisJCWludCBzaG93bjsKKwl9ICpscnJfbGlzdCA9IGxycl9saXN0OworCisJZm9yIChwYXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykgeworCQkvKiBwYXNzIDAgY291bnRzIGFuZCBhbGxvY2F0ZXMsIHBhc3MgMSBmaWxscy4uLiAqLworCQljcCA9IGxzX3JlbW90ZV9yZXN1bHQ7CisJCWkgPSAwOworCQl3aGlsZSAoMSkgeworCQkJY29uc3QgY2hhciAqbnA7CisJCQl3aGlsZSAoKmNwICYmIGlzc3BhY2UoKmNwKSkKKwkJCQljcCsrOworCQkJaWYgKCEqY3ApCisJCQkJYnJlYWs7CisJCQlucCA9IHN0cmNocm51bChjcCwgJ1xuJyk7CisJCQlpZiAocGFzcykgeworCQkJCWxycl9saXN0W2ldLmxpbmUgPSBjcDsKKwkJCQlscnJfbGlzdFtpXS5uYW1lID0gY3AgKyA0MTsKKwkJCQlscnJfbGlzdFtpXS5uYW1lbGVuID0gbnAgLSAoY3AgKyA0MSk7CisJCQl9CisJCQlpKys7CisJCQljcCA9IG5wOworCQl9CisJCWlmICghcGFzcykgeworCQkJbHJyX2NvdW50ID0gaTsKKwkJCWxycl9saXN0ID0geGNhbGxvYyhscnJfY291bnQsIHNpemVvZigqbHJyX2xpc3QpKTsKKwkJfQorCX0KKworCXdoaWxlICgxKSB7CisJCWNvbnN0IGNoYXIgKm5leHQ7CisJCWludCBycmVmbGVuOworCQlpbnQgaTsKKworCQl3aGlsZSAoKnJyZWYgJiYgaXNzcGFjZSgqcnJlZikpCisJCQlycmVmKys7CisJCWlmICghKnJyZWYpCisJCQlicmVhazsKKwkJbmV4dCA9IHN0cmNocm51bChycmVmLCAnXG4nKTsKKwkJcnJlZmxlbiA9IG5leHQgLSBycmVmOworCisJCWZvciAoaSA9IDA7IGkgPCBscnJfY291bnQ7IGkrKykgeworCQkJc3RydWN0IGxyciAqbHJyID0gJihscnJfbGlzdFtpXSk7CisKKwkJCWlmIChycmVmbGVuID09IGxyci0+bmFtZWxlbiAmJgorCQkJICAgICFtZW1jbXAobHJyLT5uYW1lLCBycmVmLCBycmVmbGVuKSkgeworCQkJCWlmICghbHJyLT5zaG93bikKKwkJCQkJcHJpbnRmKCIlLipzXG4iLAorCQkJCQkgICAgICAgc2hhMV9vbmx5ID8gNDAgOiBscnItPm5hbWVsZW4gKyA0MSwKKwkJCQkJICAgICAgIGxyci0+bGluZSk7CisJCQkJbHJyLT5zaG93biA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGxycl9jb3VudCA8PSBpKSB7CisJCQllcnJvcigicGljay1ycmVmOiAlLipzIG5vdCBmb3VuZCIsIHJyZWZsZW4sIHJyZWYpOworCQkJZXJyID0gMTsKKwkJfQorCQlycmVmID0gbmV4dDsKKwl9CisJZnJlZShscnJfbGlzdCk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGNtZF9mZXRjaF9fdG9vbChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlpbnQgdmVyYm9zZSA9IDA7CisJaW50IGZvcmNlID0gMDsKKwlpbnQgc29wdCA9IDA7CisKKwl3aGlsZSAoMSA8IGFyZ2MpIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndlsxXTsKKwkJaWYgKCFzdHJjbXAoIi12IiwgYXJnKSkKKwkJCXZlcmJvc2UgPSAxOworCQllbHNlIGlmICghc3RyY21wKCItZiIsIGFyZykpCisJCQlmb3JjZSA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoIi1zIiwgYXJnKSkKKwkJCXNvcHQgPSAxOworCQllbHNlCisJCQlicmVhazsKKwkJYXJnYy0tOworCQlhcmd2Kys7CisJfQorCisJaWYgKGFyZ2MgPD0gMSkKKwkJcmV0dXJuIGVycm9yKCJNaXNzaW5nIHN1YmNvbW1hbmQiKTsKKworCWlmICghc3RyY21wKCJhcHBlbmQtZmV0Y2gtaGVhZCIsIGFyZ3ZbMV0pKSB7CisJCWludCByZXN1bHQ7CisJCUZJTEUgKmZwOworCQljaGFyICpmaWxlbmFtZTsKKworCQlpZiAoYXJnYyAhPSA4KQorCQkJcmV0dXJuIGVycm9yKCJhcHBlbmQtZmV0Y2gtaGVhZCB0YWtlcyA2IGFyZ3MiKTsKKwkJZmlsZW5hbWUgPSBnaXRfcGF0aF9mZXRjaF9oZWFkKCk7CisJCWZwID0gZm9wZW4oZmlsZW5hbWUsICJhIik7CisJCWlmICghZnApCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBvcGVuICVzOiAlcyIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlyZXN1bHQgPSBhcHBlbmRfZmV0Y2hfaGVhZChmcCwgYXJndlsyXSwgYXJndlszXSwKKwkJCQkJICAgYXJndls0XSwgYXJndls1XSwKKwkJCQkJICAgYXJndls2XSwgISFhcmd2WzddWzBdLAorCQkJCQkgICB2ZXJib3NlLCBmb3JjZSk7CisJCWZjbG9zZShmcCk7CisJCXJldHVybiByZXN1bHQ7CisJfQorCWlmICghc3RyY21wKCJuYXRpdmUtc3RvcmUiLCBhcmd2WzFdKSkgeworCQlpbnQgcmVzdWx0OworCQlGSUxFICpmcDsKKwkJY2hhciAqZmlsZW5hbWU7CisKKwkJaWYgKGFyZ2MgIT0gNSkKKwkJCXJldHVybiBlcnJvcigiZmV0Y2gtbmF0aXZlLXN0b3JlIHRha2VzIDMgYXJncyIpOworCQlmaWxlbmFtZSA9IGdpdF9wYXRoX2ZldGNoX2hlYWQoKTsKKwkJZnAgPSBmb3BlbihmaWxlbmFtZSwgImEiKTsKKwkJaWYgKCFmcCkKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IG9wZW4gJXM6ICVzIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCXJlc3VsdCA9IGZldGNoX25hdGl2ZV9zdG9yZShmcCwgYXJndlsyXSwgYXJndlszXSwgYXJndls0XSwKKwkJCQkJICAgIHZlcmJvc2UsIGZvcmNlKTsKKwkJZmNsb3NlKGZwKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJaWYgKCFzdHJjbXAoInBhcnNlLXJlZmxpc3QiLCBhcmd2WzFdKSkgeworCQljb25zdCBjaGFyICpyZWZsaXN0OworCQlpZiAoYXJnYyAhPSAzKQorCQkJcmV0dXJuIGVycm9yKCJwYXJzZS1yZWZsaXN0IHRha2VzIDEgYXJnIik7CisJCXJlZmxpc3QgPSBhcmd2WzJdOworCQlpZiAoIXN0cmNtcChyZWZsaXN0LCAiLSIpKQorCQkJcmVmbGlzdCA9IGdldF9zdGRpbigpOworCQlyZXR1cm4gcGFyc2VfcmVmbGlzdChyZWZsaXN0KTsKKwl9CisJaWYgKCFzdHJjbXAoInBpY2stcnJlZiIsIGFyZ3ZbMV0pKSB7CisJCWNvbnN0IGNoYXIgKmxzX3JlbW90ZV9yZXN1bHQ7CisJCWlmIChhcmdjICE9IDQpCisJCQlyZXR1cm4gZXJyb3IoInBpY2stcnJlZiB0YWtlcyAyIGFyZ3MiKTsKKwkJbHNfcmVtb3RlX3Jlc3VsdCA9IGFyZ3ZbM107CisJCWlmICghc3RyY21wKGxzX3JlbW90ZV9yZXN1bHQsICItIikpCisJCQlsc19yZW1vdGVfcmVzdWx0ID0gZ2V0X3N0ZGluKCk7CisJCXJldHVybiBwaWNrX3JyZWYoc29wdCwgYXJndlsyXSwgbHNfcmVtb3RlX3Jlc3VsdCk7CisJfQorCWlmICghc3RyY21wKCJleHBhbmQtcmVmcy13aWxkY2FyZCIsIGFyZ3ZbMV0pKSB7CisJCWNvbnN0IGNoYXIgKnJlZmxpc3Q7CisJCWlmIChhcmdjIDwgNCkKKwkJCXJldHVybiBlcnJvcigiZXhwYW5kLXJlZnMtd2lsZGNhcmQgdGFrZXMgYXQgbGVhc3QgMiBhcmdzIik7CisJCXJlZmxpc3QgPSBhcmd2WzJdOworCQlpZiAoIXN0cmNtcChyZWZsaXN0LCAiLSIpKQorCQkJcmVmbGlzdCA9IGdldF9zdGRpbigpOworCQlyZXR1cm4gZXhwYW5kX3JlZnNfd2lsZGNhcmQocmVmbGlzdCwgYXJnYyAtIDMsIGFyZ3YgKyAzKTsKKwl9CisKKwlyZXR1cm4gZXJyb3IoIlVua25vd24gc3ViY29tbWFuZDogJXMiLCBhcmd2WzFdKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWFtLnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGQ1MzlmMQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWFtLnNoCkBAIC0wLDAgKzEsOTc1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IEp1bmlvIEMgSGFtYW5vCisKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKK09QVElPTlNfS0VFUERBU0hEQVNIPQorT1BUSU9OU19TVFVDS0xPTkc9dAorT1BUSU9OU19TUEVDPSJcCitnaXQgYW0gW29wdGlvbnNdIFsoPG1ib3g+fDxNYWlsZGlyPikuLi5dCitnaXQgYW0gW29wdGlvbnNdICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkKKy0tCitpLGludGVyYWN0aXZlICAgcnVuIGludGVyYWN0aXZlbHkKK2IsYmluYXJ5KiAgICAgICAoaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3ApCiszLDN3YXkgICAgICAgICAgYWxsb3cgZmFsbCBiYWNrIG9uIDN3YXkgbWVyZ2luZyBpZiBuZWVkZWQKK3EscXVpZXQgICAgICAgICBiZSBxdWlldAorcyxzaWdub2ZmICAgICAgIGFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UKK3UsdXRmOCAgICAgICAgICByZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KQorayxrZWVwICAgICAgICAgIHBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8KK2tlZXAtbm9uLXBhdGNoICBwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvCittLG1lc3NhZ2UtaWQgICAgcGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbwora2VlcC1jciAgICAgICAgIHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQKK25vLWtlZXAtY3IgICAgICBkbyBub3QgcGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGluZGVwZW5kZW50IG9mIGFtLmtlZXBjcgorYyxzY2lzc29ycyAgICAgIHN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZQord2hpdGVzcGFjZT0gICAgIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKK2lnbm9yZS1zcGFjZS1jaGFuZ2UgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQoraWdub3JlLXdoaXRlc3BhY2UgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQorZGlyZWN0b3J5PSAgICAgIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKK2V4Y2x1ZGU9ICAgICAgICBwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5CitpbmNsdWRlPSAgICAgICAgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQorQz0gICAgICAgICAgICAgIHBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkKK3A9ICAgICAgICAgICAgICBwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5CitwYXRjaC1mb3JtYXQ9ICAgZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluCityZWplY3QgICAgICAgICAgcGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseQorcmVzb2x2ZW1zZz0gICAgIG92ZXJyaWRlIGVycm9yIG1lc3NhZ2Ugd2hlbiBwYXRjaCBmYWlsdXJlIG9jY3VycworY29udGludWUgICAgICAgIGNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QKK3IscmVzb2x2ZWQgICAgICBzeW5vbnltcyBmb3IgLS1jb250aW51ZQorc2tpcCAgICAgICAgICAgIHNraXAgdGhlIGN1cnJlbnQgcGF0Y2gKK2Fib3J0ICAgICAgICAgICByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uCitjb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSAgICBsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUKK2lnbm9yZS1kYXRlICAgICB1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlCityZXJlcmUtYXV0b3VwZGF0ZSB1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUKK1MsZ3BnLXNpZ24/ICAgICBHUEctc2lnbiBjb21taXRzCityZWJhc2luZyogICAgICAgKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCisKKy4gZ2l0LXNoLXNldHVwCisuIGdpdC1zaC1pMThuCitwcmVmaXg9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgpCitzZXRfcmVmbG9nX2FjdGlvbiBhbQorcmVxdWlyZV93b3JrX3RyZWUKK2NkX3RvX3RvcGxldmVsCisKK2dpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+L2Rldi9udWxsIHx8CisJZGllICIkKGdldHRleHQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IikiCisKK2lmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgSEVBRCA+L2Rldi9udWxsCit0aGVuCisJSEFTX0hFQUQ9eWVzCitlbHNlCisJSEFTX0hFQUQ9CitmaQorCitjbWRsaW5lPSJnaXQgYW0iCitpZiB0ZXN0ICcnICE9ICIkaW50ZXJhY3RpdmUiCit0aGVuCisJY21kbGluZT0iJGNtZGxpbmUgLWkiCitmaQoraWYgdGVzdCAnJyAhPSAiJHRocmVld2F5IgordGhlbgorCWNtZGxpbmU9IiRjbWRsaW5lIC0zIgorZmkKKworZW1wdHlfdHJlZT00YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CisKK3NxICgpIHsKKwlnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRAIgorfQorCitzdG9wX2hlcmUgKCkgeworICAgIGVjaG8gIiQxIiA+IiRkb3Rlc3QvbmV4dCIKKyAgICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIEhFQUQgPiIkZG90ZXN0L2Fib3J0LXNhZmV0eSIKKyAgICBleGl0IDEKK30KKworc2FmZV90b19hYm9ydCAoKSB7CisJaWYgdGVzdCAtZiAiJGRvdGVzdC9kaXJ0eWluZGV4IgorCXRoZW4KKwkJcmV0dXJuIDEKKwlmaQorCisJaWYgISB0ZXN0IC1mICIkZG90ZXN0L2Fib3J0LXNhZmV0eSIKKwl0aGVuCisJCXJldHVybiAwCisJZmkKKworCWFib3J0X3NhZmV0eT0kKGNhdCAiJGRvdGVzdC9hYm9ydC1zYWZldHkiKQorCWlmIHRlc3QgInokKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgSEVBRCkiID0gInokYWJvcnRfc2FmZXR5IgorCXRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCWdldHRleHRsbiAiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFEIHNpbmNlIHRoZSBsYXN0ICdhbScgZmFpbHVyZS4KK05vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIiA+JjIKKwlyZXR1cm4gMQorfQorCitzdG9wX2hlcmVfdXNlcl9yZXNvbHZlICgpIHsKKyAgICBpZiBbIC1uICIkcmVzb2x2ZW1zZyIgXTsgdGhlbgorCSAgICBwcmludGYgJyVzXG4nICIkcmVzb2x2ZW1zZyIKKwkgICAgc3RvcF9oZXJlICQxCisgICAgZmkKKyAgICBldmFsX2dldHRleHRsbiAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIlwkY21kbGluZSAtLWNvbnRpbnVlXCIuCitJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiXCRjbWRsaW5lIC0tc2tpcFwiIGluc3RlYWQuCitUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIlwkY21kbGluZSAtLWFib3J0XCIuIgorCisgICAgc3RvcF9oZXJlICQxCit9CisKK2dvX25leHQgKCkgeworCXJtIC1mICIkZG90ZXN0LyRtc2dudW0iICIkZG90ZXN0L21zZyIgIiRkb3Rlc3QvbXNnLWNsZWFuIiBcCisJCSIkZG90ZXN0L3BhdGNoIiAiJGRvdGVzdC9pbmZvIgorCWVjaG8gIiRuZXh0IiA+IiRkb3Rlc3QvbmV4dCIKKwl0aGlzPSRuZXh0Cit9CisKK2Nhbm5vdF9mYWxsYmFjayAoKSB7CisJZWNobyAiJDEiCisJZ2V0dGV4dGxuICJDYW5ub3QgZmFsbCBiYWNrIHRvIHRocmVlLXdheSBtZXJnZS4iCisJZXhpdCAxCit9CisKK2ZhbGxfYmFja18zd2F5ICgpIHsKKyAgICBPX09CSkVDVD0kKGNkICIkR0lUX09CSkVDVF9ESVJFQ1RPUlkiICYmIHB3ZCkKKworICAgIHJtIC1mciAiJGRvdGVzdCIvcGF0Y2gtbWVyZ2UtKgorICAgIG1rZGlyICIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1kaXIiCisKKyAgICAjIEZpcnN0IHNlZSBpZiB0aGUgcGF0Y2ggcmVjb3JkcyB0aGUgaW5kZXggaW5mbyB0aGF0IHdlIGNhbiB1c2UuCisgICAgY21kPSJnaXQgYXBwbHkgJGdpdF9hcHBseV9vcHQgLS1idWlsZC1mYWtlLWFuY2VzdG9yIiAmJgorICAgIGNtZD0iJGNtZCAiJyIkZG90ZXN0L3BhdGNoLW1lcmdlLXRtcC1pbmRleCIgIiRkb3Rlc3QvcGF0Y2giJyAmJgorICAgIGV2YWwgIiRjbWQiICYmCisgICAgR0lUX0lOREVYX0ZJTEU9IiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtdG1wLWluZGV4IiBcCisgICAgZ2l0IHdyaXRlLXRyZWUgPiIkZG90ZXN0L3BhdGNoLW1lcmdlLWJhc2UrIiB8fAorICAgIGNhbm5vdF9mYWxsYmFjayAiJChnZXR0ZXh0ICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIikiCisKKyAgICBzYXkgIiQoZ2V0dGV4dCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIpIgorCisgICAgY21kPSdHSVRfSU5ERVhfRklMRT0iJGRvdGVzdC9wYXRjaC1tZXJnZS10bXAtaW5kZXgiJworCisgICAgaWYgdGVzdCAteiAiJEdJVF9RVUlFVCIKKyAgICB0aGVuCisJZXZhbCAiJGNtZCBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWRpZmYtZmlsdGVyPUFNIC0tbmFtZS1zdGF0dXMgSEVBRCIKKyAgICBmaQorCisgICAgY21kPSIkY21kIGdpdCBhcHBseSAtLWNhY2hlZCAkZ2l0X2FwcGx5X29wdCInIDwiJGRvdGVzdC9wYXRjaCInCisgICAgaWYgZXZhbCAiJGNtZCIKKyAgICB0aGVuCisJbXYgIiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtYmFzZSsiICIkZG90ZXN0L3BhdGNoLW1lcmdlLWJhc2UiCisJbXYgIiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtdG1wLWluZGV4IiAiJGRvdGVzdC9wYXRjaC1tZXJnZS1pbmRleCIKKyAgICBlbHNlCisJY2Fubm90X2ZhbGxiYWNrICIkKGdldHRleHQgIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/CitJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIikiCisgICAgZmkKKworICAgIHRlc3QgLWYgIiRkb3Rlc3QvcGF0Y2gtbWVyZ2UtaW5kZXgiICYmCisgICAgaGlzX3RyZWU9JChHSVRfSU5ERVhfRklMRT0iJGRvdGVzdC9wYXRjaC1tZXJnZS1pbmRleCIgZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgb3JpZ190cmVlPSQoY2F0ICIkZG90ZXN0L3BhdGNoLW1lcmdlLWJhc2UiKSAmJgorICAgIHJtIC1mciAiJGRvdGVzdCIvcGF0Y2gtbWVyZ2UtKiB8fCBleGl0IDEKKworICAgIHNheSAiJChnZXR0ZXh0ICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iKSIKKworICAgICMgVGhpcyBpcyBub3Qgc28gd3JvbmcuICBEZXBlbmRpbmcgb24gd2hpY2ggYmFzZSB3ZSBwaWNrZWQsCisgICAgIyBvcmlnX3RyZWUgbWF5IGJlIHdpbGRseSBkaWZmZXJlbnQgZnJvbSBvdXJzLCBidXQgaGlzX3RyZWUKKyAgICAjIGhhcyB0aGUgc2FtZSBzZXQgb2Ygd2lsZGx5IGRpZmZlcmVudCBjaGFuZ2VzIGluIHBhcnRzIHRoZQorICAgICMgcGF0Y2ggZGlkIG5vdCB0b3VjaCwgc28gcmVjdXJzaXZlIGVuZHMgdXAgY2FuY2VsaW5nIHRoZW0sCisgICAgIyBzYXlpbmcgdGhhdCB3ZSByZXZlcnRlZCBhbGwgdGhvc2UgY2hhbmdlcy4KKworICAgIGV2YWwgR0lUSEVBRF8kaGlzX3RyZWU9JyIkRklSU1RMSU5FIicKKyAgICBleHBvcnQgR0lUSEVBRF8kaGlzX3RyZWUKKyAgICBpZiB0ZXN0IC1uICIkR0lUX1FVSUVUIgorICAgIHRoZW4KKwkgICAgR0lUX01FUkdFX1ZFUkJPU0lUWT0wICYmIGV4cG9ydCBHSVRfTUVSR0VfVkVSQk9TSVRZCisgICAgZmkKKyAgICBvdXJfdHJlZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgSEVBRCB8fCBlY2hvICRlbXB0eV90cmVlKQorICAgIGdpdC1tZXJnZS1yZWN1cnNpdmUgJG9yaWdfdHJlZSAtLSAkb3VyX3RyZWUgJGhpc190cmVlIHx8IHsKKwkgICAgZ2l0IHJlcmVyZSAkYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUKKwkgICAgZGllICIkKGdldHRleHQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iKSIKKyAgICB9CisgICAgdW5zZXQgR0lUSEVBRF8kaGlzX3RyZWUKK30KKworY2xlYW5fYWJvcnQgKCkgeworCXRlc3QgJCMgPSAwIHx8IGVjaG8gPiYyICIkQCIKKwlybSAtZnIgIiRkb3Rlc3QiCisJZXhpdCAxCit9CisKK3BhdGNoX2Zvcm1hdD0KKworY2hlY2tfcGF0Y2hfZm9ybWF0ICgpIHsKKwkjIGVhcmx5IHJldHVybiBpZiBwYXRjaF9mb3JtYXQgd2FzIHNldCBmcm9tIHRoZSBjb21tYW5kIGxpbmUKKwlpZiB0ZXN0IC1uICIkcGF0Y2hfZm9ybWF0IgorCXRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCisJIyB3ZSBkZWZhdWx0IHRvIG1ib3ggZm9ybWF0IGlmIGlucHV0IGlzIGZyb20gc3RkaW4gYW5kIGZvcgorCSMgZGlyZWN0b3JpZXMKKwlpZiB0ZXN0ICQjID0gMCB8fCB0ZXN0ICJ4JDEiID0gIngtIiB8fCB0ZXN0IC1kICIkMSIKKwl0aGVuCisJCXBhdGNoX2Zvcm1hdD1tYm94CisJCXJldHVybiAwCisJZmkKKworCSMgb3RoZXJ3aXNlLCBjaGVjayB0aGUgZmlyc3QgZmV3IG5vbi1ibGFuayBsaW5lcyBvZiB0aGUgZmlyc3QKKwkjIHBhdGNoIHRvIHRyeSB0byBkZXRlY3QgaXRzIGZvcm1hdAorCXsKKwkJIyBTdGFydCBmcm9tIGZpcnN0IGxpbmUgY29udGFpbmluZyBub24td2hpdGVzcGFjZQorCQlsMT0KKwkJd2hpbGUgdGVzdCAteiAiJGwxIgorCQlkbworCQkJcmVhZCBsMSB8fCBicmVhaworCQlkb25lCisJCXJlYWQgbDIKKwkJcmVhZCBsMworCQljYXNlICIkbDEiIGluCisJCSJGcm9tICIqIHwgIkZyb206ICIqKQorCQkJcGF0Y2hfZm9ybWF0PW1ib3gKKwkJCTs7CisJCScjIFRoaXMgc2VyaWVzIGFwcGxpZXMgb24gR0lUIGNvbW1pdCcqKQorCQkJcGF0Y2hfZm9ybWF0PXN0Z2l0LXNlcmllcworCQkJOzsKKwkJIiMgSEcgY2hhbmdlc2V0IHBhdGNoIikKKwkJCXBhdGNoX2Zvcm1hdD1oZworCQkJOzsKKwkJKikKKwkJCSMgaWYgdGhlIHNlY29uZCBsaW5lIGlzIGVtcHR5IGFuZCB0aGUgdGhpcmQgaXMKKwkJCSMgYSBGcm9tLCBBdXRob3Igb3IgRGF0ZSBlbnRyeSwgdGhpcyBpcyB2ZXJ5CisJCQkjIGxpa2VseSBhbiBTdEdJVCBwYXRjaAorCQkJY2FzZSAiJGwyLCRsMyIgaW4KKwkJCSwiRnJvbTogIiogfCAsIkF1dGhvcjogIiogfCAsIkRhdGU6ICIqKQorCQkJCXBhdGNoX2Zvcm1hdD1zdGdpdAorCQkJCTs7CisJCQkqKQorCQkJCTs7CisJCQllc2FjCisJCQk7OworCQllc2FjCisJCWlmIHRlc3QgLXogIiRwYXRjaF9mb3JtYXQiICYmCisJCQl0ZXN0IC1uICIkbDEiICYmCisJCQl0ZXN0IC1uICIkbDIiICYmCisJCQl0ZXN0IC1uICIkbDMiCisJCXRoZW4KKwkJCSMgVGhpcyBiZWdpbnMgd2l0aCB0aHJlZSBub24tZW1wdHkgbGluZXMuICBJcyB0aGlzIGEKKwkJCSMgcGllY2Ugb2YgZS1tYWlsIGEtbGEgUkZDMjgyMj8gIEdyYWIgYWxsIHRoZSBoZWFkZXJzLAorCQkJIyBkaXNjYXJkaW5nIHRoZSBpbmRlbnRlZCByZW1haW5kZXIgb2YgZm9sZGVkIGxpbmVzLAorCQkJIyBhbmQgc2VlIGlmIGl0IGxvb2tzIGxpa2UgdGhhdCB0aGV5IGFsbCBiZWdpbiB3aXRoIHRoZQorCQkJIyBoZWFkZXIgZmllbGQgbmFtZXMuLi4KKwkJCXRyIC1kICdcMDE1JyA8IiQxIiB8CisJCQlzZWQgLW4gLWUgJy9eJC9xJyAtZSAnL15bIAldL2QnIC1lIHAgfAorCQkJc2FuZV9lZ3JlcCAtdiAnXlshLTk7LX5dKzonID4vZGV2L251bGwgfHwKKwkJCXBhdGNoX2Zvcm1hdD1tYm94CisJCWZpCisJfSA8ICIkMSIgfHwgY2xlYW5fYWJvcnQKK30KKworc3BsaXRfcGF0Y2hlcyAoKSB7CisJY2FzZSAiJHBhdGNoX2Zvcm1hdCIgaW4KKwltYm94KQorCQlpZiB0ZXN0IHQgPSAiJGtlZXBjciIKKwkJdGhlbgorCQkgICAga2VlcF9jcj0tLWtlZXAtY3IKKwkJZWxzZQorCQkgICAga2VlcF9jcj0KKwkJZmkKKwkJZ2l0IG1haWxzcGxpdCAtZCIkcHJlYyIgLW8iJGRvdGVzdCIgLWIgJGtlZXBfY3IgLS0gIiRAIiA+ICIkZG90ZXN0L2xhc3QiIHx8CisJCWNsZWFuX2Fib3J0CisJCTs7CisJc3RnaXQtc2VyaWVzKQorCQlpZiB0ZXN0ICQjIC1uZSAxCisJCXRoZW4KKwkJCWNsZWFuX2Fib3J0ICIkKGdldHRleHQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIikiCisJCWZpCisJCXNlcmllc19kaXI9JChkaXJuYW1lICIkMSIpCisJCXNlcmllc19maWxlPSIkMSIKKwkJc2hpZnQKKwkJeworCQkJc2V0IHgKKwkJCXdoaWxlIHJlYWQgZmlsZW5hbWUKKwkJCWRvCisJCQkJc2V0ICIkQCIgIiRzZXJpZXNfZGlyLyRmaWxlbmFtZSIKKwkJCWRvbmUKKwkJCSMgcmVtb3ZlIHRoZSBzYWZldHkgeAorCQkJc2hpZnQKKwkJCSMgcmVtb3ZlIHRoZSBhcmcgY29taW5nIGZyb20gdGhlIGZpcnN0LWxpbmUgY29tbWVudAorCQkJc2hpZnQKKwkJfSA8ICIkc2VyaWVzX2ZpbGUiIHx8IGNsZWFuX2Fib3J0CisJCSMgc2V0IHRoZSBwYXRjaCBmb3JtYXQgYXBwcm9wcmlhdGVseQorCQlwYXRjaF9mb3JtYXQ9c3RnaXQKKwkJIyBub3cgaGFuZGxlIHRoZSBhY3R1YWwgU3RHSVQgcGF0Y2hlcworCQlzcGxpdF9wYXRjaGVzICIkQCIKKwkJOzsKKwlzdGdpdCkKKwkJdGhpcz0wCisJCXRlc3QgMCAtZXEgIiQjIiAmJiBzZXQgLS0gLQorCQlmb3Igc3RnaXQgaW4gIiRAIgorCQlkbworCQkJdGhpcz0kKGV4cHIgIiR0aGlzIiArIDEpCisJCQltc2dudW09JChwcmludGYgIiUwJHtwcmVjfWQiICR0aGlzKQorCQkJIyBQZXJsIHZlcnNpb24gb2YgU3RHSVQgcGFyc2VfcGF0Y2guIFRoZSBmaXJzdCBub25lbXB0eWxpbmUKKwkJCSMgbm90IHN0YXJ0aW5nIHdpdGggQXV0aG9yLCBGcm9tIG9yIERhdGUgaXMgdGhlCisJCQkjIHN1YmplY3QsIGFuZCB0aGUgYm9keSBzdGFydHMgd2l0aCB0aGUgbmV4dCBub25lbXB0eQorCQkJIyBsaW5lIG5vdCBzdGFydGluZyB3aXRoIEF1dGhvciwgRnJvbSBvciBEYXRlCisJCQlAQFBFUkxAQCAtbmUgJ0JFR0lOIHsgJHN1YmplY3QgPSAwIH0KKwkJCQlpZiAoJHN1YmplY3QgPiAxKSB7IHByaW50IDsgfQorCQkJCWVsc2lmICgvXlxzKyQvKSB7IG5leHQgOyB9CisJCQkJZWxzaWYgKC9eQXV0aG9yOi8pIHsgcy9BdXRob3IvRnJvbS8gOyBwcmludCA7fQorCQkJCWVsc2lmICgvXihGcm9tfERhdGUpLykgeyBwcmludCA7IH0KKwkJCQllbHNpZiAoJHN1YmplY3QpIHsKKwkJCQkJJHN1YmplY3QgPSAyIDsKKwkJCQkJcHJpbnQgIlxuIiA7CisJCQkJCXByaW50IDsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludCAiU3ViamVjdDogIiwgJF8gOworCQkJCQkkc3ViamVjdCA9IDE7CisJCQkJfQorCQkJJyAtLSAiJHN0Z2l0IiA+IiRkb3Rlc3QvJG1zZ251bSIgfHwgY2xlYW5fYWJvcnQKKwkJZG9uZQorCQllY2hvICIkdGhpcyIgPiAiJGRvdGVzdC9sYXN0IgorCQl0aGlzPQorCQltc2dudW09CisJCTs7CisJaGcpCisJCXRoaXM9MAorCQl0ZXN0IDAgLWVxICIkIyIgJiYgc2V0IC0tIC0KKwkJZm9yIGhnIGluICIkQCIKKwkJZG8KKwkJCXRoaXM9JCgoICR0aGlzICsgMSApKQorCQkJbXNnbnVtPSQocHJpbnRmICIlMCR7cHJlY31kIiAkdGhpcykKKwkJCSMgaGcgc3RvcmVzIGNoYW5nZXNldCBtZXRhZGF0YSBpbiAjLWNvbW1lbnRlZCBsaW5lcyBwcmVjZWRpbmcKKwkJCSMgdGhlIGNvbW1pdCBtZXNzYWdlIGFuZCBkaWZmKHMpLiBUaGUgb25seSBtZXRhZGF0YSB3ZSBjYXJlIGFib3V0CisJCQkjIGFyZSB0aGUgVXNlciBhbmQgRGF0ZSAoTm9kZSBJRCBhbmQgUGFyZW50IGFyZSBoYXNoZXMgd2hpY2ggYXJlCisJCQkjIG9ubHkgcmVsZXZhbnQgdG8gdGhlIGhnIHJlcG9zaXRvcnkgYW5kIHRodXMgbm90IHVzZWZ1bCB0byB1cykKKwkJCSMgU2luY2Ugd2UgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHRoZSBjb21taXQgbWVzc2FnZSBpcyBpbgorCQkJIyBnaXQtZnJpZW5kbHkgZm9ybWF0LCB3ZSBwdXQgbm8gU3ViamVjdDogbGluZSBhbmQganVzdCBjb25zdW1lCisJCQkjIGFsbCBvZiB0aGUgbWVzc2FnZSBhcyB0aGUgYm9keQorCQkJTEFORz1DIExDX0FMTD1DIEBAUEVSTEBAIC1NJ1BPU0lYIHF3KHN0cmZ0aW1lKScgLW5lICdCRUdJTiB7ICRzdWJqZWN0ID0gMCB9CisJCQkJaWYgKCRzdWJqZWN0KSB7IHByaW50IDsgfQorCQkJCWVsc2lmICgvXlwjIFVzZXIgLykgeyBzL1wjIFVzZXIvRnJvbTovIDsgcHJpbnQgOyB9CisJCQkJZWxzaWYgKC9eXCMgRGF0ZSAvKSB7CisJCQkJCW15ICgkaGFzaHNpZ24sICRzdHIsICR0aW1lLCAkdHopID0gc3BsaXQgOworCQkJCQkkdHpfc3RyID0gc3ByaW50ZiAiJSswNWQiLCAoMC0kdHopLzM2OworCQkJCQlwcmludCAiRGF0ZTogIiAuCisJCQkJCSAgICAgIHN0cmZ0aW1lKCIlYSwgJWQgJWIgJVkgJUg6JU06JVMgIiwKKwkJCQkJCSAgICAgICBnbXRpbWUoJHRpbWUtJHR6KSkKKwkJCQkJICAgICAgLiAiJHR6X3N0clxuIjsKKwkJCQl9IGVsc2lmICgvXlwjIC8pIHsgbmV4dCA7IH0KKwkJCQllbHNlIHsKKwkJCQkJcHJpbnQgIlxuIiwgJF8gOworCQkJCQkkc3ViamVjdCA9IDE7CisJCQkJfQorCQkJJyAtLSAiJGhnIiA+IiRkb3Rlc3QvJG1zZ251bSIgfHwgY2xlYW5fYWJvcnQKKwkJZG9uZQorCQllY2hvICIkdGhpcyIgPiIkZG90ZXN0L2xhc3QiCisJCXRoaXM9CisJCW1zZ251bT0KKwkJOzsKKwkqKQorCQlpZiB0ZXN0IC1uICIkcGF0Y2hfZm9ybWF0IgorCQl0aGVuCisJCQljbGVhbl9hYm9ydCAiJChldmFsX2dldHRleHQgIlBhdGNoIGZvcm1hdCBcJHBhdGNoX2Zvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIpIgorCQllbHNlCisJCQljbGVhbl9hYm9ydCAiJChnZXR0ZXh0ICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iKSIKKwkJZmkKKwkJOzsKKwllc2FjCit9CisKK3ByZWM9NAorZG90ZXN0PSIkR0lUX0RJUi9yZWJhc2UtYXBwbHkiCitzaWduPSB1dGY4PXQga2VlcD0ga2VlcGNyPSBza2lwPSBpbnRlcmFjdGl2ZT0gcmVzb2x2ZWQ9IHJlYmFzaW5nPSBhYm9ydD0KK21lc3NhZ2VpZD0gcmVzb2x2ZW1zZz0gcmVzdW1lPSBzY2lzc29ycz0gbm9faW5ib2R5X2hlYWRlcnM9CitnaXRfYXBwbHlfb3B0PQorY29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGU9CitpZ25vcmVfZGF0ZT0KK2FsbG93X3JlcmVyZV9hdXRvdXBkYXRlPQorZ3BnX3NpZ25fb3B0PQordGhyZWV3YXk9CisKK2lmIHRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQgYW0ubWVzc2FnZWlkKSIgPSB0cnVlCit0aGVuCisgICAgbWVzc2FnZWlkPXQKK2ZpCisKK2lmIHRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQgYW0ua2VlcGNyKSIgPSB0cnVlCit0aGVuCisgICAga2VlcGNyPXQKK2ZpCisKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktaXwtLWludGVyYWN0aXZlKQorCQlpbnRlcmFjdGl2ZT10IDs7CisJLWJ8LS1iaW5hcnkpCisJCWdldHRleHRsbiA+JjIgIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmQKK2l0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCisJCTs7CisJLTN8LS0zd2F5KQorCQl0aHJlZXdheT10IDs7CisJLXN8LS1zaWdub2ZmKQorCQlzaWduPXQgOzsKKwktdXwtLXV0ZjgpCisJCXV0Zjg9dCA7OyAjIHRoaXMgaXMgbm93IGRlZmF1bHQKKwktLW5vLXV0ZjgpCisJCXV0Zjg9IDs7CisJLW18LS1tZXNzYWdlLWlkKQorCQltZXNzYWdlaWQ9dCA7OworCS0tbm8tbWVzc2FnZS1pZCkKKwkJbWVzc2FnZWlkPWYgOzsKKwkta3wtLWtlZXApCisJCWtlZXA9dCA7OworCS0ta2VlcC1ub24tcGF0Y2gpCisJCWtlZXA9YiA7OworCS1jfC0tc2Npc3NvcnMpCisJCXNjaXNzb3JzPXQgOzsKKwktLW5vLXNjaXNzb3JzKQorCQlzY2lzc29ycz1mIDs7CisJLXJ8LS1yZXNvbHZlZHwtLWNvbnRpbnVlKQorCQlyZXNvbHZlZD10IDs7CisJLS1za2lwKQorCQlza2lwPXQgOzsKKwktLWFib3J0KQorCQlhYm9ydD10IDs7CisJLS1yZWJhc2luZykKKwkJcmViYXNpbmc9dCB0aHJlZXdheT10IDs7CisJLS1yZXNvbHZlbXNnPSopCisJCXJlc29sdmVtc2c9IiR7MSMtLXJlc29sdmVtc2c9fSIgOzsKKwktLXdoaXRlc3BhY2U9KnwtLWRpcmVjdG9yeT0qfC0tZXhjbHVkZT0qfC0taW5jbHVkZT0qKQorCQlnaXRfYXBwbHlfb3B0PSIkZ2l0X2FwcGx5X29wdCAkKHNxICIkMSIpIiA7OworCS1DKnwtcCopCisJCWdpdF9hcHBseV9vcHQ9IiRnaXRfYXBwbHlfb3B0ICQoc3EgIiQxIikiIDs7CisJLS1wYXRjaC1mb3JtYXQ9KikKKwkJcGF0Y2hfZm9ybWF0PSIkezEjLS1wYXRjaC1mb3JtYXQ9fSIgOzsKKwktLXJlamVjdHwtLWlnbm9yZS13aGl0ZXNwYWNlfC0taWdub3JlLXNwYWNlLWNoYW5nZSkKKwkJZ2l0X2FwcGx5X29wdD0iJGdpdF9hcHBseV9vcHQgJDEiIDs7CisJLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSkKKwkJY29tbWl0dGVyX2RhdGVfaXNfYXV0aG9yX2RhdGU9dCA7OworCS0taWdub3JlLWRhdGUpCisJCWlnbm9yZV9kYXRlPXQgOzsKKwktLXJlcmVyZS1hdXRvdXBkYXRlfC0tbm8tcmVyZXJlLWF1dG91cGRhdGUpCisJCWFsbG93X3JlcmVyZV9hdXRvdXBkYXRlPSIkMSIgOzsKKwktcXwtLXF1aWV0KQorCQlHSVRfUVVJRVQ9dCA7OworCS0ta2VlcC1jcikKKwkJa2VlcGNyPXQgOzsKKwktLW5vLWtlZXAtY3IpCisJCWtlZXBjcj1mIDs7CisJLS1ncGctc2lnbikKKwkJZ3BnX3NpZ25fb3B0PS1TIDs7CisJLS1ncGctc2lnbj0qKQorCQlncGdfc2lnbl9vcHQ9Ii1TJHsxIy0tZ3BnLXNpZ249fSIgOzsKKwktLSkKKwkJc2hpZnQ7IGJyZWFrIDs7CisJKikKKwkJdXNhZ2UgOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworIyBJZiB0aGUgZG90ZXN0IGRpcmVjdG9yeSBleGlzdHMsIGJ1dCB3ZSBoYXZlIGZpbmlzaGVkIGFwcGx5aW5nIGFsbCB0aGUKKyMgcGF0Y2hlcyBpbiB0aGVtLCBjbGVhciBpdCBvdXQuCitpZiB0ZXN0IC1kICIkZG90ZXN0IiAmJgorICAgdGVzdCAtZiAiJGRvdGVzdC9sYXN0IiAmJgorICAgdGVzdCAtZiAiJGRvdGVzdC9uZXh0IiAmJgorICAgbGFzdD0kKGNhdCAiJGRvdGVzdC9sYXN0IikgJiYKKyAgIG5leHQ9JChjYXQgIiRkb3Rlc3QvbmV4dCIpICYmCisgICB0ZXN0ICQjICE9IDAgJiYKKyAgIHRlc3QgIiRuZXh0IiAtZ3QgIiRsYXN0IgordGhlbgorICAgcm0gLWZyICIkZG90ZXN0IgorZmkKKworaWYgdGVzdCAtZCAiJGRvdGVzdCIgJiYgdGVzdCAtZiAiJGRvdGVzdC9sYXN0IiAmJiB0ZXN0IC1mICIkZG90ZXN0L25leHQiCit0aGVuCisJY2FzZSAiJCMsJHNraXAkcmVzb2x2ZWQkYWJvcnQiIGluCisJMCwqdCopCisJCSMgRXhwbGljaXQgcmVzdW1lIGNvbW1hbmQgYW5kIHdlIGRvIG5vdCBoYXZlIGZpbGUsIHNvCisJCSMgd2UgYXJlIGhhcHB5LgorCQk6IDs7CisJMCwpCisJCSMgTm8gZmlsZSBpbnB1dCBidXQgd2l0aG91dCByZXN1bWUgcGFyYW1ldGVyczsgY2F0Y2gKKwkJIyB1c2VyIGVycm9yIHRvIGZlZWQgdXMgYSBwYXRjaCBmcm9tIHN0YW5kYXJkIGlucHV0CisJCSMgd2hlbiB0aGVyZSBpcyBhbHJlYWR5ICRkb3Rlc3QuICBUaGlzIGlzIHNvbWV3aGF0CisJCSMgdW5yZWxpYWJsZSAtLSBzdGRpbiBjb3VsZCBiZSAvZGV2L251bGwgZm9yIGV4YW1wbGUKKwkJIyBhbmQgdGhlIGNhbGxlciBkaWQgbm90IGludGVuZCB0byBmZWVkIHVzIGEgcGF0Y2ggYnV0CisJCSMgd2FudGVkIHRvIGNvbnRpbnVlIHVuYXR0ZW5kZWQuCisJCXRlc3QgLXQgMAorCQk7OworCSopCisJCWZhbHNlCisJCTs7CisJZXNhYyB8fAorCWRpZSAiJChldmFsX2dldHRleHQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgXCRkb3Rlc3Qgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIpIgorCXJlc3VtZT15ZXMKKworCWNhc2UgIiRza2lwLCRhYm9ydCIgaW4KKwl0LHQpCisJCWRpZSAiJChnZXR0ZXh0ICJQbGVhc2UgbWFrZSB1cCB5b3VyIG1pbmQuIC0tc2tpcCBvciAtLWFib3J0PyIpIgorCQk7OworCXQsKQorCQlnaXQgcmVyZXJlIGNsZWFyCisJCWhlYWRfdHJlZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgSEVBRCB8fCBlY2hvICRlbXB0eV90cmVlKSAmJgorCQlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgJGhlYWRfdHJlZSAkaGVhZF90cmVlICYmCisJCWluZGV4X3RyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJZ2l0IHJlYWQtdHJlZSAtbSAtdSAkaW5kZXhfdHJlZSAkaGVhZF90cmVlCisJCWdpdCByZWFkLXRyZWUgLW0gJGhlYWRfdHJlZQorCQk7OworCSx0KQorCQlpZiB0ZXN0IC1mICIkZG90ZXN0L3JlYmFzaW5nIgorCQl0aGVuCisJCQlleGVjIGdpdCByZWJhc2UgLS1hYm9ydAorCQlmaQorCQlnaXQgcmVyZXJlIGNsZWFyCisJCWlmIHNhZmVfdG9fYWJvcnQKKwkJdGhlbgorCQkJaGVhZF90cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSBIRUFEIHx8IGVjaG8gJGVtcHR5X3RyZWUpICYmCisJCQlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgJGhlYWRfdHJlZSAkaGVhZF90cmVlICYmCisJCQlpbmRleF90cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCQlvcmlnX2hlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIE9SSUdfSEVBRCB8fCBlY2hvICRlbXB0eV90cmVlKSAmJgorCQkJZ2l0IHJlYWQtdHJlZSAtbSAtdSAkaW5kZXhfdHJlZSAkb3JpZ19oZWFkCisJCQlpZiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIE9SSUdfSEVBRCA+L2Rldi9udWxsIDI+JjEKKwkJCXRoZW4KKwkJCQlnaXQgcmVzZXQgT1JJR19IRUFECisJCQllbHNlCisJCQkJZ2l0IHJlYWQtdHJlZSAkZW1wdHlfdHJlZQorCQkJCWN1cnJfYnJhbmNoPSQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+L2Rldi9udWxsKSAmJgorCQkJCWdpdCB1cGRhdGUtcmVmIC1kICRjdXJyX2JyYW5jaAorCQkJZmkKKwkJZmkKKwkJcm0gLWZyICIkZG90ZXN0IgorCQlleGl0IDs7CisJZXNhYworCXJtIC1mICIkZG90ZXN0L2RpcnR5aW5kZXgiCitlbHNlCisJIyBQb3NzaWJsZSBzdHJheSAkZG90ZXN0IGRpcmVjdG9yeSBpbiB0aGUgaW5kZXBlbmRlbnQtcnVuCisJIyBjYXNlOyBpbiB0aGUgLS1yZWJhc2luZyBjYXNlLCBpdCBpcyB1cHRvIHRoZSBjYWxsZXIKKwkjIChnaXQtcmViYXNlLS1hbSkgdG8gdGFrZSBjYXJlIG9mIHN0cmF5IGRpcmVjdG9yaWVzLgorCWlmIHRlc3QgLWQgIiRkb3Rlc3QiICYmIHRlc3QgLXogIiRyZWJhc2luZyIKKwl0aGVuCisJCWNhc2UgIiRza2lwLCRyZXNvbHZlZCwkYWJvcnQiIGluCisJCSwsdCkKKwkJCXJtIC1mciAiJGRvdGVzdCIKKwkJCWV4aXQgMAorCQkJOzsKKwkJKikKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlN0cmF5IFwkZG90ZXN0IGRpcmVjdG9yeSBmb3VuZC4KK1VzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIpIgorCQkJOzsKKwkJZXNhYworCWZpCisKKwkjIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IGdpdmVuIC0tc2tpcCwgLS1jb250aW51ZSwgb3IgLS1hYm9ydAorCXRlc3QgIiRza2lwJHJlc29sdmVkJGFib3J0IiA9ICIiIHx8CisJCWRpZSAiJChnZXR0ZXh0ICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIikiCisKKwkjIFN0YXJ0IGFmcmVzaC4KKwlta2RpciAtcCAiJGRvdGVzdCIgfHwgZXhpdAorCisJaWYgdGVzdCAtbiAiJHByZWZpeCIgJiYgdGVzdCAkIyAhPSAwCisJdGhlbgorCQlmaXJzdD10CisJCWZvciBhcmcKKwkJZG8KKwkJCXRlc3QgLW4gIiRmaXJzdCIgJiYgeworCQkJCXNldCB4CisJCQkJZmlyc3Q9CisJCQl9CisJCQlpZiBpc19hYnNvbHV0ZV9wYXRoICIkYXJnIgorCQkJdGhlbgorCQkJCXNldCAiJEAiICIkYXJnIgorCQkJZWxzZQorCQkJCXNldCAiJEAiICIkcHJlZml4JGFyZyIKKwkJCWZpCisJCWRvbmUKKwkJc2hpZnQKKwlmaQorCisJY2hlY2tfcGF0Y2hfZm9ybWF0ICIkQCIKKworCXNwbGl0X3BhdGNoZXMgIiRAIgorCisJIyAtaSBjYW4gYW5kIG11c3QgYmUgZ2l2ZW4gd2hlbiByZXN1bWluZzsgZXZlcnl0aGluZworCSMgZWxzZSBpcyBrZXB0CisJZWNobyAiICRnaXRfYXBwbHlfb3B0IiA+IiRkb3Rlc3QvYXBwbHktb3B0IgorCWVjaG8gIiR0aHJlZXdheSIgPiIkZG90ZXN0L3RocmVld2F5IgorCWVjaG8gIiRzaWduIiA+IiRkb3Rlc3Qvc2lnbiIKKwllY2hvICIkdXRmOCIgPiIkZG90ZXN0L3V0ZjgiCisJZWNobyAiJGtlZXAiID4iJGRvdGVzdC9rZWVwIgorCWVjaG8gIiRtZXNzYWdlaWQiID4iJGRvdGVzdC9tZXNzYWdlaWQiCisJZWNobyAiJHNjaXNzb3JzIiA+IiRkb3Rlc3Qvc2Npc3NvcnMiCisJZWNobyAiJG5vX2luYm9keV9oZWFkZXJzIiA+IiRkb3Rlc3Qvbm9faW5ib2R5X2hlYWRlcnMiCisJZWNobyAiJEdJVF9RVUlFVCIgPiIkZG90ZXN0L3F1aWV0IgorCWVjaG8gMSA+IiRkb3Rlc3QvbmV4dCIKKwlpZiB0ZXN0IC1uICIkcmViYXNpbmciCisJdGhlbgorCQk6ID4iJGRvdGVzdC9yZWJhc2luZyIKKwllbHNlCisJCTogPiIkZG90ZXN0L2FwcGx5aW5nIgorCQlpZiB0ZXN0IC1uICIkSEFTX0hFQUQiCisJCXRoZW4KKwkJCWdpdCB1cGRhdGUtcmVmIE9SSUdfSEVBRCBIRUFECisJCWVsc2UKKwkJCWdpdCB1cGRhdGUtcmVmIC1kIE9SSUdfSEVBRCA+L2Rldi9udWxsIDI+JjEKKwkJZmkKKwlmaQorZmkKKworZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2gKKworY2FzZSAiJHJlc29sdmVkIiBpbgorJycpCisJY2FzZSAiJEhBU19IRUFEIiBpbgorCScnKQorCQlmaWxlcz0kKGdpdCBscy1maWxlcykgOzsKKwk/KikKKwkJZmlsZXM9JChnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtb25seSBIRUFEIC0tKSA7OworCWVzYWMgfHwgZXhpdAorCWlmIHRlc3QgIiRmaWxlcyIKKwl0aGVuCisJCXRlc3QgLW4gIiRIQVNfSEVBRCIgJiYgOiA+IiRkb3Rlc3QvZGlydHlpbmRleCIKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogXCRmaWxlcykiKSIKKwlmaQorZXNhYworCisjIE5vdywgZGVjaWRlIHdoYXQgY29tbWFuZCBsaW5lIG9wdGlvbnMgd2Ugd2lsbCBnaXZlIHRvIHRoZSBnaXQKKyMgY29tbWFuZHMgd2UgaW52b2tlLCBiYXNlZCBvbiB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgY29tbWFuZCBsaW5lCisjIG9wdGlvbnMgYW5kIHByZXZpb3VzIGludm9jYXRpb24gc3RhdGUgc3RvcmVkIGluICRkb3Rlc3QvIGZpbGVzLgorCitpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC91dGY4IikiID0gdAordGhlbgorCXV0Zjg9LXUKK2Vsc2UKKwl1dGY4PS1uCitmaQora2VlcD0kKGNhdCAiJGRvdGVzdC9rZWVwIikKK2Nhc2UgIiRrZWVwIiBpbgordCkKKwlrZWVwPS1rIDs7CitiKQorCWtlZXA9LWIgOzsKKyopCisJa2VlcD0gOzsKK2VzYWMKK2Nhc2UgIiQoY2F0ICIkZG90ZXN0L21lc3NhZ2VpZCIpIiBpbgordCkKKwltZXNzYWdlaWQ9LW0gOzsKK2YpCisJbWVzc2FnZWlkPSA7OworZXNhYworY2FzZSAiJChjYXQgIiRkb3Rlc3Qvc2Npc3NvcnMiKSIgaW4KK3QpCisJc2Npc3NvcnM9LS1zY2lzc29ycyA7OworZikKKwlzY2lzc29ycz0tLW5vLXNjaXNzb3JzIDs7Citlc2FjCitpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC9ub19pbmJvZHlfaGVhZGVycyIpIiA9IHQKK3RoZW4KKwlub19pbmJvZHlfaGVhZGVycz0tLW5vLWluYm9keS1oZWFkZXJzCitlbHNlCisJbm9faW5ib2R5X2hlYWRlcnM9CitmaQoraWYgdGVzdCAiJChjYXQgIiRkb3Rlc3QvcXVpZXQiKSIgPSB0Cit0aGVuCisJR0lUX1FVSUVUPXQKK2ZpCitpZiB0ZXN0ICIkKGNhdCAiJGRvdGVzdC90aHJlZXdheSIpIiA9IHQKK3RoZW4KKwl0aHJlZXdheT10CitmaQorZ2l0X2FwcGx5X29wdD0kKGNhdCAiJGRvdGVzdC9hcHBseS1vcHQiKQoraWYgdGVzdCAiJChjYXQgIiRkb3Rlc3Qvc2lnbiIpIiA9IHQKK3RoZW4KKwlTSUdOT0ZGPSQoZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UIHwgc2VkIC1lICcKKwkJCXMvPi4qLz4vCisJCQlzL14vU2lnbmVkLW9mZi1ieTogLycKKwkJKQorZWxzZQorCVNJR05PRkY9CitmaQorCitsYXN0PSQoY2F0ICIkZG90ZXN0L2xhc3QiKQordGhpcz0kKGNhdCAiJGRvdGVzdC9uZXh0IikKK2lmIHRlc3QgIiRza2lwIiA9IHQKK3RoZW4KKwl0aGlzPSQoZXhwciAiJHRoaXMiICsgMSkKKwlyZXN1bWU9CitmaQorCit3aGlsZSB0ZXN0ICIkdGhpcyIgLWxlICIkbGFzdCIKK2RvCisJbXNnbnVtPSQocHJpbnRmICIlMCR7cHJlY31kIiAkdGhpcykKKwluZXh0PSQoZXhwciAiJHRoaXMiICsgMSkKKwl0ZXN0IC1mICIkZG90ZXN0LyRtc2dudW0iIHx8IHsKKwkJcmVzdW1lPQorCQlnb19uZXh0CisJCWNvbnRpbnVlCisJfQorCisJIyBJZiB3ZSBhcmUgbm90IHJlc3VtaW5nLCBwYXJzZSBhbmQgZXh0cmFjdCB0aGUgcGF0Y2ggaW5mb3JtYXRpb24KKwkjIGludG8gc2VwYXJhdGUgZmlsZXM6CisJIyAgLSBpbmZvIHJlY29yZHMgdGhlIGF1dGhvcnNoaXAgYW5kIHRpdGxlCisJIyAgLSBtc2cgaXMgdGhlIHJlc3Qgb2YgY29tbWl0IGxvZyBtZXNzYWdlCisJIyAgLSBwYXRjaCBpcyB0aGUgcGF0Y2ggYm9keS4KKwkjCisJIyBXaGVuIHdlIGFyZSByZXN1bWluZywgdGhlc2UgZmlsZXMgYXJlIGVpdGhlciBhbHJlYWR5IHByZXBhcmVkCisJIyBieSB0aGUgdXNlciwgb3IgdGhlIHVzZXIgY2FuIHRlbGwgdXMgdG8gZG8gc28gYnkgLS1jb250aW51ZSBmbGFnLgorCWNhc2UgIiRyZXN1bWUiIGluCisJJycpCisJCWlmIHRlc3QgLWYgIiRkb3Rlc3QvcmViYXNpbmciCisJCXRoZW4KKwkJCWNvbW1pdD0kKHNlZCAtZSAncy9eRnJvbSBcKFswLTlhLWZdKlwpIC4qL1wxLycgXAorCQkJCS1lIHEgIiRkb3Rlc3QvJG1zZ251bSIpICYmCisJCQl0ZXN0ICIkKGdpdCBjYXQtZmlsZSAtdCAiJGNvbW1pdCIpIiA9IGNvbW1pdCB8fAorCQkJCXN0b3BfaGVyZSAkdGhpcworCQkJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJGNvbW1pdCIgfAorCQkJc2VkIC1lICcxLC9eJC9kJyA+IiRkb3Rlc3QvbXNnLWNsZWFuIgorCQkJZWNobyAiJGNvbW1pdCIgPiIkZG90ZXN0L29yaWdpbmFsLWNvbW1pdCIKKwkJCWdldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQgIiRjb21taXQiID4iJGRvdGVzdC9hdXRob3Itc2NyaXB0IgorCQkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1iaW5hcnkgLS1mdWxsLWluZGV4ICIkY29tbWl0IiA+IiRkb3Rlc3QvcGF0Y2giCisJCWVsc2UKKwkJCWdpdCBtYWlsaW5mbyAka2VlcCAkbm9faW5ib2R5X2hlYWRlcnMgJG1lc3NhZ2VpZCAkc2Npc3NvcnMgJHV0ZjggIiRkb3Rlc3QvbXNnIiAiJGRvdGVzdC9wYXRjaCIgXAorCQkJCTwiJGRvdGVzdC8kbXNnbnVtIiA+IiRkb3Rlc3QvaW5mbyIgfHwKKwkJCQlzdG9wX2hlcmUgJHRoaXMKKworCQkJIyBza2lwIHBpbmUncyBpbnRlcm5hbCBmb2xkZXIgZGF0YQorCQkJc2FuZV9ncmVwICdeQXV0aG9yOiBNYWlsIFN5c3RlbSBJbnRlcm5hbCBEYXRhJCcgXAorCQkJCTwiJGRvdGVzdCIvaW5mbyA+L2Rldi9udWxsICYmCisJCQkJZ29fbmV4dCAmJiBjb250aW51ZQorCisJCQl0ZXN0IC1zICIkZG90ZXN0L3BhdGNoIiB8fCB7CisJCQkJZXZhbF9nZXR0ZXh0bG4gIlBhdGNoIGlzIGVtcHR5LiAgV2FzIGl0IHNwbGl0IHdyb25nPworSWYgeW91IHdvdWxkIHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIGluc3RlYWQgcnVuIFwiXCRjbWRsaW5lIC0tc2tpcFwiLgorVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nIHJ1biBcIlwkY21kbGluZSAtLWFib3J0XCIuIgorCQkJCXN0b3BfaGVyZSAkdGhpcworCQkJfQorCQkJcm0gLWYgIiRkb3Rlc3Qvb3JpZ2luYWwtY29tbWl0IiAiJGRvdGVzdC9hdXRob3Itc2NyaXB0IgorCQkJeworCQkJCXNlZCAtbiAnL15TdWJqZWN0LyBzL1N1YmplY3Q6IC8vcCcgIiRkb3Rlc3QvaW5mbyIKKwkJCQllY2hvCisJCQkJY2F0ICIkZG90ZXN0L21zZyIKKwkJCX0gfAorCQkJZ2l0IHN0cmlwc3BhY2UgPiAiJGRvdGVzdC9tc2ctY2xlYW4iCisJCWZpCisJCTs7CisJZXNhYworCisJaWYgdGVzdCAtZiAiJGRvdGVzdC9hdXRob3Itc2NyaXB0IgorCXRoZW4KKwkJZXZhbCAkKGNhdCAiJGRvdGVzdC9hdXRob3Itc2NyaXB0IikKKwllbHNlCisJCUdJVF9BVVRIT1JfTkFNRT0iJChzZWQgLW4gJy9eQXV0aG9yLyBzL0F1dGhvcjogLy9wJyAiJGRvdGVzdC9pbmZvIikiCisJCUdJVF9BVVRIT1JfRU1BSUw9IiQoc2VkIC1uICcvXkVtYWlsLyBzL0VtYWlsOiAvL3AnICIkZG90ZXN0L2luZm8iKSIKKwkJR0lUX0FVVEhPUl9EQVRFPSIkKHNlZCAtbiAnL15EYXRlLyBzL0RhdGU6IC8vcCcgIiRkb3Rlc3QvaW5mbyIpIgorCWZpCisKKwlpZiB0ZXN0IC16ICIkR0lUX0FVVEhPUl9FTUFJTCIKKwl0aGVuCisJCWdldHRleHRsbiAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKKwkJc3RvcF9oZXJlICR0aGlzCisJZmkKKworCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTCBHSVRfQVVUSE9SX0RBVEUKKworCWNhc2UgIiRyZXN1bWUiIGluCisJJycpCisJICAgIGlmIHRlc3QgJycgIT0gIiRTSUdOT0ZGIgorCSAgICB0aGVuCisJCUxBU1RfU0lHTkVEX09GRl9CWT0kKAorCQkgICAgc2VkIC1uZSAnL15TaWduZWQtb2ZmLWJ5OiAvcCcgXAorCQkgICAgIiRkb3Rlc3QvbXNnLWNsZWFuIiB8CisJCSAgICBzZWQgLW5lICckcCcKKwkJKQorCQlBRERfU0lHTk9GRj0kKAorCQkgICAgdGVzdCAiJExBU1RfU0lHTkVEX09GRl9CWSIgPSAiJFNJR05PRkYiIHx8IHsKKwkJICAgIHRlc3QgJycgPSAiJExBU1RfU0lHTkVEX09GRl9CWSIgJiYgZWNobworCQkgICAgZWNobyAiJFNJR05PRkYiCisJCX0pCisJICAgIGVsc2UKKwkJQUREX1NJR05PRkY9CisJICAgIGZpCisJICAgIHsKKwkJaWYgdGVzdCAtcyAiJGRvdGVzdC9tc2ctY2xlYW4iCisJCXRoZW4KKwkJCWNhdCAiJGRvdGVzdC9tc2ctY2xlYW4iCisJCWZpCisJCWlmIHRlc3QgJycgIT0gIiRBRERfU0lHTk9GRiIKKwkJdGhlbgorCQkJZWNobyAiJEFERF9TSUdOT0ZGIgorCQlmaQorCSAgICB9ID4iJGRvdGVzdC9maW5hbC1jb21taXQiCisJICAgIDs7CisJKikKKwkJY2FzZSAiJHJlc29sdmVkJGludGVyYWN0aXZlIiBpbgorCQl0dCkKKwkJCSMgVGhpcyBpcyB1c2VkIG9ubHkgZm9yIGludGVyYWN0aXZlIHZpZXcgb3B0aW9uLgorCQkJZ2l0IGRpZmYtaW5kZXggLXAgLS1jYWNoZWQgSEVBRCAtLSA+IiRkb3Rlc3QvcGF0Y2giCisJCQk7OworCQllc2FjCisJZXNhYworCisJcmVzdW1lPQorCWlmIHRlc3QgIiRpbnRlcmFjdGl2ZSIgPSB0CisJdGhlbgorCSAgICB0ZXN0IC10IDAgfHwKKwkgICAgZGllICIkKGdldHRleHQgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIpIgorCSAgICBhY3Rpb249YWdhaW4KKwkgICAgd2hpbGUgdGVzdCAiJGFjdGlvbiIgPSBhZ2FpbgorCSAgICBkbworCQlnZXR0ZXh0bG4gIkNvbW1pdCBCb2R5IGlzOiIKKwkJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisJCWNhdCAiJGRvdGVzdC9maW5hbC1jb21taXQiCisJCWVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCQkjIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorCQkjIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorCQkjIGlucHV0IGF0IHRoaXMgcG9pbnQuCisJCWdldHRleHQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsICIKKwkJcmVhZCByZXBseQorCQljYXNlICIkcmVwbHkiIGluCisJCVt5WV0qKSBhY3Rpb249eWVzIDs7CisJCVthQV0qKSBhY3Rpb249eWVzIGludGVyYWN0aXZlPSA7OworCQlbbk5dKikgYWN0aW9uPXNraXAgOzsKKwkJW2VFXSopIGdpdF9lZGl0b3IgIiRkb3Rlc3QvZmluYWwtY29tbWl0IgorCQkgICAgICAgYWN0aW9uPWFnYWluIDs7CisJCVt2Vl0qKSBhY3Rpb249YWdhaW4KKwkJICAgICAgIGdpdF9wYWdlciAiJGRvdGVzdC9wYXRjaCIgOzsKKwkJKikgICAgIGFjdGlvbj1hZ2FpbiA7OworCQllc2FjCisJICAgIGRvbmUKKwllbHNlCisJICAgIGFjdGlvbj15ZXMKKwlmaQorCisJaWYgdGVzdCAkYWN0aW9uID0gc2tpcAorCXRoZW4KKwkJZ29fbmV4dAorCQljb250aW51ZQorCWZpCisKKwlob29rPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBob29rcy9hcHBseXBhdGNoLW1zZykiCisJaWYgdGVzdCAteCAiJGhvb2siCisJdGhlbgorCQkiJGhvb2siICIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIgfHwgc3RvcF9oZXJlICR0aGlzCisJZmkKKworCWlmIHRlc3QgLWYgIiRkb3Rlc3QvZmluYWwtY29tbWl0IgorCXRoZW4KKwkJRklSU1RMSU5FPSQoc2VkIDFxICIkZG90ZXN0L2ZpbmFsLWNvbW1pdCIpCisJZWxzZQorCQlGSVJTVExJTkU9IiIKKwlmaQorCisJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiQXBwbHlpbmc6IFwkRklSU1RMSU5FIikiCisKKwljYXNlICIkcmVzb2x2ZWQiIGluCisJJycpCisJCSMgV2hlbiB3ZSBhcmUgYWxsb3dlZCB0byBmYWxsIGJhY2sgdG8gMy13YXkgbGF0ZXIsIGRvbid0IGdpdmUKKwkJIyBmYWxzZSBlcnJvcnMgZHVyaW5nIHRoZSBpbml0aWFsIGF0dGVtcHQuCisJCXNxdWVsY2g9CisJCWlmIHRlc3QgIiR0aHJlZXdheSIgPSB0CisJCXRoZW4KKwkJCXNxdWVsY2g9Jz4vZGV2L251bGwgMj4mMSAnCisJCWZpCisJCWV2YWwgImdpdCBhcHBseSAkc3F1ZWxjaCRnaXRfYXBwbHlfb3B0IicgLS1pbmRleCAiJGRvdGVzdC9wYXRjaCInCisJCWFwcGx5X3N0YXR1cz0kPworCQk7OworCXQpCisJCSMgUmVzb2x2ZWQgbWVhbnMgdGhlIHVzZXIgZGlkIGFsbCB0aGUgaGFyZCB3b3JrLCBhbmQKKwkJIyB3ZSBkbyBub3QgaGF2ZSB0byBkbyBhbnkgcGF0Y2ggYXBwbGljYXRpb24uICBKdXN0CisJCSMgdHJ1c3Qgd2hhdCB0aGUgdXNlciBoYXMgaW4gdGhlIGluZGV4IGZpbGUgYW5kIHRoZQorCQkjIHdvcmtpbmcgdHJlZS4KKwkJcmVzb2x2ZWQ9CisJCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAtLSAmJiB7CisJCQlnZXR0ZXh0bG4gIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnPworSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlCithbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKKwkJCXN0b3BfaGVyZV91c2VyX3Jlc29sdmUgJHRoaXMKKwkJfQorCQl1bm1lcmdlZD0kKGdpdCBscy1maWxlcyAtdSkKKwkJaWYgdGVzdCAtbiAiJHVubWVyZ2VkIgorCQl0aGVuCisJCQlnZXR0ZXh0bG4gIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXgKK2RpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/IgorCQkJc3RvcF9oZXJlX3VzZXJfcmVzb2x2ZSAkdGhpcworCQlmaQorCQlhcHBseV9zdGF0dXM9MAorCQlnaXQgcmVyZXJlCisJCTs7CisJZXNhYworCisJaWYgdGVzdCAkYXBwbHlfc3RhdHVzICE9IDAgJiYgdGVzdCAiJHRocmVld2F5IiA9IHQKKwl0aGVuCisJCWlmIChmYWxsX2JhY2tfM3dheSkKKwkJdGhlbgorCQkgICAgIyBBcHBseWluZyB0aGUgcGF0Y2ggdG8gYW4gZWFybGllciB0cmVlIGFuZCBtZXJnaW5nIHRoZQorCQkgICAgIyByZXN1bHQgbWF5IGhhdmUgcHJvZHVjZWQgdGhlIHNhbWUgdHJlZSBhcyBvdXJzLgorCQkgICAgZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tICYmIHsKKwkJCXNheSAiJChnZXR0ZXh0ICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iKSIKKwkJCWdvX25leHQKKwkJCWNvbnRpbnVlCisJCSAgICB9CisJCSAgICAjIGNsZWFyIGFwcGx5X3N0YXR1cyAtLSB3ZSBoYXZlIHN1Y2Nlc3NmdWxseSBtZXJnZWQuCisJCSAgICBhcHBseV9zdGF0dXM9MAorCQlmaQorCWZpCisJaWYgdGVzdCAkYXBwbHlfc3RhdHVzICE9IDAKKwl0aGVuCisJCWV2YWxfZ2V0dGV4dGxuICdQYXRjaCBmYWlsZWQgYXQgJG1zZ251bSAkRklSU1RMSU5FJworCQlpZiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIGFkdmljZS5hbXdvcmtkaXIpIiAhPSBmYWxzZQorCQl0aGVuCisJCQlldmFsX2dldHRleHRsbiAnVGhlIGNvcHkgb2YgdGhlIHBhdGNoIHRoYXQgZmFpbGVkIGlzIGZvdW5kIGluOgorICAgJGRvdGVzdC9wYXRjaCcKKwkJZmkKKwkJc3RvcF9oZXJlX3VzZXJfcmVzb2x2ZSAkdGhpcworCWZpCisKKwlob29rPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBob29rcy9wcmUtYXBwbHlwYXRjaCkiCisJaWYgdGVzdCAteCAiJGhvb2siCisJdGhlbgorCQkiJGhvb2siIHx8IHN0b3BfaGVyZSAkdGhpcworCWZpCisKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0PSQoCisJCWlmIHRlc3QgLW4gIiRpZ25vcmVfZGF0ZSIKKwkJdGhlbgorCQkJR0lUX0FVVEhPUl9EQVRFPQorCQlmaQorCQlwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIEhFQUQpIHx8CisJCXNheSA+JjIgIiQoZ2V0dGV4dCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIpIgorCisJCWlmIHRlc3QgLW4gIiRjb21taXR0ZXJfZGF0ZV9pc19hdXRob3JfZGF0ZSIKKwkJdGhlbgorCQkJR0lUX0NPTU1JVFRFUl9EQVRFPSIkR0lUX0FVVEhPUl9EQVRFIgorCQkJZXhwb3J0IEdJVF9DT01NSVRURVJfREFURQorCQlmaSAmJgorCQlnaXQgY29tbWl0LXRyZWUgJHtwYXJlbnQ6Ky1wfSAkcGFyZW50ICR7Z3BnX3NpZ25fb3B0OisiJGdwZ19zaWduX29wdCJ9ICR0cmVlICBcCisJCQk8IiRkb3Rlc3QvZmluYWwtY29tbWl0IgorCSkgJiYKKwlnaXQgdXBkYXRlLXJlZiAtbSAiJEdJVF9SRUZMT0dfQUNUSU9OOiAkRklSU1RMSU5FIiBIRUFEICRjb21taXQgJHBhcmVudCB8fAorCXN0b3BfaGVyZSAkdGhpcworCisJaWYgdGVzdCAtZiAiJGRvdGVzdC9vcmlnaW5hbC1jb21taXQiOyB0aGVuCisJCWVjaG8gIiQoY2F0ICIkZG90ZXN0L29yaWdpbmFsLWNvbW1pdCIpICRjb21taXQiID4+ICIkZG90ZXN0L3Jld3JpdHRlbiIKKwlmaQorCisJaG9vaz0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggaG9va3MvcG9zdC1hcHBseXBhdGNoKSIKKwl0ZXN0IC14ICIkaG9vayIgJiYgIiRob29rIgorCisJZ29fbmV4dAorZG9uZQorCitpZiB0ZXN0IC1zICIkZG90ZXN0Ii9yZXdyaXR0ZW47IHRoZW4KKyAgICBnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPXJlYmFzZSA8ICIkZG90ZXN0Ii9yZXdyaXR0ZW4KKyAgICBob29rPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBob29rcy9wb3N0LXJld3JpdGUpIgorICAgIGlmIHRlc3QgLXggIiRob29rIjsgdGhlbgorCSIkaG9vayIgcmViYXNlIDwgIiRkb3Rlc3QiL3Jld3JpdHRlbgorICAgIGZpCitmaQorCisjIElmIGFtIHdhcyBjYWxsZWQgd2l0aCAtLXJlYmFzaW5nIChmcm9tIGdpdC1yZWJhc2UtLWFtKSwgaXQncyB1cCB0bworIyB0aGUgY2FsbGVyIHRvIHRha2UgY2FyZSBvZiBob3VzZWtlZXBpbmcuCitpZiAhIHRlc3QgLWYgIiRkb3Rlc3QvcmViYXNpbmciCit0aGVuCisJcm0gLWZyICIkZG90ZXN0IgorCWdpdCBnYyAtLWF1dG8KK2ZpCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1jaGVja291dC5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWNoZWNrb3V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4M2NhZTcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC1jaGVja291dC5zaApAQCAtMCwwICsxLDMwMiBAQAorIyEvYmluL3NoCisKK09QVElPTlNfS0VFUERBU0hEQVNIPXQKK09QVElPTlNfU1BFQz0iXAorZ2l0LWNoZWNrb3V0IFtvcHRpb25zXSBbPGJyYW5jaD5dIFs8cGF0aHM+Li4uXQorLS0KK2I9ICAgICAgICAgIGNyZWF0ZSBhIG5ldyBicmFuY2ggc3RhcnRlZCBhdCA8YnJhbmNoPgorbCAgICAgICAgICAgY3JlYXRlIHRoZSBuZXcgYnJhbmNoJ3MgcmVmbG9nCit0cmFjayAgICAgICBhcnJhbmdlIHRoYXQgdGhlIG5ldyBicmFuY2ggdHJhY2tzIHRoZSByZW1vdGUgYnJhbmNoCitmICAgICAgICAgICBwcm9jZWVkIGV2ZW4gaWYgdGhlIGluZGV4IG9yIHdvcmtpbmcgdHJlZSBpcyBub3QgSEVBRAorbSAgICAgICAgICAgbWVyZ2UgbG9jYWwgbW9kaWZpY2F0aW9ucyBpbnRvIHRoZSBuZXcgYnJhbmNoCitxLHF1aWV0ICAgICBiZSBxdWlldAorIgorU1VCRElSRUNUT1JZX09LPVNvbWV0aW1lcworLiBnaXQtc2gtc2V0dXAKK3JlcXVpcmVfd29ya190cmVlCisKK29sZF9uYW1lPUhFQUQKK29sZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJG9sZF9uYW1lIDI+L2Rldi9udWxsKQorb2xkYnJhbmNoPSQoZ2l0IHN5bWJvbGljLXJlZiAkb2xkX25hbWUgMj4vZGV2L251bGwpCituZXc9CituZXdfbmFtZT0KK2ZvcmNlPQorYnJhbmNoPQordHJhY2s9CituZXdicmFuY2g9CituZXdicmFuY2hfbG9nPQorbWVyZ2U9CitxdWlldD0KK3Y9LXYKK0xGPScKKycKKword2hpbGUgdGVzdCAkIyAhPSAwOyBkbworCWNhc2UgIiQxIiBpbgorCS1iKQorCQlzaGlmdAorCQluZXdicmFuY2g9IiQxIgorCQlbIC16ICIkbmV3YnJhbmNoIiBdICYmCisJCQlkaWUgImdpdCBjaGVja291dDogLWIgbmVlZHMgYSBicmFuY2ggbmFtZSIKKwkJZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC0tcXVpZXQgLS0gInJlZnMvaGVhZHMvJG5ld2JyYW5jaCIgJiYKKwkJCWRpZSAiZ2l0IGNoZWNrb3V0OiBicmFuY2ggJG5ld2JyYW5jaCBhbHJlYWR5IGV4aXN0cyIKKwkJZ2l0IGNoZWNrLXJlZi1mb3JtYXQgImhlYWRzLyRuZXdicmFuY2giIHx8CisJCQlkaWUgImdpdCBjaGVja291dDogd2UgZG8gbm90IGxpa2UgJyRuZXdicmFuY2gnIGFzIGEgYnJhbmNoIG5hbWUuIgorCQk7OworCS1sKQorCQluZXdicmFuY2hfbG9nPS1sCisJCTs7CisJLS10cmFja3wtLW5vLXRyYWNrKQorCQl0cmFjaz0iJDEiCisJCTs7CisJLWYpCisJCWZvcmNlPTEKKwkJOzsKKwktbSkKKwkJbWVyZ2U9MQorCQk7OworCS1xfC0tcXVpZXQpCisJCXF1aWV0PTEKKwkJdj0KKwkJOzsKKwktLSkKKwkJc2hpZnQKKwkJYnJlYWsKKwkJOzsKKwkqKQorCQl1c2FnZQorCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCithcmc9IiQxIgorcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJGFyZyIgMj4vZGV2L251bGwpCitpZiByZXY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkcmV2XjAiIDI+L2Rldi9udWxsKQordGhlbgorCVsgLXogIiRyZXYiIF0gJiYgZGllICJ1bmtub3duIGZsYWcgJGFyZyIKKwluZXdfbmFtZT0iJGFyZyIKKwlpZiBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLS1xdWlldCAtLSAicmVmcy9oZWFkcy8kYXJnIgorCXRoZW4KKwkJcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAicmVmcy9oZWFkcy8kYXJnXjAiKQorCQlicmFuY2g9IiRhcmciCisJZmkKKwluZXc9IiRyZXYiCisJc2hpZnQKK2VsaWYgcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHJldl57dHJlZX0iIDI+L2Rldi9udWxsKQordGhlbgorCSMgY2hlY2tpbmcgb3V0IHNlbGVjdGVkIHBhdGhzIGZyb20gYSB0cmVlLWlzaC4KKwluZXc9IiRyZXYiCisJbmV3X25hbWU9IiRyZXZee3RyZWV9IgorCXNoaWZ0CitmaQorWyAiJDEiID0gIi0tIiBdICYmIHNoaWZ0CisKK2Nhc2UgIiRuZXdicmFuY2gsJHRyYWNrIiBpbgorLC0tKikKKwlkaWUgImdpdCBjaGVja291dDogLS10cmFjayBhbmQgLS1uby10cmFjayByZXF1aXJlIC1iIgorZXNhYworCitjYXNlICIkZm9yY2UkbWVyZ2UiIGluCisxMSkKKwlkaWUgImdpdCBjaGVja291dDogLWYgYW5kIC1tIGFyZSBpbmNvbXBhdGlibGUiCitlc2FjCisKKyMgVGhlIGJlaGF2aW91ciBvZiB0aGUgY29tbWFuZCB3aXRoIGFuZCB3aXRob3V0IGV4cGxpY2l0IHBhdGgKKyMgcGFyYW1ldGVycyBpcyBxdWl0ZSBkaWZmZXJlbnQuCisjCisjIFdpdGhvdXQgcGF0aHMsIHdlIGFyZSBjaGVja2luZyBvdXQgZXZlcnl0aGluZyBpbiB0aGUgd29yayB0cmVlLAorIyBwb3NzaWJseSBzd2l0Y2hpbmcgYnJhbmNoZXMuICBUaGlzIGlzIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvdXIuCisjCisjIFdpdGggcGF0aHMsIHdlIGFyZSBfbmV2ZXJfIHN3aXRjaGluZyBicmFuY2gsIGJ1dCBjaGVja2luZyBvdXQKKyMgdGhlIG5hbWVkIHBhdGhzIGZyb20gZWl0aGVyIGluZGV4ICh3aGVuIG5vIHJldiBpcyBnaXZlbiksCisjIG9yIHRoZSBuYW1lZCB0cmVlLWlzaCAod2hlbiByZXYgaXMgZ2l2ZW4pLgorCitpZiB0ZXN0ICIkIyIgLWdlIDEKK3RoZW4KKwloaW50PQorCWlmIHRlc3QgIiQjIiAtZXEgMQorCXRoZW4KKwkJaGludD0iCitEaWQgeW91IGludGVuZCB0byBjaGVja291dCAnJEAnIHdoaWNoIGNhbiBub3QgYmUgcmVzb2x2ZWQgYXMgY29tbWl0PyIKKwlmaQorCWlmIHRlc3QgJycgIT0gIiRuZXdicmFuY2gkZm9yY2UkbWVyZ2UiCisJdGhlbgorCQlkaWUgImdpdCBjaGVja291dDogdXBkYXRpbmcgcGF0aHMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzL2ZvcmNpbmckaGludCIKKwlmaQorCWlmIHRlc3QgJycgIT0gIiRuZXciCisJdGhlbgorCQkjIGZyb20gYSBzcGVjaWZpYyB0cmVlLWlzaDsgbm90ZSB0aGF0IHRoaXMgaXMgZm9yCisJCSMgcmVzY3VpbmcgcGF0aHMgYW5kIGlzIG5ldmVyIG1lYW50IHRvIHJlbW92ZSB3aGF0CisJCSMgaXMgbm90IGluIHRoZSBuYW1lZCB0cmVlLWlzaC4KKwkJZ2l0IGxzLXRyZWUgLS1mdWxsLW5hbWUgLXIgIiRuZXciICIkQCIgfAorCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyB8fCBleGl0ICQ/CisJZmkKKworCSMgTWFrZSBzdXJlIHRoZSByZXF1ZXN0IGlzIGFib3V0IGV4aXN0aW5nIHBhdGhzLgorCWdpdCBscy1maWxlcyAtLWZ1bGwtbmFtZSAtLWVycm9yLXVubWF0Y2ggLS0gIiRAIiA+L2Rldi9udWxsIHx8IGV4aXQKKwlnaXQgbHMtZmlsZXMgLS1mdWxsLW5hbWUgLS0gIiRAIiB8CisJCShjZF90b190b3BsZXZlbCAmJiBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgLS1zdGRpbikKKworCSMgUnVuIGEgcG9zdC1jaGVja291dCBob29rIC0tIHRoZSBIRUFEIGRvZXMgbm90IGNoYW5nZSBzbyB0aGUKKwkjIGN1cnJlbnQgSEVBRCBpcyBwYXNzZWQgaW4gZm9yIGJvdGggYXJncworCWlmIHRlc3QgLXggIiRHSVRfRElSIi9ob29rcy9wb3N0LWNoZWNrb3V0OyB0aGVuCisJICAgICIkR0lUX0RJUiIvaG9va3MvcG9zdC1jaGVja291dCAkb2xkICRvbGQgMAorCWZpCisKKwlleGl0ICQ/CitlbHNlCisJIyBNYWtlIHN1cmUgd2UgZGlkIG5vdCBmYWxsIGJhY2sgb24gJGFyZ157dHJlZX0gY29kZXBhdGgKKwkjIHNpbmNlIHdlIGFyZSBub3QgY2hlY2tpbmcgb3V0IGZyb20gYW4gYXJiaXRyYXJ5IHRyZWUtaXNoLAorCSMgYnV0IHN3aXRjaGluZyBicmFuY2hlcy4KKwlpZiB0ZXN0ICcnICE9ICIkbmV3IgorCXRoZW4KKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJG5ld157Y29tbWl0fSIgPi9kZXYvbnVsbCAyPiYxIHx8CisJCWRpZSAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0LiIKKwlmaQorZmkKKworIyBXZSBhcmUgc3dpdGNoaW5nIGJyYW5jaGVzIGFuZCBjaGVja2luZyBvdXQgdHJlZXMsIHNvCisjIHdlICpORUVEKiB0byBiZSBhdCB0aGUgdG9wbGV2ZWwuCitjZF90b190b3BsZXZlbAorCitbIC16ICIkbmV3IiBdICYmIG5ldz0kb2xkICYmIG5ld19uYW1lPSIkb2xkX25hbWUiCisKKyMgSWYgd2UgZG9uJ3QgaGF2ZSBhbiBleGlzdGluZyBicmFuY2ggdGhhdCB3ZSdyZSBzd2l0Y2hpbmcgdG8sCisjIGFuZCB3ZSBkb24ndCBoYXZlIGEgbmV3IGJyYW5jaCBuYW1lIGZvciB0aGUgdGFyZ2V0IHdlCisjIGFyZSBzd2l0Y2hpbmcgdG8sIHRoZW4gd2UgYXJlIGRldGFjaGluZyBvdXIgSEVBRCBmcm9tIGFueQorIyBicmFuY2guICBIb3dldmVyLCBpZiAiZ2l0IGNoZWNrb3V0IEhFQUQiIGRldGFjaGVzIHRoZSBIRUFECisjIGZyb20gdGhlIGN1cnJlbnQgYnJhbmNoLCBldmVuIHRob3VnaCB0aGF0IG1heSBiZSBsb2dpY2FsbHkKKyMgY29ycmVjdCwgaXQgZmVlbHMgc29tZXdoYXQgZnVubnkuICBNb3JlIGltcG9ydGFudGx5LCB3ZSBkbyBub3QKKyMgd2FudCAiZ2l0IGNoZWNrb3V0IiBvciAiZ2l0IGNoZWNrb3V0IC1mIiB0byBkZXRhY2ggSEVBRC4KKworZGV0YWNoZWQ9CitkZXRhY2hfd2Fybj0KKworZGVzY3JpYmVfZGV0YWNoZWRfaGVhZCAoKSB7CisJdGVzdCAtbiAiJHF1aWV0IiB8fCB7CisJCXByaW50ZiA+JjIgIiQxICIKKwkJR0lUX1BBR0VSPSBnaXQgbG9nID4mMiAtMSAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAiJDIiIC0tCisJfQorfQorCitpZiB0ZXN0IC16ICIkYnJhbmNoJG5ld2JyYW5jaCIgJiYgdGVzdCAiJG5ld19uYW1lIiAhPSAiJG9sZF9uYW1lIgordGhlbgorCWRldGFjaGVkPSIkbmV3IgorCWlmIHRlc3QgLW4gIiRvbGRicmFuY2giICYmIHRlc3QgLXogIiRxdWlldCIKKwl0aGVuCisJCWRldGFjaF93YXJuPSJOb3RlOiBtb3ZpbmcgdG8gXCIkbmV3X25hbWVcIiB3aGljaCBpc24ndCBhIGxvY2FsIGJyYW5jaAorSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGJyYW5jaCBmcm9tIHRoaXMgY2hlY2tvdXQsIHlvdSBtYXkgZG8gc28KKyhub3cgb3IgbGF0ZXIpIGJ5IHVzaW5nIC1iIHdpdGggdGhlIGNoZWNrb3V0IGNvbW1hbmQgYWdhaW4uIEV4YW1wbGU6CisgIGdpdCBjaGVja291dCAtYiA8bmV3X2JyYW5jaF9uYW1lPiIKKwlmaQorZWxpZiB0ZXN0IC16ICIkb2xkYnJhbmNoIiAmJiB0ZXN0ICIkbmV3IiAhPSAiJG9sZCIKK3RoZW4KKwlkZXNjcmliZV9kZXRhY2hlZF9oZWFkICdQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcycgIiRvbGQiCitmaQorCitpZiBbICJYJG9sZCIgPSBYIF0KK3RoZW4KKwlpZiB0ZXN0IC16ICIkcXVpZXQiCisJdGhlbgorCQllY2hvID4mMiAid2FybmluZzogWW91IGFwcGVhciB0byBiZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybi4iCisJCWVjaG8gPiYyICJ3YXJuaW5nOiBGb3JjaW5nIGNoZWNrb3V0IG9mICRuZXdfbmFtZS4iCisJZmkKKwlmb3JjZT0xCitmaQorCitpZiBbICIkZm9yY2UiIF0KK3RoZW4KKyAgICBnaXQgcmVhZC10cmVlICR2IC0tcmVzZXQgLXUgJG5ldworZWxzZQorICAgIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoID4vZGV2L251bGwKKyAgICBnaXQgcmVhZC10cmVlICR2IC1tIC11IC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PS5naXRpZ25vcmUgJG9sZCAkbmV3IHx8ICgKKwljYXNlICIkbWVyZ2UsJHYiIGluCisJLCopCisJCWV4aXQgMSA7OworCTEsKQorCQk7OyAjIHF1aWV0CisJKikKKwkJZWNobyA+JjIgIkZhbGxpbmcgYmFjayB0byAzLXdheSBtZXJnZS4uLiIgOzsKKwllc2FjCisKKwkjIE1hdGNoIHRoZSBpbmRleCB0byB0aGUgd29ya2luZyB0cmVlLCBhbmQgZG8gYSB0aHJlZS13YXkuCisJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgfCBnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tc3RkaW4gJiYKKwl3b3JrPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZ2l0IHJlYWQtdHJlZSAkdiAtLXJlc2V0IC11ICRuZXcgfHwgZXhpdAorCisJZXZhbCBHSVRIRUFEXyRuZXc9JyR7bmV3X25hbWU6LSR7YnJhbmNoOi0kbmV3fX0nICYmCisJZXZhbCBHSVRIRUFEXyR3b3JrPWxvY2FsICYmCisJZXhwb3J0IEdJVEhFQURfJG5ldyBHSVRIRUFEXyR3b3JrICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAkb2xkIC0tICRuZXcgJHdvcmsKKworCSMgRG8gbm90IHJlZ2lzdGVyIHRoZSBjbGVhbmx5IG1lcmdlZCBwYXRocyBpbiB0aGUgaW5kZXggeWV0LgorCSMgdGhpcyBpcyBub3QgYSByZWFsIG1lcmdlIGJlZm9yZSBjb21taXR0aW5nLCBidXQganVzdCBjYXJyeWluZworCSMgdGhlIHdvcmtpbmcgdHJlZSBjaGFuZ2VzIGFsb25nLgorCXVubWVyZ2VkPSQoZ2l0IGxzLWZpbGVzIC11KQorCWdpdCByZWFkLXRyZWUgJHYgLS1yZXNldCAkbmV3CisJY2FzZSAiJHVubWVyZ2VkIiBpbgorCScnKQk7OworCSopCisJCSgKKwkJCXo0MD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisJCQllY2hvICIkdW5tZXJnZWQiIHwKKwkJCXNlZCAtZSAncy9eWzAtN10qIFswLTlhLWZdKiAvJyIwICR6NDAgLyIKKwkJCWVjaG8gIiR1bm1lcmdlZCIKKwkJKSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvCisJCTs7CisJZXNhYworCWV4aXQgMAorICAgICkKKyAgICBzYXZlZF9lcnI9JD8KKyAgICBpZiB0ZXN0ICIkc2F2ZWRfZXJyIiA9IDAgJiYgdGVzdCAteiAiJHF1aWV0IgorICAgIHRoZW4KKwlnaXQgZGlmZi1pbmRleCAtLW5hbWUtc3RhdHVzICIkbmV3IgorICAgIGZpCisgICAgKGV4aXQgJHNhdmVkX2VycikKK2ZpCisKKyMKKyMgU3dpdGNoIHRoZSBIRUFEIHBvaW50ZXIgdG8gdGhlIG5ldyBicmFuY2ggaWYgd2UKKyMgY2hlY2tlZCBvdXQgYSBicmFuY2ggaGVhZCwgYW5kIHJlbW92ZSBhbnkgcG90ZW50aWFsCisjIG9sZCBNRVJHRV9IRUFEJ3MgKHN1YnNlcXVlbnQgY29tbWl0cyB3aWxsIGNsZWFybHkgbm90CisjIGJlIGJhc2VkIG9uIHRoZW0sIHNpbmNlIHdlIHJlLXNldCB0aGUgaW5kZXgpCisjCitpZiBbICIkPyIgLWVxIDAgXTsgdGhlbgorCWlmIFsgIiRuZXdicmFuY2giIF07IHRoZW4KKwkJZ2l0IGJyYW5jaCAkdHJhY2sgJG5ld2JyYW5jaF9sb2cgIiRuZXdicmFuY2giICIkbmV3X25hbWUiIHx8IGV4aXQKKwkJYnJhbmNoPSIkbmV3YnJhbmNoIgorCWZpCisJaWYgdGVzdCAtbiAiJGJyYW5jaCIKKwl0aGVuCisJCW9sZF9icmFuY2hfbmFtZT0kKGV4cHIgInokb2xkYnJhbmNoIiA6ICd6cmVmcy9oZWFkcy9cKC4qXCknKQorCQlHSVRfRElSPSIkR0lUX0RJUiIgZ2l0IHN5bWJvbGljLXJlZiAtbSAiY2hlY2tvdXQ6IG1vdmluZyBmcm9tICR7b2xkX2JyYW5jaF9uYW1lOi0kb2xkfSB0byAkYnJhbmNoIiBIRUFEICJyZWZzL2hlYWRzLyRicmFuY2giCisJCWlmIHRlc3QgLW4gIiRxdWlldCIKKwkJdGhlbgorCQkJdHJ1ZQkjIG5vdGhpbmcKKwkJZWxpZiB0ZXN0ICJyZWZzL2hlYWRzLyRicmFuY2giID0gIiRvbGRicmFuY2giCisJCXRoZW4KKwkJCWVjaG8gPiYyICJBbHJlYWR5IG9uIGJyYW5jaCBcIiRicmFuY2hcIiIKKwkJZWxzZQorCQkJZWNobyA+JjIgIlN3aXRjaGVkIHRvJHtuZXdicmFuY2g6KyBhIG5ld30gYnJhbmNoIFwiJGJyYW5jaFwiIgorCQlmaQorCWVsaWYgdGVzdCAtbiAiJGRldGFjaGVkIgorCXRoZW4KKwkJb2xkX2JyYW5jaF9uYW1lPSQoZXhwciAieiRvbGRicmFuY2giIDogJ3pyZWZzL2hlYWRzL1woLipcKScpCisJCWdpdCB1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLW0gImNoZWNrb3V0OiBtb3ZpbmcgZnJvbSAke29sZF9icmFuY2hfbmFtZTotJG9sZH0gdG8gJGFyZyIgSEVBRCAiJGRldGFjaGVkIiB8fAorCQkJZGllICJDYW5ub3QgZGV0YWNoIEhFQUQiCisJCWlmIHRlc3QgLW4gIiRkZXRhY2hfd2FybiIKKwkJdGhlbgorCQkJZWNobyA+JjIgIiRkZXRhY2hfd2FybiIKKwkJZmkKKwkJZGVzY3JpYmVfZGV0YWNoZWRfaGVhZCAnSEVBRCBpcyBub3cgYXQnIEhFQUQKKwlmaQorCXJtIC1mICIkR0lUX0RJUi9NRVJHRV9IRUFEIgorZWxzZQorCWV4aXQgMQorZmkKKworIyBSdW4gYSBwb3N0LWNoZWNrb3V0IGhvb2sKK2lmIHRlc3QgLXggIiRHSVRfRElSIi9ob29rcy9wb3N0LWNoZWNrb3V0OyB0aGVuCisJIiRHSVRfRElSIi9ob29rcy9wb3N0LWNoZWNrb3V0ICRvbGQgJG5ldyAxCitmaQpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtY2xlYW4uc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC1jbGVhbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMWM5NWU5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtY2xlYW4uc2gKQEAgLTAsMCArMSwxMTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNiBQYXZlbCBSb3NraW4KKyMKKworT1BUSU9OU19LRUVQREFTSERBU0g9CitPUFRJT05TX1NQRUM9IlwKK2dpdC1jbGVhbiBbb3B0aW9uc10gPHBhdGhzPi4uLgorCitDbGVhbiB1bnRyYWNrZWQgZmlsZXMgZnJvbSB0aGUgd29ya2luZyBkaXJlY3RvcnkKKworV2hlbiBvcHRpb25hbCA8cGF0aHM+Li4uIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIHRoZSBwYXRocworYWZmZWN0ZWQgYXJlIGZ1cnRoZXIgbGltaXRlZCB0byB0aG9zZSB0aGF0IG1hdGNoIHRoZW0uCistLQorZCByZW1vdmUgZGlyZWN0b3JpZXMgYXMgd2VsbAorZiBvdmVycmlkZSBjbGVhbi5yZXF1aXJlRm9yY2UgYW5kIGNsZWFuIGFueXdheQorbiBkb24ndCByZW1vdmUgYW55dGhpbmcsIGp1c3Qgc2hvdyB3aGF0IHdvdWxkIGJlIGRvbmUKK3EgYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycworeCByZW1vdmUgaWdub3JlZCBmaWxlcyBhcyB3ZWxsCitYIHJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCisKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKKy4gZ2l0LXNoLXNldHVwCityZXF1aXJlX3dvcmtfdHJlZQorCitpZ25vcmVkPQoraWdub3JlZG9ubHk9CitjbGVhbmRpcj0KK3JtZj0icm0gLWYgLS0iCitybXJmPSJybSAtcmYgLS0iCitybV9yZWZ1c2U9ImVjaG8gTm90IHJlbW92aW5nIgorZWNobzE9ImVjaG8iCisKK2Rpc2FibGVkPSQoZ2l0IGNvbmZpZyAtLWJvb2wgY2xlYW4ucmVxdWlyZUZvcmNlKQorCit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLWQpCisJCWNsZWFuZGlyPTEKKwkJOzsKKwktZikKKwkJZGlzYWJsZWQ9ZmFsc2UKKwkJOzsKKwktbikKKwkJZGlzYWJsZWQ9ZmFsc2UKKwkJcm1mPSJlY2hvIFdvdWxkIHJlbW92ZSIKKwkJcm1yZj0iZWNobyBXb3VsZCByZW1vdmUiCisJCXJtX3JlZnVzZT0iZWNobyBXb3VsZCBub3QgcmVtb3ZlIgorCQllY2hvMT0iOiIKKwkJOzsKKwktcSkKKwkJZWNobzE9IjoiCisJCTs7CisJLXgpCisJCWlnbm9yZWQ9MQorCQk7OworCS1YKQorCQlpZ25vcmVkb25seT0xCisJCTs7CisJLS0pCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJKikKKwkJdXNhZ2UgIyBzaG91bGQgbm90IGhhcHBlbgorCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCisjIHJlcXVpcmVGb3JjZSB1c2VkIHRvIGRlZmF1bHQgdG8gZmFsc2UgYnV0IG5vdyBpdCBkZWZhdWx0cyB0byB0cnVlLgorIyBJT1csIGxhY2sgb2YgZXhwbGljaXQgImNsZWFuLnJlcXVpcmVGb3JjZSA9IGZhbHNlIiBpcyB0YWtlbiBhcworIyAiY2xlYW4ucmVxdWlyZUZvcmNlID0gdHJ1ZSIuCitjYXNlICIkZGlzYWJsZWQiIGluCisiIikKKwlkaWUgImNsZWFuLnJlcXVpcmVGb3JjZSBub3Qgc2V0IGFuZCAtbiBvciAtZiBub3QgZ2l2ZW47IHJlZnVzaW5nIHRvIGNsZWFuIgorCTs7CisidHJ1ZSIpCisJZGllICJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IGFuZCAtbiBvciAtZiBub3QgZ2l2ZW47IHJlZnVzaW5nIHRvIGNsZWFuIgorCTs7Citlc2FjCisKK2lmIFsgIiRpZ25vcmVkLCRpZ25vcmVkb25seSIgPSAiMSwxIiBdOyB0aGVuCisJZGllICIteCBhbmQgLVggY2Fubm90IGJlIHNldCB0b2dldGhlciIKK2ZpCisKK2lmIFsgLXogIiRpZ25vcmVkIiBdOyB0aGVuCisJZXhjbD0iLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSIKKwlleGNsX2luZm89IGV4Y2x1ZGVzX2ZpbGU9CisJaWYgWyAtZiAiJEdJVF9ESVIvaW5mby9leGNsdWRlIiBdOyB0aGVuCisJCWV4Y2xfaW5mbz0iLS1leGNsdWRlLWZyb209JEdJVF9ESVIvaW5mby9leGNsdWRlIgorCWZpCisJaWYgY2ZnX2V4Y2w9JChnaXQgY29uZmlnIGNvcmUuZXhjbHVkZXNmaWxlKSAmJiB0ZXN0IC1mICIkY2ZnX2V4Y2wiCisJdGhlbgorCQlleGNsdWRlc19maWxlPSItLWV4Y2x1ZGUtZnJvbT0kY2ZnX2V4Y2wiCisJZmkKKwlpZiBbICIkaWdub3JlZG9ubHkiIF07IHRoZW4KKwkJZXhjbD0iJGV4Y2wgLS1pZ25vcmVkIgorCWZpCitmaQorCitnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1kaXJlY3RvcnkgXAorCSRleGNsICR7ZXhjbF9pbmZvOisiJGV4Y2xfaW5mbyJ9ICR7ZXhjbHVkZXNfZmlsZTorIiRleGNsdWRlc19maWxlIn0gXAorCS0tICIkQCIgfAord2hpbGUgcmVhZCAtciBmaWxlOyBkbworCWlmIFsgLWQgIiRmaWxlIiAtYSAhIC1MICIkZmlsZSIgXTsgdGhlbgorCQlpZiBbIC16ICIkY2xlYW5kaXIiIF07IHRoZW4KKwkJCSRybV9yZWZ1c2UgIiRmaWxlIgorCQkJY29udGludWUKKwkJZmkKKwkJJGVjaG8xICJSZW1vdmluZyAkZmlsZSIKKwkJJHJtcmYgIiRmaWxlIgorCWVsc2UKKwkJJGVjaG8xICJSZW1vdmluZyAkZmlsZSIKKwkJJHJtZiAiJGZpbGUiCisJZmkKK2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWNsb25lLnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtY2xvbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDhjZjI0NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWNsb25lLnNoCkBAIC0wLDAgKzEsNTI1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1LCBMaW51cyBUb3J2YWxkcworIyBDb3B5cmlnaHQgKGMpIDIwMDUsIEp1bmlvIEMgSGFtYW5vCisjCisjIENsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeSB0aGF0IGRvZXMgbm90IHlldCBleGlzdC4KKworIyBTZWUgZ2l0LXNoLXNldHVwIHdoeS4KK3Vuc2V0IENEUEFUSAorCitPUFRJT05TX1NQRUM9IlwKK2dpdC1jbG9uZSBbb3B0aW9uc10gWy0tXSA8cmVwbz4gWzxkaXI+XQorLS0KK24sbm8tY2hlY2tvdXQgICAgICAgIGRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0CitiYXJlICAgICAgICAgICAgICAgICBjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkKK25ha2VkICAgICAgICAgICAgICAgIGNyZWF0ZSBhIGJhcmUgcmVwb3NpdG9yeQorbCxsb2NhbCAgICAgICAgICAgICAgdG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkKK25vLWhhcmRsaW5rcyAgICAgICAgIGRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5CitzLHNoYXJlZCAgICAgICAgICAgICBzZXR1cCBhcyBhIHNoYXJlZCByZXBvc2l0b3J5Cit0ZW1wbGF0ZT0gICAgICAgICAgICBwYXRoIHRvIHRoZSB0ZW1wbGF0ZSBkaXJlY3RvcnkKK3EscXVpZXQgICAgICAgICAgICAgIGJlIHF1aWV0CityZWZlcmVuY2U9ICAgICAgICAgICByZWZlcmVuY2UgcmVwb3NpdG9yeQorbyxvcmlnaW49ICAgICAgICAgICAgdXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtCit1LHVwbG9hZC1wYWNrPSAgICAgICBwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlCitkZXB0aD0gICAgICAgICAgICAgICBjcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoYXQgZGVwdGgKKwordXNlLXNlcGFyYXRlLXJlbW90ZSAgY29tcGF0aWJpbGl0eSwgZG8gbm90IHVzZQorbm8tc2VwYXJhdGUtcmVtb3RlICAgY29tcGF0aWJpbGl0eSwgZG8gbm90IHVzZSIKKworZGllKCkgeworCWVjaG8gPiYyICIkQCIKKwlleGl0IDEKK30KKwordXNhZ2UoKSB7CisJZXhlYyAiJDAiIC1oCit9CisKK2V2YWwgIiQoZWNobyAiJE9QVElPTlNfU1BFQyIgfCBnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gIiRAIiB8fCBlY2hvIGV4aXQgJD8pIgorCitnZXRfcmVwb19iYXNlKCkgeworCSgKKwkJY2QgIiQoL2Jpbi9wd2QpIiAmJgorCQljZCAiJDEiIHx8IGNkICIkMS5naXQiICYmCisJCXsKKwkJCWNkIC5naXQKKwkJCXB3ZAorCQl9CisJKSAyPi9kZXYvbnVsbAorfQorCitpZiBbIC1uICIkR0lUX1NTTF9OT19WRVJJRlkiIC1vIFwKKwkiJChnaXQgY29uZmlnIC0tYm9vbCBodHRwLnNzbFZlcmlmeSkiID0gZmFsc2UgXTsgdGhlbgorICAgIGN1cmxfZXh0cmFfYXJncz0iLWsiCitmaQorCitodHRwX2ZldGNoICgpIHsKKwkjICQxID0gUmVtb3RlLCAkMiA9IExvY2FsCisJY3VybCAtbnNmTCAkY3VybF9leHRyYV9hcmdzICIkMSIgPiIkMiIKKwljdXJsX2V4aXRfc3RhdHVzPSQ/CisJY2FzZSAkY3VybF9leGl0X3N0YXR1cyBpbgorCTEyNnwxMjcpIGV4aXQgOzsKKwkqKQkgcmV0dXJuICRjdXJsX2V4aXRfc3RhdHVzIDs7CisJZXNhYworfQorCitjbG9uZV9kdW1iX2h0dHAgKCkgeworCSMgJDEgLSByZW1vdGUsICQyIC0gbG9jYWwKKwljZCAiJDIiICYmCisJY2xvbmVfdG1wPSIkR0lUX0RJUi9jbG9uZS10bXAiICYmCisJbWtkaXIgLXAgIiRjbG9uZV90bXAiIHx8IGV4aXQgMQorCWlmIFsgLW4gIiRHSVRfQ1VSTF9GVFBfTk9fRVBTViIgLW8gXAorCQkiJChnaXQgY29uZmlnIC0tYm9vbCBodHRwLm5vRVBTVikiID0gdHJ1ZSBdOyB0aGVuCisJCWN1cmxfZXh0cmFfYXJncz0iJHtjdXJsX2V4dHJhX2FyZ3N9IC0tZGlzYWJsZS1lcHN2IgorCWZpCisJaHR0cF9mZXRjaCAiJDEvaW5mby9yZWZzIiAiJGNsb25lX3RtcC9yZWZzIiB8fAorCQlkaWUgIkNhbm5vdCBnZXQgcmVtb3RlIHJlcG9zaXRvcnkgaW5mb3JtYXRpb24uCitQZXJoYXBzIGdpdC11cGRhdGUtc2VydmVyLWluZm8gbmVlZHMgdG8gYmUgcnVuIHRoZXJlPyIKKwl0ZXN0ICJ6JHF1aWV0IiA9IHogJiYgdj0tdiB8fCB2PQorCXdoaWxlIHJlYWQgc2hhMSByZWZuYW1lCisJZG8KKwkJbmFtZT0kKGV4cHIgInokcmVmbmFtZSIgOiAnenJlZnMvXCguKlwpJykgJiYKKwkJY2FzZSAiJG5hbWUiIGluCisJCSpeKikJY29udGludWU7OworCQllc2FjCisJCWNhc2UgIiRiYXJlLCRuYW1lIiBpbgorCQl5ZXMsKiB8ICxoZWFkcy8qIHwgLHRhZ3MvKikgOzsKKwkJKikJY29udGludWUgOzsKKwkJZXNhYworCQlpZiB0ZXN0IC1uICIkdXNlX3NlcGFyYXRlX3JlbW90ZSIgJiYKKwkJICAgYnJhbmNoX25hbWU9JChleHByICJ6JG5hbWUiIDogJ3poZWFkcy9cKC4qXCknKQorCQl0aGVuCisJCQl0bmFtZT0icmVtb3Rlcy8kb3JpZ2luLyRicmFuY2hfbmFtZSIKKwkJZWxzZQorCQkJdG5hbWU9JG5hbWUKKwkJZmkKKwkJZ2l0LWh0dHAtZmV0Y2ggJHYgLWEgLXcgIiR0bmFtZSIgIiRzaGExIiAiJDEiIHx8IGV4aXQgMQorCWRvbmUgPCIkY2xvbmVfdG1wL3JlZnMiCisJcm0gLWZyICIkY2xvbmVfdG1wIgorCWh0dHBfZmV0Y2ggIiQxL0hFQUQiICIkR0lUX0RJUi9SRU1PVEVfSEVBRCIgfHwKKwlybSAtZiAiJEdJVF9ESVIvUkVNT1RFX0hFQUQiCisJaWYgdGVzdCAtZiAiJEdJVF9ESVIvUkVNT1RFX0hFQUQiOyB0aGVuCisJCWhlYWRfc2hhMT0kKGNhdCAiJEdJVF9ESVIvUkVNT1RFX0hFQUQiKQorCQljYXNlICIkaGVhZF9zaGExIiBpbgorCQkncmVmOiByZWZzLycqKQorCQkJOzsKKwkJKikKKwkJCWdpdC1odHRwLWZldGNoICR2IC1hICIkaGVhZF9zaGExIiAiJDEiIHx8CisJCQlybSAtZiAiJEdJVF9ESVIvUkVNT1RFX0hFQUQiCisJCQk7OworCQllc2FjCisJZmkKK30KKworcXVpZXQ9Citsb2NhbD1ubwordXNlX2xvY2FsX2hhcmRsaW5rPXllcworbG9jYWxfc2hhcmVkPW5vCit1bnNldCB0ZW1wbGF0ZQorbm9fY2hlY2tvdXQ9Cit1cGxvYWRfcGFjaz0KK2JhcmU9CityZWZlcmVuY2U9CitvcmlnaW49CitvcmlnaW5fb3ZlcnJpZGU9Cit1c2Vfc2VwYXJhdGVfcmVtb3RlPXQKK2RlcHRoPQorbm9fcHJvZ3Jlc3M9Citsb2NhbF9leHBsaWNpdGx5X2Fza2VkX2Zvcj0KK3Rlc3QgLXQgMSB8fCBub19wcm9ncmVzcz0tLW5vLXByb2dyZXNzCisKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktbnwtLW5vLWNoZWNrb3V0KQorCQlub19jaGVja291dD15ZXMgOzsKKwktLW5ha2VkfC0tYmFyZSkKKwkJYmFyZT15ZXMgOzsKKwktbHwtLWxvY2FsKQorCQlsb2NhbF9leHBsaWNpdGx5X2Fza2VkX2Zvcj15ZXMKKwkJdXNlX2xvY2FsX2hhcmRsaW5rPXllcworCQk7OworCS0tbm8taGFyZGxpbmtzKQorCQl1c2VfbG9jYWxfaGFyZGxpbms9bm8gOzsKKwktc3wtLXNoYXJlZCkKKwkJbG9jYWxfc2hhcmVkPXllcyA7OworCS0tdGVtcGxhdGUpCisJCXNoaWZ0OyB0ZW1wbGF0ZT0iLS10ZW1wbGF0ZT0kMSIgOzsKKwktcXwtLXF1aWV0KQorCQlxdWlldD0tcSA7OworCS0tdXNlLXNlcGFyYXRlLXJlbW90ZXwtLW5vLXNlcGFyYXRlLXJlbW90ZSkKKwkJZGllICJjbG9uZXMgYXJlIGFsd2F5cyBtYWRlIHdpdGggc2VwYXJhdGUtcmVtb3RlIGxheW91dCIgOzsKKwktLXJlZmVyZW5jZSkKKwkJc2hpZnQ7IHJlZmVyZW5jZT0iJDEiIDs7CisJLW98LS1vcmlnaW4pCisJCXNoaWZ0OworCQljYXNlICIkMSIgaW4KKwkJJycpCisJCSAgICB1c2FnZSA7OworCQkqLyopCisJCSAgICBkaWUgIickMScgaXMgbm90IHN1aXRhYmxlIGZvciBhbiBvcmlnaW4gbmFtZSIKKwkJZXNhYworCQlnaXQgY2hlY2stcmVmLWZvcm1hdCAiaGVhZHMvJDEiIHx8CisJCSAgICBkaWUgIickMScgaXMgbm90IHN1aXRhYmxlIGZvciBhIGJyYW5jaCBuYW1lIgorCQl0ZXN0IC16ICIkb3JpZ2luX292ZXJyaWRlIiB8fAorCQkgICAgZGllICJEbyBub3QgZ2l2ZSBtb3JlIHRoYW4gb25lIC0tb3JpZ2luIG9wdGlvbnMuIgorCQlvcmlnaW5fb3ZlcnJpZGU9eWVzCisJCW9yaWdpbj0iJDEiCisJCTs7CisJLXV8LS11cGxvYWQtcGFjaykKKwkJc2hpZnQKKwkJdXBsb2FkX3BhY2s9Ii0tdXBsb2FkLXBhY2s9JDEiIDs7CisJLS1kZXB0aCkKKwkJc2hpZnQKKwkJZGVwdGg9Ii0tZGVwdGg9JDEiIDs7CisJLS0pCisJCXNoaWZ0CisJCWJyZWFrIDs7CisJKikKKwkJdXNhZ2UgOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworcmVwbz0iJDEiCit0ZXN0IC1uICIkcmVwbyIgfHwKKyAgICBkaWUgJ3lvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLicKKworIyAtLWJhcmUgaW1wbGllcyAtLW5vLWNoZWNrb3V0IGFuZCAtLW5vLXNlcGFyYXRlLXJlbW90ZQoraWYgdGVzdCB5ZXMgPSAiJGJhcmUiCit0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJG9yaWdpbl9vdmVycmlkZSIKKwl0aGVuCisJCWRpZSAnLS1iYXJlIGFuZCAtLW9yaWdpbiAkb3JpZ2luIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4nCisJZmkKKwlub19jaGVja291dD15ZXMKKwl1c2Vfc2VwYXJhdGVfcmVtb3RlPQorZmkKKworaWYgdGVzdCAteiAiJG9yaWdpbiIKK3RoZW4KKwlvcmlnaW49b3JpZ2luCitmaQorCisjIFR1cm4gdGhlIHNvdXJjZSBpbnRvIGFuIGFic29sdXRlIHBhdGggaWYKKyMgaXQgaXMgbG9jYWwKK2lmIGJhc2U9JChnZXRfcmVwb19iYXNlICIkcmVwbyIpOyB0aGVuCisJcmVwbz0iJGJhc2UiCisJaWYgdGVzdCAteiAiJGRlcHRoIgorCXRoZW4KKwkJbG9jYWw9eWVzCisJZmkKK2VsaWYgdGVzdCAtZiAiJHJlcG8iCit0aGVuCisJY2FzZSAiJHJlcG8iIGluIC8qKSA7OyAqKSByZXBvPSIkUFdELyRyZXBvIiA7OyBlc2FjCitmaQorCisjIERlY2lkZSB0aGUgZGlyZWN0b3J5IG5hbWUgb2YgdGhlIG5ldyByZXBvc2l0b3J5CitpZiB0ZXN0IC1uICIkMiIKK3RoZW4KKwlkaXI9IiQyIgorCXRlc3QgJCMgPSAyIHx8IGRpZSAiZXhjZXNzIHBhcmFtZXRlciB0byBnaXQtY2xvbmUiCitlbHNlCisJIyBEZXJpdmUgb25lIGZyb20gdGhlIHJlcG9zaXRvcnkgbmFtZQorCSMgVHJ5IHVzaW5nICJodW1hbmlzaCIgcGFydCBvZiBzb3VyY2UgcmVwbyBpZiB1c2VyIGRpZG4ndCBzcGVjaWZ5IG9uZQorCWlmIHRlc3QgLWYgIiRyZXBvIgorCXRoZW4KKwkJIyBDbG9uaW5nIGZyb20gYSBidW5kbGUKKwkJZGlyPSQoZWNobyAiJHJlcG8iIHwgc2VkIC1lICdzfC8qXC5idW5kbGUkfHwnIC1lICdzfC4qL3x8ZycpCisJZWxzZQorCQlkaXI9JChlY2hvICIkcmVwbyIgfAorCQkJc2VkIC1lICdzfC8kfHwnIC1lICdzfDoqLypcLmdpdCR8fCcgLWUgJ3N8LipbLzpdfHxnJykKKwlmaQorZmkKKworWyAtZSAiJGRpciIgXSAmJiBkaWUgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSAnJGRpcicgYWxyZWFkeSBleGlzdHMuIgorWyB5ZXMgPSAiJGJhcmUiIF0gJiYgdW5zZXQgR0lUX1dPUktfVFJFRQorWyAtbiAiJEdJVF9XT1JLX1RSRUUiIF0gJiYgWyAtZSAiJEdJVF9XT1JLX1RSRUUiIF0gJiYKK2RpZSAid29ya2luZyB0cmVlICckR0lUX1dPUktfVFJFRScgYWxyZWFkeSBleGlzdHMuIgorRD0KK1c9CitjbGVhbnVwKCkgeworCXRlc3QgLXogIiREIiAmJiBybSAtcmYgIiRkaXIiCisJdGVzdCAteiAiJFciICYmIHRlc3QgLW4gIiRHSVRfV09SS19UUkVFIiAmJiBybSAtcmYgIiRHSVRfV09SS19UUkVFIgorCWNkIC4uCisJdGVzdCAtbiAiJEQiICYmIHJtIC1yZiAiJEQiCisJdGVzdCAtbiAiJFciICYmIHJtIC1yZiAiJFciCisJZXhpdCAkZXJyCit9Cit0cmFwICdlcnI9JD87IGNsZWFudXAnIDAKK21rZGlyIC1wICIkZGlyIiAmJiBEPSQoY2QgIiRkaXIiICYmIHB3ZCkgfHwgdXNhZ2UKK3Rlc3QgLW4gIiRHSVRfV09SS19UUkVFIiAmJiBta2RpciAtcCAiJEdJVF9XT1JLX1RSRUUiICYmCitXPSQoY2QgIiRHSVRfV09SS19UUkVFIiAmJiBwd2QpICYmIEdJVF9XT1JLX1RSRUU9IiRXIiAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQoraWYgdGVzdCB5ZXMgPSAiJGJhcmUiIHx8IHRlc3QgLW4gIiRHSVRfV09SS19UUkVFIjsgdGhlbgorCUdJVF9ESVI9IiREIgorZWxzZQorCUdJVF9ESVI9IiRELy5naXQiCitmaSAmJgorZXhwb3J0IEdJVF9ESVIgJiYKK0dJVF9DT05GSUc9IiRHSVRfRElSL2NvbmZpZyIgZ2l0LWluaXQgJHF1aWV0ICR7dGVtcGxhdGUrIiR0ZW1wbGF0ZSJ9IHx8IHVzYWdlCisKK2lmIHRlc3QgLW4gIiRiYXJlIgordGhlbgorCUdJVF9DT05GSUc9IiRHSVRfRElSL2NvbmZpZyIgZ2l0IGNvbmZpZyBjb3JlLmJhcmUgdHJ1ZQorZmkKKworaWYgdGVzdCAtbiAiJHJlZmVyZW5jZSIKK3RoZW4KKwlyZWZfZ2l0PQorCWlmIHRlc3QgLWQgIiRyZWZlcmVuY2UiCisJdGhlbgorCQlpZiB0ZXN0IC1kICIkcmVmZXJlbmNlLy5naXQvb2JqZWN0cyIKKwkJdGhlbgorCQkJcmVmX2dpdD0iJHJlZmVyZW5jZS8uZ2l0IgorCQllbGlmIHRlc3QgLWQgIiRyZWZlcmVuY2Uvb2JqZWN0cyIKKwkJdGhlbgorCQkJcmVmX2dpdD0iJHJlZmVyZW5jZSIKKwkJZmkKKwlmaQorCWlmIHRlc3QgLW4gIiRyZWZfZ2l0IgorCXRoZW4KKwkJcmVmX2dpdD0kKGNkICIkcmVmX2dpdCIgJiYgcHdkKQorCQllY2hvICIkcmVmX2dpdC9vYmplY3RzIiA+IiRHSVRfRElSL29iamVjdHMvaW5mby9hbHRlcm5hdGVzIgorCQkoCisJCQlHSVRfRElSPSIkcmVmX2dpdCIgZ2l0IGZvci1lYWNoLXJlZiBcCisJCQkJLS1mb3JtYXQ9JyUob2JqZWN0bmFtZSkgJSgqb2JqZWN0bmFtZSknCisJCSkgfAorCQl3aGlsZSByZWFkIGEgYgorCQlkbworCQkJdGVzdCAteiAiJGEiIHx8CisJCQlnaXQgdXBkYXRlLXJlZiAicmVmcy9yZWZlcmVuY2UtdG1wLyRhIiAiJGEiCisJCQl0ZXN0IC16ICIkYiIgfHwKKwkJCWdpdCB1cGRhdGUtcmVmICJyZWZzL3JlZmVyZW5jZS10bXAvJGIiICIkYiIKKwkJZG9uZQorCWVsc2UKKwkJZGllICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJHJlZmVyZW5jZScgaXMgbm90IGEgbG9jYWwgZGlyZWN0b3J5LiIKKwlmaQorZmkKKworcm0gLWYgIiRHSVRfRElSL0NMT05FX0hFQUQiCisKKyMgV2UgZG8gbG9jYWwgbWFnaWMgb25seSB3aGVuIHRoZSB1c2VyIHRlbGxzIHVzIHRvLgorY2FzZSAiJGxvY2FsIiBpbgoreWVzKQorCSggY2QgIiRyZXBvL29iamVjdHMiICkgfHwKKwkJZGllICJjYW5ub3QgY2hkaXIgdG8gbG9jYWwgJyRyZXBvL29iamVjdHMnLiIKKworCWlmIHRlc3QgIiRsb2NhbF9zaGFyZWQiID0geWVzCisJdGhlbgorCQlta2RpciAtcCAiJEdJVF9ESVIvb2JqZWN0cy9pbmZvIgorCQllY2hvICIkcmVwby9vYmplY3RzIiA+PiIkR0lUX0RJUi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKwllbHNlCisJCWNwaW9fcXVpZXRfZmxhZz0iIgorCQljcGlvIC0taGVscCAyPiYxIHwgZ3JlcCAtLSAtLXF1aWV0ID4vZGV2L251bGwgJiYgXAorCQkJY3Bpb19xdWlldF9mbGFnPS0tcXVpZXQKKwkJbD0gJiYKKwkJaWYgdGVzdCAiJHVzZV9sb2NhbF9oYXJkbGluayIgPSB5ZXMKKwkJdGhlbgorCQkJIyBTZWUgaWYgd2UgY2FuIGhhcmRsaW5rIGFuZCBkcm9wICJsIiBpZiBub3QuCisJCQlzYW1wbGVfZmlsZT0kKGNkICIkcmVwbyIgJiYgXAorCQkJCSAgICAgIGZpbmQgb2JqZWN0cyAtdHlwZSBmIC1wcmludCB8IHNlZCAtZSAxcSkKKwkJCSMgb2JqZWN0cyBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBiZSBlbXB0eSBiZWNhdXNlCisJCQkjIHdlIGFyZSBjbG9uaW5nIQorCQkJdGVzdCAtZiAiJHJlcG8vJHNhbXBsZV9maWxlIiB8fAorCQkJCWRpZSAiZmF0YWw6IGNhbm5vdCBjbG9uZSBlbXB0eSByZXBvc2l0b3J5IgorCQkJaWYgbG4gIiRyZXBvLyRzYW1wbGVfZmlsZSIgIiRHSVRfRElSL29iamVjdHMvc2FtcGxlIiAyPi9kZXYvbnVsbAorCQkJdGhlbgorCQkJCXJtIC1mICIkR0lUX0RJUi9vYmplY3RzL3NhbXBsZSIKKwkJCQlsPWwKKwkJCWVsaWYgdGVzdCAtbiAiJGxvY2FsX2V4cGxpY2l0bHlfYXNrZWRfZm9yIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICJXYXJuaW5nOiAtbCBhc2tlZCBidXQgY2Fubm90IGhhcmRsaW5rIHRvICRyZXBvIgorCQkJZmkKKwkJZmkgJiYKKwkJY2QgIiRyZXBvIiAmJgorCQkjIENyZWF0ZSBkaXJzIHVzaW5nIHVtYXNrIGFuZCBwZXJtaXNzaW9ucyBhbmQgZGVzdGluYXRpb24KKwkJZmluZCBvYmplY3RzIC10eXBlIGQgLXByaW50IHwgKGNkICIkR0lUX0RJUiIgJiYgeGFyZ3MgbWtkaXIgLXApICYmCisJCSMgQ29weSBleGlzdGluZyAwNDQ0IHBlcm1pc3Npb25zIG9uIGNvbnRlbnQKKwkJZmluZCBvYmplY3RzICEgLXR5cGUgZCAtcHJpbnQgfCBjcGlvICRjcGlvX3F1aWV0X2ZsYWcgLXB1bWQkbCAiJEdJVF9ESVIvIiB8fCBcCisJCQlleGl0IDEKKwlmaQorCWdpdC1scy1yZW1vdGUgIiRyZXBvIiA+IiRHSVRfRElSL0NMT05FX0hFQUQiIHx8IGV4aXQgMQorCTs7CisqKQorCWNhc2UgIiRyZXBvIiBpbgorCXJzeW5jOi8vKikKKwkJY2FzZSAiJGRlcHRoIiBpbgorCQkiIikgOzsKKwkJKikgZGllICJzaGFsbG93IG92ZXIgcnN5bmMgbm90IHN1cHBvcnRlZCIgOzsKKwkJZXNhYworCQlyc3luYyAkcXVpZXQgLWF2IC0taWdub3JlLWV4aXN0aW5nICBcCisJCQktLWV4Y2x1ZGUgaW5mbyAiJHJlcG8vb2JqZWN0cy8iICIkR0lUX0RJUi9vYmplY3RzLyIgfHwKKwkJZXhpdAorCQkjIExvb2sgYXQgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgZm9yIHJzeW5jIC0tIGh0dHAgd2lsbAorCQkjIHN1cHBvcnQgaXQgbmF0aXZlbHkgYW5kIGdpdCBuYXRpdmUgb25lcyB3aWxsIGRvIGl0IG9uIHRoZQorCQkjIHJlbW90ZSBlbmQuICBOb3QgaGF2aW5nIHRoYXQgZmlsZSBpcyBub3QgYSBjcmltZS4KKwkJcnN5bmMgLXEgIiRyZXBvL29iamVjdHMvaW5mby9hbHRlcm5hdGVzIiBcCisJCQkiJEdJVF9ESVIvVE1QX0FMVCIgMj4vZGV2L251bGwgfHwKKwkJCXJtIC1mICIkR0lUX0RJUi9UTVBfQUxUIgorCQlpZiB0ZXN0IC1mICIkR0lUX0RJUi9UTVBfQUxUIgorCQl0aGVuCisJCSAgICAoIGNkICIkRCIgJiYKKwkJICAgICAgLiBnaXQtcGFyc2UtcmVtb3RlICYmCisJCSAgICAgIHJlc29sdmVfYWx0ZXJuYXRlcyAiJHJlcG8iIDwiJEdJVF9ESVIvVE1QX0FMVCIgKSB8CisJCSAgICB3aGlsZSByZWFkIGFsdAorCQkgICAgZG8KKwkJCWNhc2UgIiRhbHQiIGluICdiYWQgYWx0ZXJuYXRlOiAnKikgZGllICIkYWx0Ijs7IGVzYWMKKwkJCWNhc2UgIiRxdWlldCIgaW4KKwkJCScnKQllY2hvID4mMiAiR2V0dGluZyBhbHRlcm5hdGU6ICRhbHQiIDs7CisJCQllc2FjCisJCQlyc3luYyAkcXVpZXQgLWF2IC0taWdub3JlLWV4aXN0aW5nICBcCisJCQkgICAgLS1leGNsdWRlIGluZm8gIiRhbHQiICIkR0lUX0RJUi9vYmplY3RzIiB8fCBleGl0CisJCSAgICBkb25lCisJCSAgICBybSAtZiAiJEdJVF9ESVIvVE1QX0FMVCIKKwkJZmkKKwkJZ2l0LWxzLXJlbW90ZSAiJHJlcG8iID4iJEdJVF9ESVIvQ0xPTkVfSEVBRCIgfHwgZXhpdCAxCisJCTs7CisJaHR0cHM6Ly8qfGh0dHA6Ly8qfGZ0cDovLyopCisJCWNhc2UgIiRkZXB0aCIgaW4KKwkJIiIpIDs7CisJCSopIGRpZSAic2hhbGxvdyBvdmVyIGh0dHAgb3IgZnRwIG5vdCBzdXBwb3J0ZWQiIDs7CisJCWVzYWMKKwkJaWYgdGVzdCAteiAiQEBOT19DVVJMQEAiCisJCXRoZW4KKwkJCWNsb25lX2R1bWJfaHR0cCAiJHJlcG8iICIkRCIKKwkJZWxzZQorCQkJZGllICJodHRwIHRyYW5zcG9ydCBub3Qgc3VwcG9ydGVkLCByZWJ1aWxkIEdpdCB3aXRoIGN1cmwgc3VwcG9ydCIKKwkJZmkKKwkJOzsKKwkqKQorCQlpZiBbIC1mICIkcmVwbyIgXSA7IHRoZW4KKwkJCWdpdCBidW5kbGUgdW5idW5kbGUgIiRyZXBvIiA+ICIkR0lUX0RJUi9DTE9ORV9IRUFEIiB8fAorCQkJZGllICJ1bmJ1bmRsZSBmcm9tICckcmVwbycgZmFpbGVkLiIKKwkJZWxzZQorCQkJY2FzZSAiJHVwbG9hZF9wYWNrIiBpbgorCQkJJycpIGdpdC1mZXRjaC1wYWNrIC0tYWxsIC1rICRxdWlldCAkZGVwdGggJG5vX3Byb2dyZXNzICIkcmVwbyI7OworCQkJKikgZ2l0LWZldGNoLXBhY2sgLS1hbGwgLWsgXAorCQkJCSRxdWlldCAiJHVwbG9hZF9wYWNrIiAkZGVwdGggJG5vX3Byb2dyZXNzICIkcmVwbyIgOzsKKwkJCWVzYWMgPiIkR0lUX0RJUi9DTE9ORV9IRUFEIiB8fAorCQkJZGllICJmZXRjaC1wYWNrIGZyb20gJyRyZXBvJyBmYWlsZWQuIgorCQlmaQorCQk7OworCWVzYWMKKwk7OworZXNhYwordGVzdCAtZCAiJEdJVF9ESVIvcmVmcy9yZWZlcmVuY2UtdG1wIiAmJiBybSAtZnIgIiRHSVRfRElSL3JlZnMvcmVmZXJlbmNlLXRtcCIKKworaWYgdGVzdCAtZiAiJEdJVF9ESVIvQ0xPTkVfSEVBRCIKK3RoZW4KKwkjIFJlYWQgZ2l0LWZldGNoLXBhY2sgLWsgb3V0cHV0IGFuZCBzdG9yZSB0aGUgcmVtb3RlIGJyYW5jaGVzLgorCWlmIFsgLW4gIiR1c2Vfc2VwYXJhdGVfcmVtb3RlIiBdCisJdGhlbgorCQlicmFuY2hfdG9wPSJyZW1vdGVzLyRvcmlnaW4iCisJZWxzZQorCQlicmFuY2hfdG9wPSJoZWFkcyIKKwlmaQorCXRhZ190b3A9InRhZ3MiCisJd2hpbGUgcmVhZCBzaGExIG5hbWUKKwlkbworCQljYXNlICIkbmFtZSIgaW4KKwkJKidee30nKQorCQkJY29udGludWUgOzsKKwkJSEVBRCkKKwkJCWRlc3RuYW1lPSJSRU1PVEVfSEVBRCIgOzsKKwkJcmVmcy9oZWFkcy8qKQorCQkJZGVzdG5hbWU9InJlZnMvJGJyYW5jaF90b3AvJHtuYW1lI3JlZnMvaGVhZHMvfSIgOzsKKwkJcmVmcy90YWdzLyopCisJCQlkZXN0bmFtZT0icmVmcy8kdGFnX3RvcC8ke25hbWUjcmVmcy90YWdzL30iIDs7CisJCSopCisJCQljb250aW51ZSA7OworCQllc2FjCisJCWdpdCB1cGRhdGUtcmVmIC1tICJjbG9uZTogZnJvbSAkcmVwbyIgIiRkZXN0bmFtZSIgIiRzaGExIiAiIgorCWRvbmUgPCAiJEdJVF9ESVIvQ0xPTkVfSEVBRCIKK2ZpCisKK2lmIHRlc3QgLW4gIiRXIjsgdGhlbgorCWNkICIkVyIgfHwgZXhpdAorZWxzZQorCWNkICIkRCIgfHwgZXhpdAorZmkKKworaWYgdGVzdCAteiAiJGJhcmUiCit0aGVuCisJIyBhIG5vbi1iYXJlIHJlcG9zaXRvcnkgaXMgYWx3YXlzIGluIHNlcGFyYXRlLXJlbW90ZSBsYXlvdXQKKwlyZW1vdGVfdG9wPSJyZWZzL3JlbW90ZXMvJG9yaWdpbiIKKwloZWFkX3NoYTE9CisJdGVzdCAhIC1yICIkR0lUX0RJUi9SRU1PVEVfSEVBRCIgfHwgaGVhZF9zaGExPSQoY2F0ICIkR0lUX0RJUi9SRU1PVEVfSEVBRCIpCisJY2FzZSAiJGhlYWRfc2hhMSIgaW4KKwkncmVmOiByZWZzLycqKQorCQkjIFVoLW9oLCB0aGUgcmVtb3RlIHRvbGQgdXMgKGh0dHAgdHJhbnNwb3J0IGRvbmUgYWdhaW5zdAorCQkjIG5ldyBzdHlsZSByZXBvc2l0b3J5IHdpdGggYSBzeW1yZWYgSEVBRCkuCisJCSMgSWRlYWxseSB3ZSBzaG91bGQgc2tpcCB0aGUgZ3Vlc3N3b3JrIGJ1dCBmb3Igbm93CisJCSMgb3B0IGZvciBtaW5pbXVtIGNoYW5nZS4KKwkJaGVhZF9zaGExPSQoZXhwciAieiRoZWFkX3NoYTEiIDogJ3pyZWY6IHJlZnMvaGVhZHMvXCguKlwpJykKKwkJaGVhZF9zaGExPSQoY2F0ICIkR0lUX0RJUi8kcmVtb3RlX3RvcC8kaGVhZF9zaGExIikKKwkJOzsKKwllc2FjCisKKwkjIFRoZSBuYW1lIHVuZGVyICRyZW1vdGVfdG9wIHRoZSByZW1vdGUgSEVBRCBzZWVtcyB0byBwb2ludCBhdC4KKwloZWFkX3BvaW50c19hdD0kKAorCQkoCisJCQl0ZXN0IC1mICIkR0lUX0RJUi8kcmVtb3RlX3RvcC9tYXN0ZXIiICYmIGVjaG8gIm1hc3RlciIKKwkJCWNkICIkR0lUX0RJUi8kcmVtb3RlX3RvcCIgJiYKKwkJCWZpbmQgLiAtdHlwZSBmIC1wcmludCB8IHNlZCAtZSAncy9eXC5cLy8vJworCQkpIHwgKAorCQlkb25lPWYKKwkJd2hpbGUgcmVhZCBuYW1lCisJCWRvCisJCQl0ZXN0IHQgPSAkZG9uZSAmJiBjb250aW51ZQorCQkJYnJhbmNoX3RpcD0kKGNhdCAiJEdJVF9ESVIvJHJlbW90ZV90b3AvJG5hbWUiKQorCQkJaWYgdGVzdCAiJGhlYWRfc2hhMSIgPSAiJGJyYW5jaF90aXAiCisJCQl0aGVuCisJCQkJZWNobyAiJG5hbWUiCisJCQkJZG9uZT10CisJCQlmaQorCQlkb25lCisJCSkKKwkpCisKKwkjIFVwc3RyZWFtIFVSTAorCWdpdCBjb25maWcgcmVtb3RlLiIkb3JpZ2luIi51cmwgIiRyZXBvIiAmJgorCisJIyBTZXQgdXAgdGhlIG1hcHBpbmdzIHRvIHRyYWNrIHRoZSByZW1vdGUgYnJhbmNoZXMuCisJZ2l0IGNvbmZpZyByZW1vdGUuIiRvcmlnaW4iLmZldGNoIFwKKwkJIityZWZzL2hlYWRzLyo6JHJlbW90ZV90b3AvKiIgJ14kJyAmJgorCisJIyBXcml0ZSBvdXQgcmVtb3RlLiRvcmlnaW4gY29uZmlnLCBhbmQgdXBkYXRlIG91ciAiJGhlYWRfcG9pbnRzX2F0Ii4KKwljYXNlICIkaGVhZF9wb2ludHNfYXQiIGluCisJPyopCisJCSMgTG9jYWwgZGVmYXVsdCBicmFuY2gKKwkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEICJyZWZzL2hlYWRzLyRoZWFkX3BvaW50c19hdCIgJiYKKworCQkjIFRyYWNraW5nIGJyYW5jaCBmb3IgdGhlIHByaW1hcnkgYnJhbmNoIGF0IHRoZSByZW1vdGUuCisJCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRoZWFkX3NoYTEiICYmCisKKwkJcm0gLWYgInJlZnMvcmVtb3Rlcy8kb3JpZ2luL0hFQUQiCisJCWdpdCBzeW1ib2xpYy1yZWYgInJlZnMvcmVtb3Rlcy8kb3JpZ2luL0hFQUQiIFwKKwkJCSJyZWZzL3JlbW90ZXMvJG9yaWdpbi8kaGVhZF9wb2ludHNfYXQiICYmCisKKwkJZ2l0IGNvbmZpZyBicmFuY2guIiRoZWFkX3BvaW50c19hdCIucmVtb3RlICIkb3JpZ2luIiAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC4iJGhlYWRfcG9pbnRzX2F0Ii5tZXJnZSAicmVmcy9oZWFkcy8kaGVhZF9wb2ludHNfYXQiCisJCTs7CisJJycpCisJCWlmIHRlc3QgLXogIiRoZWFkX3NoYTEiCisJCXRoZW4KKwkJCSMgU291cmNlIGhhZCBub25leGlzdGVudCByZWYgaW4gSEVBRAorCQkJZWNobyA+JjIgIldhcm5pbmc6IFJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC4iCisJCQlub19jaGVja291dD10CisJCWVsc2UKKwkJCSMgU291cmNlIGhhZCBkZXRhY2hlZCBIRUFEIHBvaW50aW5nIG5vd2hlcmUKKwkJCWdpdCB1cGRhdGUtcmVmIC0tbm8tZGVyZWYgSEVBRCAiJGhlYWRfc2hhMSIgJiYKKwkJCXJtIC1mICJyZWZzL3JlbW90ZXMvJG9yaWdpbi9IRUFEIgorCQlmaQorCQk7OworCWVzYWMKKworCWNhc2UgIiRub19jaGVja291dCIgaW4KKwknJykKKwkJdGVzdCAieiRxdWlldCIgPSB6ICYmIHRlc3QgInokbm9fcHJvZ3Jlc3MiID0geiAmJiB2PS12IHx8IHY9CisJCWdpdCByZWFkLXRyZWUgLW0gLXUgJHYgSEVBRCBIRUFECisJZXNhYworZmkKK3JtIC1mICIkR0lUX0RJUi9DTE9ORV9IRUFEIiAiJEdJVF9ESVIvUkVNT1RFX0hFQUQiCisKK3RyYXAgLSAwCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1jb21taXQuc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC1jb21taXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTM0NTA1YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWNvbW1pdC5zaApAQCAtMCwwICsxLDYzOSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBMaW51cyBUb3J2YWxkcworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKworVVNBR0U9J1stYSB8IC0taW50ZXJhY3RpdmVdIFstc10gWy12XSBbLS1uby12ZXJpZnldIFstbSA8bWVzc2FnZT4gfCAtRiA8bG9nZmlsZT4gfCAoLUN8LWMpIDxjb21taXQ+IHwgLS1hbWVuZF0gWy11XSBbLWVdIFstLWF1dGhvciA8YXV0aG9yPl0gWy0tdGVtcGxhdGUgPGZpbGU+XSBbWy1pIHwgLW9dIDxwYXRoPi4uLl0nCitTVUJESVJFQ1RPUllfT0s9WWVzCitPUFRJT05TX1NQRUM9CisuIGdpdC1zaC1zZXR1cAorcmVxdWlyZV93b3JrX3RyZWUKKworZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4vZGV2L251bGwgMj4mMSB8fCBpbml0aWFsX2NvbW1pdD10CisKK2Nhc2UgIiQwIiBpbgorKnN0YXR1cykKKwlzdGF0dXNfb25seT10CisJOzsKKypjb21taXQpCisJc3RhdHVzX29ubHk9CisJOzsKK2VzYWMKKworcmVmdXNlX3BhcnRpYWwgKCkgeworCWVjaG8gPiYyICIkMSIKKwllY2hvID4mMiAiWW91IG1pZ2h0IGhhdmUgbWVhbnQgdG8gc2F5ICdnaXQgY29tbWl0IC1pIHBhdGhzLi4uJywgcGVyaGFwcz8iCisJZXhpdCAxCit9CisKK1RNUF9JTkRFWD0KK1RISVNfSU5ERVg9IiR7R0lUX0lOREVYX0ZJTEU6LSRHSVRfRElSL2luZGV4fSIKK05FWFRfSU5ERVg9IiRHSVRfRElSL25leHQtaW5kZXgkJCIKK3JtIC1mICIkTkVYVF9JTkRFWCIKK3NhdmVfaW5kZXggKCkgeworCWNwIC1wICIkVEhJU19JTkRFWCIgIiRORVhUX0lOREVYIgorfQorCitydW5fc3RhdHVzICgpIHsKKwkjIElmIFRNUF9JTkRFWCBpcyBkZWZpbmVkLCB0aGF0IG1lYW5zIHdlIGFyZSBkb2luZworCSMgIi0tb25seSIgcGFydGlhbCBjb21taXQsIGFuZCB0aGF0IGluZGV4IGZpbGUgaXMgdXNlZAorCSMgdG8gYnVpbGQgdGhlIHRyZWUgZm9yIHRoZSBjb21taXQuICBPdGhlcndpc2UsIGlmCisJIyBORVhUX0lOREVYIGV4aXN0cywgdGhhdCBpcyB0aGUgaW5kZXggZmlsZSB1c2VkIHRvCisJIyBtYWtlIHRoZSBjb21taXQuICBPdGhlcndpc2Ugd2UgYXJlIHVzaW5nIGFzLWlzIGNvbW1pdAorCSMgc28gdGhlIHJlZ3VsYXIgaW5kZXggZmlsZSBpcyB3aGF0IHdlIHVzZSB0byBjb21wYXJlLgorCWlmIHRlc3QgJycgIT0gIiRUTVBfSU5ERVgiCisJdGhlbgorCQlHSVRfSU5ERVhfRklMRT0iJFRNUF9JTkRFWCIKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFCisJZWxpZiB0ZXN0IC1mICIkTkVYVF9JTkRFWCIKKwl0aGVuCisJCUdJVF9JTkRFWF9GSUxFPSIkTkVYVF9JTkRFWCIKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFCisJZmkKKworCWlmIHRlc3QgIiRzdGF0dXNfb25seSIgPSAidCIgfHwgdGVzdCAiJHVzZV9zdGF0dXNfY29sb3IiID0gInQiOyB0aGVuCisJCWNvbG9yPQorCWVsc2UKKwkJY29sb3I9LS1ub2NvbG9yCisJZmkKKwlnaXQgcnVuc3RhdHVzICR7Y29sb3J9IFwKKwkJJHt2ZXJib3NlOistLXZlcmJvc2V9IFwKKwkJJHthbWVuZDorLS1hbWVuZH0gXAorCQkke3VudHJhY2tlZF9maWxlczorLS11bnRyYWNrZWR9Cit9CisKK3RyYXAgJworCXRlc3QgLXogIiRUTVBfSU5ERVgiIHx8IHsKKwkJdGVzdCAtZiAiJFRNUF9JTkRFWCIgJiYgcm0gLWYgIiRUTVBfSU5ERVgiCisJfQorCXJtIC1mICIkTkVYVF9JTkRFWCIKKycgMAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbW1hbmQgbGluZSBhcmd1bWVudCBwYXJzaW5nIGFuZCBzYW5pdHkgY2hlY2tpbmcKKworYWxsPQorYWxzbz0KK2FsbG93X2VtcHR5PWYKK2ludGVyYWN0aXZlPQorb25seT0KK2xvZ2ZpbGU9Cit1c2VfY29tbWl0PQorYW1lbmQ9CitlZGl0X2ZsYWc9Citub19lZGl0PQorbG9nX2dpdmVuPQorbG9nX21lc3NhZ2U9Cit2ZXJpZnk9dAorcXVpZXQ9Cit2ZXJib3NlPQorc2lnbm9mZj0KK2ZvcmNlX2F1dGhvcj0KK29ubHlfaW5jbHVkZV9hc3N1bWVkPQordW50cmFja2VkX2ZpbGVzPQordGVtcGxhdGVmaWxlPSIkKGdpdCBjb25maWcgY29tbWl0LnRlbXBsYXRlKSIKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktRnwtLUZ8LWZ8LS1mfC0tZml8LS1maWx8LS1maWxlKQorCQljYXNlICIkIyIgaW4gMSkgdXNhZ2UgOzsgZXNhYworCQlzaGlmdAorCQlub19lZGl0PXQKKwkJbG9nX2dpdmVuPXQkbG9nX2dpdmVuCisJCWxvZ2ZpbGU9IiQxIgorCQk7OworCS1GKnwtZiopCisJCW5vX2VkaXQ9dAorCQlsb2dfZ2l2ZW49dCRsb2dfZ2l2ZW4KKwkJbG9nZmlsZT0iJHsxIy1bRmZdfSIKKwkJOzsKKwktLUY9KnwtLWY9KnwtLWZpPSp8LS1maWw9KnwtLWZpbGU9KikKKwkJbm9fZWRpdD10CisJCWxvZ19naXZlbj10JGxvZ19naXZlbgorCQlsb2dmaWxlPSIkezEjKj19IgorCQk7OworCS1hfC0tYXwtLWFsfC0tYWxsKQorCQlhbGw9dAorCQk7OworCS0tYWxsb3wtLWFsbG93fC0tYWxsb3ctfC0tYWxsb3ctZXwtLWFsbG93LWVtfC0tYWxsb3ctZW1wfFwKKwktLWFsbG93LWVtcHR8LS1hbGxvdy1lbXB0eSkKKwkJYWxsb3dfZW1wdHk9dAorCQk7OworCS0tYXU9KnwtLWF1dD0qfC0tYXV0aD0qfC0tYXV0aG89KnwtLWF1dGhvcj0qKQorCQlmb3JjZV9hdXRob3I9IiR7MSMqPX0iCisJCTs7CisJLS1hdXwtLWF1dHwtLWF1dGh8LS1hdXRob3wtLWF1dGhvcikKKwkJY2FzZSAiJCMiIGluIDEpIHVzYWdlIDs7IGVzYWMKKwkJc2hpZnQKKwkJZm9yY2VfYXV0aG9yPSIkMSIKKwkJOzsKKwktZXwtLWV8LS1lZHwtLWVkaXwtLWVkaXQpCisJCWVkaXRfZmxhZz10CisJCTs7CisJLWl8LS1pfC0taW58LS1pbmN8LS1pbmNsfC0taW5jbHV8LS1pbmNsdWR8LS1pbmNsdWRlKQorCQlhbHNvPXQKKwkJOzsKKwktLWludHwtLWludGV8LS1pbnRlcnwtLWludGVyYXwtLWludGVyYWN8LS1pbnRlcmFjdHwtLWludGVyYWN0aXxcCisJLS1pbnRlcmFjdGl2fC0taW50ZXJhY3RpdmUpCisJCWludGVyYWN0aXZlPXQKKwkJOzsKKwktb3wtLW98LS1vbnwtLW9ubHwtLW9ubHkpCisJCW9ubHk9dAorCQk7OworCS1tfC0tbXwtLW1lfC0tbWVzfC0tbWVzc3wtLW1lc3NhfC0tbWVzc2FnfC0tbWVzc2FnZSkKKwkJY2FzZSAiJCMiIGluIDEpIHVzYWdlIDs7IGVzYWMKKwkJc2hpZnQKKwkJbG9nX2dpdmVuPW0kbG9nX2dpdmVuCisJCWxvZ19tZXNzYWdlPSIke2xvZ19tZXNzYWdlOiske2xvZ19tZXNzYWdlfQorCit9JDEiCisJCW5vX2VkaXQ9dAorCQk7OworCS1tKikKKwkJbG9nX2dpdmVuPW0kbG9nX2dpdmVuCisJCWxvZ19tZXNzYWdlPSIke2xvZ19tZXNzYWdlOiske2xvZ19tZXNzYWdlfQorCit9JHsxIy1tfSIKKwkJbm9fZWRpdD10CisJCTs7CisJLS1tPSp8LS1tZT0qfC0tbWVzPSp8LS1tZXNzPSp8LS1tZXNzYT0qfC0tbWVzc2FnPSp8LS1tZXNzYWdlPSopCisJCWxvZ19naXZlbj1tJGxvZ19naXZlbgorCQlsb2dfbWVzc2FnZT0iJHtsb2dfbWVzc2FnZTorJHtsb2dfbWVzc2FnZX0KKworfSR7MSMqPX0iCisJCW5vX2VkaXQ9dAorCQk7OworCS1ufC0tbnwtLW5vfC0tbm8tfC0tbm8tdnwtLW5vLXZlfC0tbm8tdmVyfC0tbm8tdmVyaXwtLW5vLXZlcmlmfFwKKwktLW5vLXZlcmlmeSkKKwkJdmVyaWZ5PQorCQk7OworCS0tYXwtLWFtfC0tYW1lfC0tYW1lbnwtLWFtZW5kKQorCQlhbWVuZD10CisJCXVzZV9jb21taXQ9SEVBRAorCQk7OworCS1jKQorCQljYXNlICIkIyIgaW4gMSkgdXNhZ2UgOzsgZXNhYworCQlzaGlmdAorCQlsb2dfZ2l2ZW49dCRsb2dfZ2l2ZW4KKwkJdXNlX2NvbW1pdD0iJDEiCisJCW5vX2VkaXQ9CisJCTs7CisJLS1yZWU9KnwtLXJlZWQ9KnwtLXJlZWRpPSp8LS1yZWVkaXQ9KnwtLXJlZWRpdC09KnwtLXJlZWRpdC1tPSp8XAorCS0tcmVlZGl0LW1lPSp8LS1yZWVkaXQtbWVzPSp8LS1yZWVkaXQtbWVzcz0qfC0tcmVlZGl0LW1lc3NhPSp8XAorCS0tcmVlZGl0LW1lc3NhZz0qfC0tcmVlZGl0LW1lc3NhZ2U9KikKKwkJbG9nX2dpdmVuPXQkbG9nX2dpdmVuCisJCXVzZV9jb21taXQ9IiR7MSMqPX0iCisJCW5vX2VkaXQ9CisJCTs7CisJLS1yZWV8LS1yZWVkfC0tcmVlZGl8LS1yZWVkaXR8LS1yZWVkaXQtfC0tcmVlZGl0LW18LS1yZWVkaXQtbWV8XAorCS0tcmVlZGl0LW1lc3wtLXJlZWRpdC1tZXNzfC0tcmVlZGl0LW1lc3NhfC0tcmVlZGl0LW1lc3NhZ3xcCisJLS1yZWVkaXQtbWVzc2FnZSkKKwkJY2FzZSAiJCMiIGluIDEpIHVzYWdlIDs7IGVzYWMKKwkJc2hpZnQKKwkJbG9nX2dpdmVuPXQkbG9nX2dpdmVuCisJCXVzZV9jb21taXQ9IiQxIgorCQlub19lZGl0PQorCQk7OworCS1DKQorCQljYXNlICIkIyIgaW4gMSkgdXNhZ2UgOzsgZXNhYworCQlzaGlmdAorCQlsb2dfZ2l2ZW49dCRsb2dfZ2l2ZW4KKwkJdXNlX2NvbW1pdD0iJDEiCisJCW5vX2VkaXQ9dAorCQk7OworCS0tcmV1PSp8LS1yZXVzPSp8LS1yZXVzZT0qfC0tcmV1c2UtPSp8LS1yZXVzZS1tPSp8LS1yZXVzZS1tZT0qfFwKKwktLXJldXNlLW1lcz0qfC0tcmV1c2UtbWVzcz0qfC0tcmV1c2UtbWVzc2E9KnwtLXJldXNlLW1lc3NhZz0qfFwKKwktLXJldXNlLW1lc3NhZ2U9KikKKwkJbG9nX2dpdmVuPXQkbG9nX2dpdmVuCisJCXVzZV9jb21taXQ9IiR7MSMqPX0iCisJCW5vX2VkaXQ9dAorCQk7OworCS0tcmV1fC0tcmV1c3wtLXJldXNlfC0tcmV1c2UtfC0tcmV1c2UtbXwtLXJldXNlLW1lfC0tcmV1c2UtbWVzfFwKKwktLXJldXNlLW1lc3N8LS1yZXVzZS1tZXNzYXwtLXJldXNlLW1lc3NhZ3wtLXJldXNlLW1lc3NhZ2UpCisJCWNhc2UgIiQjIiBpbiAxKSB1c2FnZSA7OyBlc2FjCisJCXNoaWZ0CisJCWxvZ19naXZlbj10JGxvZ19naXZlbgorCQl1c2VfY29tbWl0PSIkMSIKKwkJbm9fZWRpdD10CisJCTs7CisJLXN8LS1zfC0tc2l8LS1zaWd8LS1zaWdufC0tc2lnbm98LS1zaWdub2Z8LS1zaWdub2ZmKQorCQlzaWdub2ZmPXQKKwkJOzsKKwktdHwtLXR8LS10ZXwtLXRlbXwtLXRlbXB8LS10ZW1wbHwtLXRlbXBsYXwtLXRlbXBsYXR8LS10ZW1wbGF0ZSkKKwkJY2FzZSAiJCMiIGluIDEpIHVzYWdlIDs7IGVzYWMKKwkJc2hpZnQKKwkJdGVtcGxhdGVmaWxlPSIkMSIKKwkJbm9fZWRpdD0KKwkJOzsKKwktcXwtLXF8LS1xdXwtLXF1aXwtLXF1aWV8LS1xdWlldCkKKwkJcXVpZXQ9dAorCQk7OworCS12fC0tdnwtLXZlfC0tdmVyfC0tdmVyYnwtLXZlcmJvfC0tdmVyYm9zfC0tdmVyYm9zZSkKKwkJdmVyYm9zZT10CisJCTs7CisJLXV8LS11fC0tdW58LS11bnR8LS11bnRyfC0tdW50cmF8LS11bnRyYWN8LS11bnRyYWNrfC0tdW50cmFja2V8XAorCS0tdW50cmFja2VkfC0tdW50cmFja2VkLXwtLXVudHJhY2tlZC1mfC0tdW50cmFja2VkLWZpfC0tdW50cmFja2VkLWZpbHxcCisJLS11bnRyYWNrZWQtZmlsZXwtLXVudHJhY2tlZC1maWxlcykKKwkJdW50cmFja2VkX2ZpbGVzPXQKKwkJOzsKKwktLSkKKwkJc2hpZnQKKwkJYnJlYWsKKwkJOzsKKwktKikKKwkJdXNhZ2UKKwkJOzsKKwkqKQorCQlicmVhaworCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorY2FzZSAiJGVkaXRfZmxhZyIgaW4gdCkgbm9fZWRpdD0gOzsgZXNhYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNhbml0eSBjaGVjayBvcHRpb25zCisKK2Nhc2UgIiRhbWVuZCwkaW5pdGlhbF9jb21taXQiIGluCit0LHQpCisJZGllICJZb3UgZG8gbm90IGhhdmUgYW55dGhpbmcgdG8gYW1lbmQuIiA7OwordCwpCisJaWYgWyAtZiAiJEdJVF9ESVIvTUVSR0VfSEVBRCIgXTsgdGhlbgorCQlkaWUgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iCisJZmkgOzsKK2VzYWMKKworY2FzZSAiJGxvZ19naXZlbiIgaW4KK3R0KikKKwlkaWUgIk9ubHkgb25lIG9mIC1jLy1DLy1GIGNhbiBiZSB1c2VkLiIgOzsKKyp0bSp8Km10KikKKwlkaWUgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi4iIDs7Citlc2FjCisKK2Nhc2UgIiQjLCRhbHNvLCRvbmx5LCRhbWVuZCIgaW4KKyosdCx0LCopCisJZGllICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5IGNhbiBiZSB1c2VkLiIgOzsKKzAsdCwsKiB8IDAsLHQsKQorCWRpZSAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIiA7OworMCwsdCx0KQorCW9ubHlfaW5jbHVkZV9hc3N1bWVkPSIjIENsZXZlci4uLiBhbWVuZGluZyB0aGUgbGFzdCBvbmUgd2l0aCBkaXJ0eSBpbmRleC4iIDs7CiswLCwsKikKKwk7OworKiwsLCopCisJb25seV9pbmNsdWRlX2Fzc3VtZWQ9IiMgRXhwbGljaXQgcGF0aHMgc3BlY2lmaWVkIHdpdGhvdXQgLWkgb3IgLW87IGFzc3VtaW5nIC0tb25seSBwYXRocy4uLiIKKwlhbHNvPQorCTs7Citlc2FjCit1bnNldCBvbmx5CitjYXNlICIkYWxsLCRpbnRlcmFjdGl2ZSwkYWxzbywkIyIgaW4KKyp0LCp0LCopCisJZGllICJDYW5ub3QgdXNlIC1hLCAtLWludGVyYWN0aXZlIG9yIC1pIGF0IHRoZSBzYW1lIHRpbWUuIiA7OwordCwsLFsxLTldKikKKwlkaWUgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iIDs7CissdCwsWzEtOV0qKQorCWRpZSAiUGF0aHMgd2l0aCAtLWludGVyYWN0aXZlIGRvZXMgbm90IG1ha2Ugc2Vuc2UuIiA7OworLCx0LDApCisJZGllICJObyBwYXRocyB3aXRoIC1pIGRvZXMgbm90IG1ha2Ugc2Vuc2UuIiA7OworZXNhYworCitpZiB0ZXN0ICEgLXogIiR0ZW1wbGF0ZWZpbGUiICYmIHRlc3QgLXogIiRsb2dfZ2l2ZW4iCit0aGVuCisJaWYgdGVzdCAhIC1mICIkdGVtcGxhdGVmaWxlIgorCXRoZW4KKwkJZGllICJDb21taXQgdGVtcGxhdGUgZmlsZSBkb2VzIG5vdCBleGlzdC4iCisJZmkKK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUHJlcGFyZSBpbmRleCB0byBoYXZlIGEgdHJlZSB0byBiZSBjb21taXR0ZWQKKworY2FzZSAiJGFsbCwkYWxzbyIgaW4KK3QsKQorCWlmIHRlc3QgISAtZiAiJFRISVNfSU5ERVgiCisJdGhlbgorCQlkaWUgJ25vdGhpbmcgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQgZmlsZTEgZmlsZTIiIHRvIGluY2x1ZGUgZm9yIGNvbW1pdCknCisJZmkKKwlzYXZlX2luZGV4ICYmCisJKAorCQljZF90b190b3BsZXZlbCAmJgorCQlHSVRfSU5ERVhfRklMRT0iJE5FWFRfSU5ERVgiICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSAteiB8CisJCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLXogLS1zdGRpbgorCSkgfHwgZXhpdAorCTs7CissdCkKKwlzYXZlX2luZGV4ICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAtLSAiJEAiID4vZGV2L251bGwgfHwgZXhpdAorCisJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLXogLS0gIiRAIiAgfAorCSgKKwkJY2RfdG9fdG9wbGV2ZWwgJiYKKwkJR0lUX0lOREVYX0ZJTEU9IiRORVhUX0lOREVYIiAmJgorCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAteiAtLXN0ZGluCisJKSB8fCBleGl0CisJOzsKKywpCisJaWYgdGVzdCAiJGludGVyYWN0aXZlIiA9IHQ7IHRoZW4KKwkJZ2l0IGFkZCAtLWludGVyYWN0aXZlIHx8IGV4aXQKKwlmaQorCWNhc2UgIiQjIiBpbgorCTApCisJCTs7ICMgY29tbWl0IGFzLWlzCisJKikKKwkJaWYgdGVzdCAtZiAiJEdJVF9ESVIvTUVSR0VfSEVBRCIKKwkJdGhlbgorCQkJcmVmdXNlX3BhcnRpYWwgIkNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIG1lcmdlLiIKKwkJZmkKKworCQlUTVBfSU5ERVg9IiRHSVRfRElSL3RtcC1pbmRleCQkIgorCQlXPQorCQl0ZXN0IC16ICIkaW5pdGlhbF9jb21taXQiICYmIFc9LS13aXRoLXRyZWU9SEVBRAorCQljb21taXRfb25seT0kKGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggJFcgLS0gIiRAIikgfHwgZXhpdAorCisJCSMgQnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYW5kIHVwZGF0ZSB0aGUgcmVhbCBpbmRleAorCQkjIHRoZSBzYW1lIHdheS4KKwkJaWYgdGVzdCAteiAiJGluaXRpYWxfY29tbWl0IgorCQl0aGVuCisJCQlHSVRfSU5ERVhfRklMRT0iJFRISVNfSU5ERVgiIFwKKwkJCWdpdCByZWFkLXRyZWUgLS1pbmRleC1vdXRwdXQ9IiRUTVBfSU5ERVgiIC1pIC1tIEhFQUQKKwkJZWxzZQorCQkJcm0gLWYgIiRUTVBfSU5ERVgiCisJCWZpIHx8IGV4aXQKKworCQlwcmludGYgJyVzXG4nICIkY29tbWl0X29ubHkiIHwKKwkJR0lUX0lOREVYX0ZJTEU9IiRUTVBfSU5ERVgiIFwKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSAtLXN0ZGluICYmCisKKwkJc2F2ZV9pbmRleCAmJgorCQlwcmludGYgJyVzXG4nICIkY29tbWl0X29ubHkiIHwKKwkJKAorCQkJR0lUX0lOREVYX0ZJTEU9IiRORVhUX0lOREVYIgorCQkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFCisJCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIC0tc3RkaW4KKwkJKSB8fCBleGl0CisJCTs7CisJZXNhYworCTs7Citlc2FjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSWYgd2UgZG8gYXMtaXMgY29tbWl0LCB0aGUgaW5kZXggZmlsZSB3aWxsIGJlIFRISVNfSU5ERVgsCisjIG90aGVyd2lzZSBORVhUX0lOREVYIGFmdGVyIHdlIG1ha2UgdGhpcyBjb21taXQuICBXZSBsZWF2ZQorIyB0aGUgaW5kZXggYXMgaXMgaWYgd2UgYWJvcnQuCisKK2lmIHRlc3QgLWYgIiRORVhUX0lOREVYIgordGhlbgorCVVTRV9JTkRFWD0iJE5FWFRfSU5ERVgiCitlbHNlCisJVVNFX0lOREVYPSIkVEhJU19JTkRFWCIKK2ZpCisKK2Nhc2UgIiRzdGF0dXNfb25seSIgaW4KK3QpCisJIyBUaGlzIHdpbGwgc2lsZW50bHkgZmFpbCBpbiBhIHJlYWQtb25seSByZXBvc2l0b3J5LCB3aGljaCBpcworCSMgd2hhdCB3ZSB3YW50LgorCUdJVF9JTkRFWF9GSUxFPSIkVVNFX0lOREVYIiBnaXQgdXBkYXRlLWluZGV4IC1xIC0tdW5tZXJnZWQgLS1yZWZyZXNoCisJcnVuX3N0YXR1cworCWV4aXQgJD8KKwk7OworJycpCisJR0lUX0lOREVYX0ZJTEU9IiRVU0VfSU5ERVgiIGdpdCB1cGRhdGUtaW5kZXggLXEgLS1yZWZyZXNoIHx8IGV4aXQKKwk7OworZXNhYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdyYWIgY29tbWl0IG1lc3NhZ2UsIHdyaXRlIG91dCB0cmVlIGFuZCBtYWtlIGNvbW1pdC4KKworaWYgdGVzdCB0ID0gIiR2ZXJpZnkiICYmIHRlc3QgLXggIiRHSVRfRElSIi9ob29rcy9wcmUtY29tbWl0Cit0aGVuCisgICAgR0lUX0lOREVYX0ZJTEU9IiR7VE1QX0lOREVYOi0ke1VTRV9JTkRFWH19IiAiJEdJVF9ESVIiL2hvb2tzL3ByZS1jb21taXQgXAorICAgIHx8IGV4aXQKK2ZpCisKK2lmIHRlc3QgIiRsb2dfbWVzc2FnZSIgIT0gJycKK3RoZW4KKwlwcmludGYgJyVzXG4nICIkbG9nX21lc3NhZ2UiCitlbGlmIHRlc3QgIiRsb2dmaWxlIiAhPSAiIgordGhlbgorCWlmIHRlc3QgIiRsb2dmaWxlIiA9IC0KKwl0aGVuCisJCXRlc3QgLXQgMCAmJgorCQllY2hvID4mMiAiKHJlYWRpbmcgbG9nIG1lc3NhZ2UgZnJvbSBzdGFuZGFyZCBpbnB1dCkiCisJCWNhdAorCWVsc2UKKwkJY2F0IDwiJGxvZ2ZpbGUiCisJZmkKK2VsaWYgdGVzdCAiJHVzZV9jb21taXQiICE9ICIiCit0aGVuCisJZW5jb2Rpbmc9JChnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgfHwgZWNobyBVVEYtOCkKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1yYXcgLS1lbmNvZGluZz0iJGVuY29kaW5nIiAiJHVzZV9jb21taXQiIHwKKwlzZWQgLWUgJzEsL14kL2QnIC1lICdzL14gICAgLy8nCitlbGlmIHRlc3QgLWYgIiRHSVRfRElSL01FUkdFX01TRyIKK3RoZW4KKwljYXQgIiRHSVRfRElSL01FUkdFX01TRyIKK2VsaWYgdGVzdCAtZiAiJEdJVF9ESVIvU1FVQVNIX01TRyIKK3RoZW4KKwljYXQgIiRHSVRfRElSL1NRVUFTSF9NU0ciCitlbGlmIHRlc3QgIiR0ZW1wbGF0ZWZpbGUiICE9ICIiCit0aGVuCisJY2F0ICIkdGVtcGxhdGVmaWxlIgorZmkgfCBnaXQgc3RyaXBzcGFjZSA+IiRHSVRfRElSIi9DT01NSVRfRURJVE1TRworCitjYXNlICIkc2lnbm9mZiIgaW4KK3QpCisJc2lnbj0kKGdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8IHNlZCAtZSAnCisJCXMvPi4qLz4vCisJCXMvXi9TaWduZWQtb2ZmLWJ5OiAvCisJCScpCisJYmxhbmtfYmVmb3JlX3NpZ25vZmY9CisJdGFpbCAtbiAxICIkR0lUX0RJUiIvQ09NTUlUX0VESVRNU0cgfAorCWdyZXAgJ1NpZ25lZC1vZmYtYnk6JyA+L2Rldi9udWxsIHx8IGJsYW5rX2JlZm9yZV9zaWdub2ZmPScKKycKKwl0YWlsIC1uIDEgIiRHSVRfRElSIi9DT01NSVRfRURJVE1TRyB8CisJZ3JlcCAiJHNpZ24iJCA+L2Rldi9udWxsIHx8CisJcHJpbnRmICclcyVzXG4nICIkYmxhbmtfYmVmb3JlX3NpZ25vZmYiICIkc2lnbiIgXAorCQk+PiIkR0lUX0RJUiIvQ09NTUlUX0VESVRNU0cKKwk7OworZXNhYworCitpZiB0ZXN0IC1mICIkR0lUX0RJUi9NRVJHRV9IRUFEIiAmJiB0ZXN0IC16ICIkbm9fZWRpdCI7IHRoZW4KKwllY2hvICIjIgorCWVjaG8gIiMgSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBNRVJHRS4iCisJZWNobyAiIyBJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlIgorCXByaW50ZiAnJXNcbicgIiMJJEdJVF9ESVIvTUVSR0VfSEVBRCIKKwllY2hvICIjIGFuZCB0cnkgYWdhaW4iCisJZWNobyAiIyIKK2ZpID4+IiRHSVRfRElSIi9DT01NSVRfRURJVE1TRworCisjIEF1dGhvcgoraWYgdGVzdCAnJyAhPSAiJHVzZV9jb21taXQiCit0aGVuCisJZXZhbCAiJChnZXRfYXV0aG9yX2lkZW50X2Zyb21fY29tbWl0ICIkdXNlX2NvbW1pdCIpIgorCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTCBHSVRfQVVUSE9SX0RBVEUKK2ZpCitpZiB0ZXN0ICcnICE9ICIkZm9yY2VfYXV0aG9yIgordGhlbgorCUdJVF9BVVRIT1JfTkFNRT0kKGV4cHIgInokZm9yY2VfYXV0aG9yIiA6ICd6XCguKlteIF1cKSAqPC4qJykgJiYKKwlHSVRfQVVUSE9SX0VNQUlMPSQoZXhwciAieiRmb3JjZV9hdXRob3IiIDogJy4qXCg8LipcKScpICYmCisJdGVzdCAnJyAhPSAiJEdJVF9BVVRIT1JfTkFNRSIgJiYKKwl0ZXN0ICcnICE9ICIkR0lUX0FVVEhPUl9FTUFJTCIgfHwKKwlkaWUgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCisJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMCitmaQorCitQQVJFTlRTPSItcCBIRUFEIgoraWYgdGVzdCAteiAiJGluaXRpYWxfY29tbWl0IgordGhlbgorCXJsb2dhPSdjb21taXQnCisJaWYgWyAtZiAiJEdJVF9ESVIvTUVSR0VfSEVBRCIgXTsgdGhlbgorCQlybG9nYT0nY29tbWl0IChtZXJnZSknCisJCVBBUkVOVFM9Ii1wIEhFQUQgIiQoc2VkIC1lICdzL14vLXAgLycgIiRHSVRfRElSL01FUkdFX0hFQUQiKQorCWVsaWYgdGVzdCAtbiAiJGFtZW5kIjsgdGhlbgorCQlybG9nYT0nY29tbWl0IChhbWVuZCknCisJCVBBUkVOVFM9JChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfAorCQkJc2VkIC1uIC1lICcvXiQvcScgLWUgJ3MvXnBhcmVudCAvLXAgL3AnKQorCWZpCisJY3VycmVudD0iJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIgorZWxzZQorCWlmIFsgLXogIiQoZ2l0IGxzLWZpbGVzKSIgXTsgdGhlbgorCQllY2hvID4mMiAnbm90aGluZyB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCBmaWxlMSBmaWxlMiIgdG8gaW5jbHVkZSBmb3IgY29tbWl0KScKKwkJZXhpdCAxCisJZmkKKwlQQVJFTlRTPSIiCisJcmxvZ2E9J2NvbW1pdCAoaW5pdGlhbCknCisJY3VycmVudD0nJworZmkKK3NldF9yZWZsb2dfYWN0aW9uICIkcmxvZ2EiCisKK2lmIHRlc3QgLXogIiRub19lZGl0IgordGhlbgorCXsKKwkJZWNobyAiIgorCQllY2hvICIjIFBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4iCisJCWVjaG8gIiMgKENvbW1lbnQgbGluZXMgc3RhcnRpbmcgd2l0aCAnIycgd2lsbCBub3QgYmUgaW5jbHVkZWQpIgorCQl0ZXN0IC16ICIkb25seV9pbmNsdWRlX2Fzc3VtZWQiIHx8IGVjaG8gIiRvbmx5X2luY2x1ZGVfYXNzdW1lZCIKKwkJcnVuX3N0YXR1cworCX0gPj4iJEdJVF9ESVIiL0NPTU1JVF9FRElUTVNHCitlbHNlCisJIyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRvIGNvbW1pdAorCXJ1bl9zdGF0dXMgPi9kZXYvbnVsbAorZmkKK2Nhc2UgIiRhbGxvd19lbXB0eSwkPywkUEFSRU5UUyIgaW4KK3QsKiB8ID8sMCwqIHwgPywqLC1wJyAnPyotcCcgJz8qKQorCSMgYW4gZXhwbGljaXQgLS1hbGxvdy1lbXB0eSwgb3IgYSBtZXJnZSBjb21taXQgY2FuIHJlY29yZCB0aGUKKwkjIHNhbWUgdHJlZSBhcyBpdHMgcGFyZW50LiAgT3RoZXJ3aXNlIGhhdmluZyBjb21taXRhYmxlIHBhdGhzCisJIyBpcyByZXF1aXJlZC4KKwk7OworKikKKwlybSAtZiAiJEdJVF9ESVIvQ09NTUlUX0VESVRNU0ciICIkR0lUX0RJUi9TUVVBU0hfTVNHIgorCXVzZV9zdGF0dXNfY29sb3I9dAorCXJ1bl9zdGF0dXMKKwlleGl0IDEKK2VzYWMKKworY2FzZSAiJG5vX2VkaXQiIGluCisnJykKKwlnaXQgdmFyIEdJVF9BVVRIT1JfSURFTlQgPiAvZGV2L251bGwgIHx8IGRpZQorCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+IC9kZXYvbnVsbCAgfHwgZGllCisJZ2l0X2VkaXRvciAiJEdJVF9ESVIvQ09NTUlUX0VESVRNU0ciCisJOzsKK2VzYWMKKworY2FzZSAiJHZlcmlmeSIgaW4KK3QpCisJaWYgdGVzdCAteCAiJEdJVF9ESVIiL2hvb2tzL2NvbW1pdC1tc2cKKwl0aGVuCisJCSIkR0lUX0RJUiIvaG9va3MvY29tbWl0LW1zZyAiJEdJVF9ESVIiL0NPTU1JVF9FRElUTVNHIHx8IGV4aXQKKwlmaQorZXNhYworCitpZiB0ZXN0IC16ICIkbm9fZWRpdCIKK3RoZW4KKyAgICBzZWQgLWUgJworICAgICAgICAvXmRpZmYgLS1naXQgYVwvLioveworCSAgICBzLy8vCisJICAgIHEKKwl9CisJL14jL2QKKyAgICAnICIkR0lUX0RJUiIvQ09NTUlUX0VESVRNU0cKK2Vsc2UKKyAgICBjYXQgIiRHSVRfRElSIi9DT01NSVRfRURJVE1TRworZmkgfAorZ2l0IHN0cmlwc3BhY2UgPiIkR0lUX0RJUiIvQ09NTUlUX01TRworCisjIFRlc3Qgd2hldGhlciB0aGUgY29tbWl0IG1lc3NhZ2UgaGFzIGFueSBjb250ZW50IHdlIGRpZG4ndCBzdXBwbHkuCitoYXZlX2NvbW1pdG1zZz0KK2dyZXAgLXYgLWkgJ15TaWduZWQtb2ZmLWJ5JyAiJEdJVF9ESVIiL0NPTU1JVF9NU0cgfAorCWdpdCBzdHJpcHNwYWNlID4gIiRHSVRfRElSIi9DT01NSVRfQkFSRU1TRworCisjIElzIHRoZSBjb21taXQgbWVzc2FnZSB0b3RhbGx5IGVtcHR5PworaWYgdGVzdCAtcyAiJEdJVF9ESVIiL0NPTU1JVF9CQVJFTVNHCit0aGVuCisJaWYgdGVzdCAiJHRlbXBsYXRlZmlsZSIgIT0gIiIKKwl0aGVuCisJCSMgVGVzdCB3aGV0aGVyIHRoaXMgaXMganVzdCB0aGUgdW5hbHRlcmVkIHRlbXBsYXRlLgorCQlpZiBjbnQ9YHNlZCAtZSAnL14jL2QnIDwgIiR0ZW1wbGF0ZWZpbGUiIHwKKwkJCWdpdCBzdHJpcHNwYWNlIHwKKwkJCWRpZmYgIiRHSVRfRElSIi9DT01NSVRfQkFSRU1TRyAtIHwKKwkJCXdjIC1sYCAmJgorCQkgICB0ZXN0IDAgLWx0ICRjbnQKKwkJdGhlbgorCQkJaGF2ZV9jb21taXRtc2c9dAorCQlmaQorCWVsc2UKKwkJIyBObyB0ZW1wbGF0ZSwgc28gdGhlIGNvbnRlbnQgaW4gdGhlIGNvbW1pdCBtZXNzYWdlIG11c3QKKwkJIyBoYXZlIGNvbWUgZnJvbSB0aGUgdXNlci4KKwkJaGF2ZV9jb21taXRtc2c9dAorCWZpCitmaQorCitybSAtZiAiJEdJVF9ESVIiL0NPTU1JVF9CQVJFTVNHCisKK2lmIHRlc3QgIiRoYXZlX2NvbW1pdG1zZyIgPSAidCIKK3RoZW4KKwlpZiB0ZXN0IC16ICIkVE1QX0lOREVYIgorCXRoZW4KKwkJdHJlZT0kKEdJVF9JTkRFWF9GSUxFPSIkVVNFX0lOREVYIiBnaXQgd3JpdGUtdHJlZSkKKwllbHNlCisJCXRyZWU9JChHSVRfSU5ERVhfRklMRT0iJFRNUF9JTkRFWCIgZ2l0IHdyaXRlLXRyZWUpICYmCisJCXJtIC1mICIkVE1QX0lOREVYIgorCWZpICYmCisJY29tbWl0PSQoZ2l0IGNvbW1pdC10cmVlICR0cmVlICRQQVJFTlRTIDwiJEdJVF9ESVIvQ09NTUlUX01TRyIpICYmCisJcmxvZ209JChzZWQgLWUgMXEgIiRHSVRfRElSIi9DT01NSVRfTVNHKSAmJgorCWdpdCB1cGRhdGUtcmVmIC1tICIkR0lUX1JFRkxPR19BQ1RJT046ICRybG9nbSIgSEVBRCAkY29tbWl0ICIkY3VycmVudCIgJiYKKwlybSAtZiAtLSAiJEdJVF9ESVIvTUVSR0VfSEVBRCIgIiRHSVRfRElSL01FUkdFX01TRyIgJiYKKwlpZiB0ZXN0IC1mICIkTkVYVF9JTkRFWCIKKwl0aGVuCisJCW12ICIkTkVYVF9JTkRFWCIgIiRUSElTX0lOREVYIgorCWVsc2UKKwkJOiA7IyBoYXBweQorCWZpCitlbHNlCisJZWNobyA+JjIgIiogbm8gY29tbWl0IG1lc3NhZ2U/ICBhYm9ydGluZyBjb21taXQuIgorCWZhbHNlCitmaQorcmV0PSIkPyIKK3JtIC1mICIkR0lUX0RJUi9DT01NSVRfTVNHIiAiJEdJVF9ESVIvQ09NTUlUX0VESVRNU0ciICIkR0lUX0RJUi9TUVVBU0hfTVNHIgorCitjZF90b190b3BsZXZlbAorCitnaXQgcmVyZXJlCisKK2lmIHRlc3QgIiRyZXQiID0gMAordGhlbgorCWdpdCBnYyAtLWF1dG8KKwlpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvcG9zdC1jb21taXQKKwl0aGVuCisJCSIkR0lUX0RJUiIvaG9va3MvcG9zdC1jb21taXQKKwlmaQorCWlmIHRlc3QgLXogIiRxdWlldCIKKwl0aGVuCisJCWNvbW1pdD1gZ2l0IGRpZmYtdHJlZSAtLWFsd2F5cyAtLXNob3J0c3RhdCAtLXByZXR0eT0iZm9ybWF0OiVoOiAlcyJcCisJCSAgICAgICAtLWFiYnJldiAtLXN1bW1hcnkgLS1yb290IEhFQUQgLS1gCisJCWVjaG8gIkNyZWF0ZWQke2luaXRpYWxfY29tbWl0OisgaW5pdGlhbH0gY29tbWl0ICRjb21taXQiCisJZmkKK2ZpCisKK2V4aXQgIiRyZXQiCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1mZXRjaC5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWZldGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1NDA3MDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC1mZXRjaC5zaApAQCAtMCwwICsxLDM3OSBAQAorIyEvYmluL3NoCisjCisKK1VTQUdFPSc8ZmV0Y2gtb3B0aW9ucz4gPHJlcG9zaXRvcnk+IDxyZWZzcGVjPi4uLicKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKKy4gZ2l0LXNoLXNldHVwCitzZXRfcmVmbG9nX2FjdGlvbiAiZmV0Y2ggJCoiCitjZF90b190b3BsZXZlbCA7IyBwcm9iYWJseSB1bm5lY2Vzc2FyeS4uLgorCisuIGdpdC1wYXJzZS1yZW1vdGUKK194NDA9J1swLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl0nCitfeDQwPSIkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwIgorCitMRj0nCisnCitJRlM9IiRMRiIKKworbm9fdGFncz0KK3RhZ3M9CithcHBlbmQ9Citmb3JjZT0KK3ZlcmJvc2U9Cit1cGRhdGVfaGVhZF9vaz0KK2V4ZWM9CitrZWVwPQorc2hhbGxvd19kZXB0aD0KK25vX3Byb2dyZXNzPQordGVzdCAtdCAxIHx8IG5vX3Byb2dyZXNzPS0tbm8tcHJvZ3Jlc3MKK3F1aWV0PQord2hpbGUgdGVzdCAkIyAhPSAwCitkbworCWNhc2UgIiQxIiBpbgorCS1hfC0tYXwtLWFwfC0tYXBwfC0tYXBwZXwtLWFwcGVufC0tYXBwZW5kKQorCQlhcHBlbmQ9dAorCQk7OworCS0tdXBsfC0tdXBsb3wtLXVwbG9hfC0tdXBsb2FkfC0tdXBsb2FkLXwtLXVwbG9hZC1wfFwKKwktLXVwbG9hZC1wYXwtLXVwbG9hZC1wYWN8LS11cGxvYWQtcGFjaykKKwkJc2hpZnQKKwkJZXhlYz0iLS11cGxvYWQtcGFjaz0kMSIKKwkJOzsKKwktLXVwbD0qfC0tdXBsbz0qfC0tdXBsb2E9KnwtLXVwbG9hZD0qfFwKKwktLXVwbG9hZC09KnwtLXVwbG9hZC1wPSp8LS11cGxvYWQtcGE9KnwtLXVwbG9hZC1wYWM9KnwtLXVwbG9hZC1wYWNrPSopCisJCWV4ZWM9LS11cGxvYWQtcGFjaz0kKGV4cHIgInokMSIgOiAnei1bXj1dKj1cKC4qXCknKQorCQlzaGlmdAorCQk7OworCS1mfC0tZnwtLWZvfC0tZm9yfC0tZm9yY3wtLWZvcmNlKQorCQlmb3JjZT10CisJCTs7CisJLXR8LS10fC0tdGF8LS10YWd8LS10YWdzKQorCQl0YWdzPXQKKwkJOzsKKwktbnwtLW58LS1ub3wtLW5vLXwtLW5vLXR8LS1uby10YXwtLW5vLXRhZ3wtLW5vLXRhZ3MpCisJCW5vX3RhZ3M9dAorCQk7OworCS11fC0tdXwtLXVwfC0tdXBkfC0tdXBkYXwtLXVwZGF0fC0tdXBkYXRlfC0tdXBkYXRlLXwtLXVwZGF0ZS1ofFwKKwktLXVwZGF0ZS1oZXwtLXVwZGF0ZS1oZWF8LS11cGRhdGUtaGVhZHwtLXVwZGF0ZS1oZWFkLXxcCisJLS11cGRhdGUtaGVhZC1vfC0tdXBkYXRlLWhlYWQtb2spCisJCXVwZGF0ZV9oZWFkX29rPXQKKwkJOzsKKwktcXwtLXF8LS1xdXwtLXF1aXwtLXF1aWV8LS1xdWlldCkKKwkJcXVpZXQ9LS1xdWlldAorCQk7OworCS12fC0tdmVyYm9zZSkKKwkJdmVyYm9zZT0iJHZlcmJvc2UiWWVzCisJCTs7CisJLWt8LS1rfC0ta2V8LS1rZWV8LS1rZWVwKQorCQlrZWVwPSctayAtaycKKwkJOzsKKwktLWRlcHRoPSopCisJCXNoYWxsb3dfZGVwdGg9Ii0tZGVwdGg9JChleHByICJ6JDEiIDogJ3otW149XSo9XCguKlwpJykiCisJCTs7CisJLS1kZXB0aCkKKwkJc2hpZnQKKwkJc2hhbGxvd19kZXB0aD0iLS1kZXB0aD0kMSIKKwkJOzsKKwktKikKKwkJdXNhZ2UKKwkJOzsKKwkqKQorCQlicmVhaworCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCitjYXNlICIkIyIgaW4KKzApCisJb3JpZ2luPSQoZ2V0X2RlZmF1bHRfcmVtb3RlKQorCXRlc3QgLW4gIiQoZ2V0X3JlbW90ZV91cmwgJHtvcmlnaW59KSIgfHwKKwkJZGllICJXaGVyZSBkbyB5b3Ugd2FudCB0byBmZXRjaCBmcm9tIHRvZGF5PyIKKwlzZXQgeCAkb3JpZ2luIDsgc2hpZnQgOzsKK2VzYWMKKworaWYgdGVzdCAteiAiJGV4ZWMiCit0aGVuCisJIyBObyBjb21tYW5kIGxpbmUgb3ZlcnJpZGUgYW5kIHdlIGhhdmUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHJlbW90ZS4KKwlleGVjPSItLXVwbG9hZC1wYWNrPSQoZ2V0X3VwbG9hZHBhY2sgJDEpIgorZmkKKworcmVtb3RlX25pY2s9IiQxIgorcmVtb3RlPSQoZ2V0X3JlbW90ZV91cmwgIiRAIikKK3JlZnM9CitycmVmPQorcnN5bmNfc2x1cnBlZF9vYmplY3RzPQorCitpZiB0ZXN0ICIiID0gIiRhcHBlbmQiCit0aGVuCisJOiA+IiRHSVRfRElSL0ZFVENIX0hFQUQiCitmaQorCisjIEdsb2JhbCB0aGF0IGlzIHJldXNlZCBsYXRlcgorbHNfcmVtb3RlX3Jlc3VsdD0kKGdpdCBscy1yZW1vdGUgJGV4ZWMgIiRyZW1vdGUiKSB8fAorCWRpZSAiQ2Fubm90IGdldCB0aGUgcmVwb3NpdG9yeSBzdGF0ZSBmcm9tICRyZW1vdGUiCisKK2FwcGVuZF9mZXRjaF9oZWFkICgpIHsKKwlmbGFncz0KKwl0ZXN0IC1uICIkdmVyYm9zZSIgJiYgZmxhZ3M9IiRmbGFncyRMRi12IgorCXRlc3QgLW4gIiRmb3JjZSRzaW5nbGVfZm9yY2UiICYmIGZsYWdzPSIkZmxhZ3MkTEYtZiIKKwlHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OIiBcCisJCWdpdCBmZXRjaC0tdG9vbCAkZmxhZ3MgYXBwZW5kLWZldGNoLWhlYWQgIiRAIgorfQorCisjIHVwZGF0aW5nIHRoZSBjdXJyZW50IEhFQUQgd2l0aCBnaXQtZmV0Y2ggaW4gYSBiYXJlCisjIHJlcG9zaXRvcnkgaXMgYWx3YXlzIGZpbmUuCitpZiB0ZXN0IC16ICIkdXBkYXRlX2hlYWRfb2siICYmIHRlc3QgJChpc19iYXJlX3JlcG9zaXRvcnkpID0gZmFsc2UKK3RoZW4KKwlvcmlnX2hlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgMj4vZGV2L251bGwpCitmaQorCisjIEFsbG93IC0tdGFncy8tLW5vdGFncyBmcm9tIHJlbW90ZS4kMS50YWdvcHQKK2Nhc2UgIiR0YWdzJG5vX3RhZ3MiIGluCisnJykKKwljYXNlICIkKGdpdCBjb25maWcgLS1nZXQgInJlbW90ZS4kMS50YWdvcHQiKSIgaW4KKwktLXRhZ3MpCisJCXRhZ3M9dCA7OworCS0tbm8tdGFncykKKwkJbm9fdGFncz10IDs7CisJZXNhYworZXNhYworCisjIElmIC0tdGFncyAoYW5kIGxhdGVyIC0taGVhZHMgb3IgLS1hbGwpIGlzIHNwZWNpZmllZCwgdGhlbiB3ZSBhcmUKKyMgbm90IHRhbGtpbmcgYWJvdXQgZGVmYXVsdHMgc3RvcmVkIGluIFB1bGw6IGxpbmUgb2YgcmVtb3RlcyBvcgorIyBicmFuY2hlcyBmaWxlLCBhbmQganVzdCBmZXRjaCB0aG9zZSBhbmQgcmVmc3BlY3MgZXhwbGljaXRseSBnaXZlbi4KKyMgT3RoZXJ3aXNlIHdlIGRvIHdoYXQgd2UgYWx3YXlzIGRpZC4KKworcmVmbGlzdD0kKGdldF9yZW1vdGVfcmVmc19mb3JfZmV0Y2ggIiRAIikKK2lmIHRlc3QgIiR0YWdzIgordGhlbgorCXRhZ2xpc3Q9YElGUz0nCScgJiYKKwkJICBlY2hvICIkbHNfcmVtb3RlX3Jlc3VsdCIgfAorCQkgIGdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3Rpbmc9cmVmcy90YWdzLyB8CisJICAgICAgICAgIHdoaWxlIHJlYWQgc2hhMSBuYW1lCisJCSAgZG8KKwkJCWVjaG8gIi4ke25hbWV9OiR7bmFtZX0iCisJCSAgZG9uZWAgfHwgZXhpdAorCWlmIHRlc3QgIiQjIiAtZ3QgMQorCXRoZW4KKwkJIyByZW1vdGUgVVJMIHBsdXMgZXhwbGljaXQgcmVmc3BlY3M7IHdlIG5lZWQgdG8gbWVyZ2UgdGhlbS4KKwkJcmVmbGlzdD0iJHJlZmxpc3QkTEYkdGFnbGlzdCIKKwllbHNlCisJCSMgTm8gZXhwbGljaXQgcmVmc3BlY3M7IGZldGNoIHRhZ3Mgb25seS4KKwkJcmVmbGlzdD0kdGFnbGlzdAorCWZpCitmaQorCitmZXRjaF9hbGxfYXRfb25jZSAoKSB7CisKKyAgZXZhbD0kKGVjaG8gIiQxIiB8IGdpdCBmZXRjaC0tdG9vbCBwYXJzZS1yZWZsaXN0ICItIikKKyAgZXZhbCAiJGV2YWwiCisKKyAgICAoIDogc3Vic2hlbGwgYmVjYXVzZSB3ZSBtdWNrIHdpdGggSUZTCisgICAgICBJRlM9IiAJJExGIgorICAgICAgKAorCWlmIHRlc3QgIiRyZW1vdGUiID0gLiA7IHRoZW4KKwkgICAgZ2l0IHNob3ctcmVmICRycmVmIHx8IGVjaG8gZmFpbGVkICIkcmVtb3RlIgorCWVsaWYgdGVzdCAtZiAiJHJlbW90ZSIgOyB0aGVuCisJICAgIHRlc3QgLW4gIiRzaGFsbG93X2RlcHRoIiAmJgorCQlkaWUgInNoYWxsb3cgY2xvbmUgd2l0aCBidW5kbGUgaXMgbm90IHN1cHBvcnRlZCIKKwkgICAgZ2l0IGJ1bmRsZSB1bmJ1bmRsZSAiJHJlbW90ZSIgJHJyZWYgfHwKKwkgICAgZWNobyBmYWlsZWQgIiRyZW1vdGUiCisJZWxzZQorCQlpZgl0ZXN0IC1kICIkcmVtb3RlIiAmJgorCisJCQkjIFRoZSByZW1vdGUgbWlnaHQgYmUgb3VyIGFsdGVybmF0ZS4gIFdpdGgKKwkJCSMgdGhpcyBvcHRpbWl6YXRpb24gd2Ugd2lsbCBieXBhc3MgZmV0Y2gtcGFjaworCQkJIyBhbHRvZ2V0aGVyLCB3aGljaCBtZWFucyB3ZSBjYW5ub3QgYmUgZG9pbmcKKwkJCSMgdGhlIHNoYWxsb3cgc3R1ZmYgYXQgYWxsLgorCQkJdGVzdCAhIC1mICIkR0lUX0RJUi9zaGFsbG93IiAmJgorCQkJdGVzdCAteiAiJHNoYWxsb3dfZGVwdGgiICYmCisKKwkJCSMgU2VlIGlmIGFsbCBvZiB3aGF0IHdlIGFyZSBnb2luZyB0byBmZXRjaCBhcmUKKwkJCSMgY29ubmVjdGVkIHRvIG91ciByZXBvc2l0b3J5J3MgdGlwcywgaW4gd2hpY2gKKwkJCSMgY2FzZSB3ZSBkbyBub3QgaGF2ZSB0byBkbyBhbnkgZmV0Y2guCisJCQl0aGVpcnM9JChlY2hvICIkbHNfcmVtb3RlX3Jlc3VsdCIgfCBcCisJCQkJZ2l0IGZldGNoLS10b29sIC1zIHBpY2stcnJlZiAiJHJyZWYiICItIikgJiYKKworCQkJIyBUaGlzIHdpbGwgYmFyZiB3aGVuICR0aGVpcnMgcmVhY2ggYW4gb2JqZWN0IHRoYXQKKwkJCSMgd2UgZG8gbm90IGhhdmUgaW4gb3VyIHJlcG9zaXRvcnkuICBPdGhlcndpc2UsCisJCQkjIHdlIGFscmVhZHkgaGF2ZSBldmVyeXRoaW5nIHRoZSBmZXRjaCB3b3VsZCBicmluZyBpbi4KKwkJCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgJHRoZWlycyAtLW5vdCAtLWFsbCBcCisJCQkJPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorCQl0aGVuCisJCQllY2hvICIkbHNfcmVtb3RlX3Jlc3VsdCIgfCBcCisJCQkJZ2l0IGZldGNoLS10b29sIHBpY2stcnJlZiAiJHJyZWYiICItIgorCQllbHNlCisJCQlmbGFncz0KKwkJCWNhc2UgJHZlcmJvc2UgaW4KKwkJCVllc1llcyopCisJCQkgICAgZmxhZ3M9Ii12IgorCQkJICAgIDs7CisJCQllc2FjCisJCQlnaXQtZmV0Y2gtcGFjayAtLXRoaW4gJGV4ZWMgJGtlZXAgJHNoYWxsb3dfZGVwdGggXAorCQkJCSRxdWlldCAkbm9fcHJvZ3Jlc3MgJGZsYWdzICIkcmVtb3RlIiAkcnJlZiB8fAorCQkJZWNobyBmYWlsZWQgIiRyZW1vdGUiCisJCWZpCisJZmkKKyAgICAgICkgfAorICAgICAgKAorCWZsYWdzPQorCXRlc3QgLW4gIiR2ZXJib3NlIiAmJiBmbGFncz0iJGZsYWdzIC12IgorCXRlc3QgLW4gIiRmb3JjZSIgJiYgZmxhZ3M9IiRmbGFncyAtZiIKKwlHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OIiBcCisJCWdpdCBmZXRjaC0tdG9vbCAkZmxhZ3MgbmF0aXZlLXN0b3JlIFwKKwkJCSIkcmVtb3RlIiAiJHJlbW90ZV9uaWNrIiAiJHJlZnMiCisgICAgICApCisgICAgKSB8fCBleGl0CisKK30KKworZmV0Y2hfcGVyX3JlZiAoKSB7CisgIHJlZmxpc3Q9IiQxIgorICByZWZzPQorICBycmVmPQorCisgIGZvciByZWYgaW4gJHJlZmxpc3QKKyAgZG8KKyAgICAgIHJlZnM9IiRyZWZzJExGJHJlZiIKKworICAgICAgIyBUaGVzZSBhcmUgcmVsYXRpdmUgcGF0aCBmcm9tICRHSVRfRElSLCB0eXBpY2FsbHkgc3RhcnRpbmcgYXQgcmVmcy8KKyAgICAgICMgYnV0IG1heSBiZSBIRUFECisgICAgICBpZiBleHByICJ6JHJlZiIgOiAnelwuJyA+L2Rldi9udWxsCisgICAgICB0aGVuCisJICBub3RfZm9yX21lcmdlPXQKKwkgIHJlZj0kKGV4cHIgInokcmVmIiA6ICd6XC5cKC4qXCknKQorICAgICAgZWxzZQorCSAgbm90X2Zvcl9tZXJnZT0KKyAgICAgIGZpCisgICAgICBpZiBleHByICJ6JHJlZiIgOiAneisnID4vZGV2L251bGwKKyAgICAgIHRoZW4KKwkgIHNpbmdsZV9mb3JjZT10CisJICByZWY9JChleHByICJ6JHJlZiIgOiAneitcKC4qXCknKQorICAgICAgZWxzZQorCSAgc2luZ2xlX2ZvcmNlPQorICAgICAgZmkKKyAgICAgIHJlbW90ZV9uYW1lPSQoZXhwciAieiRyZWYiIDogJ3pcKFteOl0qXCk6JykKKyAgICAgIGxvY2FsX25hbWU9JChleHByICJ6JHJlZiIgOiAnelteOl0qOlwoLipcKScpCisKKyAgICAgIHJyZWY9IiRycmVmJExGJHJlbW90ZV9uYW1lIgorCisgICAgICAjIFRoZXJlIGFyZSB0cmFuc3BvcnRzIHRoYXQgY2FuIGZldGNoIG9ubHkgb25lIGhlYWQgYXQgYSB0aW1lLi4uCisgICAgICBjYXNlICIkcmVtb3RlIiBpbgorICAgICAgaHR0cDovLyogfCBodHRwczovLyogfCBmdHA6Ly8qKQorCSAgdGVzdCAtbiAiJHNoYWxsb3dfZGVwdGgiICYmCisJCWRpZSAic2hhbGxvdyBjbG9uZSB3aXRoIGh0dHAgbm90IHN1cHBvcnRlZCIKKwkgIHByb3RvPSQoZXhwciAiJHJlbW90ZSIgOiAnXChbXjpdKlwpOicpCisJICBpZiBbIC1uICIkR0lUX1NTTF9OT19WRVJJRlkiIF07IHRoZW4KKwkgICAgICBjdXJsX2V4dHJhX2FyZ3M9Ii1rIgorCSAgZmkKKwkgIGlmIFsgLW4gIiRHSVRfQ1VSTF9GVFBfTk9fRVBTViIgLW8gXAorCQkiJChnaXQgY29uZmlnIC0tYm9vbCBodHRwLm5vRVBTVikiID0gdHJ1ZSBdOyB0aGVuCisJICAgICAgbm9lcHN2X29wdD0iLS1kaXNhYmxlLWVwc3YiCisJICBmaQorCisJICAjIEZpbmQgJHJlbW90ZV9uYW1lIGZyb20gbHMtcmVtb3RlIG91dHB1dC4KKwkgIGhlYWQ9JChlY2hvICIkbHNfcmVtb3RlX3Jlc3VsdCIgfCBcCisJCWdpdCBmZXRjaC0tdG9vbCAtcyBwaWNrLXJyZWYgIiRyZW1vdGVfbmFtZSIgIi0iKQorCSAgZXhwciAieiRoZWFkIiA6ICJ6JF94NDBcJCIgPi9kZXYvbnVsbCB8fAorCQlkaWUgIk5vIHN1Y2ggcmVmICRyZW1vdGVfbmFtZSBhdCAkcmVtb3RlIgorCSAgZWNobyA+JjIgIkZldGNoaW5nICRyZW1vdGVfbmFtZSBmcm9tICRyZW1vdGUgdXNpbmcgJHByb3RvIgorCSAgY2FzZSAiJHF1aWV0IiBpbiAnJykgdj0tdiA7OyAqKSB2PSA7OyBlc2FjCisJICBnaXQtaHR0cC1mZXRjaCAkdiAtYSAiJGhlYWQiICIkcmVtb3RlIiB8fCBleGl0CisJICA7OworICAgICAgcnN5bmM6Ly8qKQorCSAgdGVzdCAtbiAiJHNoYWxsb3dfZGVwdGgiICYmCisJCWRpZSAic2hhbGxvdyBjbG9uZSB3aXRoIHJzeW5jIG5vdCBzdXBwb3J0ZWQiCisJICBUTVBfSEVBRD0iJEdJVF9ESVIvVE1QX0hFQUQiCisJICByc3luYyAtTCAtcSAiJHJlbW90ZS8kcmVtb3RlX25hbWUiICIkVE1QX0hFQUQiIHx8IGV4aXQgMQorCSAgaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgVE1QX0hFQUQpCisJICBybSAtZiAiJFRNUF9IRUFEIgorCSAgY2FzZSAiJHF1aWV0IiBpbiAnJykgdj0tdiA7OyAqKSB2PSA7OyBlc2FjCisJICB0ZXN0ICIkcnN5bmNfc2x1cnBlZF9vYmplY3RzIiB8fCB7CisJICAgICAgcnN5bmMgLWEgJHYgLS1pZ25vcmUtZXhpc3RpbmcgLS1leGNsdWRlIGluZm8gXAorCQkgICIkcmVtb3RlL29iamVjdHMvIiAiJEdJVF9PQkpFQ1RfRElSRUNUT1JZLyIgfHwgZXhpdAorCisJICAgICAgIyBMb29rIGF0IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzIGZvciByc3luYyAtLSBodHRwIHdpbGwKKwkgICAgICAjIHN1cHBvcnQgaXQgbmF0aXZlbHkgYW5kIGdpdCBuYXRpdmUgb25lcyB3aWxsIGRvIGl0IG9uCisJICAgICAgIyB0aGUgcmVtb3RlIGVuZC4gIE5vdCBoYXZpbmcgdGhhdCBmaWxlIGlzIG5vdCBhIGNyaW1lLgorCSAgICAgIHJzeW5jIC1xICIkcmVtb3RlL29iamVjdHMvaW5mby9hbHRlcm5hdGVzIiBcCisJCSAgIiRHSVRfRElSL1RNUF9BTFQiIDI+L2Rldi9udWxsIHx8CisJCSAgcm0gLWYgIiRHSVRfRElSL1RNUF9BTFQiCisJICAgICAgaWYgdGVzdCAtZiAiJEdJVF9ESVIvVE1QX0FMVCIKKwkgICAgICB0aGVuCisJCSAgcmVzb2x2ZV9hbHRlcm5hdGVzICIkcmVtb3RlIiA8IiRHSVRfRElSL1RNUF9BTFQiIHwKKwkJICB3aGlsZSByZWFkIGFsdAorCQkgIGRvCisJCSAgICAgIGNhc2UgIiRhbHQiIGluICdiYWQgYWx0ZXJuYXRlOiAnKikgZGllICIkYWx0Ijs7IGVzYWMKKwkJICAgICAgZWNobyA+JjIgIkdldHRpbmcgYWx0ZXJuYXRlOiAkYWx0IgorCQkgICAgICByc3luYyAtYXYgLS1pZ25vcmUtZXhpc3RpbmcgLS1leGNsdWRlIGluZm8gXAorCQkgICAgICAiJGFsdCIgIiRHSVRfT0JKRUNUX0RJUkVDVE9SWS8iIHx8IGV4aXQKKwkJICBkb25lCisJCSAgcm0gLWYgIiRHSVRfRElSL1RNUF9BTFQiCisJICAgICAgZmkKKwkgICAgICByc3luY19zbHVycGVkX29iamVjdHM9dAorCSAgfQorCSAgOzsKKyAgICAgIGVzYWMKKworICAgICAgYXBwZW5kX2ZldGNoX2hlYWQgIiRoZWFkIiAiJHJlbW90ZSIgXAorCSAgIiRyZW1vdGVfbmFtZSIgIiRyZW1vdGVfbmljayIgIiRsb2NhbF9uYW1lIiAiJG5vdF9mb3JfbWVyZ2UiIHx8IGV4aXQKKworICBkb25lCisKK30KKworZmV0Y2hfbWFpbiAoKSB7CisJY2FzZSAiJHJlbW90ZSIgaW4KKwlodHRwOi8vKiB8IGh0dHBzOi8vKiB8IGZ0cDovLyogfCByc3luYzovLyogKQorCQlmZXRjaF9wZXJfcmVmICIkQCIKKwkJOzsKKwkqKQorCQlmZXRjaF9hbGxfYXRfb25jZSAiJEAiCisJCTs7CisJZXNhYworfQorCitmZXRjaF9tYWluICIkcmVmbGlzdCIgfHwgZXhpdAorCisjIGF1dG9tYXRlZCB0YWcgZm9sbG93aW5nCitjYXNlICIkbm9fdGFncyR0YWdzIiBpbgorJycpCisJY2FzZSAiJHJlZmxpc3QiIGluCisJKjpyZWZzLyopCisJCSMgZWZmZWN0aXZlIG9ubHkgd2hlbiB3ZSBhcmUgZm9sbG93aW5nIHJlbW90ZSBicmFuY2gKKwkJIyB1c2luZyBsb2NhbCB0cmFja2luZyBicmFuY2guCisJCXRhZ2xpc3Q9JChJRlM9JwknICYmCisJCWVjaG8gIiRsc19yZW1vdGVfcmVzdWx0IiB8CisJCWdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3Rpbmc9cmVmcy90YWdzLyB8CisJCXdoaWxlIHJlYWQgc2hhMSBuYW1lCisJCWRvCisJCQlnaXQgY2F0LWZpbGUgLXQgIiRzaGExIiA+L2Rldi9udWxsIDI+JjEgfHwgY29udGludWUKKwkJCWVjaG8gPiYyICJBdXRvLWZvbGxvd2luZyAkbmFtZSIKKwkJCWVjaG8gIi4ke25hbWV9OiR7bmFtZX0iCisJCWRvbmUpCisJZXNhYworCWNhc2UgIiR0YWdsaXN0IiBpbgorCScnKSA7OworCT8qKQorCQkjIGRvIG5vdCBkZWVwZW4gYSBzaGFsbG93IHRyZWUgd2hlbiBmb2xsb3dpbmcgdGFncworCQlzaGFsbG93X2RlcHRoPQorCQlmZXRjaF9tYWluICIkdGFnbGlzdCIgfHwgZXhpdCA7OworCWVzYWMKK2VzYWMKKworIyBJZiB0aGUgb3JpZ2luYWwgaGVhZCB3YXMgZW1wdHkgKGkuZS4gbm8gIm1hc3RlciIgeWV0KSwgb3IKKyMgaWYgd2Ugd2VyZSB0b2xkIG5vdCB0byB3b3JyeSwgd2UgZG8gbm90IGhhdmUgdG8gY2hlY2suCitjYXNlICIkb3JpZ19oZWFkIiBpbgorJycpCisJOzsKKz8qKQorCWN1cnJfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAyPi9kZXYvbnVsbCkKKwlpZiB0ZXN0ICIkY3Vycl9oZWFkIiAhPSAiJG9yaWdfaGVhZCIKKwl0aGVuCisJICAgIGdpdCB1cGRhdGUtcmVmIFwKKwkJCS1tICIkR0lUX1JFRkxPR19BQ1RJT046IFVuZG9pbmcgaW5jb3JyZWN0bHkgZmV0Y2hlZCBIRUFELiIgXAorCQkJSEVBRCAiJG9yaWdfaGVhZCIKKwkJZGllICJDYW5ub3QgZmV0Y2ggaW50byB0aGUgY3VycmVudCBicmFuY2guIgorCWZpCisJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWdjLnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtZ2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTU5N2U5ZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWdjLnNoCkBAIC0wLDAgKzEsMzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYsIFNoYXduIE8uIFBlYXJjZQorIworIyBDbGVhbnVwIHVucmVhY2hhYmxlIGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgcmVwb3NpdG9yeS4KKworVVNBR0U9J1stLXBydW5lXScKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKKy4gZ2l0LXNoLXNldHVwCisKK25vX3BydW5lPToKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktLXBydW5lKQorCQlub19wcnVuZT0KKwkJOzsKKwktLSkKKwkJdXNhZ2UKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworY2FzZSAiJChnaXQgY29uZmlnIC0tZ2V0IGdjLnBhY2tyZWZzKSIgaW4KK25vdGJhcmV8IiIpCisJdGVzdCAkKGlzX2JhcmVfcmVwb3NpdG9yeSkgPSB0cnVlIHx8IHBhY2tfcmVmcz10cnVlOzsKKyopCisJcGFja19yZWZzPSQoZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQgZ2MucGFja3JlZnMpCitlc2FjCisKK3Rlc3QgInRydWUiICE9ICIkcGFja19yZWZzIiB8fAorZ2l0IHBhY2stcmVmcyAtLXBydW5lICYmCitnaXQgcmVmbG9nIGV4cGlyZSAtLWFsbCAmJgorZ2l0LXJlcGFjayAtYSAtZCAtbCAmJgorJG5vX3BydW5lIGdpdCBwcnVuZSAmJgorZ2l0IHJlcmVyZSBnYyB8fCBleGl0CmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1sb2cuc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC1sb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzJlYTcxYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWxvZy5zaApAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IExpbnVzIFRvcnZhbGRzCisjCisKK1VTQUdFPSdbLS1tYXgtY291bnQ9PG4+XSBbPHNpbmNlPi4uPGxpbWl0Pl0gWy0tcHJldHR5PTxmb3JtYXQ+XSBbZ2l0LXJldi1saXN0IG9wdGlvbnNdJworU1VCRElSRUNUT1JZX09LPSdZZXMnCisuIGdpdC1zaC1zZXR1cAorCityZXZzPSQoZ2l0LXJldi1wYXJzZSAtLXJldnMtb25seSAtLW5vLWZsYWdzIC0tZGVmYXVsdCBIRUFEICIkQCIpIHx8IGV4aXQKK1sgIiRyZXZzIiBdIHx8IHsKKwlkaWUgIk5vIEhFQUQgcmVmIgorfQorZ2l0LXJldi1saXN0IC0tcHJldHR5ICQoZ2l0LXJldi1wYXJzZSAtLWRlZmF1bHQgSEVBRCAiJEAiKSB8CitMRVNTPS1TICR7UEFHRVI6LWxlc3N9CmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1scy1yZW1vdGUuc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC1scy1yZW1vdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmFhODlhNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LWxzLXJlbW90ZS5zaApAQCAtMCwwICsxLDE0MiBAQAorIyEvYmluL3NoCisjCisKK3VzYWdlICgpIHsKKyAgICBlY2hvID4mMiAidXNhZ2U6ICQwIFstLWhlYWRzXSBbLS10YWdzXSBbLXV8LS11cGxvYWQtcGFjayA8dXBsb2FkLXBhY2s+XSIKKyAgICBlY2hvID4mMiAiICAgICAgICAgIDxyZXBvc2l0b3J5PiA8cmVmcz4uLi4iCisgICAgZXhpdCAxOworfQorCitkaWUgKCkgeworICAgIGVjaG8gPiYyICIkKiIKKyAgICBleGl0IDEKK30KKworZXhlYz0KK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKyAgY2FzZSAiJDEiIGluCisgIC1ofC0taHwtLWhlfC0taGVhfC0taGVhZHwtLWhlYWRzKQorICBoZWFkcz1oZWFkczsgc2hpZnQgOzsKKyAgLXR8LS10fC0tdGF8LS10YWd8LS10YWdzKQorICB0YWdzPXRhZ3M7IHNoaWZ0IDs7CisgIC11fC0tdXwtLXVwfC0tdXBsfC0tdXBsb2F8LS11cGxvYWR8LS11cGxvYWQtfC0tdXBsb2FkLXB8LS11cGxvYWQtcGF8XAorICAtLXVwbG9hZC1wYWN8LS11cGxvYWQtcGFjaykKKwlzaGlmdAorCWV4ZWM9Ii0tdXBsb2FkLXBhY2s9JDEiCisJc2hpZnQ7OworICAtdT0qfC0tdT0qfC0tdXA9KnwtLXVwbD0qfC0tdXBsbz0qfC0tdXBsb2E9KnwtLXVwbG9hZD0qfFwKKyAgLS11cGxvYWQtPSp8LS11cGxvYWQtcD0qfC0tdXBsb2FkLXBhPSp8LS11cGxvYWQtcGFjPSp8LS11cGxvYWQtcGFjaz0qKQorCWV4ZWM9LS11cGxvYWQtcGFjaz0kKGV4cHIgInokMSIgOiAnei1bXj1dKj1cKC4qXCknKQorCXNoaWZ0OzsKKyAgLS0pCisgIHNoaWZ0OyBicmVhayA7OworICAtKikKKyAgdXNhZ2UgOzsKKyAgKikKKyAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitjYXNlICIkIyIgaW4gMCkgdXNhZ2UgOzsgZXNhYworCitjYXNlICIsJGhlYWRzLCR0YWdzLCIgaW4KKywsLCkgaGVhZHM9aGVhZHMgdGFncz10YWdzIG90aGVyPW90aGVyIDs7Citlc2FjCisKKy4gZ2l0LXBhcnNlLXJlbW90ZQorcGVla19yZXBvPSIkKGdldF9yZW1vdGVfdXJsICIkQCIpIgorc2hpZnQKKwordG1wPS5scy1yZW1vdGUtJCQKK3RyYXAgInJtIC1mciAkdG1wLSoiIDAgMSAyIDMgMTUKK3RtcGRpcj0kdG1wLWQKKworY2FzZSAiJHBlZWtfcmVwbyIgaW4KK2h0dHA6Ly8qIHwgaHR0cHM6Ly8qIHwgZnRwOi8vKiApCisJaWYgWyAtbiAiJEdJVF9TU0xfTk9fVkVSSUZZIiAtbyBcCisJCSIkKGdpdCBjb25maWcgLS1ib29sIGh0dHAuc3NsVmVyaWZ5KSIgPSBmYWxzZSBdOyB0aGVuCisJCWN1cmxfZXh0cmFfYXJncz0iLWsiCisJZmkKKwlpZiBbIC1uICIkR0lUX0NVUkxfRlRQX05PX0VQU1YiIC1vIFwKKwkJIiQoZ2l0IGNvbmZpZyAtLWJvb2wgaHR0cC5ub0VQU1YpIiA9IHRydWUgXTsgdGhlbgorCQljdXJsX2V4dHJhX2FyZ3M9IiR7Y3VybF9leHRyYV9hcmdzfSAtLWRpc2FibGUtZXBzdiIKKwlmaQorCWN1cmwgLW5zZiAkY3VybF9leHRyYV9hcmdzIC0taGVhZGVyICJQcmFnbWE6IG5vLWNhY2hlIiAiJHBlZWtfcmVwby9pbmZvL3JlZnMiIHx8CisJCWVjaG8gImZhaWxlZAlzbHVycGluZyIKKwk7OworCityc3luYzovLyogKQorCW1rZGlyICR0bXBkaXIgJiYKKwlyc3luYyAtcmxxICIkcGVla19yZXBvL0hFQUQiICR0bXBkaXIgJiYKKwlyc3luYyAtcnEgIiRwZWVrX3JlcG8vcmVmcyIgJHRtcGRpciB8fCB7CisJCWVjaG8gImZhaWxlZAlzbHVycGluZyIKKwkJZXhpdAorCX0KKwloZWFkPSQoY2F0ICIkdG1wZGlyL0hFQUQiKSAmJgorCWNhc2UgIiRoZWFkIiBpbgorCXJlZjonICcqKQorCQloZWFkPSQoZXhwciAieiRoZWFkIiA6ICd6cmVmOiBcKC4qXCknKSAmJgorCQloZWFkPSQoY2F0ICIkdG1wZGlyLyRoZWFkIikgfHwgZXhpdAorCWVzYWMgJiYKKwllY2hvICIkaGVhZAlIRUFEIgorCShjZCAkdG1wZGlyICYmIGZpbmQgcmVmcyAtdHlwZSBmKSB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJdHIgLWQgJ1wwMTInIDwiJHRtcGRpci8kcGF0aCIKKwkJZWNobyAiCSRwYXRoIgorCWRvbmUgJiYKKwlybSAtZnIgJHRtcGRpcgorCTs7CisKKyogKQorCWlmIHRlc3QgLWYgIiRwZWVrX3JlcG8iIDsgdGhlbgorCQlnaXQgYnVuZGxlIGxpc3QtaGVhZHMgIiRwZWVrX3JlcG8iIHx8CisJCWVjaG8gImZhaWxlZAlzbHVycGluZyIKKwllbHNlCisJCWdpdC1wZWVrLXJlbW90ZSAkZXhlYyAiJHBlZWtfcmVwbyIgfHwKKwkJZWNobyAiZmFpbGVkCXNsdXJwaW5nIgorCWZpCisJOzsKK2VzYWMgfAorc29ydCAtdCAnCScgLWsgMiB8Cit3aGlsZSByZWFkIHNoYTEgcGF0aAorZG8KKwljYXNlICIkc2hhMSIgaW4KKwlmYWlsZWQpCisJCWV4aXQgMSA7OworCWVzYWMKKwljYXNlICIkcGF0aCIgaW4KKwlyZWZzL2hlYWRzLyopCisJCWdyb3VwPWhlYWRzIDs7CisJcmVmcy90YWdzLyopCisJCWdyb3VwPXRhZ3MgOzsKKwkqKQorCQlncm91cD1vdGhlciA7OworCWVzYWMKKwljYXNlICIsJGhlYWRzLCR0YWdzLCRvdGhlciwiIGluCisJKiwkZ3JvdXAsKikKKwkJOzsKKwkqKQorCQljb250aW51ZTs7CisJZXNhYworCWNhc2UgIiQjIiBpbgorCTApCisJCW1hdGNoPXllcyA7OworCSopCisJCW1hdGNoPW5vCisJCWZvciBwYXQKKwkJZG8KKwkJCWNhc2UgIi8kcGF0aCIgaW4KKwkJCSovJHBhdCApCisJCQkJbWF0Y2g9eWVzCisJCQkJYnJlYWsgOzsKKwkJCWVzYWMKKwkJZG9uZQorCWVzYWMKKwljYXNlICIkbWF0Y2giIGluCisJbm8pCisJCWNvbnRpbnVlIDs7CisJZXNhYworCWVjaG8gIiRzaGExCSRwYXRoIgorZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtbWVyZ2Utb3Vycy5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LW1lcmdlLW91cnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjlkYmE0YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LW1lcmdlLW91cnMuc2gKQEAgLTAsMCArMSwxNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworIyBQcmV0ZW5kIHdlIHJlc29sdmVkIHRoZSBoZWFkcywgYnV0IGRlY2xhcmUgb3VyIHRyZWUgdHJ1bXBzIGV2ZXJ5Ym9keSBlbHNlLgorIworCisjIFdlIG5lZWQgdG8gZXhpdCB3aXRoIDIgaWYgdGhlIGluZGV4IGRvZXMgbm90IG1hdGNoIG91ciBIRUFEIHRyZWUsCisjIGJlY2F1c2UgdGhlIGN1cnJlbnQgaW5kZXggaXMgd2hhdCB3ZSB3aWxsIGJlIGNvbW1pdHRpbmcgYXMgdGhlCisjIG1lcmdlIHJlc3VsdC4KKworZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tIHx8IGV4aXQgMgorCitleGl0IDAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LW1lcmdlLnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTJmMmFhZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LW1lcmdlLnNoCkBAIC0wLDAgKzEsNjIwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK09QVElPTlNfS0VFUERBU0hEQVNIPQorT1BUSU9OU19TUEVDPSJcCitnaXQgbWVyZ2UgW29wdGlvbnNdIDxyZW1vdGU+Li4uCitnaXQgbWVyZ2UgW29wdGlvbnNdIDxtc2c+IEhFQUQgPHJlbW90ZT4KKy0tCitzdGF0ICAgICAgICAgICAgICAgICBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UKK24gICAgICAgICAgICAgICAgICAgIGRvbid0IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZQorc3VtbWFyeSAgICAgICAgICAgICAgKHN5bm9ueW0gdG8gLS1zdGF0KQorbG9nICAgICAgICAgICAgICAgICAgYWRkIGxpc3Qgb2Ygb25lLWxpbmUgbG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlCitzcXVhc2ggICAgICAgICAgICAgICBjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZQorY29tbWl0ICAgICAgICAgICAgICAgcGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpCitmZiAgICAgICAgICAgICAgICAgICBhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpCitmZi1vbmx5ICAgICAgICAgICAgICBhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlCityZXJlcmUtYXV0b3VwZGF0ZSAgICB1cGRhdGUgaW5kZXggd2l0aCBhbnkgcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24KK3Msc3RyYXRlZ3k9ICAgICAgICAgIG1lcmdlIHN0cmF0ZWd5IHRvIHVzZQorWD0gICAgICAgICAgICAgICAgICAgb3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneQorbSxtZXNzYWdlPSAgICAgICAgICAgbWVzc2FnZSB0byBiZSB1c2VkIGZvciB0aGUgbWVyZ2UgY29tbWl0IChpZiBhbnkpCisiCisKK1NVQkRJUkVDVE9SWV9PSz1ZZXMKKy4gZ2l0LXNoLXNldHVwCityZXF1aXJlX3dvcmtfdHJlZQorY2RfdG9fdG9wbGV2ZWwKKwordGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiB8fAorCWRpZSAiTWVyZ2UgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorCishIHRlc3QgLWUgIiRHSVRfRElSL01FUkdFX0hFQUQiIHx8CisJZGllICdZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4nCisKK0xGPScKKycKKworYWxsX3N0cmF0ZWdpZXM9J3JlY3VyIHJlY3Vyc2l2ZSBvY3RvcHVzIHJlc29sdmUgc3R1cGlkIG91cnMgc3VidHJlZScKK2FsbF9zdHJhdGVnaWVzPSIkYWxsX3N0cmF0ZWdpZXMgcmVjdXJzaXZlLW91cnMgcmVjdXJzaXZlLXRoZWlycyIKK25vdF9zdHJhdGVnaWVzPSdiYXNlIGZpbGUgaW5kZXggdHJlZScKK2RlZmF1bHRfdHdvaGVhZF9zdHJhdGVnaWVzPSdyZWN1cnNpdmUnCitkZWZhdWx0X29jdG9wdXNfc3RyYXRlZ2llcz0nb2N0b3B1cycKK25vX2Zhc3RfZm9yd2FyZF9zdHJhdGVnaWVzPSdzdWJ0cmVlIG91cnMnCitub190cml2aWFsX3N0cmF0ZWdpZXM9J3JlY3Vyc2l2ZSByZWN1ciBzdWJ0cmVlIG91cnMgcmVjdXJzaXZlLW91cnMgcmVjdXJzaXZlLXRoZWlycycKK3VzZV9zdHJhdGVnaWVzPQoreG9wdD0KKworYWxsb3dfZmFzdF9mb3J3YXJkPXQKK2Zhc3RfZm9yd2FyZF9vbmx5PQorYWxsb3dfdHJpdmlhbF9tZXJnZT10CitzcXVhc2g9IG5vX2NvbW1pdD0gbG9nX2FyZz0gcnJfYXJnPQorCitkcm9wc2F2ZSgpIHsKKwlybSAtZiAtLSAiJEdJVF9ESVIvTUVSR0VfSEVBRCIgIiRHSVRfRElSL01FUkdFX01TRyIgXAorCQkgIiRHSVRfRElSL01FUkdFX1NUQVNIIiAiJEdJVF9ESVIvTUVSR0VfTU9ERSIgfHwgZXhpdCAxCit9CisKK3NhdmVzdGF0ZSgpIHsKKwkjIFN0YXNoIGF3YXkgYW55IGxvY2FsIG1vZGlmaWNhdGlvbnMuCisJZ2l0IHN0YXNoIGNyZWF0ZSA+IiRHSVRfRElSL01FUkdFX1NUQVNIIgorfQorCityZXN0b3Jlc3RhdGUoKSB7CisgICAgICAgIGlmIHRlc3QgLWYgIiRHSVRfRElSL01FUkdFX1NUQVNIIgorCXRoZW4KKwkJZ2l0IHJlc2V0IC0taGFyZCAkaGVhZCA+L2Rldi9udWxsCisJCWdpdCBzdGFzaCBhcHBseSAkKGNhdCAiJEdJVF9ESVIvTUVSR0VfU1RBU0giKQorCQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCA+L2Rldi9udWxsCisJZmkKK30KKworZmluaXNoX3VwX3RvX2RhdGUgKCkgeworCWNhc2UgIiRzcXVhc2giIGluCisJdCkKKwkJZWNobyAiJDEgKG5vdGhpbmcgdG8gc3F1YXNoKSIgOzsKKwknJykKKwkJZWNobyAiJDEiIDs7CisJZXNhYworCWRyb3BzYXZlCit9CisKK3NxdWFzaF9tZXNzYWdlICgpIHsKKwllY2hvIFNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOgorCWVjaG8KKwlnaXQgbG9nIC0tbm8tbWVyZ2VzIC0tcHJldHR5PW1lZGl1bSBeIiRoZWFkIiAkcmVtb3RlaGVhZHMKK30KKworZmluaXNoICgpIHsKKwlpZiB0ZXN0ICcnID0gIiQyIgorCXRoZW4KKwkJcmxvZ209IiRHSVRfUkVGTE9HX0FDVElPTiIKKwllbHNlCisJCWVjaG8gIiQyIgorCQlybG9nbT0iJEdJVF9SRUZMT0dfQUNUSU9OOiAkMiIKKwlmaQorCWNhc2UgIiRzcXVhc2giIGluCisJdCkKKwkJZWNobyAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRCIKKwkJc3F1YXNoX21lc3NhZ2UgPiIkR0lUX0RJUi9TUVVBU0hfTVNHIgorCQk7OworCScnKQorCQljYXNlICIkbWVyZ2VfbXNnIiBpbgorCQknJykKKwkJCWVjaG8gIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQUQiCisJCQk7OworCQkqKQorCQkJZ2l0IHVwZGF0ZS1yZWYgLW0gIiRybG9nbSIgSEVBRCAiJDEiICIkaGVhZCIgfHwgZXhpdCAxCisJCQlnaXQgZ2MgLS1hdXRvCisJCQk7OworCQllc2FjCisJCTs7CisJZXNhYworCWNhc2UgIiQxIiBpbgorCScnKQorCQk7OworCT8qKQorCQlpZiB0ZXN0ICIkc2hvd19kaWZmc3RhdCIgPSB0CisJCXRoZW4KKwkJCSMgV2Ugd2FudCBjb2xvciAoaWYgc2V0KSwgYnV0IG5vIHBhZ2VyCisJCQlHSVRfUEFHRVI9JycgZ2l0IGRpZmYgLS1zdGF0IC0tc3VtbWFyeSAtTSAiJGhlYWQiICIkMSIKKwkJZmkKKwkJOzsKKwllc2FjCisKKwkjIFJ1biBhIHBvc3QtbWVyZ2UgaG9vaworICAgICAgICBpZiB0ZXN0IC14ICIkR0lUX0RJUiIvaG9va3MvcG9zdC1tZXJnZQorICAgICAgICB0aGVuCisJICAgIGNhc2UgIiRzcXVhc2giIGluCisJICAgIHQpCisgICAgICAgICAgICAgICAgIiRHSVRfRElSIi9ob29rcy9wb3N0LW1lcmdlIDEKKwkJOzsKKwkgICAgJycpCisgICAgICAgICAgICAgICAgIiRHSVRfRElSIi9ob29rcy9wb3N0LW1lcmdlIDAKKwkJOzsKKwkgICAgZXNhYworICAgICAgICBmaQorfQorCittZXJnZV9uYW1lICgpIHsKKwlyZW1vdGU9IiQxIgorCXJoPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHJlbW90ZV4wIiAyPi9kZXYvbnVsbCkgfHwgcmV0dXJuCisJaWYgdHJ1bmFtZT0kKGV4cHIgIiRyZW1vdGUiIDogJ1woLipcKX5bMC05XSokJykgJiYKKwkJZ2l0IHNob3ctcmVmIC1xIC0tdmVyaWZ5ICJyZWZzL2hlYWRzLyR0cnVuYW1lIiAyPi9kZXYvbnVsbAorCXRoZW4KKwkJZWNobyAiJHJoCQlicmFuY2ggJyR0cnVuYW1lJyAoZWFybHkgcGFydCkgb2YgLiIKKwkJcmV0dXJuCisJZmkKKwlpZiBmb3VuZF9yZWY9JChnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIC0tdmVyaWZ5IFwKKwkJCQkJCQkiJHJlbW90ZSIgMj4vZGV2L251bGwpCisJdGhlbgorCQlleHBhbmRlZD0kKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoICIkcmVtb3RlIikgfHwKKwkJCWV4aXQKKwkJaWYgdGVzdCAiJHtmb3VuZF9yZWYjcmVmcy9oZWFkcy99IiAhPSAiJGZvdW5kX3JlZiIKKwkJdGhlbgorCQkJZWNobyAiJHJoCQlicmFuY2ggJyRleHBhbmRlZCcgb2YgLiIKKwkJCXJldHVybgorCQllbGlmIHRlc3QgIiR7Zm91bmRfcmVmI3JlZnMvcmVtb3Rlcy99IiAhPSAiJGZvdW5kX3JlZiIKKwkJdGhlbgorCQkJZWNobyAiJHJoCQlyZW1vdGUgYnJhbmNoICckZXhwYW5kZWQnIG9mIC4iCisJCQlyZXR1cm4KKwkJZmkKKwlmaQorCWlmIHRlc3QgIiRyZW1vdGUiID0gIkZFVENIX0hFQUQiICYmIHRlc3QgLXIgIiRHSVRfRElSL0ZFVENIX0hFQUQiCisJdGhlbgorCQlzZWQgLWUgJ3MvCW5vdC1mb3ItbWVyZ2UJLwkJLycgLWUgMXEgXAorCQkJIiRHSVRfRElSL0ZFVENIX0hFQUQiCisJCXJldHVybgorCWZpCisJZWNobyAiJHJoCQljb21taXQgJyRyZW1vdGUnIgorfQorCitwYXJzZV9jb25maWcgKCkgeworCXdoaWxlIHRlc3QgJCMgIT0gMDsgZG8KKwkJY2FzZSAiJDEiIGluCisJCS1ufC0tbm8tc3RhdHwtLW5vLXN1bW1hcnkpCisJCQlzaG93X2RpZmZzdGF0PWZhbHNlIDs7CisJCS0tc3RhdHwtLXN1bW1hcnkpCisJCQlzaG93X2RpZmZzdGF0PXQgOzsKKwkJLS1sb2d8LS1uby1sb2cpCisJCQlsb2dfYXJnPSQxIDs7CisJCS0tc3F1YXNoKQorCQkJdGVzdCAiJGFsbG93X2Zhc3RfZm9yd2FyZCIgPSB0IHx8CisJCQkJZGllICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKKwkJCXNxdWFzaD10IG5vX2NvbW1pdD10IDs7CisJCS0tbm8tc3F1YXNoKQorCQkJc3F1YXNoPSBub19jb21taXQ9IDs7CisJCS0tY29tbWl0KQorCQkJbm9fY29tbWl0PSA7OworCQktLW5vLWNvbW1pdCkKKwkJCW5vX2NvbW1pdD10IDs7CisJCS0tZmYpCisJCQlhbGxvd19mYXN0X2ZvcndhcmQ9dCA7OworCQktLW5vLWZmKQorCQkJdGVzdCAiJHNxdWFzaCIgIT0gdCB8fAorCQkJCWRpZSAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCisJCQl0ZXN0ICIkZmFzdF9mb3J3YXJkX29ubHkiICE9IHQgfHwKKwkJCQlkaWUgIllvdSBjYW5ub3QgY29tYmluZSAtLWZmLW9ubHkgd2l0aCAtLW5vLWZmLiIKKwkJCWFsbG93X2Zhc3RfZm9yd2FyZD1mIDs7CisJCS0tZmYtb25seSkKKwkJCXRlc3QgIiRhbGxvd19mYXN0X2ZvcndhcmQiICE9IGYgfHwKKwkJCQlkaWUgIllvdSBjYW5ub3QgY29tYmluZSAtLWZmLW9ubHkgd2l0aCAtLW5vLWZmLiIKKwkJCWZhc3RfZm9yd2FyZF9vbmx5PXQgOzsKKwkJLS1yZXJlcmUtYXV0b3VwZGF0ZXwtLW5vLXJlcmVyZS1hdXRvdXBkYXRlKQorCQkJcnJfYXJnPSQxIDs7CisJCS1zfC0tc3RyYXRlZ3kpCisJCQlzaGlmdAorCQkJY2FzZSAiICRhbGxfc3RyYXRlZ2llcyAiIGluCisJCQkqIiAkMSAiKikKKwkJCQl1c2Vfc3RyYXRlZ2llcz0iJHVzZV9zdHJhdGVnaWVzJDEgIgorCQkJCTs7CisJCQkqKQorCQkJCWNhc2UgIiAkbm90X3N0cmF0ZWdpZXMgIiBpbgorCQkJCSoiICQxICIqKQorCQkJCQlmYWxzZQorCQkJCWVzYWMgJiYKKwkJCQl0eXBlICJnaXQtbWVyZ2UtJDEiID4vZGV2L251bGwgMj4mMSB8fAorCQkJCQlkaWUgImF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZTogJGFsbF9zdHJhdGVnaWVzIgorCQkJCXVzZV9zdHJhdGVnaWVzPSIkdXNlX3N0cmF0ZWdpZXMkMSAiCisJCQkJOzsKKwkJCWVzYWMKKwkJCTs7CisJCS1YKQorCQkJc2hpZnQKKwkJCXhvcHQ9IiR7eG9wdDorJHhvcHQgfSQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICItLSQxIikiCisJCQk7OworCQktbXwtLW1lc3NhZ2UpCisJCQlzaGlmdAorCQkJbWVyZ2VfbXNnPSIkMSIKKwkJCWhhdmVfbWVzc2FnZT10CisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhayA7OworCQkqKQl1c2FnZSA7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCWFyZ3NfbGVmdD0kIworfQorCit0ZXN0ICQjICE9IDAgfHwgdXNhZ2UKKworaGF2ZV9tZXNzYWdlPQorCitpZiBicmFuY2g9JChnaXQtc3ltYm9saWMtcmVmIC1xIEhFQUQpCit0aGVuCisJbWVyZ2VvcHRzPSQoZ2l0IGNvbmZpZyAiYnJhbmNoLiR7YnJhbmNoI3JlZnMvaGVhZHMvfS5tZXJnZW9wdGlvbnMiKQorCWlmIHRlc3QgLW4gIiRtZXJnZW9wdHMiCisJdGhlbgorCQlwYXJzZV9jb25maWcgJG1lcmdlb3B0cyAtLQorCWZpCitmaQorCitwYXJzZV9jb25maWcgIiRAIgord2hpbGUgdGVzdCAkYXJnc19sZWZ0IC1sdCAkIzsgZG8gc2hpZnQ7IGRvbmUKKworaWYgdGVzdCAteiAiJHNob3dfZGlmZnN0YXQiOyB0aGVuCisgICAgdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZS5kaWZmc3RhdCkiID0gZmFsc2UgJiYgc2hvd19kaWZmc3RhdD1mYWxzZQorICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgbWVyZ2Uuc3RhdCkiID0gZmFsc2UgJiYgc2hvd19kaWZmc3RhdD1mYWxzZQorICAgIHRlc3QgLXogIiRzaG93X2RpZmZzdGF0IiAmJiBzaG93X2RpZmZzdGF0PXQKK2ZpCisKKyMgVGhpcyBjb3VsZCBiZSB0cmFkaXRpb25hbCAibWVyZ2UgPG1zZz4gSEVBRCA8Y29tbWl0Pi4uLiIgIGFuZCB0aGUKKyMgd2F5IHdlIGNhbiB0ZWxsIGl0IGlzIHRvIHNlZSBpZiB0aGUgc2Vjb25kIHRva2VuIGlzIEhFQUQsIGJ1dCBzb21lCisjIHBlb3BsZSBtaWdodCBoYXZlIG1pc3VzZWQgdGhlIGludGVyZmFjZSBhbmQgdXNlZCBhIGNvbW1pdC1pc2ggdGhhdAorIyBpcyB0aGUgc2FtZSBhcyBIRUFEIHRoZXJlIGluc3RlYWQuICBUcmFkaXRpb25hbCBmb3JtYXQgbmV2ZXIgd291bGQKKyMgaGF2ZSAiLW0iIHNvIGl0IGlzIGFuIGFkZGl0aW9uYWwgc2FmZXR5IG1lYXN1cmUgdG8gY2hlY2sgZm9yIGl0LgorCitpZiB0ZXN0IC16ICIkaGF2ZV9tZXNzYWdlIiAmJgorCXNlY29uZF90b2tlbj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQyXjAiIDI+L2Rldi9udWxsKSAmJgorCWhlYWRfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiSEVBRCIgMj4vZGV2L251bGwpICYmCisJdGVzdCAiJHNlY29uZF90b2tlbiIgPSAiJGhlYWRfY29tbWl0IgordGhlbgorCW1lcmdlX21zZz0iJDEiCisJc2hpZnQKKwloZWFkX2FyZz0iJDEiCisJc2hpZnQKK2VsaWYgISBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi9kZXYvbnVsbCAyPiYxCit0aGVuCisJIyBJZiB0aGUgbWVyZ2VkIGhlYWQgaXMgYSB2YWxpZCBvbmUgdGhlcmUgaXMgbm8gcmVhc29uIHRvCisJIyBmb3JiaWQgImdpdCBtZXJnZSIgaW50byBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybi4gIFdlIGRvCisJIyB0aGUgc2FtZSBmb3IgImdpdCBwdWxsIi4KKwlpZiB0ZXN0IDEgLW5lICQjCisJdGhlbgorCQllY2hvID4mMiAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKKwkJZXhpdCAxCisJZmkKKworCXRlc3QgIiRzcXVhc2giICE9IHQgfHwKKwkJZGllICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKKwl0ZXN0ICIkYWxsb3dfZmFzdF9mb3J3YXJkIiA9IHQgfHwKKwkJZGllICJOb24tZmFzdC1mb3J3YXJkIGludG8gYW4gZW1wdHkgaGVhZCBkb2VzIG5vdCBtYWtlIHNlbnNlIgorCXJoPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDFeMCIpIHx8CisJCWRpZSAiJDEgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKKworCWdpdCB1cGRhdGUtcmVmIC1tICJpbml0aWFsIHB1bGwiIEhFQUQgIiRyaCIgIiIgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRAorCWV4aXQKKworZWxzZQorCSMgV2UgYXJlIGludm9rZWQgZGlyZWN0bHkgYXMgdGhlIGZpcnN0LWNsYXNzIFVJLgorCWhlYWRfYXJnPUhFQUQKKworCSMgQWxsIHRoZSByZXN0IGFyZSB0aGUgY29tbWl0cyBiZWluZyBtZXJnZWQ7IHByZXBhcmUKKwkjIHRoZSBzdGFuZGFyZCBtZXJnZSBzdW1tYXJ5IG1lc3NhZ2UgdG8gYmUgYXBwZW5kZWQgdG8KKwkjIHRoZSBnaXZlbiBtZXNzYWdlLiAgSWYgcmVtb3RlIGlzIGludmFsaWQgd2Ugd2lsbCBkaWUKKwkjIGxhdGVyIGluIHRoZSBjb21tb24gY29kZXBhdGggc28gd2UgZGlzY2FyZCB0aGUgZXJyb3IKKwkjIGluIHRoaXMgbG9vcC4KKwltZXJnZV9tc2c9IiQoCisJCWZvciByZW1vdGUKKwkJZG8KKwkJCW1lcmdlX25hbWUgIiRyZW1vdGUiCisJCWRvbmUgfAorCQlpZiB0ZXN0ICIkaGF2ZV9tZXNzYWdlIiA9IHQKKwkJdGhlbgorCQkJZ2l0IGZtdC1tZXJnZS1tc2cgLW0gIiRtZXJnZV9tc2ciICRsb2dfYXJnCisJCWVsc2UKKwkJCWdpdCBmbXQtbWVyZ2UtbXNnICRsb2dfYXJnCisJCWZpCisJKSIKK2ZpCitoZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJGhlYWRfYXJnIl4wKSB8fCB1c2FnZQorCisjIEFsbCB0aGUgcmVzdCBhcmUgcmVtb3RlIGhlYWRzCit0ZXN0ICIkIyIgPSAwICYmIHVzYWdlIDsjIHdlIG5lZWQgYXQgbGVhc3Qgb25lIHJlbW90ZSBoZWFkLgorc2V0X3JlZmxvZ19hY3Rpb24gIm1lcmdlICQqIgorCityZW1vdGVoZWFkcz0KK2ZvciByZW1vdGUKK2RvCisJcmVtb3RlaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRyZW1vdGUiXjAgMj4vZGV2L251bGwpIHx8CisJICAgIGRpZSAiJHJlbW90ZSAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorCXJlbW90ZWhlYWRzPSIke3JlbW90ZWhlYWRzfSRyZW1vdGVoZWFkICIKKwlldmFsIEdJVEhFQURfJHJlbW90ZWhlYWQ9JyIkcmVtb3RlIicKKwlleHBvcnQgR0lUSEVBRF8kcmVtb3RlaGVhZAorZG9uZQorc2V0IHggJHJlbW90ZWhlYWRzIDsgc2hpZnQKKworY2FzZSAiJHVzZV9zdHJhdGVnaWVzIiBpbgorJycpCisJY2FzZSAiJCMiIGluCisJMSkKKwkJdmFyPSIkKGdpdCBjb25maWcgLS1nZXQgcHVsbC50d29oZWFkKSIKKwkJaWYgdGVzdCAtbiAiJHZhciIKKwkJdGhlbgorCQkJdXNlX3N0cmF0ZWdpZXM9IiR2YXIiCisJCWVsc2UKKwkJCXVzZV9zdHJhdGVnaWVzPSIkZGVmYXVsdF90d29oZWFkX3N0cmF0ZWdpZXMiCisJCWZpIDs7CisJKikKKwkJdmFyPSIkKGdpdCBjb25maWcgLS1nZXQgcHVsbC5vY3RvcHVzKSIKKwkJaWYgdGVzdCAtbiAiJHZhciIKKwkJdGhlbgorCQkJdXNlX3N0cmF0ZWdpZXM9IiR2YXIiCisJCWVsc2UKKwkJCXVzZV9zdHJhdGVnaWVzPSIkZGVmYXVsdF9vY3RvcHVzX3N0cmF0ZWdpZXMiCisJCWZpIDs7CisJZXNhYworCTs7Citlc2FjCisKK2ZvciBzIGluICR1c2Vfc3RyYXRlZ2llcworZG8KKwlmb3Igc3MgaW4gJG5vX2Zhc3RfZm9yd2FyZF9zdHJhdGVnaWVzCisJZG8KKwkJY2FzZSAiICRzICIgaW4KKwkJKiIgJHNzICIqKQorCQkJYWxsb3dfZmFzdF9mb3J3YXJkPWYKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJZG9uZQorCWZvciBzcyBpbiAkbm9fdHJpdmlhbF9zdHJhdGVnaWVzCisJZG8KKwkJY2FzZSAiICRzICIgaW4KKwkJKiIgJHNzICIqKQorCQkJYWxsb3dfdHJpdmlhbF9tZXJnZT1mCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCWRvbmUKK2RvbmUKKworY2FzZSAiJCMiIGluCisxKQorCWNvbW1vbj0kKGdpdCBtZXJnZS1iYXNlIC0tYWxsICRoZWFkICIkQCIpCisJOzsKKyopCisJY29tbW9uPSQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgLS1vY3RvcHVzICRoZWFkICIkQCIpCisJOzsKK2VzYWMKK2VjaG8gIiRoZWFkIiA+IiRHSVRfRElSL09SSUdfSEVBRCIKKworY2FzZSAiJGFsbG93X2Zhc3RfZm9yd2FyZCwkIywkY29tbW9uLCRub19jb21taXQiIGluCis/LCosJycsKikKKwkjIE5vIGNvbW1vbiBhbmNlc3RvcnMgZm91bmQuIFdlIG5lZWQgYSByZWFsIG1lcmdlLgorCTs7Cis/LDEsIiQxIiwqKQorCSMgSWYgaGVhZCBjYW4gcmVhY2ggYWxsIHRoZSBtZXJnZSB0aGVuIHdlIGFyZSB1cCB0byBkYXRlLgorCSMgYnV0IGZpcnN0IHRoZSBtb3N0IGNvbW1vbiBjYXNlIG9mIG1lcmdpbmcgb25lIHJlbW90ZS4KKwlmaW5pc2hfdXBfdG9fZGF0ZSAiQWxyZWFkeSB1cC10by1kYXRlLiIKKwlleGl0IDAKKwk7OwordCwxLCIkaGVhZCIsKikKKwkjIEFnYWluIHRoZSBtb3N0IGNvbW1vbiBjYXNlIG9mIG1lcmdpbmcgb25lIHJlbW90ZS4KKwllY2hvICJVcGRhdGluZyAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkaGVhZCkuLiQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICQxKSIKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAyPi9kZXYvbnVsbAorCW1zZz0iRmFzdC1mb3J3YXJkIgorCWlmIHRlc3QgLW4gIiRoYXZlX21lc3NhZ2UiCisJdGhlbgorCQltc2c9IiRtc2cgKG5vIGNvbW1pdCBjcmVhdGVkOyAtbSBvcHRpb24gaWdub3JlZCkiCisJZmkKKwluZXdfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxXjAiKSAmJgorCWdpdCByZWFkLXRyZWUgLXYgLW0gLXUgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSAkaGVhZCAiJG5ld19oZWFkIiAmJgorCWZpbmlzaCAiJG5ld19oZWFkIiAiJG1zZyIgfHwgZXhpdAorCWRyb3BzYXZlCisJZXhpdCAwCisJOzsKKz8sMSw/KiIkTEYiPyosKikKKwkjIFdlIGFyZSBub3QgZG9pbmcgb2N0b3B1cyBhbmQgbm90IGZhc3QtZm9yd2FyZC4gIE5lZWQgYQorCSMgcmVhbCBtZXJnZS4KKwk7OworPywxLCosKQorCSMgV2UgYXJlIG5vdCBkb2luZyBvY3RvcHVzLCBub3QgZmFzdC1mb3J3YXJkLCBhbmQgaGF2ZSBvbmx5CisJIyBvbmUgY29tbW9uLgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIDI+L2Rldi9udWxsCisJY2FzZSAiJGFsbG93X3RyaXZpYWxfbWVyZ2UsJGZhc3RfZm9yd2FyZF9vbmx5IiBpbgorCXQsKQorCQkjIFNlZSBpZiBpdCBpcyByZWFsbHkgdHJpdmlhbC4KKwkJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID4vZGV2L251bGwgfHwgZXhpdAorCQllY2hvICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi4iCisJCWlmIGdpdCByZWFkLXRyZWUgLS10cml2aWFsIC1tIC11IC12ICRjb21tb24gJGhlYWQgIiQxIiAmJgorCQkgICByZXN1bHRfdHJlZT0kKGdpdCB3cml0ZS10cmVlKQorCQl0aGVuCisJCQllY2hvICJXb25kZXJmdWwuIgorCQkJcmVzdWx0X2NvbW1pdD0kKAorCQkJCXByaW50ZiAnJXNcbicgIiRtZXJnZV9tc2ciIHwKKwkJCQlnaXQgY29tbWl0LXRyZWUgJHJlc3VsdF90cmVlIC1wIEhFQUQgLXAgIiQxIgorCQkJKSB8fCBleGl0CisJCQlmaW5pc2ggIiRyZXN1bHRfY29tbWl0IiAiSW4taW5kZXggbWVyZ2UiCisJCQlkcm9wc2F2ZQorCQkJZXhpdCAwCisJCWZpCisJCWVjaG8gIk5vcGUuIgorCWVzYWMKKwk7OworKikKKwkjIEFuIG9jdG9wdXMuICBJZiB3ZSBjYW4gcmVhY2ggYWxsIHRoZSByZW1vdGUgd2UgYXJlIHVwIHRvIGRhdGUuCisJdXBfdG9fZGF0ZT10CisJZm9yIHJlbW90ZQorCWRvCisJCWNvbW1vbl9vbmU9JChnaXQgbWVyZ2UtYmFzZSAtLWFsbCAkaGVhZCAkcmVtb3RlKQorCQlpZiB0ZXN0ICIkY29tbW9uX29uZSIgIT0gIiRyZW1vdGUiCisJCXRoZW4KKwkJCXVwX3RvX2RhdGU9ZgorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJaWYgdGVzdCAiJHVwX3RvX2RhdGUiID0gdAorCXRoZW4KKwkJZmluaXNoX3VwX3RvX2RhdGUgIkFscmVhZHkgdXAtdG8tZGF0ZS4gWWVlYWghIgorCQlleGl0IDAKKwlmaQorCTs7Citlc2FjCisKK2lmIHRlc3QgIiRmYXN0X2ZvcndhcmRfb25seSIgPSB0Cit0aGVuCisJZGllICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCitmaQorCisjIFdlIGFyZSBnb2luZyB0byBtYWtlIGEgbmV3IGNvbW1pdC4KK2dpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCA+L2Rldi9udWxsIHx8IGV4aXQKKworIyBBdCB0aGlzIHBvaW50LCB3ZSBuZWVkIGEgcmVhbCBtZXJnZS4gIE5vIG1hdHRlciB3aGF0IHN0cmF0ZWd5CisjIHdlIHVzZSwgaXQgd291bGQgb3BlcmF0ZSBvbiB0aGUgaW5kZXgsIHBvc3NpYmx5IGFmZmVjdGluZyB0aGUKKyMgd29ya2luZyB0cmVlLCBhbmQgd2hlbiByZXNvbHZlZCBjbGVhbmx5LCBoYXZlIHRoZSBkZXNpcmVkIHRyZWUKKyMgaW4gdGhlIGluZGV4IC0tIHRoaXMgbWVhbnMgdGhhdCB0aGUgaW5kZXggbXVzdCBiZSBpbiBzeW5jIHdpdGgKKyMgdGhlICRoZWFkIGNvbW1pdC4gIFRoZSBzdHJhdGVnaWVzIGFyZSByZXNwb25zaWJsZSB0byBlbnN1cmUgdGhpcy4KKworY2FzZSAiJHVzZV9zdHJhdGVnaWVzIiBpbgorPyonICc/KikKKyAgICAjIFN0YXNoIGF3YXkgdGhlIGxvY2FsIGNoYW5nZXMgc28gdGhhdCB3ZSBjYW4gdHJ5IG1vcmUgdGhhbiBvbmUuCisgICAgc2F2ZXN0YXRlCisgICAgc2luZ2xlX3N0cmF0ZWd5PW5vCisgICAgOzsKKyopCisgICAgcm0gLWYgIiRHSVRfRElSL01FUkdFX1NUQVNIIgorICAgIHNpbmdsZV9zdHJhdGVneT15ZXMKKyAgICA7OworZXNhYworCityZXN1bHRfdHJlZT0gYmVzdF9jbnQ9LTEgYmVzdF9zdHJhdGVneT0gd3Rfc3RyYXRlZ3k9CittZXJnZV93YXNfb2s9Citmb3Igc3RyYXRlZ3kgaW4gJHVzZV9zdHJhdGVnaWVzCitkbworICAgIHRlc3QgIiR3dF9zdHJhdGVneSIgPSAnJyB8fCB7CisJZWNobyAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uIgorCXJlc3RvcmVzdGF0ZQorICAgIH0KKyAgICBjYXNlICIkc2luZ2xlX3N0cmF0ZWd5IiBpbgorICAgIG5vKQorCWVjaG8gIlRyeWluZyBtZXJnZSBzdHJhdGVneSAkc3RyYXRlZ3kuLi4iCisJOzsKKyAgICBlc2FjCisKKyAgICAjIFJlbWVtYmVyIHdoaWNoIHN0cmF0ZWd5IGxlZnQgdGhlIHN0YXRlIGluIHRoZSB3b3JraW5nIHRyZWUKKyAgICB3dF9zdHJhdGVneT0kc3RyYXRlZ3kKKworICAgIGV2YWwgJ2dpdC1tZXJnZS0kc3RyYXRlZ3kgJyIkeG9wdCInICRjb21tb24gLS0gIiRoZWFkX2FyZyIgIiRAIicKKyAgICBleGl0PSQ/CisgICAgaWYgdGVzdCAiJG5vX2NvbW1pdCIgPSB0ICYmIHRlc3QgIiRleGl0IiA9IDAKKyAgICB0aGVuCisgICAgICAgIG1lcmdlX3dhc19vaz10CisJZXhpdD0xIDsjIHByZXRlbmQgaXQgbGVmdCBjb25mbGljdHMuCisgICAgZmkKKworICAgIHRlc3QgIiRleGl0IiA9IDAgfHwgeworCisJIyBUaGUgYmFja2VuZCBleGl0cyB3aXRoIDEgd2hlbiBjb25mbGljdHMgYXJlIGxlZnQgdG8gYmUgcmVzb2x2ZWQsCisJIyB3aXRoIDIgd2hlbiBpdCBkb2VzIG5vdCBoYW5kbGUgdGhlIGdpdmVuIG1lcmdlIGF0IGFsbC4KKworCWlmIHRlc3QgIiRleGl0IiAtZXEgMQorCXRoZW4KKwkgICAgY250PWB7CisJCWdpdCBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5CisJCWdpdCBscy1maWxlcyAtLXVubWVyZ2VkCisJICAgIH0gfCB3YyAtbGAKKwkgICAgaWYgdGVzdCAkYmVzdF9jbnQgLWxlIDAgfHwgdGVzdCAkY250IC1sZSAkYmVzdF9jbnQKKwkgICAgdGhlbgorCQliZXN0X3N0cmF0ZWd5PSRzdHJhdGVneQorCQliZXN0X2NudD0kY250CisJICAgIGZpCisJZmkKKwljb250aW51ZQorICAgIH0KKworICAgICMgQXV0b21lcmdlIHN1Y2NlZWRlZC4KKyAgICByZXN1bHRfdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJiBicmVhaworZG9uZQorCisjIElmIHdlIGhhdmUgYSByZXN1bHRpbmcgdHJlZSwgdGhhdCBtZWFucyB0aGUgc3RyYXRlZ3kgbW9kdWxlCisjIGF1dG8gcmVzb2x2ZWQgdGhlIG1lcmdlIGNsZWFubHkuCitpZiB0ZXN0ICcnICE9ICIkcmVzdWx0X3RyZWUiCit0aGVuCisgICAgaWYgdGVzdCAiJGFsbG93X2Zhc3RfZm9yd2FyZCIgPSAidCIKKyAgICB0aGVuCisJcGFyZW50cz0kKGdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgIiRoZWFkIiAiJEAiKQorICAgIGVsc2UKKwlwYXJlbnRzPSQoZ2l0IHJldi1wYXJzZSAiJGhlYWQiICIkQCIpCisgICAgZmkKKyAgICBwYXJlbnRzPSQoZWNobyAiJHBhcmVudHMiIHwgc2VkIC1lICdzL14vLXAgLycpCisgICAgcmVzdWx0X2NvbW1pdD0kKHByaW50ZiAnJXNcbicgIiRtZXJnZV9tc2ciIHwgZ2l0IGNvbW1pdC10cmVlICRyZXN1bHRfdHJlZSAkcGFyZW50cykgfHwgZXhpdAorICAgIGZpbmlzaCAiJHJlc3VsdF9jb21taXQiICJNZXJnZSBtYWRlIGJ5ICR3dF9zdHJhdGVneS4iCisgICAgZHJvcHNhdmUKKyAgICBleGl0IDAKK2ZpCisKKyMgUGljayB0aGUgcmVzdWx0IGZyb20gdGhlIGJlc3Qgc3RyYXRlZ3kgYW5kIGhhdmUgdGhlIHVzZXIgZml4IGl0IHVwLgorY2FzZSAiJGJlc3Rfc3RyYXRlZ3kiIGluCisnJykKKwlyZXN0b3Jlc3RhdGUKKwljYXNlICIkdXNlX3N0cmF0ZWdpZXMiIGluCisJPyonICc/KikKKwkJZWNobyA+JjIgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLiIKKwkJOzsKKwkqKQorCQllY2hvID4mMiAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAkdXNlX3N0cmF0ZWdpZXMgZmFpbGVkLiIKKwkJOzsKKwllc2FjCisJZXhpdCAyCisJOzsKKyIkd3Rfc3RyYXRlZ3kiKQorCSMgV2UgYWxyZWFkeSBoYXZlIGl0cyByZXN1bHQgaW4gdGhlIHdvcmtpbmcgdHJlZS4KKwk7OworKikKKwllY2hvICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi4iCisJcmVzdG9yZXN0YXRlCisJZWNobyAiVXNpbmcgdGhlICRiZXN0X3N0cmF0ZWd5IHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuIgorCWdpdC1tZXJnZS0kYmVzdF9zdHJhdGVneSAkY29tbW9uIC0tICIkaGVhZF9hcmciICIkQCIKKwk7OworZXNhYworCitpZiB0ZXN0ICIkc3F1YXNoIiA9IHQKK3RoZW4KKwlmaW5pc2gKK2Vsc2UKKwlmb3IgcmVtb3RlCisJZG8KKwkJZWNobyAkcmVtb3RlCisJZG9uZSA+IiRHSVRfRElSL01FUkdFX0hFQUQiCisJcHJpbnRmICclc1xuJyAiJG1lcmdlX21zZyIgPiIkR0lUX0RJUi9NRVJHRV9NU0ciIHx8CisJCWRpZSAiQ291bGQgbm90IHdyaXRlIHRvICRHSVRfRElSL01FUkdFX01TRyIKKwlpZiB0ZXN0ICIkYWxsb3dfZmFzdF9mb3J3YXJkIiAhPSB0CisJdGhlbgorCQlwcmludGYgIiVzIiBuby1mZgorCWVsc2UKKwkJOgorCWZpID4iJEdJVF9ESVIvTUVSR0VfTU9ERSIgfHwKKwkJZGllICJDb3VsZCBub3Qgd3JpdGUgdG8gJEdJVF9ESVIvTUVSR0VfTU9ERSIKK2ZpCisKK2lmIHRlc3QgIiRtZXJnZV93YXNfb2siID0gdAordGhlbgorCWVjaG8gPiYyIFwKKwkiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWQiCisJZXhpdCAwCitlbHNlCisJeworCSAgICBlY2hvICcKK0NvbmZsaWN0czoKKycKKwkJZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQgfAorCQlzZWQgLWUgJ3MvXlteCV0qCS8JLycgfAorCQl1bmlxCisJfSA+PiIkR0lUX0RJUi9NRVJHRV9NU0ciCisJZ2l0IHJlcmVyZSAkcnJfYXJnCisJZGllICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LiIKK2ZpCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1ub3Rlcy5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LW5vdGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2NDJlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC1ub3Rlcy5zaApAQCAtMCwwICsxLDEyMSBAQAorIyEvYmluL3NoCisKK1VTQUdFPSIoZWRpdCBbLUYgPGZpbGU+IHwgLW0gPG1zZz5dIHwgc2hvdykgW2NvbW1pdF0iCisuIGdpdC1zaC1zZXR1cAorCit0ZXN0IC16ICIkMSIgJiYgdXNhZ2UKK0FDVElPTj0iJDEiOyBzaGlmdAorCit0ZXN0IC16ICIkR0lUX05PVEVTX1JFRiIgJiYgR0lUX05PVEVTX1JFRj0iJChnaXQgY29uZmlnIGNvcmUubm90ZXNyZWYpIgordGVzdCAteiAiJEdJVF9OT1RFU19SRUYiICYmIEdJVF9OT1RFU19SRUY9InJlZnMvbm90ZXMvY29tbWl0cyIKKworTUVTU0FHRT0KK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktbSkKKwkJdGVzdCAiJEFDVElPTiIgPSAiZWRpdCIgfHwgdXNhZ2UKKwkJc2hpZnQKKwkJaWYgdGVzdCAiJCMiID0gIjAiOyB0aGVuCisJCQlkaWUgImVycm9yOiBvcHRpb24gLW0gbmVlZHMgYW4gYXJndW1lbnQiCisJCWVsc2UKKwkJCWlmIFsgLXogIiRNRVNTQUdFIiBdOyB0aGVuCisJCQkJTUVTU0FHRT0iJDEiCisJCQllbHNlCisJCQkJTUVTU0FHRT0iJE1FU1NBR0UKKworJDEiCisJCQlmaQorCQkJc2hpZnQKKwkJZmkKKwkJOzsKKwktRikKKwkJdGVzdCAiJEFDVElPTiIgPSAiZWRpdCIgfHwgdXNhZ2UKKwkJc2hpZnQKKwkJaWYgdGVzdCAiJCMiID0gIjAiOyB0aGVuCisJCQlkaWUgImVycm9yOiBvcHRpb24gLUYgbmVlZHMgYW4gYXJndW1lbnQiCisJCWVsc2UKKwkJCWlmIFsgLXogIiRNRVNTQUdFIiBdOyB0aGVuCisJCQkJTUVTU0FHRT0iJChjYXQgIiQxIikiCisJCQllbHNlCisJCQkJTUVTU0FHRT0iJE1FU1NBR0UKKworJChjYXQgIiQxIikiCisJCQlmaQorCQkJc2hpZnQKKwkJZmkKKwkJOzsKKwktKikKKwkJdXNhZ2UKKwkJOzsKKwkqKQorCQlicmVhaworCQk7OworCWVzYWMKK2RvbmUKKworQ09NTUlUPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgSEVBRCAiJEAiKSB8fAorZGllICJJbnZhbGlkIGNvbW1pdDogJEAiCisKK2Nhc2UgIiRBQ1RJT04iIGluCitlZGl0KQorCWlmIFsgIiR7R0lUX05PVEVTX1JFRiNyZWZzL25vdGVzL30iID0gIiRHSVRfTk9URVNfUkVGIiBdOyB0aGVuCisJCWRpZSAiUmVmdXNpbmcgdG8gZWRpdCBub3RlcyBpbiAkR0lUX05PVEVTX1JFRiAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCisJZmkKKworCU1TR19GSUxFPSIkR0lUX0RJUi9uZXctbm90ZXMtJENPTU1JVCIKKwlHSVRfSU5ERVhfRklMRT0iJE1TR19GSUxFLmlkeCIKKwlleHBvcnQgR0lUX0lOREVYX0ZJTEUKKworCXRyYXAgJworCQl0ZXN0IC1mICIkTVNHX0ZJTEUiICYmIHJtICIkTVNHX0ZJTEUiCisJCXRlc3QgLWYgIiRHSVRfSU5ERVhfRklMRSIgJiYgcm0gIiRHSVRfSU5ERVhfRklMRSIKKwknIDAKKworCUNVUlJFTlRfSEVBRD0kKGdpdCBzaG93LXJlZiAiJEdJVF9OT1RFU19SRUYiIHwgY3V0IC1mIDEgLWQgJyAnKQorCWlmIFsgLXogIiRDVVJSRU5UX0hFQUQiIF07IHRoZW4KKwkJUEFSRU5UPQorCWVsc2UKKwkJUEFSRU5UPSItcCAkQ1VSUkVOVF9IRUFEIgorCQlnaXQgcmVhZC10cmVlICIkR0lUX05PVEVTX1JFRiIgfHwgZGllICJDb3VsZCBub3QgcmVhZCBpbmRleCIKKwlmaQorCisJaWYgWyAteiAiJE1FU1NBR0UiIF07IHRoZW4KKwkJR0lUX05PVEVTX1JFRj0gZ2l0IGxvZyAtMSAkQ09NTUlUIHwgc2VkICJzL14vIy8iID4gIiRNU0dfRklMRSIKKwkJaWYgWyAhIC16ICIkQ1VSUkVOVF9IRUFEIiBdOyB0aGVuCisJCQlnaXQgY2F0LWZpbGUgYmxvYiA6JENPTU1JVCA+PiAiJE1TR19GSUxFIiAyPiAvZGV2L251bGwKKwkJZmkKKwkJY29yZV9lZGl0b3I9IiQoZ2l0IGNvbmZpZyBjb3JlLmVkaXRvcikiCisJCSR7R0lUX0VESVRPUjotJHtjb3JlX2VkaXRvcjotJHtWSVNVQUw6LSR7RURJVE9SOi12aX19fX0gIiRNU0dfRklMRSIKKwllbHNlCisJCWVjaG8gIiRNRVNTQUdFIiA+ICIkTVNHX0ZJTEUiCisJZmkKKworCWdyZXAgLXYgXiMgPCAiJE1TR19GSUxFIiB8IGdpdCBzdHJpcHNwYWNlID4gIiRNU0dfRklMRSIucHJvY2Vzc2VkCisJbXYgIiRNU0dfRklMRSIucHJvY2Vzc2VkICIkTVNHX0ZJTEUiCisJaWYgWyAtcyAiJE1TR19GSUxFIiBdOyB0aGVuCisJCUJMT0I9JChnaXQgaGFzaC1vYmplY3QgLXcgIiRNU0dfRklMRSIpIHx8CisJCQlkaWUgIkNvdWxkIG5vdCB3cml0ZSBpbnRvIG9iamVjdCBkYXRhYmFzZSIKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAwNjQ0ICRCTE9CICRDT01NSVQgfHwKKwkJCWRpZSAiQ291bGQgbm90IHdyaXRlIGluZGV4IgorCWVsc2UKKwkJdGVzdCAteiAiJENVUlJFTlRfSEVBRCIgJiYKKwkJCWRpZSAiV2lsbCBub3QgaW5pdGlhbGlzZSB3aXRoIGVtcHR5IHRyZWUiCisJCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgJENPTU1JVCB8fAorCQkJZGllICJDb3VsZCBub3QgdXBkYXRlIGluZGV4IgorCWZpCisKKwlUUkVFPSQoZ2l0IHdyaXRlLXRyZWUpIHx8IGRpZSAiQ291bGQgbm90IHdyaXRlIHRyZWUiCisJTkVXX0hFQUQ9JChlY2hvIEFubm90YXRlICRDT01NSVQgfCBnaXQgY29tbWl0LXRyZWUgJFRSRUUgJFBBUkVOVCkgfHwKKwkJZGllICJDb3VsZCBub3QgYW5ub3RhdGUiCisJZ2l0IHVwZGF0ZS1yZWYgLW0gIkFubm90YXRlICRDT01NSVQiIFwKKwkJIiRHSVRfTk9URVNfUkVGIiAkTkVXX0hFQUQgJENVUlJFTlRfSEVBRAorOzsKK3Nob3cpCisJZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJEdJVF9OT1RFU19SRUYiOiRDT01NSVQgPiAvZGV2L251bGwgfHwKKwkJZGllICJObyBub3RlIGZvciBjb21taXQgJENPTU1JVC4iCisJZ2l0IHNob3cgIiRHSVRfTk9URVNfUkVGIjokQ09NTUlUCis7OworKikKKwl1c2FnZQorZXNhYwpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtcHVsbC5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXB1bGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmIzYTAzZgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXB1bGwuc2gKQEAgLTAsMCArMSwzODEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKyMgRmV0Y2ggb25lIG9yIG1vcmUgcmVtb3RlIHJlZnMgYW5kIG1lcmdlIGl0L3RoZW0gaW50byB0aGUgY3VycmVudCBIRUFELgorCitTVUJESVJFQ1RPUllfT0s9WWVzCitPUFRJT05TX0tFRVBEQVNIREFTSD0KK09QVElPTlNfU1RVQ0tMT05HPVllcworT1BUSU9OU19TUEVDPSJcCitnaXQgcHVsbCBbb3B0aW9uc10gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0KKworRmV0Y2ggb25lIG9yIG1vcmUgcmVtb3RlIHJlZnMgYW5kIGludGVncmF0ZSBpdC90aGVtIHdpdGggdGhlIGN1cnJlbnQgSEVBRC4KKy0tCit2LHZlcmJvc2UgICAgICAgICAgICAgICAgICBiZSBtb3JlIHZlcmJvc2UKK3EscXVpZXQgICAgICAgICAgICAgICAgICAgIGJlIG1vcmUgcXVpZXQKK3Byb2dyZXNzICAgICAgICAgICAgICAgICAgIGZvcmNlIHByb2dyZXNzIHJlcG9ydGluZworCisgIE9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nCityLHJlYmFzZT9mYWxzZXx0cnVlfHByZXNlcnZlIGluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZworbiEgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZQorc3RhdCAgICAgICAgICAgICAgICAgICAgICAgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlCitzdW1tYXJ5ICAgICAgICAgICAgICAgICAgICAoc3lub255bSB0byAtLXN0YXQpCitsb2c/biAgICAgICAgICAgICAgICAgICAgICBhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UKK3NxdWFzaCAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlCitjb21taXQgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkKK2UsZWRpdCAgICAgICAgICAgICAgICAgICAgICAgZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nCitmZiAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvdyBmYXN0LWZvcndhcmQKK2ZmLW9ubHkhICAgICAgICAgICAgICAgICAgIGFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUKK3ZlcmlmeS1zaWduYXR1cmVzICAgICAgICAgIHZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZQorcyxzdHJhdGVneT1zdHJhdGVneSAgICAgICAgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlCitYLHN0cmF0ZWd5LW9wdGlvbj1vcHRpb24gICBvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5CitTLGdwZy1zaWduP2tleS1pZCAgICAgICAgICBHUEcgc2lnbiBjb21taXQKKworICBPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmcKK2FsbCAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoIGZyb20gYWxsIHJlbW90ZXMKK2EsYXBwZW5kICAgICAgICAgICAgICAgICAgIGFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZwordXBsb2FkLXBhY2s9cGF0aCAgICAgICAgICAgcGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kCitmLGZvcmNlICAgICAgICAgICAgICAgICAgICBmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoCit0LHRhZ3MgICAgICAgICAgICAgICAgICAgICBmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzCitwLHBydW5lICAgICAgICAgICAgICAgICAgICBwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZQorcmVjdXJzZS1zdWJtb2R1bGVzP29uLWRlbWFuZCBjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzCitkcnktcnVuICAgICAgICAgICAgICAgICAgICBkcnkgcnVuCitrLGtlZXAgICAgICAgICAgICAgICAgICAgICBrZWVwIGRvd25sb2FkZWQgcGFjaworZGVwdGg9ZGVwdGggICAgICAgICAgICAgICAgZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZQordW5zaGFsbG93ICAgICAgICAgICAgICAgICAgY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkKK3VwZGF0ZS1zaGFsbG93ICAgICAgICAgICAgIGFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdworcmVmbWFwPXJlZm1hcCAgICAgICAgICAgICAgc3BlY2lmeSBmZXRjaCByZWZtYXAKKyIKK3Rlc3QgJCMgLWd0IDAgJiYgYXJncz0iJCoiCisuIGdpdC1zaC1zZXR1cAorLiBnaXQtc2gtaTE4bgorc2V0X3JlZmxvZ19hY3Rpb24gInB1bGwke2FyZ3MrICRhcmdzfSIKK3JlcXVpcmVfd29ya190cmVlX2V4aXN0cworY2RfdG9fdG9wbGV2ZWwKKworCitkaWVfY29uZmxpY3QgKCkgeworICAgIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgLXIgLS1pZ25vcmUtc3VibW9kdWxlcyBIRUFEIC0tCisgICAgaWYgWyAkKGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGFkdmljZS5yZXNvbHZlQ29uZmxpY3QgfHwgZWNobyB0cnVlKSA9ICJ0cnVlIiBdOyB0aGVuCisJZGllICIkKGdldHRleHQgIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuCitQbGVhc2UsIGZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nCithcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIikiCisgICAgZWxzZQorCWRpZSAiJChnZXR0ZXh0ICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIpIgorICAgIGZpCit9CisKK2RpZV9tZXJnZSAoKSB7CisgICAgaWYgWyAkKGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGFkdmljZS5yZXNvbHZlQ29uZmxpY3QgfHwgZWNobyB0cnVlKSA9ICJ0cnVlIiBdOyB0aGVuCisJZGllICIkKGdldHRleHQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLgorUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSBtZXJnaW5nLiIpIgorICAgIGVsc2UKKwlkaWUgIiQoZ2V0dGV4dCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIikiCisgICAgZmkKK30KKwordGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiB8fCBkaWVfY29uZmxpY3QKK3Rlc3QgLWYgIiRHSVRfRElSL01FUkdFX0hFQUQiICYmIGRpZV9tZXJnZQorCitib29sX29yX3N0cmluZ19jb25maWcgKCkgeworCWdpdCBjb25maWcgLS1ib29sICIkMSIgMj4vZGV2L251bGwgfHwgZ2l0IGNvbmZpZyAiJDEiCit9CisKK3N0cmF0ZWd5X2FyZ3M9IGRpZmZzdGF0PSBub19jb21taXQ9IHNxdWFzaD0gbm9fZmY9IGZmX29ubHk9Citsb2dfYXJnPSB2ZXJib3NpdHk9IHByb2dyZXNzPSByZWN1cnNlX3N1Ym1vZHVsZXM9IHZlcmlmeV9zaWduYXR1cmVzPQorbWVyZ2VfYXJncz0gZWRpdD0gcmViYXNlX2FyZ3M9IGFsbD0gYXBwZW5kPSB1cGxvYWRfcGFjaz0gZm9yY2U9IHRhZ3M9IHBydW5lPQora2VlcD0gZGVwdGg9IHVuc2hhbGxvdz0gdXBkYXRlX3NoYWxsb3c9IHJlZm1hcD0KK2N1cnJfYnJhbmNoPSQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKQorY3Vycl9icmFuY2hfc2hvcnQ9IiR7Y3Vycl9icmFuY2gjcmVmcy9oZWFkcy99IgorcmViYXNlPSQoYm9vbF9vcl9zdHJpbmdfY29uZmlnIGJyYW5jaC4kY3Vycl9icmFuY2hfc2hvcnQucmViYXNlKQoraWYgdGVzdCAteiAiJHJlYmFzZSIKK3RoZW4KKwlyZWJhc2U9JChib29sX29yX3N0cmluZ19jb25maWcgcHVsbC5yZWJhc2UpCitmaQorCisjIFNldHVwIGRlZmF1bHQgZmFzdC1mb3J3YXJkIG9wdGlvbnMgdmlhIGBwdWxsLmZmYAorcHVsbF9mZj0kKGJvb2xfb3Jfc3RyaW5nX2NvbmZpZyBwdWxsLmZmKQorY2FzZSAiJHB1bGxfZmYiIGluCit0cnVlKQorCW5vX2ZmPS0tZmYKKwk7OworZmFsc2UpCisJbm9fZmY9LS1uby1mZgorCTs7Citvbmx5KQorCWZmX29ubHk9LS1mZi1vbmx5CisJOzsKK2VzYWMKKworCitkcnlfcnVuPQord2hpbGUgOgorZG8KKwljYXNlICIkMSIgaW4KKwktcXwtLXF1aWV0KQorCQl2ZXJib3NpdHk9IiR2ZXJib3NpdHkgLXEiIDs7CisJLXZ8LS12ZXJib3NlKQorCQl2ZXJib3NpdHk9IiR2ZXJib3NpdHkgLXYiIDs7CisJLS1wcm9ncmVzcykKKwkJcHJvZ3Jlc3M9LS1wcm9ncmVzcyA7OworCS0tbm8tcHJvZ3Jlc3MpCisJCXByb2dyZXNzPS0tbm8tcHJvZ3Jlc3MgOzsKKwktbnwtLW5vLXN0YXR8LS1uby1zdW1tYXJ5KQorCQlkaWZmc3RhdD0tLW5vLXN0YXQgOzsKKwktLXN0YXR8LS1zdW1tYXJ5KQorCQlkaWZmc3RhdD0tLXN0YXQgOzsKKwktLWxvZ3wtLWxvZz0qfC0tbm8tbG9nKQorCQlsb2dfYXJnPSIkMSIgOzsKKwktLW5vLWNvbW1pdCkKKwkJbm9fY29tbWl0PS0tbm8tY29tbWl0IDs7CisJLS1jb21taXQpCisJCW5vX2NvbW1pdD0tLWNvbW1pdCA7OworCS1lfC0tZWRpdCkKKwkJZWRpdD0tLWVkaXQgOzsKKwktLW5vLWVkaXQpCisJCWVkaXQ9LS1uby1lZGl0IDs7CisJLS1zcXVhc2gpCisJCXNxdWFzaD0tLXNxdWFzaCA7OworCS0tbm8tc3F1YXNoKQorCQlzcXVhc2g9LS1uby1zcXVhc2ggOzsKKwktLWZmKQorCQlub19mZj0tLWZmIDs7CisJLS1uby1mZikKKwkJbm9fZmY9LS1uby1mZiA7OworCS0tZmYtb25seSkKKwkJZmZfb25seT0tLWZmLW9ubHkgOzsKKwktcyp8LS1zdHJhdGVneT0qKQorCQlzdHJhdGVneV9hcmdzPSIkc3RyYXRlZ3lfYXJncyAkMSIKKwkJOzsKKwktWCp8LS1zdHJhdGVneS1vcHRpb249KikKKwkJbWVyZ2VfYXJncz0iJG1lcmdlX2FyZ3MgJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiQxIikiCisJCTs7CisJLXIqfC0tcmViYXNlPSopCisJCXJlYmFzZT0iJHsxIyo9fSIKKwkJOzsKKwktLXJlYmFzZSkKKwkJcmViYXNlPXRydWUKKwkJOzsKKwktLW5vLXJlYmFzZSkKKwkJcmViYXNlPWZhbHNlCisJCTs7CisJLS1yZWN1cnNlLXN1Ym1vZHVsZXMpCisJCXJlY3Vyc2Vfc3VibW9kdWxlcz0tLXJlY3Vyc2Utc3VibW9kdWxlcworCQk7OworCS0tcmVjdXJzZS1zdWJtb2R1bGVzPSopCisJCXJlY3Vyc2Vfc3VibW9kdWxlcz0iJDEiCisJCTs7CisJLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMpCisJCXJlY3Vyc2Vfc3VibW9kdWxlcz0tLW5vLXJlY3Vyc2Utc3VibW9kdWxlcworCQk7OworCS0tdmVyaWZ5LXNpZ25hdHVyZXMpCisJCXZlcmlmeV9zaWduYXR1cmVzPS0tdmVyaWZ5LXNpZ25hdHVyZXMKKwkJOzsKKwktLW5vLXZlcmlmeS1zaWduYXR1cmVzKQorCQl2ZXJpZnlfc2lnbmF0dXJlcz0tLW5vLXZlcmlmeS1zaWduYXR1cmVzCisJCTs7CisJLS1ncGctc2lnbnwtUykKKwkJZ3BnX3NpZ25fYXJncz0tUworCQk7OworCS0tZ3BnLXNpZ249KikKKwkJZ3BnX3NpZ25fYXJncz0kKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiLVMkezEjLS1ncGctc2lnbj19IikKKwkJOzsKKwktUyopCisJCWdwZ19zaWduX2FyZ3M9JChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiQxIikKKwkJOzsKKwktLWRyeS1ydW4pCisJCWRyeV9ydW49LS1kcnktcnVuCisJCTs7CisJLS1hbGx8LS1uby1hbGwpCisJCWFsbD0kMSA7OworCS1hfC0tYXBwZW5kfC0tbm8tYXBwZW5kKQorCQlhcHBlbmQ9JDEgOzsKKwktLXVwbG9hZC1wYWNrPSp8LS1uby11cGxvYWQtcGFjaykKKwkJdXBsb2FkX3BhY2s9JDEgOzsKKwktZnwtLWZvcmNlfC0tbm8tZm9yY2UpCisJCWZvcmNlPSIkZm9yY2UgJDEiIDs7CisJLXR8LS10YWdzfC0tbm8tdGFncykKKwkJdGFncz0kMSA7OworCS1wfC0tcHJ1bmV8LS1uby1wcnVuZSkKKwkJcHJ1bmU9JDEgOzsKKwkta3wtLWtlZXB8LS1uby1rZWVwKQorCQlrZWVwPSQxIDs7CisJLS1kZXB0aD0qfC0tbm8tZGVwdGgpCisJCWRlcHRoPSQxIDs7CisJLS11bnNoYWxsb3d8LS1uby11bnNoYWxsb3cpCisJCXVuc2hhbGxvdz0kMSA7OworCS0tdXBkYXRlLXNoYWxsb3d8LS1uby11cGRhdGUtc2hhbGxvdykKKwkJdXBkYXRlX3NoYWxsb3c9JDEgOzsKKwktLXJlZm1hcD0qfC0tbm8tcmVmbWFwKQorCQlyZWZtYXA9JDEgOzsKKwktaHwtLWhlbHAtYWxsKQorCQl1c2FnZQorCQk7OworCS0tKQorCQlzaGlmdAorCQlicmVhaworCQk7OworCSopCisJCXVzYWdlCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK2Nhc2UgIiRyZWJhc2UiIGluCitwcmVzZXJ2ZSkKKwlyZWJhc2U9dHJ1ZQorCXJlYmFzZV9hcmdzPS0tcHJlc2VydmUtbWVyZ2VzCisJOzsKK3RydWV8ZmFsc2V8JycpCisJOzsKKyopCisJZWNobyAiSW52YWxpZCB2YWx1ZSBmb3IgLS1yZWJhc2UsIHNob3VsZCBiZSB0cnVlLCBmYWxzZSwgb3IgcHJlc2VydmUiCisJdXNhZ2UKKwlleGl0IDEKKwk7OworZXNhYworCitlcnJvcl9vbl9ub19tZXJnZV9jYW5kaWRhdGVzICgpIHsKKwlleGVjID4mMgorCisJaWYgdGVzdCB0cnVlID0gIiRyZWJhc2UiCisJdGhlbgorCQlvcF90eXBlPXJlYmFzZQorCQlvcF9wcmVwPWFnYWluc3QKKwllbHNlCisJCW9wX3R5cGU9bWVyZ2UKKwkJb3BfcHJlcD13aXRoCisJZmkKKworCXVwc3RyZWFtPSQoZ2l0IGNvbmZpZyAiYnJhbmNoLiRjdXJyX2JyYW5jaF9zaG9ydC5tZXJnZSIpCisJcmVtb3RlPSQoZ2l0IGNvbmZpZyAiYnJhbmNoLiRjdXJyX2JyYW5jaF9zaG9ydC5yZW1vdGUiKQorCisJaWYgWyAkIyAtZ3QgMSBdOyB0aGVuCisJCWlmIFsgIiRyZWJhc2UiID0gdHJ1ZSBdOyB0aGVuCisJCQlwcmludGYgIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCAiCisJCWVsc2UKKwkJCXByaW50ZiAiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgIgorCQlmaQorCQllY2hvICJhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorCQllY2hvICJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vIgorCQllY2hvICJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKKwllbGlmIFsgJCMgLWd0IDAgXSAmJiBbICIkMSIgIT0gIiRyZW1vdGUiIF07IHRoZW4KKwkJZWNobyAiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICckMScsIGJ1dCBkaWQgbm90IHNwZWNpZnkiCisJCWVjaG8gImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlIgorCQllY2hvICJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKKwllbGlmIFsgLXogIiRjdXJyX2JyYW5jaCIgLW8gLXogIiR1cHN0cmVhbSIgXTsgdGhlbgorCQkuIGdpdC1wYXJzZS1yZW1vdGUKKwkJZXJyb3Jfb25fbWlzc2luZ19kZWZhdWx0X3Vwc3RyZWFtICJwdWxsIiAkb3BfdHlwZSAkb3BfcHJlcCBcCisJCQkiZ2l0IHB1bGwgPHJlbW90ZT4gPGJyYW5jaD4iCisJZWxzZQorCQllY2hvICJZb3VyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRvICRvcF90eXBlICRvcF9wcmVwIHRoZSByZWYgJyR7dXBzdHJlYW0jcmVmcy9oZWFkcy99JyIKKwkJZWNobyAiZnJvbSB0aGUgcmVtb3RlLCBidXQgbm8gc3VjaCByZWYgd2FzIGZldGNoZWQuIgorCWZpCisJZXhpdCAxCit9CisKK3Rlc3QgdHJ1ZSA9ICIkcmViYXNlIiAmJiB7CisJaWYgISBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IEhFQUQgPi9kZXYvbnVsbAorCXRoZW4KKwkJIyBPbiBhbiB1bmJvcm4gYnJhbmNoCisJCWlmIHRlc3QgLWYgIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIGluZGV4KSIKKwkJdGhlbgorCQkJZGllICIkKGdldHRleHQgInVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleCIpIgorCQlmaQorCWVsc2UKKwkJcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgInB1bGwgd2l0aCByZWJhc2UiICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorCWZpCisJb2xkcmVtb3RlcmVmPSAmJgorCXRlc3QgLW4gIiRjdXJyX2JyYW5jaCIgJiYKKwkuIGdpdC1wYXJzZS1yZW1vdGUgJiYKKwlyZW1vdGVyZWY9IiQoZ2V0X3JlbW90ZV9tZXJnZV9icmFuY2ggIiRAIiAyPi9kZXYvbnVsbCkiICYmCisJb2xkcmVtb3RlcmVmPSQoZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50ICIkcmVtb3RlcmVmIiAkY3Vycl9icmFuY2ggMj4vZGV2L251bGwpCit9CitvcmlnX2hlYWQ9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IEhFQUQpCitnaXQgZmV0Y2ggJHZlcmJvc2l0eSAkcHJvZ3Jlc3MgJGRyeV9ydW4gJHJlY3Vyc2Vfc3VibW9kdWxlcyAkYWxsICRhcHBlbmQgXAorJHt1cGxvYWRfcGFjazorIiR1cGxvYWRfcGFjayJ9ICRmb3JjZSAkdGFncyAkcHJ1bmUgJGtlZXAgJGRlcHRoICR1bnNoYWxsb3cgJHVwZGF0ZV9zaGFsbG93IFwKKyRyZWZtYXAgLS11cGRhdGUtaGVhZC1vayAiJEAiIHx8IGV4aXQgMQordGVzdCAteiAiJGRyeV9ydW4iIHx8IGV4aXQgMAorCitjdXJyX2hlYWQ9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IEhFQUQpCitpZiB0ZXN0IC1uICIkb3JpZ19oZWFkIiAmJiB0ZXN0ICIkY3Vycl9oZWFkIiAhPSAiJG9yaWdfaGVhZCIKK3RoZW4KKwkjIFRoZSBmZXRjaCBpbnZvbHZlZCB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2guCisKKwkjIFRoZSB3b3JraW5nIHRyZWUgYW5kIHRoZSBpbmRleCBmaWxlIGlzIHN0aWxsIGJhc2VkIG9uIHRoZQorCSMgJG9yaWdfaGVhZCBjb21taXQsIGJ1dCB3ZSBhcmUgbWVyZ2luZyBpbnRvICRjdXJyX2hlYWQuCisJIyBGaXJzdCB1cGRhdGUgdGhlIHdvcmtpbmcgdHJlZSB0byBtYXRjaCAkY3Vycl9oZWFkLgorCisJZXZhbF9nZXR0ZXh0bG4gIldhcm5pbmc6IGZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuCitXYXJuaW5nOiBmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbQorV2FybmluZzogY29tbWl0IFwkb3JpZ19oZWFkLiIgPiYyCisJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2gKKwlnaXQgcmVhZC10cmVlIC11IC1tICIkb3JpZ19oZWFkIiAiJGN1cnJfaGVhZCIgfHwKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS4KK0FmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb20KKyQgZ2l0IGRpZmYgXCRvcmlnX2hlYWQKK291dHB1dCwgcnVuCiskIGdpdCByZXNldCAtLWhhcmQKK3RvIHJlY292ZXIuIikiCisKK2ZpCisKK21lcmdlX2hlYWQ9JChzZWQgLWUgJy8Jbm90LWZvci1tZXJnZQkvZCcgXAorCS1lICdzLwkuKi8vJyAiJEdJVF9ESVIiL0ZFVENIX0hFQUQgfCBcCisJdHIgJ1wwMTInICcgJykKKworY2FzZSAiJG1lcmdlX2hlYWQiIGluCisnJykKKwllcnJvcl9vbl9ub19tZXJnZV9jYW5kaWRhdGVzICIkQCIKKwk7OworPyonICc/KikKKwlpZiB0ZXN0IC16ICIkb3JpZ19oZWFkIgorCXRoZW4KKwkJZGllICIkKGdldHRleHQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQiKSIKKwlmaQorCWlmIHRlc3QgdHJ1ZSA9ICIkcmViYXNlIgorCXRoZW4KKwkJZGllICIkKGdldHRleHQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcyIpIgorCWZpCisJOzsKK2VzYWMKKworIyBQdWxsaW5nIGludG8gdW5ib3JuIGJyYW5jaDogYSBzaG9ydGhhbmQgZm9yIGJyYW5jaGluZyBvZmYKKyMgRkVUQ0hfSEVBRCwgZm9yIGxhenkgdHlwZXJzLgoraWYgdGVzdCAteiAiJG9yaWdfaGVhZCIKK3RoZW4KKwkjIFR3by13YXkgbWVyZ2U6IHdlIGNsYWltIHRoZSBpbmRleCBpcyBiYXNlZCBvbiBhbiBlbXB0eSB0cmVlLAorCSMgYW5kIHRyeSB0byBmYXN0LWZvcndhcmQgdG8gSEVBRC4gIFRoaXMgZW5zdXJlcyB3ZSB3aWxsIG5vdAorCSMgbG9zZSBpbmRleC93b3JrdHJlZSBjaGFuZ2VzIHRoYXQgdGhlIHVzZXIgYWxyZWFkeSBtYWRlIG9uCisJIyB0aGUgdW5ib3JuIGJyYW5jaC4KKwllbXB0eV90cmVlPTRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKKwlnaXQgcmVhZC10cmVlIC1tIC11ICRlbXB0eV90cmVlICRtZXJnZV9oZWFkICYmCisJZ2l0IHVwZGF0ZS1yZWYgLW0gImluaXRpYWwgcHVsbCIgSEVBRCAkbWVyZ2VfaGVhZCAiJGN1cnJfaGVhZCIKKwlleGl0CitmaQorCitpZiB0ZXN0IHRydWUgPSAiJHJlYmFzZSIKK3RoZW4KKwlvPSQoZ2l0IHNob3ctYnJhbmNoIC0tbWVyZ2UtYmFzZSAkY3Vycl9icmFuY2ggJG1lcmdlX2hlYWQgJG9sZHJlbW90ZXJlZikKKwlpZiB0ZXN0ICIkb2xkcmVtb3RlcmVmIiA9ICIkbyIKKwl0aGVuCisJCXVuc2V0IG9sZHJlbW90ZXJlZgorCWZpCitmaQorCitjYXNlICIkcmViYXNlIiBpbgordHJ1ZSkKKwlldmFsPSJnaXQtcmViYXNlICRkaWZmc3RhdCAkc3RyYXRlZ3lfYXJncyAkbWVyZ2VfYXJncyAkcmViYXNlX2FyZ3MgJHZlcmJvc2l0eSIKKwlldmFsPSIkZXZhbCAkZ3BnX3NpZ25fYXJncyIKKwlldmFsPSIkZXZhbCAtLW9udG8gJG1lcmdlX2hlYWQgJHtvbGRyZW1vdGVyZWY6LSRtZXJnZV9oZWFkfSIKKwk7OworKikKKwlldmFsPSJnaXQtbWVyZ2UgJGRpZmZzdGF0ICRub19jb21taXQgJHZlcmlmeV9zaWduYXR1cmVzICRlZGl0ICRzcXVhc2ggJG5vX2ZmICRmZl9vbmx5IgorCWV2YWw9IiRldmFsICRsb2dfYXJnICRzdHJhdGVneV9hcmdzICRtZXJnZV9hcmdzICR2ZXJib3NpdHkgJHByb2dyZXNzIgorCWV2YWw9IiRldmFsICRncGdfc2lnbl9hcmdzIgorCWV2YWw9IiRldmFsIEZFVENIX0hFQUQiCisJOzsKK2VzYWMKK2V2YWwgImV4ZWMgJGV2YWwiCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1yZW1vdGUucGVybCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXJlbW90ZS5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ0MmRmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC1yZW1vdGUucGVybApAQCAtMCwwICsxLDQ3NCBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3VzZSBzdHJpY3Q7Cit1c2UgR2l0OworbXkgJGdpdCA9IEdpdC0+cmVwb3NpdG9yeSgpOworCitzdWIgYWRkX3JlbW90ZV9jb25maWcgeworCW15ICgkaGFzaCwgJG5hbWUsICR3aGF0LCAkdmFsdWUpID0gQF87CisJaWYgKCR3aGF0IGVxICd1cmwnKSB7CisJCSMgSGF2aW5nIG1vcmUgdGhhbiBvbmUgaXMgT2sgLS0gaXQgaXMgdXNlZCBmb3IgcHVzaC4KKwkJaWYgKCEgZXhpc3RzICRoYXNoLT57J1VSTCd9KSB7CisJCQkkaGFzaC0+eyRuYW1lfXsnVVJMJ30gPSAkdmFsdWU7CisJCX0KKwl9CisJZWxzaWYgKCR3aGF0IGVxICdmZXRjaCcpIHsKKwkJJGhhc2gtPnskbmFtZX17J0ZFVENIJ30gfHw9IFtdOworCQlwdXNoIEB7JGhhc2gtPnskbmFtZX17J0ZFVENIJ319LCAkdmFsdWU7CisJfQorCWVsc2lmICgkd2hhdCBlcSAncHVzaCcpIHsKKwkJJGhhc2gtPnskbmFtZX17J1BVU0gnfSB8fD0gW107CisJCXB1c2ggQHskaGFzaC0+eyRuYW1lfXsnUFVTSCd9fSwgJHZhbHVlOworCX0KKwlpZiAoIWV4aXN0cyAkaGFzaC0+eyRuYW1lfXsnU09VUkNFJ30pIHsKKwkJJGhhc2gtPnskbmFtZX17J1NPVVJDRSd9ID0gJ2NvbmZpZyc7CisJfQorfQorCitzdWIgYWRkX3JlbW90ZV9yZW1vdGVzIHsKKwlteSAoJGhhc2gsICRmaWxlLCAkbmFtZSkgPSBAXzsKKworCWlmIChleGlzdHMgJGhhc2gtPnskbmFtZX0pIHsKKwkJJGhhc2gtPnskbmFtZX17J1dBUk5JTkcnfSA9ICdpZ25vcmVkIGR1ZSB0byBjb25maWcnOworCQlyZXR1cm47CisJfQorCisJbXkgJGZoOworCWlmICghb3BlbigkZmgsICc8JywgJGZpbGUpKSB7CisJCXByaW50IFNUREVSUiAiV2FybmluZzogY2Fubm90IG9wZW4gJGZpbGVcbiI7CisJCXJldHVybjsKKwl9CisJbXkgJGl0ID0geyAnU09VUkNFJyA9PiAncmVtb3RlcycgfTsKKwkkaGFzaC0+eyRuYW1lfSA9ICRpdDsKKwl3aGlsZSAoPCRmaD4pIHsKKwkJY2hvbXA7CisJCWlmICgvXlVSTDpccyooLiopJC8pIHsKKwkJCSMgSGF2aW5nIG1vcmUgdGhhbiBvbmUgaXMgT2sgLS0gaXQgaXMgdXNlZCBmb3IgcHVzaC4KKwkJCWlmICghIGV4aXN0cyAkaXQtPnsnVVJMJ30pIHsKKwkJCQkkaXQtPnsnVVJMJ30gPSAkMTsKKwkJCX0KKwkJfQorCQllbHNpZiAoL15QdXNoOlxzKiguKikkLykgeworCQkJJGl0LT57J1BVU0gnfSB8fD0gW107CisJCQlwdXNoIEB7JGl0LT57J1BVU0gnfX0sICQxOworCQl9CisJCWVsc2lmICgvXlB1bGw6XHMqKC4qKSQvKSB7CisJCQkkaXQtPnsnRkVUQ0gnfSB8fD0gW107CisJCQlwdXNoIEB7JGl0LT57J0ZFVENIJ319LCAkMTsKKwkJfQorCQllbHNpZiAoL15cIy8pIHsKKwkJCTsgIyBpZ25vcmUKKwkJfQorCQllbHNlIHsKKwkJCXByaW50IFNUREVSUiAiV2FybmluZzogZnVubnkgbGluZSBpbiAkZmlsZTogJF9cbiI7CisJCX0KKwl9CisJY2xvc2UoJGZoKTsKK30KKworc3ViIGxpc3RfcmVtb3RlIHsKKwlteSAoJGdpdCkgPSBAXzsKKwlteSAlc2VlbiA9ICgpOworCW15IEByZW1vdGVzID0gZXZhbCB7CisJCSRnaXQtPmNvbW1hbmQocXcoY29uZmlnIC0tZ2V0LXJlZ2V4cCksICdecmVtb3RlXC4nKTsKKwl9OworCWZvciAoQHJlbW90ZXMpIHsKKwkJaWYgKC9ecmVtb3RlXC4oXFMrPylcLihbXi5cc10rKVxzKyguKikkLykgeworCQkJYWRkX3JlbW90ZV9jb25maWcoXCVzZWVuLCAkMSwgJDIsICQzKTsKKwkJfQorCX0KKworCW15ICRkaXIgPSAkZ2l0LT5yZXBvX3BhdGgoKSAuICIvcmVtb3RlcyI7CisJaWYgKG9wZW5kaXIobXkgJGRoLCAkZGlyKSkgeworCQlsb2NhbCAkXzsKKwkJd2hpbGUgKCRfID0gcmVhZGRpcigkZGgpKSB7CisJCQljaG9tcDsKKwkJCW5leHQgaWYgKCEgLWYgIiRkaXIvJF8iIHx8ICEgLXIgXyk7CisJCQlhZGRfcmVtb3RlX3JlbW90ZXMoXCVzZWVuLCAiJGRpci8kXyIsICRfKTsKKwkJfQorCX0KKworCXJldHVybiBcJXNlZW47Cit9CisKK3N1YiBhZGRfYnJhbmNoX2NvbmZpZyB7CisJbXkgKCRoYXNoLCAkbmFtZSwgJHdoYXQsICR2YWx1ZSkgPSBAXzsKKwlpZiAoJHdoYXQgZXEgJ3JlbW90ZScpIHsKKwkJaWYgKGV4aXN0cyAkaGFzaC0+eyRuYW1lfXsnUkVNT1RFJ30pIHsKKwkJCXByaW50IFNUREVSUiAiV2FybmluZzogbW9yZSB0aGFuIG9uZSBicmFuY2guJG5hbWUucmVtb3RlXG4iOworCQl9CisJCSRoYXNoLT57JG5hbWV9eydSRU1PVEUnfSA9ICR2YWx1ZTsKKwl9CisJZWxzaWYgKCR3aGF0IGVxICdtZXJnZScpIHsKKwkJJGhhc2gtPnskbmFtZX17J01FUkdFJ30gfHw9IFtdOworCQlwdXNoIEB7JGhhc2gtPnskbmFtZX17J01FUkdFJ319LCAkdmFsdWU7CisJfQorfQorCitzdWIgbGlzdF9icmFuY2ggeworCW15ICgkZ2l0KSA9IEBfOworCW15ICVzZWVuID0gKCk7CisJbXkgQGJyYW5jaGVzID0gZXZhbCB7CisJCSRnaXQtPmNvbW1hbmQocXcoY29uZmlnIC0tZ2V0LXJlZ2V4cCksICdeYnJhbmNoXC4nKTsKKwl9OworCWZvciAoQGJyYW5jaGVzKSB7CisJCWlmICgvXmJyYW5jaFwuKFteLl0qKVwuKFxTKilccysoLiopJC8pIHsKKwkJCWFkZF9icmFuY2hfY29uZmlnKFwlc2VlbiwgJDEsICQyLCAkMyk7CisJCX0KKwl9CisKKwlyZXR1cm4gXCVzZWVuOworfQorCitteSAkcmVtb3RlID0gbGlzdF9yZW1vdGUoJGdpdCk7CitteSAkYnJhbmNoID0gbGlzdF9icmFuY2goJGdpdCk7CisKK3N1YiB1cGRhdGVfbHNfcmVtb3RlIHsKKwlteSAoJGhhcmRlciwgJGluZm8pID0gQF87CisKKwlyZXR1cm4gaWYgKCgkaGFyZGVyID09IDApIHx8CisJCSAgICgoJGhhcmRlciA9PSAxKSAmJiBleGlzdHMgJGluZm8tPnsnTFNfUkVNT1RFJ30pKTsKKworCW15IEByZWYgPSBtYXAgeyBzfHJlZnMvaGVhZHMvfHw7ICRfOyB9IGtleXMgJXskZ2l0LT5yZW1vdGVfcmVmcygkaW5mby0+eydVUkwnfSwgWyAnaGVhZHMnIF0pfTsKKwkkaW5mby0+eydMU19SRU1PVEUnfSA9IFxAcmVmOworfQorCitzdWIgbGlzdF93aWxkY2FyZF9tYXBwaW5nIHsKKwlteSAoJGZvcmNlZCwgJG91cnMsICRscykgPSBAXzsKKwlteSAlcmVmczsKKwlmb3IgKEAkbHMpIHsKKwkJJHJlZnN7JF99ID0gMDE7ICMgYml0ICMwIHRvIHNheSAidGhleSBoYXZlIgorCX0KKwlmb3IgKCRnaXQtPmNvbW1hbmQoJ2Zvci1lYWNoLXJlZicsICJyZWZzL3JlbW90ZXMvJG91cnMiKSkgeworCQljaG9tcDsKKwkJbmV4dCB1bmxlc3MgKHN8XlswLTlhLWZdezQwfVxzW2Etel0rXHNyZWZzL3JlbW90ZXMvJG91cnMvfHwpOworCQluZXh0IGlmICgkXyBlcSAnSEVBRCcpOworCQkkcmVmc3skX30gfHw9IDA7CisJCSRyZWZzeyRffSB8PSAwMjsgIyBiaXQgIzEgdG8gc2F5ICJ3ZSBoYXZlIgorCX0KKwlteSAoQG5ldywgQHN0YWxlLCBAdHJhY2tlZCk7CisJZm9yIChzb3J0IGtleXMgJXJlZnMpIHsKKwkJbXkgJGhhdmUgPSAkcmVmc3skX307CisJCWlmICgkaGF2ZSA9PSAxKSB7CisJCQlwdXNoIEBuZXcsICRfOworCQl9CisJCWVsc2lmICgkaGF2ZSA9PSAyKSB7CisJCQlwdXNoIEBzdGFsZSwgJF87CisJCX0KKwkJZWxzaWYgKCRoYXZlID09IDMpIHsKKwkJCXB1c2ggQHRyYWNrZWQsICRfOworCQl9CisJfQorCXJldHVybiBcQG5ldywgXEBzdGFsZSwgXEB0cmFja2VkOworfQorCitzdWIgbGlzdF9tYXBwaW5nIHsKKwlteSAoJG5hbWUsICRpbmZvKSA9IEBfOworCW15ICRmZXRjaCA9ICRpbmZvLT57J0ZFVENIJ307CisJbXkgJGxzID0gJGluZm8tPnsnTFNfUkVNT1RFJ307CisJbXkgKEBuZXcsIEBzdGFsZSwgQHRyYWNrZWQpOworCisJZm9yIChAJGZldGNoKSB7CisJCW5leHQgdW5sZXNzICgvKFwrKT8oW146XSspOiguKikvKTsKKwkJbXkgKCRmb3JjZWQsICR0aGVpcnMsICRvdXJzKSA9ICgkMSwgJDIsICQzKTsKKwkJaWYgKCR0aGVpcnMgZXEgJ3JlZnMvaGVhZHMvKicgJiYKKwkJICAgICRvdXJzID1+IC9ecmVmc1wvcmVtb3Rlc1wvKC4qKVwvXCokLykgeworCQkJIyB3aWxkY2FyZCBtYXBwaW5nCisJCQlteSAoJHdfbmV3LCAkd19zdGFsZSwgJHdfdHJhY2tlZCkKKwkJCQk9IGxpc3Rfd2lsZGNhcmRfbWFwcGluZygkZm9yY2VkLCAkMSwgJGxzKTsKKwkJCXB1c2ggQG5ldywgQCR3X25ldzsKKwkJCXB1c2ggQHN0YWxlLCBAJHdfc3RhbGU7CisJCQlwdXNoIEB0cmFja2VkLCBAJHdfdHJhY2tlZDsKKwkJfQorCQllbHNpZiAoJHRoZWlycyA9fiAvXCovIHx8ICRvdXJzID1+IC9cKi8pIHsKKwkJCXByaW50IFNUREVSUiAiV2FybmluZzogdW5yZWNvZ25pemVkIG1hcHBpbmcgaW4gcmVtb3Rlcy4kbmFtZS5mZXRjaDogJF9cbiI7CisJCX0KKwkJZWxzaWYgKCR0aGVpcnMgPX4gc3xecmVmcy9oZWFkcy98fCkgeworCQkJaWYgKCFncmVwIHsgJF8gZXEgJHRoZWlycyB9IEAkbHMpIHsKKwkJCQlwdXNoIEBzdGFsZSwgJHRoZWlyczsKKwkJCX0KKwkJCWVsc2lmICgkb3VycyBuZSAnJykgeworCQkJCXB1c2ggQHRyYWNrZWQsICR0aGVpcnM7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIFxAbmV3LCBcQHN0YWxlLCBcQHRyYWNrZWQ7Cit9CisKK3N1YiBzaG93X21hcHBpbmcgeworCW15ICgkbmFtZSwgJGluZm8pID0gQF87CisJbXkgKCRuZXcsICRzdGFsZSwgJHRyYWNrZWQpID0gbGlzdF9tYXBwaW5nKCRuYW1lLCAkaW5mbyk7CisJaWYgKEAkbmV3KSB7CisJCXByaW50ICIgIE5ldyByZW1vdGUgYnJhbmNoZXMgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyRuYW1lKVxuIjsKKwkJcHJpbnQgIiAgICBAJG5ld1xuIjsKKwl9CisJaWYgKEAkc3RhbGUpIHsKKwkJcHJpbnQgIiAgU3RhbGUgdHJhY2tpbmcgYnJhbmNoZXMgaW4gcmVtb3Rlcy8kbmFtZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJylcbiI7CisJCXByaW50ICIgICAgQCRzdGFsZVxuIjsKKwl9CisJaWYgKEAkdHJhY2tlZCkgeworCQlwcmludCAiICBUcmFja2VkIHJlbW90ZSBicmFuY2hlc1xuIjsKKwkJcHJpbnQgIiAgICBAJHRyYWNrZWRcbiI7CisJfQorfQorCitzdWIgcHJ1bmVfcmVtb3RlIHsKKwlteSAoJG5hbWUsICRsc19yZW1vdGUpID0gQF87CisJaWYgKCFleGlzdHMgJHJlbW90ZS0+eyRuYW1lfSkgeworCQlwcmludCBTVERFUlIgIk5vIHN1Y2ggcmVtb3RlICRuYW1lXG4iOworCQlyZXR1cm4gMTsKKwl9CisJbXkgJGluZm8gPSAkcmVtb3RlLT57JG5hbWV9OworCXVwZGF0ZV9sc19yZW1vdGUoJGxzX3JlbW90ZSwgJGluZm8pOworCisJbXkgKCRuZXcsICRzdGFsZSwgJHRyYWNrZWQpID0gbGlzdF9tYXBwaW5nKCRuYW1lLCAkaW5mbyk7CisJbXkgJHByZWZpeCA9ICJyZWZzL3JlbW90ZXMvJG5hbWUiOworCWZvcmVhY2ggbXkgJHRvX3BydW5lIChAJHN0YWxlKSB7CisJCW15IEB2ID0gJGdpdC0+Y29tbWFuZChxdyhyZXYtcGFyc2UgLS12ZXJpZnkpLCAiJHByZWZpeC8kdG9fcHJ1bmUiKTsKKwkJJGdpdC0+Y29tbWFuZChxdyh1cGRhdGUtcmVmIC1kKSwgIiRwcmVmaXgvJHRvX3BydW5lIiwgJHZbMF0pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3ViIHNob3dfcmVtb3RlIHsKKwlteSAoJG5hbWUsICRsc19yZW1vdGUpID0gQF87CisJaWYgKCFleGlzdHMgJHJlbW90ZS0+eyRuYW1lfSkgeworCQlwcmludCBTVERFUlIgIk5vIHN1Y2ggcmVtb3RlICRuYW1lXG4iOworCQlyZXR1cm4gMTsKKwl9CisJbXkgJGluZm8gPSAkcmVtb3RlLT57JG5hbWV9OworCXVwZGF0ZV9sc19yZW1vdGUoJGxzX3JlbW90ZSwgJGluZm8pOworCisJcHJpbnQgIiogcmVtb3RlICRuYW1lXG4iOworCXByaW50ICIgIFVSTDogJGluZm8tPnsnVVJMJ31cbiI7CisJZm9yIG15ICRicmFuY2huYW1lIChzb3J0IGtleXMgJSRicmFuY2gpIHsKKwkJbmV4dCB1bmxlc3MgKGRlZmluZWQgJGJyYW5jaC0+eyRicmFuY2huYW1lfXsnUkVNT1RFJ30gJiYKKwkJCSAgICAgJGJyYW5jaC0+eyRicmFuY2huYW1lfXsnUkVNT1RFJ30gZXEgJG5hbWUpOworCQlteSBAbWVyZ2VkID0gbWFwIHsKKwkJCXN8XnJlZnMvaGVhZHMvfHw7CisJCQkkXzsKKwkJfSBzcGxpdCgnICcsIkB7JGJyYW5jaC0+eyRicmFuY2huYW1lfXsnTUVSR0UnfX0iKTsKKwkJbmV4dCB1bmxlc3MgKEBtZXJnZWQpOworCQlwcmludCAiICBSZW1vdGUgYnJhbmNoKGVzKSBtZXJnZWQgd2l0aCAnZ2l0IHB1bGwnIHdoaWxlIG9uIGJyYW5jaCAkYnJhbmNobmFtZVxuIjsKKwkJcHJpbnQgIiAgICBAbWVyZ2VkXG4iOworCX0KKwlpZiAoJGluZm8tPnsnTFNfUkVNT1RFJ30pIHsKKwkJc2hvd19tYXBwaW5nKCRuYW1lLCAkaW5mbyk7CisJfQorCWlmICgkaW5mby0+eydQVVNIJ30pIHsKKwkJbXkgQHB1c2hlZCA9IG1hcCB7CisJCQlzfF5yZWZzL2hlYWRzL3x8OworCQkJc3xeXCtyZWZzL2hlYWRzL3wrfDsKKwkJCXN8OnJlZnMvaGVhZHMvfDp8OworCQkJJF87CisJCX0gQHskaW5mby0+eydQVVNIJ319OworCQlwcmludCAiICBMb2NhbCBicmFuY2goZXMpIHB1c2hlZCB3aXRoICdnaXQgcHVzaCdcbiI7CisJCXByaW50ICIgICAgQHB1c2hlZFxuIjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N1YiBhZGRfcmVtb3RlIHsKKwlteSAoJG5hbWUsICR1cmwsICRvcHRzKSA9IEBfOworCWlmIChleGlzdHMgJHJlbW90ZS0+eyRuYW1lfSkgeworCQlwcmludCBTVERFUlIgInJlbW90ZSAkbmFtZSBhbHJlYWR5IGV4aXN0cy5cbiI7CisJCWV4aXQoMSk7CisJfQorCSRnaXQtPmNvbW1hbmQoJ2NvbmZpZycsICJyZW1vdGUuJG5hbWUudXJsIiwgJHVybCk7CisJbXkgJHRyYWNrID0gJG9wdHMtPnsndHJhY2snfSB8fCBbIioiXTsKKworCWZvciAoQCR0cmFjaykgeworCQkkZ2l0LT5jb21tYW5kKCdjb25maWcnLCAnLS1hZGQnLCAicmVtb3RlLiRuYW1lLmZldGNoIiwKKwkJCQkkb3B0cy0+eydtaXJyb3InfSA/CisJCQkJIityZWZzLyRfOnJlZnMvJF8iIDoKKwkJCQkiK3JlZnMvaGVhZHMvJF86cmVmcy9yZW1vdGVzLyRuYW1lLyRfIik7CisJfQorCWlmICgkb3B0cy0+eydmZXRjaCd9KSB7CisJCSRnaXQtPmNvbW1hbmQoJ2ZldGNoJywgJG5hbWUpOworCX0KKwlpZiAoZXhpc3RzICRvcHRzLT57J21hc3Rlcid9KSB7CisJCSRnaXQtPmNvbW1hbmQoJ3N5bWJvbGljLXJlZicsICJyZWZzL3JlbW90ZXMvJG5hbWUvSEVBRCIsCisJCQkgICAgICAicmVmcy9yZW1vdGVzLyRuYW1lLyRvcHRzLT57J21hc3Rlcid9Iik7CisJfQorfQorCitzdWIgdXBkYXRlX3JlbW90ZSB7CisJbXkgKCRuYW1lKSA9IEBfOworCW15IEByZW1vdGVzOworCisgICAgICAgIG15ICRjb25mID0gJGdpdC0+Y29uZmlnKCJyZW1vdGVzLiIgLiAkbmFtZSk7CisJaWYgKGRlZmluZWQoJGNvbmYpKSB7CisJCUByZW1vdGVzID0gc3BsaXQoJyAnLCAkY29uZik7CisJfSBlbHNpZiAoJG5hbWUgZXEgJ2RlZmF1bHQnKSB7CisJCUByZW1vdGVzID0gKCk7CisJCWZvciAoc29ydCBrZXlzICUkcmVtb3RlKSB7CisJCQlteSAkZG9fZmV0Y2ggPSAkZ2l0LT5jb25maWdfYm9vbCgicmVtb3RlLiIgLiAkXyAuCisJCQkJCQkgICAgIi5za2lwRGVmYXVsdFVwZGF0ZSIpOworCQkJdW5sZXNzICgkZG9fZmV0Y2gpIHsKKwkJCQlwdXNoIEByZW1vdGVzLCAkXzsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCXByaW50IFNUREVSUiAiUmVtb3RlIGdyb3VwICRuYW1lIGRvZXMgbm90IGV4aXN0LlxuIjsKKwkJZXhpdCgxKTsKKwl9CisJZm9yIChAcmVtb3RlcykgeworCQlwcmludCAiVXBkYXRpbmcgJF9cbiI7CisJCSRnaXQtPmNvbW1hbmQoJ2ZldGNoJywgIiRfIik7CisJfQorfQorCitzdWIgcm1fcmVtb3RlIHsKKwlteSAoJG5hbWUpID0gQF87CisJaWYgKCFleGlzdHMgJHJlbW90ZS0+eyRuYW1lfSkgeworCQlwcmludCBTVERFUlIgIk5vIHN1Y2ggcmVtb3RlICRuYW1lXG4iOworCQlyZXR1cm4gMTsKKwl9CisKKwkkZ2l0LT5jb21tYW5kKCdjb25maWcnLCAnLS1yZW1vdmUtc2VjdGlvbicsICJyZW1vdGUuJG5hbWUiKTsKKworCWV2YWwgeworCSAgICBteSBAdHJhY2tlcnMgPSAkZ2l0LT5jb21tYW5kKCdjb25maWcnLCAnLS1nZXQtcmVnZXhwJywKKwkJCSdicmFuY2guKi5yZW1vdGUnLCAkbmFtZSk7CisJCWZvciAoQHRyYWNrZXJzKSB7CisJCQkvXmJyYW5jaFwuKC4qKT9cLnJlbW90ZS87CisJCQkkZ2l0LT5jb25maWcoJy0tdW5zZXQnLCAiYnJhbmNoLiQxLnJlbW90ZSIpOworCQkJJGdpdC0+Y29uZmlnKCctLXVuc2V0JywgImJyYW5jaC4kMS5tZXJnZSIpOworCQl9CisJfTsKKworCW15IEByZWZzID0gJGdpdC0+Y29tbWFuZCgnZm9yLWVhY2gtcmVmJywKKwkJJy0tZm9ybWF0PSUocmVmbmFtZSkgJShvYmplY3RuYW1lKScsICJyZWZzL3JlbW90ZXMvJG5hbWUiKTsKKwlmb3IgKEByZWZzKSB7CisJCW15ICgkcmVmLCAkb2JqZWN0KSA9IHNwbGl0OworCQkkZ2l0LT5jb21tYW5kKHF3KHVwZGF0ZS1yZWYgLWQpLCAkcmVmLCAkb2JqZWN0KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N1YiBhZGRfdXNhZ2UgeworCXByaW50IFNUREVSUiAidXNhZ2U6IGdpdCByZW1vdGUgYWRkIFstZl0gWy10IHRyYWNrXSogWy1tIG1hc3Rlcl0gPG5hbWU+IDx1cmw+XG4iOworCWV4aXQoMSk7Cit9CisKK215ICRWRVJCT1NFID0gMDsKK0BBUkdWID0gZ3JlcCB7CisJaWYgKCRfIGVxICctdicgb3IgJF8gZXEgJy0tdmVyYm9zZScpIHsKKwkJJFZFUkJPU0U9MTsKKwkJMAorCX0gZWxzZSB7CisJCTEKKwl9Cit9IEBBUkdWOworCitpZiAoIUBBUkdWKSB7CisJZm9yIChzb3J0IGtleXMgJSRyZW1vdGUpIHsKKwkJcHJpbnQgIiRfIjsKKwkJcHJpbnQgIlx0JHJlbW90ZS0+eyRffS0+e1VSTH0iIGlmICRWRVJCT1NFOworCQlwcmludCAiXG4iOworCX0KK30KK2Vsc2lmICgkQVJHVlswXSBlcSAnc2hvdycpIHsKKwlteSAkbHNfcmVtb3RlID0gMTsKKwlteSAkaTsKKwlmb3IgKCRpID0gMTsgJGkgPCBAQVJHVjsgJGkrKykgeworCQlpZiAoJEFSR1ZbJGldIGVxICctbicpIHsKKwkJCSRsc19yZW1vdGUgPSAwOworCQl9CisJCWVsc2UgeworCQkJbGFzdDsKKwkJfQorCX0KKwlpZiAoJGkgPj0gQEFSR1YpIHsKKwkJcHJpbnQgU1RERVJSICJ1c2FnZTogZ2l0IHJlbW90ZSBzaG93IDxyZW1vdGU+XG4iOworCQlleGl0KDEpOworCX0KKwlteSAkc3RhdHVzID0gMDsKKwlmb3IgKDsgJGkgPCBAQVJHVjsgJGkrKykgeworCQkkc3RhdHVzIHw9IHNob3dfcmVtb3RlKCRBUkdWWyRpXSwgJGxzX3JlbW90ZSk7CisJfQorCWV4aXQoJHN0YXR1cyk7Cit9CitlbHNpZiAoJEFSR1ZbMF0gZXEgJ3VwZGF0ZScpIHsKKwlpZiAoQEFSR1YgPD0gMSkgeworCQl1cGRhdGVfcmVtb3RlKCJkZWZhdWx0Iik7CisJCWV4aXQoMSk7CisJfQorCWZvciAobXkgJGkgPSAxOyAkaSA8IEBBUkdWOyAkaSsrKSB7CisJCXVwZGF0ZV9yZW1vdGUoJEFSR1ZbJGldKTsKKwl9Cit9CitlbHNpZiAoJEFSR1ZbMF0gZXEgJ3BydW5lJykgeworCW15ICRsc19yZW1vdGUgPSAxOworCW15ICRpOworCWZvciAoJGkgPSAxOyAkaSA8IEBBUkdWOyAkaSsrKSB7CisJCWlmICgkQVJHVlskaV0gZXEgJy1uJykgeworCQkJJGxzX3JlbW90ZSA9IDA7CisJCX0KKwkJZWxzZSB7CisJCQlsYXN0OworCQl9CisJfQorCWlmICgkaSA+PSBAQVJHVikgeworCQlwcmludCBTVERFUlIgInVzYWdlOiBnaXQgcmVtb3RlIHBydW5lIDxyZW1vdGU+XG4iOworCQlleGl0KDEpOworCX0KKwlteSAkc3RhdHVzID0gMDsKKwlmb3IgKDsgJGkgPCBAQVJHVjsgJGkrKykgeworCQkkc3RhdHVzIHw9IHBydW5lX3JlbW90ZSgkQVJHVlskaV0sICRsc19yZW1vdGUpOworCX0KKyAgICAgICAgZXhpdCgkc3RhdHVzKTsKK30KK2Vsc2lmICgkQVJHVlswXSBlcSAnYWRkJykgeworCW15ICVvcHRzID0gKCk7CisJd2hpbGUgKDEgPCBAQVJHViAmJiAkQVJHVlsxXSA9fiAvXi0vKSB7CisJCW15ICRvcHQgPSAkQVJHVlsxXTsKKwkJc2hpZnQgQEFSR1Y7CisJCWlmICgkb3B0IGVxICctZicgfHwgJG9wdCBlcSAnLS1mZXRjaCcpIHsKKwkJCSRvcHRzeydmZXRjaCd9ID0gMTsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRvcHQgZXEgJy10JyB8fCAkb3B0IGVxICctLXRyYWNrJykgeworCQkJaWYgKEBBUkdWIDwgMSkgeworCQkJCWFkZF91c2FnZSgpOworCQkJfQorCQkJJG9wdHN7J3RyYWNrJ30gfHw9IFtdOworCQkJcHVzaCBAeyRvcHRzeyd0cmFjayd9fSwgJEFSR1ZbMV07CisJCQlzaGlmdCBAQVJHVjsKKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRvcHQgZXEgJy1tJyB8fCAkb3B0IGVxICctLW1hc3RlcicpIHsKKwkJCWlmICgoQEFSR1YgPCAxKSB8fCBleGlzdHMgJG9wdHN7J21hc3Rlcid9KSB7CisJCQkJYWRkX3VzYWdlKCk7CisJCQl9CisJCQkkb3B0c3snbWFzdGVyJ30gPSAkQVJHVlsxXTsKKwkJCXNoaWZ0IEBBUkdWOworCQkJbmV4dDsKKwkJfQorCQlpZiAoJG9wdCBlcSAnLS1taXJyb3InKSB7CisJCQkkb3B0c3snbWlycm9yJ30gPSAxOworCQkJbmV4dDsKKwkJfQorCQlhZGRfdXNhZ2UoKTsKKwl9CisJaWYgKEBBUkdWICE9IDMpIHsKKwkJYWRkX3VzYWdlKCk7CisJfQorCWFkZF9yZW1vdGUoJEFSR1ZbMV0sICRBUkdWWzJdLCBcJW9wdHMpOworfQorZWxzaWYgKCRBUkdWWzBdIGVxICdybScpIHsKKwlpZiAoQEFSR1YgPD0gMSkgeworCQlwcmludCBTVERFUlIgInVzYWdlOiBnaXQgcmVtb3RlIHJtIDxyZW1vdGU+XG4iOworCQlleGl0KDEpOworCX0KKwlleGl0KHJtX3JlbW90ZSgkQVJHVlsxXSkpOworfQorZWxzZSB7CisJcHJpbnQgU1RERVJSICJ1c2FnZTogZ2l0IHJlbW90ZVxuIjsKKwlwcmludCBTVERFUlIgIiAgICAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiI7CisJcHJpbnQgU1RERVJSICIgICAgICAgZ2l0IHJlbW90ZSBybSA8bmFtZT5cbiI7CisJcHJpbnQgU1RERVJSICIgICAgICAgZ2l0IHJlbW90ZSBzaG93IDxuYW1lPlxuIjsKKwlwcmludCBTVERFUlIgIiAgICAgICBnaXQgcmVtb3RlIHBydW5lIDxuYW1lPlxuIjsKKwlwcmludCBTVERFUlIgIiAgICAgICBnaXQgcmVtb3RlIHVwZGF0ZSBbZ3JvdXBdXG4iOworCWV4aXQoMSk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1yZXBhY2suc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC1yZXBhY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTZlM2ZlZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXJlcGFjay5zaApAQCAtMCwwICsxLDE5NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBMaW51cyBUb3J2YWxkcworIworCitPUFRJT05TX0tFRVBEQVNIREFTSD0KK09QVElPTlNfU1BFQz0iXAorZ2l0IHJlcGFjayBbb3B0aW9uc10KKy0tCithICAgICAgICAgICAgICAgcGFjayBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHBhY2sKK0EgICAgICAgICAgICAgICBzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlCitkICAgICAgICAgICAgICAgcmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkCitmICAgICAgICAgICAgICAgcGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMKK0YgICAgICAgICAgICAgICBwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMKK24gICAgICAgICAgICAgICBkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8KK3EscXVpZXQgICAgICAgICBiZSBxdWlldAorbCAgICAgICAgICAgICAgIHBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzCit1bnBhY2stdW5yZWFjaGFibGU9ICB3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzCisgUGFja2luZyBjb25zdHJhaW50cword2luZG93PSAgICAgICAgIHNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbgord2luZG93LW1lbW9yeT0gIHNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50CitkZXB0aD0gICAgICAgICAgbGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoCittYXgtcGFjay1zaXplPSAgbWF4aW11bSBzaXplIG9mIGVhY2ggcGFja2ZpbGUKKyIKK1NVQkRJUkVDVE9SWV9PSz0nWWVzJworLiBnaXQtc2gtc2V0dXAKKworbm9fdXBkYXRlX2luZm89IGFsbF9pbnRvX29uZT0gcmVtb3ZlX3JlZHVuZGFudD0gdW5wYWNrX3VucmVhY2hhYmxlPQorbG9jYWw9IG5vX3JldXNlPSBleHRyYT0KK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktbikJbm9fdXBkYXRlX2luZm89dCA7OworCS1hKQlhbGxfaW50b19vbmU9dCA7OworCS1BKQlhbGxfaW50b19vbmU9dAorCQl1bnBhY2tfdW5yZWFjaGFibGU9LS11bnBhY2stdW5yZWFjaGFibGUgOzsKKwktLXVucGFjay11bnJlYWNoYWJsZSkKKwkJdW5wYWNrX3VucmVhY2hhYmxlPSItLXVucGFjay11bnJlYWNoYWJsZT0kMiI7IHNoaWZ0IDs7CisJLWQpCXJlbW92ZV9yZWR1bmRhbnQ9dCA7OworCS1xKQlHSVRfUVVJRVQ9dCA7OworCS1mKQlub19yZXVzZT0tLW5vLXJldXNlLWRlbHRhIDs7CisJLUYpCW5vX3JldXNlPS0tbm8tcmV1c2Utb2JqZWN0IDs7CisJLWwpCWxvY2FsPS0tbG9jYWwgOzsKKwktLW1heC1wYWNrLXNpemV8LS13aW5kb3d8LS13aW5kb3ctbWVtb3J5fC0tZGVwdGgpCisJCWV4dHJhPSIkZXh0cmEgJDE9JDIiOyBzaGlmdCA7OworCS0tKSBzaGlmdDsgYnJlYWs7OworCSopCXVzYWdlIDs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK2Nhc2UgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgcmVwYWNrLnVzZWRlbHRhYmFzZW9mZnNldCB8fCBlY2hvIHRydWUpIiBpbgordHJ1ZSkKKwlleHRyYT0iJGV4dHJhIC0tZGVsdGEtYmFzZS1vZmZzZXQiIDs7Citlc2FjCisKK1BBQ0tESVI9IiRHSVRfT0JKRUNUX0RJUkVDVE9SWS9wYWNrIgorUEFDS1RNUD0iJFBBQ0tESVIvLnRtcC0kJC1wYWNrIgorcm0gLWYgIiRQQUNLVE1QIi0qCit0cmFwICdybSAtZiAiJFBBQ0tUTVAiLSonIDAgMSAyIDMgMTUKKworIyBUaGVyZSB3aWxsIGJlIG1vcmUgcmVwYWNraW5nIHN0cmF0ZWdpZXMgdG8gY29tZS4uLgorY2FzZSAiLCRhbGxfaW50b19vbmUsIiBpbgorLCwpCisJYXJncz0nLS11bnBhY2tlZCAtLWluY3JlbWVudGFsJworCTs7CissdCwpCisJYXJncz0gZXhpc3Rpbmc9CisJaWYgWyAtZCAiJFBBQ0tESVIiIF07IHRoZW4KKwkJZm9yIGUgaW4gYGNkICIkUEFDS0RJUiIgJiYgZmluZCAuIC10eXBlIGYgLW5hbWUgJyoucGFjaycgXAorCQkJfCBzZWQgLWUgJ3MvXlwuXC8vLycgLWUgJ3MvXC5wYWNrJC8vJ2AKKwkJZG8KKwkJCWlmIFsgLWUgIiRQQUNLRElSLyRlLmtlZXAiIF07IHRoZW4KKwkJCQk6IGtlZXAKKwkJCWVsc2UKKwkJCQlleGlzdGluZz0iJGV4aXN0aW5nICRlIgorCQkJZmkKKwkJZG9uZQorCQlpZiB0ZXN0IC1uICIkZXhpc3RpbmciICYmIHRlc3QgLW4gIiR1bnBhY2tfdW5yZWFjaGFibGUiICYmIFwKKwkJCXRlc3QgLW4gIiRyZW1vdmVfcmVkdW5kYW50IgorCQl0aGVuCisJCQkjIFRoaXMgbWF5IGhhdmUgYXJiaXRyYXJ5IHVzZXIgYXJndW1lbnRzLCBzbyB3ZQorCQkJIyBoYXZlIHRvIHByb3RlY3QgaXQgYWdhaW5zdCB3aGl0ZXNwYWNlIHNwbGl0dGluZworCQkJIyB3aGVuIGl0IGdldHMgcnVuIGFzICJwYWNrLW9iamVjdHMgJGFyZ3MiIGxhdGVyLgorCQkJIyBGb3J0dW5hdGVseSwgd2Uga25vdyBpdCdzIGFuIGFwcHJveGlkYXRlLCBzbyB3ZQorCQkJIyBjYW4ganVzdCB1c2UgZG90cyBpbnN0ZWFkLgorCQkJYXJncz0iJGFyZ3MgJChlY2hvICIkdW5wYWNrX3VucmVhY2hhYmxlIiB8IHRyICcgJyAuKSIKKwkJZmkKKwlmaQorCTs7Citlc2FjCisKK21rZGlyIC1wICIkUEFDS0RJUiIgfHwgZXhpdAorCithcmdzPSIkYXJncyAkbG9jYWwgJHtHSVRfUVVJRVQ6Ky1xfSAkbm9fcmV1c2UkZXh0cmEiCituYW1lcz0kKGdpdCBwYWNrLW9iamVjdHMgLS1rZWVwLXRydWUtcGFyZW50cyAtLWhvbm9yLXBhY2sta2VlcCAtLW5vbi1lbXB0eSAtLWFsbCAtLXJlZmxvZyAkYXJncyA8L2Rldi9udWxsICIkUEFDS1RNUCIpIHx8CisJZXhpdCAxCitpZiBbIC16ICIkbmFtZXMiIF07IHRoZW4KKwlzYXkgTm90aGluZyBuZXcgdG8gcGFjay4KK2ZpCisKKyMgT2sgd2UgaGF2ZSBwcmVwYXJlZCBhbGwgbmV3IHBhY2tmaWxlcy4KKworIyBGaXJzdCBzZWUgaWYgdGhlcmUgYXJlIHBhY2tzIG9mIHRoZSBzYW1lIG5hbWUgYW5kIGlmIHNvCisjIGlmIHdlIGNhbiBtb3ZlIHRoZW0gb3V0IG9mIHRoZSB3YXkgKHRoaXMgY2FuIGhhcHBlbiBpZiB3ZQorIyByZXBhY2tlZCBpbW1lZGlhdGVseSBhZnRlciBwYWNraW5nIGZ1bGx5Lgorcm9sbGJhY2s9CitmYWlsZWQ9Citmb3IgbmFtZSBpbiAkbmFtZXMKK2RvCisJZm9yIHNmeCBpbiBwYWNrIGlkeAorCWRvCisJCWZpbGU9cGFjay0kbmFtZS4kc2Z4CisJCXRlc3QgLWYgIiRQQUNLRElSLyRmaWxlIiB8fCBjb250aW51ZQorCQlybSAtZiAiJFBBQ0tESVIvb2xkLSRmaWxlIiAmJgorCQltdiAiJFBBQ0tESVIvJGZpbGUiICIkUEFDS0RJUi9vbGQtJGZpbGUiIHx8IHsKKwkJCWZhaWxlZD10CisJCQlicmVhaworCQl9CisJCXJvbGxiYWNrPSIkcm9sbGJhY2sgJGZpbGUiCisJZG9uZQorCXRlc3QgLXogIiRmYWlsZWQiIHx8IGJyZWFrCitkb25lCisKKyMgSWYgcmVuYW1pbmcgZmFpbGVkIGZvciBhbnkgb2YgdGhlbSwgcm9sbCB0aGUgb25lcyB3ZSBoYXZlCisjIGFscmVhZHkgcmVuYW1lZCBiYWNrIHRvIHRoZWlyIG9yaWdpbmFsIG5hbWVzLgoraWYgdGVzdCAtbiAiJGZhaWxlZCIKK3RoZW4KKwlyb2xsYmFja19mYWlsdXJlPQorCWZvciBmaWxlIGluICRyb2xsYmFjaworCWRvCisJCW12ICIkUEFDS0RJUi9vbGQtJGZpbGUiICIkUEFDS0RJUi8kZmlsZSIgfHwKKwkJcm9sbGJhY2tfZmFpbHVyZT0iJHJvbGxiYWNrX2ZhaWx1cmUgJGZpbGUiCisJZG9uZQorCWlmIHRlc3QgLW4gIiRyb2xsYmFja19mYWlsdXJlIgorCXRoZW4KKwkJZWNobyA+JjIgIldBUk5JTkc6IFNvbWUgcGFja3MgaW4gdXNlIGhhdmUgYmVlbiByZW5hbWVkIGJ5IgorCQllY2hvID4mMiAiV0FSTklORzogcHJlZml4aW5nIG9sZC0gdG8gdGhlaXIgbmFtZSwgaW4gb3JkZXIgdG8iCisJCWVjaG8gPiYyICJXQVJOSU5HOiByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIgorCQllY2hvID4mMiAiV0FSTklORzogZmlsZS4gIEJ1dCB0aGUgb3BlcmF0aW9uIGZhaWxlZCwgYW5kIgorCQllY2hvID4mMiAiV0FSTklORzogYXR0ZW1wdCB0byByZW5hbWUgdGhlbSBiYWNrIHRvIHRoZWlyIgorCQllY2hvID4mMiAiV0FSTklORzogb3JpZ2luYWwgbmFtZXMgYWxzbyBmYWlsZWQuIgorCQllY2hvID4mMiAiV0FSTklORzogUGxlYXNlIHJlbmFtZSB0aGVtIGluICRQQUNLRElSIG1hbnVhbGx5OiIKKwkJZm9yIGZpbGUgaW4gJHJvbGxiYWNrX2ZhaWx1cmUKKwkJZG8KKwkJCWVjaG8gPiYyICJXQVJOSU5HOiAgIG9sZC0kZmlsZSAtPiAkZmlsZSIKKwkJZG9uZQorCWZpCisJZXhpdCAxCitmaQorCisjIE5vdyB0aGUgb25lcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIG91dCBvZiB0aGUgd2F5Li4uCitmdWxsYmFzZXM9Citmb3IgbmFtZSBpbiAkbmFtZXMKK2RvCisJZnVsbGJhc2VzPSIkZnVsbGJhc2VzIHBhY2stJG5hbWUiCisJY2htb2QgYS13ICIkUEFDS1RNUC0kbmFtZS5wYWNrIgorCWNobW9kIGEtdyAiJFBBQ0tUTVAtJG5hbWUuaWR4IgorCW12IC1mICIkUEFDS1RNUC0kbmFtZS5wYWNrIiAiJFBBQ0tESVIvcGFjay0kbmFtZS5wYWNrIiAmJgorCW12IC1mICIkUEFDS1RNUC0kbmFtZS5pZHgiICAiJFBBQ0tESVIvcGFjay0kbmFtZS5pZHgiIHx8CisJZXhpdAorZG9uZQorCisjIFJlbW92ZSB0aGUgIm9sZC0iIGZpbGVzCitmb3IgbmFtZSBpbiAkbmFtZXMKK2RvCisJcm0gLWYgIiRQQUNLRElSL29sZC1wYWNrLSRuYW1lLmlkeCIKKwlybSAtZiAiJFBBQ0tESVIvb2xkLXBhY2stJG5hbWUucGFjayIKK2RvbmUKKworIyBFbmQgb2YgcGFjayByZXBsYWNlbWVudC4KKworaWYgdGVzdCAiJHJlbW92ZV9yZWR1bmRhbnQiID0gdAordGhlbgorCSMgV2Uga25vdyAkZXhpc3RpbmcgYXJlIGFsbCByZWR1bmRhbnQuCisJaWYgWyAtbiAiJGV4aXN0aW5nIiBdCisJdGhlbgorCQkoIGNkICIkUEFDS0RJUiIgJiYKKwkJICBmb3IgZSBpbiAkZXhpc3RpbmcKKwkJICBkbworCQkJY2FzZSAiICRmdWxsYmFzZXMgIiBpbgorCQkJKiIgJGUgIiopIDs7CisJCQkqKQlybSAtZiAiJGUucGFjayIgIiRlLmlkeCIgIiRlLmtlZXAiIDs7CisJCQllc2FjCisJCSAgZG9uZQorCQkpCisJZmkKKwlnaXQgcHJ1bmUtcGFja2VkICR7R0lUX1FVSUVUOistcX0KK2ZpCisKK2Nhc2UgIiRub191cGRhdGVfaW5mbyIgaW4KK3QpIDogOzsKKyopIGdpdCB1cGRhdGUtc2VydmVyLWluZm8gOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXJlcmVyZS5wZXJsIGIvY29udHJpYi9leGFtcGxlcy9naXQtcmVyZXJlLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGY2OTIwOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXJlcmVyZS5wZXJsCkBAIC0wLDAgKzEsMjg0IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgUkV1c2UgUkVjb3JkZWQgUkVzb2x2ZS4gIFRoaXMgdG9vbCByZWNvcmRzIGEgY29uZmxpY3RlZCBhdXRvbWVyZ2UKKyMgcmVzdWx0IGFuZCBpdHMgaGFuZCByZXNvbHV0aW9uLCBhbmQgaGVscHMgdG8gcmVzb2x2ZSBmdXR1cmUKKyMgYXV0b21lcmdlIHRoYXQgcmVzdWx0cyBpbiB0aGUgc2FtZSBjb25mbGljdC4KKyMKKyMgVG8gZW5hYmxlIHRoaXMgZmVhdHVyZSwgY3JlYXRlIGEgZGlyZWN0b3J5ICdyci1jYWNoZScgdW5kZXIgeW91cgorIyAuZ2l0LyBkaXJlY3RvcnkuCisKK3VzZSBEaWdlc3Q7Cit1c2UgRmlsZTo6UGF0aDsKK3VzZSBGaWxlOjpDb3B5OworCitteSAkZ2l0X2RpciA9ICQ6OkVOVntHSVRfRElSfSB8fCAiLmdpdCI7CitteSAkcnJfZGlyID0gIiRnaXRfZGlyL3JyLWNhY2hlIjsKK215ICRtZXJnZV9yciA9ICIkZ2l0X2Rpci9yci1jYWNoZS9NRVJHRV9SUiI7CisKK215ICVtZXJnZV9yciA9ICgpOworCitzdWIgcmVhZF9yciB7CisJaWYgKCEtZiAkbWVyZ2VfcnIpIHsKKwkJJW1lcmdlX3JyID0gKCk7CisJCXJldHVybjsKKwl9CisJbXkgJGluOworCWxvY2FsICQvID0gIlwwIjsKKwlvcGVuICRpbiwgIjwkbWVyZ2VfcnIiIG9yIGRpZSAiJCE6ICRtZXJnZV9yciI7CisJd2hpbGUgKDwkaW4+KSB7CisJCWNob21wOworCQlteSAoJG5hbWUsICRwYXRoKSA9IC9eKFswLTlhLWZdezQwfSlcdCguKikkL3M7CisJCSRtZXJnZV9ycnskcGF0aH0gPSAkbmFtZTsKKwl9CisJY2xvc2UgJGluOworfQorCitzdWIgd3JpdGVfcnIgeworCW15ICRvdXQ7CisJb3BlbiAkb3V0LCAiPiRtZXJnZV9yciIgb3IgZGllICIkITogJG1lcmdlX3JyIjsKKwlmb3IgbXkgJHBhdGggKHNvcnQga2V5cyAlbWVyZ2VfcnIpIHsKKwkJbXkgJG5hbWUgPSAkbWVyZ2VfcnJ7JHBhdGh9OworCQlwcmludCAkb3V0ICIkbmFtZVx0JHBhdGhcMCI7CisJfQorCWNsb3NlICRvdXQ7Cit9CisKK3N1YiBjb21wdXRlX2NvbmZsaWN0X25hbWUgeworCW15ICgkcGF0aCkgPSBAXzsKKwlteSBAc2lkZSA9ICgpOworCW15ICRpbjsKKwlvcGVuICRpbiwgIjwkcGF0aCIgIG9yIGRpZSAiJCE6ICRwYXRoIjsKKworCW15ICRzaGExID0gRGlnZXN0LT5uZXcoIlNIQS0xIik7CisJbXkgJGh1bmsgPSAwOworCXdoaWxlICg8JGluPikgeworCQlpZiAoL148PDw8PDw8IC4qLykgeworCQkJJGh1bmsrKzsKKwkJCUBzaWRlID0gKFtdLCB1bmRlZik7CisJCX0KKwkJZWxzaWYgKC9ePT09PT09PSQvKSB7CisJCQkkc2lkZVsxXSA9IFtdOworCQl9CisJCWVsc2lmICgvXj4+Pj4+Pj4gLiovKSB7CisJCQlteSAoJG9uZSwgJHR3byk7CisJCQkkb25lID0gam9pbignJywgQHskc2lkZVswXX0pOworCQkJJHR3byA9IGpvaW4oJycsIEB7JHNpZGVbMV19KTsKKwkJCWlmICgkdHdvIGxlICRvbmUpIHsKKwkJCQkoJG9uZSwgJHR3bykgPSAoJHR3bywgJG9uZSk7CisJCQl9CisJCQkkc2hhMS0+YWRkKCRvbmUpOworCQkJJHNoYTEtPmFkZCgiXDAiKTsKKwkJCSRzaGExLT5hZGQoJHR3byk7CisJCQkkc2hhMS0+YWRkKCJcMCIpOworCQkJQHNpZGUgPSAoKTsKKwkJfQorCQllbHNpZiAoQHNpZGUgPT0gMCkgeworCQkJbmV4dDsKKwkJfQorCQllbHNpZiAoZGVmaW5lZCAkc2lkZVsxXSkgeworCQkJcHVzaCBAeyRzaWRlWzFdfSwgJF87CisJCX0KKwkJZWxzZSB7CisJCQlwdXNoIEB7JHNpZGVbMF19LCAkXzsKKwkJfQorCX0KKwljbG9zZSAkaW47CisJcmV0dXJuICgkc2hhMS0+aGV4ZGlnZXN0LCAkaHVuayk7Cit9CisKK3N1YiByZWNvcmRfcHJlaW1hZ2UgeworCW15ICgkcGF0aCwgJG5hbWUpID0gQF87CisJbXkgQHNpZGUgPSAoKTsKKwlteSAoJGluLCAkb3V0KTsKKwlvcGVuICRpbiwgIjwkcGF0aCIgIG9yIGRpZSAiJCE6ICRwYXRoIjsKKwlvcGVuICRvdXQsICI+JG5hbWUiIG9yIGRpZSAiJCE6ICRuYW1lIjsKKworCXdoaWxlICg8JGluPikgeworCQlpZiAoL148PDw8PDw8IC4qLykgeworCQkJQHNpZGUgPSAoW10sIHVuZGVmKTsKKwkJfQorCQllbHNpZiAoL149PT09PT09JC8pIHsKKwkJCSRzaWRlWzFdID0gW107CisJCX0KKwkJZWxzaWYgKC9ePj4+Pj4+PiAuKi8pIHsKKwkJCW15ICgkb25lLCAkdHdvKTsKKwkJCSRvbmUgPSBqb2luKCcnLCBAeyRzaWRlWzBdfSk7CisJCQkkdHdvID0gam9pbignJywgQHskc2lkZVsxXX0pOworCQkJaWYgKCR0d28gbGUgJG9uZSkgeworCQkJCSgkb25lLCAkdHdvKSA9ICgkdHdvLCAkb25lKTsKKwkJCX0KKwkJCXByaW50ICRvdXQgIjw8PDw8PDxcbiI7CisJCQlwcmludCAkb3V0ICRvbmU7CisJCQlwcmludCAkb3V0ICI9PT09PT09XG4iOworCQkJcHJpbnQgJG91dCAkdHdvOworCQkJcHJpbnQgJG91dCAiPj4+Pj4+PlxuIjsKKwkJCUBzaWRlID0gKCk7CisJCX0KKwkJZWxzaWYgKEBzaWRlID09IDApIHsKKwkJCXByaW50ICRvdXQgJF87CisJCX0KKwkJZWxzaWYgKGRlZmluZWQgJHNpZGVbMV0pIHsKKwkJCXB1c2ggQHskc2lkZVsxXX0sICRfOworCQl9CisJCWVsc2UgeworCQkJcHVzaCBAeyRzaWRlWzBdfSwgJF87CisJCX0KKwl9CisJY2xvc2UgJG91dDsKKwljbG9zZSAkaW47Cit9CisKK3N1YiBmaW5kX2NvbmZsaWN0IHsKKwlteSAkaW47CisJbG9jYWwgJC8gPSAiXDAiOworCW15ICRwaWQgPSBvcGVuKCRpbiwgJy18Jyk7CisJZGllICIkISIgdW5sZXNzIGRlZmluZWQgJHBpZDsKKwlpZiAoISRwaWQpIHsKKwkJZXhlYyhxdyhnaXQgbHMtZmlsZXMgLXogLXUpKSBvciBkaWUgIiQhOiBscy1maWxlcyI7CisJfQorCW15ICVwYXRoID0gKCk7CisJbXkgQHBhdGggPSAoKTsKKwl3aGlsZSAoPCRpbj4pIHsKKwkJY2hvbXA7CisJCW15ICgkbW9kZSwgJHNoYTEsICRzdGFnZSwgJHBhdGgpID0KKwkJICAgIC9eKFswLTddKykgKFswLTlhLWZdezQwfSkgKFsxMjNdKVx0KC4qKSQvczsKKwkJJHBhdGh7JHBhdGh9IHw9ICgxIDw8ICRzdGFnZSk7CisJfQorCWNsb3NlICRpbjsKKwl3aGlsZSAobXkgKCRwYXRoLCAkc3RhdHVzKSA9IGVhY2ggJXBhdGgpIHsKKwkJaWYgKCRzdGF0dXMgPT0gMTQpIHsgcHVzaCBAcGF0aCwgJHBhdGg7IH0KKwl9CisJcmV0dXJuIEBwYXRoOworfQorCitzdWIgbWVyZ2UgeworCW15ICgkbmFtZSwgJHBhdGgpID0gQF87CisJcmVjb3JkX3ByZWltYWdlKCRwYXRoLCAiJHJyX2Rpci8kbmFtZS90aGlzaW1hZ2UiKTsKKwl1bmxlc3MgKHN5c3RlbSgnZ2l0JywgJ21lcmdlLWZpbGUnLCBtYXAgeyAiJHJyX2Rpci8kbmFtZS8ke199aW1hZ2UiIH0KKwkJICAgICAgIHF3KHRoaXMgcHJlIHBvc3QpKSkgeworCQlteSAkaW47CisJCW9wZW4gJGluLCAiPCRycl9kaXIvJG5hbWUvdGhpc2ltYWdlIiBvcgorCQkgICAgZGllICIkITogJG5hbWUvdGhpc2ltYWdlIjsKKwkJbXkgJG91dDsKKwkJb3BlbiAkb3V0LCAiPiRwYXRoIiBvciBkaWUgIiQhOiAkcGF0aCI7CisJCXdoaWxlICg8JGluPikgeyBwcmludCAkb3V0ICRfOyB9CisJCWNsb3NlICRpbjsKKwkJY2xvc2UgJG91dDsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdWIgZ2FyYmFnZV9jb2xsZWN0X3JlcmVyZSB7CisJIyBXZSBzaG91bGQgYWxsb3cgc3BlY2lmeWluZyB0aGVzZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUgYW5kCisJIyB0aGF0IGlzIHdoeSB0aGUgY2FsbGVyIGdpdmVzIEBBUkdWIHRvIHVzLCBidXQgSSBhbSBsYXp5LgorCisJbXkgJGN1dG9mZl9ub3Jlc29sdmUgPSAxNTsgIyB0d28gd2Vla3MKKwlteSAkY3V0b2ZmX3Jlc29sdmUgPSA2MDsgIyB0d28gbW9udGhzCisJbXkgQHRvX3JlbW92ZTsKKwl3aGlsZSAoPCRycl9kaXIvKi9wcmVpbWFnZT4pIHsKKwkJbXkgKCRkaXIpID0gL14oLiopXC9wcmVpbWFnZSQvOworCQlteSAkY3V0b2ZmID0gKCgtZiAiJGRpci9wb3N0aW1hZ2UiKQorCQkJICAgICAgPyAkY3V0b2ZmX3Jlc29sdmUKKwkJCSAgICAgIDogJGN1dG9mZl9ub3Jlc29sdmUpOworCQlteSAkYWdlID0gLU0gIiRfIjsKKwkJaWYgKCRjdXRvZmYgPD0gJGFnZSkgeworCQkJcHVzaCBAdG9fcmVtb3ZlLCAkZGlyOworCQl9CisJfQorCWlmIChAdG9fcmVtb3ZlKSB7CisJCXJtdHJlZShcQHRvX3JlbW92ZSk7CisJfQorfQorCistZCAiJHJyX2RpciIgfHwgZXhpdCgwKTsKKworcmVhZF9ycigpOworCitpZiAoQEFSR1YpIHsKKwlteSAkYXJnID0gc2hpZnQgQEFSR1Y7CisJaWYgKCRhcmcgZXEgJ2NsZWFyJykgeworCQlmb3IgbXkgJHBhdGggKGtleXMgJW1lcmdlX3JyKSB7CisJCQlteSAkbmFtZSA9ICRtZXJnZV9ycnskcGF0aH07CisJCQlpZiAoLWQgIiRycl9kaXIvJG5hbWUiICYmCisJCQkgICAgISAtZiAiJHJyX2Rpci8kbmFtZS9wb3N0aW1hZ2UiKSB7CisJCQkJcm10cmVlKFsiJHJyX2Rpci8kbmFtZSJdKTsKKwkJCX0KKwkJfQorCQl1bmxpbmsgJG1lcmdlX3JyOworCX0KKwllbHNpZiAoJGFyZyBlcSAnc3RhdHVzJykgeworCQlmb3IgbXkgJHBhdGggKGtleXMgJW1lcmdlX3JyKSB7CisJCQlwcmludCAkcGF0aCwgIlxuIjsKKwkJfQorCX0KKwllbHNpZiAoJGFyZyBlcSAnZGlmZicpIHsKKwkJZm9yIG15ICRwYXRoIChrZXlzICVtZXJnZV9ycikgeworCQkJbXkgJG5hbWUgPSAkbWVyZ2VfcnJ7JHBhdGh9OworCQkJc3lzdGVtKCdkaWZmJywgKChAQVJHViA9PSAwKSA/ICgnLXUnKSA6IEBBUkdWKSwKKwkJCQknLUwnLCAiYS8kcGF0aCIsICctTCcsICJiLyRwYXRoIiwKKwkJCQkiJHJyX2Rpci8kbmFtZS9wcmVpbWFnZSIsICRwYXRoKTsKKwkJfQorCX0KKwllbHNpZiAoJGFyZyBlcSAnZ2MnKSB7CisJCWdhcmJhZ2VfY29sbGVjdF9yZXJlcmUoQEFSR1YpOworCX0KKwllbHNlIHsKKwkJZGllICIkMCB1bmtub3duIGNvbW1hbmQ6ICRhcmdcbiI7CisJfQorCWV4aXQgMDsKK30KKworbXkgJWNvbmZsaWN0ID0gbWFwIHsgJF8gPT4gMSB9IGZpbmRfY29uZmxpY3QoKTsKKworIyBNRVJHRV9SUiByZWNvcmRzIHBhdGhzIHdpdGggY29uZmxpY3RzIGltbWVkaWF0ZWx5IGFmdGVyIG1lcmdlCisjIGZhaWxlZC4gIFNvbWUgb2YgdGhlIGNvbmZsaWN0ZWQgcGF0aHMgbWlnaHQgaGF2ZSBiZWVuIGhhbmQgcmVzb2x2ZWQKKyMgaW4gdGhlIHdvcmtpbmcgdHJlZSBzaW5jZSB0aGVuLCBidXQgdGhlIGluaXRpYWwgcnVuIHdvdWxkIGNhdGNoIGFsbAorIyBhbmQgcmVnaXN0ZXIgdGhlaXIgcHJlaW1hZ2VzLgorCitmb3IgbXkgJHBhdGggKGtleXMgJWNvbmZsaWN0KSB7CisJIyBUaGlzIHBhdGggaGFzIGNvbmZsaWN0LiAgSWYgaXQgaXMgbm90IHJlY29yZGVkIHlldCwKKwkjIHJlY29yZCB0aGUgcHJlLWltYWdlLgorCWlmICghZXhpc3RzICRtZXJnZV9ycnskcGF0aH0pIHsKKwkJbXkgKCRuYW1lLCAkaHVuaykgPSBjb21wdXRlX2NvbmZsaWN0X25hbWUoJHBhdGgpOworCQluZXh0IHVubGVzcyAoJGh1bmspOworCQkkbWVyZ2VfcnJ7JHBhdGh9ID0gJG5hbWU7CisJCWlmICghIC1kICIkcnJfZGlyLyRuYW1lIikgeworCQkJbWtwYXRoKCIkcnJfZGlyLyRuYW1lIiwgMCwgMDc3Nyk7CisJCQlwcmludCBTVERFUlIgIlJlY29yZGVkIHByZWltYWdlIGZvciAnJHBhdGgnXG4iOworCQkJcmVjb3JkX3ByZWltYWdlKCRwYXRoLCAiJHJyX2Rpci8kbmFtZS9wcmVpbWFnZSIpOworCQl9CisJfQorfQorCisjIE5vdyBzb21lIG9mIHRoZSBwYXRocyB0aGF0IGhhZCBjb25mbGljdHMgZWFybGllciBtaWdodCBoYXZlIGJlZW4KKyMgaGFuZCByZXNvbHZlZC4gIE90aGVycyBtYXkgYmUgc2ltaWxhciB0byBhIGNvbmZsaWN0IGFscmVhZHkgdGhhdAorIyB3YXMgcmVzb2x2ZWQgYmVmb3JlLgorCitmb3IgbXkgJHBhdGggKGtleXMgJW1lcmdlX3JyKSB7CisJbXkgJG5hbWUgPSAkbWVyZ2VfcnJ7JHBhdGh9OworCisJIyBXZSBjb3VsZCByZXNvbHZlIHRoaXMgYXV0b21hdGljYWxseSBpZiB3ZSBoYXZlIGltYWdlcy4KKwlpZiAoLWYgIiRycl9kaXIvJG5hbWUvcHJlaW1hZ2UiICYmCisJICAgIC1mICIkcnJfZGlyLyRuYW1lL3Bvc3RpbWFnZSIpIHsKKwkJaWYgKG1lcmdlKCRuYW1lLCAkcGF0aCkpIHsKKwkJCXByaW50IFNUREVSUiAiUmVzb2x2ZWQgJyRwYXRoJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLlxuIjsKKwkJCSMgVGhlbiB3ZSBkbyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHBhdGgKKwkJCSMgYW55bW9yZS4KKwkJCWRlbGV0ZSAkbWVyZ2VfcnJ7JHBhdGh9OworCQkJbmV4dDsKKwkJfQorCX0KKworCSMgTGV0J3Mgc2VlIGlmIHdlIGhhdmUgcmVzb2x2ZWQgaXQuCisJKHVuZGVmLCBteSAkaHVuaykgPSBjb21wdXRlX2NvbmZsaWN0X25hbWUoJHBhdGgpOworCW5leHQgaWYgKCRodW5rKTsKKworCXByaW50IFNUREVSUiAiUmVjb3JkZWQgcmVzb2x1dGlvbiBmb3IgJyRwYXRoJy5cbiI7CisJY29weSgkcGF0aCwgIiRycl9kaXIvJG5hbWUvcG9zdGltYWdlIik7CisJIyBBbmQgd2UgZG8gbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyBwYXRoIGFueW1vcmUuCisJZGVsZXRlICRtZXJnZV9ycnskcGF0aH07Cit9CisKKyMgV3JpdGUgb3V0IHRoZSByZXN0Lgord3JpdGVfcnIoKTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXJlc2V0LnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtcmVzZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2IxYmJmMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXJlc2V0LnNoCkBAIC0wLDAgKzEsMTA2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA2IExpbnVzIFRvcnZhbGRzIGFuZCBKdW5pbyBDIEhhbWFubworIworVVNBR0U9J1stLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkXSAgWzxjb21taXQtaXNoPl0gWyBbLS1dIDxwYXRocz4uLi5dJworU1VCRElSRUNUT1JZX09LPVllcworLiBnaXQtc2gtc2V0dXAKK3NldF9yZWZsb2dfYWN0aW9uICJyZXNldCAkKiIKK3JlcXVpcmVfd29ya190cmVlCisKK3VwZGF0ZT0gcmVzZXRfdHlwZT0tLW1peGVkCit1bnNldCByZXYKKword2hpbGUgdGVzdCAkIyAhPSAwCitkbworCWNhc2UgIiQxIiBpbgorCS0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQpCisJCXJlc2V0X3R5cGU9IiQxIgorCQk7OworCS0tKQorCQlicmVhaworCQk7OworCS0qKQorCQl1c2FnZQorCQk7OworCSopCisJCXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIikgfHwgZXhpdAorCQlzaGlmdAorCQlicmVhaworCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCis6ICR7cmV2PUhFQUR9CityZXY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRyZXZeMCkgfHwgZXhpdAorCisjIFNraXAgLS0gaW4gImdpdCByZXNldCBIRUFEIC0tIGZvbyIgYW5kICJnaXQgcmVzZXQgLS0gZm9vIi4KK2Nhc2UgIiQxIiBpbiAtLSkgc2hpZnQgOzsgZXNhYworCisjIGdpdCByZXNldCAtLW1peGVkIHRyZWUgWy0tXSBwYXRocy4uLiBjYW4gYmUgdXNlZCB0bworIyBsb2FkIGNob3NlbiBwYXRocyBmcm9tIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHdpdGhvdXQKKyMgYWZmZWN0aW5nIHRoZSB3b3JraW5nIHRyZWUgb3IgSEVBRC4KK2lmIHRlc3QgJCMgIT0gMAordGhlbgorCXRlc3QgIiRyZXNldF90eXBlIiA9ICItLW1peGVkIiB8fAorCQlkaWUgIkNhbm5vdCBkbyBwYXJ0aWFsICRyZXNldF90eXBlIHJlc2V0LiIKKworCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICRyZXYgLS0gIiRAIiB8CisJc2VkIC1lICdzL146XChbMC03XVswLTddKlwpIFswLTddWzAtN10qIFwoWzAtOWEtZl1bMC05YS1mXSpcKSBbMC05YS1mXVswLTlhLWZdKiBbQS1aXQlcKC4qXCkkL1wxIFwyCVwzLycgfAorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgLS1pbmRleC1pbmZvIHx8IGV4aXQKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorCWV4aXQKK2ZpCisKK2NkX3RvX3RvcGxldmVsCisKK2lmIHRlc3QgIiRyZXNldF90eXBlIiA9ICItLWhhcmQiCit0aGVuCisJdXBkYXRlPS11CitmaQorCisjIFNvZnQgcmVzZXQgZG9lcyBub3QgdG91Y2ggdGhlIGluZGV4IGZpbGUgb3IgdGhlIHdvcmtpbmcgdHJlZQorIyBhdCBhbGwsIGJ1dCByZXF1aXJlcyB0aGVtIGluIGEgZ29vZCBvcmRlci4gIE90aGVyIHJlc2V0cyByZXNldAorIyB0aGUgaW5kZXggZmlsZSB0byB0aGUgdHJlZSBvYmplY3Qgd2UgYXJlIHN3aXRjaGluZyB0by4KK2lmIHRlc3QgIiRyZXNldF90eXBlIiA9ICItLXNvZnQiCit0aGVuCisJaWYgdGVzdCAtZiAiJEdJVF9ESVIvTUVSR0VfSEVBRCIgfHwKKwkgICB0ZXN0ICIiICE9ICIkKGdpdCBscy1maWxlcyAtLXVubWVyZ2VkKSIKKwl0aGVuCisJCWRpZSAiQ2Fubm90IGRvIGEgc29mdCByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorCWZpCitlbHNlCisJZ2l0IHJlYWQtdHJlZSAtdiAtLXJlc2V0ICR1cGRhdGUgIiRyZXYiIHx8IGV4aXQKK2ZpCisKKyMgQW55IHJlc2V0cyB1cGRhdGUgSEVBRCB0byB0aGUgaGVhZCBiZWluZyBzd2l0Y2hlZCB0by4KK2lmIG9yaWc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgMj4vZGV2L251bGwpCit0aGVuCisJZWNobyAiJG9yaWciID4iJEdJVF9ESVIvT1JJR19IRUFEIgorZWxzZQorCXJtIC1mICIkR0lUX0RJUi9PUklHX0hFQUQiCitmaQorZ2l0IHVwZGF0ZS1yZWYgLW0gIiRHSVRfUkVGTE9HX0FDVElPTiIgSEVBRCAiJHJldiIKK3VwZGF0ZV9yZWZfc3RhdHVzPSQ/CisKK2Nhc2UgIiRyZXNldF90eXBlIiBpbgorLS1oYXJkICkKKwl0ZXN0ICR1cGRhdGVfcmVmX3N0YXR1cyA9IDAgJiYgeworCQlwcmludGYgIkhFQUQgaXMgbm93IGF0ICIKKwkJR0lUX1BBR0VSPSBnaXQgbG9nIC0tbWF4LWNvdW50PTEgLS1wcmV0dHk9b25lbGluZSBcCisJCQktLWFiYnJldi1jb21taXQgSEVBRAorCX0KKwk7OworLS1zb2Z0ICkKKwk7OyAjIE5vdGhpbmcgZWxzZSB0byBkbworLS1taXhlZCApCisJIyBSZXBvcnQgd2hhdCBoYXMgbm90IGJlZW4gdXBkYXRlZC4KKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorCTs7Citlc2FjCisKK3JtIC1mICIkR0lUX0RJUi9NRVJHRV9IRUFEIiAiJEdJVF9ESVIvcnItY2FjaGUvTUVSR0VfUlIiIFwKKwkiJEdJVF9ESVIvU1FVQVNIX01TRyIgIiRHSVRfRElSL01FUkdFX01TRyIKKworZXhpdCAkdXBkYXRlX3JlZl9zdGF0dXMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXJlc29sdmUuc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC1yZXNvbHZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcwZmRjMjcKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC1yZXNvbHZlLnNoCkBAIC0wLDAgKzEsMTEyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IExpbnVzIFRvcnZhbGRzCisjCisjIFJlc29sdmUgdHdvIHRyZWVzLgorIworCitlY2hvICdXQVJOSU5HOiBUaGlzIGNvbW1hbmQgaXMgREVQUkVDQVRFRCBhbmQgd2lsbCBiZSByZW1vdmVkIHZlcnkgc29vbi4nID4mMgorZWNobyAnV0FSTklORzogUGxlYXNlIHVzZSBnaXQtbWVyZ2Ugb3IgZ2l0LXB1bGwgaW5zdGVhZC4nID4mMgorc2xlZXAgMgorCitVU0FHRT0nPGhlYWQ+IDxyZW1vdGU+IDxtZXJnZS1tZXNzYWdlPicKKy4gZ2l0LXNoLXNldHVwCisKK2Ryb3BoZWFkcygpIHsKKwlybSAtZiAtLSAiJEdJVF9ESVIvTUVSR0VfSEVBRCIgXAorCQkiJEdJVF9ESVIvTEFTVF9NRVJHRSIgfHwgZXhpdCAxCit9CisKK2hlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSJeMCkgJiYKK21lcmdlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDIiXjApICYmCittZXJnZV9uYW1lPSIkMiIgJiYKK21lcmdlX21zZz0iJDMiIHx8IHVzYWdlCisKKyMKKyMgVGhlIHJlbW90ZSBuYW1lIGlzIGp1c3QgdXNlZCBmb3IgdGhlIG1lc3NhZ2UsCisjIGJ1dCB3ZSBkbyB3YW50IGl0LgorIworaWYgWyAteiAiJGhlYWQiIC1vIC16ICIkbWVyZ2UiIC1vIC16ICIkbWVyZ2VfbXNnIiBdOyB0aGVuCisJdXNhZ2UKK2ZpCisKK2Ryb3BoZWFkcworZWNobyAkaGVhZCA+ICIkR0lUX0RJUiIvT1JJR19IRUFECitlY2hvICRtZXJnZSA+ICIkR0lUX0RJUiIvTEFTVF9NRVJHRQorCitjb21tb249JChnaXQgbWVyZ2UtYmFzZSAkaGVhZCAkbWVyZ2UpCitpZiBbIC16ICIkY29tbW9uIiBdOyB0aGVuCisJZGllICJVbmFibGUgdG8gZmluZCBjb21tb24gY29tbWl0IGJldHdlZW4iICRtZXJnZSAkaGVhZAorZmkKKworY2FzZSAiJGNvbW1vbiIgaW4KKyIkbWVyZ2UiKQorCWVjaG8gIkFscmVhZHkgdXAtdG8tZGF0ZS4gWWVlYWghIgorCWRyb3BoZWFkcworCWV4aXQgMAorCTs7CisiJGhlYWQiKQorCWVjaG8gIlVwZGF0aW5nICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRoZWFkKS4uJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJG1lcmdlKSIKKwlnaXQgcmVhZC10cmVlIC11IC1tICRoZWFkICRtZXJnZSB8fCBleGl0IDEKKwlnaXQgdXBkYXRlLXJlZiAtbSAicmVzb2x2ZSAkbWVyZ2VfbmFtZTogRmFzdC1mb3J3YXJkIiBcCisJCUhFQUQgIiRtZXJnZSIgIiRoZWFkIgorCWdpdCBkaWZmLXRyZWUgLXAgJGhlYWQgJG1lcmdlIHwgZ2l0IGFwcGx5IC0tc3RhdAorCWRyb3BoZWFkcworCWV4aXQgMAorCTs7Citlc2FjCisKKyMgV2UgYXJlIGdvaW5nIHRvIG1ha2UgYSBuZXcgY29tbWl0LgorZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID4vZGV2L251bGwgfHwgZXhpdAorCisjIEZpbmQgYW4gb3B0aW11bSBtZXJnZSBiYXNlIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGNhbmRpZGF0ZXMuCitMRj0nCisnCitjb21tb249JChnaXQgbWVyZ2UtYmFzZSAtYSAkaGVhZCAkbWVyZ2UpCitjYXNlICIkY29tbW9uIiBpbgorPyoiJExGIj8qKQorCWVjaG8gIlRyeWluZyB0byBmaW5kIHRoZSBvcHRpbXVtIG1lcmdlIGJhc2UuIgorCUc9LnRtcC1pbmRleCQkCisJYmVzdD0KKwliZXN0X2NudD0tMQorCWZvciBjIGluICRjb21tb24KKwlkbworCQlybSAtZiAkRworCQlHSVRfSU5ERVhfRklMRT0kRyBnaXQgcmVhZC10cmVlIC1tICRjICRoZWFkICRtZXJnZSBcCisJCQkyPi9kZXYvbnVsbCB8fCBjb250aW51ZQorCQkjIENvdW50IHRoZSBwYXRocyB0aGF0IGFyZSB1bm1lcmdlZC4KKwkJY250PSQoR0lUX0lOREVYX0ZJTEU9JEcgZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQgfCB3YyAtbCkKKwkJaWYgdGVzdCAkYmVzdF9jbnQgLWxlIDAgfHwgdGVzdCAkY250IC1sZSAkYmVzdF9jbnQKKwkJdGhlbgorCQkJYmVzdD0kYworCQkJYmVzdF9jbnQ9JGNudAorCQkJaWYgdGVzdCAiJGJlc3RfY250IiAtZXEgMAorCQkJdGhlbgorCQkJCSMgQ2Fubm90IGRvIGFueSBiZXR0ZXIgdGhhbiBhbGwgdHJpdmlhbCBtZXJnZS4KKwkJCQlicmVhaworCQkJZmkKKwkJZmkKKwlkb25lCisJcm0gLWYgJEcKKwljb21tb249IiRiZXN0IgorZXNhYworCitlY2hvICJUcnlpbmcgdG8gbWVyZ2UgJG1lcmdlIGludG8gJGhlYWQgdXNpbmcgJGNvbW1vbi4iCitnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAyPi9kZXYvbnVsbAorZ2l0IHJlYWQtdHJlZSAtdSAtbSAkY29tbW9uICRoZWFkICRtZXJnZSB8fCBleGl0IDEKK3Jlc3VsdF90cmVlPSQoZ2l0IHdyaXRlLXRyZWUgIDI+IC9kZXYvbnVsbCkKK2lmIFsgJD8gLW5lIDAgXTsgdGhlbgorCWVjaG8gIlNpbXBsZSBtZXJnZSBmYWlsZWQsIHRyeWluZyBBdXRvbWF0aWMgbWVyZ2UiCisJZ2l0LW1lcmdlLWluZGV4IC1vIGdpdC1tZXJnZS1vbmUtZmlsZSAtYQorCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgorCQllY2hvICRtZXJnZSA+ICIkR0lUX0RJUiIvTUVSR0VfSEVBRAorCQlkaWUgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQsIGZpeCB1cCBieSBoYW5kIgorCWZpCisJcmVzdWx0X3RyZWU9JChnaXQgd3JpdGUtdHJlZSkgfHwgZXhpdCAxCitmaQorcmVzdWx0X2NvbW1pdD0kKGVjaG8gIiRtZXJnZV9tc2ciIHwgZ2l0IGNvbW1pdC10cmVlICRyZXN1bHRfdHJlZSAtcCAkaGVhZCAtcCAkbWVyZ2UpCitlY2hvICJDb21taXR0ZWQgbWVyZ2UgJHJlc3VsdF9jb21taXQiCitnaXQgdXBkYXRlLXJlZiAtbSAicmVzb2x2ZSAkbWVyZ2VfbmFtZTogSW4taW5kZXggbWVyZ2UiIFwKKwlIRUFEICIkcmVzdWx0X2NvbW1pdCIgIiRoZWFkIgorZ2l0IGRpZmYtdHJlZSAtcCAkaGVhZCAkcmVzdWx0X2NvbW1pdCB8IGdpdCBhcHBseSAtLXN0YXQKK2Ryb3BoZWFkcwpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtcmV2ZXJ0LnNoIGIvY29udHJpYi9leGFtcGxlcy9naXQtcmV2ZXJ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlMmFhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC1yZXZlcnQuc2gKQEAgLTAsMCArMSwyMDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgTGludXMgVG9ydmFsZHMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK2Nhc2UgIiQwIiBpbgorKi1yZXZlcnQqICkKKwl0ZXN0IC10IDAgJiYgZWRpdD0tZQorCXJlcGxheT0KKwltZT1yZXZlcnQKKwlVU0FHRT0nWy0tZWRpdCB8IC0tbm8tZWRpdF0gWy1uXSA8Y29tbWl0LWlzaD4nIDs7CisqLWNoZXJyeS1waWNrKiApCisJcmVwbGF5PXQKKwllZGl0PQorCW1lPWNoZXJyeS1waWNrCisJVVNBR0U9J1stLWVkaXRdIFstbl0gWy1yXSBbLXhdIDxjb21taXQtaXNoPicgIDs7CisqICkKKwllY2hvID4mMiAiV2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorCWV4aXQgMSA7OworZXNhYworCitTVUJESVJFQ1RPUllfT0s9WWVzIDsjIHdlIHdpbGwgY2QgdXAKKy4gZ2l0LXNoLXNldHVwCityZXF1aXJlX3dvcmtfdHJlZQorY2RfdG9fdG9wbGV2ZWwKKworbm9fY29tbWl0PQoreG9wdD0KK3doaWxlIGNhc2UgIiQjIiBpbiAwKSBicmVhayA7OyBlc2FjCitkbworCWNhc2UgIiQxIiBpbgorCS1ufC0tbnwtLW5vfC0tbm8tfC0tbm8tY3wtLW5vLWNvfC0tbm8tY29tfC0tbm8tY29tbXxcCisJICAgIC0tbm8tY29tbWl8LS1uby1jb21taXQpCisJCW5vX2NvbW1pdD10CisJCTs7CisJLWV8LS1lfC0tZWR8LS1lZGl8LS1lZGl0KQorCQllZGl0PS1lCisJCTs7CisJLS1ufC0tbm98LS1uby18LS1uby1lfC0tbm8tZWR8LS1uby1lZGl8LS1uby1lZGl0KQorCQllZGl0PQorCQk7OworCS1yKQorCQk6IG5vLW9wIDs7CisJLXh8LS1pLXJlYWxseS13YW50LXRvLWV4cG9zZS1teS1wcml2YXRlLWNvbW1pdC1vYmplY3QtbmFtZSkKKwkJcmVwbGF5PQorCQk7OworCS1YPyopCisJCXhvcHQ9IiR4b3B0JChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIi0tJHsxIy1YfSIpIgorCQk7OworCS0tc3RyYXRlZ3ktb3B0aW9uPSopCisJCXhvcHQ9IiR4b3B0JChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIi0tJHsxIy0tc3RyYXRlZ3ktb3B0aW9uPX0iKSIKKwkJOzsKKwktWHwtLXN0cmF0ZWd5LW9wdGlvbikKKwkJc2hpZnQKKwkJeG9wdD0iJHhvcHQkKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiLS0kMSIpIgorCQk7OworCS0qKQorCQl1c2FnZQorCQk7OworCSopCisJCWJyZWFrCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK3NldF9yZWZsb2dfYWN0aW9uICIkbWUiCisKK3Rlc3QgIiRtZSwkcmVwbGF5IiA9ICJyZXZlcnQsdCIgJiYgdXNhZ2UKKworY2FzZSAiJG5vX2NvbW1pdCIgaW4KK3QpCisJIyBXZSBkbyBub3QgaW50ZW5kIHRvIGNvbW1pdCBpbW1lZGlhdGVseS4gIFdlIGp1c3Qgd2FudCB0bworCSMgbWVyZ2UgdGhlIGRpZmZlcmVuY2VzIGluLgorCWhlYWQ9JChnaXQtd3JpdGUtdHJlZSkgfHwKKwkJZGllICJZb3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorCTs7CisqKQorCWhlYWQ9JChnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIHx8CisJCWRpZSAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRCIKKwlmaWxlcz0kKGdpdC1kaWZmLWluZGV4IC0tY2FjaGVkIC0tbmFtZS1vbmx5ICRoZWFkKSB8fCBleGl0CisJaWYgWyAiJGZpbGVzIiBdOyB0aGVuCisJCWRpZSAiRGlydHkgaW5kZXg6IGNhbm5vdCAkbWUgKGRpcnR5OiAkZmlsZXMpIgorCWZpCisJOzsKK2VzYWMKKworcmV2PSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJEAiKSAmJgorY29tbWl0PSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJHJldl4wIikgfHwKKwlkaWUgIk5vdCBhIHNpbmdsZSBjb21taXQgJEAiCitwcmV2PSQoZ2l0LXJldi1wYXJzZSAtLXZlcmlmeSAiJGNvbW1pdF4xIiAyPi9kZXYvbnVsbCkgfHwKKwlkaWUgIkNhbm5vdCBydW4gJG1lIGEgcm9vdCBjb21taXQiCitnaXQtcmV2LXBhcnNlIC0tdmVyaWZ5ICIkY29tbWl0XjIiID4vZGV2L251bGwgMj4mMSAmJgorCWRpZSAiQ2Fubm90IHJ1biAkbWUgYSBtdWx0aS1wYXJlbnQgY29tbWl0LiIKKworZW5jb2Rpbmc9JChnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgfHwgZWNobyBVVEYtOCkKKworIyAiY29tbWl0IiBpcyBhbiBleGlzdGluZyBjb21taXQuICBXZSB3b3VsZCB3YW50IHRvIGFwcGx5CisjIHRoZSBkaWZmZXJlbmNlIGl0IGludHJvZHVjZXMgc2luY2UgaXRzIGZpcnN0IHBhcmVudCAicHJldiIKKyMgb24gdG9wIG9mIHRoZSBjdXJyZW50IEhFQUQgaWYgd2UgYXJlIGNoZXJyeS1waWNrLiAgT3IgdGhlCisjIHJldmVyc2Ugb2YgaXQgaWYgd2UgYXJlIHJldmVydC4KKworY2FzZSAiJG1lIiBpbgorcmV2ZXJ0KQorCWdpdCBzaG93IC1zIC0tcHJldHR5PW9uZWxpbmUgLS1lbmNvZGluZz0iJGVuY29kaW5nIiAkY29tbWl0IHwKKwlzZWQgLWUgJworCQlzL15bXiBdKiAvUmV2ZXJ0ICIvCisJCXMvJC8iLworCScKKwllY2hvCisJZWNobyAiVGhpcyByZXZlcnRzIGNvbW1pdCAkY29tbWl0LiIKKwl0ZXN0ICIkcmV2IiA9ICIkY29tbWl0IiB8fAorCWVjaG8gIihvcmlnaW5hbCAnZ2l0IHJldmVydCcgYXJndW1lbnRzOiAkQCkiCisJYmFzZT0kY29tbWl0IG5leHQ9JHByZXYKKwk7OworCitjaGVycnktcGljaykKKwlwaWNrX2F1dGhvcl9zY3JpcHQ9JworCS9eYXV0aG9yIC97CisJCXMvJ1wnJy8nXCcnXFwnXCdcJycvZworCQloCisJCXMvXmF1dGhvciBcKFtePF0qXCkgPFtePl0qPiAuKiQvXDEvCisJCXMvJ1wnJy8nXCcnXCdcJ1wnJy9nCisJCXMvLiovR0lUX0FVVEhPUl9OQU1FPSdcJycmJ1wnJy9wCisKKwkJZworCQlzL15hdXRob3IgW148XSogPFwoW14+XSpcKT4gLiokL1wxLworCQlzLydcJycvJ1wnJ1wnXCdcJycvZworCQlzLy4qL0dJVF9BVVRIT1JfRU1BSUw9J1wnJyYnXCcnL3AKKworCQlnCisJCXMvXmF1dGhvciBbXjxdKiA8W14+XSo+IFwoLipcKSQvXDEvCisJCXMvJ1wnJy8nXCcnXCdcJ1wnJy9nCisJCXMvLiovR0lUX0FVVEhPUl9EQVRFPSdcJycmJ1wnJy9wCisKKwkJcQorCX0nCisKKwlsb2dtc2c9JChnaXQgc2hvdyAtcyAtLXByZXR0eT1yYXcgLS1lbmNvZGluZz0iJGVuY29kaW5nIiAiJGNvbW1pdCIpCisJc2V0X2F1dGhvcl9lbnY9YGVjaG8gIiRsb2dtc2ciIHwKKwlMQU5HPUMgTENfQUxMPUMgc2VkIC1uZSAiJHBpY2tfYXV0aG9yX3NjcmlwdCJgCisJZXZhbCAiJHNldF9hdXRob3JfZW52IgorCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUKKwlleHBvcnQgR0lUX0FVVEhPUl9FTUFJTAorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUKKworCWVjaG8gIiRsb2dtc2ciIHwKKwlzZWQgLWUgJzEsL14kL2QnIC1lICdzL14gICAgLy8nCisJY2FzZSAiJHJlcGxheSIgaW4KKwknJykKKwkJZWNobyAiKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJGNvbW1pdCkiCisJCXRlc3QgIiRyZXYiID0gIiRjb21taXQiIHx8CisJCWVjaG8gIihvcmlnaW5hbCAnZ2l0IGNoZXJyeS1waWNrJyBhcmd1bWVudHM6ICRAKSIKKwkJOzsKKwllc2FjCisJYmFzZT0kcHJldiBuZXh0PSRjb21taXQKKwk7OworCitlc2FjID4ubXNnCisKK2V2YWwgR0lUSEVBRF8kaGVhZD1IRUFECitldmFsIEdJVEhFQURfJG5leHQ9J2BnaXQgc2hvdyAtcyBcCisJLS1wcmV0dHk9b25lbGluZSAtLWVuY29kaW5nPSIkZW5jb2RpbmciICIkY29tbWl0IiB8CisJc2VkIC1lICJzL15bXiBdKiAvLyJgJworZXhwb3J0IEdJVEhFQURfJGhlYWQgR0lUSEVBRF8kbmV4dAorCisjIFRoaXMgdGhyZWUgd2F5IG1lcmdlIGlzIGFuIGludGVyZXN0aW5nIG9uZS4gIFdlIGFyZSBhdAorIyAkaGVhZCwgYW5kIHdvdWxkIHdhbnQgdG8gYXBwbHkgdGhlIGNoYW5nZSBiZXR3ZWVuICRjb21taXQKKyMgYW5kICRwcmV2IG9uIHRvcCBvZiB1cyAod2hlbiByZXZlcnRpbmcpLCBvciB0aGUgY2hhbmdlIGJldHdlZW4KKyMgJHByZXYgYW5kICRjb21taXQgb24gdG9wIG9mIHVzICh3aGVuIGNoZXJyeS1waWNraW5nIG9yIHJlcGxheWluZykuCisKK2V2YWwgImdpdCBtZXJnZS1yZWN1cnNpdmUgJHhvcHQgJGJhc2UgLS0gJGhlYWQgJG5leHQiICYmCityZXN1bHQ9JChnaXQtd3JpdGUtdHJlZSAyPi9kZXYvbnVsbCkgfHwgeworCW12IC1mIC5tc2cgIiRHSVRfRElSL01FUkdFX01TRyIKKwl7CisJICAgIGVjaG8gJworQ29uZmxpY3RzOgorJworCQlnaXQgbHMtZmlsZXMgLS11bm1lcmdlZCB8CisJCXNlZCAtZSAncy9eW14JXSoJLwkvJyB8CisJCXVuaXEKKwl9ID4+IiRHSVRfRElSL01FUkdFX01TRyIKKwllY2hvID4mMiAiQXV0b21hdGljICRtZSBmYWlsZWQuICBBZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywiCisJZWNobyA+JjIgIm1hcmsgdGhlIGNvcnJlY3RlZCBwYXRocyB3aXRoICdnaXQtYWRkIDxwYXRocz4nIgorCWVjaG8gPiYyICJhbmQgY29tbWl0IHRoZSByZXN1bHQuIgorCWNhc2UgIiRtZSIgaW4KKwljaGVycnktcGljaykKKwkJZWNobyA+JjIgIllvdSBtYXkgY2hvb3NlIHRvIHVzZSB0aGUgZm9sbG93aW5nIHdoZW4gbWFraW5nIgorCQllY2hvID4mMiAidGhlIGNvbW1pdDoiCisJCWVjaG8gPiYyICIkc2V0X2F1dGhvcl9lbnYiCisJZXNhYworCWV4aXQgMQorfQorCisjIElmIHdlIGFyZSBjaGVycnktcGljaywgYW5kIGlmIHRoZSBtZXJnZSBkaWQgbm90IHJlc3VsdCBpbgorIyBoYW5kLWVkaXRpbmcsIHdlIHdpbGwgaGl0IHRoaXMgY29tbWl0IGFuZCBpbmhlcml0IHRoZSBvcmlnaW5hbAorIyBhdXRob3IgZGF0ZSBhbmQgbmFtZS4KKyMgSWYgd2UgYXJlIHJldmVydCwgb3IgaWYgb3VyIGNoZXJyeS1waWNrIHJlc3VsdHMgaW4gYSBoYW5kIG1lcmdlLAorIyB3ZSBoYWQgYmV0dGVyIHNheSB0aGF0IHRoZSBjdXJyZW50IHVzZXIgaXMgcmVzcG9uc2libGUgZm9yIHRoYXQuCisKK2Nhc2UgIiRub19jb21taXQiIGluCisnJykKKwlnaXQtY29tbWl0IC1uIC1GIC5tc2cgJGVkaXQKKwlybSAtZiAubXNnCisJOzsKK2VzYWMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXN2bmltcG9ydC5wZXJsIGIvY29udHJpYi9leGFtcGxlcy9naXQtc3ZuaW1wb3J0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzQxNGYwZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXN2bmltcG9ydC5wZXJsCkBAIC0wLDAgKzEsOTc2IEBACisjIS91c3IvYmluL3BlcmwKKworIyBUaGlzIHRvb2wgaXMgY29weXJpZ2h0IChjKSAyMDA1LCBNYXR0aGlhcyBVcmxpY2hzLgorIyBJdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR251IFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuCisjCisjIFRoZSBiYXNpYyBpZGVhIGlzIHRvIHB1bGwgYW5kIGFuYWx5emUgU1ZOIGNoYW5nZXMuCisjCisjIENoZWNraW5nIG91dCB0aGUgZmlsZXMgaXMgZG9uZSBieSBhIHNpbmdsZSBsb25nLXJ1bm5pbmcgU1ZOIGNvbm5lY3Rpb24uCisjCisjIFRoZSBoZWFkIHJldmlzaW9uIGlzIG9uIGJyYW5jaCAib3JpZ2luIiBieSBkZWZhdWx0LgorIyBZb3UgY2FuIGNoYW5nZSB0aGF0IHdpdGggdGhlICctbycgb3B0aW9uLgorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdldG9wdDo6U3RkOwordXNlIEZpbGU6OkNvcHk7Cit1c2UgRmlsZTo6U3BlYzsKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBmaWxlKTsKK3VzZSBGaWxlOjpQYXRoIHF3KG1rcGF0aCk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUgZGlybmFtZSk7Cit1c2UgVGltZTo6TG9jYWw7Cit1c2UgSU86OlBpcGU7Cit1c2UgUE9TSVggcXcoc3RyZnRpbWUgZHVwMik7Cit1c2UgSVBDOjpPcGVuMjsKK3VzZSBTVk46OkNvcmU7Cit1c2UgU1ZOOjpSYTsKKworZGllICJOZWVkIFNWTjpDb3JlIDEuMi4xIG9yIGJldHRlciIgaWYgJFNWTjo6Q29yZTo6VkVSU0lPTiBsdCAiMS4yLjEiOworCiskU0lHeydQSVBFJ309IklHTk9SRSI7CiskRU5WeydUWid9PSJVVEMiOworCitvdXIoJG9wdF9oLCRvcHRfbywkb3B0X3YsJG9wdF91LCRvcHRfQywkb3B0X2ksJG9wdF9tLCRvcHRfTSwkb3B0X3QsJG9wdF9ULAorICAgICRvcHRfYiwkb3B0X3IsJG9wdF9JLCRvcHRfQSwkb3B0X3MsJG9wdF9sLCRvcHRfZCwkb3B0X0QsJG9wdF9TLCRvcHRfRiwKKyAgICAkb3B0X1AsJG9wdF9SKTsKKworc3ViIHVzYWdlKCkgeworCXByaW50IFNUREVSUiA8PEVORDsKK3VzYWdlOiAke1xiYXNlbmFtZSAkMH0gICAgICMgZmV0Y2gvdXBkYXRlIEdJVCBmcm9tIFNWTgorICAgICAgIFstbyBicmFuY2gtZm9yLUhFQURdIFstaF0gWy12XSBbLWwgbWF4X3Jldl0gWy1SIHJlcGFja19lYWNoX3JldnNdCisgICAgICAgWy1DIEdJVF9yZXBvc2l0b3J5XSBbLXQgdGFnbmFtZV0gWy1UIHRydW5rbmFtZV0gWy1iIGJyYW5jaG5hbWVdCisgICAgICAgWy1kfC1EXSBbLWldIFstdV0gWy1yXSBbLUkgaWdub3JlZmlsZW5hbWVdIFstcyBzdGFydF9jaGddCisgICAgICAgWy1tXSBbLU0gcmVnZXhdIFstQSBhdXRob3JfZmlsZV0gWy1TXSBbLUZdIFstUCBwcm9qZWN0X25hbWVdIFtTVk5fVVJMXQorRU5ECisJZXhpdCgxKTsKK30KKworZ2V0b3B0cygiQTpiOkM6ZERGaGlJOmw6bU06bzpyczp0OlQ6U1A6Ujp1diIpIG9yIHVzYWdlKCk7Cit1c2FnZSBpZiAkb3B0X2g7CisKK215ICR0YWdfbmFtZSA9ICRvcHRfdCB8fCAidGFncyI7CitteSAkdHJ1bmtfbmFtZSA9IGRlZmluZWQgJG9wdF9UID8gJG9wdF9UIDogInRydW5rIjsKK215ICRicmFuY2hfbmFtZSA9ICRvcHRfYiB8fCAiYnJhbmNoZXMiOworbXkgJHByb2plY3RfbmFtZSA9ICRvcHRfUCB8fCAiIjsKKyRwcm9qZWN0X25hbWUgPSAiLyIgLiAkcHJvamVjdF9uYW1lIGlmICgkcHJvamVjdF9uYW1lKTsKK215ICRyZXBhY2tfYWZ0ZXIgPSAkb3B0X1IgfHwgMTAwMDsKK215ICRyb290X3Bvb2wgPSBTVk46OlBvb2wtPm5ld19kZWZhdWx0OworCitAQVJHViA9PSAxIG9yIEBBUkdWID09IDIgb3IgdXNhZ2UoKTsKKworJG9wdF9vIHx8PSAib3JpZ2luIjsKKyRvcHRfcyB8fD0gMTsKK215ICRnaXRfdHJlZSA9ICRvcHRfQzsKKyRnaXRfdHJlZSB8fD0gIi4iOworCitteSAkc3ZuX3VybCA9ICRBUkdWWzBdOworbXkgJHN2bl9kaXIgPSAkQVJHVlsxXTsKKworb3VyIEBtZXJnZXJ4ID0gKCk7CitpZiAoJG9wdF9tKSB7CisJbXkgJGJyYW5jaF9lc2MgPSBxdW90ZW1ldGEgKCRicmFuY2hfbmFtZSk7CisJbXkgJHRydW5rX2VzYyAgPSBxdW90ZW1ldGEgKCR0cnVua19uYW1lKTsKKwlAbWVyZ2VyeCA9CisJKAorCQlxciFcYig/Om1lcmcoPzplZD98aW5nKSlcYi4qP1xiKCg/Oig/PD0kYnJhbmNoX2VzYy8pW1x3XC5cLV0rKXwoPzokdHJ1bmtfZXNjKSlcYiFpLAorCQlxciFcYig/OmZyb218b2YpXFcrKCg/Oig/PD0kYnJhbmNoX2VzYy8pW1x3XC5cLV0rKXwoPzokdHJ1bmtfZXNjKSlcYiFpLAorCQlxciFcYig/OmZyb218b2YpXFcrKD86dGhlICk/KFtcd1wuXC1dKylbLVxzXWJyYW5jaFxiIWkKKwkpOworfQoraWYgKCRvcHRfTSkgeworCXVuc2hpZnQgKEBtZXJnZXJ4LCBxci8kb3B0X00vKTsKK30KKworIyBBYnNvbHV0aXplIGZpbGVuYW1lIG5vdywgc2luY2Ugd2Ugd2lsbCBoYXZlIGNoZGlyJ2VkIGJ5IHRoZSB0aW1lIHdlCisjIGdldCBhcm91bmQgdG8gb3BlbmluZyBpdC4KKyRvcHRfQSA9IEZpbGU6OlNwZWMtPnJlbDJhYnMoJG9wdF9BKSBpZiAkb3B0X0E7CisKK291ciAldXNlcnMgPSAoKTsKK291ciAkdXNlcnNfZmlsZSA9IHVuZGVmOworc3ViIHJlYWRfdXNlcnMoJCkgeworCSR1c2Vyc19maWxlID0gRmlsZTo6U3BlYy0+cmVsMmFicyhAXyk7CisJZGllICJDYW5ub3Qgb3BlbiAkdXNlcnNfZmlsZVxuIiB1bmxlc3MgLWYgJHVzZXJzX2ZpbGU7CisJb3BlbihteSAkYXV0aG9ycywkdXNlcnNfZmlsZSk7CisJd2hpbGUoPCRhdXRob3JzPikgeworCQljaG9tcDsKKwkJbmV4dCB1bmxlc3MgL14oXFMrPylccyo9XHMqKC4rPylccyo8KC4rKT5ccyokLzsKKwkJKG15ICR1c2VyLG15ICRuYW1lLG15ICRlbWFpbCkgPSAoJDEsJDIsJDMpOworCQkkdXNlcnN7JHVzZXJ9ID0gWyRuYW1lLCRlbWFpbF07CisJfQorCWNsb3NlKCRhdXRob3JzKTsKK30KKworc2VsZWN0KFNUREVSUik7ICR8PTE7IHNlbGVjdChTVERPVVQpOworCisKK3BhY2thZ2UgU1ZOY29ubjsKKyMgQmFzaWMgU1ZOIGNvbm5lY3Rpb24uCisjIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiBjb25uZWN0aW5nIGFuZCBkb3dubG9hZGluZywgc28gLi4uCisKK3VzZSBGaWxlOjpTcGVjOwordXNlIEZpbGU6OlRlbXAgcXcodGVtcGZpbGUpOwordXNlIFBPU0lYIHF3KHN0cmZ0aW1lIGR1cDIpOwordXNlIEZjbnRsIHF3KFNFRUtfU0VUKTsKKworc3ViIG5ldyB7CisJbXkoJHdoYXQsJHJlcG8pID0gQF87CisJJHdoYXQ9cmVmKCR3aGF0KSBpZiByZWYoJHdoYXQpOworCisJbXkgJHNlbGYgPSB7fTsKKwkkc2VsZi0+eydidWZmZXInfSA9ICIiOworCWJsZXNzKCRzZWxmLCR3aGF0KTsKKworCSRyZXBvID1+IHMjLyskIyM7CisJJHNlbGYtPnsnZnVsbHJlcCd9ID0gJHJlcG87CisJJHNlbGYtPmNvbm4oKTsKKworCXJldHVybiAkc2VsZjsKK30KKworc3ViIGNvbm4geworCW15ICRzZWxmID0gc2hpZnQ7CisJbXkgJHJlcG8gPSAkc2VsZi0+eydmdWxscmVwJ307CisJbXkgJGF1dGggPSBTVk46OkNvcmU6OmF1dGhfb3BlbiAoW1NWTjo6Q2xpZW50OjpnZXRfc2ltcGxlX3Byb3ZpZGVyLAorCQkJICBTVk46OkNsaWVudDo6Z2V0X3NzbF9zZXJ2ZXJfdHJ1c3RfZmlsZV9wcm92aWRlciwKKwkJCSAgU1ZOOjpDbGllbnQ6OmdldF91c2VybmFtZV9wcm92aWRlcl0pOworCW15ICRzID0gU1ZOOjpSYS0+bmV3KHVybCA9PiAkcmVwbywgYXV0aCA9PiAkYXV0aCwgcG9vbCA9PiAkcm9vdF9wb29sKTsKKwlkaWUgIlNWTiBjb25uZWN0aW9uIHRvICRyZXBvOiAkIVxuIiB1bmxlc3MgZGVmaW5lZCAkczsKKwkkc2VsZi0+eydzdm4nfSA9ICRzOworCSRzZWxmLT57J3JlcG8nfSA9ICRyZXBvOworCSRzZWxmLT57J21heHJldid9ID0gJHMtPmdldF9sYXRlc3RfcmV2bnVtKCk7Cit9CisKK3N1YiBmaWxlIHsKKwlteSgkc2VsZiwkcGF0aCwkcmV2KSA9IEBfOworCisJbXkgKCRmaCwgJG5hbWUpID0gdGVtcGZpbGUoJ2dpdHN2bi5YWFhYWFgnLAorCQkgICAgRElSID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpLCBVTkxJTksgPT4gMSk7CisKKwlwcmludCAiLi4uICRyZXYgJHBhdGggLi4uXG4iIGlmICRvcHRfdjsKKwlteSAodW5kZWYsICRwcm9wZXJ0aWVzKTsKKwkkcGF0aCA9fiBzI14vKiMjOworCW15ICRzdWJwb29sID0gU1ZOOjpQb29sOjpuZXdfZGVmYXVsdF9zdWI7CisJZXZhbCB7ICh1bmRlZiwgJHByb3BlcnRpZXMpCisJCSAgID0gJHNlbGYtPnsnc3ZuJ30tPmdldF9maWxlKCRwYXRoLCRyZXYsJGZoKTsgfTsKKwlpZigkQCkgeworCQlyZXR1cm4gdW5kZWYgaWYgJEAgPX4gL0F0dGVtcHRlZCB0byBnZXQgY2hlY2tzdW0vOworCQlkaWUgJEA7CisJfQorCW15ICRtb2RlOworCWlmIChleGlzdHMgJHByb3BlcnRpZXMtPnsnc3ZuOmV4ZWN1dGFibGUnfSkgeworCQkkbW9kZSA9ICcxMDA3NTUnOworCX0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllcy0+eydzdm46c3BlY2lhbCd9KSB7CisJCW15ICgkc3BlY2lhbF9jb250ZW50LCAkZmlsZXNpemUpOworCQkkZmlsZXNpemUgPSB0ZWxsICRmaDsKKwkJc2VlayAkZmgsIDAsIFNFRUtfU0VUOworCQlyZWFkICRmaCwgJHNwZWNpYWxfY29udGVudCwgJGZpbGVzaXplOworCQlpZiAoJHNwZWNpYWxfY29udGVudCA9fiBzL15saW5rIC8vKSB7CisJCQkkbW9kZSA9ICcxMjAwMDAnOworCQkJc2VlayAkZmgsIDAsIFNFRUtfU0VUOworCQkJdHJ1bmNhdGUgJGZoLCAwOworCQkJcHJpbnQgJGZoICRzcGVjaWFsX2NvbnRlbnQ7CisJCX0gZWxzZSB7CisJCQlkaWUgInVuZXhwZWN0ZWQgc3ZuOnNwZWNpYWwgZmlsZSBlbmNvdW50ZXJlZCI7CisJCX0KKwl9IGVsc2UgeworCQkkbW9kZSA9ICcxMDA2NDQnOworCX0KKwljbG9zZSAoJGZoKTsKKworCXJldHVybiAoJG5hbWUsICRtb2RlKTsKK30KKworc3ViIGlnbm9yZSB7CisJbXkoJHNlbGYsJHBhdGgsJHJldikgPSBAXzsKKworCXByaW50ICIuLi4gJHJldiAkcGF0aCAuLi5cbiIgaWYgJG9wdF92OworCSRwYXRoID1+IHMjXi8qIyM7CisJbXkgJHN1YnBvb2wgPSBTVk46OlBvb2w6Om5ld19kZWZhdWx0X3N1YjsKKwlteSAodW5kZWYsdW5kZWYsJHByb3BlcnRpZXMpCisJICAgID0gJHNlbGYtPnsnc3ZuJ30tPmdldF9kaXIoJHBhdGgsJHJldix1bmRlZik7CisJaWYgKGV4aXN0cyAkcHJvcGVydGllcy0+eydzdm46aWdub3JlJ30pIHsKKwkJbXkgKCRmaCwgJG5hbWUpID0gdGVtcGZpbGUoJ2dpdHN2bi5YWFhYWFgnLAorCQkJCQkgICBESVIgPT4gRmlsZTo6U3BlYy0+dG1wZGlyKCksCisJCQkJCSAgIFVOTElOSyA9PiAxKTsKKwkJcHJpbnQgJGZoICRwcm9wZXJ0aWVzLT57J3N2bjppZ25vcmUnfTsKKwkJY2xvc2UoJGZoKTsKKwkJcmV0dXJuICRuYW1lOworCX0gZWxzZSB7CisJCXJldHVybiB1bmRlZjsKKwl9Cit9CisKK3N1YiBkaXJfbGlzdCB7CisJbXkoJHNlbGYsJHBhdGgsJHJldikgPSBAXzsKKwkkcGF0aCA9fiBzI14vKiMjOworCW15ICRzdWJwb29sID0gU1ZOOjpQb29sOjpuZXdfZGVmYXVsdF9zdWI7CisJbXkgKCRkaXJlbnRzLHVuZGVmLCRwcm9wZXJ0aWVzKQorCSAgICA9ICRzZWxmLT57J3N2bid9LT5nZXRfZGlyKCRwYXRoLCRyZXYsdW5kZWYpOworCXJldHVybiAkZGlyZW50czsKK30KKworcGFja2FnZSBtYWluOwordXNlIFVSSTsKKworb3VyICRzdm4gPSAkc3ZuX3VybDsKKyRzdm4gLj0gIi8kc3ZuX2RpciIgaWYgZGVmaW5lZCAkc3ZuX2RpcjsKK215ICRzdm4yID0gU1ZOY29ubi0+bmV3KCRzdm4pOworJHN2biA9IFNWTmNvbm4tPm5ldygkc3ZuKTsKKworbXkgJGx3cF91YTsKK2lmKCRvcHRfZCBvciAkb3B0X0QpIHsKKwkkc3ZuX3VybCA9IFVSSS0+bmV3KCRzdm5fdXJsKS0+Y2Fub25pY2FsOworCWlmKCRvcHRfRCkgeworCQkkc3ZuX2RpciA9fiBzIy8qJCMvIzsKKwl9IGVsc2UgeworCQkkc3ZuX2RpciA9ICIiOworCX0KKwlpZiAoJHN2bl91cmwtPnNjaGVtZSBlcSAiaHR0cCIpIHsKKwkJdXNlIExXUDo6VXNlckFnZW50OworCQkkbHdwX3VhID0gTFdQOjpVc2VyQWdlbnQtPm5ldyhrZWVwX2FsaXZlID0+IDEsIHJlcXVlc3RzX3JlZGlyZWN0YWJsZSA9PiBbXSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSICJXYXJuaW5nOiBub3QgSFRUUDsgdHVybmluZyBvZmYgZGlyZWN0IGZpbGUgYWNjZXNzXG4iOworCQkkb3B0X2Q9MDsKKwl9Cit9CisKK3N1YiBwZGF0ZSgkKSB7CisJbXkoJGQpID0gQF87CisJJGQgPX4gbSMoXGRcZFxkXGQpLShcZFxkKS0oXGRcZClUKFxkXGQpOihcZFxkKTooXGRcZCkjCisJCW9yIGRpZSAiVW5wYXJzZWFibGUgZGF0ZTogJGRcbiI7CisJbXkgJHk9JDE7ICR5LT0xOTAwIGlmICR5PjE5MDA7CisJcmV0dXJuIHRpbWVnbSgkNnx8MCwkNSwkNCwkMywkMi0xLCR5KTsKK30KKworc3ViIGdldHdkKCkgeworCW15ICRwd2QgPSBgcHdkYDsKKwljaG9tcCAkcHdkOworCXJldHVybiAkcHdkOworfQorCisKK3N1YiBnZXRfaGVhZHJlZigkJCkgeworICAgIG15ICRuYW1lICAgID0gc2hpZnQ7CisgICAgbXkgJGdpdF9kaXIgPSBzaGlmdDsKKyAgICBteSAkc2hhOworCisgICAgaWYgKG9wZW4oQywiJGdpdF9kaXIvcmVmcy9oZWFkcy8kbmFtZSIpKSB7CisJY2hvbXAoJHNoYSA9IDxDPik7CisJY2xvc2UoQyk7CisJbGVuZ3RoKCRzaGEpID09IDQwCisJICAgIG9yIGRpZSAiQ2Fubm90IGdldCBoZWFkIGlkIGZvciAkbmFtZSAoJHNoYSk6ICQhXG4iOworICAgIH0KKyAgICByZXR1cm4gJHNoYTsKK30KKworCistZCAkZ2l0X3RyZWUKKwlvciBta2RpcigkZ2l0X3RyZWUsMDc3NykKKwlvciBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgJGdpdF90cmVlOiAkISI7CitjaGRpcigkZ2l0X3RyZWUpOworCitteSAkb3JpZ19icmFuY2ggPSAiIjsKK215ICRmb3J3YXJkX21hc3RlciA9IDA7CitteSAlYnJhbmNoZXM7CisKK215ICRnaXRfZGlyID0gJEVOVnsiR0lUX0RJUiJ9IHx8ICIuZ2l0IjsKKyRnaXRfZGlyID0gZ2V0d2QoKS4iLyIuJGdpdF9kaXIgdW5sZXNzICRnaXRfZGlyID1+IG0jXi8jOworJEVOVnsiR0lUX0RJUiJ9ID0gJGdpdF9kaXI7CitteSAkb3JpZ19naXRfaW5kZXg7Ciskb3JpZ19naXRfaW5kZXggPSAkRU5We0dJVF9JTkRFWF9GSUxFfSBpZiBleGlzdHMgJEVOVntHSVRfSU5ERVhfRklMRX07CitteSAoJGdpdF9paCwgJGdpdF9pbmRleCkgPSB0ZW1wZmlsZSgnZ2l0WFhYWFhYJywgU1VGRklYID0+ICcuaWR4JywKKwkJCQkgICAgRElSID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpKTsKK2Nsb3NlICgkZ2l0X2loKTsKKyRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJGdpdF9pbmRleDsKK215ICRtYXhudW0gPSAwOworbXkgJGxhc3RfcmV2ID0gIiI7CitteSAkbGFzdF9icmFuY2g7CitteSAkY3VycmVudF9yZXYgPSAkb3B0X3MgfHwgMTsKK3VubGVzcygtZCAkZ2l0X2RpcikgeworCXN5c3RlbSgiZ2l0IGluaXQiKTsKKwlkaWUgIkNhbm5vdCBpbml0IHRoZSBHSVQgZGIgYXQgJGdpdF90cmVlOiAkP1xuIiBpZiAkPzsKKwlzeXN0ZW0oImdpdCByZWFkLXRyZWUgLS1lbXB0eSIpOworCWRpZSAiQ2Fubm90IGluaXQgYW4gZW1wdHkgdHJlZTogJD9cbiIgaWYgJD87CisKKwkkbGFzdF9icmFuY2ggPSAkb3B0X287CisJJG9yaWdfYnJhbmNoID0gIiI7Cit9IGVsc2UgeworCS1mICIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRvcHRfbyIKKwkJb3IgZGllICJCcmFuY2ggJyRvcHRfbycgZG9lcyBub3QgZXhpc3QuXG4iLgorCQkgICAgICAgIkVpdGhlciB1c2UgdGhlIGNvcnJlY3QgJy1vIGJyYW5jaCcgb3B0aW9uLFxuIi4KKwkJICAgICAgICJvciBpbXBvcnQgdG8gYSBuZXcgcmVwb3NpdG9yeS5cbiI7CisKKwktZiAiJGdpdF9kaXIvc3ZuMmdpdCIKKwkJb3IgZGllICInJGdpdF9kaXIvc3ZuMmdpdCcgZG9lcyBub3QgZXhpc3QuXG4iLgorCQkgICAgICAgIllvdSBuZWVkIHRoYXQgZmlsZSBmb3IgaW5jcmVtZW50YWwgaW1wb3J0cy5cbiI7CisJb3BlbihGLCAiZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHwiKSBvcgorCQlkaWUgIkNhbm5vdCBydW4gZ2l0LXN5bWJvbGljLXJlZjogJCFcbiI7CisJY2hvbXAgKCRsYXN0X2JyYW5jaCA9IDxGPik7CisJJGxhc3RfYnJhbmNoID0gYmFzZW5hbWUoJGxhc3RfYnJhbmNoKTsKKwljbG9zZShGKTsKKwl1bmxlc3MoJGxhc3RfYnJhbmNoKSB7CisJCXdhcm4gIkNhbm5vdCByZWFkIHRoZSBsYXN0IGJyYW5jaCBuYW1lOiAkISAtLSBhc3N1bWluZyAnbWFzdGVyJ1xuIjsKKwkJJGxhc3RfYnJhbmNoID0gIm1hc3RlciI7CisJfQorCSRvcmlnX2JyYW5jaCA9ICRsYXN0X2JyYW5jaDsKKwkkbGFzdF9yZXYgPSBnZXRfaGVhZHJlZigkb3JpZ19icmFuY2gsICRnaXRfZGlyKTsKKwlpZiAoLWYgIiRnaXRfZGlyL1NWTjJHSVRfSEVBRCIpIHsKKwkJZGllIDw8RU9NOworU1ZOMkdJVF9IRUFEIGV4aXN0cy4KK01ha2Ugc3VyZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGNvcnJlc3BvbmRzIHRvIEhFQUQgYW5kIHJlbW92ZSBTVk4yR0lUX0hFQUQuCitZb3UgbWF5IG5lZWQgdG8gcnVuCisKKyAgICBnaXQtcmVhZC10cmVlIC1tIC11IFNWTjJHSVRfSEVBRCBIRUFECitFT00KKwl9CisJc3lzdGVtKCdjcCcsICIkZ2l0X2Rpci9IRUFEIiwgIiRnaXRfZGlyL1NWTjJHSVRfSEVBRCIpOworCisJJGZvcndhcmRfbWFzdGVyID0KKwkgICAgJG9wdF9vIG5lICdtYXN0ZXInICYmIC1mICIkZ2l0X2Rpci9yZWZzL2hlYWRzL21hc3RlciIgJiYKKwkgICAgc3lzdGVtKCdjbXAnLCAnLXMnLCAiJGdpdF9kaXIvcmVmcy9oZWFkcy9tYXN0ZXIiLAorCQkJCSIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRvcHRfbyIpID09IDA7CisKKwkjIHBvcHVsYXRlIGluZGV4CisJc3lzdGVtKCdnaXQnLCAncmVhZC10cmVlJywgJGxhc3RfcmV2KTsKKwlkaWUgInJlYWQtdHJlZSBmYWlsZWQ6ICQ/XG4iIGlmICQ/OworCisJIyBHZXQgdGhlIGxhc3QgaW1wb3J0IHRpbWVzdGFtcHMKKwlvcGVuIG15ICRCLCI8IiwgIiRnaXRfZGlyL3N2bjJnaXQiOworCXdoaWxlKDwkQj4pIHsKKwkJY2hvbXA7CisJCW15KCRudW0sJGJyYW5jaCwkcmVmKSA9IHNwbGl0OworCQkkYnJhbmNoZXN7JGJyYW5jaH17JG51bX0gPSAkcmVmOworCQkkYnJhbmNoZXN7JGJyYW5jaH17IkxBU1QifSA9ICRyZWY7CisJCSRjdXJyZW50X3JldiA9ICRudW0rMSBpZiAkY3VycmVudF9yZXYgPD0gJG51bTsKKwl9CisJY2xvc2UoJEIpOworfQorLWQgJGdpdF9kaXIKKwlvciBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgZ2l0IHN1YmRpciAoJGdpdF9kaXIpLlxuIjsKKworbXkgJGRlZmF1bHRfYXV0aG9ycyA9ICIkZ2l0X2Rpci9zdm4tYXV0aG9ycyI7CitpZiAoJG9wdF9BKSB7CisJcmVhZF91c2Vycygkb3B0X0EpOworCWNvcHkoJG9wdF9BLCRkZWZhdWx0X2F1dGhvcnMpIG9yIGRpZSAiQ29weSBmYWlsZWQ6ICQhIjsKK30gZWxzZSB7CisJcmVhZF91c2VycygkZGVmYXVsdF9hdXRob3JzKSBpZiAtZiAkZGVmYXVsdF9hdXRob3JzOworfQorCitvcGVuIEJSQU5DSEVTLCI+PiIsICIkZ2l0X2Rpci9zdm4yZ2l0IjsKKworc3ViIG5vZGVfa2luZCgkJCkgeworCW15ICgkc3ZucGF0aCwgJHJldmlzaW9uKSA9IEBfOworCSRzdm5wYXRoID1+IHMjXi8qIyM7CisJbXkgJHN1YnBvb2wgPSBTVk46OlBvb2w6Om5ld19kZWZhdWx0X3N1YjsKKwlteSAka2luZCA9ICRzdm4tPnsnc3ZuJ30tPmNoZWNrX3BhdGgoJHN2bnBhdGgsJHJldmlzaW9uKTsKKwlyZXR1cm4gJGtpbmQ7Cit9CisKK3N1YiBnZXRfZmlsZSgkJCQpIHsKKwlteSgkc3ZucGF0aCwkcmV2LCRwYXRoKSA9IEBfOworCisJIyBub3cgZ2V0IGl0CisJbXkgKCRuYW1lLCRtb2RlKTsKKwlpZigkb3B0X2QpIHsKKwkJbXkoJHJlcSwkcmVzKTsKKworCQkjIC9zdm4vIXN2bi9iYy8yL2RqYW5nby90cnVuay9kamFuZ28tZG9jcy9idWlsZC5weQorCQlteSAkdXJsPSRzdm5fdXJsLT5jbG9uZSgpOworCQkkdXJsLT5wYXRoKCR1cmwtPnBhdGguIi8hc3ZuL2JjLyRyZXYvJHN2bl9kaXIkc3ZucGF0aCIpOworCQlwcmludCAiLi4uICRwYXRoLi4uXG4iIGlmICRvcHRfdjsKKwkJJHJlcSA9IEhUVFA6OlJlcXVlc3QtPm5ldyhHRVQgPT4gJHVybCk7CisJCSRyZXMgPSAkbHdwX3VhLT5yZXF1ZXN0KCRyZXEpOworCQlpZiAoJHJlcy0+aXNfc3VjY2VzcykgeworCQkJbXkgJGZoOworCQkJKCRmaCwgJG5hbWUpID0gdGVtcGZpbGUoJ2dpdHN2bi5YWFhYWFgnLAorCQkJRElSID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpLCBVTkxJTksgPT4gMSk7CisJCQlwcmludCAkZmggJHJlcy0+Y29udGVudDsKKwkJCWNsb3NlKCRmaCkgb3IgZGllICJDb3VsZCBub3Qgd3JpdGUgJG5hbWU6ICQhXG4iOworCQl9IGVsc2UgeworCQkJcmV0dXJuIHVuZGVmIGlmICRyZXMtPmNvZGUgPT0gMzAxOyAjIGRpcmVjdG9yeT8KKwkJCWRpZSAkcmVzLT5zdGF0dXNfbGluZS4iIGF0ICR1cmxcbiI7CisJCX0KKwkJJG1vZGUgPSAnMDY0NCc7ICMgY2FuJ3Qgb2J0YWluIG1vZGUgdmlhIGRpcmVjdCBodHRwIHJlcXVlc3Q/CisJfSBlbHNlIHsKKwkJKCRuYW1lLCRtb2RlKSA9ICRzdm4tPmZpbGUoIiRzdm5wYXRoIiwkcmV2KTsKKwkJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRuYW1lOworCX0KKworCW15ICRwaWQgPSBvcGVuKG15ICRGLCAnLXwnKTsKKwlkaWUgJCEgdW5sZXNzIGRlZmluZWQgJHBpZDsKKwlpZiAoISRwaWQpIHsKKwkgICAgZXhlYygiZ2l0IiwgImhhc2gtb2JqZWN0IiwgIi13IiwgJG5hbWUpCisJCW9yIGRpZSAiQ2Fubm90IGNyZWF0ZSBvYmplY3Q6ICQhXG4iOworCX0KKwlteSAkc2hhID0gPCRGPjsKKwljaG9tcCAkc2hhOworCWNsb3NlICRGOworCXVubGluayAkbmFtZTsKKwlyZXR1cm4gWyRtb2RlLCAkc2hhLCAkcGF0aF07Cit9CisKK3N1YiBnZXRfaWdub3JlKCQkJCQkKSB7CisJbXkoJG5ldywkb2xkLCRyZXYsJHBhdGgsJHN2bnBhdGgpID0gQF87CisKKwlyZXR1cm4gdW5sZXNzICRvcHRfSTsKKwlteSAkbmFtZSA9ICRzdm4tPmlnbm9yZSgiJHN2bnBhdGgiLCRyZXYpOworCWlmICgkcGF0aCBlcSAnLycpIHsKKwkJJHBhdGggPSAkb3B0X0k7CisJfSBlbHNlIHsKKwkJJHBhdGggPSBGaWxlOjpTcGVjLT5jYXRmaWxlKCRwYXRoLCRvcHRfSSk7CisJfQorCWlmIChkZWZpbmVkICRuYW1lKSB7CisJCW15ICRwaWQgPSBvcGVuKG15ICRGLCAnLXwnKTsKKwkJZGllICQhIHVubGVzcyBkZWZpbmVkICRwaWQ7CisJCWlmICghJHBpZCkgeworCQkJZXhlYygiZ2l0IiwgImhhc2gtb2JqZWN0IiwgIi13IiwgJG5hbWUpCisJCQkgICAgb3IgZGllICJDYW5ub3QgY3JlYXRlIG9iamVjdDogJCFcbiI7CisJCX0KKwkJbXkgJHNoYSA9IDwkRj47CisJCWNob21wICRzaGE7CisJCWNsb3NlICRGOworCQl1bmxpbmsgJG5hbWU7CisJCXB1c2goQCRuZXcsWycwNjQ0Jywkc2hhLCRwYXRoXSk7CisJfSBlbHNpZiAoZGVmaW5lZCAkb2xkKSB7CisJCXB1c2goQCRvbGQsJHBhdGgpOworCX0KK30KKworc3ViIHByb2plY3RfcGF0aCgkJCkKK3sKKwlteSAoJHBhdGgsICRwcm9qZWN0KSA9IEBfOworCisJJHBhdGggPSAiLyIuJHBhdGggdW5sZXNzICgkcGF0aCA9fiBtI15cLyMpIDsKKwlyZXR1cm4gJDEgaWYgKCRwYXRoID1+IG0jXiRwcm9qZWN0XC8oLiopJCMpOworCisJJHBhdGggPX4gcyNcLiNcXFwuI2c7CisJJHBhdGggPX4gcyNcKyNcXFwrI2c7CisJcmV0dXJuICIvIiBpZiAoJHByb2plY3QgPX4gbSNeJHBhdGguKiQjKTsKKworCXJldHVybiB1bmRlZjsKK30KKworc3ViIHNwbGl0X3BhdGgoJCQpIHsKKwlteSgkcmV2LCRwYXRoKSA9IEBfOworCW15ICRicmFuY2g7CisKKwlpZigkcGF0aCA9fiBzI14vXFEkdGFnX25hbWVcRS8oW14vXSspLz8jIykgeworCQkkYnJhbmNoID0gIi8kMSI7CisJfSBlbHNpZigkcGF0aCA9fiBzI14vXFEkdHJ1bmtfbmFtZVxFLz8jIykgeworCQkkYnJhbmNoID0gIi8iOworCX0gZWxzaWYoJHBhdGggPX4gcyNeL1xRJGJyYW5jaF9uYW1lXEUvKFteL10rKS8/IyMpIHsKKwkJJGJyYW5jaCA9ICQxOworCX0gZWxzZSB7CisJCW15ICVub19lcnJvciA9ICgKKwkJCSIvIiA9PiAxLAorCQkJIi8kdGFnX25hbWUiID0+IDEsCisJCQkiLyRicmFuY2hfbmFtZSIgPT4gMQorCQkpOworCQlwcmludCBTVERFUlIgIiRyZXY6IFVucmVjb2duaXplZCBwYXRoOiAkcGF0aFxuIiB1bmxlc3MgKGRlZmluZWQgJG5vX2Vycm9yeyRwYXRofSk7CisJCXJldHVybiAoKQorCX0KKwlpZiAoJHBhdGggZXEgIiIpIHsKKwkJJHBhdGggPSAiLyI7CisJfSBlbHNpZiAoJHByb2plY3RfbmFtZSkgeworCQkkcGF0aCA9IHByb2plY3RfcGF0aCgkcGF0aCwgJHByb2plY3RfbmFtZSk7CisJfQorCXJldHVybiAoJGJyYW5jaCwkcGF0aCk7Cit9CisKK3N1YiBicmFuY2hfcmV2KCQkKSB7CisKKwlteSAoJHNyY2JyYW5jaCwkdXB0b3JldikgPSBAXzsKKworCW15ICRiYnJhbmNoZXMgPSAkYnJhbmNoZXN7JHNyY2JyYW5jaH07CisJbXkgQHJldnMgPSByZXZlcnNlIHNvcnQgeyAoJGEgZXEgJ0xBU1QnID8gMCA6ICRhKSA8PT4gKCRiIGVxICdMQVNUJyA/IDAgOiAkYikgfSBrZXlzICUkYmJyYW5jaGVzOworCW15ICR0aGVyZXY7CisJZm9yZWFjaCBteSAkYXJldihAcmV2cykgeworCQluZXh0IGlmICAoJGFyZXYgZXEgJ0xBU1QnKTsKKwkJaWYgKCRhcmV2IDw9ICR1cHRvcmV2KSB7CisJCQkkdGhlcmV2ID0gJGFyZXY7CisJCQlsYXN0OworCQl9CisJfQorCXJldHVybiAkdGhlcmV2OworfQorCitzdWIgZXhwYW5kX3N2bmRpcigkJCQpOworCitzdWIgZXhwYW5kX3N2bmRpcigkJCQpCit7CisJbXkgKCRzdm5wYXRoLCAkcmV2LCAkcGF0aCkgPSBAXzsKKwlteSBAbGlzdDsKKwlnZXRfaWdub3JlKFxAbGlzdCwgdW5kZWYsICRyZXYsICRwYXRoLCAkc3ZucGF0aCk7CisJbXkgJGRpcmVudHMgPSAkc3ZuLT5kaXJfbGlzdCgkc3ZucGF0aCwgJHJldik7CisJZm9yZWFjaCBteSAkcChrZXlzICUkZGlyZW50cykgeworCQlteSAka2luZCA9IG5vZGVfa2luZCgkc3ZucGF0aC4nLycuJHAsICRyZXYpOworCQlpZiAoJGtpbmQgZXEgJFNWTjo6Tm9kZTo6ZmlsZSkgeworCQkJbXkgJGYgPSBnZXRfZmlsZSgkc3ZucGF0aC4nLycuJHAsICRyZXYsICRwYXRoLicvJy4kcCk7CisJCQlwdXNoKEBsaXN0LCAkZikgaWYgJGY7CisJCX0gZWxzaWYgKCRraW5kIGVxICRTVk46Ok5vZGU6OmRpcikgeworCQkJcHVzaChAbGlzdCwKKwkJCSAgICAgZXhwYW5kX3N2bmRpcigkc3ZucGF0aC4nLycuJHAsICRyZXYsICRwYXRoLicvJy4kcCkpOworCQl9CisJfQorCXJldHVybiBAbGlzdDsKK30KKworc3ViIGNvcHlfcGF0aCgkJCQkJCQkJCkgeworCSMgU29tZWJvZHkgY29waWVkIGEgd2hvbGUgc3ViZGlyZWN0b3J5LgorCSMgV2UgbmVlZCB0byBmaW5kIHRoZSBpbmRleCBlbnRyaWVzIGZyb20gdGhlIG9sZCB2ZXJzaW9uIHdoaWNoIHRoZQorCSMgU1ZOIGxvZyBlbnRyeSBwb2ludHMgdG8sIGFuZCBhZGQgdGhlbSB0byB0aGUgbmV3IHBsYWNlLgorCisJbXkoJG5ld3JldiwkbmV3YnJhbmNoLCRwYXRoLCRvbGRwYXRoLCRyZXYsJG5vZGVfa2luZCwkbmV3LCRwYXJlbnRzKSA9IEBfOworCisJbXkoJHNyY2JyYW5jaCwkc3JjcGF0aCkgPSBzcGxpdF9wYXRoKCRyZXYsJG9sZHBhdGgpOworCXVubGVzcyhkZWZpbmVkICRzcmNicmFuY2ggJiYgZGVmaW5lZCAkc3JjcGF0aCkgeworCQlwcmludCAiUGF0aCBub3QgZm91bmQgd2hlbiBjb3B5aW5nIGZyb20gJG9sZHBhdGggQCAkcmV2LlxuIi4KKwkJCSJXaWxsIHRyeSB0byBjb3B5IGZyb20gb3JpZ2luYWwgU1ZOIGxvY2F0aW9uLi4uXG4iCisJCQlpZiAkb3B0X3Y7CisJCXB1c2ggKEAkbmV3LCBleHBhbmRfc3ZuZGlyKCRvbGRwYXRoLCAkcmV2LCAkcGF0aCkpOworCQlyZXR1cm47CisJfQorCW15ICR0aGVyZXYgPSBicmFuY2hfcmV2KCRzcmNicmFuY2gsICRyZXYpOworCW15ICRnaXRyZXYgPSAkYnJhbmNoZXN7JHNyY2JyYW5jaH17JHRoZXJldn07CisJdW5sZXNzKCRnaXRyZXYpIHsKKwkJcHJpbnQgU1RERVJSICIkbmV3cmV2OiRuZXdicmFuY2g6IGNvdWxkIG5vdCBmaW5kICRvbGRwYXRoIFxAICRyZXZcbiI7CisJCXJldHVybjsKKwl9CisJaWYgKCRzcmNicmFuY2ggbmUgJG5ld2JyYW5jaCkgeworCQlwdXNoKEAkcGFyZW50cywgJGJyYW5jaGVzeyRzcmNicmFuY2h9eydMQVNUJ30pOworCX0KKwlwcmludCAiJG5ld3JldjokbmV3YnJhbmNoOiRwYXRoOiBjb3B5aW5nIGZyb20gJHNyY2JyYW5jaDokc3JjcGF0aCBAICRyZXZcbiIgaWYgJG9wdF92OworCWlmICgkbm9kZV9raW5kIGVxICRTVk46Ok5vZGU6OmRpcikgeworCQkkc3JjcGF0aCA9fiBzIy8qJCMvIzsKKwl9CisKKwlteSAkcGlkID0gb3BlbiBteSAkZiwnLXwnOworCWRpZSAkISB1bmxlc3MgZGVmaW5lZCAkcGlkOworCWlmICghJHBpZCkgeworCQlleGVjKCJnaXQiLCJscy10cmVlIiwiLXIiLCIteiIsJGdpdHJldiwkc3JjcGF0aCkKKwkJCW9yIGRpZSAkITsKKwl9CisJbG9jYWwgJC8gPSAiXDAiOworCXdoaWxlKDwkZj4pIHsKKwkJY2hvbXA7CisJCW15KCRtLCRwKSA9IHNwbGl0KC9cdC8sJF8sMik7CisJCW15KCRtb2RlLCR0eXBlLCRzaGExKSA9IHNwbGl0KC8gLywkbSk7CisJCW5leHQgaWYgJHR5cGUgbmUgImJsb2IiOworCQlpZiAoJG5vZGVfa2luZCBlcSAkU1ZOOjpOb2RlOjpkaXIpIHsKKwkJCSRwID0gJHBhdGggLiBzdWJzdHIoJHAsbGVuZ3RoKCRzcmNwYXRoKS0xKTsKKwkJfSBlbHNlIHsKKwkJCSRwID0gJHBhdGg7CisJCX0KKwkJcHVzaChAJG5ldyxbJG1vZGUsJHNoYTEsJHBdKTsKKwl9CisJY2xvc2UoJGYpIG9yCisJCXByaW50IFNUREVSUiAiJG5ld3JldjokbmV3YnJhbmNoOiBjb3VsZCBub3QgbGlzdCBmaWxlcyBpbiAkb2xkcGF0aCBcQCAkcmV2XG4iOworfQorCitzdWIgY29tbWl0IHsKKwlteSgkYnJhbmNoLCAkY2hhbmdlZF9wYXRocywgJHJldmlzaW9uLCAkYXV0aG9yLCAkZGF0ZSwgJG1lc3NhZ2UpID0gQF87CisJbXkoJGNvbW1pdHRlcl9uYW1lLCRjb21taXR0ZXJfZW1haWwsJGRlc3QpOworCW15KCRhdXRob3JfbmFtZSwkYXV0aG9yX2VtYWlsKTsKKwlteShAb2xkLEBuZXcsQHBhcmVudHMpOworCisJaWYgKG5vdCBkZWZpbmVkICRhdXRob3Igb3IgJGF1dGhvciBlcSAiIikgeworCQkkY29tbWl0dGVyX25hbWUgPSAkY29tbWl0dGVyX2VtYWlsID0gInVua25vd24iOworCX0gZWxzaWYgKGRlZmluZWQgJHVzZXJzX2ZpbGUpIHsKKwkJZGllICJVc2VyICRhdXRob3IgaXMgbm90IGxpc3RlZCBpbiAkdXNlcnNfZmlsZVxuIgorCQkgICAgdW5sZXNzIGV4aXN0cyAkdXNlcnN7JGF1dGhvcn07CisJCSgkY29tbWl0dGVyX25hbWUsJGNvbW1pdHRlcl9lbWFpbCkgPSBAeyR1c2Vyc3skYXV0aG9yfX07CisJfSBlbHNpZiAoJGF1dGhvciA9fiAvXiguKj8pXHMrPCguKik+JC8pIHsKKwkJKCRjb21taXR0ZXJfbmFtZSwgJGNvbW1pdHRlcl9lbWFpbCkgPSAoJDEsICQyKTsKKwl9IGVsc2UgeworCQkkYXV0aG9yID1+IHMvXjwoLiopPiQvJDEvOworCQkkY29tbWl0dGVyX25hbWUgPSAkY29tbWl0dGVyX2VtYWlsID0gJGF1dGhvcjsKKwl9CisKKwlpZiAoJG9wdF9GICYmICRtZXNzYWdlID1+IC9Gcm9tOlxzKyguKj8pXHMrPCguKik+XHMqXG4vKSB7CisJCSgkYXV0aG9yX25hbWUsICRhdXRob3JfZW1haWwpID0gKCQxLCAkMik7CisJCXByaW50ICJBdXRob3IgZnJvbSBGcm9tOiAkMSA8JDI+XG4iIGlmICgkb3B0X3YpOzsKKwl9IGVsc2lmICgkb3B0X1MgJiYgJG1lc3NhZ2UgPX4gL1NpZ25lZC1vZmYtYnk6XHMrKC4qPylccys8KC4qKT5ccypcbi8pIHsKKwkJKCRhdXRob3JfbmFtZSwgJGF1dGhvcl9lbWFpbCkgPSAoJDEsICQyKTsKKwkJcHJpbnQgIkF1dGhvciBmcm9tIFNpZ25lZC1vZmYtYnk6ICQxIDwkMj5cbiIgaWYgKCRvcHRfdik7OworCX0gZWxzZSB7CisJCSRhdXRob3JfbmFtZSA9ICRjb21taXR0ZXJfbmFtZTsKKwkJJGF1dGhvcl9lbWFpbCA9ICRjb21taXR0ZXJfZW1haWw7CisJfQorCisJJGRhdGUgPSBwZGF0ZSgkZGF0ZSk7CisKKwlteSAkdGFnOworCW15ICRwYXJlbnQ7CisJaWYoJGJyYW5jaCBlcSAiLyIpIHsgIyB0cnVuaworCQkkcGFyZW50ID0gJG9wdF9vOworCX0gZWxzaWYoJGJyYW5jaCA9fiBtI14vKC4rKSMpIHsgIyB0YWcKKwkJJHRhZyA9IDE7CisJCSRwYXJlbnQgPSAkMTsKKwl9IGVsc2UgeyAjICJub3JtYWwiIGJyYW5jaAorCQkjIG5vdGhpbmcgdG8gZG8KKwkJJHBhcmVudCA9ICRicmFuY2g7CisJfQorCSRkZXN0ID0gJHBhcmVudDsKKworCW15ICRwcmV2ID0gJGNoYW5nZWRfcGF0aHMtPnsiLyJ9OworCWlmKCRwcmV2IGFuZCAkcHJldi0+WzBdIGVxICJBIikgeworCQlkZWxldGUgJGNoYW5nZWRfcGF0aHMtPnsiLyJ9OworCQlteSAkb2xkcGF0aCA9ICRwcmV2LT5bMV07CisJCW15ICRyZXY7CisJCWlmKGRlZmluZWQgJG9sZHBhdGgpIHsKKwkJCW15ICRwOworCQkJKCRwYXJlbnQsJHApID0gc3BsaXRfcGF0aCgkcmV2aXNpb24sJG9sZHBhdGgpOworCQkJaWYoZGVmaW5lZCAkcGFyZW50KSB7CisJCQkJaWYoJHBhcmVudCBlcSAiLyIpIHsKKwkJCQkJJHBhcmVudCA9ICRvcHRfbzsKKwkJCQl9IGVsc2UgeworCQkJCQkkcGFyZW50ID1+IHMjXi8jIzsgIyBpZiBpdCdzIGEgdGFnCisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJJHBhcmVudCA9IHVuZGVmOworCQl9CisJfQorCisJbXkgJHJldjsKKwlpZigkcmV2aXNpb24gPiAkb3B0X3MgYW5kIGRlZmluZWQgJHBhcmVudCkgeworCQlvcGVuKEgsJy18JywiZ2l0IiwicmV2LXBhcnNlIiwiLS12ZXJpZnkiLCRwYXJlbnQpOworCQkkcmV2ID0gPEg+OworCQljbG9zZShIKSBvciBkbyB7CisJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogY2Fubm90IGZpbmQgY29tbWl0ICckcGFyZW50JyFcbiI7CisJCQlyZXR1cm47CisJCX07CisJCWNob3AgJHJldjsKKwkJaWYobGVuZ3RoKCRyZXYpICE9IDQwKSB7CisJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogY2Fubm90IGZpbmQgY29tbWl0ICckcGFyZW50JyFcbiI7CisJCQlyZXR1cm47CisJCX0KKwkJJHJldiA9ICRicmFuY2hlc3soJHBhcmVudCBlcSAkb3B0X28pID8gIi8iIDogJHBhcmVudH17IkxBU1QifTsKKwkJaWYoJHJldmlzaW9uICE9ICRvcHRfcyBhbmQgbm90ICRyZXYpIHsKKwkJCXByaW50IFNUREVSUiAiJHJldmlzaW9uOiBkbyBub3Qga25vdyBhbmNlc3RvciBmb3IgJyRwYXJlbnQnIVxuIjsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCSRyZXYgPSB1bmRlZjsKKwl9CisKKyMJaWYoJHByZXYgYW5kICRwcmV2LT5bMF0gZXEgIkEiKSB7CisjCQlpZihub3QgJHRhZykgeworIwkJCXVubGVzcyhvcGVuKEgsIj4gJGdpdF9kaXIvcmVmcy9oZWFkcy8kYnJhbmNoIikpIHsKKyMJCQkJcHJpbnQgU1RERVJSICIkcmV2aXNpb246IENvdWxkIG5vdCBjcmVhdGUgYnJhbmNoICRicmFuY2g6ICQhXG4iOworIwkJCQkkc3RhdGU9MTE7CisjCQkJCW5leHQ7CisjCQkJfQorIwkJCXByaW50IEggIiRyZXZcbiIKKyMJCQkJb3IgZGllICJDb3VsZCBub3Qgd3JpdGUgYnJhbmNoICRicmFuY2g6ICQhIjsKKyMJCQljbG9zZShIKQorIwkJCQlvciBkaWUgIkNvdWxkIG5vdCB3cml0ZSBicmFuY2ggJGJyYW5jaDogJCEiOworIwkJfQorIwl9CisJaWYobm90IGRlZmluZWQgJHJldikgeworCQl1bmxpbmsoJGdpdF9pbmRleCk7CisJfSBlbHNpZiAoJHJldiBuZSAkbGFzdF9yZXYpIHsKKwkJcHJpbnQgIlN3aXRjaGluZyBmcm9tICRsYXN0X3JldiB0byAkcmV2ICgkYnJhbmNoKVxuIiBpZiAkb3B0X3Y7CisJCXN5c3RlbSgiZ2l0IiwgInJlYWQtdHJlZSIsICRyZXYpOworCQlkaWUgInJlYWQtdHJlZSBmYWlsZWQgZm9yICRyZXY6ICQ/XG4iIGlmICQ/OworCQkkbGFzdF9yZXYgPSAkcmV2OworCX0KKworCXB1c2ggKEBwYXJlbnRzLCAkcmV2KSBpZiBkZWZpbmVkICRyZXY7CisKKwlteSAkY2lkOworCWlmKCR0YWcgYW5kIG5vdCAlJGNoYW5nZWRfcGF0aHMpIHsKKwkJJGNpZCA9ICRyZXY7CisJfSBlbHNlIHsKKwkJbXkgQHBhdGhzID0gc29ydCBrZXlzICUkY2hhbmdlZF9wYXRoczsKKwkJZm9yZWFjaCBteSAkcGF0aChAcGF0aHMpIHsKKwkJCW15ICRhY3Rpb24gPSAkY2hhbmdlZF9wYXRocy0+eyRwYXRofTsKKworCQkJaWYgKCRhY3Rpb24tPlswXSBlcSAiUiIpIHsKKwkJCQkjIHJlZmVyIHRvIGEgZmlsZS90cmVlIGluIGFuIGVhcmxpZXIgY29tbWl0CisJCQkJcHVzaChAb2xkLCRwYXRoKTsgIyByZW1vdmUgYW55IG9sZCBzdHVmZgorCQkJfQorCQkJaWYoKCRhY3Rpb24tPlswXSBlcSAiQSIpIHx8ICgkYWN0aW9uLT5bMF0gZXEgIlIiKSkgeworCQkJCW15ICRub2RlX2tpbmQgPSBub2RlX2tpbmQoJGFjdGlvbi0+WzNdLCAkcmV2aXNpb24pOworCQkJCWlmICgkbm9kZV9raW5kIGVxICRTVk46Ok5vZGU6OmZpbGUpIHsKKwkJCQkJbXkgJGYgPSBnZXRfZmlsZSgkYWN0aW9uLT5bM10sCisJCQkJCQkJICRyZXZpc2lvbiwgJHBhdGgpOworCQkJCQlpZiAoJGYpIHsKKwkJCQkJCXB1c2goQG5ldywkZikgaWYgJGY7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlteSAkb3BhdGggPSAkYWN0aW9uLT5bM107CisJCQkJCQlwcmludCBTVERFUlIgIiRyZXZpc2lvbjogJGJyYW5jaDogY291bGQgbm90IGZldGNoICckb3BhdGgnXG4iOworCQkJCQl9CisJCQkJfSBlbHNpZiAoJG5vZGVfa2luZCBlcSAkU1ZOOjpOb2RlOjpkaXIpIHsKKwkJCQkJaWYoJGFjdGlvbi0+WzFdKSB7CisJCQkJCQljb3B5X3BhdGgoJHJldmlzaW9uLCAkYnJhbmNoLAorCQkJCQkJCSAgJHBhdGgsICRhY3Rpb24tPlsxXSwKKwkJCQkJCQkgICRhY3Rpb24tPlsyXSwgJG5vZGVfa2luZCwKKwkJCQkJCQkgIFxAbmV3LCBcQHBhcmVudHMpOworCQkJCQl9IGVsc2UgeworCQkJCQkJZ2V0X2lnbm9yZShcQG5ldywgXEBvbGQsICRyZXZpc2lvbiwKKwkJCQkJCQkgICAkcGF0aCwgJGFjdGlvbi0+WzNdKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzaWYgKCRhY3Rpb24tPlswXSBlcSAiRCIpIHsKKwkJCQlwdXNoKEBvbGQsJHBhdGgpOworCQkJfSBlbHNpZiAoJGFjdGlvbi0+WzBdIGVxICJNIikgeworCQkJCW15ICRub2RlX2tpbmQgPSBub2RlX2tpbmQoJGFjdGlvbi0+WzNdLCAkcmV2aXNpb24pOworCQkJCWlmICgkbm9kZV9raW5kIGVxICRTVk46Ok5vZGU6OmZpbGUpIHsKKwkJCQkJbXkgJGYgPSBnZXRfZmlsZSgkYWN0aW9uLT5bM10sCisJCQkJCQkJICRyZXZpc2lvbiwgJHBhdGgpOworCQkJCQlwdXNoKEBuZXcsJGYpIGlmICRmOworCQkJCX0gZWxzaWYgKCRub2RlX2tpbmQgZXEgJFNWTjo6Tm9kZTo6ZGlyKSB7CisJCQkJCWdldF9pZ25vcmUoXEBuZXcsIFxAb2xkLCAkcmV2aXNpb24sCisJCQkJCQkgICAkcGF0aCwgJGFjdGlvbi0+WzNdKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWRpZSAiJHJldmlzaW9uOiB1bmtub3duIGFjdGlvbiAnIi4kYWN0aW9uLT5bMF0uIicgZm9yICRwYXRoXG4iOworCQkJfQorCQl9CisKKwkJd2hpbGUoQG9sZCkgeworCQkJbXkgQG8xOworCQkJaWYoQG9sZCA+IDU1KSB7CisJCQkJQG8xID0gc3BsaWNlKEBvbGQsMCw1MCk7CisJCQl9IGVsc2UgeworCQkJCUBvMSA9IEBvbGQ7CisJCQkJQG9sZCA9ICgpOworCQkJfQorCQkJbXkgJHBpZCA9IG9wZW4gbXkgJEYsICItfCI7CisJCQlkaWUgIiQhIiB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQkJaWYgKCEkcGlkKSB7CisJCQkJZXhlYygiZ2l0IiwgImxzLWZpbGVzIiwgIi16IiwgQG8xKSBvciBkaWUgJCE7CisJCQl9CisJCQlAbzEgPSAoKTsKKwkJCWxvY2FsICQvID0gIlwwIjsKKwkJCXdoaWxlKDwkRj4pIHsKKwkJCQljaG9tcDsKKwkJCQlwdXNoKEBvMSwkXyk7CisJCQl9CisJCQljbG9zZSgkRik7CisKKwkJCXdoaWxlKEBvMSkgeworCQkJCW15IEBvMjsKKwkJCQlpZihAbzEgPiA1NSkgeworCQkJCQlAbzIgPSBzcGxpY2UoQG8xLDAsNTApOworCQkJCX0gZWxzZSB7CisJCQkJCUBvMiA9IEBvMTsKKwkJCQkJQG8xID0gKCk7CisJCQkJfQorCQkJCXN5c3RlbSgiZ2l0IiwidXBkYXRlLWluZGV4IiwiLS1mb3JjZS1yZW1vdmUiLCItLSIsQG8yKTsKKwkJCQlkaWUgIkNhbm5vdCByZW1vdmUgZmlsZXM6ICQ/XG4iIGlmICQ/OworCQkJfQorCQl9CisJCXdoaWxlKEBuZXcpIHsKKwkJCW15IEBuMjsKKwkJCWlmKEBuZXcgPiAxMikgeworCQkJCUBuMiA9IHNwbGljZShAbmV3LDAsMTApOworCQkJfSBlbHNlIHsKKwkJCQlAbjIgPSBAbmV3OworCQkJCUBuZXcgPSAoKTsKKwkJCX0KKwkJCXN5c3RlbSgiZ2l0IiwidXBkYXRlLWluZGV4IiwiLS1hZGQiLAorCQkJCShtYXAgeyAoJy0tY2FjaGVpbmZvJywgQCRfKSB9IEBuMikpOworCQkJZGllICJDYW5ub3QgYWRkIGZpbGVzOiAkP1xuIiBpZiAkPzsKKwkJfQorCisJCW15ICRwaWQgPSBvcGVuKEMsIi18Iik7CisJCWRpZSAiQ2Fubm90IGZvcms6ICQhIiB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQl1bmxlc3MoJHBpZCkgeworCQkJZXhlYygiZ2l0Iiwid3JpdGUtdHJlZSIpOworCQkJZGllICJDYW5ub3QgZXhlYyBnaXQtd3JpdGUtdHJlZTogJCFcbiI7CisJCX0KKwkJY2hvbXAobXkgJHRyZWUgPSA8Qz4pOworCQlsZW5ndGgoJHRyZWUpID09IDQwCisJCQlvciBkaWUgIkNhbm5vdCBnZXQgdHJlZSBpZCAoJHRyZWUpOiAkIVxuIjsKKwkJY2xvc2UoQykKKwkJCW9yIGRpZSAiRXJyb3IgcnVubmluZyBnaXQtd3JpdGUtdHJlZTogJD9cbiI7CisJCXByaW50ICJUcmVlIElEICR0cmVlXG4iIGlmICRvcHRfdjsKKworCQlteSAkcHIgPSBJTzo6UGlwZS0+bmV3KCkgb3IgZGllICJDYW5ub3Qgb3BlbiBwaXBlOiAkIVxuIjsKKwkJbXkgJHB3ID0gSU86OlBpcGUtPm5ldygpIG9yIGRpZSAiQ2Fubm90IG9wZW4gcGlwZTogJCFcbiI7CisJCSRwaWQgPSBmb3JrKCk7CisJCWRpZSAiRm9yazogJCFcbiIgdW5sZXNzIGRlZmluZWQgJHBpZDsKKwkJdW5sZXNzKCRwaWQpIHsKKwkJCSRwci0+d3JpdGVyKCk7CisJCQkkcHctPnJlYWRlcigpOworCQkJb3BlbihPVVQsIj4mU1RET1VUIik7CisJCQlkdXAyKCRwdy0+ZmlsZW5vKCksMCk7CisJCQlkdXAyKCRwci0+ZmlsZW5vKCksMSk7CisJCQkkcHItPmNsb3NlKCk7CisJCQkkcHctPmNsb3NlKCk7CisKKwkJCW15IEBwYXIgPSAoKTsKKworCQkJIyBsb29zZSBkZXRlY3Rpb24gb2YgbWVyZ2VzCisJCQkjIGJhc2VkIG9uIHRoZSBjb21taXQgbXNnCisJCQlmb3JlYWNoIG15ICRyeCAoQG1lcmdlcngpIHsKKwkJCQlpZiAoJG1lc3NhZ2UgPX4gJHJ4KSB7CisJCQkJCW15ICRtcGFyZW50ID0gJDE7CisJCQkJCWlmICgkbXBhcmVudCBlcSAnSEVBRCcpIHsgJG1wYXJlbnQgPSAkb3B0X28gfTsKKwkJCQkJaWYgKCAtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kbXBhcmVudCIpIHsKKwkJCQkJCSRtcGFyZW50ID0gZ2V0X2hlYWRyZWYoJG1wYXJlbnQsICRnaXRfZGlyKTsKKwkJCQkJCXB1c2ggKEBwYXJlbnRzLCAkbXBhcmVudCk7CisJCQkJCQlwcmludCBPVVQgIk1lcmdlIHBhcmVudCBicmFuY2g6ICRtcGFyZW50XG4iIGlmICRvcHRfdjsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCW15ICVzZWVuX3BhcmVudHMgPSAoKTsKKwkJCW15IEB1bmlxdWVfcGFyZW50cyA9IGdyZXAgeyAhICRzZWVuX3BhcmVudHN7JF99ICsrIH0gQHBhcmVudHM7CisJCQlmb3JlYWNoIG15ICRicGFyZW50IChAdW5pcXVlX3BhcmVudHMpIHsKKwkJCQlwdXNoIEBwYXIsICctcCcsICRicGFyZW50OworCQkJCXByaW50IE9VVCAiTWVyZ2UgcGFyZW50IGJyYW5jaDogJGJwYXJlbnRcbiIgaWYgJG9wdF92OworCQkJfQorCisJCQlleGVjKCJlbnYiLAorCQkJCSJHSVRfQVVUSE9SX05BTUU9JGF1dGhvcl9uYW1lIiwKKwkJCQkiR0lUX0FVVEhPUl9FTUFJTD0kYXV0aG9yX2VtYWlsIiwKKwkJCQkiR0lUX0FVVEhPUl9EQVRFPSIuc3RyZnRpbWUoIiswMDAwICVZLSVtLSVkICVIOiVNOiVTIixnbXRpbWUoJGRhdGUpKSwKKwkJCQkiR0lUX0NPTU1JVFRFUl9OQU1FPSRjb21taXR0ZXJfbmFtZSIsCisJCQkJIkdJVF9DT01NSVRURVJfRU1BSUw9JGNvbW1pdHRlcl9lbWFpbCIsCisJCQkJIkdJVF9DT01NSVRURVJfREFURT0iLnN0cmZ0aW1lKCIrMDAwMCAlWS0lbS0lZCAlSDolTTolUyIsZ210aW1lKCRkYXRlKSksCisJCQkJImdpdCIsICJjb21taXQtdHJlZSIsICR0cmVlLEBwYXIpOworCQkJZGllICJDYW5ub3QgZXhlYyBnaXQtY29tbWl0LXRyZWU6ICQhXG4iOworCQl9CisJCSRwdy0+d3JpdGVyKCk7CisJCSRwci0+cmVhZGVyKCk7CisKKwkJJG1lc3NhZ2UgPX4gcy9bXHNcbl0rXHovLzsKKwkJJG1lc3NhZ2UgPSAiciRyZXZpc2lvbjogJG1lc3NhZ2UiIGlmICRvcHRfcjsKKworCQlwcmludCAkcHcgIiRtZXNzYWdlXG4iCisJCQlvciBkaWUgIkVycm9yIHdyaXRpbmcgdG8gZ2l0LWNvbW1pdC10cmVlOiAkIVxuIjsKKwkJJHB3LT5jbG9zZSgpOworCisJCXByaW50ICJDb21taXR0ZWQgY2hhbmdlICRyZXZpc2lvbjokYnJhbmNoICIuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIixnbXRpbWUoJGRhdGUpKS4iKVxuIiBpZiAkb3B0X3Y7CisJCWNob21wKCRjaWQgPSA8JHByPik7CisJCWxlbmd0aCgkY2lkKSA9PSA0MAorCQkJb3IgZGllICJDYW5ub3QgZ2V0IGNvbW1pdCBpZCAoJGNpZCk6ICQhXG4iOworCQlwcmludCAiQ29tbWl0IElEICRjaWRcbiIgaWYgJG9wdF92OworCQkkcHItPmNsb3NlKCk7CisKKwkJd2FpdHBpZCgkcGlkLDApOworCQlkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0LWNvbW1pdC10cmVlOiAkP1xuIiBpZiAkPzsKKwl9CisKKwlpZiAobm90IGRlZmluZWQgJGNpZCkgeworCQkkY2lkID0gJGJyYW5jaGVzeyIvIn17IkxBU1QifTsKKwl9CisKKwlpZihub3QgZGVmaW5lZCAkZGVzdCkgeworCQlwcmludCAiLi4uIG5vIGtub3duIHBhcmVudFxuIiBpZiAkb3B0X3Y7CisJfSBlbHNpZihub3QgJHRhZykgeworCQlwcmludCAiV3JpdGluZyB0byByZWZzL2hlYWRzLyRkZXN0XG4iIGlmICRvcHRfdjsKKwkJb3BlbihDLCI+JGdpdF9kaXIvcmVmcy9oZWFkcy8kZGVzdCIpIGFuZAorCQlwcmludCBDICgiJGNpZFxuIikgYW5kCisJCWNsb3NlKEMpCisJCQlvciBkaWUgIkNhbm5vdCB3cml0ZSBicmFuY2ggJGRlc3QgZm9yIHVwZGF0ZTogJCFcbiI7CisJfQorCisJaWYgKCR0YWcpIHsKKwkJJGxhc3RfcmV2ID0gIi0iIGlmICUkY2hhbmdlZF9wYXRoczsKKwkJIyB0aGUgdGFnIHdhcyAnY29tcGxleCcsIGkuZS4gZGlkIG5vdCByZWZlciB0byBhICJyZWFsIiByZXZpc2lvbgorCisJCSRkZXN0ID1+IHRyL18vXC4vIGlmICRvcHRfdTsKKworCQlzeXN0ZW0oJ2dpdCcsICd0YWcnLCAnLWYnLCAkZGVzdCwgJGNpZCkgPT0gMAorCQkJb3IgZGllICJDYW5ub3QgY3JlYXRlIHRhZyAkZGVzdDogJCFcbiI7CisKKwkJcHJpbnQgIkNyZWF0ZWQgdGFnICckZGVzdCcgb24gJyRicmFuY2gnXG4iIGlmICRvcHRfdjsKKwl9CisJJGJyYW5jaGVzeyRicmFuY2h9eyJMQVNUIn0gPSAkY2lkOworCSRicmFuY2hlc3skYnJhbmNofXskcmV2aXNpb259ID0gJGNpZDsKKwkkbGFzdF9yZXYgPSAkY2lkOworCXByaW50IEJSQU5DSEVTICIkcmV2aXNpb24gJGJyYW5jaCAkY2lkXG4iOworCXByaW50ICJET05FOiAkcmV2aXNpb24gJGRlc3QgJGNpZFxuIiBpZiAkb3B0X3Y7Cit9CisKK3N1YiBjb21taXRfYWxsIHsKKwkjIFJlY3Vyc2l2ZSB1c2Ugb2YgdGhlIFNWTiBjb25uZWN0aW9uIGRvZXMgbm90IHdvcmsKKwlsb2NhbCAkc3ZuID0gJHN2bjI7CisKKwlteSAoJGNoYW5nZWRfcGF0aHMsICRyZXZpc2lvbiwgJGF1dGhvciwgJGRhdGUsICRtZXNzYWdlKSA9IEBfOworCW15ICVwOworCXdoaWxlKG15KCRwYXRoLCRhY3Rpb24pID0gZWFjaCAlJGNoYW5nZWRfcGF0aHMpIHsKKwkJJHB7JHBhdGh9ID0gWyAkYWN0aW9uLT5hY3Rpb24sJGFjdGlvbi0+Y29weWZyb21fcGF0aCwgJGFjdGlvbi0+Y29weWZyb21fcmV2LCAkcGF0aCBdOworCX0KKwkkY2hhbmdlZF9wYXRocyA9IFwlcDsKKworCW15ICVkb25lOworCW15IEBjb2w7CisJbXkgJHByZWY7CisJbXkgJGJyYW5jaDsKKworCXdoaWxlKG15KCRwYXRoLCRhY3Rpb24pID0gZWFjaCAlJGNoYW5nZWRfcGF0aHMpIHsKKwkJKCRicmFuY2gsJHBhdGgpID0gc3BsaXRfcGF0aCgkcmV2aXNpb24sJHBhdGgpOworCQluZXh0IGlmIG5vdCBkZWZpbmVkICRicmFuY2g7CisJCW5leHQgaWYgbm90IGRlZmluZWQgJHBhdGg7CisJCSRkb25leyRicmFuY2h9eyRwYXRofSA9ICRhY3Rpb247CisJfQorCXdoaWxlKCgkYnJhbmNoLCRjaGFuZ2VkX3BhdGhzKSA9IGVhY2ggJWRvbmUpIHsKKwkJY29tbWl0KCRicmFuY2gsICRjaGFuZ2VkX3BhdGhzLCAkcmV2aXNpb24sICRhdXRob3IsICRkYXRlLCAkbWVzc2FnZSk7CisJfQorfQorCiskb3B0X2wgPSAkc3ZuLT57J21heHJldid9IGlmIG5vdCBkZWZpbmVkICRvcHRfbCBvciAkb3B0X2wgPiAkc3ZuLT57J21heHJldid9OworCitpZiAoJG9wdF9sIDwgJGN1cnJlbnRfcmV2KSB7CisgICAgcHJpbnQgIlVwIHRvIGRhdGU6IG5vIG5ldyByZXZpc2lvbnMgdG8gZmV0Y2ghXG4iIGlmICRvcHRfdjsKKyAgICB1bmxpbmsoIiRnaXRfZGlyL1NWTjJHSVRfSEVBRCIpOworICAgIGV4aXQ7Cit9CisKK3ByaW50ICJQcm9jZXNzaW5nIGZyb20gJGN1cnJlbnRfcmV2IHRvICRvcHRfbCAuLi5cbiIgaWYgJG9wdF92OworCitteSAkZnJvbV9yZXY7CitteSAkdG9fcmV2ID0gJGN1cnJlbnRfcmV2IC0gMTsKKworbXkgJHN1YnBvb2wgPSBTVk46OlBvb2w6Om5ld19kZWZhdWx0X3N1YjsKK3doaWxlICgkdG9fcmV2IDwgJG9wdF9sKSB7CisJJHN1YnBvb2wtPmNsZWFyOworCSRmcm9tX3JldiA9ICR0b19yZXYgKyAxOworCSR0b19yZXYgPSAkZnJvbV9yZXYgKyAkcmVwYWNrX2FmdGVyOworCSR0b19yZXYgPSAkb3B0X2wgaWYgJG9wdF9sIDwgJHRvX3JldjsKKwlwcmludCAiRmV0Y2hpbmcgZnJvbSAkZnJvbV9yZXYgdG8gJHRvX3JldiAuLi5cbiIgaWYgJG9wdF92OworCSRzdm4tPnsnc3ZuJ30tPmdldF9sb2coIiIsJGZyb21fcmV2LCR0b19yZXYsMCwxLDEsXCZjb21taXRfYWxsKTsKKwlteSAkcGlkID0gZm9yaygpOworCWRpZSAiRm9yazogJCFcbiIgdW5sZXNzIGRlZmluZWQgJHBpZDsKKwl1bmxlc3MoJHBpZCkgeworCQlleGVjKCJnaXQiLCAicmVwYWNrIiwgIi1kIikKKwkJCW9yIGRpZSAiQ2Fubm90IHJlcGFjazogJCFcbiI7CisJfQorCXdhaXRwaWQoJHBpZCwgMCk7Cit9CisKKwordW5saW5rKCRnaXRfaW5kZXgpOworCitpZiAoZGVmaW5lZCAkb3JpZ19naXRfaW5kZXgpIHsKKwkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRvcmlnX2dpdF9pbmRleDsKK30gZWxzZSB7CisJZGVsZXRlICRFTlZ7R0lUX0lOREVYX0ZJTEV9OworfQorCisjIE5vdyBzd2l0Y2ggYmFjayB0byB0aGUgYnJhbmNoIHdlIHdlcmUgaW4gYmVmb3JlIGFsbCBvZiB0aGlzIGhhcHBlbmVkCitpZigkb3JpZ19icmFuY2gpIHsKKwlwcmludCAiRE9ORVxuIiBpZiAkb3B0X3YgYW5kIChub3QgZGVmaW5lZCAkb3B0X2wgb3IgJG9wdF9sID4gMCk7CisJc3lzdGVtKCJjcCIsIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG9wdF9vIiwiJGdpdF9kaXIvcmVmcy9oZWFkcy9tYXN0ZXIiKQorCQlpZiAkZm9yd2FyZF9tYXN0ZXI7CisJdW5sZXNzICgkb3B0X2kpIHsKKwkJc3lzdGVtKCdnaXQnLCAncmVhZC10cmVlJywgJy1tJywgJy11JywgJ1NWTjJHSVRfSEVBRCcsICdIRUFEJyk7CisJCWRpZSAicmVhZC10cmVlIGZhaWxlZDogJD9cbiIgaWYgJD87CisJfQorfSBlbHNlIHsKKwkkb3JpZ19icmFuY2ggPSAibWFzdGVyIjsKKwlwcmludCAiRE9ORTsgY3JlYXRpbmcgJG9yaWdfYnJhbmNoIGJyYW5jaFxuIiBpZiAkb3B0X3YgYW5kIChub3QgZGVmaW5lZCAkb3B0X2wgb3IgJG9wdF9sID4gMCk7CisJc3lzdGVtKCJjcCIsIiRnaXRfZGlyL3JlZnMvaGVhZHMvJG9wdF9vIiwiJGdpdF9kaXIvcmVmcy9oZWFkcy9tYXN0ZXIiKQorCQl1bmxlc3MgLWYgIiRnaXRfZGlyL3JlZnMvaGVhZHMvbWFzdGVyIjsKKwlzeXN0ZW0oJ2dpdCcsICd1cGRhdGUtcmVmJywgJ0hFQUQnLCAiJG9yaWdfYnJhbmNoIik7CisJdW5sZXNzICgkb3B0X2kpIHsKKwkJc3lzdGVtKCdnaXQgY2hlY2tvdXQnKTsKKwkJZGllICJjaGVja291dCBmYWlsZWQ6ICQ/XG4iIGlmICQ/OworCX0KK30KK3VubGluaygiJGdpdF9kaXIvU1ZOMkdJVF9IRUFEIik7CitjbG9zZShCUkFOQ0hFUyk7CmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC1zdm5pbXBvcnQudHh0IGIvY29udHJpYi9leGFtcGxlcy9naXQtc3ZuaW1wb3J0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjBhOWMzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9leGFtcGxlcy9naXQtc3ZuaW1wb3J0LnR4dApAQCAtMCwwICsxLDE3OSBAQAorZ2l0LXN2bmltcG9ydCgxKQorPT09PT09PT09PT09PT09PQordjAuMSwgSnVseSAyMDA1CisKK05BTUUKKy0tLS0KK2dpdC1zdm5pbXBvcnQgLSBJbXBvcnQgYSBTVk4gcmVwb3NpdG9yeSBpbnRvIGdpdAorCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdC1zdm5pbXBvcnQnIFsgLW8gPGJyYW5jaC1mb3ItSEVBRD4gXSBbIC1oIF0gWyAtdiBdIFsgLWQgfCAtRCBdCisJCVsgLUMgPEdJVF9yZXBvc2l0b3J5PiBdIFsgLWkgXSBbIC11IF0gWy1sIGxpbWl0X3Jldl0KKwkJWyAtYiBicmFuY2hfc3ViZGlyIF0gWyAtVCB0cnVua19zdWJkaXIgXSBbIC10IHRhZ19zdWJkaXIgXQorCQlbIC1zIHN0YXJ0X2NoZyBdIFsgLW0gXSBbIC1yIF0gWyAtTSByZWdleCBdCisJCVsgLUkgPGlnbm9yZWZpbGVfbmFtZT4gXSBbIC1BIDxhdXRob3JfZmlsZT4gXQorCQlbIC1SIDxyZXBhY2tfZWFjaF9yZXZzPl0gWyAtUCA8cGF0aF9mcm9tX3RydW5rPiBdCisJCTxTVk5fcmVwb3NpdG9yeV9VUkw+IFsgPHBhdGg+IF0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK0ltcG9ydHMgYSBTVk4gcmVwb3NpdG9yeSBpbnRvIGdpdC4gSXQgd2lsbCBlaXRoZXIgY3JlYXRlIGEgbmV3CityZXBvc2l0b3J5LCBvciBpbmNyZW1lbnRhbGx5IGltcG9ydCBpbnRvIGFuIGV4aXN0aW5nIG9uZS4KKworU1ZOIGFjY2VzcyBpcyBkb25lIGJ5IHRoZSBTVk46OlBlcmwgbW9kdWxlLgorCitnaXQtc3ZuaW1wb3J0IGFzc3VtZXMgdGhhdCBTVk4gcmVwb3NpdG9yaWVzIGFyZSBvcmdhbml6ZWQgaW50byBvbmUKKyJ0cnVuayIgZGlyZWN0b3J5IHdoZXJlIHRoZSBtYWluIGRldmVsb3BtZW50IGhhcHBlbnMsICJicmFuY2hlcy9GT08iCitkaXJlY3RvcmllcyBmb3IgYnJhbmNoZXMsIGFuZCAiL3RhZ3MvRk9PIiBkaXJlY3RvcmllcyBmb3IgdGFncy4KK090aGVyIHN1YmRpcmVjdG9yaWVzIGFyZSBpZ25vcmVkLgorCitnaXQtc3ZuaW1wb3J0IGNyZWF0ZXMgYSBmaWxlICIuZ2l0L3N2bjJnaXQiLCB3aGljaCBpcyByZXF1aXJlZCBmb3IKK2luY3JlbWVudGFsIFNWTiBpbXBvcnRzLgorCitPUFRJT05TCistLS0tLS0tCistQyA8dGFyZ2V0LWRpcj46OgorICAgICAgICBUaGUgR0lUIHJlcG9zaXRvcnkgdG8gaW1wb3J0IHRvLiAgSWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0CisgICAgICAgIGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworLXMgPHN0YXJ0X3Jldj46OgorICAgICAgICBTdGFydCBpbXBvcnRpbmcgYXQgdGhpcyBTVk4gY2hhbmdlIG51bWJlci4gVGhlICBkZWZhdWx0IGlzIDEuCisrCitXaGVuIGltcG9ydGluZyBpbmNyZW1lbnRhbGx5LCB5b3UgbWlnaHQgbmVlZCB0byBlZGl0IHRoZSAuZ2l0L3N2bjJnaXQgZmlsZS4KKworLWk6OgorCUltcG9ydC1vbmx5OiBkb24ndCBwZXJmb3JtIGEgY2hlY2tvdXQgYWZ0ZXIgaW1wb3J0aW5nLiAgVGhpcyBvcHRpb24KKwllbnN1cmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW5kZXggcmVtYWluIHVudG91Y2hlZCBhbmQgd2lsbAorCW5vdCBjcmVhdGUgdGhlbSBpZiB0aGV5IGRvIG5vdCBleGlzdC4KKworLVQgPHRydW5rX3N1YmRpcj46OgorCU5hbWUgdGhlIFNWTiB0cnVuay4gRGVmYXVsdCAidHJ1bmsiLgorCistdCA8dGFnX3N1YmRpcj46OgorCU5hbWUgdGhlIFNWTiBzdWJkaXJlY3RvcnkgZm9yIHRhZ3MuIERlZmF1bHQgInRhZ3MiLgorCistYiA8YnJhbmNoX3N1YmRpcj46OgorCU5hbWUgdGhlIFNWTiBzdWJkaXJlY3RvcnkgZm9yIGJyYW5jaGVzLiBEZWZhdWx0ICJicmFuY2hlcyIuCisKKy1vIDxicmFuY2gtZm9yLUhFQUQ+OjoKKwlUaGUgJ3RydW5rJyBicmFuY2ggZnJvbSBTVk4gaXMgaW1wb3J0ZWQgdG8gdGhlICdvcmlnaW4nIGJyYW5jaCB3aXRoaW4KKwl0aGUgZ2l0IHJlcG9zaXRvcnkuIFVzZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBpbXBvcnQgaW50byBhCisJZGlmZmVyZW50IGJyYW5jaC4KKworLXI6OgorCVByZXBlbmQgJ3JYOiAnIHRvIGNvbW1pdCBtZXNzYWdlcywgd2hlcmUgWCBpcyB0aGUgaW1wb3J0ZWQKKwlzdWJ2ZXJzaW9uIHJldmlzaW9uLgorCistdTo6CisJUmVwbGFjZSB1bmRlcnNjb3JlcyBpbiB0YWcgbmFtZXMgd2l0aCBwZXJpb2RzLgorCistSSA8aWdub3JlZmlsZV9uYW1lPjo6CisJSW1wb3J0IHRoZSBzdm46aWdub3JlIGRpcmVjdG9yeSBwcm9wZXJ0eSB0byBmaWxlcyB3aXRoIHRoaXMKKwluYW1lIGluIGVhY2ggZGlyZWN0b3J5LiAoVGhlIFN1YnZlcnNpb24gYW5kIEdJVCBpZ25vcmUKKwlzeW50YXhlcyBhcmUgc2ltaWxhciBlbm91Z2ggdGhhdCB1c2luZyB0aGUgU3VidmVyc2lvbiBwYXR0ZXJucworCWRpcmVjdGx5IHdpdGggIi1JIC5naXRpZ25vcmUiIHdpbGwgYWxtb3N0IGFsd2F5cyBqdXN0IHdvcmsuKQorCistQSA8YXV0aG9yX2ZpbGU+OjoKKwlSZWFkIGEgZmlsZSB3aXRoIGxpbmVzIG9uIHRoZSBmb3JtCisrCistLS0tLS0KKwl1c2VybmFtZSA9IFVzZXIncyBGdWxsIE5hbWUgPGVtYWlsQGFkZHIuZXM+CisKKy0tLS0tLQorKworYW5kIHVzZSAiVXNlcidzIEZ1bGwgTmFtZSA8ZW1haWxAYWRkci5lcz4iIGFzIHRoZSBHSVQKK2F1dGhvciBhbmQgY29tbWl0dGVyIGZvciBTdWJ2ZXJzaW9uIGNvbW1pdHMgbWFkZSBieQorInVzZXJuYW1lIi4gSWYgZW5jb3VudGVyaW5nIGEgY29tbWl0IG1hZGUgYnkgYSB1c2VyIG5vdCBpbiB0aGUKK2xpc3QsIGFib3J0LgorKworRm9yIGNvbnZlbmllbmNlLCB0aGlzIGRhdGEgaXMgc2F2ZWQgdG8gJEdJVF9ESVIvc3ZuLWF1dGhvcnMKK2VhY2ggdGltZSB0aGUgLUEgb3B0aW9uIGlzIHByb3ZpZGVkLCBhbmQgcmVhZCBmcm9tIHRoYXQgc2FtZQorZmlsZSBlYWNoIHRpbWUgZ2l0LXN2bmltcG9ydCBpcyBydW4gd2l0aCBhbiBleGlzdGluZyBHSVQKK3JlcG9zaXRvcnkgd2l0aG91dCAtQS4KKworLW06OgorCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgb3B0aW9uCisJd2lsbCBlbmFibGUgZGVmYXVsdCByZWdleGVzIHRoYXQgdHJ5IHRvIGNhcHR1cmUgdGhlIG5hbWUgc291cmNlCisJYnJhbmNoIG5hbWUgZnJvbSB0aGUgY29tbWl0IG1lc3NhZ2UuCisKKy1NIDxyZWdleD46OgorCUF0dGVtcHQgdG8gZGV0ZWN0IG1lcmdlcyBiYXNlZCBvbiB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCBhIGN1c3RvbQorCXJlZ2V4LiBJdCBjYW4gYmUgdXNlZCB3aXRoIC1tIHRvIGFsc28gc2VlIHRoZSBkZWZhdWx0IHJlZ2V4ZXMuCisJWW91IG11c3QgZXNjYXBlIGZvcndhcmQgc2xhc2hlcy4KKworLWwgPG1heF9yZXY+OjoKKwlTcGVjaWZ5IGEgbWF4aW11bSByZXZpc2lvbiBudW1iZXIgdG8gcHVsbC4KKysKK0Zvcm1lcmx5LCB0aGlzIG9wdGlvbiBjb250cm9sbGVkIGhvdyBtYW55IHJldmlzaW9ucyB0byBwdWxsLAorZHVlIHRvIFNWTiBtZW1vcnkgbGVha3MuIChUaGVzZSBoYXZlIGJlZW4gd29ya2VkIGFyb3VuZC4pCisKKy1SIDxyZXBhY2tfZWFjaF9yZXZzPjo6CisJU3BlY2lmeSBob3cgb2Z0ZW4gZ2l0IHJlcG9zaXRvcnkgc2hvdWxkIGJlIHJlcGFja2VkLgorKworVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwMC4gZ2l0LXN2bmltcG9ydCB3aWxsIGRvIGltcG9ydHMgaW4gY2h1bmtzIG9mIDEwMDAKK3JldmlzaW9ucywgYWZ0ZXIgZWFjaCBjaHVuayB0aGUgZ2l0IHJlcG9zaXRvcnkgd2lsbCBiZSByZXBhY2tlZC4gVG8gZGlzYWJsZQordGhpcyBiZWhhdmlvciBzcGVjaWZ5IHNvbWUgbGFyZ2UgdmFsdWUgaGVyZSB3aGljaCBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZgorcmV2aXNpb25zIHRvIGltcG9ydC4KKworLVAgPHBhdGhfZnJvbV90cnVuaz46OgorCVBhcnRpYWwgaW1wb3J0IG9mIHRoZSBTVk4gdHJlZS4KKysKK0J5IGRlZmF1bHQsIHRoZSB3aG9sZSB0cmVlIG9uIHRoZSBTVk4gdHJ1bmsgKC90cnVuaykgaXMgaW1wb3J0ZWQuCisnLVAgbXkvcHJvaicgd2lsbCBpbXBvcnQgc3RhcnRpbmcgb25seSBmcm9tICcvdHJ1bmsvbXkvcHJvaicuCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byBpbXBvcnQgb25lIHByb2plY3QgZnJvbSBhCitzdm4gcmVwbyB3aGljaCBob3N0cyBtdWx0aXBsZSBwcm9qZWN0cyB1bmRlciB0aGUgc2FtZSB0cnVuay4KKworLXY6OgorCVZlcmJvc2l0eTogbGV0ICdzdm5pbXBvcnQnIHJlcG9ydCB3aGF0IGl0IGlzIGRvaW5nLgorCistZDo6CisJVXNlIGRpcmVjdCBIVFRQIHJlcXVlc3RzIGlmIHBvc3NpYmxlLiBUaGUgIjxwYXRoPiIgYXJndW1lbnQgaXMgdXNlZAorCW9ubHkgZm9yIHJldHJpZXZpbmcgdGhlIFNWTiBsb2dzOyB0aGUgcGF0aCB0byB0aGUgY29udGVudHMgaXMKKwlpbmNsdWRlZCBpbiB0aGUgU1ZOIGxvZy4KKworLUQ6OgorCVVzZSBkaXJlY3QgSFRUUCByZXF1ZXN0cyBpZiBwb3NzaWJsZS4gVGhlICI8cGF0aD4iIGFyZ3VtZW50IGlzIHVzZWQKKwlmb3IgcmV0cmlldmluZyB0aGUgbG9ncywgYXMgd2VsbCBhcyBmb3IgdGhlIGNvbnRlbnRzLgorKworVGhlcmUncyBubyBzYWZlIHdheSB0byBhdXRvbWF0aWNhbGx5IGZpbmQgb3V0IHdoaWNoIG9mIHRoZXNlIG9wdGlvbnMgdG8KK3VzZSwgc28geW91IG5lZWQgdG8gdHJ5IGJvdGguIFVzdWFsbHksIHRoZSBvbmUgdGhhdCdzIHdyb25nIHdpbGwgZGllCit3aXRoIGEgNDB4IGVycm9yIHByZXR0eSBxdWlja2x5LgorCis8U1ZOX3JlcG9zaXRvcnlfVVJMPjo6CisJVGhlIFVSTCBvZiB0aGUgU1ZOIG1vZHVsZSB5b3Ugd2FudCB0byBpbXBvcnQuIEZvciBsb2NhbAorCXJlcG9zaXRvcmllcywgdXNlICJmaWxlOi8vL2Fic29sdXRlL3BhdGgiLgorKworSWYgeW91J3JlIHVzaW5nIHRoZSAiLWQiIG9yICItRCIgb3B0aW9uLCB0aGlzIGlzIHRoZSBVUkwgb2YgdGhlIFNWTgorcmVwb3NpdG9yeSBpdHNlbGY7IGl0IHVzdWFsbHkgZW5kcyBpbiAiL3N2biIuCisKKzxwYXRoPjo6CisJVGhlIHBhdGggdG8gdGhlIG1vZHVsZSB5b3Ugd2FudCB0byBjaGVjayBvdXQuCisKKy1oOjoKKwlQcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuCisKK09VVFBVVAorLS0tLS0tCitJZiAnLXYnIGlzIHNwZWNpZmllZCwgdGhlIHNjcmlwdCByZXBvcnRzIHdoYXQgaXQgaXMgZG9pbmcuCisKK090aGVyd2lzZSwgc3VjY2VzcyBpcyBpbmRpY2F0ZWQgdGhlIFVuaXggd2F5LCBpLmUuIGJ5IHNpbXBseSBleGl0aW5nIHdpdGgKK2EgemVybyBleGl0IHN0YXR1cy4KKworQXV0aG9yCistLS0tLS0KK1dyaXR0ZW4gYnkgTWF0dGhpYXMgVXJsaWNocyA8c211cmZAc211cmYubm9yaXMuZGU+LCB3aXRoIGhlbHAgZnJvbQordmFyaW91cyBwYXJ0aWNpcGFudHMgb2YgdGhlIGdpdC1saXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPi4KKworQmFzZWQgb24gYSBjdnMyZ2l0IHNjcmlwdCBieSB0aGUgc2FtZSBhdXRob3IuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tCitEb2N1bWVudGF0aW9uIGJ5IE1hdHRoaWFzIFVybGljaHMgPHNtdXJmQHNtdXJmLm5vcmlzLmRlPi4KKworR0lUCistLS0KK1BhcnQgb2YgdGhlIGxpbmtnaXQ6Z2l0WzddIHN1aXRlCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC10YWcuc2ggYi9jb250cmliL2V4YW1wbGVzL2dpdC10YWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWJkOGYzYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXRhZy5zaApAQCAtMCwwICsxLDIwNSBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwNSBMaW51cyBUb3J2YWxkcworCitVU0FHRT0nWy1uIFs8bnVtPl1dIC1sIFs8cGF0dGVybj5dIHwgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mIHwgLWQgfCAtdl0gWy1tIDxtc2c+XSA8dGFnbmFtZT4gWzxoZWFkPl0nCitTVUJESVJFQ1RPUllfT0s9J1llcycKKy4gZ2l0LXNoLXNldHVwCisKK21lc3NhZ2VfZ2l2ZW49Cithbm5vdGF0ZT0KK3NpZ25lZD0KK2ZvcmNlPQorbWVzc2FnZT0KK3VzZXJuYW1lPQorbGlzdD0KK3ZlcmlmeT0KK0xJTkVTPTAKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKyAgICBjYXNlICIkMSIgaW4KKyAgICAtYSkKKwlhbm5vdGF0ZT0xCisJc2hpZnQKKwk7OworICAgIC1zKQorCWFubm90YXRlPTEKKwlzaWduZWQ9MQorCXNoaWZ0CisJOzsKKyAgICAtZikKKwlmb3JjZT0xCisJc2hpZnQKKwk7OworICAgIC1uKQorICAgICAgICBjYXNlICIkIywkMiIgaW4KKwkxLCogfCAqLC0qKQorCQlMSU5FUz0xIAkjIG5vIGFyZ3VtZW50CisJCTs7CisJKikJc2hpZnQKKwkJTElORVM9JChleHByICIkMSIgOiAnXChbMC05XSpcKScpCisJCVsgLXogIiRMSU5FUyIgXSAmJiBMSU5FUz0xICMgMSBsaW5lIGlzIGRlZmF1bHQgd2hlbiAtbiBpcyB1c2VkCisJCTs7CisJZXNhYworCXNoaWZ0CisJOzsKKyAgICAtbCkKKwlsaXN0PTEKKwlzaGlmdAorCWNhc2UgJCMgaW4KKwkwKQlQQVRURVJOPQorCQk7OworCSopCisJCVBBVFRFUk49IiQxIgkjIHNlbGVjdCB0YWdzIGJ5IHNoZWxsIHBhdHRlcm4sIG5vdCByZQorCQlzaGlmdAorCQk7OworCWVzYWMKKwlnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgLS10YWdzIHwgc29ydCB8CisJICAgIHdoaWxlIHJlYWQgVEFHCisJICAgIGRvCisJICAgICAgICBjYXNlICIkVEFHIiBpbgorCQkqJFBBVFRFUk4qKSA7OworCQkqKQkgICAgY29udGludWUgOzsKKwkJZXNhYworCQlbICIkTElORVMiIC1sZSAwIF0gJiYgeyBlY2hvICIkVEFHIjsgY29udGludWUgO30KKwkJT0JKVFlQRT0kKGdpdCBjYXQtZmlsZSAtdCAiJFRBRyIpCisJCWNhc2UgJE9CSlRZUEUgaW4KKwkJdGFnKQorCQkJQU5OT1RBVElPTj0kKGdpdCBjYXQtZmlsZSB0YWcgIiRUQUciIHwKKwkJCQlzZWQgLWUgJzEsL14kL2QnIHwKKwkJCQlzZWQgLW4gLWUgIgorCQkJCQkvXi0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tXCQvcQorCQkJCQkyLFwkcy9eLyAgICAvCisJCQkJCXAKKwkJCQkJJHtMSU5FU31xCisJCQkJIikKKwkJCXByaW50ZiAiJS0xNXMgJXNcbiIgIiRUQUciICIkQU5OT1RBVElPTiIKKwkJCTs7CisJCSopICAgICAgZWNobyAiJFRBRyIKKwkJCTs7CisJCWVzYWMKKwkgICAgZG9uZQorCTs7CisgICAgLW0pCisJYW5ub3RhdGU9MQorCXNoaWZ0CisJbWVzc2FnZT0iJDEiCisJaWYgdGVzdCAiJCMiID0gIjAiOyB0aGVuCisJICAgIGRpZSAiZXJyb3I6IG9wdGlvbiAtbSBuZWVkcyBhbiBhcmd1bWVudCIKKwllbHNlCisJICAgIG1lc3NhZ2U9IiQxIgorCSAgICBtZXNzYWdlX2dpdmVuPTEKKwkgICAgc2hpZnQKKwlmaQorCTs7CisgICAgLUYpCisJYW5ub3RhdGU9MQorCXNoaWZ0CisJaWYgdGVzdCAiJCMiID0gIjAiOyB0aGVuCisJICAgIGRpZSAiZXJyb3I6IG9wdGlvbiAtRiBuZWVkcyBhbiBhcmd1bWVudCIKKwllbHNlCisJICAgIG1lc3NhZ2U9IiQoY2F0ICIkMSIpIgorCSAgICBtZXNzYWdlX2dpdmVuPTEKKwkgICAgc2hpZnQKKwlmaQorCTs7CisgICAgLXUpCisJYW5ub3RhdGU9MQorCXNpZ25lZD0xCisJc2hpZnQKKwlpZiB0ZXN0ICIkIyIgPSAiMCI7IHRoZW4KKwkgICAgZGllICJlcnJvcjogb3B0aW9uIC11IG5lZWRzIGFuIGFyZ3VtZW50IgorCWVsc2UKKwkgICAgdXNlcm5hbWU9IiQxIgorCSAgICBzaGlmdAorCWZpCisJOzsKKyAgICAtZCkKKwlzaGlmdAorCWhhZF9lcnJvcj0wCisJZm9yIHRhZworCWRvCisJCWN1cj0kKGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtLWhhc2ggLS0gInJlZnMvdGFncy8kdGFnIikgfHwgeworCQkJZWNobyA+JjIgIlNlcmlvdXNseSwgd2hhdCB0YWcgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKKwkJCWhhZF9lcnJvcj0xCisJCQljb250aW51ZQorCQl9CisJCWdpdCB1cGRhdGUtcmVmIC1tICd0YWc6IGRlbGV0ZScgLWQgInJlZnMvdGFncy8kdGFnIiAiJGN1ciIgfHwgeworCQkJaGFkX2Vycm9yPTEKKwkJCWNvbnRpbnVlCisJCX0KKwkJZWNobyAiRGVsZXRlZCB0YWcgJHRhZy4iCisJZG9uZQorCWV4aXQgJGhhZF9lcnJvcgorCTs7CisgICAgLXYpCisJc2hpZnQKKwl0YWdfbmFtZT0iJDEiCisJdGFnPSQoZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC0taGFzaCAtLSAicmVmcy90YWdzLyR0YWdfbmFtZSIpIHx8CisJCWRpZSAiU2VyaW91c2x5LCB3aGF0IHRhZyBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorCWdpdC12ZXJpZnktdGFnIC12ICIkdGFnIgorCWV4aXQgJD8KKwk7OworICAgIC0qKQorICAgICAgICB1c2FnZQorCTs7CisgICAgKikKKwlicmVhaworCTs7CisgICAgZXNhYworZG9uZQorCitbIC1uICIkbGlzdCIgXSAmJiBleGl0IDAKKworbmFtZT0iJDEiCitbICIkbmFtZSIgXSB8fCB1c2FnZQorcHJldj0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitpZiBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLS1xdWlldCAtLSAicmVmcy90YWdzLyRuYW1lIgordGhlbgorICAgIHRlc3QgLW4gIiRmb3JjZSIgfHwgZGllICJ0YWcgJyRuYW1lJyBhbHJlYWR5IGV4aXN0cyIKKyAgICBwcmV2PSQoZ2l0IHJldi1wYXJzZSAicmVmcy90YWdzLyRuYW1lIikKK2ZpCitzaGlmdAorZ2l0IGNoZWNrLXJlZi1mb3JtYXQgInRhZ3MvJG5hbWUiIHx8CisJZGllICJ3ZSBkbyBub3QgbGlrZSAnJG5hbWUnIGFzIGEgdGFnIG5hbWUuIgorCitvYmplY3Q9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tZGVmYXVsdCBIRUFEICIkQCIpIHx8IGV4aXQgMQordHlwZT0kKGdpdCBjYXQtZmlsZSAtdCAkb2JqZWN0KSB8fCBleGl0IDEKK3RhZ2dlcj0kKGdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCkgfHwgZXhpdCAxCisKK3Rlc3QgLW4gIiR1c2VybmFtZSIgfHwKKwl1c2VybmFtZT0kKGdpdCBjb25maWcgdXNlci5zaWduaW5na2V5KSB8fAorCXVzZXJuYW1lPSQoZXhwciAieiR0YWdnZXIiIDogJ3pcKC4qPlwpJykKKwordHJhcCAncm0gLWYgIiRHSVRfRElSIi9UQUdfVE1QKiAiJEdJVF9ESVIiL1RBR19GSU5BTE1TRyAiJEdJVF9ESVIiL1RBR19FRElUTVNHJyAwCisKK2lmIFsgIiRhbm5vdGF0ZSIgXTsgdGhlbgorICAgIGlmIFsgLXogIiRtZXNzYWdlX2dpdmVuIiBdOyB0aGVuCisgICAgICAgICggZWNobyAiIyIKKyAgICAgICAgICBlY2hvICIjIFdyaXRlIGEgdGFnIG1lc3NhZ2UiCisgICAgICAgICAgZWNobyAiIyIgKSA+ICIkR0lUX0RJUiIvVEFHX0VESVRNU0cKKyAgICAgICAgZ2l0X2VkaXRvciAiJEdJVF9ESVIiL1RBR19FRElUTVNHIHx8IGV4aXQKKyAgICBlbHNlCisgICAgICAgIHByaW50ZiAnJXNcbicgIiRtZXNzYWdlIiA+IiRHSVRfRElSIi9UQUdfRURJVE1TRworICAgIGZpCisKKyAgICBncmVwIC12ICdeIycgPCIkR0lUX0RJUiIvVEFHX0VESVRNU0cgfAorICAgIGdpdCBzdHJpcHNwYWNlID4iJEdJVF9ESVIiL1RBR19GSU5BTE1TRworCisgICAgWyAtcyAiJEdJVF9ESVIiL1RBR19GSU5BTE1TRyAtbyAtbiAiJG1lc3NhZ2VfZ2l2ZW4iIF0gfHwgeworCWVjaG8gPiYyICJObyB0YWcgbWVzc2FnZT8iCisJZXhpdCAxCisgICAgfQorCisgICAgKCBwcmludGYgJ29iamVjdCAlc1xudHlwZSAlc1xudGFnICVzXG50YWdnZXIgJXNcblxuJyBcCisJIiRvYmplY3QiICIkdHlwZSIgIiRuYW1lIiAiJHRhZ2dlciI7CisgICAgICBjYXQgIiRHSVRfRElSIi9UQUdfRklOQUxNU0cgKSA+IiRHSVRfRElSIi9UQUdfVE1QCisgICAgcm0gLWYgIiRHSVRfRElSIi9UQUdfVE1QLmFzYyAiJEdJVF9ESVIiL1RBR19GSU5BTE1TRworICAgIGlmIFsgIiRzaWduZWQiIF07IHRoZW4KKwlncGcgLWJzYSAtdSAiJHVzZXJuYW1lIiAiJEdJVF9ESVIiL1RBR19UTVAgJiYKKwljYXQgIiRHSVRfRElSIi9UQUdfVE1QLmFzYyA+PiIkR0lUX0RJUiIvVEFHX1RNUCB8fAorCWRpZSAiZmFpbGVkIHRvIHNpZ24gdGhlIHRhZyB3aXRoIEdQRy4iCisgICAgZmkKKyAgICBvYmplY3Q9JChnaXQtbWt0YWcgPCAiJEdJVF9ESVIiL1RBR19UTVApCitmaQorCitnaXQgdXBkYXRlLXJlZiAicmVmcy90YWdzLyRuYW1lIiAiJG9iamVjdCIgIiRwcmV2IgpkaWZmIC0tZ2l0IGEvY29udHJpYi9leGFtcGxlcy9naXQtdmVyaWZ5LXRhZy5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXZlcmlmeS10YWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDkwMmE1YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXZlcmlmeS10YWcuc2gKQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisKK1VTQUdFPSc8dGFnPicKK1NVQkRJUkVDVE9SWV9PSz0nWWVzJworLiBnaXQtc2gtc2V0dXAKKwordmVyYm9zZT0KK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcmJ8LS12ZXJib3wtLXZlcmJvc3wtLXZlcmJvc2UpCisJCXZlcmJvc2U9dCA7OworCSopCisJCWJyZWFrIDs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK2lmIFsgIiQjIiAhPSAiMSIgXQordGhlbgorCXVzYWdlCitmaQorCit0eXBlPSIkKGdpdCBjYXQtZmlsZSAtdCAiJDEiIDI+L2Rldi9udWxsKSIgfHwKKwlkaWUgIiQxOiBubyBzdWNoIG9iamVjdC4iCisKK3Rlc3QgIiR0eXBlIiA9IHRhZyB8fAorCWRpZSAiJDE6IGNhbm5vdCB2ZXJpZnkgYSBub24tdGFnIG9iamVjdCBvZiB0eXBlICR0eXBlLiIKKworY2FzZSAiJHZlcmJvc2UiIGluCit0KQorCWdpdCBjYXQtZmlsZSAtcCAiJDEiIHwKKwlzZWQgLW4gLWUgJy9eLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0vcScgLWUgcAorCTs7Citlc2FjCisKK3RyYXAgJ3JtIC1mICIkR0lUX0RJUi8udG1wLXZ0YWciJyAwCisKK2dpdCBjYXQtZmlsZSB0YWcgIiQxIiA+IiRHSVRfRElSLy50bXAtdnRhZyIgfHwgZXhpdCAxCitzZWQgLW4gLWUgJworCS9eLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0kL3EKKwlwCisnIDwiJEdJVF9ESVIvLnRtcC12dGFnIiB8CitncGcgLS12ZXJpZnkgIiRHSVRfRElSLy50bXAtdnRhZyIgLSB8fCBleGl0IDEKK3JtIC1mICIkR0lUX0RJUi8udG1wLXZ0YWciCmRpZmYgLS1naXQgYS9jb250cmliL2V4YW1wbGVzL2dpdC13aGF0Y2hhbmdlZC5zaCBiL2NvbnRyaWIvZXhhbXBsZXMvZ2l0LXdoYXRjaGFuZ2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlZGJkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2V4YW1wbGVzL2dpdC13aGF0Y2hhbmdlZC5zaApAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKworVVNBR0U9J1stcF0gWy0tbWF4LWNvdW50PTxuPl0gWzxzaW5jZT4uLjxsaW1pdD5dIFstLXByZXR0eT08Zm9ybWF0Pl0gWy1tXSBbZ2l0LWRpZmYtdHJlZSBvcHRpb25zXSBbZ2l0LXJldi1saXN0IG9wdGlvbnNdJworU1VCRElSRUNUT1JZX09LPSdZZXMnCisuIGdpdC1zaC1zZXR1cAorCitkaWZmX3RyZWVfZmxhZ3M9JChnaXQtcmV2LXBhcnNlIC0tc3EgLS1uby1yZXZzIC0tZmxhZ3MgIiRAIikgfHwgZXhpdAorY2FzZSAiJDAiIGluCisqd2hhdGNoYW5nZWQpCisJY291bnQ9CisJdGVzdCAteiAiJGRpZmZfdHJlZV9mbGFncyIgJiYKKwkJZGlmZl90cmVlX2ZsYWdzPSQoZ2l0IGNvbmZpZyAtLWdldCB3aGF0Y2hhbmdlZC5kaWZmdHJlZSkKKwlkaWZmX3RyZWVfZGVmYXVsdF9mbGFncz0nLWMgLU0gLS1hYmJyZXYnIDs7Cisqc2hvdykKKwljb3VudD0tbjEKKwl0ZXN0IC16ICIkZGlmZl90cmVlX2ZsYWdzIiAmJgorCQlkaWZmX3RyZWVfZmxhZ3M9JChnaXQgY29uZmlnIC0tZ2V0IHNob3cuZGlmZnRyZWUpCisJZGlmZl90cmVlX2RlZmF1bHRfZmxhZ3M9Jy0tY2MgLS1hbHdheXMnIDs7Citlc2FjCit0ZXN0IC16ICIkZGlmZl90cmVlX2ZsYWdzIiAmJgorCWRpZmZfdHJlZV9mbGFncz0iJGRpZmZfdHJlZV9kZWZhdWx0X2ZsYWdzIgorCityZXZfbGlzdF9hcmdzPSQoZ2l0LXJldi1wYXJzZSAtLXNxIC0tZGVmYXVsdCBIRUFEIC0tcmV2cy1vbmx5ICIkQCIpICYmCitkaWZmX3RyZWVfYXJncz0kKGdpdC1yZXYtcGFyc2UgLS1zcSAtLW5vLXJldnMgLS1uby1mbGFncyAiJEAiKSAmJgorCitldmFsICJnaXQtcmV2LWxpc3QgJGNvdW50ICRyZXZfbGlzdF9hcmdzIiB8CitldmFsICJnaXQtZGlmZi10cmVlIC0tc3RkaW4gLS1wcmV0dHkgLXIgJGRpZmZfdHJlZV9mbGFncyAkZGlmZl90cmVlX2FyZ3MiIHwKK0xFU1M9IiRMRVNTIC1TIiAke1BBR0VSOi1sZXNzfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnBlcmwgYi9jb250cmliL2Zhc3QtaW1wb3J0L2dpdC1pbXBvcnQucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wODkxYjllCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnBlcmwKQEAgLTAsMCArMSw2NCBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIFBlcmZvcm1zIGFuIGluaXRpYWwgaW1wb3J0IG9mIGEgZGlyZWN0b3J5LiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50CisjIG9mIGRvaW5nICdnaXQgaW5pdDsgZ2l0IGFkZCAuOyBnaXQgY29tbWl0Jy4gSXQncyBhIGxpdHRsZSBzbG93ZXIsCisjIGJ1dCBpcyBtZWFudCB0byBiZSBhIHNpbXBsZSBmYXN0LWltcG9ydCBleGFtcGxlLgorCit1c2Ugc3RyaWN0OwordXNlIEZpbGU6OkZpbmQ7CisKK215ICRVU0FHRSA9ICd1c2FnZTogZ2l0LWltcG9ydCBicmFuY2ggaW1wb3J0LW1lc3NhZ2UnOworbXkgJGJyYW5jaCA9IHNoaWZ0IG9yIGRpZSAiJFVTQUdFXG4iOworbXkgJG1lc3NhZ2UgPSBzaGlmdCBvciBkaWUgIiRVU0FHRVxuIjsKKworY2hvbXAobXkgJHVzZXJuYW1lID0gYGdpdCBjb25maWcgdXNlci5uYW1lYCk7CitjaG9tcChteSAkZW1haWwgPSBgZ2l0IGNvbmZpZyB1c2VyLmVtYWlsYCk7CitkaWUgJ1lvdSBuZWVkIHRvIHNldCB1c2VyIG5hbWUgYW5kIGVtYWlsJworICB1bmxlc3MgJHVzZXJuYW1lICYmICRlbWFpbDsKKworc3lzdGVtKCdnaXQgaW5pdCcpOworb3BlbihteSAkZmksICd8LScsIHF3KGdpdCBmYXN0LWltcG9ydCAtLWRhdGUtZm9ybWF0PW5vdykpCisgIG9yIGRpZSAidW5hYmxlIHRvIHNwYXduIGZhc3QtaW1wb3J0OiAkISI7CisKK3ByaW50ICRmaSA8PEVPRjsKK2NvbW1pdCByZWZzL2hlYWRzLyRicmFuY2gKK2NvbW1pdHRlciAkdXNlcm5hbWUgPCRlbWFpbD4gbm93CitkYXRhIDw8TVNHRU9GCiskbWVzc2FnZQorTVNHRU9GCisKK0VPRgorCitmaW5kKAorICBzdWIgeworICAgIGlmKCRGaWxlOjpGaW5kOjpuYW1lIGVxICcuLy5naXQnKSB7CisgICAgICAkRmlsZTo6RmluZDo6cHJ1bmUgPSAxOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZXR1cm4gdW5sZXNzIC1mICRfOworCisgICAgbXkgJGZuID0gJEZpbGU6OkZpbmQ6Om5hbWU7CisgICAgJGZuID1+IHMjXi5cLyMjOworCisgICAgb3BlbihteSAkaW4sICc8JywgJF8pCisgICAgICBvciBkaWUgInVuYWJsZSB0byBvcGVuICRmbjogJCEiOworICAgIG15IEBzdCA9IHN0YXQoJGluKQorICAgICAgb3IgZGllICJ1bmFibGUgdG8gc3RhdCAkZm46ICQhIjsKKyAgICBteSAkbGVuID0gJHN0WzddOworCisgICAgcHJpbnQgJGZpICJNIDY0NCBpbmxpbmUgJGZuXG4iOworICAgIHByaW50ICRmaSAiZGF0YSAkbGVuXG4iOworICAgIHdoaWxlKCRsZW4gPiAwKSB7CisgICAgICBteSAkciA9IHJlYWQoJGluLCBteSAkYnVmLCAkbGVuIDwgNDA5NiA/ICRsZW4gOiA0MDk2KTsKKyAgICAgIGRlZmluZWQoJHIpIG9yIGRpZSAicmVhZCBlcnJvciBmcm9tICRmbjogJCEiOworICAgICAgJHIgPiAwIG9yIGRpZSAicHJlbWF0dXJlIEVPRiBmcm9tICRmbjogJCEiOworICAgICAgcHJpbnQgJGZpICRidWY7CisgICAgICAkbGVuIC09ICRyOworICAgIH0KKyAgICBwcmludCAkZmkgIlxuIjsKKworICB9LCAnLicKKyk7CisKK2Nsb3NlKCRmaSk7CitleGl0ICQ/OwpkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnNoIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtaW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY4ZDgwM2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Zhc3QtaW1wb3J0L2dpdC1pbXBvcnQuc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisjCisjIFBlcmZvcm1zIGFuIGluaXRpYWwgaW1wb3J0IG9mIGEgZGlyZWN0b3J5LiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50CisjIG9mIGRvaW5nICdnaXQgaW5pdDsgZ2l0IGFkZCAuOyBnaXQgY29tbWl0Jy4gSXQncyBhIGxvdCBzbG93ZXIsCisjIGJ1dCBpcyBtZWFudCB0byBiZSBhIHNpbXBsZSBmYXN0LWltcG9ydCBleGFtcGxlLgorCitpZiBbIC16ICIkMSIgLW8gLXogIiQyIiBdOyB0aGVuCisJZWNobyAidXNhZ2U6IGdpdC1pbXBvcnQgYnJhbmNoIGltcG9ydC1tZXNzYWdlIgorCWV4aXQgMQorZmkKKworVVNFUk5BTUU9IiQoZ2l0IGNvbmZpZyB1c2VyLm5hbWUpIgorRU1BSUw9IiQoZ2l0IGNvbmZpZyB1c2VyLmVtYWlsKSIKKworaWYgWyAteiAiJFVTRVJOQU1FIiAtbyAteiAiJEVNQUlMIiBdOyB0aGVuCisJZWNobyAiWW91IG5lZWQgdG8gc2V0IHVzZXIgbmFtZSBhbmQgZW1haWwiCisJZXhpdCAxCitmaQorCitnaXQgaW5pdAorCisoCisJY2F0IDw8RU9GCitjb21taXQgcmVmcy9oZWFkcy8kMQorY29tbWl0dGVyICRVU0VSTkFNRSA8JEVNQUlMPiBub3cKK2RhdGEgPDxNU0dFT0YKKyQyCitNU0dFT0YKKworRU9GCisJZmluZCAqIC10eXBlIGZ8d2hpbGUgcmVhZCBpO2RvCisJCWVjaG8gIk0gMTAwNjQ0IGlubGluZSAkaSIKKwkJZWNobyBkYXRhICQoc3RhdCAtYyAnJXMnICIkaSIpCisJCWNhdCAiJGkiCisJCWVjaG8KKwlkb25lCisJZWNobworKSB8IGdpdCBmYXN0LWltcG9ydCAtLWRhdGUtZm9ybWF0PW5vdwpkaWZmIC0tZ2l0IGEvY29udHJpYi9mYXN0LWltcG9ydC9naXQtcDQuUkVBRE1FIGIvY29udHJpYi9mYXN0LWltcG9ydC9naXQtcDQuUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzVlY2YKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Zhc3QtaW1wb3J0L2dpdC1wNC5SRUFETUUKQEAgLTAsMCArMSwxMiBAQAorVGhlIGdpdC1wNCBzY3JpcHQgbW92ZWQgdG8gdGhlIHRvcC1sZXZlbCBvZiB0aGUgZ2l0IHNvdXJjZSBkaXJlY3RvcnkuCisKK0ludm9rZSBpdCBhcyBhbnkgb3RoZXIgZ2l0IGNvbW1hbmQsIGxpa2UgImdpdCBwNCBjbG9uZSIsIGZvciBpbnN0YW5jZS4KKworTm90ZSB0aGF0IHRoZSB0b3AtbGV2ZWwgZ2l0LXA0LnB5IHNjcmlwdCBpcyBub3cgdGhlIHNvdXJjZS4gIEl0IGlzCitidWlsdCB1c2luZyBtYWtlIHRvIGdpdC1wNCwgd2hpY2ggd2lsbCBiZSBpbnN0YWxsZWQuCisKK1dpbmRvd3MgdXNlcnMgY2FuIGNvcHkgdGhlIGdpdC1wNC5weSBzb3VyY2Ugc2NyaXB0IGRpcmVjdGx5LCBwb3NzaWJseQoraW52b2tpbmcgaXQgdGhyb3VnaCBhIGJhdGNoIGZpbGUgY2FsbGVkICJnaXQtcDQuYmF0IiBpbiB0aGUgc2FtZSBmb2xkZXIuCitJdCBzaG91bGQgY29udGFpbiBqdXN0IG9uZSBsaW5lOgorCisgICAgQHB5dGhvbiAiJX5kMCV+cDBnaXQtcDQucHkiICUqCmRpZmYgLS1naXQgYS9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC1kaXJlY3Rvcmllcy5wZXJsIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtZGlyZWN0b3JpZXMucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZGVjMWYxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtZGlyZWN0b3JpZXMucGVybApAQCAtMCwwICsxLDQxNyBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIENvcHlyaWdodCAyMDA4LTIwMDkgUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+CisjCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKz1wb2QKKworPWhlYWQxIE5BTUUKKworaW1wb3J0LWRpcmVjdG9yaWVzIC0gSW1wb3J0IGJpdHMgYW5kIHBpZWNlcyB0byBHaXQuCisKKz1oZWFkMSBTWU5PUFNJUworCitCPGltcG9ydC1kaXJlY3Rvcmllcy5wZXJsPiBGPGNvbmZpZ2ZpbGU+IEY8b3V0cHV0ZmlsZT4KKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1NjcmlwdCB0byBpbXBvcnQgYXJiaXRyYXJ5IHByb2plY3RzIHZlcnNpb24gY29udHJvbGxlZCBieSB0aGUgImNvcHkgdGhlCitzb3VyY2UgZGlyZWN0b3J5IHRvIGEgbmV3IGxvY2F0aW9uIGFuZCBlZGl0IGl0IHRoZXJlIi12ZXJzaW9uIGNvbnRyb2xsZWQKK3Byb2plY3RzIGludG8gdmVyc2lvbiBjb250cm9sLiBIYW5kbGVzIHByb2plY3RzIHdpdGggYXJiaXRyYXJ5IGJyYW5jaGluZworYW5kIHZlcnNpb24gdHJlZXMsIHRha2luZyBhIGZpbGUgZGVzY3JpYmluZyB0aGUgaW5wdXRzIGFuZCBnZW5lcmF0aW5nIGEKK2ZpbGUgY29tcGF0aWJsZSB3aXRoIHRoZSBMPGdpdC1mYXN0LWltcG9ydCgxKT4gZm9ybWF0LgorCis9aGVhZDEgQ09ORklHVVJBVElPTiBGSUxFCisKKz1oZWFkMiBGb3JtYXQKKworVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBiYXNlZCBvbiB0aGUgc3RhbmRhcmQgSTwuaW5pPiBmb3JtYXQuCisKKyA7IENvbW1lbnRzIHN0YXJ0IHdpdGggc2VtaS1jb2xvbnMKKyBbc2VjdGlvbl0KKyBrZXk9dmFsdWUKKworUGxlYXNlIHNlZSBiZWxvdyBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMuCisKKz1oZWFkMiBHbG9iYWwgY29uZmlndXJhdGlvbgorCitHbG9iYWwgY29uZmlndXJhdGlvbiBpcyBkb25lIGluIHRoZSBCPFtjb25maWddPiBzZWN0aW9uLCB3aGljaCBzaG91bGQgYmUKK3RoZSBmaXJzdCBzZWN0aW9uIGluIHRoZSBmaWxlLiBDb25maWd1cmF0aW9uIGNhbiBiZSBjaGFuZ2VkIGJ5CityZXBlYXRpbmcgY29uZmlndXJhdGlvbiBzZWN0aW9ucyBsYXRlciBvbi4KKworIFtjb25maWddCisgOyBjb25maWd1cmUgY29udmVyc2lvbiBvZiBDUkxGcy4gImNvbnZlcnQiIG1lYW5zIHRoYXQgYWxsIENSTEZzCisgOyBzaG91bGQgYmUgY29udmVydGVkIGludG8gTEZzIChzdWl0YWJsZSBmb3IgdGhlIGNvcmUuYXV0b2NybGYKKyA7IHNldHRpbmcgc2V0IHRvIHRydWUgaW4gR2l0KS4gIm5vbmUiIG1lYW5zIHRoYXQgYWxsIGRhdGEgaXMKKyA7IHRyZWF0ZWQgYXMgYmluYXJ5LgorIGNybGY9Y29udmVydAorCis9aGVhZDIgUmV2aXNpb24gY29uZmlndXJhdGlvbgorCitFYWNoIHJldmlzaW9uIHRoYXQgaXMgdG8gYmUgaW1wb3J0ZWQgaXMgZGVzY3JpYmVkIGluIHRocmVlCitzZWN0aW9ucy4gUmV2aXNpb25zIHNob3VsZCBiZSBkZWZpbmVkIGluIHRvcG9sb2dpY2FsIG9yZGVyLCBzbwordGhhdCBhIHJldmlzaW9uJ3MgcGFyZW50IGhhcyBhbHdheXMgYmVlbiBkZWZpbmVkIHdoZW4gYSBuZXcgcmV2aXNpb24KK2lzIGludHJvZHVjZWQuIEFsbCB0aGUgc2VjdGlvbnMgZm9yIG9uZSByZXZpc2lvbiBtdXN0IGJlIGRlZmluZWQKK2JlZm9yZSBkZWZpbmluZyB0aGUgbmV4dCByZXZpc2lvbi4KKworRWFjaCByZXZpc2lvbiBpcyBhc3NpZ25lZCBhIHVuaXF1ZSBudW1lcmljYWwgaWRlbnRpZmllci4gVGhlCitudW1iZXJzIGRvIG5vdCBuZWVkIHRvIGJlIGNvbnNlY3V0aXZlLCBub3IgbW9ub3RvbmljYWxseQoraW5jcmVhc2luZy4KKworRm9yIGluc3RhbmNlLCBpZiB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZSBjb250YWlucyBvbmx5IHRoZSB0d28KK3JldmlzaW9ucyA0NzExIGFuZCA0Miwgd2hlcmUgNDcxMSBpcyB0aGUgaW5pdGlhbCBjb21taXQsIHRoZQorb25seSByZXF1aXJlbWVudCBpcyB0aGF0IDQ3MTEgaXMgY29tcGxldGVseSBkZWZpbmVkIGJlZm9yZSA0Mi4KKworPXBvZAorCis9aGVhZDMgUmV2aXNpb24gZGVzY3JpcHRpb24gc2VjdGlvbgorCitBIHNlY3Rpb24gd2hvc2Ugc2VjdGlvbiBuYW1lIGlzIGp1c3QgYW4gaW50ZWdlciBnaXZlcyBtZXRhLWRhdGEKK2Fib3V0IHRoZSByZXZpc2lvbi4KKworIFszXQorIDsgYXV0aG9yIHNldHMgdGhlIGF1dGhvciBvZiB0aGUgcmV2aXNpb25zCisgYXV0aG9yPVBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorIDsgYnJhbmNoIHNldHMgdGhlIGJyYW5jaCB0aGF0IHRoZSByZXZpc2lvbiBzaG91bGQgYmUgY29tbWl0dGVkIHRvCisgYnJhbmNoPW1hc3RlcgorIDsgcGFyZW50IGRlc2NyaWJlcyB0aGUgcmV2aXNpb24gdGhhdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMgY29tbWl0CisgOyAob3B0aW9uYWwpCisgcGFyZW50PTEKKyA7IG1lcmdlcyBkZXNjcmliZXMgYSByZXZpc2lvbiB0aGF0IGlzIG1lcmdlZCBpbnRvIHRoaXMgY29tbWl0CisgOyAob3B0aW9uYWw7IGNhbiBiZSByZXBlYXRlZCkKKyBtZXJnZXM9MgorIDsgc2VsZWN0cyBvbmUgZmlsZSB0byB0YWtlIHRoZSB0aW1lc3RhbXAgZnJvbQorIDsgKG9wdGlvbmFsOyBpZiB1bnNwZWNpZmllZCwgdGhlIG1vc3QgcmVjZW50IGZpbGUgZnJvbSB0aGUgLmZpbGVzCisgOyAgc2VjdGlvbiBpcyB1c2VkKQorIHRpbWVzdGFtcD0zL3NvdXJjZS5jCisKKz1oZWFkMyBSZXZpc2lvbiBjb250ZW50cyBzZWN0aW9uCisKK0Egc2VjdGlvbiB3aG9zZSBzZWN0aW9uIG5hbWUgaXMgYW4gaW50ZWdlciBmb2xsb3dlZCBieSBCPC5maWxlcz4KK2Rlc2NyaWJlIGFsbCB0aGUgZmlsZXMgaW5jbHVkZWQgaW4gdGhpcyByZXZpc2lvbi4gSWYgYSBmaWxlIHRoYXQKK3dhcyBhdmFpbGFibGUgcHJldmlvdXNseSBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcyByZXZpc2lvbiwgaXQgd2lsbAorYmUgcmVtb3ZlZC4KKworSWYgYW4gb24tZGlzayByZXZpc2lvbiBpcyBpbmNvbXBsZXRlLCB5b3UgY2FuIHBvaW50IHRvIGZpbGVzIGZyb20KK2EgcHJldmlvdXMgcmV2aXNpb24uIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24gd2hlcmUgdGhlIHNvdXJjZQorZmlsZXMgYXJlIGxvY2F0ZWQsIG5vciBvbiB0aGVpciBuYW1lcy4KKworIFszLmZpbGVzXQorIDsgdGhlIGtleSBpcyB0aGUgcGF0aCBpbnNpZGUgdGhlIHJlcG9zaXRvcnksIHRoZSB2YWx1ZSBpcyB0aGUgcGF0aAorIDsgYXMgc2VlbiBmcm9tIHRoZSBpbXBvcnRlciBzY3JpcHQuCisgc291cmNlLmM9dmVyLTMuMDAvc291cmNlLmMKKyBzb3VyY2UuaD12ZXItMi45OS9zb3VyY2UuaAorIHJlYWRtZS50eHQ9dmVyLTMuMDAvaW50cm9kdWN0aW9uIHRvIHRoZSBwcm9qZWN0LnR4dAorCitGaWxlIG5hbWVzIGFyZSB0cmVhdGVkIGFzIGJ5dGUgc3RyaW5ncyAoYnV0IHBsZWFzZSBzZWUgYmVsb3cgb24KK3F1b3RpbmcgcnVsZXMpLCBhbmQgc2hvdWxkIGJlIHN0b3JlZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGluCit0aGUgZW5jb2RpbmcgdGhhdCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgZ2VuZXJhdGVkIHJlcG9zaXRvcnkuCisKKz1oZWFkMyBSZXZpc2lvbiBjb21taXQgbWVzc2FnZSBzZWN0aW9uCisKK0Egc2VjdGlvbiB3aG9zZSBzZWN0aW9uIG5hbWUgaXMgYW4gaW50ZWdlciBmb2xsb3dlZCBieSBCPC5tZXNzYWdlPgorZ2l2ZXMgdGhlIGNvbW1pdCBtZXNzYWdlLiBUaGlzIHNlY3Rpb24gaXMgcmVhZCB2ZXJiYXRpbSwgdXAgdW50aWwKK3RoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgc2VjdGlvbi4gQXMgc3VjaCwgYSBjb21taXQgbWVzc2FnZSBtYXkgbm90Citjb250YWluIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoIGFuIG9wZW5pbmcgc3F1YXJlIGJyYWNrZXQgKCJbIikgYW5kCitlbmRzIHdpdGggYSBjbG9zaW5nIHNxdWFyZSBicmFja2V0ICgiXSIpLCB1bmxlc3MgdGhleSBhcmUgc3Vycm91bmRlZAorYnkgd2hpdGVzcGFjZSBvciBvdGhlciBjaGFyYWN0ZXJzLgorCisgWzMubWVzc2FnZV0KKyBJbXBsZW1lbnQgZm9vYmFyLgorIDsgdHJhaWxpbmcgYmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuCisKKz1jdXQKKworIyBHbG9iYWxzCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIGludGVnZXI7CitteSAkY3JsZm1vZGUgPSAwOworbXkgQHJldnM7CitteSAoJXJldm1hcCwgJW1lc3NhZ2UsICVmaWxlcywgJWF1dGhvciwgJWJyYW5jaCwgJXBhcmVudCwgJW1lcmdlcywgJXRpbWUsICV0aW1lc291cmNlKTsKK215ICRzZWN0aW9udHlwZSA9IDA7CitteSAkcmV2ID0gMDsKK215ICRtYXJrID0gMTsKKworIyBDaGVjayBjb21tYW5kIGxpbmUKK2lmICgkI0FSR1YgPCAxIHx8ICRBUkdWWzBdID1+IC9eLS0/aC8pCit7CisgICAgZXhlYygncGVybGRvYycsICQwKTsKKyAgICBleGl0IDE7Cit9CisKKyMgT3BlbiBjb25maWd1cmF0aW9uCitteSAkY29uZmlnID0gJEFSR1ZbMF07CitvcGVuIENGRywgJzwnLCAkY29uZmlnIG9yIGRpZSAiQ2Fubm90IG9wZW4gY29uZmlndXJhdGlvbiBmaWxlIFwiJGNvbmZpZ1wiOiAiOworCisjIE9wZW4gb3V0cHV0CitteSAkb3V0cHV0ID0gJEFSR1ZbMV07CitvcGVuIE9VVCwgJz4nLCAkb3V0cHV0IG9yIGRpZSAiQ2Fubm90IGNyZWF0ZSBvdXRwdXQgZmlsZSBcIiRvdXRwdXRcIjogIjsKK2Jpbm1vZGUgT1VUOworCitMSU5FOiB3aGlsZSAobXkgJGxpbmUgPSA8Q0ZHPikKK3sKKwkkbGluZSA9fiBzL1xyP1xuJC8vOworCW5leHQgTElORSBpZiAkc2VjdGlvbnR5cGUgIT0gNCAmJiAkbGluZSBlcSAnJzsKKwluZXh0IExJTkUgaWYgJGxpbmUgPX4gL147LzsKKwlteSAkb2xkc2VjdGlvbnR5cGUgPSAkc2VjdGlvbnR5cGU7CisJbXkgJG9sZHJldiA9ICRyZXY7CisKKwkjIFNlY3Rpb25zCisJaWYgKCRsaW5lID1+IG0iXlxbKGNvbmZpZ3woXGQrKSh8XC5maWxlc3xcLm1lc3NhZ2UpKVxdJCIpCisJeworCQlpZiAoJDEgZXEgJ2NvbmZpZycpCisJCXsKKwkJCSRzZWN0aW9udHlwZSA9IDE7CisJCX0KKwkJZWxzaWYgKCQzIGVxICcnKQorCQl7CisJCQkkc2VjdGlvbnR5cGUgPSAyOworCQkJJHJldiA9ICQyOworCQkJIyBDcmVhdGUgYSBuZXcgcmV2aXNpb24KKwkJCWRpZSAiRHVwbGljYXRlIHJldjogJGxpbmVcbiAiIGlmIGRlZmluZWQgJHJldm1hcHskcmV2fTsKKwkJCXByaW50ICJSZWFkaW5nIHJldmlzaW9uICRyZXZcbiI7CisJCQlwdXNoIEByZXZzLCAkcmV2OworCQkJJHJldm1hcHskcmV2fSA9ICRtYXJrICsrOworCQkJJHRpbWV7JHJldm1hcHskcmV2fX0gPSAwOworCQl9CisJCWVsc2lmICgkMyBlcSAnLmZpbGVzJykKKwkJeworCQkJJHNlY3Rpb250eXBlID0gMzsKKwkJCSRyZXYgPSAkMjsKKwkJCWRpZSAiUmV2aXNpb24gbWlzbWF0Y2g6ICRsaW5lXG4gIiB1bmxlc3MgJHJldiA9PSAkb2xkcmV2OworCQl9CisJCWVsc2lmICgkMyBlcSAnLm1lc3NhZ2UnKQorCQl7CisJCQkkc2VjdGlvbnR5cGUgPSA0OworCQkJJHJldiA9ICQyOworCQkJZGllICJSZXZpc2lvbiBtaXNtYXRjaDogJGxpbmVcbiAiIHVubGVzcyAkcmV2ID09ICRvbGRyZXY7CisJCX0KKwkJZWxzZQorCQl7CisJCQlkaWUgIkludGVybmFsIHBhcnNlIGVycm9yOiAkbGluZVxuICI7CisJCX0KKwkJbmV4dCBMSU5FOworCX0KKworCSMgUGFyc2UgZGF0YQorCWlmICgkc2VjdGlvbnR5cGUgIT0gNCkKKwl7CisJCSMgS2V5IGFuZCB2YWx1ZQorCQlpZiAoJGxpbmUgPX4gbSJeXHMqKFteXHNdLio9LipbXlxzXSlccyokIikKKwkJeworCQkJbXkgKCRrZXksICR2YWx1ZSkgPSAmcGFyc2VrZXl2YWx1ZXBhaXIoJDEpOworCQkJIyBHbG9iYWwgY29uZmlndXJhdGlvbgorCQkJaWYgKDEgPT0gJHNlY3Rpb250eXBlKQorCQkJeworCQkJCWlmICgka2V5IGVxICdjcmxmJykKKwkJCQl7CisJCQkJCSRjcmxmbW9kZSA9IDEsIG5leHQgTElORSBpZiAkdmFsdWUgZXEgJ2NvbnZlcnQnOworCQkJCQkkY3JsZm1vZGUgPSAwLCBuZXh0IExJTkUgaWYgJHZhbHVlIGVxICdub25lJzsKKwkJCQl9CisJCQkJZGllICJVbmtub3duIGNvbmZpZ3VyYXRpb24gb3B0aW9uOiAkbGluZVxuICI7CisJCQl9CisJCQkjIFJldmlzaW9uIHNwZWNpZmljYXRpb24KKwkJCWlmICgyID09ICRzZWN0aW9udHlwZSkKKwkJCXsKKwkJCQlteSAkY3VycmVudCA9ICRyZXZtYXB7JHJldn07CisJCQkJJGF1dGhvcnskY3VycmVudH0gPSAkdmFsdWUsIG5leHQgTElORSBpZiAka2V5IGVxICdhdXRob3InOworCQkJCSRicmFuY2h7JGN1cnJlbnR9ID0gJHZhbHVlLCBuZXh0IExJTkUgaWYgJGtleSBlcSAnYnJhbmNoJzsKKwkJCQkkcGFyZW50eyRjdXJyZW50fSA9ICR2YWx1ZSwgbmV4dCBMSU5FIGlmICRrZXkgZXEgJ3BhcmVudCc7CisJCQkJJHRpbWVzb3VyY2V7JGN1cnJlbnR9ID0gJHZhbHVlLCBuZXh0IExJTkUgaWYgJGtleSBlcSAndGltZXN0YW1wJzsKKwkJCQlwdXNoKEB7JG1lcmdlc3skY3VycmVudH19LCAkdmFsdWUpLCBuZXh0IExJTkUgaWYgJGtleSBlcSAnbWVyZ2VzJzsKKwkJCQlkaWUgIlVua25vd24gcmV2aXNpb24gb3B0aW9uOiAkbGluZVxuICI7CisJCQl9CisJCQkjIEZpbGVzcGVjcworCQkJaWYgKDMgPT0gJHNlY3Rpb250eXBlKQorCQkJeworCQkJCSMgQWRkIHRoZSBmaWxlIGFuZCBjcmVhdGUgYSBtYXJrZXIKKwkJCQlkaWUgIkZpbGUgbm90IGZvdW5kOiAkbGluZVxuICIgdW5sZXNzIC1mICR2YWx1ZTsKKwkJCQlteSAkY3VycmVudCA9ICRyZXZtYXB7JHJldn07CisJCQkJJHskZmlsZXN7JGN1cnJlbnR9fXska2V5fSA9ICRtYXJrOworCQkJCW15ICR0aW1lID0gJmZpbGVibG9iKCR2YWx1ZSwgJGNybGZtb2RlLCAkbWFyayArKyk7CisKKwkJCQkjIFVwZGF0ZSByZXZpc2lvbiB0aW1lc3RhbXAgaWYgbW9yZSByZWNlbnQgdGhhbiBvdGhlcgorCQkJCSMgZmlsZXMgc2Vlbiwgb3IgaWYgdGhpcyBpcyB0aGUgZmlsZSB3ZSBoYXZlIHNlbGVjdGVkCisJCQkJIyB0byB0YWtlIHRoZSB0aW1lIHN0YW1wIGZyb20gdXNpbmcgdGhlICJ0aW1lc3RhbXAiCisJCQkJIyBkaXJlY3RpdmUuCisJCQkJaWYgKChkZWZpbmVkICR0aW1lc291cmNleyRjdXJyZW50fSAmJiAkdGltZXNvdXJjZXskY3VycmVudH0gZXEgJHZhbHVlKQorCQkJCSAgICB8fCAkdGltZSA+ICR0aW1leyRjdXJyZW50fSkKKwkJCQl7CisJCQkJCSR0aW1leyRjdXJyZW50fSA9ICR0aW1lOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWRpZSAiUGFyc2UgZXJyb3I6ICRsaW5lXG4gIjsKKwkJfQorCX0KKwllbHNlCisJeworCQkjIENvbW1pdCBtZXNzYWdlCisJCW15ICRjdXJyZW50ID0gJHJldm1hcHskcmV2fTsKKwkJaWYgKGRlZmluZWQgJG1lc3NhZ2V7JGN1cnJlbnR9KQorCQl7CisJCQkkbWVzc2FnZXskY3VycmVudH0gLj0gIlxuIjsKKwkJfQorCQkkbWVzc2FnZXskY3VycmVudH0gLj0gJGxpbmU7CisJfQorfQorY2xvc2UgQ0ZHOworCisjIFN0YXJ0IHNwZXdpbmcgb3V0IGRhdGEgZm9yIGdpdC1mYXN0LWltcG9ydAorZm9yZWFjaCBteSAkY29tbWl0IChAcmV2cykKK3sKKwkjIFByb2dyZXNzCisJcHJpbnQgT1VUICJwcm9ncmVzcyBDcmVhdGluZyByZXZpc2lvbiAkY29tbWl0XG4iOworCisJIyBDcmVhdGUgY29tbWl0IGhlYWRlcgorCW15ICRtYXJrID0gJHJldm1hcHskY29tbWl0fTsKKworCSMgQnJhbmNoIGFuZCBjb21taXQgaWQKKwlwcmludCBPVVQgImNvbW1pdCByZWZzL2hlYWRzLyIsICRicmFuY2h7JG1hcmt9LCAiXG5tYXJrIDoiLCAkbWFyaywgIlxuIjsKKworCSMgQXV0aG9yIGFuZCB0aW1lc3RhbXAKKwlkaWUgIk5vIHRpbWVzdGFtcCBkZWZpbmVkIGZvciAkY29tbWl0IChubyBmaWxlcz8pXG4iIHVubGVzcyBkZWZpbmVkICR0aW1leyRtYXJrfTsKKwlwcmludCBPVVQgImNvbW1pdHRlciAiLCAkYXV0aG9yeyRtYXJrfSwgIiAiLCAkdGltZXskbWFya30sICIgKzAxMDBcbiI7CisKKwkjIENvbW1pdCBtZXNzYWdlCisJZGllICJObyBtZXNzYWdlIGRlZmluZWQgZm9yICRjb21taXRcbiIgdW5sZXNzIGRlZmluZWQgJG1lc3NhZ2V7JG1hcmt9OworCW15ICRtZXNzYWdlID0gJG1lc3NhZ2V7JG1hcmt9OworCSRtZXNzYWdlID1+IHMvXG4kLy87ICMgS2lsbCB0cmFpbGluZyBlbXB0eSBsaW5lCisJcHJpbnQgT1VUICJkYXRhICIsIGxlbmd0aCgkbWVzc2FnZSksICJcbiIsICRtZXNzYWdlLCAiXG4iOworCisJIyBQYXJlbnQgYW5kIGFueSBtZXJnZXMKKwlwcmludCBPVVQgImZyb20gOiIsICRyZXZtYXB7JHBhcmVudHskbWFya319LCAiXG4iIGlmIGRlZmluZWQgJHBhcmVudHskbWFya307CisJaWYgKGRlZmluZWQgJG1lcmdlc3skbWFya30pCisJeworCQlmb3JlYWNoIG15ICRtZXJnZSAoQHskbWVyZ2VzeyRtYXJrfX0pCisJCXsKKwkJCXByaW50IE9VVCAibWVyZ2UgOiIsICRyZXZtYXB7JG1lcmdlfSwgIlxuIjsKKwkJfQorCX0KKworCSMgT3V0cHV0IGZpbGUgbWFya3MKKwlwcmludCBPVVQgImRlbGV0ZWFsbFxuIjsgIyBzdGFydCBmcm9tIHNjcmF0Y2gKKwlmb3JlYWNoIG15ICRmaWxlIChzb3J0IGtleXMgJXskZmlsZXN7JG1hcmt9fSkKKwl7CisJCXByaW50IE9VVCAiTSA2NDQgOiIsICR7JGZpbGVzeyRtYXJrfX17JGZpbGV9LCAiICRmaWxlXG4iOworCX0KKwlwcmludCBPVVQgIlxuIjsKK30KKworIyBDcmVhdGUgb25lIGZpbGUgYmxvYgorc3ViIGZpbGVibG9iCit7CisJbXkgKCRmaWxlbmFtZSwgJGNybGZtb2RlLCAkbWFyaykgPSBAXzsKKworCSMgSW1wb3J0IHRoZSBmaWxlCisJcHJpbnQgT1VUICJwcm9ncmVzcyBJbXBvcnRpbmcgJGZpbGVuYW1lXG5ibG9iXG5tYXJrIDokbWFya1xuIjsKKwlvcGVuIEZJTEUsICc8JywgJGZpbGVuYW1lIG9yIGRpZSAiQ2Fubm90IHJlYWQgJGZpbGVuYW1lXG4gIjsKKwliaW5tb2RlIEZJTEU7CisJbXkgKCRzaXplLCAkbXRpbWUpID0gKHN0YXQoRklMRSkpWzcsOV07CisJbXkgJGZpbGU7CisJcmVhZCBGSUxFLCAkZmlsZSwgJHNpemU7CisJY2xvc2UgRklMRTsKKwkkZmlsZSA9fiBzL1xyXG4vXG4vZyBpZiAkY3JsZm1vZGU7CisJcHJpbnQgT1VUICJkYXRhICIsIGxlbmd0aCgkZmlsZSksICJcbiIsICRmaWxlLCAiXG4iOworCisJcmV0dXJuICRtdGltZTsKK30KKworIyBQYXJzZSBhIGtleT12YWx1ZSBwYWlyCitzdWIgcGFyc2VrZXl2YWx1ZXBhaXIKK3sKKz1wb2QKKworPWhlYWQyIEVzY2FwaW5nIHNwZWNpYWwgY2hhcmFjdGVycworCitLZXkgYW5kIHZhbHVlIHN0cmluZ3MgbWF5IGJlIGVuY2xvc2VkIGluIHF1b3RlcywgaW4gd2hpY2ggY2FzZQord2hpdGVzcGFjZSBpbnNpZGUgdGhlIHF1b3RlcyBpcyBwcmVzZXJ2ZWQuIEFkZGl0aW9uYWxseSwgYW4gZXF1YWwKK3NpZ24gbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBrZXkgYnkgcHJlY2VkaW5nIGl0IHdpdGggYSBiYWNrc2xhc2guCitGb3IgZXhhbXBsZToKKworICJrZXkxICI9dmFsdWUxCisga2V5Mj0iIHZhbHVlMiIKKyBrZXlcPTM9dmFsdWUzCisga2V5ND12YWx1ZT00CisgImtleTUiIj12YWx1ZTUKKworSGVyZSB0aGUgZmlyc3Qga2V5IGlzICJrZXkxICIgKG5vdGUgdGhlIHRyYWlsaW5nIHdoaXRlLXNwYWNlKSBhbmQgdGhlCitzZWNvbmQgdmFsdWUgaXMgIiB2YWx1ZTIiIChub3RlIHRoZSBsZWFkaW5nIHdoaXRlLXNwYWNlKS4gVGhlIHRoaXJkCitrZXkgY29udGFpbnMgYW4gZXF1YWwgc2lnbiAia2V5PTMiIGFuZCBzbyBkb2VzIHRoZSBmb3VydGggdmFsdWUsIHdoaWNoCitkb2VzIG5vdCBuZWVkIHRvIGJlIGVzY2FwZWQuIFRoZSBmaWZ0aCBrZXkgY29udGFpbnMgYSB0cmFpbGluZyBxdW90ZSwKK3doaWNoIGRvZXMgbm90IG5lZWQgdG8gYmUgZXNjYXBlZCBzaW5jZSBpdCBpcyBpbnNpZGUgYSBzdXJyb3VuZGluZworcXVvdGUuCisKKz1jdXQKKwlteSAkcGFpciA9IHNoaWZ0OworCisJIyBTZXBhcmF0ZSBrZXkgYW5kIHZhbHVlIGJ5IHRoZSBmaXJzdCBub24tcXVvdGVkIGVxdWFsIHNpZ24KKwlteSAoJGtleSwgJHZhbHVlKTsKKwlpZiAoJHBhaXIgPX4gL14oLipbXlxcXSk9KC4qKSQvKQorCXsKKwkJKCRrZXksICR2YWx1ZSkgPSAoJDEsICQyKQorCX0KKwllbHNlCisJeworCQlkaWUgIlBhcnNlIGVycm9yOiAkcGFpclxuICI7CisJfQorCisJIyBVbnF1b3RlIGFuZCB1bmVzY2FwZSB0aGUga2V5IGFuZCB2YWx1ZSBzZXBhcmF0ZWx5CisJcmV0dXJuICgmdW5lc2NhcGUoJGtleSksICZ1bmVzY2FwZSgkdmFsdWUpKTsKK30KKworIyBVbnF1b3RlIGFuZCB1bmVzY2FwZQorc3ViIHVuZXNjYXBlCit7CisJbXkgJHN0cmluZyA9IHNoaWZ0OworCisJIyBGaXJzdCByZW1vdmUgZW5jbG9zaW5nIHF1b3Rlcy4gQmFja3NsYXNoIGJlZm9yZSB0aGUgdHJhaWxpbmcKKwkjIHF1b3RlIGxlYXZlcyBib3RoLgorCWlmICgkc3RyaW5nID1+IC9eIiguKlteXFxdKSIkLykKKwl7CisJCSRzdHJpbmcgPSAkMTsKKwl9CisKKwkjIFNlY29uZCByZW1vdmUgYW55IGJhY2tzbGFzaGVzIGluc2lkZSB0aGUgdW5xdW90ZWQgc3RyaW5nLgorCSMgRm9yIGxhdGVyOiBIYW5kbGUgc3BlY2lhbCBzZXF1ZW5jZXMgbGlrZSBcdCA/CisJJHN0cmluZyA9fiBzL1xcKC4pLyQxL2c7CisKKwlyZXR1cm4gJHN0cmluZzsKK30KKworX19FTkRfXworCis9cG9kCisKKz1oZWFkMSBFWEFNUExFUworCitCPGltcG9ydC1kaXJlY3Rvcmllcy5wZXJsPiBGPHByb2plY3QuaW1wb3J0PgorCis9aGVhZDEgQVVUSE9SCisKK0NvcHlyaWdodCAyMDA4LTIwMDkgUGV0ZXIgS3JlZnRpbmcgRTxsdD5wZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKz1jdXQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybCBiL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXRhcnMucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NTQzOGUxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9mYXN0LWltcG9ydC9pbXBvcnQtdGFycy5wZXJsCkBAIC0wLDAgKzEsMTg5IEBACisjIS91c3IvYmluL3BlcmwKKworIyMgdGFyIGFyY2hpdmUgZnJvbnRlbmQgZm9yIGdpdC1mYXN0LWltcG9ydAorIyMKKyMjIEZvciBleGFtcGxlOgorIyMKKyMjICBta2RpciBwcm9qZWN0OyBjZCBwcm9qZWN0OyBnaXQgaW5pdAorIyMgIHBlcmwgaW1wb3J0LXRhcnMucGVybCAqLnRhci5iejIKKyMjICBnaXQgd2hhdGNoYW5nZWQgaW1wb3J0LXRhcnMKKyMjCisjIyBVc2UgLS1tZXRhaW5mbyB0byBzcGVjaWZ5IHRoZSBleHRlbnNpb24gZm9yIGEgbWV0YSBkYXRhIGZpbGUsIHdoZXJlCisjIyBpbXBvcnQtdGFycyBjYW4gcmVhZCB0aGUgY29tbWl0IG1lc3NhZ2UgYW5kIG9wdGlvbmFsbHkgYXV0aG9yIGFuZAorIyMgY29tbWl0dGVyIGluZm9ybWF0aW9uLgorIyMKKyMjICBlY2hvICdUaGlzIGlzIHRoZSBjb21taXQgbWVzc2FnZScgPiBteWZpbGUudGFyLmJ6Mi5tc2cKKyMjICBwZXJsIGltcG9ydC10YXJzLnBlcmwgLS1tZXRhaW5mbz1tc2cgbXlmaWxlLnRhci5iejIKKwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKK215ICRtZXRhZXh0ID0gJyc7CisKK2RpZSAidXNhZ2U6IGltcG9ydC10YXJzIFstLW1ldGFpbmZvPWV4dGVuc2lvbl0gKi50YXIue2d6LGJ6Mixsem1hLHh6LFp9XG4iCisJdW5sZXNzIEdldE9wdGlvbnMoJ21ldGFpbmZvPXMnID0+IFwkbWV0YWV4dCkgJiYgQEFSR1Y7CisKK215ICRicmFuY2hfbmFtZSA9ICdpbXBvcnQtdGFycyc7CitteSAkYnJhbmNoX3JlZiA9ICJyZWZzL2hlYWRzLyRicmFuY2hfbmFtZSI7CitteSAkYXV0aG9yX25hbWUgPSAkRU5WeydHSVRfQVVUSE9SX05BTUUnfSB8fCAnVCBBciBDcmVhdG9yJzsKK215ICRhdXRob3JfZW1haWwgPSAkRU5WeydHSVRfQVVUSE9SX0VNQUlMJ30gfHwgJ3RhckBleGFtcGxlLmNvbSc7CitteSAkY29tbWl0dGVyX25hbWUgPSAkRU5WeydHSVRfQ09NTUlUVEVSX05BTUUnfSB8fCBgZ2l0IGNvbmZpZyAtLWdldCB1c2VyLm5hbWVgOworbXkgJGNvbW1pdHRlcl9lbWFpbCA9ICRFTlZ7J0dJVF9DT01NSVRURVJfRU1BSUwnfSB8fCBgZ2l0IGNvbmZpZyAtLWdldCB1c2VyLmVtYWlsYDsKKworY2hvbXAoJGNvbW1pdHRlcl9uYW1lLCAkY29tbWl0dGVyX2VtYWlsKTsKKworb3BlbihGSSwgJ3wtJywgJ2dpdCcsICdmYXN0LWltcG9ydCcsICctLXF1aWV0JykKKwlvciBkaWUgIlVuYWJsZSB0byBzdGFydCBnaXQgZmFzdC1pbXBvcnQ6ICQhXG4iOworZm9yZWFjaCBteSAkdGFyX2ZpbGUgKEBBUkdWKQoreworCW15ICRjb21taXRfdGltZSA9IHRpbWU7CisJJHRhcl9maWxlID1+IG0sKFteL10rKSQsOworCW15ICR0YXJfbmFtZSA9ICQxOworCisJaWYgKCR0YXJfbmFtZSA9fiBzL1wuKHRhclwuZ3p8dGd6KSQvLykgeworCQlvcGVuKEksICctfCcsICdndW56aXAnLCAnLWMnLCAkdGFyX2ZpbGUpCisJCQlvciBkaWUgIlVuYWJsZSB0byBndW56aXAgLWMgJHRhcl9maWxlOiAkIVxuIjsKKwl9IGVsc2lmICgkdGFyX25hbWUgPX4gcy9cLih0YXJcLmJ6Mnx0YnoyKSQvLykgeworCQlvcGVuKEksICctfCcsICdidW56aXAyJywgJy1jJywgJHRhcl9maWxlKQorCQkJb3IgZGllICJVbmFibGUgdG8gYnVuemlwMiAtYyAkdGFyX2ZpbGU6ICQhXG4iOworCX0gZWxzaWYgKCR0YXJfbmFtZSA9fiBzL1wudGFyXC5aJC8vKSB7CisJCW9wZW4oSSwgJy18JywgJ3VuY29tcHJlc3MnLCAnLWMnLCAkdGFyX2ZpbGUpCisJCQlvciBkaWUgIlVuYWJsZSB0byB1bmNvbXByZXNzIC1jICR0YXJfZmlsZTogJCFcbiI7CisJfSBlbHNpZiAoJHRhcl9uYW1lID1+IHMvXC4odGFyXC4obHptYXx4eil8KHRsenx0eHopKSQvLykgeworCQlvcGVuKEksICctfCcsICd4eicsICctZGMnLCAkdGFyX2ZpbGUpCisJCQlvciBkaWUgIlVuYWJsZSB0byB4eiAtZGMgJHRhcl9maWxlOiAkIVxuIjsKKwl9IGVsc2lmICgkdGFyX25hbWUgPX4gcy9cLnRhciQvLykgeworCQlvcGVuKEksICR0YXJfZmlsZSkgb3IgZGllICJVbmFibGUgdG8gb3BlbiAkdGFyX2ZpbGU6ICQhXG4iOworCX0gZWxzZSB7CisJCWRpZSAiVW5yZWNvZ25pemVkIGNvbXByZXNzaW9uIGZvcm1hdDogJHRhcl9maWxlXG4iOworCX0KKworCW15ICRhdXRob3JfdGltZSA9IDA7CisJbXkgJG5leHRfbWFyayA9IDE7CisJbXkgJGhhdmVfdG9wX2RpciA9IDE7CisJbXkgKCR0b3BfZGlyLCAlZmlsZXMpOworCisJd2hpbGUgKHJlYWQoSSwgJF8sIDUxMikgPT0gNTEyKSB7CisJCW15ICgkbmFtZSwgJG1vZGUsICR1aWQsICRnaWQsICRzaXplLCAkbXRpbWUsCisJCQkkY2hrc3VtLCAkdHlwZWZsYWcsICRsaW5rbmFtZSwgJG1hZ2ljLAorCQkJJHZlcnNpb24sICR1bmFtZSwgJGduYW1lLCAkZGV2bWFqb3IsICRkZXZtaW5vciwKKwkJCSRwcmVmaXgpID0gdW5wYWNrICdaMTAwIFo4IFo4IFo4IFoxMiBaMTIKKwkJCVo4IFoxIFoxMDAgWjYKKwkJCVoyIFozMiBaMzIgWjggWjggWionLCAkXzsKKwkJbGFzdCB1bmxlc3MgbGVuZ3RoKCRuYW1lKTsKKwkJaWYgKCRuYW1lIGVxICcuLy4vQExvbmdMaW5rJykgeworCQkJIyBHTlUgdGFyIGV4dGVuc2lvbgorCQkJaWYgKHJlYWQoSSwgJF8sIDUxMikgIT0gNTEyKSB7CisJCQkJZGllICgnU2hvcnQgYXJjaGl2ZScpOworCQkJfQorCQkJJG5hbWUgPSB1bnBhY2sgJ1oyNTcnLCAkXzsKKwkJCW5leHQgdW5sZXNzICRuYW1lOworCisJCQlteSAkZHVtbXk7CisJCQlpZiAocmVhZChJLCAkXywgNTEyKSAhPSA1MTIpIHsKKwkJCQlkaWUgKCdTaG9ydCBhcmNoaXZlJyk7CisJCQl9CisJCQkoJGR1bW15LCAkbW9kZSwgJHVpZCwgJGdpZCwgJHNpemUsICRtdGltZSwKKwkJCSRjaGtzdW0sICR0eXBlZmxhZywgJGxpbmtuYW1lLCAkbWFnaWMsCisJCQkkdmVyc2lvbiwgJHVuYW1lLCAkZ25hbWUsICRkZXZtYWpvciwgJGRldm1pbm9yLAorCQkJJHByZWZpeCkgPSB1bnBhY2sgJ1oxMDAgWjggWjggWjggWjEyIFoxMgorCQkJWjggWjEgWjEwMCBaNgorCQkJWjIgWjMyIFozMiBaOCBaOCBaKicsICRfOworCQl9CisJCW5leHQgaWYgJG5hbWUgPX4gbXsvXHp9OworCQkkbW9kZSA9IG9jdCAkbW9kZTsKKwkJJHNpemUgPSBvY3QgJHNpemU7CisJCSRtdGltZSA9IG9jdCAkbXRpbWU7CisJCW5leHQgaWYgJHR5cGVmbGFnID09IDU7ICMgZGlyZWN0b3J5CisKKwkJcHJpbnQgRkkgImJsb2JcbiIsICJtYXJrIDokbmV4dF9tYXJrXG4iOworCQlpZiAoJHR5cGVmbGFnID09IDIpIHsgIyBzeW1ib2xpYyBsaW5rCisJCQlwcmludCBGSSAiZGF0YSAiLCBsZW5ndGgoJGxpbmtuYW1lKSwgIlxuIiwgJGxpbmtuYW1lOworCQkJJG1vZGUgPSAwMTIwMDAwOworCQl9IGVsc2UgeworCQkJcHJpbnQgRkkgImRhdGEgJHNpemVcbiI7CisJCQl3aGlsZSAoJHNpemUgPiAwICYmIHJlYWQoSSwgJF8sIDUxMikgPT0gNTEyKSB7CisJCQkJcHJpbnQgRkkgc3Vic3RyKCRfLCAwLCAkc2l6ZSk7CisJCQkJJHNpemUgLT0gNTEyOworCQkJfQorCQl9CisJCXByaW50IEZJICJcbiI7CisKKwkJbXkgJHBhdGg7CisJCWlmICgkcHJlZml4KSB7CisJCQkkcGF0aCA9ICIkcHJlZml4LyRuYW1lIjsKKwkJfSBlbHNlIHsKKwkJCSRwYXRoID0gIiRuYW1lIjsKKwkJfQorCQkkZmlsZXN7JHBhdGh9ID0gWyRuZXh0X21hcmsrKywgJG1vZGVdOworCisJCSRhdXRob3JfdGltZSA9ICRtdGltZSBpZiAkbXRpbWUgPiAkYXV0aG9yX3RpbWU7CisJCSRwYXRoID1+IG0sXihbXi9dKykvLDsKKwkJJHRvcF9kaXIgPSAkMSB1bmxlc3MgJHRvcF9kaXI7CisJCSRoYXZlX3RvcF9kaXIgPSAwIGlmICR0b3BfZGlyIG5lICQxOworCX0KKworCW15ICRjb21taXRfbXNnID0gIkltcG9ydGVkIGZyb20gJHRhcl9maWxlLiI7CisJbXkgJHRoaXNfY29tbWl0dGVyX25hbWUgPSAkY29tbWl0dGVyX25hbWU7CisJbXkgJHRoaXNfY29tbWl0dGVyX2VtYWlsID0gJGNvbW1pdHRlcl9lbWFpbDsKKwlteSAkdGhpc19hdXRob3JfbmFtZSA9ICRhdXRob3JfbmFtZTsKKwlteSAkdGhpc19hdXRob3JfZW1haWwgPSAkYXV0aG9yX2VtYWlsOworCWlmICgkbWV0YWV4dCBuZSAnJykgeworCQkjIE9wdGlvbmFsbHkgcmVhZCBhIGNvbW1pdCBtZXNzYWdlIGZyb20gPGZpbGVuYW1lLnRhcj4ubXNnCisJCSMgQWRkIGEgbGluZSBvbiB0aGUgZm9ybSAiQ29tbWl0dGVyOiBuYW1lIDxlLW1haWw+IiB0byBvdmVycmlkZQorCQkjIHRoZSBjb21taXR0ZXIgYW5kICJBdXRob3I6IG5hbWUgPGUtbWFpbD4iIHRvIG92ZXJyaWRlIHRoZQorCQkjIGF1dGhvciBmb3IgdGhpcyB0YXIgYmFsbC4KKwkJaWYgKG9wZW4gTVNHLCAnPCcsICIke3Rhcl9maWxlfS4ke21ldGFleHR9IikgeworCQkJbXkgJGhlYWRlcl9kb25lID0gMDsKKwkJCSRjb21taXRfbXNnID0gJyc7CisJCQl3aGlsZSAoPE1TRz4pIHsKKwkJCQlpZiAoISRoZWFkZXJfZG9uZSAmJiAvXkNvbW1pdHRlcjpccysoW148Pl0qKVxzKzwoLiopPlxzKiQvaSkgeworCQkJCQkkdGhpc19jb21taXR0ZXJfbmFtZSA9ICQxOworCQkJCQkkdGhpc19jb21taXR0ZXJfZW1haWwgPSAkMjsKKwkJCQl9IGVsc2lmICghJGhlYWRlcl9kb25lICYmIC9eQXV0aG9yOlxzKyhbXjw+XSopXHMrPCguKik+XHMqJC9pKSB7CisJCQkJCSR0aGlzX2F1dGhvcl9uYW1lID0gJDE7CisJCQkJCSR0aGlzX2F1dGhvcl9lbWFpbCA9ICQyOworCQkJCX0gZWxzaWYgKCEkaGVhZGVyX2RvbmUgJiYgL14kLykgeyAjIGVtcHR5IGxpbmUgZW5kcyBoZWFkZXIuCisJCQkJCSRoZWFkZXJfZG9uZSA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJJGNvbW1pdF9tc2cgLj0gJF87CisJCQkJCSRoZWFkZXJfZG9uZSA9IDE7CisJCQkJfQorCQkJfQorCQkJY2xvc2UgTVNHOworCQl9CisJfQorCisJcHJpbnQgRkkgPDxFT0Y7Citjb21taXQgJGJyYW5jaF9yZWYKK2F1dGhvciAkdGhpc19hdXRob3JfbmFtZSA8JHRoaXNfYXV0aG9yX2VtYWlsPiAkYXV0aG9yX3RpbWUgKzAwMDAKK2NvbW1pdHRlciAkdGhpc19jb21taXR0ZXJfbmFtZSA8JHRoaXNfY29tbWl0dGVyX2VtYWlsPiAkY29tbWl0X3RpbWUgKzAwMDAKK2RhdGEgPDxFTkRfT0ZfQ09NTUlUX01FU1NBR0UKKyRjb21taXRfbXNnCitFTkRfT0ZfQ09NTUlUX01FU1NBR0UKKworZGVsZXRlYWxsCitFT0YKKworCWZvcmVhY2ggbXkgJHBhdGggKGtleXMgJWZpbGVzKQorCXsKKwkJbXkgKCRtYXJrLCAkbW9kZSkgPSBAeyRmaWxlc3skcGF0aH19OworCQkkcGF0aCA9fiBzLF4oW14vXSspLywsIGlmICRoYXZlX3RvcF9kaXI7CisJCSRtb2RlID0gJG1vZGUgJiAwMTExID8gMDc1NSA6IDA2NDQgdW5sZXNzICRtb2RlID09IDAxMjAwMDA7CisJCXByaW50ZiBGSSAiTSAlbyA6JWkgJXNcbiIsICRtb2RlLCAkbWFyaywgJHBhdGg7CisJfQorCXByaW50IEZJICJcbiI7CisKKwlwcmludCBGSSA8PEVPRjsKK3RhZyAkdGFyX25hbWUKK2Zyb20gJGJyYW5jaF9yZWYKK3RhZ2dlciAkYXV0aG9yX25hbWUgPCRhdXRob3JfZW1haWw+ICRhdXRob3JfdGltZSArMDAwMAorZGF0YSA8PEVORF9PRl9UQUdfTUVTU0FHRQorUGFja2FnZSAkdGFyX25hbWUKK0VORF9PRl9UQUdfTUVTU0FHRQorCitFT0YKKworCWNsb3NlIEk7Cit9CitjbG9zZSBGSTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmFzdC1pbXBvcnQvaW1wb3J0LXppcHMucHkgYi9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC16aXBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxMmMyOTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2Zhc3QtaW1wb3J0L2ltcG9ydC16aXBzLnB5CkBAIC0wLDAgKzEsNzggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIyB6aXAgYXJjaGl2ZSBmcm9udGVuZCBmb3IgZ2l0LWZhc3QtaW1wb3J0CisjIworIyMgRm9yIGV4YW1wbGU6CisjIworIyMgIG1rZGlyIHByb2plY3Q7IGNkIHByb2plY3Q7IGdpdCBpbml0CisjIyAgcHl0aG9uIGltcG9ydC16aXBzLnB5ICouemlwCisjIyAgZ2l0IGxvZyAtLXN0YXQgaW1wb3J0LXppcHMKKworZnJvbSBvcyBpbXBvcnQgcG9wZW4sIHBhdGgKK2Zyb20gc3lzIGltcG9ydCBhcmd2LCBleGl0LCBoZXh2ZXJzaW9uLCBzdGRlcnIKK2Zyb20gdGltZSBpbXBvcnQgbWt0aW1lCitmcm9tIHppcGZpbGUgaW1wb3J0IFppcEZpbGUKKworaWYgaGV4dmVyc2lvbiA8IDB4MDEwNjAwMDA6CisgICAgIyBUaGUgbGltaXRlciBpcyB0aGUgemlwZmlsZSBtb2R1bGUKKyAgICBzdGRlcnIud3JpdGUoImltcG9ydC16aXBzLnB5OiByZXF1aXJlcyBQeXRob24gMS42LjAgb3IgbGF0ZXIuXG4iKQorICAgIGV4aXQoMSkKKworaWYgbGVuKGFyZ3YpIDwgMjoKKyAgICBwcmludCAndXNhZ2U6JywgYXJndlswXSwgJzx6aXBmaWxlPi4uLicKKyAgICBleGl0KDEpCisKK2JyYW5jaF9yZWYgPSAncmVmcy9oZWFkcy9pbXBvcnQtemlwcycKK2NvbW1pdHRlcl9uYW1lID0gJ1ogSXAgQ3JlYXRvcicKK2NvbW1pdHRlcl9lbWFpbCA9ICd6aXBAZXhhbXBsZS5jb20nCisKK2Zhc3RfaW1wb3J0ID0gcG9wZW4oJ2dpdCBmYXN0LWltcG9ydCAtLXF1aWV0JywgJ3cnKQorZGVmIHByaW50bGluZXMobGlzdCk6CisgICAgZm9yIHN0ciBpbiBsaXN0OgorICAgICAgICBmYXN0X2ltcG9ydC53cml0ZShzdHIgKyAiXG4iKQorCitmb3IgemlwZmlsZSBpbiBhcmd2WzE6XToKKyAgICBjb21taXRfdGltZSA9IDAKKyAgICBuZXh0X21hcmsgPSAxCisgICAgY29tbW9uX3ByZWZpeCA9IE5vbmUKKyAgICBtYXJrID0gZGljdCgpCisKKyAgICB6aXAgPSBaaXBGaWxlKHppcGZpbGUsICdyJykKKyAgICBmb3IgbmFtZSBpbiB6aXAubmFtZWxpc3QoKToKKyAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLycpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaW5mbyA9IHppcC5nZXRpbmZvKG5hbWUpCisKKyAgICAgICAgaWYgY29tbWl0X3RpbWUgPCBpbmZvLmRhdGVfdGltZToKKyAgICAgICAgICAgIGNvbW1pdF90aW1lID0gaW5mby5kYXRlX3RpbWUKKyAgICAgICAgaWYgY29tbW9uX3ByZWZpeCA9PSBOb25lOgorICAgICAgICAgICAgY29tbW9uX3ByZWZpeCA9IG5hbWVbOm5hbWUucmZpbmQoJy8nKSArIDFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aGlsZSBub3QgbmFtZS5zdGFydHN3aXRoKGNvbW1vbl9wcmVmaXgpOgorICAgICAgICAgICAgICAgIGxhc3Rfc2xhc2ggPSBjb21tb25fcHJlZml4WzotMV0ucmZpbmQoJy8nKSArIDEKKyAgICAgICAgICAgICAgICBjb21tb25fcHJlZml4ID0gY29tbW9uX3ByZWZpeFs6bGFzdF9zbGFzaF0KKworICAgICAgICBtYXJrW25hbWVdID0gJzonICsgc3RyKG5leHRfbWFyaykKKyAgICAgICAgbmV4dF9tYXJrICs9IDEKKworICAgICAgICBwcmludGxpbmVzKCgnYmxvYicsICdtYXJrICcgKyBtYXJrW25hbWVdLCBcCisgICAgICAgICAgICAgICAgICAgICdkYXRhICcgKyBzdHIoaW5mby5maWxlX3NpemUpKSkKKyAgICAgICAgZmFzdF9pbXBvcnQud3JpdGUoemlwLnJlYWQobmFtZSkgKyAiXG4iKQorCisgICAgY29tbWl0dGVyID0gY29tbWl0dGVyX25hbWUgKyAnIDwnICsgY29tbWl0dGVyX2VtYWlsICsgJz4gJWQgKzAwMDAnICUgXAorICAgICAgICBta3RpbWUoY29tbWl0X3RpbWUgKyAoMCwgMCwgMCkpCisKKyAgICBwcmludGxpbmVzKCgnY29tbWl0ICcgKyBicmFuY2hfcmVmLCAnY29tbWl0dGVyICcgKyBjb21taXR0ZXIsIFwKKyAgICAgICAgJ2RhdGEgPDxFT00nLCAnSW1wb3J0ZWQgZnJvbSAnICsgemlwZmlsZSArICcuJywgJ0VPTScsIFwKKyAgICAgICAgJycsICdkZWxldGVhbGwnKSkKKworICAgIGZvciBuYW1lIGluIG1hcmsua2V5cygpOgorICAgICAgICBmYXN0X2ltcG9ydC53cml0ZSgnTSAxMDA2NDQgJyArIG1hcmtbbmFtZV0gKyAnICcgKworICAgICAgICAgICAgbmFtZVtsZW4oY29tbW9uX3ByZWZpeCk6XSArICJcbiIpCisKKyAgICBwcmludGxpbmVzKCgnJywgICd0YWcgJyArIHBhdGguYmFzZW5hbWUoemlwZmlsZSksIFwKKyAgICAgICAgJ2Zyb20gJyArIGJyYW5jaF9yZWYsICd0YWdnZXIgJyArIGNvbW1pdHRlciwgXAorICAgICAgICAnZGF0YSA8PEVPTScsICdQYWNrYWdlICcgKyB6aXBmaWxlLCAnRU9NJywgJycpKQorCitpZiBmYXN0X2ltcG9ydC5jbG9zZSgpOgorICAgIGV4aXQoMSkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0LWp1bXAvUkVBRE1FIGIvY29udHJpYi9naXQtanVtcC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlYmMzMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ2l0LWp1bXAvUkVBRE1FCkBAIC0wLDAgKzEsOTIgQEAKK2dpdC1qdW1wCis9PT09PT09PQorCitHaXQtanVtcCBpcyBhIHNjcmlwdCBmb3IgaGVscGluZyB5b3UganVtcCB0byAiaW50ZXJlc3RpbmciIHBhcnRzIG9mIHlvdXIKK3Byb2plY3QgaW4geW91ciBlZGl0b3IuIEl0IHdvcmtzIGJ5IG91dHB1dHRpbmcgYSBzZXQgb2YgaW50ZXJlc3RpbmcKK3Nwb3RzIGluIHRoZSAicXVpY2tmaXgiIGZvcm1hdCwgd2hpY2ggZWRpdG9ycyBsaWtlIHZpbSBjYW4gdXNlIGFzIGEKK3F1ZXVlIG9mIHBsYWNlcyB0byB2aXNpdCAodGhpcyBmZWF0dXJlIGlzIHVzdWFsbHkgdXNlZCB0byBqdW1wIHRvIGVycm9ycworcHJvZHVjZWQgYnkgYSBjb21waWxlcikuIEZvciBleGFtcGxlLCBnaXZlbiBhIGRpZmYgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RpZmYgLS1naXQgYS9mb28uYyBiL2Zvby5jCitpbmRleCBhNjU1NTQwLi41YTU5MDQ0IDEwMDY0NAorLS0tIGEvZm9vLmMKKysrKyBiL2Zvby5jCitAQCAtMSwzICsxLDMgQEAKKyBpbnQgbWFpbih2b2lkKSB7CistICBwcmludGYoImhlbGxvIHdvcmQhXG4iKTsKKysgIHByaW50ZigiaGVsbG8gd29ybGQhXG4iKTsKKyB9CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnaXQtanVtcCB3aWxsIGZlZWQgdGhpcyB0byB0aGUgZWRpdG9yOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZm9vLmM6MjogcHJpbnRmKCJoZWxsbyB3b3JkIVxuIik7CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPYnZpb3VzbHkgdGhpcyB0cml2aWFsIGNhc2UgaXNuJ3QgdGhhdCBpbnRlcmVzdGluZzsgeW91IGNvdWxkIGp1c3Qgb3BlbgorYGZvby5jYCB5b3Vyc2VsZi4gQnV0IHdoZW4geW91IGhhdmUgbWFueSBjaGFuZ2VzIHNjYXR0ZXJlZCBhY3Jvc3MgYQorcHJvamVjdCwgeW91IGNhbiB1c2UgdGhlIGVkaXRvcidzIHN1cHBvcnQgdG8gImp1bXAiIGZyb20gcG9pbnQgdG8gcG9pbnQuCisKK0dpdC1qdW1wIGNhbiBnZW5lcmF0ZSB0aHJlZSB0eXBlcyBvZiBpbnRlcmVzdGluZyBsaXN0czoKKworICAxLiBUaGUgYmVnaW5uaW5nIG9mIGFueSBkaWZmIGh1bmtzLgorCisgIDIuIFRoZSBiZWdpbm5pbmcgb2YgYW55IG1lcmdlIGNvbmZsaWN0IG1hcmtlcnMuCisKKyAgMy4gQW55IGdyZXAgbWF0Y2hlcy4KKworCitVc2luZyBnaXQtanVtcAorLS0tLS0tLS0tLS0tLS0KKworVG8gdXNlIGl0LCBqdXN0IGRyb3AgZ2l0LWp1bXAgaW4geW91ciBQQVRILCBhbmQgdGhlbiBpbnZva2UgaXQgbGlrZQordGhpczoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMganVtcCB0byBjaGFuZ2VzIG5vdCB5ZXQgc3RhZ2VkIGZvciBjb21taXQKK2dpdCBqdW1wIGRpZmYKKworIyBqdW1wIHRvIGNoYW5nZXMgdGhhdCBhcmUgc3RhZ2VkIGZvciBjb21taXQ7IHlvdSBjYW4gZ2l2ZQorIyBhcmJpdHJhcnkgZGlmZiBvcHRpb25zCitnaXQganVtcCBkaWZmIC0tY2FjaGVkCisKKyMganVtcCB0byBtZXJnZSBjb25mbGljdHMKK2dpdCBqdW1wIG1lcmdlCisKKyMganVtcCB0byBhbGwgaW5zdGFuY2VzIG9mIGZvb19iYXIKK2dpdCBqdW1wIGdyZXAgZm9vX2JhcgorCisjIHNhbWUgYXMgYWJvdmUsIGJ1dCBjYXNlLWluc2Vuc2l0aXZlOyB5b3UgY2FuIGdpdmUKKyMgYXJiaXRyYXJ5IGdyZXAgb3B0aW9ucworZ2l0IGp1bXAgZ3JlcCAtaSBmb29fYmFyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1JlbGF0ZWQgUHJvZ3JhbXMKKy0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiBhY2NvbXBsaXNoIHNvbWUgb2YgdGhlIHNhbWUgdGhpbmdzIHdpdGggaW5kaXZpZHVhbCB0b29scy4gRm9yCitleGFtcGxlLCB5b3UgY2FuIHVzZSBgZ2l0IG1lcmdldG9vbGAgdG8gc3RhcnQgdmltZGlmZiBvbiBlYWNoIHVubWVyZ2VkCitmaWxlLiBgZ2l0IGp1bXAgbWVyZ2VgIGlzIGZvciB0aGUgdmltLXdpZWxkaW5nIGx1ZGRpdGUgd2hvIGp1c3Qgd2FudHMgdG8KK2p1bXAgc3RyYWlnaHQgdG8gdGhlIGNvbmZsaWN0IHRleHQgd2l0aCBubyBmYW5mYXJlLgorCitBcyBvZiBnaXQgdjEuNy4yLCBgZ2l0IGdyZXBgIGtub3dzIHRoZSBgLS1vcGVuLWZpbGVzLWluLXBhZ2VyYCBvcHRpb24sCit3aGljaCBkb2VzIHNvbWV0aGluZyBzaW1pbGFyIHRvIGBnaXQganVtcCBncmVwYC4gSG93ZXZlciwgaXQgaXMgbGltaXRlZAordG8gcG9zaXRpb25pbmcgdGhlIGN1cnNvciB0byB0aGUgY29ycmVjdCBsaW5lIGluIG9ubHkgdGhlIGZpcnN0IGZpbGUsCitsZWF2aW5nIHlvdSB0byBsb2NhdGUgc3Vic2VxdWVudCBoaXRzIGluIHRoYXQgZmlsZSBvciBvdGhlciBmaWxlcyB1c2luZwordGhlIGVkaXRvciBvciBwYWdlci4gQnkgY29udHJhc3QsIGdpdC1qdW1wIHByb3ZpZGVzIHRoZSBlZGl0b3Igd2l0aCBhCitjb21wbGV0ZSBsaXN0IG9mIGZpbGVzIGFuZCBsaW5lIG51bWJlcnMgZm9yIGVhY2ggbWF0Y2guCisKKworTGltaXRhdGlvbnMKKy0tLS0tLS0tLS0tCisKK1RoaXMgc2NyaXB0cyB3YXMgd3JpdHRlbiBhbmQgdGVzdGVkIHdpdGggdmltLiBHaXZlbiB0aGF0IHRoZSBxdWlja2ZpeAorZm9ybWF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgZ2NjIHByb2R1Y2VzLCBJIGV4cGVjdCBlbWFjcyB1c2VycyBoYXZlIGEKK3NpbWlsYXIgZmVhdHVyZSBmb3IgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGxpc3QsIGJ1dCBJIGtub3cgbm90aGluZyBhYm91dAoraG93IHRvIGFjdGl2YXRlIGl0LgorCitUaGUgc2hlbGwgc25pcHBldHMgdG8gZ2VuZXJhdGUgdGhlIHF1aWNrZml4IGxpbmVzIHdpbGwgYWxtb3N0IGNlcnRhaW5seQorY2hva2Ugb24gZmlsZW5hbWVzIHdpdGggZXhvdGljIGNoYXJhY3RlcnMgKGxpa2UgbmV3bGluZXMpLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9naXQtanVtcC9naXQtanVtcCBiL2NvbnRyaWIvZ2l0LWp1bXAvZ2l0LWp1bXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGM5MGNkNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ2l0LWp1bXAvZ2l0LWp1bXAKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisKK3VzYWdlKCkgeworCWNhdCA8PFxFT0YKK3VzYWdlOiBnaXQganVtcCA8bW9kZT4gWzxhcmdzPl0KKworSnVtcCB0byBpbnRlcmVzdGluZyBlbGVtZW50cyBpbiBhbiBlZGl0b3IuCitUaGUgPG1vZGU+IHBhcmFtZXRlciBpcyBvbmUgb2Y6CisKK2RpZmY6IGVsZW1lbnRzIGFyZSBkaWZmIGh1bmtzLiBBcmd1bWVudHMgYXJlIGdpdmVuIHRvIGRpZmYuCisKK21lcmdlOiBlbGVtZW50cyBhcmUgbWVyZ2UgY29uZmxpY3RzLiBBcmd1bWVudHMgYXJlIGlnbm9yZWQuCisKK2dyZXA6IGVsZW1lbnRzIGFyZSBncmVwIGhpdHMuIEFyZ3VtZW50cyBhcmUgZ2l2ZW4gdG8gZ3JlcC4KK0VPRgorfQorCitvcGVuX2VkaXRvcigpIHsKKwllZGl0b3I9YGdpdCB2YXIgR0lUX0VESVRPUmAKKwlldmFsICIkZWRpdG9yIC1xIFwkMSIKK30KKworbW9kZV9kaWZmKCkgeworCWdpdCBkaWZmIC0tbm8tcHJlZml4IC0tcmVsYXRpdmUgIiRAIiB8CisJcGVybCAtbmUgJworCWlmIChte15cK1wrXCsgKC4qKX0pIHsgJGZpbGUgPSAkMTsgbmV4dCB9CisJZGVmaW5lZCgkZmlsZSkgb3IgbmV4dDsKKwlpZiAobS9eQEAgLipcKyhcZCspLykgeyAkbGluZSA9ICQxOyBuZXh0IH0KKwlkZWZpbmVkKCRsaW5lKSBvciBuZXh0OworCWlmICgvXiAvKSB7ICRsaW5lKys7IG5leHQgfQorCWlmICgvXlstK11ccyooLiopLykgeworCQlwcmludCAiJGZpbGU6JGxpbmU6ICQxXG4iOworCQkkbGluZSA9IHVuZGVmOworCX0KKwknCit9CisKK21vZGVfbWVyZ2UoKSB7CisJZ2l0IGxzLWZpbGVzIC11IHwKKwlwZXJsIC1wZSAncy9eLio/XHQvLycgfAorCXNvcnQgLXUgfAorCXdoaWxlIElGUz0gcmVhZCBmbjsgZG8KKwkJZ3JlcCAtSG4gJ148PDw8PDw8JyAiJGZuIgorCWRvbmUKK30KKworIyBHcmVwIC1uIGdlbmVyYXRlcyBuaWNlIHF1aWNrZml4LWxvb2tpbmcgbGluZXMgYnkgaXRzZWxmLAorIyBidXQgbGV0J3MgY2xlYW4gdXAgZXh0cmEgd2hpdGVzcGFjZSwgc28gdGhleSBsb29rIGJldHRlciBpZiB0aGUKKyMgZWRpdG9yIHNob3dzIHRoZW0gdG8gdXMgaW4gdGhlIHN0YXR1cyBiYXIuCittb2RlX2dyZXAoKSB7CisJZ2l0IGdyZXAgLW4gIiRAIiB8CisJcGVybCAtcGUgJworCXMvWyBcdF0rLyAvZzsKKwlzL14gKi8vOworCScKK30KKworaWYgdGVzdCAkIyAtbHQgMTsgdGhlbgorCXVzYWdlID4mMgorCWV4aXQgMQorZmkKK21vZGU9JDE7IHNoaWZ0CisKK3RyYXAgJ3JtIC1mICIkdG1wIicgMCAxIDIgMyAxNQordG1wPWBta3RlbXAgLXQgZ2l0LWp1bXAuWFhYWFhYYCB8fCBleGl0IDEKK3R5cGUgIm1vZGVfJG1vZGUiID4vZGV2L251bGwgMj4mMSB8fCB7IHVzYWdlID4mMjsgZXhpdCAxOyB9CisibW9kZV8kbW9kZSIgIiRAIiA+IiR0bXAiCit0ZXN0IC1zICIkdG1wIiB8fCBleGl0IDAKK29wZW5fZWRpdG9yICIkdG1wIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9naXQtcmVzdXJyZWN0LnNoIGIvY29udHJpYi9naXQtcmVzdXJyZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ3ZTk3YmIKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dpdC1yZXN1cnJlY3Quc2gKQEAgLTAsMCArMSwxODIgQEAKKyMhL2Jpbi9zaAorCitVU0FHRT0iWy1hXSBbLXJdIFstbV0gWy10XSBbLW5dIFstYiA8bmV3bmFtZT5dIDxuYW1lPiIKK0xPTkdfVVNBR0U9ImdpdC1yZXN1cnJlY3QgYXR0ZW1wdHMgdG8gZmluZCB0cmFjZXMgb2YgYSBicmFuY2ggdGlwCitjYWxsZWQgPG5hbWU+LCBhbmQgdHJpZXMgdG8gcmVzdXJyZWN0IGl0LiAgQ3VycmVudGx5LCB0aGUgcmVmbG9nIGlzCitzZWFyY2hlZCBmb3IgY2hlY2tvdXQgbWVzc2FnZXMsIGFuZCB3aXRoIC1yIGFsc28gbWVyZ2UgbWVzc2FnZXMuICBXaXRoCistbSBhbmQgLXQsIHRoZSBoaXN0b3J5IG9mIGFsbCByZWZzIGlzIHNjYW5uZWQgZm9yIE1lcmdlIDxuYW1lPiBpbnRvCitvdGhlci9NZXJnZSA8b3RoZXI+IGludG8gPG5hbWU+IChyZXNwZWN0aXZlbHkpIGNvbW1pdCBzdWJqZWN0cywgd2hpY2gKK2lzIHJhdGhlciBzbG93IGJ1dCBhbGxvd3MgeW91IHRvIHJlc3VycmVjdCBvdGhlciBwZW9wbGUncyB0b3BpYworYnJhbmNoZXMuIgorCitPUFRJT05TX0tFRVBEQVNIREFTSD0KK09QVElPTlNfU1RVQ0tMT05HPQorT1BUSU9OU19TUEVDPSJcCitnaXQgcmVzdXJyZWN0ICRVU0FHRQorLS0KK2IsYnJhbmNoPSAgICAgICAgICAgIHNhdmUgYnJhbmNoIGFzIDxuZXduYW1lPiBpbnN0ZWFkIG9mIDxuYW1lPgorYSxhbGwgICAgICAgICAgICAgICAgc2FtZSBhcyAtbCAtciAtbSAtdAorayxrZWVwLWdvaW5nICAgICAgICAgZnVsbCByZXYtbGlzdCBzY2FuIChpbnN0ZWFkIG9mIGZpcnN0IG1hdGNoKQorbCxyZWZsb2cgICAgICAgICAgICAgc2NhbiByZWZsb2cgZm9yIGNoZWNrb3V0cyAoZW5hYmxlZCBieSBkZWZhdWx0KQorcixyZWZsb2ctbWVyZ2VzICAgICAgc2NhbiBmb3IgbWVyZ2VzIHJlY29yZGVkIGluIHJlZmxvZworbSxtZXJnZXMgICAgICAgICAgICAgc2NhbiBmb3IgbWVyZ2VzIGludG8gb3RoZXIgYnJhbmNoZXMgKHNsb3cpCit0LG1lcmdlLXRhcmdldHMgICAgICBzY2FuIGZvciBtZXJnZXMgb2Ygb3RoZXIgYnJhbmNoZXMgaW50byA8bmFtZT4KK24sZHJ5LXJ1biAgICAgICAgICAgIGRvbid0IHJlY3JlYXRlIHRoZSBicmFuY2giCisKKy4gZ2l0LXNoLXNldHVwCisKK3NlYXJjaF9yZWZsb2cgKCkgeworICAgICAgICBzZWQgLW5lICdzfl5cKFteIF0qXCkgLipcdGNoZWNrb3V0OiBtb3ZpbmcgZnJvbSAnIiQxIicgLip+XDF+cCcgXAorICAgICAgICAgICAgICAgIDwgIiRHSVRfRElSIi9sb2dzL0hFQUQKK30KKworc2VhcmNoX3JlZmxvZ19tZXJnZXMgKCkgeworCWdpdCByZXYtcGFyc2UgJCgKKwkJc2VkIC1uZSAnc35eW14gXSogXChbXiBdKlwpIC4qXHRtZXJnZSAnIiQxIic6Lip+XDFeMn5wJyBcCisJCQk8ICIkR0lUX0RJUiIvbG9ncy9IRUFECisJKQorfQorCitfeDQwPSJbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdIgorX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKKworc2VhcmNoX21lcmdlcyAoKSB7CisgICAgICAgIGdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Ik1lcmdlIGJyYW5jaCAnJDEnIiBcCisgICAgICAgICAgICAgICAgLS1wcmV0dHk9dGZvcm1hdDoiJVAgJXMiIHwKKyAgICAgICAgc2VkIC1uZSAiL14kX3g0MCBcKCRfeDQwXCkgTWVyZ2UgLiovIHtzLy9cMS9wOyRlYXJseV9leGl0fSIKK30KKworc2VhcmNoX21lcmdlX3RhcmdldHMgKCkgeworCWdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9Ik1lcmdlIGJyYW5jaCAnW14nXSonIGludG8gJGJyYW5jaFwkIiBcCisJCS0tcHJldHR5PXRmb3JtYXQ6IiVIICVzIiAtLWFsbCB8CisJc2VkIC1uZSAiL15cKCRfeDQwXCkgTWVyZ2UgLiovIHtzLy9cMS9wOyRlYXJseV9leGl0fSAiCit9CisKK2RyeV9ydW49CitlYXJseV9leGl0PXEKK3NjYW5fcmVmbG9nPXQKK3NjYW5fcmVmbG9nX21lcmdlcz0KK3NjYW5fbWVyZ2VzPQorc2Nhbl9tZXJnZV90YXJnZXRzPQorbmV3X25hbWU9CisKK3doaWxlIHRlc3QgIiQjIiAhPSAwOyBkbworCWNhc2UgIiQxIiBpbgorCSAgICAtYnwtLWJyYW5jaCkKKwkJc2hpZnQKKwkJbmV3X25hbWU9IiQxIgorCQk7OworCSAgICAtbnwtLWRyeS1ydW4pCisJCWRyeV9ydW49dAorCQk7OworCSAgICAtLW5vLWRyeS1ydW4pCisJCWRyeV9ydW49CisJCTs7CisJICAgIC1rfC0ta2VlcC1nb2luZykKKwkJZWFybHlfZXhpdD0KKwkJOzsKKwkgICAgLS1uby1rZWVwLWdvaW5nKQorCQllYXJseV9leGl0PXEKKwkJOzsKKwkgICAgLW18LS1tZXJnZXMpCisJCXNjYW5fbWVyZ2VzPXQKKwkJOzsKKwkgICAgLS1uby1tZXJnZXMpCisJCXNjYW5fbWVyZ2VzPQorCQk7OworCSAgICAtbHwtLXJlZmxvZykKKwkJc2Nhbl9yZWZsb2c9dAorCQk7OworCSAgICAtLW5vLXJlZmxvZykKKwkJc2Nhbl9yZWZsb2c9CisJCTs7CisJICAgIC1yfC0tcmVmbG9nX21lcmdlcykKKwkJc2Nhbl9yZWZsb2dfbWVyZ2VzPXQKKwkJOzsKKwkgICAgLS1uby1yZWZsb2dfbWVyZ2VzKQorCQlzY2FuX3JlZmxvZ19tZXJnZXM9CisJCTs7CisJICAgIC10fC0tbWVyZ2UtdGFyZ2V0cykKKwkJc2Nhbl9tZXJnZV90YXJnZXRzPXQKKwkJOzsKKwkgICAgLS1uby1tZXJnZS10YXJnZXRzKQorCQlzY2FuX21lcmdlX3RhcmdldHM9CisJCTs7CisJICAgIC1hfC0tYWxsKQorCQlzY2FuX3JlZmxvZz10CisJCXNjYW5fcmVmbG9nX21lcmdlcz10CisJCXNjYW5fbWVyZ2VzPXQKKwkJc2Nhbl9tZXJnZV90YXJnZXRzPXQKKwkJOzsKKwkgICAgLS0pCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJICAgICopCisJCXVzYWdlCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK3Rlc3QgIiQjIiA9IDEgfHwgdXNhZ2UKKworYWxsX3N0cmF0ZWdpZXM9IiRzY2FuX3JlZmxvZyRzY2FuX3JlZmxvZ19tZXJnZXMkc2Nhbl9tZXJnZXMkc2Nhbl9tZXJnZV90YXJnZXRzIgoraWYgdGVzdCAteiAiJGFsbF9zdHJhdGVnaWVzIjsgdGhlbgorCWRpZSAibXVzdCBlbmFibGUgYXQgbGVhc3Qgb25lIG9mIC1scm10IgorZmkKKworYnJhbmNoPSIkMSIKK3Rlc3QgLXogIiRuZXdfbmFtZSIgJiYgbmV3X25hbWU9IiRicmFuY2giCisKK2lmIHRlc3QgISAteiAiJHNjYW5fcmVmbG9nIjsgdGhlbgorCWlmIHRlc3QgLXIgIiRHSVRfRElSIi9sb2dzL0hFQUQ7IHRoZW4KKwkJY2FuZGlkYXRlcz0iJChzZWFyY2hfcmVmbG9nICRicmFuY2gpIgorCWVsc2UKKwkJZGllICdyZWZsb2cgc2Nhbm5pbmcgcmVxdWVzdGVkLCBidXQnIFwKKwkJCSckR0lUX0RJUi9sb2dzL0hFQUQgbm90IHJlYWRhYmxlJworCWZpCitmaQoraWYgdGVzdCAhIC16ICIkc2Nhbl9yZWZsb2dfbWVyZ2VzIjsgdGhlbgorCWlmIHRlc3QgLXIgIiRHSVRfRElSIi9sb2dzL0hFQUQ7IHRoZW4KKwkJY2FuZGlkYXRlcz0iJGNhbmRpZGF0ZXMgJChzZWFyY2hfcmVmbG9nX21lcmdlcyAkYnJhbmNoKSIKKwllbHNlCisJCWRpZSAncmVmbG9nIHNjYW5uaW5nIHJlcXVlc3RlZCwgYnV0JyBcCisJCQknJEdJVF9ESVIvbG9ncy9IRUFEIG5vdCByZWFkYWJsZScKKwlmaQorZmkKK2lmIHRlc3QgISAteiAiJHNjYW5fbWVyZ2VzIjsgdGhlbgorCWNhbmRpZGF0ZXM9IiRjYW5kaWRhdGVzICQoc2VhcmNoX21lcmdlcyAkYnJhbmNoKSIKK2ZpCitpZiB0ZXN0ICEgLXogIiRzY2FuX21lcmdlX3RhcmdldHMiOyB0aGVuCisJY2FuZGlkYXRlcz0iJGNhbmRpZGF0ZXMgJChzZWFyY2hfbWVyZ2VfdGFyZ2V0cyAkYnJhbmNoKSIKK2ZpCisKK2NhbmRpZGF0ZXM9IiQoZ2l0IHJldi1wYXJzZSAkY2FuZGlkYXRlcyB8IHNvcnQgLXUpIgorCitpZiB0ZXN0IC16ICIkY2FuZGlkYXRlcyI7IHRoZW4KKwloaW50PQorCXRlc3QgInokYWxsX3N0cmF0ZWdpZXMiICE9ICJ6dHR0dCIgXAorCQkmJiBoaW50PSIgKG1heWJlIHRyeSBhZ2FpbiB3aXRoIC1hKSIKKwlkaWUgIm5vIGNhbmRpZGF0ZXMgZm9yICRicmFuY2ggZm91bmQkaGludCIKK2ZpCisKK2VjaG8gIioqIENhbmRpZGF0ZXMgZm9yICRicmFuY2ggKioiCitmb3IgY210IGluICRjYW5kaWRhdGVzOyBkbworCWdpdCAtLW5vLXBhZ2VyIGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlY3Q6JWggWyVjcl0gJXMiIC0tYWJicmV2LWNvbW1pdCAtMSAkY210Citkb25lIFwKK3wgc29ydCAtbiB8IGN1dCAtZDogLWYyLQorCituZXdlc3Q9IiQoZ2l0IHJldi1saXN0IC0xICRjYW5kaWRhdGVzKSIKK2lmIHRlc3QgISAteiAiJGRyeV9ydW4iOyB0aGVuCisJcHJpbnRmICIqKiBNb3N0IHJlY2VudDogIgorCWdpdCAtLW5vLXBhZ2VyIGxvZyAtMSAtLXByZXR0eT10Zm9ybWF0OiIlaCAlcyIgJG5ld2VzdAorZWxpZiAhIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAkbmV3X25hbWUgPi9kZXYvbnVsbDsgdGhlbgorCXByaW50ZiAiKiogUmVzdG9yaW5nICRuZXdfbmFtZSB0byAiCisJZ2l0IC0tbm8tcGFnZXIgbG9nIC0xIC0tcHJldHR5PXRmb3JtYXQ6IiVoICVzIiAkbmV3ZXN0CisJZ2l0IGJyYW5jaCAkbmV3X25hbWUgJG5ld2VzdAorZWxzZQorCXByaW50ZiAiTW9zdCByZWNlbnQ6ICIKKwlnaXQgLS1uby1wYWdlciBsb2cgLTEgLS1wcmV0dHk9dGZvcm1hdDoiJWggJXMiICRuZXdlc3QKKwllY2hvICIqKiAkbmV3X25hbWUgYWxyZWFkeSBleGlzdHMsIGRvaW5nIG5vdGhpbmciCitmaQpkaWZmIC0tZ2l0IGEvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvUkVBRE1FIGIvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzODQ2M2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dpdC1zaGVsbC1jb21tYW5kcy9SRUFETUUKQEAgLTAsMCArMSwxOCBAQAorU2FtcGxlIHByb2dyYW1zIGNhbGxhYmxlIHRocm91Z2ggZ2l0LXNoZWxsLiAgUGxhY2UgYSBkaXJlY3RvcnkgbmFtZWQKKydnaXQtc2hlbGwtY29tbWFuZHMnIGluIHRoZSBob21lIGRpcmVjdG9yeSBvZiBhIHVzZXIgd2hvc2Ugc2hlbGwgaXMKK2dpdC1zaGVsbC4gIFRoZW4gYW55b25lIGxvZ2dpbmcgaW4gYXMgdGhhdCB1c2VyIHdpbGwgYmUgYWJsZSB0byBydW4KK2V4ZWN1dGFibGVzIGluIHRoZSAnZ2l0LXNoZWxsLWNvbW1hbmRzJyBkaXJlY3RvcnkuCisKK1Byb3ZpZGVkIGNvbW1hbmRzOgorCitoZWxwOiBQcmludHMgb3V0IHRoZSBuYW1lcyBvZiBhdmFpbGFibGUgY29tbWFuZHMuICBXaGVuIHJ1bgoraW50ZXJhY3RpdmVseSwgZ2l0LXNoZWxsIHdpbGwgYXV0b21hdGljYWxseSBydW4gJ2hlbHAnIG9uIHN0YXJ0dXAsCitwcm92aWRlZCBpdCBleGlzdHMuCisKK2xpc3Q6IERpc3BsYXlzIGFueSBiYXJlIHJlcG9zaXRvcnkgd2hvc2UgbmFtZSBlbmRzIHdpdGggIi5naXQiIHVuZGVyCit1c2VyJ3MgaG9tZSBkaXJlY3RvcnkuICBObyBvdGhlciBnaXQgcmVwb3NpdG9yaWVzIGFyZSB2aXNpYmxlLAorYWx0aG91Z2ggdGhleSBtaWdodCBiZSBjbG9uYWJsZSB0aHJvdWdoIGdpdC1zaGVsbC4gICdsaXN0JyBpcyBkZXNpZ25lZAordG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjYWxscyB0byBnaXQgdGhhdCBtdXN0IGJlIG1hZGUgaW4gZmluZGluZworYXZhaWxhYmxlIHJlcG9zaXRvcmllczsgaWYgeW91ciBzZXR1cCBoYXMgYWRkaXRpb25hbCByZXBvc2l0b3JpZXMgdGhhdAorc2hvdWxkIGJlIHVzZXItZGlzY292ZXJhYmxlLCB5b3UgbWF5IHdpc2ggdG8gbW9kaWZ5ICdsaXN0JworYWNjb3JkaW5nbHkuCmRpZmYgLS1naXQgYS9jb250cmliL2dpdC1zaGVsbC1jb21tYW5kcy9oZWxwIGIvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvaGVscApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MzU3NzBjCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvaGVscApAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworaWYgdHR5IC1zCit0aGVuCisJZWNobyAiUnVuICdoZWxwJyBmb3IgaGVscCwgb3IgJ2V4aXQnIHRvIGxlYXZlLiAgQXZhaWxhYmxlIGNvbW1hbmRzOiIKK2Vsc2UKKwllY2hvICJSdW4gJ2hlbHAnIGZvciBoZWxwLiAgQXZhaWxhYmxlIGNvbW1hbmRzOiIKK2ZpCisKK2NkICIkKGRpcm5hbWUgIiQwIikiCisKK2ZvciBjbWQgaW4gKgorZG8KKwljYXNlICIkY21kIiBpbgorCWhlbHApIDs7CisJKikgWyAtZiAiJGNtZCIgXSAmJiBbIC14ICIkY21kIiBdICYmIGVjaG8gIiRjbWQiIDs7CisJZXNhYworZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9naXQtc2hlbGwtY29tbWFuZHMvbGlzdCBiL2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL2xpc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmY4OTkzOAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ2l0LXNoZWxsLWNvbW1hbmRzL2xpc3QKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL3NoCisKK3ByaW50X2lmX2JhcmVfcmVwbz0nCisJaWYgIiQoZ2l0IC0tZ2l0LWRpcj0iJDEiIHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSkiID0gdHJ1ZQorCXRoZW4KKwkJcHJpbnRmICIlc1xuIiAiJHsxIy4vfSIKKwlmaQorJworCitmaW5kIC10eXBlIGQgLW5hbWUgIiouZ2l0IiAtZXhlYyBzaCAtYyAiJHByaW50X2lmX2JhcmVfcmVwbyIgLS0gXHt9IFw7IC1wcnVuZSAyPi9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvY29udHJpYi9naXR2aWV3L2dpdHZpZXcgYi9jb250cmliL2dpdHZpZXcvZ2l0dmlldwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZTIzYzY1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9naXR2aWV3L2dpdHZpZXcKQEAgLTAsMCArMSwxMzA1IEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIiIiIGdpdHZpZXcKK0dVSSBicm93c2VyIGZvciBnaXQgcmVwb3NpdG9yeQorVGhpcyBwcm9ncmFtIGlzIGJhc2VkIG9uIGJ6cmsgYnkgU2NvdHQgSmFtZXMgUmVtbmFudCA8c2NvdHRAdWJ1bnR1LmNvbT4KKyIiIgorX19jb3B5cmlnaHRfXyA9ICJDb3B5cmlnaHQgKEMpIDIwMDYgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4iCitfX2NvcHlyaWdodF9fID0gIkNvcHlyaWdodCAoQykgMjAwNyBBbmVlc2ggS3VtYXIgSy5WIDxhbmVlc2gua3VtYXJAZ21haWwuY29tIgorX19hdXRob3JfXyAgICA9ICJBbmVlc2ggS3VtYXIgSy5WIDxhbmVlc2gua3VtYXJAZ21haWwuY29tPiIKKworCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCBndGsKK2ltcG9ydCBweWd0aworaW1wb3J0IHBhbmdvCitpbXBvcnQgcmUKK2ltcG9ydCB0aW1lCitpbXBvcnQgZ29iamVjdAoraW1wb3J0IGNhaXJvCitpbXBvcnQgbWF0aAoraW1wb3J0IHN0cmluZworaW1wb3J0IGZjbnRsCisKK2hhdmVfZ3Rrc291cmNldmlldzIgPSBGYWxzZQoraGF2ZV9ndGtzb3VyY2V2aWV3ID0gRmFsc2UKK3RyeToKKyAgICBpbXBvcnQgZ3Rrc291cmNldmlldzIKKyAgICBoYXZlX2d0a3NvdXJjZXZpZXcyID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IGd0a3NvdXJjZXZpZXcKKyAgICAgICAgaGF2ZV9ndGtzb3VyY2V2aWV3ID0gVHJ1ZQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcHJpbnQgIlJ1bm5pbmcgd2l0aG91dCBndGtzb3VyY2V2aWV3MiBvciBndGtzb3VyY2V2aWV3IG1vZHVsZSIKKworcmVfaWRlbnQgPSByZS5jb21waWxlKCcoYXV0aG9yfGNvbW1pdHRlcikgKD9QPGlkZW50Pi4qKSAoP1A8ZXBvY2g+XGQrKSAoP1A8dHo+WystXVxkezR9KScpCisKK2RlZiBsaXN0X3RvX3N0cmluZyhhcmdzLCBza2lwKToKKwljb3VudCA9IGxlbihhcmdzKQorCWkgPSBza2lwCisJc3RyX2FyZz0iICIKKwl3aGlsZSAoaSA8IGNvdW50ICk6CisJCXN0cl9hcmcgPSBzdHJfYXJnICsgYXJnc1tpXQorCQlzdHJfYXJnID0gc3RyX2FyZyArICIgIgorCQlpID0gaSsxCisKKwlyZXR1cm4gc3RyX2FyZworCitkZWYgc2hvd19kYXRlKGVwb2NoLCB0eik6CisJc2VjcyA9IGZsb2F0KGVwb2NoKQorCXR6c2VjcyA9IGZsb2F0KHR6WzE6M10pICogMzYwMAorCXR6c2VjcyArPSBmbG9hdCh0elszOjVdKSAqIDYwCisJaWYgKHR6WzBdID09ICIrIik6CisJCXNlY3MgKz0gdHpzZWNzCisJZWxzZToKKwkJc2VjcyAtPSB0enNlY3MKKworCXJldHVybiB0aW1lLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIsIHRpbWUuZ210aW1lKHNlY3MpKQorCitkZWYgZ2V0X3NvdXJjZV9idWZmZXJfYW5kX3ZpZXcoKToKKwlpZiBoYXZlX2d0a3NvdXJjZXZpZXcyOgorCQlidWZmZXIgPSBndGtzb3VyY2V2aWV3Mi5CdWZmZXIoKQorCQlzbG0gPSBndGtzb3VyY2V2aWV3Mi5MYW5ndWFnZU1hbmFnZXIoKQorCQlnc2wgPSBzbG0uZ2V0X2xhbmd1YWdlKCJkaWZmIikKKwkJYnVmZmVyLnNldF9oaWdobGlnaHRfc3ludGF4KFRydWUpCisJCWJ1ZmZlci5zZXRfbGFuZ3VhZ2UoZ3NsKQorCQl2aWV3ID0gZ3Rrc291cmNldmlldzIuVmlldyhidWZmZXIpCisJZWxpZiBoYXZlX2d0a3NvdXJjZXZpZXc6CisJCWJ1ZmZlciA9IGd0a3NvdXJjZXZpZXcuU291cmNlQnVmZmVyKCkKKwkJc2xtID0gZ3Rrc291cmNldmlldy5Tb3VyY2VMYW5ndWFnZXNNYW5hZ2VyKCkKKwkJZ3NsID0gc2xtLmdldF9sYW5ndWFnZV9mcm9tX21pbWVfdHlwZSgidGV4dC94LXBhdGNoIikKKwkJYnVmZmVyLnNldF9oaWdobGlnaHQoVHJ1ZSkKKwkJYnVmZmVyLnNldF9sYW5ndWFnZShnc2wpCisJCXZpZXcgPSBndGtzb3VyY2V2aWV3LlNvdXJjZVZpZXcoYnVmZmVyKQorCWVsc2U6CisJCWJ1ZmZlciA9IGd0ay5UZXh0QnVmZmVyKCkKKwkJdmlldyA9IGd0ay5UZXh0VmlldyhidWZmZXIpCisJcmV0dXJuIChidWZmZXIsIHZpZXcpCisKKworY2xhc3MgQ2VsbFJlbmRlcmVyR3JhcGgoZ3RrLkdlbmVyaWNDZWxsUmVuZGVyZXIpOgorCSIiIkNlbGwgcmVuZGVyZXIgZm9yIGRpcmVjdGVkIGdyYXBoLgorCisJVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIGltcGxlbWVudGF0aW9uIG9mIGEgY3VzdG9tIEd0a0NlbGxSZW5kZXJlciB0aGF0CisJZHJhd3MgcGFydCBvZiB0aGUgZGlyZWN0ZWQgZ3JhcGggYmFzZWQgb24gdGhlIGxpbmVzIHN1Z2dlc3RlZCBieSB0aGUgY29kZQorCWluIGdyYXBoLnB5LgorCisJQmVjYXVzZSB3ZSdyZSBzaGlueSwgd2UgdXNlIENhaXJvIHRvIGRvIHRoaXMsIGFuZCBiZWNhdXNlIHdlJ3JlIG5hdWdodHkKKwl3ZSBjaGVhdCBhbmQgZHJhdyBvdmVyIHRoZSBiaXRzIG9mIHRoZSBUcmVlVmlld0NvbHVtbiB0aGF0IGFyZSBzdXBwb3NlZCB0bworCWp1c3QgYmUgZm9yIHRoZSBiYWNrZ3JvdW5kLgorCisJUHJvcGVydGllczoKKwlub2RlICAgICAgICAgICAgICAoY29sdW1uLCBjb2xvdXIsIFsgbmFtZXMgXSkgdHVwbGUgdG8gZHJhdyByZXZpc2lvbiBub2RlLAorCWluX2xpbmVzICAgICAgICAgIChzdGFydCwgZW5kLCBjb2xvdXIpIHR1cGxlIGxpc3QgdG8gZHJhdyBpbndhcmQgbGluZXMsCisJb3V0X2xpbmVzICAgICAgICAgKHN0YXJ0LCBlbmQsIGNvbG91cikgdHVwbGUgbGlzdCB0byBkcmF3IG91dHdhcmQgbGluZXMuCisJIiIiCisKKwlfX2dwcm9wZXJ0aWVzX18gPSB7CisJIm5vZGUiOiAgICAgICAgICggZ29iamVjdC5UWVBFX1BZT0JKRUNULCAibm9kZSIsCisJCQkgICJyZXZpc2lvbiBub2RlIGluc3RydWN0aW9uIiwKKwkJCSAgZ29iamVjdC5QQVJBTV9XUklUQUJMRQorCQkJKSwKKwkiaW4tbGluZXMiOiAgICAgKCBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsICJpbi1saW5lcyIsCisJCQkgICJpbnN0cnVjdGlvbnMgdG8gZHJhdyBsaW5lcyBpbnRvIHRoZSBjZWxsIiwKKwkJCSAgZ29iamVjdC5QQVJBTV9XUklUQUJMRQorCQkJKSwKKwkib3V0LWxpbmVzIjogICAgKCBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsICJvdXQtbGluZXMiLAorCQkJICAiaW5zdHJ1Y3Rpb25zIHRvIGRyYXcgbGluZXMgb3V0IG9mIHRoZSBjZWxsIiwKKwkJCSAgZ29iamVjdC5QQVJBTV9XUklUQUJMRQorCQkJKSwKKwl9CisKKwlkZWYgZG9fc2V0X3Byb3BlcnR5KHNlbGYsIHByb3BlcnR5LCB2YWx1ZSk6CisJCSIiIlNldCBwcm9wZXJ0aWVzIGZyb20gR09iamVjdCBwcm9wZXJ0aWVzLiIiIgorCQlpZiBwcm9wZXJ0eS5uYW1lID09ICJub2RlIjoKKwkJCXNlbGYubm9kZSA9IHZhbHVlCisJCWVsaWYgcHJvcGVydHkubmFtZSA9PSAiaW4tbGluZXMiOgorCQkJc2VsZi5pbl9saW5lcyA9IHZhbHVlCisJCWVsaWYgcHJvcGVydHkubmFtZSA9PSAib3V0LWxpbmVzIjoKKwkJCXNlbGYub3V0X2xpbmVzID0gdmFsdWUKKwkJZWxzZToKKwkJCXJhaXNlIEF0dHJpYnV0ZUVycm9yLCAibm8gc3VjaCBwcm9wZXJ0eTogJyVzJyIgJSBwcm9wZXJ0eS5uYW1lCisKKwlkZWYgYm94X3NpemUoc2VsZiwgd2lkZ2V0KToKKwkJIiIiQ2FsY3VsYXRlIGJveCBzaXplIGJhc2VkIG9uIHdpZGdldCdzIGZvbnQuCisKKwkJQ2FjaGUgdGhpcyBhcyBpdCdzIHByb2JhYmx5IGV4cGVuc2l2ZSB0byBnZXQuICBJdCBlbnN1cmVzIHRoYXQgd2UKKwkJZHJhdyB0aGUgZ3JhcGggYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIHRleHQuCisJCSIiIgorCQl0cnk6CisJCQlyZXR1cm4gc2VsZi5fYm94X3NpemUKKwkJZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorCQkJcGFuZ29fY3R4ID0gd2lkZ2V0LmdldF9wYW5nb19jb250ZXh0KCkKKwkJCWZvbnRfZGVzYyA9IHdpZGdldC5nZXRfc3R5bGUoKS5mb250X2Rlc2MKKwkJCW1ldHJpY3MgPSBwYW5nb19jdHguZ2V0X21ldHJpY3MoZm9udF9kZXNjKQorCisJCQlhc2NlbnQgPSBwYW5nby5QSVhFTFMobWV0cmljcy5nZXRfYXNjZW50KCkpCisJCQlkZXNjZW50ID0gcGFuZ28uUElYRUxTKG1ldHJpY3MuZ2V0X2Rlc2NlbnQoKSkKKworCQkJc2VsZi5fYm94X3NpemUgPSBhc2NlbnQgKyBkZXNjZW50ICsgNgorCQkJcmV0dXJuIHNlbGYuX2JveF9zaXplCisKKwlkZWYgc2V0X2NvbG91cihzZWxmLCBjdHgsIGNvbG91ciwgYmcsIGZnKToKKwkJIiIiU2V0IHRoZSBjb250ZXh0IHNvdXJjZSBjb2xvdXIuCisKKwkJUGlja3MgYSBkaXN0aW5jdCBjb2xvdXIgYmFzZWQgb24gYW4gaW50ZXJuYWwgd2hlZWw7IHRoZSBiZworCQlwYXJhbWV0ZXIgcHJvdmlkZXMgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSAnemVybycKKwkJY29sb3VycyBhbmQgdGhlIGZnIHBhcmFtZXRlciBwcm92aWRlcyB0aGUgbXVsdGlwbGllciB0aGF0IHNob3VsZCBiZQorCQlhcHBsaWVkIHRvIHRoZSBmb3JlZ3JvdW5kIGNvbG91cnMuCisJCSIiIgorCQljb2xvdXJzID0gWworCQkgICAgKCAxLjAsIDAuMCwgMC4wICksCisJCSAgICAoIDEuMCwgMS4wLCAwLjAgKSwKKwkJICAgICggMC4wLCAxLjAsIDAuMCApLAorCQkgICAgKCAwLjAsIDEuMCwgMS4wICksCisJCSAgICAoIDAuMCwgMC4wLCAxLjAgKSwKKwkJICAgICggMS4wLCAwLjAsIDEuMCApLAorCQkgICAgXQorCisJCWNvbG91ciAlPSBsZW4oY29sb3VycykKKwkJcmVkICAgPSAoY29sb3Vyc1tjb2xvdXJdWzBdICogZmcpIG9yIGJnCisJCWdyZWVuID0gKGNvbG91cnNbY29sb3VyXVsxXSAqIGZnKSBvciBiZworCQlibHVlICA9IChjb2xvdXJzW2NvbG91cl1bMl0gKiBmZykgb3IgYmcKKworCQljdHguc2V0X3NvdXJjZV9yZ2IocmVkLCBncmVlbiwgYmx1ZSkKKworCWRlZiBvbl9nZXRfc2l6ZShzZWxmLCB3aWRnZXQsIGNlbGxfYXJlYSk6CisJCSIiIlJldHVybiB0aGUgc2l6ZSB3ZSBuZWVkIGZvciB0aGlzIGNlbGwuCisKKwkJRWFjaCBjZWxsIGlzIGRyYXduIGluZGl2aWR1YWxseSBhbmQgaXMgb25seSBhcyB3aWRlIGFzIGl0IG5lZWRzCisJCXRvIGJlLCB3ZSBsZXQgdGhlIFRyZWVWaWV3Q29sdW1uIHRha2UgY2FyZSBvZiBtYWtpbmcgdGhlbSBhbGwKKwkJbGluZSB1cC4KKwkJIiIiCisJCWJveF9zaXplID0gc2VsZi5ib3hfc2l6ZSh3aWRnZXQpCisKKwkJY29scyA9IHNlbGYubm9kZVswXQorCQlmb3Igc3RhcnQsIGVuZCwgY29sb3VyIGluIHNlbGYuaW5fbGluZXMgKyBzZWxmLm91dF9saW5lczoKKwkJCWNvbHMgPSBpbnQobWF4KGNvbHMsIHN0YXJ0LCBlbmQpKQorCisJCShjb2x1bW4sIGNvbG91ciwgbmFtZXMpID0gc2VsZi5ub2RlCisJCW5hbWVzX2xlbiA9IDAKKwkJaWYgKGxlbihuYW1lcykgIT0gMCk6CisJCQlmb3IgaXRlbSBpbiBuYW1lczoKKwkJCQluYW1lc19sZW4gKz0gbGVuKGl0ZW0pCisKKwkJd2lkdGggPSBib3hfc2l6ZSAqIChjb2xzICsgMSApICsgbmFtZXNfbGVuCisJCWhlaWdodCA9IGJveF9zaXplCisKKwkJIyBGSVhNRSBJIGhhdmUgbm8gaWRlYSBob3cgdG8gdXNlIGNlbGxfYXJlYSBwcm9wZXJseQorCQlyZXR1cm4gKDAsIDAsIHdpZHRoLCBoZWlnaHQpCisKKwlkZWYgb25fcmVuZGVyKHNlbGYsIHdpbmRvdywgd2lkZ2V0LCBiZ19hcmVhLCBjZWxsX2FyZWEsIGV4cF9hcmVhLCBmbGFncyk6CisJCSIiIlJlbmRlciBhbiBpbmRpdmlkdWFsIGNlbGwuCisKKwkJRHJhd3MgdGhlIGNlbGwgY29udGVudHMgdXNpbmcgY2Fpcm8sIHRha2luZyBjYXJlIHRvIGNsaXAgd2hhdCB3ZQorCQlkbyB0byB3aXRoaW4gdGhlIGJhY2tncm91bmQgYXJlYSBzbyB3ZSBkb24ndCBkcmF3IG92ZXIgb3RoZXIgY2VsbHMuCisJCU5vdGUgdGhhdCB3ZSdyZSBhIGJpdCBuYXVnaHR5IHRoZXJlIGFuZCBzaG91bGQgcmVhbGx5IGJlIGRyYXdpbmcKKwkJaW4gdGhlIGNlbGxfYXJlYSAob3IgZXZlbiB0aGUgZXhwb3NlZCBhcmVhKSwgYnV0IHdlIGV4cGxpY2l0bHkgZG9uJ3QKKwkJd2FudCBhbnkgZ3V0dGVyLgorCisJCVdlIHRyeSBhbmQgYmUgYSBsaXR0bGUgY2xldmVyLCBpZiB0aGUgbGluZSB3ZSBuZWVkIHRvIGRyYXcgaXMgZ29pbmcKKwkJdG8gY3Jvc3Mgb3RoZXIgY29sdW1ucyB3ZSBhY3R1YWxseSBkcmF3IGl0IGFzIGluIHRoZSAuLS0tJyBzdHlsZQorCQlpbnN0ZWFkIG9mIGEgcHVyZSBkaWFnb25hbCAuLi4gdGhpcyByZWR1Y2VzIGNvbmZ1c2lvbiBieSBhbgorCQlpbmNyZWRpYmxlIGFtb3VudC4KKwkJIiIiCisJCWN0eCA9IHdpbmRvdy5jYWlyb19jcmVhdGUoKQorCQljdHgucmVjdGFuZ2xlKGJnX2FyZWEueCwgYmdfYXJlYS55LCBiZ19hcmVhLndpZHRoLCBiZ19hcmVhLmhlaWdodCkKKwkJY3R4LmNsaXAoKQorCisJCWJveF9zaXplID0gc2VsZi5ib3hfc2l6ZSh3aWRnZXQpCisKKwkJY3R4LnNldF9saW5lX3dpZHRoKGJveF9zaXplIC8gOCkKKwkJY3R4LnNldF9saW5lX2NhcChjYWlyby5MSU5FX0NBUF9TUVVBUkUpCisKKwkJIyBEcmF3IGxpbmVzIGludG8gdGhlIGNlbGwKKwkJZm9yIHN0YXJ0LCBlbmQsIGNvbG91ciBpbiBzZWxmLmluX2xpbmVzOgorCQkJY3R4Lm1vdmVfdG8oY2VsbF9hcmVhLnggKyBib3hfc2l6ZSAqIHN0YXJ0ICsgYm94X3NpemUgLyAyLAorCQkJCQliZ19hcmVhLnkgLSBiZ19hcmVhLmhlaWdodCAvIDIpCisKKwkJCWlmIHN0YXJ0IC0gZW5kID4gMToKKwkJCQljdHgubGluZV90byhjZWxsX2FyZWEueCArIGJveF9zaXplICogc3RhcnQsIGJnX2FyZWEueSkKKwkJCQljdHgubGluZV90byhjZWxsX2FyZWEueCArIGJveF9zaXplICogZW5kICsgYm94X3NpemUsIGJnX2FyZWEueSkKKwkJCWVsaWYgc3RhcnQgLSBlbmQgPCAtMToKKwkJCQljdHgubGluZV90byhjZWxsX2FyZWEueCArIGJveF9zaXplICogc3RhcnQgKyBib3hfc2l6ZSwKKwkJCQkJCWJnX2FyZWEueSkKKwkJCQljdHgubGluZV90byhjZWxsX2FyZWEueCArIGJveF9zaXplICogZW5kLCBiZ19hcmVhLnkpCisKKwkJCWN0eC5saW5lX3RvKGNlbGxfYXJlYS54ICsgYm94X3NpemUgKiBlbmQgKyBib3hfc2l6ZSAvIDIsCisJCQkJCWJnX2FyZWEueSArIGJnX2FyZWEuaGVpZ2h0IC8gMikKKworCQkJc2VsZi5zZXRfY29sb3VyKGN0eCwgY29sb3VyLCAwLjAsIDAuNjUpCisJCQljdHguc3Ryb2tlKCkKKworCQkjIERyYXcgbGluZXMgb3V0IG9mIHRoZSBjZWxsCisJCWZvciBzdGFydCwgZW5kLCBjb2xvdXIgaW4gc2VsZi5vdXRfbGluZXM6CisJCQljdHgubW92ZV90byhjZWxsX2FyZWEueCArIGJveF9zaXplICogc3RhcnQgKyBib3hfc2l6ZSAvIDIsCisJCQkJCWJnX2FyZWEueSArIGJnX2FyZWEuaGVpZ2h0IC8gMikKKworCQkJaWYgc3RhcnQgLSBlbmQgPiAxOgorCQkJCWN0eC5saW5lX3RvKGNlbGxfYXJlYS54ICsgYm94X3NpemUgKiBzdGFydCwKKwkJCQkJCWJnX2FyZWEueSArIGJnX2FyZWEuaGVpZ2h0KQorCQkJCWN0eC5saW5lX3RvKGNlbGxfYXJlYS54ICsgYm94X3NpemUgKiBlbmQgKyBib3hfc2l6ZSwKKwkJCQkJCWJnX2FyZWEueSArIGJnX2FyZWEuaGVpZ2h0KQorCQkJZWxpZiBzdGFydCAtIGVuZCA8IC0xOgorCQkJCWN0eC5saW5lX3RvKGNlbGxfYXJlYS54ICsgYm94X3NpemUgKiBzdGFydCArIGJveF9zaXplLAorCQkJCQkJYmdfYXJlYS55ICsgYmdfYXJlYS5oZWlnaHQpCisJCQkJY3R4LmxpbmVfdG8oY2VsbF9hcmVhLnggKyBib3hfc2l6ZSAqIGVuZCwKKwkJCQkJCWJnX2FyZWEueSArIGJnX2FyZWEuaGVpZ2h0KQorCisJCQljdHgubGluZV90byhjZWxsX2FyZWEueCArIGJveF9zaXplICogZW5kICsgYm94X3NpemUgLyAyLAorCQkJCQliZ19hcmVhLnkgKyBiZ19hcmVhLmhlaWdodCAvIDIgKyBiZ19hcmVhLmhlaWdodCkKKworCQkJc2VsZi5zZXRfY29sb3VyKGN0eCwgY29sb3VyLCAwLjAsIDAuNjUpCisJCQljdHguc3Ryb2tlKCkKKworCQkjIERyYXcgdGhlIHJldmlzaW9uIG5vZGUgaW4gdGhlIHJpZ2h0IGNvbHVtbgorCQkoY29sdW1uLCBjb2xvdXIsIG5hbWVzKSA9IHNlbGYubm9kZQorCQljdHguYXJjKGNlbGxfYXJlYS54ICsgYm94X3NpemUgKiBjb2x1bW4gKyBib3hfc2l6ZSAvIDIsCisJCQkJY2VsbF9hcmVhLnkgKyBjZWxsX2FyZWEuaGVpZ2h0IC8gMiwKKwkJCQlib3hfc2l6ZSAvIDQsIDAsIDIgKiBtYXRoLnBpKQorCisKKwkJc2VsZi5zZXRfY29sb3VyKGN0eCwgY29sb3VyLCAwLjAsIDAuNSkKKwkJY3R4LnN0cm9rZV9wcmVzZXJ2ZSgpCisKKwkJc2VsZi5zZXRfY29sb3VyKGN0eCwgY29sb3VyLCAwLjUsIDEuMCkKKwkJY3R4LmZpbGxfcHJlc2VydmUoKQorCisJCWlmIChsZW4obmFtZXMpICE9IDApOgorCQkJbmFtZSA9ICIgIgorCQkJZm9yIGl0ZW0gaW4gbmFtZXM6CisJCQkJbmFtZSA9IG5hbWUgKyBpdGVtICsgIiAiCisKKwkJCWN0eC5zZXRfZm9udF9zaXplKDEzKQorCQkJaWYgKGZsYWdzICYgMSk6CisJCQkJc2VsZi5zZXRfY29sb3VyKGN0eCwgY29sb3VyLCAwLjUsIDEuMCkKKwkJCWVsc2U6CisJCQkJc2VsZi5zZXRfY29sb3VyKGN0eCwgY29sb3VyLCAwLjAsIDAuNSkKKwkJCWN0eC5zaG93X3RleHQobmFtZSkKKworY2xhc3MgQ29tbWl0KG9iamVjdCk6CisJIiIiIFRoaXMgcmVwcmVzZW50IGEgY29tbWl0IG9iamVjdCBvYnRhaW5lZCBhZnRlciBwYXJzaW5nIHRoZSBnaXQtcmV2LWxpc3QKKwlvdXRwdXQgIiIiCisKKwlfX3Nsb3RzX18gPSBbJ2NoaWxkcmVuX3NoYTEnLCAnbWVzc2FnZScsICdhdXRob3InLCAnZGF0ZScsICdjb21taXR0ZXInLAorCQkJCSAnY29tbWl0X2RhdGUnLCAnY29tbWl0X3NoYTEnLCAncGFyZW50X3NoYTEnXQorCisJY2hpbGRyZW5fc2hhMSA9IHt9CisKKwlkZWYgX19pbml0X18oc2VsZiwgY29tbWl0X2xpbmVzKToKKwkJc2VsZi5tZXNzYWdlCQk9ICIiCisJCXNlbGYuYXV0aG9yCQk9ICIiCisJCXNlbGYuZGF0ZQkJPSAiIgorCQlzZWxmLmNvbW1pdHRlcgkJPSAiIgorCQlzZWxmLmNvbW1pdF9kYXRlCT0gIiIKKwkJc2VsZi5jb21taXRfc2hhMQk9ICIiCisJCXNlbGYucGFyZW50X3NoYTEJPSBbIF0KKwkJc2VsZi5wYXJzZV9jb21taXQoY29tbWl0X2xpbmVzKQorCisKKwlkZWYgcGFyc2VfY29tbWl0KHNlbGYsIGNvbW1pdF9saW5lcyk6CisKKwkJIyBGaXJzdCBsaW5lIGlzIHRoZSBzaGExIGxpbmVzCisJCWxpbmUgPSBzdHJpbmcuc3RyaXAoY29tbWl0X2xpbmVzWzBdKQorCQlzaGExID0gcmUuc3BsaXQoIiAiLCBsaW5lKQorCQlzZWxmLmNvbW1pdF9zaGExID0gc2hhMVswXQorCQlzZWxmLnBhcmVudF9zaGExID0gc2hhMVsxOl0KKworCQkjYnVpbGQgdGhlIGNoaWxkIGxpc3QKKwkJZm9yIHBhcmVudF9pZCBpbiBzZWxmLnBhcmVudF9zaGExOgorCQkJdHJ5OgorCQkJCUNvbW1pdC5jaGlsZHJlbl9zaGExW3BhcmVudF9pZF0uYXBwZW5kKHNlbGYuY29tbWl0X3NoYTEpCisJCQlleGNlcHQgS2V5RXJyb3I6CisJCQkJQ29tbWl0LmNoaWxkcmVuX3NoYTFbcGFyZW50X2lkXSA9IFtzZWxmLmNvbW1pdF9zaGExXQorCisJCSMgSUYgd2UgZG9uJ3QgaGF2ZSBwYXJlbnQKKwkJaWYgKGxlbihzZWxmLnBhcmVudF9zaGExKSA9PSAwKToKKwkJCXNlbGYucGFyZW50X3NoYTEgPSBbMF0KKworCQlmb3IgbGluZSBpbiBjb21taXRfbGluZXNbMTpdOgorCQkJbSA9IHJlLm1hdGNoKCJeICIsIGxpbmUpCisJCQlpZiAobSAhPSBOb25lKToKKwkJCQkjIEZpcnN0IGxpbmUgb2YgdGhlIGNvbW1pdCBtZXNzYWdlIHVzZWQgZm9yIHNob3J0IGxvZworCQkJCWlmIHNlbGYubWVzc2FnZSA9PSAiIjoKKwkJCQkJc2VsZi5tZXNzYWdlID0gc3RyaW5nLnN0cmlwKGxpbmUpCisJCQkJY29udGludWUKKworCQkJbSA9IHJlLm1hdGNoKCJ0cmVlIiwgbGluZSkKKwkJCWlmIChtICE9IE5vbmUpOgorCQkJCWNvbnRpbnVlCisKKwkJCW0gPSByZS5tYXRjaCgicGFyZW50IiwgbGluZSkKKwkJCWlmIChtICE9IE5vbmUpOgorCQkJCWNvbnRpbnVlCisKKwkJCW0gPSByZV9pZGVudC5tYXRjaChsaW5lKQorCQkJaWYgKG0gIT0gTm9uZSk6CisJCQkJZGF0ZSA9IHNob3dfZGF0ZShtLmdyb3VwKCdlcG9jaCcpLCBtLmdyb3VwKCd0eicpKQorCQkJCWlmIG0uZ3JvdXAoMSkgPT0gImF1dGhvciI6CisJCQkJCXNlbGYuYXV0aG9yID0gbS5ncm91cCgnaWRlbnQnKQorCQkJCQlzZWxmLmRhdGUgPSBkYXRlCisJCQkJZWxpZiBtLmdyb3VwKDEpID09ICJjb21taXR0ZXIiOgorCQkJCQlzZWxmLmNvbW1pdHRlciA9IG0uZ3JvdXAoJ2lkZW50JykKKwkJCQkJc2VsZi5jb21taXRfZGF0ZSA9IGRhdGUKKworCQkJCWNvbnRpbnVlCisKKwlkZWYgZ2V0X21lc3NhZ2Uoc2VsZiwgd2l0aF9kaWZmPTApOgorCQlpZiAod2l0aF9kaWZmID09IDEpOgorCQkJbWVzc2FnZSA9IHNlbGYuZGlmZl90cmVlKCkKKwkJZWxzZToKKwkJCWZwID0gb3MucG9wZW4oImdpdCBjYXQtZmlsZSBjb21taXQgIiArIHNlbGYuY29tbWl0X3NoYTEpCisJCQltZXNzYWdlID0gZnAucmVhZCgpCisJCQlmcC5jbG9zZSgpCisKKwkJcmV0dXJuIG1lc3NhZ2UKKworCWRlZiBkaWZmX3RyZWUoc2VsZik6CisJCWZwID0gb3MucG9wZW4oImdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1jYyAgLXYgLXAgLS1hbHdheXMgIiArICBzZWxmLmNvbW1pdF9zaGExKQorCQlkaWZmID0gZnAucmVhZCgpCisJCWZwLmNsb3NlKCkKKwkJcmV0dXJuIGRpZmYKKworY2xhc3MgQW5ub3RhdGVXaW5kb3cob2JqZWN0KToKKwkiIiJBbm5vdGF0ZSB3aW5kb3cuCisJVGhpcyBvYmplY3QgcmVwcmVzZW50cyBhbmQgbWFuYWdlcyBhIHNpbmdsZSB3aW5kb3cgY29udGFpbmluZyB0aGUKKwlhbm5vdGF0ZSBpbmZvcm1hdGlvbiBvZiB0aGUgZmlsZQorCSIiIgorCisJZGVmIF9faW5pdF9fKHNlbGYpOgorCQlzZWxmLndpbmRvdyA9IGd0ay5XaW5kb3coZ3RrLldJTkRPV19UT1BMRVZFTCkKKwkJc2VsZi53aW5kb3cuc2V0X2JvcmRlcl93aWR0aCgwKQorCQlzZWxmLndpbmRvdy5zZXRfdGl0bGUoIkdpdCByZXBvc2l0b3J5IGJyb3dzZXIgYW5ub3RhdGlvbiB3aW5kb3ciKQorCQlzZWxmLnByZXZfcmVhZCA9ICIiCisKKwkJIyBVc2UgdHdvIHRoaXJkcyBvZiB0aGUgc2NyZWVuIGJ5IGRlZmF1bHQKKwkJc2NyZWVuID0gc2VsZi53aW5kb3cuZ2V0X3NjcmVlbigpCisJCW1vbml0b3IgPSBzY3JlZW4uZ2V0X21vbml0b3JfZ2VvbWV0cnkoMCkKKwkJd2lkdGggPSBpbnQobW9uaXRvci53aWR0aCAqIDAuNjYpCisJCWhlaWdodCA9IGludChtb25pdG9yLmhlaWdodCAqIDAuNjYpCisJCXNlbGYud2luZG93LnNldF9kZWZhdWx0X3NpemUod2lkdGgsIGhlaWdodCkKKworCWRlZiBhZGRfZmlsZV9kYXRhKHNlbGYsIGZpbGVuYW1lLCBjb21taXRfc2hhMSwgbGluZV9udW0pOgorCQlmcCA9IG9zLnBvcGVuKCJnaXQgY2F0LWZpbGUgYmxvYiAiICsgY29tbWl0X3NoYTEgKyI6IitmaWxlbmFtZSkKKwkJaSA9IDE7CisJCWZvciBsaW5lIGluIGZwLnJlYWRsaW5lcygpOgorCQkJbGluZSA9IHN0cmluZy5yc3RyaXAobGluZSkKKwkJCXNlbGYubW9kZWwuYXBwZW5kKE5vbmUsIFsiSEVBRCIsIGZpbGVuYW1lLCBsaW5lLCBpXSkKKwkJCWkgPSBpKzEKKwkJZnAuY2xvc2UoKQorCisJCSMgbm93IHNldCB0aGUgY3Vyc29yIHBvc2l0aW9uCisJCXNlbGYudHJlZXZpZXcuc2V0X2N1cnNvcihsaW5lX251bS0xKQorCQlzZWxmLnRyZWV2aWV3LmdyYWJfZm9jdXMoKQorCisJZGVmIF90cmVldmlld19jdXJzb3JfY2Ioc2VsZiwgKmFyZ3MpOgorCQkiIiJDYWxsYmFjayBmb3Igd2hlbiB0aGUgdHJlZXZpZXcgY3Vyc29yIGNoYW5nZXMuIiIiCisJCShwYXRoLCBjb2wpID0gc2VsZi50cmVldmlldy5nZXRfY3Vyc29yKCkKKwkJY29tbWl0X3NoYTEgPSBzZWxmLm1vZGVsW3BhdGhdWzBdCisJCWNvbW1pdF9tc2cgPSAiIgorCQlmcCA9IG9zLnBvcGVuKCJnaXQgY2F0LWZpbGUgY29tbWl0ICIgKyBjb21taXRfc2hhMSkKKwkJZm9yIGxpbmUgaW4gZnAucmVhZGxpbmVzKCk6CisJCQljb21taXRfbXNnID0gIGNvbW1pdF9tc2cgKyBsaW5lCisJCWZwLmNsb3NlKCkKKworCQlzZWxmLmNvbW1pdF9idWZmZXIuc2V0X3RleHQoY29tbWl0X21zZykKKworCWRlZiBfdHJlZXZpZXdfcm93X2FjdGl2YXRlZChzZWxmLCAqYXJncyk6CisJCSIiIkNhbGxiYWNrIGZvciB3aGVuIHRoZSB0cmVldmlldyByb3cgZ2V0cyBzZWxlY3RlZC4iIiIKKwkJKHBhdGgsIGNvbCkgPSBzZWxmLnRyZWV2aWV3LmdldF9jdXJzb3IoKQorCQljb21taXRfc2hhMSA9IHNlbGYubW9kZWxbcGF0aF1bMF0KKwkJZmlsZW5hbWUgICAgPSBzZWxmLm1vZGVsW3BhdGhdWzFdCisJCWxpbmVfbnVtICAgID0gc2VsZi5tb2RlbFtwYXRoXVszXQorCisJCXdpbmRvdyA9IEFubm90YXRlV2luZG93KCk7CisJCWZwID0gb3MucG9wZW4oImdpdCByZXYtcGFyc2UgIisgY29tbWl0X3NoYTEgKyAifjEiKQorCQljb21taXRfc2hhMSA9IHN0cmluZy5zdHJpcChmcC5yZWFkbGluZSgpKQorCQlmcC5jbG9zZSgpCisJCXdpbmRvdy5hbm5vdGF0ZShmaWxlbmFtZSwgY29tbWl0X3NoYTEsIGxpbmVfbnVtKQorCisJZGVmIGRhdGFfcmVhZHkoc2VsZiwgc291cmNlLCBjb25kaXRpb24pOgorCQl3aGlsZSAoMSk6CisJCQl0cnkgOgorCQkJCSMgQSBzaW1wbGUgcmVhZGxpbmUgZG9lc24ndCB3b3JrCisJCQkJIyBhIHJlYWRsaW5lIGJ1ZyA/PworCQkJCWJ1ZmZlciA9IHNvdXJjZS5yZWFkKDEwMCkKKworCQkJZXhjZXB0OgorCQkJCSMgcmVzb3VyY2UgdGVtcG9yYXJ5IG5vdCBhdmFpbGFibGUKKwkJCQlyZXR1cm4gVHJ1ZQorCisJCQlpZiAobGVuKGJ1ZmZlcikgPT0gMCk6CisJCQkJZ29iamVjdC5zb3VyY2VfcmVtb3ZlKHNlbGYuaW9fd2F0Y2hfdGFnKQorCQkJCXNvdXJjZS5jbG9zZSgpCisJCQkJcmV0dXJuIEZhbHNlCisKKwkJCWlmIChzZWxmLnByZXZfcmVhZCAhPSAiIik6CisJCQkJYnVmZmVyID0gc2VsZi5wcmV2X3JlYWQgKyBidWZmZXIKKwkJCQlzZWxmLnByZXZfcmVhZCA9ICIiCisKKwkJCWlmIChidWZmZXJbbGVuKGJ1ZmZlcikgLTFdICE9ICdcbicpOgorCQkJCXRyeToKKwkJCQkJbmV3bGluZV9pbmRleCA9IGJ1ZmZlci5yaW5kZXgoIlxuIikKKwkJCQlleGNlcHQgVmFsdWVFcnJvcjoKKwkJCQkJbmV3bGluZV9pbmRleCA9IDAKKworCQkJCXNlbGYucHJldl9yZWFkID0gYnVmZmVyW25ld2xpbmVfaW5kZXg6KGxlbihidWZmZXIpKV0KKwkJCQlidWZmZXIgPSBidWZmZXJbMDpuZXdsaW5lX2luZGV4XQorCisJCQlmb3IgYnVmZiBpbiBidWZmZXIuc3BsaXQoIlxuIik6CisJCQkJYW5ub3RhdGVfbGluZSA9IHJlLmNvbXBpbGUoJ14oWzAtOWEtZl17NDB9KSAoLispICguKykgKC4rKSQnKQorCQkJCW0gPSBhbm5vdGF0ZV9saW5lLm1hdGNoKGJ1ZmYpCisJCQkJaWYgbm90IG06CisJCQkJCWFubm90YXRlX2xpbmUgPSByZS5jb21waWxlKCdeKGZpbGVuYW1lKSAoLispJCcpCisJCQkJCW0gPSBhbm5vdGF0ZV9saW5lLm1hdGNoKGJ1ZmYpCisJCQkJCWlmIG5vdCBtOgorCQkJCQkJY29udGludWUKKwkJCQkJZmlsZW5hbWUgPSBtLmdyb3VwKDIpCisJCQkJZWxzZToKKwkJCQkJc2VsZi5jb21taXRfc2hhMSA9IG0uZ3JvdXAoMSkKKwkJCQkJc2VsZi5zb3VyY2VfbGluZSA9IGludChtLmdyb3VwKDIpKQorCQkJCQlzZWxmLnJlc3VsdF9saW5lID0gaW50KG0uZ3JvdXAoMykpCisJCQkJCXNlbGYuY291bnQJICAgID0gaW50KG0uZ3JvdXAoNCkpCisJCQkJCSNzZXQgdGhlIGRldGFpbHMgb25seSB3aGVuIHdlIGhhdmUgdGhlIGZpbGUgbmFtZQorCQkJCQljb250aW51ZQorCisJCQkJd2hpbGUgKHNlbGYuY291bnQgPiAwKToKKwkJCQkJIyBzZXQgYXQgcmVzdWx0X2xpbmUgKyBjb3VudC0xIHRoZSBzaGExIGFzIGNvbW1pdF9zaGExCisJCQkJCXNlbGYuY291bnQgPSBzZWxmLmNvdW50IC0gMQorCQkJCQlpdGVyID0gc2VsZi5tb2RlbC5pdGVyX250aF9jaGlsZChOb25lLCBzZWxmLnJlc3VsdF9saW5lICsgc2VsZi5jb3VudC0xKQorCQkJCQlzZWxmLm1vZGVsLnNldChpdGVyLCAwLCBzZWxmLmNvbW1pdF9zaGExLCAxLCBmaWxlbmFtZSwgMywgc2VsZi5zb3VyY2VfbGluZSkKKworCisJZGVmIGFubm90YXRlKHNlbGYsIGZpbGVuYW1lLCBjb21taXRfc2hhMSwgbGluZV9udW0pOgorCQkjIHZlcmlmeSB0aGUgY29tbWl0X3NoYTEgc3BlY2lmaWVkIGhhcyB0aGlzIGZpbGVuYW1lCisKKwkJZnAgPSBvcy5wb3BlbigiZ2l0IGxzLXRyZWUgIisgY29tbWl0X3NoYTEgKyAiIC0tICIgKyBmaWxlbmFtZSkKKwkJbGluZSA9IHN0cmluZy5zdHJpcChmcC5yZWFkbGluZSgpKQorCQlpZiBsaW5lID09ICcnOgorCQkJIyBwb3AgdXAgdGhlIG1lc3NhZ2UgdGhlIGZpbGUgaXMgbm90IHRoZXJlIGFzIGEgcGFydCBvZiB0aGUgY29tbWl0CisJCQlmcC5jbG9zZSgpCisJCQlkaWFsb2cgPSBndGsuTWVzc2FnZURpYWxvZyhwYXJlbnQ9Tm9uZSwgZmxhZ3M9MCwKKwkJCQkJdHlwZT1ndGsuTUVTU0FHRV9XQVJOSU5HLCBidXR0b25zPWd0ay5CVVRUT05TX0NMT1NFLAorCQkJCQltZXNzYWdlX2Zvcm1hdD1Ob25lKQorCQkJZGlhbG9nLnNldF9tYXJrdXAoIlRoZSBmaWxlICVzIGlzIG5vdCBwcmVzZW50IGluIHRoZSBwYXJlbnQgY29tbWl0ICVzIiAlIChmaWxlbmFtZSwgY29tbWl0X3NoYTEpKQorCQkJZGlhbG9nLnJ1bigpCisJCQlkaWFsb2cuZGVzdHJveSgpCisJCQlyZXR1cm4KKworCQlmcC5jbG9zZSgpCisKKwkJdnBhbiA9IGd0ay5WUGFuZWQoKTsKKwkJc2VsZi53aW5kb3cuYWRkKHZwYW4pOworCQl2cGFuLnNob3coKQorCisJCXNjcm9sbHdpbiA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisJCXNjcm9sbHdpbi5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKwkJc2Nyb2xsd2luLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorCQl2cGFuLnBhY2sxKHNjcm9sbHdpbiwgVHJ1ZSwgVHJ1ZSk7CisJCXNjcm9sbHdpbi5zaG93KCkKKworCQlzZWxmLm1vZGVsID0gZ3RrLlRyZWVTdG9yZShzdHIsIHN0ciwgc3RyLCBpbnQpCisJCXNlbGYudHJlZXZpZXcgPSBndGsuVHJlZVZpZXcoc2VsZi5tb2RlbCkKKwkJc2VsZi50cmVldmlldy5zZXRfcnVsZXNfaGludChUcnVlKQorCQlzZWxmLnRyZWV2aWV3LnNldF9zZWFyY2hfY29sdW1uKDApCisJCXNlbGYudHJlZXZpZXcuY29ubmVjdCgiY3Vyc29yLWNoYW5nZWQiLCBzZWxmLl90cmVldmlld19jdXJzb3JfY2IpCisJCXNlbGYudHJlZXZpZXcuY29ubmVjdCgicm93LWFjdGl2YXRlZCIsIHNlbGYuX3RyZWV2aWV3X3Jvd19hY3RpdmF0ZWQpCisJCXNjcm9sbHdpbi5hZGQoc2VsZi50cmVldmlldykKKwkJc2VsZi50cmVldmlldy5zaG93KCkKKworCQljZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorCQljZWxsLnNldF9wcm9wZXJ0eSgid2lkdGgtY2hhcnMiLCAxMCkKKwkJY2VsbC5zZXRfcHJvcGVydHkoImVsbGlwc2l6ZSIsIHBhbmdvLkVMTElQU0laRV9FTkQpCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiQ29tbWl0IikKKwkJY29sdW1uLnNldF9yZXNpemFibGUoVHJ1ZSkKKwkJY29sdW1uLnBhY2tfc3RhcnQoY2VsbCwgZXhwYW5kPVRydWUpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJ0ZXh0IiwgMCkKKwkJc2VsZi50cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKworCQljZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorCQljZWxsLnNldF9wcm9wZXJ0eSgid2lkdGgtY2hhcnMiLCAyMCkKKwkJY2VsbC5zZXRfcHJvcGVydHkoImVsbGlwc2l6ZSIsIHBhbmdvLkVMTElQU0laRV9FTkQpCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiRmlsZSBOYW1lIikKKwkJY29sdW1uLnNldF9yZXNpemFibGUoVHJ1ZSkKKwkJY29sdW1uLnBhY2tfc3RhcnQoY2VsbCwgZXhwYW5kPVRydWUpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJ0ZXh0IiwgMSkKKwkJc2VsZi50cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKworCQljZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorCQljZWxsLnNldF9wcm9wZXJ0eSgid2lkdGgtY2hhcnMiLCAyMCkKKwkJY2VsbC5zZXRfcHJvcGVydHkoImVsbGlwc2l6ZSIsIHBhbmdvLkVMTElQU0laRV9FTkQpCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiRGF0YSIpCisJCWNvbHVtbi5zZXRfcmVzaXphYmxlKFRydWUpCisJCWNvbHVtbi5wYWNrX3N0YXJ0KGNlbGwsIGV4cGFuZD1UcnVlKQorCQljb2x1bW4uYWRkX2F0dHJpYnV0ZShjZWxsLCAidGV4dCIsIDIpCisJCXNlbGYudHJlZXZpZXcuYXBwZW5kX2NvbHVtbihjb2x1bW4pCisKKwkJIyBUaGUgY29tbWl0IG1lc3NhZ2Ugd2luZG93CisJCXNjcm9sbHdpbiA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisJCXNjcm9sbHdpbi5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKwkJc2Nyb2xsd2luLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorCQl2cGFuLnBhY2syKHNjcm9sbHdpbiwgVHJ1ZSwgVHJ1ZSk7CisJCXNjcm9sbHdpbi5zaG93KCkKKworCQljb21taXRfdGV4dCA9IGd0ay5UZXh0VmlldygpCisJCXNlbGYuY29tbWl0X2J1ZmZlciA9IGd0ay5UZXh0QnVmZmVyKCkKKwkJY29tbWl0X3RleHQuc2V0X2J1ZmZlcihzZWxmLmNvbW1pdF9idWZmZXIpCisJCXNjcm9sbHdpbi5hZGQoY29tbWl0X3RleHQpCisJCWNvbW1pdF90ZXh0LnNob3coKQorCisJCXNlbGYud2luZG93LnNob3coKQorCisJCXNlbGYuYWRkX2ZpbGVfZGF0YShmaWxlbmFtZSwgY29tbWl0X3NoYTEsIGxpbmVfbnVtKQorCisJCWZwID0gb3MucG9wZW4oImdpdCBibGFtZSAtLWluY3JlbWVudGFsIC1DIC1DIC0tICIgKyBmaWxlbmFtZSArICIgIiArIGNvbW1pdF9zaGExKQorCQlmbGFncyA9IGZjbnRsLmZjbnRsKGZwLmZpbGVubygpLCBmY250bC5GX0dFVEZMKQorCQlmY250bC5mY250bChmcC5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgZmxhZ3MgfCBvcy5PX05PTkJMT0NLKQorCQlzZWxmLmlvX3dhdGNoX3RhZyA9IGdvYmplY3QuaW9fYWRkX3dhdGNoKGZwLCBnb2JqZWN0LklPX0lOLCBzZWxmLmRhdGFfcmVhZHkpCisKKworY2xhc3MgRGlmZldpbmRvdyhvYmplY3QpOgorCSIiIkRpZmYgd2luZG93LgorCVRoaXMgb2JqZWN0IHJlcHJlc2VudHMgYW5kIG1hbmFnZXMgYSBzaW5nbGUgd2luZG93IGNvbnRhaW5pbmcgdGhlCisJZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gcmV2aXNpb25zIG9uIGEgYnJhbmNoLgorCSIiIgorCisJZGVmIF9faW5pdF9fKHNlbGYpOgorCQlzZWxmLndpbmRvdyA9IGd0ay5XaW5kb3coZ3RrLldJTkRPV19UT1BMRVZFTCkKKwkJc2VsZi53aW5kb3cuc2V0X2JvcmRlcl93aWR0aCgwKQorCQlzZWxmLndpbmRvdy5zZXRfdGl0bGUoIkdpdCByZXBvc2l0b3J5IGJyb3dzZXIgZGlmZiB3aW5kb3ciKQorCisJCSMgVXNlIHR3byB0aGlyZHMgb2YgdGhlIHNjcmVlbiBieSBkZWZhdWx0CisJCXNjcmVlbiA9IHNlbGYud2luZG93LmdldF9zY3JlZW4oKQorCQltb25pdG9yID0gc2NyZWVuLmdldF9tb25pdG9yX2dlb21ldHJ5KDApCisJCXdpZHRoID0gaW50KG1vbml0b3Iud2lkdGggKiAwLjY2KQorCQloZWlnaHQgPSBpbnQobW9uaXRvci5oZWlnaHQgKiAwLjY2KQorCQlzZWxmLndpbmRvdy5zZXRfZGVmYXVsdF9zaXplKHdpZHRoLCBoZWlnaHQpCisKKworCQlzZWxmLmNvbnN0cnVjdCgpCisKKwlkZWYgY29uc3RydWN0KHNlbGYpOgorCQkiIiJDb25zdHJ1Y3QgdGhlIHdpbmRvdyBjb250ZW50cy4iIiIKKwkJdmJveCA9IGd0ay5WQm94KCkKKwkJc2VsZi53aW5kb3cuYWRkKHZib3gpCisJCXZib3guc2hvdygpCisKKwkJbWVudV9iYXIgPSBndGsuTWVudUJhcigpCisJCXNhdmVfbWVudSA9IGd0ay5JbWFnZU1lbnVJdGVtKGd0ay5TVE9DS19TQVZFKQorCQlzYXZlX21lbnUuY29ubmVjdCgiYWN0aXZhdGUiLCBzZWxmLnNhdmVfbWVudV9yZXNwb25zZSwgInNhdmUiKQorCQlzYXZlX21lbnUuc2hvdygpCisJCW1lbnVfYmFyLmFwcGVuZChzYXZlX21lbnUpCisJCXZib3gucGFja19zdGFydChtZW51X2JhciwgZXhwYW5kPUZhbHNlLCBmaWxsPVRydWUpCisJCW1lbnVfYmFyLnNob3coKQorCisJCWhwYW4gPSBndGsuSFBhbmVkKCkKKworCQlzY3JvbGx3aW4gPSBndGsuU2Nyb2xsZWRXaW5kb3coKQorCQlzY3JvbGx3aW4uc2V0X3BvbGljeShndGsuUE9MSUNZX0FVVE9NQVRJQywgZ3RrLlBPTElDWV9BVVRPTUFUSUMpCisJCXNjcm9sbHdpbi5zZXRfc2hhZG93X3R5cGUoZ3RrLlNIQURPV19JTikKKwkJaHBhbi5wYWNrMShzY3JvbGx3aW4sIFRydWUsIFRydWUpCisJCXNjcm9sbHdpbi5zaG93KCkKKworCQkoc2VsZi5idWZmZXIsIHNvdXJjZXZpZXcpID0gZ2V0X3NvdXJjZV9idWZmZXJfYW5kX3ZpZXcoKQorCisJCXNvdXJjZXZpZXcuc2V0X2VkaXRhYmxlKEZhbHNlKQorCQlzb3VyY2V2aWV3Lm1vZGlmeV9mb250KHBhbmdvLkZvbnREZXNjcmlwdGlvbigiTW9ub3NwYWNlIikpCisJCXNjcm9sbHdpbi5hZGQoc291cmNldmlldykKKwkJc291cmNldmlldy5zaG93KCkKKworCQkjIFRoZSBmaWxlIGhpZXJhcmNoeTogYSBzY3JvbGxhYmxlIHRyZWV2aWV3CisJCXNjcm9sbHdpbiA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisJCXNjcm9sbHdpbi5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKwkJc2Nyb2xsd2luLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorCQlzY3JvbGx3aW4uc2V0X3NpemVfcmVxdWVzdCgyMCwgLTEpCisJCWhwYW4ucGFjazIoc2Nyb2xsd2luLCBUcnVlLCBUcnVlKQorCQlzY3JvbGx3aW4uc2hvdygpCisKKwkJc2VsZi5tb2RlbCA9IGd0ay5UcmVlU3RvcmUoc3RyLCBzdHIsIHN0cikKKwkJc2VsZi50cmVldmlldyA9IGd0ay5UcmVlVmlldyhzZWxmLm1vZGVsKQorCQlzZWxmLnRyZWV2aWV3LnNldF9zZWFyY2hfY29sdW1uKDEpCisJCXNlbGYudHJlZXZpZXcuY29ubmVjdCgiY3Vyc29yLWNoYW5nZWQiLCBzZWxmLl90cmVldmlld19jbGlja2VkKQorCQlzY3JvbGx3aW4uYWRkKHNlbGYudHJlZXZpZXcpCisJCXNlbGYudHJlZXZpZXcuc2hvdygpCisKKwkJY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKwkJY2VsbC5zZXRfcHJvcGVydHkoIndpZHRoLWNoYXJzIiwgMjApCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiU2VsZWN0IHRvIGFubm90YXRlIikKKwkJY29sdW1uLnBhY2tfc3RhcnQoY2VsbCwgZXhwYW5kPVRydWUpCisJCWNvbHVtbi5hZGRfYXR0cmlidXRlKGNlbGwsICJ0ZXh0IiwgMCkKKwkJc2VsZi50cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKworCQl2Ym94LnBhY2tfc3RhcnQoaHBhbiwgZXhwYW5kPVRydWUsIGZpbGw9VHJ1ZSkKKwkJaHBhbi5zaG93KCkKKworCWRlZiBfdHJlZXZpZXdfY2xpY2tlZChzZWxmLCAqYXJncyk6CisJCSIiIkNhbGxiYWNrIGZvciB3aGVuIHRoZSB0cmVldmlldyBjdXJzb3IgY2hhbmdlcy4iIiIKKwkJKHBhdGgsIGNvbCkgPSBzZWxmLnRyZWV2aWV3LmdldF9jdXJzb3IoKQorCQlzcGVjaWZpY19maWxlID0gc2VsZi5tb2RlbFtwYXRoXVsxXQorCQljb21taXRfc2hhMSA9ICBzZWxmLm1vZGVsW3BhdGhdWzJdCisJCWlmIHNwZWNpZmljX2ZpbGUgPT0gIE5vbmUgOgorCQkJcmV0dXJuCisJCWVsaWYgc3BlY2lmaWNfZmlsZSA9PSAgIiIgOgorCQkJc3BlY2lmaWNfZmlsZSA9ICBOb25lCisKKwkJd2luZG93ID0gQW5ub3RhdGVXaW5kb3coKTsKKwkJd2luZG93LmFubm90YXRlKHNwZWNpZmljX2ZpbGUsIGNvbW1pdF9zaGExLCAxKQorCisKKwlkZWYgY29tbWl0X2ZpbGVzKHNlbGYsIGNvbW1pdF9zaGExLCBwYXJlbnRfc2hhMSk6CisJCXNlbGYubW9kZWwuY2xlYXIoKQorCQlhZGQgID0gc2VsZi5tb2RlbC5hcHBlbmQoTm9uZSwgWyAiQWRkZWQiLCBOb25lLCBOb25lXSkKKwkJZGVsZSA9IHNlbGYubW9kZWwuYXBwZW5kKE5vbmUsIFsgIkRlbGV0ZWQiLCBOb25lLCBOb25lXSkKKwkJbW9kICA9IHNlbGYubW9kZWwuYXBwZW5kKE5vbmUsIFsgIk1vZGlmaWVkIiwgTm9uZSwgTm9uZV0pCisJCWRpZmZfdHJlZSA9IHJlLmNvbXBpbGUoJ14oOi57Nn0pICguezZ9KSAoLns0MH0pICguezQwfSkgKEF8RHxNKVxzKC4rKSQnKQorCQlmcCA9IG9zLnBvcGVuKCJnaXQgZGlmZi10cmVlIC1yIC0tbm8tY29tbWl0LWlkICIgKyBwYXJlbnRfc2hhMSArICIgIiArIGNvbW1pdF9zaGExKQorCQl3aGlsZSAxOgorCQkJbGluZSA9IHN0cmluZy5zdHJpcChmcC5yZWFkbGluZSgpKQorCQkJaWYgbGluZSA9PSAnJzoKKwkJCQlicmVhaworCQkJbSA9IGRpZmZfdHJlZS5tYXRjaChsaW5lKQorCQkJaWYgbm90IG06CisJCQkJY29udGludWUKKworCQkJYXR0ciA9IG0uZ3JvdXAoNSkKKwkJCWZpbGVuYW1lID0gbS5ncm91cCg2KQorCQkJaWYgYXR0ciA9PSAiQSI6CisJCQkJc2VsZi5tb2RlbC5hcHBlbmQoYWRkLCAgW2ZpbGVuYW1lLCBmaWxlbmFtZSwgY29tbWl0X3NoYTFdKQorCQkJZWxpZiBhdHRyID09ICJEIjoKKwkJCQlzZWxmLm1vZGVsLmFwcGVuZChkZWxlLCBbZmlsZW5hbWUsIGZpbGVuYW1lLCBjb21taXRfc2hhMV0pCisJCQllbGlmIGF0dHIgPT0gIk0iOgorCQkJCXNlbGYubW9kZWwuYXBwZW5kKG1vZCwgIFtmaWxlbmFtZSwgZmlsZW5hbWUsIGNvbW1pdF9zaGExXSkKKwkJZnAuY2xvc2UoKQorCisJCXNlbGYudHJlZXZpZXcuZXhwYW5kX2FsbCgpCisKKwlkZWYgc2V0X2RpZmYoc2VsZiwgY29tbWl0X3NoYTEsIHBhcmVudF9zaGExLCBlbmNvZGluZyk6CisJCSIiIlNldCB0aGUgZGlmZmVyZW5jZXMgc2hvd2VkIGJ5IHRoaXMgd2luZG93LgorCQlDb21wYXJlcyB0aGUgdHdvIHRyZWVzIGFuZCBwb3B1bGF0ZXMgdGhlIHdpbmRvdyB3aXRoIHRoZQorCQlkaWZmZXJlbmNlcy4KKwkJIiIiCisJCSMgRGlmZiB3aXRoIHRoZSBmaXJzdCBjb21taXQgb3IgdGhlIGxhc3QgY29tbWl0IHNob3dzIG5vdGhpbmcKKwkJaWYgKGNvbW1pdF9zaGExID09IDAgb3IgcGFyZW50X3NoYTEgPT0gMCApOgorCQkJcmV0dXJuCisKKwkJZnAgPSBvcy5wb3BlbigiZ2l0IGRpZmYtdHJlZSAtcCAiICsgcGFyZW50X3NoYTEgKyAiICIgKyBjb21taXRfc2hhMSkKKwkJc2VsZi5idWZmZXIuc2V0X3RleHQodW5pY29kZShmcC5yZWFkKCksIGVuY29kaW5nKS5lbmNvZGUoJ3V0Zi04JykpCisJCWZwLmNsb3NlKCkKKwkJc2VsZi5jb21taXRfZmlsZXMoY29tbWl0X3NoYTEsIHBhcmVudF9zaGExKQorCQlzZWxmLndpbmRvdy5zaG93KCkKKworCWRlZiBzYXZlX21lbnVfcmVzcG9uc2Uoc2VsZiwgd2lkZ2V0LCBzdHJpbmcpOgorCQlkaWFsb2cgPSBndGsuRmlsZUNob29zZXJEaWFsb2coIlNhdmUuLiIsIE5vbmUsIGd0ay5GSUxFX0NIT09TRVJfQUNUSU9OX1NBVkUsCisJCQkJKGd0ay5TVE9DS19DQU5DRUwsIGd0ay5SRVNQT05TRV9DQU5DRUwsCisJCQkJCWd0ay5TVE9DS19TQVZFLCBndGsuUkVTUE9OU0VfT0spKQorCQlkaWFsb2cuc2V0X2RlZmF1bHRfcmVzcG9uc2UoZ3RrLlJFU1BPTlNFX09LKQorCQlyZXNwb25zZSA9IGRpYWxvZy5ydW4oKQorCQlpZiByZXNwb25zZSA9PSBndGsuUkVTUE9OU0VfT0s6CisJCQlwYXRjaF9idWZmZXIgPSBzZWxmLmJ1ZmZlci5nZXRfdGV4dChzZWxmLmJ1ZmZlci5nZXRfc3RhcnRfaXRlcigpLAorCQkJCQlzZWxmLmJ1ZmZlci5nZXRfZW5kX2l0ZXIoKSkKKwkJCWZwID0gb3BlbihkaWFsb2cuZ2V0X2ZpbGVuYW1lKCksICJ3IikKKwkJCWZwLndyaXRlKHBhdGNoX2J1ZmZlcikKKwkJCWZwLmNsb3NlKCkKKwkJZGlhbG9nLmRlc3Ryb3koKQorCitjbGFzcyBHaXRWaWV3KG9iamVjdCk6CisJIiIiIFRoaXMgaXMgdGhlIG1haW4gY2xhc3MKKwkiIiIKKwl2ZXJzaW9uID0gIjAuOSIKKworCWRlZiBfX2luaXRfXyhzZWxmLCB3aXRoX2RpZmY9MCk6CisJCXNlbGYud2l0aF9kaWZmID0gd2l0aF9kaWZmCisJCXNlbGYud2luZG93ID0JZ3RrLldpbmRvdyhndGsuV0lORE9XX1RPUExFVkVMKQorCQlzZWxmLndpbmRvdy5zZXRfYm9yZGVyX3dpZHRoKDApCisJCXNlbGYud2luZG93LnNldF90aXRsZSgiR2l0IHJlcG9zaXRvcnkgYnJvd3NlciIpCisKKwkJc2VsZi5nZXRfZW5jb2RpbmcoKQorCQlzZWxmLmdldF9idF9zaGExKCkKKworCQkjIFVzZSB0aHJlZS1xdWFydGVycyBvZiB0aGUgc2NyZWVuIGJ5IGRlZmF1bHQKKwkJc2NyZWVuID0gc2VsZi53aW5kb3cuZ2V0X3NjcmVlbigpCisJCW1vbml0b3IgPSBzY3JlZW4uZ2V0X21vbml0b3JfZ2VvbWV0cnkoMCkKKwkJd2lkdGggPSBpbnQobW9uaXRvci53aWR0aCAqIDAuNzUpCisJCWhlaWdodCA9IGludChtb25pdG9yLmhlaWdodCAqIDAuNzUpCisJCXNlbGYud2luZG93LnNldF9kZWZhdWx0X3NpemUod2lkdGgsIGhlaWdodCkKKworCQkjIEZJWE1FIEFuZHlGaXR6IQorCQlpY29uID0gc2VsZi53aW5kb3cucmVuZGVyX2ljb24oZ3RrLlNUT0NLX0lOREVYLCBndGsuSUNPTl9TSVpFX0JVVFRPTikKKwkJc2VsZi53aW5kb3cuc2V0X2ljb24oaWNvbikKKworCQlzZWxmLmFjY2VsX2dyb3VwID0gZ3RrLkFjY2VsR3JvdXAoKQorCQlzZWxmLndpbmRvdy5hZGRfYWNjZWxfZ3JvdXAoc2VsZi5hY2NlbF9ncm91cCkKKwkJc2VsZi5hY2NlbF9ncm91cC5jb25uZWN0X2dyb3VwKDB4ZmZjMiwgMCwgZ3RrLkFDQ0VMX0xPQ0tFRCwgc2VsZi5yZWZyZXNoKTsKKwkJc2VsZi5hY2NlbF9ncm91cC5jb25uZWN0X2dyb3VwKDB4ZmZjMSwgMCwgZ3RrLkFDQ0VMX0xPQ0tFRCwgc2VsZi5tYXhpbWl6ZSk7CisJCXNlbGYuYWNjZWxfZ3JvdXAuY29ubmVjdF9ncm91cCgweGZmYzgsIDAsIGd0ay5BQ0NFTF9MT0NLRUQsIHNlbGYuZnVsbHNjcmVlbik7CisJCXNlbGYuYWNjZWxfZ3JvdXAuY29ubmVjdF9ncm91cCgweGZmYzksIDAsIGd0ay5BQ0NFTF9MT0NLRUQsIHNlbGYudW5mdWxsc2NyZWVuKTsKKworCQlzZWxmLndpbmRvdy5hZGQoc2VsZi5jb25zdHJ1Y3QoKSkKKworCWRlZiByZWZyZXNoKHNlbGYsIHdpZGdldCwgZXZlbnQ9Tm9uZSwgKmFyZ3VtZW50cywgKiprZXl3b3Jkcyk6CisJCXNlbGYuZ2V0X2VuY29kaW5nKCkKKwkJc2VsZi5nZXRfYnRfc2hhMSgpCisJCUNvbW1pdC5jaGlsZHJlbl9zaGExID0ge30KKwkJc2VsZi5zZXRfYnJhbmNoKHN5cy5hcmd2W3dpdGhvdXRfZGlmZjpdKQorCQlzZWxmLndpbmRvdy5zaG93KCkKKwkJcmV0dXJuIFRydWUKKworCWRlZiBtYXhpbWl6ZShzZWxmLCB3aWRnZXQsIGV2ZW50PU5vbmUsICphcmd1bWVudHMsICoqa2V5d29yZHMpOgorCQlzZWxmLndpbmRvdy5tYXhpbWl6ZSgpCisJCXJldHVybiBUcnVlCisKKwlkZWYgZnVsbHNjcmVlbihzZWxmLCB3aWRnZXQsIGV2ZW50PU5vbmUsICphcmd1bWVudHMsICoqa2V5d29yZHMpOgorCQlzZWxmLndpbmRvdy5mdWxsc2NyZWVuKCkKKwkJcmV0dXJuIFRydWUKKworCWRlZiB1bmZ1bGxzY3JlZW4oc2VsZiwgd2lkZ2V0LCBldmVudD1Ob25lLCAqYXJndW1lbnRzLCAqKmtleXdvcmRzKToKKwkJc2VsZi53aW5kb3cudW5mdWxsc2NyZWVuKCkKKwkJcmV0dXJuIFRydWUKKworCWRlZiBnZXRfYnRfc2hhMShzZWxmKToKKwkJIiIiIFVwZGF0ZSB0aGUgYnRfc2hhMSBkaWN0aW9uYXJ5IHdpdGggdGhlCisJCXJlc3BlY3RpdmUgc2hhMSBkZXRhaWxzICIiIgorCisJCXNlbGYuYnRfc2hhMSA9IHsgfQorCQlsc19yZW1vdGUgPSByZS5jb21waWxlKCdeKC57NDB9KVx0cmVmcy8oW15eXSspKD86XFxeKC4uKSk/JCcpOworCQlmcCA9IG9zLnBvcGVuKCdnaXQgbHMtcmVtb3RlICIke0dJVF9ESVItLmdpdH0iJykKKwkJd2hpbGUgMToKKwkJCWxpbmUgPSBzdHJpbmcuc3RyaXAoZnAucmVhZGxpbmUoKSkKKwkJCWlmIGxpbmUgPT0gJyc6CisJCQkJYnJlYWsKKwkJCW0gPSBsc19yZW1vdGUubWF0Y2gobGluZSkKKwkJCWlmIG5vdCBtOgorCQkJCWNvbnRpbnVlCisJCQkoc2hhMSwgbmFtZSkgPSAobS5ncm91cCgxKSwgbS5ncm91cCgyKSkKKwkJCWlmIG5vdCBzZWxmLmJ0X3NoYTEuaGFzX2tleShzaGExKToKKwkJCQlzZWxmLmJ0X3NoYTFbc2hhMV0gPSBbXQorCQkJc2VsZi5idF9zaGExW3NoYTFdLmFwcGVuZChuYW1lKQorCQlmcC5jbG9zZSgpCisKKwlkZWYgZ2V0X2VuY29kaW5nKHNlbGYpOgorCQlmcCA9IG9zLnBvcGVuKCJnaXQgY29uZmlnIC0tZ2V0IGkxOG4uY29tbWl0ZW5jb2RpbmciKQorCQlzZWxmLmVuY29kaW5nPXN0cmluZy5zdHJpcChmcC5yZWFkbGluZSgpKQorCQlmcC5jbG9zZSgpCisJCWlmIChzZWxmLmVuY29kaW5nID09ICIiKToKKwkJCXNlbGYuZW5jb2RpbmcgPSAidXRmLTgiCisKKworCWRlZiBjb25zdHJ1Y3Qoc2VsZik6CisJCSIiIkNvbnN0cnVjdCB0aGUgd2luZG93IGNvbnRlbnRzLiIiIgorCQl2Ym94ID0gZ3RrLlZCb3goKQorCQlwYW5lZCA9IGd0ay5WUGFuZWQoKQorCQlwYW5lZC5wYWNrMShzZWxmLmNvbnN0cnVjdF90b3AoKSwgcmVzaXplPUZhbHNlLCBzaHJpbms9VHJ1ZSkKKwkJcGFuZWQucGFjazIoc2VsZi5jb25zdHJ1Y3RfYm90dG9tKCksIHJlc2l6ZT1GYWxzZSwgc2hyaW5rPVRydWUpCisJCW1lbnVfYmFyID0gZ3RrLk1lbnVCYXIoKQorCQltZW51X2Jhci5zZXRfcGFja19kaXJlY3Rpb24oZ3RrLlBBQ0tfRElSRUNUSU9OX1JUTCkKKwkJaGVscF9tZW51ID0gZ3RrLk1lbnVJdGVtKCJIZWxwIikKKwkJbWVudSA9IGd0ay5NZW51KCkKKwkJYWJvdXRfbWVudSA9IGd0ay5NZW51SXRlbSgiQWJvdXQiKQorCQltZW51LmFwcGVuZChhYm91dF9tZW51KQorCQlhYm91dF9tZW51LmNvbm5lY3QoImFjdGl2YXRlIiwgc2VsZi5hYm91dF9tZW51X3Jlc3BvbnNlLCAiYWJvdXQiKQorCQlhYm91dF9tZW51LnNob3coKQorCQloZWxwX21lbnUuc2V0X3N1Ym1lbnUobWVudSkKKwkJaGVscF9tZW51LnNob3coKQorCQltZW51X2Jhci5hcHBlbmQoaGVscF9tZW51KQorCQltZW51X2Jhci5zaG93KCkKKwkJdmJveC5wYWNrX3N0YXJ0KG1lbnVfYmFyLCBleHBhbmQ9RmFsc2UsIGZpbGw9VHJ1ZSkKKwkJdmJveC5wYWNrX3N0YXJ0KHBhbmVkLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCQlwYW5lZC5zaG93KCkKKwkJdmJveC5zaG93KCkKKwkJcmV0dXJuIHZib3gKKworCisJZGVmIGNvbnN0cnVjdF90b3Aoc2VsZik6CisJCSIiIkNvbnN0cnVjdCB0aGUgdG9wLWhhbGYgb2YgdGhlIHdpbmRvdy4iIiIKKwkJdmJveCA9IGd0ay5WQm94KHNwYWNpbmc9NikKKwkJdmJveC5zZXRfYm9yZGVyX3dpZHRoKDEyKQorCQl2Ym94LnNob3coKQorCisKKwkJc2Nyb2xsd2luID0gZ3RrLlNjcm9sbGVkV2luZG93KCkKKwkJc2Nyb2xsd2luLnNldF9wb2xpY3koZ3RrLlBPTElDWV9BVVRPTUFUSUMsIGd0ay5QT0xJQ1lfQVVUT01BVElDKQorCQlzY3JvbGx3aW4uc2V0X3NoYWRvd190eXBlKGd0ay5TSEFET1dfSU4pCisJCXZib3gucGFja19zdGFydChzY3JvbGx3aW4sIGV4cGFuZD1UcnVlLCBmaWxsPVRydWUpCisJCXNjcm9sbHdpbi5zaG93KCkKKworCQlzZWxmLnRyZWV2aWV3ID0gZ3RrLlRyZWVWaWV3KCkKKwkJc2VsZi50cmVldmlldy5zZXRfcnVsZXNfaGludChUcnVlKQorCQlzZWxmLnRyZWV2aWV3LnNldF9zZWFyY2hfY29sdW1uKDQpCisJCXNlbGYudHJlZXZpZXcuY29ubmVjdCgiY3Vyc29yLWNoYW5nZWQiLCBzZWxmLl90cmVldmlld19jdXJzb3JfY2IpCisJCXNjcm9sbHdpbi5hZGQoc2VsZi50cmVldmlldykKKwkJc2VsZi50cmVldmlldy5zaG93KCkKKworCQljZWxsID0gQ2VsbFJlbmRlcmVyR3JhcGgoKQorCQljb2x1bW4gPSBndGsuVHJlZVZpZXdDb2x1bW4oKQorCQljb2x1bW4uc2V0X3Jlc2l6YWJsZShUcnVlKQorCQljb2x1bW4ucGFja19zdGFydChjZWxsLCBleHBhbmQ9VHJ1ZSkKKwkJY29sdW1uLmFkZF9hdHRyaWJ1dGUoY2VsbCwgIm5vZGUiLCAxKQorCQljb2x1bW4uYWRkX2F0dHJpYnV0ZShjZWxsLCAiaW4tbGluZXMiLCAyKQorCQljb2x1bW4uYWRkX2F0dHJpYnV0ZShjZWxsLCAib3V0LWxpbmVzIiwgMykKKwkJc2VsZi50cmVldmlldy5hcHBlbmRfY29sdW1uKGNvbHVtbikKKworCQljZWxsID0gZ3RrLkNlbGxSZW5kZXJlclRleHQoKQorCQljZWxsLnNldF9wcm9wZXJ0eSgid2lkdGgtY2hhcnMiLCA2NSkKKwkJY2VsbC5zZXRfcHJvcGVydHkoImVsbGlwc2l6ZSIsIHBhbmdvLkVMTElQU0laRV9FTkQpCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiTWVzc2FnZSIpCisJCWNvbHVtbi5zZXRfcmVzaXphYmxlKFRydWUpCisJCWNvbHVtbi5wYWNrX3N0YXJ0KGNlbGwsIGV4cGFuZD1UcnVlKQorCQljb2x1bW4uYWRkX2F0dHJpYnV0ZShjZWxsLCAidGV4dCIsIDQpCisJCXNlbGYudHJlZXZpZXcuYXBwZW5kX2NvbHVtbihjb2x1bW4pCisKKwkJY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKwkJY2VsbC5zZXRfcHJvcGVydHkoIndpZHRoLWNoYXJzIiwgNDApCisJCWNlbGwuc2V0X3Byb3BlcnR5KCJlbGxpcHNpemUiLCBwYW5nby5FTExJUFNJWkVfRU5EKQorCQljb2x1bW4gPSBndGsuVHJlZVZpZXdDb2x1bW4oIkF1dGhvciIpCisJCWNvbHVtbi5zZXRfcmVzaXphYmxlKFRydWUpCisJCWNvbHVtbi5wYWNrX3N0YXJ0KGNlbGwsIGV4cGFuZD1UcnVlKQorCQljb2x1bW4uYWRkX2F0dHJpYnV0ZShjZWxsLCAidGV4dCIsIDUpCisJCXNlbGYudHJlZXZpZXcuYXBwZW5kX2NvbHVtbihjb2x1bW4pCisKKwkJY2VsbCA9IGd0ay5DZWxsUmVuZGVyZXJUZXh0KCkKKwkJY2VsbC5zZXRfcHJvcGVydHkoImVsbGlwc2l6ZSIsIHBhbmdvLkVMTElQU0laRV9FTkQpCisJCWNvbHVtbiA9IGd0ay5UcmVlVmlld0NvbHVtbigiRGF0ZSIpCisJCWNvbHVtbi5zZXRfcmVzaXphYmxlKFRydWUpCisJCWNvbHVtbi5wYWNrX3N0YXJ0KGNlbGwsIGV4cGFuZD1UcnVlKQorCQljb2x1bW4uYWRkX2F0dHJpYnV0ZShjZWxsLCAidGV4dCIsIDYpCisJCXNlbGYudHJlZXZpZXcuYXBwZW5kX2NvbHVtbihjb2x1bW4pCisKKwkJcmV0dXJuIHZib3gKKworCWRlZiBhYm91dF9tZW51X3Jlc3BvbnNlKHNlbGYsIHdpZGdldCwgc3RyaW5nKToKKwkJZGlhbG9nID0gZ3RrLkFib3V0RGlhbG9nKCkKKwkJZGlhbG9nLnNldF9uYW1lKCJHaXR2aWV3IikKKwkJZGlhbG9nLnNldF92ZXJzaW9uKEdpdFZpZXcudmVyc2lvbikKKwkJZGlhbG9nLnNldF9hdXRob3JzKFsiQW5lZXNoIEt1bWFyIEsuViA8YW5lZXNoLmt1bWFyQGdtYWlsLmNvbT4iXSkKKwkJZGlhbG9nLnNldF93ZWJzaXRlKCJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvIikKKwkJZGlhbG9nLnNldF9jb3B5cmlnaHQoIlVzZSBhbmQgZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIikKKwkJZGlhbG9nLnNldF93cmFwX2xpY2Vuc2UoVHJ1ZSkKKwkJZGlhbG9nLnJ1bigpCisJCWRpYWxvZy5kZXN0cm95KCkKKworCisJZGVmIGNvbnN0cnVjdF9ib3R0b20oc2VsZik6CisJCSIiIkNvbnN0cnVjdCB0aGUgYm90dG9tIGhhbGYgb2YgdGhlIHdpbmRvdy4iIiIKKwkJdmJveCA9IGd0ay5WQm94KEZhbHNlLCBzcGFjaW5nPTYpCisJCXZib3guc2V0X2JvcmRlcl93aWR0aCgxMikKKwkJKHdpZHRoLCBoZWlnaHQpID0gc2VsZi53aW5kb3cuZ2V0X3NpemUoKQorCQl2Ym94LnNldF9zaXplX3JlcXVlc3Qod2lkdGgsIGludChoZWlnaHQgLyAyLjUpKQorCQl2Ym94LnNob3coKQorCisJCXNlbGYudGFibGUgPSBndGsuVGFibGUocm93cz00LCBjb2x1bW5zPTQpCisJCXNlbGYudGFibGUuc2V0X3Jvd19zcGFjaW5ncyg2KQorCQlzZWxmLnRhYmxlLnNldF9jb2xfc3BhY2luZ3MoNikKKwkJdmJveC5wYWNrX3N0YXJ0KHNlbGYudGFibGUsIGV4cGFuZD1GYWxzZSwgZmlsbD1UcnVlKQorCQlzZWxmLnRhYmxlLnNob3coKQorCisJCWFsaWduID0gZ3RrLkFsaWdubWVudCgwLjAsIDAuNSkKKwkJbGFiZWwgPSBndGsuTGFiZWwoKQorCQlsYWJlbC5zZXRfbWFya3VwKCI8Yj5SZXZpc2lvbjo8L2I+IikKKwkJYWxpZ24uYWRkKGxhYmVsKQorCQlzZWxmLnRhYmxlLmF0dGFjaChhbGlnbiwgMCwgMSwgMCwgMSwgZ3RrLkZJTEwsIGd0ay5GSUxMKQorCQlsYWJlbC5zaG93KCkKKwkJYWxpZ24uc2hvdygpCisKKwkJYWxpZ24gPSBndGsuQWxpZ25tZW50KDAuMCwgMC41KQorCQlzZWxmLnJldmlkX2xhYmVsID0gZ3RrLkxhYmVsKCkKKwkJc2VsZi5yZXZpZF9sYWJlbC5zZXRfc2VsZWN0YWJsZShUcnVlKQorCQlhbGlnbi5hZGQoc2VsZi5yZXZpZF9sYWJlbCkKKwkJc2VsZi50YWJsZS5hdHRhY2goYWxpZ24sIDEsIDIsIDAsIDEsIGd0ay5FWFBBTkQgfCBndGsuRklMTCwgZ3RrLkZJTEwpCisJCXNlbGYucmV2aWRfbGFiZWwuc2hvdygpCisJCWFsaWduLnNob3coKQorCisJCWFsaWduID0gZ3RrLkFsaWdubWVudCgwLjAsIDAuNSkKKwkJbGFiZWwgPSBndGsuTGFiZWwoKQorCQlsYWJlbC5zZXRfbWFya3VwKCI8Yj5Db21taXR0ZXI6PC9iPiIpCisJCWFsaWduLmFkZChsYWJlbCkKKwkJc2VsZi50YWJsZS5hdHRhY2goYWxpZ24sIDAsIDEsIDEsIDIsIGd0ay5GSUxMLCBndGsuRklMTCkKKwkJbGFiZWwuc2hvdygpCisJCWFsaWduLnNob3coKQorCisJCWFsaWduID0gZ3RrLkFsaWdubWVudCgwLjAsIDAuNSkKKwkJc2VsZi5jb21taXR0ZXJfbGFiZWwgPSBndGsuTGFiZWwoKQorCQlzZWxmLmNvbW1pdHRlcl9sYWJlbC5zZXRfc2VsZWN0YWJsZShUcnVlKQorCQlhbGlnbi5hZGQoc2VsZi5jb21taXR0ZXJfbGFiZWwpCisJCXNlbGYudGFibGUuYXR0YWNoKGFsaWduLCAxLCAyLCAxLCAyLCBndGsuRVhQQU5EIHwgZ3RrLkZJTEwsIGd0ay5GSUxMKQorCQlzZWxmLmNvbW1pdHRlcl9sYWJlbC5zaG93KCkKKwkJYWxpZ24uc2hvdygpCisKKwkJYWxpZ24gPSBndGsuQWxpZ25tZW50KDAuMCwgMC41KQorCQlsYWJlbCA9IGd0ay5MYWJlbCgpCisJCWxhYmVsLnNldF9tYXJrdXAoIjxiPlRpbWVzdGFtcDo8L2I+IikKKwkJYWxpZ24uYWRkKGxhYmVsKQorCQlzZWxmLnRhYmxlLmF0dGFjaChhbGlnbiwgMCwgMSwgMiwgMywgZ3RrLkZJTEwsIGd0ay5GSUxMKQorCQlsYWJlbC5zaG93KCkKKwkJYWxpZ24uc2hvdygpCisKKwkJYWxpZ24gPSBndGsuQWxpZ25tZW50KDAuMCwgMC41KQorCQlzZWxmLnRpbWVzdGFtcF9sYWJlbCA9IGd0ay5MYWJlbCgpCisJCXNlbGYudGltZXN0YW1wX2xhYmVsLnNldF9zZWxlY3RhYmxlKFRydWUpCisJCWFsaWduLmFkZChzZWxmLnRpbWVzdGFtcF9sYWJlbCkKKwkJc2VsZi50YWJsZS5hdHRhY2goYWxpZ24sIDEsIDIsIDIsIDMsIGd0ay5FWFBBTkQgfCBndGsuRklMTCwgZ3RrLkZJTEwpCisJCXNlbGYudGltZXN0YW1wX2xhYmVsLnNob3coKQorCQlhbGlnbi5zaG93KCkKKworCQlhbGlnbiA9IGd0ay5BbGlnbm1lbnQoMC4wLCAwLjUpCisJCWxhYmVsID0gZ3RrLkxhYmVsKCkKKwkJbGFiZWwuc2V0X21hcmt1cCgiPGI+UGFyZW50czo8L2I+IikKKwkJYWxpZ24uYWRkKGxhYmVsKQorCQlzZWxmLnRhYmxlLmF0dGFjaChhbGlnbiwgMCwgMSwgMywgNCwgZ3RrLkZJTEwsIGd0ay5GSUxMKQorCQlsYWJlbC5zaG93KCkKKwkJYWxpZ24uc2hvdygpCisJCXNlbGYucGFyZW50c193aWRnZXRzID0gW10KKworCQlhbGlnbiA9IGd0ay5BbGlnbm1lbnQoMC4wLCAwLjUpCisJCWxhYmVsID0gZ3RrLkxhYmVsKCkKKwkJbGFiZWwuc2V0X21hcmt1cCgiPGI+Q2hpbGRyZW46PC9iPiIpCisJCWFsaWduLmFkZChsYWJlbCkKKwkJc2VsZi50YWJsZS5hdHRhY2goYWxpZ24sIDIsIDMsIDMsIDQsIGd0ay5GSUxMLCBndGsuRklMTCkKKwkJbGFiZWwuc2hvdygpCisJCWFsaWduLnNob3coKQorCQlzZWxmLmNoaWxkcmVuX3dpZGdldHMgPSBbXQorCisJCXNjcm9sbHdpbiA9IGd0ay5TY3JvbGxlZFdpbmRvdygpCisJCXNjcm9sbHdpbi5zZXRfcG9saWN5KGd0ay5QT0xJQ1lfQVVUT01BVElDLCBndGsuUE9MSUNZX0FVVE9NQVRJQykKKwkJc2Nyb2xsd2luLnNldF9zaGFkb3dfdHlwZShndGsuU0hBRE9XX0lOKQorCQl2Ym94LnBhY2tfc3RhcnQoc2Nyb2xsd2luLCBleHBhbmQ9VHJ1ZSwgZmlsbD1UcnVlKQorCQlzY3JvbGx3aW4uc2hvdygpCisKKwkJKHNlbGYubWVzc2FnZV9idWZmZXIsIHNvdXJjZXZpZXcpID0gZ2V0X3NvdXJjZV9idWZmZXJfYW5kX3ZpZXcoKQorCisJCXNvdXJjZXZpZXcuc2V0X2VkaXRhYmxlKEZhbHNlKQorCQlzb3VyY2V2aWV3Lm1vZGlmeV9mb250KHBhbmdvLkZvbnREZXNjcmlwdGlvbigiTW9ub3NwYWNlIikpCisJCXNjcm9sbHdpbi5hZGQoc291cmNldmlldykKKwkJc291cmNldmlldy5zaG93KCkKKworCQlyZXR1cm4gdmJveAorCisJZGVmIF90cmVldmlld19jdXJzb3JfY2Ioc2VsZiwgKmFyZ3MpOgorCQkiIiJDYWxsYmFjayBmb3Igd2hlbiB0aGUgdHJlZXZpZXcgY3Vyc29yIGNoYW5nZXMuIiIiCisJCShwYXRoLCBjb2wpID0gc2VsZi50cmVldmlldy5nZXRfY3Vyc29yKCkKKwkJY29tbWl0ID0gc2VsZi5tb2RlbFtwYXRoXVswXQorCisJCWlmIGNvbW1pdC5jb21taXR0ZXIgaXMgbm90IE5vbmU6CisJCQljb21taXR0ZXIgPSBjb21taXQuY29tbWl0dGVyCisJCQl0aW1lc3RhbXAgPSBjb21taXQuY29tbWl0X2RhdGUKKwkJCW1lc3NhZ2UgICA9ICBjb21taXQuZ2V0X21lc3NhZ2Uoc2VsZi53aXRoX2RpZmYpCisJCQlyZXZpZF9sYWJlbCA9IGNvbW1pdC5jb21taXRfc2hhMQorCQllbHNlOgorCQkJY29tbWl0dGVyID0gIiIKKwkJCXRpbWVzdGFtcCA9ICIiCisJCQltZXNzYWdlID0gIiIKKwkJCXJldmlkX2xhYmVsID0gIiIKKworCQlzZWxmLnJldmlkX2xhYmVsLnNldF90ZXh0KHJldmlkX2xhYmVsKQorCQlzZWxmLmNvbW1pdHRlcl9sYWJlbC5zZXRfdGV4dChjb21taXR0ZXIpCisJCXNlbGYudGltZXN0YW1wX2xhYmVsLnNldF90ZXh0KHRpbWVzdGFtcCkKKwkJc2VsZi5tZXNzYWdlX2J1ZmZlci5zZXRfdGV4dCh1bmljb2RlKG1lc3NhZ2UsIHNlbGYuZW5jb2RpbmcpLmVuY29kZSgndXRmLTgnKSkKKworCQlmb3Igd2lkZ2V0IGluIHNlbGYucGFyZW50c193aWRnZXRzOgorCQkJc2VsZi50YWJsZS5yZW1vdmUod2lkZ2V0KQorCisJCXNlbGYucGFyZW50c193aWRnZXRzID0gW10KKwkJc2VsZi50YWJsZS5yZXNpemUoNCArIGxlbihjb21taXQucGFyZW50X3NoYTEpIC0gMSwgNCkKKwkJZm9yIGlkeCwgcGFyZW50X2lkIGluIGVudW1lcmF0ZShjb21taXQucGFyZW50X3NoYTEpOgorCQkJc2VsZi50YWJsZS5zZXRfcm93X3NwYWNpbmcoaWR4ICsgMywgMCkKKworCQkJYWxpZ24gPSBndGsuQWxpZ25tZW50KDAuMCwgMC4wKQorCQkJc2VsZi5wYXJlbnRzX3dpZGdldHMuYXBwZW5kKGFsaWduKQorCQkJc2VsZi50YWJsZS5hdHRhY2goYWxpZ24sIDEsIDIsIGlkeCArIDMsIGlkeCArIDQsCisJCQkJCWd0ay5FWFBBTkQgfCBndGsuRklMTCwgZ3RrLkZJTEwpCisJCQlhbGlnbi5zaG93KCkKKworCQkJaGJveCA9IGd0ay5IQm94KEZhbHNlLCAwKQorCQkJYWxpZ24uYWRkKGhib3gpCisJCQloYm94LnNob3coKQorCisJCQlsYWJlbCA9IGd0ay5MYWJlbChwYXJlbnRfaWQpCisJCQlsYWJlbC5zZXRfc2VsZWN0YWJsZShUcnVlKQorCQkJaGJveC5wYWNrX3N0YXJ0KGxhYmVsLCBleHBhbmQ9RmFsc2UsIGZpbGw9VHJ1ZSkKKwkJCWxhYmVsLnNob3coKQorCisJCQlpbWFnZSA9IGd0ay5JbWFnZSgpCisJCQlpbWFnZS5zZXRfZnJvbV9zdG9jayhndGsuU1RPQ0tfSlVNUF9UTywgZ3RrLklDT05fU0laRV9NRU5VKQorCQkJaW1hZ2Uuc2hvdygpCisKKwkJCWJ1dHRvbiA9IGd0ay5CdXR0b24oKQorCQkJYnV0dG9uLmFkZChpbWFnZSkKKwkJCWJ1dHRvbi5zZXRfcmVsaWVmKGd0ay5SRUxJRUZfTk9ORSkKKwkJCWJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5fZ29fY2xpY2tlZF9jYiwgcGFyZW50X2lkKQorCQkJaGJveC5wYWNrX3N0YXJ0KGJ1dHRvbiwgZXhwYW5kPUZhbHNlLCBmaWxsPVRydWUpCisJCQlidXR0b24uc2hvdygpCisKKwkJCWltYWdlID0gZ3RrLkltYWdlKCkKKwkJCWltYWdlLnNldF9mcm9tX3N0b2NrKGd0ay5TVE9DS19GSU5ELCBndGsuSUNPTl9TSVpFX01FTlUpCisJCQlpbWFnZS5zaG93KCkKKworCQkJYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisJCQlidXR0b24uYWRkKGltYWdlKQorCQkJYnV0dG9uLnNldF9yZWxpZWYoZ3RrLlJFTElFRl9OT05FKQorCQkJYnV0dG9uLnNldF9zZW5zaXRpdmUoVHJ1ZSkKKwkJCWJ1dHRvbi5jb25uZWN0KCJjbGlja2VkIiwgc2VsZi5fc2hvd19jbGlja2VkX2NiLAorCQkJCQljb21taXQuY29tbWl0X3NoYTEsIHBhcmVudF9pZCwgc2VsZi5lbmNvZGluZykKKwkJCWhib3gucGFja19zdGFydChidXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1UcnVlKQorCQkJYnV0dG9uLnNob3coKQorCisJCSMgUG9wdWxhdGUgd2l0aCBjaGlsZCBkZXRhaWxzCisJCWZvciB3aWRnZXQgaW4gc2VsZi5jaGlsZHJlbl93aWRnZXRzOgorCQkJc2VsZi50YWJsZS5yZW1vdmUod2lkZ2V0KQorCisJCXNlbGYuY2hpbGRyZW5fd2lkZ2V0cyA9IFtdCisJCXRyeToKKwkJCWNoaWxkX3NoYTEgPSBDb21taXQuY2hpbGRyZW5fc2hhMVtjb21taXQuY29tbWl0X3NoYTFdCisJCWV4Y2VwdCBLZXlFcnJvcjoKKwkJCSMgV2UgZG9uJ3QgaGF2ZSBjaGlsZAorCQkJY2hpbGRfc2hhMSA9IFsgMCBdCisKKwkJaWYgKCBsZW4oY2hpbGRfc2hhMSkgPiBsZW4oY29tbWl0LnBhcmVudF9zaGExKSk6CisJCQlzZWxmLnRhYmxlLnJlc2l6ZSg0ICsgbGVuKGNoaWxkX3NoYTEpIC0gMSwgNCkKKworCQlmb3IgaWR4LCBjaGlsZF9pZCBpbiBlbnVtZXJhdGUoY2hpbGRfc2hhMSk6CisJCQlzZWxmLnRhYmxlLnNldF9yb3dfc3BhY2luZyhpZHggKyAzLCAwKQorCisJCQlhbGlnbiA9IGd0ay5BbGlnbm1lbnQoMC4wLCAwLjApCisJCQlzZWxmLmNoaWxkcmVuX3dpZGdldHMuYXBwZW5kKGFsaWduKQorCQkJc2VsZi50YWJsZS5hdHRhY2goYWxpZ24sIDMsIDQsIGlkeCArIDMsIGlkeCArIDQsCisJCQkJCWd0ay5FWFBBTkQgfCBndGsuRklMTCwgZ3RrLkZJTEwpCisJCQlhbGlnbi5zaG93KCkKKworCQkJaGJveCA9IGd0ay5IQm94KEZhbHNlLCAwKQorCQkJYWxpZ24uYWRkKGhib3gpCisJCQloYm94LnNob3coKQorCisJCQlsYWJlbCA9IGd0ay5MYWJlbChjaGlsZF9pZCkKKwkJCWxhYmVsLnNldF9zZWxlY3RhYmxlKFRydWUpCisJCQloYm94LnBhY2tfc3RhcnQobGFiZWwsIGV4cGFuZD1GYWxzZSwgZmlsbD1UcnVlKQorCQkJbGFiZWwuc2hvdygpCisKKwkJCWltYWdlID0gZ3RrLkltYWdlKCkKKwkJCWltYWdlLnNldF9mcm9tX3N0b2NrKGd0ay5TVE9DS19KVU1QX1RPLCBndGsuSUNPTl9TSVpFX01FTlUpCisJCQlpbWFnZS5zaG93KCkKKworCQkJYnV0dG9uID0gZ3RrLkJ1dHRvbigpCisJCQlidXR0b24uYWRkKGltYWdlKQorCQkJYnV0dG9uLnNldF9yZWxpZWYoZ3RrLlJFTElFRl9OT05FKQorCQkJYnV0dG9uLmNvbm5lY3QoImNsaWNrZWQiLCBzZWxmLl9nb19jbGlja2VkX2NiLCBjaGlsZF9pZCkKKwkJCWhib3gucGFja19zdGFydChidXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1UcnVlKQorCQkJYnV0dG9uLnNob3coKQorCisJCQlpbWFnZSA9IGd0ay5JbWFnZSgpCisJCQlpbWFnZS5zZXRfZnJvbV9zdG9jayhndGsuU1RPQ0tfRklORCwgZ3RrLklDT05fU0laRV9NRU5VKQorCQkJaW1hZ2Uuc2hvdygpCisKKwkJCWJ1dHRvbiA9IGd0ay5CdXR0b24oKQorCQkJYnV0dG9uLmFkZChpbWFnZSkKKwkJCWJ1dHRvbi5zZXRfcmVsaWVmKGd0ay5SRUxJRUZfTk9ORSkKKwkJCWJ1dHRvbi5zZXRfc2Vuc2l0aXZlKFRydWUpCisJCQlidXR0b24uY29ubmVjdCgiY2xpY2tlZCIsIHNlbGYuX3Nob3dfY2xpY2tlZF9jYiwKKwkJCQkJY2hpbGRfaWQsIGNvbW1pdC5jb21taXRfc2hhMSwgc2VsZi5lbmNvZGluZykKKwkJCWhib3gucGFja19zdGFydChidXR0b24sIGV4cGFuZD1GYWxzZSwgZmlsbD1UcnVlKQorCQkJYnV0dG9uLnNob3coKQorCisJZGVmIF9kZXN0cm95X2NiKHNlbGYsIHdpZGdldCk6CisJCSIiIkNhbGxiYWNrIGZvciB3aGVuIGEgd2luZG93IHdlIG1hbmFnZSBpcyBkZXN0cm95ZWQuIiIiCisJCXNlbGYucXVpdCgpCisKKworCWRlZiBxdWl0KHNlbGYpOgorCQkiIiJTdG9wIHRoZSBHVEsrIG1haW4gbG9vcC4iIiIKKwkJZ3RrLm1haW5fcXVpdCgpCisKKwlkZWYgcnVuKHNlbGYsIGFyZ3MpOgorCQlzZWxmLnNldF9icmFuY2goYXJncykKKwkJc2VsZi53aW5kb3cuY29ubmVjdCgiZGVzdHJveSIsIHNlbGYuX2Rlc3Ryb3lfY2IpCisJCXNlbGYud2luZG93LnNob3coKQorCQlndGsubWFpbigpCisKKwlkZWYgc2V0X2JyYW5jaChzZWxmLCBhcmdzKToKKwkJIiIiRmlsbCBpbiBkaWZmZXJlbnQgd2luZG93cyB3aXRoIGluZm8gZnJvbSB0aGUgcmVwb3Npcm90eSIiIgorCQlmcCA9IG9zLnBvcGVuKCJnaXQgcmV2LXBhcnNlIC0tc3EgLS1kZWZhdWx0IEhFQUQgIiArIGxpc3RfdG9fc3RyaW5nKGFyZ3MsIDEpKQorCQlnaXRfcmV2X2xpc3RfY21kID0gZnAucmVhZCgpCisJCWZwLmNsb3NlKCkKKwkJZnAgPSBvcy5wb3BlbigiZ2l0IHJldi1saXN0ICAtLWhlYWRlciAtLXRvcG8tb3JkZXIgLS1wYXJlbnRzICIgKyBnaXRfcmV2X2xpc3RfY21kKQorCQlzZWxmLnVwZGF0ZV93aW5kb3coZnApCisKKwlkZWYgdXBkYXRlX3dpbmRvdyhzZWxmLCBmcCk6CisJCWNvbW1pdF9saW5lcyA9IFtdCisKKwkJc2VsZi5tb2RlbCA9IGd0ay5MaXN0U3RvcmUoZ29iamVjdC5UWVBFX1BZT0JKRUNULCBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsCisJCQkJZ29iamVjdC5UWVBFX1BZT0JKRUNULCBnb2JqZWN0LlRZUEVfUFlPQkpFQ1QsIHN0ciwgc3RyLCBzdHIpCisKKwkJIyB1c2VkIGZvciBjdXJzb3IgcG9zaXRpb25pbmcKKwkJc2VsZi5pbmRleCA9IHt9CisKKwkJc2VsZi5jb2xvdXJzID0ge30KKwkJc2VsZi5ub2RlcG9zID0ge30KKwkJc2VsZi5pbmNvbXBsZXRlX2xpbmUgPSB7fQorCQlzZWxmLmNvbW1pdHMgPSBbXQorCisJCWluZGV4ID0gMAorCQlsYXN0X2NvbG91ciA9IDAKKwkJbGFzdF9ub2RlcG9zID0gLTEKKwkJb3V0X2xpbmUgPSBbXQorCQlpbnB1dF9saW5lID0gZnAucmVhZGxpbmUoKQorCQl3aGlsZSAoaW5wdXRfbGluZSAhPSAiIik6CisJCQkjIFRoZSBjb21taXQgaGVhZGVyIGVuZHMgd2l0aCAnXDAnCisJCQkjIFRoaXMgTlVMTCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSB0aGUgc2hhMSBvZiB0aGUKKwkJCSMgbmV4dCBjb21taXQKKwkJCWlmIChpbnB1dF9saW5lWzBdICE9ICdcMCcpOgorCQkJCWNvbW1pdF9saW5lcy5hcHBlbmQoaW5wdXRfbGluZSkKKwkJCQlpbnB1dF9saW5lID0gZnAucmVhZGxpbmUoKQorCQkJCWNvbnRpbnVlOworCisJCQljb21taXQgPSBDb21taXQoY29tbWl0X2xpbmVzKQorCQkJaWYgKGNvbW1pdCAhPSBOb25lICk6CisJCQkJc2VsZi5jb21taXRzLmFwcGVuZChjb21taXQpCisKKwkJCSMgU2tpcCB0aGUgJ1wwCisJCQljb21taXRfbGluZXMgPSBbXQorCQkJY29tbWl0X2xpbmVzLmFwcGVuZChpbnB1dF9saW5lWzE6XSkKKwkJCWlucHV0X2xpbmUgPSBmcC5yZWFkbGluZSgpCisKKwkJZnAuY2xvc2UoKQorCisJCWZvciBjb21taXQgaW4gc2VsZi5jb21taXRzOgorCQkJKG91dF9saW5lLCBsYXN0X2NvbG91ciwgbGFzdF9ub2RlcG9zKSA9IHNlbGYuZHJhd19ncmFwaChjb21taXQsCisJCQkJCQkJCQkJaW5kZXgsIG91dF9saW5lLAorCQkJCQkJCQkJCWxhc3RfY29sb3VyLAorCQkJCQkJCQkJCWxhc3Rfbm9kZXBvcykKKwkJCXNlbGYuaW5kZXhbY29tbWl0LmNvbW1pdF9zaGExXSA9IGluZGV4CisJCQlpbmRleCArPSAxCisKKwkJc2VsZi50cmVldmlldy5zZXRfbW9kZWwoc2VsZi5tb2RlbCkKKwkJc2VsZi50cmVldmlldy5zaG93KCkKKworCWRlZiBkcmF3X2dyYXBoKHNlbGYsIGNvbW1pdCwgaW5kZXgsIG91dF9saW5lLCBsYXN0X2NvbG91ciwgbGFzdF9ub2RlcG9zKToKKwkJaW5fbGluZT1bXQorCisJCSMgICB8ICAgLT4gb3V0bGluZQorCQkjICAgWAorCQkjICAgfFwgIDwtIGlubGluZQorCisJCSMgUmVzZXQgbm9kZXBvc3Rpb24KKwkJaWYgKGxhc3Rfbm9kZXBvcyA+IDUpOgorCQkJbGFzdF9ub2RlcG9zID0gLTEKKworCQkjIEFkZCB0aGUgaW5jb21wbGV0ZSBsaW5lcyBvZiB0aGUgbGFzdCBjZWxsIGluIHRoaXMKKwkJdHJ5OgorCQkJY29sb3VyID0gc2VsZi5jb2xvdXJzW2NvbW1pdC5jb21taXRfc2hhMV0KKwkJZXhjZXB0IEtleUVycm9yOgorCQkJc2VsZi5jb2xvdXJzW2NvbW1pdC5jb21taXRfc2hhMV0gPSBsYXN0X2NvbG91cisxCisJCQlsYXN0X2NvbG91ciA9IHNlbGYuY29sb3Vyc1tjb21taXQuY29tbWl0X3NoYTFdCisJCQljb2xvdXIgPSAgIHNlbGYuY29sb3Vyc1tjb21taXQuY29tbWl0X3NoYTFdCisKKwkJdHJ5OgorCQkJbm9kZV9wb3MgPSBzZWxmLm5vZGVwb3NbY29tbWl0LmNvbW1pdF9zaGExXQorCQlleGNlcHQgS2V5RXJyb3I6CisJCQlzZWxmLm5vZGVwb3NbY29tbWl0LmNvbW1pdF9zaGExXSA9IGxhc3Rfbm9kZXBvcysxCisJCQlsYXN0X25vZGVwb3MgPSBzZWxmLm5vZGVwb3NbY29tbWl0LmNvbW1pdF9zaGExXQorCQkJbm9kZV9wb3MgPSAgc2VsZi5ub2RlcG9zW2NvbW1pdC5jb21taXRfc2hhMV0KKworCQkjVGhlIGZpcnN0IHBhcmVudCBhbHdheXMgY29udGludWUgb24gdGhlIHNhbWUgbGluZQorCQl0cnk6CisJCQkjIGNoZWNrIHdlIGFscmVhZHkgaGF2ZSB0aGUgdmFsdWUKKwkJCXRtcF9ub2RlX3BvcyA9IHNlbGYubm9kZXBvc1tjb21taXQucGFyZW50X3NoYTFbMF1dCisJCWV4Y2VwdCBLZXlFcnJvcjoKKwkJCXNlbGYuY29sb3Vyc1tjb21taXQucGFyZW50X3NoYTFbMF1dID0gY29sb3VyCisJCQlzZWxmLm5vZGVwb3NbY29tbWl0LnBhcmVudF9zaGExWzBdXSA9IG5vZGVfcG9zCisKKwkJZm9yIHNoYTEgaW4gc2VsZi5pbmNvbXBsZXRlX2xpbmUua2V5cygpOgorCQkJaWYgKHNoYTEgIT0gY29tbWl0LmNvbW1pdF9zaGExKToKKwkJCQlzZWxmLmRyYXdfaW5jb21wbGV0ZV9saW5lKHNoYTEsIG5vZGVfcG9zLAorCQkJCQkJb3V0X2xpbmUsIGluX2xpbmUsIGluZGV4KQorCQkJZWxzZToKKwkJCQlkZWwgc2VsZi5pbmNvbXBsZXRlX2xpbmVbc2hhMV0KKworCisJCWZvciBwYXJlbnRfaWQgaW4gY29tbWl0LnBhcmVudF9zaGExOgorCQkJdHJ5OgorCQkJCXRtcF9ub2RlX3BvcyA9IHNlbGYubm9kZXBvc1twYXJlbnRfaWRdCisJCQlleGNlcHQgS2V5RXJyb3I6CisJCQkJc2VsZi5jb2xvdXJzW3BhcmVudF9pZF0gPSBsYXN0X2NvbG91cisxCisJCQkJbGFzdF9jb2xvdXIgPSBzZWxmLmNvbG91cnNbcGFyZW50X2lkXQorCQkJCXNlbGYubm9kZXBvc1twYXJlbnRfaWRdID0gbGFzdF9ub2RlcG9zKzEKKwkJCQlsYXN0X25vZGVwb3MgPSBzZWxmLm5vZGVwb3NbcGFyZW50X2lkXQorCisJCQlpbl9saW5lLmFwcGVuZCgobm9kZV9wb3MsIHNlbGYubm9kZXBvc1twYXJlbnRfaWRdLAorCQkJCQkJc2VsZi5jb2xvdXJzW3BhcmVudF9pZF0pKQorCQkJc2VsZi5hZGRfaW5jb21wbGV0ZV9saW5lKHBhcmVudF9pZCkKKworCQl0cnk6CisJCQlicmFuY2hfdGFnID0gc2VsZi5idF9zaGExW2NvbW1pdC5jb21taXRfc2hhMV0KKwkJZXhjZXB0IEtleUVycm9yOgorCQkJYnJhbmNoX3RhZyA9IFsgXQorCisKKwkJbm9kZSA9IChub2RlX3BvcywgY29sb3VyLCBicmFuY2hfdGFnKQorCisJCXNlbGYubW9kZWwuYXBwZW5kKFtjb21taXQsIG5vZGUsIG91dF9saW5lLCBpbl9saW5lLAorCQkJCWNvbW1pdC5tZXNzYWdlLCBjb21taXQuYXV0aG9yLCBjb21taXQuZGF0ZV0pCisKKwkJcmV0dXJuIChpbl9saW5lLCBsYXN0X2NvbG91ciwgbGFzdF9ub2RlcG9zKQorCisJZGVmIGFkZF9pbmNvbXBsZXRlX2xpbmUoc2VsZiwgc2hhMSk6CisJCXRyeToKKwkJCXNlbGYuaW5jb21wbGV0ZV9saW5lW3NoYTFdLmFwcGVuZChzZWxmLm5vZGVwb3Nbc2hhMV0pCisJCWV4Y2VwdCBLZXlFcnJvcjoKKwkJCXNlbGYuaW5jb21wbGV0ZV9saW5lW3NoYTFdID0gW3NlbGYubm9kZXBvc1tzaGExXV0KKworCWRlZiBkcmF3X2luY29tcGxldGVfbGluZShzZWxmLCBzaGExLCBub2RlX3Bvcywgb3V0X2xpbmUsIGluX2xpbmUsIGluZGV4KToKKwkJZm9yIGlkeCwgcG9zIGluIGVudW1lcmF0ZShzZWxmLmluY29tcGxldGVfbGluZVtzaGExXSk6CisJCQlpZihwb3MgPT0gbm9kZV9wb3MpOgorCQkJCSNyZW1vdmUgdGhlIHN0cmFpZ2h0IGxpbmUgYW5kIGFkZCBhIHNsYXNoCisJCQkJaWYgKChwb3MsIHBvcywgc2VsZi5jb2xvdXJzW3NoYTFdKSBpbiBvdXRfbGluZSk6CisJCQkJCW91dF9saW5lLnJlbW92ZSgocG9zLCBwb3MsIHNlbGYuY29sb3Vyc1tzaGExXSkpCisJCQkJb3V0X2xpbmUuYXBwZW5kKChwb3MsIHBvcyswLjUsIHNlbGYuY29sb3Vyc1tzaGExXSkpCisJCQkJc2VsZi5pbmNvbXBsZXRlX2xpbmVbc2hhMV1baWR4XSA9IHBvcyA9IHBvcyswLjUKKwkJCXRyeToKKwkJCQluZXh0X2NvbW1pdCA9IHNlbGYuY29tbWl0c1tpbmRleCsxXQorCQkJCWlmIChuZXh0X2NvbW1pdC5jb21taXRfc2hhMSA9PSBzaGExIGFuZCBwb3MgIT0gaW50KHBvcykpOgorCQkJCSMgam9pbiB0aGUgbGluZSBiYWNrIHRvIHRoZSBub2RlIHBvaW50CisJCQkJIyBUaGlzIG5lZWQgdG8gYmUgZG9uZSBvbmx5IGlmIHdlIG1vZGlmaWVkIGl0CisJCQkJCWluX2xpbmUuYXBwZW5kKChwb3MsIHBvcy0wLjUsIHNlbGYuY29sb3Vyc1tzaGExXSkpCisJCQkJCWNvbnRpbnVlOworCQkJZXhjZXB0IEluZGV4RXJyb3I6CisJCQkJcGFzcworCQkJaW5fbGluZS5hcHBlbmQoKHBvcywgcG9zLCBzZWxmLmNvbG91cnNbc2hhMV0pKQorCisKKwlkZWYgX2dvX2NsaWNrZWRfY2Ioc2VsZiwgd2lkZ2V0LCByZXZpZCk6CisJCSIiIkNhbGxiYWNrIGZvciB3aGVuIHRoZSBnbyBidXR0b24gZm9yIGEgcGFyZW50IGlzIGNsaWNrZWQuIiIiCisJCXRyeToKKwkJCXNlbGYudHJlZXZpZXcuc2V0X2N1cnNvcihzZWxmLmluZGV4W3JldmlkXSkKKwkJZXhjZXB0IEtleUVycm9yOgorCQkJZGlhbG9nID0gZ3RrLk1lc3NhZ2VEaWFsb2cocGFyZW50PU5vbmUsIGZsYWdzPTAsCisJCQkJCXR5cGU9Z3RrLk1FU1NBR0VfV0FSTklORywgYnV0dG9ucz1ndGsuQlVUVE9OU19DTE9TRSwKKwkJCQkJbWVzc2FnZV9mb3JtYXQ9Tm9uZSkKKwkJCWRpYWxvZy5zZXRfbWFya3VwKCJSZXZpc2lvbiA8Yj4lczwvYj4gbm90IHByZXNlbnQgaW4gdGhlIGxpc3QiICUgcmV2aWQpCisJCQkjIHJldmlkID09IDAgaXMgdGhlIHBhcmVudCBvZiB0aGUgZmlyc3QgY29tbWl0CisJCQlpZiAocmV2aWQgIT0gMCApOgorCQkJCWRpYWxvZy5mb3JtYXRfc2Vjb25kYXJ5X3RleHQoIlRyeSBydW5uaW5nIGdpdHZpZXcgd2l0aG91dCBhbnkgb3B0aW9ucyIpCisJCQlkaWFsb2cucnVuKCkKKwkJCWRpYWxvZy5kZXN0cm95KCkKKworCQlzZWxmLnRyZWV2aWV3LmdyYWJfZm9jdXMoKQorCisJZGVmIF9zaG93X2NsaWNrZWRfY2Ioc2VsZiwgd2lkZ2V0LCAgY29tbWl0X3NoYTEsIHBhcmVudF9zaGExLCBlbmNvZGluZyk6CisJCSIiIkNhbGxiYWNrIGZvciB3aGVuIHRoZSBzaG93IGJ1dHRvbiBmb3IgYSBwYXJlbnQgaXMgY2xpY2tlZC4iIiIKKwkJd2luZG93ID0gRGlmZldpbmRvdygpCisJCXdpbmRvdy5zZXRfZGlmZihjb21taXRfc2hhMSwgcGFyZW50X3NoYTEsIGVuY29kaW5nKQorCQlzZWxmLnRyZWV2aWV3LmdyYWJfZm9jdXMoKQorCit3aXRob3V0X2RpZmYgPSAwCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorCisJaWYgKGxlbihzeXMuYXJndikgPiAxICk6CisJCWlmIChzeXMuYXJndlsxXSA9PSAiLS13aXRob3V0LWRpZmYiKToKKwkJCXdpdGhvdXRfZGlmZiA9IDEKKworCXZpZXcgPSBHaXRWaWV3KCB3aXRob3V0X2RpZmYgIT0gMSkKKwl2aWV3LnJ1bihzeXMuYXJndlt3aXRob3V0X2RpZmY6XSkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ2l0dmlldy9naXR2aWV3LnR4dCBiL2NvbnRyaWIvZ2l0dmlldy9naXR2aWV3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjVmOTAwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9naXR2aWV3L2dpdHZpZXcudHh0CkBAIC0wLDAgKzEsNTcgQEAKK2dpdHZpZXcoMSkKKz09PT09PT09PT0KKworTkFNRQorLS0tLQorZ2l0dmlldyAtIEEgR1RLIGJhc2VkIHJlcG9zaXRvcnkgYnJvd3NlciBmb3IgZ2l0CisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorJ2dpdHZpZXcnIFtvcHRpb25zXSBbYXJnc10KKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLQorCitEZXBlbmRlbmNpZXM6CisKKyogUHl0aG9uIDIuNAorKiBQeUdUSyAyLjggb3IgbGF0ZXIKKyogUHlDYWlybyAxLjAgb3IgbGF0ZXIKKworT1BUSU9OUworLS0tLS0tLQorLS13aXRob3V0LWRpZmY6OgorCisJSWYgdGhlIHVzZXIgZG9lc24ndCB3YW50IHRvIGxpc3QgdGhlIGNvbW1pdCBkaWZmcyBpbiB0aGUgbWFpbiB3aW5kb3cuCisJVGhpcyBtYXkgc3BlZWQgdXAgdGhlIHJlcG9zaXRvcnkgYnJvd3NpbmcuCisKKzxhcmdzPjo6CisKKwlBbGwgdGhlIHZhbGlkIG9wdGlvbiBmb3IgbGlua2dpdDpnaXQtcmV2LWxpc3RbMV0uCisKK0tleSBCaW5kaW5ncworLS0tLS0tLS0tLS0tCitGNDo6CisJVG8gbWF4aW1pemUgdGhlIHdpbmRvdworCitGNTo6CisJVG8gcmVyZWFkIHJlZmVyZW5jZXMuCisKK0YxMTo6CisJRnVsbCBzY3JlZW4KKworRjEyOjoKKwlMZWF2ZSBmdWxsIHNjcmVlbgorCitFWEFNUExFUworLS0tLS0tLS0KKworZ2l0dmlldyB2Mi42LjEyLi4gaW5jbHVkZS9zY3NpIGRyaXZlcnMvc2NzaTo6CisKKwlTaG93IGFzIHRoZSBjaGFuZ2VzIHNpbmNlIHZlcnNpb24gdjIuNi4xMiB0aGF0IGNoYW5nZWQgYW55IGZpbGUgaW4gdGhlCisJaW5jbHVkZS9zY3NpIG9yIGRyaXZlcnMvc2NzaSBzdWJkaXJlY3RvcmllcworCitnaXR2aWV3IC0tc2luY2U9Mi53ZWVrcy5hZ286OgorCisJU2hvdyB0aGUgY2hhbmdlcyBkdXJpbmcgdGhlIGxhc3QgdHdvIHdlZWtzCmRpZmYgLS1naXQgYS9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQucHkgYi9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjBkZWM4NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC5weQpAQCAtMCwwICsxLDI1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIiBoZy10by1naXQucHkgLSBBIE1lcmN1cmlhbCB0byBHSVQgY29udmVydGVyCisKKyAgICBDb3B5cmlnaHQgKEMpMjAwNyBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisiIiIKKworaW1wb3J0IG9zLCBvcy5wYXRoLCBzeXMKK2ltcG9ydCB0ZW1wZmlsZSwgcGlja2xlLCBnZXRvcHQKK2ltcG9ydCByZQorCitpZiBzeXMuaGV4dmVyc2lvbiA8IDB4MDIwMzAwMDA6CisgICAjIFRoZSBiZWhhdmlvciBvZiB0aGUgcGlja2xlIG1vZHVsZSBjaGFuZ2VkIHNpZ25pZmljYW50bHkgaW4gMi4zCisgICBzeXMuc3RkZXJyLndyaXRlKCJoZy10by1naXQucHk6IHJlcXVpcmVzIFB5dGhvbiAyLjMgb3IgbGF0ZXIuXG4iKQorICAgc3lzLmV4aXQoMSkKKworIyBNYXBzIGhnIHZlcnNpb24gLT4gZ2l0IHZlcnNpb24KK2hndmVycyA9IHt9CisjIExpc3Qgb2YgY2hpbGRyZW4gZm9yIGVhY2ggaGcgcmV2aXNpb24KK2hnY2hpbGRyZW4gPSB7fQorIyBMaXN0IG9mIHBhcmVudHMgZm9yIGVhY2ggaGcgcmV2aXNpb24KK2hncGFyZW50cyA9IHt9CisjIEN1cnJlbnQgYnJhbmNoIGZvciBlYWNoIGhnIHJldmlzaW9uCitoZ2JyYW5jaCA9IHt9CisjIE51bWJlciBvZiBuZXcgY2hhbmdlc2V0cyBjb252ZXJ0ZWQgZnJvbSBoZworaGduZXdjc2V0cyA9IDAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkZWYgdXNhZ2UoKToKKworICAgICAgICBwcmludCAiIiJcCislczogW09QVElPTlNdIDxoZ3Byaj4KKworb3B0aW9uczoKKyAgICAtcywgLS1naXRzdGF0ZT1GSUxFOiBuYW1lIG9mIHRoZSBzdGF0ZSB0byBiZSBzYXZlZC9yZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGluY3JlbWVudGFscworICAgIC1uLCAtLW5yZXBhY2s9SU5UOiAgIG51bWJlciBvZiBjaGFuZ2VzZXRzIHRoYXQgd2lsbCB0cmlnZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICAgYSByZXBhY2sgKGRlZmF1bHQ9MCwgLTEgdG8gZGVhY3RpdmF0ZSkKKyAgICAtdiwgLS12ZXJib3NlOiAgICAgICBiZSB2ZXJib3NlCisKK3JlcXVpcmVkOgorICAgIGhncHJqOiAgbmFtZSBvZiB0aGUgSEcgcHJvamVjdCB0byBpbXBvcnQgKGRpcmVjdG9yeSkKKyIiIiAlIHN5cy5hcmd2WzBdCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIGdldGdpdGVudih1c2VyLCBkYXRlKToKKyAgICBlbnYgPSAnJworICAgIGVsZW1zID0gcmUuY29tcGlsZSgnKC4qPylccys8KC4qKT4nKS5tYXRjaCh1c2VyKQorICAgIGlmIGVsZW1zOgorICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQVVUSE9SX05BTUU9IiVzIiA7JyAlIGVsZW1zLmdyb3VwKDEpCisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9DT01NSVRURVJfTkFNRT0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMSkKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0FVVEhPUl9FTUFJTD0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMikKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVFRFUl9FTUFJTD0iJXMiIDsnICUgZWxlbXMuZ3JvdXAoMikKKyAgICBlbHNlOgorICAgICAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQVVUSE9SX05BTUU9IiVzIiA7JyAlIHVzZXIKKyAgICAgICAgZW52ICs9ICdleHBvcnQgR0lUX0NPTU1JVFRFUl9OQU1FPSIlcyIgOycgJSB1c2VyCisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUw9IDsnCisgICAgICAgIGVudiArPSAnZXhwb3J0IEdJVF9DT01NSVRURVJfRU1BSUw9IDsnCisKKyAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQVVUSE9SX0RBVEU9IiVzIiA7JyAlIGRhdGUKKyAgICBlbnYgKz0gJ2V4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEU9IiVzIiA7JyAlIGRhdGUKKyAgICByZXR1cm4gZW52CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RhdGUgPSAnJworb3B0X25yZXBhY2sgPSAwCit2ZXJib3NlID0gRmFsc2UKKwordHJ5OgorICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ3M6dDpuOnYnLCBbJ2dpdHN0YXRlPScsICd0ZW1wZGlyPScsICducmVwYWNrPScsICd2ZXJib3NlJ10pCisgICAgZm9yIG8sIGEgaW4gb3B0czoKKyAgICAgICAgaWYgbyBpbiAoJy1zJywgJy0tZ2l0c3RhdGUnKToKKyAgICAgICAgICAgIHN0YXRlID0gYQorICAgICAgICAgICAgc3RhdGUgPSBvcy5wYXRoLmFic3BhdGgoc3RhdGUpCisgICAgICAgIGlmIG8gaW4gKCctbicsICctLW5yZXBhY2snKToKKyAgICAgICAgICAgIG9wdF9ucmVwYWNrID0gaW50KGEpCisgICAgICAgIGlmIG8gaW4gKCctdicsICctLXZlcmJvc2UnKToKKyAgICAgICAgICAgIHZlcmJvc2UgPSBUcnVlCisgICAgaWYgbGVuKGFyZ3MpICE9IDE6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigncGFyYW1zJykKK2V4Y2VwdDoKKyAgICB1c2FnZSgpCisgICAgc3lzLmV4aXQoMSkKKworaGdwcmogPSBhcmdzWzBdCitvcy5jaGRpcihoZ3ByaikKKworaWYgc3RhdGU6CisgICAgaWYgb3MucGF0aC5leGlzdHMoc3RhdGUpOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQgJ1N0YXRlIGRvZXMgZXhpc3QsIHJlYWRpbmcnCisgICAgICAgIGYgPSBvcGVuKHN0YXRlLCAncicpCisgICAgICAgIGhndmVycyA9IHBpY2tsZS5sb2FkKGYpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQgJ1N0YXRlIGRvZXMgbm90IGV4aXN0LCBmaXJzdCBydW4nCisKK3NvY2sgPSBvcy5wb3BlbignaGcgdGlwIC0tdGVtcGxhdGUgIntyZXZ9IicpCit0aXAgPSBzb2NrLnJlYWQoKQoraWYgc29jay5jbG9zZSgpOgorICAgIHN5cy5leGl0KDEpCitpZiB2ZXJib3NlOgorICAgIHByaW50ICd0aXAgaXMnLCB0aXAKKworIyBDYWxjdWxhdGUgdGhlIGJyYW5jaGVzCitpZiB2ZXJib3NlOgorICAgIHByaW50ICdhbmFseXNpbmcgdGhlIGJyYW5jaGVzLi4uJworaGdjaGlsZHJlblsiMCJdID0gKCkKK2hncGFyZW50c1siMCJdID0gKE5vbmUsIE5vbmUpCitoZ2JyYW5jaFsiMCJdID0gIm1hc3RlciIKK2ZvciBjc2V0IGluIHJhbmdlKDEsIGludCh0aXApICsgMSk6CisgICAgaGdjaGlsZHJlbltzdHIoY3NldCldID0gKCkKKyAgICBwcm50cyA9IG9zLnBvcGVuKCdoZyBsb2cgLXIgJWQgLS10ZW1wbGF0ZSAie3BhcmVudHN9IicgJSBjc2V0KS5yZWFkKCkuc3RyaXAoKS5zcGxpdCgnICcpCisgICAgcHJudHMgPSBtYXAobGFtYmRhIHg6IHhbOnguZmluZCgnOicpXSwgcHJudHMpCisgICAgaWYgcHJudHNbMF0gIT0gJyc6CisgICAgICAgIHBhcmVudCA9IHBybnRzWzBdLnN0cmlwKCkKKyAgICBlbHNlOgorICAgICAgICBwYXJlbnQgPSBzdHIoY3NldCAtIDEpCisgICAgaGdjaGlsZHJlbltwYXJlbnRdICs9ICggc3RyKGNzZXQpLCApCisgICAgaWYgbGVuKHBybnRzKSA+IDE6CisgICAgICAgIG1wYXJlbnQgPSBwcm50c1sxXS5zdHJpcCgpCisgICAgICAgIGhnY2hpbGRyZW5bbXBhcmVudF0gKz0gKCBzdHIoY3NldCksICkKKyAgICBlbHNlOgorICAgICAgICBtcGFyZW50ID0gTm9uZQorCisgICAgaGdwYXJlbnRzW3N0cihjc2V0KV0gPSAocGFyZW50LCBtcGFyZW50KQorCisgICAgaWYgbXBhcmVudDoKKyAgICAgICAgIyBGb3IgbWVyZ2UgY2hhbmdlc2V0cywgdGFrZSBlaXRoZXIgb25lLCBwcmVmZXJhYmx5IHRoZSAnbWFzdGVyJyBicmFuY2gKKyAgICAgICAgaWYgaGdicmFuY2hbbXBhcmVudF0gPT0gJ21hc3Rlcic6CisgICAgICAgICAgICBoZ2JyYW5jaFtzdHIoY3NldCldID0gJ21hc3RlcicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhnYnJhbmNoW3N0cihjc2V0KV0gPSBoZ2JyYW5jaFtwYXJlbnRdCisgICAgZWxzZToKKyAgICAgICAgIyBOb3JtYWwgY2hhbmdlc2V0cworICAgICAgICAjIEZvciBmaXJzdCBjaGlsZHJlbiwgdGFrZSB0aGUgcGFyZW50IGJyYW5jaCwgZm9yIHRoZSBvdGhlcnMgY3JlYXRlIGEgbmV3IGJyYW5jaAorICAgICAgICBpZiBoZ2NoaWxkcmVuW3BhcmVudF1bMF0gPT0gc3RyKGNzZXQpOgorICAgICAgICAgICAgaGdicmFuY2hbc3RyKGNzZXQpXSA9IGhnYnJhbmNoW3BhcmVudF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhnYnJhbmNoW3N0cihjc2V0KV0gPSAiYnJhbmNoLSIgKyBzdHIoY3NldCkKKworaWYgbm90IGhndmVycy5oYXNfa2V5KCIwIik6CisgICAgcHJpbnQgJ2NyZWF0aW5nIHJlcG9zaXRvcnknCisgICAgb3Muc3lzdGVtKCdnaXQgaW5pdCcpCisKKyMgbG9vcCB0aHJvdWdoIGV2ZXJ5IGhnIGNoYW5nZXNldAorZm9yIGNzZXQgaW4gcmFuZ2UoaW50KHRpcCkgKyAxKToKKworICAgICMgaW5jcmVtZW50YWwsIGFscmVhZHkgc2VlbgorICAgIGlmIGhndmVycy5oYXNfa2V5KHN0cihjc2V0KSk6CisgICAgICAgIGNvbnRpbnVlCisgICAgaGduZXdjc2V0cyArPSAxCisKKyAgICAjIGdldCBpbmZvCisgICAgbG9nX2RhdGEgPSBvcy5wb3BlbignaGcgbG9nIC1yICVkIC0tdGVtcGxhdGUgInt0YWdzfVxue2RhdGV8ZGF0ZX1cbnthdXRob3J9XG4iJyAlIGNzZXQpLnJlYWRsaW5lcygpCisgICAgdGFnID0gbG9nX2RhdGFbMF0uc3RyaXAoKQorICAgIGRhdGUgPSBsb2dfZGF0YVsxXS5zdHJpcCgpCisgICAgdXNlciA9IGxvZ19kYXRhWzJdLnN0cmlwKCkKKyAgICBwYXJlbnQgPSBoZ3BhcmVudHNbc3RyKGNzZXQpXVswXQorICAgIG1wYXJlbnQgPSBoZ3BhcmVudHNbc3RyKGNzZXQpXVsxXQorCisgICAgI2dldCBjb21tZW50CisgICAgKGZkY29tbWVudCwgZmlsZWNvbW1lbnQpID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgY3NldGNvbW1lbnQgPSBvcy5wb3BlbignaGcgbG9nIC1yICVkIC0tdGVtcGxhdGUgIntkZXNjfSInICUgY3NldCkucmVhZCgpLnN0cmlwKCkKKyAgICBvcy53cml0ZShmZGNvbW1lbnQsIGNzZXRjb21tZW50KQorICAgIG9zLmNsb3NlKGZkY29tbWVudCkKKworICAgIHByaW50ICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKKyAgICBwcmludCAnY3NldDonLCBjc2V0CisgICAgcHJpbnQgJ2JyYW5jaDonLCBoZ2JyYW5jaFtzdHIoY3NldCldCisgICAgcHJpbnQgJ3VzZXI6JywgdXNlcgorICAgIHByaW50ICdkYXRlOicsIGRhdGUKKyAgICBwcmludCAnY29tbWVudDonLCBjc2V0Y29tbWVudAorICAgIGlmIHBhcmVudDoKKwlwcmludCAncGFyZW50OicsIHBhcmVudAorICAgIGlmIG1wYXJlbnQ6CisgICAgICAgIHByaW50ICdtcGFyZW50OicsIG1wYXJlbnQKKyAgICBpZiB0YWc6CisgICAgICAgIHByaW50ICd0YWc6JywgdGFnCisgICAgcHJpbnQgJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJworCisgICAgIyBjaGVja291dCB0aGUgcGFyZW50IGlmIG5lY2Vzc2FyeQorICAgIGlmIGNzZXQgIT0gMDoKKyAgICAgICAgaWYgaGdicmFuY2hbc3RyKGNzZXQpXSA9PSAiYnJhbmNoLSIgKyBzdHIoY3NldCk6CisgICAgICAgICAgICBwcmludCAnY3JlYXRpbmcgbmV3IGJyYW5jaCcsIGhnYnJhbmNoW3N0cihjc2V0KV0KKyAgICAgICAgICAgIG9zLnN5c3RlbSgnZ2l0IGNoZWNrb3V0IC1iICVzICVzJyAlIChoZ2JyYW5jaFtzdHIoY3NldCldLCBoZ3ZlcnNbcGFyZW50XSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAnY2hlY2tpbmcgb3V0IGJyYW5jaCcsIGhnYnJhbmNoW3N0cihjc2V0KV0KKyAgICAgICAgICAgIG9zLnN5c3RlbSgnZ2l0IGNoZWNrb3V0ICVzJyAlIGhnYnJhbmNoW3N0cihjc2V0KV0pCisKKyAgICAjIG1lcmdlCisgICAgaWYgbXBhcmVudDoKKyAgICAgICAgaWYgaGdicmFuY2hbcGFyZW50XSA9PSBoZ2JyYW5jaFtzdHIoY3NldCldOgorICAgICAgICAgICAgb3RoZXJicmFuY2ggPSBoZ2JyYW5jaFttcGFyZW50XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3RoZXJicmFuY2ggPSBoZ2JyYW5jaFtwYXJlbnRdCisgICAgICAgIHByaW50ICdtZXJnaW5nJywgb3RoZXJicmFuY2gsICdpbnRvJywgaGdicmFuY2hbc3RyKGNzZXQpXQorICAgICAgICBvcy5zeXN0ZW0oZ2V0Z2l0ZW52KHVzZXIsIGRhdGUpICsgJ2dpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyBvdXJzICIiICVzICVzJyAlIChoZ2JyYW5jaFtzdHIoY3NldCldLCBvdGhlcmJyYW5jaCkpCisKKyAgICAjIHJlbW92ZSBldmVyeXRoaW5nIGV4Y2VwdCAuZ2l0IGFuZCAuaGcgZGlyZWN0b3JpZXMKKyAgICBvcy5zeXN0ZW0oJ2ZpbmQgLiBcKCAtcGF0aCAiLi8uaGciIC1vIC1wYXRoICIuLy5naXQiIFwpIC1wcnVuZSAtbyAhIC1uYW1lICIuIiAtcHJpbnQgfCB4YXJncyBybSAtcmYnKQorCisgICAgIyByZXBvcHVsYXRlIHdpdGggY2hlY2tvdXRlZCBmaWxlcworICAgIG9zLnN5c3RlbSgnaGcgdXBkYXRlIC1DICVkJyAlIGNzZXQpCisKKyAgICAjIGFkZCBuZXcgZmlsZXMKKyAgICBvcy5zeXN0ZW0oJ2dpdCBscy1maWxlcyAteCAuaGcgLS1vdGhlcnMgfCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tc3RkaW4nKQorICAgICMgZGVsZXRlIHJlbW92ZWQgZmlsZXMKKyAgICBvcy5zeXN0ZW0oJ2dpdCBscy1maWxlcyAteCAuaGcgLS1kZWxldGVkIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAtLXN0ZGluJykKKworICAgICMgY29tbWl0CisgICAgb3Muc3lzdGVtKGdldGdpdGVudih1c2VyLCBkYXRlKSArICdnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1hIC1GICVzJyAlIGZpbGVjb21tZW50KQorICAgIG9zLnVubGluayhmaWxlY29tbWVudCkKKworICAgICMgdGFnCisgICAgaWYgdGFnIGFuZCB0YWcgIT0gJ3RpcCc6CisgICAgICAgIG9zLnN5c3RlbShnZXRnaXRlbnYodXNlciwgZGF0ZSkgKyAnZ2l0IHRhZyAlcycgJSB0YWcpCisKKyAgICAjIGRlbGV0ZSBicmFuY2ggaWYgbm90IHVzZWQgYW55bW9yZS4uLgorICAgIGlmIG1wYXJlbnQgYW5kIGxlbihoZ2NoaWxkcmVuW3N0cihjc2V0KV0pOgorICAgICAgICBwcmludCAiRGVsZXRpbmcgdW51c2VkIGJyYW5jaDoiLCBvdGhlcmJyYW5jaAorICAgICAgICBvcy5zeXN0ZW0oJ2dpdCBicmFuY2ggLWQgJXMnICUgb3RoZXJicmFuY2gpCisKKyAgICAjIHJldHJpZXZlIGFuZCByZWNvcmQgdGhlIHZlcnNpb24KKyAgICB2dnYgPSBvcy5wb3BlbignZ2l0IHNob3cgLS1xdWlldCAtLXByZXR0eT1mb3JtYXQ6JUgnKS5yZWFkKCkKKyAgICBwcmludCAncmVjb3JkJywgY3NldCwgJy0+JywgdnZ2CisgICAgaGd2ZXJzW3N0cihjc2V0KV0gPSB2dnYKKworaWYgaGduZXdjc2V0cyA+PSBvcHRfbnJlcGFjayBhbmQgb3B0X25yZXBhY2sgIT0gLTE6CisgICAgb3Muc3lzdGVtKCdnaXQgcmVwYWNrIC1hIC1kJykKKworIyB3cml0ZSB0aGUgc3RhdGUgZm9yIGluY3JlbWVudGFscworaWYgc3RhdGU6CisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnQgJ1dyaXRpbmcgc3RhdGUnCisgICAgZiA9IG9wZW4oc3RhdGUsICd3JykKKyAgICBwaWNrbGUuZHVtcChoZ3ZlcnMsIGYpCisKKyMgdmltOiBldCB0cz04IHN3PTQgc3RzPTQKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaGctdG8tZ2l0L2hnLXRvLWdpdC50eHQgYi9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZjhmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hnLXRvLWdpdC9oZy10by1naXQudHh0CkBAIC0wLDAgKzEsMjEgQEAKK2hnLXRvLWdpdC5weSBpcyBhYmxlIHRvIGNvbnZlcnQgYSBNZXJjdXJpYWwgcmVwb3NpdG9yeSBpbnRvIGEgZ2l0IG9uZSwKK2FuZCBwcmVzZXJ2ZXMgdGhlIGJyYW5jaGVzIGluIHRoZSBwcm9jZXNzICh1bmxpa2UgdGFpbG9yKQorCitoZy10by1naXQucHkgY2FuIHByb2JhYmx5IGJlIGdyZWF0bHkgaW1wcm92ZWQgKGl0J3MgYSByYXRoZXIgY3J1ZGUKK2NvbWJpbmF0aW9uIG9mIHNoZWxsIGFuZCBweXRob24pIGJ1dCBpdCBkb2VzIGFscmVhZHkgd29yayBxdWl0ZSB3ZWxsIGZvcgorbWUuIEZlYXR1cmVzOgorCS0gc3VwcG9ydHMgaW5jcmVtZW50YWwgY29udmVyc2lvbgorCSAgKGZvciBrZWVwaW5nIGEgZ2l0IHJlcG8gaW4gc3luYyB3aXRoIGEgaGcgb25lKQorICAgICAgICAtIHN1cHBvcnRzIGhnIGJyYW5jaGVzCisgICAgICAgIC0gY29udmVydHMgaGcgdGFncworCitOb3RlIHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IHdpbGwgYmUgY3JlYXRlZCAnaW4gcGxhY2UnIChhdCB0aGUgc2FtZQorbG9jYXRpb24gYXMgdGhlIHNvdXJjZSBoZyByZXBvKS4gWW91IHdpbGwgaGF2ZSB0byBtYW51YWxseSByZW1vdmUgdGhlCisnLmhnJyBkaXJlY3RvcnkgYWZ0ZXIgdGhlIGNvbnZlcnNpb24uCisKK0Fsc28gbm90ZSB0aGF0IHRoZSBpbmNyZW1lbnRhbCBjb252ZXJzaW9uIHVzZXMgJ3NpbXBsZScgaGcgY2hhbmdlc2V0cworaWRlbnRpZmllcnMgKG9yZGluYWxzLCBhcyBvcHBvc2VkIHRvIFNIQS0xIGlkcyksIGFuZCBzaW5jZSB0aGVzZSBpZHMKK2FyZSBub3Qgc3RhYmxlIGFjcm9zcyBkaWZmZXJlbnQgcmVwb3NpdG9yaWVzIHRoZSBoZy10by1naXQucHkgc3RhdGUgZmlsZQoraXMgZm9yZXZlciB0aWVkIHRvIG9uZSBoZyByZXBvc2l0b3J5LgorCitTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvQ0hBTkdFUyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL0NIQU5HRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM3N2U2NgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL0NIQU5HRVMKQEAgLTAsMCArMSwxMjcgQEAKK1JlbGVhc2UgMS4yLjAKKz09PT09PT09PT09PT0KKworKiBJdCBpcyBub3cgcG9zc2libGUgdG8gZXhjbHVkZSBzb21lIHJlZnMgKGUuZy4gZXhjbHVkZSBzb21lIGJyYW5jaGVzCisgIG9yIHRhZ3MpLiBTZWUgcmVmRmlsdGVyRG9TZW5kUmVnZXgsIHJlZkZpbHRlckRvbnRTZW5kUmVnZXgsCisgIHJlZkZpbHRlckluY2x1c2lvblJlZ2V4IGFuZCByZWZGaWx0ZXJFeGNsdXNpb25SZWdleC4KKworKiBOZXcgY29tbWl0RW1haWxGb3JtYXQgb3B0aW9uIHdoaWNoIGNhbiBiZSBzZXQgdG8gImh0bWwiIHRvIGdlbmVyYXRlCisgIHNpbXBsZSBjb2xvcml6ZWQgZGlmZnMgdXNpbmcgSFRNTCBmb3IgdGhlIGNvbW1pdCBlbWFpbHMuCisKKyogZ2l0LW11bHRpbWFpbCBjYW4gbm93IGJlIHJhbiBhcyBhIEdlcnJpdCByZWYtdXBkYXRlZCBob29rLCBvciBmcm9tCisgIEF0bGFzc2lhbiBCaXRCdWNrZXQgU2VydmVyIChmb3JtZXJseSBrbm93biBhcyBBdGxhc3NpYW4gU3Rhc2gpLgorCisqIFRoZSBGcm9tOiBmaWVsZCBpcyBub3cgbW9yZSBjdXN0b21pemVhYmxlLiBJdCBjYW4gYmUgc2V0CisgIGluZGVwZW5kZW50bHkgZm9yIHJlZmNoYW5nZSBlbWFpbHMgYW5kIGNvbW1pdCBlbWFpbHMgKHNlZQorICBmcm9tQ29tbWl0LCBmcm9tUmVmQ2hhbmdlKS4gVGhlIHNwZWNpYWwgdmFsdWVzIHB1c2hlciBhbmQgYXV0aG9yIGNhbgorICBiZSB1c2VkIGluIHRoZXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyogQSBuZXcgY29tbWFuZC1saW5lIG9wdGlvbiwgLS12ZXJzaW9uLCB3YXMgYWRkZWQuIFRoZSB2ZXJzaW9uIGlzIGFsc28KKyAgYXZhaWxhYmxlIGluIHRoZSBYLUdpdC1NdWx0aW1haWwtVmVyc2lvbiBoZWFkZXIgb2Ygc2VudCBlbWFpbHMuCisKKyogU2V0IFgtR2l0LU5vdGlmaWNhdGlvblR5cGUgaGVhZGVyIHRvIGRpZmZlcmVudGlhdGUgdGhlIHZhcmlvdXMgdHlwZXMKKyAgb2Ygbm90aWZpY2F0aW9ucy4gQ3VycmVudCB2YWx1ZXMgYXJlOiBkaWZmLCByZWZfY2hhbmdlZF9wbHVzX2RpZmYsCisgIHJlZl9jaGFuZ2VkLgorCisqIFByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIFB5dGhvbiAzLiBUaGUgdGVzdHN1aXRlIHBhc3NlcyB3aXRoIFB5dGhvbiAzLAorICBidXQgaXQgaGFzIG5vdCByZWNlaXZlZCBhcyBtdWNoIHRlc3RpbmcgYXMgdGhlIFB5dGhvbiAyIHZlcnNpb24geWV0LgorCisqIFNldmVyYWwgZW5jb2RpbmctcmVsYXRlZCBmaXhlcy4gVVRGLTggY2hhcmFjdGVycyB3b3JrIGluIG1vcmUKKyAgc2l0dWF0aW9ucyAoYnV0IG5vbi1hc2NpaSBjaGFyYWN0ZXJzIGluIGVtYWlsIGFkZHJlc3MgYXJlIHN0aWxsIG5vdAorICBzdXBwb3J0ZWQpLgorCisqIFRoZSB0ZXN0c3VpdGUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIGdyZWF0bHkgaW1wcm92ZWQuCisKK1BsdXMgYWxsIHRoZSBidWdmaXhlcyBmcm9tIHZlcnNpb24gMS4xLjEuCisKK1RoaXMgdmVyc2lvbiBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBQeXRob24gMi40IGFuZCAyLjYgdG8gMy41LCBhbmQgR2l0Cit2MS43LjEwLTQwNi1nZGM4MDFlNywgZ2l0LTEuOC4yLjMgYW5kIDIuNi4wLiBHaXQgdmVyc2lvbnMgcHJpb3IgdG8KK3YxLjcuMTAtNDA2LWdkYzgwMWU3IHByb2JhYmx5IHdvcmssIGJ1dCBjYW5ub3QgcnVuIHRoZSB0ZXN0c3VpdGUKK3Byb3Blcmx5LgorCitSZWxlYXNlIDEuMS4xIChidWdmaXgtb25seSByZWxlYXNlKQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKiBUaGUgU01UUCBtYWlsZXIgd2FzIG5vdCB3b3JraW5nIHdpdGggUHl0aG9uIDIuNC4KKworUmVsZWFzZSAxLjEuMAorPT09PT09PT09PT09PQorCisqIFdoZW4gYSBzaW5nbGUgY29tbWl0IGlzIHB1c2hlZCwgb21pdCB0aGUgcmVmZXJlbmNlIGNoYW5nZWQgZW1haWwuCisgIFNldCBtdWx0aW1haWxob29rLmNvbWJpbmVXaGVuU2luZ2xlQ29tbWl0IHRvIGZhbHNlIHRvIGRpc2FibGUgdGhpcworICBuZXcgZmVhdHVyZS4KKworKiBJbiBnaXRvbGl0ZSBlbnZpcm9ubWVudHMsIHRoZSBwdXNoZXIncyBlbWFpbCBhZGRyZXNzIGNhbiBiZSB1c2VkIGFzCisgIHRoZSBGcm9tIGFkZHJlc3MgYnkgY3JlYXRpbmcgYSBzcGVjaWFsbHkgZm9ybWF0dGVkIGNvbW1lbnQgYmxvY2sgaW4KKyAgZ2l0b2xpdGUuY29uZiAoc2VlIG11bHRpbWFpbGhvb2suZnJvbSBpbiBSRUFETUUpLgorCisqIFN1cHBvcnQgZm9yIFNNVFAgYXV0aGVudGljYXRpb24gYW5kIFNTTC9UTFMgZW5jcnlwdGlvbiB3YXMgYWRkZWQsCisgIHNlZSBzbXRwVXNlciwgc210cFBhc3MsIHNtdHBFbmNyeXB0aW9uIGluIFJFQURNRS4KKworKiBBIG5ldyBvcHRpb24gc2NhbkNvbW1pdEZvckNjIHdhcyBhZGRlZCB0byBhbGxvdyBnaXQtbXVsdGltYWlsIHRvCisgIHNlYXJjaCB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yICdDYzogLi4uJyBsaW5lcywgYW5kIGFkZCB0aGUKKyAgY29ycmVzcG9uZGluZyBlbWFpbHMgaW4gQ2MuCisKKyogSWYgJFVTRVIgaXMgbm90IHNldCwgdXNlIHRoZSB2YXJpYWJsZSAkVVNFUk5BTUUuIFRoaXMgaXMgbmVlZGVkIG9uCisgIFdpbmRvd3MgcGxhdGZvcm0gdG8gcmVjb2duaXplIHRoZSBwdXNoZXIuCisKKyogVGhlIGVtYWlsUHJlZml4IHZhcmlhYmxlIGNhbiBub3cgYmUgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB0byByZW1vdmUKKyAgdGhlIHByZWZpeC4KKworKiBBIHNob3J0IHR1dG9yaWFsIHdhcyBhZGRlZCBpbiBkb2MvZ2l0b2xpdGUucnN0IHRvIHNldCB1cAorICBnaXQtbXVsdGltYWlsIHdpdGggZ2l0b2xpdGUuCisKKyogVGhlIHBvc3QtcmVjZWl2ZSBmaWxlIHdhcyByZW5hbWVkIHRvIHBvc3QtcmVjZWl2ZS5leGFtcGxlLiBJdCBoYXMKKyAgYWx3YXlzIGJlZW4gYW4gZXhhbXBsZSAodGhlIHN0YW5kYXJkIHdheSB0byBjYWxsIGdpdC1tdWx0aW1haWwgaXMgdG8KKyAgY2FsbCBnaXRfbXVsdGltYWlsLnB5KSwgYnV0IGl0IHdhcyB1bmNsZWFyIHRvIG1hbnkgdXNlcnMuCisKKyogQSBuZXcgcmVmY2hhbmdlU2hvd0dyYXBoIG9wdGlvbiB3YXMgYWRkZWQgdG8gbWFrZSBpdCBwb3NzaWJsZSB0bworICBpbmNsdWRlIGJvdGggYSBncmFwaCBhbmQgYSBsb2cgaW4gdGhlIHN1bW1hcnkgZW1haWxzLiAgVGhlIG9wdGlvbnMKKyAgdG8gY29udHJvbCB0aGUgZ3JhcGggZm9ybWF0dGluZyBjYW4gYmUgc2V0IHZpYSB0aGUgbmV3IGdyYXBoT3B0cworICBvcHRpb24uCisKKyogTmV3IG9wdGlvbiAtLWZvcmNlLXNlbmQgd2FzIGFkZGVkIHRvIGRpc2FibGUgbmV3IGNvbW1pdCBkZXRlY3Rpb24KKyAgZm9yIHVwZGF0ZSBob29rLiBPbmUgdXNlLWNhc2UgaXMgdG8gcnVuIGdpdF9tdWx0aW1haWwucHkgYWZ0ZXIKKyAgcnVubmluZyAiZ2l0IGZldGNoIiB0byBzZW5kIGVtYWlscyBhYm91dCBjb21taXRzIHRoYXQgaGF2ZSBqdXN0IGJlZW4KKyAgZmV0Y2hlZCAodGhlIGRldGVjdGlvbiBvZiBuZXcgY29tbWl0cyB3YXMgdW5yZWxpYWJsZSBpbiB0aGlzIG1vZGUpLgorCisqIFRoZSB0ZXN0aW5nIGluZnJhc3RydWN0dXJlIHdhcyBjb25zaWRlcmFibHkgaW1wcm92ZWQgKGNvbnRpbnVvdXMKKyAgaW50ZWdyYXRpb24gd2l0aCB0cmF2aXMtY2ksIGF1dG9tYXRpYyBjaGVjayBvZiBQRVA4IGFuZCBSU1Qgc3ludGF4LAorICBtYW55IGltcHJvdmVtZW50cyB0byB0aGUgdGVzdCBzY3JpcHRzKS4KKworVGhpcyB2ZXJzaW9uIGhhcyBiZWVuIHRlc3RlZCB3aXRoIFB5dGhvbiAyLjQgdG8gMi43LCBhbmQgR2l0IDEuNy4xIHRvCisyLjQuCisKK1JlbGVhc2UgMS4wLjAKKz09PT09PT09PT09PT0KKworKiBGaXggZW5jb2Rpbmcgb2Ygbm9uLUFTQ0lJIGVtYWlsIGFkZHJlc3NlcyBpbiBlbWFpbCBoZWFkZXJzLgorCisqIEZpeCBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBidWdzIGZvciBvbGRlciBQeXRob24gMi54IHZlcnNpb25zLgorCisqIEZpeCBhIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGJ1ZyBmb3IgR2l0IDEuNy4xLgorCisqIEFkZCBhbiBvcHRpb24gY29tbWl0RGlmZk9wdHMgdG8gY3VzdG9taXplIGxvZ3MgZm9yIHJldmlzaW9ucy4KKworKiBQYXNzICItb2kiIHRvIHNlbmRtYWlsIGJ5IGRlZmF1bHQgdG8gcHJldmVudCBwcmVtYXR1cmUgdGVybWluYXRpb24KKyAgb24gYSBsaW5lIGNvbnRhaW5pbmcgb25seSAiLiIuCisKKyogU3RhZ2dlciBlbWFpbCAiRGF0ZToiIHZhbHVlcyBpbiBhbiBhdHRlbXB0IHRvIGhlbHAgbWFpbCBjbGllbnRzCisgIHRocmVhZCB0aGUgZW1haWxzIGluIHRoZSByaWdodCBvcmRlci4KKworKiBJZiBhIG1haWxpbmcgbGlzdCBzZXR0aW5nIGlzIG1pc3NpbmcsIGp1c3Qgc2tpcCBzZW5kaW5nIHRoZQorICBjb3JyZXNwb25kaW5nIGVtYWlsICh3aXRoIGEgd2FybmluZykgaW5zdGVhZCBvZiBmYWlsaW5nLgorCisqIEFkZCBhIFgtR2l0LUhvc3QgaGVhZGVyIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGVtYWlsIGZpbHRlcmluZy4KKworKiBBbGxvdyB0aGUgc2VuZGVyJ3MgZnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIHRvIGJlIGNvbmZpZ3VyZWQuCisKKyogTWlub3IgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMuCisKKyogQWRkIHRoaXMgQ0hBTkdFUyBmaWxlLgorCisKK1JlbGVhc2UgMC45LjAKKz09PT09PT09PT09PT0KKworKiBJbml0aWFsIHJlbGVhc2UuCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9DT05UUklCVVRJTkcucnN0IGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvQ09OVFJJQlVUSU5HLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWVmZGIwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvQ09OVFJJQlVUSU5HLnJzdApAQCAtMCwwICsxLDMwIEBACitnaXQtbXVsdGltYWlsIGlzIGFuIG9wZW4tc291cmNlIHByb2plY3QsIGJ1aWx0IGJ5IHZvbHVudGVlcnMuIFdlIHdvdWxkCit3ZWxjb21lIHlvdXIgaGVscCEKKworVGhlIGN1cnJlbnQgbWFpbnRhaW5lcnMgYXJlIE1pY2hhZWwgSGFnZ2VydHkgPG1oYWdnZXJAYWx1bS5taXQuZWR1PgorYW5kIE1hdHRoaWV1IE1veSA8bWF0dGhpZXUubW95QGdyZW5vYmxlLWlucC5mcj4uCisKK1BsZWFzZSBub3RlIHRoYXQgYWx0aG91Z2ggYSBjb3B5IG9mIGdpdC1tdWx0aW1haWwgaXMgZGlzdHJpYnV0ZWQgaW4KK3RoZSAiY29udHJpYiIgc2VjdGlvbiBvZiB0aGUgbWFpbiBHaXQgcHJvamVjdCwgZGV2ZWxvcG1lbnQgdGFrZXMgcGxhY2UKK2luIGEgc2VwYXJhdGUgZ2l0LW11bHRpbWFpbCByZXBvc2l0b3J5IG9uIEdpdEh1YjoKKworICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwKKworV2hlbmV2ZXIgZW5vdWdoIGNoYW5nZXMgdG8gZ2l0LW11bHRpbWFpbCBoYXZlIGFjY3VtdWxhdGVkLCBhIG5ldworY29kZS1kcm9wIG9mIGdpdC1tdWx0aW1haWwgd2lsbCBiZSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgR2l0Citwcm9qZWN0LgorCitXZSB1c2UgdGhlIEdpdEh1YiBpc3N1ZSB0cmFja2VyIHRvIGtlZXAgdHJhY2sgb2YgYnVncyBhbmQgZmVhdHVyZQorcmVxdWVzdHMsIGFuZCB3ZSB1c2UgR2l0SHViIHB1bGwgcmVxdWVzdHMgdG8gZXhjaGFuZ2UgcGF0Y2hlcyAodGhvdWdoLAoraWYgeW91IHByZWZlciwgeW91IGNhbiBzZW5kIHBhdGNoZXMgdmlhIHRoZSBHaXQgbWFpbGluZyBsaXN0IHdpdGggQ0MKK3RvIHRoZSBtYWludGFpbmVycykuIFBsZWFzZSBzaWduIG9mZiB5b3VyIHBhdGNoZXMgYXMgcGVyIHRoZSBgR2l0Citwcm9qZWN0IHByYWN0aWNlCis8aHR0cHM6Ly9naXRodWIuY29tL2dpdC9naXQvYmxvYi9tYXN0ZXIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyNMMjM0PmBfXy4KKworR2VuZXJhbCBkaXNjdXNzaW9uIG9mIGdpdC1tdWx0aW1haWwgY2FuIHRha2UgcGxhY2Ugb24gdGhlIG1haW4gR2l0CittYWlsaW5nIGxpc3QsCisKKyAgICBnaXRAdmdlci5rZXJuZWwub3JnCisKK1BsZWFzZSBDQyBlbWFpbHMgcmVnYXJkaW5nIGdpdC1tdWx0aW1haWwgdG8gdGhlIG1haW50YWluZXJzIHNvIHRoYXQgd2UKK2Rvbid0IG92ZXJsb29rIHRoZW0uCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUxMjA2OAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRQpAQCAtMCwwICsxLDY4NiBAQAorZ2l0LW11bHRpbWFpbCAodmVyc2lvbiAxLjIuMCkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIGltYWdlOjogaHR0cHM6Ly90cmF2aXMtY2kub3JnL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC5zdmc/YnJhbmNoPW1hc3RlcgorICAgIDp0YXJnZXQ6IGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9naXQtbXVsdGltYWlsL2dpdC1tdWx0aW1haWwKKworZ2l0LW11bHRpbWFpbCBpcyBhIHRvb2wgZm9yIHNlbmRpbmcgbm90aWZpY2F0aW9uIGVtYWlscyBvbiBwdXNoZXMgdG8gYQorR2l0IHJlcG9zaXRvcnkuICBJdCBpbmNsdWRlcyBhIFB5dGhvbiBtb2R1bGUgY2FsbGVkIGdpdF9tdWx0aW1haWwucHksCit3aGljaCBjYW4gZWl0aGVyIGJlIHVzZWQgYXMgYSBob29rIHNjcmlwdCBkaXJlY3RseSBvciBjYW4gYmUgaW1wb3J0ZWQKK2FzIGEgUHl0aG9uIG1vZHVsZSBpbnRvIGFub3RoZXIgc2NyaXB0LgorCitnaXQtbXVsdGltYWlsIGlzIGRlcml2ZWQgZnJvbSB0aGUgR2l0IHByb2plY3QncyBvbGQKK2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsLCBhbmQgaXMgbW9zdGx5IGNvbXBhdGlibGUgd2l0aCB0aGF0CitzY3JpcHQuICBTZWUgUkVBRE1FLm1pZ3JhdGUtZnJvbS1wb3N0LXJlY2VpdmUtZW1haWwgZm9yIGRldGFpbHMgYWJvdXQKK3RoZSBkaWZmZXJlbmNlcyBhbmQgZm9yIGhvdyB0byBtaWdyYXRlIGZyb20gcG9zdC1yZWNlaXZlLWVtYWlsIHRvCitnaXQtbXVsdGltYWlsLgorCitnaXQtbXVsdGltYWlsLCBsaWtlIHRoZSByZXN0IG9mIHRoZSBHaXQgcHJvamVjdCwgaXMgbGljZW5zZWQgdW5kZXIKK0dQTHYyIChzZWUgdGhlIENPUFlJTkcgZmlsZSBmb3IgZGV0YWlscykuCisKK1BsZWFzZSBub3RlOiBhbHRob3VnaCwgYXMgYSBjb252ZW5pZW5jZSwgZ2l0LW11bHRpbWFpbCBtYXkgYmUKK2Rpc3RyaWJ1dGVkIGFsb25nIHdpdGggdGhlIG1haW4gR2l0IHByb2plY3QsIGRldmVsb3BtZW50IG9mCitnaXQtbXVsdGltYWlsIHRha2VzIHBsYWNlIGluIGl0cyBvd24sIHNlcGFyYXRlIHByb2plY3QuICBTZWUgc2VjdGlvbgorIkdldHRpbmcgaW52b2x2ZWQiIGJlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisKK0J5IGRlZmF1bHQsIGZvciBlYWNoIHB1c2ggcmVjZWl2ZWQgYnkgdGhlIHJlcG9zaXRvcnksIGdpdC1tdWx0aW1haWw6CisKKzEuIE91dHB1dHMgb25lIGVtYWlsIHN1bW1hcml6aW5nIGVhY2ggcmVmZXJlbmNlIHRoYXQgd2FzIGNoYW5nZWQuCisgICBUaGVzZSAicmVmZXJlbmNlIGNoYW5nZSIgKGNhbGxlZCAicmVmY2hhbmdlIiBiZWxvdykgZW1haWxzIGRlc2NyaWJlCisgICB0aGUgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgKGUuZy4sIHdhcyB0aGUgcmVmZXJlbmNlIGNyZWF0ZWQsIGRlbGV0ZWQsCisgICBmYXN0LWZvcndhcmRlZCwgZXRjLikgYW5kIGluY2x1ZGUgYSBvbmUtbGluZSBzdW1tYXJ5IG9mIGVhY2ggY29tbWl0CisgICB0aGF0IHdhcyBhZGRlZCB0byB0aGUgcmVmZXJlbmNlLgorCisyLiBPdXRwdXRzIG9uZSBlbWFpbCBmb3IgZWFjaCBuZXcgY29tbWl0IHRoYXQgd2FzIGludHJvZHVjZWQgYnkgdGhlCisgICByZWZlcmVuY2UgY2hhbmdlLiAgVGhlc2UgImNvbW1pdCIgZW1haWxzIGluY2x1ZGUgYSBsaXN0IG9mIHRoZQorICAgZmlsZXMgY2hhbmdlZCBieSB0aGUgY29tbWl0LCBmb2xsb3dlZCBieSB0aGUgZGlmZnMgb2YgZmlsZXMKKyAgIG1vZGlmaWVkIGJ5IHRoZSBjb21taXQuICBUaGUgY29tbWl0IGVtYWlscyBhcmUgdGhyZWFkZWQgdG8gdGhlCisgICBjb3JyZXNwb25kaW5nIHJlZmVyZW5jZSBjaGFuZ2UgZW1haWwgdmlhICJJbi1SZXBseS1UbyIuICBUaGlzIHN0eWxlCisgICAoc2ltaWxhciB0byB0aGUgImdpdCBmb3JtYXQtcGF0Y2giIHN0eWxlIHVzZWQgb24gdGhlIEdpdCBtYWlsaW5nCisgICBsaXN0KSBtYWtlcyBpdCBlYXN5IHRvIHNjYW4gdGhyb3VnaCB0aGUgZW1haWxzLCBqdW1wIHRvIHBhdGNoZXMKKyAgIHRoYXQgbmVlZCBmdXJ0aGVyIGF0dGVudGlvbiwgYW5kIHdyaXRlIGNvbW1lbnRzIGFib3V0IHNwZWNpZmljCisgICBjb21taXRzLiAgQ29tbWl0cyBhcmUgaGFuZGxlZCBpbiByZXZlcnNlIHRvcG9sb2dpY2FsIG9yZGVyIChpLmUuLAorICAgcGFyZW50cyBzaG93biBiZWZvcmUgY2hpbGRyZW4pLiAgRm9yIGV4YW1wbGU6OgorCisgICAgIFtnaXRdIGJyYW5jaCBtYXN0ZXIgdXBkYXRlZAorICAgICArIFtnaXRdIDAxLzA4OiBkb2M6IGZpeCB4cmVmIGxpbmsgZnJvbSBhcGkgZG9jcyB0byBtYW51YWwgcGFnZXMKKyAgICAgKyBbZ2l0XSAwMi8wODogYXBpLWNyZWRlbnRpYWxzLnR4dDogc2hvdyB0aGUgYmlnIHBpY3R1cmUgZmlyc3QKKyAgICAgKyBbZ2l0XSAwMy8wODogYXBpLWNyZWRlbnRpYWxzLnR4dDogbWVudGlvbiBjcmVkZW50aWFsLmhlbHBlciBleHBsaWNpdGx5CisgICAgICsgW2dpdF0gMDQvMDg6IGFwaS1jcmVkZW50aWFscy50eHQ6IGFkZCAic2VlIGFsc28iIHNlY3Rpb24KKyAgICAgKyBbZ2l0XSAwNS8wODogdDM1MTAgKGNoZXJyeS1waWNrLXNlcXVlbmNlKTogYWRkIG1pc3NpbmcgJyYmJworICAgICArIFtnaXRdIDA2LzA4OiBNZXJnZSBicmFuY2ggJ3JyL21haW50LXQzNTEwLWNhc2NhZGUtZml4JworICAgICArIFtnaXRdIDA3LzA4OiBNZXJnZSBicmFuY2ggJ21tL2FwaS1jcmVkZW50aWFscy1kb2MnCisgICAgICsgW2dpdF0gMDgvMDg6IEdpdCAxLjcuMTEtcmMyCisKKyAgIEJ5IGRlZmF1bHQsIGVhY2ggY29tbWl0IGFwcGVhcnMgaW4gZXhhY3RseSBvbmUgY29tbWl0IGVtYWlsLCB0aGUKKyAgIGZpcnN0IHRpbWUgdGhhdCBpdCBpcyBwdXNoZWQgdG8gdGhlIHJlcG9zaXRvcnkuICBJZiBhIGNvbW1pdCBpcyBsYXRlcgorICAgbWVyZ2VkIGludG8gYW5vdGhlciBicmFuY2gsIHRoZW4gYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHRoZSBjb21taXQKKyAgIGlzIGluY2x1ZGVkIGluIHRoZSByZWZlcmVuY2UgY2hhbmdlIGVtYWlsIChhcyB1c3VhbCksIGJ1dCBubworICAgYWRkaXRpb25hbCBjb21taXQgZW1haWwgaXMgZ2VuZXJhdGVkLiBTZWUKKyAgIGBtdWx0aW1haWxob29rLnJlZkZpbHRlcihJbmNsdXNpb258RXhjbHVzaW9ufERvU2VuZHxEb250U2VuZClSZWdleGAKKyAgIGJlbG93IHRvIGNvbmZpZ3VyZSB3aGljaCBicmFuY2hlcyBhbmQgdGFncyBhcmUgd2F0Y2hlZCBieSB0aGUgaG9vay4KKworICAgQnkgZGVmYXVsdCwgcmVmZXJlbmNlIGNoYW5nZSBlbWFpbHMgaGF2ZSB0aGVpciAiUmVwbHktVG8iIGZpZWxkIHNldAorICAgdG8gdGhlIHBlcnNvbiB3aG8gcHVzaGVkIHRoZSBjaGFuZ2UsIGFuZCBjb21taXQgZW1haWxzIGhhdmUgdGhlaXIKKyAgICJSZXBseS1UbyIgZmllbGQgc2V0IHRvIHRoZSBhdXRob3Igb2YgdGhlIGNvbW1pdC4KKworMy4gT3V0cHV0IG9uZSAiYW5ub3VuY2UiIG1haWwgZm9yIGVhY2ggbmV3IGFubm90YXRlZCB0YWcsIGluY2x1ZGluZworICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhZyBhbmQgb3B0aW9uYWxseSBhIHNob3J0bG9nIGRlc2NyaWJpbmcgdGhlCisgICBjaGFuZ2VzIHNpbmNlIHRoZSBwcmV2aW91cyB0YWcuICBTdWNoIGVtYWlscyBtaWdodCBiZSB1c2VmdWwgaWYgeW91CisgICB1c2UgYW5ub3RhdGVkIHRhZ3MgdG8gbWFyayByZWxlYXNlcyBvZiB5b3VyIHByb2plY3QuCisKKworUmVxdWlyZW1lbnRzCistLS0tLS0tLS0tLS0KKworKiBQeXRob24gMi54LCB2ZXJzaW9uIDIuNCBvciBsYXRlci4gIE5vIG5vbi1zdGFuZGFyZCBQeXRob24gbW9kdWxlcworICBhcmUgcmVxdWlyZWQuICBnaXQtbXVsdGltYWlsIGhhcyBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciBQeXRob24gMworICAoYnV0IGl0IGhhcyBiZWVuIGJldHRlciB0ZXN0ZWQgd2l0aCBQeXRob24gMikuCisKKyogVGhlIGBgZ2l0YGAgY29tbWFuZCBtdXN0IGJlIGluIHlvdXIgUEFUSC4gIGdpdC1tdWx0aW1haWwgaXMga25vd24gdG8KKyAgd29yayB3aXRoIEdpdCB2ZXJzaW9ucyBiYWNrIHRvIDEuNy4xLiAgKEVhcmxpZXIgdmVyc2lvbnMgaGF2ZSBub3QKKyAgYmVlbiB0ZXN0ZWQ7IGlmIHlvdSBkbyBzbywgcGxlYXNlIHJlcG9ydCB5b3VyIHJlc3VsdHMuKQorCisqIFRvIHNlbmQgZW1haWxzIHVzaW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGEgc3RhbmRhcmQgc2VuZG1haWwKKyAgcHJvZ3JhbSBtdXN0IGJlIGxvY2F0ZWQgYXQgJy91c3Ivc2Jpbi9zZW5kbWFpbCcgb3IKKyAgJy91c3IvbGliL3NlbmRtYWlsJyBhbmQgbXVzdCBiZSBjb25maWd1cmVkIGNvcnJlY3RseSB0byBzZW5kIGVtYWlscy4KKyAgSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIHNldCBtdWx0aW1haWxob29rLnNlbmRtYWlsQ29tbWFuZCwgb3Igc2VlCisgIHRoZSBtdWx0aW1haWxob29rLm1haWxlciBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGJlbG93IGZvciBob3cgdG8KKyAgY29uZmlndXJlIGdpdC1tdWx0aW1haWwgdG8gc2VuZCBlbWFpbHMgdmlhIGFuIFNNVFAgc2VydmVyLgorCisKK0ludm9jYXRpb24KKy0tLS0tLS0tLS0KKworZ2l0X211bHRpbWFpbC5weSBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgYGBwb3N0LXJlY2VpdmVgYCBob29rIGluIGEKK0dpdCByZXBvc2l0b3J5IChzZWUgZ2l0aG9va3MoNSkpLiAgTGluayBvciBjb3B5IGl0IHRvCiskR0lUX0RJUi9ob29rcy9wb3N0LXJlY2VpdmUgd2l0aGluIHRoZSByZXBvc2l0b3J5IGZvciB3aGljaCBlbWFpbAorbm90aWZpY2F0aW9ucyBhcmUgZGVzaXJlZC4gIFVzdWFsbHkgaXQgc2hvdWxkIGJlIGluc3RhbGxlZCBvbiB0aGUKK2NlbnRyYWwgcmVwb3NpdG9yeSBmb3IgYSBwcm9qZWN0LCB0byB3aGljaCBhbGwgY29tbWl0cyBhcmUgZXZlbnR1YWxseQorcHVzaGVkLgorCitGb3IgdXNlIG9uIHByZS12MS41LjEgR2l0IHNlcnZlcnMsIGdpdF9tdWx0aW1haWwucHkgY2FuIGFsc28gd29yayBhcworYW4gYGB1cGRhdGVgYCBob29rLCB0YWtpbmcgaXRzIGFyZ3VtZW50cyBvbiB0aGUgY29tbWFuZCBsaW5lLiAgVG8gdXNlCit0aGlzIHNjcmlwdCBpbiB0aGlzIG1hbm5lciwgbGluayBvciBjb3B5IGl0IHRvICRHSVRfRElSL2hvb2tzL3VwZGF0ZS4KK1BsZWFzZSBub3RlIHRoYXQgdGhlIHNjcmlwdCBpcyBub3QgY29tcGxldGVseSByZWxpYWJsZSBpbiB0aGlzIG1vZGUKK1syXV8uCisKK0FsdGVybmF0aXZlbHksIGdpdF9tdWx0aW1haWwucHkgY2FuIGJlIGltcG9ydGVkIGFzIGEgUHl0aG9uIG1vZHVsZQoraW50byB5b3VyIG93biBQeXRob24gcG9zdC1yZWNlaXZlIHNjcmlwdC4gIFRoaXMgbWV0aG9kIGlzIGEgYml0IG1vcmUKK3dvcmssIGJ1dCBhbGxvd3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBob29rIHRvIGJlIGN1c3RvbWl6ZWQgdXNpbmcKK2FyYml0cmFyeSBQeXRob24gY29kZS4gIEZvciBleGFtcGxlLCB5b3UgY2FuIHVzZSBhIGN1c3RvbSBlbnZpcm9ubWVudAorKHBlcmhhcHMgaW5oZXJpdGluZyBmcm9tIEdlbmVyaWNFbnZpcm9ubWVudCBvciBHaXRvbGl0ZUVudmlyb25tZW50KSB0bworCisqIGNoYW5nZSBob3cgdGhlIHVzZXIgd2hvIGRpZCB0aGUgcHVzaCBpcyBkZXRlcm1pbmVkCisKKyogcmVhZCB1c2VycycgZW1haWwgYWRkcmVzc2VzIGZyb20gYW4gTERBUCBzZXJ2ZXIgb3IgZnJvbSBhIGRhdGFiYXNlCisKKyogZGVjaWRlIHdoaWNoIHVzZXJzIHNob3VsZCBiZSBub3RpZmllZCBhYm91dCB3aGljaCBjb21taXRzIGJhc2VkIG9uCisgIHRoZSBjb250ZW50cyBvZiB0aGUgY29tbWl0cyAoZS5nLiwgZm9yIHVzZXJzIHdobyB3YW50IHRvIGJlIG5vdGlmaWVkCisgIG9ubHkgYWJvdXQgY2hhbmdlcyBhZmZlY3RpbmcgcGFydGljdWxhciBmaWxlcyBvciBzdWJkaXJlY3RvcmllcykKKworT3IgeW91IGNhbiBjaGFuZ2UgaG93IGVtYWlscyBhcmUgc2VudCBieSB3cml0aW5nIHlvdXIgb3duIE1haWxlcgorY2xhc3MuICBUaGUgYGBwb3N0LXJlY2VpdmVgYCBzY3JpcHQgaW4gdGhpcyBkaXJlY3RvcnkgZGVtb25zdHJhdGVzIGhvdwordG8gdXNlIGdpdF9tdWx0aW1haWwucHkgYXMgYSBQeXRob24gbW9kdWxlLiAgKElmIHlvdSBtYWtlIGludGVyZXN0aW5nCitjaGFuZ2VzIG9mIHRoaXMgdHlwZSwgcGxlYXNlIGNvbnNpZGVyIHNoYXJpbmcgdGhlbSB3aXRoIHRoZQorY29tbXVuaXR5LikKKworCitDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQsIGdpdC1tdWx0aW1haWwgbW9zdGx5IHRha2VzIGl0cyBjb25maWd1cmF0aW9uIGZyb20gdGhlCitmb2xsb3dpbmcgYGBnaXQgY29uZmlnYGAgc2V0dGluZ3M6CisKK211bHRpbWFpbGhvb2suZW52aXJvbm1lbnQKKworICAgIFRoaXMgZGVzY3JpYmVzIHRoZSBnZW5lcmFsIGVudmlyb25tZW50IG9mIHRoZSByZXBvc2l0b3J5LiBJbiBtb3N0CisgICAgY2FzZXMsIHlvdSBkbyBub3QgbmVlZCB0byBzcGVjaWZ5IGEgdmFsdWUgZm9yIHRoaXMgdmFyaWFibGU6CisgICAgYGdpdC1tdWx0aW1haWxgIHdpbGwgYXV0b2RldGVjdCB3aGljaCBlbnZpcm9ubWVudCB0byB1c2UuCisgICAgQ3VycmVudGx5IHN1cHBvcnRlZCB2YWx1ZXM6CisKKyAgICAqIGdlbmVyaWMKKworICAgICAgdGhlIHVzZXJuYW1lIG9mIHRoZSBwdXNoZXIgaXMgcmVhZCBmcm9tICRVU0VSIG9yICRVU0VSTkFNRSBhbmQKKyAgICAgIHRoZSByZXBvc2l0b3J5IG5hbWUgaXMgZGVyaXZlZCBmcm9tIHRoZSByZXBvc2l0b3J5J3MgcGF0aC4KKworICAgICogZ2l0b2xpdGUKKworICAgICAgdGhlIHVzZXJuYW1lIG9mIHRoZSBwdXNoZXIgaXMgcmVhZCBmcm9tICRHTF9VU0VSLCB0aGUgcmVwb3NpdG9yeQorICAgICAgbmFtZSBpcyByZWFkIGZyb20gJEdMX1JFUE8sIGFuZCB0aGUgRnJvbTogaGVhZGVyIHZhbHVlIGlzCisgICAgICBvcHRpb25hbGx5IHJlYWQgZnJvbSBnaXRvbGl0ZS5jb25mIChzZWUgbXVsdGltYWlsaG9vay5mcm9tKS4KKworICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZ2l0b2xpdGUgYW5kIGdpdC1tdWx0aW1haWwsIHJlYWQKKyAgICAgIGA8ZG9jL2dpdG9saXRlLnJzdD5gX18KKworICAgICogc3Rhc2gKKworICAgICAgRW52aXJvbm1lbnQgdG8gdXNlIHdoZW4gYGBnaXQtbXVsdGltYWlsYGAgaXMgcmFuIGFzIGFuIEF0bGFzc2lhbgorICAgICAgQml0QnVja2V0IFNlcnZlciAoZm9ybWVybHkga25vd24gYXMgQXRsYXNzaWFuIFN0YXNoKSBob29rLgorCisgICAgICAqKldhcm5pbmc6KiogdGhpcyBtb2RlIHdhcyBwcm92aWRlZCBieSBhIHRoaXJkLXBhcnR5IGNvbnRyaWJ1dG9yCisgICAgICBhbmQgbmV2ZXIgdGVzdGVkIGJ5IHRoZSBnaXQtbXVsdGltYWlsIG1haW50YWluZXJzLiBJdCBpcworICAgICAgcHJvdmlkZWQgYXMtaXMgYW5kIG1heSBvciBtYXkgbm90IHdvcmsgZm9yIHlvdS4KKworICAgICAgVGhpcyB2YWx1ZSBpcyBhdXRvbWF0aWNhbGx5IGFzc3VtZWQgd2hlbiB0aGUgc3Rhc2gtc3BlY2lmaWMKKyAgICAgIGZsYWdzIChgYC0tc3Rhc2gtdXNlcmBgIGFuZCBgYC0tc3Rhc2gtcmVwb2BgKSBhcmUgc3BlY2lmaWVkIG9uCisgICAgICB0aGUgY29tbWFuZCBsaW5lLiBXaGVuIHRoaXMgZW52aXJvbm1lbnQgaXMgYWN0aXZlLCB0aGUgdXNlcm5hbWUKKyAgICAgIGFuZCByZXBvIGNvbWUgZnJvbSB0aGVzZSB0d28gY29tbWFuZCBsaW5lIGZsYWdzLCB3aGljaCBtdXN0IGJlCisgICAgICBzcGVjaWZpZWQuCisKKyAgICAqIGdlcnJpdAorCisgICAgICBFbnZpcm9ubWVudCB0byB1c2Ugd2hlbiBgYGdpdC1tdWx0aW1haWxgYCBpcyByYW4gYXMgYQorICAgICAgYGByZWYtdXBkYXRlZGBgIEdlcnJpdCBob29rLgorCisgICAgICBUaGlzIHZhbHVlIGlzIHVzZWQgd2hlbiB0aGUgZ2Vycml0LXNwZWNpZmljIGNvbW1hbmQgbGluZSBmbGFncworICAgICAgKGBgLS1vbGRyZXZgYCwgYGAtLW5ld3JldmBgLCBgYC0tcmVmbmFtZWBgLCBgYC0tcHJvamVjdGBgKSBmb3IKKyAgICAgIGdlcnJpdCdzIHJlZi11cGRhdGVkIGhvb2sgYXJlIHByZXNlbnQuIFdoZW4gdGhpcyBlbnZpcm9ubWVudCBpcworICAgICAgYWN0aXZlLCB0aGUgdXNlcm5hbWUgb2YgdGhlIHB1c2hlciBpcyB0YWtlbiBmcm9tIHRoZQorICAgICAgYGAtLXN1Ym1pdHRlcmBgIGFyZ3VtZW50IGlmIHRoYXQgY29tbWFuZCBsaW5lIG9wdGlvbiBpcyBwYXNzZWQsCisgICAgICBvdGhlcndpc2UgJ0dlcnJpdCcgaXMgdXNlZC4gVGhlIHJlcG9zaXRvcnkgbmFtZSBpcyB0YWtlbiBmcm9tCisgICAgICB0aGUgYGAtLXByb2plY3RgYCBvcHRpb24gb24gdGhlIGNvbW1hbmQgbGluZSwgd2hpY2ggbXVzdCBiZSBwYXNzZWQuCisKKyAgICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGdlcnJpdCBhbmQgZ2l0LW11bHRpbWFpbCwgcmVhZAorICAgICAgYDxkb2MvZ2Vycml0LnJzdD5gX18KKworICAgIElmIG5vbmUgb2YgdGhlc2UgZW52aXJvbm1lbnRzIGlzIHN1aXRhYmxlIGZvciB5b3VyIHNldHVwLCB0aGVuIHlvdQorICAgIGNhbiBpbXBsZW1lbnQgYSBQeXRob24gY2xhc3MgdGhhdCBpbmhlcml0cyBmcm9tIEVudmlyb25tZW50IGFuZAorICAgIGluc3RhbnRpYXRlIGl0IHZpYSBhIHNjcmlwdCB0aGF0IGxvb2tzIGxpa2UgdGhlIGV4YW1wbGUKKyAgICBwb3N0LXJlY2VpdmUgc2NyaXB0LgorCisgICAgVGhlIGVudmlyb25tZW50IHZhbHVlIGNhbiBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB1c2luZworICAgIHRoZSBgYC0tZW52aXJvbm1lbnRgYCBvcHRpb24uIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgb24gdGhlCisgICAgY29tbWFuZCBsaW5lIG9yIGJ5IGBgbXVsdGltYWlsaG9vay5lbnZpcm9ubWVudGBgLCB0aGUgdmFsdWUgaXMKKyAgICBndWVzc2VkIGFzIGZvbGxvd3M6CisKKyAgICAqIElmIHN0YXNoLXNwZWNpZmljIChyZXNwZWN0aXZlbHkgZ2Vycml0LXNwZWNpZmljKSBjb21tYW5kIGZsYWdzCisgICAgICBhcmUgcHJlc2VudCBvbiB0aGUgY29tbWFuZC1saW5lLCB0aGVuIGBgc3Rhc2hgYCAocmVzcGVjdGl2ZWx5CisgICAgICBgYGdlcnJpdGBgKSBpcyB1c2VkLgorCisgICAgKiBJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzICRHTF9VU0VSIGFuZCAkR0xfUkVQTyBhcmUgc2V0LCB0aGVuCisgICAgICBgYGdpdG9saXRlYGAgaXMgdXNlZC4KKworICAgICogSWYgbm9uZSBvZiB0aGUgYWJvdmUgYXBwbHksIHRoZW4gYGBnZW5lcmljYGAgaXMgdXNlZC4KKworbXVsdGltYWlsaG9vay5yZXBvTmFtZQorCisgICAgQSBzaG9ydCBuYW1lIG9mIHRoaXMgR2l0IHJlcG9zaXRvcnksIHRvIGJlIHVzZWQgaW4gdmFyaW91cyBwbGFjZXMKKyAgICBpbiB0aGUgbm90aWZpY2F0aW9uIGVtYWlsIHRleHQuICBUaGUgZGVmYXVsdCBpcyB0byB1c2UgJEdMX1JFUE8KKyAgICBmb3IgZ2l0b2xpdGUgcmVwb3NpdG9yaWVzLCBvciBvdGhlcndpc2UgdG8gZGVyaXZlIHRoaXMgdmFsdWUgZnJvbQorICAgIHRoZSByZXBvc2l0b3J5IHBhdGggbmFtZS4KKworbXVsdGltYWlsaG9vay5tYWlsaW5nTGlzdAorCisgICAgVGhlIGxpc3Qgb2YgZW1haWwgYWRkcmVzc2VzIHRvIHdoaWNoIG5vdGlmaWNhdGlvbiBlbWFpbHMgc2hvdWxkIGJlCisgICAgc2VudCwgYXMgUkZDIDI4MjIgZW1haWwgYWRkcmVzc2VzIHNlcGFyYXRlZCBieSBjb21tYXMuICBUaGlzCisgICAgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuIGJlIG11bHRpdmFsdWVkLiAgTGVhdmUgaXQgdW5zZXQgb3Igc2V0IGl0CisgICAgdG8gdGhlIGVtcHR5IHN0cmluZyB0byBub3Qgc2VuZCBlbWFpbHMgYnkgZGVmYXVsdC4gIFRoZSBuZXh0IGZldworICAgIHNldHRpbmdzIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBzcGVjaWZpYyBhZGRyZXNzIGxpc3RzIGZvcgorICAgIHNwZWNpZmljIHR5cGVzIG9mIG5vdGlmaWNhdGlvbiBlbWFpbC4KKworbXVsdGltYWlsaG9vay5yZWZjaGFuZ2VMaXN0CisKKyAgICBUaGUgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgdG8gd2hpY2ggc3VtbWFyeSBlbWFpbHMgYWJvdXQKKyAgICByZWZlcmVuY2UgY2hhbmdlcyBzaG91bGQgYmUgc2VudCwgYXMgUkZDIDI4MjIgZW1haWwgYWRkcmVzc2VzCisgICAgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gIFRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuIGJlCisgICAgbXVsdGl2YWx1ZWQuICBUaGUgZGVmYXVsdCBpcyB0aGUgdmFsdWUgaW4KKyAgICBtdWx0aW1haWxob29rLm1haWxpbmdMaXN0LiAgU2V0IHRoaXMgdmFsdWUgdG8gIm5vbmUiIChvciB0aGUgZW1wdHkKKyAgICBzdHJpbmcpIHRvIHByZXZlbnQgcmVmZXJlbmNlIGNoYW5nZSBlbWFpbHMgZnJvbSBiZWluZyBzZW50IGV2ZW4gaWYKKyAgICBtdWx0aW1haWxob29rLm1haWxpbmdMaXN0IGlzIHNldC4KKworbXVsdGltYWlsaG9vay5hbm5vdW5jZUxpc3QKKworICAgIFRoZSBsaXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byB3aGljaCBlbWFpbHMgYWJvdXQgbmV3IGFubm90YXRlZAorICAgIHRhZ3Mgc2hvdWxkIGJlIHNlbnQsIGFzIFJGQyAyODIyIGVtYWlsIGFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkKKyAgICBjb21tYXMuICBUaGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbiBiZSBtdWx0aXZhbHVlZC4gIFRoZQorICAgIGRlZmF1bHQgaXMgdGhlIHZhbHVlIGluIG11bHRpbWFpbGhvb2sucmVmY2hhbmdlTGlzdCBvcgorICAgIG11bHRpbWFpbGhvb2subWFpbGluZ0xpc3QuICBTZXQgdGhpcyB2YWx1ZSB0byAibm9uZSIgKG9yIHRoZSBlbXB0eQorICAgIHN0cmluZykgdG8gcHJldmVudCBhbm5vdGF0ZWQgdGFnIGFubm91bmNlbWVudCBlbWFpbHMgZnJvbSBiZWluZyBzZW50CisgICAgZXZlbiBpZiBvbmUgb2YgdGhlIG90aGVyIHZhbHVlcyBpcyBzZXQuCisKK211bHRpbWFpbGhvb2suY29tbWl0TGlzdAorCisgICAgVGhlIGxpc3Qgb2YgZW1haWwgYWRkcmVzc2VzIHRvIHdoaWNoIGVtYWlscyBhYm91dCBpbmRpdmlkdWFsIG5ldworICAgIGNvbW1pdHMgc2hvdWxkIGJlIHNlbnQsIGFzIFJGQyAyODIyIGVtYWlsIGFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkKKyAgICBjb21tYXMuICBUaGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbiBiZSBtdWx0aXZhbHVlZC4gIFRoZQorICAgIGRlZmF1bHQgaXMgdGhlIHZhbHVlIGluIG11bHRpbWFpbGhvb2subWFpbGluZ0xpc3QuICBTZXQgdGhpcyB2YWx1ZQorICAgIHRvICJub25lIiAob3IgdGhlIGVtcHR5IHN0cmluZykgdG8gcHJldmVudCBub3RpZmljYXRpb24gZW1haWxzIGFib3V0CisgICAgaW5kaXZpZHVhbCBjb21taXRzIGZyb20gYmVpbmcgc2VudCBldmVuIGlmCisgICAgbXVsdGltYWlsaG9vay5tYWlsaW5nTGlzdCBpcyBzZXQuCisKK211bHRpbWFpbGhvb2suYW5ub3VuY2VTaG9ydGxvZworCisgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHRydWUsIHRoZW4gZW1haWxzIGFib3V0IGNoYW5nZXMgdG8KKyAgICBhbm5vdGF0ZWQgdGFncyBpbmNsdWRlIGEgc2hvcnRsb2cgb2YgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMKKyAgICB0YWcuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgdGhlIGFubm90YXRlZCB0YWdzIHJlcHJlc2VudCByZWxlYXNlczsKKyAgICB0aGVuIHRoZSBzaG9ydGxvZyB3aWxsIGJlIGEga2luZCBvZiByb3VnaCBzdW1tYXJ5IG9mIHdoYXQgaGFzCisgICAgaGFwcGVuZWQgc2luY2UgdGhlIGxhc3QgcmVsZWFzZS4gIEJ1dCBpZiB5b3VyIHRhZ2dpbmcgcG9saWN5IGlzCisgICAgbm90IHNvIHN0cmFpZ2h0Zm9yd2FyZCwgdGhlbiB0aGUgc2hvcnRsb2cgbWlnaHQgYmUgY29uZnVzaW5nCisgICAgcmF0aGVyIHRoYW4gdXNlZnVsLiAgRGVmYXVsdCBpcyBmYWxzZS4KKworbXVsdGltYWlsaG9vay5jb21taXRFbWFpbEZvcm1hdAorCisgICAgVGhlIGZvcm1hdCBvZiBlbWFpbCBtZXNzYWdlcyBmb3IgdGhlIGluZGl2aWR1YWwgY29tbWl0cywgY2FuIGJlICJ0ZXh0IiBvcgorICAgICJodG1sIi4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgZW1haWxzIHdpbGwgaW5jbHVkZSBkaWZmcyB1c2luZyBjb2xvcml6ZWQKKyAgICBIVE1MIGluc3RlYWQgb2YgcGxhaW4gdGV4dCB1c2VkIGJ5IGRlZmF1bHQuIE5vdGUgdGhhdCB0aGlzICBjdXJyZW50bHkgdGhlCisgICAgcmVmIGNoYW5nZSBlbWFpbHMgYXJlIGFsd2F5cyBzZW50IGluIHBsYWluIHRleHQuCisKKyAgICBOb3RlIHRoYXQgd2hlbiB1c2luZyAiaHRtbCIsIHRoZSBmb3JtYXR0aW5nIGlzIGRvbmUgYnkgcGFyc2luZyB0aGUKKyAgICBvdXRwdXQgb2YgYGBnaXQgbG9nYGAgd2l0aCBgYC1wYGAuIFdoZW4gdXNpbmcKKyAgICBgYG11bHRpbWFpbGhvb2suY29tbWl0TG9nT3B0c2BgIHRvIHNwZWNpZnkgYSBgYC0tZm9ybWF0YGAgZm9yCisgICAgYGBnaXQgbG9nYGAsIG9uZSBtYXkgZ2V0IGZhbHNlIHBvc2l0aXZlIChlLmcuIGxpbmVzIGluIHRoZSBib2R5IG9mCisgICAgdGhlIG1lc3NhZ2Ugc3RhcnRpbmcgd2l0aCBgYCsrK2BgIG9yIGBgLS0tYGAgY29sb3JlZCBpbiByZWQgb3IKKyAgICBncmVlbikuCisKK211bHRpbWFpbGhvb2sucmVmY2hhbmdlU2hvd0dyYXBoCisKKyAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiBzdW1tYXJ5IGVtYWlscyBhYm91dCByZWZlcmVuY2UKKyAgICBjaGFuZ2VzIHdpbGwgYWRkaXRpb25hbGx5IGluY2x1ZGU6CisKKyAgICAqIGEgZ3JhcGggb2YgdGhlIGFkZGVkIGNvbW1pdHMgKGlmIGFueSkKKworICAgICogYSBncmFwaCBvZiB0aGUgZGlzY2FyZGVkIGNvbW1pdHMgKGlmIGFueSkKKworICAgIFRoZSBsb2cgaXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgYGBnaXQgbG9nIC0tZ3JhcGhgYCB3aXRoIHRoZSBvcHRpb25zCisgICAgc3BlY2lmaWVkIGluIGdyYXBoT3B0cy4gIFRoZSBkZWZhdWx0IGlzIGZhbHNlLgorCittdWx0aW1haWxob29rLnJlZmNoYW5nZVNob3dMb2cKKworICAgIElmIHRoaXMgb3B0aW9uIGlzIHNldCB0byB0cnVlLCB0aGVuIHN1bW1hcnkgZW1haWxzIGFib3V0IHJlZmVyZW5jZQorICAgIGNoYW5nZXMgd2lsbCBpbmNsdWRlIGEgZGV0YWlsZWQgbG9nIG9mIHRoZSBhZGRlZCBjb21taXRzIGluCisgICAgYWRkaXRpb24gdG8gdGhlIG9uZSBsaW5lIHN1bW1hcnkuICBUaGUgbG9nIGlzIGdlbmVyYXRlZCBieSBydW5uaW5nCisgICAgYGBnaXQgbG9nYGAgd2l0aCB0aGUgb3B0aW9ucyBzcGVjaWZpZWQgaW4gbXVsdGltYWlsaG9vay5sb2dPcHRzLgorICAgIERlZmF1bHQgaXMgZmFsc2UuCisKK211bHRpbWFpbGhvb2subWFpbGVyCisKKyAgICBUaGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSB3YXkgZW1haWxzIGFyZSBzZW50LiAgQWNjZXB0ZWQgdmFsdWVzIGFyZToKKworICAgIC0gc2VuZG1haWwgKHRoZSBkZWZhdWx0KTogdXNlIHRoZSBjb21tYW5kIGBgL3Vzci9zYmluL3NlbmRtYWlsYGAgb3IKKyAgICAgIGBgL3Vzci9saWIvc2VuZG1haWxgYCAob3Igc2VuZG1haWxDb21tYW5kLCBpZiBjb25maWd1cmVkKS4gIFRoaXMKKyAgICAgIG1vZGUgY2FuIGJlIGZ1cnRoZXIgY3VzdG9taXplZCB2aWEgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisgICAgICAqIG11bHRpbWFpbGhvb2suc2VuZG1haWxDb21tYW5kCisKKyAgICAgICAgVGhlIGNvbW1hbmQgdXNlZCBieSBtYWlsZXIgYGBzZW5kbWFpbGBgIHRvIHNlbmQgZW1haWxzLiAgU2hlbGwKKyAgICAgICAgcXVvdGluZyBpcyBhbGxvd2VkIGluIHRoZSB2YWx1ZSBvZiB0aGlzIHNldHRpbmcsIGJ1dCByZW1lbWJlciB0aGF0CisgICAgICAgIEdpdCByZXF1aXJlcyBkb3VibGUtcXVvdGVzIHRvIGJlIGVzY2FwZWQ7IGUuZy46OgorCisgICAgICAgICAgICAgZ2l0IGNvbmZpZyBtdWx0aW1haWxob29rLnNlbmRtYWlsY29tbWFuZCAnL3Vzci9zYmluL3NlbmRtYWlsIC1vaSAtdCAtRiBcIkdpdCBSZXBvXCInCisKKyAgICAgICAgRGVmYXVsdCBpcyAnL3Vzci9zYmluL3NlbmRtYWlsIC1vaSAtdCcgb3IKKyAgICAgICAgJy91c3IvbGliL3NlbmRtYWlsIC1vaSAtdCcgKGRlcGVuZGluZyBvbiB3aGljaCBmaWxlIGlzCisgICAgICAgIHByZXNlbnQgYW5kIGV4ZWN1dGFibGUpLgorCisgICAgICAqIG11bHRpbWFpbGhvb2suZW52ZWxvcGVTZW5kZXIKKworICAgICAgICBJZiBzZXQgdGhlbiBwYXNzIHRoaXMgdmFsdWUgdG8gc2VuZG1haWwgdmlhIHRoZSAtZiBvcHRpb24gdG8gc2V0CisgICAgICAgIHRoZSBlbnZlbG9wZSBzZW5kZXIgYWRkcmVzcy4KKworICAgIC0gc210cDogdXNlIFB5dGhvbidzIHNtdHBsaWIuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHRoZSBzZW5kbWFpbAorICAgICAgY29tbWFuZCBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0uICBUaGlzIG1vZGUgY2FuIGJlCisgICAgICBmdXJ0aGVyIGN1c3RvbWl6ZWQgdmlhIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKKworICAgICAgKiBtdWx0aW1haWxob29rLnNtdHBTZXJ2ZXIKKworICAgICAgICBUaGUgbmFtZSBvZiB0aGUgU01UUCBzZXJ2ZXIgdG8gY29ubmVjdCB0by4gIFRoZSB2YWx1ZSBjYW4KKyAgICAgICAgYWxzbyBpbmNsdWRlIGEgY29sb24gYW5kIGEgcG9ydCBudW1iZXI7IGUuZy4sCisgICAgICAgIGBgbWFpbC5leGFtcGxlLmNvbToyNWBgLiAgRGVmYXVsdCBpcyAnbG9jYWxob3N0JyB1c2luZyBwb3J0IDI1LgorCisgICAgICAqIG11bHRpbWFpbGhvb2suc210cFVzZXIKKyAgICAgICogbXVsdGltYWlsaG9vay5zbXRwUGFzcworCisgICAgICAgIFNlcnZlciB1c2VybmFtZSBhbmQgcGFzc3dvcmQuIFJlcXVpcmVkIGlmIHNtdHBFbmNyeXB0aW9uIGlzICdzc2wnLgorICAgICAgICBOb3RlIHRoYXQgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBjdXJyZW50bHkgbmVlZCB0byBiZQorICAgICAgICBzZXQgY2xlYXJ0ZXh0IGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIGlzIG5vdAorICAgICAgICByZWNvbW1lbmRlZC4gSWYgeW91IG5lZWQgdG8gdXNlIHRoaXMgb3B0aW9uLCBiZSBzdXJlIHlvdXIKKyAgICAgICAgY29uZmlndXJhdGlvbiBmaWxlIGlzIHJlYWQtb25seS4KKworICAgICAgKiBtdWx0aW1haWxob29rLmVudmVsb3BlU2VuZGVyCisKKyAgICAgICAgVGhlIHNlbmRlciBhZGRyZXNzIHRvIGJlIHBhc3NlZCB0byB0aGUgU01UUCBzZXJ2ZXIuICBJZgorICAgICAgICB1bnNldCwgdGhlbiB0aGUgdmFsdWUgb2YgbXVsdGltYWlsaG9vay5mcm9tIGlzIHVzZWQuCisKKyAgICAgICogbXVsdGltYWlsaG9vay5zbXRwU2VydmVyVGltZW91dAorCisgICAgICAgIFRpbWVvdXQgaW4gc2Vjb25kcy4KKworICAgICAgKiBtdWx0aW1haWxob29rLnNtdHBFbmNyeXB0aW9uCisKKyAgICAgICAgU2V0IHRoZSBzZWN1cml0eSB0eXBlLiBBbGxvd2VkIHZhbHVlczogbm9uZSwgc3NsLCB0bHMuCisgICAgICAgIERlZmF1bHQ9bm9uZS4KKworICAgICAgKiBtdWx0aW1haWxob29rLnNtdHBTZXJ2ZXJEZWJ1Z0xldmVsCisKKyAgICAgICAgSW50ZWdlciBudW1iZXIuIFNldCB0byBncmVhdGVyIHRoYW4gMCB0byBhY3RpdmF0ZSBkZWJ1Z2dpbmcuCisKK211bHRpbWFpbGhvb2suZnJvbQorbXVsdGltYWlsaG9vay5mcm9tQ29tbWl0CittdWx0aW1haWxob29rLmZyb21SZWZjaGFuZ2UKKworICAgIElmIHNldCwgdXNlIHRoaXMgdmFsdWUgaW4gdGhlIEZyb206IGZpZWxkIG9mIGdlbmVyYXRlZCBlbWFpbHMuCisgICAgYGBmcm9tQ29tbWl0YGAgaXMgdXNlZCBmb3IgY29tbWl0IGVtYWlscywgYGBmcm9tUmVmY2hhbmdlYGAgaXMKKyAgICB1c2VkIGZvciByZWZjaGFuZ2UgZW1haWxzLCBhbmQgYGBmcm9tYGAgaXMgdXNlZCBhcyBmYWxsLWJhY2sgaW4KKyAgICBhbGwgY2FzZXMuCisKKyAgICBUaGUgdmFsdWUgZm9yIHRoZXNlIHZhcmlhYmxlcyBjYW4gYmUgZWl0aGVyOgorCisgICAgLSBBbiBlbWFpbCBhZGRyZXNzLCB3aGljaCB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCisKKyAgICAtIFRoZSB2YWx1ZSBgYHB1c2hlcmBgLCBpbiB3aGljaCBjYXNlIHRoZSBwdXNoZXIncyBhZGRyZXNzIChpZgorICAgICAgYXZhaWxhYmxlKSB3aWxsIGJlIHVzZWQuCisKKyAgICAtIFRoZSB2YWx1ZSBgYGF1dGhvcmBgIChtZWFuaW5nZnVsIG9ubHkgZm9yIHJlcGx5VG9Db21taXQpLCBpbiB3aGljaAorICAgICAgY2FzZSB0aGUgY29tbWl0IGF1dGhvcidzIGFkZHJlc3Mgd2lsbCBiZSB1c2VkLgorCisgICAgSWYgY29uZmlnIHZhbHVlcyBhcmUgdW5zZXQsIHRoZSB2YWx1ZSBvZiB0aGUgRnJvbTogaGVhZGVyIGlzCisgICAgZGV0ZXJtaW5lZCBhcyBmb2xsb3dzOgorCisgICAgMS4gKGdpdG9saXRlIGVudmlyb25tZW50IG9ubHkpIFBhcnNlIGdpdG9saXRlLmNvbmYsIGxvb2tpbmcgZm9yIGEKKyAgICAgICBibG9jayBvZiBjb21tZW50cyB0aGF0IGxvb2tzIGxpa2UgdGhpczo6CisKKyAgICAgICAgICAgIyBCRUdJTiBVU0VSIEVNQUlMUworICAgICAgICAgICAjIHVzZXJuYW1lIEZpcnN0bmFtZSBMYXN0bmFtZSA8ZW1haWxAZXhhbXBsZS5jb20+CisgICAgICAgICAgICMgRU5EIFVTRVIgRU1BSUxTCisKKyAgICAgICBJZiB0aGF0IGJsb2NrIGV4aXN0cywgYW5kIHRoZXJlIGlzIGEgbGluZSBiZXR3ZWVuIHRoZSBCRUdJTgorICAgICAgIFVTRVIgRU1BSUxTIGFuZCBFTkQgVVNFUiBFTUFJTFMgbGluZXMgd2hlcmUgdGhlIGZpcnN0IGZpZWxkCisgICAgICAgbWF0Y2hlcyB0aGUgZ2l0b2xpdGUgdXNlcm5hbWUgKCRHTF9VU0VSKSwgdXNlIHRoZSByZXN0IG9mIHRoZQorICAgICAgIGxpbmUgZm9yIHRoZSBGcm9tOiBoZWFkZXIuCisKKyAgICAyLiBJZiB0aGUgdXNlci5lbWFpbCBjb25maWd1cmF0aW9uIHNldHRpbmcgaXMgc2V0LCB1c2UgaXRzIHZhbHVlCisgICAgICAgKGFuZCB0aGUgdmFsdWUgb2YgdXNlci5uYW1lLCBpZiBzZXQpLgorCisgICAgMy4gVXNlIHRoZSB2YWx1ZSBvZiBtdWx0aW1haWxob29rLmVudmVsb3BlU2VuZGVyLgorCittdWx0aW1haWxob29rLmFkbWluaXN0cmF0b3IKKworICAgIFRoZSBuYW1lIGFuZC9vciBlbWFpbCBhZGRyZXNzIG9mIHRoZSBhZG1pbmlzdHJhdG9yIG9mIHRoZSBHaXQKKyAgICByZXBvc2l0b3J5OyB1c2VkIGluIEZPT1RFUl9URU1QTEFURS4gIERlZmF1bHQgaXMKKyAgICBtdWx0aW1haWxob29rLmVudmVsb3Blc2VuZGVyIGlmIGl0IGlzIHNldDsgb3RoZXJ3aXNlIGEgZ2VuZXJpYworICAgIHN0cmluZyBpcyB1c2VkLgorCittdWx0aW1haWxob29rLmVtYWlsUHJlZml4CisKKyAgICBBbGwgZW1haWxzIGhhdmUgdGhpcyBzdHJpbmcgcHJlcGVuZGVkIHRvIHRoZWlyIHN1YmplY3RzLCB0byBhaWQKKyAgICBlbWFpbCBmaWx0ZXJpbmcgKHRob3VnaCBmaWx0ZXJpbmcgYmFzZWQgb24gdGhlIFgtR2l0LSogZW1haWwKKyAgICBoZWFkZXJzIGlzIHByb2JhYmx5IG1vcmUgcm9idXN0KS4gIERlZmF1bHQgaXMgdGhlIHNob3J0IG5hbWUgb2YKKyAgICB0aGUgcmVwb3NpdG9yeSBpbiBzcXVhcmUgYnJhY2tldHM7IGUuZy4sIGBgW215cmVwb11gYC4gIFNldCB0aGlzCisgICAgdmFsdWUgdG8gdGhlIGVtcHR5IHN0cmluZyB0byBzdXBwcmVzcyB0aGUgZW1haWwgcHJlZml4LgorCittdWx0aW1haWxob29rLmVtYWlsTWF4TGluZXMKKworICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgYm9keSBvZgorICAgIGEgZ2VuZXJhdGVkIGVtYWlsLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlcmUgaXMgbm8gbGltaXQuICBMaW5lcworICAgIGJleW9uZCB0aGUgbGltaXQgYXJlIHN1cHByZXNzZWQgYW5kIGNvdW50ZWQsIGFuZCBhIGZpbmFsIGxpbmUgaXMKKyAgICBhZGRlZCBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2Ygc3VwcHJlc3NlZCBsaW5lcy4KKworbXVsdGltYWlsaG9vay5lbWFpbE1heExpbmVMZW5ndGgKKworICAgIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGxpbmUgaW4gdGhlIGVtYWlsIGJvZHkuICBMaW5lcyBsb25nZXIgdGhhbgorICAgIHRoaXMgbGltaXQgYXJlIHRydW5jYXRlZCB0byB0aGlzIGxlbmd0aCB3aXRoIGEgdHJhaWxpbmcgYGAgWy4uLl1gYAorICAgIGFkZGVkIHRvIGluZGljYXRlIHRoZSBtaXNzaW5nIHRleHQuICBUaGUgZGVmYXVsdCBpcyA1MDAsIGJlY2F1c2UKKyAgICAoYSkgZGlmZnMgd2l0aCBsb25nZXIgbGluZXMgYXJlIHByb2JhYmx5IGZyb20gYmluYXJ5IGZpbGVzLCBmb3IKKyAgICB3aGljaCBhIGRpZmYgaXMgdXNlbGVzcywgYW5kIChiKSBldmVuIGlmIGEgdGV4dCBmaWxlIGhhcyBzdWNoIGxvbmcKKyAgICBsaW5lcywgdGhlIGRpZmZzIGFyZSBwcm9iYWJseSB1bnJlYWRhYmxlIGFueXdheS4gIFRvIGRpc2FibGUgbGluZQorICAgIHRydW5jYXRpb24sIHNldCB0aGlzIG9wdGlvbiB0byAwLgorCittdWx0aW1haWxob29rLm1heENvbW1pdEVtYWlscworCisgICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbW1pdCBlbWFpbHMgdG8gc2VuZCBmb3IgYSBnaXZlbiBjaGFuZ2UuCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIHBhdGNoZXMgaXMgbGFyZ2VyIHRoYXQgdGhpcyB2YWx1ZSwgb25seSB0aGUKKyAgICBzdW1tYXJ5IHJlZmNoYW5nZSBlbWFpbCBpcyBzZW50LiAgVGhpcyBjYW4gYXZvaWQgYWNjaWRlbnRhbAorICAgIG1haWxib21iaW5nLCBmb3IgZXhhbXBsZSBvbiBhbiBpbml0aWFsIHB1c2guICBUbyBkaXNhYmxlIGNvbW1pdAorICAgIGVtYWlscyBsaW1pdCwgc2V0IHRoaXMgb3B0aW9uIHRvIDAuICBUaGUgZGVmYXVsdCBpcyA1MDAuCisKK211bHRpbWFpbGhvb2suZW1haWxTdHJpY3RVVEY4CisKKyAgICBJZiB0aGlzIGJvb2xlYW4gb3B0aW9uIGlzIHNldCB0byBgdHJ1ZWAsIHRoZW4gdGhlIG1haW4gcGFydCBvZiB0aGUKKyAgICBlbWFpbCBib2R5IGlzIGZvcmNlZCB0byBiZSB2YWxpZCBVVEYtOC4gIEFueSBjaGFyYWN0ZXJzIHRoYXQgYXJlCisgICAgbm90IHZhbGlkIFVURi04IGFyZSBjb252ZXJ0ZWQgdG8gdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnQKKyAgICBjaGFyYWN0ZXIsIFUrRkZGRC4gIFRoZSBkZWZhdWx0IGlzIGB0cnVlYC4KKworbXVsdGltYWlsaG9vay5kaWZmT3B0cworCisgICAgT3B0aW9ucyBwYXNzZWQgdG8gYGBnaXQgZGlmZi10cmVlYGAgd2hlbiBnZW5lcmF0aW5nIHRoZSBzdW1tYXJ5CisgICAgaW5mb3JtYXRpb24gZm9yIFJlZmVyZW5jZUNoYW5nZSBlbWFpbHMuICBEZWZhdWx0IGlzIGBgLS1zdGF0CisgICAgLS1zdW1tYXJ5IC0tZmluZC1jb3BpZXMtaGFyZGVyYGAuICBBZGQgLXAgdG8gdGhvc2Ugb3B0aW9ucyB0bworICAgIGluY2x1ZGUgYSB1bmlmaWVkIGRpZmYgb2YgY2hhbmdlcyBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgc3VtbWFyeQorICAgIG91dHB1dC4gIFNoZWxsIHF1b3RpbmcgaXMgYWxsb3dlZDsgc2VlIG11bHRpbWFpbGhvb2subG9nT3B0cyBmb3IKKyAgICBkZXRhaWxzLgorCittdWx0aW1haWxob29rLmdyYXBoT3B0cworCisgICAgT3B0aW9ucyBwYXNzZWQgdG8gYGBnaXQgbG9nIC0tZ3JhcGhgYCB3aGVuIGdlbmVyYXRpbmcgZ3JhcGhzIGZvciB0aGUKKyAgICByZWZlcmVuY2UgY2hhbmdlIHN1bW1hcnkgZW1haWxzICh1c2VkIG9ubHkgaWYgcmVmY2hhbmdlU2hvd0dyYXBoCisgICAgaXMgdHJ1ZSkuICBUaGUgZGVmYXVsdCBpcyAnLS1vbmVsaW5lIC0tZGVjb3JhdGUnLgorCisgICAgU2hlbGwgcXVvdGluZyBpcyBhbGxvd2VkOyBzZWUgbG9nT3B0cyBmb3IgZGV0YWlscy4KKworbXVsdGltYWlsaG9vay5sb2dPcHRzCisKKyAgICBPcHRpb25zIHBhc3NlZCB0byBgYGdpdCBsb2dgYCB0byBnZW5lcmF0ZSBhZGRpdGlvbmFsIGluZm8gZm9yCisgICAgcmVmZXJlbmNlIGNoYW5nZSBlbWFpbHMgKHVzZWQgb25seSBpZiByZWZjaGFuZ2VTaG93TG9nIGlzIHNldCkuCisgICAgRm9yIGV4YW1wbGUsIGFkZGluZyAtcCB3aWxsIHNob3cgZWFjaCBjb21taXQncyBjb21wbGV0ZSBkaWZmLiAgVGhlCisgICAgZGVmYXVsdCBpcyBlbXB0eS4KKworICAgIFNoZWxsIHF1b3RpbmcgaXMgYWxsb3dlZDsgZm9yIGV4YW1wbGUsIGEgbG9nIGZvcm1hdCB0aGF0IGNvbnRhaW5zCisgICAgc3BhY2VzIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgc29tZXRoaW5nIGxpa2U6OgorCisgICAgICBnaXQgY29uZmlnIG11bHRpbWFpbGhvb2subG9nb3B0cyAnLS1wcmV0dHk9Zm9ybWF0OiIlaCAlYU4gPCVhRT4lbiVzJW4lbiViJW4iJworCisgICAgSWYgeW91IHdhbnQgdG8gc2V0IHRoaXMgYnkgZWRpdGluZyB5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgIGRpcmVjdGx5LCByZW1lbWJlciB0aGF0IEdpdCByZXF1aXJlcyBkb3VibGUtcXVvdGVzIHRvIGJlIGVzY2FwZWQKKyAgICAoc2VlIGdpdC1jb25maWcoMSkgZm9yIG1vcmUgaW5mb3JtYXRpb24pOjoKKworICAgICAgW211bHRpbWFpbGhvb2tdCisgICAgICAgICAgICAgIGxvZ29wdHMgPSAtLXByZXR0eT1mb3JtYXQ6XCIlaCAlYU4gPCVhRT4lbiVzJW4lbiViJW5cIgorCittdWx0aW1haWxob29rLmNvbW1pdExvZ09wdHMKKworICAgIE9wdGlvbnMgcGFzc2VkIHRvIGBgZ2l0IGxvZ2BgIHRvIGdlbmVyYXRlIGFkZGl0aW9uYWwgaW5mbyBmb3IKKyAgICByZXZpc2lvbiBjaGFuZ2UgZW1haWxzLiAgRm9yIGV4YW1wbGUsIGFkZGluZyAtLWlnbm9yZS1hbGwtc3BhY2VzCisgICAgd2lsbCBzdXBwcmVzcyB3aGl0ZXNwYWNlIGNoYW5nZXMuICBUaGUgZGVmYXVsdCBvcHRpb25zIGFyZSBgYC1DCisgICAgLS1zdGF0IC1wIC0tY2NgYC4gIFNoZWxsIHF1b3RpbmcgaXMgYWxsb3dlZDsgc2VlCisgICAgbXVsdGltYWlsaG9vay5sb2dPcHRzIGZvciBkZXRhaWxzLgorCittdWx0aW1haWxob29rLmRhdGVTdWJzdGl0dXRlCisKKyAgICBTdHJpbmcgdG8gdXNlIGFzIGEgc3Vic3RpdHV0ZSBmb3IgYGBEYXRlOmBgIGluIHRoZSBvdXRwdXQgb2YgYGBnaXQKKyAgICBsb2dgYCB3aGlsZSBmb3JtYXR0aW5nIGNvbW1pdCBtZXNzYWdlcy4gVGhpcyBpcyB1c2VmdWxsIHRvIGF2b2lkCisgICAgZW1pdHRpbmcgYSBsaW5lIHRoYXQgY2FuIGJlIGludGVycHJldGVkIGJ5IG1haWxlcnMgYXMgdGhlIHN0YXJ0IG9mCisgICAgYSBjaXRlZCBtZXNzYWdlIChaaW1icmEgd2VibWFpbCBpbiBwYXJ0aWN1bGFyKS4gRGVmYXVsdHMgdG8KKyAgICBgYENvbW1pdERhdGU6IGBgLiBTZXQgdG8gYW4gZW1wdHkgc3RyaW5nIG9yIGBgbm9uZWBgIHRvIGRlYWN0aXZhdGUKKyAgICB0aGUgYmVoYXZpb3IuCisKK211bHRpbWFpbGhvb2suZW1haWxEb21haW4KKworICAgIERvbWFpbiBuYW1lIGFwcGVuZGVkIHRvIHRoZSB1c2VybmFtZSBvZiB0aGUgcGVyc29uIGRvaW5nIHRoZSBwdXNoCisgICAgdG8gY29udmVydCBpdCBpbnRvIGFuIGVtYWlsIGFkZHJlc3MKKyAgICAodmlhIGBgIiVzQCVzIiAlICh1c2VybmFtZSwgZW1haWxkb21haW4pYGApLiBNb3JlIGNvbXBsaWNhdGVkCisgICAgc2NoZW1lcyBjYW4gYmUgaW1wbGVtZW50ZWQgYnkgb3ZlcnJpZGluZyBFbnZpcm9ubWVudCBhbmQKKyAgICBvdmVycmlkaW5nIGl0cyBnZXRfcHVzaGVyX2VtYWlsKCkgbWV0aG9kLgorCittdWx0aW1haWxob29rLnJlcGx5VG8KK211bHRpbWFpbGhvb2sucmVwbHlUb0NvbW1pdAorbXVsdGltYWlsaG9vay5yZXBseVRvUmVmY2hhbmdlCisKKyAgICBBZGRyZXNzZXMgdG8gdXNlIGluIHRoZSBSZXBseS1UbzogZmllbGQgZm9yIGNvbW1pdCBlbWFpbHMKKyAgICAocmVwbHlUb0NvbW1pdCkgYW5kIHJlZmNoYW5nZSBlbWFpbHMgKHJlcGx5VG9SZWZjaGFuZ2UpLgorICAgIG11bHRpbWFpbGhvb2sucmVwbHlUbyBpcyB1c2VkIGFzIGRlZmF1bHQgd2hlbiByZXBseVRvQ29tbWl0IG9yCisgICAgcmVwbHlUb1JlZmNoYW5nZSBpcyBub3Qgc2V0LiBUaGUgc2hvcnRjdXRzIGBgcHVzaGVyYGAgYW5kCisgICAgYGBhdXRob3JgYCBhcmUgYWxsb3dlZCB3aXRoIHRoZSBzYW1lIHNlbWFudGljcyBhcyBmb3IKKyAgICBgYG11bHRpbWFpbGhvb2suZnJvbWBgLiBJbiBhZGRpdGlvbiwgdGhlIHZhbHVlIGBgbm9uZWBgIGNhbiBiZQorICAgIHVzZWQgdG8gb21pdCB0aGUgYGBSZXBseS1UbzpgYCBmaWVsZC4KKworICAgIFRoZSBkZWZhdWx0IGlzIGBgcHVzaGVyYGAgZm9yIHJlZmNoYW5nZSBlbWFpbHMsIGFuZCBgYGF1dGhvcmBgIGZvcgorICAgIGNvbW1pdCBlbWFpbHMuCisKK211bHRpbWFpbGhvb2sucXVpZXQKKworICAgIERvIG5vdCBvdXRwdXQgdGhlIGxpc3Qgb2YgZW1haWwgcmVjaXBpZW50cyBmcm9tIHRoZSBob29rCisKK211bHRpbWFpbGhvb2suc3Rkb3V0CisKKyAgICBGb3IgZGVidWdnaW5nLCBzZW5kIGVtYWlscyB0byBzdGRvdXQgcmF0aGVyIHRoYW4gdG8gdGhlCisgICAgbWFpbGVyLiAgRXF1aXZhbGVudCB0byB0aGUgLS1zdGRvdXQgY29tbWFuZCBsaW5lIG9wdGlvbgorCittdWx0aW1haWxob29rLnNjYW5Db21taXRGb3JDYworCisgICAgSWYgdGhpcyBvcHRpb24gaXMgc2V0IHRvIHRydWUsIHRoYW4gcmVjaXBpZW50cyBmcm9tIGxpbmVzIGluIGNvbW1pdCBib2R5CisgICAgdGhhdCBzdGFydHMgd2l0aCBgYENDOmBgIHdpbGwgYmUgYWRkZWQgdG8gQ0MgbGlzdC4KKyAgICBEZWZhdWx0OiBmYWxzZQorCittdWx0aW1haWxob29rLmNvbWJpbmVXaGVuU2luZ2xlQ29tbWl0CisKKyAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZSBhbmQgYSBzaW5nbGUgbmV3IGNvbW1pdCBpcyBwdXNoZWQgdG8KKyAgICBhIGJyYW5jaCwgY29tYmluZSB0aGUgc3VtbWFyeSBhbmQgY29tbWl0IGVtYWlsIG1lc3NhZ2VzIGludG8gYQorICAgIHNpbmdsZSBlbWFpbC4KKyAgICBEZWZhdWx0OiB0cnVlCisKK211bHRpbWFpbGhvb2sucmVmRmlsdGVySW5jbHVzaW9uUmVnZXgKK211bHRpbWFpbGhvb2sucmVmRmlsdGVyRXhjbHVzaW9uUmVnZXgKK211bHRpbWFpbGhvb2sucmVmRmlsdGVyRG9TZW5kUmVnZXgKK211bHRpbWFpbGhvb2sucmVmRmlsdGVyRG9udFNlbmRSZWdleAorCisgICAgKipXYXJuaW5nOioqIHRoZXNlIG9wdGlvbnMgYXJlIGV4cGVyaW1lbnRhbC4gVGhleSBzaG91bGQgd29yaywgYnV0CisgICAgdGhlIHVzZXItaW50ZXJmYWNlIGlzIG5vdCBzdGFibGUgeWV0IChpbiBwYXJ0aWN1bGFyLCB0aGUgb3B0aW9uCisgICAgbmFtZXMgbWF5IGNoYW5nZSkuIElmIHlvdSB3YW50IHRvIHBhcnRpY2lwYXRlIGluIHN0YWJpbGl6aW5nIHRoZQorICAgIGZlYXR1cmUsIHBsZWFzZSBjb250YWN0IHRoZSBtYWludGFpbmVycyBhbmQvb3Igc2VuZCBwdWxsLXJlcXVlc3RzLgorCisgICAgUmVndWxhciBleHByZXNzaW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGxpbWl0IHJlZnMgZm9yIHdoaWNoIGVtYWlsCisgICAgdXBkYXRlcyB3aWxsIGJlIHNlbnQuICBJdCBpcyBhbiBlcnJvciB0byBzcGVjaWZ5IGJvdGggYW4gaW5jbHVzaW9uCisgICAgYW5kIGFuIGV4Y2x1c2lvbiByZWdleC4gIElmIGEgYGByZWZGaWx0ZXJJbmNsdXNpb25SZWdleGBgIGlzCisgICAgc3BlY2lmaWVkLCBlbWFpbHMgd2lsbCBvbmx5IGJlIHNlbnQgZm9yIHJlZnMgd2hpY2ggbWF0Y2ggdGhpcworICAgIHJlZ2V4LiAgSWYgYSBgYHJlZkZpbHRlckV4Y2x1c2lvblJlZ2V4YGAgcmVnZXggaXMgc3BlY2lmaWVkLAorICAgIGVtYWlscyB3aWxsIGJlIHNlbnQgZm9yIGFsbCByZWZzIGV4Y2VwdCB0aG9zZSB0aGF0IG1hdGNoIHRoaXMKKyAgICByZWdleCAob3IgdGhhdCBtYXRjaCBhIHByZWRlZmluZWQgcmVnZXggc3BlY2lmaWMgdG8gdGhlCisgICAgZW52aXJvbm1lbnQsIHN1Y2ggYXMgIl5yZWZzL25vdGVzIiBmb3IgbW9zdCBlbnZpcm9ubWVudHMgYW5kCisgICAgIl5yZWZzL25vdGVzfF5yZWZzL2NoYW5nZXMiIGZvciB0aGUgZ2Vycml0IGVudmlyb25tZW50KS4KKworICAgIFRoZSBleHByZXNzaW9ucyBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBjb21wbGV0ZSByZWZuYW1lLCBhbmQgaXMKKyAgICBjb25zaWRlcmVkIHRvIG1hdGNoIGlmIGFueSBzdWJzdHJpbmcgbWF0Y2hlcy4gRm9yIGV4YW1wbGUsIHRvCisgICAgZmlsdGVyLW91dCBhbGwgdGFncywgc2V0IGBgcmVmRmlsdGVyRXhjbHVzaW9uUmVnZXhgYCB0bworICAgIGBgXnJlZnMvdGFncy9gYCAobm90ZSB0aGUgbGVhZGluZyBgYF5gYCBidXQgbm8gdHJhaWxpbmcgYGAkYGApLiBJZgorICAgIHlvdSBzZXQgYGByZWZGaWx0ZXJFeGNsdXNpb25SZWdleGBgIHRvIGBgbWFzdGVyYGAsIHRoZW4gYW55IHJlZgorICAgIGNvbnRhaW5pbmcgYGBtYXN0ZXJgYCB3aWxsIGJlIGV4Y2x1ZGVkICh0aGUgYGBtYXN0ZXJgYCBicmFuY2gsIGJ1dAorICAgIGFsc28gYGByZWZzL3RhZ3MvbWFzdGVyYGAgb3IgYGByZWZzL2hlYWRzL2Zvby1tYXN0ZXItYmFyYGApLgorCisgICAgYGByZWZGaWx0ZXJEb1NlbmRSZWdleGBgIGFuZCBgYHJlZkZpbHRlckRvbnRTZW5kUmVnZXhgYCBhcmUKKyAgICBhbmFsb2dvdXMgdG8gYGByZWZGaWx0ZXJJbmNsdXNpb25SZWdleGBgIGFuZAorICAgIGBgcmVmRmlsdGVyRXhjbHVzaW9uUmVnZXhgYCB3aXRoIG9uZSBkaWZmZXJlbmNlOiB3aXRoCisgICAgYGByZWZGaWx0ZXJEb1NlbmRSZWdleGBgIGFuZCBgYHJlZkZpbHRlckRvbnRTZW5kUmVnZXhgYCwgY29tbWl0cworICAgIGludHJvZHVjZWQgYnkgb25lIGV4Y2x1ZGVkIHJlZiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGFzIG5ldyB3aGVuCisgICAgdGhleSByZWFjaCBhbiBpbmNsdWRlZCByZWYuIFR5cGljYWxseSwgaWYgeW91IGFkZCBhIGJyYW5jaCBgYGZvb2BgCisgICAgdG8gIGBgcmVmRmlsdGVyRG9udFNlbmRSZWdleGBgLCBwdXNoIGNvbW1pdHMgdG8gdGhpcyBicmFuY2gsIGFuZAorICAgIGxhdGVyIG1lcmdlIGJyYW5jaCBgYGZvb2BgIGludG8gYGBtYXN0ZXJgYCwgdGhlbiB0aGUgbm90aWZpY2F0aW9uCisgICAgZW1haWwgZm9yIGBgbWFzdGVyYGAgd2lsbCBjb250YWluIGEgY29tbWl0IGVtYWlsIG9ubHkgZm9yIHRoZQorICAgIG1lcmdlIGNvbW1pdC4gSWYgeW91IGluY2x1ZGUgYGBmb29gYCBpbgorICAgIGBgcmVmRmlsdGVyRXhjbHVzaW9uUmVnZXhgYCwgdGhlbiBhdCB0aGUgdGltZSBvZiBtZXJnZSwgeW91IHdpbGwKKyAgICByZWNlaXZlIG9uZSBjb21taXQgZW1haWwgcGVyIGNvbW1pdCBpbiB0aGUgYnJhbmNoLgorCisgICAgVGhlc2UgdmFyaWFibGVzIGNhbiBiZSBtdWx0aS12YWx1ZWQsIGxpa2U6OgorCisgICAgICBbbXVsdGltYWlsaG9va10KKyAgICAgICAgICAgICAgcmVmRmlsdGVyRXhjbHVzaW9uUmVnZXggPSBecmVmcy90YWdzLworICAgICAgICAgICAgICByZWZGaWx0ZXJFeGNsdXNpb25SZWdleCA9IF5yZWZzL2hlYWRzL21hc3RlciQKKworICAgIFlvdSBjYW4gYWxzbyBwcm92aWRlIGEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgbGlzdCBsaWtlOjoKKworICAgICAgW211bHRpbWFpbGhvb2tdCisgICAgICAgICAgICAgIHJlZkZpbHRlckV4Y2x1c2lvblJlZ2V4ID0gXnJlZnMvdGFncy8gXnJlZnMvaGVhZHMvbWFzdGVyJAorCisgICAgQm90aCBleGFtcGxlcyBleGNsdWRlIHRhZ3MgYW5kIHRoZSBtYXN0ZXIgYnJhbmNoLCBhbmQgYXJlCisgICAgZXF1aXZhbGVudCB0bzo6CisKKyAgICAgIFttdWx0aW1haWxob29rXQorICAgICAgICAgICAgICByZWZGaWx0ZXJFeGNsdXNpb25SZWdleCA9IF5yZWZzL3RhZ3MvfF5yZWZzL2hlYWRzL21hc3RlciQKKworRW1haWwgZmlsdGVyaW5nIGFpZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBlbWFpbHMgaW5jbHVkZSBleHRyYSBoZWFkZXJzIHRvIGVuYWJsZSBmaW5lIHR1bmVkIGZpbHRlcmluZyBhbmQKK2dpdmUgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZy4gIEFsbCBlbWFpbHMgaW5jbHVkZSB0aGUgaGVhZGVycworYGBYLUdpdC1Ib3N0YGAsIGBgWC1HaXQtUmVwb2BgLCBgYFgtR2l0LVJlZm5hbWVgYCwgYW5kIGBgWC1HaXQtUmVmdHlwZWBgLgorUmVmZXJlbmNlQ2hhbmdlIGVtYWlscyBhbHNvIGluY2x1ZGUgaGVhZGVycyBgYFgtR2l0LU9sZHJldmBgIGFuZCBgYFgtR2l0LU5ld3JldmBgOworUmV2aXNpb24gZW1haWxzIGFsc28gaW5jbHVkZSBoZWFkZXIgYGBYLUdpdC1SZXZgYC4KKworCitDdXN0b21pemluZyBlbWFpbCBjb250ZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2l0LW11bHRpbWFpbCBtb3N0bHkgZ2VuZXJhdGVzIGVtYWlscyBieSBleHBhbmRpbmcgdGVtcGxhdGVzLiAgVGhlCit0ZW1wbGF0ZXMgY2FuIGJlIGN1c3RvbWl6ZWQuICBUbyBhdm9pZCB0aGUgbmVlZCB0byBlZGl0CitnaXRfbXVsdGltYWlsLnB5IGRpcmVjdGx5LCB0aGUgcHJlZmVycmVkIHdheSB0byBjaGFuZ2UgdGhlIHRlbXBsYXRlcworaXMgdG8gd3JpdGUgYSBzZXBhcmF0ZSBQeXRob24gc2NyaXB0IHRoYXQgaW1wb3J0cyBnaXRfbXVsdGltYWlsLnB5IGFzCithIG1vZHVsZSwgdGhlbiByZXBsYWNlcyB0aGUgdGVtcGxhdGVzIGluIHBsYWNlLiAgU2VlIHRoZSBwcm92aWRlZAorcG9zdC1yZWNlaXZlIHNjcmlwdCBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdGhpcyBpcyBkb25lLgorCisKK0N1c3RvbWl6aW5nIGdpdC1tdWx0aW1haWwgZm9yIHlvdXIgZW52aXJvbm1lbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2l0LW11bHRpbWFpbCBpcyBtb3N0bHkgY3VzdG9taXplZCB2aWEgYW4gImVudmlyb25tZW50IiB0aGF0IGRlc2NyaWJlcwordGhlIGxvY2FsIGVudmlyb25tZW50IGluIHdoaWNoIEdpdCBpcyBydW5uaW5nLiAgVHdvIHR5cGVzIG9mCitlbnZpcm9ubWVudCBhcmUgYnVpbHQgaW46CisKKyogR2VuZXJpY0Vudmlyb25tZW50OiBhIHN0YW5kLWFsb25lIEdpdCByZXBvc2l0b3J5LgorCisqIEdpdG9saXRlRW52aXJvbm1lbnQ6IGEgR2l0IHJlcG9zaXRvcnkgdGhhdCBpcyBtYW5hZ2VkIGJ5IGdpdG9saXRlCisgIFszXV8uICBGb3Igc3VjaCByZXBvc2l0b3JpZXMsIHRoZSBpZGVudGl0eSBvZiB0aGUgcHVzaGVyIGlzIHJlYWQgZnJvbQorICBlbnZpcm9ubWVudCB2YXJpYWJsZSAkR0xfVVNFUiwgdGhlIG5hbWUgb2YgdGhlIHJlcG9zaXRvcnkgaXMgcmVhZAorICBmcm9tICRHTF9SRVBPIChpZiBpdCBpcyBub3Qgb3ZlcnJpZGRlbiBieSBtdWx0aW1haWxob29rLnJlcG9uYW1lKSwKKyAgYW5kIHRoZSBGcm9tOiBoZWFkZXIgdmFsdWUgaXMgb3B0aW9uYWxseSByZWFkIGZyb20gZ2l0b2xpdGUuY29uZgorICAoc2VlIG11bHRpbWFpbGhvb2suZnJvbSkuCisKK0J5IGRlZmF1bHQsIGdpdC1tdWx0aW1haWwgYXNzdW1lcyBHaXRvbGl0ZUVudmlyb25tZW50IGlmICRHTF9VU0VSIGFuZAorJEdMX1JFUE8gYXJlIHNldCwgYW5kIG90aGVyd2lzZSBhc3N1bWVzIEdlbmVyaWNFbnZpcm9ubWVudC4KK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gY2hvb3NlIG9uZSBvZiB0aGVzZSB0d28gZW52aXJvbm1lbnRzIGV4cGxpY2l0bHkKK2J5IHNldHRpbmcgYSBgYG11bHRpbWFpbGhvb2suZW52aXJvbm1lbnRgYCBjb25maWcgc2V0dGluZyAod2hpY2ggY2FuCitoYXZlIHRoZSB2YWx1ZSBgZ2VuZXJpY2Agb3IgYGdpdG9saXRlYCkgb3IgYnkgcGFzc2luZyBhbiAtLWVudmlyb25tZW50CitvcHRpb24gdG8gdGhlIHNjcmlwdC4KKworSWYgeW91IG5lZWQgdG8gY3VzdG9taXplIHRoZSBzY3JpcHQgaW4gd2F5cyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5Cit0aGUgZXhpc3RpbmcgZW52aXJvbm1lbnRzLCB5b3UgY2FuIGRlZmluZSB5b3VyIG93biBlbnZpcm9ubWVudCBjbGFzcworY2xhc3MgdXNpbmcgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlLiAgVG8gZG8gc28sIHlvdSBuZWVkIHRvIGltcG9ydAorZ2l0X211bHRpbWFpbC5weSBhcyBhIFB5dGhvbiBtb2R1bGUsIGFzIGRlbW9uc3RyYXRlZCBieSB0aGUgZXhhbXBsZQorcG9zdC1yZWNlaXZlIHNjcmlwdC4gIFRoZW4gaW1wbGVtZW50IHlvdXIgZW52aXJvbm1lbnQgY2xhc3M7IGl0IHNob3VsZAordXN1YWxseSBpbmhlcml0IGZyb20gb25lIG9mIHRoZSBleGlzdGluZyBFbnZpcm9ubWVudCBjbGFzc2VzIGFuZAorcG9zc2libHkgb25lIG9yIG1vcmUgb2YgdGhlIEVudmlyb25tZW50TWl4aW4gY2xhc3Nlcy4gIFRoZW4gc2V0IHRoZQorYGBlbnZpcm9ubWVudGBgIHZhcmlhYmxlIHRvIGFuIGluc3RhbmNlIG9mIHlvdXIgb3duIGVudmlyb25tZW50IGNsYXNzCithbmQgcGFzcyBpdCB0byBgYHJ1bl9hc19wb3N0X3JlY2VpdmVfaG9vaygpYGAuCisKK1RoZSBzdGFuZGFyZCBlbnZpcm9ubWVudCBjbGFzc2VzLCBHZW5lcmljRW52aXJvbm1lbnQgYW5kCitHaXRvbGl0ZUVudmlyb25tZW50LCBhcmUgaW4gZmFjdCB0aGVtc2VsdmVzIHB1dCB0b2dldGhlciBvdXQgb2YgYQorbnVtYmVyIG9mIG1peGluIGNsYXNzZXMsIGVhY2ggb2Ygd2hpY2ggaGFuZGxlcyBvbmUgYXNwZWN0IG9mIHRoZQorY3VzdG9taXphdGlvbi4gIEZvciB0aGUgZmluZXN0IGNvbnRyb2wgb3ZlciB5b3VyIGNvbmZpZ3VyYXRpb24sIHlvdQorY2FuIHNwZWNpZnkgZXhhY3RseSB3aGljaCBtaXhpbiBjbGFzc2VzIHlvdXIgb3duIGVudmlyb25tZW50IGNsYXNzCitzaG91bGQgaW5oZXJpdCBmcm9tLCBhbmQgb3ZlcnJpZGUgaW5kaXZpZHVhbCBtZXRob2RzIChvciBldmVuIGFkZCB5b3VyCitvd24gbWl4aW4gY2xhc3NlcykgdG8gaW1wbGVtZW50IGVudGlyZWx5IG5ldyBiZWhhdmlvcnMuICBJZiB5b3UKK2ltcGxlbWVudCBhbnkgbWl4aW5zIHRoYXQgbWlnaHQgYmUgdXNlZnVsIHRvIG90aGVyIHBlb3BsZSwgcGxlYXNlCitjb25zaWRlciBzaGFyaW5nIHRoZW0gd2l0aCB0aGUgY29tbXVuaXR5IQorCisKK0dldHRpbmcgaW52b2x2ZWQKKy0tLS0tLS0tLS0tLS0tLS0KKworUGxlYXNlLCByZWFkIGA8Q09OVFJJQlVUSU5HLnJzdD5gX18gZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8KK2NvbnRyaWJ1dGUgdG8gZ2l0LW11bHRpbWFpbC4KKworCitGb290bm90ZXMKKy0tLS0tLS0tLQorCisuLiBbMV0gaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMzk0LworCisuLiBbMl0gQmVjYXVzZSBvZiB0aGUgd2F5IGluZm9ybWF0aW9uIGlzIHBhc3NlZCB0byB1cGRhdGUgaG9va3MsIHRoZQorICAgICAgIHNjcmlwdCdzIG1ldGhvZCBvZiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgY29tbWl0IGhhcyBhbHJlYWR5CisgICAgICAgYmVlbiBzZWVuIGRvZXMgbm90IHdvcmsgd2hlbiBpdCBpcyB1c2VkIGFzIGFuIGBgdXBkYXRlYGAgc2NyaXB0LgorICAgICAgIEluIHBhcnRpY3VsYXIsIG5vIG5vdGlmaWNhdGlvbiBlbWFpbCB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgYQorICAgICAgIG5ldyBjb21taXQgdGhhdCBpcyBhZGRlZCB0byBtdWx0aXBsZSByZWZlcmVuY2VzIGluIHRoZSBzYW1lCisgICAgICAgcHVzaC4gQSB3b3JrYXJvdW5kIGlzIHRvIHVzZSAtLWZvcmNlLXNlbmQgdG8gZm9yY2Ugc2VuZGluZyB0aGUKKyAgICAgICBlbWFpbHMuCisKKy4uIFszXSBodHRwczovL2dpdGh1Yi5jb20vc2l0YXJhbWMvZ2l0b2xpdGUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRS5HaXQgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUuR2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMGEyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUuR2l0CkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgY29weSBvZiBnaXQtbXVsdGltYWlsIGlzIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlICJjb250cmliIgorc2VjdGlvbiBvZiB0aGUgR2l0IHByb2plY3QgYXMgYSBjb252ZW5pZW5jZSB0byBHaXQgdXNlcnMuCitnaXQtbXVsdGltYWlsIGlzIGRldmVsb3BlZCBhcyBhbiBpbmRlcGVuZGVudCBwcm9qZWN0IGF0IHRoZSBmb2xsb3dpbmcKK3dlYnNpdGU6CisKKyAgICBodHRwczovL2dpdGh1Yi5jb20vZ2l0LW11bHRpbWFpbC9naXQtbXVsdGltYWlsCisKK1RoZSB2ZXJzaW9uIGluIHRoaXMgZGlyZWN0b3J5IHdhcyBvYnRhaW5lZCBmcm9tIHRoZSB1cHN0cmVhbSBwcm9qZWN0CitvbiBPY3RvYmVyIDExIDIwMTUgYW5kIGNvbnNpc3RzIG9mIHRoZSAiZ2l0LW11bHRpbWFpbCIgc3ViZGlyZWN0b3J5IGZyb20KK3JldmlzaW9uCisKKyAgICBjMDc5MWI5ZWY1ODIxYTc0NmZjMzQ3NWMyNTc2NWU2NDA0NTJlYWFlIHJlZnMvdGFncy8xLjIuMAorCitQbGVhc2Ugc2VlIHRoZSBSRUFETUUgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93Cit0byByZXBvcnQgYnVncyBvciBjb250cmlidXRlIHRvIGdpdC1tdWx0aW1haWwuCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUubWlncmF0ZS1mcm9tLXBvc3QtcmVjZWl2ZS1lbWFpbCBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL1JFQURNRS5taWdyYXRlLWZyb20tcG9zdC1yZWNlaXZlLWVtYWlsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNmE5NzYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9SRUFETUUubWlncmF0ZS1mcm9tLXBvc3QtcmVjZWl2ZS1lbWFpbApAQCAtMCwwICsxLDE0NSBAQAorZ2l0LW11bHRpbWFpbCBpcyBjbG9zZSB0bywgYnV0IG5vdCBleGFjdGx5LCBhIHBsdWctaW4gcmVwbGFjZW1lbnQgZm9yCit0aGUgb2xkIEdpdCBwcm9qZWN0IHNjcmlwdCBjb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbC4gIFRoaXMKK2RvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGlmZmVyZW5jZXMgYW5kIGV4cGxhaW5zIGhvdyB0byBjb25maWd1cmUKK2dpdC1tdWx0aW1haWwgdG8gZ2V0IGJlaGF2aW9yIGNsb3Nlc3QgdG8gdGhhdCBvZiBwb3N0LXJlY2VpdmUtZW1haWwuCisKK0lmIHlvdSBhcmUgaW4gYSBodXJyeQorPT09PT09PT09PT09PT09PT09PT09CisKK0Egc2NyaXB0IGNhbGxlZCBtaWdyYXRlLW1haWxob29rLWNvbmZpZyBpcyBpbmNsdWRlZCB3aXRoCitnaXQtbXVsdGltYWlsLiAgSWYgeW91IHJ1biB0aGlzIHNjcmlwdCB3aXRoaW4gYSBHaXQgcmVwb3NpdG9yeSB0aGF0IGlzCitjb25maWd1cmVkIHRvIHVzZSBwb3N0LXJlY2VpdmUtZW1haWwsIGl0IHdpbGwgY29udmVydCB0aGUKK2NvbmZpZ3VyYXRpb24gc2V0dGluZ3MgaW50byB0aGUgYXBwcm94aW1hdGUgZXF1aXZhbGVudCBzZXR0aW5ncyBmb3IKK2dpdC1tdWx0aW1haWwuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcnVuCisKKyAgICBtaWdyYXRlLW1haWxob29rLWNvbmZpZyAtLWhlbHAKKworCitDb25maWd1cmF0aW9uIGRpZmZlcmVuY2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKKyogVGhlIG5hbWVzIG9mIHRoZSBjb25maWcgb3B0aW9ucyBmb3IgZ2l0LW11bHRpbWFpbCBhcmUgaW4gbmFtZXNwYWNlCisgICJtdWx0aW1haWxob29rLioiIGluc3RlYWQgb2YgImhvb2tzLioiLiAgKEVkaXRvcmlhbCBjb21tZW50OgorICBwb3N0LXJlY2VpdmUtZW1haWwgc2hvdWxkIG5ldmVyIGhhdmUgdXNlZCBzdWNoIGEgZ2VuZXJpYyB0b3AtbGV2ZWwKKyAgbmFtZXNwYWNlLikKKworKiBJbiBlbWFpbHMgYWJvdXQgbmV3IGFubm90YXRlZCB0YWdzLCBwb3N0LXJlY2VpdmUtZW1haWwgaW5jbHVkZXMgYQorICBzaG9ydGxvZyBvZiBhbGwgY2hhbmdlcyBzaW5jZSB0aGUgcHJldmlvdXMgYW5ub3RhdGVkIHRhZy4gIFRvIGdldAorICB0aGlzIGJlaGF2aW9yIHdpdGggZ2l0LW11bHRpbWFpbCwgeW91IG5lZWQgdG8gc2V0CisgIG11bHRpbWFpbGhvb2suYW5ub3VuY2VzaG9ydGxvZyB0byB0cnVlOgorCisgICAgICBnaXQgY29uZmlnIG11bHRpbWFpbGhvb2suYW5ub3VuY2VzaG9ydGxvZyB0cnVlCisKKyogbXVsdGltYWlsaG9vay5jb21taXRsaXN0IC0tIFRoaXMgaXMgYSBuZXcgY29uZmlndXJhdGlvbiB2YXJpYWJsZS4KKyAgUmVjaXBpZW50cyBsaXN0ZWQgaGVyZSB3aWxsIHJlY2VpdmUgYSBzZXBhcmF0ZSBlbWFpbCBmb3IgZWFjaCBuZXcKKyAgY29tbWl0LiAgSG93ZXZlciwgaWYgdGhpcyB2YXJpYWJsZSBpcyAqbm90KiBzZXQsIGl0IGRlZmF1bHRzIHRvIHRoZQorICB2YWx1ZSBvZiBtdWx0aW1haWxob29rLm1haWxpbmdsaXN0LiAgVGhlcmVmb3JlLCBpZiB5b3UgKmRvbid0KiB3YW50CisgIHRoZSBtZW1iZXJzIG9mIG11bHRpbWFpbGhvb2subWFpbGluZ2xpc3QgdG8gcmVjZWl2ZSBvbmUgZW1haWwgcGVyCisgIGNvbW1pdCwgdGhlbiBzZXQgdGhpcyB2YWx1ZSB0byB0aGUgZW1wdHkgc3RyaW5nOgorCisgICAgICBnaXQgY29uZmlnIG11bHRpbWFpbGhvb2suY29tbWl0bGlzdCAnJworCisqIG11bHRpbWFpbGhvb2suZW1haWxwcmVmaXggLS0gSWYgdGhpcyB2YWx1ZSBpcyBub3Qgc2V0LCB0aGVuIHRoZQorICBzdWJqZWN0cyBvZiBnZW5lcmF0ZWQgZW1haWxzIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBzaG9ydCBuYW1lIG9mIHRoZQorICByZXBvc2l0b3J5IGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0czsgZS5nLiwgIltteXJlcG9dIi4KKyAgcG9zdC1yZWNlaXZlLWVtYWlsIGRlZmF1bHRzIHRvIHByZWZpeCAiW1NDTV0iIGlmIHRoaXMgb3B0aW9uIGlzIG5vdAorICBzZXQuICBTbyBpZiB5b3Ugd2VyZSB1c2luZyB0aGUgb2xkIGRlZmF1bHQgYW5kIHdhbnQgdG8gcmV0YWluIGl0CisgIChmb3IgZXhhbXBsZSwgdG8gYXZvaWQgaGF2aW5nIHRvIGNoYW5nZSB5b3VyIGVtYWlsIGZpbHRlcnMpLCBzZXQKKyAgdGhpcyB2YXJpYWJsZSBleHBsaWNpdGx5IHRvIHRoZSBvbGQgdmFsdWU6CisKKyAgICAgIGdpdCBjb25maWcgbXVsdGltYWlsaG9vay5lbWFpbHByZWZpeCAiW1NDTV0iCisKKyogVGhlICJtdWx0aW1haWxob29rLnNob3dyZXYiIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuCisgIEl0cyBtYWluIHVzZSBpcyBvYnNvbGV0ZWQgYnkgdGhlIG9uZS1lbWFpbC1wZXItY29tbWl0IGZlYXR1cmUgb2YKKyAgZ2l0LW11bHRpbWFpbC4KKworCitPdGhlciBkaWZmZXJlbmNlcworPT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBvdGhlciBkaWZmZXJlbmNlcyBpbiB0aGUgYmVoYXZpb3Igb2YKK2dpdC1tdWx0aW1haWwgdnMuIHBvc3QtcmVjZWl2ZS1lbWFpbC4gIEZvciBmdWxsIGRldGFpbHMsIHBsZWFzZSByZWZlcgordG8gdGhlIG1haW4gUkVBRE1FIGZpbGU6CisKKyogT25lIGVtYWlsIHBlciBjb21taXQuICBGb3IgZWFjaCByZWZlcmVuY2UgY2hhbmdlLCB0aGUgc2NyaXB0IGZpcnN0CisgIG91dHB1dHMgb25lIGVtYWlsIHN1bW1hcml6aW5nIHRoZSByZWZlcmVuY2UgY2hhbmdlIChpbmNsdWRpbmcKKyAgb25lLWxpbmUgc3VtbWFyaWVzIG9mIHRoZSBuZXcgY29tbWl0cyksIHRoZW4gaXQgb3V0cHV0cyBhIHNlcGFyYXRlCisgIGVtYWlsIGZvciBlYWNoIG5ldyBjb21taXQgdGhhdCB3YXMgaW50cm9kdWNlZCwgaW5jbHVkaW5nIHBhdGNoZXMuCisgIFRoZXNlIG9uZS1lbWFpbC1wZXItY29tbWl0IGVtYWlscyBnbyB0byB0aGUgYWRkcmVzc2VzIGxpc3RlZCBpbgorICBtdWx0aW1haWxob29rLmNvbW1pdGxpc3QuICBwb3N0LXJlY2VpdmUtZW1haWwgc2VuZHMgb25seSBvbmUgZW1haWwKKyAgZm9yIGVhY2ggKnJlZmVyZW5jZSogdGhhdCBpcyBjaGFuZ2VkLCBubyBtYXR0ZXIgaG93IG1hbnkgY29tbWl0cworICB3ZXJlIGFkZGVkIHRvIHRoZSByZWZlcmVuY2UuCisKKyogQmV0dGVyIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIG5ldyBjb21taXRzLiAgcG9zdC1yZWNlaXZlLWVtYWlsCisgIHByb2Nlc3NlcyBvbmUgcmVmZXJlbmNlIGNoYW5nZSBhdCBhIHRpbWUsIHdoaWNoIGNhdXNlcyBpdCB0byBmYWlsIHRvCisgIGRlc2NyaWJlIG5ldyBjb21taXRzIHRoYXQgd2VyZSBpbmNsdWRlZCBpbiBtdWx0aXBsZSBicmFuY2hlcy4gIEZvcgorICBleGFtcGxlLCBpZiBhIHNpbmdsZSBwdXNoIGFkZHMgdGhlICIqIiBjb21taXRzIGluIHRoZSBkaWFncmFtIGJlbG93LAorICB0aGVuIHBvc3QtcmVjZWl2ZS1lbWFpbCB3b3VsZCBuZXZlciBpbmNsdWRlIHRoZSBkZXRhaWxzIG9mIHRoZSB0d28KKyAgY29tbWl0cyB0aGF0IGFyZSBjb21tb24gdG8gIm1hc3RlciIgYW5kICJicmFuY2giIGluIGl0cworICBub3RpZmljYXRpb25zLgorCisgICAgICBvLS0tby0tLW8tLS0qLS0tKi0tLSogICAgPC0tIG1hc3RlcgorICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAqLS0tKiAgPC0tIGJyYW5jaAorCisgIGdpdC1tdWx0aW1haWwgYW5hbHl6ZXMgYWxsIHJlZmVyZW5jZSBtb2RpZmljYXRpb25zIHRvIGRldGVybWluZQorICB3aGljaCBjb21taXRzIHdlcmUgbm90IHByZXNlbnQgYmVmb3JlIHRoZSBjaGFuZ2UsIHRoZXJlZm9yZSBhdm9pZGluZworICB0aGF0IGVycm9yLgorCisqIEluIHJlZmVyZW5jZSBjaGFuZ2UgZW1haWxzLCBnaXQtbXVsdGltYWlsIHRlbGxzIHdoaWNoIGNvbW1pdHMgaGF2ZQorICBiZWVuIGFkZGVkIHRvIHRoZSByZWZlcmVuY2UgdnMuIGFyZSBlbnRpcmVseSBuZXcgdG8gdGhlIHJlcG9zaXRvcnksCisgIGFuZCB3aGljaCBjb21taXRzIHRoYXQgaGF2ZSBiZWVuIG9taXR0ZWQgZnJvbSB0aGUgcmVmZXJlbmNlCisgIHZzLiBlbnRpcmVseSBkaXNjYXJkZWQgZnJvbSB0aGUgcmVwb3NpdG9yeS4KKworKiBUaGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggR2l0IGlzIHJ1bm5pbmcgY2FuIGJlIGNvbmZpZ3VyZWQgdmlhIGFuCisgICJFbnZpcm9ubWVudCIgYWJzdHJhY3Rpb24uCisKKyogQnVpbHQtaW4gc3VwcG9ydCBmb3IgR2l0b2xpdGUtbWFuYWdlZCByZXBvc2l0b3JpZXMuCisKKyogSW5zdGVhZCBvZiB1c2luZyBmdWxsIFNIQTEgb2JqZWN0IG5hbWVzIGluIGVtYWlscywgZ2l0LW11bHRpbWFpbAorICBtb3N0bHkgdXNlcyBhYmJyZXZpYXRlZCBTSEExcywgcGx1cyBvbmUtbGluZSBsb2cgbWVzc2FnZSBzdW1tYXJpZXMKKyAgd2hlcmUgYXBwcm9wcmlhdGUuCisKKyogSW4gdGhlIHNjaGVtYXRpYyBkaWFncmFtcyB0aGF0IGV4cGxhaW4gbm9uLWZhc3QtZm9yd2FyZCBjb21taXRzLAorICBnaXQtbXVsdGltYWlsIHNob3dzIHRoZSBuYW1lcyBvZiB0aGUgYnJhbmNoZXMgaW52b2x2ZWQuCisKKyogVGhlIGVtYWlscyBnZW5lcmF0ZWQgYnkgZ2l0LW11bHRpbWFpbCBpbmNsdWRlIHRoZSBuYW1lIG9mIHRoZSBHaXQKKyAgcmVwb3NpdG9yeSB0aGF0IHdhcyBtb2RpZmllZDsgdGhpcyBpcyBjb252ZW5pZW50IGZvciByZWNpcGllbnRzIHdobworICBhcmUgbW9uaXRvcmluZyBtdWx0aXBsZSByZXBvc2l0b3JpZXMuCisKKyogZ2l0LW11bHRpbWFpbCBhbGxvd3MgdGhlIGVtYWlsICJGcm9tIiBhZGRyZXNzZXMgdG8gYmUgY29uZmlndXJlZC4KKworKiBUaGUgcmVjaXBpZW50cyBsaXN0cyAobXVsdGltYWlsaG9vay5tYWlsaW5nbGlzdCwKKyAgbXVsdGltYWlsaG9vay5yZWZjaGFuZ2VsaXN0LCBtdWx0aW1haWxob29rLmFubm91bmNlbGlzdCwgYW5kCisgIG11bHRpbWFpbGhvb2suY29tbWl0bGlzdCkgY2FuIGJlIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgYW5kL29yCisgIG11bHRpdmFsdWVkIHNldHRpbmdzIGluIHRoZSBjb25maWcgZmlsZTsgZS5nLiwKKworICAgICAgW211bHRpbWFpbGhvb2tdCisgICAgICAgICAgICAgIG1haWxpbmdsaXN0ID0gbXIuYnJvd25AZXhhbXBsZS5jb20sIG1yLmJsYWNrQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgIGFubm91bmNlbGlzdCA9IEhpbSA8aGltQGV4YW1wbGUuY29tPgorICAgICAgICAgICAgICBhbm5vdW5jZWxpc3QgPSBKaW0gPGppbUBleGFtcGxlLmNvbT4KKyAgICAgICAgICAgICAgYW5ub3VuY2VsaXN0ID0gcG9wQGV4YW1wbGUuY29tCisKKyAgVGhpcyBtaWdodCBtYWtlIGl0IGVhc2llciB0byBtYWludGFpbiBzaG9ydCByZWNpcGllbnRzIGxpc3RzIHdpdGhvdXQKKyAgcmVxdWlyaW5nIGZ1bGwtZmxlZGdlZCBtYWlsaW5nIGxpc3Qgc29mdHdhcmUuCisKKyogQnkgZGVmYXVsdCwgZ2l0LW11bHRpbWFpbCBzZXRzIGVtYWlsICJSZXBseS1UbyIgaGVhZGVycyB0byByZXBseSB0bworICB0aGUgcHVzaGVyIChmb3IgcmVmZXJlbmNlIHVwZGF0ZXMpIGFuZCB0byB0aGUgYXV0aG9yIChmb3IgY29tbWl0CisgIG5vdGlmaWNhdGlvbnMpLiAgQnkgZGVmYXVsdCwgdGhlIHB1c2hlcidzIGVtYWlsIGFkZHJlc3MgaXMKKyAgY29uc3RydWN0ZWQgYnkgYXBwZW5kaW5nICJtdWx0aW1haWxob29rLmVtYWlsZG9tYWluIiB0byB0aGUgcHVzaGVyJ3MKKyAgdXNlcm5hbWUuCisKKyogVGhlIGdlbmVyYXRlZCBlbWFpbHMgY29udGFpbiBhIGNvbmZpZ3VyYWJsZSBmb290ZXIuICBCeSBkZWZhdWx0LCBpdAorICBsaXN0cyB0aGUgbmFtZSBvZiB0aGUgYWRtaW5pc3RyYXRvciB3aG8gc2hvdWxkIGJlIGNvbnRhY3RlZCB0bworICB1bnN1YnNjcmliZSBmcm9tIG5vdGlmaWNhdGlvbiBlbWFpbHMuCisKKyogTmV3IG9wdGlvbiBtdWx0aW1haWxob29rLmVtYWlsbWF4bGluZWxlbmd0aCB0byBsaW1pdCB0aGUgbGVuZ3RoIG9mCisgIGxpbmVzIGluIHRoZSBtYWluIHBhcnQgb2YgdGhlIGVtYWlsIGJvZHkuICBUaGUgZGVmYXVsdCBsaW1pdCBpcyA1MDAKKyAgY2hhcmFjdGVycy4KKworKiBOZXcgb3B0aW9uIG11bHRpbWFpbGhvb2suZW1haWxzdHJpY3R1dGY4IHRvIGVuc3VyZSB0aGF0IHRoZSBtYWluCisgIHBhcnQgb2YgdGhlIGVtYWlsIGJvZHkgaXMgdmFsaWQgVVRGLTguICBJbnZhbGlkIGNoYXJhY3RlcnMgYXJlCisgIHR1cm5lZCBpbnRvIHRoZSBVbmljb2RlIHJlcGxhY2VtZW50IGNoYXJhY3RlciwgVStGRkZELiAgQnkgZGVmYXVsdAorICB0aGlzIG9wdGlvbiBpcyB0dXJuZWQgb24uCisKKyogV3JpdHRlbiBpbiBQeXRob24uICBFYXNpZXIgdG8gYWRkIG5ldyBmZWF0dXJlcy4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy9nZXJyaXQucnN0IGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZG9jL2dlcnJpdC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxMWQwNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy9nZXJyaXQucnN0CkBAIC0wLDAgKzEsNTYgQEAKK1NldHRpbmcgdXAgZ2l0LW11bHRpbWFpbCBvbiBHZXJyaXQKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworR2Vycml0IGhhcyBpdHMgb3duIGVtYWlsLXNlbmRpbmcgc3lzdGVtLCBidXQgeW91IG1heSBwcmVmZXIgdXNpbmcKK2BgZ2l0LW11bHRpbWFpbGBgIGluc3RlYWQuIEl0IHN1cHBvcnRzIEdlcnJpdCBuYXRpdmVseSBhcyBhIEdlcnJpdAorYGByZWYtdXBkYXRlZGBgIGhvb2sgKFdhcm5pbmc6IGBHZXJyaXQgaG9va3MKKzxodHRwczovL2dlcnJpdC1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbS9Eb2N1bWVudGF0aW9uL2NvbmZpZy1ob29rcy5odG1sPmBfXworYXJlIGRpc3RpbmN0IGZyb20gR2l0IGhvb2tzKS4gU2V0dGluZyB1cCBgYGdpdC1tdWx0aW1haWxgYCBvbiBhIEdlcnJpdAoraW5zdGFsbGF0aW9uIGNhbiBiZSBkb25lIGZvbGxvd2luZyB0aGUgaW5zdHJ1Y3Rpb25zIGJlbG93LgorCitUaGUgZXhwbGFuYXRpb25zIHNob3cgYW4gZWFzeSB3YXkgdG8gc2V0IHVwIGBgZ2l0LW11bHRpbWFpbGBgLAorYnV0IGxlYXZlIGBgZ2l0LW11bHRpbWFpbGBgIGluc3RhbGxlZCBhbmQgdW5jb25maWd1cmVkIGZvciBhIHdoaWxlLiBJZgoreW91IHJ1biBHZXJyaXQgb24gYSBwcm9kdWN0aW9uIHNlcnZlciwgaXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZXhlY3V0ZSB0aGUgc3RlcCAiU2V0IHVwIHRoZSBob29rIiBsYXN0IHRvIGF2b2lkIGNvbmZ1c2luZyB5b3VyIHVzZXJzCitpbiB0aGUgbWVhbnRpbWUuCisKK1NldCB1cCB0aGUgaG9vaworLS0tLS0tLS0tLS0tLS0tCisKK0NyZWF0ZSBhIGRpcmVjdG9yeSBgYCRzaXRlX3BhdGgvaG9va3MvYGAgaWYgaXQgZG9lcyBub3QgZXhpc3QgKGlmIHlvdQorZG9uJ3Qga25vdyB3aGF0IGBgJHNpdGVfcGF0aGBgIGlzLCBydW4gYGBnZXJyaXQuc2ggc3RhdHVzYGAgYW5kIGxvb2sKK2ZvciBhIGBgR0VSUklUX1NJVEVgYCBsaW5lKS4gRWl0aGVyIGNvcHkgYGBnaXRfbXVsdGltYWlsLnB5YGAgdG8KK2BgJHNpdGVfcGF0aC9ob29rcy9yZWYtdXBkYXRlZGBgIG9yIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0IGxpa2UKK3RoaXM6OgorCisgICMhIC9iaW4vc2gKKyAgZXhlYyAvcGF0aC90by9naXRfbXVsdGltYWlsLnB5ICIkQCIKKworSW4gYm90aCBjYXNlcywgbWFrZSBzdXJlIHRoZSBmaWxlIGlzIG5hbWVkIGV4YWN0bHkKK2BgJHNpdGVfcGF0aC9ob29rcy9yZWYtdXBkYXRlZGBgIGFuZCBpcyBleGVjdXRhYmxlLgorCisoQWx0ZXJuYXRpdmVseSwgeW91IG1heSBjb25maWd1cmUgdGhlIGBgW2hvb2tzXWBgIHNlY3Rpb24gb2YKK2dlcnJpdC5jb25maWcpCisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworTG9nIG9uIHRoZSBnZXJyaXQgc2VydmVyIGFuZCBlZGl0IGBgJHNpdGVfcGF0aC9naXQvJHByb2plY3QvY29uZmlnYGAKK3RvIGNvbmZpZ3VyZSBgYGdpdC1tdWx0aW1haWxgYC4KKworVHJvdWJsZXNob290aW5nCistLS0tLS0tLS0tLS0tLS0KKworV2FybmluZzogdGhpcyB3aWxsIGRpc2FibGUgYGBnaXQtbXVsdGltYWlsYGAgZHVyaW5nIHRoZSBkZWJ1ZywgYW5kCitjb3VsZCBjb25mdXNlIHlvdXIgdXNlcnMuIERvbid0IHJ1biBvbiBhIHByb2R1Y3Rpb24gc2VydmVyLgorCitUbyBkZWJ1ZyBjb25maWd1cmF0aW9uIGlzc3VlcyB3aXRoIGBgZ2l0LW11bHRpbWFpbGBgLCB5b3UgY2FuIGFkZCB0aGUKK2BgLS1zdGRvdXRgYCBvcHRpb24gd2hlbiBjYWxsaW5nIGBgZ2l0X211bHRpbWFpbC5weWBgIGxpa2UgdGhpczo6CisKKyAgIyEvYmluL3NoCisgIGV4ZWMgL3BhdGgvdG8vZ2l0LW11bHRpbWFpbC9naXQtbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkgXAorICAgIC0tc3Rkb3V0ICIkQCIgPj4gL3RtcC9sb2cudHh0CisKK2FuZCB0cnkgcHVzaGluZyBmcm9tIGEgdGVzdCByZXBvc2l0b3J5LiBZb3Ugc2hvdWxkIHNlZSB0aGUgc291cmNlIG9mCit0aGUgZW1haWwgdGhhdCB3b3VsZCBoYXZlIGJlZW4gc2VudCBpbiB0aGUgb3V0cHV0IG9mIGBgZ2l0IHB1c2hgYCBpbgordGhlIGZpbGUgYGAvdG1wL2xvZy50eHRgYC4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2RvYy9naXRvbGl0ZS5yc3QgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9kb2MvZ2l0b2xpdGUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYWVkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2hvb2tzL211bHRpbWFpbC9kb2MvZ2l0b2xpdGUucnN0CkBAIC0wLDAgKzEsMTA5IEBACitTZXR0aW5nIHVwIGdpdC1tdWx0aW1haWwgb24gZ2l0b2xpdGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitgYGdpdC1tdWx0aW1haWxgYCBzdXBwb3J0cyBnaXRvbGl0ZSAzIG5hdGl2ZWx5LgorVGhlIGV4cGxhbmF0aW9ucyBiZWxvdyBzaG93IGFuIGVhc3kgd2F5IHRvIHNldCB1cCBgYGdpdC1tdWx0aW1haWxgYCwKK2J1dCBsZWF2ZSBgYGdpdC1tdWx0aW1haWxgYCBpbnN0YWxsZWQgYW5kIHVuY29uZmlndXJlZCBmb3IgYSB3aGlsZS4gSWYKK3lvdSBydW4gZ2l0b2xpdGUgb24gYSBwcm9kdWN0aW9uIHNlcnZlciwgaXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZXhlY3V0ZSB0aGUgc3RlcCAiU2V0IHVwIHRoZSBob29rIiBsYXN0IHRvIGF2b2lkIGNvbmZ1c2luZyB5b3VyIHVzZXJzCitpbiB0aGUgbWVhbnRpbWUuCisKK1NldCB1cCB0aGUgaG9vaworLS0tLS0tLS0tLS0tLS0tCisKK0xvZyBpbiBhcyB5b3VyIGdpdG9saXRlIHVzZXIuCisKK0NyZWF0ZSBhIGZpbGUgYGAuZ2l0b2xpdGUvaG9va3MvY29tbW9uL3Bvc3QtcmVjZWl2ZWBgIG9uIHlvdXIgZ2l0b2xpdGUKK2FjY291bnQgY29udGFpbmluZyAoYWRhcHQgdGhlIHBhdGgsIG9idmlvdXNseSk6OgorCisgICMhL2Jpbi9zaAorICBleGVjIC9wYXRoL3RvL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5ICIkQCIKKworTWFrZSBzdXJlIGl0J3MgZXhlY3V0YWJsZSAoYGBjaG1vZCAreGBgKS4gUmVjb3JkIHRoZSBob29rIGluCitnaXRvbGl0ZTo6CisKKyAgZ2l0b2xpdGUgc2V0dXAKKworQ29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLQorCitGaXJzdCwgeW91IGhhdmUgdG8gYWxsb3cgdGhlIGFkbWluIHRvIHNldCBHaXQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisKK0FzIGdpdG9saXRlIHVzZXIsIGVkaXQgdGhlIGxpbmUgY29udGFpbmluZyBgYEdJVF9DT05GSUdfS0VZU2BgIGluIGZpbGUKK2BgLmdpdG9saXRlLnJjYGAsIHRvIG1ha2UgaXQgbG9vayBsaWtlOjoKKworICBHSVRfQ09ORklHX0tFWVMgICAgICAgICAgICAgICAgID0+ICAnbXVsdGltYWlsaG9va1wuLionLAorCitZb3UgY2FuIG5vdyBsb2cgb3V0IGFuZCByZXR1cm4gdG8geW91ciBub3JtYWwgdXNlci4KKworSW4gdGhlIGBgZ2l0b2xpdGUtYWRtaW5gYCBjbG9uZSwgZWRpdCB0aGUgZmlsZSBgYGNvbmYvZ2l0b2xpdGUuY29uZmBgCithbmQgYWRkOjoKKworICByZXBvIEBhbGwKKyAgICAgICMgTm90IHN0cmljdGx5IG5lZWRlZCBhcyBnaXRfbXVsdGltYWlsLnB5IHdpbGwgY2hvc2UgZ2l0b2xpdGUgaWYKKyAgICAgICMgJEdMX1VTRVIgaXMgc2V0LgorICAgICAgY29uZmlnIG11bHRpbWFpbGhvb2suZW52aXJvbm1lbnQgPSBnaXRvbGl0ZQorICAgICAgY29uZmlnIG11bHRpbWFpbGhvb2subWFpbGluZ0xpc3QgPSAjIFdoZXJlIGVtYWlscyBzaG91bGQgYmUgc2VudAorICAgICAgY29uZmlnIG11bHRpbWFpbGhvb2suZnJvbSA9ICMgRnJvbSBhZGRyZXNzIHRvIHVzZQorCitPYnZpb3VzbHksIHlvdSBjYW4gY3VzdG9taXplIGFsbCBwYXJhbWV0ZXJzIG9uIGEgcGVyLXJlcG9zaXRvcnkgYmFzaXMgYnkKK2FkZGluZyB0aGVzZSBgYGNvbmZpZyBtdWx0aW1haWxob29rLipgYCBsaW5lcyBpbiB0aGUgc2VjdGlvbgorY29ycmVzcG9uZGluZyB0byBhIHJlcG9zaXRvcnkgb3Igc2V0IG9mIHJlcG9zaXRvcmllcy4KKworVG8gYWN0aXZhdGUgYGBnaXQtbXVsdGltYWlsYGAgb24gYSBwZXItcmVwb3NpdG9yeSBiYXNpcywgZG8gbm90IHNldAorYGBtdWx0aW1haWxob29rLm1haWxpbmdMaXN0YGAgaW4gdGhlIGBgQGFsbGBgIHNlY3Rpb24gYW5kIHNldCBpdCBvbmx5Citmb3IgcmVwb3NpdG9yaWVzIGZvciB3aGljaCB5b3Ugd2FudCBgYGdpdC1tdWx0aW1haWxgYC4KKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQgdXAgdGhlIGBgRnJvbTpgYCBmaWVsZCBvbiBhIHBlci11c2VyIGJhc2lzCitieSBhZGRpbmcgYSBgYEJFR0lOIFVTRVIgRU1BSUxTYGAvYGBFTkQgVVNFUiBFTUFJTFNgYCBzZWN0aW9uIChzZWUKK2BgLi4vUkVBRE1FYGApLgorCitTcGVjaWZpY2l0aWVzIG9mIEdpdG9saXRlIGZvciBDb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VtcHR5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitXaXRoIGdpdG9saXRlLCB0aGUgc3ludGF4IGBgY29uZmlnIG11bHRpbWFpbGhvb2suY29tbWl0TGlzdCA9ICIiYGAKK3Vuc2V0cyB0aGUgdmFyaWFibGUgaW5zdGVhZCBvZiBzZXR0aW5nIGl0IHRvIGFuIGVtcHR5IHN0cmluZyAoc2VlCitgaGVyZQorPGh0dHA6Ly9naXRvbGl0ZS5jb20vZ2l0b2xpdGUvZ2l0LWNvbmZpZy5odG1sI2FuLWltcG9ydGFudC13YXJuaW5nLWFib3V0LWRlbGV0aW5nLWEtY29uZmlnLWxpbmU+YF9fKS4KK0FzIGEgcmVzdWx0LCB0aGVyZSBpcyBubyB3YXkgdG8gc2V0IGEgdmFyaWFibGUgdG8gdGhlIGVtcHR5IHN0cmluZy4KK0luIGFsbCBtb3N0IHBsYWNlcyB3aGVyZSBhbiBlbXB0eSB2YWx1ZSBpcyByZXF1aXJlZCwgZ2l0LW11bHRpbWFpbAorbm93IGFsbG93cyB0byBzcGVjaWZ5IHNwZWNpYWwgYGAibm9uZSJgYCB2YWx1ZSAoY2FzZS1zZW5zaXRpdmUpIHRvCittZWFuIHRoZSBzYW1lLgorCitBbHRlcm5hdGl2ZWx5LCBvbmUgY2FuIHVzZSBgYCIgImBgIChhIHNpbmdsZSBzcGFjZSkgaW5zdGVhZCBvZiBgYCIiYGAuCitJbiBtb3N0IGNhc2VzIChpbiBwYXJ0aWN1bGFyIGBgbXVsdGltYWlsaG9vay4qTGlzdGBgIHZhcmlhYmxlcyksIHRoaXMKK3dpbGwgYmUgZXF1aXZhbGVudCB0byBhbiBlbXB0eSBzdHJpbmcuCisKK0lmIHlvdSBoYXZlIGEgdXNlLWNhc2Ugd2hlcmUgYGAibm9uZSJgYCBpcyBub3QgYW4gYWNjZXB0YWJsZSB2YWx1ZSBhbmQKK3lvdSBuZWVkIGBgIiAiYGAgb3IgIGBgIiJgYCBpbnN0ZWFkLCBwbGVhc2UgcmVwb3J0IGl0IGFzIGEgYnVnIHRvCitnaXQtbXVsdGltYWlsLgorCitBbGxvd2luZyBSZWd1bGFyIEV4cHJlc3Npb25zIGluIENvbmZpZ3VyYXRpb24KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitnaXRvbGl0ZSBoYXMgYSBtZWNoYW5pc20gdG8gcHJldmVudCB1bnNhZmUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQordmFsdWVzLCB3aGljaCBwcmV2ZW50IGNoYXJhY3RlcnMgbGlrZSBgYHxgYCBjb21tb25seSB1c2VkIGluIHJlZ3VsYXIKK2V4cHJlc3Npb25zLiBJZiB5b3UgZG8gbm90IG5lZWQgdGhlIHNhZmV0eSBmZWF0dXJlIG9mIGdpdG9saXRlIGFuZAorbmVlZCB0byB1c2UgcmVndWxhciBleHByZXNzaW9ucyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24gKGUuZy4gZm9yCitgYG11bHRpbWFpbGhvb2sucmVmRmlsdGVyKmBgIHZhcmlhYmxlcyksIHNldAorYFVOU0FGRV9QQVRUCis8aHR0cDovL2dpdG9saXRlLmNvbS9naXRvbGl0ZS9naXQtY29uZmlnLmh0bWwjdW5zYWZlLXBhdHQ+YF9fIHRvIGEKK2xlc3MgcmVzdHJpY3RpdmUgdmFsdWUuCisKK1Ryb3VibGVzaG9vdGluZworLS0tLS0tLS0tLS0tLS0tCisKK1dhcm5pbmc6IHRoaXMgd2lsbCBkaXNhYmxlIGBgZ2l0LW11bHRpbWFpbGBgIGR1cmluZyB0aGUgZGVidWcsIGFuZAorY291bGQgY29uZnVzZSB5b3VyIHVzZXJzLiBEb24ndCBydW4gb24gYSBwcm9kdWN0aW9uIHNlcnZlci4KKworVG8gZGVidWcgY29uZmlndXJhdGlvbiBpc3N1ZXMgd2l0aCBgYGdpdC1tdWx0aW1haWxgYCwgeW91IGNhbiBhZGQgdGhlCitgYC0tc3Rkb3V0YGAgb3B0aW9uIHdoZW4gY2FsbGluZyBgYGdpdF9tdWx0aW1haWwucHlgYCBsaWtlIHRoaXM6OgorCisgICMhL2Jpbi9zaAorICBleGVjIC9wYXRoL3RvL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC9naXRfbXVsdGltYWlsLnB5IC0tc3Rkb3V0ICIkQCIKKworYW5kIHRyeSBwdXNoaW5nIGZyb20gYSB0ZXN0IHJlcG9zaXRvcnkuIFlvdSBzaG91bGQgc2VlIHRoZSBzb3VyY2Ugb2YKK3RoZSBlbWFpbCB0aGF0IHdvdWxkIGhhdmUgYmVlbiBzZW50IGluIHRoZSBvdXRwdXQgb2YgYGBnaXQgcHVzaGBgLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy9tdWx0aW1haWwvZ2l0X211bHRpbWFpbC5weSBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDE4MGRiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL2dpdF9tdWx0aW1haWwucHkKQEAgLTAsMCArMSwzNzUyIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKK19fdmVyc2lvbl9fID0gJzEuMi4wJworCisjIENvcHlyaWdodCAoYykgMjAxNSBNYXR0aGlldSBNb3kgYW5kIG90aGVycworIyBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBNaWNoYWVsIEhhZ2dlcnR5IGFuZCBvdGhlcnMKKyMgRGVyaXZlZCBmcm9tIGNvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsLCB3aGljaCBpcworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQW5keSBQYXJraW5zCisjIGFuZCBhbHNvIGluY2x1ZGVzIGNvbnRyaWJ1dGlvbnMgYnkgb3RoZXIgYXV0aG9ycy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZ2l0LW11bHRpbWFpbC4KKyMKKyMgZ2l0LW11bHRpbWFpbCBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorIyAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIiIiR2VuZXJhdGUgbm90aWZpY2F0aW9uIGVtYWlscyBmb3IgcHVzaGVzIHRvIGEgZ2l0IHJlcG9zaXRvcnkuCisKK1RoaXMgaG9vayBzZW5kcyBlbWFpbHMgZGVzY3JpYmluZyBjaGFuZ2VzIGludHJvZHVjZWQgYnkgcHVzaGVzIHRvIGEKK2dpdCByZXBvc2l0b3J5LiAgRm9yIGVhY2ggcmVmZXJlbmNlIHRoYXQgd2FzIGNoYW5nZWQsIGl0IGVtaXRzIG9uZQorUmVmZXJlbmNlQ2hhbmdlIGVtYWlsIHN1bW1hcml6aW5nIGhvdyB0aGUgcmVmZXJlbmNlIHdhcyBjaGFuZ2VkLAorZm9sbG93ZWQgYnkgb25lIFJldmlzaW9uIGVtYWlsIGZvciBlYWNoIG5ldyBjb21taXQgdGhhdCB3YXMgaW50cm9kdWNlZAorYnkgdGhlIHJlZmVyZW5jZSBjaGFuZ2UuCisKK0VhY2ggY29tbWl0IGlzIGFubm91bmNlZCBpbiBleGFjdGx5IG9uZSBSZXZpc2lvbiBlbWFpbC4gIElmIHRoZSBzYW1lCitjb21taXQgaXMgbWVyZ2VkIGludG8gYW5vdGhlciBicmFuY2ggaW4gdGhlIHNhbWUgb3IgYSBsYXRlciBwdXNoLCB0aGVuCit0aGUgUmVmZXJlbmNlQ2hhbmdlIGVtYWlsIHdpbGwgbGlzdCB0aGUgY29tbWl0J3MgU0hBMSBhbmQgaXRzIG9uZS1saW5lCitzdW1tYXJ5LCBidXQgbm8gbmV3IFJldmlzaW9uIGVtYWlsIHdpbGwgYmUgZ2VuZXJhdGVkLgorCitUaGlzIHNjcmlwdCBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgInBvc3QtcmVjZWl2ZSIgaG9vayBpbiBhIGdpdAorcmVwb3NpdG9yeSAoc2VlIGdpdGhvb2tzKDUpKS4gIEl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYW4gInVwZGF0ZSIKK3NjcmlwdCwgYnV0IHRoaXMgdXNhZ2UgaXMgbm90IGNvbXBsZXRlbHkgcmVsaWFibGUgYW5kIGlzIGRlcHJlY2F0ZWQuCisKK1RvIGhlbHAgd2l0aCBkZWJ1Z2dpbmcsIHRoaXMgc2NyaXB0IGFjY2VwdHMgYSAtLXN0ZG91dCBvcHRpb24sIHdoaWNoCitjYXVzZXMgdGhlIGVtYWlscyB0byBiZSB3cml0dGVuIHRvIHN0YW5kYXJkIG91dHB1dCByYXRoZXIgdGhhbiBzZW50Cit1c2luZyBzZW5kbWFpbC4KKworU2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUgZm9yIHRoZSBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLgorCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBiaXNlY3QKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2hsZXgKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHNtdHBsaWIKK2ltcG9ydCB0aW1lCitpbXBvcnQgY2dpCisKK1BZVEhPTjMgPSBzeXMudmVyc2lvbl9pbmZvID49ICgzLCAwKQorCitpZiBzeXMudmVyc2lvbl9pbmZvIDw9ICgyLCA1KToKKyAgICBkZWYgYWxsKGl0ZXJhYmxlKToKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gaXRlcmFibGU6CisgICAgICAgICAgICBpZiBub3QgZWxlbWVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKworZGVmIGlzX2FzY2lpKHMpOgorICAgIHJldHVybiBhbGwob3JkKGMpIDwgMTI4IGFuZCBvcmQoYykgPiAwIGZvciBjIGluIHMpCisKKworaWYgUFlUSE9OMzoKKyAgICBkZWYgc3RyX3RvX2J5dGVzKHMpOgorICAgICAgICByZXR1cm4gcy5lbmNvZGUoRU5DT0RJTkcpCisKKyAgICBkZWYgYnl0ZXNfdG9fc3RyKHMpOgorICAgICAgICByZXR1cm4gcy5kZWNvZGUoRU5DT0RJTkcpCisKKyAgICB1bmljb2RlID0gc3RyCisKKyAgICBkZWYgd3JpdGVfc3RyKGYsIG1zZyk6CisgICAgICAgICMgVHJ5IG91dHB1dGluZyB3aXRoIHRoZSBkZWZhdWx0IGVuY29kaW5nLiBJZiBpdCBmYWlscywKKyAgICAgICAgIyB0cnkgVVRGLTguCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuYnVmZmVyLndyaXRlKG1zZy5lbmNvZGUoc3lzLmdldGRlZmF1bHRlbmNvZGluZygpKSkKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIGYuYnVmZmVyLndyaXRlKG1zZy5lbmNvZGUoRU5DT0RJTkcpKQorZWxzZToKKyAgICBkZWYgc3RyX3RvX2J5dGVzKHMpOgorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIGJ5dGVzX3RvX3N0cihzKToKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiB3cml0ZV9zdHIoZiwgbXNnKToKKyAgICAgICAgZi53cml0ZShtc2cpCisKKyAgICBkZWYgbmV4dChpdCk6CisgICAgICAgIHJldHVybiBpdC5uZXh0KCkKKworCit0cnk6CisgICAgZnJvbSBlbWFpbC5jaGFyc2V0IGltcG9ydCBDaGFyc2V0CisgICAgZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgbWFrZV9tc2dpZAorICAgIGZyb20gZW1haWwudXRpbHMgaW1wb3J0IGdldGFkZHJlc3NlcworICAgIGZyb20gZW1haWwudXRpbHMgaW1wb3J0IGZvcm1hdGFkZHIKKyAgICBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBmb3JtYXRkYXRlCisgICAgZnJvbSBlbWFpbC5oZWFkZXIgaW1wb3J0IEhlYWRlcgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgICMgUHJpb3IgdG8gUHl0aG9uIDIuNSwgdGhlIGVtYWlsIG1vZHVsZSB1c2VkIGRpZmZlcmVudCBuYW1lczoKKyAgICBmcm9tIGVtYWlsLkNoYXJzZXQgaW1wb3J0IENoYXJzZXQKKyAgICBmcm9tIGVtYWlsLlV0aWxzIGltcG9ydCBtYWtlX21zZ2lkCisgICAgZnJvbSBlbWFpbC5VdGlscyBpbXBvcnQgZ2V0YWRkcmVzc2VzCisgICAgZnJvbSBlbWFpbC5VdGlscyBpbXBvcnQgZm9ybWF0YWRkcgorICAgIGZyb20gZW1haWwuVXRpbHMgaW1wb3J0IGZvcm1hdGRhdGUKKyAgICBmcm9tIGVtYWlsLkhlYWRlciBpbXBvcnQgSGVhZGVyCisKKworREVCVUcgPSBGYWxzZQorCitaRVJPUyA9ICcwJyAqIDQwCitMT0dCRUdJTiA9ICctIExvZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJworTE9HRU5EID0gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4nCisKK0FERFJfSEVBREVSUyA9IHNldChbJ2Zyb20nLCAndG8nLCAnY2MnLCAnYmNjJywgJ3JlcGx5LXRvJywgJ3NlbmRlciddKQorCisjIEl0IGlzIGFzc3VtZWQgaW4gbWFueSBwbGFjZXMgdGhhdCB0aGUgZW5jb2RpbmcgaXMgdW5pZm9ybWx5IFVURi04LAorIyBzbyBjaGFuZ2luZyB0aGVzZSBjb25zdGFudHMgaXMgdW5zdXBwb3J0ZWQuICBCdXQgZGVmaW5lIHRoZW0gaGVyZQorIyBhbnl3YXksIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGZpbmQgKGF0IGxlYXN0IG1vc3Qgb2YpIHRoZSBwbGFjZXMKKyMgd2hlcmUgdGhlIGVuY29kaW5nIGlzIGltcG9ydGFudC4KKyhFTkNPRElORywgQ0hBUlNFVCkgPSAoJ1VURi04JywgJ3V0Zi04JykKKworCitSRUZfQ1JFQVRFRF9TVUJKRUNUX1RFTVBMQVRFID0gKAorICAgICclKGVtYWlscHJlZml4KXMlKHJlZm5hbWVfdHlwZSlzICUoc2hvcnRfcmVmbmFtZSlzIGNyZWF0ZWQnCisgICAgJyAobm93ICUobmV3cmV2X3Nob3J0KXMpJworICAgICkKK1JFRl9VUERBVEVEX1NVQkpFQ1RfVEVNUExBVEUgPSAoCisgICAgJyUoZW1haWxwcmVmaXgpcyUocmVmbmFtZV90eXBlKXMgJShzaG9ydF9yZWZuYW1lKXMgdXBkYXRlZCcKKyAgICAnICglKG9sZHJldl9zaG9ydClzIC0+ICUobmV3cmV2X3Nob3J0KXMpJworICAgICkKK1JFRl9ERUxFVEVEX1NVQkpFQ1RfVEVNUExBVEUgPSAoCisgICAgJyUoZW1haWxwcmVmaXgpcyUocmVmbmFtZV90eXBlKXMgJShzaG9ydF9yZWZuYW1lKXMgZGVsZXRlZCcKKyAgICAnICh3YXMgJShvbGRyZXZfc2hvcnQpcyknCisgICAgKQorCitDT01CSU5FRF9SRUZDSEFOR0VfUkVWSVNJT05fU1VCSkVDVF9URU1QTEFURSA9ICgKKyAgICAnJShlbWFpbHByZWZpeClzJShyZWZuYW1lX3R5cGUpcyAlKHNob3J0X3JlZm5hbWUpcyB1cGRhdGVkOiAlKG9uZWxpbmUpcycKKyAgICApCisKK1JFRkNIQU5HRV9IRUFERVJfVEVNUExBVEUgPSAiIiJcCitEYXRlOiAlKHNlbmRfZGF0ZSlzCitUbzogJShyZWNpcGllbnRzKXMKK1N1YmplY3Q6ICUoc3ViamVjdClzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0LyUoY29udGVudHR5cGUpczsgY2hhcnNldD0lKGNoYXJzZXQpcworQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorTWVzc2FnZS1JRDogJShtc2dpZClzCitGcm9tOiAlKGZyb21hZGRyKXMKK1JlcGx5LVRvOiAlKHJlcGx5X3RvKXMKK1gtR2l0LUhvc3Q6ICUoZnFkbilzCitYLUdpdC1SZXBvOiAlKHJlcG9fc2hvcnRuYW1lKXMKK1gtR2l0LVJlZm5hbWU6ICUocmVmbmFtZSlzCitYLUdpdC1SZWZ0eXBlOiAlKHJlZm5hbWVfdHlwZSlzCitYLUdpdC1PbGRyZXY6ICUob2xkcmV2KXMKK1gtR2l0LU5ld3JldjogJShuZXdyZXYpcworWC1HaXQtTm90aWZpY2F0aW9uVHlwZTogcmVmX2NoYW5nZWQKK1gtR2l0LU11bHRpbWFpbC1WZXJzaW9uOiAlKG11bHRpbWFpbF92ZXJzaW9uKXMKK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVyYXRlZAorIiIiCisKK1JFRkNIQU5HRV9JTlRST19URU1QTEFURSA9ICIiIlwKK1RoaXMgaXMgYW4gYXV0b21hdGVkIGVtYWlsIGZyb20gdGhlIGdpdCBob29rcy9wb3N0LXJlY2VpdmUgc2NyaXB0LgorCislKHB1c2hlcilzIHB1c2hlZCBhIGNoYW5nZSB0byAlKHJlZm5hbWVfdHlwZSlzICUoc2hvcnRfcmVmbmFtZSlzCitpbiByZXBvc2l0b3J5ICUocmVwb19zaG9ydG5hbWUpcy4KKworIiIiCisKKworRk9PVEVSX1RFTVBMQVRFID0gIiIiXAorCistLSBcblwKK1RvIHN0b3AgcmVjZWl2aW5nIG5vdGlmaWNhdGlvbiBlbWFpbHMgbGlrZSB0aGlzIG9uZSwgcGxlYXNlIGNvbnRhY3QKKyUoYWRtaW5pc3RyYXRvcilzLgorIiIiCisKKworUkVXSU5EX09OTFlfVEVNUExBVEUgPSAiIiJcCitUaGlzIHVwZGF0ZSByZW1vdmVkIGV4aXN0aW5nIHJldmlzaW9ucyBmcm9tIHRoZSByZWZlcmVuY2UsIGxlYXZpbmcgdGhlCityZWZlcmVuY2UgcG9pbnRpbmcgYXQgYSBwcmV2aW91cyBwb2ludCBpbiB0aGUgcmVwb3NpdG9yeSBoaXN0b3J5LgorCisgKiAtLSAqIC0tIE4gICAlKHJlZm5hbWUpcyAoJShuZXdyZXZfc2hvcnQpcykKKyAgICAgICAgICAgIFxcCisgICAgICAgICAgICAgTyAtLSBPIC0tIE8gICAoJShvbGRyZXZfc2hvcnQpcykKKworQW55IHJldmlzaW9ucyBtYXJrZWQgIm9taXRzIiBhcmUgbm90IGdvbmU7IG90aGVyIHJlZmVyZW5jZXMgc3RpbGwKK3JlZmVyIHRvIHRoZW0uICBBbnkgcmV2aXNpb25zIG1hcmtlZCAiZGlzY2FyZHMiIGFyZSBnb25lIGZvcmV2ZXIuCisiIiIKKworCitOT05fRkZfVEVNUExBVEUgPSAiIiJcCitUaGlzIHVwZGF0ZSBhZGRlZCBuZXcgcmV2aXNpb25zIGFmdGVyIHVuZG9pbmcgZXhpc3RpbmcgcmV2aXNpb25zLgorVGhhdCBpcyB0byBzYXksIHNvbWUgcmV2aXNpb25zIHRoYXQgd2VyZSBpbiB0aGUgb2xkIHZlcnNpb24gb2YgdGhlCislKHJlZm5hbWVfdHlwZSlzIGFyZSBub3QgaW4gdGhlIG5ldyB2ZXJzaW9uLiAgVGhpcyBzaXR1YXRpb24gb2NjdXJzCit3aGVuIGEgdXNlciAtLWZvcmNlIHB1c2hlcyBhIGNoYW5nZSBhbmQgZ2VuZXJhdGVzIGEgcmVwb3NpdG9yeQorY29udGFpbmluZyBzb21ldGhpbmcgbGlrZSB0aGlzOgorCisgKiAtLSAqIC0tIEIgLS0gTyAtLSBPIC0tIE8gICAoJShvbGRyZXZfc2hvcnQpcykKKyAgICAgICAgICAgIFxcCisgICAgICAgICAgICAgTiAtLSBOIC0tIE4gICAlKHJlZm5hbWUpcyAoJShuZXdyZXZfc2hvcnQpcykKKworWW91IHNob3VsZCBhbHJlYWR5IGhhdmUgcmVjZWl2ZWQgbm90aWZpY2F0aW9uIGVtYWlscyBmb3IgYWxsIG9mIHRoZSBPCityZXZpc2lvbnMsIGFuZCBzbyB0aGUgZm9sbG93aW5nIGVtYWlscyBkZXNjcmliZSBvbmx5IHRoZSBOIHJldmlzaW9ucworZnJvbSB0aGUgY29tbW9uIGJhc2UsIEIuCisKK0FueSByZXZpc2lvbnMgbWFya2VkICJvbWl0cyIgYXJlIG5vdCBnb25lOyBvdGhlciByZWZlcmVuY2VzIHN0aWxsCityZWZlciB0byB0aGVtLiAgQW55IHJldmlzaW9ucyBtYXJrZWQgImRpc2NhcmRzIiBhcmUgZ29uZSBmb3JldmVyLgorIiIiCisKKworTk9fTkVXX1JFVklTSU9OU19URU1QTEFURSA9ICIiIlwKK05vIG5ldyByZXZpc2lvbnMgd2VyZSBhZGRlZCBieSB0aGlzIHVwZGF0ZS4KKyIiIgorCisKK0RJU0NBUkRFRF9SRVZJU0lPTlNfVEVNUExBVEUgPSAiIiJcCitUaGlzIGNoYW5nZSBwZXJtYW5lbnRseSBkaXNjYXJkcyB0aGUgZm9sbG93aW5nIHJldmlzaW9uczoKKyIiIgorCisKK05PX0RJU0NBUkRFRF9SRVZJU0lPTlNfVEVNUExBVEUgPSAiIiJcCitUaGUgcmV2aXNpb25zIHRoYXQgd2VyZSBvbiB0aGlzICUocmVmbmFtZV90eXBlKXMgYXJlIHN0aWxsIGNvbnRhaW5lZCBpbgorb3RoZXIgcmVmZXJlbmNlczsgdGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCBkaXNjYXJkIGFueSBjb21taXRzCitmcm9tIHRoZSByZXBvc2l0b3J5LgorIiIiCisKKworTkVXX1JFVklTSU9OU19URU1QTEFURSA9ICIiIlwKK1RoZSAlKHRvdClzIHJldmlzaW9ucyBsaXN0ZWQgYWJvdmUgYXMgIm5ldyIgYXJlIGVudGlyZWx5IG5ldyB0byB0aGlzCityZXBvc2l0b3J5IGFuZCB3aWxsIGJlIGRlc2NyaWJlZCBpbiBzZXBhcmF0ZSBlbWFpbHMuICBUaGUgcmV2aXNpb25zCitsaXN0ZWQgYXMgImFkZHMiIHdlcmUgYWxyZWFkeSBwcmVzZW50IGluIHRoZSByZXBvc2l0b3J5IGFuZCBoYXZlIG9ubHkKK2JlZW4gYWRkZWQgdG8gdGhpcyByZWZlcmVuY2UuCisKKyIiIgorCisKK1RBR19DUkVBVEVEX1RFTVBMQVRFID0gIiIiXAorICAgICAgICBhdCAgJShuZXdyZXZfc2hvcnQpLTlzICglKG5ld3Jldl90eXBlKXMpCisiIiIKKworCitUQUdfVVBEQVRFRF9URU1QTEFURSA9ICIiIlwKKyoqKiBXQVJOSU5HOiB0YWcgJShzaG9ydF9yZWZuYW1lKXMgd2FzIG1vZGlmaWVkISAqKioKKworICAgICAgZnJvbSAgJShvbGRyZXZfc2hvcnQpLTlzICglKG9sZHJldl90eXBlKXMpCisgICAgICAgIHRvICAlKG5ld3Jldl9zaG9ydCktOXMgKCUobmV3cmV2X3R5cGUpcykKKyIiIgorCisKK1RBR19ERUxFVEVEX1RFTVBMQVRFID0gIiIiXAorKioqIFdBUk5JTkc6IHRhZyAlKHNob3J0X3JlZm5hbWUpcyB3YXMgZGVsZXRlZCEgKioqCisKKyIiIgorCisKKyMgVGhlIHRlbXBsYXRlIHVzZWQgaW4gc3VtbWFyeSB0YWJsZXMuICBJdCBsb29rcyBiZXN0IGlmIHRoaXMgdXNlcyB0aGUKKyMgc2FtZSBhbGlnbm1lbnQgYXMgVEFHX0NSRUFURURfVEVNUExBVEUgYW5kIFRBR19VUERBVEVEX1RFTVBMQVRFLgorQlJJRUZfU1VNTUFSWV9URU1QTEFURSA9ICIiIlwKKyUoYWN0aW9uKTEwcyAgJShyZXZfc2hvcnQpLTlzICUodGV4dClzCisiIiIKKworCitOT05fQ09NTUlUX1VQREFURV9URU1QTEFURSA9ICIiIlwKK1RoaXMgaXMgYW4gdW51c3VhbCByZWZlcmVuY2UgY2hhbmdlIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBkaWQgbm90CityZWZlciB0byBhIGNvbW1pdCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBjaGFuZ2UuICBXZSBkbyBub3Qga25vdworaG93IHRvIHByb3ZpZGUgZnVsbCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHJlZmVyZW5jZSBjaGFuZ2UuCisiIiIKKworCitSRVZJU0lPTl9IRUFERVJfVEVNUExBVEUgPSAiIiJcCitEYXRlOiAlKHNlbmRfZGF0ZSlzCitUbzogJShyZWNpcGllbnRzKXMKK0NjOiAlKGNjX3JlY2lwaWVudHMpcworU3ViamVjdDogJShlbWFpbHByZWZpeClzJShudW0pMDJkLyUodG90KTAyZDogJShvbmVsaW5lKXMKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvJShjb250ZW50dHlwZSlzOyBjaGFyc2V0PSUoY2hhcnNldClzCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitGcm9tOiAlKGZyb21hZGRyKXMKK1JlcGx5LVRvOiAlKHJlcGx5X3RvKXMKK0luLVJlcGx5LVRvOiAlKHJlcGx5X3RvX21zZ2lkKXMKK1JlZmVyZW5jZXM6ICUocmVwbHlfdG9fbXNnaWQpcworWC1HaXQtSG9zdDogJShmcWRuKXMKK1gtR2l0LVJlcG86ICUocmVwb19zaG9ydG5hbWUpcworWC1HaXQtUmVmbmFtZTogJShyZWZuYW1lKXMKK1gtR2l0LVJlZnR5cGU6ICUocmVmbmFtZV90eXBlKXMKK1gtR2l0LVJldjogJShyZXYpcworWC1HaXQtTm90aWZpY2F0aW9uVHlwZTogZGlmZgorWC1HaXQtTXVsdGltYWlsLVZlcnNpb246ICUobXVsdGltYWlsX3ZlcnNpb24pcworQXV0by1TdWJtaXR0ZWQ6IGF1dG8tZ2VuZXJhdGVkCisiIiIKKworUkVWSVNJT05fSU5UUk9fVEVNUExBVEUgPSAiIiJcCitUaGlzIGlzIGFuIGF1dG9tYXRlZCBlbWFpbCBmcm9tIHRoZSBnaXQgaG9va3MvcG9zdC1yZWNlaXZlIHNjcmlwdC4KKworJShwdXNoZXIpcyBwdXNoZWQgYSBjb21taXQgdG8gJShyZWZuYW1lX3R5cGUpcyAlKHNob3J0X3JlZm5hbWUpcworaW4gcmVwb3NpdG9yeSAlKHJlcG9fc2hvcnRuYW1lKXMuCisKKyIiIgorCisKK1JFVklTSU9OX0ZPT1RFUl9URU1QTEFURSA9IEZPT1RFUl9URU1QTEFURQorCisKKyMgQ29tYmluZWQsIG1lYW5pbmcgcmVmY2hhbmdlK3JldmlzaW9uIGVtYWlsIChmb3Igc2luZ2xlLWNvbW1pdCBhZGRpdGlvbnMpCitDT01CSU5FRF9IRUFERVJfVEVNUExBVEUgPSAiIiJcCitEYXRlOiAlKHNlbmRfZGF0ZSlzCitUbzogJShyZWNpcGllbnRzKXMKK1N1YmplY3Q6ICUoc3ViamVjdClzCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiB0ZXh0LyUoY29udGVudHR5cGUpczsgY2hhcnNldD0lKGNoYXJzZXQpcworQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorTWVzc2FnZS1JRDogJShtc2dpZClzCitGcm9tOiAlKGZyb21hZGRyKXMKK1JlcGx5LVRvOiAlKHJlcGx5X3RvKXMKK1gtR2l0LUhvc3Q6ICUoZnFkbilzCitYLUdpdC1SZXBvOiAlKHJlcG9fc2hvcnRuYW1lKXMKK1gtR2l0LVJlZm5hbWU6ICUocmVmbmFtZSlzCitYLUdpdC1SZWZ0eXBlOiAlKHJlZm5hbWVfdHlwZSlzCitYLUdpdC1PbGRyZXY6ICUob2xkcmV2KXMKK1gtR2l0LU5ld3JldjogJShuZXdyZXYpcworWC1HaXQtUmV2OiAlKHJldilzCitYLUdpdC1Ob3RpZmljYXRpb25UeXBlOiByZWZfY2hhbmdlZF9wbHVzX2RpZmYKK1gtR2l0LU11bHRpbWFpbC1WZXJzaW9uOiAlKG11bHRpbWFpbF92ZXJzaW9uKXMKK0F1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVyYXRlZAorIiIiCisKK0NPTUJJTkVEX0lOVFJPX1RFTVBMQVRFID0gIiIiXAorVGhpcyBpcyBhbiBhdXRvbWF0ZWQgZW1haWwgZnJvbSB0aGUgZ2l0IGhvb2tzL3Bvc3QtcmVjZWl2ZSBzY3JpcHQuCisKKyUocHVzaGVyKXMgcHVzaGVkIGEgY29tbWl0IHRvICUocmVmbmFtZV90eXBlKXMgJShzaG9ydF9yZWZuYW1lKXMKK2luIHJlcG9zaXRvcnkgJShyZXBvX3Nob3J0bmFtZSlzLgorCisiIiIKKworQ09NQklORURfRk9PVEVSX1RFTVBMQVRFID0gRk9PVEVSX1RFTVBMQVRFCisKKworY2xhc3MgQ29tbWFuZEVycm9yKEV4Y2VwdGlvbik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNtZCwgcmV0Y29kZSk6CisgICAgICAgIHNlbGYuY21kID0gY21kCisgICAgICAgIHNlbGYucmV0Y29kZSA9IHJldGNvZGUKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAgICdDb21tYW5kICIlcyIgZmFpbGVkIHdpdGggcmV0Y29kZSAlcycgJSAoJyAnLmpvaW4oY21kKSwgcmV0Y29kZSwpCisgICAgICAgICAgICApCisKKworY2xhc3MgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCisjIFRoZSAiZ2l0IiBwcm9ncmFtICh0aGlzIGNvdWxkIGJlIGNoYW5nZWQgdG8gaW5jbHVkZSBhIGZ1bGwgcGF0aCk6CitHSVRfRVhFQ1VUQUJMRSA9ICdnaXQnCisKKworIyBIb3cgImdpdCIgc2hvdWxkIGJlIGludm9rZWQgKGluY2x1ZGluZyBnbG9iYWwgYXJndW1lbnRzKSwgYXMgYSBsaXN0CisjIG9mIHdvcmRzLiAgVGhpcyB2YXJpYWJsZSBpcyB1c3VhbGx5IGluaXRpYWxpemVkIGF1dG9tYXRpY2FsbHkgYnkKKyMgcmVhZF9naXRfb3V0cHV0KCkgdmlhIGNob29zZV9naXRfY29tbWFuZCgpLCBidXQgaWYgYSB2YWx1ZSBpcyBzZXQKKyMgaGVyZSB0aGVuIGl0IHdpbGwgYmUgdXNlZCB1bmNvbmRpdGlvbmFsbHkuCitHSVRfQ01EID0gTm9uZQorCisKK2RlZiBjaG9vc2VfZ2l0X2NvbW1hbmQoKToKKyAgICAiIiJEZWNpZGUgaG93IHRvIGludm9rZSBnaXQsIGFuZCByZWNvcmQgdGhlIGNob2ljZSBpbiBHSVRfQ01ELiIiIgorCisgICAgZ2xvYmFsIEdJVF9DTUQKKworICAgIGlmIEdJVF9DTUQgaXMgTm9uZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBDaGVjayB0byBzZWUgd2hldGhlciB0aGUgIi1jIiBvcHRpb24gaXMgYWNjZXB0ZWQgKGl0IHdhcworICAgICAgICAgICAgIyBvbmx5IGFkZGVkIGluIEdpdCAxLjcuMikuICBXZSBkb24ndCBhY3R1YWxseSB1c2UgdGhlCisgICAgICAgICAgICAjIG91dHB1dCBvZiAiZ2l0IC0tdmVyc2lvbiIsIHRob3VnaCBpZiB3ZSBuZWVkZWQgbW9yZQorICAgICAgICAgICAgIyBzcGVjaWZpYyB2ZXJzaW9uIGluZm9ybWF0aW9uIHRoaXMgd291bGQgYmUgdGhlIHBsYWNlIHRvCisgICAgICAgICAgICAjIGRvIGl0LgorICAgICAgICAgICAgY21kID0gW0dJVF9FWEVDVVRBQkxFLCAnLWMnLCAnZm9vLmJhcj1iYXonLCAnLS12ZXJzaW9uJ10KKyAgICAgICAgICAgIHJlYWRfb3V0cHV0KGNtZCkKKyAgICAgICAgICAgIEdJVF9DTUQgPSBbR0lUX0VYRUNVVEFCTEUsICctYycsICdpMThuLmxvZ291dHB1dGVuY29kaW5nPSVzJyAlIChFTkNPRElORywpXQorICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgR0lUX0NNRCA9IFtHSVRfRVhFQ1VUQUJMRV0KKworCitkZWYgcmVhZF9naXRfb3V0cHV0KGFyZ3MsIGlucHV0PU5vbmUsIGtlZXBlbmRzPUZhbHNlLCAqKmt3KToKKyAgICAiIiJSZWFkIHRoZSBvdXRwdXQgb2YgYSBHaXQgY29tbWFuZC4iIiIKKworICAgIGlmIEdJVF9DTUQgaXMgTm9uZToKKyAgICAgICAgY2hvb3NlX2dpdF9jb21tYW5kKCkKKworICAgIHJldHVybiByZWFkX291dHB1dChHSVRfQ01EICsgYXJncywgaW5wdXQ9aW5wdXQsIGtlZXBlbmRzPWtlZXBlbmRzLCAqKmt3KQorCisKK2RlZiByZWFkX291dHB1dChjbWQsIGlucHV0PU5vbmUsIGtlZXBlbmRzPUZhbHNlLCAqKmt3KToKKyAgICBpZiBpbnB1dDoKKyAgICAgICAgc3RkaW4gPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgaW5wdXQgPSBzdHJfdG9fYnl0ZXMoaW5wdXQpCisgICAgZWxzZToKKyAgICAgICAgc3RkaW4gPSBOb25lCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgIGNtZCwgc3RkaW49c3RkaW4sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsICoqa3cKKyAgICAgICAgKQorICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKGlucHV0KQorICAgIG91dCA9IGJ5dGVzX3RvX3N0cihvdXQpCisgICAgcmV0Y29kZSA9IHAud2FpdCgpCisgICAgaWYgcmV0Y29kZToKKyAgICAgICAgcmFpc2UgQ29tbWFuZEVycm9yKGNtZCwgcmV0Y29kZSkKKyAgICBpZiBub3Qga2VlcGVuZHM6CisgICAgICAgIG91dCA9IG91dC5yc3RyaXAoJ1xuXHInKQorICAgIHJldHVybiBvdXQKKworCitkZWYgcmVhZF9naXRfbGluZXMoYXJncywga2VlcGVuZHM9RmFsc2UsICoqa3cpOgorICAgICIiIlJldHVybiB0aGUgbGluZXMgb3V0cHV0IGJ5IEdpdCBjb21tYW5kLgorCisgICAgUmV0dXJuIGFzIHNpbmdsZSBsaW5lcywgd2l0aCBuZXdsaW5lcyBzdHJpcHBlZCBvZmYuIiIiCisKKyAgICByZXR1cm4gcmVhZF9naXRfb3V0cHV0KGFyZ3MsIGtlZXBlbmRzPVRydWUsICoqa3cpLnNwbGl0bGluZXMoa2VlcGVuZHMpCisKKworZGVmIGdpdF9yZXZfbGlzdF9pc2goY21kLCBzcGVjLCBhcmdzPU5vbmUsICoqa3cpOgorICAgICIiIkNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBpbnZva2luZyBhICdnaXQgcmV2LWxpc3QnLWxpa2UgY29tbWFuZC4KKworICAgIFBhcmFtZXRlcnM6CisgICAgICAqIGNtZCBpcyB0aGUgR2l0IGNvbW1hbmQgdG8gcnVuLCBlLmcuLCAncmV2LWxpc3QnIG9yICdsb2cnLgorICAgICAgKiBzcGVjIGlzIGEgbGlzdCBvZiByZXZpc2lvbiBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgbmFtZWQKKyAgICAgICAgY29tbWFuZC4gIElmIE5vbmUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlbXB0eSBsaXN0LgorICAgICAgKiBhcmdzIGlzIGEgbGlzdCBvZiBleHRyYSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBuYW1lZCBjb21tYW5kLgorICAgICAgKiBBbGwgb3RoZXIga2V5d29yZCBhcmd1bWVudHMgKGlmIGFueSkgYXJlIHBhc3NlZCB0byB0aGUKKyAgICAgICAgdW5kZXJseWluZyByZWFkX2dpdF9saW5lcygpIGZ1bmN0aW9uLgorCisgICAgUmV0dXJuIHRoZSBvdXRwdXQgb2YgdGhlIEdpdCBjb21tYW5kIGluIHRoZSBmb3JtIG9mIGEgbGlzdCwgb25lCisgICAgZW50cnkgcGVyIG91dHB1dCBsaW5lLgorICAgICIiIgorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIFtdCisgICAgaWYgYXJncyBpcyBOb25lOgorICAgICAgICBhcmdzID0gW10KKyAgICBhcmdzID0gW2NtZCwgJy0tc3RkaW4nXSArIGFyZ3MKKyAgICBzcGVjX3N0ZGluID0gJycuam9pbihzICsgJ1xuJyBmb3IgcyBpbiBzcGVjKQorICAgIHJldHVybiByZWFkX2dpdF9saW5lcyhhcmdzLCBpbnB1dD1zcGVjX3N0ZGluLCAqKmt3KQorCisKK2RlZiBnaXRfcmV2X2xpc3Qoc3BlYywgKiprdyk6CisgICAgIiIiUnVuICdnaXQgcmV2LWxpc3QnIHdpdGggdGhlIGdpdmVuIGxpc3Qgb2YgcmV2aXNpb24gYXJndW1lbnRzLgorCisgICAgU2VlIGdpdF9yZXZfbGlzdF9pc2goKSBmb3IgcGFyYW1ldGVyIGFuZCByZXR1cm4gdmFsdWUKKyAgICBkb2N1bWVudGF0aW9uLgorICAgICIiIgorICAgIHJldHVybiBnaXRfcmV2X2xpc3RfaXNoKCdyZXYtbGlzdCcsIHNwZWMsICoqa3cpCisKKworZGVmIGdpdF9sb2coc3BlYywgKiprdyk6CisgICAgIiIiUnVuICdnaXQgbG9nJyB3aXRoIHRoZSBnaXZlbiBsaXN0IG9mIHJldmlzaW9uIGFyZ3VtZW50cy4KKworICAgIFNlZSBnaXRfcmV2X2xpc3RfaXNoKCkgZm9yIHBhcmFtZXRlciBhbmQgcmV0dXJuIHZhbHVlCisgICAgZG9jdW1lbnRhdGlvbi4KKyAgICAiIiIKKyAgICByZXR1cm4gZ2l0X3Jldl9saXN0X2lzaCgnbG9nJywgc3BlYywgKiprdykKKworCitkZWYgaGVhZGVyX2VuY29kZSh0ZXh0LCBoZWFkZXJfbmFtZT1Ob25lKToKKyAgICAiIiJFbmNvZGUgYW5kIGxpbmUtd3JhcCB0aGUgdmFsdWUgb2YgYW4gZW1haWwgaGVhZGVyIGZpZWxkLiIiIgorCisgICAgIyBDb252ZXJ0IHRvIHVuaWNvZGUsIGlmIHJlcXVpcmVkLgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHRleHQsIHVuaWNvZGUpOgorICAgICAgICB0ZXh0ID0gdW5pY29kZSh0ZXh0LCAndXRmLTgnKQorCisgICAgaWYgaXNfYXNjaWkodGV4dCk6CisgICAgICAgIGNoYXJzZXQgPSAnYXNjaWknCisgICAgZWxzZToKKyAgICAgICAgY2hhcnNldCA9ICd1dGYtOCcKKworICAgIHJldHVybiBIZWFkZXIodGV4dCwgaGVhZGVyX25hbWU9aGVhZGVyX25hbWUsIGNoYXJzZXQ9Q2hhcnNldChjaGFyc2V0KSkuZW5jb2RlKCkKKworCitkZWYgYWRkcl9oZWFkZXJfZW5jb2RlKHRleHQsIGhlYWRlcl9uYW1lPU5vbmUpOgorICAgICIiIkVuY29kZSBhbmQgbGluZS13cmFwIHRoZSB2YWx1ZSBvZiBhbiBlbWFpbCBoZWFkZXIgZmllbGQgY29udGFpbmluZworICAgIGVtYWlsIGFkZHJlc3Nlcy4iIiIKKworICAgICMgQ29udmVydCB0byB1bmljb2RlLCBpZiByZXF1aXJlZC4KKyAgICBpZiBub3QgaXNpbnN0YW5jZSh0ZXh0LCB1bmljb2RlKToKKyAgICAgICAgdGV4dCA9IHVuaWNvZGUodGV4dCwgJ3V0Zi04JykKKworICAgIHRleHQgPSAnLCAnLmpvaW4oCisgICAgICAgIGZvcm1hdGFkZHIoKGhlYWRlcl9lbmNvZGUobmFtZSksIGVtYWlsYWRkcikpCisgICAgICAgIGZvciBuYW1lLCBlbWFpbGFkZHIgaW4gZ2V0YWRkcmVzc2VzKFt0ZXh0XSkKKyAgICAgICAgKQorCisgICAgaWYgaXNfYXNjaWkodGV4dCk6CisgICAgICAgIGNoYXJzZXQgPSAnYXNjaWknCisgICAgZWxzZToKKyAgICAgICAgY2hhcnNldCA9ICd1dGYtOCcKKworICAgIHJldHVybiBIZWFkZXIodGV4dCwgaGVhZGVyX25hbWU9aGVhZGVyX25hbWUsIGNoYXJzZXQ9Q2hhcnNldChjaGFyc2V0KSkuZW5jb2RlKCkKKworCitjbGFzcyBDb25maWcob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VjdGlvbiwgZ2l0X2NvbmZpZz1Ob25lKToKKyAgICAgICAgIiIiUmVwcmVzZW50IGEgc2VjdGlvbiBvZiB0aGUgZ2l0IGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgSWYgZ2l0X2NvbmZpZyBpcyBzcGVjaWZpZWQsIGl0IGlzIHBhc3NlZCB0byAiZ2l0IGNvbmZpZyIgaW4KKyAgICAgICAgdGhlIEdJVF9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUsIG1lYW5pbmcgdGhhdCAiZ2l0IGNvbmZpZyIKKyAgICAgICAgd2lsbCByZWFkIHRoZSBzcGVjaWZpZWQgcGF0aCByYXRoZXIgdGhhbiB0aGUgR2l0IGRlZmF1bHQKKyAgICAgICAgY29uZmlnIHBhdGhzLiIiIgorCisgICAgICAgIHNlbGYuc2VjdGlvbiA9IHNlY3Rpb24KKyAgICAgICAgaWYgZ2l0X2NvbmZpZzoKKyAgICAgICAgICAgIHNlbGYuZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgICAgIHNlbGYuZW52WydHSVRfQ09ORklHJ10gPSBnaXRfY29uZmlnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmVudiA9IE5vbmUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3NwbGl0KHMpOgorICAgICAgICAiIiJTcGxpdCBOVUwtdGVybWluYXRlZCB2YWx1ZXMuIiIiCisKKyAgICAgICAgd29yZHMgPSBzLnNwbGl0KCdcMCcpCisgICAgICAgIGFzc2VydCB3b3Jkc1stMV0gPT0gJycKKyAgICAgICAgcmV0dXJuIHdvcmRzWzotMV0KKworICAgIGRlZiBnZXQoc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWVzID0gc2VsZi5fc3BsaXQocmVhZF9naXRfb3V0cHV0KAorICAgICAgICAgICAgICAgIFsnY29uZmlnJywgJy0tZ2V0JywgJy0tbnVsbCcsICclcy4lcycgJSAoc2VsZi5zZWN0aW9uLCBuYW1lKV0sCisgICAgICAgICAgICAgICAgZW52PXNlbGYuZW52LCBrZWVwZW5kcz1UcnVlLAorICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICBhc3NlcnQgbGVuKHZhbHVlcykgPT0gMQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1swXQorICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworICAgIGRlZiBnZXRfYm9vbChzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgICAgICBbJ2NvbmZpZycsICctLWdldCcsICctLWJvb2wnLCAnJXMuJXMnICUgKHNlbGYuc2VjdGlvbiwgbmFtZSldLAorICAgICAgICAgICAgICAgIGVudj1zZWxmLmVudiwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICByZXR1cm4gdmFsdWUgPT0gJ3RydWUnCisKKyAgICBkZWYgZ2V0X2FsbChzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJSZWFkIGEgKHBvc3NpYmx5IG11bHRpdmFsdWVkKSBzZXR0aW5nIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgUmV0dXJuIHRoZSByZXN1bHQgYXMgYSBsaXN0IG9mIHZhbHVlcywgb3IgZGVmYXVsdCBpZiB0aGUgbmFtZQorICAgICAgICBpcyB1bnNldC4iIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3BsaXQocmVhZF9naXRfb3V0cHV0KAorICAgICAgICAgICAgICAgIFsnY29uZmlnJywgJy0tZ2V0LWFsbCcsICctLW51bGwnLCAnJXMuJXMnICUgKHNlbGYuc2VjdGlvbiwgbmFtZSldLAorICAgICAgICAgICAgICAgIGVudj1zZWxmLmVudiwga2VlcGVuZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICApKQorICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgdCwgZSwgdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIGUucmV0Y29kZSA9PSAxOgorICAgICAgICAgICAgICAgICMgInRoZSBzZWN0aW9uIG9yIGtleSBpcyBpbnZhbGlkIjsgaS5lLiwgdGhlcmUgaXMgbm8KKyAgICAgICAgICAgICAgICAjIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIGtleS4KKyAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHNldChzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgIFsnY29uZmlnJywgJyVzLiVzJyAlIChzZWxmLnNlY3Rpb24sIG5hbWUpLCB2YWx1ZV0sCisgICAgICAgICAgICBlbnY9c2VsZi5lbnYsCisgICAgICAgICAgICApCisKKyAgICBkZWYgYWRkKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgcmVhZF9naXRfb3V0cHV0KAorICAgICAgICAgICAgWydjb25maWcnLCAnLS1hZGQnLCAnJXMuJXMnICUgKHNlbGYuc2VjdGlvbiwgbmFtZSksIHZhbHVlXSwKKyAgICAgICAgICAgIGVudj1zZWxmLmVudiwKKyAgICAgICAgICAgICkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLmdldF9hbGwobmFtZSwgZGVmYXVsdD1Ob25lKSBpcyBub3QgTm9uZQorCisgICAgIyBXZSBkb24ndCB1c2UgdGhpcyBtZXRob2QgYW55bW9yZSBpbnRlcm5hbGx5LCBidXQga2VlcCBpdCBoZXJlIGluCisgICAgIyBjYXNlIHNvbWVib2R5IGlzIGNhbGxpbmcgaXQgZnJvbSB0aGVpciBvd24gY29kZToKKyAgICBkZWYgaGFzX2tleShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2VsZgorCisgICAgZGVmIHVuc2V0X2FsbChzZWxmLCBuYW1lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVhZF9naXRfb3V0cHV0KAorICAgICAgICAgICAgICAgIFsnY29uZmlnJywgJy0tdW5zZXQtYWxsJywgJyVzLiVzJyAlIChzZWxmLnNlY3Rpb24sIG5hbWUpXSwKKyAgICAgICAgICAgICAgICBlbnY9c2VsZi5lbnYsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgdCwgZSwgdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIGUucmV0Y29kZSA9PSA1OgorICAgICAgICAgICAgICAgICMgVGhlIG5hbWUgZG9lc24ndCBleGlzdCwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50ZWQgYW55d2F5Li4uCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIHNldF9yZWNpcGllbnRzKHNlbGYsIG5hbWUsIHZhbHVlKToKKyAgICAgICAgc2VsZi51bnNldF9hbGwobmFtZSkKKyAgICAgICAgZm9yIHBhaXIgaW4gZ2V0YWRkcmVzc2VzKFt2YWx1ZV0pOgorICAgICAgICAgICAgc2VsZi5hZGQobmFtZSwgZm9ybWF0YWRkcihwYWlyKSkKKworCitkZWYgZ2VuZXJhdGVfc3VtbWFyaWVzKCpsb2dfYXJncyk6CisgICAgIiIiR2VuZXJhdGUgYSBicmllZiBzdW1tYXJ5IGZvciBlYWNoIHJldmlzaW9uIHJlcXVlc3RlZC4KKworICAgIGxvZ19hcmdzIGFyZSBzdHJpbmdzIHRoYXQgd2lsbCBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gImdpdCBsb2ciIGFzCisgICAgcmV2aXNpb24gc2VsZWN0b3JzLiAgSXRlcmF0ZSBvdmVyIChzaGExX3Nob3J0LCBzdWJqZWN0KSBmb3IgZWFjaAorICAgIGNvbW1pdCBzcGVjaWZpZWQgYnkgbG9nX2FyZ3MgKHN1YmplY3QgaXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlCisgICAgY29tbWl0IG1lc3NhZ2UgYXMgYSBzdHJpbmcgd2l0aG91dCBFT0xzKS4iIiIKKworICAgIGNtZCA9IFsKKyAgICAgICAgJ2xvZycsICctLWFiYnJldicsICctLWZvcm1hdD0laCAlcycsCisgICAgICAgIF0gKyBsaXN0KGxvZ19hcmdzKSArIFsnLS0nXQorICAgIGZvciBsaW5lIGluIHJlYWRfZ2l0X2xpbmVzKGNtZCk6CisgICAgICAgIHlpZWxkIHR1cGxlKGxpbmUuc3BsaXQoJyAnLCAxKSkKKworCitkZWYgbGltaXRfbGluZXMobGluZXMsIG1heF9saW5lcyk6CisgICAgZm9yIChpbmRleCwgbGluZSkgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgaWYgaW5kZXggPCBtYXhfbGluZXM6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBpZiBpbmRleCA+PSBtYXhfbGluZXM6CisgICAgICAgIHlpZWxkICcuLi4gJWQgbGluZXMgc3VwcHJlc3NlZCAuLi5cbicgJSAoaW5kZXggKyAxIC0gbWF4X2xpbmVzLCkKKworCitkZWYgbGltaXRfbGluZWxlbmd0aChsaW5lcywgbWF4X2xpbmVsZW5ndGgpOgorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAjIERvbid0IGZvcmdldCB0aGF0IGxpbmVzIGFsd2F5cyBpbmNsdWRlIGEgdHJhaWxpbmcgbmV3bGluZS4KKyAgICAgICAgaWYgbGVuKGxpbmUpID4gbWF4X2xpbmVsZW5ndGggKyAxOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOm1heF9saW5lbGVuZ3RoIC0gN10gKyAnIFsuLi5dXG4nCisgICAgICAgIHlpZWxkIGxpbmUKKworCitjbGFzcyBDb21taXRTZXQob2JqZWN0KToKKyAgICAiIiJBIChjb25zdGFudCkgc2V0IG9mIG9iamVjdCBuYW1lcy4KKworICAgIFRoZSBzZXQgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggZnVsbCBTSEExIG9iamVjdCBuYW1lcy4gIFRoZQorICAgIF9fY29udGFpbnNfXygpIG1ldGhvZCByZXR1cm5zIFRydWUgaWZmIGl0cyBhcmd1bWVudCBpcyBhbgorICAgIGFiYnJldmlhdGlvbiBvZiBhbnkgdGhlIG5hbWVzIGluIHRoZSBzZXQuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZXMpOgorICAgICAgICBzZWxmLl9uYW1lcyA9IHNvcnRlZChuYW1lcykKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX25hbWVzKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBzaGExX2FiYnJldik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmZiB0aGlzIHNldCBjb250YWlucyBzaGExX2FiYnJldiAod2hpY2ggbWlnaHQgYmUgYWJicmV2aWF0ZWQpLiIiIgorCisgICAgICAgIGkgPSBiaXNlY3QuYmlzZWN0X2xlZnQoc2VsZi5fbmFtZXMsIHNoYTFfYWJicmV2KQorICAgICAgICByZXR1cm4gaSA8IGxlbihzZWxmKSBhbmQgc2VsZi5fbmFtZXNbaV0uc3RhcnRzd2l0aChzaGExX2FiYnJldikKKworCitjbGFzcyBHaXRPYmplY3Qob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2hhMSwgdHlwZT1Ob25lKToKKyAgICAgICAgaWYgc2hhMSA9PSBaRVJPUzoKKyAgICAgICAgICAgIHNlbGYuc2hhMSA9IHNlbGYudHlwZSA9IHNlbGYuY29tbWl0X3NoYTEgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNoYTEgPSBzaGExCisgICAgICAgICAgICBzZWxmLnR5cGUgPSB0eXBlIG9yIHJlYWRfZ2l0X291dHB1dChbJ2NhdC1maWxlJywgJy10Jywgc2VsZi5zaGExXSkKKworICAgICAgICAgICAgaWYgc2VsZi50eXBlID09ICdjb21taXQnOgorICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0X3NoYTEgPSBzZWxmLnNoYTEKKyAgICAgICAgICAgIGVsaWYgc2VsZi50eXBlID09ICd0YWcnOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfc2hhMSA9IHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIFsncmV2LXBhcnNlJywgJy0tdmVyaWZ5JywgJyVzXjAnICUgKHNlbGYuc2hhMSwpXQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgQ2Fubm90IGRlcmVmIHRhZyB0byBkZXRlcm1pbmUgY29tbWl0X3NoYTEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfc2hhMSA9IE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfc2hhMSA9IE5vbmUKKworICAgICAgICBzZWxmLnNob3J0ID0gcmVhZF9naXRfb3V0cHV0KFsncmV2LXBhcnNlJywgJy0tc2hvcnQnLCBzaGExXSkKKworICAgIGRlZiBnZXRfc3VtbWFyeShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIChzaGExX3Nob3J0LCBzdWJqZWN0KSBmb3IgdGhpcyBjb21taXQuIiIiCisKKyAgICAgICAgaWYgbm90IHNlbGYuc2hhMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VtcHR5IGNvbW1pdCBoYXMgbm8gc3VtbWFyeScpCisKKyAgICAgICAgcmV0dXJuIG5leHQoaXRlcihnZW5lcmF0ZV9zdW1tYXJpZXMoJy0tbm8td2FsaycsIHNlbGYuc2hhMSkpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKG90aGVyLCBHaXRPYmplY3QpIGFuZCBzZWxmLnNoYTEgPT0gb3RoZXIuc2hhMQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLnNoYTEpCisKKyAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgIHJldHVybiBib29sKHNlbGYuc2hhMSkKKworICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKKyAgICAgICAgIiIiUHl0aG9uIDIgYmFja3dhcmQgY29tcGF0aWJpbGl0eSIiIgorICAgICAgICByZXR1cm4gc2VsZi5fX25vbnplcm9fXygpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2hhMSBvciBaRVJPUworCisKK2NsYXNzIENoYW5nZShvYmplY3QpOgorICAgICIiIkEgQ2hhbmdlIHRoYXQgaGFzIGJlZW4gbWFkZSB0byB0aGUgR2l0IHJlcG9zaXRvcnkuCisKKyAgICBBYnN0cmFjdCBjbGFzcyBmcm9tIHdoaWNoIGJvdGggUmV2aXNpb25zIGFuZCBSZWZlcmVuY2VDaGFuZ2VzIGFyZQorICAgIGRlcml2ZWQuICBBIENoYW5nZSBrbm93cyBob3cgdG8gZ2VuZXJhdGUgYSBub3RpZmljYXRpb24gZW1haWwKKyAgICBkZXNjcmliaW5nIGl0c2VsZi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9ubWVudCk6CisgICAgICAgIHNlbGYuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLl92YWx1ZXMgPSBOb25lCisgICAgICAgIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZiA9IEZhbHNlCisKKyAgICBkZWYgX2NvbnRhaW5zX2RpZmYoc2VsZik6CisgICAgICAgICMgV2UgZG8gY29udGFpbiBhIGRpZmYsIHNob3VsZCBpdCBiZSByZW5kZXJlZCBpbiBIVE1MPworICAgICAgICBpZiBzZWxmLmVudmlyb25tZW50LmNvbW1pdF9lbWFpbF9mb3JtYXQgPT0gImh0bWwiOgorICAgICAgICAgICAgc2VsZi5fY29udGFpbnNfaHRtbF9kaWZmID0gVHJ1ZQorCisgICAgZGVmIF9jb21wdXRlX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgZGljdGlvbmFyeSB7a2V5d29yZDogZXhwYW5zaW9ufSBmb3IgdGhpcyBDaGFuZ2UuCisKKyAgICAgICAgRGVyaXZlZCBjbGFzc2VzIG92ZXJsb2FkIHRoaXMgbWV0aG9kIHRvIGFkZCBtb3JlIGVudHJpZXMgdG8KKyAgICAgICAgdGhlIHJldHVybiB2YWx1ZS4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW50ZXJuYWxseSBieQorICAgICAgICBnZXRfdmFsdWVzKCkuICBUaGUgcmV0dXJuIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgYSBuZXcKKyAgICAgICAgZGljdGlvbmFyeS4iIiIKKworICAgICAgICB2YWx1ZXMgPSBzZWxmLmVudmlyb25tZW50LmdldF92YWx1ZXMoKQorICAgICAgICBmcm9tYWRkciA9IHNlbGYuZW52aXJvbm1lbnQuZ2V0X2Zyb21hZGRyKGNoYW5nZT1zZWxmKQorICAgICAgICBpZiBmcm9tYWRkciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlc1snZnJvbWFkZHInXSA9IGZyb21hZGRyCisgICAgICAgIHZhbHVlc1snbXVsdGltYWlsX3ZlcnNpb24nXSA9IGdldF92ZXJzaW9uKCkKKyAgICAgICAgcmV0dXJuIHZhbHVlcworCisgICAgZGVmIGdldF92YWx1ZXMoc2VsZiwgKipleHRyYV92YWx1ZXMpOgorICAgICAgICAiIiJSZXR1cm4gYSBkaWN0aW9uYXJ5IHtrZXl3b3JkOiBleHBhbnNpb259IGZvciB0aGlzIENoYW5nZS4KKworICAgICAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IG1hcHBpbmcga2V5d29yZHMgdG8gdGhlIHZhbHVlcyB0aGF0IHRoZXkKKyAgICAgICAgc2hvdWxkIGJlIGV4cGFuZGVkIHRvIGZvciB0aGlzIENoYW5nZSAodXNlZCB3aGVuIGludGVycG9sYXRpbmcKKyAgICAgICAgdGVtcGxhdGUgc3RyaW5ncykuICBJZiBhbnkga2V5d29yZCBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLCBhZGQKKyAgICAgICAgdGhvc2UgdG8gdGhlIHJldHVybiB2YWx1ZSBhcyB3ZWxsLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbHdheXMKKyAgICAgICAgYSBuZXcgZGljdGlvbmFyeS4iIiIKKworICAgICAgICBpZiBzZWxmLl92YWx1ZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlcyA9IHNlbGYuX2NvbXB1dGVfdmFsdWVzKCkKKworICAgICAgICB2YWx1ZXMgPSBzZWxmLl92YWx1ZXMuY29weSgpCisgICAgICAgIGlmIGV4dHJhX3ZhbHVlczoKKyAgICAgICAgICAgIHZhbHVlcy51cGRhdGUoZXh0cmFfdmFsdWVzKQorICAgICAgICByZXR1cm4gdmFsdWVzCisKKyAgICBkZWYgZXhwYW5kKHNlbGYsIHRlbXBsYXRlLCAqKmV4dHJhX3ZhbHVlcyk6CisgICAgICAgICIiIkV4cGFuZCB0ZW1wbGF0ZS4KKworICAgICAgICBFeHBhbmQgdGhlIHRlbXBsYXRlICh3aGljaCBzaG91bGQgYmUgYSBzdHJpbmcpIHVzaW5nIHN0cmluZworICAgICAgICBpbnRlcnBvbGF0aW9uIG9mIHRoZSB2YWx1ZXMgZm9yIHRoaXMgQ2hhbmdlLiAgSWYgYW55IGtleXdvcmQKKyAgICAgICAgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgYWxzbyBpbmNsdWRlIHRob3NlIGluIHRoZSBrZXl3b3JkcworICAgICAgICBhdmFpbGFibGUgZm9yIGludGVycG9sYXRpb24uIiIiCisKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlICUgc2VsZi5nZXRfdmFsdWVzKCoqZXh0cmFfdmFsdWVzKQorCisgICAgZGVmIGV4cGFuZF9saW5lcyhzZWxmLCB0ZW1wbGF0ZSwgKipleHRyYV92YWx1ZXMpOgorICAgICAgICAiIiJCcmVhayB0ZW1wbGF0ZSBpbnRvIGxpbmVzIGFuZCBleHBhbmQgZWFjaCBsaW5lLiIiIgorCisgICAgICAgIHZhbHVlcyA9IHNlbGYuZ2V0X3ZhbHVlcygqKmV4dHJhX3ZhbHVlcykKKyAgICAgICAgZm9yIGxpbmUgaW4gdGVtcGxhdGUuc3BsaXRsaW5lcyhUcnVlKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUgJSB2YWx1ZXMKKworICAgIGRlZiBleHBhbmRfaGVhZGVyX2xpbmVzKHNlbGYsIHRlbXBsYXRlLCAqKmV4dHJhX3ZhbHVlcyk6CisgICAgICAgICIiIkJyZWFrIHRlbXBsYXRlIGludG8gbGluZXMgYW5kIGV4cGFuZCBlYWNoIGxpbmUgYXMgYW4gUkZDIDI4MjIgaGVhZGVyLgorCisgICAgICAgIEVuY29kZSB2YWx1ZXMgYW5kIHNwbGl0IHVwIGxpbmVzIHRoYXQgYXJlIHRvbyBsb25nLiAgU2lsZW50bHkKKyAgICAgICAgc2tpcCBsaW5lcyB0aGF0IGNvbnRhaW4gcmVmZXJlbmNlcyB0byB1bmtub3duIHZhcmlhYmxlcy4iIiIKKworICAgICAgICB2YWx1ZXMgPSBzZWxmLmdldF92YWx1ZXMoKipleHRyYV92YWx1ZXMpCisgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZjoKKyAgICAgICAgICAgIHZhbHVlc1snY29udGVudHR5cGUnXSA9ICdodG1sJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWVzWydjb250ZW50dHlwZSddID0gJ3BsYWluJworCisgICAgICAgIGZvciBsaW5lIGluIHRlbXBsYXRlLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIChuYW1lLCB2YWx1ZSkgPSBsaW5lLnNwbGl0KCc6ICcsIDEpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICUgdmFsdWVzCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgdCwgZSwgdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICBpZiBERUJVRzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnZpcm9ubWVudC5sb2dfd2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgICAgICdXYXJuaW5nOiB1bmtub3duIHZhcmlhYmxlICVyIGluIHRoZSBmb2xsb3dpbmcgbGluZTsgbGluZSBza2lwcGVkOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgJyAgICAlc1xuJworICAgICAgICAgICAgICAgICAgICAgICAgJSAoZS5hcmdzWzBdLCBsaW5lLCkKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbmFtZS5sb3dlcigpIGluIEFERFJfSEVBREVSUzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhZGRyX2hlYWRlcl9lbmNvZGUodmFsdWUsIG5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBoZWFkZXJfZW5jb2RlKHZhbHVlLCBuYW1lKQorICAgICAgICAgICAgICAgIGZvciBzcGxpdGxpbmUgaW4gKCclczogJXNcbicgJSAobmFtZSwgdmFsdWUpKS5zcGxpdGxpbmVzKFRydWUpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBzcGxpdGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9oZWFkZXIoc2VsZik6CisgICAgICAgICIiIkdlbmVyYXRlIHRoZSBSRkMgMjgyMiBlbWFpbCBoZWFkZXJzIGZvciB0aGlzIENoYW5nZSwgYSBsaW5lIGF0IGEgdGltZS4KKworICAgICAgICBUaGUgb3V0cHV0IHNob3VsZCBub3QgaW5jbHVkZSB0aGUgdHJhaWxpbmcgYmxhbmsgbGluZS4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9pbnRybyhzZWxmKToKKyAgICAgICAgIiIiR2VuZXJhdGUgdGhlIGVtYWlsIGludHJvIGZvciB0aGlzIENoYW5nZSwgYSBsaW5lIGF0IGEgdGltZS4KKworICAgICAgICBUaGUgb3V0cHV0IHdpbGwgYmUgdXNlZCBhcyB0aGUgc3RhbmRhcmQgYm9pbGVycGxhdGUgYXQgdGhlIHRvcAorICAgICAgICBvZiB0aGUgZW1haWwgYm9keS4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9ib2R5KHNlbGYpOgorICAgICAgICAiIiJHZW5lcmF0ZSB0aGUgbWFpbiBwYXJ0IG9mIHRoZSBlbWFpbCBib2R5LCBhIGxpbmUgYXQgYSB0aW1lLgorCisgICAgICAgIFRoZSB0ZXh0IGluIHRoZSBib2R5IG1pZ2h0IGJlIHRydW5jYXRlZCBhZnRlciBhIHNwZWNpZmllZAorICAgICAgICBudW1iZXIgb2YgbGluZXMgKHNlZSBtdWx0aW1haWxob29rLmVtYWlsbWF4bGluZXMpLiIiIgorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2Zvb3RlcihzZWxmKToKKyAgICAgICAgIiIiR2VuZXJhdGUgdGhlIGZvb3RlciBvZiB0aGUgZW1haWwsIGEgbGluZSBhdCBhIHRpbWUuCisKKyAgICAgICAgVGhlIGZvb3RlciBpcyBhbHdheXMgaW5jbHVkZWQsIGlycmVzcGVjdGl2ZSBvZgorICAgICAgICBtdWx0aW1haWxob29rLmVtYWlsbWF4bGluZXMuIiIiCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgX3dyYXBfZm9yX2h0bWwoc2VsZiwgbGluZXMpOgorICAgICAgICAiIiJXcmFwIHRoZSBsaW5lcyBpbiBIVE1MIDxwcmU+IHRhZyB3aGVuIHVzaW5nIEhUTUwgZm9ybWF0LgorCisgICAgICAgIEVzY2FwZSBzcGVjaWFsIEhUTUwgY2hhcmFjdGVycyBhbmQgYWRkIDxwcmU+IGFuZCA8L3ByZT4gdGFncyBhcm91bmQKKyAgICAgICAgdGhlIGdpdmVuIGxpbmVzIGlmIHdlIHNob3VsZCBiZSBnZW5lcmF0aW5nIEhUTUwgYXMgaW5kaWNhdGVkIGJ5CisgICAgICAgIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZiBiZWluZyBzZXQgdG8gdHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZjoKKyAgICAgICAgICAgIHlpZWxkICI8cHJlIHN0eWxlPSdtYXJnaW46MCc+XG4iCisKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIHlpZWxkIGNnaS5lc2NhcGUobGluZSkKKworICAgICAgICAgICAgeWllbGQgJzwvcHJlPlxuJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsKHNlbGYsIHB1c2gsIGJvZHlfZmlsdGVyPU5vbmUsIGV4dHJhX2hlYWRlcl92YWx1ZXM9e30pOgorICAgICAgICAiIiJHZW5lcmF0ZSBhbiBlbWFpbCBkZXNjcmliaW5nIHRoaXMgY2hhbmdlLgorCisgICAgICAgIEl0ZXJhdGUgb3ZlciB0aGUgbGluZXMgKGluY2x1ZGluZyB0aGUgaGVhZGVyIGxpbmVzKSBvZiBhbgorICAgICAgICBlbWFpbCBkZXNjcmliaW5nIHRoaXMgY2hhbmdlLiAgSWYgYm9keV9maWx0ZXIgaXMgbm90IE5vbmUsCisgICAgICAgIHRoZW4gdXNlIGl0IHRvIGZpbHRlciB0aGUgbGluZXMgdGhhdCBhcmUgaW50ZW5kZWQgZm9yIHRoZQorICAgICAgICBlbWFpbCBib2R5LgorCisgICAgICAgIFRoZSBleHRyYV9oZWFkZXJfdmFsdWVzIGZpZWxkIGlzIHJlY2VpdmVkIGFzIGEgZGljdCBhbmQgbm90IGFzCisgICAgICAgICoqa3dhcmdzLCB0byBhbGxvdyBwYXNzaW5nIG90aGVyIGtleXdvcmQgYXJndW1lbnRzIGluIHRoZQorICAgICAgICBmdXR1cmUgKGUuZy4gcGFzc2luZyBleHRyYSB2YWx1ZXMgdG8gZ2VuZXJhdGVfZW1haWxfaW50cm8oKSIiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfZW1haWxfaGVhZGVyKCoqZXh0cmFfaGVhZGVyX3ZhbHVlcyk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIHlpZWxkICdcbicKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fd3JhcF9mb3JfaHRtbChzZWxmLmdlbmVyYXRlX2VtYWlsX2ludHJvKCkpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgICAgIGJvZHkgPSBzZWxmLmdlbmVyYXRlX2VtYWlsX2JvZHkocHVzaCkKKyAgICAgICAgaWYgYm9keV9maWx0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBib2R5ID0gYm9keV9maWx0ZXIoYm9keSkKKworICAgICAgICBkaWZmX3N0YXJ0ZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9jb250YWluc19odG1sX2RpZmY6CisgICAgICAgICAgICAjICJ3aGl0ZS1zcGFjZTogcHJlIiBpcyB0aGUgZGVmYXVsdCwgYnV0IHdlIG5lZWQgdG8KKyAgICAgICAgICAgICMgc3BlY2lmeSBpdCBhZ2FpbiBpbiBjYXNlIHRoZSBtZXNzYWdlIGlzIHZpZXdlZCBpbiBhCisgICAgICAgICAgICAjIHdlYm1haWwgd2hpY2ggd3JhcHMgaXQgaW4gYW4gZWxlbWVudCBzZXR0aW5nIHdoaXRlLXNwYWNlCisgICAgICAgICAgICAjIHRvIHNvbWV0aGluZyBlbHNlIChaaW1icmEgZG9lcyB0aGlzIGFuZCBzZXRzCisgICAgICAgICAgICAjIHdoaXRlLXNwYWNlOiBwcmUtbGluZSkuCisgICAgICAgICAgICB5aWVsZCAnPHByZSBzdHlsZT0id2hpdGUtc3BhY2U6IHByZTsgYmFja2dyb3VuZDogI0Y4RjhGOCI+JworICAgICAgICBmb3IgbGluZSBpbiBib2R5OgorICAgICAgICAgICAgaWYgc2VsZi5fY29udGFpbnNfaHRtbF9kaWZmOgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyB2ZXJ5LCB2ZXJ5IG5haXZlLiBJdCB3b3VsZCBiZSBtdWNoIGJldHRlciB0byByZWFsbHkKKyAgICAgICAgICAgICAgICAjIHBhcnNlIHRoZSBkaWZmLCBpLmUuIGxvb2sgYXQgaG93IG1hbnkgbGluZXMgZG8gd2UgaGF2ZSBpbgorICAgICAgICAgICAgICAgICMgdGhlIGh1bmsgaGVhZGVycyBpbnN0ZWFkIG9mIGJsaW5kbHkgaGlnaGxpZ2h0aW5nIGV2ZXJ5dGhpbmcKKyAgICAgICAgICAgICAgICAjIHRoYXQgbG9va3MgbGlrZSBpdCBtaWdodCBiZSBwYXJ0IG9mIGEgZGlmZi4KKyAgICAgICAgICAgICAgICBiZ2NvbG9yID0gJycKKyAgICAgICAgICAgICAgICBmZ2NvbG9yID0gJycKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJy0tLSBhLycpOgorICAgICAgICAgICAgICAgICAgICBkaWZmX3N0YXJ0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAnZTBlMGZmJworICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdkaWZmICcpIG9yIGxpbmUuc3RhcnRzd2l0aCgnaW5kZXggJyk6CisgICAgICAgICAgICAgICAgICAgIGRpZmZfc3RhcnRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZmdjb2xvciA9ICc4MDgwODAnCisgICAgICAgICAgICAgICAgZWxpZiBkaWZmX3N0YXJ0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnKysrICcpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICdlMGUwZmYnCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdAQCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgYmdjb2xvciA9ICdlMGUwZTAnCisgICAgICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCcrJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBiZ2NvbG9yID0gJ2UwZmZlMCcKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lLnN0YXJ0c3dpdGgoJy0nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJnY29sb3IgPSAnZmZlMGUwJworICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCdjb21taXQgJyk6CisgICAgICAgICAgICAgICAgICAgIGZnY29sb3IgPSAnODA4MDAwJworICAgICAgICAgICAgICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCcgICAgJyk6CisgICAgICAgICAgICAgICAgICAgIGZnY29sb3IgPSAnNDA0MDQwJworCisgICAgICAgICAgICAgICAgIyBDaG9wIHRoZSB0cmFpbGluZyBMRiwgd2UgZG9uJ3Qgd2FudCBpdCBpbnNpZGUgPHByZT4uCisgICAgICAgICAgICAgICAgbGluZSA9IGNnaS5lc2NhcGUobGluZVs6LTFdKQorCisgICAgICAgICAgICAgICAgaWYgYmdjb2xvciBvciBmZ2NvbG9yOgorICAgICAgICAgICAgICAgICAgICBzdHlsZSA9ICdkaXNwbGF5OmJsb2NrOyB3aGl0ZS1zcGFjZTpwcmU7JworICAgICAgICAgICAgICAgICAgICBpZiBiZ2NvbG9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgKz0gJ2JhY2tncm91bmQ6IycgKyBiZ2NvbG9yICsgJzsnCisgICAgICAgICAgICAgICAgICAgIGlmIGZnY29sb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSArPSAnY29sb3I6IycgKyBmZ2NvbG9yICsgJzsnCisgICAgICAgICAgICAgICAgICAgICMgVXNlIGEgPHNwYW4gc3R5bGU9J2Rpc3BsYXk6YmxvY2s+IHRvIGNvbG9yIHRoZQorICAgICAgICAgICAgICAgICAgICAjIHdob2xlIGxpbmUuIFRoZSBuZXdsaW5lIG11c3QgYmUgaW5zaWRlIHRoZSBzcGFuCisgICAgICAgICAgICAgICAgICAgICMgdG8gZGlzcGxheSBwcm9wZXJseSBib3RoIGluIEZpcmVmb3ggYW5kIGluCisgICAgICAgICAgICAgICAgICAgICMgdGV4dC1iYXNlZCBicm93c2VyLgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gIjxzcGFuIHN0eWxlPSclcyc+JXNcbjwvc3Bhbj4iICUgKHN0eWxlLCBsaW5lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJ1xuJworCisgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIGlmIHNlbGYuX2NvbnRhaW5zX2h0bWxfZGlmZjoKKyAgICAgICAgICAgIHlpZWxkICc8L3ByZT4nCisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fd3JhcF9mb3JfaHRtbChzZWxmLmdlbmVyYXRlX2VtYWlsX2Zvb3RlcigpKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZXRfYWx0X2Zyb21hZGRyKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFJldmlzaW9uKENoYW5nZSk6CisgICAgIiIiQSBDaGFuZ2UgY29uc2lzdGluZyBvZiBhIHNpbmdsZSBnaXQgY29tbWl0LiIiIgorCisgICAgQ0NfUkUgPSByZS5jb21waWxlKHInXlxzKkNbQ2NdOlxzKig/UDx0bz5bXiNdK0BbXlxzI10qKVxzKigjLiopPyQnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlZmVyZW5jZV9jaGFuZ2UsIHJldiwgbnVtLCB0b3QpOgorICAgICAgICBDaGFuZ2UuX19pbml0X18oc2VsZiwgcmVmZXJlbmNlX2NoYW5nZS5lbnZpcm9ubWVudCkKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VfY2hhbmdlID0gcmVmZXJlbmNlX2NoYW5nZQorICAgICAgICBzZWxmLnJldiA9IHJldgorICAgICAgICBzZWxmLmNoYW5nZV90eXBlID0gc2VsZi5yZWZlcmVuY2VfY2hhbmdlLmNoYW5nZV90eXBlCisgICAgICAgIHNlbGYucmVmbmFtZSA9IHNlbGYucmVmZXJlbmNlX2NoYW5nZS5yZWZuYW1lCisgICAgICAgIHNlbGYubnVtID0gbnVtCisgICAgICAgIHNlbGYudG90ID0gdG90CisgICAgICAgIHNlbGYuYXV0aG9yID0gcmVhZF9naXRfb3V0cHV0KFsnbG9nJywgJy0tbm8td2FsaycsICctLWZvcm1hdD0lYU4gPCVhRT4nLCBzZWxmLnJldi5zaGExXSkKKyAgICAgICAgc2VsZi5yZWNpcGllbnRzID0gc2VsZi5lbnZpcm9ubWVudC5nZXRfcmV2aXNpb25fcmVjaXBpZW50cyhzZWxmKQorCisgICAgICAgIHNlbGYuY2NfcmVjaXBpZW50cyA9ICcnCisgICAgICAgIGlmIHNlbGYuZW52aXJvbm1lbnQuZ2V0X3NjYW5jb21taXRmb3JjYygpOgorICAgICAgICAgICAgc2VsZi5jY19yZWNpcGllbnRzID0gJywgJy5qb2luKHRvLnN0cmlwKCkgZm9yIHRvIGluIHNlbGYuX2NjX3JlY2lwaWVudHMoKSkKKyAgICAgICAgICAgIGlmIHNlbGYuY2NfcmVjaXBpZW50czoKKyAgICAgICAgICAgICAgICBzZWxmLmVudmlyb25tZW50LmxvZ19tc2coCisgICAgICAgICAgICAgICAgICAgICdBZGQgJXMgdG8gQ0MgZm9yICVzXG4nICUgKHNlbGYuY2NfcmVjaXBpZW50cywgc2VsZi5yZXYuc2hhMSkpCisKKyAgICBkZWYgX2NjX3JlY2lwaWVudHMoc2VsZik6CisgICAgICAgIGNjX3JlY2lwaWVudHMgPSBbXQorICAgICAgICBtZXNzYWdlID0gcmVhZF9naXRfb3V0cHV0KFsnbG9nJywgJy0tbm8td2FsaycsICctLWZvcm1hdD0lYicsIHNlbGYucmV2LnNoYTFdKQorICAgICAgICBsaW5lcyA9IG1lc3NhZ2Uuc3RyaXAoKS5zcGxpdCgnXG4nKQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIG0gPSByZS5tYXRjaChzZWxmLkNDX1JFLCBsaW5lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBjY19yZWNpcGllbnRzLmFwcGVuZChtLmdyb3VwKCd0bycpKQorCisgICAgICAgIHJldHVybiBjY19yZWNpcGllbnRzCisKKyAgICBkZWYgX2NvbXB1dGVfdmFsdWVzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBDaGFuZ2UuX2NvbXB1dGVfdmFsdWVzKHNlbGYpCisKKyAgICAgICAgb25lbGluZSA9IHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgIFsnbG9nJywgJy0tZm9ybWF0PSVzJywgJy0tbm8td2FsaycsIHNlbGYucmV2LnNoYTFdCisgICAgICAgICAgICApCisKKyAgICAgICAgdmFsdWVzWydyZXYnXSA9IHNlbGYucmV2LnNoYTEKKyAgICAgICAgdmFsdWVzWydyZXZfc2hvcnQnXSA9IHNlbGYucmV2LnNob3J0CisgICAgICAgIHZhbHVlc1snY2hhbmdlX3R5cGUnXSA9IHNlbGYuY2hhbmdlX3R5cGUKKyAgICAgICAgdmFsdWVzWydyZWZuYW1lJ10gPSBzZWxmLnJlZm5hbWUKKyAgICAgICAgdmFsdWVzWydzaG9ydF9yZWZuYW1lJ10gPSBzZWxmLnJlZmVyZW5jZV9jaGFuZ2Uuc2hvcnRfcmVmbmFtZQorICAgICAgICB2YWx1ZXNbJ3JlZm5hbWVfdHlwZSddID0gc2VsZi5yZWZlcmVuY2VfY2hhbmdlLnJlZm5hbWVfdHlwZQorICAgICAgICB2YWx1ZXNbJ3JlcGx5X3RvX21zZ2lkJ10gPSBzZWxmLnJlZmVyZW5jZV9jaGFuZ2UubXNnaWQKKyAgICAgICAgdmFsdWVzWydudW0nXSA9IHNlbGYubnVtCisgICAgICAgIHZhbHVlc1sndG90J10gPSBzZWxmLnRvdAorICAgICAgICB2YWx1ZXNbJ3JlY2lwaWVudHMnXSA9IHNlbGYucmVjaXBpZW50cworICAgICAgICBpZiBzZWxmLmNjX3JlY2lwaWVudHM6CisgICAgICAgICAgICB2YWx1ZXNbJ2NjX3JlY2lwaWVudHMnXSA9IHNlbGYuY2NfcmVjaXBpZW50cworICAgICAgICB2YWx1ZXNbJ29uZWxpbmUnXSA9IG9uZWxpbmUKKyAgICAgICAgdmFsdWVzWydhdXRob3InXSA9IHNlbGYuYXV0aG9yCisKKyAgICAgICAgcmVwbHlfdG8gPSBzZWxmLmVudmlyb25tZW50LmdldF9yZXBseV90b19jb21taXQoc2VsZikKKyAgICAgICAgaWYgcmVwbHlfdG86CisgICAgICAgICAgICB2YWx1ZXNbJ3JlcGx5X3RvJ10gPSByZXBseV90bworCisgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9oZWFkZXIoc2VsZiwgKipleHRyYV92YWx1ZXMpOgorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9oZWFkZXJfbGluZXMoCisgICAgICAgICAgICAgICAgUkVWSVNJT05fSEVBREVSX1RFTVBMQVRFLCAqKmV4dHJhX3ZhbHVlcworICAgICAgICAgICAgICAgICk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWxfaW50cm8oc2VsZik6CisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKFJFVklTSU9OX0lOVFJPX1RFTVBMQVRFKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9ib2R5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJTaG93IHRoaXMgcmV2aXNpb24uIiIiCisKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9naXRfbGluZXMoCisgICAgICAgICAgICAgICAgWydsb2cnXSArIHNlbGYuZW52aXJvbm1lbnQuY29tbWl0bG9nb3B0cyArIFsnLTEnLCBzZWxmLnJldi5zaGExXSwKKyAgICAgICAgICAgICAgICBrZWVwZW5kcz1UcnVlLAorICAgICAgICAgICAgICAgICk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RhdGU6ICAgJykgYW5kIHNlbGYuZW52aXJvbm1lbnQuZGF0ZV9zdWJzdGl0dXRlOgorICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuZW52aXJvbm1lbnQuZGF0ZV9zdWJzdGl0dXRlICsgbGluZVtsZW4oJ0RhdGU6ICAgJyk6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWxfZm9vdGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5leHBhbmRfbGluZXMoUkVWSVNJT05fRk9PVEVSX1RFTVBMQVRFKQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsKHNlbGYsIHB1c2gsIGJvZHlfZmlsdGVyPU5vbmUsIGV4dHJhX2hlYWRlcl92YWx1ZXM9e30pOgorICAgICAgICBzZWxmLl9jb250YWluc19kaWZmKCkKKyAgICAgICAgcmV0dXJuIENoYW5nZS5nZW5lcmF0ZV9lbWFpbChzZWxmLCBwdXNoLCBib2R5X2ZpbHRlciwgZXh0cmFfaGVhZGVyX3ZhbHVlcykKKworICAgIGRlZiBnZXRfYWx0X2Zyb21hZGRyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lbnZpcm9ubWVudC5mcm9tX2NvbW1pdAorCisKK2NsYXNzIFJlZmVyZW5jZUNoYW5nZShDaGFuZ2UpOgorICAgICIiIkEgQ2hhbmdlIHRvIGEgR2l0IHJlZmVyZW5jZS4KKworICAgIEFuIGFic3RyYWN0IGNsYXNzIHJlcHJlc2VudGluZyBhIGNyZWF0ZSwgdXBkYXRlLCBvciBkZWxldGUgb2YgYQorICAgIEdpdCByZWZlcmVuY2UuICBEZXJpdmVkIGNsYXNzZXMgaGFuZGxlIHNwZWNpZmljIHR5cGVzIG9mIHJlZmVyZW5jZQorICAgIChlLmcuLCB0YWdzIHZzLiBicmFuY2hlcykuICBUaGVzZSBjbGFzc2VzIGdlbmVyYXRlIHRoZSBtYWluCisgICAgcmVmZXJlbmNlIGNoYW5nZSBlbWFpbCBzdW1tYXJpemluZyB0aGUgcmVmZXJlbmNlIGNoYW5nZSBhbmQKKyAgICB3aGV0aGVyIGl0IGNhdXNlZCBhbnkgYW55IGNvbW1pdHMgdG8gYmUgYWRkZWQgb3IgcmVtb3ZlZC4KKworICAgIFJlZmVyZW5jZUNoYW5nZSBvYmplY3RzIGFyZSB1c3VhbGx5IGNyZWF0ZWQgdXNpbmcgdGhlIHN0YXRpYworICAgIGNyZWF0ZSgpIG1ldGhvZCwgd2hpY2ggaGFzIHRoZSBsb2dpYyB0byBkZWNpZGUgd2hpY2ggZGVyaXZlZCBjbGFzcworICAgIHRvIGluc3RhbnRpYXRlLiIiIgorCisgICAgUkVGX1JFID0gcmUuY29tcGlsZShyJ15yZWZzXC8oP1A8YXJlYT5bXlwvXSspXC8oP1A8c2hvcnRuYW1lPi4qKSQnKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcmVhdGUoZW52aXJvbm1lbnQsIG9sZHJldiwgbmV3cmV2LCByZWZuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgUmVmZXJlbmNlQ2hhbmdlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNoYW5nZS4KKworICAgICAgICBSZXR1cm4gYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGUgdHlwZSBvZiBjaGFuZ2UgdGhhdCBpcyBiZWluZworICAgICAgICBtYWRlLiBvbGRyZXYgYW5kIG5ld3JldiBzaG91bGQgYmUgU0hBMXMgb3IgWkVST1MuIiIiCisKKyAgICAgICAgb2xkID0gR2l0T2JqZWN0KG9sZHJldikKKyAgICAgICAgbmV3ID0gR2l0T2JqZWN0KG5ld3JldikKKyAgICAgICAgcmV2ID0gbmV3IG9yIG9sZAorCisgICAgICAgICMgVGhlIHJldmlzaW9uIHR5cGUgdGVsbHMgdXMgd2hhdCB0eXBlIHRoZSBjb21taXQgaXMsIGNvbWJpbmVkIHdpdGgKKyAgICAgICAgIyB0aGUgbG9jYXRpb24gb2YgdGhlIHJlZiB3ZSBjYW4gZGVjaWRlIGJldHdlZW4KKyAgICAgICAgIyAgLSB3b3JraW5nIGJyYW5jaAorICAgICAgICAjICAtIHRyYWNraW5nIGJyYW5jaAorICAgICAgICAjICAtIHVuYW5ub3RhdGVkIHRhZworICAgICAgICAjICAtIGFubm90YXRlZCB0YWcKKyAgICAgICAgbSA9IFJlZmVyZW5jZUNoYW5nZS5SRUZfUkUubWF0Y2gocmVmbmFtZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIGFyZWEgPSBtLmdyb3VwKCdhcmVhJykKKyAgICAgICAgICAgIHNob3J0X3JlZm5hbWUgPSBtLmdyb3VwKCdzaG9ydG5hbWUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJlYSA9ICcnCisgICAgICAgICAgICBzaG9ydF9yZWZuYW1lID0gcmVmbmFtZQorCisgICAgICAgIGlmIHJldi50eXBlID09ICd0YWcnOgorICAgICAgICAgICAgIyBBbm5vdGF0ZWQgdGFnOgorICAgICAgICAgICAga2xhc3MgPSBBbm5vdGF0ZWRUYWdDaGFuZ2UKKyAgICAgICAgZWxpZiByZXYudHlwZSA9PSAnY29tbWl0JzoKKyAgICAgICAgICAgIGlmIGFyZWEgPT0gJ3RhZ3MnOgorICAgICAgICAgICAgICAgICMgTm9uLWFubm90YXRlZCB0YWc6CisgICAgICAgICAgICAgICAga2xhc3MgPSBOb25Bbm5vdGF0ZWRUYWdDaGFuZ2UKKyAgICAgICAgICAgIGVsaWYgYXJlYSA9PSAnaGVhZHMnOgorICAgICAgICAgICAgICAgICMgQnJhbmNoOgorICAgICAgICAgICAgICAgIGtsYXNzID0gQnJhbmNoQ2hhbmdlCisgICAgICAgICAgICBlbGlmIGFyZWEgPT0gJ3JlbW90ZXMnOgorICAgICAgICAgICAgICAgICMgVHJhY2tpbmcgYnJhbmNoOgorICAgICAgICAgICAgICAgIGVudmlyb25tZW50LmxvZ193YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICAnKioqIFB1c2gtdXBkYXRlIG9mIHRyYWNraW5nIGJyYW5jaCAlclxuJworICAgICAgICAgICAgICAgICAgICAnKioqICAtIGluY29tcGxldGUgZW1haWwgZ2VuZXJhdGVkLlxuJworICAgICAgICAgICAgICAgICAgICAlIChyZWZuYW1lLCkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGtsYXNzID0gT3RoZXJSZWZlcmVuY2VDaGFuZ2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBTb21lIG90aGVyIHJlZmVyZW5jZSBuYW1lc3BhY2U6CisgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQubG9nX3dhcm5pbmcoCisgICAgICAgICAgICAgICAgICAgICcqKiogUHVzaC11cGRhdGUgb2Ygc3RyYW5nZSByZWZlcmVuY2UgJXJcbicKKyAgICAgICAgICAgICAgICAgICAgJyoqKiAgLSBpbmNvbXBsZXRlIGVtYWlsIGdlbmVyYXRlZC5cbicKKyAgICAgICAgICAgICAgICAgICAgJSAocmVmbmFtZSwpCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBrbGFzcyA9IE90aGVyUmVmZXJlbmNlQ2hhbmdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEFueXRoaW5nIGVsc2UgKGlzIHRoZXJlIGFueXRoaW5nIGVsc2U/KQorICAgICAgICAgICAgZW52aXJvbm1lbnQubG9nX3dhcm5pbmcoCisgICAgICAgICAgICAgICAgJyoqKiBVbmtub3duIHR5cGUgb2YgdXBkYXRlIHRvICVyICglcylcbicKKyAgICAgICAgICAgICAgICAnKioqICAtIGluY29tcGxldGUgZW1haWwgZ2VuZXJhdGVkLlxuJworICAgICAgICAgICAgICAgICUgKHJlZm5hbWUsIHJldi50eXBlLCkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBrbGFzcyA9IE90aGVyUmVmZXJlbmNlQ2hhbmdlCisKKyAgICAgICAgcmV0dXJuIGtsYXNzKAorICAgICAgICAgICAgZW52aXJvbm1lbnQsCisgICAgICAgICAgICByZWZuYW1lPXJlZm5hbWUsIHNob3J0X3JlZm5hbWU9c2hvcnRfcmVmbmFtZSwKKyAgICAgICAgICAgIG9sZD1vbGQsIG5ldz1uZXcsIHJldj1yZXYsCisgICAgICAgICAgICApCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQsIHJlZm5hbWUsIHNob3J0X3JlZm5hbWUsIG9sZCwgbmV3LCByZXYpOgorICAgICAgICBDaGFuZ2UuX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQpCisgICAgICAgIHNlbGYuY2hhbmdlX3R5cGUgPSB7CisgICAgICAgICAgICAoRmFsc2UsIFRydWUpOiAnY3JlYXRlJywKKyAgICAgICAgICAgIChUcnVlLCBUcnVlKTogJ3VwZGF0ZScsCisgICAgICAgICAgICAoVHJ1ZSwgRmFsc2UpOiAnZGVsZXRlJywKKyAgICAgICAgICAgIH1bYm9vbChvbGQpLCBib29sKG5ldyldCisgICAgICAgIHNlbGYucmVmbmFtZSA9IHJlZm5hbWUKKyAgICAgICAgc2VsZi5zaG9ydF9yZWZuYW1lID0gc2hvcnRfcmVmbmFtZQorICAgICAgICBzZWxmLm9sZCA9IG9sZAorICAgICAgICBzZWxmLm5ldyA9IG5ldworICAgICAgICBzZWxmLnJldiA9IHJldgorICAgICAgICBzZWxmLm1zZ2lkID0gbWFrZV9tc2dpZCgpCisgICAgICAgIHNlbGYuZGlmZm9wdHMgPSBlbnZpcm9ubWVudC5kaWZmb3B0cworICAgICAgICBzZWxmLmdyYXBob3B0cyA9IGVudmlyb25tZW50LmdyYXBob3B0cworICAgICAgICBzZWxmLmxvZ29wdHMgPSBlbnZpcm9ubWVudC5sb2dvcHRzCisgICAgICAgIHNlbGYuY29tbWl0bG9nb3B0cyA9IGVudmlyb25tZW50LmNvbW1pdGxvZ29wdHMKKyAgICAgICAgc2VsZi5zaG93Z3JhcGggPSBlbnZpcm9ubWVudC5yZWZjaGFuZ2Vfc2hvd2dyYXBoCisgICAgICAgIHNlbGYuc2hvd2xvZyA9IGVudmlyb25tZW50LnJlZmNoYW5nZV9zaG93bG9nCisKKyAgICAgICAgc2VsZi5oZWFkZXJfdGVtcGxhdGUgPSBSRUZDSEFOR0VfSEVBREVSX1RFTVBMQVRFCisgICAgICAgIHNlbGYuaW50cm9fdGVtcGxhdGUgPSBSRUZDSEFOR0VfSU5UUk9fVEVNUExBVEUKKyAgICAgICAgc2VsZi5mb290ZXJfdGVtcGxhdGUgPSBGT09URVJfVEVNUExBVEUKKworICAgIGRlZiBfY29tcHV0ZV92YWx1ZXMoc2VsZik6CisgICAgICAgIHZhbHVlcyA9IENoYW5nZS5fY29tcHV0ZV92YWx1ZXMoc2VsZikKKworICAgICAgICB2YWx1ZXNbJ2NoYW5nZV90eXBlJ10gPSBzZWxmLmNoYW5nZV90eXBlCisgICAgICAgIHZhbHVlc1sncmVmbmFtZV90eXBlJ10gPSBzZWxmLnJlZm5hbWVfdHlwZQorICAgICAgICB2YWx1ZXNbJ3JlZm5hbWUnXSA9IHNlbGYucmVmbmFtZQorICAgICAgICB2YWx1ZXNbJ3Nob3J0X3JlZm5hbWUnXSA9IHNlbGYuc2hvcnRfcmVmbmFtZQorICAgICAgICB2YWx1ZXNbJ21zZ2lkJ10gPSBzZWxmLm1zZ2lkCisgICAgICAgIHZhbHVlc1sncmVjaXBpZW50cyddID0gc2VsZi5yZWNpcGllbnRzCisgICAgICAgIHZhbHVlc1snb2xkcmV2J10gPSBzdHIoc2VsZi5vbGQpCisgICAgICAgIHZhbHVlc1snb2xkcmV2X3Nob3J0J10gPSBzZWxmLm9sZC5zaG9ydAorICAgICAgICB2YWx1ZXNbJ25ld3JldiddID0gc3RyKHNlbGYubmV3KQorICAgICAgICB2YWx1ZXNbJ25ld3Jldl9zaG9ydCddID0gc2VsZi5uZXcuc2hvcnQKKworICAgICAgICBpZiBzZWxmLm9sZDoKKyAgICAgICAgICAgIHZhbHVlc1snb2xkcmV2X3R5cGUnXSA9IHNlbGYub2xkLnR5cGUKKyAgICAgICAgaWYgc2VsZi5uZXc6CisgICAgICAgICAgICB2YWx1ZXNbJ25ld3Jldl90eXBlJ10gPSBzZWxmLm5ldy50eXBlCisKKyAgICAgICAgcmVwbHlfdG8gPSBzZWxmLmVudmlyb25tZW50LmdldF9yZXBseV90b19yZWZjaGFuZ2Uoc2VsZikKKyAgICAgICAgaWYgcmVwbHlfdG86CisgICAgICAgICAgICB2YWx1ZXNbJ3JlcGx5X3RvJ10gPSByZXBseV90bworCisgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgIGRlZiBzZW5kX3NpbmdsZV9jb21iaW5lZF9lbWFpbChzZWxmLCBrbm93bl9hZGRlZF9zaGExcyk6CisgICAgICAgICIiIkRldGVybWluZSBpZiBhIGNvbWJpbmVkIHJlZmNoYW5nZS9yZXZpc2lvbiBlbWFpbCBzaG91bGQgYmUgc2VudAorCisgICAgICAgIElmIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgbmV3IChub24tbWVyZ2UpIGNvbW1pdCBhZGRlZCBieSBhCisgICAgICAgIGNoYW5nZSwgaXQgaXMgdXNlZnVsIHRvIGNvbWJpbmUgdGhlIFJlZmVyZW5jZUNoYW5nZSBhbmQKKyAgICAgICAgUmV2aXNpb24gZW1haWxzIGludG8gb25lLiAgSW4gc3VjaCBhIGNhc2UsIHJldHVybiB0aGUgc2luZ2xlCisgICAgICAgIHJldmlzaW9uOyBvdGhlcndpc2UsIHJldHVybiBOb25lLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gaW4gQnJhbmNoQ2hhbmdlLiIiIgorCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2VuZXJhdGVfY29tYmluZWRfZW1haWwoc2VsZiwgcHVzaCwgcmV2aXNpb24sIGJvZHlfZmlsdGVyPU5vbmUsIGV4dHJhX2hlYWRlcl92YWx1ZXM9e30pOgorICAgICAgICAiIiJHZW5lcmF0ZSBhbiBlbWFpbCBkZXNjcmliaW5nIHRoaXMgY2hhbmdlIEFORCBzcGVjaWZpZWQgcmV2aXNpb24uCisKKyAgICAgICAgSXRlcmF0ZSBvdmVyIHRoZSBsaW5lcyAoaW5jbHVkaW5nIHRoZSBoZWFkZXIgbGluZXMpIG9mIGFuCisgICAgICAgIGVtYWlsIGRlc2NyaWJpbmcgdGhpcyBjaGFuZ2UuICBJZiBib2R5X2ZpbHRlciBpcyBub3QgTm9uZSwKKyAgICAgICAgdGhlbiB1c2UgaXQgdG8gZmlsdGVyIHRoZSBsaW5lcyB0aGF0IGFyZSBpbnRlbmRlZCBmb3IgdGhlCisgICAgICAgIGVtYWlsIGJvZHkuCisKKyAgICAgICAgVGhlIGV4dHJhX2hlYWRlcl92YWx1ZXMgZmllbGQgaXMgcmVjZWl2ZWQgYXMgYSBkaWN0IGFuZCBub3QgYXMKKyAgICAgICAgKiprd2FyZ3MsIHRvIGFsbG93IHBhc3Npbmcgb3RoZXIga2V5d29yZCBhcmd1bWVudHMgaW4gdGhlCisgICAgICAgIGZ1dHVyZSAoZS5nLiBwYXNzaW5nIGV4dHJhIHZhbHVlcyB0byBnZW5lcmF0ZV9lbWFpbF9pbnRybygpCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBpbiBCcmFuY2hDaGFuZ2UuIiIiCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldF9zdWJqZWN0KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHsKKyAgICAgICAgICAgICdjcmVhdGUnOiBSRUZfQ1JFQVRFRF9TVUJKRUNUX1RFTVBMQVRFLAorICAgICAgICAgICAgJ3VwZGF0ZSc6IFJFRl9VUERBVEVEX1NVQkpFQ1RfVEVNUExBVEUsCisgICAgICAgICAgICAnZGVsZXRlJzogUkVGX0RFTEVURURfU1VCSkVDVF9URU1QTEFURSwKKyAgICAgICAgICAgIH1bc2VsZi5jaGFuZ2VfdHlwZV0KKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kKHRlbXBsYXRlKQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2hlYWRlcihzZWxmLCAqKmV4dHJhX3ZhbHVlcyk6CisgICAgICAgIGlmICdzdWJqZWN0JyBub3QgaW4gZXh0cmFfdmFsdWVzOgorICAgICAgICAgICAgZXh0cmFfdmFsdWVzWydzdWJqZWN0J10gPSBzZWxmLmdldF9zdWJqZWN0KCkKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9oZWFkZXJfbGluZXMoCisgICAgICAgICAgICAgICAgc2VsZi5oZWFkZXJfdGVtcGxhdGUsICoqZXh0cmFfdmFsdWVzCisgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9lbWFpbF9pbnRybyhzZWxmKToKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoc2VsZi5pbnRyb190ZW1wbGF0ZSk6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfZW1haWxfYm9keShzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiQ2FsbCB0aGUgYXBwcm9wcmlhdGUgYm9keS1nZW5lcmF0aW9uIHJvdXRpbmUuCisKKyAgICAgICAgQ2FsbCBvbmUgb2YgZ2VuZXJhdGVfY3JlYXRlX3N1bW1hcnkoKSAvCisgICAgICAgIGdlbmVyYXRlX3VwZGF0ZV9zdW1tYXJ5KCkgLyBnZW5lcmF0ZV9kZWxldGVfc3VtbWFyeSgpLiIiIgorCisgICAgICAgIGNoYW5nZV9zdW1tYXJ5ID0geworICAgICAgICAgICAgJ2NyZWF0ZSc6IHNlbGYuZ2VuZXJhdGVfY3JlYXRlX3N1bW1hcnksCisgICAgICAgICAgICAnZGVsZXRlJzogc2VsZi5nZW5lcmF0ZV9kZWxldGVfc3VtbWFyeSwKKyAgICAgICAgICAgICd1cGRhdGUnOiBzZWxmLmdlbmVyYXRlX3VwZGF0ZV9zdW1tYXJ5LAorICAgICAgICAgICAgfVtzZWxmLmNoYW5nZV90eXBlXShwdXNoKQorICAgICAgICBmb3IgbGluZSBpbiBjaGFuZ2Vfc3VtbWFyeToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmdlbmVyYXRlX3JldmlzaW9uX2NoYW5nZV9zdW1tYXJ5KHB1c2gpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2Zvb3RlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXhwYW5kX2xpbmVzKHNlbGYuZm9vdGVyX3RlbXBsYXRlKQorCisgICAgZGVmIGdlbmVyYXRlX3JldmlzaW9uX2NoYW5nZV9ncmFwaChzZWxmLCBwdXNoKToKKyAgICAgICAgaWYgc2VsZi5zaG93Z3JhcGg6CisgICAgICAgICAgICBhcmdzID0gWyctLWdyYXBoJ10gKyBzZWxmLmdyYXBob3B0cworICAgICAgICAgICAgZm9yIG5ld29sZCBpbiAoJ25ldycsICdvbGQnKToKKyAgICAgICAgICAgICAgICBoYXNfbmV3b2xkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzcGVjID0gcHVzaC5nZXRfY29tbWl0c19zcGVjKG5ld29sZCwgc2VsZikKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBnaXRfbG9nKHNwZWMsIGFyZ3M9YXJncywga2VlcGVuZHM9VHJ1ZSk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNfbmV3b2xkOgorICAgICAgICAgICAgICAgICAgICAgICAgaGFzX25ld29sZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkICdHcmFwaCBvZiAlcyBjb21taXRzOlxuXG4nICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnbmV3JzogJ25ldycsICdvbGQnOiAnZGlzY2FyZGVkJ31bbmV3b2xkXSwpCisgICAgICAgICAgICAgICAgICAgIHlpZWxkICcgICcgKyBsaW5lCisgICAgICAgICAgICAgICAgaWYgaGFzX25ld29sZDoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgJ1xuJworCisgICAgZGVmIGdlbmVyYXRlX3JldmlzaW9uX2NoYW5nZV9sb2coc2VsZiwgbmV3X2NvbW1pdHNfbGlzdCk6CisgICAgICAgIGlmIHNlbGYuc2hvd2xvZzoKKyAgICAgICAgICAgIHlpZWxkICdcbicKKyAgICAgICAgICAgIHlpZWxkICdEZXRhaWxlZCBsb2cgb2YgbmV3IGNvbW1pdHM6XG5cbicKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHJlYWRfZ2l0X2xpbmVzKAorICAgICAgICAgICAgICAgICAgICBbJ2xvZycsICctLW5vLXdhbGsnXSArCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nb3B0cyArCisgICAgICAgICAgICAgICAgICAgIG5ld19jb21taXRzX2xpc3QgKworICAgICAgICAgICAgICAgICAgICBbJy0tJ10sCisgICAgICAgICAgICAgICAgICAgIGtlZXBlbmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICk6CisgICAgICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX25ld19yZXZpc2lvbl9zdW1tYXJ5KHNlbGYsIHRvdCwgbmV3X2NvbW1pdHNfbGlzdCwgcHVzaCk6CisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKE5FV19SRVZJU0lPTlNfVEVNUExBVEUsIHRvdD10b3QpOgorICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmdlbmVyYXRlX3JldmlzaW9uX2NoYW5nZV9ncmFwaChwdXNoKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5nZW5lcmF0ZV9yZXZpc2lvbl9jaGFuZ2VfbG9nKG5ld19jb21taXRzX2xpc3QpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX3JldmlzaW9uX2NoYW5nZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJHZW5lcmF0ZSBhIHN1bW1hcnkgb2YgdGhlIHJldmlzaW9ucyBhZGRlZC9yZW1vdmVkIGJ5IHRoaXMgY2hhbmdlLiIiIgorCisgICAgICAgIGlmIHNlbGYubmV3LmNvbW1pdF9zaGExIGFuZCBub3Qgc2VsZi5vbGQuY29tbWl0X3NoYTE6CisgICAgICAgICAgICAjIEEgbmV3IHJlZmVyZW5jZSB3YXMgY3JlYXRlZC4gIExpc3QgdGhlIG5ldyByZXZpc2lvbnMKKyAgICAgICAgICAgICMgYnJvdWdodCBieSB0aGUgbmV3IHJlZmVyZW5jZSAoaS5lLiwgdGhvc2UgcmV2aXNpb25zIHRoYXQKKyAgICAgICAgICAgICMgd2VyZSBub3QgaW4gdGhlIHJlcG9zaXRvcnkgYmVmb3JlIHRoaXMgcmVmZXJlbmNlCisgICAgICAgICAgICAjIGNoYW5nZSkuCisgICAgICAgICAgICBzaGExcyA9IGxpc3QocHVzaC5nZXRfbmV3X2NvbW1pdHMoc2VsZikpCisgICAgICAgICAgICBzaGExcy5yZXZlcnNlKCkKKyAgICAgICAgICAgIHRvdCA9IGxlbihzaGExcykKKyAgICAgICAgICAgIG5ld19yZXZpc2lvbnMgPSBbCisgICAgICAgICAgICAgICAgUmV2aXNpb24oc2VsZiwgR2l0T2JqZWN0KHNoYTEpLCBudW09aSArIDEsIHRvdD10b3QpCisgICAgICAgICAgICAgICAgZm9yIChpLCBzaGExKSBpbiBlbnVtZXJhdGUoc2hhMXMpCisgICAgICAgICAgICAgICAgXQorCisgICAgICAgICAgICBpZiBuZXdfcmV2aXNpb25zOgorICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuZXhwYW5kKCdUaGlzICUocmVmbmFtZV90eXBlKXMgaW5jbHVkZXMgdGhlIGZvbGxvd2luZyBuZXcgY29tbWl0czpcbicpCisgICAgICAgICAgICAgICAgeWllbGQgJ1xuJworICAgICAgICAgICAgICAgIGZvciByIGluIG5ld19yZXZpc2lvbnM6CisgICAgICAgICAgICAgICAgICAgIChzaGExLCBzdWJqZWN0KSA9IHIucmV2LmdldF9zdW1tYXJ5KCkKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgci5leHBhbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBCUklFRl9TVU1NQVJZX1RFTVBMQVRFLCBhY3Rpb249J25ldycsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB5aWVsZCAnXG4nCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5nZW5lcmF0ZV9uZXdfcmV2aXNpb25fc3VtbWFyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvdCwgW3IucmV2LnNoYTEgZm9yIHIgaW4gbmV3X3JldmlzaW9uc10sIHB1c2gpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKE5PX05FV19SRVZJU0lPTlNfVEVNUExBVEUpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgZWxpZiBzZWxmLm5ldy5jb21taXRfc2hhMSBhbmQgc2VsZi5vbGQuY29tbWl0X3NoYTE6CisgICAgICAgICAgICAjIEEgcmVmZXJlbmNlIHdhcyBjaGFuZ2VkIHRvIHBvaW50IGF0IGEgZGlmZmVyZW50IGNvbW1pdC4KKyAgICAgICAgICAgICMgTGlzdCB0aGUgcmV2aXNpb25zIHRoYXQgd2VyZSByZW1vdmVkIGFuZC9vciBhZGRlZCAqZnJvbQorICAgICAgICAgICAgIyB0aGF0IHJlZmVyZW5jZSogYnkgdGhpcyByZWZlcmVuY2UgY2hhbmdlLCBhbG9uZyB3aXRoIGEKKyAgICAgICAgICAgICMgZGlmZiBiZXR3ZWVuIHRoZSB0cmVlcyBmb3IgaXRzIG9sZCBhbmQgbmV3IHZhbHVlcy4KKworICAgICAgICAgICAgIyBMaXN0IG9mIHRoZSByZXZpc2lvbnMgdGhhdCB3ZXJlIGFkZGVkIHRvIHRoZSBicmFuY2ggYnkKKyAgICAgICAgICAgICMgdGhpcyB1cGRhdGUuICBOb3RlIHRoaXMgbGlzdCBjYW4gaW5jbHVkZSByZXZpc2lvbnMgdGhhdAorICAgICAgICAgICAgIyBoYXZlIGFscmVhZHkgaGFkIG5vdGlmaWNhdGlvbiBlbWFpbHM7IHdlIHdhbnQgc3VjaAorICAgICAgICAgICAgIyByZXZpc2lvbnMgaW4gdGhlIHN1bW1hcnkgZXZlbiB0aG91Z2ggd2Ugd2lsbCBub3Qgc2VuZAorICAgICAgICAgICAgIyBuZXcgbm90aWZpY2F0aW9uIGVtYWlscyBmb3IgdGhlbS4KKyAgICAgICAgICAgIGFkZHMgPSBsaXN0KGdlbmVyYXRlX3N1bW1hcmllcygKKyAgICAgICAgICAgICAgICAnLS10b3BvLW9yZGVyJywgJy0tcmV2ZXJzZScsICclcy4uJXMnCisgICAgICAgICAgICAgICAgJSAoc2VsZi5vbGQuY29tbWl0X3NoYTEsIHNlbGYubmV3LmNvbW1pdF9zaGExLCkKKyAgICAgICAgICAgICAgICApKQorCisgICAgICAgICAgICAjIExpc3Qgb2YgdGhlIHJldmlzaW9ucyB0aGF0IHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBicmFuY2gKKyAgICAgICAgICAgICMgYnkgdGhpcyB1cGRhdGUuICBUaGlzIHdpbGwgYmUgZW1wdHkgZXhjZXB0IGZvcgorICAgICAgICAgICAgIyBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMuCisgICAgICAgICAgICBkaXNjYXJkcyA9IGxpc3QoZ2VuZXJhdGVfc3VtbWFyaWVzKAorICAgICAgICAgICAgICAgICclcy4uJXMnICUgKHNlbGYubmV3LmNvbW1pdF9zaGExLCBzZWxmLm9sZC5jb21taXRfc2hhMSwpCisgICAgICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgaWYgYWRkczoKKyAgICAgICAgICAgICAgICBuZXdfY29tbWl0c19saXN0ID0gcHVzaC5nZXRfbmV3X2NvbW1pdHMoc2VsZikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3X2NvbW1pdHNfbGlzdCA9IFtdCisgICAgICAgICAgICBuZXdfY29tbWl0cyA9IENvbW1pdFNldChuZXdfY29tbWl0c19saXN0KQorCisgICAgICAgICAgICBpZiBkaXNjYXJkczoKKyAgICAgICAgICAgICAgICBkaXNjYXJkZWRfY29tbWl0cyA9IENvbW1pdFNldChwdXNoLmdldF9kaXNjYXJkZWRfY29tbWl0cyhzZWxmKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGlzY2FyZGVkX2NvbW1pdHMgPSBDb21taXRTZXQoW10pCisKKyAgICAgICAgICAgIGlmIGRpc2NhcmRzIGFuZCBhZGRzOgorICAgICAgICAgICAgICAgIGZvciAoc2hhMSwgc3ViamVjdCkgaW4gZGlzY2FyZHM6CisgICAgICAgICAgICAgICAgICAgIGlmIHNoYTEgaW4gZGlzY2FyZGVkX2NvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAnZGlzY2FyZHMnCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAnb21pdHMnCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuZXhwYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgQlJJRUZfU1VNTUFSWV9URU1QTEFURSwgYWN0aW9uPWFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldl9zaG9ydD1zaGExLCB0ZXh0PXN1YmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgZm9yIChzaGExLCBzdWJqZWN0KSBpbiBhZGRzOgorICAgICAgICAgICAgICAgICAgICBpZiBzaGExIGluIG5ld19jb21taXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gJ25ldycKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICdhZGRzJworICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj1hY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICByZXZfc2hvcnQ9c2hhMSwgdGV4dD1zdWJqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHlpZWxkICdcbicKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmV4cGFuZF9saW5lcyhOT05fRkZfVEVNUExBVEUpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgICAgIGVsaWYgZGlzY2FyZHM6CisgICAgICAgICAgICAgICAgZm9yIChzaGExLCBzdWJqZWN0KSBpbiBkaXNjYXJkczoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2hhMSBpbiBkaXNjYXJkZWRfY29tbWl0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICdkaXNjYXJkcycKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9ICdvbWl0cycKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5leHBhbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBCUklFRl9TVU1NQVJZX1RFTVBMQVRFLCBhY3Rpb249YWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2X3Nob3J0PXNoYTEsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB5aWVsZCAnXG4nCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoUkVXSU5EX09OTFlfVEVNUExBVEUpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgICAgIGVsaWYgYWRkczoKKyAgICAgICAgICAgICAgICAoc2hhMSwgc3ViamVjdCkgPSBzZWxmLm9sZC5nZXRfc3VtbWFyeSgpCisgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5leHBhbmQoCisgICAgICAgICAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj0nZnJvbScsCisgICAgICAgICAgICAgICAgICAgIHJldl9zaG9ydD1zaGExLCB0ZXh0PXN1YmplY3QsCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBmb3IgKHNoYTEsIHN1YmplY3QpIGluIGFkZHM6CisgICAgICAgICAgICAgICAgICAgIGlmIHNoYTEgaW4gbmV3X2NvbW1pdHM6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSAnbmV3JworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gJ2FkZHMnCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuZXhwYW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgQlJJRUZfU1VNTUFSWV9URU1QTEFURSwgYWN0aW9uPWFjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldl9zaG9ydD1zaGExLCB0ZXh0PXN1YmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgIHlpZWxkICdcbicKKworICAgICAgICAgICAgaWYgbmV3X2NvbW1pdHM6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5nZW5lcmF0ZV9uZXdfcmV2aXNpb25fc3VtbWFyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbihuZXdfY29tbWl0cyksIG5ld19jb21taXRzX2xpc3QsIHB1c2gpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKE5PX05FV19SRVZJU0lPTlNfVEVNUExBVEUpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5nZW5lcmF0ZV9yZXZpc2lvbl9jaGFuZ2VfZ3JhcGgocHVzaCk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICAgICAgIyBUaGUgZGlmZnN0YXQgaXMgc2hvd24gZnJvbSB0aGUgb2xkIHJldmlzaW9uIHRvIHRoZSBuZXcKKyAgICAgICAgICAgICMgcmV2aXNpb24uICBUaGlzIGlzIHRvIHNob3cgdGhlIHRydXRoIG9mIHdoYXQgaGFwcGVuZWQgaW4KKyAgICAgICAgICAgICMgdGhpcyBjaGFuZ2UuICBUaGVyZSdzIG5vIHBvaW50IHNob3dpbmcgdGhlIHN0YXQgZnJvbSB0aGUKKyAgICAgICAgICAgICMgYmFzZSB0byB0aGUgbmV3IHJldmlzaW9uIGJlY2F1c2UgdGhlIGJhc2UgaXMgZWZmZWN0aXZlbHkgYQorICAgICAgICAgICAgIyByYW5kb20gcmV2aXNpb24gYXQgdGhpcyBwb2ludCAtIHRoZSB1c2VyIHdpbGwgYmUgaW50ZXJlc3RlZAorICAgICAgICAgICAgIyBpbiB3aGF0IHRoaXMgcmV2aXNpb24gY2hhbmdlZCAtIGluY2x1ZGluZyB0aGUgdW5kb2luZyBvZgorICAgICAgICAgICAgIyBwcmV2aW91cyByZXZpc2lvbnMgaW4gdGhlIGNhc2Ugb2Ygbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzLgorICAgICAgICAgICAgeWllbGQgJ1xuJworICAgICAgICAgICAgeWllbGQgJ1N1bW1hcnkgb2YgY2hhbmdlczpcbicKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHJlYWRfZ2l0X2xpbmVzKAorICAgICAgICAgICAgICAgICAgICBbJ2RpZmYtdHJlZSddICsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaWZmb3B0cyArCisgICAgICAgICAgICAgICAgICAgIFsnJXMuLiVzJyAlIChzZWxmLm9sZC5jb21taXRfc2hhMSwgc2VsZi5uZXcuY29tbWl0X3NoYTEsKV0sCisgICAgICAgICAgICAgICAgICAgIGtlZXBlbmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICk6CisgICAgICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgICAgIGVsaWYgc2VsZi5vbGQuY29tbWl0X3NoYTEgYW5kIG5vdCBzZWxmLm5ldy5jb21taXRfc2hhMToKKyAgICAgICAgICAgICMgQSByZWZlcmVuY2Ugd2FzIGRlbGV0ZWQuICBMaXN0IHRoZSByZXZpc2lvbnMgdGhhdCB3ZXJlCisgICAgICAgICAgICAjIHJlbW92ZWQgZnJvbSB0aGUgcmVwb3NpdG9yeSBieSB0aGlzIHJlZmVyZW5jZSBjaGFuZ2UuCisKKyAgICAgICAgICAgIHNoYTFzID0gbGlzdChwdXNoLmdldF9kaXNjYXJkZWRfY29tbWl0cyhzZWxmKSkKKyAgICAgICAgICAgIHRvdCA9IGxlbihzaGExcykKKyAgICAgICAgICAgIGRpc2NhcmRlZF9yZXZpc2lvbnMgPSBbCisgICAgICAgICAgICAgICAgUmV2aXNpb24oc2VsZiwgR2l0T2JqZWN0KHNoYTEpLCBudW09aSArIDEsIHRvdD10b3QpCisgICAgICAgICAgICAgICAgZm9yIChpLCBzaGExKSBpbiBlbnVtZXJhdGUoc2hhMXMpCisgICAgICAgICAgICAgICAgXQorCisgICAgICAgICAgICBpZiBkaXNjYXJkZWRfcmV2aXNpb25zOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKERJU0NBUkRFRF9SRVZJU0lPTlNfVEVNUExBVEUpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICAgICAgeWllbGQgJ1xuJworICAgICAgICAgICAgICAgIGZvciByIGluIGRpc2NhcmRlZF9yZXZpc2lvbnM6CisgICAgICAgICAgICAgICAgICAgIChzaGExLCBzdWJqZWN0KSA9IHIucmV2LmdldF9zdW1tYXJ5KCkKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgci5leHBhbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBCUklFRl9TVU1NQVJZX1RFTVBMQVRFLCBhY3Rpb249J2Rpc2NhcmRzJywgdGV4dD1zdWJqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZ2VuZXJhdGVfcmV2aXNpb25fY2hhbmdlX2dyYXBoKHB1c2gpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKE5PX0RJU0NBUkRFRF9SRVZJU0lPTlNfVEVNUExBVEUpOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgZWxpZiBub3Qgc2VsZi5vbGQuY29tbWl0X3NoYTEgYW5kIG5vdCBzZWxmLm5ldy5jb21taXRfc2hhMToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKE5PTl9DT01NSVRfVVBEQVRFX1RFTVBMQVRFKToKKyAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICBkZWYgZ2VuZXJhdGVfY3JlYXRlX3N1bW1hcnkoc2VsZiwgcHVzaCk6CisgICAgICAgICIiIkNhbGxlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVmZXJlbmNlLiIiIgorCisgICAgICAgICMgVGhpcyBpcyBhIG5ldyByZWZlcmVuY2UgYW5kIHNvIG9sZHJldiBpcyBub3QgdmFsaWQKKyAgICAgICAgKHNoYTEsIHN1YmplY3QpID0gc2VsZi5uZXcuZ2V0X3N1bW1hcnkoKQorICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj0nYXQnLAorICAgICAgICAgICAgcmV2X3Nob3J0PXNoYTEsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICkKKyAgICAgICAgeWllbGQgJ1xuJworCisgICAgZGVmIGdlbmVyYXRlX3VwZGF0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgZm9yIHRoZSBjaGFuZ2Ugb2YgYSBwcmUtZXhpc3RpbmcgYnJhbmNoLiIiIgorCisgICAgICAgIHJldHVybiBpdGVyKFtdKQorCisgICAgZGVmIGdlbmVyYXRlX2RlbGV0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgZm9yIHRoZSBkZWxldGlvbiBvZiBhbnkgdHlwZSBvZiByZWZlcmVuY2UuIiIiCisKKyAgICAgICAgKHNoYTEsIHN1YmplY3QpID0gc2VsZi5vbGQuZ2V0X3N1bW1hcnkoKQorICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj0nd2FzJywKKyAgICAgICAgICAgIHJldl9zaG9ydD1zaGExLCB0ZXh0PXN1YmplY3QsCisgICAgICAgICAgICApCisgICAgICAgIHlpZWxkICdcbicKKworICAgIGRlZiBnZXRfYWx0X2Zyb21hZGRyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5lbnZpcm9ubWVudC5mcm9tX3JlZmNoYW5nZQorCisKK2NsYXNzIEJyYW5jaENoYW5nZShSZWZlcmVuY2VDaGFuZ2UpOgorICAgIHJlZm5hbWVfdHlwZSA9ICdicmFuY2gnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQsIHJlZm5hbWUsIHNob3J0X3JlZm5hbWUsIG9sZCwgbmV3LCByZXYpOgorICAgICAgICBSZWZlcmVuY2VDaGFuZ2UuX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgIHJlZm5hbWU9cmVmbmFtZSwgc2hvcnRfcmVmbmFtZT1zaG9ydF9yZWZuYW1lLAorICAgICAgICAgICAgb2xkPW9sZCwgbmV3PW5ldywgcmV2PXJldiwKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5yZWNpcGllbnRzID0gZW52aXJvbm1lbnQuZ2V0X3JlZmNoYW5nZV9yZWNpcGllbnRzKHNlbGYpCisgICAgICAgIHNlbGYuX3NpbmdsZV9yZXZpc2lvbiA9IE5vbmUKKworICAgIGRlZiBzZW5kX3NpbmdsZV9jb21iaW5lZF9lbWFpbChzZWxmLCBrbm93bl9hZGRlZF9zaGExcyk6CisgICAgICAgIGlmIG5vdCBzZWxmLmVudmlyb25tZW50LmNvbWJpbmVfd2hlbl9zaW5nbGVfY29tbWl0OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIEluIHRoZSBzYWRseS1hbGwtdG9vLWZyZXF1ZW50IHVzZWNhc2Ugb2YgcGVvcGxlIHB1c2hpbmcgb25seQorICAgICAgICAjIG9uZSBvZiB0aGVpciBjb21taXRzIGF0IGEgdGltZSB0byBhIHJlcG9zaXRvcnksIHVzZXJzIGZlZWwKKyAgICAgICAgIyB0aGUgcmVmZXJlbmNlIGNoYW5nZSBzdW1tYXJ5IGVtYWlscyBhcmUgbm9pc2UgcmF0aGVyIHRoYW4KKyAgICAgICAgIyBpbXBvcnRhbnQgc2lnbmFsLiAgVGhpcyBpcyBiZWNhdXNlLCBpbiB0aGlzIHBhcnRpY3VsYXIKKyAgICAgICAgIyB1c2VjYXNlLCB0aGVyZSBpcyBhIHJlZmVyZW5jZSBjaGFuZ2Ugc3VtbWFyeSBlbWFpbCBmb3IgZWFjaAorICAgICAgICAjIG5ldyBjb21taXQsIGFuZCBhbGwgdGhlc2Ugc3VtbWFyaWVzIGRvIGlzIHBvaW50IG91dCB0aGF0CisgICAgICAgICMgdGhlcmUgaXMgb25lIG5ldyBjb21taXQgKHdoaWNoIGNhbiByZWFkaWx5IGJlIGluZmVycmVkIGJ5CisgICAgICAgICMgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgaW5kaXZpZHVhbCByZXZpc2lvbiBlbWFpbCB0aGF0IGlzIGFsc28KKyAgICAgICAgIyBzZW50KS4gIEluIHN1Y2ggY2FzZXMsIG91ciB1c2VycyBwcmVmZXIgdGhlcmUgdG8gYmUgYSBjb21iaW5lZAorICAgICAgICAjIHJlZmVyZW5jZSBjaGFuZ2Ugc3VtbWFyeS9uZXcgcmV2aXNpb24gZW1haWwuCisgICAgICAgICMKKyAgICAgICAgIyBTbywgaWYgdGhlIGNoYW5nZSBpcyBhbiB1cGRhdGUgYW5kIGl0IGRvZXNuJ3QgZGlzY2FyZCBhbnkKKyAgICAgICAgIyBjb21taXRzLCBhbmQgaXQgYWRkcyBleGFjdGx5IG9uZSBub24tbWVyZ2UgY29tbWl0IChnZXJyaXQKKyAgICAgICAgIyBmb3JjZXMgYSB3b3JrZmxvdyB3aGVyZSBldmVyeSBjb21taXQgaXMgaW5kaXZpZHVhbGx5IG1lcmdlZAorICAgICAgICAjIGFuZCB0aGUgZ2l0LW11bHRpbWFpbCBob29rIGZpcmVkIG9mZiBmb3IganVzdCB0aGlzIG9uZQorICAgICAgICAjIGNoYW5nZSksIHRoZW4gd2Ugc2VuZCBhIGNvbWJpbmVkIHJlZmNoYW5nZS9yZXZpc2lvbiBlbWFpbC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBJZiB0aGlzIGNoYW5nZSBpcyBhIHJlZmVyZW5jZSB1cGRhdGUgdGhhdCBkb2Vzbid0IGRpc2NhcmQKKyAgICAgICAgICAgICMgYW55IGNvbW1pdHMuLi4KKyAgICAgICAgICAgIGlmIHNlbGYuY2hhbmdlX3R5cGUgIT0gJ3VwZGF0ZSc6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgaWYgcmVhZF9naXRfbGluZXMoCisgICAgICAgICAgICAgICAgICAgIFsnbWVyZ2UtYmFzZScsIHNlbGYub2xkLnNoYTEsIHNlbGYubmV3LnNoYTFdCisgICAgICAgICAgICAgICAgICAgICkgIT0gW3NlbGYub2xkLnNoYTFdOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgdGhpcyB1cGRhdGUgaW50cm9kdWNlZCBleGFjdGx5IG9uZSBub24tbWVyZ2UKKyAgICAgICAgICAgICMgY29tbWl0OgorCisgICAgICAgICAgICBkZWYgc3BsaXRfbGluZShsaW5lKToKKyAgICAgICAgICAgICAgICAiIiJTcGxpdCBsaW5lIGludG8gKHNoYTEsIFtwYXJlbnQsLi4uXSkuIiIiCisKKyAgICAgICAgICAgICAgICB3b3JkcyA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIHJldHVybiAod29yZHNbMF0sIHdvcmRzWzE6XSkKKworICAgICAgICAgICAgIyBHZXQgdGhlIG5ldyBjb21taXRzIGludHJvZHVjZWQgYnkgdGhlIHB1c2ggYXMgYSBsaXN0IG9mCisgICAgICAgICAgICAjIChzaGExLCBbcGFyZW50LC4uLl0pCisgICAgICAgICAgICBuZXdfY29tbWl0cyA9IFsKKyAgICAgICAgICAgICAgICBzcGxpdF9saW5lKGxpbmUpCisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9naXRfbGluZXMoCisgICAgICAgICAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAgICAgICAgICdsb2cnLCAnLTMnLCAnLS1mb3JtYXQ9JUggJVAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJyVzLi4lcycgJSAoc2VsZi5vbGQuc2hhMSwgc2VsZi5uZXcuc2hhMSksCisgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBdCisKKyAgICAgICAgICAgIGlmIG5vdCBuZXdfY29tbWl0czoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICAjIElmIHRoZSBuZXdlc3QgY29tbWl0IGlzIGEgbWVyZ2UsIHNhdmUgaXQgZm9yIGEgbGF0ZXIgY2hlY2sKKyAgICAgICAgICAgICMgYnV0IG90aGVyd2lzZSBpZ25vcmUgaXQKKyAgICAgICAgICAgIG1lcmdlID0gTm9uZQorICAgICAgICAgICAgdG90ID0gbGVuKG5ld19jb21taXRzKQorICAgICAgICAgICAgaWYgbGVuKG5ld19jb21taXRzWzBdWzFdKSA+IDE6CisgICAgICAgICAgICAgICAgbWVyZ2UgPSBuZXdfY29tbWl0c1swXVswXQorICAgICAgICAgICAgICAgIGRlbCBuZXdfY29tbWl0c1swXQorCisgICAgICAgICAgICAjIE91ciBwcmltYXJ5IGNoZWNrOiB3ZSBjYW4ndCBjb21iaW5lIGlmIG1vcmUgdGhhbiBvbmUgY29tbWl0CisgICAgICAgICAgICAjIGlzIGludHJvZHVjZWQuICBXZSBhbHNvIGN1cnJlbnRseSBvbmx5IGNvbWJpbmUgaWYgdGhlIG5ldworICAgICAgICAgICAgIyBjb21taXQgaXMgYSBub24tbWVyZ2UgY29tbWl0LCB0aG91Z2ggaXQgbWF5IG1ha2Ugc2Vuc2UgdG8KKyAgICAgICAgICAgICMgY29tYmluZSBpZiBpdCBpcyBhIG1lcmdlIGFzIHdlbGwuCisgICAgICAgICAgICBpZiBub3QgKAorICAgICAgICAgICAgICAgICAgICBsZW4obmV3X2NvbW1pdHMpID09IDEgYW5kCisgICAgICAgICAgICAgICAgICAgIGxlbihuZXdfY29tbWl0c1swXVsxXSkgPT0gMSBhbmQKKyAgICAgICAgICAgICAgICAgICAgbmV3X2NvbW1pdHNbMF1bMF0gaW4ga25vd25fYWRkZWRfc2hhMXMKKyAgICAgICAgICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICAjIFdlIGRvIG5vdCB3YW50IHRvIGNvbWJpbmUgcmV2aXNpb24gYW5kIHJlZmNoYW5nZSBlbWFpbHMgaWYKKyAgICAgICAgICAgICMgdGhvc2UgZ28gdG8gc2VwYXJhdGUgbG9jYXRpb25zLgorICAgICAgICAgICAgcmV2ID0gUmV2aXNpb24oc2VsZiwgR2l0T2JqZWN0KG5ld19jb21taXRzWzBdWzBdKSwgMSwgdG90KQorICAgICAgICAgICAgaWYgcmV2LnJlY2lwaWVudHMgIT0gc2VsZi5yZWNpcGllbnRzOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICMgV2UgaWdub3JlZCB0aGUgbmV3ZXN0IGNvbW1pdCBpZiBpdCB3YXMganVzdCBhIG1lcmdlIG9mIHRoZSBvbmUKKyAgICAgICAgICAgICMgY29tbWl0IGJlaW5nIGludHJvZHVjZWQuICBCdXQgd2UgZG9uJ3Qgd2FudCB0byBpZ25vcmUgdGhhdAorICAgICAgICAgICAgIyBtZXJnZSBjb21taXQgaXQgaXQgaW52b2x2ZWQgY29uZmxpY3QgcmVzb2x1dGlvbnMuICBDaGVjayB0aGF0LgorICAgICAgICAgICAgaWYgbWVyZ2UgYW5kIG1lcmdlICE9IHJlYWRfZ2l0X291dHB1dChbJ2RpZmYtdHJlZScsICctLWNjJywgbWVyZ2VdKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICAjIFdlIGNhbiBjb21iaW5lIHRoZSByZWZjaGFuZ2UgYW5kIG9uZSBuZXcgcmV2aXNpb24gZW1haWxzCisgICAgICAgICAgICAjIGludG8gb25lLiAgUmV0dXJuIHRoZSBSZXZpc2lvbiB0aGF0IGEgY29tYmluZWQgZW1haWwgc2hvdWxkCisgICAgICAgICAgICAjIGJlIHNlbnQgYWJvdXQuCisgICAgICAgICAgICByZXR1cm4gcmV2CisgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICAgICAjIENhbm5vdCBkZXRlcm1pbmUgbnVtYmVyIG9mIGNvbW1pdHMgaW4gb2xkLi5uZXcgb3IgbmV3Li5vbGQ7CisgICAgICAgICAgICAjIGRvbid0IGNvbWJpbmUgcmVmZXJlbmNlL3JldmlzaW9uIGVtYWlsczoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2VuZXJhdGVfY29tYmluZWRfZW1haWwoc2VsZiwgcHVzaCwgcmV2aXNpb24sIGJvZHlfZmlsdGVyPU5vbmUsIGV4dHJhX2hlYWRlcl92YWx1ZXM9e30pOgorICAgICAgICB2YWx1ZXMgPSByZXZpc2lvbi5nZXRfdmFsdWVzKCkKKyAgICAgICAgaWYgZXh0cmFfaGVhZGVyX3ZhbHVlczoKKyAgICAgICAgICAgIHZhbHVlcy51cGRhdGUoZXh0cmFfaGVhZGVyX3ZhbHVlcykKKyAgICAgICAgaWYgJ3N1YmplY3QnIG5vdCBpbiBleHRyYV9oZWFkZXJfdmFsdWVzOgorICAgICAgICAgICAgdmFsdWVzWydzdWJqZWN0J10gPSBzZWxmLmV4cGFuZChDT01CSU5FRF9SRUZDSEFOR0VfUkVWSVNJT05fU1VCSkVDVF9URU1QTEFURSwgKip2YWx1ZXMpCisKKyAgICAgICAgc2VsZi5fc2luZ2xlX3JldmlzaW9uID0gcmV2aXNpb24KKyAgICAgICAgc2VsZi5fY29udGFpbnNfZGlmZigpCisgICAgICAgIHNlbGYuaGVhZGVyX3RlbXBsYXRlID0gQ09NQklORURfSEVBREVSX1RFTVBMQVRFCisgICAgICAgIHNlbGYuaW50cm9fdGVtcGxhdGUgPSBDT01CSU5FRF9JTlRST19URU1QTEFURQorICAgICAgICBzZWxmLmZvb3Rlcl90ZW1wbGF0ZSA9IENPTUJJTkVEX0ZPT1RFUl9URU1QTEFURQorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmdlbmVyYXRlX2VtYWlsKHB1c2gsIGJvZHlfZmlsdGVyLCB2YWx1ZXMpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2VtYWlsX2JvZHkoc2VsZiwgcHVzaCk6CisgICAgICAgICcnJ0NhbGwgdGhlIGFwcHJvcHJpYXRlIGJvZHkgZ2VuZXJhdGlvbiByb3V0aW5lLgorCisgICAgICAgIElmIHRoaXMgaXMgYSBjb21iaW5lZCByZWZjaGFuZ2UvcmV2aXNpb24gZW1haWwsIHRoZSBzcGVjaWFsIGxvZ2ljCisgICAgICAgIGZvciBoYW5kbGluZyB0aGlzIGNvbWJpbmVkIGVtYWlsIGNvbWVzIGZyb20gdGhpcyBmdW5jdGlvbi4gIEZvcgorICAgICAgICBvdGhlciBjYXNlcywgd2UganVzdCB1c2UgdGhlIG5vcm1hbCBoYW5kbGluZy4nJycKKworICAgICAgICAjIElmIHNlbGYuX3NpbmdsZV9yZXZpc2lvbiBpc24ndCBzZXQ7IGRvbid0IG92ZXJyaWRlCisgICAgICAgIGlmIG5vdCBzZWxmLl9zaW5nbGVfcmV2aXNpb246CisgICAgICAgICAgICBmb3IgbGluZSBpbiBzdXBlcihCcmFuY2hDaGFuZ2UsIHNlbGYpLmdlbmVyYXRlX2VtYWlsX2JvZHkocHVzaCk6CisgICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBUaGlzIGlzIGEgY29tYmluZWQgcmVmY2hhbmdlL3JldmlzaW9uIGVtYWlsOyB3ZSBmaXJzdCBwcm92aWRlCisgICAgICAgICMgc29tZSBpbmZvIGZyb20gdGhlIHJlZmNoYW5nZSBwb3J0aW9uLCBhbmQgdGhlbiBjYWxsIHRoZSByZXZpc2lvbgorICAgICAgICAjIGdlbmVyYXRlX2VtYWlsX2JvZHkgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSByZXZpc2lvbiBwb3J0aW9uLgorICAgICAgICBhZGRzID0gbGlzdChnZW5lcmF0ZV9zdW1tYXJpZXMoCisgICAgICAgICAgICAnLS10b3BvLW9yZGVyJywgJy0tcmV2ZXJzZScsICclcy4uJXMnCisgICAgICAgICAgICAlIChzZWxmLm9sZC5jb21taXRfc2hhMSwgc2VsZi5uZXcuY29tbWl0X3NoYTEsKQorICAgICAgICAgICAgKSkKKworICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgiVGhlIGZvbGxvd2luZyBjb21taXQocykgd2VyZSBhZGRlZCB0byAlKHJlZm5hbWUpcyBieSB0aGlzIHB1c2g6XG4iKQorICAgICAgICBmb3IgKHNoYTEsIHN1YmplY3QpIGluIGFkZHM6CisgICAgICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgICAgICBCUklFRl9TVU1NQVJZX1RFTVBMQVRFLCBhY3Rpb249J25ldycsCisgICAgICAgICAgICAgICAgcmV2X3Nob3J0PXNoYTEsIHRleHQ9c3ViamVjdCwKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgeWllbGQgc2VsZi5fc2luZ2xlX3JldmlzaW9uLnJldi5zaG9ydCArICIgaXMgZGVzY3JpYmVkIGJlbG93XG4iCisgICAgICAgIHlpZWxkICdcbicKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9zaW5nbGVfcmV2aXNpb24uZ2VuZXJhdGVfZW1haWxfYm9keShwdXNoKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworCitjbGFzcyBBbm5vdGF0ZWRUYWdDaGFuZ2UoUmVmZXJlbmNlQ2hhbmdlKToKKyAgICByZWZuYW1lX3R5cGUgPSAnYW5ub3RhdGVkIHRhZycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbnZpcm9ubWVudCwgcmVmbmFtZSwgc2hvcnRfcmVmbmFtZSwgb2xkLCBuZXcsIHJldik6CisgICAgICAgIFJlZmVyZW5jZUNoYW5nZS5fX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsIGVudmlyb25tZW50LAorICAgICAgICAgICAgcmVmbmFtZT1yZWZuYW1lLCBzaG9ydF9yZWZuYW1lPXNob3J0X3JlZm5hbWUsCisgICAgICAgICAgICBvbGQ9b2xkLCBuZXc9bmV3LCByZXY9cmV2LAorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLnJlY2lwaWVudHMgPSBlbnZpcm9ubWVudC5nZXRfYW5ub3VuY2VfcmVjaXBpZW50cyhzZWxmKQorICAgICAgICBzZWxmLnNob3dfc2hvcnRsb2cgPSBlbnZpcm9ubWVudC5hbm5vdW5jZV9zaG93X3Nob3J0bG9nCisKKyAgICBBTk5PVEFURURfVEFHX0ZPUk1BVCA9ICgKKyAgICAgICAgJyUoKm9iamVjdG5hbWUpXG4nCisgICAgICAgICclKCpvYmplY3R0eXBlKVxuJworICAgICAgICAnJSh0YWdnZXJuYW1lKVxuJworICAgICAgICAnJSh0YWdnZXJkYXRlKScKKyAgICAgICAgKQorCisgICAgZGVmIGRlc2NyaWJlX3RhZyhzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiRGVzY3JpYmUgdGhlIG5ldyB2YWx1ZSBvZiBhbiBhbm5vdGF0ZWQgdGFnLiIiIgorCisgICAgICAgICMgVXNlIGdpdCBmb3ItZWFjaC1yZWYgdG8gcHVsbCBvdXQgdGhlIGluZGl2aWR1YWwgZmllbGRzIGZyb20KKyAgICAgICAgIyB0aGUgdGFnCisgICAgICAgIFt0YWdvYmplY3QsIHRhZ3R5cGUsIHRhZ2dlciwgdGFnZ2VkXSA9IHJlYWRfZ2l0X2xpbmVzKAorICAgICAgICAgICAgWydmb3ItZWFjaC1yZWYnLCAnLS1mb3JtYXQ9JXMnICUgKHNlbGYuQU5OT1RBVEVEX1RBR19GT1JNQVQsKSwgc2VsZi5yZWZuYW1lXSwKKyAgICAgICAgICAgICkKKworICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgKKyAgICAgICAgICAgIEJSSUVGX1NVTU1BUllfVEVNUExBVEUsIGFjdGlvbj0ndGFnZ2luZycsCisgICAgICAgICAgICByZXZfc2hvcnQ9dGFnb2JqZWN0LCB0ZXh0PScoJXMpJyAlICh0YWd0eXBlLCksCisgICAgICAgICAgICApCisgICAgICAgIGlmIHRhZ3R5cGUgPT0gJ2NvbW1pdCc6CisgICAgICAgICAgICAjIElmIHRoZSB0YWdnZWQgb2JqZWN0IGlzIGEgY29tbWl0LCB0aGVuIHdlIGFzc3VtZSB0aGlzIGlzIGEKKyAgICAgICAgICAgICMgcmVsZWFzZSwgYW5kIHNvIHdlIGNhbGN1bGF0ZSB3aGljaCB0YWcgdGhpcyB0YWcgaXMKKyAgICAgICAgICAgICMgcmVwbGFjaW5nCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHJldnRhZyA9IHJlYWRfZ2l0X291dHB1dChbJ2Rlc2NyaWJlJywgJy0tYWJicmV2PTAnLCAnJXNeJyAlIChzZWxmLm5ldywpXSkKKyAgICAgICAgICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgICAgICAgICAgcHJldnRhZyA9IE5vbmUKKyAgICAgICAgICAgIGlmIHByZXZ0YWc6CisgICAgICAgICAgICAgICAgeWllbGQgJyAgcmVwbGFjZXMgICVzXG4nICUgKHByZXZ0YWcsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJldnRhZyA9IE5vbmUKKyAgICAgICAgICAgIHlpZWxkICcgICAgbGVuZ3RoICAlcyBieXRlc1xuJyAlIChyZWFkX2dpdF9vdXRwdXQoWydjYXQtZmlsZScsICctcycsIHRhZ29iamVjdF0pLCkKKworICAgICAgICB5aWVsZCAnIHRhZ2dlZCBieSAgJXNcbicgJSAodGFnZ2VyLCkKKyAgICAgICAgeWllbGQgJyAgICAgICAgb24gICVzXG4nICUgKHRhZ2dlZCwpCisgICAgICAgIHlpZWxkICdcbicKKworICAgICAgICAjIFNob3cgdGhlIGNvbnRlbnQgb2YgdGhlIHRhZyBtZXNzYWdlOyB0aGlzIG1pZ2h0IGNvbnRhaW4gYQorICAgICAgICAjIGNoYW5nZSBsb2cgb3IgcmVsZWFzZSBub3RlcyBzbyBpcyB3b3J0aCBkaXNwbGF5aW5nLgorICAgICAgICB5aWVsZCBMT0dCRUdJTgorICAgICAgICBjb250ZW50cyA9IGxpc3QocmVhZF9naXRfbGluZXMoWydjYXQtZmlsZScsICd0YWcnLCBzZWxmLm5ldy5zaGExXSwga2VlcGVuZHM9VHJ1ZSkpCisgICAgICAgIGNvbnRlbnRzID0gY29udGVudHNbY29udGVudHMuaW5kZXgoJ1xuJykgKyAxOl0KKyAgICAgICAgaWYgY29udGVudHMgYW5kIGNvbnRlbnRzWy0xXVstMTpdICE9ICdcbic6CisgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoJ1xuJykKKyAgICAgICAgZm9yIGxpbmUgaW4gY29udGVudHM6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKyAgICAgICAgaWYgc2VsZi5zaG93X3Nob3J0bG9nIGFuZCB0YWd0eXBlID09ICdjb21taXQnOgorICAgICAgICAgICAgIyBPbmx5IGNvbW1pdCB0YWdzIG1ha2Ugc2Vuc2UgdG8gaGF2ZSByZXYtbGlzdCBvcGVyYXRpb25zCisgICAgICAgICAgICAjIHBlcmZvcm1lZCBvbiB0aGVtCisgICAgICAgICAgICB5aWVsZCAnXG4nCisgICAgICAgICAgICBpZiBwcmV2dGFnOgorICAgICAgICAgICAgICAgICMgU2hvdyBjaGFuZ2VzIHNpbmNlIHRoZSBwcmV2aW91cyByZWxlYXNlCisgICAgICAgICAgICAgICAgcmV2bGlzdCA9IHJlYWRfZ2l0X291dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgWydyZXYtbGlzdCcsICctLXByZXR0eT1zaG9ydCcsICclcy4uJXMnICUgKHByZXZ0YWcsIHNlbGYubmV3LCldLAorICAgICAgICAgICAgICAgICAgICBrZWVwZW5kcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTm8gcHJldmlvdXMgdGFnLCBzaG93IGFsbCB0aGUgY2hhbmdlcyBzaW5jZSB0aW1lCisgICAgICAgICAgICAgICAgIyBiZWdhbgorICAgICAgICAgICAgICAgIHJldmxpc3QgPSByZWFkX2dpdF9vdXRwdXQoCisgICAgICAgICAgICAgICAgICAgIFsncmV2LWxpc3QnLCAnLS1wcmV0dHk9c2hvcnQnLCAnJXMnICUgKHNlbGYubmV3LCldLAorICAgICAgICAgICAgICAgICAgICBrZWVwZW5kcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBmb3IgbGluZSBpbiByZWFkX2dpdF9saW5lcyhbJ3Nob3J0bG9nJ10sIGlucHV0PXJldmxpc3QsIGtlZXBlbmRzPVRydWUpOgorICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICB5aWVsZCBMT0dFTkQKKyAgICAgICAgeWllbGQgJ1xuJworCisgICAgZGVmIGdlbmVyYXRlX2NyZWF0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhbiBhbm5vdGF0ZWQgdGFnLiIiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKFRBR19DUkVBVEVEX1RFTVBMQVRFKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmRlc2NyaWJlX3RhZyhwdXNoKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV91cGRhdGVfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiQ2FsbGVkIGZvciB0aGUgdXBkYXRlIG9mIGFuIGFubm90YXRlZCB0YWcuCisKKyAgICAgICAgVGhpcyBpcyBwcm9iYWJseSBhIHJhcmUgZXZlbnQgYW5kIG1heSBub3QgZXZlbiBiZSBhbGxvd2VkLiIiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKFRBR19VUERBVEVEX1RFTVBMQVRFKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmRlc2NyaWJlX3RhZyhwdXNoKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgIGRlZiBnZW5lcmF0ZV9kZWxldGVfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBub24tYW5ub3RhdGVkIHJlZmVyZW5jZSBpcyB1cGRhdGVkLiIiIgorCisgICAgICAgIGZvciBsaW5lIGluIHNlbGYuZXhwYW5kX2xpbmVzKFRBR19ERUxFVEVEX1RFTVBMQVRFKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworICAgICAgICB5aWVsZCBzZWxmLmV4cGFuZCgnICAgdGFnIHdhcyAgJShvbGRyZXZfc2hvcnQpc1xuJykKKyAgICAgICAgeWllbGQgJ1xuJworCisKK2NsYXNzIE5vbkFubm90YXRlZFRhZ0NoYW5nZShSZWZlcmVuY2VDaGFuZ2UpOgorICAgIHJlZm5hbWVfdHlwZSA9ICd0YWcnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQsIHJlZm5hbWUsIHNob3J0X3JlZm5hbWUsIG9sZCwgbmV3LCByZXYpOgorICAgICAgICBSZWZlcmVuY2VDaGFuZ2UuX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBlbnZpcm9ubWVudCwKKyAgICAgICAgICAgIHJlZm5hbWU9cmVmbmFtZSwgc2hvcnRfcmVmbmFtZT1zaG9ydF9yZWZuYW1lLAorICAgICAgICAgICAgb2xkPW9sZCwgbmV3PW5ldywgcmV2PXJldiwKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5yZWNpcGllbnRzID0gZW52aXJvbm1lbnQuZ2V0X3JlZmNoYW5nZV9yZWNpcGllbnRzKHNlbGYpCisKKyAgICBkZWYgZ2VuZXJhdGVfY3JlYXRlX3N1bW1hcnkoc2VsZiwgcHVzaCk6CisgICAgICAgICIiIkNhbGxlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGFuIGFubm90YXRlZCB0YWcuIiIiCisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoVEFHX0NSRUFURURfVEVNUExBVEUpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX3VwZGF0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIG5vbi1hbm5vdGF0ZWQgcmVmZXJlbmNlIGlzIHVwZGF0ZWQuIiIiCisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoVEFHX1VQREFURURfVEVNUExBVEUpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgZGVmIGdlbmVyYXRlX2RlbGV0ZV9zdW1tYXJ5KHNlbGYsIHB1c2gpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIG5vbi1hbm5vdGF0ZWQgcmVmZXJlbmNlIGlzIHVwZGF0ZWQuIiIiCisKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5leHBhbmRfbGluZXMoVEFHX0RFTEVURURfVEVNUExBVEUpOgorICAgICAgICAgICAgeWllbGQgbGluZQorCisgICAgICAgIGZvciBsaW5lIGluIFJlZmVyZW5jZUNoYW5nZS5nZW5lcmF0ZV9kZWxldGVfc3VtbWFyeShzZWxmLCBwdXNoKToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworCitjbGFzcyBPdGhlclJlZmVyZW5jZUNoYW5nZShSZWZlcmVuY2VDaGFuZ2UpOgorICAgIHJlZm5hbWVfdHlwZSA9ICdyZWZlcmVuY2UnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQsIHJlZm5hbWUsIHNob3J0X3JlZm5hbWUsIG9sZCwgbmV3LCByZXYpOgorICAgICAgICAjIFdlIHVzZSB0aGUgZnVsbCByZWZuYW1lIGFzIHNob3J0X3JlZm5hbWUsIGJlY2F1c2Ugb3RoZXJ3aXNlCisgICAgICAgICMgdGhlIGZ1bGwgbmFtZSBvZiB0aGUgcmVmZXJlbmNlIHdvdWxkIG5vdCBiZSBvYnZpb3VzIGZyb20gdGhlCisgICAgICAgICMgdGV4dCBvZiB0aGUgZW1haWwuCisgICAgICAgIFJlZmVyZW5jZUNoYW5nZS5fX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsIGVudmlyb25tZW50LAorICAgICAgICAgICAgcmVmbmFtZT1yZWZuYW1lLCBzaG9ydF9yZWZuYW1lPXJlZm5hbWUsCisgICAgICAgICAgICBvbGQ9b2xkLCBuZXc9bmV3LCByZXY9cmV2LAorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLnJlY2lwaWVudHMgPSBlbnZpcm9ubWVudC5nZXRfcmVmY2hhbmdlX3JlY2lwaWVudHMoc2VsZikKKworCitjbGFzcyBNYWlsZXIob2JqZWN0KToKKyAgICAiIiJBbiBvYmplY3QgdGhhdCBjYW4gc2VuZCBlbWFpbHMuIiIiCisKKyAgICBkZWYgc2VuZChzZWxmLCBsaW5lcywgdG9fYWRkcnMpOgorICAgICAgICAiIiJTZW5kIGFuIGVtYWlsIGNvbnNpc3Rpbmcgb2YgbGluZXMuCisKKyAgICAgICAgbGluZXMgbXVzdCBiZSBhbiBpdGVyYWJsZSBvdmVyIHRoZSBsaW5lcyBjb25zdGl0dXRpbmcgdGhlCisgICAgICAgIGhlYWRlciBhbmQgYm9keSBvZiB0aGUgZW1haWwuICB0b19hZGRycyBpcyBhIGxpc3Qgb2YgcmVjaXBpZW50CisgICAgICAgIGFkZHJlc3NlcyAoY2FuIGJlIG5lZWRlZCBldmVuIGlmIGxpbmVzIGFscmVhZHkgY29udGFpbnMgYQorICAgICAgICAiVG86IiBmaWVsZCkuICBJdCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIChjb21tYS1zZXBhcmF0ZWQgbGlzdAorICAgICAgICBvZiBlbWFpbCBhZGRyZXNzZXMpIG9yIGEgUHl0aG9uIGxpc3Qgb2YgaW5kaXZpZHVhbCBlbWFpbAorICAgICAgICBhZGRyZXNzZXMuCisKKyAgICAgICAgIiIiCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKworY2xhc3MgU2VuZE1haWxlcihNYWlsZXIpOgorICAgICIiIlNlbmQgZW1haWxzIHVzaW5nICdzZW5kbWFpbCAtb2kgLXQnLiIiIgorCisgICAgU0VORE1BSUxfQ0FORElEQVRFUyA9IFsKKyAgICAgICAgJy91c3Ivc2Jpbi9zZW5kbWFpbCcsCisgICAgICAgICcvdXNyL2xpYi9zZW5kbWFpbCcsCisgICAgICAgIF0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZmluZF9zZW5kbWFpbCgpOgorICAgICAgICBmb3IgcGF0aCBpbiBTZW5kTWFpbGVyLlNFTkRNQUlMX0NBTkRJREFURVM6CisgICAgICAgICAgICBpZiBvcy5hY2Nlc3MocGF0aCwgb3MuWF9PSyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhdGgKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIENvbmZpZ3VyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ05vIHNlbmRtYWlsIGV4ZWN1dGFibGUgZm91bmQuICAnCisgICAgICAgICAgICAgICAgJ1RyeSBzZXR0aW5nIG11bHRpbWFpbGhvb2suc2VuZG1haWxDb21tYW5kLicKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZD1Ob25lLCBlbnZlbG9wZXNlbmRlcj1Ob25lKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgU2VuZE1haWxlciBpbnN0YW5jZS4KKworICAgICAgICBjb21tYW5kIHNob3VsZCBiZSB0aGUgY29tbWFuZCBhbmQgYXJndW1lbnRzIHVzZWQgdG8gaW52b2tlCisgICAgICAgIHNlbmRtYWlsLCBhcyBhIGxpc3Qgb2Ygc3RyaW5ncy4gIElmIGFuIGVudmVsb3Blc2VuZGVyIGlzCisgICAgICAgIHByb3ZpZGVkLCBpdCB3aWxsIGFsc28gYmUgcGFzc2VkIHRvIHRoZSBjb21tYW5kLCB2aWEgJy1mCisgICAgICAgIGVudmVsb3Blc2VuZGVyJy4iIiIKKworICAgICAgICBpZiBjb21tYW5kOgorICAgICAgICAgICAgc2VsZi5jb21tYW5kID0gY29tbWFuZFs6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5jb21tYW5kID0gW3NlbGYuZmluZF9zZW5kbWFpbCgpLCAnLW9pJywgJy10J10KKworICAgICAgICBpZiBlbnZlbG9wZXNlbmRlcjoKKyAgICAgICAgICAgIHNlbGYuY29tbWFuZC5leHRlbmQoWyctZicsIGVudmVsb3Blc2VuZGVyXSkKKworICAgIGRlZiBzZW5kKHNlbGYsIGxpbmVzLCB0b19hZGRycyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKHNlbGYuY29tbWFuZCwgc3RkaW49c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoCisgICAgICAgICAgICAgICAgJyoqKiBDYW5ub3QgZXhlY3V0ZSBjb21tYW5kOiAlc1xuJyAlICcgJy5qb2luKHNlbGYuY29tbWFuZCkgKworICAgICAgICAgICAgICAgICcqKiogJXNcbicgJSBzeXMuZXhjX2luZm8oKVsxXSArCisgICAgICAgICAgICAgICAgJyoqKiBUcnkgc2V0dGluZyBtdWx0aW1haWxob29rLm1haWxlciB0byAic210cCJcbicgKworICAgICAgICAgICAgICAgICcqKiogdG8gc2VuZCBlbWFpbHMgd2l0aG91dCB1c2luZyB0aGUgc2VuZG1haWwgY29tbWFuZC5cbicKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsaW5lcyA9IChzdHJfdG9fYnl0ZXMobGluZSkgZm9yIGxpbmUgaW4gbGluZXMpCisgICAgICAgICAgICBwLnN0ZGluLndyaXRlbGluZXMobGluZXMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgICAgICcqKiogRXJyb3Igd2hpbGUgZ2VuZXJhdGluZyBjb21taXQgZW1haWxcbicKKyAgICAgICAgICAgICAgICAnKioqICAtIG1haWwgc2VuZGluZyBhYm9ydGVkLlxuJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIHN1YnByb2Nlc3MudGVybWluYXRlKCkgaXMgbm90IGF2YWlsYWJsZSBpbiBQeXRob24gMi40CisgICAgICAgICAgICAgICAgcC50ZXJtaW5hdGUoKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHJldGNvZGUgPSBwLndhaXQoKQorICAgICAgICAgICAgaWYgcmV0Y29kZToKKyAgICAgICAgICAgICAgICByYWlzZSBDb21tYW5kRXJyb3Ioc2VsZi5jb21tYW5kLCByZXRjb2RlKQorCisKK2NsYXNzIFNNVFBNYWlsZXIoTWFpbGVyKToKKyAgICAiIiJTZW5kIGVtYWlscyB1c2luZyBQeXRob24ncyBzbXRwbGliLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVudmVsb3Blc2VuZGVyLCBzbXRwc2VydmVyLAorICAgICAgICAgICAgICAgICBzbXRwc2VydmVydGltZW91dD0xMC4wLCBzbXRwc2VydmVyZGVidWdsZXZlbD0wLAorICAgICAgICAgICAgICAgICBzbXRwZW5jcnlwdGlvbj0nbm9uZScsCisgICAgICAgICAgICAgICAgIHNtdHB1c2VyPScnLCBzbXRwcGFzcz0nJywKKyAgICAgICAgICAgICAgICAgKToKKyAgICAgICAgaWYgbm90IGVudmVsb3Blc2VuZGVyOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICAgICAnZmF0YWw6IGdpdF9tdWx0aW1haWw6IGNhbm5vdCB1c2UgU01UUE1haWxlciB3aXRob3V0IGEgc2VuZGVyIGFkZHJlc3MuXG4nCisgICAgICAgICAgICAgICAgJ3BsZWFzZSBzZXQgZWl0aGVyIG11bHRpbWFpbGhvb2suZW52ZWxvcGVTZW5kZXIgb3IgdXNlci5lbWFpbFxuJworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgIGlmIHNtdHBlbmNyeXB0aW9uID09ICdzc2wnIGFuZCBub3QgKHNtdHB1c2VyIGFuZCBzbXRwcGFzcyk6CisgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICdDYW5ub3QgdXNlIFNNVFBNYWlsZXIgd2l0aCBzZWN1cml0eSBvcHRpb24gc3NsICcKKyAgICAgICAgICAgICAgICAnd2l0aG91dCBvcHRpb25zIHVzZXJuYW1lIGFuZCBwYXNzd29yZC4nCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmVudmVsb3Blc2VuZGVyID0gZW52ZWxvcGVzZW5kZXIKKyAgICAgICAgc2VsZi5zbXRwc2VydmVyID0gc210cHNlcnZlcgorICAgICAgICBzZWxmLnNtdHBzZXJ2ZXJ0aW1lb3V0ID0gc210cHNlcnZlcnRpbWVvdXQKKyAgICAgICAgc2VsZi5zbXRwc2VydmVyZGVidWdsZXZlbCA9IHNtdHBzZXJ2ZXJkZWJ1Z2xldmVsCisgICAgICAgIHNlbGYuc2VjdXJpdHkgPSBzbXRwZW5jcnlwdGlvbgorICAgICAgICBzZWxmLnVzZXJuYW1lID0gc210cHVzZXIKKyAgICAgICAgc2VsZi5wYXNzd29yZCA9IHNtdHBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZiBjYWxsKGtsYXNzLCBzZXJ2ZXIsIHRpbWVvdXQpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtsYXNzKHNlcnZlciwgdGltZW91dD10aW1lb3V0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgT2xkIFB5dGhvbiB2ZXJzaW9ucyBkbyBub3QgaGF2ZSB0aW1lb3V0PSBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtsYXNzKHNlcnZlcikKKyAgICAgICAgICAgIGlmIHNlbGYuc2VjdXJpdHkgPT0gJ25vbmUnOgorICAgICAgICAgICAgICAgIHNlbGYuc210cCA9IGNhbGwoc210cGxpYi5TTVRQLCBzZWxmLnNtdHBzZXJ2ZXIsIHRpbWVvdXQ9c2VsZi5zbXRwc2VydmVydGltZW91dCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5zZWN1cml0eSA9PSAnc3NsJzoKKyAgICAgICAgICAgICAgICBzZWxmLnNtdHAgPSBjYWxsKHNtdHBsaWIuU01UUF9TU0wsIHNlbGYuc210cHNlcnZlciwgdGltZW91dD1zZWxmLnNtdHBzZXJ2ZXJ0aW1lb3V0KQorICAgICAgICAgICAgZWxpZiBzZWxmLnNlY3VyaXR5ID09ICd0bHMnOgorICAgICAgICAgICAgICAgIGlmICc6JyBub3QgaW4gc2VsZi5zbXRwc2VydmVyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNtdHBzZXJ2ZXIgKz0gJzo1ODcnICAjIGRlZmF1bHQgcG9ydCBmb3IgVExTCisgICAgICAgICAgICAgICAgc2VsZi5zbXRwID0gY2FsbChzbXRwbGliLlNNVFAsIHNlbGYuc210cHNlcnZlciwgdGltZW91dD1zZWxmLnNtdHBzZXJ2ZXJ0aW1lb3V0KQorICAgICAgICAgICAgICAgIHNlbGYuc210cC5laGxvKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNtdHAuc3RhcnR0bHMoKQorICAgICAgICAgICAgICAgIHNlbGYuc210cC5laGxvKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnKioqIEVycm9yOiBDb250cm9sIHJlYWNoZWQgYW4gaW52YWxpZCBvcHRpb24uICoqKicpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgIGlmIHNlbGYuc210cHNlcnZlcmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICIqKiogU2V0dGluZyBkZWJ1ZyBvbiBmb3IgU01UUCBzZXJ2ZXIgY29ubmVjdGlvbiAoJXMpICoqKlxuIgorICAgICAgICAgICAgICAgICAgICAlIHNlbGYuc210cHNlcnZlcmRlYnVnbGV2ZWwpCisgICAgICAgICAgICAgICAgc2VsZi5zbXRwLnNldF9kZWJ1Z2xldmVsKHNlbGYuc210cHNlcnZlcmRlYnVnbGV2ZWwpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgICAgICcqKiogRXJyb3IgZXN0YWJsaXNoaW5nIFNNVFAgY29ubmVjdGlvbiB0byAlcyAqKipcbicKKyAgICAgICAgICAgICAgICAlIHNlbGYuc210cHNlcnZlcikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJyoqKiAlc1xuJyAlIHN5cy5leGNfaW5mbygpWzFdKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzbXRwJyk6CisgICAgICAgICAgICBzZWxmLnNtdHAucXVpdCgpCisKKyAgICBkZWYgc2VuZChzZWxmLCBsaW5lcywgdG9fYWRkcnMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLnVzZXJuYW1lIG9yIHNlbGYucGFzc3dvcmQ6CisgICAgICAgICAgICAgICAgc2VsZi5zbXRwLmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQpCisgICAgICAgICAgICBtc2cgPSAnJy5qb2luKGxpbmVzKQorICAgICAgICAgICAgIyB0dXJuIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGludG8gUHl0aG9uIGxpc3QgaWYgbmVlZGVkLgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0b19hZGRycywgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgdG9fYWRkcnMgPSBbZW1haWwgZm9yIChuYW1lLCBlbWFpbCkgaW4gZ2V0YWRkcmVzc2VzKFt0b19hZGRyc10pXQorICAgICAgICAgICAgc2VsZi5zbXRwLnNlbmRtYWlsKHNlbGYuZW52ZWxvcGVzZW5kZXIsIHRvX2FkZHJzLCBtc2cpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcqKiogRXJyb3Igc2VuZGluZyBlbWFpbCAqKipcbicpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcqKiogJXNcbicgJSBzeXMuZXhjX2luZm8oKVsxXSkKKyAgICAgICAgICAgIHNlbGYuc210cC5xdWl0KCkKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKworY2xhc3MgT3V0cHV0TWFpbGVyKE1haWxlcik6CisgICAgIiIiV3JpdGUgZW1haWxzIHRvIGFuIG91dHB1dCBzdHJlYW0sIGJyYWNrZXRlZCBieSBsaW5lcyBvZiAnPScgY2hhcmFjdGVycy4KKworICAgIFRoaXMgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4iIiIKKworICAgIFNFUEFSQVRPUiA9ICc9JyAqIDc1ICsgJ1xuJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGYpOgorICAgICAgICBzZWxmLmYgPSBmCisKKyAgICBkZWYgc2VuZChzZWxmLCBsaW5lcywgdG9fYWRkcnMpOgorICAgICAgICB3cml0ZV9zdHIoc2VsZi5mLCBzZWxmLlNFUEFSQVRPUikKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICB3cml0ZV9zdHIoc2VsZi5mLCBsaW5lKQorICAgICAgICB3cml0ZV9zdHIoc2VsZi5mLCBzZWxmLlNFUEFSQVRPUikKKworCitkZWYgZ2V0X2dpdF9kaXIoKToKKyAgICAiIiJEZXRlcm1pbmUgR0lUX0RJUi4KKworICAgIERldGVybWluZSBHSVRfRElSIGVpdGhlciBmcm9tIHRoZSBHSVRfRElSIGVudmlyb25tZW50IHZhcmlhYmxlIG9yCisgICAgZnJvbSB0aGUgd29ya2luZyBkaXJlY3RvcnksIHVzaW5nIEdpdCdzIHVzdWFsIHJ1bGVzLiIiIgorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcmVhZF9naXRfb3V0cHV0KFsncmV2LXBhcnNlJywgJy0tZ2l0LWRpciddKQorICAgIGV4Y2VwdCBDb21tYW5kRXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ2ZhdGFsOiBnaXRfbXVsdGltYWlsOiBub3QgaW4gYSBnaXQgZGlyZWN0b3J5XG4nKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKK2NsYXNzIEVudmlyb25tZW50KG9iamVjdCk6CisgICAgIiIiRGVzY3JpYmVzIHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgcHVzaCBpcyBvY2N1cnJpbmcuCisKKyAgICBBbiBFbnZpcm9ubWVudCBvYmplY3QgZW5jYXBzdWxhdGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhbAorICAgIGVudmlyb25tZW50LiAgRm9yIGV4YW1wbGUsIGl0IGtub3dzIGhvdyB0byBkZXRlcm1pbmU6CisKKyAgICAqIHRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5IHRvIHdoaWNoIHRoZSBwdXNoIG9jY3VycmVkCisKKyAgICAqIHdoYXQgdXNlciBkaWQgdGhlIHB1c2gKKworICAgICogd2hhdCB1c2VycyB3YW50IHRvIGJlIGluZm9ybWVkIGFib3V0IHZhcmlvdXMgdHlwZXMgb2YgY2hhbmdlcy4KKworICAgIEFuIEVudmlyb25tZW50IG9iamVjdCBpcyBleHBlY3RlZCB0byBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKworICAgICAgICBnZXRfcmVwb19zaG9ydG5hbWUoKQorCisgICAgICAgICAgICBSZXR1cm4gYSBzaG9ydCBuYW1lIGZvciB0aGUgcmVwb3NpdG9yeSwgZm9yIGRpc3BsYXkKKyAgICAgICAgICAgIHB1cnBvc2VzLgorCisgICAgICAgIGdldF9yZXBvX3BhdGgoKQorCisgICAgICAgICAgICBSZXR1cm4gdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIEdpdCByZXBvc2l0b3J5LgorCisgICAgICAgIGdldF9lbWFpbHByZWZpeCgpCisKKyAgICAgICAgICAgIFJldHVybiBhIHN0cmluZyB0aGF0IHdpbGwgYmUgcHJlZml4ZWQgdG8gZXZlcnkgZW1haWwncworICAgICAgICAgICAgc3ViamVjdC4KKworICAgICAgICBnZXRfcHVzaGVyKCkKKworICAgICAgICAgICAgUmV0dXJuIHRoZSB1c2VybmFtZSBvZiB0aGUgcGVyc29uIHdobyBwdXNoZWQgdGhlIGNoYW5nZXMuCisgICAgICAgICAgICBUaGlzIHZhbHVlIGlzIHVzZWQgaW4gdGhlIGVtYWlsIGJvZHkgdG8gaW5kaWNhdGUgd2hvCisgICAgICAgICAgICBwdXNoZWQgdGhlIGNoYW5nZS4KKworICAgICAgICBnZXRfcHVzaGVyX2VtYWlsKCkgKG1heSByZXR1cm4gTm9uZSkKKworICAgICAgICAgICAgUmV0dXJuIHRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSBwZXJzb24gd2hvIHB1c2hlZCB0aGUKKyAgICAgICAgICAgIGNoYW5nZXMuICBUaGUgdmFsdWUgc2hvdWxkIGJlIGEgc2luZ2xlIFJGQyAyODIyIGVtYWlsCisgICAgICAgICAgICBhZGRyZXNzIGFzIGEgc3RyaW5nOyBlLmcuLCAiSm9lIFVzZXIgPHVzZXJAZXhhbXBsZS5jb20+IgorICAgICAgICAgICAgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgInVzZXJAZXhhbXBsZS5jb20iLiAgSWYgc2V0LCB0aGUKKyAgICAgICAgICAgIHZhbHVlIGlzIHVzZWQgYXMgdGhlIFJlcGx5LVRvIGFkZHJlc3MgZm9yIHJlZmNoYW5nZQorICAgICAgICAgICAgZW1haWxzLiAgSWYgaXQgaXMgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgdGhlIHB1c2hlcidzCisgICAgICAgICAgICBlbWFpbCwgdGhpcyBhdHRyaWJ1dGUgc2hvdWxkIGJlIHNldCB0byBOb25lIChpbiB3aGljaCBjYXNlCisgICAgICAgICAgICBubyBSZXBseS1UbyBoZWFkZXIgd2lsbCBiZSBvdXRwdXQpLgorCisgICAgICAgIGdldF9zZW5kZXIoKQorCisgICAgICAgICAgICBSZXR1cm4gdGhlIGFkZHJlc3MgdG8gYmUgdXNlZCBhcyB0aGUgJ0Zyb20nIGVtYWlsIGFkZHJlc3MKKyAgICAgICAgICAgIGluIHRoZSBlbWFpbCBlbnZlbG9wZS4KKworICAgICAgICBnZXRfZnJvbWFkZHIoY2hhbmdlPU5vbmUpCisKKyAgICAgICAgICAgIFJldHVybiB0aGUgJ0Zyb20nIGVtYWlsIGFkZHJlc3MgdXNlZCBpbiB0aGUgZW1haWwgJ0Zyb206JworICAgICAgICAgICAgaGVhZGVycy4gIElmIHRoZSBjaGFuZ2UgaXMga25vd24gd2hlbiB0aGlzIGZ1bmN0aW9uIGlzCisgICAgICAgICAgICBjYWxsZWQsIGl0IGlzIHBhc3NlZCBpbiBhcyB0aGUgJ2NoYW5nZScgcGFyYW1ldGVyLiAgKE1heQorICAgICAgICAgICAgYmUgYSBmdWxsIFJGQyAyODIyIGVtYWlsIGFkZHJlc3MgbGlrZSAnSm9lIFVzZXIKKyAgICAgICAgICAgIDx1c2VyQGV4YW1wbGUuY29tPicuKQorCisgICAgICAgIGdldF9hZG1pbmlzdHJhdG9yKCkKKworICAgICAgICAgICAgUmV0dXJuIHRoZSBuYW1lIGFuZC9vciBlbWFpbCBvZiB0aGUgcmVwb3NpdG9yeQorICAgICAgICAgICAgYWRtaW5pc3RyYXRvci4gIFRoaXMgdmFsdWUgaXMgdXNlZCBpbiB0aGUgZm9vdGVyIGFzIHRoZQorICAgICAgICAgICAgcGVyc29uIHRvIHdob20gcmVxdWVzdHMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZQorICAgICAgICAgICAgbm90aWZpY2F0aW9uIGxpc3Qgc2hvdWxkIGJlIHNlbnQuICBJZGVhbGx5LCBpdCBzaG91bGQKKyAgICAgICAgICAgIGluY2x1ZGUgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLgorCisgICAgICAgIGdldF9yZXBseV90b19yZWZjaGFuZ2UoKQorICAgICAgICBnZXRfcmVwbHlfdG9fY29tbWl0KCkKKworICAgICAgICAgICAgUmV0dXJuIHRoZSBhZGRyZXNzIHRvIHVzZSBpbiB0aGUgZW1haWwgIlJlcGx5LVRvIiBoZWFkZXIsCisgICAgICAgICAgICBhcyBhIHN0cmluZy4gIFRoZXNlIGNhbiBiZSBhbiBSRkMgMjgyMiBlbWFpbCBhZGRyZXNzLCBvcgorICAgICAgICAgICAgTm9uZSB0byBvbWl0IHRoZSAiUmVwbHktVG8iIGhlYWRlci4KKyAgICAgICAgICAgIGdldF9yZXBseV90b19yZWZjaGFuZ2UoKSBpcyB1c2VkIGZvciByZWZjaGFuZ2UgZW1haWxzOworICAgICAgICAgICAgZ2V0X3JlcGx5X3RvX2NvbW1pdCgpIGlzIHVzZWQgZm9yIGluZGl2aWR1YWwgY29tbWl0CisgICAgICAgICAgICBlbWFpbHMuCisKKyAgICAgICAgZ2V0X3JlZl9maWx0ZXJfcmVnZXgoKQorCisgICAgICAgICAgICBSZXR1cm4gYSB0dXBsZSAtLSBhIGNvbXBpbGVkIHJlZ2V4LCBhbmQgYSBib29sZWFuIGluZGljYXRpbmcKKyAgICAgICAgICAgIHdoZXRoZXIgdGhlIHJlZ2V4IHBpY2tzIHJlZnMgdG8gaW5jbHVkZSAoaWYgRmFsc2UsIHRoZSByZWdleAorICAgICAgICAgICAgbWF0Y2hlcyBvbiByZWZzIHRvIGV4Y2x1ZGUpLgorCisgICAgICAgIGdldF9kZWZhdWx0X3JlZl9pZ25vcmVfcmVnZXgoKQorCisgICAgICAgICAgICBSZXR1cm4gYSByZWdleCB0aGF0IHNob3VsZCBiZSBpZ25vcmVkIGZvciBib3RoIHdoYXQgZW1haWxzCisgICAgICAgICAgICB0byBzZW5kIGFuZCB3aGVuIGNvbXB1dGluZyB3aGF0IGNvbW1pdHMgYXJlIGNvbnNpZGVyZWQgbmV3CisgICAgICAgICAgICB0byB0aGUgcmVwb3NpdG9yeS4gIERlZmF1bHQgaXMgIl5yZWZzL25vdGVzLyIuCisKKyAgICBUaGV5IHNob3VsZCBhbHNvIGRlZmluZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CisKKyAgICAgICAgYW5ub3VuY2Vfc2hvd19zaG9ydGxvZyAoYm9vbCkKKworICAgICAgICAgICAgVHJ1ZSBpZmYgYW5ub3VuY2UgZW1haWxzIHNob3VsZCBpbmNsdWRlIGEgc2hvcnRsb2cuCisKKyAgICAgICAgY29tbWl0X2VtYWlsX2Zvcm1hdCAoc3RyaW5nKQorCisgICAgICAgICAgICBJZiAiaHRtbCIsIGdlbmVyYXRlIGNvbW1pdCBlbWFpbHMgaW4gSFRNTCBpbnN0ZWFkIG9mIHBsYWluIHRleHQKKyAgICAgICAgICAgIHVzZWQgYnkgZGVmYXVsdC4KKworICAgICAgICByZWZjaGFuZ2Vfc2hvd2dyYXBoIChib29sKQorCisgICAgICAgICAgICBUcnVlIGlmZiByZWZjaGFuZ2VzIGVtYWlscyBzaG91bGQgaW5jbHVkZSBhIGRldGFpbGVkIGdyYXBoLgorCisgICAgICAgIHJlZmNoYW5nZV9zaG93bG9nIChib29sKQorCisgICAgICAgICAgICBUcnVlIGlmZiByZWZjaGFuZ2VzIGVtYWlscyBzaG91bGQgaW5jbHVkZSBhIGRldGFpbGVkIGxvZy4KKworICAgICAgICBkaWZmb3B0cyAobGlzdCBvZiBzdHJpbmdzKQorCisgICAgICAgICAgICBUaGUgb3B0aW9ucyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gJ2dpdCBkaWZmJyBmb3IgdGhlCisgICAgICAgICAgICBzdW1tYXJ5IGVtYWlsLiAgVGhlIHZhbHVlIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3RyaW5ncworICAgICAgICAgICAgcmVwcmVzZW50aW5nIHdvcmRzIHRvIGJlIHBhc3NlZCB0byB0aGUgY29tbWFuZC4KKworICAgICAgICBncmFwaG9wdHMgKGxpc3Qgb2Ygc3RyaW5ncykKKworICAgICAgICAgICAgQW5hbG9nb3VzIHRvIGRpZmZvcHRzLCBidXQgY29udGFpbnMgb3B0aW9ucyBwYXNzZWQgdG8KKyAgICAgICAgICAgICdnaXQgbG9nIC0tZ3JhcGgnIHdoZW4gZ2VuZXJhdGluZyB0aGUgZGV0YWlsZWQgZ3JhcGggZm9yCisgICAgICAgICAgICBhIHNldCBvZiBjb21taXRzIChzZWUgcmVmY2hhbmdlX3Nob3dncmFwaCkKKworICAgICAgICBsb2dvcHRzIChsaXN0IG9mIHN0cmluZ3MpCisKKyAgICAgICAgICAgIEFuYWxvZ291cyB0byBkaWZmb3B0cywgYnV0IGNvbnRhaW5zIG9wdGlvbnMgcGFzc2VkIHRvCisgICAgICAgICAgICAnZ2l0IGxvZycgd2hlbiBnZW5lcmF0aW5nIHRoZSBkZXRhaWxlZCBsb2cgZm9yIGEgc2V0IG9mCisgICAgICAgICAgICBjb21taXRzIChzZWUgcmVmY2hhbmdlX3Nob3dsb2cpCisKKyAgICAgICAgY29tbWl0bG9nb3B0cyAobGlzdCBvZiBzdHJpbmdzKQorCisgICAgICAgICAgICBUaGUgb3B0aW9ucyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gJ2dpdCBsb2cnIGZvciBlYWNoCisgICAgICAgICAgICBjb21taXQgbWFpbC4gIFRoZSB2YWx1ZSBzaG91bGQgYmUgYSBsaXN0IG9mIHN0cmluZ3MKKyAgICAgICAgICAgIHJlcHJlc2VudGluZyB3b3JkcyB0byBiZSBwYXNzZWQgdG8gdGhlIGNvbW1hbmQuCisKKyAgICAgICAgZGF0ZV9zdWJzdGl0dXRlIChzdHJpbmcpCisKKyAgICAgICAgICAgIFN0cmluZyB0byBiZSB1c2VkIGluIHN1YnN0aXR1dGlvbiBmb3IgJ0RhdGU6JyBhdCBzdGFydCBvZgorICAgICAgICAgICAgbGluZSBpbiB0aGUgb3V0cHV0IG9mICdnaXQgbG9nJy4KKworICAgICAgICBxdWlldCAoYm9vbCkKKyAgICAgICAgICAgIE9uIHN1Y2Nlc3MgZG8gbm90IHdyaXRlIHRvIHN0ZGVycgorCisgICAgICAgIHN0ZG91dCAoYm9vbCkKKyAgICAgICAgICAgIFdyaXRlIGVtYWlsIHRvIHN0ZG91dCByYXRoZXIgdGhhbiBlbWFpbGluZy4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcKKworICAgICAgICBjb21iaW5lX3doZW5fc2luZ2xlX2NvbW1pdCAoYm9vbCkKKworICAgICAgICAgICAgVHJ1ZSBpZiBhIGNvbWJpbmVkIGVtYWlsIHNob3VsZCBiZSBwcm9kdWNlZCB3aGVuIGEgc2luZ2xlCisgICAgICAgICAgICBuZXcgY29tbWl0IGlzIHB1c2hlZCB0byBhIGJyYW5jaCwgRmFsc2Ugb3RoZXJ3aXNlLgorCisgICAgICAgIGZyb21fcmVmY2hhbmdlLCBmcm9tX2NvbW1pdCAoc3RyaW5ncykKKworICAgICAgICAgICAgQWRkcmVzc2VzIHRvIHVzZSBmb3IgdGhlIEZyb206IGZpZWxkIGZvciByZWZjaGFuZ2UgZW1haWxzCisgICAgICAgICAgICBhbmQgY29tbWl0IGVtYWlscyByZXNwZWN0aXZlbHkuICBTZXQgZnJvbQorICAgICAgICAgICAgbXVsdGltYWlsaG9vay5mcm9tUmVmY2hhbmdlIGFuZCBtdWx0aW1haWxob29rLmZyb21Db21taXQKKyAgICAgICAgICAgIGJ5IENvbmZpZ0Vudmlyb25tZW50TWl4aW4uCisKKyAgICAiIiIKKworICAgIFJFUE9fTkFNRV9SRSA9IHJlLmNvbXBpbGUocideKD9QPG5hbWU+Lis/KSg/OlwuZ2l0KSQnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9zZW52PU5vbmUpOgorICAgICAgICBzZWxmLm9zZW52ID0gb3NlbnYgb3Igb3MuZW52aXJvbgorICAgICAgICBzZWxmLmFubm91bmNlX3Nob3dfc2hvcnRsb2cgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbW1pdF9lbWFpbF9mb3JtYXQgPSAidGV4dCIKKyAgICAgICAgc2VsZi5tYXhjb21taXRlbWFpbHMgPSA1MDAKKyAgICAgICAgc2VsZi5kaWZmb3B0cyA9IFsnLS1zdGF0JywgJy0tc3VtbWFyeScsICctLWZpbmQtY29waWVzLWhhcmRlciddCisgICAgICAgIHNlbGYuZ3JhcGhvcHRzID0gWyctLW9uZWxpbmUnLCAnLS1kZWNvcmF0ZSddCisgICAgICAgIHNlbGYubG9nb3B0cyA9IFtdCisgICAgICAgIHNlbGYucmVmY2hhbmdlX3Nob3dncmFwaCA9IEZhbHNlCisgICAgICAgIHNlbGYucmVmY2hhbmdlX3Nob3dsb2cgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbW1pdGxvZ29wdHMgPSBbJy1DJywgJy0tc3RhdCcsICctcCcsICctLWNjJ10KKyAgICAgICAgc2VsZi5kYXRlX3N1YnN0aXR1dGUgPSAnQXV0aG9yRGF0ZTogJworICAgICAgICBzZWxmLnF1aWV0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5zdGRvdXQgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbWJpbmVfd2hlbl9zaW5nbGVfY29tbWl0ID0gVHJ1ZQorCisgICAgICAgIHNlbGYuQ09NUFVURURfS0VZUyA9IFsKKyAgICAgICAgICAgICdhZG1pbmlzdHJhdG9yJywKKyAgICAgICAgICAgICdjaGFyc2V0JywKKyAgICAgICAgICAgICdlbWFpbHByZWZpeCcsCisgICAgICAgICAgICAncHVzaGVyJywKKyAgICAgICAgICAgICdwdXNoZXJfZW1haWwnLAorICAgICAgICAgICAgJ3JlcG9fcGF0aCcsCisgICAgICAgICAgICAncmVwb19zaG9ydG5hbWUnLAorICAgICAgICAgICAgJ3NlbmRlcicsCisgICAgICAgICAgICBdCisKKyAgICAgICAgc2VsZi5fdmFsdWVzID0gTm9uZQorCisgICAgZGVmIGdldF9yZXBvX3Nob3J0bmFtZShzZWxmKToKKyAgICAgICAgIiIiVXNlIHRoZSBsYXN0IHBhcnQgb2YgdGhlIHJlcG8gcGF0aCwgd2l0aCAiLmdpdCIgc3RyaXBwZWQgb2ZmIGlmIHByZXNlbnQuIiIiCisKKyAgICAgICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguYWJzcGF0aChzZWxmLmdldF9yZXBvX3BhdGgoKSkpCisgICAgICAgIG0gPSBzZWxmLlJFUE9fTkFNRV9SRS5tYXRjaChiYXNlbmFtZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKCduYW1lJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBiYXNlbmFtZQorCisgICAgZGVmIGdldF9wdXNoZXIoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGdldF9wdXNoZXJfZW1haWwoc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X2Zyb21hZGRyKHNlbGYsIGNoYW5nZT1Ob25lKToKKyAgICAgICAgY29uZmlnID0gQ29uZmlnKCd1c2VyJykKKyAgICAgICAgZnJvbW5hbWUgPSBjb25maWcuZ2V0KCduYW1lJywgZGVmYXVsdD0nJykKKyAgICAgICAgZnJvbWVtYWlsID0gY29uZmlnLmdldCgnZW1haWwnLCBkZWZhdWx0PScnKQorICAgICAgICBpZiBmcm9tZW1haWw6CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0YWRkcihbZnJvbW5hbWUsIGZyb21lbWFpbF0pCisgICAgICAgIHJldHVybiBzZWxmLmdldF9zZW5kZXIoKQorCisgICAgZGVmIGdldF9hZG1pbmlzdHJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gJ3RoZSBhZG1pbmlzdHJhdG9yIG9mIHRoaXMgcmVwb3NpdG9yeScKKworICAgIGRlZiBnZXRfZW1haWxwcmVmaXgoc2VsZik6CisgICAgICAgIHJldHVybiAnJworCisgICAgZGVmIGdldF9yZXBvX3BhdGgoc2VsZik6CisgICAgICAgIGlmIHJlYWRfZ2l0X291dHB1dChbJ3Jldi1wYXJzZScsICctLWlzLWJhcmUtcmVwb3NpdG9yeSddKSA9PSAndHJ1ZSc6CisgICAgICAgICAgICBwYXRoID0gZ2V0X2dpdF9kaXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGF0aCA9IHJlYWRfZ2l0X291dHB1dChbJ3Jldi1wYXJzZScsICctLXNob3ctdG9wbGV2ZWwnXSkKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguYWJzcGF0aChwYXRoKQorCisgICAgZGVmIGdldF9jaGFyc2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gQ0hBUlNFVAorCisgICAgZGVmIGdldF92YWx1ZXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIGRpY3Rpb25hcnkge2tleXdvcmQ6IGV4cGFuc2lvbn0gZm9yIHRoaXMgRW52aXJvbm1lbnQuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IENoYW5nZS5fY29tcHV0ZV92YWx1ZXMoKS4gIFRoZSBrZXlzCisgICAgICAgIGluIHRoZSByZXR1cm5lZCBkaWN0aW9uYXJ5IGFyZSBhdmFpbGFibGUgdG8gYmUgdXNlZCBpbiBhbnkgb2YKKyAgICAgICAgdGhlIHRlbXBsYXRlcy4gIFRoZSBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQgYnkgY2FsbGluZworICAgICAgICBzZWxmLmdldF9OQU1FKCkgZm9yIGVhY2ggb2YgdGhlIGF0dHJpYnV0ZXMgbmFtZWQgaW4KKyAgICAgICAgQ09NUFVURURfS0VZUyBhbmQgcmVjb3JkaW5nIHRob3NlIHRoYXQgZG8gbm90IHJldHVybiBOb25lLgorICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGFsd2F5cyBhIG5ldyBkaWN0aW9uYXJ5LiIiIgorCisgICAgICAgIGlmIHNlbGYuX3ZhbHVlcyBpcyBOb25lOgorICAgICAgICAgICAgdmFsdWVzID0ge30KKworICAgICAgICAgICAgZm9yIGtleSBpbiBzZWxmLkNPTVBVVEVEX0tFWVM6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKHNlbGYsICdnZXRfJXMnICUgKGtleSwpKSgpCisgICAgICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlc1trZXldID0gdmFsdWUKKworICAgICAgICAgICAgc2VsZi5fdmFsdWVzID0gdmFsdWVzCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlcy5jb3B5KCkKKworICAgIGRlZiBnZXRfcmVmY2hhbmdlX3JlY2lwaWVudHMoc2VsZiwgcmVmY2hhbmdlKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZWNpcGllbnRzIGZvciBub3RpZmljYXRpb25zIGFib3V0IHJlZmNoYW5nZS4KKworICAgICAgICBSZXR1cm4gdGhlIGxpc3Qgb2YgZW1haWwgYWRkcmVzc2VzIHRvIHdoaWNoIG5vdGlmaWNhdGlvbnMKKyAgICAgICAgYWJvdXQgdGhlIHNwZWNpZmllZCBSZWZlcmVuY2VDaGFuZ2Ugc2hvdWxkIGJlIHNlbnQuIiIiCisKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgZ2V0X2Fubm91bmNlX3JlY2lwaWVudHMoc2VsZiwgYW5ub3RhdGVkX3RhZ19jaGFuZ2UpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHJlY2lwaWVudHMgZm9yIG5vdGlmaWNhdGlvbnMgYWJvdXQgYW5ub3RhdGVkX3RhZ19jaGFuZ2UuCisKKyAgICAgICAgUmV0dXJuIHRoZSBsaXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byB3aGljaCBub3RpZmljYXRpb25zCisgICAgICAgIGFib3V0IHRoZSBzcGVjaWZpZWQgQW5ub3RhdGVkVGFnQ2hhbmdlIHNob3VsZCBiZSBzZW50LiIiIgorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGdldF9yZXBseV90b19yZWZjaGFuZ2Uoc2VsZiwgcmVmY2hhbmdlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X3B1c2hlcl9lbWFpbCgpCisKKyAgICBkZWYgZ2V0X3JldmlzaW9uX3JlY2lwaWVudHMoc2VsZiwgcmV2aXNpb24pOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHJlY2lwaWVudHMgZm9yIG1lc3NhZ2VzIGFib3V0IHJldmlzaW9uLgorCisgICAgICAgIFJldHVybiB0aGUgbGlzdCBvZiBlbWFpbCBhZGRyZXNzZXMgdG8gd2hpY2ggbm90aWZpY2F0aW9ucworICAgICAgICBhYm91dCB0aGUgc3BlY2lmaWVkIFJldmlzaW9uIHNob3VsZCBiZSBzZW50LiAgVGhpcyBtZXRob2QKKyAgICAgICAgY291bGQgYmUgb3ZlcnJpZGRlbiwgZm9yIGV4YW1wbGUsIHRvIHRha2UgaW50byBhY2NvdW50IHRoZQorICAgICAgICBjb250ZW50cyBvZiB0aGUgcmV2aXNpb24gd2hlbiBkZWNpZGluZyB3aG9tIHRvIG5vdGlmeSBhYm91dAorICAgICAgICBpdC4gIEZvciBleGFtcGxlLCB0aGVyZSBjb3VsZCBiZSBhIHNjaGVtZSBmb3IgdXNlcnMgdG8gZXhwcmVzcworICAgICAgICBpbnRlcmVzdCBpbiBwYXJ0aWN1bGFyIGZpbGVzIG9yIHN1YmRpcmVjdG9yaWVzLCBhbmQgb25seQorICAgICAgICByZWNlaXZlIG5vdGlmaWNhdGlvbiBlbWFpbHMgZm9yIHJldmlzaW9ucyB0aGF0IGFmZmVjdGluZyB0aG9zZQorICAgICAgICBmaWxlcy4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBnZXRfcmVwbHlfdG9fY29tbWl0KHNlbGYsIHJldmlzaW9uKToKKyAgICAgICAgcmV0dXJuIHJldmlzaW9uLmF1dGhvcgorCisgICAgZGVmIGdldF9kZWZhdWx0X3JlZl9pZ25vcmVfcmVnZXgoc2VsZik6CisgICAgICAgICMgVGhlIGNvbW1pdCBtZXNzYWdlcyBvZiBnaXQgbm90ZXMgYXJlIGVzc2VudGlhbGx5IG1lYW5pbmdsZXNzCisgICAgICAgICMgYW5kICJmaWxlbmFtZXMiIGluIGdpdCBub3RlcyBjb21taXRzIGFyZSBhbiBpbXBsZW1lbnRhdGlvbmFsCisgICAgICAgICMgZGV0YWlsIHRoYXQgbWlnaHQgc3VycHJpc2UgdXNlcnMgYXQgZmlyc3QuICBBcyBzdWNoLCB3ZQorICAgICAgICAjIHdvdWxkIG5lZWQgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBtZXRob2QgZm9yIGhhbmRsaW5nIGVtYWlscworICAgICAgICAjIG9mIGdpdCBub3RlcyBpbiBvcmRlciBmb3IgdGhlbSB0byBiZSBvZiBiZW5lZml0IGZvciB1c2VycywKKyAgICAgICAgIyB3aGljaCB3ZSBzaW1wbHkgZG8gbm90IGhhdmUgcmlnaHQgbm93LgorICAgICAgICByZXR1cm4gIl5yZWZzL25vdGVzLyIKKworICAgIGRlZiBmaWx0ZXJfYm9keShzZWxmLCBsaW5lcyk6CisgICAgICAgICIiIkZpbHRlciB0aGUgbGluZXMgaW50ZW5kZWQgZm9yIGFuIGVtYWlsIGJvZHkuCisKKyAgICAgICAgbGluZXMgaXMgYW4gaXRlcmFibGUgb3ZlciB0aGUgbGluZXMgdGhhdCB3b3VsZCBnbyBpbnRvIHRoZQorICAgICAgICBlbWFpbCBib2R5LiAgRmlsdGVyIGl0IChlLmcuLCBsaW1pdCB0aGUgbnVtYmVyIG9mIGxpbmVzLCB0aGUKKyAgICAgICAgbGluZSBsZW5ndGgsIGNoYXJhY3RlciBzZXQsIGV0Yy4pLCByZXR1cm5pbmcgYW5vdGhlciBpdGVyYWJsZS4KKyAgICAgICAgU2VlIEZpbHRlckxpbmVzRW52aXJvbm1lbnRNaXhpbiBhbmQgTWF4bGluZXNFbnZpcm9ubWVudE1peGluCisgICAgICAgIGZvciBjbGFzc2VzIGltcGxlbWVudGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkuIiIiCisKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgbG9nX21zZyhzZWxmLCBtc2cpOgorICAgICAgICAiIiJXcml0ZSB0aGUgc3RyaW5nIG1zZyBvbiBhIGxvZyBmaWxlIG9yIG9uIHN0ZGVyci4KKworICAgICAgICBTZW5kcyB0aGUgdGV4dCB0byBzdGRlcnIgYnkgZGVmYXVsdCwgb3ZlcnJpZGUgdG8gY2hhbmdlIHRoZSBiZWhhdmlvci4iIiIKKyAgICAgICAgd3JpdGVfc3RyKHN5cy5zdGRlcnIsIG1zZykKKworICAgIGRlZiBsb2dfd2FybmluZyhzZWxmLCBtc2cpOgorICAgICAgICAiIiJXcml0ZSB0aGUgc3RyaW5nIG1zZyBvbiBhIGxvZyBmaWxlIG9yIG9uIHN0ZGVyci4KKworICAgICAgICBTZW5kcyB0aGUgdGV4dCB0byBzdGRlcnIgYnkgZGVmYXVsdCwgb3ZlcnJpZGUgdG8gY2hhbmdlIHRoZSBiZWhhdmlvci4iIiIKKyAgICAgICAgd3JpdGVfc3RyKHN5cy5zdGRlcnIsIG1zZykKKworICAgIGRlZiBsb2dfZXJyb3Ioc2VsZiwgbXNnKToKKyAgICAgICAgIiIiV3JpdGUgdGhlIHN0cmluZyBtc2cgb24gYSBsb2cgZmlsZSBvciBvbiBzdGRlcnIuCisKKyAgICAgICAgU2VuZHMgdGhlIHRleHQgdG8gc3RkZXJyIGJ5IGRlZmF1bHQsIG92ZXJyaWRlIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3IuIiIiCisgICAgICAgIHdyaXRlX3N0cihzeXMuc3RkZXJyLCBtc2cpCisKKworY2xhc3MgQ29uZmlnRW52aXJvbm1lbnRNaXhpbihFbnZpcm9ubWVudCk6CisgICAgIiIiQSBtaXhpbiB0aGF0IHNldHMgc2VsZi5jb25maWcgdG8gaXRzIGNvbnN0cnVjdG9yJ3MgY29uZmlnIGFyZ3VtZW50LgorCisgICAgVGhpcyBjbGFzcydzIGNvbnN0cnVjdG9yIGNvbnN1bWVzIHRoZSAiY29uZmlnIiBhcmd1bWVudC4KKworICAgIE1peGlucyB0aGF0IG5lZWQgdG8gaW5zcGVjdCB0aGUgY29uZmlnIHNob3VsZCBpbmhlcml0IGZyb20gdGhpcworICAgIGNsYXNzICgxKSB0byBtYWtlIHN1cmUgdGhhdCAiY29uZmlnIiBpcyBzdGlsbCBpbiB0aGUgY29uc3RydWN0b3IKKyAgICBhcmd1bWVudHMgd2l0aCBpdHMgb3duIGNvbnN0cnVjdG9yIHJ1bnMgYW5kL29yICgyKSB0byBiZSBzdXJlIHRoYXQKKyAgICBzZWxmLmNvbmZpZyBpcyBzZXQgYWZ0ZXIgY29uc3RydWN0aW9uLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgKiprdyk6CisgICAgICAgIHN1cGVyKENvbmZpZ0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisgICAgICAgIHNlbGYuY29uZmlnID0gY29uZmlnCisKKworY2xhc3MgQ29uZmlnT3B0aW9uc0Vudmlyb25tZW50TWl4aW4oQ29uZmlnRW52aXJvbm1lbnRNaXhpbik6CisgICAgIiIiQW4gRW52aXJvbm1lbnQgdGhhdCByZWFkcyBtb3N0IG9mIGl0cyBpbmZvcm1hdGlvbiBmcm9tICJnaXQgY29uZmlnIi4iIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZm9yYmlkX2ZpZWxkX3ZhbHVlcyhuYW1lLCB2YWx1ZSwgZm9yYmlkZGVuKToKKyAgICAgICAgZm9yIGZvcmJpZGRlbl92YWwgaW4gZm9yYmlkZGVuOgorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmUgYW5kIHZhbHVlLmxvd2VyKCkgPT0gZm9yYmlkZGVuOgorICAgICAgICAgICAgICAgIHJhaXNlIENvbmZpZ3VyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICciJXMiIGlzIG5vdCBhbiBhbGxvd2VkIHNldHRpbmcgZm9yICVzJyAlICh2YWx1ZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgKiprdyk6CisgICAgICAgIHN1cGVyKENvbmZpZ09wdGlvbnNFbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIGNvbmZpZz1jb25maWcsICoqa3cKKyAgICAgICAgICAgICkKKworICAgICAgICBmb3IgdmFyLCBjZmcgaW4gKAorICAgICAgICAgICAgICAgICgnYW5ub3VuY2Vfc2hvd19zaG9ydGxvZycsICdhbm5vdW5jZXNob3J0bG9nJyksCisgICAgICAgICAgICAgICAgKCdyZWZjaGFuZ2Vfc2hvd2dyYXBoJywgJ3JlZmNoYW5nZVNob3dHcmFwaCcpLAorICAgICAgICAgICAgICAgICgncmVmY2hhbmdlX3Nob3dsb2cnLCAncmVmY2hhbmdlc2hvd2xvZycpLAorICAgICAgICAgICAgICAgICgncXVpZXQnLCAncXVpZXQnKSwKKyAgICAgICAgICAgICAgICAoJ3N0ZG91dCcsICdzdGRvdXQnKSwKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgdmFsID0gY29uZmlnLmdldF9ib29sKGNmZykKKyAgICAgICAgICAgIGlmIHZhbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIHZhciwgdmFsKQorCisgICAgICAgIGNvbW1pdF9lbWFpbF9mb3JtYXQgPSBjb25maWcuZ2V0KCdjb21taXRFbWFpbEZvcm1hdCcpCisgICAgICAgIGlmIGNvbW1pdF9lbWFpbF9mb3JtYXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBjb21taXRfZW1haWxfZm9ybWF0ICE9ICJodG1sIiBhbmQgY29tbWl0X2VtYWlsX2Zvcm1hdCAhPSAidGV4dCI6CisgICAgICAgICAgICAgICAgc2VsZi5sb2dfd2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgJyoqKiBVbmtub3duIHZhbHVlIGZvciBtdWx0aW1haWxob29rLmNvbW1pdEVtYWlsRm9ybWF0OiAlc1xuJyAlCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdF9lbWFpbF9mb3JtYXQgKworICAgICAgICAgICAgICAgICAgICAnKioqIEV4cGVjdGVkIGVpdGhlciAidGV4dCIgb3IgImh0bWwiLiAgSWdub3JpbmcuXG4nCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5jb21taXRfZW1haWxfZm9ybWF0ID0gY29tbWl0X2VtYWlsX2Zvcm1hdAorCisgICAgICAgIG1heGNvbW1pdGVtYWlscyA9IGNvbmZpZy5nZXQoJ21heGNvbW1pdGVtYWlscycpCisgICAgICAgIGlmIG1heGNvbW1pdGVtYWlscyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLm1heGNvbW1pdGVtYWlscyA9IGludChtYXhjb21taXRlbWFpbHMpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ193YXJuaW5nKAorICAgICAgICAgICAgICAgICAgICAnKioqIE1hbGZvcm1lZCB2YWx1ZSBmb3IgbXVsdGltYWlsaG9vay5tYXhDb21taXRFbWFpbHM6ICVzXG4nCisgICAgICAgICAgICAgICAgICAgICUgbWF4Y29tbWl0ZW1haWxzICsKKyAgICAgICAgICAgICAgICAgICAgJyoqKiBFeHBlY3RlZCBhIG51bWJlci4gIElnbm9yaW5nLlxuJworICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgZGlmZm9wdHMgPSBjb25maWcuZ2V0KCdkaWZmb3B0cycpCisgICAgICAgIGlmIGRpZmZvcHRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kaWZmb3B0cyA9IHNobGV4LnNwbGl0KGRpZmZvcHRzKQorCisgICAgICAgIGdyYXBob3B0cyA9IGNvbmZpZy5nZXQoJ2dyYXBoT3B0cycpCisgICAgICAgIGlmIGdyYXBob3B0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZ3JhcGhvcHRzID0gc2hsZXguc3BsaXQoZ3JhcGhvcHRzKQorCisgICAgICAgIGxvZ29wdHMgPSBjb25maWcuZ2V0KCdsb2dvcHRzJykKKyAgICAgICAgaWYgbG9nb3B0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYubG9nb3B0cyA9IHNobGV4LnNwbGl0KGxvZ29wdHMpCisKKyAgICAgICAgY29tbWl0bG9nb3B0cyA9IGNvbmZpZy5nZXQoJ2NvbW1pdGxvZ29wdHMnKQorICAgICAgICBpZiBjb21taXRsb2dvcHRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jb21taXRsb2dvcHRzID0gc2hsZXguc3BsaXQoY29tbWl0bG9nb3B0cykKKworICAgICAgICBkYXRlX3N1YnN0aXR1dGUgPSBjb25maWcuZ2V0KCdkYXRlU3Vic3RpdHV0ZScpCisgICAgICAgIGlmIGRhdGVfc3Vic3RpdHV0ZSA9PSAnbm9uZSc6CisgICAgICAgICAgICBzZWxmLmRhdGVfc3Vic3RpdHV0ZSA9IE5vbmUKKyAgICAgICAgZWxpZiBkYXRlX3N1YnN0aXR1dGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRhdGVfc3Vic3RpdHV0ZSA9IGRhdGVfc3Vic3RpdHV0ZQorCisgICAgICAgIHJlcGx5X3RvID0gY29uZmlnLmdldCgncmVwbHlUbycpCisgICAgICAgIHNlbGYuX19yZXBseV90b19yZWZjaGFuZ2UgPSBjb25maWcuZ2V0KCdyZXBseVRvUmVmY2hhbmdlJywgZGVmYXVsdD1yZXBseV90bykKKyAgICAgICAgc2VsZi5mb3JiaWRfZmllbGRfdmFsdWVzKCdyZXBseVRvUmVmY2hhbmdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19yZXBseV90b19yZWZjaGFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ2F1dGhvciddKQorICAgICAgICBzZWxmLl9fcmVwbHlfdG9fY29tbWl0ID0gY29uZmlnLmdldCgncmVwbHlUb0NvbW1pdCcsIGRlZmF1bHQ9cmVwbHlfdG8pCisKKyAgICAgICAgZnJvbV9hZGRyID0gc2VsZi5jb25maWcuZ2V0KCdmcm9tJykKKyAgICAgICAgc2VsZi5mcm9tX3JlZmNoYW5nZSA9IGNvbmZpZy5nZXQoJ2Zyb21SZWZjaGFuZ2UnKQorICAgICAgICBzZWxmLmZvcmJpZF9maWVsZF92YWx1ZXMoJ2Zyb21SZWZjaGFuZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcm9tX3JlZmNoYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnYXV0aG9yJywgJ25vbmUnXSkKKyAgICAgICAgc2VsZi5mcm9tX2NvbW1pdCA9IGNvbmZpZy5nZXQoJ2Zyb21Db21taXQnKQorICAgICAgICBzZWxmLmZvcmJpZF9maWVsZF92YWx1ZXMoJ2Zyb21Db21taXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcm9tX2NvbW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnbm9uZSddKQorCisgICAgICAgIGNvbWJpbmUgPSBjb25maWcuZ2V0X2Jvb2woJ2NvbWJpbmVXaGVuU2luZ2xlQ29tbWl0JykKKyAgICAgICAgaWYgY29tYmluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY29tYmluZV93aGVuX3NpbmdsZV9jb21taXQgPSBjb21iaW5lCisKKyAgICBkZWYgZ2V0X2FkbWluaXN0cmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiAoCisgICAgICAgICAgICBzZWxmLmNvbmZpZy5nZXQoJ2FkbWluaXN0cmF0b3InKSBvcgorICAgICAgICAgICAgc2VsZi5nZXRfc2VuZGVyKCkgb3IKKyAgICAgICAgICAgIHN1cGVyKENvbmZpZ09wdGlvbnNFbnZpcm9ubWVudE1peGluLCBzZWxmKS5nZXRfYWRtaW5pc3RyYXRvcigpCisgICAgICAgICAgICApCisKKyAgICBkZWYgZ2V0X3JlcG9fc2hvcnRuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgc2VsZi5jb25maWcuZ2V0KCdyZXBvbmFtZScpIG9yCisgICAgICAgICAgICBzdXBlcihDb25maWdPcHRpb25zRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZ2V0X3JlcG9fc2hvcnRuYW1lKCkKKyAgICAgICAgICAgICkKKworICAgIGRlZiBnZXRfZW1haWxwcmVmaXgoc2VsZik6CisgICAgICAgIGVtYWlscHJlZml4ID0gc2VsZi5jb25maWcuZ2V0KCdlbWFpbHByZWZpeCcpCisgICAgICAgIGlmIGVtYWlscHJlZml4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZW1haWxwcmVmaXggPSBlbWFpbHByZWZpeC5zdHJpcCgpCisgICAgICAgICAgICBpZiBlbWFpbHByZWZpeDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZW1haWxwcmVmaXggKyAnICcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ1slc10gJyAlIChzZWxmLmdldF9yZXBvX3Nob3J0bmFtZSgpLCkKKworICAgIGRlZiBnZXRfc2VuZGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jb25maWcuZ2V0KCdlbnZlbG9wZXNlbmRlcicpCisKKyAgICBkZWYgcHJvY2Vzc19hZGRyKHNlbGYsIGFkZHIsIGNoYW5nZSk6CisgICAgICAgIGlmIGFkZHIubG93ZXIoKSA9PSAnYXV0aG9yJzoKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoY2hhbmdlLCAnYXV0aG9yJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoYW5nZS5hdXRob3IKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxpZiBhZGRyLmxvd2VyKCkgPT0gJ3B1c2hlcic6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfcHVzaGVyX2VtYWlsKCkKKyAgICAgICAgZWxpZiBhZGRyLmxvd2VyKCkgPT0gJ25vbmUnOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBhZGRyCisKKyAgICBkZWYgZ2V0X2Zyb21hZGRyKHNlbGYsIGNoYW5nZT1Ob25lKToKKyAgICAgICAgZnJvbWFkZHIgPSBzZWxmLmNvbmZpZy5nZXQoJ2Zyb20nKQorICAgICAgICBpZiBjaGFuZ2U6CisgICAgICAgICAgICBhbHRfZnJvbWFkZHIgPSBjaGFuZ2UuZ2V0X2FsdF9mcm9tYWRkcigpCisgICAgICAgICAgICBpZiBhbHRfZnJvbWFkZHI6CisgICAgICAgICAgICAgICAgZnJvbWFkZHIgPSBhbHRfZnJvbWFkZHIKKyAgICAgICAgaWYgZnJvbWFkZHI6CisgICAgICAgICAgICBmcm9tYWRkciA9IHNlbGYucHJvY2Vzc19hZGRyKGZyb21hZGRyLCBjaGFuZ2UpCisgICAgICAgIGlmIGZyb21hZGRyOgorICAgICAgICAgICAgcmV0dXJuIGZyb21hZGRyCisgICAgICAgIHJldHVybiBzdXBlcihDb25maWdPcHRpb25zRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZ2V0X2Zyb21hZGRyKGNoYW5nZSkKKworICAgIGRlZiBnZXRfcmVwbHlfdG9fcmVmY2hhbmdlKHNlbGYsIHJlZmNoYW5nZSk6CisgICAgICAgIGlmIHNlbGYuX19yZXBseV90b19yZWZjaGFuZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihDb25maWdPcHRpb25zRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZ2V0X3JlcGx5X3RvX3JlZmNoYW5nZShyZWZjaGFuZ2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2FkZHIoc2VsZi5fX3JlcGx5X3RvX3JlZmNoYW5nZSwgcmVmY2hhbmdlKQorCisgICAgZGVmIGdldF9yZXBseV90b19jb21taXQoc2VsZiwgcmV2aXNpb24pOgorICAgICAgICBpZiBzZWxmLl9fcmVwbHlfdG9fY29tbWl0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoQ29uZmlnT3B0aW9uc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLmdldF9yZXBseV90b19jb21taXQocmV2aXNpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzX2FkZHIoc2VsZi5fX3JlcGx5X3RvX2NvbW1pdCwgcmV2aXNpb24pCisKKyAgICBkZWYgZ2V0X3NjYW5jb21taXRmb3JjYyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuY29uZmlnLmdldCgnc2NhbmNvbW1pdGZvcmNjJykKKworCitjbGFzcyBGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4oRW52aXJvbm1lbnQpOgorICAgICIiIkhhbmRsZSBlbmNvZGluZyBhbmQgbWF4aW11bSBsaW5lIGxlbmd0aCBvZiBib2R5IGxpbmVzLgorCisgICAgICAgIGVtYWlsbWF4bGluZWxlbmd0aCAoaW50IG9yIE5vbmUpCisKKyAgICAgICAgICAgIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbnkgc2luZ2xlIGxpbmUgaW4gdGhlIGVtYWlsIGJvZHkuCisgICAgICAgICAgICBMb25nZXIgbGluZXMgYXJlIHRydW5jYXRlZCBhdCB0aGF0IGxlbmd0aCB3aXRoICcgWy4uLl0nCisgICAgICAgICAgICBhcHBlbmRlZC4KKworICAgICAgICBzdHJpY3RfdXRmOCAoYm9vbCkKKworICAgICAgICAgICAgSWYgdGhpcyBmaWVsZCBpcyBzZXQgdG8gVHJ1ZSwgdGhlbiB0aGUgZW1haWwgYm9keSB0ZXh0IGlzCisgICAgICAgICAgICBleHBlY3RlZCB0byBiZSBVVEYtOC4gIEFueSBpbnZhbGlkIGNoYXJhY3RlcnMgYXJlCisgICAgICAgICAgICBjb252ZXJ0ZWQgdG8gVStGRkZELCB0aGUgVW5pY29kZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIKKyAgICAgICAgICAgIChlbmNvZGVkIGFzIFVURi04LCBvZiBjb3Vyc2UpLgorCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyaWN0X3V0Zjg9VHJ1ZSwgZW1haWxtYXhsaW5lbGVuZ3RoPTUwMCwgKiprdyk6CisgICAgICAgIHN1cGVyKEZpbHRlckxpbmVzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKyAgICAgICAgc2VsZi5fX3N0cmljdF91dGY4ID0gc3RyaWN0X3V0ZjgKKyAgICAgICAgc2VsZi5fX2VtYWlsbWF4bGluZWxlbmd0aCA9IGVtYWlsbWF4bGluZWxlbmd0aAorCisgICAgZGVmIGZpbHRlcl9ib2R5KHNlbGYsIGxpbmVzKToKKyAgICAgICAgbGluZXMgPSBzdXBlcihGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4sIHNlbGYpLmZpbHRlcl9ib2R5KGxpbmVzKQorICAgICAgICBpZiBzZWxmLl9fc3RyaWN0X3V0Zjg6CisgICAgICAgICAgICBpZiBub3QgUFlUSE9OMzoKKyAgICAgICAgICAgICAgICBsaW5lcyA9IChsaW5lLmRlY29kZShFTkNPRElORywgJ3JlcGxhY2UnKSBmb3IgbGluZSBpbiBsaW5lcykKKyAgICAgICAgICAgICMgTGltaXQgdGhlIGxpbmUgbGVuZ3RoIGluIFVuaWNvZGUtc3BhY2UgdG8gYXZvaWQKKyAgICAgICAgICAgICMgc3BsaXR0aW5nIGNoYXJhY3RlcnM6CisgICAgICAgICAgICBpZiBzZWxmLl9fZW1haWxtYXhsaW5lbGVuZ3RoOgorICAgICAgICAgICAgICAgIGxpbmVzID0gbGltaXRfbGluZWxlbmd0aChsaW5lcywgc2VsZi5fX2VtYWlsbWF4bGluZWxlbmd0aCkKKyAgICAgICAgICAgIGlmIG5vdCBQWVRIT04zOgorICAgICAgICAgICAgICAgIGxpbmVzID0gKGxpbmUuZW5jb2RlKEVOQ09ESU5HLCAncmVwbGFjZScpIGZvciBsaW5lIGluIGxpbmVzKQorICAgICAgICBlbGlmIHNlbGYuX19lbWFpbG1heGxpbmVsZW5ndGg6CisgICAgICAgICAgICBsaW5lcyA9IGxpbWl0X2xpbmVsZW5ndGgobGluZXMsIHNlbGYuX19lbWFpbG1heGxpbmVsZW5ndGgpCisKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKworY2xhc3MgQ29uZmlnRmlsdGVyTGluZXNFbnZpcm9ubWVudE1peGluKAorICAgICAgICBDb25maWdFbnZpcm9ubWVudE1peGluLAorICAgICAgICBGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgICk6CisgICAgIiIiSGFuZGxlIGVuY29kaW5nIGFuZCBtYXhpbXVtIGxpbmUgbGVuZ3RoIGJhc2VkIG9uIGNvbmZpZy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcsICoqa3cpOgorICAgICAgICBzdHJpY3RfdXRmOCA9IGNvbmZpZy5nZXRfYm9vbCgnZW1haWxzdHJpY3R1dGY4JywgZGVmYXVsdD1Ob25lKQorICAgICAgICBpZiBzdHJpY3RfdXRmOCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGt3WydzdHJpY3RfdXRmOCddID0gc3RyaWN0X3V0ZjgKKworICAgICAgICBlbWFpbG1heGxpbmVsZW5ndGggPSBjb25maWcuZ2V0KCdlbWFpbG1heGxpbmVsZW5ndGgnKQorICAgICAgICBpZiBlbWFpbG1heGxpbmVsZW5ndGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBrd1snZW1haWxtYXhsaW5lbGVuZ3RoJ10gPSBpbnQoZW1haWxtYXhsaW5lbGVuZ3RoKQorCisgICAgICAgIHN1cGVyKENvbmZpZ0ZpbHRlckxpbmVzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBjb25maWc9Y29uZmlnLCAqKmt3CisgICAgICAgICAgICApCisKKworY2xhc3MgTWF4bGluZXNFbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICAiIiJMaW1pdCB0aGUgZW1haWwgYm9keSB0byBhIHNwZWNpZmllZCBudW1iZXIgb2YgbGluZXMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW1haWxtYXhsaW5lcywgKiprdyk6CisgICAgICAgIHN1cGVyKE1heGxpbmVzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKyAgICAgICAgc2VsZi5fX2VtYWlsbWF4bGluZXMgPSBlbWFpbG1heGxpbmVzCisKKyAgICBkZWYgZmlsdGVyX2JvZHkoc2VsZiwgbGluZXMpOgorICAgICAgICBsaW5lcyA9IHN1cGVyKE1heGxpbmVzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZmlsdGVyX2JvZHkobGluZXMpCisgICAgICAgIGlmIHNlbGYuX19lbWFpbG1heGxpbmVzOgorICAgICAgICAgICAgbGluZXMgPSBsaW1pdF9saW5lcyhsaW5lcywgc2VsZi5fX2VtYWlsbWF4bGluZXMpCisgICAgICAgIHJldHVybiBsaW5lcworCisKK2NsYXNzIENvbmZpZ01heGxpbmVzRW52aXJvbm1lbnRNaXhpbigKKyAgICAgICAgQ29uZmlnRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgTWF4bGluZXNFbnZpcm9ubWVudE1peGluLAorICAgICAgICApOgorICAgICIiIkxpbWl0IHRoZSBlbWFpbCBib2R5IHRvIHRoZSBudW1iZXIgb2YgbGluZXMgc3BlY2lmaWVkIGluIGNvbmZpZy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcsICoqa3cpOgorICAgICAgICBlbWFpbG1heGxpbmVzID0gaW50KGNvbmZpZy5nZXQoJ2VtYWlsbWF4bGluZXMnLCBkZWZhdWx0PScwJykpCisgICAgICAgIHN1cGVyKENvbmZpZ01heGxpbmVzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBjb25maWc9Y29uZmlnLAorICAgICAgICAgICAgZW1haWxtYXhsaW5lcz1lbWFpbG1heGxpbmVzLAorICAgICAgICAgICAgKiprdworICAgICAgICAgICAgKQorCisKK2NsYXNzIEZRRE5FbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICAiIiJBIG1peGluIHRoYXQgc2V0cyB0aGUgaG9zdCdzIEZRRE4gdG8gaXRzIGNvbnN0cnVjdG9yIGFyZ3VtZW50LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZxZG4sICoqa3cpOgorICAgICAgICBzdXBlcihGUURORW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKyAgICAgICAgc2VsZi5DT01QVVRFRF9LRVlTICs9IFsnZnFkbiddCisgICAgICAgIHNlbGYuX19mcWRuID0gZnFkbgorCisgICAgZGVmIGdldF9mcWRuKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGZ1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZSBmb3IgdGhpcyBob3N0LgorCisgICAgICAgIFJldHVybiBOb25lIGlmIGl0IGlzIHVuYXZhaWxhYmxlIG9yIHVud2FudGVkLiIiIgorCisgICAgICAgIHJldHVybiBzZWxmLl9fZnFkbgorCisKK2NsYXNzIENvbmZpZ0ZRRE5FbnZpcm9ubWVudE1peGluKAorICAgICAgICBDb25maWdFbnZpcm9ubWVudE1peGluLAorICAgICAgICBGUURORW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgKToKKyAgICAiIiJSZWFkIHRoZSBGUUROIGZyb20gdGhlIGNvbmZpZy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25maWcsICoqa3cpOgorICAgICAgICBmcWRuID0gY29uZmlnLmdldCgnZnFkbicpCisgICAgICAgIHN1cGVyKENvbmZpZ0ZRRE5FbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIGNvbmZpZz1jb25maWcsCisgICAgICAgICAgICBmcWRuPWZxZG4sCisgICAgICAgICAgICAqKmt3CisgICAgICAgICAgICApCisKKworY2xhc3MgQ29tcHV0ZUZRRE5FbnZpcm9ubWVudE1peGluKEZRRE5FbnZpcm9ubWVudE1peGluKToKKyAgICAiIiJHZXQgdGhlIEZRRE4gYnkgY2FsbGluZyBzb2NrZXQuZ2V0ZnFkbigpLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3cpOgorICAgICAgICBzdXBlcihDb21wdXRlRlFETkVudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgZnFkbj1zb2NrZXQuZ2V0ZnFkbigpLAorICAgICAgICAgICAgKiprdworICAgICAgICAgICAgKQorCisKK2NsYXNzIFB1c2hlckRvbWFpbkVudmlyb25tZW50TWl4aW4oQ29uZmlnRW52aXJvbm1lbnRNaXhpbik6CisgICAgIiIiRGVkdWNlIHB1c2hlcl9lbWFpbCBmcm9tIHB1c2hlciBieSBhcHBlbmRpbmcgYW4gZW1haWxkb21haW4uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiprdyk6CisgICAgICAgIHN1cGVyKFB1c2hlckRvbWFpbkVudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisgICAgICAgIHNlbGYuX19lbWFpbGRvbWFpbiA9IHNlbGYuY29uZmlnLmdldCgnZW1haWxkb21haW4nKQorCisgICAgZGVmIGdldF9wdXNoZXJfZW1haWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX19lbWFpbGRvbWFpbjoKKyAgICAgICAgICAgICMgRGVyaXZlIHRoZSBwdXNoZXIncyBmdWxsIGVtYWlsIGFkZHJlc3MgaW4gdGhlIGRlZmF1bHQgd2F5OgorICAgICAgICAgICAgcmV0dXJuICclc0AlcycgJSAoc2VsZi5nZXRfcHVzaGVyKCksIHNlbGYuX19lbWFpbGRvbWFpbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihQdXNoZXJEb21haW5FbnZpcm9ubWVudE1peGluLCBzZWxmKS5nZXRfcHVzaGVyX2VtYWlsKCkKKworCitjbGFzcyBTdGF0aWNSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbihFbnZpcm9ubWVudCk6CisgICAgIiIiU2V0IHJlY2lwaWVudHMgc3RhdGljYWxseSBiYXNlZCBvbiBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAgIHJlZmNoYW5nZV9yZWNpcGllbnRzLCBhbm5vdW5jZV9yZWNpcGllbnRzLCByZXZpc2lvbl9yZWNpcGllbnRzLCBzY2FuY29tbWl0Zm9yY2MsCisgICAgICAgICAgICAqKmt3CisgICAgICAgICAgICApOgorICAgICAgICBzdXBlcihTdGF0aWNSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuX19pbml0X18oKiprdykKKworICAgICAgICAjIFRoZSByZWNpcGllbnRzIGZvciB2YXJpb3VzIHR5cGVzIG9mIG5vdGlmaWNhdGlvbiBlbWFpbHMsIGFzCisgICAgICAgICMgUkZDIDI4MjIgZW1haWwgYWRkcmVzc2VzIHNlcGFyYXRlZCBieSBjb21tYXMgKG9yIHRoZSBlbXB0eQorICAgICAgICAjIHN0cmluZyBpZiBubyByZWNpcGllbnRzIGFyZSBjb25maWd1cmVkKS4gIEFsdGhvdWdoIHRoZXJlIGlzCisgICAgICAgICMgYSBtZWNoYW5pc20gdG8gY2hvb3NlIHRoZSByZWNpcGllbnQgbGlzdHMgYmFzZWQgb24gb24gdGhlCisgICAgICAgICMgYWN0dWFsICpjb250ZW50cyogb2YgdGhlIGNoYW5nZSBiZWluZyByZXBvcnRlZCwgd2Ugb25seQorICAgICAgICAjIGNob29zZSBiYXNlZCBvbiB0aGUgKnR5cGUqIG9mIHRoZSBjaGFuZ2UuICBUaGVyZWZvcmUgd2UgY2FuCisgICAgICAgICMgY29tcHV0ZSB0aGVtIG9uY2UgYW5kIGZvciBhbGw6CisgICAgICAgIGlmIG5vdCAocmVmY2hhbmdlX3JlY2lwaWVudHMgb3IKKyAgICAgICAgICAgICAgICBhbm5vdW5jZV9yZWNpcGllbnRzIG9yCisgICAgICAgICAgICAgICAgcmV2aXNpb25fcmVjaXBpZW50cyBvcgorICAgICAgICAgICAgICAgIHNjYW5jb21taXRmb3JjYyk6CisgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKCdObyBlbWFpbCByZWNpcGllbnRzIGNvbmZpZ3VyZWQhJykKKyAgICAgICAgc2VsZi5fX3JlZmNoYW5nZV9yZWNpcGllbnRzID0gcmVmY2hhbmdlX3JlY2lwaWVudHMKKyAgICAgICAgc2VsZi5fX2Fubm91bmNlX3JlY2lwaWVudHMgPSBhbm5vdW5jZV9yZWNpcGllbnRzCisgICAgICAgIHNlbGYuX19yZXZpc2lvbl9yZWNpcGllbnRzID0gcmV2aXNpb25fcmVjaXBpZW50cworCisgICAgZGVmIGdldF9yZWZjaGFuZ2VfcmVjaXBpZW50cyhzZWxmLCByZWZjaGFuZ2UpOgorICAgICAgICByZXR1cm4gc2VsZi5fX3JlZmNoYW5nZV9yZWNpcGllbnRzCisKKyAgICBkZWYgZ2V0X2Fubm91bmNlX3JlY2lwaWVudHMoc2VsZiwgYW5ub3RhdGVkX3RhZ19jaGFuZ2UpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2Fubm91bmNlX3JlY2lwaWVudHMKKworICAgIGRlZiBnZXRfcmV2aXNpb25fcmVjaXBpZW50cyhzZWxmLCByZXZpc2lvbik6CisgICAgICAgIHJldHVybiBzZWxmLl9fcmV2aXNpb25fcmVjaXBpZW50cworCisKK2NsYXNzIENvbmZpZ1JlY2lwaWVudHNFbnZpcm9ubWVudE1peGluKAorICAgICAgICBDb25maWdFbnZpcm9ubWVudE1peGluLAorICAgICAgICBTdGF0aWNSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbgorICAgICAgICApOgorICAgICIiIkRldGVybWluZSByZWNpcGllbnRzIHN0YXRpY2FsbHkgYmFzZWQgb24gY29uZmlnLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgKiprdyk6CisgICAgICAgIHN1cGVyKENvbmZpZ1JlY2lwaWVudHNFbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIGNvbmZpZz1jb25maWcsCisgICAgICAgICAgICByZWZjaGFuZ2VfcmVjaXBpZW50cz1zZWxmLl9nZXRfcmVjaXBpZW50cygKKyAgICAgICAgICAgICAgICBjb25maWcsICdyZWZjaGFuZ2VsaXN0JywgJ21haWxpbmdsaXN0JywKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgYW5ub3VuY2VfcmVjaXBpZW50cz1zZWxmLl9nZXRfcmVjaXBpZW50cygKKyAgICAgICAgICAgICAgICBjb25maWcsICdhbm5vdW5jZWxpc3QnLCAncmVmY2hhbmdlbGlzdCcsICdtYWlsaW5nbGlzdCcsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIHJldmlzaW9uX3JlY2lwaWVudHM9c2VsZi5fZ2V0X3JlY2lwaWVudHMoCisgICAgICAgICAgICAgICAgY29uZmlnLCAnY29tbWl0bGlzdCcsICdtYWlsaW5nbGlzdCcsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIHNjYW5jb21taXRmb3JjYz1jb25maWcuZ2V0KCdzY2FuY29tbWl0Zm9yY2MnKSwKKyAgICAgICAgICAgICoqa3cKKyAgICAgICAgICAgICkKKworICAgIGRlZiBfZ2V0X3JlY2lwaWVudHMoc2VsZiwgY29uZmlnLCAqbmFtZXMpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHJlY2lwaWVudHMgZm9yIGEgcGFydGljdWxhciB0eXBlIG9mIG1lc3NhZ2UuCisKKyAgICAgICAgUmV0dXJuIHRoZSBsaXN0IG9mIGVtYWlsIGFkZHJlc3NlcyB0byB3aGljaCBhIHBhcnRpY3VsYXIgdHlwZQorICAgICAgICBvZiBub3RpZmljYXRpb24gZW1haWwgc2hvdWxkIGJlIHNlbnQsIGJ5IGxvb2tpbmcgYXQgdGhlIGNvbmZpZworICAgICAgICB2YWx1ZSBmb3IgIm11bHRpbWFpbGhvb2suJG5hbWUiIGZvciBlYWNoIG9mIG5hbWVzLiAgVXNlIHRoZQorICAgICAgICB2YWx1ZSBmcm9tIHRoZSBmaXJzdCBuYW1lIHRoYXQgaXMgY29uZmlndXJlZC4gIFRoZSByZXR1cm4KKyAgICAgICAgdmFsdWUgaXMgYSAocG9zc2libHkgZW1wdHkpIHN0cmluZyBjb250YWluaW5nIFJGQyAyODIyIGVtYWlsCisgICAgICAgIGFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkgY29tbWFzLiAgSWYgbm8gY29uZmlndXJhdGlvbiBjb3VsZCBiZQorICAgICAgICBmb3VuZCwgcmFpc2UgYSBDb25maWd1cmF0aW9uRXhjZXB0aW9uLiIiIgorCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgbGluZXMgPSBjb25maWcuZ2V0X2FsbChuYW1lKQorICAgICAgICAgICAgaWYgbGluZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZXMgPSBbbGluZS5zdHJpcCgpIGZvciBsaW5lIGluIGxpbmVzXQorICAgICAgICAgICAgICAgICMgU2luZ2xlICJub25lIiBpcyBhIHNwZWNpYWwgdmFsdWUgZXF1aXZhbGVuIHRvIGVtcHR5IHN0cmluZy4KKyAgICAgICAgICAgICAgICBpZiBsaW5lcyA9PSBbJ25vbmUnXToKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbJyddCisgICAgICAgICAgICAgICAgcmV0dXJuICcsICcuam9pbihsaW5lcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnJworCisKK2NsYXNzIFN0YXRpY1JlZkZpbHRlckVudmlyb25tZW50TWl4aW4oRW52aXJvbm1lbnQpOgorICAgICIiIlNldCBicmFuY2ggZmlsdGVyIHN0YXRpY2FsbHkgYmFzZWQgb24gY29uc3RydWN0b3IgcGFyYW1ldGVycy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWZfZmlsdGVyX2luY2xfcmVnZXgsIHJlZl9maWx0ZXJfZXhjbF9yZWdleCwKKyAgICAgICAgICAgICAgICAgcmVmX2ZpbHRlcl9kb19zZW5kX3JlZ2V4LCByZWZfZmlsdGVyX2RvbnRfc2VuZF9yZWdleCwKKyAgICAgICAgICAgICAgICAgKiprdyk6CisgICAgICAgIHN1cGVyKFN0YXRpY1JlZkZpbHRlckVudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisKKyAgICAgICAgaWYgcmVmX2ZpbHRlcl9pbmNsX3JlZ2V4IGFuZCByZWZfZmlsdGVyX2V4Y2xfcmVnZXg6CisgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICJDYW5ub3Qgc3BlY2lmeSBib3RoIGEgcmVmIGluY2x1c2lvbiBhbmQgZXhjbHVzaW9uIHJlZ2V4LiIpCisgICAgICAgIHNlbGYuX19pc19pbmNsdXNpb25fZmlsdGVyID0gYm9vbChyZWZfZmlsdGVyX2luY2xfcmVnZXgpCisgICAgICAgIGRlZmF1bHRfZXhjbHVkZSA9IHNlbGYuZ2V0X2RlZmF1bHRfcmVmX2lnbm9yZV9yZWdleCgpCisgICAgICAgIGlmIHJlZl9maWx0ZXJfaW5jbF9yZWdleDoKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfcmVnZXggPSByZWZfZmlsdGVyX2luY2xfcmVnZXgKKyAgICAgICAgZWxpZiByZWZfZmlsdGVyX2V4Y2xfcmVnZXg6CisgICAgICAgICAgICByZWZfZmlsdGVyX3JlZ2V4ID0gcmVmX2ZpbHRlcl9leGNsX3JlZ2V4ICsgJ3wnICsgZGVmYXVsdF9leGNsdWRlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWZfZmlsdGVyX3JlZ2V4ID0gZGVmYXVsdF9leGNsdWRlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX19jb21waWxlZF9yZWdleCA9IHJlLmNvbXBpbGUocmVmX2ZpbHRlcl9yZWdleCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIENvbmZpZ3VyYXRpb25FeGNlcHRpb24oCisgICAgICAgICAgICAgICAgJ0ludmFsaWQgUmVmIEZpbHRlciBSZWdleCAiJXMiOiAlcycgJSAocmVmX2ZpbHRlcl9yZWdleCwgc3lzLmV4Y19pbmZvKClbMV0pKQorCisgICAgICAgIGlmIHJlZl9maWx0ZXJfZG9fc2VuZF9yZWdleCBhbmQgcmVmX2ZpbHRlcl9kb250X3NlbmRfcmVnZXg6CisgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICJDYW5ub3Qgc3BlY2lmeSBib3RoIGEgcmVmIGRvU2VuZCBhbmQgZG9udFNlbmQgcmVnZXguIikKKyAgICAgICAgaWYgcmVmX2ZpbHRlcl9kb19zZW5kX3JlZ2V4IG9yIHJlZl9maWx0ZXJfZG9udF9zZW5kX3JlZ2V4OgorICAgICAgICAgICAgc2VsZi5fX2lzX2RvX3NlbmRfZmlsdGVyID0gYm9vbChyZWZfZmlsdGVyX2RvX3NlbmRfcmVnZXgpCisgICAgICAgICAgICBpZiByZWZfZmlsdGVyX2luY2xfcmVnZXg6CisgICAgICAgICAgICAgICAgcmVmX2ZpbHRlcl9zZW5kX3JlZ2V4ID0gcmVmX2ZpbHRlcl9pbmNsX3JlZ2V4CisgICAgICAgICAgICBlbGlmIHJlZl9maWx0ZXJfZXhjbF9yZWdleDoKKyAgICAgICAgICAgICAgICByZWZfZmlsdGVyX3NlbmRfcmVnZXggPSByZWZfZmlsdGVyX2V4Y2xfcmVnZXgKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVmX2ZpbHRlcl9zZW5kX3JlZ2V4ID0gJy4qJworICAgICAgICAgICAgICAgIHNlbGYuX19pc19kb19zZW5kX2ZpbHRlciA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9fc2VuZF9jb21waWxlZF9yZWdleCA9IHJlLmNvbXBpbGUocmVmX2ZpbHRlcl9zZW5kX3JlZ2V4KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICByYWlzZSBDb25maWd1cmF0aW9uRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBSZWYgRmlsdGVyIFJlZ2V4ICIlcyI6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgIChyZWZfZmlsdGVyX3NlbmRfcmVnZXgsIHN5cy5leGNfaW5mbygpWzFdKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX19zZW5kX2NvbXBpbGVkX3JlZ2V4ID0gc2VsZi5fX2NvbXBpbGVkX3JlZ2V4CisgICAgICAgICAgICBzZWxmLl9faXNfZG9fc2VuZF9maWx0ZXIgPSBzZWxmLl9faXNfaW5jbHVzaW9uX2ZpbHRlcgorCisgICAgZGVmIGdldF9yZWZfZmlsdGVyX3JlZ2V4KHNlbGYsIHNlbmRfZmlsdGVyPUZhbHNlKToKKyAgICAgICAgaWYgc2VuZF9maWx0ZXI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3NlbmRfY29tcGlsZWRfcmVnZXgsIHNlbGYuX19pc19kb19zZW5kX2ZpbHRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jb21waWxlZF9yZWdleCwgc2VsZi5fX2lzX2luY2x1c2lvbl9maWx0ZXIKKworCitjbGFzcyBDb25maWdSZWZGaWx0ZXJFbnZpcm9ubWVudE1peGluKAorICAgICAgICBDb25maWdFbnZpcm9ubWVudE1peGluLAorICAgICAgICBTdGF0aWNSZWZGaWx0ZXJFbnZpcm9ubWVudE1peGluCisgICAgICAgICk6CisgICAgIiIiRGV0ZXJtaW5lIGJyYW5jaCBmaWx0ZXJpbmcgc3RhdGljYWxseSBiYXNlZCBvbiBjb25maWcuIiIiCisKKyAgICBkZWYgX2dldF9yZWdleChzZWxmLCBjb25maWcsIGtleSk6CisgICAgICAgICIiIkdldCBhIGxpc3Qgb2Ygd2hpdGVzcGFjZS1zZXBhcmF0ZWQgcmVnZXguIFRoZSByZWZGaWx0ZXIqIGNvbmZpZworICAgICAgICB2YXJpYWJsZXMgYXJlIG11bHRpdmFsdWVkIChoZW5jZSB0aGUgdXNlIG9mIGdldF9hbGwpLCBhbmQgd2UKKyAgICAgICAgYWxsb3cgZWFjaCBlbnRyeSB0byBiZSBhIHdoaXRlc3BhY2Utc2VwYXJhdGVkIGxpc3QgKGhlbmNlIHRoZQorICAgICAgICBzcGxpdCBvbiBlYWNoIGxpbmUpLiBUaGUgd2hvbGUgdGhpbmcgaXMgZ2x1ZWQgaW50byBhIHNpbmdsZSByZWdleC4iIiIKKyAgICAgICAgdmFsdWVzID0gY29uZmlnLmdldF9hbGwoa2V5KQorICAgICAgICBpZiB2YWx1ZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZXMKKyAgICAgICAgaXRlbXMgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiB2YWx1ZXM6CisgICAgICAgICAgICBmb3IgaSBpbiBsaW5lLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaXRlbXMuYXBwZW5kKGkpCisgICAgICAgIGlmIGl0ZW1zID09IFtdOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuICd8Jy5qb2luKGl0ZW1zKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZywgKiprdyk6CisgICAgICAgIHN1cGVyKENvbmZpZ1JlZkZpbHRlckVudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgY29uZmlnPWNvbmZpZywKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfaW5jbF9yZWdleD1zZWxmLl9nZXRfcmVnZXgoY29uZmlnLCAncmVmRmlsdGVySW5jbHVzaW9uUmVnZXgnKSwKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfZXhjbF9yZWdleD1zZWxmLl9nZXRfcmVnZXgoY29uZmlnLCAncmVmRmlsdGVyRXhjbHVzaW9uUmVnZXgnKSwKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfZG9fc2VuZF9yZWdleD1zZWxmLl9nZXRfcmVnZXgoY29uZmlnLCAncmVmRmlsdGVyRG9TZW5kUmVnZXgnKSwKKyAgICAgICAgICAgIHJlZl9maWx0ZXJfZG9udF9zZW5kX3JlZ2V4PXNlbGYuX2dldF9yZWdleChjb25maWcsICdyZWZGaWx0ZXJEb250U2VuZFJlZ2V4JyksCisgICAgICAgICAgICAqKmt3CisgICAgICAgICAgICApCisKKworY2xhc3MgUHJvamVjdGRlc2NFbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICAiIiJNYWtlIGEgInByb2plY3RkZXNjIiB2YWx1ZSBhdmFpbGFibGUgZm9yIHRlbXBsYXRlcy4KKworICAgIEJ5IGRlZmF1bHQsIGl0IGlzIHNldCB0byB0aGUgZmlyc3QgbGluZSBvZiAkR0lUX0RJUi9kZXNjcmlwdGlvbgorICAgIChpZiB0aGF0IGZpbGUgaXMgcHJlc2VudCBhbmQgYXBwZWFycyB0byBiZSBzZXQgbWVhbmluZ2Z1bGx5KS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3KToKKyAgICAgICAgc3VwZXIoUHJvamVjdGRlc2NFbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygqKmt3KQorICAgICAgICBzZWxmLkNPTVBVVEVEX0tFWVMgKz0gWydwcm9qZWN0ZGVzYyddCisKKyAgICBkZWYgZ2V0X3Byb2plY3RkZXNjKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBvbmUtbGluZSBkZXNjcmlwaXRpb24gb2YgdGhlIHByb2plY3QuIiIiCisKKyAgICAgICAgZ2l0X2RpciA9IGdldF9naXRfZGlyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvamVjdGRlc2MgPSBvcGVuKG9zLnBhdGguam9pbihnaXRfZGlyLCAnZGVzY3JpcHRpb24nKSkucmVhZGxpbmUoKS5zdHJpcCgpCisgICAgICAgICAgICBpZiBwcm9qZWN0ZGVzYyBhbmQgbm90IHByb2plY3RkZXNjLnN0YXJ0c3dpdGgoJ1VubmFtZWQgcmVwb3NpdG9yeScpOgorICAgICAgICAgICAgICAgIHJldHVybiBwcm9qZWN0ZGVzYworICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXR1cm4gJ1VOTkFNRUQgUFJPSkVDVCcKKworCitjbGFzcyBHZW5lcmljRW52aXJvbm1lbnRNaXhpbihFbnZpcm9ubWVudCk6CisgICAgZGVmIGdldF9wdXNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm9zZW52LmdldCgnVVNFUicsIHNlbGYub3NlbnYuZ2V0KCdVU0VSTkFNRScsICd1bmtub3duIHVzZXInKSkKKworCitjbGFzcyBHZW5lcmljRW52aXJvbm1lbnQoCisgICAgICAgIFByb2plY3RkZXNjRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgQ29uZmlnTWF4bGluZXNFbnZpcm9ubWVudE1peGluLAorICAgICAgICBDb21wdXRlRlFETkVudmlyb25tZW50TWl4aW4sCisgICAgICAgIENvbmZpZ0ZpbHRlckxpbmVzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgQ29uZmlnUmVjaXBpZW50c0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIENvbmZpZ1JlZkZpbHRlckVudmlyb25tZW50TWl4aW4sCisgICAgICAgIFB1c2hlckRvbWFpbkVudmlyb25tZW50TWl4aW4sCisgICAgICAgIENvbmZpZ09wdGlvbnNFbnZpcm9ubWVudE1peGluLAorICAgICAgICBHZW5lcmljRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgRW52aXJvbm1lbnQsCisgICAgICAgICk6CisgICAgcGFzcworCisKK2NsYXNzIEdpdG9saXRlRW52aXJvbm1lbnRNaXhpbihFbnZpcm9ubWVudCk6CisgICAgZGVmIGdldF9yZXBvX3Nob3J0bmFtZShzZWxmKToKKyAgICAgICAgIyBUaGUgZ2l0b2xpdGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJEdMX1JFUE8gaXMgYSBwcmV0dHkgZ29vZAorICAgICAgICAjIHJlcG9fc2hvcnRuYW1lICh0aG91Z2ggaXQncyBwcm9iYWJseSBub3QgYXMgZ29vZCBhcyBhIHZhbHVlCisgICAgICAgICMgdGhlIHVzZXIgbWlnaHQgaGF2ZSBleHBsaWNpdGx5IHB1dCBpbiBoaXMgY29uZmlnKS4KKyAgICAgICAgcmV0dXJuICgKKyAgICAgICAgICAgIHNlbGYub3NlbnYuZ2V0KCdHTF9SRVBPJywgTm9uZSkgb3IKKyAgICAgICAgICAgIHN1cGVyKEdpdG9saXRlRW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZ2V0X3JlcG9fc2hvcnRuYW1lKCkKKyAgICAgICAgICAgICkKKworICAgIGRlZiBnZXRfcHVzaGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5vc2Vudi5nZXQoJ0dMX1VTRVInLCAndW5rbm93biB1c2VyJykKKworICAgIGRlZiBnZXRfZnJvbWFkZHIoc2VsZiwgY2hhbmdlPU5vbmUpOgorICAgICAgICBHTF9VU0VSID0gc2VsZi5vc2Vudi5nZXQoJ0dMX1VTRVInKQorICAgICAgICBpZiBHTF9VU0VSIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBGaW5kIHRoZSBwYXRoIHRvIGdpdG9saXRlLmNvbmYuICBOb3RlIHRoYXQgZ2l0b2xpdGUgdjMKKyAgICAgICAgICAgICMgZGlkIGF3YXkgd2l0aCB0aGUgR0xfQURNSU5ESVIgYW5kIEdMX0NPTkYgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICMgdmFyaWFibGVzICh0aGV5IGFyZSBub3cgaGFyZC1jb2RlZCkuCisgICAgICAgICAgICBHTF9BRE1JTkRJUiA9IHNlbGYub3NlbnYuZ2V0KAorICAgICAgICAgICAgICAgICdHTF9BRE1JTkRJUicsCisgICAgICAgICAgICAgICAgb3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbignficsICcuZ2l0b2xpdGUnKSkpCisgICAgICAgICAgICBHTF9DT05GID0gc2VsZi5vc2Vudi5nZXQoCisgICAgICAgICAgICAgICAgJ0dMX0NPTkYnLAorICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihHTF9BRE1JTkRJUiwgJ2NvbmYnLCAnZ2l0b2xpdGUuY29uZicpKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoR0xfQ09ORik6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oR0xfQ09ORiwgJ3JVJykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGluX3VzZXJfZW1haWxzX3NlY3Rpb24gPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICByZV90ZW1wbGF0ZSA9IHInXlxzKiNccyolc1xzKiQnCisgICAgICAgICAgICAgICAgICAgIHJlX2JlZ2luLCByZV91c2VyLCByZV9lbmQgPSAoCisgICAgICAgICAgICAgICAgICAgICAgICByZS5jb21waWxlKHJlX3RlbXBsYXRlICUgeCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ0JFR0lOXHMrVVNFUlxzK0VNQUlMUycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKEdMX1VTRVIpICsgcidccysoLiopJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ0VORFxzK1VTRVJccytFTUFJTFMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICAgICAgICAgIGZvciBsIGluIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBsID0gbC5yc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpbl91c2VyX2VtYWlsc19zZWN0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlX2JlZ2luLm1hdGNoKGwpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl91c2VyX2VtYWlsc19zZWN0aW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZV9lbmQubWF0Y2gobCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIG0gPSByZV91c2VyLm1hdGNoKGwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKDEpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHJldHVybiBzdXBlcihHaXRvbGl0ZUVudmlyb25tZW50TWl4aW4sIHNlbGYpLmdldF9mcm9tYWRkcihjaGFuZ2UpCisKKworY2xhc3MgSW5jcmVtZW50YWxEYXRlVGltZShvYmplY3QpOgorICAgICIiIlNpbXBsZSB3cmFwcGVyIHRvIGdpdmUgaW5jcmVtZW50YWwgZGF0ZS90aW1lcy4KKworICAgIEVhY2ggY2FsbCB3aWxsIHJlc3VsdCBpbiBhIGRhdGUvdGltZSBhIHNlY29uZCBsYXRlciB0aGFuIHRoZQorICAgIHByZXZpb3VzIGNhbGwuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGZhbHNpZnkgZW1haWwgaGVhZGVycywgdG8KKyAgICBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCB0aGF0IGVtYWlsIGNsaWVudHMgc29ydCB0aGUgZW1haWxzCisgICAgY29ycmVjdGx5LiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzZWxmLm5leHQgPSBzZWxmLl9fbmV4dF9fICAjIFB5dGhvbiAyIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKworICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgZm9ybWF0dGVkID0gZm9ybWF0ZGF0ZShzZWxmLnRpbWUsIFRydWUpCisgICAgICAgIHNlbGYudGltZSArPSAxCisgICAgICAgIHJldHVybiBmb3JtYXR0ZWQKKworCitjbGFzcyBHaXRvbGl0ZUVudmlyb25tZW50KAorICAgICAgICBQcm9qZWN0ZGVzY0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIENvbmZpZ01heGxpbmVzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgQ29tcHV0ZUZRRE5FbnZpcm9ubWVudE1peGluLAorICAgICAgICBDb25maWdGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIENvbmZpZ1JlY2lwaWVudHNFbnZpcm9ubWVudE1peGluLAorICAgICAgICBDb25maWdSZWZGaWx0ZXJFbnZpcm9ubWVudE1peGluLAorICAgICAgICBQdXNoZXJEb21haW5FbnZpcm9ubWVudE1peGluLAorICAgICAgICBDb25maWdPcHRpb25zRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgR2l0b2xpdGVFbnZpcm9ubWVudE1peGluLAorICAgICAgICBFbnZpcm9ubWVudCwKKyAgICAgICAgKToKKyAgICBwYXNzCisKKworY2xhc3MgU3Rhc2hFbnZpcm9ubWVudE1peGluKEVudmlyb25tZW50KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXNlcj1Ob25lLCByZXBvPU5vbmUsICoqa3cpOgorICAgICAgICBzdXBlcihTdGFzaEVudmlyb25tZW50TWl4aW4sIHNlbGYpLl9faW5pdF9fKCoqa3cpCisgICAgICAgIHNlbGYuX191c2VyID0gdXNlcgorICAgICAgICBzZWxmLl9fcmVwbyA9IHJlcG8KKworICAgIGRlZiBnZXRfcmVwb19zaG9ydG5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fcmVwbworCisgICAgZGVmIGdldF9wdXNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiByZS5tYXRjaCgnKC4qPylccyo8Jywgc2VsZi5fX3VzZXIpLmdyb3VwKDEpCisKKyAgICBkZWYgZ2V0X3B1c2hlcl9lbWFpbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX191c2VyCisKKyAgICBkZWYgZ2V0X2Zyb21hZGRyKHNlbGYsIGNoYW5nZT1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX191c2VyCisKKworY2xhc3MgU3Rhc2hFbnZpcm9ubWVudCgKKyAgICAgICAgU3Rhc2hFbnZpcm9ubWVudE1peGluLAorICAgICAgICBQcm9qZWN0ZGVzY0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIENvbmZpZ01heGxpbmVzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgQ29tcHV0ZUZRRE5FbnZpcm9ubWVudE1peGluLAorICAgICAgICBDb25maWdGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIENvbmZpZ1JlY2lwaWVudHNFbnZpcm9ubWVudE1peGluLAorICAgICAgICBDb25maWdSZWZGaWx0ZXJFbnZpcm9ubWVudE1peGluLAorICAgICAgICBQdXNoZXJEb21haW5FbnZpcm9ubWVudE1peGluLAorICAgICAgICBDb25maWdPcHRpb25zRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgRW52aXJvbm1lbnQsCisgICAgICAgICk6CisgICAgcGFzcworCisKK2NsYXNzIEdlcnJpdEVudmlyb25tZW50TWl4aW4oRW52aXJvbm1lbnQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9qZWN0PU5vbmUsIHN1Ym1pdHRlcj1Ob25lLCB1cGRhdGVfbWV0aG9kPU5vbmUsICoqa3cpOgorICAgICAgICBzdXBlcihHZXJyaXRFbnZpcm9ubWVudE1peGluLCBzZWxmKS5fX2luaXRfXygqKmt3KQorICAgICAgICBzZWxmLl9fcHJvamVjdCA9IHByb2plY3QKKyAgICAgICAgc2VsZi5fX3N1Ym1pdHRlciA9IHN1Ym1pdHRlcgorICAgICAgICBzZWxmLl9fdXBkYXRlX21ldGhvZCA9IHVwZGF0ZV9tZXRob2QKKyAgICAgICAgIk1ha2UgYW4gJ3VwZGF0ZV9tZXRob2QnIHZhbHVlIGF2YWlsYWJsZSBmb3IgdGVtcGxhdGVzLiIKKyAgICAgICAgc2VsZi5DT01QVVRFRF9LRVlTICs9IFsndXBkYXRlX21ldGhvZCddCisKKyAgICBkZWYgZ2V0X3JlcG9fc2hvcnRuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fX3Byb2plY3QKKworICAgIGRlZiBnZXRfcHVzaGVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9fc3VibWl0dGVyOgorICAgICAgICAgICAgaWYgc2VsZi5fX3N1Ym1pdHRlci5maW5kKCc8JykgIT0gLTE6CisgICAgICAgICAgICAgICAgIyBTdWJtaXR0ZXIgaGFzIGEgY29uZmlndXJlZCBlbWFpbCwgd2UgdHJhbnNmb3JtZWQKKyAgICAgICAgICAgICAgICAjIF9fc3VibWl0dGVyIGludG8gYW4gUkZDIDI4MjIgc3RyaW5nIGFscmVhZHkuCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlLm1hdGNoKCcoLio/KVxzKjwnLCBzZWxmLl9fc3VibWl0dGVyKS5ncm91cCgxKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFN1Ym1pdHRlciBoYXMgbm8gY29uZmlndXJlZCBlbWFpbCwgaXQncyBqdXN0IGhpcyBuYW1lLgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fc3VibWl0dGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIHdlIGFycml2ZSBoZXJlLCB0aGlzIG1lYW5zIHNvbWVvbmUgcHVzaGVkICJTdWJtaXQiIGZyb20KKyAgICAgICAgICAgICMgdGhlIGdlcnJpdCB3ZWIgVUkgZm9yIHRoZSBDUiAob3IgdXNlZCBvbmUgb2YgdGhlIHByb2dyYW1tYXRpYworICAgICAgICAgICAgIyBBUElzIHRvIGRvIHRoZSBzYW1lLCBzdWNoIGFzIGdlcnJpdCByZXZpZXcpIGFuZCB0aGUKKyAgICAgICAgICAgICMgbWVyZ2UvcHVzaCB3YXMgZG9uZSBieSB0aGUgR2Vycml0IHVzZXIuICBJdCB3YXMgdGVjaG5pY2FsbHkKKyAgICAgICAgICAgICMgdHJpZ2dlcmVkIGJ5IHNvbWVvbmUgZWxzZSwgYnV0IHNhZGx5IHdlIGhhdmUgbm8gd2F5IG9mCisgICAgICAgICAgICAjIGRldGVybWluaW5nIHdobyB0aGF0IHNvbWVvbmUgZWxzZSBpcyBhdCB0aGlzIHBvaW50LgorICAgICAgICAgICAgcmV0dXJuICdHZXJyaXQnICAjICd1bmtub3duIHVzZXInPworCisgICAgZGVmIGdldF9wdXNoZXJfZW1haWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX19zdWJtaXR0ZXI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3N1Ym1pdHRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEdlcnJpdEVudmlyb25tZW50TWl4aW4sIHNlbGYpLmdldF9wdXNoZXJfZW1haWwoKQorCisgICAgZGVmIGdldF9mcm9tYWRkcihzZWxmLCBjaGFuZ2U9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuX19zdWJtaXR0ZXIgYW5kIHNlbGYuX19zdWJtaXR0ZXIuZmluZCgnPCcpICE9IC0xOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19zdWJtaXR0ZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihHZXJyaXRFbnZpcm9ubWVudE1peGluLCBzZWxmKS5nZXRfZnJvbWFkZHIoY2hhbmdlKQorCisgICAgZGVmIGdldF9kZWZhdWx0X3JlZl9pZ25vcmVfcmVnZXgoc2VsZik6CisgICAgICAgIGRlZmF1bHQgPSBzdXBlcihHZXJyaXRFbnZpcm9ubWVudE1peGluLCBzZWxmKS5nZXRfZGVmYXVsdF9yZWZfaWdub3JlX3JlZ2V4KCkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQgKyAnfF5yZWZzL2NoYW5nZXMvfF5yZWZzL2NhY2hlLWF1dG9tZXJnZS98XnJlZnMvbWV0YS8nCisKKyAgICBkZWYgZ2V0X3JldmlzaW9uX3JlY2lwaWVudHMoc2VsZiwgcmV2aXNpb24pOgorICAgICAgICAjIE1lcmdlIGNvbW1pdHMgY3JlYXRlZCBieSBHZXJyaXQgd2hlbiB1c2VycyBoaXQgIlN1Ym1pdCB0aGlzIHBhdGNoc2V0IgorICAgICAgICAjIGluIHRoZSBXZWIgVUkgKG9yIGRvIGVxdWl2YWxlbnRseSB3aXRoIFJFU1QgQVBJcyBvciB0aGUgZ2Vycml0IHJldmlldworICAgICAgICAjIGNvbW1hbmQpIGFyZSBub3Qgc29tZXRoaW5nIHVzZXJzIHdhbnQgdG8gc2VlIGFuIGluZGl2aWR1YWwgZW1haWwgZm9yLgorICAgICAgICAjIEZpbHRlciB0aGVtIG91dC4KKyAgICAgICAgY29tbWl0dGVyID0gcmVhZF9naXRfb3V0cHV0KFsnbG9nJywgJy0tbm8td2FsaycsICctLWZvcm1hdD0lY04nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uLnJldi5zaGExXSkKKyAgICAgICAgaWYgY29tbWl0dGVyID09ICdHZXJyaXQgQ29kZSBSZXZpZXcnOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoR2Vycml0RW52aXJvbm1lbnRNaXhpbiwgc2VsZikuZ2V0X3JldmlzaW9uX3JlY2lwaWVudHMocmV2aXNpb24pCisKKyAgICBkZWYgZ2V0X3VwZGF0ZV9tZXRob2Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fdXBkYXRlX21ldGhvZAorCisKK2NsYXNzIEdlcnJpdEVudmlyb25tZW50KAorICAgICAgICBHZXJyaXRFbnZpcm9ubWVudE1peGluLAorICAgICAgICBQcm9qZWN0ZGVzY0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIENvbmZpZ01heGxpbmVzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgQ29tcHV0ZUZRRE5FbnZpcm9ubWVudE1peGluLAorICAgICAgICBDb25maWdGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIENvbmZpZ1JlY2lwaWVudHNFbnZpcm9ubWVudE1peGluLAorICAgICAgICBDb25maWdSZWZGaWx0ZXJFbnZpcm9ubWVudE1peGluLAorICAgICAgICBQdXNoZXJEb21haW5FbnZpcm9ubWVudE1peGluLAorICAgICAgICBDb25maWdPcHRpb25zRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgRW52aXJvbm1lbnQsCisgICAgICAgICk6CisgICAgcGFzcworCisKK2NsYXNzIFB1c2gob2JqZWN0KToKKyAgICAiIiJSZXByZXNlbnQgYW4gZW50aXJlIHB1c2ggKGkuZS4sIGEgZ3JvdXAgb2YgUmVmZXJlbmNlQ2hhbmdlcykuCisKKyAgICBJdCBpcyBlYXN5IHRvIGZpZ3VyZSBvdXQgd2hhdCBjb21taXRzIHdlcmUgYWRkZWQgdG8gYSAqYnJhbmNoKiBieQorICAgIGEgUmVmZXJlbmNlIGNoYW5nZToKKworICAgICAgICBnaXQgcmV2LWxpc3QgY2hhbmdlLm9sZC4uY2hhbmdlLm5ldworCisgICAgb3IgcmVtb3ZlZCBmcm9tIGEgKmJyYW5jaCo6CisKKyAgICAgICAgZ2l0IHJldi1saXN0IGNoYW5nZS5uZXcuLmNoYW5nZS5vbGQKKworICAgIEJ1dCBpdCBpcyBub3QgcXVpdGUgc28gdHJpdmlhbCB0byBkZXRlcm1pbmUgd2hpY2ggZW50aXJlbHkgbmV3CisgICAgY29tbWl0cyB3ZXJlIGFkZGVkIHRvIHRoZSAqcmVwb3NpdG9yeSogYnkgYSBwdXNoIGFuZCB3aGljaCBvbGQKKyAgICBjb21taXRzIHdlcmUgZGlzY2FyZGVkIGJ5IGEgcHVzaC4gIEEgYmlnIHBhcnQgb2YgdGhlIGpvYiBvZiB0aGlzCisgICAgY2xhc3MgaXMgdG8gZmlndXJlIG91dCB0aGVzZSB0aGluZ3MsIGFuZCB0byBtYWtlIHN1cmUgdGhhdCBuZXcKKyAgICBjb21taXRzIGFyZSBvbmx5IGRldGFpbGVkIG9uY2UgZXZlbiBpZiB0aGV5IHdlcmUgYWRkZWQgdG8gbXVsdGlwbGUKKyAgICByZWZlcmVuY2VzLgorCisgICAgVGhlIGZpcnN0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIHRoZSAib3RoZXIiIHJlZmVyZW5jZXMtLXRob3NlCisgICAgdW5hZmZlY3RlZCBieSB0aGUgY3VycmVudCBwdXNoLiAgVGhleSBhcmUgY29tcHV0ZWQgYnkgbGlzdGluZyBhbGwKKyAgICByZWZlcmVuY2VzIHRoZW4gcmVtb3ZpbmcgYW55IGFmZmVjdGVkIGJ5IHRoaXMgcHVzaC4gIFRoZSByZXN1bHRzCisgICAgYXJlIHN0b3JlZCBpbiBQdXNoLl9vdGhlcl9yZWZfc2hhMXMuCisKKyAgICBUaGUgY29tbWl0cyBjb250YWluZWQgaW4gdGhlIHJlcG9zaXRvcnkgYmVmb3JlIHRoaXMgcHVzaCB3ZXJlCisKKyAgICAgICAgZ2l0IHJldi1saXN0IG90aGVyMSBvdGhlcjIgb3RoZXIzIC4uLiBjaGFuZ2UxLm9sZCBjaGFuZ2UyLm9sZCAuLi4KKworICAgIFdoZXJlICJjaGFuZ2VOLm9sZCIgaXMgdGhlIG9sZCB2YWx1ZSBvZiBvbmUgb2YgdGhlIHJlZmVyZW5jZXMKKyAgICBhZmZlY3RlZCBieSB0aGlzIHB1c2guCisKKyAgICBUaGUgY29tbWl0cyBjb250YWluZWQgaW4gdGhlIHJlcG9zaXRvcnkgYWZ0ZXIgdGhpcyBwdXNoIGFyZQorCisgICAgICAgIGdpdCByZXYtbGlzdCBvdGhlcjEgb3RoZXIyIG90aGVyMyAuLi4gY2hhbmdlMS5uZXcgY2hhbmdlMi5uZXcgLi4uCisKKyAgICBUaGUgY29tbWl0cyBhZGRlZCBieSB0aGlzIHB1c2ggYXJlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UKKyAgICB0d28gc2V0cywgd2hpY2ggY2FuIGJlIHdyaXR0ZW4KKworICAgICAgICBnaXQgcmV2LWxpc3QgXAorICAgICAgICAgICAgXm90aGVyMSBeb3RoZXIyIC4uLiBcCisgICAgICAgICAgICBeY2hhbmdlMS5vbGQgXmNoYW5nZTIub2xkIC4uLiBcCisgICAgICAgICAgICBjaGFuZ2UxLm5ldyBjaGFuZ2UyLm5ldyAuLi4KKworICAgIFRoZSBjb21taXRzIHJlbW92ZWQgYnkgdGhpcyBwdXNoIGNhbiBiZSBjb21wdXRlZCBieQorCisgICAgICAgIGdpdCByZXYtbGlzdCBcCisgICAgICAgICAgICBeb3RoZXIxIF5vdGhlcjIgLi4uIFwKKyAgICAgICAgICAgIF5jaGFuZ2UxLm5ldyBeY2hhbmdlMi5uZXcgLi4uIFwKKyAgICAgICAgICAgIGNoYW5nZTEub2xkIGNoYW5nZTIub2xkIC4uLgorCisgICAgVGhlIGxhc3QgcG9pbnQgaXMgdGhhdCBpdCBpcyBwb3NzaWJsZSB0aGF0IG90aGVyIHB1c2hlcyBhcmUKKyAgICBvY2N1cnJpbmcgc2ltdWx0YW5lb3VzbHkgdG8gdGhpcyBvbmUsIHNvIHJlZmVyZW5jZSB2YWx1ZXMgY2FuCisgICAgY2hhbmdlIGF0IGFueSB0aW1lLiAgSXQgaXMgaW1wb3NzaWJsZSB0byBlbGltaW5hdGUgYWxsIHJhY2UKKyAgICBjb25kaXRpb25zLCBidXQgd2UgcmVkdWNlIHRoZSB3aW5kb3cgb2YgdGltZSBkdXJpbmcgd2hpY2ggcHJvYmxlbXMKKyAgICBjYW4gb2NjdXIgYnkgdHJhbnNsYXRpbmcgcmVmZXJlbmNlIG5hbWVzIHRvIFNIQTFzIGFzIHNvb24gYXMKKyAgICBwb3NzaWJsZSBhbmQgd29ya2luZyB3aXRoIFNIQTFzIHRoZXJlYWZ0ZXIgKGJlY2F1c2UgU0hBMXMgYXJlCisgICAgaW1tdXRhYmxlKS4iIiIKKworICAgICMgQSBtYXAgeyhjaGFuZ2VjbGFzcywgY2hhbmdldHlwZSk6IGludGVnZXJ9IHNwZWNpZnlpbmcgdGhlIG9yZGVyCisgICAgIyB0aGF0IHJlZmVyZW5jZSBjaGFuZ2VzIHdpbGwgYmUgcHJvY2Vzc2VkIGlmIG11bHRpcGxlIHJlZmVyZW5jZQorICAgICMgY2hhbmdlcyBhcmUgaW5jbHVkZWQgaW4gYSBzaW5nbGUgcHVzaC4gIFRoZSBvcmRlciBpcyBzaWduaWZpY2FudAorICAgICMgbW9zdGx5IGJlY2F1c2UgbmV3IGNvbW1pdCBub3RpZmljYXRpb25zIGFyZSB0aHJlYWRlZCB0b2dldGhlcgorICAgICMgd2l0aCB0aGUgZmlyc3QgcmVmZXJlbmNlIGNoYW5nZSB0aGF0IGluY2x1ZGVzIHRoZSBjb21taXQuICBUaGUKKyAgICAjIGZvbGxvd2luZyBvcmRlciB0aHVzIGNhdXNlcyBjb21taXRzIHRvIGJlIGdyb3VwZWQgd2l0aCBicmFuY2gKKyAgICAjIGNoYW5nZXMgKGFzIG9wcG9zZWQgdG8gdGFnIGNoYW5nZXMpIGlmIHBvc3NpYmxlLgorICAgIFNPUlRfT1JERVIgPSBkaWN0KAorICAgICAgICAodmFsdWUsIGkpIGZvciAoaSwgdmFsdWUpIGluIGVudW1lcmF0ZShbCisgICAgICAgICAgICAoQnJhbmNoQ2hhbmdlLCAndXBkYXRlJyksCisgICAgICAgICAgICAoQnJhbmNoQ2hhbmdlLCAnY3JlYXRlJyksCisgICAgICAgICAgICAoQW5ub3RhdGVkVGFnQ2hhbmdlLCAndXBkYXRlJyksCisgICAgICAgICAgICAoQW5ub3RhdGVkVGFnQ2hhbmdlLCAnY3JlYXRlJyksCisgICAgICAgICAgICAoTm9uQW5ub3RhdGVkVGFnQ2hhbmdlLCAndXBkYXRlJyksCisgICAgICAgICAgICAoTm9uQW5ub3RhdGVkVGFnQ2hhbmdlLCAnY3JlYXRlJyksCisgICAgICAgICAgICAoQnJhbmNoQ2hhbmdlLCAnZGVsZXRlJyksCisgICAgICAgICAgICAoQW5ub3RhdGVkVGFnQ2hhbmdlLCAnZGVsZXRlJyksCisgICAgICAgICAgICAoTm9uQW5ub3RhdGVkVGFnQ2hhbmdlLCAnZGVsZXRlJyksCisgICAgICAgICAgICAoT3RoZXJSZWZlcmVuY2VDaGFuZ2UsICd1cGRhdGUnKSwKKyAgICAgICAgICAgIChPdGhlclJlZmVyZW5jZUNoYW5nZSwgJ2NyZWF0ZScpLAorICAgICAgICAgICAgKE90aGVyUmVmZXJlbmNlQ2hhbmdlLCAnZGVsZXRlJyksCisgICAgICAgICAgICBdKQorICAgICAgICApCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbm1lbnQsIGNoYW5nZXMsIGlnbm9yZV9vdGhlcl9yZWZzPUZhbHNlKToKKyAgICAgICAgc2VsZi5jaGFuZ2VzID0gc29ydGVkKGNoYW5nZXMsIGtleT1zZWxmLl9zb3J0X2tleSkKKyAgICAgICAgc2VsZi5fX290aGVyX3JlZl9zaGExcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fX2NhY2hlZF9jb21taXRzX3NwZWMgPSB7fQorICAgICAgICBzZWxmLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQKKworICAgICAgICBpZiBpZ25vcmVfb3RoZXJfcmVmczoKKyAgICAgICAgICAgIHNlbGYuX19vdGhlcl9yZWZfc2hhMXMgPSBzZXQoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zb3J0X2tleShrbGFzcywgY2hhbmdlKToKKyAgICAgICAgcmV0dXJuIChrbGFzcy5TT1JUX09SREVSW2NoYW5nZS5fX2NsYXNzX18sIGNoYW5nZS5jaGFuZ2VfdHlwZV0sIGNoYW5nZS5yZWZuYW1lLCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfb3RoZXJfcmVmX3NoYTFzKHNlbGYpOgorICAgICAgICAiIiJUaGUgR2l0T2JqZWN0cyByZWZlcnJlZCB0byBieSByZWZlcmVuY2VzIHVuYWZmZWN0ZWQgYnkgdGhpcyBwdXNoLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fX290aGVyX3JlZl9zaGExcyBpcyBOb25lOgorICAgICAgICAgICAgIyBUaGUgcmVmbmFtZXMgYmVpbmcgY2hhbmdlZCBieSB0aGlzIHB1c2g6CisgICAgICAgICAgICB1cGRhdGVkX3JlZnMgPSBzZXQoCisgICAgICAgICAgICAgICAgY2hhbmdlLnJlZm5hbWUKKyAgICAgICAgICAgICAgICBmb3IgY2hhbmdlIGluIHNlbGYuY2hhbmdlcworICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAgIyBUaGUgU0hBLTFzIG9mIGNvbW1pdHMgcmVmZXJyZWQgdG8gYnkgYWxsIHJlZmVyZW5jZXMgaW4gdGhpcworICAgICAgICAgICAgIyByZXBvc2l0b3J5ICpleGNlcHQqIHVwZGF0ZWRfcmVmczoKKyAgICAgICAgICAgIHNoYTFzID0gc2V0KCkKKyAgICAgICAgICAgIGZtdCA9ICgKKyAgICAgICAgICAgICAgICAnJShvYmplY3RuYW1lKSAlKG9iamVjdHR5cGUpICUocmVmbmFtZSlcbicKKyAgICAgICAgICAgICAgICAnJSgqb2JqZWN0bmFtZSkgJSgqb2JqZWN0dHlwZSkgJShyZWZuYW1lKScKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICByZWZfZmlsdGVyX3JlZ2V4LCBpc19pbmNsdXNpb25fZmlsdGVyID0gXAorICAgICAgICAgICAgICAgIHNlbGYuZW52aXJvbm1lbnQuZ2V0X3JlZl9maWx0ZXJfcmVnZXgoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9naXRfbGluZXMoCisgICAgICAgICAgICAgICAgICAgIFsnZm9yLWVhY2gtcmVmJywgJy0tZm9ybWF0PSVzJyAlIChmbXQsKV0pOgorICAgICAgICAgICAgICAgIChzaGExLCB0eXBlLCBuYW1lKSA9IGxpbmUuc3BsaXQoJyAnLCAyKQorICAgICAgICAgICAgICAgIGlmIChzaGExIGFuZCB0eXBlID09ICdjb21taXQnIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSBub3QgaW4gdXBkYXRlZF9yZWZzIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9yZWYobmFtZSwgcmVmX2ZpbHRlcl9yZWdleCwgaXNfaW5jbHVzaW9uX2ZpbHRlcikpOgorICAgICAgICAgICAgICAgICAgICBzaGExcy5hZGQoc2hhMSkKKworICAgICAgICAgICAgc2VsZi5fX290aGVyX3JlZl9zaGExcyA9IHNoYTFzCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX19vdGhlcl9yZWZfc2hhMXMKKworICAgIGRlZiBfZ2V0X2NvbW1pdHNfc3BlY19pbmNsKHNlbGYsIG5ld19vcl9vbGQsIHJlZmVyZW5jZV9jaGFuZ2U9Tm9uZSk6CisgICAgICAgICIiIkdldCBuZXcgb3Igb2xkIFNIQS0xIGZyb20gb25lIG9yIGVhY2ggb2YgdGhlIGNoYW5nZWQgcmVmcy4KKworICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIFNIQS0xIGNvbW1pdCBpZGVudGlmaWVyIHN0cmluZ3Mgc3VpdGFibGUgYXMKKyAgICAgICAgYXJndW1lbnRzIHRvICdnaXQgcmV2LWxpc3QnIChvciAnZ2l0IGxvZycgb3IgLi4uKS4gIFRoZQorICAgICAgICByZXR1cm5lZCBpZGVudGlmaWVycyBhcmUgZWl0aGVyIHRoZSBvbGQgb3IgbmV3IHZhbHVlcyBmcm9tIG9uZQorICAgICAgICBvciBhbGwgb2YgdGhlIGNoYW5nZWQgcmVmZXJlbmNlcywgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YKKyAgICAgICAgbmV3X29yX29sZCBhbmQgcmVmZXJlbmNlX2NoYW5nZS4KKworICAgICAgICBuZXdfb3Jfb2xkIGlzIGVpdGhlciB0aGUgc3RyaW5nICduZXcnIG9yIHRoZSBzdHJpbmcgJ29sZCcuICBJZgorICAgICAgICAnbmV3JywgdGhlIHJldHVybmVkIFNIQS0xIGlkZW50aWZpZXJzIGFyZSB0aGUgbmV3IHZhbHVlcyBmcm9tCisgICAgICAgIGVhY2ggY2hhbmdlZCByZWZlcmVuY2UuICBJZiAnb2xkJywgdGhlIFNIQS0xIGlkZW50aWZpZXJzIGFyZQorICAgICAgICB0aGUgb2xkIHZhbHVlcyBmcm9tIGVhY2ggY2hhbmdlZCByZWZlcmVuY2UuCisKKyAgICAgICAgSWYgcmVmZXJlbmNlX2NoYW5nZSBpcyBzcGVjaWZpZWQgYW5kIG5vdCBOb25lLCBvbmx5IHRoZSBuZXcgb3IKKyAgICAgICAgb2xkIHJlZmVyZW5jZSBmcm9tIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIGlzIGluY2x1ZGVkIGluIHRoZQorICAgICAgICByZXR1cm4gdmFsdWUuCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIE5vbmUgaWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIHJldmlzaW9ucworICAgICAgICAoZS5nLiwgYmVjYXVzZSBhIGJyYW5jaCB3YXMgZGVsZXRlZCBhbmQgbmV3X29yX29sZCBpcyAnbmV3JykuCisgICAgICAgICIiIgorCisgICAgICAgIGlmIG5vdCByZWZlcmVuY2VfY2hhbmdlOgorICAgICAgICAgICAgaW5jbF9zcGVjID0gc29ydGVkKAorICAgICAgICAgICAgICAgIGdldGF0dHIoY2hhbmdlLCBuZXdfb3Jfb2xkKS5zaGExCisgICAgICAgICAgICAgICAgZm9yIGNoYW5nZSBpbiBzZWxmLmNoYW5nZXMKKyAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKGNoYW5nZSwgbmV3X29yX29sZCkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBpZiBub3QgaW5jbF9zcGVjOgorICAgICAgICAgICAgICAgIGluY2xfc3BlYyA9IE5vbmUKKyAgICAgICAgZWxpZiBub3QgZ2V0YXR0cihyZWZlcmVuY2VfY2hhbmdlLCBuZXdfb3Jfb2xkKS5jb21taXRfc2hhMToKKyAgICAgICAgICAgIGluY2xfc3BlYyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluY2xfc3BlYyA9IFtnZXRhdHRyKHJlZmVyZW5jZV9jaGFuZ2UsIG5ld19vcl9vbGQpLmNvbW1pdF9zaGExXQorICAgICAgICByZXR1cm4gaW5jbF9zcGVjCisKKyAgICBkZWYgX2dldF9jb21taXRzX3NwZWNfZXhjbChzZWxmLCBuZXdfb3Jfb2xkKToKKyAgICAgICAgIiIiR2V0IGV4Y2x1c2lvbiByZXZpc2lvbnMgZm9yIGRldGVybWluaW5nIG5ldyBvciBkaXNjYXJkZWQgY29tbWl0cy4KKworICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIHN0cmluZ3Mgc3VpdGFibGUgYXMgYXJndW1lbnRzIHRvICdnaXQKKyAgICAgICAgcmV2LWxpc3QnIChvciAnZ2l0IGxvZycgb3IgLi4uKSB0aGF0IHdpbGwgZXhjbHVkZSBhbGwKKyAgICAgICAgY29tbWl0cyB0aGF0LCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIG5ld19vcl9vbGQsIHdlcmUKKyAgICAgICAgZWl0aGVyIHByZXZpb3VzbHkgaW4gdGhlIHJlcG9zaXRvcnkgKHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcKKyAgICAgICAgd2hpY2ggY29tbWl0cyBhcmUgbmV3IHRvIHRoZSByZXBvc2l0b3J5KSBvciBjdXJyZW50bHkgaW4gdGhlCisgICAgICAgIHJlcG9zaXRvcnkgKHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggY29tbWl0cyB3ZXJlCisgICAgICAgIGRpc2NhcmRlZCBmcm9tIHRoZSByZXBvc2l0b3J5KS4KKworICAgICAgICBuZXdfb3Jfb2xkIGlzIGVpdGhlciB0aGUgc3RyaW5nICduZXcnIG9yIHRoZSBzdHJpbmcgJ29sZCcuICBJZgorICAgICAgICAnbmV3JywgdGhlIGNvbW1pdHMgdG8gYmUgZXhjbHVkZWQgYXJlIHRob3NlIHRoYXQgd2VyZSBpbiB0aGUKKyAgICAgICAgcmVwb3NpdG9yeSBiZWZvcmUgdGhlIHB1c2guICBJZiAnb2xkJywgdGhlIGNvbW1pdHMgdG8gYmUKKyAgICAgICAgZXhjbHVkZWQgYXJlIHRob3NlIHRoYXQgYXJlIGN1cnJlbnRseSBpbiB0aGUgcmVwb3NpdG9yeS4gICIiIgorCisgICAgICAgIG9sZF9vcl9uZXcgPSB7J29sZCc6ICduZXcnLCAnbmV3JzogJ29sZCd9W25ld19vcl9vbGRdCisgICAgICAgIGV4Y2xfcmV2cyA9IHNlbGYuX290aGVyX3JlZl9zaGExcy51bmlvbigKKyAgICAgICAgICAgIGdldGF0dHIoY2hhbmdlLCBvbGRfb3JfbmV3KS5zaGExCisgICAgICAgICAgICBmb3IgY2hhbmdlIGluIHNlbGYuY2hhbmdlcworICAgICAgICAgICAgaWYgZ2V0YXR0cihjaGFuZ2UsIG9sZF9vcl9uZXcpLnR5cGUgaW4gWydjb21taXQnLCAndGFnJ10KKyAgICAgICAgICAgICkKKyAgICAgICAgcmV0dXJuIFsnXicgKyBzaGExIGZvciBzaGExIGluIHNvcnRlZChleGNsX3JldnMpXQorCisgICAgZGVmIGdldF9jb21taXRzX3NwZWMoc2VsZiwgbmV3X29yX29sZCwgcmVmZXJlbmNlX2NoYW5nZT1Ob25lKToKKyAgICAgICAgIiIiR2V0IHJldi1saXN0IGFyZ3VtZW50cyBmb3IgYWRkZWQgb3IgZGlzY2FyZGVkIGNvbW1pdHMuCisKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBzdHJpbmdzIHN1aXRhYmxlIGFzIGFyZ3VtZW50cyB0byAnZ2l0CisgICAgICAgIHJldi1saXN0JyAob3IgJ2dpdCBsb2cnIG9yIC4uLikgdGhhdCBzZWxlY3QgdGhvc2UgY29tbWl0cworICAgICAgICB0aGF0LCBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIG5ld19vcl9vbGQsIGFyZSBlaXRoZXIgbmV3IHRvCisgICAgICAgIHRoZSByZXBvc2l0b3J5IG9yIHdlcmUgZGlzY2FyZGVkIGZyb20gdGhlIHJlcG9zaXRvcnkuCisKKyAgICAgICAgbmV3X29yX29sZCBpcyBlaXRoZXIgdGhlIHN0cmluZyAnbmV3JyBvciB0aGUgc3RyaW5nICdvbGQnLiAgSWYKKyAgICAgICAgJ25ldycsIHRoZSByZXR1cm5lZCBsaXN0IGlzIHVzZWQgdG8gc2VsZWN0IGNvbW1pdHMgdGhhdCBhcmUKKyAgICAgICAgbmV3IHRvIHRoZSByZXBvc2l0b3J5LiAgSWYgJ29sZCcsIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyB1c2VkCisgICAgICAgIHRvIHNlbGVjdCB0aGUgY29tbWl0cyB0aGF0IGhhdmUgYmVlbiBkaXNjYXJkZWQgZnJvbSB0aGUKKyAgICAgICAgcmVwb3NpdG9yeS4KKworICAgICAgICBJZiByZWZlcmVuY2VfY2hhbmdlIGlzIHNwZWNpZmllZCBhbmQgbm90IE5vbmUsIHRoZSBuZXcgb3IKKyAgICAgICAgZGlzY2FyZGVkIGNvbW1pdHMgYXJlIGxpbWl0ZWQgdG8gdGhvc2UgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20KKyAgICAgICAgdGhlIG5ldyBvciBvbGQgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCByZWZlcmVuY2UuCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIE5vbmUgaWYgdGhlcmUgYXJlIG5vIGFkZGVkIChvciBkaXNjYXJkZWQpCisgICAgICAgIHJldmlzaW9ucy4KKyAgICAgICAgIiIiCisgICAgICAgIGtleSA9IChuZXdfb3Jfb2xkLCByZWZlcmVuY2VfY2hhbmdlKQorICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYuX19jYWNoZWRfY29tbWl0c19zcGVjOgorICAgICAgICAgICAgcmV0ID0gc2VsZi5fZ2V0X2NvbW1pdHNfc3BlY19pbmNsKG5ld19vcl9vbGQsIHJlZmVyZW5jZV9jaGFuZ2UpCisgICAgICAgICAgICBpZiByZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0LmV4dGVuZChzZWxmLl9nZXRfY29tbWl0c19zcGVjX2V4Y2wobmV3X29yX29sZCkpCisgICAgICAgICAgICBzZWxmLl9fY2FjaGVkX2NvbW1pdHNfc3BlY1trZXldID0gcmV0CisgICAgICAgIHJldHVybiBzZWxmLl9fY2FjaGVkX2NvbW1pdHNfc3BlY1trZXldCisKKyAgICBkZWYgZ2V0X25ld19jb21taXRzKHNlbGYsIHJlZmVyZW5jZV9jaGFuZ2U9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgY29tbWl0cyBhZGRlZCBieSB0aGlzIHB1c2guCisKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgb2JqZWN0IG5hbWVzIG9mIGNvbW1pdHMgdGhhdCB3ZXJlIGFkZGVkCisgICAgICAgIGJ5IHRoZSBwYXJ0IG9mIHRoaXMgcHVzaCByZXByZXNlbnRlZCBieSByZWZlcmVuY2VfY2hhbmdlLiAgSWYKKyAgICAgICAgcmVmZXJlbmNlX2NoYW5nZSBpcyBOb25lLCB0aGVuIHJldHVybiBhIGxpc3Qgb2YgKmFsbCogY29tbWl0cworICAgICAgICBhZGRlZCBieSB0aGlzIHB1c2guIiIiCisKKyAgICAgICAgc3BlYyA9IHNlbGYuZ2V0X2NvbW1pdHNfc3BlYygnbmV3JywgcmVmZXJlbmNlX2NoYW5nZSkKKyAgICAgICAgcmV0dXJuIGdpdF9yZXZfbGlzdChzcGVjKQorCisgICAgZGVmIGdldF9kaXNjYXJkZWRfY29tbWl0cyhzZWxmLCByZWZlcmVuY2VfY2hhbmdlKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBjb21taXRzIGRpc2NhcmRlZCBieSB0aGlzIHB1c2guCisKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgb2JqZWN0IG5hbWVzIG9mIGNvbW1pdHMgdGhhdCB3ZXJlCisgICAgICAgIGVudGlyZWx5IGRpc2NhcmRlZCBmcm9tIHRoZSByZXBvc2l0b3J5IGJ5IHRoZSBwYXJ0IG9mIHRoaXMKKyAgICAgICAgcHVzaCByZXByZXNlbnRlZCBieSByZWZlcmVuY2VfY2hhbmdlLiIiIgorCisgICAgICAgIHNwZWMgPSBzZWxmLmdldF9jb21taXRzX3NwZWMoJ29sZCcsIHJlZmVyZW5jZV9jaGFuZ2UpCisgICAgICAgIHJldHVybiBnaXRfcmV2X2xpc3Qoc3BlYykKKworICAgIGRlZiBzZW5kX2VtYWlscyhzZWxmLCBtYWlsZXIsIGJvZHlfZmlsdGVyPU5vbmUpOgorICAgICAgICAiIiJVc2Ugc2VuZCBhbGwgb2YgdGhlIG5vdGlmaWNhdGlvbiBlbWFpbHMgbmVlZGVkIGZvciB0aGlzIHB1c2guCisKKyAgICAgICAgVXNlIHNlbmQgYWxsIG9mIHRoZSBub3RpZmljYXRpb24gZW1haWxzIChpbmNsdWRpbmcgcmVmZXJlbmNlCisgICAgICAgIGNoYW5nZSBlbWFpbHMgYW5kIGNvbW1pdCBlbWFpbHMpIG5lZWRlZCBmb3IgdGhpcyBwdXNoLiAgU2VuZAorICAgICAgICB0aGUgZW1haWxzIHVzaW5nIG1haWxlci4gIElmIGJvZHlfZmlsdGVyIGlzIG5vdCBOb25lLCB0aGVuIHVzZQorICAgICAgICBpdCB0byBmaWx0ZXIgdGhlIGxpbmVzIHRoYXQgYXJlIGludGVuZGVkIGZvciB0aGUgZW1haWwKKyAgICAgICAgYm9keS4iIiIKKworICAgICAgICAjIFRoZSBzaGExcyBvZiBjb21taXRzIHRoYXQgd2VyZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcHVzaC4KKyAgICAgICAgIyBUaGV5IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoaXMgc2V0IGFzIHRoZXkgYXJlIHByb2Nlc3NlZCwgdG8KKyAgICAgICAgIyBndWFyYW50ZWUgdGhhdCBvbmUgKGFuZCBvbmx5IG9uZSkgZW1haWwgaXMgZ2VuZXJhdGVkIGZvcgorICAgICAgICAjIGVhY2ggbmV3IGNvbW1pdC4KKyAgICAgICAgdW5oYW5kbGVkX3NoYTFzID0gc2V0KHNlbGYuZ2V0X25ld19jb21taXRzKCkpCisgICAgICAgIHNlbmRfZGF0ZSA9IEluY3JlbWVudGFsRGF0ZVRpbWUoKQorICAgICAgICBmb3IgY2hhbmdlIGluIHNlbGYuY2hhbmdlczoKKyAgICAgICAgICAgIHNoYTFzID0gW10KKyAgICAgICAgICAgIGZvciBzaGExIGluIHJldmVyc2VkKGxpc3Qoc2VsZi5nZXRfbmV3X2NvbW1pdHMoY2hhbmdlKSkpOgorICAgICAgICAgICAgICAgIGlmIHNoYTEgaW4gdW5oYW5kbGVkX3NoYTFzOgorICAgICAgICAgICAgICAgICAgICBzaGExcy5hcHBlbmQoc2hhMSkKKyAgICAgICAgICAgICAgICAgICAgdW5oYW5kbGVkX3NoYTFzLnJlbW92ZShzaGExKQorCisgICAgICAgICAgICAjIENoZWNrIGlmIHdlJ3ZlIGdvdCBhbnlvbmUgdG8gc2VuZCB0bworICAgICAgICAgICAgaWYgbm90IGNoYW5nZS5yZWNpcGllbnRzOgorICAgICAgICAgICAgICAgIGNoYW5nZS5lbnZpcm9ubWVudC5sb2dfd2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgJyoqKiBubyByZWNpcGllbnRzIGNvbmZpZ3VyZWQgc28gbm8gZW1haWwgd2lsbCBiZSBzZW50XG4nCisgICAgICAgICAgICAgICAgICAgICcqKiogZm9yICVyIHVwZGF0ZSAlcy0+JXNcbicKKyAgICAgICAgICAgICAgICAgICAgJSAoY2hhbmdlLnJlZm5hbWUsIGNoYW5nZS5vbGQuc2hhMSwgY2hhbmdlLm5ldy5zaGExLCkKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBub3QgY2hhbmdlLmVudmlyb25tZW50LnF1aWV0OgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2UuZW52aXJvbm1lbnQubG9nX21zZygKKyAgICAgICAgICAgICAgICAgICAgICAgICdTZW5kaW5nIG5vdGlmaWNhdGlvbiBlbWFpbHMgdG86ICVzXG4nICUgKGNoYW5nZS5yZWNpcGllbnRzLCkpCisgICAgICAgICAgICAgICAgZXh0cmFfdmFsdWVzID0geydzZW5kX2RhdGUnOiBuZXh0KHNlbmRfZGF0ZSl9CisKKyAgICAgICAgICAgICAgICByZXYgPSBjaGFuZ2Uuc2VuZF9zaW5nbGVfY29tYmluZWRfZW1haWwoc2hhMXMpCisgICAgICAgICAgICAgICAgaWYgcmV2OgorICAgICAgICAgICAgICAgICAgICBtYWlsZXIuc2VuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZS5nZW5lcmF0ZV9jb21iaW5lZF9lbWFpbChzZWxmLCByZXYsIGJvZHlfZmlsdGVyLCBleHRyYV92YWx1ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2LnJlY2lwaWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBjaGFuZ2UgaXMgbm93IGZ1bGx5IGhhbmRsZWQ7IG5vIG5lZWQgdG8gaGFuZGxlCisgICAgICAgICAgICAgICAgICAgICMgaW5kaXZpZHVhbCByZXZpc2lvbnMgYW55IGZ1cnRoZXIuCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbWFpbGVyLnNlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UuZ2VuZXJhdGVfZW1haWwoc2VsZiwgYm9keV9maWx0ZXIsIGV4dHJhX3ZhbHVlcyksCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2UucmVjaXBpZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAgbWF4X2VtYWlscyA9IGNoYW5nZS5lbnZpcm9ubWVudC5tYXhjb21taXRlbWFpbHMKKyAgICAgICAgICAgIGlmIG1heF9lbWFpbHMgYW5kIGxlbihzaGExcykgPiBtYXhfZW1haWxzOgorICAgICAgICAgICAgICAgIGNoYW5nZS5lbnZpcm9ubWVudC5sb2dfd2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgJyoqKiBUb28gbWFueSBuZXcgY29tbWl0cyAoJWQpLCBub3Qgc2VuZGluZyBjb21taXQgZW1haWxzLlxuJyAlIGxlbihzaGExcykgKworICAgICAgICAgICAgICAgICAgICAnKioqIFRyeSBzZXR0aW5nIG11bHRpbWFpbGhvb2subWF4Q29tbWl0RW1haWxzIHRvIGEgZ3JlYXRlciB2YWx1ZVxuJyArCisgICAgICAgICAgICAgICAgICAgICcqKiogQ3VycmVudGx5LCBtdWx0aW1haWxob29rLm1heENvbW1pdEVtYWlscz0lZFxuJyAlIG1heF9lbWFpbHMKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBmb3IgKG51bSwgc2hhMSkgaW4gZW51bWVyYXRlKHNoYTFzKToKKyAgICAgICAgICAgICAgICByZXYgPSBSZXZpc2lvbihjaGFuZ2UsIEdpdE9iamVjdChzaGExKSwgbnVtPW51bSArIDEsIHRvdD1sZW4oc2hhMXMpKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZXYucmVjaXBpZW50cyBhbmQgcmV2LmNjX3JlY2lwaWVudHM6CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZS5lbnZpcm9ubWVudC5sb2dfbXNnKCcqKiogUmVwbGFjaW5nIENjOiB3aXRoIFRvOlxuJykKKyAgICAgICAgICAgICAgICAgICAgcmV2LnJlY2lwaWVudHMgPSByZXYuY2NfcmVjaXBpZW50cworICAgICAgICAgICAgICAgICAgICByZXYuY2NfcmVjaXBpZW50cyA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiByZXYucmVjaXBpZW50czoKKyAgICAgICAgICAgICAgICAgICAgZXh0cmFfdmFsdWVzID0geydzZW5kX2RhdGUnOiBuZXh0KHNlbmRfZGF0ZSl9CisgICAgICAgICAgICAgICAgICAgIG1haWxlci5zZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2LmdlbmVyYXRlX2VtYWlsKHNlbGYsIGJvZHlfZmlsdGVyLCBleHRyYV92YWx1ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2LnJlY2lwaWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgIyBDb25zaXN0ZW5jeSBjaGVjazoKKyAgICAgICAgaWYgdW5oYW5kbGVkX3NoYTFzOgorICAgICAgICAgICAgY2hhbmdlLmVudmlyb25tZW50LmxvZ19lcnJvcigKKyAgICAgICAgICAgICAgICAnRVJST1I6IE5vIGVtYWlscyB3ZXJlIHNlbnQgZm9yIHRoZSBmb2xsb3dpbmcgbmV3IGNvbW1pdHM6XG4nCisgICAgICAgICAgICAgICAgJyAgICAlc1xuJworICAgICAgICAgICAgICAgICUgKCdcbiAgICAnLmpvaW4oc29ydGVkKHVuaGFuZGxlZF9zaGExcykpLCkKKyAgICAgICAgICAgICAgICApCisKKworZGVmIGluY2x1ZGVfcmVmKHJlZm5hbWUsIHJlZl9maWx0ZXJfcmVnZXgsIGlzX2luY2x1c2lvbl9maWx0ZXIpOgorICAgIGRvZXNfbWF0Y2ggPSBib29sKHJlZl9maWx0ZXJfcmVnZXguc2VhcmNoKHJlZm5hbWUpKQorICAgIGlmIGlzX2luY2x1c2lvbl9maWx0ZXI6CisgICAgICAgIHJldHVybiBkb2VzX21hdGNoCisgICAgZWxzZTogICMgZXhjbHVzaW9uIGZpbHRlciAtLSB3ZSBpbmNsdWRlIHRoZSByZWYgaWYgdGhlIHJlZ2V4IGRvZXNuJ3QgbWF0Y2gKKyAgICAgICAgcmV0dXJuIG5vdCBkb2VzX21hdGNoCisKKworZGVmIHJ1bl9hc19wb3N0X3JlY2VpdmVfaG9vayhlbnZpcm9ubWVudCwgbWFpbGVyKToKKyAgICByZWZfZmlsdGVyX3JlZ2V4LCBpc19pbmNsdXNpb25fZmlsdGVyID0gZW52aXJvbm1lbnQuZ2V0X3JlZl9maWx0ZXJfcmVnZXgoVHJ1ZSkKKyAgICBjaGFuZ2VzID0gW10KKyAgICBmb3IgbGluZSBpbiBzeXMuc3RkaW46CisgICAgICAgIChvbGRyZXYsIG5ld3JldiwgcmVmbmFtZSkgPSBsaW5lLnN0cmlwKCkuc3BsaXQoJyAnLCAyKQorICAgICAgICBpZiBub3QgaW5jbHVkZV9yZWYocmVmbmFtZSwgcmVmX2ZpbHRlcl9yZWdleCwgaXNfaW5jbHVzaW9uX2ZpbHRlcik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBjaGFuZ2VzLmFwcGVuZCgKKyAgICAgICAgICAgIFJlZmVyZW5jZUNoYW5nZS5jcmVhdGUoZW52aXJvbm1lbnQsIG9sZHJldiwgbmV3cmV2LCByZWZuYW1lKQorICAgICAgICAgICAgKQorICAgIGlmIGNoYW5nZXM6CisgICAgICAgIHB1c2ggPSBQdXNoKGVudmlyb25tZW50LCBjaGFuZ2VzKQorICAgICAgICBwdXNoLnNlbmRfZW1haWxzKG1haWxlciwgYm9keV9maWx0ZXI9ZW52aXJvbm1lbnQuZmlsdGVyX2JvZHkpCisKKworZGVmIHJ1bl9hc191cGRhdGVfaG9vayhlbnZpcm9ubWVudCwgbWFpbGVyLCByZWZuYW1lLCBvbGRyZXYsIG5ld3JldiwgZm9yY2Vfc2VuZD1GYWxzZSk6CisgICAgcmVmX2ZpbHRlcl9yZWdleCwgaXNfaW5jbHVzaW9uX2ZpbHRlciA9IGVudmlyb25tZW50LmdldF9yZWZfZmlsdGVyX3JlZ2V4KFRydWUpCisgICAgaWYgbm90IGluY2x1ZGVfcmVmKHJlZm5hbWUsIHJlZl9maWx0ZXJfcmVnZXgsIGlzX2luY2x1c2lvbl9maWx0ZXIpOgorICAgICAgICByZXR1cm4KKyAgICBjaGFuZ2VzID0gWworICAgICAgICBSZWZlcmVuY2VDaGFuZ2UuY3JlYXRlKAorICAgICAgICAgICAgZW52aXJvbm1lbnQsCisgICAgICAgICAgICByZWFkX2dpdF9vdXRwdXQoWydyZXYtcGFyc2UnLCAnLS12ZXJpZnknLCBvbGRyZXZdKSwKKyAgICAgICAgICAgIHJlYWRfZ2l0X291dHB1dChbJ3Jldi1wYXJzZScsICctLXZlcmlmeScsIG5ld3Jldl0pLAorICAgICAgICAgICAgcmVmbmFtZSwKKyAgICAgICAgICAgICksCisgICAgICAgIF0KKyAgICBwdXNoID0gUHVzaChlbnZpcm9ubWVudCwgY2hhbmdlcywgZm9yY2Vfc2VuZCkKKyAgICBwdXNoLnNlbmRfZW1haWxzKG1haWxlciwgYm9keV9maWx0ZXI9ZW52aXJvbm1lbnQuZmlsdGVyX2JvZHkpCisKKworZGVmIGNob29zZV9tYWlsZXIoY29uZmlnLCBlbnZpcm9ubWVudCk6CisgICAgbWFpbGVyID0gY29uZmlnLmdldCgnbWFpbGVyJywgZGVmYXVsdD0nc2VuZG1haWwnKQorCisgICAgaWYgbWFpbGVyID09ICdzbXRwJzoKKyAgICAgICAgc210cHNlcnZlciA9IGNvbmZpZy5nZXQoJ3NtdHBzZXJ2ZXInLCBkZWZhdWx0PSdsb2NhbGhvc3QnKQorICAgICAgICBzbXRwc2VydmVydGltZW91dCA9IGZsb2F0KGNvbmZpZy5nZXQoJ3NtdHBzZXJ2ZXJ0aW1lb3V0JywgZGVmYXVsdD0xMC4wKSkKKyAgICAgICAgc210cHNlcnZlcmRlYnVnbGV2ZWwgPSBpbnQoY29uZmlnLmdldCgnc210cHNlcnZlcmRlYnVnbGV2ZWwnLCBkZWZhdWx0PTApKQorICAgICAgICBzbXRwZW5jcnlwdGlvbiA9IGNvbmZpZy5nZXQoJ3NtdHBlbmNyeXB0aW9uJywgZGVmYXVsdD0nbm9uZScpCisgICAgICAgIHNtdHB1c2VyID0gY29uZmlnLmdldCgnc210cHVzZXInLCBkZWZhdWx0PScnKQorICAgICAgICBzbXRwcGFzcyA9IGNvbmZpZy5nZXQoJ3NtdHBwYXNzJywgZGVmYXVsdD0nJykKKyAgICAgICAgbWFpbGVyID0gU01UUE1haWxlcigKKyAgICAgICAgICAgIGVudmVsb3Blc2VuZGVyPShlbnZpcm9ubWVudC5nZXRfc2VuZGVyKCkgb3IgZW52aXJvbm1lbnQuZ2V0X2Zyb21hZGRyKCkpLAorICAgICAgICAgICAgc210cHNlcnZlcj1zbXRwc2VydmVyLCBzbXRwc2VydmVydGltZW91dD1zbXRwc2VydmVydGltZW91dCwKKyAgICAgICAgICAgIHNtdHBzZXJ2ZXJkZWJ1Z2xldmVsPXNtdHBzZXJ2ZXJkZWJ1Z2xldmVsLAorICAgICAgICAgICAgc210cGVuY3J5cHRpb249c210cGVuY3J5cHRpb24sCisgICAgICAgICAgICBzbXRwdXNlcj1zbXRwdXNlciwKKyAgICAgICAgICAgIHNtdHBwYXNzPXNtdHBwYXNzLAorICAgICAgICAgICAgKQorICAgIGVsaWYgbWFpbGVyID09ICdzZW5kbWFpbCc6CisgICAgICAgIGNvbW1hbmQgPSBjb25maWcuZ2V0KCdzZW5kbWFpbGNvbW1hbmQnKQorICAgICAgICBpZiBjb21tYW5kOgorICAgICAgICAgICAgY29tbWFuZCA9IHNobGV4LnNwbGl0KGNvbW1hbmQpCisgICAgICAgIG1haWxlciA9IFNlbmRNYWlsZXIoY29tbWFuZD1jb21tYW5kLCBlbnZlbG9wZXNlbmRlcj1lbnZpcm9ubWVudC5nZXRfc2VuZGVyKCkpCisgICAgZWxzZToKKyAgICAgICAgZW52aXJvbm1lbnQubG9nX2Vycm9yKAorICAgICAgICAgICAgJ2ZhdGFsOiBtdWx0aW1haWxob29rLm1haWxlciBpcyBzZXQgdG8gYW4gaW5jb3JyZWN0IHZhbHVlOiAiJXMiXG4nICUgbWFpbGVyICsKKyAgICAgICAgICAgICdwbGVhc2UgdXNlIG9uZSBvZiAic210cCIgb3IgInNlbmRtYWlsIi5cbicKKyAgICAgICAgICAgICkKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICByZXR1cm4gbWFpbGVyCisKKworS05PV05fRU5WSVJPTk1FTlRTID0geworICAgICdnZW5lcmljJzogR2VuZXJpY0Vudmlyb25tZW50TWl4aW4sCisgICAgJ2dpdG9saXRlJzogR2l0b2xpdGVFbnZpcm9ubWVudE1peGluLAorICAgICdzdGFzaCc6IFN0YXNoRW52aXJvbm1lbnRNaXhpbiwKKyAgICAnZ2Vycml0JzogR2Vycml0RW52aXJvbm1lbnRNaXhpbiwKKyAgICB9CisKKworZGVmIGNob29zZV9lbnZpcm9ubWVudChjb25maWcsIG9zZW52PU5vbmUsIGVudj1Ob25lLCByZWNpcGllbnRzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIGhvb2tfaW5mbz1Ob25lKToKKyAgICBpZiBub3Qgb3NlbnY6CisgICAgICAgIG9zZW52ID0gb3MuZW52aXJvbgorCisgICAgZW52aXJvbm1lbnRfbWl4aW5zID0gWworICAgICAgICBDb25maWdSZWZGaWx0ZXJFbnZpcm9ubWVudE1peGluLAorICAgICAgICBQcm9qZWN0ZGVzY0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIENvbmZpZ01heGxpbmVzRW52aXJvbm1lbnRNaXhpbiwKKyAgICAgICAgQ29tcHV0ZUZRRE5FbnZpcm9ubWVudE1peGluLAorICAgICAgICBDb25maWdGaWx0ZXJMaW5lc0Vudmlyb25tZW50TWl4aW4sCisgICAgICAgIFB1c2hlckRvbWFpbkVudmlyb25tZW50TWl4aW4sCisgICAgICAgIENvbmZpZ09wdGlvbnNFbnZpcm9ubWVudE1peGluLAorICAgICAgICBdCisgICAgZW52aXJvbm1lbnRfa3cgPSB7CisgICAgICAgICdvc2Vudic6IG9zZW52LAorICAgICAgICAnY29uZmlnJzogY29uZmlnLAorICAgICAgICB9CisKKyAgICBpZiBub3QgZW52OgorICAgICAgICBlbnYgPSBjb25maWcuZ2V0KCdlbnZpcm9ubWVudCcpCisKKyAgICBpZiBub3QgZW52OgorICAgICAgICBpZiAnR0xfVVNFUicgaW4gb3NlbnYgYW5kICdHTF9SRVBPJyBpbiBvc2VudjoKKyAgICAgICAgICAgIGVudiA9ICdnaXRvbGl0ZScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVudiA9ICdnZW5lcmljJworCisgICAgZW52aXJvbm1lbnRfbWl4aW5zLmluc2VydCgwLCBLTk9XTl9FTlZJUk9OTUVOVFNbZW52XSkKKworICAgIGlmIGVudiA9PSAnc3Rhc2gnOgorICAgICAgICBlbnZpcm9ubWVudF9rd1sndXNlciddID0gaG9va19pbmZvWydzdGFzaF91c2VyJ10KKyAgICAgICAgZW52aXJvbm1lbnRfa3dbJ3JlcG8nXSA9IGhvb2tfaW5mb1snc3Rhc2hfcmVwbyddCisgICAgZWxpZiBlbnYgPT0gJ2dlcnJpdCc6CisgICAgICAgIGVudmlyb25tZW50X2t3Wydwcm9qZWN0J10gPSBob29rX2luZm9bJ3Byb2plY3QnXQorICAgICAgICBlbnZpcm9ubWVudF9rd1snc3VibWl0dGVyJ10gPSBob29rX2luZm9bJ3N1Ym1pdHRlciddCisgICAgICAgIGVudmlyb25tZW50X2t3Wyd1cGRhdGVfbWV0aG9kJ10gPSBob29rX2luZm9bJ3VwZGF0ZV9tZXRob2QnXQorCisgICAgaWYgcmVjaXBpZW50czoKKyAgICAgICAgZW52aXJvbm1lbnRfbWl4aW5zLmluc2VydCgwLCBTdGF0aWNSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbikKKyAgICAgICAgZW52aXJvbm1lbnRfa3dbJ3JlZmNoYW5nZV9yZWNpcGllbnRzJ10gPSByZWNpcGllbnRzCisgICAgICAgIGVudmlyb25tZW50X2t3Wydhbm5vdW5jZV9yZWNpcGllbnRzJ10gPSByZWNpcGllbnRzCisgICAgICAgIGVudmlyb25tZW50X2t3WydyZXZpc2lvbl9yZWNpcGllbnRzJ10gPSByZWNpcGllbnRzCisgICAgICAgIGVudmlyb25tZW50X2t3WydzY2FuY29tbWl0Zm9yY2MnXSA9IGNvbmZpZy5nZXQoJ3NjYW5jb21taXRmb3JjYycpCisgICAgZWxzZToKKyAgICAgICAgZW52aXJvbm1lbnRfbWl4aW5zLmluc2VydCgwLCBDb25maWdSZWNpcGllbnRzRW52aXJvbm1lbnRNaXhpbikKKworICAgIGVudmlyb25tZW50X2tsYXNzID0gdHlwZSgKKyAgICAgICAgJ0VmZmVjdGl2ZUVudmlyb25tZW50JywKKyAgICAgICAgdHVwbGUoZW52aXJvbm1lbnRfbWl4aW5zKSArIChFbnZpcm9ubWVudCwpLAorICAgICAgICB7fSwKKyAgICAgICAgKQorICAgIHJldHVybiBlbnZpcm9ubWVudF9rbGFzcygqKmVudmlyb25tZW50X2t3KQorCisKK2RlZiBnZXRfdmVyc2lvbigpOgorICAgIG9sZGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgdHJ5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChfX2ZpbGVfXykpKQorICAgICAgICAgICAgZ2l0X3ZlcnNpb24gPSByZWFkX2dpdF9vdXRwdXQoWydkZXNjcmliZScsICctLXRhZ3MnLCAnSEVBRCddKQorICAgICAgICAgICAgaWYgZ2l0X3ZlcnNpb24gPT0gX192ZXJzaW9uX186CisgICAgICAgICAgICAgICAgcmV0dXJuIGdpdF92ZXJzaW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnJXMgKCVzKScgJSAoX192ZXJzaW9uX18sIGdpdF92ZXJzaW9uKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgb3MuY2hkaXIob2xkY3dkKQorICAgIHJldHVybiBfX3ZlcnNpb25fXworCisKK2RlZiBjb21wdXRlX2dlcnJpdF9vcHRpb25zKG9wdGlvbnMsIGFyZ3MsIHJlcXVpcmVkX2dlcnJpdF9vcHRpb25zKToKKyAgICBpZiBOb25lIGluIHJlcXVpcmVkX2dlcnJpdF9vcHRpb25zOgorICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCJFcnJvcjogU3BlY2lmeSBhbGwgb2YgLS1vbGRyZXYsIC0tbmV3cmV2LCAtLXJlZm5hbWUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kIC0tcHJvamVjdDsgb3Igbm9uZSBvZiB0aGVtLiIpCisKKyAgICBpZiBvcHRpb25zLmVudmlyb25tZW50IG5vdCBpbiAoTm9uZSwgJ2dlcnJpdCcpOgorICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCJOb24tZ2Vycml0IGVudmlyb25tZW50cyBpbmNvbXBhdGlibGUgd2l0aCAtLW9sZHJldiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICItLW5ld3JldiwgLS1yZWZuYW1lLCBhbmQgLS1wcm9qZWN0IikKKyAgICBvcHRpb25zLmVudmlyb25tZW50ID0gJ2dlcnJpdCcKKworICAgIGlmIGFyZ3M6CisgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoIkVycm9yOiBQb3NpdGlvbmFsIHBhcmFtZXRlcnMgbm90IGFsbG93ZWQgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIi0tb2xkcmV2LCAtLW5ld3JldiwgYW5kIC0tcmVmbmFtZS4iKQorCisgICAgIyBHZXJyaXQgb2RkbHkgb21pdHMgJ3JlZnMvaGVhZHMvJyBpbiB0aGUgcmVmbmFtZSB3aGVuIGNhbGxpbmcKKyAgICAjIHJlZi11cGRhdGVkIGhvb2s7IHB1dCBpdCBiYWNrLgorICAgIGdpdF9kaXIgPSBnZXRfZ2l0X2RpcigpCisgICAgaWYgKG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZ2l0X2Rpciwgb3B0aW9ucy5yZWZuYW1lKSkgYW5kCisgICAgICAgIG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihnaXRfZGlyLCAncmVmcycsICdoZWFkcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnJlZm5hbWUpKSk6CisgICAgICAgIG9wdGlvbnMucmVmbmFtZSA9ICdyZWZzL2hlYWRzLycgKyBvcHRpb25zLnJlZm5hbWUKKworICAgICMgQ29udmVydCBlYWNoIHN0cmluZyBvcHRpb24gdW5pY29kZSBmb3IgUHl0aG9uMy4KKyAgICBpZiBQWVRIT04zOgorICAgICAgICBvcHRzID0gWydlbnZpcm9ubWVudCcsICdyZWNpcGllbnRzJywgJ29sZHJldicsICduZXdyZXYnLCAncmVmbmFtZScsCisgICAgICAgICAgICAgICAgJ3Byb2plY3QnLCAnc3VibWl0dGVyJywgJ3N0YXNoLXVzZXInLCAnc3Rhc2gtcmVwbyddCisgICAgICAgIGZvciBvcHQgaW4gb3B0czoKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9wdGlvbnMsIG9wdCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIob3B0aW9ucywgb3B0KQorICAgICAgICAgICAgaWYgb2JqOgorICAgICAgICAgICAgICAgIGVuYyA9IG9iai5lbmNvZGUoJ3V0Zi04JywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgICAgICAgICAgZGVjID0gZW5jLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpCisgICAgICAgICAgICAgICAgc2V0YXR0cihvcHRpb25zLCBvcHQsIGRlYykKKworICAgICMgTmV3IHJldmlzaW9ucyBjYW4gYXBwZWFyIGluIGEgZ2Vycml0IHJlcG9zaXRvcnkgZWl0aGVyIGR1ZSB0byBzb21lb25lCisgICAgIyBwdXNoaW5nIGRpcmVjdGx5IChpbiB3aGljaCBjYXNlIG9wdGlvbnMuc3VibWl0dGVyIHdpbGwgYmUgc2V0KSwgb3IgdGhleQorICAgICMgY2FuIHByZXNzICJTdWJtaXQgdGhpcyBwYXRjaHNldCIgaW4gdGhlIHdlYiBVSSBmb3Igc29tZSBDUiAoaW4gd2hpY2gKKyAgICAjIGNhc2Ugb3B0aW9ucy5zdWJtaXR0ZXIgd2lsbCBub3QgYmUgc2V0IGFuZCBnZXJyaXQgd2lsbCBub3QgaGF2ZSBwcm92aWRlZAorICAgICMgdXMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHdobyBwcmVzc2VkIHRoZSBidXR0b24pLgorICAgICMKKyAgICAjIE5vdGUgZm9yIHRoZSBuaXQtcGlja3k6IEknbSBsdW1waW5nIGluIFJFU1QgQVBJIGNhbGxzIGFuZCB0aGUgc3NoCisgICAgIyBnZXJyaXQgcmV2aWV3IGNvbW1hbmQgaW4gd2l0aCAiU3VibWl0IHRoaXMgcGF0Y2hzZXQiIGJ1dHRvbiwgc2luY2UgdGhleQorICAgICMgaGF2ZSB0aGUgc2FtZSBlZmZlY3QuCisgICAgaWYgb3B0aW9ucy5zdWJtaXR0ZXI6CisgICAgICAgIHVwZGF0ZV9tZXRob2QgPSAncHVzaGVkJworICAgICAgICAjIFRoZSBzdWJtaXR0ZXIgYXJndW1lbnQgaXMgYWxtb3N0IGFuIFJGQyAyODIyIGVtYWlsIGFkZHJlc3M7IGNoYW5nZSBpdAorICAgICAgICAjIGZyb20gJ1VzZXIgTmFtZSAoZW1haWxAZG9tYWluKScgdG8gJ1VzZXIgTmFtZSA8ZW1haWxAZG9tYWluPicgc28gaXQgaXMKKyAgICAgICAgb3B0aW9ucy5zdWJtaXR0ZXIgPSBvcHRpb25zLnN1Ym1pdHRlci5yZXBsYWNlKCcoJywgJzwnKS5yZXBsYWNlKCcpJywgJz4nKQorICAgIGVsc2U6CisgICAgICAgIHVwZGF0ZV9tZXRob2QgPSAnc3VibWl0dGVkJworICAgICAgICAjIEdlcnJpdCBrbmV3IHdobyBzdWJtaXR0ZWQgdGhpcyBwYXRjaHNldCwgYnV0IHRocmV3IHRoYXQgaW5mb3JtYXRpb24KKyAgICAgICAgIyBhd2F5IHdoZW4gaXQgaW52b2tlZCB0aGlzIGhvb2suICBIb3dldmVyLCAqSUYqIEdlcnJpdCBjcmVhdGVkIGEKKyAgICAgICAgIyBtZXJnZSB0byBicmluZyB0aGUgcGF0Y2hzZXQgaW4gKHByb2plY3QgJ1N1Ym1pdCBUeXBlJyBpcyBlaXRoZXIKKyAgICAgICAgIyAiQWx3YXlzIE1lcmdlIiwgb3IgaXMgIk1lcmdlIGlmIE5lY2Vzc2FyeSIgYW5kIGhhcHBlbnMgdG8gYmUKKyAgICAgICAgIyBuZWNlc3NhcnkgZm9yIHRoaXMgcGFydGljdWxhciBDUiksIHRoZW4gaXQgd2lsbCBoYXZlIHRoZSBjb21taXR0ZXIKKyAgICAgICAgIyBvZiB0aGF0IG1lcmdlIGJlICdHZXJyaXQgQ29kZSBSZXZpZXcnIGFuZCB0aGUgYXV0aG9yIHdpbGwgYmUgdGhlCisgICAgICAgICMgcGVyc29uIHdobyByZXF1ZXN0ZWQgdGhlIHN1Ym1pc3Npb24gb2YgdGhlIENSLiAgU2luY2UgdGhpcyBpcyBmYWlybHkKKyAgICAgICAgIyBsaWtlbHkgZm9yIG1vc3QgZ2Vycml0IGluc3RhbGxhdGlvbnMgKG9mIGEgcmVhc29uYWJsZSBzaXplKSwgaXQncworICAgICAgICAjIHdvcnRoIHRoZSBleHRyYSBlZmZvcnQgdG8gdHJ5IHRvIGRldGVybWluZSB0aGUgYWN0dWFsIHN1Ym1pdHRlci4KKyAgICAgICAgcmV2X2luZm8gPSByZWFkX2dpdF9saW5lcyhbJ2xvZycsICctLW5vLXdhbGsnLCAnLS1tZXJnZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1mb3JtYXQ9JWNOJW4lYU4gPCVhRT4nLCBvcHRpb25zLm5ld3Jldl0pCisgICAgICAgIGlmIHJldl9pbmZvIGFuZCByZXZfaW5mb1swXSA9PSAnR2Vycml0IENvZGUgUmV2aWV3JzoKKyAgICAgICAgICAgIG9wdGlvbnMuc3VibWl0dGVyID0gcmV2X2luZm9bMV0KKworICAgICMgV2UgcGFzcyBiYWNrIHJlZm5hbWUsIG9sZHJldiwgbmV3cmV2IGFzIGFyZ3MgYmVjYXVzZSB0aGVuIHRoZQorICAgICMgZ2Vycml0IHJlZi11cGRhdGVkIGhvb2sgaXMgbXVjaCBsaWtlIHRoZSBnaXQgdXBkYXRlIGhvb2sKKyAgICByZXR1cm4gKG9wdGlvbnMsCisgICAgICAgICAgICBbb3B0aW9ucy5yZWZuYW1lLCBvcHRpb25zLm9sZHJldiwgb3B0aW9ucy5uZXdyZXZdLAorICAgICAgICAgICAgeydwcm9qZWN0Jzogb3B0aW9ucy5wcm9qZWN0LCAnc3VibWl0dGVyJzogb3B0aW9ucy5zdWJtaXR0ZXIsCisgICAgICAgICAgICAgJ3VwZGF0ZV9tZXRob2QnOiB1cGRhdGVfbWV0aG9kfSkKKworCitkZWYgY2hlY2tfaG9va19zcGVjaWZpY19hcmdzKG9wdGlvbnMsIGFyZ3MpOgorICAgICMgRmlyc3QgY2hlY2sgZm9yIHN0YXNoIGFyZ3VtZW50cworICAgIGlmIChvcHRpb25zLnN0YXNoX3VzZXIgaXMgTm9uZSkgIT0gKG9wdGlvbnMuc3Rhc2hfcmVwbyBpcyBOb25lKToKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgiRXJyb3I6IFNwZWNpZnkgYm90aCBvZiAtLXN0YXNoLXVzZXIgYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiLS1zdGFzaC1yZXBvIG9yIG5laXRoZXIuIikKKyAgICBpZiBvcHRpb25zLnN0YXNoX3VzZXI6CisgICAgICAgIG9wdGlvbnMuZW52aXJvbm1lbnQgPSAnc3Rhc2gnCisgICAgICAgIHJldHVybiBvcHRpb25zLCBhcmdzLCB7J3N0YXNoX3VzZXInOiBvcHRpb25zLnN0YXNoX3VzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXNoX3JlcG8nOiBvcHRpb25zLnN0YXNoX3JlcG99CisKKyAgICAjIEZpbmFsbHksIGNoZWNrIGZvciBnZXJyaXQgc3BlY2lmaWMgYXJndW1lbnRzCisgICAgcmVxdWlyZWRfZ2Vycml0X29wdGlvbnMgPSAob3B0aW9ucy5vbGRyZXYsIG9wdGlvbnMubmV3cmV2LCBvcHRpb25zLnJlZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcm9qZWN0KQorICAgIGlmIHJlcXVpcmVkX2dlcnJpdF9vcHRpb25zICE9IChOb25lLCkgKiA0OgorICAgICAgICByZXR1cm4gY29tcHV0ZV9nZXJyaXRfb3B0aW9ucyhvcHRpb25zLCBhcmdzLCByZXF1aXJlZF9nZXJyaXRfb3B0aW9ucykKKworICAgICMgTm8gc3BlY2lhbCBvcHRpb25zIGluIHVzZSwganVzdCByZXR1cm4gd2hhdCB3ZSBzdGFydGVkIHdpdGgKKyAgICByZXR1cm4gb3B0aW9ucywgYXJncywge30KKworCitkZWYgbWFpbihhcmdzKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uPV9fZG9jX18sCisgICAgICAgIHVzYWdlPSclcHJvZyBbT1BUSU9OU11cbiAgIG9yOiAlcHJvZyBbT1BUSU9OU10gUkVGTkFNRSBPTERSRVYgTkVXUkVWJywKKyAgICAgICAgKQorCisgICAgcGFyc2VyLmFkZF9vcHRpb24oCisgICAgICAgICctLWVudmlyb25tZW50JywgJy0tZW52JywgYWN0aW9uPSdzdG9yZScsIHR5cGU9J2Nob2ljZScsCisgICAgICAgIGNob2ljZXM9bGlzdChLTk9XTl9FTlZJUk9OTUVOVFMua2V5cygpKSwgZGVmYXVsdD1Ob25lLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICdDaG9vc2UgdHlwZSBvZiBlbnZpcm9ubWVudCBpcyBpbiB1c2UuICBEZWZhdWx0IGlzIHRha2VuIGZyb20gJworICAgICAgICAgICAgJ211bHRpbWFpbGhvb2suZW52aXJvbm1lbnQgaWYgc2V0OyBvdGhlcndpc2UgImdlbmVyaWMiLicKKyAgICAgICAgICAgICksCisgICAgICAgICkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tc3Rkb3V0JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0nT3V0cHV0IGVtYWlscyB0byBzdGRvdXQgcmF0aGVyIHRoYW4gc2VuZGluZyB0aGVtLicsCisgICAgICAgICkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tcmVjaXBpZW50cycsIGFjdGlvbj0nc3RvcmUnLCBkZWZhdWx0PU5vbmUsCisgICAgICAgIGhlbHA9J1NldCBsaXN0IG9mIGVtYWlsIHJlY2lwaWVudHMgZm9yIGFsbCB0eXBlcyBvZiBlbWFpbHMuJywKKyAgICAgICAgKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKAorICAgICAgICAnLS1zaG93LWVudicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9KAorICAgICAgICAgICAgJ1dyaXRlIHRvIHN0ZGVyciB0aGUgdmFsdWVzIGRldGVybWluZWQgZm9yIHRoZSBlbnZpcm9ubWVudCAnCisgICAgICAgICAgICAnKGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMpLicKKyAgICAgICAgICAgICksCisgICAgICAgICkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tZm9yY2Utc2VuZCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9KAorICAgICAgICAgICAgJ0ZvcmNlIHNlbmRpbmcgcmVmY2hhbmdlIGVtYWlsIHdoZW4gdXNpbmcgYXMgYW4gdXBkYXRlIGhvb2suICcKKyAgICAgICAgICAgICdUaGlzIGlzIHVzZWZ1bCB0byB3b3JrIGFyb3VuZCB0aGUgdW5yZWxpYWJsZSBuZXcgY29tbWl0cyAnCisgICAgICAgICAgICAnZGV0ZWN0aW9uIGluIHRoaXMgbW9kZS4nCisgICAgICAgICAgICApLAorICAgICAgICApCisgICAgcGFyc2VyLmFkZF9vcHRpb24oCisgICAgICAgICctYycsIG1ldGF2YXI9IjxuYW1lPj08dmFsdWU+IiwgYWN0aW9uPSdhcHBlbmQnLAorICAgICAgICBoZWxwPSgKKyAgICAgICAgICAgICdQYXNzIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGhyb3VnaCB0byBnaXQuICBUaGUgdmFsdWUgZ2l2ZW4gJworICAgICAgICAgICAgJ3dpbGwgb3ZlcnJpZGUgdmFsdWVzIGZyb20gY29uZmlndXJhdGlvbiBmaWxlcy4gIFNlZSB0aGUgLWMgb3B0aW9uICcKKyAgICAgICAgICAgICdvZiBnaXQoMSkgZm9yIG1vcmUgZGV0YWlscy4gIChPbmx5IHdvcmtzIHdpdGggZ2l0ID49IDEuNy4zKScKKyAgICAgICAgICAgICksCisgICAgICAgICkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tdmVyc2lvbicsICctdicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9KAorICAgICAgICAgICAgIkRpc3BsYXkgZ2l0LW11bHRpbWFpbCdzIHZlcnNpb24iCisgICAgICAgICAgICApLAorICAgICAgICApCisgICAgIyBUaGUgZm9sbG93aW5nIG9wdGlvbnMgcGVybWl0IHRoaXMgc2NyaXB0IHRvIGJlIHJ1biBhcyBhIGdlcnJpdAorICAgICMgcmVmLXVwZGF0ZWQgaG9vay4gIFNlZSBlLmcuCisgICAgIyBjb2RlLmdvb2dsZS5jb20vcC9nZXJyaXQvc291cmNlL2Jyb3dzZS9Eb2N1bWVudGF0aW9uL2NvbmZpZy1ob29rcy50eHQKKyAgICAjIFdlIHN1cHByZXNzIGhlbHAgZm9yIHRoZXNlIGl0ZW1zLCBzaW5jZSB0aGVzZSBhcmUgc3BlY2lmaWMgdG8gZ2Vycml0LAorICAgICMgYW5kIHdlIGRvbid0IHdhbnQgdXNlcnMgZGlyZWN0bHkgdXNpbmcgdGhlbSBhbnkgd2F5IG90aGVyIHRoYW4gaG93IHRoZQorICAgICMgZ2Vycml0IHJlZi11cGRhdGVkIGhvb2sgaXMgY2FsbGVkLgorICAgIHBhcnNlci5hZGRfb3B0aW9uKCctLW9sZHJldicsIGFjdGlvbj0nc3RvcmUnLCBoZWxwPW9wdHBhcnNlLlNVUFBSRVNTX0hFTFApCisgICAgcGFyc2VyLmFkZF9vcHRpb24oJy0tbmV3cmV2JywgYWN0aW9uPSdzdG9yZScsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1yZWZuYW1lJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1wcm9qZWN0JywgYWN0aW9uPSdzdG9yZScsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1zdWJtaXR0ZXInLCBhY3Rpb249J3N0b3JlJywgaGVscD1vcHRwYXJzZS5TVVBQUkVTU19IRUxQKQorCisgICAgIyBUaGUgZm9sbG93aW5nIGFsbG93IHRoaXMgdG8gYmUgcnVuIGFzIGEgc3Rhc2ggYXN5bmNocm9ub3VzIHBvc3QtcmVjZWl2ZQorICAgICMgaG9vayAoYWxtb3N0IGlkZW50aWNhbCB0byBhIGdpdCBwb3N0LXJlY2VpdmUgaG9vayBidXQgdHJpZ2dlcmVkIGFsc28gZm9yCisgICAgIyBtZXJnZXMgb2YgcHVsbCByZXF1ZXN0cyBmcm9tIHRoZSBVSSkuICBXZSBzdXBwcmVzcyBoZWxwIGZvciB0aGVzZSBpdGVtcywKKyAgICAjIHNpbmNlIHRoZXNlIGFyZSBzcGVjaWZpYyB0byBzdGFzaC4KKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1zdGFzaC11c2VyJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCkKKyAgICBwYXJzZXIuYWRkX29wdGlvbignLS1zdGFzaC1yZXBvJywgYWN0aW9uPSdzdG9yZScsIGhlbHA9b3B0cGFyc2UuU1VQUFJFU1NfSEVMUCkKKworICAgIChvcHRpb25zLCBhcmdzKSA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCisgICAgKG9wdGlvbnMsIGFyZ3MsIGhvb2tfaW5mbykgPSBjaGVja19ob29rX3NwZWNpZmljX2FyZ3Mob3B0aW9ucywgYXJncykKKworICAgIGlmIG9wdGlvbnMudmVyc2lvbjoKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnZ2l0LW11bHRpbWFpbCB2ZXJzaW9uICcgKyBnZXRfdmVyc2lvbigpICsgJ1xuJykKKyAgICAgICAgcmV0dXJuCisKKyAgICBpZiBvcHRpb25zLmM6CisgICAgICAgIHBhcmFtZXRlcnMgPSBvcy5lbnZpcm9uLmdldCgnR0lUX0NPTkZJR19QQVJBTUVURVJTJywgJycpCisgICAgICAgIGlmIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzICs9ICcgJworICAgICAgICAjIGdpdCBleHBlY3RzIEdJVF9DT05GSUdfUEFSQU1FVEVSUyB0byBiZSBvZiB0aGUgZm9ybQorICAgICAgICAjICAgICInbmFtZTE9dmFsdWUxJyAnbmFtZTI9dmFsdWUyJyAnbmFtZTM9dmFsdWUzJyIKKyAgICAgICAgIyBpbmNsdWRpbmcgZXZlcnl0aGluZyBpbnNpZGUgdGhlIGRvdWJsZSBxdW90ZXMgKGJ1dCBub3QgdGhlIGRvdWJsZQorICAgICAgICAjIHF1b3RlcyB0aGVtc2VsdmVzKS4gIFNwYWNpbmcgaXMgY3JpdGljYWwuICBBbHNvLCBpZiBhIHZhbHVlIGNvbnRhaW5zCisgICAgICAgICMgYSBsaXRlcmFsIHNpbmdsZSBxdW90ZSB0aGF0IHF1b3RlIG11c3QgYmUgcmVwcmVzZW50ZWQgdXNpbmcgdGhlCisgICAgICAgICMgZm91ciBjaGFyYWN0ZXIgc2VxdWVuY2U6ICdcJycKKyAgICAgICAgcGFyYW1ldGVycyArPSAnICcuam9pbigiJyIgKyB4LnJlcGxhY2UoIiciLCAiJ1xcJyciKSArICInIiBmb3IgeCBpbiBvcHRpb25zLmMpCisgICAgICAgIG9zLmVudmlyb25bJ0dJVF9DT05GSUdfUEFSQU1FVEVSUyddID0gcGFyYW1ldGVycworCisgICAgY29uZmlnID0gQ29uZmlnKCdtdWx0aW1haWxob29rJykKKworICAgIHRyeToKKyAgICAgICAgZW52aXJvbm1lbnQgPSBjaG9vc2VfZW52aXJvbm1lbnQoCisgICAgICAgICAgICBjb25maWcsIG9zZW52PW9zLmVudmlyb24sCisgICAgICAgICAgICBlbnY9b3B0aW9ucy5lbnZpcm9ubWVudCwKKyAgICAgICAgICAgIHJlY2lwaWVudHM9b3B0aW9ucy5yZWNpcGllbnRzLAorICAgICAgICAgICAgaG9va19pbmZvPWhvb2tfaW5mbywKKyAgICAgICAgICAgICkKKworICAgICAgICBpZiBvcHRpb25zLnNob3dfZW52OgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnRW52aXJvbm1lbnQgdmFsdWVzOlxuJykKKyAgICAgICAgICAgIGZvciAoaywgdikgaW4gc29ydGVkKGVudmlyb25tZW50LmdldF92YWx1ZXMoKS5pdGVtcygpKToKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcgICAgJXMgOiAlclxuJyAlIChrLCB2KSkKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuJykKKworICAgICAgICBpZiBvcHRpb25zLnN0ZG91dCBvciBlbnZpcm9ubWVudC5zdGRvdXQ6CisgICAgICAgICAgICBtYWlsZXIgPSBPdXRwdXRNYWlsZXIoc3lzLnN0ZG91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1haWxlciA9IGNob29zZV9tYWlsZXIoY29uZmlnLCBlbnZpcm9ubWVudCkKKworICAgICAgICAjIER1YWwgbW9kZTogaWYgYXJndW1lbnRzIHdlcmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIHJ1bgorICAgICAgICAjIGxpa2UgYW4gdXBkYXRlIGhvb2s7IG90aGVyd2lzZSwgcnVuIGFzIGEgcG9zdC1yZWNlaXZlIGhvb2suCisgICAgICAgIGlmIGFyZ3M6CisgICAgICAgICAgICBpZiBsZW4oYXJncykgIT0gMzoKKyAgICAgICAgICAgICAgICBwYXJzZXIuZXJyb3IoJ05lZWQgemVybyBvciB0aHJlZSBub24tb3B0aW9uIGFyZ3VtZW50cycpCisgICAgICAgICAgICAocmVmbmFtZSwgb2xkcmV2LCBuZXdyZXYpID0gYXJncworICAgICAgICAgICAgcnVuX2FzX3VwZGF0ZV9ob29rKGVudmlyb25tZW50LCBtYWlsZXIsIHJlZm5hbWUsIG9sZHJldiwgbmV3cmV2LCBvcHRpb25zLmZvcmNlX3NlbmQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBydW5fYXNfcG9zdF9yZWNlaXZlX2hvb2soZW52aXJvbm1lbnQsIG1haWxlcikKKyAgICBleGNlcHQgQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjoKKyAgICAgICAgc3lzLmV4aXQoc3lzLmV4Y19pbmZvKClbMV0pCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgdCwgZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBpbXBvcnQgdHJhY2ViYWNrCisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnRXhjZXB0aW9uIFwnJyArIHQuX19uYW1lX18gKworICAgICAgICAgICAgICAgICAgICAgICAgICdcJyByYWlzZWQuIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyB0b1xuJykKKyAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnaHR0cHM6Ly9naXRodWIuY29tL2dpdC1tdWx0aW1haWwvZ2l0LW11bHRpbWFpbC9pc3N1ZXNcbicpCisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ3dpdGggdGhlIGluZm9ybWF0aW9uIGJlbG93OlxuXG4nKQorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdnaXQtbXVsdGltYWlsIHZlcnNpb24gJyArIGdldF92ZXJzaW9uKCkgKyAnXG4nKQorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdQeXRob24gdmVyc2lvbiAnICsgc3lzLnZlcnNpb24gKyAnXG4nKQorICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZG91dCkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKHN5cy5hcmd2WzE6XSkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL21pZ3JhdGUtbWFpbGhvb2stY29uZmlnIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvbWlncmF0ZS1tYWlsaG9vay1jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTkyNjU3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL21pZ3JhdGUtbWFpbGhvb2stY29uZmlnCkBAIC0wLDAgKzEsMjcxIEBACisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyIiIk1pZ3JhdGUgYSBwb3N0LXJlY2VpdmUtZW1haWwgY29uZmlndXJhdGlvbiB0byBiZSB1c2FibGUgd2l0aCBnaXRfbXVsdGltYWlsLnB5LgorCitTZWUgUkVBRE1FLm1pZ3JhdGUtZnJvbS1wb3N0LXJlY2VpdmUtZW1haWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3B0cGFyc2UKKworZnJvbSBnaXRfbXVsdGltYWlsIGltcG9ydCBDb21tYW5kRXJyb3IKK2Zyb20gZ2l0X211bHRpbWFpbCBpbXBvcnQgQ29uZmlnCitmcm9tIGdpdF9tdWx0aW1haWwgaW1wb3J0IHJlYWRfb3V0cHV0CisKKworT0xEX05BTUVTID0gWworICAgICdtYWlsaW5nbGlzdCcsCisgICAgJ2Fubm91bmNlbGlzdCcsCisgICAgJ2VudmVsb3Blc2VuZGVyJywKKyAgICAnZW1haWxwcmVmaXgnLAorICAgICdzaG93cmV2JywKKyAgICAnZW1haWxtYXhsaW5lcycsCisgICAgJ2RpZmZvcHRzJywKKyAgICAnc2NhbmNvbW1pdGZvcmNjJywKKyAgICBdCisKK05FV19OQU1FUyA9IFsKKyAgICAnZW52aXJvbm1lbnQnLAorICAgICdyZXBvbmFtZScsCisgICAgJ21haWxpbmdsaXN0JywKKyAgICAncmVmY2hhbmdlbGlzdCcsCisgICAgJ2NvbW1pdGxpc3QnLAorICAgICdhbm5vdW5jZWxpc3QnLAorICAgICdhbm5vdW5jZXNob3J0bG9nJywKKyAgICAnZW52ZWxvcGVzZW5kZXInLAorICAgICdhZG1pbmlzdHJhdG9yJywKKyAgICAnZW1haWxwcmVmaXgnLAorICAgICdlbWFpbG1heGxpbmVzJywKKyAgICAnZGlmZm9wdHMnLAorICAgICdlbWFpbGRvbWFpbicsCisgICAgJ3NjYW5jb21taXRmb3JjYycsCisgICAgXQorCisKK0lORk8gPSAiIiJcCisKK1NVQ0NFU1MhCisKK1lvdXIgcG9zdC1yZWNlaXZlLWVtYWlsIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gY29udmVydGVkIHRvCitnaXQtbXVsdGltYWlsIGZvcm1hdC4gIFBsZWFzZSBzZWUgUkVBRE1FIGFuZAorUkVBRE1FLm1pZ3JhdGUtZnJvbS1wb3N0LXJlY2VpdmUtZW1haWwgdG8gbGVhcm4gYWJvdXQgb3RoZXIKK2dpdC1tdWx0aW1haWwgY29uZmlndXJhdGlvbiBwb3NzaWJpbGl0aWVzLgorCitGb3IgZXhhbXBsZSwgZ2l0LW11bHRpbWFpbCBoYXMgdGhlIGZvbGxvd2luZyBuZXcgb3B0aW9ucyB3aXRoIG5vCitlcXVpdmFsZW50IGluIHBvc3QtcmVjZWl2ZS1lbWFpbC4gIFlvdSBtaWdodCB3YW50IHRvIHJlYWQgYWJvdXQgdGhlbQordG8gc2VlIGlmIHRoZXkgd291bGQgYmUgdXNlZnVsIGluIHlvdXIgc2l0dWF0aW9uOgorCisiIiIKKworCitkZWYgX2NoZWNrX29sZF9jb25maWdfZXhpc3RzKG9sZCk6CisgICAgIiIiQ2hlY2sgdGhhdCBhdCBsZWFzdCBvbmUgb2xkIGNvbmZpZ3VyYXRpb24gdmFsdWUgaXMgc2V0LiIiIgorCisgICAgZm9yIG5hbWUgaW4gT0xEX05BTUVTOgorICAgICAgICBpZiBuYW1lIGluIG9sZDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICByZXR1cm4gRmFsc2UKKworCitkZWYgX2NoZWNrX25ld19jb25maWdfY2xlYXIobmV3KToKKyAgICAiIiJDaGVjayB0aGF0IG5vbmUgb2YgdGhlIG5ldyBjb25maWd1cmF0aW9uIG5hbWVzIGFyZSBzZXQuIiIiCisKKyAgICByZXR2YWwgPSBUcnVlCisgICAgZm9yIG5hbWUgaW4gTkVXX05BTUVTOgorICAgICAgICBpZiBuYW1lIGluIG5ldzoKKyAgICAgICAgICAgIGlmIHJldHZhbDoKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdJTkZPOiBUaGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFscmVhZHkgZXhpc3Q6XG5cbicpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcgICAgIiVzLiVzIlxuJyAlIChuZXcuc2VjdGlvbiwgbmFtZSkpCisgICAgICAgICAgICByZXR2YWwgPSBGYWxzZQorCisgICAgcmV0dXJuIHJldHZhbAorCisKK2RlZiBlcmFzZV92YWx1ZXMoY29uZmlnLCBuYW1lcyk6CisgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgIGlmIG5hbWUgaW4gY29uZmlnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy4uLnVuc2V0dGluZyAiJXMuJXMiXG4nICUgKGNvbmZpZy5zZWN0aW9uLCBuYW1lKSkKKyAgICAgICAgICAgICAgICBjb25maWcudW5zZXRfYWxsKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoCisgICAgICAgICAgICAgICAgICAgICdcbldBUk5JTkc6IGNvdWxkIG5vdCB1bnNldCAiJXMuJXMiLiAgJworICAgICAgICAgICAgICAgICAgICAnUGVyaGFwcyBpdCBpcyBub3Qgc2V0IGF0IHRoZSAtLWxvY2FsIGxldmVsP1xuXG4nCisgICAgICAgICAgICAgICAgICAgICUgKGNvbmZpZy5zZWN0aW9uLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICApCisKKworZGVmIGlzX3NlY3Rpb25fZW1wdHkoc2VjdGlvbiwgbG9jYWwpOgorICAgICIiIlJldHVybiBUcnVlIGlmZiB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiBpcyBlbXB0eS4KKworICAgIElmZiBsb2NhbCBpcyBUcnVlLCB1c2UgdGhlIC0tbG9jYWwgb3B0aW9uIHdoZW4gaW52b2tpbmcgJ2dpdAorICAgIGNvbmZpZycuIiIiCisKKyAgICBpZiBsb2NhbDoKKyAgICAgICAgbG9jYWxfb3B0aW9uID0gWyctLWxvY2FsJ10KKyAgICBlbHNlOgorICAgICAgICBsb2NhbF9vcHRpb24gPSBbXQorCisgICAgdHJ5OgorICAgICAgICByZWFkX291dHB1dCgKKyAgICAgICAgICAgIFsnZ2l0JywgJ2NvbmZpZyddCisgICAgICAgICAgICArIGxvY2FsX29wdGlvbgorICAgICAgICAgICAgKyBbJy0tZ2V0LXJlZ2V4cCcsICdeJXNcLicgJSAoc2VjdGlvbiwpXQorICAgICAgICAgICAgKQorICAgIGV4Y2VwdCBDb21tYW5kRXJyb3IsIGU6CisgICAgICAgIGlmIGUucmV0Y29kZSA9PSAxOgorICAgICAgICAgICAgIyBUaGlzIG1lYW5zIHRoYXQgbm8gc2V0dGluZ3Mgd2VyZSBmb3VuZC4KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2RlZiByZW1vdmVfc2VjdGlvbl9pZl9lbXB0eShzZWN0aW9uKToKKyAgICAiIiJJZiB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiBpcyBlbXB0eSwgZGVsZXRlIGl0LiIiIgorCisgICAgdHJ5OgorICAgICAgICBlbXB0eSA9IGlzX3NlY3Rpb25fZW1wdHkoc2VjdGlvbiwgbG9jYWw9VHJ1ZSkKKyAgICBleGNlcHQgQ29tbWFuZEVycm9yOgorICAgICAgICAjIE9sZGVyIHZlcnNpb25zIG9mIGdpdCBkbyBub3Qgc3VwcG9ydCB0aGUgLS1sb2NhbCBvcHRpb24sIHNvCisgICAgICAgICMgaWYgdGhlIGZpcnN0IGF0dGVtcHQgZmFpbHMsIHRyeSB3aXRob3V0IC0tbG9jYWwuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGVtcHR5ID0gaXNfc2VjdGlvbl9lbXB0eShzZWN0aW9uLCBsb2NhbD1GYWxzZSkKKyAgICAgICAgZXhjZXB0IENvbW1hbmRFcnJvcjoKKyAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoCisgICAgICAgICAgICAgICAgJ1xuSU5GTzogSWYgY29uZmlndXJhdGlvbiBzZWN0aW9uICIlcy4qIiBpcyBlbXB0eSwgeW91IG1pZ2h0IHdhbnQgJworICAgICAgICAgICAgICAgICd0byBkZWxldGUgaXQuXG5cbicKKyAgICAgICAgICAgICAgICAlIChzZWN0aW9uLCkKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICByZXR1cm4KKworICAgIGlmIGVtcHR5OgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcuLi5yZW1vdmluZyBzZWN0aW9uICIlcy4qIlxuJyAlIChzZWN0aW9uLCkpCisgICAgICAgIHJlYWRfb3V0cHV0KFsnZ2l0JywgJ2NvbmZpZycsICctLXJlbW92ZS1zZWN0aW9uJywgc2VjdGlvbl0pCisgICAgZWxzZToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICdcbklORk86IENvbmZpZ3VyYXRpb24gc2VjdGlvbiAiJXMuKiIgc3RpbGwgaGFzIGNvbnRlbnRzLiAgJworICAgICAgICAgICAgJ0l0IHdpbGwgbm90IGJlIGRlbGV0ZWQuXG5cbicKKyAgICAgICAgICAgICUgKHNlY3Rpb24sKQorICAgICAgICAgICAgKQorCisKK2RlZiBtaWdyYXRlX2NvbmZpZyhzdHJpY3Q9RmFsc2UsIHJldGFpbj1GYWxzZSwgb3ZlcndyaXRlPUZhbHNlKToKKyAgICBvbGQgPSBDb25maWcoJ2hvb2tzJykKKyAgICBuZXcgPSBDb25maWcoJ211bHRpbWFpbGhvb2snKQorICAgIGlmIG5vdCBfY2hlY2tfb2xkX2NvbmZpZ19leGlzdHMob2xkKToKKyAgICAgICAgc3lzLmV4aXQoCisgICAgICAgICAgICAnWW91ciByZXBvc2l0b3J5IGhhcyBubyBwb3N0LXJlY2VpdmUtZW1haWwgY29uZmlndXJhdGlvbi4gICcKKyAgICAgICAgICAgICdOb3RoaW5nIHRvIGRvLicKKyAgICAgICAgICAgICkKKyAgICBpZiBub3QgX2NoZWNrX25ld19jb25maWdfY2xlYXIobmV3KToKKyAgICAgICAgaWYgb3ZlcndyaXRlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnXG5XQVJOSU5HOiBFcmFzaW5nIHRoZSBhYm92ZSB2YWx1ZXMuLi5cblxuJykKKyAgICAgICAgICAgIGVyYXNlX3ZhbHVlcyhuZXcsIE5FV19OQU1FUykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5cy5leGl0KAorICAgICAgICAgICAgICAgICdcbkVSUk9SOiBSZWZ1c2luZyB0byBvdmVyd3JpdGUgZXhpc3RpbmcgdmFsdWVzLiAgVXNlIHRoZSAtLW92ZXJ3cml0ZVxuJworICAgICAgICAgICAgICAgICdvcHRpb24gdG8gY29udGludWUgYW55d2F5LicKKyAgICAgICAgICAgICAgICApCisKKyAgICBuYW1lID0gJ3Nob3dyZXYnCisgICAgaWYgbmFtZSBpbiBvbGQ6CisgICAgICAgIG1zZyA9ICdnaXQtbXVsdGltYWlsIGRvZXMgbm90IHN1cHBvcnQgIiVzLiVzIicgJSAob2xkLnNlY3Rpb24sIG5hbWUsKQorICAgICAgICBpZiBzdHJpY3Q6CisgICAgICAgICAgICBzeXMuZXhpdCgKKyAgICAgICAgICAgICAgICAnRVJST1I6ICVzLlxuJworICAgICAgICAgICAgICAgICdQbGVhc2UgdW5zZXQgdGhhdCB2YWx1ZSB0aGVuIHRyeSBhZ2Fpbiwgb3IgcnVuIHdpdGhvdXQgLS1zdHJpY3QuJworICAgICAgICAgICAgICAgICUgKG1zZywpCisgICAgICAgICAgICAgICAgKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnXG5XQVJOSU5HOiAlcyAoaWdub3JpbmcpLlxuXG4nICUgKG1zZywpKQorCisgICAgZm9yIG5hbWUgaW4gWydtYWlsaW5nbGlzdCcsICdhbm5vdW5jZWxpc3QnXToKKyAgICAgICAgaWYgbmFtZSBpbiBvbGQ6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgICAgICcuLi5jb3B5aW5nICIlcy4lcyIgdG8gIiVzLiVzIlxuJyAlIChvbGQuc2VjdGlvbiwgbmFtZSwgbmV3LnNlY3Rpb24sIG5hbWUpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbmV3LnNldF9yZWNpcGllbnRzKG5hbWUsIG9sZC5nZXRfcmVjaXBpZW50cyhuYW1lKSkKKworICAgIGlmIHN0cmljdDoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICcuLi5zZXR0aW5nICIlcy5jb21taXRsaXN0IiB0byB0aGUgZW1wdHkgc3RyaW5nXG4nICUgKG5ldy5zZWN0aW9uLCkKKyAgICAgICAgICAgICkKKyAgICAgICAgbmV3LnNldF9yZWNpcGllbnRzKCdjb21taXRsaXN0JywgJycpCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoCisgICAgICAgICAgICAnLi4uc2V0dGluZyAiJXMuYW5ub3VuY2VzaG9ydGxvZyIgdG8gInRydWUiXG4nICUgKG5ldy5zZWN0aW9uLCkKKyAgICAgICAgICAgICkKKyAgICAgICAgbmV3LnNldCgnYW5ub3VuY2VzaG9ydGxvZycsICd0cnVlJykKKworICAgIGZvciBuYW1lIGluIFsnZW52ZWxvcGVzZW5kZXInLCAnZW1haWxtYXhsaW5lcycsICdkaWZmb3B0cycsICdzY2FuY29tbWl0Zm9yY2MnXToKKyAgICAgICAgaWYgbmFtZSBpbiBvbGQ6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAorICAgICAgICAgICAgICAgICcuLi5jb3B5aW5nICIlcy4lcyIgdG8gIiVzLiVzIlxuJyAlIChvbGQuc2VjdGlvbiwgbmFtZSwgbmV3LnNlY3Rpb24sIG5hbWUpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbmV3LnNldChuYW1lLCBvbGQuZ2V0KG5hbWUpKQorCisgICAgbmFtZSA9ICdlbWFpbHByZWZpeCcKKyAgICBpZiBuYW1lIGluIG9sZDoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICcuLi5jb3B5aW5nICIlcy4lcyIgdG8gIiVzLiVzIlxuJyAlIChvbGQuc2VjdGlvbiwgbmFtZSwgbmV3LnNlY3Rpb24sIG5hbWUpCisgICAgICAgICAgICApCisgICAgICAgIG5ldy5zZXQobmFtZSwgb2xkLmdldChuYW1lKSkKKyAgICBlbGlmIHN0cmljdDoKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKKyAgICAgICAgICAgICcuLi5zZXR0aW5nICIlcy4lcyIgdG8gIltTQ01dIiB0byBwcmVzZXJ2ZSBvbGQgc3ViamVjdCBsaW5lc1xuJworICAgICAgICAgICAgJSAobmV3LnNlY3Rpb24sIG5hbWUpCisgICAgICAgICAgICApCisgICAgICAgIG5ldy5zZXQobmFtZSwgJ1tTQ01dJykKKworICAgIGlmIG5vdCByZXRhaW46CisgICAgICAgIGVyYXNlX3ZhbHVlcyhvbGQsIE9MRF9OQU1FUykKKyAgICAgICAgcmVtb3ZlX3NlY3Rpb25faWZfZW1wdHkob2xkLnNlY3Rpb24pCisKKyAgICBzeXMuc3RkZXJyLndyaXRlKElORk8pCisgICAgZm9yIG5hbWUgaW4gTkVXX05BTUVTOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiBPTERfTkFNRVM6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCcgICAgIiVzLiVzIlxuJyAlIChuZXcuc2VjdGlvbiwgbmFtZSwpKQorICAgIHN5cy5zdGRlcnIud3JpdGUoJ1xuJykKKworCitkZWYgbWFpbihhcmdzKToKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uPV9fZG9jX18sCisgICAgICAgIHVzYWdlPSclcHJvZyBbT1BUSU9OU10nLAorICAgICAgICApCisKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tc3RyaWN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oCisgICAgICAgICAgICAnU2xhdmlzaGx5IGNvbmZpZ3VyZSBnaXQtbXVsdGltYWlsIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgdG8gJworICAgICAgICAgICAgJ3RoZSBwb3N0LXJlY2VpdmUtZW1haWwgY29uZmlndXJhdGlvbi4gIERlZmF1bHQgaXMgdG8gdHVybiAnCisgICAgICAgICAgICAnb24gc29tZSBuZXcgZmVhdHVyZXMgdGhhdCBoYXZlIG5vIGVxdWl2YWxlbnQgaW4gcG9zdC1yZWNlaXZlLWVtYWlsLicKKyAgICAgICAgICAgICksCisgICAgICAgICkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tcmV0YWluJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oCisgICAgICAgICAgICAnUmV0YWluIHRoZSBwb3N0LXJlY2VpdmUtZW1haWwgY29uZmlndXJhdGlvbiB2YWx1ZXMuICAnCisgICAgICAgICAgICAnRGVmYXVsdCBpcyB0byBkZWxldGUgdGhlbSBhZnRlciB0aGUgbmV3IHZhbHVlcyBhcmUgc2V0LicKKyAgICAgICAgICAgICksCisgICAgICAgICkKKyAgICBwYXJzZXIuYWRkX29wdGlvbigKKyAgICAgICAgJy0tb3ZlcndyaXRlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oCisgICAgICAgICAgICAnT3ZlcndyaXRlIGFueSBleGlzdGluZyBnaXQtbXVsdGltYWlsIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuICAnCisgICAgICAgICAgICAnRGVmYXVsdCBpcyB0byBhYm9ydCBpZiBzdWNoIHNldHRpbmdzIGFscmVhZHkgZXhpc3QuJworICAgICAgICAgICAgKSwKKyAgICAgICAgKQorCisgICAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKKworICAgIGlmIGFyZ3M6CisgICAgICAgIHBhcnNlci5lcnJvcignVW5leHBlY3RlZCBhcmd1bWVudHM6ICVzJyAlICgnICcuam9pbihhcmdzKSwpKQorCisgICAgbWlncmF0ZV9jb25maWcoc3RyaWN0PW9wdGlvbnMuc3RyaWN0LCByZXRhaW49b3B0aW9ucy5yZXRhaW4sIG92ZXJ3cml0ZT1vcHRpb25zLm92ZXJ3cml0ZSkKKworCittYWluKHN5cy5hcmd2WzE6XSkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL3Bvc3QtcmVjZWl2ZS5leGFtcGxlIGIvY29udHJpYi9ob29rcy9tdWx0aW1haWwvcG9zdC1yZWNlaXZlLmV4YW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTk3NWRmNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvbXVsdGltYWlsL3Bvc3QtcmVjZWl2ZS5leGFtcGxlCkBAIC0wLDAgKzEsOTUgQEAKKyMhIC91c3IvYmluL2VudiBweXRob24KKworIiIiRXhhbXBsZSBwb3N0LXJlY2VpdmUgaG9vayBiYXNlZCBvbiBnaXQtbXVsdGltYWlsLgorCitUaGUgc2ltcGxlc3Qgd2F5IHRvIHVzZSBnaXQtbXVsdGltYWlsIGlzIHRvIHVzZSB0aGUgc2NyaXB0CitnaXRfbXVsdGltYWlsLnB5IGRpcmVjdGx5IGFzIGEgcG9zdC1yZWNlaXZlIGhvb2ssIGFuZCB0byBjb25maWd1cmUgaXQKK3VzaW5nIEdpdCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGNvbW1hbmQtbGluZSBwYXJhbWV0ZXJzLiAgWW91IGNhbgorYWxzbyB3cml0ZSB5b3VyIG93biBQeXRob24gd3JhcHBlciBmb3IgbW9yZSBhZHZhbmNlZCBjb25maWd1cmFiaWxpdHksCit1c2luZyBnaXRfbXVsdGltYWlsLnB5IGFzIGEgUHl0aG9uIG1vZHVsZS4KKworVGhpcyBzY3JpcHQgaXMgYSBzaW1wbGUgZXhhbXBsZSBvZiBzdWNoIGEgcG9zdC1yZWNlaXZlIGhvb2suICBJdCBpcworaW50ZW5kZWQgdG8gYmUgY3VzdG9taXplZCBiZWZvcmUgdXNlOyBzZWUgdGhlIGNvbW1lbnRzIGluIHRoZSBzY3JpcHQKK3RvIGhlbHAgeW91IGdldCBzdGFydGVkLgorCitVc2luZyBnaXQtbXVsdGltYWlsIGFzIGEgUHl0aG9uIG1vZHVsZSBhcyBkb25lIGhlcmUgcHJvdmlkZXMgbW9yZQorZmxleGliaWxpdHkuICBJdCBoYXMgdGhlIGZvbGxvd2luZyBhZHZhbnRhZ2VzOgorCisqIFRoZSB0b29sJ3MgYmVoYXZpb3IgY2FuIGJlIGN1c3RvbWl6ZWQgdXNpbmcgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlLAorICB3aXRob3V0IGhhdmluZyB0byBlZGl0IGdpdF9tdWx0aW1haWwucHkuCisKKyogQ29uZmlndXJhdGlvbiBzZXR0aW5ncyBjYW4gYmUgcmVhZCBmcm9tIG90aGVyIHNvdXJjZXM7IGZvciBleGFtcGxlLAorICB1c2VyIG5hbWVzIGFuZCBlbWFpbCBhZGRyZXNzZXMgY291bGQgYmUgcmVhZCBmcm9tIExEQVAgb3IgZnJvbSBhCisgIGRhdGFiYXNlLiAgT3IgdGhlIHNldHRpbmdzIGNhbiBldmVuIGJlIGhhcmRjb2RlZCBpbiB0aGUgaW1wb3J0aW5nCisgIFB5dGhvbiBzY3JpcHQsIGlmIHRoaXMgaXMgcHJlZmVycmVkLgorCitUaGlzIHNjcmlwdCBpcyBhIHZlcnkgYmFzaWMgZXhhbXBsZSBvZiBob3cgdG8gdXNlIGdpdF9tdWx0aW1haWwucHkgYXMKK2EgbW9kdWxlLiAgVGhlIGNvbW1lbnRzIGJlbG93IGV4cGxhaW4gc29tZSBvZiB0aGUgcG9pbnRzIGF0IHdoaWNoIHRoZQorc2NyaXB0J3MgYmVoYXZpb3IgY291bGQgYmUgY2hhbmdlZCBvciBjdXN0b21pemVkLgorCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IG9zCisKKyMgSWYgbmVjZXNzYXJ5LCBhZGQgdGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCisjIGdpdF9tdWx0aW1haWwucHkgdG8gdGhlIFB5dGhvbiBwYXRoIGFzIGZvbGxvd3MuICAoVGhpcyBpcyBub3QKKyMgbmVjZXNzYXJ5IGlmIGdpdF9tdWx0aW1haWwucHkgaXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoaXMKKyMgc2NyaXB0KToKKworI0xJQkRJUiA9ICdwYXRoL3RvL2RpcmVjdG9yeS9jb250YWluaW5nL21vZHVsZScKKyNzeXMucGF0aC5pbnNlcnQoMCwgTElCRElSKQorCitpbXBvcnQgZ2l0X211bHRpbWFpbAorCisjIEl0IGlzIHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUgb3V0cHV0IHRlbXBsYXRlcyBoZXJlOyBlLmcuOgorCisjZ2l0X211bHRpbWFpbC5GT09URVJfVEVNUExBVEUgPSAiIiJcCisjCisjLS0gXG5cCisjVGhpcyBlbWFpbCB3YXMgZ2VuZXJhdGVkIGJ5IHRoZSB3b25kZXJmdWwgZ2l0LW11bHRpbWFpbCB0b29sLgorIyIiIgorCisKKyMgU3BlY2lmeSB3aGljaCAiZ2l0IGNvbmZpZyIgc2VjdGlvbiBjb250YWlucyB0aGUgY29uZmlndXJhdGlvbiBmb3IKKyMgZ2l0LW11bHRpbWFpbDoKK2NvbmZpZyA9IGdpdF9tdWx0aW1haWwuQ29uZmlnKCdtdWx0aW1haWxob29rJykKKworCisjIFNlbGVjdCB0aGUgdHlwZSBvZiBlbnZpcm9ubWVudDoKK3RyeToKKyAgICBlbnZpcm9ubWVudCA9IGdpdF9tdWx0aW1haWwuR2VuZXJpY0Vudmlyb25tZW50KGNvbmZpZz1jb25maWcpCisgICAgI2Vudmlyb25tZW50ID0gZ2l0X211bHRpbWFpbC5HaXRvbGl0ZUVudmlyb25tZW50KGNvbmZpZz1jb25maWcpCitleGNlcHQgZ2l0X211bHRpbWFpbC5Db25maWd1cmF0aW9uRXhjZXB0aW9uOgorICAgIHN5cy5zdGRlcnIud3JpdGUoJyoqKiAlc1xuJyAlIHN5cy5leGNfaW5mbygpWzFdKQorICAgIHN5cy5leGl0KDEpCisKKworIyBDaG9vc2UgdGhlIG1ldGhvZCBvZiBzZW5kaW5nIGVtYWlscyBiYXNlZCBvbiB0aGUgZ2l0IGNvbmZpZzoKK21haWxlciA9IGdpdF9tdWx0aW1haWwuY2hvb3NlX21haWxlcihjb25maWcsIGVudmlyb25tZW50KQorCisjIEFsdGVybmF0aXZlbHksIHlvdSBtYXkgaGFyZGNvZGUgdGhlIG1haWxlciB1c2luZyBjb2RlIGxpa2Ugb25lIG9mCisjIHRoZSBmb2xsb3dpbmc6CisKKyMgVXNlICIvdXNyL3NiaW4vc2VuZG1haWwgLW9pIC10IiB0byBzZW5kIGVtYWlscy4gIFRoZSBlbnZlbG9wZXNlbmRlcgorIyBhcmd1bWVudCBpcyBvcHRpb25hbDoKKyNtYWlsZXIgPSBnaXRfbXVsdGltYWlsLlNlbmRNYWlsZXIoCisjICAgIGNvbW1hbmQ9WycvdXNyL3NiaW4vc2VuZG1haWwnLCAnLW9pJywgJy10J10sCisjICAgIGVudmVsb3Blc2VuZGVyPSdnaXQtcmVwb0BleGFtcGxlLmNvbScsCisjICAgICkKKworIyBVc2UgUHl0aG9uJ3Mgc210cGxpYiB0byBzZW5kIGVtYWlscy4gIEJvdGggYXJndW1lbnRzIGFyZSByZXF1aXJlZC4KKyNtYWlsZXIgPSBnaXRfbXVsdGltYWlsLlNNVFBNYWlsZXIoCisjICAgIGVudmVsb3Blc2VuZGVyPSdnaXQtcmVwb0BleGFtcGxlLmNvbScsCisjICAgICMgVGhlIHNtdHBzZXJ2ZXIgYXJndW1lbnQgY2FuIGFsc28gaW5jbHVkZSBhIHBvcnQgbnVtYmVyOyBlLmcuLAorIyAgICAjICAgICBzbXRwc2VydmVyPSdtYWlsLmV4YW1wbGUuY29tOjI1JworIyAgICBzbXRwc2VydmVyPSdtYWlsLmV4YW1wbGUuY29tJywKKyMgICAgKQorCisjIE91dHB1dE1haWxlciBpcyBpbnRlbmRlZCBvbmx5IGZvciB0ZXN0aW5nOyBpdCB3cml0ZXMgdGhlIGVtYWlscyB0bworIyB0aGUgc3BlY2lmaWVkIGZpbGUgc3RyZWFtLgorI21haWxlciA9IGdpdF9tdWx0aW1haWwuT3V0cHV0TWFpbGVyKHN5cy5zdGRvdXQpCisKKworIyBSZWFkIGNoYW5nZXMgZnJvbSBzdGRpbiBhbmQgc2VuZCBub3RpZmljYXRpb24gZW1haWxzOgorZ2l0X211bHRpbWFpbC5ydW5fYXNfcG9zdF9yZWNlaXZlX2hvb2soZW52aXJvbm1lbnQsIG1haWxlcikKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsIGIvY29udHJpYi9ob29rcy9wb3N0LXJlY2VpdmUtZW1haWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODc0N2I4NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3MvcG9zdC1yZWNlaXZlLWVtYWlsCkBAIC0wLDAgKzEsNzU5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEFuZHkgUGFya2lucworIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIG1haWwgb3V0IGNvbW1pdCB1cGRhdGUgaW5mb3JtYXRpb24uCisjCisjIE5PVEU6IFRoaXMgc2NyaXB0IGlzIG5vIGxvbmdlciB1bmRlciBhY3RpdmUgZGV2ZWxvcG1lbnQuICBUaGVyZQorIyBpcyBhbm90aGVyIHNjcmlwdCwgZ2l0LW11bHRpbWFpbCwgd2hpY2ggaXMgbW9yZSBjYXBhYmxlIGFuZAorIyBjb25maWd1cmFibGUgYW5kIGlzIGxhcmdlbHkgYmFja3dhcmRzLWNvbXBhdGlibGUgd2l0aCB0aGlzIHNjcmlwdDsKKyMgcGxlYXNlIHNlZSAiY29udHJpYi9ob29rcy9tdWx0aW1haWwvIi4gIEZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvCisjIG1pZ3JhdGUgZnJvbSBwb3N0LXJlY2VpdmUtZW1haWwgdG8gZ2l0LW11bHRpbWFpbCwgcGxlYXNlIHNlZQorIyAiUkVBRE1FLm1pZ3JhdGUtZnJvbS1wb3N0LXJlY2VpdmUtZW1haWwiIGluIHRoYXQgZGlyZWN0b3J5LgorIworIyBUaGlzIGhvb2sgc2VuZHMgZW1haWxzIGxpc3RpbmcgbmV3IHJldmlzaW9ucyB0byB0aGUgcmVwb3NpdG9yeQorIyBpbnRyb2R1Y2VkIGJ5IHRoZSBjaGFuZ2UgYmVpbmcgcmVwb3J0ZWQuICBUaGUgcnVsZSBpcyB0aGF0IChmb3IKKyMgYnJhbmNoIHVwZGF0ZXMpIGVhY2ggY29tbWl0IHdpbGwgYXBwZWFyIG9uIG9uZSBlbWFpbCBhbmQgb25lIGVtYWlsCisjIG9ubHkuCisjCisjIFRoaXMgaG9vayBpcyBzdG9yZWQgaW4gdGhlIGNvbnRyaWIvaG9va3MgZGlyZWN0b3J5LiAgWW91ciBkaXN0cmlidXRpb24KKyMgd2lsbCBoYXZlIHB1dCB0aGlzIHNvbWV3aGVyZSBzdGFuZGFyZC4gIFlvdSBzaG91bGQgbWFrZSB0aGlzIHNjcmlwdAorIyBleGVjdXRhYmxlIHRoZW4gbGluayB0byBpdCBpbiB0aGUgcmVwb3NpdG9yeSB5b3Ugd291bGQgbGlrZSB0byB1c2UgaXQgaW4uCisjIEZvciBleGFtcGxlLCBvbiBkZWJpYW4gdGhlIGhvb2sgaXMgc3RvcmVkIGluCisjIC91c3Ivc2hhcmUvZ2l0LWNvcmUvY29udHJpYi9ob29rcy9wb3N0LXJlY2VpdmUtZW1haWw6CisjCisjICBjZCAvcGF0aC90by95b3VyL3JlcG9zaXRvcnkuZ2l0CisjICBsbiAtc2YgL3Vzci9zaGFyZS9naXQtY29yZS9jb250cmliL2hvb2tzL3Bvc3QtcmVjZWl2ZS1lbWFpbCBob29rcy9wb3N0LXJlY2VpdmUKKyMKKyMgVGhpcyBob29rIHNjcmlwdCBhc3N1bWVzIGl0IGlzIGVuYWJsZWQgb24gdGhlIGNlbnRyYWwgcmVwb3NpdG9yeSBvZiBhCisjIHByb2plY3QsIHdpdGggYWxsIHVzZXJzIHB1c2hpbmcgb25seSB0byBpdCBhbmQgbm90IGJldHdlZW4gZWFjaCBvdGhlci4gIEl0CisjIHdpbGwgc3RpbGwgd29yayBpZiB5b3UgZG9uJ3Qgb3BlcmF0ZSBpbiB0aGF0IHN0eWxlLCBidXQgaXQgd291bGQgYmVjb21lCisjIHBvc3NpYmxlIGZvciB0aGUgZW1haWwgdG8gYmUgZnJvbSBzb21lb25lIG90aGVyIHRoYW4gdGhlIHBlcnNvbiBkb2luZyB0aGUKKyMgcHVzaC4KKyMKKyMgVG8gaGVscCB3aXRoIGRlYnVnZ2luZyBhbmQgdXNlIG9uIHByZS12MS41LjEgZ2l0IHNlcnZlcnMsIHRoaXMgc2NyaXB0IHdpbGwKKyMgYWxzbyBvYmV5IHRoZSBpbnRlcmZhY2Ugb2YgaG9va3MvdXBkYXRlLCB0YWtpbmcgaXRzIGFyZ3VtZW50cyBvbiB0aGUKKyMgY29tbWFuZCBsaW5lLiAgVW5mb3J0dW5hdGVseSwgaG9va3MvdXBkYXRlIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIHJlZi4KKyMgVG8gYXZvaWQgZmlyaW5nIG9uZSBlbWFpbCBwZXIgcmVmLCB0aGlzIHNjcmlwdCBqdXN0IHByaW50cyBpdHMgb3V0cHV0IHRvCisjIHRoZSBzY3JlZW4gd2hlbiB1c2VkIGluIHRoaXMgbW9kZS4gIFRoZSBvdXRwdXQgY2FuIHRoZW4gYmUgcmVkaXJlY3RlZCBpZgorIyB3YW50ZWQuCisjCisjIENvbmZpZworIyAtLS0tLS0KKyMgaG9va3MubWFpbGluZ2xpc3QKKyMgICBUaGlzIGlzIHRoZSBsaXN0IHRoYXQgYWxsIHB1c2hlcyB3aWxsIGdvIHRvOyBsZWF2ZSBpdCBibGFuayB0byBub3Qgc2VuZAorIyAgIGVtYWlscyBmb3IgZXZlcnkgcmVmIHVwZGF0ZS4KKyMgaG9va3MuYW5ub3VuY2VsaXN0CisjICAgVGhpcyBpcyB0aGUgbGlzdCB0aGF0IGFsbCBwdXNoZXMgb2YgYW5ub3RhdGVkIHRhZ3Mgd2lsbCBnbyB0by4gIExlYXZlIGl0CisjICAgYmxhbmsgdG8gZGVmYXVsdCB0byB0aGUgbWFpbGluZ2xpc3QgZmllbGQuICBUaGUgYW5ub3VuY2UgZW1haWxzIGxpc3RzCisjICAgdGhlIHNob3J0IGxvZyBzdW1tYXJ5IG9mIHRoZSBjaGFuZ2VzIHNpbmNlIHRoZSBsYXN0IGFubm90YXRlZCB0YWcuCisjIGhvb2tzLmVudmVsb3Blc2VuZGVyCisjICAgSWYgc2V0IHRoZW4gdGhlIC1mIG9wdGlvbiBpcyBwYXNzZWQgdG8gc2VuZG1haWwgdG8gYWxsb3cgdGhlIGVudmVsb3BlCisjICAgc2VuZGVyIGFkZHJlc3MgdG8gYmUgc2V0CisjIGhvb2tzLmVtYWlscHJlZml4CisjICAgQWxsIGVtYWlscyBoYXZlIHRoZWlyIHN1YmplY3RzIHByZWZpeGVkIHdpdGggdGhpcyBwcmVmaXgsIG9yICJbU0NNXSIKKyMgICBpZiBlbWFpbHByZWZpeCBpcyB1bnNldCwgdG8gYWlkIGZpbHRlcmluZworIyBob29rcy5zaG93cmV2CisjICAgVGhlIHNoZWxsIGNvbW1hbmQgdXNlZCB0byBmb3JtYXQgZWFjaCByZXZpc2lvbiBpbiB0aGUgZW1haWwsIHdpdGgKKyMgICAiJXMiIHJlcGxhY2VkIHdpdGggdGhlIGNvbW1pdCBpZC4gIERlZmF1bHRzIHRvICJnaXQgcmV2LWxpc3QgLTEKKyMgICAtLXByZXR0eSAlcyIsIGRpc3BsYXlpbmcgdGhlIGNvbW1pdCBpZCwgYXV0aG9yLCBkYXRlIGFuZCBsb2cKKyMgICBtZXNzYWdlLiAgVG8gbGlzdCBmdWxsIHBhdGNoZXMgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgbGluZSwgeW91CisjICAgY291bGQgc2V0IHRoaXMgdG8gImdpdCBzaG93IC1DICVzOyBlY2hvIi4KKyMgICBUbyBsaXN0IGEgZ2l0d2ViL2NnaXQgVVJMICphbmQqIGEgZnVsbCBwYXRjaCBmb3IgZWFjaCBjaGFuZ2Ugc2V0LCB1c2UgdGhpczoKKyMgICAgICJ0PSVzOyBwcmludGYgJ2h0dHA6Ly8uLi4vP2lkPSUlcycgXCR0OyBlY2hvO2VjaG87IGdpdCBzaG93IC1DIFwkdDsgZWNobyIKKyMgICBCZSBjYXJlZnVsIGlmICIuLi4iIGNvbnRhaW5zIHRoaW5ncyB0aGF0IHdpbGwgYmUgZXhwYW5kZWQgYnkgc2hlbGwgImV2YWwiCisjICAgb3IgcHJpbnRmLgorIyBob29rcy5lbWFpbG1heGxpbmVzCisjICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQKKyMgICBlbWFpbCBib2R5LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGVyZSBpcyBubyBsaW1pdC4KKyMgICBMaW5lcyBiZXlvbmQgdGhlIGxpbWl0IGFyZSBzdXBwcmVzc2VkIGFuZCBjb3VudGVkLCBhbmQgYSBmaW5hbAorIyAgIGxpbmUgaXMgYWRkZWQgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIHN1cHByZXNzZWQgbGluZXMuCisjIGhvb2tzLmRpZmZvcHRzCisjICAgQWx0ZXJuYXRlIG9wdGlvbnMgZm9yIHRoZSBnaXQgZGlmZi10cmVlIGludm9jYXRpb24gdGhhdCBzaG93cyBjaGFuZ2VzLgorIyAgIERlZmF1bHQgaXMgIi0tc3RhdCAtLXN1bW1hcnkgLS1maW5kLWNvcGllcy1oYXJkZXIiLiBBZGQgLXAgdG8gdGhvc2UKKyMgICBvcHRpb25zIHRvIGluY2x1ZGUgYSB1bmlmaWVkIGRpZmYgb2YgY2hhbmdlcyBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwKKyMgICBzdW1tYXJ5IG91dHB1dC4KKyMKKyMgTm90ZXMKKyMgLS0tLS0KKyMgQWxsIGVtYWlscyBpbmNsdWRlIHRoZSBoZWFkZXJzICJYLUdpdC1SZWZuYW1lIiwgIlgtR2l0LU9sZHJldiIsCisjICJYLUdpdC1OZXdyZXYiLCBhbmQgIlgtR2l0LVJlZnR5cGUiIHRvIGVuYWJsZSBmaW5lIHR1bmVkIGZpbHRlcmluZyBhbmQKKyMgZ2l2ZSBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLgorIworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zCisKKyMKKyMgRnVuY3Rpb24gdG8gcHJlcGFyZSBmb3IgZW1haWwgZ2VuZXJhdGlvbi4gVGhpcyBkZWNpZGVzIHdoYXQgdHlwZQorIyBvZiB1cGRhdGUgdGhpcyBpcyBhbmQgd2hldGhlciBhbiBlbWFpbCBzaG91bGQgZXZlbiBiZSBnZW5lcmF0ZWQuCisjCitwcmVwX2Zvcl9lbWFpbCgpCit7CisJIyAtLS0gQXJndW1lbnRzCisJb2xkcmV2PSQoZ2l0IHJldi1wYXJzZSAkMSkKKwluZXdyZXY9JChnaXQgcmV2LXBhcnNlICQyKQorCXJlZm5hbWU9IiQzIgorCisJIyAtLS0gSW50ZXJwcmV0CisJIyAwMDAwLT4xMjM0IChjcmVhdGUpCisJIyAxMjM0LT4yMzQ1ICh1cGRhdGUpCisJIyAyMzQ1LT4wMDAwIChkZWxldGUpCisJaWYgZXhwciAiJG9sZHJldiIgOiAnMCokJyA+L2Rldi9udWxsCisJdGhlbgorCQljaGFuZ2VfdHlwZT0iY3JlYXRlIgorCWVsc2UKKwkJaWYgZXhwciAiJG5ld3JldiIgOiAnMCokJyA+L2Rldi9udWxsCisJCXRoZW4KKwkJCWNoYW5nZV90eXBlPSJkZWxldGUiCisJCWVsc2UKKwkJCWNoYW5nZV90eXBlPSJ1cGRhdGUiCisJCWZpCisJZmkKKworCSMgLS0tIEdldCB0aGUgcmV2aXNpb24gdHlwZXMKKwluZXdyZXZfdHlwZT0kKGdpdCBjYXQtZmlsZSAtdCAkbmV3cmV2IDI+IC9kZXYvbnVsbCkKKwlvbGRyZXZfdHlwZT0kKGdpdCBjYXQtZmlsZSAtdCAiJG9sZHJldiIgMj4gL2Rldi9udWxsKQorCWNhc2UgIiRjaGFuZ2VfdHlwZSIgaW4KKwljcmVhdGV8dXBkYXRlKQorCQlyZXY9IiRuZXdyZXYiCisJCXJldl90eXBlPSIkbmV3cmV2X3R5cGUiCisJCTs7CisJZGVsZXRlKQorCQlyZXY9IiRvbGRyZXYiCisJCXJldl90eXBlPSIkb2xkcmV2X3R5cGUiCisJCTs7CisJZXNhYworCisJIyBUaGUgcmV2aXNpb24gdHlwZSB0ZWxscyB1cyB3aGF0IHR5cGUgdGhlIGNvbW1pdCBpcywgY29tYmluZWQgd2l0aAorCSMgdGhlIGxvY2F0aW9uIG9mIHRoZSByZWYgd2UgY2FuIGRlY2lkZSBiZXR3ZWVuCisJIyAgLSB3b3JraW5nIGJyYW5jaAorCSMgIC0gdHJhY2tpbmcgYnJhbmNoCisJIyAgLSB1bmFubm90ZWQgdGFnCisJIyAgLSBhbm5vdGF0ZWQgdGFnCisJY2FzZSAiJHJlZm5hbWUiLCIkcmV2X3R5cGUiIGluCisJCXJlZnMvdGFncy8qLGNvbW1pdCkKKwkJCSMgdW4tYW5ub3RhdGVkIHRhZworCQkJcmVmbmFtZV90eXBlPSJ0YWciCisJCQlzaG9ydF9yZWZuYW1lPSR7cmVmbmFtZSMjcmVmcy90YWdzL30KKwkJCTs7CisJCXJlZnMvdGFncy8qLHRhZykKKwkJCSMgYW5ub3RhdGVkIHRhZworCQkJcmVmbmFtZV90eXBlPSJhbm5vdGF0ZWQgdGFnIgorCQkJc2hvcnRfcmVmbmFtZT0ke3JlZm5hbWUjI3JlZnMvdGFncy99CisJCQkjIGNoYW5nZSByZWNpcGllbnRzCisJCQlpZiBbIC1uICIkYW5ub3VuY2VyZWNpcGllbnRzIiBdOyB0aGVuCisJCQkJcmVjaXBpZW50cz0iJGFubm91bmNlcmVjaXBpZW50cyIKKwkJCWZpCisJCQk7OworCQlyZWZzL2hlYWRzLyosY29tbWl0KQorCQkJIyBicmFuY2gKKwkJCXJlZm5hbWVfdHlwZT0iYnJhbmNoIgorCQkJc2hvcnRfcmVmbmFtZT0ke3JlZm5hbWUjI3JlZnMvaGVhZHMvfQorCQkJOzsKKwkJcmVmcy9yZW1vdGVzLyosY29tbWl0KQorCQkJIyB0cmFja2luZyBicmFuY2gKKwkJCXJlZm5hbWVfdHlwZT0idHJhY2tpbmcgYnJhbmNoIgorCQkJc2hvcnRfcmVmbmFtZT0ke3JlZm5hbWUjI3JlZnMvcmVtb3Rlcy99CisJCQllY2hvID4mMiAiKioqIFB1c2gtdXBkYXRlIG9mIHRyYWNraW5nIGJyYW5jaCwgJHJlZm5hbWUiCisJCQllY2hvID4mMiAiKioqICAtIG5vIGVtYWlsIGdlbmVyYXRlZC4iCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJKikKKwkJCSMgQW55dGhpbmcgZWxzZSAoaXMgdGhlcmUgYW55dGhpbmcgZWxzZT8pCisJCQllY2hvID4mMiAiKioqIFVua25vd24gdHlwZSBvZiB1cGRhdGUgdG8gJHJlZm5hbWUgKCRyZXZfdHlwZSkiCisJCQllY2hvID4mMiAiKioqICAtIG5vIGVtYWlsIGdlbmVyYXRlZCIKKwkJCXJldHVybiAxCisJCQk7OworCWVzYWMKKworCSMgQ2hlY2sgaWYgd2UndmUgZ290IGFueW9uZSB0byBzZW5kIHRvCisJaWYgWyAteiAiJHJlY2lwaWVudHMiIF07IHRoZW4KKwkJY2FzZSAiJHJlZm5hbWVfdHlwZSIgaW4KKwkJCSJhbm5vdGF0ZWQgdGFnIikKKwkJCQljb25maWdfbmFtZT0iaG9va3MuYW5ub3VuY2VsaXN0IgorCQkJCTs7CisJCQkqKQorCQkJCWNvbmZpZ19uYW1lPSJob29rcy5tYWlsaW5nbGlzdCIKKwkJCQk7OworCQllc2FjCisJCWVjaG8gPiYyICIqKiogJGNvbmZpZ19uYW1lIGlzIG5vdCBzZXQgc28gbm8gZW1haWwgd2lsbCBiZSBzZW50IgorCQllY2hvID4mMiAiKioqIGZvciAkcmVmbmFtZSB1cGRhdGUgJG9sZHJldi0+JG5ld3JldiIKKwkJcmV0dXJuIDEKKwlmaQorCisJcmV0dXJuIDAKK30KKworIworIyBUb3AgbGV2ZWwgZW1haWwgZ2VuZXJhdGlvbiBmdW5jdGlvbi4gIFRoaXMgY2FsbHMgdGhlIGFwcHJvcHJpYXRlCisjIGJvZHktZ2VuZXJhdGlvbiByb3V0aW5lIGFmdGVyIG91dHB1dHRpbmcgdGhlIGNvbW1vbiBoZWFkZXIuCisjCisjIE5vdGUgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGFjdHVhbGx5IGdlbmVyYXRlIGFueSBlbWFpbCBvdXRwdXQsIHRoYXQgaXMKKyMgdGFrZW4gY2FyZSBvZiBieSB0aGUgZnVuY3Rpb25zIGl0IGNhbGxzOgorIyAgLSBnZW5lcmF0ZV9lbWFpbF9oZWFkZXIKKyMgIC0gZ2VuZXJhdGVfY3JlYXRlX1hYWFhfZW1haWwKKyMgIC0gZ2VuZXJhdGVfdXBkYXRlX1hYWFhfZW1haWwKKyMgIC0gZ2VuZXJhdGVfZGVsZXRlX1hYWFhfZW1haWwKKyMgIC0gZ2VuZXJhdGVfZW1haWxfZm9vdGVyCisjCisjIE5vdGUgYWxzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2Fubm90ICdleGl0JyBmcm9tIHRoZSBzY3JpcHQ7IHdoZW4gdGhpcworIyBmdW5jdGlvbiBpcyBydW5uaW5nIChpbiBob29rIHNjcmlwdCBtb2RlKSwgdGhlIHNlbmRfbWFpbCgpIGZ1bmN0aW9uCisjIGlzIGFscmVhZHkgZXhlY3V0aW5nIGluIGFub3RoZXIgcHJvY2VzcywgY29ubmVjdGVkIHZpYSBhIHBpcGUsIGFuZAorIyBpZiB0aGlzIGZ1bmN0aW9uIGV4aXRzIHdpdGhvdXQsIHdoYXRldmVyIGhhcyBiZWVuIGdlbmVyYXRlZCB0byB0aGF0CisjIHBvaW50IHdpbGwgYmUgc2VudCBhcyBhbiBlbWFpbC4uLiBldmVuIGlmIG5vdGhpbmcgaGFzIGJlZW4gZ2VuZXJhdGVkLgorIworZ2VuZXJhdGVfZW1haWwoKQoreworCSMgRW1haWwgcGFyYW1ldGVycworCSMgVGhlIGVtYWlsIHN1YmplY3Qgd2lsbCBjb250YWluIHRoZSBiZXN0IGRlc2NyaXB0aW9uIG9mIHRoZSByZWYKKwkjIHRoYXQgd2UgY2FuIGJ1aWxkIGZyb20gdGhlIHBhcmFtZXRlcnMKKwlkZXNjcmliZT0kKGdpdCBkZXNjcmliZSAkcmV2IDI+L2Rldi9udWxsKQorCWlmIFsgLXogIiRkZXNjcmliZSIgXTsgdGhlbgorCQlkZXNjcmliZT0kcmV2CisJZmkKKworCWdlbmVyYXRlX2VtYWlsX2hlYWRlcgorCisJIyBDYWxsIHRoZSBjb3JyZWN0IGJvZHkgZ2VuZXJhdGlvbiBmdW5jdGlvbgorCWZuX25hbWU9Z2VuZXJhbAorCWNhc2UgIiRyZWZuYW1lX3R5cGUiIGluCisJInRyYWNraW5nIGJyYW5jaCJ8YnJhbmNoKQorCQlmbl9uYW1lPWJyYW5jaAorCQk7OworCSJhbm5vdGF0ZWQgdGFnIikKKwkJZm5fbmFtZT1hdGFnCisJCTs7CisJZXNhYworCisJaWYgWyAteiAiJG1heGxpbmVzIiBdOyB0aGVuCisJCWdlbmVyYXRlXyR7Y2hhbmdlX3R5cGV9XyR7Zm5fbmFtZX1fZW1haWwKKwllbHNlCisJCWdlbmVyYXRlXyR7Y2hhbmdlX3R5cGV9XyR7Zm5fbmFtZX1fZW1haWwgfCBsaW1pdF9saW5lcyAkbWF4bGluZXMKKwlmaQorCisJZ2VuZXJhdGVfZW1haWxfZm9vdGVyCit9CisKK2dlbmVyYXRlX2VtYWlsX2hlYWRlcigpCit7CisJIyAtLS0gRW1haWwgKGFsbCBzdGRvdXQgd2lsbCBiZSB0aGUgZW1haWwpCisJIyBHZW5lcmF0ZSBoZWFkZXIKKwljYXQgPDwtRU9GCisJVG86ICRyZWNpcGllbnRzCisJU3ViamVjdDogJHtlbWFpbHByZWZpeH0kcHJvamVjdGRlc2MgJHJlZm5hbWVfdHlwZSAkc2hvcnRfcmVmbmFtZSAke2NoYW5nZV90eXBlfWQuICRkZXNjcmliZQorCU1JTUUtVmVyc2lvbjogMS4wCisJQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04CisJQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCVgtR2l0LVJlZm5hbWU6ICRyZWZuYW1lCisJWC1HaXQtUmVmdHlwZTogJHJlZm5hbWVfdHlwZQorCVgtR2l0LU9sZHJldjogJG9sZHJldgorCVgtR2l0LU5ld3JldjogJG5ld3JldgorCUF1dG8tU3VibWl0dGVkOiBhdXRvLWdlbmVyYXRlZAorCisJVGhpcyBpcyBhbiBhdXRvbWF0ZWQgZW1haWwgZnJvbSB0aGUgZ2l0IGhvb2tzL3Bvc3QtcmVjZWl2ZSBzY3JpcHQuIEl0IHdhcworCWdlbmVyYXRlZCBiZWNhdXNlIGEgcmVmIGNoYW5nZSB3YXMgcHVzaGVkIHRvIHRoZSByZXBvc2l0b3J5IGNvbnRhaW5pbmcKKwl0aGUgcHJvamVjdCAiJHByb2plY3RkZXNjIi4KKworCVRoZSAkcmVmbmFtZV90eXBlLCAkc2hvcnRfcmVmbmFtZSBoYXMgYmVlbiAke2NoYW5nZV90eXBlfWQKKwlFT0YKK30KKworZ2VuZXJhdGVfZW1haWxfZm9vdGVyKCkKK3sKKwlTUEFDRT0iICIKKwljYXQgPDwtRU9GCisKKworCWhvb2tzL3Bvc3QtcmVjZWl2ZQorCS0tJHtTUEFDRX0KKwkkcHJvamVjdGRlc2MKKwlFT0YKK30KKworIyAtLS0tLS0tLS0tLS0tLS0gQnJhbmNoZXMKKworIworIyBDYWxsZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIGJyYW5jaAorIworZ2VuZXJhdGVfY3JlYXRlX2JyYW5jaF9lbWFpbCgpCit7CisJIyBUaGlzIGlzIGEgbmV3IGJyYW5jaCBhbmQgc28gb2xkcmV2IGlzIG5vdCB2YWxpZAorCWVjaG8gIiAgICAgICAgYXQgICRuZXdyZXYgKCRuZXdyZXZfdHlwZSkiCisJZWNobyAiIgorCisJZWNobyAkTE9HQkVHSU4KKwlzaG93X25ld19yZXZpc2lvbnMKKwllY2hvICRMT0dFTkQKK30KKworIworIyBDYWxsZWQgZm9yIHRoZSBjaGFuZ2Ugb2YgYSBwcmUtZXhpc3RpbmcgYnJhbmNoCisjCitnZW5lcmF0ZV91cGRhdGVfYnJhbmNoX2VtYWlsKCkKK3sKKwkjIENvbnNpZGVyIHRoaXM6CisJIyAgIDEgLS0tIDIgLS0tIE8gLS0tIFggLS0tIDMgLS0tIDQgLS0tIE4KKwkjCisJIyBPIGlzICRvbGRyZXYgZm9yICRyZWZuYW1lCisJIyBOIGlzICRuZXdyZXYgZm9yICRyZWZuYW1lCisJIyBYIGlzIGEgcmV2aXNpb24gcG9pbnRlZCB0byBieSBzb21lIG90aGVyIHJlZiwgZm9yIHdoaWNoIHdlIG1heQorCSMgICBhc3N1bWUgdGhhdCBhbiBlbWFpbCBoYXMgYWxyZWFkeSBiZWVuIGdlbmVyYXRlZC4KKwkjIEluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIGlzc3VlIGFuIGVtYWlsIGNvbnRhaW5pbmcgb25seSByZXZpc2lvbnMKKwkjIDMsIDQsIGFuZCBOLiAgR2l2ZW4gKGFsbW9zdCkgYnkKKwkjCisJIyAgZ2l0IHJldi1saXN0IE4gXk8gLS1ub3QgLS1hbGwKKwkjCisJIyBUaGUgcmVhc29uIGZvciB0aGUgImFsbW9zdCIsIGlzIHRoYXQgdGhlICItLW5vdCAtLWFsbCIgd2lsbCB0YWtlCisJIyBwcmVjZWRlbmNlIG92ZXIgdGhlICJOIiwgYW5kIGVmZmVjdGl2ZWx5IHdpbGwgdHJhbnNsYXRlIHRvCisJIworCSMgIGdpdCByZXYtbGlzdCBOIF5PIF5YIF5OCisJIworCSMgU28sIHdlIG5lZWQgdG8gYnVpbGQgdXAgdGhlIGxpc3QgbW9yZSBjYXJlZnVsbHkuICBnaXQgcmV2LXBhcnNlCisJIyB3aWxsIGdlbmVyYXRlIGEgbGlzdCBvZiByZXZzIHRoYXQgbWF5IGJlIGZlZCBpbnRvIGdpdCByZXYtbGlzdC4KKwkjIFdlIGNhbiBnZXQgaXQgdG8gbWFrZSB0aGUgIi0tbm90IC0tYWxsIiBwYXJ0IGFuZCB0aGVuIGZpbHRlciBvdXQKKwkjIHRoZSAiXk4iIHdpdGg6CisJIworCSMgIGdpdCByZXYtcGFyc2UgLS1ub3QgLS1hbGwgfCBncmVwIC12IE4KKwkjCisJIyBUaGVuLCB1c2luZyB0aGUgLS1zdGRpbiBzd2l0Y2ggdG8gZ2l0IHJldi1saXN0IHdlIGhhdmUgZWZmZWN0aXZlbHkKKwkjIG1hbnVmYWN0dXJlZAorCSMKKwkjICBnaXQgcmV2LWxpc3QgTiBeTyBeWAorCSMKKwkjIFRoaXMgbGVhdmVzIGEgcHJvYmxlbSB3aGVuIHNvbWVvbmUgZWxzZSB1cGRhdGVzIHRoZSByZXBvc2l0b3J5CisJIyB3aGlsZSB0aGlzIHNjcmlwdCBpcyBydW5uaW5nLiAgVGhlaXIgbmV3IHZhbHVlIG9mIHRoZSByZWYgd2UncmUKKwkjIHdvcmtpbmcgb24gd291bGQgYmUgaW5jbHVkZWQgaW4gdGhlICItLW5vdCAtLWFsbCIgb3V0cHV0OyBhbmQgYXMKKwkjIG91ciAkbmV3cmV2IHdvdWxkIGJlIGFuIGFuY2VzdG9yIG9mIHRoYXQgY29tbWl0LCBpdCB3b3VsZCBleGNsdWRlCisJIyBhbGwgb2Ygb3VyIGNvbW1pdHMuICBXaGF0IHdlIHJlYWxseSB3YW50IGlzIHRvIGV4Y2x1ZGUgdGhlIGN1cnJlbnQKKwkjIHZhbHVlIG9mICRyZWZuYW1lIGZyb20gdGhlIC0tbm90IGxpc3QsIHJhdGhlciB0aGFuIE4gaXRzZWxmLiAgU286CisJIworCSMgIGdpdCByZXYtcGFyc2UgLS1ub3QgLS1hbGwgfCBncmVwIC12ICQoZ2l0IHJldi1wYXJzZSAkcmVmbmFtZSkKKwkjCisJIyBHZXQncyB1cyB0byBzb21ldGhpbmcgcHJldHR5IHNhZmUgKGFwYXJ0IGZyb20gdGhlIHNtYWxsIHRpbWUKKwkjIGJldHdlZW4gcmVmbmFtZSBiZWluZyByZWFkLCBhbmQgZ2l0IHJldi1wYXJzZSBydW5uaW5nIC0gZm9yIHRoYXQsCisJIyBJIGdpdmUgdXApCisJIworCSMKKwkjIE5leHQgcHJvYmxlbSwgY29uc2lkZXIgdGhpczoKKwkjICAgKiAtLS0gQiAtLS0gKiAtLS0gTyAoJG9sZHJldikKKwkjICAgICAgICAgIFwKKwkjICAgICAgICAgICAqIC0tLSBYIC0tLSAqIC0tLSBOICgkbmV3cmV2KQorCSMKKwkjIFRoYXQgaXMgdG8gc2F5LCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBvbGRyZXYgaXMgYSBzdHJpY3QKKwkjIHN1YnNldCBvZiBuZXdyZXYgKGl0IHdvdWxkIGhhdmUgcmVxdWlyZWQgYSAtLWZvcmNlLCBidXQgdGhhdCdzCisJIyBhbGxvd2VkKS4gIFNvLCB3ZSBjYW4ndCBzaW1wbHkgc2F5IHJldi1saXN0ICRvbGRyZXYuLiRuZXdyZXYuCisJIyBJbnN0ZWFkIHdlIGZpbmQgdGhlIGNvbW1vbiBiYXNlIG9mIHRoZSB0d28gcmV2cyBhbmQgbGlzdCBmcm9tCisJIyB0aGVyZS4KKwkjCisJIyBBcyBhYm92ZSwgd2UgbmVlZCB0byB0YWtlIGludG8gYWNjb3VudCB0aGUgcHJlc2VuY2Ugb2YgWDsgaWYKKwkjIGFub3RoZXIgYnJhbmNoIGlzIGFscmVhZHkgaW4gdGhlIHJlcG9zaXRvcnkgYW5kIHBvaW50cyBhdCBzb21lIG9mCisJIyB0aGUgcmV2aXNpb25zIHRoYXQgd2UgYXJlIGFib3V0IHRvIG91dHB1dCAtIHdlIGRvbid0IHdhbnQgdGhlbS4KKwkjIFRoZSBzb2x1dGlvbiBpcyBhcyBiZWZvcmU6IGdpdCByZXYtcGFyc2Ugb3V0cHV0IGZpbHRlcmVkLgorCSMKKwkjIEZpbmFsbHksIHRhZ3M6IDEgLS0tIDIgLS0tIE8gLS0tIFQgLS0tIDMgLS0tIDQgLS0tIE4KKwkjCisJIyBUYWdzIHB1c2hlZCBpbnRvIHRoZSByZXBvc2l0b3J5IGdlbmVyYXRlIG5pY2Ugc2hvcnRsb2cgZW1haWxzIHRoYXQKKwkjIHN1bW1hcmlzZSB0aGUgY29tbWl0cyBiZXR3ZWVuIHRoZW0gYW5kIHRoZSBwcmV2aW91cyB0YWcuICBIb3dldmVyLAorCSMgdGhvc2UgZW1haWxzIGRvbid0IGluY2x1ZGUgdGhlIGZ1bGwgY29tbWl0IG1lc3NhZ2VzIHRoYXQgd2Ugb3V0cHV0CisJIyBmb3IgYSBicmFuY2ggdXBkYXRlLiAgVGhlcmVmb3JlIHdlIHN0aWxsIHdhbnQgdG8gb3V0cHV0IHJldmlzaW9ucworCSMgdGhhdCBoYXZlIGJlZW4gb3V0cHV0IG9uIGEgdGFnIGVtYWlsLgorCSMKKwkjIEx1Y2tpbHksIGdpdCByZXYtcGFyc2UgaW5jbHVkZXMganVzdCB0aGUgdG9vbC4gIEluc3RlYWQgb2YgdXNpbmcKKwkjICItLWFsbCIgd2UgdXNlICItLWJyYW5jaGVzIjsgdGhpcyBoYXMgdGhlIGFkZGVkIGJlbmVmaXQgdGhhdAorCSMgInJlbW90ZXMvIiB3aWxsIGJlIGlnbm9yZWQgYXMgd2VsbC4KKworCSMgTGlzdCBhbGwgb2YgdGhlIHJldmlzaW9ucyB0aGF0IHdlcmUgcmVtb3ZlZCBieSB0aGlzIHVwZGF0ZSwgaW4gYQorCSMgZmFzdC1mb3J3YXJkIHVwZGF0ZSwgdGhpcyBsaXN0IHdpbGwgYmUgZW1wdHksIGJlY2F1c2UgcmV2LWxpc3QgTworCSMgXk4gaXMgZW1wdHkuICBGb3IgYSBub24tZmFzdC1mb3J3YXJkLCBPIF5OIGlzIHRoZSBsaXN0IG9mIHJlbW92ZWQKKwkjIHJldmlzaW9ucworCWZhc3RfZm9yd2FyZD0iIgorCXJldj0iIgorCWZvciByZXYgaW4gJChnaXQgcmV2LWxpc3QgJG5ld3Jldi4uJG9sZHJldikKKwlkbworCQlyZXZ0eXBlPSQoZ2l0IGNhdC1maWxlIC10ICIkcmV2IikKKwkJZWNobyAiICBkaXNjYXJkcyAgJHJldiAoJHJldnR5cGUpIgorCWRvbmUKKwlpZiBbIC16ICIkcmV2IiBdOyB0aGVuCisJCWZhc3RfZm9yd2FyZD0xCisJZmkKKworCSMgTGlzdCBhbGwgdGhlIHJldmlzaW9ucyBmcm9tIGJhc2VyZXYgdG8gbmV3cmV2IGluIGEga2luZCBvZgorCSMgInRhYmxlLW9mLWNvbnRlbnRzIjsgbm90ZSB0aGlzIGxpc3QgY2FuIGluY2x1ZGUgcmV2aXNpb25zIHRoYXQKKwkjIGhhdmUgYWxyZWFkeSBoYWQgbm90aWZpY2F0aW9uIGVtYWlscyBhbmQgaXMgcHJlc2VudCB0byBzaG93IHRoZQorCSMgZnVsbCBkZXRhaWwgb2YgdGhlIGNoYW5nZSBmcm9tIHJvbGxpbmcgYmFjayB0aGUgb2xkIHJldmlzaW9uIHRvCisJIyB0aGUgYmFzZSByZXZpc2lvbiBhbmQgdGhlbiBmb3J3YXJkIHRvIHRoZSBuZXcgcmV2aXNpb24KKwlmb3IgcmV2IGluICQoZ2l0IHJldi1saXN0ICRvbGRyZXYuLiRuZXdyZXYpCisJZG8KKwkJcmV2dHlwZT0kKGdpdCBjYXQtZmlsZSAtdCAiJHJldiIpCisJCWVjaG8gIiAgICAgICB2aWEgICRyZXYgKCRyZXZ0eXBlKSIKKwlkb25lCisKKwlpZiBbICIkZmFzdF9mb3J3YXJkIiBdOyB0aGVuCisJCWVjaG8gIiAgICAgIGZyb20gICRvbGRyZXYgKCRvbGRyZXZfdHlwZSkiCisJZWxzZQorCQkjICAxLiBFeGlzdGluZyByZXZpc2lvbnMgd2VyZSByZW1vdmVkLiAgSW4gdGhpcyBjYXNlIG5ld3JldgorCQkjICAgICBpcyBhIHN1YnNldCBvZiBvbGRyZXYgLSB0aGlzIGlzIHRoZSByZXZlcnNlIG9mIGEKKwkJIyAgICAgZmFzdC1mb3J3YXJkLCBhIHJld2luZAorCQkjICAyLiBOZXcgcmV2aXNpb25zIHdlcmUgYWRkZWQgb24gdG9wIG9mIGFuIG9sZCByZXZpc2lvbiwKKwkJIyAgICAgdGhpcyBpcyBhIHJld2luZCBhbmQgYWRkaXRpb24uCisKKwkJIyAoMSkgY2VydGFpbmx5IGhhcHBlbmVkLCAoMikgcG9zc2libHkuICBXaGVuICgyKSBoYXNuJ3QKKwkJIyBoYXBwZW5lZCwgd2Ugc2V0IGEgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IG5vIGxvZyBwcmludG91dAorCQkjIGlzIHJlcXVpcmVkLgorCisJCWVjaG8gIiIKKworCQkjIEZpbmQgdGhlIGNvbW1vbiBhbmNlc3RvciBvZiB0aGUgb2xkIGFuZCBuZXcgcmV2aXNpb25zIGFuZAorCQkjIGNvbXBhcmUgaXQgd2l0aCBuZXdyZXYKKwkJYmFzZXJldj0kKGdpdCBtZXJnZS1iYXNlICRvbGRyZXYgJG5ld3JldikKKwkJcmV3aW5kX29ubHk9IiIKKwkJaWYgWyAiJGJhc2VyZXYiID0gIiRuZXdyZXYiIF07IHRoZW4KKwkJCWVjaG8gIlRoaXMgdXBkYXRlIGRpc2NhcmRlZCBleGlzdGluZyByZXZpc2lvbnMgYW5kIGxlZnQgdGhlIGJyYW5jaCBwb2ludGluZyBhdCIKKwkJCWVjaG8gImEgcHJldmlvdXMgcG9pbnQgaW4gdGhlIHJlcG9zaXRvcnkgaGlzdG9yeS4iCisJCQllY2hvICIiCisJCQllY2hvICIgKiAtLSAqIC0tIE4gKCRuZXdyZXYpIgorCQkJZWNobyAiICAgICAgICAgICAgXFwiCisJCQllY2hvICIgICAgICAgICAgICAgTyAtLSBPIC0tIE8gKCRvbGRyZXYpIgorCQkJZWNobyAiIgorCQkJZWNobyAiVGhlIHJlbW92ZWQgcmV2aXNpb25zIGFyZSBub3QgbmVjZXNzYXJpbHkgZ29uZSAtIGlmIGFub3RoZXIgcmVmZXJlbmNlIgorCQkJZWNobyAic3RpbGwgcmVmZXJzIHRvIHRoZW0gdGhleSB3aWxsIHN0YXkgaW4gdGhlIHJlcG9zaXRvcnkuIgorCQkJcmV3aW5kX29ubHk9MQorCQllbHNlCisJCQllY2hvICJUaGlzIHVwZGF0ZSBhZGRlZCBuZXcgcmV2aXNpb25zIGFmdGVyIHVuZG9pbmcgZXhpc3RpbmcgcmV2aXNpb25zLiAgVGhhdCBpcyIKKwkJCWVjaG8gInRvIHNheSwgdGhlIG9sZCByZXZpc2lvbiBpcyBub3QgYSBzdHJpY3Qgc3Vic2V0IG9mIHRoZSBuZXcgcmV2aXNpb24uICBUaGlzIgorCQkJZWNobyAic2l0dWF0aW9uIG9jY3VycyB3aGVuIHlvdSAtLWZvcmNlIHB1c2ggYSBjaGFuZ2UgYW5kIGdlbmVyYXRlIGEgcmVwb3NpdG9yeSIKKwkJCWVjaG8gImNvbnRhaW5pbmcgc29tZXRoaW5nIGxpa2UgdGhpczoiCisJCQllY2hvICIiCisJCQllY2hvICIgKiAtLSAqIC0tIEIgLS0gTyAtLSBPIC0tIE8gKCRvbGRyZXYpIgorCQkJZWNobyAiICAgICAgICAgICAgXFwiCisJCQllY2hvICIgICAgICAgICAgICAgTiAtLSBOIC0tIE4gKCRuZXdyZXYpIgorCQkJZWNobyAiIgorCQkJZWNobyAiV2hlbiB0aGlzIGhhcHBlbnMgd2UgYXNzdW1lIHRoYXQgeW91J3ZlIGFscmVhZHkgaGFkIGFsZXJ0IGVtYWlscyBmb3IgYWxsIgorCQkJZWNobyAib2YgdGhlIE8gcmV2aXNpb25zLCBhbmQgc28gd2UgaGVyZSByZXBvcnQgb25seSB0aGUgcmV2aXNpb25zIGluIHRoZSBOIgorCQkJZWNobyAiYnJhbmNoIGZyb20gdGhlIGNvbW1vbiBiYXNlLCBCLiIKKwkJZmkKKwlmaQorCisJZWNobyAiIgorCWlmIFsgLXogIiRyZXdpbmRfb25seSIgXTsgdGhlbgorCQllY2hvICJUaG9zZSByZXZpc2lvbnMgbGlzdGVkIGFib3ZlIHRoYXQgYXJlIG5ldyB0byB0aGlzIHJlcG9zaXRvcnkgaGF2ZSIKKwkJZWNobyAibm90IGFwcGVhcmVkIG9uIGFueSBvdGhlciBub3RpZmljYXRpb24gZW1haWw7IHNvIHdlIGxpc3QgdGhvc2UiCisJCWVjaG8gInJldmlzaW9ucyBpbiBmdWxsLCBiZWxvdy4iCisKKwkJZWNobyAiIgorCQllY2hvICRMT0dCRUdJTgorCQlzaG93X25ld19yZXZpc2lvbnMKKworCQkjIFhYWDogTmVlZCBhIHdheSBvZiBkZXRlY3Rpbmcgd2hldGhlciBnaXQgcmV2LWxpc3QgYWN0dWFsbHkKKwkJIyBvdXRwdXR0ZWQgYW55dGhpbmcsIHNvIHRoYXQgd2UgY2FuIGlzc3VlIGEgIm5vIG5ldworCQkjIHJldmlzaW9ucyBhZGRlZCBieSB0aGlzIHVwZGF0ZSIgbWVzc2FnZQorCisJCWVjaG8gJExPR0VORAorCWVsc2UKKwkJZWNobyAiTm8gbmV3IHJldmlzaW9ucyB3ZXJlIGFkZGVkIGJ5IHRoaXMgdXBkYXRlLiIKKwlmaQorCisJIyBUaGUgZGlmZnN0YXQgaXMgc2hvd24gZnJvbSB0aGUgb2xkIHJldmlzaW9uIHRvIHRoZSBuZXcgcmV2aXNpb24uCisJIyBUaGlzIGlzIHRvIHNob3cgdGhlIHRydXRoIG9mIHdoYXQgaGFwcGVuZWQgaW4gdGhpcyBjaGFuZ2UuCisJIyBUaGVyZSdzIG5vIHBvaW50IHNob3dpbmcgdGhlIHN0YXQgZnJvbSB0aGUgYmFzZSB0byB0aGUgbmV3CisJIyByZXZpc2lvbiBiZWNhdXNlIHRoZSBiYXNlIGlzIGVmZmVjdGl2ZWx5IGEgcmFuZG9tIHJldmlzaW9uIGF0IHRoaXMKKwkjIHBvaW50IC0gdGhlIHVzZXIgd2lsbCBiZSBpbnRlcmVzdGVkIGluIHdoYXQgdGhpcyByZXZpc2lvbiBjaGFuZ2VkCisJIyAtIGluY2x1ZGluZyB0aGUgdW5kb2luZyBvZiBwcmV2aW91cyByZXZpc2lvbnMgaW4gdGhlIGNhc2Ugb2YKKwkjIG5vbi1mYXN0LWZvcndhcmQgdXBkYXRlcy4KKwllY2hvICIiCisJZWNobyAiU3VtbWFyeSBvZiBjaGFuZ2VzOiIKKwlnaXQgZGlmZi10cmVlICRkaWZmb3B0cyAkb2xkcmV2Li4kbmV3cmV2Cit9CisKKyMKKyMgQ2FsbGVkIGZvciB0aGUgZGVsZXRpb24gb2YgYSBicmFuY2gKKyMKK2dlbmVyYXRlX2RlbGV0ZV9icmFuY2hfZW1haWwoKQoreworCWVjaG8gIiAgICAgICB3YXMgICRvbGRyZXYiCisJZWNobyAiIgorCWVjaG8gJExPR0JFR0lOCisJZ2l0IGRpZmYtdHJlZSAtcyAtLWFsd2F5cyAtLWVuY29kaW5nPVVURi04IC0tcHJldHR5PW9uZWxpbmUgJG9sZHJldgorCWVjaG8gJExPR0VORAorfQorCisjIC0tLS0tLS0tLS0tLS0tLSBBbm5vdGF0ZWQgdGFncworCisjCisjIENhbGxlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGFuIGFubm90YXRlZCB0YWcKKyMKK2dlbmVyYXRlX2NyZWF0ZV9hdGFnX2VtYWlsKCkKK3sKKwllY2hvICIgICAgICAgIGF0ICAkbmV3cmV2ICgkbmV3cmV2X3R5cGUpIgorCisJZ2VuZXJhdGVfYXRhZ19lbWFpbAorfQorCisjCisjIENhbGxlZCBmb3IgdGhlIHVwZGF0ZSBvZiBhbiBhbm5vdGF0ZWQgdGFnICh0aGlzIGlzIHByb2JhYmx5IGEgcmFyZSBldmVudAorIyBhbmQgbWF5IG5vdCBldmVuIGJlIGFsbG93ZWQpCisjCitnZW5lcmF0ZV91cGRhdGVfYXRhZ19lbWFpbCgpCit7CisJZWNobyAiICAgICAgICB0byAgJG5ld3JldiAoJG5ld3Jldl90eXBlKSIKKwllY2hvICIgICAgICBmcm9tICAkb2xkcmV2ICh3aGljaCBpcyBub3cgb2Jzb2xldGUpIgorCisJZ2VuZXJhdGVfYXRhZ19lbWFpbAorfQorCisjCisjIENhbGxlZCB3aGVuIGFuIGFubm90YXRlZCB0YWcgaXMgY3JlYXRlZCBvciBjaGFuZ2VkCisjCitnZW5lcmF0ZV9hdGFnX2VtYWlsKCkKK3sKKwkjIFVzZSBnaXQgZm9yLWVhY2gtcmVmIHRvIHB1bGwgb3V0IHRoZSBpbmRpdmlkdWFsIGZpZWxkcyBmcm9tIHRoZQorCSMgdGFnCisJZXZhbCAkKGdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0nCisJdGFnb2JqZWN0PSUoKm9iamVjdG5hbWUpCisJdGFndHlwZT0lKCpvYmplY3R0eXBlKQorCXRhZ2dlcj0lKHRhZ2dlcm5hbWUpCisJdGFnZ2VkPSUodGFnZ2VyZGF0ZSknICRyZWZuYW1lCisJKQorCisJZWNobyAiICAgdGFnZ2luZyAgJHRhZ29iamVjdCAoJHRhZ3R5cGUpIgorCWNhc2UgIiR0YWd0eXBlIiBpbgorCWNvbW1pdCkKKworCQkjIElmIHRoZSB0YWdnZWQgb2JqZWN0IGlzIGEgY29tbWl0LCB0aGVuIHdlIGFzc3VtZSB0aGlzIGlzIGEKKwkJIyByZWxlYXNlLCBhbmQgc28gd2UgY2FsY3VsYXRlIHdoaWNoIHRhZyB0aGlzIHRhZyBpcworCQkjIHJlcGxhY2luZworCQlwcmV2dGFnPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTAgJG5ld3Jldl4gMj4vZGV2L251bGwpCisKKwkJaWYgWyAtbiAiJHByZXZ0YWciIF07IHRoZW4KKwkJCWVjaG8gIiAgcmVwbGFjZXMgICRwcmV2dGFnIgorCQlmaQorCQk7OworCSopCisJCWVjaG8gIiAgICBsZW5ndGggICQoZ2l0IGNhdC1maWxlIC1zICR0YWdvYmplY3QpIGJ5dGVzIgorCQk7OworCWVzYWMKKwllY2hvICIgdGFnZ2VkIGJ5ICAkdGFnZ2VyIgorCWVjaG8gIiAgICAgICAgb24gICR0YWdnZWQiCisKKwllY2hvICIiCisJZWNobyAkTE9HQkVHSU4KKworCSMgU2hvdyB0aGUgY29udGVudCBvZiB0aGUgdGFnIG1lc3NhZ2U7IHRoaXMgbWlnaHQgY29udGFpbiBhIGNoYW5nZQorCSMgbG9nIG9yIHJlbGVhc2Ugbm90ZXMgc28gaXMgd29ydGggZGlzcGxheWluZy4KKwlnaXQgY2F0LWZpbGUgdGFnICRuZXdyZXYgfCBzZWQgLWUgJzEsL14kL2QnCisKKwllY2hvICIiCisJY2FzZSAiJHRhZ3R5cGUiIGluCisJY29tbWl0KQorCQkjIE9ubHkgY29tbWl0IHRhZ3MgbWFrZSBzZW5zZSB0byBoYXZlIHJldi1saXN0IG9wZXJhdGlvbnMKKwkJIyBwZXJmb3JtZWQgb24gdGhlbQorCQlpZiBbIC1uICIkcHJldnRhZyIgXTsgdGhlbgorCQkJIyBTaG93IGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzIHJlbGVhc2UKKwkJCWdpdCBzaG9ydGxvZyAiJHByZXZ0YWcuLiRuZXdyZXYiCisJCWVsc2UKKwkJCSMgTm8gcHJldmlvdXMgdGFnLCBzaG93IGFsbCB0aGUgY2hhbmdlcyBzaW5jZSB0aW1lCisJCQkjIGJlZ2FuCisJCQlnaXQgc2hvcnRsb2cgJG5ld3JldgorCQlmaQorCQk7OworCSopCisJCSMgWFhYOiBJcyB0aGVyZSBhbnl0aGluZyB1c2VmdWwgd2UgY2FuIGRvIGZvciBub24tY29tbWl0CisJCSMgb2JqZWN0cz8KKwkJOzsKKwllc2FjCisKKwllY2hvICRMT0dFTkQKK30KKworIworIyBDYWxsZWQgZm9yIHRoZSBkZWxldGlvbiBvZiBhbiBhbm5vdGF0ZWQgdGFnCisjCitnZW5lcmF0ZV9kZWxldGVfYXRhZ19lbWFpbCgpCit7CisJZWNobyAiICAgICAgIHdhcyAgJG9sZHJldiIKKwllY2hvICIiCisJZWNobyAkTE9HQkVHSU4KKwlnaXQgZGlmZi10cmVlIC1zIC0tYWx3YXlzIC0tZW5jb2Rpbmc9VVRGLTggLS1wcmV0dHk9b25lbGluZSAkb2xkcmV2CisJZWNobyAkTE9HRU5ECit9CisKKyMgLS0tLS0tLS0tLS0tLS0tIEdlbmVyYWwgcmVmZXJlbmNlcworCisjCisjIENhbGxlZCB3aGVuIGFueSBvdGhlciB0eXBlIG9mIHJlZmVyZW5jZSBpcyBjcmVhdGVkIChtb3N0IGxpa2VseSBhCisjIG5vbi1hbm5vdGF0ZWQgdGFnKQorIworZ2VuZXJhdGVfY3JlYXRlX2dlbmVyYWxfZW1haWwoKQoreworCWVjaG8gIiAgICAgICAgYXQgICRuZXdyZXYgKCRuZXdyZXZfdHlwZSkiCisKKwlnZW5lcmF0ZV9nZW5lcmFsX2VtYWlsCit9CisKKyMKKyMgQ2FsbGVkIHdoZW4gYW55IG90aGVyIHR5cGUgb2YgcmVmZXJlbmNlIGlzIHVwZGF0ZWQgKG1vc3QgbGlrZWx5IGEKKyMgbm9uLWFubm90YXRlZCB0YWcpCisjCitnZW5lcmF0ZV91cGRhdGVfZ2VuZXJhbF9lbWFpbCgpCit7CisJZWNobyAiICAgICAgICB0byAgJG5ld3JldiAoJG5ld3Jldl90eXBlKSIKKwllY2hvICIgICAgICBmcm9tICAkb2xkcmV2IgorCisJZ2VuZXJhdGVfZ2VuZXJhbF9lbWFpbAorfQorCisjCisjIENhbGxlZCBmb3IgY3JlYXRpb24gb3IgdXBkYXRlIG9mIGFueSBvdGhlciB0eXBlIG9mIHJlZmVyZW5jZQorIworZ2VuZXJhdGVfZ2VuZXJhbF9lbWFpbCgpCit7CisJIyBVbmFubm90YXRlZCB0YWdzIGFyZSBtb3JlIGFib3V0IG1hcmtpbmcgYSBwb2ludCB0aGFuIHJlbGVhc2luZyBhCisJIyB2ZXJzaW9uOyB0aGVyZWZvcmUgd2UgZG9uJ3QgZG8gdGhlIHNob3J0bG9nIHN1bW1hcnkgdGhhdCB3ZSBkbyBmb3IKKwkjIGFubm90YXRlZCB0YWdzIGFib3ZlIC0gd2Ugc2ltcGx5IHNob3cgdGhhdCB0aGUgcG9pbnQgaGFzIGJlZW4KKwkjIG1hcmtlZCwgYW5kIHByaW50IHRoZSBsb2cgbWVzc2FnZSBmb3IgdGhlIG1hcmtlZCBwb2ludCBmb3IKKwkjIHJlZmVyZW5jZSBwdXJwb3NlcworCSMKKwkjIE5vdGUgdGhpcyBzZWN0aW9uIGFsc28gY2F0Y2hlcyBhbnkgb3RoZXIgcmVmZXJlbmNlIHR5cGUgKGFsdGhvdWdoCisJIyB0aGVyZSBhcmVuJ3QgYW55KSBhbmQgZGVhbHMgd2l0aCB0aGVtIGluIHRoZSBzYW1lIHdheS4KKworCWVjaG8gIiIKKwlpZiBbICIkbmV3cmV2X3R5cGUiID0gImNvbW1pdCIgXTsgdGhlbgorCQllY2hvICRMT0dCRUdJTgorCQlnaXQgZGlmZi10cmVlIC1zIC0tYWx3YXlzIC0tZW5jb2Rpbmc9VVRGLTggLS1wcmV0dHk9bWVkaXVtICRuZXdyZXYKKwkJZWNobyAkTE9HRU5ECisJZWxzZQorCQkjIFdoYXQgY2FuIHdlIGRvIGhlcmU/ICBUaGUgdGFnIG1hcmtzIGFuIG9iamVjdCB0aGF0IGlzIG5vdAorCQkjIGEgY29tbWl0LCBzbyB0aGVyZSBpcyBubyBsb2cgZm9yIHVzIHRvIGRpc3BsYXkuICBJdCdzCisJCSMgcHJvYmFibHkgbm90IHdpc2UgdG8gb3V0cHV0IGdpdCBjYXQtZmlsZSBhcyBpdCBjb3VsZCBiZSBhCisJCSMgYmluYXJ5IGJsb2IuICBXZSdsbCBqdXN0IHNheSBob3cgYmlnIGl0IGlzCisJCWVjaG8gIiRuZXdyZXYgaXMgYSAkbmV3cmV2X3R5cGUsIGFuZCBpcyAkKGdpdCBjYXQtZmlsZSAtcyAkbmV3cmV2KSBieXRlcyBsb25nLiIKKwlmaQorfQorCisjCisjIENhbGxlZCBmb3IgdGhlIGRlbGV0aW9uIG9mIGFueSBvdGhlciB0eXBlIG9mIHJlZmVyZW5jZQorIworZ2VuZXJhdGVfZGVsZXRlX2dlbmVyYWxfZW1haWwoKQoreworCWVjaG8gIiAgICAgICB3YXMgICRvbGRyZXYiCisJZWNobyAiIgorCWVjaG8gJExPR0JFR0lOCisJZ2l0IGRpZmYtdHJlZSAtcyAtLWFsd2F5cyAtLWVuY29kaW5nPVVURi04IC0tcHJldHR5PW9uZWxpbmUgJG9sZHJldgorCWVjaG8gJExPR0VORAorfQorCisKKyMgLS0tLS0tLS0tLS0tLS0tIE1pc2NlbGxhbmVvdXMgdXRpbGl0aWVzCisKKyMKKyMgU2hvdyBuZXcgcmV2aXNpb25zIGFzIHRoZSB1c2VyIHdvdWxkIGxpa2UgdG8gc2VlIHRoZW0gaW4gdGhlIGVtYWlsLgorIworc2hvd19uZXdfcmV2aXNpb25zKCkKK3sKKwkjIFRoaXMgc2hvd3MgYWxsIGxvZyBlbnRyaWVzIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGNvdmVyZWQgYnkKKwkjIGFub3RoZXIgcmVmIC0gaS5lLiBjb21taXRzIHRoYXQgYXJlIG5vdyBhY2Nlc3NpYmxlIGZyb20gdGhpcworCSMgcmVmIHRoYXQgd2VyZSBwcmV2aW91c2x5IG5vdCBhY2Nlc3NpYmxlCisJIyAoc2VlIGdlbmVyYXRlX3VwZGF0ZV9icmFuY2hfZW1haWwgZm9yIHRoZSBleHBsYW5hdGlvbiBvZiB0aGlzCisJIyBjb21tYW5kKQorCisJIyBSZXZpc2lvbiByYW5nZSBwYXNzZWQgdG8gcmV2LWxpc3QgZGlmZmVycyBmb3IgbmV3IHZzLiB1cGRhdGVkCisJIyBicmFuY2hlcy4KKwlpZiBbICIkY2hhbmdlX3R5cGUiID0gY3JlYXRlIF0KKwl0aGVuCisJCSMgU2hvdyBhbGwgcmV2aXNpb25zIGV4Y2x1c2l2ZSB0byB0aGlzIChuZXcpIGJyYW5jaC4KKwkJcmV2c3BlYz0kbmV3cmV2CisJZWxzZQorCQkjIEJyYW5jaCB1cGRhdGU7IHNob3cgcmV2aXNpb25zIG5vdCBwYXJ0IG9mICRvbGRyZXYuCisJCXJldnNwZWM9JG9sZHJldi4uJG5ld3JldgorCWZpCisKKwlvdGhlcl9icmFuY2hlcz0kKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUocmVmbmFtZSknIHJlZnMvaGVhZHMvIHwKKwkgICAgZ3JlcCAtRiAtdiAkcmVmbmFtZSkKKwlnaXQgcmV2LXBhcnNlIC0tbm90ICRvdGhlcl9icmFuY2hlcyB8CisJaWYgWyAteiAiJGN1c3RvbV9zaG93cmV2IiBdCisJdGhlbgorCQlnaXQgcmV2LWxpc3QgLS1wcmV0dHkgLS1zdGRpbiAkcmV2c3BlYworCWVsc2UKKwkJZ2l0IHJldi1saXN0IC0tc3RkaW4gJHJldnNwZWMgfAorCQl3aGlsZSByZWFkIG9uZXJldgorCQlkbworCQkJZXZhbCAkKHByaW50ZiAiJGN1c3RvbV9zaG93cmV2IiAkb25lcmV2KQorCQlkb25lCisJZmkKK30KKworCitsaW1pdF9saW5lcygpCit7CisJbGluZXM9MAorCXNraXBwZWQ9MAorCXdoaWxlIElGUz0iIiByZWFkIC1yIGxpbmU7IGRvCisJCWxpbmVzPSQoKGxpbmVzICsgMSkpCisJCWlmIFsgJGxpbmVzIC1ndCAkMSBdOyB0aGVuCisJCQlza2lwcGVkPSQoKHNraXBwZWQgKyAxKSkKKwkJZWxzZQorCQkJcHJpbnRmICIlc1xuIiAiJGxpbmUiCisJCWZpCisJZG9uZQorCWlmIFsgJHNraXBwZWQgLW5lIDAgXTsgdGhlbgorCQllY2hvICIuLi4gJHNraXBwZWQgbGluZXMgc3VwcHJlc3NlZCAuLi4iCisJZmkKK30KKworCitzZW5kX21haWwoKQoreworCWlmIFsgLW4gIiRlbnZlbG9wZXNlbmRlciIgXTsgdGhlbgorCQkvdXNyL3NiaW4vc2VuZG1haWwgLXQgLWYgIiRlbnZlbG9wZXNlbmRlciIKKwllbHNlCisJCS91c3Ivc2Jpbi9zZW5kbWFpbCAtdAorCWZpCit9CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWluKCkKKworIyAtLS0gQ29uc3RhbnRzCitMT0dCRUdJTj0iLSBMb2cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitMT0dFTkQ9Ii0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCisjIC0tLSBDb25maWcKKyMgU2V0IEdJVF9ESVIgZWl0aGVyIGZyb20gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCBvciBmcm9tIHRoZSBlbnZpcm9ubWVudAorIyB2YXJpYWJsZS4KK0dJVF9ESVI9JChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpciAyPi9kZXYvbnVsbCkKK2lmIFsgLXogIiRHSVRfRElSIiBdOyB0aGVuCisJZWNobyA+JjIgImZhdGFsOiBwb3N0LXJlY2VpdmU6IEdJVF9ESVIgbm90IHNldCIKKwlleGl0IDEKK2ZpCisKK3Byb2plY3RkZXNjPSQoc2VkIC1uZSAnMXAnICIkR0lUX0RJUi9kZXNjcmlwdGlvbiIgMj4vZGV2L251bGwpCisjIENoZWNrIGlmIHRoZSBkZXNjcmlwdGlvbiBpcyB1bmNoYW5nZWQgZnJvbSBpdCdzIGRlZmF1bHQsIGFuZCBzaG9ydGVuIGl0IHRvCisjIGEgbW9yZSBtYW5hZ2VhYmxlIGxlbmd0aCBpZiBpdCBpcworaWYgZXhwciAiJHByb2plY3RkZXNjIiA6ICJVbm5hbWVkIHJlcG9zaXRvcnkuKiQiID4vZGV2L251bGwKK3RoZW4KKwlwcm9qZWN0ZGVzYz0iVU5OQU1FRCBQUk9KRUNUIgorZmkKKworcmVjaXBpZW50cz0kKGdpdCBjb25maWcgaG9va3MubWFpbGluZ2xpc3QpCithbm5vdW5jZXJlY2lwaWVudHM9JChnaXQgY29uZmlnIGhvb2tzLmFubm91bmNlbGlzdCkKK2VudmVsb3Blc2VuZGVyPSQoZ2l0IGNvbmZpZyBob29rcy5lbnZlbG9wZXNlbmRlcikKK2VtYWlscHJlZml4PSQoZ2l0IGNvbmZpZyBob29rcy5lbWFpbHByZWZpeCB8fCBlY2hvICdbU0NNXSAnKQorY3VzdG9tX3Nob3dyZXY9JChnaXQgY29uZmlnIGhvb2tzLnNob3dyZXYpCittYXhsaW5lcz0kKGdpdCBjb25maWcgaG9va3MuZW1haWxtYXhsaW5lcykKK2RpZmZvcHRzPSQoZ2l0IGNvbmZpZyBob29rcy5kaWZmb3B0cykKKzogJHtkaWZmb3B0czo9Ii0tc3RhdCAtLXN1bW1hcnkgLS1maW5kLWNvcGllcy1oYXJkZXIifQorCisjIC0tLSBNYWluIGxvb3AKKyMgQWxsb3cgZHVhbCBtb2RlOiBydW4gZnJvbSB0aGUgY29tbWFuZCBsaW5lIGp1c3QgbGlrZSB0aGUgdXBkYXRlIGhvb2ssIG9yCisjIGlmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4gdGhlbiBydW4gYXMgYSBob29rIHNjcmlwdAoraWYgWyAtbiAiJDEiIC1hIC1uICIkMiIgLWEgLW4gIiQzIiBdOyB0aGVuCisJIyBPdXRwdXQgdG8gdGhlIHRlcm1pbmFsIGluIGNvbW1hbmQgbGluZSBtb2RlIC0gaWYgc29tZW9uZSB3YW50ZWQgdG8KKwkjIHJlc2VuZCBhbiBlbWFpbDsgdGhleSBjb3VsZCByZWRpcmVjdCB0aGUgb3V0cHV0IHRvIHNlbmRtYWlsCisJIyB0aGVtc2VsdmVzCisJcHJlcF9mb3JfZW1haWwgJDIgJDMgJDEgJiYgUEFHRVI9IGdlbmVyYXRlX2VtYWlsCitlbHNlCisJd2hpbGUgcmVhZCBvbGRyZXYgbmV3cmV2IHJlZm5hbWUKKwlkbworCQlwcmVwX2Zvcl9lbWFpbCAkb2xkcmV2ICRuZXdyZXYgJHJlZm5hbWUgfHwgY29udGludWUKKwkJZ2VuZXJhdGVfZW1haWwgJG1heGxpbmVzIHwgc2VuZF9tYWlsCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeSBiL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YTJjZGViCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy9wcmUtYXV0by1nYy1iYXR0ZXJ5CkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHZlcmlmeSBpZiB5b3UgYXJlIG9uIGJhdHRlcnksIGluIGNhc2UgeW91CisjIGFyZSBydW5uaW5nIExpbnV4IG9yIE9TIFguIENhbGxlZCBieSBnaXQtZ2MgLS1hdXRvIHdpdGggbm8gYXJndW1lbnRzLgorIyBUaGUgaG9vayBzaG91bGQgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBhZnRlciBpc3N1aW5nIGFuIGFwcHJvcHJpYXRlCisjIG1lc3NhZ2UgaWYgaXQgd2FudHMgdG8gc3RvcCB0aGUgYXV0byByZXBhY2tpbmcuCisjCisjIFRoaXMgaG9vayBpcyBzdG9yZWQgaW4gdGhlIGNvbnRyaWIvaG9va3MgZGlyZWN0b3J5LiBZb3VyIGRpc3RyaWJ1dGlvbgorIyBtYXkgaGF2ZSBwdXQgdGhpcyBzb21ld2hlcmUgZWxzZS4gSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgaG9vaywgeW91CisjIHNob3VsZCBtYWtlIHRoaXMgc2NyaXB0IGV4ZWN1dGFibGUgdGhlbiBsaW5rIHRvIGl0IGluIHRoZSByZXBvc2l0b3J5CisjIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBpdCBpbi4KKyMKKyMgRm9yIGV4YW1wbGUsIGlmIHRoZSBob29rIGlzIHN0b3JlZCBpbgorIyAvdXNyL3NoYXJlL2dpdC1jb3JlL2NvbnRyaWIvaG9va3MvcHJlLWF1dG8tZ2MtYmF0dGVyeToKKyMKKyMgY2QgL3BhdGgvdG8veW91ci9yZXBvc2l0b3J5LmdpdAorIyBsbiAtc2YgL3Vzci9zaGFyZS9naXQtY29yZS9jb250cmliL2hvb2tzL3ByZS1hdXRvLWdjLWJhdHRlcnkgXAorIwlob29rcy9wcmUtYXV0by1nYworCitpZiB0ZXN0IC14IC9zYmluL29uX2FjX3Bvd2VyICYmIC9zYmluL29uX2FjX3Bvd2VyCit0aGVuCisJZXhpdCAwCitlbGlmIHRlc3QgIiQoY2F0IC9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L0FDL29ubGluZSAyPi9kZXYvbnVsbCkiID0gMQordGhlbgorCWV4aXQgMAorZWxpZiBncmVwIC1xICdvbi1saW5lJyAvcHJvYy9hY3BpL2FjX2FkYXB0ZXIvQUMvc3RhdGUgMj4vZGV2L251bGwKK3RoZW4KKwlleGl0IDAKK2VsaWYgZ3JlcCAtcSAnMHgwMSQnIC9wcm9jL2FwbSAyPi9kZXYvbnVsbAordGhlbgorCWV4aXQgMAorZWxpZiBncmVwIC1xICJBQyBQb3dlciBcKzogMSIgL3Byb2MvcG11L2luZm8gMj4vZGV2L251bGwKK3RoZW4KKwlleGl0IDAKK2VsaWYgdGVzdCAteCAvdXNyL2Jpbi9wbXNldCAmJiAvdXNyL2Jpbi9wbXNldCAtZyBiYXR0IHwKKwlncmVwIC1xICJkcmF3aW5nIGZyb20gJ0FDIFBvd2VyJyIKK3RoZW4KKwlleGl0IDAKK2ZpCisKK2VjaG8gIkF1dG8gcGFja2luZyBkZWZlcnJlZDsgbm90IG9uIEFDIgorZXhpdCAxCmRpZmYgLS1naXQgYS9jb250cmliL2hvb2tzL3NldGdpdHBlcm1zLnBlcmwgYi9jb250cmliL2hvb2tzL3NldGdpdHBlcm1zLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjc3MGExYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaG9va3Mvc2V0Z2l0cGVybXMucGVybApAQCAtMCwwICsxLDIxNCBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKb3NoIEVuZ2xhbmQKKyMKKyMgVGhpcyBzY3JpcHQgY2FuIGJlIHVzZWQgdG8gc2F2ZS9yZXN0b3JlIGZ1bGwgcGVybWlzc2lvbnMgYW5kIG93bmVyc2hpcCBkYXRhCisjIHdpdGhpbiBhIGdpdCB3b3JraW5nIHRyZWUuCisjCisjIFRvIHNhdmUgcGVybWlzc2lvbnMvb3duZXJzaGlwIGRhdGEsIHBsYWNlIHRoaXMgc2NyaXB0IGluIHlvdXIgLmdpdC9ob29rcworIyBkaXJlY3RvcnkgYW5kIGVuYWJsZSBhIGBwcmUtY29tbWl0YCBob29rIHdpdGggdGhlIGZvbGxvd2luZyBsaW5lczoKKyMgICAgICAjIS9iaW4vc2gKKyMgICAgIFNVQkRJUkVDVE9SWV9PSz0xIC4gZ2l0LXNoLXNldHVwCisjICAgICAkR0lUX0RJUi9ob29rcy9zZXRnaXRwZXJtcy5wZXJsIC1yCisjCisjIFRvIHJlc3RvcmUgcGVybWlzc2lvbnMvb3duZXJzaGlwIGRhdGEsIHBsYWNlIHRoaXMgc2NyaXB0IGluIHlvdXIgLmdpdC9ob29rcworIyBkaXJlY3RvcnkgYW5kIGVuYWJsZSBhIGBwb3N0LW1lcmdlYCBhbmQgYHBvc3QtY2hlY2tvdXRgIGhvb2sgd2l0aCB0aGUKKyMgZm9sbG93aW5nIGxpbmVzOgorIyAgICAgICMhL2Jpbi9zaAorIyAgICAgU1VCRElSRUNUT1JZX09LPTEgLiBnaXQtc2gtc2V0dXAKKyMgICAgICRHSVRfRElSL2hvb2tzL3NldGdpdHBlcm1zLnBlcmwgLXcKKyMKK3VzZSBzdHJpY3Q7Cit1c2UgR2V0b3B0OjpMb25nOwordXNlIEZpbGU6OkZpbmQ7Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK215ICR1c2FnZSA9CisidXNhZ2U6IHNldGdpdHBlcm1zLnBlcmwgW09QVElPTl0uLi4gPC0tcmVhZHwtLXdyaXRlPgorVGhpcyBwcm9ncmFtIHVzZXMgYSBmaWxlIGAuZ2l0bWV0YWAgdG8gc3RvcmUvcmVzdG9yZSBwZXJtaXNzaW9ucyBhbmQgdWlkL2dpZAoraW5mbyBmb3IgYWxsIGZpbGVzL2RpcnMgdHJhY2tlZCBieSBnaXQgaW4gdGhlIHJlcG9zaXRvcnkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVJlYWQgTW9kZS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy1yLCAgLS1yZWFkICAgICAgICAgUmVhZHMgcGVybXMvZXRjIGZyb20gd29ya2luZyBkaXIgaW50byBhIC5naXRtZXRhIGZpbGUKKy1zLCAgLS1zdGRvdXQgICAgICAgT3V0cHV0IHRvIHN0ZG91dCBpbnN0ZWFkIG9mIC5naXRtZXRhCistZCwgIC0tZGlmZiAgICAgICAgIFNob3cgdW5pZmllZCBkaWZmIG9mIHBlcm1zIGZpbGUgKFhPUiB3aXRoIC0tc3Rkb3V0KQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1Xcml0ZSBNb2RlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistdywgIC0td3JpdGUgICAgICAgIE1vZGlmeSBwZXJtcy9ldGMgaW4gd29ya2luZyBkaXIgdG8gbWF0Y2ggdGhlIC5naXRtZXRhIGZpbGUKKy12LCAgLS12ZXJib3NlICAgICAgQmUgdmVyYm9zZQorCitcbiI7CisKK215ICgkc3Rkb3V0LCAkc2hvd2RpZmYsICR2ZXJib3NlLCAkcmVhZF9tb2RlLCAkd3JpdGVfbW9kZSk7CisKK2lmICgoQEFSR1YgPCAwKSB8fCAhR2V0T3B0aW9ucygKKwkJCSAgICAgICAic3Rkb3V0IiwgICAgICAgICBcJHN0ZG91dCwKKwkJCSAgICAgICAiZGlmZiIsICAgICAgICAgICBcJHNob3dkaWZmLAorCQkJICAgICAgICJyZWFkIiwgICAgICAgICAgIFwkcmVhZF9tb2RlLAorCQkJICAgICAgICJ3cml0ZSIsICAgICAgICAgIFwkd3JpdGVfbW9kZSwKKwkJCSAgICAgICAidmVyYm9zZSIsICAgICAgICBcJHZlcmJvc2UsCisJCQkgICAgICApKSB7IGRpZSAkdXNhZ2U7IH0KK2RpZSAkdXNhZ2UgdW5sZXNzICgkcmVhZF9tb2RlIHhvciAkd3JpdGVfbW9kZSk7CisKK215ICR0b3BkaXIgPSBgZ2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cGAgb3IgZGllICJcbiI7IGNob21wICR0b3BkaXI7CitteSAkZ2l0ZGlyID0gJHRvcGRpciAuICcuZ2l0JzsKK215ICRnaXRtZXRhID0gJHRvcGRpciAuICcuZ2l0bWV0YSc7CisKK2lmICgkd3JpdGVfbW9kZSkgeworICAgICMgVXBkYXRlIHRoZSB3b3JraW5nIGRpciBwZXJtaXNzaW9ucy9vd25lcnNoaXAgYmFzZWQgb24gZGF0YSBmcm9tIC5naXRtZXRhCisgICAgb3BlbiAoSU4sICI8JGdpdG1ldGEiKSBvciBkaWUgIkNvdWxkIG5vdCBvcGVuICRnaXRtZXRhIGZvciByZWFkaW5nOiAkIVxuIjsKKyAgICB3aGlsZSAoZGVmaW5lZCAoJF8gPSA8SU4+KSkgeworCWNob21wOworCWlmICgvXiguKikgIG1vZGU9KFxTKylccyt1aWQ9KFxkKylccytnaWQ9KFxkKykvKSB7CisJICAgICMgQ29tcGFyZSByZWNvcmRlZCBwZXJtcyB0byBhY3R1YWwgcGVybXMgaW4gdGhlIHdvcmtpbmcgZGlyCisJICAgIG15ICgkcGF0aCwgJG1vZGUsICR1aWQsICRnaWQpID0gKCQxLCAkMiwgJDMsICQ0KTsKKwkgICAgbXkgJGZ1bGxwYXRoID0gJHRvcGRpciAuICRwYXRoOworCSAgICBteSAodW5kZWYsdW5kZWYsJHdtb2RlLHVuZGVmLCR3dWlkLCR3Z2lkKSA9IGxzdGF0KCRmdWxscGF0aCk7CisJICAgICR3bW9kZSA9IHNwcmludGYgIiUwNG8iLCAkd21vZGUgJiAwNzc3NzsKKwkgICAgaWYgKCRtb2RlIG5lICR3bW9kZSkgeworCQkkdmVyYm9zZSAmJiBwcmludCAiVXBkYXRpbmcgcGVybWlzc2lvbnMgb24gJHBhdGg6IG9sZD0kd21vZGUsIG5ldz0kbW9kZVxuIjsKKwkJY2htb2Qgb2N0KCRtb2RlKSwgJGZ1bGxwYXRoOworCSAgICB9CisJICAgIGlmICgkdWlkICE9ICR3dWlkIHx8ICRnaWQgIT0gJHdnaWQpIHsKKwkJaWYgKCR2ZXJib3NlKSB7CisJCSAgICAjIFByaW50IG91dCB1c2VyL2dyb3VwIG5hbWVzIGluc3RlYWQgb2YgdWlkL2dpZAorCQkgICAgbXkgJHB3bmFtZSAgPSBnZXRwd3VpZCgkdWlkKTsKKwkJICAgIG15ICRncnBuYW1lICA9IGdldGdyZ2lkKCRnaWQpOworCQkgICAgbXkgJHdwd25hbWUgID0gZ2V0cHd1aWQoJHd1aWQpOworCQkgICAgbXkgJHdncnBuYW1lICA9IGdldGdyZ2lkKCR3Z2lkKTsKKwkJICAgICRwd25hbWUgPSAkdWlkIGlmICFkZWZpbmVkICRwd25hbWU7CisJCSAgICAkZ3JwbmFtZSA9ICRnaWQgaWYgIWRlZmluZWQgJGdycG5hbWU7CisJCSAgICAkd3B3bmFtZSA9ICR3dWlkIGlmICFkZWZpbmVkICR3cHduYW1lOworCQkgICAgJHdncnBuYW1lID0gJHdnaWQgaWYgIWRlZmluZWQgJHdncnBuYW1lOworCisJCSAgICBwcmludCAiVXBkYXRpbmcgdWlkL2dpZCBvbiAkcGF0aDogb2xkPSR3cHduYW1lLyR3Z3JwbmFtZSwgbmV3PSRwd25hbWUvJGdycG5hbWVcbiI7CisJCX0KKwkJY2hvd24gJHVpZCwgJGdpZCwgJGZ1bGxwYXRoOworCSAgICB9CisJfQorCWVsc2UgeworCSAgICB3YXJuICJJbnZhbGlkIGlucHV0IGZvcm1hdCBpbiAkZ2l0bWV0YTpcblx0JF9cbiI7CisJfQorICAgIH0KKyAgICBjbG9zZSBJTjsKK30KK2Vsc2lmICgkcmVhZF9tb2RlKSB7CisgICAgIyBIYW5kbGUgbWVyZ2UgY29uZmxpY3RzIGluIHRoZSAuZ2l0cGVybXMgZmlsZQorICAgIGlmICgtZSAiJGdpdGRpci9NRVJHRV9NU0ciKSB7CisJaWYgKGBncmVwID09PT09PSAkZ2l0bWV0YWApIHsKKwkgICAgIyBDb25mbGljdCBub3QgcmVzb2x2ZWQgLS0gYWJvcnQgdGhlIGNvbW1pdAorCSAgICBwcmludCAiUEVSTUlTU0lPTlMvT1dORVJTSElQIENPTkZMSUNUXG4iOworCSAgICBwcmludCAiICAgIFJlc29sdmUgdGhlIGNvbmZsaWN0IGluIHRoZSAkZ2l0bWV0YSBmaWxlIGFuZCB0aGVuIHJ1blxuIjsKKwkgICAgcHJpbnQgIiAgICBgLmdpdC9ob29rcy9zZXRnaXRwZXJtcy5wZXJsIC0td3JpdGVgIHRvIHJlY29uY2lsZS5cbiI7CisJICAgIGV4aXQgMTsKKwl9CisJZWxzaWYgKGBncmVwICRnaXRtZXRhICRnaXRkaXIvTUVSR0VfTVNHYCkgeworCSAgICAjIEEgY29uZmxpY3QgaW4gLmdpdG1ldGEgaGFzIGJlZW4gbWFudWFsbHkgcmVzb2x2ZWQuIFZlcmlmeSB0aGF0CisJICAgICMgdGhlIHdvcmtpbmcgZGlyIHBlcm1zIG1hdGNoZXMgdGhlIGN1cnJlbnQgLmdpdG1ldGEgcGVybXMgZm9yCisJICAgICMgZWFjaCBmaWxlL2RpciB0aGF0IGNvbmZsaWN0ZWQuCisJICAgICMgVGhpcyBpcyBoZXJlIGJlY2F1c2UgYSBgc2V0Z2l0cGVybXMucGVybCAtLXdyaXRlYCB3YXMgbm90CisJICAgICMgcGVyZm9ybWVkIGR1ZSB0byBhIG1lcmdlIGNvbmZsaWN0LCBzbyBwZXJtaXNzaW9ucy9vd25lcnNoaXAKKwkgICAgIyBtYXkgbm90IGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgbWFudWFsbHkgbWVyZ2VkIC5naXRtZXRhIGZpbGUuCisJICAgIG15IEBjb25mbGljdF9kaWZmID0gYGdpdCBzaG93IFwkKGNhdCAkZ2l0ZGlyL01FUkdFX0hFQUQpYDsKKwkgICAgbXkgQGNvbmZsaWN0X2ZpbGVzOworCSAgICBteSAkbWV0YWRpZmYgPSAwOworCisJICAgICMgQnVpbGQgYSBsaXN0IG9mIGZpbGVzIHRoYXQgY29uZmxpY3RlZCBmcm9tIHRoZSAuZ2l0bWV0YSBkaWZmCisJICAgIGZvcmVhY2ggbXkgJGxpbmUgKEBjb25mbGljdF9kaWZmKSB7CisJCWlmICgkbGluZSA9fiBtfF5kaWZmIC0tZ2l0IGEvJGdpdG1ldGEgYi8kZ2l0bWV0YXwpIHsKKwkJICAgICRtZXRhZGlmZiA9IDE7CisJCX0KKwkJZWxzaWYgKCRsaW5lID1+IC9eZGlmZiAtLWdpdC8pIHsKKwkJICAgICRtZXRhZGlmZiA9IDA7CisJCX0KKwkJZWxzaWYgKCRtZXRhZGlmZiAmJiAkbGluZSA9fiAvXlwrKC4qKSAgbW9kZT0vKSB7CisJCSAgICBwdXNoIEBjb25mbGljdF9maWxlcywgJDE7CisJCX0KKwkgICAgfQorCisJICAgICMgVmVyaWZ5IHRoYXQgZWFjaCBjb25mbGljdCBmaWxlIG5vdyBoYXMgcGVybWlzc2lvbnMgY29uc2lzdGVudAorCSAgICAjIHdpdGggdGhlIC5naXRtZXRhIGZpbGUKKwkgICAgZm9yZWFjaCBteSAkZmlsZSAoQGNvbmZsaWN0X2ZpbGVzKSB7CisJCW15ICRhYnNmaWxlID0gJHRvcGRpciAuICRmaWxlOworCQlteSAkZ21fZW50cnkgPSBgZ3JlcCAiXiRmaWxlICBtb2RlPSIgJGdpdG1ldGFgOworCQlpZiAoJGdtX2VudHJ5ID1+IC9tb2RlPShcZCspICB1aWQ9KFxkKykgIGdpZD0oXGQrKS8pIHsKKwkJICAgIG15ICgkZ21fbW9kZSwgJGdtX3VpZCwgJGdtX2dpZCkgPSAoJDEsICQyLCAkMyk7CisJCSAgICBteSAodW5kZWYsdW5kZWYsJG1vZGUsdW5kZWYsJHVpZCwkZ2lkKSA9IGxzdGF0KCIkYWJzZmlsZSIpOworCQkgICAgJG1vZGUgPSBzcHJpbnRmKCIlMDRvIiwgJG1vZGUgJiAwNzc3Nyk7CisJCSAgICBpZiAoKCRnbV9tb2RlIG5lICRtb2RlKSB8fCAoJGdtX3VpZCAhPSAkdWlkKQorCQkJfHwgKCRnbV9naWQgIT0gJGdpZCkpIHsKKwkJCXByaW50ICJQRVJNSVNTSU9OUy9PV05FUlNISVAgQ09ORkxJQ1RcbiI7CisJCQlwcmludCAiICAgIE1pc21hdGNoIGZvdW5kIGZvciBmaWxlOiAkZmlsZVxuIjsKKwkJCXByaW50ICIgICAgUnVuIGAuZ2l0L2hvb2tzL3NldGdpdHBlcm1zLnBlcmwgLS13cml0ZWAgdG8gcmVjb25jaWxlLlxuIjsKKwkJCWV4aXQgMTsKKwkJICAgIH0KKwkJfQorCQllbHNlIHsKKwkJICAgIHByaW50ICJXYXJuaW5nISBQZXJtaXNzaW9ucy9vd25lcnNoaXAgbm8gbG9uZ2VyIGJlaW5nIHRyYWNrZWQgZm9yIGZpbGU6ICRmaWxlXG4iOworCQl9CisJICAgIH0KKwl9CisgICAgfQorCisgICAgIyBObyBtZXJnZSBjb25mbGljdHMgLS0gd3JpdGUgb3V0IHBlcm1zL293bmVyc2hpcCBkYXRhIHRvIC5naXRtZXRhIGZpbGUKKyAgICB1bmxlc3MgKCRzdGRvdXQpIHsKKwlvcGVuIChPVVQsICI+JGdpdG1ldGEudG1wIikgb3IgZGllICJDb3VsZCBub3Qgb3BlbiAkZ2l0bWV0YS50bXAgZm9yIHdyaXRpbmc6ICQhXG4iOworICAgIH0KKworICAgIG15IEBmaWxlcyA9IGBnaXQgbHMtZmlsZXNgOworICAgIG15ICVkaXJzOworCisgICAgZm9yZWFjaCBteSAkcGF0aCAoQGZpbGVzKSB7CisJY2hvbXAgJHBhdGg7CisJIyBXZSBoYXZlIHRvIG1hbnVhbGx5IGFkZCBzdGF0cyBmb3IgcGFyZW50IGRpcmVjdG9yaWVzCisJbXkgJHBhcmVudCA9IGRpcm5hbWUoJHBhdGgpOworCXdoaWxlICghZXhpc3RzICRkaXJzeyRwYXJlbnR9KSB7CisJICAgICRkaXJzeyRwYXJlbnR9ID0gMTsKKwkgICAgbmV4dCBpZiAkcGFyZW50IGVxICcuJzsKKwkgICAgcHJpbnRzdGF0cygkcGFyZW50KTsKKwkgICAgJHBhcmVudCA9IGRpcm5hbWUoJHBhcmVudCk7CisJfQorCSMgTm93IHRoZSBnaXQtdHJhY2tlZCBmaWxlCisJcHJpbnRzdGF0cygkcGF0aCk7CisgICAgfQorCisgICAgIyBkaWZmIHRoZSB0ZW1wb3JhcnkgbWV0YWRhdGEgZmlsZSB0byBzZWUgaWYgYW55dGhpbmcgaGFzIGNoYW5nZWQKKyAgICAjIElmIG5vIG1ldGFkYXRhIGhhcyBjaGFuZ2VkLCBkb24ndCBvdmVyd3JpdGUgdGhlIHJlYWwgZmlsZQorICAgICMgVGhpcyBpcyBqdXN0IHNvIGBnaXQgY29tbWl0IC1hYCBkb2Vzbid0IHRyeSB0byBjb21taXQgYSBib2d1cyB1cGRhdGUKKyAgICB1bmxlc3MgKCRzdGRvdXQpIHsKKwlpZiAoISAtZSAkZ2l0bWV0YSkgeworCSAgICByZW5hbWUgIiRnaXRtZXRhLnRtcCIsICRnaXRtZXRhOworCX0KKwllbHNlIHsKKwkgICAgbXkgJGRpZmYgPSBgZGlmZiAtVSAwICRnaXRtZXRhICRnaXRtZXRhLnRtcGA7CisJICAgIGlmICgkZGlmZiBuZSAnJykgeworCQlyZW5hbWUgIiRnaXRtZXRhLnRtcCIsICRnaXRtZXRhOworCSAgICB9CisJICAgIGVsc2UgeworCQl1bmxpbmsgIiRnaXRtZXRhLnRtcCI7CisJICAgIH0KKwkgICAgaWYgKCRzaG93ZGlmZikgeworCQlwcmludCAkZGlmZjsKKwkgICAgfQorCX0KKwljbG9zZSBPVVQ7CisgICAgfQorICAgICMgTWFrZSBzdXJlIHRoZSAuZ2l0bWV0YSBmaWxlIGlzIHRyYWNrZWQKKyAgICBzeXN0ZW0oImdpdCBhZGQgJGdpdG1ldGEiKTsKK30KKworCitzdWIgcHJpbnRzdGF0cyB7CisgICAgbXkgJHBhdGggPSAkX1swXTsKKyAgICAkcGF0aCA9fiBzL0AvXEAvZzsKKyAgICBteSAodW5kZWYsdW5kZWYsJG1vZGUsdW5kZWYsJHVpZCwkZ2lkKSA9IGxzdGF0KCRwYXRoKTsKKyAgICAkcGF0aCA9fiBzLyUvXCUvZzsKKyAgICBpZiAoJHN0ZG91dCkgeworCXByaW50ICRwYXRoOworCXByaW50ZiAiICBtb2RlPSUwNG8gIHVpZD0kdWlkICBnaWQ9JGdpZFxuIiwgJG1vZGUgJiAwNzc3NzsKKyAgICB9CisgICAgZWxzZSB7CisJcHJpbnQgT1VUICRwYXRoOworCXByaW50ZiBPVVQgIiAgbW9kZT0lMDRvICB1aWQ9JHVpZCAgZ2lkPSRnaWRcbiIsICRtb2RlICYgMDc3Nzc7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQgYi9jb250cmliL2hvb2tzL3VwZGF0ZS1wYXJhbm9pZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMThiMzE3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9ob29rcy91cGRhdGUtcGFyYW5vaWQKQEAgLTAsMCArMSw0MjEgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIEZpbGU6OlNwZWM7CisKKyRFTlZ7UEFUSH0gICAgID0gJy9vcHQvZ2l0L2Jpbic7CitteSAkYWNsX2dpdCAgICA9ICcvdmNzL2FjbHMuZ2l0JzsKK215ICRhY2xfYnJhbmNoID0gJ3JlZnMvaGVhZHMvbWFzdGVyJzsKK215ICRkZWJ1ZyAgICAgID0gMDsKKworPWRvYworSW52b2tlZCBhczogdXBkYXRlIHJlZm5hbWUgb2xkLXNoYTEgbmV3LXNoYTEKKworVGhpcyBzY3JpcHQgaXMgcnVuIGJ5IGdpdC1yZWNlaXZlLXBhY2sgb25jZSBmb3IgZWFjaCByZWYgdGhhdCB0aGUKK2NsaWVudCBpcyB0cnlpbmcgdG8gbW9kaWZ5LiAgSWYgd2UgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXhpdCB2YWx1ZQordGhlbiB0aGUgdXBkYXRlIGZvciB0aGF0IHBhcnRpY3VsYXIgcmVmIGlzIGRlbmllZCwgYnV0IHVwZGF0ZXMgZm9yCitvdGhlciByZWZzIGluIHRoZSBzYW1lIHJ1biBvZiByZWNlaXZlLXBhY2sgbWF5IHN0aWxsIGJlIGFsbG93ZWQuCisKK1dlIGFyZSBydW4gYWZ0ZXIgdGhlIG9iamVjdHMgaGF2ZSBiZWVuIHVwbG9hZGVkLCBidXQgYmVmb3JlIHRoZQorcmVmIGlzIGFjdHVhbGx5IG1vZGlmaWVkLiAgV2UgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhhdCBmYWN0IHdoZW4gd2UKK2xvb2sgZm9yICJuZXciIGNvbW1pdHMgYW5kIHRhZ3MgKHRoZSBuZXcgb2JqZWN0cyB3b24ndCBzaG93IHVwIGluCitgcmV2LWxpc3QgLS1hbGxgKS4KKworVGhpcyBzY3JpcHQgbG9hZHMgYW5kIHBhcnNlcyB0aGUgY29udGVudCBvZiB0aGUgY29uZmlnIGZpbGUKKyJ1c2Vycy8kdGhpc191c2VyLmFjbCIgZnJvbSB0aGUgJGFjbF9icmFuY2ggY29tbWl0IG9mICRhY2xfZ2l0IE9EQi4KK1RoZSBhY2wgZmlsZSBpcyBhIGdpdC1jb25maWcgc3R5bGUgZmlsZSwgYnV0IHVzZXMgYSBzbGlnaHRseSBtb3JlCityZXN0cmljdGVkIHN5bnRheCBhcyB0aGUgUGVybCBwYXJzZXIgY29udGFpbmVkIHdpdGhpbiB0aGlzIHNjcmlwdAoraXMgbm90IG5lYXJseSBhcyBwZXJtaXNzaXZlIGFzIGdpdC1jb25maWcuCisKK0V4YW1wbGU6CisKKyAgW3VzZXJdCisgICAgY29tbWl0dGVyID0gSm9obiBEb2UgPGpvaG4uZG9lQGV4YW1wbGUuY29tPgorICAgIGNvbW1pdHRlciA9IEpvaG4gUi4gRG9lIDxqb2huLmRvZUBleGFtcGxlLmNvbT4KKworICBbcmVwb3NpdG9yeSAiYWNscyJdCisgICAgYWxsb3cgPSBoZWFkcy9tYXN0ZXIKKyAgICBhbGxvdyA9IENEVVIgZm9yIGhlYWRzL2pkLworICAgIGFsbG93ID0gQyAgICBmb3IgXnRhZ3MvdlxcZCskCisKK0ZvciBhbGwgbmV3IGNvbW1pdCBvciB0YWcgb2JqZWN0cyB0aGUgY29tbWl0dGVyIChvciB0YWdnZXIpIGxpbmUKK3dpdGhpbiB0aGUgb2JqZWN0IG11c3QgZXhhY3RseSBtYXRjaCBvbmUgb2YgdGhlIHVzZXIuY29tbWl0dGVyCit2YWx1ZXMgbGlzdGVkIGluIHRoZSBhY2wgZmlsZSAoIkhFQUQ6dXNlcnMvJHRoaXNfdXNlci5hY2wiKS4KKworRm9yIGEgYnJhbmNoIHRvIGJlIG1vZGlmaWVkIGFuIGFsbG93IGxpbmUgd2l0aGluIHRoZSBtYXRjaGluZworcmVwb3NpdG9yeSBzZWN0aW9uIG11c3QgYmUgbWF0Y2hlZCBmb3IgYm90aCB0aGUgcmVmbmFtZSBhbmQgdGhlCitvcGNvZGUuCisKK1JlcG9zaXRvcnkgc2VjdGlvbnMgYXJlIG1hdGNoZWQgb24gdGhlIGJhc2VuYW1lIG9mIHRoZSByZXBvc2l0b3J5CisoYWZ0ZXIgcmVtb3ZpbmcgdGhlIC5naXQgc3VmZml4KS4KKworVGhlIG9wY29kZSBhYmJyZXZhdGlvbnMgYXJlOgorCisgIEM6IGNyZWF0ZSBuZXcgcmVmCisgIEQ6IGRlbGV0ZSBleGlzdGluZyByZWYKKyAgVTogZmFzdC1mb3J3YXJkIGV4aXN0aW5nIHJlZiAobm8gY29tbWl0IGxvc3MpCisgIFI6IHJld2luZC9yZWJhc2UgZXhpc3RpbmcgcmVmIChjb21taXQgbG9zcykKKworaWYgbm8gb3Bjb2RlcyBhcmUgbGlzdGVkIGJlZm9yZSB0aGUgImZvciIga2V5d29yZCB0aGVuICJVIiAoZm9yCitmYXN0LWZvcndhcmQgdXBkYXRlIG9ubHkpIGlzIGFzc3VtZWQgYXMgdGhpcyBpcyB0aGUgbW9zdCBjb21tb24KK3VzYWdlLgorCitSZWZuYW1lcyBhcmUgbWF0Y2hlZCBieSBhbHdheXMgYXNzdW1pbmcgYSBwcmVmaXggb2YgInJlZnMvIi4KK1RoaXMgaG9vayBmb3JiaWRzIHB1c2hpbmcgb3IgZGVsZXRpbmcgYW55dGhpbmcgbm90IHVuZGVyICJyZWZzLyIuCisKK1JlZm5hbWVzIHRoYXQgc3RhcnQgd2l0aCBeIGFyZSBQZXJsIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIGFuZCB0aGUgXgoraXMga2VwdCBhcyBwYXJ0IG9mIHRoZSByZWdleHAuICBcXCBpcyBuZWVkZWQgdG8gZ2V0IGp1c3Qgb25lIFwsIHNvCitcXGQgZXhwYW5kcyB0byBcZCBpbiBQZXJsLiAgVGhlIDNyZCBhbGxvdyBsaW5lIGFib3ZlIGlzIGFuIGV4YW1wbGUuCisKK1JlZm5hbWVzIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aCBeIGJ1dCB0aGF0IGVuZCB3aXRoIC8gYXJlIHByZWZpeAorbWF0Y2hlcyAoMm5kIGFsbG93IGxpbmUgYWJvdmUpOyBhbGwgb3RoZXIgcmVmbmFtZXMgYXJlIHN0cmljdAorZXF1YWxpdHkgbWF0Y2hlcyAoMXN0IGFsbG93IGxpbmUpLgorCitBbnl0aGluZyBwdXNoZWQgdG8gImhlYWRzLyIgKG9rLCByZWFsbHkgInJlZnMvaGVhZHMvIikgbXVzdCBiZQorYSBjb21taXQuICBUYWdzIGFyZSBub3QgcGVybWl0dGVkIGhlcmUuCisKK0FueXRoaW5nIHB1c2hlZCB0byAidGFncy8iIChlcnIsIHJlYWxseSAicmVmcy90YWdzLyIpIG11c3QgYmUgYW4KK2Fubm90YXRlZCB0YWcuICBDb21taXRzLCBibG9icywgdHJlZXMsIGV0Yy4gYXJlIG5vdCBwZXJtaXR0ZWQgaGVyZS4KK0Fubm90YXRlZCB0YWcgc2lnbmF0dXJlcyBhcmVuJ3QgY2hlY2tlZCwgbm9yIGFyZSB0aGV5IHJlcXVpcmVkLgorCitUaGUgc3BlY2lhbCBzdWJyZXBvc2l0b3J5IG9mICdpbmZvL25ldy1jb21taXQtY2hlY2snIGNhbgorYmUgY3JlYXRlZCBhbmQgdXNlZCB0byBhbGxvdyB1c2VycyB0byBwdXNoIG5ldyBjb21taXRzIGFuZAordGFncyBmcm9tIGFub3RoZXIgbG9jYWwgcmVwb3NpdG9yeSB0byB0aGlzIG9uZSwgZXZlbiBpZiB0aGV5CithcmVuJ3QgdGhlIGNvbW1pdHRlci90YWdnZXIgb2YgdGhvc2Ugb2JqZWN0cy4gIEluIGEgbnV0IHNoZWxsCit0aGUgaW5mby9uZXctY29tbWl0LWNoZWNrIGRpcmVjdG9yeSBpcyBhIEdpdCByZXBvc2l0b3J5IHdob3NlCitvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyBmaWxlIGxpc3RzIHRoaXMgcmVwb3NpdG9yeSBhbmQgYWxsIG90aGVyCitwb3NzaWJsZSBzb3VyY2VzLCBhbmQgd2hvc2UgcmVmcyBzdWJkaXJlY3RvcnkgY29udGFpbnMgc3ltbGlua3MKK3RvIHRoaXMgcmVwb3NpdG9yeSdzIHJlZnMgc3ViZGlyZWN0b3J5LCBhbmQgdG8gYWxsIG90aGVyIHBvc3NpYmxlCitzb3VyY2VzIHJlZnMgc3ViZGlyZWN0b3JpZXMuICBZZXMsIHRoaXMgbWVhbnMgdGhhdCB5b3UgY2Fubm90Cit1c2UgcGFja2VkLXJlZnMgaW4gdGhvc2UgcmVwb3NpdG9yaWVzIGFzIHRoZXkgd29uJ3QgYmUgcmVzb2x2ZWQKK2NvcnJlY3RseS4KKworPWN1dAorCitteSAkZ2l0X2RpciA9ICRFTlZ7R0lUX0RJUn07CitteSAkbmV3X2NvbW1pdF9jaGVjayA9ICIkZ2l0X2Rpci9pbmZvL25ldy1jb21taXQtY2hlY2siOworbXkgJHJlZiA9ICRBUkdWWzBdOworbXkgJG9sZCA9ICRBUkdWWzFdOworbXkgJG5ldyA9ICRBUkdWWzJdOworbXkgJG5ld190eXBlOworbXkgKCR0aGlzX3VzZXIpID0gZ2V0cHd1aWQgJDw7ICMgUkVBTF9VU0VSX0lECitteSAkcmVwb3NpdG9yeV9uYW1lOworbXkgJXVzZXJfY29tbWl0dGVyOworbXkgQGFsbG93X3J1bGVzOworbXkgQHBhdGhfcnVsZXM7CitteSAlZGlmZl9jYWNoZTsKKworc3ViIGRlbnkgKCQpIHsKKwlwcmludCBTVERFUlIgIi1EZW55LSAgICAkX1swXVxuIiBpZiAkZGVidWc7CisJcHJpbnQgU1RERVJSICJcbmRlbmllZDogJF9bMF1cblxuIjsKKwlleGl0IDE7Cit9CisKK3N1YiBncmFudCAoJCkgeworCXByaW50IFNUREVSUiAiLUdyYW50LSAgICRfWzBdXG4iIGlmICRkZWJ1ZzsKKwlleGl0IDA7Cit9CisKK3N1YiBpbmZvICgkKSB7CisJcHJpbnQgU1RERVJSICItSW5mby0gICAgJF9bMF1cbiIgaWYgJGRlYnVnOworfQorCitzdWIgZ2l0X3ZhbHVlIChAKSB7CisJb3BlbihULCctfCcsJ2dpdCcsQF8pOyBsb2NhbCAkXyA9IDxUPjsgY2hvcDsgY2xvc2UgVDsgJF87Cit9CisKK3N1YiBtYXRjaF9zdHJpbmcgKCQkKSB7CisJbXkgKCRhY2xfbiwgJHJlZikgPSBAXzsKKwkgICAoJGFjbF9uIGVxICRyZWYpCisJfHwgKCRhY2xfbiA9fiBtLC8kLCAmJiBzdWJzdHIoJHJlZiwwLGxlbmd0aCAkYWNsX24pIGVxICRhY2xfbikKKwl8fCAoJGFjbF9uID1+IG0sXlxeLCAmJiAkcmVmID1+IG06JGFjbF9uOik7Cit9CisKK3N1YiBwYXJzZV9jb25maWcgKCQkJCQpIHsKKwlteSAkZGF0YSA9IHNoaWZ0OworCWxvY2FsICRFTlZ7R0lUX0RJUn0gPSBzaGlmdDsKKwlteSAkYnIgPSBzaGlmdDsKKwlteSAkZm4gPSBzaGlmdDsKKwlyZXR1cm4gdW5sZXNzIGdpdF92YWx1ZSgncmV2LWxpc3QnLCctLW1heC1jb3VudD0xJywkYnIsJy0tJywkZm4pOworCWluZm8gIkxvYWRpbmcgJGJyOiRmbiI7CisJb3BlbihJLCctfCcsJ2dpdCcsJ2NhdC1maWxlJywnYmxvYicsIiRicjokZm4iKTsKKwlteSAkc2VjdGlvbiA9ICcnOworCXdoaWxlICg8ST4pIHsKKwkJY2hvbXA7CisJCWlmICgvXlxzKiQvIHx8IC9eXHMqIy8pIHsKKwkJfSBlbHNpZiAoL15cWyhbYS16XSspXF0kL2kpIHsKKwkJCSRzZWN0aW9uID0gbGMgJDE7CisJCX0gZWxzaWYgKC9eXFsoW2Etel0rKVxzKyIoLiopIlxdJC9pKSB7CisJCQkkc2VjdGlvbiA9IGpvaW4oJy4nLGxjICQxLCQyKTsKKwkJfSBlbHNpZiAoL15ccyooW2Etel1bYS16MC05XSspXHMqPVxzKiguKj8pXHMqJC9pKSB7CisJCQlwdXNoIEB7JGRhdGEtPntqb2luKCcuJywkc2VjdGlvbixsYyAkMSl9fSwgJDI7CisJCX0gZWxzZSB7CisJCQlkZW55ICJiYWQgY29uZmlnIGZpbGUgbGluZSAkLiBpbiAkYnI6JGZuIjsKKwkJfQorCX0KKwljbG9zZSBJOworfQorCitzdWIgYWxsX25ld19jb21taXR0ZXJzICgpIHsKKwlsb2NhbCAkRU5We0dJVF9ESVJ9ID0gJGdpdF9kaXI7CisJJEVOVntHSVRfRElSfSA9ICRuZXdfY29tbWl0X2NoZWNrIGlmIC1kICRuZXdfY29tbWl0X2NoZWNrOworCisJaW5mbyAiR2V0dGluZyBjb21taXR0ZXJzIG9mIG5ldyBjb21taXRzLiI7CisJbXkgJXVzZWQ7CisJb3BlbihULCctfCcsJ2dpdCcsJ3Jldi1saXN0JywnLS1wcmV0dHk9cmF3JywkbmV3LCctLW5vdCcsJy0tYWxsJyk7CisJd2hpbGUgKDxUPikgeworCQluZXh0IHVubGVzcyBzL15jb21taXR0ZXIgLy87CisJCWNob3A7CisJCXMvPi4qJC8+LzsKKwkJaW5mbyAiRm91bmQgJF8uIiB1bmxlc3MgJHVzZWR7JF99Kys7CisJfQorCWNsb3NlIFQ7CisJaW5mbyAiTm8gbmV3IGNvbW1pdHMuIiB1bmxlc3MgJXVzZWQ7CisJa2V5cyAldXNlZDsKK30KKworc3ViIGFsbF9uZXdfdGFnZ2VycyAoKSB7CisJbXkgJWV4aXN0czsKKwlvcGVuKFQsJy18JywnZ2l0JywnZm9yLWVhY2gtcmVmJywnLS1mb3JtYXQ9JShvYmplY3RuYW1lKScsJ3JlZnMvdGFncycpOworCXdoaWxlICg8VD4pIHsKKwkJY2hvcDsKKwkJJGV4aXN0c3skX30gPSAxOworCX0KKwljbG9zZSBUOworCisJaW5mbyAiR2V0dGluZyB0YWdnZXJzIG9mIG5ldyB0YWdzLiI7CisJbXkgJXVzZWQ7CisJbXkgJG9iaiA9ICRuZXc7CisJbXkgJG9ial90eXBlID0gJG5ld190eXBlOworCXdoaWxlICgkb2JqX3R5cGUgZXEgJ3RhZycpIHsKKwkJbGFzdCBpZiAkZXhpc3RzeyRvYmp9OworCQkkb2JqX3R5cGUgPSAnJzsKKwkJb3BlbihULCctfCcsJ2dpdCcsJ2NhdC1maWxlJywndGFnJywkb2JqKTsKKwkJd2hpbGUgKDxUPikgeworCQkJY2hvcDsKKwkJCWlmICgvXm9iamVjdCAoW2EtejAtOV17NDB9KSQvKSB7CisJCQkJJG9iaiA9ICQxOworCQkJfSBlbHNpZiAoL150eXBlICguKykkLykgeworCQkJCSRvYmpfdHlwZSA9ICQxOworCQkJfSBlbHNpZiAocy9edGFnZ2VyIC8vKSB7CisJCQkJcy8+LiokLz4vOworCQkJCWluZm8gIkZvdW5kICRfLiIgdW5sZXNzICR1c2VkeyRffSsrOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJY2xvc2UgVDsKKwl9CisJaW5mbyAiTm8gbmV3IHRhZ3MuIiB1bmxlc3MgJXVzZWQ7CisJa2V5cyAldXNlZDsKK30KKworc3ViIGNoZWNrX2NvbW1pdHRlcnMgKEApIHsKKwlteSBAYmFkOworCWZvcmVhY2ggKEBfKSB7IHB1c2ggQGJhZCwgJF8gdW5sZXNzICR1c2VyX2NvbW1pdHRlcnskX307IH0KKwlpZiAoQGJhZCkgeworCQlwcmludCBTVERFUlIgIlxuIjsKKwkJcHJpbnQgU1RERVJSICJZb3UgYXJlIG5vdCAkXy5cbiIgZm9yZWFjaCAoc29ydCBAYmFkKTsKKwkJZGVueSAiWW91IGNhbm5vdCBwdXNoIGNoYW5nZXMgbm90IGNvbW1pdHRlZCBieSB5b3UuIjsKKwl9Cit9CisKK3N1YiBsb2FkX2RpZmYgKCQpIHsKKwlteSAkYmFzZSA9IHNoaWZ0OworCW15ICRkID0gJGRpZmZfY2FjaGV7JGJhc2V9OworCXVubGVzcyAoJGQpIHsKKwkJbG9jYWwgJC8gPSAiXDAiOworCQlteSAldGhpc19kaWZmOworCQlpZiAoJGJhc2UgPX4gL14wezQwfSQvKSB7CisJCQkjIERvbid0IGxvYWQgdGhlIGRpZmYgYXQgYWxsOyB3ZSBhcmUgbWFraW5nIHRoZQorCQkJIyBicmFuY2ggYW5kIGhhdmUgbm8gYmFzZSB0byBjb21wYXJlIHRvIGluIHRoaXMKKwkJCSMgY2FzZS4gIEEgZmlsZSBsZXZlbCBBQ0wgbWFrZXMgbm8gc2Vuc2UgaW4gdGhpcworCQkJIyBjb250ZXh0LiAgSGF2aW5nIGFuIGVtcHR5IGRpZmYgd2lsbCBhbGxvdyB0aGUKKwkJCSMgYnJhbmNoIGNyZWF0aW9uLgorCQkJIworCQl9IGVsc2UgeworCQkJb3BlbihULCctfCcsJ2dpdCcsJ2RpZmYtdHJlZScsCisJCQkJJy1yJywnLS1uYW1lLXN0YXR1cycsJy16JywKKwkJCQkkYmFzZSwkbmV3KSBvciByZXR1cm4gdW5kZWY7CisJCQl3aGlsZSAoPFQ+KSB7CisJCQkJbXkgJG9wID0gJF87CisJCQkJY2hvcCAkb3A7CisKKwkJCQlteSAkcGF0aCA9IDxUPjsKKwkJCQljaG9wICRwYXRoOworCisJCQkJJHRoaXNfZGlmZnskcGF0aH0gPSAkb3A7CisJCQl9CisJCQljbG9zZSBUIG9yIHJldHVybiB1bmRlZjsKKwkJfQorCQkkZCA9IFwldGhpc19kaWZmOworCQkkZGlmZl9jYWNoZXskYmFzZX0gPSAkZDsKKwl9CisJcmV0dXJuICRkOworfQorCitkZW55ICJObyBHSVRfRElSIGluaGVyaXRlZCBmcm9tIGNhbGxlciIgdW5sZXNzICRnaXRfZGlyOworZGVueSAiTmVlZCBhIHJlZiBuYW1lIiB1bmxlc3MgJHJlZjsKK2RlbnkgIlJlZnVzaW5nIGZ1bm55IHJlZiAkcmVmIiB1bmxlc3MgJHJlZiA9fiBzLF5yZWZzLywsOworZGVueSAiQmFkIG9sZCB2YWx1ZSAkb2xkIiB1bmxlc3MgJG9sZCA9fiAvXlthLXowLTldezQwfSQvOworZGVueSAiQmFkIG5ldyB2YWx1ZSAkbmV3IiB1bmxlc3MgJG5ldyA9fiAvXlthLXowLTldezQwfSQvOworZGVueSAiQ2Fubm90IGRldGVybWluZSB3aG8geW91IGFyZS4iIHVubGVzcyAkdGhpc191c2VyOworZ3JhbnQgIk5vIGNoYW5nZSByZXF1ZXN0ZWQuIiBpZiAkb2xkIGVxICRuZXc7CisKKyRyZXBvc2l0b3J5X25hbWUgPSBGaWxlOjpTcGVjLT5yZWwyYWJzKCRnaXRfZGlyKTsKKyRyZXBvc2l0b3J5X25hbWUgPX4gbSwvKFteL10rKSg/OlwuZ2l0fC9cLmdpdCkkLDsKKyRyZXBvc2l0b3J5X25hbWUgPSAkMTsKK2luZm8gIlVwZGF0aW5nIGluICckcmVwb3NpdG9yeV9uYW1lJy4iOworCitteSAkb3A7CitpZiAgICAoJG9sZCA9fiAvXjB7NDB9JC8pIHsgJG9wID0gJ0MnOyB9CitlbHNpZiAoJG5ldyA9fiAvXjB7NDB9JC8pIHsgJG9wID0gJ0QnOyB9CitlbHNlICAgICAgICAgICAgICAgICAgICAgIHsgJG9wID0gJ1InOyB9CisKKyMgVGhpcyBpcyByZWFsbHkgYW4gdXBkYXRlIChmYXN0LWZvcndhcmQpIGlmIHRoZQorIyBtZXJnZSBiYXNlIG9mICRvbGQgYW5kICRuZXcgaXMgJG9sZC4KKyMKKyRvcCA9ICdVJyBpZiAoJG9wIGVxICdSJworCSYmICRyZWYgPX4gbSxeaGVhZHMvLAorCSYmICRvbGQgZXEgZ2l0X3ZhbHVlKCdtZXJnZS1iYXNlJywkb2xkLCRuZXcpKTsKKworIyBMb2FkIHRoZSB1c2VyJ3MgQUNMIGZpbGUuIEV4cGFuZCBncm91cHMgKHVzZXIubWVtYmVyb2YpIG9uZSBsZXZlbC4KK3sKKwlteSAlZGF0YSA9ICgndXNlci5jb21taXR0ZXInID0+IFtdKTsKKwlwYXJzZV9jb25maWcoXCVkYXRhLCRhY2xfZ2l0LCRhY2xfYnJhbmNoLCJleHRlcm5hbC8kcmVwb3NpdG9yeV9uYW1lLmFjbCIpOworCisJJWRhdGEgPSAoCisJCSd1c2VyLmNvbW1pdHRlcicgPT4gJGRhdGF7J3VzZXIuY29tbWl0dGVyJ30sCisJCSd1c2VyLm1lbWJlcm9mJyA9PiBbXSwKKwkpOworCXBhcnNlX2NvbmZpZyhcJWRhdGEsJGFjbF9naXQsJGFjbF9icmFuY2gsInVzZXJzLyR0aGlzX3VzZXIuYWNsIik7CisKKwkldXNlcl9jb21taXR0ZXIgPSBtYXAgeyRfID0+ICRffSBAeyRkYXRheyd1c2VyLmNvbW1pdHRlcid9fTsKKwlteSAkcnVsZV9rZXkgPSAicmVwb3NpdG9yeS4kcmVwb3NpdG9yeV9uYW1lLmFsbG93IjsKKwlteSAkcnVsZXMgPSAkZGF0YXskcnVsZV9rZXl9IHx8IFtdOworCisJZm9yZWFjaCBteSAkZ3JvdXAgKEB7JGRhdGF7J3VzZXIubWVtYmVyb2YnfX0pIHsKKwkJbXkgJWc7CisJCXBhcnNlX2NvbmZpZyhcJWcsJGFjbF9naXQsJGFjbF9icmFuY2gsImdyb3Vwcy8kZ3JvdXAuYWNsIik7CisJCW15ICRncm91cF9ydWxlcyA9ICRneyRydWxlX2tleX07CisJCXB1c2ggQCRydWxlcywgQCRncm91cF9ydWxlcyBpZiAkZ3JvdXBfcnVsZXM7CisJfQorCitSVUxFOgorCWZvcmVhY2ggKEAkcnVsZXMpIHsKKwkJd2hpbGUgKC9cJHt1c2VyXC4oW2Etel1bYS16QS1aMC05XSspfS8pIHsKKwkJCW15ICRrID0gbGMgJDE7CisJCQlteSAkdiA9ICRkYXRheyJ1c2VyLiRrIn07CisJCQluZXh0IFJVTEUgdW5sZXNzIGRlZmluZWQgJHY7CisJCQluZXh0IFJVTEUgaWYgQCR2ICE9IDE7CisJCQluZXh0IFJVTEUgdW5sZXNzIGRlZmluZWQgJHYtPlswXTsKKwkJCXMvXCR7dXNlclwuJGt9LyR2LT5bMF0vZzsKKwkJfQorCisJCWlmICgvXihbQU1EIF0rKVxzK29mXHMrKFteXHNdKylccytmb3JccysoW15cc10rKVxzK2RpZmZccysoW15cc10rKSQvKSB7CisJCQlteSAoJG9wcywgJHB0aCwgJHJlZiwgJGJzdCkgPSAoJDEsICQyLCAkMywgJDQpOworCQkJJG9wcyA9fiBzLyAvL2c7CisJCQkkcHRoID1+IHMvXFxcXC9cXC9nOworCQkJJHJlZiA9fiBzL1xcXFwvXFwvZzsKKwkJCXB1c2ggQHBhdGhfcnVsZXMsIFskb3BzLCAkcHRoLCAkcmVmLCAkYnN0XTsKKwkJfSBlbHNpZiAoL14oW0FNRCBdKylccytvZlxzKyhbXlxzXSspXHMrZm9yXHMrKFteXHNdKykkLykgeworCQkJbXkgKCRvcHMsICRwdGgsICRyZWYpID0gKCQxLCAkMiwgJDMpOworCQkJJG9wcyA9fiBzLyAvL2c7CisJCQkkcHRoID1+IHMvXFxcXC9cXC9nOworCQkJJHJlZiA9fiBzL1xcXFwvXFwvZzsKKwkJCXB1c2ggQHBhdGhfcnVsZXMsIFskb3BzLCAkcHRoLCAkcmVmLCAkb2xkXTsKKwkJfSBlbHNpZiAoL14oW0NEUlUgXSspXHMrZm9yXHMrKFteXHNdKykkLykgeworCQkJbXkgJG9wcyA9ICQxOworCQkJbXkgJHJlZiA9ICQyOworCQkJJG9wcyA9fiBzLyAvL2c7CisJCQkkcmVmID1+IHMvXFxcXC9cXC9nOworCQkJcHVzaCBAYWxsb3dfcnVsZXMsIFskb3BzLCAkcmVmXTsKKwkJfSBlbHNpZiAoL15mb3JccysoW15cc10rKSQvKSB7CisJCQkjIE1lbnRpb25lZCwgYnV0IG5vdGhpbmcgZ3JhbnRlZD8KKwkJfSBlbHNpZiAoL15bXlxzXSskLykgeworCQkJcy9cXFxcL1xcL2c7CisJCQlwdXNoIEBhbGxvd19ydWxlcywgWydVJywgJF9dOworCQl9CisJfQorfQorCitpZiAoJG9wIG5lICdEJykgeworCSRuZXdfdHlwZSA9IGdpdF92YWx1ZSgnY2F0LWZpbGUnLCctdCcsJG5ldyk7CisKKwlpZiAoJHJlZiA9fiBtLF5oZWFkcy8sKSB7CisJCWRlbnkgIiRyZWYgbXVzdCBiZSBhIGNvbW1pdC4iIHVubGVzcyAkbmV3X3R5cGUgZXEgJ2NvbW1pdCc7CisJfSBlbHNpZiAoJHJlZiA9fiBtLF50YWdzLywpIHsKKwkJZGVueSAiJHJlZiBtdXN0IGJlIGFuIGFubm90YXRlZCB0YWcuIiB1bmxlc3MgJG5ld190eXBlIGVxICd0YWcnOworCX0KKworCWNoZWNrX2NvbW1pdHRlcnMgKGFsbF9uZXdfY29tbWl0dGVycyk7CisJY2hlY2tfY29tbWl0dGVycyAoYWxsX25ld190YWdnZXJzKSBpZiAkbmV3X3R5cGUgZXEgJ3RhZyc7Cit9CisKK2luZm8gIiR0aGlzX3VzZXIgd2FudHMgJG9wIGZvciAkcmVmIjsKK2ZvcmVhY2ggbXkgJGFjbF9lbnRyeSAoQGFsbG93X3J1bGVzKSB7CisJbXkgKCRhY2xfb3BzLCAkYWNsX24pID0gQCRhY2xfZW50cnk7CisJbmV4dCB1bmxlc3MgJGFjbF9vcHMgPX4gL15bQ0RSVV0rJC87ICMgVWhoLi4uLiBzaG91bGRuJ3QgaGFwcGVuLgorCW5leHQgdW5sZXNzICRhY2xfbjsKKwluZXh0IHVubGVzcyAkb3AgPX4gL15bJGFjbF9vcHNdJC87CisJbmV4dCB1bmxlc3MgbWF0Y2hfc3RyaW5nICRhY2xfbiwgJHJlZjsKKworCSMgRG9uJ3QgdGVzdCBwYXRoIHJ1bGVzIG9uIGJyYW5jaCBkZWxldGVzLgorCSMKKwlncmFudCAiQWxsb3dlZCBieTogJGFjbF9vcHMgZm9yICRhY2xfbiIgaWYgJG9wIGVxICdEJzsKKworCSMgQWdncmVnYXRlIG1hdGNoaW5nIHBhdGggcnVsZXM7IGFsbG93IGlmIHRoZXJlIGFyZW4ndAorCSMgYW55IG1hdGNoaW5nIHRoaXMgcmVmLgorCSMKKwlteSAlcHI7CisJZm9yZWFjaCBteSAkcF9lbnRyeSAoQHBhdGhfcnVsZXMpIHsKKwkJbXkgKCRwX29wcywgJHBfbiwgJHBfcmVmLCAkcF9ic3QpID0gQCRwX2VudHJ5OworCQluZXh0IHVubGVzcyAkcF9yZWY7CisJCXB1c2ggQHskcHJ7JHBfYnN0fX0sICRwX2VudHJ5IGlmIG1hdGNoX3N0cmluZyAkcF9yZWYsICRyZWY7CisJfQorCWdyYW50ICJBbGxvd2VkIGJ5OiAkYWNsX29wcyBmb3IgJGFjbF9uIiB1bmxlc3MgJXByOworCisJIyBBbGxvdyBvbmx5IGlmIGFsbCBjaGFuZ2VzIGFnYWluc3QgYSBzaW5nbGUgYmFzZSBhcmUKKwkjIGFsbG93ZWQgYnkgZmlsZSBwYXRoIHJ1bGVzLgorCSMKKwlteSBAYmFkOworCWZvcmVhY2ggbXkgJHBfYnN0IChrZXlzICVwcikgeworCQlteSAkZGlmZl9yZWYgPSBsb2FkX2RpZmYgJHBfYnN0OworCQlkZW55ICJDYW5ub3QgZGlmZmVyZW5jZSB0cmVlcy4iIHVubGVzcyByZWYgJGRpZmZfcmVmOworCisJCW15ICVmZCA9ICUkZGlmZl9yZWY7CisJCWZvcmVhY2ggbXkgJHBfZW50cnkgKEB7JHByeyRwX2JzdH19KSB7CisJCQlteSAoJHBfb3BzLCAkcF9uLCAkcF9yZWYsICRwX2JzdCkgPSBAJHBfZW50cnk7CisJCQluZXh0IHVubGVzcyAkcF9vcHMgPX4gL15bQU1EXSskLzsKKwkJCW5leHQgdW5sZXNzICRwX247CisKKwkJCWZvcmVhY2ggbXkgJGZfbiAoa2V5cyAlZmQpIHsKKwkJCQlteSAkZl9vcCA9ICRmZHskZl9ufTsKKwkJCQluZXh0IHVubGVzcyAkZl9vcDsKKwkJCQluZXh0IHVubGVzcyAkZl9vcCA9fiAvXlskcF9vcHNdJC87CisJCQkJZGVsZXRlICRmZHskZl9ufSBpZiBtYXRjaF9zdHJpbmcgJHBfbiwgJGZfbjsKKwkJCX0KKwkJCWxhc3QgdW5sZXNzICVmZDsKKwkJfQorCisJCWlmICglZmQpIHsKKwkJCXB1c2ggQGJhZCwgWyRwX2JzdCwgXCVmZF07CisJCX0gZWxzZSB7CisJCQkjIEFsbCBjaGFuZ2VzIHJlbGF0aXZlIHRvICRwX2JzdCB3ZXJlIGFsbG93ZWQuCisJCQkjCisJCQlncmFudCAiQWxsb3dlZCBieTogJGFjbF9vcHMgZm9yICRhY2xfbiBkaWZmICRwX2JzdCI7CisJCX0KKwl9CisKKwlmb3JlYWNoIG15ICRiYWRfcmVmIChAYmFkKSB7CisJCW15ICgkcF9ic3QsICRmZCkgPSBAJGJhZF9yZWY7CisJCXByaW50IFNUREVSUiAiXG4iOworCQlwcmludCBTVERFUlIgIk5vdCBhbGxvd2VkIHRvIG1ha2UgdGhlIGZvbGxvd2luZyBjaGFuZ2VzOlxuIjsKKwkJcHJpbnQgU1RERVJSICIoYmFzZTogJHBfYnN0KVxuIjsKKwkJZm9yZWFjaCBteSAkZl9uIChzb3J0IGtleXMgJSRmZCkgeworCQkJcHJpbnQgU1RERVJSICIgICRmZC0+eyRmX259ICRmX25cbiI7CisJCX0KKwl9CisJZGVueSAiWW91IGFyZSBub3QgcGVybWl0dGVkIHRvICRvcCAkcmVmIjsKK30KK2Nsb3NlIEE7CitkZW55ICJZb3UgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gJG9wICRyZWYiOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvLmdpdGlnbm9yZSBiL2NvbnRyaWIvbXctdG8tZ2l0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1NDViMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitnaXQtcmVtb3RlLW1lZGlhd2lraQorZ2l0LW13CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC8ucGVybGNyaXRpY3JjIGIvY29udHJpYi9tdy10by1naXQvLnBlcmxjcml0aWNyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTk5NTVkCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvLnBlcmxjcml0aWNyYwpAQCAtMCwwICsxLDI4IEBACisjIFRoZXNlIDMgcnVsZXMgZGVtYW5kIHRvIGFkZCB0aGUgcywgbSBhbmQgeCBmbGFnIHRvICpldmVyeSogcmVnZXhwLiBUaGlzIGlzCisjIG92ZXJraWxsIGFuZCB3b3VsZCBiZSBoYXJtZnVsIGZvciByZWFkYWJpbGl0eS4KK1stUmVndWxhckV4cHJlc3Npb25zOjpSZXF1aXJlRXh0ZW5kZWRGb3JtYXR0aW5nXQorWy1SZWd1bGFyRXhwcmVzc2lvbnM6OlJlcXVpcmVEb3RNYXRjaEFueXRoaW5nXQorWy1SZWd1bGFyRXhwcmVzc2lvbnM6OlJlcXVpcmVMaW5lQm91bmRhcnlNYXRjaGluZ10KKworIyBUaGlzIHJ1bGUgc2F5cyB0aGF0IGJ1aWx0aW4gZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgY2FsbGVkIHdpdGggcGFyZW50aGVzZXMKKyMgZS5nLjogKHRha2VuIGZyb20gQ1BBTidzIGRvY3VtZW50YXRpb24pCisjIG9wZW4oJGhhbmRsZSwgJz4nLCAkZmlsZW5hbWUpOyAjbm90IG9rCisjIG9wZW4gJGhhbmRsZSwgJz4nLCAkZmlsZW5hbWU7ICAjb2sKKyMgQXBwbHlpbmcgc3VjaCBhIHJ1bGUgd291bGQgbWVhbiBtb2RpZnlpbmcgYSBodWdlIG51bWJlciBvZiBsaW5lcyBmb3IgYQorIyBxdWVzdGlvbiBvZiBzdHlsZS4KK1stQ29kZUxheW91dDo6UHJvaGliaXRQYXJlbnNXaXRoQnVpbHRpbnNdCisKKyMgVGhpcyBydWxlIHN0YXRlcyB0aGF0IGVhY2ggc3lzdGVtIGNhbGwgc2hvdWxkIGhhdmUgaXRzIHJldHVybiB2YWx1ZSBjaGVja2VkCisjIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQgaW5jbHVkZXMgdGhlIHByaW50IGNhbGwuIENoZWNraW5nIGV2ZXJ5IHByaW50IGNhbGwncworIyByZXR1cm4gdmFsdWUgd291bGQgYmUgaGFybWZ1bCB0byB0aGUgY29kZSByZWFkYWJpbHR5LgorIyBUaGlzIGNvbmZpZ3VyYXRpb24ga2VlcHMgYWxsIGRlZmF1bHQgZnVuY3Rpb24gYnV0IHByaW50LgorW0lucHV0T3V0cHV0OjpSZXF1aXJlQ2hlY2tlZFN5c2NhbGxzXQorZnVuY3Rpb25zID0gb3BlbiBzYXkgY2xvc2UKKworIyBUaGlzIHJ1bGVzIGRlbWFuZHMgdG8gYWRkIGEgZGVwZW5kYW5jeSBmb3IgdGhlIFJlYWRvbmx5IG1vZHVsZS4gVGhpcyBpcyBub3QKKyMgd2lzaGVkLgorWy1WYWx1ZXNBbmRFeHByZXNzaW9uczo6UHJvaGliaXRDb25zdGFudFByYWdtYV0KKworIyBUaGlzIHJ1bGUgaXMgbm90IHJlYWxseSB1c2VmdWwgKHJhdGhlciBhIHF1ZXN0aW9uIG9mIHN0eWxlKSBhbmQgcHJvZHVjZXMgbWFueQorIyB3YXJuaW5ncyBhbW9uZyB0aGUgY29kZS4KK1stVmFsdWVzQW5kRXhwcmVzc2lvbnM6OlByb2hpYml0Tm9pc3lRdW90ZXNdCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9HaXQvTWVkaWF3aWtpLnBtIGIvY29udHJpYi9tdy10by1naXQvR2l0L01lZGlhd2lraS5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTNjNGRmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvR2l0L01lZGlhd2lraS5wbQpAQCAtMCwwICsxLDEwMCBAQAorcGFja2FnZSBHaXQ6Ok1lZGlhd2lraTsKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSBHaXQ7CisKK0JFR0lOIHsKKworb3VyICgkVkVSU0lPTiwgQElTQSwgQEVYUE9SVCwgQEVYUE9SVF9PSyk7CisKKyMgVG90YWxseSB1bnN0YWJsZSBBUEkuCiskVkVSU0lPTiA9ICcwLjAxJzsKKworcmVxdWlyZSBFeHBvcnRlcjsKKworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQEVYUE9SVCA9ICgpOworCisjIE1ldGhvZHMgd2hpY2ggY2FuIGJlIGNhbGxlZCBhcyBzdGFuZGFsb25lIGZ1bmN0aW9ucyBhcyB3ZWxsOgorQEVYUE9SVF9PSyA9IHF3KGNsZWFuX2ZpbGVuYW1lIHNtdWRnZV9maWxlbmFtZSBjb25uZWN0X21heWJlCisJCQkJRU1QVFkgSFRUUF9DT0RFX09LIEhUVFBfQ09ERV9QQUdFX05PVF9GT1VORCk7Cit9CisKKyMgTWVkaWF3aWtpIGZpbGVuYW1lcyBjYW4gY29udGFpbiBmb3J3YXJkIHNsYXNoZXMuIFRoaXMgdmFyaWFibGUgZGVjaWRlcyBieSB3aGljaCBwYXR0ZXJuIHRoZXkgc2hvdWxkIGJlIHJlcGxhY2VkCit1c2UgY29uc3RhbnQgU0xBU0hfUkVQTEFDRU1FTlQgPT4gJyUyRic7CisKKyMgVXNlZCB0byB0ZXN0IGZvciBlbXB0eSBzdHJpbmdzCit1c2UgY29uc3RhbnQgRU1QVFkgPT4gcXt9OworCisjIEhUVFAgY29kZXMKK3VzZSBjb25zdGFudCBIVFRQX0NPREVfT0sgPT4gMjAwOwordXNlIGNvbnN0YW50IEhUVFBfQ09ERV9QQUdFX05PVF9GT1VORCA9PiA0MDQ7CisKK3N1YiBjbGVhbl9maWxlbmFtZSB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJJGZpbGVuYW1lID1+IHN7QHtbU0xBU0hfUkVQTEFDRU1FTlRdfX17L31nOworCSMgWywgXSwgfCwgeywgYW5kIH0gYXJlIGZvcmJpZGRlbiBieSBNZWRpYVdpa2ksIGV2ZW4gVVJMLWVuY29kZWQuCisJIyBEbyBhIHZhcmlhbnQgb2YgVVJMLWVuY29kaW5nLCBpLmUuIGxvb2tzIGxpa2UgVVJMLWVuY29kaW5nLAorCSMgYnV0IHdpdGggXyBhZGRlZCB0byBwcmV2ZW50IE1lZGlhV2lraSBmcm9tIHRoaW5raW5nIHRoaXMgaXMKKwkjIGFuIGFjdHVhbCBzcGVjaWFsIGNoYXJhY3Rlci4KKwkkZmlsZW5hbWUgPX4gcy9bXFtcXVx7XH1cfF0vc3ByaW50ZigiXyUlXyV4Iiwgb3JkKCQmKSkvZ2U7CisJIyBJZiB3ZSB1c2UgdGhlIHVyaSBlc2NhcGUgYmVmb3JlCisJIyB3ZSBzaG91bGQgdW5lc2NhcGUgaGVyZSwgYmVmb3JlIGFueXRoaW5nCisKKwlyZXR1cm4gJGZpbGVuYW1lOworfQorCitzdWIgc211ZGdlX2ZpbGVuYW1lIHsKKwlteSAkZmlsZW5hbWUgPSBzaGlmdDsKKwkkZmlsZW5hbWUgPX4gc3svfXtAe1tTTEFTSF9SRVBMQUNFTUVOVF19fWc7CisJJGZpbGVuYW1lID1+IHMvIC9fL2c7CisJIyBEZWNvZGUgZm9yYmlkZGVuIGNoYXJhY3RlcnMgZW5jb2RlZCBpbiBjbGVhbl9maWxlbmFtZQorCSRmaWxlbmFtZSA9fiBzL18lXyhbMC05YS1mQS1GXVswLTlhLWZBLUZdKS9zcHJpbnRmKCclYycsIGhleCgkMSkpL2dlOworCXJldHVybiAkZmlsZW5hbWU7Cit9CisKK3N1YiBjb25uZWN0X21heWJlIHsKKwlteSAkd2lraSA9IHNoaWZ0OworCWlmICgkd2lraSkgeworCQlyZXR1cm4gJHdpa2k7CisJfQorCisJbXkgJHJlbW90ZV9uYW1lID0gc2hpZnQ7CisJbXkgJHJlbW90ZV91cmwgPSBzaGlmdDsKKwlteSAoJHdpa2lfbG9naW4sICR3aWtpX3Bhc3N3b3JkLCAkd2lraV9kb21haW4pOworCisJJHdpa2lfbG9naW4gPSBHaXQ6OmNvbmZpZygicmVtb3RlLiR7cmVtb3RlX25hbWV9Lm13TG9naW4iKTsKKwkkd2lraV9wYXNzd29yZCA9IEdpdDo6Y29uZmlnKCJyZW1vdGUuJHtyZW1vdGVfbmFtZX0ubXdQYXNzd29yZCIpOworCSR3aWtpX2RvbWFpbiA9IEdpdDo6Y29uZmlnKCJyZW1vdGUuJHtyZW1vdGVfbmFtZX0ubXdEb21haW4iKTsKKworCSR3aWtpID0gTWVkaWFXaWtpOjpBUEktPm5ldzsKKwkkd2lraS0+e2NvbmZpZ30tPnthcGlfdXJsfSA9ICIke3JlbW90ZV91cmx9L2FwaS5waHAiOworCWlmICgkd2lraV9sb2dpbikgeworCQlteSAlY3JlZGVudGlhbCA9ICgKKwkJCSd1cmwnID0+ICRyZW1vdGVfdXJsLAorCQkJJ3VzZXJuYW1lJyA9PiAkd2lraV9sb2dpbiwKKwkJCSdwYXNzd29yZCcgPT4gJHdpa2lfcGFzc3dvcmQKKwkJKTsKKwkJR2l0OjpjcmVkZW50aWFsKFwlY3JlZGVudGlhbCk7CisJCW15ICRyZXF1ZXN0ID0ge2xnbmFtZSA9PiAkY3JlZGVudGlhbHt1c2VybmFtZX0sCisJCQkgICAgICAgbGdwYXNzd29yZCA9PiAkY3JlZGVudGlhbHtwYXNzd29yZH0sCisJCQkgICAgICAgbGdkb21haW4gPT4gJHdpa2lfZG9tYWlufTsKKwkJaWYgKCR3aWtpLT5sb2dpbigkcmVxdWVzdCkpIHsKKwkJCUdpdDo6Y3JlZGVudGlhbChcJWNyZWRlbnRpYWwsICdhcHByb3ZlJyk7CisJCQlwcmludCB7KlNUREVSUn0gcXEoTG9nZ2VkIGluIG1lZGlhd2lraSB1c2VyICIkY3JlZGVudGlhbHt1c2VybmFtZX0iLlxuKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50IHsqU1RERVJSfSBxcShGYWlsZWQgdG8gbG9nIGluIG1lZGlhd2lraSB1c2VyICIkY3JlZGVudGlhbHt1c2VybmFtZX0iIG9uICR7cmVtb3RlX3VybH1cbik7CisJCQlwcmludCB7KlNUREVSUn0gJyAgKGVycm9yICcgLgorCQkJCSR3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOiAnIC4KKwkJCQkkd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9IC4gIilcbiI7CisJCQlHaXQ6OmNyZWRlbnRpYWwoXCVjcmVkZW50aWFsLCAncmVqZWN0Jyk7CisJCQlleGl0IDE7CisJCX0KKwl9CisKKwlyZXR1cm4gJHdpa2k7Cit9CisKKzE7ICMgRmFtb3VzIGxhc3Qgd29yZHMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L01ha2VmaWxlIGIvY29udHJpYi9tdy10by1naXQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiNmY3YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L01ha2VmaWxlCkBAIC0wLDAgKzEsNTcgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzCisjICAgICBNYXR0aGlldSBNb3kgPE1hdHRoaWV1Lk1veUBpbWFnLmZyPgorIworIyBUbyBidWlsZCBhbmQgdGVzdDoKKyMKKyMgICBtYWtlCisjICAgYmluLXdyYXBwZXIvZ2l0IG13IHByZXZpZXcgU29tZV9wYWdlLm13CisjICAgYmluLXdyYXBwZXIvZ2l0IGNsb25lIG1lZGlhd2lraTo6aHR0cDovL2V4YW1wbGUuY29tL3dpa2kvCisjCisjIFRvIGluc3RhbGwsIHJ1biBHaXQncyB0b3BsZXZlbCAnbWFrZSBpbnN0YWxsJyB0aGVuIHJ1bjoKKyMKKyMgICBtYWtlIGluc3RhbGwKKworR0lUX01FRElBV0lLSV9QTT1HaXQvTWVkaWF3aWtpLnBtCitTQ1JJUFRfUEVSTD1naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsCitTQ1JJUFRfUEVSTCs9Z2l0LW13LnBlcmwKK0dJVF9ST09UX0RJUj0uLi8uLgorSEVSRT1jb250cmliL213LXRvLWdpdC8KKworSU5TVEFMTCA9IGluc3RhbGwKKworU0NSSVBUX1BFUkxfRlVMTD0kKHBhdHN1YnN0ICUsJChIRVJFKS8lLCQoU0NSSVBUX1BFUkwpKQorSU5TVExJQkRJUj0kKHNoZWxsICQoTUFLRSkgLUMgJChHSVRfUk9PVF9ESVIpL3BlcmwgXAorICAgICAgICAgICAgICAgIC1zIC0tbm8tcHJpbnQtZGlyZWN0b3J5IGluc3RsaWJkaXIpCitERVNURElSX1NRID0gJChzdWJzdCAnLCdcJycsJChERVNURElSKSkKK0lOU1RMSUJESVJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKElOU1RMSUJESVIpKQorCithbGw6IGJ1aWxkCisKK3Rlc3Q6IGFsbAorCSQoTUFLRSkgLUMgdAorCitjaGVjazogcGVybGNyaXRpYyB0ZXN0CisKK2luc3RhbGxfcG06CisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKElOU1RMSUJESVJfU1EpL0dpdCcKKwkkKElOU1RBTEwpIC1tIDY0NCAkKEdJVF9NRURJQVdJS0lfUE0pIFwKKwkJJyQoREVTVERJUl9TUSkkKElOU1RMSUJESVJfU1EpLyQoR0lUX01FRElBV0lLSV9QTSknCisKK2J1aWxkOgorCSQoTUFLRSkgLUMgJChHSVRfUk9PVF9ESVIpIFNDUklQVF9QRVJMPSIkKFNDUklQVF9QRVJMX0ZVTEwpIiBcCisgICAgICAgICAgICAgICAgYnVpbGQtcGVybC1zY3JpcHQKKworaW5zdGFsbDogaW5zdGFsbF9wbQorCSQoTUFLRSkgLUMgJChHSVRfUk9PVF9ESVIpIFNDUklQVF9QRVJMPSIkKFNDUklQVF9QRVJMX0ZVTEwpIiBcCisgICAgICAgICAgICAgICAgaW5zdGFsbC1wZXJsLXNjcmlwdAorCitjbGVhbjoKKwkkKE1BS0UpIC1DICQoR0lUX1JPT1RfRElSKSBTQ1JJUFRfUEVSTD0iJChTQ1JJUFRfUEVSTF9GVUxMKSIgXAorICAgICAgICAgICAgICAgIGNsZWFuLXBlcmwtc2NyaXB0CisKK3Blcmxjcml0aWM6CisJcGVybGNyaXRpYyAtNSAkKFNDUklQVF9QRVJMKQorCS1wZXJsY3JpdGljIC0yICQoU0NSSVBUX1BFUkwpCisKKy5QSE9OWTogYWxsIHRlc3QgY2hlY2sgaW5zdGFsbF9wbSBpbnN0YWxsIGNsZWFuIHBlcmxjcml0aWMKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L2Jpbi13cmFwcGVyL2dpdCBiL2NvbnRyaWIvbXctdG8tZ2l0L2Jpbi13cmFwcGVyL2dpdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NjYzYWU1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvYmluLXdyYXBwZXIvZ2l0CkBAIC0wLDAgKzEsMTQgQEAKKyMhL2Jpbi9zaAorCisjIGdpdCBleGVjdXRhYmxlIHdyYXBwZXIgc2NyaXB0IGZvciBHaXQtTWVkaWF3aWtpIHRvIHJ1biB0ZXN0cyB3aXRob3V0CisjIGluc3RhbGxpbmcgYWxsIHRoZSBzY3JpcHRzIGFuZCBwZXJsIHBhY2thZ2VzLgorCitHSVRfUk9PVF9ESVI9Li4vLi4vLi4KK0dJVF9FWEVDX1BBVEg9JChjZCAiJChkaXJuYW1lICIkMCIpIiAmJiBjZCAke0dJVF9ST09UX0RJUn0gJiYgcHdkKQorCitHSVRQRVJMTElCPSIkR0lUX0VYRUNfUEFUSCInL2NvbnRyaWIvbXctdG8tZ2l0JyIke0dJVFBFUkxMSUI6KzokR0lUUEVSTExJQn0iCitQQVRIPSIkR0lUX0VYRUNfUEFUSCInL2NvbnRyaWIvbXctdG8tZ2l0OiciJFBBVEgiCisKK2V4cG9ydCBHSVRQRVJMTElCIFBBVEgKKworZXhlYyAiJHtHSVRfRVhFQ19QQVRIfS9iaW4td3JhcHBlcnMvZ2l0IiAiJEAiCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC9naXQtbXcucGVybCBiL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1tdy5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4ZGYzZWUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC9naXQtbXcucGVybApAQCAtMCwwICsxLDM2OCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgQ29weXJpZ2h0IChDKSAyMDEzCisjICAgICBCZW5vaXQgUGVyc29uIDxiZW5vaXQucGVyc29uQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIENlbGVzdGluIE1hdHRlIDxjZWxlc3Rpbi5tYXR0ZUBlbnNpbWFnLmltYWcuZnI+CisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisjIFNldCBvZiB0b29scyBmb3IgZ2l0IHJlcG8gd2l0aCBhIG1lZGlhd2lraSByZW1vdGUuCisjIERvY3VtZW50YXRpb24gJiBidWd0cmFja2VyOiBodHRwczovL2dpdGh1Yi5jb20vbW95L0dpdC1NZWRpYXdpa2kvCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgVVJJOjpVUkwgcXcodXJsKTsKK3VzZSBMV1A6OlVzZXJBZ2VudDsKK3VzZSBIVE1MOjpUcmVlQnVpbGRlcjsKKwordXNlIEdpdDsKK3VzZSBNZWRpYVdpa2k6OkFQSTsKK3VzZSBHaXQ6Ok1lZGlhd2lraSBxdyhjbGVhbl9maWxlbmFtZSBjb25uZWN0X21heWJlCisJCQkJCUVNUFRZIEhUVFBfQ09ERV9QQUdFX05PVF9GT1VORCk7CisKKyMgQnkgZGVmYXVsdCwgdXNlIFVURi04IHRvIGNvbW11bmljYXRlIHdpdGggR2l0IGFuZCB0aGUgdXNlcgorYmlubW9kZSBTVERFUlIsICc6ZW5jb2RpbmcoVVRGLTgpJzsKK2Jpbm1vZGUgU1RET1VULCAnOmVuY29kaW5nKFVURi04KSc7CisKKyMgR2xvYmFsIHBhcmFtZXRlcnMKK215ICR2ZXJib3NlID0gMDsKK3N1YiB2X3ByaW50IHsKKwlpZiAoJHZlcmJvc2UpIHsKKwkJcmV0dXJuIHByaW50IHsqU1RERVJSfSBAXzsKKwl9CisJcmV0dXJuOworfQorCisjIFByZXZpZXcgcGFyYW1ldGVycworbXkgJGZpbGVfbmFtZSA9IEVNUFRZOworbXkgJHJlbW90ZV9uYW1lID0gRU1QVFk7CitteSAkcHJldmlld19maWxlX25hbWUgPSBFTVBUWTsKK215ICRhdXRvbG9hZCA9IDA7CitzdWIgZmlsZSB7CisJJGZpbGVfbmFtZSA9IHNoaWZ0OworCXJldHVybiAkZmlsZV9uYW1lOworfQorCitteSAlY29tbWFuZHMgPSAoCisJJ2hlbHAnID0+CisJCVtcJmhlbHAsIHt9LCBcJmhlbHBdLAorCSdwcmV2aWV3JyA9PgorCQlbXCZwcmV2aWV3LCB7CisJCQknPD4nID0+IFwmZmlsZSwKKwkJCSdvdXRwdXR8bz1zJyA9PiBcJHByZXZpZXdfZmlsZV9uYW1lLAorCQkJJ3JlbW90ZXxyPXMnID0+IFwkcmVtb3RlX25hbWUsCisJCQknYXV0b2xvYWR8YScgPT4gXCRhdXRvbG9hZAorCQl9LCBcJnByZXZpZXdfaGVscF0KKyk7CisKKyMgU2VhcmNoIGZvciBzdWItY29tbWFuZAorbXkgJGNtZCA9ICRjb21tYW5kc3snaGVscCd9OworZm9yICgwLi5AQVJHVi0xKSB7CisJaWYgKGRlZmluZWQgJGNvbW1hbmRzeyRBUkdWWyRfXX0pIHsKKwkJJGNtZCA9ICRjb21tYW5kc3skQVJHVlskX119OworCQlzcGxpY2UgQEFSR1YsICRfLCAxOworCQlsYXN0OworCX0KK307CitHZXRPcHRpb25zKCAleyRjbWQtPlsxXX0sCisJJ2hlbHB8aCcgPT4gXCZ7JGNtZC0+WzJdfSwKKwkndmVyYm9zZXx2JyAgPT4gXCR2ZXJib3NlKTsKKworIyBMYXVuY2ggY29tbWFuZAorJnskY21kLT5bMF19OworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBQcmV2aWV3IEZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzdWIgcHJldmlld19oZWxwIHsKKwlwcmludCB7KlNURE9VVH0gPDwnRU5EJzsKK1VTQUdFOiBnaXQgbXcgcHJldmlldyBbLS1yZW1vdGV8LXIgPHJlbW90ZSBuYW1lPl0gWy0tYXV0b2xvYWR8LWFdCisgICAgICAgICAgICAgICAgICAgICAgWy0tb3V0cHV0fC1vIDxvdXRwdXQgZmlsZW5hbWU+XSBbLS12ZXJib3NlfC12XQorICAgICAgICAgICAgICAgICAgICAgIDxibG9iPiB8IDxmaWxlbmFtZT4KKworREVTQ1JJUFRJT046CitQcmV2aWV3IGlzIGFuIHV0aWxpeSB0byBwcmV2aWV3IGxvY2FsIGNvbnRlbnQgb2YgYSBtZWRpYXdpa2kgcmVwbyBhcyBpZiBpdCB3YXMKK3B1c2hlZCBvbiB0aGUgcmVtb3RlLgorCitGb3IgdGhhdCwgcHJldmlldyBzZWFyY2hlcyBmb3IgdGhlIHJlbW90ZSBuYW1lIG9mIHRoZSBjdXJyZW50IGJyYW5jaCdzCit1cHN0cmVhbSBpZiAtLXJlbW90ZSBpcyBub3Qgc2V0LiBJZiB0aGF0IHJlbW90ZSBpcyBub3QgZm91bmQgb3IgaWYgaXQKK2lzIG5vdCBhIG1lZGlhd2lraSwgaXQgbGlzdHMgYWxsIG1lZGlhd2lraSByZW1vdGVzIGNvbmZpZ3VyZWQgYW5kIGFza3MKK3lvdSB0byByZXBsYXkgeW91ciBjb21tYW5kIHdpdGggdGhlIC0tcmVtb3RlIG9wdGlvbiBzZXQgcHJvcGVybHkuCisKK1RoZW4sIGl0IHNlYXJjaGVzIGZvciBhIGZpbGUgbmFtZWQgJ2ZpbGVuYW1lJy4gSWYgaXQncyBub3QgZm91bmQgaW4KK3RoZSBjdXJyZW50IGRpciwgaXQgd2lsbCBhc3N1bWUgaXQncyBhIGJsb2IuCisKK1RoZSBjb250ZW50IHJldHJpZXZlZCBpbiB0aGUgZmlsZSAob3IgaW4gdGhlIGJsb2IpIHdpbGwgdGhlbiBiZSBwYXJzZWQKK2J5IHRoZSByZW1vdGUgbWVkaWF3aWtpIGFuZCBjb21iaW5lZCB3aXRoIGEgdGVtcGxhdGUgcmV0cmlldmVkIGZyb20KK3RoZSBtZWRpYXdpa2kuCisKK0ZpbmFsbHksIHByZXZpZXcgd2lsbCBzYXZlIHRoZSBIVE1MIHJlc3VsdCBpbiBhIGZpbGUuIGFuZCBhdXRvbG9hZCBpdAoraW4geW91ciBkZWZhdWx0IHdlYiBicm93c2VyIGlmIHRoZSBvcHRpb24gLS1hdXRvbG9hZCBpcyBwcmVzZW50LgorCitPUFRJT05TOgorICAgIC1yIDxyZW1vdGUgbmFtZT4sIC0tcmVtb3RlIDxyZW1vdGUgbmFtZT4KKyAgICAgICAgSWYgdGhlIHJlbW90ZSBpcyBhIG1lZGlhd2lraSwgdGhlIHRlbXBsYXRlIGFuZCB0aGUgcGFyc2UgZW5naW5lCisgICAgICAgIHVzZWQgZm9yIHRoZSBwcmV2aWV3IHdpbGwgYmUgdGhvc2Ugb2YgdGhhdCByZW1vdGUuCisgICAgICAgIElmIG5vdCwgYSBsaXN0IG9mIHZhbGlkIHJlbW90ZXMgd2lsbCBiZSBzaG93bi4KKworICAgIC1hLCAtLWF1dG9sb2FkCisgICAgICAgIFRyeSB0byBsb2FkIHRoZSBIVE1MIG91dHB1dCBpbiBhIG5ldyB0YWIgKG9yIG5ldyB3aW5kb3cpIG9mIHlvdXIKKyAgICAgICAgZGVmYXVsdCB3ZWIgYnJvd3Nlci4KKworICAgIC1vIDxvdXRwdXQgZmlsZW5hbWU+LCAtLW91dHB1dCA8b3V0cHV0IGZpbGVuYW1lPgorICAgICAgICBDaGFuZ2UgdGhlIEhUTUwgb3V0cHV0IGZpbGVuYW1lLiBEZWZhdWx0IGZpbGVuYW1lIGlzIGJhc2VkIG9uIHRoZQorICAgICAgICBpbnB1dCBmaWxlbmFtZSB3aXRoIGl0cyBleHRlbnNpb24gcmVwbGFjZWQgYnkgJy5odG1sJy4KKworICAgIC12LCAtLXZlcmJvc2UKKyAgICAgICAgU2hvdyBtb3JlIGluZm9ybWF0aW9uIG9uIHdoYXQncyBnb2luZyBvbiB1bmRlciB0aGUgaG9vZC4KK0VORAorCWV4aXQ7Cit9CisKK3N1YiBwcmV2aWV3IHsKKwlteSAkd2lraTsKKwlteSAoJHJlbW90ZV91cmwsICR3aWtpX3BhZ2VfbmFtZSk7CisJbXkgKCRuZXdfY29udGVudCwgJHRlbXBsYXRlKTsKKwlteSAkZmlsZV9jb250ZW50OworCisJaWYgKCRmaWxlX25hbWUgZXEgRU1QVFkpIHsKKwkJZGllICJNaXNzaW5nIGZpbGUgYXJndW1lbnQsIHNlZSBgZ2l0IG13IGhlbHBgXG4iOworCX0KKworCXZfcHJpbnQoIiMjIyBTZWxlY3RpbmcgcmVtb3RlXG4iKTsKKwlpZiAoJHJlbW90ZV9uYW1lIGVxIEVNUFRZKSB7CisJCSRyZW1vdGVfbmFtZSA9IGZpbmRfdXBzdHJlYW1fcmVtb3RlX25hbWUoKTsKKwkJaWYgKCRyZW1vdGVfbmFtZSkgeworCQkJJHJlbW90ZV91cmwgPSBtZWRpYXdpa2lfcmVtb3RlX3VybF9tYXliZSgkcmVtb3RlX25hbWUpOworCQl9CisKKwkJaWYgKCEgJHJlbW90ZV91cmwpIHsKKwkJCW15IEB2YWxpZF9yZW1vdGVzID0gZmluZF9tZWRpYXdpa2lfcmVtb3RlcygpOworCisJCQlpZiAoJCN2YWxpZF9yZW1vdGVzID09IDApIHsKKwkJCQlwcmludCB7KlNUREVSUn0gIk5vIG1lZGlhd2lraSByZW1vdGUgaW4gdGhpcyByZXBvLiBcbiI7CisJCQkJZXhpdCAxOworCQkJfSBlbHNlIHsKKwkJCQlteSAkcmVtb3Rlc19saXN0ID0gam9pbigiXG5cdCIsIEB2YWxpZF9yZW1vdGVzKTsKKwkJCQlwcmludCB7KlNUREVSUn0gPDwiTUVTU0FHRSI7CitUaGVyZSBhcmUgbXVsdGlwbGUgbWVkaWF3aWtpIHJlbW90ZXMsIHdoaWNoIG9mOgorCSR7cmVtb3Rlc19saXN0fQorZG8geW91IHdhbnQgPyBVc2UgdGhlIC1yIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSByZW1vdGUuCitNRVNTQUdFCisJCQl9CisKKwkJCWV4aXQgMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghaXNfdmFsaWRfcmVtb3RlKCRyZW1vdGVfbmFtZSkpIHsKKwkJCWRpZSAiJHtyZW1vdGVfbmFtZX0gaXMgbm90IGEgcmVtb3RlXG4iOworCQl9CisKKwkJJHJlbW90ZV91cmwgPSBtZWRpYXdpa2lfcmVtb3RlX3VybF9tYXliZSgkcmVtb3RlX25hbWUpOworCQlpZiAoISAkcmVtb3RlX3VybCkgeworCQkJZGllICIke3JlbW90ZV9uYW1lfSBpcyBub3QgYSBtZWRpYXdpa2kgcmVtb3RlXG4iOworCQl9CisJfQorCXZfcHJpbnQoInNlbGVjdGVkIHJlbW90ZTpcblx0bmFtZTogJHtyZW1vdGVfbmFtZX1cblx0dXJsOiAke3JlbW90ZV91cmx9XG4iKTsKKworCSR3aWtpID0gY29ubmVjdF9tYXliZSgkd2lraSwgJHJlbW90ZV9uYW1lLCAkcmVtb3RlX3VybCk7CisKKwkjIFJlYWQgZmlsZSBjb250ZW50CisJaWYgKCEgLWUgJGZpbGVfbmFtZSkgeworCQkkZmlsZV9jb250ZW50ID0gZ2l0X2NtZF90cnkgeworCQkJR2l0Ojpjb21tYW5kKCdjYXQtZmlsZScsICdibG9iJywgJGZpbGVfbmFtZSk7IH0KKwkJCSIlcyBmYWlsZWQgdy8gY29kZSAlZCI7CisKKwkJaWYgKCRmaWxlX25hbWUgPX4gLyguKyk6KC4rKS8pIHsKKwkJCSRmaWxlX25hbWUgPSAkMjsKKwkJfQorCX0gZWxzZSB7CisJCW9wZW4gbXkgJHJlYWRfZmgsICI8IiwgJGZpbGVfbmFtZQorCQkJb3IgZGllICJjb3VsZCBub3Qgb3BlbiAke2ZpbGVfbmFtZX06ICQhXG4iOworCQkkZmlsZV9jb250ZW50ID0gZG8geyBsb2NhbCAkLyA9IHVuZGVmOyA8JHJlYWRfZmg+IH07CisJCWNsb3NlICRyZWFkX2ZoCisJCQlvciBkaWUgInVuYWJsZSB0byBjbG9zZTogJCFcbiI7CisJfQorCisJdl9wcmludCgiIyMjIFJldHJpZXZpbmcgdGVtcGxhdGVcbiIpOworCSgkd2lraV9wYWdlX25hbWUgPSBjbGVhbl9maWxlbmFtZSgkZmlsZV9uYW1lKSkgPX4gcy9cLlteLl0rJC8vOworCSR0ZW1wbGF0ZSA9IGdldF90ZW1wbGF0ZSgkcmVtb3RlX3VybCwgJHdpa2lfcGFnZV9uYW1lKTsKKworCXZfcHJpbnQoIiMjIyBQYXJzaW5nIGxvY2FsIGNvbnRlbnRcbiIpOworCSRuZXdfY29udGVudCA9ICR3aWtpLT5hcGkoeworCQlhY3Rpb24gPT4gJ3BhcnNlJywKKwkJdGV4dCA9PiAkZmlsZV9jb250ZW50LAorCQl0aXRsZSA9PiAkd2lraV9wYWdlX25hbWUKKwl9LCB7CisJCXNraXBfZW5jb2RpbmcgPT4gMQorCX0pIG9yIGRpZSAiTm8gcmVzcG9uc2UgZnJvbSByZW1vdGUgbWVkaWF3aWtpXG4iOworCSRuZXdfY29udGVudCA9ICRuZXdfY29udGVudC0+eydwYXJzZSd9LT57J3RleHQnfS0+eycqJ307CisKKwl2X3ByaW50KCIjIyMgTWVyZ2luZyBjb250ZW50c1xuIik7CisJaWYgKCRwcmV2aWV3X2ZpbGVfbmFtZSBlcSBFTVBUWSkgeworCQkoJHByZXZpZXdfZmlsZV9uYW1lID0gJGZpbGVfbmFtZSkgPX4gcy9cLlteLl0rJC8uaHRtbC87CisJfQorCW9wZW4obXkgJHNhdmVfZmgsICc+OmVuY29kaW5nKFVURi04KScsICRwcmV2aWV3X2ZpbGVfbmFtZSkKKwkJb3IgZGllICJDb3VsZCBub3Qgb3BlbjogJCFcbiI7CisJcHJpbnQgeyRzYXZlX2ZofSBtZXJnZV9jb250ZW50cygkdGVtcGxhdGUsICRuZXdfY29udGVudCwgJHJlbW90ZV91cmwpOworCWNsb3NlKCRzYXZlX2ZoKQorCQlvciBkaWUgIkNvdWxkIG5vdCBjbG9zZTogJCFcbiI7CisKKwl2X3ByaW50KCIjIyMgUmVzdWx0c1xuIik7CisJaWYgKCRhdXRvbG9hZCkgeworCQl2X3ByaW50KCJMYXVuY2hpbmcgYnJvd3NlciB3LyBmaWxlOiAke3ByZXZpZXdfZmlsZV9uYW1lfSIpOworCQlzeXN0ZW0oJ2dpdCcsICd3ZWItLWJyb3dzZScsICRwcmV2aWV3X2ZpbGVfbmFtZSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJQcmV2aWV3IGZpbGUgc2F2ZWQgYXM6ICR7cHJldmlld19maWxlX25hbWV9XG4iOworCX0KKworCWV4aXQ7Cit9CisKKyMgdXNlcyBnbG9iYWwgc2NvcGUgdmFyaWFibGU6ICRyZW1vdGVfbmFtZQorc3ViIG1lcmdlX2NvbnRlbnRzIHsKKwlteSAkdGVtcGxhdGUgPSBzaGlmdDsKKwlteSAkY29udGVudCA9IHNoaWZ0OworCW15ICRyZW1vdGVfdXJsID0gc2hpZnQ7CisJbXkgKCRjb250ZW50X3RyZWUsICRodG1sX3RyZWUsICRtd19jb250ZW50X3RleHQpOworCW15ICR0ZW1wbGF0ZV9jb250ZW50X2lkID0gJ2JvZHlDb250ZW50JzsKKworCSRodG1sX3RyZWUgPSBIVE1MOjpUcmVlQnVpbGRlci0+bmV3OworCSRodG1sX3RyZWUtPnBhcnNlKCR0ZW1wbGF0ZSk7CisKKwkkY29udGVudF90cmVlID0gSFRNTDo6VHJlZUJ1aWxkZXItPm5ldzsKKwkkY29udGVudF90cmVlLT5wYXJzZSgkY29udGVudCk7CisKKwkkdGVtcGxhdGVfY29udGVudF9pZCA9IEdpdDo6Y29uZmlnKCJyZW1vdGUuJHtyZW1vdGVfbmFtZX0ubXdJRGNvbnRlbnQiKQorCQl8fCAkdGVtcGxhdGVfY29udGVudF9pZDsKKwl2X3ByaW50KCJVc2luZyAnJHt0ZW1wbGF0ZV9jb250ZW50X2lkfScgYXMgdGhlIGNvbnRlbnQgSURcbiIpOworCisJJG13X2NvbnRlbnRfdGV4dCA9ICRodG1sX3RyZWUtPmxvb2tfZG93bignaWQnLCAkdGVtcGxhdGVfY29udGVudF9pZCk7CisJaWYgKCFkZWZpbmVkICRtd19jb250ZW50X3RleHQpIHsKKwkJcHJpbnQgeypTVERFUlJ9IDw8IkNPTkZJRyI7CitDb3VsZCBub3QgY29tYmluZSB0aGUgbmV3IGNvbnRlbnQgd2l0aCB0aGUgdGVtcGxhdGUuIFlvdSBtaWdodCB3YW50IHRvCitjb25maWd1cmUgYG1lZGlhd2lraS5JRENvbnRlbnRgIGluIHlvdXIgY29uZmlnOgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLiR7cmVtb3RlX25hbWV9Lm13SURjb250ZW50IDxpZD4KK2FuZCByZS1ydW4gdGhlIGNvbW1hbmQgYWZ0ZXJ3YXJkLgorQ09ORklHCisJCWV4aXQgMTsKKwl9CisJJG13X2NvbnRlbnRfdGV4dC0+ZGVsZXRlX2NvbnRlbnQoKTsKKwkkbXdfY29udGVudF90ZXh0LT5wdXNoX2NvbnRlbnQoJGNvbnRlbnRfdHJlZSk7CisKKwltYWtlX2xpbmtzX2Fic29sdXRlKCRodG1sX3RyZWUsICRyZW1vdGVfdXJsKTsKKworCXJldHVybiAkaHRtbF90cmVlLT5hc19IVE1MOworfQorCitzdWIgbWFrZV9saW5rc19hYnNvbHV0ZSB7CisJbXkgJGh0bWxfdHJlZSA9IHNoaWZ0OworCW15ICRyZW1vdGVfdXJsID0gc2hpZnQ7CisJZm9yIChAeyAkaHRtbF90cmVlLT5leHRyYWN0X2xpbmtzKCkgfSkgeworCQlteSAoJGxpbmssICRlbGVtZW50LCAkYXR0cikgPSBAeyAkXyB9OworCQlteSAkdXJsID0gdXJsKCRsaW5rKS0+Y2Fub25pY2FsOworCQlpZiAoJHVybCAhfiAvIy8pIHsKKwkJCSRlbGVtZW50LT5hdHRyKCRhdHRyLCBVUkktPm5ld19hYnMoJHVybCwgJHJlbW90ZV91cmwpKTsKKwkJfQorCX0KKwlyZXR1cm4gJGh0bWxfdHJlZTsKK30KKworc3ViIGlzX3ZhbGlkX3JlbW90ZSB7CisJbXkgJHJlbW90ZSA9IHNoaWZ0OworCW15IEByZW1vdGVzID0gZ2l0X2NtZF90cnkgeworCQlHaXQ6OmNvbW1hbmQoJ3JlbW90ZScpIH0KKwkJIiVzIGZhaWxlZCB3LyBjb2RlICVkIjsKKwlteSAkZm91bmRfcmVtb3RlID0gMDsKKwlmb3JlYWNoIG15ICRyZW1vdGUgKEByZW1vdGVzKSB7CisJCWlmICgkcmVtb3RlIGVxICRyZW1vdGUpIHsKKwkJCSRmb3VuZF9yZW1vdGUgPSAxOworCQkJbGFzdDsKKwkJfQorCX0KKwlyZXR1cm4gJGZvdW5kX3JlbW90ZTsKK30KKworc3ViIGZpbmRfbWVkaWF3aWtpX3JlbW90ZXMgeworCW15IEByZW1vdGVzID0gZ2l0X2NtZF90cnkgeworCQlHaXQ6OmNvbW1hbmQoJ3JlbW90ZScpOyB9CisJCSIlcyBmYWlsZWQgdy8gY29kZSAlZCI7CisJbXkgJHJlbW90ZV91cmw7CisJbXkgQHZhbGlkX3JlbW90ZXMgPSAoKTsKKwlmb3JlYWNoIG15ICRyZW1vdGUgKEByZW1vdGVzKSB7CisJCSRyZW1vdGVfdXJsID0gbWVkaWF3aWtpX3JlbW90ZV91cmxfbWF5YmUoJHJlbW90ZSk7CisJCWlmICgkcmVtb3RlX3VybCkgeworCQkJcHVzaChAdmFsaWRfcmVtb3RlcywgJHJlbW90ZSk7CisJCX0KKwl9CisJcmV0dXJuIEB2YWxpZF9yZW1vdGVzOworfQorCitzdWIgZmluZF91cHN0cmVhbV9yZW1vdGVfbmFtZSB7CisJbXkgJGN1cnJlbnRfYnJhbmNoID0gZ2l0X2NtZF90cnkgeworCQlHaXQ6OmNvbW1hbmRfb25lbGluZSgnc3ltYm9saWMtcmVmJywgJy0tc2hvcnQnLCAnSEVBRCcpIH0KKwkJIiVzIGZhaWxlZCB3LyBjb2RlICVkIjsKKwlyZXR1cm4gR2l0Ojpjb25maWcoImJyYW5jaC4ke2N1cnJlbnRfYnJhbmNofS5yZW1vdGUiKTsKK30KKworc3ViIG1lZGlhd2lraV9yZW1vdGVfdXJsX21heWJlIHsKKwlteSAkcmVtb3RlID0gc2hpZnQ7CisKKwkjIEZpbmQgcmVtb3RlIHVybAorCW15ICRyZW1vdGVfdXJsID0gR2l0Ojpjb25maWcoInJlbW90ZS4ke3JlbW90ZX0udXJsIik7CisJaWYgKCRyZW1vdGVfdXJsID1+IHMvbWVkaWF3aWtpOjooLiopLyQxLykgeworCQlyZXR1cm4gdXJsKCRyZW1vdGVfdXJsKS0+Y2Fub25pY2FsOworCX0KKworCXJldHVybjsKK30KKworc3ViIGdldF90ZW1wbGF0ZSB7CisJbXkgJHVybCA9IHNoaWZ0OworCW15ICRwYWdlX25hbWUgPSBzaGlmdDsKKwlteSAoJHJlcSwgJHJlcywgJGNvZGUsICR1cmxfYWZ0ZXIpOworCisJJHJlcSA9IExXUDo6VXNlckFnZW50LT5uZXc7CisJaWYgKCR2ZXJib3NlKSB7CisJCSRyZXEtPnNob3dfcHJvZ3Jlc3MoMSk7CisJfQorCisJJHJlcyA9ICRyZXEtPmdldCgiJHt1cmx9L2luZGV4LnBocD90aXRsZT0ke3BhZ2VfbmFtZX0iKTsKKwlpZiAoISRyZXMtPmlzX3N1Y2Nlc3MpIHsKKwkJJGNvZGUgPSAkcmVzLT5jb2RlOworCQkkdXJsX2FmdGVyID0gJHJlcy0+cmVxdWVzdCgpLT51cmkoKTsgIyByZXNvbHZlIGFsbCByZWRpcmVjdGlvbnMKKwkJaWYgKCRjb2RlID09IEhUVFBfQ09ERV9QQUdFX05PVF9GT1VORCkgeworCQkJaWYgKCR2ZXJib3NlKSB7CisJCQkJcHJpbnQgeypTVERFUlJ9IDw8IldBUk5JTkciOworV2FybmluZzogRmFpbGVkIHRvIHJldHJpZXZlICckcGFnZV9uYW1lJy4gQ3JlYXRlIGl0IG9uIHRoZSBtZWRpYXdpa2kgaWYgeW91IHdhbnQKK2FsbCB0aGUgbGlua3MgdG8gd29yayBwcm9wZXJseS4KK1RyeWluZyB0byB1c2UgdGhlIG1lZGlhd2lraSBob21lcGFnZSBhcyBhIGZhbGxiYWNrIHRlbXBsYXRlIC4uLgorV0FSTklORworCQkJfQorCisJCQkjIExXUCBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0cyBHRVQgcmVxdWVzdAorCQkJJHJlcyA9ICRyZXEtPmdldCgiJHt1cmx9L2luZGV4LnBocCIpOworCQkJaWYgKCEkcmVzLT5pc19zdWNjZXNzKSB7CisJCQkJJHVybF9hZnRlciA9ICRyZXMtPnJlcXVlc3QoKS0+dXJpKCk7ICMgcmVzb2x2ZSBhbGwgcmVkaXJlY3Rpb25zCisJCQkJZGllICJGYWlsZWQgdG8gZ2V0IGhvbWVwYWdlIEAgJHt1cmxfYWZ0ZXJ9IHcvIGNvZGUgJHtjb2RlfVxuIjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWRpZSAiRmFpbGVkIHRvIGdldCAnJHtwYWdlX25hbWV9JyBAICR7dXJsX2FmdGVyfSB3LyBjb2RlICR7Y29kZX1cbiI7CisJCX0KKwl9CisKKwlyZXR1cm4gJHJlcy0+ZGVjb2RlZF9jb250ZW50OworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgSGVscCBGdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzdWIgaGVscCB7CisJcHJpbnQgeypTVERPVVR9IDw8J0VORCc7Cit1c2FnZTogZ2l0IG13IDxjb21tYW5kPiA8YXJncz4KKworZ2l0IG13IGNvbW1hbmRzIGFyZToKKyAgICBoZWxwICAgICAgICBEaXNwbGF5IGhlbHAgaW5mb3JtYXRpb24gYWJvdXQgZ2l0IG13CisgICAgcHJldmlldyAgICAgUGFyc2UgYW5kIHJlbmRlciBsb2NhbCBmaWxlIGludG8gSFRNTAorRU5ECisJZXhpdDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnBlcmwgYi9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhkZDc0YTkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC9naXQtcmVtb3RlLW1lZGlhd2lraS5wZXJsCkBAIC0wLDAgKzEsMTMzOCBAQAorIyEgL3Vzci9iaW4vcGVybAorCisjIENvcHlyaWdodCAoQykgMjAxMQorIyAgICAgSsOpcsOpbWllIE5pa2FlcyA8amVyZW1pZS5uaWthZXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgQXJuYXVkIExhY3VyaWUgPGFybmF1ZC5sYWN1cmllQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIENsYWlyZSBGb3Vzc2UgPGNsYWlyZS5mb3Vzc2VAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgRGF2aWQgQW1vdXlhbCA8ZGF2aWQuYW1vdXlhbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBNYXR0aGlldSBNb3kgPG1hdHRoaWV1Lm1veUBncmVub2JsZS1pbnAuZnI+CisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisjIEdhdGV3YXkgYmV0d2VlbiBHaXQgYW5kIE1lZGlhV2lraS4KKyMgRG9jdW1lbnRhdGlvbiAmIGJ1Z3RyYWNrZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3kvR2l0LU1lZGlhd2lraS8KKwordXNlIHN0cmljdDsKK3VzZSBNZWRpYVdpa2k6OkFQSTsKK3VzZSBHaXQ7Cit1c2UgR2l0OjpNZWRpYXdpa2kgcXcoY2xlYW5fZmlsZW5hbWUgc211ZGdlX2ZpbGVuYW1lIGNvbm5lY3RfbWF5YmUKKwkJCQkJRU1QVFkgSFRUUF9DT0RFX09LKTsKK3VzZSBEYXRlVGltZTo6Rm9ybWF0OjpJU084NjAxOwordXNlIHdhcm5pbmdzOworCisjIEJ5IGRlZmF1bHQsIHVzZSBVVEYtOCB0byBjb21tdW5pY2F0ZSB3aXRoIEdpdCBhbmQgdGhlIHVzZXIKK2Jpbm1vZGUgU1RERVJSLCAnOmVuY29kaW5nKFVURi04KSc7CitiaW5tb2RlIFNURE9VVCwgJzplbmNvZGluZyhVVEYtOCknOworCit1c2UgVVJJOjpFc2NhcGU7CisKKyMgSXQncyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRlbGV0ZSBwYWdlcyAobWF5IHJlcXVpcmUgc29tZQorIyBwcml2aWxlZ2VzKS4gRGVsZXRlZCBwYWdlcyBhcmUgcmVwbGFjZWQgd2l0aCB0aGlzIGNvbnRlbnQuCit1c2UgY29uc3RhbnQgREVMRVRFRF9DT05URU5UID0+ICJbW0NhdGVnb3J5OkRlbGV0ZWRdXVxuIjsKKworIyBJdCdzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgZW1wdHkgcGFnZXMuIE5ldyBlbXB0eSBmaWxlcyBpbiBHaXQgYXJlCisjIHNlbnQgd2l0aCB0aGlzIGNvbnRlbnQgaW5zdGVhZC4KK3VzZSBjb25zdGFudCBFTVBUWV9DT05URU5UID0+ICI8IS0tIGVtcHR5IHBhZ2UgLS0+XG4iOworCisjIHVzZWQgdG8gcmVmbGVjdCBmaWxlIGNyZWF0aW9uIG9yIGRlbGV0aW9uIGluIGRpZmYuCit1c2UgY29uc3RhbnQgTlVMTF9TSEExID0+ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJzsKKworIyBVc2VkIG9uIEdpdCdzIHNpZGUgdG8gcmVmbGVjdCBlbXB0eSBlZGl0IG1lc3NhZ2VzIG9uIHRoZSB3aWtpCit1c2UgY29uc3RhbnQgRU1QVFlfTUVTU0FHRSA9PiAnKkVtcHR5IE1lZGlhV2lraSBNZXNzYWdlKic7CisKKyMgTnVtYmVyIG9mIHBhZ2VzIHRha2VuIGludG8gYWNjb3VudCBhdCBvbmNlIGluIHN1Ym1vZHVsZSBnZXRfbXdfcGFnZV9saXN0Cit1c2UgY29uc3RhbnQgU0xJQ0VfU0laRSA9PiA1MDsKKworIyBOdW1iZXIgb2YgbGlua2VkIG1lZGlhZmlsZSB0byBnZXQgYXQgb25jZSBpbiBnZXRfbGlua2VkX21lZGlhZmlsZXMKKyMgVGhlIHF1ZXJ5IGlzIHNwbGl0IGluIHNtYWxsIGJhdGNoZXMgYmVjYXVzZSBvZiB0aGUgTVcgQVBJIGxpbWl0IG9mCisjIHRoZSBudW1iZXIgb2YgbGlua3MgdG8gYmUgcmV0dXJuZWQgKDUwMCBsaW5rcyBtYXgpLgordXNlIGNvbnN0YW50IEJBVENIX1NJWkUgPT4gMTA7CisKK2lmIChAQVJHViAhPSAyKSB7CisJZXhpdF9lcnJvcl91c2FnZSgpOworfQorCitteSAkcmVtb3RlbmFtZSA9ICRBUkdWWzBdOworbXkgJHVybCA9ICRBUkdWWzFdOworCisjIEFjY2VwdCBib3RoIHNwYWNlLXNlcGFyYXRlZCBhbmQgbXVsdGlwbGUga2V5cyBpbiBjb25maWcgZmlsZS4KKyMgU3BhY2VzIHNob3VsZCBiZSB3cml0dGVuIGFzIF8gYW55d2F5IGJlY2F1c2Ugd2UnbGwgdXNlIGNob21wLgorbXkgQHRyYWNrZWRfcGFnZXMgPSBzcGxpdCgvWyBcbl0vLCBydW5fZ2l0KCJjb25maWcgLS1nZXQtYWxsIHJlbW90ZS4ke3JlbW90ZW5hbWV9LnBhZ2VzIikpOworY2hvbXAoQHRyYWNrZWRfcGFnZXMpOworCisjIEp1c3QgbGlrZSBAdHJhY2tlZF9wYWdlcywgYnV0IGZvciBNZWRpYVdpa2kgY2F0ZWdvcmllcy4KK215IEB0cmFja2VkX2NhdGVnb3JpZXMgPSBzcGxpdCgvWyBcbl0vLCBydW5fZ2l0KCJjb25maWcgLS1nZXQtYWxsIHJlbW90ZS4ke3JlbW90ZW5hbWV9LmNhdGVnb3JpZXMiKSk7CitjaG9tcChAdHJhY2tlZF9jYXRlZ29yaWVzKTsKKworIyBJbXBvcnQgbWVkaWEgZmlsZXMgb24gcHVsbAorbXkgJGltcG9ydF9tZWRpYSA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCAtLWJvb2wgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubWVkaWFpbXBvcnQiKTsKK2Nob21wKCRpbXBvcnRfbWVkaWEpOworJGltcG9ydF9tZWRpYSA9ICgkaW1wb3J0X21lZGlhIGVxICd0cnVlJyk7CisKKyMgRXhwb3J0IG1lZGlhIGZpbGVzIG9uIHB1c2gKK215ICRleHBvcnRfbWVkaWEgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgLS1ib29sIHJlbW90ZS4ke3JlbW90ZW5hbWV9Lm1lZGlhZXhwb3J0Iik7CitjaG9tcCgkZXhwb3J0X21lZGlhKTsKKyRleHBvcnRfbWVkaWEgPSAhKCRleHBvcnRfbWVkaWEgZXEgJ2ZhbHNlJyk7CisKK215ICR3aWtpX2xvZ2luID0gcnVuX2dpdCgiY29uZmlnIC0tZ2V0IHJlbW90ZS4ke3JlbW90ZW5hbWV9Lm13TG9naW4iKTsKKyMgTm90ZTogbXdQYXNzd29yZCBpcyBkaXNjb3VycmFnZWQuIFVzZSB0aGUgY3JlZGVudGlhbCBzeXN0ZW0gaW5zdGVhZC4KK215ICR3aWtpX3Bhc3N3ZCA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCByZW1vdGUuJHtyZW1vdGVuYW1lfS5td1Bhc3N3b3JkIik7CitteSAkd2lraV9kb21haW4gPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubXdEb21haW4iKTsKK2Nob21wKCR3aWtpX2xvZ2luKTsKK2Nob21wKCR3aWtpX3Bhc3N3ZCk7CitjaG9tcCgkd2lraV9kb21haW4pOworCisjIEltcG9ydCBvbmx5IGxhc3QgcmV2aXNpb25zIChib3RoIGZvciBjbG9uZSBhbmQgZmV0Y2gpCitteSAkc2hhbGxvd19pbXBvcnQgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgLS1ib29sIHJlbW90ZS4ke3JlbW90ZW5hbWV9LnNoYWxsb3ciKTsKK2Nob21wKCRzaGFsbG93X2ltcG9ydCk7Ciskc2hhbGxvd19pbXBvcnQgPSAoJHNoYWxsb3dfaW1wb3J0IGVxICd0cnVlJyk7CisKKyMgRmV0Y2ggKGNsb25lIGFuZCBwdWxsKSBieSByZXZpc2lvbnMgaW5zdGVhZCBvZiBieSBwYWdlcy4gVGhpcyBiZWhhdmlvcgorIyBpcyBtb3JlIGVmZmljaWVudCB3aGVuIHdlIGhhdmUgYSB3aWtpIHdpdGggbG90cyBvZiBwYWdlcyBhbmQgd2UgZmV0Y2gKKyMgdGhlIHJldmlzaW9ucyBxdWl0ZSBvZnRlbiBzbyB0aGF0IHRoZXkgY29uY2VybiBvbmx5IGZldyBwYWdlcy4KKyMgUG9zc2libGUgdmFsdWVzOgorIyAtIGJ5X3JldjogcGVyZm9ybSBvbmUgcXVlcnkgcGVyIG5ldyByZXZpc2lvbiBvbiB0aGUgcmVtb3RlIHdpa2kKKyMgLSBieV9wYWdlOiBxdWVyeSBlYWNoIHRyYWNrZWQgcGFnZSBmb3IgbmV3IHJldmlzaW9uCitteSAkZmV0Y2hfc3RyYXRlZ3kgPSBydW5fZ2l0KCJjb25maWcgLS1nZXQgcmVtb3RlLiR7cmVtb3RlbmFtZX0uZmV0Y2hTdHJhdGVneSIpOworaWYgKCEkZmV0Y2hfc3RyYXRlZ3kpIHsKKwkkZmV0Y2hfc3RyYXRlZ3kgPSBydW5fZ2l0KCdjb25maWcgLS1nZXQgbWVkaWF3aWtpLmZldGNoU3RyYXRlZ3knKTsKK30KK2Nob21wKCRmZXRjaF9zdHJhdGVneSk7CitpZiAoISRmZXRjaF9zdHJhdGVneSkgeworCSRmZXRjaF9zdHJhdGVneSA9ICdieV9wYWdlJzsKK30KKworIyBSZW1lbWJlciB0aGUgdGltZXN0YW1wIGNvcnJlc3BvbmRpbmcgdG8gYSByZXZpc2lvbiBpZC4KK215ICViYXNldGltZXN0YW1wczsKKworIyBEdW1iIHB1c2g6IGRvbid0IHVwZGF0ZSBub3RlcyBhbmQgbWVkaWF3aWtpIHJlZiB0byByZWZsZWN0IHRoZSBsYXN0IHB1c2guCisjCisjIENvbmZpZ3VyYWJsZSB3aXRoIG1lZGlhd2lraS5kdW1iUHVzaCwgb3IgcGVyLXJlbW90ZSB3aXRoCisjIHJlbW90ZS48cmVtb3RlbmFtZT4uZHVtYlB1c2guCisjCisjIFRoaXMgbWVhbnMgdGhlIHVzZXIgd2lsbCBoYXZlIHRvIHJlLWltcG9ydCB0aGUganVzdC1wdXNoZWQKKyMgcmV2aXNpb25zLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBtZWFucyB0aGF0IHRoZSBHaXQgcmV2aXNpb25zCisjIGNvcnJlc3BvbmRpbmcgdG8gTWVkaWFXaWtpIHJldmlzaW9ucyBhcmUgYWxsIGltcG9ydGVkIGZyb20gdGhlIHdpa2ksCisjIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5IHdlcmUgaW5pdGlhbGx5IGNyZWF0ZWQgaW4gR2l0IG9yIGZyb20gdGhlCisjIHdlYiBpbnRlcmZhY2UsIGhlbmNlIGFsbCB1c2VycyB3aWxsIGdldCB0aGUgc2FtZSBoaXN0b3J5IChpLmUuIGlmCisjIHRoZSBwdXNoIGZyb20gR2l0IHRvIE1lZGlhV2lraSBsb3NlcyBzb21lIGluZm9ybWF0aW9uLCBldmVyeWJvZHkKKyMgd2lsbCBnZXQgdGhlIGhpc3Rvcnkgd2l0aCBpbmZvcm1hdGlvbiBsb3N0KS4gSWYgdGhlIGltcG9ydCBpcworIyBkZXRlcm1pbmlzdGljLCB0aGlzIG1lYW5zIGV2ZXJ5Ym9keSBnZXRzIHRoZSBzYW1lIHNoYTEgZm9yIGVhY2gKKyMgTWVkaWFXaWtpIHJldmlzaW9uLgorbXkgJGR1bWJfcHVzaCA9IHJ1bl9naXQoImNvbmZpZyAtLWdldCAtLWJvb2wgcmVtb3RlLiR7cmVtb3RlbmFtZX0uZHVtYlB1c2giKTsKK2lmICghJGR1bWJfcHVzaCkgeworCSRkdW1iX3B1c2ggPSBydW5fZ2l0KCdjb25maWcgLS1nZXQgLS1ib29sIG1lZGlhd2lraS5kdW1iUHVzaCcpOworfQorY2hvbXAoJGR1bWJfcHVzaCk7CiskZHVtYl9wdXNoID0gKCRkdW1iX3B1c2ggZXEgJ3RydWUnKTsKKworbXkgJHdpa2lfbmFtZSA9ICR1cmw7Ciskd2lraV9uYW1lID1+IHN7W14vXSo6Ly99e307CisjIElmIFVSTCBpcyBsaWtlIGh0dHA6Ly91c2VyOnBhc3N3b3JkQGV4YW1wbGUuY29tLywgd2UgY2xlYXJseSBkb24ndAorIyB3YW50IHRoZSBwYXNzd29yZCBpbiAkd2lraV9uYW1lLiBXaGlsZSB3ZSdyZSB0aGVyZSwgYWxzbyByZW1vdmUgdXNlcgorIyBhbmQgJ0AnIHNpZ24sIHRvIGF2b2lkIGF1dGhvciBsaWtlIE1XVXNlckBIVFRQVXNlckBob3N0LmNvbQorJHdpa2lfbmFtZSA9fiBzL14uKkAvLzsKKworIyBDb21tYW5kcyBwYXJzZXIKK3doaWxlICg8U1RESU4+KSB7CisJY2hvbXA7CisKKwlpZiAoIXBhcnNlX2NvbW1hbmQoJF8pKSB7CisJCWxhc3Q7CisJfQorCisJQkVHSU4geyAkfCA9IDEgfSAjIGZsdXNoIFNURE9VVCwgdG8gbWFrZSBzdXJlIHRoZSBwcmV2aW91cworCQkJICMgY29tbWFuZCBpcyBmdWxseSBwcm9jZXNzZWQuCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMgZXJyb3IgaGFuZGxpbmcKK3N1YiBleGl0X2Vycm9yX3VzYWdlIHsKKwlkaWUgIkVSUk9SOiBnaXQtcmVtb3RlLW1lZGlhd2lraSBtb2R1bGUgd2FzIG5vdCBjYWxsZWQgd2l0aCBhIGNvcnJlY3QgbnVtYmVyIG9mXG4iIC4KKwkgICAgInBhcmFtZXRlcnNcbiIgLgorCSAgICAiWW91IG1heSBvYnRhaW4gdGhpcyBlcnJvciBiZWNhdXNlIHlvdSBhdHRlbXB0ZWQgdG8gcnVuIHRoZSBnaXQtcmVtb3RlLW1lZGlhd2lraVxuIiAuCisgICAgICAgICAgICAibW9kdWxlIGRpcmVjdGx5LlxuIiAuCisJICAgICJUaGlzIG1vZHVsZSBjYW4gYmUgdXNlZCB0aGUgZm9sbG93aW5nIHdheTpcbiIgLgorCSAgICAiXHRnaXQgY2xvbmUgbWVkaWF3aWtpOi8vPGFkZHJlc3Mgb2YgYSBtZWRpYXdpa2k+XG4iIC4KKwkgICAgIlRoZW4sIHVzZSBnaXQgY29tbWl0LCBwdXNoIGFuZCBwdWxsIGFzIHdpdGggZXZlcnkgbm9ybWFsIGdpdCByZXBvc2l0b3J5LlxuIjsKK30KKworc3ViIHBhcnNlX2NvbW1hbmQgeworCW15ICgkbGluZSkgPSBAXzsKKwlteSBAY21kID0gc3BsaXQoLyAvLCAkbGluZSk7CisJaWYgKCFkZWZpbmVkICRjbWRbMF0pIHsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgkY21kWzBdIGVxICdjYXBhYmlsaXRpZXMnKSB7CisJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBjYXBhYmlsaXRpZXNcbiIpCisJCSAgICBpZiAoZGVmaW5lZCgkY21kWzFdKSk7CisJCW13X2NhcGFiaWxpdGllcygpOworCX0gZWxzaWYgKCRjbWRbMF0gZXEgJ2xpc3QnKSB7CisJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBsaXN0XG4iKSBpZiAoZGVmaW5lZCgkY21kWzJdKSk7CisJCW13X2xpc3QoJGNtZFsxXSk7CisJfSBlbHNpZiAoJGNtZFswXSBlcSAnaW1wb3J0JykgeworCQlkaWUoIkludmFsaWQgYXJndW1lbnQgZm9yIGltcG9ydFxuIikKKwkJICAgIGlmICgkY21kWzFdIGVxIEVNUFRZKTsKKwkJZGllKCJUb28gbWFueSBhcmd1bWVudHMgZm9yIGltcG9ydFxuIikKKwkJICAgIGlmIChkZWZpbmVkKCRjbWRbMl0pKTsKKwkJbXdfaW1wb3J0KCRjbWRbMV0pOworCX0gZWxzaWYgKCRjbWRbMF0gZXEgJ29wdGlvbicpIHsKKwkJZGllKCJJbnZhbGlkIGFyZ3VtZW50cyBmb3Igb3B0aW9uXG4iKQorCQkgICAgaWYgKCRjbWRbMV0gZXEgRU1QVFkgfHwgJGNtZFsyXSBlcSBFTVBUWSk7CisJCWRpZSgiVG9vIG1hbnkgYXJndW1lbnRzIGZvciBvcHRpb25cbiIpCisJCSAgICBpZiAoZGVmaW5lZCgkY21kWzNdKSk7CisJCW13X29wdGlvbigkY21kWzFdLCRjbWRbMl0pOworCX0gZWxzaWYgKCRjbWRbMF0gZXEgJ3B1c2gnKSB7CisJCW13X3B1c2goJGNtZFsxXSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJVbmtub3duIGNvbW1hbmQuIEFib3J0aW5nLi4uXG4iOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKyMgTWVkaWFXaWtpIEFQSSBpbnN0YW5jZSwgY3JlYXRlZCBsYXppbHkuCitteSAkbWVkaWF3aWtpOworCitzdWIgZmF0YWxfbXdfZXJyb3IgeworCW15ICRhY3Rpb24gPSBzaGlmdDsKKwlwcmludCBTVERFUlIgImZhdGFsOiBjb3VsZCBub3QgJGFjdGlvbi5cbiI7CisJcHJpbnQgU1RERVJSICJmYXRhbDogJyR1cmwnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIG1lZGlhd2lraVxuIjsKKwlpZiAoJHVybCA9fiAvXmh0dHBzLykgeworCQlwcmludCBTVERFUlIgImZhdGFsOiBtYWtlIHN1cmUgJyR1cmwvYXBpLnBocCcgaXMgYSB2YWxpZCBwYWdlXG4iOworCQlwcmludCBTVERFUlIgImZhdGFsOiBhbmQgdGhlIFNTTCBjZXJ0aWZpY2F0ZSBpcyBjb3JyZWN0LlxuIjsKKwl9IGVsc2UgeworCQlwcmludCBTVERFUlIgImZhdGFsOiBtYWtlIHN1cmUgJyR1cmwvYXBpLnBocCcgaXMgYSB2YWxpZCBwYWdlLlxuIjsKKwl9CisJcHJpbnQgU1RERVJSICJmYXRhbDogKGVycm9yICIgLgorCSAgICAkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gLiAnOiAnIC4KKwkgICAgJG1lZGlhd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9IC4gIilcbiI7CisJZXhpdCAxOworfQorCisjIyBGdW5jdGlvbnMgZm9yIGxpc3RpbmcgcGFnZXMgb24gdGhlIHJlbW90ZSB3aWtpCitzdWIgZ2V0X213X3RyYWNrZWRfcGFnZXMgeworCW15ICRwYWdlcyA9IHNoaWZ0OworCWdldF9td19wYWdlX2xpc3QoXEB0cmFja2VkX3BhZ2VzLCAkcGFnZXMpOworCXJldHVybjsKK30KKworc3ViIGdldF9td19wYWdlX2xpc3QgeworCW15ICRwYWdlX2xpc3QgPSBzaGlmdDsKKwlteSAkcGFnZXMgPSBzaGlmdDsKKwlteSBAc29tZV9wYWdlcyA9IEB7JHBhZ2VfbGlzdH07CisJd2hpbGUgKEBzb21lX3BhZ2VzKSB7CisJCW15ICRsYXN0X3BhZ2UgPSBTTElDRV9TSVpFOworCQlpZiAoJCNzb21lX3BhZ2VzIDwgJGxhc3RfcGFnZSkgeworCQkJJGxhc3RfcGFnZSA9ICQjc29tZV9wYWdlczsKKwkJfQorCQlteSBAc2xpY2UgPSBAc29tZV9wYWdlc1swLi4kbGFzdF9wYWdlXTsKKwkJZ2V0X213X2ZpcnN0X3BhZ2VzKFxAc2xpY2UsICRwYWdlcyk7CisJCUBzb21lX3BhZ2VzID0gQHNvbWVfcGFnZXNbKFNMSUNFX1NJWkUgKyAxKS4uJCNzb21lX3BhZ2VzXTsKKwl9CisJcmV0dXJuOworfQorCitzdWIgZ2V0X213X3RyYWNrZWRfY2F0ZWdvcmllcyB7CisJbXkgJHBhZ2VzID0gc2hpZnQ7CisJZm9yZWFjaCBteSAkY2F0ZWdvcnkgKEB0cmFja2VkX2NhdGVnb3JpZXMpIHsKKwkJaWYgKGluZGV4KCRjYXRlZ29yeSwgJzonKSA8IDApIHsKKwkJCSMgTWVkaWF3aWtpIHJlcXVpcmVzIHRoZSBDYXRlZ29yeQorCQkJIyBwcmVmaXgsIGJ1dCBsZXQncyBub3QgZm9yY2UgdGhlIHVzZXIKKwkJCSMgdG8gc3BlY2lmeSBpdC4KKwkJCSRjYXRlZ29yeSA9ICJDYXRlZ29yeToke2NhdGVnb3J5fSI7CisJCX0KKwkJbXkgJG13X3BhZ2VzID0gJG1lZGlhd2lraS0+bGlzdCggeworCQkJYWN0aW9uID0+ICdxdWVyeScsCisJCQlsaXN0ID0+ICdjYXRlZ29yeW1lbWJlcnMnLAorCQkJY210aXRsZSA9PiAkY2F0ZWdvcnksCisJCQljbWxpbWl0ID0+ICdtYXgnIH0gKQorCQkJfHwgZGllICRtZWRpYXdpa2ktPntlcnJvcn0tPntjb2RlfSAuICc6ICcKKwkJCQkuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuICJcbiI7CisJCWZvcmVhY2ggbXkgJHBhZ2UgKEB7JG13X3BhZ2VzfSkgeworCQkJJHBhZ2VzLT57JHBhZ2UtPnt0aXRsZX19ID0gJHBhZ2U7CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdWIgZ2V0X213X2FsbF9wYWdlcyB7CisJbXkgJHBhZ2VzID0gc2hpZnQ7CisJIyBObyB1c2VyLXByb3ZpZGVkIGxpc3QsIGdldCB0aGUgbGlzdCBvZiBwYWdlcyBmcm9tIHRoZSBBUEkuCisJbXkgJG13X3BhZ2VzID0gJG1lZGlhd2lraS0+bGlzdCh7CisJCWFjdGlvbiA9PiAncXVlcnknLAorCQlsaXN0ID0+ICdhbGxwYWdlcycsCisJCWFwbGltaXQgPT4gJ21heCcKKwl9KTsKKwlpZiAoIWRlZmluZWQoJG13X3BhZ2VzKSkgeworCQlmYXRhbF9td19lcnJvcigiZ2V0IHRoZSBsaXN0IG9mIHdpa2kgcGFnZXMiKTsKKwl9CisJZm9yZWFjaCBteSAkcGFnZSAoQHskbXdfcGFnZXN9KSB7CisJCSRwYWdlcy0+eyRwYWdlLT57dGl0bGV9fSA9ICRwYWdlOworCX0KKwlyZXR1cm47Cit9CisKKyMgcXVlcmllcyB0aGUgd2lraSBmb3IgYSBzZXQgb2YgcGFnZXMuIE1lYW50IHRvIGJlIHVzZWQgd2l0aGluIGEgbG9vcAorIyBxdWVyeWluZyB0aGUgd2lraSBmb3Igc2xpY2VzIG9mIHBhZ2UgbGlzdC4KK3N1YiBnZXRfbXdfZmlyc3RfcGFnZXMgeworCW15ICRzb21lX3BhZ2VzID0gc2hpZnQ7CisJbXkgQHNvbWVfcGFnZXMgPSBAeyRzb21lX3BhZ2VzfTsKKworCW15ICRwYWdlcyA9IHNoaWZ0OworCisJIyBwYXR0ZXJuICdwYWdlMXxwYWdlMnwuLi4nIHJlcXVpcmVkIGJ5IHRoZSBBUEkKKwlteSAkdGl0bGVzID0gam9pbignfCcsIEBzb21lX3BhZ2VzKTsKKworCW15ICRtd19wYWdlcyA9ICRtZWRpYXdpa2ktPmFwaSh7CisJCWFjdGlvbiA9PiAncXVlcnknLAorCQl0aXRsZXMgPT4gJHRpdGxlcywKKwl9KTsKKwlpZiAoIWRlZmluZWQoJG13X3BhZ2VzKSkgeworCQlmYXRhbF9td19lcnJvcigicXVlcnkgdGhlIGxpc3Qgb2Ygd2lraSBwYWdlcyIpOworCX0KKwl3aGlsZSAobXkgKCRpZCwgJHBhZ2UpID0gZWFjaCgleyRtd19wYWdlcy0+e3F1ZXJ5fS0+e3BhZ2VzfX0pKSB7CisJCWlmICgkaWQgPCAwKSB7CisJCQlwcmludCB7KlNUREVSUn0gIldhcm5pbmc6IHBhZ2UgJHBhZ2UtPnt0aXRsZX0gbm90IGZvdW5kIG9uIHdpa2lcbiI7CisJCX0gZWxzZSB7CisJCQkkcGFnZXMtPnskcGFnZS0+e3RpdGxlfX0gPSAkcGFnZTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKyMgR2V0IHRoZSBsaXN0IG9mIHBhZ2VzIHRvIGJlIGZldGNoZWQgYWNjb3JkaW5nIHRvIGNvbmZpZ3VyYXRpb24uCitzdWIgZ2V0X213X3BhZ2VzIHsKKwkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CisKKwlwcmludCB7KlNUREVSUn0gIkxpc3RpbmcgcGFnZXMgb24gcmVtb3RlIHdpa2kuLi5cbiI7CisKKwlteSAlcGFnZXM7ICMgaGFzaCBvbiBwYWdlIHRpdGxlcyB0byBhdm9pZCBkdXBsaWNhdGVzCisJbXkgJHVzZXJfZGVmaW5lZDsKKwlpZiAoQHRyYWNrZWRfcGFnZXMpIHsKKwkJJHVzZXJfZGVmaW5lZCA9IDE7CisJCSMgVGhlIHVzZXIgcHJvdmlkZWQgYSBsaXN0IG9mIHBhZ2VzIHRpdGxlcywgYnV0IHdlCisJCSMgc3RpbGwgbmVlZCB0byBxdWVyeSB0aGUgQVBJIHRvIGdldCB0aGUgcGFnZSBJRHMuCisJCWdldF9td190cmFja2VkX3BhZ2VzKFwlcGFnZXMpOworCX0KKwlpZiAoQHRyYWNrZWRfY2F0ZWdvcmllcykgeworCQkkdXNlcl9kZWZpbmVkID0gMTsKKwkJZ2V0X213X3RyYWNrZWRfY2F0ZWdvcmllcyhcJXBhZ2VzKTsKKwl9CisJaWYgKCEkdXNlcl9kZWZpbmVkKSB7CisJCWdldF9td19hbGxfcGFnZXMoXCVwYWdlcyk7CisJfQorCWlmICgkaW1wb3J0X21lZGlhKSB7CisJCXByaW50IHsqU1RERVJSfSAiR2V0dGluZyBtZWRpYSBmaWxlcyBmb3Igc2VsZWN0ZWQgcGFnZXMuLi5cbiI7CisJCWlmICgkdXNlcl9kZWZpbmVkKSB7CisJCQlnZXRfbGlua2VkX21lZGlhZmlsZXMoXCVwYWdlcyk7CisJCX0gZWxzZSB7CisJCQlnZXRfYWxsX21lZGlhZmlsZXMoXCVwYWdlcyk7CisJCX0KKwl9CisJcHJpbnQgeypTVERFUlJ9IChzY2FsYXIga2V5cyAlcGFnZXMpIC4gIiBwYWdlcyBmb3VuZC5cbiI7CisJcmV0dXJuICVwYWdlczsKK30KKworIyB1c2FnZTogJG91dCA9IHJ1bl9naXQoImNvbW1hbmQgYXJncyIpOworIyAgICAgICAgJG91dCA9IHJ1bl9naXQoImNvbW1hbmQgYXJncyIsICJyYXciKTsgIyBkb24ndCBpbnRlcnByZXQgb3V0cHV0IGFzIFVURi04Lgorc3ViIHJ1bl9naXQgeworCW15ICRhcmdzID0gc2hpZnQ7CisJbXkgJGVuY29kaW5nID0gKHNoaWZ0IHx8ICdlbmNvZGluZyhVVEYtOCknKTsKKwlvcGVuKG15ICRnaXQsICItfDoke2VuY29kaW5nfSIsICJnaXQgJHthcmdzfSIpCisJICAgIG9yIGRpZSAiVW5hYmxlIHRvIGZvcms6ICQhXG4iOworCW15ICRyZXMgPSBkbyB7CisJCWxvY2FsICQvID0gdW5kZWY7CisJCTwkZ2l0PgorCX07CisJY2xvc2UoJGdpdCk7CisKKwlyZXR1cm4gJHJlczsKK30KKworCitzdWIgZ2V0X2FsbF9tZWRpYWZpbGVzIHsKKwlteSAkcGFnZXMgPSBzaGlmdDsKKwkjIEF0dGFjaCBsaXN0IG9mIGFsbCBwYWdlcyBmb3IgbWVkaWEgZmlsZXMgZnJvbSB0aGUgQVBJLAorCSMgdGhleSBhcmUgaW4gYSBkaWZmZXJlbnQgbmFtZXNwYWNlLCBvbmx5IG9uZSBuYW1lc3BhY2UKKwkjIGNhbiBiZSBxdWVyaWVkIGF0IHRoZSBzYW1lIG1vbWVudAorCW15ICRtd19wYWdlcyA9ICRtZWRpYXdpa2ktPmxpc3QoeworCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJbGlzdCA9PiAnYWxscGFnZXMnLAorCQlhcG5hbWVzcGFjZSA9PiBnZXRfbXdfbmFtZXNwYWNlX2lkKCdGaWxlJyksCisJCWFwbGltaXQgPT4gJ21heCcKKwl9KTsKKwlpZiAoIWRlZmluZWQoJG13X3BhZ2VzKSkgeworCQlwcmludCB7KlNUREVSUn0gImZhdGFsOiBjb3VsZCBub3QgZ2V0IHRoZSBsaXN0IG9mIHBhZ2VzIGZvciBtZWRpYSBmaWxlcy5cbiI7CisJCXByaW50IHsqU1RERVJSfSAiZmF0YWw6ICckdXJsJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBtZWRpYXdpa2lcbiI7CisJCXByaW50IHsqU1RERVJSfSAiZmF0YWw6IG1ha2Ugc3VyZSAnJHVybC9hcGkucGhwJyBpcyBhIHZhbGlkIHBhZ2UuXG4iOworCQlleGl0IDE7CisJfQorCWZvcmVhY2ggbXkgJHBhZ2UgKEB7JG13X3BhZ2VzfSkgeworCQkkcGFnZXMtPnskcGFnZS0+e3RpdGxlfX0gPSAkcGFnZTsKKwl9CisJcmV0dXJuOworfQorCitzdWIgZ2V0X2xpbmtlZF9tZWRpYWZpbGVzIHsKKwlteSAkcGFnZXMgPSBzaGlmdDsKKwlteSBAdGl0bGVzID0gbWFwIHsgJF8tPnt0aXRsZX0gfSB2YWx1ZXMoJXskcGFnZXN9KTsKKworCW15ICRiYXRjaCA9IEJBVENIX1NJWkU7CisJd2hpbGUgKEB0aXRsZXMpIHsKKwkJaWYgKCQjdGl0bGVzIDwgJGJhdGNoKSB7CisJCQkkYmF0Y2ggPSAkI3RpdGxlczsKKwkJfQorCQlteSBAc2xpY2UgPSBAdGl0bGVzWzAuLiRiYXRjaF07CisKKwkJIyBwYXR0ZXJuICdwYWdlMXxwYWdlMnwuLi4nIHJlcXVpcmVkIGJ5IHRoZSBBUEkKKwkJbXkgJG13X3RpdGxlcyA9IGpvaW4oJ3wnLCBAc2xpY2UpOworCisJCSMgTWVkaWEgZmlsZXMgY291bGQgYmUgaW5jbHVkZWQgb3IgbGlua2VkIGZyb20KKwkJIyBhIHBhZ2UsIGdldCBhbGwgcmVsYXRlZAorCQlteSAkcXVlcnkgPSB7CisJCQlhY3Rpb24gPT4gJ3F1ZXJ5JywKKwkJCXByb3AgPT4gJ2xpbmtzfGltYWdlcycsCisJCQl0aXRsZXMgPT4gJG13X3RpdGxlcywKKwkJCXBsbmFtZXNwYWNlID0+IGdldF9td19uYW1lc3BhY2VfaWQoJ0ZpbGUnKSwKKwkJCXBsbGltaXQgPT4gJ21heCcKKwkJfTsKKwkJbXkgJHJlc3VsdCA9ICRtZWRpYXdpa2ktPmFwaSgkcXVlcnkpOworCisJCXdoaWxlIChteSAoJGlkLCAkcGFnZSkgPSBlYWNoKCV7JHJlc3VsdC0+e3F1ZXJ5fS0+e3BhZ2VzfX0pKSB7CisJCQlteSBAbWVkaWFfdGl0bGVzOworCQkJaWYgKGRlZmluZWQoJHBhZ2UtPntsaW5rc30pKSB7CisJCQkJbXkgQGxpbmtfdGl0bGVzCisJCQkJICAgID0gbWFwIHsgJF8tPnt0aXRsZX0gfSBAeyRwYWdlLT57bGlua3N9fTsKKwkJCQlwdXNoKEBtZWRpYV90aXRsZXMsIEBsaW5rX3RpdGxlcyk7CisJCQl9CisJCQlpZiAoZGVmaW5lZCgkcGFnZS0+e2ltYWdlc30pKSB7CisJCQkJbXkgQGltYWdlX3RpdGxlcworCQkJCSAgICA9IG1hcCB7ICRfLT57dGl0bGV9IH0gQHskcGFnZS0+e2ltYWdlc319OworCQkJCXB1c2goQG1lZGlhX3RpdGxlcywgQGltYWdlX3RpdGxlcyk7CisJCQl9CisJCQlpZiAoQG1lZGlhX3RpdGxlcykgeworCQkJCWdldF9td19wYWdlX2xpc3QoXEBtZWRpYV90aXRsZXMsICRwYWdlcyk7CisJCQl9CisJCX0KKworCQlAdGl0bGVzID0gQHRpdGxlc1soJGJhdGNoKzEpLi4kI3RpdGxlc107CisJfQorCXJldHVybjsKK30KKworc3ViIGdldF9td19tZWRpYWZpbGVfZm9yX3BhZ2VfcmV2aXNpb24geworCSMgTmFtZSBvZiB0aGUgZmlsZSBvbiBXaWtpLCB3aXRoIHRoZSBwcmVmaXguCisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJbXkgJHRpbWVzdGFtcCA9IHNoaWZ0OworCW15ICVtZWRpYWZpbGU7CisKKwkjIFNlYXJjaCBpZiBvbiBhIG1lZGlhIGZpbGUgd2l0aCBnaXZlbiB0aW1lc3RhbXAgZXhpc3RzIG9uCisJIyBNZWRpYVdpa2kuIEluIHRoYXQgY2FzZSBkb3dubG9hZCB0aGUgZmlsZS4KKwlteSAkcXVlcnkgPSB7CisJCWFjdGlvbiA9PiAncXVlcnknLAorCQlwcm9wID0+ICdpbWFnZWluZm8nLAorCQl0aXRsZXMgPT4gIkZpbGU6JHtmaWxlbmFtZX0iLAorCQlpaXN0YXJ0ID0+ICR0aW1lc3RhbXAsCisJCWlpZW5kID0+ICR0aW1lc3RhbXAsCisJCWlpcHJvcCA9PiAndGltZXN0YW1wfGFyY2hpdmVuYW1lfHVybCcsCisJCWlpbGltaXQgPT4gMQorCX07CisJbXkgJHJlc3VsdCA9ICRtZWRpYXdpa2ktPmFwaSgkcXVlcnkpOworCisJbXkgKCRmaWxlaWQsICRmaWxlKSA9IGVhY2goICV7JHJlc3VsdC0+e3F1ZXJ5fS0+e3BhZ2VzfX0gKTsKKwkjIElmIG5vdCBkZWZpbmVkIGl0IG1lYW5zIHRoZXJlIGlzIG5vIHJldmlzaW9uIG9mIHRoZSBmaWxlIGZvcgorCSMgZ2l2ZW4gdGltZXN0YW1wLgorCWlmIChkZWZpbmVkKCRmaWxlLT57aW1hZ2VpbmZvfSkpIHsKKwkJJG1lZGlhZmlsZXt0aXRsZX0gPSAkZmlsZW5hbWU7CisKKwkJbXkgJGZpbGVpbmZvID0gcG9wKEB7JGZpbGUtPntpbWFnZWluZm99fSk7CisJCSRtZWRpYWZpbGV7dGltZXN0YW1wfSA9ICRmaWxlaW5mby0+e3RpbWVzdGFtcH07CisJCSMgTWVkaWF3aWtpOjpBUEkncyBkb3dubG9hZCBmdW5jdGlvbiBkb2Vzbid0IHN1cHBvcnQgaHR0cHMgVVJMcworCQkjIGFuZCBjYW4ndCBkb3dubG9hZCBvbGQgdmVyc2lvbnMgb2YgZmlsZXMuCisJCXByaW50IHsqU1RERVJSfSAiXHREb3dubG9hZGluZyBmaWxlICRtZWRpYWZpbGV7dGl0bGV9LCB2ZXJzaW9uICRtZWRpYWZpbGV7dGltZXN0YW1wfVxuIjsKKwkJJG1lZGlhZmlsZXtjb250ZW50fSA9IGRvd25sb2FkX213X21lZGlhZmlsZSgkZmlsZWluZm8tPnt1cmx9KTsKKwl9CisJcmV0dXJuICVtZWRpYWZpbGU7Cit9CisKK3N1YiBkb3dubG9hZF9td19tZWRpYWZpbGUgeworCW15ICRkb3dubG9hZF91cmwgPSBzaGlmdDsKKworCW15ICRyZXNwb25zZSA9ICRtZWRpYXdpa2ktPnt1YX0tPmdldCgkZG93bmxvYWRfdXJsKTsKKwlpZiAoJHJlc3BvbnNlLT5jb2RlID09IEhUVFBfQ09ERV9PSykgeworCQkjIEl0IGlzIHRlbXB0aW5nIHRvIHJldHVybgorCQkjICRyZXNwb25zZS0+ZGVjb2RlZF9jb250ZW50KHtjaGFyc2V0ID0+ICJub25lIn0pLCBidXQKKwkJIyB3aGVuIGRvaW5nIHNvLCB1dGY4Ojpkb3duZ3JhZGUoJGNvbnRlbnQpIGZhaWxzIHdpdGgKKwkJIyAiV2lkZSBjaGFyYWN0ZXIgaW4gc3Vicm91dGluZSBlbnRyeSIuCisJCSRyZXNwb25zZS0+ZGVjb2RlKCk7CisJCXJldHVybiAkcmVzcG9uc2UtPmNvbnRlbnQoKTsKKwl9IGVsc2UgeworCQlwcmludCB7KlNUREVSUn0gIkVycm9yIGRvd25sb2FkaW5nIG1lZGlhZmlsZSBmcm9tIDpcbiI7CisJCXByaW50IHsqU1RERVJSfSAiVVJMOiAke2Rvd25sb2FkX3VybH1cbiI7CisJCXByaW50IHsqU1RERVJSfSAnU2VydmVyIHJlc3BvbnNlOiAnIC4gJHJlc3BvbnNlLT5jb2RlIC4gcXsgfSAuICRyZXNwb25zZS0+bWVzc2FnZSAuICJcbiI7CisJCWV4aXQgMTsKKwl9Cit9CisKK3N1YiBnZXRfbGFzdF9sb2NhbF9yZXZpc2lvbiB7CisJIyBHZXQgbm90ZSByZWdhcmRpbmcgbGFzdCBtZWRpYXdpa2kgcmV2aXNpb24KKwlteSAkbm90ZSA9IHJ1bl9naXQoIm5vdGVzIC0tcmVmPSR7cmVtb3RlbmFtZX0vbWVkaWF3aWtpIHNob3cgcmVmcy9tZWRpYXdpa2kvJHtyZW1vdGVuYW1lfS9tYXN0ZXIgMj4vZGV2L251bGwiKTsKKwlteSBAbm90ZV9pbmZvID0gc3BsaXQoLyAvLCAkbm90ZSk7CisKKwlteSAkbGFzdHJldmlzaW9uX251bWJlcjsKKwlpZiAoIShkZWZpbmVkKCRub3RlX2luZm9bMF0pICYmICRub3RlX2luZm9bMF0gZXEgJ21lZGlhd2lraV9yZXZpc2lvbjonKSkgeworCQlwcmludCB7KlNUREVSUn0gJ05vIHByZXZpb3VzIG1lZGlhd2lraSByZXZpc2lvbiBmb3VuZCc7CisJCSRsYXN0cmV2aXNpb25fbnVtYmVyID0gMDsKKwl9IGVsc2UgeworCQkjIE5vdGVzIGFyZSBmb3JtYXR0ZWQgOiBtZWRpYXdpa2lfcmV2aXNpb246ICNudW1iZXIKKwkJJGxhc3RyZXZpc2lvbl9udW1iZXIgPSAkbm90ZV9pbmZvWzFdOworCQljaG9tcCgkbGFzdHJldmlzaW9uX251bWJlcik7CisJCXByaW50IHsqU1RERVJSfSAiTGFzdCBsb2NhbCBtZWRpYXdpa2kgcmV2aXNpb24gZm91bmQgaXMgJHtsYXN0cmV2aXNpb25fbnVtYmVyfSI7CisJfQorCXJldHVybiAkbGFzdHJldmlzaW9uX251bWJlcjsKK30KKworIyBHZXQgdGhlIGxhc3QgcmVtb3RlIHJldmlzaW9uIHdpdGhvdXQgdGFraW5nIGluIGFjY291bnQgd2hpY2ggcGFnZXMgYXJlCisjIHRyYWNrZWQgb3Igbm90LiBUaGlzIGZ1bmN0aW9uIG1ha2VzIGEgc2luZ2xlIHJlcXVlc3QgdG8gdGhlIHdpa2kgdGh1cworIyBhdm9pZCBhIGxvb3Agb250byBhbGwgdHJhY2tlZCBwYWdlcy4gVGhpcyBpcyB1c2VmdWwgZm9yIHRoZSBmZXRjaC1ieS1yZXYKKyMgb3B0aW9uLgorc3ViIGdldF9sYXN0X2dsb2JhbF9yZW1vdGVfcmV2IHsKKwkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CisKKwlteSAkcXVlcnkgPSB7CisJCWFjdGlvbiA9PiAncXVlcnknLAorCQlsaXN0ID0+ICdyZWNlbnRjaGFuZ2VzJywKKwkJcHJvcCA9PiAncmV2aXNpb25zJywKKwkJcmNsaW1pdCA9PiAnMScsCisJCXJjZGlyID0+ICdvbGRlcicsCisJfTsKKwlteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+YXBpKCRxdWVyeSk7CisJcmV0dXJuICRyZXN1bHQtPntxdWVyeX0tPntyZWNlbnRjaGFuZ2VzfVswXS0+e3JldmlkfTsKK30KKworIyBHZXQgdGhlIGxhc3QgcmVtb3RlIHJldmlzaW9uIGNvbmNlcm5pbmcgdGhlIHRyYWNrZWQgcGFnZXMgYW5kIHRoZSB0cmFja2VkCisjIGNhdGVnb3JpZXMuCitzdWIgZ2V0X2xhc3RfcmVtb3RlX3JldmlzaW9uIHsKKwkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CisKKwlteSAlcGFnZXNfaGFzaCA9IGdldF9td19wYWdlcygpOworCW15IEBwYWdlcyA9IHZhbHVlcyglcGFnZXNfaGFzaCk7CisKKwlteSAkbWF4X3Jldl9udW0gPSAwOworCisJcHJpbnQgeypTVERFUlJ9ICJHZXR0aW5nIGxhc3QgcmV2aXNpb24gaWQgb24gdHJhY2tlZCBwYWdlcy4uLlxuIjsKKworCWZvcmVhY2ggbXkgJHBhZ2UgKEBwYWdlcykgeworCQlteSAkaWQgPSAkcGFnZS0+e3BhZ2VpZH07CisKKwkJbXkgJHF1ZXJ5ID0geworCQkJYWN0aW9uID0+ICdxdWVyeScsCisJCQlwcm9wID0+ICdyZXZpc2lvbnMnLAorCQkJcnZwcm9wID0+ICdpZHN8dGltZXN0YW1wJywKKwkJCXBhZ2VpZHMgPT4gJGlkLAorCQl9OworCisJCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKworCQlteSAkbGFzdHJldiA9IHBvcChAeyRyZXN1bHQtPntxdWVyeX0tPntwYWdlc30tPnskaWR9LT57cmV2aXNpb25zfX0pOworCisJCSRiYXNldGltZXN0YW1wc3skbGFzdHJldi0+e3JldmlkfX0gPSAkbGFzdHJldi0+e3RpbWVzdGFtcH07CisKKwkJJG1heF9yZXZfbnVtID0gKCRsYXN0cmV2LT57cmV2aWR9ID4gJG1heF9yZXZfbnVtID8gJGxhc3RyZXYtPntyZXZpZH0gOiAkbWF4X3Jldl9udW0pOworCX0KKworCXByaW50IHsqU1RERVJSfSAiTGFzdCByZW1vdGUgcmV2aXNpb24gZm91bmQgaXMgJG1heF9yZXZfbnVtLlxuIjsKKwlyZXR1cm4gJG1heF9yZXZfbnVtOworfQorCisjIENsZWFuIGNvbnRlbnQgYmVmb3JlIHNlbmRpbmcgaXQgdG8gTWVkaWFXaWtpCitzdWIgbWVkaWF3aWtpX2NsZWFuIHsKKwlteSAkc3RyaW5nID0gc2hpZnQ7CisJbXkgJHBhZ2VfY3JlYXRlZCA9IHNoaWZ0OworCSMgTWVkaWF3aWtpIGRvZXMgbm90IGFsbG93IGJsYW5rIHNwYWNlIGF0IHRoZSBlbmQgb2YgYSBwYWdlIGFuZCBlbmRzIHdpdGggYSBzaW5nbGUgXG4uCisJIyBUaGlzIGZ1bmN0aW9uIHJpZ2h0IHRyaW1zIGEgc3RyaW5nIGFuZCBhZGRzIGEgXG4gYXQgdGhlIGVuZCB0byBmb2xsb3cgdGhpcyBydWxlCisJJHN0cmluZyA9fiBzL1xzKyQvLzsKKwlpZiAoJHN0cmluZyBlcSBFTVBUWSAmJiAkcGFnZV9jcmVhdGVkKSB7CisJCSMgQ3JlYXRpbmcgZW1wdHkgcGFnZXMgaXMgZm9yYmlkZGVuLgorCQkkc3RyaW5nID0gRU1QVFlfQ09OVEVOVDsKKwl9CisJcmV0dXJuICRzdHJpbmcuIlxuIjsKK30KKworIyBGaWx0ZXIgYXBwbGllZCBvbiBNZWRpYVdpa2kgZGF0YSBiZWZvcmUgYWRkaW5nIHRoZW0gdG8gR2l0CitzdWIgbWVkaWF3aWtpX3NtdWRnZSB7CisJbXkgJHN0cmluZyA9IHNoaWZ0OworCWlmICgkc3RyaW5nIGVxIEVNUFRZX0NPTlRFTlQpIHsKKwkJJHN0cmluZyA9IEVNUFRZOworCX0KKwkjIFRoaXMgXG4gaXMgaW1wb3J0YW50LiBUaGlzIGlzIGR1ZSB0byBtZWRpYXdpa2kncyB3YXkgdG8gaGFuZGxlIGVuZCBvZiBmaWxlcy4KKwlyZXR1cm4gIiR7c3RyaW5nfVxuIjsKK30KKworc3ViIGxpdGVyYWxfZGF0YSB7CisJbXkgKCRjb250ZW50KSA9IEBfOworCXByaW50IHsqU1RET1VUfSAnZGF0YSAnLCBieXRlczo6bGVuZ3RoKCRjb250ZW50KSwgIlxuIiwgJGNvbnRlbnQ7CisJcmV0dXJuOworfQorCitzdWIgbGl0ZXJhbF9kYXRhX3JhdyB7CisJIyBPdXRwdXQgcG9zc2libHkgYmluYXJ5IGNvbnRlbnQuCisJbXkgKCRjb250ZW50KSA9IEBfOworCSMgQXZvaWQgY29uZnVzaW9uIGJldHdlZW4gc2l6ZSBpbiBieXRlcyBhbmQgaW4gY2hhcmFjdGVycworCXV0Zjg6OmRvd25ncmFkZSgkY29udGVudCk7CisJYmlubW9kZSBTVERPVVQsICc6cmF3JzsKKwlwcmludCB7KlNURE9VVH0gJ2RhdGEgJywgYnl0ZXM6Omxlbmd0aCgkY29udGVudCksICJcbiIsICRjb250ZW50OworCWJpbm1vZGUgU1RET1VULCAnOmVuY29kaW5nKFVURi04KSc7CisJcmV0dXJuOworfQorCitzdWIgbXdfY2FwYWJpbGl0aWVzIHsKKwkjIFJldmlzaW9ucyBhcmUgaW1wb3J0ZWQgdG8gdGhlIHByaXZhdGUgbmFtZXNwYWNlCisJIyByZWZzL21lZGlhd2lraS8kcmVtb3RlbmFtZS8gYnkgdGhlIGhlbHBlciBhbmQgZmV0Y2hlZCBpbnRvCisJIyByZWZzL3JlbW90ZXMvJHJlbW90ZW5hbWUgbGF0ZXIgYnkgZmV0Y2guCisJcHJpbnQgeypTVERPVVR9ICJyZWZzcGVjIHJlZnMvaGVhZHMvKjpyZWZzL21lZGlhd2lraS8ke3JlbW90ZW5hbWV9LypcbiI7CisJcHJpbnQgeypTVERPVVR9ICJpbXBvcnRcbiI7CisJcHJpbnQgeypTVERPVVR9ICJsaXN0XG4iOworCXByaW50IHsqU1RET1VUfSAicHVzaFxuIjsKKwlpZiAoJGR1bWJfcHVzaCkgeworCQlwcmludCB7KlNURE9VVH0gIm5vLXByaXZhdGUtdXBkYXRlXG4iOworCX0KKwlwcmludCB7KlNURE9VVH0gIlxuIjsKKwlyZXR1cm47Cit9CisKK3N1YiBtd19saXN0IHsKKwkjIE1lZGlhV2lraSBkbyBub3QgaGF2ZSBicmFuY2hlcywgd2UgY29uc2lkZXIgb25lIGJyYW5jaCBhcmJpdHJhcmlseQorCSMgY2FsbGVkIG1hc3RlciwgYW5kIEhFQUQgcG9pbnRpbmcgdG8gaXQuCisJcHJpbnQgeypTVERPVVR9ICI/IHJlZnMvaGVhZHMvbWFzdGVyXG4iOworCXByaW50IHsqU1RET1VUfSAiXEByZWZzL2hlYWRzL21hc3RlciBIRUFEXG4iOworCXByaW50IHsqU1RET1VUfSAiXG4iOworCXJldHVybjsKK30KKworc3ViIG13X29wdGlvbiB7CisJcHJpbnQgeypTVERFUlJ9ICJyZW1vdGUtaGVscGVyIGNvbW1hbmQgJ29wdGlvbiAkX1swXScgbm90IHlldCBpbXBsZW1lbnRlZFxuIjsKKwlwcmludCB7KlNURE9VVH0gInVuc3VwcG9ydGVkXG4iOworCXJldHVybjsKK30KKworc3ViIGZldGNoX213X3JldmlzaW9uc19mb3JfcGFnZSB7CisJbXkgJHBhZ2UgPSBzaGlmdDsKKwlteSAkaWQgPSBzaGlmdDsKKwlteSAkZmV0Y2hfZnJvbSA9IHNoaWZ0OworCW15IEBwYWdlX3JldnMgPSAoKTsKKwlteSAkcXVlcnkgPSB7CisJCWFjdGlvbiA9PiAncXVlcnknLAorCQlwcm9wID0+ICdyZXZpc2lvbnMnLAorCQlydnByb3AgPT4gJ2lkcycsCisJCXJ2ZGlyID0+ICduZXdlcicsCisJCXJ2c3RhcnRpZCA9PiAkZmV0Y2hfZnJvbSwKKwkJcnZsaW1pdCA9PiA1MDAsCisJCXBhZ2VpZHMgPT4gJGlkLAorCisJCSMgTGV0IE1lZGlhV2lraSBrbm93IHRoYXQgd2Ugc3VwcG9ydCB0aGUgbGF0ZXN0IEFQSS4KKwkJY29udGludWUgPT4gJycsCisJfTsKKworCW15ICRyZXZudW0gPSAwOworCSMgR2V0IDUwMCByZXZpc2lvbnMgYXQgYSB0aW1lIGR1ZSB0byB0aGUgbWVkaWF3aWtpIGFwaSBsaW1pdAorCXdoaWxlICgxKSB7CisJCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKworCQkjIFBhcnNlIGVhY2ggb2YgdGhvc2UgNTAwIHJldmlzaW9ucworCQlmb3JlYWNoIG15ICRyZXZpc2lvbiAoQHskcmVzdWx0LT57cXVlcnl9LT57cGFnZXN9LT57JGlkfS0+e3JldmlzaW9uc319KSB7CisJCQlteSAkcGFnZV9yZXZfaWRzOworCQkJJHBhZ2VfcmV2X2lkcy0+e3BhZ2VpZH0gPSAkcGFnZS0+e3BhZ2VpZH07CisJCQkkcGFnZV9yZXZfaWRzLT57cmV2aWR9ID0gJHJldmlzaW9uLT57cmV2aWR9OworCQkJcHVzaChAcGFnZV9yZXZzLCAkcGFnZV9yZXZfaWRzKTsKKwkJCSRyZXZudW0rKzsKKwkJfQorCisJCWlmICgkcmVzdWx0LT57J3F1ZXJ5LWNvbnRpbnVlJ30pIHsgIyBGb3IgbGVnYWN5IEFQSXMKKwkJCSRxdWVyeS0+e3J2c3RhcnRpZH0gPSAkcmVzdWx0LT57J3F1ZXJ5LWNvbnRpbnVlJ30tPntyZXZpc2lvbnN9LT57cnZzdGFydGlkfTsKKwkJfSBlbHNpZiAoJHJlc3VsdC0+e2NvbnRpbnVlfSkgeyAjIEZvciBuZXdlciBBUElzCisJCQkkcXVlcnktPntydnN0YXJ0aWR9ID0gJHJlc3VsdC0+e2NvbnRpbnVlfS0+e3J2Y29udGludWV9OworCQkJJHF1ZXJ5LT57Y29udGludWV9ID0gJHJlc3VsdC0+e2NvbnRpbnVlfS0+e2NvbnRpbnVlfTsKKwkJfSBlbHNlIHsKKwkJCWxhc3Q7CisJCX0KKwl9CisJaWYgKCRzaGFsbG93X2ltcG9ydCAmJiBAcGFnZV9yZXZzKSB7CisJCXByaW50IHsqU1RERVJSfSAiICBGb3VuZCAxIHJldmlzaW9uIChzaGFsbG93IGltcG9ydCkuXG4iOworCQlAcGFnZV9yZXZzID0gc29ydCB7JGItPntyZXZpZH0gPD0+ICRhLT57cmV2aWR9fSAoQHBhZ2VfcmV2cyk7CisJCXJldHVybiAkcGFnZV9yZXZzWzBdOworCX0KKwlwcmludCB7KlNUREVSUn0gIiAgRm91bmQgJHtyZXZudW19IHJldmlzaW9uKHMpLlxuIjsKKwlyZXR1cm4gQHBhZ2VfcmV2czsKK30KKworc3ViIGZldGNoX213X3JldmlzaW9ucyB7CisJbXkgJHBhZ2VzID0gc2hpZnQ7IG15IEBwYWdlcyA9IEB7JHBhZ2VzfTsKKwlteSAkZmV0Y2hfZnJvbSA9IHNoaWZ0OworCisJbXkgQHJldmlzaW9ucyA9ICgpOworCW15ICRuID0gMTsKKwlmb3JlYWNoIG15ICRwYWdlIChAcGFnZXMpIHsKKwkJbXkgJGlkID0gJHBhZ2UtPntwYWdlaWR9OworCQlwcmludCB7KlNUREVSUn0gInBhZ2UgJHtufS8iLCBzY2FsYXIoQHBhZ2VzKSwgJzogJywgJHBhZ2UtPnt0aXRsZX0sICJcbiI7CisJCSRuKys7CisJCW15IEBwYWdlX3JldnMgPSBmZXRjaF9td19yZXZpc2lvbnNfZm9yX3BhZ2UoJHBhZ2UsICRpZCwgJGZldGNoX2Zyb20pOworCQlAcmV2aXNpb25zID0gKEBwYWdlX3JldnMsIEByZXZpc2lvbnMpOworCX0KKworCXJldHVybiAoJG4sIEByZXZpc2lvbnMpOworfQorCitzdWIgZmVfZXNjYXBlX3BhdGggeworICAgIG15ICRwYXRoID0gc2hpZnQ7CisgICAgJHBhdGggPX4gcy9cXC9cXFxcL2c7CisgICAgJHBhdGggPX4gcy8iL1xcIi9nOworICAgICRwYXRoID1+IHMvXG4vXFxuL2c7CisgICAgcmV0dXJuIHFxKCIke3BhdGh9Iik7Cit9CisKK3N1YiBpbXBvcnRfZmlsZV9yZXZpc2lvbiB7CisJbXkgJGNvbW1pdCA9IHNoaWZ0OworCW15ICVjb21taXQgPSAleyRjb21taXR9OworCW15ICRmdWxsX2ltcG9ydCA9IHNoaWZ0OworCW15ICRuID0gc2hpZnQ7CisJbXkgJG1lZGlhZmlsZSA9IHNoaWZ0OworCW15ICVtZWRpYWZpbGU7CisJaWYgKCRtZWRpYWZpbGUpIHsKKwkJJW1lZGlhZmlsZSA9ICV7JG1lZGlhZmlsZX07CisJfQorCisJbXkgJHRpdGxlID0gJGNvbW1pdHt0aXRsZX07CisJbXkgJGNvbW1lbnQgPSAkY29tbWl0e2NvbW1lbnR9OworCW15ICRjb250ZW50ID0gJGNvbW1pdHtjb250ZW50fTsKKwlteSAkYXV0aG9yID0gJGNvbW1pdHthdXRob3J9OworCW15ICRkYXRlID0gJGNvbW1pdHtkYXRlfTsKKworCXByaW50IHsqU1RET1VUfSAiY29tbWl0IHJlZnMvbWVkaWF3aWtpLyR7cmVtb3RlbmFtZX0vbWFzdGVyXG4iOworCXByaW50IHsqU1RET1VUfSAibWFyayA6JHtufVxuIjsKKwlwcmludCB7KlNURE9VVH0gImNvbW1pdHRlciAke2F1dGhvcn0gPCR7YXV0aG9yfVxAJHt3aWtpX25hbWV9PiAiIC4gJGRhdGUtPmVwb2NoIC4gIiArMDAwMFxuIjsKKwlsaXRlcmFsX2RhdGEoJGNvbW1lbnQpOworCisJIyBJZiBpdCdzIG5vdCBhIGNsb25lLCB3ZSBuZWVkIHRvIGtub3cgd2hlcmUgdG8gc3RhcnQgZnJvbQorCWlmICghJGZ1bGxfaW1wb3J0ICYmICRuID09IDEpIHsKKwkJcHJpbnQgeypTVERPVVR9ICJmcm9tIHJlZnMvbWVkaWF3aWtpLyR7cmVtb3RlbmFtZX0vbWFzdGVyXjBcbiI7CisJfQorCWlmICgkY29udGVudCBuZSBERUxFVEVEX0NPTlRFTlQpIHsKKwkJcHJpbnQgeypTVERPVVR9ICdNIDY0NCBpbmxpbmUgJyAuCisJCSAgICBmZV9lc2NhcGVfcGF0aCgiJHt0aXRsZX0ubXciKSAuICJcbiI7CisJCWxpdGVyYWxfZGF0YSgkY29udGVudCk7CisJCWlmICglbWVkaWFmaWxlKSB7CisJCQlwcmludCB7KlNURE9VVH0gJ00gNjQ0IGlubGluZSAnCisJCQkgICAgLiBmZV9lc2NhcGVfcGF0aCgkbWVkaWFmaWxle3RpdGxlfSkgLiAiXG4iOworCQkJbGl0ZXJhbF9kYXRhX3JhdygkbWVkaWFmaWxle2NvbnRlbnR9KTsKKwkJfQorCQlwcmludCB7KlNURE9VVH0gIlxuXG4iOworCX0gZWxzZSB7CisJCXByaW50IHsqU1RET1VUfSAnRCAnIC4gZmVfZXNjYXBlX3BhdGgoIiR7dGl0bGV9Lm13IikgLiAiXG4iOworCX0KKworCSMgbWVkaWF3aWtpIHJldmlzaW9uIG51bWJlciBpbiB0aGUgZ2l0IG5vdGUKKwlpZiAoJGZ1bGxfaW1wb3J0ICYmICRuID09IDEpIHsKKwkJcHJpbnQgeypTVERPVVR9ICJyZXNldCByZWZzL25vdGVzLyR7cmVtb3RlbmFtZX0vbWVkaWF3aWtpXG4iOworCX0KKwlwcmludCB7KlNURE9VVH0gImNvbW1pdCByZWZzL25vdGVzLyR7cmVtb3RlbmFtZX0vbWVkaWF3aWtpXG4iOworCXByaW50IHsqU1RET1VUfSAiY29tbWl0dGVyICR7YXV0aG9yfSA8JHthdXRob3J9XEAke3dpa2lfbmFtZX0+ICIgLiAkZGF0ZS0+ZXBvY2ggLiAiICswMDAwXG4iOworCWxpdGVyYWxfZGF0YSgnTm90ZSBhZGRlZCBieSBnaXQtbWVkaWF3aWtpIGR1cmluZyBpbXBvcnQnKTsKKwlpZiAoISRmdWxsX2ltcG9ydCAmJiAkbiA9PSAxKSB7CisJCXByaW50IHsqU1RET1VUfSAiZnJvbSByZWZzL25vdGVzLyR7cmVtb3RlbmFtZX0vbWVkaWF3aWtpXjBcbiI7CisJfQorCXByaW50IHsqU1RET1VUfSAiTiBpbmxpbmUgOiR7bn1cbiI7CisJbGl0ZXJhbF9kYXRhKCJtZWRpYXdpa2lfcmV2aXNpb246ICRjb21taXR7bXdfcmV2aXNpb259Iik7CisJcHJpbnQgeypTVERPVVR9ICJcblxuIjsKKwlyZXR1cm47Cit9CisKKyMgcGFyc2UgYSBzZXF1ZW5jZSBvZgorIyA8Y21kPiA8YXJnMT4KKyMgPGNtZD4gPGFyZzI+CisjIFxuCisjIChsaWtlIGJhdGNoIHNlcXVlbmNlIG9mIGltcG9ydCBhbmQgc2VxdWVuY2Ugb2YgcHVzaCBzdGF0ZW1lbnRzKQorc3ViIGdldF9tb3JlX3JlZnMgeworCW15ICRjbWQgPSBzaGlmdDsKKwlteSBAcmVmczsKKwl3aGlsZSAoMSkgeworCQlteSAkbGluZSA9IDxTVERJTj47CisJCWlmICgkbGluZSA9fiAvXiRjbWQgKC4qKSQvKSB7CisJCQlwdXNoKEByZWZzLCAkMSk7CisJCX0gZWxzaWYgKCRsaW5lIGVxICJcbiIpIHsKKwkJCXJldHVybiBAcmVmczsKKwkJfSBlbHNlIHsKKwkJCWRpZSgiSW52YWxpZCBjb21tYW5kIGluIGEgJyRjbWQnIGJhdGNoOiAkX1xuIik7CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdWIgbXdfaW1wb3J0IHsKKwkjIG11bHRpcGxlIGltcG9ydCBjb21tYW5kcyBjYW4gZm9sbG93IGVhY2ggb3RoZXIuCisJbXkgQHJlZnMgPSAoc2hpZnQsIGdldF9tb3JlX3JlZnMoJ2ltcG9ydCcpKTsKKwlmb3JlYWNoIG15ICRyZWYgKEByZWZzKSB7CisJCW13X2ltcG9ydF9yZWYoJHJlZik7CisJfQorCXByaW50IHsqU1RET1VUfSAiZG9uZVxuIjsKKwlyZXR1cm47Cit9CisKK3N1YiBtd19pbXBvcnRfcmVmIHsKKwlteSAkcmVmID0gc2hpZnQ7CisJIyBUaGUgcmVtb3RlIGhlbHBlciB3aWxsIGNhbGwgImltcG9ydCBIRUFEIiBhbmQKKwkjICJpbXBvcnQgcmVmcy9oZWFkcy9tYXN0ZXIiLgorCSMgU2luY2UgSEVBRCBpcyBhIHN5bWJvbGljIHJlZiB0byBtYXN0ZXIgKGJ5IGNvbnZlbnRpb24sCisJIyBmb2xsb3dlZCBieSB0aGUgb3V0cHV0IG9mIHRoZSBjb21tYW5kICJsaXN0IiB0aGF0IHdlIGdhdmUpLAorCSMgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBpbiB0aGlzIGNhc2UuCisJaWYgKCRyZWYgZXEgJ0hFQUQnKSB7CisJCXJldHVybjsKKwl9CisKKwkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CisKKwlwcmludCB7KlNUREVSUn0gIlNlYXJjaGluZyByZXZpc2lvbnMuLi5cbiI7CisJbXkgJGxhc3RfbG9jYWwgPSBnZXRfbGFzdF9sb2NhbF9yZXZpc2lvbigpOworCW15ICRmZXRjaF9mcm9tID0gJGxhc3RfbG9jYWwgKyAxOworCWlmICgkZmV0Y2hfZnJvbSA9PSAxKSB7CisJCXByaW50IHsqU1RERVJSfSAiLCBmZXRjaGluZyBmcm9tIGJlZ2lubmluZy5cbiI7CisJfSBlbHNlIHsKKwkJcHJpbnQgeypTVERFUlJ9ICIsIGZldGNoaW5nIGZyb20gaGVyZS5cbiI7CisJfQorCisJbXkgJG4gPSAwOworCWlmICgkZmV0Y2hfc3RyYXRlZ3kgZXEgJ2J5X3JldicpIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJGZXRjaGluZyAmIHdyaXRpbmcgZXhwb3J0IGRhdGEgYnkgcmV2cy4uLlxuIjsKKwkJJG4gPSBtd19pbXBvcnRfcmVmX2J5X3JldnMoJGZldGNoX2Zyb20pOworCX0gZWxzaWYgKCRmZXRjaF9zdHJhdGVneSBlcSAnYnlfcGFnZScpIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJGZXRjaGluZyAmIHdyaXRpbmcgZXhwb3J0IGRhdGEgYnkgcGFnZXMuLi5cbiI7CisJCSRuID0gbXdfaW1wb3J0X3JlZl9ieV9wYWdlcygkZmV0Y2hfZnJvbSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgeypTVERFUlJ9IHFxKGZhdGFsOiBpbnZhbGlkIGZldGNoIHN0cmF0ZWd5ICIke2ZldGNoX3N0cmF0ZWd5fSIuXG4pOworCQlwcmludCB7KlNUREVSUn0gIkNoZWNrIHlvdXIgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgcmVtb3RlLiR7cmVtb3RlbmFtZX0uZmV0Y2hTdHJhdGVneSBhbmQgbWVkaWF3aWtpLmZldGNoU3RyYXRlZ3lcbiI7CisJCWV4aXQgMTsKKwl9CisKKwlpZiAoJGZldGNoX2Zyb20gPT0gMSAmJiAkbiA9PSAwKSB7CisJCXByaW50IHsqU1RERVJSfSAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSBNZWRpYVdpa2kuXG4iOworCQkjIFNvbWV0aGluZyBoYXMgdG8gYmUgZG9uZSByZW1vdGUtaGVscGVyIHNpZGUuIElmIG5vdGhpbmcgaXMgZG9uZSwgYW4gZXJyb3IgaXMKKwkJIyB0aHJvd24gc2F5aW5nIHRoYXQgSEVBRCBpcyByZWZlcnJpbmcgdG8gdW5rbm93biBvYmplY3QgMDAwMDAwMDAwMDAwMDAwMDAwMAorCQkjIGFuZCB0aGUgY2xvbmUgZmFpbHMuCisJfQorCXJldHVybjsKK30KKworc3ViIG13X2ltcG9ydF9yZWZfYnlfcGFnZXMgeworCisJbXkgJGZldGNoX2Zyb20gPSBzaGlmdDsKKwlteSAlcGFnZXNfaGFzaCA9IGdldF9td19wYWdlcygpOworCW15IEBwYWdlcyA9IHZhbHVlcyglcGFnZXNfaGFzaCk7CisKKwlteSAoJG4sIEByZXZpc2lvbnMpID0gZmV0Y2hfbXdfcmV2aXNpb25zKFxAcGFnZXMsICRmZXRjaF9mcm9tKTsKKworCUByZXZpc2lvbnMgPSBzb3J0IHskYS0+e3JldmlkfSA8PT4gJGItPntyZXZpZH19IEByZXZpc2lvbnM7CisJbXkgQHJldmlzaW9uX2lkcyA9IG1hcCB7ICRfLT57cmV2aWR9IH0gQHJldmlzaW9uczsKKworCXJldHVybiBtd19pbXBvcnRfcmV2aWRzKCRmZXRjaF9mcm9tLCBcQHJldmlzaW9uX2lkcywgXCVwYWdlc19oYXNoKTsKK30KKworc3ViIG13X2ltcG9ydF9yZWZfYnlfcmV2cyB7CisKKwlteSAkZmV0Y2hfZnJvbSA9IHNoaWZ0OworCW15ICVwYWdlc19oYXNoID0gZ2V0X213X3BhZ2VzKCk7CisKKwlteSAkbGFzdF9yZW1vdGUgPSBnZXRfbGFzdF9nbG9iYWxfcmVtb3RlX3JldigpOworCW15IEByZXZpc2lvbl9pZHMgPSAkZmV0Y2hfZnJvbS4uJGxhc3RfcmVtb3RlOworCXJldHVybiBtd19pbXBvcnRfcmV2aWRzKCRmZXRjaF9mcm9tLCBcQHJldmlzaW9uX2lkcywgXCVwYWdlc19oYXNoKTsKK30KKworIyBJbXBvcnQgcmV2aXNpb25zIGdpdmVuIGluIHNlY29uZCBhcmd1bWVudCAoYXJyYXkgb2YgaW50ZWdlcnMpLgorIyBPbmx5IHBhZ2VzIGFwcGVhcmluZyBpbiB0aGUgdGhpcmQgYXJndW1lbnQgKGhhc2ggaW5kZXhlZCBieSBwYWdlIHRpdGxlcykKKyMgd2lsbCBiZSBpbXBvcnRlZC4KK3N1YiBtd19pbXBvcnRfcmV2aWRzIHsKKwlteSAkZmV0Y2hfZnJvbSA9IHNoaWZ0OworCW15ICRyZXZpc2lvbl9pZHMgPSBzaGlmdDsKKwlteSAkcGFnZXMgPSBzaGlmdDsKKworCW15ICRuID0gMDsKKwlteSAkbl9hY3R1YWwgPSAwOworCW15ICRsYXN0X3RpbWVzdGFtcCA9IDA7ICMgUGxhY2Vob2xlciBpbiBjYXNlICRyZXYtPnRpbWVzdGFtcCBpcyB1bmRlZmluZWQKKworCWZvcmVhY2ggbXkgJHBhZ2VyZXZpZCAoQHskcmV2aXNpb25faWRzfSkgeworCSAgICAgICAgIyBDb3VudCBwYWdlIGV2ZW4gaWYgd2Ugc2tpcCBpdCwgc2luY2Ugd2UgZGlzcGxheQorCQkjICRuLyR0b3RhbCBhbmQgJHRvdGFsIGluY2x1ZGVzIHNraXBwZWQgcGFnZXMuCisJCSRuKys7CisKKwkJIyBmZXRjaCB0aGUgY29udGVudCBvZiB0aGUgcGFnZXMKKwkJbXkgJHF1ZXJ5ID0geworCQkJYWN0aW9uID0+ICdxdWVyeScsCisJCQlwcm9wID0+ICdyZXZpc2lvbnMnLAorCQkJcnZwcm9wID0+ICdjb250ZW50fHRpbWVzdGFtcHxjb21tZW50fHVzZXJ8aWRzJywKKwkJCXJldmlkcyA9PiAkcGFnZXJldmlkLAorCQl9OworCisJCW15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKworCQlpZiAoISRyZXN1bHQpIHsKKwkJCWRpZSAiRmFpbGVkIHRvIHJldHJpZXZlIG1vZGlmaWVkIHBhZ2UgZm9yIHJldmlzaW9uICRwYWdlcmV2aWRcbiI7CisJCX0KKworCQlpZiAoZGVmaW5lZCgkcmVzdWx0LT57cXVlcnl9LT57YmFkcmV2aWRzfS0+eyRwYWdlcmV2aWR9KSkgeworCQkJIyBUaGUgcmV2aXNpb24gaWQgZG9lcyBub3QgZXhpc3Qgb24gdGhlIHJlbW90ZSB3aWtpLgorCQkJbmV4dDsKKwkJfQorCisJCWlmICghZGVmaW5lZCgkcmVzdWx0LT57cXVlcnl9LT57cGFnZXN9KSkgeworCQkJZGllICJJbnZhbGlkIHJldmlzaW9uICR7cGFnZXJldmlkfS5cbiI7CisJCX0KKworCQlteSBAcmVzdWx0X3BhZ2VzID0gdmFsdWVzKCV7JHJlc3VsdC0+e3F1ZXJ5fS0+e3BhZ2VzfX0pOworCQlteSAkcmVzdWx0X3BhZ2UgPSAkcmVzdWx0X3BhZ2VzWzBdOworCQlteSAkcmV2ID0gJHJlc3VsdF9wYWdlc1swXS0+e3JldmlzaW9uc30tPlswXTsKKworCQlteSAkcGFnZV90aXRsZSA9ICRyZXN1bHRfcGFnZS0+e3RpdGxlfTsKKworCQlpZiAoIWV4aXN0cygkcGFnZXMtPnskcGFnZV90aXRsZX0pKSB7CisJCQlwcmludCB7KlNUREVSUn0gIiR7bn0vIiwgc2NhbGFyKEB7JHJldmlzaW9uX2lkc30pLAorCQkJCSI6IFNraXBwaW5nIHJldmlzaW9uICMkcmV2LT57cmV2aWR9IG9mICR7cGFnZV90aXRsZX1cbiI7CisJCQluZXh0OworCQl9CisKKwkJJG5fYWN0dWFsKys7CisKKwkJbXkgJWNvbW1pdDsKKwkJJGNvbW1pdHthdXRob3J9ID0gJHJldi0+e3VzZXJ9IHx8ICdBbm9ueW1vdXMnOworCQkkY29tbWl0e2NvbW1lbnR9ID0gJHJldi0+e2NvbW1lbnR9IHx8IEVNUFRZX01FU1NBR0U7CisJCSRjb21taXR7dGl0bGV9ID0gc211ZGdlX2ZpbGVuYW1lKCRwYWdlX3RpdGxlKTsKKwkJJGNvbW1pdHttd19yZXZpc2lvbn0gPSAkcmV2LT57cmV2aWR9OworCQkkY29tbWl0e2NvbnRlbnR9ID0gbWVkaWF3aWtpX3NtdWRnZSgkcmV2LT57JyonfSk7CisKKwkJaWYgKCFkZWZpbmVkKCRyZXYtPnt0aW1lc3RhbXB9KSkgeworCQkJJGxhc3RfdGltZXN0YW1wKys7CisJCX0gZWxzZSB7CisJCQkkbGFzdF90aW1lc3RhbXAgPSAkcmV2LT57dGltZXN0YW1wfTsKKwkJfQorCQkkY29tbWl0e2RhdGV9ID0gRGF0ZVRpbWU6OkZvcm1hdDo6SVNPODYwMS0+cGFyc2VfZGF0ZXRpbWUoJGxhc3RfdGltZXN0YW1wKTsKKworCQkjIERpZmZlcmVudGlhdGVzIGNsYXNzaWMgcGFnZXMgYW5kIG1lZGlhIGZpbGVzLgorCQlteSAoJG5hbWVzcGFjZSwgJGZpbGVuYW1lKSA9ICRwYWdlX3RpdGxlID1+IC9eKFteOl0qKTooLiopJC87CisJCW15ICVtZWRpYWZpbGU7CisJCWlmICgkbmFtZXNwYWNlKSB7CisJCQlteSAkaWQgPSBnZXRfbXdfbmFtZXNwYWNlX2lkKCRuYW1lc3BhY2UpOworCQkJaWYgKCRpZCAmJiAkaWQgPT0gZ2V0X213X25hbWVzcGFjZV9pZCgnRmlsZScpKSB7CisJCQkJJW1lZGlhZmlsZSA9IGdldF9td19tZWRpYWZpbGVfZm9yX3BhZ2VfcmV2aXNpb24oJGZpbGVuYW1lLCAkcmV2LT57dGltZXN0YW1wfSk7CisJCQl9CisJCX0KKwkJIyBJZiB0aGlzIGlzIGEgcmV2aXNpb24gb2YgdGhlIG1lZGlhIHBhZ2UgZm9yIG5ldyB2ZXJzaW9uCisJCSMgb2YgYSBmaWxlIGRvIG9uZSBjb21tb24gY29tbWl0IGZvciBib3RoIGZpbGUgYW5kIG1lZGlhIHBhZ2UuCisJCSMgRWxzZSBkbyBjb21taXQgb25seSBmb3IgdGhhdCBwYWdlLgorCQlwcmludCB7KlNUREVSUn0gIiR7bn0vIiwgc2NhbGFyKEB7JHJldmlzaW9uX2lkc30pLCAiOiBSZXZpc2lvbiAjJHJldi0+e3JldmlkfSBvZiAkY29tbWl0e3RpdGxlfVxuIjsKKwkJaW1wb3J0X2ZpbGVfcmV2aXNpb24oXCVjb21taXQsICgkZmV0Y2hfZnJvbSA9PSAxKSwgJG5fYWN0dWFsLCBcJW1lZGlhZmlsZSk7CisJfQorCisJcmV0dXJuICRuX2FjdHVhbDsKK30KKworc3ViIGVycm9yX25vbl9mYXN0X2ZvcndhcmQgeworCW15ICRhZHZpY2UgPSBydW5fZ2l0KCdjb25maWcgLS1ib29sIGFkdmljZS5wdXNoTm9uRmFzdEZvcndhcmQnKTsKKwljaG9tcCgkYWR2aWNlKTsKKwlpZiAoJGFkdmljZSBuZSAnZmFsc2UnKSB7CisJCSMgTmF0aXZlIGdpdC1wdXNoIHdvdWxkIHNob3cgdGhpcyBhZnRlciB0aGUgc3VtbWFyeS4KKwkJIyBXZSBjYW4ndCBhc2sgaXQgdG8gZGlzcGxheSBpdCBjbGVhbmx5LCBzbyBwcmludCBpdAorCQkjIG91cnNlbHZlcyBiZWZvcmUuCisJCXByaW50IHsqU1RERVJSfSAiVG8gcHJldmVudCB5b3UgZnJvbSBsb3NpbmcgaGlzdG9yeSwgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzIHdlcmUgcmVqZWN0ZWRcbiI7CisJCXByaW50IHsqU1RERVJSfSAiTWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuICdnaXQgcHVsbCcpIGJlZm9yZSBwdXNoaW5nIGFnYWluLiBTZWUgdGhlXG4iOworCQlwcmludCB7KlNUREVSUn0gIidOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIHNlY3Rpb24gb2YgJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuXG4iOworCX0KKwlwcmludCB7KlNURE9VVH0gcXEoZXJyb3IgJF9bMF0gIm5vbi1mYXN0LWZvcndhcmQiXG4pOworCXJldHVybiAwOworfQorCitzdWIgbXdfdXBsb2FkX2ZpbGUgeworCW15ICRjb21wbGV0ZV9maWxlX25hbWUgPSBzaGlmdDsKKwlteSAkbmV3X3NoYTEgPSBzaGlmdDsKKwlteSAkZXh0ZW5zaW9uID0gc2hpZnQ7CisJbXkgJGZpbGVfZGVsZXRlZCA9IHNoaWZ0OworCW15ICRzdW1tYXJ5ID0gc2hpZnQ7CisJbXkgJG5ld3JldmlkOworCW15ICRwYXRoID0gIkZpbGU6JHtjb21wbGV0ZV9maWxlX25hbWV9IjsKKwlteSAlaGFzaEZpbGVzID0gZ2V0X2FsbG93ZWRfZmlsZV9leHRlbnNpb25zKCk7CisJaWYgKCFleGlzdHMoJGhhc2hGaWxlc3skZXh0ZW5zaW9ufSkpIHsKKwkJcHJpbnQgeypTVERFUlJ9ICIke2NvbXBsZXRlX2ZpbGVfbmFtZX0gaXMgbm90IGEgcGVybWl0dGVkIGZpbGUgb24gdGhpcyB3aWtpLlxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJDaGVjayB0aGUgY29uZmlndXJhdGlvbiBvZiBmaWxlIHVwbG9hZHMgaW4geW91ciBtZWRpYXdpa2kuXG4iOworCQlyZXR1cm4gJG5ld3JldmlkOworCX0KKwkjIERlbGV0aW5nIGFuZCB1cGxvYWRpbmcgYSBmaWxlIHJlcXVpcmVzIGEgcHJpdmlsZWRnZWQgdXNlcgorCWlmICgkZmlsZV9kZWxldGVkKSB7CisJCSRtZWRpYXdpa2kgPSBjb25uZWN0X21heWJlKCRtZWRpYXdpa2ksICRyZW1vdGVuYW1lLCAkdXJsKTsKKwkJbXkgJHF1ZXJ5ID0geworCQkJYWN0aW9uID0+ICdkZWxldGUnLAorCQkJdGl0bGUgPT4gJHBhdGgsCisJCQlyZWFzb24gPT4gJHN1bW1hcnkKKwkJfTsKKwkJaWYgKCEkbWVkaWF3aWtpLT5lZGl0KCRxdWVyeSkpIHsKKwkJCXByaW50IHsqU1RERVJSfSAiRmFpbGVkIHRvIGRlbGV0ZSBmaWxlIG9uIHJlbW90ZSB3aWtpXG4iOworCQkJcHJpbnQgeypTVERFUlJ9ICJDaGVjayB5b3VyIHBlcm1pc3Npb25zIG9uIHRoZSByZW1vdGUgc2l0ZS4gRXJyb3IgY29kZTpcbiI7CisJCQlwcmludCB7KlNUREVSUn0gJG1lZGlhd2lraS0+e2Vycm9yfS0+e2NvZGV9IC4gJzonIC4gJG1lZGlhd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9OworCQkJZXhpdCAxOworCQl9CisJfSBlbHNlIHsKKwkJIyBEb24ndCBsZXQgcGVybCB0cnkgdG8gaW50ZXJwcmV0IGZpbGUgY29udGVudCBhcyBVVEYtOCA9PiB1c2UgInJhdyIKKwkJbXkgJGNvbnRlbnQgPSBydW5fZ2l0KCJjYXQtZmlsZSBibG9iICR7bmV3X3NoYTF9IiwgJ3JhdycpOworCQlpZiAoJGNvbnRlbnQgbmUgRU1QVFkpIHsKKwkJCSRtZWRpYXdpa2kgPSBjb25uZWN0X21heWJlKCRtZWRpYXdpa2ksICRyZW1vdGVuYW1lLCAkdXJsKTsKKwkJCSRtZWRpYXdpa2ktPntjb25maWd9LT57dXBsb2FkX3VybH0gPQorCQkJCSIke3VybH0vaW5kZXgucGhwL1NwZWNpYWw6VXBsb2FkIjsKKwkJCSRtZWRpYXdpa2ktPmVkaXQoeworCQkJCWFjdGlvbiA9PiAndXBsb2FkJywKKwkJCQlmaWxlbmFtZSA9PiAkY29tcGxldGVfZmlsZV9uYW1lLAorCQkJCWNvbW1lbnQgPT4gJHN1bW1hcnksCisJCQkJZmlsZSA9PiBbdW5kZWYsCisJCQkJCSAkY29tcGxldGVfZmlsZV9uYW1lLAorCQkJCQkgQ29udGVudCA9PiAkY29udGVudF0sCisJCQkJaWdub3Jld2FybmluZ3MgPT4gMSwKKwkJCX0sIHsKKwkJCQlza2lwX2VuY29kaW5nID0+IDEKKwkJCX0gKSB8fCBkaWUgJG1lZGlhd2lraS0+e2Vycm9yfS0+e2NvZGV9IC4gJzonCisJCQkJIC4gJG1lZGlhd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9IC4gIlxuIjsKKwkJCW15ICRsYXN0X2ZpbGVfcGFnZSA9ICRtZWRpYXdpa2ktPmdldF9wYWdlKHt0aXRsZSA9PiAkcGF0aH0pOworCQkJJG5ld3JldmlkID0gJGxhc3RfZmlsZV9wYWdlLT57cmV2aWR9OworCQkJcHJpbnQgeypTVERFUlJ9ICJQdXNoZWQgZmlsZTogJHtuZXdfc2hhMX0gLSAke2NvbXBsZXRlX2ZpbGVfbmFtZX0uXG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgeypTVERFUlJ9ICJFbXB0eSBmaWxlICR7Y29tcGxldGVfZmlsZV9uYW1lfSBub3QgcHVzaGVkLlxuIjsKKwkJfQorCX0KKwlyZXR1cm4gJG5ld3JldmlkOworfQorCitzdWIgbXdfcHVzaF9maWxlIHsKKwlteSAkZGlmZl9pbmZvID0gc2hpZnQ7CisJIyAkZGlmZl9pbmZvIGNvbnRhaW5zIGEgc3RyaW5nIGluIHRoaXMgZm9ybWF0OgorCSMgMTAwNjQ0IDEwMDY0NCA8c2hhMV9vZl9ibG9iX2JlZm9yZV9jb21taXQ+IDxzaGExX29mX2Jsb2Jfbm93PiA8c3RhdHVzPgorCW15IEBkaWZmX2luZm9fc3BsaXQgPSBzcGxpdCgvWyBcdF0vLCAkZGlmZl9pbmZvKTsKKworCSMgRmlsZW5hbWUsIGluY2x1ZGluZyAubXcgZXh0ZW5zaW9uCisJbXkgJGNvbXBsZXRlX2ZpbGVfbmFtZSA9IHNoaWZ0OworCSMgQ29tbWl0IG1lc3NhZ2UKKwlteSAkc3VtbWFyeSA9IHNoaWZ0OworCSMgTWVkaWFXaWtpIHJldmlzaW9uIG51bWJlci4gS2VlcCB0aGUgcHJldmlvdXMgb25lIGJ5IGRlZmF1bHQsCisJIyBpbiBjYXNlIHRoZXJlJ3Mgbm8gZWRpdCB0byBwZXJmb3JtLgorCW15ICRvbGRyZXZpZCA9IHNoaWZ0OworCW15ICRuZXdyZXZpZDsKKworCWlmICgkc3VtbWFyeSBlcSBFTVBUWV9NRVNTQUdFKSB7CisJCSRzdW1tYXJ5ID0gRU1QVFk7CisJfQorCisJbXkgJG5ld19zaGExID0gJGRpZmZfaW5mb19zcGxpdFszXTsKKwlteSAkb2xkX3NoYTEgPSAkZGlmZl9pbmZvX3NwbGl0WzJdOworCW15ICRwYWdlX2NyZWF0ZWQgPSAoJG9sZF9zaGExIGVxIE5VTExfU0hBMSk7CisJbXkgJHBhZ2VfZGVsZXRlZCA9ICgkbmV3X3NoYTEgZXEgTlVMTF9TSEExKTsKKwkkY29tcGxldGVfZmlsZV9uYW1lID0gY2xlYW5fZmlsZW5hbWUoJGNvbXBsZXRlX2ZpbGVfbmFtZSk7CisKKwlteSAoJHRpdGxlLCAkZXh0ZW5zaW9uKSA9ICRjb21wbGV0ZV9maWxlX25hbWUgPX4gL14oLiopXC4oW15cLl0qKSQvOworCWlmICghZGVmaW5lZCgkZXh0ZW5zaW9uKSkgeworCQkkZXh0ZW5zaW9uID0gRU1QVFk7CisJfQorCWlmICgkZXh0ZW5zaW9uIGVxICdtdycpIHsKKwkJbXkgJG5zID0gZ2V0X213X25hbWVzcGFjZV9pZF9mb3JfcGFnZSgkY29tcGxldGVfZmlsZV9uYW1lKTsKKwkJaWYgKCRucyAmJiAkbnMgPT0gZ2V0X213X25hbWVzcGFjZV9pZCgnRmlsZScpICYmICghJGV4cG9ydF9tZWRpYSkpIHsKKwkJCXByaW50IHsqU1RERVJSfSAiSWdub3JpbmcgbWVkaWEgZmlsZSByZWxhdGVkIHBhZ2U6ICR7Y29tcGxldGVfZmlsZV9uYW1lfVxuIjsKKwkJCXJldHVybiAoJG9sZHJldmlkLCAnb2snKTsKKwkJfQorCQlteSAkZmlsZV9jb250ZW50OworCQlpZiAoJHBhZ2VfZGVsZXRlZCkgeworCQkJIyBEZWxldGluZyBhIHBhZ2UgdXN1YWxseSByZXF1aXJlcworCQkJIyBzcGVjaWFsIHByaXZpbGVnZXMuIEEgY29tbW9uCisJCQkjIGNvbnZlbnRpb24gaXMgdG8gcmVwbGFjZSB0aGUgcGFnZQorCQkJIyB3aXRoIHRoaXMgY29udGVudCBpbnN0ZWFkOgorCQkJJGZpbGVfY29udGVudCA9IERFTEVURURfQ09OVEVOVDsKKwkJfSBlbHNlIHsKKwkJCSRmaWxlX2NvbnRlbnQgPSBydW5fZ2l0KCJjYXQtZmlsZSBibG9iICR7bmV3X3NoYTF9Iik7CisJCX0KKworCQkkbWVkaWF3aWtpID0gY29ubmVjdF9tYXliZSgkbWVkaWF3aWtpLCAkcmVtb3RlbmFtZSwgJHVybCk7CisKKwkJbXkgJHJlc3VsdCA9ICRtZWRpYXdpa2ktPmVkaXQoIHsKKwkJCWFjdGlvbiA9PiAnZWRpdCcsCisJCQlzdW1tYXJ5ID0+ICRzdW1tYXJ5LAorCQkJdGl0bGUgPT4gJHRpdGxlLAorCQkJYmFzZXRpbWVzdGFtcCA9PiAkYmFzZXRpbWVzdGFtcHN7JG9sZHJldmlkfSwKKwkJCXRleHQgPT4gbWVkaWF3aWtpX2NsZWFuKCRmaWxlX2NvbnRlbnQsICRwYWdlX2NyZWF0ZWQpLAorCQkJCSAgfSwgeworCQkJCQkgIHNraXBfZW5jb2RpbmcgPT4gMSAjIEhlbHBzIHdpdGggbmFtZXMgd2l0aCBhY2NlbnR1YXRlZCBjaGFyYWN0ZXJzCisJCQkJICB9KTsKKwkJaWYgKCEkcmVzdWx0KSB7CisJCQlpZiAoJG1lZGlhd2lraS0+e2Vycm9yfS0+e2NvZGV9ID09IDMpIHsKKwkJCQkjIGVkaXQgY29uZmxpY3RzLCBjb25zaWRlcmVkIGFzIG5vbi1mYXN0LWZvcndhcmQKKwkJCQlwcmludCB7KlNUREVSUn0gJ1dhcm5pbmc6IEVycm9yICcgLgorCQkJCSAgICAkbWVkaWF3aWtpLT57ZXJyb3J9LT57Y29kZX0gLgorCQkJCSAgICAnIGZyb20gbWVkaWF3aWtpOiAnIC4gJG1lZGlhd2lraS0+e2Vycm9yfS0+e2RldGFpbHN9IC4KKwkJCQkgICAgIi5cbiI7CisJCQkJcmV0dXJuICgkb2xkcmV2aWQsICdub24tZmFzdC1mb3J3YXJkJyk7CisJCQl9IGVsc2UgeworCQkJCSMgT3RoZXIgZXJyb3JzLiBTaG91bGRuJ3QgaGFwcGVuID0+IGp1c3QgZGllKCkKKwkJCQlkaWUgJ0ZhdGFsOiBFcnJvciAnIC4KKwkJCQkgICAgJG1lZGlhd2lraS0+e2Vycm9yfS0+e2NvZGV9IC4KKwkJCQkgICAgJyBmcm9tIG1lZGlhd2lraTogJyAuICRtZWRpYXdpa2ktPntlcnJvcn0tPntkZXRhaWxzfSAuICJcbiI7CisJCQl9CisJCX0KKwkJJG5ld3JldmlkID0gJHJlc3VsdC0+e2VkaXR9LT57bmV3cmV2aWR9OworCQlwcmludCB7KlNUREVSUn0gIlB1c2hlZCBmaWxlOiAke25ld19zaGExfSAtICR7dGl0bGV9XG4iOworCX0gZWxzaWYgKCRleHBvcnRfbWVkaWEpIHsKKwkJJG5ld3JldmlkID0gbXdfdXBsb2FkX2ZpbGUoJGNvbXBsZXRlX2ZpbGVfbmFtZSwgJG5ld19zaGExLAorCQkJCQkgICAkZXh0ZW5zaW9uLCAkcGFnZV9kZWxldGVkLAorCQkJCQkgICAkc3VtbWFyeSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgeypTVERFUlJ9ICJJZ25vcmluZyBtZWRpYSBmaWxlICR7dGl0bGV9XG4iOworCX0KKwkkbmV3cmV2aWQgPSAoJG5ld3JldmlkIG9yICRvbGRyZXZpZCk7CisJcmV0dXJuICgkbmV3cmV2aWQsICdvaycpOworfQorCitzdWIgbXdfcHVzaCB7CisJIyBtdWx0aXBsZSBwdXNoIHN0YXRlbWVudHMgY2FuIGZvbGxvdyBlYWNoIG90aGVyCisJbXkgQHJlZnNzcGVjcyA9IChzaGlmdCwgZ2V0X21vcmVfcmVmcygncHVzaCcpKTsKKwlteSAkcHVzaGVkOworCWZvciBteSAkcmVmc3BlYyAoQHJlZnNzcGVjcykgeworCQlteSAoJGZvcmNlLCAkbG9jYWwsICRyZW1vdGUpID0gJHJlZnNwZWMgPX4gL14oXCspPyhbXjpdKik6KFteOl0qKSQvCisJCSAgICBvciBkaWUoIkludmFsaWQgcmVmc3BlYyBmb3IgcHVzaC4gRXhwZWN0ZWQgPHNyYz46PGRzdD4gb3IgKzxzcmM+Ojxkc3Q+XG4iKTsKKwkJaWYgKCRmb3JjZSkgeworCQkJcHJpbnQgeypTVERFUlJ9ICJXYXJuaW5nOiBmb3JjZWQgcHVzaCBub3QgYWxsb3dlZCBvbiBhIE1lZGlhV2lraS5cbiI7CisJCX0KKwkJaWYgKCRsb2NhbCBlcSBFTVBUWSkgeworCQkJcHJpbnQgeypTVERFUlJ9ICJDYW5ub3QgZGVsZXRlIHJlbW90ZSBicmFuY2ggb24gYSBNZWRpYVdpa2lcbiI7CisJCQlwcmludCB7KlNURE9VVH0gImVycm9yICR7cmVtb3RlfSBjYW5ub3QgZGVsZXRlXG4iOworCQkJbmV4dDsKKwkJfQorCQlpZiAoJHJlbW90ZSBuZSAncmVmcy9oZWFkcy9tYXN0ZXInKSB7CisJCQlwcmludCB7KlNUREVSUn0gIk9ubHkgcHVzaCB0byB0aGUgYnJhbmNoICdtYXN0ZXInIGlzIHN1cHBvcnRlZCBvbiBhIE1lZGlhV2lraVxuIjsKKwkJCXByaW50IHsqU1RET1VUfSAiZXJyb3IgJHtyZW1vdGV9IG9ubHkgbWFzdGVyIGFsbG93ZWRcbiI7CisJCQluZXh0OworCQl9CisJCWlmIChtd19wdXNoX3JldmlzaW9uKCRsb2NhbCwgJHJlbW90ZSkpIHsKKwkJCSRwdXNoZWQgPSAxOworCQl9CisJfQorCisJIyBOb3RpZnkgR2l0IHRoYXQgdGhlIHB1c2ggaXMgZG9uZQorCXByaW50IHsqU1RET1VUfSAiXG4iOworCisJaWYgKCRwdXNoZWQgJiYgJGR1bWJfcHVzaCkgeworCQlwcmludCB7KlNUREVSUn0gIkp1c3QgcHVzaGVkIHNvbWUgcmV2aXNpb25zIHRvIE1lZGlhV2lraS5cbiI7CisJCXByaW50IHsqU1RERVJSfSAiVGhlIHB1c2hlZCByZXZpc2lvbnMgbm93IGhhdmUgdG8gYmUgcmUtaW1wb3J0ZWQsIGFuZCB5b3VyIGN1cnJlbnQgYnJhbmNoXG4iOworCQlwcmludCB7KlNUREVSUn0gIm5lZWRzIHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGVzZSByZS1pbXBvcnRlZCBjb21taXRzLiBZb3UgY2FuIGRvIHRoaXMgd2l0aFxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJcbiI7CisJCXByaW50IHsqU1RERVJSfSAiICBnaXQgcHVsbCAtLXJlYmFzZVxuIjsKKwkJcHJpbnQgeypTVERFUlJ9ICJcbiI7CisJfQorCXJldHVybjsKK30KKworc3ViIG13X3B1c2hfcmV2aXNpb24geworCW15ICRsb2NhbCA9IHNoaWZ0OworCW15ICRyZW1vdGUgPSBzaGlmdDsgIyBhY3R1YWxseSwgdGhpcyBoYXMgdG8gYmUgInJlZnMvaGVhZHMvbWFzdGVyIiBhdCB0aGlzIHBvaW50LgorCW15ICRsYXN0X2xvY2FsX3JldmlkID0gZ2V0X2xhc3RfbG9jYWxfcmV2aXNpb24oKTsKKwlwcmludCB7KlNUREVSUn0gIi5cbiI7ICMgRmluaXNoIHNlbnRlbmNlIHN0YXJ0ZWQgYnkgZ2V0X2xhc3RfbG9jYWxfcmV2aXNpb24oKQorCW15ICRsYXN0X3JlbW90ZV9yZXZpZCA9IGdldF9sYXN0X3JlbW90ZV9yZXZpc2lvbigpOworCW15ICRtd19yZXZpc2lvbiA9ICRsYXN0X3JlbW90ZV9yZXZpZDsKKworCSMgR2V0IHNoYTEgb2YgY29tbWl0IHBvaW50ZWQgYnkgbG9jYWwgSEVBRAorCW15ICRIRUFEX3NoYTEgPSBydW5fZ2l0KCJyZXYtcGFyc2UgJHtsb2NhbH0gMj4vZGV2L251bGwiKTsKKwljaG9tcCgkSEVBRF9zaGExKTsKKwkjIEdldCBzaGExIG9mIGNvbW1pdCBwb2ludGVkIGJ5IHJlbW90ZXMvJHJlbW90ZW5hbWUvbWFzdGVyCisJbXkgJHJlbW90ZW9yaWdpbl9zaGExID0gcnVuX2dpdCgicmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy8ke3JlbW90ZW5hbWV9L21hc3RlciAyPi9kZXYvbnVsbCIpOworCWNob21wKCRyZW1vdGVvcmlnaW5fc2hhMSk7CisKKwlpZiAoJGxhc3RfbG9jYWxfcmV2aWQgPiAwICYmCisJICAgICRsYXN0X2xvY2FsX3JldmlkIDwgJGxhc3RfcmVtb3RlX3JldmlkKSB7CisJCXJldHVybiBlcnJvcl9ub25fZmFzdF9mb3J3YXJkKCRyZW1vdGUpOworCX0KKworCWlmICgkSEVBRF9zaGExIGVxICRyZW1vdGVvcmlnaW5fc2hhMSkgeworCQkjIG5vdGhpbmcgdG8gcHVzaAorCQlyZXR1cm4gMDsKKwl9CisKKwkjIEdldCBldmVyeSBjb21taXQgaW4gYmV0d2VlbiBIRUFEIGFuZCByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciwKKwkjIGluY2x1ZGluZyBIRUFEIGFuZCByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorCW15IEBjb21taXRfcGFpcnMgPSAoKTsKKwlpZiAoJGxhc3RfbG9jYWxfcmV2aWQgPiAwKSB7CisJCW15ICRwYXJzZWRfc2hhMSA9ICRyZW1vdGVvcmlnaW5fc2hhMTsKKwkJIyBGaW5kIGEgcGF0aCBmcm9tIGxhc3QgTWVkaWFXaWtpIGNvbW1pdCB0byBwdXNoZWQgY29tbWl0CisJCXByaW50IHsqU1RERVJSfSAiQ29tcHV0aW5nIHBhdGggZnJvbSBsb2NhbCB0byByZW1vdGUgLi4uXG4iOworCQlteSBAbG9jYWxfYW5jZXN0cnkgPSBzcGxpdCgvXG4vLCBydW5fZ2l0KCJyZXYtbGlzdCAtLWJvdW5kYXJ5IC0tcGFyZW50cyAke2xvY2FsfSBeJHtwYXJzZWRfc2hhMX0iKSk7CisJCW15ICVsb2NhbF9hbmNlc3RyeTsKKwkJZm9yZWFjaCBteSAkbGluZSAoQGxvY2FsX2FuY2VzdHJ5KSB7CisJCQlpZiAobXkgKCRjaGlsZCwgJHBhcmVudHMpID0gJGxpbmUgPX4gL14tPyhbYS1mMC05XSspIChbYS1mMC05IF0rKS8pIHsKKwkJCQlmb3JlYWNoIG15ICRwYXJlbnQgKHNwbGl0KC8gLywgJHBhcmVudHMpKSB7CisJCQkJCSRsb2NhbF9hbmNlc3RyeXskcGFyZW50fSA9ICRjaGlsZDsKKwkJCQl9CisJCQl9IGVsc2lmICghJGxpbmUgPX4gL14oW2EtZjAtOV0rKS8pIHsKKwkJCQlkaWUgIlVuZXhwZWN0ZWQgb3V0cHV0IGZyb20gZ2l0IHJldi1saXN0OiAke2xpbmV9XG4iOworCQkJfQorCQl9CisJCXdoaWxlICgkcGFyc2VkX3NoYTEgbmUgJEhFQURfc2hhMSkgeworCQkJbXkgJGNoaWxkID0gJGxvY2FsX2FuY2VzdHJ5eyRwYXJzZWRfc2hhMX07CisJCQlpZiAoISRjaGlsZCkgeworCQkJCXByaW50IHsqU1RERVJSfSAiQ2Fubm90IGZpbmQgYSBwYXRoIGluIGhpc3RvcnkgZnJvbSByZW1vdGUgY29tbWl0IHRvIGxhc3QgY29tbWl0XG4iOworCQkJCXJldHVybiBlcnJvcl9ub25fZmFzdF9mb3J3YXJkKCRyZW1vdGUpOworCQkJfQorCQkJcHVzaChAY29tbWl0X3BhaXJzLCBbJHBhcnNlZF9zaGExLCAkY2hpbGRdKTsKKwkJCSRwYXJzZWRfc2hhMSA9ICRjaGlsZDsKKwkJfQorCX0gZWxzZSB7CisJCSMgTm8gcmVtb3RlIG1lZGlhd2lraSByZXZpc2lvbi4gRXhwb3J0IHRoZSB3aG9sZQorCQkjIGhpc3RvcnkgKGxpbmVhcml6ZWQgd2l0aCAtLWZpcnN0LXBhcmVudCkKKwkJcHJpbnQgeypTVERFUlJ9ICJXYXJuaW5nOiBubyBjb21tb24gYW5jZXN0b3IsIHB1c2hpbmcgY29tcGxldGUgaGlzdG9yeVxuIjsKKwkJbXkgJGhpc3RvcnkgPSBydW5fZ2l0KCJyZXYtbGlzdCAtLWZpcnN0LXBhcmVudCAtLWNoaWxkcmVuICR7bG9jYWx9Iik7CisJCW15IEBoaXN0b3J5ID0gc3BsaXQoL1xuLywgJGhpc3RvcnkpOworCQlAaGlzdG9yeSA9IEBoaXN0b3J5WzEuLiQjaGlzdG9yeV07CisJCWZvcmVhY2ggbXkgJGxpbmUgKHJldmVyc2UgQGhpc3RvcnkpIHsKKwkJCW15IEBjb21taXRfaW5mb19zcGxpdCA9IHNwbGl0KC9bIFxuXS8sICRsaW5lKTsKKwkJCXB1c2goQGNvbW1pdF9wYWlycywgXEBjb21taXRfaW5mb19zcGxpdCk7CisJCX0KKwl9CisKKwlmb3JlYWNoIG15ICRjb21taXRfaW5mb19zcGxpdCAoQGNvbW1pdF9wYWlycykgeworCQlteSAkc2hhMV9jaGlsZCA9IEB7JGNvbW1pdF9pbmZvX3NwbGl0fVswXTsKKwkJbXkgJHNoYTFfY29tbWl0ID0gQHskY29tbWl0X2luZm9fc3BsaXR9WzFdOworCQlteSAkZGlmZl9pbmZvcyA9IHJ1bl9naXQoImRpZmYtdHJlZSAtciAtLXJhdyAteiAke3NoYTFfY2hpbGR9ICR7c2hhMV9jb21taXR9Iik7CisJCSMgVE9ETzogd2UgY291bGQgZGV0ZWN0IHJlbmFtZSwgYW5kIGVuY29kZSB0aGVtIHdpdGggYSAjcmVkaXJlY3Qgb24gdGhlIHdpa2kuCisJCSMgVE9ETzogZm9yIG5vdywgaXQncyBqdXN0IGEgZGVsZXRlK2FkZAorCQlteSBAZGlmZl9pbmZvX2xpc3QgPSBzcGxpdCgvXDAvLCAkZGlmZl9pbmZvcyk7CisJCSMgS2VlcCB0aGUgc3ViamVjdCBsaW5lIG9mIHRoZSBjb21taXQgbWVzc2FnZSBhcyBtZWRpYXdpa2kgY29tbWVudCBmb3IgdGhlIHJldmlzaW9uCisJCW15ICRjb21taXRfbXNnID0gcnVuX2dpdChxcShsb2cgLS1uby13YWxrIC0tZm9ybWF0PSIlcyIgJHtzaGExX2NvbW1pdH0pKTsKKwkJY2hvbXAoJGNvbW1pdF9tc2cpOworCQkjIFB1c2ggZXZlcnkgYmxvYgorCQl3aGlsZSAoQGRpZmZfaW5mb19saXN0KSB7CisJCQlteSAkc3RhdHVzOworCQkJIyBnaXQgZGlmZi10cmVlIC16IGdpdmVzIGFuIG91dHB1dCBsaWtlCisJCQkjIDxtZXRhZGF0YT5cMDxmaWxlbmFtZTE+XDAKKwkJCSMgPG1ldGFkYXRhPlwwPGZpbGVuYW1lMj5cMAorCQkJIyBhbmQgd2UndmUgc3BsaXQgb24gXDAuCisJCQlteSAkaW5mbyA9IHNoaWZ0KEBkaWZmX2luZm9fbGlzdCk7CisJCQlteSAkZmlsZSA9IHNoaWZ0KEBkaWZmX2luZm9fbGlzdCk7CisJCQkoJG13X3JldmlzaW9uLCAkc3RhdHVzKSA9IG13X3B1c2hfZmlsZSgkaW5mbywgJGZpbGUsICRjb21taXRfbXNnLCAkbXdfcmV2aXNpb24pOworCQkJaWYgKCRzdGF0dXMgZXEgJ25vbi1mYXN0LWZvcndhcmQnKSB7CisJCQkJIyB3ZSBtYXkgYWxyZWFkeSBoYXZlIHNlbnQgcGFydCBvZiB0aGUKKwkJCQkjIGNvbW1pdCB0byBNZWRpYVdpa2ksIGJ1dCBpdCdzIHRvbworCQkJCSMgbGF0ZSB0byBjYW5jZWwgaXQuIFN0b3AgdGhlIHB1c2ggaW4KKwkJCQkjIHRoZSBtaWRkbGUsIGJ1dCBzdGlsbCBnaXZlIGFuCisJCQkJIyBhY2N1cmF0ZSBlcnJvciBtZXNzYWdlLgorCQkJCXJldHVybiBlcnJvcl9ub25fZmFzdF9mb3J3YXJkKCRyZW1vdGUpOworCQkJfQorCQkJaWYgKCRzdGF0dXMgbmUgJ29rJykgeworCQkJCWRpZSgiVW5rbm93biBlcnJvciBmcm9tIG13X3B1c2hfZmlsZSgpXG4iKTsKKwkJCX0KKwkJfQorCQlpZiAoISRkdW1iX3B1c2gpIHsKKwkJCXJ1bl9naXQocXEobm90ZXMgLS1yZWY9JHtyZW1vdGVuYW1lfS9tZWRpYXdpa2kgYWRkIC1mIC1tICJtZWRpYXdpa2lfcmV2aXNpb246ICR7bXdfcmV2aXNpb259IiAke3NoYTFfY29tbWl0fSkpOworCQl9CisJfQorCisJcHJpbnQgeypTVERPVVR9ICJvayAke3JlbW90ZX1cbiI7CisJcmV0dXJuIDE7Cit9CisKK3N1YiBnZXRfYWxsb3dlZF9maWxlX2V4dGVuc2lvbnMgeworCSRtZWRpYXdpa2kgPSBjb25uZWN0X21heWJlKCRtZWRpYXdpa2ksICRyZW1vdGVuYW1lLCAkdXJsKTsKKworCW15ICRxdWVyeSA9IHsKKwkJYWN0aW9uID0+ICdxdWVyeScsCisJCW1ldGEgPT4gJ3NpdGVpbmZvJywKKwkJc2lwcm9wID0+ICdmaWxlZXh0ZW5zaW9ucycKKwkJfTsKKwlteSAkcmVzdWx0ID0gJG1lZGlhd2lraS0+YXBpKCRxdWVyeSk7CisJbXkgQGZpbGVfZXh0ZW5zaW9ucyA9IG1hcCB7ICRfLT57ZXh0fX0gQHskcmVzdWx0LT57cXVlcnl9LT57ZmlsZWV4dGVuc2lvbnN9fTsKKwlteSAlaGFzaEZpbGUgPSBtYXAgeyAkXyA9PiAxIH0gQGZpbGVfZXh0ZW5zaW9uczsKKworCXJldHVybiAlaGFzaEZpbGU7Cit9CisKKyMgSW4gbWVtb3J5IGNhY2hlIGZvciBNZWRpYVdpa2kgbmFtZXNwYWNlIGlkcy4KK215ICVuYW1lc3BhY2VfaWQ7CisKKyMgTmFtZXNwYWNlcyB3aG9zZSBpZCBpcyBjYWNoZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZQorIyAodG8gYXZvaWQgZHVwbGljYXRlcykKK215ICVjYWNoZWRfbXdfbmFtZXNwYWNlX2lkOworCisjIFJldHVybiBNZWRpYVdpa2kgaWQgZm9yIGEgY2Fub25pY2FsIG5hbWVzcGFjZSBuYW1lLgorIyBFeC46ICJGaWxlIiwgIlByb2plY3QiLgorc3ViIGdldF9td19uYW1lc3BhY2VfaWQgeworCSRtZWRpYXdpa2kgPSBjb25uZWN0X21heWJlKCRtZWRpYXdpa2ksICRyZW1vdGVuYW1lLCAkdXJsKTsKKwlteSAkbmFtZSA9IHNoaWZ0OworCisJaWYgKCFleGlzdHMgJG5hbWVzcGFjZV9pZHskbmFtZX0pIHsKKwkJIyBMb29rIGF0IGNvbmZpZ3VyYXRpb24gZmlsZSwgaWYgdGhlIHJlY29yZCBmb3IgdGhhdCBuYW1lc3BhY2UgaXMKKwkJIyBhbHJlYWR5IGNhY2hlZC4gTmFtZXNwYWNlcyBhcmUgc3RvcmVkIGluIGZvcm06CisJCSMgIk5hbWVfb2ZfbmFtZXNwYWNlOklkX25hbWVzcGFjZSIsIGV4LjogIkZpbGU6NiIuCisJCW15IEB0ZW1wID0gc3BsaXQoL1xuLywKKwkJCQkgcnVuX2dpdCgiY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuJHtyZW1vdGVuYW1lfS5uYW1lc3BhY2VDYWNoZSIpKTsKKwkJY2hvbXAoQHRlbXApOworCQlmb3JlYWNoIG15ICRucyAoQHRlbXApIHsKKwkJCW15ICgkbiwgJGlkKSA9IHNwbGl0KC86LywgJG5zKTsKKwkJCWlmICgkaWQgZXEgJ25vdEFOYW1lU3BhY2UnKSB7CisJCQkJJG5hbWVzcGFjZV9pZHskbn0gPSB7aXNfbmFtZXNwYWNlID0+IDB9OworCQkJfSBlbHNlIHsKKwkJCQkkbmFtZXNwYWNlX2lkeyRufSA9IHtpc19uYW1lc3BhY2UgPT4gMSwgaWQgPT4gJGlkfTsKKwkJCX0KKwkJCSRjYWNoZWRfbXdfbmFtZXNwYWNlX2lkeyRufSA9IDE7CisJCX0KKwl9CisKKwlpZiAoIWV4aXN0cyAkbmFtZXNwYWNlX2lkeyRuYW1lfSkgeworCQlwcmludCB7KlNUREVSUn0gIk5hbWVzcGFjZSAke25hbWV9IG5vdCBmb3VuZCBpbiBjYWNoZSwgcXVlcnlpbmcgdGhlIHdpa2kgLi4uXG4iOworCQkjIE5TIG5vdCBmb3VuZCA9PiBnZXQgbmFtZXNwYWNlIGlkIGZyb20gTVcgYW5kIHN0b3JlIGl0IGluCisJICAgICAgICAjIGNvbmZpZ3VyYXRpb24gZmlsZS4KKwkgICAgICAgIG15ICRxdWVyeSA9IHsKKwkgICAgICAgICAgICAgICAgYWN0aW9uID0+ICdxdWVyeScsCisJICAgICAgICAgICAgICAgIG1ldGEgPT4gJ3NpdGVpbmZvJywKKwkgICAgICAgICAgICAgICAgc2lwcm9wID0+ICduYW1lc3BhY2VzJworCSAgICAgICAgfTsKKwkgICAgICAgIG15ICRyZXN1bHQgPSAkbWVkaWF3aWtpLT5hcGkoJHF1ZXJ5KTsKKworCSAgICAgICAgd2hpbGUgKG15ICgkaWQsICRucykgPSBlYWNoKCV7JHJlc3VsdC0+e3F1ZXJ5fS0+e25hbWVzcGFjZXN9fSkpIHsKKwkgICAgICAgICAgICAgICAgaWYgKGRlZmluZWQoJG5zLT57aWR9KSAmJiBkZWZpbmVkKCRucy0+e2Nhbm9uaWNhbH0pKSB7CisJCQkJJG5hbWVzcGFjZV9pZHskbnMtPntjYW5vbmljYWx9fSA9IHtpc19uYW1lc3BhY2UgPT4gMSwgaWQgPT4gJG5zLT57aWR9fTsKKwkJCQlpZiAoJG5zLT57JyonfSkgeworCQkJCQkjIGFsaWFzIChlLmcuIGZyZW5jaCBGaWNoaWVyOiBhcyBhbGlhcyBmb3IgY2Fub25pY2FsIEZpbGU6KQorCQkJCQkkbmFtZXNwYWNlX2lkeyRucy0+eycqJ319ID0ge2lzX25hbWVzcGFjZSA9PiAxLCBpZCA9PiAkbnMtPntpZH19OworCQkJCX0KKwkJCX0KKwkgICAgICAgIH0KKwl9CisKKwlteSAkbnMgPSAkbmFtZXNwYWNlX2lkeyRuYW1lfTsKKwlteSAkaWQ7CisKKwlpZiAoIWRlZmluZWQgJG5zKSB7CisJCXByaW50IHsqU1RERVJSfSAiTm8gc3VjaCBuYW1lc3BhY2UgJHtuYW1lfSBvbiBNZWRpYVdpa2kuXG4iOworCQkkbnMgPSB7aXNfbmFtZXNwYWNlID0+IDB9OworCQkkbmFtZXNwYWNlX2lkeyRuYW1lfSA9ICRuczsKKwl9CisKKwlpZiAoJG5zLT57aXNfbmFtZXNwYWNlfSkgeworCQkkaWQgPSAkbnMtPntpZH07CisJfQorCisJIyBTdG9yZSAibm90QU5hbWVTcGFjZSIgYXMgc3BlY2lhbCB2YWx1ZSBmb3IgaW5leGlzdGluZyBuYW1lc3BhY2VzCisJbXkgJHN0b3JlX2lkID0gKCRpZCB8fCAnbm90QU5hbWVTcGFjZScpOworCisJIyBTdG9yZSBleHBsaWNpdGx5IHJlcXVlc3RlZCBuYW1lc3BhY2VzIG9uIGRpc2sKKwlpZiAoIWV4aXN0cyAkY2FjaGVkX213X25hbWVzcGFjZV9pZHskbmFtZX0pIHsKKwkJcnVuX2dpdChxcShjb25maWcgLS1hZGQgcmVtb3RlLiR7cmVtb3RlbmFtZX0ubmFtZXNwYWNlQ2FjaGUgIiR7bmFtZX06JHtzdG9yZV9pZH0iKSk7CisJCSRjYWNoZWRfbXdfbmFtZXNwYWNlX2lkeyRuYW1lfSA9IDE7CisJfQorCXJldHVybiAkaWQ7Cit9CisKK3N1YiBnZXRfbXdfbmFtZXNwYWNlX2lkX2Zvcl9wYWdlIHsKKwlteSAkbmFtZXNwYWNlID0gc2hpZnQ7CisJaWYgKCRuYW1lc3BhY2UgPX4gL14oW146XSopOi8pIHsKKwkJcmV0dXJuIGdldF9td19uYW1lc3BhY2VfaWQoJG5hbWVzcGFjZSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuOworCX0KK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnR4dCBiL2NvbnRyaWIvbXctdG8tZ2l0L2dpdC1yZW1vdGUtbWVkaWF3aWtpLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2I3ZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvZ2l0LXJlbW90ZS1tZWRpYXdpa2kudHh0CkBAIC0wLDAgKzEsNyBAQAorR2l0LU1lZGlhd2lraSBpcyBhIHByb2plY3Qgd2hpY2ggYWltcyB0aGUgY3JlYXRpb24gb2YgYSBnYXRlCitiZXR3ZWVuIGdpdCBhbmQgbWVkaWF3aWtpLCBhbGxvd2luZyBnaXQgdXNlcnMgdG8gcHVzaCBhbmQgcHVsbAorb2JqZWN0cyBmcm9tIG1lZGlhd2lraSBqdXN0IGFzIG9uZSB3b3VsZCBkbyB3aXRoIGEgY2xhc3NpYyBnaXQKK3JlcG9zaXRvcnkgdGhhbmtzIHRvIHJlbW90ZS1oZWxwZXJzLgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiwgdmlzaXQgdGhlIHdpa2kgYXQKK2h0dHBzOi8vZ2l0aHViLmNvbS9tb3kvR2l0LU1lZGlhd2lraS93aWtpCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90Ly5naXRpZ25vcmUgYi9jb250cmliL213LXRvLWdpdC90Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhNDBiNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKK1dFQi8KK3dpa2kvCit0cmFzaCBkaXJlY3RvcnkudCovCit0ZXN0LXJlc3VsdHMvCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L01ha2VmaWxlIGIvY29udHJpYi9tdy10by1naXQvdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDIyMjAzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC9NYWtlZmlsZQpAQCAtMCwwICsxLDMxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMgorIyAgICAgQ2hhcmxlcyBSb3Vzc2VsIDxjaGFybGVzLnJvdXNzZWxAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gQ2F0aGVicmFzIDxzaW1vbi5jYXRoZWJyYXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgSnVsaWVuIEtoYXlhdCA8anVsaWVuLmtoYXlhdEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBHdWlsbGF1bWUgU2FzZHkgPGd1aWxsYXVtZS5zYXNkeUBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBQZXJyYXQgPHNpbW9uLnBlcnJhdEBlbnNpbWFnLmltYWcuZnI+CisjCisjIyBUZXN0IGdpdC1yZW1vdGUtbWVkaWF3aWtpCisKK2FsbDogdGVzdAorCistaW5jbHVkZSAuLi8uLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsKKworVCA9ICQod2lsZGNhcmQgdFswLTldWzAtOV1bMC05XVswLTldLSouc2gpCisKKy5QSE9OWTogaGVscCB0ZXN0IGNsZWFuIGFsbAorCitoZWxwOgorCUBlY2hvICdSdW4gIiQoTUFLRSkgdGVzdCIgdG8gbGF1bmNoIHRlc3Qgc2NyaXB0cycKKwlAZWNobyAnUnVuICIkKE1BS0UpIGNsZWFuIiB0byByZW1vdmUgdHJhc2ggZm9sZGVycycKKwordGVzdDoKKwlAZm9yIHQgaW4gJChUKTsgZG8gXAorCQllY2hvICIkJHQiOyBcCisJCSIuLyQkdCIgfHwgZXhpdCAxOyBcCisJZG9uZQorCitjbGVhbjoKKwkkKFJNKSAtciAndHJhc2ggZGlyZWN0b3J5Jy4qCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L1JFQURNRSBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZjZlZTUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L1JFQURNRQpAQCAtMCwwICsxLDEyNCBAQAorVGVzdHMgZm9yIE1lZGlhd2lraS10by1HaXQKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCitUaGlzIG1hbnVhbCBkZXNjcmliZXMgaG93IHRvIGluc3RhbGwgdGhlIGdpdC1yZW1vdGUtbWVkaWF3aWtpIHRlc3QKK2Vudmlyb25tZW50IG9uIGEgbWFjaGluZSB3aXRoIGdpdCBpbnN0YWxsZWQgb24gaXQuCisKK1ByZXJlcXVpc2l0ZQorLS0tLS0tLS0tLS0tCisKK0luIG9yZGVyIHRvIHJ1biB0aGlzIHRlc3QgZW52aXJvbm1lbnQgY29ycmVjdGx5LCB5b3Ugd2lsbCBuZWVkIHRvCitpbnN0YWxsIHRoZSBmb2xsb3dpbmcgcGFja2FnZXMgKERlYmlhbi9VYnVudHUgbmFtZXMsIG1heSBuZWVkIHRvIGJlCithZGFwdGVkIGZvciBhbm90aGVyIGRpc3RyaWJ1dGlvbik6CisKKyogbGlnaHR0cGQKKyogcGhwNQorKiBwaHA1LWNnaQorKiBwaHA1LWNsaQorKiBwaHA1LWN1cmwKKyogcGhwNS1zcWxpdGUKKworUHJpbmNpcGxlcyBhbmQgVGVjaG5pY2FsIENob2ljZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB0ZXN0IGVudmlyb25tZW50IG1ha2VzIGl0IGVhc3kgdG8gaW5zdGFsbCBhbmQgbWFuaXB1bGF0ZSBvbmUgb3IKK3NldmVyYWwgTWVkaWFXaWtpIGluc3RhbmNlcy4gVG8gYWxsb3cgZGV2ZWxvcGVycyB0byBydW4gdGhlIHRlc3RzdWl0ZQorZWFzaWx5LCB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3QgcmVxdWlyZSByb290IHByaXZpbGVnZSAoZXhjZXB0IHRvCitpbnN0YWxsIHRoZSByZXF1aXJlZCBwYWNrYWdlcyBpZiBuZWVkZWQpLiBJdCBzdGFydHMgYSB3ZWJzZXJ2ZXIKK2luc3RhbmNlIG9uIHRoZSB1c2VyJ3MgYWNjb3VudCAodXNpbmcgbGlnaHR0cGQgZ3JlYXRseSBoZWxwcyBmb3IKK3RoYXQpLCBhbmQgZG9lcyBub3QgbmVlZCBhIHNlcGFyYXRlIGRhdGFiYXNlIGRhZW1vbiAodGhhbmtzIHRvIHRoZSB1c2UKK29mIHNxbGl0ZSkuCisKK1J1biB0aGUgdGVzdCBlbnZpcm9ubWVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luc3RhbGwgYSBuZXcgd2lraQorfn5+fn5+fn5+fn5+fn5+fn5+CisKK09uY2UgeW91IGhhdmUgYWxsIHRoZSBwcmVyZXF1aXNpdGUsIHlvdSBuZWVkIHRvIGluc3RhbGwgYSBNZWRpYVdpa2kKK2luc3RhbmNlIG9uIHlvdXIgbWFjaGluZS4gSWYgeW91IGFscmVhZHkgaGF2ZSBvbmUsIGl0IGlzIHN0aWxsCitzdHJvbmdseSByZWNvbW1lbmRlZCB0byBpbnN0YWxsIG9uZSB3aXRoIHRoZSBzY3JpcHQgcHJvdmlkZWQuIEhlcmUncworaG93IHRvIHdvcmsgaXQ6CisKK2EuIGNoYW5nZSBkaXJlY3RvcnkgdG8gY29udHJpYi9tdy10by1naXQvdC8KK2IuIGlmIG5lZWRlZCwgZWRpdCB0ZXN0LmNvbmZpZyB0byBjaG9vc2UgeW91ciBpbnN0YWxsYXRpb24gcGFyYW1ldGVycworYy4gcnVuIGAuL2luc3RhbGwtd2lraS5zaCBpbnN0YWxsYAorZC4gY2hlY2sgb24geW91ciBmYXZvdXJpdGUgd2ViIGJyb3dzZXIgaWYgeW91ciB3aWtpIGlzIGNvcnJlY3RseQorICAgaW5zdGFsbGVkLgorCitSZW1vdmUgYW4gZXhpc3Rpbmcgd2lraQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworRWRpdCB0aGUgZmlsZSB0ZXN0LmNvbmZpZyB0byBmaXQgdGhlIHdpa2kgeW91IHdhbnQgdG8gZGVsZXRlLCBhbmQgdGhlbgorZXhlY3V0ZSB0aGUgY29tbWFuZCBgLi9pbnN0YWxsLXdpa2kuc2ggZGVsZXRlYCBmcm9tIHRoZQorY29udHJpYi9tdy10by1naXQvdCBkaXJlY3RvcnkuCisKK1J1biB0aGUgZXhpc3RpbmcgdGVzdHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIHByb3ZpZGVkIHRlc3RzIGFyZSBjdXJyZW50bHkgaW4gdGhlIGBjb250cmliL213LXRvLWdpdC90YCBkaXJlY3RvcnkuCitUaGUgZmlsZXMgYXJlIGFsbCB0aGUgdDkzNlswLTldLSouc2ggc2hlbGwgc2NyaXB0cy4KKworYS4gUnVuIGFsbCB0ZXN0czoKK1RvIGRvIHNvLCBydW4gIm1ha2UgdGVzdCIgZnJvbSB0aGUgY29udHJpYi9tdy10by1naXQvIGRpcmVjdG9yeS4KKworYi4gUnVuIGEgc3BlY2lmaWMgdGVzdDoKK1RvIHJ1biBhIGdpdmVuIHRlc3QgPHRlc3RfbmFtZT4sIHJ1biAuLzx0ZXN0X25hbWU+IGZyb20gdGhlCitjb250cmliL213LXRvLWdpdC90IGRpcmVjdG9yeS4KKworSG93IHRvIGNyZWF0ZSBuZXcgdGVzdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F2YWlsYWJsZSBmdW5jdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIHRlc3QgZW52aXJvbm1lbnQgb2YgZ2l0LXJlbW90ZS1tZWRpYXdpa2kgcHJvdmlkZXMgc29tZSBmdW5jdGlvbnMKK3VzZWZ1bCB0byB0ZXN0IGl0cyBiZWhhdmlvdXIuIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGZ1bmN0aW9ucycKK3BhcmFtZXRlcnMsIHBsZWFzZSByZWZlciB0byB0aGUgYHRlc3QtZ2l0bXctbGliLnNoYCBhbmQKK2B0ZXN0LWdpdG13LnBsYCBmaWxlcy4KKworKiogYHRlc3RfY2hlY2tfd2lraV9wcmVjb25kYDoKK0NoZWNrIGlmIHRoZSB0ZXN0cyBtdXN0IGJlIHNraXBwZWQgb3Igbm90LiBQbGVhc2UgdXNlIHRoaXMgZnVuY3Rpb24KK2F0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBuZXcgdGVzdCBmaWxlLgorCisqKiBgd2lraV9nZXRwYWdlYDoKK0ZldGNoIGEgZ2l2ZW4gcGFnZSBmcm9tIHRoZSB3aWtpIGFuZCBwdXRzIGl0cyBjb250ZW50IGluIHRoZQorZGlyZWN0b3J5IGluIHBhcmFtZXRlci4KKworKiogYHdpa2lfZGVsZXRlX3BhZ2VgOgorRGVsZXRlIGEgZ2l2ZW4gcGFnZSBmcm9tIHRoZSB3aWtpLgorCisqKiBgd2lraV9lZGl0X3BhZ2VgOgorQ3JlYXRlIG9yIG1vZGlmeSBhIGdpdmVuIHBhZ2UgaW4gdGhlIHdpa2kuIFlvdSBjYW4gc3BlY2lmeSBzZXZlcmFsCitwYXJhbWV0ZXJzIGxpa2UgYSBzdW1tYXJ5IGZvciB0aGUgcGFnZSBlZGl0aW9uLCBvciBhZGQgdGhlIHBhZ2UgdG8gYQorZ2l2ZW4gY2F0ZWdvcnkuCitTZWUgdGVzdC1naXRtdy5wbCBmb3IgbW9yZSBkZXRhaWxzLgorCisqKiBgd2lraV9nZXRhbGxwYWdlYDoKK0ZldGNoIGFsbCBwYWdlcyBmcm9tIHRoZSB3aWtpIGludG8gYSBnaXZlbiBkaXJlY3RvcnkuIFRoZSBkaXJlY3RvcnkKK2lzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgZXhpc3RzLgorCisqKiBgdGVzdF9kaWZmX2RpcmVjdG9yaWVzYDoKK0NvbXBhcmUgdGhlIGNvbnRlbnQgb2YgdHdvIGRpcmVjdG9yaWVzLiBUaGUgY29udGVudCBtdXN0IGJlIHRoZSBzYW1lLgorVXNlIHRoaXMgZnVuY3Rpb24gdG8gY29tcGFyZSB0aGUgY29udGVudCBvZiBhIGdpdCBkaXJlY3RvcnkgYW5kIGEgd2lraQorb25lIGNyZWF0ZWQgYnkgd2lraV9nZXRhbGxwYWdlLgorCisqKiBgdGVzdF9jb250YWluc19OX2ZpbGVzYDoKK0NoZWNrIGlmIHRoZSBnaXZlbiBkaXJlY3RvcnkgY29udGFpbnMgYSBnaXZlbiBudW1iZXIgb2YgZmlsZS4KKworKiogYHdpa2lfcGFnZV9leGlzdHNgOgorVGVzdHMgaWYgYSBnaXZlbiBwYWdlIGV4aXN0cyBvbiB0aGUgd2lraS4KKworKiogYHdpa2lfcmVzZXRgOgorUmVzZXQgdGhlIHdpa2ksIGkuZS4gZmx1c2ggdGhlIGRhdGFiYXNlLiBVc2UgdGhpcyBmdW5jdGlvbiBhdCB0aGUKK2JlZ2lubmluZyBvZiBlYWNoIG5ldyB0ZXN0LCBleGNlcHQgaWYgdGhlIHRlc3QgcmUtdXNlcyB0aGUgc2FtZSB3aWtpCisoYW5kIGhpc3RvcnkpIGFzIHRoZSBwcmV2aW91cyB0ZXN0LgorCitIb3cgdG8gd3JpdGUgYSBuZXcgdGVzdAorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworUGxlYXNlLCBmb2xsb3cgdGhlIHN0YW5kYXJkcyBnaXZlbiBieSBnaXQuIFNlZSBnaXQvdC9SRUFETUUuCitOZXcgZmlsZSBzaG91bGQgYmUgbmFtZWQgYXMgdDkzNlswLTldLSouc2guCitCZSBzdXJlIHRvIHJlc2V0IHlvdXIgd2lraSByZWd1bGFyeSB3aXRoIHRoZSBmdW5jdGlvbiBgd2lraV9yZXNldGAuCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyMTUyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKworIyBUaGlzIHNjcmlwdCBpbnN0YWxscyBvciBkZWxldGVzIGEgTWVkaWFXaWtpIG9uIHlvdXIgY29tcHV0ZXIuCisjIEl0IHJlcXVpcmVzIGEgd2ViIHNlcnZlciB3aXRoIFBIUCBhbmQgU1FMaXRlIHJ1bm5pbmcuIEluIGFkZGl0aW9uLCBpZiB5b3UKKyMgZG8gbm90IGhhdmUgTWVkaWFXaWtpIHNvdXJjZXMgb24geW91ciBjb21wdXRlciwgdGhlIG9wdGlvbiAnaW5zdGFsbCcKKyMgZG93bmxvYWRzIHRoZW0gZm9yIHlvdS4KKyMgUGxlYXNlIHNldCB0aGUgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgaW4gLi90ZXN0LWdpdG13LWxpYi5zaAorCitXSUtJX1RFU1RfRElSPSQoY2QgIiQoZGlybmFtZSAiJDAiKSIgJiYgcHdkKQorCitpZiB0ZXN0IC16ICIkV0lLSV9URVNUX0RJUiIKK3RoZW4KKwlXSUtJX1RFU1RfRElSPS4KK2ZpCisKKy4gIiRXSUtJX1RFU1RfRElSIi90ZXN0LWdpdG13LWxpYi5zaAordXNhZ2UgKCkgeworCWVjaG8gInVzYWdlOiAiCisJZWNobyAiCS4vaW5zdGFsbC13aWtpLnNoIDxpbnN0YWxsIHwgZGVsZXRlIHwgLS1oZWxwPiIKKwllY2hvICIJCWluc3RhbGwgfCAtaSA6CUluc3RhbGwgYSB3aWtpIG9uIHlvdXIgY29tcHV0ZXIuIgorCWVjaG8gIgkJZGVsZXRlIHwgLWQgOiBEZWxldGUgdGhlIHdpa2kgYW5kIGFsbCBpdHMgcGFnZXMgYW5kICIKKwllY2hvICIJCQljb250ZW50LiIKKwllY2hvICIJCXN0YXJ0ICB8IC1zIDogU3RhcnQgdGhlIHByZXZpb3VzbHkgY29uZmlndXJlZCBsaWdodHRwZCBkYWVtb24iCisJZWNobyAiCQlzdG9wICAgICAgICA6IFN0b3AgbGlnaHR0cGQgZGFlbW9uLiIKK30KKworCisjIEFyZ3VtZW50OiBpbnN0YWxsLCBkZWxldGUsIC0taGVscCB8IC1oCitjYXNlICIkMSIgaW4KKwkiaW5zdGFsbCIgfCAiLWkiKQorCQl3aWtpX2luc3RhbGwKKwkJZXhpdCAwCisJCTs7CisJImRlbGV0ZSIgfCAiLWQiKQorCQl3aWtpX2RlbGV0ZQorCQlleGl0IDAKKwkJOzsKKwkic3RhcnQiIHwgIi1zIikKKwkJc3RhcnRfbGlnaHR0cGQKKwkJZXhpdAorCQk7OworCSJzdG9wIikKKwkJc3RvcF9saWdodHRwZAorCQlleGl0CisJCTs7CisJIi0taGVscCIgfCAiLWgiKQorCQl1c2FnZQorCQlleGl0IDAKKwkJOzsKKwkqKQorCQllY2hvICJJbnZhbGlkIGFyZ3VtZW50OiAkMSIKKwkJdXNhZ2UKKwkJZXhpdCAxCisJCTs7Citlc2FjCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS8uZ2l0aWdub3JlIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWEyYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACit3aWtpZGIuc3FsaXRlCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS9Mb2NhbFNldHRpbmdzLnBocCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL0xvY2FsU2V0dGluZ3MucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NWU0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L2luc3RhbGwtd2lraS9Mb2NhbFNldHRpbmdzLnBocApAQCAtMCwwICsxLDEyOSBAQAorPD9waHAKKyMgVGhpcyBmaWxlIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSB0aGUgTWVkaWFXaWtpIDEuMTkuMAorIyBpbnN0YWxsZXIuIElmIHlvdSBtYWtlIG1hbnVhbCBjaGFuZ2VzLCBwbGVhc2Uga2VlcCB0cmFjayBpbiBjYXNlIHlvdQorIyBuZWVkIHRvIHJlY3JlYXRlIHRoZW0gbGF0ZXIuCisjCisjIFNlZSBpbmNsdWRlcy9EZWZhdWx0U2V0dGluZ3MucGhwIGZvciBhbGwgY29uZmlndXJhYmxlIHNldHRpbmdzCisjIGFuZCB0aGVpciBkZWZhdWx0IHZhbHVlcywgYnV0IGRvbid0IGZvcmdldCB0byBtYWtlIGNoYW5nZXMgaW4gX3RoaXNfCisjIGZpbGUsIG5vdCB0aGVyZS4KKyMKKyMgRnVydGhlciBkb2N1bWVudGF0aW9uIGZvciBjb25maWd1cmF0aW9uIHNldHRpbmdzIG1heSBiZSBmb3VuZCBhdDoKKyMgaHR0cDovL3d3dy5tZWRpYXdpa2kub3JnL3dpa2kvTWFudWFsOkNvbmZpZ3VyYXRpb25fc2V0dGluZ3MKKworIyBQcm90ZWN0IGFnYWluc3Qgd2ViIGVudHJ5CitpZiAoICFkZWZpbmVkKCAnTUVESUFXSUtJJyApICkgeworCWV4aXQ7Cit9CisKKyMjIFVuY29tbWVudCB0aGlzIHRvIGRpc2FibGUgb3V0cHV0IGNvbXByZXNzaW9uCisjICR3Z0Rpc2FibGVPdXRwdXRDb21wcmVzc2lvbiA9IHRydWU7CisKKyR3Z1NpdGVuYW1lICAgICAgPSAiR2l0LU1lZGlhV2lraS1UZXN0IjsKKyR3Z01ldGFOYW1lc3BhY2UgPSAiR2l0LU1lZGlhV2lraS1UZXN0IjsKKworIyMgVGhlIFVSTCBiYXNlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSB3aWtpOworIyMgZGVmYXVsdHMgZm9yIGFsbCBydW50aW1lIFVSTCBwYXRocyBhcmUgYmFzZWQgb2ZmIG9mIHRoaXMuCisjIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjdXN0b21pemluZyB0aGUgVVJMcyBwbGVhc2Ugc2VlOgorIyMgaHR0cDovL3d3dy5tZWRpYXdpa2kub3JnL3dpa2kvTWFudWFsOlNob3J0X1VSTAorJHdnU2NyaXB0UGF0aCAgICAgICA9ICJAV0dfU0NSSVBUX1BBVEhAIjsKKyR3Z1NjcmlwdEV4dGVuc2lvbiAgPSAiLnBocCI7CisKKyMjIFRoZSBwcm90b2NvbCBhbmQgc2VydmVyIG5hbWUgdG8gdXNlIGluIGZ1bGx5LXF1YWxpZmllZCBVUkxzCiskd2dTZXJ2ZXIgICAgICAgICAgID0gIkBXR19TRVJWRVJAIjsKKworIyMgVGhlIHJlbGF0aXZlIFVSTCBwYXRoIHRvIHRoZSBza2lucyBkaXJlY3RvcnkKKyR3Z1N0eWxlUGF0aCAgICAgICAgPSAiJHdnU2NyaXB0UGF0aC9za2lucyI7CisKKyMjIFRoZSByZWxhdGl2ZSBVUkwgcGF0aCB0byB0aGUgbG9nby4gIE1ha2Ugc3VyZSB5b3UgY2hhbmdlIHRoaXMgZnJvbSB0aGUgZGVmYXVsdCwKKyMjIG9yIGVsc2UgeW91J2xsIG92ZXJ3cml0ZSB5b3VyIGxvZ28gd2hlbiB5b3UgdXBncmFkZSEKKyR3Z0xvZ28gICAgICAgICAgICAgPSAiJHdnU3R5bGVQYXRoL2NvbW1vbi9pbWFnZXMvd2lraS5wbmciOworCisjIyBVUE8gbWVhbnM6IHRoaXMgaXMgYWxzbyBhIHVzZXIgcHJlZmVyZW5jZSBvcHRpb24KKworJHdnRW5hYmxlRW1haWwgICAgICA9IHRydWU7Ciskd2dFbmFibGVVc2VyRW1haWwgID0gdHJ1ZTsgIyBVUE8KKworJHdnRW1lcmdlbmN5Q29udGFjdCA9ICJhcGFjaGVAbG9jYWxob3N0IjsKKyR3Z1Bhc3N3b3JkU2VuZGVyICAgPSAiYXBhY2hlQGxvY2FsaG9zdCI7CisKKyR3Z0Vub3RpZlVzZXJUYWxrICAgICAgPSBmYWxzZTsgIyBVUE8KKyR3Z0Vub3RpZldhdGNobGlzdCAgICAgPSBmYWxzZTsgIyBVUE8KKyR3Z0VtYWlsQXV0aGVudGljYXRpb24gPSB0cnVlOworCisjIyBEYXRhYmFzZSBzZXR0aW5ncworJHdnREJ0eXBlICAgICAgICAgICA9ICJzcWxpdGUiOworJHdnREJzZXJ2ZXIgICAgICAgICA9ICIiOworJHdnREJuYW1lICAgICAgICAgICA9ICJAV0dfU1FMSVRFX0RBVEFGSUxFQCI7Ciskd2dEQnVzZXIgICAgICAgICAgID0gIiI7Ciskd2dEQnBhc3N3b3JkICAgICAgID0gIiI7CisKKyMgU1FMaXRlLXNwZWNpZmljIHNldHRpbmdzCiskd2dTUUxpdGVEYXRhRGlyICAgID0gIkBXR19TUUxJVEVfREFUQURJUkAiOworCisKKyMjIFNoYXJlZCBtZW1vcnkgc2V0dGluZ3MKKyR3Z01haW5DYWNoZVR5cGUgICAgPSBDQUNIRV9OT05FOworJHdnTWVtQ2FjaGVkU2VydmVycyA9IGFycmF5KCk7CisKKyMjIFRvIGVuYWJsZSBpbWFnZSB1cGxvYWRzLCBtYWtlIHN1cmUgdGhlICdpbWFnZXMnIGRpcmVjdG9yeQorIyMgaXMgd3JpdGFibGUsIHRoZW4gc2V0IHRoaXMgdG8gdHJ1ZToKKyR3Z0VuYWJsZVVwbG9hZHMgID0gdHJ1ZTsKKyR3Z1VzZUltYWdlTWFnaWNrID0gdHJ1ZTsKKyR3Z0ltYWdlTWFnaWNrQ29udmVydENvbW1hbmQgPSJAQ09OVkVSVEAiOworJHdnRmlsZUV4dGVuc2lvbnNbXSA9ICd0eHQnOworCisjIEluc3RhbnRDb21tb25zIGFsbG93cyB3aWtpIHRvIHVzZSBpbWFnZXMgZnJvbSBodHRwOi8vY29tbW9ucy53aWtpbWVkaWEub3JnCiskd2dVc2VJbnN0YW50Q29tbW9ucyAgPSBmYWxzZTsKKworIyMgSWYgeW91IHVzZSBJbWFnZU1hZ2ljayAob3IgYW55IG90aGVyIHNoZWxsIGNvbW1hbmQpIG9uIGEKKyMjIExpbnV4IHNlcnZlciwgdGhpcyB3aWxsIG5lZWQgdG8gYmUgc2V0IHRvIHRoZSBuYW1lIG9mIGFuCisjIyBhdmFpbGFibGUgVVRGLTggbG9jYWxlCiskd2dTaGVsbExvY2FsZSA9ICJlbl9VUy51dGY4IjsKKworIyMgSWYgeW91IHdhbnQgdG8gdXNlIGltYWdlIHVwbG9hZHMgdW5kZXIgc2FmZSBtb2RlLAorIyMgY3JlYXRlIHRoZSBkaXJlY3RvcmllcyBpbWFnZXMvYXJjaGl2ZSwgaW1hZ2VzL3RodW1iIGFuZAorIyMgaW1hZ2VzL3RlbXAsIGFuZCBtYWtlIHRoZW0gYWxsIHdyaXRhYmxlLiBUaGVuIHVuY29tbWVudAorIyMgdGhpcywgaWYgaXQncyBub3QgYWxyZWFkeSB1bmNvbW1lbnRlZDoKKyMkd2dIYXNoZWRVcGxvYWREaXJlY3RvcnkgPSBmYWxzZTsKKworIyMgU2V0ICR3Z0NhY2hlRGlyZWN0b3J5IHRvIGEgd3JpdGFibGUgZGlyZWN0b3J5IG9uIHRoZSB3ZWIgc2VydmVyCisjIyB0byBtYWtlIHlvdXIgd2lraSBnbyBzbGlnaHRseSBmYXN0ZXIuIFRoZSBkaXJlY3Rvcnkgc2hvdWxkIG5vdAorIyMgYmUgcHVibGljbHkgYWNjZXNzaWJsZSBmcm9tIHRoZSB3ZWIuCisjJHdnQ2FjaGVEaXJlY3RvcnkgPSAiJElQL2NhY2hlIjsKKworIyBTaXRlIGxhbmd1YWdlIGNvZGUsIHNob3VsZCBiZSBvbmUgb2YgdGhlIGxpc3QgaW4gLi9sYW5ndWFnZXMvTmFtZXMucGhwCiskd2dMYW5ndWFnZUNvZGUgPSAiZW4iOworCiskd2dTZWNyZXRLZXkgPSAiMWM5MTJiZmUzNTE5ZmI3MGY1ZGM1MjNlY2M2OTgxMTFjZDQzZDgxYTExYzU4NWIzZWVmYjI4ZjI5YzI2OTliNyI7CisjJHdnU2VjcmV0S2V5ID0gIkBTRUNSRVRLRVlAIjsKKworCisjIFNpdGUgdXBncmFkZSBrZXkuIE11c3QgYmUgc2V0IHRvIGEgc3RyaW5nIChkZWZhdWx0IHByb3ZpZGVkKSB0byB0dXJuIG9uIHRoZQorIyB3ZWIgaW5zdGFsbGVyIHdoaWxlIExvY2FsU2V0dGluZ3MucGhwIGlzIGluIHBsYWNlCiskd2dVcGdyYWRlS2V5ID0gImRkYWU3ZGM4N2NkMGE2NDUiOworCisjIyBEZWZhdWx0IHNraW46IHlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IHNraW4uIFVzZSB0aGUgaW50ZXJuYWwgc3ltYm9saWMKKyMjIG5hbWVzLCBpZSAnc3RhbmRhcmQnLCAnbm9zdGFsZ2lhJywgJ2NvbG9nbmVibHVlJywgJ21vbm9ib29rJywgJ3ZlY3Rvcic6Ciskd2dEZWZhdWx0U2tpbiA9ICJ2ZWN0b3IiOworCisjIyBGb3IgYXR0YWNoaW5nIGxpY2Vuc2luZyBtZXRhZGF0YSB0byBwYWdlcywgYW5kIGRpc3BsYXlpbmcgYW4KKyMjIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgLyBpY29uLiBHTlUgRnJlZSBEb2N1bWVudGF0aW9uCisjIyBMaWNlbnNlIGFuZCBDcmVhdGl2ZSBDb21tb25zIGxpY2Vuc2VzIGFyZSBzdXBwb3J0ZWQgc28gZmFyLgorJHdnUmlnaHRzUGFnZSA9ICIiOyAjIFNldCB0byB0aGUgdGl0bGUgb2YgYSB3aWtpIHBhZ2UgdGhhdCBkZXNjcmliZXMgeW91ciBsaWNlbnNlL2NvcHlyaWdodAorJHdnUmlnaHRzVXJsICA9ICIiOworJHdnUmlnaHRzVGV4dCA9ICIiOworJHdnUmlnaHRzSWNvbiA9ICIiOworCisjIFBhdGggdG8gdGhlIEdOVSBkaWZmMyB1dGlsaXR5LiBVc2VkIGZvciBjb25mbGljdCByZXNvbHV0aW9uLgorJHdnRGlmZjMgPSAiL3Vzci9iaW4vZGlmZjMiOworCisjIFF1ZXJ5IHN0cmluZyBsZW5ndGggbGltaXQgZm9yIFJlc291cmNlTG9hZGVyLiBZb3Ugc2hvdWxkIG9ubHkgc2V0IHRoaXMgaWYKKyMgeW91ciB3ZWIgc2VydmVyIGhhcyBhIHF1ZXJ5IHN0cmluZyBsZW5ndGggbGltaXQgKHRoZW4gc2V0IGl0IHRvIHRoYXQgbGltaXQpLAorIyBvciBpZiB5b3UgaGF2ZSBzdWhvc2luLmdldC5tYXhfdmFsdWVfbGVuZ3RoIHNldCBpbiBwaHAuaW5pICh0aGVuIHNldCBpdCB0bworIyB0aGF0IHZhbHVlKQorJHdnUmVzb3VyY2VMb2FkZXJNYXhRdWVyeUxlbmd0aCA9IC0xOworCisKKworIyBFbmQgb2YgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgc2V0dGluZ3MuCisjIEFkZCBtb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBiZWxvdy4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwIGIvY29udHJpYi9tdy10by1naXQvdC9pbnN0YWxsLXdpa2kvZGJfaW5zdGFsbC5waHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzZjRlMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvaW5zdGFsbC13aWtpL2RiX2luc3RhbGwucGhwCkBAIC0wLDAgKzEsMTIwIEBACis8P3BocAorLyoqCisgKiBUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgYSBTUUxpdGUgZGF0YWJhc2UgZm9yIGEgTWVkaWFXaWtpIHZlcnNpb24gMS4xOS4wCisgKiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBsb2dpbiBvZiB0aGUgYWRtaW4gKGFyZ3VtZW50IDEpIGFuZCBpdHMKKyAqIHBhc3N3b3JkIChhcmd1bWVudCAyKSBhbmQgdGhlIGZvbGRlciB3aGVyZSB0aGUgZGF0YWJhc2UgZmlsZQorICogaXMgbG9jYXRlZCAoYWJzb2x1dGUgcGF0aCBpbiBhcmd1bWVudCAzKS4KKyAqIEl0IGlzIHVzZWQgYnkgdGhlIHNjcmlwdCBpbnN0YWxsLXdpa2kuc2ggaW4gb3JkZXIgdG8gbWFrZSBlYXN5IHRoZQorICogaW5zdGFsbGF0aW9uIG9mIGEgTWVkaWFXaWtpLgorICoKKyAqIEluIG9yZGVyIHRvIGdlbmVyYXRlIGEgU1FMaXRlIGRhdGFiYXNlIGZpbGUsIE1lZGlhV2lraSBhc2sgdGhlIHVzZXIKKyAqIHRvIHN1Ym1pdCBzb21lIGZvcm1zIGluIGl0cyB3ZWIgYnJvd3Nlci4gVGhpcyBzY3JpcHQgc2ltdWxhdGVzIHRoaXMKKyAqIGJlaGF2aW9yIHRob3VnaCB0aGUgZnVuY3Rpb25zIDxnZXQ+IGFuZCA8c3VibWl0PgorICoKKyAqLworJGFyZ2MgPSAkX1NFUlZFUlsnYXJnYyddOworJGFyZ3YgPSAkX1NFUlZFUlsnYXJndiddOworCiskbG9naW4gPSAkYXJndlsyXTsKKyRwYXNzID0gJGFyZ3ZbM107CiskdG1wID0gJGFyZ3ZbNF07CiskcG9ydCA9ICRhcmd2WzVdOworCiskdXJsID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6Jy4kcG9ydC4nL3dpa2kvbXctY29uZmlnL2luZGV4LnBocCc7CiskZGJfZGlyID0gdXJsZW5jb2RlKCR0bXApOworJHRtcF9jb29raWUgPSB0ZW1wbmFtKCR0bXAsICJDT09LSUVfIik7CisvKgorICogRmV0Y2hzIGEgcGFnZSB3aXRoIGNVUkwuCisgKi8KK2Z1bmN0aW9uIGdldCgkcGFnZV9uYW1lID0gIiIpIHsKKwkkY3VybCA9IGN1cmxfaW5pdCgpOworCSRwYWdlX25hbWVfYWRkID0gIiI7CisJaWYgKCRwYWdlX25hbWUgIT0gIiIpIHsKKwkJJHBhZ2VfbmFtZV9hZGQgPSAnP3BhZ2U9Jy4kcGFnZV9uYW1lOworCX0KKwkkdXJsID0gJEdMT0JBTFNbJ3VybCddLiRwYWdlX25hbWVfYWRkOworCSR0bXBfY29va2llID0gJEdMT0JBTFNbJ3RtcF9jb29raWUnXTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9DT09LSUVKQVIsICR0bXBfY29va2llKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgdHJ1ZSk7CisJY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIHRydWUpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0NPT0tJRUZJTEUsICR0bXBfY29va2llKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IRUFERVIsIHRydWUpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1VSTCwgJHVybCk7CisKKwkkcGFnZSA9IGN1cmxfZXhlYygkY3VybCk7CisJaWYgKCEkcGFnZSkgeworCQlkaWUoIkNvdWxkIG5vdCBnZXQgcGFnZTogJHVybFxuIik7CisJfQorCWN1cmxfY2xvc2UoJGN1cmwpOworCXJldHVybiAkcGFnZTsKK30KKworLyoKKyAqIFN1Ym1pdHMgYSBmb3JtIHdpdGggY1VSTC4KKyAqLworZnVuY3Rpb24gc3VibWl0KCRwYWdlX25hbWUsICRvcHRpb24gPSAiIikgeworCSRjdXJsID0gY3VybF9pbml0KCk7CisJJGRhdGFwb3N0ID0gJ3N1Ym1pdC1jb250aW51ZT1Db250aW51ZSslRTIlODYlOTInOworCWlmICgkb3B0aW9uICE9ICIiKSB7CisJCSRkYXRhcG9zdCA9ICRvcHRpb24uJyYnLiRkYXRhcG9zdDsKKwl9CisJJHVybCA9ICRHTE9CQUxTWyd1cmwnXS4nP3BhZ2U9Jy4kcGFnZV9uYW1lOworCSR0bXBfY29va2llID0gJEdMT0JBTFNbJ3RtcF9jb29raWUnXTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VUkwsICR1cmwpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1BPU1QsIHRydWUpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCB0cnVlKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCAkZGF0YXBvc3QpOworCWN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9DT09LSUVKQVIsICR0bXBfY29va2llKTsKKwljdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9DT09LSUVGSUxFLCAkdG1wX2Nvb2tpZSk7CisKKwkkcGFnZSA9IGN1cmxfZXhlYygkY3VybCk7CisJaWYgKCEkcGFnZSkgeworCQlkaWUoIkNvdWxkIG5vdCBnZXQgcGFnZTogJHVybFxuIik7CisJfQorCWN1cmxfY2xvc2UoJGN1cmwpOworCXJldHVybiAiJHBhZ2UiOworfQorCisvKgorICogSGVyZSBzdGFydHMgdGhpcyBzY3JpcHQ6IHNpbXVsYXRlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHVzZXIKKyAqIHN1Ym1pdHRpbmcgZm9ybXMgdG8gZ2VuZXJhdGVzIHRoZSBkYXRhYmFzZSBmaWxlLgorICogTm90ZSB0aGlzIHNpbXVsYXRpb24gd2FzIG1hZGUgZm9yIHRoZSBNZWRpYVdpa2kgdmVyc2lvbiAxLjE5LjAsCisgKiB3ZSBjYW4ndCBhc3N1bWUgaXQgd29ya3Mgd2l0aCBvdGhlciB2ZXJzaW9ucy4KKyAqCisgKi8KKworJHBhZ2UgPSBnZXQoKTsKK2lmICghcHJlZ19tYXRjaCgnL2lucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9IihbMC05XSspIiBuYW1lPSJMYW5ndWFnZVJlcXVlc3RUaW1lIi8nLAorCQkkcGFnZSwgJG1hdGNoZXMpKSB7CisJZWNobyAiVW5leHBlY3RlZCBjb250ZW50IGZvciBwYWdlIGRvd25sb2FkZWQ6XG4iOworCWVjaG8gIiRwYWdlIjsKKwlkaWU7Cit9OworJHRpbWVzdGFtcCA9ICRtYXRjaGVzWzFdOworJGxhbmd1YWdlID0gIkxhbmd1YWdlUmVxdWVzdFRpbWU9JHRpbWVzdGFtcCZ1c2VsYW5nPWVuJkNvbnRMYW5nPWVuIjsKKyRwYWdlID0gc3VibWl0KCdMYW5ndWFnZScsICRsYW5ndWFnZSk7CisKK3N1Ym1pdCgnV2VsY29tZScpOworCiskZGJfY29uZmlnID0gJ0RCVHlwZT1zcWxpdGUnOworJGRiX2NvbmZpZyA9ICRkYl9jb25maWcuJyZzcWxpdGVfd2dTUUxpdGVEYXRhRGlyPScuJGRiX2RpcjsKKyRkYl9jb25maWcgPSAkZGJfY29uZmlnLicmc3FsaXRlX3dnREJuYW1lPScuJGFyZ3ZbMV07CitzdWJtaXQoJ0RCQ29ubmVjdCcsICRkYl9jb25maWcpOworCiskd2lraV9jb25maWcgPSAnY29uZmlnX3dnU2l0ZW5hbWU9VEVTVCc7Ciskd2lraV9jb25maWcgPSAkd2lraV9jb25maWcuJyZjb25maWdfX05hbWVzcGFjZVR5cGU9c2l0ZS1uYW1lJzsKKyR3aWtpX2NvbmZpZyA9ICR3aWtpX2NvbmZpZy4nJmNvbmZpZ193Z01ldGFOYW1lc3BhY2U9TXlXaWtpJzsKKyR3aWtpX2NvbmZpZyA9ICR3aWtpX2NvbmZpZy4nJmNvbmZpZ19fQWRtaW5OYW1lPScuJGxvZ2luOworCiskd2lraV9jb25maWcgPSAkd2lraV9jb25maWcuJyZjb25maWdfX0FkbWluUGFzc3dvcmQ9Jy4kcGFzczsKKyR3aWtpX2NvbmZpZyA9ICR3aWtpX2NvbmZpZy4nJmNvbmZpZ19fQWRtaW5QYXNzd29yZDI9Jy4kcGFzczsKKworJHdpa2lfY29uZmlnID0gJHdpa2lfY29uZmlnLicmd2lraV9fY29uZmlnRW1haWw9ZW1haWwlNDBlbWFpbC5vcmcnOworJHdpa2lfY29uZmlnID0gJHdpa2lfY29uZmlnLicmY29uZmlnX19Ta2lwT3B0aW9uYWw9c2tpcCc7CitzdWJtaXQoJ05hbWUnLCAkd2lraV9jb25maWcpOworc3VibWl0KCdJbnN0YWxsJyk7CitzdWJtaXQoJ0luc3RhbGwnKTsKKwordW5saW5rKCR0bXBfY29va2llKTsKKz8+CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3B1c2gtcHVsbC10ZXN0cy5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvcHVzaC1wdWxsLXRlc3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTJkYzUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3B1c2gtcHVsbC10ZXN0cy5zaApAQCAtMCwwICsxLDE0NCBAQAordGVzdF9wdXNoX3B1bGwgKCkgeworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IHB1bGwgd29ya3MgYWZ0ZXIgYWRkaW5nIGEgbmV3IHdpa2kgcGFnZScgJworCQl3aWtpX3Jlc2V0ICYmCisKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMSAmJgorCQl3aWtpX2VkaXRwYWdlIEZvbyAicGFnZSBjcmVhdGVkIGFmdGVyIHRoZSBnaXQgY2xvbmUiIGZhbHNlICYmCisKKwkJKAorCQkJY2QgbXdfZGlyXzEgJiYKKwkJCWdpdCBwdWxsCisJCSkgJiYKKworCQl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMSAmJgorCQl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzEgcmVmX3BhZ2VfMQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBwdWxsIHdvcmtzIGFmdGVyIGVkaXRpbmcgYSB3aWtpIHBhZ2UnICcKKwkJd2lraV9yZXNldCAmJgorCisJCXdpa2lfZWRpdHBhZ2UgRm9vICJwYWdlIGNyZWF0ZWQgYmVmb3JlIHRoZSBnaXQgY2xvbmUiIGZhbHNlICYmCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzIgJiYKKwkJd2lraV9lZGl0cGFnZSBGb28gIm5ldyBsaW5lIGFkZGVkIG9uIHRoZSB3aWtpIiB0cnVlICYmCisKKwkJKAorCQkJY2QgbXdfZGlyXzIgJiYKKwkJCWdpdCBwdWxsCisJCSkgJiYKKworCQl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMiAmJgorCQl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzIgcmVmX3BhZ2VfMgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIHdvcmtzIG9uIGNvbmZsaWN0IGhhbmRsZWQgYnkgYXV0by1tZXJnZScgJworCQl3aWtpX3Jlc2V0ICYmCisKKwkJd2lraV9lZGl0cGFnZSBGb28gIjEgaW5pdAorMworNQorCSIgZmFsc2UgJiYKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMyAmJgorCisJCXdpa2lfZWRpdHBhZ2UgRm9vICIxIGluaXQKKzIgY29udGVudCBhZGRlZCBvbiB3aWtpIGFmdGVyIGNsb25lCiszCis1CisJIiBmYWxzZSAmJgorCisJCSgKKwkJCWNkIG13X2Rpcl8zICYmCisJCWVjaG8gIjEgaW5pdAorMworNCBjb250ZW50IGFkZGVkIG9uIGdpdCBhZnRlciBjbG9uZQorNQorIiA+Rm9vLm13ICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29uZmxpY3RpbmcgY2hhbmdlIG9uIGZvbyIgJiYKKwkJCWdpdCBwdWxsICYmCisJCQlnaXQgcHVzaAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IHB1c2ggd29ya3MgYWZ0ZXIgYWRkaW5nIGEgZmlsZSAubXcnICcKKwkJd2lraV9yZXNldCAmJgorCQlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl80ICYmCisJCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV80ICYmCisJCSgKKwkJCWNkIG13X2Rpcl80ICYmCisJCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBGb28ubXcgJiYKKwkJCXRvdWNoIEZvby5tdyAmJgorCQkJZWNobyAiaGVsbG8gd29ybGQiID4+Rm9vLm13ICYmCisJCQlnaXQgYWRkIEZvby5tdyAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiRm9vIiAmJgorCQkJZ2l0IHB1c2gKKwkJKSAmJgorCQl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfNCAmJgorCQl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzQgcmVmX3BhZ2VfNAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBwdXNoIHdvcmtzIGFmdGVyIGVkaXRpbmcgYSBmaWxlIC5tdycgJworCQl3aWtpX3Jlc2V0ICYmCisJCXdpa2lfZWRpdHBhZ2UgIkZvbyIgInBhZ2UgY3JlYXRlZCBiZWZvcmUgdGhlIGdpdCBjbG9uZSIgZmFsc2UgJiYKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNSAmJgorCisJCSgKKwkJCWNkIG13X2Rpcl81ICYmCisJCQllY2hvICJuZXcgbGluZSBhZGRlZCBpbiB0aGUgZmlsZSBGb28ubXciID4+Rm9vLm13ICYmCisJCQlnaXQgY29tbWl0IC1hbSAiZWRpdCBmaWxlIEZvby5tdyIgJiYKKwkJCWdpdCBwdXNoCisJCSkgJiYKKworCQl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfNSAmJgorCQl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzUgcmVmX3BhZ2VfNQorCScKKworCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ0dpdCBwdXNoIHdvcmtzIGFmdGVyIGRlbGV0aW5nIGEgZmlsZScgJworCQl3aWtpX3Jlc2V0ICYmCisJCXdpa2lfZWRpdHBhZ2UgRm9vICJ3aWtpIHBhZ2UgYWRkZWQgYmVmb3JlIGdpdCBjbG9uZSIgZmFsc2UgJiYKKwkJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNiAmJgorCisJCSgKKwkJCWNkIG13X2Rpcl82ICYmCisJCQlnaXQgcm0gRm9vLm13ICYmCisJCQlnaXQgY29tbWl0IC1hbSAicGFnZSBGb28ubXcgZGVsZXRlZCIgJiYKKwkJCWdpdCBwdXNoCisJCSkgJiYKKworCQl0ZXN0X211c3RfZmFpbCB3aWtpX3BhZ2VfZXhpc3QgRm9vCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnTWVyZ2UgY29uZmxpY3QgZXhwZWN0ZWQgYW5kIHNvbHZpbmcgaXQnICcKKwkJd2lraV9yZXNldCAmJgorCisJCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzcgJiYKKwkJd2lraV9lZGl0cGFnZSBGb28gIjEgY29uZmxpY3QKKzMgd2lraQorNCIgZmFsc2UgJiYKKworCQkoCisJCQljZCBtd19kaXJfNyAmJgorCQllY2hvICIxIGNvbmZsaWN0CisyIGdpdAorNCIgPkZvby5tdyAmJgorCQkJZ2l0IGFkZCBGb28ubXcgJiYKKwkJCWdpdCBjb21taXQgLW0gImNvbmZsaWN0IGNyZWF0ZWQiICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAmJgorCQkJIiRQRVJMX1BBVEgiIC1waSAtZSAicy9bPD0+XS4qLy9nIiBGb28ubXcgJiYKKwkJCWdpdCBjb21taXQgLWFtICJtZXJnZSBjb25mbGljdCBzb2x2ZWQiICYmCisJCQlnaXQgcHVzaAorCQkpCisJJworCisJdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0IHB1bGwgd29ya3MgYWZ0ZXIgZGVsZXRpbmcgYSB3aWtpIHBhZ2UnICcKKwkJd2lraV9yZXNldCAmJgorCQl3aWtpX2VkaXRwYWdlIEZvbyAid2lraSBwYWdlIGFkZGVkIGJlZm9yZSB0aGUgZ2l0IGNsb25lIiBmYWxzZSAmJgorCQlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl84ICYmCisKKwkJd2lraV9kZWxldGVfcGFnZSBGb28gJiYKKwkJKAorCQkJY2QgbXdfZGlyXzggJiYKKwkJCWdpdCBwdWxsICYmCisJCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBGb28ubXcKKwkJKQorCScKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjAtbXctdG8tZ2l0LWNsb25lLnNoIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2MC1tdy10by1naXQtY2xvbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjJmMDY5ZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjAtbXctdG8tZ2l0LWNsb25lLnNoCkBAIC0wLDAgKzEsMjU3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyCisjICAgICBDaGFybGVzIFJvdXNzZWwgPGNoYXJsZXMucm91c3NlbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBDYXRoZWJyYXMgPHNpbW9uLmNhdGhlYnJhc0BlbnNpbWFnLmltYWcuZnI+CisjICAgICBKdWxpZW4gS2hheWF0IDxqdWxpZW4ua2hheWF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEd1aWxsYXVtZSBTYXNkeSA8Z3VpbGxhdW1lLnNhc2R5QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIFBlcnJhdCA8c2ltb24ucGVycmF0QGVuc2ltYWcuaW1hZy5mcj4KKyMKKyMgTGljZW5zZTogR1BMIHYyIG9yIGxhdGVyCisKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgR2l0IE1lZGlhd2lraSByZW1vdGUgaGVscGVyOiBnaXQgY2xvbmUnCisKKy4gLi90ZXN0LWdpdG13LWxpYi5zaAorLiAkVEVTVF9ESVJFQ1RPUlkvdGVzdC1saWIuc2gKKworCit0ZXN0X2NoZWNrX3ByZWNvbmQKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgY3JlYXRlcyB0aGUgZXhwZWN0ZWQgZ2l0IGxvZyB3aXRoIG9uZSBmaWxlJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJ0aGlzIGlzIG5vdCBpbXBvcnRhbnQiIGZhbHNlIC1jIGNhdCAtcyAidGhpcyBtdXN0IGJlIHRoZSBzYW1lIiAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEgJiYKKwkoCisJCWNkIG13X2Rpcl8xICYmCisJCWdpdCBsb2cgLS1mb3JtYXQ9JXMgSEVBRF4uLkhFQUQgPmxvZy50bXAKKwkpICYmCisJZWNobyAidGhpcyBtdXN0IGJlIHRoZSBzYW1lIiA+bXNnLnRtcCAmJgorCWRpZmYgLWIgbXdfZGlyXzEvbG9nLnRtcCBtc2cudG1wCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIGNyZWF0ZXMgdGhlIGV4cGVjdGVkIGdpdCBsb2cgd2l0aCBtdWx0aXBsZSBmaWxlcycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGRhZGR5ICJ0aGlzIGlzIG5vdCBpbXBvcnRhbnQiIGZhbHNlIC1zPSJ0aGlzIG11c3QgYmUgdGhlIHNhbWUiICYmCisJd2lraV9lZGl0cGFnZSBkYWRkeSAibmVpdGhlciBpcyB0aGlzIiB0cnVlIC1zPSJ0aGlzIG11c3QgYWxzbyBiZSB0aGUgc2FtZSIgJiYKKwl3aWtpX2VkaXRwYWdlIGRhZGR5ICJuZWl0aGVyIGlzIHRoaXMiIHRydWUgLXM9InNhbWUgc2FtZSBzYW1lIiAmJgorCXdpa2lfZWRpdHBhZ2UgZGogImRvbnQgY2FyZSIgZmFsc2UgLXM9ImlkZW50aWNhbCIgJiYKKwl3aWtpX2VkaXRwYWdlIGRqICJkb250IGNhcmUgZWl0aGVyIiB0cnVlIC1zPSJpZGVudGljYWwgdG9vIiAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzIgJiYKKwkoCisJCWNkIG13X2Rpcl8yICYmCisJCWdpdCBsb2cgLS1mb3JtYXQ9JXMgRGFkZHkubXcgID5sb2dEYWRkeS50bXAgJiYKKwkJZ2l0IGxvZyAtLWZvcm1hdD0lcyBEai5tdyA+bG9nRGoudG1wCisJKSAmJgorCWVjaG8gInNhbWUgc2FtZSBzYW1lIiA+bXNnRGFkZHkudG1wICYmCisJZWNobyAidGhpcyBtdXN0IGFsc28gYmUgdGhlIHNhbWUiID4+bXNnRGFkZHkudG1wICYmCisJZWNobyAidGhpcyBtdXN0IGJlIHRoZSBzYW1lIiA+Pm1zZ0RhZGR5LnRtcCAmJgorCWVjaG8gImlkZW50aWNhbCB0b28iID5tc2dEai50bXAgJiYKKwllY2hvICJpZGVudGljYWwiID4+bXNnRGoudG1wICYmCisJZGlmZiAtYiBtd19kaXJfMi9sb2dEYWRkeS50bXAgbXNnRGFkZHkudG1wICYmCisJZGlmZiAtYiBtd19kaXJfMi9sb2dEai50bXAgbXNnRGoudG1wCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIGNyZWF0ZXMgb25seSBNYWluX1BhZ2UubXcgd2l0aCBhbiBlbXB0eSB3aWtpJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzMgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzMgMSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8zL01haW5fUGFnZS5tdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgZG9lcyBub3QgZmV0Y2ggYSBkZWxldGVkIHBhZ2UnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gInRoaXMgcGFnZSBtdXN0IGJlIGRlbGV0ZWQgYmVmb3JlIHRoZSBjbG9uZSIgZmFsc2UgJiYKKwl3aWtpX2RlbGV0ZV9wYWdlIGZvbyAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzQgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzQgMSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl80L01haW5fUGFnZS5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl80L0Zvby5tdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCBwYWdlIGFkZGVkJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICIgSSB3aWxsIGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiSSB3aWxsIGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl81ICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzUgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzUgcmVmX3BhZ2VfNSAmJgorCXdpa2lfZGVsZXRlX3BhZ2UgZm9vICYmCisJd2lraV9kZWxldGVfcGFnZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIHdvcmtzIHdpdGggYW4gZWRpdGVkIHBhZ2UgJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICJ0aGlzIHBhZ2Ugd2lsbCBiZSBlZGl0ZWQiIFwKKwkJZmFsc2UgLXMgImZpcnN0IGVkaXRpb24gb2YgcGFnZSBmb28iJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAidGhpcyBwYWdlIGhhcyBiZWVuIGVkaXRlZCBhbmQgbXVzdCBiZSBvbiB0aGUgY2xvbmUgIiB0cnVlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNiAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl82L0Zvby5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl82L01haW5fUGFnZS5tdyAmJgorCXdpa2lfZ2V0YWxscGFnZSBtd19kaXJfNi9wYWdlX3JlZl82ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl82IG13X2Rpcl82L3BhZ2VfcmVmXzYgJiYKKwkoCisJCWNkIG13X2Rpcl82ICYmCisJCWdpdCBsb2cgLS1mb3JtYXQ9JXMgSEVBRF4gRm9vLm13ID4gLi4vRm9vLmxvZworCSkgJiYKKwllY2hvICJmaXJzdCBlZGl0aW9uIG9mIHBhZ2UgZm9vIiA+IEZvb0V4cGVjdC5sb2cgJiYKKwlkaWZmIEZvb0V4cGVjdC5sb2cgRm9vLmxvZworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIHNldmVyYWwgcGFnZXMgYW5kIHNvbWUgZGVsZXRlZCAnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gInRoaXMgcGFnZSB3aWxsIG5vdCBiZSBkZWxldGVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgYmFyICJJIG11c3Qgbm90IGJlIGVyYXNlZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG5hbW5hbSAiSSB3aWxsIG5vdCBiZSB0aGVyZSBhdCB0aGUgZW5kIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgbnlhbmNhdCAibnlhbiBueWFuIG55YW4gZGVsZXRlIG1lIiBmYWxzZSAmJgorCXdpa2lfZGVsZXRlX3BhZ2UgbmFtbmFtICYmCisJd2lraV9kZWxldGVfcGFnZSBueWFuY2F0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl83L0Zvby5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl83L0Jhci5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl83L05hbW5hbS5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl83L055YW5jYXQubXcgJiYKKwl3aWtpX2dldGFsbHBhZ2UgbXdfZGlyXzcvcGFnZV9yZWZfNyAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfNyBtd19kaXJfNy9wYWdlX3JlZl83CisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIHdvcmtzIHdpdGggb25lIHNwZWNpZmljIHBhZ2UgY2xvbmVkICcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAiSSB3aWxsIG5vdCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBiYXIgIkRvIG5vdCBjbG9uZSBtZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG5hbW5hbSAiSSB3aWxsIGJlIGNsb25lZCA6KSIgZmFsc2UgIC1zPSJ0aGlzIGxvZyBtdXN0IHN0YXkiICYmCisJd2lraV9lZGl0cGFnZSBueWFuY2F0ICJueWFuIG55YW4gbnlhbiB5b3UgY2FudCBjbG9uZSBtZSIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz1uYW1uYW0gXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzggJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzggMSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl84L05hbW5hbS5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl84L01haW5fUGFnZS5tdyAmJgorCSgKKwkJY2QgbXdfZGlyXzggJiYKKwkJZWNobyAidGhpcyBsb2cgbXVzdCBzdGF5IiA+bXNnLnRtcCAmJgorCQlnaXQgbG9nIC0tZm9ybWF0PSVzID5sb2cudG1wICYmCisJCWRpZmYgLWIgbXNnLnRtcCBsb2cudG1wCisJKSAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfOC9OYW1uYW0ubXcgTmFtbmFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIG11bHRpcGxlIHNwZWNpZmljIHBhZ2UgY2xvbmVkICcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAiSSB3aWxsIGJlIHRoZXJlIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgYmFyICJJIHdpbGwgbm90IGRpc2FwZWFyIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgbmFtbmFtICJJIGJlIGVyYXNlZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG55YW5jYXQgIm55YW4gbnlhbiBueWFuIHlvdSB3aWxsIG5vdCBlcmFzZSBtZSIgZmFsc2UgJiYKKwl3aWtpX2RlbGV0ZV9wYWdlIG5hbW5hbSAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLnBhZ2VzPSJmb28gYmFyIG55YW5jYXQgbmFtbmFtIiBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfOSAmJgorCXRlc3RfY29udGFpbnNfTl9maWxlcyBtd19kaXJfOSAzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzkvTmFtbmFtLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzkvRm9vLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzkvTnlhbmNhdC5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl85L0Jhci5tdyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfOS9Gb28ubXcgRm9vICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl85L0Jhci5tdyBCYXIgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzkvTnlhbmNhdC5tdyBOeWFuY2F0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01lZGlhd2lraS1jbG9uZSBvZiBzZXZlcmFsIHNwZWNpZmljIHBhZ2VzIG9uIHdpa2knICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmb28gImZvbyAxIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgYmFyICJiYXIgMSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGR1bW15ICJkdW1teSAxIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgY2xvbmVkXzEgImNsb25lZF8xIDEiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBjbG9uZWRfMiAiY2xvbmVkXzIgMiIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGNsb25lZF8zICJjbG9uZWRfMyAzIiBmYWxzZSAmJgorCW1rZGlyIC1wIHJlZl9wYWdlXzEwICYmCisJd2lraV9nZXRwYWdlIGNsb25lZF8xIHJlZl9wYWdlXzEwICYmCisJd2lraV9nZXRwYWdlIGNsb25lZF8yIHJlZl9wYWdlXzEwICYmCisJd2lraV9nZXRwYWdlIGNsb25lZF8zIHJlZl9wYWdlXzEwICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ucGFnZXM9ImNsb25lZF8xIGNsb25lZF8yIGNsb25lZF8zIiBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTAgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzEwIHJlZl9wYWdlXzEwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyB3aXRoIHRoZSBzaGFsbG93IG9wdGlvbicgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAiMXN0IHJldmlzaW9uLCBzaG91bGQgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgYmFyICIxc3QgcmV2aXNpb24sIHNob3VsZCBiZSBjbG9uZWQiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBueWFuICIxc3QgcmV2aXNpb24sIHNob3VsZCBub3QgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgbnlhbiAiMm5kIHJldmlzaW9uLCBzaG91bGQgYmUgY2xvbmVkIiBmYWxzZSAmJgorCWdpdCAtYyByZW1vdGUub3JpZ2luLnNoYWxsb3c9dHJ1ZSBjbG9uZSBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTEgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzExIDQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTEvTnlhbi5tdyAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMS9Gb28ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTEvQmFyLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzExL01haW5fUGFnZS5tdyAmJgorCSgKKwkJY2QgbXdfZGlyXzExICYmCisJCXRlc3QgJChnaXQgbG9nIC0tb25lbGluZSBOeWFuLm13IHwgd2MgLWwpIC1lcSAxICYmCisJCXRlc3QgJChnaXQgbG9nIC0tb25lbGluZSBGb28ubXcgfCB3YyAtbCkgLWVxIDEgJiYKKwkJdGVzdCAkKGdpdCBsb2cgLS1vbmVsaW5lIEJhci5tdyB8IHdjIC1sKSAtZXEgMSAmJgorCQl0ZXN0ICQoZ2l0IGxvZyAtLW9uZWxpbmUgTWFpbl9QYWdlLm13IHwgd2MgLWwgKSAtZXEgMQorCSkgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzExL055YW4ubXcgTnlhbiAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTEvRm9vLm13IEZvbyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTEvQmFyLm13IEJhciAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTEvTWFpbl9QYWdlLm13IE1haW5fUGFnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgY2xvbmUgd29ya3Mgd2l0aCB0aGUgc2hhbGxvdyBvcHRpb24gd2l0aCBhIGRlbGV0ZSBwYWdlJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgZm9vICIxc3QgcmV2aXNpb24sIHdpbGwgYmUgZGVsZXRlZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGJhciAiMXN0IHJldmlzaW9uLCBzaG91bGQgYmUgY2xvbmVkIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgbnlhbiAiMXN0IHJldmlzaW9uLCBzaG91bGQgbm90IGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG55YW4gIjJuZCByZXZpc2lvbiwgc2hvdWxkIGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2RlbGV0ZV9wYWdlIGZvbyAmJgorCWdpdCAtYyByZW1vdGUub3JpZ2luLnNoYWxsb3c9dHJ1ZSBjbG9uZSBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTIgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzEyIDMgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTIvTnlhbi5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xMi9Gb28ubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTIvQmFyLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzEyL01haW5fUGFnZS5tdyAmJgorCSgKKwkJY2QgbXdfZGlyXzEyICYmCisJCXRlc3QgJChnaXQgbG9nIC0tb25lbGluZSBOeWFuLm13IHwgd2MgLWwpIC1lcSAxICYmCisJCXRlc3QgJChnaXQgbG9nIC0tb25lbGluZSBCYXIubXcgfCB3YyAtbCkgLWVxIDEgJiYKKwkJdGVzdCAkKGdpdCBsb2cgLS1vbmVsaW5lIE1haW5fUGFnZS5tdyB8IHdjIC1sICkgLWVxIDEKKwkpICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xMi9OeWFuLm13IE55YW4gJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzEyL0Jhci5tdyBCYXIgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzEyL01haW5fUGFnZS5tdyBNYWluX1BhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGVzdCBvZiBmZXRjaGluZyBhIGNhdGVnb3J5JyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgRm9vICJJIHdpbGwgYmUgY2xvbmVkIiBmYWxzZSAtYz1DYXRlZ29yeSAmJgorCXdpa2lfZWRpdHBhZ2UgQmFyICJNZWV0IG1lIG9uIHRoZSByZXBvc2l0b3J5IiBmYWxzZSAtYz1DYXRlZ29yeSAmJgorCXdpa2lfZWRpdHBhZ2UgRHVtbXkgIkkgd2lsbCBub3QgY29tZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIEJhcldyb25nICJJIHdpbGwgc3RheSBvbmxpbmUgb25seSIgZmFsc2UgLWM9Tm90Q2F0ZWdvcnkgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5jYXRlZ29yaWVzPSJDYXRlZ29yeSIgXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEzICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzEzIENhdGVnb3J5ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xMyByZWZfcGFnZV8xMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUZXN0IG9mIHJlc2lzdGFuY2UgdG8gbW9kaWZpY2F0aW9uIG9mIGNhdGVnb3J5IG9uIHdpa2kgZm9yIGNsb25lJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgVG9iZWRlbGV0ZWQgInRoaXMgcGFnZSB3aWxsIGJlIGRlbGV0ZWQiIGZhbHNlIC1jPUNhdG9uZSAmJgorCXdpa2lfZWRpdHBhZ2UgVG9iZWVkaXRlZCAidGhpcyBwYWdlIHdpbGwgYmUgbW9kaWZpZWQiIGZhbHNlIC1jPUNhdG9uZSAmJgorCXdpa2lfZWRpdHBhZ2UgTm9ybWFsb25lICJ0aGlzIHBhZ2Ugd29udCBiZSBtb2RpZmllZCBhbmQgd2lsbCBiZSBvbiBnaXQiIGZhbHNlIC1jPUNhdG9uZSAmJgorCXdpa2lfZWRpdHBhZ2UgTm90Y29uc2lkZXJlZCAidGhpcyBwYWdlIHdpbGwgbm90IGFwcGVhciBvbiBsb2NhbCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIE90aGVyY2F0ZWdvcnkgInRoaXMgcGFnZSB3aWxsIG5vdCBhcHBlYXIgb24gbG9jYWwiIGZhbHNlIC1jPUNhdHR3byAmJgorCXdpa2lfZWRpdHBhZ2UgVG9iZWVkaXRlZCAidGhpcyBwYWdlIGhhdmUgYmVlbiBtb2RpZmllZCIgdHJ1ZSAtYz1DYXRvbmUgJiYKKwl3aWtpX2RlbGV0ZV9wYWdlIFRvYmVkZWxldGVkCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4uY2F0ZWdvcmllcz0iQ2F0b25lIiBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTQgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMTQgQ2F0b25lICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xNCByZWZfcGFnZV8xNAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjEtbXctdG8tZ2l0LXB1c2gtcHVsbC5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjEtbXctdG8tZ2l0LXB1c2gtcHVsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZWEyMDE0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2MS1tdy10by1naXQtcHVzaC1wdWxsLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIKKyMgICAgIENoYXJsZXMgUm91c3NlbCA8Y2hhcmxlcy5yb3Vzc2VsQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIENhdGhlYnJhcyA8c2ltb24uY2F0aGVicmFzQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEp1bGllbiBLaGF5YXQgPGp1bGllbi5raGF5YXRAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgR3VpbGxhdW1lIFNhc2R5IDxndWlsbGF1bWUuc2FzZHlAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gUGVycmF0IDxzaW1vbi5wZXJyYXRAZW5zaW1hZy5pbWFnLmZyPgorIworIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKKworIyB0ZXN0cyBmb3IgZ2l0LXJlbW90ZS1tZWRpYXdpa2kKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgR2l0IE1lZGlhd2lraSByZW1vdGUgaGVscGVyOiBnaXQgcHVzaCBhbmQgZ2l0IHB1bGwgc2ltcGxlIHRlc3QgY2FzZXMnCisKKy4gLi90ZXN0LWdpdG13LWxpYi5zaAorLiAuL3B1c2gtcHVsbC10ZXN0cy5zaAorLiAkVEVTVF9ESVJFQ1RPUlkvdGVzdC1saWIuc2gKKwordGVzdF9jaGVja19wcmVjb25kCisKK3Rlc3RfcHVzaF9wdWxsCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90OTM2Mi1tdy10by1naXQtdXRmOC5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjItbXctdG8tZ2l0LXV0Zjguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmIwZGJkYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjItbXctdG8tZ2l0LXV0Zjguc2gKQEAgLTAsMCArMSwzNDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIKKyMgICAgIENoYXJsZXMgUm91c3NlbCA8Y2hhcmxlcy5yb3Vzc2VsQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIENhdGhlYnJhcyA8c2ltb24uY2F0aGVicmFzQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEp1bGllbiBLaGF5YXQgPGp1bGllbi5raGF5YXRAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgR3VpbGxhdW1lIFNhc2R5IDxndWlsbGF1bWUuc2FzZHlAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gUGVycmF0IDxzaW1vbi5wZXJyYXRAZW5zaW1hZy5pbWFnLmZyPgorIworIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKKworIyB0ZXN0cyBmb3IgZ2l0LXJlbW90ZS1tZWRpYXdpa2kKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQtbWVkaWF3aWtpIHdpdGggc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGZpbGVuYW1lcycKKworLiAuL3Rlc3QtZ2l0bXctbGliLnNoCisuICRURVNUX0RJUkVDVE9SWS90ZXN0LWxpYi5zaAorCisKK3Rlc3RfY2hlY2tfcHJlY29uZAorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBjbG9uZSB3b3JrcyBmb3IgYSB3aWtpIHdpdGggYWNjZW50cyBpbiB0aGUgcGFnZSBuYW1lcycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGbDqcOpICJUaGlzIHBhZ2UgbXVzdCBiZSBkw6lsw6l0w6lkIGJlZm9yZSBjbG9uZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGvDqMOoICJUaGlzIHBhZ2UgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSBjbG9uZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGjDoMOgICJUaGlzIHBhZ2UgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSBjbG9uZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGvDrsOuICJUaGlzIHBhZ2UgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSBjbG9uZSIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAiVGhpcyBwYWdlIG11c3QgYmUgZGVsZXRlZCBiZWZvcmUgY2xvbmUiIGZhbHNlICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8xICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xIHJlZl9wYWdlXzEKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHaXQgcHVsbCB3b3JrcyB3aXRoIGEgd2lraSB3aXRoIGFjY2VudHMgaW4gdGhlIHBhZ2VzIG5hbWVzJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2Uga8Ouw64gInRoaXMgcGFnZSBtdXN0IGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAidGhpcyBwYWdlIG11c3QgYmUgY2xvbmVkIiBmYWxzZSAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzIgJiYKKwl3aWtpX2VkaXRwYWdlIMOpw6DDrsO0w7sgIlRoaXMgcGFnZSBtdXN0IGJlIHB1bGxlZCIgZmFsc2UgJiYKKwkoCisJCWNkIG13X2Rpcl8yICYmCisJCWdpdCBwdWxsCisJKSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8yICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8yIHJlZl9wYWdlXzIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uaW5nIGEgY2hvc2VuIHBhZ2Ugd29ya3Mgd2l0aCBhY2NlbnRzJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2Uga8Ouw64gInRoaXMgcGFnZSBtdXN0IGJlIGNsb25lZCIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz1rw67DriBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMyAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMy9Lw67Dri5tdyBLw67DriAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8zL0vDrsOuLm13ICYmCisJcm0gLXJmIG13X2Rpcl8zCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGhlIHNoYWxsb3cgb3B0aW9uIHdvcmtzIHdpdGggYWNjZW50cycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIG7DqW/DoCAiMXN0IHJldmlzaW9uLCBzaG91bGQgbm90IGJlIGNsb25lZCIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIG7DqW/DoCAiMm5kIHJldmlzaW9uLCBzaG91bGQgYmUgY2xvbmVkIiBmYWxzZSAmJgorCWdpdCAtYyByZW1vdGUub3JpZ2luLnNoYWxsb3c9dHJ1ZSBjbG9uZSBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfNCAmJgorCXRlc3RfY29udGFpbnNfTl9maWxlcyBtd19kaXJfNCAyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzQvTsOpb8OgLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzQvTWFpbl9QYWdlLm13ICYmCisJKAorCQljZCBtd19kaXJfNCAmJgorCQl0ZXN0ICQoZ2l0IGxvZyAtLW9uZWxpbmUgTsOpb8OgLm13IHwgd2MgLWwpIC1lcSAxICYmCisJCXRlc3QgJChnaXQgbG9nIC0tb25lbGluZSBNYWluX1BhZ2UubXcgfCB3YyAtbCApIC1lcSAxCisJKSAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfNC9Ow6lvw6AubXcgTsOpb8OgICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl80L01haW5fUGFnZS5tdyBNYWluX1BhZ2UKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uaW5nIHdvcmtzIHdoZW4gcGFnZSBuYW1lIGZpcnN0IGxldHRlciBoYXMgYW4gYWNjZW50JyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2Ugw67DriAidGhpcyBwYWdlIG11c3QgYmUgY2xvbmVkIiBmYWxzZSAmJgorCWdpdCBjbG9uZSAtYyByZW1vdGUub3JpZ2luLnBhZ2VzPcOuw64gXAorCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfNS/DjsOuLm13ICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl81L8OOw64ubXcgw47DrgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dpdCBwdXNoIHdvcmtzIHdpdGggYSB3aWtpIHdpdGggYWNjZW50cycgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIGbDqcOpICJsb3RzIG9mIGFjY2VudHMgOiDDqcOow6DDliIgZmFsc2UgJiYKKwl3aWtpX2VkaXRwYWdlIGZvbyAidGhpcyBwYWdlIG11c3QgYmUgY2xvbmVkIiBmYWxzZSAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzYgJiYKKwkoCisJCWNkIG13X2Rpcl82ICYmCisJCWVjaG8gIkEgd2lsZCBQw65rw6RjaMO7IGFwcGVhcnMgb24gdGhlIHdpa2kiID5Qw65rw6RjaMO7Lm13ICYmCisJCWdpdCBhZGQgUMOua8OkY2jDuy5tdyAmJgorCQlnaXQgY29tbWl0IC1tICJBIG5ldyBwYWdlIGFwcGVhcnMiICYmCisJCWdpdCBwdXNoCisJKSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV82ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl82IHJlZl9wYWdlXzYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR2l0IGNsb25lIHdvcmtzIHdpdGggYWNjZW50c2FuZCBzcGFjZXMnICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSAiw6kgw6Agw64iICJ0aGlzIHBhZ2UgbXVzdCBiZSBkw6lsw6l0w6kgYmVmb3JlIHRoZSBjbG9uZSIgZmFsc2UgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl83ICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzcgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzcgcmVmX3BhZ2VfNworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFyYWN0ZXIgJCBpbiBwYWdlIG5hbWUgKG13IC0+IGdpdCknICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBmaWxlX1wkX2ZvbyAiZXhwZWN0IHRvIGJlIGNhbGxlZCBmaWxlXyRfZm9vIiBmYWxzZSAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfOC9GaWxlX1wkX2Zvby5tdyAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV84ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl84IHJlZl9wYWdlXzgKKycKKworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYXJhY3RlciAkIGluIGZpbGUgbmFtZSAoZ2l0IC0+IG13KSAnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfOSAmJgorCSgKKwkJY2QgbXdfZGlyXzkgJiYKKwkJZWNobyAidGhpcyBmaWxlIGlzIGNhbGxlZCBGaWxlX1wkX2Zvby5tdyIgPkZpbGVfXCRfZm9vLm13ICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1hbSAiZmlsZSBGaWxlX1wkX2Zvby5tdyIgJiYKKwkJZ2l0IHB1bGwgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzkgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzkgcmVmX3BhZ2VfOQorJworCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NhcGl0YWwgYXQgdGhlIGJlZ2lubmluZyBvZiBmaWxlIG5hbWVzJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEwICYmCisJKAorCQljZCBtd19kaXJfMTAgJiYKKwkJZWNobyAibXkgbmV3IGZpbGUgZm9vIiA+Zm9vLm13ICYmCisJCWVjaG8gIm15IG5ldyBmaWxlIEZvby4uLiBGaW5nZXIgY3Jvc3NlZCIgPkZvby5tdyAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtYW0gImZpbGUgZm9vLm13IiAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgcHVzaAorCSkgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMTAgJiYKKwl0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgbXdfZGlyXzEwIHJlZl9wYWdlXzEwCisnCisKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnc3BlY2lhbCBjaGFyYWN0ZXIgYXQgdGhlIGJlZ2lubmluZyBvZiBmaWxlIG5hbWUgZnJvbSBtdyB0byBnaXQnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTEgJiYKKwl3aWtpX2VkaXRwYWdlIHtjaGFyXzEgImV4cGVjdCB0byBiZSByZW5hbWVkIHtjaGFyXzEiIGZhbHNlICYmCisJd2lraV9lZGl0cGFnZSBbY2hhcl8yICJleHBlY3QgdG8gYmUgcmVuYW1lZCBbY2hhcl8yIiBmYWxzZSAmJgorCSgKKwkJY2QgbXdfZGlyXzExICYmCisJCWdpdCBwdWxsCisJKSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xMS97Y2hhcl8xICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzExL1tjaGFyXzIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUHVsbCBwYWdlIHdpdGggdGl0bGUgY29udGFpbmluZyAiOiIgb3RoZXIgdGhhbiBuYW1lc3BhY2Ugc2VwYXJhdG9yJyAnCisJd2lraV9lZGl0cGFnZSBGb286QmFyIGNvbnRlbnQgZmFsc2UgJiYKKwkoCisJCWNkIG13X2Rpcl8xMSAmJgorCQlnaXQgcHVsbAorCSkgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTEvRm9vOkJhci5tdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQdXNoIHBhZ2Ugd2l0aCB0aXRsZSBjb250YWluaW5nICI6IiBvdGhlciB0aGFuIG5hbWVzcGFjZSBzZXBhcmF0b3InICcKKwkoCisJCWNkIG13X2Rpcl8xMSAmJgorCQllY2hvIGNvbnRlbnQgPk5vdEFOYW1lU3BhY2U6UGFnZS5tdyAmJgorCQlnaXQgYWRkIE5vdEFOYW1lU3BhY2U6UGFnZS5tdyAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgcGFnZSB3aXRoIGNvbG9uIiAmJgorCQlnaXQgcHVzaAorCSkgJiYKKwl3aWtpX3BhZ2VfZXhpc3QgTm90QU5hbWVTcGFjZTpQYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgb2YgY29ycmVjdCBmb3JtYXR0aW5nIGZvciBmaWxlIG5hbWUgZnJvbSBtdyB0byBnaXQnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTIgJiYKKwl3aWtpX2VkaXRwYWdlIGNoYXJfJV83Yl8xICJleHBlY3QgdG8gYmUgcmVuYW1lZCBjaGFye18xIiBmYWxzZSAmJgorCXdpa2lfZWRpdHBhZ2UgY2hhcl8lXzViXzIgImV4cGVjdCB0byBiZSByZW5hbWVkIGNoYXJ7XzIiIGZhbHNlICYmCisJKAorCQljZCBtd19kaXJfMTIgJiYKKwkJZ2l0IHB1bGwKKwkpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzEyL0NoYXJce18xLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzEyL0NoYXJcW18yLm13ICYmCisJd2lraV9nZXRhbGxwYWdlIHJlZl9wYWdlXzEyICYmCisJbXYgcmVmX3BhZ2VfMTIvQ2hhcl8lXzdiXzEubXcgcmVmX3BhZ2VfMTIvQ2hhclx7XzEubXcgJiYKKwltdiByZWZfcGFnZV8xMi9DaGFyXyVfNWJfMi5tdyByZWZfcGFnZV8xMi9DaGFyXFtfMi5tdyAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfMTIgcmVmX3BhZ2VfMTIKKycKKworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0ZXN0IG9mIGNvcnJlY3QgZm9ybWF0dGluZyBmb3IgZmlsZSBuYW1lIGJlZ2lubmluZyB3aXRoIHNwZWNpYWwgY2hhcmFjdGVyJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzEzICYmCisJKAorCQljZCBtd19kaXJfMTMgJiYKKwkJZWNobyAibXkgbmV3IGZpbGUge2NoYXJfMSIgPlx7Y2hhcl8xLm13ICYmCisJCWVjaG8gIm15IG5ldyBmaWxlIFtjaGFyXzIiID5cW2NoYXJfMi5tdyAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdHRpbmcgc29tZSBleG90aWMgZmlsZSBuYW1lLi4uIiAmJgorCQlnaXQgcHVzaCAmJgorCQlnaXQgcHVsbAorCSkgJiYKKwl3aWtpX2dldGFsbHBhZ2UgcmVmX3BhZ2VfMTMgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSByZWZfcGFnZV8xMy97Y2hhcl8xLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcmVmX3BhZ2VfMTMvW2NoYXJfMi5tdyAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfMTMgcmVmX3BhZ2VfMTMKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG9mIGNvcnJlY3QgZm9ybWF0dGluZyBmb3IgZmlsZSBuYW1lIGZyb20gZ2l0IHRvIG13JyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE0ICYmCisJKAorCQljZCBtd19kaXJfMTQgJiYKKwkJZWNobyAibXkgbmV3IGZpbGUgY2hhcntfMSIgPkNoYXJce18xLm13ICYmCisJCWVjaG8gIm15IG5ldyBmaWxlIGNoYXJbXzIiID5DaGFyXFtfMi5tdyAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29tbWl0dGluZyBzb21lIGV4b3RpYyBmaWxlIG5hbWUuLi4iICYmCisJCWdpdCBwdXNoCisJKSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8xNCAmJgorCW12IG13X2Rpcl8xNC9DaGFyXHtfMS5tdyBtd19kaXJfMTQvQ2hhcl8lXzdiXzEubXcgJiYKKwltdiBtd19kaXJfMTQvQ2hhclxbXzIubXcgbXdfZGlyXzE0L0NoYXJfJV81Yl8yLm13ICYmCisJdGVzdF9kaWZmX2RpcmVjdG9yaWVzIG13X2Rpcl8xNCByZWZfcGFnZV8xNAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbG9uZSB3aXRoIC8nICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBcL2ZvXC9vICJ0aGlzIGlzIG5vdCBpbXBvcnRhbnQiIGZhbHNlIC1jPURlbGV0ZWQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xNSAmJgorCXRlc3RfcGF0aF9pc19maWxlIG13X2Rpcl8xNS8lMkZmbyUyRm8ubXcgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzE1LyUyRmZvJTJGby5tdyBcL2ZvXC9vCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1c2ggd2l0aCAvJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE2ICYmCisJZWNobyAiSSB3aWxsIGJlIG9uIHRoZSB3aWtpIiA+bXdfZGlyXzE2LyUyRmZvJTJGby5tdyAmJgorCSgKKwkJY2QgbXdfZGlyXzE2ICYmCisJCWdpdCBhZGQgJTJGZm8lMkZvLm13ICYmCisJCWdpdCBjb21taXQgLW0gIiAlMkZmbyUyRm8gYWRkZWQiICYmCisJCWdpdCBwdXNoCisJKSAmJgorCXdpa2lfcGFnZV9leGlzdCBcL2ZvXC9vICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xNi8lMkZmbyUyRm8ubXcgXC9mb1wvbworCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIHdpdGggXCcgJworCXdpa2lfcmVzZXQgJiYKKwl3aWtpX2VkaXRwYWdlIFxca29cXG8gInRoaXMgaXMgbm90IGltcG9ydGFudCIgZmFsc2UgLWM9RGVsZXRlZCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE3ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzE3L1xca29cXG8ubXcgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzE3L1xca29cXG8ubXcgXFxrb1xcbworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdXNoIHdpdGggXCcgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8xOCAmJgorCWVjaG8gIkkgd2lsbCBiZSBvbiB0aGUgd2lraSIgPm13X2Rpcl8xOC9cXGtvXFxvLm13ICYmCisJKAorCQljZCBtd19kaXJfMTggJiYKKwkJZ2l0IGFkZCBcXGtvXFxvLm13ICYmCisJCWdpdCBjb21taXQgLW0gIiBcXGtvXFxvIGFkZGVkIiAmJgorCQlnaXQgcHVzaAorCSkmJgorCXdpa2lfcGFnZV9leGlzdCBcXGtvXFxvICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xOC9cXGtvXFxvLm13IFxca29cXG8KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xvbmUgd2l0aCBcIGluIGZvcm1hdCBjb250cm9sJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgXFxub1xcbyAidGhpcyBpcyBub3QgaW1wb3J0YW50IiBmYWxzZSAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE5ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzE5L1xcbm9cXG8ubXcgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzE5L1xcbm9cXG8ubXcgXFxub1xcbworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdXNoIHdpdGggXCBpbiBmb3JtYXQgY29udHJvbCcgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8yMCAmJgorCWVjaG8gIkkgd2lsbCBiZSBvbiB0aGUgd2lraSIgPm13X2Rpcl8yMC9cXGZvXFxvLm13ICYmCisJKAorCQljZCBtd19kaXJfMjAgJiYKKwkJZ2l0IGFkZCBcXGZvXFxvLm13ICYmCisJCWdpdCBjb21taXQgLW0gIiBcXGZvXFxvIGFkZGVkIiAmJgorCQlnaXQgcHVzaAorCSkmJgorCXdpa2lfcGFnZV9leGlzdCBcXGZvXFxvICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8yMC9cXGZvXFxvLm13IFxcZm9cXG8KKworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtaW1wb3J0IG1ldGEtY2hhcmFjdGVycyBpbiBwYWdlIG5hbWUgKG13IC0+IGdpdCknICcKKwl3aWtpX3Jlc2V0ICYmCisJd2lraV9lZGl0cGFnZSBcImZpbGVcIl9cXF9mb28gImV4cGVjdCB0byBiZSBjYWxsZWQgXCJmaWxlXCJfXFxfZm9vIiBmYWxzZSAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzIxICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzIxL1wiZmlsZVwiX1xcX2Zvby5tdyAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8yMSAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfMjEgcmVmX3BhZ2VfMjEKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWltcG9ydCBtZXRhLWNoYXJhY3RlcnMgaW4gcGFnZSBuYW1lIChnaXQgLT4gbXcpICcgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl8yMiAmJgorCSgKKwkJY2QgbXdfZGlyXzIyICYmCisJCWVjaG8gInRoaXMgZmlsZSBpcyBjYWxsZWQgXCJmaWxlXCJfXFxfZm9vLm13IiA+XCJmaWxlXCJfXFxfZm9vICYmCisJCWdpdCBhZGQgLiAmJgorCQlnaXQgY29tbWl0IC1hbSAiZmlsZSBcImZpbGVcIl9cXF9mb28iICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBwdXNoCisJKSAmJgorCXdpa2lfZ2V0YWxscGFnZSByZWZfcGFnZV8yMiAmJgorCXRlc3RfZGlmZl9kaXJlY3RvcmllcyBtd19kaXJfMjIgcmVmX3BhZ2VfMjIKKycKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjMtbXctdG8tZ2l0LWV4cG9ydC1pbXBvcnQuc2ggYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYzLW13LXRvLWdpdC1leHBvcnQtaW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNmZjNhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL213LXRvLWdpdC90L3Q5MzYzLW13LXRvLWdpdC1leHBvcnQtaW1wb3J0LnNoCkBAIC0wLDAgKzEsMjE3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEyCisjICAgICBDaGFybGVzIFJvdXNzZWwgPGNoYXJsZXMucm91c3NlbEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBDYXRoZWJyYXMgPHNpbW9uLmNhdGhlYnJhc0BlbnNpbWFnLmltYWcuZnI+CisjICAgICBKdWxpZW4gS2hheWF0IDxqdWxpZW4ua2hheWF0QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEd1aWxsYXVtZSBTYXNkeSA8Z3VpbGxhdW1lLnNhc2R5QGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIFBlcnJhdCA8c2ltb24ucGVycmF0QGVuc2ltYWcuaW1hZy5mcj4KKyMKKyMgTGljZW5zZTogR1BMIHYyIG9yIGxhdGVyCisKKyMgdGVzdHMgZm9yIGdpdC1yZW1vdGUtbWVkaWF3aWtpCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIEdpdCBNZWRpYXdpa2kgcmVtb3RlIGhlbHBlcjogZ2l0IHB1c2ggYW5kIGdpdCBwdWxsIHNpbXBsZSB0ZXN0IGNhc2VzJworCisuIC4vdGVzdC1naXRtdy1saWIuc2gKKy4gJFRFU1RfRElSRUNUT1JZL3Rlc3QtbGliLnNoCisKKwordGVzdF9jaGVja19wcmVjb25kCisKKwordGVzdF9naXRfcmVpbXBvcnQgKCkgeworCWdpdCAtYyByZW1vdGUub3JpZ2luLmR1bWJQdXNoPXRydWUgcHVzaCAmJgorCWdpdCAtYyByZW1vdGUub3JpZ2luLm1lZGlhSW1wb3J0PXRydWUgcHVsbCAtLXJlYmFzZQorfQorCisjIERvbid0IGJvdGhlciB3aXRoIHBlcm1pc3Npb25zLCBiZSBhZG1pbmlzdHJhdG9yIGJ5IGRlZmF1bHQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbmZpZycgJworCWdpdCBjb25maWcgLS1nbG9iYWwgcmVtb3RlLm9yaWdpbi5td0xvZ2luIFdpa2lBZG1pbiAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgcmVtb3RlLm9yaWdpbi5td1Bhc3N3b3JkIEFkbWluUGFzcyAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tdW5zZXQgcmVtb3RlLm9yaWdpbi5tZWRpYUltcG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVzaCBjYW4gdXBsb2FkIG1lZGlhIChGaWxlOikgZmlsZXMnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXIgJiYKKwkoCisJCWNkIG13X2RpciAmJgorCQllY2hvICJoZWxsbyB3b3JsZCIgPkZvby50eHQgJiYKKwkJZ2l0IGFkZCBGb28udHh0ICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBhIHRleHQgZmlsZSIgJiYKKwkJZ2l0IHB1c2ggJiYKKwkJIiRQRVJMX1BBVEgiIC1lICJwcmludCBTVERPVVQgXCJiaW5hcnkgY29udGVudDogXCIuY2hyKDI1NSk7IiA+Rm9vLnR4dCAmJgorCQlnaXQgYWRkIEZvby50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgdGV4dCBmaWxlIHdpdGggYmluYXJ5IGNvbnRlbnQiICYmCisJCWdpdCBwdXNoCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xvbmUgd29ya3Mgb24gcHJldmlvdXNseSBjcmVhdGVkIHdpa2kgd2l0aCBtZWRpYSBmaWxlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG13X2RpciBtd19kaXJfY2xvbmUiICYmCisJZ2l0IGNsb25lIC1jIHJlbW90ZS5vcmlnaW4ubWVkaWFpbXBvcnQ9dHJ1ZSBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfY2xvbmUgJiYKKwl0ZXN0X2NtcCBtd19kaXJfY2xvbmUvRm9vLnR4dCBtd19kaXIvRm9vLnR4dCAmJgorCShjZCBtd19kaXJfY2xvbmUgJiYgZ2l0IGNoZWNrb3V0IEhFQUReKSAmJgorCShjZCBtd19kaXIgJiYgZ2l0IGNoZWNrb3V0IEhFQUReKSAmJgorCXRlc3RfY21wIG13X2Rpcl9jbG9uZS9Gb28udHh0IG13X2Rpci9Gb28udHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdXNoIGNhbiB1cGxvYWQgbWVkaWEgKEZpbGU6KSBmaWxlcyBjb250YWluaW5nIHZhbGlkIFVURi04JyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyICYmCisJKAorCQljZCBtd19kaXIgJiYKKwkJIiRQRVJMX1BBVEgiIC1lICJwcmludCBTVERPVVQgXCJVVEYtOCBjb250ZW50OiDDqcOow6DDqcOq4oKsLlwiOyIgPkJhci50eHQgJiYKKwkJZ2l0IGFkZCBCYXIudHh0ICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBhIHRleHQgZmlsZSB3aXRoIFVURi04IGNvbnRlbnQiICYmCisJCWdpdCBwdXNoCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xvbmUgd29ya3Mgb24gcHJldmlvdXNseSBjcmVhdGVkIHdpa2kgd2l0aCBtZWRpYSBmaWxlcyBjb250YWluaW5nIHZhbGlkIFVURi04JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbXdfZGlyIG13X2Rpcl9jbG9uZSIgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5tZWRpYWltcG9ydD10cnVlIFwKKwkJbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2Rpcl9jbG9uZSAmJgorCXRlc3RfY21wIG13X2Rpcl9jbG9uZS9CYXIudHh0IG13X2Rpci9CYXIudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdXNoICYgcHVsbCB3b3JrIHdpdGggbG9jYWxseSByZW5hbWVkIG1lZGlhIGZpbGVzJyAnCisJd2lraV9yZXNldCAmJgorCWdpdCBjbG9uZSBtZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgbXdfZGlyIiAmJgorCSgKKwkJY2QgbXdfZGlyICYmCisJCWVjaG8gIkEgRmlsZSIgPkZvby50eHQgJiYKKwkJZ2l0IGFkZCBGb28udHh0ICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBhIGZpbGUiICYmCisJCWdpdCBtdiBGb28udHh0IEJhci50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVuYW1lIGEgZmlsZSIgJiYKKwkJdGVzdF9naXRfcmVpbXBvcnQgJiYKKwkJZWNobyAiQSBGaWxlIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBCYXIudHh0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIEZvby50eHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdXNoIGNhbiBwcm9wYWdhdGUgbG9jYWwgcGFnZSBkZWxldGlvbicgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2RpciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIG13X2RpciIgJiYKKwkoCisJCWNkIG13X2RpciAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBGb28ubXcgJiYKKwkJZWNobyAiaGVsbG8gd29ybGQiID5Gb28ubXcgJiYKKwkJZ2l0IGFkZCBGb28ubXcgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIHRoZSBwYWdlIEZvbyIgJiYKKwkJZ2l0IHB1c2ggJiYKKwkJcm0gLWYgRm9vLm13ICYmCisJCWdpdCBjb21taXQgLWFtICJEZWxldGUgdGhlIHBhZ2UgRm9vIiAmJgorCQl0ZXN0X2dpdF9yZWltcG9ydCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBGb28ubXcKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdXNoIGNhbiBwcm9wYWdhdGUgbG9jYWwgbWVkaWEgZmlsZSBkZWxldGlvbicgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2RpciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIG13X2RpciIgJiYKKwkoCisJCWNkIG13X2RpciAmJgorCQllY2hvICJoZWxsbyB3b3JsZCIgPkZvby50eHQgJiYKKwkJZ2l0IGFkZCBGb28udHh0ICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCB0aGUgdGV4dCBmaWxlIEZvbyIgJiYKKwkJZ2l0IHJtIEZvby50eHQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRGVsZXRlIHRoZSBmaWxlIEZvbyIgJiYKKwkJdGVzdF9naXRfcmVpbXBvcnQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgRm9vLnR4dAorCSkKKycKKworIyB0ZXN0IGZhaWx1cmU6IHRoZSBmaWxlIGlzIGNvcnJlY3RseSB1cGxvYWRlZCwgYW5kIHRoZW4gZGVsZXRlZCBidXQKKyMgYXMgbm8gcGFnZSBsaW5rIHRvIGl0LCB0aGUgaW1wb3J0ICh3aGljaCBsb29rcyBhdCBwYWdlIHJldmlzaW9ucykKKyMgZG9lc24ndCBub3RpY2UgdGhlIGZpbGUgZGVsZXRpb24gb24gdGhlIHdpa2kuIFdlIGZldGNoIHRoZSBsaXN0IG9mCisjIGZpbGVzIGZyb20gdGhlIHdpa2ksIGJ1dCBhcyB0aGUgZmlsZSBpcyBkZWxldGVkLCBpdCBkb2Vzbid0IGFwcGVhci4KK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdCBwdWxsIGNvcnJlY3RseSBpbXBvcnRzIG1lZGlhIGZpbGUgZGVsZXRpb24gd2hlbiBubyBwYWdlIGxpbmsgdG8gaXQnICcKKwl3aWtpX3Jlc2V0ICYmCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBtd19kaXIiICYmCisJKAorCQljZCBtd19kaXIgJiYKKwkJZWNobyAiaGVsbG8gd29ybGQiID5Gb28udHh0ICYmCisJCWdpdCBhZGQgRm9vLnR4dCAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgdGhlIHRleHQgZmlsZSBGb28iICYmCisJCWdpdCBwdXNoICYmCisJCWdpdCBybSBGb28udHh0ICYmCisJCWdpdCBjb21taXQgLW0gIkRlbGV0ZSB0aGUgZmlsZSBGb28iICYmCisJCXRlc3RfZ2l0X3JlaW1wb3J0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIEZvby50eHQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdXNoIHByb3Blcmx5IHdhcm5zIGFib3V0IGluc3VmZmljaWVudCBwZXJtaXNzaW9ucycgJworCXdpa2lfcmVzZXQgJiYKKwlnaXQgY2xvbmUgbWVkaWF3aWtpOjonIiRXSUtJX1VSTCInIG13X2RpciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIG13X2RpciIgJiYKKwkoCisJCWNkIG13X2RpciAmJgorCQllY2hvICJBIEZpbGUiID5mb28uZm9yYmlkZGVuICYmCisJCWdpdCBhZGQgZm9vLmZvcmJpZGRlbiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgYSBmaWxlIiAmJgorCQlnaXQgcHVzaCAyPmFjdHVhbCAmJgorCQl0ZXN0X2kxOG5ncmVwICJmb28uZm9yYmlkZGVuIGlzIG5vdCBhIHBlcm1pdHRlZCBmaWxlIiBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgcmVwb3NpdG9yeSB3aXRoIG1lZGlhIGZpbGVzJyAnCisJd2lraV9yZXNldCAmJgorCXdpa2lfZWRpdHBhZ2UgdGVzdHBhZ2UgIkkgYW0gbGlua2luZyBhIGZpbGUgW1tGaWxlOkZpbGUudHh0XV0iIGZhbHNlICYmCisJZWNobyAiRmlsZSBjb250ZW50IiA+RmlsZS50eHQgJiYKKwl3aWtpX3VwbG9hZF9maWxlIEZpbGUudHh0ICYmCisJZWNobyAiQW5vdGhlciBmaWxlIGNvbnRlbnQiID5Bbm90aGVyRmlsZS50eHQgJiYKKwl3aWtpX3VwbG9hZF9maWxlIEFub3RoZXJGaWxlLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xvbmUgd29ya3Mgd2l0aCBvbmUgc3BlY2lmaWMgcGFnZSBjbG9uZWQgYW5kIG1lZGlhaW1wb3J0PXRydWUnICcKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz10ZXN0cGFnZSBcCisJCSAgLWMgcmVtb3RlLm9yaWdpbi5tZWRpYWltcG9ydD10cnVlIFwKKwkJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBtd19kaXJfMTUiICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl8xNSAzICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzE1L1Rlc3RwYWdlLm13ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzE1L0ZpbGU6RmlsZS50eHQubXcgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTUvRmlsZS50eHQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTUvTWFpbl9QYWdlLm13ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE1L0ZpbGU6QW5vdGhlckZpbGUudHh0Lm13ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE1L0Fub3RoZXRGaWxlLnR4dCAmJgorCXdpa2lfY2hlY2tfY29udGVudCBtd19kaXJfMTUvVGVzdHBhZ2UubXcgVGVzdHBhZ2UgJiYKKwl0ZXN0X2NtcCBtd19kaXJfMTUvRmlsZS50eHQgRmlsZS50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIHdvcmtzIHdpdGggb25lIHNwZWNpZmljIHBhZ2UgY2xvbmVkIGFuZCBtZWRpYWltcG9ydD1mYWxzZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG13X2Rpcl8xNiIgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz10ZXN0cGFnZSBcCisJCQltZWRpYXdpa2k6OiciJFdJS0lfVVJMIicgbXdfZGlyXzE2ICYmCisJdGVzdF9jb250YWluc19OX2ZpbGVzIG13X2Rpcl8xNiAxICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgbXdfZGlyXzE2L1Rlc3RwYWdlLm13ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgbXdfZGlyXzE2L0ZpbGU6RmlsZS50eHQubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTYvRmlsZS50eHQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTYvTWFpbl9QYWdlLm13ICYmCisJd2lraV9jaGVja19jb250ZW50IG13X2Rpcl8xNi9UZXN0cGFnZS5tdyBUZXN0cGFnZQorJworCisjIHNob3VsZCBiZWhhdmUgbGlrZSBtZWRpYWltcG9ydD1mYWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsb25lIHdvcmtzIHdpdGggb25lIHNwZWNpZmljIHBhZ2UgY2xvbmVkIGFuZCBtZWRpYWltcG9ydCB1bnNldCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIG13X2Rpcl8xNyIgJiYKKwlnaXQgY2xvbmUgLWMgcmVtb3RlLm9yaWdpbi5wYWdlcz10ZXN0cGFnZSBcCisJCW1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXJfMTcgJiYKKwl0ZXN0X2NvbnRhaW5zX05fZmlsZXMgbXdfZGlyXzE3IDEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBtd19kaXJfMTcvVGVzdHBhZ2UubXcgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBtd19kaXJfMTcvRmlsZTpGaWxlLnR4dC5tdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNy9GaWxlLnR4dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG13X2Rpcl8xNy9NYWluX1BhZ2UubXcgJiYKKwl3aWtpX2NoZWNrX2NvbnRlbnQgbXdfZGlyXzE3L1Rlc3RwYWdlLm13IFRlc3RwYWdlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9tdy10by1naXQvdC90OTM2NC1wdWxsLWJ5LXJldi5zaCBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjQtcHVsbC1ieS1yZXYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWMyMjQ1NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjQtcHVsbC1ieS1yZXYuc2gKQEAgLTAsMCArMSwxNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgdGhlIEdpdCBNZWRpYXdpa2kgcmVtb3RlIGhlbHBlcjogZ2l0IHB1bGwgYnkgcmV2aXNpb24nCisKKy4gLi90ZXN0LWdpdG13LWxpYi5zaAorLiAuL3B1c2gtcHVsbC10ZXN0cy5zaAorLiAkVEVTVF9ESVJFQ1RPUlkvdGVzdC1saWIuc2gKKwordGVzdF9jaGVja19wcmVjb25kCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZ3VyYXRpb24nICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIG1lZGlhd2lraS5mZXRjaFN0cmF0ZWd5IGJ5X3JldgorJworCit0ZXN0X3B1c2hfcHVsbAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjUtY29udGludWluZy1xdWVyaWVzLnNoIGIvY29udHJpYi9tdy10by1naXQvdC90OTM2NS1jb250aW51aW5nLXF1ZXJpZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDE2NDU0NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdDkzNjUtY29udGludWluZy1xdWVyaWVzLnNoCkBAIC0wLDAgKzEsMjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBHaXQgTWVkaWF3aWtpIHJlbW90ZSBoZWxwZXI6IHF1ZXJpZXMgdy8gbW9yZSB0aGFuIDUwMCByZXN1bHRzJworCisuIC4vdGVzdC1naXRtdy1saWIuc2gKKy4gJFRFU1RfRElSRUNUT1JZL3Rlc3QtbGliLnNoCisKK3Rlc3RfY2hlY2tfcHJlY29uZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBwYWdlIHcvID41MDAgcmV2aXNpb25zJyAnCisJd2lraV9yZXNldCAmJgorCWZvciBpIGluICQodGVzdF9zZXEgNTAxKQorCWRvCisJCWVjaG8gImNyZWF0aW5nIHJldmlzaW9uICRpIiAmJgorCQl3aWtpX2VkaXRwYWdlIGZvbyAicmV2aXNpb24gJGk8YnIvPiIgdHJ1ZQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBwYWdlIHcvID41MDAgcmV2aXNpb25zJyAnCisJZ2l0IGNsb25lIG1lZGlhd2lraTo6JyIkV0lLSV9VUkwiJyBtd19kaXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXctbGliLnNoIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LWxpYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NTQ2Mjk0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LWdpdG13LWxpYi5zaApAQCAtMCwwICsxLDQzMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTIKKyMgICAgIENoYXJsZXMgUm91c3NlbCA8Y2hhcmxlcy5yb3Vzc2VsQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIFNpbW9uIENhdGhlYnJhcyA8c2ltb24uY2F0aGVicmFzQGVuc2ltYWcuaW1hZy5mcj4KKyMgICAgIEp1bGllbiBLaGF5YXQgPGp1bGllbi5raGF5YXRAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgR3VpbGxhdW1lIFNhc2R5IDxndWlsbGF1bWUuc2FzZHlAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gUGVycmF0IDxzaW1vbi5wZXJyYXRAZW5zaW1hZy5pbWFnLmZyPgorIyBMaWNlbnNlOiBHUEwgdjIgb3IgbGF0ZXIKKworIworIyBDT05GSUdVUkFUSU9OIFZBUklBQkxFUworIyBZb3UgbWlnaHQgd2FudCB0byBjaGFuZ2UgdGhlc2Ugb25lcworIworCisuIC4vdGVzdC5jb25maWcKKworV0lLSV9VUkw9aHR0cDovLyIkU0VSVkVSX0FERFI6JFBPUlQvJFdJS0lfRElSX05BTUUiCitDVVJSX0RJUj0kKHB3ZCkKK1RFU1RfT1VUUFVUX0RJUkVDVE9SWT0kKHB3ZCkKK1RFU1RfRElSRUNUT1JZPSIkQ1VSUl9ESVIiLy4uLy4uLy4uL3QKKworZXhwb3J0IFRFU1RfT1VUUFVUX0RJUkVDVE9SWSBURVNUX0RJUkVDVE9SWSBDVVJSX0RJUgorCitpZiB0ZXN0ICIkTElHSFRUUEQiID0gImZhbHNlIiA7IHRoZW4KKwlQT1JUPTgwCitlbHNlCisJV0lLSV9ESVJfSU5TVD0iJENVUlJfRElSLyRXRUJfV1dXIgorZmkKKword2lraV91cGxvYWRfZmlsZSAoKSB7CisJIiRDVVJSX0RJUiIvdGVzdC1naXRtdy5wbCB1cGxvYWRfZmlsZSAiJEAiCit9CisKK3dpa2lfZ2V0cGFnZSAoKSB7CisJIiRDVVJSX0RJUiIvdGVzdC1naXRtdy5wbCBnZXRfcGFnZSAiJEAiCit9CisKK3dpa2lfZGVsZXRlX3BhZ2UgKCkgeworCSIkQ1VSUl9ESVIiL3Rlc3QtZ2l0bXcucGwgZGVsZXRlX3BhZ2UgIiRAIgorfQorCit3aWtpX2VkaXRwYWdlICgpIHsKKwkiJENVUlJfRElSIi90ZXN0LWdpdG13LnBsIGVkaXRfcGFnZSAiJEAiCit9CisKK2RpZSAoKSB7CisJZGllX3dpdGhfc3RhdHVzIDEgIiRAIgorfQorCitkaWVfd2l0aF9zdGF0dXMgKCkgeworCXN0YXR1cz0kMQorCXNoaWZ0CisJZWNobyA+JjIgIiQqIgorCWV4aXQgIiRzdGF0dXMiCit9CisKKworIyBDaGVjayB0aGUgcHJlY29uZGl0aW9ucyB0byBydW4gZ2l0LXJlbW90ZS1tZWRpYXdpa2kncyB0ZXN0cwordGVzdF9jaGVja19wcmVjb25kICgpIHsKKwlpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTAorCXRoZW4KKwkJc2tpcF9hbGw9J3NraXBwaW5nIGdhdGV3YXkgZ2l0LW13IHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJCXRlc3RfZG9uZQorCWZpCisKKwlHSVRfRVhFQ19QQVRIPSQoY2QgIiQoZGlybmFtZSAiJDAiKSIgJiYgY2QgIi4uLy4uIiAmJiBwd2QpCisJUEFUSD0iJEdJVF9FWEVDX1BBVEgiJy9iaW4td3JhcHBlcjonIiRQQVRIIgorCisJaWYgWyAhIC1kICIkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRSIgXTsKKwl0aGVuCisJCXNraXBfYWxsPSdza2lwcGluZyBnYXRld2F5IGdpdC1tdyB0ZXN0cywgbm8gbWVkaWF3aWtpIGZvdW5kJworCQl0ZXN0X2RvbmUKKwlmaQorfQorCisjIHRlc3RfZGlmZl9kaXJlY3RvcmllcyA8ZGlyX2dpdD4gPGRpcl93aWtpPgorIworIyBDb21wYXJlIHRoZSBjb250ZW50cyBvZiBkaXJlY3RvcmllcyA8ZGlyX2dpdD4gYW5kIDxkaXJfd2lraT4gd2l0aCBkaWZmCisjIGFuZCBlcnJvcnMgaWYgdGhleSBkbyBub3QgbWF0Y2guIFRoZSBwcm9ncmFtIHdpbGwKKyMgbm90IGxvb2sgaW50byAuZ2l0IGluIHRoZSBwcm9jZXNzLgorIyBXYXJuaW5nOiB0aGUgZmlyc3QgYXJndW1lbnQgTVVTVCBiZSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGdpdCBkYXRhCit0ZXN0X2RpZmZfZGlyZWN0b3JpZXMgKCkgeworCXJtIC1yZiAiJDFfdG1wIgorCW1rZGlyIC1wICIkMV90bXAiCisJY3AgIiQxIi8qLm13ICIkMV90bXAiCisJZGlmZiAtciAtYiAiJDFfdG1wIiAiJDIiCit9CisKKyMgJDE9PGRpcj4KKyMgJDI9PE4+CisjCisjIENoZWNrIHRoYXQgPGRpcj4gY29udGFpbnMgZXhhY3RseSA8Tj4gZmlsZXMKK3Rlc3RfY29udGFpbnNfTl9maWxlcyAoKSB7CisJaWYgdGVzdCAkKGxzIC0tICIkMSIgfCB3YyAtbCkgLW5lICIkMiI7IHRoZW4KKwkJZWNobyAiZGlyZWN0b3J5ICQxIHNob3VsZCBjb250YWluICQyIGZpbGVzIgorCQllY2hvICJpdCBjb250YWlucyB0aGVzZSBmaWxlczoiCisJCWxzICIkMSIKKwkJZmFsc2UKKwlmaQorfQorCisKKyMgd2lraV9jaGVja19jb250ZW50IDxmaWxlX25hbWU+IDxwYWdlX25hbWU+CisjCisjIENvbXBhcmVzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZSA8ZmlsZV9uYW1lPiBhbmQgdGhlIHdpa2kgcGFnZQorIyA8cGFnZV9uYW1lPiBhbmQgZXhpdHMgd2l0aCBlcnJvciAxIGlmIHRoZXkgZG8gbm90IG1hdGNoLgord2lraV9jaGVja19jb250ZW50ICgpIHsKKwlta2RpciAtcCB3aWtpX3RtcAorCXdpa2lfZ2V0cGFnZSAiJDIiIHdpa2lfdG1wCisJIyByZXBsYWNlbWVudCBvZiBmb3JiaWRkZW4gY2hhcmFjdGVyIGluIGZpbGUgbmFtZQorCXBhZ2VfbmFtZT0kKHByaW50ZiAiJXNcbiIgIiQyIiB8IHNlZCAtZSAicy9cLy8lMkYvZyIpCisKKwlkaWZmIC1iICIkMSIgd2lraV90bXAvIiRwYWdlX25hbWUiLm13CisJaWYgdGVzdCAkPyAtbmUgMAorCXRoZW4KKwkJcm0gLXJmIHdpa2lfdG1wCisJCWVycm9yICJFUlJPUjogZmlsZSAkMiBub3QgZm91bmQgb24gd2lraSIKKwlmaQorCXJtIC1yZiB3aWtpX3RtcAorfQorCisjIHdpa2lfcGFnZV9leGlzdCA8cGFnZV9uYW1lPgorIworIyBDaGVjayB0aGUgZXhpc3RlbmNlIG9mIHRoZSBwYWdlIDxwYWdlX25hbWU+IG9uIHRoZSB3aWtpIGFuZCBleGl0cworIyB3aXRoIGVycm9yIGlmIGl0IGlzIGFic2VudCBmcm9tIGl0Lgord2lraV9wYWdlX2V4aXN0ICgpIHsKKwlta2RpciAtcCB3aWtpX3RtcAorCXdpa2lfZ2V0cGFnZSAiJDEiIHdpa2lfdG1wCisJcGFnZV9uYW1lPSQocHJpbnRmICIlc1xuIiAiJDEiIHwgc2VkICJzL1wvLyUyRi9nIikKKwlpZiB0ZXN0IC1mIHdpa2lfdG1wLyIkcGFnZV9uYW1lIi5tdyA7IHRoZW4KKwkJcm0gLXJmIHdpa2lfdG1wCisJZWxzZQorCQlybSAtcmYgd2lraV90bXAKKwkJZXJyb3IgInRlc3QgZmFpbGVkOiBmaWxlICQxIG5vdCBmb3VuZCBvbiB3aWtpIgorCWZpCit9CisKKyMgd2lraV9nZXRhbGxwYWdlbmFtZQorIworIyBGZXRjaCB0aGUgbmFtZSBvZiBlYWNoIHBhZ2Ugb24gdGhlIHdpa2kuCit3aWtpX2dldGFsbHBhZ2VuYW1lICgpIHsKKwkiJENVUlJfRElSIi90ZXN0LWdpdG13LnBsIGdldGFsbHBhZ2VuYW1lCit9CisKKyMgd2lraV9nZXRhbGxwYWdlY2F0ZWdvcnkgPGNhdGVnb3J5PgorIworIyBGZXRjaCB0aGUgbmFtZSBvZiBlYWNoIHBhZ2UgYmVsb25naW5nIHRvIDxjYXRlZ29yeT4gb24gdGhlIHdpa2kuCit3aWtpX2dldGFsbHBhZ2VjYXRlZ29yeSAoKSB7CisJIiRDVVJSX0RJUiIvdGVzdC1naXRtdy5wbCBnZXRhbGxwYWdlbmFtZSAiJEAiCit9CisKKyMgd2lraV9nZXRhbGxwYWdlIDxkZXN0X2Rpcj4gWzxjYXRlZ29yeT5dCisjCisjIEZldGNoIGFsbCB0aGUgcGFnZXMgZnJvbSB0aGUgd2lraSBhbmQgcGxhY2UgdGhlbSBpbiB0aGUgZGlyZWN0b3J5CisjIDxkZXN0X2Rpcj4uCisjIElmIDxjYXRlZ29yeT4gaXMgZGVmaW5lLCB0aGVuIHdpa2lfZ2V0YWxscGFnZSBmZXRjaCB0aGUgcGFnZXMgaW5jbHVkZWQKKyMgaW4gPGNhdGVnb3J5Pi4KK3dpa2lfZ2V0YWxscGFnZSAoKSB7CisJaWYgdGVzdCAteiAiJDIiOworCXRoZW4KKwkJd2lraV9nZXRhbGxwYWdlbmFtZQorCWVsc2UKKwkJd2lraV9nZXRhbGxwYWdlY2F0ZWdvcnkgIiQyIgorCWZpCisJbWtkaXIgLXAgIiQxIgorCXdoaWxlIHJlYWQgLXIgbGluZTsgZG8KKwkJd2lraV9nZXRwYWdlICIkbGluZSIgJDE7CisJZG9uZSA8IGFsbC50eHQKK30KKworIyA9PT09PT09PT09PT09PT09PSBJbnN0YWxsIHBhcnQgPT09PT09PT09PT09PT09PT0KKworZXJyb3IgKCkgeworCWVjaG8gIiRAIiA+JjIKKwlleGl0IDEKK30KKworIyBjb25maWdfbGlnaHR0cGQKKyMKKyMgQ3JlYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGFuZCB0aGUgZm9sZGVycyBuZWNlc3NhcnkgdG8gc3RhcnQgbGlnaHR0cGQuCisjIE92ZXJ3cml0ZSBhbnkgZXhpc3RpbmcgZmlsZS4KK2NvbmZpZ19saWdodHRwZCAoKSB7CisJbWtkaXIgLXAgJFdFQgorCW1rZGlyIC1wICRXRUJfVE1QCisJbWtkaXIgLXAgJFdFQl9XV1cKKwljYXQgPiAkV0VCL2xpZ2h0dHBkLmNvbmYgPDxFT0YKKwlzZXJ2ZXIuZG9jdW1lbnQtcm9vdCA9ICIkQ1VSUl9ESVIvJFdFQl9XV1ciCisJc2VydmVyLnBvcnQgPSAkUE9SVAorCXNlcnZlci5waWQtZmlsZSA9ICIkQ1VSUl9ESVIvJFdFQl9UTVAvcGlkIgorCisJc2VydmVyLm1vZHVsZXMgPSAoCisJIm1vZF9yZXdyaXRlIiwKKwkibW9kX3JlZGlyZWN0IiwKKwkibW9kX2FjY2VzcyIsCisJIm1vZF9hY2Nlc3Nsb2ciLAorCSJtb2RfZmFzdGNnaSIKKwkpCisKKwlpbmRleC1maWxlLm5hbWVzID0gKCJpbmRleC5waHAiICwgImluZGV4Lmh0bWwiKQorCisJbWltZXR5cGUuYXNzaWduCQkgICAgPSAoCisJIi5wZGYiCQk9PgkiYXBwbGljYXRpb24vcGRmIiwKKwkiLnNpZyIJCT0+CSJhcHBsaWNhdGlvbi9wZ3Atc2lnbmF0dXJlIiwKKwkiLnNwbCIJCT0+CSJhcHBsaWNhdGlvbi9mdXR1cmVzcGxhc2giLAorCSIuY2xhc3MiCT0+CSJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLAorCSIucHMiCQk9PgkiYXBwbGljYXRpb24vcG9zdHNjcmlwdCIsCisJIi50b3JyZW50Igk9PgkiYXBwbGljYXRpb24veC1iaXR0b3JyZW50IiwKKwkiLmR2aSIJCT0+CSJhcHBsaWNhdGlvbi94LWR2aSIsCisJIi5neiIJCT0+CSJhcHBsaWNhdGlvbi94LWd6aXAiLAorCSIucGFjIgkJPT4JImFwcGxpY2F0aW9uL3gtbnMtcHJveHktYXV0b2NvbmZpZyIsCisJIi5zd2YiCQk9PgkiYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2giLAorCSIudGFyLmd6Igk9PgkiYXBwbGljYXRpb24veC10Z3oiLAorCSIudGd6IgkJPT4JImFwcGxpY2F0aW9uL3gtdGd6IiwKKwkiLnRhciIJCT0+CSJhcHBsaWNhdGlvbi94LXRhciIsCisJIi56aXAiCQk9PgkiYXBwbGljYXRpb24vemlwIiwKKwkiLm1wMyIJCT0+CSJhdWRpby9tcGVnIiwKKwkiLm0zdSIJCT0+CSJhdWRpby94LW1wZWd1cmwiLAorCSIud21hIgkJPT4JImF1ZGlvL3gtbXMtd21hIiwKKwkiLndheCIJCT0+CSJhdWRpby94LW1zLXdheCIsCisJIi5vZ2ciCQk9PgkiYXBwbGljYXRpb24vb2dnIiwKKwkiLndhdiIJCT0+CSJhdWRpby94LXdhdiIsCisJIi5naWYiCQk9PgkiaW1hZ2UvZ2lmIiwKKwkiLmpwZyIJCT0+CSJpbWFnZS9qcGVnIiwKKwkiLmpwZWciCQk9PgkiaW1hZ2UvanBlZyIsCisJIi5wbmciCQk9PgkiaW1hZ2UvcG5nIiwKKwkiLnhibSIJCT0+CSJpbWFnZS94LXhiaXRtYXAiLAorCSIueHBtIgkJPT4JImltYWdlL3gteHBpeG1hcCIsCisJIi54d2QiCQk9PgkiaW1hZ2UveC14d2luZG93ZHVtcCIsCisJIi5jc3MiCQk9PgkidGV4dC9jc3MiLAorCSIuaHRtbCIJCT0+CSJ0ZXh0L2h0bWwiLAorCSIuaHRtIgkJPT4JInRleHQvaHRtbCIsCisJIi5qcyIJCT0+CSJ0ZXh0L2phdmFzY3JpcHQiLAorCSIuYXNjIgkJPT4JInRleHQvcGxhaW4iLAorCSIuYyIJCT0+CSJ0ZXh0L3BsYWluIiwKKwkiLmNwcCIJCT0+CSJ0ZXh0L3BsYWluIiwKKwkiLmxvZyIJCT0+CSJ0ZXh0L3BsYWluIiwKKwkiLmNvbmYiCQk9PgkidGV4dC9wbGFpbiIsCisJIi50ZXh0IgkJPT4JInRleHQvcGxhaW4iLAorCSIudHh0IgkJPT4JInRleHQvcGxhaW4iLAorCSIuZHRkIgkJPT4JInRleHQveG1sIiwKKwkiLnhtbCIJCT0+CSJ0ZXh0L3htbCIsCisJIi5tcGVnIgkJPT4JInZpZGVvL21wZWciLAorCSIubXBnIgkJPT4JInZpZGVvL21wZWciLAorCSIubW92IgkJPT4JInZpZGVvL3F1aWNrdGltZSIsCisJIi5xdCIJCT0+CSJ2aWRlby9xdWlja3RpbWUiLAorCSIuYXZpIgkJPT4JInZpZGVvL3gtbXN2aWRlbyIsCisJIi5hc2YiCQk9PgkidmlkZW8veC1tcy1hc2YiLAorCSIuYXN4IgkJPT4JInZpZGVvL3gtbXMtYXNmIiwKKwkiLndtdiIJCT0+CSJ2aWRlby94LW1zLXdtdiIsCisJIi5iejIiCQk9PgkiYXBwbGljYXRpb24veC1iemlwIiwKKwkiLnRieiIJCT0+CSJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiLAorCSIudGFyLmJ6MiIJPT4JImFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciIsCisJIiIJCT0+CSJ0ZXh0L3BsYWluIgorCSkKKworCWZhc3RjZ2kuc2VydmVyID0gKCAiLnBocCIgPT4KKwkoImxvY2FsaG9zdCIgPT4KKwkoICJzb2NrZXQiID0+ICIkQ1VSUl9ESVIvJFdFQl9UTVAvcGhwLnNvY2tldCIsCisJImJpbi1wYXRoIiA9PiAiJFBIUF9ESVIvcGhwLWNnaSAtYyAkQ1VSUl9ESVIvJFdFQi9waHAuaW5pIgorCisJKQorCSkKKwkpCitFT0YKKworCWNhdCA+ICRXRUIvcGhwLmluaSA8PEVPRgorCXNlc3Npb24uc2F2ZV9wYXRoID0nJENVUlJfRElSLyRXRUJfVE1QJworRU9GCit9CisKKyMgc3RhcnRfbGlnaHR0cGQKKyMKKyMgU3RhcnQgb3IgcmVzdGFydCBkYWVtb24gbGlnaHR0cGQuIElmIHJlc3RhcnQsIHJld3JpdGUgY29uZmlndXJhdGlvbiBmaWxlcy4KK3N0YXJ0X2xpZ2h0dHBkICgpIHsKKwlpZiB0ZXN0IC1mICIkV0VCX1RNUC9waWQiOyB0aGVuCisJCWVjaG8gIkluc3RhbmNlIGFscmVhZHkgcnVubmluZy4gUmVzdGFydGluZy4uLiIKKwkJc3RvcF9saWdodHRwZAorCWZpCisJY29uZmlnX2xpZ2h0dHBkCisJIiRMSUdIVFRQRF9ESVIiL2xpZ2h0dHBkIC1mICIkV0VCIi9saWdodHRwZC5jb25mCisKKwlpZiB0ZXN0ICQ/IC1uZSAwIDsgdGhlbgorCQllY2hvICJDb3VsZCBub3QgZXhlY3V0ZSBodHRwIGRlYW1vbiBsaWdodHRwZCIKKwkJZXhpdCAxCisJZmkKK30KKworIyBzdG9wX2xpZ2h0dHBkCisjCisjIEtpbGwgZGFlbW9uIGxpZ2h0dHBkIGFuZCByZW1vdmVzIGZpbGVzIGFuZCBmb2xkZXJzIGFzc29jaWF0ZWQuCitzdG9wX2xpZ2h0dHBkICgpIHsKKwl0ZXN0IC1mICIkV0VCX1RNUC9waWQiICYmIGtpbGwgJChjYXQgIiRXRUJfVE1QL3BpZCIpCit9CisKKyMgQ3JlYXRlIHRoZSBTUUxpdGUgZGF0YWJhc2Ugb2YgdGhlIE1lZGlhV2lraS4gSWYgdGhlIGRhdGFiYXNlIGZpbGUgYWxyZWFkeQorIyBleGlzdHMsIGl0IHdpbGwgYmUgZGVsZXRlZC4KKyMgVGhpcyBzY3JpcHQgc2hvdWxkIGJlIHJ1bm5lZCBmcm9tIHRoZSBkaXJlY3Rvcnkgd2hlcmUgJEZJTEVTX0ZPTERFUiBpcworIyBsb2NhdGVkLgorY3JlYXRlX2RiICgpIHsKKwlybSAtZiAiJFRNUC8kREJfRklMRSIKKworCWVjaG8gIkdlbmVyYXRpbmcgdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlLiBJdCBjYW4gdGFrZSBzb21lIHRpbWUgLi4uIgorCSMgUnVuIHRoZSBwaHAgc2NyaXB0IHRvIGdlbmVyYXRlIHRoZSBTUUxpdGUgZGF0YWJhc2UgZmlsZQorCSMgd2l0aCBjVVJMIGNhbGxzLgorCXBocCAiJEZJTEVTX0ZPTERFUi8kREJfSU5TVEFMTF9TQ1JJUFQiICQoYmFzZW5hbWUgIiREQl9GSUxFIiAuc3FsaXRlKSBcCisJCSIkV0lLSV9BRE1JTiIgIiRXSUtJX1BBU1NXIiAiJFRNUCIgIiRQT1JUIgorCisJaWYgWyAhIC1mICIkVE1QLyREQl9GSUxFIiBdIDsgdGhlbgorCQllcnJvciAiQ2FuJ3QgY3JlYXRlIGRhdGFiYXNlIGZpbGUgJFRNUC8kREJfRklMRS4gVHJ5IHRvIHJ1biAuL2luc3RhbGwtd2lraS5zaCBkZWxldGUgZmlyc3QuIgorCWZpCisKKwkjIENvcHkgdGhlIGdlbmVyYXRlZCBkYXRhYmFzZSBmaWxlIGludG8gdGhlIGRpcmVjdG9yeSB0aGUKKwkjIHVzZXIgaW5kaWNhdGVkLgorCWNwICIkVE1QLyREQl9GSUxFIiAiJEZJTEVTX0ZPTERFUiIgfHwKKwkJZXJyb3IgIlVuYWJsZSB0byBjb3B5ICRUTVAvJERCX0ZJTEUgdG8gJEZJTEVTX0ZPTERFUiIKK30KKworIyBJbnN0YWxsIGEgd2lraSBpbiB5b3VyIHdlYiBzZXJ2ZXIgZGlyZWN0b3J5Lgord2lraV9pbnN0YWxsICgpIHsKKwlpZiB0ZXN0ICRMSUdIVFRQRCA9ICJ0cnVlIiA7IHRoZW4KKwkJc3RhcnRfbGlnaHR0cGQKKwlmaQorCisJU0VSVkVSX0FERFI9JFNFUlZFUl9BRERSOiRQT1JUCisJIyBJbiB0aGlzIHBhcnQsIHdlIGNoYW5nZSBkaXJlY3RvcnkgdG8gJFRNUCBpbiBvcmRlciB0byBkb3dubG9hZCwKKwkjIHVucGFjayBhbmQgY29weSB0aGUgZmlsZXMgb2YgTWVkaWFXaWtpCisJKAorCW1rZGlyIC1wICIkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRSIKKwlpZiBbICEgLWQgIiRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIiBdIDsgdGhlbgorCQllcnJvciAiRm9sZGVyICRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIGRvZXNuJ3QgZXhpc3QuCisJCVBsZWFzZSBjcmVhdGUgaXQgYW5kIGxhdW5jaCB0aGUgc2NyaXB0IGFnYWluLiIKKwlmaQorCisJIyBGZXRjaCBNZWRpYVdpa2kncyBhcmNoaXZlIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIFRNUCBkaXJlY3RvcnkKKwlNV19GSUxFTkFNRT0ibWVkaWF3aWtpLSRNV19WRVJTSU9OX01BSk9SLiRNV19WRVJTSU9OX01JTk9SLnRhci5neiIKKwljZCAiJFRNUCIKKwlpZiBbICEgLWYgJE1XX0ZJTEVOQU1FIF0gOyB0aGVuCisJCWVjaG8gIkRvd25sb2FkaW5nICRNV19WRVJTSU9OX01BSk9SLiRNV19WRVJTSU9OX01JTk9SIHNvdXJjZXMgLi4uIgorCQl3Z2V0ICJodHRwOi8vZG93bmxvYWQud2lraW1lZGlhLm9yZy9tZWRpYXdpa2kvJE1XX1ZFUlNJT05fTUFKT1IvJE1XX0ZJTEVOQU1FIiB8fAorCQkJZXJyb3IgIlVuYWJsZSB0byBkb3dubG9hZCAiXAorCQkJImh0dHA6Ly9kb3dubG9hZC53aWtpbWVkaWEub3JnL21lZGlhd2lraS8kTVdfVkVSU0lPTl9NQUpPUi8iXAorCQkJIiRNV19GSUxFTkFNRS4gIlwKKwkJCSJQbGVhc2UgZml4IHlvdXIgY29ubmVjdGlvbiBhbmQgbGF1bmNoIHRoZSBzY3JpcHQgYWdhaW4uIgorCQllY2hvICIkTVdfRklMRU5BTUUgZG93bmxvYWRlZCBpbiAkKHB3ZCkuICJcCisJCQkiWW91IGNhbiBkZWxldGUgaXQgbGF0ZXIgaWYgeW91IHdhbnQuIgorCWVsc2UKKwkJZWNobyAiUmV1c2luZyBleGlzdGluZyAkTVdfRklMRU5BTUUgZG93bmxvYWRlZCBpbiAkKHB3ZCkuIgorCWZpCisJYXJjaGl2ZV9hYnNfcGF0aD0kKHB3ZCkvJE1XX0ZJTEVOQU1FCisJY2QgIiRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FLyIgfHwKKwkJZXJyb3IgImNhbid0IGNkIHRvICRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FLyIKKwl0YXIgeHpmICIkYXJjaGl2ZV9hYnNfcGF0aCIgLS1zdHJpcC1jb21wb25lbnRzPTEgfHwKKwkJZXJyb3IgIlVuYWJsZSB0byBleHRyYWN0IFdpa2lNZWRpYSdzIGZpbGVzIGZyb20gJGFyY2hpdmVfYWJzX3BhdGggdG8gIlwKKwkJCSIkV0lLSV9ESVJfSU5TVC8kV0lLSV9ESVJfTkFNRSIKKwkpIHx8IGV4aXQgMQorCisJY3JlYXRlX2RiCisKKwkjIENvcHkgdGhlIGdlbmVyaWMgTG9jYWxTZXR0aW5ncy5waHAgaW4gdGhlIHdlYiBzZXJ2ZXIncyBkaXJlY3RvcnkKKwkjIEFuZCBtb2RpZnkgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8gdGhlIG9uZXMgc2V0IGF0IHRoZSB0b3AKKwkjIG9mIHRoaXMgc2NyaXB0LgorCSMgTm90ZSB0aGF0IExvY2FsU2V0dGluZ3MucGhwIGlzIG5ldmVyIG1vZGlmaWVkLgorCWlmIFsgISAtZiAiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLnBocCIgXSA7IHRoZW4KKwkJZXJyb3IgIkNhbid0IGZpbmQgJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLnBocCAiIFwKKwkJCSJpbiB0aGUgY3VycmVudCBmb2xkZXIuICJcCisJCSJQbGVhc2UgcnVuIHRoZSBzY3JpcHQgaW5zaWRlIGl0cyBmb2xkZXIuIgorCWZpCisJY3AgIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy5waHAiIFwKKwkJIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIiB8fAorCQllcnJvciAiVW5hYmxlIHRvIGNvcHkgJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLnBocCAiIFwKKwkJInRvICRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIgorCisJIyBQYXJzZSBhbmQgc2V0IHRoZSBMb2NhbFNldHRpbmdzIGZpbGUgb2YgdGhlIHVzZXIgYWNjb3JkaW5nIHRvIHRoZQorCSMgQ09ORklHVVJBVElPTiBWQVJJQUJMRVMgc2VjdGlvbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc2NyaXB0CisJZmlsZV9zd2FwPSIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3Mtc3dhcC5waHAiCisJc2VkICJzLEBXR19TQ1JJUFRfUEFUSEAsLyRXSUtJX0RJUl9OQU1FLCIgXAorCQkiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiID4gIiRmaWxlX3N3YXAiCisJbXYgIiRmaWxlX3N3YXAiICIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIKKwlzZWQgInMsQFdHX1NFUlZFUkAsaHR0cDovLyRTRVJWRVJfQUREUiwiIFwKKwkJIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIiA+ICIkZmlsZV9zd2FwIgorCW12ICIkZmlsZV9zd2FwIiAiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiCisJc2VkICJzLEBXR19TUUxJVEVfREFUQURJUkAsJFRNUCwiIFwKKwkJIiRGSUxFU19GT0xERVIvTG9jYWxTZXR0aW5ncy10bXAucGhwIiA+ICIkZmlsZV9zd2FwIgorCW12ICIkZmlsZV9zd2FwIiAiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiCisJc2VkICJzLEBXR19TUUxJVEVfREFUQUZJTEVALCQoIGJhc2VuYW1lICREQl9GSUxFIC5zcWxpdGUpLCIgXAorCQkiJEZJTEVTX0ZPTERFUi9Mb2NhbFNldHRpbmdzLXRtcC5waHAiID4gIiRmaWxlX3N3YXAiCisJbXYgIiRmaWxlX3N3YXAiICIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIKKworCW12ICIkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIgXAorCQkiJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUvTG9jYWxTZXR0aW5ncy5waHAiIHx8CisJCWVycm9yICJVbmFibGUgdG8gbW92ZSAkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MtdG1wLnBocCIgXAorCQkiaW4gJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUiCisJZWNobyAiRmlsZSAkRklMRVNfRk9MREVSL0xvY2FsU2V0dGluZ3MucGhwIGlzIHNldCBpbiIgXAorCQkiICRXSUtJX0RJUl9JTlNULyRXSUtJX0RJUl9OQU1FIgorCisJZWNobyAiWW91ciB3aWtpIGhhcyBiZWVuIGluc3RhbGxlZC4gWW91IGNhbiBjaGVjayBpdCBhdAorCQlodHRwOi8vJFNFUlZFUl9BRERSLyRXSUtJX0RJUl9OQU1FIgorfQorCisjIFJlc2V0IHRoZSBkYXRhYmFzZSBvZiB0aGUgd2lraSBhbmQgdGhlIHBhc3N3b3JkIG9mIHRoZSBhZG1pbgorIworIyBXYXJuaW5nOiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIG9ubHkgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgdC8gZGlyZWN0b3J5Cit3aWtpX3Jlc2V0ICgpIHsKKwkjIENvcHkgaW5pdGlhbCBkYXRhYmFzZSBvZiB0aGUgd2lraQorCWlmIFsgISAtZiAiLi4vJEZJTEVTX0ZPTERFUi8kREJfRklMRSIgXSA7IHRoZW4KKwkJZXJyb3IgIkNhbid0IGZpbmQgLi4vJEZJTEVTX0ZPTERFUi8kREJfRklMRSBpbiB0aGUgY3VycmVudCBmb2xkZXIuIgorCWZpCisJY3AgIi4uLyRGSUxFU19GT0xERVIvJERCX0ZJTEUiICIkVE1QIiB8fAorCQllcnJvciAiQ2FuJ3QgY29weSAuLi8kRklMRVNfRk9MREVSLyREQl9GSUxFIGluICRUTVAiCisJZWNobyAiRmlsZSAkRklMRVNfRk9MREVSLyREQl9GSUxFIGlzIHNldCBpbiAkVE1QIgorfQorCisjIERlbGV0ZSB0aGUgd2lraSBjcmVhdGVkIGluIHRoZSB3ZWIgc2VydmVyJ3MgZGlyZWN0b3J5IGFuZCBhbGwgaXRzIGNvbnRlbnQKKyMgc2F2ZWQgaW4gdGhlIGRhdGFiYXNlLgord2lraV9kZWxldGUgKCkgeworCWlmIHRlc3QgJExJR0hUVFBEID0gInRydWUiOyB0aGVuCisJCXN0b3BfbGlnaHR0cGQKKwkJcm0gLWZyICIkV0VCIgorCWVsc2UKKwkJIyBEZWxldGUgdGhlIHdpa2kncyBkaXJlY3RvcnkuCisJCXJtIC1yZiAiJFdJS0lfRElSX0lOU1QvJFdJS0lfRElSX05BTUUiIHx8CisJCQllcnJvciAiV2lraSdzIGRpcmVjdG9yeSAkV0lLSV9ESVJfSU5TVC8iIFwKKwkJCSIkV0lLSV9ESVJfTkFNRSBjb3VsZCBub3QgYmUgZGVsZXRlZCIKKwkJIyBEZWxldGUgdGhlIHdpa2kncyBTUUxpdGUgZGF0YWJhc2UuCisJCXJtIC1mICIkVE1QLyREQl9GSUxFIiB8fAorCQkJZXJyb3IgIkRhdGFiYXNlICRUTVAvJERCX0ZJTEUgY291bGQgbm90IGJlIGRlbGV0ZWQuIgorCWZpCisKKwkjIERlbGV0ZSB0aGUgd2lraSdzIFNRTGl0ZSBkYXRhYmFzZQorCXJtIC1mICIkVE1QLyREQl9GSUxFIiB8fCBlcnJvciAiRGF0YWJhc2UgJFRNUC8kREJfRklMRSBjb3VsZCBub3QgYmUgZGVsZXRlZC4iCisJcm0gLWYgIiRGSUxFU19GT0xERVIvJERCX0ZJTEUiCisJcm0gLXJmICIkVE1QL21lZGlhd2lraS0kTVdfVkVSU0lPTl9NQUpPUi4kTVdfVkVSU0lPTl9NSU5PUi50YXIuZ3oiCit9CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXcucGwgYi9jb250cmliL213LXRvLWdpdC90L3Rlc3QtZ2l0bXcucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGZmNzYyNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvbXctdG8tZ2l0L3QvdGVzdC1naXRtdy5wbApAQCAtMCwwICsxLDIyNSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13IC1zCisjIENvcHlyaWdodCAoQykgMjAxMgorIyAgICAgQ2hhcmxlcyBSb3Vzc2VsIDxjaGFybGVzLnJvdXNzZWxAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgU2ltb24gQ2F0aGVicmFzIDxzaW1vbi5jYXRoZWJyYXNAZW5zaW1hZy5pbWFnLmZyPgorIyAgICAgSnVsaWVuIEtoYXlhdCA8anVsaWVuLmtoYXlhdEBlbnNpbWFnLmltYWcuZnI+CisjICAgICBHdWlsbGF1bWUgU2FzZHkgPGd1aWxsYXVtZS5zYXNkeUBlbnNpbWFnLmltYWcuZnI+CisjICAgICBTaW1vbiBQZXJyYXQgPHNpbW9uLnBlcnJhdEBlbnNpbWFnLmltYWcuZnI+CisjIExpY2Vuc2U6IEdQTCB2MiBvciBsYXRlcgorCisjIFVzYWdlOgorIyAgICAgICAuL3Rlc3QtZ2l0bXcucGwgPGNvbW1hbmQ+IFthcmd1bWVudF0qCisjIEV4ZWN1dGUgaW4gdGVybWluYWwgdXNpbmcgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgYXMgZmlyc3QKKyMgcGFyYW1ldGVyLCBhbmQgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzIGFzIGZvbGxvd2luZyBwYXJhbWV0ZXJzCisjCisjIEV4YW1wbGU6CisjICAgICAuL3Rlc3QtZ2l0bXcucGwgImdldF9wYWdlIiBmb28gLgorIyB3aWxsIGNhbGwgPHdpa2lfZ2V0cGFnZT4gd2l0aCBhcmd1bWVudHMgPGZvbz4gYW5kIDwuPgorIworIyBBdmFpbGFibGUgZnVuY3Rpb25zIGFyZToKKyMgICAgICJnZXRfcGFnZSIKKyMgICAgICJkZWxldGVfcGFnZSIKKyMgICAgICJlZGl0X3BhZ2UiCisjICAgICAiZ2V0YWxscGFnZW5hbWUiCisKK3VzZSBNZWRpYVdpa2k6OkFQSTsKK3VzZSBHZXRvcHQ6Okxvbmc7Cit1c2UgZW5jb2RpbmcgJ3V0ZjgnOwordXNlIERhdGVUaW1lOjpGb3JtYXQ6OklTTzg2MDE7Cit1c2Ugb3BlbiAnOmVuY29kaW5nKHV0ZjgpJzsKK3VzZSBjb25zdGFudCBTTEFTSF9SRVBMQUNFTUVOVCA9PiAiJTJGIjsKKworI1BhcnNpbmcgb2YgdGhlIGNvbmZpZyBmaWxlCisKK215ICRjb25maWdmaWxlID0gIiRFTlZ7J0NVUlJfRElSJ30vdGVzdC5jb25maWciOworbXkgJWNvbmZpZzsKK29wZW4gbXkgJENPTkZJRywgIjwiLCAgJGNvbmZpZ2ZpbGUgb3IgZGllICJjYW4ndCBvcGVuICRjb25maWdmaWxlOiAkISI7Cit3aGlsZSAoPCRDT05GSUc+KQoreworCWNob21wOworCXMvIy4qLy87CisJcy9eXHMrLy87CisJcy9ccyskLy87CisJbmV4dCB1bmxlc3MgbGVuZ3RoOworCW15ICgka2V5LCAkdmFsdWUpID0gc3BsaXQgKC9ccyo9XHMqLywkXywgMik7CisJJGNvbmZpZ3ska2V5fSA9ICR2YWx1ZTsKKwlsYXN0IGlmICgka2V5IGVxICdMSUdIVFRQRCcgYW5kICR2YWx1ZSBlcSAnZmFsc2UnKTsKKwlsYXN0IGlmICgka2V5IGVxICdQT1JUJyk7Cit9CitjbG9zZSAkQ09ORklHIG9yIGRpZSAiY2FuJ3QgY2xvc2UgJGNvbmZpZ2ZpbGU6ICQhIjsKKworbXkgJHdpa2lfYWRkcmVzcyA9ICJodHRwOi8vJGNvbmZpZ3snU0VSVkVSX0FERFInfSIuIjoiLiIkY29uZmlneydQT1JUJ30iOworbXkgJHdpa2lfdXJsID0gIiR3aWtpX2FkZHJlc3MvJGNvbmZpZ3snV0lLSV9ESVJfTkFNRSd9L2FwaS5waHAiOworbXkgJHdpa2lfYWRtaW4gPSAiJGNvbmZpZ3snV0lLSV9BRE1JTid9IjsKK215ICR3aWtpX2FkbWluX3Bhc3MgPSAiJGNvbmZpZ3snV0lLSV9QQVNTVyd9IjsKK215ICRtdyA9IE1lZGlhV2lraTo6QVBJLT5uZXc7CiskbXctPntjb25maWd9LT57YXBpX3VybH0gPSAkd2lraV91cmw7CisKKworIyB3aWtpX2xvZ2luIDxuYW1lPiA8cGFzc3dvcmQ+CisjCisjIExvZ3MgdGhlIHVzZXIgd2l0aCA8bmFtZT4gYW5kIDxwYXNzd29yZD4gaW4gdGhlIGdsb2JhbCB2YXJpYWJsZQorIyBvZiB0aGUgbWVkaWF3aWtpICRtdworc3ViIHdpa2lfbG9naW4geworCSRtdy0+bG9naW4oIHsgbGduYW1lID0+ICIkX1swXSIsbGdwYXNzd29yZCA9PiAiJF9bMV0iIH0gKQorCXx8IGRpZSAiZ2V0cGFnZTogbG9naW4gZmFpbGVkIjsKK30KKworIyB3aWtpX2dldHBhZ2UgPHdpa2lfcGFnZT4gPGRlc3RfcGF0aD4KKyMKKyMgZmV0Y2ggYSBwYWdlIDx3aWtpX3BhZ2U+IGZyb20gdGhlIHdpa2kgcmVmZXJlbmNlZCBpbiB0aGUgZ2xvYmFsIHZhcmlhYmxlCisjICRtdyBhbmQgY29waWVzIGl0cyBjb250ZW50IGluIGRpcmVjdG9yeSBkZXN0X3BhdGgKK3N1YiB3aWtpX2dldHBhZ2UgeworCW15ICRwYWdlbmFtZSA9ICRfWzBdOworCW15ICRkZXN0ZGlyID0gJF9bMV07CisKKwlteSAkcGFnZSA9ICRtdy0+Z2V0X3BhZ2UoIHsgdGl0bGUgPT4gJHBhZ2VuYW1lIH0gKTsKKwlpZiAoIWRlZmluZWQoJHBhZ2UpKSB7CisJCWRpZSAiZ2V0cGFnZTogd2lraSBkb2VzIG5vdCBleGlzdCI7CisJfQorCisJbXkgJGNvbnRlbnQgPSAkcGFnZS0+eycqJ307CisJaWYgKCFkZWZpbmVkKCRjb250ZW50KSkgeworCQlkaWUgImdldHBhZ2U6IHBhZ2UgZG9lcyBub3QgZXhpc3QiOworCX0KKworCSRwYWdlbmFtZT0kcGFnZS0+eyd0aXRsZSd9OworCSMgUmVwbGFjZSBzcGFjZXMgYnkgdW5kZXJzY29yZSBpbiB0aGUgcGFnZSBuYW1lCisJJHBhZ2VuYW1lID1+IHMvIC9fL2c7CisJJHBhZ2VuYW1lID1+IHMvXC8vJTJGL2c7CisJb3BlbihteSAkZmlsZSwgIj4kZGVzdGRpci8kcGFnZW5hbWUubXciKTsKKwlwcmludCAkZmlsZSAiJGNvbnRlbnQiOworCWNsb3NlICgkZmlsZSk7CisKK30KKworIyB3aWtpX2RlbGV0ZV9wYWdlIDxwYWdlX25hbWU+CisjCisjIGRlbGV0ZSB0aGUgcGFnZSB3aXRoIG5hbWUgPHBhZ2VfbmFtZT4gZnJvbSB0aGUgd2lraSByZWZlcmVuY2VkCisjIGluIHRoZSBnbG9iYWwgdmFyaWFibGUgJG13CitzdWIgd2lraV9kZWxldGVfcGFnZSB7CisJbXkgJHBhZ2VuYW1lID0gJF9bMF07CisKKwlteSAkZXhpc3Q9JG13LT5nZXRfcGFnZSh7dGl0bGUgPT4gJHBhZ2VuYW1lfSk7CisKKwlpZiAoZGVmaW5lZCgkZXhpc3QtPnsnKid9KSl7CisJCSRtdy0+ZWRpdCh7IGFjdGlvbiA9PiAnZGVsZXRlJywKKwkJCQl0aXRsZSA9PiAkcGFnZW5hbWV9KQorCQl8fCBkaWUgJG13LT57ZXJyb3J9LT57Y29kZX0gLiAiOiAiIC4gJG13LT57ZXJyb3J9LT57ZGV0YWlsc307CisJfSBlbHNlIHsKKwkJZGllICJubyBwYWdlIHdpdGggc3VjaCBuYW1lIGZvdW5kOiAkcGFnZW5hbWVcbiI7CisJfQorfQorCisjIHdpa2lfZWRpdHBhZ2UgPHdpa2lfcGFnZT4gPHdpa2lfY29udGVudD4gPHdpa2lfYXBwZW5kPiBbLWM9PGNhdGVnb3J5Pl0gWy1zPTxzdW1tYXJ5Pl0KKyMKKyMgRWRpdCBhIHBhZ2UgbmFtZWQgPHdpa2lfcGFnZT4gd2l0aCBjb250ZW50IDx3aWtpX2NvbnRlbnQ+IG9uIHRoZSB3aWtpCisjIHJlZmVyZW5jZWQgd2l0aCB0aGUgZ2xvYmFsIHZhcmlhYmxlICRtdworIyBJZiA8d2lraV9hcHBlbmQ+ID09IHRydWUgOiBhcHBlbmQgPHdpa2lfY29udGVudD4gYXQgdGhlIGVuZCBvZiB0aGUgYWN0dWFsCisjIGNvbnRlbnQgb2YgdGhlIHBhZ2UgPHdpa2lfcGFnZT4KKyMgSWYgPHdpa19wYWdlPiBkb2Vzbid0IGV4aXN0LCB0aGF0IHBhZ2UgaXMgY3JlYXRlZCB3aXRoIHRoZSA8d2lraV9jb250ZW50Pgorc3ViIHdpa2lfZWRpdHBhZ2UgeworCW15ICR3aWtpX3BhZ2UgPSAkX1swXTsKKwlteSAkd2lraV9jb250ZW50ID0gJF9bMV07CisJbXkgJHdpa2lfYXBwZW5kID0gJF9bMl07CisJbXkgJHN1bW1hcnkgPSAiIjsKKwlteSAoJHN1bW0sICRjYXQpID0gKCk7CisJR2V0T3B0aW9ucygncz1zJyA9PiBcJHN1bW0sICdjPXMnID0+IFwkY2F0KTsKKworCW15ICRhcHBlbmQgPSAwOworCWlmIChkZWZpbmVkKCR3aWtpX2FwcGVuZCkgJiYgJHdpa2lfYXBwZW5kIGVxICd0cnVlJykgeworCQkkYXBwZW5kPTE7CisJfQorCisJbXkgJHByZXZpb3VzX3RleHQgPSIiOworCisJaWYgKCRhcHBlbmQpIHsKKwkJbXkgJHJlZiA9ICRtdy0+Z2V0X3BhZ2UoIHsgdGl0bGUgPT4gJHdpa2lfcGFnZSB9ICk7CisJCSRwcmV2aW91c190ZXh0ID0gJHJlZi0+eycqJ307CisJfQorCisJbXkgJHRleHQgPSAkd2lraV9jb250ZW50OworCWlmIChkZWZpbmVkKCRwcmV2aW91c190ZXh0KSkgeworCQkkdGV4dD0iJHByZXZpb3VzX3RleHQkdGV4dCI7CisJfQorCisJIyBFdmVudHVhbGx5LCBhZGQgdGhpcyBwYWdlIHRvIGEgY2F0ZWdvcnkuCisJaWYgKGRlZmluZWQoJGNhdCkpIHsKKwkJbXkgJGNhdGVnb3J5X25hbWU9IltbQ2F0ZWdvcnk6JGNhdF1dIjsKKwkJJHRleHQ9IiR0ZXh0XG4gJGNhdGVnb3J5X25hbWUiOworCX0KKwlpZihkZWZpbmVkKCRzdW1tKSl7CisJCSRzdW1tYXJ5PSRzdW1tOworCX0KKworCSRtdy0+ZWRpdCggeyBhY3Rpb24gPT4gJ2VkaXQnLCB0aXRsZSA9PiAkd2lraV9wYWdlLCBzdW1tYXJ5ID0+ICRzdW1tYXJ5LCB0ZXh0ID0+ICIkdGV4dCJ9ICk7Cit9CisKKyMgd2lraV9nZXRhbGxwYWdlbmFtZSBbPGNhdGVnb3J5Pl0KKyMKKyMgRmV0Y2ggYWxsIHBhZ2VzIG9mIHRoZSB3aWtpIHJlZmVyZW5jZWQgYnkgdGhlIGdsb2JhbCB2YXJpYWJsZSAkbXcKKyMgYW5kIHByaW50IHRoZSBuYW1lcyBvZiBlYWNoIG9uZSBpbiB0aGUgZmlsZSBhbGwudHh0IHdpdGggYSBuZXcgbGluZQorIyAoIlxuIikgYmV0d2VlbiB0aGVzZS4KKyMgSWYgdGhlIGFyZ3VtZW50IDxjYXRlZ29yeT4gaXMgZGVmaW5lZCwgdGhlbiB0aGlzIGZ1bmN0aW9uIGdldCBvbmx5IHRoZSBwYWdlcworIyBiZWxvbmdpbmcgdG8gPGNhdGVnb3J5Pi4KK3N1YiB3aWtpX2dldGFsbHBhZ2VuYW1lIHsKKwkjIGZldGNoIHRoZSBwYWdlcyBvZiB0aGUgd2lraQorCWlmIChkZWZpbmVkKCRfWzBdKSkgeworCQlteSAkbXdfcGFnZXMgPSAkbXctPmxpc3QgKCB7IGFjdGlvbiA9PiAncXVlcnknLAorCQkJCWxpc3QgPT4gJ2NhdGVnb3J5bWVtYmVycycsCisJCQkJY210aXRsZSA9PiAiQ2F0ZWdvcnk6JF9bMF0iLAorCQkJCWNtbmFtZXNwYWNlID0+IDAsCisJCQkJY21saW1pdCA9PiA1MDAgfSwKKwkJKQorCQl8fCBkaWUgJG13LT57ZXJyb3J9LT57Y29kZX0uIjogIi4kbXctPntlcnJvcn0tPntkZXRhaWxzfTsKKwkJb3BlbihteSAkZmlsZSwgIj5hbGwudHh0Iik7CisJCWZvcmVhY2ggbXkgJHBhZ2UgKEB7JG13X3BhZ2VzfSkgeworCQkJcHJpbnQgJGZpbGUgIiRwYWdlLT57dGl0bGV9XG4iOworCQl9CisJCWNsb3NlICgkZmlsZSk7CisKKwl9IGVsc2UgeworCQlteSAkbXdfcGFnZXMgPSAkbXctPmxpc3QoeworCQkJCWFjdGlvbiA9PiAncXVlcnknLAorCQkJCWxpc3QgPT4gJ2FsbHBhZ2VzJywKKwkJCQlhcGxpbWl0ID0+IDUwMCwKKwkJCX0pCisJCXx8IGRpZSAkbXctPntlcnJvcn0tPntjb2RlfS4iOiAiLiRtdy0+e2Vycm9yfS0+e2RldGFpbHN9OworCQlvcGVuKG15ICRmaWxlLCAiPmFsbC50eHQiKTsKKwkJZm9yZWFjaCBteSAkcGFnZSAoQHskbXdfcGFnZXN9KSB7CisJCQlwcmludCAkZmlsZSAiJHBhZ2UtPnt0aXRsZX1cbiI7CisJCX0KKwkJY2xvc2UgKCRmaWxlKTsKKwl9Cit9CisKK3N1YiB3aWtpX3VwbG9hZF9maWxlIHsKKwlteSAkZmlsZV9uYW1lID0gJF9bMF07CisJbXkgJHJlc3VsdGF0ID0gJG13LT5lZGl0ICggeworCQlhY3Rpb24gPT4gJ3VwbG9hZCcsCisJCWZpbGVuYW1lID0+ICRmaWxlX25hbWUsCisJCWNvbW1lbnQgPT4gJ3VwbG9hZCBhIGZpbGUnLAorCQlmaWxlID0+IFsgJGZpbGVfbmFtZSBdLAorCQlpZ25vcmV3YXJuaW5ncz0+MSwKKwl9LCB7CisJCXNraXBfZW5jb2RpbmcgPT4gMQorCX0gKSB8fCBkaWUgJG13LT57ZXJyb3J9LT57Y29kZX0gLiAnIDogJyAuICRtdy0+e2Vycm9yfS0+e2RldGFpbHN9OworfQorCisKKworIyBNYWluIHBhcnQgb2YgdGhpcyBzY3JpcHQ6IHBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzCisjIGFuZCBzZWxlY3Qgd2hpY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZQorbXkgJGZjdF90b19jYWxsID0gc2hpZnQ7CisKK3dpa2lfbG9naW4oJHdpa2lfYWRtaW4sICR3aWtpX2FkbWluX3Bhc3MpOworCitteSAlZnVuY3Rpb25zX3RvX2NhbGwgPSBxdygKKwl1cGxvYWRfZmlsZSAgICB3aWtpX3VwbG9hZF9maWxlCisJZ2V0X3BhZ2UgICAgICAgd2lraV9nZXRwYWdlCisJZGVsZXRlX3BhZ2UgICAgd2lraV9kZWxldGVfcGFnZQorCWVkaXRfcGFnZSAgICAgIHdpa2lfZWRpdHBhZ2UKKwlnZXRhbGxwYWdlbmFtZSB3aWtpX2dldGFsbHBhZ2VuYW1lCispOworZGllICIkMCBFUlJPUjogd3JvbmcgYXJndW1lbnQiIHVubGVzcyBleGlzdHMgJGZ1bmN0aW9uc190b19jYWxseyRmY3RfdG9fY2FsbH07CismeyRmdW5jdGlvbnNfdG9fY2FsbHskZmN0X3RvX2NhbGx9fShAQVJHVik7CmRpZmYgLS1naXQgYS9jb250cmliL213LXRvLWdpdC90L3Rlc3QuY29uZmlnIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmEwNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9tdy10by1naXQvdC90ZXN0LmNvbmZpZwpAQCAtMCwwICsxLDM3IEBACisjIE5hbWUgb2YgdGhlIHdlYiBzZXJ2ZXIncyBkaXJlY3RvcnkgZGVkaWNhdGVkIHRvIHRoZSB3aWtpIGlzIFdJS0lfRElSX05BTUUKK1dJS0lfRElSX05BTUU9d2lraQorCisjIExvZ2luIGFuZCBwYXNzd29yZCBvZiB0aGUgd2lraSdzIGFkbWluCitXSUtJX0FETUlOPVdpa2lBZG1pbgorV0lLSV9QQVNTVz1BZG1pblBhc3MKKworIyBBZGRyZXNzIG9mIHRoZSB3ZWIgc2VydmVyCitTRVJWRVJfQUREUj1sb2NhbGhvc3QKKworIyBTUUxpdGUgZGF0YWJhc2Ugb2YgdGhlIHdpa2ksIG5hbWVkIERCX0ZJTEUsIGlzIGxvY2F0ZWQgaW4gVE1QCitUTVA9L3RtcAorREJfRklMRT13aWtpZGIuc3FsaXRlCisKKyMgSWYgTElHSFRUUEQgaXMgbm90IHNldCB0byB0cnVlLCB0aGUgc2NyaXB0IHdpbGwgdXNlIHRoZSBkZWZhdWx0CisjIHdlYiBzZXJ2ZXIgcnVubmluZyBpbiBXSUtJX0RJUl9JTlNULgorV0lLSV9ESVJfSU5TVD0vdmFyL3d3dworCisjIElmIExJR0hUVFBEIGlzIHNldCB0byB0cnVlLCB0aGUgc2NyaXB0IHdpbGwgdXNlIExpZ2h0dHBkIHRvIHJ1bgorIyB0aGUgd2lraS4KK0xJR0hUVFBEPXRydWUKKworIyBUaGUgdmFyaWFibGVzIGJlbG93IGFyZSB1c2VmdWwgb25seSBpZiBMSUdIVFRQRCBpcyBzZXQgdG8gdHJ1ZS4KK1BPUlQ9MTIzNAorUEhQX0RJUj0vdXNyL2JpbgorTElHSFRUUERfRElSPS91c3Ivc2JpbgorV0VCPVdFQgorV0VCX1RNUD0kV0VCL3RtcAorV0VCX1dXVz0kV0VCL3d3dworCisjIFRoZSB2YXJpYWJsZXMgYmVsb3cgYXJlIHVzZWQgYnkgdGhlIHNjcmlwdCB0byBpbnN0YWxsIGEgd2lraS4KKyMgWW91IHNob3VsZCBub3QgbW9kaWZ5IHRoZXNlIHVubGVzcyB5b3UgYXJlIG1vZGlmeWluZyB0aGUgc2NyaXB0IGl0c2VsZi4KKyMgdGVzdGVkIHZlcnNpb25zOiAxLjE5LlggLT4gMS4yMS4xCitNV19WRVJTSU9OX01BSk9SPTEuMjEKK01XX1ZFUlNJT05fTUlOT1I9MQorRklMRVNfRk9MREVSPWluc3RhbGwtd2lraQorREJfSU5TVEFMTF9TQ1JJUFQ9ZGJfaW5zdGFsbC5waHAKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9MSUNFTlNFIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0NTY5NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9MSUNFTlNFCkBAIC0wLDAgKzEsMjAyIEBACisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0CisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJVVElPTgorCisgICAxLiBEZWZpbml0aW9ucy4KKworICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKKyAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgorCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCisgICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCisgICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisgICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgICAiU291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KKyAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisKKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCisgICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKKyAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKKyAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKKyAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCisgICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKKyAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50CisgICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bworICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCisgICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKKyAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiIKKworICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCisgICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAorICAgICAgICAgIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAorICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgorICAgICAgICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKKyAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKKyAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KKyAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQorICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAorICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCisgICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKKyAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAorICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KKworICAgNS4gU3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAorICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCisgICAgICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5CisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAorICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmlidXRpb25zLgorCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCisgICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCisgICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgorCisgICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKKyAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucworICAgICAgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKKyAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksCisgICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKKyAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5CisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQorICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAorICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCisgICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsCisgICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgorICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCisgICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLAorICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCisgICAgICBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQorICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYKKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKKyAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQorICAgICAgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuCisKKyAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCisgICBBUFBFTkRJWDogSG93IHRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmsuCisKKyAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nCisgICAgICBib2lsZXJwbGF0ZSBub3RpY2UsIHdpdGggdGhlIGZpZWxkcyBlbmNsb3NlZCBieSBicmFja2V0cyAiW10iCisgICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZQorICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQorICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQorICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyCisgICAgICBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCisKKyAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL01ha2VmaWxlIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYmFhM2IKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvTWFrZWZpbGUKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitCVUlMRF9MQUJFTD0kKHNoZWxsIGRhdGUgKyIlcyIpCitUQVJfT1VUPSQoc2hlbGwgZ28gZW52IEdPT1MpXyQoc2hlbGwgZ28gZW52IEdPQVJDSCkudGFyLmd6CisKK2FsbDogZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy0tcHJveHkgXAorCWdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwCisKK2dpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy0tcHJveHk6IGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcworCWxuIC1mIC1zIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMtLXByb3h5CisKK2dpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwOiBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMKKwlsbiAtZiAtcyBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHAKKworZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzOgorCWdvIGJ1aWxkIC1vIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcyBcCisJCS1sZGZsYWdzICItWCBtYWluLl9CVUlMRF9FTUJFRF9MQUJFTCAkKEJVSUxEX0xBQkVMKSIKKworY2xlYW46CisJcm0gLWYgZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHAqICoudGFyLmd6CisKK3RhcjogY2xlYW4gYWxsCisJQGNobW9kIDU1NSBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMKKwlAdGFyIC1jemYgJChUQVJfT1VUKSBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cCogUkVBRE1FIExJQ0VOU0UKKwlAZWNobworCUBlY2hvICJDcmVhdGVkICQoVEFSX09VVCkiCmRpZmYgLS1naXQgYS9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvUkVBRE1FIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzg0ZGQyCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL1JFQURNRQpAQCAtMCwwICsxLDYyIEBACitnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMKKworVGhlIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcyBiaW5hcnkgc3BlZWRzIHVwIFNTTCBvcGVyYXRpb25zCitieSBydW5uaW5nIGEgZGFlbW9uIGpvYiAoZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzLS1wcm94eSkgdGhhdAora2VlcHMgYSBjb25uZWN0aW9uIG9wZW4gdG8gYSBzZXJ2ZXIuCisKKworUFJFLUJVSUxUIEJJTkFSSUVTCisKK0RhcndpbiBhbWQ2NDoKK2h0dHBzOi8vY29tbW9uZGF0YXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzL2Rhcndpbl9hbWQ2NC50YXIuZ3oKKworTGludXggYW1kNjQ6CitodHRwczovL2NvbW1vbmRhdGFzdG9yYWdlLmdvb2dsZWFwaXMuY29tL2dpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy9saW51eF9hbWQ2NC50YXIuZ3oKKworCitJTlNUQUxMSU5HCisKK01vdmUgYWxsIG9mIHRoZSBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cCogYmluYXJpZXMgdG8gYSBkaXJlY3RvcnkKK2luIFBBVEguCisKKworVVNBR0UKKworSFRUUFMgcmVxdWVzdHMgY2FuIGJlIGRlbGVnYXRlZCB0byB0aGUgcHJveHkgYnkgdXNpbmcgdGhlCisicGVyc2lzdGVudC1odHRwcyIgc2NoZW1lLCBlLmcuCisKK2dpdCBjbG9uZSBwZXJzaXN0ZW50LWh0dHBzOi8va2VybmVsLmdvb2dsZXNvdXJjZS5jb20vcHViL3NjbS9naXQvZ2l0CisKK0xpa2V3aXNlLCAuZ2l0Y29uZmlnIGNhbiBiZSB1cGRhdGVkIGFzIGZvbGxvd3MgdG8gcmV3cml0ZSBodHRwcyB1cmxzCit0byB1c2UgcGVyc2lzdGVudC1odHRwczoKKworW3VybCAicGVyc2lzdGVudC1odHRwcyJdCisJaW5zdGVhZG9mID0gaHR0cHMKK1t1cmwgInBlcnNpc3RlbnQtaHR0cCJdCisJaW5zdGVhZG9mID0gaHR0cAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCVUlMRElORyBGUk9NIFNPVVJDRQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0xPQ0FUSU9OCisKK1RoZSBzb3VyY2UgaXMgYXZhaWxhYmxlIGluIHRoZSBjb250cmliL3BlcnNpc3RlbnQtaHR0cHMgZGlyZWN0b3J5IG9mCit0aGUgR2l0IHNvdXJjZSByZXBvc2l0b3J5LiBUaGUgR2l0IHNvdXJjZSByZXBvc2l0b3J5IGlzIGF2YWlsYWJsZSBhdAorZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9naXQvZ2l0LmdpdC8KK2h0dHBzOi8va2VybmVsLmdvb2dsZXNvdXJjZS5jb20vcHViL3NjbS9naXQvZ2l0CisKKworUFJFUkVRVUlTSVRFUworCitUaGUgY29kZSBpcyB3cml0dGVuIGluIEdvIChodHRwOi8vZ29sYW5nLm9yZy8pIGFuZCB0aGUgR28gY29tcGlsZXIgaXMKK3JlcXVpcmVkLiBDdXJyZW50bHksIHRoZSBjb21waWxlciBtdXN0IGJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgZnJvbSB0aXAKK29mIHNvdXJjZSwgaW4gb3JkZXIgdG8gaW5jbHVkZSBhIGZpeCBpbiB0aGUgcmV2ZXJzZSBodHRwIHByb3h5OgoraHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvL3NvdXJjZS9kZXRhaWw/cj1hNjE1Yjc5NjU3MGEyY2Q4NTkxODg0NzY3YTdkNjdlZGU3NGY2NjQ4CisKKworQlVJTERJTkcKKworUnVuICJtYWtlIiB0byBidWlsZCB0aGUgYmluYXJpZXMuIFNlZSB0aGUgc2VjdGlvbiBvbgorSU5TVEFMTElORyBhYm92ZS4KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9jbGllbnQuZ28gYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvY2xpZW50LmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTI1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvY2xpZW50LmdvCkBAIC0wLDAgKzEsMTg5IEBACisvLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitwYWNrYWdlIG1haW4KKworaW1wb3J0ICgKKwkiYnVmaW8iCisJImVycm9ycyIKKwkiZm10IgorCSJuZXQiCisJIm5ldC91cmwiCisJIm9zIgorCSJvcy9leGVjIgorCSJzdHJpbmdzIgorCSJzeXNjYWxsIgorCSJ0aW1lIgorKQorCit0eXBlIENsaWVudCBzdHJ1Y3QgeworCVByb3h5QmluIHN0cmluZworCUFyZ3MgICAgIFtdc3RyaW5nCisKKwlpbnNlY3VyZSBib29sCit9CisKK2Z1bmMgKGMgKkNsaWVudCkgUnVuKCkgZXJyb3IgeworCWlmIGVyciA6PSBjLnJlc29sdmVBcmdzKCk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gZm10LkVycm9yZigicmVzb2x2ZUFyZ3MoKSBnb3QgZXJyb3I6ICV2IiwgZXJyKQorCX0KKworCS8vIENvbm5lY3QgdG8gdGhlIHByb3h5LgorCXVjb25uLCBoY29ubiwgYWRkciwgZXJyIDo9IGMuY29ubmVjdCgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJjb25uZWN0KCkgZ290IGVycm9yOiAldiIsIGVycikKKwl9CisJLy8gS2VlcCB0aGUgdW5peCBzb2NrZXQgY29ubmVjdGlvbiBvcGVuIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHJlcXVlc3QuCisJZGVmZXIgdWNvbm4uQ2xvc2UoKQorCS8vIEtlZXAgYSBjb25uZWN0aW9uIHRvIHRoZSBIVFRQIHNlcnZlciBvcGVuLCBzbyBubyBvdGhlciB1c2VyIGNhbgorCS8vIGJpbmQgb24gdGhlIHNhbWUgYWRkcmVzcyBzbyBsb25nIGFzIHRoZSBwcm9jZXNzIGlzIHJ1bm5pbmcuCisJZGVmZXIgaGNvbm4uQ2xvc2UoKQorCisJLy8gU3RhcnQgdGhlIGdpdC1yZW1vdGUtaHR0cCBzdWJwcm9jZXNzLgorCWNhcmdzIDo9IFtdc3RyaW5neyItYyIsIGZtdC5TcHJpbnRmKCJodHRwLnByb3h5PSV2IiwgYWRkciksICJyZW1vdGUtaHR0cCJ9CisJY2FyZ3MgPSBhcHBlbmQoY2FyZ3MsIGMuQXJncy4uLikKKwljbWQgOj0gZXhlYy5Db21tYW5kKCJnaXQiLCBjYXJncy4uLikKKworCWZvciBfLCB2IDo9IHJhbmdlIG9zLkVudmlyb24oKSB7CisJCWlmICFzdHJpbmdzLkhhc1ByZWZpeCh2LCAiR0lUX1BFUlNJU1RFTlRfSFRUUFNfU0VDVVJFPSIpIHsKKwkJCWNtZC5FbnYgPSBhcHBlbmQoY21kLkVudiwgdikKKwkJfQorCX0KKwkvLyBTZXQgdGhlIEdJVF9QRVJTSVNURU5UX0hUVFBTX1NFQ1VSRSBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuCisJLy8gdGhlIHByb3h5IGlzIHVzaW5nIGEgU1NMIGNvbm5lY3Rpb24uICBUaGlzIGFsbG93cyBjcmVkZW50aWFsIGhlbHBlcnMKKwkvLyB0byBpZGVudGlmeSBzZWN1cmUgcHJveHkgY29ubmVjdGlvbnMsIGRlc3BpdGUgYmVpbmcgcGFzc2VkIGFuIEhUVFAKKwkvLyBzY2hlbWUuCisJaWYgIWMuaW5zZWN1cmUgeworCQljbWQuRW52ID0gYXBwZW5kKGNtZC5FbnYsICJHSVRfUEVSU0lTVEVOVF9IVFRQU19TRUNVUkU9MSIpCisJfQorCisJY21kLlN0ZGluID0gb3MuU3RkaW4KKwljbWQuU3Rkb3V0ID0gb3MuU3Rkb3V0CisJY21kLlN0ZGVyciA9IG9zLlN0ZGVycgorCWlmIGVyciA6PSBjbWQuUnVuKCk7IGVyciAhPSBuaWwgeworCQlpZiBlZXJyLCBvayA6PSBlcnIuKCpleGVjLkV4aXRFcnJvcik7IG9rIHsKKwkJCWlmIHN0YXQsIG9rIDo9IGVlcnIuUHJvY2Vzc1N0YXRlLlN5cygpLihzeXNjYWxsLldhaXRTdGF0dXMpOyBvayAmJiBzdGF0LkV4aXRTdGF0dXMoKSAhPSAwIHsKKwkJCQlvcy5FeGl0KHN0YXQuRXhpdFN0YXR1cygpKQorCQkJfQorCQl9CisJCXJldHVybiBmbXQuRXJyb3JmKCJnaXQtcmVtb3RlLWh0dHAgc3VicHJvY2VzcyBnb3QgZXJyb3I6ICV2IiwgZXJyKQorCX0KKwlyZXR1cm4gbmlsCit9CisKK2Z1bmMgKGMgKkNsaWVudCkgY29ubmVjdCgpICh1Y29ubiBuZXQuQ29ubiwgaGNvbm4gbmV0LkNvbm4sIGFkZHIgc3RyaW5nLCBlcnIgZXJyb3IpIHsKKwl1Y29ubiwgZXJyID0gRGVmYXVsdFNvY2tldC5EaWFsKCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJaWYgZSwgb2sgOj0gZXJyLigqbmV0Lk9wRXJyb3IpOyBvayAmJiAob3MuSXNOb3RFeGlzdChlLkVycikgfHwgZS5FcnIgPT0gc3lzY2FsbC5FQ09OTlJFRlVTRUQpIHsKKwkJCWlmIGVyciA9IGMuc3RhcnRQcm94eSgpOyBlcnIgPT0gbmlsIHsKKwkJCQl1Y29ubiwgZXJyID0gRGVmYXVsdFNvY2tldC5EaWFsKCkKKwkJCX0KKwkJfQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCXJldHVybgorCQl9CisJfQorCisJaWYgYWRkciwgZXJyID0gYy5yZWFkQWRkcih1Y29ubik7IGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisKKwkvLyBPcGVuIGEgdGNwIGNvbm5lY3Rpb24gdG8gdGhlIHByb3h5LgorCWlmIGhjb25uLCBlcnIgPSBuZXQuRGlhbCgidGNwIiwgYWRkcik7IGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisKKwkvLyBWZXJpZnkgdGhlIGFkZHJlc3MgaGFzbid0IGNoYW5nZWQgb3duZXJzaGlwLgorCXZhciBhZGRyMiBzdHJpbmcKKwlpZiBhZGRyMiwgZXJyID0gYy5yZWFkQWRkcih1Y29ubik7IGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9IGVsc2UgaWYgYWRkciAhPSBhZGRyMiB7CisJCWVyciA9IGZtdC5FcnJvcmYoImFkZHJlc3MgY2hhbmdlZCBhZnRlciBjb25uZWN0LiBnb3QgJXEsIHdhbnQgJXEiLCBhZGRyMiwgYWRkcikKKwkJcmV0dXJuCisJfQorCXJldHVybgorfQorCitmdW5jIChjICpDbGllbnQpIHJlYWRBZGRyKGNvbm4gbmV0LkNvbm4pIChzdHJpbmcsIGVycm9yKSB7CisJY29ubi5TZXREZWFkbGluZSh0aW1lLk5vdygpLkFkZCg1ICogdGltZS5TZWNvbmQpKQorCWRhdGEgOj0gbWFrZShbXWJ5dGUsIDEwMCkKKwluLCBlcnIgOj0gY29ubi5SZWFkKGRhdGEpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiAiIiwgZm10LkVycm9yZigiZXJyb3IgcmVhZGluZyB1bml4IHNvY2tldDogJXYiLCBlcnIpCisJfSBlbHNlIGlmIG4gPT0gMCB7CisJCXJldHVybiAiIiwgZXJyb3JzLk5ldygiZW1wdHkgZGF0YSByZXNwb25zZSIpCisJfQorCWNvbm4uV3JpdGUoW11ieXRlezF9KSAvLyBBY2sKKworCXZhciBhZGRyIHN0cmluZworCWlmIGFkZHJzIDo9IHN0cmluZ3MuU3BsaXQoc3RyaW5nKGRhdGFbOm5dKSwgIlxuIik7IGxlbihhZGRycykgIT0gMiB7CisJCXJldHVybiAiIiwgZm10LkVycm9yZigiZ290ICVxLCB3YW50ZWQgMiBhZGRyZXNzZXMiLCBkYXRhWzpuXSkKKwl9IGVsc2UgaWYgYy5pbnNlY3VyZSB7CisJCWFkZHIgPSBhZGRyc1sxXQorCX0gZWxzZSB7CisJCWFkZHIgPSBhZGRyc1swXQorCX0KKwlyZXR1cm4gYWRkciwgbmlsCit9CisKK2Z1bmMgKGMgKkNsaWVudCkgc3RhcnRQcm94eSgpIGVycm9yIHsKKwljbWQgOj0gZXhlYy5Db21tYW5kKGMuUHJveHlCaW4pCisJY21kLlN5c1Byb2NBdHRyID0gJnN5c2NhbGwuU3lzUHJvY0F0dHJ7U2V0cGdpZDogdHJ1ZX0KKwlzdGRvdXQsIGVyciA6PSBjbWQuU3Rkb3V0UGlwZSgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBlcnIKKwl9CisJZGVmZXIgc3Rkb3V0LkNsb3NlKCkKKwlpZiBlcnIgOj0gY21kLlN0YXJ0KCk7IGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCXJlc3VsdCA6PSBtYWtlKGNoYW4gZXJyb3IpCisJZ28gZnVuYygpIHsKKwkJYnl0ZXMsIF8sIGVyciA6PSBidWZpby5OZXdSZWFkZXIoc3Rkb3V0KS5SZWFkTGluZSgpCisJCWlmIGxpbmUgOj0gc3RyaW5nKGJ5dGVzKTsgZXJyID09IG5pbCAmJiBsaW5lICE9ICJPSyIgeworCQkJZXJyID0gZm10LkVycm9yZigicHJveHkgcmV0dXJuZWQgJXEsIHdhbnQgXCJPS1wiIiwgbGluZSkKKwkJfQorCQlyZXN1bHQgPC0gZXJyCisJfSgpCisJc2VsZWN0IHsKKwljYXNlIGVyciA6PSA8LXJlc3VsdDoKKwkJcmV0dXJuIGVycgorCWNhc2UgPC10aW1lLkFmdGVyKDUgKiB0aW1lLlNlY29uZCk6CisJCXJldHVybiBlcnJvcnMuTmV3KCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHByb3h5IHRvIHN0YXJ0IikKKwl9CisJcGFuaWMoIm5vdCByZWFjaGFibGUiKQorfQorCitmdW5jIChjICpDbGllbnQpIHJlc29sdmVBcmdzKCkgZXJyb3IgeworCWlmIG5hcmdzIDo9IGxlbihjLkFyZ3MpOyBuYXJncyA9PSAwIHsKKwkJcmV0dXJuIGVycm9ycy5OZXcoInJlbW90ZSBuZWVkZWQiKQorCX0gZWxzZSBpZiBuYXJncyA+IDIgeworCQlyZXR1cm4gZm10LkVycm9yZigid2FudCBhdCBtb3N0IDIgYXJncywgZ290ICV2IiwgYy5BcmdzKQorCX0KKworCS8vIFJld3JpdGUgdGhlIHVybCBzY2hlbWUgdG8gYmUgaHR0cC4KKwlpZHggOj0gbGVuKGMuQXJncykgLSAxCisJcmF3dXJsIDo9IGMuQXJnc1tpZHhdCisJcnVybCwgZXJyIDo9IHVybC5QYXJzZShyYXd1cmwpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJpbnZhbGlkIHJlbW90ZTogJXYiLCBlcnIpCisJfQorCWMuaW5zZWN1cmUgPSBydXJsLlNjaGVtZSA9PSAicGVyc2lzdGVudC1odHRwIgorCXJ1cmwuU2NoZW1lID0gImh0dHAiCisJYy5BcmdzW2lkeF0gPSBydXJsLlN0cmluZygpCisJaWYgaWR4ICE9IDAgJiYgYy5BcmdzWzBdID09IHJhd3VybCB7CisJCWMuQXJnc1swXSA9IGMuQXJnc1tpZHhdCisJfQorCXJldHVybiBuaWwKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9tYWluLmdvIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL21haW4uZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQxYjEwNwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9tYWluLmdvCkBAIC0wLDAgKzEsODIgQEAKKy8vIENvcHlyaWdodCAyMDEyIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKy8vIFRoZSBnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHMgYmluYXJ5IHNwZWVkcyB1cCBTU0wgb3BlcmF0aW9ucyBieSBydW5uaW5nCisvLyBhIGRhZW1vbiBqb2IgdGhhdCBrZWVwcyBhIGNvbm5lY3Rpb24gb3BlbiB0byBhIEdpdCBzZXJ2ZXIuIFRoaXMgZW5zdXJlcyB0aGUKKy8vIGdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy0tcHJveHkgaXMgcnVubmluZyBhbmQgZGVsZWdhdGluZyBleGVjdXRpb24KKy8vIHRvIHRoZSBnaXQtcmVtb3RlLWh0dHAgYmluYXJ5IHdpdGggdGhlIGh0dHBfcHJveHkgc2V0IHRvIHRoZSBkYWVtb24gam9iLgorLy8gQSB1bml4IHNvY2tldCBpcyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgcHJveHkgYW5kIGRpc2NvdmVyIHRoZQorLy8gSFRUUCBhZGRyZXNzLiBOb3RlLCBib3RoIHRoZSBjbGllbnQgYW5kIHByb3h5IGFyZSBpbmNsdWRlZCBpbiB0aGUgc2FtZQorLy8gYmluYXJ5LgorcGFja2FnZSBtYWluCisKK2ltcG9ydCAoCisJImZsYWciCisJImZtdCIKKwkibG9nIgorCSJvcyIKKwkic3RyaW5ncyIKKwkidGltZSIKKykKKwordmFyICgKKwlmb3JjZVByb3h5ID0gZmxhZy5Cb29sKCJwcm94eSIsIGZhbHNlLCAiV2hldGhlciB0byBzdGFydCB0aGUgYmluYXJ5IGluIHByb3h5IG1vZGUiKQorCXByb3h5QmluICAgPSBmbGFnLlN0cmluZygicHJveHlfYmluIiwgImdpdC1yZW1vdGUtcGVyc2lzdGVudC1odHRwcy0tcHJveHkiLCAiUGF0aCB0byB0aGUgcHJveHkgYmluYXJ5IikKKwlwcmludExhYmVsID0gZmxhZy5Cb29sKCJwcmludF9sYWJlbCIsIGZhbHNlLCAiUHJpbnRzIHRoZSBidWlsZCBsYWJlbCBmb3IgdGhlIGJpbmFyeSIpCisKKwkvLyBWYXJpYWJsZSB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIHRocm91Z2ggdGhlIC1YIGxpbmtlciBmbGFnLgorCV9CVUlMRF9FTUJFRF9MQUJFTCBzdHJpbmcKKykKKworY29uc3QgKAorCWRlZmF1bHRNYXhJZGxlRHVyYXRpb24gICAgPSAyNCAqIHRpbWUuSG91cgorCWRlZmF1bHRQb2xsVXBkYXRlSW50ZXJ2YWwgPSAxNSAqIHRpbWUuTWludXRlCispCisKK2Z1bmMgbWFpbigpIHsKKwlmbGFnLlBhcnNlKCkKKwlpZiAqcHJpbnRMYWJlbCB7CisJCS8vIFNob3J0IGNpcmN1aXQgZXhlY3V0aW9uIHRvIHByaW50IHRoZSBidWlsZCBsYWJlbAorCQlmbXQuUHJpbnRsbihidWlsZExhYmVsKCkpCisJCXJldHVybgorCX0KKworCXZhciBlcnIgZXJyb3IKKwlpZiAqZm9yY2VQcm94eSB8fCBzdHJpbmdzLkhhc1N1ZmZpeChvcy5BcmdzWzBdLCAiLS1wcm94eSIpIHsKKwkJbG9nLlNldFByZWZpeCgiZ2l0LXJlbW90ZS1wZXJzaXN0ZW50LWh0dHBzLS1wcm94eTogIikKKwkJcHJveHkgOj0gJlByb3h5eworCQkJQnVpbGRMYWJlbDogICAgICAgICBidWlsZExhYmVsKCksCisJCQlNYXhJZGxlRHVyYXRpb246ICAgIGRlZmF1bHRNYXhJZGxlRHVyYXRpb24sCisJCQlQb2xsVXBkYXRlSW50ZXJ2YWw6IGRlZmF1bHRQb2xsVXBkYXRlSW50ZXJ2YWwsCisJCX0KKwkJZXJyID0gcHJveHkuUnVuKCkKKwl9IGVsc2UgeworCQlsb2cuU2V0UHJlZml4KCJnaXQtcmVtb3RlLXBlcnNpc3RlbnQtaHR0cHM6ICIpCisJCWNsaWVudCA6PSAmQ2xpZW50eworCQkJUHJveHlCaW46ICpwcm94eUJpbiwKKwkJCUFyZ3M6ICAgICBmbGFnLkFyZ3MoKSwKKwkJfQorCQllcnIgPSBjbGllbnQuUnVuKCkKKwl9CisJaWYgZXJyICE9IG5pbCB7CisJCWxvZy5GYXRhbGxuKGVycikKKwl9Cit9CisKK2Z1bmMgYnVpbGRMYWJlbCgpIHN0cmluZyB7CisJaWYgX0JVSUxEX0VNQkVEX0xBQkVMID09ICIiIHsKKwkJbG9nLlByaW50bG4oYHVubGFiZWxlZCBidWlsZDsgYnVpbGQgd2l0aCAibWFrZSIgdG8gbGFiZWxgKQorCX0KKwlyZXR1cm4gX0JVSUxEX0VNQkVEX0xBQkVMCit9CmRpZmYgLS1naXQgYS9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvcHJveHkuZ28gYi9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvcHJveHkuZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwY2RiYQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcGVyc2lzdGVudC1odHRwcy9wcm94eS5nbwpAQCAtMCwwICsxLDE5MCBAQAorLy8gQ29weXJpZ2h0IDIwMTIgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworcGFja2FnZSBtYWluCisKK2ltcG9ydCAoCisJImZtdCIKKwkibG9nIgorCSJuZXQiCisJIm5ldC9odHRwIgorCSJuZXQvaHR0cC9odHRwdXRpbCIKKwkib3MiCisJIm9zL2V4ZWMiCisJIm9zL3NpZ25hbCIKKwkic3luYyIKKwkic3lzY2FsbCIKKwkidGltZSIKKykKKwordHlwZSBQcm94eSBzdHJ1Y3QgeworCUJ1aWxkTGFiZWwgICAgICAgICBzdHJpbmcKKwlNYXhJZGxlRHVyYXRpb24gICAgdGltZS5EdXJhdGlvbgorCVBvbGxVcGRhdGVJbnRlcnZhbCB0aW1lLkR1cmF0aW9uCisKKwl1bCAgICAgICAgbmV0Lkxpc3RlbmVyCisJaHR0cEFkZHIgIHN0cmluZworCWh0dHBzQWRkciBzdHJpbmcKK30KKworZnVuYyAocCAqUHJveHkpIFJ1bigpIGVycm9yIHsKKwlobCwgZXJyIDo9IG5ldC5MaXN0ZW4oInRjcCIsICIxMjcuMC4wLjE6MCIpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJodHRwIGxpc3RlbiBmYWlsZWQ6ICV2IiwgZXJyKQorCX0KKwlkZWZlciBobC5DbG9zZSgpCisKKwloc2wsIGVyciA6PSBuZXQuTGlzdGVuKCJ0Y3AiLCAiMTI3LjAuMC4xOjAiKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZm10LkVycm9yZigiaHR0cHMgbGlzdGVuIGZhaWxlZDogJXYiLCBlcnIpCisJfQorCWRlZmVyIGhzbC5DbG9zZSgpCisKKwlwLnVsLCBlcnIgPSBEZWZhdWx0U29ja2V0Lkxpc3RlbigpCisJaWYgZXJyICE9IG5pbCB7CisJCWMsIGRlcnIgOj0gRGVmYXVsdFNvY2tldC5EaWFsKCkKKwkJaWYgZGVyciA9PSBuaWwgeworCQkJYy5DbG9zZSgpCisJCQlmbXQuUHJpbnRsbigiT0tcbkEgcHJveHkgaXMgYWxyZWFkeSBydW5uaW5nLi4uIGV4aXRpbmciKQorCQkJcmV0dXJuIG5pbAorCQl9IGVsc2UgaWYgZSwgb2sgOj0gZGVyci4oKm5ldC5PcEVycm9yKTsgb2sgJiYgZS5FcnIgPT0gc3lzY2FsbC5FQ09OTlJFRlVTRUQgeworCQkJLy8gTm90aGluZyBpcyBsaXN0ZW5pbmcgb24gdGhlIHNvY2tldCwgdW5saW5rIGl0IGFuZCB0cnkgYWdhaW4uCisJCQlzeXNjYWxsLlVubGluayhEZWZhdWx0U29ja2V0LlBhdGgoKSkKKwkJCXAudWwsIGVyciA9IERlZmF1bHRTb2NrZXQuTGlzdGVuKCkKKwkJfQorCQlpZiBlcnIgIT0gbmlsIHsKKwkJCXJldHVybiBmbXQuRXJyb3JmKCJ1bml4IGxpc3RlbiBmYWlsZWQgb24gJXY6ICV2IiwgRGVmYXVsdFNvY2tldC5QYXRoKCksIGVycikKKwkJfQorCX0KKwlkZWZlciBwLnVsLkNsb3NlKCkKKwlnbyBwLmNsb3NlT25TaWduYWwoKQorCWdvIHAuY2xvc2VPblVwZGF0ZSgpCisKKwlwLmh0dHBBZGRyID0gaGwuQWRkcigpLlN0cmluZygpCisJcC5odHRwc0FkZHIgPSBoc2wuQWRkcigpLlN0cmluZygpCisJZm10LlByaW50ZigiT0tcbkxpc3RlbmluZyBvbiB1bml4IHNvY2tldD0ldiBodHRwPSV2IGh0dHBzPSV2XG4iLAorCQlwLnVsLkFkZHIoKSwgcC5odHRwQWRkciwgcC5odHRwc0FkZHIpCisKKwlyZXN1bHQgOj0gbWFrZShjaGFuIGVycm9yLCAyKQorCWdvIHAuc2VydmVVbml4KHJlc3VsdCkKKwlnbyBmdW5jKCkgeworCQlyZXN1bHQgPC0gaHR0cC5TZXJ2ZShobCwgJmh0dHB1dGlsLlJldmVyc2VQcm94eXsKKwkJCUZsdXNoSW50ZXJ2YWw6IDUwMCAqIHRpbWUuTWlsbGlzZWNvbmQsCisJCQlEaXJlY3RvcjogICAgICBmdW5jKHIgKmh0dHAuUmVxdWVzdCkge30sCisJCX0pCisJfSgpCisJZ28gZnVuYygpIHsKKwkJcmVzdWx0IDwtIGh0dHAuU2VydmUoaHNsLCAmaHR0cHV0aWwuUmV2ZXJzZVByb3h5eworCQkJRmx1c2hJbnRlcnZhbDogNTAwICogdGltZS5NaWxsaXNlY29uZCwKKwkJCURpcmVjdG9yOiBmdW5jKHIgKmh0dHAuUmVxdWVzdCkgeworCQkJCXIuVVJMLlNjaGVtZSA9ICJodHRwcyIKKwkJCX0sCisJCX0pCisJfSgpCisJcmV0dXJuIDwtcmVzdWx0Cit9CisKK3R5cGUgc29ja2V0Q29udGV4dCBzdHJ1Y3QgeworCXN5bmMuV2FpdEdyb3VwCisJbXV0ZXggc3luYy5NdXRleAorCWxhc3QgIHRpbWUuVGltZQorfQorCitmdW5jIChzYyAqc29ja2V0Q29udGV4dCkgRG9uZSgpIHsKKwlzYy5tdXRleC5Mb2NrKCkKKwlkZWZlciBzYy5tdXRleC5VbmxvY2soKQorCXNjLmxhc3QgPSB0aW1lLk5vdygpCisJc2MuV2FpdEdyb3VwLkRvbmUoKQorfQorCitmdW5jIChwICpQcm94eSkgc2VydmVVbml4KHJlc3VsdCBjaGFuPC0gZXJyb3IpIHsKKwlzb2NrQ3R4IDo9ICZzb2NrZXRDb250ZXh0e30KKwlnbyBwLmNsb3NlT25JZGxlKHNvY2tDdHgpCisKKwl2YXIgZXJyIGVycm9yCisJZm9yIHsKKwkJdmFyIHVjb25uIG5ldC5Db25uCisJCXVjb25uLCBlcnIgPSBwLnVsLkFjY2VwdCgpCisJCWlmIGVyciAhPSBuaWwgeworCQkJZXJyID0gZm10LkVycm9yZigiYWNjZXB0IGZhaWxlZDogJXYiLCBlcnIpCisJCQlicmVhaworCQl9CisJCXNvY2tDdHguQWRkKDEpCisJCWdvIHAuaGFuZGxlVW5peENvbm4oc29ja0N0eCwgdWNvbm4pCisJfQorCXNvY2tDdHguV2FpdCgpCisJcmVzdWx0IDwtIGVycgorfQorCitmdW5jIChwICpQcm94eSkgaGFuZGxlVW5peENvbm4oc29ja0N0eCAqc29ja2V0Q29udGV4dCwgdWNvbm4gbmV0LkNvbm4pIHsKKwlkZWZlciBzb2NrQ3R4LkRvbmUoKQorCWRlZmVyIHVjb25uLkNsb3NlKCkKKwlkYXRhIDo9IFtdYnl0ZShmbXQuU3ByaW50ZigiJXZcbiV2IiwgcC5odHRwc0FkZHIsIHAuaHR0cEFkZHIpKQorCXVjb25uLlNldERlYWRsaW5lKHRpbWUuTm93KCkuQWRkKDUgKiB0aW1lLlNlY29uZCkpCisJZm9yIGkgOj0gMDsgaSA8IDI7IGkrKyB7CisJCWlmIG4sIGVyciA6PSB1Y29ubi5Xcml0ZShkYXRhKTsgZXJyICE9IG5pbCB7CisJCQlsb2cuUHJpbnRmKCJlcnJvciBzZW5kaW5nIGh0dHAgYWRkcmVzc2VzOiAlK3ZcbiIsIGVycikKKwkJCXJldHVybgorCQl9IGVsc2UgaWYgbiAhPSBsZW4oZGF0YSkgeworCQkJbG9nLlByaW50Zigic2VudCAlZCBkYXRhIGJ5dGVzLCB3YW50ZWQgJWRcbiIsIG4sIGxlbihkYXRhKSkKKwkJCXJldHVybgorCQl9CisJCWlmIF8sIGVyciA6PSB1Y29ubi5SZWFkKFtdYnl0ZXswLCAwLCAwLCAwfSk7IGVyciAhPSBuaWwgeworCQkJbG9nLlByaW50ZigiZXJyb3Igd2FpdGluZyBmb3IgQWNrOiAlK3ZcbiIsIGVycikKKwkJCXJldHVybgorCQl9CisJfQorCS8vIFdhaXQgd2l0aG91dCBhIGRlYWRsaW5lIGZvciB0aGUgY2xpZW50IHRvIGZpbmlzaCB2aWEgRU9GCisJdWNvbm4uU2V0RGVhZGxpbmUodGltZS5UaW1le30pCisJdWNvbm4uUmVhZChbXWJ5dGV7MCwgMCwgMCwgMH0pCit9CisKK2Z1bmMgKHAgKlByb3h5KSBjbG9zZU9uSWRsZShzb2NrQ3R4ICpzb2NrZXRDb250ZXh0KSB7CisJZm9yIGQgOj0gcC5NYXhJZGxlRHVyYXRpb247IGQgPiAwOyB7CisJCXRpbWUuU2xlZXAoZCkKKwkJc29ja0N0eC5XYWl0KCkKKwkJc29ja0N0eC5tdXRleC5Mb2NrKCkKKwkJaWYgZCA9IHNvY2tDdHgubGFzdC5BZGQocC5NYXhJZGxlRHVyYXRpb24pLlN1Yih0aW1lLk5vdygpKTsgZCA8PSAwIHsKKwkJCWxvZy5QcmludGxuKCJncmFjZWZ1bCBzaHV0ZG93biBmcm9tIGlkbGUgdGltZW91dCIpCisJCQlwLnVsLkNsb3NlKCkKKwkJfQorCQlzb2NrQ3R4Lm11dGV4LlVubG9jaygpCisJfQorfQorCitmdW5jIChwICpQcm94eSkgY2xvc2VPblVwZGF0ZSgpIHsKKwlmb3IgeworCQl0aW1lLlNsZWVwKHAuUG9sbFVwZGF0ZUludGVydmFsKQorCQlpZiBvdXQsIGVyciA6PSBleGVjLkNvbW1hbmQob3MuQXJnc1swXSwgIi0tcHJpbnRfbGFiZWwiKS5PdXRwdXQoKTsgZXJyICE9IG5pbCB7CisJCQlsb2cuUHJpbnRmKCJlcnJvciBwb2xsaW5nIGZvciB1cGRhdGVkIGJpbmFyeTogJXZcbiIsIGVycikKKwkJfSBlbHNlIGlmIHMgOj0gc3RyaW5nKG91dFs6bGVuKG91dCktMV0pOyBwLkJ1aWxkTGFiZWwgIT0gcyB7CisJCQlsb2cuUHJpbnRmKCJncmFjZWZ1bCBzaHV0ZG93biBmcm9tIHVwZGF0ZWQgYmluYXJ5OiAlcSAtLT4gJXFcbiIsIHAuQnVpbGRMYWJlbCwgcykKKwkJCXAudWwuQ2xvc2UoKQorCQkJYnJlYWsKKwkJfQorCX0KK30KKworZnVuYyAocCAqUHJveHkpIGNsb3NlT25TaWduYWwoKSB7CisJY2ggOj0gbWFrZShjaGFuIG9zLlNpZ25hbCwgMTApCisJc2lnbmFsLk5vdGlmeShjaCwgb3MuSW50ZXJydXB0LCBvcy5LaWxsLCBvcy5TaWduYWwoc3lzY2FsbC5TSUdURVJNKSwgb3MuU2lnbmFsKHN5c2NhbGwuU0lHSFVQKSkKKwlzaWcgOj0gPC1jaAorCXAudWwuQ2xvc2UoKQorCXN3aXRjaCBzaWcgeworCWNhc2Ugb3MuU2lnbmFsKHN5c2NhbGwuU0lHSFVQKToKKwkJbG9nLlByaW50ZigiZ3JhY2VmdWwgc2h1dGRvd24gZnJvbSBzaWduYWw6ICV2XG4iLCBzaWcpCisJZGVmYXVsdDoKKwkJbG9nLkZhdGFsZigiZXhpdGluZyBmcm9tIHNpZ25hbDogJXZcbiIsIHNpZykKKwl9Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3BlcnNpc3RlbnQtaHR0cHMvc29ja2V0LmdvIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL3NvY2tldC5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNiOTExCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9wZXJzaXN0ZW50LWh0dHBzL3NvY2tldC5nbwpAQCAtMCwwICsxLDk3IEBACisvLyBDb3B5cmlnaHQgMjAxMiBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitwYWNrYWdlIG1haW4KKworaW1wb3J0ICgKKwkiZm10IgorCSJsb2ciCisJIm5ldCIKKwkib3MiCisJInBhdGgvZmlsZXBhdGgiCisJInN5c2NhbGwiCispCisKKy8vIEEgU29ja2V0IGlzIGEgd3JhcHBlciBhcm91bmQgYSBVbml4IHNvY2tldCB0aGF0IHZlcmlmaWVzIGRpcmVjdG9yeQorLy8gcGVybWlzc2lvbnMuCit0eXBlIFNvY2tldCBzdHJ1Y3QgeworCURpciBzdHJpbmcKK30KKworZnVuYyBkZWZhdWx0RGlyKCkgc3RyaW5nIHsKKwlzb2NrUGF0aCA6PSAiLmdpdC1jcmVkZW50aWFsLWNhY2hlIgorCWlmIGhvbWUgOj0gb3MuR2V0ZW52KCJIT01FIik7IGhvbWUgIT0gIiIgeworCQlyZXR1cm4gZmlsZXBhdGguSm9pbihob21lLCBzb2NrUGF0aCkKKwl9CisJbG9nLlByaW50Zigic29ja2V0OiBjYW5ub3QgZmluZCBIT01FIHBhdGguIHVzaW5nIHJlbGF0aXZlIGRpcmVjdG9yeSAlcSBmb3Igc29ja2V0Iiwgc29ja1BhdGgpCisJcmV0dXJuIHNvY2tQYXRoCit9CisKKy8vIERlZmF1bHRTb2NrZXQgaXMgYSBTb2NrZXQgaW4gdGhlICRIT01FLy5naXQtY3JlZGVudGlhbC1jYWNoZSBkaXJlY3RvcnkuCit2YXIgRGVmYXVsdFNvY2tldCA9IFNvY2tldHtEaXI6IGRlZmF1bHREaXIoKX0KKworLy8gTGlzdGVuIGFubm91bmNlcyB0aGUgbG9jYWwgbmV0d29yayBhZGRyZXNzIG9mIHRoZSB1bml4IHNvY2tldC4gVGhlCisvLyBwZXJtaXNzaW9ucyBvbiB0aGUgc29ja2V0IGRpcmVjdG9yeSBhcmUgdmVyaWZpZWQgYmVmb3JlIGF0dGVtcHRpbmcKKy8vIHRoZSBhY3R1YWwgbGlzdGVuLgorZnVuYyAocyBTb2NrZXQpIExpc3RlbigpIChuZXQuTGlzdGVuZXIsIGVycm9yKSB7CisJbmV0d29yaywgYWRkciA6PSAidW5peCIsIHMuUGF0aCgpCisJaWYgZXJyIDo9IHMubWtkaXIoKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsICZuZXQuT3BFcnJvcntPcDogImxpc3RlbiIsIE5ldDogbmV0d29yaywgQWRkcjogJm5ldC5Vbml4QWRkcntOYW1lOiBhZGRyLCBOZXQ6IG5ldHdvcmt9LCBFcnI6IGVycn0KKwl9CisJcmV0dXJuIG5ldC5MaXN0ZW4obmV0d29yaywgYWRkcikKK30KKworLy8gRGlhbCBjb25uZWN0cyB0byB0aGUgdW5peCBzb2NrZXQuIFRoZSBwZXJtaXNzaW9ucyBvbiB0aGUgc29ja2V0IGRpcmVjdG9yeQorLy8gYXJlIHZlcmlmaWVkIGJlZm9yZSBhdHRlbXB0aW5nIHRoZSBhY3R1YWwgZGlhbC4KK2Z1bmMgKHMgU29ja2V0KSBEaWFsKCkgKG5ldC5Db25uLCBlcnJvcikgeworCW5ldHdvcmssIGFkZHIgOj0gInVuaXgiLCBzLlBhdGgoKQorCWlmIGVyciA6PSBzLmNoZWNrUGVybWlzc2lvbnMoKTsgZXJyICE9IG5pbCB7CisJCXJldHVybiBuaWwsICZuZXQuT3BFcnJvcntPcDogImRpYWwiLCBOZXQ6IG5ldHdvcmssIEFkZHI6ICZuZXQuVW5peEFkZHJ7TmFtZTogYWRkciwgTmV0OiBuZXR3b3JrfSwgRXJyOiBlcnJ9CisJfQorCXJldHVybiBuZXQuRGlhbChuZXR3b3JrLCBhZGRyKQorfQorCisvLyBQYXRoIHJldHVybnMgdGhlIGZ1bGx5IHNwZWNpZmllZCBmaWxlIG5hbWUgb2YgdGhlIHVuaXggc29ja2V0LgorZnVuYyAocyBTb2NrZXQpIFBhdGgoKSBzdHJpbmcgeworCXJldHVybiBmaWxlcGF0aC5Kb2luKHMuRGlyLCAicGVyc2lzdGVudC1odHRwcy1wcm94eS1zb2NrZXQiKQorfQorCitmdW5jIChzIFNvY2tldCkgbWtkaXIoKSBlcnJvciB7CisJaWYgZXJyIDo9IHMuY2hlY2tQZXJtaXNzaW9ucygpOyBlcnIgPT0gbmlsIHsKKwkJcmV0dXJuIG5pbAorCX0gZWxzZSBpZiAhb3MuSXNOb3RFeGlzdChlcnIpIHsKKwkJcmV0dXJuIGVycgorCX0KKwlpZiBlcnIgOj0gb3MuTWtkaXJBbGwocy5EaXIsIDA3MDApOyBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuIGVycgorCX0KKwlyZXR1cm4gcy5jaGVja1Blcm1pc3Npb25zKCkKK30KKworZnVuYyAocyBTb2NrZXQpIGNoZWNrUGVybWlzc2lvbnMoKSBlcnJvciB7CisJZmksIGVyciA6PSBvcy5TdGF0KHMuRGlyKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4gZXJyCisJfQorCWlmICFmaS5Jc0RpcigpIHsKKwkJcmV0dXJuIGZtdC5FcnJvcmYoInNvY2tldDogZ290IGZpbGUsIHdhbnQgZGlyZWN0b3J5IGZvciAlcSIsIHMuRGlyKQorCX0KKwlpZiBmaS5Nb2RlKCkuUGVybSgpICE9IDA3MDAgeworCQlyZXR1cm4gZm10LkVycm9yZigic29ja2V0OiBnb3QgcGVybSAlbywgd2FudCA3MDAgZm9yICVxIiwgZmkuTW9kZSgpLlBlcm0oKSwgcy5EaXIpCisJfQorCWlmIHN0IDo9IGZpLlN5cygpLigqc3lzY2FsbC5TdGF0X3QpOyBpbnQoc3QuVWlkKSAhPSBvcy5HZXR1aWQoKSB7CisJCXJldHVybiBmbXQuRXJyb3JmKCJzb2NrZXQ6IGdvdCB1aWQgJWQsIHdhbnQgJWQgZm9yICVxIiwgc3QuVWlkLCBvcy5HZXR1aWQoKSwgcy5EaXIpCisJfQorCXJldHVybiBuaWwKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvUkVBRE1FIGIvY29udHJpYi9yZW1vdGUtaGVscGVycy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM3MjMzMgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvUkVBRE1FCkBAIC0wLDAgKzEsMTUgQEAKK1RoZSByZW1vdGUtaGVscGVyIGJyaWRnZXMgdG8gYWNjZXNzIGRhdGEgc3RvcmVkIGluIE1lcmN1cmlhbCBhbmQKK0JhemFhciBhcmUgbWFpbnRhaW5lZCBvdXRzaWRlIHRoZSBnaXQuZ2l0IHRyZWUgaW4gdGhlIHJlcG9zaXRvcmllcworb2YgdGhlaXIgcHJpbWFyeSBhdXRob3I6CisKKyAgICBodHRwczovL2dpdGh1Yi5jb20vZmVsaXBlYy9naXQtcmVtb3RlLWhnIChmb3IgTWVyY3VyaWFsKQorICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpcGVjL2dpdC1yZW1vdGUtYnpyIChmb3IgQmF6YWFyKQorCitZb3UgY2FuIHBpY2sgYSBkaXJlY3Rvcnkgb24geW91ciAkUEFUSCBhbmQgZG93bmxvYWQgdGhlbSBmcm9tIHRoZXNlCityZXBvc2l0b3JpZXMsIGUuZy46CisKKyAgJCB3Z2V0IC1PICRIT01FL2Jpbi9naXQtcmVtb3RlLWhnIFwKKyAgICBodHRwczovL3Jhdy5naXRodWIuY29tL2ZlbGlwZWMvZ2l0LXJlbW90ZS1oZy9tYXN0ZXIvZ2l0LXJlbW90ZS1oZworICAkIHdnZXQgLU8gJEhPTUUvYmluL2dpdC1yZW1vdGUtYnpyIFwKKyAgICBodHRwczovL3Jhdy5naXRodWIuY29tL2ZlbGlwZWMvZ2l0LXJlbW90ZS1ienIvbWFzdGVyL2dpdC1yZW1vdGUtYnpyCisgICQgY2htb2QgK3ggJEhPTUUvYmluL2dpdC1yZW1vdGUtaGcgJEhPTUUvYmluL2dpdC1yZW1vdGUtYnpyCmRpZmYgLS1naXQgYS9jb250cmliL3JlbW90ZS1oZWxwZXJzL2dpdC1yZW1vdGUtYnpyIGIvY29udHJpYi9yZW1vdGUtaGVscGVycy9naXQtcmVtb3RlLWJ6cgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MTJhMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9yZW1vdGUtaGVscGVycy9naXQtcmVtb3RlLWJ6cgpAQCAtMCwwICsxLDEzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IHN5cworCitzeXMuc3RkZXJyLndyaXRlKCdXQVJOSU5HOiBnaXQtcmVtb3RlLWJ6ciBpcyBub3cgbWFpbnRhaW5lZCBpbmRlcGVuZGVudGx5LlxuJykKK3N5cy5zdGRlcnIud3JpdGUoJ1dBUk5JTkc6IEZvciBtb3JlIGluZm9ybWF0aW9uIHZpc2l0IGh0dHBzOi8vZ2l0aHViLmNvbS9mZWxpcGVjL2dpdC1yZW1vdGUtYnpyXG4nKQorCitzeXMuc3RkZXJyLndyaXRlKCcnJ1dBUk5JTkc6CitXQVJOSU5HOiBZb3UgY2FuIHBpY2sgYSBkaXJlY3Rvcnkgb24geW91ciAkUEFUSCBhbmQgZG93bmxvYWQgaXQsIGUuZy46CitXQVJOSU5HOiAgICQgd2dldCAtTyAkSE9NRS9iaW4vZ2l0LXJlbW90ZS1ienIgXFwKK1dBUk5JTkc6ICAgICBodHRwczovL3Jhdy5naXRodWIuY29tL2ZlbGlwZWMvZ2l0LXJlbW90ZS1ienIvbWFzdGVyL2dpdC1yZW1vdGUtYnpyCitXQVJOSU5HOiAgICQgY2htb2QgK3ggJEhPTUUvYmluL2dpdC1yZW1vdGUtYnpyCisnJycpCmRpZmYgLS1naXQgYS9jb250cmliL3JlbW90ZS1oZWxwZXJzL2dpdC1yZW1vdGUtaGcgYi9jb250cmliL3JlbW90ZS1oZWxwZXJzL2dpdC1yZW1vdGUtaGcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDI1NWFkNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcmVtb3RlLWhlbHBlcnMvZ2l0LXJlbW90ZS1oZwpAQCAtMCwwICsxLDEzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworaW1wb3J0IHN5cworCitzeXMuc3RkZXJyLndyaXRlKCdXQVJOSU5HOiBnaXQtcmVtb3RlLWhnIGlzIG5vdyBtYWludGFpbmVkIGluZGVwZW5kZW50bHkuXG4nKQorc3lzLnN0ZGVyci53cml0ZSgnV0FSTklORzogRm9yIG1vcmUgaW5mb3JtYXRpb24gdmlzaXQgaHR0cHM6Ly9naXRodWIuY29tL2ZlbGlwZWMvZ2l0LXJlbW90ZS1oZ1xuJykKKworc3lzLnN0ZGVyci53cml0ZSgnJydXQVJOSU5HOgorV0FSTklORzogWW91IGNhbiBwaWNrIGEgZGlyZWN0b3J5IG9uIHlvdXIgJFBBVEggYW5kIGRvd25sb2FkIGl0LCBlLmcuOgorV0FSTklORzogICAkIHdnZXQgLU8gJEhPTUUvYmluL2dpdC1yZW1vdGUtaGcgXFwKK1dBUk5JTkc6ICAgICBodHRwczovL3Jhdy5naXRodWIuY29tL2ZlbGlwZWMvZ2l0LXJlbW90ZS1oZy9tYXN0ZXIvZ2l0LXJlbW90ZS1oZworV0FSTklORzogICAkIGNobW9kICt4ICRIT01FL2Jpbi9naXQtcmVtb3RlLWhnCisnJycpCmRpZmYgLS1naXQgYS9jb250cmliL3JlbW90ZXMyY29uZmlnLnNoIGIvY29udHJpYi9yZW1vdGVzMmNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xY2RhMTlmCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9yZW1vdGVzMmNvbmZpZy5zaApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKworIyBVc2UgdGhpcyB0b29sIHRvIHJld3JpdGUgeW91ciAuZ2l0L3JlbW90ZXMvIGZpbGVzIGludG8gdGhlIGNvbmZpZy4KKworLiBnaXQtc2gtc2V0dXAKKworaWYgWyAtZCAiJEdJVF9ESVIiL3JlbW90ZXMgXTsgdGhlbgorCWVjaG8gIlJld3JpdGluZyAkR0lUX0RJUi9yZW1vdGVzIiA+JjIKKwllcnJvcj0wCisJIyByZXdyaXRlIGludG8gY29uZmlnCisJeworCQljZCAiJEdJVF9ESVIiL3JlbW90ZXMKKwkJbHMgfCB3aGlsZSByZWFkIGY7IGRvCisJCQluYW1lPSQocHJpbnRmICIkZiIgfCB0ciAtYyAiQS1aYS16MC05LSIgIi4iKQorCQkJc2VkIC1uIFwKKwkJCS1lICJzL15VUkw6WyAJXSpcKC4qXCkkL3JlbW90ZS4kbmFtZS51cmwgXDEgLi9wIiBcCisJCQktZSAicy9eUHVsbDpbIAldKlwoLipcKSQvcmVtb3RlLiRuYW1lLmZldGNoIFwxIF4kIC9wIiBcCisJCQktZSAicy9eUHVzaDpbIAldKlwoLipcKSQvcmVtb3RlLiRuYW1lLnB1c2ggXDEgXiQgL3AiIFwKKwkJCTwgIiRmIgorCQlkb25lCisJCWVjaG8gZG9uZQorCX0gfCB3aGlsZSByZWFkIGtleSB2YWx1ZSByZWdleDsgZG8KKwkJY2FzZSAka2V5IGluCisJCWRvbmUpCisJCQlpZiBbICRlcnJvciA9IDAgXTsgdGhlbgorCQkJCW12ICIkR0lUX0RJUiIvcmVtb3RlcyAiJEdJVF9ESVIiL3JlbW90ZXMub2xkCisJCQlmaSA7OworCQkqKQorCQkJZWNobyAiZ2l0IGNvbmZpZyAka2V5ICIkdmFsdWUiICRyZWdleCIKKwkJCWdpdCBjb25maWcgJGtleSAiJHZhbHVlIiAkcmVnZXggfHwgZXJyb3I9MSA7OworCQllc2FjCisJZG9uZQorZmkKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcmVyZXJlLXRyYWluLnNoIGIvY29udHJpYi9yZXJlcmUtdHJhaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzZiNmZlZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvcmVyZXJlLXRyYWluLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMDgsIE5hbmFrbyBTaGlyYWlzaGkKKyMgUHJpbWUgcmVyZXJlIGRhdGFiYXNlIGZyb20gZXhpc3RpbmcgbWVyZ2UgY29tbWl0cworCittZT1yZXJlcmUtdHJhaW4KK1VTQUdFPSIkbWUgcmV2LWxpc3QtYXJncyIKKworU1VCRElSRUNUT1JZX09LPVllcworT1BUSU9OU19TUEVDPQorLiAkKGdpdCAtLWV4ZWMtcGF0aCkvZ2l0LXNoLXNldHVwCityZXF1aXJlX3dvcmtfdHJlZQorY2RfdG9fdG9wbGV2ZWwKKworIyBSZW1lbWJlciBvcmlnaW5hbCBicmFuY2gKK2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkgfHwKK29yaWdpbmFsX0hFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIHx8IHsKKwllY2hvID4mMiAiTm90IG9uIGFueSBicmFuY2ggYW5kIG5vIGNvbW1pdCB5ZXQ/IgorCWV4aXQgMQorfQorCitta2RpciAtcCAiJEdJVF9ESVIvcnItY2FjaGUiIHx8IGV4aXQKKworZ2l0IHJldi1saXN0IC0tcGFyZW50cyAiJEAiIHwKK3doaWxlIHJlYWQgY29tbWl0IHBhcmVudDEgb3RoZXJfcGFyZW50cworZG8KKwlpZiB0ZXN0IC16ICIkb3RoZXJfcGFyZW50cyIKKwl0aGVuCisJCSMgU2tpcCBub24tbWVyZ2VzCisJCWNvbnRpbnVlCisJZmkKKwlnaXQgY2hlY2tvdXQgLXEgIiRwYXJlbnQxXjAiCisJaWYgZ2l0IG1lcmdlICRvdGhlcl9wYXJlbnRzID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJIyBDbGVhbmx5IG1lcmdlcworCQljb250aW51ZQorCWZpCisJaWYgdGVzdCAtcyAiJEdJVF9ESVIvTUVSR0VfUlIiCisJdGhlbgorCQlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IkxlYXJuaW5nIGZyb20gJWggJXMiICIkY29tbWl0IgorCQlnaXQgcmVyZXJlCisJCWdpdCBjaGVja291dCAtcSAkY29tbWl0IC0tIC4KKwkJZ2l0IHJlcmVyZQorCWZpCisJZ2l0IHJlc2V0IC1xIC0taGFyZAorZG9uZQorCitpZiB0ZXN0IC16ICIkYnJhbmNoIgordGhlbgorCWdpdCBjaGVja291dCAiJG9yaWdpbmFsX0hFQUQiCitlbHNlCisJZ2l0IGNoZWNrb3V0ICIke2JyYW5jaCNyZWZzL2hlYWRzL30iCitmaQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdGF0cy9naXQtY29tbW9uLWhhc2ggYi9jb250cmliL3N0YXRzL2dpdC1jb21tb24taGFzaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMjdmZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdGF0cy9naXQtY29tbW9uLWhhc2gKQEAgLTAsMCArMSwyNiBAQAorIyEvYmluL3NoCisKKyMgVGhpcyBzY3JpcHQgZGlzcGxheXMgdGhlIGRpc3RyaWJ1dGlvbiBvZiBsb25nZXN0IGNvbW1vbiBoYXNoIHByZWZpeGVzLgorIyBUaGlzIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgbWluaW11bSBwcmVmaXggbGVuZ3RoIHRvIHVzZQorIyBmb3Igb2JqZWN0IG5hbWVzIHRvIGJlIHVuaXF1ZS4KKworZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWFsbCB8IHNvcnQgfCBwZXJsIC1sbmUgJworICBzdWJzdHIoJF8sIDQwKSA9ICIiOworICAjIHVuY29tbWVudCBuZXh0IGxpbmUgZm9yIGEgZGlzdHJpYnV0aW9uIG9mIGJpdHMgaW5zdGVhZCBvZiBoZXggY2hhcnMKKyAgIyAkXyA9IHVucGFjaygiQioiLHBhY2soIkgqIiwkXykpOworICBpZiAoZGVmaW5lZCAkcCkgeworICAgICgkcCBeICRfKSA9fiAvXihcMCopLzsKKyAgICAkY29tbW9uID0gbGVuZ3RoICQxOworICAgIGlmIChkZWZpbmVkICRwY29tbW9uKSB7CisgICAgICAkY291bnRbJHBjb21tb24gPiAkY29tbW9uID8gJHBjb21tb24gOiAkY29tbW9uXSsrOworICAgIH0gZWxzZSB7CisgICAgICAkY291bnRbJGNvbW1vbl0rKzsgIyBmaXJzdCBpdGVtCisgICAgfQorICB9CisgICRwID0gJF87CisgICRwY29tbW9uID0gJGNvbW1vbjsKKyAgRU5EIHsKKyAgICAkY291bnRbJGNvbW1vbl0rKzsgIyBsYXN0IGl0ZW0KKyAgICBwcmludCAiJF86ICRjb3VudFskX10iIGZvciAwLi4kI2NvdW50OworICB9CisnCmRpZmYgLS1naXQgYS9jb250cmliL3N0YXRzL21haWxtYXAucGwgYi9jb250cmliL3N0YXRzL21haWxtYXAucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTUxM2Y1ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3RhdHMvbWFpbG1hcC5wbApAQCAtMCwwICsxLDcwIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHdhcm5pbmdzICdhbGwnOwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKK215ICRtYXRjaF9lbWFpbHM7CitteSAkbWF0Y2hfbmFtZXM7CitteSAkb3JkZXJfYnkgPSAnY291bnQnOworR2V0b3B0OjpMb25nOjpDb25maWd1cmUocXcoYnVuZGxpbmcpKTsKK0dldE9wdGlvbnMoCisJJ2VtYWlsc3xlIScgPT4gXCRtYXRjaF9lbWFpbHMsCisJJ25hbWVzfG4hJyAgPT4gXCRtYXRjaF9uYW1lcywKKwknY291bnR8YycgICA9PiBzdWIgeyAkb3JkZXJfYnkgPSAnY291bnQnIH0sCisJJ3RpbWV8dCcgICAgPT4gc3ViIHsgJG9yZGVyX2J5ID0gJ3N0YW1wJyB9LAorKSBvciBleGl0IDE7CiskbWF0Y2hfZW1haWxzID0gMSB1bmxlc3MgJG1hdGNoX25hbWVzOworCitteSAkZW1haWwgPSB7fTsKK215ICRuYW1lID0ge307CisKK29wZW4obXkgJGZoLCAnLXwnLCAiZ2l0IGxvZyAtLWZvcm1hdD0nJWF0IDwlYUU+ICVhTiciKTsKK3doaWxlKDwkZmg+KSB7CisJbXkgKCR0LCAkZSwgJG4pID0gLyhcUyspIDwoXFMrKT4gKC4qKS87CisJbWFyaygkZW1haWwsICRlLCAkbiwgJHQpOworCW1hcmsoJG5hbWUsICRuLCAkZSwgJHQpOworfQorY2xvc2UoJGZoKTsKKworaWYgKCRtYXRjaF9lbWFpbHMpIHsKKwlmb3JlYWNoIG15ICRlIChkdXBzKCRlbWFpbCkpIHsKKwkJZm9yZWFjaCBteSAkbiAodmFscygkZW1haWwtPnskZX0pKSB7CisJCQlzaG93KCRuLCAkZSwgJGVtYWlsLT57JGV9LT57JG59KTsKKwkJfQorCQlwcmludCAiXG4iOworCX0KK30KK2lmICgkbWF0Y2hfbmFtZXMpIHsKKwlmb3JlYWNoIG15ICRuIChkdXBzKCRuYW1lKSkgeworCQlmb3JlYWNoIG15ICRlICh2YWxzKCRuYW1lLT57JG59KSkgeworCQkJc2hvdygkbiwgJGUsICRuYW1lLT57JG59LT57JGV9KTsKKwkJfQorCQlwcmludCAiXG4iOworCX0KK30KK2V4aXQgMDsKKworc3ViIG1hcmsgeworCW15ICgkaCwgJGssICR2LCAkdCkgPSBAXzsKKwlteSAkZSA9ICRoLT57JGt9LT57JHZ9IHx8PSB7IGNvdW50ID0+IDAsIHN0YW1wID0+IDAgfTsKKwkkZS0+e2NvdW50fSsrOworCSRlLT57c3RhbXB9ID0gJHQgdW5sZXNzICR0IDwgJGUtPntzdGFtcH07Cit9CisKK3N1YiBkdXBzIHsKKwlteSAkaCA9IHNoaWZ0OworCXJldHVybiBncmVwIHsga2V5cygkaC0+eyRffSkgPiAxIH0ga2V5cygkaCk7Cit9CisKK3N1YiB2YWxzIHsKKwlteSAkaCA9IHNoaWZ0OworCXJldHVybiBzb3J0IHsKKwkJJGgtPnskYn0tPnskb3JkZXJfYnl9IDw9PiAkaC0+eyRhfS0+eyRvcmRlcl9ieX0KKwl9IGtleXMoJGgpOworfQorCitzdWIgc2hvdyB7CisJbXkgKCRuLCAkZSwgJGgpID0gQF87CisJcHJpbnQgIiRuIDwkZT4gKCRoLT57JG9yZGVyX2J5fSlcbiI7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3N0YXRzL3BhY2tpbmZvLnBsIGIvY29udHJpYi9zdGF0cy9wYWNraW5mby5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZTE4OGMwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdGF0cy9wYWNraW5mby5wbApAQCAtMCwwICsxLDIxMiBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIFRoaXMgdG9vbCB3aWxsIHByaW50IHZhZ3VlbHkgcHJldHR5IGluZm9ybWF0aW9uIGFib3V0IGEgcGFjay4gIEl0CisjIGV4cGVjdHMgdGhlIG91dHB1dCBvZiAiZ2l0IHZlcmlmeS1wYWNrIC12IiBhcyBpbnB1dCBvbiBzdGRpbi4KKyMKKyMgJCBnaXQgdmVyaWZ5LXBhY2sgLXYgfCBwYWNraW5mby5wbAorIworIyBUaGlzIHByaW50cyBzb21lIGZ1bGwtcGFjayBzdGF0aXN0aWNzOyBjdXJyZW50bHkgImFsbCBzaXplcyIsICJhbGwKKyMgcGF0aCBzaXplcyIsICJ0cmVlIHNpemVzIiwgInRyZWUgcGF0aCBzaXplcyIsIGFuZCAiZGVwdGhzIi4KKyMKKyMgKiAiYWxsIHNpemVzIiBzdGF0cyBhcmUgYWNyb3NzIGV2ZXJ5IG9iamVjdCBzaXplIGluIHRoZSBmaWxlOworIyAgIGZ1bGwgc2l6ZXMgZm9yIGJhc2Ugb2JqZWN0cywgYW5kIGRlbHRhIHNpemUgZm9yIGRlbHRhcy4KKyMgKiAiYWxsIHBhdGggc2l6ZXMiIHN0YXRzIGFyZSBhY3Jvc3MgYWxsIG9iamVjdCdzICJwYXRoIHNpemVzIi4KKyMgICBBIHBhdGggc2l6ZSBpcyB0aGUgc3VtIG9mIHRoZSBzaXplIG9mIHRoZSBkZWx0YSBjaGFpbiwgaW5jbHVkaW5nIHRoZQorIyAgIGJhc2Ugb2JqZWN0LiAgSW4gb3RoZXIgd29yZHMsIGl0J3MgaG93IG1hbnkgYnl0ZXMgbmVlZCBiZSByZWFkIHRvCisjICAgcmVhc3NlbWJsZSB0aGUgZmlsZSBmcm9tIGRlbHRhcy4KKyMgKiAidHJlZSBzaXplcyIgYXJlIG9iamVjdCBzaXplcyBncm91cGVkIGludG8gZGVsdGEgdHJlZXMuCisjICogInRyZWUgcGF0aCBzaXplcyIgYXJlIHBhdGggc2l6ZXMgZ3JvdXBlZCBpbnRvIGRlbHRhIHRyZWVzLgorIyAqICJkZXB0aHMiIHNob3VsZCBiZSBvYnZpb3VzLgorIworIyBXaGVuIHJ1biBhczoKKyMKKyMgJCBnaXQgdmVyaWZ5LXBhY2sgLXYgfCBwYWNraW5mby5wbCAtdHJlZQorIworIyB0aGUgdHJlZXMgb2Ygb2JqZWN0cyBhcmUgb3V0cHV0IGFsb25nIHdpdGggdGhlIHN0YXRzLiAgVGhpcyBsb29rcworIyBsaWtlOgorIworIyAgIDAgY29tbWl0IDAzMTMyMWM2Li4uICAgICAgODAzICAgICAgODAzCisjCisjICAgMCAgIGJsb2IgMDMxNTZmMjEuLi4gICAgIDE3NjcgICAgIDE3NjcKKyMgICAxICAgIGJsb2IgZjUyYTlkN2YuLi4gICAgICAgMTAgICAgIDE3NzcKKyMgICAyICAgICBibG9iIGE4Y2M1NzM5Li4uICAgICAgIDUxICAgICAxODI4CisjICAgMyAgICAgIGJsb2IgNjYwZTkwYjEuLi4gICAgICAgMTUgICAgIDE4NDMKKyMgICA0ICAgICAgIGJsb2IgMGNiOGUzYmIuLi4gICAgICAgMzMgICAgIDE4NzYKKyMgICAyICAgICBibG9iIGU0ODYwN2YwLi4uICAgICAgMzExICAgICAyMDg4CisjICAgICAgc2l6ZTogY291bnQgNiB0b3RhbCAyMTg3IG1pbiAxMCBtYXggMTc2NyBtZWFuIDM2NC41MCBtZWRpYW4gNTEgc3RkX2RldiA2MzUuODUKKyMgcGF0aCBzaXplOiBjb3VudCA2IHRvdGFsIDExMTc5IG1pbiAxNzY3IG1heCAyMDg4IG1lYW4gMTg2My4xNyBtZWRpYW4gMTg0MyBzdGRfZGV2IDEwNy4yNgorIworIyBUaGUgZmlyc3QgbnVtYmVyIGFmdGVyIHRoZSBzaGExIGlzIHRoZSBvYmplY3Qgc2l6ZSwgdGhlIHNlY29uZAorIyBudW1iZXIgaXMgdGhlIHBhdGggc2l6ZS4gIFRoZSBzdGF0aXN0aWNzIGFyZSBhY3Jvc3MgYWxsIG9iamVjdHMgaW4KKyMgdGhlIHByZXZpb3VzIGRlbHRhIHRyZWUuICBPYnZpb3VzbHkgdGhleSBhcmUgb21pdHRlZCBmb3IgdHJlZXMgb2YKKyMgb25lIG9iamVjdC4KKyMKKyMgV2hlbiBydW4gYXM6CisjCisjICQgZ2l0IHZlcmlmeS1wYWNrIC12IHwgcGFja2luZm8ucGwgLXRyZWUgLWZpbGVuYW1lcworIworIyBpdCBhZGRzIGZpbGVuYW1lcyB0byB0aGUgdHJlZS4gIEdldHRpbmcgdGhpcyBpbmZvcm1hdGlvbiBpcyBzbG93OgorIworIyAgIDAgICBibG9iIDAzMTU2ZjIxLi4uICAgICAxNzY3ICAgICAxNzY3IERvY3VtZW50YXRpb24vZ2l0LWxvc3QtZm91bmQudHh0IEAgdGFncy92MS4yLjB+MTQyCisjICAgMSAgICBibG9iIGY1MmE5ZDdmLi4uICAgICAgIDEwICAgICAxNzc3IERvY3VtZW50YXRpb24vZ2l0LWxvc3QtZm91bmQudHh0IEAgdGFncy92MS41LjAtcmMxfjc0CisjICAgMiAgICAgYmxvYiBhOGNjNTczOS4uLiAgICAgICA1MSAgICAgMTgyOCBEb2N1bWVudGF0aW9uL2dpdC1sb3N0K2ZvdW5kLnR4dCBAIHRhZ3MvdjAuOTkuOWheMAorIyAgIDMgICAgICBibG9iIDY2MGU5MGIxLi4uICAgICAgIDE1ICAgICAxODQzIERvY3VtZW50YXRpb24vZ2l0LWxvc3QrZm91bmQudHh0IEAgbWFzdGVyfjMyMjJeMn4yCisjICAgNCAgICAgICBibG9iIDBjYjhlM2JiLi4uICAgICAgIDMzICAgICAxODc2IERvY3VtZW50YXRpb24vZ2l0LWxvc3QrZm91bmQudHh0IEAgbWFzdGVyfjMyMjJeMn4zCisjICAgMiAgICAgYmxvYiBlNDg2MDdmMC4uLiAgICAgIDMxMSAgICAgMjA4OCBEb2N1bWVudGF0aW9uL2dpdC1sb3N0LWZvdW5kLnR4dCBAIHRhZ3MvdjEuNS4yLXJjM340CisjICAgICAgc2l6ZTogY291bnQgNiB0b3RhbCAyMTg3IG1pbiAxMCBtYXggMTc2NyBtZWFuIDM2NC41MCBtZWRpYW4gNTEgc3RkX2RldiA2MzUuODUKKyMgcGF0aCBzaXplOiBjb3VudCA2IHRvdGFsIDExMTc5IG1pbiAxNzY3IG1heCAyMDg4IG1lYW4gMTg2My4xNyBtZWRpYW4gMTg0MyBzdGRfZGV2IDEwNy4yNgorIworIyBXaGVuIHJ1biBhczoKKyMKKyMgJCBnaXQgdmVyaWZ5LXBhY2sgLXYgfCBwYWNraW5mby5wbCAtZHVtcAorIworIyBpdCBwcmludHMgb3V0ICJzaGExIHNpemUgcGF0aHNpemUgZGVwdGgiIGZvciBlYWNoIHNoYTEgaW4gbGV4aWNhbAorIyBvcmRlci4KKyMKKyMgMDAwMDc5YTJlYWVmMTdiN2VhZTcwZTFmMGY2MzU1NTdlYTY3YjY0NCAzMCA0NzIgNworIyAwMDAxM2NhZmU2OTgwNDExYWE2ZmRkOTQwNzg0OTE3YjVmZjUwZjBhIDQ0IDE1NDIgNAorIyAwMDAxODJlYWNmOTljZGUyN2Q1OTE2YWE0MTU5MjE5MjRiODI5NzJjIDQ5OSA0OTkgMAorIyAuLi4KKyMKKyMgVGhpcyBpcyBoYW5keSBmb3IgY29tcGFyaW5nIHR3byBwYWNrcy4gIEFkZGluZyAiLWZpbGVuYW1lcyIgd2lsbCBhZGQKKyMgZmlsZW5hbWVzLCBhcyBwZXIgIi10cmVlIC1maWxlbmFtZXMiIGFib3ZlLgorCit1c2Ugc3RyaWN0OwordXNlIEdldG9wdDo6TG9uZzsKKworbXkgJGZpbGVuYW1lcyA9IDA7CitteSAkdHJlZSA9IDA7CitteSAkZHVtcCA9IDA7CitHZXRPcHRpb25zKCJ0cmVlIiA9PiBcJHRyZWUsCisgICAgICAgICAgICJmaWxlbmFtZXMiID0+IFwkZmlsZW5hbWVzLAorICAgICAgICAgICAiZHVtcCIgPT4gXCRkdW1wKTsKKworbXkgJXBhcmVudHM7CitteSAlY2hpbGRyZW47CitteSAlc2l6ZXM7CitteSBAcm9vdHM7CitteSAlcGF0aHM7CitteSAldHlwZXM7CitteSBAY29tbWl0czsKK215ICVuYW1lczsKK215ICVkZXB0aHM7CitteSBAZGVwdGhzOworCit3aGlsZSAoPFNURElOPikgeworICAgIG15ICgkc2hhMSwgJHR5cGUsICRzaXplLCAkc3BhY2UsICRvZmZzZXQsICRkZXB0aCwgJHBhcmVudCkgPSBzcGxpdCgvXHMrLywgJF8pOworICAgIG5leHQgdW5sZXNzICgkc2hhMSA9fiAvXlswLTlhLWZdezQwfSQvKTsKKyAgICAkZGVwdGhzeyRzaGExfSA9ICRkZXB0aCB8fCAwOworICAgIHB1c2goQGRlcHRocywgJGRlcHRoIHx8IDApOworICAgIHB1c2goQGNvbW1pdHMsICRzaGExKSBpZiAoJHR5cGUgZXEgJ2NvbW1pdCcpOworICAgIHB1c2goQHJvb3RzLCAkc2hhMSkgdW5sZXNzICRwYXJlbnQ7CisgICAgJHBhcmVudHN7JHNoYTF9ID0gJHBhcmVudDsKKyAgICAkdHlwZXN7JHNoYTF9ID0gJHR5cGU7CisgICAgcHVzaChAeyRjaGlsZHJlbnskcGFyZW50fX0sICRzaGExKTsKKyAgICAkc2l6ZXN7JHNoYTF9ID0gJHNpemU7Cit9CisKK2lmICgkZmlsZW5hbWVzICYmICgkdHJlZSB8fCAkZHVtcCkpIHsKKyAgICBvcGVuKE5BTUVTLCAiZ2l0IG5hbWUtcmV2IC0tYWxsfCIpOworICAgIHdoaWxlICg8TkFNRVM+KSB7CisgICAgICAgIGlmICgvXihcUyspXHMrKC4qKSQvKSB7CisgICAgICAgICAgICBteSAoJHNoYTEsICRuYW1lKSA9ICgkMSwgJDIpOworICAgICAgICAgICAgJG5hbWVzeyRzaGExfSA9ICRuYW1lOworICAgICAgICB9CisgICAgfQorICAgIGNsb3NlIE5BTUVTOworCisgICAgZm9yIG15ICRjb21taXQgKEBjb21taXRzKSB7CisgICAgICAgIG15ICRuYW1lID0gJG5hbWVzeyRjb21taXR9OworICAgICAgICBvcGVuKFRSRUUsICJnaXQgbHMtdHJlZSAtdCAtciAkY29tbWl0fCIpOworICAgICAgICBwcmludCBTVERFUlIgIlBsdW1iaW5nIHRyZWUgJG5hbWVcbiI7CisgICAgICAgIHdoaWxlICg8VFJFRT4pIHsKKyAgICAgICAgICAgIGlmICgvXihcUyspXHMrKFxTKylccysoXFMrKVxzKyguKikkLykgeworICAgICAgICAgICAgICAgIG15ICgkbW9kZSwgJHR5cGUsICRzaGExLCAkcGF0aCkgPSAoJDEsICQyLCAkMywgJDQpOworICAgICAgICAgICAgICAgICRwYXRoc3skc2hhMX0gPSAiJHBhdGggQCAkbmFtZSI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UgVFJFRTsKKyAgICB9Cit9CisKK3N1YiBzdGF0cyB7CisgICAgbXkgQGRhdGEgPSBzb3J0IHskYSA8PT4gJGJ9IEBfOworICAgIG15ICRtaW4gPSAkZGF0YVswXTsKKyAgICBteSAkbWF4ID0gJGRhdGFbJCNkYXRhXTsKKyAgICBteSAkdG90YWwgPSAwOworICAgIG15ICRjb3VudCA9IHNjYWxhciBAZGF0YTsKKyAgICBmb3IgbXkgJGRhdHVtIChAZGF0YSkgeworICAgICAgICAkdG90YWwgKz0gJGRhdHVtOworICAgIH0KKyAgICBteSAkbWVhbiA9ICR0b3RhbCAvICRjb3VudDsKKyAgICBteSAkbWVkaWFuID0gJGRhdGFbaW50KEBkYXRhIC8gMildOworICAgIG15ICRkaWZmX3N1bSA9IDA7CisgICAgZm9yIG15ICRkYXR1bSAoQGRhdGEpIHsKKyAgICAgICAgJGRpZmZfc3VtICs9ICgkZGF0dW0gLSAkbWVhbikqKjI7CisgICAgfQorICAgIG15ICRzdGRfZGV2ID0gc3FydCgkZGlmZl9zdW0gLyAkY291bnQpOworICAgIHJldHVybiAoJGNvdW50LCAkdG90YWwsICRtaW4sICRtYXgsICRtZWFuLCAkbWVkaWFuLCAkc3RkX2Rldik7Cit9CisKK3N1YiBwcmludF9zdGF0cyB7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAoJGNvdW50LCAkdG90YWwsICRtaW4sICRtYXgsICRtZWFuLCAkbWVkaWFuLCAkc3RkX2RldikgPSBzdGF0cyhAXyk7CisgICAgcHJpbnRmKCIlczogY291bnQgJXMgdG90YWwgJXMgbWluICVzIG1heCAlcyBtZWFuICUuMmYgbWVkaWFuICVzIHN0ZF9kZXYgJS4yZlxuIiwKKyAgICAgICAgICAgJG5hbWUsICRjb3VudCwgJHRvdGFsLCAkbWluLCAkbWF4LCAkbWVhbiwgJG1lZGlhbiwgJHN0ZF9kZXYpOworfQorCitteSBAc2l6ZXM7CitteSBAcGF0aF9zaXplczsKK215IEBhbGxfc2l6ZXM7CitteSBAYWxsX3BhdGhfc2l6ZXM7CitteSAlcGF0aF9zaXplczsKKworc3ViIGRpZyB7CisgICAgbXkgKCRzaGExLCAkZGVwdGgsICRwYXRoX3NpemUpID0gQF87CisgICAgJHBhdGhfc2l6ZSArPSAkc2l6ZXN7JHNoYTF9OworICAgIHB1c2goQHNpemVzLCAkc2l6ZXN7JHNoYTF9KTsKKyAgICBwdXNoKEBhbGxfc2l6ZXMsICRzaXplc3skc2hhMX0pOworICAgIHB1c2goQHBhdGhfc2l6ZXMsICRwYXRoX3NpemUpOworICAgIHB1c2goQGFsbF9wYXRoX3NpemVzLCAkcGF0aF9zaXplKTsKKyAgICAkcGF0aF9zaXplc3skc2hhMX0gPSAkcGF0aF9zaXplOworICAgIGlmICgkdHJlZSkgeworICAgICAgICBwcmludGYoIiUzZCVzICU2cyAlcyAlOGQgJThkICVzXG4iLAorICAgICAgICAgICAgICAgJGRlcHRoLCAoIiAiIHggJGRlcHRoKSwgJHR5cGVzeyRzaGExfSwKKyAgICAgICAgICAgICAgICRzaGExLCAkc2l6ZXN7JHNoYTF9LCAkcGF0aF9zaXplLCAkcGF0aHN7JHNoYTF9KTsKKyAgICB9CisgICAgZm9yIG15ICRjaGlsZCAoQHskY2hpbGRyZW57JHNoYTF9fSkgeworICAgICAgICBkaWcoJGNoaWxkLCAkZGVwdGggKyAxLCAkcGF0aF9zaXplKTsKKyAgICB9Cit9CisKK215IEB0cmVlX3NpemVzOworbXkgQHRyZWVfcGF0aF9zaXplczsKKworZm9yIG15ICRyb290IChAcm9vdHMpIHsKKyAgICB1bmRlZiBAc2l6ZXM7CisgICAgdW5kZWYgQHBhdGhfc2l6ZXM7CisgICAgZGlnKCRyb290LCAwLCAwKTsKKyAgICBteSAoJGFhLCAkc3pfdG90YWwpID0gc3RhdHMoQHNpemVzKTsKKyAgICBteSAoJGJiLCAkcHN6X3RvdGFsKSA9IHN0YXRzKEBwYXRoX3NpemVzKTsKKyAgICBwdXNoKEB0cmVlX3NpemVzLCAkc3pfdG90YWwpOworICAgIHB1c2goQHRyZWVfcGF0aF9zaXplcywgJHBzel90b3RhbCk7CisgICAgaWYgKCR0cmVlKSB7CisgICAgICAgIGlmIChAc2l6ZXMgPiAxKSB7CisgICAgICAgICAgICBwcmludF9zdGF0cygiICAgICBzaXplIiwgQHNpemVzKTsKKyAgICAgICAgICAgIHByaW50X3N0YXRzKCJwYXRoIHNpemUiLCBAcGF0aF9zaXplcyk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIlxuIjsKKyAgICB9Cit9CisKK2lmICgkZHVtcCkgeworICAgIGZvciBteSAkc2hhMSAoc29ydCBrZXlzICVzaXplcykgeworICAgICAgICBwcmludCAiJHNoYTEgJHNpemVzeyRzaGExfSAkcGF0aF9zaXplc3skc2hhMX0gJGRlcHRoc3skc2hhMX0gJHBhdGhzeyRzaGExfVxuIjsKKyAgICB9Cit9IGVsc2UgeworICAgIHByaW50X3N0YXRzKCIgICAgICBhbGwgc2l6ZXMiLCBAYWxsX3NpemVzKTsKKyAgICBwcmludF9zdGF0cygiIGFsbCBwYXRoIHNpemVzIiwgQGFsbF9wYXRoX3NpemVzKTsKKyAgICBwcmludF9zdGF0cygiICAgICB0cmVlIHNpemVzIiwgQHRyZWVfc2l6ZXMpOworICAgIHByaW50X3N0YXRzKCJ0cmVlIHBhdGggc2l6ZXMiLCBAdHJlZV9wYXRoX3NpemVzKTsKKyAgICBwcmludF9zdGF0cygiICAgICAgICAgZGVwdGhzIiwgQGRlcHRocyk7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3N1YnRyZWUvLmdpdGlnbm9yZSBiL2NvbnRyaWIvc3VidHJlZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOTM4MWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDcgQEAKKyp+CitnaXQtc3VidHJlZQorZ2l0LXN1YnRyZWUuMQorZ2l0LXN1YnRyZWUuaHRtbAorZ2l0LXN1YnRyZWUueG1sCittYWlubGluZQorc3VicHJvagpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL0NPUFlJTkcgYi9jb250cmliL3N1YnRyZWUvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTExOTA1Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL0NPUFlJTkcKQEAgLTAsMCArMSwzMzkgQEAKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL0lOU1RBTEwgYi9jb250cmliL3N1YnRyZWUvSU5TVEFMTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWIwY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL0lOU1RBTEwKQEAgLTAsMCArMSwyOCBAQAorSE9XIFRPIElOU1RBTEwgZ2l0LXN1YnRyZWUKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZpcnN0LCBidWlsZCBmcm9tIHRoZSB0b3Agc291cmNlIGRpcmVjdG9yeS4KKworVGhlbiwgaW4gY29udHJpYi9zdWJ0cmVlLCBydW46CisKKyAgbWFrZQorICBtYWtlIGluc3RhbGwKKyAgbWFrZSBpbnN0YWxsLWRvYworCitJZiB5b3UgdXNlZCBjb25maWd1cmUgdG8gZG8gdGhlIG1haW4gYnVpbGQgdGhlIGdpdC1zdWJ0cmVlIGJ1aWxkIHdpbGwKK3BpY2sgdXAgdGhvc2Ugc2V0dGluZ3MuICBJZiBub3QsIHlvdSB3aWxsIGxpa2VseSBoYXZlIHRvIHByb3ZpZGUgYQordmFsdWUgZm9yIHByZWZpeDoKKworICBtYWtlIHByZWZpeD08c29tZSBkaXI+CisgIG1ha2UgcHJlZml4PTxzb21lIGRpcj4gaW5zdGFsbAorICBtYWtlIHByZWZpeD08c29tZSBkaXI+IGluc3RhbGwtZG9jCisKK1RvIHJ1biB0ZXN0cyBmaXJzdCBjb3B5IGdpdC1zdWJ0cmVlIHRvIHRoZSBtYWluIGJ1aWxkIGFyZWEgc28gdGhlCituZXdseS1idWlsdCBnaXQgY2FuIGZpbmQgaXQ6CisKKyAgY3AgZ2l0LXN1YnRyZWUgLi4vLi4KKworVGhlbjoKKworICBtYWtlIHRlc3QKKwpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL01ha2VmaWxlIGIvY29udHJpYi9zdWJ0cmVlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNzFiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL3N1YnRyZWUvTWFrZWZpbGUKQEAgLTAsMCArMSw4MSBAQAorIyBUaGUgZGVmYXVsdCB0YXJnZXQgb2YgdGhpcyBNYWtlZmlsZSBpcy4uLgorYWxsOjoKKworLWluY2x1ZGUgLi4vLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi8uLi9jb25maWcubWFrCisKK3ByZWZpeCA/PSAvdXNyL2xvY2FsCitnaXRleGVjZGlyID89ICQocHJlZml4KS9saWJleGVjL2dpdC1jb3JlCittYW5kaXIgPz0gJChwcmVmaXgpL3NoYXJlL21hbgorbWFuMWRpciA/PSAkKG1hbmRpcikvbWFuMQoraHRtbGRpciA/PSAkKHByZWZpeCkvc2hhcmUvZG9jL2dpdC1kb2MKKworLi4vLi4vR0lULVZFUlNJT04tRklMRTogRk9SQ0UKKwkkKE1BS0UpIC1DIC4uLy4uLyBHSVQtVkVSU0lPTi1GSUxFCisKKy1pbmNsdWRlIC4uLy4uL0dJVC1WRVJTSU9OLUZJTEUKKworIyB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYSAnc3RhbmRhcmQnIGJzZC10eXBlIGluc3RhbGwgcHJvZ3JhbQorSU5TVEFMTCAgPz0gaW5zdGFsbAorUk0gICAgICAgPz0gcm0gLWYKKworQVNDSUlET0MgPSBhc2NpaWRvYworWE1MVE8gICAgPSB4bWx0bworCitpZm5kZWYgU0hFTExfUEFUSAorCVNIRUxMX1BBVEggPSAvYmluL3NoCitlbmRpZgorU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpCisKK0FTQ0lJRE9DX0NPTkYgPSAuLi8uLi9Eb2N1bWVudGF0aW9uL2FzY2lpZG9jLmNvbmYKK01BTlBBR0VfWFNMICAgPSAuLi8uLi9Eb2N1bWVudGF0aW9uL21hbnBhZ2Utbm9ybWFsLnhzbAorCitHSVRfU1VCVFJFRV9TSCA6PSBnaXQtc3VidHJlZS5zaAorR0lUX1NVQlRSRUUgICAgOj0gZ2l0LXN1YnRyZWUKKworR0lUX1NVQlRSRUVfRE9DIDo9IGdpdC1zdWJ0cmVlLjEKK0dJVF9TVUJUUkVFX1hNTCA6PSBnaXQtc3VidHJlZS54bWwKK0dJVF9TVUJUUkVFX1RYVCA6PSBnaXQtc3VidHJlZS50eHQKK0dJVF9TVUJUUkVFX0hUTUwgOj0gZ2l0LXN1YnRyZWUuaHRtbAorCithbGw6OiAkKEdJVF9TVUJUUkVFKQorCiskKEdJVF9TVUJUUkVFKTogJChHSVRfU1VCVFJFRV9TSCkKKwlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgJDwgPiRACisJY2htb2QgK3ggJEAKKworZG9jOiAkKEdJVF9TVUJUUkVFX0RPQykgJChHSVRfU1VCVFJFRV9IVE1MKQorCitpbnN0YWxsOiAkKEdJVF9TVUJUUkVFKQorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKGdpdGV4ZWNkaXIpCisJJChJTlNUQUxMKSAtbSA3NTUgJChHSVRfU1VCVFJFRSkgJChERVNURElSKSQoZ2l0ZXhlY2RpcikKKworaW5zdGFsbC1kb2M6IGluc3RhbGwtbWFuIGluc3RhbGwtaHRtbAorCitpbnN0YWxsLW1hbjogJChHSVRfU1VCVFJFRV9ET0MpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQobWFuMWRpcikKKwkkKElOU1RBTEwpIC1tIDY0NCAkXiAkKERFU1RESVIpJChtYW4xZGlyKQorCitpbnN0YWxsLWh0bWw6ICQoR0lUX1NVQlRSRUVfSFRNTCkKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAkKERFU1RESVIpJChodG1sZGlyKQorCSQoSU5TVEFMTCkgLW0gNjQ0ICReICQoREVTVERJUikkKGh0bWxkaXIpCisKKyQoR0lUX1NVQlRSRUVfRE9DKTogJChHSVRfU1VCVFJFRV9YTUwpCisJJChYTUxUTykgLW0gJChNQU5QQUdFX1hTTCkgbWFuICReCisKKyQoR0lUX1NVQlRSRUVfWE1MKTogJChHSVRfU1VCVFJFRV9UWFQpCisJJChBU0NJSURPQykgLWIgZG9jYm9vayAtZCBtYW5wYWdlIC1mICQoQVNDSUlET0NfQ09ORikgXAorCQktYWdpdF92ZXJzaW9uPSQoR0lUX1ZFUlNJT04pICReCisKKyQoR0lUX1NVQlRSRUVfSFRNTCk6ICQoR0lUX1NVQlRSRUVfVFhUKQorCSQoQVNDSUlET0MpIC1iIHhodG1sMTEgLWQgbWFucGFnZSAtZiAkKEFTQ0lJRE9DX0NPTkYpIFwKKwkJLWFnaXRfdmVyc2lvbj0kKEdJVF9WRVJTSU9OKSAkXgorCit0ZXN0OgorCSQoTUFLRSkgLUMgdC8gdGVzdAorCitjbGVhbjoKKwkkKFJNKSAkKEdJVF9TVUJUUkVFKQorCSQoUk0pICoueG1sICouaHRtbCAqLjEKKworLlBIT05ZOiBGT1JDRQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL1JFQURNRSBiL2NvbnRyaWIvc3VidHJlZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY4NmI0YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3VidHJlZS9SRUFETUUKQEAgLTAsMCArMSw4IEBACisKK1BsZWFzZSByZWFkIGdpdC1zdWJ0cmVlLnR4dCBmb3IgZG9jdW1lbnRhdGlvbi4KKworUGxlYXNlIGRvbid0IGNvbnRhY3QgbWUgdXNpbmcgZ2l0aHViIG1haWw7IGl0J3Mgc2xvdywgdWdseSwgYW5kIHdvcnN0IG9mCithbGwsIHJlZHVuZGFudC4gRW1haWwgbWUgaW5zdGVhZCBhdCBhcGVud2FyckBnbWFpbC5jb20gYW5kIEknbGwgYmUgaGFwcHkgdG8KK2hlbHAuCisKK0F2ZXJ5CmRpZmYgLS1naXQgYS9jb250cmliL3N1YnRyZWUvZ2l0LXN1YnRyZWUuc2ggYi9jb250cmliL3N1YnRyZWUvZ2l0LXN1YnRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzA4Yjc3NwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3VidHJlZS9naXQtc3VidHJlZS5zaApAQCAtMCwwICsxLDc0NCBAQAorIyEvYmluL3NoCisjCisjIGdpdC1zdWJ0cmVlLnNoOiBzcGxpdC9qb2luIGdpdCByZXBvc2l0b3JpZXMgaW4gc3ViZGlyZWN0b3JpZXMgb2YgdGhpcyBvbmUKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEF2ZXJ5IFBlbm5hcnVuIDxhcGVud2FyckBnbWFpbC5jb20+CisjCitpZiBbICQjIC1lcSAwIF07IHRoZW4KKyAgICBzZXQgLS0gLWgKK2ZpCitPUFRTX1NQRUM9IlwKK2dpdCBzdWJ0cmVlIGFkZCAgIC0tcHJlZml4PTxwcmVmaXg+IDxjb21taXQ+CitnaXQgc3VidHJlZSBhZGQgICAtLXByZWZpeD08cHJlZml4PiA8cmVwb3NpdG9yeT4gPHJlZj4KK2dpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PTxwcmVmaXg+IDxjb21taXQ+CitnaXQgc3VidHJlZSBwdWxsICAtLXByZWZpeD08cHJlZml4PiA8cmVwb3NpdG9yeT4gPHJlZj4KK2dpdCBzdWJ0cmVlIHB1c2ggIC0tcHJlZml4PTxwcmVmaXg+IDxyZXBvc2l0b3J5PiA8cmVmPgorZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9PHByZWZpeD4gPGNvbW1pdC4uLj4KKy0tCitoLGhlbHAgICAgICAgIHNob3cgdGhlIGhlbHAKK3EgICAgICAgICAgICAgcXVpZXQKK2QgICAgICAgICAgICAgc2hvdyBkZWJ1ZyBtZXNzYWdlcworUCxwcmVmaXg9ICAgICB0aGUgbmFtZSBvZiB0aGUgc3ViZGlyIHRvIHNwbGl0IG91dAorbSxtZXNzYWdlPSAgICB1c2UgdGhlIGdpdmVuIG1lc3NhZ2UgYXMgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB0aGUgbWVyZ2UgY29tbWl0Cisgb3B0aW9ucyBmb3IgJ3NwbGl0JworYW5ub3RhdGU9ICAgICBhZGQgYSBwcmVmaXggdG8gY29tbWl0IG1lc3NhZ2Ugb2YgbmV3IGNvbW1pdHMKK2IsYnJhbmNoPSAgICAgY3JlYXRlIGEgbmV3IGJyYW5jaCBmcm9tIHRoZSBzcGxpdCBzdWJ0cmVlCitpZ25vcmUtam9pbnMgIGlnbm9yZSBwcmlvciAtLXJlam9pbiBjb21taXRzCitvbnRvPSAgICAgICAgIHRyeSBjb25uZWN0aW5nIG5ldyB0cmVlIHRvIGFuIGV4aXN0aW5nIG9uZQorcmVqb2luICAgICAgICBtZXJnZSB0aGUgbmV3IGJyYW5jaCBiYWNrIGludG8gSEVBRAorIG9wdGlvbnMgZm9yICdhZGQnLCAnbWVyZ2UnLCBhbmQgJ3B1bGwnCitzcXVhc2ggICAgICAgIG1lcmdlIHN1YnRyZWUgY2hhbmdlcyBhcyBhIHNpbmdsZSBjb21taXQKKyIKK2V2YWwgIiQoZWNobyAiJE9QVFNfU1BFQyIgfCBnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gIiRAIiB8fCBlY2hvIGV4aXQgJD8pIgorCitQQVRIPSRQQVRIOiQoZ2l0IC0tZXhlYy1wYXRoKQorLiBnaXQtc2gtc2V0dXAKKworcmVxdWlyZV93b3JrX3RyZWUKKworcXVpZXQ9CiticmFuY2g9CitkZWJ1Zz0KK2NvbW1hbmQ9CitvbnRvPQorcmVqb2luPQoraWdub3JlX2pvaW5zPQorYW5ub3RhdGU9CitzcXVhc2g9CittZXNzYWdlPQorcHJlZml4PQorCitkZWJ1ZygpCit7CisJaWYgWyAtbiAiJGRlYnVnIiBdOyB0aGVuCisJCXByaW50ZiAiJXNcbiIgIiQqIiA+JjIKKwlmaQorfQorCitzYXkoKQoreworCWlmIFsgLXogIiRxdWlldCIgXTsgdGhlbgorCQlwcmludGYgIiVzXG4iICIkKiIgPiYyCisJZmkKK30KKworcHJvZ3Jlc3MoKQoreworCWlmIFsgLXogIiRxdWlldCIgXTsgdGhlbgorCQlwcmludGYgIiVzXHIiICIkKiIgPiYyCisJZmkKK30KKworYXNzZXJ0KCkKK3sKKwlpZiAiJEAiOyB0aGVuCisJCToKKwllbHNlCisJCWRpZSAiYXNzZXJ0aW9uIGZhaWxlZDogIiAiJEAiCisJZmkKK30KKworCisjZWNobyAiT3B0aW9uczogJCoiCisKK3doaWxlIFsgJCMgLWd0IDAgXTsgZG8KKwlvcHQ9IiQxIgorCXNoaWZ0CisJY2FzZSAiJG9wdCIgaW4KKwkJLXEpIHF1aWV0PTEgOzsKKwkJLWQpIGRlYnVnPTEgOzsKKwkJLS1hbm5vdGF0ZSkgYW5ub3RhdGU9IiQxIjsgc2hpZnQgOzsKKwkJLS1uby1hbm5vdGF0ZSkgYW5ub3RhdGU9IDs7CisJCS1iKSBicmFuY2g9IiQxIjsgc2hpZnQgOzsKKwkJLVApIHByZWZpeD0iJDEiOyBzaGlmdCA7OworCQktbSkgbWVzc2FnZT0iJDEiOyBzaGlmdCA7OworCQktLW5vLXByZWZpeCkgcHJlZml4PSA7OworCQktLW9udG8pIG9udG89IiQxIjsgc2hpZnQgOzsKKwkJLS1uby1vbnRvKSBvbnRvPSA7OworCQktLXJlam9pbikgcmVqb2luPTEgOzsKKwkJLS1uby1yZWpvaW4pIHJlam9pbj0gOzsKKwkJLS1pZ25vcmUtam9pbnMpIGlnbm9yZV9qb2lucz0xIDs7CisJCS0tbm8taWdub3JlLWpvaW5zKSBpZ25vcmVfam9pbnM9IDs7CisJCS0tc3F1YXNoKSBzcXVhc2g9MSA7OworCQktLW5vLXNxdWFzaCkgc3F1YXNoPSA7OworCQktLSkgYnJlYWsgOzsKKwkJKikgZGllICJVbmV4cGVjdGVkIG9wdGlvbjogJG9wdCIgOzsKKwllc2FjCitkb25lCisKK2NvbW1hbmQ9IiQxIgorc2hpZnQKK2Nhc2UgIiRjb21tYW5kIiBpbgorCWFkZHxtZXJnZXxwdWxsKSBkZWZhdWx0PSA7OworCXNwbGl0fHB1c2gpIGRlZmF1bHQ9Ii0tZGVmYXVsdCBIRUFEIiA7OworCSopIGRpZSAiVW5rbm93biBjb21tYW5kICckY29tbWFuZCciIDs7Citlc2FjCisKK2lmIFsgLXogIiRwcmVmaXgiIF07IHRoZW4KKwlkaWUgIllvdSBtdXN0IHByb3ZpZGUgdGhlIC0tcHJlZml4IG9wdGlvbi4iCitmaQorCitjYXNlICIkY29tbWFuZCIgaW4KKwlhZGQpIFsgLWUgIiRwcmVmaXgiIF0gJiYgCisJCWRpZSAicHJlZml4ICckcHJlZml4JyBhbHJlYWR5IGV4aXN0cy4iIDs7CisJKikgICBbIC1lICIkcHJlZml4IiBdIHx8IAorCQlkaWUgIickcHJlZml4JyBkb2VzIG5vdCBleGlzdDsgdXNlICdnaXQgc3VidHJlZSBhZGQnIiA7OworZXNhYworCitkaXI9IiQoZGlybmFtZSAiJHByZWZpeC8uIikiCisKK2lmIFsgIiRjb21tYW5kIiAhPSAicHVsbCIgLWEgIiRjb21tYW5kIiAhPSAiYWRkIiAtYSAiJGNvbW1hbmQiICE9ICJwdXNoIiBdOyB0aGVuCisJcmV2cz0kKGdpdCByZXYtcGFyc2UgJGRlZmF1bHQgLS1yZXZzLW9ubHkgIiRAIikgfHwgZXhpdCAkPworCWRpcnM9IiQoZ2l0IHJldi1wYXJzZSAtLW5vLXJldnMgLS1uby1mbGFncyAiJEAiKSIgfHwgZXhpdCAkPworCWlmIFsgLW4gIiRkaXJzIiBdOyB0aGVuCisJCWRpZSAiRXJyb3I6IFVzZSAtLXByZWZpeCBpbnN0ZWFkIG9mIGJhcmUgZmlsZW5hbWVzLiIKKwlmaQorZmkKKworZGVidWcgImNvbW1hbmQ6IHskY29tbWFuZH0iCitkZWJ1ZyAicXVpZXQ6IHskcXVpZXR9IgorZGVidWcgInJldnM6IHskcmV2c30iCitkZWJ1ZyAiZGlyOiB7JGRpcn0iCitkZWJ1ZyAib3B0czogeyQqfSIKK2RlYnVnCisKK2NhY2hlX3NldHVwKCkKK3sKKwljYWNoZWRpcj0iJEdJVF9ESVIvc3VidHJlZS1jYWNoZS8kJCIKKwlybSAtcmYgIiRjYWNoZWRpciIgfHwgZGllICJDYW4ndCBkZWxldGUgb2xkIGNhY2hlZGlyOiAkY2FjaGVkaXIiCisJbWtkaXIgLXAgIiRjYWNoZWRpciIgfHwgZGllICJDYW4ndCBjcmVhdGUgbmV3IGNhY2hlZGlyOiAkY2FjaGVkaXIiCisJbWtkaXIgLXAgIiRjYWNoZWRpci9ub3RyZWUiIHx8IGRpZSAiQ2FuJ3QgY3JlYXRlIG5ldyBjYWNoZWRpcjogJGNhY2hlZGlyL25vdHJlZSIKKwlkZWJ1ZyAiVXNpbmcgY2FjaGVkaXI6ICRjYWNoZWRpciIgPiYyCit9CisKK2NhY2hlX2dldCgpCit7CisJZm9yIG9sZHJldiBpbiAkKjsgZG8KKwkJaWYgWyAtciAiJGNhY2hlZGlyLyRvbGRyZXYiIF07IHRoZW4KKwkJCXJlYWQgbmV3cmV2IDwiJGNhY2hlZGlyLyRvbGRyZXYiCisJCQllY2hvICRuZXdyZXYKKwkJZmkKKwlkb25lCit9CisKK2NhY2hlX21pc3MoKQoreworCWZvciBvbGRyZXYgaW4gJCo7IGRvCisJCWlmIFsgISAtciAiJGNhY2hlZGlyLyRvbGRyZXYiIF07IHRoZW4KKwkJCWVjaG8gJG9sZHJldgorCQlmaQorCWRvbmUKK30KKworY2hlY2tfcGFyZW50cygpCit7CisJbWlzc2VkPSQoY2FjaGVfbWlzcyAkKikKKwlmb3IgbWlzcyBpbiAkbWlzc2VkOyBkbworCQlpZiBbICEgLXIgIiRjYWNoZWRpci9ub3RyZWUvJG1pc3MiIF07IHRoZW4KKwkJCWRlYnVnICIgIGluY29ycmVjdCBvcmRlcjogJG1pc3MiCisJCWZpCisJZG9uZQorfQorCitzZXRfbm90cmVlKCkKK3sKKwllY2hvICIxIiA+ICIkY2FjaGVkaXIvbm90cmVlLyQxIgorfQorCitjYWNoZV9zZXQoKQoreworCW9sZHJldj0iJDEiCisJbmV3cmV2PSIkMiIKKwlpZiBbICIkb2xkcmV2IiAhPSAibGF0ZXN0X29sZCIgXAorCSAgICAgLWEgIiRvbGRyZXYiICE9ICJsYXRlc3RfbmV3IiBcCisJICAgICAtYSAtZSAiJGNhY2hlZGlyLyRvbGRyZXYiIF07IHRoZW4KKwkJZGllICJjYWNoZSBmb3IgJG9sZHJldiBhbHJlYWR5IGV4aXN0cyEiCisJZmkKKwllY2hvICIkbmV3cmV2IiA+IiRjYWNoZWRpci8kb2xkcmV2IgorfQorCityZXZfZXhpc3RzKCkKK3sKKwlpZiBnaXQgcmV2LXBhcnNlICIkMSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCXJldHVybiAwCisJZWxzZQorCQlyZXR1cm4gMQorCWZpCit9CisKK3Jldl9pc19kZXNjZW5kYW50X29mX2JyYW5jaCgpCit7CisJbmV3cmV2PSIkMSIKKwlicmFuY2g9IiQyIgorCWJyYW5jaF9oYXNoPSQoZ2l0IHJldi1wYXJzZSAkYnJhbmNoKQorCW1hdGNoPSQoZ2l0IHJldi1saXN0IC0xICRicmFuY2hfaGFzaCBeJG5ld3JldikKKworCWlmIFsgLXogIiRtYXRjaCIgXTsgdGhlbgorCQlyZXR1cm4gMAorCWVsc2UKKwkJcmV0dXJuIDEKKwlmaQorfQorCisjIGlmIGEgY29tbWl0IGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCwgdGhpcyBtaWdodCBub3Qgd29yay4gIEJ1dCB3ZSBvbmx5IHdhbnQKKyMgdG8gcmVtb3ZlIHRoZSBwYXJlbnQgZnJvbSB0aGUgcmV2LWxpc3QsIGFuZCBzaW5jZSBpdCBkb2Vzbid0IGV4aXN0LCBpdCB3b24ndAorIyBiZSB0aGVyZSBhbnl3YXksIHNvIGRvIG5vdGhpbmcgaW4gdGhhdCBjYXNlLgordHJ5X3JlbW92ZV9wcmV2aW91cygpCit7CisJaWYgcmV2X2V4aXN0cyAiJDFeIjsgdGhlbgorCQllY2hvICJeJDFeIgorCWZpCit9CisKK2ZpbmRfbGF0ZXN0X3NxdWFzaCgpCit7CisJZGVidWcgIkxvb2tpbmcgZm9yIGxhdGVzdCBzcXVhc2ggKCRkaXIpLi4uIgorCWRpcj0iJDEiCisJc3E9CisJbWFpbj0KKwlzdWI9CisJZ2l0IGxvZyAtLWdyZXA9Il5naXQtc3VidHJlZS1kaXI6ICRkaXIvKlwkIiBcCisJCS0tcHJldHR5PWZvcm1hdDonU1RBUlQgJUglbiVzJW4lbiViJW5FTkQlbicgSEVBRCB8CisJd2hpbGUgcmVhZCBhIGIganVuazsgZG8KKwkJZGVidWcgIiRhICRiICRqdW5rIgorCQlkZWJ1ZyAie3skc3EvJG1haW4vJHN1Yn19IgorCQljYXNlICIkYSIgaW4KKwkJCVNUQVJUKSBzcT0iJGIiIDs7CisJCQlnaXQtc3VidHJlZS1tYWlubGluZTopIG1haW49IiRiIiA7OworCQkJZ2l0LXN1YnRyZWUtc3BsaXQ6KSBzdWI9IiRiIiA7OworCQkJRU5EKQorCQkJCWlmIFsgLW4gIiRzdWIiIF07IHRoZW4KKwkJCQkJaWYgWyAtbiAiJG1haW4iIF07IHRoZW4KKwkJCQkJCSMgYSByZWpvaW4gY29tbWl0PworCQkJCQkJIyBQcmV0ZW5kIGl0cyBzdWIgd2FzIGEgc3F1YXNoLgorCQkJCQkJc3E9IiRzdWIiCisJCQkJCWZpCisJCQkJCWRlYnVnICJTcXVhc2ggZm91bmQ6ICRzcSAkc3ViIgorCQkJCQllY2hvICIkc3EiICIkc3ViIgorCQkJCQlicmVhaworCQkJCWZpCisJCQkJc3E9CisJCQkJbWFpbj0KKwkJCQlzdWI9CisJCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworZmluZF9leGlzdGluZ19zcGxpdHMoKQoreworCWRlYnVnICJMb29raW5nIGZvciBwcmlvciBzcGxpdHMuLi4iCisJZGlyPSIkMSIKKwlyZXZzPSIkMiIKKwltYWluPQorCXN1Yj0KKwlnaXQgbG9nIC0tZ3JlcD0iXmdpdC1zdWJ0cmVlLWRpcjogJGRpci8qXCQiIFwKKwkJLS1wcmV0dHk9Zm9ybWF0OidTVEFSVCAlSCVuJXMlbiVuJWIlbkVORCVuJyAkcmV2cyB8CisJd2hpbGUgcmVhZCBhIGIganVuazsgZG8KKwkJY2FzZSAiJGEiIGluCisJCQlTVEFSVCkgc3E9IiRiIiA7OworCQkJZ2l0LXN1YnRyZWUtbWFpbmxpbmU6KSBtYWluPSIkYiIgOzsKKwkJCWdpdC1zdWJ0cmVlLXNwbGl0Oikgc3ViPSIkYiIgOzsKKwkJCUVORCkKKwkJCQlkZWJ1ZyAiICBNYWluIGlzOiAnJG1haW4nIgorCQkJCWlmIFsgLXogIiRtYWluIiAtYSAtbiAiJHN1YiIgXTsgdGhlbgorCQkJCQkjIHNxdWFzaCBjb21taXRzIHJlZmVyIHRvIGEgc3VidHJlZQorCQkJCQlkZWJ1ZyAiICBTcXVhc2g6ICRzcSBmcm9tICRzdWIiCisJCQkJCWNhY2hlX3NldCAiJHNxIiAiJHN1YiIKKwkJCQlmaQorCQkJCWlmIFsgLW4gIiRtYWluIiAtYSAtbiAiJHN1YiIgXTsgdGhlbgorCQkJCQlkZWJ1ZyAiICBQcmlvcjogJG1haW4gLT4gJHN1YiIKKwkJCQkJY2FjaGVfc2V0ICRtYWluICRzdWIKKwkJCQkJY2FjaGVfc2V0ICRzdWIgJHN1YgorCQkJCQl0cnlfcmVtb3ZlX3ByZXZpb3VzICIkbWFpbiIKKwkJCQkJdHJ5X3JlbW92ZV9wcmV2aW91cyAiJHN1YiIKKwkJCQlmaQorCQkJCW1haW49CisJCQkJc3ViPQorCQkJCTs7CisJCWVzYWMKKwlkb25lCit9CisKK2NvcHlfY29tbWl0KCkKK3sKKwkjIFdlJ3JlIGdvaW5nIHRvIHNldCBzb21lIGVudmlyb25tZW50IHZhcnMgaGVyZSwgc28KKwkjIGRvIGl0IGluIGEgc3Vic2hlbGwgdG8gZ2V0IHJpZCBvZiB0aGVtIHNhZmVseSBsYXRlcgorCWRlYnVnIGNvcHlfY29tbWl0ICJ7JDF9IiAieyQyfSIgInskM30iCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JyVhbiVuJWFlJW4lYUQlbiVjbiVuJWNlJW4lY0QlbiVCJyAiJDEiIHwKKwkoCisJCXJlYWQgR0lUX0FVVEhPUl9OQU1FCisJCXJlYWQgR0lUX0FVVEhPUl9FTUFJTAorCQlyZWFkIEdJVF9BVVRIT1JfREFURQorCQlyZWFkIEdJVF9DT01NSVRURVJfTkFNRQorCQlyZWFkIEdJVF9DT01NSVRURVJfRU1BSUwKKwkJcmVhZCBHSVRfQ09NTUlUVEVSX0RBVEUKKwkJZXhwb3J0ICBHSVRfQVVUSE9SX05BTUUgXAorCQkJR0lUX0FVVEhPUl9FTUFJTCBcCisJCQlHSVRfQVVUSE9SX0RBVEUgXAorCQkJR0lUX0NPTU1JVFRFUl9OQU1FIFwKKwkJCUdJVF9DT01NSVRURVJfRU1BSUwgXAorCQkJR0lUX0NPTU1JVFRFUl9EQVRFCisJCShwcmludGYgIiVzIiAiJGFubm90YXRlIjsgY2F0ICkgfAorCQlnaXQgY29tbWl0LXRyZWUgIiQyIiAkMyAgIyByZWFkcyB0aGUgcmVzdCBvZiBzdGRpbgorCSkgfHwgZGllICJDYW4ndCBjb3B5IGNvbW1pdCAkMSIKK30KKworYWRkX21zZygpCit7CisJZGlyPSIkMSIKKwlsYXRlc3Rfb2xkPSIkMiIKKwlsYXRlc3RfbmV3PSIkMyIKKwlpZiBbIC1uICIkbWVzc2FnZSIgXTsgdGhlbgorCQljb21taXRfbWVzc2FnZT0iJG1lc3NhZ2UiCisJZWxzZQorCQljb21taXRfbWVzc2FnZT0iQWRkICckZGlyLycgZnJvbSBjb21taXQgJyRsYXRlc3RfbmV3JyIKKwlmaQorCWNhdCA8PC1FT0YKKwkJJGNvbW1pdF9tZXNzYWdlCisJCQorCQlnaXQtc3VidHJlZS1kaXI6ICRkaXIKKwkJZ2l0LXN1YnRyZWUtbWFpbmxpbmU6ICRsYXRlc3Rfb2xkCisJCWdpdC1zdWJ0cmVlLXNwbGl0OiAkbGF0ZXN0X25ldworCUVPRgorfQorCithZGRfc3F1YXNoZWRfbXNnKCkKK3sKKwlpZiBbIC1uICIkbWVzc2FnZSIgXTsgdGhlbgorCQllY2hvICIkbWVzc2FnZSIKKwllbHNlCisJCWVjaG8gIk1lcmdlIGNvbW1pdCAnJDEnIGFzICckMiciCisJZmkKK30KKworcmVqb2luX21zZygpCit7CisJZGlyPSIkMSIKKwlsYXRlc3Rfb2xkPSIkMiIKKwlsYXRlc3RfbmV3PSIkMyIKKwlpZiBbIC1uICIkbWVzc2FnZSIgXTsgdGhlbgorCQljb21taXRfbWVzc2FnZT0iJG1lc3NhZ2UiCisJZWxzZQorCQljb21taXRfbWVzc2FnZT0iU3BsaXQgJyRkaXIvJyBpbnRvIGNvbW1pdCAnJGxhdGVzdF9uZXcnIgorCWZpCisJY2F0IDw8LUVPRgorCQkkY29tbWl0X21lc3NhZ2UKKwkJCisJCWdpdC1zdWJ0cmVlLWRpcjogJGRpcgorCQlnaXQtc3VidHJlZS1tYWlubGluZTogJGxhdGVzdF9vbGQKKwkJZ2l0LXN1YnRyZWUtc3BsaXQ6ICRsYXRlc3RfbmV3CisJRU9GCit9CisKK3NxdWFzaF9tc2coKQoreworCWRpcj0iJDEiCisJb2xkc3ViPSIkMiIKKwluZXdzdWI9IiQzIgorCW5ld3N1Yl9zaG9ydD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAiJG5ld3N1YiIpCisJCisJaWYgWyAtbiAiJG9sZHN1YiIgXTsgdGhlbgorCQlvbGRzdWJfc2hvcnQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgIiRvbGRzdWIiKQorCQllY2hvICJTcXVhc2hlZCAnJGRpci8nIGNoYW5nZXMgZnJvbSAkb2xkc3ViX3Nob3J0Li4kbmV3c3ViX3Nob3J0IgorCQllY2hvCisJCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDonJWggJXMnICIkb2xkc3ViLi4kbmV3c3ViIgorCQlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6J1JFVkVSVDogJWggJXMnICIkbmV3c3ViLi4kb2xkc3ViIgorCWVsc2UKKwkJZWNobyAiU3F1YXNoZWQgJyRkaXIvJyBjb250ZW50IGZyb20gY29tbWl0ICRuZXdzdWJfc2hvcnQiCisJZmkKKwkKKwllY2hvCisJZWNobyAiZ2l0LXN1YnRyZWUtZGlyOiAkZGlyIgorCWVjaG8gImdpdC1zdWJ0cmVlLXNwbGl0OiAkbmV3c3ViIgorfQorCit0b3B0cmVlX2Zvcl9jb21taXQoKQoreworCWNvbW1pdD0iJDEiCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JyVUJyAiJGNvbW1pdCIgLS0gfHwgZXhpdCAkPworfQorCitzdWJ0cmVlX2Zvcl9jb21taXQoKQoreworCWNvbW1pdD0iJDEiCisJZGlyPSIkMiIKKwlnaXQgbHMtdHJlZSAiJGNvbW1pdCIgLS0gIiRkaXIiIHwKKwl3aGlsZSByZWFkIG1vZGUgdHlwZSB0cmVlIG5hbWU7IGRvCisJCWFzc2VydCBbICIkbmFtZSIgPSAiJGRpciIgXQorCQlhc3NlcnQgWyAiJHR5cGUiID0gInRyZWUiIC1vICIkdHlwZSIgPSAiY29tbWl0IiBdCisJCVsgIiR0eXBlIiA9ICJjb21taXQiIF0gJiYgY29udGludWUgICMgaWdub3JlIHN1Ym1vZHVsZXMKKwkJZWNobyAkdHJlZQorCQlicmVhaworCWRvbmUKK30KKwordHJlZV9jaGFuZ2VkKCkKK3sKKwl0cmVlPSQxCisJc2hpZnQKKwlpZiBbICQjIC1uZSAxIF07IHRoZW4KKwkJcmV0dXJuIDAgICAjIHdlaXJkIHBhcmVudHMsIGNvbnNpZGVyIGl0IGNoYW5nZWQKKwllbHNlCisJCXB0cmVlPSQodG9wdHJlZV9mb3JfY29tbWl0ICQxKQorCQlpZiBbICIkcHRyZWUiICE9ICIkdHJlZSIgXTsgdGhlbgorCQkJcmV0dXJuIDAgICAjIGNoYW5nZWQKKwkJZWxzZQorCQkJcmV0dXJuIDEgICAjIG5vdCBjaGFuZ2VkCisJCWZpCisJZmkKK30KKworbmV3X3NxdWFzaF9jb21taXQoKQoreworCW9sZD0iJDEiCisJb2xkc3ViPSIkMiIKKwluZXdzdWI9IiQzIgorCXRyZWU9JCh0b3B0cmVlX2Zvcl9jb21taXQgJG5ld3N1YikgfHwgZXhpdCAkPworCWlmIFsgLW4gIiRvbGQiIF07IHRoZW4KKwkJc3F1YXNoX21zZyAiJGRpciIgIiRvbGRzdWIiICIkbmV3c3ViIiB8IAorCQkJZ2l0IGNvbW1pdC10cmVlICIkdHJlZSIgLXAgIiRvbGQiIHx8IGV4aXQgJD8KKwllbHNlCisJCXNxdWFzaF9tc2cgIiRkaXIiICIiICIkbmV3c3ViIiB8CisJCQlnaXQgY29tbWl0LXRyZWUgIiR0cmVlIiB8fCBleGl0ICQ/CisJZmkKK30KKworY29weV9vcl9za2lwKCkKK3sKKwlyZXY9IiQxIgorCXRyZWU9IiQyIgorCW5ld3BhcmVudHM9IiQzIgorCWFzc2VydCBbIC1uICIkdHJlZSIgXQorCisJaWRlbnRpY2FsPQorCW5vbmlkZW50aWNhbD0KKwlwPQorCWdvdHBhcmVudHM9CisJZm9yIHBhcmVudCBpbiAkbmV3cGFyZW50czsgZG8KKwkJcHRyZWU9JCh0b3B0cmVlX2Zvcl9jb21taXQgJHBhcmVudCkgfHwgZXhpdCAkPworCQlbIC16ICIkcHRyZWUiIF0gJiYgY29udGludWUKKwkJaWYgWyAiJHB0cmVlIiA9ICIkdHJlZSIgXTsgdGhlbgorCQkJIyBhbiBpZGVudGljYWwgcGFyZW50IGNvdWxkIGJlIHVzZWQgaW4gcGxhY2Ugb2YgdGhpcyByZXYuCisJCQlpZGVudGljYWw9IiRwYXJlbnQiCisJCWVsc2UKKwkJCW5vbmlkZW50aWNhbD0iJHBhcmVudCIKKwkJZmkKKwkJCisJCSMgc29tZXRpbWVzIGJvdGggb2xkIHBhcmVudHMgbWFwIHRvIHRoZSBzYW1lIG5ld3BhcmVudDsKKwkJIyBlbGltaW5hdGUgZHVwbGljYXRlcworCQlpc19uZXc9MQorCQlmb3IgZ3AgaW4gJGdvdHBhcmVudHM7IGRvCisJCQlpZiBbICIkZ3AiID0gIiRwYXJlbnQiIF07IHRoZW4KKwkJCQlpc19uZXc9CisJCQkJYnJlYWsKKwkJCWZpCisJCWRvbmUKKwkJaWYgWyAtbiAiJGlzX25ldyIgXTsgdGhlbgorCQkJZ290cGFyZW50cz0iJGdvdHBhcmVudHMgJHBhcmVudCIKKwkJCXA9IiRwIC1wICRwYXJlbnQiCisJCWZpCisJZG9uZQorCQorCWlmIFsgLW4gIiRpZGVudGljYWwiIF07IHRoZW4KKwkJZWNobyAkaWRlbnRpY2FsCisJZWxzZQorCQljb3B5X2NvbW1pdCAkcmV2ICR0cmVlICIkcCIgfHwgZXhpdCAkPworCWZpCit9CisKK2Vuc3VyZV9jbGVhbigpCit7CisJaWYgISBnaXQgZGlmZi1pbmRleCBIRUFEIC0tZXhpdC1jb2RlIC0tcXVpZXQgMj4mMTsgdGhlbgorCQlkaWUgIldvcmtpbmcgdHJlZSBoYXMgbW9kaWZpY2F0aW9ucy4gIENhbm5vdCBhZGQuIgorCWZpCisJaWYgISBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEIC0tZXhpdC1jb2RlIC0tcXVpZXQgMj4mMTsgdGhlbgorCQlkaWUgIkluZGV4IGhhcyBtb2RpZmljYXRpb25zLiAgQ2Fubm90IGFkZC4iCisJZmkKK30KKworZW5zdXJlX3ZhbGlkX3JlZl9mb3JtYXQoKQoreworCWdpdCBjaGVjay1yZWYtZm9ybWF0ICJyZWZzL2hlYWRzLyQxIiB8fAorCSAgICBkaWUgIickMScgZG9lcyBub3QgbG9vayBsaWtlIGEgcmVmIgorfQorCitjbWRfYWRkKCkKK3sKKwlpZiBbIC1lICIkZGlyIiBdOyB0aGVuCisJCWRpZSAiJyRkaXInIGFscmVhZHkgZXhpc3RzLiAgQ2Fubm90IGFkZC4iCisJZmkKKworCWVuc3VyZV9jbGVhbgorCQorCWlmIFsgJCMgLWVxIDEgXTsgdGhlbgorCSAgICBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICIkMV57Y29tbWl0fSIgPi9kZXYvbnVsbCB8fAorCSAgICBkaWUgIickMScgZG9lcyBub3QgcmVmZXIgdG8gYSBjb21taXQiCisKKwkgICAgImNtZF9hZGRfY29tbWl0IiAiJEAiCisJZWxpZiBbICQjIC1lcSAyIF07IHRoZW4KKwkgICAgIyBUZWNobmljYWxseSB3ZSBjb3VsZCBhY2NlcHQgYSByZWZzcGVjIGhlcmUgYnV0IHdlJ3JlCisJICAgICMganVzdCBnb2luZyB0byB0dXJuIGFyb3VuZCBhbmQgYWRkIEZFVENIX0hFQUQgdW5kZXIgdGhlCisJICAgICMgc3BlY2lmaWVkIGRpcmVjdG9yeS4gIEFsbG93aW5nIGEgcmVmc3BlYyBtaWdodCBiZQorCSAgICAjIG1pc2xlYWRpbmcgYmVjYXVzZSB3ZSB3b24ndCBkbyBhbnl0aGluZyB3aXRoIGFueSBvdGhlcgorCSAgICAjIGJyYW5jaGVzIGZldGNoZWQgdmlhIHRoZSByZWZzcGVjLgorCSAgICBlbnN1cmVfdmFsaWRfcmVmX2Zvcm1hdCAiJDIiCisKKwkgICAgImNtZF9hZGRfcmVwb3NpdG9yeSIgIiRAIgorCWVsc2UKKwkgICAgc2F5ICJlcnJvcjogcGFyYW1ldGVycyB3ZXJlICckQCciCisJICAgIGRpZSAiUHJvdmlkZSBlaXRoZXIgYSBjb21taXQgb3IgYSByZXBvc2l0b3J5IGFuZCBjb21taXQuIgorCWZpCit9CisKK2NtZF9hZGRfcmVwb3NpdG9yeSgpCit7CisJZWNobyAiZ2l0IGZldGNoIiAiJEAiCisJcmVwb3NpdG9yeT0kMQorCXJlZnNwZWM9JDIKKwlnaXQgZmV0Y2ggIiRAIiB8fCBleGl0ICQ/CisJcmV2cz1GRVRDSF9IRUFECisJc2V0IC0tICRyZXZzCisJY21kX2FkZF9jb21taXQgIiRAIgorfQorCitjbWRfYWRkX2NvbW1pdCgpCit7CisJcmV2cz0kKGdpdCByZXYtcGFyc2UgJGRlZmF1bHQgLS1yZXZzLW9ubHkgIiRAIikgfHwgZXhpdCAkPworCXNldCAtLSAkcmV2cworCXJldj0iJDEiCisJCisJZGVidWcgIkFkZGluZyAkZGlyIGFzICckcmV2Jy4uLiIKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PSIkZGlyIiAkcmV2IHx8IGV4aXQgJD8KKwlnaXQgY2hlY2tvdXQgLS0gIiRkaXIiIHx8IGV4aXQgJD8KKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpIHx8IGV4aXQgJD8KKwkKKwloZWFkcmV2PSQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8fCBleGl0ICQ/CisJaWYgWyAtbiAiJGhlYWRyZXYiIC1hICIkaGVhZHJldiIgIT0gIiRyZXYiIF07IHRoZW4KKwkJaGVhZHA9Ii1wICRoZWFkcmV2IgorCWVsc2UKKwkJaGVhZHA9CisJZmkKKwkKKwlpZiBbIC1uICIkc3F1YXNoIiBdOyB0aGVuCisJCXJldj0kKG5ld19zcXVhc2hfY29tbWl0ICIiICIiICIkcmV2IikgfHwgZXhpdCAkPworCQljb21taXQ9JChhZGRfc3F1YXNoZWRfbXNnICIkcmV2IiAiJGRpciIgfAorCQkJIGdpdCBjb21taXQtdHJlZSAkdHJlZSAkaGVhZHAgLXAgIiRyZXYiKSB8fCBleGl0ICQ/CisJZWxzZQorCQlyZXZwPSQocGVlbF9jb21taXR0aXNoICIkcmV2IikgJiYKKwkJY29tbWl0PSQoYWRkX21zZyAiJGRpciIgIiRoZWFkcmV2IiAiJHJldiIgfAorCQkJIGdpdCBjb21taXQtdHJlZSAkdHJlZSAkaGVhZHAgLXAgIiRyZXZwIikgfHwgZXhpdCAkPworCWZpCisJZ2l0IHJlc2V0ICIkY29tbWl0IiB8fCBleGl0ICQ/CisJCisJc2F5ICJBZGRlZCBkaXIgJyRkaXInIgorfQorCitjbWRfc3BsaXQoKQoreworCWRlYnVnICJTcGxpdHRpbmcgJGRpci4uLiIKKwljYWNoZV9zZXR1cCB8fCBleGl0ICQ/CisJCisJaWYgWyAtbiAiJG9udG8iIF07IHRoZW4KKwkJZGVidWcgIlJlYWRpbmcgaGlzdG9yeSBmb3IgLS1vbnRvPSRvbnRvLi4uIgorCQlnaXQgcmV2LWxpc3QgJG9udG8gfAorCQl3aGlsZSByZWFkIHJldjsgZG8KKwkJCSMgdGhlICdvbnRvJyBoaXN0b3J5IGlzIGFscmVhZHkganVzdCB0aGUgc3ViZGlyLCBzbworCQkJIyBhbnkgcGFyZW50IHdlIGZpbmQgdGhlcmUgY2FuIGJlIHVzZWQgdmVyYmF0aW0KKwkJCWRlYnVnICIgIGNhY2hlOiAkcmV2IgorCQkJY2FjaGVfc2V0ICRyZXYgJHJldgorCQlkb25lCisJZmkKKwkKKwlpZiBbIC1uICIkaWdub3JlX2pvaW5zIiBdOyB0aGVuCisJCXVucmV2cz0KKwllbHNlCisJCXVucmV2cz0iJChmaW5kX2V4aXN0aW5nX3NwbGl0cyAiJGRpciIgIiRyZXZzIikiCisJZmkKKwkKKwkjIFdlIGNhbid0IHJlc3RyaWN0IHJldi1saXN0IHRvIG9ubHkgJGRpciBoZXJlLCBiZWNhdXNlIHNvbWUgb2Ygb3VyCisJIyBwYXJlbnRzIGhhdmUgdGhlICRkaXIgY29udGVudHMgdGhlIHJvb3QsIGFuZCB0aG9zZSB3b24ndCBtYXRjaC4KKwkjIChhbmQgcmV2LWxpc3QgLS1mb2xsb3cgZG9lc24ndCBzZWVtIHRvIHNvbHZlIHRoaXMpCisJZ3JsPSdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIC0tcmV2ZXJzZSAtLXBhcmVudHMgJHJldnMgJHVucmV2cycKKwlyZXZtYXg9JChldmFsICIkZ3JsIiB8IHdjIC1sKQorCXJldmNvdW50PTAKKwljcmVhdGVjb3VudD0wCisJZXZhbCAiJGdybCIgfAorCXdoaWxlIHJlYWQgcmV2IHBhcmVudHM7IGRvCisJCXJldmNvdW50PSQoKCRyZXZjb3VudCArIDEpKQorCQlwcm9ncmVzcyAiJHJldmNvdW50LyRyZXZtYXggKCRjcmVhdGVjb3VudCkiCisJCWRlYnVnICJQcm9jZXNzaW5nIGNvbW1pdDogJHJldiIKKwkJZXhpc3RzPSQoY2FjaGVfZ2V0ICRyZXYpCisJCWlmIFsgLW4gIiRleGlzdHMiIF07IHRoZW4KKwkJCWRlYnVnICIgIHByaW9yOiAkZXhpc3RzIgorCQkJY29udGludWUKKwkJZmkKKwkJY3JlYXRlY291bnQ9JCgoJGNyZWF0ZWNvdW50ICsgMSkpCisJCWRlYnVnICIgIHBhcmVudHM6ICRwYXJlbnRzIgorCQluZXdwYXJlbnRzPSQoY2FjaGVfZ2V0ICRwYXJlbnRzKQorCQlkZWJ1ZyAiICBuZXdwYXJlbnRzOiAkbmV3cGFyZW50cyIKKwkJCisJCXRyZWU9JChzdWJ0cmVlX2Zvcl9jb21taXQgJHJldiAiJGRpciIpCisJCWRlYnVnICIgIHRyZWUgaXM6ICR0cmVlIgorCisJCWNoZWNrX3BhcmVudHMgJHBhcmVudHMKKwkJCisJCSMgdWdseS4gIGlzIHRoZXJlIG5vIGJldHRlciB3YXkgdG8gdGVsbCBpZiB0aGlzIGlzIGEgc3VidHJlZQorCQkjIHZzLiBhIG1haW5saW5lIGNvbW1pdD8gIERvZXMgaXQgbWF0dGVyPworCQlpZiBbIC16ICR0cmVlIF07IHRoZW4KKwkJCXNldF9ub3RyZWUgJHJldgorCQkJaWYgWyAtbiAiJG5ld3BhcmVudHMiIF07IHRoZW4KKwkJCQljYWNoZV9zZXQgJHJldiAkcmV2CisJCQlmaQorCQkJY29udGludWUKKwkJZmkKKworCQluZXdyZXY9JChjb3B5X29yX3NraXAgIiRyZXYiICIkdHJlZSIgIiRuZXdwYXJlbnRzIikgfHwgZXhpdCAkPworCQlkZWJ1ZyAiICBuZXdyZXYgaXM6ICRuZXdyZXYiCisJCWNhY2hlX3NldCAkcmV2ICRuZXdyZXYKKwkJY2FjaGVfc2V0IGxhdGVzdF9uZXcgJG5ld3JldgorCQljYWNoZV9zZXQgbGF0ZXN0X29sZCAkcmV2CisJZG9uZSB8fCBleGl0ICQ/CisJbGF0ZXN0X25ldz0kKGNhY2hlX2dldCBsYXRlc3RfbmV3KQorCWlmIFsgLXogIiRsYXRlc3RfbmV3IiBdOyB0aGVuCisJCWRpZSAiTm8gbmV3IHJldmlzaW9ucyB3ZXJlIGZvdW5kIgorCWZpCisJCisJaWYgWyAtbiAiJHJlam9pbiIgXTsgdGhlbgorCQlkZWJ1ZyAiTWVyZ2luZyBzcGxpdCBicmFuY2ggaW50byBIRUFELi4uIgorCQlsYXRlc3Rfb2xkPSQoY2FjaGVfZ2V0IGxhdGVzdF9vbGQpCisJCWdpdCBtZXJnZSAtcyBvdXJzIFwKKwkJCS1tICIkKHJlam9pbl9tc2cgIiRkaXIiICRsYXRlc3Rfb2xkICRsYXRlc3RfbmV3KSIgXAorCQkJJGxhdGVzdF9uZXcgPiYyIHx8IGV4aXQgJD8KKwlmaQorCWlmIFsgLW4gIiRicmFuY2giIF07IHRoZW4KKwkJaWYgcmV2X2V4aXN0cyAicmVmcy9oZWFkcy8kYnJhbmNoIjsgdGhlbgorCQkJaWYgISByZXZfaXNfZGVzY2VuZGFudF9vZl9icmFuY2ggJGxhdGVzdF9uZXcgJGJyYW5jaDsgdGhlbgorCQkJCWRpZSAiQnJhbmNoICckYnJhbmNoJyBpcyBub3QgYW4gYW5jZXN0b3Igb2YgY29tbWl0ICckbGF0ZXN0X25ldycuIgorCQkJZmkKKwkJCWFjdGlvbj0nVXBkYXRlZCcKKwkJZWxzZQorCQkJYWN0aW9uPSdDcmVhdGVkJworCQlmaQorCQlnaXQgdXBkYXRlLXJlZiAtbSAnc3VidHJlZSBzcGxpdCcgInJlZnMvaGVhZHMvJGJyYW5jaCIgJGxhdGVzdF9uZXcgfHwgZXhpdCAkPworCQlzYXkgIiRhY3Rpb24gYnJhbmNoICckYnJhbmNoJyIKKwlmaQorCWVjaG8gJGxhdGVzdF9uZXcKKwlleGl0IDAKK30KKworY21kX21lcmdlKCkKK3sKKwlyZXZzPSQoZ2l0IHJldi1wYXJzZSAkZGVmYXVsdCAtLXJldnMtb25seSAiJEAiKSB8fCBleGl0ICQ/CisJZW5zdXJlX2NsZWFuCisJCisJc2V0IC0tICRyZXZzCisJaWYgWyAkIyAtbmUgMSBdOyB0aGVuCisJCWRpZSAiWW91IG11c3QgcHJvdmlkZSBleGFjdGx5IG9uZSByZXZpc2lvbi4gIEdvdDogJyRyZXZzJyIKKwlmaQorCXJldj0iJDEiCisJCisJaWYgWyAtbiAiJHNxdWFzaCIgXTsgdGhlbgorCQlmaXJzdF9zcGxpdD0iJChmaW5kX2xhdGVzdF9zcXVhc2ggIiRkaXIiKSIKKwkJaWYgWyAteiAiJGZpcnN0X3NwbGl0IiBdOyB0aGVuCisJCQlkaWUgIkNhbid0IHNxdWFzaC1tZXJnZTogJyRkaXInIHdhcyBuZXZlciBhZGRlZC4iCisJCWZpCisJCXNldCAkZmlyc3Rfc3BsaXQKKwkJb2xkPSQxCisJCXN1Yj0kMgorCQlpZiBbICIkc3ViIiA9ICIkcmV2IiBdOyB0aGVuCisJCQlzYXkgIlN1YnRyZWUgaXMgYWxyZWFkeSBhdCBjb21taXQgJHJldi4iCisJCQlleGl0IDAKKwkJZmkKKwkJbmV3PSQobmV3X3NxdWFzaF9jb21taXQgIiRvbGQiICIkc3ViIiAiJHJldiIpIHx8IGV4aXQgJD8KKwkJZGVidWcgIk5ldyBzcXVhc2ggY29tbWl0OiAkbmV3IgorCQlyZXY9IiRuZXciCisJZmkKKworCXZlcnNpb249JChnaXQgdmVyc2lvbikKKwlpZiBbICIkdmVyc2lvbiIgXDwgImdpdCB2ZXJzaW9uIDEuNyIgXTsgdGhlbgorCQlpZiBbIC1uICIkbWVzc2FnZSIgXTsgdGhlbgorCQkJZ2l0IG1lcmdlIC1zIHN1YnRyZWUgLS1tZXNzYWdlPSIkbWVzc2FnZSIgJHJldgorCQllbHNlCisJCQlnaXQgbWVyZ2UgLXMgc3VidHJlZSAkcmV2CisJCWZpCisJZWxzZQorCQlpZiBbIC1uICIkbWVzc2FnZSIgXTsgdGhlbgorCQkJZ2l0IG1lcmdlIC1Yc3VidHJlZT0iJHByZWZpeCIgLS1tZXNzYWdlPSIkbWVzc2FnZSIgJHJldgorCQllbHNlCisJCQlnaXQgbWVyZ2UgLVhzdWJ0cmVlPSIkcHJlZml4IiAkcmV2CisJCWZpCisJZmkKK30KKworY21kX3B1bGwoKQoreworCWlmIFsgJCMgLW5lIDIgXTsgdGhlbgorCSAgICBkaWUgIllvdSBtdXN0IHByb3ZpZGUgPHJlcG9zaXRvcnk+IDxyZWY+IgorCWZpCisJZW5zdXJlX2NsZWFuCisJZW5zdXJlX3ZhbGlkX3JlZl9mb3JtYXQgIiQyIgorCWdpdCBmZXRjaCAiJEAiIHx8IGV4aXQgJD8KKwlyZXZzPUZFVENIX0hFQUQKKwlzZXQgLS0gJHJldnMKKwljbWRfbWVyZ2UgIiRAIgorfQorCitjbWRfcHVzaCgpCit7CisJaWYgWyAkIyAtbmUgMiBdOyB0aGVuCisJICAgIGRpZSAiWW91IG11c3QgcHJvdmlkZSA8cmVwb3NpdG9yeT4gPHJlZj4iCisJZmkKKwllbnN1cmVfdmFsaWRfcmVmX2Zvcm1hdCAiJDIiCisJaWYgWyAtZSAiJGRpciIgXTsgdGhlbgorCSAgICByZXBvc2l0b3J5PSQxCisJICAgIHJlZnNwZWM9JDIKKwkgICAgZWNobyAiZ2l0IHB1c2ggdXNpbmc6ICIgJHJlcG9zaXRvcnkgJHJlZnNwZWMKKwkgICAgbG9jYWxyZXY9JChnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD0iJHByZWZpeCIpIHx8IGRpZQorCSAgICBnaXQgcHVzaCAiJHJlcG9zaXRvcnkiICRsb2NhbHJldjpyZWZzL2hlYWRzLyRyZWZzcGVjCisJZWxzZQorCSAgICBkaWUgIickZGlyJyBtdXN0IGFscmVhZHkgZXhpc3QuIFRyeSAnZ2l0IHN1YnRyZWUgYWRkJy4iCisJZmkKK30KKworImNtZF8kY29tbWFuZCIgIiRAIgpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL2dpdC1zdWJ0cmVlLnR4dCBiL2NvbnRyaWIvc3VidHJlZS9naXQtc3VidHJlZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBkNzZjZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3VidHJlZS9naXQtc3VidHJlZS50eHQKQEAgLTAsMCArMSwzNTEgQEAKK2dpdC1zdWJ0cmVlKDEpCis9PT09PT09PT09PT09PQorCitOQU1FCistLS0tCitnaXQtc3VidHJlZSAtIE1lcmdlIHN1YnRyZWVzIHRvZ2V0aGVyIGFuZCBzcGxpdCByZXBvc2l0b3J5IGludG8gc3VidHJlZXMKKworCitTWU5PUFNJUworLS0tLS0tLS0KK1t2ZXJzZV0KKydnaXQgc3VidHJlZScgYWRkICAgLVAgPHByZWZpeD4gPGNvbW1pdD4KKydnaXQgc3VidHJlZScgYWRkICAgLVAgPHByZWZpeD4gPHJlcG9zaXRvcnk+IDxyZWY+CisnZ2l0IHN1YnRyZWUnIHB1bGwgIC1QIDxwcmVmaXg+IDxyZXBvc2l0b3J5PiA8cmVmPgorJ2dpdCBzdWJ0cmVlJyBwdXNoICAtUCA8cHJlZml4PiA8cmVwb3NpdG9yeT4gPHJlZj4KKydnaXQgc3VidHJlZScgbWVyZ2UgLVAgPHByZWZpeD4gPGNvbW1pdD4KKydnaXQgc3VidHJlZScgc3BsaXQgLVAgPHByZWZpeD4gW09QVElPTlNdIFs8Y29tbWl0Pl0KKworCitERVNDUklQVElPTgorLS0tLS0tLS0tLS0KK1N1YnRyZWVzIGFsbG93IHN1YnByb2plY3RzIHRvIGJlIGluY2x1ZGVkIHdpdGhpbiBhIHN1YmRpcmVjdG9yeQorb2YgdGhlIG1haW4gcHJvamVjdCwgb3B0aW9uYWxseSBpbmNsdWRpbmcgdGhlIHN1YnByb2plY3QncworZW50aXJlIGhpc3RvcnkuCisKK0ZvciBleGFtcGxlLCB5b3UgY291bGQgaW5jbHVkZSB0aGUgc291cmNlIGNvZGUgZm9yIGEgbGlicmFyeQorYXMgYSBzdWJkaXJlY3Rvcnkgb2YgeW91ciBhcHBsaWNhdGlvbi4KKworU3VidHJlZXMgYXJlIG5vdCB0byBiZSBjb25mdXNlZCB3aXRoIHN1Ym1vZHVsZXMsIHdoaWNoIGFyZSBtZWFudCBmb3IKK3RoZSBzYW1lIHRhc2suIFVubGlrZSBzdWJtb2R1bGVzLCBzdWJ0cmVlcyBkbyBub3QgbmVlZCBhbnkgc3BlY2lhbAorY29uc3RydWN0aW9ucyAobGlrZSAuZ2l0bW9kdWxlIGZpbGVzIG9yIGdpdGxpbmtzKSBiZSBwcmVzZW50IGluCit5b3VyIHJlcG9zaXRvcnksIGFuZCBkbyBub3QgZm9yY2UgZW5kLXVzZXJzIG9mIHlvdXIKK3JlcG9zaXRvcnkgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCBvciB0byB1bmRlcnN0YW5kIGhvdyBzdWJ0cmVlcword29yay4gQSBzdWJ0cmVlIGlzIGp1c3QgYSBzdWJkaXJlY3RvcnkgdGhhdCBjYW4gYmUKK2NvbW1pdHRlZCB0bywgYnJhbmNoZWQsIGFuZCBtZXJnZWQgYWxvbmcgd2l0aCB5b3VyIHByb2plY3QgaW4KK2FueSB3YXkgeW91IHdhbnQuCisKK1RoZXkgYXJlIGFsc28gbm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggdXNpbmcgdGhlIHN1YnRyZWUgbWVyZ2UKK3N0cmF0ZWd5LiBUaGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQsIGJlc2lkZXMgbWVyZ2luZwordGhlIG90aGVyIHByb2plY3QgYXMgYSBzdWJkaXJlY3RvcnksIHlvdSBjYW4gYWxzbyBleHRyYWN0IHRoZQorZW50aXJlIGhpc3Rvcnkgb2YgYSBzdWJkaXJlY3RvcnkgZnJvbSB5b3VyIHByb2plY3QgYW5kIG1ha2UgaXQKK2ludG8gYSBzdGFuZGFsb25lIHByb2plY3QuIFVubGlrZSB0aGUgc3VidHJlZSBtZXJnZSBzdHJhdGVneQoreW91IGNhbiBhbHRlcm5hdGUgYmFjayBhbmQgZm9ydGggYmV0d2VlbiB0aGVzZQordHdvIG9wZXJhdGlvbnMuIElmIHRoZSBzdGFuZGFsb25lIGxpYnJhcnkgZ2V0cyB1cGRhdGVkLCB5b3UgY2FuCithdXRvbWF0aWNhbGx5IG1lcmdlIHRoZSBjaGFuZ2VzIGludG8geW91ciBwcm9qZWN0OyBpZiB5b3UKK3VwZGF0ZSB0aGUgbGlicmFyeSBpbnNpZGUgeW91ciBwcm9qZWN0LCB5b3UgY2FuICJzcGxpdCIgdGhlCitjaGFuZ2VzIGJhY2sgb3V0IGFnYWluIGFuZCBtZXJnZSB0aGVtIGJhY2sgaW50byB0aGUgbGlicmFyeQorcHJvamVjdC4KKworRm9yIGV4YW1wbGUsIGlmIGEgbGlicmFyeSB5b3UgbWFkZSBmb3Igb25lIGFwcGxpY2F0aW9uIGVuZHMgdXAgYmVpbmcKK3VzZWZ1bCBlbHNld2hlcmUsIHlvdSBjYW4gZXh0cmFjdCBpdHMgZW50aXJlIGhpc3RvcnkgYW5kIHB1Ymxpc2gKK3RoYXQgYXMgaXRzIG93biBnaXQgcmVwb3NpdG9yeSwgd2l0aG91dCBhY2NpZGVudGFsbHkKK2ludGVybWluZ2xpbmcgdGhlIGhpc3Rvcnkgb2YgeW91ciBhcHBsaWNhdGlvbiBwcm9qZWN0LgorCitbVElQXQorSW4gb3JkZXIgdG8ga2VlcCB5b3VyIGNvbW1pdCBtZXNzYWdlcyBjbGVhbiwgd2UgcmVjb21tZW5kIHRoYXQKK3Blb3BsZSBzcGxpdCB0aGVpciBjb21taXRzIGJldHdlZW4gdGhlIHN1YnRyZWVzIGFuZCB0aGUgbWFpbgorcHJvamVjdCBhcyBtdWNoIGFzIHBvc3NpYmxlLiAgVGhhdCBpcywgaWYgeW91IG1ha2UgYSBjaGFuZ2UgdGhhdAorYWZmZWN0cyBib3RoIHRoZSBsaWJyYXJ5IGFuZCB0aGUgbWFpbiBhcHBsaWNhdGlvbiwgY29tbWl0IGl0IGluCit0d28gcGllY2VzLiAgVGhhdCB3YXksIHdoZW4geW91IHNwbGl0IHRoZSBsaWJyYXJ5IGNvbW1pdHMgb3V0CitsYXRlciwgdGhlaXIgZGVzY3JpcHRpb25zIHdpbGwgc3RpbGwgbWFrZSBzZW5zZS4gIEJ1dCBpZiB0aGlzCitpc24ndCBpbXBvcnRhbnQgdG8geW91LCBpdCdzIG5vdCAqbmVjZXNzYXJ5Ki4gIGdpdCBzdWJ0cmVlIHdpbGwKK3NpbXBseSBsZWF2ZSBvdXQgdGhlIG5vbi1saWJyYXJ5LXJlbGF0ZWQgcGFydHMgb2YgdGhlIGNvbW1pdAord2hlbiBpdCBzcGxpdHMgaXQgb3V0IGludG8gdGhlIHN1YnByb2plY3QgbGF0ZXIuCisKKworQ09NTUFORFMKKy0tLS0tLS0tCithZGQ6OgorCUNyZWF0ZSB0aGUgPHByZWZpeD4gc3VidHJlZSBieSBpbXBvcnRpbmcgaXRzIGNvbnRlbnRzCisJZnJvbSB0aGUgZ2l2ZW4gPGNvbW1pdD4gb3IgPHJlcG9zaXRvcnk+IGFuZCByZW1vdGUgPHJlZj4uCisJQSBuZXcgY29tbWl0IGlzIGNyZWF0ZWQJYXV0b21hdGljYWxseSwgam9pbmluZyB0aGUgaW1wb3J0ZWQKKwlwcm9qZWN0J3MgaGlzdG9yeSB3aXRoIHlvdXIgb3duLiAgV2l0aCAnLS1zcXVhc2gnLCBpbXBvcnRzCisJb25seSBhIHNpbmdsZSBjb21taXQgZnJvbSB0aGUgc3VicHJvamVjdCwgcmF0aGVyIHRoYW4gaXRzCisJZW50aXJlIGhpc3RvcnkuCisKK21lcmdlOjoKKwlNZXJnZSByZWNlbnQgY2hhbmdlcyB1cCB0byA8Y29tbWl0PiBpbnRvIHRoZSA8cHJlZml4PgorCXN1YnRyZWUuICBBcyB3aXRoIG5vcm1hbCAnZ2l0IG1lcmdlJywgdGhpcyBkb2Vzbid0CisJcmVtb3ZlIHlvdXIgb3duIGxvY2FsIGNoYW5nZXM7IGl0IGp1c3QgbWVyZ2VzIHRob3NlCisJY2hhbmdlcyBpbnRvIHRoZSBsYXRlc3QgPGNvbW1pdD4uICBXaXRoICctLXNxdWFzaCcsCisJY3JlYXRlcyBvbmx5IG9uZSBjb21taXQgdGhhdCBjb250YWlucyBhbGwgdGhlIGNoYW5nZXMsCisJcmF0aGVyIHRoYW4gbWVyZ2luZyBpbiB0aGUgZW50aXJlIGhpc3RvcnkuCisrCitJZiB5b3UgdXNlICctLXNxdWFzaCcsIHRoZSBtZXJnZSBkaXJlY3Rpb24gZG9lc24ndCBhbHdheXMgaGF2ZSB0byBiZQorZm9yd2FyZDsgeW91IGNhbiB1c2UgdGhpcyBjb21tYW5kIHRvIGdvIGJhY2sgaW4gdGltZSBmcm9tIHYyLjUgdG8gdjIuNCwKK2ZvciBleGFtcGxlLiAgSWYgeW91ciBtZXJnZSBpbnRyb2R1Y2VzIGEgY29uZmxpY3QsIHlvdSBjYW4gcmVzb2x2ZSBpdCBpbgordGhlIHVzdWFsIHdheXMuCisJCitwdWxsOjoKKwlFeGFjdGx5IGxpa2UgJ21lcmdlJywgYnV0IHBhcmFsbGVscyAnZ2l0IHB1bGwnIGluIHRoYXQKKwlpdCBmZXRjaGVzIHRoZSBnaXZlbiByZWYgZnJvbSB0aGUgc3BlY2lmaWVkIHJlbW90ZQorCXJlcG9zaXRvcnkuCisJCitwdXNoOjoKKwlEb2VzIGEgJ3NwbGl0JyAoc2VlIGJlbG93KSB1c2luZyB0aGUgPHByZWZpeD4gc3VwcGxpZWQKKwlhbmQgdGhlbiBkb2VzIGEgJ2dpdCBwdXNoJyB0byBwdXNoIHRoZSByZXN1bHQgdG8gdGhlIAorCXJlcG9zaXRvcnkgYW5kIHJlZi4gVGhpcyBjYW4gYmUgdXNlZCB0byBwdXNoIHlvdXIKKwlzdWJ0cmVlIHRvIGRpZmZlcmVudCBicmFuY2hlcyBvZiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuCisKK3NwbGl0OjoKKwlFeHRyYWN0IGEgbmV3LCBzeW50aGV0aWMgcHJvamVjdCBoaXN0b3J5IGZyb20gdGhlCisJaGlzdG9yeSBvZiB0aGUgPHByZWZpeD4gc3VidHJlZS4gIFRoZSBuZXcgaGlzdG9yeQorCWluY2x1ZGVzIG9ubHkgdGhlIGNvbW1pdHMgKGluY2x1ZGluZyBtZXJnZXMpIHRoYXQKKwlhZmZlY3RlZCA8cHJlZml4PiwgYW5kIGVhY2ggb2YgdGhvc2UgY29tbWl0cyBub3cgaGFzIHRoZQorCWNvbnRlbnRzIG9mIDxwcmVmaXg+IGF0IHRoZSByb290IG9mIHRoZSBwcm9qZWN0IGluc3RlYWQKKwlvZiBpbiBhIHN1YmRpcmVjdG9yeS4gIFRodXMsIHRoZSBuZXdseSBjcmVhdGVkIGhpc3RvcnkKKwlpcyBzdWl0YWJsZSBmb3IgZXhwb3J0IGFzIGEgc2VwYXJhdGUgZ2l0IHJlcG9zaXRvcnkuCisrCitBZnRlciBzcGxpdHRpbmcgc3VjY2Vzc2Z1bGx5LCBhIHNpbmdsZSBjb21taXQgaWQgaXMgcHJpbnRlZCB0byBzdGRvdXQuCitUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBIRUFEIG9mIHRoZSBuZXdseSBjcmVhdGVkIHRyZWUsIHdoaWNoIHlvdSBjYW4KK21hbmlwdWxhdGUgaG93ZXZlciB5b3Ugd2FudC4KKysKK1JlcGVhdGVkIHNwbGl0cyBvZiBleGFjdGx5IHRoZSBzYW1lIGhpc3RvcnkgYXJlIGd1YXJhbnRlZWQgdG8gYmUKK2lkZW50aWNhbCAoaS5lLiB0byBwcm9kdWNlIHRoZSBzYW1lIGNvbW1pdCBpZHMpLiAgQmVjYXVzZSBvZiB0aGlzLCBpZgoreW91IGFkZCBuZXcgY29tbWl0cyBhbmQgdGhlbiByZS1zcGxpdCwgdGhlIG5ldyBjb21taXRzIHdpbGwgYmUgYXR0YWNoZWQKK2FzIGNvbW1pdHMgb24gdG9wIG9mIHRoZSBoaXN0b3J5IHlvdSBnZW5lcmF0ZWQgbGFzdCB0aW1lLCBzbyAnZ2l0IG1lcmdlJworYW5kIGZyaWVuZHMgd2lsbCB3b3JrIGFzIGV4cGVjdGVkLgorKworTm90ZSB0aGF0IGlmIHlvdSB1c2UgJy0tc3F1YXNoJyB3aGVuIHlvdSBtZXJnZSwgeW91IHNob3VsZCB1c3VhbGx5IG5vdAoranVzdCAnLS1yZWpvaW4nIHdoZW4geW91IHNwbGl0LgorCisKK09QVElPTlMKKy0tLS0tLS0KKy1xOjoKKy0tcXVpZXQ6OgorCVN1cHByZXNzIHVubmVjZXNzYXJ5IG91dHB1dCBtZXNzYWdlcyBvbiBzdGRlcnIuCisKKy1kOjoKKy0tZGVidWc6OgorCVByb2R1Y2UgZXZlbiBtb3JlIHVubmVjZXNzYXJ5IG91dHB1dCBtZXNzYWdlcyBvbiBzdGRlcnIuCisKKy1QIDxwcmVmaXg+OjoKKy0tcHJlZml4PTxwcmVmaXg+OjoKKwlTcGVjaWZ5IHRoZSBwYXRoIGluIHRoZSByZXBvc2l0b3J5IHRvIHRoZSBzdWJ0cmVlIHlvdQorCXdhbnQgdG8gbWFuaXB1bGF0ZS4gIFRoaXMgb3B0aW9uIGlzIG1hbmRhdG9yeQorCWZvciBhbGwgY29tbWFuZHMuCisKKy1tIDxtZXNzYWdlPjo6CistLW1lc3NhZ2U9PG1lc3NhZ2U+OjoKKwlUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBhZGQsIG1lcmdlIGFuZCBwdWxsICh1bnN1cmUpLgorCVNwZWNpZnkgPG1lc3NhZ2U+IGFzIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgdGhlIG1lcmdlIGNvbW1pdC4KKworCitPUFRJT05TIEZPUiBhZGQsIG1lcmdlLCBwdXNoLCBwdWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLXNxdWFzaDo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgYWRkLCBtZXJnZSwgYW5kIHB1bGwKKwljb21tYW5kcy4KKysKK0luc3RlYWQgb2YgbWVyZ2luZyB0aGUgZW50aXJlIGhpc3RvcnkgZnJvbSB0aGUgc3VidHJlZSBwcm9qZWN0LCBwcm9kdWNlCitvbmx5IGEgc2luZ2xlIGNvbW1pdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgZGlmZmVyZW5jZXMgeW91IHdhbnQgdG8KK21lcmdlLCBhbmQgdGhlbiBtZXJnZSB0aGF0IG5ldyBjb21taXQgaW50byB5b3VyIHByb2plY3QuCisrCitVc2luZyB0aGlzIG9wdGlvbiBoZWxwcyB0byByZWR1Y2UgbG9nIGNsdXR0ZXIuIFBlb3BsZSByYXJlbHkgd2FudCB0byBzZWUKK2V2ZXJ5IGNoYW5nZSB0aGF0IGhhcHBlbmVkIGJldHdlZW4gdjEuMCBhbmQgdjEuMSBvZiB0aGUgbGlicmFyeSB0aGV5J3JlCit1c2luZywgc2luY2Ugbm9uZSBvZiB0aGUgaW50ZXJpbSB2ZXJzaW9ucyB3ZXJlIGV2ZXIgaW5jbHVkZWQgaW4gdGhlaXIKK2FwcGxpY2F0aW9uLgorKworVXNpbmcgJy0tc3F1YXNoJyBhbHNvIGhlbHBzIGF2b2lkIHByb2JsZW1zIHdoZW4gdGhlIHNhbWUgc3VicHJvamVjdCBpcworaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUgcHJvamVjdCwgb3IgaXMgcmVtb3ZlZCBhbmQgdGhlbgorcmUtYWRkZWQuICBJbiBzdWNoIGEgY2FzZSwgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGNvbWJpbmUgdGhlCitoaXN0b3JpZXMgYW55d2F5LCBzaW5jZSBpdCdzIHVuY2xlYXIgd2hpY2ggcGFydCBvZiB0aGUgaGlzdG9yeSBiZWxvbmdzCit0byB3aGljaCBzdWJ0cmVlLgorKworRnVydGhlcm1vcmUsIHdpdGggJy0tc3F1YXNoJywgeW91IGNhbiBzd2l0Y2ggYmFjayBhbmQgZm9ydGggYmV0d2VlbgorZGlmZmVyZW50IHZlcnNpb25zIG9mIGEgc3VidHJlZSwgcmF0aGVyIHRoYW4gc3RyaWN0bHkgZm9yd2FyZC4gICdnaXQKK3N1YnRyZWUgbWVyZ2UgLS1zcXVhc2gnIGFsd2F5cyBhZGp1c3RzIHRoZSBzdWJ0cmVlIHRvIG1hdGNoIHRoZSBleGFjdGx5CitzcGVjaWZpZWQgY29tbWl0LCBldmVuIGlmIGdldHRpbmcgdG8gdGhhdCBjb21taXQgd291bGQgcmVxdWlyZSB1bmRvaW5nCitzb21lIGNoYW5nZXMgdGhhdCB3ZXJlIGFkZGVkIGVhcmxpZXIuCisrCitXaGV0aGVyIG9yIG5vdCB5b3UgdXNlICctLXNxdWFzaCcsIGNoYW5nZXMgbWFkZSBpbiB5b3VyIGxvY2FsIHJlcG9zaXRvcnkKK3JlbWFpbiBpbnRhY3QgYW5kIGNhbiBiZSBsYXRlciBzcGxpdCBhbmQgc2VuZCB1cHN0cmVhbSB0byB0aGUKK3N1YnByb2plY3QuCisKKworT1BUSU9OUyBGT1Igc3BsaXQKKy0tLS0tLS0tLS0tLS0tLS0tCistLWFubm90YXRlPTxhbm5vdGF0aW9uPjo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHNwbGl0IGNvbW1hbmQuCisrCitXaGVuIGdlbmVyYXRpbmcgc3ludGhldGljIGhpc3RvcnksIGFkZCA8YW5ub3RhdGlvbj4gYXMgYSBwcmVmaXggdG8gZWFjaAorY29tbWl0IG1lc3NhZ2UuICBTaW5jZSB3ZSdyZSBjcmVhdGluZyBuZXcgY29tbWl0cyB3aXRoIHRoZSBzYW1lIGNvbW1pdAorbWVzc2FnZSwgYnV0IHBvc3NpYmx5IGRpZmZlcmVudCBjb250ZW50LCBmcm9tIHRoZSBvcmlnaW5hbCBjb21taXRzLCB0aGlzCitjYW4gaGVscCB0byBkaWZmZXJlbnRpYXRlIHRoZW0gYW5kIGF2b2lkIGNvbmZ1c2lvbi4KKysKK1doZW5ldmVyIHlvdSBzcGxpdCwgeW91IG5lZWQgdG8gdXNlIHRoZSBzYW1lIDxhbm5vdGF0aW9uPiwgb3IgZWxzZSB5b3UKK2Rvbid0IGhhdmUgYSBndWFyYW50ZWUgdGhhdCB0aGUgbmV3IHJlLWNyZWF0ZWQgaGlzdG9yeSB3aWxsIGJlIGlkZW50aWNhbAordG8gdGhlIG9sZCBvbmUuICBUaGF0IHdpbGwgcHJldmVudCBtZXJnaW5nIGZyb20gd29ya2luZyBjb3JyZWN0bHkuICBnaXQKK3N1YnRyZWUgdHJpZXMgdG8gbWFrZSBpdCB3b3JrIGFueXdheSwgcGFydGljdWxhcmx5IGlmIHlvdSB1c2UgLS1yZWpvaW4sCitidXQgaXQgbWF5IG5vdCBhbHdheXMgYmUgZWZmZWN0aXZlLgorCistYiA8YnJhbmNoPjo6CistLWJyYW5jaD08YnJhbmNoPjo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHNwbGl0IGNvbW1hbmQuCisrCitBZnRlciBnZW5lcmF0aW5nIHRoZSBzeW50aGV0aWMgaGlzdG9yeSwgY3JlYXRlIGEgbmV3IGJyYW5jaCBjYWxsZWQKKzxicmFuY2g+IHRoYXQgY29udGFpbnMgdGhlIG5ldyBoaXN0b3J5LiAgVGhpcyBpcyBzdWl0YWJsZSBmb3IgaW1tZWRpYXRlCitwdXNoaW5nIHVwc3RyZWFtLiAgPGJyYW5jaD4gbXVzdCBub3QgYWxyZWFkeSBleGlzdC4KKworLS1pZ25vcmUtam9pbnM6OgorCVRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBzcGxpdCBjb21tYW5kLgorKworSWYgeW91IHVzZSAnLS1yZWpvaW4nLCBnaXQgc3VidHJlZSBhdHRlbXB0cyB0byBvcHRpbWl6ZSBpdHMgaGlzdG9yeQorcmVjb25zdHJ1Y3Rpb24gdG8gZ2VuZXJhdGUgb25seSB0aGUgbmV3IGNvbW1pdHMgc2luY2UgdGhlIGxhc3QKKyctLXJlam9pbicuICAnLS1pZ25vcmUtam9pbicgZGlzYWJsZXMgdGhpcyBiZWhhdmlvdXIsIGZvcmNpbmcgaXQgdG8KK3JlZ2VuZXJhdGUgdGhlIGVudGlyZSBoaXN0b3J5LiAgSW4gYSBsYXJnZSBwcm9qZWN0LCB0aGlzIGNhbiB0YWtlIGEgbG9uZwordGltZS4KKworLS1vbnRvPTxvbnRvPjo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHNwbGl0IGNvbW1hbmQuCisrCitJZiB5b3VyIHN1YnRyZWUgd2FzIG9yaWdpbmFsbHkgaW1wb3J0ZWQgdXNpbmcgc29tZXRoaW5nIG90aGVyIHRoYW4gZ2l0CitzdWJ0cmVlLCBpdHMgaGlzdG9yeSBtYXkgbm90IG1hdGNoIHdoYXQgZ2l0IHN1YnRyZWUgaXMgZXhwZWN0aW5nLiAgSW4KK3RoYXQgY2FzZSwgeW91IGNhbiBzcGVjaWZ5IHRoZSBjb21taXQgaWQgPG9udG8+IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCitmaXJzdCByZXZpc2lvbiBvZiB0aGUgc3VicHJvamVjdCdzIGhpc3RvcnkgdGhhdCB3YXMgaW1wb3J0ZWQgaW50byB5b3VyCitwcm9qZWN0LCBhbmQgZ2l0IHN1YnRyZWUgd2lsbCBhdHRlbXB0IHRvIGJ1aWxkIGl0cyBoaXN0b3J5IGZyb20gdGhlcmUuCisrCitJZiB5b3UgdXNlZCAnZ2l0IHN1YnRyZWUgYWRkJywgeW91IHNob3VsZCBuZXZlciBuZWVkIHRoaXMgb3B0aW9uLgorCistLXJlam9pbjo6CisJVGhpcyBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgdGhlIHNwbGl0IGNvbW1hbmQuCisrCitBZnRlciBzcGxpdHRpbmcsIG1lcmdlIHRoZSBuZXdseSBjcmVhdGVkIHN5bnRoZXRpYyBoaXN0b3J5IGJhY2sgaW50bworeW91ciBtYWluIHByb2plY3QuICBUaGF0IHdheSwgZnV0dXJlIHNwbGl0cyBjYW4gc2VhcmNoIG9ubHkgdGhlIHBhcnQgb2YKK2hpc3RvcnkgdGhhdCBoYXMgYmVlbiBhZGRlZCBzaW5jZSB0aGUgbW9zdCByZWNlbnQgLS1yZWpvaW4uCisrCitJZiB5b3VyIHNwbGl0IGNvbW1pdHMgZW5kIHVwIG1lcmdlZCBpbnRvIHRoZSB1cHN0cmVhbSBzdWJwcm9qZWN0LCBhbmQKK3RoZW4geW91IHdhbnQgdG8gZ2V0IHRoZSBsYXRlc3QgdXBzdHJlYW0gdmVyc2lvbiwgdGhpcyB3aWxsIGFsbG93IGdpdCdzCittZXJnZSBhbGdvcml0aG0gdG8gbW9yZSBpbnRlbGxpZ2VudGx5IGF2b2lkIGNvbmZsaWN0cyAoc2luY2UgaXQga25vd3MKK3RoZXNlIHN5bnRoZXRpYyBjb21taXRzIGFyZSBhbHJlYWR5IHBhcnQgb2YgdGhlIHVwc3RyZWFtIHJlcG9zaXRvcnkpLgorKworVW5mb3J0dW5hdGVseSwgdXNpbmcgdGhpcyBvcHRpb24gcmVzdWx0cyBpbiAnZ2l0IGxvZycgc2hvd2luZyBhbiBleHRyYQorY29weSBvZiBldmVyeSBuZXcgY29tbWl0IHRoYXQgd2FzIGNyZWF0ZWQgKHRoZSBvcmlnaW5hbCwgYW5kIHRoZQorc3ludGhldGljIG9uZSkuCisrCitJZiB5b3UgZG8gYWxsIHlvdXIgbWVyZ2VzIHdpdGggJy0tc3F1YXNoJywgZG9uJ3QgdXNlICctLXJlam9pbicgd2hlbiB5b3UKK3NwbGl0LCBiZWNhdXNlIHlvdSBkb24ndCB3YW50IHRoZSBzdWJwcm9qZWN0J3MgaGlzdG9yeSB0byBiZSBwYXJ0IG9mCit5b3VyIHByb2plY3QgYW55d2F5LgorCisKK0VYQU1QTEUgMS4gQWRkIGNvbW1hbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xldCdzIGFzc3VtZSB0aGF0IHlvdSBoYXZlIGEgbG9jYWwgcmVwb3NpdG9yeSB0aGF0IHlvdSB3b3VsZCBsaWtlCit0byBhZGQgYW4gZXh0ZXJuYWwgdmVuZG9yIGxpYnJhcnkgdG8uIEluIHRoaXMgY2FzZSB3ZSB3aWxsIGFkZCB0aGUKK2dpdC1zdWJ0cmVlIHJlcG9zaXRvcnkgYXMgYSBzdWJkaXJlY3Rvcnkgb2YgeW91ciBhbHJlYWR5IGV4aXN0aW5nCitnaXQtZXh0ZW5zaW9ucyByZXBvc2l0b3J5IGluIH4vZ2l0LWV4dGVuc2lvbnMvOgorCisJJCBnaXQgc3VidHJlZSBhZGQgLS1wcmVmaXg9Z2l0LXN1YnRyZWUgLS1zcXVhc2ggXAorCQlnaXQ6Ly9naXRodWIuY29tL2FwZW53YXJyL2dpdC1zdWJ0cmVlLmdpdCBtYXN0ZXIKKworJ21hc3RlcicgbmVlZHMgdG8gYmUgYSB2YWxpZCByZW1vdGUgcmVmIGFuZCBjYW4gYmUgYSBkaWZmZXJlbnQgYnJhbmNoCituYW1lCisKK1lvdSBjYW4gb21pdCB0aGUgLS1zcXVhc2ggZmxhZywgYnV0IGRvaW5nIHNvIHdpbGwgaW5jcmVhc2UgdGhlIG51bWJlcgorb2YgY29tbWl0cyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB5b3VyIGxvY2FsIHJlcG9zaXRvcnkuCisKK1dlIG5vdyBoYXZlIGEgfi9naXQtZXh0ZW5zaW9ucy9naXQtc3VidHJlZSBkaXJlY3RvcnkgY29udGFpbmluZyBjb2RlCitmcm9tIHRoZSBtYXN0ZXIgYnJhbmNoIG9mIGdpdDovL2dpdGh1Yi5jb20vYXBlbndhcnIvZ2l0LXN1YnRyZWUuZ2l0CitpbiBvdXIgZ2l0LWV4dGVuc2lvbnMgcmVwb3NpdG9yeS4KKworRVhBTVBMRSAyLiBFeHRyYWN0IGEgc3VidHJlZSB1c2luZyBjb21taXQsIG1lcmdlIGFuZCBwdWxsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0xldCdzIHVzZSB0aGUgcmVwb3NpdG9yeSBmb3IgdGhlIGdpdCBzb3VyY2UgY29kZSBhcyBhbiBleGFtcGxlLgorRmlyc3QsIGdldCB5b3VyIG93biBjb3B5IG9mIHRoZSBnaXQuZ2l0IHJlcG9zaXRvcnk6CisKKwkkIGdpdCBjbG9uZSBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2dpdC9naXQuZ2l0IHRlc3QtZ2l0CisJJCBjZCB0ZXN0LWdpdAorCitnaXR3ZWIgKGNvbW1pdCAxMTMwZWYzKSB3YXMgbWVyZ2VkIGludG8gZ2l0IGFzIG9mIGNvbW1pdAorMGE4ZjRmMCwgYWZ0ZXIgd2hpY2ggaXQgd2FzIG5vIGxvbmdlciBtYWludGFpbmVkIHNlcGFyYXRlbHkuIAorQnV0IGltYWdpbmUgaXQgaGFkIGJlZW4gbWFpbnRhaW5lZCBzZXBhcmF0ZWx5LCBhbmQgd2Ugd2FudGVkIHRvCitleHRyYWN0IGdpdCdzIGNoYW5nZXMgdG8gZ2l0d2ViIHNpbmNlIHRoYXQgdGltZSwgdG8gc2hhcmUgd2l0aAordGhlIHVwc3RyZWFtLiAgWW91IGNvdWxkIGRvIHRoaXM6CisKKwkkIGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PWdpdHdlYiAtLWFubm90YXRlPScoc3BsaXQpICcgXAorICAgICAgICAJMGE4ZjRmMF4uLiAtLW9udG89MTEzMGVmMyAtLXJlam9pbiBcCisgICAgICAgIAktLWJyYW5jaCBnaXR3ZWItbGF0ZXN0CisgICAgICAgICQgZ2l0ayBnaXR3ZWItbGF0ZXN0CisgICAgICAgICQgZ2l0IHB1c2ggZ2l0QGdpdGh1Yi5jb206d2hhdGV2ZXIvZ2l0d2ViLmdpdCBnaXR3ZWItbGF0ZXN0Om1hc3RlcgorICAgICAgICAKKyhXZSB1c2UgJzBhOGY0ZjBeLi4nIGJlY2F1c2UgdGhhdCBtZWFucyAiYWxsIHRoZSBjaGFuZ2VzIGZyb20KKzBhOGY0ZjAgdG8gdGhlIGN1cnJlbnQgdmVyc2lvbiwgaW5jbHVkaW5nIDBhOGY0ZjAgaXRzZWxmLiIpCisKK0lmIGdpdHdlYiBoYWQgb3JpZ2luYWxseSBiZWVuIG1lcmdlZCB1c2luZyAnZ2l0IHN1YnRyZWUgYWRkJyAob3IKK2EgcHJldmlvdXMgc3BsaXQgaGFkIGFscmVhZHkgYmVlbiBkb25lIHdpdGggLS1yZWpvaW4gc3BlY2lmaWVkKQordGhlbiB5b3UgY2FuIGRvIGFsbCB5b3VyIHNwbGl0cyB3aXRob3V0IGhhdmluZyB0byByZW1lbWJlciBhbnkKK3dlaXJkIGNvbW1pdCBpZHM6CisKKwkkIGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4PWdpdHdlYiAtLWFubm90YXRlPScoc3BsaXQpICcgLS1yZWpvaW4gXAorCQktLWJyYW5jaCBnaXR3ZWItbGF0ZXN0MgorCitBbmQgeW91IGNhbiBtZXJnZSBjaGFuZ2VzIGJhY2sgaW4gZnJvbSB0aGUgdXBzdHJlYW0gcHJvamVjdCBqdXN0CithcyBlYXNpbHk6CisKKwkkIGdpdCBzdWJ0cmVlIHB1bGwgLS1wcmVmaXg9Z2l0d2ViIFwKKwkJZ2l0QGdpdGh1Yi5jb206d2hhdGV2ZXIvZ2l0d2ViLmdpdCBtYXN0ZXIKKworT3IsIHVzaW5nICctLXNxdWFzaCcsIHlvdSBjYW4gYWN0dWFsbHkgcmV3aW5kIHRvIGFuIGVhcmxpZXIKK3ZlcnNpb24gb2YgZ2l0d2ViOgorCisJJCBnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD1naXR3ZWIgLS1zcXVhc2ggZ2l0d2ViLWxhdGVzdH4xMAorCitUaGVuIG1ha2Ugc29tZSBjaGFuZ2VzOgorCisJJCBkYXRlID5naXR3ZWIvbXlmaWxlCisJJCBnaXQgYWRkIGdpdHdlYi9teWZpbGUKKwkkIGdpdCBjb21taXQgLW0gJ2NyZWF0ZWQgbXlmaWxlJworCitBbmQgZmFzdCBmb3J3YXJkIGFnYWluOgorCisJJCBnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD1naXR3ZWIgLS1zcXVhc2ggZ2l0d2ViLWxhdGVzdAorCitBbmQgbm90aWNlIHRoYXQgeW91ciBjaGFuZ2UgaXMgc3RpbGwgaW50YWN0OgorCQorCSQgbHMgLWwgZ2l0d2ViL215ZmlsZQorCitBbmQgeW91IGNhbiBzcGxpdCBpdCBvdXQgYW5kIGxvb2sgYXQgeW91ciBjaGFuZ2VzIHZlcnN1cwordGhlIHN0YW5kYXJkIGdpdHdlYjoKKworCWdpdCBsb2cgZ2l0d2ViLWxhdGVzdC4uJChnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD1naXR3ZWIpCisKK0VYQU1QTEUgMy4gRXh0cmFjdCBhIHN1YnRyZWUgdXNpbmcgYnJhbmNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3VwcG9zZSB5b3UgaGF2ZSBhIHNvdXJjZSBkaXJlY3Rvcnkgd2l0aCBtYW55IGZpbGVzIGFuZAorc3ViZGlyZWN0b3JpZXMsIGFuZCB5b3Ugd2FudCB0byBleHRyYWN0IHRoZSBsaWIgZGlyZWN0b3J5IHRvIGl0cyBvd24KK2dpdCBwcm9qZWN0LiBIZXJlJ3MgYSBzaG9ydCB3YXkgdG8gZG8gaXQ6CisKK0ZpcnN0LCBtYWtlIHRoZSBuZXcgcmVwb3NpdG9yeSB3aGVyZXZlciB5b3Ugd2FudDoKKworCSQgPGdvIHRvIHRoZSBuZXcgbG9jYXRpb24+CisJJCBnaXQgaW5pdCAtLWJhcmUKKworQmFjayBpbiB5b3VyIG9yaWdpbmFsIGRpcmVjdG9yeToKKworCSQgZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXg9bGliIC0tYW5ub3RhdGU9IihzcGxpdCkiIC1iIHNwbGl0CisKK1RoZW4gcHVzaCB0aGUgbmV3IGJyYW5jaCBvbnRvIHRoZSBuZXcgZW1wdHkgcmVwb3NpdG9yeToKKworCSQgZ2l0IHB1c2ggPG5ldy1yZXBvPiBzcGxpdDptYXN0ZXIKKworCitBVVRIT1IKKy0tLS0tLQorV3JpdHRlbiBieSBBdmVyeSBQZW5uYXJ1biA8YXBlbndhcnJAZ21haWwuY29tPgorCisKK0dJVAorLS0tCitQYXJ0IG9mIHRoZSBsaW5rZ2l0OmdpdFsxXSBzdWl0ZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdWJ0cmVlL3QvTWFrZWZpbGUgYi9jb250cmliL3N1YnRyZWUvdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODY0ODEwCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL3QvTWFrZWZpbGUKQEAgLTAsMCArMSw2OSBAQAorIyBSdW4gdGVzdHMKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKKy1pbmNsdWRlIC4uLy4uLy4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vLi4vLi4vY29uZmlnLm1haworCisjR0lUX1RFU1RfT1BUUz0tLXZlcmJvc2UgLS1kZWJ1ZworU0hFTExfUEFUSCA/PSAkKFNIRUxMKQorUEVSTF9QQVRIID89IC91c3IvYmluL3BlcmwKK1RBUiA/PSAkKFRBUikKK1JNID89IHJtIC1mCitQUk9WRSA/PSBwcm92ZQorREVGQVVMVF9URVNUX1RBUkdFVCA/PSB0ZXN0CisKKyMgU2hlbGwgcXVvdGU7CitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKKworVCA9ICQod2lsZGNhcmQgdFswLTldWzAtOV1bMC05XVswLTldLSouc2gpCisKK2FsbDogJChERUZBVUxUX1RFU1RfVEFSR0VUKQorCit0ZXN0OiBwcmUtY2xlYW4gJChURVNUX0xJTlQpCisJJChNQUtFKSBhZ2dyZWdhdGUtcmVzdWx0cy1hbmQtY2xlYW51cAorCitwcm92ZTogcHJlLWNsZWFuICQoVEVTVF9MSU5UKQorCUBlY2hvICIqKiogcHJvdmUgKioqIjsgR0lUX0NPTkZJRz0uZ2l0L2NvbmZpZyAkKFBST1ZFKSAtLWV4ZWMgJyQoU0hFTExfUEFUSF9TUSknICQoR0lUX1BST1ZFX09QVFMpICQoVCkgOjogJChHSVRfVEVTVF9PUFRTKQorCSQoTUFLRSkgY2xlYW4KKworJChUKToKKwlAZWNobyAiKioqICRAICoqKiI7IEdJVF9DT05GSUc9LmdpdC9jb25maWcgJyQoU0hFTExfUEFUSF9TUSknICRAICQoR0lUX1RFU1RfT1BUUykKKworcHJlLWNsZWFuOgorCSQoUk0pIC1yIHRlc3QtcmVzdWx0cworCitjbGVhbjoKKwkkKFJNKSAtciAndHJhc2ggZGlyZWN0b3J5Jy4qIHRlc3QtcmVzdWx0cworCSQoUk0pIC1yIHZhbGdyaW5kL2JpbgorCSQoUk0pIC5wcm92ZQorCit0ZXN0LWxpbnQ6IHRlc3QtbGludC1kdXBsaWNhdGVzIHRlc3QtbGludC1leGVjdXRhYmxlCisKK3Rlc3QtbGludC1kdXBsaWNhdGVzOgorCUBkdXBzPWBlY2hvICQoVCkgfCB0ciAnICcgJ1xuJyB8IHNlZCAncy8tLiovLycgfCBzb3J0IHwgdW5pcSAtZGAgJiYgXAorCQl0ZXN0IC16ICIkJGR1cHMiIHx8IHsgXAorCQllY2hvID4mMiAiZHVwbGljYXRlIHRlc3QgbnVtYmVyczoiICQkZHVwczsgZXhpdCAxOyB9CisKK3Rlc3QtbGludC1leGVjdXRhYmxlOgorCUBiYWQ9YGZvciBpIGluICQoVCk7IGRvIHRlc3QgLXggIiQkaSIgfHwgZWNobyAkJGk7IGRvbmVgICYmIFwKKwkJdGVzdCAteiAiJCRiYWQiIHx8IHsgXAorCQllY2hvID4mMiAibm9uLWV4ZWN1dGFibGUgdGVzdHM6IiAkJGJhZDsgZXhpdCAxOyB9CisKK2FnZ3JlZ2F0ZS1yZXN1bHRzLWFuZC1jbGVhbnVwOiAkKFQpCisJJChNQUtFKSBhZ2dyZWdhdGUtcmVzdWx0cworCSQoTUFLRSkgY2xlYW4KKworYWdncmVnYXRlLXJlc3VsdHM6CisJZm9yIGYgaW4gLi4vLi4vLi4vdC90ZXN0LXJlc3VsdHMvdCotKi5jb3VudHM7IGRvIFwKKwkJZWNobyAiJCRmIjsgXAorCWRvbmUgfCAnJChTSEVMTF9QQVRIX1NRKScgLi4vLi4vLi4vdC9hZ2dyZWdhdGUtcmVzdWx0cy5zaAorCit2YWxncmluZDoKKwkkKE1BS0UpIEdJVF9URVNUX09QVFM9IiQoR0lUX1RFU1RfT1BUUykgLS12YWxncmluZCIKKwordGVzdC1yZXN1bHRzOgorCW1rZGlyIC1wIHRlc3QtcmVzdWx0cworCisuUEhPTlk6IHByZS1jbGVhbiAkKFQpIGFnZ3JlZ2F0ZS1yZXN1bHRzIGNsZWFuIHZhbGdyaW5kCmRpZmYgLS1naXQgYS9jb250cmliL3N1YnRyZWUvdC90NzkwMC1zdWJ0cmVlLnNoIGIvY29udHJpYi9zdWJ0cmVlL3QvdDc5MDAtc3VidHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZmJlNDQzCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdWJ0cmVlL3QvdDc5MDAtc3VidHJlZS5zaApAQCAtMCwwICsxLDUyMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBBdmVyeSBQZW5uYXJhdW0KKyMgQ29weXJpZ2h0IChjKSAyMDE1IEFsZXhleSBTaHVta2luCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdCYXNpYyBwb3JjZWxhaW4gc3VwcG9ydCBmb3Igc3VidHJlZXMKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoZSBiYXNpYyBvcGVyYXRpb24gb2YgdGhlIG1lcmdlLCBwdWxsLCBhZGQKK2FuZCBzcGxpdCBzdWJjb21tYW5kcyBvZiBnaXQgc3VidHJlZS4KKycKKworVEVTVF9ESVJFQ1RPUlk9JChwd2QpLy4uLy4uLy4uL3QKK2V4cG9ydCBURVNUX0RJUkVDVE9SWQorCisuIC4uLy4uLy4uL3QvdGVzdC1saWIuc2gKKworY3JlYXRlKCkKK3sKKwllY2hvICIkMSIgPiIkMSIKKwlnaXQgYWRkICIkMSIKK30KKworCitjaGVja19lcXVhbCgpCit7CisJdGVzdF9kZWJ1ZyAnZWNobycKKwl0ZXN0X2RlYnVnICJlY2hvIFwiY2hlY2sgYTpcIiBcInskMX1cIiIKKwl0ZXN0X2RlYnVnICJlY2hvIFwiICAgICAgYjpcIiBcInskMn1cIiIKKwlpZiBbICIkMSIgPSAiJDIiIF07IHRoZW4KKwkJcmV0dXJuIDAKKwllbHNlCisJCXJldHVybiAxCisJZmkKK30KKwordW5kbygpCit7CisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfgorfQorCitsYXN0X2NvbW1pdF9tZXNzYWdlKCkKK3sKKwlnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyAtMQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHN1YnByb2onICcKKwl0ZXN0X2NyZWF0ZV9yZXBvICJzdWIgcHJvaiIKKycKKworIyBUbyB0aGUgc3VicHJvamVjdCEKK2NkIC4vInN1YiBwcm9qIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3ViMScgJworCWNyZWF0ZSBzdWIxICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViMSIgJiYKKwlnaXQgYnJhbmNoIHN1YjEgJiYKKwlnaXQgYnJhbmNoIC1tIG1hc3RlciBzdWJwcm9qCisnCisKKyMgU2F2ZSB0aGlzIGhhc2ggZm9yIHRlc3RpbmcgbGF0ZXIuCisKK3N1YmRpcl9oYXNoPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3ViMicgJworCWNyZWF0ZSBzdWIyICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViMiIgJiYKKwlnaXQgYnJhbmNoIHN1YjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHN1YjMnICcKKwljcmVhdGUgc3ViMyAmJgorCWdpdCBjb21taXQgLW0gInN1YjMiICYmCisJZ2l0IGJyYW5jaCBzdWIzCisnCisKKyMgQmFjayB0byBtYWlubGluZQorY2QgLi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIGxvZy5kYXRlPXJlbGF0aXZlIHRvIGNhdGNoIGVycm9ycycgJworCWdpdCBjb25maWcgbG9nLmRhdGUgcmVsYXRpdmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG1haW40JyAnCisJY3JlYXRlIG1haW40ICYmCisJZ2l0IGNvbW1pdCAtbSAibWFpbjQiICYmCisJZ2l0IGJyYW5jaCAtbSBtYXN0ZXIgbWFpbmxpbmUgJiYKKwlnaXQgYnJhbmNoIHN1YmRpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBzdWJwcm9qIGhpc3RvcnknICcKKwlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIHN1YjEgJiYKKwlnaXQgYnJhbmNoIHN1YjEgRkVUQ0hfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBzdWJ0cmVlIGV4aXN0cyBpbiBtYWluIHRyZWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeD0ic3ViIGRpciIgc3ViMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBwdWxsIGZyb20gbm9uLWV4aXN0YW50IHN1YnRyZWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VidHJlZSBwdWxsIC0tcHJlZml4PSJzdWIgZGlyIiAuLyJzdWIgcHJvaiIgc3ViMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiAtLW1lc3NhZ2Ugd29ya3MgZm9yIGFkZCcgJworCWdpdCBzdWJ0cmVlIGFkZCAtLXByZWZpeD0ic3ViIGRpciIgLS1tZXNzYWdlPSJBZGRlZCBzdWJwcm9qZWN0IiBzdWIxICYmCisJY2hlY2tfZXF1YWwgJyciJChsYXN0X2NvbW1pdF9tZXNzYWdlKSInJyAiQWRkZWQgc3VicHJvamVjdCIgJiYKKwl1bmRvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIC0tbWVzc2FnZSB3b3JrcyBhcyAtbSBhbmQgLS1wcmVmaXggYXMgLVAnICcKKwlnaXQgc3VidHJlZSBhZGQgLVAgInN1YiBkaXIiIC1tICJBZGRlZCBzdWJwcm9qZWN0IHVzaW5nIGdpdCBzdWJ0cmVlIiBzdWIxICYmCisJY2hlY2tfZXF1YWwgJyciJChsYXN0X2NvbW1pdF9tZXNzYWdlKSInJyAiQWRkZWQgc3VicHJvamVjdCB1c2luZyBnaXQgc3VidHJlZSIgJiYKKwl1bmRvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIC0tbWVzc2FnZSB3b3JrcyB3aXRoIHNxdWFzaCB0b28nICcKKwlnaXQgc3VidHJlZSBhZGQgLVAgInN1YiBkaXIiIC1tICJBZGRlZCBzdWJwcm9qZWN0IHdpdGggc3F1YXNoIiAtLXNxdWFzaCBzdWIxICYmCisJY2hlY2tfZXF1YWwgJyciJChsYXN0X2NvbW1pdF9tZXNzYWdlKSInJyAiQWRkZWQgc3VicHJvamVjdCB3aXRoIHNxdWFzaCIgJiYKKwl1bmRvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzdWJwcm9qIHRvIG1haW5saW5lJyAnCisJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4PSJzdWIgZGlyIi8gRkVUQ0hfSEVBRCAmJgorCWNoZWNrX2VxdWFsICcnIiQobGFzdF9jb21taXRfbWVzc2FnZSkiJycgIkFkZCAnIidzdWIgZGlyLyciJyBmcm9tIGNvbW1pdCAnIiciJycnIiQoZ2l0IHJldi1wYXJzZSBzdWIxKSInJyciJyInIgorJworCisjIHRoaXMgc2hvdWxkbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nLCBzaW5jZSBGRVRDSF9IRUFEIGlzIGFscmVhZHkgYSBwYXJlbnQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGZldGNoZWQgc3VicHJvaicgJworCWdpdCBtZXJnZSAtbSAibWVyZ2UgLXMgLW91cnMiIC1zIG91cnMgRkVUQ0hfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbWFpbi1zdWI1JyAnCisJY3JlYXRlICJzdWIgZGlyL21haW4tc3ViNSIgJiYKKwlnaXQgY29tbWl0IC1tICJtYWluLXN1YjUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBtYWluNicgJworCWNyZWF0ZSBtYWluNiAmJgorCWdpdCBjb21taXQgLW0gIm1haW42IGJvcmluZyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG1haW4tc3ViNycgJworCWNyZWF0ZSAic3ViIGRpci9tYWluLXN1YjciICYmCisJZ2l0IGNvbW1pdCAtbSAibWFpbi1zdWI3IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBuZXcgc3VicHJvaiBoaXN0b3J5JyAnCisJZ2l0IGZldGNoIC4vInN1YiBwcm9qIiBzdWIyICYmCisJZ2l0IGJyYW5jaCBzdWIyIEZFVENIX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgLS1tZXNzYWdlIHdvcmtzIGZvciBtZXJnZScgJworCWdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PSJzdWIgZGlyIiAtbSAiTWVyZ2VkIGNoYW5nZXMgZnJvbSBzdWJwcm9qZWN0IiBzdWIyICYmCisJY2hlY2tfZXF1YWwgJyciJChsYXN0X2NvbW1pdF9tZXNzYWdlKSInJyAiTWVyZ2VkIGNoYW5nZXMgZnJvbSBzdWJwcm9qZWN0IiAmJgorCXVuZG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgLS1tZXNzYWdlIGZvciBtZXJnZSB3b3JrcyB3aXRoIHNxdWFzaCB0b28nICcKKwlnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeCAic3ViIGRpciIgLW0gIk1lcmdlZCBjaGFuZ2VzIGZyb20gc3VicHJvamVjdCB1c2luZyBzcXVhc2giIC0tc3F1YXNoIHN1YjIgJiYKKwljaGVja19lcXVhbCAnJyIkKGxhc3RfY29tbWl0X21lc3NhZ2UpIicnICJNZXJnZWQgY2hhbmdlcyBmcm9tIHN1YnByb2plY3QgdXNpbmcgc3F1YXNoIiAmJgorCXVuZG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgbmV3IHN1YnByb2ogaGlzdG9yeSBpbnRvIHN1YmRpcicgJworCWdpdCBzdWJ0cmVlIG1lcmdlIC0tcHJlZml4PSJzdWIgZGlyIiBGRVRDSF9IRUFEICYmCisJZ2l0IGJyYW5jaCBwcmUtc3BsaXQgJiYKKwljaGVja19lcXVhbCAnJyIkKGxhc3RfY29tbWl0X21lc3NhZ2UpIicnICJNZXJnZSBjb21taXQgJyInIiciJChnaXQgcmV2LXBhcnNlIHN1YjIpIiciJyInIGludG8gbWFpbmxpbmUiICYmCisJdW5kbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayB0aGF0IHByZWZpeCBhcmd1bWVudCBpcyByZXF1aXJlZCBmb3Igc3BsaXQnICcKKwllY2hvICJZb3UgbXVzdCBwcm92aWRlIHRoZSAtLXByZWZpeCBvcHRpb24uIiA+IGV4cGVjdGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1YnRyZWUgc3BsaXQgPiBhY3R1YWwgMj4mMSAmJgorCXRlc3RfZGVidWcgInByaW50ZiAnIiciJ2V4cGVjdGVkOiAnIiciJyIgJiYKKwl0ZXN0X2RlYnVnICJjYXQgZXhwZWN0ZWQiICYmCisJdGVzdF9kZWJ1ZyAicHJpbnRmICciJyInYWN0dWFsOiAnIiciJyIgJiYKKwl0ZXN0X2RlYnVnICJjYXQgYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXJtIC1mIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayB0aGF0IHRoZSA8cHJlZml4PiBleGlzdHMgZm9yIGEgc3BsaXQnICcKKwllY2hvICInIiciJ25vbi1leGlzdGVudC1kaXJlY3RvcnknIiciJyIgZG9lcyBub3QgZXhpc3RcOyB1c2UgIiciJyInZ2l0IHN1YnRyZWUgYWRkJyInIiciID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeD1ub24tZXhpc3RlbnQtZGlyZWN0b3J5ID4gYWN0dWFsIDI+JjEgJiYKKwl0ZXN0X2RlYnVnICJwcmludGYgJyInIidleHBlY3RlZDogJyInIiciICYmCisJdGVzdF9kZWJ1ZyAiY2F0IGV4cGVjdGVkIiAmJgorCXRlc3RfZGVidWcgInByaW50ZiAnIiciJ2FjdHVhbDogJyInIiciICYmCisJdGVzdF9kZWJ1ZyAiY2F0IGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyMJcm0gLWYgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIC0tbWVzc2FnZSB3b3JrcyBmb3Igc3BsaXQrcmVqb2luJyAnCisJc3BsMT0nJyIkKGdpdCBzdWJ0cmVlIHNwbGl0IC0tYW5ub3RhdGU9JyInKiciJyAtLXByZWZpeCAic3ViIGRpciIgLS1vbnRvIEZFVENIX0hFQUQgLS1tZXNzYWdlICJTcGxpdCAmIHJlam9pbiIgLS1yZWpvaW4pIicnICYmCisJZ2l0IGJyYW5jaCBzcGwxICIkc3BsMSIgJiYKKwljaGVja19lcXVhbCAnJyIkKGxhc3RfY29tbWl0X21lc3NhZ2UpIicnICJTcGxpdCAmIHJlam9pbiIgJiYKKwl1bmRvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHNwbGl0IHdpdGggLS1icmFuY2gnICcKKwlzcGwxPSQoZ2l0IHN1YnRyZWUgc3BsaXQgLS1hbm5vdGF0ZT0nIicqJyInIC0tcHJlZml4ICJzdWIgZGlyIiAtLW9udG8gRkVUQ0hfSEVBRCAtLW1lc3NhZ2UgIlNwbGl0ICYgcmVqb2luIiAtLXJlam9pbikgJiYKKwl1bmRvICYmCisJZ2l0IHN1YnRyZWUgc3BsaXQgLS1hbm5vdGF0ZT0nIicqJyInIC0tcHJlZml4ICJzdWIgZGlyIiAtLW9udG8gRkVUQ0hfSEVBRCAtLWJyYW5jaCBzcGxpdGJyMSAmJgorCWNoZWNrX2VxdWFsICcnIiQoZ2l0IHJldi1wYXJzZSBzcGxpdGJyMSkiJycgIiRzcGwxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBoYXNoIG9mIHNwbGl0JyAnCisJc3BsMT0kKGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4ICJzdWIgZGlyIikgJiYKKwlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeCAic3ViIGRpciIgLS1icmFuY2ggc3BsaXRicjF0ZXN0ICYmCisJY2hlY2tfZXF1YWwgJyciJChnaXQgcmV2LXBhcnNlIHNwbGl0YnIxdGVzdCkiJycgIiRzcGwxIiAmJgorCW5ld19oYXNoPSQoZ2l0IHJldi1wYXJzZSBzcGxpdGJyMXRlc3R+MikgJiYKKwljaGVja19lcXVhbCAnJyIkbmV3X2hhc2giJycgIiRzdWJkaXJfaGFzaCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BsaXQgd2l0aCAtLWJyYW5jaCBmb3IgYW4gZXhpc3RpbmcgYnJhbmNoJyAnCisJc3BsMT0nJyIkKGdpdCBzdWJ0cmVlIHNwbGl0IC0tYW5ub3RhdGU9JyInKiciJyAtLXByZWZpeCAic3ViIGRpciIgLS1vbnRvIEZFVENIX0hFQUQgLS1tZXNzYWdlICJTcGxpdCAmIHJlam9pbiIgLS1yZWpvaW4pIicnICYmCisJdW5kbyAmJgorCWdpdCBicmFuY2ggc3BsaXRicjIgc3ViMSAmJgorCWdpdCBzdWJ0cmVlIHNwbGl0IC0tYW5ub3RhdGU9JyInKiciJyAtLXByZWZpeCAic3ViIGRpciIgLS1vbnRvIEZFVENIX0hFQUQgLS1icmFuY2ggc3BsaXRicjIgJiYKKwljaGVja19lcXVhbCAnJyIkKGdpdCByZXYtcGFyc2Ugc3BsaXRicjIpIicnICIkc3BsMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BsaXQgd2l0aCAtLWJyYW5jaCBmb3IgYW4gaW5jb21wYXRpYmxlIGJyYW5jaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJ0cmVlIHNwbGl0IC0tcHJlZml4ICJzdWIgZGlyIiAtLW9udG8gRkVUQ0hfSEVBRCAtLWJyYW5jaCBzdWJkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3BsaXQrcmVqb2luJyAnCisJc3BsMT0nJyIkKGdpdCBzdWJ0cmVlIHNwbGl0IC0tYW5ub3RhdGU9JyInKiciJyAtLXByZWZpeCAic3ViIGRpciIgLS1vbnRvIEZFVENIX0hFQUQgLS1tZXNzYWdlICJTcGxpdCAmIHJlam9pbiIgLS1yZWpvaW4pIicnICYmCisJdW5kbyAmJgorCWdpdCBzdWJ0cmVlIHNwbGl0IC0tYW5ub3RhdGU9JyInKiciJyAtLXByZWZpeCAic3ViIGRpciIgLS1vbnRvIEZFVENIX0hFQUQgLS1yZWpvaW4gJiYKKwljaGVja19lcXVhbCAnJyIkKGxhc3RfY29tbWl0X21lc3NhZ2UpIicnICJTcGxpdCAnIiciJ3N1YiBkaXIvJyInIicgaW50byBjb21taXQgJyInIiciJHNwbDEiJyInIiciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBtYWluLXN1YjgnICcKKwljcmVhdGUgInN1YiBkaXIvbWFpbi1zdWI4IiAmJgorCWdpdCBjb21taXQgLW0gIm1haW4tc3ViOCIKKycKKworIyBUbyB0aGUgc3VicHJvamVjdCEKK2NkIC4vInN1YiBwcm9qIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBzcGxpdCBpbnRvIHN1YnByb2onICcKKwlnaXQgZmV0Y2ggLi4gc3BsMSAmJgorCWdpdCBicmFuY2ggc3BsMSBGRVRDSF9IRUFEICYmCisJZ2l0IG1lcmdlIEZFVENIX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHN1YjknICcKKwljcmVhdGUgc3ViOSAmJgorCWdpdCBjb21taXQgLW0gInN1YjkiCisnCisKKyMgQmFjayB0byBtYWlubGluZQorY2QgLi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgZm9yIHN1YjgnICcKKwlzcGxpdDI9JyciJChnaXQgc3VidHJlZSBzcGxpdCAtLWFubm90YXRlPSciJyonIicgLS1wcmVmaXggInN1YiBkaXIvIiAtLXJlam9pbikiJycgJiYKKwlnaXQgYnJhbmNoIHNwbGl0MiAiJHNwbGl0MiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG1haW4tc3ViMTAnICcKKwljcmVhdGUgInN1YiBkaXIvbWFpbi1zdWIxMCIgJiYKKwlnaXQgY29tbWl0IC1tICJtYWluLXN1YjEwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCBmb3Igc3ViMTAnICcKKwlzcGwzPScnIiQoZ2l0IHN1YnRyZWUgc3BsaXQgLS1hbm5vdGF0ZT0nIicqJyInIC0tcHJlZml4ICJzdWIgZGlyIiAtLXJlam9pbikiJycgJiYKKwlnaXQgYnJhbmNoIHNwbDMgIiRzcGwzIgorJworCisjIFRvIHRoZSBzdWJwcm9qZWN0IQorY2QgLi8ic3ViIHByb2oiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHNwbGl0IGludG8gc3VicHJvaicgJworCWdpdCBmZXRjaCAuLiBzcGwzICYmCisJZ2l0IGJyYW5jaCBzcGwzIEZFVENIX0hFQUQgJiYKKwlnaXQgbWVyZ2UgRkVUQ0hfSEVBRCAmJgorCWdpdCBicmFuY2ggc3VicHJvai1tZXJnZS1zcGwzCisnCisKK2Noa209Im1haW40CittYWluNiIKK2Noa21zPSJtYWluLXN1YjEwCittYWluLXN1YjUKK21haW4tc3ViNworbWFpbi1zdWI4IgorY2hrbXNfc3ViPSQoY2F0IDw8VFhUIHwgc2VkICdzLF4sc3ViIGRpci8sJworJGNoa21zCitUWFQKKykKK2Noa3M9InN1YjEKK3N1YjIKK3N1YjMKK3N1YjkiCitjaGtzX3N1Yj0kKGNhdCA8PFRYVCB8IHNlZCAncyxeLHN1YiBkaXIvLCcKKyRjaGtzCitUWFQKKykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlIGV4YWN0bHkgdGhlIHJpZ2h0IHNldCBvZiBmaWxlcyBlbmRzIHVwIGluIHRoZSBzdWJwcm9qJyAnCisJc3ViZmlsZXM9IiQoZ2l0IGxzLWZpbGVzKSIgJiYKKwljaGVja19lcXVhbCAiJHN1YmZpbGVzIiAiJGNoa21zCiskY2hrcyIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSB0aGUgc3VicHJvaiBoaXN0b3J5ICpvbmx5KiBjb250YWlucyBjb21taXRzIHRoYXQgYWZmZWN0IHRoZSBzdWJkaXInICcKKwlhbGxjaGFuZ2VzPScnIiQoZ2l0IGxvZyAtLW5hbWUtb25seSAtLXByZXR0eT1mb3JtYXQ6JyInJyInIHwgc29ydCB8IHNlZCAiL14kL2QiKSInJyAmJgorCWNoZWNrX2VxdWFsICIkYWxsY2hhbmdlcyIgIiRjaGttcworJGNoa3MiCisnCisKKyMgQmFjayB0byBtYWlubGluZQorY2QgLi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCBmcm9tIHN1YnByb2onICcKKwlnaXQgZmV0Y2ggLi8ic3ViIHByb2oiIHN1YnByb2otbWVyZ2Utc3BsMyAmJgorCWdpdCBicmFuY2ggc3VicHJvai1tZXJnZS1zcGwzIEZFVENIX0hFQUQgJiYKKwlnaXQgc3VidHJlZSBwdWxsIC0tcHJlZml4PSJzdWIgZGlyIiAuLyJzdWIgcHJvaiIgc3VicHJvai1tZXJnZS1zcGwzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSBleGFjdGx5IHRoZSByaWdodCBzZXQgb2YgZmlsZXMgZW5kcyB1cCBpbiB0aGUgbWFpbmxpbmUnICcKKwltYWluZmlsZXM9JChnaXQgbHMtZmlsZXMpICYmCisJY2hlY2tfZXF1YWwgIiRtYWluZmlsZXMiICIkY2hrbQorJGNoa21zX3N1YgorJGNoa3Nfc3ViIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgZWFjaCBmaWxlbmFtZSBjaGFuZ2VkIGV4YWN0bHkgb25jZSBpbiB0aGUgZW50aXJlIGhpc3RvcnknICcKKwkjIG1haW4tc3ViPz8gYW5kIC9zdWJkaXIvbWFpbi1zdWI/PyBib3RoIGNoYW5nZSwgYmVjYXVzZSB0aG9zZSBhcmUgdGhlCisJIyBjaGFuZ2VzIHRoYXQgd2VyZSBzcGxpdCBpbnRvIHRoZWlyIG93biBoaXN0b3J5LiAgQW5kIHN1YmRpci9zdWI/PyBuZXZlcgorCSMgY2hhbmdlLCBzaW5jZSB0aGV5IHdlcmUgKm9ubHkqIGNoYW5nZWQgaW4gdGhlIHN1YnRyZWUgYnJhbmNoLgorCWFsbGNoYW5nZXM9JyciJChnaXQgbG9nIC0tbmFtZS1vbmx5IC0tcHJldHR5PWZvcm1hdDonIicnIicgfCBzb3J0IHwgc2VkICIvXiQvZCIpIicnICYmCisJY2hlY2tfZXF1YWwgIiRhbGxjaGFuZ2VzIiAnJyIkKGNhdCA8PFRYVCB8IHNvcnQKKyRjaGttcworJGNoa20KKyRjaGtzCiskY2hrbXNfc3ViCitUWFQKKykiJycKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlIHRoZSAtLXJlam9pbiBjb21taXRzIG5ldmVyIG1ha2UgaXQgaW50byBzdWJwcm9qJyAnCisJY2hlY2tfZXF1YWwgJyciJChnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDonIiclcyciJyBIRUFEXjIgfCBncmVwIC1pIHNwbGl0KSInJyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIHN1cmUgbm8gImdpdCBzdWJ0cmVlIiB0YWdnZWQgY29tbWl0cyBtYWtlIGl0IGludG8gc3VicHJvaicgJworCSMgVGhleSBhcmUgbWVhbmluZ2xlc3MgdG8gc3VicHJvaiBzaW5jZSBvbmUgc2lkZSBvZiB0aGUgbWVyZ2UgcmVmZXJzIHRvIHRoZSBtYWlubGluZQorCWNoZWNrX2VxdWFsICcnIiQoZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JyInJXMlbiViJyInIEhFQUReMiB8IGdyZXAgImdpdC1zdWJ0cmVlLio6IikiJycgIiIKKycKKworIyBwcmVwYXJlIHNlY29uZCBwYWlyIG9mIHJlcG9zaXRvcmllcworbWtkaXIgdGVzdDIKK2NkIHRlc3QyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgbWFpbicgJworCXRlc3RfY3JlYXRlX3JlcG8gbWFpbgorJworCitjZCBtYWluCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBtYWluMScgJworCWNyZWF0ZSBtYWluMSAmJgorCWdpdCBjb21taXQgLW0gIm1haW4xIgorJworCitjZCAuLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHN1YicgJworCXRlc3RfY3JlYXRlX3JlcG8gc3ViCisnCisKK2NkIHN1YgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3ViMicgJworCWNyZWF0ZSBzdWIyICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViMiIKKycKKworY2QgLi4vbWFpbgorCisjIGNoZWNrIGlmIHNwbGl0IGNhbiBmaW5kIHByb3BlciBiYXNlIHdpdGhvdXQgLS1vbnRvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzdWIgYXMgc3ViZGlyIGluIG1haW4nICcKKwlnaXQgZmV0Y2ggLi4vc3ViIG1hc3RlciAmJgorCWdpdCBicmFuY2ggc3ViMiBGRVRDSF9IRUFEICYmCisJZ2l0IHN1YnRyZWUgYWRkIC0tcHJlZml4ICJzdWIgZGlyIiBzdWIyCisnCisKK2NkIC4uL3N1YgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3ViMycgJworCWNyZWF0ZSBzdWIzICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViMyIKKycKKworY2QgLi4vbWFpbgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBmcm9tIHN1YicgJworCWdpdCBmZXRjaCAuLi9zdWIgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCBzdWIzIEZFVENIX0hFQUQgJiYKKwlnaXQgc3VidHJlZSBtZXJnZSAtLXByZWZpeCAic3ViIGRpciIgc3ViMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbWFpbi1zdWI0JyAnCisJY3JlYXRlICJzdWIgZGlyL21haW4tc3ViNCIgJiYKKwlnaXQgY29tbWl0IC1tICJtYWluLXN1YjQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwbGl0IGZvciBtYWluLXN1YjQgd2l0aG91dCAtLW9udG8nICcKKwlnaXQgc3VidHJlZSBzcGxpdCAtLXByZWZpeCAic3ViIGRpciIgLS1icmFuY2ggbWFpbnN1YjQKKycKKworIyBhdCB0aGlzIHBvaW50LCB0aGUgbmV3IGNvbW1pdCBwYXJlbnQgc2hvdWxkIGJlIHN1YjMgaWYgaXQgaXMgbm90LAorIyBzb21ldGhpbmcgd2VudCB3cm9uZyAodGhlICJuZXdwYXJlbnQiIG9mICJtYXN0ZXJ+IiBjb21taXQgc2hvdWxkCisjIGhhdmUgYmVlbiBzdWIzLCBidXQgaXQgd2FzIG5vdCwgYmVjYXVzZSBpdHMgY2FjaGUgd2FzIG5vdCBzZXQgdG8KKyMgaXRzZWxmKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0aGF0IHRoZSBjb21taXQgcGFyZW50IGlzIHN1YjMnICcKKwljaGVja19lcXVhbCAnJyIkKGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVQIC0xIG1haW5zdWI0KSInJyAnJyIkKGdpdCByZXYtcGFyc2Ugc3ViMykiJycKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG1haW4tc3ViNScgJworCW1rZGlyIHN1YmRpcjIgJiYKKwljcmVhdGUgc3ViZGlyMi9tYWluLXN1YjUgJiYKKwlnaXQgY29tbWl0IC1tICJtYWluLXN1YjUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwbGl0IGZvciBtYWluLXN1YjUgd2l0aG91dCAtLW9udG8nICcKKwkjIGFsc28gdGVzdCB0aGF0IHdlIHN0aWxsIGNhbiBzcGxpdCBvdXQgYW4gZW50aXJlbHkgbmV3IHN1YnRyZWUKKwkjIGlmIHRoZSBwYXJlbnQgb2YgdGhlIGZpcnN0IGNvbW1pdCBpbiB0aGUgdHJlZSBpcyBub3QgZW1wdHksCisJIyB0aGVuIHRoZSBuZXcgc3VidHJlZSBoYXMgYWNjaWRlbnRhbGx5IGJlZW4gYXR0YWNoZWQgdG8gc29tZXRoaW5nCisJZ2l0IHN1YnRyZWUgc3BsaXQgLS1wcmVmaXggc3ViZGlyMiAtLWJyYW5jaCBtYWluc3ViNSAmJgorCWNoZWNrX2VxdWFsICcnIiQoZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JVAgLTEgbWFpbnN1YjUpIicnICIiCisnCisKKyMgbWFrZSBzdXJlIG5vIHBhdGNoIGNoYW5nZXMgbW9yZSB0aGFuIG9uZSBmaWxlLiAgVGhlIG9yaWdpbmFsIHNldCBvZiBjb21taXRzCisjIGNoYW5nZWQgb25seSBvbmUgZmlsZSBlYWNoLiAgQSBtdWx0aS1maWxlIGNoYW5nZSB3b3VsZCBpbXBseSB0aGF0IHdlIHBydW5lZAorIyBjb21taXRzIHRvbyBhZ2dyZXNzaXZlbHkuCitqb2luY29tbWl0cygpCit7CisJY29tbWl0PQorCWFsbD0KKwl3aGlsZSByZWFkIHggeTsgZG8KKwkJI2VjaG8gInskeH0iID4mMgorCQlpZiBbIC16ICIkeCIgXTsgdGhlbgorCQkJY29udGludWUKKwkJZWxpZiBbICIkeCIgPSAiY29tbWl0OiIgXTsgdGhlbgorCQkJaWYgWyAtbiAiJGNvbW1pdCIgXTsgdGhlbgorCQkJCWVjaG8gIiRjb21taXQgJGFsbCIKKwkJCQlhbGw9CisJCQlmaQorCQkJY29tbWl0PSIkeSIKKwkJZWxzZQorCQkJYWxsPSIkYWxsICR5IgorCQlmaQorCWRvbmUKKwllY2hvICIkY29tbWl0ICRhbGwiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBvbmUgZmlsZSBjaGFuZ2UgcGVyIGNvbW1pdCcgJworCXg9ICYmCisJbGlzdD0nJyIkKGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiciJ2NvbW1pdDogJUgnIicgfCBqb2luY29tbWl0cykiJycgJiYKKyMJdGVzdF9kZWJ1ZyAiZWNobyBIRVJFIiAmJgorIwl0ZXN0X2RlYnVnICJlY2hvICcnIiRsaXN0IicnIiAmJgorCShnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDonIidjb21taXQ6ICVIJyInIHwgam9pbmNvbW1pdHMgfAorCSgJd2hpbGUgcmVhZCBjb21taXQgYSBiOyBkbworCQkJdGVzdF9kZWJ1ZyAiZWNobyBWZXJpZnlpbmcgY29tbWl0ICInJyIkY29tbWl0IicnCisJCQl0ZXN0X2RlYnVnICJlY2hvIGE6ICInJyIkYSInJworCQkJdGVzdF9kZWJ1ZyAiZWNobyBiOiAiJyciJGIiJycKKwkJCWNoZWNrX2VxdWFsICIkYiIgIiIKKwkJCXg9MQorCQlkb25lCisJCWNoZWNrX2VxdWFsICIkeCIgMQorCSkpCisnCisKKyMgdGVzdCBwdXNoCisKK2NkIC4uLy4uCisKK21rZGlyIHRlc3QtcHVzaAorCitjZCB0ZXN0LXB1c2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBtYWluJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBtYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgc3ViJyAnCisJdGVzdF9jcmVhdGVfcmVwbyAic3ViIHByb2plY3QiCisnCisKK2NkIC4vInN1YiBwcm9qZWN0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc3VicHJvamVjdCcgJworCWNyZWF0ZSAic3ViIHByb2plY3QiICYmCisJZ2l0IGNvbW1pdCAtbSAiU3ViIHByb2plY3Q6IDEiICYmCisJZ2l0IGJyYW5jaCBzdWItYnJhbmNoLTEKKycKKworY2QgLi4vbWFpbgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGZpcnN0IGNvbW1pdCBhbmQgYWRkIHN1YnByb2plY3QnICcKKwljcmVhdGUgIm1haW4tMSIgJiYKKwlnaXQgY29tbWl0IC1tICJtYWluOiAxIiAmJgorCWdpdCBzdWJ0cmVlIGFkZCAiLi4vc3ViIHByb2plY3QiIC0tcHJlZml4ICJzdWIgZGlyIiAtLW1lc3NhZ2UgIkFkZGVkIHN1YnByb2plY3QiIHN1Yi1icmFuY2gtMSAmJgorCWNoZWNrX2VxdWFsICIkKGxhc3RfY29tbWl0X21lc3NhZ2UpIiAiQWRkZWQgc3VicHJvamVjdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzZWNvbmQgY29tbWl0IHRvIGEgc3VicHJvamVjdCBmaWxlIGFuZCBwdXNoIGl0IGludG8gYSBzdWIgcHJvamVjdCcgJworCWNyZWF0ZSAic3ViIGRpci9zdWIxIiAmJgorCWdpdCBjb21taXQgLW0gIlN1YiBwcm9qZWN0OiAyIiAmJgorCWdpdCBzdWJ0cmVlIHB1c2ggIi4uL3N1YiBwcm9qZWN0IiAtLXByZWZpeCAic3ViIGRpciIgc3ViLWJyYW5jaC0xCisnCisKK2NkIC4uLyJzdWIgcHJvamVjdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGVzdCBzZWNvbmQgY29tbWl0IGlzIHB1c2hlZCcgJworCWdpdCBjaGVja291dCBzdWItYnJhbmNoLTEgJiYKKwljaGVja19lcXVhbCAiJChsYXN0X2NvbW1pdF9tZXNzYWdlKSIgIlN1YiBwcm9qZWN0OiAyIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3VidHJlZS90b2RvIGIvY29udHJpYi9zdWJ0cmVlL3RvZG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U0NGIwMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3VidHJlZS90b2RvCkBAIC0wLDAgKzEsNTAgQEAKKworCWRlbGV0ZSB0ZW1wZGlyCisKKwknZ2l0IHN1YnRyZWUgcmVqb2luJyBvcHRpb24gdG8gZG8gdGhlIHNhbWUgYXMgLS1yZWpvaW4sIGVnLiBhZnRlciBhCisJICByZWJhc2UKKworCS0tcHJlZml4IGRvZXNuJ3QgZm9yY2UgdGhlIHN1YnRyZWUgY29ycmVjdGx5IGluIG1lcmdlL3B1bGw6CisJIi1zIHN1YnRyZWUiIHNob3VsZCBiZSBnaXZlbiBhbiBleHBsaWNpdCBzdWJ0cmVlIG9wdGlvbj8KKwkJVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgd2F5IHRvIGRvIHRoaXMuICBXZSdkIGhhdmUgdG8KKwkJcGF0Y2ggZ2l0LW1lcmdlLXN1YnRyZWUuICBVZ2guCisJCShidXQgd2UgY291bGQgYXZvaWQgdGhpcyBwcm9ibGVtIGJ5IGdlbmVyYXRpbmcgc3F1YXNoZXMgd2l0aAorCQlleGFjdGx5IHRoZSByaWdodCBzdWJ0cmVlIHN0cnVjdHVyZSwgcmF0aGVyIHRoYW4gdXNpbmcKKwkJc3VidHJlZSBtZXJnZS4uLikKKworCWFkZCBhICdwdXNoJyBzdWJjb21tYW5kIHRvIHBhcmFsbGVsICdwdWxsJworCQorCWFkZCBhICdsb2cnIHN1YmNvbW1hbmQgdG8gc2VlIHdoYXQncyBuZXcgaW4gYSBzdWJ0cmVlPworCisJYWRkIHRvLXN1Ym1vZHVsZSBhbmQgZnJvbS1zdWJtb2R1bGUgY29tbWFuZHMKKworCWF1dG9tYXRlZCB0ZXN0cyBmb3IgLS1zcXVhc2ggc3R1ZmYKKworCSJhZGQiIGNvbW1hbmQgbm9uLW9idmlvdXNseSByZXF1aXJlcyBhIGNvbW1pdGlkOyB3b3VsZCBiZSBlYXNpZXIgaWYKKwkJaXQgaGFkIGEgInB1bGwiIHNvcnQgb2YgbW9kZSBpbnN0ZWFkCisKKwkicHVsbCIgYW5kICJtZXJnZSIgY29tbWFuZHMgc2hvdWxkIGZhaWwgaWYgeW91J3ZlIG5ldmVyIG1lcmdlZAorCQl0aGF0IC0tcHJlZml4IGJlZm9yZQorCQkKKwlkb2NzIHNob3VsZCBwcm92aWRlIGFuIGV4YW1wbGUgb2YgImFkZCIKKwkKKwlub3RlIHRoYXQgdGhlIGluaXRpYWwgc3BsaXQgZG9lc24ndCAqaGF2ZSogdG8gaGF2ZSBhIGNvbW1pdGlkCisJCXNwZWNpZmllZC4uLiB0aGF0J3MganVzdCBhbiBvcHRpbWl6YXRpb24KKworCWlmIHlvdSB0cnkgdG8gYWRkIChvciBtYXliZSBtZXJnZT8pIHdpdGggYW4gaW52YWxpZCBjb21taXRpZCwgeW91CisJCWdldCBhIG1pc2xlYWRpbmcgInByZWZpeCBtdXN0IGVuZCB3aXRoIC8iIG1lc3NhZ2UgZnJvbQorCQlvbmUgb2YgdGhlIG90aGVyIGdpdCB0b29scyB0aGF0IGdpdC1zdWJ0cmVlIGNhbGxzLiAgU2hvdWxkCisJCWRldGVjdCB0aGlzIHNpdHVhdGlvbiBhbmQgcHJpbnQgdGhlICpyZWFsKiBwcm9ibGVtLgorCQorCSJwdWxsIC0tc3F1YXNoIiBzaG91bGQgZG8gZmV0Y2gtc3ludGhlc2l6ZS1tZXJnZSwgYnV0IGluc3RlYWQganVzdAorCQlkb2VzICJwdWxsIiBkaXJlY3RseSwgd2hpY2ggZG9lc24ndCB3b3JrIGF0IGFsbC4KKworCW1ha2UgYSAnZm9yY2UtdXBkYXRlJyB0aGF0IGRvZXMgd2hhdCAnYWRkJyBkb2VzIGV2ZW4gaWYgdGhlIHN1YnRyZWUKKwkJYWxyZWFkeSBleGlzdHMuICBUaGF0IHdheSB3ZSBjYW4gaGVscCBwZW9wbGUgd2hvIGltcG9ydGVkCisJCXN1YnRyZWVzICJpbmNvcnJlY3RseSIgKGVnLiBieSBqdXN0IGNvcHlpbmcgaW4gdGhlIGZpbGVzKSBpbgorCQl0aGUgcGFzdC4KKworCWd1ZXNzIC0tcHJlZml4IGF1dG9tYXRpY2FsbHkgaWYgcG9zc2libGUgYmFzZWQgb24gcHdkCisKKwltYWtlIGEgJ2dpdCBzdWJ0cmVlIGdyYWZ0cycgdGhhdCBhdXRvbWF0aWNhbGx5IGV4cGFuZHMgLS1zcXVhc2gnZAorCQljb21taXRzIHNvIHlvdSBjYW4gc2VlIHRoZSBmdWxsIGhpc3RvcnkgaWYgeW91IHdhbnQgaXQuCmRpZmYgLS1naXQgYS9jb250cmliL3N2bi1mZS8uZ2l0aWdub3JlIGIvY29udHJpYi9zdm4tZmUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmE3NzkxCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdm4tZmUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDQgQEAKKy8qLnhtbAorLyouMQorLyouaHRtbAorL3N2bi1mZQpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdm4tZmUvTWFrZWZpbGUgYi9jb250cmliL3N2bi1mZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODY1MWFhCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdm4tZmUvTWFrZWZpbGUKQEAgLTAsMCArMSwxMDUgQEAKK2FsbDo6IHN2bi1mZSRYCisKK0NDID0gY2MKK1JNID0gcm0gLWYKK01WID0gbXYKKworQ0ZMQUdTID0gLWcgLU8yIC1XYWxsCitMREZMQUdTID0KK0VYVExJQlMgPSAtbHoKKworaW5jbHVkZSAuLi8uLi9jb25maWcubWFrLnVuYW1lCistaW5jbHVkZSAuLi8uLi9jb25maWcubWFrLmF1dG9nZW4KKy1pbmNsdWRlIC4uLy4uL2NvbmZpZy5tYWsKKworaWZlcSAoJCh1bmFtZV9TKSxEYXJ3aW4pCisJaWZuZGVmIE5PX0ZJTksKKwkJaWZlcSAoJChzaGVsbCB0ZXN0IC1kIC9zdy9saWIgJiYgZWNobyB5KSx5KQorCQkJQ0ZMQUdTICs9IC1JL3N3L2luY2x1ZGUKKwkJCUxERkxBR1MgKz0gLUwvc3cvbGliCisJCWVuZGlmCisJZW5kaWYKKwlpZm5kZWYgTk9fREFSV0lOX1BPUlRTCisJCWlmZXEgKCQoc2hlbGwgdGVzdCAtZCAvb3B0L2xvY2FsL2xpYiAmJiBlY2hvIHkpLHkpCisJCQlDRkxBR1MgKz0gLUkvb3B0L2xvY2FsL2luY2x1ZGUKKwkJCUxERkxBR1MgKz0gLUwvb3B0L2xvY2FsL2xpYgorCQllbmRpZgorCWVuZGlmCitlbmRpZgorCitpZm5kZWYgTk9fT1BFTlNTTAorCUVYVExJQlMgKz0gLWxzc2wKKwlpZmRlZiBORUVEU19DUllQVE9fV0lUSF9TU0wKKwkJRVhUTElCUyArPSAtbGNyeXB0bworCWVuZGlmCitlbmRpZgorCitpZm5kZWYgTk9fUFRIUkVBRFMKKwlDRkxBR1MgKz0gJChQVEhSRUFEU19DRkxBR1MpCisJRVhUTElCUyArPSAkKFBUSFJFQURfTElCUykKK2VuZGlmCisKK2lmZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQorCUNGTEFHUyArPSAtREhBVkVfQ0xPQ0tfR0VUVElNRQorCUVYVExJQlMgKz0gLWxydAorZW5kaWYKKworaWZkZWYgTkVFRFNfTElCSUNPTlYKKwlFWFRMSUJTICs9IC1saWNvbnYKK2VuZGlmCisKK0dJVF9MSUIgPSAuLi8uLi9saWJnaXQuYQorVkNTU1ZOX0xJQiA9IC4uLy4uL3Zjcy1zdm4vbGliLmEKK1hESUZGX0xJQiA9IC4uLy4uL3hkaWZmL2xpYi5hCisKK0xJQlMgPSAkKFZDU1NWTl9MSUIpICQoR0lUX0xJQikgJChYRElGRl9MSUIpCisKK1FVSUVUX1NVQkRJUjAgPSArJChNQUtFKSAtQyAjIHNwYWNlIHRvIHNlcGFyYXRlIC1DIGFuZCBzdWJkaXIKK1FVSUVUX1NVQkRJUjEgPQorCitpZm5lcSAoJChmaW5kc3RyaW5nICQoTUFLRUZMQUdTKSx3KSx3KQorUFJJTlRfRElSID0gLS1uby1wcmludC1kaXJlY3RvcnkKK2Vsc2UgIyAibWFrZSAtdyIKK05PX1NVQkRJUiA9IDoKK2VuZGlmCisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHMpLHMpCitpZm5kZWYgVgorCVFVSUVUX0NDICAgICAgPSBAZWNobyAnICAgJyBDQyAkQDsKKwlRVUlFVF9MSU5LICAgID0gQGVjaG8gJyAgICcgTElOSyAkQDsKKwlRVUlFVF9TVUJESVIwID0gK0BzdWJkaXI9CisJUVVJRVRfU1VCRElSMSA9IDskKE5PX1NVQkRJUikgZWNobyAnICAgJyBTVUJESVIgJCRzdWJkaXI7IFwKKwkgICAgICAgICAgICAgICAgJChNQUtFKSAkKFBSSU5UX0RJUikgLUMgJCRzdWJkaXIKK2VuZGlmCitlbmRpZgorCitzdm4tZmUkWDogc3ZuLWZlLm8gJChWQ1NTVk5fTElCKSAkKFhESUZGX0xJQikgJChHSVRfTElCKQorCSQoUVVJRVRfTElOSykkKENDKSAkKENGTEFHUykgJChMREZMQUdTKSAkKEVYVExJQlMpIC1vICRAIHN2bi1mZS5vICQoTElCUykKKworc3ZuLWZlLm86IHN2bi1mZS5jIC4uLy4uL3Zjcy1zdm4vc3ZuZHVtcC5oCisJJChRVUlFVF9DQykkKENDKSAkKENGTEFHUykgLUkuLi8uLi92Y3Mtc3ZuIC1vICQqLm8gLWMgJDwKKworc3ZuLWZlLmh0bWw6IHN2bi1mZS50eHQKKwkkKFFVSUVUX1NVQkRJUjApLi4vLi4vRG9jdW1lbnRhdGlvbiAkKFFVSUVUX1NVQkRJUjEpIFwKKwkJTUFOX1RYVD0uLi9jb250cmliL3N2bi1mZS9zdm4tZmUudHh0IFwKKwkJLi4vY29udHJpYi9zdm4tZmUvJEAKKworc3ZuLWZlLjE6IHN2bi1mZS50eHQKKwkkKFFVSUVUX1NVQkRJUjApLi4vLi4vRG9jdW1lbnRhdGlvbiAkKFFVSUVUX1NVQkRJUjEpIFwKKwkJTUFOX1RYVD0uLi9jb250cmliL3N2bi1mZS9zdm4tZmUudHh0IFwKKwkJLi4vY29udHJpYi9zdm4tZmUvJEAKKwkkKE1WKSAuLi8uLi9Eb2N1bWVudGF0aW9uL3N2bi1mZS4xIC4KKworLi4vLi4vdmNzLXN2bi9saWIuYTogRk9SQ0UKKwkkKFFVSUVUX1NVQkRJUjApLi4vLi4gJChRVUlFVF9TVUJESVIxKSB2Y3Mtc3ZuL2xpYi5hCisKKy4uLy4uL3hkaWZmL2xpYi5hOiBGT1JDRQorCSQoUVVJRVRfU1VCRElSMCkuLi8uLiAkKFFVSUVUX1NVQkRJUjEpIHhkaWZmL2xpYi5hCisKKy4uLy4uL2xpYmdpdC5hOiBGT1JDRQorCSQoUVVJRVRfU1VCRElSMCkuLi8uLiAkKFFVSUVUX1NVQkRJUjEpIGxpYmdpdC5hCisKK2NsZWFuOgorCSQoUk0pIHN2bi1mZSRYIHN2bi1mZS5vIHN2bi1mZS5odG1sIHN2bi1mZS54bWwgc3ZuLWZlLjEKKworLlBIT05ZOiBhbGwgY2xlYW4gRk9SQ0UKZGlmZiAtLWdpdCBhL2NvbnRyaWIvc3ZuLWZlL3N2bi1mZS5jIGIvY29udHJpYi9zdm4tZmUvc3ZuLWZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2MzUwNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3ZuLWZlL3N2bi1mZS5jCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisgKiBZb3UgbWF5IGZyZWVseSB1c2UsIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHJlbGljZW5zZSBpdC4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAic3ZuZHVtcC5oIgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaWYgKHN2bmR1bXBfaW5pdChOVUxMKSkKKwkJcmV0dXJuIDE7CisJc3ZuZHVtcF9yZWFkKChhcmdjID4gMSkgPyBhcmd2WzFdIDogTlVMTCwgInJlZnMvaGVhZHMvbWFzdGVyIiwKKwkJCSJyZWZzL25vdGVzL3N2bi9yZXZzIik7CisJc3ZuZHVtcF9kZWluaXQoKTsKKwlzdm5kdW1wX3Jlc2V0KCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb250cmliL3N2bi1mZS9zdm4tZmUudHh0IGIvY29udHJpYi9zdm4tZmUvc3ZuLWZlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzQyNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdm4tZmUvc3ZuLWZlLnR4dApAQCAtMCwwICsxLDcxIEBACitzdm4tZmUoMSkKKz09PT09PT09PQorCitOQU1FCistLS0tCitzdm4tZmUgLSBjb252ZXJ0IGFuIFNWTiAiZHVtcGZpbGUiIHRvIGEgZmFzdC1pbXBvcnQgc3RyZWFtCisKK1NZTk9QU0lTCistLS0tLS0tLQorW3ZlcnNlXQorbWtmaWZvIGJhY2tjaGFubmVsICYmCitzdm5hZG1pbiBkdW1wIC0tZGVsdGFzIFJFUE8gfAorCXN2bi1mZSBbdXJsXSAzPGJhY2tjaGFubmVsIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD0zIDM+YmFja2NoYW5uZWwKKworREVTQ1JJUFRJT04KKy0tLS0tLS0tLS0tCisKK0NvbnZlcnRzIGEgU3VidmVyc2lvbiBkdW1wZmlsZSBpbnRvIGlucHV0IHN1aXRhYmxlIGZvcgorZ2l0LWZhc3QtaW1wb3J0KDEpIGFuZCBzaW1pbGFyIGltcG9ydGVycy4gUkVQTyBpcyBhIHBhdGggdG8gYQorU3VidmVyc2lvbiByZXBvc2l0b3J5IG1pcnJvcmVkIG9uIHRoZSBsb2NhbCBkaXNrLiBSZW1vdGUgU3VidmVyc2lvbgorcmVwb3NpdG9yaWVzIGNhbiBiZSBtaXJyb3JlZCBvbiBsb2NhbCBkaXNrIHVzaW5nIHRoZSBgc3Zuc3luY2AKK2NvbW1hbmQuCisKK05vdGU6IHRoaXMgdG9vbCBpcyB2ZXJ5IHlvdW5nLiAgVGhlIGRldGFpbHMgb2YgaXRzIGNvbW1hbmRsaW5lCitpbnRlcmZhY2UgbWF5IGNoYW5nZSBpbiBiYWNrd2FyZCBpbmNvbXBhdGlibGUgd2F5cy4KKworSU5QVVQgRk9STUFUCistLS0tLS0tLS0tLS0KK1N1YnZlcnNpb24ncyByZXBvc2l0b3J5IGR1bXAgZm9ybWF0IGlzIGRvY3VtZW50ZWQgaW4gZnVsbCBpbgorYG5vdGVzL2R1bXAtbG9hZC1mb3JtYXQudHh0YCBmcm9tIHRoZSBTdWJ2ZXJzaW9uIHNvdXJjZSB0cmVlLgorRmlsZXMgaW4gdGhpcyBmb3JtYXQgY2FuIGJlIGdlbmVyYXRlZCB1c2luZyB0aGUgJ3N2bmFkbWluIGR1bXAnIG9yCisnc3ZrIGFkbWluIGR1bXAnIGNvbW1hbmQuCisKK09VVFBVVCBGT1JNQVQKKy0tLS0tLS0tLS0tLS0KK1RoZSBmYXN0LWltcG9ydCBmb3JtYXQgaXMgZG9jdW1lbnRlZCBieSB0aGUgZ2l0LWZhc3QtaW1wb3J0KDEpCittYW51YWwgcGFnZS4KKworTk9URVMKKy0tLS0tCitTdWJ2ZXJzaW9uIGR1bXBzIGRvIG5vdCByZWNvcmQgYSBzZXBhcmF0ZSBhdXRob3IgYW5kIGNvbW1pdHRlciBmb3IKK2VhY2ggcmV2aXNpb24sIG5vciBkbyB0aGV5IHJlY29yZCBhIHNlcGFyYXRlIGRpc3BsYXkgbmFtZSBhbmQgZW1haWwKK2FkZHJlc3MgZm9yIGVhY2ggYXV0aG9yLiAgTGlrZSBnaXQtc3ZuKDEpLCAnc3ZuLWZlJyB3aWxsIHVzZSB0aGUgbmFtZQorCistLS0tLS0tLS0KK3VzZXIgPHVzZXJAVVVJRD4KKy0tLS0tLS0tLQorCithcyBjb21taXR0ZXIsIHdoZXJlICd1c2VyJyBpcyB0aGUgdmFsdWUgb2YgdGhlIGBzdm46YXV0aG9yYCBwcm9wZXJ0eQorYW5kICdVVUlEJyB0aGUgcmVwb3NpdG9yeSdzIGlkZW50aWZpZXIuCisKK1RvIHN1cHBvcnQgaW5jcmVtZW50YWwgaW1wb3J0cywgJ3N2bi1mZScgcHV0cyBhIGBnaXQtc3ZuLWlkYCBsaW5lIGF0Cit0aGUgZW5kIG9mIGVhY2ggY29tbWl0IGxvZyBtZXNzYWdlIGlmIHBhc3NlZCBhIFVSTCBvbiB0aGUgY29tbWFuZAorbGluZS4gIFRoaXMgbGluZSBoYXMgdGhlIGZvcm0gYGdpdC1zdm4taWQ6IFVSTEBSRVZOTyBVVUlEYC4KKworVGhlIHJlc3VsdGluZyByZXBvc2l0b3J5IHdpbGwgZ2VuZXJhbGx5IHJlcXVpcmUgZnVydGhlciBwcm9jZXNzaW5nCit0byBwdXQgZWFjaCBwcm9qZWN0IGluIGl0cyBvd24gcmVwb3NpdG9yeSBhbmQgdG8gc2VwYXJhdGUgdGhlIGhpc3RvcnkKK29mIGVhY2ggYnJhbmNoLiAgVGhlICdnaXQgZmlsdGVyLWJyYW5jaCAtLXN1YmRpcmVjdG9yeS1maWx0ZXInIGNvbW1hbmQKK21heSBiZSB1c2VmdWwgZm9yIHRoaXMgcHVycG9zZS4KKworQlVHUworLS0tLQorRW1wdHkgZGlyZWN0b3JpZXMgYW5kIHVua25vd24gcHJvcGVydGllcyBhcmUgc2lsZW50bHkgZGlzY2FyZGVkLgorCitUaGUgZXhpdCBzdGF0dXMgZG9lcyBub3QgcmVmbGVjdCB3aGV0aGVyIGFuIGVycm9yIHdhcyBkZXRlY3RlZC4KKworU0VFIEFMU08KKy0tLS0tLS0tCitnaXQtc3ZuKDEpLCBzdm4yZ2l0KDEpLCBzdmsoMSksIGdpdC1maWx0ZXItYnJhbmNoKDEpLCBnaXQtZmFzdC1pbXBvcnQoMSksCitodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9zdWJ2ZXJzaW9uL3RydW5rL25vdGVzL2R1bXAtbG9hZC1mb3JtYXQudHh0CmRpZmYgLS1naXQgYS9jb250cmliL3N2bi1mZS9zdm5yZHVtcF9zaW0ucHkgYi9jb250cmliL3N2bi1mZS9zdm5yZHVtcF9zaW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTFhYzZmNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3ZuLWZlL3N2bnJkdW1wX3NpbS5weQpAQCAtMCwwICsxLDY4IEBACisjIS91c3IvYmluL3B5dGhvbgorIiIiCitTaW11bGF0ZXMgc3ZucmR1bXAgYnkgcmVwbGF5aW5nIGFuIGV4aXN0aW5nIGR1bXAgZnJvbSBhIGZpbGUsIHRha2luZyBjYXJlCitvZiB0aGUgc3BlY2lmaWVkIHJldmlzaW9uIHJhbmdlLgorVG8gc2ltdWxhdGUgaW5jcmVtZW50YWwgaW1wb3J0cyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgU1ZOUk1BWCBjYW4gYmUgc2V0Cit0byB0aGUgaGlnaGVzdCByZXZpc2lvbiB0aGF0IHNob3VsZCBiZSBhdmFpbGFibGUuCisiIiIKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworCitpZiBzeXMuaGV4dmVyc2lvbiA8IDB4MDIwNDAwMDA6CisgICAgIyBUaGUgbGltaXRlciBpcyB0aGUgVmFsdWVFcnJvcigpIGNhbGxzLiBUaGlzIG1heSBiZSB0b28gY29uc2VydmF0aXZlCisgICAgc3lzLnN0ZGVyci53cml0ZSgic3ZucmR1bXAtc2ltLnB5OiByZXF1aXJlcyBQeXRob24gMi40IG9yIGxhdGVyLlxuIikKKyAgICBzeXMuZXhpdCgxKQorCisKK2RlZiBnZXRyZXZsaW1pdCgpOgorICAgIHZhciA9ICdTVk5STUFYJworICAgIGlmIHZhciBpbiBvcy5lbnZpcm9uOgorICAgICAgICByZXR1cm4gb3MuZW52aXJvblt2YXJdCisgICAgcmV0dXJuIE5vbmUKKworCitkZWYgd3JpdGVkdW1wKHVybCwgbG93ZXIsIHVwcGVyKToKKyAgICBpZiB1cmwuc3RhcnRzd2l0aCgnc2ltOi8vJyk6CisgICAgICAgIGZpbGVuYW1lID0gdXJsWzY6XQorICAgICAgICBpZiBmaWxlbmFtZVstMV0gPT0gJy8nOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVs6LTFdICAjIHJlbW92ZSB0ZXJtaW5hdGluZyBzbGFzaAorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NpbTovLyB1cmwgcmVxdWlyZWQnKQorICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncicpCisgICAgc3RhdGUgPSAnaGVhZGVyJworICAgIHdyb3RlcmV2ID0gRmFsc2UKKyAgICB3aGlsZShUcnVlKToKKyAgICAgICAgbCA9IGYucmVhZGxpbmUoKQorICAgICAgICBpZiBsID09ICcnOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgc3RhdGUgPT0gJ2hlYWRlcicgYW5kIGwuc3RhcnRzd2l0aCgnUmV2aXNpb24tbnVtYmVyOiAnKToKKyAgICAgICAgICAgIHN0YXRlID0gJ3ByZWZpeCcKKyAgICAgICAgaWYgc3RhdGUgPT0gJ3ByZWZpeCcgYW5kIGwgPT0gJ1JldmlzaW9uLW51bWJlcjogJXNcbicgJSBsb3dlcjoKKyAgICAgICAgICAgIHN0YXRlID0gJ3NlbGVjdGlvbicKKyAgICAgICAgaWYgbm90IHVwcGVyID09ICdIRUFEJyBhbmQgc3RhdGUgPT0gJ3NlbGVjdGlvbicgYW5kIFwKKyAgICAgICAgICAgICAgICBsID09ICdSZXZpc2lvbi1udW1iZXI6ICVzXG4nICUgdXBwZXI6CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIHN0YXRlID09ICdoZWFkZXInIG9yIHN0YXRlID09ICdzZWxlY3Rpb24nOgorICAgICAgICAgICAgaWYgc3RhdGUgPT0gJ3NlbGVjdGlvbic6CisgICAgICAgICAgICAgICAgd3JvdGVyZXYgPSBUcnVlCisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGwpCisgICAgcmV0dXJuIHdyb3RlcmV2CisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgaWYgbm90IChsZW4oc3lzLmFyZ3YpIGluICgzLCA0LCA1KSk6CisgICAgICAgIHByaW50KCJ1c2FnZTogJXMgZHVtcCBVUkwgLXJMT1dFUjpVUFBFUiIpCisgICAgICAgIHN5cy5leGl0KDEpCisgICAgaWYgbm90IHN5cy5hcmd2WzFdID09ICdkdW1wJzoKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignb25seSAiZHVtcCIgaXMgc3VwcHBvcnRlZC4nKQorICAgIHVybCA9IHN5cy5hcmd2WzJdCisgICAgciA9ICgnMCcsICdIRUFEJykKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDQgYW5kIHN5cy5hcmd2WzNdWzA6Ml0gPT0gJy1yJzoKKyAgICAgICAgciA9IHN5cy5hcmd2WzNdWzI6XS5sc3RyaXAoKS5zcGxpdCgnOicpCisgICAgaWYgbm90IGdldHJldmxpbWl0KCkgaXMgTm9uZToKKyAgICAgICAgclsxXSA9IGdldHJldmxpbWl0KCkKKyAgICBpZiB3cml0ZWR1bXAodXJsLCByWzBdLCByWzFdKToKKyAgICAgICAgcmV0ID0gMAorICAgIGVsc2U6CisgICAgICAgIHJldCA9IDEKKyAgICBzeXMuZXhpdChyZXQpCmRpZmYgLS1naXQgYS9jb250cmliL3RodW5kZXJiaXJkLXBhdGNoLWlubGluZS9SRUFETUUgYi9jb250cmliL3RodW5kZXJiaXJkLXBhdGNoLWlubGluZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwMTQ3YgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdGh1bmRlcmJpcmQtcGF0Y2gtaW5saW5lL1JFQURNRQpAQCAtMCwwICsxLDIwIEBACithcHBwLnNoIGlzIGEgc2NyaXB0IHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIEV4dGVybmFsRWRpdG9yCitmb3IgTW96aWxsYSBUaHVuZGVyYmlyZC4gSXQgd2lsbCBsZXQgeW91IGluY2x1ZGUgcGF0Y2hlcyBpbmxpbmUgaW4gZS1tYWlscworaW4gYW4gZWFzeSB3YXkuCisKK1VzYWdlOgorLSBHZW5lcmF0ZSB0aGUgcGF0Y2ggd2l0aCBnaXQgZm9ybWF0LXBhdGNoLgorLSBTdGFydCB3cml0aW5nIGEgbmV3IGUtbWFpbCBpbiBUaHVuZGVyYmlyZC4KKy0gUHJlc3MgdGhlIGV4dGVybmFsIGVkaXRvciBidXR0b24gKG9yIEN0cmwtRSkgdG8gcnVuIGFwcHAuc2gKKy0gU2VsZWN0IHRoZSBwcmV2aW91c2x5IGdlbmVyYXRlZCBwYXRjaCBmaWxlLgorLSBGaW5pc2ggZWRpdGluZyB0aGUgZS1tYWlsLgorCitBbnkgdGV4dCB0aGF0IGlzIGVudGVyZWQgaW50byB0aGUgbWVzc2FnZSBlZGl0b3IgYmVmb3JlIGFwcHAuc2ggaXMgY2FsbGVkCit3aWxsIGJlIG1vdmVkIHRvIHRoZSBzZWN0aW9uIGJldHdlZW4gdGhlIC0tLSBhbmQgdGhlIGRpZmZzdGF0LgorCitBbGwgUy1PLUI6cyBhbmQgQ2M6cyBpbiB0aGUgcGF0Y2ggd2lsbCBiZSBhZGRlZCB0byB0aGUgQ0MgbGlzdC4KKworVG8gc2V0IGl0IHVwLCBqdXN0IGluc3RhbGwgRXh0ZXJuYWwgRWRpdG9yIGFuZCB0ZWxsIGl0IHRvIHVzZSBhcHBwLnNoIGFzIHRoZQorZWRpdG9yLgorCitaZW5pdHkgaXMgYSByZXF1aXJlZCBkZXBlbmRlbmN5LgpkaWZmIC0tZ2l0IGEvY29udHJpYi90aHVuZGVyYmlyZC1wYXRjaC1pbmxpbmUvYXBwcC5zaCBiL2NvbnRyaWIvdGh1bmRlcmJpcmQtcGF0Y2gtaW5saW5lL2FwcHAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGRjNzNlYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvdGh1bmRlcmJpcmQtcGF0Y2gtaW5saW5lL2FwcHAuc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAyMDA4IEx1a2FzIFNhbmRzdHLDtm0gPGx1a3NhbkBnbWFpbC5jb20+CisjCisjIEFwcGVuZFBhdGNoIC0gQSBzY3JpcHQgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoIEV4dGVybmFsRWRpdG9yCisjIGZvciBNb3ppbGxhIFRodW5kZXJiaXJkIHRvIHByb3Blcmx5IGluY2x1ZGUgcGF0Y2hlcyBpbmxpbmUgaW4gZS1tYWlscy4KKworIyBFeHRlcm5hbEVkaXRvciBjYW4gYmUgZG93bmxvYWRlZCBhdCBodHRwOi8vZ2xvYnMub3JnL2FydGljbGVzLnBocD9sbmc9ZW4mcGc9MgorCitDT05GRklMRT1+Ly5hcHBwcmMKKworU0VQPSItPS09LT0tPS09LT0tPS09LT0jIERvbid0IHJlbW92ZSB0aGlzIGxpbmUgIz0tPS09LT0tPS09LT0tPS09LSIKK2lmIFsgLWUgIiRDT05GRklMRSIgXSA7IHRoZW4KKwlMQVNUX0RJUj0kKGdyZXAgLW0gMSAiXkxBU1RfRElSPSIgIiR7Q09ORkZJTEV9InxzZWQgLWUgJ3MvXkxBU1RfRElSPS8vJykKKwljZCAiJHtMQVNUX0RJUn0iCitlbHNlCisJY2QgPiAvZGV2L251bGwKK2ZpCisKK1BBVENIPSQoemVuaXR5IC0tZmlsZS1zZWxlY3Rpb24pCisKK2lmIFsgIiQ/IiAhPSAiMCIgXSA7IHRoZW4KKwkjemVuaXR5IC0tZXJyb3IgLS10ZXh0ICJObyBwYXRjaGZpbGUgZ2l2ZW4uIgorCWV4aXQgMQorZmkKKworY2QgLSA+IC9kZXYvbnVsbAorCitTVUJKRUNUPSQoc2VkIC1uIC1lICcvXlN1YmplY3Q6IC9wJyAiJHtQQVRDSH0iKQorSEVBREVSUz0kKHNlZCAtZSAnL14nIiR7U0VQfSInJC8sJGQnICQxKQorQk9EWT0kKHNlZCAtZSAiMSwvJHtTRVB9L2QiICQxKQorQ01UX01TRz0kKHNlZCAtZSAnMSwvXiQvZCcgLWUgJy9eLS0tJC8sJGQnICIke1BBVENIfSIpCitESUZGPSQoc2VkIC1lICcxLC9eLS0tJC9kJyAiJHtQQVRDSH0iKQorCitDQ1M9YGVjaG8gLWUgIiRDTVRfTVNHXG4kSEVBREVSUyIgfCBzZWQgLW4gLWUgJ3MvXkNjOiBcKC4qXCkkL1wxLC9ncCcgXAorCS1lICdzL15TaWduZWQtb2ZmLWJ5OiBcKC4qXCkvXDEsL2dwJ2AKKworZWNobyAiJFNVQkpFQ1QiID4gJDEKK2VjaG8gIkNjOiAkQ0NTIiA+PiAkMQorZWNobyAiJEhFQURFUlMiIHwgc2VkIC1lICcvXlN1YmplY3Q6IC9kJyAtZSAnL15DYzogL2QnID4+ICQxCitlY2hvICIkU0VQIiA+PiAkMQorCitlY2hvICIkQ01UX01TRyIgPj4gJDEKK2VjaG8gIi0tLSIgPj4gJDEKK2lmIFsgIngke0JPRFl9eCIgIT0gInh4IiBdIDsgdGhlbgorCWVjaG8gPj4gJDEKKwllY2hvICIkQk9EWSIgPj4gJDEKKwllY2hvID4+ICQxCitmaQorZWNobyAiJERJRkYiID4+ICQxCisKK0xBU1RfRElSPSQoZGlybmFtZSAiJHtQQVRDSH0iKQorCitncmVwIC12ICJeTEFTVF9ESVI9IiAiJHtDT05GRklMRX0iID4gIiR7Q09ORkZJTEV9XyIKK2VjaG8gIkxBU1RfRElSPSR7TEFTVF9ESVJ9IiA+PiAiJHtDT05GRklMRX1fIgorbXYgIiR7Q09ORkZJTEV9XyIgIiR7Q09ORkZJTEV9IgpkaWZmIC0tZ2l0IGEvY29udHJpYi93b3JrZGlyL2dpdC1uZXctd29ya2RpciBiL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODg4YzM0YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAorCit1c2FnZSAoKSB7CisJZWNobyAidXNhZ2U6IiAkQAorCWV4aXQgMTI3Cit9CisKK2RpZSAoKSB7CisJZWNobyAkQAorCWV4aXQgMTI4Cit9CisKK2ZhaWxlZCAoKSB7CisJZGllICJ1bmFibGUgdG8gY3JlYXRlIG5ldyB3b3JrZGlyICckbmV3X3dvcmtkaXInISIKK30KKworaWYgdGVzdCAkIyAtbHQgMiB8fCB0ZXN0ICQjIC1ndCAzCit0aGVuCisJdXNhZ2UgIiQwIDxyZXBvc2l0b3J5PiA8bmV3X3dvcmtkaXI+IFs8YnJhbmNoPl0iCitmaQorCitvcmlnX2dpdD0kMQorbmV3X3dvcmtkaXI9JDIKK2JyYW5jaD0kMworCisjIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgd2hhdCBpcyBwb2ludGVkIHRvIGhhcyBhIC5naXQgZGlyZWN0b3J5IC4uLgorZ2l0X2Rpcj0kKGNkICIkb3JpZ19naXQiIDI+L2Rldi9udWxsICYmCisgIGdpdCByZXYtcGFyc2UgLS1naXQtZGlyIDI+L2Rldi9udWxsKSB8fAorICBkaWUgIk5vdCBhIGdpdCByZXBvc2l0b3J5OiBcIiRvcmlnX2dpdFwiIgorCitjYXNlICIkZ2l0X2RpciIgaW4KKy5naXQpCisJZ2l0X2Rpcj0iJG9yaWdfZ2l0Ly5naXQiCisJOzsKKy4pCisJZ2l0X2Rpcj0kb3JpZ19naXQKKwk7OworZXNhYworCisjIGRvbid0IGxpbmsgdG8gYSBjb25maWd1cmVkIGJhcmUgcmVwb3NpdG9yeQoraXNiYXJlPSQoZ2l0IC0tZ2l0LWRpcj0iJGdpdF9kaXIiIGNvbmZpZyAtLWJvb2wgLS1nZXQgY29yZS5iYXJlKQoraWYgdGVzdCB6dHJ1ZSA9ICJ6JGlzYmFyZSIKK3RoZW4KKwlkaWUgIlwiJGdpdF9kaXJcIiBoYXMgY29yZS5iYXJlIHNldCB0byB0cnVlLCIgXAorCQkiIHJlbW92ZSBmcm9tIFwiJGdpdF9kaXIvY29uZmlnXCIgdG8gdXNlICQwIgorZmkKKworIyBkb24ndCBsaW5rIHRvIGEgd29ya2RpcgoraWYgdGVzdCAtaCAiJGdpdF9kaXIvY29uZmlnIgordGhlbgorCWRpZSAiXCIkb3JpZ19naXRcIiBpcyBhIHdvcmtpbmcgZGlyZWN0b3J5IG9ubHksIHBsZWFzZSBzcGVjaWZ5IiBcCisJCSJhIGNvbXBsZXRlIHJlcG9zaXRvcnkuIgorZmkKKworIyBtYWtlIHN1cmUgdGhlIGxpbmtzIGluIHRoZSB3b3JrZGlyIGhhdmUgZnVsbCBwYXRocyB0byB0aGUgb3JpZ2luYWwgcmVwbworZ2l0X2Rpcj0kKGNkICIkZ2l0X2RpciIgJiYgcHdkKSB8fCBleGl0IDEKKworIyBkb24ndCByZWNyZWF0ZSBhIHdvcmtkaXIgb3ZlciBhbiBleGlzdGluZyBkaXJlY3RvcnksIHVubGVzcyBpdCdzIGVtcHR5CitpZiB0ZXN0IC1kICIkbmV3X3dvcmtkaXIiCit0aGVuCisJaWYgdGVzdCAkKGxzIC1hMSAiJG5ld193b3JrZGlyLy4iIHwgd2MgLWwpIC1uZSAyCisJdGhlbgorCQlkaWUgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSAnJG5ld193b3JrZGlyJyBpcyBub3QgZW1wdHkuIgorCWZpCisJY2xlYW5kaXI9IiRuZXdfd29ya2Rpci8uZ2l0IgorZWxzZQorCWNsZWFuZGlyPSIkbmV3X3dvcmtkaXIiCitmaQorCitta2RpciAtcCAiJG5ld193b3JrZGlyLy5naXQiIHx8IGZhaWxlZAorY2xlYW5kaXI9JChjZCAiJGNsZWFuZGlyIiAmJiBwd2QpIHx8IGZhaWxlZAorCitjbGVhbnVwICgpIHsKKwlybSAtcmYgIiRjbGVhbmRpciIKK30KK3NpZ2xpc3Q9IjAgMSAyIDE1IgordHJhcCBjbGVhbnVwICRzaWdsaXN0CisKKyMgY3JlYXRlIHRoZSBsaW5rcyB0byB0aGUgb3JpZ2luYWwgcmVwby4gIGV4cGxpY2l0bHkgZXhjbHVkZSBpbmRleCwgSEVBRCBhbmQKKyMgbG9ncy9IRUFEIGZyb20gdGhlIGxpc3Qgc2luY2UgdGhleSBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgd29ya2luZworIyBkaXJlY3RvcnksIGFuZCBzaG91bGQgbm90IGJlIHNoYXJlZC4KK2ZvciB4IGluIGNvbmZpZyByZWZzIGxvZ3MvcmVmcyBvYmplY3RzIGluZm8gaG9va3MgcGFja2VkLXJlZnMgcmVtb3RlcyByci1jYWNoZSBzdm4KK2RvCisJIyBjcmVhdGUgYSBjb250YWluaW5nIGRpcmVjdG9yeSBpZiBuZWVkZWQKKwljYXNlICR4IGluCisJKi8qKQorCQlta2RpciAtcCAiJG5ld193b3JrZGlyLy5naXQvJHt4JS8qfSIKKwkJOzsKKwllc2FjCisKKwlsbiAtcyAiJGdpdF9kaXIvJHgiICIkbmV3X3dvcmtkaXIvLmdpdC8keCIgfHwgZmFpbGVkCitkb25lCisKKyMgY29tbWFuZHMgYmVsb3cgdGhpcyBhcmUgcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgd29ya2RpcgorY2QgIiRuZXdfd29ya2RpciIgfHwgZmFpbGVkCisKKyMgY29weSB0aGUgSEVBRCBmcm9tIHRoZSBvcmlnaW5hbCByZXBvc2l0b3J5IGFzIGEgZGVmYXVsdCBicmFuY2gKK2NwICIkZ2l0X2Rpci9IRUFEIiAuZ2l0L0hFQUQgfHwgZmFpbGVkCisKKyMgdGhlIHdvcmtkaXIgaXMgc2V0IHVwLiAgaWYgdGhlIGNoZWNrb3V0IGZhaWxzLCB0aGUgdXNlciBjYW4gZml4IGl0LgordHJhcCAtICRzaWdsaXN0CisKKyMgY2hlY2tvdXQgdGhlIGJyYW5jaCAoZWl0aGVyIHRoZSBzYW1lIGFzIEhFQUQgZnJvbSB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yeSwKKyMgb3IgdGhlIG9uZSB0aGF0IHdhcyBhc2tlZCBmb3IpCitnaXQgY2hlY2tvdXQgLWYgJGJyYW5jaApkaWZmIC0tZ2l0IGEvY29udmVydC5jIGIvY29udmVydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNGU4MTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb252ZXJ0LmMKQEAgLTAsMCArMSwxMzQ1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisKKy8qCisgKiBjb252ZXJ0LmMgLSBjb252ZXJ0IGEgZmlsZSB3aGVuIGNoZWNraW5nIGl0IG91dCBhbmQgY2hlY2tpbmcgaXQgaW4uCisgKgorICogVGhpcyBzaG91bGQgdXNlIHRoZSBwYXRobmFtZSB0byBkZWNpZGUgb24gd2hldGhlciBpdCB3YW50cyB0byBkbyBzb21lCisgKiBtb3JlIGludGVyZXN0aW5nIGNvbnZlcnNpb25zIChhdXRvbWF0aWMgZ3ppcC91bnppcCwgZ2VuZXJhbCBmb3JtYXQKKyAqIGNvbnZlcnNpb25zIGV0YyBldGMpLCBidXQgYnkgZGVmYXVsdCBpdCBqdXN0IGRvZXMgYXV0b21hdGljIENSTEY8LT5MRgorICogdHJhbnNsYXRpb24gd2hlbiB0aGUgInRleHQiIGF0dHJpYnV0ZSBvciAiYXV0b19jcmxmIiBvcHRpb24gaXMgc2V0LgorICovCisKK2VudW0gY3JsZl9hY3Rpb24geworCUNSTEZfR1VFU1MgPSAtMSwKKwlDUkxGX0JJTkFSWSA9IDAsCisJQ1JMRl9URVhULAorCUNSTEZfSU5QVVQsCisJQ1JMRl9DUkxGLAorCUNSTEZfQVVUTworfTsKKworc3RydWN0IHRleHRfc3RhdCB7CisJLyogTlVMLCBDUiwgTEYgYW5kIENSTEYgY291bnRzICovCisJdW5zaWduZWQgbnVsLCBjciwgbGYsIGNybGY7CisKKwkvKiBUaGVzZSBhcmUganVzdCBhcHByb3hpbWF0aW9ucyEgKi8KKwl1bnNpZ25lZCBwcmludGFibGUsIG5vbnByaW50YWJsZTsKK307CisKK3N0YXRpYyB2b2lkIGdhdGhlcl9zdGF0cyhjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IHRleHRfc3RhdCAqc3RhdHMpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9IGJ1ZltpXTsKKwkJaWYgKGMgPT0gJ1xyJykgeworCQkJc3RhdHMtPmNyKys7CisJCQlpZiAoaSsxIDwgc2l6ZSAmJiBidWZbaSsxXSA9PSAnXG4nKQorCQkJCXN0YXRzLT5jcmxmKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYyA9PSAnXG4nKSB7CisJCQlzdGF0cy0+bGYrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09IDEyNykKKwkJCS8qIERFTCAqLworCQkJc3RhdHMtPm5vbnByaW50YWJsZSsrOworCQllbHNlIGlmIChjIDwgMzIpIHsKKwkJCXN3aXRjaCAoYykgeworCQkJCS8qIEJTLCBIVCwgRVNDIGFuZCBGRiAqLworCQkJY2FzZSAnXGInOiBjYXNlICdcdCc6IGNhc2UgJ1wwMzMnOiBjYXNlICdcMDE0JzoKKwkJCQlzdGF0cy0+cHJpbnRhYmxlKys7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJc3RhdHMtPm51bCsrOworCQkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQkJZGVmYXVsdDoKKwkJCQlzdGF0cy0+bm9ucHJpbnRhYmxlKys7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJc3RhdHMtPnByaW50YWJsZSsrOworCX0KKworCS8qIElmIGZpbGUgZW5kcyB3aXRoIEVPRiB0aGVuIGRvbid0IGNvdW50IHRoaXMgRU9GIGFzIG5vbi1wcmludGFibGUuICovCisJaWYgKHNpemUgPj0gMSAmJiBidWZbc2l6ZS0xXSA9PSAnXDAzMicpCisJCXN0YXRzLT5ub25wcmludGFibGUtLTsKK30KKworLyoKKyAqIFRoZSBzYW1lIGhldXJpc3RpY3MgYXMgZGlmZi5jOjptbWZpbGVfaXNfYmluYXJ5KCkKKyAqLworc3RhdGljIGludCBpc19iaW5hcnkodW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgdGV4dF9zdGF0ICpzdGF0cykKK3sKKworCWlmIChzdGF0cy0+bnVsKQorCQlyZXR1cm4gMTsKKwlpZiAoKHN0YXRzLT5wcmludGFibGUgPj4gNykgPCBzdGF0cy0+bm9ucHJpbnRhYmxlKQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIE90aGVyIGhldXJpc3RpY3M/IEF2ZXJhZ2UgbGluZSBsZW5ndGggbWlnaHQgYmUgcmVsZXZhbnQsCisJICogYXMgbWlnaHQgTEYgdnMgQ1IgdnMgQ1JMRiBjb3VudHMuLgorCSAqCisJICogTk9URSEgSXQgbWlnaHQgYmUgbm9ybWFsIHRvIGhhdmUgYSBsb3cgcmF0aW8gb2YgQ1JMRiB0byBMRgorCSAqIChzb21lYm9keSBzdGFydHMgd2l0aCBhIExGLW9ubHkgZmlsZSBhbmQgZWRpdHMgaXQgd2l0aCBhbiBlZGl0b3IKKwkgKiB0aGF0IGFkZHMgQ1JMRiBvbmx5IHRvIGxpbmVzIHRoYXQgYXJlIGFkZGVkLi4pLiBCdXQgZG8gIHdlCisJICogd2FudCB0byBzdXBwb3J0IENSLW9ubHk/IFByb2JhYmx5IG5vdC4KKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gZW9sIG91dHB1dF9lb2woZW51bSBjcmxmX2FjdGlvbiBjcmxmX2FjdGlvbikKK3sKKwlzd2l0Y2ggKGNybGZfYWN0aW9uKSB7CisJY2FzZSBDUkxGX0JJTkFSWToKKwkJcmV0dXJuIEVPTF9VTlNFVDsKKwljYXNlIENSTEZfQ1JMRjoKKwkJcmV0dXJuIEVPTF9DUkxGOworCWNhc2UgQ1JMRl9JTlBVVDoKKwkJcmV0dXJuIEVPTF9MRjsKKwljYXNlIENSTEZfR1VFU1M6CisJCWlmICghYXV0b19jcmxmKQorCQkJcmV0dXJuIEVPTF9VTlNFVDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBDUkxGX1RFWFQ6CisJY2FzZSBDUkxGX0FVVE86CisJCWlmIChhdXRvX2NybGYgPT0gQVVUT19DUkxGX1RSVUUpCisJCQlyZXR1cm4gRU9MX0NSTEY7CisJCWVsc2UgaWYgKGF1dG9fY3JsZiA9PSBBVVRPX0NSTEZfSU5QVVQpCisJCQlyZXR1cm4gRU9MX0xGOworCQllbHNlIGlmIChjb3JlX2VvbCA9PSBFT0xfVU5TRVQpCisJCQlyZXR1cm4gRU9MX05BVElWRTsKKwl9CisJcmV0dXJuIGNvcmVfZW9sOworfQorCitzdGF0aWMgdm9pZCBjaGVja19zYWZlX2NybGYoY29uc3QgY2hhciAqcGF0aCwgZW51bSBjcmxmX2FjdGlvbiBjcmxmX2FjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGV4dF9zdGF0ICpzdGF0cywgZW51bSBzYWZlX2NybGYgY2hlY2tzYWZlKQoreworCWlmICghY2hlY2tzYWZlKQorCQlyZXR1cm47CisKKwlpZiAob3V0cHV0X2VvbChjcmxmX2FjdGlvbikgPT0gRU9MX0xGKSB7CisJCS8qCisJCSAqIENSTEZzIHdvdWxkIG5vdCBiZSByZXN0b3JlZCBieSBjaGVja291dDoKKwkJICogY2hlY2sgaWYgd2UnZCByZW1vdmUgQ1JMRnMKKwkJICovCisJCWlmIChzdGF0cy0+Y3JsZikgeworCQkJaWYgKGNoZWNrc2FmZSA9PSBTQUZFX0NSTEZfV0FSTikKKwkJCQl3YXJuaW5nKCJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYgaW4gJXMuXG5UaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LiIsIHBhdGgpOworCQkJZWxzZSAvKiBpLmUuIFNBRkVfQ1JMRl9GQUlMICovCisJCQkJZGllKCJDUkxGIHdvdWxkIGJlIHJlcGxhY2VkIGJ5IExGIGluICVzLiIsIHBhdGgpOworCQl9CisJfSBlbHNlIGlmIChvdXRwdXRfZW9sKGNybGZfYWN0aW9uKSA9PSBFT0xfQ1JMRikgeworCQkvKgorCQkgKiBDUkxGcyB3b3VsZCBiZSBhZGRlZCBieSBjaGVja291dDoKKwkJICogY2hlY2sgaWYgd2UgaGF2ZSAibmFrZWQiIExGcworCQkgKi8KKwkJaWYgKHN0YXRzLT5sZiAhPSBzdGF0cy0+Y3JsZikgeworCQkJaWYgKGNoZWNrc2FmZSA9PSBTQUZFX0NSTEZfV0FSTikKKwkJCQl3YXJuaW5nKCJMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IENSTEYgaW4gJXMuXG5UaGUgZmlsZSB3aWxsIGhhdmUgaXRzIG9yaWdpbmFsIGxpbmUgZW5kaW5ncyBpbiB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5LiIsIHBhdGgpOworCQkJZWxzZSAvKiBpLmUuIFNBRkVfQ1JMRl9GQUlMICovCisJCQkJZGllKCJMRiB3b3VsZCBiZSByZXBsYWNlZCBieSBDUkxGIGluICVzIiwgcGF0aCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgaGFzX2NyX2luX2luZGV4KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJdW5zaWduZWQgbG9uZyBzejsKKwl2b2lkICpkYXRhOworCWludCBoYXNfY3I7CisKKwlkYXRhID0gcmVhZF9ibG9iX2RhdGFfZnJvbV9jYWNoZShwYXRoLCAmc3opOworCWlmICghZGF0YSkKKwkJcmV0dXJuIDA7CisJaGFzX2NyID0gbWVtY2hyKGRhdGEsICdccicsIHN6KSAhPSBOVUxMOworCWZyZWUoZGF0YSk7CisJcmV0dXJuIGhhc19jcjsKK30KKworc3RhdGljIGludCBjcmxmX3RvX2dpdChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sCisJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCSAgICAgICBlbnVtIGNybGZfYWN0aW9uIGNybGZfYWN0aW9uLCBlbnVtIHNhZmVfY3JsZiBjaGVja3NhZmUpCit7CisJc3RydWN0IHRleHRfc3RhdCBzdGF0czsKKwljaGFyICpkc3Q7CisKKwlpZiAoY3JsZl9hY3Rpb24gPT0gQ1JMRl9CSU5BUlkgfHwKKwkgICAgKGNybGZfYWN0aW9uID09IENSTEZfR1VFU1MgJiYgYXV0b19jcmxmID09IEFVVE9fQ1JMRl9GQUxTRSkgfHwKKwkgICAgKHNyYyAmJiAhbGVuKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIHdlIGFyZSBkb2luZyBhIGRyeS1ydW4gYW5kIGhhdmUgbm8gc291cmNlIGJ1ZmZlciwgdGhlcmUgaXMKKwkgKiBub3RoaW5nIHRvIGFuYWx5emU7IHdlIG11c3QgYXNzdW1lIHdlIHdvdWxkIGNvbnZlcnQuCisJICovCisJaWYgKCFidWYgJiYgIXNyYykKKwkJcmV0dXJuIDE7CisKKwlnYXRoZXJfc3RhdHMoc3JjLCBsZW4sICZzdGF0cyk7CisKKwlpZiAoY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPIHx8IGNybGZfYWN0aW9uID09IENSTEZfR1VFU1MpIHsKKwkJLyoKKwkJICogV2UncmUgY3VycmVudGx5IG5vdCBnb2luZyB0byBldmVuIHRyeSB0byBjb252ZXJ0IHN0dWZmCisJCSAqIHRoYXQgaGFzIGJhcmUgQ1IgY2hhcmFjdGVycy4gRG9lcyBhbnlib2R5IGRvIHRoYXQgY3JhenkKKwkJICogc3R1ZmY/CisJCSAqLworCQlpZiAoc3RhdHMuY3IgIT0gc3RhdHMuY3JsZikKKwkJCXJldHVybiAwOworCisJCS8qCisJCSAqIEFuZCBhZGQgc29tZSBoZXVyaXN0aWNzIGZvciBiaW5hcnkgdnMgdGV4dCwgb2YgY291cnNlLi4uCisJCSAqLworCQlpZiAoaXNfYmluYXJ5KGxlbiwgJnN0YXRzKSkKKwkJCXJldHVybiAwOworCisJCWlmIChjcmxmX2FjdGlvbiA9PSBDUkxGX0dVRVNTKSB7CisJCQkvKgorCQkJICogSWYgdGhlIGZpbGUgaW4gdGhlIGluZGV4IGhhcyBhbnkgQ1IgaW4gaXQsIGRvIG5vdCBjb252ZXJ0LgorCQkJICogVGhpcyBpcyB0aGUgbmV3IHNhZmVyIGF1dG9jcmxmIGhhbmRsaW5nLgorCQkJICovCisJCQlpZiAoaGFzX2NyX2luX2luZGV4KHBhdGgpKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJY2hlY2tfc2FmZV9jcmxmKHBhdGgsIGNybGZfYWN0aW9uLCAmc3RhdHMsIGNoZWNrc2FmZSk7CisKKwkvKiBPcHRpbWl6YXRpb246IE5vIENSPyBOb3RoaW5nIHRvIGNvbnZlcnQsIHJlZ2FyZGxlc3MuICovCisJaWYgKCFzdGF0cy5jcikKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQgYWxsIG9mIG91ciBzb3VyY2UgYW5hbHlzaXMgaXMgZG9uZSwgYW5kIHdlIGFyZSBzdXJlIHdlCisJICogd291bGQgY29udmVydC4gSWYgd2UgYXJlIGluIGRyeS1ydW4gbW9kZSwgd2UgY2FuIGdpdmUgYW4gYW5zd2VyLgorCSAqLworCWlmICghYnVmKQorCQlyZXR1cm4gMTsKKworCS8qIG9ubHkgZ3JvdyBpZiBub3QgaW4gcGxhY2UgKi8KKwlpZiAoc3RyYnVmX2F2YWlsKGJ1ZikgKyBidWYtPmxlbiA8IGxlbikKKwkJc3RyYnVmX2dyb3coYnVmLCBsZW4gLSBidWYtPmxlbik7CisJZHN0ID0gYnVmLT5idWY7CisJaWYgKGNybGZfYWN0aW9uID09IENSTEZfQVVUTyB8fCBjcmxmX2FjdGlvbiA9PSBDUkxGX0dVRVNTKSB7CisJCS8qCisJCSAqIElmIHdlIGd1ZXNzZWQsIHdlIGFscmVhZHkga25vdyB3ZSByZWplY3RlZCBhIGZpbGUgd2l0aAorCQkgKiBsb25lIENSLCBhbmQgd2UgY2FuIHN0cmlwIGEgQ1Igd2l0aG91dCBsb29raW5nIGF0IHdoYXQKKwkJICogZm9sbG93IGl0LgorCQkgKi8KKwkJZG8geworCQkJdW5zaWduZWQgY2hhciBjID0gKnNyYysrOworCQkJaWYgKGMgIT0gJ1xyJykKKwkJCQkqZHN0KysgPSBjOworCQl9IHdoaWxlICgtLWxlbik7CisJfSBlbHNlIHsKKwkJZG8geworCQkJdW5zaWduZWQgY2hhciBjID0gKnNyYysrOworCQkJaWYgKCEgKGMgPT0gJ1xyJyAmJiAoMSA8IGxlbiAmJiAqc3JjID09ICdcbicpKSkKKwkJCQkqZHN0KysgPSBjOworCQl9IHdoaWxlICgtLWxlbik7CisJfQorCXN0cmJ1Zl9zZXRsZW4oYnVmLCBkc3QgLSBidWYtPmJ1Zik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY3JsZl90b193b3JrdHJlZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBsZW4sCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLCBlbnVtIGNybGZfYWN0aW9uIGNybGZfYWN0aW9uKQoreworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCXN0cnVjdCB0ZXh0X3N0YXQgc3RhdHM7CisKKwlpZiAoIWxlbiB8fCBvdXRwdXRfZW9sKGNybGZfYWN0aW9uKSAhPSBFT0xfQ1JMRikKKwkJcmV0dXJuIDA7CisKKwlnYXRoZXJfc3RhdHMoc3JjLCBsZW4sICZzdGF0cyk7CisKKwkvKiBObyBMRj8gTm90aGluZyB0byBjb252ZXJ0LCByZWdhcmRsZXNzLiAqLworCWlmICghc3RhdHMubGYpCisJCXJldHVybiAwOworCisJLyogV2FzIGl0IGFscmVhZHkgaW4gQ1JMRiBmb3JtYXQ/ICovCisJaWYgKHN0YXRzLmxmID09IHN0YXRzLmNybGYpCisJCXJldHVybiAwOworCisJaWYgKGNybGZfYWN0aW9uID09IENSTEZfQVVUTyB8fCBjcmxmX2FjdGlvbiA9PSBDUkxGX0dVRVNTKSB7CisJCWlmIChjcmxmX2FjdGlvbiA9PSBDUkxGX0dVRVNTKSB7CisJCQkvKiBJZiB3ZSBoYXZlIGFueSBDUiBvciBDUkxGIGxpbmUgZW5kaW5ncywgd2UgZG8gbm90IHRvdWNoIGl0ICovCisJCQkvKiBUaGlzIGlzIHRoZSBuZXcgc2FmZXIgYXV0b2NybGYtaGFuZGxpbmcgKi8KKwkJCWlmIChzdGF0cy5jciA+IDAgfHwgc3RhdHMuY3JsZiA+IDApCisJCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBJZiB3ZSBoYXZlIGFueSBiYXJlIENSIGNoYXJhY3RlcnMsIHdlJ3JlIG5vdCBnb2luZyB0byB0b3VjaCBpdCAqLworCQlpZiAoc3RhdHMuY3IgIT0gc3RhdHMuY3JsZikKKwkJCXJldHVybiAwOworCisJCWlmIChpc19iaW5hcnkobGVuLCAmc3RhdHMpKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogYXJlIHdlICJmYWtpbmciIGluIHBsYWNlIGVkaXRpbmcgPyAqLworCWlmIChzcmMgPT0gYnVmLT5idWYpCisJCXRvX2ZyZWUgPSBzdHJidWZfZGV0YWNoKGJ1ZiwgTlVMTCk7CisKKwlzdHJidWZfZ3JvdyhidWYsIGxlbiArIHN0YXRzLmxmIC0gc3RhdHMuY3JsZik7CisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpubCA9IG1lbWNocihzcmMsICdcbicsIGxlbik7CisJCWlmICghbmwpCisJCQlicmVhazsKKwkJaWYgKG5sID4gc3JjICYmIG5sWy0xXSA9PSAnXHInKSB7CisJCQlzdHJidWZfYWRkKGJ1Ziwgc3JjLCBubCArIDEgLSBzcmMpOworCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZChidWYsIHNyYywgbmwgLSBzcmMpOworCQkJc3RyYnVmX2FkZHN0cihidWYsICJcclxuIik7CisJCX0KKwkJbGVuIC09IG5sICsgMSAtIHNyYzsKKwkJc3JjICA9IG5sICsgMTsKKwl9CisJc3RyYnVmX2FkZChidWYsIHNyYywgbGVuKTsKKworCWZyZWUodG9fZnJlZSk7CisJcmV0dXJuIDE7Cit9CisKK3N0cnVjdCBmaWx0ZXJfcGFyYW1zIHsKKwljb25zdCBjaGFyICpzcmM7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBmZDsKKwljb25zdCBjaGFyICpjbWQ7CisJY29uc3QgY2hhciAqcGF0aDsKK307CisKK3N0YXRpYyBpbnQgZmlsdGVyX2J1ZmZlcl9vcl9mZChpbnQgaW4sIGludCBvdXQsIHZvaWQgKmRhdGEpCit7CisJLyoKKwkgKiBTcGF3biBjbWQgYW5kIGZlZWQgdGhlIGJ1ZmZlciBjb250ZW50cyB0aHJvdWdoIGl0cyBzdGRpbi4KKwkgKi8KKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZF9wcm9jZXNzID0gQ0hJTERfUFJPQ0VTU19JTklUOworCXN0cnVjdCBmaWx0ZXJfcGFyYW1zICpwYXJhbXMgPSAoc3RydWN0IGZpbHRlcl9wYXJhbXMgKilkYXRhOworCWludCB3cml0ZV9lcnIsIHN0YXR1czsKKwljb25zdCBjaGFyICphcmd2W10gPSB7IE5VTEwsIE5VTEwgfTsKKworCS8qIGFwcGx5ICUgc3Vic3RpdHV0aW9uIHRvIGNtZCAqLworCXN0cnVjdCBzdHJidWYgY21kID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1Zl9leHBhbmRfZGljdF9lbnRyeSBkaWN0W10gPSB7CisJCXsgImYiLCBOVUxMLCB9LAorCQl7IE5VTEwsIE5VTEwsIH0sCisJfTsKKworCS8qIHF1b3RlIHRoZSBwYXRoIHRvIHByZXNlcnZlIHNwYWNlcywgZXRjLiAqLworCXNxX3F1b3RlX2J1ZigmcGF0aCwgcGFyYW1zLT5wYXRoKTsKKwlkaWN0WzBdLnZhbHVlID0gcGF0aC5idWY7CisKKwkvKiBleHBhbmQgYWxsICVmIHdpdGggdGhlIHF1b3RlZCBwYXRoICovCisJc3RyYnVmX2V4cGFuZCgmY21kLCBwYXJhbXMtPmNtZCwgc3RyYnVmX2V4cGFuZF9kaWN0X2NiLCAmZGljdCk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCisJYXJndlswXSA9IGNtZC5idWY7CisKKwljaGlsZF9wcm9jZXNzLmFyZ3YgPSBhcmd2OworCWNoaWxkX3Byb2Nlc3MudXNlX3NoZWxsID0gMTsKKwljaGlsZF9wcm9jZXNzLmluID0gLTE7CisJY2hpbGRfcHJvY2Vzcy5vdXQgPSBvdXQ7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2hpbGRfcHJvY2VzcykpCisJCXJldHVybiBlcnJvcigiY2Fubm90IGZvcmsgdG8gcnVuIGV4dGVybmFsIGZpbHRlciAlcyIsIHBhcmFtcy0+Y21kKTsKKworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisKKwlpZiAocGFyYW1zLT5zcmMpIHsKKwkJd3JpdGVfZXJyID0gKHdyaXRlX2luX2Z1bGwoY2hpbGRfcHJvY2Vzcy5pbiwKKwkJCQkJICAgcGFyYW1zLT5zcmMsIHBhcmFtcy0+c2l6ZSkgPCAwKTsKKwkJaWYgKGVycm5vID09IEVQSVBFKQorCQkJd3JpdGVfZXJyID0gMDsKKwl9IGVsc2UgeworCQl3cml0ZV9lcnIgPSBjb3B5X2ZkKHBhcmFtcy0+ZmQsIGNoaWxkX3Byb2Nlc3MuaW4pOworCQlpZiAod3JpdGVfZXJyID09IENPUFlfV1JJVEVfRVJST1IgJiYgZXJybm8gPT0gRVBJUEUpCisJCQl3cml0ZV9lcnIgPSAwOworCX0KKworCWlmIChjbG9zZShjaGlsZF9wcm9jZXNzLmluKSkKKwkJd3JpdGVfZXJyID0gMTsKKwlpZiAod3JpdGVfZXJyKQorCQllcnJvcigiY2Fubm90IGZlZWQgdGhlIGlucHV0IHRvIGV4dGVybmFsIGZpbHRlciAlcyIsIHBhcmFtcy0+Y21kKTsKKworCXNpZ2NoYWluX3BvcChTSUdQSVBFKTsKKworCXN0YXR1cyA9IGZpbmlzaF9jb21tYW5kKCZjaGlsZF9wcm9jZXNzKTsKKwlpZiAoc3RhdHVzKQorCQllcnJvcigiZXh0ZXJuYWwgZmlsdGVyICVzIGZhaWxlZCAlZCIsIHBhcmFtcy0+Y21kLCBzdGF0dXMpOworCisJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJcmV0dXJuICh3cml0ZV9lcnIgfHwgc3RhdHVzKTsKK30KKworc3RhdGljIGludCBhcHBseV9maWx0ZXIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLCBpbnQgZmQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwkvKgorCSAqIENyZWF0ZSBhIHBpcGVsaW5lIHRvIGhhdmUgdGhlIGNvbW1hbmQgZmlsdGVyIHRoZSBidWZmZXIncworCSAqIGNvbnRlbnRzLgorCSAqCisJICogKGNoaWxkIC0tPiBjbWQpIC0tPiB1cworCSAqLworCWludCByZXQgPSAxOworCXN0cnVjdCBzdHJidWYgbmJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBhc3luYyBhc3luYzsKKwlzdHJ1Y3QgZmlsdGVyX3BhcmFtcyBwYXJhbXM7CisKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWRzdCkKKwkJcmV0dXJuIDE7CisKKwltZW1zZXQoJmFzeW5jLCAwLCBzaXplb2YoYXN5bmMpKTsKKwlhc3luYy5wcm9jID0gZmlsdGVyX2J1ZmZlcl9vcl9mZDsKKwlhc3luYy5kYXRhID0gJnBhcmFtczsKKwlhc3luYy5vdXQgPSAtMTsKKwlwYXJhbXMuc3JjID0gc3JjOworCXBhcmFtcy5zaXplID0gbGVuOworCXBhcmFtcy5mZCA9IGZkOworCXBhcmFtcy5jbWQgPSBjbWQ7CisJcGFyYW1zLnBhdGggPSBwYXRoOworCisJZmZsdXNoKE5VTEwpOworCWlmIChzdGFydF9hc3luYygmYXN5bmMpKQorCQlyZXR1cm4gMDsJLyogZXJyb3Igd2FzIGFscmVhZHkgcmVwb3J0ZWQgKi8KKworCWlmIChzdHJidWZfcmVhZCgmbmJ1ZiwgYXN5bmMub3V0LCBsZW4pIDwgMCkgeworCQllcnJvcigicmVhZCBmcm9tIGV4dGVybmFsIGZpbHRlciAlcyBmYWlsZWQiLCBjbWQpOworCQlyZXQgPSAwOworCX0KKwlpZiAoY2xvc2UoYXN5bmMub3V0KSkgeworCQllcnJvcigicmVhZCBmcm9tIGV4dGVybmFsIGZpbHRlciAlcyBmYWlsZWQiLCBjbWQpOworCQlyZXQgPSAwOworCX0KKwlpZiAoZmluaXNoX2FzeW5jKCZhc3luYykpIHsKKwkJZXJyb3IoImV4dGVybmFsIGZpbHRlciAlcyBmYWlsZWQiLCBjbWQpOworCQlyZXQgPSAwOworCX0KKworCWlmIChyZXQpIHsKKwkJc3RyYnVmX3N3YXAoZHN0LCAmbmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZuYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IGNvbnZlcnRfZHJpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBjb252ZXJ0X2RyaXZlciAqbmV4dDsKKwljb25zdCBjaGFyICpzbXVkZ2U7CisJY29uc3QgY2hhciAqY2xlYW47CisJaW50IHJlcXVpcmVkOworfSAqdXNlcl9jb252ZXJ0LCAqKnVzZXJfY29udmVydF90YWlsOworCitzdGF0aWMgaW50IHJlYWRfY29udmVydF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqa2V5LCAqbmFtZTsKKwlpbnQgbmFtZWxlbjsKKwlzdHJ1Y3QgY29udmVydF9kcml2ZXIgKmRydjsKKworCS8qCisJICogRXh0ZXJuYWwgY29udmVyc2lvbiBkcml2ZXJzIGFyZSBjb25maWd1cmVkIHVzaW5nCisJICogImZpbHRlci48bmFtZT4udmFyaWFibGUiLgorCSAqLworCWlmIChwYXJzZV9jb25maWdfa2V5KHZhciwgImZpbHRlciIsICZuYW1lLCAmbmFtZWxlbiwgJmtleSkgPCAwIHx8ICFuYW1lKQorCQlyZXR1cm4gMDsKKwlmb3IgKGRydiA9IHVzZXJfY29udmVydDsgZHJ2OyBkcnYgPSBkcnYtPm5leHQpCisJCWlmICghc3RybmNtcChkcnYtPm5hbWUsIG5hbWUsIG5hbWVsZW4pICYmICFkcnYtPm5hbWVbbmFtZWxlbl0pCisJCQlicmVhazsKKwlpZiAoIWRydikgeworCQlkcnYgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY29udmVydF9kcml2ZXIpKTsKKwkJZHJ2LT5uYW1lID0geG1lbWR1cHoobmFtZSwgbmFtZWxlbik7CisJCSp1c2VyX2NvbnZlcnRfdGFpbCA9IGRydjsKKwkJdXNlcl9jb252ZXJ0X3RhaWwgPSAmKGRydi0+bmV4dCk7CisJfQorCisJLyoKKwkgKiBmaWx0ZXIuPG5hbWU+LnNtdWRnZSBhbmQgZmlsdGVyLjxuYW1lPi5jbGVhbiBzcGVjaWZpZXMKKwkgKiB0aGUgY29tbWFuZCBsaW5lOgorCSAqCisJICoJY29tbWFuZC1saW5lCisJICoKKwkgKiBUaGUgY29tbWFuZC1saW5lIHdpbGwgbm90IGJlIGludGVycG9sYXRlZCBpbiBhbnkgd2F5LgorCSAqLworCisJaWYgKCFzdHJjbXAoInNtdWRnZSIsIGtleSkpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZHJ2LT5zbXVkZ2UsIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoImNsZWFuIiwga2V5KSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZkcnYtPmNsZWFuLCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKCJyZXF1aXJlZCIsIGtleSkpIHsKKwkJZHJ2LT5yZXF1aXJlZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfaWRlbnQoY29uc3QgY2hhciAqY3AsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwkvKgorCSAqICIkSWQ6IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgJCIgPD0+ICIkSWQkIgorCSAqLworCWludCBjbnQgPSAwOworCWNoYXIgY2g7CisKKwl3aGlsZSAoc2l6ZSkgeworCQljaCA9ICpjcCsrOworCQlzaXplLS07CisJCWlmIChjaCAhPSAnJCcpCisJCQljb250aW51ZTsKKwkJaWYgKHNpemUgPCAzKQorCQkJYnJlYWs7CisJCWlmIChtZW1jbXAoIklkIiwgY3AsIDIpKQorCQkJY29udGludWU7CisJCWNoID0gY3BbMl07CisJCWNwICs9IDM7CisJCXNpemUgLT0gMzsKKwkJaWYgKGNoID09ICckJykKKwkJCWNudCsrOyAvKiAkSWQkICovCisJCWlmIChjaCAhPSAnOicpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiAiJElkOiAuLi4gIjsgc2NhbiB1cCB0byB0aGUgY2xvc2luZyBkb2xsYXIgc2lnbiBhbmQgZGlzY2FyZC4KKwkJICovCisJCXdoaWxlIChzaXplKSB7CisJCQljaCA9ICpjcCsrOworCQkJc2l6ZS0tOworCQkJaWYgKGNoID09ICckJykgeworCQkJCWNudCsrOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNoID09ICdcbicpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludCBpZGVudF90b19naXQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLCBpbnQgaWRlbnQpCit7CisJY2hhciAqZHN0LCAqZG9sbGFyOworCisJaWYgKCFpZGVudCB8fCAoc3JjICYmICFjb3VudF9pZGVudChzcmMsIGxlbikpKQorCQlyZXR1cm4gMDsKKworCWlmICghYnVmKQorCQlyZXR1cm4gMTsKKworCS8qIG9ubHkgZ3JvdyBpZiBub3QgaW4gcGxhY2UgKi8KKwlpZiAoc3RyYnVmX2F2YWlsKGJ1ZikgKyBidWYtPmxlbiA8IGxlbikKKwkJc3RyYnVmX2dyb3coYnVmLCBsZW4gLSBidWYtPmxlbik7CisJZHN0ID0gYnVmLT5idWY7CisJZm9yICg7OykgeworCQlkb2xsYXIgPSBtZW1jaHIoc3JjLCAnJCcsIGxlbik7CisJCWlmICghZG9sbGFyKQorCQkJYnJlYWs7CisJCW1lbW1vdmUoZHN0LCBzcmMsIGRvbGxhciArIDEgLSBzcmMpOworCQlkc3QgKz0gZG9sbGFyICsgMSAtIHNyYzsKKwkJbGVuIC09IGRvbGxhciArIDEgLSBzcmM7CisJCXNyYyAgPSBkb2xsYXIgKyAxOworCisJCWlmIChsZW4gPiAzICYmICFtZW1jbXAoc3JjLCAiSWQ6IiwgMykpIHsKKwkJCWRvbGxhciA9IG1lbWNocihzcmMgKyAzLCAnJCcsIGxlbiAtIDMpOworCQkJaWYgKCFkb2xsYXIpCisJCQkJYnJlYWs7CisJCQlpZiAobWVtY2hyKHNyYyArIDMsICdcbicsIGRvbGxhciAtIHNyYyAtIDMpKSB7CisJCQkJLyogTGluZSBicmVhayBiZWZvcmUgdGhlIG5leHQgZG9sbGFyLiAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQltZW1jcHkoZHN0LCAiSWQkIiwgMyk7CisJCQlkc3QgKz0gMzsKKwkJCWxlbiAtPSBkb2xsYXIgKyAxIC0gc3JjOworCQkJc3JjICA9IGRvbGxhciArIDE7CisJCX0KKwl9CisJbWVtbW92ZShkc3QsIHNyYywgbGVuKTsKKwlzdHJidWZfc2V0bGVuKGJ1ZiwgZHN0ICsgbGVuIC0gYnVmLT5idWYpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGlkZW50X3RvX3dvcmt0cmVlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZiAqYnVmLCBpbnQgaWRlbnQpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyICp0b19mcmVlID0gTlVMTCwgKmRvbGxhciwgKnNwYzsKKwlpbnQgY250OworCisJaWYgKCFpZGVudCkKKwkJcmV0dXJuIDA7CisKKwljbnQgPSBjb3VudF9pZGVudChzcmMsIGxlbik7CisJaWYgKCFjbnQpCisJCXJldHVybiAwOworCisJLyogYXJlIHdlICJmYWtpbmciIGluIHBsYWNlIGVkaXRpbmcgPyAqLworCWlmIChzcmMgPT0gYnVmLT5idWYpCisJCXRvX2ZyZWUgPSBzdHJidWZfZGV0YWNoKGJ1ZiwgTlVMTCk7CisJaGFzaF9zaGExX2ZpbGUoc3JjLCBsZW4sICJibG9iIiwgc2hhMSk7CisKKwlzdHJidWZfZ3JvdyhidWYsIGxlbiArIGNudCAqIDQzKTsKKwlmb3IgKDs7KSB7CisJCS8qIHN0ZXAgMTogcnVuIHRvIHRoZSBuZXh0ICckJyAqLworCQlkb2xsYXIgPSBtZW1jaHIoc3JjLCAnJCcsIGxlbik7CisJCWlmICghZG9sbGFyKQorCQkJYnJlYWs7CisJCXN0cmJ1Zl9hZGQoYnVmLCBzcmMsIGRvbGxhciArIDEgLSBzcmMpOworCQlsZW4gLT0gZG9sbGFyICsgMSAtIHNyYzsKKwkJc3JjICA9IGRvbGxhciArIDE7CisKKwkJLyogc3RlcCAyOiBkb2VzIGl0IGxvb2tzIGxpa2UgYSBiaXQgbGlrZSBJZDp4eHgkIG9yIElkJCA/ICovCisJCWlmIChsZW4gPCAzIHx8IG1lbWNtcCgiSWQiLCBzcmMsIDIpKQorCQkJY29udGludWU7CisKKwkJLyogc3RlcCAzOiBza2lwIG92ZXIgSWQkIG9yIElkOnh4eHh4JCAqLworCQlpZiAoc3JjWzJdID09ICckJykgeworCQkJc3JjICs9IDM7CisJCQlsZW4gLT0gMzsKKwkJfSBlbHNlIGlmIChzcmNbMl0gPT0gJzonKSB7CisJCQkvKgorCQkJICogSXQncyBwb3NzaWJsZSB0aGF0IGFuIGV4cGFuZGVkIElkIGhhcyBjcmVwdCBpdHMgd2F5IGludG8gdGhlCisJCQkgKiByZXBvc2l0b3J5LCB3ZSBjb3BlIHdpdGggdGhhdCBieSBzdHJpcHBpbmcgdGhlIGV4cGFuc2lvbiBvdXQuCisJCQkgKiBUaGlzIGlzIHByb2JhYmx5IG5vdCBhIGdvb2QgaWRlYSwgc2luY2UgaXQgd2lsbCBjYXVzZSBjaGFuZ2VzCisJCQkgKiBvbiBjaGVja291dCwgd2hpY2ggd29uJ3QgZ28gYXdheSBieSBzdGFzaCwgYnV0IGxldCdzIGtlZXAgaXQKKwkJCSAqIGZvciBnaXQtc3R5bGUgaWRzLgorCQkJICovCisJCQlkb2xsYXIgPSBtZW1jaHIoc3JjICsgMywgJyQnLCBsZW4gLSAzKTsKKwkJCWlmICghZG9sbGFyKSB7CisJCQkJLyogaW5jb21wbGV0ZSBrZXl3b3JkLCBubyBtb3JlICckJywgc28ganVzdCBxdWl0IHRoZSBsb29wICovCisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChtZW1jaHIoc3JjICsgMywgJ1xuJywgZG9sbGFyIC0gc3JjIC0gMykpIHsKKwkJCQkvKiBMaW5lIGJyZWFrIGJlZm9yZSB0aGUgbmV4dCBkb2xsYXIuICovCisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXNwYyA9IG1lbWNocihzcmMgKyA0LCAnICcsIGRvbGxhciAtIHNyYyAtIDQpOworCQkJaWYgKHNwYyAmJiBzcGMgPCBkb2xsYXItMSkgeworCQkJCS8qIFRoZXJlIGFyZSBzcGFjZXMgaW4gdW5leHBlY3RlZCBwbGFjZXMuCisJCQkJICogVGhpcyBpcyBwcm9iYWJseSBhbiBpZCBmcm9tIHNvbWUgb3RoZXIKKwkJCQkgKiB2ZXJzaW9uaW5nIHN5c3RlbS4gS2VlcCBpdCBmb3Igbm93LgorCQkJCSAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlsZW4gLT0gZG9sbGFyICsgMSAtIHNyYzsKKwkJCXNyYyAgPSBkb2xsYXIgKyAxOworCQl9IGVsc2UgeworCQkJLyogaXQgd2Fzbid0IGEgIklkJCIgb3IgIklkOnh4eHgkIiAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBzdGVwIDQ6IHN1YnN0aXR1dGUgKi8KKwkJc3RyYnVmX2FkZHN0cihidWYsICJJZDogIik7CisJCXN0cmJ1Zl9hZGQoYnVmLCBzaGExX3RvX2hleChzaGExKSwgNDApOworCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIiAkIik7CisJfQorCXN0cmJ1Zl9hZGQoYnVmLCBzcmMsIGxlbik7CisKKwlmcmVlKHRvX2ZyZWUpOworCXJldHVybiAxOworfQorCitzdGF0aWMgZW51bSBjcmxmX2FjdGlvbiBnaXRfcGF0aF9jaGVja19jcmxmKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2spCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSBjaGVjay0+dmFsdWU7CisKKwlpZiAoQVRUUl9UUlVFKHZhbHVlKSkKKwkJcmV0dXJuIENSTEZfVEVYVDsKKwllbHNlIGlmIChBVFRSX0ZBTFNFKHZhbHVlKSkKKwkJcmV0dXJuIENSTEZfQklOQVJZOworCWVsc2UgaWYgKEFUVFJfVU5TRVQodmFsdWUpKQorCQk7CisJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImlucHV0IikpCisJCXJldHVybiBDUkxGX0lOUFVUOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJhdXRvIikpCisJCXJldHVybiBDUkxGX0FVVE87CisJcmV0dXJuIENSTEZfR1VFU1M7Cit9CisKK3N0YXRpYyBlbnVtIGVvbCBnaXRfcGF0aF9jaGVja19lb2woY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVjaykKK3sKKwljb25zdCBjaGFyICp2YWx1ZSA9IGNoZWNrLT52YWx1ZTsKKworCWlmIChBVFRSX1VOU0VUKHZhbHVlKSkKKwkJOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJsZiIpKQorCQlyZXR1cm4gRU9MX0xGOworCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJjcmxmIikpCisJCXJldHVybiBFT0xfQ1JMRjsKKwlyZXR1cm4gRU9MX1VOU0VUOworfQorCitzdGF0aWMgc3RydWN0IGNvbnZlcnRfZHJpdmVyICpnaXRfcGF0aF9jaGVja19jb252ZXJ0KGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCSAgICAgc3RydWN0IGdpdF9hdHRyX2NoZWNrICpjaGVjaykKK3sKKwljb25zdCBjaGFyICp2YWx1ZSA9IGNoZWNrLT52YWx1ZTsKKwlzdHJ1Y3QgY29udmVydF9kcml2ZXIgKmRydjsKKworCWlmIChBVFRSX1RSVUUodmFsdWUpIHx8IEFUVFJfRkFMU0UodmFsdWUpIHx8IEFUVFJfVU5TRVQodmFsdWUpKQorCQlyZXR1cm4gTlVMTDsKKwlmb3IgKGRydiA9IHVzZXJfY29udmVydDsgZHJ2OyBkcnYgPSBkcnYtPm5leHQpCisJCWlmICghc3RyY21wKHZhbHVlLCBkcnYtPm5hbWUpKQorCQkJcmV0dXJuIGRydjsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBnaXRfcGF0aF9jaGVja19pZGVudChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgKmNoZWNrKQoreworCWNvbnN0IGNoYXIgKnZhbHVlID0gY2hlY2stPnZhbHVlOworCisJcmV0dXJuICEhQVRUUl9UUlVFKHZhbHVlKTsKK30KKworc3RhdGljIGVudW0gY3JsZl9hY3Rpb24gaW5wdXRfY3JsZl9hY3Rpb24oZW51bSBjcmxmX2FjdGlvbiB0ZXh0X2F0dHIsIGVudW0gZW9sIGVvbF9hdHRyKQoreworCWlmICh0ZXh0X2F0dHIgPT0gQ1JMRl9CSU5BUlkpCisJCXJldHVybiBDUkxGX0JJTkFSWTsKKwlpZiAoZW9sX2F0dHIgPT0gRU9MX0xGKQorCQlyZXR1cm4gQ1JMRl9JTlBVVDsKKwlpZiAoZW9sX2F0dHIgPT0gRU9MX0NSTEYpCisJCXJldHVybiBDUkxGX0NSTEY7CisJcmV0dXJuIHRleHRfYXR0cjsKK30KKworc3RydWN0IGNvbnZfYXR0cnMgeworCXN0cnVjdCBjb252ZXJ0X2RyaXZlciAqZHJ2OworCWVudW0gY3JsZl9hY3Rpb24gY3JsZl9hY3Rpb247CisJZW51bSBlb2wgZW9sX2F0dHI7CisJaW50IGlkZW50OworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnZfYXR0cl9uYW1lW10gPSB7CisJImNybGYiLCAiaWRlbnQiLCAiZmlsdGVyIiwgImVvbCIsICJ0ZXh0IiwKK307CisjZGVmaW5lIE5VTV9DT05WX0FUVFJTIEFSUkFZX1NJWkUoY29udl9hdHRyX25hbWUpCisKK3N0YXRpYyB2b2lkIGNvbnZlcnRfYXR0cnMoc3RydWN0IGNvbnZfYXR0cnMgKmNhLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBpOworCXN0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgY2NoZWNrW05VTV9DT05WX0FUVFJTXTsKKworCWlmICghY2NoZWNrWzBdLmF0dHIpIHsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9DT05WX0FUVFJTOyBpKyspCisJCQljY2hlY2tbaV0uYXR0ciA9IGdpdF9hdHRyKGNvbnZfYXR0cl9uYW1lW2ldKTsKKwkJdXNlcl9jb252ZXJ0X3RhaWwgPSAmdXNlcl9jb252ZXJ0OworCQlnaXRfY29uZmlnKHJlYWRfY29udmVydF9jb25maWcsIE5VTEwpOworCX0KKworCWlmICghZ2l0X2NoZWNrX2F0dHIocGF0aCwgTlVNX0NPTlZfQVRUUlMsIGNjaGVjaykpIHsKKwkJY2EtPmNybGZfYWN0aW9uID0gZ2l0X3BhdGhfY2hlY2tfY3JsZihwYXRoLCBjY2hlY2sgKyA0KTsKKwkJaWYgKGNhLT5jcmxmX2FjdGlvbiA9PSBDUkxGX0dVRVNTKQorCQkJY2EtPmNybGZfYWN0aW9uID0gZ2l0X3BhdGhfY2hlY2tfY3JsZihwYXRoLCBjY2hlY2sgKyAwKTsKKwkJY2EtPmlkZW50ID0gZ2l0X3BhdGhfY2hlY2tfaWRlbnQocGF0aCwgY2NoZWNrICsgMSk7CisJCWNhLT5kcnYgPSBnaXRfcGF0aF9jaGVja19jb252ZXJ0KHBhdGgsIGNjaGVjayArIDIpOworCQljYS0+ZW9sX2F0dHIgPSBnaXRfcGF0aF9jaGVja19lb2wocGF0aCwgY2NoZWNrICsgMyk7CisJfSBlbHNlIHsKKwkJY2EtPmRydiA9IE5VTEw7CisJCWNhLT5jcmxmX2FjdGlvbiA9IENSTEZfR1VFU1M7CisJCWNhLT5lb2xfYXR0ciA9IEVPTF9VTlNFVDsKKwkJY2EtPmlkZW50ID0gMDsKKwl9Cit9CisKK2ludCB3b3VsZF9jb252ZXJ0X3RvX2dpdF9maWx0ZXJfZmQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgY29udl9hdHRycyBjYTsKKworCWNvbnZlcnRfYXR0cnMoJmNhLCBwYXRoKTsKKwlpZiAoIWNhLmRydikKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEFwcGx5IGEgZmlsdGVyIHRvIGFuIGZkIG9ubHkgaWYgdGhlIGZpbHRlciBpcyByZXF1aXJlZCB0byBzdWNjZWVkLgorCSAqIFdlIG11c3QgZGllIGlmIHRoZSBmaWx0ZXIgZmFpbHMsIGJlY2F1c2UgdGhlIG9yaWdpbmFsIGRhdGEgYmVmb3JlCisJICogZmlsdGVyaW5nIGlzIG5vdCBhdmFpbGFibGUuCisJICovCisJaWYgKCFjYS5kcnYtPnJlcXVpcmVkKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhcHBseV9maWx0ZXIocGF0aCwgTlVMTCwgMCwgLTEsIE5VTEwsIGNhLmRydi0+Y2xlYW4pOworfQorCitpbnQgY29udmVydF90b19naXQoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdHJidWYgKmRzdCwgZW51bSBzYWZlX2NybGYgY2hlY2tzYWZlKQoreworCWludCByZXQgPSAwOworCWNvbnN0IGNoYXIgKmZpbHRlciA9IE5VTEw7CisJaW50IHJlcXVpcmVkID0gMDsKKwlzdHJ1Y3QgY29udl9hdHRycyBjYTsKKworCWNvbnZlcnRfYXR0cnMoJmNhLCBwYXRoKTsKKwlpZiAoY2EuZHJ2KSB7CisJCWZpbHRlciA9IGNhLmRydi0+Y2xlYW47CisJCXJlcXVpcmVkID0gY2EuZHJ2LT5yZXF1aXJlZDsKKwl9CisKKwlyZXQgfD0gYXBwbHlfZmlsdGVyKHBhdGgsIHNyYywgbGVuLCAtMSwgZHN0LCBmaWx0ZXIpOworCWlmICghcmV0ICYmIHJlcXVpcmVkKQorCQlkaWUoIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiLCBwYXRoLCBjYS5kcnYtPm5hbWUpOworCisJaWYgKHJldCAmJiBkc3QpIHsKKwkJc3JjID0gZHN0LT5idWY7CisJCWxlbiA9IGRzdC0+bGVuOworCX0KKwljYS5jcmxmX2FjdGlvbiA9IGlucHV0X2NybGZfYWN0aW9uKGNhLmNybGZfYWN0aW9uLCBjYS5lb2xfYXR0cik7CisJcmV0IHw9IGNybGZfdG9fZ2l0KHBhdGgsIHNyYywgbGVuLCBkc3QsIGNhLmNybGZfYWN0aW9uLCBjaGVja3NhZmUpOworCWlmIChyZXQgJiYgZHN0KSB7CisJCXNyYyA9IGRzdC0+YnVmOworCQlsZW4gPSBkc3QtPmxlbjsKKwl9CisJcmV0dXJuIHJldCB8IGlkZW50X3RvX2dpdChwYXRoLCBzcmMsIGxlbiwgZHN0LCBjYS5pZGVudCk7Cit9CisKK3ZvaWQgY29udmVydF90b19naXRfZmlsdGVyX2ZkKGNvbnN0IGNoYXIgKnBhdGgsIGludCBmZCwgc3RydWN0IHN0cmJ1ZiAqZHN0LAorCQkJICAgICAgZW51bSBzYWZlX2NybGYgY2hlY2tzYWZlKQoreworCXN0cnVjdCBjb252X2F0dHJzIGNhOworCWNvbnZlcnRfYXR0cnMoJmNhLCBwYXRoKTsKKworCWFzc2VydChjYS5kcnYpOworCWFzc2VydChjYS5kcnYtPmNsZWFuKTsKKworCWlmICghYXBwbHlfZmlsdGVyKHBhdGgsIE5VTEwsIDAsIGZkLCBkc3QsIGNhLmRydi0+Y2xlYW4pKQorCQlkaWUoIiVzOiBjbGVhbiBmaWx0ZXIgJyVzJyBmYWlsZWQiLCBwYXRoLCBjYS5kcnYtPm5hbWUpOworCisJY2EuY3JsZl9hY3Rpb24gPSBpbnB1dF9jcmxmX2FjdGlvbihjYS5jcmxmX2FjdGlvbiwgY2EuZW9sX2F0dHIpOworCWNybGZfdG9fZ2l0KHBhdGgsIGRzdC0+YnVmLCBkc3QtPmxlbiwgZHN0LCBjYS5jcmxmX2FjdGlvbiwgY2hlY2tzYWZlKTsKKwlpZGVudF90b19naXQocGF0aCwgZHN0LT5idWYsIGRzdC0+bGVuLCBkc3QsIGNhLmlkZW50KTsKK30KKworc3RhdGljIGludCBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZV9pbnRlcm5hbChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsCisJCQkJCSAgICBzaXplX3QgbGVuLCBzdHJ1Y3Qgc3RyYnVmICpkc3QsCisJCQkJCSAgICBpbnQgbm9ybWFsaXppbmcpCit7CisJaW50IHJldCA9IDAsIHJldF9maWx0ZXIgPSAwOworCWNvbnN0IGNoYXIgKmZpbHRlciA9IE5VTEw7CisJaW50IHJlcXVpcmVkID0gMDsKKwlzdHJ1Y3QgY29udl9hdHRycyBjYTsKKworCWNvbnZlcnRfYXR0cnMoJmNhLCBwYXRoKTsKKwlpZiAoY2EuZHJ2KSB7CisJCWZpbHRlciA9IGNhLmRydi0+c211ZGdlOworCQlyZXF1aXJlZCA9IGNhLmRydi0+cmVxdWlyZWQ7CisJfQorCisJcmV0IHw9IGlkZW50X3RvX3dvcmt0cmVlKHBhdGgsIHNyYywgbGVuLCBkc3QsIGNhLmlkZW50KTsKKwlpZiAocmV0KSB7CisJCXNyYyA9IGRzdC0+YnVmOworCQlsZW4gPSBkc3QtPmxlbjsKKwl9CisJLyoKKwkgKiBDUkxGIGNvbnZlcnNpb24gY2FuIGJlIHNraXBwZWQgaWYgbm9ybWFsaXppbmcsIHVubGVzcyB0aGVyZQorCSAqIGlzIGEgc211ZGdlIGZpbHRlci4gIFRoZSBmaWx0ZXIgbWlnaHQgZXhwZWN0IENSTEZzLgorCSAqLworCWlmIChmaWx0ZXIgfHwgIW5vcm1hbGl6aW5nKSB7CisJCWNhLmNybGZfYWN0aW9uID0gaW5wdXRfY3JsZl9hY3Rpb24oY2EuY3JsZl9hY3Rpb24sIGNhLmVvbF9hdHRyKTsKKwkJcmV0IHw9IGNybGZfdG9fd29ya3RyZWUocGF0aCwgc3JjLCBsZW4sIGRzdCwgY2EuY3JsZl9hY3Rpb24pOworCQlpZiAocmV0KSB7CisJCQlzcmMgPSBkc3QtPmJ1ZjsKKwkJCWxlbiA9IGRzdC0+bGVuOworCQl9CisJfQorCisJcmV0X2ZpbHRlciA9IGFwcGx5X2ZpbHRlcihwYXRoLCBzcmMsIGxlbiwgLTEsIGRzdCwgZmlsdGVyKTsKKwlpZiAoIXJldF9maWx0ZXIgJiYgcmVxdWlyZWQpCisJCWRpZSgiJXM6IHNtdWRnZSBmaWx0ZXIgJXMgZmFpbGVkIiwgcGF0aCwgY2EuZHJ2LT5uYW1lKTsKKworCXJldHVybiByZXQgfCByZXRfZmlsdGVyOworfQorCitpbnQgY29udmVydF90b193b3JraW5nX3RyZWUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLCBzdHJ1Y3Qgc3RyYnVmICpkc3QpCit7CisJcmV0dXJuIGNvbnZlcnRfdG9fd29ya2luZ190cmVlX2ludGVybmFsKHBhdGgsIHNyYywgbGVuLCBkc3QsIDApOworfQorCitpbnQgcmVub3JtYWxpemVfYnVmZmVyKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwgc3RydWN0IHN0cmJ1ZiAqZHN0KQoreworCWludCByZXQgPSBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZV9pbnRlcm5hbChwYXRoLCBzcmMsIGxlbiwgZHN0LCAxKTsKKwlpZiAocmV0KSB7CisJCXNyYyA9IGRzdC0+YnVmOworCQlsZW4gPSBkc3QtPmxlbjsKKwl9CisJcmV0dXJuIHJldCB8IGNvbnZlcnRfdG9fZ2l0KHBhdGgsIHNyYywgbGVuLCBkc3QsIFNBRkVfQ1JMRl9GQUxTRSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFN0cmVhbWluZyBjb252ZXJzaW9uIHN1cHBvcnQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgaW50ICgqZmlsdGVyX2ZuKShzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqLAorCQkJIGNvbnN0IGNoYXIgKmlucHV0LCBzaXplX3QgKmlzaXplX3AsCisJCQkgY2hhciAqb3V0cHV0LCBzaXplX3QgKm9zaXplX3ApOwordHlwZWRlZiB2b2lkICgqZnJlZV9mbikoc3RydWN0IHN0cmVhbV9maWx0ZXIgKik7CisKK3N0cnVjdCBzdHJlYW1fZmlsdGVyX3Z0YmwgeworCWZpbHRlcl9mbiBmaWx0ZXI7CisJZnJlZV9mbiBmcmVlOworfTsKKworc3RydWN0IHN0cmVhbV9maWx0ZXIgeworCXN0cnVjdCBzdHJlYW1fZmlsdGVyX3Z0YmwgKnZ0Ymw7Cit9OworCitzdGF0aWMgaW50IG51bGxfZmlsdGVyX2ZuKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIsCisJCQkgIGNvbnN0IGNoYXIgKmlucHV0LCBzaXplX3QgKmlzaXplX3AsCisJCQkgIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKQoreworCXNpemVfdCBjb3VudDsKKworCWlmICghaW5wdXQpCisJCXJldHVybiAwOyAvKiB3ZSBkbyBub3Qga2VlcCBhbnkgc3RhdGVzICovCisJY291bnQgPSAqaXNpemVfcDsKKwlpZiAoKm9zaXplX3AgPCBjb3VudCkKKwkJY291bnQgPSAqb3NpemVfcDsKKwlpZiAoY291bnQpIHsKKwkJbWVtbW92ZShvdXRwdXQsIGlucHV0LCBjb3VudCk7CisJCSppc2l6ZV9wIC09IGNvdW50OworCQkqb3NpemVfcCAtPSBjb3VudDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG51bGxfZnJlZV9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyKQoreworCTsgLyogbm90aGluZyAtLSBudWxsIGluc3RhbmNlcyBhcmUgc2hhcmVkICovCit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlcl92dGJsIG51bGxfdnRibCA9IHsKKwludWxsX2ZpbHRlcl9mbiwKKwludWxsX2ZyZWVfZm4sCit9OworCitzdGF0aWMgc3RydWN0IHN0cmVhbV9maWx0ZXIgbnVsbF9maWx0ZXJfc2luZ2xldG9uID0geworCSZudWxsX3Z0YmwsCit9OworCitpbnQgaXNfbnVsbF9zdHJlYW1fZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIpCit7CisJcmV0dXJuIGZpbHRlciA9PSAmbnVsbF9maWx0ZXJfc2luZ2xldG9uOworfQorCisKKy8qCisgKiBMRi10by1DUkxGIGZpbHRlcgorICovCisKK3N0cnVjdCBsZl90b19jcmxmX2ZpbHRlciB7CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgZmlsdGVyOworCXVuc2lnbmVkIGhhc19oZWxkOjE7CisJY2hhciBoZWxkOworfTsKKworc3RhdGljIGludCBsZl90b19jcmxmX2ZpbHRlcl9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyLAorCQkJCWNvbnN0IGNoYXIgKmlucHV0LCBzaXplX3QgKmlzaXplX3AsCisJCQkJY2hhciAqb3V0cHV0LCBzaXplX3QgKm9zaXplX3ApCit7CisJc2l6ZV90IGNvdW50LCBvID0gMDsKKwlzdHJ1Y3QgbGZfdG9fY3JsZl9maWx0ZXIgKmxmX3RvX2NybGYgPSAoc3RydWN0IGxmX3RvX2NybGZfZmlsdGVyICopZmlsdGVyOworCisJLyoKKwkgKiBXZSBtYXkgYmUgaG9sZGluZyBvbnRvIHRoZSBDUiB0byBzZWUgaWYgaXQgaXMgZm9sbG93ZWQgYnkgYQorCSAqIExGLCBpbiB3aGljaCBjYXNlIHdlIHdvdWxkIG5lZWQgdG8gZ28gdG8gdGhlIG1haW4gbG9vcC4KKwkgKiBPdGhlcndpc2UsIGp1c3QgZW1pdCBpdCB0byB0aGUgb3V0cHV0IHN0cmVhbS4KKwkgKi8KKwlpZiAobGZfdG9fY3JsZi0+aGFzX2hlbGQgJiYgKGxmX3RvX2NybGYtPmhlbGQgIT0gJ1xyJyB8fCAhaW5wdXQpKSB7CisJCW91dHB1dFtvKytdID0gbGZfdG9fY3JsZi0+aGVsZDsKKwkJbGZfdG9fY3JsZi0+aGFzX2hlbGQgPSAwOworCX0KKworCS8qIFdlIGFyZSB0b2xkIHRvIGRyYWluICovCisJaWYgKCFpbnB1dCkgeworCQkqb3NpemVfcCAtPSBvOworCQlyZXR1cm4gMDsKKwl9CisKKwljb3VudCA9ICppc2l6ZV9wOworCWlmIChjb3VudCB8fCBsZl90b19jcmxmLT5oYXNfaGVsZCkgeworCQlzaXplX3QgaTsKKwkJaW50IHdhc19jciA9IDA7CisKKwkJaWYgKGxmX3RvX2NybGYtPmhhc19oZWxkKSB7CisJCQl3YXNfY3IgPSAxOworCQkJbGZfdG9fY3JsZi0+aGFzX2hlbGQgPSAwOworCQl9CisKKwkJZm9yIChpID0gMDsgbyA8ICpvc2l6ZV9wICYmIGkgPCBjb3VudDsgaSsrKSB7CisJCQljaGFyIGNoID0gaW5wdXRbaV07CisKKwkJCWlmIChjaCA9PSAnXG4nKSB7CisJCQkJb3V0cHV0W28rK10gPSAnXHInOworCQkJfSBlbHNlIGlmICh3YXNfY3IpIHsKKwkJCQkvKgorCQkJCSAqIFByZXZpb3VzIHJvdW5kIHNhdyBDUiBhbmQgaXQgaXMgbm90IGZvbGxvd2VkCisJCQkJICogYnkgYSBMRjsgZW1pdCB0aGUgQ1IgYmVmb3JlIHByb2Nlc3NpbmcgdGhlCisJCQkJICogY3VycmVudCBjaGFyYWN0ZXIuCisJCQkJICovCisJCQkJb3V0cHV0W28rK10gPSAnXHInOworCQkJfQorCisJCQkvKgorCQkJICogV2UgbWF5IGhhdmUgY29uc3VtZWQgdGhlIGxhc3Qgb3V0cHV0IHNsb3QsCisJCQkgKiBpbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gYnJlYWsgb3V0IG9mIHRoaXMKKwkJCSAqIGxvb3A7IGhvbGQgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGJlZm9yZQorCQkJICogcmV0dXJuaW5nLgorCQkJICovCisJCQlpZiAoKm9zaXplX3AgPD0gbykgeworCQkJCWxmX3RvX2NybGYtPmhhc19oZWxkID0gMTsKKwkJCQlsZl90b19jcmxmLT5oZWxkID0gY2g7CisJCQkJY29udGludWU7IC8qIGJyZWFrIGJ1dCBpbmNyZW1lbnQgaSAqLworCQkJfQorCisJCQlpZiAoY2ggPT0gJ1xyJykgeworCQkJCXdhc19jciA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXdhc19jciA9IDA7CisJCQlvdXRwdXRbbysrXSA9IGNoOworCQl9CisKKwkJKm9zaXplX3AgLT0gbzsKKwkJKmlzaXplX3AgLT0gaTsKKworCQlpZiAoIWxmX3RvX2NybGYtPmhhc19oZWxkICYmIHdhc19jcikgeworCQkJbGZfdG9fY3JsZi0+aGFzX2hlbGQgPSAxOworCQkJbGZfdG9fY3JsZi0+aGVsZCA9ICdccic7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxmX3RvX2NybGZfZnJlZV9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyKQoreworCWZyZWUoZmlsdGVyKTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJlYW1fZmlsdGVyX3Z0YmwgbGZfdG9fY3JsZl92dGJsID0geworCWxmX3RvX2NybGZfZmlsdGVyX2ZuLAorCWxmX3RvX2NybGZfZnJlZV9mbiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqbGZfdG9fY3JsZl9maWx0ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgbGZfdG9fY3JsZl9maWx0ZXIgKmxmX3RvX2NybGYgPSB4Y2FsbG9jKDEsIHNpemVvZigqbGZfdG9fY3JsZikpOworCisJbGZfdG9fY3JsZi0+ZmlsdGVyLnZ0YmwgPSAmbGZfdG9fY3JsZl92dGJsOworCXJldHVybiAoc3RydWN0IHN0cmVhbV9maWx0ZXIgKilsZl90b19jcmxmOworfQorCisvKgorICogQ2FzY2FkZSBmaWx0ZXIKKyAqLworI2RlZmluZSBGSUxURVJfQlVGRkVSIDEwMjQKK3N0cnVjdCBjYXNjYWRlX2ZpbHRlciB7CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgZmlsdGVyOworCXN0cnVjdCBzdHJlYW1fZmlsdGVyICpvbmU7CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgKnR3bzsKKwljaGFyIGJ1ZltGSUxURVJfQlVGRkVSXTsKKwlpbnQgZW5kLCBwdHI7Cit9OworCitzdGF0aWMgaW50IGNhc2NhZGVfZmlsdGVyX2ZuKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIsCisJCQkgICAgIGNvbnN0IGNoYXIgKmlucHV0LCBzaXplX3QgKmlzaXplX3AsCisJCQkgICAgIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKQoreworCXN0cnVjdCBjYXNjYWRlX2ZpbHRlciAqY2FzID0gKHN0cnVjdCBjYXNjYWRlX2ZpbHRlciAqKSBmaWx0ZXI7CisJc2l6ZV90IGZpbGxlZCA9IDA7CisJc2l6ZV90IHN6ID0gKm9zaXplX3A7CisJc2l6ZV90IHRvX2ZlZWQsIHJlbWFpbmluZzsKKworCS8qCisJICogaW5wdXQgLS0gKG9uZSkgLS0+IGJ1ZiAtLSAodHdvKSAtLT4gb3V0cHV0CisJICovCisJd2hpbGUgKGZpbGxlZCA8IHN6KSB7CisJCXJlbWFpbmluZyA9IHN6IC0gZmlsbGVkOworCisJCS8qIGRvIHdlIGFscmVhZHkgaGF2ZSBzb21ldGhpbmcgdG8gZmVlZCB0d28gd2l0aD8gKi8KKwkJaWYgKGNhcy0+cHRyIDwgY2FzLT5lbmQpIHsKKwkJCXRvX2ZlZWQgPSBjYXMtPmVuZCAtIGNhcy0+cHRyOworCQkJaWYgKHN0cmVhbV9maWx0ZXIoY2FzLT50d28sCisJCQkJCSAgY2FzLT5idWYgKyBjYXMtPnB0ciwgJnRvX2ZlZWQsCisJCQkJCSAgb3V0cHV0ICsgZmlsbGVkLCAmcmVtYWluaW5nKSkKKwkJCQlyZXR1cm4gLTE7CisJCQljYXMtPnB0ciArPSAoY2FzLT5lbmQgLSBjYXMtPnB0cikgLSB0b19mZWVkOworCQkJZmlsbGVkID0gc3ogLSByZW1haW5pbmc7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGZlZWQgb25lIGZyb20gdXBzdHJlYW0gYW5kIGhhdmUgaXQgZW1pdCBpbnRvIG91ciBidWZmZXIgKi8KKwkJdG9fZmVlZCA9IGlucHV0ID8gKmlzaXplX3AgOiAwOworCQlpZiAoaW5wdXQgJiYgIXRvX2ZlZWQpCisJCQlicmVhazsKKwkJcmVtYWluaW5nID0gc2l6ZW9mKGNhcy0+YnVmKTsKKwkJaWYgKHN0cmVhbV9maWx0ZXIoY2FzLT5vbmUsCisJCQkJICBpbnB1dCwgJnRvX2ZlZWQsCisJCQkJICBjYXMtPmJ1ZiwgJnJlbWFpbmluZykpCisJCQlyZXR1cm4gLTE7CisJCWNhcy0+ZW5kID0gc2l6ZW9mKGNhcy0+YnVmKSAtIHJlbWFpbmluZzsKKwkJY2FzLT5wdHIgPSAwOworCQlpZiAoaW5wdXQpIHsKKwkJCXNpemVfdCBmZWQgPSAqaXNpemVfcCAtIHRvX2ZlZWQ7CisJCQkqaXNpemVfcCAtPSBmZWQ7CisJCQlpbnB1dCArPSBmZWQ7CisJCX0KKworCQkvKiBkbyB3ZSBrbm93IHRoYXQgd2UgZHJhaW5lZCBvbmUgY29tcGxldGVseT8gKi8KKwkJaWYgKGlucHV0IHx8IGNhcy0+ZW5kKQorCQkJY29udGludWU7CisKKwkJLyogdGVsbCB0d28gdG8gZHJhaW47IHdlIGhhdmUgbm90aGluZyBtb3JlIHRvIGdpdmUgaXQgKi8KKwkJdG9fZmVlZCA9IDA7CisJCXJlbWFpbmluZyA9IHN6IC0gZmlsbGVkOworCQlpZiAoc3RyZWFtX2ZpbHRlcihjYXMtPnR3bywKKwkJCQkgIE5VTEwsICZ0b19mZWVkLAorCQkJCSAgb3V0cHV0ICsgZmlsbGVkLCAmcmVtYWluaW5nKSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKHJlbWFpbmluZyA9PSAoc3ogLSBmaWxsZWQpKQorCQkJYnJlYWs7IC8qIGNvbXBsZXRlbHkgZHJhaW5lZCB0d28gKi8KKwkJZmlsbGVkID0gc3ogLSByZW1haW5pbmc7CisJfQorCSpvc2l6ZV9wIC09IGZpbGxlZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2FzY2FkZV9mcmVlX2ZuKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpmaWx0ZXIpCit7CisJc3RydWN0IGNhc2NhZGVfZmlsdGVyICpjYXMgPSAoc3RydWN0IGNhc2NhZGVfZmlsdGVyICopZmlsdGVyOworCWZyZWVfc3RyZWFtX2ZpbHRlcihjYXMtPm9uZSk7CisJZnJlZV9zdHJlYW1fZmlsdGVyKGNhcy0+dHdvKTsKKwlmcmVlKGZpbHRlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlcl92dGJsIGNhc2NhZGVfdnRibCA9IHsKKwljYXNjYWRlX2ZpbHRlcl9mbiwKKwljYXNjYWRlX2ZyZWVfZm4sCit9OworCitzdGF0aWMgc3RydWN0IHN0cmVhbV9maWx0ZXIgKmNhc2NhZGVfZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICpvbmUsCisJCQkJCSAgICBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqdHdvKQoreworCXN0cnVjdCBjYXNjYWRlX2ZpbHRlciAqY2FzY2FkZTsKKworCWlmICghb25lIHx8IGlzX251bGxfc3RyZWFtX2ZpbHRlcihvbmUpKQorCQlyZXR1cm4gdHdvOworCWlmICghdHdvIHx8IGlzX251bGxfc3RyZWFtX2ZpbHRlcih0d28pKQorCQlyZXR1cm4gb25lOworCisJY2FzY2FkZSA9IHhtYWxsb2Moc2l6ZW9mKCpjYXNjYWRlKSk7CisJY2FzY2FkZS0+b25lID0gb25lOworCWNhc2NhZGUtPnR3byA9IHR3bzsKKwljYXNjYWRlLT5lbmQgPSBjYXNjYWRlLT5wdHIgPSAwOworCWNhc2NhZGUtPmZpbHRlci52dGJsID0gJmNhc2NhZGVfdnRibDsKKwlyZXR1cm4gKHN0cnVjdCBzdHJlYW1fZmlsdGVyICopY2FzY2FkZTsKK30KKworLyoKKyAqIGlkZW50IGZpbHRlcgorICovCisjZGVmaW5lIElERU5UX0RSQUlOSU5HICgtMSkKKyNkZWZpbmUgSURFTlRfU0tJUFBJTkcgKC0yKQorc3RydWN0IGlkZW50X2ZpbHRlciB7CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgZmlsdGVyOworCXN0cnVjdCBzdHJidWYgbGVmdDsKKwlpbnQgc3RhdGU7CisJY2hhciBpZGVudFs0NV07IC8qICI6IHg0MCAkIiAqLworfTsKKworc3RhdGljIGludCBpc19mb3JlaWduX2lkZW50KGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgaTsKKworCWlmICghc2tpcF9wcmVmaXgoc3RyLCAiJElkOiAiLCAmc3RyKSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMDsgc3RyW2ldOyBpKyspIHsKKwkJaWYgKGlzc3BhY2Uoc3RyW2ldKSAmJiBzdHJbaSsxXSAhPSAnJCcpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlkZW50X2RyYWluKHN0cnVjdCBpZGVudF9maWx0ZXIgKmlkZW50LCBjaGFyICoqb3V0cHV0X3AsIHNpemVfdCAqb3NpemVfcCkKK3sKKwlzaXplX3QgdG9fZHJhaW4gPSBpZGVudC0+bGVmdC5sZW47CisKKwlpZiAoKm9zaXplX3AgPCB0b19kcmFpbikKKwkJdG9fZHJhaW4gPSAqb3NpemVfcDsKKwlpZiAodG9fZHJhaW4pIHsKKwkJbWVtY3B5KCpvdXRwdXRfcCwgaWRlbnQtPmxlZnQuYnVmLCB0b19kcmFpbik7CisJCXN0cmJ1Zl9yZW1vdmUoJmlkZW50LT5sZWZ0LCAwLCB0b19kcmFpbik7CisJCSpvdXRwdXRfcCArPSB0b19kcmFpbjsKKwkJKm9zaXplX3AgLT0gdG9fZHJhaW47CisJfQorCWlmICghaWRlbnQtPmxlZnQubGVuKQorCQlpZGVudC0+c3RhdGUgPSAwOworfQorCitzdGF0aWMgaW50IGlkZW50X2ZpbHRlcl9mbihzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyLAorCQkJICAgY29uc3QgY2hhciAqaW5wdXQsIHNpemVfdCAqaXNpemVfcCwKKwkJCSAgIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKQoreworCXN0cnVjdCBpZGVudF9maWx0ZXIgKmlkZW50ID0gKHN0cnVjdCBpZGVudF9maWx0ZXIgKilmaWx0ZXI7CisJc3RhdGljIGNvbnN0IGNoYXIgaGVhZFtdID0gIiRJZCI7CisKKwlpZiAoIWlucHV0KSB7CisJCS8qIGRyYWluIHVwb24gZW9mICovCisJCXN3aXRjaCAoaWRlbnQtPnN0YXRlKSB7CisJCWRlZmF1bHQ6CisJCQlzdHJidWZfYWRkKCZpZGVudC0+bGVmdCwgaGVhZCwgaWRlbnQtPnN0YXRlKTsKKwkJY2FzZSBJREVOVF9TS0lQUElORzoKKwkJCS8qIGZhbGx0aHJ1ICovCisJCWNhc2UgSURFTlRfRFJBSU5JTkc6CisJCQlpZGVudF9kcmFpbihpZGVudCwgJm91dHB1dCwgb3NpemVfcCk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKCppc2l6ZV9wIHx8IChpZGVudC0+c3RhdGUgPT0gSURFTlRfRFJBSU5JTkcpKSB7CisJCWludCBjaDsKKworCQlpZiAoaWRlbnQtPnN0YXRlID09IElERU5UX0RSQUlOSU5HKSB7CisJCQlpZGVudF9kcmFpbihpZGVudCwgJm91dHB1dCwgb3NpemVfcCk7CisJCQlpZiAoISpvc2l6ZV9wKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKworCQljaCA9ICooaW5wdXQrKyk7CisJCSgqaXNpemVfcCktLTsKKworCQlpZiAoaWRlbnQtPnN0YXRlID09IElERU5UX1NLSVBQSU5HKSB7CisJCQkvKgorCQkJICogU2tpcHBpbmcgdW50aWwgJyQnIG9yIExGLCBidXQga2VlcGluZyB0aGVtCisJCQkgKiBpbiBjYXNlIGl0IGlzIGEgZm9yZWlnbiBpZGVudC4KKwkJCSAqLworCQkJc3RyYnVmX2FkZGNoKCZpZGVudC0+bGVmdCwgY2gpOworCQkJaWYgKGNoICE9ICdcbicgJiYgY2ggIT0gJyQnKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNoID09ICckJyAmJiAhaXNfZm9yZWlnbl9pZGVudChpZGVudC0+bGVmdC5idWYpKSB7CisJCQkJc3RyYnVmX3NldGxlbigmaWRlbnQtPmxlZnQsIHNpemVvZihoZWFkKSAtIDEpOworCQkJCXN0cmJ1Zl9hZGRzdHIoJmlkZW50LT5sZWZ0LCBpZGVudC0+aWRlbnQpOworCQkJfQorCQkJaWRlbnQtPnN0YXRlID0gSURFTlRfRFJBSU5JTkc7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpZGVudC0+c3RhdGUgPCBzaXplb2YoaGVhZCkgJiYKKwkJICAgIGhlYWRbaWRlbnQtPnN0YXRlXSA9PSBjaCkgeworCQkJaWRlbnQtPnN0YXRlKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpZGVudC0+c3RhdGUpCisJCQlzdHJidWZfYWRkKCZpZGVudC0+bGVmdCwgaGVhZCwgaWRlbnQtPnN0YXRlKTsKKwkJaWYgKGlkZW50LT5zdGF0ZSA9PSBzaXplb2YoaGVhZCkgLSAxKSB7CisJCQlpZiAoY2ggIT0gJzonICYmIGNoICE9ICckJykgeworCQkJCXN0cmJ1Zl9hZGRjaCgmaWRlbnQtPmxlZnQsIGNoKTsKKwkJCQlpZGVudC0+c3RhdGUgPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoY2ggPT0gJzonKSB7CisJCQkJc3RyYnVmX2FkZGNoKCZpZGVudC0+bGVmdCwgY2gpOworCQkJCWlkZW50LT5zdGF0ZSA9IElERU5UX1NLSVBQSU5HOworCQkJfSBlbHNlIHsKKwkJCQlzdHJidWZfYWRkc3RyKCZpZGVudC0+bGVmdCwgaWRlbnQtPmlkZW50KTsKKwkJCQlpZGVudC0+c3RhdGUgPSBJREVOVF9EUkFJTklORzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RyYnVmX2FkZGNoKCZpZGVudC0+bGVmdCwgY2gpOworCQlpZGVudC0+c3RhdGUgPSBJREVOVF9EUkFJTklORzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlkZW50X2ZyZWVfZm4oc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcikKK3sKKwlzdHJ1Y3QgaWRlbnRfZmlsdGVyICppZGVudCA9IChzdHJ1Y3QgaWRlbnRfZmlsdGVyICopZmlsdGVyOworCXN0cmJ1Zl9yZWxlYXNlKCZpZGVudC0+bGVmdCk7CisJZnJlZShmaWx0ZXIpOworfQorCitzdGF0aWMgc3RydWN0IHN0cmVhbV9maWx0ZXJfdnRibCBpZGVudF92dGJsID0geworCWlkZW50X2ZpbHRlcl9mbiwKKwlpZGVudF9mcmVlX2ZuLAorfTsKKworc3RhdGljIHN0cnVjdCBzdHJlYW1fZmlsdGVyICppZGVudF9maWx0ZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgaWRlbnRfZmlsdGVyICppZGVudCA9IHhtYWxsb2Moc2l6ZW9mKCppZGVudCkpOworCisJeHNucHJpbnRmKGlkZW50LT5pZGVudCwgc2l6ZW9mKGlkZW50LT5pZGVudCksCisJCSAgIjogJXMgJCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlzdHJidWZfaW5pdCgmaWRlbnQtPmxlZnQsIDApOworCWlkZW50LT5maWx0ZXIudnRibCA9ICZpZGVudF92dGJsOworCWlkZW50LT5zdGF0ZSA9IDA7CisJcmV0dXJuIChzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqKWlkZW50OworfQorCisvKgorICogUmV0dXJuIGFuIGFwcHJvcHJpYXRlbHkgY29uc3RydWN0ZWQgZmlsdGVyIGZvciB0aGUgcGF0aCwgb3IgTlVMTCBpZgorICogdGhlIGNvbnRlbnRzIGNhbm5vdCBiZSBmaWx0ZXJlZCB3aXRob3V0IHJlYWRpbmcgdGhlIHdob2xlIHRoaW5nCisgKiBpbi1jb3JlLgorICoKKyAqIE5vdGUgdGhhdCB5b3Ugd291bGQgYmUgY3JhenkgdG8gc2V0IENSTEYsIHNtdWdlL2NsZWFuIG9yIGlkZW50IHRvIGEKKyAqIGxhcmdlIGJpbmFyeSBibG9iIHlvdSB3b3VsZCB3YW50IHVzIG5vdCB0byBzbHVycCBpbnRvIHRoZSBtZW1vcnkhCisgKi8KK3N0cnVjdCBzdHJlYW1fZmlsdGVyICpnZXRfc3RyZWFtX2ZpbHRlcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBjb252X2F0dHJzIGNhOworCWVudW0gY3JsZl9hY3Rpb24gY3JsZl9hY3Rpb247CisJc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciA9IE5VTEw7CisKKwljb252ZXJ0X2F0dHJzKCZjYSwgcGF0aCk7CisKKwlpZiAoY2EuZHJ2ICYmIChjYS5kcnYtPnNtdWRnZSB8fCBjYS5kcnYtPmNsZWFuKSkKKwkJcmV0dXJuIGZpbHRlcjsKKworCWlmIChjYS5pZGVudCkKKwkJZmlsdGVyID0gaWRlbnRfZmlsdGVyKHNoYTEpOworCisJY3JsZl9hY3Rpb24gPSBpbnB1dF9jcmxmX2FjdGlvbihjYS5jcmxmX2FjdGlvbiwgY2EuZW9sX2F0dHIpOworCisJaWYgKChjcmxmX2FjdGlvbiA9PSBDUkxGX0JJTkFSWSkgfHwgKGNybGZfYWN0aW9uID09IENSTEZfSU5QVVQpIHx8CisJICAgIChjcmxmX2FjdGlvbiA9PSBDUkxGX0dVRVNTICYmIGF1dG9fY3JsZiA9PSBBVVRPX0NSTEZfRkFMU0UpKQorCQlmaWx0ZXIgPSBjYXNjYWRlX2ZpbHRlcihmaWx0ZXIsICZudWxsX2ZpbHRlcl9zaW5nbGV0b24pOworCisJZWxzZSBpZiAob3V0cHV0X2VvbChjcmxmX2FjdGlvbikgPT0gRU9MX0NSTEYgJiYKKwkJICEoY3JsZl9hY3Rpb24gPT0gQ1JMRl9BVVRPIHx8IGNybGZfYWN0aW9uID09IENSTEZfR1VFU1MpKQorCQlmaWx0ZXIgPSBjYXNjYWRlX2ZpbHRlcihmaWx0ZXIsIGxmX3RvX2NybGZfZmlsdGVyKCkpOworCisJcmV0dXJuIGZpbHRlcjsKK30KKwordm9pZCBmcmVlX3N0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcikKK3sKKwlmaWx0ZXItPnZ0YmwtPmZyZWUoZmlsdGVyKTsKK30KKworaW50IHN0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlciwKKwkJICBjb25zdCBjaGFyICppbnB1dCwgc2l6ZV90ICppc2l6ZV9wLAorCQkgIGNoYXIgKm91dHB1dCwgc2l6ZV90ICpvc2l6ZV9wKQoreworCXJldHVybiBmaWx0ZXItPnZ0YmwtPmZpbHRlcihmaWx0ZXIsIGlucHV0LCBpc2l6ZV9wLCBvdXRwdXQsIG9zaXplX3ApOworfQpkaWZmIC0tZ2l0IGEvY29udmVydC5oIGIvY29udmVydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZDg1M2MKLS0tIC9kZXYvbnVsbAorKysgYi9jb252ZXJ0LmgKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4KKyAqLworI2lmbmRlZiBDT05WRVJUX0gKKyNkZWZpbmUgQ09OVkVSVF9ICisKK2VudW0gc2FmZV9jcmxmIHsKKwlTQUZFX0NSTEZfRkFMU0UgPSAwLAorCVNBRkVfQ1JMRl9GQUlMID0gMSwKKwlTQUZFX0NSTEZfV0FSTiA9IDIKK307CisKK2V4dGVybiBlbnVtIHNhZmVfY3JsZiBzYWZlX2NybGY7CisKK2VudW0gYXV0b19jcmxmIHsKKwlBVVRPX0NSTEZfRkFMU0UgPSAwLAorCUFVVE9fQ1JMRl9UUlVFID0gMSwKKwlBVVRPX0NSTEZfSU5QVVQgPSAtMQorfTsKKworZXh0ZXJuIGVudW0gYXV0b19jcmxmIGF1dG9fY3JsZjsKKworZW51bSBlb2wgeworCUVPTF9VTlNFVCwKKwlFT0xfQ1JMRiwKKwlFT0xfTEYsCisjaWZkZWYgTkFUSVZFX0NSTEYKKwlFT0xfTkFUSVZFID0gRU9MX0NSTEYKKyNlbHNlCisJRU9MX05BVElWRSA9IEVPTF9MRgorI2VuZGlmCit9OworCitleHRlcm4gZW51bSBlb2wgY29yZV9lb2w7CisKKy8qIHJldHVybnMgMSBpZiAqZHN0IHdhcyB1c2VkICovCitleHRlcm4gaW50IGNvbnZlcnRfdG9fZ2l0KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKwkJCSAgc3RydWN0IHN0cmJ1ZiAqZHN0LCBlbnVtIHNhZmVfY3JsZiBjaGVja3NhZmUpOworZXh0ZXJuIGludCBjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpzcmMsCisJCQkJICAgc2l6ZV90IGxlbiwgc3RydWN0IHN0cmJ1ZiAqZHN0KTsKK2V4dGVybiBpbnQgcmVub3JtYWxpemVfYnVmZmVyKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKwkJCSAgICAgIHN0cnVjdCBzdHJidWYgKmRzdCk7CitzdGF0aWMgaW5saW5lIGludCB3b3VsZF9jb252ZXJ0X3RvX2dpdChjb25zdCBjaGFyICpwYXRoKQoreworCXJldHVybiBjb252ZXJ0X3RvX2dpdChwYXRoLCBOVUxMLCAwLCBOVUxMLCAwKTsKK30KKy8qIFByZWNvbmRpdGlvbjogd291bGRfY29udmVydF90b19naXRfZmlsdGVyX2ZkKHBhdGgpID09IHRydWUgKi8KK2V4dGVybiB2b2lkIGNvbnZlcnRfdG9fZ2l0X2ZpbHRlcl9mZChjb25zdCBjaGFyICpwYXRoLCBpbnQgZmQsCisJCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICpkc3QsCisJCQkJICAgICBlbnVtIHNhZmVfY3JsZiBjaGVja3NhZmUpOworZXh0ZXJuIGludCB3b3VsZF9jb252ZXJ0X3RvX2dpdF9maWx0ZXJfZmQoY29uc3QgY2hhciAqcGF0aCk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFN0cmVhbWluZyBjb252ZXJzaW9uIHN1cHBvcnQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBzdHJlYW1fZmlsdGVyOyAvKiBvcGFxdWUgKi8KKworZXh0ZXJuIHN0cnVjdCBzdHJlYW1fZmlsdGVyICpnZXRfc3RyZWFtX2ZpbHRlcihjb25zdCBjaGFyICpwYXRoLCBjb25zdCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIHZvaWQgZnJlZV9zdHJlYW1fZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICopOworZXh0ZXJuIGludCBpc19udWxsX3N0cmVhbV9maWx0ZXIoc3RydWN0IHN0cmVhbV9maWx0ZXIgKik7CisKKy8qCisgKiBVc2UgYXMgbXVjaCBpbnB1dCB1cCB0byAqaXNpemVfcCBhbmQgZmlsbCBvdXRwdXQgdXAgdG8gKm9zaXplX3A7CisgKiB1cGRhdGUgaXNpemVfcCBhbmQgb3NpemVfcCB0byBpbmRpY2F0ZSBob3cgbXVjaCBidWZmZXIgc3BhY2Ugd2FzCisgKiBjb25zdW1lZCBhbmQgZmlsbGVkLiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBub24temVybyBvbiBlcnJvci4KKyAqCisgKiBTb21lIGZpbHRlcnMgbWF5IG5lZWQgdG8gYnVmZmVyIHRoZSBpbnB1dCBhbmQgbG9vay1haGVhZCBpbnNpZGUgaXQKKyAqIHRvIGRlY2lkZSB3aGF0IHRvIG91dHB1dCwgYW5kIHRoZXkgbWF5IGNvbnN1bWUgbW9yZSB0aGFuIHplcm8gYnl0ZXMKKyAqIG9mIGlucHV0IGFuZCBzdGlsbCBub3QgcHJvZHVjZSBhbnkgb3V0cHV0LiBBZnRlciBmZWVkaW5nIGFsbCB0aGUKKyAqIGlucHV0LCBwYXNzIE5VTEwgYXMgaW5wdXQgYW5kIGtlZXAgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0byBsZXQKKyAqIHN1Y2ggZmlsdGVycyBrbm93IHRoZXJlIGlzIG5vIG1vcmUgaW5wdXQgY29taW5nIGFuZCBpdCBpcyB0aW1lIGZvcgorICogdGhlbSB0byBwcm9kdWNlIHRoZSByZW1haW5pbmcgb3V0cHV0IGJhc2VkIG9uIHRoZSBidWZmZXJlZCBpbnB1dC4KKyAqLworZXh0ZXJuIGludCBzdHJlYW1fZmlsdGVyKHN0cnVjdCBzdHJlYW1fZmlsdGVyICosCisJCQkgY29uc3QgY2hhciAqaW5wdXQsIHNpemVfdCAqaXNpemVfcCwKKwkJCSBjaGFyICpvdXRwdXQsIHNpemVfdCAqb3NpemVfcCk7CisKKyNlbmRpZiAvKiBDT05WRVJUX0ggKi8KZGlmZiAtLWdpdCBhL2NvcHkuYyBiL2NvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzRmYTFmCi0tLSAvZGV2L251bGwKKysrIGIvY29weS5jCkBAIC0wLDAgKzEsNjcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgY29weV9mZChpbnQgaWZkLCBpbnQgb2ZkKQoreworCXdoaWxlICgxKSB7CisJCWNoYXIgYnVmZmVyWzgxOTJdOworCQlzc2l6ZV90IGxlbiA9IHhyZWFkKGlmZCwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisJCWlmICghbGVuKQorCQkJYnJlYWs7CisJCWlmIChsZW4gPCAwKQorCQkJcmV0dXJuIENPUFlfUkVBRF9FUlJPUjsKKwkJaWYgKHdyaXRlX2luX2Z1bGwob2ZkLCBidWZmZXIsIGxlbikgPCAwKQorCQkJcmV0dXJuIENPUFlfV1JJVEVfRVJST1I7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvcHlfdGltZXMoY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHV0aW1idWYgdGltZXM7CisJaWYgKHN0YXQoc3JjLCAmc3QpIDwgMCkKKwkJcmV0dXJuIC0xOworCXRpbWVzLmFjdGltZSA9IHN0LnN0X2F0aW1lOworCXRpbWVzLm1vZHRpbWUgPSBzdC5zdF9tdGltZTsKKwlpZiAodXRpbWUoZHN0LCAmdGltZXMpIDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitpbnQgY29weV9maWxlKGNvbnN0IGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBpbnQgbW9kZSkKK3sKKwlpbnQgZmRpLCBmZG8sIHN0YXR1czsKKworCW1vZGUgPSAobW9kZSAmIDAxMTEpID8gMDc3NyA6IDA2NjY7CisJaWYgKChmZGkgPSBvcGVuKHNyYywgT19SRE9OTFkpKSA8IDApCisJCXJldHVybiBmZGk7CisJaWYgKChmZG8gPSBvcGVuKGRzdCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCBtb2RlKSkgPCAwKSB7CisJCWNsb3NlKGZkaSk7CisJCXJldHVybiBmZG87CisJfQorCXN0YXR1cyA9IGNvcHlfZmQoZmRpLCBmZG8pOworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSBDT1BZX1JFQURfRVJST1I6CisJCWVycm9yKCJjb3B5LWZkOiByZWFkIHJldHVybmVkICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJYnJlYWs7CisJY2FzZSBDT1BZX1dSSVRFX0VSUk9SOgorCQllcnJvcigiY29weS1mZDogd3JpdGUgcmV0dXJuZWQgJXMiLCBzdHJlcnJvcihlcnJubykpOworCQlicmVhazsKKwl9CisJY2xvc2UoZmRpKTsKKwlpZiAoY2xvc2UoZmRvKSAhPSAwKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBjbG9zZSBlcnJvcjogJXMiLCBkc3QsIHN0cmVycm9yKGVycm5vKSk7CisKKwlpZiAoIXN0YXR1cyAmJiBhZGp1c3Rfc2hhcmVkX3Blcm0oZHN0KSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGNvcHlfZmlsZV93aXRoX3RpbWUoY29uc3QgY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBtb2RlKQoreworCWludCBzdGF0dXMgPSBjb3B5X2ZpbGUoZHN0LCBzcmMsIG1vZGUpOworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gY29weV90aW1lcyhkc3QsIHNyYyk7CisJcmV0dXJuIHN0YXR1czsKK30KZGlmZiAtLWdpdCBhL2NyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jIGIvY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3MTVhYQotLS0gL2Rldi9udWxsCisrKyBiL2NyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jCkBAIC0wLDAgKzEsMjcwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0ZW1wZmlsZS5oIgorI2luY2x1ZGUgImNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJ1bml4LXNvY2tldC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIHN0cnVjdCB0ZW1wZmlsZSBzb2NrZXRfZmlsZTsKKworc3RydWN0IGNyZWRlbnRpYWxfY2FjaGVfZW50cnkgeworCXN0cnVjdCBjcmVkZW50aWFsIGl0ZW07CisJdW5zaWduZWQgbG9uZyBleHBpcmF0aW9uOworfTsKK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbF9jYWNoZV9lbnRyeSAqZW50cmllczsKK3N0YXRpYyBpbnQgZW50cmllc19ucjsKK3N0YXRpYyBpbnQgZW50cmllc19hbGxvYzsKKworc3RhdGljIHZvaWQgY2FjaGVfY3JlZGVudGlhbChzdHJ1Y3QgY3JlZGVudGlhbCAqYywgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IGNyZWRlbnRpYWxfY2FjaGVfZW50cnkgKmU7CisKKwlBTExPQ19HUk9XKGVudHJpZXMsIGVudHJpZXNfbnIgKyAxLCBlbnRyaWVzX2FsbG9jKTsKKwllID0gJmVudHJpZXNbZW50cmllc19ucisrXTsKKworCS8qIHRha2Ugb3duZXJzaGlwIG9mIHBvaW50ZXJzICovCisJbWVtY3B5KCZlLT5pdGVtLCBjLCBzaXplb2YoKmMpKTsKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJZS0+ZXhwaXJhdGlvbiA9IHRpbWUoTlVMTCkgKyB0aW1lb3V0OworfQorCitzdGF0aWMgc3RydWN0IGNyZWRlbnRpYWxfY2FjaGVfZW50cnkgKmxvb2t1cF9jcmVkZW50aWFsKGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzX25yOyBpKyspIHsKKwkJc3RydWN0IGNyZWRlbnRpYWwgKmUgPSAmZW50cmllc1tpXS5pdGVtOworCQlpZiAoY3JlZGVudGlhbF9tYXRjaChjLCBlKSkKKwkJCXJldHVybiAmZW50cmllc1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9jcmVkZW50aWFsKGNvbnN0IHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCXN0cnVjdCBjcmVkZW50aWFsX2NhY2hlX2VudHJ5ICplOworCisJZSA9IGxvb2t1cF9jcmVkZW50aWFsKGMpOworCWlmIChlKQorCQllLT5leHBpcmF0aW9uID0gMDsKK30KKworc3RhdGljIGludCBjaGVja19leHBpcmF0aW9ucyh2b2lkKQoreworCXN0YXRpYyB1bnNpZ25lZCBsb25nIHdhaXRfZm9yX2VudHJ5X3VudGlsOworCWludCBpID0gMDsKKwl1bnNpZ25lZCBsb25nIG5vdyA9IHRpbWUoTlVMTCk7CisJdW5zaWduZWQgbG9uZyBuZXh0ID0gKHVuc2lnbmVkIGxvbmcpLTE7CisKKwkvKgorCSAqIEluaXRpYWxseSBnaXZlIHRoZSBjbGllbnQgMzAgc2Vjb25kcyB0byBhY3R1YWxseSBjb250YWN0IHVzCisJICogYW5kIHN0b3JlIGEgY3JlZGVudGlhbCBiZWZvcmUgd2UgZGVjaWRlIHRoZXJlJ3Mgbm8gcG9pbnQgaW4KKwkgKiBrZWVwaW5nIHRoZSBkYWVtb24gYXJvdW5kLgorCSAqLworCWlmICghd2FpdF9mb3JfZW50cnlfdW50aWwpCisJCXdhaXRfZm9yX2VudHJ5X3VudGlsID0gbm93ICsgMzA7CisKKwl3aGlsZSAoaSA8IGVudHJpZXNfbnIpIHsKKwkJaWYgKGVudHJpZXNbaV0uZXhwaXJhdGlvbiA8PSBub3cpIHsKKwkJCWVudHJpZXNfbnItLTsKKwkJCWNyZWRlbnRpYWxfY2xlYXIoJmVudHJpZXNbaV0uaXRlbSk7CisJCQlpZiAoaSAhPSBlbnRyaWVzX25yKQorCQkJCW1lbWNweSgmZW50cmllc1tpXSwgJmVudHJpZXNbZW50cmllc19ucl0sIHNpemVvZigqZW50cmllcykpOworCQkJLyoKKwkJCSAqIFN0aWNrIGFyb3VuZCAzMCBzZWNvbmRzIGluIGNhc2UgYSBuZXcgY3JlZGVudGlhbAorCQkJICogc2hvd3MgdXAgKGUuZy4sIGJlY2F1c2Ugd2UganVzdCByZW1vdmVkIGEgZmFpbGVkCisJCQkgKiBvbmUsIGFuZCB3ZSB3aWxsIHNvb24gZ2V0IHRoZSBjb3JyZWN0IG9uZSkuCisJCQkgKi8KKwkJCXdhaXRfZm9yX2VudHJ5X3VudGlsID0gbm93ICsgMzA7CisJCX0KKwkJZWxzZSB7CisJCQlpZiAoZW50cmllc1tpXS5leHBpcmF0aW9uIDwgbmV4dCkKKwkJCQluZXh0ID0gZW50cmllc1tpXS5leHBpcmF0aW9uOworCQkJaSsrOworCQl9CisJfQorCisJaWYgKCFlbnRyaWVzX25yKSB7CisJCWlmICh3YWl0X2Zvcl9lbnRyeV91bnRpbCA8PSBub3cpCisJCQlyZXR1cm4gMDsKKwkJbmV4dCA9IHdhaXRfZm9yX2VudHJ5X3VudGlsOworCX0KKworCXJldHVybiBuZXh0IC0gbm93OworfQorCitzdGF0aWMgaW50IHJlYWRfcmVxdWVzdChGSUxFICpmaCwgc3RydWN0IGNyZWRlbnRpYWwgKmMsCisJCQlzdHJ1Y3Qgc3RyYnVmICphY3Rpb24sIGludCAqdGltZW91dCkgeworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGl0ZW0gPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpwOworCisJc3RyYnVmX2dldGxpbmUoJml0ZW0sIGZoLCAnXG4nKTsKKwlpZiAoIXNraXBfcHJlZml4KGl0ZW0uYnVmLCAiYWN0aW9uPSIsICZwKSkKKwkJcmV0dXJuIGVycm9yKCJjbGllbnQgc2VudCBib2d1cyBhY3Rpb24gbGluZTogJXMiLCBpdGVtLmJ1Zik7CisJc3RyYnVmX2FkZHN0cihhY3Rpb24sIHApOworCisJc3RyYnVmX2dldGxpbmUoJml0ZW0sIGZoLCAnXG4nKTsKKwlpZiAoIXNraXBfcHJlZml4KGl0ZW0uYnVmLCAidGltZW91dD0iLCAmcCkpCisJCXJldHVybiBlcnJvcigiY2xpZW50IHNlbnQgYm9ndXMgdGltZW91dCBsaW5lOiAlcyIsIGl0ZW0uYnVmKTsKKwkqdGltZW91dCA9IGF0b2kocCk7CisKKwlpZiAoY3JlZGVudGlhbF9yZWFkKGMsIGZoKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2VydmVfb25lX2NsaWVudChGSUxFICppbiwgRklMRSAqb3V0KQoreworCXN0cnVjdCBjcmVkZW50aWFsIGMgPSBDUkVERU5USUFMX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBhY3Rpb24gPSBTVFJCVUZfSU5JVDsKKwlpbnQgdGltZW91dCA9IC0xOworCisJaWYgKHJlYWRfcmVxdWVzdChpbiwgJmMsICZhY3Rpb24sICZ0aW1lb3V0KSA8IDApCisJCS8qIGlnbm9yZSBlcnJvciAqLyA7CisJZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24uYnVmLCAiZ2V0IikpIHsKKwkJc3RydWN0IGNyZWRlbnRpYWxfY2FjaGVfZW50cnkgKmUgPSBsb29rdXBfY3JlZGVudGlhbCgmYyk7CisJCWlmIChlKSB7CisJCQlmcHJpbnRmKG91dCwgInVzZXJuYW1lPSVzXG4iLCBlLT5pdGVtLnVzZXJuYW1lKTsKKwkJCWZwcmludGYob3V0LCAicGFzc3dvcmQ9JXNcbiIsIGUtPml0ZW0ucGFzc3dvcmQpOworCQl9CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYWN0aW9uLmJ1ZiwgImV4aXQiKSkKKwkJZXhpdCgwKTsKKwllbHNlIGlmICghc3RyY21wKGFjdGlvbi5idWYsICJlcmFzZSIpKQorCQlyZW1vdmVfY3JlZGVudGlhbCgmYyk7CisJZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24uYnVmLCAic3RvcmUiKSkgeworCQlpZiAodGltZW91dCA8IDApCisJCQl3YXJuaW5nKCJjYWNoZSBjbGllbnQgZGlkbid0IHNwZWNpZnkgYSB0aW1lb3V0Iik7CisJCWVsc2UgaWYgKCFjLnVzZXJuYW1lIHx8ICFjLnBhc3N3b3JkKQorCQkJd2FybmluZygiY2FjaGUgY2xpZW50IGdhdmUgdXMgYSBwYXJ0aWFsIGNyZWRlbnRpYWwiKTsKKwkJZWxzZSB7CisJCQlyZW1vdmVfY3JlZGVudGlhbCgmYyk7CisJCQljYWNoZV9jcmVkZW50aWFsKCZjLCB0aW1lb3V0KTsKKwkJfQorCX0KKwllbHNlCisJCXdhcm5pbmcoImNhY2hlIGNsaWVudCBzZW50IHVua25vd24gYWN0aW9uOiAlcyIsIGFjdGlvbi5idWYpOworCisJY3JlZGVudGlhbF9jbGVhcigmYyk7CisJc3RyYnVmX3JlbGVhc2UoJmFjdGlvbik7Cit9CisKK3N0YXRpYyBpbnQgc2VydmVfY2FjaGVfbG9vcChpbnQgZmQpCit7CisJc3RydWN0IHBvbGxmZCBwZmQ7CisJdW5zaWduZWQgbG9uZyB3YWtldXA7CisKKwl3YWtldXAgPSBjaGVja19leHBpcmF0aW9ucygpOworCWlmICghd2FrZXVwKQorCQlyZXR1cm4gMDsKKworCXBmZC5mZCA9IGZkOworCXBmZC5ldmVudHMgPSBQT0xMSU47CisJaWYgKHBvbGwoJnBmZCwgMSwgMTAwMCAqIHdha2V1cCkgPCAwKSB7CisJCWlmIChlcnJubyAhPSBFSU5UUikKKwkJCWRpZV9lcnJubygicG9sbCBmYWlsZWQiKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHBmZC5yZXZlbnRzICYgUE9MTElOKSB7CisJCWludCBjbGllbnQsIGNsaWVudDI7CisJCUZJTEUgKmluLCAqb3V0OworCisJCWNsaWVudCA9IGFjY2VwdChmZCwgTlVMTCwgTlVMTCk7CisJCWlmIChjbGllbnQgPCAwKSB7CisJCQl3YXJuaW5nKCJhY2NlcHQgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQljbGllbnQyID0gZHVwKGNsaWVudCk7CisJCWlmIChjbGllbnQyIDwgMCkgeworCQkJd2FybmluZygiZHVwIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJY2xvc2UoY2xpZW50KTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJaW4gPSB4ZmRvcGVuKGNsaWVudCwgInIiKTsKKwkJb3V0ID0geGZkb3BlbihjbGllbnQyLCAidyIpOworCQlzZXJ2ZV9vbmVfY2xpZW50KGluLCBvdXQpOworCQlmY2xvc2UoaW4pOworCQlmY2xvc2Uob3V0KTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlX2NhY2hlKGNvbnN0IGNoYXIgKnNvY2tldF9wYXRoLCBpbnQgZGVidWcpCit7CisJaW50IGZkOworCisJZmQgPSB1bml4X3N0cmVhbV9saXN0ZW4oc29ja2V0X3BhdGgpOworCWlmIChmZCA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIGJpbmQgdG8gJyVzJyIsIHNvY2tldF9wYXRoKTsKKworCXByaW50Zigib2tcbiIpOworCWZjbG9zZShzdGRvdXQpOworCWlmICghZGVidWcpIHsKKwkJaWYgKCFmcmVvcGVuKCIvZGV2L251bGwiLCAidyIsIHN0ZGVycikpCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byBwb2ludCBzdGRlcnIgdG8gL2Rldi9udWxsIik7CisJfQorCisJd2hpbGUgKHNlcnZlX2NhY2hlX2xvb3AoZmQpKQorCQk7IC8qIG5vdGhpbmcgKi8KKworCWNsb3NlKGZkKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgcGVybWlzc2lvbnNfYWR2aWNlW10gPQorIlRoZSBwZXJtaXNzaW9ucyBvbiB5b3VyIHNvY2tldCBkaXJlY3RvcnkgYXJlIHRvbyBsb29zZTsgb3RoZXJcbiIKKyJ1c2VycyBtYXkgYmUgYWJsZSB0byByZWFkIHlvdXIgY2FjaGVkIGNyZWRlbnRpYWxzLiBDb25zaWRlciBydW5uaW5nOlxuIgorIlxuIgorIgljaG1vZCAwNzAwICVzIjsKK3N0YXRpYyB2b2lkIGNoZWNrX3NvY2tldF9kaXJlY3RvcnkoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljaGFyICpwYXRoX2NvcHkgPSB4c3RyZHVwKHBhdGgpOworCWNoYXIgKmRpciA9IGRpcm5hbWUocGF0aF9jb3B5KTsKKworCWlmICghc3RhdChkaXIsICZzdCkpIHsKKwkJaWYgKHN0LnN0X21vZGUgJiAwNzcpCisJCQlkaWUocGVybWlzc2lvbnNfYWR2aWNlLCBkaXIpOworCQlmcmVlKHBhdGhfY29weSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFdlIG11c3QgYmUgc3VyZSB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeSB3aXRoIHRoZSBjb3JyZWN0IG1vZGUsCisJICogbm90IGp1c3QgY2htb2QgaXQgYWZ0ZXIgdGhlIGZhY3Q7IG90aGVyd2lzZSwgdGhlcmUgaXMgYSByYWNlCisJICogY29uZGl0aW9uIGluIHdoaWNoIHNvbWVib2R5IGNhbiBjaGRpciB0byBpdCwgc2xlZXAsIHRoZW4gdHJ5IHRvIG9wZW4KKwkgKiBvdXIgcHJvdGVjdGVkIHNvY2tldC4KKwkgKi8KKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChkaXIpIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yaWVzIGZvciAnJXMnIiwgZGlyKTsKKwlpZiAobWtkaXIoZGlyLCAwNzAwKSA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIG1rZGlyICclcyciLCBkaXIpOworCWZyZWUocGF0aF9jb3B5KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgKnNvY2tldF9wYXRoOworCXN0YXRpYyBjb25zdCBjaGFyICp1c2FnZVtdID0geworCQkiZ2l0LWNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbiBbb3B0c10gPHNvY2tldF9wYXRoPiIsCisJCU5VTEwKKwl9OworCWludCBkZWJ1ZyA9IDA7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKDAsICJkZWJ1ZyIsICZkZWJ1ZywKKwkJCSBOXygicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIpKSwKKwkJT1BUX0VORCgpCisJfTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIGFyZ3YsIE5VTEwsIG9wdGlvbnMsIHVzYWdlLCAwKTsKKwlzb2NrZXRfcGF0aCA9IGFyZ3ZbMF07CisKKwlpZiAoIXNvY2tldF9wYXRoKQorCQl1c2FnZV93aXRoX29wdGlvbnModXNhZ2UsIG9wdGlvbnMpOworCisJY2hlY2tfc29ja2V0X2RpcmVjdG9yeShzb2NrZXRfcGF0aCk7CisJcmVnaXN0ZXJfdGVtcGZpbGUoJnNvY2tldF9maWxlLCBzb2NrZXRfcGF0aCk7CisJc2VydmVfY2FjaGUoc29ja2V0X3BhdGgsIGRlYnVnKTsKKwlkZWxldGVfdGVtcGZpbGUoJnNvY2tldF9maWxlKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY3JlZGVudGlhbC1jYWNoZS5jIGIvY3JlZGVudGlhbC1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YWZkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9jcmVkZW50aWFsLWNhY2hlLmMKQEAgLTAsMCArMSwxMjIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpbmNsdWRlICJ1bml4LXNvY2tldC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKKyNkZWZpbmUgRkxBR19TUEFXTiAweDEKKyNkZWZpbmUgRkxBR19SRUxBWSAweDIKKworc3RhdGljIGludCBzZW5kX3JlcXVlc3QoY29uc3QgY2hhciAqc29ja2V0LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJaW50IGdvdF9kYXRhID0gMDsKKwlpbnQgZmQgPSB1bml4X3N0cmVhbV9jb25uZWN0KHNvY2tldCk7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgb3V0LT5idWYsIG91dC0+bGVuKSA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIHRvIGNhY2hlIGRhZW1vbiIpOworCXNodXRkb3duKGZkLCBTSFVUX1dSKTsKKworCXdoaWxlICgxKSB7CisJCWNoYXIgaW5bMTAyNF07CisJCWludCByOworCisJCXIgPSByZWFkX2luX2Z1bGwoZmQsIGluLCBzaXplb2YoaW4pKTsKKwkJaWYgKHIgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAociA8IDApCisJCQlkaWVfZXJybm8oInJlYWQgZXJyb3IgZnJvbSBjYWNoZSBkYWVtb24iKTsKKwkJd3JpdGVfb3JfZGllKDEsIGluLCByKTsKKwkJZ290X2RhdGEgPSAxOworCX0KKwlyZXR1cm4gZ290X2RhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHNwYXduX2RhZW1vbihjb25zdCBjaGFyICpzb2NrZXQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgZGFlbW9uID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgTlVMTCwgTlVMTCwgTlVMTCB9OworCWNoYXIgYnVmWzEyOF07CisJaW50IHI7CisKKwlhcmd2WzBdID0gImdpdC1jcmVkZW50aWFsLWNhY2hlLS1kYWVtb24iOworCWFyZ3ZbMV0gPSBzb2NrZXQ7CisJZGFlbW9uLmFyZ3YgPSBhcmd2OworCWRhZW1vbi5ub19zdGRpbiA9IDE7CisJZGFlbW9uLm91dCA9IC0xOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmRhZW1vbikpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHN0YXJ0IGNhY2hlIGRhZW1vbiIpOworCXIgPSByZWFkX2luX2Z1bGwoZGFlbW9uLm91dCwgYnVmLCBzaXplb2YoYnVmKSk7CisJaWYgKHIgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byByZWFkIHJlc3VsdCBjb2RlIGZyb20gY2FjaGUgZGFlbW9uIik7CisJaWYgKHIgIT0gMyB8fCBtZW1jbXAoYnVmLCAib2tcbiIsIDMpKQorCQlkaWUoImNhY2hlIGRhZW1vbiBkaWQgbm90IHN0YXJ0OiAlLipzIiwgciwgYnVmKTsKKwljbG9zZShkYWVtb24ub3V0KTsKK30KKworc3RhdGljIHZvaWQgZG9fY2FjaGUoY29uc3QgY2hhciAqc29ja2V0LCBjb25zdCBjaGFyICphY3Rpb24sIGludCB0aW1lb3V0LAorCQkgICAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgImFjdGlvbj0lc1xuIiwgYWN0aW9uKTsKKwlzdHJidWZfYWRkZigmYnVmLCAidGltZW91dD0lZFxuIiwgdGltZW91dCk7CisJaWYgKGZsYWdzICYgRkxBR19SRUxBWSkgeworCQlpZiAoc3RyYnVmX3JlYWQoJmJ1ZiwgMCwgMCkgPCAwKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVsYXkgY3JlZGVudGlhbCIpOworCX0KKworCWlmIChzZW5kX3JlcXVlc3Qoc29ja2V0LCAmYnVmKSA8IDApIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBlcnJubyAhPSBFQ09OTlJFRlVTRUQpCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byBjb25uZWN0IHRvIGNhY2hlIGRhZW1vbiIpOworCQlpZiAoZmxhZ3MgJiBGTEFHX1NQQVdOKSB7CisJCQlzcGF3bl9kYWVtb24oc29ja2V0KTsKKwkJCWlmIChzZW5kX3JlcXVlc3Qoc29ja2V0LCAmYnVmKSA8IDApCisJCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY29ubmVjdCB0byBjYWNoZSBkYWVtb24iKTsKKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWNoYXIgKnNvY2tldF9wYXRoID0gTlVMTDsKKwlpbnQgdGltZW91dCA9IDkwMDsKKwljb25zdCBjaGFyICpvcDsKKwljb25zdCBjaGFyICogY29uc3QgdXNhZ2VbXSA9IHsKKwkJImdpdCBjcmVkZW50aWFsLWNhY2hlIFs8b3B0aW9ucz5dIDxhY3Rpb24+IiwKKwkJTlVMTAorCX07CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9JTlRFR0VSKDAsICJ0aW1lb3V0IiwgJnRpbWVvdXQsCisJCQkgICAgIm51bWJlciBvZiBzZWNvbmRzIHRvIGNhY2hlIGNyZWRlbnRpYWxzIiksCisJCU9QVF9TVFJJTkcoMCwgInNvY2tldCIsICZzb2NrZXRfcGF0aCwgInBhdGgiLAorCQkJICAgInBhdGggb2YgY2FjaGUtZGFlbW9uIHNvY2tldCIpLAorCQlPUFRfRU5EKCkKKwl9OworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgYXJndiwgTlVMTCwgb3B0aW9ucywgdXNhZ2UsIDApOworCWlmICghYXJnYykKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlLCBvcHRpb25zKTsKKwlvcCA9IGFyZ3ZbMF07CisKKwlpZiAoIXNvY2tldF9wYXRoKQorCQlzb2NrZXRfcGF0aCA9IGV4cGFuZF91c2VyX3BhdGgoIn4vLmdpdC1jcmVkZW50aWFsLWNhY2hlL3NvY2tldCIpOworCWlmICghc29ja2V0X3BhdGgpCisJCWRpZSgidW5hYmxlIHRvIGZpbmQgYSBzdWl0YWJsZSBzb2NrZXQgcGF0aDsgdXNlIC0tc29ja2V0Iik7CisKKwlpZiAoIXN0cmNtcChvcCwgImV4aXQiKSkKKwkJZG9fY2FjaGUoc29ja2V0X3BhdGgsIG9wLCB0aW1lb3V0LCAwKTsKKwllbHNlIGlmICghc3RyY21wKG9wLCAiZ2V0IikgfHwgIXN0cmNtcChvcCwgImVyYXNlIikpCisJCWRvX2NhY2hlKHNvY2tldF9wYXRoLCBvcCwgdGltZW91dCwgRkxBR19SRUxBWSk7CisJZWxzZSBpZiAoIXN0cmNtcChvcCwgInN0b3JlIikpCisJCWRvX2NhY2hlKHNvY2tldF9wYXRoLCBvcCwgdGltZW91dCwgRkxBR19SRUxBWXxGTEFHX1NQQVdOKTsKKwllbHNlCisJCTsgLyogaWdub3JlIHVua25vd24gb3BlcmF0aW9uICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NyZWRlbnRpYWwtc3RvcmUuYyBiL2NyZWRlbnRpYWwtc3RvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGFlYTNhCi0tLSAvZGV2L251bGwKKysrIGIvY3JlZGVudGlhbC1zdG9yZS5jCkBAIC0wLDAgKzEsMTk0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgY3JlZGVudGlhbF9sb2NrOworCitzdGF0aWMgaW50IHBhcnNlX2NyZWRlbnRpYWxfZmlsZShjb25zdCBjaGFyICpmbiwKKwkJCQkgIHN0cnVjdCBjcmVkZW50aWFsICpjLAorCQkJCSAgdm9pZCAoKm1hdGNoX2NiKShzdHJ1Y3QgY3JlZGVudGlhbCAqKSwKKwkJCQkgIHZvaWQgKCpvdGhlcl9jYikoc3RydWN0IHN0cmJ1ZiAqKSkKK3sKKwlGSUxFICpmaDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY3JlZGVudGlhbCBlbnRyeSA9IENSRURFTlRJQUxfSU5JVDsKKwlpbnQgZm91bmRfY3JlZGVudGlhbCA9IDA7CisKKwlmaCA9IGZvcGVuKGZuLCAiciIpOworCWlmICghZmgpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBlcnJubyAhPSBFQUNDRVMpCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byBvcGVuICVzIiwgZm4pOworCQlyZXR1cm4gZm91bmRfY3JlZGVudGlhbDsKKwl9CisKKwl3aGlsZSAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIGZoLCAnXG4nKSAhPSBFT0YpIHsKKwkJY3JlZGVudGlhbF9mcm9tX3VybCgmZW50cnksIGxpbmUuYnVmKTsKKwkJaWYgKGVudHJ5LnVzZXJuYW1lICYmIGVudHJ5LnBhc3N3b3JkICYmCisJCSAgICBjcmVkZW50aWFsX21hdGNoKGMsICZlbnRyeSkpIHsKKwkJCWZvdW5kX2NyZWRlbnRpYWwgPSAxOworCQkJaWYgKG1hdGNoX2NiKSB7CisJCQkJbWF0Y2hfY2IoJmVudHJ5KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChvdGhlcl9jYikKKwkJCW90aGVyX2NiKCZsaW5lKTsKKwl9CisKKwljcmVkZW50aWFsX2NsZWFyKCZlbnRyeSk7CisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCWZjbG9zZShmaCk7CisJcmV0dXJuIGZvdW5kX2NyZWRlbnRpYWw7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2VudHJ5KHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCXByaW50ZigidXNlcm5hbWU9JXNcbiIsIGMtPnVzZXJuYW1lKTsKKwlwcmludGYoInBhc3N3b3JkPSVzXG4iLCBjLT5wYXNzd29yZCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xpbmUoc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXN0cmJ1Zl9hZGRjaChidWYsICdcbicpOworCXdyaXRlX29yX2RpZShnZXRfbG9ja19maWxlX2ZkKCZjcmVkZW50aWFsX2xvY2spLCBidWYtPmJ1ZiwgYnVmLT5sZW4pOworfQorCitzdGF0aWMgdm9pZCByZXdyaXRlX2NyZWRlbnRpYWxfZmlsZShjb25zdCBjaGFyICpmbiwgc3RydWN0IGNyZWRlbnRpYWwgKmMsCisJCQkJICAgIHN0cnVjdCBzdHJidWYgKmV4dHJhKQoreworCWlmIChob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZjcmVkZW50aWFsX2xvY2ssIGZuLCAwKSA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIGdldCBjcmVkZW50aWFsIHN0b3JhZ2UgbG9jayIpOworCWlmIChleHRyYSkKKwkJcHJpbnRfbGluZShleHRyYSk7CisJcGFyc2VfY3JlZGVudGlhbF9maWxlKGZuLCBjLCBOVUxMLCBwcmludF9saW5lKTsKKwlpZiAoY29tbWl0X2xvY2tfZmlsZSgmY3JlZGVudGlhbF9sb2NrKSA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIGNvbW1pdCBjcmVkZW50aWFsIHN0b3JlIik7Cit9CisKK3N0YXRpYyB2b2lkIHN0b3JlX2NyZWRlbnRpYWxfZmlsZShjb25zdCBjaGFyICpmbiwgc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlczovLyIsIGMtPnByb3RvY29sKTsKKwlzdHJidWZfYWRkc3RyX3VybGVuY29kZSgmYnVmLCBjLT51c2VybmFtZSwgMSk7CisJc3RyYnVmX2FkZGNoKCZidWYsICc6Jyk7CisJc3RyYnVmX2FkZHN0cl91cmxlbmNvZGUoJmJ1ZiwgYy0+cGFzc3dvcmQsIDEpOworCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnQCcpOworCWlmIChjLT5ob3N0KQorCQlzdHJidWZfYWRkc3RyX3VybGVuY29kZSgmYnVmLCBjLT5ob3N0LCAxKTsKKwlpZiAoYy0+cGF0aCkgeworCQlzdHJidWZfYWRkY2goJmJ1ZiwgJy8nKTsKKwkJc3RyYnVmX2FkZHN0cl91cmxlbmNvZGUoJmJ1ZiwgYy0+cGF0aCwgMCk7CisJfQorCisJcmV3cml0ZV9jcmVkZW50aWFsX2ZpbGUoZm4sIGMsICZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCBzdG9yZV9jcmVkZW50aWFsKGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZm5zLCBzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqZm47CisKKwkvKgorCSAqIFNhbml0eSBjaGVjayB0aGF0IHdoYXQgd2UgYXJlIHN0b3JpbmcgaXMgYWN0dWFsbHkgc2Vuc2libGUuCisJICogSW4gcGFydGljdWxhciwgd2UgY2FuJ3QgbWFrZSBhIFVSTCB3aXRob3V0IGEgcHJvdG9jb2wgZmllbGQuCisJICogV2l0aG91dCBlaXRoZXIgYSBob3N0IG9yIHBhdGhuYW1lIChkZXBlbmRpbmcgb24gdGhlIHNjaGVtZSksCisJICogd2UgaGF2ZSBubyBwcmltYXJ5IGtleS4gQW5kIHdpdGhvdXQgYSB1c2VybmFtZSBhbmQgcGFzc3dvcmQsCisJICogd2UgYXJlIG5vdCBhY3R1YWxseSBzdG9yaW5nIGEgY3JlZGVudGlhbC4KKwkgKi8KKwlpZiAoIWMtPnByb3RvY29sIHx8ICEoYy0+aG9zdCB8fCBjLT5wYXRoKSB8fCAhYy0+dXNlcm5hbWUgfHwgIWMtPnBhc3N3b3JkKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGZuLCBmbnMpCisJCWlmICghYWNjZXNzKGZuLT5zdHJpbmcsIEZfT0spKSB7CisJCQlzdG9yZV9jcmVkZW50aWFsX2ZpbGUoZm4tPnN0cmluZywgYyk7CisJCQlyZXR1cm47CisJCX0KKwkvKgorCSAqIFdyaXRlIGNyZWRlbnRpYWwgdG8gdGhlIGZpbGVuYW1lIHNwZWNpZmllZCBieSBmbnMtPml0ZW1zWzBdLCB0aHVzCisJICogY3JlYXRpbmcgaXQKKwkgKi8KKwlpZiAoZm5zLT5ucikKKwkJc3RvcmVfY3JlZGVudGlhbF9maWxlKGZucy0+aXRlbXNbMF0uc3RyaW5nLCBjKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2NyZWRlbnRpYWwoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpmbnMsIHN0cnVjdCBjcmVkZW50aWFsICpjKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpmbjsKKworCS8qCisJICogU2FuaXR5IGNoZWNrIHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBzb21ldGhpbmcgdG8gbWF0Y2gKKwkgKiBhZ2FpbnN0LiBUaGUgaW5wdXQgd2UgZ2V0IGlzIGEgcmVzdHJpY3RpdmUgcGF0dGVybiwKKwkgKiBzbyB0ZWNobmljYWxseSBhIGJsYW5rIGNyZWRlbnRpYWwgbWVhbnMgImVyYXNlIGV2ZXJ5dGhpbmciLgorCSAqIEJ1dCBpdCBpcyB0b28gZWFzeSB0byBhY2NpZGVudGFsbHkgc2VuZCB0aGlzLCBzaW5jZSBpdCBpcyBlcXVpdmFsZW50CisJICogdG8gZW1wdHkgaW5wdXQuIFNvIGV4cGxpY2l0bHkgZGlzYWxsb3cgaXQsIGFuZCByZXF1aXJlIHRoYXQgdGhlCisJICogcGF0dGVybiBoYXZlIHNvbWUgYWN0dWFsIGNvbnRlbnQgdG8gbWF0Y2guCisJICovCisJaWYgKCFjLT5wcm90b2NvbCAmJiAhYy0+aG9zdCAmJiAhYy0+cGF0aCAmJiAhYy0+dXNlcm5hbWUpCisJCXJldHVybjsKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGZuLCBmbnMpCisJCWlmICghYWNjZXNzKGZuLT5zdHJpbmcsIEZfT0spKQorCQkJcmV3cml0ZV9jcmVkZW50aWFsX2ZpbGUoZm4tPnN0cmluZywgYywgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvb2t1cF9jcmVkZW50aWFsKGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZm5zLCBzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqZm47CisKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGZuLCBmbnMpCisJCWlmIChwYXJzZV9jcmVkZW50aWFsX2ZpbGUoZm4tPnN0cmluZywgYywgcHJpbnRfZW50cnksIE5VTEwpKQorCQkJcmV0dXJuOyAvKiBGb3VuZCBjcmVkZW50aWFsICovCit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICogY29uc3QgdXNhZ2VbXSA9IHsKKwkJImdpdCBjcmVkZW50aWFsLXN0b3JlIFs8b3B0aW9ucz5dIDxhY3Rpb24+IiwKKwkJTlVMTAorCX07CisJY29uc3QgY2hhciAqb3A7CisJc3RydWN0IGNyZWRlbnRpYWwgYyA9IENSRURFTlRJQUxfSU5JVDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZm5zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJY2hhciAqZmlsZSA9IE5VTEw7CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9TVFJJTkcoMCwgImZpbGUiLCAmZmlsZSwgInBhdGgiLAorCQkJICAgImZldGNoIGFuZCBzdG9yZSBjcmVkZW50aWFscyBpbiA8cGF0aD4iKSwKKwkJT1BUX0VORCgpCisJfTsKKworCXVtYXNrKDA3Nyk7CisKKwlhcmdjID0gcGFyc2Vfb3B0aW9ucyhhcmdjLCAoY29uc3QgY2hhciAqKilhcmd2LCBOVUxMLCBvcHRpb25zLCB1c2FnZSwgMCk7CisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2Vfd2l0aF9vcHRpb25zKHVzYWdlLCBvcHRpb25zKTsKKwlvcCA9IGFyZ3ZbMF07CisKKwlpZiAoZmlsZSkgeworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmZucywgZmlsZSk7CisJfSBlbHNlIHsKKwkJaWYgKChmaWxlID0gZXhwYW5kX3VzZXJfcGF0aCgifi8uZ2l0LWNyZWRlbnRpYWxzIikpKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKCZmbnMsIGZpbGUpOworCQlmaWxlID0geGRnX2NvbmZpZ19ob21lKCJjcmVkZW50aWFscyIpOworCQlpZiAoZmlsZSkKKwkJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cCgmZm5zLCBmaWxlKTsKKwl9CisJaWYgKCFmbnMubnIpCisJCWRpZSgidW5hYmxlIHRvIHNldCB1cCBkZWZhdWx0IHBhdGg7IHVzZSAtLWZpbGUiKTsKKworCWlmIChjcmVkZW50aWFsX3JlYWQoJmMsIHN0ZGluKSA8IDApCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgY3JlZGVudGlhbCIpOworCisJaWYgKCFzdHJjbXAob3AsICJnZXQiKSkKKwkJbG9va3VwX2NyZWRlbnRpYWwoJmZucywgJmMpOworCWVsc2UgaWYgKCFzdHJjbXAob3AsICJlcmFzZSIpKQorCQlyZW1vdmVfY3JlZGVudGlhbCgmZm5zLCAmYyk7CisJZWxzZSBpZiAoIXN0cmNtcChvcCwgInN0b3JlIikpCisJCXN0b3JlX2NyZWRlbnRpYWwoJmZucywgJmMpOworCWVsc2UKKwkJOyAvKiBJZ25vcmUgdW5rbm93biBvcGVyYXRpb24uICovCisKKwlzdHJpbmdfbGlzdF9jbGVhcigmZm5zLCAwKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2NyZWRlbnRpYWwuYyBiL2NyZWRlbnRpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTQ2YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvY3JlZGVudGlhbC5jCkBAIC0wLDAgKzEsMzcwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjcmVkZW50aWFsLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgInByb21wdC5oIgorCit2b2lkIGNyZWRlbnRpYWxfaW5pdChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7CisJYy0+aGVscGVycy5zdHJkdXBfc3RyaW5ncyA9IDE7Cit9CisKK3ZvaWQgY3JlZGVudGlhbF9jbGVhcihzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlmcmVlKGMtPnByb3RvY29sKTsKKwlmcmVlKGMtPmhvc3QpOworCWZyZWUoYy0+cGF0aCk7CisJZnJlZShjLT51c2VybmFtZSk7CisJZnJlZShjLT5wYXNzd29yZCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmMtPmhlbHBlcnMsIDApOworCisJY3JlZGVudGlhbF9pbml0KGMpOworfQorCitpbnQgY3JlZGVudGlhbF9tYXRjaChjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqd2FudCwKKwkJICAgICBjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqaGF2ZSkKK3sKKyNkZWZpbmUgQ0hFQ0soeCkgKCF3YW50LT54IHx8IChoYXZlLT54ICYmICFzdHJjbXAod2FudC0+eCwgaGF2ZS0+eCkpKQorCXJldHVybiBDSEVDSyhwcm90b2NvbCkgJiYKKwkgICAgICAgQ0hFQ0soaG9zdCkgJiYKKwkgICAgICAgQ0hFQ0socGF0aCkgJiYKKwkgICAgICAgQ0hFQ0sodXNlcm5hbWUpOworI3VuZGVmIENIRUNLCit9CisKK3N0YXRpYyBpbnQgY3JlZGVudGlhbF9jb25maWdfY2FsbGJhY2soY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJCQkgICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjcmVkZW50aWFsICpjID0gZGF0YTsKKwljb25zdCBjaGFyICprZXksICpkb3Q7CisKKwlpZiAoIXNraXBfcHJlZml4KHZhciwgImNyZWRlbnRpYWwuIiwgJmtleSkpCisJCXJldHVybiAwOworCisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisKKwlkb3QgPSBzdHJyY2hyKGtleSwgJy4nKTsKKwlpZiAoZG90KSB7CisJCXN0cnVjdCBjcmVkZW50aWFsIHdhbnQgPSBDUkVERU5USUFMX0lOSVQ7CisJCWNoYXIgKnVybCA9IHhtZW1kdXB6KGtleSwgZG90IC0ga2V5KTsKKwkJaW50IG1hdGNoZWQ7CisKKwkJY3JlZGVudGlhbF9mcm9tX3VybCgmd2FudCwgdXJsKTsKKwkJbWF0Y2hlZCA9IGNyZWRlbnRpYWxfbWF0Y2goJndhbnQsIGMpOworCisJCWNyZWRlbnRpYWxfY2xlYXIoJndhbnQpOworCQlmcmVlKHVybCk7CisKKwkJaWYgKCFtYXRjaGVkKQorCQkJcmV0dXJuIDA7CisJCWtleSA9IGRvdCArIDE7CisJfQorCisJaWYgKCFzdHJjbXAoa2V5LCAiaGVscGVyIikpCisJCXN0cmluZ19saXN0X2FwcGVuZCgmYy0+aGVscGVycywgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAidXNlcm5hbWUiKSkgeworCQlpZiAoIWMtPnVzZXJuYW1lKQorCQkJYy0+dXNlcm5hbWUgPSB4c3RyZHVwKHZhbHVlKTsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJ1c2VodHRwcGF0aCIpKQorCQljLT51c2VfaHR0cF9wYXRoID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvdG9faXNfaHR0cChjb25zdCBjaGFyICpzKQoreworCWlmICghcykKKwkJcmV0dXJuIDA7CisJcmV0dXJuICFzdHJjbXAocywgImh0dHBzIikgfHwgIXN0cmNtcChzLCAiaHR0cCIpOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX2FwcGx5X2NvbmZpZyhzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpZiAoYy0+Y29uZmlndXJlZCkKKwkJcmV0dXJuOworCWdpdF9jb25maWcoY3JlZGVudGlhbF9jb25maWdfY2FsbGJhY2ssIGMpOworCWMtPmNvbmZpZ3VyZWQgPSAxOworCisJaWYgKCFjLT51c2VfaHR0cF9wYXRoICYmIHByb3RvX2lzX2h0dHAoYy0+cHJvdG9jb2wpKSB7CisJCWZyZWUoYy0+cGF0aCk7CisJCWMtPnBhdGggPSBOVUxMOworCX0KK30KKworc3RhdGljIHZvaWQgY3JlZGVudGlhbF9kZXNjcmliZShzdHJ1Y3QgY3JlZGVudGlhbCAqYywgc3RydWN0IHN0cmJ1ZiAqb3V0KQoreworCWlmICghYy0+cHJvdG9jb2wpCisJCXJldHVybjsKKwlzdHJidWZfYWRkZihvdXQsICIlczovLyIsIGMtPnByb3RvY29sKTsKKwlpZiAoYy0+dXNlcm5hbWUgJiYgKmMtPnVzZXJuYW1lKQorCQlzdHJidWZfYWRkZihvdXQsICIlc0AiLCBjLT51c2VybmFtZSk7CisJaWYgKGMtPmhvc3QpCisJCXN0cmJ1Zl9hZGRzdHIob3V0LCBjLT5ob3N0KTsKKwlpZiAoYy0+cGF0aCkKKwkJc3RyYnVmX2FkZGYob3V0LCAiLyVzIiwgYy0+cGF0aCk7Cit9CisKK3N0YXRpYyBjaGFyICpjcmVkZW50aWFsX2Fza19vbmUoY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IGNyZWRlbnRpYWwgKmMsCisJCQkJaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgZGVzYyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcHJvbXB0ID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcjsKKworCWNyZWRlbnRpYWxfZGVzY3JpYmUoYywgJmRlc2MpOworCWlmIChkZXNjLmxlbikKKwkJc3RyYnVmX2FkZGYoJnByb21wdCwgIiVzIGZvciAnJXMnOiAiLCB3aGF0LCBkZXNjLmJ1Zik7CisJZWxzZQorCQlzdHJidWZfYWRkZigmcHJvbXB0LCAiJXM6ICIsIHdoYXQpOworCisJciA9IGdpdF9wcm9tcHQocHJvbXB0LmJ1ZiwgZmxhZ3MpOworCisJc3RyYnVmX3JlbGVhc2UoJmRlc2MpOworCXN0cmJ1Zl9yZWxlYXNlKCZwcm9tcHQpOworCXJldHVybiB4c3RyZHVwKHIpOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX2dldHBhc3Moc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJaWYgKCFjLT51c2VybmFtZSkKKwkJYy0+dXNlcm5hbWUgPSBjcmVkZW50aWFsX2Fza19vbmUoIlVzZXJuYW1lIiwgYywKKwkJCQkJCSBQUk9NUFRfQVNLUEFTU3xQUk9NUFRfRUNITyk7CisJaWYgKCFjLT5wYXNzd29yZCkKKwkJYy0+cGFzc3dvcmQgPSBjcmVkZW50aWFsX2Fza19vbmUoIlBhc3N3b3JkIiwgYywKKwkJCQkJCSBQUk9NUFRfQVNLUEFTUyk7Cit9CisKK2ludCBjcmVkZW50aWFsX3JlYWQoc3RydWN0IGNyZWRlbnRpYWwgKmMsIEZJTEUgKmZwKQoreworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCisJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBmcCwgJ1xuJykgIT0gRU9GKSB7CisJCWNoYXIgKmtleSA9IGxpbmUuYnVmOworCQljaGFyICp2YWx1ZSA9IHN0cmNocihrZXksICc9Jyk7CisKKwkJaWYgKCFsaW5lLmxlbikKKwkJCWJyZWFrOworCisJCWlmICghdmFsdWUpIHsKKwkJCXdhcm5pbmcoImludmFsaWQgY3JlZGVudGlhbCBsaW5lOiAlcyIsIGtleSk7CisJCQlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJKnZhbHVlKysgPSAnXDAnOworCisJCWlmICghc3RyY21wKGtleSwgInVzZXJuYW1lIikpIHsKKwkJCWZyZWUoYy0+dXNlcm5hbWUpOworCQkJYy0+dXNlcm5hbWUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInBhc3N3b3JkIikpIHsKKwkJCWZyZWUoYy0+cGFzc3dvcmQpOworCQkJYy0+cGFzc3dvcmQgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInByb3RvY29sIikpIHsKKwkJCWZyZWUoYy0+cHJvdG9jb2wpOworCQkJYy0+cHJvdG9jb2wgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgImhvc3QiKSkgeworCQkJZnJlZShjLT5ob3N0KTsKKwkJCWMtPmhvc3QgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInBhdGgiKSkgeworCQkJZnJlZShjLT5wYXRoKTsKKwkJCWMtPnBhdGggPSB4c3RyZHVwKHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInVybCIpKSB7CisJCQljcmVkZW50aWFsX2Zyb21fdXJsKGMsIHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgInF1aXQiKSkgeworCQkJYy0+cXVpdCA9ICEhZ2l0X2NvbmZpZ19ib29sKCJxdWl0IiwgdmFsdWUpOworCQl9CisJCS8qCisJCSAqIElnbm9yZSBvdGhlciBsaW5lczsgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZXkgbWVhbiwgYnV0CisJCSAqIHRoaXMgZnV0dXJlLXByb29mcyB1cyB3aGVuIGxhdGVyIHZlcnNpb25zIG9mIGdpdCBkbworCQkgKiBsZWFybiBuZXcgbGluZXMsIGFuZCB0aGUgaGVscGVycyBhcmUgdXBkYXRlZCB0byBtYXRjaC4KKwkJICovCisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcmVkZW50aWFsX3dyaXRlX2l0ZW0oRklMRSAqZnAsIGNvbnN0IGNoYXIgKmtleSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuOworCWZwcmludGYoZnAsICIlcz0lc1xuIiwga2V5LCB2YWx1ZSk7Cit9CisKK3ZvaWQgY3JlZGVudGlhbF93cml0ZShjb25zdCBzdHJ1Y3QgY3JlZGVudGlhbCAqYywgRklMRSAqZnApCit7CisJY3JlZGVudGlhbF93cml0ZV9pdGVtKGZwLCAicHJvdG9jb2wiLCBjLT5wcm90b2NvbCk7CisJY3JlZGVudGlhbF93cml0ZV9pdGVtKGZwLCAiaG9zdCIsIGMtPmhvc3QpOworCWNyZWRlbnRpYWxfd3JpdGVfaXRlbShmcCwgInBhdGgiLCBjLT5wYXRoKTsKKwljcmVkZW50aWFsX3dyaXRlX2l0ZW0oZnAsICJ1c2VybmFtZSIsIGMtPnVzZXJuYW1lKTsKKwljcmVkZW50aWFsX3dyaXRlX2l0ZW0oZnAsICJwYXNzd29yZCIsIGMtPnBhc3N3b3JkKTsKK30KKworc3RhdGljIGludCBydW5fY3JlZGVudGlhbF9oZWxwZXIoc3RydWN0IGNyZWRlbnRpYWwgKmMsCisJCQkJIGNvbnN0IGNoYXIgKmNtZCwKKwkJCQkgaW50IHdhbnRfb3V0cHV0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGhlbHBlciA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7IE5VTEwsIE5VTEwgfTsKKwlGSUxFICpmcDsKKworCWFyZ3ZbMF0gPSBjbWQ7CisJaGVscGVyLmFyZ3YgPSBhcmd2OworCWhlbHBlci51c2Vfc2hlbGwgPSAxOworCWhlbHBlci5pbiA9IC0xOworCWlmICh3YW50X291dHB1dCkKKwkJaGVscGVyLm91dCA9IC0xOworCWVsc2UKKwkJaGVscGVyLm5vX3N0ZG91dCA9IDE7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmaGVscGVyKSA8IDApCisJCXJldHVybiAtMTsKKworCWZwID0geGZkb3BlbihoZWxwZXIuaW4sICJ3Iik7CisJY3JlZGVudGlhbF93cml0ZShjLCBmcCk7CisJZmNsb3NlKGZwKTsKKworCWlmICh3YW50X291dHB1dCkgeworCQlpbnQgcjsKKwkJZnAgPSB4ZmRvcGVuKGhlbHBlci5vdXQsICJyIik7CisJCXIgPSBjcmVkZW50aWFsX3JlYWQoYywgZnApOworCQlmY2xvc2UoZnApOworCQlpZiAociA8IDApIHsKKwkJCWZpbmlzaF9jb21tYW5kKCZoZWxwZXIpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJaWYgKGZpbmlzaF9jb21tYW5kKCZoZWxwZXIpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3JlZGVudGlhbF9kbyhzdHJ1Y3QgY3JlZGVudGlhbCAqYywgY29uc3QgY2hhciAqaGVscGVyLAorCQkJIGNvbnN0IGNoYXIgKm9wZXJhdGlvbikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGNtZCA9IFNUUkJVRl9JTklUOworCWludCByOworCisJaWYgKGhlbHBlclswXSA9PSAnIScpCisJCXN0cmJ1Zl9hZGRzdHIoJmNtZCwgaGVscGVyICsgMSk7CisJZWxzZSBpZiAoaXNfYWJzb2x1dGVfcGF0aChoZWxwZXIpKQorCQlzdHJidWZfYWRkc3RyKCZjbWQsIGhlbHBlcik7CisJZWxzZQorCQlzdHJidWZfYWRkZigmY21kLCAiZ2l0IGNyZWRlbnRpYWwtJXMiLCBoZWxwZXIpOworCisJc3RyYnVmX2FkZGYoJmNtZCwgIiAlcyIsIG9wZXJhdGlvbik7CisJciA9IHJ1bl9jcmVkZW50aWFsX2hlbHBlcihjLCBjbWQuYnVmLCAhc3RyY21wKG9wZXJhdGlvbiwgImdldCIpKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZjbWQpOworCXJldHVybiByOworfQorCit2b2lkIGNyZWRlbnRpYWxfZmlsbChzdHJ1Y3QgY3JlZGVudGlhbCAqYykKK3sKKwlpbnQgaTsKKworCWlmIChjLT51c2VybmFtZSAmJiBjLT5wYXNzd29yZCkKKwkJcmV0dXJuOworCisJY3JlZGVudGlhbF9hcHBseV9jb25maWcoYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYy0+aGVscGVycy5ucjsgaSsrKSB7CisJCWNyZWRlbnRpYWxfZG8oYywgYy0+aGVscGVycy5pdGVtc1tpXS5zdHJpbmcsICJnZXQiKTsKKwkJaWYgKGMtPnVzZXJuYW1lICYmIGMtPnBhc3N3b3JkKQorCQkJcmV0dXJuOworCQlpZiAoYy0+cXVpdCkKKwkJCWRpZSgiY3JlZGVudGlhbCBoZWxwZXIgJyVzJyB0b2xkIHVzIHRvIHF1aXQiLAorCQkJICAgIGMtPmhlbHBlcnMuaXRlbXNbaV0uc3RyaW5nKTsKKwl9CisKKwljcmVkZW50aWFsX2dldHBhc3MoYyk7CisJaWYgKCFjLT51c2VybmFtZSAmJiAhYy0+cGFzc3dvcmQpCisJCWRpZSgidW5hYmxlIHRvIGdldCBwYXNzd29yZCBmcm9tIHVzZXIiKTsKK30KKwordm9pZCBjcmVkZW50aWFsX2FwcHJvdmUoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJaW50IGk7CisKKwlpZiAoYy0+YXBwcm92ZWQpCisJCXJldHVybjsKKwlpZiAoIWMtPnVzZXJuYW1lIHx8ICFjLT5wYXNzd29yZCkKKwkJcmV0dXJuOworCisJY3JlZGVudGlhbF9hcHBseV9jb25maWcoYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYy0+aGVscGVycy5ucjsgaSsrKQorCQljcmVkZW50aWFsX2RvKGMsIGMtPmhlbHBlcnMuaXRlbXNbaV0uc3RyaW5nLCAic3RvcmUiKTsKKwljLT5hcHByb3ZlZCA9IDE7Cit9CisKK3ZvaWQgY3JlZGVudGlhbF9yZWplY3Qoc3RydWN0IGNyZWRlbnRpYWwgKmMpCit7CisJaW50IGk7CisKKwljcmVkZW50aWFsX2FwcGx5X2NvbmZpZyhjKTsKKworCWZvciAoaSA9IDA7IGkgPCBjLT5oZWxwZXJzLm5yOyBpKyspCisJCWNyZWRlbnRpYWxfZG8oYywgYy0+aGVscGVycy5pdGVtc1tpXS5zdHJpbmcsICJlcmFzZSIpOworCisJZnJlZShjLT51c2VybmFtZSk7CisJYy0+dXNlcm5hbWUgPSBOVUxMOworCWZyZWUoYy0+cGFzc3dvcmQpOworCWMtPnBhc3N3b3JkID0gTlVMTDsKKwljLT5hcHByb3ZlZCA9IDA7Cit9CisKK3ZvaWQgY3JlZGVudGlhbF9mcm9tX3VybChzdHJ1Y3QgY3JlZGVudGlhbCAqYywgY29uc3QgY2hhciAqdXJsKQoreworCWNvbnN0IGNoYXIgKmF0LCAqY29sb24sICpjcCwgKnNsYXNoLCAqaG9zdCwgKnByb3RvX2VuZDsKKworCWNyZWRlbnRpYWxfY2xlYXIoYyk7CisKKwkvKgorCSAqIE1hdGNoIG9uZSBvZjoKKwkgKiAgICgxKSBwcm90bzovLzxob3N0Pi8uLi4KKwkgKiAgICgyKSBwcm90bzovLzx1c2VyPkA8aG9zdD4vLi4uCisJICogICAoMykgcHJvdG86Ly88dXNlcj46PHBhc3M+QDxob3N0Pi8uLi4KKwkgKi8KKwlwcm90b19lbmQgPSBzdHJzdHIodXJsLCAiOi8vIik7CisJaWYgKCFwcm90b19lbmQpCisJCXJldHVybjsKKwljcCA9IHByb3RvX2VuZCArIDM7CisJYXQgPSBzdHJjaHIoY3AsICdAJyk7CisJY29sb24gPSBzdHJjaHIoY3AsICc6Jyk7CisJc2xhc2ggPSBzdHJjaHJudWwoY3AsICcvJyk7CisKKwlpZiAoIWF0IHx8IHNsYXNoIDw9IGF0KSB7CisJCS8qIENhc2UgKDEpICovCisJCWhvc3QgPSBjcDsKKwl9CisJZWxzZSBpZiAoIWNvbG9uIHx8IGF0IDw9IGNvbG9uKSB7CisJCS8qIENhc2UgKDIpICovCisJCWMtPnVzZXJuYW1lID0gdXJsX2RlY29kZV9tZW0oY3AsIGF0IC0gY3ApOworCQlob3N0ID0gYXQgKyAxOworCX0gZWxzZSB7CisJCS8qIENhc2UgKDMpICovCisJCWMtPnVzZXJuYW1lID0gdXJsX2RlY29kZV9tZW0oY3AsIGNvbG9uIC0gY3ApOworCQljLT5wYXNzd29yZCA9IHVybF9kZWNvZGVfbWVtKGNvbG9uICsgMSwgYXQgLSAoY29sb24gKyAxKSk7CisJCWhvc3QgPSBhdCArIDE7CisJfQorCisJaWYgKHByb3RvX2VuZCAtIHVybCA+IDApCisJCWMtPnByb3RvY29sID0geG1lbWR1cHoodXJsLCBwcm90b19lbmQgLSB1cmwpOworCWlmIChzbGFzaCAtIGhvc3QgPiAwKQorCQljLT5ob3N0ID0gdXJsX2RlY29kZV9tZW0oaG9zdCwgc2xhc2ggLSBob3N0KTsKKwkvKiBUcmltIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBwYXRoICovCisJd2hpbGUgKCpzbGFzaCA9PSAnLycpCisJCXNsYXNoKys7CisJaWYgKCpzbGFzaCkgeworCQljaGFyICpwOworCQljLT5wYXRoID0gdXJsX2RlY29kZShzbGFzaCk7CisJCXAgPSBjLT5wYXRoICsgc3RybGVuKGMtPnBhdGgpIC0gMTsKKwkJd2hpbGUgKHAgPiBjLT5wYXRoICYmICpwID09ICcvJykKKwkJCSpwLS0gPSAnXDAnOworCX0KK30KZGlmZiAtLWdpdCBhL2NyZWRlbnRpYWwuaCBiL2NyZWRlbnRpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjBjZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvY3JlZGVudGlhbC5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpZm5kZWYgQ1JFREVOVElBTF9ICisjZGVmaW5lIENSRURFTlRJQUxfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RydWN0IGNyZWRlbnRpYWwgeworCXN0cnVjdCBzdHJpbmdfbGlzdCBoZWxwZXJzOworCXVuc2lnbmVkIGFwcHJvdmVkOjEsCisJCSBjb25maWd1cmVkOjEsCisJCSBxdWl0OjEsCisJCSB1c2VfaHR0cF9wYXRoOjE7CisKKwljaGFyICp1c2VybmFtZTsKKwljaGFyICpwYXNzd29yZDsKKwljaGFyICpwcm90b2NvbDsKKwljaGFyICpob3N0OworCWNoYXIgKnBhdGg7Cit9OworCisjZGVmaW5lIENSRURFTlRJQUxfSU5JVCB7IFNUUklOR19MSVNUX0lOSVRfRFVQIH0KKwordm9pZCBjcmVkZW50aWFsX2luaXQoc3RydWN0IGNyZWRlbnRpYWwgKik7Cit2b2lkIGNyZWRlbnRpYWxfY2xlYXIoc3RydWN0IGNyZWRlbnRpYWwgKik7CisKK3ZvaWQgY3JlZGVudGlhbF9maWxsKHN0cnVjdCBjcmVkZW50aWFsICopOwordm9pZCBjcmVkZW50aWFsX2FwcHJvdmUoc3RydWN0IGNyZWRlbnRpYWwgKik7Cit2b2lkIGNyZWRlbnRpYWxfcmVqZWN0KHN0cnVjdCBjcmVkZW50aWFsICopOworCitpbnQgY3JlZGVudGlhbF9yZWFkKHN0cnVjdCBjcmVkZW50aWFsICosIEZJTEUgKik7Cit2b2lkIGNyZWRlbnRpYWxfd3JpdGUoY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKiwgRklMRSAqKTsKK3ZvaWQgY3JlZGVudGlhbF9mcm9tX3VybChzdHJ1Y3QgY3JlZGVudGlhbCAqLCBjb25zdCBjaGFyICp1cmwpOworaW50IGNyZWRlbnRpYWxfbWF0Y2goY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKmhhdmUsCisJCSAgICAgY29uc3Qgc3RydWN0IGNyZWRlbnRpYWwgKndhbnQpOworCisjZW5kaWYgLyogQ1JFREVOVElBTF9IICovCmRpZmYgLS1naXQgYS9jc3VtLWZpbGUuYyBiL2NzdW0tZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNzIxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9jc3VtLWZpbGUuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIGNzdW0tZmlsZS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IExpbnVzIFRvcnZhbGRzCisgKgorICogU2ltcGxlIGZpbGUgd3JpdGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIHdyaXRpbmcgU0hBMS1zdW1tZWQKKyAqIGZpbGVzLiBVc2VmdWwgd2hlbiB5b3Ugd3JpdGUgYSBmaWxlIHRoYXQgeW91IHdhbnQgdG8gYmUKKyAqIGFibGUgdG8gdmVyaWZ5IGhhc24ndCBiZWVuIG1lc3NlZCB3aXRoIGFmdGVyd2FyZHMuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAiY3N1bS1maWxlLmgiCisKK3N0YXRpYyB2b2lkIGZsdXNoKHN0cnVjdCBzaGExZmlsZSAqZiwgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJaWYgKDAgPD0gZi0+Y2hlY2tfZmQgJiYgY291bnQpICB7CisJCXVuc2lnbmVkIGNoYXIgY2hlY2tfYnVmZmVyWzgxOTJdOworCQlzc2l6ZV90IHJldCA9IHJlYWRfaW5fZnVsbChmLT5jaGVja19mZCwgY2hlY2tfYnVmZmVyLCBjb3VudCk7CisKKwkJaWYgKHJldCA8IDApCisJCQlkaWVfZXJybm8oIiVzOiBzaGExIGZpbGUgcmVhZCBlcnJvciIsIGYtPm5hbWUpOworCQlpZiAocmV0IDwgY291bnQpCisJCQlkaWUoIiVzOiBzaGExIGZpbGUgdHJ1bmNhdGVkIiwgZi0+bmFtZSk7CisJCWlmIChtZW1jbXAoYnVmLCBjaGVja19idWZmZXIsIGNvdW50KSkKKwkJCWRpZSgic2hhMSBmaWxlICclcycgdmFsaWRhdGlvbiBlcnJvciIsIGYtPm5hbWUpOworCX0KKworCWZvciAoOzspIHsKKwkJaW50IHJldCA9IHh3cml0ZShmLT5mZCwgYnVmLCBjb3VudCk7CisJCWlmIChyZXQgPiAwKSB7CisJCQlmLT50b3RhbCArPSByZXQ7CisJCQlkaXNwbGF5X3Rocm91Z2hwdXQoZi0+dHAsIGYtPnRvdGFsKTsKKwkJCWJ1ZiA9IChjaGFyICopIGJ1ZiArIHJldDsKKwkJCWNvdW50IC09IHJldDsKKwkJCWlmIChjb3VudCkKKwkJCQljb250aW51ZTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoIXJldCkKKwkJCWRpZSgic2hhMSBmaWxlICclcycgd3JpdGUgZXJyb3IuIE91dCBvZiBkaXNrc3BhY2UiLCBmLT5uYW1lKTsKKwkJZGllX2Vycm5vKCJzaGExIGZpbGUgJyVzJyB3cml0ZSBlcnJvciIsIGYtPm5hbWUpOworCX0KK30KKwordm9pZCBzaGExZmx1c2goc3RydWN0IHNoYTFmaWxlICpmKQoreworCXVuc2lnbmVkIG9mZnNldCA9IGYtPm9mZnNldDsKKworCWlmIChvZmZzZXQpIHsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZmLT5jdHgsIGYtPmJ1ZmZlciwgb2Zmc2V0KTsKKwkJZmx1c2goZiwgZi0+YnVmZmVyLCBvZmZzZXQpOworCQlmLT5vZmZzZXQgPSAwOworCX0KK30KKworaW50IHNoYTFjbG9zZShzdHJ1Y3Qgc2hhMWZpbGUgKmYsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCwgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWludCBmZDsKKworCXNoYTFmbHVzaChmKTsKKwlnaXRfU0hBMV9GaW5hbChmLT5idWZmZXIsICZmLT5jdHgpOworCWlmIChyZXN1bHQpCisJCWhhc2hjcHkocmVzdWx0LCBmLT5idWZmZXIpOworCWlmIChmbGFncyAmIChDU1VNX0NMT1NFIHwgQ1NVTV9GU1lOQykpIHsKKwkJLyogd3JpdGUgY2hlY2tzdW0gYW5kIGNsb3NlIGZkICovCisJCWZsdXNoKGYsIGYtPmJ1ZmZlciwgMjApOworCQlpZiAoZmxhZ3MgJiBDU1VNX0ZTWU5DKQorCQkJZnN5bmNfb3JfZGllKGYtPmZkLCBmLT5uYW1lKTsKKwkJaWYgKGNsb3NlKGYtPmZkKSkKKwkJCWRpZV9lcnJubygiJXM6IHNoYTEgZmlsZSBlcnJvciBvbiBjbG9zZSIsIGYtPm5hbWUpOworCQlmZCA9IDA7CisJfSBlbHNlCisJCWZkID0gZi0+ZmQ7CisJaWYgKDAgPD0gZi0+Y2hlY2tfZmQpIHsKKwkJY2hhciBkaXNjYXJkOworCQlpbnQgY250ID0gcmVhZF9pbl9mdWxsKGYtPmNoZWNrX2ZkLCAmZGlzY2FyZCwgMSk7CisJCWlmIChjbnQgPCAwKQorCQkJZGllX2Vycm5vKCIlczogZXJyb3Igd2hlbiByZWFkaW5nIHRoZSB0YWlsIG9mIHNoYTEgZmlsZSIsCisJCQkJICBmLT5uYW1lKTsKKwkJaWYgKGNudCkKKwkJCWRpZSgiJXM6IHNoYTEgZmlsZSBoYXMgdHJhaWxpbmcgZ2FyYmFnZSIsIGYtPm5hbWUpOworCQlpZiAoY2xvc2UoZi0+Y2hlY2tfZmQpKQorCQkJZGllX2Vycm5vKCIlczogc2hhMSBmaWxlIGVycm9yIG9uIGNsb3NlIiwgZi0+bmFtZSk7CisJfQorCWZyZWUoZik7CisJcmV0dXJuIGZkOworfQorCit2b2lkIHNoYTF3cml0ZShzdHJ1Y3Qgc2hhMWZpbGUgKmYsIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KQoreworCXdoaWxlIChjb3VudCkgeworCQl1bnNpZ25lZCBvZmZzZXQgPSBmLT5vZmZzZXQ7CisJCXVuc2lnbmVkIGxlZnQgPSBzaXplb2YoZi0+YnVmZmVyKSAtIG9mZnNldDsKKwkJdW5zaWduZWQgbnIgPSBjb3VudCA+IGxlZnQgPyBsZWZ0IDogY291bnQ7CisJCWNvbnN0IHZvaWQgKmRhdGE7CisKKwkJaWYgKGYtPmRvX2NyYykKKwkJCWYtPmNyYzMyID0gY3JjMzIoZi0+Y3JjMzIsIGJ1ZiwgbnIpOworCisJCWlmIChuciA9PSBzaXplb2YoZi0+YnVmZmVyKSkgeworCQkJLyogcHJvY2VzcyBmdWxsIGJ1ZmZlciBkaXJlY3RseSB3aXRob3V0IGNvcHkgKi8KKwkJCWRhdGEgPSBidWY7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoZi0+YnVmZmVyICsgb2Zmc2V0LCBidWYsIG5yKTsKKwkJCWRhdGEgPSBmLT5idWZmZXI7CisJCX0KKworCQljb3VudCAtPSBucjsKKwkJb2Zmc2V0ICs9IG5yOworCQlidWYgPSAoY2hhciAqKSBidWYgKyBucjsKKwkJbGVmdCAtPSBucjsKKwkJaWYgKCFsZWZ0KSB7CisJCQlnaXRfU0hBMV9VcGRhdGUoJmYtPmN0eCwgZGF0YSwgb2Zmc2V0KTsKKwkJCWZsdXNoKGYsIGRhdGEsIG9mZnNldCk7CisJCQlvZmZzZXQgPSAwOworCQl9CisJCWYtPm9mZnNldCA9IG9mZnNldDsKKwl9Cit9CisKK3N0cnVjdCBzaGExZmlsZSAqc2hhMWZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gc2hhMWZkX3Rocm91Z2hwdXQoZmQsIG5hbWUsIE5VTEwpOworfQorCitzdHJ1Y3Qgc2hhMWZpbGUgKnNoYTFmZF9jaGVjayhjb25zdCBjaGFyICpuYW1lKQoreworCWludCBzaW5rLCBjaGVjazsKKwlzdHJ1Y3Qgc2hhMWZpbGUgKmY7CisKKwlzaW5rID0gb3BlbigiL2Rldi9udWxsIiwgT19XUk9OTFkpOworCWlmIChzaW5rIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gb3BlbiAvZGV2L251bGwiKTsKKwljaGVjayA9IG9wZW4obmFtZSwgT19SRE9OTFkpOworCWlmIChjaGVjayA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIG9wZW4gJyVzJyIsIG5hbWUpOworCWYgPSBzaGExZmQoc2luaywgbmFtZSk7CisJZi0+Y2hlY2tfZmQgPSBjaGVjazsKKwlyZXR1cm4gZjsKK30KKworc3RydWN0IHNoYTFmaWxlICpzaGExZmRfdGhyb3VnaHB1dChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwcm9ncmVzcyAqdHApCit7CisJc3RydWN0IHNoYTFmaWxlICpmID0geG1hbGxvYyhzaXplb2YoKmYpKTsKKwlmLT5mZCA9IGZkOworCWYtPmNoZWNrX2ZkID0gLTE7CisJZi0+b2Zmc2V0ID0gMDsKKwlmLT50b3RhbCA9IDA7CisJZi0+dHAgPSB0cDsKKwlmLT5uYW1lID0gbmFtZTsKKwlmLT5kb19jcmMgPSAwOworCWdpdF9TSEExX0luaXQoJmYtPmN0eCk7CisJcmV0dXJuIGY7Cit9CisKK3ZvaWQgc2hhMWZpbGVfY2hlY2twb2ludChzdHJ1Y3Qgc2hhMWZpbGUgKmYsIHN0cnVjdCBzaGExZmlsZV9jaGVja3BvaW50ICpjaGVja3BvaW50KQoreworCXNoYTFmbHVzaChmKTsKKwljaGVja3BvaW50LT5vZmZzZXQgPSBmLT50b3RhbDsKKwljaGVja3BvaW50LT5jdHggPSBmLT5jdHg7Cit9CisKK2ludCBzaGExZmlsZV90cnVuY2F0ZShzdHJ1Y3Qgc2hhMWZpbGUgKmYsIHN0cnVjdCBzaGExZmlsZV9jaGVja3BvaW50ICpjaGVja3BvaW50KQoreworCW9mZl90IG9mZnNldCA9IGNoZWNrcG9pbnQtPm9mZnNldDsKKworCWlmIChmdHJ1bmNhdGUoZi0+ZmQsIG9mZnNldCkgfHwKKwkgICAgbHNlZWsoZi0+ZmQsIG9mZnNldCwgU0VFS19TRVQpICE9IG9mZnNldCkKKwkJcmV0dXJuIC0xOworCWYtPnRvdGFsID0gb2Zmc2V0OworCWYtPmN0eCA9IGNoZWNrcG9pbnQtPmN0eDsKKwlmLT5vZmZzZXQgPSAwOyAvKiBzaGExZmx1c2goKSB3YXMgY2FsbGVkIGluIGNoZWNrcG9pbnQgKi8KKwlyZXR1cm4gMDsKK30KKwordm9pZCBjcmMzMl9iZWdpbihzdHJ1Y3Qgc2hhMWZpbGUgKmYpCit7CisJZi0+Y3JjMzIgPSBjcmMzMigwLCBOVUxMLCAwKTsKKwlmLT5kb19jcmMgPSAxOworfQorCit1aW50MzJfdCBjcmMzMl9lbmQoc3RydWN0IHNoYTFmaWxlICpmKQoreworCWYtPmRvX2NyYyA9IDA7CisJcmV0dXJuIGYtPmNyYzMyOworfQpkaWZmIC0tZ2l0IGEvY3N1bS1maWxlLmggYi9jc3VtLWZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTMwOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvY3N1bS1maWxlLmgKQEAgLTAsMCArMSw1MyBAQAorI2lmbmRlZiBDU1VNX0ZJTEVfSAorI2RlZmluZSBDU1VNX0ZJTEVfSAorCitzdHJ1Y3QgcHJvZ3Jlc3M7CisKKy8qIEEgU0hBMS1wcm90ZWN0ZWQgZmlsZSAqLworc3RydWN0IHNoYTFmaWxlIHsKKwlpbnQgZmQ7CisJaW50IGNoZWNrX2ZkOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CisJZ2l0X1NIQV9DVFggY3R4OworCW9mZl90IHRvdGFsOworCXN0cnVjdCBwcm9ncmVzcyAqdHA7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgZG9fY3JjOworCXVpbnQzMl90IGNyYzMyOworCXVuc2lnbmVkIGNoYXIgYnVmZmVyWzgxOTJdOworfTsKKworLyogQ2hlY2twb2ludCAqLworc3RydWN0IHNoYTFmaWxlX2NoZWNrcG9pbnQgeworCW9mZl90IG9mZnNldDsKKwlnaXRfU0hBX0NUWCBjdHg7Cit9OworCitleHRlcm4gdm9pZCBzaGExZmlsZV9jaGVja3BvaW50KHN0cnVjdCBzaGExZmlsZSAqLCBzdHJ1Y3Qgc2hhMWZpbGVfY2hlY2twb2ludCAqKTsKK2V4dGVybiBpbnQgc2hhMWZpbGVfdHJ1bmNhdGUoc3RydWN0IHNoYTFmaWxlICosIHN0cnVjdCBzaGExZmlsZV9jaGVja3BvaW50ICopOworCisvKiBzaGExY2xvc2UgZmxhZ3MgKi8KKyNkZWZpbmUgQ1NVTV9DTE9TRQkxCisjZGVmaW5lIENTVU1fRlNZTkMJMgorCitleHRlcm4gc3RydWN0IHNoYTFmaWxlICpzaGExZmQoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBzdHJ1Y3Qgc2hhMWZpbGUgKnNoYTFmZF9jaGVjayhjb25zdCBjaGFyICpuYW1lKTsKK2V4dGVybiBzdHJ1Y3Qgc2hhMWZpbGUgKnNoYTFmZF90aHJvdWdocHV0KGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHByb2dyZXNzICp0cCk7CitleHRlcm4gaW50IHNoYTFjbG9zZShzdHJ1Y3Qgc2hhMWZpbGUgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIHZvaWQgc2hhMXdyaXRlKHN0cnVjdCBzaGExZmlsZSAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBzaGExZmx1c2goc3RydWN0IHNoYTFmaWxlICpmKTsKK2V4dGVybiB2b2lkIGNyYzMyX2JlZ2luKHN0cnVjdCBzaGExZmlsZSAqKTsKK2V4dGVybiB1aW50MzJfdCBjcmMzMl9lbmQoc3RydWN0IHNoYTFmaWxlICopOworCitzdGF0aWMgaW5saW5lIHZvaWQgc2hhMXdyaXRlX3U4KHN0cnVjdCBzaGExZmlsZSAqZiwgdWludDhfdCBkYXRhKQoreworCXNoYTF3cml0ZShmLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNoYTF3cml0ZV9iZTMyKHN0cnVjdCBzaGExZmlsZSAqZiwgdWludDMyX3QgZGF0YSkKK3sKKwlkYXRhID0gaHRvbmwoZGF0YSk7CisJc2hhMXdyaXRlKGYsICZkYXRhLCBzaXplb2YoZGF0YSkpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2N0eXBlLmMgYi9jdHlwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMDIyNWMKLS0tIC9kZXYvbnVsbAorKysgYi9jdHlwZS5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBTYW5lIGxvY2FsZS1pbmRlcGVuZGVudCwgQVNDSUkgY3R5cGUuCisgKgorICogTm8gc3VycHJpc2VzLCBhbmQgd29ya3Mgd2l0aCBzaWduZWQgYW5kIHVuc2lnbmVkIGNoYXJzLgorICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2VudW0geworCVMgPSBHSVRfU1BBQ0UsCisJQSA9IEdJVF9BTFBIQSwKKwlEID0gR0lUX0RJR0lULAorCUcgPSBHSVRfR0xPQl9TUEVDSUFMLAkvKiAqLCA/LCBbLCBcXCAqLworCVIgPSBHSVRfUkVHRVhfU1BFQ0lBTCwJLyogJCwgKCwgKSwgKywgLiwgXiwgeywgfCAqLworCVAgPSBHSVRfUEFUSFNQRUNfTUFHSUMsIC8qIG90aGVyIG5vbi1hbG51bSwgZXhjZXB0IGZvciBdIGFuZCB9ICovCisJWCA9IEdJVF9DTlRSTCwKKwlVID0gR0lUX1BVTkNULAorCVogPSBHSVRfQ05UUkwgfCBHSVRfU1BBQ0UKK307CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIgc2FuZV9jdHlwZVsyNTZdID0geworCVgsIFgsIFgsIFgsIFgsIFgsIFgsIFgsIFgsIFosIFosIFgsIFgsIFosIFgsIFgsCQkvKiAgIDAuLiAxNSAqLworCVgsIFgsIFgsIFgsIFgsIFgsIFgsIFgsIFgsIFgsIFgsIFgsIFgsIFgsIFgsIFgsCQkvKiAgMTYuLiAzMSAqLworCVMsIFAsIFAsIFAsIFIsIFAsIFAsIFAsIFIsIFIsIEcsIFIsIFAsIFAsIFIsIFAsCQkvKiAgMzIuLiA0NyAqLworCUQsIEQsIEQsIEQsIEQsIEQsIEQsIEQsIEQsIEQsIFAsIFAsIFAsIFAsIFAsIEcsCQkvKiAgNDguLiA2MyAqLworCVAsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsCQkvKiAgNjQuLiA3OSAqLworCUEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEcsIEcsIFUsIFIsIFAsCQkvKiAgODAuLiA5NSAqLworCVAsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsCQkvKiAgOTYuLjExMSAqLworCUEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIEEsIFIsIFIsIFUsIFAsIFgsCQkvKiAxMTIuLjEyNyAqLworCS8qIE5vdGhpbmcgaW4gdGhlIDEyOC4uIHJhbmdlICovCit9OworCisvKiBGb3IgY2FzZS1pbnNlbnNpdGl2ZSBrd3NldCAqLworY29uc3QgdW5zaWduZWQgY2hhciB0b2xvd2VyX3RyYW5zX3RibFsyNTZdID0geworCTB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisJMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKwkweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorCTB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsCisJICcgJywgICchJywgICciJywgICcjJywgICckJywgICclJywgICcmJywgMHgyNywKKwkgJygnLCAgJyknLCAgJyonLCAgJysnLCAgJywnLCAgJy0nLCAgJy4nLCAgJy8nLAorCSAnMCcsICAnMScsICAnMicsICAnMycsICAnNCcsICAnNScsICAnNicsICAnNycsCisJICc4JywgICc5JywgICc6JywgICc7JywgICc8JywgICc9JywgICc+JywgICc/JywKKwkgJ0AnLCAgJ2EnLCAgJ2InLCAgJ2MnLCAgJ2QnLCAgJ2UnLCAgJ2YnLCAgJ2cnLAorCSAnaCcsICAnaScsICAnaicsICAnaycsICAnbCcsICAnbScsICAnbicsICAnbycsCisJICdwJywgICdxJywgICdyJywgICdzJywgICd0JywgICd1JywgICd2JywgICd3JywKKwkgJ3gnLCAgJ3knLCAgJ3onLCAgJ1snLCAweDVjLCAgJ10nLCAgJ14nLCAgJ18nLAorCSAnYCcsICAnYScsICAnYicsICAnYycsICAnZCcsICAnZScsICAnZicsICAnZycsCisJICdoJywgICdpJywgICdqJywgICdrJywgICdsJywgICdtJywgICduJywgICdvJywKKwkgJ3AnLCAgJ3EnLCAgJ3InLCAgJ3MnLCAgJ3QnLCAgJ3UnLCAgJ3YnLCAgJ3cnLAorCSAneCcsICAneScsICAneicsICAneycsICAnfCcsICAnfScsICAnficsIDB4N2YsCisJMHg4MCwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKwkweDg4LCAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLAorCTB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsCisJMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwKKwkweGEwLCAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LAorCTB4YTgsIDB4YTksIDB4YWEsIDB4YWIsIDB4YWMsIDB4YWQsIDB4YWUsIDB4YWYsCisJMHhiMCwgMHhiMSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwgMHhiNywKKwkweGI4LCAweGI5LCAweGJhLCAweGJiLCAweGJjLCAweGJkLCAweGJlLCAweGJmLAorCTB4YzAsIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsCisJMHhjOCwgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwKKwkweGQwLCAweGQxLCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGQ3LAorCTB4ZDgsIDB4ZDksIDB4ZGEsIDB4ZGIsIDB4ZGMsIDB4ZGQsIDB4ZGUsIDB4ZGYsCisJMHhlMCwgMHhlMSwgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywKKwkweGU4LCAweGU5LCAweGVhLCAweGViLCAweGVjLCAweGVkLCAweGVlLCAweGVmLAorCTB4ZjAsIDB4ZjEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsCisJMHhmOCwgMHhmOSwgMHhmYSwgMHhmYiwgMHhmYywgMHhmZCwgMHhmZSwgMHhmZiwKK307CmRpZmYgLS1naXQgYS9kYWVtb24uYyBiL2RhZW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Njc5YTEKLS0tIC9kZXYvbnVsbAorKysgYi9kYWVtb24uYwpAQCAtMCwwICsxLDEzODQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKKyNpZm5kZWYgSE9TVF9OQU1FX01BWAorI2RlZmluZSBIT1NUX05BTUVfTUFYIDI1NgorI2VuZGlmCisKKyNpZmRlZiBOT19JTklUR1JPVVBTCisjZGVmaW5lIGluaXRncm91cHMoeCwgeSkgKDApIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCitzdGF0aWMgaW50IGxvZ19zeXNsb2c7CitzdGF0aWMgaW50IHZlcmJvc2U7CitzdGF0aWMgaW50IHJldXNlYWRkcjsKK3N0YXRpYyBpbnQgaW5mb3JtYXRpdmVfZXJyb3JzOworCitzdGF0aWMgY29uc3QgY2hhciBkYWVtb25fdXNhZ2VbXSA9CisiZ2l0IGRhZW1vbiBbLS12ZXJib3NlXSBbLS1zeXNsb2ddIFstLWV4cG9ydC1hbGxdXG4iCisiICAgICAgICAgICBbLS10aW1lb3V0PTxuPl0gWy0taW5pdC10aW1lb3V0PTxuPl0gWy0tbWF4LWNvbm5lY3Rpb25zPTxuPl1cbiIKKyIgICAgICAgICAgIFstLXN0cmljdC1wYXRoc10gWy0tYmFzZS1wYXRoPTxwYXRoPl0gWy0tYmFzZS1wYXRoLXJlbGF4ZWRdXG4iCisiICAgICAgICAgICBbLS11c2VyLXBhdGggfCAtLXVzZXItcGF0aD08cGF0aD5dXG4iCisiICAgICAgICAgICBbLS1pbnRlcnBvbGF0ZWQtcGF0aD08cGF0aD5dXG4iCisiICAgICAgICAgICBbLS1yZXVzZWFkZHJdIFstLXBpZC1maWxlPTxmaWxlPl1cbiIKKyIgICAgICAgICAgIFstLShlbmFibGV8ZGlzYWJsZXxhbGxvdy1vdmVycmlkZXxmb3JiaWQtb3ZlcnJpZGUpPTxzZXJ2aWNlPl1cbiIKKyIgICAgICAgICAgIFstLWFjY2Vzcy1ob29rPTxwYXRoPl1cbiIKKyIgICAgICAgICAgIFstLWluZXRkIHwgWy0tbGlzdGVuPTxob3N0X29yX2lwYWRkcj5dIFstLXBvcnQ9PG4+XVxuIgorIiAgICAgICAgICAgICAgICAgICAgICBbLS1kZXRhY2hdIFstLXVzZXI9PHVzZXI+IFstLWdyb3VwPTxncm91cD5dXVxuIgorIiAgICAgICAgICAgWzxkaXJlY3Rvcnk+Li4uXSI7CisKKy8qIExpc3Qgb2YgYWNjZXB0YWJsZSBwYXRobmFtZSBwcmVmaXhlcyAqLworc3RhdGljIGNoYXIgKipva19wYXRoczsKK3N0YXRpYyBpbnQgc3RyaWN0X3BhdGhzOworCisvKiBJZiB0aGlzIGlzIHNldCwgZ2l0LWRhZW1vbi1leHBvcnQtb2sgaXMgbm90IHJlcXVpcmVkICovCitzdGF0aWMgaW50IGV4cG9ydF9hbGxfdHJlZXM7CisKKy8qIFRha2UgYWxsIHBhdGhzIHJlbGF0aXZlIHRvIHRoaXMgb25lIGlmIG5vbi1OVUxMICovCitzdGF0aWMgY29uc3QgY2hhciAqYmFzZV9wYXRoOworc3RhdGljIGNvbnN0IGNoYXIgKmludGVycG9sYXRlZF9wYXRoOworc3RhdGljIGludCBiYXNlX3BhdGhfcmVsYXhlZDsKKworLyogSWYgZGVmaW5lZCwgfnVzZXIgbm90YXRpb24gaXMgYWxsb3dlZCBhbmQgdGhlIHN0cmluZyBpcyBpbnNlcnRlZAorICogYWZ0ZXIgfnVzZXIvLiAgRS5nLiBhIHJlcXVlc3QgdG8gZ2l0Oi8vaG9zdC9+YWxpY2UvZnJvdHogd291bGQKKyAqIGdvIHRvIC9ob21lL2FsaWNlL3B1Yl9naXQvZnJvdHogd2l0aCAtLXVzZXItcGF0aD1wdWJfZ2l0LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqdXNlcl9wYXRoOworCisvKiBUaW1lb3V0LCBhbmQgaW5pdGlhbCB0aW1lb3V0ICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRpbWVvdXQ7CitzdGF0aWMgdW5zaWduZWQgaW50IGluaXRfdGltZW91dDsKKworc3RydWN0IGhvc3RpbmZvIHsKKwlzdHJ1Y3Qgc3RyYnVmIGhvc3RuYW1lOworCXN0cnVjdCBzdHJidWYgY2Fub25faG9zdG5hbWU7CisJc3RydWN0IHN0cmJ1ZiBpcF9hZGRyZXNzOworCXN0cnVjdCBzdHJidWYgdGNwX3BvcnQ7CisJdW5zaWduZWQgaW50IGhvc3RuYW1lX2xvb2t1cF9kb25lOjE7CisJdW5zaWduZWQgaW50IHNhd19leHRlbmRlZF9hcmdzOjE7Cit9OworCitzdGF0aWMgdm9pZCBsb29rdXBfaG9zdG5hbWUoc3RydWN0IGhvc3RpbmZvICpoaSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfY2Fub25faG9zdG5hbWUoc3RydWN0IGhvc3RpbmZvICpoaSkKK3sKKwlsb29rdXBfaG9zdG5hbWUoaGkpOworCXJldHVybiBoaS0+Y2Fub25faG9zdG5hbWUuYnVmOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2lwX2FkZHJlc3Moc3RydWN0IGhvc3RpbmZvICpoaSkKK3sKKwlsb29rdXBfaG9zdG5hbWUoaGkpOworCXJldHVybiBoaS0+aXBfYWRkcmVzcy5idWY7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ3JlcG9ydChpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJaWYgKGxvZ19zeXNsb2cpIHsKKwkJY2hhciBidWZbMTAyNF07CisJCXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBlcnIsIHBhcmFtcyk7CisJCXN5c2xvZyhwcmlvcml0eSwgIiVzIiwgYnVmKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBTaW5jZSBzdGRlcnIgaXMgc2V0IHRvIGJ1ZmZlcmVkIG1vZGUsIHRoZQorCQkgKiBsb2dnaW5nIG9mIGRpZmZlcmVudCBwcm9jZXNzZXMgd2lsbCBub3Qgb3ZlcmxhcAorCQkgKiB1bmxlc3MgdGhleSBvdmVyZmxvdyB0aGUgKHJhdGhlciBiaWcpIGJ1ZmZlcnMuCisJCSAqLworCQlmcHJpbnRmKHN0ZGVyciwgIlslIlBSSXVNQVgiXSAiLCAodWludG1heF90KWdldHBpZCgpKTsKKwkJdmZwcmludGYoc3RkZXJyLCBlcnIsIHBhcmFtcyk7CisJCWZwdXRjKCdcbicsIHN0ZGVycik7CisJCWZmbHVzaChzdGRlcnIpOworCX0KK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3N0YXRpYyB2b2lkIGxvZ2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwlsb2dyZXBvcnQoTE9HX0VSUiwgZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIHZvaWQgbG9naW5mbyhjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKwlpZiAoIXZlcmJvc2UpCisJCXJldHVybjsKKwl2YV9zdGFydChwYXJhbXMsIGVycik7CisJbG9ncmVwb3J0KExPR19JTkZPLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7Cit9CisKK3N0YXRpYyB2b2lkIE5PUkVUVVJOIGRhZW1vbl9kaWUoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwlsb2dyZXBvcnQoTE9HX0VSUiwgZXJyLCBwYXJhbXMpOworCWV4aXQoMSk7Cit9CisKK3N0cnVjdCBleHBhbmRfcGF0aF9jb250ZXh0IHsKKwljb25zdCBjaGFyICpkaXJlY3Rvcnk7CisJc3RydWN0IGhvc3RpbmZvICpob3N0aW5mbzsKK307CisKK3N0YXRpYyBzaXplX3QgZXhwYW5kX3BhdGgoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLCB2b2lkICpjdHgpCit7CisJc3RydWN0IGV4cGFuZF9wYXRoX2NvbnRleHQgKmNvbnRleHQgPSBjdHg7CisJc3RydWN0IGhvc3RpbmZvICpoaSA9IGNvbnRleHQtPmhvc3RpbmZvOworCisJc3dpdGNoIChwbGFjZWhvbGRlclswXSkgeworCWNhc2UgJ0gnOgorCQlzdHJidWZfYWRkYnVmKHNiLCAmaGktPmhvc3RuYW1lKTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnQyc6CisJCWlmIChwbGFjZWhvbGRlclsxXSA9PSAnSCcpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGdldF9jYW5vbl9ob3N0bmFtZShoaSkpOworCQkJcmV0dXJuIDI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAnSSc6CisJCWlmIChwbGFjZWhvbGRlclsxXSA9PSAnUCcpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGdldF9pcF9hZGRyZXNzKGhpKSk7CisJCQlyZXR1cm4gMjsKKwkJfQorCQlicmVhazsKKwljYXNlICdQJzoKKwkJc3RyYnVmX2FkZGJ1ZihzYiwgJmhpLT50Y3BfcG9ydCk7CisJCXJldHVybiAxOworCWNhc2UgJ0QnOgorCQlzdHJidWZfYWRkc3RyKHNiLCBjb250ZXh0LT5kaXJlY3RvcnkpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYXRoX29rKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSwgc3RydWN0IGhvc3RpbmZvICpoaSkKK3sKKwlzdGF0aWMgY2hhciBycGF0aFtQQVRIX01BWF07CisJc3RhdGljIGNoYXIgaW50ZXJwX3BhdGhbUEFUSF9NQVhdOworCWNvbnN0IGNoYXIgKnBhdGg7CisJY29uc3QgY2hhciAqZGlyOworCisJZGlyID0gZGlyZWN0b3J5OworCisJaWYgKGRhZW1vbl9hdm9pZF9hbGlhcyhkaXIpKSB7CisJCWxvZ2Vycm9yKCInJXMnOiBhbGlhc2VkIiwgZGlyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCpkaXIgPT0gJ34nKSB7CisJCWlmICghdXNlcl9wYXRoKSB7CisJCQlsb2dlcnJvcigiJyVzJzogVXNlci1wYXRoIG5vdCBhbGxvd2VkIiwgZGlyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWlmICgqdXNlcl9wYXRoKSB7CisJCQkvKiBHb3QgZWl0aGVyICJ+YWxpY2UiIG9yICJ+YWxpY2UvZm9vIjsKKwkJCSAqIHJld3JpdGUgdGhlbSB0byAifmFsaWNlLyVzIiBvcgorCQkJICogIn5hbGljZS8lcy9mb28iLgorCQkJICovCisJCQlpbnQgbmFtbGVuLCByZXN0bGVuID0gc3RybGVuKGRpcik7CisJCQljb25zdCBjaGFyICpzbGFzaCA9IHN0cmNocihkaXIsICcvJyk7CisJCQlpZiAoIXNsYXNoKQorCQkJCXNsYXNoID0gZGlyICsgcmVzdGxlbjsKKwkJCW5hbWxlbiA9IHNsYXNoIC0gZGlyOworCQkJcmVzdGxlbiAtPSBuYW1sZW47CisJCQlsb2dpbmZvKCJ1c2VycGF0aCA8JXM+LCByZXF1ZXN0IDwlcz4sIG5hbWxlbiAlZCwgcmVzdGxlbiAlZCwgc2xhc2ggPCVzPiIsIHVzZXJfcGF0aCwgZGlyLCBuYW1sZW4sIHJlc3RsZW4sIHNsYXNoKTsKKwkJCXNucHJpbnRmKHJwYXRoLCBQQVRIX01BWCwgIiUuKnMvJXMlLipzIiwKKwkJCQkgbmFtbGVuLCBkaXIsIHVzZXJfcGF0aCwgcmVzdGxlbiwgc2xhc2gpOworCQkJZGlyID0gcnBhdGg7CisJCX0KKwl9CisJZWxzZSBpZiAoaW50ZXJwb2xhdGVkX3BhdGggJiYgaGktPnNhd19leHRlbmRlZF9hcmdzKSB7CisJCXN0cnVjdCBzdHJidWYgZXhwYW5kZWRfcGF0aCA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3QgZXhwYW5kX3BhdGhfY29udGV4dCBjb250ZXh0OworCisJCWNvbnRleHQuZGlyZWN0b3J5ID0gZGlyZWN0b3J5OworCQljb250ZXh0Lmhvc3RpbmZvID0gaGk7CisKKwkJaWYgKCpkaXIgIT0gJy8nKSB7CisJCQkvKiBBbGxvdyBvbmx5IGFic29sdXRlICovCisJCQlsb2dlcnJvcigiJyVzJzogTm9uLWFic29sdXRlIHBhdGggZGVuaWVkIChpbnRlcnBvbGF0ZWQtcGF0aCBhY3RpdmUpIiwgZGlyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJc3RyYnVmX2V4cGFuZCgmZXhwYW5kZWRfcGF0aCwgaW50ZXJwb2xhdGVkX3BhdGgsCisJCQkgICAgICBleHBhbmRfcGF0aCwgJmNvbnRleHQpOworCQlzdHJsY3B5KGludGVycF9wYXRoLCBleHBhbmRlZF9wYXRoLmJ1ZiwgUEFUSF9NQVgpOworCQlzdHJidWZfcmVsZWFzZSgmZXhwYW5kZWRfcGF0aCk7CisJCWxvZ2luZm8oIkludGVycG9sYXRlZCBkaXIgJyVzJyIsIGludGVycF9wYXRoKTsKKworCQlkaXIgPSBpbnRlcnBfcGF0aDsKKwl9CisJZWxzZSBpZiAoYmFzZV9wYXRoKSB7CisJCWlmICgqZGlyICE9ICcvJykgeworCQkJLyogQWxsb3cgb25seSBhYnNvbHV0ZSAqLworCQkJbG9nZXJyb3IoIiclcyc6IE5vbi1hYnNvbHV0ZSBwYXRoIGRlbmllZCAoYmFzZS1wYXRoIGFjdGl2ZSkiLCBkaXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJc25wcmludGYocnBhdGgsIFBBVEhfTUFYLCAiJXMlcyIsIGJhc2VfcGF0aCwgZGlyKTsKKwkJZGlyID0gcnBhdGg7CisJfQorCisJcGF0aCA9IGVudGVyX3JlcG8oZGlyLCBzdHJpY3RfcGF0aHMpOworCWlmICghcGF0aCAmJiBiYXNlX3BhdGggJiYgYmFzZV9wYXRoX3JlbGF4ZWQpIHsKKwkJLyoKKwkJICogaWYgd2UgZmFpbCBhbmQgYmFzZV9wYXRoX3JlbGF4ZWQgaXMgZW5hYmxlZCwgdHJ5IHdpdGhvdXQKKwkJICogcHJlZml4aW5nIHRoZSBiYXNlIHBhdGgKKwkJICovCisJCWRpciA9IGRpcmVjdG9yeTsKKwkJcGF0aCA9IGVudGVyX3JlcG8oZGlyLCBzdHJpY3RfcGF0aHMpOworCX0KKworCWlmICghcGF0aCkgeworCQlsb2dlcnJvcigiJyVzJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBnaXQgcmVwb3NpdG9yeSIsIGRpcik7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmICggb2tfcGF0aHMgJiYgKm9rX3BhdGhzICkgeworCQljaGFyICoqcHA7CisJCWludCBwYXRobGVuID0gc3RybGVuKHBhdGgpOworCisJCS8qIFRoZSB2YWxpZGF0aW9uIGlzIGRvbmUgb24gdGhlIHBhdGhzIGFmdGVyIGVudGVyX3JlcG8KKwkJICogYXBwZW5kcyBvcHRpb25hbCB7LmdpdCwuZ2l0Ly5naXR9IGFuZCBmcmllbmRzLCBidXQKKwkJICogaXQgZG9lcyBub3QgdXNlIGdldGN3ZCgpLiAgU28gaWYgeW91ciAvcHViIGlzCisJCSAqIGEgc3ltbGluayB0byAvbW50L3B1YiwgeW91IGNhbiB3aGl0ZWxpc3QgL3B1YiBhbmQKKwkJICogZG8gbm90IGhhdmUgdG8gc2F5IC9tbnQvcHViLgorCQkgKiBEbyBub3Qgc2F5IC9wdWIvLgorCQkgKi8KKwkJZm9yICggcHAgPSBva19wYXRocyA7ICpwcCA7IHBwKysgKSB7CisJCQlpbnQgbGVuID0gc3RybGVuKCpwcCk7CisJCQlpZiAobGVuIDw9IHBhdGhsZW4gJiYKKwkJCSAgICAhbWVtY21wKCpwcCwgcGF0aCwgbGVuKSAmJgorCQkJICAgIChwYXRoW2xlbl0gPT0gJ1wwJyB8fAorCQkJICAgICAoIXN0cmljdF9wYXRocyAmJiBwYXRoW2xlbl0gPT0gJy8nKSkpCisJCQkJcmV0dXJuIHBhdGg7CisJCX0KKwl9CisJZWxzZSB7CisJCS8qIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlICovCisJCWlmICghc3RyaWN0X3BhdGhzKQorCQkJcmV0dXJuIHBhdGg7CisJfQorCisJbG9nZXJyb3IoIiclcyc6IG5vdCBpbiB3aGl0ZWxpc3QiLCBwYXRoKTsKKwlyZXR1cm4gTlVMTDsJCS8qIEZhbGx0aHJvdWdoLiBEZW55IGJ5IGRlZmF1bHQgKi8KK30KKwordHlwZWRlZiBpbnQgKCpkYWVtb25fc2VydmljZV9mbikodm9pZCk7CitzdHJ1Y3QgZGFlbW9uX3NlcnZpY2UgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqY29uZmlnX25hbWU7CisJZGFlbW9uX3NlcnZpY2VfZm4gZm47CisJaW50IGVuYWJsZWQ7CisJaW50IG92ZXJyaWRhYmxlOworfTsKKworc3RhdGljIGludCBkYWVtb25fZXJyb3IoY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICptc2cpCit7CisJaWYgKCFpbmZvcm1hdGl2ZV9lcnJvcnMpCisJCW1zZyA9ICJhY2Nlc3MgZGVuaWVkIG9yIHJlcG9zaXRvcnkgbm90IGV4cG9ydGVkIjsKKwlwYWNrZXRfd3JpdGUoMSwgIkVSUiAlczogJXMiLCBtc2csIGRpcik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYWNjZXNzX2hvb2s7CisKK3N0YXRpYyBpbnQgcnVuX2FjY2Vzc19ob29rKHN0cnVjdCBkYWVtb25fc2VydmljZSAqc2VydmljZSwgY29uc3QgY2hhciAqZGlyLAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IGhvc3RpbmZvICpoaSkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjaGlsZCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmFyZ3ZbOF07CisJY29uc3QgY2hhciAqKmFyZyA9IGFyZ3Y7CisJY2hhciAqZW9sOworCWludCBzZWVuX2Vycm9ycyA9IDA7CisKKwkqYXJnKysgPSBhY2Nlc3NfaG9vazsKKwkqYXJnKysgPSBzZXJ2aWNlLT5uYW1lOworCSphcmcrKyA9IHBhdGg7CisJKmFyZysrID0gaGktPmhvc3RuYW1lLmJ1ZjsKKwkqYXJnKysgPSBnZXRfY2Fub25faG9zdG5hbWUoaGkpOworCSphcmcrKyA9IGdldF9pcF9hZGRyZXNzKGhpKTsKKwkqYXJnKysgPSBoaS0+dGNwX3BvcnQuYnVmOworCSphcmcgPSBOVUxMOworCisJY2hpbGQudXNlX3NoZWxsID0gMTsKKwljaGlsZC5hcmd2ID0gYXJndjsKKwljaGlsZC5ub19zdGRpbiA9IDE7CisJY2hpbGQubm9fc3RkZXJyID0gMTsKKwljaGlsZC5vdXQgPSAtMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmY2hpbGQpKSB7CisJCWxvZ2Vycm9yKCJkYWVtb24gYWNjZXNzIGhvb2sgJyVzJyBmYWlsZWQgdG8gc3RhcnQiLAorCQkJIGFjY2Vzc19ob29rKTsKKwkJZ290byBlcnJvcl9yZXR1cm47CisJfQorCWlmIChzdHJidWZfcmVhZCgmYnVmLCBjaGlsZC5vdXQsIDApIDwgMCkgeworCQlsb2dlcnJvcigiZmFpbGVkIHRvIHJlYWQgZnJvbSBwaXBlIHRvIGRhZW1vbiBhY2Nlc3MgaG9vayAnJXMnIiwKKwkJCSBhY2Nlc3NfaG9vayk7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwkJc2Vlbl9lcnJvcnMgPSAxOworCX0KKwlpZiAoY2xvc2UoY2hpbGQub3V0KSA8IDApIHsKKwkJbG9nZXJyb3IoImZhaWxlZCB0byBjbG9zZSBwaXBlIHRvIGRhZW1vbiBhY2Nlc3MgaG9vayAnJXMnIiwKKwkJCSBhY2Nlc3NfaG9vayk7CisJCXNlZW5fZXJyb3JzID0gMTsKKwl9CisJaWYgKGZpbmlzaF9jb21tYW5kKCZjaGlsZCkpCisJCXNlZW5fZXJyb3JzID0gMTsKKworCWlmICghc2Vlbl9lcnJvcnMpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiAwOworCX0KKworZXJyb3JfcmV0dXJuOgorCXN0cmJ1Zl9sdHJpbSgmYnVmKTsKKwlpZiAoIWJ1Zi5sZW4pCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgInNlcnZpY2UgcmVqZWN0ZWQiKTsKKwllb2wgPSBzdHJjaHIoYnVmLmJ1ZiwgJ1xuJyk7CisJaWYgKGVvbCkKKwkJKmVvbCA9ICdcMCc7CisJZXJybm8gPSBFQUNDRVM7CisJZGFlbW9uX2Vycm9yKGRpciwgYnVmLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHJ1bl9zZXJ2aWNlKGNvbnN0IGNoYXIgKmRpciwgc3RydWN0IGRhZW1vbl9zZXJ2aWNlICpzZXJ2aWNlLAorCQkgICAgICAgc3RydWN0IGhvc3RpbmZvICpoaSkKK3sKKwljb25zdCBjaGFyICpwYXRoOworCWludCBlbmFibGVkID0gc2VydmljZS0+ZW5hYmxlZDsKKwlzdHJ1Y3Qgc3RyYnVmIHZhciA9IFNUUkJVRl9JTklUOworCisJbG9naW5mbygiUmVxdWVzdCAlcyBmb3IgJyVzJyIsIHNlcnZpY2UtPm5hbWUsIGRpcik7CisKKwlpZiAoIWVuYWJsZWQgJiYgIXNlcnZpY2UtPm92ZXJyaWRhYmxlKSB7CisJCWxvZ2Vycm9yKCInJXMnOiBzZXJ2aWNlIG5vdCBlbmFibGVkLiIsIHNlcnZpY2UtPm5hbWUpOworCQllcnJubyA9IEVBQ0NFUzsKKwkJcmV0dXJuIGRhZW1vbl9lcnJvcihkaXIsICJzZXJ2aWNlIG5vdCBlbmFibGVkIik7CisJfQorCisJaWYgKCEocGF0aCA9IHBhdGhfb2soZGlyLCBoaSkpKQorCQlyZXR1cm4gZGFlbW9uX2Vycm9yKGRpciwgIm5vIHN1Y2ggcmVwb3NpdG9yeSIpOworCisJLyoKKwkgKiBTZWN1cml0eSBvbiB0aGUgY2hlYXAuCisJICoKKwkgKiBXZSB3YW50IGEgcmVhZGFibGUgSEVBRCwgdXNhYmxlICJvYmplY3RzIiBkaXJlY3RvcnksIGFuZAorCSAqIGEgImdpdC1kYWVtb24tZXhwb3J0LW9rIiBmbGFnIHRoYXQgc2F5cyB0aGF0IHRoZSBvdGhlciBzaWRlCisJICogaXMgb2sgd2l0aCB1cyBkb2luZyB0aGlzLgorCSAqCisJICogcGF0aF9vaygpIHVzZXMgZW50ZXJfcmVwbygpIGFuZCBkb2VzIHdoaXRlbGlzdCBjaGVja2luZy4KKwkgKiBXZSBvbmx5IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZXBvc2l0b3J5IGlzIGV4cG9ydGVkLgorCSAqLworCisJaWYgKCFleHBvcnRfYWxsX3RyZWVzICYmIGFjY2VzcygiZ2l0LWRhZW1vbi1leHBvcnQtb2siLCBGX09LKSkgeworCQlsb2dlcnJvcigiJyVzJzogcmVwb3NpdG9yeSBub3QgZXhwb3J0ZWQuIiwgcGF0aCk7CisJCWVycm5vID0gRUFDQ0VTOworCQlyZXR1cm4gZGFlbW9uX2Vycm9yKGRpciwgInJlcG9zaXRvcnkgbm90IGV4cG9ydGVkIik7CisJfQorCisJaWYgKHNlcnZpY2UtPm92ZXJyaWRhYmxlKSB7CisJCXN0cmJ1Zl9hZGRmKCZ2YXIsICJkYWVtb24uJXMiLCBzZXJ2aWNlLT5jb25maWdfbmFtZSk7CisJCWdpdF9jb25maWdfZ2V0X2Jvb2wodmFyLmJ1ZiwgJmVuYWJsZWQpOworCQlzdHJidWZfcmVsZWFzZSgmdmFyKTsKKwl9CisJaWYgKCFlbmFibGVkKSB7CisJCWxvZ2Vycm9yKCInJXMnOiBzZXJ2aWNlIG5vdCBlbmFibGVkIGZvciAnJXMnIiwKKwkJCSBzZXJ2aWNlLT5uYW1lLCBwYXRoKTsKKwkJZXJybm8gPSBFQUNDRVM7CisJCXJldHVybiBkYWVtb25fZXJyb3IoZGlyLCAic2VydmljZSBub3QgZW5hYmxlZCIpOworCX0KKworCS8qCisJICogT3B0aW9uYWxseSwgYSBob29rIGNhbiBjaG9vc2UgdG8gZGVueSBhY2Nlc3MgdG8gdGhlCisJICogcmVwb3NpdG9yeSBkZXBlbmRpbmcgb24gdGhlIHBoYXNlIG9mIHRoZSBtb29uLgorCSAqLworCWlmIChhY2Nlc3NfaG9vayAmJiBydW5fYWNjZXNzX2hvb2soc2VydmljZSwgZGlyLCBwYXRoLCBoaSkpCisJCXJldHVybiAtMTsKKworCS8qCisJICogV2UnbGwgaWdub3JlIFNJR1RFUk0gZnJvbSBub3cgb24sIHdlIGhhdmUgYQorCSAqIGdvb2QgY2xpZW50LgorCSAqLworCXNpZ25hbChTSUdURVJNLCBTSUdfSUdOKTsKKworCXJldHVybiBzZXJ2aWNlLT5mbigpOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3RvX2xvZyhpbnQgZmQpCit7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqZnA7CisKKwlmcCA9IGZkb3BlbihmZCwgInIiKTsKKwlpZiAoZnAgPT0gTlVMTCkgeworCQlsb2dlcnJvcigiZmRvcGVuIG9mIGVycm9yIGNoYW5uZWwgZmFpbGVkIik7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgZnAsICdcbicpICE9IEVPRikgeworCQlsb2dlcnJvcigiJXMiLCBsaW5lLmJ1Zik7CisJCXN0cmJ1Zl9zZXRsZW4oJmxpbmUsIDApOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwlmY2xvc2UoZnApOworfQorCitzdGF0aWMgaW50IHJ1bl9zZXJ2aWNlX2NvbW1hbmQoY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJY2xkLmFyZ3YgPSBhcmd2OworCWNsZC5naXRfY21kID0gMTsKKwljbGQuZXJyID0gLTE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNsZCkpCisJCXJldHVybiAtMTsKKworCWNsb3NlKDApOworCWNsb3NlKDEpOworCisJY29weV90b19sb2coY2xkLmVycik7CisKKwlyZXR1cm4gZmluaXNoX2NvbW1hbmQoJmNsZCk7Cit9CisKK3N0YXRpYyBpbnQgdXBsb2FkX3BhY2sodm9pZCkKK3sKKwkvKiBUaW1lb3V0IGFzIHN0cmluZyAqLworCWNoYXIgdGltZW91dF9idWZbNjRdOworCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgInVwbG9hZC1wYWNrIiwgIi0tc3RyaWN0IiwgTlVMTCwgIi4iLCBOVUxMIH07CisKKwlhcmd2WzJdID0gdGltZW91dF9idWY7CisKKwlzbnByaW50Zih0aW1lb3V0X2J1Ziwgc2l6ZW9mIHRpbWVvdXRfYnVmLCAiLS10aW1lb3V0PSV1IiwgdGltZW91dCk7CisJcmV0dXJuIHJ1bl9zZXJ2aWNlX2NvbW1hbmQoYXJndik7Cit9CisKK3N0YXRpYyBpbnQgdXBsb2FkX2FyY2hpdmUodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqYXJndltdID0geyAidXBsb2FkLWFyY2hpdmUiLCAiLiIsIE5VTEwgfTsKKwlyZXR1cm4gcnVuX3NlcnZpY2VfY29tbWFuZChhcmd2KTsKK30KKworc3RhdGljIGludCByZWNlaXZlX3BhY2sodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqYXJndltdID0geyAicmVjZWl2ZS1wYWNrIiwgIi4iLCBOVUxMIH07CisJcmV0dXJuIHJ1bl9zZXJ2aWNlX2NvbW1hbmQoYXJndik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGFlbW9uX3NlcnZpY2UgZGFlbW9uX3NlcnZpY2VbXSA9IHsKKwl7ICJ1cGxvYWQtYXJjaGl2ZSIsICJ1cGxvYWRhcmNoIiwgdXBsb2FkX2FyY2hpdmUsIDAsIDEgfSwKKwl7ICJ1cGxvYWQtcGFjayIsICJ1cGxvYWRwYWNrIiwgdXBsb2FkX3BhY2ssIDEsIDEgfSwKKwl7ICJyZWNlaXZlLXBhY2siLCAicmVjZWl2ZXBhY2siLCByZWNlaXZlX3BhY2ssIDAsIDEgfSwKK307CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9zZXJ2aWNlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBlbmEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGFlbW9uX3NlcnZpY2UpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoZGFlbW9uX3NlcnZpY2VbaV0ubmFtZSwgbmFtZSkpIHsKKwkJCWRhZW1vbl9zZXJ2aWNlW2ldLmVuYWJsZWQgPSBlbmE7CisJCQlyZXR1cm47CisJCX0KKwl9CisJZGllKCJObyBzdWNoIHNlcnZpY2UgJXMiLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgbWFrZV9zZXJ2aWNlX292ZXJyaWRhYmxlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBlbmEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGFlbW9uX3NlcnZpY2UpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoZGFlbW9uX3NlcnZpY2VbaV0ubmFtZSwgbmFtZSkpIHsKKwkJCWRhZW1vbl9zZXJ2aWNlW2ldLm92ZXJyaWRhYmxlID0gZW5hOworCQkJcmV0dXJuOworCQl9CisJfQorCWRpZSgiTm8gc3VjaCBzZXJ2aWNlICVzIiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2hvc3RfYW5kX3BvcnQoY2hhciAqaG9zdHBvcnQsIGNoYXIgKipob3N0LAorCWNoYXIgKipwb3J0KQoreworCWlmICgqaG9zdHBvcnQgPT0gJ1snKSB7CisJCWNoYXIgKmVuZDsKKworCQllbmQgPSBzdHJjaHIoaG9zdHBvcnQsICddJyk7CisJCWlmICghZW5kKQorCQkJZGllKCJJbnZhbGlkIHJlcXVlc3QgKCdbJyB3aXRob3V0ICddJykiKTsKKwkJKmVuZCA9ICdcMCc7CisJCSpob3N0ID0gaG9zdHBvcnQgKyAxOworCQlpZiAoIWVuZFsxXSkKKwkJCSpwb3J0ID0gTlVMTDsKKwkJZWxzZSBpZiAoZW5kWzFdID09ICc6JykKKwkJCSpwb3J0ID0gZW5kICsgMjsKKwkJZWxzZQorCQkJZGllKCJHYXJiYWdlIGFmdGVyIGVuZCBvZiBob3N0IHBhcnQiKTsKKwl9IGVsc2UgeworCQkqaG9zdCA9IGhvc3Rwb3J0OworCQkqcG9ydCA9IHN0cnJjaHIoaG9zdHBvcnQsICc6Jyk7CisJCWlmICgqcG9ydCkgeworCQkJKipwb3J0ID0gJ1wwJzsKKwkJCSsrKnBvcnQ7CisJCX0KKwl9Cit9CisKKy8qCisgKiBTYW5pdGl6ZSBhIHN0cmluZyBmcm9tIHRoZSBjbGllbnQgc28gdGhhdCBpdCdzIE9LIHRvIGJlIGluc2VydGVkIGludG8gYQorICogZmlsZXN5c3RlbSBwYXRoLiBTcGVjaWZpY2FsbHksIHdlIGRpc2FsbG93IHNsYXNoZXMsIHJ1bnMgb2YgIi4uIiwgYW5kCisgKiB0cmFpbGluZyBhbmQgbGVhZGluZyBkb3RzLCB3aGljaCBtZWFucyB0aGF0IHRoZSBjbGllbnQgY2Fubm90IGVzY2FwZQorICogb3VyIGJhc2UgcGF0aCB2aWEgIi4uIiB0cmF2ZXJzYWwuCisgKi8KK3N0YXRpYyB2b2lkIHNhbml0aXplX2NsaWVudChzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNvbnN0IGNoYXIgKmluKQoreworCWZvciAoOyAqaW47IGluKyspIHsKKwkJaWYgKCppbiA9PSAnLycpCisJCQljb250aW51ZTsKKwkJaWYgKCppbiA9PSAnLicgJiYgKCFvdXQtPmxlbiB8fCBvdXQtPmJ1ZltvdXQtPmxlbiAtIDFdID09ICcuJykpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX2FkZGNoKG91dCwgKmluKTsKKwl9CisKKwl3aGlsZSAob3V0LT5sZW4gJiYgb3V0LT5idWZbb3V0LT5sZW4gLSAxXSA9PSAnLicpCisJCXN0cmJ1Zl9zZXRsZW4ob3V0LCBvdXQtPmxlbiAtIDEpOworfQorCisvKgorICogTGlrZSBzYW5pdGl6ZV9jbGllbnQsIGJ1dCB3ZSBhbHNvIHBlcmZvcm0gYW55IGNhbm9uaWNhbGl6YXRpb24KKyAqIHRvIG1ha2UgbGlmZSBlYXNpZXIgb24gdGhlIGFkbWluLgorICovCitzdGF0aWMgdm9pZCBjYW5vbmljYWxpemVfY2xpZW50KHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqaW4pCit7CisJc2FuaXRpemVfY2xpZW50KG91dCwgaW4pOworCXN0cmJ1Zl90b2xvd2VyKG91dCk7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBob3N0IGFzIHN1cHBsaWVkIGJ5IHRoZSBjbGllbnQgY29ubmVjdGlvbi4KKyAqLworc3RhdGljIHZvaWQgcGFyc2VfaG9zdF9hcmcoc3RydWN0IGhvc3RpbmZvICpoaSwgY2hhciAqZXh0cmFfYXJncywgaW50IGJ1ZmxlbikKK3sKKwljaGFyICp2YWw7CisJaW50IHZhbGxlbjsKKwljaGFyICplbmQgPSBleHRyYV9hcmdzICsgYnVmbGVuOworCisJaWYgKGV4dHJhX2FyZ3MgPCBlbmQgJiYgKmV4dHJhX2FyZ3MpIHsKKwkJaGktPnNhd19leHRlbmRlZF9hcmdzID0gMTsKKwkJaWYgKHN0cm5jYXNlY21wKCJob3N0PSIsIGV4dHJhX2FyZ3MsIDUpID09IDApIHsKKwkJCXZhbCA9IGV4dHJhX2FyZ3MgKyA1OworCQkJdmFsbGVuID0gc3RybGVuKHZhbCkgKyAxOworCQkJaWYgKCp2YWwpIHsKKwkJCQkvKiBTcGxpdCA8aG9zdD46PHBvcnQ+IGF0IGNvbG9uLiAqLworCQkJCWNoYXIgKmhvc3Q7CisJCQkJY2hhciAqcG9ydDsKKwkJCQlwYXJzZV9ob3N0X2FuZF9wb3J0KHZhbCwgJmhvc3QsICZwb3J0KTsKKwkJCQlpZiAocG9ydCkKKwkJCQkJc2FuaXRpemVfY2xpZW50KCZoaS0+dGNwX3BvcnQsIHBvcnQpOworCQkJCWNhbm9uaWNhbGl6ZV9jbGllbnQoJmhpLT5ob3N0bmFtZSwgaG9zdCk7CisJCQkJaGktPmhvc3RuYW1lX2xvb2t1cF9kb25lID0gMDsKKwkJCX0KKworCQkJLyogT24gdG8gdGhlIG5leHQgb25lICovCisJCQlleHRyYV9hcmdzID0gdmFsICsgdmFsbGVuOworCQl9CisJCWlmIChleHRyYV9hcmdzIDwgZW5kICYmICpleHRyYV9hcmdzKQorCQkJZGllKCJJbnZhbGlkIHJlcXVlc3QiKTsKKwl9Cit9CisKKy8qCisgKiBMb2NhdGUgY2Fub25pY2FsIGhvc3RuYW1lIGFuZCBpdHMgSVAgYWRkcmVzcy4KKyAqLworc3RhdGljIHZvaWQgbG9va3VwX2hvc3RuYW1lKHN0cnVjdCBob3N0aW5mbyAqaGkpCit7CisJaWYgKCFoaS0+aG9zdG5hbWVfbG9va3VwX2RvbmUgJiYgaGktPmhvc3RuYW1lLmxlbikgeworI2lmbmRlZiBOT19JUFY2CisJCXN0cnVjdCBhZGRyaW5mbyBoaW50czsKKwkJc3RydWN0IGFkZHJpbmZvICphaTsKKwkJaW50IGdhaTsKKwkJc3RhdGljIGNoYXIgYWRkcmJ1ZltIT1NUX05BTUVfTUFYICsgMV07CisKKwkJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisJCWhpbnRzLmFpX2ZsYWdzID0gQUlfQ0FOT05OQU1FOworCisJCWdhaSA9IGdldGFkZHJpbmZvKGhpLT5ob3N0bmFtZS5idWYsIE5VTEwsICZoaW50cywgJmFpKTsKKwkJaWYgKCFnYWkpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luX2FkZHIgPSAodm9pZCAqKWFpLT5haV9hZGRyOworCisJCQlpbmV0X250b3AoQUZfSU5FVCwgJnNpbl9hZGRyLT5zaW5fYWRkciwKKwkJCQkgIGFkZHJidWYsIHNpemVvZihhZGRyYnVmKSk7CisJCQlzdHJidWZfYWRkc3RyKCZoaS0+aXBfYWRkcmVzcywgYWRkcmJ1Zik7CisKKwkJCWlmIChhaS0+YWlfY2Fub25uYW1lKQorCQkJCXNhbml0aXplX2NsaWVudCgmaGktPmNhbm9uX2hvc3RuYW1lLAorCQkJCQkJYWktPmFpX2Nhbm9ubmFtZSk7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZGJ1ZigmaGktPmNhbm9uX2hvc3RuYW1lLAorCQkJCQkgICAgICAmaGktPmlwX2FkZHJlc3MpOworCisJCQlmcmVlYWRkcmluZm8oYWkpOworCQl9CisjZWxzZQorCQlzdHJ1Y3QgaG9zdGVudCAqaGVudDsKKwkJc3RydWN0IHNvY2thZGRyX2luIHNhOworCQljaGFyICoqYXA7CisJCXN0YXRpYyBjaGFyIGFkZHJidWZbSE9TVF9OQU1FX01BWCArIDFdOworCisJCWhlbnQgPSBnZXRob3N0YnluYW1lKGhpLT5ob3N0bmFtZS5idWYpOworCQlpZiAoaGVudCkgeworCQkJYXAgPSBoZW50LT5oX2FkZHJfbGlzdDsKKwkJCW1lbXNldCgmc2EsIDAsIHNpemVvZiBzYSk7CisJCQlzYS5zaW5fZmFtaWx5ID0gaGVudC0+aF9hZGRydHlwZTsKKwkJCXNhLnNpbl9wb3J0ID0gaHRvbnMoMCk7CisJCQltZW1jcHkoJnNhLnNpbl9hZGRyLCAqYXAsIGhlbnQtPmhfbGVuZ3RoKTsKKworCQkJaW5ldF9udG9wKGhlbnQtPmhfYWRkcnR5cGUsICZzYS5zaW5fYWRkciwKKwkJCQkgIGFkZHJidWYsIHNpemVvZihhZGRyYnVmKSk7CisKKwkJCXNhbml0aXplX2NsaWVudCgmaGktPmNhbm9uX2hvc3RuYW1lLCBoZW50LT5oX25hbWUpOworCQkJc3RyYnVmX2FkZHN0cigmaGktPmlwX2FkZHJlc3MsIGFkZHJidWYpOworCQl9CisjZW5kaWYKKwkJaGktPmhvc3RuYW1lX2xvb2t1cF9kb25lID0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhvc3RpbmZvX2luaXQoc3RydWN0IGhvc3RpbmZvICpoaSkKK3sKKwltZW1zZXQoaGksIDAsIHNpemVvZigqaGkpKTsKKwlzdHJidWZfaW5pdCgmaGktPmhvc3RuYW1lLCAwKTsKKwlzdHJidWZfaW5pdCgmaGktPmNhbm9uX2hvc3RuYW1lLCAwKTsKKwlzdHJidWZfaW5pdCgmaGktPmlwX2FkZHJlc3MsIDApOworCXN0cmJ1Zl9pbml0KCZoaS0+dGNwX3BvcnQsIDApOworfQorCitzdGF0aWMgdm9pZCBob3N0aW5mb19jbGVhcihzdHJ1Y3QgaG9zdGluZm8gKmhpKQoreworCXN0cmJ1Zl9yZWxlYXNlKCZoaS0+aG9zdG5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZoaS0+Y2Fub25faG9zdG5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZoaS0+aXBfYWRkcmVzcyk7CisJc3RyYnVmX3JlbGVhc2UoJmhpLT50Y3BfcG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgZXhlY3V0ZSh2b2lkKQoreworCWNoYXIgKmxpbmUgPSBwYWNrZXRfYnVmZmVyOworCWludCBwa3RsZW4sIGxlbiwgaTsKKwljaGFyICphZGRyID0gZ2V0ZW52KCJSRU1PVEVfQUREUiIpLCAqcG9ydCA9IGdldGVudigiUkVNT1RFX1BPUlQiKTsKKwlzdHJ1Y3QgaG9zdGluZm8gaGk7CisKKwlob3N0aW5mb19pbml0KCZoaSk7CisKKwlpZiAoYWRkcikKKwkJbG9naW5mbygiQ29ubmVjdGlvbiBmcm9tICVzOiVzIiwgYWRkciwgcG9ydCk7CisKKwlhbGFybShpbml0X3RpbWVvdXQgPyBpbml0X3RpbWVvdXQgOiB0aW1lb3V0KTsKKwlwa3RsZW4gPSBwYWNrZXRfcmVhZCgwLCBOVUxMLCBOVUxMLCBwYWNrZXRfYnVmZmVyLCBzaXplb2YocGFja2V0X2J1ZmZlciksIDApOworCWFsYXJtKDApOworCisJbGVuID0gc3RybGVuKGxpbmUpOworCWlmIChwa3RsZW4gIT0gbGVuKQorCQlsb2dpbmZvKCJFeHRlbmRlZCBhdHRyaWJ1dGVzICglZCBieXRlcykgZXhpc3QgPCUuKnM+IiwKKwkJCShpbnQpIHBrdGxlbiAtIGxlbiwKKwkJCShpbnQpIHBrdGxlbiAtIGxlbiwgbGluZSArIGxlbiArIDEpOworCWlmIChsZW4gJiYgbGluZVtsZW4tMV0gPT0gJ1xuJykgeworCQlsaW5lWy0tbGVuXSA9IDA7CisJCXBrdGxlbi0tOworCX0KKworCWlmIChsZW4gIT0gcGt0bGVuKQorCQlwYXJzZV9ob3N0X2FyZygmaGksIGxpbmUgKyBsZW4gKyAxLCBwa3RsZW4gLSBsZW4gLSAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhZW1vbl9zZXJ2aWNlKTsgaSsrKSB7CisJCXN0cnVjdCBkYWVtb25fc2VydmljZSAqcyA9ICYoZGFlbW9uX3NlcnZpY2VbaV0pOworCQljb25zdCBjaGFyICphcmc7CisKKwkJaWYgKHNraXBfcHJlZml4KGxpbmUsICJnaXQtIiwgJmFyZykgJiYKKwkJICAgIHNraXBfcHJlZml4KGFyZywgcy0+bmFtZSwgJmFyZykgJiYKKwkJICAgICphcmcrKyA9PSAnICcpIHsKKwkJCS8qCisJCQkgKiBOb3RlOiBUaGUgZGlyZWN0b3J5IGhlcmUgaXMgcHJvYmFibHkgY29udGV4dCBzZW5zaXRpdmUsCisJCQkgKiBhbmQgbWlnaHQgZGVwZW5kIG9uIHRoZSBhY3R1YWwgc2VydmljZSBiZWluZyBwZXJmb3JtZWQuCisJCQkgKi8KKwkJCWludCByYyA9IHJ1bl9zZXJ2aWNlKGFyZywgcywgJmhpKTsKKwkJCWhvc3RpbmZvX2NsZWFyKCZoaSk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwlob3N0aW5mb19jbGVhcigmaGkpOworCWxvZ2Vycm9yKCJQcm90b2NvbCBlcnJvcjogJyVzJyIsIGxpbmUpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBhZGRyY21wKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpzMSwKKyAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqczIpCit7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTEgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikgczE7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTIgPSAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikgczI7CisKKwlpZiAoc2ExLT5zYV9mYW1pbHkgIT0gc2EyLT5zYV9mYW1pbHkpCisJCXJldHVybiBzYTEtPnNhX2ZhbWlseSAtIHNhMi0+c2FfZmFtaWx5OworCWlmIChzYTEtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQlyZXR1cm4gbWVtY21wKCYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXMxKS0+c2luX2FkZHIsCisJCSAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzMiktPnNpbl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisjaWZuZGVmIE5PX0lQVjYKKwlpZiAoc2ExLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisJCXJldHVybiBtZW1jbXAoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXMxKS0+c2luNl9hZGRyLAorCQkgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKXMyKS0+c2luNl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF4X2Nvbm5lY3Rpb25zID0gMzI7CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGl2ZV9jaGlsZHJlbjsKKworc3RhdGljIHN0cnVjdCBjaGlsZCB7CisJc3RydWN0IGNoaWxkICpuZXh0OworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNsZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhZGRyZXNzOworfSAqZmlyc3Rib3JuOworCitzdGF0aWMgdm9pZCBhZGRfY2hpbGQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNsZCwgc3RydWN0IHNvY2thZGRyICphZGRyLCBzb2NrbGVuX3QgYWRkcmxlbikKK3sKKwlzdHJ1Y3QgY2hpbGQgKm5ld2Jvcm4sICoqY3JhZGxlOworCisJbmV3Ym9ybiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpuZXdib3JuKSk7CisJbGl2ZV9jaGlsZHJlbisrOworCW1lbWNweSgmbmV3Ym9ybi0+Y2xkLCBjbGQsIHNpemVvZigqY2xkKSk7CisJbWVtY3B5KCZuZXdib3JuLT5hZGRyZXNzLCBhZGRyLCBhZGRybGVuKTsKKwlmb3IgKGNyYWRsZSA9ICZmaXJzdGJvcm47ICpjcmFkbGU7IGNyYWRsZSA9ICYoKmNyYWRsZSktPm5leHQpCisJCWlmICghYWRkcmNtcCgmKCpjcmFkbGUpLT5hZGRyZXNzLCAmbmV3Ym9ybi0+YWRkcmVzcykpCisJCQlicmVhazsKKwluZXdib3JuLT5uZXh0ID0gKmNyYWRsZTsKKwkqY3JhZGxlID0gbmV3Ym9ybjsKK30KKworLyoKKyAqIFRoaXMgZ2V0cyBjYWxsZWQgaWYgdGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyBncm93cworICogcGFzdCAibWF4X2Nvbm5lY3Rpb25zIi4KKyAqCisgKiBXZSBraWxsIHRoZSBuZXdlc3QgY29ubmVjdGlvbiBmcm9tIGEgZHVwbGljYXRlIElQLgorICovCitzdGF0aWMgdm9pZCBraWxsX3NvbWVfY2hpbGQodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgY2hpbGQgKmJsYW5rZXQsICpuZXh0OworCisJaWYgKCEoYmxhbmtldCA9IGZpcnN0Ym9ybikpCisJCXJldHVybjsKKworCWZvciAoOyAobmV4dCA9IGJsYW5rZXQtPm5leHQpOyBibGFua2V0ID0gbmV4dCkKKwkJaWYgKCFhZGRyY21wKCZibGFua2V0LT5hZGRyZXNzLCAmbmV4dC0+YWRkcmVzcykpIHsKKwkJCWtpbGwoYmxhbmtldC0+Y2xkLnBpZCwgU0lHVEVSTSk7CisJCQlicmVhazsKKwkJfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19kZWFkX2NoaWxkcmVuKHZvaWQpCit7CisJaW50IHN0YXR1czsKKwlwaWRfdCBwaWQ7CisKKwlzdHJ1Y3QgY2hpbGQgKipjcmFkbGUsICpibGFua2V0OworCWZvciAoY3JhZGxlID0gJmZpcnN0Ym9ybjsgKGJsYW5rZXQgPSAqY3JhZGxlKTspCisJCWlmICgocGlkID0gd2FpdHBpZChibGFua2V0LT5jbGQucGlkLCAmc3RhdHVzLCBXTk9IQU5HKSkgPiAxKSB7CisJCQljb25zdCBjaGFyICpkZWFkID0gIiI7CisJCQlpZiAoc3RhdHVzKQorCQkJCWRlYWQgPSAiICh3aXRoIGVycm9yKSI7CisJCQlsb2dpbmZvKCJbJSJQUkl1TUFYIl0gRGlzY29ubmVjdGVkJXMiLCAodWludG1heF90KXBpZCwgZGVhZCk7CisKKwkJCS8qIHJlbW92ZSB0aGUgY2hpbGQgKi8KKwkJCSpjcmFkbGUgPSBibGFua2V0LT5uZXh0OworCQkJbGl2ZV9jaGlsZHJlbi0tOworCQkJZnJlZShibGFua2V0KTsKKwkJfSBlbHNlCisJCQljcmFkbGUgPSAmYmxhbmtldC0+bmV4dDsKK30KKworc3RhdGljIGNoYXIgKipjbGRfYXJndjsKK3N0YXRpYyB2b2lkIGhhbmRsZShpbnQgaW5jb21pbmcsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFkZHJsZW4pCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJaWYgKG1heF9jb25uZWN0aW9ucyAmJiBsaXZlX2NoaWxkcmVuID49IG1heF9jb25uZWN0aW9ucykgeworCQlraWxsX3NvbWVfY2hpbGQoKTsKKwkJc2xlZXAoMSk7ICAvKiBnaXZlIGl0IHNvbWUgdGltZSB0byBkaWUgKi8KKwkJY2hlY2tfZGVhZF9jaGlsZHJlbigpOworCQlpZiAobGl2ZV9jaGlsZHJlbiA+PSBtYXhfY29ubmVjdGlvbnMpIHsKKwkJCWNsb3NlKGluY29taW5nKTsKKwkJCWxvZ2Vycm9yKCJUb28gbWFueSBjaGlsZHJlbiwgZHJvcHBpbmcgY29ubmVjdGlvbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCWNoYXIgYnVmWzEyOF0gPSAiIjsKKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYWRkciA9ICh2b2lkICopIGFkZHI7CisJCWluZXRfbnRvcChhZGRyLT5zYV9mYW1pbHksICZzaW5fYWRkci0+c2luX2FkZHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjbGQuZW52X2FycmF5LCAiUkVNT1RFX0FERFI9JXMiLCBidWYpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjbGQuZW52X2FycmF5LCAiUkVNT1RFX1BPUlQ9JWQiLAorCQkJCSBudG9ocyhzaW5fYWRkci0+c2luX3BvcnQpKTsKKyNpZm5kZWYgTk9fSVBWNgorCX0gZWxzZSBpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWNoYXIgYnVmWzEyOF0gPSAiIjsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNl9hZGRyID0gKHZvaWQgKikgYWRkcjsKKwkJaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNl9hZGRyLT5zaW42X2FkZHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCQlhcmd2X2FycmF5X3B1c2hmKCZjbGQuZW52X2FycmF5LCAiUkVNT1RFX0FERFI9WyVzXSIsIGJ1Zik7CisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNsZC5lbnZfYXJyYXksICJSRU1PVEVfUE9SVD0lZCIsCisJCQkJIG50b2hzKHNpbjZfYWRkci0+c2luNl9wb3J0KSk7CisjZW5kaWYKKwl9CisKKwljbGQuYXJndiA9IChjb25zdCBjaGFyICoqKWNsZF9hcmd2OworCWNsZC5pbiA9IGluY29taW5nOworCWNsZC5vdXQgPSBkdXAoaW5jb21pbmcpOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNsZCkpCisJCWxvZ2Vycm9yKCJ1bmFibGUgdG8gZm9yayIpOworCWVsc2UKKwkJYWRkX2NoaWxkKCZjbGQsIGFkZHIsIGFkZHJsZW4pOworfQorCitzdGF0aWMgdm9pZCBjaGlsZF9oYW5kbGVyKGludCBzaWdubykKK3sKKwkvKgorCSAqIE90aGVyd2lzZSBlbXB0eSBoYW5kbGVyIGJlY2F1c2Ugc3lzdGVtY2FsbHMgd2lsbCBnZXQgaW50ZXJydXB0ZWQKKwkgKiB1cG9uIHNpZ25hbCByZWNlaXB0CisJICogU3lzViBuZWVkcyB0aGUgaGFuZGxlciB0byBiZSByZWFybWVkCisJICovCisJc2lnbmFsKFNJR0NITEQsIGNoaWxkX2hhbmRsZXIpOworfQorCitzdGF0aWMgaW50IHNldF9yZXVzZV9hZGRyKGludCBzb2NrZmQpCit7CisJaW50IG9uID0gMTsKKworCWlmICghcmV1c2VhZGRyKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc2V0c29ja29wdChzb2NrZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKKwkJCSAgJm9uLCBzaXplb2Yob24pKTsKK30KKworc3RydWN0IHNvY2tldGxpc3QgeworCWludCAqbGlzdDsKKwlzaXplX3QgbnI7CisJc2l6ZV90IGFsbG9jOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmlwMnN0cihpbnQgZmFtaWx5LCBzdHJ1Y3Qgc29ja2FkZHIgKnNpbiwgc29ja2xlbl90IGxlbikKK3sKKyNpZmRlZiBOT19JUFY2CisJc3RhdGljIGNoYXIgaXBbSU5FVF9BRERSU1RSTEVOXTsKKyNlbHNlCisJc3RhdGljIGNoYXIgaXBbSU5FVDZfQUREUlNUUkxFTl07CisjZW5kaWYKKworCXN3aXRjaCAoZmFtaWx5KSB7CisjaWZuZGVmIE5PX0lQVjYKKwljYXNlIEFGX0lORVQ2OgorCQlpbmV0X250b3AoZmFtaWx5LCAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42KilzaW4pLT5zaW42X2FkZHIsIGlwLCBsZW4pOworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgQUZfSU5FVDoKKwkJaW5ldF9udG9wKGZhbWlseSwgJigoc3RydWN0IHNvY2thZGRyX2luKilzaW4pLT5zaW5fYWRkciwgaXAsIGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXhzbnByaW50ZihpcCwgc2l6ZW9mKGlwKSwgIjx1bmtub3duPiIpOworCX0KKwlyZXR1cm4gaXA7Cit9CisKKyNpZm5kZWYgTk9fSVBWNgorCitzdGF0aWMgaW50IHNldHVwX25hbWVkX3NvY2soY2hhciAqbGlzdGVuX2FkZHIsIGludCBsaXN0ZW5fcG9ydCwgc3RydWN0IHNvY2tldGxpc3QgKnNvY2tsaXN0KQoreworCWludCBzb2NrbnVtID0gMDsKKwljaGFyIHBidWZbTklfTUFYU0VSVl07CisJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWkwLCAqYWk7CisJaW50IGdhaTsKKwlsb25nIGZsYWdzOworCisJeHNucHJpbnRmKHBidWYsIHNpemVvZihwYnVmKSwgIiVkIiwgbGlzdGVuX3BvcnQpOworCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCWhpbnRzLmFpX2ZhbWlseSA9IEFGX1VOU1BFQzsKKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworCWhpbnRzLmFpX3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CisJaGludHMuYWlfZmxhZ3MgPSBBSV9QQVNTSVZFOworCisJZ2FpID0gZ2V0YWRkcmluZm8obGlzdGVuX2FkZHIsIHBidWYsICZoaW50cywgJmFpMCk7CisJaWYgKGdhaSkgeworCQlsb2dlcnJvcigiZ2V0YWRkcmluZm8oKSBmb3IgJXMgZmFpbGVkOiAlcyIsIGxpc3Rlbl9hZGRyLCBnYWlfc3RyZXJyb3IoZ2FpKSk7CisJCXJldHVybiAwOworCX0KKworCWZvciAoYWkgPSBhaTA7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7CisJCWludCBzb2NrZmQ7CisKKwkJc29ja2ZkID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwgYWktPmFpX3Byb3RvY29sKTsKKwkJaWYgKHNvY2tmZCA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKHNvY2tmZCA+PSBGRF9TRVRTSVpFKSB7CisJCQlsb2dlcnJvcigiU29ja2V0IGRlc2NyaXB0b3IgdG9vIGxhcmdlIik7CisJCQljbG9zZShzb2NrZmQpOworCQkJY29udGludWU7CisJCX0KKworI2lmZGVmIElQVjZfVjZPTkxZCisJCWlmIChhaS0+YWlfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQlpbnQgb24gPSAxOworCQkJc2V0c29ja29wdChzb2NrZmQsIElQUFJPVE9fSVBWNiwgSVBWNl9WNk9OTFksCisJCQkJICAgJm9uLCBzaXplb2Yob24pKTsKKwkJCS8qIE5vdGU6IGVycm9yIGlzIG5vdCBmYXRhbCAqLworCQl9CisjZW5kaWYKKworCQlpZiAoc2V0X3JldXNlX2FkZHIoc29ja2ZkKSkgeworCQkJbG9nZXJyb3IoIkNvdWxkIG5vdCBzZXQgU09fUkVVU0VBRERSOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQljbG9zZShzb2NrZmQpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoYmluZChzb2NrZmQsIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwKSB7CisJCQlsb2dlcnJvcigiQ291bGQgbm90IGJpbmQgdG8gJXM6ICVzIiwKKwkJCQkgaXAyc3RyKGFpLT5haV9mYW1pbHksIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiksCisJCQkJIHN0cmVycm9yKGVycm5vKSk7CisJCQljbG9zZShzb2NrZmQpOworCQkJY29udGludWU7CS8qIG5vdCBmYXRhbCAqLworCQl9CisJCWlmIChsaXN0ZW4oc29ja2ZkLCA1KSA8IDApIHsKKwkJCWxvZ2Vycm9yKCJDb3VsZCBub3QgbGlzdGVuIHRvICVzOiAlcyIsCisJCQkJIGlwMnN0cihhaS0+YWlfZmFtaWx5LCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pLAorCQkJCSBzdHJlcnJvcihlcnJubykpOworCQkJY2xvc2Uoc29ja2ZkKTsKKwkJCWNvbnRpbnVlOwkvKiBub3QgZmF0YWwgKi8KKwkJfQorCisJCWZsYWdzID0gZmNudGwoc29ja2ZkLCBGX0dFVEZELCAwKTsKKwkJaWYgKGZsYWdzID49IDApCisJCQlmY250bChzb2NrZmQsIEZfU0VURkQsIGZsYWdzIHwgRkRfQ0xPRVhFQyk7CisKKwkJQUxMT0NfR1JPVyhzb2NrbGlzdC0+bGlzdCwgc29ja2xpc3QtPm5yICsgMSwgc29ja2xpc3QtPmFsbG9jKTsKKwkJc29ja2xpc3QtPmxpc3Rbc29ja2xpc3QtPm5yKytdID0gc29ja2ZkOworCQlzb2NrbnVtKys7CisJfQorCisJZnJlZWFkZHJpbmZvKGFpMCk7CisKKwlyZXR1cm4gc29ja251bTsKK30KKworI2Vsc2UgLyogTk9fSVBWNiAqLworCitzdGF0aWMgaW50IHNldHVwX25hbWVkX3NvY2soY2hhciAqbGlzdGVuX2FkZHIsIGludCBsaXN0ZW5fcG9ydCwgc3RydWN0IHNvY2tldGxpc3QgKnNvY2tsaXN0KQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJaW50IHNvY2tmZDsKKwlsb25nIGZsYWdzOworCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZiBzaW4pOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4uc2luX3BvcnQgPSBodG9ucyhsaXN0ZW5fcG9ydCk7CisKKwlpZiAobGlzdGVuX2FkZHIpIHsKKwkJLyogV2VsbCwgaG9zdCBiZXR0ZXIgYmUgYW4gSVAgYWRkcmVzcyBoZXJlLiAqLworCQlpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGxpc3Rlbl9hZGRyLCAmc2luLnNpbl9hZGRyLnNfYWRkcikgPD0gMCkKKwkJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKwl9CisKKwlzb2NrZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIDApOworCWlmIChzb2NrZmQgPCAwKQorCQlyZXR1cm4gMDsKKworCWlmIChzZXRfcmV1c2VfYWRkcihzb2NrZmQpKSB7CisJCWxvZ2Vycm9yKCJDb3VsZCBub3Qgc2V0IFNPX1JFVVNFQUREUjogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQljbG9zZShzb2NrZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIGJpbmQoc29ja2ZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mIHNpbikgPCAwICkgeworCQlsb2dlcnJvcigiQ291bGQgbm90IGJpbmQgdG8gJXM6ICVzIiwKKwkJCSBpcDJzdHIoQUZfSU5FVCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzaW4pKSwKKwkJCSBzdHJlcnJvcihlcnJubykpOworCQljbG9zZShzb2NrZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobGlzdGVuKHNvY2tmZCwgNSkgPCAwKSB7CisJCWxvZ2Vycm9yKCJDb3VsZCBub3QgbGlzdGVuIHRvICVzOiAlcyIsCisJCQkgaXAyc3RyKEFGX0lORVQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc2luKSksCisJCQkgc3RyZXJyb3IoZXJybm8pKTsKKwkJY2xvc2Uoc29ja2ZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZmxhZ3MgPSBmY250bChzb2NrZmQsIEZfR0VURkQsIDApOworCWlmIChmbGFncyA+PSAwKQorCQlmY250bChzb2NrZmQsIEZfU0VURkQsIGZsYWdzIHwgRkRfQ0xPRVhFQyk7CisKKwlBTExPQ19HUk9XKHNvY2tsaXN0LT5saXN0LCBzb2NrbGlzdC0+bnIgKyAxLCBzb2NrbGlzdC0+YWxsb2MpOworCXNvY2tsaXN0LT5saXN0W3NvY2tsaXN0LT5ucisrXSA9IHNvY2tmZDsKKwlyZXR1cm4gMTsKK30KKworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNvY2tzZXR1cChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3Rlbl9hZGRyLCBpbnQgbGlzdGVuX3BvcnQsIHN0cnVjdCBzb2NrZXRsaXN0ICpzb2NrbGlzdCkKK3sKKwlpZiAoIWxpc3Rlbl9hZGRyLT5ucikKKwkJc2V0dXBfbmFtZWRfc29jayhOVUxMLCBsaXN0ZW5fcG9ydCwgc29ja2xpc3QpOworCWVsc2UgeworCQlpbnQgaSwgc29ja251bTsKKwkJZm9yIChpID0gMDsgaSA8IGxpc3Rlbl9hZGRyLT5ucjsgaSsrKSB7CisJCQlzb2NrbnVtID0gc2V0dXBfbmFtZWRfc29jayhsaXN0ZW5fYWRkci0+aXRlbXNbaV0uc3RyaW5nLAorCQkJCQkJICAgbGlzdGVuX3BvcnQsIHNvY2tsaXN0KTsKKworCQkJaWYgKHNvY2tudW0gPT0gMCkKKwkJCQlsb2dlcnJvcigidW5hYmxlIHRvIGFsbG9jYXRlIGFueSBsaXN0ZW4gc29ja2V0cyBmb3IgaG9zdCAlcyBvbiBwb3J0ICV1IiwKKwkJCQkJIGxpc3Rlbl9hZGRyLT5pdGVtc1tpXS5zdHJpbmcsIGxpc3Rlbl9wb3J0KTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBzZXJ2aWNlX2xvb3Aoc3RydWN0IHNvY2tldGxpc3QgKnNvY2tsaXN0KQoreworCXN0cnVjdCBwb2xsZmQgKnBmZDsKKwlpbnQgaTsKKworCXBmZCA9IHhjYWxsb2Moc29ja2xpc3QtPm5yLCBzaXplb2Yoc3RydWN0IHBvbGxmZCkpOworCisJZm9yIChpID0gMDsgaSA8IHNvY2tsaXN0LT5ucjsgaSsrKSB7CisJCXBmZFtpXS5mZCA9IHNvY2tsaXN0LT5saXN0W2ldOworCQlwZmRbaV0uZXZlbnRzID0gUE9MTElOOworCX0KKworCXNpZ25hbChTSUdDSExELCBjaGlsZF9oYW5kbGVyKTsKKworCWZvciAoOzspIHsKKwkJaW50IGk7CisKKwkJY2hlY2tfZGVhZF9jaGlsZHJlbigpOworCisJCWlmIChwb2xsKHBmZCwgc29ja2xpc3QtPm5yLCAtMSkgPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRUlOVFIpIHsKKwkJCQlsb2dlcnJvcigiUG9sbCBmYWlsZWQsIHJlc3VtaW5nOiAlcyIsCisJCQkJICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlzbGVlcCgxKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHNvY2tsaXN0LT5ucjsgaSsrKSB7CisJCQlpZiAocGZkW2ldLnJldmVudHMgJiBQT0xMSU4pIHsKKwkJCQl1bmlvbiB7CisJCQkJCXN0cnVjdCBzb2NrYWRkciBzYTsKKwkJCQkJc3RydWN0IHNvY2thZGRyX2luIHNhaTsKKyNpZm5kZWYgTk9fSVBWNgorCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNhaTY7CisjZW5kaWYKKwkJCQl9IHNzOworCQkJCXNvY2tsZW5fdCBzc2xlbiA9IHNpemVvZihzcyk7CisJCQkJaW50IGluY29taW5nID0gYWNjZXB0KHBmZFtpXS5mZCwgJnNzLnNhLCAmc3NsZW4pOworCQkJCWlmIChpbmNvbWluZyA8IDApIHsKKwkJCQkJc3dpdGNoIChlcnJubykgeworCQkJCQljYXNlIEVBR0FJTjoKKwkJCQkJY2FzZSBFSU5UUjoKKwkJCQkJY2FzZSBFQ09OTkFCT1JURUQ6CisJCQkJCQljb250aW51ZTsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWRpZV9lcnJubygiYWNjZXB0IHJldHVybmVkIik7CisJCQkJCX0KKwkJCQl9CisJCQkJaGFuZGxlKGluY29taW5nLCAmc3Muc2EsIHNzbGVuKTsKKwkJCX0KKwkJfQorCX0KK30KKworI2lmZGVmIE5PX1BPU0lYX0dPT0RJRVMKKworc3RydWN0IGNyZWRlbnRpYWxzOworCitzdGF0aWMgdm9pZCBkcm9wX3ByaXZpbGVnZXMoc3RydWN0IGNyZWRlbnRpYWxzICpjcmVkKQoreworCS8qIG5vdGhpbmcgKi8KK30KKworc3RhdGljIHN0cnVjdCBjcmVkZW50aWFscyAqcHJlcGFyZV9jcmVkZW50aWFscyhjb25zdCBjaGFyICp1c2VyX25hbWUsCisgICAgY29uc3QgY2hhciAqZ3JvdXBfbmFtZSkKK3sKKwlkaWUoIi0tdXNlciBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTsKK30KKworI2Vsc2UKKworc3RydWN0IGNyZWRlbnRpYWxzIHsKKwlzdHJ1Y3QgcGFzc3dkICpwYXNzOworCWdpZF90IGdpZDsKK307CisKK3N0YXRpYyB2b2lkIGRyb3BfcHJpdmlsZWdlcyhzdHJ1Y3QgY3JlZGVudGlhbHMgKmNyZWQpCit7CisJaWYgKGNyZWQgJiYgKGluaXRncm91cHMoY3JlZC0+cGFzcy0+cHdfbmFtZSwgY3JlZC0+Z2lkKSB8fAorCSAgICBzZXRnaWQgKGNyZWQtPmdpZCkgfHwgc2V0dWlkKGNyZWQtPnBhc3MtPnB3X3VpZCkpKQorCQlkaWUoImNhbm5vdCBkcm9wIHByaXZpbGVnZXMiKTsKK30KKworc3RhdGljIHN0cnVjdCBjcmVkZW50aWFscyAqcHJlcGFyZV9jcmVkZW50aWFscyhjb25zdCBjaGFyICp1c2VyX25hbWUsCisgICAgY29uc3QgY2hhciAqZ3JvdXBfbmFtZSkKK3sKKwlzdGF0aWMgc3RydWN0IGNyZWRlbnRpYWxzIGM7CisKKwljLnBhc3MgPSBnZXRwd25hbSh1c2VyX25hbWUpOworCWlmICghYy5wYXNzKQorCQlkaWUoInVzZXIgbm90IGZvdW5kIC0gJXMiLCB1c2VyX25hbWUpOworCisJaWYgKCFncm91cF9uYW1lKQorCQljLmdpZCA9IGMucGFzcy0+cHdfZ2lkOworCWVsc2UgeworCQlzdHJ1Y3QgZ3JvdXAgKmdyb3VwID0gZ2V0Z3JuYW0oZ3JvdXBfbmFtZSk7CisJCWlmICghZ3JvdXApCisJCQlkaWUoImdyb3VwIG5vdCBmb3VuZCAtICVzIiwgZ3JvdXBfbmFtZSk7CisKKwkJYy5naWQgPSBncm91cC0+Z3JfZ2lkOworCX0KKworCXJldHVybiAmYzsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHNlcnZlKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdGVuX2FkZHIsIGludCBsaXN0ZW5fcG9ydCwKKyAgICBzdHJ1Y3QgY3JlZGVudGlhbHMgKmNyZWQpCit7CisJc3RydWN0IHNvY2tldGxpc3Qgc29ja2xpc3QgPSB7IE5VTEwsIDAsIDAgfTsKKworCXNvY2tzZXR1cChsaXN0ZW5fYWRkciwgbGlzdGVuX3BvcnQsICZzb2NrbGlzdCk7CisJaWYgKHNvY2tsaXN0Lm5yID09IDApCisJCWRpZSgidW5hYmxlIHRvIGFsbG9jYXRlIGFueSBsaXN0ZW4gc29ja2V0cyBvbiBwb3J0ICV1IiwKKwkJICAgIGxpc3Rlbl9wb3J0KTsKKworCWRyb3BfcHJpdmlsZWdlcyhjcmVkKTsKKworCWxvZ2luZm8oIlJlYWR5IHRvIHJ1bWJsZSIpOworCisJcmV0dXJuIHNlcnZpY2VfbG9vcCgmc29ja2xpc3QpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGxpc3Rlbl9wb3J0ID0gMDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdGVuX2FkZHIgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWludCBzZXJ2ZV9tb2RlID0gMCwgaW5ldGRfbW9kZSA9IDA7CisJY29uc3QgY2hhciAqcGlkX2ZpbGUgPSBOVUxMLCAqdXNlcl9uYW1lID0gTlVMTCwgKmdyb3VwX25hbWUgPSBOVUxMOworCWludCBkZXRhY2ggPSAwOworCXN0cnVjdCBjcmVkZW50aWFscyAqY3JlZCA9IE5VTEw7CisJaW50IGk7CisKKwlnaXRfc2V0dXBfZ2V0dGV4dCgpOworCisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY2hhciAqYXJnID0gYXJndltpXTsKKwkJY29uc3QgY2hhciAqdjsKKworCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1saXN0ZW49IiwgJnYpKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmxpc3Rlbl9hZGRyLCB4c3RyZHVwX3RvbG93ZXIodikpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tcG9ydD0iLCAmdikpIHsKKwkJCWNoYXIgKmVuZDsKKwkJCXVuc2lnbmVkIGxvbmcgbjsKKwkJCW4gPSBzdHJ0b3VsKHYsICZlbmQsIDApOworCQkJaWYgKCp2ICYmICEqZW5kKSB7CisJCQkJbGlzdGVuX3BvcnQgPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tc2VydmUiKSkgeworCQkJc2VydmVfbW9kZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWluZXRkIikpIHsKKwkJCWluZXRkX21vZGUgPSAxOworCQkJbG9nX3N5c2xvZyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXZlcmJvc2UiKSkgeworCQkJdmVyYm9zZSA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXN5c2xvZyIpKSB7CisJCQlsb2dfc3lzbG9nID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tZXhwb3J0LWFsbCIpKSB7CisJCQlleHBvcnRfYWxsX3RyZWVzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWFjY2Vzcy1ob29rPSIsICZ2KSkgeworCQkJYWNjZXNzX2hvb2sgPSB2OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tdGltZW91dD0iLCAmdikpIHsKKwkJCXRpbWVvdXQgPSBhdG9pKHYpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0taW5pdC10aW1lb3V0PSIsICZ2KSkgeworCQkJaW5pdF90aW1lb3V0ID0gYXRvaSh2KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLW1heC1jb25uZWN0aW9ucz0iLCAmdikpIHsKKwkJCW1heF9jb25uZWN0aW9ucyA9IGF0b2kodik7CisJCQlpZiAobWF4X2Nvbm5lY3Rpb25zIDwgMCkKKwkJCQltYXhfY29ubmVjdGlvbnMgPSAwOwkgICAgICAgIC8qIHVubGltaXRlZCAqLworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1zdHJpY3QtcGF0aHMiKSkgeworCQkJc3RyaWN0X3BhdGhzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWJhc2UtcGF0aD0iLCAmdikpIHsKKwkJCWJhc2VfcGF0aCA9IHY7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLWJhc2UtcGF0aC1yZWxheGVkIikpIHsKKwkJCWJhc2VfcGF0aF9yZWxheGVkID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWludGVycG9sYXRlZC1wYXRoPSIsICZ2KSkgeworCQkJaW50ZXJwb2xhdGVkX3BhdGggPSB2OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1yZXVzZWFkZHIiKSkgeworCQkJcmV1c2VhZGRyID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tdXNlci1wYXRoIikpIHsKKwkJCXVzZXJfcGF0aCA9ICIiOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tdXNlci1wYXRoPSIsICZ2KSkgeworCQkJdXNlcl9wYXRoID0gdjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLXBpZC1maWxlPSIsICZ2KSkgeworCQkJcGlkX2ZpbGUgPSB2OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1kZXRhY2giKSkgeworCQkJZGV0YWNoID0gMTsKKwkJCWxvZ19zeXNsb2cgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tdXNlcj0iLCAmdikpIHsKKwkJCXVzZXJfbmFtZSA9IHY7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1ncm91cD0iLCAmdikpIHsKKwkJCWdyb3VwX25hbWUgPSB2OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGFyZywgIi0tZW5hYmxlPSIsICZ2KSkgeworCQkJZW5hYmxlX3NlcnZpY2UodiwgMSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1kaXNhYmxlPSIsICZ2KSkgeworCQkJZW5hYmxlX3NlcnZpY2UodiwgMCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1hbGxvdy1vdmVycmlkZT0iLCAmdikpIHsKKwkJCW1ha2Vfc2VydmljZV9vdmVycmlkYWJsZSh2LCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChza2lwX3ByZWZpeChhcmcsICItLWZvcmJpZC1vdmVycmlkZT0iLCAmdikpIHsKKwkJCW1ha2Vfc2VydmljZV9vdmVycmlkYWJsZSh2LCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0taW5mb3JtYXRpdmUtZXJyb3JzIikpIHsKKwkJCWluZm9ybWF0aXZlX2Vycm9ycyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLW5vLWluZm9ybWF0aXZlLWVycm9ycyIpKSB7CisJCQlpbmZvcm1hdGl2ZV9lcnJvcnMgPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS0iKSkgeworCQkJb2tfcGF0aHMgPSAmYXJndltpKzFdOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoYXJnWzBdICE9ICctJykgeworCQkJb2tfcGF0aHMgPSAmYXJndltpXTsKKwkJCWJyZWFrOworCQl9CisKKwkJdXNhZ2UoZGFlbW9uX3VzYWdlKTsKKwl9CisKKwlpZiAobG9nX3N5c2xvZykgeworCQlvcGVubG9nKCJnaXQtZGFlbW9uIiwgTE9HX1BJRCwgTE9HX0RBRU1PTik7CisJCXNldF9kaWVfcm91dGluZShkYWVtb25fZGllKTsKKwl9IGVsc2UKKwkJLyogYXZvaWQgc3BsaXR0aW5nIGEgbWVzc2FnZSBpbiB0aGUgbWlkZGxlICovCisJCXNldHZidWYoc3RkZXJyLCBOVUxMLCBfSU9GQkYsIDQwOTYpOworCisJaWYgKGluZXRkX21vZGUgJiYgKGRldGFjaCB8fCBncm91cF9uYW1lIHx8IHVzZXJfbmFtZSkpCisJCWRpZSgiLS1kZXRhY2gsIC0tdXNlciBhbmQgLS1ncm91cCBhcmUgaW5jb21wYXRpYmxlIHdpdGggLS1pbmV0ZCIpOworCisJaWYgKGluZXRkX21vZGUgJiYgKGxpc3Rlbl9wb3J0IHx8IChsaXN0ZW5fYWRkci5uciA+IDApKSkKKwkJZGllKCItLWxpc3Rlbj0gYW5kIC0tcG9ydD0gYXJlIGluY29tcGF0aWJsZSB3aXRoIC0taW5ldGQiKTsKKwllbHNlIGlmIChsaXN0ZW5fcG9ydCA9PSAwKQorCQlsaXN0ZW5fcG9ydCA9IERFRkFVTFRfR0lUX1BPUlQ7CisKKwlpZiAoZ3JvdXBfbmFtZSAmJiAhdXNlcl9uYW1lKQorCQlkaWUoIi0tZ3JvdXAgc3VwcGxpZWQgd2l0aG91dCAtLXVzZXIiKTsKKworCWlmICh1c2VyX25hbWUpCisJCWNyZWQgPSBwcmVwYXJlX2NyZWRlbnRpYWxzKHVzZXJfbmFtZSwgZ3JvdXBfbmFtZSk7CisKKwlpZiAoc3RyaWN0X3BhdGhzICYmICghb2tfcGF0aHMgfHwgISpva19wYXRocykpCisJCWRpZSgib3B0aW9uIC0tc3RyaWN0LXBhdGhzIHJlcXVpcmVzIGEgd2hpdGVsaXN0Iik7CisKKwlpZiAoYmFzZV9wYXRoICYmICFpc19kaXJlY3RvcnkoYmFzZV9wYXRoKSkKKwkJZGllKCJiYXNlLXBhdGggJyVzJyBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgYSBkaXJlY3RvcnkiLAorCQkgICAgYmFzZV9wYXRoKTsKKworCWlmIChpbmV0ZF9tb2RlKSB7CisJCWlmICghZnJlb3BlbigiL2Rldi9udWxsIiwgInciLCBzdGRlcnIpKQorCQkJZGllX2Vycm5vKCJmYWlsZWQgdG8gcmVkaXJlY3Qgc3RkZXJyIHRvIC9kZXYvbnVsbCIpOworCX0KKworCWlmIChpbmV0ZF9tb2RlIHx8IHNlcnZlX21vZGUpCisJCXJldHVybiBleGVjdXRlKCk7CisKKwlpZiAoZGV0YWNoKSB7CisJCWlmIChkYWVtb25pemUoKSkKKwkJCWRpZSgiLS1kZXRhY2ggbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7CisJfSBlbHNlCisJCXNhbml0aXplX3N0ZGZkcygpOworCisJaWYgKHBpZF9maWxlKQorCQl3cml0ZV9maWxlKHBpZF9maWxlLCAiJSJQUkl1TUFYLCAodWludG1heF90KSBnZXRwaWQoKSk7CisKKwkvKiBwcmVwYXJlIGFyZ3YgZm9yIHNlcnZpbmctcHJvY2Vzc2VzICovCisJY2xkX2FyZ3YgPSB4bWFsbG9jKHNpemVvZiAoY2hhciAqKSAqIChhcmdjICsgMikpOworCWNsZF9hcmd2WzBdID0gYXJndlswXTsJLyogZ2l0LWRhZW1vbiAqLworCWNsZF9hcmd2WzFdID0gIi0tc2VydmUiOworCWZvciAoaSA9IDE7IGkgPCBhcmdjOyArK2kpCisJCWNsZF9hcmd2W2krMV0gPSBhcmd2W2ldOworCWNsZF9hcmd2W2FyZ2MrMV0gPSBOVUxMOworCisJcmV0dXJuIHNlcnZlKCZsaXN0ZW5fYWRkciwgbGlzdGVuX3BvcnQsIGNyZWQpOworfQpkaWZmIC0tZ2l0IGEvZGF0ZS5jIGIvZGF0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOWY3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9kYXRlLmMKQEAgLTAsMCArMSwxMTg4IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisvKgorICogVGhpcyBpcyBsaWtlIG1rdGltZSwgYnV0IHdpdGhvdXQgbm9ybWFsaXphdGlvbiBvZiB0bV93ZGF5IGFuZCB0bV95ZGF5LgorICovCitzdGF0aWMgdGltZV90IHRtX3RvX3RpbWVfdChjb25zdCBzdHJ1Y3QgdG0gKnRtKQoreworCXN0YXRpYyBjb25zdCBpbnQgbWRheXNbXSA9IHsKKwkgICAgMCwgMzEsIDU5LCA5MCwgMTIwLCAxNTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzQKKwl9OworCWludCB5ZWFyID0gdG0tPnRtX3llYXIgLSA3MDsKKwlpbnQgbW9udGggPSB0bS0+dG1fbW9uOworCWludCBkYXkgPSB0bS0+dG1fbWRheTsKKworCWlmICh5ZWFyIDwgMCB8fCB5ZWFyID4gMTI5KSAvKiBhbGdvIG9ubHkgd29ya3MgZm9yIDE5NzAtMjA5OSAqLworCQlyZXR1cm4gLTE7CisJaWYgKG1vbnRoIDwgMCB8fCBtb250aCA+IDExKSAvKiBhcnJheSBib3VuZHMgKi8KKwkJcmV0dXJuIC0xOworCWlmIChtb250aCA8IDIgfHwgKHllYXIgKyAyKSAlIDQpCisJCWRheS0tOworCWlmICh0bS0+dG1faG91ciA8IDAgfHwgdG0tPnRtX21pbiA8IDAgfHwgdG0tPnRtX3NlYyA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gKHllYXIgKiAzNjUgKyAoeWVhciArIDEpIC8gNCArIG1kYXlzW21vbnRoXSArIGRheSkgKiAyNCo2MCo2MFVMICsKKwkJdG0tPnRtX2hvdXIgKiA2MCo2MCArIHRtLT50bV9taW4gKiA2MCArIHRtLT50bV9zZWM7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICptb250aF9uYW1lc1tdID0geworCSJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIsICJKdW5lIiwKKwkiSnVseSIsICJBdWd1c3QiLCAiU2VwdGVtYmVyIiwgIk9jdG9iZXIiLCAiTm92ZW1iZXIiLCAiRGVjZW1iZXIiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqd2Vla2RheV9uYW1lc1tdID0geworCSJTdW5kYXlzIiwgIk1vbmRheXMiLCAiVHVlc2RheXMiLCAiV2VkbmVzZGF5cyIsICJUaHVyc2RheXMiLCAiRnJpZGF5cyIsICJTYXR1cmRheXMiCit9OworCitzdGF0aWMgdGltZV90IGdtX3RpbWVfdCh1bnNpZ25lZCBsb25nIHRpbWUsIGludCB0eikKK3sKKwlpbnQgbWludXRlczsKKworCW1pbnV0ZXMgPSB0eiA8IDAgPyAtdHogOiB0ejsKKwltaW51dGVzID0gKG1pbnV0ZXMgLyAxMDApKjYwICsgKG1pbnV0ZXMgJSAxMDApOworCW1pbnV0ZXMgPSB0eiA8IDAgPyAtbWludXRlcyA6IG1pbnV0ZXM7CisJcmV0dXJuIHRpbWUgKyBtaW51dGVzICogNjA7Cit9CisKKy8qCisgKiBUaGUgInR6IiB0aGluZyBpcyBwYXNzZWQgaW4gYXMgdGhpcyBzdHJhbmdlICJkZWNpbWFsIHBhcnNlIG9mIHR6IgorICogdGhpbmcsIHdoaWNoIG1lYW5zIHRoYXQgdHogLTAxMDAgaXMgcGFzc2VkIGluIGFzIHRoZSBpbnRlZ2VyIC0xMDAsCisgKiBldmVuIHRob3VnaCBpdCBtZWFucyAic2l4dHkgbWludXRlcyBvZmYiCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdG0gKnRpbWVfdG9fdG0odW5zaWduZWQgbG9uZyB0aW1lLCBpbnQgdHopCit7CisJdGltZV90IHQgPSBnbV90aW1lX3QodGltZSwgdHopOworCXJldHVybiBnbXRpbWUoJnQpOworfQorCisvKgorICogV2hhdCB2YWx1ZSBvZiAidHoiIHdhcyBpbiBlZmZlY3QgYmFjayB0aGVuIGF0ICJ0aW1lIiBpbiB0aGUKKyAqIGxvY2FsIHRpbWV6b25lPworICovCitzdGF0aWMgaW50IGxvY2FsX3R6b2Zmc2V0KHVuc2lnbmVkIGxvbmcgdGltZSkKK3sKKwl0aW1lX3QgdCwgdF9sb2NhbDsKKwlzdHJ1Y3QgdG0gdG07CisJaW50IG9mZnNldCwgZWFzdHdlc3Q7CisKKwl0ID0gdGltZTsKKwlsb2NhbHRpbWVfcigmdCwgJnRtKTsKKwl0X2xvY2FsID0gdG1fdG9fdGltZV90KCZ0bSk7CisKKwlpZiAodF9sb2NhbCA8IHQpIHsKKwkJZWFzdHdlc3QgPSAtMTsKKwkJb2Zmc2V0ID0gdCAtIHRfbG9jYWw7CisJfSBlbHNlIHsKKwkJZWFzdHdlc3QgPSAxOworCQlvZmZzZXQgPSB0X2xvY2FsIC0gdDsKKwl9CisJb2Zmc2V0IC89IDYwOyAvKiBpbiBtaW51dGVzICovCisJb2Zmc2V0ID0gKG9mZnNldCAlIDYwKSArICgob2Zmc2V0IC8gNjApICogMTAwKTsKKwlyZXR1cm4gb2Zmc2V0ICogZWFzdHdlc3Q7Cit9CisKK3ZvaWQgc2hvd19kYXRlX3JlbGF0aXZlKHVuc2lnbmVkIGxvbmcgdGltZSwgaW50IHR6LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCB0aW1ldmFsICpub3csCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqdGltZWJ1ZikKK3sKKwl1bnNpZ25lZCBsb25nIGRpZmY7CisJaWYgKG5vdy0+dHZfc2VjIDwgdGltZSkgeworCQlzdHJidWZfYWRkc3RyKHRpbWVidWYsIF8oImluIHRoZSBmdXR1cmUiKSk7CisJCXJldHVybjsKKwl9CisJZGlmZiA9IG5vdy0+dHZfc2VjIC0gdGltZTsKKwlpZiAoZGlmZiA8IDkwKSB7CisJCXN0cmJ1Zl9hZGRmKHRpbWVidWYsCisJCQkgUV8oIiVsdSBzZWNvbmQgYWdvIiwgIiVsdSBzZWNvbmRzIGFnbyIsIGRpZmYpLCBkaWZmKTsKKwkJcmV0dXJuOworCX0KKwkvKiBUdXJuIGl0IGludG8gbWludXRlcyAqLworCWRpZmYgPSAoZGlmZiArIDMwKSAvIDYwOworCWlmIChkaWZmIDwgOTApIHsKKwkJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJCSBRXygiJWx1IG1pbnV0ZSBhZ28iLCAiJWx1IG1pbnV0ZXMgYWdvIiwgZGlmZiksIGRpZmYpOworCQlyZXR1cm47CisJfQorCS8qIFR1cm4gaXQgaW50byBob3VycyAqLworCWRpZmYgPSAoZGlmZiArIDMwKSAvIDYwOworCWlmIChkaWZmIDwgMzYpIHsKKwkJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJCSBRXygiJWx1IGhvdXIgYWdvIiwgIiVsdSBob3VycyBhZ28iLCBkaWZmKSwgZGlmZik7CisJCXJldHVybjsKKwl9CisJLyogV2UgZGVhbCB3aXRoIG51bWJlciBvZiBkYXlzIGZyb20gaGVyZSBvbiAqLworCWRpZmYgPSAoZGlmZiArIDEyKSAvIDI0OworCWlmIChkaWZmIDwgMTQpIHsKKwkJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJCSBRXygiJWx1IGRheSBhZ28iLCAiJWx1IGRheXMgYWdvIiwgZGlmZiksIGRpZmYpOworCQlyZXR1cm47CisJfQorCS8qIFNheSB3ZWVrcyBmb3IgdGhlIHBhc3QgMTAgd2Vla3Mgb3Igc28gKi8KKwlpZiAoZGlmZiA8IDcwKSB7CisJCXN0cmJ1Zl9hZGRmKHRpbWVidWYsCisJCQkgUV8oIiVsdSB3ZWVrIGFnbyIsICIlbHUgd2Vla3MgYWdvIiwgKGRpZmYgKyAzKSAvIDcpLAorCQkJIChkaWZmICsgMykgLyA3KTsKKwkJcmV0dXJuOworCX0KKwkvKiBTYXkgbW9udGhzIGZvciB0aGUgcGFzdCAxMiBtb250aHMgb3Igc28gKi8KKwlpZiAoZGlmZiA8IDM2NSkgeworCQlzdHJidWZfYWRkZih0aW1lYnVmLAorCQkJIFFfKCIlbHUgbW9udGggYWdvIiwgIiVsdSBtb250aHMgYWdvIiwgKGRpZmYgKyAxNSkgLyAzMCksCisJCQkgKGRpZmYgKyAxNSkgLyAzMCk7CisJCXJldHVybjsKKwl9CisJLyogR2l2ZSB5ZWFycyBhbmQgbW9udGhzIGZvciA1IHllYXJzIG9yIHNvICovCisJaWYgKGRpZmYgPCAxODI1KSB7CisJCXVuc2lnbmVkIGxvbmcgdG90YWxtb250aHMgPSAoZGlmZiAqIDEyICogMiArIDM2NSkgLyAoMzY1ICogMik7CisJCXVuc2lnbmVkIGxvbmcgeWVhcnMgPSB0b3RhbG1vbnRocyAvIDEyOworCQl1bnNpZ25lZCBsb25nIG1vbnRocyA9IHRvdGFsbW9udGhzICUgMTI7CisJCWlmIChtb250aHMpIHsKKwkJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgUV8oIiVsdSB5ZWFyIiwgIiVsdSB5ZWFycyIsIHllYXJzKSwgeWVhcnMpOworCQkJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJCQkgLyogVFJBTlNMQVRPUlM6ICIlcyIgaXMgIjxuPiB5ZWFycyIgKi8KKwkJCQkgUV8oIiVzLCAlbHUgbW9udGggYWdvIiwgIiVzLCAlbHUgbW9udGhzIGFnbyIsIG1vbnRocyksCisJCQkJIHNiLmJ1ZiwgbW9udGhzKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCX0gZWxzZQorCQkJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJCQkgUV8oIiVsdSB5ZWFyIGFnbyIsICIlbHUgeWVhcnMgYWdvIiwgeWVhcnMpLCB5ZWFycyk7CisJCXJldHVybjsKKwl9CisJLyogT3RoZXJ3aXNlLCBqdXN0IHllYXJzLiBDZW50dXJpZXMgaXMgcHJvYmFibHkgb3ZlcmtpbGwuICovCisJc3RyYnVmX2FkZGYodGltZWJ1ZiwKKwkJIFFfKCIlbHUgeWVhciBhZ28iLCAiJWx1IHllYXJzIGFnbyIsIChkaWZmICsgMTgzKSAvIDM2NSksCisJCSAoZGlmZiArIDE4MykgLyAzNjUpOworfQorCitzdHJ1Y3QgZGF0ZV9tb2RlICpkYXRlX21vZGVfZnJvbV90eXBlKGVudW0gZGF0ZV9tb2RlX3R5cGUgdHlwZSkKK3sKKwlzdGF0aWMgc3RydWN0IGRhdGVfbW9kZSBtb2RlOworCWlmICh0eXBlID09IERBVEVfU1RSRlRJTUUpCisJCWRpZSgiQlVHOiBjYW5ub3QgY3JlYXRlIGFub255bW91cyBzdHJmdGltZSBkYXRlX21vZGUgc3RydWN0Iik7CisJbW9kZS50eXBlID0gdHlwZTsKKwltb2RlLmxvY2FsID0gMDsKKwlyZXR1cm4gJm1vZGU7Cit9CisKK2NvbnN0IGNoYXIgKnNob3dfZGF0ZSh1bnNpZ25lZCBsb25nIHRpbWUsIGludCB0eiwgY29uc3Qgc3RydWN0IGRhdGVfbW9kZSAqbW9kZSkKK3sKKwlzdHJ1Y3QgdG0gKnRtOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHRpbWVidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmIChtb2RlLT5sb2NhbCkKKwkJdHogPSBsb2NhbF90em9mZnNldCh0aW1lKTsKKworCWlmIChtb2RlLT50eXBlID09IERBVEVfUkFXKSB7CisJCXN0cmJ1Zl9yZXNldCgmdGltZWJ1Zik7CisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJWx1ICUrMDVkIiwgdGltZSwgdHopOworCQlyZXR1cm4gdGltZWJ1Zi5idWY7CisJfQorCisJaWYgKG1vZGUtPnR5cGUgPT0gREFURV9SRUxBVElWRSkgeworCQlzdHJ1Y3QgdGltZXZhbCBub3c7CisKKwkJc3RyYnVmX3Jlc2V0KCZ0aW1lYnVmKTsKKwkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCQlzaG93X2RhdGVfcmVsYXRpdmUodGltZSwgdHosICZub3csICZ0aW1lYnVmKTsKKwkJcmV0dXJuIHRpbWVidWYuYnVmOworCX0KKworCXRtID0gdGltZV90b190bSh0aW1lLCB0eik7CisJaWYgKCF0bSkgeworCQl0bSA9IHRpbWVfdG9fdG0oMCwgMCk7CisJCXR6ID0gMDsKKwl9CisKKwlzdHJidWZfcmVzZXQoJnRpbWVidWYpOworCWlmIChtb2RlLT50eXBlID09IERBVEVfU0hPUlQpCisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJTA0ZC0lMDJkLSUwMmQiLCB0bS0+dG1feWVhciArIDE5MDAsCisJCQkJdG0tPnRtX21vbiArIDEsIHRtLT50bV9tZGF5KTsKKwllbHNlIGlmIChtb2RlLT50eXBlID09IERBVEVfSVNPODYwMSkKKwkJc3RyYnVmX2FkZGYoJnRpbWVidWYsICIlMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZCAlKzA1ZCIsCisJCQkJdG0tPnRtX3llYXIgKyAxOTAwLAorCQkJCXRtLT50bV9tb24gKyAxLAorCQkJCXRtLT50bV9tZGF5LAorCQkJCXRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjLAorCQkJCXR6KTsKKwllbHNlIGlmIChtb2RlLT50eXBlID09IERBVEVfSVNPODYwMV9TVFJJQ1QpIHsKKwkJY2hhciBzaWduID0gKHR6ID49IDApID8gJysnIDogJy0nOworCQl0eiA9IGFicyh0eik7CisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJTA0ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmQlYyUwMmQ6JTAyZCIsCisJCQkJdG0tPnRtX3llYXIgKyAxOTAwLAorCQkJCXRtLT50bV9tb24gKyAxLAorCQkJCXRtLT50bV9tZGF5LAorCQkJCXRtLT50bV9ob3VyLCB0bS0+dG1fbWluLCB0bS0+dG1fc2VjLAorCQkJCXNpZ24sIHR6IC8gMTAwLCB0eiAlIDEwMCk7CisJfSBlbHNlIGlmIChtb2RlLT50eXBlID09IERBVEVfUkZDMjgyMikKKwkJc3RyYnVmX2FkZGYoJnRpbWVidWYsICIlLjNzLCAlZCAlLjNzICVkICUwMmQ6JTAyZDolMDJkICUrMDVkIiwKKwkJCXdlZWtkYXlfbmFtZXNbdG0tPnRtX3dkYXldLCB0bS0+dG1fbWRheSwKKwkJCW1vbnRoX25hbWVzW3RtLT50bV9tb25dLCB0bS0+dG1feWVhciArIDE5MDAsCisJCQl0bS0+dG1faG91ciwgdG0tPnRtX21pbiwgdG0tPnRtX3NlYywgdHopOworCWVsc2UgaWYgKG1vZGUtPnR5cGUgPT0gREFURV9TVFJGVElNRSkKKwkJc3RyYnVmX2FkZGZ0aW1lKCZ0aW1lYnVmLCBtb2RlLT5zdHJmdGltZV9mbXQsIHRtKTsKKwllbHNlCisJCXN0cmJ1Zl9hZGRmKCZ0aW1lYnVmLCAiJS4zcyAlLjNzICVkICUwMmQ6JTAyZDolMDJkICVkJWMlKzA1ZCIsCisJCQkJd2Vla2RheV9uYW1lc1t0bS0+dG1fd2RheV0sCisJCQkJbW9udGhfbmFtZXNbdG0tPnRtX21vbl0sCisJCQkJdG0tPnRtX21kYXksCisJCQkJdG0tPnRtX2hvdXIsIHRtLT50bV9taW4sIHRtLT50bV9zZWMsCisJCQkJdG0tPnRtX3llYXIgKyAxOTAwLAorCQkJCW1vZGUtPmxvY2FsID8gMCA6ICcgJywKKwkJCQl0eik7CisJcmV0dXJuIHRpbWVidWYuYnVmOworfQorCisvKgorICogQ2hlY2sgdGhlc2UuIEFuZCBub3RlIGhvdyBpdCBkb2Vzbid0IGRvIHRoZSBzdW1tZXItdGltZSBjb252ZXJzaW9uLgorICoKKyAqIEluIG15IHdvcmxkLCBpdCdzIGFsd2F5cyBzdW1tZXIsIGFuZCB0aGluZ3MgYXJlIHByb2JhYmx5IGEgYml0IG9mZgorICogaW4gb3RoZXIgd2F5cyB0b28uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IG9mZnNldDsKKwlpbnQgZHN0OworfSB0aW1lem9uZV9uYW1lc1tdID0geworCXsgIklETFciLCAtMTIsIDAsIH0sCS8qIEludGVybmF0aW9uYWwgRGF0ZSBMaW5lIFdlc3QgKi8KKwl7ICJOVCIsICAgLTExLCAwLCB9LAkvKiBOb21lICovCisJeyAiQ0FUIiwgIC0xMCwgMCwgfSwJLyogQ2VudHJhbCBBbGFza2EgKi8KKwl7ICJIU1QiLCAgLTEwLCAwLCB9LAkvKiBIYXdhaWkgU3RhbmRhcmQgKi8KKwl7ICJIRFQiLCAgLTEwLCAxLCB9LAkvKiBIYXdhaWkgRGF5bGlnaHQgKi8KKwl7ICJZU1QiLCAgIC05LCAwLCB9LAkvKiBZdWtvbiBTdGFuZGFyZCAqLworCXsgIllEVCIsICAgLTksIDEsIH0sCS8qIFl1a29uIERheWxpZ2h0ICovCisJeyAiUFNUIiwgICAtOCwgMCwgfSwJLyogUGFjaWZpYyBTdGFuZGFyZCAqLworCXsgIlBEVCIsICAgLTgsIDEsIH0sCS8qIFBhY2lmaWMgRGF5bGlnaHQgKi8KKwl7ICJNU1QiLCAgIC03LCAwLCB9LAkvKiBNb3VudGFpbiBTdGFuZGFyZCAqLworCXsgIk1EVCIsICAgLTcsIDEsIH0sCS8qIE1vdW50YWluIERheWxpZ2h0ICovCisJeyAiQ1NUIiwgICAtNiwgMCwgfSwJLyogQ2VudHJhbCBTdGFuZGFyZCAqLworCXsgIkNEVCIsICAgLTYsIDEsIH0sCS8qIENlbnRyYWwgRGF5bGlnaHQgKi8KKwl7ICJFU1QiLCAgIC01LCAwLCB9LAkvKiBFYXN0ZXJuIFN0YW5kYXJkICovCisJeyAiRURUIiwgICAtNSwgMSwgfSwJLyogRWFzdGVybiBEYXlsaWdodCAqLworCXsgIkFTVCIsICAgLTMsIDAsIH0sCS8qIEF0bGFudGljIFN0YW5kYXJkICovCisJeyAiQURUIiwgICAtMywgMSwgfSwJLyogQXRsYW50aWMgRGF5bGlnaHQgKi8KKwl7ICJXQVQiLCAgIC0xLCAwLCB9LAkvKiBXZXN0IEFmcmljYSAqLworCisJeyAiR01UIiwgICAgMCwgMCwgfSwJLyogR3JlZW53aWNoIE1lYW4gKi8KKwl7ICJVVEMiLCAgICAwLCAwLCB9LAkvKiBVbml2ZXJzYWwgKENvb3JkaW5hdGVkKSAqLworCXsgIloiLCAgICAgIDAsIDAsIH0sICAgIC8qIFp1bHUsIGFsaWFzIGZvciBVVEMgKi8KKworCXsgIldFVCIsICAgIDAsIDAsIH0sCS8qIFdlc3Rlcm4gRXVyb3BlYW4gKi8KKwl7ICJCU1QiLCAgICAwLCAxLCB9LAkvKiBCcml0aXNoIFN1bW1lciAqLworCXsgIkNFVCIsICAgKzEsIDAsIH0sCS8qIENlbnRyYWwgRXVyb3BlYW4gKi8KKwl7ICJNRVQiLCAgICsxLCAwLCB9LAkvKiBNaWRkbGUgRXVyb3BlYW4gKi8KKwl7ICJNRVdUIiwgICsxLCAwLCB9LAkvKiBNaWRkbGUgRXVyb3BlYW4gV2ludGVyICovCisJeyAiTUVTVCIsICArMSwgMSwgfSwJLyogTWlkZGxlIEV1cm9wZWFuIFN1bW1lciAqLworCXsgIkNFU1QiLCAgKzEsIDEsIH0sCS8qIENlbnRyYWwgRXVyb3BlYW4gU3VtbWVyICovCisJeyAiTUVTWiIsICArMSwgMSwgfSwJLyogTWlkZGxlIEV1cm9wZWFuIFN1bW1lciAqLworCXsgIkZXVCIsICAgKzEsIDAsIH0sCS8qIEZyZW5jaCBXaW50ZXIgKi8KKwl7ICJGU1QiLCAgICsxLCAxLCB9LAkvKiBGcmVuY2ggU3VtbWVyICovCisJeyAiRUVUIiwgICArMiwgMCwgfSwJLyogRWFzdGVybiBFdXJvcGUsIFVTU1IgWm9uZSAxICovCisJeyAiRUVTVCIsICArMiwgMSwgfSwJLyogRWFzdGVybiBFdXJvcGVhbiBEYXlsaWdodCAqLworCXsgIldBU1QiLCAgKzcsIDAsIH0sCS8qIFdlc3QgQXVzdHJhbGlhbiBTdGFuZGFyZCAqLworCXsgIldBRFQiLCAgKzcsIDEsIH0sCS8qIFdlc3QgQXVzdHJhbGlhbiBEYXlsaWdodCAqLworCXsgIkNDVCIsICAgKzgsIDAsIH0sCS8qIENoaW5hIENvYXN0LCBVU1NSIFpvbmUgNyAqLworCXsgIkpTVCIsICAgKzksIDAsIH0sCS8qIEphcGFuIFN0YW5kYXJkLCBVU1NSIFpvbmUgOCAqLworCXsgIkVBU1QiLCArMTAsIDAsIH0sCS8qIEVhc3Rlcm4gQXVzdHJhbGlhbiBTdGFuZGFyZCAqLworCXsgIkVBRFQiLCArMTAsIDEsIH0sCS8qIEVhc3Rlcm4gQXVzdHJhbGlhbiBEYXlsaWdodCAqLworCXsgIkdTVCIsICArMTAsIDAsIH0sCS8qIEd1YW0gU3RhbmRhcmQsIFVTU1IgWm9uZSA5ICovCisJeyAiTlpUIiwgICsxMiwgMCwgfSwJLyogTmV3IFplYWxhbmQgKi8KKwl7ICJOWlNUIiwgKzEyLCAwLCB9LAkvKiBOZXcgWmVhbGFuZCBTdGFuZGFyZCAqLworCXsgIk5aRFQiLCArMTIsIDEsIH0sCS8qIE5ldyBaZWFsYW5kIERheWxpZ2h0ICovCisJeyAiSURMRSIsICsxMiwgMCwgfSwJLyogSW50ZXJuYXRpb25hbCBEYXRlIExpbmUgRWFzdCAqLworfTsKKworc3RhdGljIGludCBtYXRjaF9zdHJpbmcoY29uc3QgY2hhciAqZGF0ZSwgY29uc3QgY2hhciAqc3RyKQoreworCWludCBpID0gMDsKKworCWZvciAoaSA9IDA7ICpkYXRlOyBkYXRlKyssIHN0cisrLCBpKyspIHsKKwkJaWYgKCpkYXRlID09ICpzdHIpCisJCQljb250aW51ZTsKKwkJaWYgKHRvdXBwZXIoKmRhdGUpID09IHRvdXBwZXIoKnN0cikpCisJCQljb250aW51ZTsKKwkJaWYgKCFpc2FsbnVtKCpkYXRlKSkKKwkJCWJyZWFrOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbnQgc2tpcF9hbHBoYShjb25zdCBjaGFyICpkYXRlKQoreworCWludCBpID0gMDsKKwlkbyB7CisJCWkrKzsKKwl9IHdoaWxlIChpc2FscGhhKGRhdGVbaV0pKTsKKwlyZXR1cm4gaTsKK30KKworLyoKKyogUGFyc2UgbW9udGgsIHdlZWtkYXksIG9yIHRpbWV6b25lIG5hbWUKKyovCitzdGF0aWMgaW50IG1hdGNoX2FscGhhKGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCB0bSAqdG0sIGludCAqb2Zmc2V0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKKwkJaW50IG1hdGNoID0gbWF0Y2hfc3RyaW5nKGRhdGUsIG1vbnRoX25hbWVzW2ldKTsKKwkJaWYgKG1hdGNoID49IDMpIHsKKwkJCXRtLT50bV9tb24gPSBpOworCQkJcmV0dXJuIG1hdGNoOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlpbnQgbWF0Y2ggPSBtYXRjaF9zdHJpbmcoZGF0ZSwgd2Vla2RheV9uYW1lc1tpXSk7CisJCWlmIChtYXRjaCA+PSAzKSB7CisJCQl0bS0+dG1fd2RheSA9IGk7CisJCQlyZXR1cm4gbWF0Y2g7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aW1lem9uZV9uYW1lcyk7IGkrKykgeworCQlpbnQgbWF0Y2ggPSBtYXRjaF9zdHJpbmcoZGF0ZSwgdGltZXpvbmVfbmFtZXNbaV0ubmFtZSk7CisJCWlmIChtYXRjaCA+PSAzIHx8IG1hdGNoID09IHN0cmxlbih0aW1lem9uZV9uYW1lc1tpXS5uYW1lKSkgeworCQkJaW50IG9mZiA9IHRpbWV6b25lX25hbWVzW2ldLm9mZnNldDsKKworCQkJLyogVGhpcyBpcyBib2d1cywgYnV0IHdlIGxpa2Ugc3VtbWVyICovCisJCQlvZmYgKz0gdGltZXpvbmVfbmFtZXNbaV0uZHN0OworCisJCQkvKiBPbmx5IHVzZSB0aGUgdHogbmFtZSBvZmZzZXQgaWYgd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyBiZXR0ZXIgKi8KKwkJCWlmICgqb2Zmc2V0ID09IC0xKQorCQkJCSpvZmZzZXQgPSA2MCpvZmY7CisKKwkJCXJldHVybiBtYXRjaDsKKwkJfQorCX0KKworCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgIlBNIikgPT0gMikgeworCQl0bS0+dG1faG91ciA9ICh0bS0+dG1faG91ciAlIDEyKSArIDEyOworCQlyZXR1cm4gMjsKKwl9CisKKwlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsICJBTSIpID09IDIpIHsKKwkJdG0tPnRtX2hvdXIgPSAodG0tPnRtX2hvdXIgJSAxMikgKyAwOworCQlyZXR1cm4gMjsKKwl9CisKKwkvKiBCQUQgQ1JBUCAqLworCXJldHVybiBza2lwX2FscGhhKGRhdGUpOworfQorCitzdGF0aWMgaW50IGlzX2RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwgc3RydWN0IHRtICpub3dfdG0sIHRpbWVfdCBub3csIHN0cnVjdCB0bSAqdG0pCit7CisJaWYgKG1vbnRoID4gMCAmJiBtb250aCA8IDEzICYmIGRheSA+IDAgJiYgZGF5IDwgMzIpIHsKKwkJc3RydWN0IHRtIGNoZWNrID0gKnRtOworCQlzdHJ1Y3QgdG0gKnIgPSAobm93X3RtID8gJmNoZWNrIDogdG0pOworCQl0aW1lX3Qgc3BlY2lmaWVkOworCisJCXItPnRtX21vbiA9IG1vbnRoIC0gMTsKKwkJci0+dG1fbWRheSA9IGRheTsKKwkJaWYgKHllYXIgPT0gLTEpIHsKKwkJCWlmICghbm93X3RtKQorCQkJCXJldHVybiAxOworCQkJci0+dG1feWVhciA9IG5vd190bS0+dG1feWVhcjsKKwkJfQorCQllbHNlIGlmICh5ZWFyID49IDE5NzAgJiYgeWVhciA8IDIxMDApCisJCQlyLT50bV95ZWFyID0geWVhciAtIDE5MDA7CisJCWVsc2UgaWYgKHllYXIgPiA3MCAmJiB5ZWFyIDwgMTAwKQorCQkJci0+dG1feWVhciA9IHllYXI7CisJCWVsc2UgaWYgKHllYXIgPCAzOCkKKwkJCXItPnRtX3llYXIgPSB5ZWFyICsgMTAwOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwkJaWYgKCFub3dfdG0pCisJCQlyZXR1cm4gMTsKKworCQlzcGVjaWZpZWQgPSB0bV90b190aW1lX3Qocik7CisKKwkJLyogQmUgaXQgY29tbWl0IHRpbWUgb3IgYXV0aG9yIHRpbWUsIGl0IGRvZXMgbm90IG1ha2UKKwkJICogc2Vuc2UgdG8gc3BlY2lmeSB0aW1lc3RhbXAgd2F5IGludG8gdGhlIGZ1dHVyZS4gIE1ha2UKKwkJICogc3VyZSBpdCBpcyBub3QgbGF0ZXIgdGhhbiB0ZW4gZGF5cyBmcm9tIG5vdy4uLgorCQkgKi8KKwkJaWYgKChzcGVjaWZpZWQgIT0gLTEpICYmIChub3cgKyAxMCoyNCozNjAwIDwgc3BlY2lmaWVkKSkKKwkJCXJldHVybiAwOworCQl0bS0+dG1fbW9uID0gci0+dG1fbW9uOworCQl0bS0+dG1fbWRheSA9IHItPnRtX21kYXk7CisJCWlmICh5ZWFyICE9IC0xKQorCQkJdG0tPnRtX3llYXIgPSByLT50bV95ZWFyOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfbXVsdGlfbnVtYmVyKHVuc2lnbmVkIGxvbmcgbnVtLCBjaGFyIGMsIGNvbnN0IGNoYXIgKmRhdGUsCisJCQkgICAgICBjaGFyICplbmQsIHN0cnVjdCB0bSAqdG0sIHRpbWVfdCBub3cpCit7CisJc3RydWN0IHRtIG5vd190bTsKKwlzdHJ1Y3QgdG0gKnJlZnVzZV9mdXR1cmU7CisJbG9uZyBudW0yLCBudW0zOworCisJbnVtMiA9IHN0cnRvbChlbmQrMSwgJmVuZCwgMTApOworCW51bTMgPSAtMTsKKwlpZiAoKmVuZCA9PSBjICYmIGlzZGlnaXQoZW5kWzFdKSkKKwkJbnVtMyA9IHN0cnRvbChlbmQrMSwgJmVuZCwgMTApOworCisJLyogVGltZT8gRGF0ZT8gKi8KKwlzd2l0Y2ggKGMpIHsKKwljYXNlICc6JzoKKwkJaWYgKG51bTMgPCAwKQorCQkJbnVtMyA9IDA7CisJCWlmIChudW0gPCAyNSAmJiBudW0yID49IDAgJiYgbnVtMiA8IDYwICYmIG51bTMgPj0gMCAmJiBudW0zIDw9IDYwKSB7CisJCQl0bS0+dG1faG91ciA9IG51bTsKKwkJCXRtLT50bV9taW4gPSBudW0yOworCQkJdG0tPnRtX3NlYyA9IG51bTM7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gMDsKKworCWNhc2UgJy0nOgorCWNhc2UgJy8nOgorCWNhc2UgJy4nOgorCQlpZiAoIW5vdykKKwkJCW5vdyA9IHRpbWUoTlVMTCk7CisJCXJlZnVzZV9mdXR1cmUgPSBOVUxMOworCQlpZiAoZ210aW1lX3IoJm5vdywgJm5vd190bSkpCisJCQlyZWZ1c2VfZnV0dXJlID0gJm5vd190bTsKKworCQlpZiAobnVtID4gNzApIHsKKwkJCS8qIHl5eXktbW0tZGQ/ICovCisJCQlpZiAoaXNfZGF0ZShudW0sIG51bTIsIG51bTMsIE5VTEwsIG5vdywgdG0pKQorCQkJCWJyZWFrOworCQkJLyogeXl5eS1kZC1tbT8gKi8KKwkJCWlmIChpc19kYXRlKG51bSwgbnVtMywgbnVtMiwgTlVMTCwgbm93LCB0bSkpCisJCQkJYnJlYWs7CisJCX0KKwkJLyogT3VyIGVhc3Rlcm4gRXVyb3BlYW4gZnJpZW5kcyBzYXkgZGQubW0ueXlbeXldCisJCSAqIGlzIHRoZSBub3JtIHRoZXJlLCBzbyBnaXZpbmcgcHJlY2VkZW5jZSB0bworCQkgKiBtbS9kZC95eVt5eV0gZm9ybSBvbmx5IHdoZW4gc2VwYXJhdG9yIGlzIG5vdCAnLicKKwkJICovCisJCWlmIChjICE9ICcuJyAmJgorCQkgICAgaXNfZGF0ZShudW0zLCBudW0sIG51bTIsIHJlZnVzZV9mdXR1cmUsIG5vdywgdG0pKQorCQkJYnJlYWs7CisJCS8qIEV1cm9wZWFuIGRkLm1tLnl5W3l5XSBvciBmdW5ueSBVUyBkZC9tbS95eVt5eV0gKi8KKwkJaWYgKGlzX2RhdGUobnVtMywgbnVtMiwgbnVtLCByZWZ1c2VfZnV0dXJlLCBub3csIHRtKSkKKwkJCWJyZWFrOworCQkvKiBGdW5ueSBFdXJvcGVhbiBtbS5kZC55eSAqLworCQlpZiAoYyA9PSAnLicgJiYKKwkJICAgIGlzX2RhdGUobnVtMywgbnVtLCBudW0yLCByZWZ1c2VfZnV0dXJlLCBub3csIHRtKSkKKwkJCWJyZWFrOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGVuZCAtIGRhdGU7Cit9CisKKy8qCisgKiBIYXZlIHdlIGZpbGxlZCBpbiBhbnkgcGFydCBvZiB0aGUgdGltZS9kYXRlIHlldD8KKyAqIFdlIGp1c3QgZG8gYSBiaW5hcnkgJ2FuZCcgdG8gc2VlIGlmIHRoZSBzaWduIGJpdAorICogaXMgc2V0IGluIGFsbCB0aGUgdmFsdWVzLgorICovCitzdGF0aWMgaW5saW5lIGludCBub2RhdGUoc3RydWN0IHRtICp0bSkKK3sKKwlyZXR1cm4gKHRtLT50bV95ZWFyICYKKwkJdG0tPnRtX21vbiAmCisJCXRtLT50bV9tZGF5ICYKKwkJdG0tPnRtX2hvdXIgJgorCQl0bS0+dG1fbWluICYKKwkJdG0tPnRtX3NlYykgPCAwOworfQorCisvKgorICogV2UndmUgc2VlbiBhIGRpZ2l0LiBUaW1lPyBZZWFyPyBEYXRlPworICovCitzdGF0aWMgaW50IG1hdGNoX2RpZ2l0KGNvbnN0IGNoYXIgKmRhdGUsIHN0cnVjdCB0bSAqdG0sIGludCAqb2Zmc2V0LCBpbnQgKnRtX2dtdCkKK3sKKwlpbnQgbjsKKwljaGFyICplbmQ7CisJdW5zaWduZWQgbG9uZyBudW07CisKKwludW0gPSBzdHJ0b3VsKGRhdGUsICZlbmQsIDEwKTsKKworCS8qCisJICogU2Vjb25kcyBzaW5jZSAxOTcwPyBXZSB0cmlnZ2VyIG9uIHRoYXQgZm9yIGFueSBudW1iZXJzIHdpdGgKKwkgKiBtb3JlIHRoYW4gOCBkaWdpdHMuIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHJ1bGUgb3V0CisJICogbnVtYmVycyBsaWtlIDIwMDcwNjA2IGFzIGEgWVlZWU1NREQgZGF0ZS4KKwkgKi8KKwlpZiAobnVtID49IDEwMDAwMDAwMCAmJiBub2RhdGUodG0pKSB7CisJCXRpbWVfdCB0aW1lID0gbnVtOworCQlpZiAoZ210aW1lX3IoJnRpbWUsIHRtKSkgeworCQkJKnRtX2dtdCA9IDE7CisJCQlyZXR1cm4gZW5kIC0gZGF0ZTsKKwkJfQorCX0KKworCS8qCisJICogQ2hlY2sgZm9yIHNwZWNpYWwgZm9ybWF0czogbnVtWy0uOi9dbnVtW3NhbWVdbnVtCisJICovCisJc3dpdGNoICgqZW5kKSB7CisJY2FzZSAnOic6CisJY2FzZSAnLic6CisJY2FzZSAnLyc6CisJY2FzZSAnLSc6CisJCWlmIChpc2RpZ2l0KGVuZFsxXSkpIHsKKwkJCWludCBtYXRjaCA9IG1hdGNoX211bHRpX251bWJlcihudW0sICplbmQsIGRhdGUsIGVuZCwgdG0sIDApOworCQkJaWYgKG1hdGNoKQorCQkJCXJldHVybiBtYXRjaDsKKwkJfQorCX0KKworCS8qCisJICogTm9uZSBvZiB0aGUgc3BlY2lhbCBmb3JtYXRzPyBUcnkgdG8gZ3Vlc3Mgd2hhdAorCSAqIHRoZSBudW1iZXIgbWVhbnQuIFdlIHVzZSB0aGUgbnVtYmVyIG9mIGRpZ2l0cworCSAqIHRvIG1ha2UgYSBtb3JlIGVkdWNhdGVkIGd1ZXNzLi4KKwkgKi8KKwluID0gMDsKKwlkbyB7CisJCW4rKzsKKwl9IHdoaWxlIChpc2RpZ2l0KGRhdGVbbl0pKTsKKworCS8qIEZvdXItZGlnaXQgeWVhciBvciBhIHRpbWV6b25lPyAqLworCWlmIChuID09IDQpIHsKKwkJaWYgKG51bSA8PSAxNDAwICYmICpvZmZzZXQgPT0gLTEpIHsKKwkJCXVuc2lnbmVkIGludCBtaW51dGVzID0gbnVtICUgMTAwOworCQkJdW5zaWduZWQgaW50IGhvdXJzID0gbnVtIC8gMTAwOworCQkJKm9mZnNldCA9IGhvdXJzKjYwICsgbWludXRlczsKKwkJfSBlbHNlIGlmIChudW0gPiAxOTAwICYmIG51bSA8IDIxMDApCisJCQl0bS0+dG1feWVhciA9IG51bSAtIDE5MDA7CisJCXJldHVybiBuOworCX0KKworCS8qCisJICogSWdub3JlIGxvdHMgb2YgbnVtZXJhbHMuIFdlIHRvb2sgY2FyZSBvZiA0LWRpZ2l0IHllYXJzIGFib3ZlLgorCSAqIERheXMgb3IgbW9udGhzIG11c3QgYmUgb25lIG9yIHR3byBkaWdpdHMuCisJICovCisJaWYgKG4gPiAyKQorCQlyZXR1cm4gbjsKKworCS8qCisJICogTk9URSEgV2Ugd2lsbCBnaXZlIHByZWNlZGVuY2UgdG8gZGF5LW9mLW1vbnRoIG92ZXIgbW9udGggb3IKKwkgKiB5ZWFyIG51bWJlcnMgaW4gdGhlIDEtMTIgcmFuZ2UuIFNvIDA1IGlzIGFsd2F5cyAibWRheSA1IiwKKwkgKiB1bmxlc3Mgd2UgYWxyZWFkeSBoYXZlIGEgbWRheS4uCisJICoKKwkgKiBJT1csIDAxIEFwciAwNSBwYXJzZXMgYXMgIkFwcmlsIDFzdCwgMjAwNSIuCisJICovCisJaWYgKG51bSA+IDAgJiYgbnVtIDwgMzIgJiYgdG0tPnRtX21kYXkgPCAwKSB7CisJCXRtLT50bV9tZGF5ID0gbnVtOworCQlyZXR1cm4gbjsKKwl9CisKKwkvKiBUd28tZGlnaXQgeWVhcj8gKi8KKwlpZiAobiA9PSAyICYmIHRtLT50bV95ZWFyIDwgMCkgeworCQlpZiAobnVtIDwgMTAgJiYgdG0tPnRtX21kYXkgPj0gMCkgeworCQkJdG0tPnRtX3llYXIgPSBudW0gKyAxMDA7CisJCQlyZXR1cm4gbjsKKwkJfQorCQlpZiAobnVtID49IDcwKSB7CisJCQl0bS0+dG1feWVhciA9IG51bTsKKwkJCXJldHVybiBuOworCQl9CisJfQorCisJaWYgKG51bSA+IDAgJiYgbnVtIDwgMTMgJiYgdG0tPnRtX21vbiA8IDApCisJCXRtLT50bV9tb24gPSBudW0tMTsKKworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IG1hdGNoX3R6KGNvbnN0IGNoYXIgKmRhdGUsIGludCAqb2ZmcCkKK3sKKwljaGFyICplbmQ7CisJaW50IGhvdXIgPSBzdHJ0b3VsKGRhdGUgKyAxLCAmZW5kLCAxMCk7CisJaW50IG4gPSBlbmQgLSAoZGF0ZSArIDEpOworCWludCBtaW4gPSAwOworCisJaWYgKG4gPT0gNCkgeworCQkvKiBoaG1tICovCisJCW1pbiA9IGhvdXIgJSAxMDA7CisJCWhvdXIgPSBob3VyIC8gMTAwOworCX0gZWxzZSBpZiAobiAhPSAyKSB7CisJCW1pbiA9IDk5OyAvKiByYW5kb20gY3JhcCAqLworCX0gZWxzZSBpZiAoKmVuZCA9PSAnOicpIHsKKwkJLyogaGg6bW0/ICovCisJCW1pbiA9IHN0cnRvdWwoZW5kICsgMSwgJmVuZCwgMTApOworCQlpZiAoZW5kIC0gKGRhdGUgKyAxKSAhPSA1KQorCQkJbWluID0gOTk7IC8qIHJhbmRvbSBjcmFwICovCisJfSAvKiBvdGhlcndpc2Ugd2UgcGFyc2VkICJoaCIgKi8KKworCS8qCisJICogRG9uJ3QgYWNjZXB0IGFueSByYW5kb20gY3JhcC4gRXZlbiB0aG91Z2ggc29tZSBwbGFjZXMgaGF2ZQorCSAqIG9mZnNldCBsYXJnZXIgdGhhbiAxMiBob3VycyAoZS5nLiBQYWNpZmljL0tpcml0aW1hdGkgaXMgYXQKKwkgKiBVVEMrMTQpLCB0aGVyZSBpcyBzb21ldGhpbmcgd3JvbmcgaWYgaG91ciBwYXJ0IGlzIG11Y2gKKwkgKiBsYXJnZXIgdGhhbiB0aGF0LiBXZSBtaWdodCBhbHNvIHdhbnQgdG8gY2hlY2sgdGhhdCB0aGUKKwkgKiBtaW51dGVzIGFyZSBkaXZpc2libGUgYnkgMTUgb3Igc29tZXRoaW5nIHRvby4gKE9mZnNldCBvZgorCSAqIEthdGhtYW5kdSwgTmVwYWwgaXMgVVRDKzU6NDUpCisJICovCisJaWYgKG1pbiA8IDYwICYmIGhvdXIgPCAyNCkgeworCQlpbnQgb2Zmc2V0ID0gaG91ciAqIDYwICsgbWluOworCQlpZiAoKmRhdGUgPT0gJy0nKQorCQkJb2Zmc2V0ID0gLW9mZnNldDsKKwkJKm9mZnAgPSBvZmZzZXQ7CisJfQorCXJldHVybiBlbmQgLSBkYXRlOworfQorCitzdGF0aWMgdm9pZCBkYXRlX3N0cmluZyh1bnNpZ25lZCBsb25nIGRhdGUsIGludCBvZmZzZXQsIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlpbnQgc2lnbiA9ICcrJzsKKworCWlmIChvZmZzZXQgPCAwKSB7CisJCW9mZnNldCA9IC1vZmZzZXQ7CisJCXNpZ24gPSAnLSc7CisJfQorCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVsdSAlYyUwMmQlMDJkIiwgZGF0ZSwgc2lnbiwgb2Zmc2V0IC8gNjAsIG9mZnNldCAlIDYwKTsKK30KKworLyoKKyAqIFBhcnNlIGEgc3RyaW5nIGxpa2UgIjAgKzAwMDAiIGFzIGFuY2llbnQgdGltZXN0YW1wIG5lYXIgZXBvY2gsIGJ1dAorICogb25seSB3aGVuIGl0IGFwcGVhcnMgbm90IGFzIHBhcnQgb2YgYW55IG90aGVyIHN0cmluZy4KKyAqLworc3RhdGljIGludCBtYXRjaF9vYmplY3RfaGVhZGVyX2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgdW5zaWduZWQgbG9uZyAqdGltZXN0YW1wLCBpbnQgKm9mZnNldCkKK3sKKwljaGFyICplbmQ7CisJdW5zaWduZWQgbG9uZyBzdGFtcDsKKwlpbnQgb2ZzOworCisJaWYgKCpkYXRlIDwgJzAnIHx8ICc5JyA8ICpkYXRlKQorCQlyZXR1cm4gLTE7CisJc3RhbXAgPSBzdHJ0b3VsKGRhdGUsICZlbmQsIDEwKTsKKwlpZiAoKmVuZCAhPSAnICcgfHwgc3RhbXAgPT0gVUxPTkdfTUFYIHx8IChlbmRbMV0gIT0gJysnICYmIGVuZFsxXSAhPSAnLScpKQorCQlyZXR1cm4gLTE7CisJZGF0ZSA9IGVuZCArIDI7CisJb2ZzID0gc3RydG9sKGRhdGUsICZlbmQsIDEwKTsKKwlpZiAoKCplbmQgIT0gJ1wwJyAmJiAoKmVuZCAhPSAnXG4nKSkgfHwgZW5kICE9IGRhdGUgKyA0KQorCQlyZXR1cm4gLTE7CisJb2ZzID0gKG9mcyAvIDEwMCkgKiA2MCArIChvZnMgJSAxMDApOworCWlmIChkYXRlWy0xXSA9PSAnLScpCisJCW9mcyA9IC1vZnM7CisJKnRpbWVzdGFtcCA9IHN0YW1wOworCSpvZmZzZXQgPSBvZnM7CisJcmV0dXJuIDA7Cit9CisKKy8qIEdyLiBzdHJwdGltZSBpcyBjcmFwIGZvciB0aGlzOyBpdCBkb2Vzbid0IGhhdmUgYSB3YXkgdG8gcmVxdWlyZSBSRkMyODIyCisgICAoaS5lLiBFbmdsaXNoKSBkYXkvbW9udGggbmFtZXMsIGFuZCBpdCBkb2Vzbid0IHdvcmsgY29ycmVjdGx5IHdpdGggJXouICovCitpbnQgcGFyc2VfZGF0ZV9iYXNpYyhjb25zdCBjaGFyICpkYXRlLCB1bnNpZ25lZCBsb25nICp0aW1lc3RhbXAsIGludCAqb2Zmc2V0KQoreworCXN0cnVjdCB0bSB0bTsKKwlpbnQgdG1fZ210OworCXVuc2lnbmVkIGxvbmcgZHVtbXlfdGltZXN0YW1wOworCWludCBkdW1teV9vZmZzZXQ7CisKKwlpZiAoIXRpbWVzdGFtcCkKKwkJdGltZXN0YW1wID0gJmR1bW15X3RpbWVzdGFtcDsKKwlpZiAoIW9mZnNldCkKKwkJb2Zmc2V0ID0gJmR1bW15X29mZnNldDsKKworCW1lbXNldCgmdG0sIDAsIHNpemVvZih0bSkpOworCXRtLnRtX3llYXIgPSAtMTsKKwl0bS50bV9tb24gPSAtMTsKKwl0bS50bV9tZGF5ID0gLTE7CisJdG0udG1faXNkc3QgPSAtMTsKKwl0bS50bV9ob3VyID0gLTE7CisJdG0udG1fbWluID0gLTE7CisJdG0udG1fc2VjID0gLTE7CisJKm9mZnNldCA9IC0xOworCXRtX2dtdCA9IDA7CisKKwlpZiAoKmRhdGUgPT0gJ0AnICYmCisJICAgICFtYXRjaF9vYmplY3RfaGVhZGVyX2RhdGUoZGF0ZSArIDEsIHRpbWVzdGFtcCwgb2Zmc2V0KSkKKwkJcmV0dXJuIDA7IC8qIHN1Y2Nlc3MgKi8KKwlmb3IgKDs7KSB7CisJCWludCBtYXRjaCA9IDA7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICpkYXRlOworCisJCS8qIFN0b3AgYXQgZW5kIG9mIHN0cmluZyBvciBuZXdsaW5lICovCisJCWlmICghYyB8fCBjID09ICdcbicpCisJCQlicmVhazsKKworCQlpZiAoaXNhbHBoYShjKSkKKwkJCW1hdGNoID0gbWF0Y2hfYWxwaGEoZGF0ZSwgJnRtLCBvZmZzZXQpOworCQllbHNlIGlmIChpc2RpZ2l0KGMpKQorCQkJbWF0Y2ggPSBtYXRjaF9kaWdpdChkYXRlLCAmdG0sIG9mZnNldCwgJnRtX2dtdCk7CisJCWVsc2UgaWYgKChjID09ICctJyB8fCBjID09ICcrJykgJiYgaXNkaWdpdChkYXRlWzFdKSkKKwkJCW1hdGNoID0gbWF0Y2hfdHooZGF0ZSwgb2Zmc2V0KTsKKworCQlpZiAoIW1hdGNoKSB7CisJCQkvKiBCQUQgQ1JBUCAqLworCQkJbWF0Y2ggPSAxOworCQl9CisKKwkJZGF0ZSArPSBtYXRjaDsKKwl9CisKKwkvKiBkbyBub3QgdXNlIG1rdGltZSgpLCB3aGljaCB1c2VzIGxvY2FsIHRpbWV6b25lLCBoZXJlICovCisJKnRpbWVzdGFtcCA9IHRtX3RvX3RpbWVfdCgmdG0pOworCWlmICgqdGltZXN0YW1wID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKm9mZnNldCA9PSAtMSkgeworCQl0aW1lX3QgdGVtcF90aW1lOworCisJCS8qIGdtdGltZV9yKCkgaW4gbWF0Y2hfZGlnaXQoKSBtYXkgaGF2ZSBjbG9iYmVyZWQgaXQgKi8KKwkJdG0udG1faXNkc3QgPSAtMTsKKwkJdGVtcF90aW1lID0gbWt0aW1lKCZ0bSk7CisJCWlmICgodGltZV90KSp0aW1lc3RhbXAgPiB0ZW1wX3RpbWUpIHsKKwkJCSpvZmZzZXQgPSAoKHRpbWVfdCkqdGltZXN0YW1wIC0gdGVtcF90aW1lKSAvIDYwOworCQl9IGVsc2UgeworCQkJKm9mZnNldCA9IC0oaW50KSgodGVtcF90aW1lIC0gKHRpbWVfdCkqdGltZXN0YW1wKSAvIDYwKTsKKwkJfQorCX0KKworCWlmICghdG1fZ210KQorCQkqdGltZXN0YW1wIC09ICpvZmZzZXQgKiA2MDsKKwlyZXR1cm4gMDsgLyogc3VjY2VzcyAqLworfQorCitpbnQgcGFyc2VfZXhwaXJ5X2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgdW5zaWduZWQgbG9uZyAqdGltZXN0YW1wKQoreworCWludCBlcnJvcnMgPSAwOworCisJaWYgKCFzdHJjbXAoZGF0ZSwgIm5ldmVyIikgfHwgIXN0cmNtcChkYXRlLCAiZmFsc2UiKSkKKwkJKnRpbWVzdGFtcCA9IDA7CisJZWxzZSBpZiAoIXN0cmNtcChkYXRlLCAiYWxsIikgfHwgIXN0cmNtcChkYXRlLCAibm93IikpCisJCS8qCisJCSAqIFdlIHRha2Ugb3ZlciAibm93IiBoZXJlLCB3aGljaCB1c3VhbGx5IHRyYW5zbGF0ZXMKKwkJICogdG8gdGhlIGN1cnJlbnQgdGltZXN0YW1wLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSB1c2VyCisJCSAqIHJlYWxseSBtZWFucyB0byBleHBpcmUgZXZlcnl0aGluZyBzaGUgaGFzIGRvbmUgaW4KKwkJICogdGhlIHBhc3QsIGFuZCBieSBkZWZpbml0aW9uIHJlZmxvZ3MgYXJlIHRoZSByZWNvcmQKKwkJICogb2YgdGhlIHBhc3QsIGFuZCB0aGVyZSBpcyBub3RoaW5nIGZyb20gdGhlIGZ1dHVyZQorCQkgKiB0byBiZSBrZXB0LgorCQkgKi8KKwkJKnRpbWVzdGFtcCA9IFVMT05HX01BWDsKKwllbHNlCisJCSp0aW1lc3RhbXAgPSBhcHByb3hpZGF0ZV9jYXJlZnVsKGRhdGUsICZlcnJvcnMpOworCisJcmV0dXJuIGVycm9yczsKK30KKworaW50IHBhcnNlX2RhdGUoY29uc3QgY2hhciAqZGF0ZSwgc3RydWN0IHN0cmJ1ZiAqcmVzdWx0KQoreworCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOworCWludCBvZmZzZXQ7CisJaWYgKHBhcnNlX2RhdGVfYmFzaWMoZGF0ZSwgJnRpbWVzdGFtcCwgJm9mZnNldCkpCisJCXJldHVybiAtMTsKKwlkYXRlX3N0cmluZyh0aW1lc3RhbXAsIG9mZnNldCwgcmVzdWx0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gZGF0ZV9tb2RlX3R5cGUgcGFyc2VfZGF0ZV90eXBlKGNvbnN0IGNoYXIgKmZvcm1hdCwgY29uc3QgY2hhciAqKmVuZCkKK3sKKwlpZiAoc2tpcF9wcmVmaXgoZm9ybWF0LCAicmVsYXRpdmUiLCBlbmQpKQorCQlyZXR1cm4gREFURV9SRUxBVElWRTsKKwlpZiAoc2tpcF9wcmVmaXgoZm9ybWF0LCAiaXNvODYwMS1zdHJpY3QiLCBlbmQpIHx8CisJICAgIHNraXBfcHJlZml4KGZvcm1hdCwgImlzby1zdHJpY3QiLCBlbmQpKQorCQlyZXR1cm4gREFURV9JU084NjAxX1NUUklDVDsKKwlpZiAoc2tpcF9wcmVmaXgoZm9ybWF0LCAiaXNvODYwMSIsIGVuZCkgfHwKKwkgICAgc2tpcF9wcmVmaXgoZm9ybWF0LCAiaXNvIiwgZW5kKSkKKwkJcmV0dXJuIERBVEVfSVNPODYwMTsKKwlpZiAoc2tpcF9wcmVmaXgoZm9ybWF0LCAicmZjMjgyMiIsIGVuZCkgfHwKKwkgICAgc2tpcF9wcmVmaXgoZm9ybWF0LCAicmZjIiwgZW5kKSkKKwkJcmV0dXJuIERBVEVfUkZDMjgyMjsKKwlpZiAoc2tpcF9wcmVmaXgoZm9ybWF0LCAic2hvcnQiLCBlbmQpKQorCQlyZXR1cm4gREFURV9TSE9SVDsKKwlpZiAoc2tpcF9wcmVmaXgoZm9ybWF0LCAiZGVmYXVsdCIsIGVuZCkpCisJCXJldHVybiBEQVRFX05PUk1BTDsKKwlpZiAoc2tpcF9wcmVmaXgoZm9ybWF0LCAicmF3IiwgZW5kKSkKKwkJcmV0dXJuIERBVEVfUkFXOworCWlmIChza2lwX3ByZWZpeChmb3JtYXQsICJmb3JtYXQiLCBlbmQpKQorCQlyZXR1cm4gREFURV9TVFJGVElNRTsKKworCWRpZSgidW5rbm93biBkYXRlIGZvcm1hdCAlcyIsIGZvcm1hdCk7Cit9CisKK3ZvaWQgcGFyc2VfZGF0ZV9mb3JtYXQoY29uc3QgY2hhciAqZm9ybWF0LCBzdHJ1Y3QgZGF0ZV9tb2RlICptb2RlKQoreworCWNvbnN0IGNoYXIgKnA7CisKKwkvKiBoaXN0b3JpY2FsIGFsaWFzICovCisJaWYgKCFzdHJjbXAoZm9ybWF0LCAibG9jYWwiKSkKKwkJZm9ybWF0ID0gImRlZmF1bHQtbG9jYWwiOworCisJbW9kZS0+dHlwZSA9IHBhcnNlX2RhdGVfdHlwZShmb3JtYXQsICZwKTsKKwltb2RlLT5sb2NhbCA9IDA7CisKKwlpZiAoc2tpcF9wcmVmaXgocCwgIi1sb2NhbCIsICZwKSkKKwkJbW9kZS0+bG9jYWwgPSAxOworCisJaWYgKG1vZGUtPnR5cGUgPT0gREFURV9TVFJGVElNRSkgeworCQlpZiAoIXNraXBfcHJlZml4KHAsICI6IiwgJnApKQorCQkJZGllKCJkYXRlIGZvcm1hdCBtaXNzaW5nIGNvbG9uIHNlcGFyYXRvcjogJXMiLCBmb3JtYXQpOworCQltb2RlLT5zdHJmdGltZV9mbXQgPSB4c3RyZHVwKHApOworCX0gZWxzZSBpZiAoKnApCisJCWRpZSgidW5rbm93biBkYXRlIGZvcm1hdCAlcyIsIGZvcm1hdCk7Cit9CisKK3ZvaWQgZGF0ZXN0YW1wKHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwl0aW1lX3Qgbm93OworCWludCBvZmZzZXQ7CisKKwl0aW1lKCZub3cpOworCisJb2Zmc2V0ID0gdG1fdG9fdGltZV90KGxvY2FsdGltZSgmbm93KSkgLSBub3c7CisJb2Zmc2V0IC89IDYwOworCisJZGF0ZV9zdHJpbmcobm93LCBvZmZzZXQsIG91dCk7Cit9CisKKy8qCisgKiBSZWxhdGl2ZSB0aW1lIHVwZGF0ZSAoZWcgIjIgZGF5cyBhZ28iKS4gIElmIHdlIGhhdmVuJ3Qgc2V0IHRoZSB0aW1lCisgKiB5ZXQsIHdlIG5lZWQgdG8gc2V0IGl0IGZyb20gY3VycmVudCB0aW1lLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1cGRhdGVfdG0oc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIHVuc2lnbmVkIGxvbmcgc2VjKQoreworCXRpbWVfdCBuOworCisJaWYgKHRtLT50bV9tZGF5IDwgMCkKKwkJdG0tPnRtX21kYXkgPSBub3ctPnRtX21kYXk7CisJaWYgKHRtLT50bV9tb24gPCAwKQorCQl0bS0+dG1fbW9uID0gbm93LT50bV9tb247CisJaWYgKHRtLT50bV95ZWFyIDwgMCkgeworCQl0bS0+dG1feWVhciA9IG5vdy0+dG1feWVhcjsKKwkJaWYgKHRtLT50bV9tb24gPiBub3ctPnRtX21vbikKKwkJCXRtLT50bV95ZWFyLS07CisJfQorCisJbiA9IG1rdGltZSh0bSkgLSBzZWM7CisJbG9jYWx0aW1lX3IoJm4sIHRtKTsKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgZGF0ZV9ub3coc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCXVwZGF0ZV90bSh0bSwgbm93LCAwKTsKK30KKworc3RhdGljIHZvaWQgZGF0ZV95ZXN0ZXJkYXkoc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCXVwZGF0ZV90bSh0bSwgbm93LCAyNCo2MCo2MCk7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfdGltZShzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50IGhvdXIpCit7CisJaWYgKHRtLT50bV9ob3VyIDwgaG91cikKKwkJZGF0ZV95ZXN0ZXJkYXkodG0sIG5vdywgTlVMTCk7CisJdG0tPnRtX2hvdXIgPSBob3VyOworCXRtLT50bV9taW4gPSAwOworCXRtLT50bV9zZWMgPSAwOworfQorCitzdGF0aWMgdm9pZCBkYXRlX21pZG5pZ2h0KHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSkKK3sKKwlkYXRlX3RpbWUodG0sIG5vdywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfbm9vbihzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0pCit7CisJZGF0ZV90aW1lKHRtLCBub3csIDEyKTsKK30KKworc3RhdGljIHZvaWQgZGF0ZV90ZWEoc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCWRhdGVfdGltZSh0bSwgbm93LCAxNyk7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfcG0oc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCWludCBob3VyLCBuID0gKm51bTsKKwkqbnVtID0gMDsKKworCWhvdXIgPSB0bS0+dG1faG91cjsKKwlpZiAobikgeworCQlob3VyID0gbjsKKwkJdG0tPnRtX21pbiA9IDA7CisJCXRtLT50bV9zZWMgPSAwOworCX0KKwl0bS0+dG1faG91ciA9IChob3VyICUgMTIpICsgMTI7Cit9CisKK3N0YXRpYyB2b2lkIGRhdGVfYW0oc3RydWN0IHRtICp0bSwgc3RydWN0IHRtICpub3csIGludCAqbnVtKQoreworCWludCBob3VyLCBuID0gKm51bTsKKwkqbnVtID0gMDsKKworCWhvdXIgPSB0bS0+dG1faG91cjsKKwlpZiAobikgeworCQlob3VyID0gbjsKKwkJdG0tPnRtX21pbiA9IDA7CisJCXRtLT50bV9zZWMgPSAwOworCX0KKwl0bS0+dG1faG91ciA9IChob3VyICUgMTIpOworfQorCitzdGF0aWMgdm9pZCBkYXRlX25ldmVyKHN0cnVjdCB0bSAqdG0sIHN0cnVjdCB0bSAqbm93LCBpbnQgKm51bSkKK3sKKwl0aW1lX3QgbiA9IDA7CisJbG9jYWx0aW1lX3IoJm4sIHRtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcGVjaWFsIHsKKwljb25zdCBjaGFyICpuYW1lOworCXZvaWQgKCpmbikoc3RydWN0IHRtICosIHN0cnVjdCB0bSAqLCBpbnQgKik7Cit9IHNwZWNpYWxbXSA9IHsKKwl7ICJ5ZXN0ZXJkYXkiLCBkYXRlX3llc3RlcmRheSB9LAorCXsgIm5vb24iLCBkYXRlX25vb24gfSwKKwl7ICJtaWRuaWdodCIsIGRhdGVfbWlkbmlnaHQgfSwKKwl7ICJ0ZWEiLCBkYXRlX3RlYSB9LAorCXsgIlBNIiwgZGF0ZV9wbSB9LAorCXsgIkFNIiwgZGF0ZV9hbSB9LAorCXsgIm5ldmVyIiwgZGF0ZV9uZXZlciB9LAorCXsgIm5vdyIsIGRhdGVfbm93IH0sCisJeyBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpudW1iZXJfbmFtZVtdID0geworCSJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsCisJImZpdmUiLCAic2l4IiwgInNldmVuIiwgImVpZ2h0IiwgIm5pbmUiLCAidGVuIiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHlwZWxlbiB7CisJY29uc3QgY2hhciAqdHlwZTsKKwlpbnQgbGVuZ3RoOworfSB0eXBlbGVuW10gPSB7CisJeyAic2Vjb25kcyIsIDEgfSwKKwl7ICJtaW51dGVzIiwgNjAgfSwKKwl7ICJob3VycyIsIDYwKjYwIH0sCisJeyAiZGF5cyIsIDI0KjYwKjYwIH0sCisJeyAid2Vla3MiLCA3KjI0KjYwKjYwIH0sCisJeyBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICphcHByb3hpZGF0ZV9hbHBoYShjb25zdCBjaGFyICpkYXRlLCBzdHJ1Y3QgdG0gKnRtLCBzdHJ1Y3QgdG0gKm5vdywgaW50ICpudW0sIGludCAqdG91Y2hlZCkKK3sKKwljb25zdCBzdHJ1Y3QgdHlwZWxlbiAqdGw7CisJY29uc3Qgc3RydWN0IHNwZWNpYWwgKnM7CisJY29uc3QgY2hhciAqZW5kID0gZGF0ZTsKKwlpbnQgaTsKKworCXdoaWxlIChpc2FscGhhKCorK2VuZCkpCisJCTsKKworCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJCWludCBtYXRjaCA9IG1hdGNoX3N0cmluZyhkYXRlLCBtb250aF9uYW1lc1tpXSk7CisJCWlmIChtYXRjaCA+PSAzKSB7CisJCQl0bS0+dG1fbW9uID0gaTsKKwkJCSp0b3VjaGVkID0gMTsKKwkJCXJldHVybiBlbmQ7CisJCX0KKwl9CisKKwlmb3IgKHMgPSBzcGVjaWFsOyBzLT5uYW1lOyBzKyspIHsKKwkJaW50IGxlbiA9IHN0cmxlbihzLT5uYW1lKTsKKwkJaWYgKG1hdGNoX3N0cmluZyhkYXRlLCBzLT5uYW1lKSA9PSBsZW4pIHsKKwkJCXMtPmZuKHRtLCBub3csIG51bSk7CisJCQkqdG91Y2hlZCA9IDE7CisJCQlyZXR1cm4gZW5kOworCQl9CisJfQorCisJaWYgKCEqbnVtKSB7CisJCWZvciAoaSA9IDE7IGkgPCAxMTsgaSsrKSB7CisJCQlpbnQgbGVuID0gc3RybGVuKG51bWJlcl9uYW1lW2ldKTsKKwkJCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgbnVtYmVyX25hbWVbaV0pID09IGxlbikgeworCQkJCSpudW0gPSBpOworCQkJCSp0b3VjaGVkID0gMTsKKwkJCQlyZXR1cm4gZW5kOworCQkJfQorCQl9CisJCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgImxhc3QiKSA9PSA0KSB7CisJCQkqbnVtID0gMTsKKwkJCSp0b3VjaGVkID0gMTsKKwkJfQorCQlyZXR1cm4gZW5kOworCX0KKworCXRsID0gdHlwZWxlbjsKKwl3aGlsZSAodGwtPnR5cGUpIHsKKwkJaW50IGxlbiA9IHN0cmxlbih0bC0+dHlwZSk7CisJCWlmIChtYXRjaF9zdHJpbmcoZGF0ZSwgdGwtPnR5cGUpID49IGxlbi0xKSB7CisJCQl1cGRhdGVfdG0odG0sIG5vdywgdGwtPmxlbmd0aCAqICpudW0pOworCQkJKm51bSA9IDA7CisJCQkqdG91Y2hlZCA9IDE7CisJCQlyZXR1cm4gZW5kOworCQl9CisJCXRsKys7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykgeworCQlpbnQgbWF0Y2ggPSBtYXRjaF9zdHJpbmcoZGF0ZSwgd2Vla2RheV9uYW1lc1tpXSk7CisJCWlmIChtYXRjaCA+PSAzKSB7CisJCQlpbnQgZGlmZiwgbiA9ICpudW0gLTE7CisJCQkqbnVtID0gMDsKKworCQkJZGlmZiA9IHRtLT50bV93ZGF5IC0gaTsKKwkJCWlmIChkaWZmIDw9IDApCisJCQkJbisrOworCQkJZGlmZiArPSA3Km47CisKKwkJCXVwZGF0ZV90bSh0bSwgbm93LCBkaWZmICogMjQgKiA2MCAqIDYwKTsKKwkJCSp0b3VjaGVkID0gMTsKKwkJCXJldHVybiBlbmQ7CisJCX0KKwl9CisKKwlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsICJtb250aHMiKSA+PSA1KSB7CisJCWludCBuOworCQl1cGRhdGVfdG0odG0sIG5vdywgMCk7IC8qIGZpbGwgaW4gZGF0ZSBmaWVsZHMgaWYgbmVlZGVkICovCisJCW4gPSB0bS0+dG1fbW9uIC0gKm51bTsKKwkJKm51bSA9IDA7CisJCXdoaWxlIChuIDwgMCkgeworCQkJbiArPSAxMjsKKwkJCXRtLT50bV95ZWFyLS07CisJCX0KKwkJdG0tPnRtX21vbiA9IG47CisJCSp0b3VjaGVkID0gMTsKKwkJcmV0dXJuIGVuZDsKKwl9CisKKwlpZiAobWF0Y2hfc3RyaW5nKGRhdGUsICJ5ZWFycyIpID49IDQpIHsKKwkJdXBkYXRlX3RtKHRtLCBub3csIDApOyAvKiBmaWxsIGluIGRhdGUgZmllbGRzIGlmIG5lZWRlZCAqLworCQl0bS0+dG1feWVhciAtPSAqbnVtOworCQkqbnVtID0gMDsKKwkJKnRvdWNoZWQgPSAxOworCQlyZXR1cm4gZW5kOworCX0KKworCXJldHVybiBlbmQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICphcHByb3hpZGF0ZV9kaWdpdChjb25zdCBjaGFyICpkYXRlLCBzdHJ1Y3QgdG0gKnRtLCBpbnQgKm51bSwKKwkJCQkgICAgIHRpbWVfdCBub3cpCit7CisJY2hhciAqZW5kOworCXVuc2lnbmVkIGxvbmcgbnVtYmVyID0gc3RydG91bChkYXRlLCAmZW5kLCAxMCk7CisKKwlzd2l0Y2ggKCplbmQpIHsKKwljYXNlICc6JzoKKwljYXNlICcuJzoKKwljYXNlICcvJzoKKwljYXNlICctJzoKKwkJaWYgKGlzZGlnaXQoZW5kWzFdKSkgeworCQkJaW50IG1hdGNoID0gbWF0Y2hfbXVsdGlfbnVtYmVyKG51bWJlciwgKmVuZCwgZGF0ZSwgZW5kLAorCQkJCQkJICAgICAgIHRtLCBub3cpOworCQkJaWYgKG1hdGNoKQorCQkJCXJldHVybiBkYXRlICsgbWF0Y2g7CisJCX0KKwl9CisKKwkvKiBBY2NlcHQgemVyby1wYWRkaW5nIG9ubHkgZm9yIHNtYWxsIG51bWJlcnMgKCJEZWMgMDIiLCBuZXZlciAiRGVjIDAwMDIiKSAqLworCWlmIChkYXRlWzBdICE9ICcwJyB8fCBlbmQgLSBkYXRlIDw9IDIpCisJCSpudW0gPSBudW1iZXI7CisJcmV0dXJuIGVuZDsKK30KKworLyoKKyAqIERvIHdlIGhhdmUgYSBwZW5kaW5nIG51bWJlciBhdCB0aGUgZW5kLCBvciB3aGVuCisgKiB3ZSBzZWUgYSBuZXcgb25lPyBMZXQncyBhc3N1bWUgaXQncyBhIG1vbnRoIGRheSwKKyAqIGFzIGluICJEZWMgNiwgMTk5MiIKKyAqLworc3RhdGljIHZvaWQgcGVuZGluZ19udW1iZXIoc3RydWN0IHRtICp0bSwgaW50ICpudW0pCit7CisJaW50IG51bWJlciA9ICpudW07CisKKwlpZiAobnVtYmVyKSB7CisJCSpudW0gPSAwOworCQlpZiAodG0tPnRtX21kYXkgPCAwICYmIG51bWJlciA8IDMyKQorCQkJdG0tPnRtX21kYXkgPSBudW1iZXI7CisJCWVsc2UgaWYgKHRtLT50bV9tb24gPCAwICYmIG51bWJlciA8IDEzKQorCQkJdG0tPnRtX21vbiA9IG51bWJlci0xOworCQllbHNlIGlmICh0bS0+dG1feWVhciA8IDApIHsKKwkJCWlmIChudW1iZXIgPiAxOTY5ICYmIG51bWJlciA8IDIxMDApCisJCQkJdG0tPnRtX3llYXIgPSBudW1iZXIgLSAxOTAwOworCQkJZWxzZSBpZiAobnVtYmVyID4gNjkgJiYgbnVtYmVyIDwgMTAwKQorCQkJCXRtLT50bV95ZWFyID0gbnVtYmVyOworCQkJZWxzZSBpZiAobnVtYmVyIDwgMzgpCisJCQkJdG0tPnRtX3llYXIgPSAxMDAgKyBudW1iZXI7CisJCQkvKiBXZSBzY3JldyB1cCBmb3IgbnVtYmVyID0gMDAgPyAqLworCQl9CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhcHByb3hpZGF0ZV9zdHIoY29uc3QgY2hhciAqZGF0ZSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0diwKKwkJCQkgICAgIGludCAqZXJyb3JfcmV0KQoreworCWludCBudW1iZXIgPSAwOworCWludCB0b3VjaGVkID0gMDsKKwlzdHJ1Y3QgdG0gdG0sIG5vdzsKKwl0aW1lX3QgdGltZV9zZWM7CisKKwl0aW1lX3NlYyA9IHR2LT50dl9zZWM7CisJbG9jYWx0aW1lX3IoJnRpbWVfc2VjLCAmdG0pOworCW5vdyA9IHRtOworCisJdG0udG1feWVhciA9IC0xOworCXRtLnRtX21vbiA9IC0xOworCXRtLnRtX21kYXkgPSAtMTsKKworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKmRhdGU7CisJCWlmICghYykKKwkJCWJyZWFrOworCQlkYXRlKys7CisJCWlmIChpc2RpZ2l0KGMpKSB7CisJCQlwZW5kaW5nX251bWJlcigmdG0sICZudW1iZXIpOworCQkJZGF0ZSA9IGFwcHJveGlkYXRlX2RpZ2l0KGRhdGUtMSwgJnRtLCAmbnVtYmVyLCB0aW1lX3NlYyk7CisJCQl0b3VjaGVkID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpc2FscGhhKGMpKQorCQkJZGF0ZSA9IGFwcHJveGlkYXRlX2FscGhhKGRhdGUtMSwgJnRtLCAmbm93LCAmbnVtYmVyLCAmdG91Y2hlZCk7CisJfQorCXBlbmRpbmdfbnVtYmVyKCZ0bSwgJm51bWJlcik7CisJaWYgKCF0b3VjaGVkKQorCQkqZXJyb3JfcmV0ID0gMTsKKwlyZXR1cm4gdXBkYXRlX3RtKCZ0bSwgJm5vdywgMCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgYXBwcm94aWRhdGVfcmVsYXRpdmUoY29uc3QgY2hhciAqZGF0ZSwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2KQoreworCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOworCWludCBvZmZzZXQ7CisJaW50IGVycm9ycyA9IDA7CisKKwlpZiAoIXBhcnNlX2RhdGVfYmFzaWMoZGF0ZSwgJnRpbWVzdGFtcCwgJm9mZnNldCkpCisJCXJldHVybiB0aW1lc3RhbXA7CisJcmV0dXJuIGFwcHJveGlkYXRlX3N0cihkYXRlLCB0diwgJmVycm9ycyk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgYXBwcm94aWRhdGVfY2FyZWZ1bChjb25zdCBjaGFyICpkYXRlLCBpbnQgKmVycm9yX3JldCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKKwlpbnQgb2Zmc2V0OworCWludCBkdW1teSA9IDA7CisJaWYgKCFlcnJvcl9yZXQpCisJCWVycm9yX3JldCA9ICZkdW1teTsKKworCWlmICghcGFyc2VfZGF0ZV9iYXNpYyhkYXRlLCAmdGltZXN0YW1wLCAmb2Zmc2V0KSkgeworCQkqZXJyb3JfcmV0ID0gMDsKKwkJcmV0dXJuIHRpbWVzdGFtcDsKKwl9CisKKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwlyZXR1cm4gYXBwcm94aWRhdGVfc3RyKGRhdGUsICZ0diwgZXJyb3JfcmV0KTsKK30KKworaW50IGRhdGVfb3ZlcmZsb3dzKHVuc2lnbmVkIGxvbmcgdCkKK3sKKwl0aW1lX3Qgc3lzOworCisJLyogSWYgd2Ugb3ZlcmZsb3dlZCBvdXIgdW5zaWduZWQgbG9uZywgdGhhdCdzIGJhZC4uLiAqLworCWlmICh0ID09IFVMT05HX01BWCkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIC4uLmJ1dCB3ZSBhbHNvIGFyZSBnb2luZyB0byBmZWVkIHRoZSByZXN1bHQgdG8gc3lzdGVtCisJICogZnVuY3Rpb25zIHRoYXQgZXhwZWN0IHRpbWVfdCwgd2hpY2ggaXMgb2Z0ZW4gInNpZ25lZCBsb25nIi4KKwkgKiBNYWtlIHN1cmUgdGhhdCB3ZSBmaXQgaW50byB0aW1lX3QsIGFzIHdlbGwuCisJICovCisJc3lzID0gdDsKKwlyZXR1cm4gdCAhPSBzeXMgfHwgKHQgPCAxKSAhPSAoc3lzIDwgMSk7Cit9CmRpZmYgLS1naXQgYS9kZWNvcmF0ZS5jIGIvZGVjb3JhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmFhYzkwCi0tLSAvZGV2L251bGwKKysrIGIvZGVjb3JhdGUuYwpAQCAtMCwwICsxLDg1IEBACisvKgorICogZGVjb3JhdGUuYyAtIGRlY29yYXRlIGEgZ2l0IG9iamVjdCB3aXRoIHNvbWUgYXJiaXRyYXJ5CisgKiBkYXRhLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGhhc2hfb2JqKGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaiwgdW5zaWduZWQgaW50IG4pCit7CisJcmV0dXJuIHNoYTFoYXNoKG9iai0+c2hhMSkgJSBuOworfQorCitzdGF0aWMgdm9pZCAqaW5zZXJ0X2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIGNvbnN0IHN0cnVjdCBvYmplY3QgKmJhc2UsIHZvaWQgKmRlY29yYXRpb24pCit7CisJaW50IHNpemUgPSBuLT5zaXplOworCXN0cnVjdCBvYmplY3RfZGVjb3JhdGlvbiAqaGFzaCA9IG4tPmhhc2g7CisJdW5zaWduZWQgaW50IGogPSBoYXNoX29iaihiYXNlLCBzaXplKTsKKworCXdoaWxlIChoYXNoW2pdLmJhc2UpIHsKKwkJaWYgKGhhc2hbal0uYmFzZSA9PSBiYXNlKSB7CisJCQl2b2lkICpvbGQgPSBoYXNoW2pdLmRlY29yYXRpb247CisJCQloYXNoW2pdLmRlY29yYXRpb24gPSBkZWNvcmF0aW9uOworCQkJcmV0dXJuIG9sZDsKKwkJfQorCQlpZiAoKytqID49IHNpemUpCisJCQlqID0gMDsKKwl9CisJaGFzaFtqXS5iYXNlID0gYmFzZTsKKwloYXNoW2pdLmRlY29yYXRpb24gPSBkZWNvcmF0aW9uOworCW4tPm5yKys7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGdyb3dfZGVjb3JhdGlvbihzdHJ1Y3QgZGVjb3JhdGlvbiAqbikKK3sKKwlpbnQgaTsKKwlpbnQgb2xkX3NpemUgPSBuLT5zaXplOworCXN0cnVjdCBvYmplY3RfZGVjb3JhdGlvbiAqb2xkX2hhc2ggPSBuLT5oYXNoOworCisJbi0+c2l6ZSA9IChvbGRfc2l6ZSArIDEwMDApICogMyAvIDI7CisJbi0+aGFzaCA9IHhjYWxsb2Mobi0+c2l6ZSwgc2l6ZW9mKHN0cnVjdCBvYmplY3RfZGVjb3JhdGlvbikpOworCW4tPm5yID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBvbGRfc2l6ZTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBvYmplY3QgKmJhc2UgPSBvbGRfaGFzaFtpXS5iYXNlOworCQl2b2lkICpkZWNvcmF0aW9uID0gb2xkX2hhc2hbaV0uZGVjb3JhdGlvbjsKKworCQlpZiAoIWRlY29yYXRpb24pCisJCQljb250aW51ZTsKKwkJaW5zZXJ0X2RlY29yYXRpb24obiwgYmFzZSwgZGVjb3JhdGlvbik7CisJfQorCWZyZWUob2xkX2hhc2gpOworfQorCisvKiBBZGQgYSBkZWNvcmF0aW9uIHBvaW50ZXIsIHJldHVybiBhbnkgb2xkIG9uZSAqLwordm9pZCAqYWRkX2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaiwKKwkJdm9pZCAqZGVjb3JhdGlvbikKK3sKKwlpbnQgbnIgPSBuLT5uciArIDE7CisKKwlpZiAobnIgPiBuLT5zaXplICogMiAvIDMpCisJCWdyb3dfZGVjb3JhdGlvbihuKTsKKwlyZXR1cm4gaW5zZXJ0X2RlY29yYXRpb24obiwgb2JqLCBkZWNvcmF0aW9uKTsKK30KKworLyogTG9va3VwIGEgZGVjb3JhdGlvbiBwb2ludGVyICovCit2b2lkICpsb29rdXBfZGVjb3JhdGlvbihzdHJ1Y3QgZGVjb3JhdGlvbiAqbiwgY29uc3Qgc3RydWN0IG9iamVjdCAqb2JqKQoreworCXVuc2lnbmVkIGludCBqOworCisJLyogbm90aGluZyB0byBsb29rdXAgKi8KKwlpZiAoIW4tPnNpemUpCisJCXJldHVybiBOVUxMOworCWogPSBoYXNoX29iaihvYmosIG4tPnNpemUpOworCWZvciAoOzspIHsKKwkJc3RydWN0IG9iamVjdF9kZWNvcmF0aW9uICpyZWYgPSBuLT5oYXNoICsgajsKKwkJaWYgKHJlZi0+YmFzZSA9PSBvYmopCisJCQlyZXR1cm4gcmVmLT5kZWNvcmF0aW9uOworCQlpZiAoIXJlZi0+YmFzZSkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoKytqID09IG4tPnNpemUpCisJCQlqID0gMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9kZWNvcmF0ZS5oIGIvZGVjb3JhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzMyODA0Ci0tLSAvZGV2L251bGwKKysrIGIvZGVjb3JhdGUuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIERFQ09SQVRFX0gKKyNkZWZpbmUgREVDT1JBVEVfSAorCitzdHJ1Y3Qgb2JqZWN0X2RlY29yYXRpb24geworCWNvbnN0IHN0cnVjdCBvYmplY3QgKmJhc2U7CisJdm9pZCAqZGVjb3JhdGlvbjsKK307CisKK3N0cnVjdCBkZWNvcmF0aW9uIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBzaXplLCBucjsKKwlzdHJ1Y3Qgb2JqZWN0X2RlY29yYXRpb24gKmhhc2g7Cit9OworCitleHRlcm4gdm9pZCAqYWRkX2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaiwgdm9pZCAqZGVjb3JhdGlvbik7CitleHRlcm4gdm9pZCAqbG9va3VwX2RlY29yYXRpb24oc3RydWN0IGRlY29yYXRpb24gKm4sIGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZGVsdGEuaCBiL2RlbHRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI2NzUzMQotLS0gL2Rldi9udWxsCisrKyBiL2RlbHRhLmgKQEAgLTAsMCArMSwxMDQgQEAKKyNpZm5kZWYgREVMVEFfSAorI2RlZmluZSBERUxUQV9ICisKKy8qIG9wYXF1ZSBvYmplY3QgZm9yIGRlbHRhIGluZGV4ICovCitzdHJ1Y3QgZGVsdGFfaW5kZXg7CisKKy8qCisgKiBjcmVhdGVfZGVsdGFfaW5kZXg6IGNvbXB1dGUgaW5kZXggZGF0YSBmcm9tIGdpdmVuIGJ1ZmZlcgorICoKKyAqIFRoaXMgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGVsdGFfaW5kZXggdGhhdCBzaG91bGQgYmUgcGFzc2VkIHRvCisgKiBzdWJzZXF1ZW50IGNyZWF0ZV9kZWx0YSgpIGNhbGxzLCBvciB0byBmcmVlX2RlbHRhX2luZGV4KCkuICBBIE5VTEwgcG9pbnRlcgorICogaXMgcmV0dXJuZWQgb24gZmFpbHVyZS4gIFRoZSBnaXZlbiBidWZmZXIgbXVzdCBub3QgYmUgZnJlZWQgb3IgYWx0ZXJlZAorICogYmVmb3JlIGZyZWVfZGVsdGFfaW5kZXgoKSBpcyBjYWxsZWQuICBUaGUgcmV0dXJuZWQgcG9pbnRlciBtdXN0IGJlIGZyZWVkCisgKiB1c2luZyBmcmVlX2RlbHRhX2luZGV4KCkuCisgKi8KK2V4dGVybiBzdHJ1Y3QgZGVsdGFfaW5kZXggKgorY3JlYXRlX2RlbHRhX2luZGV4KGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBidWZzaXplKTsKKworLyoKKyAqIGZyZWVfZGVsdGFfaW5kZXg6IGZyZWUgdGhlIGluZGV4IGNyZWF0ZWQgYnkgY3JlYXRlX2RlbHRhX2luZGV4KCkKKyAqCisgKiBHaXZlbiBwb2ludGVyIG11c3QgYmUgd2hhdCBjcmVhdGVfZGVsdGFfaW5kZXgoKSByZXR1cm5lZCwgb3IgTlVMTC4KKyAqLworZXh0ZXJuIHZvaWQgZnJlZV9kZWx0YV9pbmRleChzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4KTsKKworLyoKKyAqIHNpemVvZl9kZWx0YV9pbmRleDogcmV0dXJucyBtZW1vcnkgdXNhZ2Ugb2YgZGVsdGEgaW5kZXgKKyAqCisgKiBHaXZlbiBwb2ludGVyIG11c3QgYmUgd2hhdCBjcmVhdGVfZGVsdGFfaW5kZXgoKSByZXR1cm5lZCwgb3IgTlVMTC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2l6ZW9mX2RlbHRhX2luZGV4KHN0cnVjdCBkZWx0YV9pbmRleCAqaW5kZXgpOworCisvKgorICogY3JlYXRlX2RlbHRhOiBjcmVhdGUgYSBkZWx0YSBmcm9tIGdpdmVuIGluZGV4IGZvciB0aGUgZ2l2ZW4gYnVmZmVyCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IGJ1ZmZlcnMgdXNpbmcKKyAqIHRoZSBzYW1lIGRlbHRhX2luZGV4IHBvaW50ZXIuICBJZiBtYXhfZGVsdGFfc2l6ZSBpcyBub24temVybyBhbmQgdGhlCisgKiByZXN1bHRpbmcgZGVsdGEgaXMgdG8gYmUgbGFyZ2VyIHRoYW4gbWF4X2RlbHRhX3NpemUgdGhlbiBOVUxMIGlzIHJldHVybmVkLgorICogT24gc3VjY2VzcywgYSBub24tTlVMTCBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2l0aCB0aGUgZGVsdGEgZGF0YSBpcworICogcmV0dXJuZWQgYW5kICpkZWx0YV9zaXplIGlzIHVwZGF0ZWQgd2l0aCBpdHMgc2l6ZS4gIFRoZSByZXR1cm5lZCBidWZmZXIKKyAqIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKyAqLworZXh0ZXJuIHZvaWQgKgorY3JlYXRlX2RlbHRhKGNvbnN0IHN0cnVjdCBkZWx0YV9pbmRleCAqaW5kZXgsCisJICAgICBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgYnVmc2l6ZSwKKwkgICAgIHVuc2lnbmVkIGxvbmcgKmRlbHRhX3NpemUsIHVuc2lnbmVkIGxvbmcgbWF4X2RlbHRhX3NpemUpOworCisvKgorICogZGlmZl9kZWx0YTogY3JlYXRlIGEgZGVsdGEgZnJvbSBzb3VyY2UgYnVmZmVyIHRvIHRhcmdldCBidWZmZXIKKyAqCisgKiBJZiBtYXhfZGVsdGFfc2l6ZSBpcyBub24temVybyBhbmQgdGhlIHJlc3VsdGluZyBkZWx0YSBpcyB0byBiZSBsYXJnZXIKKyAqIHRoYW4gbWF4X2RlbHRhX3NpemUgdGhlbiBOVUxMIGlzIHJldHVybmVkLiAgT24gc3VjY2VzcywgYSBub24tTlVMTAorICogcG9pbnRlciB0byB0aGUgYnVmZmVyIHdpdGggdGhlIGRlbHRhIGRhdGEgaXMgcmV0dXJuZWQgYW5kICpkZWx0YV9zaXplIGlzCisgKiB1cGRhdGVkIHdpdGggaXRzIHNpemUuICBUaGUgcmV0dXJuZWQgYnVmZmVyIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICoKK2RpZmZfZGVsdGEoY29uc3Qgdm9pZCAqc3JjX2J1ZiwgdW5zaWduZWQgbG9uZyBzcmNfYnVmc2l6ZSwKKwkgICBjb25zdCB2b2lkICp0cmdfYnVmLCB1bnNpZ25lZCBsb25nIHRyZ19idWZzaXplLAorCSAgIHVuc2lnbmVkIGxvbmcgKmRlbHRhX3NpemUsIHVuc2lnbmVkIGxvbmcgbWF4X2RlbHRhX3NpemUpCit7CisJc3RydWN0IGRlbHRhX2luZGV4ICppbmRleCA9IGNyZWF0ZV9kZWx0YV9pbmRleChzcmNfYnVmLCBzcmNfYnVmc2l6ZSk7CisJaWYgKGluZGV4KSB7CisJCXZvaWQgKmRlbHRhID0gY3JlYXRlX2RlbHRhKGluZGV4LCB0cmdfYnVmLCB0cmdfYnVmc2l6ZSwKKwkJCQkJICAgZGVsdGFfc2l6ZSwgbWF4X2RlbHRhX3NpemUpOworCQlmcmVlX2RlbHRhX2luZGV4KGluZGV4KTsKKwkJcmV0dXJuIGRlbHRhOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIHBhdGNoX2RlbHRhOiByZWNyZWF0ZSB0YXJnZXQgYnVmZmVyIGdpdmVuIHNvdXJjZSBidWZmZXIgYW5kIGRlbHRhIGRhdGEKKyAqCisgKiBPbiBzdWNjZXNzLCBhIG5vbi1OVUxMIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBidWZmZXIgaXMgcmV0dXJuZWQgYW5kCisgKiAqdHJnX2J1ZnNpemUgaXMgdXBkYXRlZCB3aXRoIGl0cyBzaXplLiAgT24gZmFpbHVyZSBhIE5VTEwgcG9pbnRlciBpcworICogcmV0dXJuZWQuICBUaGUgcmV0dXJuZWQgYnVmZmVyIG11c3QgYmUgZnJlZWQgYnkgdGhlIGNhbGxlci4KKyAqLworZXh0ZXJuIHZvaWQgKnBhdGNoX2RlbHRhKGNvbnN0IHZvaWQgKnNyY19idWYsIHVuc2lnbmVkIGxvbmcgc3JjX3NpemUsCisJCQkgY29uc3Qgdm9pZCAqZGVsdGFfYnVmLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsCisJCQkgdW5zaWduZWQgbG9uZyAqZHN0X3NpemUpOworCisvKiB0aGUgc21hbGxlc3QgcG9zc2libGUgZGVsdGEgc2l6ZSBpcyA0IGJ5dGVzICovCisjZGVmaW5lIERFTFRBX1NJWkVfTUlOCTQKKworLyoKKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgdHdpY2Ugb24gdGhlIGRlbHRhIGRhdGEgYnVmZmVyLCBmaXJzdCB0byBnZXQgdGhlCisgKiBleHBlY3RlZCBzb3VyY2UgYnVmZmVyIHNpemUsIGFuZCBhZ2FpbiB0byBnZXQgdGhlIHRhcmdldCBidWZmZXIgc2l6ZS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9kZWx0YV9oZHJfc2l6ZShjb25zdCB1bnNpZ25lZCBjaGFyICoqZGF0YXAsCisJCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0b3ApCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSA9ICpkYXRhcDsKKwl1bnNpZ25lZCBsb25nIGNtZCwgc2l6ZSA9IDA7CisJaW50IGkgPSAwOworCWRvIHsKKwkJY21kID0gKmRhdGErKzsKKwkJc2l6ZSB8PSAoY21kICYgMHg3ZikgPDwgaTsKKwkJaSArPSA3OworCX0gd2hpbGUgKGNtZCAmIDB4ODAgJiYgZGF0YSA8IHRvcCk7CisJKmRhdGFwID0gZGF0YTsKKwlyZXR1cm4gc2l6ZTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kaWZmLWRlbHRhLmMgYi9kaWZmLWRlbHRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5N2NlNgotLS0gL2Rldi9udWxsCisrKyBiL2RpZmYtZGVsdGEuYwpAQCAtMCwwICsxLDQ4OSBAQAorLyoKKyAqIGRpZmYtZGVsdGEuYzogZ2VuZXJhdGUgYSBkZWx0YSBiZXR3ZWVuIHR3byBidWZmZXJzCisgKgorICogVGhpcyBjb2RlIHdhcyBncmVhdGx5IGluc3BpcmVkIGJ5IHBhcnRzIG9mIExpYlhEaWZmIGZyb20gRGF2aWRlIExpYmVuemkKKyAqIGh0dHA6Ly93d3cueG1haWxzZXJ2ZXIub3JnL3hkaWZmLWxpYi5odG1sCisgKgorICogUmV3cml0dGVuIGZvciBHSVQgYnkgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4sIChDKSAyMDA1LTIwMDcKKyAqCisgKiBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorCisvKiBtYXhpbXVtIGhhc2ggZW50cnkgbGlzdCBmb3IgdGhlIHNhbWUgaGFzaCBidWNrZXQgKi8KKyNkZWZpbmUgSEFTSF9MSU1JVCA2NAorCisjZGVmaW5lIFJBQklOX1NISUZUIDIzCisjZGVmaW5lIFJBQklOX1dJTkRPVyAxNgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRbMjU2XSA9IHsKKwkweDAwMDAwMDAwLCAweGFiNTliNGQxLCAweDU2YjM2OWEyLCAweGZkZWFkZDczLCAweDA2M2Y2Nzk1LCAweGFkNjZkMzQ0LAorCTB4NTA4YzBlMzcsIDB4ZmJkNWJhZTYsIDB4MGM3ZWNmMmEsIDB4YTcyNzdiZmIsIDB4NWFjZGE2ODgsIDB4ZjE5NDEyNTksCisJMHgwYTQxYThiZiwgMHhhMTE4MWM2ZSwgMHg1Y2YyYzExZCwgMHhmN2FiNzVjYywgMHgxOGZkOWU1NCwgMHhiM2E0MmE4NSwKKwkweDRlNGVmN2Y2LCAweGU1MTc0MzI3LCAweDFlYzJmOWMxLCAweGI1OWI0ZDEwLCAweDQ4NzE5MDYzLCAweGUzMjgyNGIyLAorCTB4MTQ4MzUxN2UsIDB4YmZkYWU1YWYsIDB4NDIzMDM4ZGMsIDB4ZTk2OThjMGQsIDB4MTJiYzM2ZWIsIDB4YjllNTgyM2EsCisJMHg0NDBmNWY0OSwgMHhlZjU2ZWI5OCwgMHgzMWZiM2NhOCwgMHg5YWEyODg3OSwgMHg2NzQ4NTUwYSwgMHhjYzExZTFkYiwKKwkweDM3YzQ1YjNkLCAweDljOWRlZmVjLCAweDYxNzczMjlmLCAweGNhMmU4NjRlLCAweDNkODVmMzgyLCAweDk2ZGM0NzUzLAorCTB4NmIzNjlhMjAsIDB4YzA2ZjJlZjEsIDB4M2JiYTk0MTcsIDB4OTBlMzIwYzYsIDB4NmQwOWZkYjUsIDB4YzY1MDQ5NjQsCisJMHgyOTA2YTJmYywgMHg4MjVmMTYyZCwgMHg3ZmI1Y2I1ZSwgMHhkNGVjN2Y4ZiwgMHgyZjM5YzU2OSwgMHg4NDYwNzFiOCwKKwkweDc5OGFhY2NiLCAweGQyZDMxODFhLCAweDI1Nzg2ZGQ2LCAweDhlMjFkOTA3LCAweDczY2IwNDc0LCAweGQ4OTJiMGE1LAorCTB4MjM0NzBhNDMsIDB4ODgxZWJlOTIsIDB4NzVmNDYzZTEsIDB4ZGVhZGQ3MzAsIDB4NjNmNjc5NTAsIDB4YzhhZmNkODEsCisJMHgzNTQ1MTBmMiwgMHg5ZTFjYTQyMywgMHg2NWM5MWVjNSwgMHhjZTkwYWExNCwgMHgzMzdhNzc2NywgMHg5ODIzYzNiNiwKKwkweDZmODhiNjdhLCAweGM0ZDEwMmFiLCAweDM5M2JkZmQ4LCAweDkyNjI2YjA5LCAweDY5YjdkMWVmLCAweGMyZWU2NTNlLAorCTB4M2YwNGI4NGQsIDB4OTQ1ZDBjOWMsIDB4N2IwYmU3MDQsIDB4ZDA1MjUzZDUsIDB4MmRiODhlYTYsIDB4ODZlMTNhNzcsCisJMHg3ZDM0ODA5MSwgMHhkNjZkMzQ0MCwgMHgyYjg3ZTkzMywgMHg4MGRlNWRlMiwgMHg3Nzc1MjgyZSwgMHhkYzJjOWNmZiwKKwkweDIxYzY0MThjLCAweDhhOWZmNTVkLCAweDcxNGE0ZmJiLCAweGRhMTNmYjZhLCAweDI3ZjkyNjE5LCAweDhjYTA5MmM4LAorCTB4NTIwZDQ1ZjgsIDB4Zjk1NGYxMjksIDB4MDRiZTJjNWEsIDB4YWZlNzk4OGIsIDB4NTQzMjIyNmQsIDB4ZmY2Yjk2YmMsCisJMHgwMjgxNGJjZiwgMHhhOWQ4ZmYxZSwgMHg1ZTczOGFkMiwgMHhmNTJhM2UwMywgMHgwOGMwZTM3MCwgMHhhMzk5NTdhMSwKKwkweDU4NGNlZDQ3LCAweGYzMTU1OTk2LCAweDBlZmY4NGU1LCAweGE1YTYzMDM0LCAweDRhZjBkYmFjLCAweGUxYTk2ZjdkLAorCTB4MWM0M2IyMGUsIDB4YjcxYTA2ZGYsIDB4NGNjZmJjMzksIDB4ZTc5NjA4ZTgsIDB4MWE3Y2Q1OWIsIDB4YjEyNTYxNGEsCisJMHg0NjhlMTQ4NiwgMHhlZGQ3YTA1NywgMHgxMDNkN2QyNCwgMHhiYjY0YzlmNSwgMHg0MGIxNzMxMywgMHhlYmU4YzdjMiwKKwkweDE2MDIxYWIxLCAweGJkNWJhZTYwLCAweDZjYjU0NjcxLCAweGM3ZWNmMmEwLCAweDNhMDYyZmQzLCAweDkxNWY5YjAyLAorCTB4NmE4YTIxZTQsIDB4YzFkMzk1MzUsIDB4M2MzOTQ4NDYsIDB4OTc2MGZjOTcsIDB4NjBjYjg5NWIsIDB4Y2I5MjNkOGEsCisJMHgzNjc4ZTBmOSwgMHg5ZDIxNTQyOCwgMHg2NmY0ZWVjZSwgMHhjZGFkNWExZiwgMHgzMDQ3ODc2YywgMHg5YjFlMzNiZCwKKwkweDc0NDhkODI1LCAweGRmMTE2Y2Y0LCAweDIyZmJiMTg3LCAweDg5YTIwNTU2LCAweDcyNzdiZmIwLCAweGQ5MmUwYjYxLAorCTB4MjRjNGQ2MTIsIDB4OGY5ZDYyYzMsIDB4NzgzNjE3MGYsIDB4ZDM2ZmEzZGUsIDB4MmU4NTdlYWQsIDB4ODVkY2NhN2MsCisJMHg3ZTA5NzA5YSwgMHhkNTUwYzQ0YiwgMHgyOGJhMTkzOCwgMHg4M2UzYWRlOSwgMHg1ZDRlN2FkOSwgMHhmNjE3Y2UwOCwKKwkweDBiZmQxMzdiLCAweGEwYTRhN2FhLCAweDViNzExZDRjLCAweGYwMjhhOTlkLCAweDBkYzI3NGVlLCAweGE2OWJjMDNmLAorCTB4NTEzMGI1ZjMsIDB4ZmE2OTAxMjIsIDB4MDc4M2RjNTEsIDB4YWNkYTY4ODAsIDB4NTcwZmQyNjYsIDB4ZmM1NjY2YjcsCisJMHgwMWJjYmJjNCwgMHhhYWU1MGYxNSwgMHg0NWIzZTQ4ZCwgMHhlZWVhNTA1YywgMHgxMzAwOGQyZiwgMHhiODU5MzlmZSwKKwkweDQzOGM4MzE4LCAweGU4ZDUzN2M5LCAweDE1M2ZlYWJhLCAweGJlNjY1ZTZiLCAweDQ5Y2QyYmE3LCAweGUyOTQ5Zjc2LAorCTB4MWY3ZTQyMDUsIDB4YjQyN2Y2ZDQsIDB4NGZmMjRjMzIsIDB4ZTRhYmY4ZTMsIDB4MTk0MTI1OTAsIDB4YjIxODkxNDEsCisJMHgwZjQzM2YyMSwgMHhhNDFhOGJmMCwgMHg1OWYwNTY4MywgMHhmMmE5ZTI1MiwgMHgwOTdjNThiNCwgMHhhMjI1ZWM2NSwKKwkweDVmY2YzMTE2LCAweGY0OTY4NWM3LCAweDAzM2RmMDBiLCAweGE4NjQ0NGRhLCAweDU1OGU5OWE5LCAweGZlZDcyZDc4LAorCTB4MDUwMjk3OWUsIDB4YWU1YjIzNGYsIDB4NTNiMWZlM2MsIDB4ZjhlODRhZWQsIDB4MTdiZWExNzUsIDB4YmNlNzE1YTQsCisJMHg0MTBkYzhkNywgMHhlYTU0N2MwNiwgMHgxMTgxYzZlMCwgMHhiYWQ4NzIzMSwgMHg0NzMyYWY0MiwgMHhlYzZiMWI5MywKKwkweDFiYzA2ZTVmLCAweGIwOTlkYThlLCAweDRkNzMwN2ZkLCAweGU2MmFiMzJjLCAweDFkZmYwOWNhLCAweGI2YTZiZDFiLAorCTB4NGI0YzYwNjgsIDB4ZTAxNWQ0YjksIDB4M2ViODAzODksIDB4OTVlMWI3NTgsIDB4NjgwYjZhMmIsIDB4YzM1MmRlZmEsCisJMHgzODg3NjQxYywgMHg5M2RlZDBjZCwgMHg2ZTM0MGRiZSwgMHhjNTZkYjk2ZiwgMHgzMmM2Y2NhMywgMHg5OTlmNzg3MiwKKwkweDY0NzVhNTAxLCAweGNmMmMxMWQwLCAweDM0ZjlhYjM2LCAweDlmYTAxZmU3LCAweDYyNGFjMjk0LCAweGM5MTM3NjQ1LAorCTB4MjY0NTlkZGQsIDB4OGQxYzI5MGMsIDB4NzBmNmY0N2YsIDB4ZGJhZjQwYWUsIDB4MjA3YWZhNDgsIDB4OGIyMzRlOTksCisJMHg3NmM5OTNlYSwgMHhkZDkwMjczYiwgMHgyYTNiNTJmNywgMHg4MTYyZTYyNiwgMHg3Yzg4M2I1NSwgMHhkN2QxOGY4NCwKKwkweDJjMDQzNTYyLCAweDg3NWQ4MWIzLCAweDdhYjc1Y2MwLCAweGQxZWVlODExCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFVbMjU2XSA9IHsKKwkweDAwMDAwMDAwLCAweDdlYjUyMDBkLCAweDU2MzNmNGNiLCAweDI4ODZkNGM2LCAweDA3M2U1ZDQ3LCAweDc5OGI3ZDRhLAorCTB4NTEwZGE5OGMsIDB4MmZiODg5ODEsIDB4MGU3Y2JhOGUsIDB4NzBjOTlhODMsIDB4NTg0ZjRlNDUsIDB4MjZmYTZlNDgsCisJMHgwOTQyZTdjOSwgMHg3N2Y3YzdjNCwgMHg1ZjcxMTMwMiwgMHgyMWM0MzMwZiwgMHgxY2Y5NzUxYywgMHg2MjRjNTUxMSwKKwkweDRhY2E4MWQ3LCAweDM0N2ZhMWRhLCAweDFiYzcyODViLCAweDY1NzIwODU2LCAweDRkZjRkYzkwLCAweDMzNDFmYzlkLAorCTB4MTI4NWNmOTIsIDB4NmMzMGVmOWYsIDB4NDRiNjNiNTksIDB4M2EwMzFiNTQsIDB4MTViYjkyZDUsIDB4NmIwZWIyZDgsCisJMHg0Mzg4NjYxZSwgMHgzZDNkNDYxMywgMHgzOWYyZWEzOCwgMHg0NzQ3Y2EzNSwgMHg2ZmMxMWVmMywgMHgxMTc0M2VmZSwKKwkweDNlY2NiNzdmLCAweDQwNzk5NzcyLCAweDY4ZmY0M2I0LCAweDE2NGE2M2I5LCAweDM3OGU1MGI2LCAweDQ5M2I3MGJiLAorCTB4NjFiZGE0N2QsIDB4MWYwODg0NzAsIDB4MzBiMDBkZjEsIDB4NGUwNTJkZmMsIDB4NjY4M2Y5M2EsIDB4MTgzNmQ5MzcsCisJMHgyNTBiOWYyNCwgMHg1YmJlYmYyOSwgMHg3MzM4NmJlZiwgMHgwZDhkNGJlMiwgMHgyMjM1YzI2MywgMHg1YzgwZTI2ZSwKKwkweDc0MDYzNmE4LCAweDBhYjMxNmE1LCAweDJiNzcyNWFhLCAweDU1YzIwNWE3LCAweDdkNDRkMTYxLCAweDAzZjFmMTZjLAorCTB4MmM0OTc4ZWQsIDB4NTJmYzU4ZTAsIDB4N2E3YThjMjYsIDB4MDRjZmFjMmIsIDB4NzNlNWQ0NzAsIDB4MGQ1MGY0N2QsCisJMHgyNWQ2MjBiYiwgMHg1YjYzMDBiNiwgMHg3NGRiODkzNywgMHgwYTZlYTkzYSwgMHgyMmU4N2RmYywgMHg1YzVkNWRmMSwKKwkweDdkOTk2ZWZlLCAweDAzMmM0ZWYzLCAweDJiYWE5YTM1LCAweDU1MWZiYTM4LCAweDdhYTczM2I5LCAweDA0MTIxM2I0LAorCTB4MmM5NGM3NzIsIDB4NTIyMWU3N2YsIDB4NmYxY2ExNmMsIDB4MTFhOTgxNjEsIDB4MzkyZjU1YTcsIDB4NDc5YTc1YWEsCisJMHg2ODIyZmMyYiwgMHgxNjk3ZGMyNiwgMHgzZTExMDhlMCwgMHg0MGE0MjhlZCwgMHg2MTYwMWJlMiwgMHgxZmQ1M2JlZiwKKwkweDM3NTNlZjI5LCAweDQ5ZTZjZjI0LCAweDY2NWU0NmE1LCAweDE4ZWI2NmE4LCAweDMwNmRiMjZlLCAweDRlZDg5MjYzLAorCTB4NGExNzNlNDgsIDB4MzRhMjFlNDUsIDB4MWMyNGNhODMsIDB4NjI5MWVhOGUsIDB4NGQyOTYzMGYsIDB4MzM5YzQzMDIsCisJMHgxYjFhOTdjNCwgMHg2NWFmYjdjOSwgMHg0NDZiODRjNiwgMHgzYWRlYTRjYiwgMHgxMjU4NzAwZCwgMHg2Y2VkNTAwMCwKKwkweDQzNTVkOTgxLCAweDNkZTBmOThjLCAweDE1NjYyZDRhLCAweDZiZDMwZDQ3LCAweDU2ZWU0YjU0LCAweDI4NWI2YjU5LAorCTB4MDBkZGJmOWYsIDB4N2U2ODlmOTIsIDB4NTFkMDE2MTMsIDB4MmY2NTM2MWUsIDB4MDdlM2UyZDgsIDB4Nzk1NmMyZDUsCisJMHg1ODkyZjFkYSwgMHgyNjI3ZDFkNywgMHgwZWExMDUxMSwgMHg3MDE0MjUxYywgMHg1ZmFjYWM5ZCwgMHgyMTE5OGM5MCwKKwkweDA5OWY1ODU2LCAweDc3MmE3ODViLCAweDRjOTIxYzMxLCAweDMyMjczYzNjLCAweDFhYTFlOGZhLCAweDY0MTRjOGY3LAorCTB4NGJhYzQxNzYsIDB4MzUxOTYxN2IsIDB4MWQ5ZmI1YmQsIDB4NjMyYTk1YjAsIDB4NDJlZWE2YmYsIDB4M2M1Yjg2YjIsCisJMHgxNGRkNTI3NCwgMHg2YTY4NzI3OSwgMHg0NWQwZmJmOCwgMHgzYjY1ZGJmNSwgMHgxM2UzMGYzMywgMHg2ZDU2MmYzZSwKKwkweDUwNmI2OTJkLCAweDJlZGU0OTIwLCAweDA2NTg5ZGU2LCAweDc4ZWRiZGViLCAweDU3NTUzNDZhLCAweDI5ZTAxNDY3LAorCTB4MDE2NmMwYTEsIDB4N2ZkM2UwYWMsIDB4NWUxN2QzYTMsIDB4MjBhMmYzYWUsIDB4MDgyNDI3NjgsIDB4NzY5MTA3NjUsCisJMHg1OTI5OGVlNCwgMHgyNzljYWVlOSwgMHgwZjFhN2EyZiwgMHg3MWFmNWEyMiwgMHg3NTYwZjYwOSwgMHgwYmQ1ZDYwNCwKKwkweDIzNTMwMmMyLCAweDVkZTYyMmNmLCAweDcyNWVhYjRlLCAweDBjZWI4YjQzLCAweDI0NmQ1Zjg1LCAweDVhZDg3Zjg4LAorCTB4N2IxYzRjODcsIDB4MDVhOTZjOGEsIDB4MmQyZmI4NGMsIDB4NTM5YTk4NDEsIDB4N2MyMjExYzAsIDB4MDI5NzMxY2QsCisJMHgyYTExZTUwYiwgMHg1NGE0YzUwNiwgMHg2OTk5ODMxNSwgMHgxNzJjYTMxOCwgMHgzZmFhNzdkZSwgMHg0MTFmNTdkMywKKwkweDZlYTdkZTUyLCAweDEwMTJmZTVmLCAweDM4OTQyYTk5LCAweDQ2MjEwYTk0LCAweDY3ZTUzOTliLCAweDE5NTAxOTk2LAorCTB4MzFkNmNkNTAsIDB4NGY2M2VkNWQsIDB4NjBkYjY0ZGMsIDB4MWU2ZTQ0ZDEsIDB4MzZlODkwMTcsIDB4NDg1ZGIwMWEsCisJMHgzZjc3Yzg0MSwgMHg0MWMyZTg0YywgMHg2OTQ0M2M4YSwgMHgxN2YxMWM4NywgMHgzODQ5OTUwNiwgMHg0NmZjYjUwYiwKKwkweDZlN2E2MWNkLCAweDEwY2Y0MWMwLCAweDMxMGI3MmNmLCAweDRmYmU1MmMyLCAweDY3Mzg4NjA0LCAweDE5OGRhNjA5LAorCTB4MzYzNTJmODgsIDB4NDg4MDBmODUsIDB4NjAwNmRiNDMsIDB4MWViM2ZiNGUsIDB4MjM4ZWJkNWQsIDB4NWQzYjlkNTAsCisJMHg3NWJkNDk5NiwgMHgwYjA4Njk5YiwgMHgyNGIwZTAxYSwgMHg1YTA1YzAxNywgMHg3MjgzMTRkMSwgMHgwYzM2MzRkYywKKwkweDJkZjIwN2QzLCAweDUzNDcyN2RlLCAweDdiYzFmMzE4LCAweDA1NzRkMzE1LCAweDJhY2M1YTk0LCAweDU0Nzk3YTk5LAorCTB4N2NmZmFlNWYsIDB4MDI0YThlNTIsIDB4MDY4NTIyNzksIDB4NzgzMDAyNzQsIDB4NTBiNmQ2YjIsIDB4MmUwM2Y2YmYsCisJMHgwMWJiN2YzZSwgMHg3ZjBlNWYzMywgMHg1Nzg4OGJmNSwgMHgyOTNkYWJmOCwgMHgwOGY5OThmNywgMHg3NjRjYjhmYSwKKwkweDVlY2E2YzNjLCAweDIwN2Y0YzMxLCAweDBmYzdjNWIwLCAweDcxNzJlNWJkLCAweDU5ZjQzMTdiLCAweDI3NDExMTc2LAorCTB4MWE3YzU3NjUsIDB4NjRjOTc3NjgsIDB4NGM0ZmEzYWUsIDB4MzJmYTgzYTMsIDB4MWQ0MjBhMjIsIDB4NjNmNzJhMmYsCisJMHg0YjcxZmVlOSwgMHgzNWM0ZGVlNCwgMHgxNDAwZWRlYiwgMHg2YWI1Y2RlNiwgMHg0MjMzMTkyMCwgMHgzYzg2MzkyZCwKKwkweDEzM2ViMGFjLCAweDZkOGI5MGExLCAweDQ1MGQ0NDY3LCAweDNiYjg2NDZhCit9OworCitzdHJ1Y3QgaW5kZXhfZW50cnkgeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0cjsKKwl1bnNpZ25lZCBpbnQgdmFsOworfTsKKworc3RydWN0IHVucGFja2VkX2luZGV4X2VudHJ5IHsKKwlzdHJ1Y3QgaW5kZXhfZW50cnkgZW50cnk7CisJc3RydWN0IHVucGFja2VkX2luZGV4X2VudHJ5ICpuZXh0OworfTsKKworc3RydWN0IGRlbHRhX2luZGV4IHsKKwl1bnNpZ25lZCBsb25nIG1lbXNpemU7CisJY29uc3Qgdm9pZCAqc3JjX2J1ZjsKKwl1bnNpZ25lZCBsb25nIHNyY19zaXplOworCXVuc2lnbmVkIGludCBoYXNoX21hc2s7CisJc3RydWN0IGluZGV4X2VudHJ5ICpoYXNoW0ZMRVhfQVJSQVldOworfTsKKworc3RydWN0IGRlbHRhX2luZGV4ICogY3JlYXRlX2RlbHRhX2luZGV4KGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBidWZzaXplKQoreworCXVuc2lnbmVkIGludCBpLCBoc2l6ZSwgaG1hc2ssIGVudHJpZXMsIHByZXZfdmFsLCAqaGFzaF9jb3VudDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCAqYnVmZmVyID0gYnVmOworCXN0cnVjdCBkZWx0YV9pbmRleCAqaW5kZXg7CisJc3RydWN0IHVucGFja2VkX2luZGV4X2VudHJ5ICplbnRyeSwgKipoYXNoOworCXN0cnVjdCBpbmRleF9lbnRyeSAqcGFja2VkX2VudHJ5LCAqKnBhY2tlZF9oYXNoOworCXZvaWQgKm1lbTsKKwl1bnNpZ25lZCBsb25nIG1lbXNpemU7CisKKwlpZiAoIWJ1ZiB8fCAhYnVmc2l6ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBEZXRlcm1pbmUgaW5kZXggaGFzaCBzaXplLiAgTm90ZSB0aGF0IGluZGV4aW5nIHNraXBzIHRoZQorCSAgIGZpcnN0IGJ5dGUgdG8gYWxsb3cgZm9yIG9wdGltaXppbmcgdGhlIFJhYmluJ3MgcG9seW5vbWlhbAorCSAgIGluaXRpYWxpemF0aW9uIGluIGNyZWF0ZV9kZWx0YSgpLiAqLworCWVudHJpZXMgPSAoYnVmc2l6ZSAtIDEpIC8gUkFCSU5fV0lORE9XOworCWlmIChidWZzaXplID49IDB4ZmZmZmZmZmZVTCkgeworCQkvKgorCQkgKiBDdXJyZW50IGRlbHRhIGZvcm1hdCBjYW4ndCBlbmNvZGUgb2Zmc2V0cyBpbnRvCisJCSAqIHJlZmVyZW5jZSBidWZmZXIgd2l0aCBtb3JlIHRoYW4gMzIgYml0cy4KKwkJICovCisJCWVudHJpZXMgPSAweGZmZmZmZmZlVSAvIFJBQklOX1dJTkRPVzsKKwl9CisJaHNpemUgPSBlbnRyaWVzIC8gNDsKKwlmb3IgKGkgPSA0OyAoMXUgPDwgaSkgPCBoc2l6ZTsgaSsrKTsKKwloc2l6ZSA9IDEgPDwgaTsKKwlobWFzayA9IGhzaXplIC0gMTsKKworCS8qIGFsbG9jYXRlIGxvb2t1cCBpbmRleCAqLworCW1lbXNpemUgPSBzaXplb2YoKmhhc2gpICogaHNpemUgKworCQkgIHNpemVvZigqZW50cnkpICogZW50cmllczsKKwltZW0gPSBtYWxsb2MobWVtc2l6ZSk7CisJaWYgKCFtZW0pCisJCXJldHVybiBOVUxMOworCWhhc2ggPSBtZW07CisJbWVtID0gaGFzaCArIGhzaXplOworCWVudHJ5ID0gbWVtOworCisJbWVtc2V0KGhhc2gsIDAsIGhzaXplICogc2l6ZW9mKCpoYXNoKSk7CisKKwkvKiBhbGxvY2F0ZSBhbiBhcnJheSB0byBjb3VudCBoYXNoIGVudHJpZXMgKi8KKwloYXNoX2NvdW50ID0gY2FsbG9jKGhzaXplLCBzaXplb2YoKmhhc2hfY291bnQpKTsKKwlpZiAoIWhhc2hfY291bnQpIHsKKwkJZnJlZShoYXNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogdGhlbiBwb3B1bGF0ZSB0aGUgaW5kZXggKi8KKwlwcmV2X3ZhbCA9IH4wOworCWZvciAoZGF0YSA9IGJ1ZmZlciArIGVudHJpZXMgKiBSQUJJTl9XSU5ET1cgLSBSQUJJTl9XSU5ET1c7CisJICAgICBkYXRhID49IGJ1ZmZlcjsKKwkgICAgIGRhdGEgLT0gUkFCSU5fV0lORE9XKSB7CisJCXVuc2lnbmVkIGludCB2YWwgPSAwOworCQlmb3IgKGkgPSAxOyBpIDw9IFJBQklOX1dJTkRPVzsgaSsrKQorCQkJdmFsID0gKCh2YWwgPDwgOCkgfCBkYXRhW2ldKSBeIFRbdmFsID4+IFJBQklOX1NISUZUXTsKKwkJaWYgKHZhbCA9PSBwcmV2X3ZhbCkgeworCQkJLyoga2VlcCB0aGUgbG93ZXN0IG9mIGNvbnNlY3V0aXZlIGlkZW50aWNhbCBibG9ja3MgKi8KKwkJCWVudHJ5Wy0xXS5lbnRyeS5wdHIgPSBkYXRhICsgUkFCSU5fV0lORE9XOworCQkJLS1lbnRyaWVzOworCQl9IGVsc2UgeworCQkJcHJldl92YWwgPSB2YWw7CisJCQlpID0gdmFsICYgaG1hc2s7CisJCQllbnRyeS0+ZW50cnkucHRyID0gZGF0YSArIFJBQklOX1dJTkRPVzsKKwkJCWVudHJ5LT5lbnRyeS52YWwgPSB2YWw7CisJCQllbnRyeS0+bmV4dCA9IGhhc2hbaV07CisJCQloYXNoW2ldID0gZW50cnkrKzsKKwkJCWhhc2hfY291bnRbaV0rKzsKKwkJfQorCX0KKworCS8qCisJICogRGV0ZXJtaW5lIGEgbGltaXQgb24gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzYW1lIGhhc2gKKwkgKiBidWNrZXQuICBUaGlzIGd1YXJkcyB1cyBhZ2FpbnN0IHBhdGhvbG9naWNhbCBkYXRhIHNldHMgY2F1c2luZworCSAqIHJlYWxseSBiYWQgaGFzaCBkaXN0cmlidXRpb24gd2l0aCBtb3N0IGVudHJpZXMgaW4gdGhlIHNhbWUgaGFzaAorCSAqIGJ1Y2tldCB0aGF0IHdvdWxkIGJyaW5nIHVzIHRvIE8obSpuKSBjb21wdXRpbmcgY29zdHMgKG0gYW5kIG4KKwkgKiBjb3JyZXNwb25kaW5nIHRvIHJlZmVyZW5jZSBhbmQgdGFyZ2V0IGJ1ZmZlciBzaXplcykuCisJICoKKwkgKiBNYWtlIHN1cmUgbm9uZSBvZiB0aGUgaGFzaCBidWNrZXRzIGhhcyBtb3JlIGVudHJpZXMgdGhhbgorCSAqIHdlJ3JlIHdpbGxpbmcgdG8gdGVzdC4gIE90aGVyd2lzZSB3ZSBjdWxsIHRoZSBlbnRyeSBsaXN0CisJICogdW5pZm9ybWx5IHRvIHN0aWxsIHByZXNlcnZlIGEgZ29vZCByZXBhcnRpdGlvbiBhY3Jvc3MKKwkgKiB0aGUgcmVmZXJlbmNlIGJ1ZmZlci4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaHNpemU7IGkrKykgeworCQlpbnQgYWNjOworCisJCWlmIChoYXNoX2NvdW50W2ldIDw9IEhBU0hfTElNSVQpCisJCQljb250aW51ZTsKKworCQkvKiBXZSBsZWF2ZSBleGFjdGx5IEhBU0hfTElNSVQgZW50cmllcyBpbiB0aGUgYnVja2V0ICovCisJCWVudHJpZXMgLT0gaGFzaF9jb3VudFtpXSAtIEhBU0hfTElNSVQ7CisKKwkJZW50cnkgPSBoYXNoW2ldOworCQlhY2MgPSAwOworCisJCS8qCisJCSAqIEFzc3VtZSB0aGF0IHRoaXMgbG9vcCBpcyBnb25lIHRocm91Z2ggZXhhY3RseQorCQkgKiBIQVNIX0xJTUlUIHRpbWVzIGFuZCBpcyBlbnRlcmVkIGFuZCBsZWZ0IHdpdGgKKwkJICogYWNjPT0wLiAgU28gdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgbG9vcAorCQkgKiBjb250cmlidXRlcyAoaGFzaF9jb3VudFtpXS1IQVNIX0xJTUlUKSpIQVNIX0xJTUlUCisJCSAqIHRvIHRoZSBhY2N1bXVsYXRvciwgYW5kIHRoZSBpbm5lciBsb29wIGNvbnNlcXVlbnRseQorCQkgKiBpcyBydW4gKGhhc2hfY291bnRbaV0tSEFTSF9MSU1JVCkgdGltZXMsIHJlbW92aW5nCisJCSAqIG9uZSBlbGVtZW50IGZyb20gdGhlIGxpc3QgZWFjaCB0aW1lLiAgU2luY2UgYWNjCisJCSAqIGJhbGFuY2VzIG91dCB0byAwIGF0IHRoZSBmaW5hbCBydW4sIHRoZSBpbm5lciBsb29wCisJCSAqIGJvZHkgY2FuJ3QgYmUgbGVmdCB3aXRoIGVudHJ5PT1OVUxMLiAgU28gd2UgaW5kZWVkCisJCSAqIGVuY291bnRlciBlbnRyeT09TlVMTCBpbiB0aGUgb3V0ZXIgbG9vcCBvbmx5LgorCQkgKi8KKwkJZG8geworCQkJYWNjICs9IGhhc2hfY291bnRbaV0gLSBIQVNIX0xJTUlUOworCQkJaWYgKGFjYyA+IDApIHsKKwkJCQlzdHJ1Y3QgdW5wYWNrZWRfaW5kZXhfZW50cnkgKmtlZXAgPSBlbnRyeTsKKwkJCQlkbyB7CisJCQkJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJCQkJCWFjYyAtPSBIQVNIX0xJTUlUOworCQkJCX0gd2hpbGUgKGFjYyA+IDApOworCQkJCWtlZXAtPm5leHQgPSBlbnRyeS0+bmV4dDsKKwkJCX0KKwkJCWVudHJ5ID0gZW50cnktPm5leHQ7CisJCX0gd2hpbGUgKGVudHJ5KTsKKwl9CisJZnJlZShoYXNoX2NvdW50KTsKKworCS8qCisJICogTm93IGNyZWF0ZSB0aGUgcGFja2VkIGluZGV4IGluIGFycmF5IGZvcm0KKwkgKiByYXRoZXIgdGhhbiBsaW5rZWQgbGlzdHMuCisJICovCisJbWVtc2l6ZSA9IHNpemVvZigqaW5kZXgpCisJCSsgc2l6ZW9mKCpwYWNrZWRfaGFzaCkgKiAoaHNpemUrMSkKKwkJKyBzaXplb2YoKnBhY2tlZF9lbnRyeSkgKiBlbnRyaWVzOworCW1lbSA9IG1hbGxvYyhtZW1zaXplKTsKKwlpZiAoIW1lbSkgeworCQlmcmVlKGhhc2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbmRleCA9IG1lbTsKKwlpbmRleC0+bWVtc2l6ZSA9IG1lbXNpemU7CisJaW5kZXgtPnNyY19idWYgPSBidWY7CisJaW5kZXgtPnNyY19zaXplID0gYnVmc2l6ZTsKKwlpbmRleC0+aGFzaF9tYXNrID0gaG1hc2s7CisKKwltZW0gPSBpbmRleC0+aGFzaDsKKwlwYWNrZWRfaGFzaCA9IG1lbTsKKwltZW0gPSBwYWNrZWRfaGFzaCArIChoc2l6ZSsxKTsKKwlwYWNrZWRfZW50cnkgPSBtZW07CisKKwlmb3IgKGkgPSAwOyBpIDwgaHNpemU7IGkrKykgeworCQkvKgorCQkgKiBDb2FsZXNjZSBhbGwgZW50cmllcyBiZWxvbmdpbmcgdG8gb25lIGxpbmtlZCBsaXN0CisJCSAqIGludG8gY29uc2VjdXRpdmUgYXJyYXkgZW50cmllcy4KKwkJICovCisJCXBhY2tlZF9oYXNoW2ldID0gcGFja2VkX2VudHJ5OworCQlmb3IgKGVudHJ5ID0gaGFzaFtpXTsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQpCisJCQkqcGFja2VkX2VudHJ5KysgPSBlbnRyeS0+ZW50cnk7CisJfQorCisJLyogU2VudGluZWwgdmFsdWUgdG8gaW5kaWNhdGUgdGhlIGxlbmd0aCBvZiB0aGUgbGFzdCBoYXNoIGJ1Y2tldCAqLworCXBhY2tlZF9oYXNoW2hzaXplXSA9IHBhY2tlZF9lbnRyeTsKKworCWFzc2VydChwYWNrZWRfZW50cnkgLSAoc3RydWN0IGluZGV4X2VudHJ5ICopbWVtID09IGVudHJpZXMpOworCWZyZWUoaGFzaCk7CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3ZvaWQgZnJlZV9kZWx0YV9pbmRleChzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4KQoreworCWZyZWUoaW5kZXgpOworfQorCit1bnNpZ25lZCBsb25nIHNpemVvZl9kZWx0YV9pbmRleChzdHJ1Y3QgZGVsdGFfaW5kZXggKmluZGV4KQoreworCWlmIChpbmRleCkKKwkJcmV0dXJuIGluZGV4LT5tZW1zaXplOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgbWF4aW11bSBzaXplIGZvciBhbnkgb3Bjb2RlIHNlcXVlbmNlLCBpbmNsdWRpbmcgdGhlIGluaXRpYWwgaGVhZGVyCisgKiBwbHVzIFJhYmluIHdpbmRvdyBwbHVzIGJpZ2dlc3QgY29weS4KKyAqLworI2RlZmluZSBNQVhfT1BfU0laRQkoNSArIDUgKyAxICsgUkFCSU5fV0lORE9XICsgNykKKwordm9pZCAqCitjcmVhdGVfZGVsdGEoY29uc3Qgc3RydWN0IGRlbHRhX2luZGV4ICppbmRleCwKKwkgICAgIGNvbnN0IHZvaWQgKnRyZ19idWYsIHVuc2lnbmVkIGxvbmcgdHJnX3NpemUsCisJICAgICB1bnNpZ25lZCBsb25nICpkZWx0YV9zaXplLCB1bnNpZ25lZCBsb25nIG1heF9zaXplKQoreworCXVuc2lnbmVkIGludCBpLCBvdXRwb3MsIG91dHNpemUsIG1vZmYsIG1zaXplLCB2YWw7CisJaW50IGluc2NudDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpyZWZfZGF0YSwgKnJlZl90b3AsICpkYXRhLCAqdG9wOworCXVuc2lnbmVkIGNoYXIgKm91dDsKKworCWlmICghdHJnX2J1ZiB8fCAhdHJnX3NpemUpCisJCXJldHVybiBOVUxMOworCisJb3V0cG9zID0gMDsKKwlvdXRzaXplID0gODE5MjsKKwlpZiAobWF4X3NpemUgJiYgb3V0c2l6ZSA+PSBtYXhfc2l6ZSkKKwkJb3V0c2l6ZSA9IG1heF9zaXplICsgTUFYX09QX1NJWkUgKyAxOworCW91dCA9IG1hbGxvYyhvdXRzaXplKTsKKwlpZiAoIW91dCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBzdG9yZSByZWZlcmVuY2UgYnVmZmVyIHNpemUgKi8KKwlpID0gaW5kZXgtPnNyY19zaXplOworCXdoaWxlIChpID49IDB4ODApIHsKKwkJb3V0W291dHBvcysrXSA9IGkgfCAweDgwOworCQlpID4+PSA3OworCX0KKwlvdXRbb3V0cG9zKytdID0gaTsKKworCS8qIHN0b3JlIHRhcmdldCBidWZmZXIgc2l6ZSAqLworCWkgPSB0cmdfc2l6ZTsKKwl3aGlsZSAoaSA+PSAweDgwKSB7CisJCW91dFtvdXRwb3MrK10gPSBpIHwgMHg4MDsKKwkJaSA+Pj0gNzsKKwl9CisJb3V0W291dHBvcysrXSA9IGk7CisKKwlyZWZfZGF0YSA9IGluZGV4LT5zcmNfYnVmOworCXJlZl90b3AgPSByZWZfZGF0YSArIGluZGV4LT5zcmNfc2l6ZTsKKwlkYXRhID0gdHJnX2J1ZjsKKwl0b3AgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSB0cmdfYnVmICsgdHJnX3NpemU7CisKKwlvdXRwb3MrKzsKKwl2YWwgPSAwOworCWZvciAoaSA9IDA7IGkgPCBSQUJJTl9XSU5ET1cgJiYgZGF0YSA8IHRvcDsgaSsrLCBkYXRhKyspIHsKKwkJb3V0W291dHBvcysrXSA9ICpkYXRhOworCQl2YWwgPSAoKHZhbCA8PCA4KSB8ICpkYXRhKSBeIFRbdmFsID4+IFJBQklOX1NISUZUXTsKKwl9CisJaW5zY250ID0gaTsKKworCW1vZmYgPSAwOworCW1zaXplID0gMDsKKwl3aGlsZSAoZGF0YSA8IHRvcCkgeworCQlpZiAobXNpemUgPCA0MDk2KSB7CisJCQlzdHJ1Y3QgaW5kZXhfZW50cnkgKmVudHJ5OworCQkJdmFsIF49IFVbZGF0YVstUkFCSU5fV0lORE9XXV07CisJCQl2YWwgPSAoKHZhbCA8PCA4KSB8ICpkYXRhKSBeIFRbdmFsID4+IFJBQklOX1NISUZUXTsKKwkJCWkgPSB2YWwgJiBpbmRleC0+aGFzaF9tYXNrOworCQkJZm9yIChlbnRyeSA9IGluZGV4LT5oYXNoW2ldOyBlbnRyeSA8IGluZGV4LT5oYXNoW2krMV07IGVudHJ5KyspIHsKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpyZWYgPSBlbnRyeS0+cHRyOworCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9IGRhdGE7CisJCQkJdW5zaWduZWQgaW50IHJlZl9zaXplID0gcmVmX3RvcCAtIHJlZjsKKwkJCQlpZiAoZW50cnktPnZhbCAhPSB2YWwpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChyZWZfc2l6ZSA+IHRvcCAtIHNyYykKKwkJCQkJcmVmX3NpemUgPSB0b3AgLSBzcmM7CisJCQkJaWYgKHJlZl9zaXplIDw9IG1zaXplKQorCQkJCQlicmVhazsKKwkJCQl3aGlsZSAocmVmX3NpemUtLSAmJiAqc3JjKysgPT0gKnJlZikKKwkJCQkJcmVmKys7CisJCQkJaWYgKG1zaXplIDwgcmVmIC0gZW50cnktPnB0cikgeworCQkJCQkvKiB0aGlzIGlzIG91ciBiZXN0IG1hdGNoIHNvIGZhciAqLworCQkJCQltc2l6ZSA9IHJlZiAtIGVudHJ5LT5wdHI7CisJCQkJCW1vZmYgPSBlbnRyeS0+cHRyIC0gcmVmX2RhdGE7CisJCQkJCWlmIChtc2l6ZSA+PSA0MDk2KSAvKiBnb29kIGVub3VnaCAqLworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKG1zaXplIDwgNCkgeworCQkJaWYgKCFpbnNjbnQpCisJCQkJb3V0cG9zKys7CisJCQlvdXRbb3V0cG9zKytdID0gKmRhdGErKzsKKwkJCWluc2NudCsrOworCQkJaWYgKGluc2NudCA9PSAweDdmKSB7CisJCQkJb3V0W291dHBvcyAtIGluc2NudCAtIDFdID0gaW5zY250OworCQkJCWluc2NudCA9IDA7CisJCQl9CisJCQltc2l6ZSA9IDA7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgbGVmdDsKKwkJCXVuc2lnbmVkIGNoYXIgKm9wOworCisJCQlpZiAoaW5zY250KSB7CisJCQkJd2hpbGUgKG1vZmYgJiYgcmVmX2RhdGFbbW9mZi0xXSA9PSBkYXRhWy0xXSkgeworCQkJCQkvKiB3ZSBjYW4gbWF0Y2ggb25lIGJ5dGUgYmFjayAqLworCQkJCQltc2l6ZSsrOworCQkJCQltb2ZmLS07CisJCQkJCWRhdGEtLTsKKwkJCQkJb3V0cG9zLS07CisJCQkJCWlmICgtLWluc2NudCkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlvdXRwb3MtLTsgIC8qIHJlbW92ZSBjb3VudCBzbG90ICovCisJCQkJCWluc2NudC0tOyAgLyogbWFrZSBpdCAtMSAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJb3V0W291dHBvcyAtIGluc2NudCAtIDFdID0gaW5zY250OworCQkJCWluc2NudCA9IDA7CisJCQl9CisKKwkJCS8qIEEgY29weSBvcCBpcyBjdXJyZW50bHkgbGltaXRlZCB0byA2NEtCIChwYWNrIHYyKSAqLworCQkJbGVmdCA9IChtc2l6ZSA8IDB4MTAwMDApID8gMCA6IChtc2l6ZSAtIDB4MTAwMDApOworCQkJbXNpemUgLT0gbGVmdDsKKworCQkJb3AgPSBvdXQgKyBvdXRwb3MrKzsKKwkJCWkgPSAweDgwOworCisJCQlpZiAobW9mZiAmIDB4MDAwMDAwZmYpCisJCQkJb3V0W291dHBvcysrXSA9IG1vZmYgPj4gMCwgIGkgfD0gMHgwMTsKKwkJCWlmIChtb2ZmICYgMHgwMDAwZmYwMCkKKwkJCQlvdXRbb3V0cG9zKytdID0gbW9mZiA+PiA4LCAgaSB8PSAweDAyOworCQkJaWYgKG1vZmYgJiAweDAwZmYwMDAwKQorCQkJCW91dFtvdXRwb3MrK10gPSBtb2ZmID4+IDE2LCBpIHw9IDB4MDQ7CisJCQlpZiAobW9mZiAmIDB4ZmYwMDAwMDApCisJCQkJb3V0W291dHBvcysrXSA9IG1vZmYgPj4gMjQsIGkgfD0gMHgwODsKKworCQkJaWYgKG1zaXplICYgMHgwMGZmKQorCQkJCW91dFtvdXRwb3MrK10gPSBtc2l6ZSA+PiAwLCBpIHw9IDB4MTA7CisJCQlpZiAobXNpemUgJiAweGZmMDApCisJCQkJb3V0W291dHBvcysrXSA9IG1zaXplID4+IDgsIGkgfD0gMHgyMDsKKworCQkJKm9wID0gaTsKKworCQkJZGF0YSArPSBtc2l6ZTsKKwkJCW1vZmYgKz0gbXNpemU7CisJCQltc2l6ZSA9IGxlZnQ7CisKKwkJCWlmIChtc2l6ZSA8IDQwOTYpIHsKKwkJCQlpbnQgajsKKwkJCQl2YWwgPSAwOworCQkJCWZvciAoaiA9IC1SQUJJTl9XSU5ET1c7IGogPCAwOyBqKyspCisJCQkJCXZhbCA9ICgodmFsIDw8IDgpIHwgZGF0YVtqXSkKKwkJCQkJICAgICAgXiBUW3ZhbCA+PiBSQUJJTl9TSElGVF07CisJCQl9CisJCX0KKworCQlpZiAob3V0cG9zID49IG91dHNpemUgLSBNQVhfT1BfU0laRSkgeworCQkJdm9pZCAqdG1wID0gb3V0OworCQkJb3V0c2l6ZSA9IG91dHNpemUgKiAzIC8gMjsKKwkJCWlmIChtYXhfc2l6ZSAmJiBvdXRzaXplID49IG1heF9zaXplKQorCQkJCW91dHNpemUgPSBtYXhfc2l6ZSArIE1BWF9PUF9TSVpFICsgMTsKKwkJCWlmIChtYXhfc2l6ZSAmJiBvdXRwb3MgPiBtYXhfc2l6ZSkKKwkJCQlicmVhazsKKwkJCW91dCA9IHJlYWxsb2Mob3V0LCBvdXRzaXplKTsKKwkJCWlmICghb3V0KSB7CisJCQkJZnJlZSh0bXApOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisJfQorCisJaWYgKGluc2NudCkKKwkJb3V0W291dHBvcyAtIGluc2NudCAtIDFdID0gaW5zY250OworCisJaWYgKG1heF9zaXplICYmIG91dHBvcyA+IG1heF9zaXplKSB7CisJCWZyZWUob3V0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJKmRlbHRhX3NpemUgPSBvdXRwb3M7CisJcmV0dXJuIG91dDsKK30KZGlmZiAtLWdpdCBhL2RpZmYtbGliLmMgYi9kaWZmLWxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MWE4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmLWxpYi5jCkBAIC0wLDAgKzEsNTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImRpci5oIgorCisvKgorICogZGlmZi1maWxlcworICovCisKKy8qCisgKiBIYXMgdGhlIHdvcmsgdHJlZSBlbnRpdHkgYmVlbiByZW1vdmVkPworICoKKyAqIFJldHVybiAxIGlmIGl0IHdhcyByZW1vdmVkIGZyb20gdGhlIHdvcmsgdHJlZSwgMCBpZiBhbiBlbnRpdHkgdG8gYmUKKyAqIGNvbXBhcmVkIHdpdGggdGhlIGNhY2hlIGVudHJ5IGNlIHN0aWxsIGV4aXN0cyAodGhlIGxhdHRlciBpbmNsdWRlcworICogdGhlIGNhc2Ugd2hlcmUgYSBkaXJlY3RvcnkgdGhhdCBpcyBub3QgYSBzdWJtb2R1bGUgcmVwb3NpdG9yeQorICogZXhpc3RzIGZvciBjZSB0aGF0IGlzIGEgc3VibW9kdWxlIC0tIGl0IGlzIGEgc3VibW9kdWxlIHRoYXQgaXMgbm90CisgKiBjaGVja2VkIG91dCkuICBSZXR1cm4gbmVnYXRpdmUgZm9yIGFuIGVycm9yLgorICovCitzdGF0aWMgaW50IGNoZWNrX3JlbW92ZWQoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0KQoreworCWlmIChsc3RhdChjZS0+bmFtZSwgc3QpIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UICYmIGVycm5vICE9IEVOT1RESVIpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAxOworCX0KKwlpZiAoaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSkpCisJCXJldHVybiAxOworCWlmIChTX0lTRElSKHN0LT5zdF9tb2RlKSkgeworCQl1bnNpZ25lZCBjaGFyIHN1YlsyMF07CisKKwkJLyoKKwkJICogSWYgY2UgaXMgYWxyZWFkeSBhIGdpdGxpbmssIHdlIGNhbiBoYXZlIGEgcGxhaW4KKwkJICogZGlyZWN0b3J5IChpLmUuIHRoZSBzdWJtb2R1bGUgaXMgbm90IGNoZWNrZWQgb3V0KSwKKwkJICogb3IgYSBjaGVja2VkIG91dCBzdWJtb2R1bGUuICBFaXRoZXIgY2FzZSB0aGlzIGlzIG5vdAorCQkgKiBhIGNhc2Ugd2hlcmUgc29tZXRoaW5nIHdhcyByZW1vdmVkIGZyb20gdGhlIHdvcmsgdHJlZSwKKwkJICogc28gd2Ugd2lsbCByZXR1cm4gMC4KKwkJICoKKwkJICogT3RoZXJ3aXNlLCBpZiB0aGUgZGlyZWN0b3J5IGlzIG5vdCBhIHN1Ym1vZHVsZQorCQkgKiByZXBvc2l0b3J5LCB0aGF0IG1lYW5zIGNlIHdoaWNoIHdhcyBhIGJsb2IgdHVybmVkIGludG8KKwkJICogYSBkaXJlY3RvcnkgLS0tIHRoZSBibG9iIHdhcyByZW1vdmVkIQorCQkgKi8KKwkJaWYgKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgJiYKKwkJICAgIHJlc29sdmVfZ2l0bGlua19yZWYoY2UtPm5hbWUsICJIRUFEIiwgc3ViKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEhhcyBhIGZpbGUgY2hhbmdlZCBvciBoYXMgYSBzdWJtb2R1bGUgbmV3IGNvbW1pdHMgb3IgYSBkaXJ0eSB3b3JrIHRyZWU/CisgKgorICogUmV0dXJuIDEgd2hlbiBjaGFuZ2VzIGFyZSBkZXRlY3RlZCwgMCBvdGhlcndpc2UuIElmIHRoZSBESVJUWV9TVUJNT0RVTEVTCisgKiBvcHRpb24gaXMgc2V0LCB0aGUgY2FsbGVyIGRvZXMgbm90IG9ubHkgd2FudCB0byBrbm93IGlmIGEgc3VibW9kdWxlIGlzCisgKiBtb2RpZmllZCBhdCBhbGwgYnV0IHdhbnRzIHRvIGtub3cgYWxsIHRoZSBjb25kaXRpb25zIHRoYXQgYXJlIG1ldCAobmV3CisgKiBjb21taXRzLCB1bnRyYWNrZWQgY29udGVudCBhbmQvb3IgbW9kaWZpZWQgY29udGVudCkuCisgKi8KK3N0YXRpYyBpbnQgbWF0Y2hfc3RhdF93aXRoX3N1Ym1vZHVsZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkgICAgIHN0cnVjdCBzdGF0ICpzdCwgdW5zaWduZWQgY2Vfb3B0aW9uLAorCQkJCSAgICAgdW5zaWduZWQgKmRpcnR5X3N1Ym1vZHVsZSkKK3sKKwlpbnQgY2hhbmdlZCA9IGNlX21hdGNoX3N0YXQoY2UsIHN0LCBjZV9vcHRpb24pOworCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpIHsKKwkJdW5zaWduZWQgb3JpZ19mbGFncyA9IGRpZmZvcHQtPmZsYWdzOworCQlpZiAoIURJRkZfT1BUX1RTVChkaWZmb3B0LCBPVkVSUklERV9TVUJNT0RVTEVfQ09ORklHKSkKKwkJCXNldF9kaWZmb3B0X2ZsYWdzX2Zyb21fc3VibW9kdWxlX2NvbmZpZyhkaWZmb3B0LCBjZS0+bmFtZSk7CisJCWlmIChESUZGX09QVF9UU1QoZGlmZm9wdCwgSUdOT1JFX1NVQk1PRFVMRVMpKQorCQkJY2hhbmdlZCA9IDA7CisJCWVsc2UgaWYgKCFESUZGX09QVF9UU1QoZGlmZm9wdCwgSUdOT1JFX0RJUlRZX1NVQk1PRFVMRVMpCisJCSAgICAmJiAoIWNoYW5nZWQgfHwgRElGRl9PUFRfVFNUKGRpZmZvcHQsIERJUlRZX1NVQk1PRFVMRVMpKSkKKwkJCSpkaXJ0eV9zdWJtb2R1bGUgPSBpc19zdWJtb2R1bGVfbW9kaWZpZWQoY2UtPm5hbWUsIERJRkZfT1BUX1RTVChkaWZmb3B0LCBJR05PUkVfVU5UUkFDS0VEX0lOX1NVQk1PRFVMRVMpKTsKKwkJZGlmZm9wdC0+ZmxhZ3MgPSBvcmlnX2ZsYWdzOworCX0KKwlyZXR1cm4gY2hhbmdlZDsKK30KKworaW50IHJ1bl9kaWZmX2ZpbGVzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgdW5zaWduZWQgaW50IG9wdGlvbikKK3sKKwlpbnQgZW50cmllcywgaTsKKwlpbnQgZGlmZl91bm1lcmdlZF9zdGFnZSA9IHJldnMtPm1heF9jb3VudDsKKwl1bnNpZ25lZCBjZV9vcHRpb24gPSAoKG9wdGlvbiAmIERJRkZfUkFDWV9JU19NT0RJRklFRCkKKwkJCSAgICAgID8gQ0VfTUFUQ0hfUkFDWV9JU19ESVJUWSA6IDApOworCisJZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KCZyZXZzLT5kaWZmb3B0LCAiaS8iLCAidy8iKTsKKworCWlmIChkaWZmX3VubWVyZ2VkX3N0YWdlIDwgMCkKKwkJZGlmZl91bm1lcmdlZF9zdGFnZSA9IDI7CisJZW50cmllcyA9IGFjdGl2ZV9ucjsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBvbGRtb2RlLCBuZXdtb2RlOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQlpbnQgY2hhbmdlZDsKKwkJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlID0gMDsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsICpuZXdfc2hhMTsKKworCQlpZiAoZGlmZl9jYW5fcXVpdF9lYXJseSgmcmV2cy0+ZGlmZm9wdCkpCisJCQlicmVhazsKKworCQlpZiAoIWNlX3BhdGhfbWF0Y2goY2UsICZyZXZzLT5wcnVuZV9kYXRhLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqZHBhdGg7CisJCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjsKKwkJCXVuc2lnbmVkIGludCB3dF9tb2RlID0gMDsKKwkJCWludCBudW1fY29tcGFyZV9zdGFnZXMgPSAwOworCQkJc2l6ZV90IHBhdGhfbGVuOworCQkJc3RydWN0IHN0YXQgc3Q7CisKKwkJCXBhdGhfbGVuID0gY2VfbmFtZWxlbihjZSk7CisKKwkJCWRwYXRoID0geG1hbGxvYyhjb21iaW5lX2RpZmZfcGF0aF9zaXplKDUsIHBhdGhfbGVuKSk7CisJCQlkcGF0aC0+cGF0aCA9IChjaGFyICopICYoZHBhdGgtPnBhcmVudFs1XSk7CisKKwkJCWRwYXRoLT5uZXh0ID0gTlVMTDsKKwkJCW1lbWNweShkcGF0aC0+cGF0aCwgY2UtPm5hbWUsIHBhdGhfbGVuKTsKKwkJCWRwYXRoLT5wYXRoW3BhdGhfbGVuXSA9ICdcMCc7CisJCQlvaWRjbHIoJmRwYXRoLT5vaWQpOworCQkJbWVtc2V0KCYoZHBhdGgtPnBhcmVudFswXSksIDAsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjb21iaW5lX2RpZmZfcGFyZW50KSo1KTsKKworCQkJY2hhbmdlZCA9IGNoZWNrX3JlbW92ZWQoY2UsICZzdCk7CisJCQlpZiAoIWNoYW5nZWQpCisJCQkJd3RfbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KGNlLCBzdC5zdF9tb2RlKTsKKwkJCWVsc2UgeworCQkJCWlmIChjaGFuZ2VkIDwgMCkgeworCQkJCQlwZXJyb3IoY2UtPm5hbWUpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJd3RfbW9kZSA9IDA7CisJCQl9CisJCQlkcGF0aC0+bW9kZSA9IHd0X21vZGU7CisKKwkJCXdoaWxlIChpIDwgZW50cmllcykgeworCQkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQkJCWludCBzdGFnZTsKKworCQkJCWlmIChzdHJjbXAoY2UtPm5hbWUsIG5jZS0+bmFtZSkpCisJCQkJCWJyZWFrOworCisJCQkJLyogU3RhZ2UgIzIgKG91cnMpIGlzIHRoZSBmaXJzdCBwYXJlbnQsCisJCQkJICogc3RhZ2UgIzMgKHRoZWlycykgaXMgdGhlIHNlY29uZC4KKwkJCQkgKi8KKwkJCQlzdGFnZSA9IGNlX3N0YWdlKG5jZSk7CisJCQkJaWYgKDIgPD0gc3RhZ2UpIHsKKwkJCQkJaW50IG1vZGUgPSBuY2UtPmNlX21vZGU7CisJCQkJCW51bV9jb21wYXJlX3N0YWdlcysrOworCQkJCQloYXNoY3B5KGRwYXRoLT5wYXJlbnRbc3RhZ2UtMl0ub2lkLmhhc2gsIG5jZS0+c2hhMSk7CisJCQkJCWRwYXRoLT5wYXJlbnRbc3RhZ2UtMl0ubW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KG5jZSwgbW9kZSk7CisJCQkJCWRwYXRoLT5wYXJlbnRbc3RhZ2UtMl0uc3RhdHVzID0KKwkJCQkJCURJRkZfU1RBVFVTX01PRElGSUVEOworCQkJCX0KKworCQkJCS8qIGRpZmYgYWdhaW5zdCB0aGUgcHJvcGVyIHVubWVyZ2VkIHN0YWdlICovCisJCQkJaWYgKHN0YWdlID09IGRpZmZfdW5tZXJnZWRfc3RhZ2UpCisJCQkJCWNlID0gbmNlOworCQkJCWkrKzsKKwkJCX0KKwkJCS8qCisJCQkgKiBDb21wZW5zYXRlIGZvciBsb29wIHVwZGF0ZQorCQkJICovCisJCQlpLS07CisKKwkJCWlmIChyZXZzLT5jb21iaW5lX21lcmdlcyAmJiBudW1fY29tcGFyZV9zdGFnZXMgPT0gMikgeworCQkJCXNob3dfY29tYmluZWRfZGlmZihkcGF0aCwgMiwKKwkJCQkJCSAgIHJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcywKKwkJCQkJCSAgIHJldnMpOworCQkJCWZyZWUoZHBhdGgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZnJlZShkcGF0aCk7CisJCQlkcGF0aCA9IE5VTEw7CisKKwkJCS8qCisJCQkgKiBTaG93IHRoZSBkaWZmIGZvciB0aGUgJ2NlJyBpZiB3ZSBmb3VuZCB0aGUgb25lCisJCQkgKiBmcm9tIHRoZSBkZXNpcmVkIHN0YWdlLgorCQkJICovCisJCQlwYWlyID0gZGlmZl91bm1lcmdlKCZyZXZzLT5kaWZmb3B0LCBjZS0+bmFtZSk7CisJCQlpZiAod3RfbW9kZSkKKwkJCQlwYWlyLT50d28tPm1vZGUgPSB3dF9tb2RlOworCQkJaWYgKGNlX3N0YWdlKGNlKSAhPSBkaWZmX3VubWVyZ2VkX3N0YWdlKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGNlX3VwdG9kYXRlKGNlKSB8fCBjZV9za2lwX3dvcmt0cmVlKGNlKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIElmIENFX1ZBTElEIGlzIHNldCwgZG9uJ3QgbG9vayBhdCB3b3JrZGlyIGZvciBmaWxlIHJlbW92YWwgKi8KKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSB7CisJCQljaGFuZ2VkID0gMDsKKwkJCW5ld21vZGUgPSBjZS0+Y2VfbW9kZTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzdGF0IHN0OworCisJCQljaGFuZ2VkID0gY2hlY2tfcmVtb3ZlZChjZSwgJnN0KTsKKwkJCWlmIChjaGFuZ2VkKSB7CisJCQkJaWYgKGNoYW5nZWQgPCAwKSB7CisJCQkJCXBlcnJvcihjZS0+bmFtZSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlkaWZmX2FkZHJlbW92ZSgmcmV2cy0+ZGlmZm9wdCwgJy0nLCBjZS0+Y2VfbW9kZSwKKwkJCQkJICAgICAgIGNlLT5zaGExLCAhaXNfbnVsbF9zaGExKGNlLT5zaGExKSwKKwkJCQkJICAgICAgIGNlLT5uYW1lLCAwKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJY2hhbmdlZCA9IG1hdGNoX3N0YXRfd2l0aF9zdWJtb2R1bGUoJnJldnMtPmRpZmZvcHQsIGNlLCAmc3QsCisJCQkJCQkJICAgIGNlX29wdGlvbiwgJmRpcnR5X3N1Ym1vZHVsZSk7CisJCQluZXdtb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoY2UsIHN0LnN0X21vZGUpOworCQl9CisKKwkJaWYgKCFjaGFuZ2VkICYmICFkaXJ0eV9zdWJtb2R1bGUpIHsKKwkJCWNlX21hcmtfdXB0b2RhdGUoY2UpOworCQkJaWYgKCFESUZGX09QVF9UU1QoJnJldnMtPmRpZmZvcHQsIEZJTkRfQ09QSUVTX0hBUkRFUikpCisJCQkJY29udGludWU7CisJCX0KKwkJb2xkbW9kZSA9IGNlLT5jZV9tb2RlOworCQlvbGRfc2hhMSA9IGNlLT5zaGExOworCQluZXdfc2hhMSA9IGNoYW5nZWQgPyBudWxsX3NoYTEgOiBjZS0+c2hhMTsKKwkJZGlmZl9jaGFuZ2UoJnJldnMtPmRpZmZvcHQsIG9sZG1vZGUsIG5ld21vZGUsCisJCQkgICAgb2xkX3NoYTEsIG5ld19zaGExLAorCQkJICAgICFpc19udWxsX3NoYTEob2xkX3NoYTEpLAorCQkJICAgICFpc19udWxsX3NoYTEobmV3X3NoYTEpLAorCQkJICAgIGNlLT5uYW1lLCAwLCBkaXJ0eV9zdWJtb2R1bGUpOworCisJfQorCWRpZmZjb3JlX3N0ZCgmcmV2cy0+ZGlmZm9wdCk7CisJZGlmZl9mbHVzaCgmcmV2cy0+ZGlmZm9wdCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkaWZmLWluZGV4CisgKi8KKworLyogQSBmaWxlIGVudHJ5IHdlbnQgYXdheSBvciBhcHBlYXJlZCAqLworc3RhdGljIHZvaWQgZGlmZl9pbmRleF9zaG93X2ZpbGUoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBzaGExX3ZhbGlkLAorCQkJCSB1bnNpZ25lZCBpbnQgbW9kZSwKKwkJCQkgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKQoreworCWRpZmZfYWRkcmVtb3ZlKCZyZXZzLT5kaWZmb3B0LCBwcmVmaXhbMF0sIG1vZGUsCisJCSAgICAgICBzaGExLCBzaGExX3ZhbGlkLCBjZS0+bmFtZSwgZGlydHlfc3VibW9kdWxlKTsKK30KKworc3RhdGljIGludCBnZXRfc3RhdF9kYXRhKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqKnNoYTFwLAorCQkJIHVuc2lnbmVkIGludCAqbW9kZXAsCisJCQkgaW50IGNhY2hlZCwgaW50IG1hdGNoX21pc3NpbmcsCisJCQkgdW5zaWduZWQgKmRpcnR5X3N1Ym1vZHVsZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gY2UtPnNoYTE7CisJdW5zaWduZWQgaW50IG1vZGUgPSBjZS0+Y2VfbW9kZTsKKworCWlmICghY2FjaGVkICYmICFjZV91cHRvZGF0ZShjZSkpIHsKKwkJaW50IGNoYW5nZWQ7CisJCXN0cnVjdCBzdGF0IHN0OworCQljaGFuZ2VkID0gY2hlY2tfcmVtb3ZlZChjZSwgJnN0KTsKKwkJaWYgKGNoYW5nZWQgPCAwKQorCQkJcmV0dXJuIC0xOworCQllbHNlIGlmIChjaGFuZ2VkKSB7CisJCQlpZiAobWF0Y2hfbWlzc2luZykgeworCQkJCSpzaGExcCA9IHNoYTE7CisJCQkJKm1vZGVwID0gbW9kZTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJldHVybiAtMTsKKwkJfQorCQljaGFuZ2VkID0gbWF0Y2hfc3RhdF93aXRoX3N1Ym1vZHVsZShkaWZmb3B0LCBjZSwgJnN0LAorCQkJCQkJICAgIDAsIGRpcnR5X3N1Ym1vZHVsZSk7CisJCWlmIChjaGFuZ2VkKSB7CisJCQltb2RlID0gY2VfbW9kZV9mcm9tX3N0YXQoY2UsIHN0LnN0X21vZGUpOworCQkJc2hhMSA9IG51bGxfc2hhMTsKKwkJfQorCX0KKworCSpzaGExcCA9IHNoYTE7CisJKm1vZGVwID0gbW9kZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hvd19uZXdfZmlsZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqbmV3LAorCQkJICBpbnQgY2FjaGVkLCBpbnQgbWF0Y2hfbWlzc2luZykKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCXVuc2lnbmVkIGludCBtb2RlOworCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSA9IDA7CisKKwkvKgorCSAqIE5ldyBmaWxlIGluIHRoZSBpbmRleDogaXQgbWlnaHQgYWN0dWFsbHkgYmUgZGlmZmVyZW50IGluCisJICogdGhlIHdvcmtpbmcgdHJlZS4KKwkgKi8KKwlpZiAoZ2V0X3N0YXRfZGF0YShuZXcsICZzaGExLCAmbW9kZSwgY2FjaGVkLCBtYXRjaF9taXNzaW5nLAorCSAgICAmZGlydHlfc3VibW9kdWxlLCAmcmV2cy0+ZGlmZm9wdCkgPCAwKQorCQlyZXR1cm47CisKKwlkaWZmX2luZGV4X3Nob3dfZmlsZShyZXZzLCAiKyIsIG5ldywgc2hhMSwgIWlzX251bGxfc2hhMShzaGExKSwgbW9kZSwgZGlydHlfc3VibW9kdWxlKTsKK30KKworc3RhdGljIGludCBzaG93X21vZGlmaWVkKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCwKKwkJCSBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ldywKKwkJCSBpbnQgcmVwb3J0X21pc3NpbmcsCisJCQkgaW50IGNhY2hlZCwgaW50IG1hdGNoX21pc3NpbmcpCit7CisJdW5zaWduZWQgaW50IG1vZGUsIG9sZG1vZGU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKKwl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgPSAwOworCisJaWYgKGdldF9zdGF0X2RhdGEobmV3LCAmc2hhMSwgJm1vZGUsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZywKKwkJCSAgJmRpcnR5X3N1Ym1vZHVsZSwgJnJldnMtPmRpZmZvcHQpIDwgMCkgeworCQlpZiAocmVwb3J0X21pc3NpbmcpCisJCQlkaWZmX2luZGV4X3Nob3dfZmlsZShyZXZzLCAiLSIsIG9sZCwKKwkJCQkJICAgICBvbGQtPnNoYTEsIDEsIG9sZC0+Y2VfbW9kZSwgMCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAocmV2cy0+Y29tYmluZV9tZXJnZXMgJiYgIWNhY2hlZCAmJgorCSAgICAoaGFzaGNtcChzaGExLCBvbGQtPnNoYTEpIHx8IGhhc2hjbXAob2xkLT5zaGExLCBuZXctPnNoYTEpKSkgeworCQlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnA7CisJCWludCBwYXRobGVuID0gY2VfbmFtZWxlbihuZXcpOworCisJCXAgPSB4bWFsbG9jKGNvbWJpbmVfZGlmZl9wYXRoX3NpemUoMiwgcGF0aGxlbikpOworCQlwLT5wYXRoID0gKGNoYXIgKikgJnAtPnBhcmVudFsyXTsKKwkJcC0+bmV4dCA9IE5VTEw7CisJCW1lbWNweShwLT5wYXRoLCBuZXctPm5hbWUsIHBhdGhsZW4pOworCQlwLT5wYXRoW3BhdGhsZW5dID0gMDsKKwkJcC0+bW9kZSA9IG1vZGU7CisJCW9pZGNscigmcC0+b2lkKTsKKwkJbWVtc2V0KHAtPnBhcmVudCwgMCwgMiAqIHNpemVvZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhcmVudCkpOworCQlwLT5wYXJlbnRbMF0uc3RhdHVzID0gRElGRl9TVEFUVVNfTU9ESUZJRUQ7CisJCXAtPnBhcmVudFswXS5tb2RlID0gbmV3LT5jZV9tb2RlOworCQloYXNoY3B5KHAtPnBhcmVudFswXS5vaWQuaGFzaCwgbmV3LT5zaGExKTsKKwkJcC0+cGFyZW50WzFdLnN0YXR1cyA9IERJRkZfU1RBVFVTX01PRElGSUVEOworCQlwLT5wYXJlbnRbMV0ubW9kZSA9IG9sZC0+Y2VfbW9kZTsKKwkJaGFzaGNweShwLT5wYXJlbnRbMV0ub2lkLmhhc2gsIG9sZC0+c2hhMSk7CisJCXNob3dfY29tYmluZWRfZGlmZihwLCAyLCByZXZzLT5kZW5zZV9jb21iaW5lZF9tZXJnZXMsIHJldnMpOworCQlmcmVlKHApOworCQlyZXR1cm4gMDsKKwl9CisKKwlvbGRtb2RlID0gb2xkLT5jZV9tb2RlOworCWlmIChtb2RlID09IG9sZG1vZGUgJiYgIWhhc2hjbXAoc2hhMSwgb2xkLT5zaGExKSAmJiAhZGlydHlfc3VibW9kdWxlICYmCisJICAgICFESUZGX09QVF9UU1QoJnJldnMtPmRpZmZvcHQsIEZJTkRfQ09QSUVTX0hBUkRFUikpCisJCXJldHVybiAwOworCisJZGlmZl9jaGFuZ2UoJnJldnMtPmRpZmZvcHQsIG9sZG1vZGUsIG1vZGUsCisJCSAgICBvbGQtPnNoYTEsIHNoYTEsIDEsICFpc19udWxsX3NoYTEoc2hhMSksCisJCSAgICBvbGQtPm5hbWUsIDAsIGRpcnR5X3N1Ym1vZHVsZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGdldHMgYSBtaXggb2YgYW4gZXhpc3RpbmcgaW5kZXggYW5kIGEgdHJlZSwgb25lIHBhdGhuYW1lIGVudHJ5CisgKiBhdCBhIHRpbWUuIFRoZSBpbmRleCBlbnRyeSBtYXkgYmUgYSBzaW5nbGUgc3RhZ2UtMCBvbmUsIGJ1dCBpdCBjb3VsZAorICogYWxzbyBiZSBtdWx0aXBsZSB1bm1lcmdlZCBlbnRyaWVzIChpbiB3aGljaCBjYXNlIGlkeF9wb3MvaWR4X25yIHdpbGwKKyAqIGdpdmUgeW91IHRoZSBwb3NpdGlvbiBhbmQgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGluZGV4KS4KKyAqLworc3RhdGljIHZvaWQgZG9fb25ld2F5X2RpZmYoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvLAorCQkJICAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICppZHgsCisJCQkgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKnRyZWUpCit7CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gby0+dW5wYWNrX2RhdGE7CisJaW50IG1hdGNoX21pc3NpbmcsIGNhY2hlZDsKKworCS8qIGlmIHRoZSBlbnRyeSBpcyBub3QgY2hlY2tlZCBvdXQsIGRvbid0IGV4YW1pbmUgd29yayB0cmVlICovCisJY2FjaGVkID0gby0+aW5kZXhfb25seSB8fAorCQkoaWR4ICYmICgoaWR4LT5jZV9mbGFncyAmIENFX1ZBTElEKSB8fCBjZV9za2lwX3dvcmt0cmVlKGlkeCkpKTsKKwkvKgorCSAqIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2FydCAtICJkaWZmLWluZGV4IC1tIiBkb2VzCisJICogbm90IG1lYW4gImRvIG5vdCBpZ25vcmUgbWVyZ2VzIiwgYnV0ICJtYXRjaF9taXNzaW5nIi4KKwkgKgorCSAqIEJ1dCB3aXRoIHRoZSByZXZpc2lvbiBmbGFnIHBhcnNpbmcsIHRoYXQncyBmb3VuZCBpbgorCSAqICIhcmV2cy0+aWdub3JlX21lcmdlcyIuCisJICovCisJbWF0Y2hfbWlzc2luZyA9ICFyZXZzLT5pZ25vcmVfbWVyZ2VzOworCisJaWYgKGNhY2hlZCAmJiBpZHggJiYgY2Vfc3RhZ2UoaWR4KSkgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjsKKwkJcGFpciA9IGRpZmZfdW5tZXJnZSgmcmV2cy0+ZGlmZm9wdCwgaWR4LT5uYW1lKTsKKwkJaWYgKHRyZWUpCisJCQlmaWxsX2ZpbGVzcGVjKHBhaXItPm9uZSwgdHJlZS0+c2hhMSwgMSwgdHJlZS0+Y2VfbW9kZSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNvbWV0aGluZyBhZGRlZCB0byB0aGUgdHJlZT8KKwkgKi8KKwlpZiAoIXRyZWUpIHsKKwkJc2hvd19uZXdfZmlsZShyZXZzLCBpZHgsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNvbWV0aGluZyByZW1vdmVkIGZyb20gdGhlIHRyZWU/CisJICovCisJaWYgKCFpZHgpIHsKKwkJZGlmZl9pbmRleF9zaG93X2ZpbGUocmV2cywgIi0iLCB0cmVlLCB0cmVlLT5zaGExLCAxLCB0cmVlLT5jZV9tb2RlLCAwKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNob3cgZGlmZmVyZW5jZSBiZXR3ZWVuIG9sZCBhbmQgbmV3ICovCisJc2hvd19tb2RpZmllZChyZXZzLCB0cmVlLCBpZHgsIDEsIGNhY2hlZCwgbWF0Y2hfbWlzc2luZyk7Cit9CisKKy8qCisgKiBUaGUgdW5wYWNrX3RyZWVzKCkgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIGZvciBtZXJnaW5nLCBzbworICogdGhlIGRpZmZlcmVudCBzb3VyY2UgZW50cmllcyBhcmUgZGVzaWduZWQgcHJpbWFyaWx5IGZvcgorICogdGhlIHNvdXJjZSB0cmVlcywgd2l0aCB0aGUgb2xkIGluZGV4IGJlaW5nIHJlYWxseSBtYWlubHkKKyAqIHVzZWQgZm9yIGJlaW5nIHJlcGxhY2VkIGJ5IHRoZSByZXN1bHQuCisgKgorICogRm9yIGRpZmZpbmcsIHRoZSBpbmRleCBpcyBtb3JlIGltcG9ydGFudCwgYW5kIHdlIG9ubHkgaGF2ZSBhCisgKiBzaW5nbGUgdHJlZS4KKyAqCisgKiBXZSdyZSBzdXBwb3NlZCB0byBhZHZhbmNlIG8tPnBvcyB0byBza2lwIHdoYXQgd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZC4KKyAqCisgKiBUaGlzIHdyYXBwZXIgbWFrZXMgaXQgYWxsIG1vcmUgcmVhZGFibGUsIGFuZCB0YWtlcyBjYXJlIG9mIGFsbAorICogdGhlIGZhaXJseSBjb21wbGV4IHVucGFja190cmVlcygpIHNlbWFudGljIHJlcXVpcmVtZW50cywgaW5jbHVkaW5nCisgKiB0aGUgc2tpcHBpbmcsIHRoZSBwYXRoIG1hdGNoaW5nLCB0aGUgdHlwZSBjb25mbGljdCBjYXNlcyBldGMuCisgKi8KK3N0YXRpYyBpbnQgb25ld2F5X2RpZmYoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnNyYywKKwkJICAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmlkeCA9IHNyY1swXTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKnRyZWUgPSBzcmNbMV07CisJc3RydWN0IHJldl9pbmZvICpyZXZzID0gby0+dW5wYWNrX2RhdGE7CisKKwkvKgorCSAqIFVucGFjay10cmVlcyBnZW5lcmF0ZXMgYSBERi9jb25mbGljdCBlbnRyeSBpZgorCSAqIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBpbiB0aGUgaW5kZXggYW5kIGEgdHJlZQorCSAqIGluIHRoZSB0cmVlLiBGcm9tIGEgZGlmZiBzdGFuZHBvaW50LCB0aGF0J3MgYQorCSAqIGRlbGV0ZSBvZiB0aGUgdHJlZSBhbmQgYSBjcmVhdGUgb2YgdGhlIGZpbGUuCisJICovCisJaWYgKHRyZWUgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCXRyZWUgPSBOVUxMOworCisJaWYgKGNlX3BhdGhfbWF0Y2goaWR4ID8gaWR4IDogdHJlZSwgJnJldnMtPnBydW5lX2RhdGEsIE5VTEwpKSB7CisJCWRvX29uZXdheV9kaWZmKG8sIGlkeCwgdHJlZSk7CisJCWlmIChkaWZmX2Nhbl9xdWl0X2Vhcmx5KCZyZXZzLT5kaWZmb3B0KSkgeworCQkJby0+ZXhpdGluZ19lYXJseSA9IDE7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWZmX2NhY2hlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZV9zaGExLAorCQkgICAgICBjb25zdCBjaGFyICp0cmVlX25hbWUsCisJCSAgICAgIGludCBjYWNoZWQpCit7CisJc3RydWN0IHRyZWUgKnRyZWU7CisJc3RydWN0IHRyZWVfZGVzYyB0OworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyBvcHRzOworCisJdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QodHJlZV9zaGExKTsKKwlpZiAoIXRyZWUpCisJCXJldHVybiBlcnJvcigiYmFkIHRyZWUgb2JqZWN0ICVzIiwKKwkJCSAgICAgdHJlZV9uYW1lID8gdHJlZV9uYW1lIDogc2hhMV90b19oZXgodHJlZV9zaGExKSk7CisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCW9wdHMuaGVhZF9pZHggPSAxOworCW9wdHMuaW5kZXhfb25seSA9IGNhY2hlZDsKKwlvcHRzLmRpZmZfaW5kZXhfY2FjaGVkID0gKGNhY2hlZCAmJgorCQkJCSAgIURJRkZfT1BUX1RTVCgmcmV2cy0+ZGlmZm9wdCwgRklORF9DT1BJRVNfSEFSREVSKSk7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5mbiA9IG9uZXdheV9kaWZmOworCW9wdHMudW5wYWNrX2RhdGEgPSByZXZzOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9IE5VTEw7CisJb3B0cy5wYXRoc3BlYyA9ICZyZXZzLT5kaWZmb3B0LnBhdGhzcGVjOworCW9wdHMucGF0aHNwZWMtPnJlY3Vyc2l2ZSA9IDE7CisKKwlpbml0X3RyZWVfZGVzYygmdCwgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwlyZXR1cm4gdW5wYWNrX3RyZWVzKDEsICZ0LCAmb3B0cyk7Cit9CisKK2ludCBydW5fZGlmZl9pbmRleChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBjYWNoZWQpCit7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50OworCisJZW50ID0gcmV2cy0+cGVuZGluZy5vYmplY3RzOworCWlmIChkaWZmX2NhY2hlKHJldnMsIGVudC0+aXRlbS0+c2hhMSwgZW50LT5uYW1lLCBjYWNoZWQpKQorCQlleGl0KDEyOCk7CisKKwlkaWZmX3NldF9tbmVtb25pY19wcmVmaXgoJnJldnMtPmRpZmZvcHQsICJjLyIsIGNhY2hlZCA/ICJpLyIgOiAidy8iKTsKKwlkaWZmY29yZV9maXhfZGlmZl9pbmRleCgmcmV2cy0+ZGlmZm9wdCk7CisJZGlmZmNvcmVfc3RkKCZyZXZzLT5kaWZmb3B0KTsKKwlkaWZmX2ZsdXNoKCZyZXZzLT5kaWZmb3B0KTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRvX2RpZmZfY2FjaGUoY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZV9zaGExLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJc3RydWN0IHJldl9pbmZvIHJldnM7CisKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisJY29weV9wYXRoc3BlYygmcmV2cy5wcnVuZV9kYXRhLCAmb3B0LT5wYXRoc3BlYyk7CisJcmV2cy5kaWZmb3B0ID0gKm9wdDsKKworCWlmIChkaWZmX2NhY2hlKCZyZXZzLCB0cmVlX3NoYTEsIE5VTEwsIDEpKQorCQlleGl0KDEyOCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBpbmRleF9kaWZmZXJzX2Zyb20oY29uc3QgY2hhciAqZGVmLCBpbnQgZGlmZl9mbGFncykKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgb3B0OworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsKKwlvcHQuZGVmID0gZGVmOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCAmb3B0KTsKKwlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBRVUlDSyk7CisJRElGRl9PUFRfU0VUKCZyZXYuZGlmZm9wdCwgRVhJVF9XSVRIX1NUQVRVUyk7CisJcmV2LmRpZmZvcHQuZmxhZ3MgfD0gZGlmZl9mbGFnczsKKwlydW5fZGlmZl9pbmRleCgmcmV2LCAxKTsKKwlpZiAocmV2LnBlbmRpbmcuYWxsb2MpCisJCWZyZWUocmV2LnBlbmRpbmcub2JqZWN0cyk7CisJcmV0dXJuIChESUZGX09QVF9UU1QoJnJldi5kaWZmb3B0LCBIQVNfQ0hBTkdFUykgIT0gMCk7Cit9CmRpZmYgLS1naXQgYS9kaWZmLW5vLWluZGV4LmMgYi9kaWZmLW5vLWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUwZmQyNwotLS0gL2Rldi9udWxsCisrKyBiL2RpZmYtbm8taW5kZXguYwpAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqICJkaWZmIC0tbm8taW5kZXgiIHN1cHBvcnQKKyAqIENvcHlyaWdodCAoYykgMjAwNyBieSBKb2hhbm5lcyBTY2hpbmRlbGluCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggYnkgSnVuaW8gQyBIYW1hbm8KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxvZy10cmVlLmgiCisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiZGlyLmgiCisKK3N0YXRpYyBpbnQgcmVhZF9kaXJlY3RvcnlfY29udGVudHMoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0KQoreworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmU7CisKKwlpZiAoIShkaXIgPSBvcGVuZGlyKHBhdGgpKSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgb3BlbiBkaXJlY3RvcnkgJXMiLCBwYXRoKTsKKworCXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkpCisJCWlmICghaXNfZG90X29yX2RvdGRvdChlLT5kX25hbWUpKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KGxpc3QsIGUtPmRfbmFtZSk7CisKKwljbG9zZWRpcihkaXIpOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBzaG91bGQgYmUgIihzdGFuZGFyZCBpbnB1dCkiIG9yIHNvbWV0aGluZywgYnV0IGl0IHdpbGwKKyAqIHByb2JhYmx5IGV4cG9zZSBtYW55IG1vcmUgYnJlYWthZ2VzIGluIHRoZSB3YXkgbm8taW5kZXggY29kZQorICogaXMgYm9sdGVkIG9udG8gdGhlIGRpZmYgY2FsbGNoYWluLgorICovCitzdGF0aWMgY29uc3QgY2hhciBmaWxlX2Zyb21fc3RhbmRhcmRfaW5wdXRbXSA9ICItIjsKKworc3RhdGljIGludCBnZXRfbW9kZShjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1vZGUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoIXBhdGggfHwgIXN0cmNtcChwYXRoLCAiL2Rldi9udWxsIikpCisJCSptb2RlID0gMDsKKyNpZmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwllbHNlIGlmICghc3RyY2FzZWNtcChwYXRoLCAibnVsIikpCisJCSptb2RlID0gMDsKKyNlbmRpZgorCWVsc2UgaWYgKHBhdGggPT0gZmlsZV9mcm9tX3N0YW5kYXJkX2lucHV0KQorCQkqbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKDA2NjYpOworCWVsc2UgaWYgKGxzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IGFjY2VzcyAnJXMnIiwgcGF0aCk7CisJZWxzZQorCQkqbW9kZSA9IHN0LnN0X21vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG9wdWxhdGVfZnJvbV9zdGRpbihzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXNpemVfdCBzaXplID0gMDsKKworCWlmIChzdHJidWZfcmVhZCgmYnVmLCAwLCAwKSA8IDApCisJCXJldHVybiBlcnJvcigiZXJyb3Igd2hpbGUgcmVhZGluZyBmcm9tIHN0ZGluICVzIiwKKwkJCQkgICAgIHN0cmVycm9yKGVycm5vKSk7CisKKwlzLT5zaG91bGRfbXVubWFwID0gMDsKKwlzLT5kYXRhID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc2l6ZSk7CisJcy0+c2l6ZSA9IHNpemU7CisJcy0+c2hvdWxkX2ZyZWUgPSAxOworCXMtPmlzX3N0ZGluID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpub2luZGV4X2ZpbGVzcGVjKGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlKQoreworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzOworCisJaWYgKCFuYW1lKQorCQluYW1lID0gIi9kZXYvbnVsbCI7CisJcyA9IGFsbG9jX2ZpbGVzcGVjKG5hbWUpOworCWZpbGxfZmlsZXNwZWMocywgbnVsbF9zaGExLCAwLCBtb2RlKTsKKwlpZiAobmFtZSA9PSBmaWxlX2Zyb21fc3RhbmRhcmRfaW5wdXQpCisJCXBvcHVsYXRlX2Zyb21fc3RkaW4ocyk7CisJcmV0dXJuIHM7Cit9CisKK3N0YXRpYyBpbnQgcXVldWVfZGlmZihzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lMSwgY29uc3QgY2hhciAqbmFtZTIpCit7CisJaW50IG1vZGUxID0gMCwgbW9kZTIgPSAwOworCisJaWYgKGdldF9tb2RlKG5hbWUxLCAmbW9kZTEpIHx8IGdldF9tb2RlKG5hbWUyLCAmbW9kZTIpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAobW9kZTEgJiYgbW9kZTIgJiYgU19JU0RJUihtb2RlMSkgIT0gU19JU0RJUihtb2RlMikpIHsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmQxLCAqZDI7CisKKwkJaWYgKFNfSVNESVIobW9kZTEpKSB7CisJCQkvKiAyIGlzIGZpbGUgdGhhdCBpcyBjcmVhdGVkICovCisJCQlkMSA9IG5vaW5kZXhfZmlsZXNwZWMoTlVMTCwgMCk7CisJCQlkMiA9IG5vaW5kZXhfZmlsZXNwZWMobmFtZTIsIG1vZGUyKTsKKwkJCW5hbWUyID0gTlVMTDsKKwkJCW1vZGUyID0gMDsKKwkJfSBlbHNlIHsKKwkJCS8qIDEgaXMgZmlsZSB0aGF0IGlzIGRlbGV0ZWQgKi8KKwkJCWQxID0gbm9pbmRleF9maWxlc3BlYyhuYW1lMSwgbW9kZTEpOworCQkJZDIgPSBub2luZGV4X2ZpbGVzcGVjKE5VTEwsIDApOworCQkJbmFtZTEgPSBOVUxMOworCQkJbW9kZTEgPSAwOworCQl9CisJCS8qIGVtaXQgdGhhdCBmaWxlICovCisJCWRpZmZfcXVldWUoJmRpZmZfcXVldWVkX2RpZmYsIGQxLCBkMik7CisKKwkJLyogYW5kIHRoZW4gbGV0IHRoZSBlbnRpcmUgZGlyZWN0b3J5IGJlIGNyZWF0ZWQgb3IgZGVsZXRlZCAqLworCX0KKworCWlmIChTX0lTRElSKG1vZGUxKSB8fCBTX0lTRElSKG1vZGUyKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZmZlcjEgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHN0cmJ1ZiBidWZmZXIyID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBwMSA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcDIgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwkJaW50IGkxLCBpMiwgcmV0ID0gMDsKKwkJc2l6ZV90IGxlbjEgPSAwLCBsZW4yID0gMDsKKworCQlpZiAobmFtZTEgJiYgcmVhZF9kaXJlY3RvcnlfY29udGVudHMobmFtZTEsICZwMSkpCisJCQlyZXR1cm4gLTE7CisJCWlmIChuYW1lMiAmJiByZWFkX2RpcmVjdG9yeV9jb250ZW50cyhuYW1lMiwgJnAyKSkgeworCQkJc3RyaW5nX2xpc3RfY2xlYXIoJnAxLCAwKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChuYW1lMSkgeworCQkJc3RyYnVmX2FkZHN0cigmYnVmZmVyMSwgbmFtZTEpOworCQkJc3RyYnVmX2NvbXBsZXRlKCZidWZmZXIxLCAnLycpOworCQkJbGVuMSA9IGJ1ZmZlcjEubGVuOworCQl9CisKKwkJaWYgKG5hbWUyKSB7CisJCQlzdHJidWZfYWRkc3RyKCZidWZmZXIyLCBuYW1lMik7CisJCQlzdHJidWZfY29tcGxldGUoJmJ1ZmZlcjIsICcvJyk7CisJCQlsZW4yID0gYnVmZmVyMi5sZW47CisJCX0KKworCQlmb3IgKGkxID0gaTIgPSAwOyAhcmV0ICYmIChpMSA8IHAxLm5yIHx8IGkyIDwgcDIubnIpOyApIHsKKwkJCWNvbnN0IGNoYXIgKm4xLCAqbjI7CisJCQlpbnQgY29tcDsKKworCQkJc3RyYnVmX3NldGxlbigmYnVmZmVyMSwgbGVuMSk7CisJCQlzdHJidWZfc2V0bGVuKCZidWZmZXIyLCBsZW4yKTsKKworCQkJaWYgKGkxID09IHAxLm5yKQorCQkJCWNvbXAgPSAxOworCQkJZWxzZSBpZiAoaTIgPT0gcDIubnIpCisJCQkJY29tcCA9IC0xOworCQkJZWxzZQorCQkJCWNvbXAgPSBzdHJjbXAocDEuaXRlbXNbaTFdLnN0cmluZywgcDIuaXRlbXNbaTJdLnN0cmluZyk7CisKKwkJCWlmIChjb21wID4gMCkKKwkJCQluMSA9IE5VTEw7CisJCQllbHNlIHsKKwkJCQlzdHJidWZfYWRkc3RyKCZidWZmZXIxLCBwMS5pdGVtc1tpMSsrXS5zdHJpbmcpOworCQkJCW4xID0gYnVmZmVyMS5idWY7CisJCQl9CisKKwkJCWlmIChjb21wIDwgMCkKKwkJCQluMiA9IE5VTEw7CisJCQllbHNlIHsKKwkJCQlzdHJidWZfYWRkc3RyKCZidWZmZXIyLCBwMi5pdGVtc1tpMisrXS5zdHJpbmcpOworCQkJCW4yID0gYnVmZmVyMi5idWY7CisJCQl9CisKKwkJCXJldCA9IHF1ZXVlX2RpZmYobywgbjEsIG4yKTsKKwkJfQorCQlzdHJpbmdfbGlzdF9jbGVhcigmcDEsIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcigmcDIsIDApOworCQlzdHJidWZfcmVsZWFzZSgmYnVmZmVyMSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIyKTsKKworCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkMSwgKmQyOworCisJCWlmIChESUZGX09QVF9UU1QobywgUkVWRVJTRV9ESUZGKSkgeworCQkJdW5zaWduZWQgdG1wOworCQkJY29uc3QgY2hhciAqdG1wX2M7CisJCQl0bXAgPSBtb2RlMTsgbW9kZTEgPSBtb2RlMjsgbW9kZTIgPSB0bXA7CisJCQl0bXBfYyA9IG5hbWUxOyBuYW1lMSA9IG5hbWUyOyBuYW1lMiA9IHRtcF9jOworCQl9CisKKwkJZDEgPSBub2luZGV4X2ZpbGVzcGVjKG5hbWUxLCBtb2RlMSk7CisJCWQyID0gbm9pbmRleF9maWxlc3BlYyhuYW1lMiwgbW9kZTIpOworCQlkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBkMSwgZDIpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKKy8qIGFwcGVuZCBiYXNlbmFtZSBvZiBGIHRvIEQgKi8KK3N0YXRpYyB2b2lkIGFwcGVuZF9iYXNlbmFtZShzdHJ1Y3Qgc3RyYnVmICpwYXRoLCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJY29uc3QgY2hhciAqdGFpbCA9IHN0cnJjaHIoZmlsZSwgJy8nKTsKKworCXN0cmJ1Zl9hZGRzdHIocGF0aCwgZGlyKTsKKwl3aGlsZSAocGF0aC0+bGVuICYmIHBhdGgtPmJ1ZltwYXRoLT5sZW4gLSAxXSA9PSAnLycpCisJCXBhdGgtPmxlbi0tOworCXN0cmJ1Zl9hZGRjaChwYXRoLCAnLycpOworCXN0cmJ1Zl9hZGRzdHIocGF0aCwgdGFpbCA/IHRhaWwgKyAxIDogZmlsZSk7Cit9CisKKy8qCisgKiBEV0lNICJkaWZmIEQgRiIgaW50byAiZGlmZiBEL0YgRiIgYW5kICJkaWZmIEYgRCIgaW50byAiZGlmZiBGIEQvRiIKKyAqIE5vdGUgdGhhdCB3ZSBhcHBlbmQgdGhlIGJhc2VuYW1lIG9mIEYgdG8gRC8sIHNvICJkaWZmIGEvYi9maWxlIEQiCisgKiBiZWNvbWVzICJkaWZmIGEvYi9maWxlIEQvZmlsZSIsIG5vdCAiZGlmZiBhL2IvZmlsZSBEL2EvYi9maWxlIi4KKyAqLworc3RhdGljIHZvaWQgZml4dXBfcGF0aHMoY29uc3QgY2hhciAqKnBhdGgsIHN0cnVjdCBzdHJidWYgKnJlcGxhY2VtZW50KQoreworCXVuc2lnbmVkIGludCBpc2RpcjAsIGlzZGlyMTsKKworCWlmIChwYXRoWzBdID09IGZpbGVfZnJvbV9zdGFuZGFyZF9pbnB1dCB8fAorCSAgICBwYXRoWzFdID09IGZpbGVfZnJvbV9zdGFuZGFyZF9pbnB1dCkKKwkJcmV0dXJuOworCWlzZGlyMCA9IGlzX2RpcmVjdG9yeShwYXRoWzBdKTsKKwlpc2RpcjEgPSBpc19kaXJlY3RvcnkocGF0aFsxXSk7CisJaWYgKGlzZGlyMCA9PSBpc2RpcjEpCisJCXJldHVybjsKKwlpZiAoaXNkaXIwKSB7CisJCWFwcGVuZF9iYXNlbmFtZShyZXBsYWNlbWVudCwgcGF0aFswXSwgcGF0aFsxXSk7CisJCXBhdGhbMF0gPSByZXBsYWNlbWVudC0+YnVmOworCX0gZWxzZSB7CisJCWFwcGVuZF9iYXNlbmFtZShyZXBsYWNlbWVudCwgcGF0aFsxXSwgcGF0aFswXSk7CisJCXBhdGhbMV0gPSByZXBsYWNlbWVudC0+YnVmOworCX0KK30KKwordm9pZCBkaWZmX25vX2luZGV4KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJICAgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkgICBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJaW50IGksIHByZWZpeGxlbjsKKwljb25zdCBjaGFyICpwYXRoc1syXTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlcGxhY2VtZW50ID0gU1RSQlVGX0lOSVQ7CisKKwlkaWZmX3NldHVwKCZyZXZzLT5kaWZmb3B0KTsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYyAtIDI7ICkgeworCQlpbnQgajsKKwkJaWYgKCFzdHJjbXAoYXJndltpXSwgIi0tbm8taW5kZXgiKSkKKwkJCWkrKzsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLS0iKSkKKwkJCWkrKzsKKwkJZWxzZSB7CisJCQlqID0gZGlmZl9vcHRfcGFyc2UoJnJldnMtPmRpZmZvcHQsIGFyZ3YgKyBpLCBhcmdjIC0gaSk7CisJCQlpZiAoaiA8PSAwKQorCQkJCWRpZSgiaW52YWxpZCBkaWZmIG9wdGlvbi92YWx1ZTogJXMiLCBhcmd2W2ldKTsKKwkJCWkgKz0gajsKKwkJfQorCX0KKworCXByZWZpeGxlbiA9IHByZWZpeCA/IHN0cmxlbihwcmVmaXgpIDogMDsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnAgPSBhcmd2W2FyZ2MgLSAyICsgaV07CisJCWlmICghc3RyY21wKHAsICItIikpCisJCQkvKgorCQkJICogc3RkaW4gc2hvdWxkIGJlIHNwZWxsZWQgYXMgIi0iOyBpZiB5b3UgaGF2ZQorCQkJICogcGF0aCB0aGF0IGlzICItIiwgc3BlbGwgaXQgYXMgIi4vLSIuCisJCQkgKi8KKwkJCXAgPSBmaWxlX2Zyb21fc3RhbmRhcmRfaW5wdXQ7CisJCWVsc2UgaWYgKHByZWZpeGxlbikKKwkJCXAgPSB4c3RyZHVwKHByZWZpeF9maWxlbmFtZShwcmVmaXgsIHByZWZpeGxlbiwgcCkpOworCQlwYXRoc1tpXSA9IHA7CisJfQorCisJZml4dXBfcGF0aHMocGF0aHMsICZyZXBsYWNlbWVudCk7CisKKwlyZXZzLT5kaWZmb3B0LnNraXBfc3RhdF91bm1hdGNoID0gMTsKKwlpZiAoIXJldnMtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkKKwkJcmV2cy0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0ID0gRElGRl9GT1JNQVRfUEFUQ0g7CisKKwlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIE5PX0lOREVYKTsKKworCXJldnMtPm1heF9jb3VudCA9IC0yOworCWRpZmZfc2V0dXBfZG9uZSgmcmV2cy0+ZGlmZm9wdCk7CisKKwlzZXR1cF9kaWZmX3BhZ2VyKCZyZXZzLT5kaWZmb3B0KTsKKwlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIEVYSVRfV0lUSF9TVEFUVVMpOworCisJaWYgKHF1ZXVlX2RpZmYoJnJldnMtPmRpZmZvcHQsIHBhdGhzWzBdLCBwYXRoc1sxXSkpCisJCWV4aXQoMSk7CisJZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KCZyZXZzLT5kaWZmb3B0LCAiMS8iLCAiMi8iKTsKKwlkaWZmY29yZV9zdGQoJnJldnMtPmRpZmZvcHQpOworCWRpZmZfZmx1c2goJnJldnMtPmRpZmZvcHQpOworCisJc3RyYnVmX3JlbGVhc2UoJnJlcGxhY2VtZW50KTsKKworCS8qCisJICogVGhlIHJldHVybiBjb2RlIGZvciAtLW5vLWluZGV4IGltaXRhdGVzIGRpZmYoMSk6CisJICogMCA9IG5vIGNoYW5nZXMsIDEgPSBjaGFuZ2VzLCBlbHNlIGVycm9yCisJICovCisJZXhpdChkaWZmX3Jlc3VsdF9jb2RlKCZyZXZzLT5kaWZmb3B0LCAwKSk7Cit9CmRpZmYgLS1naXQgYS9kaWZmLmMgYi9kaWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBlYjBjMgotLS0gL2Rldi9udWxsCisrKyBiL2RpZmYuYwpAQCAtMCwwICsxLDUxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUtY29uZmlnLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAibGwtbWVyZ2UuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworI2lmZGVmIE5PX0ZBU1RfV09SS0lOR19ESVJFQ1RPUlkKKyNkZWZpbmUgRkFTVF9XT1JLSU5HX0RJUkVDVE9SWSAwCisjZWxzZQorI2RlZmluZSBGQVNUX1dPUktJTkdfRElSRUNUT1JZIDEKKyNlbmRpZgorCitzdGF0aWMgaW50IGRpZmZfZGV0ZWN0X3JlbmFtZV9kZWZhdWx0Oworc3RhdGljIGludCBkaWZmX3JlbmFtZV9saW1pdF9kZWZhdWx0ID0gNDAwOworc3RhdGljIGludCBkaWZmX3N1cHByZXNzX2JsYW5rX2VtcHR5Oworc3RhdGljIGludCBkaWZmX3VzZV9jb2xvcl9kZWZhdWx0ID0gLTE7CitzdGF0aWMgaW50IGRpZmZfY29udGV4dF9kZWZhdWx0ID0gMzsKK3N0YXRpYyBjb25zdCBjaGFyICpkaWZmX3dvcmRfcmVnZXhfY2ZnOworc3RhdGljIGNvbnN0IGNoYXIgKmV4dGVybmFsX2RpZmZfY21kX2NmZzsKK3N0YXRpYyBjb25zdCBjaGFyICpkaWZmX29yZGVyX2ZpbGVfY2ZnOworaW50IGRpZmZfYXV0b19yZWZyZXNoX2luZGV4ID0gMTsKK3N0YXRpYyBpbnQgZGlmZl9tbmVtb25pY19wcmVmaXg7CitzdGF0aWMgaW50IGRpZmZfbm9fcHJlZml4Oworc3RhdGljIGludCBkaWZmX3N0YXRfZ3JhcGhfd2lkdGg7CitzdGF0aWMgaW50IGRpZmZfZGlyc3RhdF9wZXJtaWxsZV9kZWZhdWx0ID0gMzA7CitzdGF0aWMgc3RydWN0IGRpZmZfb3B0aW9ucyBkZWZhdWx0X2RpZmZfb3B0aW9uczsKK3N0YXRpYyBsb25nIGRpZmZfYWxnb3JpdGhtOworCitzdGF0aWMgY2hhciBkaWZmX2NvbG9yc1tdW0NPTE9SX01BWExFTl0gPSB7CisJR0lUX0NPTE9SX1JFU0VULAorCUdJVF9DT0xPUl9OT1JNQUwsCS8qIENPTlRFWFQgKi8KKwlHSVRfQ09MT1JfQk9MRCwJCS8qIE1FVEFJTkZPICovCisJR0lUX0NPTE9SX0NZQU4sCQkvKiBGUkFHSU5GTyAqLworCUdJVF9DT0xPUl9SRUQsCQkvKiBPTEQgKi8KKwlHSVRfQ09MT1JfR1JFRU4sCS8qIE5FVyAqLworCUdJVF9DT0xPUl9ZRUxMT1csCS8qIENPTU1JVCAqLworCUdJVF9DT0xPUl9CR19SRUQsCS8qIFdISVRFU1BBQ0UgKi8KKwlHSVRfQ09MT1JfTk9STUFMLAkvKiBGVU5DSU5GTyAqLworfTsKKworc3RhdGljIGludCBwYXJzZV9kaWZmX2NvbG9yX3Nsb3QoY29uc3QgY2hhciAqdmFyKQoreworCWlmICghc3RyY2FzZWNtcCh2YXIsICJjb250ZXh0IikgfHwgIXN0cmNhc2VjbXAodmFyLCAicGxhaW4iKSkKKwkJcmV0dXJuIERJRkZfQ09OVEVYVDsKKwlpZiAoIXN0cmNhc2VjbXAodmFyLCAibWV0YSIpKQorCQlyZXR1cm4gRElGRl9NRVRBSU5GTzsKKwlpZiAoIXN0cmNhc2VjbXAodmFyLCAiZnJhZyIpKQorCQlyZXR1cm4gRElGRl9GUkFHSU5GTzsKKwlpZiAoIXN0cmNhc2VjbXAodmFyLCAib2xkIikpCisJCXJldHVybiBESUZGX0ZJTEVfT0xEOworCWlmICghc3RyY2FzZWNtcCh2YXIsICJuZXciKSkKKwkJcmV0dXJuIERJRkZfRklMRV9ORVc7CisJaWYgKCFzdHJjYXNlY21wKHZhciwgImNvbW1pdCIpKQorCQlyZXR1cm4gRElGRl9DT01NSVQ7CisJaWYgKCFzdHJjYXNlY21wKHZhciwgIndoaXRlc3BhY2UiKSkKKwkJcmV0dXJuIERJRkZfV0hJVEVTUEFDRTsKKwlpZiAoIXN0cmNhc2VjbXAodmFyLCAiZnVuYyIpKQorCQlyZXR1cm4gRElGRl9GVU5DSU5GTzsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZGlyc3RhdF9wYXJhbXMoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywgY29uc3QgY2hhciAqcGFyYW1zX3N0cmluZywKKwkJCQlzdHJ1Y3Qgc3RyYnVmICplcnJtc2cpCit7CisJY2hhciAqcGFyYW1zX2NvcHkgPSB4c3RyZHVwKHBhcmFtc19zdHJpbmcpOworCXN0cnVjdCBzdHJpbmdfbGlzdCBwYXJhbXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWludCByZXQgPSAwOworCWludCBpOworCisJaWYgKCpwYXJhbXNfY29weSkKKwkJc3RyaW5nX2xpc3Rfc3BsaXRfaW5fcGxhY2UoJnBhcmFtcywgcGFyYW1zX2NvcHksICcsJywgLTEpOworCWZvciAoaSA9IDA7IGkgPCBwYXJhbXMubnI7IGkrKykgeworCQljb25zdCBjaGFyICpwID0gcGFyYW1zLml0ZW1zW2ldLnN0cmluZzsKKwkJaWYgKCFzdHJjbXAocCwgImNoYW5nZXMiKSkgeworCQkJRElGRl9PUFRfQ0xSKG9wdGlvbnMsIERJUlNUQVRfQllfTElORSk7CisJCQlESUZGX09QVF9DTFIob3B0aW9ucywgRElSU1RBVF9CWV9GSUxFKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHAsICJsaW5lcyIpKSB7CisJCQlESUZGX09QVF9TRVQob3B0aW9ucywgRElSU1RBVF9CWV9MSU5FKTsKKwkJCURJRkZfT1BUX0NMUihvcHRpb25zLCBESVJTVEFUX0JZX0ZJTEUpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAocCwgImZpbGVzIikpIHsKKwkJCURJRkZfT1BUX0NMUihvcHRpb25zLCBESVJTVEFUX0JZX0xJTkUpOworCQkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIERJUlNUQVRfQllfRklMRSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChwLCAibm9uY3VtdWxhdGl2ZSIpKSB7CisJCQlESUZGX09QVF9DTFIob3B0aW9ucywgRElSU1RBVF9DVU1VTEFUSVZFKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHAsICJjdW11bGF0aXZlIikpIHsKKwkJCURJRkZfT1BUX1NFVChvcHRpb25zLCBESVJTVEFUX0NVTVVMQVRJVkUpOworCQl9IGVsc2UgaWYgKGlzZGlnaXQoKnApKSB7CisJCQljaGFyICplbmQ7CisJCQlpbnQgcGVybWlsbGUgPSBzdHJ0b3VsKHAsICZlbmQsIDEwKSAqIDEwOworCQkJaWYgKCplbmQgPT0gJy4nICYmIGlzZGlnaXQoKisrZW5kKSkgeworCQkJCS8qIG9ubHkgdXNlIGZpcnN0IGRpZ2l0ICovCisJCQkJcGVybWlsbGUgKz0gKmVuZCAtICcwJzsKKwkJCQkvKiAuLiBhbmQgaWdub3JlIGFueSBmdXJ0aGVyIGRpZ2l0cyAqLworCQkJCXdoaWxlIChpc2RpZ2l0KCorK2VuZCkpCisJCQkJCTsgLyogbm90aGluZyAqLworCQkJfQorCQkJaWYgKCEqZW5kKQorCQkJCW9wdGlvbnMtPmRpcnN0YXRfcGVybWlsbGUgPSBwZXJtaWxsZTsKKwkJCWVsc2UgeworCQkJCXN0cmJ1Zl9hZGRmKGVycm1zZywgXygiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIiksCisJCQkJCSAgICBwKTsKKwkJCQlyZXQrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9hZGRmKGVycm1zZywgXygiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIpLCBwKTsKKwkJCXJldCsrOworCQl9CisKKwl9CisJc3RyaW5nX2xpc3RfY2xlYXIoJnBhcmFtcywgMCk7CisJZnJlZShwYXJhbXNfY29weSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYXJzZV9zdWJtb2R1bGVfcGFyYW1zKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKHZhbHVlLCAibG9nIikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBTVUJNT0RVTEVfTE9HKTsKKwllbHNlIGlmICghc3RyY21wKHZhbHVlLCAic2hvcnQiKSkKKwkJRElGRl9PUFRfQ0xSKG9wdGlvbnMsIFNVQk1PRFVMRV9MT0cpOworCWVsc2UKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF9jb25maWdfcmVuYW1lKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIERJRkZfREVURUNUX1JFTkFNRTsKKwlpZiAoIXN0cmNhc2VjbXAodmFsdWUsICJjb3BpZXMiKSB8fCAhc3RyY2FzZWNtcCh2YWx1ZSwgImNvcHkiKSkKKwkJcmV0dXJuICBESUZGX0RFVEVDVF9DT1BZOworCXJldHVybiBnaXRfY29uZmlnX2Jvb2wodmFyLHZhbHVlKSA/IERJRkZfREVURUNUX1JFTkFNRSA6IDA7Cit9CisKK2xvbmcgcGFyc2VfYWxnb3JpdGhtX3ZhbHVlKGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghdmFsdWUpCisJCXJldHVybiAtMTsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgIm15ZXJzIikgfHwgIXN0cmNhc2VjbXAodmFsdWUsICJkZWZhdWx0IikpCisJCXJldHVybiAwOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKHZhbHVlLCAibWluaW1hbCIpKQorCQlyZXR1cm4gWERGX05FRURfTUlOSU1BTDsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgInBhdGllbmNlIikpCisJCXJldHVybiBYREZfUEFUSUVOQ0VfRElGRjsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2YWx1ZSwgImhpc3RvZ3JhbSIpKQorCQlyZXR1cm4gWERGX0hJU1RPR1JBTV9ESUZGOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFRoZXNlIGFyZSB0byBnaXZlIFVJIGxheWVyIGRlZmF1bHRzLgorICogVGhlIGNvcmUtbGV2ZWwgY29tbWFuZHMgc3VjaCBhcyBnaXQtZGlmZi1maWxlcyBzaG91bGQKKyAqIG5ldmVyIGJlIGFmZmVjdGVkIGJ5IHRoZSBzZXR0aW5nIG9mIGRpZmYucmVuYW1lcworICogdGhlIHVzZXIgaGFwcGVucyB0byBoYXZlIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisgKi8KK2ludCBnaXRfZGlmZl91aV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5jb2xvciIpIHx8ICFzdHJjbXAodmFyLCAiY29sb3IuZGlmZiIpKSB7CisJCWRpZmZfdXNlX2NvbG9yX2RlZmF1bHQgPSBnaXRfY29uZmlnX2NvbG9yYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKHZhciwgImRpZmYuY29udGV4dCIpKSB7CisJCWRpZmZfY29udGV4dF9kZWZhdWx0ID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCWlmIChkaWZmX2NvbnRleHRfZGVmYXVsdCA8IDApCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLnJlbmFtZXMiKSkgeworCQlkaWZmX2RldGVjdF9yZW5hbWVfZGVmYXVsdCA9IGdpdF9jb25maWdfcmVuYW1lKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5hdXRvcmVmcmVzaGluZGV4IikpIHsKKwkJZGlmZl9hdXRvX3JlZnJlc2hfaW5kZXggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLm1uZW1vbmljcHJlZml4IikpIHsKKwkJZGlmZl9tbmVtb25pY19wcmVmaXggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLm5vcHJlZml4IikpIHsKKwkJZGlmZl9ub19wcmVmaXggPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLnN0YXRncmFwaHdpZHRoIikpIHsKKwkJZGlmZl9zdGF0X2dyYXBoX3dpZHRoID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLmV4dGVybmFsIikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmZXh0ZXJuYWxfZGlmZl9jbWRfY2ZnLCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCh2YXIsICJkaWZmLndvcmRyZWdleCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRpZmZfd29yZF9yZWdleF9jZmcsIHZhciwgdmFsdWUpOworCWlmICghc3RyY21wKHZhciwgImRpZmYub3JkZXJmaWxlIikpCisJCXJldHVybiBnaXRfY29uZmlnX3BhdGhuYW1lKCZkaWZmX29yZGVyX2ZpbGVfY2ZnLCB2YXIsIHZhbHVlKTsKKworCWlmICghc3RyY21wKHZhciwgImRpZmYuaWdub3Jlc3VibW9kdWxlcyIpKQorCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKCZkZWZhdWx0X2RpZmZfb3B0aW9ucywgdmFsdWUpOworCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5zdWJtb2R1bGUiKSkgeworCQlpZiAocGFyc2Vfc3VibW9kdWxlX3BhcmFtcygmZGVmYXVsdF9kaWZmX29wdGlvbnMsIHZhbHVlKSkKKwkJCXdhcm5pbmcoXygiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciKSwKKwkJCQl2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImRpZmYuYWxnb3JpdGhtIikpIHsKKwkJZGlmZl9hbGdvcml0aG0gPSBwYXJzZV9hbGdvcml0aG1fdmFsdWUodmFsdWUpOworCQlpZiAoZGlmZl9hbGdvcml0aG0gPCAwKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ2l0X2NvbG9yX2NvbmZpZyh2YXIsIHZhbHVlLCBjYikgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZ2l0X2RpZmZfYmFzaWNfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworaW50IGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwljb25zdCBjaGFyICpuYW1lOworCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5yZW5hbWVsaW1pdCIpKSB7CisJCWRpZmZfcmVuYW1lX2xpbWl0X2RlZmF1bHQgPSBnaXRfY29uZmlnX2ludCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHVzZXJkaWZmX2NvbmZpZyh2YXIsIHZhbHVlKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChza2lwX3ByZWZpeCh2YXIsICJkaWZmLmNvbG9yLiIsICZuYW1lKSB8fAorCSAgICBza2lwX3ByZWZpeCh2YXIsICJjb2xvci5kaWZmLiIsICZuYW1lKSkgeworCQlpbnQgc2xvdCA9IHBhcnNlX2RpZmZfY29sb3Jfc2xvdChuYW1lKTsKKwkJaWYgKHNsb3QgPCAwKQorCQkJcmV0dXJuIDA7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmV0dXJuIGNvbG9yX3BhcnNlKHZhbHVlLCBkaWZmX2NvbG9yc1tzbG90XSk7CisJfQorCisJLyogbGlrZSBHTlUgZGlmZidzIC0tc3VwcHJlc3MtYmxhbmstZW1wdHkgb3B0aW9uICAqLworCWlmICghc3RyY21wKHZhciwgImRpZmYuc3VwcHJlc3NibGFua2VtcHR5IikgfHwKKwkJCS8qIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworCQkJIXN0cmNtcCh2YXIsICJkaWZmLnN1cHByZXNzLWJsYW5rLWVtcHR5IikpIHsKKwkJZGlmZl9zdXBwcmVzc19ibGFua19lbXB0eSA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiZGlmZi5kaXJzdGF0IikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBlcnJtc2cgPSBTVFJCVUZfSU5JVDsKKwkJZGVmYXVsdF9kaWZmX29wdGlvbnMuZGlyc3RhdF9wZXJtaWxsZSA9IGRpZmZfZGlyc3RhdF9wZXJtaWxsZV9kZWZhdWx0OworCQlpZiAocGFyc2VfZGlyc3RhdF9wYXJhbXMoJmRlZmF1bHRfZGlmZl9vcHRpb25zLCB2YWx1ZSwgJmVycm1zZykpCisJCQl3YXJuaW5nKF8oIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4lcyIpLAorCQkJCWVycm1zZy5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJybXNnKTsKKwkJZGlmZl9kaXJzdGF0X3Blcm1pbGxlX2RlZmF1bHQgPSBkZWZhdWx0X2RpZmZfb3B0aW9ucy5kaXJzdGF0X3Blcm1pbGxlOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc3RhcnRzX3dpdGgodmFyLCAic3VibW9kdWxlLiIpKQorCQlyZXR1cm4gcGFyc2Vfc3VibW9kdWxlX2NvbmZpZ19vcHRpb24odmFyLCB2YWx1ZSk7CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGNoYXIgKnF1b3RlX3R3byhjb25zdCBjaGFyICpvbmUsIGNvbnN0IGNoYXIgKnR3bykKK3sKKwlpbnQgbmVlZF9vbmUgPSBxdW90ZV9jX3N0eWxlKG9uZSwgTlVMTCwgTlVMTCwgMSk7CisJaW50IG5lZWRfdHdvID0gcXVvdGVfY19zdHlsZSh0d28sIE5VTEwsIE5VTEwsIDEpOworCXN0cnVjdCBzdHJidWYgcmVzID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAobmVlZF9vbmUgKyBuZWVkX3R3bykgeworCQlzdHJidWZfYWRkY2goJnJlcywgJyInKTsKKwkJcXVvdGVfY19zdHlsZShvbmUsICZyZXMsIE5VTEwsIDEpOworCQlxdW90ZV9jX3N0eWxlKHR3bywgJnJlcywgTlVMTCwgMSk7CisJCXN0cmJ1Zl9hZGRjaCgmcmVzLCAnIicpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoJnJlcywgb25lKTsKKwkJc3RyYnVmX2FkZHN0cigmcmVzLCB0d28pOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmcmVzLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmV4dGVybmFsX2RpZmYodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqZXh0ZXJuYWxfZGlmZl9jbWQgPSBOVUxMOworCXN0YXRpYyBpbnQgZG9uZV9wcmVwYXJpbmcgPSAwOworCisJaWYgKGRvbmVfcHJlcGFyaW5nKQorCQlyZXR1cm4gZXh0ZXJuYWxfZGlmZl9jbWQ7CisJZXh0ZXJuYWxfZGlmZl9jbWQgPSBnZXRlbnYoIkdJVF9FWFRFUk5BTF9ESUZGIik7CisJaWYgKCFleHRlcm5hbF9kaWZmX2NtZCkKKwkJZXh0ZXJuYWxfZGlmZl9jbWQgPSBleHRlcm5hbF9kaWZmX2NtZF9jZmc7CisJZG9uZV9wcmVwYXJpbmcgPSAxOworCXJldHVybiBleHRlcm5hbF9kaWZmX2NtZDsKK30KKworLyoKKyAqIEtlZXAgdHJhY2sgb2YgZmlsZXMgdXNlZCBmb3IgZGlmZmluZy4gU29tZXRpbWVzIHN1Y2ggYW4gZW50cnkKKyAqIHJlZmVycyB0byBhIHRlbXBvcmFyeSBmaWxlLCBzb21ldGltZXMgdG8gYW4gZXhpc3RpbmcgZmlsZSwgYW5kCisgKiBzb21ldGltZXMgdG8gIi9kZXYvbnVsbCIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGlmZl90ZW1wZmlsZSB7CisJLyoKKwkgKiBmaWxlbmFtZSBleHRlcm5hbCBkaWZmIHNob3VsZCByZWFkIGZyb20sIG9yIE5VTEwgaWYgdGhpcworCSAqIGVudHJ5IGlzIGN1cnJlbnRseSBub3QgaW4gdXNlOgorCSAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwljaGFyIGhleFtHSVRfU0hBMV9IRVhTWiArIDFdOworCWNoYXIgbW9kZVsxMF07CisKKwkvKgorCSAqIElmIHRoaXMgZGlmZl90ZW1wZmlsZSBpbnN0YW5jZSByZWZlcnMgdG8gYSB0ZW1wb3JhcnkgZmlsZSwKKwkgKiB0aGlzIHRlbXBmaWxlIG9iamVjdCBpcyB1c2VkIHRvIG1hbmFnZSBpdHMgbGlmZXRpbWUuCisJICovCisJc3RydWN0IHRlbXBmaWxlIHRlbXBmaWxlOworfSBkaWZmX3RlbXBbMl07CisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAoKnNhbmVfdHJ1bmNhdGVfZm4pKGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKTsKKworc3RydWN0IGVtaXRfY2FsbGJhY2sgeworCWludCBjb2xvcl9kaWZmOworCXVuc2lnbmVkIHdzX3J1bGU7CisJaW50IGJsYW5rX2F0X2VvZl9pbl9wcmVpbWFnZTsKKwlpbnQgYmxhbmtfYXRfZW9mX2luX3Bvc3RpbWFnZTsKKwlpbnQgbG5vX2luX3ByZWltYWdlOworCWludCBsbm9faW5fcG9zdGltYWdlOworCXNhbmVfdHJ1bmNhdGVfZm4gdHJ1bmNhdGU7CisJY29uc3QgY2hhciAqKmxhYmVsX3BhdGg7CisJc3RydWN0IGRpZmZfd29yZHNfZGF0YSAqZGlmZl93b3JkczsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQ7CisJaW50ICpmb3VuZF9jaGFuZ2VzcDsKKwlzdHJ1Y3Qgc3RyYnVmICpoZWFkZXI7Cit9OworCitzdGF0aWMgaW50IGNvdW50X2xpbmVzKGNvbnN0IGNoYXIgKmRhdGEsIGludCBzaXplKQoreworCWludCBjb3VudCwgY2gsIGNvbXBsZXRlbHlfZW1wdHkgPSAxLCBubF9qdXN0X3NlZW4gPSAwOworCWNvdW50ID0gMDsKKwl3aGlsZSAoMCA8IHNpemUtLSkgeworCQljaCA9ICpkYXRhKys7CisJCWlmIChjaCA9PSAnXG4nKSB7CisJCQljb3VudCsrOworCQkJbmxfanVzdF9zZWVuID0gMTsKKwkJCWNvbXBsZXRlbHlfZW1wdHkgPSAwOworCQl9CisJCWVsc2UgeworCQkJbmxfanVzdF9zZWVuID0gMDsKKwkJCWNvbXBsZXRlbHlfZW1wdHkgPSAwOworCQl9CisJfQorCWlmIChjb21wbGV0ZWx5X2VtcHR5KQorCQlyZXR1cm4gMDsKKwlpZiAoIW5sX2p1c3Rfc2VlbikKKwkJY291bnQrKzsgLyogbm8gdHJhaWxpbmcgbmV3bGluZSAqLworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCBmaWxsX21tZmlsZShtbWZpbGVfdCAqbWYsIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJaWYgKCFESUZGX0ZJTEVfVkFMSUQob25lKSkgeworCQltZi0+cHRyID0gKGNoYXIgKikiIjsgLyogZG9lcyBub3QgbWF0dGVyICovCisJCW1mLT5zaXplID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCAwKSkKKwkJcmV0dXJuIC0xOworCisJbWYtPnB0ciA9IG9uZS0+ZGF0YTsKKwltZi0+c2l6ZSA9IG9uZS0+c2l6ZTsKKwlyZXR1cm4gMDsKK30KKworLyogbGlrZSBmaWxsX21tZmlsZSwgYnV0IG9ubHkgZm9yIHNpemUsIHNvIHdlIGNhbiBhdm9pZCByZXRyaWV2aW5nIGJsb2IgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRpZmZfZmlsZXNwZWNfc2l6ZShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWlmICghRElGRl9GSUxFX1ZBTElEKG9uZSkpCisJCXJldHVybiAwOworCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCBDSEVDS19TSVpFX09OTFkpOworCXJldHVybiBvbmUtPnNpemU7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfdHJhaWxpbmdfYmxhbmsobW1maWxlX3QgKm1mLCB1bnNpZ25lZCB3c19ydWxlKQoreworCWNoYXIgKnB0ciA9IG1mLT5wdHI7CisJbG9uZyBzaXplID0gbWYtPnNpemU7CisJaW50IGNudCA9IDA7CisKKwlpZiAoIXNpemUpCisJCXJldHVybiBjbnQ7CisJcHRyICs9IHNpemUgLSAxOyAvKiBwb2ludGluZyBhdCB0aGUgdmVyeSBlbmQgKi8KKwlpZiAoKnB0ciAhPSAnXG4nKQorCQk7IC8qIGluY29tcGxldGUgbGluZSAqLworCWVsc2UKKwkJcHRyLS07IC8qIHNraXAgdGhlIGxhc3QgTEYgKi8KKwl3aGlsZSAobWYtPnB0ciA8IHB0cikgeworCQljaGFyICpwcmV2X2VvbDsKKwkJZm9yIChwcmV2X2VvbCA9IHB0cjsgbWYtPnB0ciA8PSBwcmV2X2VvbDsgcHJldl9lb2wtLSkKKwkJCWlmICgqcHJldl9lb2wgPT0gJ1xuJykKKwkJCQlicmVhazsKKwkJaWYgKCF3c19ibGFua19saW5lKHByZXZfZW9sICsgMSwgcHRyIC0gcHJldl9lb2wsIHdzX3J1bGUpKQorCQkJYnJlYWs7CisJCWNudCsrOworCQlwdHIgPSBwcmV2X2VvbCAtIDE7CisJfQorCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2JsYW5rX2F0X2VvZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLAorCQkJICAgICAgIHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhKQoreworCWludCBsMSwgbDIsIGF0OworCXVuc2lnbmVkIHdzX3J1bGUgPSBlY2JkYXRhLT53c19ydWxlOworCWwxID0gY291bnRfdHJhaWxpbmdfYmxhbmsobWYxLCB3c19ydWxlKTsKKwlsMiA9IGNvdW50X3RyYWlsaW5nX2JsYW5rKG1mMiwgd3NfcnVsZSk7CisJaWYgKGwyIDw9IGwxKSB7CisJCWVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wcmVpbWFnZSA9IDA7CisJCWVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wb3N0aW1hZ2UgPSAwOworCQlyZXR1cm47CisJfQorCWF0ID0gY291bnRfbGluZXMobWYxLT5wdHIsIG1mMS0+c2l6ZSk7CisJZWNiZGF0YS0+YmxhbmtfYXRfZW9mX2luX3ByZWltYWdlID0gKGF0IC0gbDEpICsgMTsKKworCWF0ID0gY291bnRfbGluZXMobWYyLT5wdHIsIG1mMi0+c2l6ZSk7CisJZWNiZGF0YS0+YmxhbmtfYXRfZW9mX2luX3Bvc3RpbWFnZSA9IChhdCAtIGwyKSArIDE7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfbGluZV8wKHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKnNldCwgY29uc3QgY2hhciAqcmVzZXQsCisJCQlpbnQgZmlyc3QsIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJaW50IGhhc190cmFpbGluZ19uZXdsaW5lLCBoYXNfdHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuOworCWludCBub2ZpcnN0OworCUZJTEUgKmZpbGUgPSBvLT5maWxlOworCisJZnB1dHMoZGlmZl9saW5lX3ByZWZpeChvKSwgZmlsZSk7CisKKwlpZiAobGVuID09IDApIHsKKwkJaGFzX3RyYWlsaW5nX25ld2xpbmUgPSAoZmlyc3QgPT0gJ1xuJyk7CisJCWhhc190cmFpbGluZ19jYXJyaWFnZV9yZXR1cm4gPSAoIWhhc190cmFpbGluZ19uZXdsaW5lICYmCisJCQkJCQkoZmlyc3QgPT0gJ1xyJykpOworCQlub2ZpcnN0ID0gaGFzX3RyYWlsaW5nX25ld2xpbmUgfHwgaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybjsKKwl9IGVsc2UgeworCQloYXNfdHJhaWxpbmdfbmV3bGluZSA9IChsZW4gPiAwICYmIGxpbmVbbGVuLTFdID09ICdcbicpOworCQlpZiAoaGFzX3RyYWlsaW5nX25ld2xpbmUpCisJCQlsZW4tLTsKKwkJaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybiA9IChsZW4gPiAwICYmIGxpbmVbbGVuLTFdID09ICdccicpOworCQlpZiAoaGFzX3RyYWlsaW5nX2NhcnJpYWdlX3JldHVybikKKwkJCWxlbi0tOworCQlub2ZpcnN0ID0gMDsKKwl9CisKKwlpZiAobGVuIHx8ICFub2ZpcnN0KSB7CisJCWZwdXRzKHNldCwgZmlsZSk7CisJCWlmICghbm9maXJzdCkKKwkJCWZwdXRjKGZpcnN0LCBmaWxlKTsKKwkJZndyaXRlKGxpbmUsIGxlbiwgMSwgZmlsZSk7CisJCWZwdXRzKHJlc2V0LCBmaWxlKTsKKwl9CisJaWYgKGhhc190cmFpbGluZ19jYXJyaWFnZV9yZXR1cm4pCisJCWZwdXRjKCdccicsIGZpbGUpOworCWlmIChoYXNfdHJhaWxpbmdfbmV3bGluZSkKKwkJZnB1dGMoJ1xuJywgZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfbGluZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLCBjb25zdCBjaGFyICpzZXQsIGNvbnN0IGNoYXIgKnJlc2V0LAorCQkgICAgICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWVtaXRfbGluZV8wKG8sIHNldCwgcmVzZXQsIGxpbmVbMF0sIGxpbmUrMSwgbGVuLTEpOworfQorCitzdGF0aWMgaW50IG5ld19ibGFua19saW5lX2F0X2VvZihzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwlpZiAoISgoZWNiZGF0YS0+d3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgJiYKKwkgICAgICBlY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcHJlaW1hZ2UgJiYKKwkgICAgICBlY2JkYXRhLT5ibGFua19hdF9lb2ZfaW5fcG9zdGltYWdlICYmCisJICAgICAgZWNiZGF0YS0+YmxhbmtfYXRfZW9mX2luX3ByZWltYWdlIDw9IGVjYmRhdGEtPmxub19pbl9wcmVpbWFnZSAmJgorCSAgICAgIGVjYmRhdGEtPmJsYW5rX2F0X2VvZl9pbl9wb3N0aW1hZ2UgPD0gZWNiZGF0YS0+bG5vX2luX3Bvc3RpbWFnZSkpCisJCXJldHVybiAwOworCXJldHVybiB3c19ibGFua19saW5lKGxpbmUsIGxlbiwgZWNiZGF0YS0+d3NfcnVsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfbGluZV9jaGVja2VkKGNvbnN0IGNoYXIgKnJlc2V0LAorCQkJICAgICAgc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEsCisJCQkgICAgICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuLAorCQkJICAgICAgZW51bSBjb2xvcl9kaWZmIGNvbG9yLAorCQkJICAgICAgdW5zaWduZWQgd3NfZXJyb3JfaGlnaGxpZ2h0LAorCQkJICAgICAgY2hhciBzaWduKQoreworCWNvbnN0IGNoYXIgKnNldCA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIGNvbG9yKTsKKwljb25zdCBjaGFyICp3cyA9IE5VTEw7CisKKwlpZiAoZWNiZGF0YS0+b3B0LT53c19lcnJvcl9oaWdobGlnaHQgJiB3c19lcnJvcl9oaWdobGlnaHQpIHsKKwkJd3MgPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX1dISVRFU1BBQ0UpOworCQlpZiAoISp3cykKKwkJCXdzID0gTlVMTDsKKwl9CisKKwlpZiAoIXdzKQorCQllbWl0X2xpbmVfMChlY2JkYXRhLT5vcHQsIHNldCwgcmVzZXQsIHNpZ24sIGxpbmUsIGxlbik7CisJZWxzZSBpZiAoc2lnbiA9PSAnKycgJiYgbmV3X2JsYW5rX2xpbmVfYXRfZW9mKGVjYmRhdGEsIGxpbmUsIGxlbikpCisJCS8qIEJsYW5rIGxpbmUgYXQgRU9GIC0gcGFpbnQgJysnIGFzIHdlbGwgKi8KKwkJZW1pdF9saW5lXzAoZWNiZGF0YS0+b3B0LCB3cywgcmVzZXQsIHNpZ24sIGxpbmUsIGxlbik7CisJZWxzZSB7CisJCS8qIEVtaXQganVzdCB0aGUgcHJlZml4LCB0aGVuIHRoZSByZXN0LiAqLworCQllbWl0X2xpbmVfMChlY2JkYXRhLT5vcHQsIHNldCwgcmVzZXQsIHNpZ24sICIiLCAwKTsKKwkJd3NfY2hlY2tfZW1pdChsaW5lLCBsZW4sIGVjYmRhdGEtPndzX3J1bGUsCisJCQkgICAgICBlY2JkYXRhLT5vcHQtPmZpbGUsIHNldCwgcmVzZXQsIHdzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfYWRkX2xpbmUoY29uc3QgY2hhciAqcmVzZXQsCisJCQkgIHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhLAorCQkJICBjb25zdCBjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWVtaXRfbGluZV9jaGVja2VkKHJlc2V0LCBlY2JkYXRhLCBsaW5lLCBsZW4sCisJCQkgIERJRkZfRklMRV9ORVcsIFdTRUhfTkVXLCAnKycpOworfQorCitzdGF0aWMgdm9pZCBlbWl0X2RlbF9saW5lKGNvbnN0IGNoYXIgKnJlc2V0LAorCQkJICBzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSwKKwkJCSAgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwllbWl0X2xpbmVfY2hlY2tlZChyZXNldCwgZWNiZGF0YSwgbGluZSwgbGVuLAorCQkJICBESUZGX0ZJTEVfT0xELCBXU0VIX09MRCwgJy0nKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9jb250ZXh0X2xpbmUoY29uc3QgY2hhciAqcmVzZXQsCisJCQkgICAgICBzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiZGF0YSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJZW1pdF9saW5lX2NoZWNrZWQocmVzZXQsIGVjYmRhdGEsIGxpbmUsIGxlbiwKKwkJCSAgRElGRl9DT05URVhULCBXU0VIX0NPTlRFWFQsICcgJyk7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfaHVua19oZWFkZXIoc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEsCisJCQkgICAgIGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJY29uc3QgY2hhciAqY29udGV4dCA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfQ09OVEVYVCk7CisJY29uc3QgY2hhciAqZnJhZyA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfRlJBR0lORk8pOworCWNvbnN0IGNoYXIgKmZ1bmMgPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX0ZVTkNJTkZPKTsKKwljb25zdCBjaGFyICpyZXNldCA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfUkVTRVQpOworCXN0YXRpYyBjb25zdCBjaGFyIGF0YXRbMl0gPSB7ICdAJywgJ0AnIH07CisJY29uc3QgY2hhciAqY3AsICplcDsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCWludCBvcmdfbGVuID0gbGVuOworCWludCBpID0gMTsKKworCS8qCisJICogQXMgYSBodW5rIGhlYWRlciBtdXN0IGJlZ2luIHdpdGggIkBAIC08b2xkPiwgKzxuZXc+IEBAIiwKKwkgKiBpdCBhbHdheXMgaXMgYXQgbGVhc3QgMTAgYnl0ZXMgbG9uZy4KKwkgKi8KKwlpZiAobGVuIDwgMTAgfHwKKwkgICAgbWVtY21wKGxpbmUsIGF0YXQsIDIpIHx8CisJICAgICEoZXAgPSBtZW1tZW0obGluZSArIDIsIGxlbiAtIDIsIGF0YXQsIDIpKSkgeworCQllbWl0X2xpbmUoZWNiZGF0YS0+b3B0LCBjb250ZXh0LCByZXNldCwgbGluZSwgbGVuKTsKKwkJcmV0dXJuOworCX0KKwllcCArPSAyOyAvKiBza2lwIG92ZXIgQEAgKi8KKworCS8qIFRoZSBodW5rIGhlYWRlciBpbiBmcmFnaW5mbyBjb2xvciAqLworCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgZnJhZyk7CisJc3RyYnVmX2FkZCgmbXNnYnVmLCBsaW5lLCBlcCAtIGxpbmUpOworCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgcmVzZXQpOworCisJLyoKKwkgKiB0cmFpbGluZyAiXHJcbiIKKwkgKi8KKwlmb3IgKCA7IGkgPCAzOyBpKyspCisJCWlmIChsaW5lW2xlbiAtIGldID09ICdccicgfHwgbGluZVtsZW4gLSBpXSA9PSAnXG4nKQorCQkJbGVuLS07CisKKwkvKiBibGFuayBiZWZvcmUgdGhlIGZ1bmMgaGVhZGVyICovCisJZm9yIChjcCA9IGVwOyBlcCAtIGxpbmUgPCBsZW47IGVwKyspCisJCWlmICgqZXAgIT0gJyAnICYmICplcCAhPSAnXHQnKQorCQkJYnJlYWs7CisJaWYgKGVwICE9IGNwKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgY29udGV4dCk7CisJCXN0cmJ1Zl9hZGQoJm1zZ2J1ZiwgY3AsIGVwIC0gY3ApOworCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIHJlc2V0KTsKKwl9CisKKwlpZiAoZXAgPCBsaW5lICsgbGVuKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgZnVuYyk7CisJCXN0cmJ1Zl9hZGQoJm1zZ2J1ZiwgZXAsIGxpbmUgKyBsZW4gLSBlcCk7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgcmVzZXQpOworCX0KKworCXN0cmJ1Zl9hZGQoJm1zZ2J1ZiwgbGluZSArIGxlbiwgb3JnX2xlbiAtIGxlbik7CisJZW1pdF9saW5lKGVjYmRhdGEtPm9wdCwgIiIsICIiLCBtc2didWYuYnVmLCBtc2didWYubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCBkaWZmX3RlbXBmaWxlICpjbGFpbV9kaWZmX3RlbXBmaWxlKHZvaWQpIHsKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaWZmX3RlbXApOyBpKyspCisJCWlmICghZGlmZl90ZW1wW2ldLm5hbWUpCisJCQlyZXR1cm4gZGlmZl90ZW1wICsgaTsKKwlkaWUoIkJVRzogZGlmZiBpcyBmYWlsaW5nIHRvIGNsZWFuIHVwIGl0cyB0ZW1wZmlsZXMiKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3RlbXBmaWxlKHZvaWQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGlmZl90ZW1wKTsgaSsrKSB7CisJCWlmIChpc190ZW1wZmlsZV9hY3RpdmUoJmRpZmZfdGVtcFtpXS50ZW1wZmlsZSkpCisJCQlkZWxldGVfdGVtcGZpbGUoJmRpZmZfdGVtcFtpXS50ZW1wZmlsZSk7CisJCWRpZmZfdGVtcFtpXS5uYW1lID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xpbmVfY291bnQoRklMRSAqZmlsZSwgaW50IGNvdW50KQoreworCXN3aXRjaCAoY291bnQpIHsKKwljYXNlIDA6CisJCWZwcmludGYoZmlsZSwgIjAsMCIpOworCQlicmVhazsKKwljYXNlIDE6CisJCWZwcmludGYoZmlsZSwgIjEiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZnByaW50ZihmaWxlLCAiMSwlZCIsIGNvdW50KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBlbWl0X3Jld3JpdGVfbGluZXMoc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYiwKKwkJCSAgICAgICBpbnQgcHJlZml4LCBjb25zdCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwljb25zdCBjaGFyICplbmRwID0gTlVMTDsKKwlzdGF0aWMgY29uc3QgY2hhciAqbm5lb2YgPSAiIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiI7CisJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcihlY2ItPmNvbG9yX2RpZmYsIERJRkZfUkVTRVQpOworCisJd2hpbGUgKDAgPCBzaXplKSB7CisJCWludCBsZW47CisKKwkJZW5kcCA9IG1lbWNocihkYXRhLCAnXG4nLCBzaXplKTsKKwkJbGVuID0gZW5kcCA/IChlbmRwIC0gZGF0YSArIDEpIDogc2l6ZTsKKwkJaWYgKHByZWZpeCAhPSAnKycpIHsKKwkJCWVjYi0+bG5vX2luX3ByZWltYWdlKys7CisJCQllbWl0X2RlbF9saW5lKHJlc2V0LCBlY2IsIGRhdGEsIGxlbik7CisJCX0gZWxzZSB7CisJCQllY2ItPmxub19pbl9wb3N0aW1hZ2UrKzsKKwkJCWVtaXRfYWRkX2xpbmUocmVzZXQsIGVjYiwgZGF0YSwgbGVuKTsKKwkJfQorCQlzaXplIC09IGxlbjsKKwkJZGF0YSArPSBsZW47CisJfQorCWlmICghZW5kcCkgeworCQljb25zdCBjaGFyICpjb250ZXh0ID0gZGlmZl9nZXRfY29sb3IoZWNiLT5jb2xvcl9kaWZmLAorCQkJCQkJICAgICBESUZGX0NPTlRFWFQpOworCQlwdXRjKCdcbicsIGVjYi0+b3B0LT5maWxlKTsKKwkJZW1pdF9saW5lXzAoZWNiLT5vcHQsIGNvbnRleHQsIHJlc2V0LCAnXFwnLAorCQkJICAgIG5uZW9mLCBzdHJsZW4obm5lb2YpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfcmV3cml0ZV9kaWZmKGNvbnN0IGNoYXIgKm5hbWVfYSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWVfYiwKKwkJCSAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvLAorCQkJICAgICAgc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdGV4dGNvbnZfb25lLAorCQkJICAgICAgc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdGV4dGNvbnZfdHdvLAorCQkJICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqbykKK3sKKwlpbnQgbGNfYSwgbGNfYjsKKwljb25zdCBjaGFyICpuYW1lX2FfdGFiLCAqbmFtZV9iX3RhYjsKKwljb25zdCBjaGFyICptZXRhaW5mbyA9IGRpZmZfZ2V0X2NvbG9yKG8tPnVzZV9jb2xvciwgRElGRl9NRVRBSU5GTyk7CisJY29uc3QgY2hhciAqZnJhZ2luZm8gPSBkaWZmX2dldF9jb2xvcihvLT51c2VfY29sb3IsIERJRkZfRlJBR0lORk8pOworCWNvbnN0IGNoYXIgKnJlc2V0ID0gZGlmZl9nZXRfY29sb3Ioby0+dXNlX2NvbG9yLCBESUZGX1JFU0VUKTsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBhX25hbWUgPSBTVFJCVUZfSU5JVCwgYl9uYW1lID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqYV9wcmVmaXgsICpiX3ByZWZpeDsKKwljaGFyICpkYXRhX29uZSwgKmRhdGFfdHdvOworCXNpemVfdCBzaXplX29uZSwgc2l6ZV90d287CisJc3RydWN0IGVtaXRfY2FsbGJhY2sgZWNiZGF0YTsKKwljb25zdCBjaGFyICpsaW5lX3ByZWZpeCA9IGRpZmZfbGluZV9wcmVmaXgobyk7CisKKwlpZiAoZGlmZl9tbmVtb25pY19wcmVmaXggJiYgRElGRl9PUFRfVFNUKG8sIFJFVkVSU0VfRElGRikpIHsKKwkJYV9wcmVmaXggPSBvLT5iX3ByZWZpeDsKKwkJYl9wcmVmaXggPSBvLT5hX3ByZWZpeDsKKwl9IGVsc2UgeworCQlhX3ByZWZpeCA9IG8tPmFfcHJlZml4OworCQliX3ByZWZpeCA9IG8tPmJfcHJlZml4OworCX0KKworCW5hbWVfYSArPSAoKm5hbWVfYSA9PSAnLycpOworCW5hbWVfYiArPSAoKm5hbWVfYiA9PSAnLycpOworCW5hbWVfYV90YWIgPSBzdHJjaHIobmFtZV9hLCAnICcpID8gIlx0IiA6ICIiOworCW5hbWVfYl90YWIgPSBzdHJjaHIobmFtZV9iLCAnICcpID8gIlx0IiA6ICIiOworCisJc3RyYnVmX3Jlc2V0KCZhX25hbWUpOworCXN0cmJ1Zl9yZXNldCgmYl9uYW1lKTsKKwlxdW90ZV90d29fY19zdHlsZSgmYV9uYW1lLCBhX3ByZWZpeCwgbmFtZV9hLCAwKTsKKwlxdW90ZV90d29fY19zdHlsZSgmYl9uYW1lLCBiX3ByZWZpeCwgbmFtZV9iLCAwKTsKKworCXNpemVfb25lID0gZmlsbF90ZXh0Y29udih0ZXh0Y29udl9vbmUsIG9uZSwgJmRhdGFfb25lKTsKKwlzaXplX3R3byA9IGZpbGxfdGV4dGNvbnYodGV4dGNvbnZfdHdvLCB0d28sICZkYXRhX3R3byk7CisKKwltZW1zZXQoJmVjYmRhdGEsIDAsIHNpemVvZihlY2JkYXRhKSk7CisJZWNiZGF0YS5jb2xvcl9kaWZmID0gd2FudF9jb2xvcihvLT51c2VfY29sb3IpOworCWVjYmRhdGEuZm91bmRfY2hhbmdlc3AgPSAmby0+Zm91bmRfY2hhbmdlczsKKwllY2JkYXRhLndzX3J1bGUgPSB3aGl0ZXNwYWNlX3J1bGUobmFtZV9iKTsKKwllY2JkYXRhLm9wdCA9IG87CisJaWYgKGVjYmRhdGEud3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPRikgeworCQltbWZpbGVfdCBtZjEsIG1mMjsKKwkJbWYxLnB0ciA9IChjaGFyICopZGF0YV9vbmU7CisJCW1mMi5wdHIgPSAoY2hhciAqKWRhdGFfdHdvOworCQltZjEuc2l6ZSA9IHNpemVfb25lOworCQltZjIuc2l6ZSA9IHNpemVfdHdvOworCQljaGVja19ibGFua19hdF9lb2YoJm1mMSwgJm1mMiwgJmVjYmRhdGEpOworCX0KKwllY2JkYXRhLmxub19pbl9wcmVpbWFnZSA9IDE7CisJZWNiZGF0YS5sbm9faW5fcG9zdGltYWdlID0gMTsKKworCWxjX2EgPSBjb3VudF9saW5lcyhkYXRhX29uZSwgc2l6ZV9vbmUpOworCWxjX2IgPSBjb3VudF9saW5lcyhkYXRhX3R3bywgc2l6ZV90d28pOworCWZwcmludGYoby0+ZmlsZSwKKwkJIiVzJXMtLS0gJXMlcyVzXG4lcyVzKysrICVzJXMlc1xuJXMlc0BAIC0iLAorCQlsaW5lX3ByZWZpeCwgbWV0YWluZm8sIGFfbmFtZS5idWYsIG5hbWVfYV90YWIsIHJlc2V0LAorCQlsaW5lX3ByZWZpeCwgbWV0YWluZm8sIGJfbmFtZS5idWYsIG5hbWVfYl90YWIsIHJlc2V0LAorCQlsaW5lX3ByZWZpeCwgZnJhZ2luZm8pOworCWlmICghby0+aXJyZXZlcnNpYmxlX2RlbGV0ZSkKKwkJcHJpbnRfbGluZV9jb3VudChvLT5maWxlLCBsY19hKTsKKwllbHNlCisJCWZwcmludGYoby0+ZmlsZSwgIj8sPyIpOworCWZwcmludGYoby0+ZmlsZSwgIiArIik7CisJcHJpbnRfbGluZV9jb3VudChvLT5maWxlLCBsY19iKTsKKwlmcHJpbnRmKG8tPmZpbGUsICIgQEAlc1xuIiwgcmVzZXQpOworCWlmIChsY19hICYmICFvLT5pcnJldmVyc2libGVfZGVsZXRlKQorCQllbWl0X3Jld3JpdGVfbGluZXMoJmVjYmRhdGEsICctJywgZGF0YV9vbmUsIHNpemVfb25lKTsKKwlpZiAobGNfYikKKwkJZW1pdF9yZXdyaXRlX2xpbmVzKCZlY2JkYXRhLCAnKycsIGRhdGFfdHdvLCBzaXplX3R3byk7CisJaWYgKHRleHRjb252X29uZSkKKwkJZnJlZSgoY2hhciAqKWRhdGFfb25lKTsKKwlpZiAodGV4dGNvbnZfdHdvKQorCQlmcmVlKChjaGFyICopZGF0YV90d28pOworfQorCitzdHJ1Y3QgZGlmZl93b3Jkc19idWZmZXIgeworCW1tZmlsZV90IHRleHQ7CisJbG9uZyBhbGxvYzsKKwlzdHJ1Y3QgZGlmZl93b3Jkc19vcmlnIHsKKwkJY29uc3QgY2hhciAqYmVnaW4sICplbmQ7CisJfSAqb3JpZzsKKwlpbnQgb3JpZ19uciwgb3JpZ19hbGxvYzsKK307CisKK3N0YXRpYyB2b2lkIGRpZmZfd29yZHNfYXBwZW5kKGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQlzdHJ1Y3QgZGlmZl93b3Jkc19idWZmZXIgKmJ1ZmZlcikKK3sKKwlBTExPQ19HUk9XKGJ1ZmZlci0+dGV4dC5wdHIsIGJ1ZmZlci0+dGV4dC5zaXplICsgbGVuLCBidWZmZXItPmFsbG9jKTsKKwlsaW5lKys7CisJbGVuLS07CisJbWVtY3B5KGJ1ZmZlci0+dGV4dC5wdHIgKyBidWZmZXItPnRleHQuc2l6ZSwgbGluZSwgbGVuKTsKKwlidWZmZXItPnRleHQuc2l6ZSArPSBsZW47CisJYnVmZmVyLT50ZXh0LnB0cltidWZmZXItPnRleHQuc2l6ZV0gPSAnXDAnOworfQorCitzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZV9lbGVtIHsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJY29uc3QgY2hhciAqc3VmZml4OworCWNvbnN0IGNoYXIgKmNvbG9yOyAvKiBOVUxMOyBmaWxsZWQgaW4gYnkgdGhlIHNldHVwIGNvZGUgaWYKKwkJCSAgICAqIGNvbG9yIGlzIGVuYWJsZWQgKi8KK307CisKK3N0cnVjdCBkaWZmX3dvcmRzX3N0eWxlIHsKKwllbnVtIGRpZmZfd29yZHNfdHlwZSB0eXBlOworCXN0cnVjdCBkaWZmX3dvcmRzX3N0eWxlX2VsZW0gbmV3LCBvbGQsIGN0eDsKKwljb25zdCBjaGFyICpuZXdsaW5lOworfTsKKworc3RhdGljIHN0cnVjdCBkaWZmX3dvcmRzX3N0eWxlIGRpZmZfd29yZHNfc3R5bGVzW10gPSB7CisJeyBESUZGX1dPUkRTX1BPUkNFTEFJTiwgeyIrIiwgIlxuIn0sIHsiLSIsICJcbiJ9LCB7IiAiLCAiXG4ifSwgIn5cbiIgfSwKKwl7IERJRkZfV09SRFNfUExBSU4sIHsieysiLCAiK30ifSwgeyJbLSIsICItXSJ9LCB7IiIsICIifSwgIlxuIiB9LAorCXsgRElGRl9XT1JEU19DT0xPUiwgeyIiLCAiIn0sIHsiIiwgIiJ9LCB7IiIsICIifSwgIlxuIiB9Cit9OworCitzdHJ1Y3QgZGlmZl93b3Jkc19kYXRhIHsKKwlzdHJ1Y3QgZGlmZl93b3Jkc19idWZmZXIgbWludXMsIHBsdXM7CisJY29uc3QgY2hhciAqY3VycmVudF9wbHVzOworCWludCBsYXN0X21pbnVzOworCXN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdDsKKwlyZWdleF90ICp3b3JkX3JlZ2V4OworCWVudW0gZGlmZl93b3Jkc190eXBlIHR5cGU7CisJc3RydWN0IGRpZmZfd29yZHNfc3R5bGUgKnN0eWxlOworfTsKKworc3RhdGljIGludCBmbl9vdXRfZGlmZl93b3Jkc193cml0ZV9oZWxwZXIoRklMRSAqZnAsCisJCQkJCSAgc3RydWN0IGRpZmZfd29yZHNfc3R5bGVfZWxlbSAqc3RfZWwsCisJCQkJCSAgY29uc3QgY2hhciAqbmV3bGluZSwKKwkJCQkJICBzaXplX3QgY291bnQsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJICBjb25zdCBjaGFyICpsaW5lX3ByZWZpeCkKK3sKKwlpbnQgcHJpbnQgPSAwOworCisJd2hpbGUgKGNvdW50KSB7CisJCWNoYXIgKnAgPSBtZW1jaHIoYnVmLCAnXG4nLCBjb3VudCk7CisJCWlmIChwcmludCkKKwkJCWZwdXRzKGxpbmVfcHJlZml4LCBmcCk7CisJCWlmIChwICE9IGJ1ZikgeworCQkJaWYgKHN0X2VsLT5jb2xvciAmJiBmcHV0cyhzdF9lbC0+Y29sb3IsIGZwKSA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKGZwdXRzKHN0X2VsLT5wcmVmaXgsIGZwKSA8IDAgfHwKKwkJCSAgICBmd3JpdGUoYnVmLCBwID8gcCAtIGJ1ZiA6IGNvdW50LCAxLCBmcCkgIT0gMSB8fAorCQkJICAgIGZwdXRzKHN0X2VsLT5zdWZmaXgsIGZwKSA8IDApCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKHN0X2VsLT5jb2xvciAmJiAqc3RfZWwtPmNvbG9yCisJCQkgICAgJiYgZnB1dHMoR0lUX0NPTE9SX1JFU0VULCBmcCkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoIXApCisJCQlyZXR1cm4gMDsKKwkJaWYgKGZwdXRzKG5ld2xpbmUsIGZwKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWNvdW50IC09IHAgKyAxIC0gYnVmOworCQlidWYgPSBwICsgMTsKKwkJcHJpbnQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICctLWNvbG9yLXdvcmRzJyBhbGdvcml0aG0gY2FuIGJlIGRlc2NyaWJlZCBhczoKKyAqCisgKiAgIDEuIGNvbGxlY3QgYSB0aGUgbWludXMvcGx1cyBsaW5lcyBvZiBhIGRpZmYgaHVuaywgZGl2aWRlZCBpbnRvCisgKiAgICAgIG1pbnVzLWxpbmVzIGFuZCBwbHVzLWxpbmVzOworICoKKyAqICAgMi4gYnJlYWsgYm90aCBtaW51cy1saW5lcyBhbmQgcGx1cy1saW5lcyBpbnRvIHdvcmRzIGFuZAorICogICAgICBwbGFjZSB0aGVtIGludG8gdHdvIG1tZmlsZV90IHdpdGggb25lIHdvcmQgZm9yIGVhY2ggbGluZTsKKyAqCisgKiAgIDMuIHVzZSB4ZGlmZiB0byBydW4gZGlmZiBvbiB0aGUgdHdvIG1tZmlsZV90IHRvIGdldCB0aGUgd29yZHMgbGV2ZWwgZGlmZjsKKyAqCisgKiBBbmQgZm9yIHRoZSBjb21tb24gcGFydHMgb2YgdGhlIGJvdGggZmlsZSwgd2Ugb3V0cHV0IHRoZSBwbHVzIHNpZGUgdGV4dC4KKyAqIGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyBpcyB1c2VkIHRvIHRyYWNlIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBwbHVzIGZpbGUKKyAqIHdoaWNoIHByaW50ZWQuIGRpZmZfd29yZHMtPmxhc3RfbWludXMgaXMgdXNlZCB0byB0cmFjZSB0aGUgbGFzdCBtaW51cyB3b3JkCisgKiBwcmludGVkLgorICoKKyAqIEZvciAnLS1ncmFwaCcgdG8gd29yayB3aXRoICctLWNvbG9yLXdvcmRzJywgd2UgbmVlZCB0byBvdXRwdXQgdGhlIGdyYXBoIHByZWZpeAorICogb24gZWFjaCBsaW5lIG9mIGNvbG9yIHdvcmRzIG91dHB1dC4gR2VuZXJhbGx5LCB0aGVyZSBhcmUgdHdvIGNvbmRpdGlvbnMgb24KKyAqIHdoaWNoIHdlIHNob3VsZCBvdXRwdXQgdGhlIHByZWZpeC4KKyAqCisgKiAgIDEuIGRpZmZfd29yZHMtPmxhc3RfbWludXMgPT0gMCAmJgorICogICAgICBkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgPT0gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cgorICoKKyAqICAgICAgdGhhdCBpczogdGhlIHBsdXMgdGV4dCBtdXN0IHN0YXJ0IGFzIGEgbmV3IGxpbmUsIGFuZCBpZiB0aGVyZSBpcyBubyBtaW51cworICogICAgICB3b3JkIHByaW50ZWQsIGEgZ3JhcGggcHJlZml4IG11c3QgYmUgcHJpbnRlZC4KKyAqCisgKiAgIDIuIGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyA+IGRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIgJiYKKyAqICAgICAgKihkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgLSAxKSA9PSAnXG4nCisgKgorICogICAgICB0aGF0IGlzOiBhIGdyYXBoIHByZWZpeCBtdXN0IGJlIHByaW50ZWQgZm9sbG93aW5nIGEgJ1xuJworICovCitzdGF0aWMgaW50IGNvbG9yX3dvcmRzX291dHB1dF9ncmFwaF9wcmVmaXgoc3RydWN0IGRpZmZfd29yZHNfZGF0YSAqZGlmZl93b3JkcykKK3sKKwlpZiAoKGRpZmZfd29yZHMtPmxhc3RfbWludXMgPT0gMCAmJgorCQlkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgPT0gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cikgfHwKKwkJKGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cyA+IGRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIgJiYKKwkJKihkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgLSAxKSA9PSAnXG4nKSkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZuX291dF9kaWZmX3dvcmRzX2F1eCh2b2lkICpwcml2LCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3QgZGlmZl93b3Jkc19kYXRhICpkaWZmX3dvcmRzID0gcHJpdjsKKwlzdHJ1Y3QgZGlmZl93b3Jkc19zdHlsZSAqc3R5bGUgPSBkaWZmX3dvcmRzLT5zdHlsZTsKKwlpbnQgbWludXNfZmlyc3QsIG1pbnVzX2xlbiwgcGx1c19maXJzdCwgcGx1c19sZW47CisJY29uc3QgY2hhciAqbWludXNfYmVnaW4sICptaW51c19lbmQsICpwbHVzX2JlZ2luLCAqcGx1c19lbmQ7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gZGlmZl93b3Jkcy0+b3B0OworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4OworCisJaWYgKGxpbmVbMF0gIT0gJ0AnIHx8IHBhcnNlX2h1bmtfaGVhZGVyKGxpbmUsIGxlbiwKKwkJCSZtaW51c19maXJzdCwgJm1pbnVzX2xlbiwgJnBsdXNfZmlyc3QsICZwbHVzX2xlbikpCisJCXJldHVybjsKKworCWFzc2VydChvcHQpOworCWxpbmVfcHJlZml4ID0gZGlmZl9saW5lX3ByZWZpeChvcHQpOworCisJLyogUE9TSVggcmVxdWlyZXMgdGhhdCBmaXJzdCBiZSBkZWNyZW1lbnRlZCBieSBvbmUgaWYgbGVuID09IDAuLi4gKi8KKwlpZiAobWludXNfbGVuKSB7CisJCW1pbnVzX2JlZ2luID0gZGlmZl93b3Jkcy0+bWludXMub3JpZ1ttaW51c19maXJzdF0uYmVnaW47CisJCW1pbnVzX2VuZCA9CisJCQlkaWZmX3dvcmRzLT5taW51cy5vcmlnW21pbnVzX2ZpcnN0ICsgbWludXNfbGVuIC0gMV0uZW5kOworCX0gZWxzZQorCQltaW51c19iZWdpbiA9IG1pbnVzX2VuZCA9CisJCQlkaWZmX3dvcmRzLT5taW51cy5vcmlnW21pbnVzX2ZpcnN0XS5lbmQ7CisKKwlpZiAocGx1c19sZW4pIHsKKwkJcGx1c19iZWdpbiA9IGRpZmZfd29yZHMtPnBsdXMub3JpZ1twbHVzX2ZpcnN0XS5iZWdpbjsKKwkJcGx1c19lbmQgPSBkaWZmX3dvcmRzLT5wbHVzLm9yaWdbcGx1c19maXJzdCArIHBsdXNfbGVuIC0gMV0uZW5kOworCX0gZWxzZQorCQlwbHVzX2JlZ2luID0gcGx1c19lbmQgPSBkaWZmX3dvcmRzLT5wbHVzLm9yaWdbcGx1c19maXJzdF0uZW5kOworCisJaWYgKGNvbG9yX3dvcmRzX291dHB1dF9ncmFwaF9wcmVmaXgoZGlmZl93b3JkcykpIHsKKwkJZnB1dHMobGluZV9wcmVmaXgsIGRpZmZfd29yZHMtPm9wdC0+ZmlsZSk7CisJfQorCWlmIChkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMgIT0gcGx1c19iZWdpbikgeworCQlmbl9vdXRfZGlmZl93b3Jkc193cml0ZV9oZWxwZXIoZGlmZl93b3Jkcy0+b3B0LT5maWxlLAorCQkJCSZzdHlsZS0+Y3R4LCBzdHlsZS0+bmV3bGluZSwKKwkJCQlwbHVzX2JlZ2luIC0gZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzLAorCQkJCWRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cywgbGluZV9wcmVmaXgpOworCQlpZiAoKihwbHVzX2JlZ2luIC0gMSkgPT0gJ1xuJykKKwkJCWZwdXRzKGxpbmVfcHJlZml4LCBkaWZmX3dvcmRzLT5vcHQtPmZpbGUpOworCX0KKwlpZiAobWludXNfYmVnaW4gIT0gbWludXNfZW5kKSB7CisJCWZuX291dF9kaWZmX3dvcmRzX3dyaXRlX2hlbHBlcihkaWZmX3dvcmRzLT5vcHQtPmZpbGUsCisJCQkJJnN0eWxlLT5vbGQsIHN0eWxlLT5uZXdsaW5lLAorCQkJCW1pbnVzX2VuZCAtIG1pbnVzX2JlZ2luLCBtaW51c19iZWdpbiwKKwkJCQlsaW5lX3ByZWZpeCk7CisJfQorCWlmIChwbHVzX2JlZ2luICE9IHBsdXNfZW5kKSB7CisJCWZuX291dF9kaWZmX3dvcmRzX3dyaXRlX2hlbHBlcihkaWZmX3dvcmRzLT5vcHQtPmZpbGUsCisJCQkJJnN0eWxlLT5uZXcsIHN0eWxlLT5uZXdsaW5lLAorCQkJCXBsdXNfZW5kIC0gcGx1c19iZWdpbiwgcGx1c19iZWdpbiwKKwkJCQlsaW5lX3ByZWZpeCk7CisJfQorCisJZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzID0gcGx1c19lbmQ7CisJZGlmZl93b3Jkcy0+bGFzdF9taW51cyA9IG1pbnVzX2ZpcnN0OworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHN0YXJ0cyBsb29raW5nIGF0ICpiZWdpbiwgYW5kIHJldHVybnMgMCBpZmYgYSB3b3JkIHdhcyBmb3VuZC4gKi8KK3N0YXRpYyBpbnQgZmluZF93b3JkX2JvdW5kYXJpZXMobW1maWxlX3QgKmJ1ZmZlciwgcmVnZXhfdCAqd29yZF9yZWdleCwKKwkJaW50ICpiZWdpbiwgaW50ICplbmQpCit7CisJaWYgKHdvcmRfcmVnZXggJiYgKmJlZ2luIDwgYnVmZmVyLT5zaXplKSB7CisJCXJlZ21hdGNoX3QgbWF0Y2hbMV07CisJCWlmICghcmVnZXhlYyh3b3JkX3JlZ2V4LCBidWZmZXItPnB0ciArICpiZWdpbiwgMSwgbWF0Y2gsIDApKSB7CisJCQljaGFyICpwID0gbWVtY2hyKGJ1ZmZlci0+cHRyICsgKmJlZ2luICsgbWF0Y2hbMF0ucm1fc28sCisJCQkJCSdcbicsIG1hdGNoWzBdLnJtX2VvIC0gbWF0Y2hbMF0ucm1fc28pOworCQkJKmVuZCA9IHAgPyBwIC0gYnVmZmVyLT5wdHIgOiBtYXRjaFswXS5ybV9lbyArICpiZWdpbjsKKwkJCSpiZWdpbiArPSBtYXRjaFswXS5ybV9zbzsKKwkJCXJldHVybiAqYmVnaW4gPj0gKmVuZDsKKwkJfQorCQlyZXR1cm4gLTE7CisJfQorCisJLyogZmluZCB0aGUgbmV4dCB3b3JkICovCisJd2hpbGUgKCpiZWdpbiA8IGJ1ZmZlci0+c2l6ZSAmJiBpc3NwYWNlKGJ1ZmZlci0+cHRyWypiZWdpbl0pKQorCQkoKmJlZ2luKSsrOworCWlmICgqYmVnaW4gPj0gYnVmZmVyLT5zaXplKQorCQlyZXR1cm4gLTE7CisKKwkvKiBmaW5kIHRoZSBlbmQgb2YgdGhlIHdvcmQgKi8KKwkqZW5kID0gKmJlZ2luICsgMTsKKwl3aGlsZSAoKmVuZCA8IGJ1ZmZlci0+c2l6ZSAmJiAhaXNzcGFjZShidWZmZXItPnB0clsqZW5kXSkpCisJCSgqZW5kKSsrOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHNwbGl0cyB0aGUgd29yZHMgaW4gYnVmZmVyLT50ZXh0LCBzdG9yZXMgdGhlIGxpc3Qgd2l0aAorICogbmV3bGluZSBzZXBhcmF0b3IgaW50byBvdXQsIGFuZCBzYXZlcyB0aGUgb2Zmc2V0cyBvZiB0aGUgb3JpZ2luYWwgd29yZHMKKyAqIGluIGJ1ZmZlci0+b3JpZy4KKyAqLworc3RhdGljIHZvaWQgZGlmZl93b3Jkc19maWxsKHN0cnVjdCBkaWZmX3dvcmRzX2J1ZmZlciAqYnVmZmVyLCBtbWZpbGVfdCAqb3V0LAorCQlyZWdleF90ICp3b3JkX3JlZ2V4KQoreworCWludCBpLCBqOworCWxvbmcgYWxsb2MgPSAwOworCisJb3V0LT5zaXplID0gMDsKKwlvdXQtPnB0ciA9IE5VTEw7CisKKwkvKiBmYWtlIGFuIGVtcHR5ICIwdGgiIHdvcmQgKi8KKwlBTExPQ19HUk9XKGJ1ZmZlci0+b3JpZywgMSwgYnVmZmVyLT5vcmlnX2FsbG9jKTsKKwlidWZmZXItPm9yaWdbMF0uYmVnaW4gPSBidWZmZXItPm9yaWdbMF0uZW5kID0gYnVmZmVyLT50ZXh0LnB0cjsKKwlidWZmZXItPm9yaWdfbnIgPSAxOworCisJZm9yIChpID0gMDsgaSA8IGJ1ZmZlci0+dGV4dC5zaXplOyBpKyspIHsKKwkJaWYgKGZpbmRfd29yZF9ib3VuZGFyaWVzKCZidWZmZXItPnRleHQsIHdvcmRfcmVnZXgsICZpLCAmaikpCisJCQlyZXR1cm47CisKKwkJLyogc3RvcmUgb3JpZ2luYWwgYm91bmRhcmllcyAqLworCQlBTExPQ19HUk9XKGJ1ZmZlci0+b3JpZywgYnVmZmVyLT5vcmlnX25yICsgMSwKKwkJCQlidWZmZXItPm9yaWdfYWxsb2MpOworCQlidWZmZXItPm9yaWdbYnVmZmVyLT5vcmlnX25yXS5iZWdpbiA9IGJ1ZmZlci0+dGV4dC5wdHIgKyBpOworCQlidWZmZXItPm9yaWdbYnVmZmVyLT5vcmlnX25yXS5lbmQgPSBidWZmZXItPnRleHQucHRyICsgajsKKwkJYnVmZmVyLT5vcmlnX25yKys7CisKKwkJLyogc3RvcmUgb25lIHdvcmQgKi8KKwkJQUxMT0NfR1JPVyhvdXQtPnB0ciwgb3V0LT5zaXplICsgaiAtIGkgKyAxLCBhbGxvYyk7CisJCW1lbWNweShvdXQtPnB0ciArIG91dC0+c2l6ZSwgYnVmZmVyLT50ZXh0LnB0ciArIGksIGogLSBpKTsKKwkJb3V0LT5wdHJbb3V0LT5zaXplICsgaiAtIGldID0gJ1xuJzsKKwkJb3V0LT5zaXplICs9IGogLSBpICsgMTsKKworCQlpID0gaiAtIDE7CisJfQorfQorCisvKiB0aGlzIGV4ZWN1dGVzIHRoZSB3b3JkIGRpZmYgb24gdGhlIGFjY3VtdWxhdGVkIGJ1ZmZlcnMgKi8KK3N0YXRpYyB2b2lkIGRpZmZfd29yZHNfc2hvdyhzdHJ1Y3QgZGlmZl93b3Jkc19kYXRhICpkaWZmX3dvcmRzKQoreworCXhwcGFyYW1fdCB4cHA7CisJeGRlbWl0Y29uZl90IHhlY2ZnOworCW1tZmlsZV90IG1pbnVzLCBwbHVzOworCXN0cnVjdCBkaWZmX3dvcmRzX3N0eWxlICpzdHlsZSA9IGRpZmZfd29yZHMtPnN0eWxlOworCisJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0ID0gZGlmZl93b3Jkcy0+b3B0OworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4OworCisJYXNzZXJ0KG9wdCk7CisJbGluZV9wcmVmaXggPSBkaWZmX2xpbmVfcHJlZml4KG9wdCk7CisKKwkvKiBzcGVjaWFsIGNhc2U6IG9ubHkgcmVtb3ZhbCAqLworCWlmICghZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnNpemUpIHsKKwkJZnB1dHMobGluZV9wcmVmaXgsIGRpZmZfd29yZHMtPm9wdC0+ZmlsZSk7CisJCWZuX291dF9kaWZmX3dvcmRzX3dyaXRlX2hlbHBlcihkaWZmX3dvcmRzLT5vcHQtPmZpbGUsCisJCQkmc3R5bGUtPm9sZCwgc3R5bGUtPm5ld2xpbmUsCisJCQlkaWZmX3dvcmRzLT5taW51cy50ZXh0LnNpemUsCisJCQlkaWZmX3dvcmRzLT5taW51cy50ZXh0LnB0ciwgbGluZV9wcmVmaXgpOworCQlkaWZmX3dvcmRzLT5taW51cy50ZXh0LnNpemUgPSAwOworCQlyZXR1cm47CisJfQorCisJZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzID0gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnB0cjsKKwlkaWZmX3dvcmRzLT5sYXN0X21pbnVzID0gMDsKKworCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJZGlmZl93b3Jkc19maWxsKCZkaWZmX3dvcmRzLT5taW51cywgJm1pbnVzLCBkaWZmX3dvcmRzLT53b3JkX3JlZ2V4KTsKKwlkaWZmX3dvcmRzX2ZpbGwoJmRpZmZfd29yZHMtPnBsdXMsICZwbHVzLCBkaWZmX3dvcmRzLT53b3JkX3JlZ2V4KTsKKwl4cHAuZmxhZ3MgPSAwOworCS8qIGFzIG9ubHkgdGhlIGh1bmsgaGVhZGVyIHdpbGwgYmUgcGFyc2VkLCB3ZSBuZWVkIGEgMC1jb250ZXh0ICovCisJeGVjZmcuY3R4bGVuID0gMDsKKwlpZiAoeGRpX2RpZmZfb3V0ZigmbWludXMsICZwbHVzLCBmbl9vdXRfZGlmZl93b3Jkc19hdXgsIGRpZmZfd29yZHMsCisJCQkgICZ4cHAsICZ4ZWNmZykpCisJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIHdvcmQgZGlmZiIpOworCWZyZWUobWludXMucHRyKTsKKwlmcmVlKHBsdXMucHRyKTsKKwlpZiAoZGlmZl93b3Jkcy0+Y3VycmVudF9wbHVzICE9IGRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIgKworCQkJZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnNpemUpIHsKKwkJaWYgKGNvbG9yX3dvcmRzX291dHB1dF9ncmFwaF9wcmVmaXgoZGlmZl93b3JkcykpCisJCQlmcHV0cyhsaW5lX3ByZWZpeCwgZGlmZl93b3Jkcy0+b3B0LT5maWxlKTsKKwkJZm5fb3V0X2RpZmZfd29yZHNfd3JpdGVfaGVscGVyKGRpZmZfd29yZHMtPm9wdC0+ZmlsZSwKKwkJCSZzdHlsZS0+Y3R4LCBzdHlsZS0+bmV3bGluZSwKKwkJCWRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIgKyBkaWZmX3dvcmRzLT5wbHVzLnRleHQuc2l6ZQorCQkJLSBkaWZmX3dvcmRzLT5jdXJyZW50X3BsdXMsIGRpZmZfd29yZHMtPmN1cnJlbnRfcGx1cywKKwkJCWxpbmVfcHJlZml4KTsKKwl9CisJZGlmZl93b3Jkcy0+bWludXMudGV4dC5zaXplID0gZGlmZl93b3Jkcy0+cGx1cy50ZXh0LnNpemUgPSAwOworfQorCisvKiBJbiAiY29sb3Itd29yZHMiIG1vZGUsIHNob3cgd29yZC1kaWZmIG9mIHdvcmRzIGFjY3VtdWxhdGVkIGluIHRoZSBidWZmZXIgKi8KK3N0YXRpYyB2b2lkIGRpZmZfd29yZHNfZmx1c2goc3RydWN0IGVtaXRfY2FsbGJhY2sgKmVjYmRhdGEpCit7CisJaWYgKGVjYmRhdGEtPmRpZmZfd29yZHMtPm1pbnVzLnRleHQuc2l6ZSB8fAorCSAgICBlY2JkYXRhLT5kaWZmX3dvcmRzLT5wbHVzLnRleHQuc2l6ZSkKKwkJZGlmZl93b3Jkc19zaG93KGVjYmRhdGEtPmRpZmZfd29yZHMpOworfQorCitzdGF0aWMgdm9pZCBkaWZmX2ZpbGVzcGVjX2xvYWRfZHJpdmVyKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJLyogVXNlIGFscmVhZHktbG9hZGVkIGRyaXZlciAqLworCWlmIChvbmUtPmRyaXZlcikKKwkJcmV0dXJuOworCisJaWYgKFNfSVNSRUcob25lLT5tb2RlKSkKKwkJb25lLT5kcml2ZXIgPSB1c2VyZGlmZl9maW5kX2J5X3BhdGgob25lLT5wYXRoKTsKKworCS8qIEZhbGxiYWNrIHRvIGRlZmF1bHQgc2V0dGluZ3MgKi8KKwlpZiAoIW9uZS0+ZHJpdmVyKQorCQlvbmUtPmRyaXZlciA9IHVzZXJkaWZmX2ZpbmRfYnlfbmFtZSgiZGVmYXVsdCIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqdXNlcmRpZmZfd29yZF9yZWdleChzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWRpZmZfZmlsZXNwZWNfbG9hZF9kcml2ZXIob25lKTsKKwlyZXR1cm4gb25lLT5kcml2ZXItPndvcmRfcmVnZXg7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfZGlmZl93b3Jkc19kYXRhKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhLAorCQkJCSBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcmlnX29wdHMsCisJCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28pCit7CisJaW50IGk7CisJc3RydWN0IGRpZmZfb3B0aW9ucyAqbyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaWZmX29wdGlvbnMpKTsKKwltZW1jcHkobywgb3JpZ19vcHRzLCBzaXplb2Yoc3RydWN0IGRpZmZfb3B0aW9ucykpOworCisJZWNiZGF0YS0+ZGlmZl93b3JkcyA9CisJCXhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBkaWZmX3dvcmRzX2RhdGEpKTsKKwllY2JkYXRhLT5kaWZmX3dvcmRzLT50eXBlID0gby0+d29yZF9kaWZmOworCWVjYmRhdGEtPmRpZmZfd29yZHMtPm9wdCA9IG87CisJaWYgKCFvLT53b3JkX3JlZ2V4KQorCQlvLT53b3JkX3JlZ2V4ID0gdXNlcmRpZmZfd29yZF9yZWdleChvbmUpOworCWlmICghby0+d29yZF9yZWdleCkKKwkJby0+d29yZF9yZWdleCA9IHVzZXJkaWZmX3dvcmRfcmVnZXgodHdvKTsKKwlpZiAoIW8tPndvcmRfcmVnZXgpCisJCW8tPndvcmRfcmVnZXggPSBkaWZmX3dvcmRfcmVnZXhfY2ZnOworCWlmIChvLT53b3JkX3JlZ2V4KSB7CisJCWVjYmRhdGEtPmRpZmZfd29yZHMtPndvcmRfcmVnZXggPSAocmVnZXhfdCAqKQorCQkJeG1hbGxvYyhzaXplb2YocmVnZXhfdCkpOworCQlpZiAocmVnY29tcChlY2JkYXRhLT5kaWZmX3dvcmRzLT53b3JkX3JlZ2V4LAorCQkJICAgIG8tPndvcmRfcmVnZXgsCisJCQkgICAgUkVHX0VYVEVOREVEIHwgUkVHX05FV0xJTkUpKQorCQkJZGllICgiSW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb246ICVzIiwKKwkJCSAgICAgby0+d29yZF9yZWdleCk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRpZmZfd29yZHNfc3R5bGVzKTsgaSsrKSB7CisJCWlmIChvLT53b3JkX2RpZmYgPT0gZGlmZl93b3Jkc19zdHlsZXNbaV0udHlwZSkgeworCQkJZWNiZGF0YS0+ZGlmZl93b3Jkcy0+c3R5bGUgPQorCQkJCSZkaWZmX3dvcmRzX3N0eWxlc1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICh3YW50X2NvbG9yKG8tPnVzZV9jb2xvcikpIHsKKwkJc3RydWN0IGRpZmZfd29yZHNfc3R5bGUgKnN0ID0gZWNiZGF0YS0+ZGlmZl93b3Jkcy0+c3R5bGU7CisJCXN0LT5vbGQuY29sb3IgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX09MRCk7CisJCXN0LT5uZXcuY29sb3IgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FVyk7CisJCXN0LT5jdHguY29sb3IgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9DT05URVhUKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZGlmZl93b3Jkc19kYXRhKHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhKQoreworCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzKSB7CisJCWRpZmZfd29yZHNfZmx1c2goZWNiZGF0YSk7CisJCWZyZWUgKGVjYmRhdGEtPmRpZmZfd29yZHMtPm9wdCk7CisJCWZyZWUgKGVjYmRhdGEtPmRpZmZfd29yZHMtPm1pbnVzLnRleHQucHRyKTsKKwkJZnJlZSAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+bWludXMub3JpZyk7CisJCWZyZWUgKGVjYmRhdGEtPmRpZmZfd29yZHMtPnBsdXMudGV4dC5wdHIpOworCQlmcmVlIChlY2JkYXRhLT5kaWZmX3dvcmRzLT5wbHVzLm9yaWcpOworCQlpZiAoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+d29yZF9yZWdleCkgeworCQkJcmVnZnJlZShlY2JkYXRhLT5kaWZmX3dvcmRzLT53b3JkX3JlZ2V4KTsKKwkJCWZyZWUoZWNiZGF0YS0+ZGlmZl93b3Jkcy0+d29yZF9yZWdleCk7CisJCX0KKwkJZnJlZShlY2JkYXRhLT5kaWZmX3dvcmRzKTsKKwkJZWNiZGF0YS0+ZGlmZl93b3JkcyA9IE5VTEw7CisJfQorfQorCitjb25zdCBjaGFyICpkaWZmX2dldF9jb2xvcihpbnQgZGlmZl91c2VfY29sb3IsIGVudW0gY29sb3JfZGlmZiBpeCkKK3sKKwlpZiAod2FudF9jb2xvcihkaWZmX3VzZV9jb2xvcikpCisJCXJldHVybiBkaWZmX2NvbG9yc1tpeF07CisJcmV0dXJuICIiOworfQorCitjb25zdCBjaGFyICpkaWZmX2xpbmVfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICptc2didWY7CisJaWYgKCFvcHQtPm91dHB1dF9wcmVmaXgpCisJCXJldHVybiAiIjsKKworCW1zZ2J1ZiA9IG9wdC0+b3V0cHV0X3ByZWZpeChvcHQsIG9wdC0+b3V0cHV0X3ByZWZpeF9kYXRhKTsKKwlyZXR1cm4gbXNnYnVmLT5idWY7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhbmVfdHJ1bmNhdGVfbGluZShzdHJ1Y3QgZW1pdF9jYWxsYmFjayAqZWNiLCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwljb25zdCBjaGFyICpjcDsKKwl1bnNpZ25lZCBsb25nIGFsbG90OworCXNpemVfdCBsID0gbGVuOworCisJaWYgKGVjYi0+dHJ1bmNhdGUpCisJCXJldHVybiBlY2ItPnRydW5jYXRlKGxpbmUsIGxlbik7CisJY3AgPSBsaW5lOworCWFsbG90ID0gbDsKKwl3aGlsZSAoMCA8IGwpIHsKKwkJKHZvaWQpIHV0Zjhfd2lkdGgoJmNwLCAmbCk7CisJCWlmICghY3ApCisJCQlicmVhazsgLyogdHJ1bmNhdGVkIGluIHRoZSBtaWRkbGU/ICovCisJfQorCXJldHVybiBhbGxvdCAtIGw7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRfbG5vKGNvbnN0IGNoYXIgKmxpbmUsIHN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhKQoreworCWNvbnN0IGNoYXIgKnA7CisJZWNiZGF0YS0+bG5vX2luX3ByZWltYWdlID0gMDsKKwllY2JkYXRhLT5sbm9faW5fcG9zdGltYWdlID0gMDsKKwlwID0gc3RyY2hyKGxpbmUsICctJyk7CisJaWYgKCFwKQorCQlyZXR1cm47IC8qIGNhbm5vdCBoYXBwZW4gKi8KKwllY2JkYXRhLT5sbm9faW5fcHJlaW1hZ2UgPSBzdHJ0b2wocCArIDEsIE5VTEwsIDEwKTsKKwlwID0gc3RyY2hyKHAsICcrJyk7CisJaWYgKCFwKQorCQlyZXR1cm47IC8qIGNhbm5vdCBoYXBwZW4gKi8KKwllY2JkYXRhLT5sbm9faW5fcG9zdGltYWdlID0gc3RydG9sKHAgKyAxLCBOVUxMLCAxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGZuX291dF9jb25zdW1lKHZvaWQgKnByaXYsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCBlbWl0X2NhbGxiYWNrICplY2JkYXRhID0gcHJpdjsKKwljb25zdCBjaGFyICptZXRhID0gZGlmZl9nZXRfY29sb3IoZWNiZGF0YS0+Y29sb3JfZGlmZiwgRElGRl9NRVRBSU5GTyk7CisJY29uc3QgY2hhciAqY29udGV4dCA9IGRpZmZfZ2V0X2NvbG9yKGVjYmRhdGEtPmNvbG9yX2RpZmYsIERJRkZfQ09OVEVYVCk7CisJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX1JFU0VUKTsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvID0gZWNiZGF0YS0+b3B0OworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4ID0gZGlmZl9saW5lX3ByZWZpeChvKTsKKworCWlmIChlY2JkYXRhLT5oZWFkZXIpIHsKKwkJZnByaW50ZihlY2JkYXRhLT5vcHQtPmZpbGUsICIlcyIsIGVjYmRhdGEtPmhlYWRlci0+YnVmKTsKKwkJc3RyYnVmX3Jlc2V0KGVjYmRhdGEtPmhlYWRlcik7CisJCWVjYmRhdGEtPmhlYWRlciA9IE5VTEw7CisJfQorCSooZWNiZGF0YS0+Zm91bmRfY2hhbmdlc3ApID0gMTsKKworCWlmIChlY2JkYXRhLT5sYWJlbF9wYXRoWzBdKSB7CisJCWNvbnN0IGNoYXIgKm5hbWVfYV90YWIsICpuYW1lX2JfdGFiOworCisJCW5hbWVfYV90YWIgPSBzdHJjaHIoZWNiZGF0YS0+bGFiZWxfcGF0aFswXSwgJyAnKSA/ICJcdCIgOiAiIjsKKwkJbmFtZV9iX3RhYiA9IHN0cmNocihlY2JkYXRhLT5sYWJlbF9wYXRoWzFdLCAnICcpID8gIlx0IiA6ICIiOworCisJCWZwcmludGYoZWNiZGF0YS0+b3B0LT5maWxlLCAiJXMlcy0tLSAlcyVzJXNcbiIsCisJCQlsaW5lX3ByZWZpeCwgbWV0YSwgZWNiZGF0YS0+bGFiZWxfcGF0aFswXSwgcmVzZXQsIG5hbWVfYV90YWIpOworCQlmcHJpbnRmKGVjYmRhdGEtPm9wdC0+ZmlsZSwgIiVzJXMrKysgJXMlcyVzXG4iLAorCQkJbGluZV9wcmVmaXgsIG1ldGEsIGVjYmRhdGEtPmxhYmVsX3BhdGhbMV0sIHJlc2V0LCBuYW1lX2JfdGFiKTsKKwkJZWNiZGF0YS0+bGFiZWxfcGF0aFswXSA9IGVjYmRhdGEtPmxhYmVsX3BhdGhbMV0gPSBOVUxMOworCX0KKworCWlmIChkaWZmX3N1cHByZXNzX2JsYW5rX2VtcHR5CisJICAgICYmIGxlbiA9PSAyICYmIGxpbmVbMF0gPT0gJyAnICYmIGxpbmVbMV0gPT0gJ1xuJykgeworCQlsaW5lWzBdID0gJ1xuJzsKKwkJbGVuID0gMTsKKwl9CisKKwlpZiAobGluZVswXSA9PSAnQCcpIHsKKwkJaWYgKGVjYmRhdGEtPmRpZmZfd29yZHMpCisJCQlkaWZmX3dvcmRzX2ZsdXNoKGVjYmRhdGEpOworCQlsZW4gPSBzYW5lX3RydW5jYXRlX2xpbmUoZWNiZGF0YSwgbGluZSwgbGVuKTsKKwkJZmluZF9sbm8obGluZSwgZWNiZGF0YSk7CisJCWVtaXRfaHVua19oZWFkZXIoZWNiZGF0YSwgbGluZSwgbGVuKTsKKwkJaWYgKGxpbmVbbGVuLTFdICE9ICdcbicpCisJCQlwdXRjKCdcbicsIGVjYmRhdGEtPm9wdC0+ZmlsZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobGVuIDwgMSkgeworCQllbWl0X2xpbmUoZWNiZGF0YS0+b3B0LCByZXNldCwgcmVzZXQsIGxpbmUsIGxlbik7CisJCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzCisJCSAgICAmJiBlY2JkYXRhLT5kaWZmX3dvcmRzLT50eXBlID09IERJRkZfV09SRFNfUE9SQ0VMQUlOKQorCQkJZnB1dHMoIn5cbiIsIGVjYmRhdGEtPm9wdC0+ZmlsZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZWNiZGF0YS0+ZGlmZl93b3JkcykgeworCQlpZiAobGluZVswXSA9PSAnLScpIHsKKwkJCWRpZmZfd29yZHNfYXBwZW5kKGxpbmUsIGxlbiwKKwkJCQkJICAmZWNiZGF0YS0+ZGlmZl93b3Jkcy0+bWludXMpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKGxpbmVbMF0gPT0gJysnKSB7CisJCQlkaWZmX3dvcmRzX2FwcGVuZChsaW5lLCBsZW4sCisJCQkJCSAgJmVjYmRhdGEtPmRpZmZfd29yZHMtPnBsdXMpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGxpbmUsICJcXCAiKSkgeworCQkJLyoKKwkJCSAqIEVhdCB0aGUgIm5vIG5ld2xpbmUgYXQgZW9mIiBtYXJrZXIgYXMgaWYgd2UKKwkJCSAqIHNhdyBhICIrIiBvciAiLSIgbGluZSB3aXRoIG5vdGhpbmcgb24gaXQsCisJCQkgKiBhbmQgcmV0dXJuIHdpdGhvdXQgZGlmZl93b3Jkc19mbHVzaCgpIHRvCisJCQkgKiBkZWZlciBwcm9jZXNzaW5nLiBJZiB0aGlzIGlzIHRoZSBlbmQgb2YKKwkJCSAqIHByZWltYWdlLCBtb3JlICIrIiBsaW5lcyBtYXkgY29tZSBhZnRlciBpdC4KKwkJCSAqLworCQkJcmV0dXJuOworCQl9CisJCWRpZmZfd29yZHNfZmx1c2goZWNiZGF0YSk7CisJCWlmIChlY2JkYXRhLT5kaWZmX3dvcmRzLT50eXBlID09IERJRkZfV09SRFNfUE9SQ0VMQUlOKSB7CisJCQllbWl0X2xpbmUoZWNiZGF0YS0+b3B0LCBjb250ZXh0LCByZXNldCwgbGluZSwgbGVuKTsKKwkJCWZwdXRzKCJ+XG4iLCBlY2JkYXRhLT5vcHQtPmZpbGUpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFNraXAgdGhlIHByZWZpeCBjaGFyYWN0ZXIsIGlmIGFueS4gIFdpdGgKKwkJCSAqIGRpZmZfc3VwcHJlc3NfYmxhbmtfZW1wdHksIHRoZXJlIG1heSBiZQorCQkJICogbm9uZS4KKwkJCSAqLworCQkJaWYgKGxpbmVbMF0gIT0gJ1xuJykgeworCQkJICAgICAgbGluZSsrOworCQkJICAgICAgbGVuLS07CisJCQl9CisJCQllbWl0X2xpbmUoZWNiZGF0YS0+b3B0LCBjb250ZXh0LCByZXNldCwgbGluZSwgbGVuKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChsaW5lWzBdKSB7CisJY2FzZSAnKyc6CisJCWVjYmRhdGEtPmxub19pbl9wb3N0aW1hZ2UrKzsKKwkJZW1pdF9hZGRfbGluZShyZXNldCwgZWNiZGF0YSwgbGluZSArIDEsIGxlbiAtIDEpOworCQlicmVhazsKKwljYXNlICctJzoKKwkJZWNiZGF0YS0+bG5vX2luX3ByZWltYWdlKys7CisJCWVtaXRfZGVsX2xpbmUocmVzZXQsIGVjYmRhdGEsIGxpbmUgKyAxLCBsZW4gLSAxKTsKKwkJYnJlYWs7CisJY2FzZSAnICc6CisJCWVjYmRhdGEtPmxub19pbl9wb3N0aW1hZ2UrKzsKKwkJZWNiZGF0YS0+bG5vX2luX3ByZWltYWdlKys7CisJCWVtaXRfY29udGV4dF9saW5lKHJlc2V0LCBlY2JkYXRhLCBsaW5lICsgMSwgbGVuIC0gMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGluY29tcGxldGUgbGluZSBhdCB0aGUgZW5kICovCisJCWVjYmRhdGEtPmxub19pbl9wcmVpbWFnZSsrOworCQllbWl0X2xpbmUoZWNiZGF0YS0+b3B0LAorCQkJICBkaWZmX2dldF9jb2xvcihlY2JkYXRhLT5jb2xvcl9kaWZmLCBESUZGX0NPTlRFWFQpLAorCQkJICByZXNldCwgbGluZSwgbGVuKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgY2hhciAqcHByaW50X3JlbmFtZShjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCWNvbnN0IGNoYXIgKm9sZCA9IGE7CisJY29uc3QgY2hhciAqbmV3ID0gYjsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcGZ4X2xlbmd0aCwgc2Z4X2xlbmd0aDsKKwlpbnQgcGZ4X2FkanVzdF9mb3Jfc2xhc2g7CisJaW50IGxlbl9hID0gc3RybGVuKGEpOworCWludCBsZW5fYiA9IHN0cmxlbihiKTsKKwlpbnQgYV9taWRsZW4sIGJfbWlkbGVuOworCWludCBxbGVuX2EgPSBxdW90ZV9jX3N0eWxlKGEsIE5VTEwsIE5VTEwsIDApOworCWludCBxbGVuX2IgPSBxdW90ZV9jX3N0eWxlKGIsIE5VTEwsIE5VTEwsIDApOworCisJaWYgKHFsZW5fYSB8fCBxbGVuX2IpIHsKKwkJcXVvdGVfY19zdHlsZShhLCAmbmFtZSwgTlVMTCwgMCk7CisJCXN0cmJ1Zl9hZGRzdHIoJm5hbWUsICIgPT4gIik7CisJCXF1b3RlX2Nfc3R5bGUoYiwgJm5hbWUsIE5VTEwsIDApOworCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmbmFtZSwgTlVMTCk7CisJfQorCisJLyogRmluZCBjb21tb24gcHJlZml4ICovCisJcGZ4X2xlbmd0aCA9IDA7CisJd2hpbGUgKCpvbGQgJiYgKm5ldyAmJiAqb2xkID09ICpuZXcpIHsKKwkJaWYgKCpvbGQgPT0gJy8nKQorCQkJcGZ4X2xlbmd0aCA9IG9sZCAtIGEgKyAxOworCQlvbGQrKzsKKwkJbmV3Kys7CisJfQorCisJLyogRmluZCBjb21tb24gc3VmZml4ICovCisJb2xkID0gYSArIGxlbl9hOworCW5ldyA9IGIgKyBsZW5fYjsKKwlzZnhfbGVuZ3RoID0gMDsKKwkvKgorCSAqIElmIHRoZXJlIGlzIGEgY29tbW9uIHByZWZpeCwgaXQgbXVzdCBlbmQgaW4gYSBzbGFzaC4gIEluCisJICogdGhhdCBjYXNlIHdlIGxldCB0aGlzIGxvb3AgcnVuIDEgaW50byB0aGUgcHJlZml4IHRvIHNlZSB0aGUKKwkgKiBzYW1lIHNsYXNoLgorCSAqCisJICogSWYgdGhlcmUgaXMgbm8gY29tbW9uIHByZWZpeCwgd2UgY2Fubm90IGRvIHRoaXMgYXMgaXQgd291bGQKKwkgKiB1bmRlcnJ1biB0aGUgaW5wdXQgc3RyaW5ncy4KKwkgKi8KKwlwZnhfYWRqdXN0X2Zvcl9zbGFzaCA9IChwZnhfbGVuZ3RoID8gMSA6IDApOworCXdoaWxlIChhICsgcGZ4X2xlbmd0aCAtIHBmeF9hZGp1c3RfZm9yX3NsYXNoIDw9IG9sZCAmJgorCSAgICAgICBiICsgcGZ4X2xlbmd0aCAtIHBmeF9hZGp1c3RfZm9yX3NsYXNoIDw9IG5ldyAmJgorCSAgICAgICAqb2xkID09ICpuZXcpIHsKKwkJaWYgKCpvbGQgPT0gJy8nKQorCQkJc2Z4X2xlbmd0aCA9IGxlbl9hIC0gKG9sZCAtIGEpOworCQlvbGQtLTsKKwkJbmV3LS07CisJfQorCisJLyoKKwkgKiBwZnh7bWlkLWEgPT4gbWlkLWJ9c2Z4CisJICoge3BmeC1hID0+IHBmeC1ifXNmeAorCSAqIHBmeHtzZngtYSA9PiBzZngtYn0KKwkgKiBuYW1lLWEgPT4gbmFtZS1iCisJICovCisJYV9taWRsZW4gPSBsZW5fYSAtIHBmeF9sZW5ndGggLSBzZnhfbGVuZ3RoOworCWJfbWlkbGVuID0gbGVuX2IgLSBwZnhfbGVuZ3RoIC0gc2Z4X2xlbmd0aDsKKwlpZiAoYV9taWRsZW4gPCAwKQorCQlhX21pZGxlbiA9IDA7CisJaWYgKGJfbWlkbGVuIDwgMCkKKwkJYl9taWRsZW4gPSAwOworCisJc3RyYnVmX2dyb3coJm5hbWUsIHBmeF9sZW5ndGggKyBhX21pZGxlbiArIGJfbWlkbGVuICsgc2Z4X2xlbmd0aCArIDcpOworCWlmIChwZnhfbGVuZ3RoICsgc2Z4X2xlbmd0aCkgeworCQlzdHJidWZfYWRkKCZuYW1lLCBhLCBwZnhfbGVuZ3RoKTsKKwkJc3RyYnVmX2FkZGNoKCZuYW1lLCAneycpOworCX0KKwlzdHJidWZfYWRkKCZuYW1lLCBhICsgcGZ4X2xlbmd0aCwgYV9taWRsZW4pOworCXN0cmJ1Zl9hZGRzdHIoJm5hbWUsICIgPT4gIik7CisJc3RyYnVmX2FkZCgmbmFtZSwgYiArIHBmeF9sZW5ndGgsIGJfbWlkbGVuKTsKKwlpZiAocGZ4X2xlbmd0aCArIHNmeF9sZW5ndGgpIHsKKwkJc3RyYnVmX2FkZGNoKCZuYW1lLCAnfScpOworCQlzdHJidWZfYWRkKCZuYW1lLCBhICsgbGVuX2EgLSBzZnhfbGVuZ3RoLCBzZnhfbGVuZ3RoKTsKKwl9CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm5hbWUsIE5VTEwpOworfQorCitzdHJ1Y3QgZGlmZnN0YXRfdCB7CisJaW50IG5yOworCWludCBhbGxvYzsKKwlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSB7CisJCWNoYXIgKmZyb21fbmFtZTsKKwkJY2hhciAqbmFtZTsKKwkJY2hhciAqcHJpbnRfbmFtZTsKKwkJdW5zaWduZWQgaXNfdW5tZXJnZWQ6MTsKKwkJdW5zaWduZWQgaXNfYmluYXJ5OjE7CisJCXVuc2lnbmVkIGlzX3JlbmFtZWQ6MTsKKwkJdW5zaWduZWQgaXNfaW50ZXJlc3Rpbmc6MTsKKwkJdWludG1heF90IGFkZGVkLCBkZWxldGVkOworCX0gKipmaWxlczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZGlmZnN0YXRfYWRkKHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCwKKwkJCQkJICBjb25zdCBjaGFyICpuYW1lX2EsCisJCQkJCSAgY29uc3QgY2hhciAqbmFtZV9iKQoreworCXN0cnVjdCBkaWZmc3RhdF9maWxlICp4OworCXggPSB4Y2FsbG9jKDEsIHNpemVvZigqeCkpOworCUFMTE9DX0dST1coZGlmZnN0YXQtPmZpbGVzLCBkaWZmc3RhdC0+bnIgKyAxLCBkaWZmc3RhdC0+YWxsb2MpOworCWRpZmZzdGF0LT5maWxlc1tkaWZmc3RhdC0+bnIrK10gPSB4OworCWlmIChuYW1lX2IpIHsKKwkJeC0+ZnJvbV9uYW1lID0geHN0cmR1cChuYW1lX2EpOworCQl4LT5uYW1lID0geHN0cmR1cChuYW1lX2IpOworCQl4LT5pc19yZW5hbWVkID0gMTsKKwl9CisJZWxzZSB7CisJCXgtPmZyb21fbmFtZSA9IE5VTEw7CisJCXgtPm5hbWUgPSB4c3RyZHVwKG5hbWVfYSk7CisJfQorCXJldHVybiB4OworfQorCitzdGF0aWMgdm9pZCBkaWZmc3RhdF9jb25zdW1lKHZvaWQgKnByaXYsIGNoYXIgKmxpbmUsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCA9IHByaXY7CisJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKnggPSBkaWZmc3RhdC0+ZmlsZXNbZGlmZnN0YXQtPm5yIC0gMV07CisKKwlpZiAobGluZVswXSA9PSAnKycpCisJCXgtPmFkZGVkKys7CisJZWxzZSBpZiAobGluZVswXSA9PSAnLScpCisJCXgtPmRlbGV0ZWQrKzsKK30KKworY29uc3QgY2hhciBtaW1lX2JvdW5kYXJ5X2xlYWRlcltdID0gIi0tLS0tLS0tLS0tLSI7CisKK3N0YXRpYyBpbnQgc2NhbGVfbGluZWFyKGludCBpdCwgaW50IHdpZHRoLCBpbnQgbWF4X2NoYW5nZSkKK3sKKwlpZiAoIWl0KQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIG1ha2Ugc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSAnLScgb3IgJysnIGlzIHByaW50ZWQgaWYKKwkgKiB0aGVyZSBpcyBhbnkgY2hhbmdlIHRvIHRoaXMgcGF0aC4gVGhlIGVhc2llc3Qgd2F5IGlzIHRvCisJICogc2NhbGUgbGluZWFybHkgYXMgaWYgdGhlIGFsbG90ZWQgd2lkdGggaXMgb25lIGNvbHVtbiBzaG9ydGVyCisJICogdGhhbiBpdCBpcywgYW5kIHRoZW4gYWRkIDEgdG8gdGhlIHJlc3VsdC4KKwkgKi8KKwlyZXR1cm4gMSArIChpdCAqICh3aWR0aCAtIDEpIC8gbWF4X2NoYW5nZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbmFtZShGSUxFICpmaWxlLAorCQkgICAgICBjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJZnByaW50ZihmaWxlLCAiICVzJS0qcyB8IiwgcHJlZml4LCBsZW4sIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2dyYXBoKEZJTEUgKmZpbGUsIGNoYXIgY2gsIGludCBjbnQsIGNvbnN0IGNoYXIgKnNldCwgY29uc3QgY2hhciAqcmVzZXQpCit7CisJaWYgKGNudCA8PSAwKQorCQlyZXR1cm47CisJZnByaW50ZihmaWxlLCAiJXMiLCBzZXQpOworCXdoaWxlIChjbnQtLSkKKwkJcHV0YyhjaCwgZmlsZSk7CisJZnByaW50ZihmaWxlLCAiJXMiLCByZXNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfcHJpbnRfbmFtZShzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZmlsZSkKK3sKKwljaGFyICpwbmFtZTsKKworCWlmIChmaWxlLT5wcmludF9uYW1lKQorCQlyZXR1cm47CisKKwlpZiAoIWZpbGUtPmlzX3JlbmFtZWQpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJaWYgKHF1b3RlX2Nfc3R5bGUoZmlsZS0+bmFtZSwgJmJ1ZiwgTlVMTCwgMCkpIHsKKwkJCXBuYW1lID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXBuYW1lID0gZmlsZS0+bmFtZTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQl9CisJfSBlbHNlIHsKKwkJcG5hbWUgPSBwcHJpbnRfcmVuYW1lKGZpbGUtPmZyb21fbmFtZSwgZmlsZS0+bmFtZSk7CisJfQorCWZpbGUtPnByaW50X25hbWUgPSBwbmFtZTsKK30KKworaW50IHByaW50X3N0YXRfc3VtbWFyeShGSUxFICpmcCwgaW50IGZpbGVzLCBpbnQgaW5zZXJ0aW9ucywgaW50IGRlbGV0aW9ucykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKworCWlmICghZmlsZXMpIHsKKwkJYXNzZXJ0KGluc2VydGlvbnMgPT0gMCAmJiBkZWxldGlvbnMgPT0gMCk7CisJCXJldHVybiBmcHJpbnRmKGZwLCAiJXNcbiIsICIgMCBmaWxlcyBjaGFuZ2VkIik7CisJfQorCisJc3RyYnVmX2FkZGYoJnNiLAorCQkgICAgKGZpbGVzID09IDEpID8gIiAlZCBmaWxlIGNoYW5nZWQiIDogIiAlZCBmaWxlcyBjaGFuZ2VkIiwKKwkJICAgIGZpbGVzKTsKKworCS8qCisJICogRm9yIGJpbmFyeSBkaWZmLCB0aGUgY2FsbGVyIG1heSB3YW50IHRvIHByaW50ICJ4IGZpbGVzCisJICogY2hhbmdlZCIgd2l0aCBpbnNlcnRpb25zID09IDAgJiYgZGVsZXRpb25zID09IDAuCisJICoKKwkgKiBOb3Qgb21pdHRpbmcgIjAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkiIGluIHRoaXMgY2FzZQorCSAqIGlzIHByb2JhYmx5IGxlc3MgY29uZnVzaW5nIChpLmUgc2tpcCBvdmVyICIyIGZpbGVzIGNoYW5nZWQKKwkgKiBidXQgbm90aGluZyBhYm91dCBhZGRlZC9yZW1vdmVkIGxpbmVzPyBJcyB0aGlzIGEgYnVnIGluIEdpdD8iKS4KKwkgKi8KKwlpZiAoaW5zZXJ0aW9ucyB8fCBkZWxldGlvbnMgPT0gMCkgeworCQlzdHJidWZfYWRkZigmc2IsCisJCQkgICAgKGluc2VydGlvbnMgPT0gMSkgPyAiLCAlZCBpbnNlcnRpb24oKykiIDogIiwgJWQgaW5zZXJ0aW9ucygrKSIsCisJCQkgICAgaW5zZXJ0aW9ucyk7CisJfQorCisJaWYgKGRlbGV0aW9ucyB8fCBpbnNlcnRpb25zID09IDApIHsKKwkJc3RyYnVmX2FkZGYoJnNiLAorCQkJICAgIChkZWxldGlvbnMgPT0gMSkgPyAiLCAlZCBkZWxldGlvbigtKSIgOiAiLCAlZCBkZWxldGlvbnMoLSkiLAorCQkJICAgIGRlbGV0aW9ucyk7CisJfQorCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCXJldCA9IGZwdXRzKHNiLmJ1ZiwgZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2hvd19zdGF0cyhzdHJ1Y3QgZGlmZnN0YXRfdCAqZGF0YSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaSwgbGVuLCBhZGQsIGRlbCwgYWRkcyA9IDAsIGRlbHMgPSAwOworCXVpbnRtYXhfdCBtYXhfY2hhbmdlID0gMCwgbWF4X2xlbiA9IDA7CisJaW50IHRvdGFsX2ZpbGVzID0gZGF0YS0+bnIsIGNvdW50OworCWludCB3aWR0aCwgbmFtZV93aWR0aCwgZ3JhcGhfd2lkdGgsIG51bWJlcl93aWR0aCA9IDAsIGJpbl93aWR0aCA9IDA7CisJY29uc3QgY2hhciAqcmVzZXQsICphZGRfYywgKmRlbF9jOworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4ID0gIiI7CisJaW50IGV4dHJhX3Nob3duID0gMDsKKworCWlmIChkYXRhLT5uciA9PSAwKQorCQlyZXR1cm47CisKKwlsaW5lX3ByZWZpeCA9IGRpZmZfbGluZV9wcmVmaXgob3B0aW9ucyk7CisJY291bnQgPSBvcHRpb25zLT5zdGF0X2NvdW50ID8gb3B0aW9ucy0+c3RhdF9jb3VudCA6IGRhdGEtPm5yOworCisJcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQob3B0aW9ucywgRElGRl9SRVNFVCk7CisJYWRkX2MgPSBkaWZmX2dldF9jb2xvcl9vcHQob3B0aW9ucywgRElGRl9GSUxFX05FVyk7CisJZGVsX2MgPSBkaWZmX2dldF9jb2xvcl9vcHQob3B0aW9ucywgRElGRl9GSUxFX09MRCk7CisKKwkvKgorCSAqIEZpbmQgdGhlIGxvbmdlc3QgZmlsZW5hbWUgYW5kIG1heCBudW1iZXIgb2YgY2hhbmdlcworCSAqLworCWZvciAoaSA9IDA7IChpIDwgY291bnQpICYmIChpIDwgZGF0YS0+bnIpOyBpKyspIHsKKwkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmZpbGUgPSBkYXRhLT5maWxlc1tpXTsKKwkJdWludG1heF90IGNoYW5nZSA9IGZpbGUtPmFkZGVkICsgZmlsZS0+ZGVsZXRlZDsKKworCQlpZiAoIWZpbGUtPmlzX2ludGVyZXN0aW5nICYmIChjaGFuZ2UgPT0gMCkpIHsKKwkJCWNvdW50Kys7IC8qIG5vdCBzaG93biA9PSByb29tIGZvciBvbmUgbW9yZSAqLworCQkJY29udGludWU7CisJCX0KKwkJZmlsbF9wcmludF9uYW1lKGZpbGUpOworCQlsZW4gPSBzdHJsZW4oZmlsZS0+cHJpbnRfbmFtZSk7CisJCWlmIChtYXhfbGVuIDwgbGVuKQorCQkJbWF4X2xlbiA9IGxlbjsKKworCQlpZiAoZmlsZS0+aXNfdW5tZXJnZWQpIHsKKwkJCS8qICJVbm1lcmdlZCIgaXMgOCBjaGFyYWN0ZXJzICovCisJCQliaW5fd2lkdGggPSBiaW5fd2lkdGggPCA4ID8gOCA6IGJpbl93aWR0aDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmaWxlLT5pc19iaW5hcnkpIHsKKwkJCS8qICJCaW4gWFhYIC0+IFlZWSBieXRlcyIgKi8KKwkJCWludCB3ID0gMTQgKyBkZWNpbWFsX3dpZHRoKGZpbGUtPmFkZGVkKQorCQkJCSsgZGVjaW1hbF93aWR0aChmaWxlLT5kZWxldGVkKTsKKwkJCWJpbl93aWR0aCA9IGJpbl93aWR0aCA8IHcgPyB3IDogYmluX3dpZHRoOworCQkJLyogRGlzcGxheSBjaGFuZ2UgY291bnRzIGFsaWduZWQgd2l0aCAiQmluIiAqLworCQkJbnVtYmVyX3dpZHRoID0gMzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKG1heF9jaGFuZ2UgPCBjaGFuZ2UpCisJCQltYXhfY2hhbmdlID0gY2hhbmdlOworCX0KKwljb3VudCA9IGk7IC8qIHdoZXJlIHdlIGNhbiBzdG9wIHNjYW5uaW5nIGluIGRhdGEtPmZpbGVzW10gKi8KKworCS8qCisJICogV2UgaGF2ZSB3aWR0aCA9IHN0YXRfd2lkdGggb3IgdGVybV9jb2x1bW5zKCkgY29sdW1ucyB0b3RhbC4KKwkgKiBXZSB3YW50IGEgbWF4aW11bSBvZiBtaW4obWF4X2xlbiwgc3RhdF9uYW1lX3dpZHRoKSBmb3IgdGhlIG5hbWUgcGFydC4KKwkgKiBXZSB3YW50IGEgbWF4aW11bSBvZiBtaW4obWF4X2NoYW5nZSwgc3RhdF9ncmFwaF93aWR0aCkgZm9yIHRoZSArLSBwYXJ0LgorCSAqIFdlIGFsc28gbmVlZCAxIGZvciAiICIgYW5kIDQgKyBkZWNpbWFsX3dpZHRoKG1heF9jaGFuZ2UpCisJICogZm9yICIgfCBOTk5OICIgYW5kIG9uZSB0aGUgZW1wdHkgY29sdW1uIGF0IHRoZSBlbmQsIGFsdG9nZXRoZXIKKwkgKiA2ICsgZGVjaW1hbF93aWR0aChtYXhfY2hhbmdlKS4KKwkgKgorCSAqIElmIHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSwgd2Ugd2lsbCB1c2UgdGhlIHNtYWxsZXIgb2YKKwkgKiBzdGF0X25hbWVfd2lkdGggKGlmIHNldCkgYW5kIDUvOCp3aWR0aCBmb3IgdGhlIGZpbGVuYW1lLAorCSAqIGFuZCB0aGUgcmVzdCBmb3IgY29uc3RhbnQgZWxlbWVudHMgKyBncmFwaCBwYXJ0LCBidXQgbm8gbW9yZQorCSAqIHRoYW4gc3RhdF9ncmFwaF93aWR0aCBmb3IgdGhlIGdyYXBoIHBhcnQuCisJICogKDUvOCBnaXZlcyA1MCBmb3IgZmlsZW5hbWUgYW5kIDMwIGZvciB0aGUgY29uc3RhbnQgcGFydHMgKyBncmFwaAorCSAqIGZvciB0aGUgc3RhbmRhcmQgdGVybWluYWwgc2l6ZSkuCisJICoKKwkgKiBJbiBvdGhlciB3b3Jkczogc3RhdF93aWR0aCBsaW1pdHMgdGhlIG1heGltdW0gd2lkdGgsIGFuZAorCSAqIHN0YXRfbmFtZV93aWR0aCBmaXhlcyB0aGUgbWF4aW11bSB3aWR0aCBvZiB0aGUgZmlsZW5hbWUsCisJICogYW5kIGlzIGFsc28gdXNlZCB0byBkaXZpZGUgYXZhaWxhYmxlIGNvbHVtbnMgaWYgdGhlcmUKKwkgKiBhcmVuJ3QgZW5vdWdoLgorCSAqCisJICogQmluYXJ5IGZpbGVzIGFyZSBkaXNwbGF5ZWQgd2l0aCAiQmluIFhYWCAtPiBZWVkgYnl0ZXMiCisJICogaW5zdGVhZCBvZiB0aGUgY2hhbmdlIGNvdW50IGFuZCBncmFwaC4gVGhpcyBwYXJ0IGlzIHRyZWF0ZWQKKwkgKiBzaW1pbGFybHkgdG8gdGhlIGdyYXBoIHBhcnQsIGV4Y2VwdCB0aGF0IGl0IGlzIG5vdAorCSAqICJzY2FsZWQiLiBJZiB0b3RhbCB3aWR0aCBpcyB0b28gc21hbGwgdG8gYWNjb21tb2RhdGUgdGhlCisJICogZ3VhcmFudGVlZCBtaW5pbXVtIHdpZHRoIG9mIHRoZSBmaWxlbmFtZSBwYXJ0IGFuZCB0aGUKKwkgKiBzZXBhcmF0b3JzIGFuZCB0aGlzIG1lc3NhZ2UsIHRoaXMgbWVzc2FnZSB3aWxsICJvdmVyZmxvdyIKKwkgKiBtYWtpbmcgdGhlIGxpbmUgbG9uZ2VyIHRoYW4gdGhlIG1heGltdW0gd2lkdGguCisJICovCisKKwlpZiAob3B0aW9ucy0+c3RhdF93aWR0aCA9PSAtMSkKKwkJd2lkdGggPSB0ZXJtX2NvbHVtbnMoKSAtIG9wdGlvbnMtPm91dHB1dF9wcmVmaXhfbGVuZ3RoOworCWVsc2UKKwkJd2lkdGggPSBvcHRpb25zLT5zdGF0X3dpZHRoID8gb3B0aW9ucy0+c3RhdF93aWR0aCA6IDgwOworCW51bWJlcl93aWR0aCA9IGRlY2ltYWxfd2lkdGgobWF4X2NoYW5nZSkgPiBudW1iZXJfd2lkdGggPworCQlkZWNpbWFsX3dpZHRoKG1heF9jaGFuZ2UpIDogbnVtYmVyX3dpZHRoOworCisJaWYgKG9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGggPT0gLTEpCisJCW9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGggPSBkaWZmX3N0YXRfZ3JhcGhfd2lkdGg7CisKKwkvKgorCSAqIEd1YXJhbnRlZSAzLzgqMTY9PTYgZm9yIHRoZSBncmFwaCBwYXJ0CisJICogYW5kIDUvOCoxNj09MTAgZm9yIHRoZSBmaWxlbmFtZSBwYXJ0CisJICovCisJaWYgKHdpZHRoIDwgMTYgKyA2ICsgbnVtYmVyX3dpZHRoKQorCQl3aWR0aCA9IDE2ICsgNiArIG51bWJlcl93aWR0aDsKKworCS8qCisJICogRmlyc3QgYXNzaWduIHNpemVzIHRoYXQgYXJlIHdhbnRlZCwgaWdub3JpbmcgYXZhaWxhYmxlIHdpZHRoLgorCSAqIHN0cmxlbigiQmluIFhYWCAtPiBZWVkgYnl0ZXMiKSA9PSBiaW5fd2lkdGgsIGFuZCB0aGUgcGFydAorCSAqIHN0YXJ0aW5nIGZyb20gIlhYWCIgc2hvdWxkIGZpdCBpbiBncmFwaF93aWR0aC4KKwkgKi8KKwlncmFwaF93aWR0aCA9IG1heF9jaGFuZ2UgKyA0ID4gYmluX3dpZHRoID8gbWF4X2NoYW5nZSA6IGJpbl93aWR0aCAtIDQ7CisJaWYgKG9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGggJiYKKwkgICAgb3B0aW9ucy0+c3RhdF9ncmFwaF93aWR0aCA8IGdyYXBoX3dpZHRoKQorCQlncmFwaF93aWR0aCA9IG9wdGlvbnMtPnN0YXRfZ3JhcGhfd2lkdGg7CisKKwluYW1lX3dpZHRoID0gKG9wdGlvbnMtPnN0YXRfbmFtZV93aWR0aCA+IDAgJiYKKwkJICAgICAgb3B0aW9ucy0+c3RhdF9uYW1lX3dpZHRoIDwgbWF4X2xlbikgPworCQlvcHRpb25zLT5zdGF0X25hbWVfd2lkdGggOiBtYXhfbGVuOworCisJLyoKKwkgKiBBZGp1c3QgYWRqdXN0YWJsZSB3aWR0aHMgbm90IHRvIGV4Y2VlZCBtYXhpbXVtIHdpZHRoCisJICovCisJaWYgKG5hbWVfd2lkdGggKyBudW1iZXJfd2lkdGggKyA2ICsgZ3JhcGhfd2lkdGggPiB3aWR0aCkgeworCQlpZiAoZ3JhcGhfd2lkdGggPiB3aWR0aCAqIDMvOCAtIG51bWJlcl93aWR0aCAtIDYpIHsKKwkJCWdyYXBoX3dpZHRoID0gd2lkdGggKiAzLzggLSBudW1iZXJfd2lkdGggLSA2OworCQkJaWYgKGdyYXBoX3dpZHRoIDwgNikKKwkJCQlncmFwaF93aWR0aCA9IDY7CisJCX0KKworCQlpZiAob3B0aW9ucy0+c3RhdF9ncmFwaF93aWR0aCAmJgorCQkgICAgZ3JhcGhfd2lkdGggPiBvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoKQorCQkJZ3JhcGhfd2lkdGggPSBvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoOworCQlpZiAobmFtZV93aWR0aCA+IHdpZHRoIC0gbnVtYmVyX3dpZHRoIC0gNiAtIGdyYXBoX3dpZHRoKQorCQkJbmFtZV93aWR0aCA9IHdpZHRoIC0gbnVtYmVyX3dpZHRoIC0gNiAtIGdyYXBoX3dpZHRoOworCQllbHNlCisJCQlncmFwaF93aWR0aCA9IHdpZHRoIC0gbnVtYmVyX3dpZHRoIC0gNiAtIG5hbWVfd2lkdGg7CisJfQorCisJLyoKKwkgKiBGcm9tIGhlcmUgbmFtZV93aWR0aCBpcyB0aGUgd2lkdGggb2YgdGhlIG5hbWUgYXJlYSwKKwkgKiBhbmQgZ3JhcGhfd2lkdGggaXMgdGhlIHdpZHRoIG9mIHRoZSBncmFwaCBhcmVhLgorCSAqIG1heF9jaGFuZ2UgaXMgdXNlZCB0byBzY2FsZSBncmFwaCBwcm9wZXJseS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQljb25zdCBjaGFyICpwcmVmaXggPSAiIjsKKwkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmZpbGUgPSBkYXRhLT5maWxlc1tpXTsKKwkJY2hhciAqbmFtZSA9IGZpbGUtPnByaW50X25hbWU7CisJCXVpbnRtYXhfdCBhZGRlZCA9IGZpbGUtPmFkZGVkOworCQl1aW50bWF4X3QgZGVsZXRlZCA9IGZpbGUtPmRlbGV0ZWQ7CisJCWludCBuYW1lX2xlbjsKKworCQlpZiAoIWZpbGUtPmlzX2ludGVyZXN0aW5nICYmIChhZGRlZCArIGRlbGV0ZWQgPT0gMCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiAic2NhbGUiIHRoZSBmaWxlbmFtZQorCQkgKi8KKwkJbGVuID0gbmFtZV93aWR0aDsKKwkJbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CisJCWlmIChuYW1lX3dpZHRoIDwgbmFtZV9sZW4pIHsKKwkJCWNoYXIgKnNsYXNoOworCQkJcHJlZml4ID0gIi4uLiI7CisJCQlsZW4gLT0gMzsKKwkJCW5hbWUgKz0gbmFtZV9sZW4gLSBsZW47CisJCQlzbGFzaCA9IHN0cmNocihuYW1lLCAnLycpOworCQkJaWYgKHNsYXNoKQorCQkJCW5hbWUgPSBzbGFzaDsKKwkJfQorCisJCWlmIChmaWxlLT5pc19iaW5hcnkpIHsKKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiVzIiwgbGluZV9wcmVmaXgpOworCQkJc2hvd19uYW1lKG9wdGlvbnMtPmZpbGUsIHByZWZpeCwgbmFtZSwgbGVuKTsKKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiAlKnMiLCBudW1iZXJfd2lkdGgsICJCaW4iKTsKKwkJCWlmICghYWRkZWQgJiYgIWRlbGV0ZWQpIHsKKwkJCQlwdXRjKCdcbicsIG9wdGlvbnMtPmZpbGUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiICVzJSJQUkl1TUFYIiVzIiwKKwkJCQlkZWxfYywgZGVsZXRlZCwgcmVzZXQpOworCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiIC0+ICIpOworCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiJXMlIlBSSXVNQVgiJXMiLAorCQkJCWFkZF9jLCBhZGRlZCwgcmVzZXQpOworCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiIGJ5dGVzIik7CisJCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICJcbiIpOworCQkJY29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoZmlsZS0+aXNfdW5tZXJnZWQpIHsKKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiVzIiwgbGluZV9wcmVmaXgpOworCQkJc2hvd19uYW1lKG9wdGlvbnMtPmZpbGUsIHByZWZpeCwgbmFtZSwgbGVuKTsKKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiBVbm1lcmdlZFxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIHNjYWxlIHRoZSBhZGQvZGVsZXRlCisJCSAqLworCQlhZGQgPSBhZGRlZDsKKwkJZGVsID0gZGVsZXRlZDsKKworCQlpZiAoZ3JhcGhfd2lkdGggPD0gbWF4X2NoYW5nZSkgeworCQkJaW50IHRvdGFsID0gc2NhbGVfbGluZWFyKGFkZCArIGRlbCwgZ3JhcGhfd2lkdGgsIG1heF9jaGFuZ2UpOworCQkJaWYgKHRvdGFsIDwgMiAmJiBhZGQgJiYgZGVsKQorCQkJCS8qIHdpZHRoID49IDIgZHVlIHRvIHRoZSBzYW5pdHkgY2hlY2sgKi8KKwkJCQl0b3RhbCA9IDI7CisJCQlpZiAoYWRkIDwgZGVsKSB7CisJCQkJYWRkID0gc2NhbGVfbGluZWFyKGFkZCwgZ3JhcGhfd2lkdGgsIG1heF9jaGFuZ2UpOworCQkJCWRlbCA9IHRvdGFsIC0gYWRkOworCQkJfSBlbHNlIHsKKwkJCQlkZWwgPSBzY2FsZV9saW5lYXIoZGVsLCBncmFwaF93aWR0aCwgbWF4X2NoYW5nZSk7CisJCQkJYWRkID0gdG90YWwgLSBkZWw7CisJCQl9CisJCX0KKwkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiJXMiLCBsaW5lX3ByZWZpeCk7CisJCXNob3dfbmFtZShvcHRpb25zLT5maWxlLCBwcmVmaXgsIG5hbWUsIGxlbik7CisJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiAlKiJQUkl1TUFYIiVzIiwKKwkJCW51bWJlcl93aWR0aCwgYWRkZWQgKyBkZWxldGVkLAorCQkJYWRkZWQgKyBkZWxldGVkID8gIiAiIDogIiIpOworCQlzaG93X2dyYXBoKG9wdGlvbnMtPmZpbGUsICcrJywgYWRkLCBhZGRfYywgcmVzZXQpOworCQlzaG93X2dyYXBoKG9wdGlvbnMtPmZpbGUsICctJywgZGVsLCBkZWxfYywgcmVzZXQpOworCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICJcbiIpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmc3RhdF9maWxlICpmaWxlID0gZGF0YS0+ZmlsZXNbaV07CisJCXVpbnRtYXhfdCBhZGRlZCA9IGZpbGUtPmFkZGVkOworCQl1aW50bWF4X3QgZGVsZXRlZCA9IGZpbGUtPmRlbGV0ZWQ7CisKKwkJaWYgKGZpbGUtPmlzX3VubWVyZ2VkIHx8CisJCSAgICAoIWZpbGUtPmlzX2ludGVyZXN0aW5nICYmIChhZGRlZCArIGRlbGV0ZWQgPT0gMCkpKSB7CisJCQl0b3RhbF9maWxlcy0tOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWZpbGUtPmlzX2JpbmFyeSkgeworCQkJYWRkcyArPSBhZGRlZDsKKwkJCWRlbHMgKz0gZGVsZXRlZDsKKwkJfQorCQlpZiAoaSA8IGNvdW50KQorCQkJY29udGludWU7CisJCWlmICghZXh0cmFfc2hvd24pCisJCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICIlcyAuLi5cbiIsIGxpbmVfcHJlZml4KTsKKwkJZXh0cmFfc2hvd24gPSAxOworCX0KKwlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICIlcyIsIGxpbmVfcHJlZml4KTsKKwlwcmludF9zdGF0X3N1bW1hcnkob3B0aW9ucy0+ZmlsZSwgdG90YWxfZmlsZXMsIGFkZHMsIGRlbHMpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3Nob3J0c3RhdHMoc3RydWN0IGRpZmZzdGF0X3QgKmRhdGEsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGksIGFkZHMgPSAwLCBkZWxzID0gMCwgdG90YWxfZmlsZXMgPSBkYXRhLT5ucjsKKworCWlmIChkYXRhLT5uciA9PSAwKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnI7IGkrKykgeworCQlpbnQgYWRkZWQgPSBkYXRhLT5maWxlc1tpXS0+YWRkZWQ7CisJCWludCBkZWxldGVkPSBkYXRhLT5maWxlc1tpXS0+ZGVsZXRlZDsKKworCQlpZiAoZGF0YS0+ZmlsZXNbaV0tPmlzX3VubWVyZ2VkIHx8CisJCSAgICAoIWRhdGEtPmZpbGVzW2ldLT5pc19pbnRlcmVzdGluZyAmJiAoYWRkZWQgKyBkZWxldGVkID09IDApKSkgeworCQkJdG90YWxfZmlsZXMtLTsKKwkJfSBlbHNlIGlmICghZGF0YS0+ZmlsZXNbaV0tPmlzX2JpbmFyeSkgeyAvKiBkb24ndCBjb3VudCBieXRlcyAqLworCQkJYWRkcyArPSBhZGRlZDsKKwkJCWRlbHMgKz0gZGVsZXRlZDsKKwkJfQorCX0KKwlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsICIlcyIsIGRpZmZfbGluZV9wcmVmaXgob3B0aW9ucykpOworCXByaW50X3N0YXRfc3VtbWFyeShvcHRpb25zLT5maWxlLCB0b3RhbF9maWxlcywgYWRkcywgZGVscyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbnVtc3RhdChzdHJ1Y3QgZGlmZnN0YXRfdCAqZGF0YSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaTsKKworCWlmIChkYXRhLT5uciA9PSAwKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZmlsZSA9IGRhdGEtPmZpbGVzW2ldOworCisJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIiVzIiwgZGlmZl9saW5lX3ByZWZpeChvcHRpb25zKSk7CisKKwkJaWYgKGZpbGUtPmlzX2JpbmFyeSkKKwkJCWZwcmludGYob3B0aW9ucy0+ZmlsZSwgIi1cdC1cdCIpOworCQllbHNlCisJCQlmcHJpbnRmKG9wdGlvbnMtPmZpbGUsCisJCQkJIiUiUFJJdU1BWCJcdCUiUFJJdU1BWCJcdCIsCisJCQkJZmlsZS0+YWRkZWQsIGZpbGUtPmRlbGV0ZWQpOworCQlpZiAob3B0aW9ucy0+bGluZV90ZXJtaW5hdGlvbikgeworCQkJZmlsbF9wcmludF9uYW1lKGZpbGUpOworCQkJaWYgKCFmaWxlLT5pc19yZW5hbWVkKQorCQkJCXdyaXRlX25hbWVfcXVvdGVkKGZpbGUtPm5hbWUsIG9wdGlvbnMtPmZpbGUsCisJCQkJCQkgIG9wdGlvbnMtPmxpbmVfdGVybWluYXRpb24pOworCQkJZWxzZSB7CisJCQkJZnB1dHMoZmlsZS0+cHJpbnRfbmFtZSwgb3B0aW9ucy0+ZmlsZSk7CisJCQkJcHV0YyhvcHRpb25zLT5saW5lX3Rlcm1pbmF0aW9uLCBvcHRpb25zLT5maWxlKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChmaWxlLT5pc19yZW5hbWVkKSB7CisJCQkJcHV0YygnXDAnLCBvcHRpb25zLT5maWxlKTsKKwkJCQl3cml0ZV9uYW1lX3F1b3RlZChmaWxlLT5mcm9tX25hbWUsIG9wdGlvbnMtPmZpbGUsICdcMCcpOworCQkJfQorCQkJd3JpdGVfbmFtZV9xdW90ZWQoZmlsZS0+bmFtZSwgb3B0aW9ucy0+ZmlsZSwgJ1wwJyk7CisJCX0KKwl9Cit9CisKK3N0cnVjdCBkaXJzdGF0X2ZpbGUgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyBjaGFuZ2VkOworfTsKKworc3RydWN0IGRpcnN0YXRfZGlyIHsKKwlzdHJ1Y3QgZGlyc3RhdF9maWxlICpmaWxlczsKKwlpbnQgYWxsb2MsIG5yLCBwZXJtaWxsZSwgY3VtdWxhdGl2ZTsKK307CisKK3N0YXRpYyBsb25nIGdhdGhlcl9kaXJzdGF0KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgc3RydWN0IGRpcnN0YXRfZGlyICpkaXIsCisJCXVuc2lnbmVkIGxvbmcgY2hhbmdlZCwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4pCit7CisJdW5zaWduZWQgbG9uZyB0aGlzX2RpciA9IDA7CisJdW5zaWduZWQgaW50IHNvdXJjZXMgPSAwOworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4ID0gZGlmZl9saW5lX3ByZWZpeChvcHQpOworCisJd2hpbGUgKGRpci0+bnIpIHsKKwkJc3RydWN0IGRpcnN0YXRfZmlsZSAqZiA9IGRpci0+ZmlsZXM7CisJCWludCBuYW1lbGVuID0gc3RybGVuKGYtPm5hbWUpOworCQl1bnNpZ25lZCBsb25nIHRoaXM7CisJCWNoYXIgKnNsYXNoOworCisJCWlmIChuYW1lbGVuIDwgYmFzZWxlbikKKwkJCWJyZWFrOworCQlpZiAobWVtY21wKGYtPm5hbWUsIGJhc2UsIGJhc2VsZW4pKQorCQkJYnJlYWs7CisJCXNsYXNoID0gc3RyY2hyKGYtPm5hbWUgKyBiYXNlbGVuLCAnLycpOworCQlpZiAoc2xhc2gpIHsKKwkJCWludCBuZXdiYXNlbGVuID0gc2xhc2ggKyAxIC0gZi0+bmFtZTsKKwkJCXRoaXMgPSBnYXRoZXJfZGlyc3RhdChvcHQsIGRpciwgY2hhbmdlZCwgZi0+bmFtZSwgbmV3YmFzZWxlbik7CisJCQlzb3VyY2VzKys7CisJCX0gZWxzZSB7CisJCQl0aGlzID0gZi0+Y2hhbmdlZDsKKwkJCWRpci0+ZmlsZXMrKzsKKwkJCWRpci0+bnItLTsKKwkJCXNvdXJjZXMgKz0gMjsKKwkJfQorCQl0aGlzX2RpciArPSB0aGlzOworCX0KKworCS8qCisJICogV2UgZG9uJ3QgcmVwb3J0IGRpcnN0YXQncyBmb3IKKwkgKiAgLSB0aGUgdG9wIGxldmVsCisJICogIC0gb3IgY2FzZXMgd2hlcmUgZXZlcnl0aGluZyBjYW1lIGZyb20gYSBzaW5nbGUgZGlyZWN0b3J5CisJICogICAgdW5kZXIgdGhpcyBkaXJlY3RvcnkgKHNvdXJjZXMgPT0gMSkuCisJICovCisJaWYgKGJhc2VsZW4gJiYgc291cmNlcyAhPSAxKSB7CisJCWlmICh0aGlzX2RpcikgeworCQkJaW50IHBlcm1pbGxlID0gdGhpc19kaXIgKiAxMDAwIC8gY2hhbmdlZDsKKwkJCWlmIChwZXJtaWxsZSA+PSBkaXItPnBlcm1pbGxlKSB7CisJCQkJZnByaW50ZihvcHQtPmZpbGUsICIlcyU0ZC4lMDFkJSUgJS4qc1xuIiwgbGluZV9wcmVmaXgsCisJCQkJCXBlcm1pbGxlIC8gMTAsIHBlcm1pbGxlICUgMTAsIGJhc2VsZW4sIGJhc2UpOworCQkJCWlmICghZGlyLT5jdW11bGF0aXZlKQorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gdGhpc19kaXI7Cit9CisKK3N0YXRpYyBpbnQgZGlyc3RhdF9jb21wYXJlKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwljb25zdCBzdHJ1Y3QgZGlyc3RhdF9maWxlICphID0gX2E7CisJY29uc3Qgc3RydWN0IGRpcnN0YXRfZmlsZSAqYiA9IF9iOworCXJldHVybiBzdHJjbXAoYS0+bmFtZSwgYi0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZGlyc3RhdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgY2hhbmdlZDsKKwlzdHJ1Y3QgZGlyc3RhdF9kaXIgZGlyOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCisJZGlyLmZpbGVzID0gTlVMTDsKKwlkaXIuYWxsb2MgPSAwOworCWRpci5uciA9IDA7CisJZGlyLnBlcm1pbGxlID0gb3B0aW9ucy0+ZGlyc3RhdF9wZXJtaWxsZTsKKwlkaXIuY3VtdWxhdGl2ZSA9IERJRkZfT1BUX1RTVChvcHRpb25zLCBESVJTVEFUX0NVTVVMQVRJVkUpOworCisJY2hhbmdlZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJdW5zaWduZWQgbG9uZyBjb3BpZWQsIGFkZGVkLCBkYW1hZ2U7CisJCWludCBjb250ZW50X2NoYW5nZWQ7CisKKwkJbmFtZSA9IHAtPnR3by0+cGF0aCA/IHAtPnR3by0+cGF0aCA6IHAtPm9uZS0+cGF0aDsKKworCQlpZiAocC0+b25lLT5zaGExX3ZhbGlkICYmIHAtPnR3by0+c2hhMV92YWxpZCkKKwkJCWNvbnRlbnRfY2hhbmdlZCA9IGhhc2hjbXAocC0+b25lLT5zaGExLCBwLT50d28tPnNoYTEpOworCQllbHNlCisJCQljb250ZW50X2NoYW5nZWQgPSAxOworCisJCWlmICghY29udGVudF9jaGFuZ2VkKSB7CisJCQkvKgorCQkJICogVGhlIFNIQTEgaGFzIG5vdCBjaGFuZ2VkLCBzbyBwcmUtL3Bvc3QtY29udGVudCBpcworCQkJICogaWRlbnRpY2FsLiBXZSBjYW4gdGhlcmVmb3JlIHNraXAgbG9va2luZyBhdCB0aGUKKwkJCSAqIGZpbGUgY29udGVudHMgYWx0b2dldGhlci4KKwkJCSAqLworCQkJZGFtYWdlID0gMDsKKwkJCWdvdG8gZm91bmRfZGFtYWdlOworCQl9CisKKwkJaWYgKERJRkZfT1BUX1RTVChvcHRpb25zLCBESVJTVEFUX0JZX0ZJTEUpKSB7CisJCQkvKgorCQkJICogSW4gLS1kaXJzdGF0LWJ5LWZpbGUgbW9kZSwgd2UgZG9uJ3QgcmVhbGx5IG5lZWQgdG8KKwkJCSAqIGxvb2sgYXQgdGhlIGFjdHVhbCBmaWxlIGNvbnRlbnRzIGF0IGFsbC4KKwkJCSAqIFRoZSBmYWN0IHRoYXQgdGhlIFNIQTEgY2hhbmdlZCBpcyBlbm91Z2ggZm9yIHVzIHRvCisJCQkgKiBhZGQgdGhpcyBmaWxlIHRvIHRoZSBsaXN0IG9mIHJlc3VsdHMKKwkJCSAqICh3aXRoIGVhY2ggZmlsZSBjb250cmlidXRpbmcgZXF1YWwgZGFtYWdlKS4KKwkJCSAqLworCQkJZGFtYWdlID0gMTsKKwkJCWdvdG8gZm91bmRfZGFtYWdlOworCQl9CisKKwkJaWYgKERJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmIERJRkZfRklMRV9WQUxJRChwLT50d28pKSB7CisJCQlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHAtPm9uZSwgMCk7CisJCQlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHAtPnR3bywgMCk7CisJCQlkaWZmY29yZV9jb3VudF9jaGFuZ2VzKHAtPm9uZSwgcC0+dHdvLCBOVUxMLCBOVUxMLCAwLAorCQkJCQkgICAgICAgJmNvcGllZCwgJmFkZGVkKTsKKwkJCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHAtPm9uZSk7CisJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT50d28pOworCQl9IGVsc2UgaWYgKERJRkZfRklMRV9WQUxJRChwLT5vbmUpKSB7CisJCQlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHAtPm9uZSwgQ0hFQ0tfU0laRV9PTkxZKTsKKwkJCWNvcGllZCA9IGFkZGVkID0gMDsKKwkJCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHAtPm9uZSk7CisJCX0gZWxzZSBpZiAoRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpIHsKKwkJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocC0+dHdvLCBDSEVDS19TSVpFX09OTFkpOworCQkJY29waWVkID0gMDsKKwkJCWFkZGVkID0gcC0+dHdvLT5zaXplOworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+dHdvKTsKKwkJfSBlbHNlCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBPcmlnaW5hbCBtaW51cyBjb3BpZWQgaXMgdGhlIHJlbW92ZWQgbWF0ZXJpYWwsCisJCSAqIGFkZGVkIGlzIHRoZSBuZXcgbWF0ZXJpYWwuICBUaGV5IGFyZSBib3RoIGRhbWFnZXMKKwkJICogbWFkZSB0byB0aGUgcHJlaW1hZ2UuCisJCSAqIElmIHRoZSByZXN1bHRpbmcgZGFtYWdlIGlzIHplcm8sIHdlIGtub3cgdGhhdAorCQkgKiBkaWZmY29yZV9jb3VudF9jaGFuZ2VzKCkgY29uc2lkZXJzIHRoZSB0d28gZW50cmllcyB0bworCQkgKiBiZSBpZGVudGljYWwsIGJ1dCBzaW5jZSBjb250ZW50X2NoYW5nZWQgaXMgdHJ1ZSwgd2UKKwkJICoga25vdyB0aGF0IHRoZXJlIG11c3QgaGF2ZSBiZWVuIF9zb21lXyBraW5kIG9mIGNoYW5nZSwKKwkJICogc28gd2UgZm9yY2UgYWxsIGVudHJpZXMgdG8gaGF2ZSBkYW1hZ2UgPiAwLgorCQkgKi8KKwkJZGFtYWdlID0gKHAtPm9uZS0+c2l6ZSAtIGNvcGllZCkgKyBhZGRlZDsKKwkJaWYgKCFkYW1hZ2UpCisJCQlkYW1hZ2UgPSAxOworCitmb3VuZF9kYW1hZ2U6CisJCUFMTE9DX0dST1coZGlyLmZpbGVzLCBkaXIubnIgKyAxLCBkaXIuYWxsb2MpOworCQlkaXIuZmlsZXNbZGlyLm5yXS5uYW1lID0gbmFtZTsKKwkJZGlyLmZpbGVzW2Rpci5ucl0uY2hhbmdlZCA9IGRhbWFnZTsKKwkJY2hhbmdlZCArPSBkYW1hZ2U7CisJCWRpci5ucisrOworCX0KKworCS8qIFRoaXMgY2FuIGhhcHBlbiBldmVuIHdpdGggbWFueSBmaWxlcywgaWYgZXZlcnl0aGluZyB3YXMgcmVuYW1lcyAqLworCWlmICghY2hhbmdlZCkKKwkJcmV0dXJuOworCisJLyogU2hvdyBhbGwgZGlyZWN0b3JpZXMgd2l0aCBtb3JlIHRoYW4geCUgb2YgdGhlIGNoYW5nZXMgKi8KKwlxc29ydChkaXIuZmlsZXMsIGRpci5uciwgc2l6ZW9mKGRpci5maWxlc1swXSksIGRpcnN0YXRfY29tcGFyZSk7CisJZ2F0aGVyX2RpcnN0YXQob3B0aW9ucywgJmRpciwgY2hhbmdlZCwgIiIsIDApOworfQorCitzdGF0aWMgdm9pZCBzaG93X2RpcnN0YXRfYnlfbGluZShzdHJ1Y3QgZGlmZnN0YXRfdCAqZGF0YSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGNoYW5nZWQ7CisJc3RydWN0IGRpcnN0YXRfZGlyIGRpcjsKKworCWlmIChkYXRhLT5uciA9PSAwKQorCQlyZXR1cm47CisKKwlkaXIuZmlsZXMgPSBOVUxMOworCWRpci5hbGxvYyA9IDA7CisJZGlyLm5yID0gMDsKKwlkaXIucGVybWlsbGUgPSBvcHRpb25zLT5kaXJzdGF0X3Blcm1pbGxlOworCWRpci5jdW11bGF0aXZlID0gRElGRl9PUFRfVFNUKG9wdGlvbnMsIERJUlNUQVRfQ1VNVUxBVElWRSk7CisKKwljaGFuZ2VkID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZmlsZSA9IGRhdGEtPmZpbGVzW2ldOworCQl1bnNpZ25lZCBsb25nIGRhbWFnZSA9IGZpbGUtPmFkZGVkICsgZmlsZS0+ZGVsZXRlZDsKKwkJaWYgKGZpbGUtPmlzX2JpbmFyeSkKKwkJCS8qCisJCQkgKiBiaW5hcnkgZmlsZXMgY291bnRzIGJ5dGVzLCBub3QgbGluZXMuIE11c3QgZmluZCBzb21lCisJCQkgKiB3YXkgdG8gbm9ybWFsaXplIGJpbmFyeSBieXRlcyB2cy4gdGV4dHVhbCBsaW5lcy4KKwkJCSAqIFRoZSBmb2xsb3dpbmcgaGV1cmlzdGljIGFzc3VtZXMgdGhhdCB0aGVyZSBhcmUgNjQKKwkJCSAqIGJ5dGVzIHBlciAibGluZSIuCisJCQkgKiBUaGlzIGlzIHN0dXBpZCBhbmQgdWdseSwgYnV0IHZlcnkgY2hlYXAuLi4KKwkJCSAqLworCQkJZGFtYWdlID0gKGRhbWFnZSArIDYzKSAvIDY0OworCQlBTExPQ19HUk9XKGRpci5maWxlcywgZGlyLm5yICsgMSwgZGlyLmFsbG9jKTsKKwkJZGlyLmZpbGVzW2Rpci5ucl0ubmFtZSA9IGZpbGUtPm5hbWU7CisJCWRpci5maWxlc1tkaXIubnJdLmNoYW5nZWQgPSBkYW1hZ2U7CisJCWNoYW5nZWQgKz0gZGFtYWdlOworCQlkaXIubnIrKzsKKwl9CisKKwkvKiBUaGlzIGNhbiBoYXBwZW4gZXZlbiB3aXRoIG1hbnkgZmlsZXMsIGlmIGV2ZXJ5dGhpbmcgd2FzIHJlbmFtZXMgKi8KKwlpZiAoIWNoYW5nZWQpCisJCXJldHVybjsKKworCS8qIFNob3cgYWxsIGRpcmVjdG9yaWVzIHdpdGggbW9yZSB0aGFuIHglIG9mIHRoZSBjaGFuZ2VzICovCisJcXNvcnQoZGlyLmZpbGVzLCBkaXIubnIsIHNpemVvZihkaXIuZmlsZXNbMF0pLCBkaXJzdGF0X2NvbXBhcmUpOworCWdhdGhlcl9kaXJzdGF0KG9wdGlvbnMsICZkaXIsIGNoYW5nZWQsICIiLCAwKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9kaWZmc3RhdF9pbmZvKHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZnN0YXQtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZzdGF0X2ZpbGUgKmYgPSBkaWZmc3RhdC0+ZmlsZXNbaV07CisJCWlmIChmLT5uYW1lICE9IGYtPnByaW50X25hbWUpCisJCQlmcmVlKGYtPnByaW50X25hbWUpOworCQlmcmVlKGYtPm5hbWUpOworCQlmcmVlKGYtPmZyb21fbmFtZSk7CisJCWZyZWUoZik7CisJfQorCWZyZWUoZGlmZnN0YXQtPmZpbGVzKTsKK30KKworc3RydWN0IGNoZWNrZGlmZl90IHsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwlpbnQgbGluZW5vOworCWludCBjb25mbGljdF9tYXJrZXJfc2l6ZTsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvOworCXVuc2lnbmVkIHdzX3J1bGU7CisJdW5zaWduZWQgc3RhdHVzOworfTsKKworc3RhdGljIGludCBpc19jb25mbGljdF9tYXJrZXIoY29uc3QgY2hhciAqbGluZSwgaW50IG1hcmtlcl9zaXplLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwljaGFyIGZpcnN0Y2hhcjsKKwlpbnQgY250OworCisJaWYgKGxlbiA8IG1hcmtlcl9zaXplICsgMSkKKwkJcmV0dXJuIDA7CisJZmlyc3RjaGFyID0gbGluZVswXTsKKwlzd2l0Y2ggKGZpcnN0Y2hhcikgeworCWNhc2UgJz0nOiBjYXNlICc+JzogY2FzZSAnPCc6IGNhc2UgJ3wnOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJZm9yIChjbnQgPSAxOyBjbnQgPCBtYXJrZXJfc2l6ZTsgY250KyspCisJCWlmIChsaW5lW2NudF0gIT0gZmlyc3RjaGFyKQorCQkJcmV0dXJuIDA7CisJLyogbGluZVsxXSB0aHJ1IGxpbmVbbWFya2VyX3NpemUtMV0gYXJlIHNhbWUgYXMgZmlyc3RjaGFyICovCisJaWYgKGxlbiA8IG1hcmtlcl9zaXplICsgMSB8fCAhaXNzcGFjZShsaW5lW21hcmtlcl9zaXplXSkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBjaGVja2RpZmZfY29uc3VtZSh2b2lkICpwcml2LCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3QgY2hlY2tkaWZmX3QgKmRhdGEgPSBwcml2OworCWludCBtYXJrZXJfc2l6ZSA9IGRhdGEtPmNvbmZsaWN0X21hcmtlcl9zaXplOworCWNvbnN0IGNoYXIgKndzID0gZGlmZl9nZXRfY29sb3IoZGF0YS0+by0+dXNlX2NvbG9yLCBESUZGX1dISVRFU1BBQ0UpOworCWNvbnN0IGNoYXIgKnJlc2V0ID0gZGlmZl9nZXRfY29sb3IoZGF0YS0+by0+dXNlX2NvbG9yLCBESUZGX1JFU0VUKTsKKwljb25zdCBjaGFyICpzZXQgPSBkaWZmX2dldF9jb2xvcihkYXRhLT5vLT51c2VfY29sb3IsIERJRkZfRklMRV9ORVcpOworCWNoYXIgKmVycjsKKwljb25zdCBjaGFyICpsaW5lX3ByZWZpeDsKKworCWFzc2VydChkYXRhLT5vKTsKKwlsaW5lX3ByZWZpeCA9IGRpZmZfbGluZV9wcmVmaXgoZGF0YS0+byk7CisKKwlpZiAobGluZVswXSA9PSAnKycpIHsKKwkJdW5zaWduZWQgYmFkOworCQlkYXRhLT5saW5lbm8rKzsKKwkJaWYgKGlzX2NvbmZsaWN0X21hcmtlcihsaW5lICsgMSwgbWFya2VyX3NpemUsIGxlbiAtIDEpKSB7CisJCQlkYXRhLT5zdGF0dXMgfD0gMTsKKwkJCWZwcmludGYoZGF0YS0+by0+ZmlsZSwKKwkJCQkiJXMlczolZDogbGVmdG92ZXIgY29uZmxpY3QgbWFya2VyXG4iLAorCQkJCWxpbmVfcHJlZml4LCBkYXRhLT5maWxlbmFtZSwgZGF0YS0+bGluZW5vKTsKKwkJfQorCQliYWQgPSB3c19jaGVjayhsaW5lICsgMSwgbGVuIC0gMSwgZGF0YS0+d3NfcnVsZSk7CisJCWlmICghYmFkKQorCQkJcmV0dXJuOworCQlkYXRhLT5zdGF0dXMgfD0gYmFkOworCQllcnIgPSB3aGl0ZXNwYWNlX2Vycm9yX3N0cmluZyhiYWQpOworCQlmcHJpbnRmKGRhdGEtPm8tPmZpbGUsICIlcyVzOiVkOiAlcy5cbiIsCisJCQlsaW5lX3ByZWZpeCwgZGF0YS0+ZmlsZW5hbWUsIGRhdGEtPmxpbmVubywgZXJyKTsKKwkJZnJlZShlcnIpOworCQllbWl0X2xpbmUoZGF0YS0+bywgc2V0LCByZXNldCwgbGluZSwgMSk7CisJCXdzX2NoZWNrX2VtaXQobGluZSArIDEsIGxlbiAtIDEsIGRhdGEtPndzX3J1bGUsCisJCQkgICAgICBkYXRhLT5vLT5maWxlLCBzZXQsIHJlc2V0LCB3cyk7CisJfSBlbHNlIGlmIChsaW5lWzBdID09ICcgJykgeworCQlkYXRhLT5saW5lbm8rKzsKKwl9IGVsc2UgaWYgKGxpbmVbMF0gPT0gJ0AnKSB7CisJCWNoYXIgKnBsdXMgPSBzdHJjaHIobGluZSwgJysnKTsKKwkJaWYgKHBsdXMpCisJCQlkYXRhLT5saW5lbm8gPSBzdHJ0b2wocGx1cywgTlVMTCwgMTApIC0gMTsKKwkJZWxzZQorCQkJZGllKCJpbnZhbGlkIGRpZmYiKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICpkZWZsYXRlX2l0KGNoYXIgKmRhdGEsCisJCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgdW5zaWduZWQgbG9uZyAqcmVzdWx0X3NpemUpCit7CisJaW50IGJvdW5kOworCXVuc2lnbmVkIGNoYXIgKmRlZmxhdGVkOworCWdpdF96c3RyZWFtIHN0cmVhbTsKKworCWdpdF9kZWZsYXRlX2luaXQoJnN0cmVhbSwgemxpYl9jb21wcmVzc2lvbl9sZXZlbCk7CisJYm91bmQgPSBnaXRfZGVmbGF0ZV9ib3VuZCgmc3RyZWFtLCBzaXplKTsKKwlkZWZsYXRlZCA9IHhtYWxsb2MoYm91bmQpOworCXN0cmVhbS5uZXh0X291dCA9IGRlZmxhdGVkOworCXN0cmVhbS5hdmFpbF9vdXQgPSBib3VuZDsKKworCXN0cmVhbS5uZXh0X2luID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOworCXN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJd2hpbGUgKGdpdF9kZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKSA9PSBaX09LKQorCQk7IC8qIG5vdGhpbmcgKi8KKwlnaXRfZGVmbGF0ZV9lbmQoJnN0cmVhbSk7CisJKnJlc3VsdF9zaXplID0gc3RyZWFtLnRvdGFsX291dDsKKwlyZXR1cm4gZGVmbGF0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGVtaXRfYmluYXJ5X2RpZmZfYm9keShGSUxFICpmaWxlLCBtbWZpbGVfdCAqb25lLCBtbWZpbGVfdCAqdHdvLAorCQkJCSAgY29uc3QgY2hhciAqcHJlZml4KQoreworCXZvaWQgKmNwOworCXZvaWQgKmRlbHRhOworCXZvaWQgKmRlZmxhdGVkOworCXZvaWQgKmRhdGE7CisJdW5zaWduZWQgbG9uZyBvcmlnX3NpemU7CisJdW5zaWduZWQgbG9uZyBkZWx0YV9zaXplOworCXVuc2lnbmVkIGxvbmcgZGVmbGF0ZV9zaXplOworCXVuc2lnbmVkIGxvbmcgZGF0YV9zaXplOworCisJLyogV2UgY291bGQgZG8gZGVmbGF0ZWQgZGVsdGEsIG9yIHdlIGNvdWxkIGRvIGp1c3QgZGVmbGF0ZWQgdHdvLAorCSAqIHdoaWNoZXZlciBpcyBzbWFsbGVyLgorCSAqLworCWRlbHRhID0gTlVMTDsKKwlkZWZsYXRlZCA9IGRlZmxhdGVfaXQodHdvLT5wdHIsIHR3by0+c2l6ZSwgJmRlZmxhdGVfc2l6ZSk7CisJaWYgKG9uZS0+c2l6ZSAmJiB0d28tPnNpemUpIHsKKwkJZGVsdGEgPSBkaWZmX2RlbHRhKG9uZS0+cHRyLCBvbmUtPnNpemUsCisJCQkJICAgdHdvLT5wdHIsIHR3by0+c2l6ZSwKKwkJCQkgICAmZGVsdGFfc2l6ZSwgZGVmbGF0ZV9zaXplKTsKKwkJaWYgKGRlbHRhKSB7CisJCQl2b2lkICp0b19mcmVlID0gZGVsdGE7CisJCQlvcmlnX3NpemUgPSBkZWx0YV9zaXplOworCQkJZGVsdGEgPSBkZWZsYXRlX2l0KGRlbHRhLCBkZWx0YV9zaXplLCAmZGVsdGFfc2l6ZSk7CisJCQlmcmVlKHRvX2ZyZWUpOworCQl9CisJfQorCisJaWYgKGRlbHRhICYmIGRlbHRhX3NpemUgPCBkZWZsYXRlX3NpemUpIHsKKwkJZnByaW50ZihmaWxlLCAiJXNkZWx0YSAlbHVcbiIsIHByZWZpeCwgb3JpZ19zaXplKTsKKwkJZnJlZShkZWZsYXRlZCk7CisJCWRhdGEgPSBkZWx0YTsKKwkJZGF0YV9zaXplID0gZGVsdGFfc2l6ZTsKKwl9CisJZWxzZSB7CisJCWZwcmludGYoZmlsZSwgIiVzbGl0ZXJhbCAlbHVcbiIsIHByZWZpeCwgdHdvLT5zaXplKTsKKwkJZnJlZShkZWx0YSk7CisJCWRhdGEgPSBkZWZsYXRlZDsKKwkJZGF0YV9zaXplID0gZGVmbGF0ZV9zaXplOworCX0KKworCS8qIGVtaXQgZGF0YSBlbmNvZGVkIGluIGJhc2U4NSAqLworCWNwID0gZGF0YTsKKwl3aGlsZSAoZGF0YV9zaXplKSB7CisJCWludCBieXRlcyA9ICg1MiA8IGRhdGFfc2l6ZSkgPyA1MiA6IGRhdGFfc2l6ZTsKKwkJY2hhciBsaW5lWzcwXTsKKwkJZGF0YV9zaXplIC09IGJ5dGVzOworCQlpZiAoYnl0ZXMgPD0gMjYpCisJCQlsaW5lWzBdID0gYnl0ZXMgKyAnQScgLSAxOworCQllbHNlCisJCQlsaW5lWzBdID0gYnl0ZXMgLSAyNiArICdhJyAtIDE7CisJCWVuY29kZV84NShsaW5lICsgMSwgY3AsIGJ5dGVzKTsKKwkJY3AgPSAoY2hhciAqKSBjcCArIGJ5dGVzOworCQlmcHJpbnRmKGZpbGUsICIlcyIsIHByZWZpeCk7CisJCWZwdXRzKGxpbmUsIGZpbGUpOworCQlmcHV0YygnXG4nLCBmaWxlKTsKKwl9CisJZnByaW50ZihmaWxlLCAiJXNcbiIsIHByZWZpeCk7CisJZnJlZShkYXRhKTsKK30KKworc3RhdGljIHZvaWQgZW1pdF9iaW5hcnlfZGlmZihGSUxFICpmaWxlLCBtbWZpbGVfdCAqb25lLCBtbWZpbGVfdCAqdHdvLAorCQkJICAgICBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJZnByaW50ZihmaWxlLCAiJXNHSVQgYmluYXJ5IHBhdGNoXG4iLCBwcmVmaXgpOworCWVtaXRfYmluYXJ5X2RpZmZfYm9keShmaWxlLCBvbmUsIHR3bywgcHJlZml4KTsKKwllbWl0X2JpbmFyeV9kaWZmX2JvZHkoZmlsZSwgdHdvLCBvbmUsIHByZWZpeCk7Cit9CisKK2ludCBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWlmIChvbmUtPmlzX2JpbmFyeSA9PSAtMSkgeworCQlkaWZmX2ZpbGVzcGVjX2xvYWRfZHJpdmVyKG9uZSk7CisJCWlmIChvbmUtPmRyaXZlci0+YmluYXJ5ICE9IC0xKQorCQkJb25lLT5pc19iaW5hcnkgPSBvbmUtPmRyaXZlci0+YmluYXJ5OworCQllbHNlIHsKKwkJCWlmICghb25lLT5kYXRhICYmIERJRkZfRklMRV9WQUxJRChvbmUpKQorCQkJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCBDSEVDS19CSU5BUlkpOworCQkJaWYgKG9uZS0+aXNfYmluYXJ5ID09IC0xICYmIG9uZS0+ZGF0YSkKKwkJCQlvbmUtPmlzX2JpbmFyeSA9IGJ1ZmZlcl9pc19iaW5hcnkob25lLT5kYXRhLAorCQkJCQkJb25lLT5zaXplKTsKKwkJCWlmIChvbmUtPmlzX2JpbmFyeSA9PSAtMSkKKwkJCQlvbmUtPmlzX2JpbmFyeSA9IDA7CisJCX0KKwl9CisJcmV0dXJuIG9uZS0+aXNfYmluYXJ5OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lICpkaWZmX2Z1bmNuYW1lX3BhdHRlcm4oc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSkKK3sKKwlkaWZmX2ZpbGVzcGVjX2xvYWRfZHJpdmVyKG9uZSk7CisJcmV0dXJuIG9uZS0+ZHJpdmVyLT5mdW5jbmFtZS5wYXR0ZXJuID8gJm9uZS0+ZHJpdmVyLT5mdW5jbmFtZSA6IE5VTEw7Cit9CisKK3ZvaWQgZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpCit7CisJaWYgKCFvcHRpb25zLT5hX3ByZWZpeCkKKwkJb3B0aW9ucy0+YV9wcmVmaXggPSBhOworCWlmICghb3B0aW9ucy0+Yl9wcmVmaXgpCisJCW9wdGlvbnMtPmJfcHJlZml4ID0gYjsKK30KKworc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZ2V0X3RleHRjb252KHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUpCit7CisJaWYgKCFESUZGX0ZJTEVfVkFMSUQob25lKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlkaWZmX2ZpbGVzcGVjX2xvYWRfZHJpdmVyKG9uZSk7CisJcmV0dXJuIHVzZXJkaWZmX2dldF90ZXh0Y29udihvbmUtPmRyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWx0aW5fZGlmZihjb25zdCBjaGFyICpuYW1lX2EsCisJCQkgY29uc3QgY2hhciAqbmFtZV9iLAorCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bywKKwkJCSBjb25zdCBjaGFyICp4ZnJtX21zZywKKwkJCSBpbnQgbXVzdF9zaG93X2hlYWRlciwKKwkJCSBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJIGludCBjb21wbGV0ZV9yZXdyaXRlKQoreworCW1tZmlsZV90IG1mMSwgbWYyOworCWNvbnN0IGNoYXIgKmxibFsyXTsKKwljaGFyICphX29uZSwgKmJfdHdvOworCWNvbnN0IGNoYXIgKm1ldGEgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9NRVRBSU5GTyk7CisJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9SRVNFVCk7CisJY29uc3QgY2hhciAqYV9wcmVmaXgsICpiX3ByZWZpeDsKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udl9vbmUgPSBOVUxMOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252X3R3byA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBoZWFkZXIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpsaW5lX3ByZWZpeCA9IGRpZmZfbGluZV9wcmVmaXgobyk7CisKKwlpZiAoRElGRl9PUFRfVFNUKG8sIFNVQk1PRFVMRV9MT0cpICYmCisJCQkoIW9uZS0+bW9kZSB8fCBTX0lTR0lUTElOSyhvbmUtPm1vZGUpKSAmJgorCQkJKCF0d28tPm1vZGUgfHwgU19JU0dJVExJTksodHdvLT5tb2RlKSkpIHsKKwkJY29uc3QgY2hhciAqZGVsID0gZGlmZl9nZXRfY29sb3Jfb3B0KG8sIERJRkZfRklMRV9PTEQpOworCQljb25zdCBjaGFyICphZGQgPSBkaWZmX2dldF9jb2xvcl9vcHQobywgRElGRl9GSUxFX05FVyk7CisJCXNob3dfc3VibW9kdWxlX3N1bW1hcnkoby0+ZmlsZSwgb25lLT5wYXRoID8gb25lLT5wYXRoIDogdHdvLT5wYXRoLAorCQkJCWxpbmVfcHJlZml4LAorCQkJCW9uZS0+c2hhMSwgdHdvLT5zaGExLCB0d28tPmRpcnR5X3N1Ym1vZHVsZSwKKwkJCQltZXRhLCBkZWwsIGFkZCwgcmVzZXQpOworCQlyZXR1cm47CisJfQorCisJaWYgKERJRkZfT1BUX1RTVChvLCBBTExPV19URVhUQ09OVikpIHsKKwkJdGV4dGNvbnZfb25lID0gZ2V0X3RleHRjb252KG9uZSk7CisJCXRleHRjb252X3R3byA9IGdldF90ZXh0Y29udih0d28pOworCX0KKworCWRpZmZfc2V0X21uZW1vbmljX3ByZWZpeChvLCAiYS8iLCAiYi8iKTsKKwlpZiAoRElGRl9PUFRfVFNUKG8sIFJFVkVSU0VfRElGRikpIHsKKwkJYV9wcmVmaXggPSBvLT5iX3ByZWZpeDsKKwkJYl9wcmVmaXggPSBvLT5hX3ByZWZpeDsKKwl9IGVsc2UgeworCQlhX3ByZWZpeCA9IG8tPmFfcHJlZml4OworCQliX3ByZWZpeCA9IG8tPmJfcHJlZml4OworCX0KKworCS8qIE5ldmVyIHVzZSBhIG5vbi12YWxpZCBmaWxlbmFtZSBhbnl3aGVyZSBpZiBhdCBhbGwgcG9zc2libGUgKi8KKwluYW1lX2EgPSBESUZGX0ZJTEVfVkFMSUQob25lKSA/IG5hbWVfYSA6IG5hbWVfYjsKKwluYW1lX2IgPSBESUZGX0ZJTEVfVkFMSUQodHdvKSA/IG5hbWVfYiA6IG5hbWVfYTsKKworCWFfb25lID0gcXVvdGVfdHdvKGFfcHJlZml4LCBuYW1lX2EgKyAoKm5hbWVfYSA9PSAnLycpKTsKKwliX3R3byA9IHF1b3RlX3R3byhiX3ByZWZpeCwgbmFtZV9iICsgKCpuYW1lX2IgPT0gJy8nKSk7CisJbGJsWzBdID0gRElGRl9GSUxFX1ZBTElEKG9uZSkgPyBhX29uZSA6ICIvZGV2L251bGwiOworCWxibFsxXSA9IERJRkZfRklMRV9WQUxJRCh0d28pID8gYl90d28gOiAiL2Rldi9udWxsIjsKKwlzdHJidWZfYWRkZigmaGVhZGVyLCAiJXMlc2RpZmYgLS1naXQgJXMgJXMlc1xuIiwgbGluZV9wcmVmaXgsIG1ldGEsIGFfb25lLCBiX3R3bywgcmVzZXQpOworCWlmIChsYmxbMF1bMF0gPT0gJy8nKSB7CisJCS8qIC9kZXYvbnVsbCAqLworCQlzdHJidWZfYWRkZigmaGVhZGVyLCAiJXMlc25ldyBmaWxlIG1vZGUgJTA2byVzXG4iLCBsaW5lX3ByZWZpeCwgbWV0YSwgdHdvLT5tb2RlLCByZXNldCk7CisJCWlmICh4ZnJtX21zZykKKwkJCXN0cmJ1Zl9hZGRzdHIoJmhlYWRlciwgeGZybV9tc2cpOworCQltdXN0X3Nob3dfaGVhZGVyID0gMTsKKwl9CisJZWxzZSBpZiAobGJsWzFdWzBdID09ICcvJykgeworCQlzdHJidWZfYWRkZigmaGVhZGVyLCAiJXMlc2RlbGV0ZWQgZmlsZSBtb2RlICUwNm8lc1xuIiwgbGluZV9wcmVmaXgsIG1ldGEsIG9uZS0+bW9kZSwgcmVzZXQpOworCQlpZiAoeGZybV9tc2cpCisJCQlzdHJidWZfYWRkc3RyKCZoZWFkZXIsIHhmcm1fbXNnKTsKKwkJbXVzdF9zaG93X2hlYWRlciA9IDE7CisJfQorCWVsc2UgeworCQlpZiAob25lLT5tb2RlICE9IHR3by0+bW9kZSkgeworCQkJc3RyYnVmX2FkZGYoJmhlYWRlciwgIiVzJXNvbGQgbW9kZSAlMDZvJXNcbiIsIGxpbmVfcHJlZml4LCBtZXRhLCBvbmUtPm1vZGUsIHJlc2V0KTsKKwkJCXN0cmJ1Zl9hZGRmKCZoZWFkZXIsICIlcyVzbmV3IG1vZGUgJTA2byVzXG4iLCBsaW5lX3ByZWZpeCwgbWV0YSwgdHdvLT5tb2RlLCByZXNldCk7CisJCQltdXN0X3Nob3dfaGVhZGVyID0gMTsKKwkJfQorCQlpZiAoeGZybV9tc2cpCisJCQlzdHJidWZfYWRkc3RyKCZoZWFkZXIsIHhmcm1fbXNnKTsKKworCQkvKgorCQkgKiB3ZSBkbyBub3QgcnVuIGRpZmYgYmV0d2VlbiBkaWZmZXJlbnQga2luZAorCQkgKiBvZiBvYmplY3RzLgorCQkgKi8KKwkJaWYgKChvbmUtPm1vZGUgXiB0d28tPm1vZGUpICYgU19JRk1UKQorCQkJZ290byBmcmVlX2FiX2FuZF9yZXR1cm47CisJCWlmIChjb21wbGV0ZV9yZXdyaXRlICYmCisJCSAgICAodGV4dGNvbnZfb25lIHx8ICFkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShvbmUpKSAmJgorCQkgICAgKHRleHRjb252X3R3byB8fCAhZGlmZl9maWxlc3BlY19pc19iaW5hcnkodHdvKSkpIHsKKwkJCWZwcmludGYoby0+ZmlsZSwgIiVzIiwgaGVhZGVyLmJ1Zik7CisJCQlzdHJidWZfcmVzZXQoJmhlYWRlcik7CisJCQllbWl0X3Jld3JpdGVfZGlmZihuYW1lX2EsIG5hbWVfYiwgb25lLCB0d28sCisJCQkJCQl0ZXh0Y29udl9vbmUsIHRleHRjb252X3R3bywgbyk7CisJCQlvLT5mb3VuZF9jaGFuZ2VzID0gMTsKKwkJCWdvdG8gZnJlZV9hYl9hbmRfcmV0dXJuOworCQl9CisJfQorCisJaWYgKG8tPmlycmV2ZXJzaWJsZV9kZWxldGUgJiYgbGJsWzFdWzBdID09ICcvJykgeworCQlmcHJpbnRmKG8tPmZpbGUsICIlcyIsIGhlYWRlci5idWYpOworCQlzdHJidWZfcmVzZXQoJmhlYWRlcik7CisJCWdvdG8gZnJlZV9hYl9hbmRfcmV0dXJuOworCX0gZWxzZSBpZiAoIURJRkZfT1BUX1RTVChvLCBURVhUKSAmJgorCSAgICAoICghdGV4dGNvbnZfb25lICYmIGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG9uZSkpIHx8CisJICAgICAgKCF0ZXh0Y29udl90d28gJiYgZGlmZl9maWxlc3BlY19pc19iaW5hcnkodHdvKSkgKSkgeworCQlpZiAoIW9uZS0+ZGF0YSAmJiAhdHdvLT5kYXRhICYmCisJCSAgICBTX0lTUkVHKG9uZS0+bW9kZSkgJiYgU19JU1JFRyh0d28tPm1vZGUpICYmCisJCSAgICAhRElGRl9PUFRfVFNUKG8sIEJJTkFSWSkpIHsKKwkJCWlmICghaGFzaGNtcChvbmUtPnNoYTEsIHR3by0+c2hhMSkpIHsKKwkJCQlpZiAobXVzdF9zaG93X2hlYWRlcikKKwkJCQkJZnByaW50ZihvLT5maWxlLCAiJXMiLCBoZWFkZXIuYnVmKTsKKwkJCQlnb3RvIGZyZWVfYWJfYW5kX3JldHVybjsKKwkJCX0KKwkJCWZwcmludGYoby0+ZmlsZSwgIiVzIiwgaGVhZGVyLmJ1Zik7CisJCQlmcHJpbnRmKG8tPmZpbGUsICIlc0JpbmFyeSBmaWxlcyAlcyBhbmQgJXMgZGlmZmVyXG4iLAorCQkJCWxpbmVfcHJlZml4LCBsYmxbMF0sIGxibFsxXSk7CisJCQlnb3RvIGZyZWVfYWJfYW5kX3JldHVybjsKKwkJfQorCQlpZiAoZmlsbF9tbWZpbGUoJm1mMSwgb25lKSA8IDAgfHwgZmlsbF9tbWZpbGUoJm1mMiwgdHdvKSA8IDApCisJCQlkaWUoInVuYWJsZSB0byByZWFkIGZpbGVzIHRvIGRpZmYiKTsKKwkJLyogUXVpdGUgY29tbW9uIGNvbmZ1c2luZyBjYXNlICovCisJCWlmIChtZjEuc2l6ZSA9PSBtZjIuc2l6ZSAmJgorCQkgICAgIW1lbWNtcChtZjEucHRyLCBtZjIucHRyLCBtZjEuc2l6ZSkpIHsKKwkJCWlmIChtdXN0X3Nob3dfaGVhZGVyKQorCQkJCWZwcmludGYoby0+ZmlsZSwgIiVzIiwgaGVhZGVyLmJ1Zik7CisJCQlnb3RvIGZyZWVfYWJfYW5kX3JldHVybjsKKwkJfQorCQlmcHJpbnRmKG8tPmZpbGUsICIlcyIsIGhlYWRlci5idWYpOworCQlzdHJidWZfcmVzZXQoJmhlYWRlcik7CisJCWlmIChESUZGX09QVF9UU1QobywgQklOQVJZKSkKKwkJCWVtaXRfYmluYXJ5X2RpZmYoby0+ZmlsZSwgJm1mMSwgJm1mMiwgbGluZV9wcmVmaXgpOworCQllbHNlCisJCQlmcHJpbnRmKG8tPmZpbGUsICIlc0JpbmFyeSBmaWxlcyAlcyBhbmQgJXMgZGlmZmVyXG4iLAorCQkJCWxpbmVfcHJlZml4LCBsYmxbMF0sIGxibFsxXSk7CisJCW8tPmZvdW5kX2NoYW5nZXMgPSAxOworCX0gZWxzZSB7CisJCS8qIENyYXp5IHhkbCBpbnRlcmZhY2VzLi4gKi8KKwkJY29uc3QgY2hhciAqZGlmZm9wdHMgPSBnZXRlbnYoIkdJVF9ESUZGX09QVFMiKTsKKwkJY29uc3QgY2hhciAqdjsKKwkJeHBwYXJhbV90IHhwcDsKKwkJeGRlbWl0Y29uZl90IHhlY2ZnOworCQlzdHJ1Y3QgZW1pdF9jYWxsYmFjayBlY2JkYXRhOworCQljb25zdCBzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgKnBlOworCisJCWlmIChtdXN0X3Nob3dfaGVhZGVyKSB7CisJCQlmcHJpbnRmKG8tPmZpbGUsICIlcyIsIGhlYWRlci5idWYpOworCQkJc3RyYnVmX3Jlc2V0KCZoZWFkZXIpOworCQl9CisKKwkJbWYxLnNpemUgPSBmaWxsX3RleHRjb252KHRleHRjb252X29uZSwgb25lLCAmbWYxLnB0cik7CisJCW1mMi5zaXplID0gZmlsbF90ZXh0Y29udih0ZXh0Y29udl90d28sIHR3bywgJm1mMi5wdHIpOworCisJCXBlID0gZGlmZl9mdW5jbmFtZV9wYXR0ZXJuKG9uZSk7CisJCWlmICghcGUpCisJCQlwZSA9IGRpZmZfZnVuY25hbWVfcGF0dGVybih0d28pOworCisJCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCQltZW1zZXQoJmVjYmRhdGEsIDAsIHNpemVvZihlY2JkYXRhKSk7CisJCWVjYmRhdGEubGFiZWxfcGF0aCA9IGxibDsKKwkJZWNiZGF0YS5jb2xvcl9kaWZmID0gd2FudF9jb2xvcihvLT51c2VfY29sb3IpOworCQllY2JkYXRhLmZvdW5kX2NoYW5nZXNwID0gJm8tPmZvdW5kX2NoYW5nZXM7CisJCWVjYmRhdGEud3NfcnVsZSA9IHdoaXRlc3BhY2VfcnVsZShuYW1lX2IpOworCQlpZiAoZWNiZGF0YS53c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKQorCQkJY2hlY2tfYmxhbmtfYXRfZW9mKCZtZjEsICZtZjIsICZlY2JkYXRhKTsKKwkJZWNiZGF0YS5vcHQgPSBvOworCQllY2JkYXRhLmhlYWRlciA9IGhlYWRlci5sZW4gPyAmaGVhZGVyIDogTlVMTDsKKwkJeHBwLmZsYWdzID0gby0+eGRsX29wdHM7CisJCXhlY2ZnLmN0eGxlbiA9IG8tPmNvbnRleHQ7CisJCXhlY2ZnLmludGVyaHVua2N0eGxlbiA9IG8tPmludGVyaHVua2NvbnRleHQ7CisJCXhlY2ZnLmZsYWdzID0gWERMX0VNSVRfRlVOQ05BTUVTOworCQlpZiAoRElGRl9PUFRfVFNUKG8sIEZVTkNDT05URVhUKSkKKwkJCXhlY2ZnLmZsYWdzIHw9IFhETF9FTUlUX0ZVTkNDT05URVhUOworCQlpZiAocGUpCisJCQl4ZGlmZl9zZXRfZmluZF9mdW5jKCZ4ZWNmZywgcGUtPnBhdHRlcm4sIHBlLT5jZmxhZ3MpOworCQlpZiAoIWRpZmZvcHRzKQorCQkJOworCQllbHNlIGlmIChza2lwX3ByZWZpeChkaWZmb3B0cywgIi0tdW5pZmllZD0iLCAmdikpCisJCQl4ZWNmZy5jdHhsZW4gPSBzdHJ0b3VsKHYsIE5VTEwsIDEwKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoZGlmZm9wdHMsICItdSIsICZ2KSkKKwkJCXhlY2ZnLmN0eGxlbiA9IHN0cnRvdWwodiwgTlVMTCwgMTApOworCQlpZiAoby0+d29yZF9kaWZmKQorCQkJaW5pdF9kaWZmX3dvcmRzX2RhdGEoJmVjYmRhdGEsIG8sIG9uZSwgdHdvKTsKKwkJaWYgKHhkaV9kaWZmX291dGYoJm1mMSwgJm1mMiwgZm5fb3V0X2NvbnN1bWUsICZlY2JkYXRhLAorCQkJCSAgJnhwcCwgJnhlY2ZnKSkKKwkJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmYgZm9yICVzIiwgb25lLT5wYXRoKTsKKwkJaWYgKG8tPndvcmRfZGlmZikKKwkJCWZyZWVfZGlmZl93b3Jkc19kYXRhKCZlY2JkYXRhKTsKKwkJaWYgKHRleHRjb252X29uZSkKKwkJCWZyZWUobWYxLnB0cik7CisJCWlmICh0ZXh0Y29udl90d28pCisJCQlmcmVlKG1mMi5wdHIpOworCQl4ZGlmZl9jbGVhcl9maW5kX2Z1bmMoJnhlY2ZnKTsKKwl9CisKKyBmcmVlX2FiX2FuZF9yZXR1cm46CisJc3RyYnVmX3JlbGVhc2UoJmhlYWRlcik7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEob25lKTsKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YSh0d28pOworCWZyZWUoYV9vbmUpOworCWZyZWUoYl90d28pOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYnVpbHRpbl9kaWZmc3RhdChjb25zdCBjaGFyICpuYW1lX2EsIGNvbnN0IGNoYXIgKm5hbWVfYiwKKwkJCSAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwKKwkJCSAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bywKKwkJCSAgICAgc3RydWN0IGRpZmZzdGF0X3QgKmRpZmZzdGF0LAorCQkJICAgICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJICAgICBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCkKK3sKKwltbWZpbGVfdCBtZjEsIG1mMjsKKwlzdHJ1Y3QgZGlmZnN0YXRfZmlsZSAqZGF0YTsKKwlpbnQgc2FtZV9jb250ZW50czsKKwlpbnQgY29tcGxldGVfcmV3cml0ZSA9IDA7CisKKwlpZiAoIURJRkZfUEFJUl9VTk1FUkdFRChwKSkgeworCQlpZiAocC0+c3RhdHVzID09IERJRkZfU1RBVFVTX01PRElGSUVEICYmIHAtPnNjb3JlKQorCQkJY29tcGxldGVfcmV3cml0ZSA9IDE7CisJfQorCisJZGF0YSA9IGRpZmZzdGF0X2FkZChkaWZmc3RhdCwgbmFtZV9hLCBuYW1lX2IpOworCWRhdGEtPmlzX2ludGVyZXN0aW5nID0gcC0+c3RhdHVzICE9IERJRkZfU1RBVFVTX1VOS05PV047CisKKwlpZiAoIW9uZSB8fCAhdHdvKSB7CisJCWRhdGEtPmlzX3VubWVyZ2VkID0gMTsKKwkJcmV0dXJuOworCX0KKworCXNhbWVfY29udGVudHMgPSAhaGFzaGNtcChvbmUtPnNoYTEsIHR3by0+c2hhMSk7CisKKwlpZiAoZGlmZl9maWxlc3BlY19pc19iaW5hcnkob25lKSB8fCBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeSh0d28pKSB7CisJCWRhdGEtPmlzX2JpbmFyeSA9IDE7CisJCWlmIChzYW1lX2NvbnRlbnRzKSB7CisJCQlkYXRhLT5hZGRlZCA9IDA7CisJCQlkYXRhLT5kZWxldGVkID0gMDsKKwkJfSBlbHNlIHsKKwkJCWRhdGEtPmFkZGVkID0gZGlmZl9maWxlc3BlY19zaXplKHR3byk7CisJCQlkYXRhLT5kZWxldGVkID0gZGlmZl9maWxlc3BlY19zaXplKG9uZSk7CisJCX0KKwl9CisKKwllbHNlIGlmIChjb21wbGV0ZV9yZXdyaXRlKSB7CisJCWRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCAwKTsKKwkJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyh0d28sIDApOworCQlkYXRhLT5kZWxldGVkID0gY291bnRfbGluZXMob25lLT5kYXRhLCBvbmUtPnNpemUpOworCQlkYXRhLT5hZGRlZCA9IGNvdW50X2xpbmVzKHR3by0+ZGF0YSwgdHdvLT5zaXplKTsKKwl9CisKKwllbHNlIGlmICghc2FtZV9jb250ZW50cykgeworCQkvKiBDcmF6eSB4ZGwgaW50ZXJmYWNlcy4uICovCisJCXhwcGFyYW1fdCB4cHA7CisJCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKworCQlpZiAoZmlsbF9tbWZpbGUoJm1mMSwgb25lKSA8IDAgfHwgZmlsbF9tbWZpbGUoJm1mMiwgdHdvKSA8IDApCisJCQlkaWUoInVuYWJsZSB0byByZWFkIGZpbGVzIHRvIGRpZmYiKTsKKworCQltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCQltZW1zZXQoJnhlY2ZnLCAwLCBzaXplb2YoeGVjZmcpKTsKKwkJeHBwLmZsYWdzID0gby0+eGRsX29wdHM7CisJCXhlY2ZnLmN0eGxlbiA9IG8tPmNvbnRleHQ7CisJCXhlY2ZnLmludGVyaHVua2N0eGxlbiA9IG8tPmludGVyaHVua2NvbnRleHQ7CisJCWlmICh4ZGlfZGlmZl9vdXRmKCZtZjEsICZtZjIsIGRpZmZzdGF0X2NvbnN1bWUsIGRpZmZzdGF0LAorCQkJCSAgJnhwcCwgJnhlY2ZnKSkKKwkJCWRpZSgidW5hYmxlIHRvIGdlbmVyYXRlIGRpZmZzdGF0IGZvciAlcyIsIG9uZS0+cGF0aCk7CisJfQorCisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEob25lKTsKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YSh0d28pOworfQorCitzdGF0aWMgdm9pZCBidWlsdGluX2NoZWNrZGlmZihjb25zdCBjaGFyICpuYW1lX2EsIGNvbnN0IGNoYXIgKm5hbWVfYiwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmF0dHJfcGF0aCwKKwkJCSAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvLAorCQkJICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqbykKK3sKKwltbWZpbGVfdCBtZjEsIG1mMjsKKwlzdHJ1Y3QgY2hlY2tkaWZmX3QgZGF0YTsKKworCWlmICghdHdvKQorCQlyZXR1cm47CisKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJZGF0YS5maWxlbmFtZSA9IG5hbWVfYiA/IG5hbWVfYiA6IG5hbWVfYTsKKwlkYXRhLmxpbmVubyA9IDA7CisJZGF0YS5vID0gbzsKKwlkYXRhLndzX3J1bGUgPSB3aGl0ZXNwYWNlX3J1bGUoYXR0cl9wYXRoKTsKKwlkYXRhLmNvbmZsaWN0X21hcmtlcl9zaXplID0gbGxfbWVyZ2VfbWFya2VyX3NpemUoYXR0cl9wYXRoKTsKKworCWlmIChmaWxsX21tZmlsZSgmbWYxLCBvbmUpIDwgMCB8fCBmaWxsX21tZmlsZSgmbWYyLCB0d28pIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBmaWxlcyB0byBkaWZmIik7CisKKwkvKgorCSAqIEFsbCB0aGUgb3RoZXIgY29kZXBhdGhzIGNoZWNrIGJvdGggc2lkZXMsIGJ1dCBub3QgY2hlY2tpbmcKKwkgKiB0aGUgIm9sZCIgc2lkZSBoZXJlIGlzIGRlbGliZXJhdGUuICBXZSBhcmUgY2hlY2tpbmcgdGhlIG5ld2x5CisJICogaW50cm9kdWNlZCBjaGFuZ2VzLCBhbmQgYXMgbG9uZyBhcyB0aGUgIm5ldyIgc2lkZSBpcyB0ZXh0LCB3ZQorCSAqIGNhbiBhbmQgc2hvdWxkIGNoZWNrIHdoYXQgaXQgaW50cm9kdWNlcy4KKwkgKi8KKwlpZiAoZGlmZl9maWxlc3BlY19pc19iaW5hcnkodHdvKSkKKwkJZ290byBmcmVlX2FuZF9yZXR1cm47CisJZWxzZSB7CisJCS8qIENyYXp5IHhkbCBpbnRlcmZhY2VzLi4gKi8KKwkJeHBwYXJhbV90IHhwcDsKKwkJeGRlbWl0Y29uZl90IHhlY2ZnOworCisJCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCQl4ZWNmZy5jdHhsZW4gPSAxOyAvKiBhdCBsZWFzdCBvbmUgY29udGV4dCBsaW5lICovCisJCXhwcC5mbGFncyA9IDA7CisJCWlmICh4ZGlfZGlmZl9vdXRmKCZtZjEsICZtZjIsIGNoZWNrZGlmZl9jb25zdW1lLCAmZGF0YSwKKwkJCQkgICZ4cHAsICZ4ZWNmZykpCisJCQlkaWUoInVuYWJsZSB0byBnZW5lcmF0ZSBjaGVja2RpZmYgZm9yICVzIiwgb25lLT5wYXRoKTsKKworCQlpZiAoZGF0YS53c19ydWxlICYgV1NfQkxBTktfQVRfRU9GKSB7CisJCQlzdHJ1Y3QgZW1pdF9jYWxsYmFjayBlY2JkYXRhOworCQkJaW50IGJsYW5rX2F0X2VvZjsKKworCQkJZWNiZGF0YS53c19ydWxlID0gZGF0YS53c19ydWxlOworCQkJY2hlY2tfYmxhbmtfYXRfZW9mKCZtZjEsICZtZjIsICZlY2JkYXRhKTsKKwkJCWJsYW5rX2F0X2VvZiA9IGVjYmRhdGEuYmxhbmtfYXRfZW9mX2luX3Bvc3RpbWFnZTsKKworCQkJaWYgKGJsYW5rX2F0X2VvZikgeworCQkJCXN0YXRpYyBjaGFyICplcnI7CisJCQkJaWYgKCFlcnIpCisJCQkJCWVyciA9IHdoaXRlc3BhY2VfZXJyb3Jfc3RyaW5nKFdTX0JMQU5LX0FUX0VPRik7CisJCQkJZnByaW50ZihvLT5maWxlLCAiJXM6JWQ6ICVzLlxuIiwKKwkJCQkJZGF0YS5maWxlbmFtZSwgYmxhbmtfYXRfZW9mLCBlcnIpOworCQkJCWRhdGEuc3RhdHVzID0gMTsgLyogcmVwb3J0IGVycm9ycyAqLworCQkJfQorCQl9CisJfQorIGZyZWVfYW5kX3JldHVybjoKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShvbmUpOworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHR3byk7CisJaWYgKGRhdGEuc3RhdHVzKQorCQlESUZGX09QVF9TRVQobywgQ0hFQ0tfRkFJTEVEKTsKK30KKworc3RydWN0IGRpZmZfZmlsZXNwZWMgKmFsbG9jX2ZpbGVzcGVjKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IG5hbWVsZW4gPSBzdHJsZW4ocGF0aCk7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNwZWMgPSB4bWFsbG9jKHNpemVvZigqc3BlYykgKyBuYW1lbGVuICsgMSk7CisKKwltZW1zZXQoc3BlYywgMCwgc2l6ZW9mKCpzcGVjKSk7CisJc3BlYy0+cGF0aCA9IChjaGFyICopKHNwZWMgKyAxKTsKKwltZW1jcHkoc3BlYy0+cGF0aCwgcGF0aCwgbmFtZWxlbisxKTsKKwlzcGVjLT5jb3VudCA9IDE7CisJc3BlYy0+aXNfYmluYXJ5ID0gLTE7CisJcmV0dXJuIHNwZWM7Cit9CisKK3ZvaWQgZnJlZV9maWxlc3BlYyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3BlYykKK3sKKwlpZiAoIS0tc3BlYy0+Y291bnQpIHsKKwkJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEoc3BlYyk7CisJCWZyZWUoc3BlYyk7CisJfQorfQorCit2b2lkIGZpbGxfZmlsZXNwZWMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNwZWMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCSAgIGludCBzaGExX3ZhbGlkLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQoreworCWlmIChtb2RlKSB7CisJCXNwZWMtPm1vZGUgPSBjYW5vbl9tb2RlKG1vZGUpOworCQloYXNoY3B5KHNwZWMtPnNoYTEsIHNoYTEpOworCQlzcGVjLT5zaGExX3ZhbGlkID0gc2hhMV92YWxpZDsKKwl9Cit9CisKKy8qCisgKiBHaXZlbiBhIG5hbWUgYW5kIHNoYTEgcGFpciwgaWYgdGhlIGluZGV4IHRlbGxzIHVzIHRoZSBmaWxlIGluCisgKiB0aGUgd29yayB0cmVlIGhhcyB0aGF0IG9iamVjdCBjb250ZW50cywgcmV0dXJuIHRydWUsIHNvIHRoYXQKKyAqIHByZXBhcmVfdGVtcF9maWxlKCkgZG9lcyBub3QgaGF2ZSB0byBpbmZsYXRlIGFuZCBleHRyYWN0LgorICovCitzdGF0aWMgaW50IHJldXNlX3dvcmt0cmVlX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IHdhbnRfZmlsZSkKK3sKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCXN0cnVjdCBzdGF0IHN0OworCWludCBwb3MsIGxlbjsKKworCS8qCisJICogV2UgZG8gbm90IHJlYWQgdGhlIGNhY2hlIG91cnNlbHZlcyBoZXJlLCBiZWNhdXNlIHRoZQorCSAqIGJlbmNobWFyayB3aXRoIG15IHByZXZpb3VzIHZlcnNpb24gdGhhdCBhbHdheXMgcmVhZHMgY2FjaGUKKwkgKiBzaG93cyB0aGF0IGl0IG1ha2VzIHRoaW5ncyB3b3JzZSBmb3IgZGlmZi10cmVlIGNvbXBhcmluZworCSAqIHR3byBsaW51eC0yLjYga2VybmVsIHRyZWVzIGluIGFuIGFscmVhZHkgY2hlY2tlZCBvdXQgd29yaworCSAqIHRyZWUuICBUaGlzIGlzIGJlY2F1c2UgbW9zdCBkaWZmLXRyZWUgY29tcGFyaXNvbnMgZGVhbCB3aXRoCisJICogb25seSBhIHNtYWxsIG51bWJlciBvZiBmaWxlcywgd2hpbGUgcmVhZGluZyB0aGUgY2FjaGUgaXMKKwkgKiBleHBlbnNpdmUgZm9yIGEgbGFyZ2UgcHJvamVjdCwgYW5kIGl0cyBjb3N0IG91dHdlaWdocyB0aGUKKwkgKiBzYXZpbmdzIHdlIGdldCBieSBub3QgaW5mbGF0aW5nIHRoZSBvYmplY3QgdG8gYSB0ZW1wb3JhcnkKKwkgKiBmaWxlLiAgUHJhY3RpY2FsbHksIHRoaXMgY29kZSBvbmx5IGhlbHBzIHdoZW4gd2UgYXJlIHVzZWQKKwkgKiBieSBkaWZmLWNhY2hlIC0tY2FjaGVkLCB3aGljaCBkb2VzIHJlYWQgdGhlIGNhY2hlIGJlZm9yZQorCSAqIGNhbGxpbmcgdXMuCisJICovCisJaWYgKCFhY3RpdmVfY2FjaGUpCisJCXJldHVybiAwOworCisJLyogV2Ugd2FudCB0byBhdm9pZCB0aGUgd29ya2luZyBkaXJlY3RvcnkgaWYgb3VyIGNhbGxlcgorCSAqIGRvZXNuJ3QgbmVlZCB0aGUgZGF0YSBpbiBhIG5vcm1hbCBmaWxlLCB0aGlzIHN5c3RlbQorCSAqIGlzIHJhdGhlciBzbG93IHdpdGggaXRzIHN0YXQvb3Blbi9tbWFwL2Nsb3NlIHN5c2NhbGxzLAorCSAqIGFuZCB0aGUgb2JqZWN0IGlzIGNvbnRhaW5lZCBpbiBhIHBhY2sgZmlsZS4gIFRoZSBwYWNrCisJICogaXMgcHJvYmFibHkgYWxyZWFkeSBvcGVuIGFuZCB3aWxsIGJlIGZhc3RlciB0byBvYnRhaW4KKwkgKiB0aGUgZGF0YSB0aHJvdWdoIHRoYW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiAgTG9vc2UKKwkgKiBvYmplY3RzIGhvd2V2ZXIgd291bGQgdGVuZCB0byBiZSBzbG93ZXIgYXMgdGhleSBuZWVkCisJICogdG8gYmUgaW5kaXZpZHVhbGx5IG9wZW5lZCBhbmQgaW5mbGF0ZWQuCisJICovCisJaWYgKCFGQVNUX1dPUktJTkdfRElSRUNUT1JZICYmICF3YW50X2ZpbGUgJiYgaGFzX3NoYTFfcGFjayhzaGExKSkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBzdHJsZW4obmFtZSk7CisJcG9zID0gY2FjaGVfbmFtZV9wb3MobmFtZSwgbGVuKTsKKwlpZiAocG9zIDwgMCkKKwkJcmV0dXJuIDA7CisJY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKworCS8qCisJICogVGhpcyBpcyBub3QgdGhlIHNoYTEgd2UgYXJlIGxvb2tpbmcgZm9yLCBvcgorCSAqIHVucmV1c2FibGUgYmVjYXVzZSBpdCBpcyBub3QgYSByZWd1bGFyIGZpbGUuCisJICovCisJaWYgKGhhc2hjbXAoc2hhMSwgY2UtPnNoYTEpIHx8ICFTX0lTUkVHKGNlLT5jZV9tb2RlKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIElmIGNlIGlzIG1hcmtlZCBhcyAiYXNzdW1lIHVuY2hhbmdlZCIsIHRoZXJlIGlzIG5vCisJICogZ3VhcmFudGVlIHRoYXQgd29yayB0cmVlIG1hdGNoZXMgd2hhdCB3ZSBhcmUgbG9va2luZyBmb3IuCisJICovCisJaWYgKChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkgfHwgY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiBjZSBtYXRjaGVzIHRoZSBmaWxlIGluIHRoZSB3b3JrIHRyZWUsIHdlIGNhbiByZXVzZSBpdC4KKwkgKi8KKwlpZiAoY2VfdXB0b2RhdGUoY2UpIHx8CisJICAgICghbHN0YXQobmFtZSwgJnN0KSAmJiAhY2VfbWF0Y2hfc3RhdChjZSwgJnN0LCAwKSkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9wb3B1bGF0ZV9naXRsaW5rKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzLCBpbnQgc2l6ZV9vbmx5KQoreworCWludCBsZW47CisJY2hhciAqZGF0YSA9IHhtYWxsb2MoMTAwKSwgKmRpcnR5ID0gIiI7CisKKwkvKiBBcmUgd2UgbG9va2luZyBhdCB0aGUgd29yayB0cmVlPyAqLworCWlmIChzLT5kaXJ0eV9zdWJtb2R1bGUpCisJCWRpcnR5ID0gIi1kaXJ0eSI7CisKKwlsZW4gPSBzbnByaW50ZihkYXRhLCAxMDAsCisJCSAgICAgICAiU3VicHJvamVjdCBjb21taXQgJXMlc1xuIiwgc2hhMV90b19oZXgocy0+c2hhMSksIGRpcnR5KTsKKwlzLT5kYXRhID0gZGF0YTsKKwlzLT5zaXplID0gbGVuOworCXMtPnNob3VsZF9mcmVlID0gMTsKKwlpZiAoc2l6ZV9vbmx5KSB7CisJCXMtPmRhdGEgPSBOVUxMOworCQlmcmVlKGRhdGEpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdoaWxlIGRvaW5nIHJlbmFtZSBkZXRlY3Rpb24gYW5kIHBpY2theGUgb3BlcmF0aW9uLCB3ZSBtYXkgbmVlZCB0bworICogZ3JhYiB0aGUgZGF0YSBmb3IgdGhlIGJsb2IgKG9yIGZpbGUpIGZvciBvdXIgb3duIGluLWNvcmUgY29tcGFyaXNvbi4KKyAqIGRpZmZfZmlsZXNwZWMgaGFzIGRhdGEgYW5kIHNpemUgZmllbGRzIGZvciB0aGlzIHB1cnBvc2UuCisgKi8KK2ludCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IHNpemVfb25seSA9IGZsYWdzICYgQ0hFQ0tfU0laRV9PTkxZOworCWludCBlcnIgPSAwOworCS8qCisJICogZGVtb3RlIEZBSUwgdG8gV0FSTiB0byBhbGxvdyBpbnNwZWN0aW5nIHRoZSBzaXR1YXRpb24KKwkgKiBpbnN0ZWFkIG9mIHJlZnVzaW5nLgorCSAqLworCWVudW0gc2FmZV9jcmxmIGNybGZfd2FybiA9IChzYWZlX2NybGYgPT0gU0FGRV9DUkxGX0ZBSUwKKwkJCQkgICAgPyBTQUZFX0NSTEZfV0FSTgorCQkJCSAgICA6IHNhZmVfY3JsZik7CisKKwlpZiAoIURJRkZfRklMRV9WQUxJRChzKSkKKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogYXNraW5nIHRvIHBvcHVsYXRlIGludmFsaWQgZmlsZS4iKTsKKwlpZiAoU19JU0RJUihzLT5tb2RlKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHMtPmRhdGEpCisJCXJldHVybiAwOworCisJaWYgKHNpemVfb25seSAmJiAwIDwgcy0+c2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoU19JU0dJVExJTksocy0+bW9kZSkpCisJCXJldHVybiBkaWZmX3BvcHVsYXRlX2dpdGxpbmsocywgc2l6ZV9vbmx5KTsKKworCWlmICghcy0+c2hhMV92YWxpZCB8fAorCSAgICByZXVzZV93b3JrdHJlZV9maWxlKHMtPnBhdGgsIHMtPnNoYTEsIDApKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdGF0IHN0OworCQlpbnQgZmQ7CisKKwkJaWYgKGxzdGF0KHMtPnBhdGgsICZzdCkgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJCQllcnJfZW1wdHk6CisJCQkJZXJyID0gLTE7CisJCQllbXB0eToKKwkJCQlzLT5kYXRhID0gKGNoYXIgKikiIjsKKwkJCQlzLT5zaXplID0gMDsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CisJCXMtPnNpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCQlpZiAoIXMtPnNpemUpCisJCQlnb3RvIGVtcHR5OworCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZzYiwgcy0+cGF0aCwgcy0+c2l6ZSkpCisJCQkJZ290byBlcnJfZW1wdHk7CisJCQlzLT5zaXplID0gc2IubGVuOworCQkJcy0+ZGF0YSA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwkJCXMtPnNob3VsZF9mcmVlID0gMTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChzaXplX29ubHkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKChmbGFncyAmIENIRUNLX0JJTkFSWSkgJiYKKwkJICAgIHMtPnNpemUgPiBiaWdfZmlsZV90aHJlc2hvbGQgJiYgcy0+aXNfYmluYXJ5ID09IC0xKSB7CisJCQlzLT5pc19iaW5hcnkgPSAxOworCQkJcmV0dXJuIDA7CisJCX0KKwkJZmQgPSBvcGVuKHMtPnBhdGgsIE9fUkRPTkxZKTsKKwkJaWYgKGZkIDwgMCkKKwkJCWdvdG8gZXJyX2VtcHR5OworCQlzLT5kYXRhID0geG1tYXAoTlVMTCwgcy0+c2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCQljbG9zZShmZCk7CisJCXMtPnNob3VsZF9tdW5tYXAgPSAxOworCisJCS8qCisJCSAqIENvbnZlcnQgZnJvbSB3b3JraW5nIHRyZWUgZm9ybWF0IHRvIGNhbm9uaWNhbCBnaXQgZm9ybWF0CisJCSAqLworCQlpZiAoY29udmVydF90b19naXQocy0+cGF0aCwgcy0+ZGF0YSwgcy0+c2l6ZSwgJmJ1ZiwgY3JsZl93YXJuKSkgeworCQkJc2l6ZV90IHNpemUgPSAwOworCQkJbXVubWFwKHMtPmRhdGEsIHMtPnNpemUpOworCQkJcy0+c2hvdWxkX211bm1hcCA9IDA7CisJCQlzLT5kYXRhID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc2l6ZSk7CisJCQlzLT5zaXplID0gc2l6ZTsKKwkJCXMtPnNob3VsZF9mcmVlID0gMTsKKwkJfQorCX0KKwllbHNlIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQlpZiAoc2l6ZV9vbmx5IHx8IChmbGFncyAmIENIRUNLX0JJTkFSWSkpIHsKKwkJCXR5cGUgPSBzaGExX29iamVjdF9pbmZvKHMtPnNoYTEsICZzLT5zaXplKTsKKwkJCWlmICh0eXBlIDwgMCkKKwkJCQlkaWUoInVuYWJsZSB0byByZWFkICVzIiwgc2hhMV90b19oZXgocy0+c2hhMSkpOworCQkJaWYgKHNpemVfb25seSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmIChzLT5zaXplID4gYmlnX2ZpbGVfdGhyZXNob2xkICYmIHMtPmlzX2JpbmFyeSA9PSAtMSkgeworCQkJCXMtPmlzX2JpbmFyeSA9IDE7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJcy0+ZGF0YSA9IHJlYWRfc2hhMV9maWxlKHMtPnNoYTEsICZ0eXBlLCAmcy0+c2l6ZSk7CisJCWlmICghcy0+ZGF0YSkKKwkJCWRpZSgidW5hYmxlIHRvIHJlYWQgJXMiLCBzaGExX3RvX2hleChzLT5zaGExKSk7CisJCXMtPnNob3VsZF9mcmVlID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2Ioc3RydWN0IGRpZmZfZmlsZXNwZWMgKnMpCit7CisJaWYgKHMtPnNob3VsZF9mcmVlKQorCQlmcmVlKHMtPmRhdGEpOworCWVsc2UgaWYgKHMtPnNob3VsZF9tdW5tYXApCisJCW11bm1hcChzLT5kYXRhLCBzLT5zaXplKTsKKworCWlmIChzLT5zaG91bGRfZnJlZSB8fCBzLT5zaG91bGRfbXVubWFwKSB7CisJCXMtPnNob3VsZF9mcmVlID0gcy0+c2hvdWxkX211bm1hcCA9IDA7CisJCXMtPmRhdGEgPSBOVUxMOworCX0KK30KKwordm9pZCBkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqcykKK3sKKwlkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYihzKTsKKwlmcmVlKHMtPmNudF9kYXRhKTsKKwlzLT5jbnRfZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBfdGVtcF9ibG9iKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBkaWZmX3RlbXBmaWxlICp0ZW1wLAorCQkJICAgdm9pZCAqYmxvYiwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICBpbnQgbW9kZSkKK3sKKwlpbnQgZmQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHRlbXBsYXRlID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aF9kdXAgPSB4c3RyZHVwKHBhdGgpOworCWNvbnN0IGNoYXIgKmJhc2UgPSBiYXNlbmFtZShwYXRoX2R1cCk7CisKKwkvKiBHZW5lcmF0ZSAiWFhYWFhYX2Jhc2VuYW1lLmV4dCIgKi8KKwlzdHJidWZfYWRkc3RyKCZ0ZW1wbGF0ZSwgIlhYWFhYWF8iKTsKKwlzdHJidWZfYWRkc3RyKCZ0ZW1wbGF0ZSwgYmFzZSk7CisKKwlmZCA9IG1rc190ZW1wZmlsZV90cygmdGVtcC0+dGVtcGZpbGUsIHRlbXBsYXRlLmJ1Ziwgc3RybGVuKGJhc2UpICsgMSk7CisJaWYgKGZkIDwgMCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIHRlbXAtZmlsZSIpOworCWlmIChjb252ZXJ0X3RvX3dvcmtpbmdfdHJlZShwYXRoLAorCQkJKGNvbnN0IGNoYXIgKilibG9iLCAoc2l6ZV90KXNpemUsICZidWYpKSB7CisJCWJsb2IgPSBidWYuYnVmOworCQlzaXplID0gYnVmLmxlbjsKKwl9CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJsb2IsIHNpemUpICE9IHNpemUpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHdyaXRlIHRlbXAtZmlsZSIpOworCWNsb3NlX3RlbXBmaWxlKCZ0ZW1wLT50ZW1wZmlsZSk7CisJdGVtcC0+bmFtZSA9IGdldF90ZW1wZmlsZV9wYXRoKCZ0ZW1wLT50ZW1wZmlsZSk7CisJc2hhMV90b19oZXhfcih0ZW1wLT5oZXgsIHNoYTEpOworCXhzbnByaW50Zih0ZW1wLT5tb2RlLCBzaXplb2YodGVtcC0+bW9kZSksICIlMDZvIiwgbW9kZSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnRlbXBsYXRlKTsKKwlmcmVlKHBhdGhfZHVwKTsKK30KKworc3RhdGljIHN0cnVjdCBkaWZmX3RlbXBmaWxlICpwcmVwYXJlX3RlbXBfZmlsZShjb25zdCBjaGFyICpuYW1lLAorCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCXN0cnVjdCBkaWZmX3RlbXBmaWxlICp0ZW1wID0gY2xhaW1fZGlmZl90ZW1wZmlsZSgpOworCisJaWYgKCFESUZGX0ZJTEVfVkFMSUQob25lKSkgeworCW5vdF9hX3ZhbGlkX2ZpbGU6CisJCS8qIEEgJy0nIGVudHJ5IHByb2R1Y2VzIHRoaXMgZm9yIGZpbGUtMiwgYW5kCisJCSAqIGEgJysnIGVudHJ5IHByb2R1Y2VzIHRoaXMgZm9yIGZpbGUtMS4KKwkJICovCisJCXRlbXAtPm5hbWUgPSAiL2Rldi9udWxsIjsKKwkJeHNucHJpbnRmKHRlbXAtPmhleCwgc2l6ZW9mKHRlbXAtPmhleCksICIuIik7CisJCXhzbnByaW50Zih0ZW1wLT5tb2RlLCBzaXplb2YodGVtcC0+bW9kZSksICIuIik7CisJCXJldHVybiB0ZW1wOworCX0KKworCWlmICghU19JU0dJVExJTksob25lLT5tb2RlKSAmJgorCSAgICAoIW9uZS0+c2hhMV92YWxpZCB8fAorCSAgICAgcmV1c2Vfd29ya3RyZWVfZmlsZShuYW1lLCBvbmUtPnNoYTEsIDEpKSkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKGxzdGF0KG5hbWUsICZzdCkgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCWdvdG8gbm90X2FfdmFsaWRfZmlsZTsKKwkJCWRpZV9lcnJubygic3RhdCglcykiLCBuYW1lKTsKKwkJfQorCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQkJaWYgKHN0cmJ1Zl9yZWFkbGluaygmc2IsIG5hbWUsIHN0LnN0X3NpemUpIDwgMCkKKwkJCQlkaWVfZXJybm8oInJlYWRsaW5rKCVzKSIsIG5hbWUpOworCQkJcHJlcF90ZW1wX2Jsb2IobmFtZSwgdGVtcCwgc2IuYnVmLCBzYi5sZW4sCisJCQkJICAgICAgIChvbmUtPnNoYTFfdmFsaWQgPworCQkJCQlvbmUtPnNoYTEgOiBudWxsX3NoYTEpLAorCQkJCSAgICAgICAob25lLT5zaGExX3ZhbGlkID8KKwkJCQkJb25lLT5tb2RlIDogU19JRkxOSykpOworCQkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJfQorCQllbHNlIHsKKwkJCS8qIHdlIGNhbiBib3Jyb3cgZnJvbSB0aGUgZmlsZSBpbiB0aGUgd29yayB0cmVlICovCisJCQl0ZW1wLT5uYW1lID0gbmFtZTsKKwkJCWlmICghb25lLT5zaGExX3ZhbGlkKQorCQkJCXNoYTFfdG9faGV4X3IodGVtcC0+aGV4LCBudWxsX3NoYTEpOworCQkJZWxzZQorCQkJCXNoYTFfdG9faGV4X3IodGVtcC0+aGV4LCBvbmUtPnNoYTEpOworCQkJLyogRXZlbiB0aG91Z2ggd2UgbWF5IHNvbWV0aW1lcyBib3Jyb3cgdGhlCisJCQkgKiBjb250ZW50cyBmcm9tIHRoZSB3b3JrIHRyZWUsIHdlIGFsd2F5cyB3YW50CisJCQkgKiBvbmUtPm1vZGUuICBtb2RlIGlzIHRydXN0d29ydGh5IGV2ZW4gd2hlbgorCQkJICogIShvbmUtPnNoYTFfdmFsaWQpLCBhcyBsb25nIGFzCisJCQkgKiBESUZGX0ZJTEVfVkFMSUQob25lKS4KKwkJCSAqLworCQkJeHNucHJpbnRmKHRlbXAtPm1vZGUsIHNpemVvZih0ZW1wLT5tb2RlKSwgIiUwNm8iLCBvbmUtPm1vZGUpOworCQl9CisJCXJldHVybiB0ZW1wOworCX0KKwllbHNlIHsKKwkJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCAwKSkKKwkJCWRpZSgiY2Fubm90IHJlYWQgZGF0YSBibG9iIGZvciAlcyIsIG9uZS0+cGF0aCk7CisJCXByZXBfdGVtcF9ibG9iKG5hbWUsIHRlbXAsIG9uZS0+ZGF0YSwgb25lLT5zaXplLAorCQkJICAgICAgIG9uZS0+c2hhMSwgb25lLT5tb2RlKTsKKwl9CisJcmV0dXJuIHRlbXA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9leHRlcm5hbF9kaWZmX25hbWUoc3RydWN0IGFyZ3ZfYXJyYXkgKmFyZ3YsCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGYpCit7CisJc3RydWN0IGRpZmZfdGVtcGZpbGUgKnRlbXAgPSBwcmVwYXJlX3RlbXBfZmlsZShuYW1lLCBkZik7CisJYXJndl9hcnJheV9wdXNoKGFyZ3YsIHRlbXAtPm5hbWUpOworCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCB0ZW1wLT5oZXgpOworCWFyZ3ZfYXJyYXlfcHVzaChhcmd2LCB0ZW1wLT5tb2RlKTsKK30KKworLyogQW4gZXh0ZXJuYWwgZGlmZiBjb21tYW5kIHRha2VzOgorICoKKyAqIGRpZmYtY21kIG5hbWUgaW5maWxlMSBpbmZpbGUxLXNoYTEgaW5maWxlMS1tb2RlIFwKKyAqICAgICAgICAgICAgICAgaW5maWxlMiBpbmZpbGUyLXNoYTEgaW5maWxlMi1tb2RlIFsgcmVuYW1lLXRvIF0KKyAqCisgKi8KK3N0YXRpYyB2b2lkIHJ1bl9leHRlcm5hbF9kaWZmKGNvbnN0IGNoYXIgKnBnbSwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBjb25zdCBjaGFyICpvdGhlciwKKwkJCSAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvLAorCQkJICAgICAgY29uc3QgY2hhciAqeGZybV9tc2csCisJCQkgICAgICBpbnQgY29tcGxldGVfcmV3cml0ZSwKKwkJCSAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8pCit7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBlbnYgPSBBUkdWX0FSUkFZX0lOSVQ7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsIHBnbSk7CisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCBuYW1lKTsKKworCWlmIChvbmUgJiYgdHdvKSB7CisJCWFkZF9leHRlcm5hbF9kaWZmX25hbWUoJmFyZ3YsIG5hbWUsIG9uZSk7CisJCWlmICghb3RoZXIpCisJCQlhZGRfZXh0ZXJuYWxfZGlmZl9uYW1lKCZhcmd2LCBuYW1lLCB0d28pOworCQllbHNlIHsKKwkJCWFkZF9leHRlcm5hbF9kaWZmX25hbWUoJmFyZ3YsIG90aGVyLCB0d28pOworCQkJYXJndl9hcnJheV9wdXNoKCZhcmd2LCBvdGhlcik7CisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3YsIHhmcm1fbXNnKTsKKwkJfQorCX0KKworCWFyZ3ZfYXJyYXlfcHVzaGYoJmVudiwgIkdJVF9ESUZGX1BBVEhfQ09VTlRFUj0lZCIsICsrby0+ZGlmZl9wYXRoX2NvdW50ZXIpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJmVudiwgIkdJVF9ESUZGX1BBVEhfVE9UQUw9JWQiLCBxLT5ucik7CisKKwlpZiAocnVuX2NvbW1hbmRfdl9vcHRfY2RfZW52KGFyZ3YuYXJndiwgUlVOX1VTSU5HX1NIRUxMLCBOVUxMLCBlbnYuYXJndikpCisJCWRpZShfKCJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIiksIG5hbWUpOworCisJcmVtb3ZlX3RlbXBmaWxlKCk7CisJYXJndl9hcnJheV9jbGVhcigmYXJndik7CisJYXJndl9hcnJheV9jbGVhcigmZW52KTsKK30KKworc3RhdGljIGludCBzaW1pbGFyaXR5X2luZGV4KHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCXJldHVybiBwLT5zY29yZSAqIDEwMCAvIE1BWF9TQ09SRTsKK30KKworc3RhdGljIHZvaWQgZmlsbF9tZXRhaW5mbyhzdHJ1Y3Qgc3RyYnVmICptc2csCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgIGNvbnN0IGNoYXIgKm90aGVyLAorCQkJICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvLAorCQkJICBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJICBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwKKwkJCSAgaW50ICptdXN0X3Nob3dfaGVhZGVyLAorCQkJICBpbnQgdXNlX2NvbG9yKQoreworCWNvbnN0IGNoYXIgKnNldCA9IGRpZmZfZ2V0X2NvbG9yKHVzZV9jb2xvciwgRElGRl9NRVRBSU5GTyk7CisJY29uc3QgY2hhciAqcmVzZXQgPSBkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfUkVTRVQpOworCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4ID0gZGlmZl9saW5lX3ByZWZpeChvKTsKKworCSptdXN0X3Nob3dfaGVhZGVyID0gMTsKKwlzdHJidWZfaW5pdChtc2csIFBBVEhfTUFYICogMiArIDMwMCk7CisJc3dpdGNoIChwLT5zdGF0dXMpIHsKKwljYXNlIERJRkZfU1RBVFVTX0NPUElFRDoKKwkJc3RyYnVmX2FkZGYobXNnLCAiJXMlc3NpbWlsYXJpdHkgaW5kZXggJWQlJSIsCisJCQkgICAgbGluZV9wcmVmaXgsIHNldCwgc2ltaWxhcml0eV9pbmRleChwKSk7CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXG4lcyVzY29weSBmcm9tICIsCisJCQkgICAgcmVzZXQsICBsaW5lX3ByZWZpeCwgc2V0KTsKKwkJcXVvdGVfY19zdHlsZShuYW1lLCBtc2csIE5VTEwsIDApOworCQlzdHJidWZfYWRkZihtc2csICIlc1xuJXMlc2NvcHkgdG8gIiwgcmVzZXQsIGxpbmVfcHJlZml4LCBzZXQpOworCQlxdW90ZV9jX3N0eWxlKG90aGVyLCBtc2csIE5VTEwsIDApOworCQlzdHJidWZfYWRkZihtc2csICIlc1xuIiwgcmVzZXQpOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX1JFTkFNRUQ6CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzJXNzaW1pbGFyaXR5IGluZGV4ICVkJSUiLAorCQkJICAgIGxpbmVfcHJlZml4LCBzZXQsIHNpbWlsYXJpdHlfaW5kZXgocCkpOworCQlzdHJidWZfYWRkZihtc2csICIlc1xuJXMlc3JlbmFtZSBmcm9tICIsCisJCQkgICAgcmVzZXQsIGxpbmVfcHJlZml4LCBzZXQpOworCQlxdW90ZV9jX3N0eWxlKG5hbWUsIG1zZywgTlVMTCwgMCk7CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXG4lcyVzcmVuYW1lIHRvICIsCisJCQkgICAgcmVzZXQsIGxpbmVfcHJlZml4LCBzZXQpOworCQlxdW90ZV9jX3N0eWxlKG90aGVyLCBtc2csIE5VTEwsIDApOworCQlzdHJidWZfYWRkZihtc2csICIlc1xuIiwgcmVzZXQpOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX01PRElGSUVEOgorCQlpZiAocC0+c2NvcmUpIHsKKwkJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzJXNkaXNzaW1pbGFyaXR5IGluZGV4ICVkJSUlc1xuIiwKKwkJCQkgICAgbGluZV9wcmVmaXgsCisJCQkJICAgIHNldCwgc2ltaWxhcml0eV9pbmRleChwKSwgcmVzZXQpOworCQkJYnJlYWs7CisJCX0KKwkJLyogZmFsbHRocnUgKi8KKwlkZWZhdWx0OgorCQkqbXVzdF9zaG93X2hlYWRlciA9IDA7CisJfQorCWlmIChvbmUgJiYgdHdvICYmIGhhc2hjbXAob25lLT5zaGExLCB0d28tPnNoYTEpKSB7CisJCWludCBhYmJyZXYgPSBESUZGX09QVF9UU1QobywgRlVMTF9JTkRFWCkgPyA0MCA6IERFRkFVTFRfQUJCUkVWOworCisJCWlmIChESUZGX09QVF9UU1QobywgQklOQVJZKSkgeworCQkJbW1maWxlX3QgbWY7CisJCQlpZiAoKCFmaWxsX21tZmlsZSgmbWYsIG9uZSkgJiYgZGlmZl9maWxlc3BlY19pc19iaW5hcnkob25lKSkgfHwKKwkJCSAgICAoIWZpbGxfbW1maWxlKCZtZiwgdHdvKSAmJiBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeSh0d28pKSkKKwkJCQlhYmJyZXYgPSA0MDsKKwkJfQorCQlzdHJidWZfYWRkZihtc2csICIlcyVzaW5kZXggJXMuLiIsIGxpbmVfcHJlZml4LCBzZXQsCisJCQkgICAgZmluZF91bmlxdWVfYWJicmV2KG9uZS0+c2hhMSwgYWJicmV2KSk7CisJCXN0cmJ1Zl9hZGRzdHIobXNnLCBmaW5kX3VuaXF1ZV9hYmJyZXYodHdvLT5zaGExLCBhYmJyZXYpKTsKKwkJaWYgKG9uZS0+bW9kZSA9PSB0d28tPm1vZGUpCisJCQlzdHJidWZfYWRkZihtc2csICIgJTA2byIsIG9uZS0+bW9kZSk7CisJCXN0cmJ1Zl9hZGRmKG1zZywgIiVzXG4iLCByZXNldCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBydW5fZGlmZl9jbWQoY29uc3QgY2hhciAqcGdtLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgY29uc3QgY2hhciAqb3RoZXIsCisJCQkgY29uc3QgY2hhciAqYXR0cl9wYXRoLAorCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bywKKwkJCSBzdHJ1Y3Qgc3RyYnVmICptc2csCisJCQkgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCkKK3sKKwljb25zdCBjaGFyICp4ZnJtX21zZyA9IE5VTEw7CisJaW50IGNvbXBsZXRlX3Jld3JpdGUgPSAocC0+c3RhdHVzID09IERJRkZfU1RBVFVTX01PRElGSUVEKSAmJiBwLT5zY29yZTsKKwlpbnQgbXVzdF9zaG93X2hlYWRlciA9IDA7CisKKworCWlmIChESUZGX09QVF9UU1QobywgQUxMT1dfRVhURVJOQUwpKSB7CisJCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRydiA9IHVzZXJkaWZmX2ZpbmRfYnlfcGF0aChhdHRyX3BhdGgpOworCQlpZiAoZHJ2ICYmIGRydi0+ZXh0ZXJuYWwpCisJCQlwZ20gPSBkcnYtPmV4dGVybmFsOworCX0KKworCWlmIChtc2cpIHsKKwkJLyoKKwkJICogZG9uJ3QgdXNlIGNvbG9ycyB3aGVuIHRoZSBoZWFkZXIgaXMgaW50ZW5kZWQgZm9yIGFuCisJCSAqIGV4dGVybmFsIGRpZmYgZHJpdmVyCisJCSAqLworCQlmaWxsX21ldGFpbmZvKG1zZywgbmFtZSwgb3RoZXIsIG9uZSwgdHdvLCBvLCBwLAorCQkJICAgICAgJm11c3Rfc2hvd19oZWFkZXIsCisJCQkgICAgICB3YW50X2NvbG9yKG8tPnVzZV9jb2xvcikgJiYgIXBnbSk7CisJCXhmcm1fbXNnID0gbXNnLT5sZW4gPyBtc2ctPmJ1ZiA6IE5VTEw7CisJfQorCisJaWYgKHBnbSkgeworCQlydW5fZXh0ZXJuYWxfZGlmZihwZ20sIG5hbWUsIG90aGVyLCBvbmUsIHR3bywgeGZybV9tc2csCisJCQkJICBjb21wbGV0ZV9yZXdyaXRlLCBvKTsKKwkJcmV0dXJuOworCX0KKwlpZiAob25lICYmIHR3bykKKwkJYnVpbHRpbl9kaWZmKG5hbWUsIG90aGVyID8gb3RoZXIgOiBuYW1lLAorCQkJICAgICBvbmUsIHR3bywgeGZybV9tc2csIG11c3Rfc2hvd19oZWFkZXIsCisJCQkgICAgIG8sIGNvbXBsZXRlX3Jld3JpdGUpOworCWVsc2UKKwkJZnByaW50ZihvLT5maWxlLCAiKiBVbm1lcmdlZCBwYXRoICVzXG4iLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9maWxsX3NoYTFfaW5mbyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lKQoreworCWlmIChESUZGX0ZJTEVfVkFMSUQob25lKSkgeworCQlpZiAoIW9uZS0+c2hhMV92YWxpZCkgeworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQlpZiAob25lLT5pc19zdGRpbikgeworCQkJCWhhc2hjcHkob25lLT5zaGExLCBudWxsX3NoYTEpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmIChsc3RhdChvbmUtPnBhdGgsICZzdCkgPCAwKQorCQkJCWRpZV9lcnJubygic3RhdCAnJXMnIiwgb25lLT5wYXRoKTsKKwkJCWlmIChpbmRleF9wYXRoKG9uZS0+c2hhMSwgb25lLT5wYXRoLCAmc3QsIDApKQorCQkJCWRpZSgiY2Fubm90IGhhc2ggJXMiLCBvbmUtPnBhdGgpOworCQl9CisJfQorCWVsc2UKKwkJaGFzaGNscihvbmUtPnNoYTEpOworfQorCitzdGF0aWMgdm9pZCBzdHJpcF9wcmVmaXgoaW50IHByZWZpeF9sZW5ndGgsIGNvbnN0IGNoYXIgKipuYW1lcCwgY29uc3QgY2hhciAqKm90aGVycCkKK3sKKwkvKiBTdHJpcCB0aGUgcHJlZml4IGJ1dCBkbyBub3QgbW9sZXN0IC9kZXYvbnVsbCBhbmQgYWJzb2x1dGUgcGF0aHMgKi8KKwlpZiAoKm5hbWVwICYmICoqbmFtZXAgIT0gJy8nKSB7CisJCSpuYW1lcCArPSBwcmVmaXhfbGVuZ3RoOworCQlpZiAoKipuYW1lcCA9PSAnLycpCisJCQkrKypuYW1lcDsKKwl9CisJaWYgKCpvdGhlcnAgJiYgKipvdGhlcnAgIT0gJy8nKSB7CisJCSpvdGhlcnAgKz0gcHJlZml4X2xlbmd0aDsKKwkJaWYgKCoqb3RoZXJwID09ICcvJykKKwkJCSsrKm90aGVycDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9kaWZmKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQoreworCWNvbnN0IGNoYXIgKnBnbSA9IGV4dGVybmFsX2RpZmYoKTsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZzsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lID0gcC0+b25lOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28gPSBwLT50d287CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpvdGhlcjsKKwljb25zdCBjaGFyICphdHRyX3BhdGg7CisKKwluYW1lICA9IHAtPm9uZS0+cGF0aDsKKwlvdGhlciA9IChzdHJjbXAobmFtZSwgcC0+dHdvLT5wYXRoKSA/IHAtPnR3by0+cGF0aCA6IE5VTEwpOworCWF0dHJfcGF0aCA9IG5hbWU7CisJaWYgKG8tPnByZWZpeF9sZW5ndGgpCisJCXN0cmlwX3ByZWZpeChvLT5wcmVmaXhfbGVuZ3RoLCAmbmFtZSwgJm90aGVyKTsKKworCWlmICghRElGRl9PUFRfVFNUKG8sIEFMTE9XX0VYVEVSTkFMKSkKKwkJcGdtID0gTlVMTDsKKworCWlmIChESUZGX1BBSVJfVU5NRVJHRUQocCkpIHsKKwkJcnVuX2RpZmZfY21kKHBnbSwgbmFtZSwgTlVMTCwgYXR0cl9wYXRoLAorCQkJICAgICBOVUxMLCBOVUxMLCBOVUxMLCBvLCBwKTsKKwkJcmV0dXJuOworCX0KKworCWRpZmZfZmlsbF9zaGExX2luZm8ob25lKTsKKwlkaWZmX2ZpbGxfc2hhMV9pbmZvKHR3byk7CisKKwlpZiAoIXBnbSAmJgorCSAgICBESUZGX0ZJTEVfVkFMSUQob25lKSAmJiBESUZGX0ZJTEVfVkFMSUQodHdvKSAmJgorCSAgICAoU19JRk1UICYgb25lLT5tb2RlKSAhPSAoU19JRk1UICYgdHdvLT5tb2RlKSkgeworCQkvKgorCQkgKiBhIGZpbGVwYWlyIHRoYXQgY2hhbmdlcyBiZXR3ZWVuIGZpbGUgYW5kIHN5bWxpbmsKKwkJICogbmVlZHMgdG8gYmUgc3BsaXQgaW50byBkZWxldGlvbiBhbmQgY3JlYXRpb24uCisJCSAqLworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqbnVsbCA9IGFsbG9jX2ZpbGVzcGVjKHR3by0+cGF0aCk7CisJCXJ1bl9kaWZmX2NtZChOVUxMLCBuYW1lLCBvdGhlciwgYXR0cl9wYXRoLAorCQkJICAgICBvbmUsIG51bGwsICZtc2csIG8sIHApOworCQlmcmVlKG51bGwpOworCQlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKworCQludWxsID0gYWxsb2NfZmlsZXNwZWMob25lLT5wYXRoKTsKKwkJcnVuX2RpZmZfY21kKE5VTEwsIG5hbWUsIG90aGVyLCBhdHRyX3BhdGgsCisJCQkgICAgIG51bGwsIHR3bywgJm1zZywgbywgcCk7CisJCWZyZWUobnVsbCk7CisJfQorCWVsc2UKKwkJcnVuX2RpZmZfY21kKHBnbSwgbmFtZSwgb3RoZXIsIGF0dHJfcGF0aCwKKwkJCSAgICAgb25lLCB0d28sICZtc2csIG8sIHApOworCisJc3RyYnVmX3JlbGVhc2UoJm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9kaWZmc3RhdChzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJCSBzdHJ1Y3QgZGlmZnN0YXRfdCAqZGlmZnN0YXQpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpvdGhlcjsKKworCWlmIChESUZGX1BBSVJfVU5NRVJHRUQocCkpIHsKKwkJLyogdW5tZXJnZWQgKi8KKwkJYnVpbHRpbl9kaWZmc3RhdChwLT5vbmUtPnBhdGgsIE5VTEwsIE5VTEwsIE5VTEwsIGRpZmZzdGF0LCBvLCBwKTsKKwkJcmV0dXJuOworCX0KKworCW5hbWUgPSBwLT5vbmUtPnBhdGg7CisJb3RoZXIgPSAoc3RyY21wKG5hbWUsIHAtPnR3by0+cGF0aCkgPyBwLT50d28tPnBhdGggOiBOVUxMKTsKKworCWlmIChvLT5wcmVmaXhfbGVuZ3RoKQorCQlzdHJpcF9wcmVmaXgoby0+cHJlZml4X2xlbmd0aCwgJm5hbWUsICZvdGhlcik7CisKKwlkaWZmX2ZpbGxfc2hhMV9pbmZvKHAtPm9uZSk7CisJZGlmZl9maWxsX3NoYTFfaW5mbyhwLT50d28pOworCisJYnVpbHRpbl9kaWZmc3RhdChuYW1lLCBvdGhlciwgcC0+b25lLCBwLT50d28sIGRpZmZzdGF0LCBvLCBwKTsKK30KKworc3RhdGljIHZvaWQgcnVuX2NoZWNrZGlmZihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqbykKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm90aGVyOworCWNvbnN0IGNoYXIgKmF0dHJfcGF0aDsKKworCWlmIChESUZGX1BBSVJfVU5NRVJHRUQocCkpIHsKKwkJLyogdW5tZXJnZWQgKi8KKwkJcmV0dXJuOworCX0KKworCW5hbWUgPSBwLT5vbmUtPnBhdGg7CisJb3RoZXIgPSAoc3RyY21wKG5hbWUsIHAtPnR3by0+cGF0aCkgPyBwLT50d28tPnBhdGggOiBOVUxMKTsKKwlhdHRyX3BhdGggPSBvdGhlciA/IG90aGVyIDogbmFtZTsKKworCWlmIChvLT5wcmVmaXhfbGVuZ3RoKQorCQlzdHJpcF9wcmVmaXgoby0+cHJlZml4X2xlbmd0aCwgJm5hbWUsICZvdGhlcik7CisKKwlkaWZmX2ZpbGxfc2hhMV9pbmZvKHAtPm9uZSk7CisJZGlmZl9maWxsX3NoYTFfaW5mbyhwLT50d28pOworCisJYnVpbHRpbl9jaGVja2RpZmYobmFtZSwgb3RoZXIsIGF0dHJfcGF0aCwgcC0+b25lLCBwLT50d28sIG8pOworfQorCit2b2lkIGRpZmZfc2V0dXAoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwltZW1jcHkob3B0aW9ucywgJmRlZmF1bHRfZGlmZl9vcHRpb25zLCBzaXplb2YoKm9wdGlvbnMpKTsKKworCW9wdGlvbnMtPmZpbGUgPSBzdGRvdXQ7CisKKwlvcHRpb25zLT5saW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKwlvcHRpb25zLT5icmVha19vcHQgPSAtMTsKKwlvcHRpb25zLT5yZW5hbWVfbGltaXQgPSAtMTsKKwlvcHRpb25zLT5kaXJzdGF0X3Blcm1pbGxlID0gZGlmZl9kaXJzdGF0X3Blcm1pbGxlX2RlZmF1bHQ7CisJb3B0aW9ucy0+Y29udGV4dCA9IGRpZmZfY29udGV4dF9kZWZhdWx0OworCW9wdGlvbnMtPndzX2Vycm9yX2hpZ2hsaWdodCA9IFdTRUhfTkVXOworCURJRkZfT1BUX1NFVChvcHRpb25zLCBSRU5BTUVfRU1QVFkpOworCisJLyogcGF0aGNoYW5nZSBsZWZ0ID1OVUxMIGJ5IGRlZmF1bHQgKi8KKwlvcHRpb25zLT5jaGFuZ2UgPSBkaWZmX2NoYW5nZTsKKwlvcHRpb25zLT5hZGRfcmVtb3ZlID0gZGlmZl9hZGRyZW1vdmU7CisJb3B0aW9ucy0+dXNlX2NvbG9yID0gZGlmZl91c2VfY29sb3JfZGVmYXVsdDsKKwlvcHRpb25zLT5kZXRlY3RfcmVuYW1lID0gZGlmZl9kZXRlY3RfcmVuYW1lX2RlZmF1bHQ7CisJb3B0aW9ucy0+eGRsX29wdHMgfD0gZGlmZl9hbGdvcml0aG07CisKKwlvcHRpb25zLT5vcmRlcmZpbGUgPSBkaWZmX29yZGVyX2ZpbGVfY2ZnOworCisJaWYgKGRpZmZfbm9fcHJlZml4KSB7CisJCW9wdGlvbnMtPmFfcHJlZml4ID0gb3B0aW9ucy0+Yl9wcmVmaXggPSAiIjsKKwl9IGVsc2UgaWYgKCFkaWZmX21uZW1vbmljX3ByZWZpeCkgeworCQlvcHRpb25zLT5hX3ByZWZpeCA9ICJhLyI7CisJCW9wdGlvbnMtPmJfcHJlZml4ID0gImIvIjsKKwl9Cit9CisKK3ZvaWQgZGlmZl9zZXR1cF9kb25lKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMpCit7CisJaW50IGNvdW50ID0gMDsKKworCWlmIChvcHRpb25zLT5zZXRfZGVmYXVsdCkKKwkJb3B0aW9ucy0+c2V0X2RlZmF1bHQob3B0aW9ucyk7CisKKwlpZiAob3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05BTUUpCisJCWNvdW50Kys7CisJaWYgKG9wdGlvbnMtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykKKwkJY291bnQrKzsKKwlpZiAob3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NIRUNLRElGRikKKwkJY291bnQrKzsKKwlpZiAob3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05PX09VVFBVVCkKKwkJY291bnQrKzsKKwlpZiAoY291bnQgPiAxKQorCQlkaWUoIi0tbmFtZS1vbmx5LCAtLW5hbWUtc3RhdHVzLCAtLWNoZWNrIGFuZCAtcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIik7CisKKwkvKgorCSAqIE1vc3Qgb2YgdGhlIHRpbWUgd2UgY2FuIHNheSAidGhlcmUgYXJlIGNoYW5nZXMiCisJICogb25seSBieSBjaGVja2luZyBpZiB0aGVyZSBhcmUgY2hhbmdlZCBwYXRocywgYnV0CisJICogLS1pZ25vcmUtd2hpdGVzcGFjZSogb3B0aW9ucyBmb3JjZSB1cyB0byBsb29rCisJICogaW5zaWRlIGNvbnRlbnRzLgorCSAqLworCisJaWYgKERJRkZfWERMX1RTVChvcHRpb25zLCBJR05PUkVfV0hJVEVTUEFDRSkgfHwKKwkgICAgRElGRl9YRExfVFNUKG9wdGlvbnMsIElHTk9SRV9XSElURVNQQUNFX0NIQU5HRSkgfHwKKwkgICAgRElGRl9YRExfVFNUKG9wdGlvbnMsIElHTk9SRV9XSElURVNQQUNFX0FUX0VPTCkpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBESUZGX0ZST01fQ09OVEVOVFMpOworCWVsc2UKKwkJRElGRl9PUFRfQ0xSKG9wdGlvbnMsIERJRkZfRlJPTV9DT05URU5UUyk7CisKKwlpZiAoRElGRl9PUFRfVFNUKG9wdGlvbnMsIEZJTkRfQ09QSUVTX0hBUkRFUikpCisJCW9wdGlvbnMtPmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9DT1BZOworCisJaWYgKCFESUZGX09QVF9UU1Qob3B0aW9ucywgUkVMQVRJVkVfTkFNRSkpCisJCW9wdGlvbnMtPnByZWZpeCA9IE5VTEw7CisJaWYgKG9wdGlvbnMtPnByZWZpeCkKKwkJb3B0aW9ucy0+cHJlZml4X2xlbmd0aCA9IHN0cmxlbihvcHRpb25zLT5wcmVmaXgpOworCWVsc2UKKwkJb3B0aW9ucy0+cHJlZml4X2xlbmd0aCA9IDA7CisKKwlpZiAob3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCAmIChESUZGX0ZPUk1BVF9OQU1FIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUyB8CisJCQkJICAgICAgRElGRl9GT1JNQVRfQ0hFQ0tESUZGIHwKKwkJCQkgICAgICBESUZGX0ZPUk1BVF9OT19PVVRQVVQpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0ICY9IH4oRElGRl9GT1JNQVRfUkFXIHwKKwkJCQkJICAgIERJRkZfRk9STUFUX05VTVNUQVQgfAorCQkJCQkgICAgRElGRl9GT1JNQVRfRElGRlNUQVQgfAorCQkJCQkgICAgRElGRl9GT1JNQVRfU0hPUlRTVEFUIHwKKwkJCQkJICAgIERJRkZfRk9STUFUX0RJUlNUQVQgfAorCQkJCQkgICAgRElGRl9GT1JNQVRfU1VNTUFSWSB8CisJCQkJCSAgICBESUZGX0ZPUk1BVF9QQVRDSCk7CisKKwkvKgorCSAqIFRoZXNlIGNhc2VzIGFsd2F5cyBuZWVkIHJlY3Vyc2l2ZTsgd2UgZG8gbm90IGRyb3AgY2FsbGVyLXN1cHBsaWVkCisJICogcmVjdXJzaXZlIGJpdHMgZm9yIG90aGVyIGZvcm1hdHMgaGVyZS4KKwkgKi8KKwlpZiAob3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCAmIChESUZGX0ZPUk1BVF9QQVRDSCB8CisJCQkJICAgICAgRElGRl9GT1JNQVRfTlVNU1RBVCB8CisJCQkJICAgICAgRElGRl9GT1JNQVRfRElGRlNUQVQgfAorCQkJCSAgICAgIERJRkZfRk9STUFUX1NIT1JUU1RBVCB8CisJCQkJICAgICAgRElGRl9GT1JNQVRfRElSU1RBVCB8CisJCQkJICAgICAgRElGRl9GT1JNQVRfU1VNTUFSWSB8CisJCQkJICAgICAgRElGRl9GT1JNQVRfQ0hFQ0tESUZGKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIFJFQ1VSU0lWRSk7CisJLyoKKwkgKiBBbHNvIHBpY2theGUgd291bGQgbm90IHdvcmsgdmVyeSB3ZWxsIGlmIHlvdSBkbyBub3Qgc2F5IHJlY3Vyc2l2ZQorCSAqLworCWlmIChvcHRpb25zLT5waWNrYXhlKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgUkVDVVJTSVZFKTsKKwkvKgorCSAqIFdoZW4gcGF0Y2hlcyBhcmUgZ2VuZXJhdGVkLCBzdWJtb2R1bGVzIGRpZmZlZCBhZ2FpbnN0IHRoZSB3b3JrIHRyZWUKKwkgKiBtdXN0IGJlIGNoZWNrZWQgZm9yIGRpcnRpbmVzcyB0b28gc28gaXQgY2FuIGJlIHNob3duIGluIHRoZSBvdXRwdXQKKwkgKi8KKwlpZiAob3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX1BBVENIKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgRElSVFlfU1VCTU9EVUxFUyk7CisKKwlpZiAob3B0aW9ucy0+ZGV0ZWN0X3JlbmFtZSAmJiBvcHRpb25zLT5yZW5hbWVfbGltaXQgPCAwKQorCQlvcHRpb25zLT5yZW5hbWVfbGltaXQgPSBkaWZmX3JlbmFtZV9saW1pdF9kZWZhdWx0OworCWlmIChvcHRpb25zLT5zZXR1cCAmIERJRkZfU0VUVVBfVVNFX0NBQ0hFKSB7CisJCWlmICghYWN0aXZlX2NhY2hlKQorCQkJLyogcmVhZC1jYWNoZSBkb2VzIG5vdCBkaWUgZXZlbiB3aGVuIGl0IGZhaWxzCisJCQkgKiBzbyBpdCBpcyBzYWZlIGZvciB1cyB0byBkbyB0aGlzIGhlcmUuICBBbHNvCisJCQkgKiBpdCBkb2VzIG5vdCBzbXVkZ2UgYWN0aXZlX2NhY2hlIG9yIGFjdGl2ZV9ucgorCQkJICogd2hlbiBpdCBmYWlscywgc28gd2UgZG8gbm90IGhhdmUgdG8gd29ycnkgYWJvdXQKKwkJCSAqIGNsZWFuaW5nIGl0IHVwIG91cnNlbHZlcyBlaXRoZXIuCisJCQkgKi8KKwkJCXJlYWRfY2FjaGUoKTsKKwl9CisJaWYgKG9wdGlvbnMtPmFiYnJldiA8PSAwIHx8IDQwIDwgb3B0aW9ucy0+YWJicmV2KQorCQlvcHRpb25zLT5hYmJyZXYgPSA0MDsgLyogZnVsbCAqLworCisJLyoKKwkgKiBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHNob3cgdGhlIGZpcnN0IGhpdCB3ZSBoYXBwZW5lZAorCSAqIHRvIGhhdmUgZm91bmQuICBJdCBkb2VzIG5vdCBtYWtlIHNlbnNlIG5vdCB0byByZXR1cm4gd2l0aAorCSAqIGV4aXQgY29kZSBpbiBzdWNoIGEgY2FzZSBlaXRoZXIuCisJICovCisJaWYgKERJRkZfT1BUX1RTVChvcHRpb25zLCBRVUlDSykpIHsKKwkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEVYSVRfV0lUSF9TVEFUVVMpOworCX0KKworCW9wdGlvbnMtPmRpZmZfcGF0aF9jb3VudGVyID0gMDsKKworCWlmIChESUZGX09QVF9UU1Qob3B0aW9ucywgRk9MTE9XX1JFTkFNRVMpICYmIG9wdGlvbnMtPnBhdGhzcGVjLm5yICE9IDEpCisJCWRpZShfKCItLWZvbGxvdyByZXF1aXJlcyBleGFjdGx5IG9uZSBwYXRoc3BlYyIpKTsKK30KKworc3RhdGljIGludCBvcHRfYXJnKGNvbnN0IGNoYXIgKmFyZywgaW50IGFyZ19zaG9ydCwgY29uc3QgY2hhciAqYXJnX2xvbmcsIGludCAqdmFsKQoreworCWNoYXIgYywgKmVxOworCWludCBsZW47CisKKwlpZiAoKmFyZyAhPSAnLScpCisJCXJldHVybiAwOworCWMgPSAqKythcmc7CisJaWYgKCFjKQorCQlyZXR1cm4gMDsKKwlpZiAoYyA9PSBhcmdfc2hvcnQpIHsKKwkJYyA9ICorK2FyZzsKKwkJaWYgKCFjKQorCQkJcmV0dXJuIDE7CisJCWlmICh2YWwgJiYgaXNkaWdpdChjKSkgeworCQkJY2hhciAqZW5kOworCQkJaW50IG4gPSBzdHJ0b3VsKGFyZywgJmVuZCwgMTApOworCQkJaWYgKCplbmQpCisJCQkJcmV0dXJuIDA7CisJCQkqdmFsID0gbjsKKwkJCXJldHVybiAxOworCQl9CisJCXJldHVybiAwOworCX0KKwlpZiAoYyAhPSAnLScpCisJCXJldHVybiAwOworCWFyZysrOworCWVxID0gc3RyY2hybnVsKGFyZywgJz0nKTsKKwlsZW4gPSBlcSAtIGFyZzsKKwlpZiAoIWxlbiB8fCBzdHJuY21wKGFyZywgYXJnX2xvbmcsIGxlbikpCisJCXJldHVybiAwOworCWlmICgqZXEpIHsKKwkJaW50IG47CisJCWNoYXIgKmVuZDsKKwkJaWYgKCFpc2RpZ2l0KCorK2VxKSkKKwkJCXJldHVybiAwOworCQluID0gc3RydG91bChlcSwgJmVuZCwgMTApOworCQlpZiAoKmVuZCkKKwkJCXJldHVybiAwOworCQkqdmFsID0gbjsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9zY29yZW9wdF9wYXJzZShjb25zdCBjaGFyICpvcHQpOworCitzdGF0aWMgaW5saW5lIGludCBzaG9ydF9vcHQoY2hhciBvcHQsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgIGNvbnN0IGNoYXIgKipvcHRhcmcpCit7CisJY29uc3QgY2hhciAqYXJnID0gYXJndlswXTsKKwlpZiAoYXJnWzBdICE9ICctJyB8fCBhcmdbMV0gIT0gb3B0KQorCQlyZXR1cm4gMDsKKwlpZiAoYXJnWzJdICE9ICdcMCcpIHsKKwkJKm9wdGFyZyA9IGFyZyArIDI7CisJCXJldHVybiAxOworCX0KKwlpZiAoIWFyZ3ZbMV0pCisJCWRpZSgiT3B0aW9uICclYycgcmVxdWlyZXMgYSB2YWx1ZSIsIG9wdCk7CisJKm9wdGFyZyA9IGFyZ3ZbMV07CisJcmV0dXJuIDI7Cit9CisKK2ludCBwYXJzZV9sb25nX29wdChjb25zdCBjaGFyICpvcHQsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkgICBjb25zdCBjaGFyICoqb3B0YXJnKQoreworCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbMF07CisJaWYgKCFza2lwX3ByZWZpeChhcmcsICItLSIsICZhcmcpKQorCQlyZXR1cm4gMDsKKwlpZiAoIXNraXBfcHJlZml4KGFyZywgb3B0LCAmYXJnKSkKKwkJcmV0dXJuIDA7CisJaWYgKCphcmcgPT0gJz0nKSB7IC8qIHN0dWNrIGZvcm06IC0tb3B0aW9uPXZhbHVlICovCisJCSpvcHRhcmcgPSBhcmcgKyAxOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKCphcmcgIT0gJ1wwJykKKwkJcmV0dXJuIDA7CisJLyogc2VwYXJhdGUgZm9ybTogLS1vcHRpb24gdmFsdWUgKi8KKwlpZiAoIWFyZ3ZbMV0pCisJCWRpZSgiT3B0aW9uICctLSVzJyByZXF1aXJlcyBhIHZhbHVlIiwgb3B0KTsKKwkqb3B0YXJnID0gYXJndlsxXTsKKwlyZXR1cm4gMjsKK30KKworc3RhdGljIGludCBzdGF0X29wdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBjb25zdCBjaGFyICoqYXYpCit7CisJY29uc3QgY2hhciAqYXJnID0gYXZbMF07CisJY2hhciAqZW5kOworCWludCB3aWR0aCA9IG9wdGlvbnMtPnN0YXRfd2lkdGg7CisJaW50IG5hbWVfd2lkdGggPSBvcHRpb25zLT5zdGF0X25hbWVfd2lkdGg7CisJaW50IGdyYXBoX3dpZHRoID0gb3B0aW9ucy0+c3RhdF9ncmFwaF93aWR0aDsKKwlpbnQgY291bnQgPSBvcHRpb25zLT5zdGF0X2NvdW50OworCWludCBhcmdjb3VudCA9IDE7CisKKwlpZiAoIXNraXBfcHJlZml4KGFyZywgIi0tc3RhdCIsICZhcmcpKQorCQlkaWUoIkJVRzogc3RhdCBvcHRpb24gZG9lcyBub3QgYmVnaW4gd2l0aCAtLXN0YXQ6ICVzIiwgYXJnKTsKKwllbmQgPSAoY2hhciAqKWFyZzsKKworCXN3aXRjaCAoKmFyZykgeworCWNhc2UgJy0nOgorCQlpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLXdpZHRoIiwgJmFyZykpIHsKKwkJCWlmICgqYXJnID09ICc9JykKKwkJCQl3aWR0aCA9IHN0cnRvdWwoYXJnICsgMSwgJmVuZCwgMTApOworCQkJZWxzZSBpZiAoISphcmcgJiYgIWF2WzFdKQorCQkJCWRpZSgiT3B0aW9uICctLXN0YXQtd2lkdGgnIHJlcXVpcmVzIGEgdmFsdWUiKTsKKwkJCWVsc2UgaWYgKCEqYXJnKSB7CisJCQkJd2lkdGggPSBzdHJ0b3VsKGF2WzFdLCAmZW5kLCAxMCk7CisJCQkJYXJnY291bnQgPSAyOworCQkJfQorCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi1uYW1lLXdpZHRoIiwgJmFyZykpIHsKKwkJCWlmICgqYXJnID09ICc9JykKKwkJCQluYW1lX3dpZHRoID0gc3RydG91bChhcmcgKyAxLCAmZW5kLCAxMCk7CisJCQllbHNlIGlmICghKmFyZyAmJiAhYXZbMV0pCisJCQkJZGllKCJPcHRpb24gJy0tc3RhdC1uYW1lLXdpZHRoJyByZXF1aXJlcyBhIHZhbHVlIik7CisJCQllbHNlIGlmICghKmFyZykgeworCQkJCW5hbWVfd2lkdGggPSBzdHJ0b3VsKGF2WzFdLCAmZW5kLCAxMCk7CisJCQkJYXJnY291bnQgPSAyOworCQkJfQorCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi1ncmFwaC13aWR0aCIsICZhcmcpKSB7CisJCQlpZiAoKmFyZyA9PSAnPScpCisJCQkJZ3JhcGhfd2lkdGggPSBzdHJ0b3VsKGFyZyArIDEsICZlbmQsIDEwKTsKKwkJCWVsc2UgaWYgKCEqYXJnICYmICFhdlsxXSkKKwkJCQlkaWUoIk9wdGlvbiAnLS1zdGF0LWdyYXBoLXdpZHRoJyByZXF1aXJlcyBhIHZhbHVlIik7CisJCQllbHNlIGlmICghKmFyZykgeworCQkJCWdyYXBoX3dpZHRoID0gc3RydG91bChhdlsxXSwgJmVuZCwgMTApOworCQkJCWFyZ2NvdW50ID0gMjsKKwkJCX0KKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItY291bnQiLCAmYXJnKSkgeworCQkJaWYgKCphcmcgPT0gJz0nKQorCQkJCWNvdW50ID0gc3RydG91bChhcmcgKyAxLCAmZW5kLCAxMCk7CisJCQllbHNlIGlmICghKmFyZyAmJiAhYXZbMV0pCisJCQkJZGllKCJPcHRpb24gJy0tc3RhdC1jb3VudCcgcmVxdWlyZXMgYSB2YWx1ZSIpOworCQkJZWxzZSBpZiAoISphcmcpIHsKKwkJCQljb3VudCA9IHN0cnRvdWwoYXZbMV0sICZlbmQsIDEwKTsKKwkJCQlhcmdjb3VudCA9IDI7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSAnPSc6CisJCXdpZHRoID0gc3RydG91bChhcmcrMSwgJmVuZCwgMTApOworCQlpZiAoKmVuZCA9PSAnLCcpCisJCQluYW1lX3dpZHRoID0gc3RydG91bChlbmQrMSwgJmVuZCwgMTApOworCQlpZiAoKmVuZCA9PSAnLCcpCisJCQljb3VudCA9IHN0cnRvdWwoZW5kKzEsICZlbmQsIDEwKTsKKwl9CisKKwkvKiBJbXBvcnRhbnQhIFRoaXMgY2hlY2tzIGFsbCB0aGUgZXJyb3IgY2FzZXMhICovCisJaWYgKCplbmQpCisJCXJldHVybiAwOworCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfRElGRlNUQVQ7CisJb3B0aW9ucy0+c3RhdF9uYW1lX3dpZHRoID0gbmFtZV93aWR0aDsKKwlvcHRpb25zLT5zdGF0X2dyYXBoX3dpZHRoID0gZ3JhcGhfd2lkdGg7CisJb3B0aW9ucy0+c3RhdF93aWR0aCA9IHdpZHRoOworCW9wdGlvbnMtPnN0YXRfY291bnQgPSBjb3VudDsKKwlyZXR1cm4gYXJnY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZGlyc3RhdF9vcHQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywgY29uc3QgY2hhciAqcGFyYW1zKQoreworCXN0cnVjdCBzdHJidWYgZXJybXNnID0gU1RSQlVGX0lOSVQ7CisJaWYgKHBhcnNlX2RpcnN0YXRfcGFyYW1zKG9wdGlvbnMsIHBhcmFtcywgJmVycm1zZykpCisJCWRpZShfKCJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4lcyIpLAorCQkgICAgZXJybXNnLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmVycm1zZyk7CisJLyoKKwkgKiBUaGUgY2FsbGVyIGtub3dzIGEgZGlyc3RhdC1yZWxhdGVkIG9wdGlvbiBpcyBnaXZlbiBmcm9tIHRoZSBjb21tYW5kCisJICogbGluZTsgYWxsb3cgaXQgdG8gc2F5ICJyZXR1cm4gdGhpc19mdW5jdGlvbigpOyIKKwkgKi8KKwlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX0RJUlNUQVQ7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfc3VibW9kdWxlX29wdChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAocGFyc2Vfc3VibW9kdWxlX3BhcmFtcyhvcHRpb25zLCB2YWx1ZSkpCisJCWRpZShfKCJGYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIpLAorCQkJdmFsdWUpOworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgY2hhciBkaWZmX3N0YXR1c19sZXR0ZXJzW10gPSB7CisJRElGRl9TVEFUVVNfQURERUQsCisJRElGRl9TVEFUVVNfQ09QSUVELAorCURJRkZfU1RBVFVTX0RFTEVURUQsCisJRElGRl9TVEFUVVNfTU9ESUZJRUQsCisJRElGRl9TVEFUVVNfUkVOQU1FRCwKKwlESUZGX1NUQVRVU19UWVBFX0NIQU5HRUQsCisJRElGRl9TVEFUVVNfVU5LTk9XTiwKKwlESUZGX1NUQVRVU19VTk1FUkdFRCwKKwlESUZGX1NUQVRVU19GSUxURVJfQU9OLAorCURJRkZfU1RBVFVTX0ZJTFRFUl9CUk9LRU4sCisJJ1wwJywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZmlsdGVyX2JpdFsnWicgKyAxXTsKKworc3RhdGljIHZvaWQgcHJlcGFyZV9maWx0ZXJfYml0cyh2b2lkKQoreworCWludCBpOworCisJaWYgKCFmaWx0ZXJfYml0W0RJRkZfU1RBVFVTX0FEREVEXSkgeworCQlmb3IgKGkgPSAwOyBkaWZmX3N0YXR1c19sZXR0ZXJzW2ldOyBpKyspCisJCQlmaWx0ZXJfYml0WyhpbnQpIGRpZmZfc3RhdHVzX2xldHRlcnNbaV1dID0gKDEgPDwgaSk7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgZmlsdGVyX2JpdF90c3QoY2hhciBzdGF0dXMsIGNvbnN0IHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlyZXR1cm4gb3B0LT5maWx0ZXIgJiBmaWx0ZXJfYml0WyhpbnQpIHN0YXR1c107Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZGlmZl9maWx0ZXJfb3B0KGNvbnN0IGNoYXIgKm9wdGFyZywgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCWludCBpLCBvcHRjaDsKKworCXByZXBhcmVfZmlsdGVyX2JpdHMoKTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgYSBuZWdhdGlvbiBlLmcuICdkJyBpbiB0aGUgaW5wdXQsIGFuZCB3ZSBoYXZlbid0CisJICogaW5pdGlhbGl6ZWQgdGhlIGZpbHRlciBmaWVsZCB3aXRoIGFub3RoZXIgLS1kaWZmLWZpbHRlciwgc3RhcnQKKwkgKiBmcm9tIGZ1bGwgc2V0IG9mIGJpdHMsIGV4Y2VwdCBmb3IgQU9OLgorCSAqLworCWlmICghb3B0LT5maWx0ZXIpIHsKKwkJZm9yIChpID0gMDsgKG9wdGNoID0gb3B0YXJnW2ldKSAhPSAnXDAnOyBpKyspIHsKKwkJCWlmIChvcHRjaCA8ICdhJyB8fCAneicgPCBvcHRjaCkKKwkJCQljb250aW51ZTsKKwkJCW9wdC0+ZmlsdGVyID0gKDEgPDwgKEFSUkFZX1NJWkUoZGlmZl9zdGF0dXNfbGV0dGVycykgLSAxKSkgLSAxOworCQkJb3B0LT5maWx0ZXIgJj0gfmZpbHRlcl9iaXRbRElGRl9TVEFUVVNfRklMVEVSX0FPTl07CisJCQlicmVhazsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IChvcHRjaCA9IG9wdGFyZ1tpXSkgIT0gJ1wwJzsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBiaXQ7CisJCWludCBuZWdhdGU7CisKKwkJaWYgKCdhJyA8PSBvcHRjaCAmJiBvcHRjaCA8PSAneicpIHsKKwkJCW5lZ2F0ZSA9IDE7CisJCQlvcHRjaCA9IHRvdXBwZXIob3B0Y2gpOworCQl9IGVsc2UgeworCQkJbmVnYXRlID0gMDsKKwkJfQorCisJCWJpdCA9ICgwIDw9IG9wdGNoICYmIG9wdGNoIDw9ICdaJykgPyBmaWx0ZXJfYml0W29wdGNoXSA6IDA7CisJCWlmICghYml0KQorCQkJcmV0dXJuIG9wdGFyZ1tpXTsKKwkJaWYgKG5lZ2F0ZSkKKwkJCW9wdC0+ZmlsdGVyICY9IH5iaXQ7CisJCWVsc2UKKwkJCW9wdC0+ZmlsdGVyIHw9IGJpdDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9wYXRjaF9vdXRwdXQoaW50ICpmbXQpIHsKKwkqZm10ICY9IH5ESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJKmZtdCB8PSBESUZGX0ZPUk1BVF9QQVRDSDsKK30KKworc3RhdGljIGludCBwYXJzZV9vbmVfdG9rZW4oY29uc3QgY2hhciAqKmFyZywgY29uc3QgY2hhciAqdG9rZW4pCit7CisJY29uc3QgY2hhciAqcmVzdDsKKwlpZiAoc2tpcF9wcmVmaXgoKmFyZywgdG9rZW4sICZyZXN0KSAmJiAoISpyZXN0IHx8ICpyZXN0ID09ICcsJykpIHsKKwkJKmFyZyA9IHJlc3Q7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV93c19lcnJvcl9oaWdobGlnaHQoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCBjb25zdCBjaGFyICphcmcpCit7CisJY29uc3QgY2hhciAqb3JpZ19hcmcgPSBhcmc7CisJdW5zaWduZWQgdmFsID0gMDsKKwl3aGlsZSAoKmFyZykgeworCQlpZiAocGFyc2Vfb25lX3Rva2VuKCZhcmcsICJub25lIikpCisJCQl2YWwgPSAwOworCQllbHNlIGlmIChwYXJzZV9vbmVfdG9rZW4oJmFyZywgImRlZmF1bHQiKSkKKwkJCXZhbCA9IFdTRUhfTkVXOworCQllbHNlIGlmIChwYXJzZV9vbmVfdG9rZW4oJmFyZywgImFsbCIpKQorCQkJdmFsID0gV1NFSF9ORVcgfCBXU0VIX09MRCB8IFdTRUhfQ09OVEVYVDsKKwkJZWxzZSBpZiAocGFyc2Vfb25lX3Rva2VuKCZhcmcsICJuZXciKSkKKwkJCXZhbCB8PSBXU0VIX05FVzsKKwkJZWxzZSBpZiAocGFyc2Vfb25lX3Rva2VuKCZhcmcsICJvbGQiKSkKKwkJCXZhbCB8PSBXU0VIX09MRDsKKwkJZWxzZSBpZiAocGFyc2Vfb25lX3Rva2VuKCZhcmcsICJjb250ZXh0IikpCisJCQl2YWwgfD0gV1NFSF9DT05URVhUOworCQllbHNlIHsKKwkJCWVycm9yKCJ1bmtub3duIHZhbHVlIGFmdGVyIHdzLWVycm9yLWhpZ2hsaWdodD0lLipzIiwKKwkJCSAgICAgIChpbnQpKGFyZyAtIG9yaWdfYXJnKSwgb3JpZ19hcmcpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKCphcmcpCisJCQlhcmcrKzsKKwl9CisJb3B0LT53c19lcnJvcl9oaWdobGlnaHQgPSB2YWw7CisJcmV0dXJuIDE7Cit9CisKK2ludCBkaWZmX29wdF9wYXJzZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLCBjb25zdCBjaGFyICoqYXYsIGludCBhYykKK3sKKwljb25zdCBjaGFyICphcmcgPSBhdlswXTsKKwljb25zdCBjaGFyICpvcHRhcmc7CisJaW50IGFyZ2NvdW50OworCisJLyogT3V0cHV0IGZvcm1hdCBvcHRpb25zICovCisJaWYgKCFzdHJjbXAoYXJnLCAiLXAiKSB8fCAhc3RyY21wKGFyZywgIi11IikgfHwgIXN0cmNtcChhcmcsICItLXBhdGNoIikKKwkgICAgfHwgb3B0X2FyZyhhcmcsICdVJywgInVuaWZpZWQiLCAmb3B0aW9ucy0+Y29udGV4dCkpCisJCWVuYWJsZV9wYXRjaF9vdXRwdXQoJm9wdGlvbnMtPm91dHB1dF9mb3JtYXQpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yYXciKSkKKwkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9SQVc7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXBhdGNoLXdpdGgtcmF3IikpIHsKKwkJZW5hYmxlX3BhdGNoX291dHB1dCgmb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCk7CisJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfUkFXOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW51bXN0YXQiKSkKKwkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9OVU1TVEFUOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaG9ydHN0YXQiKSkKKwkJb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9TSE9SVFNUQVQ7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItWCIpIHx8ICFzdHJjbXAoYXJnLCAiLS1kaXJzdGF0IikpCisJCXJldHVybiBwYXJzZV9kaXJzdGF0X29wdChvcHRpb25zLCAiIik7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLVgiLCAmYXJnKSkKKwkJcmV0dXJuIHBhcnNlX2RpcnN0YXRfb3B0KG9wdGlvbnMsIGFyZyk7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1kaXJzdGF0PSIsICZhcmcpKQorCQlyZXR1cm4gcGFyc2VfZGlyc3RhdF9vcHQob3B0aW9ucywgYXJnKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tY3VtdWxhdGl2ZSIpKQorCQlyZXR1cm4gcGFyc2VfZGlyc3RhdF9vcHQob3B0aW9ucywgImN1bXVsYXRpdmUiKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tZGlyc3RhdC1ieS1maWxlIikpCisJCXJldHVybiBwYXJzZV9kaXJzdGF0X29wdChvcHRpb25zLCAiZmlsZXMiKTsKKwllbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLWRpcnN0YXQtYnktZmlsZT0iLCAmYXJnKSkgeworCQlwYXJzZV9kaXJzdGF0X29wdChvcHRpb25zLCAiZmlsZXMiKTsKKwkJcmV0dXJuIHBhcnNlX2RpcnN0YXRfb3B0KG9wdGlvbnMsIGFyZyk7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jaGVjayIpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX0NIRUNLRElGRjsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tc3VtbWFyeSIpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1NVTU1BUlk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXBhdGNoLXdpdGgtc3RhdCIpKSB7CisJCWVuYWJsZV9wYXRjaF9vdXRwdXQoJm9wdGlvbnMtPm91dHB1dF9mb3JtYXQpOworCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX0RJRkZTVEFUOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5hbWUtb25seSIpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX05BTUU7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5hbWUtc3RhdHVzIikpCisJCW9wdGlvbnMtPm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfTkFNRV9TVEFUVVM7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItcyIpIHx8ICFzdHJjbXAoYXJnLCAiLS1uby1wYXRjaCIpKQorCQlvcHRpb25zLT5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwllbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItLXN0YXQiKSkKKwkJLyogLS1zdGF0LCAtLXN0YXQtd2lkdGgsIC0tc3RhdC1uYW1lLXdpZHRoLCBvciAtLXN0YXQtY291bnQgKi8KKwkJcmV0dXJuIHN0YXRfb3B0KG9wdGlvbnMsIGF2KTsKKworCS8qIHJlbmFtZXMgb3B0aW9ucyAqLworCWVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi1CIikgfHwgc3RhcnRzX3dpdGgoYXJnLCAiLS1icmVhay1yZXdyaXRlcz0iKSB8fAorCQkgIXN0cmNtcChhcmcsICItLWJyZWFrLXJld3JpdGVzIikpIHsKKwkJaWYgKChvcHRpb25zLT5icmVha19vcHQgPSBkaWZmX3Njb3Jlb3B0X3BhcnNlKGFyZykpID09IC0xKQorCQkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGFyZ3VtZW50IHRvIC1COiAlcyIsIGFyZysyKTsKKwl9CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLU0iKSB8fCBzdGFydHNfd2l0aChhcmcsICItLWZpbmQtcmVuYW1lcz0iKSB8fAorCQkgIXN0cmNtcChhcmcsICItLWZpbmQtcmVuYW1lcyIpKSB7CisJCWlmICgob3B0aW9ucy0+cmVuYW1lX3Njb3JlID0gZGlmZl9zY29yZW9wdF9wYXJzZShhcmcpKSA9PSAtMSkKKwkJCXJldHVybiBlcnJvcigiaW52YWxpZCBhcmd1bWVudCB0byAtTTogJXMiLCBhcmcrMik7CisJCW9wdGlvbnMtPmRldGVjdF9yZW5hbWUgPSBESUZGX0RFVEVDVF9SRU5BTUU7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLUQiKSB8fCAhc3RyY21wKGFyZywgIi0taXJyZXZlcnNpYmxlLWRlbGV0ZSIpKSB7CisJCW9wdGlvbnMtPmlycmV2ZXJzaWJsZV9kZWxldGUgPSAxOworCX0KKwllbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItQyIpIHx8IHN0YXJ0c193aXRoKGFyZywgIi0tZmluZC1jb3BpZXM9IikgfHwKKwkJICFzdHJjbXAoYXJnLCAiLS1maW5kLWNvcGllcyIpKSB7CisJCWlmIChvcHRpb25zLT5kZXRlY3RfcmVuYW1lID09IERJRkZfREVURUNUX0NPUFkpCisJCQlESUZGX09QVF9TRVQob3B0aW9ucywgRklORF9DT1BJRVNfSEFSREVSKTsKKwkJaWYgKChvcHRpb25zLT5yZW5hbWVfc2NvcmUgPSBkaWZmX3Njb3Jlb3B0X3BhcnNlKGFyZykpID09IC0xKQorCQkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGFyZ3VtZW50IHRvIC1DOiAlcyIsIGFyZysyKTsKKwkJb3B0aW9ucy0+ZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX0NPUFk7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1yZW5hbWVzIikpCisJCW9wdGlvbnMtPmRldGVjdF9yZW5hbWUgPSAwOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZW5hbWUtZW1wdHkiKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIFJFTkFNRV9FTVBUWSk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLXJlbmFtZS1lbXB0eSIpKQorCQlESUZGX09QVF9DTFIob3B0aW9ucywgUkVOQU1FX0VNUFRZKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmVsYXRpdmUiKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIFJFTEFUSVZFX05BTUUpOworCWVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0tcmVsYXRpdmU9IiwgJmFyZykpIHsKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIFJFTEFUSVZFX05BTUUpOworCQlvcHRpb25zLT5wcmVmaXggPSBhcmc7CisJfQorCisJLyogeGRpZmYgb3B0aW9ucyAqLworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1taW5pbWFsIikpCisJCURJRkZfWERMX1NFVChvcHRpb25zLCBORUVEX01JTklNQUwpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1taW5pbWFsIikpCisJCURJRkZfWERMX0NMUihvcHRpb25zLCBORUVEX01JTklNQUwpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXciKSB8fCAhc3RyY21wKGFyZywgIi0taWdub3JlLWFsbC1zcGFjZSIpKQorCQlESUZGX1hETF9TRVQob3B0aW9ucywgSUdOT1JFX1dISVRFU1BBQ0UpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWIiKSB8fCAhc3RyY21wKGFyZywgIi0taWdub3JlLXNwYWNlLWNoYW5nZSIpKQorCQlESUZGX1hETF9TRVQob3B0aW9ucywgSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0taWdub3JlLXNwYWNlLWF0LWVvbCIpKQorCQlESUZGX1hETF9TRVQob3B0aW9ucywgSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0taWdub3JlLWJsYW5rLWxpbmVzIikpCisJCURJRkZfWERMX1NFVChvcHRpb25zLCBJR05PUkVfQkxBTktfTElORVMpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1wYXRpZW5jZSIpKQorCQlvcHRpb25zLT54ZGxfb3B0cyA9IERJRkZfV0lUSF9BTEcob3B0aW9ucywgUEFUSUVOQ0VfRElGRik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWhpc3RvZ3JhbSIpKQorCQlvcHRpb25zLT54ZGxfb3B0cyA9IERJRkZfV0lUSF9BTEcob3B0aW9ucywgSElTVE9HUkFNX0RJRkYpOworCWVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJkaWZmLWFsZ29yaXRobSIsIGF2LCAmb3B0YXJnKSkpIHsKKwkJbG9uZyB2YWx1ZSA9IHBhcnNlX2FsZ29yaXRobV92YWx1ZShvcHRhcmcpOworCQlpZiAodmFsdWUgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJvcHRpb24gZGlmZi1hbGdvcml0aG0gYWNjZXB0cyBcIm15ZXJzXCIsICIKKwkJCQkgICAgICJcIm1pbmltYWxcIiwgXCJwYXRpZW5jZVwiIGFuZCBcImhpc3RvZ3JhbVwiIik7CisJCS8qIGNsZWFyIG91dCBwcmV2aW91cyBzZXR0aW5ncyAqLworCQlESUZGX1hETF9DTFIob3B0aW9ucywgTkVFRF9NSU5JTUFMKTsKKwkJb3B0aW9ucy0+eGRsX29wdHMgJj0gflhERl9ESUZGX0FMR09SSVRITV9NQVNLOworCQlvcHRpb25zLT54ZGxfb3B0cyB8PSB2YWx1ZTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0KKworCS8qIGZsYWdzIG9wdGlvbnMgKi8KKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tYmluYXJ5IikpIHsKKwkJZW5hYmxlX3BhdGNoX291dHB1dCgmb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdCk7CisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBCSU5BUlkpOworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tZnVsbC1pbmRleCIpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgRlVMTF9JTkRFWCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItYSIpIHx8ICFzdHJjbXAoYXJnLCAiLS10ZXh0IikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBURVhUKTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgIi1SIikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBSRVZFUlNFX0RJRkYpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1maW5kLWNvcGllcy1oYXJkZXIiKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEZJTkRfQ09QSUVTX0hBUkRFUik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZvbGxvdyIpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgRk9MTE9XX1JFTkFNRVMpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1mb2xsb3ciKSkgeworCQlESUZGX09QVF9DTFIob3B0aW9ucywgRk9MTE9XX1JFTkFNRVMpOworCQlESUZGX09QVF9DTFIob3B0aW9ucywgREVGQVVMVF9GT0xMT1dfUkVOQU1FUyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tY29sb3IiKSkKKwkJb3B0aW9ucy0+dXNlX2NvbG9yID0gMTsKKwllbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLWNvbG9yPSIsICZhcmcpKSB7CisJCWludCB2YWx1ZSA9IGdpdF9jb25maWdfY29sb3Jib29sKE5VTEwsIGFyZyk7CisJCWlmICh2YWx1ZSA8IDApCisJCQlyZXR1cm4gZXJyb3IoIm9wdGlvbiBgY29sb3InIGV4cGVjdHMgXCJhbHdheXNcIiwgXCJhdXRvXCIsIG9yIFwibmV2ZXJcIiIpOworCQlvcHRpb25zLT51c2VfY29sb3IgPSB2YWx1ZTsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWNvbG9yIikpCisJCW9wdGlvbnMtPnVzZV9jb2xvciA9IDA7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNvbG9yLXdvcmRzIikpIHsKKwkJb3B0aW9ucy0+dXNlX2NvbG9yID0gMTsKKwkJb3B0aW9ucy0+d29yZF9kaWZmID0gRElGRl9XT1JEU19DT0xPUjsKKwl9CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYXJnLCAiLS1jb2xvci13b3Jkcz0iLCAmYXJnKSkgeworCQlvcHRpb25zLT51c2VfY29sb3IgPSAxOworCQlvcHRpb25zLT53b3JkX2RpZmYgPSBESUZGX1dPUkRTX0NPTE9SOworCQlvcHRpb25zLT53b3JkX3JlZ2V4ID0gYXJnOworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0td29yZC1kaWZmIikpIHsKKwkJaWYgKG9wdGlvbnMtPndvcmRfZGlmZiA9PSBESUZGX1dPUkRTX05PTkUpCisJCQlvcHRpb25zLT53b3JkX2RpZmYgPSBESUZGX1dPUkRTX1BMQUlOOworCX0KKwllbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLXdvcmQtZGlmZj0iLCAmYXJnKSkgeworCQlpZiAoIXN0cmNtcChhcmcsICJwbGFpbiIpKQorCQkJb3B0aW9ucy0+d29yZF9kaWZmID0gRElGRl9XT1JEU19QTEFJTjsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJjb2xvciIpKSB7CisJCQlvcHRpb25zLT51c2VfY29sb3IgPSAxOworCQkJb3B0aW9ucy0+d29yZF9kaWZmID0gRElGRl9XT1JEU19DT0xPUjsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKGFyZywgInBvcmNlbGFpbiIpKQorCQkJb3B0aW9ucy0+d29yZF9kaWZmID0gRElGRl9XT1JEU19QT1JDRUxBSU47CisJCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAibm9uZSIpKQorCQkJb3B0aW9ucy0+d29yZF9kaWZmID0gRElGRl9XT1JEU19OT05FOworCQllbHNlCisJCQlkaWUoImJhZCAtLXdvcmQtZGlmZiBhcmd1bWVudDogJXMiLCBhcmcpOworCX0KKwllbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgid29yZC1kaWZmLXJlZ2V4IiwgYXYsICZvcHRhcmcpKSkgeworCQlpZiAob3B0aW9ucy0+d29yZF9kaWZmID09IERJRkZfV09SRFNfTk9ORSkKKwkJCW9wdGlvbnMtPndvcmRfZGlmZiA9IERJRkZfV09SRFNfUExBSU47CisJCW9wdGlvbnMtPndvcmRfcmVnZXggPSBvcHRhcmc7CisJCXJldHVybiBhcmdjb3VudDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWV4aXQtY29kZSIpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgRVhJVF9XSVRIX1NUQVRVUyk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXF1aWV0IikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBRVUlDSyk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWV4dC1kaWZmIikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBBTExPV19FWFRFUk5BTCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWV4dC1kaWZmIikpCisJCURJRkZfT1BUX0NMUihvcHRpb25zLCBBTExPV19FWFRFUk5BTCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXRleHRjb252IikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBBTExPV19URVhUQ09OVik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLXRleHRjb252IikpCisJCURJRkZfT1BUX0NMUihvcHRpb25zLCBBTExPV19URVhUQ09OVik7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWlnbm9yZS1zdWJtb2R1bGVzIikpIHsKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIE9WRVJSSURFX1NVQk1PRFVMRV9DT05GSUcpOworCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKG9wdGlvbnMsICJhbGwiKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGFyZywgIi0taWdub3JlLXN1Ym1vZHVsZXM9IiwgJmFyZykpIHsKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIE9WRVJSSURFX1NVQk1PRFVMRV9DT05GSUcpOworCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKG9wdGlvbnMsIGFyZyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc3VibW9kdWxlIikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBTVUJNT0RVTEVfTE9HKTsKKwllbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLXN1Ym1vZHVsZT0iLCAmYXJnKSkKKwkJcmV0dXJuIHBhcnNlX3N1Ym1vZHVsZV9vcHQob3B0aW9ucywgYXJnKTsKKwllbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLXdzLWVycm9yLWhpZ2hsaWdodD0iLCAmYXJnKSkKKwkJcmV0dXJuIHBhcnNlX3dzX2Vycm9yX2hpZ2hsaWdodChvcHRpb25zLCBhcmcpOworCisJLyogbWlzYyBvcHRpb25zICovCisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICIteiIpKQorCQlvcHRpb25zLT5saW5lX3Rlcm1pbmF0aW9uID0gMDsKKwllbHNlIGlmICgoYXJnY291bnQgPSBzaG9ydF9vcHQoJ2wnLCBhdiwgJm9wdGFyZykpKSB7CisJCW9wdGlvbnMtPnJlbmFtZV9saW1pdCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAxMCk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9CisJZWxzZSBpZiAoKGFyZ2NvdW50ID0gc2hvcnRfb3B0KCdTJywgYXYsICZvcHRhcmcpKSkgeworCQlvcHRpb25zLT5waWNrYXhlID0gb3B0YXJnOworCQlvcHRpb25zLT5waWNrYXhlX29wdHMgfD0gRElGRl9QSUNLQVhFX0tJTkRfUzsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gc2hvcnRfb3B0KCdHJywgYXYsICZvcHRhcmcpKSkgeworCQlvcHRpb25zLT5waWNrYXhlID0gb3B0YXJnOworCQlvcHRpb25zLT5waWNrYXhlX29wdHMgfD0gRElGRl9QSUNLQVhFX0tJTkRfRzsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tcGlja2F4ZS1hbGwiKSkKKwkJb3B0aW9ucy0+cGlja2F4ZV9vcHRzIHw9IERJRkZfUElDS0FYRV9BTEw7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXBpY2theGUtcmVnZXgiKSkKKwkJb3B0aW9ucy0+cGlja2F4ZV9vcHRzIHw9IERJRkZfUElDS0FYRV9SRUdFWDsKKwllbHNlIGlmICgoYXJnY291bnQgPSBzaG9ydF9vcHQoJ08nLCBhdiwgJm9wdGFyZykpKSB7CisJCW9wdGlvbnMtPm9yZGVyZmlsZSA9IG9wdGFyZzsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0KKwllbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiZGlmZi1maWx0ZXIiLCBhdiwgJm9wdGFyZykpKSB7CisJCWludCBvZmZlbmRpbmcgPSBwYXJzZV9kaWZmX2ZpbHRlcl9vcHQob3B0YXJnLCBvcHRpb25zKTsKKwkJaWYgKG9mZmVuZGluZykKKwkJCWRpZSgidW5rbm93biBjaGFuZ2UgY2xhc3MgJyVjJyBpbiAtLWRpZmYtZmlsdGVyPSVzIiwKKwkJCSAgICBvZmZlbmRpbmcsIG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFiYnJldiIpKQorCQlvcHRpb25zLT5hYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKKwllbHNlIGlmIChza2lwX3ByZWZpeChhcmcsICItLWFiYnJldj0iLCAmYXJnKSkgeworCQlvcHRpb25zLT5hYmJyZXYgPSBzdHJ0b3VsKGFyZywgTlVMTCwgMTApOworCQlpZiAob3B0aW9ucy0+YWJicmV2IDwgTUlOSU1VTV9BQkJSRVYpCisJCQlvcHRpb25zLT5hYmJyZXYgPSBNSU5JTVVNX0FCQlJFVjsKKwkJZWxzZSBpZiAoNDAgPCBvcHRpb25zLT5hYmJyZXYpCisJCQlvcHRpb25zLT5hYmJyZXYgPSA0MDsKKwl9CisJZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoInNyYy1wcmVmaXgiLCBhdiwgJm9wdGFyZykpKSB7CisJCW9wdGlvbnMtPmFfcHJlZml4ID0gb3B0YXJnOworCQlyZXR1cm4gYXJnY291bnQ7CisJfQorCWVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJkc3QtcHJlZml4IiwgYXYsICZvcHRhcmcpKSkgeworCQlvcHRpb25zLT5iX3ByZWZpeCA9IG9wdGFyZzsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0KKwllbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tcHJlZml4IikpCisJCW9wdGlvbnMtPmFfcHJlZml4ID0gb3B0aW9ucy0+Yl9wcmVmaXggPSAiIjsKKwllbHNlIGlmIChvcHRfYXJnKGFyZywgJ1wwJywgImludGVyLWh1bmstY29udGV4dCIsCisJCQkgJm9wdGlvbnMtPmludGVyaHVua2NvbnRleHQpKQorCQk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItVyIpKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgRlVOQ0NPTlRFWFQpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1mdW5jdGlvbi1jb250ZXh0IikpCisJCURJRkZfT1BUX1NFVChvcHRpb25zLCBGVU5DQ09OVEVYVCk7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWZ1bmN0aW9uLWNvbnRleHQiKSkKKwkJRElGRl9PUFRfQ0xSKG9wdGlvbnMsIEZVTkNDT05URVhUKTsKKwllbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgib3V0cHV0IiwgYXYsICZvcHRhcmcpKSkgeworCQlvcHRpb25zLT5maWxlID0gZm9wZW4ob3B0YXJnLCAidyIpOworCQlpZiAoIW9wdGlvbnMtPmZpbGUpCisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBvcGVuICclcyciLCBvcHRhcmcpOworCQlvcHRpb25zLT5jbG9zZV9maWxlID0gMTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworaW50IHBhcnNlX3JlbmFtZV9zY29yZShjb25zdCBjaGFyICoqY3BfcCkKK3sKKwl1bnNpZ25lZCBsb25nIG51bSwgc2NhbGU7CisJaW50IGNoLCBkb3Q7CisJY29uc3QgY2hhciAqY3AgPSAqY3BfcDsKKworCW51bSA9IDA7CisJc2NhbGUgPSAxOworCWRvdCA9IDA7CisJZm9yICg7OykgeworCQljaCA9ICpjcDsKKwkJaWYgKCAhZG90ICYmIGNoID09ICcuJyApIHsKKwkJCXNjYWxlID0gMTsKKwkJCWRvdCA9IDE7CisJCX0gZWxzZSBpZiAoIGNoID09ICclJyApIHsKKwkJCXNjYWxlID0gZG90ID8gc2NhbGUqMTAwIDogMTAwOworCQkJY3ArKzsJLyogJSBpcyBhbHdheXMgYXQgdGhlIGVuZCAqLworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoIGNoID49ICcwJyAmJiBjaCA8PSAnOScgKSB7CisJCQlpZiAoIHNjYWxlIDwgMTAwMDAwICkgeworCQkJCXNjYWxlICo9IDEwOworCQkJCW51bSA9IChudW0qMTApICsgKGNoLScwJyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCQljcCsrOworCX0KKwkqY3BfcCA9IGNwOworCisJLyogdXNlciBzYXlzIG51bSBkaXZpZGVkIGJ5IHNjYWxlIGFuZCB3ZSBzYXkgaW50ZXJuYWxseSB0aGF0CisJICogaXMgTUFYX1NDT1JFICogbnVtIC8gc2NhbGUuCisJICovCisJcmV0dXJuIChpbnQpKChudW0gPj0gc2NhbGUpID8gTUFYX1NDT1JFIDogKE1BWF9TQ09SRSAqIG51bSAvIHNjYWxlKSk7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9zY29yZW9wdF9wYXJzZShjb25zdCBjaGFyICpvcHQpCit7CisJaW50IG9wdDEsIG9wdDIsIGNtZDsKKworCWlmICgqb3B0KysgIT0gJy0nKQorCQlyZXR1cm4gLTE7CisJY21kID0gKm9wdCsrOworCWlmIChjbWQgPT0gJy0nKSB7CisJCS8qIGNvbnZlcnQgdGhlIGxvbmctZm9ybSBhcmd1bWVudHMgaW50byBzaG9ydC1mb3JtIHZlcnNpb25zICovCisJCWlmIChza2lwX3ByZWZpeChvcHQsICJicmVhay1yZXdyaXRlcyIsICZvcHQpKSB7CisJCQlpZiAoKm9wdCA9PSAwIHx8ICpvcHQrKyA9PSAnPScpCisJCQkJY21kID0gJ0InOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KG9wdCwgImZpbmQtY29waWVzIiwgJm9wdCkpIHsKKwkJCWlmICgqb3B0ID09IDAgfHwgKm9wdCsrID09ICc9JykKKwkJCQljbWQgPSAnQyc7CisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgob3B0LCAiZmluZC1yZW5hbWVzIiwgJm9wdCkpIHsKKwkJCWlmICgqb3B0ID09IDAgfHwgKm9wdCsrID09ICc9JykKKwkJCQljbWQgPSAnTSc7CisJCX0KKwl9CisJaWYgKGNtZCAhPSAnTScgJiYgY21kICE9ICdDJyAmJiBjbWQgIT0gJ0InKQorCQlyZXR1cm4gLTE7IC8qIHRoYXQgaXMgbm90IGEgLU0sIC1DLCBvciAtQiBvcHRpb24gKi8KKworCW9wdDEgPSBwYXJzZV9yZW5hbWVfc2NvcmUoJm9wdCk7CisJaWYgKGNtZCAhPSAnQicpCisJCW9wdDIgPSAwOworCWVsc2UgeworCQlpZiAoKm9wdCA9PSAwKQorCQkJb3B0MiA9IDA7CisJCWVsc2UgaWYgKCpvcHQgIT0gJy8nKQorCQkJcmV0dXJuIC0xOyAvKiB3ZSBleHBlY3QgLUI4MC85OSBvciAtQjgwICovCisJCWVsc2UgeworCQkJb3B0Kys7CisJCQlvcHQyID0gcGFyc2VfcmVuYW1lX3Njb3JlKCZvcHQpOworCQl9CisJfQorCWlmICgqb3B0ICE9IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gb3B0MSB8IChvcHQyIDw8IDE2KTsKK30KKworc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IGRpZmZfcXVldWVkX2RpZmY7CisKK3ZvaWQgZGlmZl9xKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcXVldWUsIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpkcCkKK3sKKwlBTExPQ19HUk9XKHF1ZXVlLT5xdWV1ZSwgcXVldWUtPm5yICsgMSwgcXVldWUtPmFsbG9jKTsKKwlxdWV1ZS0+cXVldWVbcXVldWUtPm5yKytdID0gZHA7Cit9CisKK3N0cnVjdCBkaWZmX2ZpbGVwYWlyICpkaWZmX3F1ZXVlKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcXVldWUsCisJCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkJIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d28pCit7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKmRwID0geGNhbGxvYygxLCBzaXplb2YoKmRwKSk7CisJZHAtPm9uZSA9IG9uZTsKKwlkcC0+dHdvID0gdHdvOworCWlmIChxdWV1ZSkKKwkJZGlmZl9xKHF1ZXVlLCBkcCk7CisJcmV0dXJuIGRwOworfQorCit2b2lkIGRpZmZfZnJlZV9maWxlcGFpcihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCkKK3sKKwlmcmVlX2ZpbGVzcGVjKHAtPm9uZSk7CisJZnJlZV9maWxlc3BlYyhwLT50d28pOworCWZyZWUocCk7Cit9CisKKy8qIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gZmluZF91bmlxdWVfYWJicmV2KCkgaW4gdGhhdAorICogaXQgc3R1ZmZzIHRoZSByZXN1bHQgd2l0aCBkb3RzIGZvciBhbGlnbm1lbnQuCisgKi8KK2NvbnN0IGNoYXIgKmRpZmZfdW5pcXVlX2FiYnJldihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgbGVuKQoreworCWludCBhYmJsZW47CisJY29uc3QgY2hhciAqYWJicmV2OworCWlmIChsZW4gPT0gNDApCisJCXJldHVybiBzaGExX3RvX2hleChzaGExKTsKKworCWFiYnJldiA9IGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBsZW4pOworCWFiYmxlbiA9IHN0cmxlbihhYmJyZXYpOworCWlmIChhYmJsZW4gPCAzNykgeworCQlzdGF0aWMgY2hhciBoZXhbNDFdOworCQlpZiAobGVuIDwgYWJibGVuICYmIGFiYmxlbiA8PSBsZW4gKyAyKQorCQkJeHNucHJpbnRmKGhleCwgc2l6ZW9mKGhleCksICIlcyUuKnMiLCBhYmJyZXYsIGxlbiszLWFiYmxlbiwgIi4uIik7CisJCWVsc2UKKwkJCXhzbnByaW50ZihoZXgsIHNpemVvZihoZXgpLCAiJXMuLi4iLCBhYmJyZXYpOworCQlyZXR1cm4gaGV4OworCX0KKwlyZXR1cm4gc2hhMV90b19oZXgoc2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZfZmx1c2hfcmF3KHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJaW50IGxpbmVfdGVybWluYXRpb24gPSBvcHQtPmxpbmVfdGVybWluYXRpb247CisJaW50IGludGVyX25hbWVfdGVybWluYXRpb24gPSBsaW5lX3Rlcm1pbmF0aW9uID8gJ1x0JyA6ICdcMCc7CisKKwlmcHJpbnRmKG9wdC0+ZmlsZSwgIiVzIiwgZGlmZl9saW5lX3ByZWZpeChvcHQpKTsKKwlpZiAoIShvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9OQU1FX1NUQVRVUykpIHsKKwkJZnByaW50ZihvcHQtPmZpbGUsICI6JTA2byAlMDZvICVzICIsIHAtPm9uZS0+bW9kZSwgcC0+dHdvLT5tb2RlLAorCQkJZGlmZl91bmlxdWVfYWJicmV2KHAtPm9uZS0+c2hhMSwgb3B0LT5hYmJyZXYpKTsKKwkJZnByaW50ZihvcHQtPmZpbGUsICIlcyAiLCBkaWZmX3VuaXF1ZV9hYmJyZXYocC0+dHdvLT5zaGExLCBvcHQtPmFiYnJldikpOworCX0KKwlpZiAocC0+c2NvcmUpIHsKKwkJZnByaW50ZihvcHQtPmZpbGUsICIlYyUwM2QlYyIsIHAtPnN0YXR1cywgc2ltaWxhcml0eV9pbmRleChwKSwKKwkJCWludGVyX25hbWVfdGVybWluYXRpb24pOworCX0gZWxzZSB7CisJCWZwcmludGYob3B0LT5maWxlLCAiJWMlYyIsIHAtPnN0YXR1cywgaW50ZXJfbmFtZV90ZXJtaW5hdGlvbik7CisJfQorCisJaWYgKHAtPnN0YXR1cyA9PSBESUZGX1NUQVRVU19DT1BJRUQgfHwKKwkgICAgcC0+c3RhdHVzID09IERJRkZfU1RBVFVTX1JFTkFNRUQpIHsKKwkJY29uc3QgY2hhciAqbmFtZV9hLCAqbmFtZV9iOworCQluYW1lX2EgPSBwLT5vbmUtPnBhdGg7CisJCW5hbWVfYiA9IHAtPnR3by0+cGF0aDsKKwkJc3RyaXBfcHJlZml4KG9wdC0+cHJlZml4X2xlbmd0aCwgJm5hbWVfYSwgJm5hbWVfYik7CisJCXdyaXRlX25hbWVfcXVvdGVkKG5hbWVfYSwgb3B0LT5maWxlLCBpbnRlcl9uYW1lX3Rlcm1pbmF0aW9uKTsKKwkJd3JpdGVfbmFtZV9xdW90ZWQobmFtZV9iLCBvcHQtPmZpbGUsIGxpbmVfdGVybWluYXRpb24pOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKm5hbWVfYSwgKm5hbWVfYjsKKwkJbmFtZV9hID0gcC0+b25lLT5tb2RlID8gcC0+b25lLT5wYXRoIDogcC0+dHdvLT5wYXRoOworCQluYW1lX2IgPSBOVUxMOworCQlzdHJpcF9wcmVmaXgob3B0LT5wcmVmaXhfbGVuZ3RoLCAmbmFtZV9hLCAmbmFtZV9iKTsKKwkJd3JpdGVfbmFtZV9xdW90ZWQobmFtZV9hLCBvcHQtPmZpbGUsIGxpbmVfdGVybWluYXRpb24pOworCX0KK30KKworaW50IGRpZmZfdW5tb2RpZmllZF9wYWlyKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCS8qIFRoaXMgZnVuY3Rpb24gaXMgd3JpdHRlbiBzdHJpY3RlciB0aGFuIG5lY2Vzc2FyeSB0byBzdXBwb3J0CisJICogdGhlIGN1cnJlbnRseSBpbXBsZW1lbnRlZCB0cmFuc2Zvcm1lcnMsIGJ1dCB0aGUgaWRlYSBpcyB0bworCSAqIGxldCB0cmFuc2Zvcm1lcnMgdG8gcHJvZHVjZSBkaWZmX2ZpbGVwYWlycyBhbnkgd2F5IHRoZXkgd2FudCwKKwkgKiBhbmQgZmlsdGVyIGFuZCBjbGVhbiB0aGVtIHVwIGhlcmUgYmVmb3JlIHByb2R1Y2luZyB0aGUgb3V0cHV0LgorCSAqLworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSBwLT5vbmUsICp0d28gPSBwLT50d287CisKKwlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKQorCQlyZXR1cm4gMDsgLyogdW5tZXJnZWQgaXMgaW50ZXJlc3RpbmcgKi8KKworCS8qIGRlbGV0aW9uLCBhZGRpdGlvbiwgbW9kZSBvciB0eXBlIGNoYW5nZQorCSAqIGFuZCByZW5hbWUgYXJlIGFsbCBpbnRlcmVzdGluZy4KKwkgKi8KKwlpZiAoRElGRl9GSUxFX1ZBTElEKG9uZSkgIT0gRElGRl9GSUxFX1ZBTElEKHR3bykgfHwKKwkgICAgRElGRl9QQUlSX01PREVfQ0hBTkdFRChwKSB8fAorCSAgICBzdHJjbXAob25lLT5wYXRoLCB0d28tPnBhdGgpKQorCQlyZXR1cm4gMDsKKworCS8qIGJvdGggYXJlIHZhbGlkIGFuZCBwb2ludCBhdCB0aGUgc2FtZSBwYXRoLiAgdGhhdCBpcywgd2UgYXJlCisJICogZGVhbGluZyB3aXRoIGEgY2hhbmdlLgorCSAqLworCWlmIChvbmUtPnNoYTFfdmFsaWQgJiYgdHdvLT5zaGExX3ZhbGlkICYmCisJICAgICFoYXNoY21wKG9uZS0+c2hhMSwgdHdvLT5zaGExKSAmJgorCSAgICAhb25lLT5kaXJ0eV9zdWJtb2R1bGUgJiYgIXR3by0+ZGlydHlfc3VibW9kdWxlKQorCQlyZXR1cm4gMTsgLyogbm8gY2hhbmdlICovCisJaWYgKCFvbmUtPnNoYTFfdmFsaWQgJiYgIXR3by0+c2hhMV92YWxpZCkKKwkJcmV0dXJuIDE7IC8qIGJvdGggbG9vayBhdCB0aGUgc2FtZSBmaWxlIG9uIHRoZSBmaWxlc3lzdGVtLiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkaWZmX2ZsdXNoX3BhdGNoKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQoreworCWlmIChkaWZmX3VubW9kaWZpZWRfcGFpcihwKSkKKwkJcmV0dXJuOworCisJaWYgKChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBTX0lTRElSKHAtPm9uZS0+bW9kZSkpIHx8CisJICAgIChESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSAmJiBTX0lTRElSKHAtPnR3by0+bW9kZSkpKQorCQlyZXR1cm47IC8qIG5vIHRyZWUgZGlmZnMgaW4gcGF0Y2ggZm9ybWF0ICovCisKKwlydW5fZGlmZihwLCBvKTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9mbHVzaF9zdGF0KHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkJICAgIHN0cnVjdCBkaWZmc3RhdF90ICpkaWZmc3RhdCkKK3sKKwlpZiAoZGlmZl91bm1vZGlmaWVkX3BhaXIocCkpCisJCXJldHVybjsKKworCWlmICgoRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkgJiYgU19JU0RJUihwLT5vbmUtPm1vZGUpKSB8fAorCSAgICAoRElGRl9GSUxFX1ZBTElEKHAtPnR3bykgJiYgU19JU0RJUihwLT50d28tPm1vZGUpKSkKKwkJcmV0dXJuOyAvKiBubyB1c2VmdWwgc3RhdCBmb3IgdHJlZSBkaWZmcyAqLworCisJcnVuX2RpZmZzdGF0KHAsIG8sIGRpZmZzdGF0KTsKK30KKworc3RhdGljIHZvaWQgZGlmZl9mbHVzaF9jaGVja2RpZmYoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsCisJCXN0cnVjdCBkaWZmX29wdGlvbnMgKm8pCit7CisJaWYgKGRpZmZfdW5tb2RpZmllZF9wYWlyKHApKQorCQlyZXR1cm47CisKKwlpZiAoKERJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmIFNfSVNESVIocC0+b25lLT5tb2RlKSkgfHwKKwkgICAgKERJRkZfRklMRV9WQUxJRChwLT50d28pICYmIFNfSVNESVIocC0+dHdvLT5tb2RlKSkpCisJCXJldHVybjsgLyogbm90aGluZyB0byBjaGVjayBpbiB0cmVlIGRpZmZzICovCisKKwlydW5fY2hlY2tkaWZmKHAsIG8pOworfQorCitpbnQgZGlmZl9xdWV1ZV9pc19lbXB0eSh2b2lkKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKQorCQlpZiAoIWRpZmZfdW5tb2RpZmllZF9wYWlyKHEtPnF1ZXVlW2ldKSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisjaWYgRElGRl9ERUJVRwordm9pZCBkaWZmX2RlYnVnX2ZpbGVzcGVjKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzLCBpbnQgeCwgY29uc3QgY2hhciAqb25lKQoreworCWZwcmludGYoc3RkZXJyLCAicXVldWVbJWRdICVzICglcykgJXMgJTA2byAlc1xuIiwKKwkJeCwgb25lID8gb25lIDogIiIsCisJCXMtPnBhdGgsCisJCURJRkZfRklMRV9WQUxJRChzKSA/ICJ2YWxpZCIgOiAiaW52YWxpZCIsCisJCXMtPm1vZGUsCisJCXMtPnNoYTFfdmFsaWQgPyBzaGExX3RvX2hleChzLT5zaGExKSA6ICIiKTsKKwlmcHJpbnRmKHN0ZGVyciwgInF1ZXVlWyVkXSAlcyBzaXplICVsdVxuIiwKKwkJeCwgb25lID8gb25lIDogIiIsCisJCXMtPnNpemUpOworfQorCit2b2lkIGRpZmZfZGVidWdfZmlsZXBhaXIoY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIGludCBpKQoreworCWRpZmZfZGVidWdfZmlsZXNwZWMocC0+b25lLCBpLCAib25lIik7CisJZGlmZl9kZWJ1Z19maWxlc3BlYyhwLT50d28sIGksICJ0d28iKTsKKwlmcHJpbnRmKHN0ZGVyciwgInNjb3JlICVkLCBzdGF0dXMgJWMgcmVuYW1lX3VzZWQgJWQgYnJva2VuICVkXG4iLAorCQlwLT5zY29yZSwgcC0+c3RhdHVzID8gcC0+c3RhdHVzIDogJz8nLAorCQlwLT5vbmUtPnJlbmFtZV91c2VkLCBwLT5icm9rZW5fcGFpcik7Cit9CisKK3ZvaWQgZGlmZl9kZWJ1Z19xdWV1ZShjb25zdCBjaGFyICptc2csIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSkKK3sKKwlpbnQgaTsKKwlpZiAobXNnKQorCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtc2cpOworCWZwcmludGYoc3RkZXJyLCAicS0+bnIgPSAlZFxuIiwgcS0+bnIpOworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWRpZmZfZGVidWdfZmlsZXBhaXIocCwgaSk7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGRpZmZfcmVzb2x2ZV9yZW5hbWVfY29weSh2b2lkKQoreworCWludCBpOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCisJZGlmZl9kZWJ1Z19xdWV1ZSgicmVzb2x2ZS1yZW5hbWUtY29weSIsIHEpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJcCA9IHEtPnF1ZXVlW2ldOworCQlwLT5zdGF0dXMgPSAwOyAvKiB1bmRlY2lkZWQgKi8KKwkJaWYgKERJRkZfUEFJUl9VTk1FUkdFRChwKSkKKwkJCXAtPnN0YXR1cyA9IERJRkZfU1RBVFVTX1VOTUVSR0VEOworCQllbHNlIGlmICghRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkpCisJCQlwLT5zdGF0dXMgPSBESUZGX1NUQVRVU19BRERFRDsKKwkJZWxzZSBpZiAoIURJRkZfRklMRV9WQUxJRChwLT50d28pKQorCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfREVMRVRFRDsKKwkJZWxzZSBpZiAoRElGRl9QQUlSX1RZUEVfQ0hBTkdFRChwKSkKKwkJCXAtPnN0YXR1cyA9IERJRkZfU1RBVFVTX1RZUEVfQ0hBTkdFRDsKKworCQkvKiBmcm9tIHRoaXMgcG9pbnQgb24sIHdlIGFyZSBkZWFsaW5nIHdpdGggYSBwYWlyCisJCSAqIHdob3NlIGJvdGggc2lkZXMgYXJlIHZhbGlkIGFuZCBvZiB0aGUgc2FtZSB0eXBlLCBpLmUuCisJCSAqIGVpdGhlciBpbi1wbGFjZSBlZGl0IG9yIHJlbmFtZS9jb3B5IGVkaXQuCisJCSAqLworCQllbHNlIGlmIChESUZGX1BBSVJfUkVOQU1FKHApKSB7CisJCQkvKgorCQkJICogQSByZW5hbWUgbWlnaHQgaGF2ZSByZS1jb25uZWN0ZWQgYSBicm9rZW4KKwkJCSAqIHBhaXIgdXAsIGNhdXNpbmcgdGhlIHBhdGhuYW1lcyB0byBiZSB0aGUKKwkJCSAqIHNhbWUgYWdhaW4uIElmIHNvLCB0aGF0J3Mgbm90IGEgcmVuYW1lIGF0CisJCQkgKiBhbGwsIGp1c3QgYSBtb2RpZmljYXRpb24uLgorCQkJICoKKwkJCSAqIE90aGVyd2lzZSwgc2VlIGlmIHRoaXMgc291cmNlIHdhcyB1c2VkIGZvcgorCQkJICogbXVsdGlwbGUgcmVuYW1lcywgaW4gd2hpY2ggY2FzZSB3ZSBkZWNyZW1lbnQKKwkJCSAqIHRoZSBjb3VudCwgYW5kIGNhbGwgaXQgYSBjb3B5LgorCQkJICovCisJCQlpZiAoIXN0cmNtcChwLT5vbmUtPnBhdGgsIHAtPnR3by0+cGF0aCkpCisJCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfTU9ESUZJRUQ7CisJCQllbHNlIGlmICgtLXAtPm9uZS0+cmVuYW1lX3VzZWQgPiAwKQorCQkJCXAtPnN0YXR1cyA9IERJRkZfU1RBVFVTX0NPUElFRDsKKwkJCWVsc2UKKwkJCQlwLT5zdGF0dXMgPSBESUZGX1NUQVRVU19SRU5BTUVEOworCQl9CisJCWVsc2UgaWYgKGhhc2hjbXAocC0+b25lLT5zaGExLCBwLT50d28tPnNoYTEpIHx8CisJCQkgcC0+b25lLT5tb2RlICE9IHAtPnR3by0+bW9kZSB8fAorCQkJIHAtPm9uZS0+ZGlydHlfc3VibW9kdWxlIHx8CisJCQkgcC0+dHdvLT5kaXJ0eV9zdWJtb2R1bGUgfHwKKwkJCSBpc19udWxsX3NoYTEocC0+b25lLT5zaGExKSkKKwkJCXAtPnN0YXR1cyA9IERJRkZfU1RBVFVTX01PRElGSUVEOworCQllbHNlIHsKKwkJCS8qIFRoaXMgaXMgYSAibm8tY2hhbmdlIiBlbnRyeSBhbmQgc2hvdWxkIG5vdAorCQkJICogaGFwcGVuIGFueW1vcmUsIGJ1dCBwcmVwYXJlIGZvciBicm9rZW4gY2FsbGVycy4KKwkJCSAqLworCQkJZXJyb3IoImZlZWRpbmcgdW5tb2RpZmllZCAlcyB0byBkaWZmY29yZSIsCisJCQkgICAgICBwLT5vbmUtPnBhdGgpOworCQkJcC0+c3RhdHVzID0gRElGRl9TVEFUVVNfVU5LTk9XTjsKKwkJfQorCX0KKwlkaWZmX2RlYnVnX3F1ZXVlKCJyZXNvbHZlLXJlbmFtZS1jb3B5IGRvbmUiLCBxKTsKK30KKworc3RhdGljIGludCBjaGVja19wYWlyX3N0YXR1cyhzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCkKK3sKKwlzd2l0Y2ggKHAtPnN0YXR1cykgeworCWNhc2UgRElGRl9TVEFUVVNfVU5LTk9XTjoKKwkJcmV0dXJuIDA7CisJY2FzZSAwOgorCQlkaWUoImludGVybmFsIGVycm9yIGluIGRpZmYtcmVzb2x2ZS1yZW5hbWUtY29weSIpOworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIHZvaWQgZmx1c2hfb25lX3BhaXIoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlpbnQgZm10ID0gb3B0LT5vdXRwdXRfZm9ybWF0OworCisJaWYgKGZtdCAmIERJRkZfRk9STUFUX0NIRUNLRElGRikKKwkJZGlmZl9mbHVzaF9jaGVja2RpZmYocCwgb3B0KTsKKwllbHNlIGlmIChmbXQgJiAoRElGRl9GT1JNQVRfUkFXIHwgRElGRl9GT1JNQVRfTkFNRV9TVEFUVVMpKQorCQlkaWZmX2ZsdXNoX3JhdyhwLCBvcHQpOworCWVsc2UgaWYgKGZtdCAmIERJRkZfRk9STUFUX05BTUUpIHsKKwkJY29uc3QgY2hhciAqbmFtZV9hLCAqbmFtZV9iOworCQluYW1lX2EgPSBwLT50d28tPnBhdGg7CisJCW5hbWVfYiA9IE5VTEw7CisJCXN0cmlwX3ByZWZpeChvcHQtPnByZWZpeF9sZW5ndGgsICZuYW1lX2EsICZuYW1lX2IpOworCQl3cml0ZV9uYW1lX3F1b3RlZChuYW1lX2EsIG9wdC0+ZmlsZSwgb3B0LT5saW5lX3Rlcm1pbmF0aW9uKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZmlsZV9tb2RlX25hbWUoRklMRSAqZmlsZSwgY29uc3QgY2hhciAqbmV3ZGVsZXRlLCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZnMpCit7CisJaWYgKGZzLT5tb2RlKQorCQlmcHJpbnRmKGZpbGUsICIgJXMgbW9kZSAlMDZvICIsIG5ld2RlbGV0ZSwgZnMtPm1vZGUpOworCWVsc2UKKwkJZnByaW50ZihmaWxlLCAiICVzICIsIG5ld2RlbGV0ZSk7CisJd3JpdGVfbmFtZV9xdW90ZWQoZnMtPnBhdGgsIGZpbGUsICdcbicpOworfQorCisKK3N0YXRpYyB2b2lkIHNob3dfbW9kZV9jaGFuZ2UoRklMRSAqZmlsZSwgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIGludCBzaG93X25hbWUsCisJCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4KQoreworCWlmIChwLT5vbmUtPm1vZGUgJiYgcC0+dHdvLT5tb2RlICYmIHAtPm9uZS0+bW9kZSAhPSBwLT50d28tPm1vZGUpIHsKKwkJZnByaW50ZihmaWxlLCAiJXMgbW9kZSBjaGFuZ2UgJTA2byA9PiAlMDZvJWMiLCBsaW5lX3ByZWZpeCwgcC0+b25lLT5tb2RlLAorCQkJcC0+dHdvLT5tb2RlLCBzaG93X25hbWUgPyAnICcgOiAnXG4nKTsKKwkJaWYgKHNob3dfbmFtZSkgeworCQkJd3JpdGVfbmFtZV9xdW90ZWQocC0+dHdvLT5wYXRoLCBmaWxlLCAnXG4nKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19yZW5hbWVfY29weShGSUxFICpmaWxlLCBjb25zdCBjaGFyICpyZW5hbWVjb3B5LCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwKKwkJCWNvbnN0IGNoYXIgKmxpbmVfcHJlZml4KQoreworCWNoYXIgKm5hbWVzID0gcHByaW50X3JlbmFtZShwLT5vbmUtPnBhdGgsIHAtPnR3by0+cGF0aCk7CisKKwlmcHJpbnRmKGZpbGUsICIgJXMgJXMgKCVkJSUpXG4iLCByZW5hbWVjb3B5LCBuYW1lcywgc2ltaWxhcml0eV9pbmRleChwKSk7CisJZnJlZShuYW1lcyk7CisJc2hvd19tb2RlX2NoYW5nZShmaWxlLCBwLCAwLCBsaW5lX3ByZWZpeCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZfc3VtbWFyeShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCUZJTEUgKmZpbGUgPSBvcHQtPmZpbGU7CisJY29uc3QgY2hhciAqbGluZV9wcmVmaXggPSBkaWZmX2xpbmVfcHJlZml4KG9wdCk7CisKKwlzd2l0Y2gocC0+c3RhdHVzKSB7CisJY2FzZSBESUZGX1NUQVRVU19ERUxFVEVEOgorCQlmcHV0cyhsaW5lX3ByZWZpeCwgZmlsZSk7CisJCXNob3dfZmlsZV9tb2RlX25hbWUoZmlsZSwgImRlbGV0ZSIsIHAtPm9uZSk7CisJCWJyZWFrOworCWNhc2UgRElGRl9TVEFUVVNfQURERUQ6CisJCWZwdXRzKGxpbmVfcHJlZml4LCBmaWxlKTsKKwkJc2hvd19maWxlX21vZGVfbmFtZShmaWxlLCAiY3JlYXRlIiwgcC0+dHdvKTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NUQVRVU19DT1BJRUQ6CisJCWZwdXRzKGxpbmVfcHJlZml4LCBmaWxlKTsKKwkJc2hvd19yZW5hbWVfY29weShmaWxlLCAiY29weSIsIHAsIGxpbmVfcHJlZml4KTsKKwkJYnJlYWs7CisJY2FzZSBESUZGX1NUQVRVU19SRU5BTUVEOgorCQlmcHV0cyhsaW5lX3ByZWZpeCwgZmlsZSk7CisJCXNob3dfcmVuYW1lX2NvcHkoZmlsZSwgInJlbmFtZSIsIHAsIGxpbmVfcHJlZml4KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKHAtPnNjb3JlKSB7CisJCQlmcHJpbnRmKGZpbGUsICIlcyByZXdyaXRlICIsIGxpbmVfcHJlZml4KTsKKwkJCXdyaXRlX25hbWVfcXVvdGVkKHAtPnR3by0+cGF0aCwgZmlsZSwgJyAnKTsKKwkJCWZwcmludGYoZmlsZSwgIiglZCUlKVxuIiwgc2ltaWxhcml0eV9pbmRleChwKSk7CisJCX0KKwkJc2hvd19tb2RlX2NoYW5nZShmaWxlLCBwLCAhcC0+c2NvcmUsIGxpbmVfcHJlZml4KTsKKwkJYnJlYWs7CisJfQorfQorCitzdHJ1Y3QgcGF0Y2hfaWRfdCB7CisJZ2l0X1NIQV9DVFggKmN0eDsKKwlpbnQgcGF0Y2hsZW47Cit9OworCitzdGF0aWMgaW50IHJlbW92ZV9zcGFjZShjaGFyICpsaW5lLCBpbnQgbGVuKQoreworCWludCBpOworCWNoYXIgKmRzdCA9IGxpbmU7CisJdW5zaWduZWQgY2hhciBjOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoIWlzc3BhY2UoKGMgPSBsaW5lW2ldKSkpCisJCQkqZHN0KysgPSBjOworCisJcmV0dXJuIGRzdCAtIGxpbmU7Cit9CisKK3N0YXRpYyB2b2lkIHBhdGNoX2lkX2NvbnN1bWUodm9pZCAqcHJpdiwgY2hhciAqbGluZSwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJc3RydWN0IHBhdGNoX2lkX3QgKmRhdGEgPSBwcml2OworCWludCBuZXdfbGVuOworCisJLyogSWdub3JlIGxpbmUgbnVtYmVycyB3aGVuIGNvbXB1dGluZyB0aGUgU0hBMSBvZiB0aGUgcGF0Y2ggKi8KKwlpZiAoc3RhcnRzX3dpdGgobGluZSwgIkBAIC0iKSkKKwkJcmV0dXJuOworCisJbmV3X2xlbiA9IHJlbW92ZV9zcGFjZShsaW5lLCBsZW4pOworCisJZ2l0X1NIQTFfVXBkYXRlKGRhdGEtPmN0eCwgbGluZSwgbmV3X2xlbik7CisJZGF0YS0+cGF0Y2hsZW4gKz0gbmV3X2xlbjsKK30KKworLyogcmV0dXJucyAwIHVwb24gc3VjY2VzcywgYW5kIHdyaXRlcyByZXN1bHQgaW50byBzaGExICovCitzdGF0aWMgaW50IGRpZmZfZ2V0X3BhdGNoX2lkKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJaW50IGk7CisJZ2l0X1NIQV9DVFggY3R4OworCXN0cnVjdCBwYXRjaF9pZF90IGRhdGE7CisJY2hhciBidWZmZXJbUEFUSF9NQVggKiA0ICsgMjBdOworCisJZ2l0X1NIQTFfSW5pdCgmY3R4KTsKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihzdHJ1Y3QgcGF0Y2hfaWRfdCkpOworCWRhdGEuY3R4ID0gJmN0eDsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXhwcGFyYW1fdCB4cHA7CisJCXhkZW1pdGNvbmZfdCB4ZWNmZzsKKwkJbW1maWxlX3QgbWYxLCBtZjI7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWludCBsZW4xLCBsZW4yOworCisJCW1lbXNldCgmeHBwLCAwLCBzaXplb2YoeHBwKSk7CisJCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCQlpZiAocC0+c3RhdHVzID09IDApCisJCQlyZXR1cm4gZXJyb3IoImludGVybmFsIGRpZmYgc3RhdHVzIGVycm9yIik7CisJCWlmIChwLT5zdGF0dXMgPT0gRElGRl9TVEFUVVNfVU5LTk9XTikKKwkJCWNvbnRpbnVlOworCQlpZiAoZGlmZl91bm1vZGlmaWVkX3BhaXIocCkpCisJCQljb250aW51ZTsKKwkJaWYgKChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBTX0lTRElSKHAtPm9uZS0+bW9kZSkpIHx8CisJCSAgICAoRElGRl9GSUxFX1ZBTElEKHAtPnR3bykgJiYgU19JU0RJUihwLT50d28tPm1vZGUpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKQorCQkJY29udGludWU7CisKKwkJZGlmZl9maWxsX3NoYTFfaW5mbyhwLT5vbmUpOworCQlkaWZmX2ZpbGxfc2hhMV9pbmZvKHAtPnR3byk7CisJCWlmIChmaWxsX21tZmlsZSgmbWYxLCBwLT5vbmUpIDwgMCB8fAorCQkJCWZpbGxfbW1maWxlKCZtZjIsIHAtPnR3bykgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gcmVhZCBmaWxlcyB0byBkaWZmIik7CisKKwkJbGVuMSA9IHJlbW92ZV9zcGFjZShwLT5vbmUtPnBhdGgsIHN0cmxlbihwLT5vbmUtPnBhdGgpKTsKKwkJbGVuMiA9IHJlbW92ZV9zcGFjZShwLT50d28tPnBhdGgsIHN0cmxlbihwLT50d28tPnBhdGgpKTsKKwkJaWYgKHAtPm9uZS0+bW9kZSA9PSAwKQorCQkJbGVuMSA9IHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisJCQkJCSJkaWZmLS1naXRhLyUuKnNiLyUuKnMiCisJCQkJCSJuZXdmaWxlbW9kZSUwNm8iCisJCQkJCSItLS0vZGV2L251bGwiCisJCQkJCSIrKytiLyUuKnMiLAorCQkJCQlsZW4xLCBwLT5vbmUtPnBhdGgsCisJCQkJCWxlbjIsIHAtPnR3by0+cGF0aCwKKwkJCQkJcC0+dHdvLT5tb2RlLAorCQkJCQlsZW4yLCBwLT50d28tPnBhdGgpOworCQllbHNlIGlmIChwLT50d28tPm1vZGUgPT0gMCkKKwkJCWxlbjEgPSBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAorCQkJCQkiZGlmZi0tZ2l0YS8lLipzYi8lLipzIgorCQkJCQkiZGVsZXRlZGZpbGVtb2RlJTA2byIKKwkJCQkJIi0tLWEvJS4qcyIKKwkJCQkJIisrKy9kZXYvbnVsbCIsCisJCQkJCWxlbjEsIHAtPm9uZS0+cGF0aCwKKwkJCQkJbGVuMiwgcC0+dHdvLT5wYXRoLAorCQkJCQlwLT5vbmUtPm1vZGUsCisJCQkJCWxlbjEsIHAtPm9uZS0+cGF0aCk7CisJCWVsc2UKKwkJCWxlbjEgPSBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLAorCQkJCQkiZGlmZi0tZ2l0YS8lLipzYi8lLipzIgorCQkJCQkiLS0tYS8lLipzIgorCQkJCQkiKysrYi8lLipzIiwKKwkJCQkJbGVuMSwgcC0+b25lLT5wYXRoLAorCQkJCQlsZW4yLCBwLT50d28tPnBhdGgsCisJCQkJCWxlbjEsIHAtPm9uZS0+cGF0aCwKKwkJCQkJbGVuMiwgcC0+dHdvLT5wYXRoKTsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIGJ1ZmZlciwgbGVuMSk7CisKKwkJaWYgKGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KHAtPm9uZSkgfHwKKwkJICAgIGRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KHAtPnR3bykpIHsKKwkJCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCBzaGExX3RvX2hleChwLT5vbmUtPnNoYTEpLCA0MCk7CisJCQlnaXRfU0hBMV9VcGRhdGUoJmN0eCwgc2hhMV90b19oZXgocC0+dHdvLT5zaGExKSwgNDApOworCQkJY29udGludWU7CisJCX0KKworCQl4cHAuZmxhZ3MgPSAwOworCQl4ZWNmZy5jdHhsZW4gPSAzOworCQl4ZWNmZy5mbGFncyA9IDA7CisJCWlmICh4ZGlfZGlmZl9vdXRmKCZtZjEsICZtZjIsIHBhdGNoX2lkX2NvbnN1bWUsICZkYXRhLAorCQkJCSAgJnhwcCwgJnhlY2ZnKSkKKwkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGdlbmVyYXRlIHBhdGNoLWlkIGRpZmYgZm9yICVzIiwKKwkJCQkgICAgIHAtPm9uZS0+cGF0aCk7CisJfQorCisJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmN0eCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkaWZmX2ZsdXNoX3BhdGNoX2lkKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJaW50IGk7CisJaW50IHJlc3VsdCA9IGRpZmZfZ2V0X3BhdGNoX2lkKG9wdGlvbnMsIHNoYTEpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspCisJCWRpZmZfZnJlZV9maWxlcGFpcihxLT5xdWV1ZVtpXSk7CisKKwlmcmVlKHEtPnF1ZXVlKTsKKwlESUZGX1FVRVVFX0NMRUFSKHEpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBpc19zdW1tYXJ5X2VtcHR5KGNvbnN0IHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisKKwkJc3dpdGNoIChwLT5zdGF0dXMpIHsKKwkJY2FzZSBESUZGX1NUQVRVU19ERUxFVEVEOgorCQljYXNlIERJRkZfU1RBVFVTX0FEREVEOgorCQljYXNlIERJRkZfU1RBVFVTX0NPUElFRDoKKwkJY2FzZSBESUZGX1NUQVRVU19SRU5BTUVEOgorCQkJcmV0dXJuIDA7CisJCWRlZmF1bHQ6CisJCQlpZiAocC0+c2NvcmUpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAocC0+b25lLT5tb2RlICYmIHAtPnR3by0+bW9kZSAmJgorCQkJICAgIHAtPm9uZS0+bW9kZSAhPSBwLT50d28tPm1vZGUpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgcmVuYW1lX2xpbWl0X3dhcm5pbmdbXSA9CisiaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIHdhcyBza2lwcGVkIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iOworCitzdGF0aWMgY29uc3QgY2hhciBkZWdyYWRlX2NjX3RvX2Nfd2FybmluZ1tdID0KKyJvbmx5IGZvdW5kIGNvcGllcyBmcm9tIG1vZGlmaWVkIHBhdGhzIGR1ZSB0byB0b28gbWFueSBmaWxlcy4iOworCitzdGF0aWMgY29uc3QgY2hhciByZW5hbWVfbGltaXRfYWR2aWNlW10gPQorInlvdSBtYXkgd2FudCB0byBzZXQgeW91ciAlcyB2YXJpYWJsZSB0byBhdCBsZWFzdCAiCisiJWQgYW5kIHJldHJ5IHRoZSBjb21tYW5kLiI7CisKK3ZvaWQgZGlmZl93YXJuX3JlbmFtZV9saW1pdChjb25zdCBjaGFyICp2YXJuYW1lLCBpbnQgbmVlZGVkLCBpbnQgZGVncmFkZWRfY2MpCit7CisJaWYgKGRlZ3JhZGVkX2NjKQorCQl3YXJuaW5nKGRlZ3JhZGVfY2NfdG9fY193YXJuaW5nKTsKKwllbHNlIGlmIChuZWVkZWQpCisJCXdhcm5pbmcocmVuYW1lX2xpbWl0X3dhcm5pbmcpOworCWVsc2UKKwkJcmV0dXJuOworCWlmICgwIDwgbmVlZGVkICYmIG5lZWRlZCA8IDMyNzY3KQorCQl3YXJuaW5nKHJlbmFtZV9saW1pdF9hZHZpY2UsIHZhcm5hbWUsIG5lZWRlZCk7Cit9CisKK3ZvaWQgZGlmZl9mbHVzaChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCWludCBpLCBvdXRwdXRfZm9ybWF0ID0gb3B0aW9ucy0+b3V0cHV0X2Zvcm1hdDsKKwlpbnQgc2VwYXJhdG9yID0gMDsKKwlpbnQgZGlyc3RhdF9ieV9saW5lID0gMDsKKworCS8qCisJICogT3JkZXI6IHJhdywgc3RhdCwgc3VtbWFyeSwgcGF0Y2gKKwkgKiBvcjogICAgbmFtZS9uYW1lLXN0YXR1cy9jaGVja2RpZmYgKG90aGVyIGJpdHMgY2xlYXIpCisJICovCisJaWYgKCFxLT5ucikKKwkJZ290byBmcmVlX3F1ZXVlOworCisJaWYgKG91dHB1dF9mb3JtYXQgJiAoRElGRl9GT1JNQVRfUkFXIHwKKwkJCSAgICAgRElGRl9GT1JNQVRfTkFNRSB8CisJCQkgICAgIERJRkZfRk9STUFUX05BTUVfU1RBVFVTIHwKKwkJCSAgICAgRElGRl9GT1JNQVRfQ0hFQ0tESUZGKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJCWlmIChjaGVja19wYWlyX3N0YXR1cyhwKSkKKwkJCQlmbHVzaF9vbmVfcGFpcihwLCBvcHRpb25zKTsKKwkJfQorCQlzZXBhcmF0b3IrKzsKKwl9CisKKwlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0RJUlNUQVQgJiYgRElGRl9PUFRfVFNUKG9wdGlvbnMsIERJUlNUQVRfQllfTElORSkpCisJCWRpcnN0YXRfYnlfbGluZSA9IDE7CisKKwlpZiAob3V0cHV0X2Zvcm1hdCAmIChESUZGX0ZPUk1BVF9ESUZGU1RBVHxESUZGX0ZPUk1BVF9TSE9SVFNUQVR8RElGRl9GT1JNQVRfTlVNU1RBVCkgfHwKKwkgICAgZGlyc3RhdF9ieV9saW5lKSB7CisJCXN0cnVjdCBkaWZmc3RhdF90IGRpZmZzdGF0OworCisJCW1lbXNldCgmZGlmZnN0YXQsIDAsIHNpemVvZihzdHJ1Y3QgZGlmZnN0YXRfdCkpOworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJCWlmIChjaGVja19wYWlyX3N0YXR1cyhwKSkKKwkJCQlkaWZmX2ZsdXNoX3N0YXQocCwgb3B0aW9ucywgJmRpZmZzdGF0KTsKKwkJfQorCQlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX05VTVNUQVQpCisJCQlzaG93X251bXN0YXQoJmRpZmZzdGF0LCBvcHRpb25zKTsKKwkJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9ESUZGU1RBVCkKKwkJCXNob3dfc3RhdHMoJmRpZmZzdGF0LCBvcHRpb25zKTsKKwkJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9TSE9SVFNUQVQpCisJCQlzaG93X3Nob3J0c3RhdHMoJmRpZmZzdGF0LCBvcHRpb25zKTsKKwkJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9ESVJTVEFUICYmIGRpcnN0YXRfYnlfbGluZSkKKwkJCXNob3dfZGlyc3RhdF9ieV9saW5lKCZkaWZmc3RhdCwgb3B0aW9ucyk7CisJCWZyZWVfZGlmZnN0YXRfaW5mbygmZGlmZnN0YXQpOworCQlzZXBhcmF0b3IrKzsKKwl9CisJaWYgKChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfRElSU1RBVCkgJiYgIWRpcnN0YXRfYnlfbGluZSkKKwkJc2hvd19kaXJzdGF0KG9wdGlvbnMpOworCisJaWYgKG91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9TVU1NQVJZICYmICFpc19zdW1tYXJ5X2VtcHR5KHEpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCQlkaWZmX3N1bW1hcnkob3B0aW9ucywgcS0+cXVldWVbaV0pOworCQl9CisJCXNlcGFyYXRvcisrOworCX0KKworCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfTk9fT1VUUFVUICYmCisJICAgIERJRkZfT1BUX1RTVChvcHRpb25zLCBFWElUX1dJVEhfU1RBVFVTKSAmJgorCSAgICBESUZGX09QVF9UU1Qob3B0aW9ucywgRElGRl9GUk9NX0NPTlRFTlRTKSkgeworCQkvKgorCQkgKiBydW4gZGlmZl9mbHVzaF9wYXRjaCBmb3IgdGhlIGV4aXQgc3RhdHVzLiBzZXR0aW5nCisJCSAqIG9wdGlvbnMtPmZpbGUgdG8gL2Rldi9udWxsIHNob3VsZCBiZSBzYWZlLCBiZWNhdXNlIHdlCisJCSAqIGFyZW4ndCBzdXBwb3NlZCB0byBwcm9kdWNlIGFueSBvdXRwdXQgYW55d2F5LgorCQkgKi8KKwkJaWYgKG9wdGlvbnMtPmNsb3NlX2ZpbGUpCisJCQlmY2xvc2Uob3B0aW9ucy0+ZmlsZSk7CisJCW9wdGlvbnMtPmZpbGUgPSBmb3BlbigiL2Rldi9udWxsIiwgInciKTsKKwkJaWYgKCFvcHRpb25zLT5maWxlKQorCQkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiAvZGV2L251bGwiKTsKKwkJb3B0aW9ucy0+Y2xvc2VfZmlsZSA9IDE7CisJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQkJaWYgKGNoZWNrX3BhaXJfc3RhdHVzKHApKQorCQkJCWRpZmZfZmx1c2hfcGF0Y2gocCwgb3B0aW9ucyk7CisJCQlpZiAob3B0aW9ucy0+Zm91bmRfY2hhbmdlcykKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChvdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfUEFUQ0gpIHsKKwkJaWYgKHNlcGFyYXRvcikgeworCQkJZnByaW50ZihvcHRpb25zLT5maWxlLCAiJXMlYyIsCisJCQkJZGlmZl9saW5lX3ByZWZpeChvcHRpb25zKSwKKwkJCQlvcHRpb25zLT5saW5lX3Rlcm1pbmF0aW9uKTsKKwkJCWlmIChvcHRpb25zLT5zdGF0X3NlcCkgeworCQkJCS8qIGF0dGFjaCBwYXRjaCBpbnN0ZWFkIG9mIGlubGluZSAqLworCQkJCWZwdXRzKG9wdGlvbnMtPnN0YXRfc2VwLCBvcHRpb25zLT5maWxlKTsKKwkJCX0KKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQkJaWYgKGNoZWNrX3BhaXJfc3RhdHVzKHApKQorCQkJCWRpZmZfZmx1c2hfcGF0Y2gocCwgb3B0aW9ucyk7CisJCX0KKwl9CisKKwlpZiAob3V0cHV0X2Zvcm1hdCAmIERJRkZfRk9STUFUX0NBTExCQUNLKQorCQlvcHRpb25zLT5mb3JtYXRfY2FsbGJhY2socSwgb3B0aW9ucywgb3B0aW9ucy0+Zm9ybWF0X2NhbGxiYWNrX2RhdGEpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspCisJCWRpZmZfZnJlZV9maWxlcGFpcihxLT5xdWV1ZVtpXSk7CitmcmVlX3F1ZXVlOgorCWZyZWUocS0+cXVldWUpOworCURJRkZfUVVFVUVfQ0xFQVIocSk7CisJaWYgKG9wdGlvbnMtPmNsb3NlX2ZpbGUpCisJCWZjbG9zZShvcHRpb25zLT5maWxlKTsKKworCS8qCisJICogUmVwb3J0IHRoZSBjb250ZW50LWxldmVsIGRpZmZlcmVuY2VzIHdpdGggSEFTX0NIQU5HRVM7CisJICogZGlmZl9hZGRyZW1vdmUvZGlmZl9jaGFuZ2UgZG9lcyBub3Qgc2V0IHRoZSBiaXQgd2hlbgorCSAqIERJRkZfRlJPTV9DT05URU5UUyBpcyBpbiBlZmZlY3QgKGUuZy4gd2l0aCAtdykuCisJICovCisJaWYgKERJRkZfT1BUX1RTVChvcHRpb25zLCBESUZGX0ZST01fQ09OVEVOVFMpKSB7CisJCWlmIChvcHRpb25zLT5mb3VuZF9jaGFuZ2VzKQorCQkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKKwkJZWxzZQorCQkJRElGRl9PUFRfQ0xSKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfZmlsdGVyKGNvbnN0IHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCXJldHVybiAoKChwLT5zdGF0dXMgPT0gRElGRl9TVEFUVVNfTU9ESUZJRUQpICYmCisJCSAoKHAtPnNjb3JlICYmCisJCSAgIGZpbHRlcl9iaXRfdHN0KERJRkZfU1RBVFVTX0ZJTFRFUl9CUk9LRU4sIG9wdGlvbnMpKSB8fAorCQkgICghcC0+c2NvcmUgJiYKKwkJICAgZmlsdGVyX2JpdF90c3QoRElGRl9TVEFUVVNfTU9ESUZJRUQsIG9wdGlvbnMpKSkpIHx8CisJCSgocC0+c3RhdHVzICE9IERJRkZfU1RBVFVTX01PRElGSUVEKSAmJgorCQkgZmlsdGVyX2JpdF90c3QocC0+c3RhdHVzLCBvcHRpb25zKSkpOworfQorCitzdGF0aWMgdm9pZCBkaWZmY29yZV9hcHBseV9maWx0ZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEgPSAmZGlmZl9xdWV1ZWRfZGlmZjsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3Qgb3V0cTsKKworCURJRkZfUVVFVUVfQ0xFQVIoJm91dHEpOworCisJaWYgKCFvcHRpb25zLT5maWx0ZXIpCisJCXJldHVybjsKKworCWlmIChmaWx0ZXJfYml0X3RzdChESUZGX1NUQVRVU19GSUxURVJfQU9OLCBvcHRpb25zKSkgeworCQlpbnQgZm91bmQ7CisJCWZvciAoaSA9IGZvdW5kID0gMDsgIWZvdW5kICYmIGkgPCBxLT5ucjsgaSsrKSB7CisJCQlpZiAobWF0Y2hfZmlsdGVyKG9wdGlvbnMsIHEtPnF1ZXVlW2ldKSkKKwkJCQlmb3VuZCsrOworCQl9CisJCWlmIChmb3VuZCkKKwkJCXJldHVybjsKKworCQkvKiBvdGhlcndpc2Ugd2Ugd2lsbCBjbGVhciB0aGUgd2hvbGUgcXVldWUKKwkJICogYnkgY29weWluZyB0aGUgZW1wdHkgb3V0cSBhdCB0aGUgZW5kIG9mIHRoaXMKKwkJICogZnVuY3Rpb24sIGJ1dCBmaXJzdCBjbGVhciB0aGUgY3VycmVudCBlbnRyaWVzCisJCSAqIGluIHRoZSBxdWV1ZS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKQorCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHEtPnF1ZXVlW2ldKTsKKwl9CisJZWxzZSB7CisJCS8qIE9ubHkgdGhlIG1hdGNoaW5nIG9uZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCQlpZiAobWF0Y2hfZmlsdGVyKG9wdGlvbnMsIHApKQorCQkJCWRpZmZfcSgmb3V0cSwgcCk7CisJCQllbHNlCisJCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHApOworCQl9CisJfQorCWZyZWUocS0+cXVldWUpOworCSpxID0gb3V0cTsKK30KKworLyogQ2hlY2sgd2hldGhlciB0d28gZmlsZXNwZWNzIHdpdGggdGhlIHNhbWUgbW9kZSBhbmQgc2l6ZSBhcmUgaWRlbnRpY2FsICovCitzdGF0aWMgaW50IGRpZmZfZmlsZXNwZWNfaXNfaWRlbnRpY2FsKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bykKK3sKKwlpZiAoU19JU0dJVExJTksob25lLT5tb2RlKSkKKwkJcmV0dXJuIDA7CisJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMob25lLCAwKSkKKwkJcmV0dXJuIDA7CisJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWModHdvLCAwKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICFtZW1jbXAob25lLT5kYXRhLCB0d28tPmRhdGEsIG9uZS0+c2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgZGlmZl9maWxlc3BlY19jaGVja19zdGF0X3VubWF0Y2goc3RydWN0IGRpZmZfZmlsZXBhaXIgKnApCit7CisJaWYgKHAtPmRvbmVfc2tpcF9zdGF0X3VubWF0Y2gpCisJCXJldHVybiBwLT5za2lwX3N0YXRfdW5tYXRjaF9yZXN1bHQ7CisKKwlwLT5kb25lX3NraXBfc3RhdF91bm1hdGNoID0gMTsKKwlwLT5za2lwX3N0YXRfdW5tYXRjaF9yZXN1bHQgPSAwOworCS8qCisJICogMS4gRW50cmllcyB0aGF0IGNvbWUgZnJvbSBzdGF0IGluZm8gZGlydGluZXNzCisJICogICAgYWx3YXlzIGhhdmUgYm90aCBzaWRlcyAoaW93LCBub3QgY3JlYXRlL2RlbGV0ZSksCisJICogICAgb25lIHNpZGUgb2YgdGhlIG9iamVjdCBuYW1lIGlzIHVua25vd24sIHdpdGgKKwkgKiAgICB0aGUgc2FtZSBtb2RlIGFuZCBzaXplLiAgS2VlcCB0aGUgb25lcyB0aGF0CisJICogICAgZG8gbm90IG1hdGNoIHRoZXNlIGNyaXRlcmlhLiAgVGhleSBoYXZlIHJlYWwKKwkgKiAgICBkaWZmZXJlbmNlcy4KKwkgKgorCSAqIDIuIEF0IHRoaXMgcG9pbnQsIHRoZSBmaWxlIGlzIGtub3duIHRvIGJlIG1vZGlmaWVkLAorCSAqICAgIHdpdGggdGhlIHNhbWUgbW9kZSBhbmQgc2l6ZSwgYW5kIHRoZSBvYmplY3QKKwkgKiAgICBuYW1lIG9mIG9uZSBzaWRlIGlzIHVua25vd24uICBOZWVkIHRvIGluc3BlY3QKKwkgKiAgICB0aGUgaWRlbnRpY2FsIGNvbnRlbnRzLgorCSAqLworCWlmICghRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkgfHwgLyogKDEpICovCisJICAgICFESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSB8fAorCSAgICAocC0+b25lLT5zaGExX3ZhbGlkICYmIHAtPnR3by0+c2hhMV92YWxpZCkgfHwKKwkgICAgKHAtPm9uZS0+bW9kZSAhPSBwLT50d28tPm1vZGUpIHx8CisJICAgIGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocC0+b25lLCBDSEVDS19TSVpFX09OTFkpIHx8CisJICAgIGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMocC0+dHdvLCBDSEVDS19TSVpFX09OTFkpIHx8CisJICAgIChwLT5vbmUtPnNpemUgIT0gcC0+dHdvLT5zaXplKSB8fAorCSAgICAhZGlmZl9maWxlc3BlY19pc19pZGVudGljYWwocC0+b25lLCBwLT50d28pKSAvKiAoMikgKi8KKwkJcC0+c2tpcF9zdGF0X3VubWF0Y2hfcmVzdWx0ID0gMTsKKwlyZXR1cm4gcC0+c2tpcF9zdGF0X3VubWF0Y2hfcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBkaWZmY29yZV9za2lwX3N0YXRfdW5tYXRjaChzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0KQoreworCWludCBpOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCURJRkZfUVVFVUVfQ0xFQVIoJm91dHEpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKworCQlpZiAoZGlmZl9maWxlc3BlY19jaGVja19zdGF0X3VubWF0Y2gocCkpCisJCQlkaWZmX3EoJm91dHEsIHApOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBUaGUgY2FsbGVyIGNhbiBzdWJ0cmFjdCAxIGZyb20gc2tpcF9zdGF0X3VubWF0Y2gKKwkJCSAqIHRvIGRldGVybWluZSBob3cgbWFueSBwYXRocyB3ZXJlIGRpcnR5IG9ubHkKKwkJCSAqIGR1ZSB0byBzdGF0IGluZm8gbWlzbWF0Y2guCisJCQkgKi8KKwkJCWlmICghRElGRl9PUFRfVFNUKGRpZmZvcHQsIE5PX0lOREVYKSkKKwkJCQlkaWZmb3B0LT5za2lwX3N0YXRfdW5tYXRjaCsrOworCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHApOworCQl9CisJfQorCWZyZWUocS0+cXVldWUpOworCSpxID0gb3V0cTsKK30KKworc3RhdGljIGludCBkaWZmbmFtZWNtcChjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmEgPSAqKChjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKilhXyk7CisJY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKmIgPSAqKChjb25zdCBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKiliXyk7CisJY29uc3QgY2hhciAqbmFtZV9hLCAqbmFtZV9iOworCisJbmFtZV9hID0gYS0+b25lID8gYS0+b25lLT5wYXRoIDogYS0+dHdvLT5wYXRoOworCW5hbWVfYiA9IGItPm9uZSA/IGItPm9uZS0+cGF0aCA6IGItPnR3by0+cGF0aDsKKwlyZXR1cm4gc3RyY21wKG5hbWVfYSwgbmFtZV9iKTsKK30KKwordm9pZCBkaWZmY29yZV9maXhfZGlmZl9pbmRleChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXFzb3J0KHEtPnF1ZXVlLCBxLT5uciwgc2l6ZW9mKHEtPnF1ZXVlWzBdKSwgZGlmZm5hbWVjbXApOworfQorCit2b2lkIGRpZmZjb3JlX3N0ZChzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCS8qIE5PVEUgcGxlYXNlIGtlZXAgdGhlIGZvbGxvd2luZyBpbiBzeW5jIHdpdGggZGlmZl90cmVlX2NvbWJpbmVkKCkgKi8KKwlpZiAob3B0aW9ucy0+c2tpcF9zdGF0X3VubWF0Y2gpCisJCWRpZmZjb3JlX3NraXBfc3RhdF91bm1hdGNoKG9wdGlvbnMpOworCWlmICghb3B0aW9ucy0+Zm91bmRfZm9sbG93KSB7CisJCS8qIFNlZSB0cnlfdG9fZm9sbG93X3JlbmFtZXMoKSBpbiB0cmVlLWRpZmYuYyAqLworCQlpZiAob3B0aW9ucy0+YnJlYWtfb3B0ICE9IC0xKQorCQkJZGlmZmNvcmVfYnJlYWsob3B0aW9ucy0+YnJlYWtfb3B0KTsKKwkJaWYgKG9wdGlvbnMtPmRldGVjdF9yZW5hbWUpCisJCQlkaWZmY29yZV9yZW5hbWUob3B0aW9ucyk7CisJCWlmIChvcHRpb25zLT5icmVha19vcHQgIT0gLTEpCisJCQlkaWZmY29yZV9tZXJnZV9icm9rZW4oKTsKKwl9CisJaWYgKG9wdGlvbnMtPnBpY2theGUpCisJCWRpZmZjb3JlX3BpY2theGUob3B0aW9ucyk7CisJaWYgKG9wdGlvbnMtPm9yZGVyZmlsZSkKKwkJZGlmZmNvcmVfb3JkZXIob3B0aW9ucy0+b3JkZXJmaWxlKTsKKwlpZiAoIW9wdGlvbnMtPmZvdW5kX2ZvbGxvdykKKwkJLyogU2VlIHRyeV90b19mb2xsb3dfcmVuYW1lcygpIGluIHRyZWUtZGlmZi5jICovCisJCWRpZmZfcmVzb2x2ZV9yZW5hbWVfY29weSgpOworCWRpZmZjb3JlX2FwcGx5X2ZpbHRlcihvcHRpb25zKTsKKworCWlmIChkaWZmX3F1ZXVlZF9kaWZmLm5yICYmICFESUZGX09QVF9UU1Qob3B0aW9ucywgRElGRl9GUk9NX0NPTlRFTlRTKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKKwllbHNlCisJCURJRkZfT1BUX0NMUihvcHRpb25zLCBIQVNfQ0hBTkdFUyk7CisKKwlvcHRpb25zLT5mb3VuZF9mb2xsb3cgPSAwOworfQorCitpbnQgZGlmZl9yZXN1bHRfY29kZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIGludCBzdGF0dXMpCit7CisJaW50IHJlc3VsdCA9IDA7CisKKwlkaWZmX3dhcm5fcmVuYW1lX2xpbWl0KCJkaWZmLnJlbmFtZUxpbWl0IiwKKwkJCSAgICAgICBvcHQtPm5lZWRlZF9yZW5hbWVfbGltaXQsCisJCQkgICAgICAgb3B0LT5kZWdyYWRlZF9jY190b19jKTsKKwlpZiAoIURJRkZfT1BUX1RTVChvcHQsIEVYSVRfV0lUSF9TVEFUVVMpICYmCisJICAgICEob3B0LT5vdXRwdXRfZm9ybWF0ICYgRElGRl9GT1JNQVRfQ0hFQ0tESUZGKSkKKwkJcmV0dXJuIHN0YXR1czsKKwlpZiAoRElGRl9PUFRfVFNUKG9wdCwgRVhJVF9XSVRIX1NUQVRVUykgJiYKKwkgICAgRElGRl9PUFRfVFNUKG9wdCwgSEFTX0NIQU5HRVMpKQorCQlyZXN1bHQgfD0gMDE7CisJaWYgKChvcHQtPm91dHB1dF9mb3JtYXQgJiBESUZGX0ZPUk1BVF9DSEVDS0RJRkYpICYmCisJICAgIERJRkZfT1BUX1RTVChvcHQsIENIRUNLX0ZBSUxFRCkpCisJCXJlc3VsdCB8PSAwMjsKKwlyZXR1cm4gcmVzdWx0OworfQorCitpbnQgZGlmZl9jYW5fcXVpdF9lYXJseShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJcmV0dXJuIChESUZGX09QVF9UU1Qob3B0LCBRVUlDSykgJiYKKwkJIW9wdC0+ZmlsdGVyICYmCisJCURJRkZfT1BUX1RTVChvcHQsIEhBU19DSEFOR0VTKSk7Cit9CisKKy8qCisgKiBTaGFsbCBjaGFuZ2VzIHRvIHRoaXMgc3VibW9kdWxlIGJlIGlnbm9yZWQ/CisgKgorICogU3VibW9kdWxlIGNoYW5nZXMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gYmUgaWdub3JlZCBzZXBhcmF0ZWx5IGZvciBlYWNoIHBhdGgsCisgKiBidXQgdGhhdCBjb25maWd1cmF0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyAqLworc3RhdGljIGludCBpc19zdWJtb2R1bGVfaWdub3JlZChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCBpZ25vcmVkID0gMDsKKwl1bnNpZ25lZCBvcmlnX2ZsYWdzID0gb3B0aW9ucy0+ZmxhZ3M7CisJaWYgKCFESUZGX09QVF9UU1Qob3B0aW9ucywgT1ZFUlJJREVfU1VCTU9EVUxFX0NPTkZJRykpCisJCXNldF9kaWZmb3B0X2ZsYWdzX2Zyb21fc3VibW9kdWxlX2NvbmZpZyhvcHRpb25zLCBwYXRoKTsKKwlpZiAoRElGRl9PUFRfVFNUKG9wdGlvbnMsIElHTk9SRV9TVUJNT0RVTEVTKSkKKwkJaWdub3JlZCA9IDE7CisJb3B0aW9ucy0+ZmxhZ3MgPSBvcmlnX2ZsYWdzOworCXJldHVybiBpZ25vcmVkOworfQorCit2b2lkIGRpZmZfYWRkcmVtb3ZlKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgICBpbnQgYWRkcmVtb3ZlLCB1bnNpZ25lZCBtb2RlLAorCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJICAgIGludCBzaGExX3ZhbGlkLAorCQkgICAgY29uc3QgY2hhciAqY29uY2F0cGF0aCwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKQoreworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsICp0d287CisKKwlpZiAoU19JU0dJVExJTksobW9kZSkgJiYgaXNfc3VibW9kdWxlX2lnbm9yZWQoY29uY2F0cGF0aCwgb3B0aW9ucykpCisJCXJldHVybjsKKworCS8qIFRoaXMgbWF5IGxvb2sgb2RkLCBidXQgaXQgaXMgYSBwcmVwYXJhdGlvbiBmb3IKKwkgKiBmZWVkaW5nICJ0aGVyZSBhcmUgdW5jaGFuZ2VkIGZpbGVzIHdoaWNoIHNob3VsZAorCSAqIG5vdCBwcm9kdWNlIGRpZmZzLCBidXQgd2hlbiB5b3UgYXJlIGRvaW5nIGNvcHkKKwkgKiBkZXRlY3Rpb24geW91IHdvdWxkIG5lZWQgdGhlbSwgc28gaGVyZSB0aGV5IGFyZSIKKwkgKiBlbnRyaWVzIHRvIHRoZSBkaWZmLWNvcmUuICBUaGV5IHdpbGwgYmUgcHJlZml4ZWQKKwkgKiB3aXRoIHNvbWV0aGluZyBsaWtlICc9JyBvciAnKicgKEkgaGF2ZW4ndCBkZWNpZGVkCisJICogd2hpY2ggYnV0IHNob3VsZCBub3QgbWFrZSBhbnkgZGlmZmVyZW5jZSkuCisJICogRmVlZGluZyB0aGUgc2FtZSBuZXcgYW5kIG9sZCB0byBkaWZmX2NoYW5nZSgpCisJICogYWxzbyBoYXMgdGhlIHNhbWUgZWZmZWN0LgorCSAqIEJlZm9yZSB0aGUgZmluYWwgb3V0cHV0IGhhcHBlbnMsIHRoZXkgYXJlIHBydW5lZCBhZnRlcgorCSAqIG1lcmdlZCBpbnRvIHJlbmFtZS9jb3B5IHBhaXJzIGFzIGFwcHJvcHJpYXRlLgorCSAqLworCWlmIChESUZGX09QVF9UU1Qob3B0aW9ucywgUkVWRVJTRV9ESUZGKSkKKwkJYWRkcmVtb3ZlID0gKGFkZHJlbW92ZSA9PSAnKycgPyAnLScgOgorCQkJICAgICBhZGRyZW1vdmUgPT0gJy0nID8gJysnIDogYWRkcmVtb3ZlKTsKKworCWlmIChvcHRpb25zLT5wcmVmaXggJiYKKwkgICAgc3RybmNtcChjb25jYXRwYXRoLCBvcHRpb25zLT5wcmVmaXgsIG9wdGlvbnMtPnByZWZpeF9sZW5ndGgpKQorCQlyZXR1cm47CisKKwlvbmUgPSBhbGxvY19maWxlc3BlYyhjb25jYXRwYXRoKTsKKwl0d28gPSBhbGxvY19maWxlc3BlYyhjb25jYXRwYXRoKTsKKworCWlmIChhZGRyZW1vdmUgIT0gJysnKQorCQlmaWxsX2ZpbGVzcGVjKG9uZSwgc2hhMSwgc2hhMV92YWxpZCwgbW9kZSk7CisJaWYgKGFkZHJlbW92ZSAhPSAnLScpIHsKKwkJZmlsbF9maWxlc3BlYyh0d28sIHNoYTEsIHNoYTFfdmFsaWQsIG1vZGUpOworCQl0d28tPmRpcnR5X3N1Ym1vZHVsZSA9IGRpcnR5X3N1Ym1vZHVsZTsKKwl9CisKKwlkaWZmX3F1ZXVlKCZkaWZmX3F1ZXVlZF9kaWZmLCBvbmUsIHR3byk7CisJaWYgKCFESUZGX09QVF9UU1Qob3B0aW9ucywgRElGRl9GUk9NX0NPTlRFTlRTKSkKKwkJRElGRl9PUFRfU0VUKG9wdGlvbnMsIEhBU19DSEFOR0VTKTsKK30KKwordm9pZCBkaWZmX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAorCQkgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCisJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwKKwkJIGludCBvbGRfc2hhMV92YWxpZCwgaW50IG5ld19zaGExX3ZhbGlkLAorCQkgY29uc3QgY2hhciAqY29uY2F0cGF0aCwKKwkJIHVuc2lnbmVkIG9sZF9kaXJ0eV9zdWJtb2R1bGUsIHVuc2lnbmVkIG5ld19kaXJ0eV9zdWJtb2R1bGUpCit7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSwgKnR3bzsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcDsKKworCWlmIChTX0lTR0lUTElOSyhvbGRfbW9kZSkgJiYgU19JU0dJVExJTksobmV3X21vZGUpICYmCisJICAgIGlzX3N1Ym1vZHVsZV9pZ25vcmVkKGNvbmNhdHBhdGgsIG9wdGlvbnMpKQorCQlyZXR1cm47CisKKwlpZiAoRElGRl9PUFRfVFNUKG9wdGlvbnMsIFJFVkVSU0VfRElGRikpIHsKKwkJdW5zaWduZWQgdG1wOworCQljb25zdCB1bnNpZ25lZCBjaGFyICp0bXBfYzsKKwkJdG1wID0gb2xkX21vZGU7IG9sZF9tb2RlID0gbmV3X21vZGU7IG5ld19tb2RlID0gdG1wOworCQl0bXBfYyA9IG9sZF9zaGExOyBvbGRfc2hhMSA9IG5ld19zaGExOyBuZXdfc2hhMSA9IHRtcF9jOworCQl0bXAgPSBvbGRfc2hhMV92YWxpZDsgb2xkX3NoYTFfdmFsaWQgPSBuZXdfc2hhMV92YWxpZDsKKwkJCW5ld19zaGExX3ZhbGlkID0gdG1wOworCQl0bXAgPSBvbGRfZGlydHlfc3VibW9kdWxlOyBvbGRfZGlydHlfc3VibW9kdWxlID0gbmV3X2RpcnR5X3N1Ym1vZHVsZTsKKwkJCW5ld19kaXJ0eV9zdWJtb2R1bGUgPSB0bXA7CisJfQorCisJaWYgKG9wdGlvbnMtPnByZWZpeCAmJgorCSAgICBzdHJuY21wKGNvbmNhdHBhdGgsIG9wdGlvbnMtPnByZWZpeCwgb3B0aW9ucy0+cHJlZml4X2xlbmd0aCkpCisJCXJldHVybjsKKworCW9uZSA9IGFsbG9jX2ZpbGVzcGVjKGNvbmNhdHBhdGgpOworCXR3byA9IGFsbG9jX2ZpbGVzcGVjKGNvbmNhdHBhdGgpOworCWZpbGxfZmlsZXNwZWMob25lLCBvbGRfc2hhMSwgb2xkX3NoYTFfdmFsaWQsIG9sZF9tb2RlKTsKKwlmaWxsX2ZpbGVzcGVjKHR3bywgbmV3X3NoYTEsIG5ld19zaGExX3ZhbGlkLCBuZXdfbW9kZSk7CisJb25lLT5kaXJ0eV9zdWJtb2R1bGUgPSBvbGRfZGlydHlfc3VibW9kdWxlOworCXR3by0+ZGlydHlfc3VibW9kdWxlID0gbmV3X2RpcnR5X3N1Ym1vZHVsZTsKKwlwID0gZGlmZl9xdWV1ZSgmZGlmZl9xdWV1ZWRfZGlmZiwgb25lLCB0d28pOworCisJaWYgKERJRkZfT1BUX1RTVChvcHRpb25zLCBESUZGX0ZST01fQ09OVEVOVFMpKQorCQlyZXR1cm47CisKKwlpZiAoRElGRl9PUFRfVFNUKG9wdGlvbnMsIFFVSUNLKSAmJiBvcHRpb25zLT5za2lwX3N0YXRfdW5tYXRjaCAmJgorCSAgICAhZGlmZl9maWxlc3BlY19jaGVja19zdGF0X3VubWF0Y2gocCkpCisJCXJldHVybjsKKworCURJRkZfT1BUX1NFVChvcHRpb25zLCBIQVNfQ0hBTkdFUyk7Cit9CisKK3N0cnVjdCBkaWZmX2ZpbGVwYWlyICpkaWZmX3VubWVyZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLCAqdHdvOworCisJaWYgKG9wdGlvbnMtPnByZWZpeCAmJgorCSAgICBzdHJuY21wKHBhdGgsIG9wdGlvbnMtPnByZWZpeCwgb3B0aW9ucy0+cHJlZml4X2xlbmd0aCkpCisJCXJldHVybiBOVUxMOworCisJb25lID0gYWxsb2NfZmlsZXNwZWMocGF0aCk7CisJdHdvID0gYWxsb2NfZmlsZXNwZWMocGF0aCk7CisJcGFpciA9IGRpZmZfcXVldWUoJmRpZmZfcXVldWVkX2RpZmYsIG9uZSwgdHdvKTsKKwlwYWlyLT5pc191bm1lcmdlZCA9IDE7CisJcmV0dXJuIHBhaXI7Cit9CisKK3N0YXRpYyBjaGFyICpydW5fdGV4dGNvbnYoY29uc3QgY2hhciAqcGdtLCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3BlYywKKwkJc2l6ZV90ICpvdXRzaXplKQoreworCXN0cnVjdCBkaWZmX3RlbXBmaWxlICp0ZW1wOworCWNvbnN0IGNoYXIgKmFyZ3ZbM107CisJY29uc3QgY2hhciAqKmFyZyA9IGFyZ3Y7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2hpbGQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZXJyID0gMDsKKworCXRlbXAgPSBwcmVwYXJlX3RlbXBfZmlsZShzcGVjLT5wYXRoLCBzcGVjKTsKKwkqYXJnKysgPSBwZ207CisJKmFyZysrID0gdGVtcC0+bmFtZTsKKwkqYXJnID0gTlVMTDsKKworCWNoaWxkLnVzZV9zaGVsbCA9IDE7CisJY2hpbGQuYXJndiA9IGFyZ3Y7CisJY2hpbGQub3V0ID0gLTE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNoaWxkKSkgeworCQlyZW1vdmVfdGVtcGZpbGUoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKHN0cmJ1Zl9yZWFkKCZidWYsIGNoaWxkLm91dCwgMCkgPCAwKQorCQllcnIgPSBlcnJvcigiZXJyb3IgcmVhZGluZyBmcm9tIHRleHRjb252IGNvbW1hbmQgJyVzJyIsIHBnbSk7CisJY2xvc2UoY2hpbGQub3V0KTsKKworCWlmIChmaW5pc2hfY29tbWFuZCgmY2hpbGQpIHx8IGVycikgeworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmVtb3ZlX3RlbXBmaWxlKCk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZW1vdmVfdGVtcGZpbGUoKTsKKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIG91dHNpemUpOworfQorCitzaXplX3QgZmlsbF90ZXh0Y29udihzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcml2ZXIsCisJCSAgICAgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRmLAorCQkgICAgIGNoYXIgKipvdXRidWYpCit7CisJc2l6ZV90IHNpemU7CisKKwlpZiAoIWRyaXZlciB8fCAhZHJpdmVyLT50ZXh0Y29udikgeworCQlpZiAoIURJRkZfRklMRV9WQUxJRChkZikpIHsKKwkJCSpvdXRidWYgPSAiIjsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKGRmLCAwKSkKKwkJCWRpZSgidW5hYmxlIHRvIHJlYWQgZmlsZXMgdG8gZGlmZiIpOworCQkqb3V0YnVmID0gZGYtPmRhdGE7CisJCXJldHVybiBkZi0+c2l6ZTsKKwl9CisKKwlpZiAoZHJpdmVyLT50ZXh0Y29udl9jYWNoZSAmJiBkZi0+c2hhMV92YWxpZCkgeworCQkqb3V0YnVmID0gbm90ZXNfY2FjaGVfZ2V0KGRyaXZlci0+dGV4dGNvbnZfY2FjaGUsIGRmLT5zaGExLAorCQkJCQkgICZzaXplKTsKKwkJaWYgKCpvdXRidWYpCisJCQlyZXR1cm4gc2l6ZTsKKwl9CisKKwkqb3V0YnVmID0gcnVuX3RleHRjb252KGRyaXZlci0+dGV4dGNvbnYsIGRmLCAmc2l6ZSk7CisJaWYgKCEqb3V0YnVmKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGZpbGVzIHRvIGRpZmYiKTsKKworCWlmIChkcml2ZXItPnRleHRjb252X2NhY2hlICYmIGRmLT5zaGExX3ZhbGlkKSB7CisJCS8qIGlnbm9yZSBlcnJvcnMsIGFzIHdlIG1pZ2h0IGJlIGluIGEgcmVhZG9ubHkgcmVwb3NpdG9yeSAqLworCQlub3Rlc19jYWNoZV9wdXQoZHJpdmVyLT50ZXh0Y29udl9jYWNoZSwgZGYtPnNoYTEsICpvdXRidWYsCisJCQkJc2l6ZSk7CisJCS8qCisJCSAqIHdlIGNvdWxkIHNhdmUgdXAgY2hhbmdlcyBhbmQgZmx1c2ggdGhlbSBhbGwgYXQgdGhlIGVuZCwKKwkJICogYnV0IHdlIHdvdWxkIG5lZWQgYW4gZXh0cmEgY2FsbCBhZnRlciBhbGwgZGlmZmluZyBpcyBkb25lLgorCQkgKiBTaW5jZSBnZW5lcmF0aW5nIGEgY2FjaGUgZW50cnkgaXMgdGhlIHNsb3cgcGF0aCBhbnl3YXksCisJCSAqIHRoaXMgZXh0cmEgb3ZlcmhlYWQgcHJvYmFibHkgaXNuJ3QgYSBiaWcgZGVhbC4KKwkJICovCisJCW5vdGVzX2NhY2hlX3dyaXRlKGRyaXZlci0+dGV4dGNvbnZfY2FjaGUpOworCX0KKworCXJldHVybiBzaXplOworfQorCit2b2lkIHNldHVwX2RpZmZfcGFnZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCS8qCisJICogSWYgdGhlIHVzZXIgYXNrZWQgZm9yIG91ciBleGl0IGNvZGUsIHRoZW4gZWl0aGVyIHRoZXkgd2FudCAtLXF1aWV0CisJICogb3IgLS1leGl0LWNvZGUuIFdlIHNob3VsZCBkZWZpbml0ZWx5IG5vdCBib3RoZXIgd2l0aCBhIHBhZ2VyIGluIHRoZQorCSAqIGZvcm1lciBjYXNlLCBhcyB3ZSB3aWxsIGdlbmVyYXRlIG5vIG91dHB1dC4gU2luY2Ugd2Ugc3RpbGwgcHJvcGVybHkKKwkgKiByZXBvcnQgb3VyIGV4aXQgY29kZSBldmVuIHdoZW4gYSBwYWdlciBpcyBydW4sIHdlIF9jb3VsZF8gcnVuIGEKKwkgKiBwYWdlciB3aXRoIC0tZXhpdC1jb2RlLiBCdXQgc2luY2Ugd2UgaGF2ZSBub3QgZG9uZSBzbyBoaXN0b3JpY2FsbHksCisJICogYW5kIGJlY2F1c2UgaXQgaXMgZWFzeSB0byBmaW5kIHBlb3BsZSBvbmVsaW5lIGFkdmlzaW5nICJnaXQgZGlmZgorCSAqIC0tZXhpdC1jb2RlIiBpbiBob29rcyBhbmQgb3RoZXIgc2NyaXB0cywgd2UgZG8gbm90IGRvIHNvLgorCSAqLworCWlmICghRElGRl9PUFRfVFNUKG9wdCwgRVhJVF9XSVRIX1NUQVRVUykgJiYKKwkgICAgY2hlY2tfcGFnZXJfY29uZmlnKCJkaWZmIikgIT0gMCkKKwkJc2V0dXBfcGFnZXIoKTsKK30KZGlmZiAtLWdpdCBhL2RpZmYuaCBiL2RpZmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzIwOGFkCi0tLSAvZGV2L251bGwKKysrIGIvZGlmZi5oCkBAIC0wLDAgKzEsMzY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpZm5kZWYgRElGRl9ICisjZGVmaW5lIERJRkZfSAorCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKworc3RydWN0IHJldl9pbmZvOworc3RydWN0IGRpZmZfb3B0aW9uczsKK3N0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdDsKK3N0cnVjdCBzdHJidWY7CitzdHJ1Y3QgZGlmZl9maWxlc3BlYzsKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXI7CitzdHJ1Y3Qgc2hhMV9hcnJheTsKK3N0cnVjdCBjb21taXQ7CitzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGg7CisKK3R5cGVkZWYgaW50ICgqcGF0aGNoYW5nZV9mbl90KShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwYXRoKTsKKwordHlwZWRlZiB2b2lkICgqY2hhbmdlX2ZuX3QpKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSB1bnNpZ25lZCBvbGRfbW9kZSwgdW5zaWduZWQgbmV3X21vZGUsCisJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKKwkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAorCQkgaW50IG9sZF9zaGExX3ZhbGlkLCBpbnQgbmV3X3NoYTFfdmFsaWQsCisJCSBjb25zdCBjaGFyICpmdWxscGF0aCwKKwkJIHVuc2lnbmVkIG9sZF9kaXJ0eV9zdWJtb2R1bGUsIHVuc2lnbmVkIG5ld19kaXJ0eV9zdWJtb2R1bGUpOworCit0eXBlZGVmIHZvaWQgKCphZGRfcmVtb3ZlX2ZuX3QpKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCSAgICBpbnQgYWRkcmVtb3ZlLCB1bnNpZ25lZCBtb2RlLAorCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJICAgIGludCBzaGExX3ZhbGlkLAorCQkgICAgY29uc3QgY2hhciAqZnVsbHBhdGgsIHVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSk7CisKK3R5cGVkZWYgdm9pZCAoKmRpZmZfZm9ybWF0X2ZuX3QpKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywgdm9pZCAqZGF0YSk7CisKK3R5cGVkZWYgc3RydWN0IHN0cmJ1ZiAqKCpkaWZmX3ByZWZpeF9mbl90KShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQsIHZvaWQgKmRhdGEpOworCisjZGVmaW5lIERJRkZfRk9STUFUX1JBVwkJMHgwMDAxCisjZGVmaW5lIERJRkZfRk9STUFUX0RJRkZTVEFUCTB4MDAwMgorI2RlZmluZSBESUZGX0ZPUk1BVF9OVU1TVEFUCTB4MDAwNAorI2RlZmluZSBESUZGX0ZPUk1BVF9TVU1NQVJZCTB4MDAwOAorI2RlZmluZSBESUZGX0ZPUk1BVF9QQVRDSAkweDAwMTAKKyNkZWZpbmUgRElGRl9GT1JNQVRfU0hPUlRTVEFUCTB4MDAyMAorI2RlZmluZSBESUZGX0ZPUk1BVF9ESVJTVEFUCTB4MDA0MAorCisvKiBUaGVzZSBvdmVycmlkZSBhbGwgYWJvdmUgKi8KKyNkZWZpbmUgRElGRl9GT1JNQVRfTkFNRQkweDAxMDAKKyNkZWZpbmUgRElGRl9GT1JNQVRfTkFNRV9TVEFUVVMJMHgwMjAwCisjZGVmaW5lIERJRkZfRk9STUFUX0NIRUNLRElGRgkweDA0MDAKKworLyogU2FtZSBhcyBvdXRwdXRfZm9ybWF0ID0gMCBidXQgd2Uga25vdyB0aGF0IC1zIGZsYWcgd2FzIGdpdmVuCisgKiBhbmQgd2Ugc2hvdWxkIG5vdCBnaXZlIGRlZmF1bHQgdmFsdWUgdG8gb3V0cHV0X2Zvcm1hdC4KKyAqLworI2RlZmluZSBESUZGX0ZPUk1BVF9OT19PVVRQVVQJMHgwODAwCisKKyNkZWZpbmUgRElGRl9GT1JNQVRfQ0FMTEJBQ0sJMHgxMDAwCisKKyNkZWZpbmUgRElGRl9PUFRfUkVDVVJTSVZFICAgICAgICAgICAoMSA8PCAgMCkKKyNkZWZpbmUgRElGRl9PUFRfVFJFRV9JTl9SRUNVUlNJVkUgICAoMSA8PCAgMSkKKyNkZWZpbmUgRElGRl9PUFRfQklOQVJZICAgICAgICAgICAgICAoMSA8PCAgMikKKyNkZWZpbmUgRElGRl9PUFRfVEVYVCAgICAgICAgICAgICAgICAoMSA8PCAgMykKKyNkZWZpbmUgRElGRl9PUFRfRlVMTF9JTkRFWCAgICAgICAgICAoMSA8PCAgNCkKKyNkZWZpbmUgRElGRl9PUFRfU0lMRU5UX09OX1JFTU9WRSAgICAoMSA8PCAgNSkKKyNkZWZpbmUgRElGRl9PUFRfRklORF9DT1BJRVNfSEFSREVSICAoMSA8PCAgNikKKyNkZWZpbmUgRElGRl9PUFRfRk9MTE9XX1JFTkFNRVMgICAgICAoMSA8PCAgNykKKyNkZWZpbmUgRElGRl9PUFRfUkVOQU1FX0VNUFRZICAgICAgICAoMSA8PCAgOCkKKy8qICgxIDw8ICA5KSB1bnVzZWQgKi8KKyNkZWZpbmUgRElGRl9PUFRfSEFTX0NIQU5HRVMgICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgRElGRl9PUFRfUVVJQ0sgICAgICAgICAgICAgICAoMSA8PCAxMSkKKyNkZWZpbmUgRElGRl9PUFRfTk9fSU5ERVggICAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgRElGRl9PUFRfQUxMT1dfRVhURVJOQUwgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgRElGRl9PUFRfRVhJVF9XSVRIX1NUQVRVUyAgICAoMSA8PCAxNCkKKyNkZWZpbmUgRElGRl9PUFRfUkVWRVJTRV9ESUZGICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgRElGRl9PUFRfQ0hFQ0tfRkFJTEVEICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgRElGRl9PUFRfUkVMQVRJVkVfTkFNRSAgICAgICAoMSA8PCAxNykKKyNkZWZpbmUgRElGRl9PUFRfSUdOT1JFX1NVQk1PRFVMRVMgICAoMSA8PCAxOCkKKyNkZWZpbmUgRElGRl9PUFRfRElSU1RBVF9DVU1VTEFUSVZFICAoMSA8PCAxOSkKKyNkZWZpbmUgRElGRl9PUFRfRElSU1RBVF9CWV9GSUxFICAgICAoMSA8PCAyMCkKKyNkZWZpbmUgRElGRl9PUFRfQUxMT1dfVEVYVENPTlYgICAgICAoMSA8PCAyMSkKKyNkZWZpbmUgRElGRl9PUFRfRElGRl9GUk9NX0NPTlRFTlRTICAoMSA8PCAyMikKKyNkZWZpbmUgRElGRl9PUFRfU1VCTU9EVUxFX0xPRyAgICAgICAoMSA8PCAyMykKKyNkZWZpbmUgRElGRl9PUFRfRElSVFlfU1VCTU9EVUxFUyAgICAoMSA8PCAyNCkKKyNkZWZpbmUgRElGRl9PUFRfSUdOT1JFX1VOVFJBQ0tFRF9JTl9TVUJNT0RVTEVTICgxIDw8IDI1KQorI2RlZmluZSBESUZGX09QVF9JR05PUkVfRElSVFlfU1VCTU9EVUxFUyAoMSA8PCAyNikKKyNkZWZpbmUgRElGRl9PUFRfT1ZFUlJJREVfU1VCTU9EVUxFX0NPTkZJRyAoMSA8PCAyNykKKyNkZWZpbmUgRElGRl9PUFRfRElSU1RBVF9CWV9MSU5FICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgRElGRl9PUFRfRlVOQ0NPTlRFWFQgICAgICAgICAoMSA8PCAyOSkKKyNkZWZpbmUgRElGRl9PUFRfUElDS0FYRV9JR05PUkVfQ0FTRSAoMSA8PCAzMCkKKyNkZWZpbmUgRElGRl9PUFRfREVGQVVMVF9GT0xMT1dfUkVOQU1FUyAoMSA8PCAzMSkKKworI2RlZmluZSBESUZGX09QVF9UU1Qob3B0cywgZmxhZykgICAgKChvcHRzKS0+ZmxhZ3MgJiBESUZGX09QVF8jI2ZsYWcpCisjZGVmaW5lIERJRkZfT1BUX1RPVUNIRUQob3B0cywgZmxhZykgICAgKChvcHRzKS0+dG91Y2hlZF9mbGFncyAmIERJRkZfT1BUXyMjZmxhZykKKyNkZWZpbmUgRElGRl9PUFRfU0VUKG9wdHMsIGZsYWcpICAgICgoKG9wdHMpLT5mbGFncyB8PSBESUZGX09QVF8jI2ZsYWcpLCgob3B0cyktPnRvdWNoZWRfZmxhZ3MgfD0gRElGRl9PUFRfIyNmbGFnKSkKKyNkZWZpbmUgRElGRl9PUFRfQ0xSKG9wdHMsIGZsYWcpICAgICgoKG9wdHMpLT5mbGFncyAmPSB+RElGRl9PUFRfIyNmbGFnKSwoKG9wdHMpLT50b3VjaGVkX2ZsYWdzIHw9IERJRkZfT1BUXyMjZmxhZykpCisjZGVmaW5lIERJRkZfWERMX1RTVChvcHRzLCBmbGFnKSAgICAoKG9wdHMpLT54ZGxfb3B0cyAmIFhERl8jI2ZsYWcpCisjZGVmaW5lIERJRkZfWERMX1NFVChvcHRzLCBmbGFnKSAgICAoKG9wdHMpLT54ZGxfb3B0cyB8PSBYREZfIyNmbGFnKQorI2RlZmluZSBESUZGX1hETF9DTFIob3B0cywgZmxhZykgICAgKChvcHRzKS0+eGRsX29wdHMgJj0gflhERl8jI2ZsYWcpCisKKyNkZWZpbmUgRElGRl9XSVRIX0FMRyhvcHRzLCBmbGFnKSAgICgoKG9wdHMpLT54ZGxfb3B0cyAmIH5YREZfRElGRl9BTEdPUklUSE1fTUFTSykgfCBYREZfIyNmbGFnKQorCitlbnVtIGRpZmZfd29yZHNfdHlwZSB7CisJRElGRl9XT1JEU19OT05FID0gMCwKKwlESUZGX1dPUkRTX1BPUkNFTEFJTiwKKwlESUZGX1dPUkRTX1BMQUlOLAorCURJRkZfV09SRFNfQ09MT1IKK307CisKK3N0cnVjdCBkaWZmX29wdGlvbnMgeworCWNvbnN0IGNoYXIgKm9yZGVyZmlsZTsKKwljb25zdCBjaGFyICpwaWNrYXhlOworCWNvbnN0IGNoYXIgKnNpbmdsZV9mb2xsb3c7CisJY29uc3QgY2hhciAqYV9wcmVmaXgsICpiX3ByZWZpeDsKKwl1bnNpZ25lZCBmbGFnczsKKwl1bnNpZ25lZCB0b3VjaGVkX2ZsYWdzOworCisJLyogZGlmZi1maWx0ZXIgYml0cyAqLworCXVuc2lnbmVkIGludCBmaWx0ZXI7CisKKwlpbnQgdXNlX2NvbG9yOworCWludCBjb250ZXh0OworCWludCBpbnRlcmh1bmtjb250ZXh0OworCWludCBicmVha19vcHQ7CisJaW50IGRldGVjdF9yZW5hbWU7CisJaW50IGlycmV2ZXJzaWJsZV9kZWxldGU7CisJaW50IHNraXBfc3RhdF91bm1hdGNoOworCWludCBsaW5lX3Rlcm1pbmF0aW9uOworCWludCBvdXRwdXRfZm9ybWF0OworCWludCBwaWNrYXhlX29wdHM7CisJaW50IHJlbmFtZV9zY29yZTsKKwlpbnQgcmVuYW1lX2xpbWl0OworCWludCBuZWVkZWRfcmVuYW1lX2xpbWl0OworCWludCBkZWdyYWRlZF9jY190b19jOworCWludCBzaG93X3JlbmFtZV9wcm9ncmVzczsKKwlpbnQgZGlyc3RhdF9wZXJtaWxsZTsKKwlpbnQgc2V0dXA7CisJaW50IGFiYnJldjsKKy8qIHdoaXRlLXNwYWNlIGVycm9yIGhpZ2hsaWdodGluZyAqLworI2RlZmluZSBXU0VIX05FVyAxCisjZGVmaW5lIFdTRUhfQ09OVEVYVCAyCisjZGVmaW5lIFdTRUhfT0xEIDQKKwl1bnNpZ25lZCB3c19lcnJvcl9oaWdobGlnaHQ7CisJY29uc3QgY2hhciAqcHJlZml4OworCWludCBwcmVmaXhfbGVuZ3RoOworCWNvbnN0IGNoYXIgKnN0YXRfc2VwOworCWxvbmcgeGRsX29wdHM7CisKKwlpbnQgc3RhdF93aWR0aDsKKwlpbnQgc3RhdF9uYW1lX3dpZHRoOworCWludCBzdGF0X2dyYXBoX3dpZHRoOworCWludCBzdGF0X2NvdW50OworCWNvbnN0IGNoYXIgKndvcmRfcmVnZXg7CisJZW51bSBkaWZmX3dvcmRzX3R5cGUgd29yZF9kaWZmOworCisJLyogdGhpcyBpcyBzZXQgYnkgZGlmZmNvcmUgZm9yIERJRkZfRk9STUFUX1BBVENIICovCisJaW50IGZvdW5kX2NoYW5nZXM7CisKKwkvKiB0byBzdXBwb3J0IGludGVybmFsIGRpZmYgcmVjdXJzaW9uIGJ5IC0tZm9sbG93IGhhY2sqLworCWludCBmb3VuZF9mb2xsb3c7CisKKwl2b2lkICgqc2V0X2RlZmF1bHQpKHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CisKKwlGSUxFICpmaWxlOworCWludCBjbG9zZV9maWxlOworCisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCXBhdGhjaGFuZ2VfZm5fdCBwYXRoY2hhbmdlOworCWNoYW5nZV9mbl90IGNoYW5nZTsKKwlhZGRfcmVtb3ZlX2ZuX3QgYWRkX3JlbW92ZTsKKwlkaWZmX2Zvcm1hdF9mbl90IGZvcm1hdF9jYWxsYmFjazsKKwl2b2lkICpmb3JtYXRfY2FsbGJhY2tfZGF0YTsKKwlkaWZmX3ByZWZpeF9mbl90IG91dHB1dF9wcmVmaXg7CisJaW50IG91dHB1dF9wcmVmaXhfbGVuZ3RoOworCXZvaWQgKm91dHB1dF9wcmVmaXhfZGF0YTsKKworCWludCBkaWZmX3BhdGhfY291bnRlcjsKK307CisKK2VudW0gY29sb3JfZGlmZiB7CisJRElGRl9SRVNFVCA9IDAsCisJRElGRl9DT05URVhUID0gMSwKKwlESUZGX01FVEFJTkZPID0gMiwKKwlESUZGX0ZSQUdJTkZPID0gMywKKwlESUZGX0ZJTEVfT0xEID0gNCwKKwlESUZGX0ZJTEVfTkVXID0gNSwKKwlESUZGX0NPTU1JVCA9IDYsCisJRElGRl9XSElURVNQQUNFID0gNywKKwlESUZGX0ZVTkNJTkZPID0gOAorfTsKK2NvbnN0IGNoYXIgKmRpZmZfZ2V0X2NvbG9yKGludCBkaWZmX3VzZV9jb2xvciwgZW51bSBjb2xvcl9kaWZmIGl4KTsKKyNkZWZpbmUgZGlmZl9nZXRfY29sb3Jfb3B0KG8sIGl4KSBcCisJZGlmZl9nZXRfY29sb3IoKG8pLT51c2VfY29sb3IsIGl4KQorCisKK2NvbnN0IGNoYXIgKmRpZmZfbGluZV9wcmVmaXgoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKKworCitleHRlcm4gY29uc3QgY2hhciBtaW1lX2JvdW5kYXJ5X2xlYWRlcltdOworCitleHRlcm4gc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpkaWZmX3RyZWVfcGF0aHMoCisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKipwYXJlbnRfc2hhMSwgaW50IG5wYXJlbnQsCisJc3RydWN0IHN0cmJ1ZiAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KTsKK2V4dGVybiBpbnQgZGlmZl90cmVlX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqb2xkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXcsCisJCQkgIGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCk7CitleHRlcm4gaW50IGRpZmZfcm9vdF90cmVlX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqbmV3LCBjb25zdCBjaGFyICpiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCk7CisKK3N0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCB7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpuZXh0OworCWNoYXIgKnBhdGg7CisJdW5zaWduZWQgaW50IG1vZGU7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXJlbnQgeworCQljaGFyIHN0YXR1czsKKwkJdW5zaWduZWQgaW50IG1vZGU7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCX0gcGFyZW50W0ZMRVhfQVJSQVldOworfTsKKyNkZWZpbmUgY29tYmluZV9kaWZmX3BhdGhfc2l6ZShuLCBsKSBcCisJKHNpemVvZihzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGgpICsgXAorCSBzaXplb2Yoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXJlbnQpICogKG4pICsgKGwpICsgMSkKKworZXh0ZXJuIHZvaWQgc2hvd19jb21iaW5lZF9kaWZmKHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqZWxlbSwgaW50IG51bV9wYXJlbnQsCisJCQkgICAgICBpbnQgZGVuc2UsIHN0cnVjdCByZXZfaW5mbyAqKTsKKworZXh0ZXJuIHZvaWQgZGlmZl90cmVlX2NvbWJpbmVkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IHN0cnVjdCBzaGExX2FycmF5ICpwYXJlbnRzLCBpbnQgZGVuc2UsIHN0cnVjdCByZXZfaW5mbyAqcmV2KTsKKworZXh0ZXJuIHZvaWQgZGlmZl90cmVlX2NvbWJpbmVkX21lcmdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwgaW50IGRlbnNlLCBzdHJ1Y3QgcmV2X2luZm8gKnJldik7CisKK3ZvaWQgZGlmZl9zZXRfbW5lbW9uaWNfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOworCitleHRlcm4gaW50IGRpZmZfY2FuX3F1aXRfZWFybHkoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKKworZXh0ZXJuIHZvaWQgZGlmZl9hZGRyZW1vdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqLAorCQkJICAgaW50IGFkZHJlbW92ZSwKKwkJCSAgIHVuc2lnbmVkIG1vZGUsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgaW50IHNoYTFfdmFsaWQsCisJCQkgICBjb25zdCBjaGFyICpmdWxscGF0aCwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKTsKKworZXh0ZXJuIHZvaWQgZGlmZl9jaGFuZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqLAorCQkJdW5zaWduZWQgbW9kZTEsIHVuc2lnbmVkIG1vZGUyLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTIsCisJCQlpbnQgc2hhMV92YWxpZCwKKwkJCWludCBzaGEyX3ZhbGlkLAorCQkJY29uc3QgY2hhciAqZnVsbHBhdGgsCisJCQl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUxLCB1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUyKTsKKworZXh0ZXJuIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpkaWZmX3VubWVyZ2Uoc3RydWN0IGRpZmZfb3B0aW9ucyAqLCBjb25zdCBjaGFyICpwYXRoKTsKKworI2RlZmluZSBESUZGX1NFVFVQX1JFVkVSU0UgICAgICAJMQorI2RlZmluZSBESUZGX1NFVFVQX1VTRV9DQUNIRQkJMgorI2RlZmluZSBESUZGX1NFVFVQX1VTRV9TSVpFX0NBQ0hFCTQKKworLyoKKyAqIFBvb3IgbWFuJ3MgYWx0ZXJuYXRpdmUgdG8gcGFyc2Utb3B0aW9uLCB0byBhbGxvdyBib3RoIHN0dWNrIGZvcm0KKyAqICgtLW9wdGlvbj12YWx1ZSkgYW5kIHNlcGFyYXRlIGZvcm0gKC0tb3B0aW9uIHZhbHVlKS4KKyAqLworZXh0ZXJuIGludCBwYXJzZV9sb25nX29wdChjb25zdCBjaGFyICpvcHQsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJIGNvbnN0IGNoYXIgKipvcHRhcmcpOworCitleHRlcm4gaW50IGdpdF9kaWZmX2Jhc2ljX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CitleHRlcm4gaW50IGdpdF9kaWZmX3VpX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CitleHRlcm4gdm9pZCBkaWZmX3NldHVwKHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CitleHRlcm4gaW50IGRpZmZfb3B0X3BhcnNlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgY29uc3QgY2hhciAqKiwgaW50KTsKK2V4dGVybiB2b2lkIGRpZmZfc2V0dXBfZG9uZShzdHJ1Y3QgZGlmZl9vcHRpb25zICopOworCisjZGVmaW5lIERJRkZfREVURUNUX1JFTkFNRQkxCisjZGVmaW5lIERJRkZfREVURUNUX0NPUFkJMgorCisjZGVmaW5lIERJRkZfUElDS0FYRV9BTEwJMQorI2RlZmluZSBESUZGX1BJQ0tBWEVfUkVHRVgJMgorCisjZGVmaW5lIERJRkZfUElDS0FYRV9LSU5EX1MJNCAvKiB0cmFkaXRpb25hbCBwbHVtYmluZyBjb3VudGVyICovCisjZGVmaW5lIERJRkZfUElDS0FYRV9LSU5EX0cJOCAvKiBncmVwIGluIHRoZSBwYXRjaCAqLworCitleHRlcm4gdm9pZCBkaWZmY29yZV9zdGQoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKK2V4dGVybiB2b2lkIGRpZmZjb3JlX2ZpeF9kaWZmX2luZGV4KHN0cnVjdCBkaWZmX29wdGlvbnMgKik7CisKKyNkZWZpbmUgQ09NTU9OX0RJRkZfT1BUSU9OU19IRUxQIFwKKyJcbmNvbW1vbiBkaWZmIG9wdGlvbnM6XG4iIFwKKyIgIC16ICAgICAgICAgICAgb3V0cHV0IGRpZmYtcmF3IHdpdGggbGluZXMgdGVybWluYXRlZCB3aXRoIE5VTC5cbiIgXAorIiAgLXAgICAgICAgICAgICBvdXRwdXQgcGF0Y2ggZm9ybWF0LlxuIiBcCisiICAtdSAgICAgICAgICAgIHN5bm9ueW0gZm9yIC1wLlxuIiBcCisiICAtLXBhdGNoLXdpdGgtcmF3XG4iIFwKKyIgICAgICAgICAgICAgICAgb3V0cHV0IGJvdGggYSBwYXRjaCBhbmQgdGhlIGRpZmYtcmF3IGZvcm1hdC5cbiIgXAorIiAgLS1zdGF0ICAgICAgICBzaG93IGRpZmZzdGF0IGluc3RlYWQgb2YgcGF0Y2guXG4iIFwKKyIgIC0tbnVtc3RhdCAgICAgc2hvdyBudW1lcmljIGRpZmZzdGF0IGluc3RlYWQgb2YgcGF0Y2guXG4iIFwKKyIgIC0tcGF0Y2gtd2l0aC1zdGF0XG4iIFwKKyIgICAgICAgICAgICAgICAgb3V0cHV0IGEgcGF0Y2ggYW5kIHByZXBlbmQgaXRzIGRpZmZzdGF0LlxuIiBcCisiICAtLW5hbWUtb25seSAgIHNob3cgb25seSBuYW1lcyBvZiBjaGFuZ2VkIGZpbGVzLlxuIiBcCisiICAtLW5hbWUtc3RhdHVzIHNob3cgbmFtZXMgYW5kIHN0YXR1cyBvZiBjaGFuZ2VkIGZpbGVzLlxuIiBcCisiICAtLWZ1bGwtaW5kZXggIHNob3cgZnVsbCBvYmplY3QgbmFtZSBvbiBpbmRleCBsaW5lcy5cbiIgXAorIiAgLS1hYmJyZXY9PG4+ICBhYmJyZXZpYXRlIG9iamVjdCBuYW1lcyBpbiBkaWZmLXRyZWUgaGVhZGVyIGFuZCBkaWZmLXJhdy5cbiIgXAorIiAgLVIgICAgICAgICAgICBzd2FwIGlucHV0IGZpbGUgcGFpcnMuXG4iIFwKKyIgIC1CICAgICAgICAgICAgZGV0ZWN0IGNvbXBsZXRlIHJld3JpdGVzLlxuIiBcCisiICAtTSAgICAgICAgICAgIGRldGVjdCByZW5hbWVzLlxuIiBcCisiICAtQyAgICAgICAgICAgIGRldGVjdCBjb3BpZXMuXG4iIFwKKyIgIC0tZmluZC1jb3BpZXMtaGFyZGVyXG4iIFwKKyIgICAgICAgICAgICAgICAgdHJ5IHVuY2hhbmdlZCBmaWxlcyBhcyBjYW5kaWRhdGUgZm9yIGNvcHkgZGV0ZWN0aW9uLlxuIiBcCisiICAtbDxuPiAgICAgICAgIGxpbWl0IHJlbmFtZSBhdHRlbXB0cyB1cCB0byA8bj4gcGF0aHMuXG4iIFwKKyIgIC1PPGZpbGU+ICAgICAgcmVvcmRlciBkaWZmcyBhY2NvcmRpbmcgdG8gdGhlIDxmaWxlPi5cbiIgXAorIiAgLVM8c3RyaW5nPiAgICBmaW5kIGZpbGVwYWlyIHdob3NlIG9ubHkgb25lIHNpZGUgY29udGFpbnMgdGhlIHN0cmluZy5cbiIgXAorIiAgLS1waWNrYXhlLWFsbFxuIiBcCisiICAgICAgICAgICAgICAgIHNob3cgYWxsIGZpbGVzIGRpZmYgd2hlbiAtUyBpcyB1c2VkIGFuZCBoaXQgaXMgZm91bmQuXG4iIFwKKyIgIC1hICAtLXRleHQgICAgdHJlYXQgYWxsIGZpbGVzIGFzIHRleHQuXG4iCisKK2V4dGVybiBpbnQgZGlmZl9xdWV1ZV9pc19lbXB0eSh2b2lkKTsKK2V4dGVybiB2b2lkIGRpZmZfZmx1c2goc3RydWN0IGRpZmZfb3B0aW9ucyopOworZXh0ZXJuIHZvaWQgZGlmZl93YXJuX3JlbmFtZV9saW1pdChjb25zdCBjaGFyICp2YXJuYW1lLCBpbnQgbmVlZGVkLCBpbnQgZGVncmFkZWRfY2MpOworCisvKiBkaWZmLXJhdyBzdGF0dXMgbGV0dGVycyAqLworI2RlZmluZSBESUZGX1NUQVRVU19BRERFRAkJJ0EnCisjZGVmaW5lIERJRkZfU1RBVFVTX0NPUElFRAkJJ0MnCisjZGVmaW5lIERJRkZfU1RBVFVTX0RFTEVURUQJCSdEJworI2RlZmluZSBESUZGX1NUQVRVU19NT0RJRklFRAkJJ00nCisjZGVmaW5lIERJRkZfU1RBVFVTX1JFTkFNRUQJCSdSJworI2RlZmluZSBESUZGX1NUQVRVU19UWVBFX0NIQU5HRUQJJ1QnCisjZGVmaW5lIERJRkZfU1RBVFVTX1VOS05PV04JCSdYJworI2RlZmluZSBESUZGX1NUQVRVU19VTk1FUkdFRAkJJ1UnCisKKy8qIHRoZXNlIGFyZSBub3QgZGlmZi1yYXcgc3RhdHVzIGxldHRlcnMgcHJvcGVyLCBidXQgdXNlZCBieQorICogZGlmZmNvcmUtZmlsdGVyIGluc24gdG8gc3BlY2lmeSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucy4KKyAqLworI2RlZmluZSBESUZGX1NUQVRVU19GSUxURVJfQU9OCQknKicKKyNkZWZpbmUgRElGRl9TVEFUVVNfRklMVEVSX0JST0tFTgknQicKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmRpZmZfdW5pcXVlX2FiYnJldihjb25zdCB1bnNpZ25lZCBjaGFyICosIGludCk7CisKKy8qIGRvIG5vdCByZXBvcnQgYW55dGhpbmcgb24gcmVtb3ZlZCBwYXRocyAqLworI2RlZmluZSBESUZGX1NJTEVOVF9PTl9SRU1PVkVEIDAxCisvKiByZXBvcnQgcmFjaWx5LWNsZWFuIHBhdGhzIGFzIG1vZGlmaWVkICovCisjZGVmaW5lIERJRkZfUkFDWV9JU19NT0RJRklFRCAwMgorZXh0ZXJuIGludCBydW5fZGlmZl9maWxlcyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGludCBvcHRpb24pOworZXh0ZXJuIGludCBydW5fZGlmZl9pbmRleChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBjYWNoZWQpOworCitleHRlcm4gaW50IGRvX2RpZmZfY2FjaGUoY29uc3QgdW5zaWduZWQgY2hhciAqLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICopOworZXh0ZXJuIGludCBkaWZmX2ZsdXNoX3BhdGNoX2lkKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgdW5zaWduZWQgY2hhciAqKTsKKworZXh0ZXJuIGludCBkaWZmX3Jlc3VsdF9jb2RlKHN0cnVjdCBkaWZmX29wdGlvbnMgKiwgaW50KTsKKworZXh0ZXJuIHZvaWQgZGlmZl9ub19pbmRleChzdHJ1Y3QgcmV2X2luZm8gKiwgaW50LCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICopOworCitleHRlcm4gaW50IGluZGV4X2RpZmZlcnNfZnJvbShjb25zdCBjaGFyICpkZWYsIGludCBkaWZmX2ZsYWdzKTsKKworZXh0ZXJuIHNpemVfdCBmaWxsX3RleHRjb252KHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRyaXZlciwKKwkJCSAgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGYsCisJCQkgICAgY2hhciAqKm91dGJ1Zik7CisKK2V4dGVybiBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpnZXRfdGV4dGNvbnYoc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSk7CisKK2V4dGVybiBpbnQgcGFyc2VfcmVuYW1lX3Njb3JlKGNvbnN0IGNoYXIgKipjcF9wKTsKKworZXh0ZXJuIGxvbmcgcGFyc2VfYWxnb3JpdGhtX3ZhbHVlKGNvbnN0IGNoYXIgKnZhbHVlKTsKKworZXh0ZXJuIGludCBwcmludF9zdGF0X3N1bW1hcnkoRklMRSAqZnAsIGludCBmaWxlcywKKwkJCSAgICAgIGludCBpbnNlcnRpb25zLCBpbnQgZGVsZXRpb25zKTsKK2V4dGVybiB2b2lkIHNldHVwX2RpZmZfcGFnZXIoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKKworI2VuZGlmIC8qIERJRkZfSCAqLwpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtYnJlYWsuYyBiL2RpZmZjb3JlLWJyZWFrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ3MzQ5MwotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLWJyZWFrLmMKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisKK3N0YXRpYyBpbnQgc2hvdWxkX2JyZWFrKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcmMsCisJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZHN0LAorCQkJaW50IGJyZWFrX3Njb3JlLAorCQkJaW50ICptZXJnZV9zY29yZV9wKQoreworCS8qIGRzdCBpcyByZWNvcmRlZCBhcyBhIG1vZGlmaWNhdGlvbiBvZiBzcmMuICBBcmUgdGhleSBzbworCSAqIGRpZmZlcmVudCB0aGF0IHdlIGFyZSBiZXR0ZXIgb2ZmIHJlY29yZGluZyB0aGlzIGFzIGEgcGFpcgorCSAqIG9mIGRlbGV0ZSBhbmQgY3JlYXRlPworCSAqCisJICogVGhlcmUgYXJlIHR3byBjcml0ZXJpYSB1c2VkIGluIHRoaXMgYWxnb3JpdGhtLiAgRm9yIHRoZQorCSAqIHB1cnBvc2VzIG9mIGhlbHBpbmcgbGF0ZXIgcmVuYW1lL2NvcHksIHdlIHRha2UgYm90aCBkZWxldGUKKwkgKiBhbmQgaW5zZXJ0IGludG8gYWNjb3VudCBhbmQgZXN0aW1hdGUgdGhlIGFtb3VudCBvZiAiZWRpdCIuCisJICogSWYgdGhlIGVkaXQgaXMgdmVyeSBsYXJnZSwgd2UgYnJlYWsgdGhpcyBwYWlyIHNvIHRoYXQKKwkgKiByZW5hbWUvY29weSBjYW4gcGljayB0aGUgcGllY2VzIHVwIHRvIG1hdGNoIHdpdGggb3RoZXIKKwkgKiBmaWxlcy4KKwkgKgorCSAqIE9uIHRoZSBvdGhlciBoYW5kLCB3ZSB3b3VsZCB3YW50IHRvIGlnbm9yZSBpbnNlcnRzIGZvciB0aGUKKwkgKiBwdXJlICJjb21wbGV0ZSByZXdyaXRlIiBkZXRlY3Rpb24uICBBcyBsb25nIGFzIG1vc3Qgb2YgdGhlCisJICogZXhpc3RpbmcgY29udGVudHMgd2VyZSByZW1vdmVkIGZyb20gdGhlIGZpbGUsIGl0IGlzIGEKKwkgKiBjb21wbGV0ZSByZXdyaXRlLCBhbmQgaWYgc2l6YWJsZSBjaHVuayBmcm9tIHRoZSBvcmlnaW5hbAorCSAqIHN0aWxsIHJlbWFpbnMgaW4gdGhlIHJlc3VsdCwgaXQgaXMgbm90IGEgcmV3cml0ZS4gIEl0IGRvZXMKKwkgKiBub3QgbWF0dGVyIGhvdyBtdWNoIG9yIGhvdyBsaXR0bGUgbmV3IG1hdGVyaWFsIGlzIGFkZGVkIHRvCisJICogdGhlIGZpbGUuCisJICoKKwkgKiBUaGUgc2NvcmUgd2UgbGVhdmUgZm9yIHN1Y2ggYSBicm9rZW4gZmlsZXBhaXIgdXNlcyB0aGUKKwkgKiBsYXR0ZXIgZGVmaW5pdGlvbiBzbyB0aGF0IGxhdGVyIGNsZWFuLXVwIHN0YWdlIGNhbiBmaW5kIHRoZQorCSAqIHBpZWNlcyB0aGF0IHNob3VsZCBub3QgaGF2ZSBiZWVuIGJyb2tlbiBhY2NvcmRpbmcgdG8gdGhlCisJICogbGF0dGVyIGRlZmluaXRpb24gYWZ0ZXIgcmVuYW1lL2NvcHkgcnVucywgYW5kIG1lcmdlIHRoZQorCSAqIGJyb2tlbiBwYWlyIHRoYXQgaGF2ZSBhIHNjb3JlIGxvd2VyIHRoYW4gZ2l2ZW4gY3JpdGVyaWEKKwkgKiBiYWNrIHRvZ2V0aGVyLiAgVGhlIGJyZWFrIG9wZXJhdGlvbiBpdHNlbGYgaGFwcGVucworCSAqIGFjY29yZGluZyB0byB0aGUgZm9ybWVyIGRlZmluaXRpb24uCisJICoKKwkgKiBUaGUgbWluaW11bV9lZGl0IHBhcmFtZXRlciB0ZWxscyB1cyB3aGVuIHRvIGJyZWFrICh0aGUKKwkgKiBhbW91bnQgb2YgImVkaXQiIHJlcXVpcmVkIGZvciB1cyB0byBjb25zaWRlciBicmVha2luZyB0aGUKKwkgKiBwYWlyKS4gIFdlIGxlYXZlIHRoZSBhbW91bnQgb2YgZGVsZXRpb24gaW4gKm1lcmdlX3Njb3JlX3AKKwkgKiB3aGVuIHdlIHJldHVybi4KKwkgKgorCSAqIFRoZSB2YWx1ZSB3ZSByZXR1cm4gaXMgMSBpZiB3ZSB3YW50IHRoZSBwYWlyIHRvIGJlIGJyb2tlbiwKKwkgKiBvciAwIGlmIHdlIGRvIG5vdC4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsIG1heF9zaXplOworCXVuc2lnbmVkIGxvbmcgc3JjX2NvcGllZCwgbGl0ZXJhbF9hZGRlZCwgc3JjX3JlbW92ZWQ7CisKKwkqbWVyZ2Vfc2NvcmVfcCA9IDA7IC8qIGFzc3VtZSBubyBkZWxldGlvbiAtLS0gImRvIG5vdCBicmVhayIKKwkJCSAgICAgKiBpcyB0aGUgZGVmYXVsdC4KKwkJCSAgICAgKi8KKworCWlmIChTX0lTUkVHKHNyYy0+bW9kZSkgIT0gU19JU1JFRyhkc3QtPm1vZGUpKSB7CisJCSptZXJnZV9zY29yZV9wID0gKGludClNQVhfU0NPUkU7CisJCXJldHVybiAxOyAvKiBldmVuIHRoZWlyIHR5cGVzIGFyZSBkaWZmZXJlbnQgKi8KKwl9CisKKwlpZiAoc3JjLT5zaGExX3ZhbGlkICYmIGRzdC0+c2hhMV92YWxpZCAmJgorCSAgICAhaGFzaGNtcChzcmMtPnNoYTEsIGRzdC0+c2hhMSkpCisJCXJldHVybiAwOyAvKiB0aGV5IGFyZSB0aGUgc2FtZSAqLworCisJaWYgKGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMoc3JjLCAwKSB8fCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKGRzdCwgMCkpCisJCXJldHVybiAwOyAvKiBlcnJvciBidXQgY2F1Z2h0IGRvd25zdHJlYW0gKi8KKworCW1heF9zaXplID0gKChzcmMtPnNpemUgPiBkc3QtPnNpemUpID8gc3JjLT5zaXplIDogZHN0LT5zaXplKTsKKwlpZiAobWF4X3NpemUgPCBNSU5JTVVNX0JSRUFLX1NJWkUpCisJCXJldHVybiAwOyAvKiB3ZSBkbyBub3QgYnJlYWsgdG9vIHNtYWxsIGZpbGVwYWlyICovCisKKwlpZiAoIXNyYy0+c2l6ZSkKKwkJcmV0dXJuIDA7IC8qIHdlIGRvIG5vdCBsZXQgZW1wdHkgZmlsZXMgZ2V0IHJlbmFtZWQgKi8KKworCWlmIChkaWZmY29yZV9jb3VudF9jaGFuZ2VzKHNyYywgZHN0LAorCQkJCSAgICZzcmMtPmNudF9kYXRhLCAmZHN0LT5jbnRfZGF0YSwKKwkJCQkgICAwLAorCQkJCSAgICZzcmNfY29waWVkLCAmbGl0ZXJhbF9hZGRlZCkpCisJCXJldHVybiAwOworCisJLyogc2FuaXR5ICovCisJaWYgKHNyYy0+c2l6ZSA8IHNyY19jb3BpZWQpCisJCXNyY19jb3BpZWQgPSBzcmMtPnNpemU7CisJaWYgKGRzdC0+c2l6ZSA8IGxpdGVyYWxfYWRkZWQgKyBzcmNfY29waWVkKSB7CisJCWlmIChzcmNfY29waWVkIDwgZHN0LT5zaXplKQorCQkJbGl0ZXJhbF9hZGRlZCA9IGRzdC0+c2l6ZSAtIHNyY19jb3BpZWQ7CisJCWVsc2UKKwkJCWxpdGVyYWxfYWRkZWQgPSAwOworCX0KKwlzcmNfcmVtb3ZlZCA9IHNyYy0+c2l6ZSAtIHNyY19jb3BpZWQ7CisKKwkvKiBDb21wdXRlIG1lcmdlLXNjb3JlLCB3aGljaCBpcyAiaG93IG11Y2ggaXMgcmVtb3ZlZAorCSAqIGZyb20gdGhlIHNvdXJjZSBtYXRlcmlhbCIuICBUaGUgY2xlYW4tdXAgc3RhZ2Ugd2lsbAorCSAqIG1lcmdlIHRoZSBzdXJ2aXZpbmcgcGFpciB0b2dldGhlciBpZiB0aGUgc2NvcmUgaXMKKwkgKiBsZXNzIHRoYW4gdGhlIG1pbmltdW0sIGFmdGVyIHJlbmFtZS9jb3B5IHJ1bnMuCisJICovCisJKm1lcmdlX3Njb3JlX3AgPSAoaW50KShzcmNfcmVtb3ZlZCAqIE1BWF9TQ09SRSAvIHNyYy0+c2l6ZSk7CisJaWYgKCptZXJnZV9zY29yZV9wID4gYnJlYWtfc2NvcmUpCisJCXJldHVybiAxOworCisJLyogRXh0ZW50IG9mIGRhbWFnZSwgd2hpY2ggY291bnRzIGJvdGggaW5zZXJ0cyBhbmQKKwkgKiBkZWxldGVzLgorCSAqLworCWRlbHRhX3NpemUgPSBzcmNfcmVtb3ZlZCArIGxpdGVyYWxfYWRkZWQ7CisJaWYgKGRlbHRhX3NpemUgKiBNQVhfU0NPUkUgLyBtYXhfc2l6ZSA8IGJyZWFrX3Njb3JlKQorCQlyZXR1cm4gMDsKKworCS8qIElmIHlvdSByZW1vdmVkIGEgbG90IHdpdGhvdXQgYWRkaW5nIG5ldyBtYXRlcmlhbCwgdGhhdCBpcworCSAqIG5vdCByZWFsbHkgYSByZXdyaXRlLgorCSAqLworCWlmICgoc3JjLT5zaXplICogYnJlYWtfc2NvcmUgPCBzcmNfcmVtb3ZlZCAqIE1BWF9TQ09SRSkgJiYKKwkgICAgKGxpdGVyYWxfYWRkZWQgKiAyMCA8IHNyY19yZW1vdmVkKSAmJgorCSAgICAobGl0ZXJhbF9hZGRlZCAqIDIwIDwgc3JjX2NvcGllZCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgZGlmZmNvcmVfYnJlYWsoaW50IGJyZWFrX3Njb3JlKQoreworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBvdXRxOworCisJLyogV2hlbiB0aGUgZmlsZXBhaXIgaGFzIHRoaXMgbXVjaCBlZGl0IChpbnNlcnQgYW5kIGRlbGV0ZSksCisJICogaXQgaXMgZmlyc3QgY29uc2lkZXJlZCB0byBiZSBhIHJld3JpdGUgYW5kIGJyb2tlbiBpbnRvIGEKKwkgKiBjcmVhdGUgYW5kIGRlbGV0ZSBmaWxlcGFpci4gIFRoaXMgaXMgdG8gaGVscCBicmVha2luZyBhCisJICogZmlsZSB0aGF0IGhhZCB0b28gbXVjaCBuZXcgc3R1ZmYgYWRkZWQsIHBvc3NpYmx5IGZyb20KKwkgKiBtb3ZpbmcgY29udGVudHMgZnJvbSBhbm90aGVyIGZpbGUsIHNvIHRoYXQgcmVuYW1lL2NvcHkgY2FuCisJICogbWF0Y2ggaXQgd2l0aCB0aGUgb3RoZXIgZmlsZS4KKwkgKgorCSAqIGludCBicmVha19zY29yZTsgd2UgcmV1c2UgaW5jb21pbmcgcGFyYW1ldGVyIGZvciB0aGlzLgorCSAqLworCisJLyogQWZ0ZXIgYSBwYWlyIGlzIGJyb2tlbiBhY2NvcmRpbmcgdG8gYnJlYWtfc2NvcmUgYW5kCisJICogc3ViamVjdGVkIHRvIHJlbmFtZS9jb3B5LCBib3RoIG9mIHRoZW0gbWF5IHN1cnZpdmUgaW50YWN0LAorCSAqIGR1ZSB0byBsYWNrIG9mIHN1aXRhYmxlIHJlbmFtZS9jb3B5IHBlZXIuICBPciwgdGhlIGNhbGxlcgorCSAqIG1heSBiZSBjYWxsaW5nIHVzIHdpdGhvdXQgdXNpbmcgcmVuYW1lL2NvcHkuICBXaGVuIHRoYXQKKwkgKiBoYXBwZW5zLCB3ZSBtZXJnZSB0aGUgYnJva2VuIHBpZWNlcyBiYWNrIGludG8gb25lCisJICogbW9kaWZpY2F0aW9uIHRvZ2V0aGVyIGlmIHRoZSBwYWlyIGRpZCBub3QgaGF2ZSBtb3JlIHRoYW4KKwkgKiB0aGlzIG11Y2ggZGVsZXRlLiAgRm9yIHRoaXMgY29tcHV0YXRpb24sIHdlIGRvIG5vdCB0YWtlCisJICogaW5zZXJ0IGludG8gYWNjb3VudCBhdCBhbGwuICBJZiB5b3Ugc3RhcnQgZnJvbSBhIDEwMC1saW5lCisJICogZmlsZSBhbmQgZGVsZXRlIDk3IGxpbmVzIG9mIGl0LCBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYgeW91CisJICogYWRkIDI3IGxpbmVzIHRvIGl0IHRvIG1ha2UgYSBuZXcgMzAtbGluZSBmaWxlIG9yIGlmIHlvdSBhZGQKKwkgKiA5OTcgbGluZXMgdG8gaXQgdG8gbWFrZSBhIDEwMDAtbGluZSBmaWxlLiAgRWl0aGVyIHdheSB3aGF0CisJICogeW91IGRpZCB3YXMgYSByZXdyaXRlIG9mIDk3JS4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3UKKwkgKiBkZWxldGUgMyBsaW5lcywga2VlcGluZyA5NyBsaW5lcyBpbnRhY3QsIGl0IGRvZXMgbm90IG1hdHRlcgorCSAqIGlmIHlvdSBhZGQgMyBsaW5lcyB0byBpdCB0byBtYWtlIGEgbmV3IDEwMC1saW5lIGZpbGUgb3IgaWYKKwkgKiB5b3UgYWRkIDkwMyBsaW5lcyB0byBpdCB0byBtYWtlIGEgbmV3IDEwMDAtbGluZSBmaWxlLgorCSAqIEVpdGhlciB3YXkgeW91IGRpZCBhIGxvdCBvZiBhZGRpdGlvbnMgYW5kIG5vdCBhIHJld3JpdGUuCisJICogVGhpcyBtZXJnZSBoYXBwZW5zIHRvIGNhdGNoIHRoZSBsYXR0ZXIgY2FzZS4gIEEgbWVyZ2Vfc2NvcmUKKwkgKiBvZiA4MCUgd291bGQgYmUgYSBnb29kIGRlZmF1bHQgdmFsdWUgKGEgYnJva2VuIHBhaXIgdGhhdAorCSAqIGhhcyBzY29yZSBsb3dlciB0aGFuIG1lcmdlX3Njb3JlIHdpbGwgYmUgbWVyZ2VkIGJhY2sKKwkgKiB0b2dldGhlcikuCisJICovCisJaW50IG1lcmdlX3Njb3JlOworCWludCBpOworCisJLyogU2VlIGNvbW1lbnQgb24gREVGQVVMVF9CUkVBS19TQ09SRSBhbmQKKwkgKiBERUZBVUxUX01FUkdFX1NDT1JFIGluIGRpZmZjb3JlLmgKKwkgKi8KKwltZXJnZV9zY29yZSA9IChicmVha19zY29yZSA+PiAxNikgJiAweEZGRkY7CisJYnJlYWtfc2NvcmUgPSAoYnJlYWtfc2NvcmUgJiAweEZGRkYpOworCisJaWYgKCFicmVha19zY29yZSkKKwkJYnJlYWtfc2NvcmUgPSBERUZBVUxUX0JSRUFLX1NDT1JFOworCWlmICghbWVyZ2Vfc2NvcmUpCisJCW1lcmdlX3Njb3JlID0gREVGQVVMVF9NRVJHRV9TQ09SRTsKKworCURJRkZfUVVFVUVfQ0xFQVIoJm91dHEpOworCisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJaW50IHNjb3JlOworCisJCS8qCisJCSAqIFdlIGRlYWwgb25seSB3aXRoIGluLXBsYWNlIGVkaXQgb2YgYmxvYnMuCisJCSAqIFdlIGRvIG5vdCBicmVhayBhbnl0aGluZyBlbHNlLgorCQkgKi8KKwkJaWYgKERJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmIERJRkZfRklMRV9WQUxJRChwLT50d28pICYmCisJCSAgICBvYmplY3RfdHlwZShwLT5vbmUtPm1vZGUpID09IE9CSl9CTE9CICYmCisJCSAgICBvYmplY3RfdHlwZShwLT50d28tPm1vZGUpID09IE9CSl9CTE9CICYmCisJCSAgICAhc3RyY21wKHAtPm9uZS0+cGF0aCwgcC0+dHdvLT5wYXRoKSkgeworCQkJaWYgKHNob3VsZF9icmVhayhwLT5vbmUsIHAtPnR3bywKKwkJCQkJIGJyZWFrX3Njb3JlLCAmc2NvcmUpKSB7CisJCQkJLyogU3BsaXQgdGhpcyBpbnRvIGRlbGV0ZSBhbmQgY3JlYXRlICovCisJCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKm51bGxfb25lLCAqbnVsbF90d287CisJCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKmRwOworCisJCQkJLyogU2V0IHNjb3JlIHRvIDAgZm9yIHRoZSBwYWlyIHRoYXQKKwkJCQkgKiBuZWVkcyB0byBiZSBtZXJnZWQgYmFjayB0b2dldGhlcgorCQkJCSAqIHNob3VsZCB0aGV5IHN1cnZpdmUgcmVuYW1lL2NvcHkuCisJCQkJICogQWxzbyB3ZSBkbyBub3Qgd2FudCB0byBicmVhayB2ZXJ5CisJCQkJICogc21hbGwgZmlsZXMuCisJCQkJICovCisJCQkJaWYgKHNjb3JlIDwgbWVyZ2Vfc2NvcmUpCisJCQkJCXNjb3JlID0gMDsKKworCQkJCS8qIGRlbGV0aW9uIG9mIG9uZSAqLworCQkJCW51bGxfb25lID0gYWxsb2NfZmlsZXNwZWMocC0+b25lLT5wYXRoKTsKKwkJCQlkcCA9IGRpZmZfcXVldWUoJm91dHEsIHAtPm9uZSwgbnVsbF9vbmUpOworCQkJCWRwLT5zY29yZSA9IHNjb3JlOworCQkJCWRwLT5icm9rZW5fcGFpciA9IDE7CisKKwkJCQkvKiBjcmVhdGlvbiBvZiB0d28gKi8KKwkJCQludWxsX3R3byA9IGFsbG9jX2ZpbGVzcGVjKHAtPnR3by0+cGF0aCk7CisJCQkJZHAgPSBkaWZmX3F1ZXVlKCZvdXRxLCBudWxsX3R3bywgcC0+dHdvKTsKKwkJCQlkcC0+c2NvcmUgPSBzY29yZTsKKwkJCQlkcC0+YnJva2VuX3BhaXIgPSAxOworCisJCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2IocC0+b25lKTsKKwkJCQlkaWZmX2ZyZWVfZmlsZXNwZWNfYmxvYihwLT50d28pOworCQkJCWZyZWUocCk7IC8qIG5vdCBkaWZmX2ZyZWVfZmlsZXBhaXIoKSwgd2UgYXJlCisJCQkJCSAgKiByZXVzaW5nIG9uZSBhbmQgdHdvIGhlcmUuCisJCQkJCSAgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT5vbmUpOworCQlkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShwLT50d28pOworCQlkaWZmX3EoJm91dHEsIHApOworCX0KKwlmcmVlKHEtPnF1ZXVlKTsKKwkqcSA9IG91dHE7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX2Jyb2tlbihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwKKwkJCSBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcHAsCisJCQkgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpvdXRxKQoreworCS8qIHAgYW5kIHBwIGFyZSBicm9rZW4gcGFpcnMgd2Ugd2FudCB0byBtZXJnZSAqLworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpjID0gcCwgKmQgPSBwcCwgKmRwOworCWlmIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSkgeworCQkvKiB0aGlzIG11c3QgYmUgYSBkZWxldGUgaGFsZiAqLworCQlkID0gcDsgYyA9IHBwOworCX0KKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAoIURJRkZfRklMRV9WQUxJRChkLT5vbmUpKQorCQlkaWUoImludGVybmFsIGVycm9yIGluIG1lcmdlICMxIik7CisJaWYgKERJRkZfRklMRV9WQUxJRChkLT50d28pKQorCQlkaWUoImludGVybmFsIGVycm9yIGluIG1lcmdlICMyIik7CisJaWYgKERJRkZfRklMRV9WQUxJRChjLT5vbmUpKQorCQlkaWUoImludGVybmFsIGVycm9yIGluIG1lcmdlICMzIik7CisJaWYgKCFESUZGX0ZJTEVfVkFMSUQoYy0+dHdvKSkKKwkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBtZXJnZSAjNCIpOworCisJZHAgPSBkaWZmX3F1ZXVlKG91dHEsIGQtPm9uZSwgYy0+dHdvKTsKKwlkcC0+c2NvcmUgPSBwLT5zY29yZTsKKwkvKgorCSAqIFdlIHdpbGwgYmUgb25lIGV4dHJhIHVzZXIgb2YgdGhlIHNhbWUgc3JjIHNpZGUgb2YgdGhlCisJICogYnJva2VuIHBhaXIsIGlmIGl0IHdhcyB1c2VkIGFzIHRoZSByZW5hbWUgc291cmNlIGZvciBvdGhlcgorCSAqIHBhdGhzIGVsc2V3aGVyZS4gIEluY3JlbWVudCB0byBtYXJrIHRoYXQgdGhlIHBhdGggc3RheXMKKwkgKiBpbiB0aGUgcmVzdWx0aW5nIHRyZWUuCisJICovCisJZC0+b25lLT5yZW5hbWVfdXNlZCsrOworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKGQtPnR3byk7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEoYy0+b25lKTsKKwlmcmVlKGQpOworCWZyZWUoYyk7Cit9CisKK3ZvaWQgZGlmZmNvcmVfbWVyZ2VfYnJva2VuKHZvaWQpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IG91dHE7CisJaW50IGksIGo7CisKKwlESUZGX1FVRVVFX0NMRUFSKCZvdXRxKTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWlmICghcCkKKwkJCS8qIHdlIGFscmVhZHkgbWVyZ2VkIHRoaXMgd2l0aCBpdHMgcGVlciAqLworCQkJY29udGludWU7CisJCWVsc2UgaWYgKHAtPmJyb2tlbl9wYWlyICYmCisJCQkgIXN0cmNtcChwLT5vbmUtPnBhdGgsIHAtPnR3by0+cGF0aCkpIHsKKwkJCS8qIElmIHRoZSBwZWVyIGFsc28gc3Vydml2ZWQgcmVuYW1lL2NvcHksIHRoZW4KKwkJCSAqIHdlIG1lcmdlIHRoZW0gYmFjayB0b2dldGhlci4KKwkJCSAqLworCQkJZm9yIChqID0gaSArIDE7IGogPCBxLT5ucjsgaisrKSB7CisJCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBwID0gcS0+cXVldWVbal07CisJCQkJaWYgKHBwLT5icm9rZW5fcGFpciAmJgorCQkJCSAgICAhc3RyY21wKHBwLT5vbmUtPnBhdGgsIHBwLT50d28tPnBhdGgpICYmCisJCQkJICAgICFzdHJjbXAocC0+b25lLT5wYXRoLCBwcC0+dHdvLT5wYXRoKSkgeworCQkJCQkvKiBQZWVyIHN1cnZpdmVkLiAgTWVyZ2UgdGhlbSAqLworCQkJCQltZXJnZV9icm9rZW4ocCwgcHAsICZvdXRxKTsKKwkJCQkJcS0+cXVldWVbal0gPSBOVUxMOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAocS0+bnIgPD0gaikKKwkJCQkvKiBUaGUgcGVlciBkaWQgbm90IHN1cnZpdmUsIHNvIHdlIGtlZXAKKwkJCQkgKiBpdCBpbiB0aGUgb3V0cHV0LgorCQkJCSAqLworCQkJCWRpZmZfcSgmb3V0cSwgcCk7CisJCX0KKwkJZWxzZQorCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwl9CisJZnJlZShxLT5xdWV1ZSk7CisJKnEgPSBvdXRxOworCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtZGVsdGEuYyBiL2RpZmZjb3JlLWRlbHRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmNDMxZAotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLWRlbHRhLmMKQEAgLTAsMCArMSwyMzMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorCisvKgorICogSWRlYSBoZXJlIGlzIHZlcnkgc2ltcGxlLgorICoKKyAqIEFsbW9zdCBhbGwgZGF0YSB3ZSBhcmUgaW50ZXJlc3RlZCBpbiBhcmUgdGV4dCwgYnV0IHNvbWV0aW1lcyB3ZSBoYXZlCisgKiB0byBkZWFsIHdpdGggYmluYXJ5IGRhdGEuICBTbyB3ZSBjdXQgdGhlbSBpbnRvIGNodW5rcyBkZWxpbWl0ZWQgYnkKKyAqIExGIGJ5dGUsIG9yIDY0LWJ5dGUgc2VxdWVuY2UsIHdoaWNoZXZlciBjb21lcyBmaXJzdCwgYW5kIGhhc2ggdGhlbS4KKyAqCisgKiBGb3IgdGhvc2UgY2h1bmtzLCBpZiB0aGUgc291cmNlIGJ1ZmZlciBoYXMgbW9yZSBpbnN0YW5jZXMgb2YgaXQKKyAqIHRoYW4gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgdGhhdCBtZWFucyB0aGUgZGlmZmVyZW5jZSBhcmUgdGhlCisgKiBudW1iZXIgb2YgYnl0ZXMgbm90IGNvcGllZCBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbi4gIElmIHRoZQorICogY291bnRzIGFyZSB0aGUgc2FtZSwgZXZlcnl0aGluZyB3YXMgY29waWVkIGZyb20gc291cmNlIHRvCisgKiBkZXN0aW5hdGlvbi4gIElmIHRoZSBkZXN0aW5hdGlvbiBoYXMgbW9yZSwgZXZlcnl0aGluZyB3YXMgY29waWVkLAorICogYW5kIGRlc3RpbmF0aW9uIGFkZGVkIG1vcmUuCisgKgorICogV2UgYXJlIGRvaW5nIGFuIGFwcHJveGltYXRpb24gc28gd2UgZG8gbm90IHJlYWxseSBoYXZlIHRvIHdhc3RlCisgKiBtZW1vcnkgYnkgYWN0dWFsbHkgc3RvcmluZyB0aGUgc2VxdWVuY2UuICBXZSBqdXN0IGhhc2ggdGhlbSBpbnRvCisgKiBzb21ld2hlcmUgYXJvdW5kIDJeMTYgaGFzaGJ1Y2tldHMgYW5kIGNvdW50IHRoZSBvY2N1cnJlbmNlcy4KKyAqLworCisvKiBXaWxkIGd1ZXNzIGF0IHRoZSBpbml0aWFsIGhhc2ggc2l6ZSAqLworI2RlZmluZSBJTklUSUFMX0hBU0hfU0laRSA5CisKKy8qIFdlIGxlYXZlIG1vcmUgcm9vbSBpbiBzbWFsbGVyIGhhc2ggYnV0IGRvIG5vdCBsZXQgaXQKKyAqIGdyb3cgdG8gaGF2ZSB1bnVzZWQgaG9sZSB0b28gbXVjaC4KKyAqLworI2RlZmluZSBJTklUSUFMX0ZSRUUoc3pfbG9nMikgKCgxPDwoc3pfbG9nMikpKihzel9sb2cyLTMpLyhzel9sb2cyKSkKKworLyogQSBwcmltZSByYXRoZXIgY2FyZWZ1bGx5IGNob3NlbiBiZXR3ZWVuIDJeMTYuLjJeMTcsIHNvIHRoYXQKKyAqIEhBU0hCQVNFIDwgSU5JVElBTF9GUkVFKDE3KS4gIFdlIHdhbnQgdG8ga2VlcCB0aGUgbWF4aW11bSBoYXNodGFibGUKKyAqIHNpemUgdW5kZXIgdGhlIGN1cnJlbnQgMjw8MTcgbWF4aW11bSwgd2hpY2ggY2FuIGhvbGQgdGhpcyBtYW55CisgKiBkaWZmZXJlbnQgdmFsdWVzIGJlZm9yZSBvdmVyZmxvd2luZyB0byBoYXNodGFibGUgb2Ygc2l6ZSAyPDwxOC4KKyAqLworI2RlZmluZSBIQVNIQkFTRSAxMDc5MjcKKworc3RydWN0IHNwYW5oYXNoIHsKKwl1bnNpZ25lZCBpbnQgaGFzaHZhbDsKKwl1bnNpZ25lZCBpbnQgY250OworfTsKK3N0cnVjdCBzcGFuaGFzaF90b3AgeworCWludCBhbGxvY19sb2cyOworCWludCBmcmVlOworCXN0cnVjdCBzcGFuaGFzaCBkYXRhW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIHN0cnVjdCBzcGFuaGFzaF90b3AgKnNwYW5oYXNoX3JlaGFzaChzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICpvcmlnKQoreworCXN0cnVjdCBzcGFuaGFzaF90b3AgKm5ldzsKKwlpbnQgaTsKKwlpbnQgb3N6ID0gMSA8PCBvcmlnLT5hbGxvY19sb2cyOworCWludCBzeiA9IG9zeiA8PCAxOworCisJbmV3ID0geG1hbGxvYyhzaXplb2YoKm9yaWcpICsgc2l6ZW9mKHN0cnVjdCBzcGFuaGFzaCkgKiBzeik7CisJbmV3LT5hbGxvY19sb2cyID0gb3JpZy0+YWxsb2NfbG9nMiArIDE7CisJbmV3LT5mcmVlID0gSU5JVElBTF9GUkVFKG5ldy0+YWxsb2NfbG9nMik7CisJbWVtc2V0KG5ldy0+ZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBzcGFuaGFzaCkgKiBzeik7CisJZm9yIChpID0gMDsgaSA8IG9zejsgaSsrKSB7CisJCXN0cnVjdCBzcGFuaGFzaCAqbyA9ICYob3JpZy0+ZGF0YVtpXSk7CisJCWludCBidWNrZXQ7CisJCWlmICghby0+Y250KQorCQkJY29udGludWU7CisJCWJ1Y2tldCA9IG8tPmhhc2h2YWwgJiAoc3ogLSAxKTsKKwkJd2hpbGUgKDEpIHsKKwkJCXN0cnVjdCBzcGFuaGFzaCAqaCA9ICYobmV3LT5kYXRhW2J1Y2tldCsrXSk7CisJCQlpZiAoIWgtPmNudCkgeworCQkJCWgtPmhhc2h2YWwgPSBvLT5oYXNodmFsOworCQkJCWgtPmNudCA9IG8tPmNudDsKKwkJCQluZXctPmZyZWUtLTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzeiA8PSBidWNrZXQpCisJCQkJYnVja2V0ID0gMDsKKwkJfQorCX0KKwlmcmVlKG9yaWcpOworCXJldHVybiBuZXc7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3Bhbmhhc2hfdG9wICphZGRfc3Bhbmhhc2goc3RydWN0IHNwYW5oYXNoX3RvcCAqdG9wLAorCQkJCQkgdW5zaWduZWQgaW50IGhhc2h2YWwsIGludCBjbnQpCit7CisJaW50IGJ1Y2tldCwgbGltOworCXN0cnVjdCBzcGFuaGFzaCAqaDsKKworCWxpbSA9ICgxIDw8IHRvcC0+YWxsb2NfbG9nMik7CisJYnVja2V0ID0gaGFzaHZhbCAmIChsaW0gLSAxKTsKKwl3aGlsZSAoMSkgeworCQloID0gJih0b3AtPmRhdGFbYnVja2V0KytdKTsKKwkJaWYgKCFoLT5jbnQpIHsKKwkJCWgtPmhhc2h2YWwgPSBoYXNodmFsOworCQkJaC0+Y250ID0gY250OworCQkJdG9wLT5mcmVlLS07CisJCQlpZiAodG9wLT5mcmVlIDwgMCkKKwkJCQlyZXR1cm4gc3Bhbmhhc2hfcmVoYXNoKHRvcCk7CisJCQlyZXR1cm4gdG9wOworCQl9CisJCWlmIChoLT5oYXNodmFsID09IGhhc2h2YWwpIHsKKwkJCWgtPmNudCArPSBjbnQ7CisJCQlyZXR1cm4gdG9wOworCQl9CisJCWlmIChsaW0gPD0gYnVja2V0KQorCQkJYnVja2V0ID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3Bhbmhhc2hfY21wKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3Qgc3Bhbmhhc2ggKmEgPSBhXzsKKwljb25zdCBzdHJ1Y3Qgc3Bhbmhhc2ggKmIgPSBiXzsKKworCS8qIEEgY291bnQgb2YgemVybyBjb21wYXJlcyBhdCB0aGUgZW5kLi4gKi8KKwlpZiAoIWEtPmNudCkKKwkJcmV0dXJuICFiLT5jbnQgPyAwIDogMTsKKwlpZiAoIWItPmNudCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBhLT5oYXNodmFsIDwgYi0+aGFzaHZhbCA/IC0xIDoKKwkJYS0+aGFzaHZhbCA+IGItPmhhc2h2YWwgPyAxIDogMDsKK30KKworc3RhdGljIHN0cnVjdCBzcGFuaGFzaF90b3AgKmhhc2hfY2hhcnMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKm9uZSkKK3sKKwlpbnQgaSwgbjsKKwl1bnNpZ25lZCBpbnQgYWNjdW0xLCBhY2N1bTIsIGhhc2h2YWw7CisJc3RydWN0IHNwYW5oYXNoX3RvcCAqaGFzaDsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBvbmUtPmRhdGE7CisJdW5zaWduZWQgaW50IHN6ID0gb25lLT5zaXplOworCWludCBpc190ZXh0ID0gIWRpZmZfZmlsZXNwZWNfaXNfYmluYXJ5KG9uZSk7CisKKwlpID0gSU5JVElBTF9IQVNIX1NJWkU7CisJaGFzaCA9IHhtYWxsb2Moc2l6ZW9mKCpoYXNoKSArIHNpemVvZihzdHJ1Y3Qgc3Bhbmhhc2gpICogKDE8PGkpKTsKKwloYXNoLT5hbGxvY19sb2cyID0gaTsKKwloYXNoLT5mcmVlID0gSU5JVElBTF9GUkVFKGkpOworCW1lbXNldChoYXNoLT5kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHNwYW5oYXNoKSAqICgxPDxpKSk7CisKKwluID0gMDsKKwlhY2N1bTEgPSBhY2N1bTIgPSAwOworCXdoaWxlIChzeikgeworCQl1bnNpZ25lZCBpbnQgYyA9ICpidWYrKzsKKwkJdW5zaWduZWQgaW50IG9sZF8xID0gYWNjdW0xOworCQlzei0tOworCisJCS8qIElnbm9yZSBDUiBpbiBDUkxGIHNlcXVlbmNlIGlmIHRleHQgKi8KKwkJaWYgKGlzX3RleHQgJiYgYyA9PSAnXHInICYmIHN6ICYmICpidWYgPT0gJ1xuJykKKwkJCWNvbnRpbnVlOworCisJCWFjY3VtMSA9IChhY2N1bTEgPDwgNykgXiAoYWNjdW0yID4+IDI1KTsKKwkJYWNjdW0yID0gKGFjY3VtMiA8PCA3KSBeIChvbGRfMSA+PiAyNSk7CisJCWFjY3VtMSArPSBjOworCQlpZiAoKytuIDwgNjQgJiYgYyAhPSAnXG4nKQorCQkJY29udGludWU7CisJCWhhc2h2YWwgPSAoYWNjdW0xICsgYWNjdW0yICogMHg2MSkgJSBIQVNIQkFTRTsKKwkJaGFzaCA9IGFkZF9zcGFuaGFzaChoYXNoLCBoYXNodmFsLCBuKTsKKwkJbiA9IDA7CisJCWFjY3VtMSA9IGFjY3VtMiA9IDA7CisJfQorCXFzb3J0KGhhc2gtPmRhdGEsCisJCTF1bCA8PCBoYXNoLT5hbGxvY19sb2cyLAorCQlzaXplb2YoaGFzaC0+ZGF0YVswXSksCisJCXNwYW5oYXNoX2NtcCk7CisJcmV0dXJuIGhhc2g7Cit9CisKK2ludCBkaWZmY29yZV9jb3VudF9jaGFuZ2VzKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcmMsCisJCQkgICBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZHN0LAorCQkJICAgdm9pZCAqKnNyY19jb3VudF9wLAorCQkJICAgdm9pZCAqKmRzdF9jb3VudF9wLAorCQkJICAgdW5zaWduZWQgbG9uZyBkZWx0YV9saW1pdCwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKnNyY19jb3BpZWQsCisJCQkgICB1bnNpZ25lZCBsb25nICpsaXRlcmFsX2FkZGVkKQoreworCXN0cnVjdCBzcGFuaGFzaCAqcywgKmQ7CisJc3RydWN0IHNwYW5oYXNoX3RvcCAqc3JjX2NvdW50LCAqZHN0X2NvdW50OworCXVuc2lnbmVkIGxvbmcgc2MsIGxhOworCisJc3JjX2NvdW50ID0gZHN0X2NvdW50ID0gTlVMTDsKKwlpZiAoc3JjX2NvdW50X3ApCisJCXNyY19jb3VudCA9ICpzcmNfY291bnRfcDsKKwlpZiAoIXNyY19jb3VudCkgeworCQlzcmNfY291bnQgPSBoYXNoX2NoYXJzKHNyYyk7CisJCWlmIChzcmNfY291bnRfcCkKKwkJCSpzcmNfY291bnRfcCA9IHNyY19jb3VudDsKKwl9CisJaWYgKGRzdF9jb3VudF9wKQorCQlkc3RfY291bnQgPSAqZHN0X2NvdW50X3A7CisJaWYgKCFkc3RfY291bnQpIHsKKwkJZHN0X2NvdW50ID0gaGFzaF9jaGFycyhkc3QpOworCQlpZiAoZHN0X2NvdW50X3ApCisJCQkqZHN0X2NvdW50X3AgPSBkc3RfY291bnQ7CisJfQorCXNjID0gbGEgPSAwOworCisJcyA9IHNyY19jb3VudC0+ZGF0YTsKKwlkID0gZHN0X2NvdW50LT5kYXRhOworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgZHN0X2NudCwgc3JjX2NudDsKKwkJaWYgKCFzLT5jbnQpCisJCQlicmVhazsgLyogd2UgY2hlY2tlZCBhbGwgaW4gc3JjICovCisJCXdoaWxlIChkLT5jbnQpIHsKKwkJCWlmIChkLT5oYXNodmFsID49IHMtPmhhc2h2YWwpCisJCQkJYnJlYWs7CisJCQlsYSArPSBkLT5jbnQ7CisJCQlkKys7CisJCX0KKwkJc3JjX2NudCA9IHMtPmNudDsKKwkJZHN0X2NudCA9IDA7CisJCWlmIChkLT5jbnQgJiYgZC0+aGFzaHZhbCA9PSBzLT5oYXNodmFsKSB7CisJCQlkc3RfY250ID0gZC0+Y250OworCQkJZCsrOworCQl9CisJCWlmIChzcmNfY250IDwgZHN0X2NudCkgeworCQkJbGEgKz0gZHN0X2NudCAtIHNyY19jbnQ7CisJCQlzYyArPSBzcmNfY250OworCQl9CisJCWVsc2UKKwkJCXNjICs9IGRzdF9jbnQ7CisJCXMrKzsKKwl9CisJd2hpbGUgKGQtPmNudCkgeworCQlsYSArPSBkLT5jbnQ7CisJCWQrKzsKKwl9CisKKwlpZiAoIXNyY19jb3VudF9wKQorCQlmcmVlKHNyY19jb3VudCk7CisJaWYgKCFkc3RfY291bnRfcCkKKwkJZnJlZShkc3RfY291bnQpOworCSpzcmNfY29waWVkID0gc2M7CisJKmxpdGVyYWxfYWRkZWQgPSBsYTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLW9yZGVyLmMgYi9kaWZmY29yZS1vcmRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3ZGQzZDAKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmY29yZS1vcmRlci5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorCitzdGF0aWMgY2hhciAqKm9yZGVyOworc3RhdGljIGludCBvcmRlcl9jbnQ7CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfb3JkZXIoY29uc3QgY2hhciAqb3JkZXJmaWxlKQoreworCWludCBjbnQsIHBhc3M7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXZvaWQgKm1hcDsKKwljaGFyICpjcCwgKmVuZHA7CisJc3NpemVfdCBzejsKKworCWlmIChvcmRlcikKKwkJcmV0dXJuOworCisJc3ogPSBzdHJidWZfcmVhZF9maWxlKCZzYiwgb3JkZXJmaWxlLCAwKTsKKwlpZiAoc3ogPCAwKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciKSwgb3JkZXJmaWxlKTsKKwltYXAgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisJZW5kcCA9IChjaGFyICopIG1hcCArIHN6OworCisJZm9yIChwYXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykgeworCQljbnQgPSAwOworCQljcCA9IG1hcDsKKwkJd2hpbGUgKGNwIDwgZW5kcCkgeworCQkJY2hhciAqZXA7CisJCQlmb3IgKGVwID0gY3A7IGVwIDwgZW5kcCAmJiAqZXAgIT0gJ1xuJzsgZXArKykKKwkJCQk7CisJCQkvKiBjcCB0byBlcCBoYXMgb25lIGxpbmUgKi8KKwkJCWlmICgqY3AgPT0gJ1xuJyB8fCAqY3AgPT0gJyMnKQorCQkJCTsgLyogY29tbWVudCAqLworCQkJZWxzZSBpZiAocGFzcyA9PSAwKQorCQkJCWNudCsrOworCQkJZWxzZSB7CisJCQkJaWYgKCplcCA9PSAnXG4nKSB7CisJCQkJCSplcCA9IDA7CisJCQkJCW9yZGVyW2NudF0gPSBjcDsKKwkJCQl9IGVsc2UgeworCQkJCQlvcmRlcltjbnRdID0geG1lbWR1cHooY3AsIGVwIC0gY3ApOworCQkJCX0KKwkJCQljbnQrKzsKKwkJCX0KKwkJCWlmIChlcCA8IGVuZHApCisJCQkJZXArKzsKKwkJCWNwID0gZXA7CisJCX0KKwkJaWYgKHBhc3MgPT0gMCkgeworCQkJb3JkZXJfY250ID0gY250OworCQkJb3JkZXIgPSB4bWFsbG9jKHNpemVvZigqb3JkZXIpICogY250KTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBtYXRjaF9vcmRlcihjb25zdCBjaGFyICpwYXRoKQoreworCWludCBpOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHAgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoaSA9IDA7IGkgPCBvcmRlcl9jbnQ7IGkrKykgeworCQlzdHJidWZfcmVzZXQoJnApOworCQlzdHJidWZfYWRkc3RyKCZwLCBwYXRoKTsKKwkJd2hpbGUgKHAuYnVmWzBdKSB7CisJCQljaGFyICpjcDsKKwkJCWlmICghd2lsZG1hdGNoKG9yZGVyW2ldLCBwLmJ1ZiwgMCwgTlVMTCkpCisJCQkJcmV0dXJuIGk7CisJCQljcCA9IHN0cnJjaHIocC5idWYsICcvJyk7CisJCQlpZiAoIWNwKQorCQkJCWJyZWFrOworCQkJKmNwID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gb3JkZXJfY250OworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfb2Jqc19vcmRlcihjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IG9ial9vcmRlciBjb25zdCAqYSwgKmI7CisJYSA9IChzdHJ1Y3Qgb2JqX29yZGVyIGNvbnN0ICopYV87CisJYiA9IChzdHJ1Y3Qgb2JqX29yZGVyIGNvbnN0ICopYl87CisJaWYgKGEtPm9yZGVyICE9IGItPm9yZGVyKQorCQlyZXR1cm4gYS0+b3JkZXIgLSBiLT5vcmRlcjsKKwlyZXR1cm4gYS0+b3JpZ19vcmRlciAtIGItPm9yaWdfb3JkZXI7Cit9CisKK3ZvaWQgb3JkZXJfb2JqZWN0cyhjb25zdCBjaGFyICpvcmRlcmZpbGUsIG9ial9wYXRoX2ZuX3Qgb2JqX3BhdGgsCisJCSAgIHN0cnVjdCBvYmpfb3JkZXIgKm9ianMsIGludCBucikKK3sKKwlpbnQgaTsKKworCWlmICghbnIpCisJCXJldHVybjsKKworCXByZXBhcmVfb3JkZXIob3JkZXJmaWxlKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlvYmpzW2ldLm9yaWdfb3JkZXIgPSBpOworCQlvYmpzW2ldLm9yZGVyID0gbWF0Y2hfb3JkZXIob2JqX3BhdGgob2Jqc1tpXS5vYmopKTsKKwl9CisJcXNvcnQob2JqcywgbnIsIHNpemVvZigqb2JqcyksIGNvbXBhcmVfb2Jqc19vcmRlcik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwYWlyX3BhdGh0d28odm9pZCAqb2JqKQoreworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyID0gKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICopb2JqOworCisJcmV0dXJuIHBhaXItPnR3by0+cGF0aDsKK30KKwordm9pZCBkaWZmY29yZV9vcmRlcihjb25zdCBjaGFyICpvcmRlcmZpbGUpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IG9ial9vcmRlciAqbzsKKwlpbnQgaTsKKworCWlmICghcS0+bnIpCisJCXJldHVybjsKKworCW8gPSB4bWFsbG9jKHNpemVvZigqbykgKiBxLT5ucik7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspCisJCW9baV0ub2JqID0gcS0+cXVldWVbaV07CisJb3JkZXJfb2JqZWN0cyhvcmRlcmZpbGUsIHBhaXJfcGF0aHR3bywgbywgcS0+bnIpOworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKQorCQlxLT5xdWV1ZVtpXSA9IG9baV0ub2JqOworCWZyZWUobyk7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUtcGlja2F4ZS5jIGIvZGlmZmNvcmUtcGlja2F4ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MTVjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kaWZmY29yZS1waWNrYXhlLmMKQEAgLTAsMCArMSwyMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiZGlmZmNvcmUuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJrd3NldC5oIgorCit0eXBlZGVmIGludCAoKnBpY2theGVfZm4pKG1tZmlsZV90ICpvbmUsIG1tZmlsZV90ICp0d28sCisJCQkgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkgIHJlZ2V4X3QgKnJlZ2V4cCwga3dzZXRfdCBrd3MpOworCitzdHJ1Y3QgZGlmZmdyZXBfY2IgeworCXJlZ2V4X3QgKnJlZ2V4cDsKKwlpbnQgaGl0OworfTsKKworc3RhdGljIHZvaWQgZGlmZmdyZXBfY29uc3VtZSh2b2lkICpwcml2LCBjaGFyICpsaW5lLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlzdHJ1Y3QgZGlmZmdyZXBfY2IgKmRhdGEgPSBwcml2OworCXJlZ21hdGNoX3QgcmVnbWF0Y2g7CisJaW50IGhvbGQ7CisKKwlpZiAobGluZVswXSAhPSAnKycgJiYgbGluZVswXSAhPSAnLScpCisJCXJldHVybjsKKwlpZiAoZGF0YS0+aGl0KQorCQkvKgorCQkgKiBORUVEU1dPUks6IHdlIHNob3VsZCBoYXZlIGEgd2F5IHRvIHRlcm1pbmF0ZSB0aGUKKwkJICogY2FsbGVyIGVhcmx5LgorCQkgKi8KKwkJcmV0dXJuOworCS8qIFl1Y2sgLS0gbGluZSBvdWdodCB0byBiZSAiY29uc3QgY2hhciAqIiEgKi8KKwlob2xkID0gbGluZVtsZW5dOworCWxpbmVbbGVuXSA9ICdcMCc7CisJZGF0YS0+aGl0ID0gIXJlZ2V4ZWMoZGF0YS0+cmVnZXhwLCBsaW5lICsgMSwgMSwgJnJlZ21hdGNoLCAwKTsKKwlsaW5lW2xlbl0gPSBob2xkOworfQorCitzdGF0aWMgaW50IGRpZmZfZ3JlcChtbWZpbGVfdCAqb25lLCBtbWZpbGVfdCAqdHdvLAorCQkgICAgIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCSAgICAgcmVnZXhfdCAqcmVnZXhwLCBrd3NldF90IGt3cykKK3sKKwlyZWdtYXRjaF90IHJlZ21hdGNoOworCXN0cnVjdCBkaWZmZ3JlcF9jYiBlY2JkYXRhOworCXhwcGFyYW1fdCB4cHA7CisJeGRlbWl0Y29uZl90IHhlY2ZnOworCisJaWYgKCFvbmUpCisJCXJldHVybiAhcmVnZXhlYyhyZWdleHAsIHR3by0+cHRyLCAxLCAmcmVnbWF0Y2gsIDApOworCWlmICghdHdvKQorCQlyZXR1cm4gIXJlZ2V4ZWMocmVnZXhwLCBvbmUtPnB0ciwgMSwgJnJlZ21hdGNoLCAwKTsKKworCS8qCisJICogV2UgaGF2ZSBib3RoIHNpZGVzOyBuZWVkIHRvIHJ1biB0ZXh0dWFsIGRpZmYgYW5kIHNlZSBpZgorCSAqIHRoZSBwYXR0ZXJuIGFwcGVhcnMgb24gYWRkZWQvZGVsZXRlZCBsaW5lcy4KKwkgKi8KKwltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCWVjYmRhdGEucmVnZXhwID0gcmVnZXhwOworCWVjYmRhdGEuaGl0ID0gMDsKKwl4ZWNmZy5jdHhsZW4gPSBvLT5jb250ZXh0OworCXhlY2ZnLmludGVyaHVua2N0eGxlbiA9IG8tPmludGVyaHVua2NvbnRleHQ7CisJaWYgKHhkaV9kaWZmX291dGYob25lLCB0d28sIGRpZmZncmVwX2NvbnN1bWUsICZlY2JkYXRhLCAmeHBwLCAmeGVjZmcpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gZWNiZGF0YS5oaXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29udGFpbnMobW1maWxlX3QgKm1mLCByZWdleF90ICpyZWdleHAsIGt3c2V0X3Qga3dzKQoreworCXVuc2lnbmVkIGludCBjbnQ7CisJdW5zaWduZWQgbG9uZyBzejsKKwljb25zdCBjaGFyICpkYXRhOworCisJc3ogPSBtZi0+c2l6ZTsKKwlkYXRhID0gbWYtPnB0cjsKKwljbnQgPSAwOworCisJaWYgKHJlZ2V4cCkgeworCQlyZWdtYXRjaF90IHJlZ21hdGNoOworCQlpbnQgZmxhZ3MgPSAwOworCisJCWFzc2VydChkYXRhW3N6XSA9PSAnXDAnKTsKKwkJd2hpbGUgKCpkYXRhICYmICFyZWdleGVjKHJlZ2V4cCwgZGF0YSwgMSwgJnJlZ21hdGNoLCBmbGFncykpIHsKKwkJCWZsYWdzIHw9IFJFR19OT1RCT0w7CisJCQlkYXRhICs9IHJlZ21hdGNoLnJtX2VvOworCQkJaWYgKCpkYXRhICYmIHJlZ21hdGNoLnJtX3NvID09IHJlZ21hdGNoLnJtX2VvKQorCQkJCWRhdGErKzsKKwkJCWNudCsrOworCQl9CisKKwl9IGVsc2UgeyAvKiBDbGFzc2ljIGV4YWN0IHN0cmluZyBtYXRjaCAqLworCQl3aGlsZSAoc3opIHsKKwkJCXN0cnVjdCBrd3NtYXRjaCBrd3NtOworCQkJc2l6ZV90IG9mZnNldCA9IGt3c2V4ZWMoa3dzLCBkYXRhLCBzeiwgJmt3c20pOworCQkJaWYgKG9mZnNldCA9PSAtMSkKKwkJCQlicmVhazsKKwkJCXN6IC09IG9mZnNldCArIGt3c20uc2l6ZVswXTsKKwkJCWRhdGEgKz0gb2Zmc2V0ICsga3dzbS5zaXplWzBdOworCQkJY250Kys7CisJCX0KKwl9CisJcmV0dXJuIGNudDsKK30KKworc3RhdGljIGludCBoYXNfY2hhbmdlcyhtbWZpbGVfdCAqb25lLCBtbWZpbGVfdCAqdHdvLAorCQkgICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqbywKKwkJICAgICAgIHJlZ2V4X3QgKnJlZ2V4cCwga3dzZXRfdCBrd3MpCit7CisJdW5zaWduZWQgaW50IG9uZV9jb250YWlucyA9IG9uZSA/IGNvbnRhaW5zKG9uZSwgcmVnZXhwLCBrd3MpIDogMDsKKwl1bnNpZ25lZCBpbnQgdHdvX2NvbnRhaW5zID0gdHdvID8gY29udGFpbnModHdvLCByZWdleHAsIGt3cykgOiAwOworCXJldHVybiBvbmVfY29udGFpbnMgIT0gdHdvX2NvbnRhaW5zOworfQorCitzdGF0aWMgaW50IHBpY2theGVfbWF0Y2goc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm8sCisJCQkgcmVnZXhfdCAqcmVnZXhwLCBrd3NldF90IGt3cywgcGlja2F4ZV9mbiBmbikKK3sKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp0ZXh0Y29udl9vbmUgPSBOVUxMOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252X3R3byA9IE5VTEw7CisJbW1maWxlX3QgbWYxLCBtZjI7CisJaW50IHJldDsKKworCWlmICghby0+cGlja2F4ZVswXSkKKwkJcmV0dXJuIDA7CisKKwkvKiBpZ25vcmUgdW5tZXJnZWQgKi8KKwlpZiAoIURJRkZfRklMRV9WQUxJRChwLT5vbmUpICYmICFESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoRElGRl9PUFRfVFNUKG8sIEFMTE9XX1RFWFRDT05WKSkgeworCQl0ZXh0Y29udl9vbmUgPSBnZXRfdGV4dGNvbnYocC0+b25lKTsKKwkJdGV4dGNvbnZfdHdvID0gZ2V0X3RleHRjb252KHAtPnR3byk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGFuIHVubW9kaWZpZWQgcGFpciwgd2Uga25vdyB0aGF0IHRoZSBjb3VudCB3aWxsIGJlIHRoZQorCSAqIHNhbWUgYW5kIGRvbid0IGV2ZW4gaGF2ZSB0byBsb2FkIHRoZSBibG9icy4gVW5sZXNzIHRleHRjb252IGlzIGluCisJICogcGxheSwgX2FuZF8gd2UgYXJlIHVzaW5nIHR3byBkaWZmZXJlbnQgdGV4dGNvbnYgZmlsdGVycyAoZS5nLiwKKwkgKiBiZWNhdXNlIGEgcGFpciBpcyBhbiBleGFjdCByZW5hbWUgd2l0aCBkaWZmZXJlbnQgdGV4dGNvbnYgYXR0cmlidXRlcworCSAqIGZvciBlYWNoIHNpZGUsIHdoaWNoIG1pZ2h0IGdlbmVyYXRlIGRpZmZlcmVudCBjb250ZW50KS4KKwkgKi8KKwlpZiAodGV4dGNvbnZfb25lID09IHRleHRjb252X3R3byAmJiBkaWZmX3VubW9kaWZpZWRfcGFpcihwKSkKKwkJcmV0dXJuIDA7CisKKwltZjEuc2l6ZSA9IGZpbGxfdGV4dGNvbnYodGV4dGNvbnZfb25lLCBwLT5vbmUsICZtZjEucHRyKTsKKwltZjIuc2l6ZSA9IGZpbGxfdGV4dGNvbnYodGV4dGNvbnZfdHdvLCBwLT50d28sICZtZjIucHRyKTsKKworCXJldCA9IGZuKERJRkZfRklMRV9WQUxJRChwLT5vbmUpID8gJm1mMSA6IE5VTEwsCisJCSBESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSA/ICZtZjIgOiBOVUxMLAorCQkgbywgcmVnZXhwLCBrd3MpOworCisJaWYgKHRleHRjb252X29uZSkKKwkJZnJlZShtZjEucHRyKTsKKwlpZiAodGV4dGNvbnZfdHdvKQorCQlmcmVlKG1mMi5wdHIpOworCWRpZmZfZnJlZV9maWxlc3BlY19kYXRhKHAtPm9uZSk7CisJZGlmZl9mcmVlX2ZpbGVzcGVjX2RhdGEocC0+dHdvKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBpY2theGUoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvLAorCQkgICAgcmVnZXhfdCAqcmVnZXhwLCBrd3NldF90IGt3cywgcGlja2F4ZV9mbiBmbikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3Qgb3V0cTsKKworCURJRkZfUVVFVUVfQ0xFQVIoJm91dHEpOworCisJaWYgKG8tPnBpY2theGVfb3B0cyAmIERJRkZfUElDS0FYRV9BTEwpIHsKKwkJLyogU2hvd2luZyB0aGUgd2hvbGUgY2hhbmdlc2V0IGlmIG5lZWRsZSBleGlzdHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCQlpZiAocGlja2F4ZV9tYXRjaChwLCBvLCByZWdleHAsIGt3cywgZm4pKQorCQkJCXJldHVybjsgLyogZG8gbm90IG11bmdlIHRoZSBxdWV1ZSAqLworCQl9CisKKwkJLyoKKwkJICogT3RoZXJ3aXNlIHdlIHdpbGwgY2xlYXIgdGhlIHdob2xlIHF1ZXVlIGJ5IGNvcHlpbmcKKwkJICogdGhlIGVtcHR5IG91dHEgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLCBidXQKKwkJICogZmlyc3QgY2xlYXIgdGhlIGN1cnJlbnQgZW50cmllcyBpbiB0aGUgcXVldWUuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykKKwkJCWRpZmZfZnJlZV9maWxlcGFpcihxLT5xdWV1ZVtpXSk7CisJfSBlbHNlIHsKKwkJLyogU2hvd2luZyBvbmx5IHRoZSBmaWxlcGFpcnMgdGhhdCBoYXMgdGhlIG5lZWRsZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKwkJCWlmIChwaWNrYXhlX21hdGNoKHAsIG8sIHJlZ2V4cCwga3dzLCBmbikpCisJCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJCWVsc2UKKwkJCQlkaWZmX2ZyZWVfZmlsZXBhaXIocCk7CisJCX0KKwl9CisKKwlmcmVlKHEtPnF1ZXVlKTsKKwkqcSA9IG91dHE7Cit9CisKK3ZvaWQgZGlmZmNvcmVfcGlja2F4ZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvKQoreworCWNvbnN0IGNoYXIgKm5lZWRsZSA9IG8tPnBpY2theGU7CisJaW50IG9wdHMgPSBvLT5waWNrYXhlX29wdHM7CisJcmVnZXhfdCByZWdleCwgKnJlZ2V4cCA9IE5VTEw7CisJa3dzZXRfdCBrd3MgPSBOVUxMOworCisJaWYgKG9wdHMgJiAoRElGRl9QSUNLQVhFX1JFR0VYIHwgRElGRl9QSUNLQVhFX0tJTkRfRykpIHsKKwkJaW50IGVycjsKKwkJaW50IGNmbGFncyA9IFJFR19FWFRFTkRFRCB8IFJFR19ORVdMSU5FOworCQlpZiAoRElGRl9PUFRfVFNUKG8sIFBJQ0tBWEVfSUdOT1JFX0NBU0UpKQorCQkJY2ZsYWdzIHw9IFJFR19JQ0FTRTsKKwkJZXJyID0gcmVnY29tcCgmcmVnZXgsIG5lZWRsZSwgY2ZsYWdzKTsKKwkJaWYgKGVycikgeworCQkJLyogVGhlIFBPU0lYLjIgcGVvcGxlIGFyZSBzdXJlbHkgc2ljayAqLworCQkJY2hhciBlcnJidWZbMTAyNF07CisJCQlyZWdlcnJvcihlcnIsICZyZWdleCwgZXJyYnVmLCAxMDI0KTsKKwkJCXJlZ2ZyZWUoJnJlZ2V4KTsKKwkJCWRpZSgiaW52YWxpZCByZWdleDogJXMiLCBlcnJidWYpOworCQl9CisJCXJlZ2V4cCA9ICZyZWdleDsKKwl9IGVsc2UgeworCQlrd3MgPSBrd3NhbGxvYyhESUZGX09QVF9UU1QobywgUElDS0FYRV9JR05PUkVfQ0FTRSkKKwkJCSAgICAgICA/IHRvbG93ZXJfdHJhbnNfdGJsIDogTlVMTCk7CisJCWt3c2luY3Ioa3dzLCBuZWVkbGUsIHN0cmxlbihuZWVkbGUpKTsKKwkJa3dzcHJlcChrd3MpOworCX0KKworCS8qIE1pZ2h0IHdhbnQgdG8gd2FybiB3aGVuIGJvdGggUyBhbmQgRyBhcmUgb247IEkgZG9uJ3QgY2FyZS4uLiAqLworCXBpY2theGUoJmRpZmZfcXVldWVkX2RpZmYsIG8sIHJlZ2V4cCwga3dzLAorCQkob3B0cyAmIERJRkZfUElDS0FYRV9LSU5EX0cpID8gZGlmZl9ncmVwIDogaGFzX2NoYW5nZXMpOworCisJaWYgKHJlZ2V4cCkKKwkJcmVnZnJlZShyZWdleHApOworCWVsc2UKKwkJa3dzZnJlZShrd3MpOworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2RpZmZjb3JlLXJlbmFtZS5jIGIvZGlmZmNvcmUtcmVuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxZmUwOAotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLXJlbmFtZS5jCkBAIC0wLDAgKzEsNjc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgImhhc2htYXAuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorCisvKiBUYWJsZSBvZiByZW5hbWUvY29weSBkZXN0aW5hdGlvbnMgKi8KKworc3RhdGljIHN0cnVjdCBkaWZmX3JlbmFtZV9kc3QgeworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICp0d287CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXI7Cit9ICpyZW5hbWVfZHN0Oworc3RhdGljIGludCByZW5hbWVfZHN0X25yLCByZW5hbWVfZHN0X2FsbG9jOworCitzdGF0aWMgaW50IGZpbmRfcmVuYW1lX2RzdChzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvKQoreworCWludCBmaXJzdCwgbGFzdDsKKworCWZpcnN0ID0gMDsKKwlsYXN0ID0gcmVuYW1lX2RzdF9ucjsKKwl3aGlsZSAobGFzdCA+IGZpcnN0KSB7CisJCWludCBuZXh0ID0gKGxhc3QgKyBmaXJzdCkgPj4gMTsKKwkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0ID0gJihyZW5hbWVfZHN0W25leHRdKTsKKwkJaW50IGNtcCA9IHN0cmNtcCh0d28tPnBhdGgsIGRzdC0+dHdvLT5wYXRoKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbmV4dDsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZmlyc3QgPSBuZXh0KzE7CisJfQorCXJldHVybiAtZmlyc3QgLSAxOworfQorCitzdGF0aWMgc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqbG9jYXRlX3JlbmFtZV9kc3Qoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bykKK3sKKwlpbnQgb2ZzID0gZmluZF9yZW5hbWVfZHN0KHR3byk7CisJcmV0dXJuIG9mcyA8IDAgPyBOVUxMIDogJnJlbmFtZV9kc3Rbb2ZzXTsKK30KKworLyoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBpZiB3ZSBmb3VuZCBhIGR1cGxpY2F0ZS4KKyAqLworc3RhdGljIGludCBhZGRfcmVuYW1lX2RzdChzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdHdvKQoreworCWludCBmaXJzdCA9IGZpbmRfcmVuYW1lX2RzdCh0d28pOworCisJaWYgKGZpcnN0ID49IDApCisJCXJldHVybiAtMTsKKwlmaXJzdCA9IC1maXJzdCAtIDE7CisKKwkvKiBpbnNlcnQgdG8gbWFrZSBpdCBhdCAiZmlyc3QiICovCisJQUxMT0NfR1JPVyhyZW5hbWVfZHN0LCByZW5hbWVfZHN0X25yICsgMSwgcmVuYW1lX2RzdF9hbGxvYyk7CisJcmVuYW1lX2RzdF9ucisrOworCWlmIChmaXJzdCA8IHJlbmFtZV9kc3RfbnIpCisJCW1lbW1vdmUocmVuYW1lX2RzdCArIGZpcnN0ICsgMSwgcmVuYW1lX2RzdCArIGZpcnN0LAorCQkJKHJlbmFtZV9kc3RfbnIgLSBmaXJzdCAtIDEpICogc2l6ZW9mKCpyZW5hbWVfZHN0KSk7CisJcmVuYW1lX2RzdFtmaXJzdF0udHdvID0gYWxsb2NfZmlsZXNwZWModHdvLT5wYXRoKTsKKwlmaWxsX2ZpbGVzcGVjKHJlbmFtZV9kc3RbZmlyc3RdLnR3bywgdHdvLT5zaGExLCB0d28tPnNoYTFfdmFsaWQsIHR3by0+bW9kZSk7CisJcmVuYW1lX2RzdFtmaXJzdF0ucGFpciA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRhYmxlIG9mIHJlbmFtZS9jb3B5IHNyYyBmaWxlcyAqLworc3RhdGljIHN0cnVjdCBkaWZmX3JlbmFtZV9zcmMgeworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwOworCXVuc2lnbmVkIHNob3J0IHNjb3JlOyAvKiB0byByZW1lbWJlciB0aGUgYnJlYWsgc2NvcmUgKi8KK30gKnJlbmFtZV9zcmM7CitzdGF0aWMgaW50IHJlbmFtZV9zcmNfbnIsIHJlbmFtZV9zcmNfYWxsb2M7CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9yZW5hbWVfc3JjICpyZWdpc3Rlcl9yZW5hbWVfc3JjKHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwKQoreworCWludCBmaXJzdCwgbGFzdDsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lID0gcC0+b25lOworCXVuc2lnbmVkIHNob3J0IHNjb3JlID0gcC0+c2NvcmU7CisKKwlmaXJzdCA9IDA7CisJbGFzdCA9IHJlbmFtZV9zcmNfbnI7CisJd2hpbGUgKGxhc3QgPiBmaXJzdCkgeworCQlpbnQgbmV4dCA9IChsYXN0ICsgZmlyc3QpID4+IDE7CisJCXN0cnVjdCBkaWZmX3JlbmFtZV9zcmMgKnNyYyA9ICYocmVuYW1lX3NyY1tuZXh0XSk7CisJCWludCBjbXAgPSBzdHJjbXAob25lLT5wYXRoLCBzcmMtPnAtPm9uZS0+cGF0aCk7CisJCWlmICghY21wKQorCQkJcmV0dXJuIHNyYzsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZmlyc3QgPSBuZXh0KzE7CisJfQorCisJLyogaW5zZXJ0IHRvIG1ha2UgaXQgYXQgImZpcnN0IiAqLworCUFMTE9DX0dST1cocmVuYW1lX3NyYywgcmVuYW1lX3NyY19uciArIDEsIHJlbmFtZV9zcmNfYWxsb2MpOworCXJlbmFtZV9zcmNfbnIrKzsKKwlpZiAoZmlyc3QgPCByZW5hbWVfc3JjX25yKQorCQltZW1tb3ZlKHJlbmFtZV9zcmMgKyBmaXJzdCArIDEsIHJlbmFtZV9zcmMgKyBmaXJzdCwKKwkJCShyZW5hbWVfc3JjX25yIC0gZmlyc3QgLSAxKSAqIHNpemVvZigqcmVuYW1lX3NyYykpOworCXJlbmFtZV9zcmNbZmlyc3RdLnAgPSBwOworCXJlbmFtZV9zcmNbZmlyc3RdLnNjb3JlID0gc2NvcmU7CisJcmV0dXJuICYocmVuYW1lX3NyY1tmaXJzdF0pOworfQorCitzdGF0aWMgaW50IGJhc2VuYW1lX3NhbWUoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNyYywgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmRzdCkKK3sKKwlpbnQgc3JjX2xlbiA9IHN0cmxlbihzcmMtPnBhdGgpLCBkc3RfbGVuID0gc3RybGVuKGRzdC0+cGF0aCk7CisJd2hpbGUgKHNyY19sZW4gJiYgZHN0X2xlbikgeworCQljaGFyIGMxID0gc3JjLT5wYXRoWy0tc3JjX2xlbl07CisJCWNoYXIgYzIgPSBkc3QtPnBhdGhbLS1kc3RfbGVuXTsKKwkJaWYgKGMxICE9IGMyKQorCQkJcmV0dXJuIDA7CisJCWlmIChjMSA9PSAnLycpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuICghc3JjX2xlbiB8fCBzcmMtPnBhdGhbc3JjX2xlbiAtIDFdID09ICcvJykgJiYKKwkJKCFkc3RfbGVuIHx8IGRzdC0+cGF0aFtkc3RfbGVuIC0gMV0gPT0gJy8nKTsKK30KKworc3RydWN0IGRpZmZfc2NvcmUgeworCWludCBzcmM7IC8qIGluZGV4IGluIHJlbmFtZV9zcmMgKi8KKwlpbnQgZHN0OyAvKiBpbmRleCBpbiByZW5hbWVfZHN0ICovCisJdW5zaWduZWQgc2hvcnQgc2NvcmU7CisJc2hvcnQgbmFtZV9zY29yZTsKK307CisKK3N0YXRpYyBpbnQgZXN0aW1hdGVfc2ltaWxhcml0eShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3JjLAorCQkJICAgICAgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkc3QsCisJCQkgICAgICAgaW50IG1pbmltdW1fc2NvcmUpCit7CisJLyogc3JjIHBvaW50cyBhdCBhIGZpbGUgdGhhdCBleGlzdGVkIGluIHRoZSBvcmlnaW5hbCB0cmVlIChvcgorCSAqIG9wdGlvbmFsbHkgYSBmaWxlIGluIHRoZSBkZXN0aW5hdGlvbiB0cmVlKSBhbmQgZHN0IHBvaW50cworCSAqIGF0IGEgbmV3bHkgY3JlYXRlZCBmaWxlLiAgVGhleSBtYXkgYmUgcXVpdGUgc2ltaWxhciwgaW4gd2hpY2gKKwkgKiBjYXNlIHdlIHdhbnQgdG8gc2F5IHNyYyBpcyByZW5hbWVkIHRvIGRzdCBvciBzcmMgaXMgY29waWVkIGludG8KKwkgKiBkc3QsIGFuZCB0aGVuIHNvbWUgZWRpdCBoYXMgYmVlbiBhcHBsaWVkIHRvIGRzdC4KKwkgKgorCSAqIENvbXBhcmUgdGhlbSBhbmQgcmV0dXJuIGhvdyBzaW1pbGFyIHRoZXkgYXJlLCByZXByZXNlbnRpbmcKKwkgKiB0aGUgc2NvcmUgYXMgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIE1BWF9TQ09SRS4KKwkgKgorCSAqIFdoZW4gdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2gsIGl0IGlzIGNvbnNpZGVyZWQgYSBiZXR0ZXIKKwkgKiBtYXRjaCB0aGFuIGFueXRoaW5nIGVsc2U7IHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCBldmVuCisJICogY2FsbCBpbnRvIHRoaXMgZnVuY3Rpb24gaW4gdGhhdCBjYXNlLgorCSAqLworCXVuc2lnbmVkIGxvbmcgbWF4X3NpemUsIGRlbHRhX3NpemUsIGJhc2Vfc2l6ZSwgc3JjX2NvcGllZCwgbGl0ZXJhbF9hZGRlZDsKKwl1bnNpZ25lZCBsb25nIGRlbHRhX2xpbWl0OworCWludCBzY29yZTsKKworCS8qIFdlIGRlYWwgb25seSB3aXRoIHJlZ3VsYXIgZmlsZXMuICBTeW1saW5rIHJlbmFtZXMgYXJlIGhhbmRsZWQKKwkgKiBvbmx5IHdoZW4gdGhleSBhcmUgZXhhY3QgbWF0Y2hlcyAtLS0gaW4gb3RoZXIgd29yZHMsIG5vIGVkaXRzCisJICogYWZ0ZXIgcmVuYW1pbmcuCisJICovCisJaWYgKCFTX0lTUkVHKHNyYy0+bW9kZSkgfHwgIVNfSVNSRUcoZHN0LT5tb2RlKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIE5lZWQgdG8gY2hlY2sgdGhhdCBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHNpemVzIGFyZQorCSAqIGZpbGxlZCBpbiBiZWZvcmUgY29tcGFyaW5nIHRoZW0uCisJICoKKwkgKiBJZiB3ZSBhbHJlYWR5IGhhdmUgImNudF9kYXRhIiBmaWxsZWQgaW4sIHdlIGtub3cgaXQncworCSAqIGFsbCBnb29kIChhdm9pZCBjaGVja2luZyB0aGUgc2l6ZSBmb3IgemVybywgYXMgdGhhdAorCSAqIGlzIGEgcG9zc2libGUgc2l6ZSAtIHdlIHJlYWxseSBzaG91bGQgaGF2ZSBhIGZsYWcgdG8KKwkgKiBzYXkgd2hldGhlciB0aGUgc2l6ZSBpcyB2YWxpZCBvciBub3QhKQorCSAqLworCWlmICghc3JjLT5jbnRfZGF0YSAmJgorCSAgICBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHNyYywgQ0hFQ0tfU0laRV9PTkxZKSkKKwkJcmV0dXJuIDA7CisJaWYgKCFkc3QtPmNudF9kYXRhICYmCisJICAgIGRpZmZfcG9wdWxhdGVfZmlsZXNwZWMoZHN0LCBDSEVDS19TSVpFX09OTFkpKQorCQlyZXR1cm4gMDsKKworCW1heF9zaXplID0gKChzcmMtPnNpemUgPiBkc3QtPnNpemUpID8gc3JjLT5zaXplIDogZHN0LT5zaXplKTsKKwliYXNlX3NpemUgPSAoKHNyYy0+c2l6ZSA8IGRzdC0+c2l6ZSkgPyBzcmMtPnNpemUgOiBkc3QtPnNpemUpOworCWRlbHRhX3NpemUgPSBtYXhfc2l6ZSAtIGJhc2Vfc2l6ZTsKKworCS8qIFdlIHdvdWxkIG5vdCBjb25zaWRlciBlZGl0cyB0aGF0IGNoYW5nZSB0aGUgZmlsZSBzaXplIHNvCisJICogZHJhc3RpY2FsbHkuICBkZWx0YV9zaXplIG11c3QgYmUgc21hbGxlciB0aGFuCisJICogKE1BWF9TQ09SRS1taW5pbXVtX3Njb3JlKS9NQVhfU0NPUkUgKiBtaW4oc3JjLT5zaXplLCBkc3QtPnNpemUpLgorCSAqCisJICogTm90ZSB0aGF0IGJhc2Vfc2l6ZSA9PSAwIGNhc2UgaXMgaGFuZGxlZCBoZXJlIGFscmVhZHkKKwkgKiBhbmQgdGhlIGZpbmFsIHNjb3JlIGNvbXB1dGF0aW9uIGJlbG93IHdvdWxkIG5vdCBoYXZlIGEKKwkgKiBkaXZpZGUtYnktemVybyBpc3N1ZS4KKwkgKi8KKwlpZiAobWF4X3NpemUgKiAoTUFYX1NDT1JFLW1pbmltdW1fc2NvcmUpIDwgZGVsdGFfc2l6ZSAqIE1BWF9TQ09SRSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXNyYy0+Y250X2RhdGEgJiYgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhzcmMsIDApKQorCQlyZXR1cm4gMDsKKwlpZiAoIWRzdC0+Y250X2RhdGEgJiYgZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhkc3QsIDApKQorCQlyZXR1cm4gMDsKKworCWRlbHRhX2xpbWl0ID0gKHVuc2lnbmVkIGxvbmcpCisJCShiYXNlX3NpemUgKiAoTUFYX1NDT1JFLW1pbmltdW1fc2NvcmUpIC8gTUFYX1NDT1JFKTsKKwlpZiAoZGlmZmNvcmVfY291bnRfY2hhbmdlcyhzcmMsIGRzdCwKKwkJCQkgICAmc3JjLT5jbnRfZGF0YSwgJmRzdC0+Y250X2RhdGEsCisJCQkJICAgZGVsdGFfbGltaXQsCisJCQkJICAgJnNyY19jb3BpZWQsICZsaXRlcmFsX2FkZGVkKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBIb3cgc2ltaWxhciBhcmUgdGhleT8KKwkgKiB3aGF0IHBlcmNlbnRhZ2Ugb2YgbWF0ZXJpYWwgaW4gZHN0IGFyZSBmcm9tIHNvdXJjZT8KKwkgKi8KKwlpZiAoIWRzdC0+c2l6ZSkKKwkJc2NvcmUgPSAwOyAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCWVsc2UKKwkJc2NvcmUgPSAoaW50KShzcmNfY29waWVkICogTUFYX1NDT1JFIC8gbWF4X3NpemUpOworCXJldHVybiBzY29yZTsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX3JlbmFtZV9wYWlyKGludCBkc3RfaW5kZXgsIGludCBzcmNfaW5kZXgsIGludCBzY29yZSkKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqc3JjLCAqZHN0OworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpkcDsKKworCWlmIChyZW5hbWVfZHN0W2RzdF9pbmRleF0ucGFpcikKKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogZHN0IGFscmVhZHkgbWF0Y2hlZC4iKTsKKworCXNyYyA9IHJlbmFtZV9zcmNbc3JjX2luZGV4XS5wLT5vbmU7CisJc3JjLT5yZW5hbWVfdXNlZCsrOworCXNyYy0+Y291bnQrKzsKKworCWRzdCA9IHJlbmFtZV9kc3RbZHN0X2luZGV4XS50d287CisJZHN0LT5jb3VudCsrOworCisJZHAgPSBkaWZmX3F1ZXVlKE5VTEwsIHNyYywgZHN0KTsKKwlkcC0+cmVuYW1lZF9wYWlyID0gMTsKKwlpZiAoIXN0cmNtcChzcmMtPnBhdGgsIGRzdC0+cGF0aCkpCisJCWRwLT5zY29yZSA9IHJlbmFtZV9zcmNbc3JjX2luZGV4XS5zY29yZTsKKwllbHNlCisJCWRwLT5zY29yZSA9IHNjb3JlOworCXJlbmFtZV9kc3RbZHN0X2luZGV4XS5wYWlyID0gZHA7Cit9CisKKy8qCisgKiBXZSBzb3J0IHRoZSByZW5hbWUgc2ltaWxhcml0eSBtYXRyaXggd2l0aCB0aGUgc2NvcmUsIGluIGRlc2NlbmRpbmcKKyAqIG9yZGVyICh0aGUgbW9zdCBzaW1pbGFyIGZpcnN0KS4KKyAqLworc3RhdGljIGludCBzY29yZV9jb21wYXJlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3QgZGlmZl9zY29yZSAqYSA9IGFfLCAqYiA9IGJfOworCisJLyogc2luayB0aGUgdW51c2VkIG9uZXMgdG8gdGhlIGJvdHRvbSAqLworCWlmIChhLT5kc3QgPCAwKQorCQlyZXR1cm4gKDAgPD0gYi0+ZHN0KTsKKwllbHNlIGlmIChiLT5kc3QgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYS0+c2NvcmUgPT0gYi0+c2NvcmUpCisJCXJldHVybiBiLT5uYW1lX3Njb3JlIC0gYS0+bmFtZV9zY29yZTsKKworCXJldHVybiBiLT5zY29yZSAtIGEtPnNjb3JlOworfQorCitzdHJ1Y3QgZmlsZV9zaW1pbGFyaXR5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnRyeTsKKwlpbnQgaW5kZXg7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmZpbGVzcGVjOworfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBoYXNoX2ZpbGVzcGVjKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpmaWxlc3BlYykKK3sKKwlpZiAoIWZpbGVzcGVjLT5zaGExX3ZhbGlkKSB7CisJCWlmIChkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKGZpbGVzcGVjLCAwKSkKKwkJCXJldHVybiAwOworCQloYXNoX3NoYTFfZmlsZShmaWxlc3BlYy0+ZGF0YSwgZmlsZXNwZWMtPnNpemUsICJibG9iIiwgZmlsZXNwZWMtPnNoYTEpOworCX0KKwlyZXR1cm4gc2hhMWhhc2goZmlsZXNwZWMtPnNoYTEpOworfQorCitzdGF0aWMgaW50IGZpbmRfaWRlbnRpY2FsX2ZpbGVzKHN0cnVjdCBoYXNobWFwICpzcmNzLAorCQkJCWludCBkc3RfaW5kZXgsCisJCQkJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgcmVuYW1lcyA9IDA7CisKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqdGFyZ2V0ID0gcmVuYW1lX2RzdFtkc3RfaW5kZXhdLnR3bzsKKwlzdHJ1Y3QgZmlsZV9zaW1pbGFyaXR5ICpwLCAqYmVzdCA9IE5VTEw7CisJaW50IGkgPSAxMDAsIGJlc3Rfc2NvcmUgPSAtMTsKKworCS8qCisJICogRmluZCB0aGUgYmVzdCBzb3VyY2UgbWF0Y2ggZm9yIHNwZWNpZmllZCBkZXN0aW5hdGlvbi4KKwkgKi8KKwlwID0gaGFzaG1hcF9nZXRfZnJvbV9oYXNoKHNyY3MsIGhhc2hfZmlsZXNwZWModGFyZ2V0KSwgTlVMTCk7CisJZm9yICg7IHA7IHAgPSBoYXNobWFwX2dldF9uZXh0KHNyY3MsIHApKSB7CisJCWludCBzY29yZTsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNvdXJjZSA9IHAtPmZpbGVzcGVjOworCisJCS8qIEZhbHNlIGhhc2ggY29sbGlzaW9uPyAqLworCQlpZiAoaGFzaGNtcChzb3VyY2UtPnNoYTEsIHRhcmdldC0+c2hhMSkpCisJCQljb250aW51ZTsKKwkJLyogTm9uLXJlZ3VsYXIgZmlsZXM/IElmIHNvLCB0aGUgbW9kZXMgbXVzdCBtYXRjaCEgKi8KKwkJaWYgKCFTX0lTUkVHKHNvdXJjZS0+bW9kZSkgfHwgIVNfSVNSRUcodGFyZ2V0LT5tb2RlKSkgeworCQkJaWYgKHNvdXJjZS0+bW9kZSAhPSB0YXJnZXQtPm1vZGUpCisJCQkJY29udGludWU7CisJCX0KKwkJLyogR2l2ZSBoaWdoZXIgc2NvcmVzIHRvIHNvdXJjZXMgdGhhdCBoYXZlbid0IGJlZW4gdXNlZCBhbHJlYWR5ICovCisJCXNjb3JlID0gIXNvdXJjZS0+cmVuYW1lX3VzZWQ7CisJCWlmIChzb3VyY2UtPnJlbmFtZV91c2VkICYmIG9wdGlvbnMtPmRldGVjdF9yZW5hbWUgIT0gRElGRl9ERVRFQ1RfQ09QWSkKKwkJCWNvbnRpbnVlOworCQlzY29yZSArPSBiYXNlbmFtZV9zYW1lKHNvdXJjZSwgdGFyZ2V0KTsKKwkJaWYgKHNjb3JlID4gYmVzdF9zY29yZSkgeworCQkJYmVzdCA9IHA7CisJCQliZXN0X3Njb3JlID0gc2NvcmU7CisJCQlpZiAoc2NvcmUgPT0gMikKKwkJCQlicmVhazsKKwkJfQorCisJCS8qIFRvbyBtYW55IGlkZW50aWNhbCBhbHRlcm5hdGl2ZXM/IFBpY2sgb25lICovCisJCWlmICghLS1pKQorCQkJYnJlYWs7CisJfQorCWlmIChiZXN0KSB7CisJCXJlY29yZF9yZW5hbWVfcGFpcihkc3RfaW5kZXgsIGJlc3QtPmluZGV4LCBNQVhfU0NPUkUpOworCQlyZW5hbWVzKys7CisJfQorCXJldHVybiByZW5hbWVzOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfZmlsZV90YWJsZShzdHJ1Y3QgaGFzaG1hcCAqdGFibGUsIGludCBpbmRleCwgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmZpbGVzcGVjKQoreworCXN0cnVjdCBmaWxlX3NpbWlsYXJpdHkgKmVudHJ5ID0geG1hbGxvYyhzaXplb2YoKmVudHJ5KSk7CisKKwllbnRyeS0+aW5kZXggPSBpbmRleDsKKwllbnRyeS0+ZmlsZXNwZWMgPSBmaWxlc3BlYzsKKworCWhhc2htYXBfZW50cnlfaW5pdChlbnRyeSwgaGFzaF9maWxlc3BlYyhmaWxlc3BlYykpOworCWhhc2htYXBfYWRkKHRhYmxlLCBlbnRyeSk7Cit9CisKKy8qCisgKiBGaW5kIGV4YWN0IHJlbmFtZXMgZmlyc3QuCisgKgorICogVGhlIGZpcnN0IHJvdW5kIG1hdGNoZXMgdXAgdGhlIHVwLXRvLWRhdGUgZW50cmllcywKKyAqIGFuZCB0aGVuIGR1cmluZyB0aGUgc2Vjb25kIHJvdW5kIHdlIHRyeSB0byBtYXRjaAorICogY2FjaGUtZGlydHkgZW50cmllcyBhcyB3ZWxsLgorICovCitzdGF0aWMgaW50IGZpbmRfZXhhY3RfcmVuYW1lcyhzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zKQoreworCWludCBpLCByZW5hbWVzID0gMDsKKwlzdHJ1Y3QgaGFzaG1hcCBmaWxlX3RhYmxlOworCisJLyogQWRkIGFsbCBzb3VyY2VzIHRvIHRoZSBoYXNoIHRhYmxlICovCisJaGFzaG1hcF9pbml0KCZmaWxlX3RhYmxlLCBOVUxMLCByZW5hbWVfc3JjX25yKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVuYW1lX3NyY19ucjsgaSsrKQorCQlpbnNlcnRfZmlsZV90YWJsZSgmZmlsZV90YWJsZSwgaSwgcmVuYW1lX3NyY1tpXS5wLT5vbmUpOworCisJLyogV2FsayB0aGUgZGVzdGluYXRpb25zIGFuZCBmaW5kIGJlc3Qgc291cmNlIG1hdGNoICovCisJZm9yIChpID0gMDsgaSA8IHJlbmFtZV9kc3RfbnI7IGkrKykKKwkJcmVuYW1lcyArPSBmaW5kX2lkZW50aWNhbF9maWxlcygmZmlsZV90YWJsZSwgaSwgb3B0aW9ucyk7CisKKwkvKiBGcmVlIHRoZSBoYXNoIGRhdGEgc3RydWN0dXJlIGFuZCBlbnRyaWVzICovCisJaGFzaG1hcF9mcmVlKCZmaWxlX3RhYmxlLCAxKTsKKworCXJldHVybiByZW5hbWVzOworfQorCisjZGVmaW5lIE5VTV9DQU5ESURBVEVfUEVSX0RTVCA0CitzdGF0aWMgdm9pZCByZWNvcmRfaWZfYmV0dGVyKHN0cnVjdCBkaWZmX3Njb3JlIG1bXSwgc3RydWN0IGRpZmZfc2NvcmUgKm8pCit7CisJaW50IGksIHdvcnN0OworCisJLyogZmluZCB0aGUgd29yc3Qgb25lICovCisJd29yc3QgPSAwOworCWZvciAoaSA9IDE7IGkgPCBOVU1fQ0FORElEQVRFX1BFUl9EU1Q7IGkrKykKKwkJaWYgKHNjb3JlX2NvbXBhcmUoJm1baV0sICZtW3dvcnN0XSkgPiAwKQorCQkJd29yc3QgPSBpOworCisJLyogaXMgaXQgYmV0dGVyIHRoYW4gdGhlIHdvcnN0IG9uZT8gKi8KKwlpZiAoc2NvcmVfY29tcGFyZSgmbVt3b3JzdF0sIG8pID4gMCkKKwkJbVt3b3JzdF0gPSAqbzsKK30KKworLyoKKyAqIFJldHVybnM6CisgKiAwIGlmIHdlIGFyZSB1bmRlciB0aGUgbGltaXQ7CisgKiAxIGlmIHdlIG5lZWQgdG8gZGlzYWJsZSBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb247CisgKiAyIGlmIHdlIHdvdWxkIGJlIHVuZGVyIHRoZSBsaW1pdCBpZiB3ZSB3ZXJlIGdpdmVuIC1DIGluc3RlYWQgb2YgLUMgLUMuCisgKi8KK3N0YXRpYyBpbnQgdG9vX21hbnlfcmVuYW1lX2NhbmRpZGF0ZXMoaW50IG51bV9jcmVhdGUsCisJCQkJICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgcmVuYW1lX2xpbWl0ID0gb3B0aW9ucy0+cmVuYW1lX2xpbWl0OworCWludCBudW1fc3JjID0gcmVuYW1lX3NyY19ucjsKKwlpbnQgaTsKKworCW9wdGlvbnMtPm5lZWRlZF9yZW5hbWVfbGltaXQgPSAwOworCisJLyoKKwkgKiBUaGlzIGJhc2ljYWxseSBkb2VzIGEgdGVzdCBmb3IgdGhlIHJlbmFtZSBtYXRyaXggbm90CisJICogZ3Jvd2luZyBsYXJnZXIgdGhhbiBhICJyZW5hbWVfbGltaXQiIHNxdWFyZSBtYXRyaXgsIGllOgorCSAqCisJICogICAgbnVtX2NyZWF0ZSAqIG51bV9zcmMgPiByZW5hbWVfbGltaXQgKiByZW5hbWVfbGltaXQKKwkgKgorCSAqIGJ1dCBoYW5kbGVzIHRoZSBwb3RlbnRpYWwgb3ZlcmZsb3cgY2FzZSBzcGVjaWFsbHkgKGFuZCB3ZQorCSAqIGFzc3VtZSBhdCBsZWFzdCAzMi1iaXQgaW50ZWdlcnMpCisJICovCisJaWYgKHJlbmFtZV9saW1pdCA8PSAwIHx8IHJlbmFtZV9saW1pdCA+IDMyNzY3KQorCQlyZW5hbWVfbGltaXQgPSAzMjc2NzsKKwlpZiAoKG51bV9jcmVhdGUgPD0gcmVuYW1lX2xpbWl0IHx8IG51bV9zcmMgPD0gcmVuYW1lX2xpbWl0KSAmJgorCSAgICAobnVtX2NyZWF0ZSAqIG51bV9zcmMgPD0gcmVuYW1lX2xpbWl0ICogcmVuYW1lX2xpbWl0KSkKKwkJcmV0dXJuIDA7CisKKwlvcHRpb25zLT5uZWVkZWRfcmVuYW1lX2xpbWl0ID0KKwkJbnVtX3NyYyA+IG51bV9jcmVhdGUgPyBudW1fc3JjIDogbnVtX2NyZWF0ZTsKKworCS8qIEFyZSB3ZSBydW5uaW5nIHVuZGVyIC1DIC1DPyAqLworCWlmICghRElGRl9PUFRfVFNUKG9wdGlvbnMsIEZJTkRfQ09QSUVTX0hBUkRFUikpCisJCXJldHVybiAxOworCisJLyogV291bGQgd2UgYnVzdCB0aGUgbGltaXQgaWYgd2Ugd2VyZSBydW5uaW5nIHVuZGVyIC1DPyAqLworCWZvciAobnVtX3NyYyA9IGkgPSAwOyBpIDwgcmVuYW1lX3NyY19ucjsgaSsrKSB7CisJCWlmIChkaWZmX3VubW9kaWZpZWRfcGFpcihyZW5hbWVfc3JjW2ldLnApKQorCQkJY29udGludWU7CisJCW51bV9zcmMrKzsKKwl9CisJaWYgKChudW1fY3JlYXRlIDw9IHJlbmFtZV9saW1pdCB8fCBudW1fc3JjIDw9IHJlbmFtZV9saW1pdCkgJiYKKwkgICAgKG51bV9jcmVhdGUgKiBudW1fc3JjIDw9IHJlbmFtZV9saW1pdCAqIHJlbmFtZV9saW1pdCkpCisJCXJldHVybiAyOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGZpbmRfcmVuYW1lcyhzdHJ1Y3QgZGlmZl9zY29yZSAqbXgsIGludCBkc3RfY250LCBpbnQgbWluaW11bV9zY29yZSwgaW50IGNvcGllcykKK3sKKwlpbnQgY291bnQgPSAwLCBpOworCisJZm9yIChpID0gMDsgaSA8IGRzdF9jbnQgKiBOVU1fQ0FORElEQVRFX1BFUl9EU1Q7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9yZW5hbWVfZHN0ICpkc3Q7CisKKwkJaWYgKChteFtpXS5kc3QgPCAwKSB8fAorCQkgICAgKG14W2ldLnNjb3JlIDwgbWluaW11bV9zY29yZSkpCisJCQlicmVhazsgLyogdGhlcmUgaXMgbm8gbW9yZSB1c2FibGUgcGFpci4gKi8KKwkJZHN0ID0gJnJlbmFtZV9kc3RbbXhbaV0uZHN0XTsKKwkJaWYgKGRzdC0+cGFpcikKKwkJCWNvbnRpbnVlOyAvKiBhbHJlYWR5IGRvbmUsIGVpdGhlciBleGFjdCBvciBmdXp6eS4gKi8KKwkJaWYgKCFjb3BpZXMgJiYgcmVuYW1lX3NyY1tteFtpXS5zcmNdLnAtPm9uZS0+cmVuYW1lX3VzZWQpCisJCQljb250aW51ZTsKKwkJcmVjb3JkX3JlbmFtZV9wYWlyKG14W2ldLmRzdCwgbXhbaV0uc3JjLCBteFtpXS5zY29yZSk7CisJCWNvdW50Kys7CisJfQorCXJldHVybiBjb3VudDsKK30KKwordm9pZCBkaWZmY29yZV9yZW5hbWUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgZGV0ZWN0X3JlbmFtZSA9IG9wdGlvbnMtPmRldGVjdF9yZW5hbWU7CisJaW50IG1pbmltdW1fc2NvcmUgPSBvcHRpb25zLT5yZW5hbWVfc2NvcmU7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxID0gJmRpZmZfcXVldWVkX2RpZmY7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IG91dHE7CisJc3RydWN0IGRpZmZfc2NvcmUgKm14OworCWludCBpLCBqLCByZW5hbWVfY291bnQsIHNraXBfdW5tb2RpZmllZCA9IDA7CisJaW50IG51bV9jcmVhdGUsIGRzdF9jbnQ7CisJc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcyA9IE5VTEw7CisKKwlpZiAoIW1pbmltdW1fc2NvcmUpCisJCW1pbmltdW1fc2NvcmUgPSBERUZBVUxUX1JFTkFNRV9TQ09SRTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWlmICghRElGRl9GSUxFX1ZBTElEKHAtPm9uZSkpIHsKKwkJCWlmICghRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpCisJCQkJY29udGludWU7IC8qIHVubWVyZ2VkICovCisJCQllbHNlIGlmIChvcHRpb25zLT5zaW5nbGVfZm9sbG93ICYmCisJCQkJIHN0cmNtcChvcHRpb25zLT5zaW5nbGVfZm9sbG93LCBwLT50d28tPnBhdGgpKQorCQkJCWNvbnRpbnVlOyAvKiBub3QgaW50ZXJlc3RlZCAqLworCQkJZWxzZSBpZiAoIURJRkZfT1BUX1RTVChvcHRpb25zLCBSRU5BTUVfRU1QVFkpICYmCisJCQkJIGlzX2VtcHR5X2Jsb2Jfc2hhMShwLT50d28tPnNoYTEpKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZSBpZiAoYWRkX3JlbmFtZV9kc3QocC0+dHdvKSA8IDApIHsKKwkJCQl3YXJuaW5nKCJza2lwcGluZyByZW5hbWUgZGV0ZWN0aW9uLCBkZXRlY3RlZCIKKwkJCQkJIiBkdXBsaWNhdGUgZGVzdGluYXRpb24gJyVzJyIsCisJCQkJCXAtPnR3by0+cGF0aCk7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQl9CisJCWVsc2UgaWYgKCFESUZGX09QVF9UU1Qob3B0aW9ucywgUkVOQU1FX0VNUFRZKSAmJgorCQkJIGlzX2VtcHR5X2Jsb2Jfc2hhMShwLT5vbmUtPnNoYTEpKQorCQkJY29udGludWU7CisJCWVsc2UgaWYgKCFESUZGX1BBSVJfVU5NRVJHRUQocCkgJiYgIURJRkZfRklMRV9WQUxJRChwLT50d28pKSB7CisJCQkvKgorCQkJICogSWYgdGhlIHNvdXJjZSBpcyBhIGJyb2tlbiAiZGVsZXRlIiwgYW5kCisJCQkgKiB0aGV5IGRpZCBub3QgcmVhbGx5IHdhbnQgdG8gZ2V0IGJyb2tlbiwKKwkJCSAqIHRoYXQgbWVhbnMgdGhlIHNvdXJjZSBhY3R1YWxseSBzdGF5cy4KKwkJCSAqIFNvIHdlIGluY3JlbWVudCB0aGUgInJlbmFtZV91c2VkIiBzY29yZQorCQkJICogYnkgb25lLCB0byBpbmRpY2F0ZSBvdXJzZWx2ZXMgYXMgYSB1c2VyCisJCQkgKi8KKwkJCWlmIChwLT5icm9rZW5fcGFpciAmJiAhcC0+c2NvcmUpCisJCQkJcC0+b25lLT5yZW5hbWVfdXNlZCsrOworCQkJcmVnaXN0ZXJfcmVuYW1lX3NyYyhwKTsKKwkJfQorCQllbHNlIGlmIChkZXRlY3RfcmVuYW1lID09IERJRkZfREVURUNUX0NPUFkpIHsKKwkJCS8qCisJCQkgKiBJbmNyZW1lbnQgdGhlICJyZW5hbWVfdXNlZCIgc2NvcmUgYnkKKwkJCSAqIG9uZSwgdG8gaW5kaWNhdGUgb3Vyc2VsdmVzIGFzIGEgdXNlci4KKwkJCSAqLworCQkJcC0+b25lLT5yZW5hbWVfdXNlZCsrOworCQkJcmVnaXN0ZXJfcmVuYW1lX3NyYyhwKTsKKwkJfQorCX0KKwlpZiAocmVuYW1lX2RzdF9uciA9PSAwIHx8IHJlbmFtZV9zcmNfbnIgPT0gMCkKKwkJZ290byBjbGVhbnVwOyAvKiBub3RoaW5nIHRvIGRvICovCisKKwkvKgorCSAqIFdlIHJlYWxseSB3YW50IHRvIGN1bGwgdGhlIGNhbmRpZGF0ZXMgbGlzdCBlYXJseQorCSAqIHdpdGggY2hlYXAgdGVzdHMgaW4gb3JkZXIgdG8gYXZvaWQgZG9pbmcgZGVsdGFzLgorCSAqLworCXJlbmFtZV9jb3VudCA9IGZpbmRfZXhhY3RfcmVuYW1lcyhvcHRpb25zKTsKKworCS8qIERpZCB3ZSBvbmx5IHdhbnQgZXhhY3QgcmVuYW1lcz8gKi8KKwlpZiAobWluaW11bV9zY29yZSA9PSBNQVhfU0NPUkUpCisJCWdvdG8gY2xlYW51cDsKKworCS8qCisJICogQ2FsY3VsYXRlIGhvdyBtYW55IHJlbmFtZXMgYXJlIGxlZnQgKGJ1dCBhbGwgdGhlIHNvdXJjZQorCSAqIGZpbGVzIHN0aWxsIHJlbWFpbiBhcyBvcHRpb25zIGZvciByZW5hbWUvY29waWVzISkKKwkgKi8KKwludW1fY3JlYXRlID0gKHJlbmFtZV9kc3RfbnIgLSByZW5hbWVfY291bnQpOworCisJLyogQWxsIGRvbmU/ICovCisJaWYgKCFudW1fY3JlYXRlKQorCQlnb3RvIGNsZWFudXA7CisKKwlzd2l0Y2ggKHRvb19tYW55X3JlbmFtZV9jYW5kaWRhdGVzKG51bV9jcmVhdGUsIG9wdGlvbnMpKSB7CisJY2FzZSAxOgorCQlnb3RvIGNsZWFudXA7CisJY2FzZSAyOgorCQlvcHRpb25zLT5kZWdyYWRlZF9jY190b19jID0gMTsKKwkJc2tpcF91bm1vZGlmaWVkID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKG9wdGlvbnMtPnNob3dfcmVuYW1lX3Byb2dyZXNzKSB7CisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3NfZGVsYXkoCisJCQkJXygiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iKSwKKwkJCQlyZW5hbWVfZHN0X25yICogcmVuYW1lX3NyY19uciwgNTAsIDEpOworCX0KKworCW14ID0geGNhbGxvYyhudW1fY3JlYXRlICogTlVNX0NBTkRJREFURV9QRVJfRFNULCBzaXplb2YoKm14KSk7CisJZm9yIChkc3RfY250ID0gaSA9IDA7IGkgPCByZW5hbWVfZHN0X25yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3byA9IHJlbmFtZV9kc3RbaV0udHdvOworCQlzdHJ1Y3QgZGlmZl9zY29yZSAqbTsKKworCQlpZiAocmVuYW1lX2RzdFtpXS5wYWlyKQorCQkJY29udGludWU7IC8qIGRlYWx0IHdpdGggZXhhY3QgbWF0Y2ggYWxyZWFkeS4gKi8KKworCQltID0gJm14W2RzdF9jbnQgKiBOVU1fQ0FORElEQVRFX1BFUl9EU1RdOworCQlmb3IgKGogPSAwOyBqIDwgTlVNX0NBTkRJREFURV9QRVJfRFNUOyBqKyspCisJCQltW2pdLmRzdCA9IC0xOworCisJCWZvciAoaiA9IDA7IGogPCByZW5hbWVfc3JjX25yOyBqKyspIHsKKwkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSByZW5hbWVfc3JjW2pdLnAtPm9uZTsKKwkJCXN0cnVjdCBkaWZmX3Njb3JlIHRoaXNfc3JjOworCisJCQlpZiAoc2tpcF91bm1vZGlmaWVkICYmCisJCQkgICAgZGlmZl91bm1vZGlmaWVkX3BhaXIocmVuYW1lX3NyY1tqXS5wKSkKKwkJCQljb250aW51ZTsKKworCQkJdGhpc19zcmMuc2NvcmUgPSBlc3RpbWF0ZV9zaW1pbGFyaXR5KG9uZSwgdHdvLAorCQkJCQkJCSAgICAgbWluaW11bV9zY29yZSk7CisJCQl0aGlzX3NyYy5uYW1lX3Njb3JlID0gYmFzZW5hbWVfc2FtZShvbmUsIHR3byk7CisJCQl0aGlzX3NyYy5kc3QgPSBpOworCQkJdGhpc19zcmMuc3JjID0gajsKKwkJCXJlY29yZF9pZl9iZXR0ZXIobSwgJnRoaXNfc3JjKTsKKwkJCS8qCisJCQkgKiBPbmNlIHdlIHJ1biBlc3RpbWF0ZV9zaW1pbGFyaXR5LAorCQkJICogV2UgZG8gbm90IG5lZWQgdGhlIHRleHQgYW55bW9yZS4KKwkJCSAqLworCQkJZGlmZl9mcmVlX2ZpbGVzcGVjX2Jsb2Iob25lKTsKKwkJCWRpZmZfZnJlZV9maWxlc3BlY19ibG9iKHR3byk7CisJCX0KKwkJZHN0X2NudCsrOworCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCAoaSsxKSpyZW5hbWVfc3JjX25yKTsKKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCisJLyogY29zdCBtYXRyaXggc29ydGVkIGJ5IG1vc3QgdG8gbGVhc3Qgc2ltaWxhciBwYWlyICovCisJcXNvcnQobXgsIGRzdF9jbnQgKiBOVU1fQ0FORElEQVRFX1BFUl9EU1QsIHNpemVvZigqbXgpLCBzY29yZV9jb21wYXJlKTsKKworCXJlbmFtZV9jb3VudCArPSBmaW5kX3JlbmFtZXMobXgsIGRzdF9jbnQsIG1pbmltdW1fc2NvcmUsIDApOworCWlmIChkZXRlY3RfcmVuYW1lID09IERJRkZfREVURUNUX0NPUFkpCisJCXJlbmFtZV9jb3VudCArPSBmaW5kX3JlbmFtZXMobXgsIGRzdF9jbnQsIG1pbmltdW1fc2NvcmUsIDEpOworCWZyZWUobXgpOworCisgY2xlYW51cDoKKwkvKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIGZvdW5kIHNvbWUgcmVuYW1lcyBhbmQgY29waWVzIGFuZCB0aGV5CisJICogYXJlIHJlY29yZGVkIGluIHJlbmFtZV9kc3QuICBUaGUgb3JpZ2luYWwgbGlzdCBpcyBzdGlsbCBpbiAqcS4KKwkgKi8KKwlESUZGX1FVRVVFX0NMRUFSKCZvdXRxKTsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcl90b19mcmVlID0gTlVMTDsKKworCQlpZiAoRElGRl9QQUlSX1VOTUVSR0VEKHApKSB7CisJCQlkaWZmX3EoJm91dHEsIHApOworCQl9CisJCWVsc2UgaWYgKCFESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiBESUZGX0ZJTEVfVkFMSUQocC0+dHdvKSkgeworCQkJLyoKKwkJCSAqIENyZWF0aW9uCisJCQkgKgorCQkJICogV2Ugd291bGQgb3V0cHV0IHRoaXMgY3JlYXRlIHJlY29yZCBpZiBpdCBoYXMKKwkJCSAqIG5vdCBiZWVuIHR1cm5lZCBpbnRvIGEgcmVuYW1lL2NvcHkgYWxyZWFkeS4KKwkJCSAqLworCQkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0ID0gbG9jYXRlX3JlbmFtZV9kc3QocC0+dHdvKTsKKwkJCWlmIChkc3QgJiYgZHN0LT5wYWlyKSB7CisJCQkJZGlmZl9xKCZvdXRxLCBkc3QtPnBhaXIpOworCQkJCXBhaXJfdG9fZnJlZSA9IHA7CisJCQl9CisJCQllbHNlCisJCQkJLyogbm8gbWF0Y2hpbmcgcmVuYW1lL2NvcHkgc291cmNlLCBzbworCQkJCSAqIHJlY29yZCB0aGlzIGFzIGEgY3JlYXRpb24uCisJCQkJICovCisJCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJfQorCQllbHNlIGlmIChESUZGX0ZJTEVfVkFMSUQocC0+b25lKSAmJiAhRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpIHsKKwkJCS8qCisJCQkgKiBEZWxldGlvbgorCQkJICoKKwkJCSAqIFdlIHdvdWxkIG91dHB1dCB0aGlzIGRlbGV0ZSByZWNvcmQgaWY6CisJCQkgKgorCQkJICogKDEpIHRoaXMgaXMgYSBicm9rZW4gZGVsZXRlIGFuZCB0aGUgY291bnRlcnBhcnQKKwkJCSAqICAgICBicm9rZW4gY3JlYXRlIHJlbWFpbnMgaW4gdGhlIG91dHB1dDsgb3IKKwkJCSAqICgyKSB0aGlzIGlzIG5vdCBhIGJyb2tlbiBkZWxldGUsIGFuZCByZW5hbWVfZHN0CisJCQkgKiAgICAgZG9lcyBub3QgaGF2ZSBhIHJlbmFtZS9jb3B5IHRvIG1vdmUgcC0+b25lLT5wYXRoCisJCQkgKiAgICAgb3V0IG9mIGV4aXN0ZW5jZS4KKwkJCSAqCisJCQkgKiBPdGhlcndpc2UsIHRoZSBjb3VudGVycGFydCBicm9rZW4gY3JlYXRlCisJCQkgKiBoYXMgYmVlbiB0dXJuZWQgaW50byBhIHJlbmFtZS1lZGl0OyBvcgorCQkJICogZGVsZXRlIGRpZCBub3QgaGF2ZSBhIG1hdGNoaW5nIGNyZWF0ZSB0bworCQkJICogYmVnaW4gd2l0aC4KKwkJCSAqLworCQkJaWYgKERJRkZfUEFJUl9CUk9LRU4ocCkpIHsKKwkJCQkvKiBicm9rZW4gZGVsZXRlICovCisJCQkJc3RydWN0IGRpZmZfcmVuYW1lX2RzdCAqZHN0ID0gbG9jYXRlX3JlbmFtZV9kc3QocC0+b25lKTsKKwkJCQlpZiAoZHN0ICYmIGRzdC0+cGFpcikKKwkJCQkJLyogY291bnRlcnBhcnQgaXMgbm93IHJlbmFtZS9jb3B5ICovCisJCQkJCXBhaXJfdG9fZnJlZSA9IHA7CisJCQl9CisJCQllbHNlIHsKKwkJCQlpZiAocC0+b25lLT5yZW5hbWVfdXNlZCkKKwkJCQkJLyogdGhpcyBwYXRoIHJlbWFpbnMgKi8KKwkJCQkJcGFpcl90b19mcmVlID0gcDsKKwkJCX0KKworCQkJaWYgKHBhaXJfdG9fZnJlZSkKKwkJCQk7CisJCQllbHNlCisJCQkJZGlmZl9xKCZvdXRxLCBwKTsKKwkJfQorCQllbHNlIGlmICghZGlmZl91bm1vZGlmaWVkX3BhaXIocCkpCisJCQkvKiBhbGwgdGhlIHVzdWFsIG9uZXMgbmVlZCB0byBiZSBrZXB0ICovCisJCQlkaWZmX3EoJm91dHEsIHApOworCQllbHNlCisJCQkvKiBubyBuZWVkIHRvIGtlZXAgdW5tb2RpZmllZCBwYWlycyAqLworCQkJcGFpcl90b19mcmVlID0gcDsKKworCQlpZiAocGFpcl90b19mcmVlKQorCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKHBhaXJfdG9fZnJlZSk7CisJfQorCWRpZmZfZGVidWdfcXVldWUoImRvbmUgY29weWluZyBvcmlnaW5hbCIsICZvdXRxKTsKKworCWZyZWUocS0+cXVldWUpOworCSpxID0gb3V0cTsKKwlkaWZmX2RlYnVnX3F1ZXVlKCJkb25lIGNvbGxhcHNpbmciLCBxKTsKKworCWZvciAoaSA9IDA7IGkgPCByZW5hbWVfZHN0X25yOyBpKyspCisJCWZyZWVfZmlsZXNwZWMocmVuYW1lX2RzdFtpXS50d28pOworCisJZnJlZShyZW5hbWVfZHN0KTsKKwlyZW5hbWVfZHN0ID0gTlVMTDsKKwlyZW5hbWVfZHN0X25yID0gcmVuYW1lX2RzdF9hbGxvYyA9IDA7CisJZnJlZShyZW5hbWVfc3JjKTsKKwlyZW5hbWVfc3JjID0gTlVMTDsKKwlyZW5hbWVfc3JjX25yID0gcmVuYW1lX3NyY19hbGxvYyA9IDA7CisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZGlmZmNvcmUuaCBiL2RpZmZjb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNlYTJkZQotLS0gL2Rldi9udWxsCisrKyBiL2RpZmZjb3JlLmgKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyAqLworI2lmbmRlZiBESUZGQ09SRV9ICisjZGVmaW5lIERJRkZDT1JFX0gKKworLyogVGhpcyBoZWFkZXIgZmlsZSBpcyBpbnRlcm5hbCBiZXR3ZWVuIGRpZmYuYyBhbmQgaXRzIGRpZmYgdHJhbnNmb3JtZXJzCisgKiAoZS5nLiBkaWZmY29yZS1yZW5hbWUsIGRpZmZjb3JlLXBpY2theGUpLiAgTmV2ZXIgaW5jbHVkZSB0aGlzIGhlYWRlcgorICogaW4gYW55dGhpbmcgZWxzZS4KKyAqLworCisvKiBXZSBpbnRlcm5hbGx5IHVzZSB1bnNpZ25lZCBzaG9ydCBhcyB0aGUgc2NvcmUgdmFsdWUsCisgKiBhbmQgcmVseSBvbiBhbiBpbnQgY2FwYWJsZSB0byBob2xkIDMyLWJpdHMuICAtQiBjYW4gdGFrZQorICogLUJtZXJnZV9zY29yZS9icmVha19zY29yZSBmb3JtYXQgYW5kIHRoZSB0d28gc2NvcmVzIGFyZQorICogcGFzc2VkIGFyb3VuZCBpbiBvbmUgaW50IChoaWdoIDE2LWJpdCBmb3IgbWVyZ2UgYW5kIGxvdyAxNi1iaXQKKyAqIGZvciBicmVhaykuCisgKi8KKyNkZWZpbmUgTUFYX1NDT1JFIDYwMDAwLjAKKyNkZWZpbmUgREVGQVVMVF9SRU5BTUVfU0NPUkUgMzAwMDAgLyogcmVuYW1lL2NvcHkgc2ltaWxhcml0eSBtaW5pbXVtICg1MCUpICovCisjZGVmaW5lIERFRkFVTFRfQlJFQUtfU0NPUkUgIDMwMDAwIC8qIG1pbmltdW0gZm9yIGJyZWFrIHRvIGhhcHBlbiAoNTAlKSAqLworI2RlZmluZSBERUZBVUxUX01FUkdFX1NDT1JFICAzNjAwMCAvKiBtYXhpbXVtIGZvciBicmVhay1tZXJnZSB0byBoYXBwZW4gKDYwJSkgKi8KKworI2RlZmluZSBNSU5JTVVNX0JSRUFLX1NJWkUgICAgIDQwMCAvKiBkbyBub3QgYnJlYWsgYSBmaWxlIHNtYWxsZXIgdGhhbiB0aGlzICovCisKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXI7CisKK3N0cnVjdCBkaWZmX2ZpbGVzcGVjIHsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNoYXIgKnBhdGg7CisJdm9pZCAqZGF0YTsKKwl2b2lkICpjbnRfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50IGNvdW50OyAgICAgICAgICAgICAgIC8qIFJlZmVyZW5jZSBjb3VudCAqLworCWludCByZW5hbWVfdXNlZDsgICAgICAgICAvKiBDb3VudCBvZiByZW5hbWUgdXNlcnMgKi8KKwl1bnNpZ25lZCBzaG9ydCBtb2RlOwkgLyogZmlsZSBtb2RlICovCisJdW5zaWduZWQgc2hhMV92YWxpZCA6IDE7IC8qIGlmIHRydWUsIHVzZSBzaGExIGFuZCB0cnVzdCBtb2RlOworCQkJCSAgKiBpZiBmYWxzZSwgdXNlIHRoZSBuYW1lIGFuZCByZWFkIGZyb20KKwkJCQkgICogdGhlIGZpbGVzeXN0ZW0uCisJCQkJICAqLworI2RlZmluZSBESUZGX0ZJTEVfVkFMSUQoc3BlYykgKCgoc3BlYyktPm1vZGUpICE9IDApCisJdW5zaWduZWQgc2hvdWxkX2ZyZWUgOiAxOyAvKiBkYXRhIHNob3VsZCBiZSBmcmVlKCknZWQgKi8KKwl1bnNpZ25lZCBzaG91bGRfbXVubWFwIDogMTsgLyogZGF0YSBzaG91bGQgYmUgbXVubWFwKCknZWQgKi8KKwl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgOiAyOyAgLyogRm9yIHN1Ym1vZHVsZXM6IGl0cyB3b3JrIHRyZWUgaXMgZGlydHkgKi8KKyNkZWZpbmUgRElSVFlfU1VCTU9EVUxFX1VOVFJBQ0tFRCAxCisjZGVmaW5lIERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRCAgMgorCXVuc2lnbmVkIGlzX3N0ZGluIDogMTsKKwl1bnNpZ25lZCBoYXNfbW9yZV9lbnRyaWVzIDogMTsgLyogb25seSBhcHBlYXIgaW4gY29tYmluZWQgZGlmZiAqLworCS8qIGRhdGEgc2hvdWxkIGJlIGNvbnNpZGVyZWQgImJpbmFyeSI7IC0xIG1lYW5zICJkb24ndCBrbm93IHlldCIgKi8KKwlzaWduZWQgaW50IGlzX2JpbmFyeSA6IDI7CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyOworfTsKKworZXh0ZXJuIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICphbGxvY19maWxlc3BlYyhjb25zdCBjaGFyICopOworZXh0ZXJuIHZvaWQgZnJlZV9maWxlc3BlYyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqKTsKK2V4dGVybiB2b2lkIGZpbGxfZmlsZXNwZWMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLAorCQkJICBpbnQsIHVuc2lnbmVkIHNob3J0KTsKKworI2RlZmluZSBDSEVDS19TSVpFX09OTFkgMQorI2RlZmluZSBDSEVDS19CSU5BUlkgICAgMgorZXh0ZXJuIGludCBkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBkaWZmX2ZyZWVfZmlsZXNwZWNfZGF0YShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqKTsKK2V4dGVybiB2b2lkIGRpZmZfZnJlZV9maWxlc3BlY19ibG9iKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICopOworZXh0ZXJuIGludCBkaWZmX2ZpbGVzcGVjX2lzX2JpbmFyeShzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqKTsKKworc3RydWN0IGRpZmZfZmlsZXBhaXIgeworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmU7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnR3bzsKKwl1bnNpZ25lZCBzaG9ydCBpbnQgc2NvcmU7CisJY2hhciBzdGF0dXM7IC8qIE0gQyBSIEEgRCBVIGV0Yy4gKHNlZSBEb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dCBvciBESUZGX1NUQVRVU18qIGluIGRpZmYuaCkgKi8KKwl1bnNpZ25lZCBicm9rZW5fcGFpciA6IDE7CisJdW5zaWduZWQgcmVuYW1lZF9wYWlyIDogMTsKKwl1bnNpZ25lZCBpc191bm1lcmdlZCA6IDE7CisJdW5zaWduZWQgZG9uZV9za2lwX3N0YXRfdW5tYXRjaCA6IDE7CisJdW5zaWduZWQgc2tpcF9zdGF0X3VubWF0Y2hfcmVzdWx0IDogMTsKK307CisjZGVmaW5lIERJRkZfUEFJUl9VTk1FUkdFRChwKSAoKHApLT5pc191bm1lcmdlZCkKKworI2RlZmluZSBESUZGX1BBSVJfUkVOQU1FKHApICgocCktPnJlbmFtZWRfcGFpcikKKworI2RlZmluZSBESUZGX1BBSVJfQlJPS0VOKHApIFwKKwkoICghRElGRl9GSUxFX1ZBTElEKChwKS0+b25lKSAhPSAhRElGRl9GSUxFX1ZBTElEKChwKS0+dHdvKSkgJiYgXAorCSAgKChwKS0+YnJva2VuX3BhaXIgIT0gMCkgKQorCisjZGVmaW5lIERJRkZfUEFJUl9UWVBFX0NIQU5HRUQocCkgXAorCSgoU19JRk1UICYgKHApLT5vbmUtPm1vZGUpICE9IChTX0lGTVQgJiAocCktPnR3by0+bW9kZSkpCisKKyNkZWZpbmUgRElGRl9QQUlSX01PREVfQ0hBTkdFRChwKSAoKHApLT5vbmUtPm1vZGUgIT0gKHApLT50d28tPm1vZGUpCisKK2V4dGVybiB2b2lkIGRpZmZfZnJlZV9maWxlcGFpcihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKTsKKworZXh0ZXJuIGludCBkaWZmX3VubW9kaWZpZWRfcGFpcihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKTsKKworc3RydWN0IGRpZmZfcXVldWVfc3RydWN0IHsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqKnF1ZXVlOworCWludCBhbGxvYzsKKwlpbnQgbnI7Cit9OworI2RlZmluZSBESUZGX1FVRVVFX0NMRUFSKHEpIFwKKwlkbyB7IFwKKwkJKHEpLT5xdWV1ZSA9IE5VTEw7IFwKKwkJKHEpLT5uciA9IChxKS0+YWxsb2MgPSAwOyBcCisJfSB3aGlsZSAoMCkKKworZXh0ZXJuIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBkaWZmX3F1ZXVlZF9kaWZmOworZXh0ZXJuIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpkaWZmX3F1ZXVlKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqLAorCQkJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqLAorCQkJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqKTsKK2V4dGVybiB2b2lkIGRpZmZfcShzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKiwgc3RydWN0IGRpZmZfZmlsZXBhaXIgKik7CisKK2V4dGVybiB2b2lkIGRpZmZjb3JlX2JyZWFrKGludCk7CitleHRlcm4gdm9pZCBkaWZmY29yZV9yZW5hbWUoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKK2V4dGVybiB2b2lkIGRpZmZjb3JlX21lcmdlX2Jyb2tlbih2b2lkKTsKK2V4dGVybiB2b2lkIGRpZmZjb3JlX3BpY2theGUoc3RydWN0IGRpZmZfb3B0aW9ucyAqKTsKK2V4dGVybiB2b2lkIGRpZmZjb3JlX29yZGVyKGNvbnN0IGNoYXIgKm9yZGVyZmlsZSk7CisKKy8qIGxvdy1sZXZlbCBpbnRlcmZhY2UgdG8gZGlmZmNvcmVfb3JkZXIgKi8KK3N0cnVjdCBvYmpfb3JkZXIgeworCXZvaWQgKm9iajsJLyogc2V0dXAgYnkgY2FsbGVyICovCisKKwkvKiBzZXR1cC91c2VkIGJ5IG9yZGVyX29iamVjdHMoKSAqLworCWludCBvcmlnX29yZGVyOworCWludCBvcmRlcjsKK307CisKK3R5cGVkZWYgY29uc3QgY2hhciAqKCpvYmpfcGF0aF9mbl90KSh2b2lkICpvYmopOworCit2b2lkIG9yZGVyX29iamVjdHMoY29uc3QgY2hhciAqb3JkZXJmaWxlLCBvYmpfcGF0aF9mbl90IG9ial9wYXRoLAorCQkgICBzdHJ1Y3Qgb2JqX29yZGVyICpvYmpzLCBpbnQgbnIpOworCisjZGVmaW5lIERJRkZfREVCVUcgMAorI2lmIERJRkZfREVCVUcKK3ZvaWQgZGlmZl9kZWJ1Z19maWxlc3BlYyhzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqLCBpbnQsIGNvbnN0IGNoYXIgKik7Cit2b2lkIGRpZmZfZGVidWdfZmlsZXBhaXIoY29uc3Qgc3RydWN0IGRpZmZfZmlsZXBhaXIgKiwgaW50KTsKK3ZvaWQgZGlmZl9kZWJ1Z19xdWV1ZShjb25zdCBjaGFyICosIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqKTsKKyNlbHNlCisjZGVmaW5lIGRpZmZfZGVidWdfZmlsZXNwZWMoYSxiLGMpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2RlZmluZSBkaWZmX2RlYnVnX2ZpbGVwYWlyKGEsYikgZG8geyAvKiBub3RoaW5nICovIH0gd2hpbGUgKDApCisjZGVmaW5lIGRpZmZfZGVidWdfcXVldWUoYSxiKSBkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKKyNlbmRpZgorCitleHRlcm4gaW50IGRpZmZjb3JlX2NvdW50X2NoYW5nZXMoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNyYywKKwkJCQkgIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpkc3QsCisJCQkJICB2b2lkICoqc3JjX2NvdW50X3AsCisJCQkJICB2b2lkICoqZHN0X2NvdW50X3AsCisJCQkJICB1bnNpZ25lZCBsb25nIGRlbHRhX2xpbWl0LAorCQkJCSAgdW5zaWduZWQgbG9uZyAqc3JjX2NvcGllZCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKmxpdGVyYWxfYWRkZWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Rpci5jIGIvZGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJhOGYwNgotLS0gL2Rldi9udWxsCisrKyBiL2Rpci5jCkBAIC0wLDAgKzEsMjc2NCBAQAorLyoKKyAqIFRoaXMgaGFuZGxlcyByZWN1cnNpdmUgZmlsZW5hbWUgZGV0ZWN0aW9uIHdpdGggZXhjbHVkZQorICogZmlsZXMsIGluZGV4IGtub3dsZWRnZSBldGMuLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL3RlY2huaWNhbC9hcGktZGlyZWN0b3J5LWxpc3RpbmcudHh0CisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNS0yMDA2CisgKgkJIEp1bmlvIEhhbWFubywgMjAwNS0yMDA2CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ3aWxkbWF0Y2guaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJ2YXJpbnQuaCIKKyNpbmNsdWRlICJld2FoL2V3b2suaCIKKworc3RydWN0IHBhdGhfc2ltcGxpZnkgeworCWludCBsZW47CisJY29uc3QgY2hhciAqcGF0aDsKK307CisKKy8qCisgKiBUZWxscyByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUgaG93IGEgZmlsZSBvciBkaXJlY3Rvcnkgc2hvdWxkIGJlIHRyZWF0ZWQuCisgKiBWYWx1ZXMgYXJlIG9yZGVyZWQgYnkgc2lnbmlmaWNhbmNlLCBlLmcuIGlmIGEgZGlyZWN0b3J5IGNvbnRhaW5zIGJvdGgKKyAqIGV4Y2x1ZGVkIGFuZCB1bnRyYWNrZWQgZmlsZXMsIGl0IGlzIGxpc3RlZCBhcyB1bnRyYWNrZWQgYmVjYXVzZQorICogcGF0aF91bnRyYWNrZWQgPiBwYXRoX2V4Y2x1ZGVkLgorICovCitlbnVtIHBhdGhfdHJlYXRtZW50IHsKKwlwYXRoX25vbmUgPSAwLAorCXBhdGhfcmVjdXJzZSwKKwlwYXRoX2V4Y2x1ZGVkLAorCXBhdGhfdW50cmFja2VkCit9OworCisvKgorICogU3VwcG9ydCBkYXRhIHN0cnVjdHVyZSBmb3Igb3VyIG9wZW5kaXIvcmVhZGRpci9jbG9zZWRpciB3cmFwcGVycworICovCitzdHJ1Y3QgY2FjaGVkX2RpciB7CisJRElSICpmZGlyOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQ7CisJaW50IG5yX2ZpbGVzOworCWludCBucl9kaXJzOworCisJc3RydWN0IGRpcmVudCAqZGU7CisJY29uc3QgY2hhciAqZmlsZTsKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqdWNkOworfTsKKworc3RhdGljIGVudW0gcGF0aF90cmVhdG1lbnQgcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwKKwlpbnQgY2hlY2tfb25seSwgY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KTsKK3N0YXRpYyBpbnQgZ2V0X2R0eXBlKHN0cnVjdCBkaXJlbnQgKmRlLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuKTsKKworLyogaGVscGVyIHN0cmluZyBmdW5jdGlvbnMgd2l0aCBzdXBwb3J0IGZvciB0aGUgaWdub3JlX2Nhc2UgZmxhZyAqLworaW50IHN0cmNtcF9pY2FzZShjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCXJldHVybiBpZ25vcmVfY2FzZSA/IHN0cmNhc2VjbXAoYSwgYikgOiBzdHJjbXAoYSwgYik7Cit9CisKK2ludCBzdHJuY21wX2ljYXNlKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gaWdub3JlX2Nhc2UgPyBzdHJuY2FzZWNtcChhLCBiLCBjb3VudCkgOiBzdHJuY21wKGEsIGIsIGNvdW50KTsKK30KKworaW50IGZubWF0Y2hfaWNhc2UoY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIHdpbGRtYXRjaChwYXR0ZXJuLCBzdHJpbmcsCisJCQkgZmxhZ3MgfCAoaWdub3JlX2Nhc2UgPyBXTV9DQVNFRk9MRCA6IDApLAorCQkJIE5VTEwpOworfQorCitpbnQgZ2l0X2ZubWF0Y2goY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sCisJCWNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJaW50IHByZWZpeCkKK3sKKwlpZiAocHJlZml4ID4gMCkgeworCQlpZiAocHNfc3RybmNtcChpdGVtLCBwYXR0ZXJuLCBzdHJpbmcsIHByZWZpeCkpCisJCQlyZXR1cm4gV01fTk9NQVRDSDsKKwkJcGF0dGVybiArPSBwcmVmaXg7CisJCXN0cmluZyArPSBwcmVmaXg7CisJfQorCWlmIChpdGVtLT5mbGFncyAmIFBBVEhTUEVDX09ORVNUQVIpIHsKKwkJaW50IHBhdHRlcm5fbGVuID0gc3RybGVuKCsrcGF0dGVybik7CisJCWludCBzdHJpbmdfbGVuID0gc3RybGVuKHN0cmluZyk7CisJCXJldHVybiBzdHJpbmdfbGVuIDwgcGF0dGVybl9sZW4gfHwKKwkJCXBzX3N0cmNtcChpdGVtLCBwYXR0ZXJuLAorCQkJCSAgc3RyaW5nICsgc3RyaW5nX2xlbiAtIHBhdHRlcm5fbGVuKTsKKwl9CisJaWYgKGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfR0xPQikKKwkJcmV0dXJuIHdpbGRtYXRjaChwYXR0ZXJuLCBzdHJpbmcsCisJCQkJIFdNX1BBVEhOQU1FIHwKKwkJCQkgKGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfSUNBU0UgPyBXTV9DQVNFRk9MRCA6IDApLAorCQkJCSBOVUxMKTsKKwllbHNlCisJCS8qIHdpbGRtYXRjaCBoYXMgbm90IGxlYXJuZWQgbm8gRk5NX1BBVEhOQU1FIG1vZGUgeWV0ICovCisJCXJldHVybiB3aWxkbWF0Y2gocGF0dGVybiwgc3RyaW5nLAorCQkJCSBpdGVtLT5tYWdpYyAmIFBBVEhTUEVDX0lDQVNFID8gV01fQ0FTRUZPTEQgOiAwLAorCQkJCSBOVUxMKTsKK30KKworc3RhdGljIGludCBmbm1hdGNoX2ljYXNlX21lbShjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgcGF0dGVybmxlbiwKKwkJCSAgICAgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgc3RyaW5nbGVuLAorCQkJICAgICBpbnQgZmxhZ3MpCit7CisJaW50IG1hdGNoX3N0YXR1czsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdF9idWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHN0cl9idWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICp1c2VfcGF0ID0gcGF0dGVybjsKKwljb25zdCBjaGFyICp1c2Vfc3RyID0gc3RyaW5nOworCisJaWYgKHBhdHRlcm5bcGF0dGVybmxlbl0pIHsKKwkJc3RyYnVmX2FkZCgmcGF0X2J1ZiwgcGF0dGVybiwgcGF0dGVybmxlbik7CisJCXVzZV9wYXQgPSBwYXRfYnVmLmJ1ZjsKKwl9CisJaWYgKHN0cmluZ1tzdHJpbmdsZW5dKSB7CisJCXN0cmJ1Zl9hZGQoJnN0cl9idWYsIHN0cmluZywgc3RyaW5nbGVuKTsKKwkJdXNlX3N0ciA9IHN0cl9idWYuYnVmOworCX0KKworCWlmIChpZ25vcmVfY2FzZSkKKwkJZmxhZ3MgfD0gV01fQ0FTRUZPTEQ7CisJbWF0Y2hfc3RhdHVzID0gd2lsZG1hdGNoKHVzZV9wYXQsIHVzZV9zdHIsIGZsYWdzLCBOVUxMKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRfYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc3RyX2J1Zik7CisKKwlyZXR1cm4gbWF0Y2hfc3RhdHVzOworfQorCitzdGF0aWMgc2l6ZV90IGNvbW1vbl9wcmVmaXhfbGVuKGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJaW50IG47CisJc2l6ZV90IG1heCA9IDA7CisKKwkvKgorCSAqICI6KGljYXNlKXBhdGgiIGlzIHRyZWF0ZWQgYXMgYSBwYXRoc3BlYyBmdWxsIG9mCisJICogd2lsZGNhcmQuIEluIG90aGVyIHdvcmRzLCBvbmx5IHByZWZpeCBpcyBjb25zaWRlcmVkIGNvbW1vbgorCSAqIHByZWZpeC4gSWYgdGhlIHBhdGhzcGVjIGlzIGFiYy9mb28gYWJjL2JhciwgcnVubmluZyBpbgorCSAqIHN1YmRpciB4eXosIHRoZSBjb21tb24gcHJlZml4IGlzIHN0aWxsIHh5eiwgbm90IHh1ei9hYmMgYXMKKwkgKiBpbiBub24tOihpY2FzZSkuCisJICovCisJR1VBUkRfUEFUSFNQRUMocGF0aHNwZWMsCisJCSAgICAgICBQQVRIU1BFQ19GUk9NVE9QIHwKKwkJICAgICAgIFBBVEhTUEVDX01BWERFUFRIIHwKKwkJICAgICAgIFBBVEhTUEVDX0xJVEVSQUwgfAorCQkgICAgICAgUEFUSFNQRUNfR0xPQiB8CisJCSAgICAgICBQQVRIU1BFQ19JQ0FTRSB8CisJCSAgICAgICBQQVRIU1BFQ19FWENMVURFKTsKKworCWZvciAobiA9IDA7IG4gPCBwYXRoc3BlYy0+bnI7IG4rKykgeworCQlzaXplX3QgaSA9IDAsIGxlbiA9IDAsIGl0ZW1fbGVuOworCQlpZiAocGF0aHNwZWMtPml0ZW1zW25dLm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkKKwkJCWNvbnRpbnVlOworCQlpZiAocGF0aHNwZWMtPml0ZW1zW25dLm1hZ2ljICYgUEFUSFNQRUNfSUNBU0UpCisJCQlpdGVtX2xlbiA9IHBhdGhzcGVjLT5pdGVtc1tuXS5wcmVmaXg7CisJCWVsc2UKKwkJCWl0ZW1fbGVuID0gcGF0aHNwZWMtPml0ZW1zW25dLm5vd2lsZGNhcmRfbGVuOworCQl3aGlsZSAoaSA8IGl0ZW1fbGVuICYmIChuID09IDAgfHwgaSA8IG1heCkpIHsKKwkJCWNoYXIgYyA9IHBhdGhzcGVjLT5pdGVtc1tuXS5tYXRjaFtpXTsKKwkJCWlmIChjICE9IHBhdGhzcGVjLT5pdGVtc1swXS5tYXRjaFtpXSkKKwkJCQlicmVhazsKKwkJCWlmIChjID09ICcvJykKKwkJCQlsZW4gPSBpICsgMTsKKwkJCWkrKzsKKwkJfQorCQlpZiAobiA9PSAwIHx8IGxlbiA8IG1heCkgeworCQkJbWF4ID0gbGVuOworCQkJaWYgKCFtYXgpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIG1heDsKK30KKworLyoKKyAqIFJldHVybnMgYSBjb3B5IG9mIHRoZSBsb25nZXN0IGxlYWRpbmcgcGF0aCBjb21tb24gYW1vbmcgYWxsCisgKiBwYXRoc3BlY3MuCisgKi8KK2NoYXIgKmNvbW1vbl9wcmVmaXgoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwl1bnNpZ25lZCBsb25nIGxlbiA9IGNvbW1vbl9wcmVmaXhfbGVuKHBhdGhzcGVjKTsKKworCXJldHVybiBsZW4gPyB4bWVtZHVweihwYXRoc3BlYy0+aXRlbXNbMF0ubWF0Y2gsIGxlbikgOiBOVUxMOworfQorCitpbnQgZmlsbF9kaXJlY3Rvcnkoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwlzaXplX3QgbGVuOworCisJLyoKKwkgKiBDYWxjdWxhdGUgY29tbW9uIHByZWZpeCBmb3IgdGhlIHBhdGhzcGVjLCBhbmQKKwkgKiB1c2UgdGhhdCB0byBvcHRpbWl6ZSB0aGUgZGlyZWN0b3J5IHdhbGsKKwkgKi8KKwlsZW4gPSBjb21tb25fcHJlZml4X2xlbihwYXRoc3BlYyk7CisKKwkvKiBSZWFkIHRoZSBkaXJlY3RvcnkgYW5kIHBydW5lIGl0ICovCisJcmVhZF9kaXJlY3RvcnkoZGlyLCBwYXRoc3BlYy0+bnIgPyBwYXRoc3BlYy0+X3Jhd1swXSA6ICIiLCBsZW4sIHBhdGhzcGVjKTsKKwlyZXR1cm4gbGVuOworfQorCitpbnQgd2l0aGluX2RlcHRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJaW50IGRlcHRoLCBpbnQgbWF4X2RlcHRoKQoreworCWNvbnN0IGNoYXIgKmNwID0gbmFtZSwgKmNwZSA9IG5hbWUgKyBuYW1lbGVuOworCisJd2hpbGUgKGNwIDwgY3BlKSB7CisJCWlmICgqY3ArKyAhPSAnLycpCisJCQljb250aW51ZTsKKwkJZGVwdGgrKzsKKwkJaWYgKGRlcHRoID4gbWF4X2RlcHRoKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCisjZGVmaW5lIERPX01BVENIX0VYQ0xVREUgICAxCisjZGVmaW5lIERPX01BVENIX0RJUkVDVE9SWSAyCisKKy8qCisgKiBEb2VzICdtYXRjaCcgbWF0Y2ggdGhlIGdpdmVuIG5hbWU/CisgKiBBIG1hdGNoIGlzIGZvdW5kIGlmCisgKgorICogKDEpIHRoZSAnbWF0Y2gnIHN0cmluZyBpcyBsZWFkaW5nIGRpcmVjdG9yeSBvZiAnbmFtZScsIG9yCisgKiAoMikgdGhlICdtYXRjaCcgc3RyaW5nIGlzIGEgd2lsZGNhcmQgYW5kIG1hdGNoZXMgJ25hbWUnLCBvcgorICogKDMpIHRoZSAnbWF0Y2gnIHN0cmluZyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzICduYW1lJy4KKyAqCisgKiBhbmQgdGhlIHJldHVybiB2YWx1ZSB0ZWxscyB3aGljaCBjYXNlIGl0IHdhcy4KKyAqCisgKiBJdCByZXR1cm5zIDAgd2hlbiB0aGVyZSBpcyBubyBtYXRjaC4KKyAqLworc3RhdGljIGludCBtYXRjaF9wYXRoc3BlY19pdGVtKGNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLCBpbnQgcHJlZml4LAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCB1bnNpZ25lZCBmbGFncykKK3sKKwkvKiBuYW1lL25hbWVsZW4gaGFzIHByZWZpeCBjdXQgb2ZmIGJ5IGNhbGxlciAqLworCWNvbnN0IGNoYXIgKm1hdGNoID0gaXRlbS0+bWF0Y2ggKyBwcmVmaXg7CisJaW50IG1hdGNobGVuID0gaXRlbS0+bGVuIC0gcHJlZml4OworCisJLyoKKwkgKiBUaGUgbm9ybWFsIGNhbGwgcGF0dGVybiBpczoKKwkgKiAxLiBwcmVmaXggPSBjb21tb25fcHJlZml4X2xlbihwcyk7CisJICogMi4gcHJ1bmUgc29tZXRoaW5nLCBvciBmaWxsX2RpcmVjdG9yeQorCSAqIDMuIG1hdGNoX3BhdGhzcGVjKCkKKwkgKgorCSAqICdwcmVmaXgnIGF0ICMxIG1heSBiZSBzaG9ydGVyIHRoYW4gdGhlIGNvbW1hbmQncyBwcmVmaXggYW5kCisJICogaXQncyBvayBmb3IgIzIgdG8gbWF0Y2ggZXh0cmEgZmlsZXMuIFRob3NlIGV4dHJhcyB3aWxsIGJlCisJICogdHJpbW1lZCBhdCAjMy4KKwkgKgorCSAqIFN1cHBvc2UgdGhlIHBhdGhzcGVjIGlzICdmb28nIGFuZCAnLi4vYmFyJyBydW5uaW5nIGZyb20KKwkgKiBzdWJkaXIgJ3h5eicuIFRoZSBjb21tb24gcHJlZml4IGF0ICMxIHdpbGwgYmUgZW1wdHksIHRoYW5rcworCSAqIHRvICIuLi8iLiBXZSBtYXkgaGF2ZSB4eXovZm9vIF9hbmRfIFhZWi9mb28gYWZ0ZXIgIzIuIFRoZQorCSAqIHVzZXIgZG9lcyBub3Qgd2FudCBYWVovZm9vLCBvbmx5IHRoZSAiZm9vIiBwYXJ0IHNob3VsZCBiZQorCSAqIGNhc2UtaW5zZW5zaXRpdmUuIFdlIG5lZWQgdG8gZmlsdGVyIG91dCBYWVovZm9vIGhlcmUuIEluCisJICogb3RoZXIgd29yZHMsIHdlIGRvIG5vdCB0cnVzdCB0aGUgY2FsbGVyIG9uIGNvbXBhcmluZyB0aGUKKwkgKiBwcmVmaXggcGFydCB3aGVuIDooaWNhc2UpIGlzIGludm9sdmVkLiBXZSBkbyBleGFjdAorCSAqIGNvbXBhcmlzb24gb3Vyc2VsdmVzLgorCSAqCisJICogTm9ybWFsbHkgdGhlIGNhbGxlciAoY29tbW9uX3ByZWZpeF9sZW4oKSBpbiBmYWN0KSBkb2VzCisJICogX2V4YWN0XyBtYXRjaGluZyBvbiBuYW1lWy1wcmVmaXgrMS4uLTFdIGFuZCB3ZSBkbyBub3QgbmVlZAorCSAqIHRvIGNoZWNrIHRoYXQgcGFydC4gQmUgZGVmZW5zaXZlIGFuZCBjaGVjayBpdCBhbnl3YXksIGluCisJICogY2FzZSBjb21tb25fcHJlZml4X2xlbiBpcyBjaGFuZ2VkLCBvciBhIG5ldyBjYWxsZXIgaXMKKwkgKiBpbnRyb2R1Y2VkIHRoYXQgZG9lcyBub3QgdXNlIGNvbW1vbl9wcmVmaXhfbGVuLgorCSAqCisJICogSWYgdGhlIHBlbmFsdHkgdHVybnMgb3V0IHRvbyBoaWdoIHdoZW4gcHJlZml4IGlzIHJlYWxseQorCSAqIGxvbmcsIG1heWJlIGNoYW5nZSBpdCB0bworCSAqIHN0cm5jbXAobWF0Y2gsIG5hbWUsIGl0ZW0tPnByZWZpeCAtIHByZWZpeCkKKwkgKi8KKwlpZiAoaXRlbS0+cHJlZml4ICYmIChpdGVtLT5tYWdpYyAmIFBBVEhTUEVDX0lDQVNFKSAmJgorCSAgICBzdHJuY21wKGl0ZW0tPm1hdGNoLCBuYW1lIC0gcHJlZml4LCBpdGVtLT5wcmVmaXgpKQorCQlyZXR1cm4gMDsKKworCS8qIElmIHRoZSBtYXRjaCB3YXMganVzdCB0aGUgcHJlZml4LCB3ZSBtYXRjaGVkICovCisJaWYgKCEqbWF0Y2gpCisJCXJldHVybiBNQVRDSEVEX1JFQ1VSU0lWRUxZOworCisJaWYgKG1hdGNobGVuIDw9IG5hbWVsZW4gJiYgIXBzX3N0cm5jbXAoaXRlbSwgbWF0Y2gsIG5hbWUsIG1hdGNobGVuKSkgeworCQlpZiAobWF0Y2hsZW4gPT0gbmFtZWxlbikKKwkJCXJldHVybiBNQVRDSEVEX0VYQUNUTFk7CisKKwkJaWYgKG1hdGNoW21hdGNobGVuLTFdID09ICcvJyB8fCBuYW1lW21hdGNobGVuXSA9PSAnLycpCisJCQlyZXR1cm4gTUFUQ0hFRF9SRUNVUlNJVkVMWTsKKwl9IGVsc2UgaWYgKChmbGFncyAmIERPX01BVENIX0RJUkVDVE9SWSkgJiYKKwkJICAgbWF0Y2hbbWF0Y2hsZW4gLSAxXSA9PSAnLycgJiYKKwkJICAgbmFtZWxlbiA9PSBtYXRjaGxlbiAtIDEgJiYKKwkJICAgIXBzX3N0cm5jbXAoaXRlbSwgbWF0Y2gsIG5hbWUsIG5hbWVsZW4pKQorCQlyZXR1cm4gTUFUQ0hFRF9FWEFDVExZOworCisJaWYgKGl0ZW0tPm5vd2lsZGNhcmRfbGVuIDwgaXRlbS0+bGVuICYmCisJICAgICFnaXRfZm5tYXRjaChpdGVtLCBtYXRjaCwgbmFtZSwKKwkJCSBpdGVtLT5ub3dpbGRjYXJkX2xlbiAtIHByZWZpeCkpCisJCXJldHVybiBNQVRDSEVEX0ZOTUFUQ0g7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdpdmVuIGEgbmFtZSBhbmQgYSBsaXN0IG9mIHBhdGhzcGVjcywgcmV0dXJucyB0aGUgbmF0dXJlIG9mIHRoZQorICogY2xvc2VzdCAoaS5lLiBtb3N0IHNwZWNpZmljKSBtYXRjaCBvZiB0aGUgbmFtZSB0byBhbnkgb2YgdGhlCisgKiBwYXRoc3BlY3MuCisgKgorICogVGhlIGNhbGxlciB0eXBpY2FsbHkgY2FsbHMgdGhpcyBtdWx0aXBsZSB0aW1lcyB3aXRoIHRoZSBzYW1lCisgKiBwYXRoc3BlYyBhbmQgc2VlbltdIGFycmF5IGJ1dCB3aXRoIGRpZmZlcmVudCBuYW1lL25hbWVsZW4KKyAqIChlLmcuIGVudHJpZXMgZnJvbSB0aGUgaW5kZXgpIGFuZCBpcyBpbnRlcmVzdGVkIGluIHNlZWluZyBpZiBhbmQKKyAqIGhvdyBlYWNoIHBhdGhzcGVjIG1hdGNoZXMgYWxsIHRoZSBuYW1lcyBpdCBjYWxscyB0aGlzIGZ1bmN0aW9uCisgKiB3aXRoLiAgQSBtYXJrIGlzIGxlZnQgaW4gdGhlIHNlZW5bXSBhcnJheSBmb3IgZWFjaCBwYXRoc3BlYyBlbGVtZW50CisgKiBpbmRpY2F0aW5nIHRoZSBjbG9zZXN0IHR5cGUgb2YgbWF0Y2ggdGhhdCBlbGVtZW50IGFjaGlldmVkLCBzbyBpZgorICogc2VlbltuXSByZW1haW5zIHplcm8gYWZ0ZXIgbXVsdGlwbGUgaW52b2NhdGlvbnMsIHRoYXQgbWVhbnMgdGhlIG50aAorICogcGF0aHNwZWMgZGlkIG5vdCBtYXRjaCBhbnkgbmFtZXMsIHdoaWNoIGNvdWxkIGluZGljYXRlIHRoYXQgdGhlCisgKiB1c2VyIG1pc3R5cGVkIHRoZSBudGggcGF0aHNwZWMuCisgKi8KK3N0YXRpYyBpbnQgZG9fbWF0Y2hfcGF0aHNwZWMoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQkgICAgIGludCBwcmVmaXgsIGNoYXIgKnNlZW4sCisJCQkgICAgIHVuc2lnbmVkIGZsYWdzKQoreworCWludCBpLCByZXR2YWwgPSAwLCBleGNsdWRlID0gZmxhZ3MgJiBET19NQVRDSF9FWENMVURFOworCisJR1VBUkRfUEFUSFNQRUMocHMsCisJCSAgICAgICBQQVRIU1BFQ19GUk9NVE9QIHwKKwkJICAgICAgIFBBVEhTUEVDX01BWERFUFRIIHwKKwkJICAgICAgIFBBVEhTUEVDX0xJVEVSQUwgfAorCQkgICAgICAgUEFUSFNQRUNfR0xPQiB8CisJCSAgICAgICBQQVRIU1BFQ19JQ0FTRSB8CisJCSAgICAgICBQQVRIU1BFQ19FWENMVURFKTsKKworCWlmICghcHMtPm5yKSB7CisJCWlmICghcHMtPnJlY3Vyc2l2ZSB8fAorCQkgICAgIShwcy0+bWFnaWMgJiBQQVRIU1BFQ19NQVhERVBUSCkgfHwKKwkJICAgIHBzLT5tYXhfZGVwdGggPT0gLTEpCisJCQlyZXR1cm4gTUFUQ0hFRF9SRUNVUlNJVkVMWTsKKworCQlpZiAod2l0aGluX2RlcHRoKG5hbWUsIG5hbWVsZW4sIDAsIHBzLT5tYXhfZGVwdGgpKQorCQkJcmV0dXJuIE1BVENIRURfRVhBQ1RMWTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJbmFtZSArPSBwcmVmaXg7CisJbmFtZWxlbiAtPSBwcmVmaXg7CisKKwlmb3IgKGkgPSBwcy0+bnIgLSAxOyBpID49IDA7IGktLSkgeworCQlpbnQgaG93OworCisJCWlmICgoIWV4Y2x1ZGUgJiYgICBwcy0+aXRlbXNbaV0ubWFnaWMgJiBQQVRIU1BFQ19FWENMVURFKSB8fAorCQkgICAgKCBleGNsdWRlICYmICEocHMtPml0ZW1zW2ldLm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkpKQorCQkJY29udGludWU7CisKKwkJaWYgKHNlZW4gJiYgc2VlbltpXSA9PSBNQVRDSEVEX0VYQUNUTFkpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogTWFrZSBleGNsdWRlIHBhdHRlcm5zIG9wdGlvbmFsIGFuZCBuZXZlciByZXBvcnQKKwkJICogInBhdGhzcGVjICc6KGV4Y2x1ZGUpZm9vJyBtYXRjaGVzIG5vIGZpbGVzIgorCQkgKi8KKwkJaWYgKHNlZW4gJiYgcHMtPml0ZW1zW2ldLm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkKKwkJCXNlZW5baV0gPSBNQVRDSEVEX0ZOTUFUQ0g7CisJCWhvdyA9IG1hdGNoX3BhdGhzcGVjX2l0ZW0ocHMtPml0ZW1zK2ksIHByZWZpeCwgbmFtZSwKKwkJCQkJICBuYW1lbGVuLCBmbGFncyk7CisJCWlmIChwcy0+cmVjdXJzaXZlICYmCisJCSAgICAocHMtPm1hZ2ljICYgUEFUSFNQRUNfTUFYREVQVEgpICYmCisJCSAgICBwcy0+bWF4X2RlcHRoICE9IC0xICYmCisJCSAgICBob3cgJiYgaG93ICE9IE1BVENIRURfRk5NQVRDSCkgeworCQkJaW50IGxlbiA9IHBzLT5pdGVtc1tpXS5sZW47CisJCQlpZiAobmFtZVtsZW5dID09ICcvJykKKwkJCQlsZW4rKzsKKwkJCWlmICh3aXRoaW5fZGVwdGgobmFtZStsZW4sIG5hbWVsZW4tbGVuLCAwLCBwcy0+bWF4X2RlcHRoKSkKKwkJCQlob3cgPSBNQVRDSEVEX0VYQUNUTFk7CisJCQllbHNlCisJCQkJaG93ID0gMDsKKwkJfQorCQlpZiAoaG93KSB7CisJCQlpZiAocmV0dmFsIDwgaG93KQorCQkJCXJldHZhbCA9IGhvdzsKKwkJCWlmIChzZWVuICYmIHNlZW5baV0gPCBob3cpCisJCQkJc2VlbltpXSA9IGhvdzsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgbWF0Y2hfcGF0aHNwZWMoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwcywKKwkJICAgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCSAgIGludCBwcmVmaXgsIGNoYXIgKnNlZW4sIGludCBpc19kaXIpCit7CisJaW50IHBvc2l0aXZlLCBuZWdhdGl2ZTsKKwl1bnNpZ25lZCBmbGFncyA9IGlzX2RpciA/IERPX01BVENIX0RJUkVDVE9SWSA6IDA7CisJcG9zaXRpdmUgPSBkb19tYXRjaF9wYXRoc3BlYyhwcywgbmFtZSwgbmFtZWxlbiwKKwkJCQkgICAgIHByZWZpeCwgc2VlbiwgZmxhZ3MpOworCWlmICghKHBzLT5tYWdpYyAmIFBBVEhTUEVDX0VYQ0xVREUpIHx8ICFwb3NpdGl2ZSkKKwkJcmV0dXJuIHBvc2l0aXZlOworCW5lZ2F0aXZlID0gZG9fbWF0Y2hfcGF0aHNwZWMocHMsIG5hbWUsIG5hbWVsZW4sCisJCQkJICAgICBwcmVmaXgsIHNlZW4sCisJCQkJICAgICBmbGFncyB8IERPX01BVENIX0VYQ0xVREUpOworCXJldHVybiBuZWdhdGl2ZSA/IDAgOiBwb3NpdGl2ZTsKK30KKworaW50IHJlcG9ydF9wYXRoX2Vycm9yKGNvbnN0IGNoYXIgKnBzX21hdGNoZWQsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCSAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwkvKgorCSAqIE1ha2Ugc3VyZSBhbGwgcGF0aHNwZWMgbWF0Y2hlZDsgb3RoZXJ3aXNlIGl0IGlzIGFuIGVycm9yLgorCSAqLworCWludCBudW0sIGVycm9ycyA9IDA7CisJZm9yIChudW0gPSAwOyBudW0gPCBwYXRoc3BlYy0+bnI7IG51bSsrKSB7CisJCWludCBvdGhlciwgZm91bmRfZHVwOworCisJCWlmIChwc19tYXRjaGVkW251bV0pCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogVGhlIGNhbGxlciBtaWdodCBoYXZlIGZlZCBpZGVudGljYWwgcGF0aHNwZWMKKwkJICogdHdpY2UuICBEbyBub3QgYmFyZiBvbiBzdWNoIGEgbWlzdGFrZS4KKwkJICogRklYTUU6IHBhcnNlX3BhdGhzcGVjIHNob3VsZCBoYXZlIGVsaW1pbmF0ZWQKKwkJICogZHVwbGljYXRlIHBhdGhzcGVjLgorCQkgKi8KKwkJZm9yIChmb3VuZF9kdXAgPSBvdGhlciA9IDA7CisJCSAgICAgIWZvdW5kX2R1cCAmJiBvdGhlciA8IHBhdGhzcGVjLT5ucjsKKwkJICAgICBvdGhlcisrKSB7CisJCQlpZiAob3RoZXIgPT0gbnVtIHx8ICFwc19tYXRjaGVkW290aGVyXSkKKwkJCQljb250aW51ZTsKKwkJCWlmICghc3RyY21wKHBhdGhzcGVjLT5pdGVtc1tvdGhlcl0ub3JpZ2luYWwsCisJCQkJICAgIHBhdGhzcGVjLT5pdGVtc1tudW1dLm9yaWdpbmFsKSkKKwkJCQkvKgorCQkJCSAqIE9rLCB3ZSBoYXZlIGEgbWF0Y2ggYWxyZWFkeS4KKwkJCQkgKi8KKwkJCQlmb3VuZF9kdXAgPSAxOworCQl9CisJCWlmIChmb3VuZF9kdXApCisJCQljb250aW51ZTsKKworCQllcnJvcigicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlKHMpIGtub3duIHRvIGdpdC4iLAorCQkgICAgICBwYXRoc3BlYy0+aXRlbXNbbnVtXS5vcmlnaW5hbCk7CisJCWVycm9ycysrOworCX0KKwlyZXR1cm4gZXJyb3JzOworfQorCisvKgorICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlICJzaW1wbGUiIHBhcnQgb2YgYSBwYXRoIG1hdGNoIGxpbWl0ZXIuCisgKi8KK2ludCBzaW1wbGVfbGVuZ3RoKGNvbnN0IGNoYXIgKm1hdGNoKQoreworCWludCBsZW4gPSAtMTsKKworCWZvciAoOzspIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKm1hdGNoKys7CisJCWxlbisrOworCQlpZiAoYyA9PSAnXDAnIHx8IGlzX2dsb2Jfc3BlY2lhbChjKSkKKwkJCXJldHVybiBsZW47CisJfQorfQorCitpbnQgbm9fd2lsZGNhcmQoY29uc3QgY2hhciAqc3RyaW5nKQoreworCXJldHVybiBzdHJpbmdbc2ltcGxlX2xlbmd0aChzdHJpbmcpXSA9PSAnXDAnOworfQorCit2b2lkIHBhcnNlX2V4Y2x1ZGVfcGF0dGVybihjb25zdCBjaGFyICoqcGF0dGVybiwKKwkJCSAgIGludCAqcGF0dGVybmxlbiwKKwkJCSAgIGludCAqZmxhZ3MsCisJCQkgICBpbnQgKm5vd2lsZGNhcmRsZW4pCit7CisJY29uc3QgY2hhciAqcCA9ICpwYXR0ZXJuOworCXNpemVfdCBpLCBsZW47CisKKwkqZmxhZ3MgPSAwOworCWlmICgqcCA9PSAnIScpIHsKKwkJKmZsYWdzIHw9IEVYQ19GTEFHX05FR0FUSVZFOworCQlwKys7CisJfQorCWxlbiA9IHN0cmxlbihwKTsKKwlpZiAobGVuICYmIHBbbGVuIC0gMV0gPT0gJy8nKSB7CisJCWxlbi0tOworCQkqZmxhZ3MgfD0gRVhDX0ZMQUdfTVVTVEJFRElSOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKHBbaV0gPT0gJy8nKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IGxlbikKKwkJKmZsYWdzIHw9IEVYQ19GTEFHX05PRElSOworCSpub3dpbGRjYXJkbGVuID0gc2ltcGxlX2xlbmd0aChwKTsKKwkvKgorCSAqIHdlIHNob3VsZCBoYXZlIGV4Y2x1ZGVkIHRoZSB0cmFpbGluZyBzbGFzaCBmcm9tICdwJyB0b28sCisJICogYnV0IHRoYXQncyBvbmUgbW9yZSBhbGxvY2F0aW9uLiBJbnN0ZWFkIGp1c3QgbWFrZSBzdXJlCisJICogbm93aWxkY2FyZGxlbiBkb2VzIG5vdCBleGNlZWQgcmVhbCBwYXR0ZXJubGVuCisJICovCisJaWYgKCpub3dpbGRjYXJkbGVuID4gbGVuKQorCQkqbm93aWxkY2FyZGxlbiA9IGxlbjsKKwlpZiAoKnAgPT0gJyonICYmIG5vX3dpbGRjYXJkKHAgKyAxKSkKKwkJKmZsYWdzIHw9IEVYQ19GTEFHX0VORFNXSVRIOworCSpwYXR0ZXJuID0gcDsKKwkqcGF0dGVybmxlbiA9IGxlbjsKK30KKwordm9pZCBhZGRfZXhjbHVkZShjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmJhc2UsCisJCSBpbnQgYmFzZWxlbiwgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWwsIGludCBzcmNwb3MpCit7CisJc3RydWN0IGV4Y2x1ZGUgKng7CisJaW50IHBhdHRlcm5sZW47CisJaW50IGZsYWdzOworCWludCBub3dpbGRjYXJkbGVuOworCisJcGFyc2VfZXhjbHVkZV9wYXR0ZXJuKCZzdHJpbmcsICZwYXR0ZXJubGVuLCAmZmxhZ3MsICZub3dpbGRjYXJkbGVuKTsKKwlpZiAoZmxhZ3MgJiBFWENfRkxBR19NVVNUQkVESVIpIHsKKwkJY2hhciAqczsKKwkJeCA9IHhtYWxsb2Moc2l6ZW9mKCp4KSArIHBhdHRlcm5sZW4gKyAxKTsKKwkJcyA9IChjaGFyICopKHgrMSk7CisJCW1lbWNweShzLCBzdHJpbmcsIHBhdHRlcm5sZW4pOworCQlzW3BhdHRlcm5sZW5dID0gJ1wwJzsKKwkJeC0+cGF0dGVybiA9IHM7CisJfSBlbHNlIHsKKwkJeCA9IHhtYWxsb2Moc2l6ZW9mKCp4KSk7CisJCXgtPnBhdHRlcm4gPSBzdHJpbmc7CisJfQorCXgtPnBhdHRlcm5sZW4gPSBwYXR0ZXJubGVuOworCXgtPm5vd2lsZGNhcmRsZW4gPSBub3dpbGRjYXJkbGVuOworCXgtPmJhc2UgPSBiYXNlOworCXgtPmJhc2VsZW4gPSBiYXNlbGVuOworCXgtPmZsYWdzID0gZmxhZ3M7CisJeC0+c3JjcG9zID0gc3JjcG9zOworCUFMTE9DX0dST1coZWwtPmV4Y2x1ZGVzLCBlbC0+bnIgKyAxLCBlbC0+YWxsb2MpOworCWVsLT5leGNsdWRlc1tlbC0+bnIrK10gPSB4OworCXgtPmVsID0gZWw7Cit9CisKK3N0YXRpYyB2b2lkICpyZWFkX3NraXBfd29ya3RyZWVfZmlsZV9mcm9tX2luZGV4KGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCAqc2l6ZSwKKwkJCQkJCXN0cnVjdCBzaGExX3N0YXQgKnNoYTFfc3RhdCkKK3sKKwlpbnQgcG9zLCBsZW47CisJdW5zaWduZWQgbG9uZyBzejsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqZGF0YTsKKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBsZW4pOworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWNlX3NraXBfd29ya3RyZWUoYWN0aXZlX2NhY2hlW3Bvc10pKQorCQlyZXR1cm4gTlVMTDsKKwlkYXRhID0gcmVhZF9zaGExX2ZpbGUoYWN0aXZlX2NhY2hlW3Bvc10tPnNoYTEsICZ0eXBlLCAmc3opOworCWlmICghZGF0YSB8fCB0eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiBOVUxMOworCX0KKwkqc2l6ZSA9IHhzaXplX3Qoc3opOworCWlmIChzaGExX3N0YXQpIHsKKwkJbWVtc2V0KCZzaGExX3N0YXQtPnN0YXQsIDAsIHNpemVvZihzaGExX3N0YXQtPnN0YXQpKTsKKwkJaGFzaGNweShzaGExX3N0YXQtPnNoYTEsIGFjdGl2ZV9jYWNoZVtwb3NdLT5zaGExKTsKKwl9CisJcmV0dXJuIGRhdGE7Cit9CisKKy8qCisgKiBGcmVlcyBtZW1vcnkgd2l0aGluIGVsIHdoaWNoIHdhcyBhbGxvY2F0ZWQgZm9yIGV4Y2x1ZGUgcGF0dGVybnMgYW5kCisgKiB0aGUgZmlsZSBidWZmZXIuICBEb2VzIG5vdCBmcmVlIGVsIGl0c2VsZi4KKyAqLwordm9pZCBjbGVhcl9leGNsdWRlX2xpc3Qoc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZWwtPm5yOyBpKyspCisJCWZyZWUoZWwtPmV4Y2x1ZGVzW2ldKTsKKwlmcmVlKGVsLT5leGNsdWRlcyk7CisJZnJlZShlbC0+ZmlsZWJ1Zik7CisKKwllbC0+bnIgPSAwOworCWVsLT5leGNsdWRlcyA9IE5VTEw7CisJZWwtPmZpbGVidWYgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCB0cmltX3RyYWlsaW5nX3NwYWNlcyhjaGFyICpidWYpCit7CisJY2hhciAqcCwgKmxhc3Rfc3BhY2UgPSBOVUxMOworCisJZm9yIChwID0gYnVmOyAqcDsgcCsrKQorCQlzd2l0Y2ggKCpwKSB7CisJCWNhc2UgJyAnOgorCQkJaWYgKCFsYXN0X3NwYWNlKQorCQkJCWxhc3Rfc3BhY2UgPSBwOworCQkJYnJlYWs7CisJCWNhc2UgJ1xcJzoKKwkJCXArKzsKKwkJCWlmICghKnApCisJCQkJcmV0dXJuOworCQkJLyogZmFsbHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCWxhc3Rfc3BhY2UgPSBOVUxMOworCQl9CisKKwlpZiAobGFzdF9zcGFjZSkKKwkJKmxhc3Rfc3BhY2UgPSAnXDAnOworfQorCisvKgorICogR2l2ZW4gYSBzdWJkaXJlY3RvcnkgbmFtZSBhbmQgImRpciIgb2YgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LAorICogc2VhcmNoIHRoZSBzdWJkaXIgaW4gImRpciIgYW5kIHJldHVybiBpdCwgb3IgY3JlYXRlIGEgbmV3IG9uZSBpZiBpdAorICogZG9lcyBub3QgZXhpc3QgaW4gImRpciIuCisgKgorICogSWYgIm5hbWUiIGhhcyB0aGUgdHJhaWxpbmcgc2xhc2gsIGl0J2xsIGJlIGV4Y2x1ZGVkIGluIHRoZSBzZWFyY2guCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqbG9va3VwX3VudHJhY2tlZChzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YywKKwkJCQkJCSAgICBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZGlyLAorCQkJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJaW50IGZpcnN0LCBsYXN0OworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpkOworCWlmICghZGlyKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAobGVuICYmIG5hbWVbbGVuIC0gMV0gPT0gJy8nKQorCQlsZW4tLTsKKwlmaXJzdCA9IDA7CisJbGFzdCA9IGRpci0+ZGlyc19ucjsKKwl3aGlsZSAobGFzdCA+IGZpcnN0KSB7CisJCWludCBjbXAsIG5leHQgPSAobGFzdCArIGZpcnN0KSA+PiAxOworCQlkID0gZGlyLT5kaXJzW25leHRdOworCQljbXAgPSBzdHJuY21wKG5hbWUsIGQtPm5hbWUsIGxlbik7CisJCWlmICghY21wICYmIHN0cmxlbihkLT5uYW1lKSA+IGxlbikKKwkJCWNtcCA9IC0xOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiBkOworCQlpZiAoY21wIDwgMCkgeworCQkJbGFzdCA9IG5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlmaXJzdCA9IG5leHQrMTsKKwl9CisKKwl1Yy0+ZGlyX2NyZWF0ZWQrKzsKKwlkID0geG1hbGxvYyhzaXplb2YoKmQpICsgbGVuICsgMSk7CisJbWVtc2V0KGQsIDAsIHNpemVvZigqZCkpOworCW1lbWNweShkLT5uYW1lLCBuYW1lLCBsZW4pOworCWQtPm5hbWVbbGVuXSA9ICdcMCc7CisKKwlBTExPQ19HUk9XKGRpci0+ZGlycywgZGlyLT5kaXJzX25yICsgMSwgZGlyLT5kaXJzX2FsbG9jKTsKKwltZW1tb3ZlKGRpci0+ZGlycyArIGZpcnN0ICsgMSwgZGlyLT5kaXJzICsgZmlyc3QsCisJCShkaXItPmRpcnNfbnIgLSBmaXJzdCkgKiBzaXplb2YoKmRpci0+ZGlycykpOworCWRpci0+ZGlyc19ucisrOworCWRpci0+ZGlyc1tmaXJzdF0gPSBkOworCXJldHVybiBkOworfQorCitzdGF0aWMgdm9pZCBkb19pbnZhbGlkYXRlX2dpdGlnbm9yZShzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZGlyKQoreworCWludCBpOworCWRpci0+dmFsaWQgPSAwOworCWRpci0+dW50cmFja2VkX25yID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLT5kaXJzX25yOyBpKyspCisJCWRvX2ludmFsaWRhdGVfZ2l0aWdub3JlKGRpci0+ZGlyc1tpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfZ2l0aWdub3JlKHN0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnVjLAorCQkJCSBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZGlyKQoreworCXVjLT5naXRpZ25vcmVfaW52YWxpZGF0ZWQrKzsKKwlkb19pbnZhbGlkYXRlX2dpdGlnbm9yZShkaXIpOworfQorCitzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX2RpcmVjdG9yeShzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YywKKwkJCQkgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKmRpcikKK3sKKwlpbnQgaTsKKwl1Yy0+ZGlyX2ludmFsaWRhdGVkKys7CisJZGlyLT52YWxpZCA9IDA7CisJZGlyLT51bnRyYWNrZWRfbnIgPSAwOworCWZvciAoaSA9IDA7IGkgPCBkaXItPmRpcnNfbnI7IGkrKykKKwkJZGlyLT5kaXJzW2ldLT5yZWN1cnNlID0gMDsKK30KKworLyoKKyAqIEdpdmVuIGEgZmlsZSB3aXRoIG5hbWUgImZuYW1lIiwgcmVhZCBpdCAoZWl0aGVyIGZyb20gZGlzaywgb3IgZnJvbQorICogdGhlIGluZGV4IGlmICJjaGVja19pbmRleCIgaXMgbm9uLXplcm8pLCBwYXJzZSBpdCBhbmQgc3RvcmUgdGhlCisgKiBleGNsdWRlIHJ1bGVzIGluICJlbCIuCisgKgorICogSWYgInNzIiBpcyBub3QgTlVMTCwgY29tcHV0ZSBTSEEtMSBvZiB0aGUgZXhjbHVkZSBmaWxlIGFuZCBmaWxsCisgKiBzdGF0IGRhdGEgZnJvbSBkaXNrIChvbmx5IHZhbGlkIGlmIGFkZF9leGNsdWRlcyByZXR1cm5zIHplcm8pLiBJZgorICogc3NfdmFsaWQgaXMgbm9uLXplcm8sICJzcyIgbXVzdCBjb250YWluIGdvb2QgdmFsdWUgYXMgaW5wdXQuCisgKi8KK3N0YXRpYyBpbnQgYWRkX2V4Y2x1ZGVzKGNvbnN0IGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCXN0cnVjdCBleGNsdWRlX2xpc3QgKmVsLCBpbnQgY2hlY2tfaW5kZXgsCisJCQlzdHJ1Y3Qgc2hhMV9zdGF0ICpzaGExX3N0YXQpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJaW50IGZkLCBpLCBsaW5lbm8gPSAxOworCXNpemVfdCBzaXplID0gMDsKKwljaGFyICpidWYsICplbnRyeTsKKworCWZkID0gb3BlbihmbmFtZSwgT19SRE9OTFkpOworCWlmIChmZCA8IDAgfHwgZnN0YXQoZmQsICZzdCkgPCAwKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQl3YXJuX29uX2luYWNjZXNzaWJsZShmbmFtZSk7CisJCWlmICgwIDw9IGZkKQorCQkJY2xvc2UoZmQpOworCQlpZiAoIWNoZWNrX2luZGV4IHx8CisJCSAgICAoYnVmID0gcmVhZF9za2lwX3dvcmt0cmVlX2ZpbGVfZnJvbV9pbmRleChmbmFtZSwgJnNpemUsIHNoYTFfc3RhdCkpID09IE5VTEwpCisJCQlyZXR1cm4gLTE7CisJCWlmIChzaXplID09IDApIHsKKwkJCWZyZWUoYnVmKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChidWZbc2l6ZS0xXSAhPSAnXG4nKSB7CisJCQlidWYgPSB4cmVhbGxvYyhidWYsIHNpemUrMSk7CisJCQlidWZbc2l6ZSsrXSA9ICdcbic7CisJCX0KKwl9IGVsc2UgeworCQlzaXplID0geHNpemVfdChzdC5zdF9zaXplKTsKKwkJaWYgKHNpemUgPT0gMCkgeworCQkJaWYgKHNoYTFfc3RhdCkgeworCQkJCWZpbGxfc3RhdF9kYXRhKCZzaGExX3N0YXQtPnN0YXQsICZzdCk7CisJCQkJaGFzaGNweShzaGExX3N0YXQtPnNoYTEsIEVNUFRZX0JMT0JfU0hBMV9CSU4pOworCQkJCXNoYTFfc3RhdC0+dmFsaWQgPSAxOworCQkJfQorCQkJY2xvc2UoZmQpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJYnVmID0geG1hbGxvYyhzaXplKzEpOworCQlpZiAocmVhZF9pbl9mdWxsKGZkLCBidWYsIHNpemUpICE9IHNpemUpIHsKKwkJCWZyZWUoYnVmKTsKKwkJCWNsb3NlKGZkKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlidWZbc2l6ZSsrXSA9ICdcbic7CisJCWNsb3NlKGZkKTsKKwkJaWYgKHNoYTFfc3RhdCkgeworCQkJaW50IHBvczsKKwkJCWlmIChzaGExX3N0YXQtPnZhbGlkICYmCisJCQkgICAgIW1hdGNoX3N0YXRfZGF0YV9yYWN5KCZ0aGVfaW5kZXgsICZzaGExX3N0YXQtPnN0YXQsICZzdCkpCisJCQkJOyAvKiBubyBjb250ZW50IGNoYW5nZSwgc3MtPnNoYTEgc3RpbGwgZ29vZCAqLworCQkJZWxzZSBpZiAoY2hlY2tfaW5kZXggJiYKKwkJCQkgKHBvcyA9IGNhY2hlX25hbWVfcG9zKGZuYW1lLCBzdHJsZW4oZm5hbWUpKSkgPj0gMCAmJgorCQkJCSAhY2Vfc3RhZ2UoYWN0aXZlX2NhY2hlW3Bvc10pICYmCisJCQkJIGNlX3VwdG9kYXRlKGFjdGl2ZV9jYWNoZVtwb3NdKSAmJgorCQkJCSAhd291bGRfY29udmVydF90b19naXQoZm5hbWUpKQorCQkJCWhhc2hjcHkoc2hhMV9zdGF0LT5zaGExLCBhY3RpdmVfY2FjaGVbcG9zXS0+c2hhMSk7CisJCQllbHNlCisJCQkJaGFzaF9zaGExX2ZpbGUoYnVmLCBzaXplLCAiYmxvYiIsIHNoYTFfc3RhdC0+c2hhMSk7CisJCQlmaWxsX3N0YXRfZGF0YSgmc2hhMV9zdGF0LT5zdGF0LCAmc3QpOworCQkJc2hhMV9zdGF0LT52YWxpZCA9IDE7CisJCX0KKwl9CisKKwllbC0+ZmlsZWJ1ZiA9IGJ1ZjsKKworCWlmIChza2lwX3V0ZjhfYm9tKCZidWYsIHNpemUpKQorCQlzaXplIC09IGJ1ZiAtIGVsLT5maWxlYnVmOworCisJZW50cnkgPSBidWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWlmIChidWZbaV0gPT0gJ1xuJykgeworCQkJaWYgKGVudHJ5ICE9IGJ1ZiArIGkgJiYgZW50cnlbMF0gIT0gJyMnKSB7CisJCQkJYnVmW2kgLSAoaSAmJiBidWZbaS0xXSA9PSAnXHInKV0gPSAwOworCQkJCXRyaW1fdHJhaWxpbmdfc3BhY2VzKGVudHJ5KTsKKwkJCQlhZGRfZXhjbHVkZShlbnRyeSwgYmFzZSwgYmFzZWxlbiwgZWwsIGxpbmVubyk7CisJCQl9CisJCQlsaW5lbm8rKzsKKwkJCWVudHJ5ID0gYnVmICsgaSArIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBhZGRfZXhjbHVkZXNfZnJvbV9maWxlX3RvX2xpc3QoY29uc3QgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKmJhc2UsCisJCQkJICAgaW50IGJhc2VsZW4sIHN0cnVjdCBleGNsdWRlX2xpc3QgKmVsLAorCQkJCSAgIGludCBjaGVja19pbmRleCkKK3sKKwlyZXR1cm4gYWRkX2V4Y2x1ZGVzKGZuYW1lLCBiYXNlLCBiYXNlbGVuLCBlbCwgY2hlY2tfaW5kZXgsIE5VTEwpOworfQorCitzdHJ1Y3QgZXhjbHVkZV9saXN0ICphZGRfZXhjbHVkZV9saXN0KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJICAgICAgaW50IGdyb3VwX3R5cGUsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwlzdHJ1Y3QgZXhjbHVkZV9saXN0ICplbDsKKwlzdHJ1Y3QgZXhjbHVkZV9saXN0X2dyb3VwICpncm91cDsKKworCWdyb3VwID0gJmRpci0+ZXhjbHVkZV9saXN0X2dyb3VwW2dyb3VwX3R5cGVdOworCUFMTE9DX0dST1coZ3JvdXAtPmVsLCBncm91cC0+bnIgKyAxLCBncm91cC0+YWxsb2MpOworCWVsID0gJmdyb3VwLT5lbFtncm91cC0+bnIrK107CisJbWVtc2V0KGVsLCAwLCBzaXplb2YoKmVsKSk7CisJZWwtPnNyYyA9IHNyYzsKKwlyZXR1cm4gZWw7Cit9CisKKy8qCisgKiBVc2VkIHRvIHNldCB1cCBjb3JlLmV4Y2x1ZGVzZmlsZSBhbmQgLmdpdC9pbmZvL2V4Y2x1ZGUgbGlzdHMuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9leGNsdWRlc19mcm9tX2ZpbGVfMShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpmbmFtZSwKKwkJCQkgICAgIHN0cnVjdCBzaGExX3N0YXQgKnNoYTFfc3RhdCkKK3sKKwlzdHJ1Y3QgZXhjbHVkZV9saXN0ICplbDsKKwkvKgorCSAqIGNhdGNoIHNldHVwX3N0YW5kYXJkX2V4Y2x1ZGVzKCkgdGhhdCdzIGNhbGxlZCBiZWZvcmUKKwkgKiBkaXItPnVudHJhY2tlZCBpcyBhc3NpZ25lZC4gVGhhdCBmdW5jdGlvbiBiZWhhdmVzCisJICogZGlmZmVyZW50bHkgd2hlbiBkaXItPnVudHJhY2tlZCBpcyBub24tTlVMTC4KKwkgKi8KKwlpZiAoIWRpci0+dW50cmFja2VkKQorCQlkaXItPnVubWFuYWdlZF9leGNsdWRlX2ZpbGVzKys7CisJZWwgPSBhZGRfZXhjbHVkZV9saXN0KGRpciwgRVhDX0ZJTEUsIGZuYW1lKTsKKwlpZiAoYWRkX2V4Y2x1ZGVzKGZuYW1lLCAiIiwgMCwgZWwsIDAsIHNoYTFfc3RhdCkgPCAwKQorCQlkaWUoImNhbm5vdCB1c2UgJXMgYXMgYW4gZXhjbHVkZSBmaWxlIiwgZm5hbWUpOworfQorCit2b2lkIGFkZF9leGNsdWRlc19mcm9tX2ZpbGUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqZm5hbWUpCit7CisJZGlyLT51bm1hbmFnZWRfZXhjbHVkZV9maWxlcysrOyAvKiBzZWUgdmFsaWRhdGVfdW50cmFja2VkX2NhY2hlKCkgKi8KKwlhZGRfZXhjbHVkZXNfZnJvbV9maWxlXzEoZGlyLCBmbmFtZSwgTlVMTCk7Cit9CisKK2ludCBtYXRjaF9iYXNlbmFtZShjb25zdCBjaGFyICpiYXNlbmFtZSwgaW50IGJhc2VuYW1lbGVuLAorCQkgICBjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgcHJlZml4LCBpbnQgcGF0dGVybmxlbiwKKwkJICAgaW50IGZsYWdzKQoreworCWlmIChwcmVmaXggPT0gcGF0dGVybmxlbikgeworCQlpZiAocGF0dGVybmxlbiA9PSBiYXNlbmFtZWxlbiAmJgorCQkgICAgIXN0cm5jbXBfaWNhc2UocGF0dGVybiwgYmFzZW5hbWUsIGJhc2VuYW1lbGVuKSkKKwkJCXJldHVybiAxOworCX0gZWxzZSBpZiAoZmxhZ3MgJiBFWENfRkxBR19FTkRTV0lUSCkgeworCQkvKiAiKmxpdGVyYWwiIG1hdGNoaW5nIGFnYWluc3QgImZvb2xpdGVyYWwiICovCisJCWlmIChwYXR0ZXJubGVuIC0gMSA8PSBiYXNlbmFtZWxlbiAmJgorCQkgICAgIXN0cm5jbXBfaWNhc2UocGF0dGVybiArIDEsCisJCQkJICAgYmFzZW5hbWUgKyBiYXNlbmFtZWxlbiAtIChwYXR0ZXJubGVuIC0gMSksCisJCQkJICAgcGF0dGVybmxlbiAtIDEpKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJaWYgKGZubWF0Y2hfaWNhc2VfbWVtKHBhdHRlcm4sIHBhdHRlcm5sZW4sCisJCQkJICAgICAgYmFzZW5hbWUsIGJhc2VuYW1lbGVuLAorCQkJCSAgICAgIDApID09IDApCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBtYXRjaF9wYXRobmFtZShjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IHBhdGhsZW4sCisJCSAgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkgICBjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgcHJlZml4LCBpbnQgcGF0dGVybmxlbiwKKwkJICAgaW50IGZsYWdzKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IG5hbWVsZW47CisKKwkvKgorCSAqIG1hdGNoIHdpdGggRk5NX1BBVEhOQU1FOyB0aGUgcGF0dGVybiBoYXMgYmFzZSBpbXBsaWNpdGx5CisJICogaW4gZnJvbnQgb2YgaXQuCisJICovCisJaWYgKCpwYXR0ZXJuID09ICcvJykgeworCQlwYXR0ZXJuKys7CisJCXBhdHRlcm5sZW4tLTsKKwkJcHJlZml4LS07CisJfQorCisJLyoKKwkgKiBiYXNlbGVuIGRvZXMgbm90IGNvdW50IHRoZSB0cmFpbGluZyBzbGFzaC4gYmFzZVtdIG1heSBvcgorCSAqIG1heSBub3QgZW5kIHdpdGggYSB0cmFpbGluZyBzbGFzaCB0aG91Z2guCisJICovCisJaWYgKHBhdGhsZW4gPCBiYXNlbGVuICsgMSB8fAorCSAgICAoYmFzZWxlbiAmJiBwYXRobmFtZVtiYXNlbGVuXSAhPSAnLycpIHx8CisJICAgIHN0cm5jbXBfaWNhc2UocGF0aG5hbWUsIGJhc2UsIGJhc2VsZW4pKQorCQlyZXR1cm4gMDsKKworCW5hbWVsZW4gPSBiYXNlbGVuID8gcGF0aGxlbiAtIGJhc2VsZW4gLSAxIDogcGF0aGxlbjsKKwluYW1lID0gcGF0aG5hbWUgKyBwYXRobGVuIC0gbmFtZWxlbjsKKworCWlmIChwcmVmaXgpIHsKKwkJLyoKKwkJICogaWYgdGhlIG5vbi13aWxkY2FyZCBwYXJ0IGlzIGxvbmdlciB0aGFuIHRoZQorCQkgKiByZW1haW5pbmcgcGF0aG5hbWUsIHN1cmVseSBpdCBjYW5ub3QgbWF0Y2guCisJCSAqLworCQlpZiAocHJlZml4ID4gbmFtZWxlbikKKwkJCXJldHVybiAwOworCisJCWlmIChzdHJuY21wX2ljYXNlKHBhdHRlcm4sIG5hbWUsIHByZWZpeCkpCisJCQlyZXR1cm4gMDsKKwkJcGF0dGVybiArPSBwcmVmaXg7CisJCXBhdHRlcm5sZW4gLT0gcHJlZml4OworCQluYW1lICAgICs9IHByZWZpeDsKKwkJbmFtZWxlbiAtPSBwcmVmaXg7CisKKwkJLyoKKwkJICogSWYgdGhlIHdob2xlIHBhdHRlcm4gZGlkIG5vdCBoYXZlIGEgd2lsZGNhcmQsCisJCSAqIHRoZW4gb3VyIHByZWZpeCBtYXRjaCBpcyBhbGwgd2UgbmVlZDsgd2UKKwkJICogZG8gbm90IG5lZWQgdG8gY2FsbCBmbm1hdGNoIGF0IGFsbC4KKwkJICovCisJCWlmICghcGF0dGVybmxlbiAmJiAhbmFtZWxlbikKKwkJCXJldHVybiAxOworCQkvKgorCQkgKiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB3ZSBpZ25vcmUgc29tZSBleGNsdWRlIHJ1bGVzCisJCSAqIG9uIGRpcmVjdG9yaWVzIGluIG90aGVyIHRvIHNlZSBpZiBuZWdhdGl2ZSBydWxlcworCQkgKiBtYXkgbWF0Y2guIEUuZy4KKwkJICoKKwkJICogL2FiYworCQkgKiAhL2FiYy9kZWYvZ2hpCisJCSAqCisJCSAqIFRoZSBwYXR0ZXJuIG9mIGludGVyZXN0IGlzICIvYWJjIi4gT24gdGhlIGZpcnN0CisJCSAqIHRyeSwgd2Ugc2hvdWxkIG1hdGNoIHBhdGggImFiYyIgd2l0aCB0aGlzIHBhdHRlcm4KKwkJICogaW4gdGhlICJpZiIgc3RhdGVtZW50IHJpZ2h0IGFib3ZlLCBidXQgdGhlIGNhbGxlcgorCQkgKiBpZ25vcmVzIGl0LgorCQkgKgorCQkgKiBPbiB0aGUgc2Vjb25kIHRyeSB3aXRoIHBhdGhzIHdpdGhpbiAiYWJjIiwKKwkJICogZS5nLiAiYWJjL3h5eiIsIHdlIGNvbWUgaGVyZSBhbmQgdHJ5IHRvIG1hdGNoIGl0CisJCSAqIHdpdGggIi9hYmMiLgorCQkgKi8KKwkJaWYgKCFwYXR0ZXJubGVuICYmIG5hbWVsZW4gJiYgKm5hbWUgPT0gJy8nKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIGZubWF0Y2hfaWNhc2VfbWVtKHBhdHRlcm4sIHBhdHRlcm5sZW4sCisJCQkJIG5hbWUsIG5hbWVsZW4sCisJCQkJIFdNX1BBVEhOQU1FKSA9PSAwOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHBhdGhuYW1lIGlzIGEgZGlyZWN0b3J5IGFuZCBhbiBhbmNlc3RvciBvZiB0aGUKKyAqIGxpdGVyYWwgcGF0aCBpbiBhIChuZWdhdGl2ZSkgcGF0dGVybi4gVGhpcyBpcyB1c2VkIHRvIGtlZXAKKyAqIGRlc2NlbmRpbmcgaW4gImZvbyIgYW5kICJmb28vYmFyIiB3aGVuIHRoZSBwYXR0ZXJuIGlzCisgKiAiIWZvby9iYXIvLmdpdGlnbm9yZSIuICJmb28vbm90YmFyIiB3aWxsIG5vdCBiZSBkZXNjZW5kZWQgaG93ZXZlci4KKyAqLworc3RhdGljIGludCBtYXRjaF9uZWdfcGF0aChjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IHBhdGhsZW4sIGludCAqZHR5cGUsCisJCQkgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJICBjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgcHJlZml4LCBpbnQgcGF0dGVybmxlbiwKKwkJCSAgaW50IGZsYWdzKQoreworCWFzc2VydCgoZmxhZ3MgJiBFWENfRkxBR19ORUdBVElWRSkgJiYgIShmbGFncyAmIEVYQ19GTEFHX05PRElSKSk7CisKKwlpZiAoKmR0eXBlID09IERUX1VOS05PV04pCisJCSpkdHlwZSA9IGdldF9kdHlwZShOVUxMLCBwYXRobmFtZSwgcGF0aGxlbik7CisJaWYgKCpkdHlwZSAhPSBEVF9ESVIpCisJCXJldHVybiAwOworCisJaWYgKCpwYXR0ZXJuID09ICcvJykgeworCQlwYXR0ZXJuKys7CisJCXBhdHRlcm5sZW4tLTsKKwkJcHJlZml4LS07CisJfQorCisJaWYgKGJhc2VsZW4pIHsKKwkJaWYgKCgocGF0aGxlbiA8IGJhc2VsZW4gJiYgYmFzZVtwYXRobGVuXSA9PSAnLycpIHx8CisJCSAgICAgcGF0aGxlbiA9PSBiYXNlbGVuKSAmJgorCQkgICAgIXN0cm5jbXBfaWNhc2UocGF0aG5hbWUsIGJhc2UsIHBhdGhsZW4pKQorCQkJcmV0dXJuIDE7CisJCXBhdGhuYW1lICs9IGJhc2VsZW4gKyAxOworCQlwYXRobGVuICAtPSBiYXNlbGVuICsgMTsKKwl9CisKKworCWlmIChwcmVmaXggJiYKKwkgICAgKChwYXRobGVuIDwgcHJlZml4ICYmIHBhdHRlcm5bcGF0aGxlbl0gPT0gJy8nKSAmJgorCSAgICAgIXN0cm5jbXBfaWNhc2UocGF0aG5hbWUsIHBhdHRlcm4sIHBhdGhsZW4pKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNjYW4gdGhlIGdpdmVuIGV4Y2x1ZGUgbGlzdCBpbiByZXZlcnNlIHRvIHNlZSB3aGV0aGVyIHBhdGhuYW1lCisgKiBzaG91bGQgYmUgaWdub3JlZC4gIFRoZSBmaXJzdCBtYXRjaCAoaS5lLiB0aGUgbGFzdCBvbiB0aGUgbGlzdCksIGlmCisgKiBhbnksIGRldGVybWluZXMgdGhlIGZhdGUuICBSZXR1cm5zIHRoZSBleGNsdWRlX2xpc3QgZWxlbWVudCB3aGljaAorICogbWF0Y2hlZCwgb3IgTlVMTCBmb3IgdW5kZWNpZGVkLgorICovCitzdGF0aWMgc3RydWN0IGV4Y2x1ZGUgKmxhc3RfZXhjbHVkZV9tYXRjaGluZ19mcm9tX2xpc3QoY29uc3QgY2hhciAqcGF0aG5hbWUsCisJCQkJCQkgICAgICAgaW50IHBhdGhsZW4sCisJCQkJCQkgICAgICAgY29uc3QgY2hhciAqYmFzZW5hbWUsCisJCQkJCQkgICAgICAgaW50ICpkdHlwZSwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgZXhjbHVkZV9saXN0ICplbCkKK3sKKwlzdHJ1Y3QgZXhjbHVkZSAqZXhjID0gTlVMTDsgLyogdW5kZWNpZGVkICovCisJaW50IGksIG1hdGNoZWRfbmVnYXRpdmVfcGF0aCA9IDA7CisKKwlpZiAoIWVsLT5ucikKKwkJcmV0dXJuIE5VTEw7CS8qIHVuZGVmaW5lZCAqLworCisJZm9yIChpID0gZWwtPm5yIC0gMTsgMCA8PSBpOyBpLS0pIHsKKwkJc3RydWN0IGV4Y2x1ZGUgKnggPSBlbC0+ZXhjbHVkZXNbaV07CisJCWNvbnN0IGNoYXIgKmV4Y2x1ZGUgPSB4LT5wYXR0ZXJuOworCQlpbnQgcHJlZml4ID0geC0+bm93aWxkY2FyZGxlbjsKKworCQlpZiAoeC0+ZmxhZ3MgJiBFWENfRkxBR19NVVNUQkVESVIpIHsKKwkJCWlmICgqZHR5cGUgPT0gRFRfVU5LTk9XTikKKwkJCQkqZHR5cGUgPSBnZXRfZHR5cGUoTlVMTCwgcGF0aG5hbWUsIHBhdGhsZW4pOworCQkJaWYgKCpkdHlwZSAhPSBEVF9ESVIpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoeC0+ZmxhZ3MgJiBFWENfRkxBR19OT0RJUikgeworCQkJaWYgKG1hdGNoX2Jhc2VuYW1lKGJhc2VuYW1lLAorCQkJCQkgICBwYXRobGVuIC0gKGJhc2VuYW1lIC0gcGF0aG5hbWUpLAorCQkJCQkgICBleGNsdWRlLCBwcmVmaXgsIHgtPnBhdHRlcm5sZW4sCisJCQkJCSAgIHgtPmZsYWdzKSkgeworCQkJCWV4YyA9IHg7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCWFzc2VydCh4LT5iYXNlbGVuID09IDAgfHwgeC0+YmFzZVt4LT5iYXNlbGVuIC0gMV0gPT0gJy8nKTsKKwkJaWYgKG1hdGNoX3BhdGhuYW1lKHBhdGhuYW1lLCBwYXRobGVuLAorCQkJCSAgIHgtPmJhc2UsIHgtPmJhc2VsZW4gPyB4LT5iYXNlbGVuIC0gMSA6IDAsCisJCQkJICAgZXhjbHVkZSwgcHJlZml4LCB4LT5wYXR0ZXJubGVuLCB4LT5mbGFncykpIHsKKwkJCWV4YyA9IHg7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoeC0+ZmxhZ3MgJiBFWENfRkxBR19ORUdBVElWRSkgJiYgIW1hdGNoZWRfbmVnYXRpdmVfcGF0aCAmJgorCQkgICAgbWF0Y2hfbmVnX3BhdGgocGF0aG5hbWUsIHBhdGhsZW4sIGR0eXBlLCB4LT5iYXNlLAorCQkJCSAgIHgtPmJhc2VsZW4gPyB4LT5iYXNlbGVuIC0gMSA6IDAsCisJCQkJICAgZXhjbHVkZSwgcHJlZml4LCB4LT5wYXR0ZXJubGVuLCB4LT5mbGFncykpCisJCQltYXRjaGVkX25lZ2F0aXZlX3BhdGggPSAxOworCX0KKwlpZiAoZXhjICYmCisJICAgICEoZXhjLT5mbGFncyAmIEVYQ19GTEFHX05FR0FUSVZFKSAmJgorCSAgICAhKGV4Yy0+ZmxhZ3MgJiBFWENfRkxBR19OT0RJUikgJiYKKwkgICAgbWF0Y2hlZF9uZWdhdGl2ZV9wYXRoKQorCQlleGMgPSBOVUxMOworCXJldHVybiBleGM7Cit9CisKKy8qCisgKiBTY2FuIHRoZSBsaXN0IGFuZCBsZXQgdGhlIGxhc3QgbWF0Y2ggZGV0ZXJtaW5lIHRoZSBmYXRlLgorICogUmV0dXJuIDEgZm9yIGV4Y2x1ZGUsIDAgZm9yIGluY2x1ZGUgYW5kIC0xIGZvciB1bmRlY2lkZWQuCisgKi8KK2ludCBpc19leGNsdWRlZF9mcm9tX2xpc3QoY29uc3QgY2hhciAqcGF0aG5hbWUsCisJCQkgIGludCBwYXRobGVuLCBjb25zdCBjaGFyICpiYXNlbmFtZSwgaW50ICpkdHlwZSwKKwkJCSAgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWwpCit7CisJc3RydWN0IGV4Y2x1ZGUgKmV4Y2x1ZGU7CisJZXhjbHVkZSA9IGxhc3RfZXhjbHVkZV9tYXRjaGluZ19mcm9tX2xpc3QocGF0aG5hbWUsIHBhdGhsZW4sIGJhc2VuYW1lLCBkdHlwZSwgZWwpOworCWlmIChleGNsdWRlKQorCQlyZXR1cm4gZXhjbHVkZS0+ZmxhZ3MgJiBFWENfRkxBR19ORUdBVElWRSA/IDAgOiAxOworCXJldHVybiAtMTsgLyogdW5kZWNpZGVkICovCit9CisKK3N0YXRpYyBzdHJ1Y3QgZXhjbHVkZSAqbGFzdF9leGNsdWRlX21hdGNoaW5nX2Zyb21fbGlzdHMoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBwYXRobGVuLCBjb25zdCBjaGFyICpiYXNlbmFtZSwKKwkJaW50ICpkdHlwZV9wKQoreworCWludCBpLCBqOworCXN0cnVjdCBleGNsdWRlX2xpc3RfZ3JvdXAgKmdyb3VwOworCXN0cnVjdCBleGNsdWRlICpleGNsdWRlOworCWZvciAoaSA9IEVYQ19DTURMOyBpIDw9IEVYQ19GSUxFOyBpKyspIHsKKwkJZ3JvdXAgPSAmZGlyLT5leGNsdWRlX2xpc3RfZ3JvdXBbaV07CisJCWZvciAoaiA9IGdyb3VwLT5uciAtIDE7IGogPj0gMDsgai0tKSB7CisJCQlleGNsdWRlID0gbGFzdF9leGNsdWRlX21hdGNoaW5nX2Zyb21fbGlzdCgKKwkJCQlwYXRobmFtZSwgcGF0aGxlbiwgYmFzZW5hbWUsIGR0eXBlX3AsCisJCQkJJmdyb3VwLT5lbFtqXSk7CisJCQlpZiAoZXhjbHVkZSkKKwkJCQlyZXR1cm4gZXhjbHVkZTsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIExvYWRzIHRoZSBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgbGlzdCBmb3IgdGhlIHN1YnN0cmluZyBvZiBiYXNlCisgKiB3aGljaCBoYXMgYSBjaGFyIGxlbmd0aCBvZiBiYXNlbGVuLgorICovCitzdGF0aWMgdm9pZCBwcmVwX2V4Y2x1ZGUoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4pCit7CisJc3RydWN0IGV4Y2x1ZGVfbGlzdF9ncm91cCAqZ3JvdXA7CisJc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWw7CisJc3RydWN0IGV4Y2x1ZGVfc3RhY2sgKnN0ayA9IE5VTEw7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZDsKKwlpbnQgY3VycmVudDsKKworCWdyb3VwID0gJmRpci0+ZXhjbHVkZV9saXN0X2dyb3VwW0VYQ19ESVJTXTsKKworCS8qCisJICogUG9wIHRoZSBleGNsdWRlIGxpc3RzIGZyb20gdGhlIEVYQ0xfRElSUyBleGNsdWRlX2xpc3RfZ3JvdXAKKwkgKiB3aGljaCBvcmlnaW5hdGUgZnJvbSBkaXJlY3RvcmllcyBub3QgaW4gdGhlIHByZWZpeCBvZiB0aGUKKwkgKiBwYXRoIGJlaW5nIGNoZWNrZWQuCisJICovCisJd2hpbGUgKChzdGsgPSBkaXItPmV4Y2x1ZGVfc3RhY2spICE9IE5VTEwpIHsKKwkJaWYgKHN0ay0+YmFzZWxlbiA8PSBiYXNlbGVuICYmCisJCSAgICAhc3RybmNtcChkaXItPmJhc2VidWYuYnVmLCBiYXNlLCBzdGstPmJhc2VsZW4pKQorCQkJYnJlYWs7CisJCWVsID0gJmdyb3VwLT5lbFtkaXItPmV4Y2x1ZGVfc3RhY2stPmV4Y2x1ZGVfaXhdOworCQlkaXItPmV4Y2x1ZGVfc3RhY2sgPSBzdGstPnByZXY7CisJCWRpci0+ZXhjbHVkZSA9IE5VTEw7CisJCWZyZWUoKGNoYXIgKillbC0+c3JjKTsgLyogc2VlIHN0cmJ1Zl9kZXRhY2goKSBiZWxvdyAqLworCQljbGVhcl9leGNsdWRlX2xpc3QoZWwpOworCQlmcmVlKHN0ayk7CisJCWdyb3VwLT5uci0tOworCX0KKworCS8qIFNraXAgdHJhdmVyc2luZyBpbnRvIHN1YiBkaXJlY3RvcmllcyBpZiB0aGUgcGFyZW50IGlzIGV4Y2x1ZGVkICovCisJaWYgKGRpci0+ZXhjbHVkZSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBMYXp5IGluaXRpYWxpemF0aW9uLiBBbGwgY2FsbCBzaXRlcyBjdXJyZW50bHkganVzdAorCSAqIG1lbXNldChkaXIsIDAsIHNpemVvZigqZGlyKSkgYmVmb3JlIHVzZS4gQ2hhbmdpbmcgYWxsIG9mCisJICogdGhlbSBzZWVtcyBsb3RzIG9mIHdvcmsgZm9yIGxpdHRsZSBiZW5lZml0LgorCSAqLworCWlmICghZGlyLT5iYXNlYnVmLmJ1ZikKKwkJc3RyYnVmX2luaXQoJmRpci0+YmFzZWJ1ZiwgUEFUSF9NQVgpOworCisJLyogUmVhZCBmcm9tIHRoZSBwYXJlbnQgZGlyZWN0b3JpZXMgYW5kIHB1c2ggdGhlbSBkb3duLiAqLworCWN1cnJlbnQgPSBzdGsgPyBzdGstPmJhc2VsZW4gOiAtMTsKKwlzdHJidWZfc2V0bGVuKCZkaXItPmJhc2VidWYsIGN1cnJlbnQgPCAwID8gMCA6IGN1cnJlbnQpOworCWlmIChkaXItPnVudHJhY2tlZCkKKwkJdW50cmFja2VkID0gc3RrID8gc3RrLT51Y2QgOiBkaXItPnVudHJhY2tlZC0+cm9vdDsKKwllbHNlCisJCXVudHJhY2tlZCA9IE5VTEw7CisKKwl3aGlsZSAoY3VycmVudCA8IGJhc2VsZW4pIHsKKwkJY29uc3QgY2hhciAqY3A7CisJCXN0cnVjdCBzaGExX3N0YXQgc2hhMV9zdGF0OworCisJCXN0ayA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpzdGspKTsKKwkJaWYgKGN1cnJlbnQgPCAwKSB7CisJCQljcCA9IGJhc2U7CisJCQljdXJyZW50ID0gMDsKKwkJfSBlbHNlIHsKKwkJCWNwID0gc3RyY2hyKGJhc2UgKyBjdXJyZW50ICsgMSwgJy8nKTsKKwkJCWlmICghY3ApCisJCQkJZGllKCJvb3BzIGluIHByZXBfZXhjbHVkZSIpOworCQkJY3ArKzsKKwkJCXVudHJhY2tlZCA9CisJCQkJbG9va3VwX3VudHJhY2tlZChkaXItPnVudHJhY2tlZCwgdW50cmFja2VkLAorCQkJCQkJIGJhc2UgKyBjdXJyZW50LAorCQkJCQkJIGNwIC0gYmFzZSAtIGN1cnJlbnQpOworCQl9CisJCXN0ay0+cHJldiA9IGRpci0+ZXhjbHVkZV9zdGFjazsKKwkJc3RrLT5iYXNlbGVuID0gY3AgLSBiYXNlOworCQlzdGstPmV4Y2x1ZGVfaXggPSBncm91cC0+bnI7CisJCXN0ay0+dWNkID0gdW50cmFja2VkOworCQllbCA9IGFkZF9leGNsdWRlX2xpc3QoZGlyLCBFWENfRElSUywgTlVMTCk7CisJCXN0cmJ1Zl9hZGQoJmRpci0+YmFzZWJ1ZiwgYmFzZSArIGN1cnJlbnQsIHN0ay0+YmFzZWxlbiAtIGN1cnJlbnQpOworCQlhc3NlcnQoc3RrLT5iYXNlbGVuID09IGRpci0+YmFzZWJ1Zi5sZW4pOworCisJCS8qIEFib3J0IGlmIHRoZSBkaXJlY3RvcnkgaXMgZXhjbHVkZWQgKi8KKwkJaWYgKHN0ay0+YmFzZWxlbikgeworCQkJaW50IGR0ID0gRFRfRElSOworCQkJZGlyLT5iYXNlYnVmLmJ1ZltzdGstPmJhc2VsZW4gLSAxXSA9IDA7CisJCQlkaXItPmV4Y2x1ZGUgPSBsYXN0X2V4Y2x1ZGVfbWF0Y2hpbmdfZnJvbV9saXN0cyhkaXIsCisJCQkJZGlyLT5iYXNlYnVmLmJ1Ziwgc3RrLT5iYXNlbGVuIC0gMSwKKwkJCQlkaXItPmJhc2VidWYuYnVmICsgY3VycmVudCwgJmR0KTsKKwkJCWRpci0+YmFzZWJ1Zi5idWZbc3RrLT5iYXNlbGVuIC0gMV0gPSAnLyc7CisJCQlpZiAoZGlyLT5leGNsdWRlICYmCisJCQkgICAgZGlyLT5leGNsdWRlLT5mbGFncyAmIEVYQ19GTEFHX05FR0FUSVZFKQorCQkJCWRpci0+ZXhjbHVkZSA9IE5VTEw7CisJCQlpZiAoZGlyLT5leGNsdWRlKSB7CisJCQkJZGlyLT5leGNsdWRlX3N0YWNrID0gc3RrOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCS8qIFRyeSB0byByZWFkIHBlci1kaXJlY3RvcnkgZmlsZSAqLworCQloYXNoY2xyKHNoYTFfc3RhdC5zaGExKTsKKwkJc2hhMV9zdGF0LnZhbGlkID0gMDsKKwkJaWYgKGRpci0+ZXhjbHVkZV9wZXJfZGlyICYmCisJCSAgICAvKgorCQkgICAgICogSWYgd2Uga25vdyB0aGF0IG5vIGZpbGVzIGhhdmUgYmVlbiBhZGRlZCBpbgorCQkgICAgICogdGhpcyBkaXJlY3RvcnkgKGkuZS4gdmFsaWRfY2FjaGVkX2RpcigpIGhhcworCQkgICAgICogYmVlbiBleGVjdXRlZCBhbmQgc2V0IHVudHJhY2tlZC0+dmFsaWQpIC4uCisJCSAgICAgKi8KKwkJICAgICghdW50cmFja2VkIHx8ICF1bnRyYWNrZWQtPnZhbGlkIHx8CisJCSAgICAgLyoKKwkJICAgICAgKiAuLiBhbmQgLmdpdGlnbm9yZSBkb2VzIG5vdCBleGlzdCBiZWZvcmUKKwkJICAgICAgKiAoaS5lLiBudWxsIGV4Y2x1ZGVfc2hhMSkuIFRoZW4gd2UgY2FuIHNraXAKKwkJICAgICAgKiBsb2FkaW5nIC5naXRpZ25vcmUsIHdoaWNoIHdvdWxkIHJlc3VsdCBpbgorCQkgICAgICAqIEVOT0VOVCBhbnl3YXkuCisJCSAgICAgICovCisJCSAgICAgIWlzX251bGxfc2hhMSh1bnRyYWNrZWQtPmV4Y2x1ZGVfc2hhMSkpKSB7CisJCQkvKgorCQkJICogZGlyLT5iYXNlYnVmIGdldHMgcmV1c2VkIGJ5IHRoZSB0cmF2ZXJzYWwsIGJ1dCB3ZQorCQkJICogbmVlZCBmbmFtZSB0byByZW1haW4gdW5jaGFuZ2VkIHRvIGVuc3VyZSB0aGUgc3JjCisJCQkgKiBtZW1iZXIgb2YgZWFjaCBzdHJ1Y3QgZXhjbHVkZSBjb3JyZWN0bHkKKwkJCSAqIGJhY2stcmVmZXJlbmNlcyBpdHMgc291cmNlIGZpbGUuICBPdGhlciBpbnZvY2F0aW9ucworCQkJICogb2YgYWRkX2V4Y2x1ZGVfbGlzdCBwcm92aWRlIHN0YWJsZSBzdHJpbmdzLCBzbyB3ZQorCQkJICogc3RyYnVmX2RldGFjaCgpIGFuZCBmcmVlKCkgaGVyZSBpbiB0aGUgY2FsbGVyLgorCQkJICovCisJCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkYnVmKCZzYiwgJmRpci0+YmFzZWJ1Zik7CisJCQlzdHJidWZfYWRkc3RyKCZzYiwgZGlyLT5leGNsdWRlX3Blcl9kaXIpOworCQkJZWwtPnNyYyA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwkJCWFkZF9leGNsdWRlcyhlbC0+c3JjLCBlbC0+c3JjLCBzdGstPmJhc2VsZW4sIGVsLCAxLAorCQkJCSAgICAgdW50cmFja2VkID8gJnNoYTFfc3RhdCA6IE5VTEwpOworCQl9CisJCS8qCisJCSAqIE5FRURTV09SSzogd2hlbiB1bnRyYWNrZWQgY2FjaGUgaXMgZW5hYmxlZCwgcHJlcF9leGNsdWRlKCkKKwkJICogd2lsbCBmaXJzdCBiZSBjYWxsZWQgaW4gdmFsaWRfY2FjaGVkX2RpcigpIHRoZW4gbWF5YmUgbWFueQorCQkgKiB0aW1lcyBtb3JlIGluIGxhc3RfZXhjbHVkZV9tYXRjaGluZygpLiBXaGVuIHRoZSBjYWNoZSBpcworCQkgKiB1c2VkLCBsYXN0X2V4Y2x1ZGVfbWF0Y2hpbmcoKSB3aWxsIG5vdCBiZSBjYWxsZWQgYW5kCisJCSAqIHJlYWRpbmcgLmdpdGlnbm9yZSBjb250ZW50IHdpbGwgYmUgYSB3YXN0ZS4KKwkJICoKKwkJICogU28gd2hlbiBpdCdzIGNhbGxlZCBieSB2YWxpZF9jYWNoZWRfZGlyKCkgYW5kIHdlIGNhbiBnZXQKKwkJICogLmdpdGlnbm9yZSBTSEEtMSBmcm9tIHRoZSBpbmRleCAoaS5lLiAuZ2l0aWdub3JlIGlzIG5vdAorCQkgKiBtb2RpZmllZCBvbiB3b3JrIHRyZWUpLCB3ZSBjb3VsZCBkZWxheSByZWFkaW5nIHRoZQorCQkgKiAuZ2l0aWdub3JlIGNvbnRlbnQgdW50aWwgd2UgYWJzb2x1dGVseSBuZWVkIGl0IGluCisJCSAqIGxhc3RfZXhjbHVkZV9tYXRjaGluZygpLiBCZSBjYXJlZnVsIGFib3V0IGlnbm9yZSBydWxlCisJCSAqIG9yZGVyLCB0aG91Z2gsIGlmIHlvdSBkbyB0aGF0LgorCQkgKi8KKwkJaWYgKHVudHJhY2tlZCAmJgorCQkgICAgaGFzaGNtcChzaGExX3N0YXQuc2hhMSwgdW50cmFja2VkLT5leGNsdWRlX3NoYTEpKSB7CisJCQlpbnZhbGlkYXRlX2dpdGlnbm9yZShkaXItPnVudHJhY2tlZCwgdW50cmFja2VkKTsKKwkJCWhhc2hjcHkodW50cmFja2VkLT5leGNsdWRlX3NoYTEsIHNoYTFfc3RhdC5zaGExKTsKKwkJfQorCQlkaXItPmV4Y2x1ZGVfc3RhY2sgPSBzdGs7CisJCWN1cnJlbnQgPSBzdGstPmJhc2VsZW47CisJfQorCXN0cmJ1Zl9zZXRsZW4oJmRpci0+YmFzZWJ1ZiwgYmFzZWxlbik7Cit9CisKKy8qCisgKiBMb2FkcyB0aGUgZXhjbHVkZSBsaXN0cyBmb3IgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHBhdGhuYW1lLCB0aGVuCisgKiBzY2FucyBhbGwgZXhjbHVkZSBsaXN0cyB0byBkZXRlcm1pbmUgd2hldGhlciBwYXRobmFtZSBpcyBleGNsdWRlZC4KKyAqIFJldHVybnMgdGhlIGV4Y2x1ZGVfbGlzdCBlbGVtZW50IHdoaWNoIG1hdGNoZWQsIG9yIE5VTEwgZm9yCisgKiB1bmRlY2lkZWQuCisgKi8KK3N0cnVjdCBleGNsdWRlICpsYXN0X2V4Y2x1ZGVfbWF0Y2hpbmcoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkJICAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKwkJCQkJICAgICBpbnQgKmR0eXBlX3ApCit7CisJaW50IHBhdGhsZW4gPSBzdHJsZW4ocGF0aG5hbWUpOworCWNvbnN0IGNoYXIgKmJhc2VuYW1lID0gc3RycmNocihwYXRobmFtZSwgJy8nKTsKKwliYXNlbmFtZSA9IChiYXNlbmFtZSkgPyBiYXNlbmFtZSsxIDogcGF0aG5hbWU7CisKKwlwcmVwX2V4Y2x1ZGUoZGlyLCBwYXRobmFtZSwgYmFzZW5hbWUtcGF0aG5hbWUpOworCisJaWYgKGRpci0+ZXhjbHVkZSkKKwkJcmV0dXJuIGRpci0+ZXhjbHVkZTsKKworCXJldHVybiBsYXN0X2V4Y2x1ZGVfbWF0Y2hpbmdfZnJvbV9saXN0cyhkaXIsIHBhdGhuYW1lLCBwYXRobGVuLAorCQkJYmFzZW5hbWUsIGR0eXBlX3ApOworfQorCisvKgorICogTG9hZHMgdGhlIGV4Y2x1ZGUgbGlzdHMgZm9yIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBwYXRobmFtZSwgdGhlbgorICogc2NhbnMgYWxsIGV4Y2x1ZGUgbGlzdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgcGF0aG5hbWUgaXMgZXhjbHVkZWQuCisgKiBSZXR1cm5zIDEgaWYgdHJ1ZSwgb3RoZXJ3aXNlIDAuCisgKi8KK2ludCBpc19leGNsdWRlZChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLCBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50ICpkdHlwZV9wKQoreworCXN0cnVjdCBleGNsdWRlICpleGNsdWRlID0KKwkJbGFzdF9leGNsdWRlX21hdGNoaW5nKGRpciwgcGF0aG5hbWUsIGR0eXBlX3ApOworCWlmIChleGNsdWRlKQorCQlyZXR1cm4gZXhjbHVkZS0+ZmxhZ3MgJiBFWENfRkxBR19ORUdBVElWRSA/IDAgOiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRpcl9lbnRyeSAqZGlyX2VudHJ5X25ldyhjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQ7CisKKwllbnQgPSB4bWFsbG9jKHNpemVvZigqZW50KSArIGxlbiArIDEpOworCWVudC0+bGVuID0gbGVuOworCW1lbWNweShlbnQtPm5hbWUsIHBhdGhuYW1lLCBsZW4pOworCWVudC0+bmFtZVtsZW5dID0gMDsKKwlyZXR1cm4gZW50OworfQorCitzdGF0aWMgc3RydWN0IGRpcl9lbnRyeSAqZGlyX2FkZF9uYW1lKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgbGVuKQoreworCWlmIChjYWNoZV9maWxlX2V4aXN0cyhwYXRobmFtZSwgbGVuLCBpZ25vcmVfY2FzZSkpCisJCXJldHVybiBOVUxMOworCisJQUxMT0NfR1JPVyhkaXItPmVudHJpZXMsIGRpci0+bnIrMSwgZGlyLT5hbGxvYyk7CisJcmV0dXJuIGRpci0+ZW50cmllc1tkaXItPm5yKytdID0gZGlyX2VudHJ5X25ldyhwYXRobmFtZSwgbGVuKTsKK30KKworc3RydWN0IGRpcl9lbnRyeSAqZGlyX2FkZF9pZ25vcmVkKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgbGVuKQoreworCWlmICghY2FjaGVfbmFtZV9pc19vdGhlcihwYXRobmFtZSwgbGVuKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlBTExPQ19HUk9XKGRpci0+aWdub3JlZCwgZGlyLT5pZ25vcmVkX25yKzEsIGRpci0+aWdub3JlZF9hbGxvYyk7CisJcmV0dXJuIGRpci0+aWdub3JlZFtkaXItPmlnbm9yZWRfbnIrK10gPSBkaXJfZW50cnlfbmV3KHBhdGhuYW1lLCBsZW4pOworfQorCitlbnVtIGV4aXN0X3N0YXR1cyB7CisJaW5kZXhfbm9uZXhpc3RlbnQgPSAwLAorCWluZGV4X2RpcmVjdG9yeSwKKwlpbmRleF9naXRkaXIKK307CisKKy8qCisgKiBEbyBub3QgdXNlIHRoZSBhbHBoYWJldGljYWxseSBzb3J0ZWQgaW5kZXggdG8gbG9vayB1cAorICogdGhlIGRpcmVjdG9yeSBuYW1lOyBpbnN0ZWFkLCB1c2UgdGhlIGNhc2UgaW5zZW5zaXRpdmUKKyAqIGRpcmVjdG9yeSBoYXNoLgorICovCitzdGF0aWMgZW51bSBleGlzdF9zdGF0dXMgZGlyZWN0b3J5X2V4aXN0c19pbl9pbmRleF9pY2FzZShjb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgbGVuKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlpZiAoY2FjaGVfZGlyX2V4aXN0cyhkaXJuYW1lLCBsZW4pKQorCQlyZXR1cm4gaW5kZXhfZGlyZWN0b3J5OworCisJY2UgPSBjYWNoZV9maWxlX2V4aXN0cyhkaXJuYW1lLCBsZW4sIGlnbm9yZV9jYXNlKTsKKwlpZiAoY2UgJiYgU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQlyZXR1cm4gaW5kZXhfZ2l0ZGlyOworCisJcmV0dXJuIGluZGV4X25vbmV4aXN0ZW50OworfQorCisvKgorICogVGhlIGluZGV4IHNvcnRzIGFscGhhYmV0aWNhbGx5IGJ5IGVudHJ5IG5hbWUsIHdoaWNoCisgKiBtZWFucyB0aGF0IGEgZ2l0bGluayBzb3J0cyBhcyAnXDAnIGF0IHRoZSBlbmQsIHdoaWxlCisgKiBhIGRpcmVjdG9yeSAod2hpY2ggaXMgZGVmaW5lZCBub3QgYXMgYW4gZW50cnksIGJ1dCBhcworICogdGhlIGZpbGVzIGl0IGNvbnRhaW5zKSB3aWxsIHNvcnQgd2l0aCB0aGUgJy8nIGF0IHRoZQorICogZW5kLgorICovCitzdGF0aWMgZW51bSBleGlzdF9zdGF0dXMgZGlyZWN0b3J5X2V4aXN0c19pbl9pbmRleChjb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgbGVuKQoreworCWludCBwb3M7CisKKwlpZiAoaWdub3JlX2Nhc2UpCisJCXJldHVybiBkaXJlY3RvcnlfZXhpc3RzX2luX2luZGV4X2ljYXNlKGRpcm5hbWUsIGxlbik7CisKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhkaXJuYW1lLCBsZW4pOworCWlmIChwb3MgPCAwKQorCQlwb3MgPSAtcG9zLTE7CisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW3BvcysrXTsKKwkJdW5zaWduZWQgY2hhciBlbmRjaGFyOworCisJCWlmIChzdHJuY21wKGNlLT5uYW1lLCBkaXJuYW1lLCBsZW4pKQorCQkJYnJlYWs7CisJCWVuZGNoYXIgPSBjZS0+bmFtZVtsZW5dOworCQlpZiAoZW5kY2hhciA+ICcvJykKKwkJCWJyZWFrOworCQlpZiAoZW5kY2hhciA9PSAnLycpCisJCQlyZXR1cm4gaW5kZXhfZGlyZWN0b3J5OworCQlpZiAoIWVuZGNoYXIgJiYgU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJcmV0dXJuIGluZGV4X2dpdGRpcjsKKwl9CisJcmV0dXJuIGluZGV4X25vbmV4aXN0ZW50OworfQorCisvKgorICogV2hlbiB3ZSBmaW5kIGEgZGlyZWN0b3J5IHdoZW4gdHJhdmVyc2luZyB0aGUgZmlsZXN5c3RlbSwgd2UKKyAqIGhhdmUgdGhyZWUgZGlzdGluY3QgY2FzZXM6CisgKgorICogIC0gaWdub3JlIGl0CisgKiAgLSBzZWUgaXQgYXMgYSBkaXJlY3RvcnkKKyAqICAtIHJlY3Vyc2UgaW50byBpdAorICoKKyAqIGFuZCB3aGljaCBvbmUgd2UgY2hvb3NlIGRlcGVuZHMgb24gYSBjb21iaW5hdGlvbiBvZiBleGlzdGluZworICogZ2l0IGluZGV4IGNvbnRlbnRzIGFuZCB0aGUgZmxhZ3MgcGFzc2VkIGludG8gdGhlIGRpcmVjdG9yeQorICogdHJhdmVyc2FsIHJvdXRpbmUuCisgKgorICogQ2FzZSAxOiBJZiB3ZSAqYWxyZWFkeSogaGF2ZSBlbnRyaWVzIGluIHRoZSBpbmRleCB1bmRlciB0aGF0CisgKiBkaXJlY3RvcnkgbmFtZSwgd2UgYWx3YXlzIHJlY3Vyc2UgaW50byB0aGUgZGlyZWN0b3J5IHRvIHNlZQorICogYWxsIHRoZSBmaWxlcy4KKyAqCisgKiBDYXNlIDI6IElmIHdlICphbHJlYWR5KiBoYXZlIHRoYXQgZGlyZWN0b3J5IG5hbWUgYXMgYSBnaXRsaW5rLAorICogd2UgYWx3YXlzIGNvbnRpbnVlIHRvIHNlZSBpdCBhcyBhIGdpdGxpbmssIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgorICogdGhlcmUgaXMgYW4gYWN0dWFsIGdpdCBkaXJlY3RvcnkgdGhlcmUgb3Igbm90IChpdCBtaWdodCBub3QKKyAqIGJlIGNoZWNrZWQgb3V0IGFzIGEgc3VicHJvamVjdCEpCisgKgorICogQ2FzZSAzOiBpZiB3ZSBkaWRuJ3QgaGF2ZSBpdCBpbiB0aGUgaW5kZXggcHJldmlvdXNseSwgd2UKKyAqIGhhdmUgYSBmZXcgc3ViLWNhc2VzOgorICoKKyAqICAoYSkgaWYgInNob3dfb3RoZXJfZGlyZWN0b3JpZXMiIGlzIHRydWUsIHdlIHNob3cgaXQgYXMKKyAqICAgICAganVzdCBhIGRpcmVjdG9yeSwgdW5sZXNzICJoaWRlX2VtcHR5X2RpcmVjdG9yaWVzIiBpcworICogICAgICBhbHNvIHRydWUsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBjaGVjayBpZiBpdCBjb250YWlucyBhbnkKKyAqICAgICAgdW50cmFja2VkIGFuZCAvIG9yIGlnbm9yZWQgZmlsZXMuCisgKiAgKGIpIGlmIGl0IGxvb2tzIGxpa2UgYSBnaXQgZGlyZWN0b3J5LCBhbmQgd2UgZG9uJ3QgaGF2ZQorICogICAgICAnbm9fZ2l0bGlua3MnIHNldCB3ZSB0cmVhdCBpdCBhcyBhIGdpdGxpbmssIGFuZCBzaG93IGl0CisgKiAgICAgIGFzIGEgZGlyZWN0b3J5LgorICogIChjKSBvdGhlcndpc2UsIHdlIHJlY3Vyc2UgaW50byBpdC4KKyAqLworc3RhdGljIGVudW0gcGF0aF90cmVhdG1lbnQgdHJlYXRfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwKKwljb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgbGVuLCBpbnQgYmFzZWxlbiwgaW50IGV4Y2x1ZGUsCisJY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQoreworCS8qIFRoZSAibGVuLTEiIGlzIHRvIHN0cmlwIHRoZSBmaW5hbCAnLycgKi8KKwlzd2l0Y2ggKGRpcmVjdG9yeV9leGlzdHNfaW5faW5kZXgoZGlybmFtZSwgbGVuLTEpKSB7CisJY2FzZSBpbmRleF9kaXJlY3Rvcnk6CisJCXJldHVybiBwYXRoX3JlY3Vyc2U7CisKKwljYXNlIGluZGV4X2dpdGRpcjoKKwkJcmV0dXJuIHBhdGhfbm9uZTsKKworCWNhc2UgaW5kZXhfbm9uZXhpc3RlbnQ6CisJCWlmIChkaXItPmZsYWdzICYgRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMpCisJCQlicmVhazsKKwkJaWYgKCEoZGlyLT5mbGFncyAmIERJUl9OT19HSVRMSU5LUykpIHsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCQlpZiAocmVzb2x2ZV9naXRsaW5rX3JlZihkaXJuYW1lLCAiSEVBRCIsIHNoYTEpID09IDApCisJCQkJcmV0dXJuIHBhdGhfdW50cmFja2VkOworCQl9CisJCXJldHVybiBwYXRoX3JlY3Vyc2U7CisJfQorCisJLyogVGhpcyBpcyB0aGUgInNob3dfb3RoZXJfZGlyZWN0b3JpZXMiIGNhc2UgKi8KKworCWlmICghKGRpci0+ZmxhZ3MgJiBESVJfSElERV9FTVBUWV9ESVJFQ1RPUklFUykpCisJCXJldHVybiBleGNsdWRlID8gcGF0aF9leGNsdWRlZCA6IHBhdGhfdW50cmFja2VkOworCisJdW50cmFja2VkID0gbG9va3VwX3VudHJhY2tlZChkaXItPnVudHJhY2tlZCwgdW50cmFja2VkLAorCQkJCSAgICAgZGlybmFtZSArIGJhc2VsZW4sIGxlbiAtIGJhc2VsZW4pOworCXJldHVybiByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBkaXJuYW1lLCBsZW4sCisJCQkJCXVudHJhY2tlZCwgMSwgc2ltcGxpZnkpOworfQorCisvKgorICogVGhpcyBpcyBhbiBpbmV4YWN0IGVhcmx5IHBydW5pbmcgb2YgYW55IHJlY3Vyc2l2ZSBkaXJlY3RvcnkKKyAqIHJlYWRpbmcgLSBpZiB0aGUgcGF0aCBjYW5ub3QgcG9zc2libHkgYmUgaW4gdGhlIHBhdGhzcGVjLAorICogcmV0dXJuIHRydWUsIGFuZCB3ZSdsbCBza2lwIGl0IGVhcmx5LgorICovCitzdGF0aWMgaW50IHNpbXBsaWZ5X2F3YXkoY29uc3QgY2hhciAqcGF0aCwgaW50IHBhdGhsZW4sIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSkKK3sKKwlpZiAoc2ltcGxpZnkpIHsKKwkJZm9yICg7OykgeworCQkJY29uc3QgY2hhciAqbWF0Y2ggPSBzaW1wbGlmeS0+cGF0aDsKKwkJCWludCBsZW4gPSBzaW1wbGlmeS0+bGVuOworCisJCQlpZiAoIW1hdGNoKQorCQkJCWJyZWFrOworCQkJaWYgKGxlbiA+IHBhdGhsZW4pCisJCQkJbGVuID0gcGF0aGxlbjsKKwkJCWlmICghbWVtY21wKHBhdGgsIG1hdGNoLCBsZW4pKQorCQkJCXJldHVybiAwOworCQkJc2ltcGxpZnkrKzsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHRlbGxzIHVzIHdoZXRoZXIgYW4gZXhjbHVkZWQgcGF0aCBtYXRjaGVzIGEKKyAqIGxpc3Qgb2YgImludGVyZXN0aW5nIiBwYXRoc3BlY3MuIFRoYXQgaXMsIHdoZXRoZXIgYSBwYXRoIG1hdGNoZWQKKyAqIGJ5IGFueSBvZiB0aGUgcGF0aHNwZWNzIGNvdWxkIHBvc3NpYmx5IGJlIGlnbm9yZWQgYnkgZXhjbHVkaW5nCisgKiB0aGUgc3BlY2lmaWVkIHBhdGguIFRoaXMgY2FuIGhhcHBlbiBpZjoKKyAqCisgKiAgIDEuIHRoZSBwYXRoIGlzIG1lbnRpb25lZCBleHBsaWNpdGx5IGluIHRoZSBwYXRoc3BlYworICoKKyAqICAgMi4gdGhlIHBhdGggaXMgYSBkaXJlY3RvcnkgcHJlZml4IG9mIHNvbWUgZWxlbWVudCBpbiB0aGUKKyAqICAgICAgcGF0aHNwZWMKKyAqLworc3RhdGljIGludCBleGNsdWRlX21hdGNoZXNfcGF0aHNwZWMoY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwKKwkJY29uc3Qgc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQoreworCWlmIChzaW1wbGlmeSkgeworCQlmb3IgKDsgc2ltcGxpZnktPnBhdGg7IHNpbXBsaWZ5KyspIHsKKwkJCWlmIChsZW4gPT0gc2ltcGxpZnktPmxlbgorCQkJICAgICYmICFtZW1jbXAocGF0aCwgc2ltcGxpZnktPnBhdGgsIGxlbikpCisJCQkJcmV0dXJuIDE7CisJCQlpZiAobGVuIDwgc2ltcGxpZnktPmxlbgorCQkJICAgICYmIHNpbXBsaWZ5LT5wYXRoW2xlbl0gPT0gJy8nCisJCQkgICAgJiYgIW1lbWNtcChwYXRoLCBzaW1wbGlmeS0+cGF0aCwgbGVuKSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfaW5kZXhfZHR5cGUoY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbikKK3sKKwlpbnQgcG9zOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwljZSA9IGNhY2hlX2ZpbGVfZXhpc3RzKHBhdGgsIGxlbiwgMCk7CisJaWYgKGNlKSB7CisJCWlmICghY2VfdXB0b2RhdGUoY2UpKQorCQkJcmV0dXJuIERUX1VOS05PV047CisJCWlmIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQlyZXR1cm4gRFRfRElSOworCQkvKgorCQkgKiBOb2JvZHkgYWN0dWFsbHkgY2FyZXMgYWJvdXQgdGhlCisJCSAqIGRpZmZlcmVuY2UgYmV0d2VlbiBEVF9MTksgYW5kIERUX1JFRworCQkgKi8KKwkJcmV0dXJuIERUX1JFRzsKKwl9CisKKwkvKiBUcnkgdG8gbG9vayBpdCB1cCBhcyBhIGRpcmVjdG9yeSAqLworCXBvcyA9IGNhY2hlX25hbWVfcG9zKHBhdGgsIGxlbik7CisJaWYgKHBvcyA+PSAwKQorCQlyZXR1cm4gRFRfVU5LTk9XTjsKKwlwb3MgPSAtcG9zLTE7CisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgeworCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3MrK107CisJCWlmIChzdHJuY21wKGNlLT5uYW1lLCBwYXRoLCBsZW4pKQorCQkJYnJlYWs7CisJCWlmIChjZS0+bmFtZVtsZW5dID4gJy8nKQorCQkJYnJlYWs7CisJCWlmIChjZS0+bmFtZVtsZW5dIDwgJy8nKQorCQkJY29udGludWU7CisJCWlmICghY2VfdXB0b2RhdGUoY2UpKQorCQkJYnJlYWs7CS8qIGNvbnRpbnVlPyAqLworCQlyZXR1cm4gRFRfRElSOworCX0KKwlyZXR1cm4gRFRfVU5LTk9XTjsKK30KKworc3RhdGljIGludCBnZXRfZHR5cGUoc3RydWN0IGRpcmVudCAqZGUsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJaW50IGR0eXBlID0gZGUgPyBEVFlQRShkZSkgOiBEVF9VTktOT1dOOworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGR0eXBlICE9IERUX1VOS05PV04pCisJCXJldHVybiBkdHlwZTsKKwlkdHlwZSA9IGdldF9pbmRleF9kdHlwZShwYXRoLCBsZW4pOworCWlmIChkdHlwZSAhPSBEVF9VTktOT1dOKQorCQlyZXR1cm4gZHR5cGU7CisJaWYgKGxzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiBkdHlwZTsKKwlpZiAoU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIERUX1JFRzsKKwlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIERUX0RJUjsKKwlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIERUX0xOSzsKKwlyZXR1cm4gZHR5cGU7Cit9CisKK3N0YXRpYyBlbnVtIHBhdGhfdHJlYXRtZW50IHRyZWF0X29uZV9wYXRoKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJCSAgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwKKwkJCQkJICBzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJCQkgIGludCBiYXNlbGVuLAorCQkJCQkgIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSwKKwkJCQkJICBpbnQgZHR5cGUsIHN0cnVjdCBkaXJlbnQgKmRlKQoreworCWludCBleGNsdWRlOworCWludCBoYXNfcGF0aF9pbl9pbmRleCA9ICEhY2FjaGVfZmlsZV9leGlzdHMocGF0aC0+YnVmLCBwYXRoLT5sZW4sIGlnbm9yZV9jYXNlKTsKKworCWlmIChkdHlwZSA9PSBEVF9VTktOT1dOKQorCQlkdHlwZSA9IGdldF9kdHlwZShkZSwgcGF0aC0+YnVmLCBwYXRoLT5sZW4pOworCisJLyogQWx3YXlzIGV4Y2x1ZGUgaW5kZXhlZCBmaWxlcyAqLworCWlmIChkdHlwZSAhPSBEVF9ESVIgJiYgaGFzX3BhdGhfaW5faW5kZXgpCisJCXJldHVybiBwYXRoX25vbmU7CisKKwkvKgorCSAqIFdoZW4gd2UgYXJlIGxvb2tpbmcgYXQgYSBkaXJlY3RvcnkgUCBpbiB0aGUgd29ya2luZyB0cmVlLAorCSAqIHRoZXJlIGFyZSB0aHJlZSBjYXNlczoKKwkgKgorCSAqICgxKSBQIGV4aXN0cyBpbiB0aGUgaW5kZXguICBFdmVyeXRoaW5nIGluc2lkZSB0aGUgZGlyZWN0b3J5IFAgaW4KKwkgKiB0aGUgd29ya2luZyB0cmVlIG5lZWRzIHRvIGdvIHdoZW4gUCBpcyBjaGVja2VkIG91dCBmcm9tIHRoZQorCSAqIGluZGV4LgorCSAqCisJICogKDIpIFAgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGluZGV4LCBidXQgdGhlcmUgaXMgUC9RIGluIHRoZSBpbmRleC4KKwkgKiBXZSBrbm93IFAgd2lsbCBzdGF5IGEgZGlyZWN0b3J5IHdoZW4gd2UgY2hlY2sgb3V0IHRoZSBjb250ZW50cworCSAqIG9mIHRoZSBpbmRleCwgYnV0IHdlIGRvIG5vdCBrbm93IHlldCBpZiB0aGVyZSBpcyBhIGRpcmVjdG9yeQorCSAqIFAvUSBpbiB0aGUgd29ya2luZyB0cmVlIHRvIGJlIGtpbGxlZCwgc28gd2UgbmVlZCB0byByZWN1cnNlLgorCSAqCisJICogKDMpIFAgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGluZGV4LCBhbmQgdGhlcmUgaXMgbm8gUC9RIGluIHRoZSBpbmRleAorCSAqIHRvIHJlcXVpcmUgUCB0byBiZSBhIGRpcmVjdG9yeSwgZWl0aGVyLiAgT25seSBpbiB0aGlzIGNhc2UsIHdlCisJICoga25vdyB0aGF0IGV2ZXJ5dGhpbmcgaW5zaWRlIFAgd2lsbCBub3QgYmUga2lsbGVkIHdpdGhvdXQKKwkgKiByZWN1cnNpbmcuCisJICovCisJaWYgKChkaXItPmZsYWdzICYgRElSX0NPTExFQ1RfS0lMTEVEX09OTFkpICYmCisJICAgIChkdHlwZSA9PSBEVF9ESVIpICYmCisJICAgICFoYXNfcGF0aF9pbl9pbmRleCAmJgorCSAgICAoZGlyZWN0b3J5X2V4aXN0c19pbl9pbmRleChwYXRoLT5idWYsIHBhdGgtPmxlbikgPT0gaW5kZXhfbm9uZXhpc3RlbnQpKQorCQlyZXR1cm4gcGF0aF9ub25lOworCisJZXhjbHVkZSA9IGlzX2V4Y2x1ZGVkKGRpciwgcGF0aC0+YnVmLCAmZHR5cGUpOworCisJLyoKKwkgKiBFeGNsdWRlZD8gSWYgd2UgZG9uJ3QgZXhwbGljaXRseSB3YW50IHRvIHNob3cKKwkgKiBpZ25vcmVkIGZpbGVzLCBpZ25vcmUgaXQKKwkgKi8KKwlpZiAoZXhjbHVkZSAmJiAhKGRpci0+ZmxhZ3MgJiAoRElSX1NIT1dfSUdOT1JFRHxESVJfU0hPV19JR05PUkVEX1RPTykpKQorCQlyZXR1cm4gcGF0aF9leGNsdWRlZDsKKworCXN3aXRjaCAoZHR5cGUpIHsKKwlkZWZhdWx0OgorCQlyZXR1cm4gcGF0aF9ub25lOworCWNhc2UgRFRfRElSOgorCQlzdHJidWZfYWRkY2gocGF0aCwgJy8nKTsKKwkJcmV0dXJuIHRyZWF0X2RpcmVjdG9yeShkaXIsIHVudHJhY2tlZCwgcGF0aC0+YnVmLCBwYXRoLT5sZW4sCisJCQkJICAgICAgIGJhc2VsZW4sIGV4Y2x1ZGUsIHNpbXBsaWZ5KTsKKwljYXNlIERUX1JFRzoKKwljYXNlIERUX0xOSzoKKwkJcmV0dXJuIGV4Y2x1ZGUgPyBwYXRoX2V4Y2x1ZGVkIDogcGF0aF91bnRyYWNrZWQ7CisJfQorfQorCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCB0cmVhdF9wYXRoX2Zhc3Qoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCQkJICAgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwKKwkJCQkJICAgc3RydWN0IGNhY2hlZF9kaXIgKmNkaXIsCisJCQkJCSAgIHN0cnVjdCBzdHJidWYgKnBhdGgsCisJCQkJCSAgIGludCBiYXNlbGVuLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgcGF0aF9zaW1wbGlmeSAqc2ltcGxpZnkpCit7CisJc3RyYnVmX3NldGxlbihwYXRoLCBiYXNlbGVuKTsKKwlpZiAoIWNkaXItPnVjZCkgeworCQlzdHJidWZfYWRkc3RyKHBhdGgsIGNkaXItPmZpbGUpOworCQlyZXR1cm4gcGF0aF91bnRyYWNrZWQ7CisJfQorCXN0cmJ1Zl9hZGRzdHIocGF0aCwgY2Rpci0+dWNkLT5uYW1lKTsKKwkvKiB0cmVhdF9vbmVfcGF0aCgpIGRvZXMgdGhpcyBiZWZvcmUgaXQgY2FsbHMgdHJlYXRfZGlyZWN0b3J5KCkgKi8KKwlzdHJidWZfY29tcGxldGUocGF0aCwgJy8nKTsKKwlpZiAoY2Rpci0+dWNkLT5jaGVja19vbmx5KQorCQkvKgorCQkgKiBjaGVja19vbmx5IGlzIHNldCBhcyBhIHJlc3VsdCBvZiB0cmVhdF9kaXJlY3RvcnkoKSBnZXR0aW5nCisJCSAqIHRvIGl0cyBib3R0b20uIFZlcmlmeSBhZ2FpbiB0aGUgc2FtZSBzZXQgb2YgZGlyZWN0b3JpZXMKKwkJICogd2l0aCBjaGVja19vbmx5IHNldC4KKwkJICovCisJCXJldHVybiByZWFkX2RpcmVjdG9yeV9yZWN1cnNpdmUoZGlyLCBwYXRoLT5idWYsIHBhdGgtPmxlbiwKKwkJCQkJCWNkaXItPnVjZCwgMSwgc2ltcGxpZnkpOworCS8qCisJICogV2UgZ2V0IHBhdGhfcmVjdXJzZSBpbiB0aGUgZmlyc3QgcnVuIHdoZW4KKwkgKiBkaXJlY3RvcnlfZXhpc3RzX2luX2luZGV4KCkgcmV0dXJucyBpbmRleF9ub25leGlzdGVudC4gV2UKKwkgKiBhcmUgc3VyZSB0aGF0IG5ldyBjaGFuZ2VzIGluIHRoZSBpbmRleCBkb2VzIG5vdCBpbXBhY3QgdGhlCisJICogb3V0Y29tZS4gUmV0dXJuIG5vdy4KKwkgKi8KKwlyZXR1cm4gcGF0aF9yZWN1cnNlOworfQorCitzdGF0aWMgZW51bSBwYXRoX3RyZWF0bWVudCB0cmVhdF9wYXRoKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJICAgICAgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwKKwkJCQkgICAgICBzdHJ1Y3QgY2FjaGVkX2RpciAqY2RpciwKKwkJCQkgICAgICBzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJCSAgICAgIGludCBiYXNlbGVuLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSkKK3sKKwlpbnQgZHR5cGU7CisJc3RydWN0IGRpcmVudCAqZGUgPSBjZGlyLT5kZTsKKworCWlmICghZGUpCisJCXJldHVybiB0cmVhdF9wYXRoX2Zhc3QoZGlyLCB1bnRyYWNrZWQsIGNkaXIsIHBhdGgsCisJCQkJICAgICAgIGJhc2VsZW4sIHNpbXBsaWZ5KTsKKwlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSB8fCAhc3RyY21wKGRlLT5kX25hbWUsICIuZ2l0IikpCisJCXJldHVybiBwYXRoX25vbmU7CisJc3RyYnVmX3NldGxlbihwYXRoLCBiYXNlbGVuKTsKKwlzdHJidWZfYWRkc3RyKHBhdGgsIGRlLT5kX25hbWUpOworCWlmIChzaW1wbGlmeV9hd2F5KHBhdGgtPmJ1ZiwgcGF0aC0+bGVuLCBzaW1wbGlmeSkpCisJCXJldHVybiBwYXRoX25vbmU7CisKKwlkdHlwZSA9IERUWVBFKGRlKTsKKwlyZXR1cm4gdHJlYXRfb25lX3BhdGgoZGlyLCB1bnRyYWNrZWQsIHBhdGgsIGJhc2VsZW4sIHNpbXBsaWZ5LCBkdHlwZSwgZGUpOworfQorCitzdGF0aWMgdm9pZCBhZGRfdW50cmFja2VkKHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpkaXIsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaWYgKCFkaXIpCisJCXJldHVybjsKKwlBTExPQ19HUk9XKGRpci0+dW50cmFja2VkLCBkaXItPnVudHJhY2tlZF9uciArIDEsCisJCSAgIGRpci0+dW50cmFja2VkX2FsbG9jKTsKKwlkaXItPnVudHJhY2tlZFtkaXItPnVudHJhY2tlZF9ucisrXSA9IHhzdHJkdXAobmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRfY2FjaGVkX2RpcihzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJICAgIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsCisJCQkgICAgc3RydWN0IHN0cmJ1ZiAqcGF0aCwKKwkJCSAgICBpbnQgY2hlY2tfb25seSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICghdW50cmFja2VkKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGF0KHBhdGgtPmxlbiA/IHBhdGgtPmJ1ZiA6ICIuIiwgJnN0KSkgeworCQlpbnZhbGlkYXRlX2RpcmVjdG9yeShkaXItPnVudHJhY2tlZCwgdW50cmFja2VkKTsKKwkJbWVtc2V0KCZ1bnRyYWNrZWQtPnN0YXRfZGF0YSwgMCwgc2l6ZW9mKHVudHJhY2tlZC0+c3RhdF9kYXRhKSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXVudHJhY2tlZC0+dmFsaWQgfHwKKwkgICAgbWF0Y2hfc3RhdF9kYXRhX3JhY3koJnRoZV9pbmRleCwgJnVudHJhY2tlZC0+c3RhdF9kYXRhLCAmc3QpKSB7CisJCWlmICh1bnRyYWNrZWQtPnZhbGlkKQorCQkJaW52YWxpZGF0ZV9kaXJlY3RvcnkoZGlyLT51bnRyYWNrZWQsIHVudHJhY2tlZCk7CisJCWZpbGxfc3RhdF9kYXRhKCZ1bnRyYWNrZWQtPnN0YXRfZGF0YSwgJnN0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHVudHJhY2tlZC0+Y2hlY2tfb25seSAhPSAhIWNoZWNrX29ubHkpIHsKKwkJaW52YWxpZGF0ZV9kaXJlY3RvcnkoZGlyLT51bnRyYWNrZWQsIHVudHJhY2tlZCk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogcHJlcF9leGNsdWRlIHdpbGwgYmUgY2FsbGVkIGV2ZW50dWFsbHkgb24gdGhpcyBkaXJlY3RvcnksCisJICogYnV0IGl0J3MgY2FsbGVkIG11Y2ggbGF0ZXIgaW4gbGFzdF9leGNsdWRlX21hdGNoaW5nKCkuIFdlCisJICogbmVlZCBpdCBub3cgdG8gZGV0ZXJtaW5lIHRoZSB2YWxpZGl0eSBvZiB0aGUgY2FjaGUgZm9yIHRoaXMKKwkgKiBwYXRoLiBUaGUgbmV4dCBjYWxscyB3aWxsIGJlIG5lYXJseSBuby1vcCwgdGhlIHdheQorCSAqIHByZXBfZXhjbHVkZSgpIGlzIGRlc2lnbmVkLgorCSAqLworCWlmIChwYXRoLT5sZW4gJiYgcGF0aC0+YnVmW3BhdGgtPmxlbiAtIDFdICE9ICcvJykgeworCQlzdHJidWZfYWRkY2gocGF0aCwgJy8nKTsKKwkJcHJlcF9leGNsdWRlKGRpciwgcGF0aC0+YnVmLCBwYXRoLT5sZW4pOworCQlzdHJidWZfc2V0bGVuKHBhdGgsIHBhdGgtPmxlbiAtIDEpOworCX0gZWxzZQorCQlwcmVwX2V4Y2x1ZGUoZGlyLCBwYXRoLT5idWYsIHBhdGgtPmxlbik7CisKKwkvKiBob3BlZnVsbHkgcHJlcF9leGNsdWRlKCkgaGF2ZW4ndCBpbnZhbGlkYXRlZCB0aGlzIGVudHJ5Li4uICovCisJcmV0dXJuIHVudHJhY2tlZC0+dmFsaWQ7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9jYWNoZWRfZGlyKHN0cnVjdCBjYWNoZWRfZGlyICpjZGlyLAorCQkJICAgc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwKKwkJCSAgIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJICAgaW50IGNoZWNrX29ubHkpCit7CisJbWVtc2V0KGNkaXIsIDAsIHNpemVvZigqY2RpcikpOworCWNkaXItPnVudHJhY2tlZCA9IHVudHJhY2tlZDsKKwlpZiAodmFsaWRfY2FjaGVkX2RpcihkaXIsIHVudHJhY2tlZCwgcGF0aCwgY2hlY2tfb25seSkpCisJCXJldHVybiAwOworCWNkaXItPmZkaXIgPSBvcGVuZGlyKHBhdGgtPmxlbiA/IHBhdGgtPmJ1ZiA6ICIuIik7CisJaWYgKGRpci0+dW50cmFja2VkKQorCQlkaXItPnVudHJhY2tlZC0+ZGlyX29wZW5lZCsrOworCWlmICghY2Rpci0+ZmRpcikKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfY2FjaGVkX2RpcihzdHJ1Y3QgY2FjaGVkX2RpciAqY2RpcikKK3sKKwlpZiAoY2Rpci0+ZmRpcikgeworCQljZGlyLT5kZSA9IHJlYWRkaXIoY2Rpci0+ZmRpcik7CisJCWlmICghY2Rpci0+ZGUpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwl3aGlsZSAoY2Rpci0+bnJfZGlycyA8IGNkaXItPnVudHJhY2tlZC0+ZGlyc19ucikgeworCQlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZCA9IGNkaXItPnVudHJhY2tlZC0+ZGlyc1tjZGlyLT5ucl9kaXJzXTsKKwkJaWYgKCFkLT5yZWN1cnNlKSB7CisJCQljZGlyLT5ucl9kaXJzKys7CisJCQljb250aW51ZTsKKwkJfQorCQljZGlyLT51Y2QgPSBkOworCQljZGlyLT5ucl9kaXJzKys7CisJCXJldHVybiAwOworCX0KKwljZGlyLT51Y2QgPSBOVUxMOworCWlmIChjZGlyLT5ucl9maWxlcyA8IGNkaXItPnVudHJhY2tlZC0+dW50cmFja2VkX25yKSB7CisJCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpkID0gY2Rpci0+dW50cmFja2VkOworCQljZGlyLT5maWxlID0gZC0+dW50cmFja2VkW2NkaXItPm5yX2ZpbGVzKytdOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBjbG9zZV9jYWNoZWRfZGlyKHN0cnVjdCBjYWNoZWRfZGlyICpjZGlyKQoreworCWlmIChjZGlyLT5mZGlyKQorCQljbG9zZWRpcihjZGlyLT5mZGlyKTsKKwkvKgorCSAqIFdlIGhhdmUgZ29uZSB0aHJvdWdoIHRoaXMgZGlyZWN0b3J5IGFuZCBmb3VuZCBubyB1bnRyYWNrZWQKKwkgKiBlbnRyaWVzLiBNYXJrIGl0IHZhbGlkLgorCSAqLworCWlmIChjZGlyLT51bnRyYWNrZWQpIHsKKwkJY2Rpci0+dW50cmFja2VkLT52YWxpZCA9IDE7CisJCWNkaXItPnVudHJhY2tlZC0+cmVjdXJzZSA9IDE7CisJfQorfQorCisvKgorICogUmVhZCBhIGRpcmVjdG9yeSB0cmVlLiBXZSBjdXJyZW50bHkgaWdub3JlIGFueXRoaW5nIGJ1dAorICogZGlyZWN0b3JpZXMsIHJlZ3VsYXIgZmlsZXMgYW5kIHN5bWxpbmtzLiBUaGF0J3MgYmVjYXVzZSBnaXQKKyAqIGRvZXNuJ3QgaGFuZGxlIHRoZW0gYXQgYWxsIHlldC4gTWF5YmUgdGhhdCB3aWxsIGNoYW5nZSBzb21lCisgKiBkYXkuCisgKgorICogQWxzbywgd2UgaWdub3JlIHRoZSBuYW1lICIuZ2l0IiAoZXZlbiBpZiBpdCBpcyBub3QgYSBkaXJlY3RvcnkpLgorICogVGhhdCBsaWtlbHkgd2lsbCBub3QgY2hhbmdlLgorICoKKyAqIFJldHVybnMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgcGF0aF90cmVhdG1lbnQgdmFsdWUgZW5jb3VudGVyZWQgaW4gdGhlIHNjYW4uCisgKi8KK3N0YXRpYyBlbnVtIHBhdGhfdHJlYXRtZW50IHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJCSAgICBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCQkgICAgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVudHJhY2tlZCwgaW50IGNoZWNrX29ubHksCisJCQkJICAgIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSkKK3sKKwlzdHJ1Y3QgY2FjaGVkX2RpciBjZGlyOworCWVudW0gcGF0aF90cmVhdG1lbnQgc3RhdGUsIHN1YmRpcl9zdGF0ZSwgZGlyX3N0YXRlID0gcGF0aF9ub25lOworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZCgmcGF0aCwgYmFzZSwgYmFzZWxlbik7CisKKwlpZiAob3Blbl9jYWNoZWRfZGlyKCZjZGlyLCBkaXIsIHVudHJhY2tlZCwgJnBhdGgsIGNoZWNrX29ubHkpKQorCQlnb3RvIG91dDsKKworCWlmICh1bnRyYWNrZWQpCisJCXVudHJhY2tlZC0+Y2hlY2tfb25seSA9ICEhY2hlY2tfb25seTsKKworCXdoaWxlICghcmVhZF9jYWNoZWRfZGlyKCZjZGlyKSkgeworCQkvKiBjaGVjayBob3cgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IHNob3VsZCBiZSB0cmVhdGVkICovCisJCXN0YXRlID0gdHJlYXRfcGF0aChkaXIsIHVudHJhY2tlZCwgJmNkaXIsICZwYXRoLCBiYXNlbGVuLCBzaW1wbGlmeSk7CisKKwkJaWYgKHN0YXRlID4gZGlyX3N0YXRlKQorCQkJZGlyX3N0YXRlID0gc3RhdGU7CisKKwkJLyogcmVjdXJzZSBpbnRvIHN1YmRpciBpZiBpbnN0cnVjdGVkIGJ5IHRyZWF0X3BhdGggKi8KKwkJaWYgKHN0YXRlID09IHBhdGhfcmVjdXJzZSkgeworCQkJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVkOworCQkJdWQgPSBsb29rdXBfdW50cmFja2VkKGRpci0+dW50cmFja2VkLCB1bnRyYWNrZWQsCisJCQkJCSAgICAgIHBhdGguYnVmICsgYmFzZWxlbiwKKwkJCQkJICAgICAgcGF0aC5sZW4gLSBiYXNlbGVuKTsKKwkJCXN1YmRpcl9zdGF0ZSA9CisJCQkJcmVhZF9kaXJlY3RvcnlfcmVjdXJzaXZlKGRpciwgcGF0aC5idWYsIHBhdGgubGVuLAorCQkJCQkJCSB1ZCwgY2hlY2tfb25seSwgc2ltcGxpZnkpOworCQkJaWYgKHN1YmRpcl9zdGF0ZSA+IGRpcl9zdGF0ZSkKKwkJCQlkaXJfc3RhdGUgPSBzdWJkaXJfc3RhdGU7CisJCX0KKworCQlpZiAoY2hlY2tfb25seSkgeworCQkJLyogYWJvcnQgZWFybHkgaWYgbWF4aW11bSBzdGF0ZSBoYXMgYmVlbiByZWFjaGVkICovCisJCQlpZiAoZGlyX3N0YXRlID09IHBhdGhfdW50cmFja2VkKSB7CisJCQkJaWYgKGNkaXIuZmRpcikKKwkJCQkJYWRkX3VudHJhY2tlZCh1bnRyYWNrZWQsIHBhdGguYnVmICsgYmFzZWxlbik7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBza2lwIHRoZSBkaXJfYWRkXyogcGFydCAqLworCQkJY29udGludWU7CisJCX0KKworCQkvKiBhZGQgdGhlIHBhdGggdG8gdGhlIGFwcHJvcHJpYXRlIHJlc3VsdCBsaXN0ICovCisJCXN3aXRjaCAoc3RhdGUpIHsKKwkJY2FzZSBwYXRoX2V4Y2x1ZGVkOgorCQkJaWYgKGRpci0+ZmxhZ3MgJiBESVJfU0hPV19JR05PUkVEKQorCQkJCWRpcl9hZGRfbmFtZShkaXIsIHBhdGguYnVmLCBwYXRoLmxlbik7CisJCQllbHNlIGlmICgoZGlyLT5mbGFncyAmIERJUl9TSE9XX0lHTk9SRURfVE9PKSB8fAorCQkJCSgoZGlyLT5mbGFncyAmIERJUl9DT0xMRUNUX0lHTk9SRUQpICYmCisJCQkJZXhjbHVkZV9tYXRjaGVzX3BhdGhzcGVjKHBhdGguYnVmLCBwYXRoLmxlbiwKKwkJCQkJc2ltcGxpZnkpKSkKKwkJCQlkaXJfYWRkX2lnbm9yZWQoZGlyLCBwYXRoLmJ1ZiwgcGF0aC5sZW4pOworCQkJYnJlYWs7CisKKwkJY2FzZSBwYXRoX3VudHJhY2tlZDoKKwkJCWlmIChkaXItPmZsYWdzICYgRElSX1NIT1dfSUdOT1JFRCkKKwkJCQlicmVhazsKKwkJCWRpcl9hZGRfbmFtZShkaXIsIHBhdGguYnVmLCBwYXRoLmxlbik7CisJCQlpZiAoY2Rpci5mZGlyKQorCQkJCWFkZF91bnRyYWNrZWQodW50cmFja2VkLCBwYXRoLmJ1ZiArIGJhc2VsZW4pOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCWNsb3NlX2NhY2hlZF9kaXIoJmNkaXIpOworIG91dDoKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisKKwlyZXR1cm4gZGlyX3N0YXRlOworfQorCitzdGF0aWMgaW50IGNtcF9uYW1lKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKwljb25zdCBzdHJ1Y3QgZGlyX2VudHJ5ICplMSA9ICooY29uc3Qgc3RydWN0IGRpcl9lbnRyeSAqKilwMTsKKwljb25zdCBzdHJ1Y3QgZGlyX2VudHJ5ICplMiA9ICooY29uc3Qgc3RydWN0IGRpcl9lbnRyeSAqKilwMjsKKworCXJldHVybiBuYW1lX2NvbXBhcmUoZTEtPm5hbWUsIGUxLT5sZW4sIGUyLT5uYW1lLCBlMi0+bGVuKTsKK30KKworc3RhdGljIHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpjcmVhdGVfc2ltcGxpZnkoY29uc3QgY2hhciAqKnBhdGhzcGVjKQoreworCWludCBuciwgYWxsb2MgPSAwOworCXN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSA9IE5VTEw7CisKKwlpZiAoIXBhdGhzcGVjKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAobnIgPSAwIDsgOyBucisrKSB7CisJCWNvbnN0IGNoYXIgKm1hdGNoOworCQlBTExPQ19HUk9XKHNpbXBsaWZ5LCBuciArIDEsIGFsbG9jKTsKKwkJbWF0Y2ggPSAqcGF0aHNwZWMrKzsKKwkJaWYgKCFtYXRjaCkKKwkJCWJyZWFrOworCQlzaW1wbGlmeVtucl0ucGF0aCA9IG1hdGNoOworCQlzaW1wbGlmeVtucl0ubGVuID0gc2ltcGxlX2xlbmd0aChtYXRjaCk7CisJfQorCXNpbXBsaWZ5W25yXS5wYXRoID0gTlVMTDsKKwlzaW1wbGlmeVtucl0ubGVuID0gMDsKKwlyZXR1cm4gc2ltcGxpZnk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc2ltcGxpZnkoc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5KQoreworCWZyZWUoc2ltcGxpZnkpOworfQorCitzdGF0aWMgaW50IHRyZWF0X2xlYWRpbmdfcGF0aChzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJICAgICAgY29uc3QgY2hhciAqcGF0aCwgaW50IGxlbiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBwYXRoX3NpbXBsaWZ5ICpzaW1wbGlmeSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IGJhc2VsZW4sIHJjID0gMDsKKwljb25zdCBjaGFyICpjcDsKKwlpbnQgb2xkX2ZsYWdzID0gZGlyLT5mbGFnczsKKworCXdoaWxlIChsZW4gJiYgcGF0aFtsZW4gLSAxXSA9PSAnLycpCisJCWxlbi0tOworCWlmICghbGVuKQorCQlyZXR1cm4gMTsKKwliYXNlbGVuID0gMDsKKwlkaXItPmZsYWdzICY9IH5ESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUzsKKwl3aGlsZSAoMSkgeworCQljcCA9IHBhdGggKyBiYXNlbGVuICsgISFiYXNlbGVuOworCQljcCA9IG1lbWNocihjcCwgJy8nLCBwYXRoICsgbGVuIC0gY3ApOworCQlpZiAoIWNwKQorCQkJYmFzZWxlbiA9IGxlbjsKKwkJZWxzZQorCQkJYmFzZWxlbiA9IGNwIC0gcGF0aDsKKwkJc3RyYnVmX3NldGxlbigmc2IsIDApOworCQlzdHJidWZfYWRkKCZzYiwgcGF0aCwgYmFzZWxlbik7CisJCWlmICghaXNfZGlyZWN0b3J5KHNiLmJ1ZikpCisJCQlicmVhazsKKwkJaWYgKHNpbXBsaWZ5X2F3YXkoc2IuYnVmLCBzYi5sZW4sIHNpbXBsaWZ5KSkKKwkJCWJyZWFrOworCQlpZiAodHJlYXRfb25lX3BhdGgoZGlyLCBOVUxMLCAmc2IsIGJhc2VsZW4sIHNpbXBsaWZ5LAorCQkJCSAgIERUX0RJUiwgTlVMTCkgPT0gcGF0aF9ub25lKQorCQkJYnJlYWs7IC8qIGRvIG5vdCByZWN1cnNlIGludG8gaXQgKi8KKwkJaWYgKGxlbiA8PSBiYXNlbGVuKSB7CisJCQlyYyA9IDE7CisJCQlicmVhazsgLyogZmluaXNoZWQgY2hlY2tpbmcgKi8KKwkJfQorCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWRpci0+ZmxhZ3MgPSBvbGRfZmxhZ3M7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2lkZW50X3N0cmluZyh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHV0c25hbWUgdXRzOworCisJaWYgKHNiLmxlbikKKwkJcmV0dXJuIHNiLmJ1ZjsKKwlpZiAodW5hbWUoJnV0cykgPCAwKQorCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iKSk7CisJc3RyYnVmX2FkZGYoJnNiLCAiTG9jYXRpb24gJXMsIHN5c3RlbSAlcyAlcyAlcyIsIGdldF9naXRfd29ya190cmVlKCksCisJCSAgICB1dHMuc3lzbmFtZSwgdXRzLnJlbGVhc2UsIHV0cy52ZXJzaW9uKTsKKwlyZXR1cm4gc2IuYnVmOworfQorCitzdGF0aWMgaW50IGlkZW50X2luX3VudHJhY2tlZChjb25zdCBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YykKK3sKKwljb25zdCBjaGFyICplbmQgPSB1Yy0+aWRlbnQuYnVmICsgdWMtPmlkZW50LmxlbjsKKwljb25zdCBjaGFyICpwICAgPSB1Yy0+aWRlbnQuYnVmOworCisJZm9yIChwID0gdWMtPmlkZW50LmJ1ZjsgcCA8IGVuZDsgcCArPSBzdHJsZW4ocCkgKyAxKQorCQlpZiAoIXN0cmNtcChwLCBnZXRfaWRlbnRfc3RyaW5nKCkpKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYWRkX3VudHJhY2tlZF9pZGVudChzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YykKK3sKKwlpZiAoaWRlbnRfaW5fdW50cmFja2VkKHVjKSkKKwkJcmV0dXJuOworCXN0cmJ1Zl9hZGRzdHIoJnVjLT5pZGVudCwgZ2V0X2lkZW50X3N0cmluZygpKTsKKwkvKiB0aGlzIHN0cmJ1ZiBjb250YWlucyBhIGxpc3Qgb2Ygc3RyaW5ncywgc2F2ZSBOVUwgdG9vICovCisJc3RyYnVmX2FkZGNoKCZ1Yy0+aWRlbnQsIDApOworfQorCitzdGF0aWMgc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnZhbGlkYXRlX3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyLAorCQkJCQkJICAgICAgaW50IGJhc2VfbGVuLAorCQkJCQkJICAgICAgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqcm9vdDsKKworCWlmICghZGlyLT51bnRyYWNrZWQgfHwgZ2V0ZW52KCJHSVRfRElTQUJMRV9VTlRSQUNLRURfQ0FDSEUiKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCAkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUgYW5kIGNvcmUuZXhjbHVkZXNmaWxlCisJICogYXMgdGhlIGdsb2JhbCBpZ25vcmUgcnVsZSBmaWxlcy4gQW55IG90aGVyIGFkZGl0aW9ucworCSAqIChlLmcuIGZyb20gY29tbWFuZCBsaW5lKSBpbnZhbGlkYXRlIHRoZSBjYWNoZS4gVGhpcworCSAqIGNvbmRpdGlvbiBhbHNvIGNhdGNoZXMgcnVubmluZyBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygpCisJICogYmVmb3JlIHNldHRpbmcgZGlyLT51bnRyYWNrZWQhCisJICovCisJaWYgKGRpci0+dW5tYW5hZ2VkX2V4Y2x1ZGVfZmlsZXMpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBPcHRpbWl6ZSBmb3IgdGhlIG1haW4gdXNlIGNhc2Ugb25seTogd2hvbGUtdHJlZSBnaXQKKwkgKiBzdGF0dXMuIE1vcmUgd29yayBpbnZvbHZlZCBpbiB0cmVhdF9sZWFkaW5nX3BhdGgoKSBpZiB3ZQorCSAqIHVzZSBjYWNoZSBvbiBqdXN0IGEgc3Vic2V0IG9mIHRoZSB3b3JrdHJlZS4gcGF0aHNwZWMKKwkgKiBzdXBwb3J0IGNvdWxkIG1ha2UgdGhlIG1hdHRlciBldmVuIHdvcnNlLgorCSAqLworCWlmIChiYXNlX2xlbiB8fCAocGF0aHNwZWMgJiYgcGF0aHNwZWMtPm5yKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBEaWZmZXJlbnQgc2V0IG9mIGZsYWdzIG1heSBwcm9kdWNlIGRpZmZlcmVudCByZXN1bHRzICovCisJaWYgKGRpci0+ZmxhZ3MgIT0gZGlyLT51bnRyYWNrZWQtPmRpcl9mbGFncyB8fAorCSAgICAvKgorCSAgICAgKiBTZWUgdHJlYXRfZGlyZWN0b3J5KCksIGNhc2UgaW5kZXhfbm9uZXhpc3RlbnQuIFdpdGhvdXQKKwkgICAgICogdGhpcyBmbGFnLCB3ZSBtYXkgbmVlZCB0byBhbHNvIGNhY2hlIC5naXQgZmlsZSBjb250ZW50CisJICAgICAqIGZvciB0aGUgcmVzb2x2ZV9naXRsaW5rX3JlZigpIGNhbGwsIHdoaWNoIHdlIGRvbid0LgorCSAgICAgKi8KKwkgICAgIShkaXItPmZsYWdzICYgRElSX1NIT1dfT1RIRVJfRElSRUNUT1JJRVMpIHx8CisJICAgIC8qIFdlIGRvbid0IHN1cHBvcnQgY29sbGVjdGluZyBpZ25vcmUgZmlsZXMgKi8KKwkgICAgKGRpci0+ZmxhZ3MgJiAoRElSX1NIT1dfSUdOT1JFRCB8IERJUl9TSE9XX0lHTk9SRURfVE9PIHwKKwkJCSAgIERJUl9DT0xMRUNUX0lHTk9SRUQpKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIElmIHdlIHVzZSAuZ2l0aWdub3JlIGluIHRoZSBjYWNoZSBhbmQgbm93IHlvdSBjaGFuZ2UgaXQgdG8KKwkgKiAuZ2l0ZXhjbHVkZSwgZXZlcnl0aGluZyB3aWxsIGdvIHdyb25nLgorCSAqLworCWlmIChkaXItPmV4Y2x1ZGVfcGVyX2RpciAhPSBkaXItPnVudHJhY2tlZC0+ZXhjbHVkZV9wZXJfZGlyICYmCisJICAgIHN0cmNtcChkaXItPmV4Y2x1ZGVfcGVyX2RpciwgZGlyLT51bnRyYWNrZWQtPmV4Y2x1ZGVfcGVyX2RpcikpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBFWENfQ01ETCBpcyBub3QgY29uc2lkZXJlZCBpbiB0aGUgY2FjaGUuIElmIHBlb3BsZSBzZXQgaXQsCisJICogc2tpcCB0aGUgY2FjaGUuCisJICovCisJaWYgKGRpci0+ZXhjbHVkZV9saXN0X2dyb3VwW0VYQ19DTURMXS5ucikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWlkZW50X2luX3VudHJhY2tlZChkaXItPnVudHJhY2tlZCkpIHsKKwkJd2FybmluZyhfKCJVbnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0uIikpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIWRpci0+dW50cmFja2VkLT5yb290KSB7CisJCWNvbnN0IGludCBsZW4gPSBzaXplb2YoKmRpci0+dW50cmFja2VkLT5yb290KTsKKwkJZGlyLT51bnRyYWNrZWQtPnJvb3QgPSB4bWFsbG9jKGxlbik7CisJCW1lbXNldChkaXItPnVudHJhY2tlZC0+cm9vdCwgMCwgbGVuKTsKKwl9CisKKwkvKiBWYWxpZGF0ZSAkR0lUX0RJUi9pbmZvL2V4Y2x1ZGUgYW5kIGNvcmUuZXhjbHVkZXNmaWxlICovCisJcm9vdCA9IGRpci0+dW50cmFja2VkLT5yb290OworCWlmIChoYXNoY21wKGRpci0+c3NfaW5mb19leGNsdWRlLnNoYTEsCisJCSAgICBkaXItPnVudHJhY2tlZC0+c3NfaW5mb19leGNsdWRlLnNoYTEpKSB7CisJCWludmFsaWRhdGVfZ2l0aWdub3JlKGRpci0+dW50cmFja2VkLCByb290KTsKKwkJZGlyLT51bnRyYWNrZWQtPnNzX2luZm9fZXhjbHVkZSA9IGRpci0+c3NfaW5mb19leGNsdWRlOworCX0KKwlpZiAoaGFzaGNtcChkaXItPnNzX2V4Y2x1ZGVzX2ZpbGUuc2hhMSwKKwkJICAgIGRpci0+dW50cmFja2VkLT5zc19leGNsdWRlc19maWxlLnNoYTEpKSB7CisJCWludmFsaWRhdGVfZ2l0aWdub3JlKGRpci0+dW50cmFja2VkLCByb290KTsKKwkJZGlyLT51bnRyYWNrZWQtPnNzX2V4Y2x1ZGVzX2ZpbGUgPSBkaXItPnNzX2V4Y2x1ZGVzX2ZpbGU7CisJfQorCisJLyogTWFrZSBzdXJlIHRoaXMgZGlyZWN0b3J5IGlzIG5vdCBkcm9wcGVkIG91dCBhdCBzYXZpbmcgcGhhc2UgKi8KKwlyb290LT5yZWN1cnNlID0gMTsKKwlyZXR1cm4gcm9vdDsKK30KKworaW50IHJlYWRfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJc3RydWN0IHBhdGhfc2ltcGxpZnkgKnNpbXBsaWZ5OworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQ7CisKKwkvKgorCSAqIENoZWNrIG91dCBjcmVhdGVfc2ltcGxpZnkoKQorCSAqLworCWlmIChwYXRoc3BlYykKKwkJR1VBUkRfUEFUSFNQRUMocGF0aHNwZWMsCisJCQkgICAgICAgUEFUSFNQRUNfRlJPTVRPUCB8CisJCQkgICAgICAgUEFUSFNQRUNfTUFYREVQVEggfAorCQkJICAgICAgIFBBVEhTUEVDX0xJVEVSQUwgfAorCQkJICAgICAgIFBBVEhTUEVDX0dMT0IgfAorCQkJICAgICAgIFBBVEhTUEVDX0lDQVNFIHwKKwkJCSAgICAgICBQQVRIU1BFQ19FWENMVURFKTsKKworCWlmIChoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgocGF0aCwgbGVuKSkKKwkJcmV0dXJuIGRpci0+bnI7CisKKwkvKgorCSAqIGV4Y2x1ZGUgcGF0dGVybnMgYXJlIHRyZWF0ZWQgbGlrZSBwb3NpdGl2ZSBvbmVzIGluCisJICogY3JlYXRlX3NpbXBsaWZ5LiBVc3VhbGx5IGV4Y2x1ZGUgcGF0dGVybnMgc2hvdWxkIGJlIGEKKwkgKiBzdWJzZXQgb2YgcG9zaXRpdmUgb25lcywgd2hpY2ggaGFzIG5vIGltcGFjdHMgb24KKwkgKiBjcmVhdGVfc2ltcGxpZnkoKS4KKwkgKi8KKwlzaW1wbGlmeSA9IGNyZWF0ZV9zaW1wbGlmeShwYXRoc3BlYyA/IHBhdGhzcGVjLT5fcmF3IDogTlVMTCk7CisJdW50cmFja2VkID0gdmFsaWRhdGVfdW50cmFja2VkX2NhY2hlKGRpciwgbGVuLCBwYXRoc3BlYyk7CisJaWYgKCF1bnRyYWNrZWQpCisJCS8qCisJCSAqIG1ha2Ugc3VyZSB1bnRyYWNrZWQgY2FjaGUgY29kZSBwYXRoIGlzIGRpc2FibGVkLAorCQkgKiBlLmcuIHByZXBfZXhjbHVkZSgpCisJCSAqLworCQlkaXItPnVudHJhY2tlZCA9IE5VTEw7CisJaWYgKCFsZW4gfHwgdHJlYXRfbGVhZGluZ19wYXRoKGRpciwgcGF0aCwgbGVuLCBzaW1wbGlmeSkpCisJCXJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZShkaXIsIHBhdGgsIGxlbiwgdW50cmFja2VkLCAwLCBzaW1wbGlmeSk7CisJZnJlZV9zaW1wbGlmeShzaW1wbGlmeSk7CisJcXNvcnQoZGlyLT5lbnRyaWVzLCBkaXItPm5yLCBzaXplb2Yoc3RydWN0IGRpcl9lbnRyeSAqKSwgY21wX25hbWUpOworCXFzb3J0KGRpci0+aWdub3JlZCwgZGlyLT5pZ25vcmVkX25yLCBzaXplb2Yoc3RydWN0IGRpcl9lbnRyeSAqKSwgY21wX25hbWUpOworCWlmIChkaXItPnVudHJhY2tlZCkgeworCQlzdGF0aWMgc3RydWN0IHRyYWNlX2tleSB0cmFjZV91bnRyYWNrZWRfc3RhdHMgPSBUUkFDRV9LRVlfSU5JVChVTlRSQUNLRURfU1RBVFMpOworCQl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV91bnRyYWNrZWRfc3RhdHMsCisJCQkJICJub2RlIGNyZWF0aW9uOiAldVxuIgorCQkJCSAiZ2l0aWdub3JlIGludmFsaWRhdGlvbjogJXVcbiIKKwkJCQkgImRpcmVjdG9yeSBpbnZhbGlkYXRpb246ICV1XG4iCisJCQkJICJvcGVuZGlyOiAldVxuIiwKKwkJCQkgZGlyLT51bnRyYWNrZWQtPmRpcl9jcmVhdGVkLAorCQkJCSBkaXItPnVudHJhY2tlZC0+Z2l0aWdub3JlX2ludmFsaWRhdGVkLAorCQkJCSBkaXItPnVudHJhY2tlZC0+ZGlyX2ludmFsaWRhdGVkLAorCQkJCSBkaXItPnVudHJhY2tlZC0+ZGlyX29wZW5lZCk7CisJCWlmIChkaXItPnVudHJhY2tlZCA9PSB0aGVfaW5kZXgudW50cmFja2VkICYmCisJCSAgICAoZGlyLT51bnRyYWNrZWQtPmRpcl9vcGVuZWQgfHwKKwkJICAgICBkaXItPnVudHJhY2tlZC0+Z2l0aWdub3JlX2ludmFsaWRhdGVkIHx8CisJCSAgICAgZGlyLT51bnRyYWNrZWQtPmRpcl9pbnZhbGlkYXRlZCkpCisJCQl0aGVfaW5kZXguY2FjaGVfY2hhbmdlZCB8PSBVTlRSQUNLRURfQ0hBTkdFRDsKKwkJaWYgKGRpci0+dW50cmFja2VkICE9IHRoZV9pbmRleC51bnRyYWNrZWQpIHsKKwkJCWZyZWUoZGlyLT51bnRyYWNrZWQpOworCQkJZGlyLT51bnRyYWNrZWQgPSBOVUxMOworCQl9CisJfQorCXJldHVybiBkaXItPm5yOworfQorCitpbnQgZmlsZV9leGlzdHMoY29uc3QgY2hhciAqZikKK3sKKwlzdHJ1Y3Qgc3RhdCBzYjsKKwlyZXR1cm4gbHN0YXQoZiwgJnNiKSA9PSAwOworfQorCitzdGF0aWMgaW50IGNtcF9pY2FzZShjaGFyIGEsIGNoYXIgYikKK3sKKwlpZiAoYSA9PSBiKQorCQlyZXR1cm4gMDsKKwlpZiAoaWdub3JlX2Nhc2UpCisJCXJldHVybiB0b3VwcGVyKGEpIC0gdG91cHBlcihiKTsKKwlyZXR1cm4gYSAtIGI7Cit9CisKKy8qCisgKiBHaXZlbiB0d28gbm9ybWFsaXplZCBwYXRocyAoYSB0cmFpbGluZyBzbGFzaCBpcyBvayksIGlmIHN1YmRpciBpcworICogb3V0c2lkZSBkaXIsIHJldHVybiAtMS4gIE90aGVyd2lzZSByZXR1cm4gdGhlIG9mZnNldCBpbiBzdWJkaXIgdGhhdAorICogY2FuIGJlIHVzZWQgYXMgcmVsYXRpdmUgcGF0aCB0byBkaXIuCisgKi8KK2ludCBkaXJfaW5zaWRlX29mKGNvbnN0IGNoYXIgKnN1YmRpciwgY29uc3QgY2hhciAqZGlyKQoreworCWludCBvZmZzZXQgPSAwOworCisJYXNzZXJ0KGRpciAmJiBzdWJkaXIgJiYgKmRpciAmJiAqc3ViZGlyKTsKKworCXdoaWxlICgqZGlyICYmICpzdWJkaXIgJiYgIWNtcF9pY2FzZSgqZGlyLCAqc3ViZGlyKSkgeworCQlkaXIrKzsKKwkJc3ViZGlyKys7CisJCW9mZnNldCsrOworCX0KKworCS8qIGhlbFtwXS9tZSB2cyBoZWxbbF0veWVhaCAqLworCWlmICgqZGlyICYmICpzdWJkaXIpCisJCXJldHVybiAtMTsKKworCWlmICghKnN1YmRpcikKKwkJcmV0dXJuICEqZGlyID8gb2Zmc2V0IDogLTE7IC8qIHNhbWUgZGlyICovCisKKwkvKiBmb28vW2JdYXIgdnMgZm9vL1tdICovCisJaWYgKGlzX2Rpcl9zZXAoZGlyWy0xXSkpCisJCXJldHVybiBpc19kaXJfc2VwKHN1YmRpclstMV0pID8gb2Zmc2V0IDogLTE7CisKKwkvKiBmb29bL11iYXIgdnMgZm9vW10gKi8KKwlyZXR1cm4gaXNfZGlyX3NlcCgqc3ViZGlyKSA/IG9mZnNldCArIDEgOiAtMTsKK30KKworaW50IGlzX2luc2lkZV9kaXIoY29uc3QgY2hhciAqZGlyKQoreworCWNoYXIgKmN3ZDsKKwlpbnQgcmM7CisKKwlpZiAoIWRpcikKKwkJcmV0dXJuIDA7CisKKwljd2QgPSB4Z2V0Y3dkKCk7CisJcmMgPSAoZGlyX2luc2lkZV9vZihjd2QsIGRpcikgPj0gMCk7CisJZnJlZShjd2QpOworCXJldHVybiByYzsKK30KKworaW50IGlzX2VtcHR5X2Rpcihjb25zdCBjaGFyICpwYXRoKQoreworCURJUiAqZGlyID0gb3BlbmRpcihwYXRoKTsKKwlzdHJ1Y3QgZGlyZW50ICplOworCWludCByZXQgPSAxOworCisJaWYgKCFkaXIpCisJCXJldHVybiAwOworCisJd2hpbGUgKChlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKQorCQlpZiAoIWlzX2RvdF9vcl9kb3Rkb3QoZS0+ZF9uYW1lKSkgeworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwljbG9zZWRpcihkaXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2Rpcl9yZWN1cnNlKHN0cnVjdCBzdHJidWYgKnBhdGgsIGludCBmbGFnLCBpbnQgKmtlcHRfdXApCit7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZTsKKwlpbnQgcmV0ID0gMCwgb3JpZ2luYWxfbGVuID0gcGF0aC0+bGVuLCBsZW4sIGtlcHRfZG93biA9IDA7CisJaW50IG9ubHlfZW1wdHkgPSAoZmxhZyAmIFJFTU9WRV9ESVJfRU1QVFlfT05MWSk7CisJaW50IGtlZXBfdG9wbGV2ZWwgPSAoZmxhZyAmIFJFTU9WRV9ESVJfS0VFUF9UT1BMRVZFTCk7CisJdW5zaWduZWQgY2hhciBzdWJtb2R1bGVfaGVhZFsyMF07CisKKwlpZiAoKGZsYWcgJiBSRU1PVkVfRElSX0tFRVBfTkVTVEVEX0dJVCkgJiYKKwkgICAgIXJlc29sdmVfZ2l0bGlua19yZWYocGF0aC0+YnVmLCAiSEVBRCIsIHN1Ym1vZHVsZV9oZWFkKSkgeworCQkvKiBEbyBub3QgZGVzY2VuZCBhbmQgbnVrZSBhIG5lc3RlZCBnaXQgd29yayB0cmVlLiAqLworCQlpZiAoa2VwdF91cCkKKwkJCSprZXB0X3VwID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJZmxhZyAmPSB+UkVNT1ZFX0RJUl9LRUVQX1RPUExFVkVMOworCWRpciA9IG9wZW5kaXIocGF0aC0+YnVmKTsKKwlpZiAoIWRpcikgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIGtlZXBfdG9wbGV2ZWwgPyAtMSA6IDA7CisJCWVsc2UgaWYgKGVycm5vID09IEVBQ0NFUyAmJiAha2VlcF90b3BsZXZlbCkKKwkJCS8qCisJCQkgKiBBbiBlbXB0eSBkaXIgY291bGQgYmUgcmVtb3ZhYmxlIGV2ZW4gaWYgaXQKKwkJCSAqIGlzIHVucmVhZGFibGU6CisJCQkgKi8KKwkJCXJldHVybiBybWRpcihwYXRoLT5idWYpOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCXN0cmJ1Zl9jb21wbGV0ZShwYXRoLCAnLycpOworCisJbGVuID0gcGF0aC0+bGVuOworCXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgbGVuKTsKKwkJc3RyYnVmX2FkZHN0cihwYXRoLCBlLT5kX25hbWUpOworCQlpZiAobHN0YXQocGF0aC0+YnVmLCAmc3QpKSB7CisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCS8qCisJCQkJICogZmlsZSBkaXNhcHBlYXJlZCwgd2hpY2ggaXMgd2hhdCB3ZQorCQkJCSAqIHdhbnRlZCBhbnl3YXkKKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCS8qIGZhbGwgdGhydSAqLworCQl9IGVsc2UgaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCWlmICghcmVtb3ZlX2Rpcl9yZWN1cnNlKHBhdGgsIGZsYWcsICZrZXB0X2Rvd24pKQorCQkJCWNvbnRpbnVlOyAvKiBoYXBweSAqLworCQl9IGVsc2UgaWYgKCFvbmx5X2VtcHR5ICYmCisJCQkgICAoIXVubGluayhwYXRoLT5idWYpIHx8IGVycm5vID09IEVOT0VOVCkpIHsKKwkJCWNvbnRpbnVlOyAvKiBoYXBweSwgdG9vICovCisJCX0KKworCQkvKiBwYXRoIHRvbyBsb25nLCBzdGF0IGZhaWxzLCBvciBub24tZGlyZWN0b3J5IHN0aWxsIGV4aXN0cyAqLworCQlyZXQgPSAtMTsKKwkJYnJlYWs7CisJfQorCWNsb3NlZGlyKGRpcik7CisKKwlzdHJidWZfc2V0bGVuKHBhdGgsIG9yaWdpbmFsX2xlbik7CisJaWYgKCFyZXQgJiYgIWtlZXBfdG9wbGV2ZWwgJiYgIWtlcHRfZG93bikKKwkJcmV0ID0gKCFybWRpcihwYXRoLT5idWYpIHx8IGVycm5vID09IEVOT0VOVCkgPyAwIDogLTE7CisJZWxzZSBpZiAoa2VwdF91cCkKKwkJLyoKKwkJICogcmVwb3J0IHRoZSB1cGxldmVsIHRoYXQgaXQgaXMgbm90IGFuIGVycm9yIHRoYXQgd2UKKwkJICogZGlkIG5vdCBybWRpcigpIG91ciBkaXJlY3RvcnkuCisJCSAqLworCQkqa2VwdF91cCA9ICFyZXQ7CisJcmV0dXJuIHJldDsKK30KKworaW50IHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoc3RydWN0IHN0cmJ1ZiAqcGF0aCwgaW50IGZsYWcpCit7CisJcmV0dXJuIHJlbW92ZV9kaXJfcmVjdXJzZShwYXRoLCBmbGFnLCBOVUxMKTsKK30KKworc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfaW5mb19leGNsdWRlLCAiaW5mby9leGNsdWRlIikKKwordm9pZCBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKQoreworCWNvbnN0IGNoYXIgKnBhdGg7CisKKwlkaXItPmV4Y2x1ZGVfcGVyX2RpciA9ICIuZ2l0aWdub3JlIjsKKworCS8qIGNvcmUuZXhjbHVkZWZpbGUgZGVmYXVsdGluZyB0byAkWERHX0hPTUUvZ2l0L2lnbm9yZSAqLworCWlmICghZXhjbHVkZXNfZmlsZSkKKwkJZXhjbHVkZXNfZmlsZSA9IHhkZ19jb25maWdfaG9tZSgiaWdub3JlIik7CisJaWYgKGV4Y2x1ZGVzX2ZpbGUgJiYgIWFjY2Vzc19vcl93YXJuKGV4Y2x1ZGVzX2ZpbGUsIFJfT0ssIDApKQorCQlhZGRfZXhjbHVkZXNfZnJvbV9maWxlXzEoZGlyLCBleGNsdWRlc19maWxlLAorCQkJCQkgZGlyLT51bnRyYWNrZWQgPyAmZGlyLT5zc19leGNsdWRlc19maWxlIDogTlVMTCk7CisKKwkvKiBwZXIgcmVwb3NpdG9yeSB1c2VyIHByZWZlcmVuY2UgKi8KKwlwYXRoID0gZ2l0X3BhdGhfaW5mb19leGNsdWRlKCk7CisJaWYgKCFhY2Nlc3Nfb3Jfd2FybihwYXRoLCBSX09LLCAwKSkKKwkJYWRkX2V4Y2x1ZGVzX2Zyb21fZmlsZV8xKGRpciwgcGF0aCwKKwkJCQkJIGRpci0+dW50cmFja2VkID8gJmRpci0+c3NfaW5mb19leGNsdWRlIDogTlVMTCk7Cit9CisKK2ludCByZW1vdmVfcGF0aChjb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgKnNsYXNoOworCisJaWYgKHVubGluayhuYW1lKSAmJiBlcnJubyAhPSBFTk9FTlQgJiYgZXJybm8gIT0gRU5PVERJUikKKwkJcmV0dXJuIC0xOworCisJc2xhc2ggPSBzdHJyY2hyKG5hbWUsICcvJyk7CisJaWYgKHNsYXNoKSB7CisJCWNoYXIgKmRpcnMgPSB4c3RyZHVwKG5hbWUpOworCQlzbGFzaCA9IGRpcnMgKyAoc2xhc2ggLSBuYW1lKTsKKwkJZG8geworCQkJKnNsYXNoID0gJ1wwJzsKKwkJfSB3aGlsZSAocm1kaXIoZGlycykgPT0gMCAmJiAoc2xhc2ggPSBzdHJyY2hyKGRpcnMsICcvJykpKTsKKwkJZnJlZShkaXJzKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlcyBtZW1vcnkgd2l0aGluIGRpciB3aGljaCB3YXMgYWxsb2NhdGVkIGZvciBleGNsdWRlIGxpc3RzIGFuZAorICogdGhlIGV4Y2x1ZGVfc3RhY2suICBEb2VzIG5vdCBmcmVlIGRpciBpdHNlbGYuCisgKi8KK3ZvaWQgY2xlYXJfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIpCit7CisJaW50IGksIGo7CisJc3RydWN0IGV4Y2x1ZGVfbGlzdF9ncm91cCAqZ3JvdXA7CisJc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWw7CisJc3RydWN0IGV4Y2x1ZGVfc3RhY2sgKnN0azsKKworCWZvciAoaSA9IEVYQ19DTURMOyBpIDw9IEVYQ19GSUxFOyBpKyspIHsKKwkJZ3JvdXAgPSAmZGlyLT5leGNsdWRlX2xpc3RfZ3JvdXBbaV07CisJCWZvciAoaiA9IDA7IGogPCBncm91cC0+bnI7IGorKykgeworCQkJZWwgPSAmZ3JvdXAtPmVsW2pdOworCQkJaWYgKGkgPT0gRVhDX0RJUlMpCisJCQkJZnJlZSgoY2hhciAqKWVsLT5zcmMpOworCQkJY2xlYXJfZXhjbHVkZV9saXN0KGVsKTsKKwkJfQorCQlmcmVlKGdyb3VwLT5lbCk7CisJfQorCisJc3RrID0gZGlyLT5leGNsdWRlX3N0YWNrOworCXdoaWxlIChzdGspIHsKKwkJc3RydWN0IGV4Y2x1ZGVfc3RhY2sgKnByZXYgPSBzdGstPnByZXY7CisJCWZyZWUoc3RrKTsKKwkJc3RrID0gcHJldjsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmRpci0+YmFzZWJ1Zik7Cit9CisKK3N0cnVjdCBvbmRpc2tfdW50cmFja2VkX2NhY2hlIHsKKwlzdHJ1Y3Qgc3RhdF9kYXRhIGluZm9fZXhjbHVkZV9zdGF0OworCXN0cnVjdCBzdGF0X2RhdGEgZXhjbHVkZXNfZmlsZV9zdGF0OworCXVpbnQzMl90IGRpcl9mbGFnczsKKwl1bnNpZ25lZCBjaGFyIGluZm9fZXhjbHVkZV9zaGExWzIwXTsKKwl1bnNpZ25lZCBjaGFyIGV4Y2x1ZGVzX2ZpbGVfc2hhMVsyMF07CisJY2hhciBleGNsdWRlX3Blcl9kaXJbRkxFWF9BUlJBWV07Cit9OworCisjZGVmaW5lIG91Y19zaXplKGxlbikgKG9mZnNldG9mKHN0cnVjdCBvbmRpc2tfdW50cmFja2VkX2NhY2hlLCBleGNsdWRlX3Blcl9kaXIpICsgbGVuICsgMSkKKworc3RydWN0IHdyaXRlX2RhdGEgeworCWludCBpbmRleDsJICAgLyogbnVtYmVyIG9mIHdyaXR0ZW4gdW50cmFja2VkX2NhY2hlX2RpciAqLworCXN0cnVjdCBld2FoX2JpdG1hcCAqY2hlY2tfb25seTsgLyogZnJvbSB1bnRyYWNrZWRfY2FjaGVfZGlyICovCisJc3RydWN0IGV3YWhfYml0bWFwICp2YWxpZDsJLyogZnJvbSB1bnRyYWNrZWRfY2FjaGVfZGlyICovCisJc3RydWN0IGV3YWhfYml0bWFwICpzaGExX3ZhbGlkOyAvKiBzZXQgaWYgZXhjbHVkZV9zaGExIGlzIG5vdCBudWxsICovCisJc3RydWN0IHN0cmJ1ZiBvdXQ7CisJc3RydWN0IHN0cmJ1ZiBzYl9zdGF0OworCXN0cnVjdCBzdHJidWYgc2Jfc2hhMTsKK307CisKK3N0YXRpYyB2b2lkIHN0YXRfZGF0YV90b19kaXNrKHN0cnVjdCBzdGF0X2RhdGEgKnRvLCBjb25zdCBzdHJ1Y3Qgc3RhdF9kYXRhICpmcm9tKQoreworCXRvLT5zZF9jdGltZS5zZWMgID0gaHRvbmwoZnJvbS0+c2RfY3RpbWUuc2VjKTsKKwl0by0+c2RfY3RpbWUubnNlYyA9IGh0b25sKGZyb20tPnNkX2N0aW1lLm5zZWMpOworCXRvLT5zZF9tdGltZS5zZWMgID0gaHRvbmwoZnJvbS0+c2RfbXRpbWUuc2VjKTsKKwl0by0+c2RfbXRpbWUubnNlYyA9IGh0b25sKGZyb20tPnNkX210aW1lLm5zZWMpOworCXRvLT5zZF9kZXYJICA9IGh0b25sKGZyb20tPnNkX2Rldik7CisJdG8tPnNkX2lubwkgID0gaHRvbmwoZnJvbS0+c2RfaW5vKTsKKwl0by0+c2RfdWlkCSAgPSBodG9ubChmcm9tLT5zZF91aWQpOworCXRvLT5zZF9naWQJICA9IGh0b25sKGZyb20tPnNkX2dpZCk7CisJdG8tPnNkX3NpemUJICA9IGh0b25sKGZyb20tPnNkX3NpemUpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9vbmVfZGlyKHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1bnRyYWNrZWQsCisJCQkgIHN0cnVjdCB3cml0ZV9kYXRhICp3ZCkKK3sKKwlzdHJ1Y3Qgc3RhdF9kYXRhIHN0YXRfZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQgPSAmd2QtPm91dDsKKwl1bnNpZ25lZCBjaGFyIGludGJ1ZlsxNl07CisJdW5zaWduZWQgaW50IGludGxlbiwgdmFsdWU7CisJaW50IGkgPSB3ZC0+aW5kZXgrKzsKKworCS8qCisJICogdW50cmFja2VkX25yIHNob3VsZCBiZSByZXNldCB3aGVuZXZlciB2YWxpZCBpcyBjbGVhciwgYnV0CisJICogZm9yIHNhZmV0eS4uCisJICovCisJaWYgKCF1bnRyYWNrZWQtPnZhbGlkKSB7CisJCXVudHJhY2tlZC0+dW50cmFja2VkX25yID0gMDsKKwkJdW50cmFja2VkLT5jaGVja19vbmx5ID0gMDsKKwl9CisKKwlpZiAodW50cmFja2VkLT5jaGVja19vbmx5KQorCQlld2FoX3NldCh3ZC0+Y2hlY2tfb25seSwgaSk7CisJaWYgKHVudHJhY2tlZC0+dmFsaWQpIHsKKwkJZXdhaF9zZXQod2QtPnZhbGlkLCBpKTsKKwkJc3RhdF9kYXRhX3RvX2Rpc2soJnN0YXRfZGF0YSwgJnVudHJhY2tlZC0+c3RhdF9kYXRhKTsKKwkJc3RyYnVmX2FkZCgmd2QtPnNiX3N0YXQsICZzdGF0X2RhdGEsIHNpemVvZihzdGF0X2RhdGEpKTsKKwl9CisJaWYgKCFpc19udWxsX3NoYTEodW50cmFja2VkLT5leGNsdWRlX3NoYTEpKSB7CisJCWV3YWhfc2V0KHdkLT5zaGExX3ZhbGlkLCBpKTsKKwkJc3RyYnVmX2FkZCgmd2QtPnNiX3NoYTEsIHVudHJhY2tlZC0+ZXhjbHVkZV9zaGExLCAyMCk7CisJfQorCisJaW50bGVuID0gZW5jb2RlX3ZhcmludCh1bnRyYWNrZWQtPnVudHJhY2tlZF9uciwgaW50YnVmKTsKKwlzdHJidWZfYWRkKG91dCwgaW50YnVmLCBpbnRsZW4pOworCisJLyogc2tpcCBub24tcmVjdXJzZSBkaXJlY3RvcmllcyAqLworCWZvciAoaSA9IDAsIHZhbHVlID0gMDsgaSA8IHVudHJhY2tlZC0+ZGlyc19ucjsgaSsrKQorCQlpZiAodW50cmFja2VkLT5kaXJzW2ldLT5yZWN1cnNlKQorCQkJdmFsdWUrKzsKKwlpbnRsZW4gPSBlbmNvZGVfdmFyaW50KHZhbHVlLCBpbnRidWYpOworCXN0cmJ1Zl9hZGQob3V0LCBpbnRidWYsIGludGxlbik7CisKKwlzdHJidWZfYWRkKG91dCwgdW50cmFja2VkLT5uYW1lLCBzdHJsZW4odW50cmFja2VkLT5uYW1lKSArIDEpOworCisJZm9yIChpID0gMDsgaSA8IHVudHJhY2tlZC0+dW50cmFja2VkX25yOyBpKyspCisJCXN0cmJ1Zl9hZGQob3V0LCB1bnRyYWNrZWQtPnVudHJhY2tlZFtpXSwKKwkJCSAgIHN0cmxlbih1bnRyYWNrZWQtPnVudHJhY2tlZFtpXSkgKyAxKTsKKworCWZvciAoaSA9IDA7IGkgPCB1bnRyYWNrZWQtPmRpcnNfbnI7IGkrKykKKwkJaWYgKHVudHJhY2tlZC0+ZGlyc1tpXS0+cmVjdXJzZSkKKwkJCXdyaXRlX29uZV9kaXIodW50cmFja2VkLT5kaXJzW2ldLCB3ZCk7Cit9CisKK3ZvaWQgd3JpdGVfdW50cmFja2VkX2V4dGVuc2lvbihzdHJ1Y3Qgc3RyYnVmICpvdXQsIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnVudHJhY2tlZCkKK3sKKwlzdHJ1Y3Qgb25kaXNrX3VudHJhY2tlZF9jYWNoZSAqb3VjOworCXN0cnVjdCB3cml0ZV9kYXRhIHdkOworCXVuc2lnbmVkIGNoYXIgdmFyYnVmWzE2XTsKKwlpbnQgbGVuID0gMCwgdmFyaW50X2xlbjsKKwlpZiAodW50cmFja2VkLT5leGNsdWRlX3Blcl9kaXIpCisJCWxlbiA9IHN0cmxlbih1bnRyYWNrZWQtPmV4Y2x1ZGVfcGVyX2Rpcik7CisJb3VjID0geG1hbGxvYyhzaXplb2YoKm91YykgKyBsZW4gKyAxKTsKKwlzdGF0X2RhdGFfdG9fZGlzaygmb3VjLT5pbmZvX2V4Y2x1ZGVfc3RhdCwgJnVudHJhY2tlZC0+c3NfaW5mb19leGNsdWRlLnN0YXQpOworCXN0YXRfZGF0YV90b19kaXNrKCZvdWMtPmV4Y2x1ZGVzX2ZpbGVfc3RhdCwgJnVudHJhY2tlZC0+c3NfZXhjbHVkZXNfZmlsZS5zdGF0KTsKKwloYXNoY3B5KG91Yy0+aW5mb19leGNsdWRlX3NoYTEsIHVudHJhY2tlZC0+c3NfaW5mb19leGNsdWRlLnNoYTEpOworCWhhc2hjcHkob3VjLT5leGNsdWRlc19maWxlX3NoYTEsIHVudHJhY2tlZC0+c3NfZXhjbHVkZXNfZmlsZS5zaGExKTsKKwlvdWMtPmRpcl9mbGFncyA9IGh0b25sKHVudHJhY2tlZC0+ZGlyX2ZsYWdzKTsKKwltZW1jcHkob3VjLT5leGNsdWRlX3Blcl9kaXIsIHVudHJhY2tlZC0+ZXhjbHVkZV9wZXJfZGlyLCBsZW4gKyAxKTsKKworCXZhcmludF9sZW4gPSBlbmNvZGVfdmFyaW50KHVudHJhY2tlZC0+aWRlbnQubGVuLCB2YXJidWYpOworCXN0cmJ1Zl9hZGQob3V0LCB2YXJidWYsIHZhcmludF9sZW4pOworCXN0cmJ1Zl9hZGQob3V0LCB1bnRyYWNrZWQtPmlkZW50LmJ1ZiwgdW50cmFja2VkLT5pZGVudC5sZW4pOworCisJc3RyYnVmX2FkZChvdXQsIG91Yywgb3VjX3NpemUobGVuKSk7CisJZnJlZShvdWMpOworCW91YyA9IE5VTEw7CisKKwlpZiAoIXVudHJhY2tlZC0+cm9vdCkgeworCQl2YXJpbnRfbGVuID0gZW5jb2RlX3ZhcmludCgwLCB2YXJidWYpOworCQlzdHJidWZfYWRkKG91dCwgdmFyYnVmLCB2YXJpbnRfbGVuKTsKKwkJcmV0dXJuOworCX0KKworCXdkLmluZGV4ICAgICAgPSAwOworCXdkLmNoZWNrX29ubHkgPSBld2FoX25ldygpOworCXdkLnZhbGlkICAgICAgPSBld2FoX25ldygpOworCXdkLnNoYTFfdmFsaWQgPSBld2FoX25ldygpOworCXN0cmJ1Zl9pbml0KCZ3ZC5vdXQsIDEwMjQpOworCXN0cmJ1Zl9pbml0KCZ3ZC5zYl9zdGF0LCAxMDI0KTsKKwlzdHJidWZfaW5pdCgmd2Quc2Jfc2hhMSwgMTAyNCk7CisJd3JpdGVfb25lX2Rpcih1bnRyYWNrZWQtPnJvb3QsICZ3ZCk7CisKKwl2YXJpbnRfbGVuID0gZW5jb2RlX3ZhcmludCh3ZC5pbmRleCwgdmFyYnVmKTsKKwlzdHJidWZfYWRkKG91dCwgdmFyYnVmLCB2YXJpbnRfbGVuKTsKKwlzdHJidWZfYWRkYnVmKG91dCwgJndkLm91dCk7CisJZXdhaF9zZXJpYWxpemVfc3RyYnVmKHdkLnZhbGlkLCBvdXQpOworCWV3YWhfc2VyaWFsaXplX3N0cmJ1Zih3ZC5jaGVja19vbmx5LCBvdXQpOworCWV3YWhfc2VyaWFsaXplX3N0cmJ1Zih3ZC5zaGExX3ZhbGlkLCBvdXQpOworCXN0cmJ1Zl9hZGRidWYob3V0LCAmd2Quc2Jfc3RhdCk7CisJc3RyYnVmX2FkZGJ1ZihvdXQsICZ3ZC5zYl9zaGExKTsKKwlzdHJidWZfYWRkY2gob3V0LCAnXDAnKTsgLyogc2FmZSBndWFyZCBmb3Igc3RyaW5nIGxpc3RzICovCisKKwlld2FoX2ZyZWUod2QudmFsaWQpOworCWV3YWhfZnJlZSh3ZC5jaGVja19vbmx5KTsKKwlld2FoX2ZyZWUod2Quc2hhMV92YWxpZCk7CisJc3RyYnVmX3JlbGVhc2UoJndkLm91dCk7CisJc3RyYnVmX3JlbGVhc2UoJndkLnNiX3N0YXQpOworCXN0cmJ1Zl9yZWxlYXNlKCZ3ZC5zYl9zaGExKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV91bnRyYWNrZWQoc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVjZCkKK3sKKwlpbnQgaTsKKwlpZiAoIXVjZCkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCB1Y2QtPmRpcnNfbnI7IGkrKykKKwkJZnJlZV91bnRyYWNrZWQodWNkLT5kaXJzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgdWNkLT51bnRyYWNrZWRfbnI7IGkrKykKKwkJZnJlZSh1Y2QtPnVudHJhY2tlZFtpXSk7CisJZnJlZSh1Y2QtPnVudHJhY2tlZCk7CisJZnJlZSh1Y2QtPmRpcnMpOworCWZyZWUodWNkKTsKK30KKwordm9pZCBmcmVlX3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YykKK3sKKwlpZiAodWMpCisJCWZyZWVfdW50cmFja2VkKHVjLT5yb290KTsKKwlmcmVlKHVjKTsKK30KKworc3RydWN0IHJlYWRfZGF0YSB7CisJaW50IGluZGV4OworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICoqdWNkOworCXN0cnVjdCBld2FoX2JpdG1hcCAqY2hlY2tfb25seTsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnZhbGlkOworCXN0cnVjdCBld2FoX2JpdG1hcCAqc2hhMV92YWxpZDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZDsKK307CisKK3N0YXRpYyB2b2lkIHN0YXRfZGF0YV9mcm9tX2Rpc2soc3RydWN0IHN0YXRfZGF0YSAqdG8sIGNvbnN0IHN0cnVjdCBzdGF0X2RhdGEgKmZyb20pCit7CisJdG8tPnNkX2N0aW1lLnNlYyAgPSBnZXRfYmUzMigmZnJvbS0+c2RfY3RpbWUuc2VjKTsKKwl0by0+c2RfY3RpbWUubnNlYyA9IGdldF9iZTMyKCZmcm9tLT5zZF9jdGltZS5uc2VjKTsKKwl0by0+c2RfbXRpbWUuc2VjICA9IGdldF9iZTMyKCZmcm9tLT5zZF9tdGltZS5zZWMpOworCXRvLT5zZF9tdGltZS5uc2VjID0gZ2V0X2JlMzIoJmZyb20tPnNkX210aW1lLm5zZWMpOworCXRvLT5zZF9kZXYJICA9IGdldF9iZTMyKCZmcm9tLT5zZF9kZXYpOworCXRvLT5zZF9pbm8JICA9IGdldF9iZTMyKCZmcm9tLT5zZF9pbm8pOworCXRvLT5zZF91aWQJICA9IGdldF9iZTMyKCZmcm9tLT5zZF91aWQpOworCXRvLT5zZF9naWQJICA9IGdldF9iZTMyKCZmcm9tLT5zZF9naWQpOworCXRvLT5zZF9zaXplCSAgPSBnZXRfYmUzMigmZnJvbS0+c2Rfc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9vbmVfZGlyKHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICoqdW50cmFja2VkXywKKwkJCXN0cnVjdCByZWFkX2RhdGEgKnJkKQoreworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyIHVkLCAqdW50cmFja2VkOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHQsICpkYXRhID0gcmQtPmRhdGEsICplbmQgPSByZC0+ZW5kOworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwlpbnQgaSwgbGVuOworCisJbWVtc2V0KCZ1ZCwgMCwgc2l6ZW9mKHVkKSk7CisKKwluZXh0ID0gZGF0YTsKKwl2YWx1ZSA9IGRlY29kZV92YXJpbnQoJm5leHQpOworCWlmIChuZXh0ID4gZW5kKQorCQlyZXR1cm4gLTE7CisJdWQucmVjdXJzZQkgICA9IDE7CisJdWQudW50cmFja2VkX2FsbG9jID0gdmFsdWU7CisJdWQudW50cmFja2VkX25yCSAgID0gdmFsdWU7CisJaWYgKHVkLnVudHJhY2tlZF9ucikKKwkJdWQudW50cmFja2VkID0geG1hbGxvYyhzaXplb2YoKnVkLnVudHJhY2tlZCkgKiB1ZC51bnRyYWNrZWRfbnIpOworCWRhdGEgPSBuZXh0OworCisJbmV4dCA9IGRhdGE7CisJdWQuZGlyc19hbGxvYyA9IHVkLmRpcnNfbnIgPSBkZWNvZGVfdmFyaW50KCZuZXh0KTsKKwlpZiAobmV4dCA+IGVuZCkKKwkJcmV0dXJuIC0xOworCXVkLmRpcnMgPSB4bWFsbG9jKHNpemVvZigqdWQuZGlycykgKiB1ZC5kaXJzX25yKTsKKwlkYXRhID0gbmV4dDsKKworCWxlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKWRhdGEpOworCW5leHQgPSBkYXRhICsgbGVuICsgMTsKKwlpZiAobmV4dCA+IHJkLT5lbmQpCisJCXJldHVybiAtMTsKKwkqdW50cmFja2VkXyA9IHVudHJhY2tlZCA9IHhtYWxsb2Moc2l6ZW9mKCp1bnRyYWNrZWQpICsgbGVuKTsKKwltZW1jcHkodW50cmFja2VkLCAmdWQsIHNpemVvZih1ZCkpOworCW1lbWNweSh1bnRyYWNrZWQtPm5hbWUsIGRhdGEsIGxlbiArIDEpOworCWRhdGEgPSBuZXh0OworCisJZm9yIChpID0gMDsgaSA8IHVudHJhY2tlZC0+dW50cmFja2VkX25yOyBpKyspIHsKKwkJbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopZGF0YSk7CisJCW5leHQgPSBkYXRhICsgbGVuICsgMTsKKwkJaWYgKG5leHQgPiByZC0+ZW5kKQorCQkJcmV0dXJuIC0xOworCQl1bnRyYWNrZWQtPnVudHJhY2tlZFtpXSA9IHhzdHJkdXAoKGNvbnN0IGNoYXIqKWRhdGEpOworCQlkYXRhID0gbmV4dDsKKwl9CisKKwlyZC0+dWNkW3JkLT5pbmRleCsrXSA9IHVudHJhY2tlZDsKKwlyZC0+ZGF0YSA9IGRhdGE7CisKKwlmb3IgKGkgPSAwOyBpIDwgdW50cmFja2VkLT5kaXJzX25yOyBpKyspIHsKKwkJbGVuID0gcmVhZF9vbmVfZGlyKHVudHJhY2tlZC0+ZGlycyArIGksIHJkKTsKKwkJaWYgKGxlbiA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfY2hlY2tfb25seShzaXplX3QgcG9zLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgcmVhZF9kYXRhICpyZCA9IGNiOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1ZCA9IHJkLT51Y2RbcG9zXTsKKwl1ZC0+Y2hlY2tfb25seSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfc3RhdChzaXplX3QgcG9zLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgcmVhZF9kYXRhICpyZCA9IGNiOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1ZCA9IHJkLT51Y2RbcG9zXTsKKwlpZiAocmQtPmRhdGEgKyBzaXplb2Yoc3RydWN0IHN0YXRfZGF0YSkgPiByZC0+ZW5kKSB7CisJCXJkLT5kYXRhID0gcmQtPmVuZCArIDE7CisJCXJldHVybjsKKwl9CisJc3RhdF9kYXRhX2Zyb21fZGlzaygmdWQtPnN0YXRfZGF0YSwgKHN0cnVjdCBzdGF0X2RhdGEgKilyZC0+ZGF0YSk7CisJcmQtPmRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBzdGF0X2RhdGEpOworCXVkLT52YWxpZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfc2hhMShzaXplX3QgcG9zLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgcmVhZF9kYXRhICpyZCA9IGNiOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1ZCA9IHJkLT51Y2RbcG9zXTsKKwlpZiAocmQtPmRhdGEgKyAyMCA+IHJkLT5lbmQpIHsKKwkJcmQtPmRhdGEgPSByZC0+ZW5kICsgMTsKKwkJcmV0dXJuOworCX0KKwloYXNoY3B5KHVkLT5leGNsdWRlX3NoYTEsIHJkLT5kYXRhKTsKKwlyZC0+ZGF0YSArPSAyMDsKK30KKworc3RhdGljIHZvaWQgbG9hZF9zaGExX3N0YXQoc3RydWN0IHNoYTFfc3RhdCAqc2hhMV9zdGF0LAorCQkJICAgY29uc3Qgc3RydWN0IHN0YXRfZGF0YSAqc3RhdCwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RhdF9kYXRhX2Zyb21fZGlzaygmc2hhMV9zdGF0LT5zdGF0LCBzdGF0KTsKKwloYXNoY3B5KHNoYTFfc3RhdC0+c2hhMSwgc2hhMSk7CisJc2hhMV9zdGF0LT52YWxpZCA9IDE7Cit9CisKK3N0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnJlYWRfdW50cmFja2VkX2V4dGVuc2lvbihjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHN6KQoreworCWNvbnN0IHN0cnVjdCBvbmRpc2tfdW50cmFja2VkX2NhY2hlICpvdWM7CisJc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdWM7CisJc3RydWN0IHJlYWRfZGF0YSByZDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuZXh0ID0gZGF0YSwgKmVuZCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopZGF0YSArIHN6OworCWNvbnN0IGNoYXIgKmlkZW50OworCWludCBpZGVudF9sZW4sIGxlbjsKKworCWlmIChzeiA8PSAxIHx8IGVuZFstMV0gIT0gJ1wwJykKKwkJcmV0dXJuIE5VTEw7CisJZW5kLS07CisKKwlpZGVudF9sZW4gPSBkZWNvZGVfdmFyaW50KCZuZXh0KTsKKwlpZiAobmV4dCArIGlkZW50X2xlbiA+IGVuZCkKKwkJcmV0dXJuIE5VTEw7CisJaWRlbnQgPSAoY29uc3QgY2hhciAqKW5leHQ7CisJbmV4dCArPSBpZGVudF9sZW47CisKKwlvdWMgPSAoY29uc3Qgc3RydWN0IG9uZGlza191bnRyYWNrZWRfY2FjaGUgKiluZXh0OworCWlmIChuZXh0ICsgb3VjX3NpemUoMCkgPiBlbmQpCisJCXJldHVybiBOVUxMOworCisJdWMgPSB4Y2FsbG9jKDEsIHNpemVvZigqdWMpKTsKKwlzdHJidWZfaW5pdCgmdWMtPmlkZW50LCBpZGVudF9sZW4pOworCXN0cmJ1Zl9hZGQoJnVjLT5pZGVudCwgaWRlbnQsIGlkZW50X2xlbik7CisJbG9hZF9zaGExX3N0YXQoJnVjLT5zc19pbmZvX2V4Y2x1ZGUsICZvdWMtPmluZm9fZXhjbHVkZV9zdGF0LAorCQkgICAgICAgb3VjLT5pbmZvX2V4Y2x1ZGVfc2hhMSk7CisJbG9hZF9zaGExX3N0YXQoJnVjLT5zc19leGNsdWRlc19maWxlLCAmb3VjLT5leGNsdWRlc19maWxlX3N0YXQsCisJCSAgICAgICBvdWMtPmV4Y2x1ZGVzX2ZpbGVfc2hhMSk7CisJdWMtPmRpcl9mbGFncyA9IGdldF9iZTMyKCZvdWMtPmRpcl9mbGFncyk7CisJdWMtPmV4Y2x1ZGVfcGVyX2RpciA9IHhzdHJkdXAob3VjLT5leGNsdWRlX3Blcl9kaXIpOworCS8qIE5VTCBhZnRlciBleGNsdWRlX3Blcl9kaXIgaXMgY292ZXJlZCBieSBzaXplb2YoKm91YykgKi8KKwluZXh0ICs9IG91Y19zaXplKHN0cmxlbihvdWMtPmV4Y2x1ZGVfcGVyX2RpcikpOworCWlmIChuZXh0ID49IGVuZCkKKwkJZ290byBkb25lMjsKKworCWxlbiA9IGRlY29kZV92YXJpbnQoJm5leHQpOworCWlmIChuZXh0ID4gZW5kIHx8IGxlbiA9PSAwKQorCQlnb3RvIGRvbmUyOworCisJcmQudmFsaWQgICAgICA9IGV3YWhfbmV3KCk7CisJcmQuY2hlY2tfb25seSA9IGV3YWhfbmV3KCk7CisJcmQuc2hhMV92YWxpZCA9IGV3YWhfbmV3KCk7CisJcmQuZGF0YQkgICAgICA9IG5leHQ7CisJcmQuZW5kCSAgICAgID0gZW5kOworCXJkLmluZGV4ICAgICAgPSAwOworCXJkLnVjZCAgICAgICAgPSB4bWFsbG9jKHNpemVvZigqcmQudWNkKSAqIGxlbik7CisKKwlpZiAocmVhZF9vbmVfZGlyKCZ1Yy0+cm9vdCwgJnJkKSB8fCByZC5pbmRleCAhPSBsZW4pCisJCWdvdG8gZG9uZTsKKworCW5leHQgPSByZC5kYXRhOworCWxlbiA9IGV3YWhfcmVhZF9tbWFwKHJkLnZhbGlkLCBuZXh0LCBlbmQgLSBuZXh0KTsKKwlpZiAobGVuIDwgMCkKKwkJZ290byBkb25lOworCisJbmV4dCArPSBsZW47CisJbGVuID0gZXdhaF9yZWFkX21tYXAocmQuY2hlY2tfb25seSwgbmV4dCwgZW5kIC0gbmV4dCk7CisJaWYgKGxlbiA8IDApCisJCWdvdG8gZG9uZTsKKworCW5leHQgKz0gbGVuOworCWxlbiA9IGV3YWhfcmVhZF9tbWFwKHJkLnNoYTFfdmFsaWQsIG5leHQsIGVuZCAtIG5leHQpOworCWlmIChsZW4gPCAwKQorCQlnb3RvIGRvbmU7CisKKwlld2FoX2VhY2hfYml0KHJkLmNoZWNrX29ubHksIHNldF9jaGVja19vbmx5LCAmcmQpOworCXJkLmRhdGEgPSBuZXh0ICsgbGVuOworCWV3YWhfZWFjaF9iaXQocmQudmFsaWQsIHJlYWRfc3RhdCwgJnJkKTsKKwlld2FoX2VhY2hfYml0KHJkLnNoYTFfdmFsaWQsIHJlYWRfc2hhMSwgJnJkKTsKKwluZXh0ID0gcmQuZGF0YTsKKworZG9uZToKKwlmcmVlKHJkLnVjZCk7CisJZXdhaF9mcmVlKHJkLnZhbGlkKTsKKwlld2FoX2ZyZWUocmQuY2hlY2tfb25seSk7CisJZXdhaF9mcmVlKHJkLnNoYTFfdmFsaWQpOworZG9uZTI6CisJaWYgKG5leHQgIT0gZW5kKSB7CisJCWZyZWVfdW50cmFja2VkX2NhY2hlKHVjKTsKKwkJdWMgPSBOVUxMOworCX0KKwlyZXR1cm4gdWM7Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfb25lX2RpcmVjdG9yeShzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YywKKwkJCQkgICAgIHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICp1Y2QpCit7CisJdWMtPmRpcl9pbnZhbGlkYXRlZCsrOworCXVjZC0+dmFsaWQgPSAwOworCXVjZC0+dW50cmFja2VkX25yID0gMDsKK30KKworLyoKKyAqIE5vcm1hbGx5IHdoZW4gYW4gZW50cnkgaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIGEgZGlyZWN0b3J5LAorICogaW52YWxpZGF0aW5nIHRoYXQgZGlyZWN0b3J5IGlzIGVub3VnaC4gTm8gbmVlZCB0byB0b3VjaCBpdHMKKyAqIGFuY2VzdG9ycy4gV2hlbiBhIGRpcmVjdG9yeSBpcyBzaG93biBhcyAiZm9vL2Jhci8iIGluIGdpdC1zdGF0dXMKKyAqIGhvd2V2ZXIsIGRlbGV0aW5nIG9yIGFkZGluZyBhbiBlbnRyeSBtYXkgaGF2ZSBjYXNjYWRpbmcgZWZmZWN0LgorICoKKyAqIFNheSB0aGUgImZvby9iYXIvZmlsZSIgaGFzIGJlY29tZSB1bnRyYWNrZWQsIHdlIG5lZWQgdG8gdGVsbCB0aGUKKyAqIHVudHJhY2tlZF9jYWNoZV9kaXIgb2YgImZvbyIgdGhhdCAiYmFyLyIgaXMgbm90IGFuIHVudHJhY2tlZAorICogZGlyZWN0b3J5IGFueSBtb3JlIChiZWNhdXNlICJiYXIiIGlzIG1hbmFnZWQgYnkgZm9vIGFzIGFuIHVudHJhY2tlZAorICogImZpbGUiKS4KKyAqCisgKiBTaW1pbGFybHksIGlmICJmb28vYmFyL2ZpbGUiIG1vdmVzIGZyb20gdW50cmFja2VkIHRvIHRyYWNrZWQgYW5kIGl0CisgKiB3YXMgdGhlIGxhc3QgdW50cmFja2VkIGVudHJ5IGluIHRoZSBlbnRpcmUgImZvbyIsIHdlIHNob3VsZCBzaG93CisgKiAiZm9vLyIgaW5zdGVhZC4gV2hpY2ggbWVhbnMgd2UgaGF2ZSB0byBpbnZhbGlkYXRlIHBhc3QgImJhciIgdXAgdG8KKyAqICJmb28iLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIGFsbCBkaXJlY3RvcmllcyBmcm9tIHJvb3QgdG8gbGVhZi4gSWYgdGhlcmUKKyAqIGlzIGEgY2hhbmNlIG9mIG9uZSBvZiB0aGUgYWJvdmUgY2FzZXMgaGFwcGVuaW5nLCB3ZSBpbnZhbGlkYXRlIGJhY2sKKyAqIHRvIHJvb3QuIE90aGVyd2lzZSB3ZSBqdXN0IGludmFsaWRhdGUgdGhlIGxlYWYuIFRoZXJlIG1heSBiZSBhIG1vcmUKKyAqIHNvcGhpc3RpY2F0ZWQgd2F5IHRoYW4gY2hlY2tpbmcgZm9yIFNIT1dfT1RIRVJfRElSRUNUT1JJRVMgdG8KKyAqIGRldGVjdCB0aGVzZSBjYXNlcyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgaW52YWxpZGF0aW9uLCBmb3IgZXhhbXBsZSwKKyAqIGNoZWNraW5nIGZvciB0aGUgdW50cmFja2VkIGVudHJ5IG5hbWVkICJiYXIvIiBpbiAiZm9vIiwgYnV0IGZvciBub3cKKyAqIHN0aWNrIHRvIHNvbWV0aGluZyBzYWZlIGFuZCBzaW1wbGUuCisgKi8KK3N0YXRpYyBpbnQgaW52YWxpZGF0ZV9vbmVfY29tcG9uZW50KHN0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnVjLAorCQkJCSAgICBzdHJ1Y3QgdW50cmFja2VkX2NhY2hlX2RpciAqZGlyLAorCQkJCSAgICBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuKQoreworCWNvbnN0IGNoYXIgKnJlc3QgPSBzdHJjaHIocGF0aCwgJy8nKTsKKworCWlmIChyZXN0KSB7CisJCWludCBjb21wb25lbnRfbGVuID0gcmVzdCAtIHBhdGg7CisJCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpkID0KKwkJCWxvb2t1cF91bnRyYWNrZWQodWMsIGRpciwgcGF0aCwgY29tcG9uZW50X2xlbik7CisJCWludCByZXQgPQorCQkJaW52YWxpZGF0ZV9vbmVfY29tcG9uZW50KHVjLCBkLCByZXN0ICsgMSwKKwkJCQkJCSBsZW4gLSAoY29tcG9uZW50X2xlbiArIDEpKTsKKwkJaWYgKHJldCkKKwkJCWludmFsaWRhdGVfb25lX2RpcmVjdG9yeSh1YywgZGlyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpbnZhbGlkYXRlX29uZV9kaXJlY3RvcnkodWMsIGRpcik7CisJcmV0dXJuIHVjLT5kaXJfZmxhZ3MgJiBESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUzsKK30KKwordm9pZCB1bnRyYWNrZWRfY2FjaGVfaW52YWxpZGF0ZV9wYXRoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoIWlzdGF0ZS0+dW50cmFja2VkIHx8ICFpc3RhdGUtPnVudHJhY2tlZC0+cm9vdCkKKwkJcmV0dXJuOworCWludmFsaWRhdGVfb25lX2NvbXBvbmVudChpc3RhdGUtPnVudHJhY2tlZCwgaXN0YXRlLT51bnRyYWNrZWQtPnJvb3QsCisJCQkJIHBhdGgsIHN0cmxlbihwYXRoKSk7Cit9CisKK3ZvaWQgdW50cmFja2VkX2NhY2hlX3JlbW92ZV9mcm9tX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpwYXRoKQoreworCXVudHJhY2tlZF9jYWNoZV9pbnZhbGlkYXRlX3BhdGgoaXN0YXRlLCBwYXRoKTsKK30KKwordm9pZCB1bnRyYWNrZWRfY2FjaGVfYWRkX3RvX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwl1bnRyYWNrZWRfY2FjaGVfaW52YWxpZGF0ZV9wYXRoKGlzdGF0ZSwgcGF0aCk7Cit9CmRpZmYgLS1naXQgYS9kaXIuaCBiL2Rpci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNTg1NWQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXIuaApAQCAtMCwwICsxLDMxMSBAQAorI2lmbmRlZiBESVJfSAorI2RlZmluZSBESVJfSAorCisvKiBTZWUgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvYXBpLWRpcmVjdG9yeS1saXN0aW5nLnR4dCAqLworCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK3N0cnVjdCBkaXJfZW50cnkgeworCXVuc2lnbmVkIGludCBsZW47CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCisjZGVmaW5lIEVYQ19GTEFHX05PRElSIDEKKyNkZWZpbmUgRVhDX0ZMQUdfRU5EU1dJVEggNAorI2RlZmluZSBFWENfRkxBR19NVVNUQkVESVIgOAorI2RlZmluZSBFWENfRkxBR19ORUdBVElWRSAxNgorCitzdHJ1Y3QgZXhjbHVkZSB7CisJLyoKKwkgKiBUaGlzIGFsbG93cyBjYWxsZXJzIG9mIGxhc3RfZXhjbHVkZV9tYXRjaGluZygpIGV0Yy4KKwkgKiB0byBkZXRlcm1pbmUgdGhlIG9yaWdpbiBvZiB0aGUgbWF0Y2hpbmcgcGF0dGVybi4KKwkgKi8KKwlzdHJ1Y3QgZXhjbHVkZV9saXN0ICplbDsKKworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJaW50IHBhdHRlcm5sZW47CisJaW50IG5vd2lsZGNhcmRsZW47CisJY29uc3QgY2hhciAqYmFzZTsKKwlpbnQgYmFzZWxlbjsKKwlpbnQgZmxhZ3M7CisKKwkvKgorCSAqIENvdW50aW5nIHN0YXJ0cyBmcm9tIDEgZm9yIGxpbmUgbnVtYmVycyBpbiBpZ25vcmUgZmlsZXMsCisJICogYW5kIGZyb20gLTEgZGVjcmVtZW50aW5nIGZvciBwYXR0ZXJucyBmcm9tIENMSSBhcmdzLgorCSAqLworCWludCBzcmNwb3M7Cit9OworCisvKgorICogRWFjaCBleGNsdWRlcyBmaWxlIHdpbGwgYmUgcGFyc2VkIGludG8gYSBmcmVzaCBleGNsdWRlX2xpc3Qgd2hpY2gKKyAqIGlzIGFwcGVuZGVkIHRvIHRoZSByZWxldmFudCBleGNsdWRlX2xpc3RfZ3JvdXAgKGVpdGhlciBFWENfRElSUyBvcgorICogRVhDX0ZJTEUpLiAgQW4gZXhjbHVkZV9saXN0IHdpdGhpbiB0aGUgRVhDX0NNREwgZXhjbHVkZV9saXN0X2dyb3VwCisgKiBjYW4gYWxzbyBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgbGlzdCBvZiAtLWV4Y2x1ZGUgdmFsdWVzIHBhc3NlZAorICogdmlhIENMSSBhcmdzLgorICovCitzdHJ1Y3QgZXhjbHVkZV9saXN0IHsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworCisJLyogcmVtZW1iZXIgcG9pbnRlciB0byBleGNsdWRlIGZpbGUgY29udGVudHMgc28gd2UgY2FuIGZyZWUoKSAqLworCWNoYXIgKmZpbGVidWY7CisKKwkvKiBvcmlnaW4gb2YgbGlzdCwgZS5nLiBwYXRoIHRvIGZpbGVuYW1lLCBvciBkZXNjcmlwdGl2ZSBzdHJpbmcgKi8KKwljb25zdCBjaGFyICpzcmM7CisKKwlzdHJ1Y3QgZXhjbHVkZSAqKmV4Y2x1ZGVzOworfTsKKworLyoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGUgcGVyLWRpcmVjdG9yeSBleGNsdWRlIGZpbGVzIGFyZSBsYXppbHkgcmVhZCBvbgorICogZGVtYW5kIGFuZCB0aGVuIGNhY2hlZCBpbiBtZW1vcnksIG9uZSBwZXIgZXhjbHVkZV9zdGFjayBzdHJ1Y3QsIGluCisgKiBvcmRlciB0byBhdm9pZCBvcGVuaW5nIGFuZCBwYXJzaW5nIGVhY2ggb25lIGV2ZXJ5IHRpbWUgdGhhdAorICogZGlyZWN0b3J5IGlzIHRyYXZlcnNlZC4KKyAqLworc3RydWN0IGV4Y2x1ZGVfc3RhY2sgeworCXN0cnVjdCBleGNsdWRlX3N0YWNrICpwcmV2OyAvKiB0aGUgc3RydWN0IGV4Y2x1ZGVfc3RhY2sgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5ICovCisJaW50IGJhc2VsZW47CisJaW50IGV4Y2x1ZGVfaXg7IC8qIGluZGV4IG9mIGV4Y2x1ZGVfbGlzdCB3aXRoaW4gRVhDX0RJUlMgZXhjbHVkZV9saXN0X2dyb3VwICovCisJc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVjZDsKK307CisKK3N0cnVjdCBleGNsdWRlX2xpc3RfZ3JvdXAgeworCWludCBuciwgYWxsb2M7CisJc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWw7Cit9OworCitzdHJ1Y3Qgc2hhMV9zdGF0IHsKKwlzdHJ1Y3Qgc3RhdF9kYXRhIHN0YXQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgdmFsaWQ7Cit9OworCisvKgorICogIFVudHJhY2tlZCBjYWNoZQorICoKKyAqICBUaGUgZm9sbG93aW5nIGlucHV0cyBhcmUgc3VmZmljaWVudCB0byBkZXRlcm1pbmUgd2hhdCBmaWxlcyBpbiBhCisgKiAgZGlyZWN0b3J5IGFyZSBleGNsdWRlZDoKKyAqCisgKiAgIC0gVGhlIGxpc3Qgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIG9mIHRoZSBkaXJlY3RvcnkgaW4gcXVlc3Rpb24KKyAqICAgLSBUaGUgJEdJVF9ESVIvaW5kZXgKKyAqICAgLSBkaXJfc3RydWN0IGZsYWdzCisgKiAgIC0gVGhlIGNvbnRlbnQgb2YgJEdJVF9ESVIvaW5mby9leGNsdWRlCisgKiAgIC0gVGhlIGNvbnRlbnQgb2YgY29yZS5leGNsdWRlc2ZpbGUKKyAqICAgLSBUaGUgY29udGVudCAob3IgdGhlIGxhY2spIG9mIC5naXRpZ25vcmUgb2YgYWxsIHBhcmVudCBkaXJlY3RvcmllcworICogICAgIGZyb20gJEdJVF9XT1JLX1RSRUUKKyAqICAgLSBUaGUgY2hlY2tfb25seSBmbGFnIGluIHJlYWRfZGlyZWN0b3J5X3JlY3Vyc2l2ZSAoZm9yCisgKiAgICAgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVMpCisgKgorICogIFRoZSBmaXJzdCBpbnB1dCBjYW4gYmUgY2hlY2tlZCB1c2luZyBkaXJlY3RvcnkgbXRpbWUuIEluIG1hbnkKKyAqICBmaWxlc3lzdGVtcywgZGlyZWN0b3J5IG10aW1lIChzdGF0X2RhdGEgZmllbGQpIGlzIHVwZGF0ZWQgd2hlbiBpdHMKKyAqICBmaWxlcyBvciBkaXJlY3Qgc3ViZGlycyBhcmUgYWRkZWQgb3IgcmVtb3ZlZC4KKyAqCisgKiAgVGhlIHNlY29uZCBvbmUgY2FuIGJlIGhvb2tlZCBmcm9tIGNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKCkuCisgKiAgV2hlbmV2ZXIgYSBmaWxlIChvciBhIHN1Ym1vZHVsZSkgaXMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIGEKKyAqICBkaXJlY3RvcnksIHdlIGludmFsaWRhdGUgdGhhdCBkaXJlY3RvcnkuCisgKgorICogIFRoZSByZW1haW5pbmcgaW5wdXRzIGFyZSBlYXN5LCB0aGVpciBTSEEtMSBjb3VsZCBiZSB1c2VkIHRvIHZlcmlmeQorICogIHRoZWlyIGNvbnRlbnRzIChleGNsdWRlX3NoYTFbXSwgaW5mb19leGNsdWRlX3NoYTFbXSBhbmQKKyAqICBleGNsdWRlc19maWxlX3NoYTFbXSkKKyAqLworc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgeworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICoqZGlyczsKKwljaGFyICoqdW50cmFja2VkOworCXN0cnVjdCBzdGF0X2RhdGEgc3RhdF9kYXRhOworCXVuc2lnbmVkIGludCB1bnRyYWNrZWRfYWxsb2MsIGRpcnNfbnIsIGRpcnNfYWxsb2M7CisJdW5zaWduZWQgaW50IHVudHJhY2tlZF9ucjsKKwl1bnNpZ25lZCBpbnQgY2hlY2tfb25seSA6IDE7CisJLyogYWxsIGRhdGEgZXhjZXB0ICdkaXJzJyBpbiB0aGlzIHN0cnVjdCBhcmUgZ29vZCAqLworCXVuc2lnbmVkIGludCB2YWxpZCA6IDE7CisJdW5zaWduZWQgaW50IHJlY3Vyc2UgOiAxOworCS8qIG51bGwgU0hBLTEgbWVhbnMgdGhpcyBkaXJlY3RvcnkgZG9lcyBub3QgaGF2ZSAuZ2l0aWdub3JlICovCisJdW5zaWduZWQgY2hhciBleGNsdWRlX3NoYTFbMjBdOworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsKK307CisKK3N0cnVjdCB1bnRyYWNrZWRfY2FjaGUgeworCXN0cnVjdCBzaGExX3N0YXQgc3NfaW5mb19leGNsdWRlOworCXN0cnVjdCBzaGExX3N0YXQgc3NfZXhjbHVkZXNfZmlsZTsKKwljb25zdCBjaGFyICpleGNsdWRlX3Blcl9kaXI7CisJc3RydWN0IHN0cmJ1ZiBpZGVudDsKKwkvKgorCSAqIGRpcl9zdHJ1Y3QjZmxhZ3MgbXVzdCBtYXRjaCBkaXJfZmxhZ3Mgb3IgdGhlIHVudHJhY2tlZAorCSAqIGNhY2hlIGlzIGlnbm9yZWQuCisJICovCisJdW5zaWduZWQgZGlyX2ZsYWdzOworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpyb290OworCS8qIFN0YXRpc3RpY3MgKi8KKwlpbnQgZGlyX2NyZWF0ZWQ7CisJaW50IGdpdGlnbm9yZV9pbnZhbGlkYXRlZDsKKwlpbnQgZGlyX2ludmFsaWRhdGVkOworCWludCBkaXJfb3BlbmVkOworfTsKKworc3RydWN0IGRpcl9zdHJ1Y3QgeworCWludCBuciwgYWxsb2M7CisJaW50IGlnbm9yZWRfbnIsIGlnbm9yZWRfYWxsb2M7CisJZW51bSB7CisJCURJUl9TSE9XX0lHTk9SRUQgPSAxPDwwLAorCQlESVJfU0hPV19PVEhFUl9ESVJFQ1RPUklFUyA9IDE8PDEsCisJCURJUl9ISURFX0VNUFRZX0RJUkVDVE9SSUVTID0gMTw8MiwKKwkJRElSX05PX0dJVExJTktTID0gMTw8MywKKwkJRElSX0NPTExFQ1RfSUdOT1JFRCA9IDE8PDQsCisJCURJUl9TSE9XX0lHTk9SRURfVE9PID0gMTw8NSwKKwkJRElSX0NPTExFQ1RfS0lMTEVEX09OTFkgPSAxPDw2CisJfSBmbGFnczsKKwlzdHJ1Y3QgZGlyX2VudHJ5ICoqZW50cmllczsKKwlzdHJ1Y3QgZGlyX2VudHJ5ICoqaWdub3JlZDsKKworCS8qIEV4Y2x1ZGUgaW5mbyAqLworCWNvbnN0IGNoYXIgKmV4Y2x1ZGVfcGVyX2RpcjsKKworCS8qCisJICogV2UgbWFpbnRhaW4gdGhyZWUgZ3JvdXBzIG9mIGV4Y2x1ZGUgcGF0dGVybiBsaXN0czoKKwkgKgorCSAqIEVYQ19DTURMIGxpc3RzIHBhdHRlcm5zIGV4cGxpY2l0bHkgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4KKwkgKiBFWENfRElSUyBsaXN0cyBwYXR0ZXJucyBvYnRhaW5lZCBmcm9tIHBlci1kaXJlY3RvcnkgaWdub3JlIGZpbGVzLgorCSAqIEVYQ19GSUxFIGxpc3RzIHBhdHRlcm5zIGZyb20gZmFsbGJhY2sgaWdub3JlIGZpbGVzLCBlLmcuCisJICogICAtIC5naXQvaW5mby9leGNsdWRlCisJICogICAtIGNvcmUuZXhjbHVkZXNmaWxlCisJICoKKwkgKiBFYWNoIGdyb3VwIGNvbnRhaW5zIG11bHRpcGxlIGV4Y2x1ZGUgbGlzdHMsIGEgc2luZ2xlIGxpc3QKKwkgKiBwZXIgc291cmNlLgorCSAqLworI2RlZmluZSBFWENfQ01ETCAwCisjZGVmaW5lIEVYQ19ESVJTIDEKKyNkZWZpbmUgRVhDX0ZJTEUgMgorCXN0cnVjdCBleGNsdWRlX2xpc3RfZ3JvdXAgZXhjbHVkZV9saXN0X2dyb3VwWzNdOworCisJLyoKKwkgKiBUZW1wb3JhcnkgdmFyaWFibGVzIHdoaWNoIGFyZSB1c2VkIGR1cmluZyBsb2FkaW5nIG9mIHRoZQorCSAqIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBsaXN0cy4KKwkgKgorCSAqIGV4Y2x1ZGVfc3RhY2sgcG9pbnRzIHRvIHRoZSB0b3Agb2YgdGhlIGV4Y2x1ZGVfc3RhY2ssIGFuZAorCSAqIGJhc2VidWYgY29udGFpbnMgdGhlIGZ1bGwgcGF0aCB0byB0aGUgY3VycmVudAorCSAqIChzdWIpZGlyZWN0b3J5IGluIHRoZSB0cmF2ZXJzYWwuIEV4Y2x1ZGUgcG9pbnRzIHRvIHRoZQorCSAqIG1hdGNoaW5nIGV4Y2x1ZGUgc3RydWN0IGlmIHRoZSBkaXJlY3RvcnkgaXMgZXhjbHVkZWQuCisJICovCisJc3RydWN0IGV4Y2x1ZGVfc3RhY2sgKmV4Y2x1ZGVfc3RhY2s7CisJc3RydWN0IGV4Y2x1ZGUgKmV4Y2x1ZGU7CisJc3RydWN0IHN0cmJ1ZiBiYXNlYnVmOworCisJLyogRW5hYmxlIHVudHJhY2tlZCBmaWxlIGNhY2hlIGlmIHNldCAqLworCXN0cnVjdCB1bnRyYWNrZWRfY2FjaGUgKnVudHJhY2tlZDsKKwlzdHJ1Y3Qgc2hhMV9zdGF0IHNzX2luZm9fZXhjbHVkZTsKKwlzdHJ1Y3Qgc2hhMV9zdGF0IHNzX2V4Y2x1ZGVzX2ZpbGU7CisJdW5zaWduZWQgdW5tYW5hZ2VkX2V4Y2x1ZGVfZmlsZXM7Cit9OworCisvKgorICogVGhlIG9yZGVyaW5nIG9mIHRoZXNlIGNvbnN0YW50cyBpcyBzaWduaWZpY2FudCwgd2l0aAorICogaGlnaGVyLW51bWJlcmVkIG1hdGNoIHR5cGVzIHNpZ25pZnlpbmcgImNsb3NlciIgKGkuZS4gbW9yZQorICogc3BlY2lmaWMpIG1hdGNoZXMgd2hpY2ggd2lsbCBvdmVycmlkZSBsb3dlci1udW1iZXJlZCBtYXRjaCB0eXBlcworICogd2hlbiBwb3B1bGF0aW5nIHRoZSBzZWVuW10gYXJyYXkuCisgKi8KKyNkZWZpbmUgTUFUQ0hFRF9SRUNVUlNJVkVMWSAxCisjZGVmaW5lIE1BVENIRURfRk5NQVRDSCAyCisjZGVmaW5lIE1BVENIRURfRVhBQ1RMWSAzCitleHRlcm4gaW50IHNpbXBsZV9sZW5ndGgoY29uc3QgY2hhciAqbWF0Y2gpOworZXh0ZXJuIGludCBub193aWxkY2FyZChjb25zdCBjaGFyICpzdHJpbmcpOworZXh0ZXJuIGNoYXIgKmNvbW1vbl9wcmVmaXgoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYyk7CitleHRlcm4gaW50IG1hdGNoX3BhdGhzcGVjKGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJICBpbnQgcHJlZml4LCBjaGFyICpzZWVuLCBpbnQgaXNfZGlyKTsKK2V4dGVybiBpbnQgcmVwb3J0X3BhdGhfZXJyb3IoY29uc3QgY2hhciAqcHNfbWF0Y2hlZCwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgd2l0aGluX2RlcHRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgZGVwdGgsIGludCBtYXhfZGVwdGgpOworCitleHRlcm4gaW50IGZpbGxfZGlyZWN0b3J5KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpOworZXh0ZXJuIGludCByZWFkX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbGVuLCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKTsKKworZXh0ZXJuIGludCBpc19leGNsdWRlZF9mcm9tX2xpc3QoY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBwYXRobGVuLCBjb25zdCBjaGFyICpiYXNlbmFtZSwKKwkJCQkgaW50ICpkdHlwZSwgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWwpOworc3RydWN0IGRpcl9lbnRyeSAqZGlyX2FkZF9pZ25vcmVkKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgbGVuKTsKKworLyoKKyAqIHRoZXNlIGltcGxlbWVudCB0aGUgbWF0Y2hpbmcgbG9naWMgZm9yIGRpci5jOmV4Y2x1ZGVkX2Zyb21fbGlzdCBhbmQKKyAqIGF0dHIuYzpwYXRoX21hdGNoZXMoKQorICovCitleHRlcm4gaW50IG1hdGNoX2Jhc2VuYW1lKGNvbnN0IGNoYXIgKiwgaW50LAorCQkJICBjb25zdCBjaGFyICosIGludCwgaW50LCBpbnQpOworZXh0ZXJuIGludCBtYXRjaF9wYXRobmFtZShjb25zdCBjaGFyICosIGludCwKKwkJCSAgY29uc3QgY2hhciAqLCBpbnQsCisJCQkgIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGludCk7CisKK2V4dGVybiBzdHJ1Y3QgZXhjbHVkZSAqbGFzdF9leGNsdWRlX21hdGNoaW5nKHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgaW50ICpkdHlwZSk7CisKK2V4dGVybiBpbnQgaXNfZXhjbHVkZWQoc3RydWN0IGRpcl9zdHJ1Y3QgKmRpciwgY29uc3QgY2hhciAqbmFtZSwgaW50ICpkdHlwZSk7CisKK2V4dGVybiBzdHJ1Y3QgZXhjbHVkZV9saXN0ICphZGRfZXhjbHVkZV9saXN0KHN0cnVjdCBkaXJfc3RydWN0ICpkaXIsCisJCQkJCSAgICAgaW50IGdyb3VwX3R5cGUsIGNvbnN0IGNoYXIgKnNyYyk7CitleHRlcm4gaW50IGFkZF9leGNsdWRlc19mcm9tX2ZpbGVfdG9fbGlzdChjb25zdCBjaGFyICpmbmFtZSwgY29uc3QgY2hhciAqYmFzZSwgaW50IGJhc2VsZW4sCisJCQkJCSAgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWwsIGludCBjaGVja19pbmRleCk7CitleHRlcm4gdm9pZCBhZGRfZXhjbHVkZXNfZnJvbV9maWxlKHN0cnVjdCBkaXJfc3RydWN0ICosIGNvbnN0IGNoYXIgKmZuYW1lKTsKK2V4dGVybiB2b2lkIHBhcnNlX2V4Y2x1ZGVfcGF0dGVybihjb25zdCBjaGFyICoqc3RyaW5nLCBpbnQgKnBhdHRlcm5sZW4sIGludCAqZmxhZ3MsIGludCAqbm93aWxkY2FyZGxlbik7CitleHRlcm4gdm9pZCBhZGRfZXhjbHVkZShjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmJhc2UsCisJCQlpbnQgYmFzZWxlbiwgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWwsIGludCBzcmNwb3MpOworZXh0ZXJuIHZvaWQgY2xlYXJfZXhjbHVkZV9saXN0KHN0cnVjdCBleGNsdWRlX2xpc3QgKmVsKTsKK2V4dGVybiB2b2lkIGNsZWFyX2RpcmVjdG9yeShzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKTsKK2V4dGVybiBpbnQgZmlsZV9leGlzdHMoY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIGludCBpc19pbnNpZGVfZGlyKGNvbnN0IGNoYXIgKmRpcik7CitleHRlcm4gaW50IGRpcl9pbnNpZGVfb2YoY29uc3QgY2hhciAqc3ViZGlyLCBjb25zdCBjaGFyICpkaXIpOworCitzdGF0aWMgaW5saW5lIGludCBpc19kb3Rfb3JfZG90ZG90KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIChuYW1lWzBdID09ICcuJyAmJgorCQkobmFtZVsxXSA9PSAnXDAnIHx8CisJCSAobmFtZVsxXSA9PSAnLicgJiYgbmFtZVsyXSA9PSAnXDAnKSkpOworfQorCitleHRlcm4gaW50IGlzX2VtcHR5X2Rpcihjb25zdCBjaGFyICpkaXIpOworCitleHRlcm4gdm9pZCBzZXR1cF9zdGFuZGFyZF9leGNsdWRlcyhzdHJ1Y3QgZGlyX3N0cnVjdCAqZGlyKTsKKworI2RlZmluZSBSRU1PVkVfRElSX0VNUFRZX09OTFkgMDEKKyNkZWZpbmUgUkVNT1ZFX0RJUl9LRUVQX05FU1RFRF9HSVQgMDIKKyNkZWZpbmUgUkVNT1ZFX0RJUl9LRUVQX1RPUExFVkVMIDA0CitleHRlcm4gaW50IHJlbW92ZV9kaXJfcmVjdXJzaXZlbHkoc3RydWN0IHN0cmJ1ZiAqcGF0aCwgaW50IGZsYWcpOworCisvKiB0cmllcyB0byByZW1vdmUgdGhlIHBhdGggd2l0aCBlbXB0eSBkaXJlY3RvcmllcyBhbG9uZyBpdCwgaWdub3JlcyBFTk9FTlQgKi8KK2V4dGVybiBpbnQgcmVtb3ZlX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CisKK2V4dGVybiBpbnQgc3RyY21wX2ljYXNlKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpOworZXh0ZXJuIGludCBzdHJuY21wX2ljYXNlKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIsIHNpemVfdCBjb3VudCk7CitleHRlcm4gaW50IGZubWF0Y2hfaWNhc2UoY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpOworCisvKgorICogVGhlIHByZWZpeCBwYXJ0IG9mIHBhdHRlcm4gbXVzdCBub3QgY29udGFpbnMgd2lsZGNhcmRzLgorICovCitzdHJ1Y3QgcGF0aHNwZWNfaXRlbTsKK2V4dGVybiBpbnQgZ2l0X2ZubWF0Y2goY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sCisJCSAgICAgICBjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcsCisJCSAgICAgICBpbnQgcHJlZml4KTsKKworc3RhdGljIGlubGluZSBpbnQgY2VfcGF0aF9tYXRjaChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCWNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkJY2hhciAqc2VlbikKK3sKKwlyZXR1cm4gbWF0Y2hfcGF0aHNwZWMocGF0aHNwZWMsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgMCwgc2VlbiwKKwkJCSAgICAgIFNfSVNESVIoY2UtPmNlX21vZGUpIHx8IFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRpcl9wYXRoX21hdGNoKGNvbnN0IHN0cnVjdCBkaXJfZW50cnkgKmVudCwKKwkJCQkgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCQkgaW50IHByZWZpeCwgY2hhciAqc2VlbikKK3sKKwlpbnQgaGFzX3RyYWlsaW5nX2RpciA9IGVudC0+bGVuICYmIGVudC0+bmFtZVtlbnQtPmxlbiAtIDFdID09ICcvJzsKKwlpbnQgbGVuID0gaGFzX3RyYWlsaW5nX2RpciA/IGVudC0+bGVuIC0gMSA6IGVudC0+bGVuOworCXJldHVybiBtYXRjaF9wYXRoc3BlYyhwYXRoc3BlYywgZW50LT5uYW1lLCBsZW4sIHByZWZpeCwgc2VlbiwKKwkJCSAgICAgIGhhc190cmFpbGluZ19kaXIpOworfQorCit2b2lkIHVudHJhY2tlZF9jYWNoZV9pbnZhbGlkYXRlX3BhdGgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IGNoYXIgKik7Cit2b2lkIHVudHJhY2tlZF9jYWNoZV9yZW1vdmVfZnJvbV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqKTsKK3ZvaWQgdW50cmFja2VkX2NhY2hlX2FkZF90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgY29uc3QgY2hhciAqKTsKKwordm9pZCBmcmVlX3VudHJhY2tlZF9jYWNoZShzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICopOworc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqcmVhZF91bnRyYWNrZWRfZXh0ZW5zaW9uKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc3opOwordm9pZCB3cml0ZV91bnRyYWNrZWRfZXh0ZW5zaW9uKHN0cnVjdCBzdHJidWYgKm91dCwgc3RydWN0IHVudHJhY2tlZF9jYWNoZSAqdW50cmFja2VkKTsKK3ZvaWQgYWRkX3VudHJhY2tlZF9pZGVudChzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICopOworI2VuZGlmCmRpZmYgLS1naXQgYS9lZGl0b3IuYyBiL2VkaXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYzY0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9lZGl0b3IuYwpAQCAtMCwwICsxLDY5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisKKyNpZm5kZWYgREVGQVVMVF9FRElUT1IKKyNkZWZpbmUgREVGQVVMVF9FRElUT1IgInZpIgorI2VuZGlmCisKK2NvbnN0IGNoYXIgKmdpdF9lZGl0b3Iodm9pZCkKK3sKKwljb25zdCBjaGFyICplZGl0b3IgPSBnZXRlbnYoIkdJVF9FRElUT1IiKTsKKwljb25zdCBjaGFyICp0ZXJtaW5hbCA9IGdldGVudigiVEVSTSIpOworCWludCB0ZXJtaW5hbF9pc19kdW1iID0gIXRlcm1pbmFsIHx8ICFzdHJjbXAodGVybWluYWwsICJkdW1iIik7CisKKwlpZiAoIWVkaXRvciAmJiBlZGl0b3JfcHJvZ3JhbSkKKwkJZWRpdG9yID0gZWRpdG9yX3Byb2dyYW07CisJaWYgKCFlZGl0b3IgJiYgIXRlcm1pbmFsX2lzX2R1bWIpCisJCWVkaXRvciA9IGdldGVudigiVklTVUFMIik7CisJaWYgKCFlZGl0b3IpCisJCWVkaXRvciA9IGdldGVudigiRURJVE9SIik7CisKKwlpZiAoIWVkaXRvciAmJiB0ZXJtaW5hbF9pc19kdW1iKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghZWRpdG9yKQorCQllZGl0b3IgPSBERUZBVUxUX0VESVRPUjsKKworCXJldHVybiBlZGl0b3I7Cit9CisKK2ludCBsYXVuY2hfZWRpdG9yKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlciwgY29uc3QgY2hhciAqY29uc3QgKmVudikKK3sKKwljb25zdCBjaGFyICplZGl0b3IgPSBnaXRfZWRpdG9yKCk7CisKKwlpZiAoIWVkaXRvcikKKwkJcmV0dXJuIGVycm9yKCJUZXJtaW5hbCBpcyBkdW1iLCBidXQgRURJVE9SIHVuc2V0Iik7CisKKwlpZiAoc3RyY21wKGVkaXRvciwgIjoiKSkgeworCQljb25zdCBjaGFyICphcmdzW10gPSB7IGVkaXRvciwgcmVhbF9wYXRoKHBhdGgpLCBOVUxMIH07CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHAgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJCWludCByZXQsIHNpZzsKKworCQlwLmFyZ3YgPSBhcmdzOworCQlwLmVudiA9IGVudjsKKwkJcC51c2Vfc2hlbGwgPSAxOworCQlpZiAoc3RhcnRfY29tbWFuZCgmcCkgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gc3RhcnQgZWRpdG9yICclcyciLCBlZGl0b3IpOworCisJCXNpZ2NoYWluX3B1c2goU0lHSU5ULCBTSUdfSUdOKTsKKwkJc2lnY2hhaW5fcHVzaChTSUdRVUlULCBTSUdfSUdOKTsKKwkJcmV0ID0gZmluaXNoX2NvbW1hbmQoJnApOworCQlzaWcgPSByZXQgLSAxMjg7CisJCXNpZ2NoYWluX3BvcChTSUdJTlQpOworCQlzaWdjaGFpbl9wb3AoU0lHUVVJVCk7CisJCWlmIChzaWcgPT0gU0lHSU5UIHx8IHNpZyA9PSBTSUdRVUlUKQorCQkJcmFpc2Uoc2lnKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiBlcnJvcigiVGhlcmUgd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBlZGl0b3IgJyVzJy4iLAorCQkJCQllZGl0b3IpOworCX0KKworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gMDsKKwlpZiAoc3RyYnVmX3JlYWRfZmlsZShidWZmZXIsIHBhdGgsIDApIDwgMCkKKwkJcmV0dXJuIGVycm9yKCJjb3VsZCBub3QgcmVhZCBmaWxlICclcyc6ICVzIiwKKwkJCQlwYXRoLCBzdHJlcnJvcihlcnJubykpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZW50cnkuYyBiL2VudHJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyYzQwMAotLS0gL2Rldi9udWxsCisrKyBiL2VudHJ5LmMKQEAgLTAsMCArMSwyOTQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJzdHJlYW1pbmcuaCIKKworc3RhdGljIHZvaWQgY3JlYXRlX2RpcmVjdG9yaWVzKGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRoX2xlbiwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlKQoreworCWNoYXIgKmJ1ZiA9IHhtYWxsb2MocGF0aF9sZW4gKyAxKTsKKwlpbnQgbGVuID0gMDsKKworCXdoaWxlIChsZW4gPCBwYXRoX2xlbikgeworCQlkbyB7CisJCQlidWZbbGVuXSA9IHBhdGhbbGVuXTsKKwkJCWxlbisrOworCQl9IHdoaWxlIChsZW4gPCBwYXRoX2xlbiAmJiBwYXRoW2xlbl0gIT0gJy8nKTsKKwkJaWYgKGxlbiA+PSBwYXRoX2xlbikKKwkJCWJyZWFrOworCQlidWZbbGVuXSA9IDA7CisKKwkJLyoKKwkJICogRm9yICdjaGVja291dC1pbmRleCAtLXByZWZpeD08ZGlyPicsIDxkaXI+IGlzCisJCSAqIGFsbG93ZWQgdG8gYmUgYSBzeW1saW5rIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwKKwkJICogYW5kIHdlIHNldCAnc3RhdGUtPmJhc2VfZGlyX2xlbicgYmVsb3csIHN1Y2ggdGhhdAorCQkgKiB3ZSB0ZXN0IHRoZSBwYXRoIGNvbXBvbmVudHMgb2YgdGhlIHByZWZpeCB3aXRoIHRoZQorCQkgKiBzdGF0KCkgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgbHN0YXQoKSBmdW5jdGlvbi4KKwkJICovCisJCWlmIChoYXNfZGlyc19vbmx5X3BhdGgoYnVmLCBsZW4sIHN0YXRlLT5iYXNlX2Rpcl9sZW4pKQorCQkJY29udGludWU7IC8qIG9rLCBpdCBpcyBhbHJlYWR5IGEgZGlyZWN0b3J5LiAqLworCisJCS8qCisJCSAqIElmIHRoaXMgbWtkaXIoKSB3b3VsZCBmYWlsLCBpdCBjb3VsZCBiZSB0aGF0IHRoZXJlCisJCSAqIGlzIGFscmVhZHkgYSBzeW1saW5rIG9yIHNvbWV0aGluZyBlbHNlIGV4aXN0cworCQkgKiB0aGVyZSwgdGhlcmVmb3JlIHdlIHRoZW4gdHJ5IHRvIHVubGluayBpdCBhbmQgdHJ5CisJCSAqIG9uZSBtb3JlIHRpbWUgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkuCisJCSAqLworCQlpZiAobWtkaXIoYnVmLCAwNzc3KSkgeworCQkJaWYgKGVycm5vID09IEVFWElTVCAmJiBzdGF0ZS0+Zm9yY2UgJiYKKwkJCSAgICAhdW5saW5rX29yX3dhcm4oYnVmKSAmJiAhbWtkaXIoYnVmLCAwNzc3KSkKKwkJCQljb250aW51ZTsKKwkJCWRpZV9lcnJubygiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgYXQgJyVzJyIsIGJ1Zik7CisJCX0KKwl9CisJZnJlZShidWYpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfc3VidHJlZShzdHJ1Y3Qgc3RyYnVmICpwYXRoKQoreworCURJUiAqZGlyID0gb3BlbmRpcihwYXRoLT5idWYpOworCXN0cnVjdCBkaXJlbnQgKmRlOworCWludCBvcmlnbGVuID0gcGF0aC0+bGVuOworCisJaWYgKCFkaXIpCisJCWRpZV9lcnJubygiY2Fubm90IG9wZW5kaXIgJyVzJyIsIHBhdGgtPmJ1Zik7CisJd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc3RhdCBzdDsKKworCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9hZGRjaChwYXRoLCAnLycpOworCQlzdHJidWZfYWRkc3RyKHBhdGgsIGRlLT5kX25hbWUpOworCQlpZiAobHN0YXQocGF0aC0+YnVmLCAmc3QpKQorCQkJZGllX2Vycm5vKCJjYW5ub3QgbHN0YXQgJyVzJyIsIHBhdGgtPmJ1Zik7CisJCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKQorCQkJcmVtb3ZlX3N1YnRyZWUocGF0aCk7CisJCWVsc2UgaWYgKHVubGluayhwYXRoLT5idWYpKQorCQkJZGllX2Vycm5vKCJjYW5ub3QgdW5saW5rICclcyciLCBwYXRoLT5idWYpOworCQlzdHJidWZfc2V0bGVuKHBhdGgsIG9yaWdsZW4pOworCX0KKwljbG9zZWRpcihkaXIpOworCWlmIChybWRpcihwYXRoLT5idWYpKQorCQlkaWVfZXJybm8oImNhbm5vdCBybWRpciAnJXMnIiwgcGF0aC0+YnVmKTsKK30KKworc3RhdGljIGludCBjcmVhdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwltb2RlID0gKG1vZGUgJiAwMTAwKSA/IDA3NzcgOiAwNjY2OworCXJldHVybiBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fRVhDTCwgbW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkICpyZWFkX2Jsb2JfZW50cnkoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqbmV3ID0gcmVhZF9zaGExX2ZpbGUoY2UtPnNoYTEsICZ0eXBlLCBzaXplKTsKKworCWlmIChuZXcpIHsKKwkJaWYgKHR5cGUgPT0gT0JKX0JMT0IpCisJCQlyZXR1cm4gbmV3OworCQlmcmVlKG5ldyk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IG9wZW5fb3V0cHV0X2ZkKGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGludCB0b190ZW1wZmlsZSkKK3sKKwlpbnQgc3ltbGluayA9IChjZS0+Y2VfbW9kZSAmIFNfSUZNVCkgIT0gU19JRlJFRzsKKwlpZiAodG9fdGVtcGZpbGUpIHsKKwkJeHNucHJpbnRmKHBhdGgsIFRFTVBPUkFSWV9GSUxFTkFNRV9MRU5HVEgsICIlcyIsCisJCQkgIHN5bWxpbmsgPyAiLm1lcmdlX2xpbmtfWFhYWFhYIiA6ICIubWVyZ2VfZmlsZV9YWFhYWFgiKTsKKwkJcmV0dXJuIG1rc3RlbXAocGF0aCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGNyZWF0ZV9maWxlKHBhdGgsICFzeW1saW5rID8gY2UtPmNlX21vZGUgOiAwNjY2KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZnN0YXRfb3V0cHV0KGludCBmZCwgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgc3RydWN0IHN0YXQgKnN0KQoreworCS8qIHVzZSBmc3RhdCgpIG9ubHkgd2hlbiBwYXRoID09IGNlLT5uYW1lICovCisJaWYgKGZzdGF0X2lzX3JlbGlhYmxlKCkgJiYKKwkgICAgc3RhdGUtPnJlZnJlc2hfY2FjaGUgJiYgIXN0YXRlLT5iYXNlX2Rpcl9sZW4pIHsKKwkJZnN0YXQoZmQsIHN0KTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0cmVhbWluZ193cml0ZV9lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjaGFyICpwYXRoLAorCQkJCSBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyLAorCQkJCSBjb25zdCBzdHJ1Y3QgY2hlY2tvdXQgKnN0YXRlLCBpbnQgdG9fdGVtcGZpbGUsCisJCQkJIGludCAqZnN0YXRfZG9uZSwgc3RydWN0IHN0YXQgKnN0YXRidWYpCit7CisJaW50IHJlc3VsdCA9IDA7CisJaW50IGZkOworCisJZmQgPSBvcGVuX291dHB1dF9mZChwYXRoLCBjZSwgdG9fdGVtcGZpbGUpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKworCXJlc3VsdCB8PSBzdHJlYW1fYmxvYl90b19mZChmZCwgY2UtPnNoYTEsIGZpbHRlciwgMSk7CisJKmZzdGF0X2RvbmUgPSBmc3RhdF9vdXRwdXQoZmQsIHN0YXRlLCBzdGF0YnVmKTsKKwlyZXN1bHQgfD0gY2xvc2UoZmQpOworCisJaWYgKHJlc3VsdCkKKwkJdW5saW5rKHBhdGgpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJICAgICAgIGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBjaGVja291dCAqc3RhdGUsIGludCB0b190ZW1wZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgY2VfbW9kZV9zX2lmbXQgPSBjZS0+Y2VfbW9kZSAmIFNfSUZNVDsKKwlpbnQgZmQsIHJldCwgZnN0YXRfZG9uZSA9IDA7CisJY2hhciAqbmV3OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXNpemVfdCB3cm90ZSwgbmV3c2l6ZSA9IDA7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoY2VfbW9kZV9zX2lmbXQgPT0gU19JRlJFRykgeworCQlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyID0gZ2V0X3N0cmVhbV9maWx0ZXIoY2UtPm5hbWUsIGNlLT5zaGExKTsKKwkJaWYgKGZpbHRlciAmJgorCQkgICAgIXN0cmVhbWluZ193cml0ZV9lbnRyeShjZSwgcGF0aCwgZmlsdGVyLAorCQkJCQkgICBzdGF0ZSwgdG9fdGVtcGZpbGUsCisJCQkJCSAgICZmc3RhdF9kb25lLCAmc3QpKQorCQkJZ290byBmaW5pc2g7CisJfQorCisJc3dpdGNoIChjZV9tb2RlX3NfaWZtdCkgeworCWNhc2UgU19JRlJFRzoKKwljYXNlIFNfSUZMTks6CisJCW5ldyA9IHJlYWRfYmxvYl9lbnRyeShjZSwgJnNpemUpOworCQlpZiAoIW5ldykKKwkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIHJlYWQgc2hhMSBmaWxlIG9mICVzICglcykiLAorCQkJCXBhdGgsIHNoYTFfdG9faGV4KGNlLT5zaGExKSk7CisKKwkJaWYgKGNlX21vZGVfc19pZm10ID09IFNfSUZMTksgJiYgaGFzX3N5bWxpbmtzICYmICF0b190ZW1wZmlsZSkgeworCQkJcmV0ID0gc3ltbGluayhuZXcsIHBhdGgpOworCQkJZnJlZShuZXcpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBjcmVhdGUgc3ltbGluayAlcyAoJXMpIiwKKwkJCQkJICAgICBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBDb252ZXJ0IGZyb20gZ2l0IGludGVybmFsIGZvcm1hdCB0byB3b3JraW5nIHRyZWUgZm9ybWF0CisJCSAqLworCQlpZiAoY2VfbW9kZV9zX2lmbXQgPT0gU19JRlJFRyAmJgorCQkgICAgY29udmVydF90b193b3JraW5nX3RyZWUoY2UtPm5hbWUsIG5ldywgc2l6ZSwgJmJ1ZikpIHsKKwkJCWZyZWUobmV3KTsKKwkJCW5ldyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgJm5ld3NpemUpOworCQkJc2l6ZSA9IG5ld3NpemU7CisJCX0KKworCQlmZCA9IG9wZW5fb3V0cHV0X2ZkKHBhdGgsIGNlLCB0b190ZW1wZmlsZSk7CisJCWlmIChmZCA8IDApIHsKKwkJCWZyZWUobmV3KTsKKwkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGNyZWF0ZSBmaWxlICVzICglcykiLAorCQkJCXBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCX0KKworCQl3cm90ZSA9IHdyaXRlX2luX2Z1bGwoZmQsIG5ldywgc2l6ZSk7CisJCWlmICghdG9fdGVtcGZpbGUpCisJCQlmc3RhdF9kb25lID0gZnN0YXRfb3V0cHV0KGZkLCBzdGF0ZSwgJnN0KTsKKwkJY2xvc2UoZmQpOworCQlmcmVlKG5ldyk7CisJCWlmICh3cm90ZSAhPSBzaXplKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gd3JpdGUgZmlsZSAlcyIsIHBhdGgpOworCQlicmVhazsKKwljYXNlIFNfSUZHSVRMSU5LOgorCQlpZiAodG9fdGVtcGZpbGUpCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IHN1Ym1vZHVsZSAlcyIsIHBhdGgpOworCQlpZiAobWtkaXIocGF0aCwgMDc3NykgPCAwKQorCQkJcmV0dXJuIGVycm9yKCJjYW5ub3QgY3JlYXRlIHN1Ym1vZHVsZSBkaXJlY3RvcnkgJXMiLCBwYXRoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGVycm9yKCJ1bmtub3duIGZpbGUgbW9kZSBmb3IgJXMgaW4gaW5kZXgiLCBwYXRoKTsKKwl9CisKK2ZpbmlzaDoKKwlpZiAoc3RhdGUtPnJlZnJlc2hfY2FjaGUpIHsKKwkJYXNzZXJ0KHN0YXRlLT5pc3RhdGUpOworCQlpZiAoIWZzdGF0X2RvbmUpCisJCQlsc3RhdChjZS0+bmFtZSwgJnN0KTsKKwkJZmlsbF9zdGF0X2NhY2hlX2luZm8oY2UsICZzdCk7CisJCWNlLT5jZV9mbGFncyB8PSBDRV9VUERBVEVfSU5fQkFTRTsKKwkJc3RhdGUtPmlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBDRV9FTlRSWV9DSEFOR0VEOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgaXMgbGlrZSAnbHN0YXQoKScsIGV4Y2VwdCBpdCByZWZ1c2VzIHRvIGZvbGxvdyBzeW1saW5rcworICogaW4gdGhlIHBhdGgsIGFmdGVyIHNraXBwaW5nICJza2lwbGVuIi4KKyAqLworc3RhdGljIGludCBjaGVja19wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4sIHN0cnVjdCBzdGF0ICpzdCwgaW50IHNraXBsZW4pCit7CisJY29uc3QgY2hhciAqc2xhc2ggPSBwYXRoICsgbGVuOworCisJd2hpbGUgKHBhdGggPCBzbGFzaCAmJiAqc2xhc2ggIT0gJy8nKQorCQlzbGFzaC0tOworCWlmICghaGFzX2RpcnNfb25seV9wYXRoKHBhdGgsIHNsYXNoIC0gcGF0aCwgc2tpcGxlbikpIHsKKwkJZXJybm8gPSBFTk9FTlQ7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGxzdGF0KHBhdGgsIHN0KTsKK30KKworLyoKKyAqIFdyaXRlIHRoZSBjb250ZW50cyBmcm9tIGNlIG91dCB0byB0aGUgd29ya2luZyB0cmVlLgorICoKKyAqIFdoZW4gdG9wYXRoW10gaXMgbm90IE5VTEwsIGluc3RlYWQgb2Ygd3JpdGluZyB0byB0aGUgd29ya2luZyB0cmVlCisgKiBmaWxlIG5hbWVkIGJ5IGNlLCBhIHRlbXBvcmFyeSBmaWxlIGlzIGNyZWF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBhbmQKKyAqIGl0cyBuYW1lIGlzIHJldHVybmVkIGluIHRvcGF0aFtdLCB3aGljaCBtdXN0IGJlIGFibGUgdG8gaG9sZCBhdAorICogbGVhc3QgVEVNUE9SQVJZX0ZJTEVOQU1FX0xFTkdUSCBieXRlcyBsb25nLgorICovCitpbnQgY2hlY2tvdXRfZW50cnkoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJICAgY29uc3Qgc3RydWN0IGNoZWNrb3V0ICpzdGF0ZSwgY2hhciAqdG9wYXRoKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmICh0b3BhdGgpCisJCXJldHVybiB3cml0ZV9lbnRyeShjZSwgdG9wYXRoLCBzdGF0ZSwgMSk7CisKKwlzdHJidWZfcmVzZXQoJnBhdGgpOworCXN0cmJ1Zl9hZGQoJnBhdGgsIHN0YXRlLT5iYXNlX2Rpciwgc3RhdGUtPmJhc2VfZGlyX2xlbik7CisJc3RyYnVmX2FkZCgmcGF0aCwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKTsKKworCWlmICghY2hlY2tfcGF0aChwYXRoLmJ1ZiwgcGF0aC5sZW4sICZzdCwgc3RhdGUtPmJhc2VfZGlyX2xlbikpIHsKKwkJdW5zaWduZWQgY2hhbmdlZCA9IGNlX21hdGNoX3N0YXQoY2UsICZzdCwgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEfENFX01BVENIX0lHTk9SRV9TS0lQX1dPUktUUkVFKTsKKwkJaWYgKCFjaGFuZ2VkKQorCQkJcmV0dXJuIDA7CisJCWlmICghc3RhdGUtPmZvcmNlKSB7CisJCQlpZiAoIXN0YXRlLT5xdWlldCkKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJIiVzIGFscmVhZHkgZXhpc3RzLCBubyBjaGVja291dFxuIiwKKwkJCQkJcGF0aC5idWYpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJLyoKKwkJICogV2UgdW5saW5rIHRoZSBvbGQgZmlsZSwgdG8gZ2V0IHRoZSBuZXcgb25lIHdpdGggdGhlCisJCSAqIHJpZ2h0IHBlcm1pc3Npb25zIChpbmNsdWRpbmcgdW1hc2ssIHdoaWNoIGlzIG5hc3R5CisJCSAqIHRvIGVtdWxhdGUgYnkgaGFuZCAtIG11Y2ggZWFzaWVyIHRvIGxldCB0aGUgc3lzdGVtCisJCSAqIGp1c3QgZG8gdGhlIHJpZ2h0IHRoaW5nKQorCQkgKi8KKwkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCS8qIElmIGl0IGlzIGEgZ2l0bGluaywgbGVhdmUgaXQgYWxvbmUhICovCisJCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJCXJldHVybiAwOworCQkJaWYgKCFzdGF0ZS0+Zm9yY2UpCisJCQkJcmV0dXJuIGVycm9yKCIlcyBpcyBhIGRpcmVjdG9yeSIsIHBhdGguYnVmKTsKKwkJCXJlbW92ZV9zdWJ0cmVlKCZwYXRoKTsKKwkJfSBlbHNlIGlmICh1bmxpbmsocGF0aC5idWYpKQorCQkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gdW5saW5rIG9sZCAnJXMnICglcykiLAorCQkJCSAgICAgcGF0aC5idWYsIHN0cmVycm9yKGVycm5vKSk7CisJfSBlbHNlIGlmIChzdGF0ZS0+bm90X25ldykKKwkJcmV0dXJuIDA7CisKKwljcmVhdGVfZGlyZWN0b3JpZXMocGF0aC5idWYsIHBhdGgubGVuLCBzdGF0ZSk7CisJcmV0dXJuIHdyaXRlX2VudHJ5KGNlLCBwYXRoLmJ1Ziwgc3RhdGUsIDApOworfQpkaWZmIC0tZ2l0IGEvZW52aXJvbm1lbnQuYyBiL2Vudmlyb25tZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhN2ZlMgotLS0gL2Rldi9udWxsCisrKyBiL2Vudmlyb25tZW50LmMKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBXZSBwdXQgYWxsIHRoZSBnaXQgY29uZmlnIHZhcmlhYmxlcyBpbiB0aGlzIHNhbWUgb2JqZWN0CisgKiBmaWxlLCBzbyB0aGF0IHByb2dyYW1zIGNhbiBsaW5rIGFnYWluc3QgdGhlIGNvbmZpZyBwYXJzZXIKKyAqIHdpdGhvdXQgaGF2aW5nIHRvIGxpbmsgYWdhaW5zdCBhbGwgdGhlIHJlc3Qgb2YgZ2l0LgorICoKKyAqIEluIHBhcnRpY3VsYXIsIG5vIG5lZWQgdG8gYnJpbmcgaW4gbGlieiBldGMgdW5sZXNzIG5lZWRlZCwKKyAqIGV2ZW4gaWYgeW91IG1pZ2h0IHdhbnQgdG8ga25vdyB3aGVyZSB0aGUgZ2l0IGRpcmVjdG9yeSBldGMKKyAqIGFyZS4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImZtdC1tZXJnZS1tc2cuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKworaW50IHRydXN0X2V4ZWN1dGFibGVfYml0ID0gMTsKK2ludCB0cnVzdF9jdGltZSA9IDE7CitpbnQgY2hlY2tfc3RhdCA9IDE7CitpbnQgaGFzX3N5bWxpbmtzID0gMTsKK2ludCBtaW5pbXVtX2FiYnJldiA9IDQsIGRlZmF1bHRfYWJicmV2ID0gNzsKK2ludCBpZ25vcmVfY2FzZTsKK2ludCBhc3N1bWVfdW5jaGFuZ2VkOworaW50IHByZWZlcl9zeW1saW5rX3JlZnM7CitpbnQgaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IC0xOyAvKiB1bnNwZWNpZmllZCAqLworaW50IGxvZ19hbGxfcmVmX3VwZGF0ZXMgPSAtMTsgLyogdW5zcGVjaWZpZWQgKi8KK2ludCB3YXJuX2FtYmlndW91c19yZWZzID0gMTsKK2ludCB3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eSA9IDE7CitpbnQgcmVmX3BhcmFub2lhID0gLTE7CitpbnQgcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbjsKK2ludCByZXBvc2l0b3J5X2Zvcm1hdF9wcmVjaW91c19vYmplY3RzOworY29uc3QgY2hhciAqZ2l0X2NvbW1pdF9lbmNvZGluZzsKK2NvbnN0IGNoYXIgKmdpdF9sb2dfb3V0cHV0X2VuY29kaW5nOworaW50IHNoYXJlZF9yZXBvc2l0b3J5ID0gUEVSTV9VTUFTSzsKK2NvbnN0IGNoYXIgKmFwcGx5X2RlZmF1bHRfd2hpdGVzcGFjZTsKK2NvbnN0IGNoYXIgKmFwcGx5X2RlZmF1bHRfaWdub3Jld2hpdGVzcGFjZTsKK2NvbnN0IGNoYXIgKmdpdF9hdHRyaWJ1dGVzX2ZpbGU7CitpbnQgemxpYl9jb21wcmVzc2lvbl9sZXZlbCA9IFpfQkVTVF9TUEVFRDsKK2ludCBjb3JlX2NvbXByZXNzaW9uX2xldmVsOworaW50IGNvcmVfY29tcHJlc3Npb25fc2VlbjsKK2ludCBmc3luY19vYmplY3RfZmlsZXM7CitzaXplX3QgcGFja2VkX2dpdF93aW5kb3dfc2l6ZSA9IERFRkFVTFRfUEFDS0VEX0dJVF9XSU5ET1dfU0laRTsKK3NpemVfdCBwYWNrZWRfZ2l0X2xpbWl0ID0gREVGQVVMVF9QQUNLRURfR0lUX0xJTUlUOworc2l6ZV90IGRlbHRhX2Jhc2VfY2FjaGVfbGltaXQgPSA5NiAqIDEwMjQgKiAxMDI0OwordW5zaWduZWQgbG9uZyBiaWdfZmlsZV90aHJlc2hvbGQgPSA1MTIgKiAxMDI0ICogMTAyNDsKK2NvbnN0IGNoYXIgKnBhZ2VyX3Byb2dyYW07CitpbnQgcGFnZXJfdXNlX2NvbG9yID0gMTsKK2NvbnN0IGNoYXIgKmVkaXRvcl9wcm9ncmFtOworY29uc3QgY2hhciAqYXNrcGFzc19wcm9ncmFtOworY29uc3QgY2hhciAqZXhjbHVkZXNfZmlsZTsKK2VudW0gYXV0b19jcmxmIGF1dG9fY3JsZiA9IEFVVE9fQ1JMRl9GQUxTRTsKK2ludCBjaGVja19yZXBsYWNlX3JlZnMgPSAxOworY2hhciAqZ2l0X3JlcGxhY2VfcmVmX2Jhc2U7CitlbnVtIGVvbCBjb3JlX2VvbCA9IEVPTF9VTlNFVDsKK2VudW0gc2FmZV9jcmxmIHNhZmVfY3JsZiA9IFNBRkVfQ1JMRl9XQVJOOwordW5zaWduZWQgd2hpdGVzcGFjZV9ydWxlX2NmZyA9IFdTX0RFRkFVTFRfUlVMRTsKK2VudW0gYnJhbmNoX3RyYWNrIGdpdF9icmFuY2hfdHJhY2sgPSBCUkFOQ0hfVFJBQ0tfUkVNT1RFOworZW51bSByZWJhc2Vfc2V0dXBfdHlwZSBhdXRvcmViYXNlID0gQVVUT1JFQkFTRV9ORVZFUjsKK2VudW0gcHVzaF9kZWZhdWx0X3R5cGUgcHVzaF9kZWZhdWx0ID0gUFVTSF9ERUZBVUxUX1VOU1BFQ0lGSUVEOworI2lmbmRlZiBPQkpFQ1RfQ1JFQVRJT05fTU9ERQorI2RlZmluZSBPQkpFQ1RfQ1JFQVRJT05fTU9ERSBPQkpFQ1RfQ1JFQVRJT05fVVNFU19IQVJETElOS1MKKyNlbmRpZgorZW51bSBvYmplY3RfY3JlYXRpb25fbW9kZSBvYmplY3RfY3JlYXRpb25fbW9kZSA9IE9CSkVDVF9DUkVBVElPTl9NT0RFOworY2hhciAqbm90ZXNfcmVmX25hbWU7CitpbnQgZ3JhZnRzX3JlcGxhY2VfcGFyZW50cyA9IDE7CitpbnQgY29yZV9hcHBseV9zcGFyc2VfY2hlY2tvdXQ7CitpbnQgbWVyZ2VfbG9nX2NvbmZpZyA9IC0xOworaW50IHByZWNvbXBvc2VkX3VuaWNvZGUgPSAtMTsgLyogc2VlIHByb2JlX3V0ZjhfcGF0aG5hbWVfY29tcG9zaXRpb24oKSAqLworc3RydWN0IHN0YXJ0dXBfaW5mbyAqc3RhcnR1cF9pbmZvOwordW5zaWduZWQgbG9uZyBwYWNrX3NpemVfbGltaXRfY2ZnOworCisjaWZuZGVmIFBST1RFQ1RfSEZTX0RFRkFVTFQKKyNkZWZpbmUgUFJPVEVDVF9IRlNfREVGQVVMVCAwCisjZW5kaWYKK2ludCBwcm90ZWN0X2hmcyA9IFBST1RFQ1RfSEZTX0RFRkFVTFQ7CisKKyNpZm5kZWYgUFJPVEVDVF9OVEZTX0RFRkFVTFQKKyNkZWZpbmUgUFJPVEVDVF9OVEZTX0RFRkFVTFQgMAorI2VuZGlmCitpbnQgcHJvdGVjdF9udGZzID0gUFJPVEVDVF9OVEZTX0RFRkFVTFQ7CisKKy8qCisgKiBUaGUgY2hhcmFjdGVyIHRoYXQgYmVnaW5zIGEgY29tbWVudGVkIGxpbmUgaW4gdXNlci1lZGl0YWJsZSBmaWxlCisgKiB0aGF0IGlzIHN1YmplY3QgdG8gc3RyaXBzcGFjZS4KKyAqLworY2hhciBjb21tZW50X2xpbmVfY2hhciA9ICcjJzsKK2ludCBhdXRvX2NvbW1lbnRfbGluZV9jaGFyOworCisvKiBQYXJhbGxlbCBpbmRleCBzdGF0IGRhdGEgcHJlbG9hZD8gKi8KK2ludCBjb3JlX3ByZWxvYWRfaW5kZXggPSAxOworCisvKiBUaGlzIGlzIHNldCBieSBzZXR1cF9naXRfZGlyX2dlbnRseSgpIGFuZC9vciBnaXRfZGVmYXVsdF9jb25maWcoKSAqLworY2hhciAqZ2l0X3dvcmtfdHJlZV9jZmc7CitzdGF0aWMgY2hhciAqd29ya190cmVlOworCitzdGF0aWMgY29uc3QgY2hhciAqbmFtZXNwYWNlOworc3RhdGljIHNpemVfdCBuYW1lc3BhY2VfbGVuOworCitzdGF0aWMgY29uc3QgY2hhciAqZ2l0X2RpciwgKmdpdF9jb21tb25fZGlyOworc3RhdGljIGNoYXIgKmdpdF9vYmplY3RfZGlyLCAqZ2l0X2luZGV4X2ZpbGUsICpnaXRfZ3JhZnRfZmlsZTsKK2ludCBnaXRfZGJfZW52LCBnaXRfaW5kZXhfZW52LCBnaXRfZ3JhZnRfZW52LCBnaXRfY29tbW9uX2Rpcl9lbnY7CisKKy8qCisgKiBSZXBvc2l0b3J5LWxvY2FsIEdJVF8qIGVudmlyb25tZW50IHZhcmlhYmxlczsgc2VlIGNhY2hlLmggZm9yIGRldGFpbHMuCisgKi8KK2NvbnN0IGNoYXIgKiBjb25zdCBsb2NhbF9yZXBvX2VudltdID0geworCUFMVEVSTkFURV9EQl9FTlZJUk9OTUVOVCwKKwlDT05GSUdfRU5WSVJPTk1FTlQsCisJQ09ORklHX0RBVEFfRU5WSVJPTk1FTlQsCisJREJfRU5WSVJPTk1FTlQsCisJR0lUX0RJUl9FTlZJUk9OTUVOVCwKKwlHSVRfV09SS19UUkVFX0VOVklST05NRU5ULAorCUdJVF9JTVBMSUNJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsCisJR1JBRlRfRU5WSVJPTk1FTlQsCisJSU5ERVhfRU5WSVJPTk1FTlQsCisJTk9fUkVQTEFDRV9PQkpFQ1RTX0VOVklST05NRU5ULAorCUdJVF9SRVBMQUNFX1JFRl9CQVNFX0VOVklST05NRU5ULAorCUdJVF9QUkVGSVhfRU5WSVJPTk1FTlQsCisJR0lUX1NIQUxMT1dfRklMRV9FTlZJUk9OTUVOVCwKKwlHSVRfQ09NTU9OX0RJUl9FTlZJUk9OTUVOVCwKKwlOVUxMCit9OworCitzdGF0aWMgY2hhciAqZXhwYW5kX25hbWVzcGFjZShjb25zdCBjaGFyICpyYXdfbmFtZXNwYWNlKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiAqKmNvbXBvbmVudHMsICoqYzsKKworCWlmICghcmF3X25hbWVzcGFjZSB8fCAhKnJhd19uYW1lc3BhY2UpCisJCXJldHVybiB4c3RyZHVwKCIiKTsKKworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcmF3X25hbWVzcGFjZSk7CisJY29tcG9uZW50cyA9IHN0cmJ1Zl9zcGxpdCgmYnVmLCAnLycpOworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlmb3IgKGMgPSBjb21wb25lbnRzOyAqYzsgYysrKQorCQlpZiAoc3RyY21wKCgqYyktPmJ1ZiwgIi8iKSAhPSAwKQorCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgInJlZnMvbmFtZXNwYWNlcy8lcyIsICgqYyktPmJ1Zik7CisJc3RyYnVmX2xpc3RfZnJlZShjb21wb25lbnRzKTsKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoYnVmLmJ1ZiwgMCkpCisJCWRpZSgiYmFkIGdpdCBuYW1lc3BhY2UgcGF0aCBcIiVzXCIiLCByYXdfbmFtZXNwYWNlKTsKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJy8nKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIGNoYXIgKmdpdF9wYXRoX2Zyb21fZW52KGNvbnN0IGNoYXIgKmVudnZhciwgY29uc3QgY2hhciAqZ2l0X2RpciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpwYXRoLCBpbnQgKmZyb21lbnYpCit7CisJY29uc3QgY2hhciAqdmFsdWUgPSBnZXRlbnYoZW52dmFyKTsKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4geHN0cmZtdCgiJXMvJXMiLCBnaXRfZGlyLCBwYXRoKTsKKwlpZiAoZnJvbWVudikKKwkJKmZyb21lbnYgPSAxOworCXJldHVybiB4c3RyZHVwKHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfZ2l0X2Vudih2b2lkKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpnaXRmaWxlOworCWNvbnN0IGNoYXIgKnNoYWxsb3dfZmlsZTsKKwljb25zdCBjaGFyICpyZXBsYWNlX3JlZl9iYXNlOworCisJZ2l0X2RpciA9IGdldGVudihHSVRfRElSX0VOVklST05NRU5UKTsKKwlpZiAoIWdpdF9kaXIpCisJCWdpdF9kaXIgPSBERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQ7CisJZ2l0ZmlsZSA9IHJlYWRfZ2l0ZmlsZShnaXRfZGlyKTsKKwlnaXRfZGlyID0geHN0cmR1cChnaXRmaWxlID8gZ2l0ZmlsZSA6IGdpdF9kaXIpOworCWlmIChnZXRfY29tbW9uX2Rpcigmc2IsIGdpdF9kaXIpKQorCQlnaXRfY29tbW9uX2Rpcl9lbnYgPSAxOworCWdpdF9jb21tb25fZGlyID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCWdpdF9vYmplY3RfZGlyID0gZ2l0X3BhdGhfZnJvbV9lbnYoREJfRU5WSVJPTk1FTlQsIGdpdF9jb21tb25fZGlyLAorCQkJCQkgICAib2JqZWN0cyIsICZnaXRfZGJfZW52KTsKKwlnaXRfaW5kZXhfZmlsZSA9IGdpdF9wYXRoX2Zyb21fZW52KElOREVYX0VOVklST05NRU5ULCBnaXRfZGlyLAorCQkJCQkgICAiaW5kZXgiLCAmZ2l0X2luZGV4X2Vudik7CisJZ2l0X2dyYWZ0X2ZpbGUgPSBnaXRfcGF0aF9mcm9tX2VudihHUkFGVF9FTlZJUk9OTUVOVCwgZ2l0X2NvbW1vbl9kaXIsCisJCQkJCSAgICJpbmZvL2dyYWZ0cyIsICZnaXRfZ3JhZnRfZW52KTsKKwlpZiAoZ2V0ZW52KE5PX1JFUExBQ0VfT0JKRUNUU19FTlZJUk9OTUVOVCkpCisJCWNoZWNrX3JlcGxhY2VfcmVmcyA9IDA7CisJcmVwbGFjZV9yZWZfYmFzZSA9IGdldGVudihHSVRfUkVQTEFDRV9SRUZfQkFTRV9FTlZJUk9OTUVOVCk7CisJZ2l0X3JlcGxhY2VfcmVmX2Jhc2UgPSB4c3RyZHVwKHJlcGxhY2VfcmVmX2Jhc2UgPyByZXBsYWNlX3JlZl9iYXNlCisJCQkJCQkJICA6ICJyZWZzL3JlcGxhY2UvIik7CisJbmFtZXNwYWNlID0gZXhwYW5kX25hbWVzcGFjZShnZXRlbnYoR0lUX05BTUVTUEFDRV9FTlZJUk9OTUVOVCkpOworCW5hbWVzcGFjZV9sZW4gPSBzdHJsZW4obmFtZXNwYWNlKTsKKwlzaGFsbG93X2ZpbGUgPSBnZXRlbnYoR0lUX1NIQUxMT1dfRklMRV9FTlZJUk9OTUVOVCk7CisJaWYgKHNoYWxsb3dfZmlsZSkKKwkJc2V0X2FsdGVybmF0ZV9zaGFsbG93X2ZpbGUoc2hhbGxvd19maWxlLCAwKTsKK30KKworaW50IGlzX2JhcmVfcmVwb3NpdG9yeSh2b2lkKQoreworCS8qIGlmIGNvcmUuYmFyZSBpcyBub3QgJ2ZhbHNlJywgbGV0J3Mgc2VlIGlmIHRoZXJlIGlzIGEgd29yayB0cmVlICovCisJcmV0dXJuIGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgJiYgIWdldF9naXRfd29ya190cmVlKCk7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9naXRfZGlyKHZvaWQpCit7CisJaWYgKCFnaXRfZGlyKQorCQlzZXR1cF9naXRfZW52KCk7CisJcmV0dXJuIGdpdF9kaXI7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9naXRfY29tbW9uX2Rpcih2b2lkKQoreworCXJldHVybiBnaXRfY29tbW9uX2RpcjsKK30KKworY29uc3QgY2hhciAqZ2V0X2dpdF9uYW1lc3BhY2Uodm9pZCkKK3sKKwlpZiAoIW5hbWVzcGFjZSkKKwkJc2V0dXBfZ2l0X2VudigpOworCXJldHVybiBuYW1lc3BhY2U7Cit9CisKK2NvbnN0IGNoYXIgKnN0cmlwX25hbWVzcGFjZShjb25zdCBjaGFyICpuYW1lc3BhY2VkX3JlZikKK3sKKwlpZiAoIXN0YXJ0c193aXRoKG5hbWVzcGFjZWRfcmVmLCBnZXRfZ2l0X25hbWVzcGFjZSgpKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIG5hbWVzcGFjZWRfcmVmICsgbmFtZXNwYWNlX2xlbjsKK30KKworc3RhdGljIGludCBnaXRfd29ya190cmVlX2luaXRpYWxpemVkOworCisvKgorICogTm90ZS4gIFRoaXMgd29ya3Mgb25seSBiZWZvcmUgeW91IHVzZWQgYSB3b3JrIHRyZWUuICBUaGlzIHdhcyBhZGRlZAorICogcHJpbWFyaWx5IHRvIHN1cHBvcnQgZ2l0LWNsb25lIHRvIHdvcmsgaW4gYSBuZXcgcmVwb3NpdG9yeSBpdCBqdXN0CisgKiBjcmVhdGVkLCBhbmQgaXMgbm90IG1lYW50IHRvIGZsaXAgYmV0d2VlbiBkaWZmZXJlbnQgd29yayB0cmVlcy4KKyAqLwordm9pZCBzZXRfZ2l0X3dvcmtfdHJlZShjb25zdCBjaGFyICpuZXdfd29ya190cmVlKQoreworCWlmIChnaXRfd29ya190cmVlX2luaXRpYWxpemVkKSB7CisJCW5ld193b3JrX3RyZWUgPSByZWFsX3BhdGgobmV3X3dvcmtfdHJlZSk7CisJCWlmIChzdHJjbXAobmV3X3dvcmtfdHJlZSwgd29ya190cmVlKSkKKwkJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IHdvcmsgdHJlZSBoYXMgYWxyZWFkeSBiZWVuIHNldFxuIgorCQkJICAgICJDdXJyZW50IHdvcmt0cmVlOiAlc1xuTmV3IHdvcmt0cmVlOiAlcyIsCisJCQkgICAgd29ya190cmVlLCBuZXdfd29ya190cmVlKTsKKwkJcmV0dXJuOworCX0KKwlnaXRfd29ya190cmVlX2luaXRpYWxpemVkID0gMTsKKwl3b3JrX3RyZWUgPSB4c3RyZHVwKHJlYWxfcGF0aChuZXdfd29ya190cmVlKSk7CisJaWYgKHNldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5ULCB3b3JrX3RyZWUsIDEpKQorCQlkaWUoImNvdWxkIG5vdCBzZXQgR0lUX1dPUktfVFJFRSB0byAnJXMnIiwgd29ya190cmVlKTsKK30KKworY29uc3QgY2hhciAqZ2V0X2dpdF93b3JrX3RyZWUodm9pZCkKK3sKKwlyZXR1cm4gd29ya190cmVlOworfQorCitjaGFyICpnZXRfb2JqZWN0X2RpcmVjdG9yeSh2b2lkKQoreworCWlmICghZ2l0X29iamVjdF9kaXIpCisJCXNldHVwX2dpdF9lbnYoKTsKKwlyZXR1cm4gZ2l0X29iamVjdF9kaXI7Cit9CisKK2ludCBvZGJfbWtzdGVtcChjaGFyICp0ZW1wbGF0ZSwgc2l6ZV90IGxpbWl0LCBjb25zdCBjaGFyICpwYXR0ZXJuKQoreworCWludCBmZDsKKwkvKgorCSAqIHdlIGxldCB0aGUgdW1hc2sgZG8gaXRzIGpvYiwgZG9uJ3QgdHJ5IHRvIGJlIG1vcmUKKwkgKiByZXN0cmljdGl2ZSBleGNlcHQgdG8gcmVtb3ZlIHdyaXRlIHBlcm1pc3Npb24uCisJICovCisJaW50IG1vZGUgPSAwNDQ0OworCXNucHJpbnRmKHRlbXBsYXRlLCBsaW1pdCwgIiVzLyVzIiwKKwkJIGdldF9vYmplY3RfZGlyZWN0b3J5KCksIHBhdHRlcm4pOworCWZkID0gZ2l0X21rc3RlbXBfbW9kZSh0ZW1wbGF0ZSwgbW9kZSk7CisJaWYgKDAgPD0gZmQpCisJCXJldHVybiBmZDsKKworCS8qIHNsb3cgcGF0aCAqLworCS8qIHNvbWUgbWtzdGVtcCBpbXBsZW1lbnRhdGlvbnMgZXJhc2UgdGVtcGxhdGUgb24gZmFpbHVyZSAqLworCXNucHJpbnRmKHRlbXBsYXRlLCBsaW1pdCwgIiVzLyVzIiwKKwkJIGdldF9vYmplY3RfZGlyZWN0b3J5KCksIHBhdHRlcm4pOworCXNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXModGVtcGxhdGUpOworCXJldHVybiB4bWtzdGVtcF9tb2RlKHRlbXBsYXRlLCBtb2RlKTsKK30KKworaW50IG9kYl9wYWNrX2tlZXAoY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVzeiwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgZmQ7CisKKwlzbnByaW50ZihuYW1lLCBuYW1lc3osICIlcy9wYWNrL3BhY2stJXMua2VlcCIsCisJCSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBzaGExX3RvX2hleChzaGExKSk7CisJZmQgPSBvcGVuKG5hbWUsIE9fUkRXUnxPX0NSRUFUfE9fRVhDTCwgMDYwMCk7CisJaWYgKDAgPD0gZmQpCisJCXJldHVybiBmZDsKKworCS8qIHNsb3cgcGF0aCAqLworCXNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMobmFtZSk7CisJcmV0dXJuIG9wZW4obmFtZSwgT19SRFdSfE9fQ1JFQVR8T19FWENMLCAwNjAwKTsKK30KKworY2hhciAqZ2V0X2luZGV4X2ZpbGUodm9pZCkKK3sKKwlpZiAoIWdpdF9pbmRleF9maWxlKQorCQlzZXR1cF9naXRfZW52KCk7CisJcmV0dXJuIGdpdF9pbmRleF9maWxlOworfQorCitjaGFyICpnZXRfZ3JhZnRfZmlsZSh2b2lkKQoreworCWlmICghZ2l0X2dyYWZ0X2ZpbGUpCisJCXNldHVwX2dpdF9lbnYoKTsKKwlyZXR1cm4gZ2l0X2dyYWZ0X2ZpbGU7Cit9CisKK2ludCBzZXRfZ2l0X2Rpcihjb25zdCBjaGFyICpwYXRoKQoreworCWlmIChzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgcGF0aCwgMSkpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHNldCBHSVRfRElSIHRvICclcyciLCBwYXRoKTsKKwlzZXR1cF9naXRfZW52KCk7CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9sb2dfb3V0cHV0X2VuY29kaW5nKHZvaWQpCit7CisJcmV0dXJuIGdpdF9sb2dfb3V0cHV0X2VuY29kaW5nID8gZ2l0X2xvZ19vdXRwdXRfZW5jb2RpbmcKKwkJOiBnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZygpOworfQorCitjb25zdCBjaGFyICpnZXRfY29tbWl0X291dHB1dF9lbmNvZGluZyh2b2lkKQoreworCXJldHVybiBnaXRfY29tbWl0X2VuY29kaW5nID8gZ2l0X2NvbW1pdF9lbmNvZGluZyA6ICJVVEYtOCI7Cit9CmRpZmYgLS1naXQgYS9ld2FoL2JpdG1hcC5jIGIvZXdhaC9iaXRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2FkNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvZXdhaC9iaXRtYXAuYwpAQCAtMCwwICsxLDIyMSBAQAorLyoqCisgKiBDb3B5cmlnaHQgMjAxMywgR2l0SHViLCBJbmMKKyAqIENvcHlyaWdodCAyMDA5LTIwMTMsIERhbmllbCBMZW1pcmUsIENsaWZmIE1vb24sCisgKglEYXZpZCBNY0ludG9zaCwgUm9iZXJ0IEJlY2hvLCBHb29nbGUgSW5jLiBhbmQgVmVyb25pa2EgWmVuegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImV3b2suaCIKKworI2RlZmluZSBFV0FIX01BU0soeCkgKChld29yZF90KTEgPDwgKHggJSBCSVRTX0lOX0VXT1JEKSkKKyNkZWZpbmUgRVdBSF9CTE9DSyh4KSAoeCAvIEJJVFNfSU5fRVdPUkQpCisKK3N0cnVjdCBiaXRtYXAgKmJpdG1hcF9uZXcodm9pZCkKK3sKKwlzdHJ1Y3QgYml0bWFwICpiaXRtYXAgPSBld2FoX21hbGxvYyhzaXplb2Yoc3RydWN0IGJpdG1hcCkpOworCWJpdG1hcC0+d29yZHMgPSBld2FoX2NhbGxvYygzMiwgc2l6ZW9mKGV3b3JkX3QpKTsKKwliaXRtYXAtPndvcmRfYWxsb2MgPSAzMjsKKwlyZXR1cm4gYml0bWFwOworfQorCit2b2lkIGJpdG1hcF9zZXQoc3RydWN0IGJpdG1hcCAqc2VsZiwgc2l6ZV90IHBvcykKK3sKKwlzaXplX3QgYmxvY2sgPSBFV0FIX0JMT0NLKHBvcyk7CisKKwlpZiAoYmxvY2sgPj0gc2VsZi0+d29yZF9hbGxvYykgeworCQlzaXplX3Qgb2xkX3NpemUgPSBzZWxmLT53b3JkX2FsbG9jOworCQlzZWxmLT53b3JkX2FsbG9jID0gYmxvY2sgKiAyOworCQlzZWxmLT53b3JkcyA9IGV3YWhfcmVhbGxvYyhzZWxmLT53b3JkcywKKwkJCXNlbGYtPndvcmRfYWxsb2MgKiBzaXplb2YoZXdvcmRfdCkpOworCisJCW1lbXNldChzZWxmLT53b3JkcyArIG9sZF9zaXplLCAweDAsCisJCQkoc2VsZi0+d29yZF9hbGxvYyAtIG9sZF9zaXplKSAqIHNpemVvZihld29yZF90KSk7CisJfQorCisJc2VsZi0+d29yZHNbYmxvY2tdIHw9IEVXQUhfTUFTSyhwb3MpOworfQorCit2b2lkIGJpdG1hcF9jbGVhcihzdHJ1Y3QgYml0bWFwICpzZWxmLCBzaXplX3QgcG9zKQoreworCXNpemVfdCBibG9jayA9IEVXQUhfQkxPQ0socG9zKTsKKworCWlmIChibG9jayA8IHNlbGYtPndvcmRfYWxsb2MpCisJCXNlbGYtPndvcmRzW2Jsb2NrXSAmPSB+RVdBSF9NQVNLKHBvcyk7Cit9CisKK2ludCBiaXRtYXBfZ2V0KHN0cnVjdCBiaXRtYXAgKnNlbGYsIHNpemVfdCBwb3MpCit7CisJc2l6ZV90IGJsb2NrID0gRVdBSF9CTE9DSyhwb3MpOworCXJldHVybiBibG9jayA8IHNlbGYtPndvcmRfYWxsb2MgJiYKKwkJKHNlbGYtPndvcmRzW2Jsb2NrXSAmIEVXQUhfTUFTSyhwb3MpKSAhPSAwOworfQorCitzdHJ1Y3QgZXdhaF9iaXRtYXAgKmJpdG1hcF90b19ld2FoKHN0cnVjdCBiaXRtYXAgKmJpdG1hcCkKK3sKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWggPSBld2FoX25ldygpOworCXNpemVfdCBpLCBydW5uaW5nX2VtcHR5X3dvcmRzID0gMDsKKwlld29yZF90IGxhc3Rfd29yZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYml0bWFwLT53b3JkX2FsbG9jOyArK2kpIHsKKwkJaWYgKGJpdG1hcC0+d29yZHNbaV0gPT0gMCkgeworCQkJcnVubmluZ19lbXB0eV93b3JkcysrOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAobGFzdF93b3JkICE9IDApCisJCQlld2FoX2FkZChld2FoLCBsYXN0X3dvcmQpOworCisJCWlmIChydW5uaW5nX2VtcHR5X3dvcmRzID4gMCkgeworCQkJZXdhaF9hZGRfZW1wdHlfd29yZHMoZXdhaCwgMCwgcnVubmluZ19lbXB0eV93b3Jkcyk7CisJCQlydW5uaW5nX2VtcHR5X3dvcmRzID0gMDsKKwkJfQorCisJCWxhc3Rfd29yZCA9IGJpdG1hcC0+d29yZHNbaV07CisJfQorCisJZXdhaF9hZGQoZXdhaCwgbGFzdF93b3JkKTsKKwlyZXR1cm4gZXdhaDsKK30KKworc3RydWN0IGJpdG1hcCAqZXdhaF90b19iaXRtYXAoc3RydWN0IGV3YWhfYml0bWFwICpld2FoKQoreworCXN0cnVjdCBiaXRtYXAgKmJpdG1hcCA9IGJpdG1hcF9uZXcoKTsKKwlzdHJ1Y3QgZXdhaF9pdGVyYXRvciBpdDsKKwlld29yZF90IGJsb3d1cDsKKwlzaXplX3QgaSA9IDA7CisKKwlld2FoX2l0ZXJhdG9yX2luaXQoJml0LCBld2FoKTsKKworCXdoaWxlIChld2FoX2l0ZXJhdG9yX25leHQoJmJsb3d1cCwgJml0KSkgeworCQlpZiAoaSA+PSBiaXRtYXAtPndvcmRfYWxsb2MpIHsKKwkJCWJpdG1hcC0+d29yZF9hbGxvYyAqPSAxLjU7CisJCQliaXRtYXAtPndvcmRzID0gZXdhaF9yZWFsbG9jKAorCQkJCWJpdG1hcC0+d29yZHMsIGJpdG1hcC0+d29yZF9hbGxvYyAqIHNpemVvZihld29yZF90KSk7CisJCX0KKworCQliaXRtYXAtPndvcmRzW2krK10gPSBibG93dXA7CisJfQorCisJYml0bWFwLT53b3JkX2FsbG9jID0gaTsKKwlyZXR1cm4gYml0bWFwOworfQorCit2b2lkIGJpdG1hcF9hbmRfbm90KHN0cnVjdCBiaXRtYXAgKnNlbGYsIHN0cnVjdCBiaXRtYXAgKm90aGVyKQoreworCWNvbnN0IHNpemVfdCBjb3VudCA9IChzZWxmLT53b3JkX2FsbG9jIDwgb3RoZXItPndvcmRfYWxsb2MpID8KKwkJc2VsZi0+d29yZF9hbGxvYyA6IG90aGVyLT53b3JkX2FsbG9jOworCisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKwkJc2VsZi0+d29yZHNbaV0gJj0gfm90aGVyLT53b3Jkc1tpXTsKK30KKwordm9pZCBiaXRtYXBfb3JfZXdhaChzdHJ1Y3QgYml0bWFwICpzZWxmLCBzdHJ1Y3QgZXdhaF9iaXRtYXAgKm90aGVyKQoreworCXNpemVfdCBvcmlnaW5hbF9zaXplID0gc2VsZi0+d29yZF9hbGxvYzsKKwlzaXplX3Qgb3RoZXJfZmluYWwgPSAob3RoZXItPmJpdF9zaXplIC8gQklUU19JTl9FV09SRCkgKyAxOworCXNpemVfdCBpID0gMDsKKwlzdHJ1Y3QgZXdhaF9pdGVyYXRvciBpdDsKKwlld29yZF90IHdvcmQ7CisKKwlpZiAoc2VsZi0+d29yZF9hbGxvYyA8IG90aGVyX2ZpbmFsKSB7CisJCXNlbGYtPndvcmRfYWxsb2MgPSBvdGhlcl9maW5hbDsKKwkJc2VsZi0+d29yZHMgPSBld2FoX3JlYWxsb2Moc2VsZi0+d29yZHMsCisJCQlzZWxmLT53b3JkX2FsbG9jICogc2l6ZW9mKGV3b3JkX3QpKTsKKwkJbWVtc2V0KHNlbGYtPndvcmRzICsgb3JpZ2luYWxfc2l6ZSwgMHgwLAorCQkJKHNlbGYtPndvcmRfYWxsb2MgLSBvcmlnaW5hbF9zaXplKSAqIHNpemVvZihld29yZF90KSk7CisJfQorCisJZXdhaF9pdGVyYXRvcl9pbml0KCZpdCwgb3RoZXIpOworCisJd2hpbGUgKGV3YWhfaXRlcmF0b3JfbmV4dCgmd29yZCwgJml0KSkKKwkJc2VsZi0+d29yZHNbaSsrXSB8PSB3b3JkOworfQorCit2b2lkIGJpdG1hcF9lYWNoX2JpdChzdHJ1Y3QgYml0bWFwICpzZWxmLCBld2FoX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKQoreworCXNpemVfdCBwb3MgPSAwLCBpOworCisJZm9yIChpID0gMDsgaSA8IHNlbGYtPndvcmRfYWxsb2M7ICsraSkgeworCQlld29yZF90IHdvcmQgPSBzZWxmLT53b3Jkc1tpXTsKKwkJdWludDMyX3Qgb2Zmc2V0OworCisJCWlmICh3b3JkID09IChld29yZF90KX4wKSB7CisJCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEJJVFNfSU5fRVdPUkQ7ICsrb2Zmc2V0KQorCQkJCWNhbGxiYWNrKHBvcysrLCBkYXRhKTsKKwkJfSBlbHNlIHsKKwkJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgQklUU19JTl9FV09SRDsgKytvZmZzZXQpIHsKKwkJCQlpZiAoKHdvcmQgPj4gb2Zmc2V0KSA9PSAwKQorCQkJCQlicmVhazsKKworCQkJCW9mZnNldCArPSBld2FoX2JpdF9jdHo2NCh3b3JkID4+IG9mZnNldCk7CisJCQkJY2FsbGJhY2socG9zICsgb2Zmc2V0LCBkYXRhKTsKKwkJCX0KKwkJCXBvcyArPSBCSVRTX0lOX0VXT1JEOworCQl9CisJfQorfQorCitzaXplX3QgYml0bWFwX3BvcGNvdW50KHN0cnVjdCBiaXRtYXAgKnNlbGYpCit7CisJc2l6ZV90IGksIGNvdW50ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzZWxmLT53b3JkX2FsbG9jOyArK2kpCisJCWNvdW50ICs9IGV3YWhfYml0X3BvcGNvdW50NjQoc2VsZi0+d29yZHNbaV0pOworCisJcmV0dXJuIGNvdW50OworfQorCitpbnQgYml0bWFwX2VxdWFscyhzdHJ1Y3QgYml0bWFwICpzZWxmLCBzdHJ1Y3QgYml0bWFwICpvdGhlcikKK3sKKwlzdHJ1Y3QgYml0bWFwICpiaWcsICpzbWFsbDsKKwlzaXplX3QgaTsKKworCWlmIChzZWxmLT53b3JkX2FsbG9jIDwgb3RoZXItPndvcmRfYWxsb2MpIHsKKwkJc21hbGwgPSBzZWxmOworCQliaWcgPSBvdGhlcjsKKwl9IGVsc2UgeworCQlzbWFsbCA9IG90aGVyOworCQliaWcgPSBzZWxmOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzbWFsbC0+d29yZF9hbGxvYzsgKytpKSB7CisJCWlmIChzbWFsbC0+d29yZHNbaV0gIT0gYmlnLT53b3Jkc1tpXSkKKwkJCXJldHVybiAwOworCX0KKworCWZvciAoOyBpIDwgYmlnLT53b3JkX2FsbG9jOyArK2kpIHsKKwkJaWYgKGJpZy0+d29yZHNbaV0gIT0gMCkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCit2b2lkIGJpdG1hcF9yZXNldChzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit7CisJbWVtc2V0KGJpdG1hcC0+d29yZHMsIDB4MCwgYml0bWFwLT53b3JkX2FsbG9jICogc2l6ZW9mKGV3b3JkX3QpKTsKK30KKwordm9pZCBiaXRtYXBfZnJlZShzdHJ1Y3QgYml0bWFwICpiaXRtYXApCit7CisJaWYgKGJpdG1hcCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmcmVlKGJpdG1hcC0+d29yZHMpOworCWZyZWUoYml0bWFwKTsKK30KZGlmZiAtLWdpdCBhL2V3YWgvZXdhaF9iaXRtYXAuYyBiL2V3YWgvZXdhaF9iaXRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTIyNDM3Ci0tLSAvZGV2L251bGwKKysrIGIvZXdhaC9ld2FoX2JpdG1hcC5jCkBAIC0wLDAgKzEsNzE0IEBACisvKioKKyAqIENvcHlyaWdodCAyMDEzLCBHaXRIdWIsIEluYworICogQ29weXJpZ2h0IDIwMDktMjAxMywgRGFuaWVsIExlbWlyZSwgQ2xpZmYgTW9vbiwKKyAqCURhdmlkIE1jSW50b3NoLCBSb2JlcnQgQmVjaG8sIEdvb2dsZSBJbmMuIGFuZCBWZXJvbmlrYSBaZW56CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiZXdvay5oIgorI2luY2x1ZGUgImV3b2tfcmx3LmgiCisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IG1pbl9zaXplKHNpemVfdCBhLCBzaXplX3QgYikKK3sKKwlyZXR1cm4gYSA8IGIgPyBhIDogYjsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QgbWF4X3NpemUoc2l6ZV90IGEsIHNpemVfdCBiKQoreworCXJldHVybiBhID4gYiA/IGEgOiBiOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2dyb3coc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBzaXplX3QgbmV3X3NpemUpCit7CisJc2l6ZV90IHJsd19vZmZzZXQgPSAodWludDhfdCAqKXNlbGYtPnJsdyAtICh1aW50OF90ICopc2VsZi0+YnVmZmVyOworCisJaWYgKHNlbGYtPmFsbG9jX3NpemUgPj0gbmV3X3NpemUpCisJCXJldHVybjsKKworCXNlbGYtPmFsbG9jX3NpemUgPSBuZXdfc2l6ZTsKKwlzZWxmLT5idWZmZXIgPSBld2FoX3JlYWxsb2Moc2VsZi0+YnVmZmVyLAorCQlzZWxmLT5hbGxvY19zaXplICogc2l6ZW9mKGV3b3JkX3QpKTsKKwlzZWxmLT5ybHcgPSBzZWxmLT5idWZmZXIgKyAocmx3X29mZnNldCAvIHNpemVvZihld29yZF90KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfcHVzaChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGV3b3JkX3QgdmFsdWUpCit7CisJaWYgKHNlbGYtPmJ1ZmZlcl9zaXplICsgMSA+PSBzZWxmLT5hbGxvY19zaXplKQorCQlidWZmZXJfZ3JvdyhzZWxmLCBzZWxmLT5idWZmZXJfc2l6ZSAqIDMgLyAyKTsKKworCXNlbGYtPmJ1ZmZlcltzZWxmLT5idWZmZXJfc2l6ZSsrXSA9IHZhbHVlOworfQorCitzdGF0aWMgdm9pZCBidWZmZXJfcHVzaF9ybHcoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBld29yZF90IHZhbHVlKQoreworCWJ1ZmZlcl9wdXNoKHNlbGYsIHZhbHVlKTsKKwlzZWxmLT5ybHcgPSBzZWxmLT5idWZmZXIgKyBzZWxmLT5idWZmZXJfc2l6ZSAtIDE7Cit9CisKK3N0YXRpYyBzaXplX3QgYWRkX2VtcHR5X3dvcmRzKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgaW50IHYsIHNpemVfdCBudW1iZXIpCit7CisJc2l6ZV90IGFkZGVkID0gMDsKKwlld29yZF90IHJ1bmxlbiwgY2FuX2FkZDsKKworCWlmIChybHdfZ2V0X3J1bl9iaXQoc2VsZi0+cmx3KSAhPSB2ICYmIHJsd19zaXplKHNlbGYtPnJsdykgPT0gMCkgeworCQlybHdfc2V0X3J1bl9iaXQoc2VsZi0+cmx3LCB2KTsKKwl9IGVsc2UgaWYgKHJsd19nZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcpICE9IDAgfHwKKwkJCXJsd19nZXRfcnVuX2JpdChzZWxmLT5ybHcpICE9IHYpIHsKKwkJYnVmZmVyX3B1c2hfcmx3KHNlbGYsIDApOworCQlpZiAodikgcmx3X3NldF9ydW5fYml0KHNlbGYtPnJsdywgdik7CisJCWFkZGVkKys7CisJfQorCisJcnVubGVuID0gcmx3X2dldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcpOworCWNhbl9hZGQgPSBtaW5fc2l6ZShudW1iZXIsIFJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlQgLSBydW5sZW4pOworCisJcmx3X3NldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcsIHJ1bmxlbiArIGNhbl9hZGQpOworCW51bWJlciAtPSBjYW5fYWRkOworCisJd2hpbGUgKG51bWJlciA+PSBSTFdfTEFSR0VTVF9SVU5OSU5HX0NPVU5UKSB7CisJCWJ1ZmZlcl9wdXNoX3JsdyhzZWxmLCAwKTsKKwkJYWRkZWQrKzsKKwkJaWYgKHYpIHJsd19zZXRfcnVuX2JpdChzZWxmLT5ybHcsIHYpOworCQlybHdfc2V0X3J1bm5pbmdfbGVuKHNlbGYtPnJsdywgUkxXX0xBUkdFU1RfUlVOTklOR19DT1VOVCk7CisJCW51bWJlciAtPSBSTFdfTEFSR0VTVF9SVU5OSU5HX0NPVU5UOworCX0KKworCWlmIChudW1iZXIgPiAwKSB7CisJCWJ1ZmZlcl9wdXNoX3JsdyhzZWxmLCAwKTsKKwkJYWRkZWQrKzsKKworCQlpZiAodikgcmx3X3NldF9ydW5fYml0KHNlbGYtPnJsdywgdik7CisJCXJsd19zZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3LCBudW1iZXIpOworCX0KKworCXJldHVybiBhZGRlZDsKK30KKworc2l6ZV90IGV3YWhfYWRkX2VtcHR5X3dvcmRzKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgaW50IHYsIHNpemVfdCBudW1iZXIpCit7CisJaWYgKG51bWJlciA9PSAwKQorCQlyZXR1cm4gMDsKKworCXNlbGYtPmJpdF9zaXplICs9IG51bWJlciAqIEJJVFNfSU5fRVdPUkQ7CisJcmV0dXJuIGFkZF9lbXB0eV93b3JkcyhzZWxmLCB2LCBudW1iZXIpOworfQorCitzdGF0aWMgc2l6ZV90IGFkZF9saXRlcmFsKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgZXdvcmRfdCBuZXdfZGF0YSkKK3sKKwlld29yZF90IGN1cnJlbnRfbnVtID0gcmx3X2dldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdyk7CisKKwlpZiAoY3VycmVudF9udW0gPj0gUkxXX0xBUkdFU1RfTElURVJBTF9DT1VOVCkgeworCQlidWZmZXJfcHVzaF9ybHcoc2VsZiwgMCk7CisKKwkJcmx3X3NldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdywgMSk7CisJCWJ1ZmZlcl9wdXNoKHNlbGYsIG5ld19kYXRhKTsKKwkJcmV0dXJuIDI7CisJfQorCisJcmx3X3NldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdywgY3VycmVudF9udW0gKyAxKTsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWFzc2VydChybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3KSA9PSBjdXJyZW50X251bSArIDEpOworCisJYnVmZmVyX3B1c2goc2VsZiwgbmV3X2RhdGEpOworCXJldHVybiAxOworfQorCit2b2lkIGV3YWhfYWRkX2RpcnR5X3dvcmRzKAorCXN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgY29uc3QgZXdvcmRfdCAqYnVmZmVyLAorCXNpemVfdCBudW1iZXIsIGludCBuZWdhdGUpCit7CisJc2l6ZV90IGxpdGVyYWxzLCBjYW5fYWRkOworCisJd2hpbGUgKDEpIHsKKwkJbGl0ZXJhbHMgPSBybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3KTsKKwkJY2FuX2FkZCA9IG1pbl9zaXplKG51bWJlciwgUkxXX0xBUkdFU1RfTElURVJBTF9DT1VOVCAtIGxpdGVyYWxzKTsKKworCQlybHdfc2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3LCBsaXRlcmFscyArIGNhbl9hZGQpOworCisJCWlmIChzZWxmLT5idWZmZXJfc2l6ZSArIGNhbl9hZGQgPj0gc2VsZi0+YWxsb2Nfc2l6ZSkKKwkJCWJ1ZmZlcl9ncm93KHNlbGYsIChzZWxmLT5idWZmZXJfc2l6ZSArIGNhbl9hZGQpICogMyAvIDIpOworCisJCWlmIChuZWdhdGUpIHsKKwkJCXNpemVfdCBpOworCQkJZm9yIChpID0gMDsgaSA8IGNhbl9hZGQ7ICsraSkKKwkJCQlzZWxmLT5idWZmZXJbc2VsZi0+YnVmZmVyX3NpemUrK10gPSB+YnVmZmVyW2ldOworCQl9IGVsc2UgeworCQkJbWVtY3B5KHNlbGYtPmJ1ZmZlciArIHNlbGYtPmJ1ZmZlcl9zaXplLAorCQkJCWJ1ZmZlciwgY2FuX2FkZCAqIHNpemVvZihld29yZF90KSk7CisJCQlzZWxmLT5idWZmZXJfc2l6ZSArPSBjYW5fYWRkOworCQl9CisKKwkJc2VsZi0+Yml0X3NpemUgKz0gY2FuX2FkZCAqIEJJVFNfSU5fRVdPUkQ7CisKKwkJaWYgKG51bWJlciAtIGNhbl9hZGQgPT0gMCkKKwkJCWJyZWFrOworCisJCWJ1ZmZlcl9wdXNoX3JsdyhzZWxmLCAwKTsKKwkJYnVmZmVyICs9IGNhbl9hZGQ7CisJCW51bWJlciAtPSBjYW5fYWRkOworCX0KK30KKworc3RhdGljIHNpemVfdCBhZGRfZW1wdHlfd29yZChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGludCB2KQoreworCWludCBub19saXRlcmFsID0gKHJsd19nZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcpID09IDApOworCWV3b3JkX3QgcnVuX2xlbiA9IHJsd19nZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3KTsKKworCWlmIChub19saXRlcmFsICYmIHJ1bl9sZW4gPT0gMCkgeworCQlybHdfc2V0X3J1bl9iaXQoc2VsZi0+cmx3LCB2KTsKKwkJYXNzZXJ0KHJsd19nZXRfcnVuX2JpdChzZWxmLT5ybHcpID09IHYpOworCX0KKworCWlmIChub19saXRlcmFsICYmIHJsd19nZXRfcnVuX2JpdChzZWxmLT5ybHcpID09IHYgJiYKKwkJcnVuX2xlbiA8IFJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlQpIHsKKwkJcmx3X3NldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcsIHJ1bl9sZW4gKyAxKTsKKwkJYXNzZXJ0KHJsd19nZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3KSA9PSBydW5fbGVuICsgMSk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCWJ1ZmZlcl9wdXNoX3JsdyhzZWxmLCAwKTsKKworCQlhc3NlcnQocmx3X2dldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcpID09IDApOworCQlhc3NlcnQocmx3X2dldF9ydW5fYml0KHNlbGYtPnJsdykgPT0gMCk7CisJCWFzc2VydChybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3KSA9PSAwKTsKKworCQlybHdfc2V0X3J1bl9iaXQoc2VsZi0+cmx3LCB2KTsKKwkJYXNzZXJ0KHJsd19nZXRfcnVuX2JpdChzZWxmLT5ybHcpID09IHYpOworCisJCXJsd19zZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3LCAxKTsKKwkJYXNzZXJ0KHJsd19nZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3KSA9PSAxKTsKKwkJYXNzZXJ0KHJsd19nZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcpID09IDApOworCQlyZXR1cm4gMTsKKwl9Cit9CisKK3NpemVfdCBld2FoX2FkZChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGV3b3JkX3Qgd29yZCkKK3sKKwlzZWxmLT5iaXRfc2l6ZSArPSBCSVRTX0lOX0VXT1JEOworCisJaWYgKHdvcmQgPT0gMCkKKwkJcmV0dXJuIGFkZF9lbXB0eV93b3JkKHNlbGYsIDApOworCisJaWYgKHdvcmQgPT0gKGV3b3JkX3QpKH4wKSkKKwkJcmV0dXJuIGFkZF9lbXB0eV93b3JkKHNlbGYsIDEpOworCisJcmV0dXJuIGFkZF9saXRlcmFsKHNlbGYsIHdvcmQpOworfQorCit2b2lkIGV3YWhfc2V0KHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgc2l6ZV90IGkpCit7CisJY29uc3Qgc2l6ZV90IGRpc3QgPQorCQkoaSArIEJJVFNfSU5fRVdPUkQpIC8gQklUU19JTl9FV09SRCAtCisJCShzZWxmLT5iaXRfc2l6ZSArIEJJVFNfSU5fRVdPUkQgLSAxKSAvIEJJVFNfSU5fRVdPUkQ7CisKKwlhc3NlcnQoaSA+PSBzZWxmLT5iaXRfc2l6ZSk7CisKKwlzZWxmLT5iaXRfc2l6ZSA9IGkgKyAxOworCisJaWYgKGRpc3QgPiAwKSB7CisJCWlmIChkaXN0ID4gMSkKKwkJCWFkZF9lbXB0eV93b3JkcyhzZWxmLCAwLCBkaXN0IC0gMSk7CisKKwkJYWRkX2xpdGVyYWwoc2VsZiwgKGV3b3JkX3QpMSA8PCAoaSAlIEJJVFNfSU5fRVdPUkQpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChybHdfZ2V0X2xpdGVyYWxfd29yZHMoc2VsZi0+cmx3KSA9PSAwKSB7CisJCXJsd19zZXRfcnVubmluZ19sZW4oc2VsZi0+cmx3LAorCQkJcmx3X2dldF9ydW5uaW5nX2xlbihzZWxmLT5ybHcpIC0gMSk7CisJCWFkZF9saXRlcmFsKHNlbGYsIChld29yZF90KTEgPDwgKGkgJSBCSVRTX0lOX0VXT1JEKSk7CisJCXJldHVybjsKKwl9CisKKwlzZWxmLT5idWZmZXJbc2VsZi0+YnVmZmVyX3NpemUgLSAxXSB8PQorCQkoKGV3b3JkX3QpMSA8PCAoaSAlIEJJVFNfSU5fRVdPUkQpKTsKKworCS8qIGNoZWNrIGlmIHdlIGp1c3QgY29tcGxldGVkIGEgc3RyZWFtIG9mIDFzICovCisJaWYgKHNlbGYtPmJ1ZmZlcltzZWxmLT5idWZmZXJfc2l6ZSAtIDFdID09IChld29yZF90KSh+MCkpIHsKKwkJc2VsZi0+YnVmZmVyWy0tc2VsZi0+YnVmZmVyX3NpemVdID0gMDsKKwkJcmx3X3NldF9saXRlcmFsX3dvcmRzKHNlbGYtPnJsdywKKwkJCXJsd19nZXRfbGl0ZXJhbF93b3JkcyhzZWxmLT5ybHcpIC0gMSk7CisJCWFkZF9lbXB0eV93b3JkKHNlbGYsIDEpOworCX0KK30KKwordm9pZCBld2FoX2VhY2hfYml0KHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgdm9pZCAoKmNhbGxiYWNrKShzaXplX3QsIHZvaWQqKSwgdm9pZCAqcGF5bG9hZCkKK3sKKwlzaXplX3QgcG9zID0gMDsKKwlzaXplX3QgcG9pbnRlciA9IDA7CisJc2l6ZV90IGs7CisKKwl3aGlsZSAocG9pbnRlciA8IHNlbGYtPmJ1ZmZlcl9zaXplKSB7CisJCWV3b3JkX3QgKndvcmQgPSAmc2VsZi0+YnVmZmVyW3BvaW50ZXJdOworCisJCWlmIChybHdfZ2V0X3J1bl9iaXQod29yZCkpIHsKKwkJCXNpemVfdCBsZW4gPSBybHdfZ2V0X3J1bm5pbmdfbGVuKHdvcmQpICogQklUU19JTl9FV09SRDsKKwkJCWZvciAoayA9IDA7IGsgPCBsZW47ICsraywgKytwb3MpCisJCQkJY2FsbGJhY2socG9zLCBwYXlsb2FkKTsKKwkJfSBlbHNlIHsKKwkJCXBvcyArPSBybHdfZ2V0X3J1bm5pbmdfbGVuKHdvcmQpICogQklUU19JTl9FV09SRDsKKwkJfQorCisJCSsrcG9pbnRlcjsKKworCQlmb3IgKGsgPSAwOyBrIDwgcmx3X2dldF9saXRlcmFsX3dvcmRzKHdvcmQpOyArK2spIHsKKwkJCWludCBjOworCisJCQkvKiB0b2RvOiB6ZXJvIGNvdW50IG9wdGltaXphdGlvbiAqLworCQkJZm9yIChjID0gMDsgYyA8IEJJVFNfSU5fRVdPUkQ7ICsrYywgKytwb3MpIHsKKwkJCQlpZiAoKHNlbGYtPmJ1ZmZlcltwb2ludGVyXSAmICgoZXdvcmRfdCkxIDw8IGMpKSAhPSAwKQorCQkJCQljYWxsYmFjayhwb3MsIHBheWxvYWQpOworCQkJfQorCisJCQkrK3BvaW50ZXI7CisJCX0KKwl9Cit9CisKK3N0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9uZXcodm9pZCkKK3sKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGY7CisKKwlzZWxmID0gZXdhaF9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBld2FoX2JpdG1hcCkpOworCWlmIChzZWxmID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJc2VsZi0+YnVmZmVyID0gZXdhaF9tYWxsb2MoMzIgKiBzaXplb2YoZXdvcmRfdCkpOworCXNlbGYtPmFsbG9jX3NpemUgPSAzMjsKKworCWV3YWhfY2xlYXIoc2VsZik7CisJcmV0dXJuIHNlbGY7Cit9CisKK3ZvaWQgZXdhaF9jbGVhcihzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYpCit7CisJc2VsZi0+YnVmZmVyX3NpemUgPSAxOworCXNlbGYtPmJ1ZmZlclswXSA9IDA7CisJc2VsZi0+Yml0X3NpemUgPSAwOworCXNlbGYtPnJsdyA9IHNlbGYtPmJ1ZmZlcjsKK30KKwordm9pZCBld2FoX2ZyZWUoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmKQoreworCWlmICghc2VsZikKKwkJcmV0dXJuOworCisJaWYgKHNlbGYtPmFsbG9jX3NpemUpCisJCWZyZWUoc2VsZi0+YnVmZmVyKTsKKworCWZyZWUoc2VsZik7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfbmV3X3JsdyhzdHJ1Y3QgZXdhaF9pdGVyYXRvciAqaXQpCit7CisJY29uc3QgZXdvcmRfdCAqd29yZCA9IE5VTEw7CisKKwlpdC0+bGl0ZXJhbHMgPSAwOworCWl0LT5jb21wcmVzc2VkID0gMDsKKworCXdoaWxlICgxKSB7CisJCXdvcmQgPSAmaXQtPmJ1ZmZlcltpdC0+cG9pbnRlcl07CisKKwkJaXQtPnJsID0gcmx3X2dldF9ydW5uaW5nX2xlbih3b3JkKTsKKwkJaXQtPmx3ID0gcmx3X2dldF9saXRlcmFsX3dvcmRzKHdvcmQpOworCQlpdC0+YiA9IHJsd19nZXRfcnVuX2JpdCh3b3JkKTsKKworCQlpZiAoaXQtPnJsIHx8IGl0LT5sdykKKwkJCXJldHVybjsKKworCQlpZiAoaXQtPnBvaW50ZXIgPCBpdC0+YnVmZmVyX3NpemUgLSAxKSB7CisJCQlpdC0+cG9pbnRlcisrOworCQl9IGVsc2UgeworCQkJaXQtPnBvaW50ZXIgPSBpdC0+YnVmZmVyX3NpemU7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK2ludCBld2FoX2l0ZXJhdG9yX25leHQoZXdvcmRfdCAqbmV4dCwgc3RydWN0IGV3YWhfaXRlcmF0b3IgKml0KQoreworCWlmIChpdC0+cG9pbnRlciA+PSBpdC0+YnVmZmVyX3NpemUpCisJCXJldHVybiAwOworCisJaWYgKGl0LT5jb21wcmVzc2VkIDwgaXQtPnJsKSB7CisJCWl0LT5jb21wcmVzc2VkKys7CisJCSpuZXh0ID0gaXQtPmIgPyAoZXdvcmRfdCkofjApIDogMDsKKwl9IGVsc2UgeworCQlhc3NlcnQoaXQtPmxpdGVyYWxzIDwgaXQtPmx3KTsKKworCQlpdC0+bGl0ZXJhbHMrKzsKKwkJaXQtPnBvaW50ZXIrKzsKKworCQlhc3NlcnQoaXQtPnBvaW50ZXIgPCBpdC0+YnVmZmVyX3NpemUpOworCisJCSpuZXh0ID0gaXQtPmJ1ZmZlcltpdC0+cG9pbnRlcl07CisJfQorCisJaWYgKGl0LT5jb21wcmVzc2VkID09IGl0LT5ybCAmJiBpdC0+bGl0ZXJhbHMgPT0gaXQtPmx3KSB7CisJCWlmICgrK2l0LT5wb2ludGVyIDwgaXQtPmJ1ZmZlcl9zaXplKQorCQkJcmVhZF9uZXdfcmx3KGl0KTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCBld2FoX2l0ZXJhdG9yX2luaXQoc3RydWN0IGV3YWhfaXRlcmF0b3IgKml0LCBzdHJ1Y3QgZXdhaF9iaXRtYXAgKnBhcmVudCkKK3sKKwlpdC0+YnVmZmVyID0gcGFyZW50LT5idWZmZXI7CisJaXQtPmJ1ZmZlcl9zaXplID0gcGFyZW50LT5idWZmZXJfc2l6ZTsKKwlpdC0+cG9pbnRlciA9IDA7CisKKwlpdC0+bHcgPSAwOworCWl0LT5ybCA9IDA7CisJaXQtPmNvbXByZXNzZWQgPSAwOworCWl0LT5saXRlcmFscyA9IDA7CisJaXQtPmIgPSAwOworCisJaWYgKGl0LT5wb2ludGVyIDwgaXQtPmJ1ZmZlcl9zaXplKQorCQlyZWFkX25ld19ybHcoaXQpOworfQorCit2b2lkIGV3YWhfbm90KHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZikKK3sKKwlzaXplX3QgcG9pbnRlciA9IDA7CisKKwl3aGlsZSAocG9pbnRlciA8IHNlbGYtPmJ1ZmZlcl9zaXplKSB7CisJCWV3b3JkX3QgKndvcmQgPSAmc2VsZi0+YnVmZmVyW3BvaW50ZXJdOworCQlzaXplX3QgbGl0ZXJhbHMsIGs7CisKKwkJcmx3X3hvcl9ydW5fYml0KHdvcmQpOworCQkrK3BvaW50ZXI7CisKKwkJbGl0ZXJhbHMgPSBybHdfZ2V0X2xpdGVyYWxfd29yZHMod29yZCk7CisJCWZvciAoayA9IDA7IGsgPCBsaXRlcmFsczsgKytrKSB7CisJCQlzZWxmLT5idWZmZXJbcG9pbnRlcl0gPSB+c2VsZi0+YnVmZmVyW3BvaW50ZXJdOworCQkJKytwb2ludGVyOworCQl9CisJfQorfQorCit2b2lkIGV3YWhfeG9yKAorCXN0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9pLAorCXN0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9qLAorCXN0cnVjdCBld2FoX2JpdG1hcCAqb3V0KQoreworCXN0cnVjdCBybHdfaXRlcmF0b3Igcmx3X2k7CisJc3RydWN0IHJsd19pdGVyYXRvciBybHdfajsKKwlzaXplX3QgbGl0ZXJhbHM7CisKKwlybHdpdF9pbml0KCZybHdfaSwgZXdhaF9pKTsKKwlybHdpdF9pbml0KCZybHdfaiwgZXdhaF9qKTsKKworCXdoaWxlIChybHdpdF93b3JkX3NpemUoJnJsd19pKSA+IDAgJiYgcmx3aXRfd29yZF9zaXplKCZybHdfaikgPiAwKSB7CisJCXdoaWxlIChybHdfaS5ybHcucnVubmluZ19sZW4gPiAwIHx8IHJsd19qLnJsdy5ydW5uaW5nX2xlbiA+IDApIHsKKwkJCXN0cnVjdCBybHdfaXRlcmF0b3IgKnByZXksICpwcmVkYXRvcjsKKwkJCXNpemVfdCBpbmRleDsKKwkJCWludCBuZWdhdGVfd29yZHM7CisKKwkJCWlmIChybHdfaS5ybHcucnVubmluZ19sZW4gPCBybHdfai5ybHcucnVubmluZ19sZW4pIHsKKwkJCQlwcmV5ID0gJnJsd19pOworCQkJCXByZWRhdG9yID0gJnJsd19qOworCQkJfSBlbHNlIHsKKwkJCQlwcmV5ID0gJnJsd19qOworCQkJCXByZWRhdG9yID0gJnJsd19pOworCQkJfQorCisJCQluZWdhdGVfd29yZHMgPSAhIXByZWRhdG9yLT5ybHcucnVubmluZ19iaXQ7CisJCQlpbmRleCA9IHJsd2l0X2Rpc2NoYXJnZShwcmV5LCBvdXQsCisJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbiwgbmVnYXRlX3dvcmRzKTsKKworCQkJZXdhaF9hZGRfZW1wdHlfd29yZHMob3V0LCBuZWdhdGVfd29yZHMsCisJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbiAtIGluZGV4KTsKKworCQkJcmx3aXRfZGlzY2FyZF9maXJzdF93b3JkcyhwcmVkYXRvciwKKwkJCQlwcmVkYXRvci0+cmx3LnJ1bm5pbmdfbGVuKTsKKwkJfQorCisJCWxpdGVyYWxzID0gbWluX3NpemUoCisJCQlybHdfaS5ybHcubGl0ZXJhbF93b3JkcywKKwkJCXJsd19qLnJsdy5saXRlcmFsX3dvcmRzKTsKKworCQlpZiAobGl0ZXJhbHMpIHsKKwkJCXNpemVfdCBrOworCisJCQlmb3IgKGsgPSAwOyBrIDwgbGl0ZXJhbHM7ICsraykgeworCQkJCWV3YWhfYWRkKG91dCwKKwkJCQkJcmx3X2kuYnVmZmVyW3Jsd19pLmxpdGVyYWxfd29yZF9zdGFydCArIGtdIF4KKwkJCQkJcmx3X2ouYnVmZmVyW3Jsd19qLmxpdGVyYWxfd29yZF9zdGFydCArIGtdCisJCQkJKTsKKwkJCX0KKworCQkJcmx3aXRfZGlzY2FyZF9maXJzdF93b3Jkcygmcmx3X2ksIGxpdGVyYWxzKTsKKwkJCXJsd2l0X2Rpc2NhcmRfZmlyc3Rfd29yZHMoJnJsd19qLCBsaXRlcmFscyk7CisJCX0KKwl9CisKKwlpZiAocmx3aXRfd29yZF9zaXplKCZybHdfaSkgPiAwKQorCQlybHdpdF9kaXNjaGFyZ2UoJnJsd19pLCBvdXQsIH4wLCAwKTsKKwllbHNlCisJCXJsd2l0X2Rpc2NoYXJnZSgmcmx3X2osIG91dCwgfjAsIDApOworCisJb3V0LT5iaXRfc2l6ZSA9IG1heF9zaXplKGV3YWhfaS0+Yml0X3NpemUsIGV3YWhfai0+Yml0X3NpemUpOworfQorCit2b2lkIGV3YWhfYW5kKAorCXN0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9pLAorCXN0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9qLAorCXN0cnVjdCBld2FoX2JpdG1hcCAqb3V0KQoreworCXN0cnVjdCBybHdfaXRlcmF0b3Igcmx3X2k7CisJc3RydWN0IHJsd19pdGVyYXRvciBybHdfajsKKwlzaXplX3QgbGl0ZXJhbHM7CisKKwlybHdpdF9pbml0KCZybHdfaSwgZXdhaF9pKTsKKwlybHdpdF9pbml0KCZybHdfaiwgZXdhaF9qKTsKKworCXdoaWxlIChybHdpdF93b3JkX3NpemUoJnJsd19pKSA+IDAgJiYgcmx3aXRfd29yZF9zaXplKCZybHdfaikgPiAwKSB7CisJCXdoaWxlIChybHdfaS5ybHcucnVubmluZ19sZW4gPiAwIHx8IHJsd19qLnJsdy5ydW5uaW5nX2xlbiA+IDApIHsKKwkJCXN0cnVjdCBybHdfaXRlcmF0b3IgKnByZXksICpwcmVkYXRvcjsKKworCQkJaWYgKHJsd19pLnJsdy5ydW5uaW5nX2xlbiA8IHJsd19qLnJsdy5ydW5uaW5nX2xlbikgeworCQkJCXByZXkgPSAmcmx3X2k7CisJCQkJcHJlZGF0b3IgPSAmcmx3X2o7CisJCQl9IGVsc2UgeworCQkJCXByZXkgPSAmcmx3X2o7CisJCQkJcHJlZGF0b3IgPSAmcmx3X2k7CisJCQl9CisKKwkJCWlmIChwcmVkYXRvci0+cmx3LnJ1bm5pbmdfYml0ID09IDApIHsKKwkJCQlld2FoX2FkZF9lbXB0eV93b3JkcyhvdXQsIDAsCisJCQkJCXByZWRhdG9yLT5ybHcucnVubmluZ19sZW4pOworCQkJCXJsd2l0X2Rpc2NhcmRfZmlyc3Rfd29yZHMocHJleSwKKwkJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbik7CisJCQkJcmx3aXRfZGlzY2FyZF9maXJzdF93b3JkcyhwcmVkYXRvciwKKwkJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbik7CisJCQl9IGVsc2UgeworCQkJCXNpemVfdCBpbmRleCA9IHJsd2l0X2Rpc2NoYXJnZShwcmV5LCBvdXQsCisJCQkJCXByZWRhdG9yLT5ybHcucnVubmluZ19sZW4sIDApOworCQkJCWV3YWhfYWRkX2VtcHR5X3dvcmRzKG91dCwgMCwKKwkJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbiAtIGluZGV4KTsKKwkJCQlybHdpdF9kaXNjYXJkX2ZpcnN0X3dvcmRzKHByZWRhdG9yLAorCQkJCQlwcmVkYXRvci0+cmx3LnJ1bm5pbmdfbGVuKTsKKwkJCX0KKwkJfQorCisJCWxpdGVyYWxzID0gbWluX3NpemUoCisJCQlybHdfaS5ybHcubGl0ZXJhbF93b3JkcywKKwkJCXJsd19qLnJsdy5saXRlcmFsX3dvcmRzKTsKKworCQlpZiAobGl0ZXJhbHMpIHsKKwkJCXNpemVfdCBrOworCisJCQlmb3IgKGsgPSAwOyBrIDwgbGl0ZXJhbHM7ICsraykgeworCQkJCWV3YWhfYWRkKG91dCwKKwkJCQkJcmx3X2kuYnVmZmVyW3Jsd19pLmxpdGVyYWxfd29yZF9zdGFydCArIGtdICYKKwkJCQkJcmx3X2ouYnVmZmVyW3Jsd19qLmxpdGVyYWxfd29yZF9zdGFydCArIGtdCisJCQkJKTsKKwkJCX0KKworCQkJcmx3aXRfZGlzY2FyZF9maXJzdF93b3Jkcygmcmx3X2ksIGxpdGVyYWxzKTsKKwkJCXJsd2l0X2Rpc2NhcmRfZmlyc3Rfd29yZHMoJnJsd19qLCBsaXRlcmFscyk7CisJCX0KKwl9CisKKwlpZiAocmx3aXRfd29yZF9zaXplKCZybHdfaSkgPiAwKQorCQlybHdpdF9kaXNjaGFyZ2VfZW1wdHkoJnJsd19pLCBvdXQpOworCWVsc2UKKwkJcmx3aXRfZGlzY2hhcmdlX2VtcHR5KCZybHdfaiwgb3V0KTsKKworCW91dC0+Yml0X3NpemUgPSBtYXhfc2l6ZShld2FoX2ktPmJpdF9zaXplLCBld2FoX2otPmJpdF9zaXplKTsKK30KKwordm9pZCBld2FoX2FuZF9ub3QoCisJc3RydWN0IGV3YWhfYml0bWFwICpld2FoX2ksCisJc3RydWN0IGV3YWhfYml0bWFwICpld2FoX2osCisJc3RydWN0IGV3YWhfYml0bWFwICpvdXQpCit7CisJc3RydWN0IHJsd19pdGVyYXRvciBybHdfaTsKKwlzdHJ1Y3Qgcmx3X2l0ZXJhdG9yIHJsd19qOworCXNpemVfdCBsaXRlcmFsczsKKworCXJsd2l0X2luaXQoJnJsd19pLCBld2FoX2kpOworCXJsd2l0X2luaXQoJnJsd19qLCBld2FoX2opOworCisJd2hpbGUgKHJsd2l0X3dvcmRfc2l6ZSgmcmx3X2kpID4gMCAmJiBybHdpdF93b3JkX3NpemUoJnJsd19qKSA+IDApIHsKKwkJd2hpbGUgKHJsd19pLnJsdy5ydW5uaW5nX2xlbiA+IDAgfHwgcmx3X2oucmx3LnJ1bm5pbmdfbGVuID4gMCkgeworCQkJc3RydWN0IHJsd19pdGVyYXRvciAqcHJleSwgKnByZWRhdG9yOworCisJCQlpZiAocmx3X2kucmx3LnJ1bm5pbmdfbGVuIDwgcmx3X2oucmx3LnJ1bm5pbmdfbGVuKSB7CisJCQkJcHJleSA9ICZybHdfaTsKKwkJCQlwcmVkYXRvciA9ICZybHdfajsKKwkJCX0gZWxzZSB7CisJCQkJcHJleSA9ICZybHdfajsKKwkJCQlwcmVkYXRvciA9ICZybHdfaTsKKwkJCX0KKworCQkJaWYgKChwcmVkYXRvci0+cmx3LnJ1bm5pbmdfYml0ICYmIHByZXkgPT0gJnJsd19pKSB8fAorCQkJCSghcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2JpdCAmJiBwcmV5ICE9ICZybHdfaSkpIHsKKwkJCQlld2FoX2FkZF9lbXB0eV93b3JkcyhvdXQsIDAsCisJCQkJCXByZWRhdG9yLT5ybHcucnVubmluZ19sZW4pOworCQkJCXJsd2l0X2Rpc2NhcmRfZmlyc3Rfd29yZHMocHJleSwKKwkJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbik7CisJCQkJcmx3aXRfZGlzY2FyZF9maXJzdF93b3JkcyhwcmVkYXRvciwKKwkJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbik7CisJCQl9IGVsc2UgeworCQkJCXNpemVfdCBpbmRleDsKKwkJCQlpbnQgbmVnYXRlX3dvcmRzOworCisJCQkJbmVnYXRlX3dvcmRzID0gKCZybHdfaSAhPSBwcmV5KTsKKwkJCQlpbmRleCA9IHJsd2l0X2Rpc2NoYXJnZShwcmV5LCBvdXQsCisJCQkJCXByZWRhdG9yLT5ybHcucnVubmluZ19sZW4sIG5lZ2F0ZV93b3Jkcyk7CisJCQkJZXdhaF9hZGRfZW1wdHlfd29yZHMob3V0LCBuZWdhdGVfd29yZHMsCisJCQkJCXByZWRhdG9yLT5ybHcucnVubmluZ19sZW4gLSBpbmRleCk7CisJCQkJcmx3aXRfZGlzY2FyZF9maXJzdF93b3JkcyhwcmVkYXRvciwKKwkJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbik7CisJCQl9CisJCX0KKworCQlsaXRlcmFscyA9IG1pbl9zaXplKAorCQkJcmx3X2kucmx3LmxpdGVyYWxfd29yZHMsCisJCQlybHdfai5ybHcubGl0ZXJhbF93b3Jkcyk7CisKKwkJaWYgKGxpdGVyYWxzKSB7CisJCQlzaXplX3QgazsKKworCQkJZm9yIChrID0gMDsgayA8IGxpdGVyYWxzOyArK2spIHsKKwkJCQlld2FoX2FkZChvdXQsCisJCQkJCXJsd19pLmJ1ZmZlcltybHdfaS5saXRlcmFsX3dvcmRfc3RhcnQgKyBrXSAmCisJCQkJCX4ocmx3X2ouYnVmZmVyW3Jsd19qLmxpdGVyYWxfd29yZF9zdGFydCArIGtdKQorCQkJCSk7CisJCQl9CisKKwkJCXJsd2l0X2Rpc2NhcmRfZmlyc3Rfd29yZHMoJnJsd19pLCBsaXRlcmFscyk7CisJCQlybHdpdF9kaXNjYXJkX2ZpcnN0X3dvcmRzKCZybHdfaiwgbGl0ZXJhbHMpOworCQl9CisJfQorCisJaWYgKHJsd2l0X3dvcmRfc2l6ZSgmcmx3X2kpID4gMCkKKwkJcmx3aXRfZGlzY2hhcmdlKCZybHdfaSwgb3V0LCB+MCwgMCk7CisJZWxzZQorCQlybHdpdF9kaXNjaGFyZ2VfZW1wdHkoJnJsd19qLCBvdXQpOworCisJb3V0LT5iaXRfc2l6ZSA9IG1heF9zaXplKGV3YWhfaS0+Yml0X3NpemUsIGV3YWhfai0+Yml0X3NpemUpOworfQorCit2b2lkIGV3YWhfb3IoCisJc3RydWN0IGV3YWhfYml0bWFwICpld2FoX2ksCisJc3RydWN0IGV3YWhfYml0bWFwICpld2FoX2osCisJc3RydWN0IGV3YWhfYml0bWFwICpvdXQpCit7CisJc3RydWN0IHJsd19pdGVyYXRvciBybHdfaTsKKwlzdHJ1Y3Qgcmx3X2l0ZXJhdG9yIHJsd19qOworCXNpemVfdCBsaXRlcmFsczsKKworCXJsd2l0X2luaXQoJnJsd19pLCBld2FoX2kpOworCXJsd2l0X2luaXQoJnJsd19qLCBld2FoX2opOworCisJd2hpbGUgKHJsd2l0X3dvcmRfc2l6ZSgmcmx3X2kpID4gMCAmJiBybHdpdF93b3JkX3NpemUoJnJsd19qKSA+IDApIHsKKwkJd2hpbGUgKHJsd19pLnJsdy5ydW5uaW5nX2xlbiA+IDAgfHwgcmx3X2oucmx3LnJ1bm5pbmdfbGVuID4gMCkgeworCQkJc3RydWN0IHJsd19pdGVyYXRvciAqcHJleSwgKnByZWRhdG9yOworCisJCQlpZiAocmx3X2kucmx3LnJ1bm5pbmdfbGVuIDwgcmx3X2oucmx3LnJ1bm5pbmdfbGVuKSB7CisJCQkJcHJleSA9ICZybHdfaTsKKwkJCQlwcmVkYXRvciA9ICZybHdfajsKKwkJCX0gZWxzZSB7CisJCQkJcHJleSA9ICZybHdfajsKKwkJCQlwcmVkYXRvciA9ICZybHdfaTsKKwkJCX0KKworCQkJaWYgKHByZWRhdG9yLT5ybHcucnVubmluZ19iaXQpIHsKKwkJCQlld2FoX2FkZF9lbXB0eV93b3JkcyhvdXQsIDAsCisJCQkJCXByZWRhdG9yLT5ybHcucnVubmluZ19sZW4pOworCQkJCXJsd2l0X2Rpc2NhcmRfZmlyc3Rfd29yZHMocHJleSwKKwkJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbik7CisJCQkJcmx3aXRfZGlzY2FyZF9maXJzdF93b3JkcyhwcmVkYXRvciwKKwkJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbik7CisJCQl9IGVsc2UgeworCQkJCXNpemVfdCBpbmRleCA9IHJsd2l0X2Rpc2NoYXJnZShwcmV5LCBvdXQsCisJCQkJCXByZWRhdG9yLT5ybHcucnVubmluZ19sZW4sIDApOworCQkJCWV3YWhfYWRkX2VtcHR5X3dvcmRzKG91dCwgMCwKKwkJCQkJcHJlZGF0b3ItPnJsdy5ydW5uaW5nX2xlbiAtIGluZGV4KTsKKwkJCQlybHdpdF9kaXNjYXJkX2ZpcnN0X3dvcmRzKHByZWRhdG9yLAorCQkJCQlwcmVkYXRvci0+cmx3LnJ1bm5pbmdfbGVuKTsKKwkJCX0KKwkJfQorCisJCWxpdGVyYWxzID0gbWluX3NpemUoCisJCQlybHdfaS5ybHcubGl0ZXJhbF93b3JkcywKKwkJCXJsd19qLnJsdy5saXRlcmFsX3dvcmRzKTsKKworCQlpZiAobGl0ZXJhbHMpIHsKKwkJCXNpemVfdCBrOworCisJCQlmb3IgKGsgPSAwOyBrIDwgbGl0ZXJhbHM7ICsraykgeworCQkJCWV3YWhfYWRkKG91dCwKKwkJCQkJcmx3X2kuYnVmZmVyW3Jsd19pLmxpdGVyYWxfd29yZF9zdGFydCArIGtdIHwKKwkJCQkJcmx3X2ouYnVmZmVyW3Jsd19qLmxpdGVyYWxfd29yZF9zdGFydCArIGtdCisJCQkJKTsKKwkJCX0KKworCQkJcmx3aXRfZGlzY2FyZF9maXJzdF93b3Jkcygmcmx3X2ksIGxpdGVyYWxzKTsKKwkJCXJsd2l0X2Rpc2NhcmRfZmlyc3Rfd29yZHMoJnJsd19qLCBsaXRlcmFscyk7CisJCX0KKwl9CisKKwlpZiAocmx3aXRfd29yZF9zaXplKCZybHdfaSkgPiAwKQorCQlybHdpdF9kaXNjaGFyZ2UoJnJsd19pLCBvdXQsIH4wLCAwKTsKKwllbHNlCisJCXJsd2l0X2Rpc2NoYXJnZSgmcmx3X2osIG91dCwgfjAsIDApOworCisJb3V0LT5iaXRfc2l6ZSA9IG1heF9zaXplKGV3YWhfaS0+Yml0X3NpemUsIGV3YWhfai0+Yml0X3NpemUpOworfQorCisKKyNkZWZpbmUgQklUTUFQX1BPT0xfTUFYIDE2CitzdGF0aWMgc3RydWN0IGV3YWhfYml0bWFwICpiaXRtYXBfcG9vbFtCSVRNQVBfUE9PTF9NQVhdOworc3RhdGljIHNpemVfdCBiaXRtYXBfcG9vbF9zaXplOworCitzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWhfcG9vbF9uZXcodm9pZCkKK3sKKwlpZiAoYml0bWFwX3Bvb2xfc2l6ZSkKKwkJcmV0dXJuIGJpdG1hcF9wb29sWy0tYml0bWFwX3Bvb2xfc2l6ZV07CisKKwlyZXR1cm4gZXdhaF9uZXcoKTsKK30KKwordm9pZCBld2FoX3Bvb2xfZnJlZShzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYpCit7CisJaWYgKHNlbGYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKGJpdG1hcF9wb29sX3NpemUgPT0gQklUTUFQX1BPT0xfTUFYIHx8CisJCXNlbGYtPmFsbG9jX3NpemUgPT0gMCkgeworCQlld2FoX2ZyZWUoc2VsZik7CisJCXJldHVybjsKKwl9CisKKwlld2FoX2NsZWFyKHNlbGYpOworCWJpdG1hcF9wb29sW2JpdG1hcF9wb29sX3NpemUrK10gPSBzZWxmOworfQorCit1aW50MzJfdCBld2FoX2NoZWNrc3VtKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZikKK3sKKwljb25zdCB1aW50OF90ICpwID0gKHVpbnQ4X3QgKilzZWxmLT5idWZmZXI7CisJdWludDMyX3QgY3JjID0gKHVpbnQzMl90KXNlbGYtPmJpdF9zaXplOworCXNpemVfdCBzaXplID0gc2VsZi0+YnVmZmVyX3NpemUgKiBzaXplb2YoZXdvcmRfdCk7CisKKwl3aGlsZSAoc2l6ZS0tKQorCQljcmMgPSAoY3JjIDw8IDUpIC0gY3JjICsgKHVpbnQzMl90KSpwKys7CisKKwlyZXR1cm4gY3JjOworfQpkaWZmIC0tZ2l0IGEvZXdhaC9ld2FoX2lvLmMgYi9ld2FoL2V3YWhfaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzQ4MWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZXdhaC9ld2FoX2lvLmMKQEAgLTAsMCArMSwyMTcgQEAKKy8qKgorICogQ29weXJpZ2h0IDIwMTMsIEdpdEh1YiwgSW5jCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEzLCBEYW5pZWwgTGVtaXJlLCBDbGlmZiBNb29uLAorICoJRGF2aWQgTWNJbnRvc2gsIFJvYmVydCBCZWNobywgR29vZ2xlIEluYy4gYW5kIFZlcm9uaWthIFplbnoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJld29rLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK2ludCBld2FoX3NlcmlhbGl6ZV9uYXRpdmUoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBpbnQgZmQpCit7CisJdWludDMyX3Qgd3JpdGUzMjsKKwlzaXplX3QgdG9fd3JpdGUgPSBzZWxmLT5idWZmZXJfc2l6ZSAqIDg7CisKKwkvKiAzMiBiaXQgLS0gYml0IHNpemUgZm9yIHRoZSBtYXAgKi8KKwl3cml0ZTMyID0gKHVpbnQzMl90KXNlbGYtPmJpdF9zaXplOworCWlmICh3cml0ZShmZCwgJndyaXRlMzIsIDQpICE9IDQpCisJCXJldHVybiAtMTsKKworCS8qKiAzMiBiaXQgLS0gbnVtYmVyIG9mIGNvbXByZXNzZWQgNjQtYml0IHdvcmRzICovCisJd3JpdGUzMiA9ICh1aW50MzJfdClzZWxmLT5idWZmZXJfc2l6ZTsKKwlpZiAod3JpdGUoZmQsICZ3cml0ZTMyLCA0KSAhPSA0KQorCQlyZXR1cm4gLTE7CisKKwlpZiAod3JpdGUoZmQsIHNlbGYtPmJ1ZmZlciwgdG9fd3JpdGUpICE9IHRvX3dyaXRlKQorCQlyZXR1cm4gLTE7CisKKwkvKiogMzIgYml0IC0tIHBvc2l0aW9uIGZvciB0aGUgUkxXICovCisJd3JpdGUzMiA9IHNlbGYtPnJsdyAtIHNlbGYtPmJ1ZmZlcjsKKwlpZiAod3JpdGUoZmQsICZ3cml0ZTMyLCA0KSAhPSA0KQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gKDMgKiA0KSArIHRvX3dyaXRlOworfQorCitpbnQgZXdhaF9zZXJpYWxpemVfdG8oc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLAorCQkgICAgICBpbnQgKCp3cml0ZV9mdW4pKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpLAorCQkgICAgICB2b2lkICpkYXRhKQoreworCXNpemVfdCBpOworCWV3b3JkX3QgZHVtcFsyMDQ4XTsKKwljb25zdCBzaXplX3Qgd29yZHNfcGVyX2R1bXAgPSBzaXplb2YoZHVtcCkgLyBzaXplb2YoZXdvcmRfdCk7CisJdWludDMyX3QgYml0c2l6ZSwgd29yZF9jb3VudCwgcmx3X3BvczsKKworCWNvbnN0IGV3b3JkX3QgKmJ1ZmZlcjsKKwlzaXplX3Qgd29yZHNfbGVmdDsKKworCS8qIDMyIGJpdCAtLSBiaXQgc2l6ZSBmb3IgdGhlIG1hcCAqLworCWJpdHNpemUgPSAgaHRvbmwoKHVpbnQzMl90KXNlbGYtPmJpdF9zaXplKTsKKwlpZiAod3JpdGVfZnVuKGRhdGEsICZiaXRzaXplLCA0KSAhPSA0KQorCQlyZXR1cm4gLTE7CisKKwkvKiogMzIgYml0IC0tIG51bWJlciBvZiBjb21wcmVzc2VkIDY0LWJpdCB3b3JkcyAqLworCXdvcmRfY291bnQgPSAgaHRvbmwoKHVpbnQzMl90KXNlbGYtPmJ1ZmZlcl9zaXplKTsKKwlpZiAod3JpdGVfZnVuKGRhdGEsICZ3b3JkX2NvdW50LCA0KSAhPSA0KQorCQlyZXR1cm4gLTE7CisKKwkvKiogNjQgYml0IHggTiAtLSBjb21wcmVzc2VkIHdvcmRzICovCisJYnVmZmVyID0gc2VsZi0+YnVmZmVyOworCXdvcmRzX2xlZnQgPSBzZWxmLT5idWZmZXJfc2l6ZTsKKworCXdoaWxlICh3b3Jkc19sZWZ0ID49IHdvcmRzX3Blcl9kdW1wKSB7CisJCWZvciAoaSA9IDA7IGkgPCB3b3Jkc19wZXJfZHVtcDsgKytpLCArK2J1ZmZlcikKKwkJCWR1bXBbaV0gPSBodG9ubGwoKmJ1ZmZlcik7CisKKwkJaWYgKHdyaXRlX2Z1bihkYXRhLCBkdW1wLCBzaXplb2YoZHVtcCkpICE9IHNpemVvZihkdW1wKSkKKwkJCXJldHVybiAtMTsKKworCQl3b3Jkc19sZWZ0IC09IHdvcmRzX3Blcl9kdW1wOworCX0KKworCWlmICh3b3Jkc19sZWZ0KSB7CisJCWZvciAoaSA9IDA7IGkgPCB3b3Jkc19sZWZ0OyArK2ksICsrYnVmZmVyKQorCQkJZHVtcFtpXSA9IGh0b25sbCgqYnVmZmVyKTsKKworCQlpZiAod3JpdGVfZnVuKGRhdGEsIGR1bXAsIHdvcmRzX2xlZnQgKiA4KSAhPSB3b3Jkc19sZWZ0ICogOCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwkvKiogMzIgYml0IC0tIHBvc2l0aW9uIGZvciB0aGUgUkxXICovCisJcmx3X3BvcyA9ICh1aW50OF90KilzZWxmLT5ybHcgLSAodWludDhfdCAqKXNlbGYtPmJ1ZmZlcjsKKwlybHdfcG9zID0gaHRvbmwocmx3X3BvcyAvIHNpemVvZihld29yZF90KSk7CisKKwlpZiAod3JpdGVfZnVuKGRhdGEsICZybHdfcG9zLCA0KSAhPSA0KQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gKDMgKiA0KSArIChzZWxmLT5idWZmZXJfc2l6ZSAqIDgpOworfQorCitzdGF0aWMgaW50IHdyaXRlX2hlbHBlcih2b2lkICpmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXJldHVybiB3cml0ZSgoaW50cHRyX3QpZmQsIGJ1ZiwgbGVuKTsKK30KKworaW50IGV3YWhfc2VyaWFsaXplKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgaW50IGZkKQoreworCXJldHVybiBld2FoX3NlcmlhbGl6ZV90byhzZWxmLCB3cml0ZV9oZWxwZXIsICh2b2lkICopKGludHB0cl90KWZkKTsKK30KKworc3RhdGljIGludCB3cml0ZV9zdHJidWYodm9pZCAqdXNlcl9kYXRhLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzdHJidWYgKnNiID0gdXNlcl9kYXRhOworCXN0cmJ1Zl9hZGQoc2IsIGRhdGEsIGxlbik7CisJcmV0dXJuIGxlbjsKK30KKworaW50IGV3YWhfc2VyaWFsaXplX3N0cmJ1ZihzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCXJldHVybiBld2FoX3NlcmlhbGl6ZV90byhzZWxmLCB3cml0ZV9zdHJidWYsIHNiKTsKK30KKworaW50IGV3YWhfcmVhZF9tbWFwKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgY29uc3Qgdm9pZCAqbWFwLCBzaXplX3QgbGVuKQoreworCWNvbnN0IHVpbnQ4X3QgKnB0ciA9IG1hcDsKKwlzaXplX3QgaTsKKworCXNlbGYtPmJpdF9zaXplID0gZ2V0X2JlMzIocHRyKTsKKwlwdHIgKz0gc2l6ZW9mKHVpbnQzMl90KTsKKworCXNlbGYtPmJ1ZmZlcl9zaXplID0gc2VsZi0+YWxsb2Nfc2l6ZSA9IGdldF9iZTMyKHB0cik7CisJcHRyICs9IHNpemVvZih1aW50MzJfdCk7CisKKwlzZWxmLT5idWZmZXIgPSBld2FoX3JlYWxsb2Moc2VsZi0+YnVmZmVyLAorCQlzZWxmLT5hbGxvY19zaXplICogc2l6ZW9mKGV3b3JkX3QpKTsKKworCWlmICghc2VsZi0+YnVmZmVyKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIENvcHkgdGhlIHJhdyBkYXRhIGZvciB0aGUgYml0bWFwIGFzIGEgd2hvbGUgY2h1bms7CisJICogaWYgd2UncmUgaW4gYSBsaXR0bGUtZW5kaWFuIHBsYXRmb3JtLCB3ZSdsbCBwZXJmb3JtCisJICogdGhlIGVuZGlhbm5lc3MgY29udmVyc2lvbiBpbiBhIHNlcGFyYXRlIHBhc3MgdG8gZW5zdXJlCisJICogd2UncmUgbG9hZGluZyA4LWJ5dGUgYWxpZ25lZCB3b3Jkcy4KKwkgKi8KKwltZW1jcHkoc2VsZi0+YnVmZmVyLCBwdHIsIHNlbGYtPmJ1ZmZlcl9zaXplICogc2l6ZW9mKHVpbnQ2NF90KSk7CisJcHRyICs9IHNlbGYtPmJ1ZmZlcl9zaXplICogc2l6ZW9mKHVpbnQ2NF90KTsKKworCWZvciAoaSA9IDA7IGkgPCBzZWxmLT5idWZmZXJfc2l6ZTsgKytpKQorCQlzZWxmLT5idWZmZXJbaV0gPSBudG9obGwoc2VsZi0+YnVmZmVyW2ldKTsKKworCXNlbGYtPnJsdyA9IHNlbGYtPmJ1ZmZlciArIGdldF9iZTMyKHB0cik7CisKKwlyZXR1cm4gKDMgKiA0KSArIChzZWxmLT5idWZmZXJfc2l6ZSAqIDgpOworfQorCitpbnQgZXdhaF9kZXNlcmlhbGl6ZShzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGludCBmZCkKK3sKKwlzaXplX3QgaTsKKwlld29yZF90IGR1bXBbMjA0OF07CisJY29uc3Qgc2l6ZV90IHdvcmRzX3Blcl9kdW1wID0gc2l6ZW9mKGR1bXApIC8gc2l6ZW9mKGV3b3JkX3QpOworCXVpbnQzMl90IGJpdHNpemUsIHdvcmRfY291bnQsIHJsd19wb3M7CisKKwlld29yZF90ICpidWZmZXIgPSBOVUxMOworCXNpemVfdCB3b3Jkc19sZWZ0OworCisJZXdhaF9jbGVhcihzZWxmKTsKKworCS8qIDMyIGJpdCAtLSBiaXQgc2l6ZSBmb3IgdGhlIG1hcCAqLworCWlmIChyZWFkKGZkLCAmYml0c2l6ZSwgNCkgIT0gNCkKKwkJcmV0dXJuIC0xOworCisJc2VsZi0+Yml0X3NpemUgPSAoc2l6ZV90KW50b2hsKGJpdHNpemUpOworCisJLyoqIDMyIGJpdCAtLSBudW1iZXIgb2YgY29tcHJlc3NlZCA2NC1iaXQgd29yZHMgKi8KKwlpZiAocmVhZChmZCwgJndvcmRfY291bnQsIDQpICE9IDQpCisJCXJldHVybiAtMTsKKworCXNlbGYtPmJ1ZmZlcl9zaXplID0gc2VsZi0+YWxsb2Nfc2l6ZSA9IChzaXplX3QpbnRvaGwod29yZF9jb3VudCk7CisJc2VsZi0+YnVmZmVyID0gZXdhaF9yZWFsbG9jKHNlbGYtPmJ1ZmZlciwKKwkJc2VsZi0+YWxsb2Nfc2l6ZSAqIHNpemVvZihld29yZF90KSk7CisKKwlpZiAoIXNlbGYtPmJ1ZmZlcikKKwkJcmV0dXJuIC0xOworCisJLyoqIDY0IGJpdCB4IE4gLS0gY29tcHJlc3NlZCB3b3JkcyAqLworCWJ1ZmZlciA9IHNlbGYtPmJ1ZmZlcjsKKwl3b3Jkc19sZWZ0ID0gc2VsZi0+YnVmZmVyX3NpemU7CisKKwl3aGlsZSAod29yZHNfbGVmdCA+PSB3b3Jkc19wZXJfZHVtcCkgeworCQlpZiAocmVhZChmZCwgZHVtcCwgc2l6ZW9mKGR1bXApKSAhPSBzaXplb2YoZHVtcCkpCisJCQlyZXR1cm4gLTE7CisKKwkJZm9yIChpID0gMDsgaSA8IHdvcmRzX3Blcl9kdW1wOyArK2ksICsrYnVmZmVyKQorCQkJKmJ1ZmZlciA9IG50b2hsbChkdW1wW2ldKTsKKworCQl3b3Jkc19sZWZ0IC09IHdvcmRzX3Blcl9kdW1wOworCX0KKworCWlmICh3b3Jkc19sZWZ0KSB7CisJCWlmIChyZWFkKGZkLCBkdW1wLCB3b3Jkc19sZWZ0ICogOCkgIT0gd29yZHNfbGVmdCAqIDgpCisJCQlyZXR1cm4gLTE7CisKKwkJZm9yIChpID0gMDsgaSA8IHdvcmRzX2xlZnQ7ICsraSwgKytidWZmZXIpCisJCQkqYnVmZmVyID0gbnRvaGxsKGR1bXBbaV0pOworCX0KKworCS8qKiAzMiBiaXQgLS0gcG9zaXRpb24gZm9yIHRoZSBSTFcgKi8KKwlpZiAocmVhZChmZCwgJnJsd19wb3MsIDQpICE9IDQpCisJCXJldHVybiAtMTsKKworCXNlbGYtPnJsdyA9IHNlbGYtPmJ1ZmZlciArIG50b2hsKHJsd19wb3MpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZXdhaC9ld2FoX3Jsdy5jIGIvZXdhaC9ld2FoX3Jsdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MjNmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9ld2FoL2V3YWhfcmx3LmMKQEAgLTAsMCArMSwxMTUgQEAKKy8qKgorICogQ29weXJpZ2h0IDIwMTMsIEdpdEh1YiwgSW5jCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEzLCBEYW5pZWwgTGVtaXJlLCBDbGlmZiBNb29uLAorICoJRGF2aWQgTWNJbnRvc2gsIFJvYmVydCBCZWNobywgR29vZ2xlIEluYy4gYW5kIFZlcm9uaWthIFplbnoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJld29rLmgiCisjaW5jbHVkZSAiZXdva19ybHcuaCIKKworc3RhdGljIGlubGluZSBpbnQgbmV4dF93b3JkKHN0cnVjdCBybHdfaXRlcmF0b3IgKml0KQoreworCWlmIChpdC0+cG9pbnRlciA+PSBpdC0+c2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpdC0+cmx3LndvcmQgPSAmaXQtPmJ1ZmZlcltpdC0+cG9pbnRlcl07CisJaXQtPnBvaW50ZXIgKz0gcmx3X2dldF9saXRlcmFsX3dvcmRzKGl0LT5ybHcud29yZCkgKyAxOworCisJaXQtPnJsdy5saXRlcmFsX3dvcmRzID0gcmx3X2dldF9saXRlcmFsX3dvcmRzKGl0LT5ybHcud29yZCk7CisJaXQtPnJsdy5ydW5uaW5nX2xlbiA9IHJsd19nZXRfcnVubmluZ19sZW4oaXQtPnJsdy53b3JkKTsKKwlpdC0+cmx3LnJ1bm5pbmdfYml0ID0gcmx3X2dldF9ydW5fYml0KGl0LT5ybHcud29yZCk7CisJaXQtPnJsdy5saXRlcmFsX3dvcmRfb2Zmc2V0ID0gMDsKKworCXJldHVybiAxOworfQorCit2b2lkIHJsd2l0X2luaXQoc3RydWN0IHJsd19pdGVyYXRvciAqaXQsIHN0cnVjdCBld2FoX2JpdG1hcCAqZnJvbV9ld2FoKQoreworCWl0LT5idWZmZXIgPSBmcm9tX2V3YWgtPmJ1ZmZlcjsKKwlpdC0+c2l6ZSA9IGZyb21fZXdhaC0+YnVmZmVyX3NpemU7CisJaXQtPnBvaW50ZXIgPSAwOworCisJbmV4dF93b3JkKGl0KTsKKworCWl0LT5saXRlcmFsX3dvcmRfc3RhcnQgPSBybHdpdF9saXRlcmFsX3dvcmRzKGl0KSArCisJCWl0LT5ybHcubGl0ZXJhbF93b3JkX29mZnNldDsKK30KKwordm9pZCBybHdpdF9kaXNjYXJkX2ZpcnN0X3dvcmRzKHN0cnVjdCBybHdfaXRlcmF0b3IgKml0LCBzaXplX3QgeCkKK3sKKwl3aGlsZSAoeCA+IDApIHsKKwkJc2l6ZV90IGRpc2NhcmQ7CisKKwkJaWYgKGl0LT5ybHcucnVubmluZ19sZW4gPiB4KSB7CisJCQlpdC0+cmx3LnJ1bm5pbmdfbGVuIC09IHg7CisJCQlyZXR1cm47CisJCX0KKworCQl4IC09IGl0LT5ybHcucnVubmluZ19sZW47CisJCWl0LT5ybHcucnVubmluZ19sZW4gPSAwOworCisJCWRpc2NhcmQgPSAoeCA+IGl0LT5ybHcubGl0ZXJhbF93b3JkcykgPyBpdC0+cmx3LmxpdGVyYWxfd29yZHMgOiB4OworCisJCWl0LT5saXRlcmFsX3dvcmRfc3RhcnQgKz0gZGlzY2FyZDsKKwkJaXQtPnJsdy5saXRlcmFsX3dvcmRzIC09IGRpc2NhcmQ7CisJCXggLT0gZGlzY2FyZDsKKworCQlpZiAoeCA+IDAgfHwgcmx3aXRfd29yZF9zaXplKGl0KSA9PSAwKSB7CisJCQlpZiAoIW5leHRfd29yZChpdCkpCisJCQkJYnJlYWs7CisKKwkJCWl0LT5saXRlcmFsX3dvcmRfc3RhcnQgPQorCQkJCXJsd2l0X2xpdGVyYWxfd29yZHMoaXQpICsgaXQtPnJsdy5saXRlcmFsX3dvcmRfb2Zmc2V0OworCQl9CisJfQorfQorCitzaXplX3Qgcmx3aXRfZGlzY2hhcmdlKAorCXN0cnVjdCBybHdfaXRlcmF0b3IgKml0LCBzdHJ1Y3QgZXdhaF9iaXRtYXAgKm91dCwgc2l6ZV90IG1heCwgaW50IG5lZ2F0ZSkKK3sKKwlzaXplX3QgaW5kZXggPSAwOworCisJd2hpbGUgKGluZGV4IDwgbWF4ICYmIHJsd2l0X3dvcmRfc2l6ZShpdCkgPiAwKSB7CisJCXNpemVfdCBwZCwgcGwgPSBpdC0+cmx3LnJ1bm5pbmdfbGVuOworCisJCWlmIChpbmRleCArIHBsID4gbWF4KQorCQkJcGwgPSBtYXggLSBpbmRleDsKKworCQlld2FoX2FkZF9lbXB0eV93b3JkcyhvdXQsIGl0LT5ybHcucnVubmluZ19iaXQgXiBuZWdhdGUsIHBsKTsKKwkJaW5kZXggKz0gcGw7CisKKwkJcGQgPSBpdC0+cmx3LmxpdGVyYWxfd29yZHM7CisJCWlmIChwZCArIGluZGV4ID4gbWF4KQorCQkJcGQgPSBtYXggLSBpbmRleDsKKworCQlld2FoX2FkZF9kaXJ0eV93b3JkcyhvdXQsCisJCQlpdC0+YnVmZmVyICsgaXQtPmxpdGVyYWxfd29yZF9zdGFydCwgcGQsIG5lZ2F0ZSk7CisKKwkJcmx3aXRfZGlzY2FyZF9maXJzdF93b3JkcyhpdCwgcGQgKyBwbCk7CisJCWluZGV4ICs9IHBkOworCX0KKworCXJldHVybiBpbmRleDsKK30KKwordm9pZCBybHdpdF9kaXNjaGFyZ2VfZW1wdHkoc3RydWN0IHJsd19pdGVyYXRvciAqaXQsIHN0cnVjdCBld2FoX2JpdG1hcCAqb3V0KQoreworCXdoaWxlIChybHdpdF93b3JkX3NpemUoaXQpID4gMCkgeworCQlld2FoX2FkZF9lbXB0eV93b3JkcyhvdXQsIDAsIHJsd2l0X3dvcmRfc2l6ZShpdCkpOworCQlybHdpdF9kaXNjYXJkX2ZpcnN0X3dvcmRzKGl0LCBybHdpdF93b3JkX3NpemUoaXQpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9ld2FoL2V3b2suaCBiL2V3YWgvZXdvay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMmM1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9ld2FoL2V3b2suaApAQCAtMCwwICsxLDIzNSBAQAorLyoqCisgKiBDb3B5cmlnaHQgMjAxMywgR2l0SHViLCBJbmMKKyAqIENvcHlyaWdodCAyMDA5LTIwMTMsIERhbmllbCBMZW1pcmUsIENsaWZmIE1vb24sCisgKglEYXZpZCBNY0ludG9zaCwgUm9iZXJ0IEJlY2hvLCBHb29nbGUgSW5jLiBhbmQgVmVyb25pa2EgWmVuegorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2lmbmRlZiBfX0VXT0tfQklUTUFQX0hfXworI2RlZmluZSBfX0VXT0tfQklUTUFQX0hfXworCisjaWZuZGVmIGV3YWhfbWFsbG9jCisjCWRlZmluZSBld2FoX21hbGxvYyB4bWFsbG9jCisjZW5kaWYKKyNpZm5kZWYgZXdhaF9yZWFsbG9jCisjCWRlZmluZSBld2FoX3JlYWxsb2MgeHJlYWxsb2MKKyNlbmRpZgorI2lmbmRlZiBld2FoX2NhbGxvYworIwlkZWZpbmUgZXdhaF9jYWxsb2MgeGNhbGxvYworI2VuZGlmCisKK3N0cnVjdCBzdHJidWY7Cit0eXBlZGVmIHVpbnQ2NF90IGV3b3JkX3Q7CisjZGVmaW5lIEJJVFNfSU5fRVdPUkQgKHNpemVvZihld29yZF90KSAqIDgpCisKKy8qKgorICogRG8gbm90IHVzZSBfX2J1aWx0aW5fcG9wY291bnRsbC4gVGhlIEdDQyBpbXBsZW1lbnRhdGlvbgorICogaXMgbm90b3Jpb3VzbHkgc2xvdyBvbiBhbGwgcGxhdGZvcm1zLgorICoKKyAqIFNlZTogaHR0cDovL2djYy5nbnUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0zNjA0MQorICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGV3YWhfYml0X3BvcGNvdW50NjQodWludDY0X3QgeCkKK3sKKwl4ID0gKHggJiAweDU1NTU1NTU1NTU1NTU1NTVVTEwpICsgKCh4ID4+ICAxKSAmIDB4NTU1NTU1NTU1NTU1NTU1NVVMTCk7CisJeCA9ICh4ICYgMHgzMzMzMzMzMzMzMzMzMzMzVUxMKSArICgoeCA+PiAgMikgJiAweDMzMzMzMzMzMzMzMzMzMzNVTEwpOworCXggPSAoeCAmIDB4MEYwRjBGMEYwRjBGMEYwRlVMTCkgKyAoKHggPj4gIDQpICYgMHgwRjBGMEYwRjBGMEYwRjBGVUxMKTsKKwlyZXR1cm4gKHggKiAweDAxMDEwMTAxMDEwMTAxMDFVTEwpID4+IDU2OworfQorCisvKiBfX2J1aWx0aW5fY3R6bGwgd2FzIG5vdCBhdmFpbGFibGUgdW50aWwgMy40LjAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICAmJiBfX0dOVUNfTUlOT1IgPiAzKSkKKyNkZWZpbmUgZXdhaF9iaXRfY3R6NjQoeCkgX19idWlsdGluX2N0emxsKHgpCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgZXdhaF9iaXRfY3R6NjQodWludDY0X3QgeCkKK3sKKwlpbnQgbiA9IDA7CisJaWYgKCh4ICYgMHhmZmZmZmZmZikgPT0gMCkgeyB4ID4+PSAzMjsgbiArPSAzMjsgfQorCWlmICgoeCAmICAgICAweGZmZmYpID09IDApIHsgeCA+Pj0gMTY7IG4gKz0gMTY7IH0KKwlpZiAoKHggJiAgICAgICAweGZmKSA9PSAwKSB7IHggPj49ICA4OyBuICs9ICA4OyB9CisJaWYgKCh4ICYgICAgICAgIDB4ZikgPT0gMCkgeyB4ID4+PSAgNDsgbiArPSAgNDsgfQorCWlmICgoeCAmICAgICAgICAweDMpID09IDApIHsgeCA+Pj0gIDI7IG4gKz0gIDI7IH0KKwlpZiAoKHggJiAgICAgICAgMHgxKSA9PSAwKSB7IHggPj49ICAxOyBuICs9ICAxOyB9CisJcmV0dXJuIG4gKyAheDsKK30KKyNlbmRpZgorCitzdHJ1Y3QgZXdhaF9iaXRtYXAgeworCWV3b3JkX3QgKmJ1ZmZlcjsKKwlzaXplX3QgYnVmZmVyX3NpemU7CisJc2l6ZV90IGFsbG9jX3NpemU7CisJc2l6ZV90IGJpdF9zaXplOworCWV3b3JkX3QgKnJsdzsKK307CisKK3R5cGVkZWYgdm9pZCAoKmV3YWhfY2FsbGJhY2spKHNpemVfdCBwb3MsIHZvaWQgKik7CisKK3N0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9wb29sX25ldyh2b2lkKTsKK3ZvaWQgZXdhaF9wb29sX2ZyZWUoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmKTsKKworLyoqCisgKiBBbGxvY2F0ZSBhIG5ldyBFV0FIIENvbXByZXNzZWQgYml0bWFwCisgKi8KK3N0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9uZXcodm9pZCk7CisKKy8qKgorICogQ2xlYXIgYWxsIHRoZSBiaXRzIGluIHRoZSBiaXRtYXAuIERvZXMgbm90IGZyZWUgb3IgcmVzaXplCisgKiBtZW1vcnkuCisgKi8KK3ZvaWQgZXdhaF9jbGVhcihzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYpOworCisvKioKKyAqIEZyZWUgYWxsIHRoZSBtZW1vcnkgb2YgdGhlIGJpdG1hcAorICovCit2b2lkIGV3YWhfZnJlZShzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYpOworCitpbnQgZXdhaF9zZXJpYWxpemVfdG8oc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLAorCQkgICAgICBpbnQgKCp3cml0ZV9mdW4pKHZvaWQgKm91dCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKSwKKwkJICAgICAgdm9pZCAqb3V0KTsKK2ludCBld2FoX3NlcmlhbGl6ZShzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGludCBmZCk7CitpbnQgZXdhaF9zZXJpYWxpemVfbmF0aXZlKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgaW50IGZkKTsKK2ludCBld2FoX3NlcmlhbGl6ZV9zdHJidWYoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBzdHJ1Y3Qgc3RyYnVmICopOworCitpbnQgZXdhaF9kZXNlcmlhbGl6ZShzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGludCBmZCk7CitpbnQgZXdhaF9yZWFkX21tYXAoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBjb25zdCB2b2lkICptYXAsIHNpemVfdCBsZW4pOworCit1aW50MzJfdCBld2FoX2NoZWNrc3VtKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZik7CisKKy8qKgorICogTG9naWNhbCBub3QgKGJpdHdpc2UgbmVnYXRpb24pIGluLXBsYWNlIG9uIHRoZSBiaXRtYXAKKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBsaW5lYXIgdGltZSBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgYml0bWFwLgorICovCit2b2lkIGV3YWhfbm90KHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZik7CisKKy8qKgorICogQ2FsbCB0aGUgZ2l2ZW4gY2FsbGJhY2sgd2l0aCB0aGUgcG9zaXRpb24gb2YgZXZlcnkgc2luZ2xlIGJpdAorICogdGhhdCBoYXMgYmVlbiBzZXQgb24gdGhlIGJpdG1hcC4KKyAqCisgKiBUaGlzIGlzIGFuIGVmZmljaWVudCBvcGVyYXRpb24gdGhhdCBkb2VzIG5vdCBmdWxseSBkZWNvbXByZXNzCisgKiB0aGUgYml0bWFwLgorICovCit2b2lkIGV3YWhfZWFjaF9iaXQoc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBld2FoX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpwYXlsb2FkKTsKKworLyoqCisgKiBTZXQgYSBnaXZlbiBiaXQgb24gdGhlIGJpdG1hcC4KKyAqCisgKiBUaGUgYml0IGF0IHBvc2l0aW9uIGBwb3NgIHdpbGwgYmUgc2V0IHRvIHRydWUuIEJlY2F1c2Ugb2YgdGhlCisgKiB3YXkgdGhhdCB0aGUgYml0bWFwIGlzIGNvbXByZXNzZWQsIGEgc2V0IGJpdCBjYW5ub3QgYmUgdW5zZXQKKyAqIGxhdGVyIG9uLgorICoKKyAqIEZ1cnRoZXJtb3JlLCBzaW5jZSB0aGUgYml0bWFwIHVzZXMgc3RyZWFtaW5nIGNvbXByZXNzaW9uLCBiaXRzCisgKiBjYW4gb25seSBzZXQgaW5jcmVtZW50YWxseS4KKyAqCisgKiBFLmcuCisgKgkJZXdhaF9zZXQoYml0bWFwLCAxKTsgLy8gb2sKKyAqCQlld2FoX3NldChiaXRtYXAsIDc2KTsgLy8gb2sKKyAqCQlld2FoX3NldChiaXRtYXAsIDc3KTsgLy8gb2sKKyAqCQlld2FoX3NldChiaXRtYXAsIDg3MTI4MDAxMjcpOyAvLyBvaworICoJCWV3YWhfc2V0KGJpdG1hcCwgMjUpOyAvLyBmYWlsZWQsIGFzc2VydCByYWlzZWQKKyAqLwordm9pZCBld2FoX3NldChzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIHNpemVfdCBpKTsKKworc3RydWN0IGV3YWhfaXRlcmF0b3IgeworCWNvbnN0IGV3b3JkX3QgKmJ1ZmZlcjsKKwlzaXplX3QgYnVmZmVyX3NpemU7CisKKwlzaXplX3QgcG9pbnRlcjsKKwlld29yZF90IGNvbXByZXNzZWQsIGxpdGVyYWxzOworCWV3b3JkX3QgcmwsIGx3OworCWludCBiOworfTsKKworLyoqCisgKiBJbml0aWFsaXplIGEgbmV3IGl0ZXJhdG9yIHRvIHJ1biB0aHJvdWdoIHRoZSBiaXRtYXAgaW4gdW5jb21wcmVzc2VkIGZvcm0uCisgKgorICogVGhlIGl0ZXJhdG9yIGNhbiBiZSBzdGFjayBhbGxvY2F0ZWQuIFRoZSB1bmRlcmx5aW5nIGJpdG1hcCBtdXN0IG5vdCBiZSBmcmVlZAorICogYmVmb3JlIHRoZSBpdGVyYXRpb24gaXMgb3Zlci4KKyAqCisgKiBFLmcuCisgKgorICoJCXN0cnVjdCBld2FoX2JpdG1hcCAqYml0bWFwID0gZXdhaF9uZXcoKTsKKyAqCQlzdHJ1Y3QgZXdhaF9pdGVyYXRvciBpdDsKKyAqCisgKgkJZXdhaF9pdGVyYXRvcl9pbml0KCZpdCwgYml0bWFwKTsKKyAqLwordm9pZCBld2FoX2l0ZXJhdG9yX2luaXQoc3RydWN0IGV3YWhfaXRlcmF0b3IgKml0LCBzdHJ1Y3QgZXdhaF9iaXRtYXAgKnBhcmVudCk7CisKKy8qKgorICogWWllbGQgZXZlcnkgc2luZ2xlIHdvcmQgaW4gdGhlIGJpdG1hcCBpbiB1bmNvbXByZXNzZWQgZm9ybS4gVGhpcyBpczoKKyAqIHlpZWxkIHNpbmdsZSB3b3JkcyAoMzItNjQgYml0cykgd2hlcmUgZWFjaCBiaXQgcmVwcmVzZW50cyBhbiBhY3R1YWwKKyAqIGJpdCBmcm9tIHRoZSBiaXRtYXAuCisgKgorICogUmV0dXJuOiB0cnVlIGlmIGEgd29yZCB3YXMgeWllbGQsIGZhbHNlIGlmIHRoZXJlIGFyZSBubyB3b3JkcyBsZWZ0CisgKi8KK2ludCBld2FoX2l0ZXJhdG9yX25leHQoZXdvcmRfdCAqbmV4dCwgc3RydWN0IGV3YWhfaXRlcmF0b3IgKml0KTsKKwordm9pZCBld2FoX29yKAorCXN0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9pLAorCXN0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9qLAorCXN0cnVjdCBld2FoX2JpdG1hcCAqb3V0KTsKKwordm9pZCBld2FoX2FuZF9ub3QoCisJc3RydWN0IGV3YWhfYml0bWFwICpld2FoX2ksCisJc3RydWN0IGV3YWhfYml0bWFwICpld2FoX2osCisJc3RydWN0IGV3YWhfYml0bWFwICpvdXQpOworCit2b2lkIGV3YWhfeG9yKAorCXN0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9pLAorCXN0cnVjdCBld2FoX2JpdG1hcCAqZXdhaF9qLAorCXN0cnVjdCBld2FoX2JpdG1hcCAqb3V0KTsKKwordm9pZCBld2FoX2FuZCgKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWhfaSwKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmV3YWhfaiwKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKm91dCk7CisKKy8qKgorICogRGlyZWN0IHdvcmQgYWNjZXNzCisgKi8KK3NpemVfdCBld2FoX2FkZF9lbXB0eV93b3JkcyhzdHJ1Y3QgZXdhaF9iaXRtYXAgKnNlbGYsIGludCB2LCBzaXplX3QgbnVtYmVyKTsKK3ZvaWQgZXdhaF9hZGRfZGlydHlfd29yZHMoCisJc3RydWN0IGV3YWhfYml0bWFwICpzZWxmLCBjb25zdCBld29yZF90ICpidWZmZXIsIHNpemVfdCBudW1iZXIsIGludCBuZWdhdGUpOworc2l6ZV90IGV3YWhfYWRkKHN0cnVjdCBld2FoX2JpdG1hcCAqc2VsZiwgZXdvcmRfdCB3b3JkKTsKKworCisvKioKKyAqIFVuY29tcHJlc3NlZCwgb2xkLXNjaG9vbCBiaXRtYXAgdGhhdCBjYW4gYmUgZWZmaWNpZW50bHkgY29tcHJlc3NlZAorICogaW50byBhbiBgZXdhaF9iaXRtYXBgLgorICovCitzdHJ1Y3QgYml0bWFwIHsKKwlld29yZF90ICp3b3JkczsKKwlzaXplX3Qgd29yZF9hbGxvYzsKK307CisKK3N0cnVjdCBiaXRtYXAgKmJpdG1hcF9uZXcodm9pZCk7Cit2b2lkIGJpdG1hcF9zZXQoc3RydWN0IGJpdG1hcCAqc2VsZiwgc2l6ZV90IHBvcyk7Cit2b2lkIGJpdG1hcF9jbGVhcihzdHJ1Y3QgYml0bWFwICpzZWxmLCBzaXplX3QgcG9zKTsKK2ludCBiaXRtYXBfZ2V0KHN0cnVjdCBiaXRtYXAgKnNlbGYsIHNpemVfdCBwb3MpOwordm9pZCBiaXRtYXBfcmVzZXQoc3RydWN0IGJpdG1hcCAqc2VsZik7Cit2b2lkIGJpdG1hcF9mcmVlKHN0cnVjdCBiaXRtYXAgKnNlbGYpOworaW50IGJpdG1hcF9lcXVhbHMoc3RydWN0IGJpdG1hcCAqc2VsZiwgc3RydWN0IGJpdG1hcCAqb3RoZXIpOworaW50IGJpdG1hcF9pc19zdWJzZXQoc3RydWN0IGJpdG1hcCAqc2VsZiwgc3RydWN0IGJpdG1hcCAqc3VwZXIpOworCitzdHJ1Y3QgZXdhaF9iaXRtYXAgKiBiaXRtYXBfdG9fZXdhaChzdHJ1Y3QgYml0bWFwICpiaXRtYXApOworc3RydWN0IGJpdG1hcCAqZXdhaF90b19iaXRtYXAoc3RydWN0IGV3YWhfYml0bWFwICpld2FoKTsKKwordm9pZCBiaXRtYXBfYW5kX25vdChzdHJ1Y3QgYml0bWFwICpzZWxmLCBzdHJ1Y3QgYml0bWFwICpvdGhlcik7Cit2b2lkIGJpdG1hcF9vcl9ld2FoKHN0cnVjdCBiaXRtYXAgKnNlbGYsIHN0cnVjdCBld2FoX2JpdG1hcCAqb3RoZXIpOwordm9pZCBiaXRtYXBfb3Ioc3RydWN0IGJpdG1hcCAqc2VsZiwgY29uc3Qgc3RydWN0IGJpdG1hcCAqb3RoZXIpOworCit2b2lkIGJpdG1hcF9lYWNoX2JpdChzdHJ1Y3QgYml0bWFwICpzZWxmLCBld2FoX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKK3NpemVfdCBiaXRtYXBfcG9wY291bnQoc3RydWN0IGJpdG1hcCAqc2VsZik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZXdhaC9ld29rX3Jsdy5oIGIvZXdhaC9ld29rX3Jsdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZWZkZjkKLS0tIC9kZXYvbnVsbAorKysgYi9ld2FoL2V3b2tfcmx3LmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qKgorICogQ29weXJpZ2h0IDIwMTMsIEdpdEh1YiwgSW5jCisgKiBDb3B5cmlnaHQgMjAwOS0yMDEzLCBEYW5pZWwgTGVtaXJlLCBDbGlmZiBNb29uLAorICoJRGF2aWQgTWNJbnRvc2gsIFJvYmVydCBCZWNobywgR29vZ2xlIEluYy4gYW5kIFZlcm9uaWthIFplbnoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpZm5kZWYgX19FV09LX1JMV19IX18KKyNkZWZpbmUgX19FV09LX1JMV19IX18KKworI2RlZmluZSBSTFdfUlVOTklOR19CSVRTIChzaXplb2YoZXdvcmRfdCkgKiA0KQorI2RlZmluZSBSTFdfTElURVJBTF9CSVRTIChzaXplb2YoZXdvcmRfdCkgKiA4IC0gMSAtIFJMV19SVU5OSU5HX0JJVFMpCisKKyNkZWZpbmUgUkxXX0xBUkdFU1RfUlVOTklOR19DT1VOVCAoKChld29yZF90KTEgPDwgUkxXX1JVTk5JTkdfQklUUykgLSAxKQorI2RlZmluZSBSTFdfTEFSR0VTVF9MSVRFUkFMX0NPVU5UICgoKGV3b3JkX3QpMSA8PCBSTFdfTElURVJBTF9CSVRTKSAtIDEpCisKKyNkZWZpbmUgUkxXX0xBUkdFU1RfUlVOTklOR19DT1VOVF9TSElGVCAoUkxXX0xBUkdFU1RfUlVOTklOR19DT1VOVCA8PCAxKQorCisjZGVmaW5lIFJMV19SVU5OSU5HX0xFTl9QTFVTX0JJVCAoKChld29yZF90KTEgPDwgKFJMV19SVU5OSU5HX0JJVFMgKyAxKSkgLSAxKQorCitzdGF0aWMgaW50IHJsd19nZXRfcnVuX2JpdChjb25zdCBld29yZF90ICp3b3JkKQoreworCXJldHVybiAqd29yZCAmIChld29yZF90KTE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBybHdfc2V0X3J1bl9iaXQoZXdvcmRfdCAqd29yZCwgaW50IGIpCit7CisJaWYgKGIpIHsKKwkJKndvcmQgfD0gKGV3b3JkX3QpMTsKKwl9IGVsc2UgeworCQkqd29yZCAmPSAoZXdvcmRfdCkofjEpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHJsd194b3JfcnVuX2JpdChld29yZF90ICp3b3JkKQoreworCWlmICgqd29yZCAmIDEpIHsKKwkJKndvcmQgJj0gKGV3b3JkX3QpKH4xKTsKKwl9IGVsc2UgeworCQkqd29yZCB8PSAoZXdvcmRfdCkxOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHJsd19zZXRfcnVubmluZ19sZW4oZXdvcmRfdCAqd29yZCwgZXdvcmRfdCBsKQoreworCSp3b3JkIHw9IFJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlRfU0hJRlQ7CisJKndvcmQgJj0gKGwgPDwgMSkgfCAoflJMV19MQVJHRVNUX1JVTk5JTkdfQ09VTlRfU0hJRlQpOworfQorCitzdGF0aWMgaW5saW5lIGV3b3JkX3Qgcmx3X2dldF9ydW5uaW5nX2xlbihjb25zdCBld29yZF90ICp3b3JkKQoreworCXJldHVybiAoKndvcmQgPj4gMSkgJiBSTFdfTEFSR0VTVF9SVU5OSU5HX0NPVU5UOworfQorCitzdGF0aWMgaW5saW5lIGV3b3JkX3Qgcmx3X2dldF9saXRlcmFsX3dvcmRzKGNvbnN0IGV3b3JkX3QgKndvcmQpCit7CisJcmV0dXJuICp3b3JkID4+ICgxICsgUkxXX1JVTk5JTkdfQklUUyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBybHdfc2V0X2xpdGVyYWxfd29yZHMoZXdvcmRfdCAqd29yZCwgZXdvcmRfdCBsKQoreworCSp3b3JkIHw9IH5STFdfUlVOTklOR19MRU5fUExVU19CSVQ7CisJKndvcmQgJj0gKGwgPDwgKFJMV19SVU5OSU5HX0JJVFMgKyAxKSkgfCBSTFdfUlVOTklOR19MRU5fUExVU19CSVQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgZXdvcmRfdCBybHdfc2l6ZShjb25zdCBld29yZF90ICpzZWxmKQoreworCXJldHVybiBybHdfZ2V0X3J1bm5pbmdfbGVuKHNlbGYpICsgcmx3X2dldF9saXRlcmFsX3dvcmRzKHNlbGYpOworfQorCitzdHJ1Y3Qgcmx3X2l0ZXJhdG9yIHsKKwljb25zdCBld29yZF90ICpidWZmZXI7CisJc2l6ZV90IHNpemU7CisJc2l6ZV90IHBvaW50ZXI7CisJc2l6ZV90IGxpdGVyYWxfd29yZF9zdGFydDsKKworCXN0cnVjdCB7CisJCWNvbnN0IGV3b3JkX3QgKndvcmQ7CisJCWludCBsaXRlcmFsX3dvcmRzOworCQlpbnQgcnVubmluZ19sZW47CisJCWludCBsaXRlcmFsX3dvcmRfb2Zmc2V0OworCQlpbnQgcnVubmluZ19iaXQ7CisJfSBybHc7Cit9OworCit2b2lkIHJsd2l0X2luaXQoc3RydWN0IHJsd19pdGVyYXRvciAqaXQsIHN0cnVjdCBld2FoX2JpdG1hcCAqYml0bWFwKTsKK3ZvaWQgcmx3aXRfZGlzY2FyZF9maXJzdF93b3JkcyhzdHJ1Y3Qgcmx3X2l0ZXJhdG9yICppdCwgc2l6ZV90IHgpOworc2l6ZV90IHJsd2l0X2Rpc2NoYXJnZSgKKwlzdHJ1Y3Qgcmx3X2l0ZXJhdG9yICppdCwgc3RydWN0IGV3YWhfYml0bWFwICpvdXQsIHNpemVfdCBtYXgsIGludCBuZWdhdGUpOwordm9pZCBybHdpdF9kaXNjaGFyZ2VfZW1wdHkoc3RydWN0IHJsd19pdGVyYXRvciAqaXQsIHN0cnVjdCBld2FoX2JpdG1hcCAqb3V0KTsKKworc3RhdGljIGlubGluZSBzaXplX3Qgcmx3aXRfd29yZF9zaXplKHN0cnVjdCBybHdfaXRlcmF0b3IgKml0KQoreworCXJldHVybiBpdC0+cmx3LnJ1bm5pbmdfbGVuICsgaXQtPnJsdy5saXRlcmFsX3dvcmRzOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBybHdpdF9saXRlcmFsX3dvcmRzKHN0cnVjdCBybHdfaXRlcmF0b3IgKml0KQoreworCXJldHVybiBpdC0+cG9pbnRlciAtIGl0LT5ybHcubGl0ZXJhbF93b3JkczsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9leGVjX2NtZC5jIGIvZXhlY19jbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODVmMGZkCi0tLSAvZGV2L251bGwKKysrIGIvZXhlY19jbWQuYwpAQCAtMCwwICsxLDE2MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJxdW90ZS5oIgorI2RlZmluZSBNQVhfQVJHUwkzMgorCitzdGF0aWMgY29uc3QgY2hhciAqYXJndl9leGVjX3BhdGg7CitzdGF0aWMgY29uc3QgY2hhciAqYXJndjBfcGF0aDsKKworY2hhciAqc3lzdGVtX3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKyNpZmRlZiBSVU5USU1FX1BSRUZJWAorCXN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXg7CisjZWxzZQorCXN0YXRpYyBjb25zdCBjaGFyICpwcmVmaXggPSBQUkVGSVg7CisjZW5kaWYKKwlzdHJ1Y3Qgc3RyYnVmIGQgPSBTVFJCVUZfSU5JVDsKKworCWlmIChpc19hYnNvbHV0ZV9wYXRoKHBhdGgpKQorCQlyZXR1cm4geHN0cmR1cChwYXRoKTsKKworI2lmZGVmIFJVTlRJTUVfUFJFRklYCisJYXNzZXJ0KGFyZ3YwX3BhdGgpOworCWFzc2VydChpc19hYnNvbHV0ZV9wYXRoKGFyZ3YwX3BhdGgpKTsKKworCWlmICghcHJlZml4ICYmCisJICAgICEocHJlZml4ID0gc3RyaXBfcGF0aF9zdWZmaXgoYXJndjBfcGF0aCwgR0lUX0VYRUNfUEFUSCkpICYmCisJICAgICEocHJlZml4ID0gc3RyaXBfcGF0aF9zdWZmaXgoYXJndjBfcGF0aCwgQklORElSKSkgJiYKKwkgICAgIShwcmVmaXggPSBzdHJpcF9wYXRoX3N1ZmZpeChhcmd2MF9wYXRoLCAiZ2l0IikpKSB7CisJCXByZWZpeCA9IFBSRUZJWDsKKwkJdHJhY2VfcHJpbnRmKCJSVU5USU1FX1BSRUZJWCByZXF1ZXN0ZWQsICIKKwkJCQkiYnV0IHByZWZpeCBjb21wdXRhdGlvbiBmYWlsZWQuICAiCisJCQkJIlVzaW5nIHN0YXRpYyBmYWxsYmFjayAnJXMnLlxuIiwgcHJlZml4KTsKKwl9CisjZW5kaWYKKworCXN0cmJ1Zl9hZGRmKCZkLCAiJXMvJXMiLCBwcmVmaXgsIHBhdGgpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZkLCBOVUxMKTsKK30KKworY29uc3QgY2hhciAqZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChjb25zdCBjaGFyICphcmd2MCkKK3sKKwljb25zdCBjaGFyICpzbGFzaDsKKworCWlmICghYXJndjAgfHwgISphcmd2MCkKKwkJcmV0dXJuIE5VTEw7CisJc2xhc2ggPSBhcmd2MCArIHN0cmxlbihhcmd2MCk7CisKKwl3aGlsZSAoYXJndjAgPD0gc2xhc2ggJiYgIWlzX2Rpcl9zZXAoKnNsYXNoKSkKKwkJc2xhc2gtLTsKKworCWlmIChzbGFzaCA+PSBhcmd2MCkgeworCQlhcmd2MF9wYXRoID0geHN0cm5kdXAoYXJndjAsIHNsYXNoIC0gYXJndjApOworCQlyZXR1cm4gc2xhc2ggKyAxOworCX0KKworCXJldHVybiBhcmd2MDsKK30KKwordm9pZCBnaXRfc2V0X2FyZ3ZfZXhlY19wYXRoKGNvbnN0IGNoYXIgKmV4ZWNfcGF0aCkKK3sKKwlhcmd2X2V4ZWNfcGF0aCA9IGV4ZWNfcGF0aDsKKwkvKgorCSAqIFByb3BhZ2F0ZSB0aGlzIHNldHRpbmcgdG8gZXh0ZXJuYWwgcHJvZ3JhbXMuCisJICovCisJc2V0ZW52KEVYRUNfUEFUSF9FTlZJUk9OTUVOVCwgZXhlY19wYXRoLCAxKTsKK30KKworCisvKiBSZXR1cm5zIHRoZSBoaWdoZXN0LXByaW9yaXR5LCBsb2NhdGlvbiB0byBsb29rIGZvciBnaXQgcHJvZ3JhbXMuICovCitjb25zdCBjaGFyICpnaXRfZXhlY19wYXRoKHZvaWQpCit7CisJY29uc3QgY2hhciAqZW52OworCisJaWYgKGFyZ3ZfZXhlY19wYXRoKQorCQlyZXR1cm4gYXJndl9leGVjX3BhdGg7CisKKwllbnYgPSBnZXRlbnYoRVhFQ19QQVRIX0VOVklST05NRU5UKTsKKwlpZiAoZW52ICYmICplbnYpIHsKKwkJcmV0dXJuIGVudjsKKwl9CisKKwlyZXR1cm4gc3lzdGVtX3BhdGgoR0lUX0VYRUNfUEFUSCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wYXRoKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAocGF0aCAmJiAqcGF0aCkgeworCQlzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgob3V0LCBwYXRoKTsKKwkJc3RyYnVmX2FkZGNoKG91dCwgUEFUSF9TRVApOworCX0KK30KKwordm9pZCBzZXR1cF9wYXRoKHZvaWQpCit7CisJY29uc3QgY2hhciAqb2xkX3BhdGggPSBnZXRlbnYoIlBBVEgiKTsKKwlzdHJ1Y3Qgc3RyYnVmIG5ld19wYXRoID0gU1RSQlVGX0lOSVQ7CisKKwlhZGRfcGF0aCgmbmV3X3BhdGgsIGdpdF9leGVjX3BhdGgoKSk7CisKKwlpZiAob2xkX3BhdGgpCisJCXN0cmJ1Zl9hZGRzdHIoJm5ld19wYXRoLCBvbGRfcGF0aCk7CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKCZuZXdfcGF0aCwgX1BBVEhfREVGUEFUSCk7CisKKwlzZXRlbnYoIlBBVEgiLCBuZXdfcGF0aC5idWYsIDEpOworCisJc3RyYnVmX3JlbGVhc2UoJm5ld19wYXRoKTsKK30KKworY29uc3QgY2hhciAqKnByZXBhcmVfZ2l0X2NtZChjb25zdCBjaGFyICoqYXJndikKK3sKKwlpbnQgYXJnYzsKKwljb25zdCBjaGFyICoqbmFyZ3Y7CisKKwlmb3IgKGFyZ2MgPSAwOyBhcmd2W2FyZ2NdOyBhcmdjKyspCisJCTsgLyoganVzdCBjb3VudGluZyAqLworCW5hcmd2ID0geG1hbGxvYyhzaXplb2YoKm5hcmd2KSAqIChhcmdjICsgMikpOworCisJbmFyZ3ZbMF0gPSAiZ2l0IjsKKwlmb3IgKGFyZ2MgPSAwOyBhcmd2W2FyZ2NdOyBhcmdjKyspCisJCW5hcmd2W2FyZ2MgKyAxXSA9IGFyZ3ZbYXJnY107CisJbmFyZ3ZbYXJnYyArIDFdID0gTlVMTDsKKwlyZXR1cm4gbmFyZ3Y7Cit9CisKK2ludCBleGVjdl9naXRfY21kKGNvbnN0IGNoYXIgKiphcmd2KSB7CisJY29uc3QgY2hhciAqKm5hcmd2ID0gcHJlcGFyZV9naXRfY21kKGFyZ3YpOworCXRyYWNlX2FyZ3ZfcHJpbnRmKG5hcmd2LCAidHJhY2U6IGV4ZWM6Iik7CisKKwkvKiBleGVjdnAoKSBjYW4gb25seSBldmVyIHJldHVybiBpZiBpdCBmYWlscyAqLworCXNhbmVfZXhlY3ZwKCJnaXQiLCAoY2hhciAqKiluYXJndik7CisKKwl0cmFjZV9wcmludGYoInRyYWNlOiBleGVjIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisKKwlmcmVlKG5hcmd2KTsKKwlyZXR1cm4gLTE7Cit9CisKKworaW50IGV4ZWNsX2dpdF9jbWQoY29uc3QgY2hhciAqY21kLC4uLikKK3sKKwlpbnQgYXJnYzsKKwljb25zdCBjaGFyICphcmd2W01BWF9BUkdTICsgMV07CisJY29uc3QgY2hhciAqYXJnOworCXZhX2xpc3QgcGFyYW07CisKKwl2YV9zdGFydChwYXJhbSwgY21kKTsKKwlhcmd2WzBdID0gY21kOworCWFyZ2MgPSAxOworCXdoaWxlIChhcmdjIDwgTUFYX0FSR1MpIHsKKwkJYXJnID0gYXJndlthcmdjKytdID0gdmFfYXJnKHBhcmFtLCBjaGFyICopOworCQlpZiAoIWFyZykKKwkJCWJyZWFrOworCX0KKwl2YV9lbmQocGFyYW0pOworCWlmIChNQVhfQVJHUyA8PSBhcmdjKQorCQlyZXR1cm4gZXJyb3IoInRvbyBtYW55IGFyZ3MgdG8gcnVuICVzIiwgY21kKTsKKworCWFyZ3ZbYXJnY10gPSBOVUxMOworCXJldHVybiBleGVjdl9naXRfY21kKGFyZ3YpOworfQpkaWZmIC0tZ2l0IGEvZXhlY19jbWQuaCBiL2V4ZWNfY21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiMGMwMgotLS0gL2Rldi9udWxsCisrKyBiL2V4ZWNfY21kLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBHSVRfRVhFQ19DTURfSAorI2RlZmluZSBHSVRfRVhFQ19DTURfSAorCitleHRlcm4gdm9pZCBnaXRfc2V0X2FyZ3ZfZXhlY19wYXRoKGNvbnN0IGNoYXIgKmV4ZWNfcGF0aCk7CitleHRlcm4gY29uc3QgY2hhciAqZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiBjb25zdCBjaGFyICpnaXRfZXhlY19wYXRoKHZvaWQpOworZXh0ZXJuIHZvaWQgc2V0dXBfcGF0aCh2b2lkKTsKK2V4dGVybiBjb25zdCBjaGFyICoqcHJlcGFyZV9naXRfY21kKGNvbnN0IGNoYXIgKiphcmd2KTsKK2V4dGVybiBpbnQgZXhlY3ZfZ2l0X2NtZChjb25zdCBjaGFyICoqYXJndik7IC8qIE5VTEwgdGVybWluYXRlZCAqLworTEFTVF9BUkdfTVVTVF9CRV9OVUxMCitleHRlcm4gaW50IGV4ZWNsX2dpdF9jbWQoY29uc3QgY2hhciAqY21kLCAuLi4pOworZXh0ZXJuIGNoYXIgKnN5c3RlbV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpOworCisjZW5kaWYgLyogR0lUX0VYRUNfQ01EX0ggKi8KZGlmZiAtLWdpdCBhL2Zhc3QtaW1wb3J0LmMgYi9mYXN0LWltcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzYjQyMWQKLS0tIC9kZXYvbnVsbAorKysgYi9mYXN0LWltcG9ydC5jCkBAIC0wLDAgKzEsMzQ5OCBAQAorLyoKKyhTZWUgRG9jdW1lbnRhdGlvbi9naXQtZmFzdC1pbXBvcnQudHh0IGZvciBtYWludGFpbmVkIGRvY3VtZW50YXRpb24uKQorRm9ybWF0IG9mIFNURElOIHN0cmVhbToKKworICBzdHJlYW0gOjo9IGNtZCo7CisKKyAgY21kIDo6PSBuZXdfYmxvYgorICAgICAgICB8IG5ld19jb21taXQKKyAgICAgICAgfCBuZXdfdGFnCisgICAgICAgIHwgcmVzZXRfYnJhbmNoCisgICAgICAgIHwgY2hlY2twb2ludAorICAgICAgICB8IHByb2dyZXNzCisgICAgICAgIDsKKworICBuZXdfYmxvYiA6Oj0gJ2Jsb2InIGxmCisgICAgbWFyaz8KKyAgICBmaWxlX2NvbnRlbnQ7CisgIGZpbGVfY29udGVudCA6Oj0gZGF0YTsKKworICBuZXdfY29tbWl0IDo6PSAnY29tbWl0JyBzcCByZWZfc3RyIGxmCisgICAgbWFyaz8KKyAgICAoJ2F1dGhvcicgKHNwIG5hbWUpPyBzcCAnPCcgZW1haWwgJz4nIHNwIHdoZW4gbGYpPworICAgICdjb21taXR0ZXInIChzcCBuYW1lKT8gc3AgJzwnIGVtYWlsICc+JyBzcCB3aGVuIGxmCisgICAgY29tbWl0X21zZworICAgICgnZnJvbScgc3AgY29tbWl0LWlzaCBsZik/CisgICAgKCdtZXJnZScgc3AgY29tbWl0LWlzaCBsZikqCisgICAgKGZpbGVfY2hhbmdlIHwgbHMpKgorICAgIGxmPzsKKyAgY29tbWl0X21zZyA6Oj0gZGF0YTsKKworICBscyA6Oj0gJ2xzJyBzcCAnIicgcXVvdGVkKHBhdGgpICciJyBsZjsKKworICBmaWxlX2NoYW5nZSA6Oj0gZmlsZV9jbHIKKyAgICB8IGZpbGVfZGVsCisgICAgfCBmaWxlX3JubQorICAgIHwgZmlsZV9jcHkKKyAgICB8IGZpbGVfb2JtCisgICAgfCBmaWxlX2lubTsKKyAgZmlsZV9jbHIgOjo9ICdkZWxldGVhbGwnIGxmOworICBmaWxlX2RlbCA6Oj0gJ0QnIHNwIHBhdGhfc3RyIGxmOworICBmaWxlX3JubSA6Oj0gJ1InIHNwIHBhdGhfc3RyIHNwIHBhdGhfc3RyIGxmOworICBmaWxlX2NweSA6Oj0gJ0MnIHNwIHBhdGhfc3RyIHNwIHBhdGhfc3RyIGxmOworICBmaWxlX29ibSA6Oj0gJ00nIHNwIG1vZGUgc3AgKGhleHNoYTEgfCBpZG51bSkgc3AgcGF0aF9zdHIgbGY7CisgIGZpbGVfaW5tIDo6PSAnTScgc3AgbW9kZSBzcCAnaW5saW5lJyBzcCBwYXRoX3N0ciBsZgorICAgIGRhdGE7CisgIG5vdGVfb2JtIDo6PSAnTicgc3AgKGhleHNoYTEgfCBpZG51bSkgc3AgY29tbWl0LWlzaCBsZjsKKyAgbm90ZV9pbm0gOjo9ICdOJyBzcCAnaW5saW5lJyBzcCBjb21taXQtaXNoIGxmCisgICAgZGF0YTsKKworICBuZXdfdGFnIDo6PSAndGFnJyBzcCB0YWdfc3RyIGxmCisgICAgJ2Zyb20nIHNwIGNvbW1pdC1pc2ggbGYKKyAgICAoJ3RhZ2dlcicgKHNwIG5hbWUpPyBzcCAnPCcgZW1haWwgJz4nIHNwIHdoZW4gbGYpPworICAgIHRhZ19tc2c7CisgIHRhZ19tc2cgOjo9IGRhdGE7CisKKyAgcmVzZXRfYnJhbmNoIDo6PSAncmVzZXQnIHNwIHJlZl9zdHIgbGYKKyAgICAoJ2Zyb20nIHNwIGNvbW1pdC1pc2ggbGYpPworICAgIGxmPzsKKworICBjaGVja3BvaW50IDo6PSAnY2hlY2twb2ludCcgbGYKKyAgICBsZj87CisKKyAgcHJvZ3Jlc3MgOjo9ICdwcm9ncmVzcycgc3Agbm90X2xmKiBsZgorICAgIGxmPzsKKworICAgICAjIG5vdGU6IHRoZSBmaXJzdCBpZG51bSBpbiBhIHN0cmVhbSBzaG91bGQgYmUgMSBhbmQgc3Vic2VxdWVudAorICAgICAjIGlkbnVtcyBzaG91bGQgbm90IGhhdmUgZ2FwcyBiZXR3ZWVuIHZhbHVlcyBhcyB0aGlzIHdpbGwgY2F1c2UKKyAgICAgIyB0aGUgc3RyZWFtIHBhcnNlciB0byByZXNlcnZlIHNwYWNlIGZvciB0aGUgZ2FwcGVkIHZhbHVlcy4gIEFuCisgICAgICMgaWRudW0gY2FuIGJlIHVwZGF0ZWQgaW4gdGhlIGZ1dHVyZSB0byBhIG5ldyBvYmplY3QgYnkgaXNzdWluZworICAgICAjIGEgbmV3IG1hcmsgZGlyZWN0aXZlIHdpdGggdGhlIG9sZCBpZG51bS4KKyAgICAgIworICBtYXJrIDo6PSAnbWFyaycgc3AgaWRudW0gbGY7CisgIGRhdGEgOjo9IChkZWxpbWl0ZWRfZGF0YSB8IGV4YWN0X2RhdGEpCisgICAgbGY/OworCisgICAgIyBub3RlOiBkZWxpbSBtYXkgYmUgYW55IHN0cmluZyBidXQgbXVzdCBub3QgY29udGFpbiBsZi4KKyAgICAjIGRhdGFfbGluZSBtYXkgY29udGFpbiBhbnkgZGF0YSBidXQgbXVzdCBub3QgYmUgZXhhY3RseQorICAgICMgZGVsaW0uCisgIGRlbGltaXRlZF9kYXRhIDo6PSAnZGF0YScgc3AgJzw8JyBkZWxpbSBsZgorICAgIChkYXRhX2xpbmUgbGYpKgorICAgIGRlbGltIGxmOworCisgICAgICMgbm90ZTogZGVjbGVuIGluZGljYXRlcyB0aGUgbGVuZ3RoIG9mIGJpbmFyeV9kYXRhIGluIGJ5dGVzLgorICAgICAjIGRlY2xlbiBkb2VzIG5vdCBpbmNsdWRlIHRoZSBsZiBwcmVjZWRpbmcgdGhlIGJpbmFyeSBkYXRhLgorICAgICAjCisgIGV4YWN0X2RhdGEgOjo9ICdkYXRhJyBzcCBkZWNsZW4gbGYKKyAgICBiaW5hcnlfZGF0YTsKKworICAgICAjIG5vdGU6IHF1b3RlZCBzdHJpbmdzIGFyZSBDLXN0eWxlIHF1b3Rpbmcgc3VwcG9ydGluZyBcYyBmb3IKKyAgICAgIyBjb21tb24gZXNjYXBlcyBvZiAnYycgKGUuLmcgXG4sIFx0LCBcXCwgXCIpIG9yIFxubm4gd2hlcmUgbm5uCisgICAgICMgaXMgdGhlIHNpZ25lZCBieXRlIHZhbHVlIGluIG9jdGFsLiAgTm90ZSB0aGF0IHRoZSBvbmx5CisgICAgICMgY2hhcmFjdGVycyB3aGljaCBtdXN0IGFjdHVhbGx5IGJlIGVzY2FwZWQgdG8gcHJvdGVjdCB0aGUKKyAgICAgIyBzdHJlYW0gZm9ybWF0dGluZyBpczogXCwgIiBhbmQgTEYuICBPdGhlcndpc2UgdGhlc2UgdmFsdWVzCisgICAgICMgYXJlIFVURjguCisgICAgICMKKyAgY29tbWl0LWlzaCAgOjo9IChyZWZfc3RyIHwgaGV4c2hhMSB8IHNoYTFleHBfc3RyIHwgaWRudW0pOworICByZWZfc3RyICAgICA6Oj0gcmVmOworICBzaGExZXhwX3N0ciA6Oj0gc2hhMWV4cDsKKyAgdGFnX3N0ciAgICAgOjo9IHRhZzsKKyAgcGF0aF9zdHIgICAgOjo9IHBhdGggICAgfCAnIicgcXVvdGVkKHBhdGgpICAgICciJyA7CisgIG1vZGUgICAgICAgIDo6PSAnMTAwNjQ0JyB8ICc2NDQnCisgICAgICAgICAgICAgICAgfCAnMTAwNzU1JyB8ICc3NTUnCisgICAgICAgICAgICAgICAgfCAnMTIwMDAwJworICAgICAgICAgICAgICAgIDsKKworICBkZWNsZW4gOjo9ICMgdW5zaWduZWQgMzIgYml0IHZhbHVlLCBhc2NpaSBiYXNlMTAgbm90YXRpb247CisgIGJpZ2ludCA6Oj0gIyB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlLCBhc2NpaSBiYXNlMTAgbm90YXRpb247CisgIGJpbmFyeV9kYXRhIDo6PSAjIGZpbGUgY29udGVudCwgbm90IGludGVycHJldGVkOworCisgIHdoZW4gICAgICAgICA6Oj0gcmF3X3doZW4gfCByZmMyODIyX3doZW47CisgIHJhd193aGVuICAgICA6Oj0gdHMgc3AgdHo7CisgIHJmYzI4MjJfd2hlbiA6Oj0gIyBWYWxpZCBSRkMgMjgyMiBkYXRlIGFuZCB0aW1lOworCisgIHNwIDo6PSAjIEFTQ0lJIHNwYWNlIGNoYXJhY3RlcjsKKyAgbGYgOjo9ICMgQVNDSUkgbmV3bGluZSAoTEYpIGNoYXJhY3RlcjsKKworICAgICAjIG5vdGU6IGEgY29sb24gKCc6JykgbXVzdCBwcmVjZWRlIHRoZSBudW1lcmljYWwgdmFsdWUgYXNzaWduZWQgdG8KKyAgICAgIyBhbiBpZG51bS4gIFRoaXMgaXMgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBhIHJlZiBvciB0YWcgbmFtZSBhcworICAgICAjIEdJVCBkb2VzIG5vdCBwZXJtaXQgJzonIGluIHJlZiBvciB0YWcgc3RyaW5ncy4KKyAgICAgIworICBpZG51bSAgIDo6PSAnOicgYmlnaW50OworICBwYXRoICAgIDo6PSAjIEdJVCBzdHlsZSBmaWxlIHBhdGgsIGUuZy4gImEvYi9jIjsKKyAgcmVmICAgICA6Oj0gIyBHSVQgcmVmIG5hbWUsIGUuZy4gInJlZnMvaGVhZHMvTU9aX0dFQ0tPX0VYUEVSSU1FTlQiOworICB0YWcgICAgIDo6PSAjIEdJVCB0YWcgbmFtZSwgZS5nLiAiRklSRUZPWF8xXzUiOworICBzaGExZXhwIDo6PSAjIEFueSB2YWxpZCBHSVQgU0hBMSBleHByZXNzaW9uOworICBoZXhzaGExIDo6PSAjIFNIQTEgaW4gaGV4YWRlY2ltYWwgZm9ybWF0OworCisgICAgICMgbm90ZTogbmFtZSBhbmQgZW1haWwgYXJlIFVURjggc3RyaW5ncywgaG93ZXZlciBuYW1lIG11c3Qgbm90CisgICAgICMgY29udGFpbiAnPCcgb3IgbGYgYW5kIGVtYWlsIG11c3Qgbm90IGNvbnRhaW4gYW55IG9mIHRoZQorICAgICAjIGZvbGxvd2luZzogJzwnLCAnPicsIGxmLgorICAgICAjCisgIG5hbWUgIDo6PSAjIHZhbGlkIEdJVCBhdXRob3IvY29tbWl0dGVyIG5hbWU7CisgIGVtYWlsIDo6PSAjIHZhbGlkIEdJVCBhdXRob3IvY29tbWl0dGVyIGVtYWlsOworICB0cyAgICA6Oj0gIyB0aW1lIHNpbmNlIHRoZSBlcG9jaCBpbiBzZWNvbmRzLCBhc2NpaSBiYXNlMTAgbm90YXRpb247CisgIHR6ICAgIDo6PSAjIEdJVCBzdHlsZSB0aW1lem9uZTsKKworICAgICAjIG5vdGU6IGNvbW1lbnRzLCBnZXQtbWFyaywgbHMtdHJlZSwgYW5kIGNhdC1ibG9iIHJlcXVlc3RzIG1heQorICAgICAjIGFwcGVhciBhbnl3aGVyZSBpbiB0aGUgaW5wdXQsIGV4Y2VwdCB3aXRoaW4gYSBkYXRhIGNvbW1hbmQuIEFueQorICAgICAjIGZvcm0gb2YgdGhlIGRhdGEgY29tbWFuZCBhbHdheXMgZXNjYXBlcyB0aGUgcmVsYXRlZCBpbnB1dCBmcm9tCisgICAgICMgY29tbWVudCBwcm9jZXNzaW5nLgorICAgICAjCisgICAgICMgSW4gY2FzZSBpdCBpcyBub3QgY2xlYXIsIHRoZSAnIycgdGhhdCBzdGFydHMgdGhlIGNvbW1lbnQKKyAgICAgIyBtdXN0IGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb24gdGhhdCBsaW5lIChhbiBsZgorICAgICAjIHByZWNlZGVkIGl0KS4KKyAgICAgIworCisgIGdldF9tYXJrIDo6PSAnZ2V0LW1hcmsnIHNwIGlkbnVtIGxmOworICBjYXRfYmxvYiA6Oj0gJ2NhdC1ibG9iJyBzcCAoaGV4c2hhMSB8IGlkbnVtKSBsZjsKKyAgbHNfdHJlZSAgOjo9ICdscycgc3AgKGhleHNoYTEgfCBpZG51bSkgc3AgcGF0aF9zdHIgbGY7CisKKyAgY29tbWVudCA6Oj0gJyMnIG5vdF9sZiogbGY7CisgIG5vdF9sZiAgOjo9ICMgQW55IGJ5dGUgdGhhdCBpcyBub3QgQVNDSUkgbmV3bGluZSAoTEYpOworKi8KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY3N1bS1maWxlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgImRpci5oIgorCisjZGVmaW5lIFBBQ0tfSURfQklUUyAxNgorI2RlZmluZSBNQVhfUEFDS19JRCAoKDE8PFBBQ0tfSURfQklUUyktMSkKKyNkZWZpbmUgREVQVEhfQklUUyAxMworI2RlZmluZSBNQVhfREVQVEggKCgxPDxERVBUSF9CSVRTKS0xKQorCisvKgorICogV2UgYWJ1c2UgdGhlIHNldHVpZCBiaXQgb24gZGlyZWN0b3JpZXMgdG8gbWVhbiAiZG8gbm90IGRlbHRhIi4KKyAqLworI2RlZmluZSBOT19ERUxUQSBTX0lTVUlECisKK3N0cnVjdCBvYmplY3RfZW50cnkgeworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSBpZHg7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqbmV4dDsKKwl1aW50MzJfdCB0eXBlIDogVFlQRV9CSVRTLAorCQlwYWNrX2lkIDogUEFDS19JRF9CSVRTLAorCQlkZXB0aCA6IERFUFRIX0JJVFM7Cit9OworCitzdHJ1Y3Qgb2JqZWN0X2VudHJ5X3Bvb2wgeworCXN0cnVjdCBvYmplY3RfZW50cnlfcG9vbCAqbmV4dF9wb29sOworCXN0cnVjdCBvYmplY3RfZW50cnkgKm5leHRfZnJlZTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbmQ7CisJc3RydWN0IG9iamVjdF9lbnRyeSBlbnRyaWVzW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCitzdHJ1Y3QgbWFya19zZXQgeworCXVuaW9uIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqbWFya2VkWzEwMjRdOworCQlzdHJ1Y3QgbWFya19zZXQgKnNldHNbMTAyNF07CisJfSBkYXRhOworCXVuc2lnbmVkIGludCBzaGlmdDsKK307CisKK3N0cnVjdCBsYXN0X29iamVjdCB7CisJc3RydWN0IHN0cmJ1ZiBkYXRhOworCW9mZl90IG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgZGVwdGg7CisJdW5zaWduZWQgbm9fc3dhcCA6IDE7Cit9OworCitzdHJ1Y3QgbWVtX3Bvb2wgeworCXN0cnVjdCBtZW1fcG9vbCAqbmV4dF9wb29sOworCWNoYXIgKm5leHRfZnJlZTsKKwljaGFyICplbmQ7CisJdWludG1heF90IHNwYWNlW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCitzdHJ1Y3QgYXRvbV9zdHIgeworCXN0cnVjdCBhdG9tX3N0ciAqbmV4dF9hdG9tOworCXVuc2lnbmVkIHNob3J0IHN0cl9sZW47CisJY2hhciBzdHJfZGF0W0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCitzdHJ1Y3QgdHJlZV9jb250ZW50Oworc3RydWN0IHRyZWVfZW50cnkgeworCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnRyZWU7CisJc3RydWN0IGF0b21fc3RyICpuYW1lOworCXN0cnVjdCB0cmVlX2VudHJ5X21zIHsKKwkJdWludDE2X3QgbW9kZTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl9IHZlcnNpb25zWzJdOworfTsKKworc3RydWN0IHRyZWVfY29udGVudCB7CisJdW5zaWduZWQgaW50IGVudHJ5X2NhcGFjaXR5OyAvKiBtdXN0IG1hdGNoIGF2YWlsX3RyZWVfY29udGVudCAqLworCXVuc2lnbmVkIGludCBlbnRyeV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgZGVsdGFfZGVwdGg7CisJc3RydWN0IHRyZWVfZW50cnkgKmVudHJpZXNbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKK3N0cnVjdCBhdmFpbF90cmVlX2NvbnRlbnQgeworCXVuc2lnbmVkIGludCBlbnRyeV9jYXBhY2l0eTsgLyogbXVzdCBtYXRjaCB0cmVlX2NvbnRlbnQgKi8KKwlzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50ICpuZXh0X2F2YWlsOworfTsKKworc3RydWN0IGJyYW5jaCB7CisJc3RydWN0IGJyYW5jaCAqdGFibGVfbmV4dF9icmFuY2g7CisJc3RydWN0IGJyYW5jaCAqYWN0aXZlX25leHRfYnJhbmNoOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHRyZWVfZW50cnkgYnJhbmNoX3RyZWU7CisJdWludG1heF90IGxhc3RfY29tbWl0OworCXVpbnRtYXhfdCBudW1fbm90ZXM7CisJdW5zaWduZWQgYWN0aXZlIDogMTsKKwl1bnNpZ25lZCBkZWxldGUgOiAxOworCXVuc2lnbmVkIHBhY2tfaWQgOiBQQUNLX0lEX0JJVFM7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKK307CisKK3N0cnVjdCB0YWcgeworCXN0cnVjdCB0YWcgKm5leHRfdGFnOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IHBhY2tfaWQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKK307CisKK3N0cnVjdCBoYXNoX2xpc3QgeworCXN0cnVjdCBoYXNoX2xpc3QgKm5leHQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKK307CisKK3R5cGVkZWYgZW51bSB7CisJV0hFTlNQRUNfUkFXID0gMSwKKwlXSEVOU1BFQ19SRkMyODIyLAorCVdIRU5TUEVDX05PVworfSB3aGVuc3BlY190eXBlOworCitzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgeworCXN0cnVjdCByZWNlbnRfY29tbWFuZCAqcHJldjsKKwlzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgKm5leHQ7CisJY2hhciAqYnVmOworfTsKKworLyogQ29uZmlndXJlZCBsaW1pdHMgb24gb3V0cHV0ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfZGVwdGggPSAxMDsKK3N0YXRpYyBvZmZfdCBtYXhfcGFja3NpemU7CitzdGF0aWMgaW50IGZvcmNlX3VwZGF0ZTsKK3N0YXRpYyBpbnQgcGFja19jb21wcmVzc2lvbl9sZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKK3N0YXRpYyBpbnQgcGFja19jb21wcmVzc2lvbl9zZWVuOworCisvKiBTdGF0cyBhbmQgbWlzYy4gY291bnRlcnMgKi8KK3N0YXRpYyB1aW50bWF4X3QgYWxsb2NfY291bnQ7CitzdGF0aWMgdWludG1heF90IG1hcmtzX3NldF9jb3VudDsKK3N0YXRpYyB1aW50bWF4X3Qgb2JqZWN0X2NvdW50X2J5X3R5cGVbMSA8PCBUWVBFX0JJVFNdOworc3RhdGljIHVpbnRtYXhfdCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVsxIDw8IFRZUEVfQklUU107CitzdGF0aWMgdWludG1heF90IGRlbHRhX2NvdW50X2J5X3R5cGVbMSA8PCBUWVBFX0JJVFNdOworc3RhdGljIHVpbnRtYXhfdCBkZWx0YV9jb3VudF9hdHRlbXB0c19ieV90eXBlWzEgPDwgVFlQRV9CSVRTXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9iamVjdF9jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJyYW5jaF9jb3VudDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJyYW5jaF9sb2FkX2NvdW50Oworc3RhdGljIGludCBmYWlsdXJlOworc3RhdGljIEZJTEUgKnBhY2tfZWRnZXM7CitzdGF0aWMgdW5zaWduZWQgaW50IHNob3dfc3RhdHMgPSAxOworc3RhdGljIGludCBnbG9iYWxfYXJnYzsKK3N0YXRpYyBjaGFyICoqZ2xvYmFsX2FyZ3Y7CisKKy8qIE1lbW9yeSBwb29scyAqLworc3RhdGljIHNpemVfdCBtZW1fcG9vbF9hbGxvYyA9IDIqMTAyNCoxMDI0IC0gc2l6ZW9mKHN0cnVjdCBtZW1fcG9vbCk7CitzdGF0aWMgc2l6ZV90IHRvdGFsX2FsbG9jZDsKK3N0YXRpYyBzdHJ1Y3QgbWVtX3Bvb2wgKm1lbV9wb29sOworCisvKiBBdG9tIG1hbmFnZW1lbnQgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRvbV90YWJsZV9zeiA9IDQ0NTE7CitzdGF0aWMgdW5zaWduZWQgaW50IGF0b21fY250Oworc3RhdGljIHN0cnVjdCBhdG9tX3N0ciAqKmF0b21fdGFibGU7CisKKy8qIFRoZSAucGFjayBmaWxlIGJlaW5nIGdlbmVyYXRlZCAqLworc3RhdGljIHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gcGFja19pZHhfb3B0czsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja19pZDsKK3N0YXRpYyBzdHJ1Y3Qgc2hhMWZpbGUgKnBhY2tfZmlsZTsKK3N0YXRpYyBzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja19kYXRhOworc3RhdGljIHN0cnVjdCBwYWNrZWRfZ2l0ICoqYWxsX3BhY2tzOworc3RhdGljIG9mZl90IHBhY2tfc2l6ZTsKKworLyogVGFibGUgb2Ygb2JqZWN0cyB3ZSd2ZSB3cml0dGVuLiAqLworc3RhdGljIHVuc2lnbmVkIGludCBvYmplY3RfZW50cnlfYWxsb2MgPSA1MDAwOworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnlfcG9vbCAqYmxvY2tzOworc3RhdGljIHN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdF90YWJsZVsxIDw8IDE2XTsKK3N0YXRpYyBzdHJ1Y3QgbWFya19zZXQgKm1hcmtzOworc3RhdGljIGNvbnN0IGNoYXIgKmV4cG9ydF9tYXJrc19maWxlOworc3RhdGljIGNvbnN0IGNoYXIgKmltcG9ydF9tYXJrc19maWxlOworc3RhdGljIGludCBpbXBvcnRfbWFya3NfZmlsZV9mcm9tX3N0cmVhbTsKK3N0YXRpYyBpbnQgaW1wb3J0X21hcmtzX2ZpbGVfaWdub3JlX21pc3Npbmc7CitzdGF0aWMgaW50IHJlbGF0aXZlX21hcmtzX3BhdGhzOworCisvKiBPdXIgbGFzdCBibG9iICovCitzdGF0aWMgc3RydWN0IGxhc3Rfb2JqZWN0IGxhc3RfYmxvYiA9IHsgU1RSQlVGX0lOSVQsIDAsIDAsIDAgfTsKKworLyogVHJlZSBtYW5hZ2VtZW50ICovCitzdGF0aWMgdW5zaWduZWQgaW50IHRyZWVfZW50cnlfYWxsb2MgPSAxMDAwOworc3RhdGljIHZvaWQgKmF2YWlsX3RyZWVfZW50cnk7CitzdGF0aWMgdW5zaWduZWQgaW50IGF2YWlsX3RyZWVfdGFibGVfc3ogPSAxMDA7CitzdGF0aWMgc3RydWN0IGF2YWlsX3RyZWVfY29udGVudCAqKmF2YWlsX3RyZWVfdGFibGU7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBvbGRfdHJlZSA9IFNUUkJVRl9JTklUOworc3RhdGljIHN0cnVjdCBzdHJidWYgbmV3X3RyZWUgPSBTVFJCVUZfSU5JVDsKKworLyogQnJhbmNoIGRhdGEgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9hY3RpdmVfYnJhbmNoZXMgPSA1Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3VyX2FjdGl2ZV9icmFuY2hlczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJyYW5jaF90YWJsZV9zeiA9IDEwMzk7CitzdGF0aWMgc3RydWN0IGJyYW5jaCAqKmJyYW5jaF90YWJsZTsKK3N0YXRpYyBzdHJ1Y3QgYnJhbmNoICphY3RpdmVfYnJhbmNoZXM7CisKKy8qIFRhZyBkYXRhICovCitzdGF0aWMgc3RydWN0IHRhZyAqZmlyc3RfdGFnOworc3RhdGljIHN0cnVjdCB0YWcgKmxhc3RfdGFnOworCisvKiBJbnB1dCBzdHJlYW0gcGFyc2luZyAqLworc3RhdGljIHdoZW5zcGVjX3R5cGUgd2hlbnNwZWMgPSBXSEVOU1BFQ19SQVc7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBjb21tYW5kX2J1ZiA9IFNUUkJVRl9JTklUOworc3RhdGljIGludCB1bnJlYWRfY29tbWFuZF9idWY7CitzdGF0aWMgc3RydWN0IHJlY2VudF9jb21tYW5kIGNtZF9oaXN0ID0geyZjbWRfaGlzdCwgJmNtZF9oaXN0LCBOVUxMfTsKK3N0YXRpYyBzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgKmNtZF90YWlsID0gJmNtZF9oaXN0Oworc3RhdGljIHN0cnVjdCByZWNlbnRfY29tbWFuZCAqcmNfZnJlZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY21kX3NhdmUgPSAxMDA7CitzdGF0aWMgdWludG1heF90IG5leHRfbWFyazsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG5ld19kYXRhID0gU1RSQlVGX0lOSVQ7CitzdGF0aWMgaW50IHNlZW5fZGF0YV9jb21tYW5kOworc3RhdGljIGludCByZXF1aXJlX2V4cGxpY2l0X3Rlcm1pbmF0aW9uOworCisvKiBTaWduYWwgaGFuZGxpbmcgKi8KK3N0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3QgY2hlY2twb2ludF9yZXF1ZXN0ZWQ7CisKKy8qIFdoZXJlIHRvIHdyaXRlIG91dHB1dCBvZiBjYXQtYmxvYiBjb21tYW5kcyAqLworc3RhdGljIGludCBjYXRfYmxvYl9mZCA9IFNURE9VVF9GSUxFTk87CisKK3N0YXRpYyB2b2lkIHBhcnNlX2FyZ3Yodm9pZCk7CitzdGF0aWMgdm9pZCBwYXJzZV9nZXRfbWFyayhjb25zdCBjaGFyICpwKTsKK3N0YXRpYyB2b2lkIHBhcnNlX2NhdF9ibG9iKGNvbnN0IGNoYXIgKnApOworc3RhdGljIHZvaWQgcGFyc2VfbHMoY29uc3QgY2hhciAqcCwgc3RydWN0IGJyYW5jaCAqYik7CisKK3N0YXRpYyB2b2lkIHdyaXRlX2JyYW5jaF9yZXBvcnQoRklMRSAqcnB0LCBzdHJ1Y3QgYnJhbmNoICpiKQoreworCWZwcmludGYocnB0LCAiJXM6XG4iLCBiLT5uYW1lKTsKKworCWZwcmludGYocnB0LCAiICBzdGF0dXMgICAgICA6Iik7CisJaWYgKGItPmFjdGl2ZSkKKwkJZnB1dHMoIiBhY3RpdmUiLCBycHQpOworCWlmIChiLT5icmFuY2hfdHJlZS50cmVlKQorCQlmcHV0cygiIGxvYWRlZCIsIHJwdCk7CisJaWYgKGlzX251bGxfc2hhMShiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5zaGExKSkKKwkJZnB1dHMoIiBkaXJ0eSIsIHJwdCk7CisJZnB1dGMoJ1xuJywgcnB0KTsKKworCWZwcmludGYocnB0LCAiICB0aXAgY29tbWl0ICA6ICVzXG4iLCBzaGExX3RvX2hleChiLT5zaGExKSk7CisJZnByaW50ZihycHQsICIgIG9sZCB0cmVlICAgIDogJXNcbiIsIHNoYTFfdG9faGV4KGItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLnNoYTEpKTsKKwlmcHJpbnRmKHJwdCwgIiAgY3VyIHRyZWUgICAgOiAlc1xuIiwgc2hhMV90b19oZXgoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0uc2hhMSkpOworCWZwcmludGYocnB0LCAiICBjb21taXQgY2xvY2s6ICUiIFBSSXVNQVggIlxuIiwgYi0+bGFzdF9jb21taXQpOworCisJZnB1dHMoIiAgbGFzdCBwYWNrICAgOiAiLCBycHQpOworCWlmIChiLT5wYWNrX2lkIDwgTUFYX1BBQ0tfSUQpCisJCWZwcmludGYocnB0LCAiJXUiLCBiLT5wYWNrX2lkKTsKKwlmcHV0YygnXG4nLCBycHQpOworCisJZnB1dGMoJ1xuJywgcnB0KTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9tYXJrc19oZWxwZXIoRklMRSAqLCB1aW50bWF4X3QsIHN0cnVjdCBtYXJrX3NldCAqKTsKKworc3RhdGljIHZvaWQgd3JpdGVfY3Jhc2hfcmVwb3J0KGNvbnN0IGNoYXIgKmVycikKK3sKKwljaGFyICpsb2MgPSBnaXRfcGF0aGR1cCgiZmFzdF9pbXBvcnRfY3Jhc2hfJSJQUkl1TUFYLCAodWludG1heF90KSBnZXRwaWQoKSk7CisJRklMRSAqcnB0ID0gZm9wZW4obG9jLCAidyIpOworCXN0cnVjdCBicmFuY2ggKmI7CisJdW5zaWduZWQgbG9uZyBsdTsKKwlzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgKnJjOworCisJaWYgKCFycHQpIHsKKwkJZXJyb3IoImNhbid0IHdyaXRlIGNyYXNoIHJlcG9ydCAlczogJXMiLCBsb2MsIHN0cmVycm9yKGVycm5vKSk7CisJCWZyZWUobG9jKTsKKwkJcmV0dXJuOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiZmFzdC1pbXBvcnQ6IGR1bXBpbmcgY3Jhc2ggcmVwb3J0IHRvICVzXG4iLCBsb2MpOworCisJZnByaW50ZihycHQsICJmYXN0LWltcG9ydCBjcmFzaCByZXBvcnQ6XG4iKTsKKwlmcHJpbnRmKHJwdCwgIiAgICBmYXN0LWltcG9ydCBwcm9jZXNzOiAlIlBSSXVNQVgiXG4iLCAodWludG1heF90KSBnZXRwaWQoKSk7CisJZnByaW50ZihycHQsICIgICAgcGFyZW50IHByb2Nlc3MgICAgIDogJSJQUkl1TUFYIlxuIiwgKHVpbnRtYXhfdCkgZ2V0cHBpZCgpKTsKKwlmcHJpbnRmKHJwdCwgIiAgICBhdCAlc1xuIiwgc2hvd19kYXRlKHRpbWUoTlVMTCksIDAsIERBVEVfTU9ERShJU084NjAxKSkpOworCWZwdXRjKCdcbicsIHJwdCk7CisKKwlmcHV0cygiZmF0YWw6ICIsIHJwdCk7CisJZnB1dHMoZXJyLCBycHQpOworCWZwdXRjKCdcbicsIHJwdCk7CisKKwlmcHV0YygnXG4nLCBycHQpOworCWZwdXRzKCJNb3N0IFJlY2VudCBDb21tYW5kcyBCZWZvcmUgQ3Jhc2hcbiIsIHJwdCk7CisJZnB1dHMoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiwgcnB0KTsKKwlmb3IgKHJjID0gY21kX2hpc3QubmV4dDsgcmMgIT0gJmNtZF9oaXN0OyByYyA9IHJjLT5uZXh0KSB7CisJCWlmIChyYy0+bmV4dCA9PSAmY21kX2hpc3QpCisJCQlmcHV0cygiKiAiLCBycHQpOworCQllbHNlCisJCQlmcHV0cygiICAiLCBycHQpOworCQlmcHV0cyhyYy0+YnVmLCBycHQpOworCQlmcHV0YygnXG4nLCBycHQpOworCX0KKworCWZwdXRjKCdcbicsIHJwdCk7CisJZnB1dHMoIkFjdGl2ZSBCcmFuY2ggTFJVXG4iLCBycHQpOworCWZwdXRzKCItLS0tLS0tLS0tLS0tLS0tLVxuIiwgcnB0KTsKKwlmcHJpbnRmKHJwdCwgIiAgICBhY3RpdmVfYnJhbmNoZXMgPSAlbHUgY3VyLCAlbHUgbWF4XG4iLAorCQljdXJfYWN0aXZlX2JyYW5jaGVzLAorCQltYXhfYWN0aXZlX2JyYW5jaGVzKTsKKwlmcHV0YygnXG4nLCBycHQpOworCWZwdXRzKCIgIHBvcyAgY2xvY2sgbmFtZVxuIiwgcnB0KTsKKwlmcHV0cygiICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cbiIsIHJwdCk7CisJZm9yIChiID0gYWN0aXZlX2JyYW5jaGVzLCBsdSA9IDA7IGI7IGIgPSBiLT5hY3RpdmVfbmV4dF9icmFuY2gpCisJCWZwcmludGYocnB0LCAiICAlMmx1KSAlNiIgUFJJdU1BWCIgJXNcbiIsCisJCQkrK2x1LCBiLT5sYXN0X2NvbW1pdCwgYi0+bmFtZSk7CisKKwlmcHV0YygnXG4nLCBycHQpOworCWZwdXRzKCJJbmFjdGl2ZSBCcmFuY2hlc1xuIiwgcnB0KTsKKwlmcHV0cygiLS0tLS0tLS0tLS0tLS0tLS1cbiIsIHJwdCk7CisJZm9yIChsdSA9IDA7IGx1IDwgYnJhbmNoX3RhYmxlX3N6OyBsdSsrKSB7CisJCWZvciAoYiA9IGJyYW5jaF90YWJsZVtsdV07IGI7IGIgPSBiLT50YWJsZV9uZXh0X2JyYW5jaCkKKwkJCXdyaXRlX2JyYW5jaF9yZXBvcnQocnB0LCBiKTsKKwl9CisKKwlpZiAoZmlyc3RfdGFnKSB7CisJCXN0cnVjdCB0YWcgKnRnOworCQlmcHV0YygnXG4nLCBycHQpOworCQlmcHV0cygiQW5ub3RhdGVkIFRhZ3NcbiIsIHJwdCk7CisJCWZwdXRzKCItLS0tLS0tLS0tLS0tLVxuIiwgcnB0KTsKKwkJZm9yICh0ZyA9IGZpcnN0X3RhZzsgdGc7IHRnID0gdGctPm5leHRfdGFnKSB7CisJCQlmcHV0cyhzaGExX3RvX2hleCh0Zy0+c2hhMSksIHJwdCk7CisJCQlmcHV0YygnICcsIHJwdCk7CisJCQlmcHV0cyh0Zy0+bmFtZSwgcnB0KTsKKwkJCWZwdXRjKCdcbicsIHJwdCk7CisJCX0KKwl9CisKKwlmcHV0YygnXG4nLCBycHQpOworCWZwdXRzKCJNYXJrc1xuIiwgcnB0KTsKKwlmcHV0cygiLS0tLS1cbiIsIHJwdCk7CisJaWYgKGV4cG9ydF9tYXJrc19maWxlKQorCQlmcHJpbnRmKHJwdCwgIiAgZXhwb3J0ZWQgdG8gJXNcbiIsIGV4cG9ydF9tYXJrc19maWxlKTsKKwllbHNlCisJCWR1bXBfbWFya3NfaGVscGVyKHJwdCwgMCwgbWFya3MpOworCisJZnB1dGMoJ1xuJywgcnB0KTsKKwlmcHV0cygiLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiwgcnB0KTsKKwlmcHV0cygiRU5EIE9GIENSQVNIIFJFUE9SVFxuIiwgcnB0KTsKKwlmY2xvc2UocnB0KTsKKwlmcmVlKGxvYyk7Cit9CisKK3N0YXRpYyB2b2lkIGVuZF9wYWNrZmlsZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHVua2VlcF9hbGxfcGFja3Modm9pZCk7CitzdGF0aWMgdm9pZCBkdW1wX21hcmtzKHZvaWQpOworCitzdGF0aWMgTk9SRVRVUk4gdm9pZCBkaWVfbmljZWx5KGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJc3RhdGljIGludCB6b21iaWU7CisJY2hhciBtZXNzYWdlWzIgKiBQQVRIX01BWF07CisKKwl2c25wcmludGYobWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpLCBlcnIsIHBhcmFtcyk7CisJZnB1dHMoImZhdGFsOiAiLCBzdGRlcnIpOworCWZwdXRzKG1lc3NhZ2UsIHN0ZGVycik7CisJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKworCWlmICghem9tYmllKSB7CisJCXpvbWJpZSA9IDE7CisJCXdyaXRlX2NyYXNoX3JlcG9ydChtZXNzYWdlKTsKKwkJZW5kX3BhY2tmaWxlKCk7CisJCXVua2VlcF9hbGxfcGFja3MoKTsKKwkJZHVtcF9tYXJrcygpOworCX0KKwlleGl0KDEyOCk7Cit9CisKKyNpZm5kZWYgU0lHVVNSMQkvKiBXaW5kb3dzLCBmb3IgZXhhbXBsZSAqLworCitzdGF0aWMgdm9pZCBzZXRfY2hlY2twb2ludF9zaWduYWwodm9pZCkKK3sKK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgY2hlY2twb2ludF9zaWduYWwoaW50IHNpZ25vKQoreworCWNoZWNrcG9pbnRfcmVxdWVzdGVkID0gMTsKK30KKworc3RhdGljIHZvaWQgc2V0X2NoZWNrcG9pbnRfc2lnbmFsKHZvaWQpCit7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKKworCW1lbXNldCgmc2EsIDAsIHNpemVvZihzYSkpOworCXNhLnNhX2hhbmRsZXIgPSBjaGVja3BvaW50X3NpZ25hbDsKKwlzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CisJc2Euc2FfZmxhZ3MgPSBTQV9SRVNUQVJUOworCXNpZ2FjdGlvbihTSUdVU1IxLCAmc2EsIE5VTEwpOworfQorCisjZW5kaWYKKworc3RhdGljIHZvaWQgYWxsb2Nfb2JqZWN0cyh1bnNpZ25lZCBpbnQgY250KQoreworCXN0cnVjdCBvYmplY3RfZW50cnlfcG9vbCAqYjsKKworCWIgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgb2JqZWN0X2VudHJ5X3Bvb2wpCisJCSsgY250ICogc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkpKTsKKwliLT5uZXh0X3Bvb2wgPSBibG9ja3M7CisJYi0+bmV4dF9mcmVlID0gYi0+ZW50cmllczsKKwliLT5lbmQgPSBiLT5lbnRyaWVzICsgY250OworCWJsb2NrcyA9IGI7CisJYWxsb2NfY291bnQgKz0gY250OworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqbmV3X29iamVjdCh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisKKwlpZiAoYmxvY2tzLT5uZXh0X2ZyZWUgPT0gYmxvY2tzLT5lbmQpCisJCWFsbG9jX29iamVjdHMob2JqZWN0X2VudHJ5X2FsbG9jKTsKKworCWUgPSBibG9ja3MtPm5leHRfZnJlZSsrOworCWhhc2hjcHkoZS0+aWR4LnNoYTEsIHNoYTEpOworCXJldHVybiBlOworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9lbnRyeSAqZmluZF9vYmplY3QodW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwl1bnNpZ25lZCBpbnQgaCA9IHNoYTFbMF0gPDwgOCB8IHNoYTFbMV07CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZTsKKwlmb3IgKGUgPSBvYmplY3RfdGFibGVbaF07IGU7IGUgPSBlLT5uZXh0KQorCQlpZiAoIWhhc2hjbXAoc2hhMSwgZS0+aWR4LnNoYTEpKQorCQkJcmV0dXJuIGU7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICppbnNlcnRfb2JqZWN0KHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgaW50IGggPSBzaGExWzBdIDw8IDggfCBzaGExWzFdOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmUgPSBvYmplY3RfdGFibGVbaF07CisKKwl3aGlsZSAoZSkgeworCQlpZiAoIWhhc2hjbXAoc2hhMSwgZS0+aWR4LnNoYTEpKQorCQkJcmV0dXJuIGU7CisJCWUgPSBlLT5uZXh0OworCX0KKworCWUgPSBuZXdfb2JqZWN0KHNoYTEpOworCWUtPm5leHQgPSBvYmplY3RfdGFibGVbaF07CisJZS0+aWR4Lm9mZnNldCA9IDA7CisJb2JqZWN0X3RhYmxlW2hdID0gZTsKKwlyZXR1cm4gZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBoY19zdHIoY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgciA9IDA7CisJd2hpbGUgKGxlbi0tID4gMCkKKwkJciA9IHIgKiAzMSArICpzKys7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkICpwb29sX2FsbG9jKHNpemVfdCBsZW4pCit7CisJc3RydWN0IG1lbV9wb29sICpwOworCXZvaWQgKnI7CisKKwkvKiByb3VuZCB1cCB0byBhICd1aW50bWF4X3QnIGFsaWdubWVudCAqLworCWlmIChsZW4gJiAoc2l6ZW9mKHVpbnRtYXhfdCkgLSAxKSkKKwkJbGVuICs9IHNpemVvZih1aW50bWF4X3QpIC0gKGxlbiAmIChzaXplb2YodWludG1heF90KSAtIDEpKTsKKworCWZvciAocCA9IG1lbV9wb29sOyBwOyBwID0gcC0+bmV4dF9wb29sKQorCQlpZiAoKHAtPmVuZCAtIHAtPm5leHRfZnJlZSA+PSBsZW4pKQorCQkJYnJlYWs7CisKKwlpZiAoIXApIHsKKwkJaWYgKGxlbiA+PSAobWVtX3Bvb2xfYWxsb2MvMikpIHsKKwkJCXRvdGFsX2FsbG9jZCArPSBsZW47CisJCQlyZXR1cm4geG1hbGxvYyhsZW4pOworCQl9CisJCXRvdGFsX2FsbG9jZCArPSBzaXplb2Yoc3RydWN0IG1lbV9wb29sKSArIG1lbV9wb29sX2FsbG9jOworCQlwID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG1lbV9wb29sKSArIG1lbV9wb29sX2FsbG9jKTsKKwkJcC0+bmV4dF9wb29sID0gbWVtX3Bvb2w7CisJCXAtPm5leHRfZnJlZSA9IChjaGFyICopIHAtPnNwYWNlOworCQlwLT5lbmQgPSBwLT5uZXh0X2ZyZWUgKyBtZW1fcG9vbF9hbGxvYzsKKwkJbWVtX3Bvb2wgPSBwOworCX0KKworCXIgPSBwLT5uZXh0X2ZyZWU7CisJcC0+bmV4dF9mcmVlICs9IGxlbjsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgKnBvb2xfY2FsbG9jKHNpemVfdCBjb3VudCwgc2l6ZV90IHNpemUpCit7CisJc2l6ZV90IGxlbiA9IGNvdW50ICogc2l6ZTsKKwl2b2lkICpyID0gcG9vbF9hbGxvYyhsZW4pOworCW1lbXNldChyLCAwLCBsZW4pOworCXJldHVybiByOworfQorCitzdGF0aWMgY2hhciAqcG9vbF9zdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwlzaXplX3QgbGVuID0gc3RybGVuKHMpICsgMTsKKwljaGFyICpyID0gcG9vbF9hbGxvYyhsZW4pOworCW1lbWNweShyLCBzLCBsZW4pOworCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfbWFyayh1aW50bWF4X3QgaWRudW0sIHN0cnVjdCBvYmplY3RfZW50cnkgKm9lKQoreworCXN0cnVjdCBtYXJrX3NldCAqcyA9IG1hcmtzOworCXdoaWxlICgoaWRudW0gPj4gcy0+c2hpZnQpID49IDEwMjQpIHsKKwkJcyA9IHBvb2xfY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbWFya19zZXQpKTsKKwkJcy0+c2hpZnQgPSBtYXJrcy0+c2hpZnQgKyAxMDsKKwkJcy0+ZGF0YS5zZXRzWzBdID0gbWFya3M7CisJCW1hcmtzID0gczsKKwl9CisJd2hpbGUgKHMtPnNoaWZ0KSB7CisJCXVpbnRtYXhfdCBpID0gaWRudW0gPj4gcy0+c2hpZnQ7CisJCWlkbnVtIC09IGkgPDwgcy0+c2hpZnQ7CisJCWlmICghcy0+ZGF0YS5zZXRzW2ldKSB7CisJCQlzLT5kYXRhLnNldHNbaV0gPSBwb29sX2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IG1hcmtfc2V0KSk7CisJCQlzLT5kYXRhLnNldHNbaV0tPnNoaWZ0ID0gcy0+c2hpZnQgLSAxMDsKKwkJfQorCQlzID0gcy0+ZGF0YS5zZXRzW2ldOworCX0KKwlpZiAoIXMtPmRhdGEubWFya2VkW2lkbnVtXSkKKwkJbWFya3Nfc2V0X2NvdW50Kys7CisJcy0+ZGF0YS5tYXJrZWRbaWRudW1dID0gb2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpmaW5kX21hcmsodWludG1heF90IGlkbnVtKQoreworCXVpbnRtYXhfdCBvcmlnX2lkbnVtID0gaWRudW07CisJc3RydWN0IG1hcmtfc2V0ICpzID0gbWFya3M7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2UgPSBOVUxMOworCWlmICgoaWRudW0gPj4gcy0+c2hpZnQpIDwgMTAyNCkgeworCQl3aGlsZSAocyAmJiBzLT5zaGlmdCkgeworCQkJdWludG1heF90IGkgPSBpZG51bSA+PiBzLT5zaGlmdDsKKwkJCWlkbnVtIC09IGkgPDwgcy0+c2hpZnQ7CisJCQlzID0gcy0+ZGF0YS5zZXRzW2ldOworCQl9CisJCWlmIChzKQorCQkJb2UgPSBzLT5kYXRhLm1hcmtlZFtpZG51bV07CisJfQorCWlmICghb2UpCisJCWRpZSgibWFyayA6JSIgUFJJdU1BWCAiIG5vdCBkZWNsYXJlZCIsIG9yaWdfaWRudW0pOworCXJldHVybiBvZTsKK30KKworc3RhdGljIHN0cnVjdCBhdG9tX3N0ciAqdG9fYXRvbShjb25zdCBjaGFyICpzLCB1bnNpZ25lZCBzaG9ydCBsZW4pCit7CisJdW5zaWduZWQgaW50IGhjID0gaGNfc3RyKHMsIGxlbikgJSBhdG9tX3RhYmxlX3N6OworCXN0cnVjdCBhdG9tX3N0ciAqYzsKKworCWZvciAoYyA9IGF0b21fdGFibGVbaGNdOyBjOyBjID0gYy0+bmV4dF9hdG9tKQorCQlpZiAoYy0+c3RyX2xlbiA9PSBsZW4gJiYgIXN0cm5jbXAocywgYy0+c3RyX2RhdCwgbGVuKSkKKwkJCXJldHVybiBjOworCisJYyA9IHBvb2xfYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdG9tX3N0cikgKyBsZW4gKyAxKTsKKwljLT5zdHJfbGVuID0gbGVuOworCW1lbWNweShjLT5zdHJfZGF0LCBzLCBsZW4pOworCWMtPnN0cl9kYXRbbGVuXSA9IDA7CisJYy0+bmV4dF9hdG9tID0gYXRvbV90YWJsZVtoY107CisJYXRvbV90YWJsZVtoY10gPSBjOworCWF0b21fY250Kys7CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYnJhbmNoICpsb29rdXBfYnJhbmNoKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdW5zaWduZWQgaW50IGhjID0gaGNfc3RyKG5hbWUsIHN0cmxlbihuYW1lKSkgJSBicmFuY2hfdGFibGVfc3o7CisJc3RydWN0IGJyYW5jaCAqYjsKKworCWZvciAoYiA9IGJyYW5jaF90YWJsZVtoY107IGI7IGIgPSBiLT50YWJsZV9uZXh0X2JyYW5jaCkKKwkJaWYgKCFzdHJjbXAobmFtZSwgYi0+bmFtZSkpCisJCQlyZXR1cm4gYjsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBicmFuY2ggKm5ld19icmFuY2goY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBpbnQgaGMgPSBoY19zdHIobmFtZSwgc3RybGVuKG5hbWUpKSAlIGJyYW5jaF90YWJsZV9zejsKKwlzdHJ1Y3QgYnJhbmNoICpiID0gbG9va3VwX2JyYW5jaChuYW1lKTsKKworCWlmIChiKQorCQlkaWUoIkludmFsaWQgYXR0ZW1wdCB0byBjcmVhdGUgZHVwbGljYXRlIGJyYW5jaDogJXMiLCBuYW1lKTsKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQobmFtZSwgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkpCisJCWRpZSgiQnJhbmNoIG5hbWUgZG9lc24ndCBjb25mb3JtIHRvIEdJVCBzdGFuZGFyZHM6ICVzIiwgbmFtZSk7CisKKwliID0gcG9vbF9jYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBicmFuY2gpKTsKKwliLT5uYW1lID0gcG9vbF9zdHJkdXAobmFtZSk7CisJYi0+dGFibGVfbmV4dF9icmFuY2ggPSBicmFuY2hfdGFibGVbaGNdOworCWItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLm1vZGUgPSBTX0lGRElSOworCWItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLm1vZGUgPSBTX0lGRElSOworCWItPm51bV9ub3RlcyA9IDA7CisJYi0+YWN0aXZlID0gMDsKKwliLT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJYnJhbmNoX3RhYmxlW2hjXSA9IGI7CisJYnJhbmNoX2NvdW50Kys7CisJcmV0dXJuIGI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGNfZW50cmllcyh1bnNpZ25lZCBpbnQgY250KQoreworCWNudCA9IGNudCAmIDcgPyAoY250IC8gOCkgKyAxIDogY250IC8gODsKKwlyZXR1cm4gY250IDwgYXZhaWxfdHJlZV90YWJsZV9zeiA/IGNudCA6IGF2YWlsX3RyZWVfdGFibGVfc3ogLSAxOworfQorCitzdGF0aWMgc3RydWN0IHRyZWVfY29udGVudCAqbmV3X3RyZWVfY29udGVudCh1bnNpZ25lZCBpbnQgY250KQoreworCXN0cnVjdCBhdmFpbF90cmVlX2NvbnRlbnQgKmYsICpsID0gTlVMTDsKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0OworCXVuc2lnbmVkIGludCBoYyA9IGhjX2VudHJpZXMoY250KTsKKworCWZvciAoZiA9IGF2YWlsX3RyZWVfdGFibGVbaGNdOyBmOyBsID0gZiwgZiA9IGYtPm5leHRfYXZhaWwpCisJCWlmIChmLT5lbnRyeV9jYXBhY2l0eSA+PSBjbnQpCisJCQlicmVhazsKKworCWlmIChmKSB7CisJCWlmIChsKQorCQkJbC0+bmV4dF9hdmFpbCA9IGYtPm5leHRfYXZhaWw7CisJCWVsc2UKKwkJCWF2YWlsX3RyZWVfdGFibGVbaGNdID0gZi0+bmV4dF9hdmFpbDsKKwl9IGVsc2UgeworCQljbnQgPSBjbnQgJiA3ID8gKChjbnQgLyA4KSArIDEpICogOCA6IGNudDsKKwkJZiA9IHBvb2xfYWxsb2Moc2l6ZW9mKCp0KSArIHNpemVvZih0LT5lbnRyaWVzWzBdKSAqIGNudCk7CisJCWYtPmVudHJ5X2NhcGFjaXR5ID0gY250OworCX0KKworCXQgPSAoc3RydWN0IHRyZWVfY29udGVudCopZjsKKwl0LT5lbnRyeV9jb3VudCA9IDA7CisJdC0+ZGVsdGFfZGVwdGggPSAwOworCXJldHVybiB0OworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZW50cnkgKmUpOworc3RhdGljIHZvaWQgcmVsZWFzZV90cmVlX2NvbnRlbnQoc3RydWN0IHRyZWVfY29udGVudCAqdCkKK3sKKwlzdHJ1Y3QgYXZhaWxfdHJlZV9jb250ZW50ICpmID0gKHN0cnVjdCBhdmFpbF90cmVlX2NvbnRlbnQqKXQ7CisJdW5zaWduZWQgaW50IGhjID0gaGNfZW50cmllcyhmLT5lbnRyeV9jYXBhY2l0eSk7CisJZi0+bmV4dF9hdmFpbCA9IGF2YWlsX3RyZWVfdGFibGVbaGNdOworCWF2YWlsX3RyZWVfdGFibGVbaGNdID0gZjsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV90cmVlX2NvbnRlbnRfcmVjdXJzaXZlKHN0cnVjdCB0cmVlX2NvbnRlbnQgKnQpCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHQtPmVudHJ5X2NvdW50OyBpKyspCisJCXJlbGVhc2VfdHJlZV9lbnRyeSh0LT5lbnRyaWVzW2ldKTsKKwlyZWxlYXNlX3RyZWVfY29udGVudCh0KTsKK30KKworc3RhdGljIHN0cnVjdCB0cmVlX2NvbnRlbnQgKmdyb3dfdHJlZV9jb250ZW50KAorCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnQsCisJaW50IGFtdCkKK3sKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICpyID0gbmV3X3RyZWVfY29udGVudCh0LT5lbnRyeV9jb3VudCArIGFtdCk7CisJci0+ZW50cnlfY291bnQgPSB0LT5lbnRyeV9jb3VudDsKKwlyLT5kZWx0YV9kZXB0aCA9IHQtPmRlbHRhX2RlcHRoOworCW1lbWNweShyLT5lbnRyaWVzLHQtPmVudHJpZXMsdC0+ZW50cnlfY291bnQqc2l6ZW9mKHQtPmVudHJpZXNbMF0pKTsKKwlyZWxlYXNlX3RyZWVfY29udGVudCh0KTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHN0cnVjdCB0cmVlX2VudHJ5ICpuZXdfdHJlZV9lbnRyeSh2b2lkKQoreworCXN0cnVjdCB0cmVlX2VudHJ5ICplOworCisJaWYgKCFhdmFpbF90cmVlX2VudHJ5KSB7CisJCXVuc2lnbmVkIGludCBuID0gdHJlZV9lbnRyeV9hbGxvYzsKKwkJdG90YWxfYWxsb2NkICs9IG4gKiBzaXplb2Yoc3RydWN0IHRyZWVfZW50cnkpOworCQlhdmFpbF90cmVlX2VudHJ5ID0gZSA9IHhtYWxsb2MobiAqIHNpemVvZihzdHJ1Y3QgdHJlZV9lbnRyeSkpOworCQl3aGlsZSAobi0tID4gMSkgeworCQkJKigodm9pZCoqKWUpID0gZSArIDE7CisJCQllKys7CisJCX0KKwkJKigodm9pZCoqKWUpID0gTlVMTDsKKwl9CisKKwllID0gYXZhaWxfdHJlZV9lbnRyeTsKKwlhdmFpbF90cmVlX2VudHJ5ID0gKigodm9pZCoqKWUpOworCXJldHVybiBlOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZW50cnkgKmUpCit7CisJaWYgKGUtPnRyZWUpCisJCXJlbGVhc2VfdHJlZV9jb250ZW50X3JlY3Vyc2l2ZShlLT50cmVlKTsKKwkqKCh2b2lkKiopZSkgPSBhdmFpbF90cmVlX2VudHJ5OworCWF2YWlsX3RyZWVfZW50cnkgPSBlOworfQorCitzdGF0aWMgc3RydWN0IHRyZWVfY29udGVudCAqZHVwX3RyZWVfY29udGVudChzdHJ1Y3QgdHJlZV9jb250ZW50ICpzKQoreworCXN0cnVjdCB0cmVlX2NvbnRlbnQgKmQ7CisJc3RydWN0IHRyZWVfZW50cnkgKmEsICpiOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCFzKQorCQlyZXR1cm4gTlVMTDsKKwlkID0gbmV3X3RyZWVfY29udGVudChzLT5lbnRyeV9jb3VudCk7CisJZm9yIChpID0gMDsgaSA8IHMtPmVudHJ5X2NvdW50OyBpKyspIHsKKwkJYSA9IHMtPmVudHJpZXNbaV07CisJCWIgPSBuZXdfdHJlZV9lbnRyeSgpOworCQltZW1jcHkoYiwgYSwgc2l6ZW9mKCphKSk7CisJCWlmIChhLT50cmVlICYmIGlzX251bGxfc2hhMShiLT52ZXJzaW9uc1sxXS5zaGExKSkKKwkJCWItPnRyZWUgPSBkdXBfdHJlZV9jb250ZW50KGEtPnRyZWUpOworCQllbHNlCisJCQliLT50cmVlID0gTlVMTDsKKwkJZC0+ZW50cmllc1tpXSA9IGI7CisJfQorCWQtPmVudHJ5X2NvdW50ID0gcy0+ZW50cnlfY291bnQ7CisJZC0+ZGVsdGFfZGVwdGggPSBzLT5kZWx0YV9kZXB0aDsKKworCXJldHVybiBkOworfQorCitzdGF0aWMgdm9pZCBzdGFydF9wYWNrZmlsZSh2b2lkKQoreworCXN0YXRpYyBjaGFyIHRtcF9maWxlW1BBVEhfTUFYXTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlpbnQgbmFtZWxlbjsKKwlzdHJ1Y3QgcGFja19oZWFkZXIgaGRyOworCWludCBwYWNrX2ZkOworCisJcGFja19mZCA9IG9kYl9ta3N0ZW1wKHRtcF9maWxlLCBzaXplb2YodG1wX2ZpbGUpLAorCQkJICAgICAgInBhY2svdG1wX3BhY2tfWFhYWFhYIik7CisJbmFtZWxlbiA9IHN0cmxlbih0bXBfZmlsZSkgKyAyOworCXAgPSB4Y2FsbG9jKDEsIHNpemVvZigqcCkgKyBuYW1lbGVuKTsKKwl4c25wcmludGYocC0+cGFja19uYW1lLCBuYW1lbGVuLCAiJXMiLCB0bXBfZmlsZSk7CisJcC0+cGFja19mZCA9IHBhY2tfZmQ7CisJcC0+ZG9fbm90X2Nsb3NlID0gMTsKKwlwYWNrX2ZpbGUgPSBzaGExZmQocGFja19mZCwgcC0+cGFja19uYW1lKTsKKworCWhkci5oZHJfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19TSUdOQVRVUkUpOworCWhkci5oZHJfdmVyc2lvbiA9IGh0b25sKDIpOworCWhkci5oZHJfZW50cmllcyA9IDA7CisJc2hhMXdyaXRlKHBhY2tfZmlsZSwgJmhkciwgc2l6ZW9mKGhkcikpOworCisJcGFja19kYXRhID0gcDsKKwlwYWNrX3NpemUgPSBzaXplb2YoaGRyKTsKKwlvYmplY3RfY291bnQgPSAwOworCisJUkVBTExPQ19BUlJBWShhbGxfcGFja3MsIHBhY2tfaWQgKyAxKTsKKwlhbGxfcGFja3NbcGFja19pZF0gPSBwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY3JlYXRlX2luZGV4KHZvaWQpCit7CisJY29uc3QgY2hhciAqdG1wZmlsZTsKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKippZHgsICoqYywgKipsYXN0OworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisJc3RydWN0IG9iamVjdF9lbnRyeV9wb29sICpvOworCisJLyogQnVpbGQgdGhlIHRhYmxlIG9mIG9iamVjdCBJRHMuICovCisJaWR4ID0geG1hbGxvYyhvYmplY3RfY291bnQgKiBzaXplb2YoKmlkeCkpOworCWMgPSBpZHg7CisJZm9yIChvID0gYmxvY2tzOyBvOyBvID0gby0+bmV4dF9wb29sKQorCQlmb3IgKGUgPSBvLT5uZXh0X2ZyZWU7IGUtLSAhPSBvLT5lbnRyaWVzOykKKwkJCWlmIChwYWNrX2lkID09IGUtPnBhY2tfaWQpCisJCQkJKmMrKyA9ICZlLT5pZHg7CisJbGFzdCA9IGlkeCArIG9iamVjdF9jb3VudDsKKwlpZiAoYyAhPSBsYXN0KQorCQlkaWUoImludGVybmFsIGNvbnNpc3RlbmN5IGVycm9yIGNyZWF0aW5nIHRoZSBpbmRleCIpOworCisJdG1wZmlsZSA9IHdyaXRlX2lkeF9maWxlKE5VTEwsIGlkeCwgb2JqZWN0X2NvdW50LCAmcGFja19pZHhfb3B0cywgcGFja19kYXRhLT5zaGExKTsKKwlmcmVlKGlkeCk7CisJcmV0dXJuIHRtcGZpbGU7Cit9CisKK3N0YXRpYyBjaGFyICprZWVwX3BhY2soY29uc3QgY2hhciAqY3Vycl9pbmRleF9uYW1lKQoreworCXN0YXRpYyBjaGFyIG5hbWVbUEFUSF9NQVhdOworCXN0YXRpYyBjb25zdCBjaGFyICprZWVwX21zZyA9ICJmYXN0LWltcG9ydCI7CisJaW50IGtlZXBfZmQ7CisKKwlrZWVwX2ZkID0gb2RiX3BhY2tfa2VlcChuYW1lLCBzaXplb2YobmFtZSksIHBhY2tfZGF0YS0+c2hhMSk7CisJaWYgKGtlZXBfZmQgPCAwKQorCQlkaWVfZXJybm8oImNhbm5vdCBjcmVhdGUga2VlcCBmaWxlIik7CisJd3JpdGVfb3JfZGllKGtlZXBfZmQsIGtlZXBfbXNnLCBzdHJsZW4oa2VlcF9tc2cpKTsKKwlpZiAoY2xvc2Uoa2VlcF9mZCkpCisJCWRpZV9lcnJubygiZmFpbGVkIHRvIHdyaXRlIGtlZXAgZmlsZSIpOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMvcGFjay9wYWNrLSVzLnBhY2siLAorCQkgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgc2hhMV90b19oZXgocGFja19kYXRhLT5zaGExKSk7CisJaWYgKGZpbmFsaXplX29iamVjdF9maWxlKHBhY2tfZGF0YS0+cGFja19uYW1lLCBuYW1lKSkKKwkJZGllKCJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIik7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy9wYWNrL3BhY2stJXMuaWR4IiwKKwkJIGdldF9vYmplY3RfZGlyZWN0b3J5KCksIHNoYTFfdG9faGV4KHBhY2tfZGF0YS0+c2hhMSkpOworCWlmIChmaW5hbGl6ZV9vYmplY3RfZmlsZShjdXJyX2luZGV4X25hbWUsIG5hbWUpKQorCQlkaWUoImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIik7CisJZnJlZSgodm9pZCAqKWN1cnJfaW5kZXhfbmFtZSk7CisJcmV0dXJuIG5hbWU7Cit9CisKK3N0YXRpYyB2b2lkIHVua2VlcF9hbGxfcGFja3Modm9pZCkKK3sKKwlzdGF0aWMgY2hhciBuYW1lW1BBVEhfTUFYXTsKKwlpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBwYWNrX2lkOyBrKyspIHsKKwkJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBhbGxfcGFja3Nba107CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzL3BhY2svcGFjay0lcy5rZWVwIiwKKwkJCSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCBzaGExX3RvX2hleChwLT5zaGExKSk7CisJCXVubGlua19vcl93YXJuKG5hbWUpOworCX0KK30KKworc3RhdGljIHZvaWQgZW5kX3BhY2tmaWxlKHZvaWQpCit7CisJc3RhdGljIGludCBydW5uaW5nOworCisJaWYgKHJ1bm5pbmcgfHwgIXBhY2tfZGF0YSkKKwkJcmV0dXJuOworCisJcnVubmluZyA9IDE7CisJY2xlYXJfZGVsdGFfYmFzZV9jYWNoZSgpOworCWlmIChvYmplY3RfY291bnQpIHsKKwkJc3RydWN0IHBhY2tlZF9naXQgKm5ld19wOworCQl1bnNpZ25lZCBjaGFyIGN1cl9wYWNrX3NoYTFbMjBdOworCQljaGFyICppZHhfbmFtZTsKKwkJaW50IGk7CisJCXN0cnVjdCBicmFuY2ggKmI7CisJCXN0cnVjdCB0YWcgKnQ7CisKKwkJY2xvc2VfcGFja193aW5kb3dzKHBhY2tfZGF0YSk7CisJCXNoYTFjbG9zZShwYWNrX2ZpbGUsIGN1cl9wYWNrX3NoYTEsIDApOworCQlmaXh1cF9wYWNrX2hlYWRlcl9mb290ZXIocGFja19kYXRhLT5wYWNrX2ZkLCBwYWNrX2RhdGEtPnNoYTEsCisJCQkJICAgIHBhY2tfZGF0YS0+cGFja19uYW1lLCBvYmplY3RfY291bnQsCisJCQkJICAgIGN1cl9wYWNrX3NoYTEsIHBhY2tfc2l6ZSk7CisJCWNsb3NlKHBhY2tfZGF0YS0+cGFja19mZCk7CisJCWlkeF9uYW1lID0ga2VlcF9wYWNrKGNyZWF0ZV9pbmRleCgpKTsKKworCQkvKiBSZWdpc3RlciB0aGUgcGFja2ZpbGUgd2l0aCBjb3JlIGdpdCdzIG1hY2hpbmVyeS4gKi8KKwkJbmV3X3AgPSBhZGRfcGFja2VkX2dpdChpZHhfbmFtZSwgc3RybGVuKGlkeF9uYW1lKSwgMSk7CisJCWlmICghbmV3X3ApCisJCQlkaWUoImNvcmUgZ2l0IHJlamVjdGVkIGluZGV4ICVzIiwgaWR4X25hbWUpOworCQlhbGxfcGFja3NbcGFja19pZF0gPSBuZXdfcDsKKwkJaW5zdGFsbF9wYWNrZWRfZ2l0KG5ld19wKTsKKworCQkvKiBQcmludCB0aGUgYm91bmRhcnkgKi8KKwkJaWYgKHBhY2tfZWRnZXMpIHsKKwkJCWZwcmludGYocGFja19lZGdlcywgIiVzOiIsIG5ld19wLT5wYWNrX25hbWUpOworCQkJZm9yIChpID0gMDsgaSA8IGJyYW5jaF90YWJsZV9zejsgaSsrKSB7CisJCQkJZm9yIChiID0gYnJhbmNoX3RhYmxlW2ldOyBiOyBiID0gYi0+dGFibGVfbmV4dF9icmFuY2gpIHsKKwkJCQkJaWYgKGItPnBhY2tfaWQgPT0gcGFja19pZCkKKwkJCQkJCWZwcmludGYocGFja19lZGdlcywgIiAlcyIsIHNoYTFfdG9faGV4KGItPnNoYTEpKTsKKwkJCQl9CisJCQl9CisJCQlmb3IgKHQgPSBmaXJzdF90YWc7IHQ7IHQgPSB0LT5uZXh0X3RhZykgeworCQkJCWlmICh0LT5wYWNrX2lkID09IHBhY2tfaWQpCisJCQkJCWZwcmludGYocGFja19lZGdlcywgIiAlcyIsIHNoYTFfdG9faGV4KHQtPnNoYTEpKTsKKwkJCX0KKwkJCWZwdXRjKCdcbicsIHBhY2tfZWRnZXMpOworCQkJZmZsdXNoKHBhY2tfZWRnZXMpOworCQl9CisKKwkJcGFja19pZCsrOworCX0KKwllbHNlIHsKKwkJY2xvc2UocGFja19kYXRhLT5wYWNrX2ZkKTsKKwkJdW5saW5rX29yX3dhcm4ocGFja19kYXRhLT5wYWNrX25hbWUpOworCX0KKwlmcmVlKHBhY2tfZGF0YSk7CisJcGFja19kYXRhID0gTlVMTDsKKwlydW5uaW5nID0gMDsKKworCS8qIFdlIGNhbid0IGNhcnJ5IGEgZGVsdGEgYWNyb3NzIHBhY2tmaWxlcy4gKi8KKwlzdHJidWZfcmVsZWFzZSgmbGFzdF9ibG9iLmRhdGEpOworCWxhc3RfYmxvYi5vZmZzZXQgPSAwOworCWxhc3RfYmxvYi5kZXB0aCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGN5Y2xlX3BhY2tmaWxlKHZvaWQpCit7CisJZW5kX3BhY2tmaWxlKCk7CisJc3RhcnRfcGFja2ZpbGUoKTsKK30KKworc3RhdGljIGludCBzdG9yZV9vYmplY3QoCisJZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCXN0cnVjdCBzdHJidWYgKmRhdCwKKwlzdHJ1Y3QgbGFzdF9vYmplY3QgKmxhc3QsCisJdW5zaWduZWQgY2hhciAqc2hhMW91dCwKKwl1aW50bWF4X3QgbWFyaykKK3sKKwl2b2lkICpvdXQsICpkZWx0YTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplOworCXVuc2lnbmVkIGNoYXIgaGRyWzk2XTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXVuc2lnbmVkIGxvbmcgaGRybGVuLCBkZWx0YWxlbjsKKwlnaXRfU0hBX0NUWCBjOworCWdpdF96c3RyZWFtIHM7CisKKwloZHJsZW4gPSB4c25wcmludGYoKGNoYXIgKiloZHIsIHNpemVvZihoZHIpLCAiJXMgJWx1IiwKKwkJCSAgIHR5cGVuYW1lKHR5cGUpLCAodW5zaWduZWQgbG9uZylkYXQtPmxlbikgKyAxOworCWdpdF9TSEExX0luaXQoJmMpOworCWdpdF9TSEExX1VwZGF0ZSgmYywgaGRyLCBoZHJsZW4pOworCWdpdF9TSEExX1VwZGF0ZSgmYywgZGF0LT5idWYsIGRhdC0+bGVuKTsKKwlnaXRfU0hBMV9GaW5hbChzaGExLCAmYyk7CisJaWYgKHNoYTFvdXQpCisJCWhhc2hjcHkoc2hhMW91dCwgc2hhMSk7CisKKwllID0gaW5zZXJ0X29iamVjdChzaGExKTsKKwlpZiAobWFyaykKKwkJaW5zZXJ0X21hcmsobWFyaywgZSk7CisJaWYgKGUtPmlkeC5vZmZzZXQpIHsKKwkJZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbdHlwZV0rKzsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIGlmIChmaW5kX3NoYTFfcGFjayhzaGExLCBwYWNrZWRfZ2l0KSkgeworCQllLT50eXBlID0gdHlwZTsKKwkJZS0+cGFja19pZCA9IE1BWF9QQUNLX0lEOworCQllLT5pZHgub2Zmc2V0ID0gMTsgLyoganVzdCBub3QgemVybyEgKi8KKwkJZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbdHlwZV0rKzsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGxhc3QgJiYgbGFzdC0+ZGF0YS5idWYgJiYgbGFzdC0+ZGVwdGggPCBtYXhfZGVwdGggJiYgZGF0LT5sZW4gPiAyMCkgeworCQlkZWx0YV9jb3VudF9hdHRlbXB0c19ieV90eXBlW3R5cGVdKys7CisJCWRlbHRhID0gZGlmZl9kZWx0YShsYXN0LT5kYXRhLmJ1ZiwgbGFzdC0+ZGF0YS5sZW4sCisJCQlkYXQtPmJ1ZiwgZGF0LT5sZW4sCisJCQkmZGVsdGFsZW4sIGRhdC0+bGVuIC0gMjApOworCX0gZWxzZQorCQlkZWx0YSA9IE5VTEw7CisKKwlnaXRfZGVmbGF0ZV9pbml0KCZzLCBwYWNrX2NvbXByZXNzaW9uX2xldmVsKTsKKwlpZiAoZGVsdGEpIHsKKwkJcy5uZXh0X2luID0gZGVsdGE7CisJCXMuYXZhaWxfaW4gPSBkZWx0YWxlbjsKKwl9IGVsc2UgeworCQlzLm5leHRfaW4gPSAodm9pZCAqKWRhdC0+YnVmOworCQlzLmF2YWlsX2luID0gZGF0LT5sZW47CisJfQorCXMuYXZhaWxfb3V0ID0gZ2l0X2RlZmxhdGVfYm91bmQoJnMsIHMuYXZhaWxfaW4pOworCXMubmV4dF9vdXQgPSBvdXQgPSB4bWFsbG9jKHMuYXZhaWxfb3V0KTsKKwl3aGlsZSAoZ2l0X2RlZmxhdGUoJnMsIFpfRklOSVNIKSA9PSBaX09LKQorCQk7IC8qIG5vdGhpbmcgKi8KKwlnaXRfZGVmbGF0ZV9lbmQoJnMpOworCisJLyogRGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBhdXRvLWNoZWNrcG9pbnQuICovCisJaWYgKChtYXhfcGFja3NpemUgJiYgKHBhY2tfc2l6ZSArIDYwICsgcy50b3RhbF9vdXQpID4gbWF4X3BhY2tzaXplKQorCQl8fCAocGFja19zaXplICsgNjAgKyBzLnRvdGFsX291dCkgPCBwYWNrX3NpemUpIHsKKworCQkvKiBUaGlzIG5ldyBvYmplY3QgbmVlZHMgdG8gKm5vdCogaGF2ZSB0aGUgY3VycmVudCBwYWNrX2lkLiAqLworCQllLT5wYWNrX2lkID0gcGFja19pZCArIDE7CisJCWN5Y2xlX3BhY2tmaWxlKCk7CisKKwkJLyogV2UgY2Fubm90IGNhcnJ5IGEgZGVsdGEgaW50byB0aGUgbmV3IHBhY2suICovCisJCWlmIChkZWx0YSkgeworCQkJZnJlZShkZWx0YSk7CisJCQlkZWx0YSA9IE5VTEw7CisKKwkJCWdpdF9kZWZsYXRlX2luaXQoJnMsIHBhY2tfY29tcHJlc3Npb25fbGV2ZWwpOworCQkJcy5uZXh0X2luID0gKHZvaWQgKilkYXQtPmJ1ZjsKKwkJCXMuYXZhaWxfaW4gPSBkYXQtPmxlbjsKKwkJCXMuYXZhaWxfb3V0ID0gZ2l0X2RlZmxhdGVfYm91bmQoJnMsIHMuYXZhaWxfaW4pOworCQkJcy5uZXh0X291dCA9IG91dCA9IHhyZWFsbG9jKG91dCwgcy5hdmFpbF9vdXQpOworCQkJd2hpbGUgKGdpdF9kZWZsYXRlKCZzLCBaX0ZJTklTSCkgPT0gWl9PSykKKwkJCQk7IC8qIG5vdGhpbmcgKi8KKwkJCWdpdF9kZWZsYXRlX2VuZCgmcyk7CisJCX0KKwl9CisKKwllLT50eXBlID0gdHlwZTsKKwllLT5wYWNrX2lkID0gcGFja19pZDsKKwllLT5pZHgub2Zmc2V0ID0gcGFja19zaXplOworCW9iamVjdF9jb3VudCsrOworCW9iamVjdF9jb3VudF9ieV90eXBlW3R5cGVdKys7CisKKwljcmMzMl9iZWdpbihwYWNrX2ZpbGUpOworCisJaWYgKGRlbHRhKSB7CisJCW9mZl90IG9mcyA9IGUtPmlkeC5vZmZzZXQgLSBsYXN0LT5vZmZzZXQ7CisJCXVuc2lnbmVkIHBvcyA9IHNpemVvZihoZHIpIC0gMTsKKworCQlkZWx0YV9jb3VudF9ieV90eXBlW3R5cGVdKys7CisJCWUtPmRlcHRoID0gbGFzdC0+ZGVwdGggKyAxOworCisJCWhkcmxlbiA9IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIoT0JKX09GU19ERUxUQSwgZGVsdGFsZW4sIGhkcik7CisJCXNoYTF3cml0ZShwYWNrX2ZpbGUsIGhkciwgaGRybGVuKTsKKwkJcGFja19zaXplICs9IGhkcmxlbjsKKworCQloZHJbcG9zXSA9IG9mcyAmIDEyNzsKKwkJd2hpbGUgKG9mcyA+Pj0gNykKKwkJCWhkclstLXBvc10gPSAxMjggfCAoLS1vZnMgJiAxMjcpOworCQlzaGExd3JpdGUocGFja19maWxlLCBoZHIgKyBwb3MsIHNpemVvZihoZHIpIC0gcG9zKTsKKwkJcGFja19zaXplICs9IHNpemVvZihoZHIpIC0gcG9zOworCX0gZWxzZSB7CisJCWUtPmRlcHRoID0gMDsKKwkJaGRybGVuID0gZW5jb2RlX2luX3BhY2tfb2JqZWN0X2hlYWRlcih0eXBlLCBkYXQtPmxlbiwgaGRyKTsKKwkJc2hhMXdyaXRlKHBhY2tfZmlsZSwgaGRyLCBoZHJsZW4pOworCQlwYWNrX3NpemUgKz0gaGRybGVuOworCX0KKworCXNoYTF3cml0ZShwYWNrX2ZpbGUsIG91dCwgcy50b3RhbF9vdXQpOworCXBhY2tfc2l6ZSArPSBzLnRvdGFsX291dDsKKworCWUtPmlkeC5jcmMzMiA9IGNyYzMyX2VuZChwYWNrX2ZpbGUpOworCisJZnJlZShvdXQpOworCWZyZWUoZGVsdGEpOworCWlmIChsYXN0KSB7CisJCWlmIChsYXN0LT5ub19zd2FwKSB7CisJCQlsYXN0LT5kYXRhID0gKmRhdDsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9zd2FwKCZsYXN0LT5kYXRhLCBkYXQpOworCQl9CisJCWxhc3QtPm9mZnNldCA9IGUtPmlkeC5vZmZzZXQ7CisJCWxhc3QtPmRlcHRoID0gZS0+ZGVwdGg7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0cnVuY2F0ZV9wYWNrKHN0cnVjdCBzaGExZmlsZV9jaGVja3BvaW50ICpjaGVja3BvaW50KQoreworCWlmIChzaGExZmlsZV90cnVuY2F0ZShwYWNrX2ZpbGUsIGNoZWNrcG9pbnQpKQorCQlkaWVfZXJybm8oImNhbm5vdCB0cnVuY2F0ZSBwYWNrIHRvIHNraXAgZHVwbGljYXRlIik7CisJcGFja19zaXplID0gY2hlY2twb2ludC0+b2Zmc2V0OworfQorCitzdGF0aWMgdm9pZCBzdHJlYW1fYmxvYih1aW50bWF4X3QgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExb3V0LCB1aW50bWF4X3QgbWFyaykKK3sKKwlzaXplX3QgaW5fc3ogPSA2NCAqIDEwMjQsIG91dF9zeiA9IDY0ICogMTAyNDsKKwl1bnNpZ25lZCBjaGFyICppbl9idWYgPSB4bWFsbG9jKGluX3N6KTsKKwl1bnNpZ25lZCBjaGFyICpvdXRfYnVmID0geG1hbGxvYyhvdXRfc3opOworCXN0cnVjdCBvYmplY3RfZW50cnkgKmU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBsb25nIGhkcmxlbjsKKwlvZmZfdCBvZmZzZXQ7CisJZ2l0X1NIQV9DVFggYzsKKwlnaXRfenN0cmVhbSBzOworCXN0cnVjdCBzaGExZmlsZV9jaGVja3BvaW50IGNoZWNrcG9pbnQ7CisJaW50IHN0YXR1cyA9IFpfT0s7CisKKwkvKiBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGF1dG8tY2hlY2twb2ludC4gKi8KKwlpZiAoKG1heF9wYWNrc2l6ZSAmJiAocGFja19zaXplICsgNjAgKyBsZW4pID4gbWF4X3BhY2tzaXplKQorCQl8fCAocGFja19zaXplICsgNjAgKyBsZW4pIDwgcGFja19zaXplKQorCQljeWNsZV9wYWNrZmlsZSgpOworCisJc2hhMWZpbGVfY2hlY2twb2ludChwYWNrX2ZpbGUsICZjaGVja3BvaW50KTsKKwlvZmZzZXQgPSBjaGVja3BvaW50Lm9mZnNldDsKKworCWhkcmxlbiA9IHNucHJpbnRmKChjaGFyICopb3V0X2J1Ziwgb3V0X3N6LCAiYmxvYiAlIiBQUkl1TUFYLCBsZW4pICsgMTsKKwlpZiAob3V0X3N6IDw9IGhkcmxlbikKKwkJZGllKCJpbXBvc3NpYmx5IGxhcmdlIG9iamVjdCBoZWFkZXIiKTsKKworCWdpdF9TSEExX0luaXQoJmMpOworCWdpdF9TSEExX1VwZGF0ZSgmYywgb3V0X2J1ZiwgaGRybGVuKTsKKworCWNyYzMyX2JlZ2luKHBhY2tfZmlsZSk7CisKKwlnaXRfZGVmbGF0ZV9pbml0KCZzLCBwYWNrX2NvbXByZXNzaW9uX2xldmVsKTsKKworCWhkcmxlbiA9IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIoT0JKX0JMT0IsIGxlbiwgb3V0X2J1Zik7CisJaWYgKG91dF9zeiA8PSBoZHJsZW4pCisJCWRpZSgiaW1wb3NzaWJseSBsYXJnZSBvYmplY3QgaGVhZGVyIik7CisKKwlzLm5leHRfb3V0ID0gb3V0X2J1ZiArIGhkcmxlbjsKKwlzLmF2YWlsX291dCA9IG91dF9zeiAtIGhkcmxlbjsKKworCXdoaWxlIChzdGF0dXMgIT0gWl9TVFJFQU1fRU5EKSB7CisJCWlmICgwIDwgbGVuICYmICFzLmF2YWlsX2luKSB7CisJCQlzaXplX3QgY250ID0gaW5fc3ogPCBsZW4gPyBpbl9zeiA6IChzaXplX3QpbGVuOworCQkJc2l6ZV90IG4gPSBmcmVhZChpbl9idWYsIDEsIGNudCwgc3RkaW4pOworCQkJaWYgKCFuICYmIGZlb2Yoc3RkaW4pKQorCQkJCWRpZSgiRU9GIGluIGRhdGEgKCUiIFBSSXVNQVggIiBieXRlcyByZW1haW5pbmcpIiwgbGVuKTsKKworCQkJZ2l0X1NIQTFfVXBkYXRlKCZjLCBpbl9idWYsIG4pOworCQkJcy5uZXh0X2luID0gaW5fYnVmOworCQkJcy5hdmFpbF9pbiA9IG47CisJCQlsZW4gLT0gbjsKKwkJfQorCisJCXN0YXR1cyA9IGdpdF9kZWZsYXRlKCZzLCBsZW4gPyAwIDogWl9GSU5JU0gpOworCisJCWlmICghcy5hdmFpbF9vdXQgfHwgc3RhdHVzID09IFpfU1RSRUFNX0VORCkgeworCQkJc2l6ZV90IG4gPSBzLm5leHRfb3V0IC0gb3V0X2J1ZjsKKwkJCXNoYTF3cml0ZShwYWNrX2ZpbGUsIG91dF9idWYsIG4pOworCQkJcGFja19zaXplICs9IG47CisJCQlzLm5leHRfb3V0ID0gb3V0X2J1ZjsKKwkJCXMuYXZhaWxfb3V0ID0gb3V0X3N6OworCQl9CisKKwkJc3dpdGNoIChzdGF0dXMpIHsKKwkJY2FzZSBaX09LOgorCQljYXNlIFpfQlVGX0VSUk9SOgorCQljYXNlIFpfU1RSRUFNX0VORDoKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJZGllKCJ1bmV4cGVjdGVkIGRlZmxhdGUgZmFpbHVyZTogJWQiLCBzdGF0dXMpOworCQl9CisJfQorCWdpdF9kZWZsYXRlX2VuZCgmcyk7CisJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmMpOworCisJaWYgKHNoYTFvdXQpCisJCWhhc2hjcHkoc2hhMW91dCwgc2hhMSk7CisKKwllID0gaW5zZXJ0X29iamVjdChzaGExKTsKKworCWlmIChtYXJrKQorCQlpbnNlcnRfbWFyayhtYXJrLCBlKTsKKworCWlmIChlLT5pZHgub2Zmc2V0KSB7CisJCWR1cGxpY2F0ZV9jb3VudF9ieV90eXBlW09CSl9CTE9CXSsrOworCQl0cnVuY2F0ZV9wYWNrKCZjaGVja3BvaW50KTsKKworCX0gZWxzZSBpZiAoZmluZF9zaGExX3BhY2soc2hhMSwgcGFja2VkX2dpdCkpIHsKKwkJZS0+dHlwZSA9IE9CSl9CTE9COworCQllLT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJCWUtPmlkeC5vZmZzZXQgPSAxOyAvKiBqdXN0IG5vdCB6ZXJvISAqLworCQlkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfQkxPQl0rKzsKKwkJdHJ1bmNhdGVfcGFjaygmY2hlY2twb2ludCk7CisKKwl9IGVsc2UgeworCQllLT5kZXB0aCA9IDA7CisJCWUtPnR5cGUgPSBPQkpfQkxPQjsKKwkJZS0+cGFja19pZCA9IHBhY2tfaWQ7CisJCWUtPmlkeC5vZmZzZXQgPSBvZmZzZXQ7CisJCWUtPmlkeC5jcmMzMiA9IGNyYzMyX2VuZChwYWNrX2ZpbGUpOworCQlvYmplY3RfY291bnQrKzsKKwkJb2JqZWN0X2NvdW50X2J5X3R5cGVbT0JKX0JMT0JdKys7CisJfQorCisJZnJlZShpbl9idWYpOworCWZyZWUob3V0X2J1Zik7Cit9CisKKy8qIEFsbCBjYWxscyBtdXN0IGJlIGd1YXJkZWQgYnkgZmluZF9vYmplY3QoKSBvciBmaW5kX21hcmsoKSB0bworICogZW5zdXJlIHRoZSAnc3RydWN0IG9iamVjdF9lbnRyeScgcGFzc2VkIHdhcyB3cml0dGVuIGJ5IHRoaXMKKyAqIHByb2Nlc3MgaW5zdGFuY2UuICBXZSB1bnBhY2sgdGhlIGVudHJ5IGJ5IHRoZSBvZmZzZXQsIGF2b2lkaW5nCisgKiB0aGUgbmVlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgLmlkeCBmaWxlLiAgVGhpcyB1bnBhY2tpbmcgcnVsZQorICogd29ya3MgYmVjYXVzZSB3ZSBvbmx5IHVzZSBPQkpfUkVGX0RFTFRBIHdpdGhpbiB0aGUgcGFja2ZpbGVzCisgKiBjcmVhdGVkIGJ5IGZhc3QtaW1wb3J0LgorICoKKyAqIG9lIG11c3Qgbm90IGJlIE5VTEwuICBTdWNoIGFuIG9lIHVzdWFsbHkgY29tZXMgZnJvbSBnaXZpbmcKKyAqIGFuIHVua25vd24gU0hBLTEgdG8gZmluZF9vYmplY3QoKSBvciBhbiB1bmRlZmluZWQgbWFyayB0bworICogZmluZF9tYXJrKCkuICBDYWxsZXJzIG11c3QgdGVzdCBmb3IgdGhpcyBjb25kaXRpb24gYW5kIHVzZQorICogdGhlIHN0YW5kYXJkIHJlYWRfc2hhMV9maWxlKCkgd2hlbiBpdCBoYXBwZW5zLgorICoKKyAqIG9lLT5wYWNrX2lkIG11c3Qgbm90IGJlIE1BWF9QQUNLX0lELiAgU3VjaCBhbiBvZSBpcyB1c3VhbGx5IGZyb20KKyAqIGZpbmRfbWFyaygpLCB3aGVyZSB0aGUgbWFyayB3YXMgcmVsb2FkZWQgZnJvbSBhbiBleGlzdGluZyBtYXJrcworICogZmlsZSBhbmQgaXMgcmVmZXJlbmNpbmcgYW4gb2JqZWN0IHRoYXQgdGhpcyBmYXN0LWltcG9ydCBwcm9jZXNzCisgKiBpbnN0YW5jZSBkaWQgbm90IHdyaXRlIG91dCB0byBhIHBhY2tmaWxlLiAgQ2FsbGVycyBtdXN0IHRlc3QgZm9yCisgKiB0aGlzIGNvbmRpdGlvbiBhbmQgdXNlIHJlYWRfc2hhMV9maWxlKCkgaW5zdGVhZC4KKyAqLworc3RhdGljIHZvaWQgKmdmaV91bnBhY2tfZW50cnkoCisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2UsCisJdW5zaWduZWQgbG9uZyAqc2l6ZXApCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gYWxsX3BhY2tzW29lLT5wYWNrX2lkXTsKKwlpZiAocCA9PSBwYWNrX2RhdGEgJiYgcC0+cGFja19zaXplIDwgKHBhY2tfc2l6ZSArIDIwKSkgeworCQkvKiBUaGUgb2JqZWN0IGlzIHN0b3JlZCBpbiB0aGUgcGFja2ZpbGUgd2UgYXJlIHdyaXRpbmcgdG8KKwkJICogYW5kIHdlIGhhdmUgbW9kaWZpZWQgaXQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBzY2FubmVkCisJCSAqIGJhY2sgdG8gcmVhZCBhIHByZXZpb3VzbHkgd3JpdHRlbiBvYmplY3QuICBJZiBhbiBvbGQKKwkJICogd2luZG93IGNvdmVyZWQgW3AtPnBhY2tfc2l6ZSwgcC0+cGFja19zaXplICsgMjApIGl0cworCQkgKiBkYXRhIGlzIHN0YWxlIGFuZCBpcyBub3QgdmFsaWQuICBDbG9zaW5nIGFsbCB3aW5kb3dzCisJCSAqIGFuZCB1cGRhdGluZyB0aGUgcGFja2ZpbGUgbGVuZ3RoIGVuc3VyZXMgd2UgY2FuIHJlYWQKKwkJICogdGhlIG5ld2x5IHdyaXR0ZW4gZGF0YS4KKwkJICovCisJCWNsb3NlX3BhY2tfd2luZG93cyhwKTsKKwkJc2hhMWZsdXNoKHBhY2tfZmlsZSk7CisKKwkJLyogV2UgaGF2ZSB0byBvZmZlciAyMCBieXRlcyBhZGRpdGlvbmFsIG9uIHRoZSBlbmQgb2YKKwkJICogdGhlIHBhY2tmaWxlIGFzIHRoZSBjb3JlIHVucGFja2VyIGNvZGUgYXNzdW1lcyB0aGUKKwkJICogZm9vdGVyIGlzIHByZXNlbnQgYXQgdGhlIGZpbGUgZW5kIGFuZCBtdXN0IHByb21pc2UKKwkJICogYXQgbGVhc3QgMjAgYnl0ZXMgd2l0aGluIGFueSB3aW5kb3cgaXQgbWFwcy4gIEJ1dAorCQkgKiB3ZSBkb24ndCBhY3R1YWxseSBjcmVhdGUgdGhlIGZvb3RlciBoZXJlLgorCQkgKi8KKwkJcC0+cGFja19zaXplID0gcGFja19zaXplICsgMjA7CisJfQorCXJldHVybiB1bnBhY2tfZW50cnkocCwgb2UtPmlkeC5vZmZzZXQsICZ0eXBlLCBzaXplcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfbW9kZShjb25zdCBjaGFyICpzdHIsIHVpbnQxNl90ICptb2RlcCkKK3sKKwl1bnNpZ25lZCBjaGFyIGM7CisJdWludDE2X3QgbW9kZSA9IDA7CisKKwl3aGlsZSAoKGMgPSAqc3RyKyspICE9ICcgJykgeworCQlpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorCQkJcmV0dXJuIE5VTEw7CisJCW1vZGUgPSAobW9kZSA8PCAzKSArIChjIC0gJzAnKTsKKwl9CisJKm1vZGVwID0gbW9kZTsKKwlyZXR1cm4gc3RyOworfQorCitzdGF0aWMgdm9pZCBsb2FkX3RyZWUoc3RydWN0IHRyZWVfZW50cnkgKnJvb3QpCit7CisJdW5zaWduZWQgY2hhciAqc2hhMSA9IHJvb3QtPnZlcnNpb25zWzFdLnNoYTE7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqbXlvZTsKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwljaGFyICpidWY7CisJY29uc3QgY2hhciAqYzsKKworCXJvb3QtPnRyZWUgPSB0ID0gbmV3X3RyZWVfY29udGVudCg4KTsKKwlpZiAoaXNfbnVsbF9zaGExKHNoYTEpKQorCQlyZXR1cm47CisKKwlteW9lID0gZmluZF9vYmplY3Qoc2hhMSk7CisJaWYgKG15b2UgJiYgbXlvZS0+cGFja19pZCAhPSBNQVhfUEFDS19JRCkgeworCQlpZiAobXlvZS0+dHlwZSAhPSBPQkpfVFJFRSkKKwkJCWRpZSgiTm90IGEgdHJlZTogJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJCXQtPmRlbHRhX2RlcHRoID0gbXlvZS0+ZGVwdGg7CisJCWJ1ZiA9IGdmaV91bnBhY2tfZW50cnkobXlvZSwgJnNpemUpOworCQlpZiAoIWJ1ZikKKwkJCWRpZSgiQ2FuJ3QgbG9hZCB0cmVlICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCX0gZWxzZSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwkJaWYgKCFidWYgfHwgdHlwZSAhPSBPQkpfVFJFRSkKKwkJCWRpZSgiQ2FuJ3QgbG9hZCB0cmVlICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCX0KKworCWMgPSBidWY7CisJd2hpbGUgKGMgIT0gKGJ1ZiArIHNpemUpKSB7CisJCXN0cnVjdCB0cmVlX2VudHJ5ICplID0gbmV3X3RyZWVfZW50cnkoKTsKKworCQlpZiAodC0+ZW50cnlfY291bnQgPT0gdC0+ZW50cnlfY2FwYWNpdHkpCisJCQlyb290LT50cmVlID0gdCA9IGdyb3dfdHJlZV9jb250ZW50KHQsIHQtPmVudHJ5X2NvdW50KTsKKwkJdC0+ZW50cmllc1t0LT5lbnRyeV9jb3VudCsrXSA9IGU7CisKKwkJZS0+dHJlZSA9IE5VTEw7CisJCWMgPSBnZXRfbW9kZShjLCAmZS0+dmVyc2lvbnNbMV0ubW9kZSk7CisJCWlmICghYykKKwkJCWRpZSgiQ29ycnVwdCBtb2RlIGluICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCQllLT52ZXJzaW9uc1swXS5tb2RlID0gZS0+dmVyc2lvbnNbMV0ubW9kZTsKKwkJZS0+bmFtZSA9IHRvX2F0b20oYywgc3RybGVuKGMpKTsKKwkJYyArPSBlLT5uYW1lLT5zdHJfbGVuICsgMTsKKwkJaGFzaGNweShlLT52ZXJzaW9uc1swXS5zaGExLCAodW5zaWduZWQgY2hhciAqKWMpOworCQloYXNoY3B5KGUtPnZlcnNpb25zWzFdLnNoYTEsICh1bnNpZ25lZCBjaGFyICopYyk7CisJCWMgKz0gMjA7CisJfQorCWZyZWUoYnVmKTsKK30KKworc3RhdGljIGludCB0ZWNtcDAgKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqYSA9ICooKHN0cnVjdCB0cmVlX2VudHJ5KiopX2EpOworCXN0cnVjdCB0cmVlX2VudHJ5ICpiID0gKigoc3RydWN0IHRyZWVfZW50cnkqKilfYik7CisJcmV0dXJuIGJhc2VfbmFtZV9jb21wYXJlKAorCQlhLT5uYW1lLT5zdHJfZGF0LCBhLT5uYW1lLT5zdHJfbGVuLCBhLT52ZXJzaW9uc1swXS5tb2RlLAorCQliLT5uYW1lLT5zdHJfZGF0LCBiLT5uYW1lLT5zdHJfbGVuLCBiLT52ZXJzaW9uc1swXS5tb2RlKTsKK30KKworc3RhdGljIGludCB0ZWNtcDEgKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqYSA9ICooKHN0cnVjdCB0cmVlX2VudHJ5KiopX2EpOworCXN0cnVjdCB0cmVlX2VudHJ5ICpiID0gKigoc3RydWN0IHRyZWVfZW50cnkqKilfYik7CisJcmV0dXJuIGJhc2VfbmFtZV9jb21wYXJlKAorCQlhLT5uYW1lLT5zdHJfZGF0LCBhLT5uYW1lLT5zdHJfbGVuLCBhLT52ZXJzaW9uc1sxXS5tb2RlLAorCQliLT5uYW1lLT5zdHJfZGF0LCBiLT5uYW1lLT5zdHJfbGVuLCBiLT52ZXJzaW9uc1sxXS5tb2RlKTsKK30KKworc3RhdGljIHZvaWQgbWt0cmVlKHN0cnVjdCB0cmVlX2NvbnRlbnQgKnQsIGludCB2LCBzdHJ1Y3Qgc3RyYnVmICpiKQoreworCXNpemVfdCBtYXhsZW4gPSAwOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCF2KQorCQlxc29ydCh0LT5lbnRyaWVzLHQtPmVudHJ5X2NvdW50LHNpemVvZih0LT5lbnRyaWVzWzBdKSx0ZWNtcDApOworCWVsc2UKKwkJcXNvcnQodC0+ZW50cmllcyx0LT5lbnRyeV9jb3VudCxzaXplb2YodC0+ZW50cmllc1swXSksdGVjbXAxKTsKKworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWlmICh0LT5lbnRyaWVzW2ldLT52ZXJzaW9uc1t2XS5tb2RlKQorCQkJbWF4bGVuICs9IHQtPmVudHJpZXNbaV0tPm5hbWUtPnN0cl9sZW4gKyAzNDsKKwl9CisKKwlzdHJidWZfcmVzZXQoYik7CisJc3RyYnVmX2dyb3coYiwgbWF4bGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdHJlZV9lbnRyeSAqZSA9IHQtPmVudHJpZXNbaV07CisJCWlmICghZS0+dmVyc2lvbnNbdl0ubW9kZSkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfYWRkZihiLCAiJW8gJXMlYyIsCisJCQkodW5zaWduZWQgaW50KShlLT52ZXJzaW9uc1t2XS5tb2RlICYgfk5PX0RFTFRBKSwKKwkJCWUtPm5hbWUtPnN0cl9kYXQsICdcMCcpOworCQlzdHJidWZfYWRkKGIsIGUtPnZlcnNpb25zW3ZdLnNoYTEsIDIwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0b3JlX3RyZWUoc3RydWN0IHRyZWVfZW50cnkgKnJvb3QpCit7CisJc3RydWN0IHRyZWVfY29udGVudCAqdDsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgZGVsOworCXN0cnVjdCBsYXN0X29iamVjdCBsbyA9IHsgU1RSQlVGX0lOSVQsIDAsIDAsIC8qIG5vX3N3YXAgKi8gMSB9OworCXN0cnVjdCBvYmplY3RfZW50cnkgKmxlID0gTlVMTDsKKworCWlmICghaXNfbnVsbF9zaGExKHJvb3QtPnZlcnNpb25zWzFdLnNoYTEpKQorCQlyZXR1cm47CisKKwlpZiAoIXJvb3QtPnRyZWUpCisJCWxvYWRfdHJlZShyb290KTsKKwl0ID0gcm9vdC0+dHJlZTsKKworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWlmICh0LT5lbnRyaWVzW2ldLT50cmVlKQorCQkJc3RvcmVfdHJlZSh0LT5lbnRyaWVzW2ldKTsKKwl9CisKKwlpZiAoIShyb290LT52ZXJzaW9uc1swXS5tb2RlICYgTk9fREVMVEEpKQorCQlsZSA9IGZpbmRfb2JqZWN0KHJvb3QtPnZlcnNpb25zWzBdLnNoYTEpOworCWlmIChTX0lTRElSKHJvb3QtPnZlcnNpb25zWzBdLm1vZGUpICYmIGxlICYmIGxlLT5wYWNrX2lkID09IHBhY2tfaWQpIHsKKwkJbWt0cmVlKHQsIDAsICZvbGRfdHJlZSk7CisJCWxvLmRhdGEgPSBvbGRfdHJlZTsKKwkJbG8ub2Zmc2V0ID0gbGUtPmlkeC5vZmZzZXQ7CisJCWxvLmRlcHRoID0gdC0+ZGVsdGFfZGVwdGg7CisJfQorCisJbWt0cmVlKHQsIDEsICZuZXdfdHJlZSk7CisJc3RvcmVfb2JqZWN0KE9CSl9UUkVFLCAmbmV3X3RyZWUsICZsbywgcm9vdC0+dmVyc2lvbnNbMV0uc2hhMSwgMCk7CisKKwl0LT5kZWx0YV9kZXB0aCA9IGxvLmRlcHRoOworCWZvciAoaSA9IDAsIGogPSAwLCBkZWwgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgdHJlZV9lbnRyeSAqZSA9IHQtPmVudHJpZXNbaV07CisJCWlmIChlLT52ZXJzaW9uc1sxXS5tb2RlKSB7CisJCQllLT52ZXJzaW9uc1swXS5tb2RlID0gZS0+dmVyc2lvbnNbMV0ubW9kZTsKKwkJCWhhc2hjcHkoZS0+dmVyc2lvbnNbMF0uc2hhMSwgZS0+dmVyc2lvbnNbMV0uc2hhMSk7CisJCQl0LT5lbnRyaWVzW2orK10gPSBlOworCQl9IGVsc2UgeworCQkJcmVsZWFzZV90cmVlX2VudHJ5KGUpOworCQkJZGVsKys7CisJCX0KKwl9CisJdC0+ZW50cnlfY291bnQgLT0gZGVsOworfQorCitzdGF0aWMgdm9pZCB0cmVlX2NvbnRlbnRfcmVwbGFjZSgKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCWNvbnN0IHVpbnQxNl90IG1vZGUsCisJc3RydWN0IHRyZWVfY29udGVudCAqbmV3dHJlZSkKK3sKKwlpZiAoIVNfSVNESVIobW9kZSkpCisJCWRpZSgiUm9vdCBjYW5ub3QgYmUgYSBub24tZGlyZWN0b3J5Iik7CisJaGFzaGNscihyb290LT52ZXJzaW9uc1swXS5zaGExKTsKKwloYXNoY3B5KHJvb3QtPnZlcnNpb25zWzFdLnNoYTEsIHNoYTEpOworCWlmIChyb290LT50cmVlKQorCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUocm9vdC0+dHJlZSk7CisJcm9vdC0+dHJlZSA9IG5ld3RyZWU7Cit9CisKK3N0YXRpYyBpbnQgdHJlZV9jb250ZW50X3NldCgKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwljb25zdCBjaGFyICpwLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJY29uc3QgdWludDE2X3QgbW9kZSwKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICpzdWJ0cmVlKQoreworCXN0cnVjdCB0cmVlX2NvbnRlbnQgKnQ7CisJY29uc3QgY2hhciAqc2xhc2gxOworCXVuc2lnbmVkIGludCBpLCBuOworCXN0cnVjdCB0cmVlX2VudHJ5ICplOworCisJc2xhc2gxID0gc3RyY2hybnVsKHAsICcvJyk7CisJbiA9IHNsYXNoMSAtIHA7CisJaWYgKCFuKQorCQlkaWUoIkVtcHR5IHBhdGggY29tcG9uZW50IGZvdW5kIGluIGlucHV0Iik7CisJaWYgKCEqc2xhc2gxICYmICFTX0lTRElSKG1vZGUpICYmIHN1YnRyZWUpCisJCWRpZSgiTm9uLWRpcmVjdG9yaWVzIGNhbm5vdCBoYXZlIHN1YnRyZWVzIik7CisKKwlpZiAoIXJvb3QtPnRyZWUpCisJCWxvYWRfdHJlZShyb290KTsKKwl0ID0gcm9vdC0+dHJlZTsKKwlmb3IgKGkgPSAwOyBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQllID0gdC0+ZW50cmllc1tpXTsKKwkJaWYgKGUtPm5hbWUtPnN0cl9sZW4gPT0gbiAmJiAhc3RybmNtcF9pY2FzZShwLCBlLT5uYW1lLT5zdHJfZGF0LCBuKSkgeworCQkJaWYgKCEqc2xhc2gxKSB7CisJCQkJaWYgKCFTX0lTRElSKG1vZGUpCisJCQkJCQkmJiBlLT52ZXJzaW9uc1sxXS5tb2RlID09IG1vZGUKKwkJCQkJCSYmICFoYXNoY21wKGUtPnZlcnNpb25zWzFdLnNoYTEsIHNoYTEpKQorCQkJCQlyZXR1cm4gMDsKKwkJCQllLT52ZXJzaW9uc1sxXS5tb2RlID0gbW9kZTsKKwkJCQloYXNoY3B5KGUtPnZlcnNpb25zWzFdLnNoYTEsIHNoYTEpOworCQkJCWlmIChlLT50cmVlKQorCQkJCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoZS0+dHJlZSk7CisJCQkJZS0+dHJlZSA9IHN1YnRyZWU7CisKKwkJCQkvKgorCQkJCSAqIFdlIG5lZWQgdG8gbGVhdmUgZS0+dmVyc2lvbnNbMF0uc2hhMSBhbG9uZQorCQkJCSAqIHRvIGF2b2lkIG1vZGlmeWluZyB0aGUgcHJlaW1hZ2UgdHJlZSB1c2VkCisJCQkJICogd2hlbiB3cml0aW5nIG91dCB0aGUgcGFyZW50IGRpcmVjdG9yeS4KKwkJCQkgKiBCdXQgYWZ0ZXIgcmVwbGFjaW5nIHRoZSBzdWJkaXIgd2l0aCBhCisJCQkJICogY29tcGxldGVseSBkaWZmZXJlbnQgb25lLCBpdCdzIG5vdCBhIGdvb2QKKwkJCQkgKiBkZWx0YSBiYXNlIGFueSBtb3JlLCBhbmQgYmVzaWRlcywgd2UndmUKKwkJCQkgKiB0aHJvd24gYXdheSB0aGUgdHJlZSBlbnRyaWVzIG5lZWRlZCB0bworCQkJCSAqIG1ha2UgYSBkZWx0YSBhZ2FpbnN0IGl0LgorCQkJCSAqCisJCQkJICogU28gbGV0J3MganVzdCBleHBsaWNpdGx5IGRpc2FibGUgZGVsdGFzCisJCQkJICogZm9yIHRoZSBzdWJ0cmVlLgorCQkJCSAqLworCQkJCWlmIChTX0lTRElSKGUtPnZlcnNpb25zWzBdLm1vZGUpKQorCQkJCQllLT52ZXJzaW9uc1swXS5tb2RlIHw9IE5PX0RFTFRBOworCisJCQkJaGFzaGNscihyb290LT52ZXJzaW9uc1sxXS5zaGExKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCWlmICghU19JU0RJUihlLT52ZXJzaW9uc1sxXS5tb2RlKSkgeworCQkJCWUtPnRyZWUgPSBuZXdfdHJlZV9jb250ZW50KDgpOworCQkJCWUtPnZlcnNpb25zWzFdLm1vZGUgPSBTX0lGRElSOworCQkJfQorCQkJaWYgKCFlLT50cmVlKQorCQkJCWxvYWRfdHJlZShlKTsKKwkJCWlmICh0cmVlX2NvbnRlbnRfc2V0KGUsIHNsYXNoMSArIDEsIHNoYTEsIG1vZGUsIHN1YnRyZWUpKSB7CisJCQkJaGFzaGNscihyb290LT52ZXJzaW9uc1sxXS5zaGExKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKHQtPmVudHJ5X2NvdW50ID09IHQtPmVudHJ5X2NhcGFjaXR5KQorCQlyb290LT50cmVlID0gdCA9IGdyb3dfdHJlZV9jb250ZW50KHQsIHQtPmVudHJ5X2NvdW50KTsKKwllID0gbmV3X3RyZWVfZW50cnkoKTsKKwllLT5uYW1lID0gdG9fYXRvbShwLCBuKTsKKwllLT52ZXJzaW9uc1swXS5tb2RlID0gMDsKKwloYXNoY2xyKGUtPnZlcnNpb25zWzBdLnNoYTEpOworCXQtPmVudHJpZXNbdC0+ZW50cnlfY291bnQrK10gPSBlOworCWlmICgqc2xhc2gxKSB7CisJCWUtPnRyZWUgPSBuZXdfdHJlZV9jb250ZW50KDgpOworCQllLT52ZXJzaW9uc1sxXS5tb2RlID0gU19JRkRJUjsKKwkJdHJlZV9jb250ZW50X3NldChlLCBzbGFzaDEgKyAxLCBzaGExLCBtb2RlLCBzdWJ0cmVlKTsKKwl9IGVsc2UgeworCQllLT50cmVlID0gc3VidHJlZTsKKwkJZS0+dmVyc2lvbnNbMV0ubW9kZSA9IG1vZGU7CisJCWhhc2hjcHkoZS0+dmVyc2lvbnNbMV0uc2hhMSwgc2hhMSk7CisJfQorCWhhc2hjbHIocm9vdC0+dmVyc2lvbnNbMV0uc2hhMSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdHJlZV9jb250ZW50X3JlbW92ZSgKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwljb25zdCBjaGFyICpwLAorCXN0cnVjdCB0cmVlX2VudHJ5ICpiYWNrdXBfbGVhZiwKKwlpbnQgYWxsb3dfcm9vdCkKK3sKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0OworCWNvbnN0IGNoYXIgKnNsYXNoMTsKKwl1bnNpZ25lZCBpbnQgaSwgbjsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqZTsKKworCXNsYXNoMSA9IHN0cmNocm51bChwLCAnLycpOworCW4gPSBzbGFzaDEgLSBwOworCisJaWYgKCFyb290LT50cmVlKQorCQlsb2FkX3RyZWUocm9vdCk7CisKKwlpZiAoISpwICYmIGFsbG93X3Jvb3QpIHsKKwkJZSA9IHJvb3Q7CisJCWdvdG8gZGVsX2VudHJ5OworCX0KKworCXQgPSByb290LT50cmVlOworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWUgPSB0LT5lbnRyaWVzW2ldOworCQlpZiAoZS0+bmFtZS0+c3RyX2xlbiA9PSBuICYmICFzdHJuY21wX2ljYXNlKHAsIGUtPm5hbWUtPnN0cl9kYXQsIG4pKSB7CisJCQlpZiAoKnNsYXNoMSAmJiAhU19JU0RJUihlLT52ZXJzaW9uc1sxXS5tb2RlKSkKKwkJCQkvKgorCQkJCSAqIElmIHAgbmFtZXMgYSBmaWxlIGluIHNvbWUgc3ViZGlyZWN0b3J5LCBhbmQgYQorCQkJCSAqIGZpbGUgb3Igc3ltbGluayBtYXRjaGluZyB0aGUgbmFtZSBvZiB0aGUKKwkJCQkgKiBwYXJlbnQgZGlyZWN0b3J5IG9mIHAgZXhpc3RzLCB0aGVuIHAgY2Fubm90CisJCQkJICogZXhpc3QgYW5kIG5lZWQgbm90IGJlIGRlbGV0ZWQuCisJCQkJICovCisJCQkJcmV0dXJuIDE7CisJCQlpZiAoISpzbGFzaDEgfHwgIVNfSVNESVIoZS0+dmVyc2lvbnNbMV0ubW9kZSkpCisJCQkJZ290byBkZWxfZW50cnk7CisJCQlpZiAoIWUtPnRyZWUpCisJCQkJbG9hZF90cmVlKGUpOworCQkJaWYgKHRyZWVfY29udGVudF9yZW1vdmUoZSwgc2xhc2gxICsgMSwgYmFja3VwX2xlYWYsIDApKSB7CisJCQkJZm9yIChuID0gMDsgbiA8IGUtPnRyZWUtPmVudHJ5X2NvdW50OyBuKyspIHsKKwkJCQkJaWYgKGUtPnRyZWUtPmVudHJpZXNbbl0tPnZlcnNpb25zWzFdLm1vZGUpIHsKKwkJCQkJCWhhc2hjbHIocm9vdC0+dmVyc2lvbnNbMV0uc2hhMSk7CisJCQkJCQlyZXR1cm4gMTsKKwkJCQkJfQorCQkJCX0KKwkJCQliYWNrdXBfbGVhZiA9IE5VTEw7CisJCQkJZ290byBkZWxfZW50cnk7CisJCQl9CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKworZGVsX2VudHJ5OgorCWlmIChiYWNrdXBfbGVhZikKKwkJbWVtY3B5KGJhY2t1cF9sZWFmLCBlLCBzaXplb2YoKmJhY2t1cF9sZWFmKSk7CisJZWxzZSBpZiAoZS0+dHJlZSkKKwkJcmVsZWFzZV90cmVlX2NvbnRlbnRfcmVjdXJzaXZlKGUtPnRyZWUpOworCWUtPnRyZWUgPSBOVUxMOworCWUtPnZlcnNpb25zWzFdLm1vZGUgPSAwOworCWhhc2hjbHIoZS0+dmVyc2lvbnNbMV0uc2hhMSk7CisJaGFzaGNscihyb290LT52ZXJzaW9uc1sxXS5zaGExKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB0cmVlX2NvbnRlbnRfZ2V0KAorCXN0cnVjdCB0cmVlX2VudHJ5ICpyb290LAorCWNvbnN0IGNoYXIgKnAsCisJc3RydWN0IHRyZWVfZW50cnkgKmxlYWYsCisJaW50IGFsbG93X3Jvb3QpCit7CisJc3RydWN0IHRyZWVfY29udGVudCAqdDsKKwljb25zdCBjaGFyICpzbGFzaDE7CisJdW5zaWduZWQgaW50IGksIG47CisJc3RydWN0IHRyZWVfZW50cnkgKmU7CisKKwlzbGFzaDEgPSBzdHJjaHJudWwocCwgJy8nKTsKKwluID0gc2xhc2gxIC0gcDsKKwlpZiAoIW4gJiYgIWFsbG93X3Jvb3QpCisJCWRpZSgiRW1wdHkgcGF0aCBjb21wb25lbnQgZm91bmQgaW4gaW5wdXQiKTsKKworCWlmICghcm9vdC0+dHJlZSkKKwkJbG9hZF90cmVlKHJvb3QpOworCisJaWYgKCFuKSB7CisJCWUgPSByb290OworCQlnb3RvIGZvdW5kX2VudHJ5OworCX0KKworCXQgPSByb290LT50cmVlOworCWZvciAoaSA9IDA7IGkgPCB0LT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWUgPSB0LT5lbnRyaWVzW2ldOworCQlpZiAoZS0+bmFtZS0+c3RyX2xlbiA9PSBuICYmICFzdHJuY21wX2ljYXNlKHAsIGUtPm5hbWUtPnN0cl9kYXQsIG4pKSB7CisJCQlpZiAoISpzbGFzaDEpCisJCQkJZ290byBmb3VuZF9lbnRyeTsKKwkJCWlmICghU19JU0RJUihlLT52ZXJzaW9uc1sxXS5tb2RlKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWlmICghZS0+dHJlZSkKKwkJCQlsb2FkX3RyZWUoZSk7CisJCQlyZXR1cm4gdHJlZV9jb250ZW50X2dldChlLCBzbGFzaDEgKyAxLCBsZWFmLCAwKTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKworZm91bmRfZW50cnk6CisJbWVtY3B5KGxlYWYsIGUsIHNpemVvZigqbGVhZikpOworCWlmIChlLT50cmVlICYmIGlzX251bGxfc2hhMShlLT52ZXJzaW9uc1sxXS5zaGExKSkKKwkJbGVhZi0+dHJlZSA9IGR1cF90cmVlX2NvbnRlbnQoZS0+dHJlZSk7CisJZWxzZQorCQlsZWFmLT50cmVlID0gTlVMTDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB1cGRhdGVfYnJhbmNoKHN0cnVjdCBicmFuY2ggKmIpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKm1zZyA9ICJmYXN0LWltcG9ydCI7CisJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisJdW5zaWduZWQgY2hhciBvbGRfc2hhMVsyMF07CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKworCWlmIChpc19udWxsX3NoYTEoYi0+c2hhMSkpIHsKKwkJaWYgKGItPmRlbGV0ZSkKKwkJCWRlbGV0ZV9yZWYoYi0+bmFtZSwgTlVMTCwgMCk7CisJCXJldHVybiAwOworCX0KKwlpZiAocmVhZF9yZWYoYi0+bmFtZSwgb2xkX3NoYTEpKQorCQloYXNoY2xyKG9sZF9zaGExKTsKKwlpZiAoIWZvcmNlX3VwZGF0ZSAmJiAhaXNfbnVsbF9zaGExKG9sZF9zaGExKSkgeworCQlzdHJ1Y3QgY29tbWl0ICpvbGRfY21pdCwgKm5ld19jbWl0OworCisJCW9sZF9jbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KG9sZF9zaGExLCAwKTsKKwkJbmV3X2NtaXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoYi0+c2hhMSwgMCk7CisJCWlmICghb2xkX2NtaXQgfHwgIW5ld19jbWl0KQorCQkJcmV0dXJuIGVycm9yKCJCcmFuY2ggJXMgaXMgbWlzc2luZyBjb21taXRzLiIsIGItPm5hbWUpOworCisJCWlmICghaW5fbWVyZ2VfYmFzZXMob2xkX2NtaXQsIG5ld19jbWl0KSkgeworCQkJd2FybmluZygiTm90IHVwZGF0aW5nICVzIgorCQkJCSIgKG5ldyB0aXAgJXMgZG9lcyBub3QgY29udGFpbiAlcykiLAorCQkJCWItPm5hbWUsIHNoYTFfdG9faGV4KGItPnNoYTEpLCBzaGExX3RvX2hleChvbGRfc2hhMSkpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCWlmICghdHJhbnNhY3Rpb24gfHwKKwkgICAgcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0cmFuc2FjdGlvbiwgYi0+bmFtZSwgYi0+c2hhMSwgb2xkX3NoYTEsCisJCQkJICAgMCwgbXNnLCAmZXJyKSB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCAmZXJyKSkgeworCQlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJCWVycm9yKCIlcyIsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfYnJhbmNoZXModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgYnJhbmNoICpiOworCisJZm9yIChpID0gMDsgaSA8IGJyYW5jaF90YWJsZV9zejsgaSsrKSB7CisJCWZvciAoYiA9IGJyYW5jaF90YWJsZVtpXTsgYjsgYiA9IGItPnRhYmxlX25leHRfYnJhbmNoKQorCQkJZmFpbHVyZSB8PSB1cGRhdGVfYnJhbmNoKGIpOworCX0KK30KKworc3RhdGljIHZvaWQgZHVtcF90YWdzKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKm1zZyA9ICJmYXN0LWltcG9ydCI7CisJc3RydWN0IHRhZyAqdDsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZl9uYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbjsKKworCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCWlmICghdHJhbnNhY3Rpb24pIHsKKwkJZmFpbHVyZSB8PSBlcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJZ290byBjbGVhbnVwOworCX0KKwlmb3IgKHQgPSBmaXJzdF90YWc7IHQ7IHQgPSB0LT5uZXh0X3RhZykgeworCQlzdHJidWZfcmVzZXQoJnJlZl9uYW1lKTsKKwkJc3RyYnVmX2FkZGYoJnJlZl9uYW1lLCAicmVmcy90YWdzLyVzIiwgdC0+bmFtZSk7CisKKwkJaWYgKHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sIHJlZl9uYW1lLmJ1ZiwKKwkJCQkJICAgdC0+c2hhMSwgTlVMTCwgMCwgbXNnLCAmZXJyKSkgeworCQkJZmFpbHVyZSB8PSBlcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKwlpZiAocmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpCisJCWZhaWx1cmUgfD0gZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisKKyBjbGVhbnVwOgorCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwlzdHJidWZfcmVsZWFzZSgmcmVmX25hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX21hcmtzX2hlbHBlcihGSUxFICpmLAorCXVpbnRtYXhfdCBiYXNlLAorCXN0cnVjdCBtYXJrX3NldCAqbSkKK3sKKwl1aW50bWF4X3QgazsKKwlpZiAobS0+c2hpZnQpIHsKKwkJZm9yIChrID0gMDsgayA8IDEwMjQ7IGsrKykgeworCQkJaWYgKG0tPmRhdGEuc2V0c1trXSkKKwkJCQlkdW1wX21hcmtzX2hlbHBlcihmLCBiYXNlICsgKGsgPDwgbS0+c2hpZnQpLAorCQkJCQltLT5kYXRhLnNldHNba10pOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChrID0gMDsgayA8IDEwMjQ7IGsrKykgeworCQkJaWYgKG0tPmRhdGEubWFya2VkW2tdKQorCQkJCWZwcmludGYoZiwgIjolIiBQUkl1TUFYICIgJXNcbiIsIGJhc2UgKyBrLAorCQkJCQlzaGExX3RvX2hleChtLT5kYXRhLm1hcmtlZFtrXS0+aWR4LnNoYTEpKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZHVtcF9tYXJrcyh2b2lkKQoreworCXN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIG1hcmtfbG9jazsKKwlGSUxFICpmOworCisJaWYgKCFleHBvcnRfbWFya3NfZmlsZSkKKwkJcmV0dXJuOworCisJaWYgKGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoJm1hcmtfbG9jaywgZXhwb3J0X21hcmtzX2ZpbGUsIDApIDwgMCkgeworCQlmYWlsdXJlIHw9IGVycm9yKCJVbmFibGUgdG8gd3JpdGUgbWFya3MgZmlsZSAlczogJXMiLAorCQkJZXhwb3J0X21hcmtzX2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybjsKKwl9CisKKwlmID0gZmRvcGVuX2xvY2tfZmlsZSgmbWFya19sb2NrLCAidyIpOworCWlmICghZikgeworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJcm9sbGJhY2tfbG9ja19maWxlKCZtYXJrX2xvY2spOworCQlmYWlsdXJlIHw9IGVycm9yKCJVbmFibGUgdG8gd3JpdGUgbWFya3MgZmlsZSAlczogJXMiLAorCQkJZXhwb3J0X21hcmtzX2ZpbGUsIHN0cmVycm9yKHNhdmVkX2Vycm5vKSk7CisJCXJldHVybjsKKwl9CisKKwlkdW1wX21hcmtzX2hlbHBlcihmLCAwLCBtYXJrcyk7CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJm1hcmtfbG9jaykpIHsKKwkJZmFpbHVyZSB8PSBlcnJvcigiVW5hYmxlIHRvIGNvbW1pdCBtYXJrcyBmaWxlICVzOiAlcyIsCisJCQlleHBvcnRfbWFya3NfZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KK30KKworc3RhdGljIHZvaWQgcmVhZF9tYXJrcyh2b2lkKQoreworCWNoYXIgbGluZVs1MTJdOworCUZJTEUgKmYgPSBmb3BlbihpbXBvcnRfbWFya3NfZmlsZSwgInIiKTsKKwlpZiAoZikKKwkJOworCWVsc2UgaWYgKGltcG9ydF9tYXJrc19maWxlX2lnbm9yZV9taXNzaW5nICYmIGVycm5vID09IEVOT0VOVCkKKwkJcmV0dXJuOyAvKiBNYXJrcyBmaWxlIGRvZXMgbm90IGV4aXN0ICovCisJZWxzZQorCQlkaWVfZXJybm8oImNhbm5vdCByZWFkICclcyciLCBpbXBvcnRfbWFya3NfZmlsZSk7CisJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZikpIHsKKwkJdWludG1heF90IG1hcms7CisJCWNoYXIgKmVuZDsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqZTsKKworCQllbmQgPSBzdHJjaHIobGluZSwgJ1xuJyk7CisJCWlmIChsaW5lWzBdICE9ICc6JyB8fCAhZW5kKQorCQkJZGllKCJjb3JydXB0IG1hcmsgbGluZTogJXMiLCBsaW5lKTsKKwkJKmVuZCA9IDA7CisJCW1hcmsgPSBzdHJ0b3VtYXgobGluZSArIDEsICZlbmQsIDEwKTsKKwkJaWYgKCFtYXJrIHx8IGVuZCA9PSBsaW5lICsgMQorCQkJfHwgKmVuZCAhPSAnICcgfHwgZ2V0X3NoYTFfaGV4KGVuZCArIDEsIHNoYTEpKQorCQkJZGllKCJjb3JydXB0IG1hcmsgbGluZTogJXMiLCBsaW5lKTsKKwkJZSA9IGZpbmRfb2JqZWN0KHNoYTEpOworCQlpZiAoIWUpIHsKKwkJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJCQlpZiAodHlwZSA8IDApCisJCQkJZGllKCJvYmplY3Qgbm90IGZvdW5kOiAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCWUgPSBpbnNlcnRfb2JqZWN0KHNoYTEpOworCQkJZS0+dHlwZSA9IHR5cGU7CisJCQllLT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJCQllLT5pZHgub2Zmc2V0ID0gMTsgLyoganVzdCBub3QgemVybyEgKi8KKwkJfQorCQlpbnNlcnRfbWFyayhtYXJrLCBlKTsKKwl9CisJZmNsb3NlKGYpOworfQorCisKK3N0YXRpYyBpbnQgcmVhZF9uZXh0X2NvbW1hbmQodm9pZCkKK3sKKwlzdGF0aWMgaW50IHN0ZGluX2VvZiA9IDA7CisKKwlpZiAoc3RkaW5fZW9mKSB7CisJCXVucmVhZF9jb21tYW5kX2J1ZiA9IDA7CisJCXJldHVybiBFT0Y7CisJfQorCisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpwOworCisJCWlmICh1bnJlYWRfY29tbWFuZF9idWYpIHsKKwkJCXVucmVhZF9jb21tYW5kX2J1ZiA9IDA7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcmVjZW50X2NvbW1hbmQgKnJjOworCisJCQlzdHJidWZfZGV0YWNoKCZjb21tYW5kX2J1ZiwgTlVMTCk7CisJCQlzdGRpbl9lb2YgPSBzdHJidWZfZ2V0bGluZSgmY29tbWFuZF9idWYsIHN0ZGluLCAnXG4nKTsKKwkJCWlmIChzdGRpbl9lb2YpCisJCQkJcmV0dXJuIEVPRjsKKworCQkJaWYgKCFzZWVuX2RhdGFfY29tbWFuZAorCQkJCSYmICFzdGFydHNfd2l0aChjb21tYW5kX2J1Zi5idWYsICJmZWF0dXJlICIpCisJCQkJJiYgIXN0YXJ0c193aXRoKGNvbW1hbmRfYnVmLmJ1ZiwgIm9wdGlvbiAiKSkgeworCQkJCXBhcnNlX2FyZ3YoKTsKKwkJCX0KKworCQkJcmMgPSByY19mcmVlOworCQkJaWYgKHJjKQorCQkJCXJjX2ZyZWUgPSByYy0+bmV4dDsKKwkJCWVsc2UgeworCQkJCXJjID0gY21kX2hpc3QubmV4dDsKKwkJCQljbWRfaGlzdC5uZXh0ID0gcmMtPm5leHQ7CisJCQkJY21kX2hpc3QubmV4dC0+cHJldiA9ICZjbWRfaGlzdDsKKwkJCQlmcmVlKHJjLT5idWYpOworCQkJfQorCisJCQlyYy0+YnVmID0gY29tbWFuZF9idWYuYnVmOworCQkJcmMtPnByZXYgPSBjbWRfdGFpbDsKKwkJCXJjLT5uZXh0ID0gY21kX2hpc3QucHJldjsKKwkJCXJjLT5wcmV2LT5uZXh0ID0gcmM7CisJCQljbWRfdGFpbCA9IHJjOworCQl9CisJCWlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJnZXQtbWFyayAiLCAmcCkpIHsKKwkJCXBhcnNlX2dldF9tYXJrKHApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImNhdC1ibG9iICIsICZwKSkgeworCQkJcGFyc2VfY2F0X2Jsb2IocCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY29tbWFuZF9idWYuYnVmWzBdID09ICcjJykKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNraXBfb3B0aW9uYWxfbGYodm9pZCkKK3sKKwlpbnQgdGVybV9jaGFyID0gZmdldGMoc3RkaW4pOworCWlmICh0ZXJtX2NoYXIgIT0gJ1xuJyAmJiB0ZXJtX2NoYXIgIT0gRU9GKQorCQl1bmdldGModGVybV9jaGFyLCBzdGRpbik7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX21hcmsodm9pZCkKK3sKKwljb25zdCBjaGFyICp2OworCWlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJtYXJrIDoiLCAmdikpIHsKKwkJbmV4dF9tYXJrID0gc3RydG91bWF4KHYsIE5VTEwsIDEwKTsKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwl9CisJZWxzZQorCQluZXh0X21hcmsgPSAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX2RhdGEoc3RydWN0IHN0cmJ1ZiAqc2IsIHVpbnRtYXhfdCBsaW1pdCwgdWludG1heF90ICpsZW5fcmVzKQoreworCWNvbnN0IGNoYXIgKmRhdGE7CisJc3RyYnVmX3Jlc2V0KHNiKTsKKworCWlmICghc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiZGF0YSAiLCAmZGF0YSkpCisJCWRpZSgiRXhwZWN0ZWQgJ2RhdGEgbicgY29tbWFuZCwgZm91bmQ6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKworCWlmIChza2lwX3ByZWZpeChkYXRhLCAiPDwiLCAmZGF0YSkpIHsKKwkJY2hhciAqdGVybSA9IHhzdHJkdXAoZGF0YSk7CisJCXNpemVfdCB0ZXJtX2xlbiA9IGNvbW1hbmRfYnVmLmxlbiAtIChkYXRhIC0gY29tbWFuZF9idWYuYnVmKTsKKworCQlzdHJidWZfZGV0YWNoKCZjb21tYW5kX2J1ZiwgTlVMTCk7CisJCWZvciAoOzspIHsKKwkJCWlmIChzdHJidWZfZ2V0bGluZSgmY29tbWFuZF9idWYsIHN0ZGluLCAnXG4nKSA9PSBFT0YpCisJCQkJZGllKCJFT0YgaW4gZGF0YSAodGVybWluYXRvciAnJXMnIG5vdCBmb3VuZCkiLCB0ZXJtKTsKKwkJCWlmICh0ZXJtX2xlbiA9PSBjb21tYW5kX2J1Zi5sZW4KKwkJCQkmJiAhc3RyY21wKHRlcm0sIGNvbW1hbmRfYnVmLmJ1ZikpCisJCQkJYnJlYWs7CisJCQlzdHJidWZfYWRkYnVmKHNiLCAmY29tbWFuZF9idWYpOworCQkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKwkJfQorCQlmcmVlKHRlcm0pOworCX0KKwllbHNlIHsKKwkJdWludG1heF90IGxlbiA9IHN0cnRvdW1heChkYXRhLCBOVUxMLCAxMCk7CisJCXNpemVfdCBuID0gMCwgbGVuZ3RoID0gKHNpemVfdClsZW47CisKKwkJaWYgKGxpbWl0ICYmIGxpbWl0IDwgbGVuKSB7CisJCQkqbGVuX3JlcyA9IGxlbjsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChsZW5ndGggPCBsZW4pCisJCQlkaWUoImRhdGEgaXMgdG9vIGxhcmdlIHRvIHVzZSBpbiB0aGlzIGNvbnRleHQiKTsKKworCQl3aGlsZSAobiA8IGxlbmd0aCkgeworCQkJc2l6ZV90IHMgPSBzdHJidWZfZnJlYWQoc2IsIGxlbmd0aCAtIG4sIHN0ZGluKTsKKwkJCWlmICghcyAmJiBmZW9mKHN0ZGluKSkKKwkJCQlkaWUoIkVPRiBpbiBkYXRhICglbHUgYnl0ZXMgcmVtYWluaW5nKSIsCisJCQkJCSh1bnNpZ25lZCBsb25nKShsZW5ndGggLSBuKSk7CisJCQluICs9IHM7CisJCX0KKwl9CisKKwlza2lwX29wdGlvbmFsX2xmKCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRhdGVfcmF3X2RhdGUoY29uc3QgY2hhciAqc3JjLCBzdHJ1Y3Qgc3RyYnVmICpyZXN1bHQpCit7CisJY29uc3QgY2hhciAqb3JpZ19zcmMgPSBzcmM7CisJY2hhciAqZW5kcDsKKwl1bnNpZ25lZCBsb25nIG51bTsKKworCWVycm5vID0gMDsKKworCW51bSA9IHN0cnRvdWwoc3JjLCAmZW5kcCwgMTApOworCS8qIE5FRURTV09SSzogcGVyaGFwcyBjaGVjayBmb3IgcmVhc29uYWJsZSB2YWx1ZXM/ICovCisJaWYgKGVycm5vIHx8IGVuZHAgPT0gc3JjIHx8ICplbmRwICE9ICcgJykKKwkJcmV0dXJuIC0xOworCisJc3JjID0gZW5kcCArIDE7CisJaWYgKCpzcmMgIT0gJy0nICYmICpzcmMgIT0gJysnKQorCQlyZXR1cm4gLTE7CisKKwludW0gPSBzdHJ0b3VsKHNyYyArIDEsICZlbmRwLCAxMCk7CisJaWYgKGVycm5vIHx8IGVuZHAgPT0gc3JjICsgMSB8fCAqZW5kcCB8fCAxNDAwIDwgbnVtKQorCQlyZXR1cm4gLTE7CisKKwlzdHJidWZfYWRkc3RyKHJlc3VsdCwgb3JpZ19zcmMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciAqcGFyc2VfaWRlbnQoY29uc3QgY2hhciAqYnVmKQoreworCWNvbnN0IGNoYXIgKmx0Z3Q7CisJc2l6ZV90IG5hbWVfbGVuOworCXN0cnVjdCBzdHJidWYgaWRlbnQgPSBTVFJCVUZfSU5JVDsKKworCS8qIGVuc3VyZSB0aGVyZSBpcyBhIHNwYWNlIGRlbGltaXRlciBldmVuIGlmIHRoZXJlIGlzIG5vIG5hbWUgKi8KKwlpZiAoKmJ1ZiA9PSAnPCcpCisJCS0tYnVmOworCisJbHRndCA9IGJ1ZiArIHN0cmNzcG4oYnVmLCAiPD4iKTsKKwlpZiAoKmx0Z3QgIT0gJzwnKQorCQlkaWUoIk1pc3NpbmcgPCBpbiBpZGVudCBzdHJpbmc6ICVzIiwgYnVmKTsKKwlpZiAobHRndCAhPSBidWYgJiYgbHRndFstMV0gIT0gJyAnKQorCQlkaWUoIk1pc3Npbmcgc3BhY2UgYmVmb3JlIDwgaW4gaWRlbnQgc3RyaW5nOiAlcyIsIGJ1Zik7CisJbHRndCA9IGx0Z3QgKyAxICsgc3RyY3NwbihsdGd0ICsgMSwgIjw+Iik7CisJaWYgKCpsdGd0ICE9ICc+JykKKwkJZGllKCJNaXNzaW5nID4gaW4gaWRlbnQgc3RyaW5nOiAlcyIsIGJ1Zik7CisJbHRndCsrOworCWlmICgqbHRndCAhPSAnICcpCisJCWRpZSgiTWlzc2luZyBzcGFjZSBhZnRlciA+IGluIGlkZW50IHN0cmluZzogJXMiLCBidWYpOworCWx0Z3QrKzsKKwluYW1lX2xlbiA9IGx0Z3QgLSBidWY7CisJc3RyYnVmX2FkZCgmaWRlbnQsIGJ1ZiwgbmFtZV9sZW4pOworCisJc3dpdGNoICh3aGVuc3BlYykgeworCWNhc2UgV0hFTlNQRUNfUkFXOgorCQlpZiAodmFsaWRhdGVfcmF3X2RhdGUobHRndCwgJmlkZW50KSA8IDApCisJCQlkaWUoIkludmFsaWQgcmF3IGRhdGUgXCIlc1wiIGluIGlkZW50OiAlcyIsIGx0Z3QsIGJ1Zik7CisJCWJyZWFrOworCWNhc2UgV0hFTlNQRUNfUkZDMjgyMjoKKwkJaWYgKHBhcnNlX2RhdGUobHRndCwgJmlkZW50KSA8IDApCisJCQlkaWUoIkludmFsaWQgcmZjMjgyMiBkYXRlIFwiJXNcIiBpbiBpZGVudDogJXMiLCBsdGd0LCBidWYpOworCQlicmVhazsKKwljYXNlIFdIRU5TUEVDX05PVzoKKwkJaWYgKHN0cmNtcCgibm93IiwgbHRndCkpCisJCQlkaWUoIkRhdGUgaW4gaWRlbnQgbXVzdCBiZSAnbm93JzogJXMiLCBidWYpOworCQlkYXRlc3RhbXAoJmlkZW50KTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmlkZW50LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfYW5kX3N0b3JlX2Jsb2IoCisJc3RydWN0IGxhc3Rfb2JqZWN0ICpsYXN0LAorCXVuc2lnbmVkIGNoYXIgKnNoYTFvdXQsCisJdWludG1heF90IG1hcmspCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJdWludG1heF90IGxlbjsKKworCWlmIChwYXJzZV9kYXRhKCZidWYsIGJpZ19maWxlX3RocmVzaG9sZCwgJmxlbikpCisJCXN0b3JlX29iamVjdChPQkpfQkxPQiwgJmJ1ZiwgbGFzdCwgc2hhMW91dCwgbWFyayk7CisJZWxzZSB7CisJCWlmIChsYXN0KSB7CisJCQlzdHJidWZfcmVsZWFzZSgmbGFzdC0+ZGF0YSk7CisJCQlsYXN0LT5vZmZzZXQgPSAwOworCQkJbGFzdC0+ZGVwdGggPSAwOworCQl9CisJCXN0cmVhbV9ibG9iKGxlbiwgc2hhMW91dCwgbWFyayk7CisJCXNraXBfb3B0aW9uYWxfbGYoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX25ld19ibG9iKHZvaWQpCit7CisJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwlwYXJzZV9tYXJrKCk7CisJcGFyc2VfYW5kX3N0b3JlX2Jsb2IoJmxhc3RfYmxvYiwgTlVMTCwgbmV4dF9tYXJrKTsKK30KKworc3RhdGljIHZvaWQgdW5sb2FkX29uZV9icmFuY2godm9pZCkKK3sKKwl3aGlsZSAoY3VyX2FjdGl2ZV9icmFuY2hlcworCQkmJiBjdXJfYWN0aXZlX2JyYW5jaGVzID49IG1heF9hY3RpdmVfYnJhbmNoZXMpIHsKKwkJdWludG1heF90IG1pbl9jb21taXQgPSBVTE9OR19NQVg7CisJCXN0cnVjdCBicmFuY2ggKmUsICpsID0gTlVMTCwgKnAgPSBOVUxMOworCisJCWZvciAoZSA9IGFjdGl2ZV9icmFuY2hlczsgZTsgZSA9IGUtPmFjdGl2ZV9uZXh0X2JyYW5jaCkgeworCQkJaWYgKGUtPmxhc3RfY29tbWl0IDwgbWluX2NvbW1pdCkgeworCQkJCXAgPSBsOworCQkJCW1pbl9jb21taXQgPSBlLT5sYXN0X2NvbW1pdDsKKwkJCX0KKwkJCWwgPSBlOworCQl9CisKKwkJaWYgKHApIHsKKwkJCWUgPSBwLT5hY3RpdmVfbmV4dF9icmFuY2g7CisJCQlwLT5hY3RpdmVfbmV4dF9icmFuY2ggPSBlLT5hY3RpdmVfbmV4dF9icmFuY2g7CisJCX0gZWxzZSB7CisJCQllID0gYWN0aXZlX2JyYW5jaGVzOworCQkJYWN0aXZlX2JyYW5jaGVzID0gZS0+YWN0aXZlX25leHRfYnJhbmNoOworCQl9CisJCWUtPmFjdGl2ZSA9IDA7CisJCWUtPmFjdGl2ZV9uZXh0X2JyYW5jaCA9IE5VTEw7CisJCWlmIChlLT5icmFuY2hfdHJlZS50cmVlKSB7CisJCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoZS0+YnJhbmNoX3RyZWUudHJlZSk7CisJCQllLT5icmFuY2hfdHJlZS50cmVlID0gTlVMTDsKKwkJfQorCQljdXJfYWN0aXZlX2JyYW5jaGVzLS07CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2FkX2JyYW5jaChzdHJ1Y3QgYnJhbmNoICpiKQoreworCWxvYWRfdHJlZSgmYi0+YnJhbmNoX3RyZWUpOworCWlmICghYi0+YWN0aXZlKSB7CisJCWItPmFjdGl2ZSA9IDE7CisJCWItPmFjdGl2ZV9uZXh0X2JyYW5jaCA9IGFjdGl2ZV9icmFuY2hlczsKKwkJYWN0aXZlX2JyYW5jaGVzID0gYjsKKwkJY3VyX2FjdGl2ZV9icmFuY2hlcysrOworCQlicmFuY2hfbG9hZF9jb3VudCsrOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY29udmVydF9udW1fbm90ZXNfdG9fZmFub3V0KHVpbnRtYXhfdCBudW1fbm90ZXMpCit7CisJdW5zaWduZWQgY2hhciBmYW5vdXQgPSAwOworCXdoaWxlICgobnVtX25vdGVzID4+PSA4KSkKKwkJZmFub3V0Kys7CisJcmV0dXJuIGZhbm91dDsKK30KKworc3RhdGljIHZvaWQgY29uc3RydWN0X3BhdGhfd2l0aF9mYW5vdXQoY29uc3QgY2hhciAqaGV4X3NoYTEsCisJCXVuc2lnbmVkIGNoYXIgZmFub3V0LCBjaGFyICpwYXRoKQoreworCXVuc2lnbmVkIGludCBpID0gMCwgaiA9IDA7CisJaWYgKGZhbm91dCA+PSAyMCkKKwkJZGllKCJUb28gbGFyZ2UgZmFub3V0ICgldSkiLCBmYW5vdXQpOworCXdoaWxlIChmYW5vdXQpIHsKKwkJcGF0aFtpKytdID0gaGV4X3NoYTFbaisrXTsKKwkJcGF0aFtpKytdID0gaGV4X3NoYTFbaisrXTsKKwkJcGF0aFtpKytdID0gJy8nOworCQlmYW5vdXQtLTsKKwl9CisJbWVtY3B5KHBhdGggKyBpLCBoZXhfc2hhMSArIGosIDQwIC0gaik7CisJcGF0aFtpICsgNDAgLSBqXSA9ICdcMCc7Cit9CisKK3N0YXRpYyB1aW50bWF4X3QgZG9fY2hhbmdlX25vdGVfZmFub3V0KAorCQlzdHJ1Y3QgdHJlZV9lbnRyeSAqb3JpZ19yb290LCBzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwkJY2hhciAqaGV4X3NoYTEsIHVuc2lnbmVkIGludCBoZXhfc2hhMV9sZW4sCisJCWNoYXIgKmZ1bGxwYXRoLCB1bnNpZ25lZCBpbnQgZnVsbHBhdGhfbGVuLAorCQl1bnNpZ25lZCBjaGFyIGZhbm91dCkKK3sKKwlzdHJ1Y3QgdHJlZV9jb250ZW50ICp0ID0gcm9vdC0+dHJlZTsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSAqZSwgbGVhZjsKKwl1bnNpZ25lZCBpbnQgaSwgdG1wX2hleF9zaGExX2xlbiwgdG1wX2Z1bGxwYXRoX2xlbjsKKwl1aW50bWF4X3QgbnVtX25vdGVzID0gMDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNoYXIgcmVhbHBhdGhbNjBdOworCisJZm9yIChpID0gMDsgdCAmJiBpIDwgdC0+ZW50cnlfY291bnQ7IGkrKykgeworCQllID0gdC0+ZW50cmllc1tpXTsKKwkJdG1wX2hleF9zaGExX2xlbiA9IGhleF9zaGExX2xlbiArIGUtPm5hbWUtPnN0cl9sZW47CisJCXRtcF9mdWxscGF0aF9sZW4gPSBmdWxscGF0aF9sZW47CisKKwkJLyoKKwkJICogV2UncmUgaW50ZXJlc3RlZCBpbiBFSVRIRVIgZXhpc3Rpbmcgbm90ZSBlbnRyaWVzIChlbnRyaWVzCisJCSAqIHdpdGggZXhhY3RseSA0MCBoZXggY2hhcnMgaW4gcGF0aCwgbm90IGluY2x1ZGluZyBkaXJlY3RvcnkKKwkJICogc2VwYXJhdG9ycyksIE9SIGRpcmVjdG9yeSBlbnRyaWVzIHRoYXQgbWF5IGNvbnRhaW4gbm90ZQorCQkgKiBlbnRyaWVzICh3aXRoIDwgNDAgaGV4IGNoYXJzIGluIHBhdGgpLgorCQkgKiBBbHNvLCBlYWNoIHBhdGggY29tcG9uZW50IGluIGEgbm90ZSBlbnRyeSBtdXN0IGJlIGEgbXVsdGlwbGUKKwkJICogb2YgMiBjaGFycy4KKwkJICovCisJCWlmICghZS0+dmVyc2lvbnNbMV0ubW9kZSB8fAorCQkgICAgdG1wX2hleF9zaGExX2xlbiA+IDQwIHx8CisJCSAgICBlLT5uYW1lLT5zdHJfbGVuICUgMikKKwkJCWNvbnRpbnVlOworCisJCS8qIFRoaXMgX21heV8gYmUgYSBub3RlIGVudHJ5LCBvciBhIHN1YmRpciBjb250YWluaW5nIG5vdGVzICovCisJCW1lbWNweShoZXhfc2hhMSArIGhleF9zaGExX2xlbiwgZS0+bmFtZS0+c3RyX2RhdCwKKwkJICAgICAgIGUtPm5hbWUtPnN0cl9sZW4pOworCQlpZiAodG1wX2Z1bGxwYXRoX2xlbikKKwkJCWZ1bGxwYXRoW3RtcF9mdWxscGF0aF9sZW4rK10gPSAnLyc7CisJCW1lbWNweShmdWxscGF0aCArIHRtcF9mdWxscGF0aF9sZW4sIGUtPm5hbWUtPnN0cl9kYXQsCisJCSAgICAgICBlLT5uYW1lLT5zdHJfbGVuKTsKKwkJdG1wX2Z1bGxwYXRoX2xlbiArPSBlLT5uYW1lLT5zdHJfbGVuOworCQlmdWxscGF0aFt0bXBfZnVsbHBhdGhfbGVuXSA9ICdcMCc7CisKKwkJaWYgKHRtcF9oZXhfc2hhMV9sZW4gPT0gNDAgJiYgIWdldF9zaGExX2hleChoZXhfc2hhMSwgc2hhMSkpIHsKKwkJCS8qIFRoaXMgaXMgYSBub3RlIGVudHJ5ICovCisJCQlpZiAoZmFub3V0ID09IDB4ZmYpIHsKKwkJCQkvKiBDb3VudGluZyBtb2RlLCBubyByZW5hbWUgKi8KKwkJCQludW1fbm90ZXMrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNvbnN0cnVjdF9wYXRoX3dpdGhfZmFub3V0KGhleF9zaGExLCBmYW5vdXQsIHJlYWxwYXRoKTsKKwkJCWlmICghc3RyY21wKGZ1bGxwYXRoLCByZWFscGF0aCkpIHsKKwkJCQkvKiBOb3RlIGVudHJ5IGlzIGluIGNvcnJlY3QgbG9jYXRpb24gKi8KKwkJCQludW1fbm90ZXMrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJLyogUmVuYW1lIGZ1bGxwYXRoIHRvIHJlYWxwYXRoICovCisJCQlpZiAoIXRyZWVfY29udGVudF9yZW1vdmUob3JpZ19yb290LCBmdWxscGF0aCwgJmxlYWYsIDApKQorCQkJCWRpZSgiRmFpbGVkIHRvIHJlbW92ZSBwYXRoICVzIiwgZnVsbHBhdGgpOworCQkJdHJlZV9jb250ZW50X3NldChvcmlnX3Jvb3QsIHJlYWxwYXRoLAorCQkJCWxlYWYudmVyc2lvbnNbMV0uc2hhMSwKKwkJCQlsZWFmLnZlcnNpb25zWzFdLm1vZGUsCisJCQkJbGVhZi50cmVlKTsKKwkJfSBlbHNlIGlmIChTX0lTRElSKGUtPnZlcnNpb25zWzFdLm1vZGUpKSB7CisJCQkvKiBUaGlzIGlzIGEgc3ViZGlyIHRoYXQgbWF5IGNvbnRhaW4gbm90ZSBlbnRyaWVzICovCisJCQlpZiAoIWUtPnRyZWUpCisJCQkJbG9hZF90cmVlKGUpOworCQkJbnVtX25vdGVzICs9IGRvX2NoYW5nZV9ub3RlX2Zhbm91dChvcmlnX3Jvb3QsIGUsCisJCQkJaGV4X3NoYTEsIHRtcF9oZXhfc2hhMV9sZW4sCisJCQkJZnVsbHBhdGgsIHRtcF9mdWxscGF0aF9sZW4sIGZhbm91dCk7CisJCX0KKworCQkvKiBUaGUgYWJvdmUgbWF5IGhhdmUgcmVhbGxvY2F0ZWQgdGhlIGN1cnJlbnQgdHJlZV9jb250ZW50ICovCisJCXQgPSByb290LT50cmVlOworCX0KKwlyZXR1cm4gbnVtX25vdGVzOworfQorCitzdGF0aWMgdWludG1heF90IGNoYW5nZV9ub3RlX2Zhbm91dChzdHJ1Y3QgdHJlZV9lbnRyeSAqcm9vdCwKKwkJdW5zaWduZWQgY2hhciBmYW5vdXQpCit7CisJY2hhciBoZXhfc2hhMVs0MF0sIHBhdGhbNjBdOworCXJldHVybiBkb19jaGFuZ2Vfbm90ZV9mYW5vdXQocm9vdCwgcm9vdCwgaGV4X3NoYTEsIDAsIHBhdGgsIDAsIGZhbm91dCk7Cit9CisKKy8qCisgKiBHaXZlbiBhIHBvaW50ZXIgaW50byBhIHN0cmluZywgcGFyc2UgYSBtYXJrIHJlZmVyZW5jZToKKyAqCisgKiAgIGlkbnVtIDo6PSAnOicgYmlnaW50OworICoKKyAqIFJldHVybiB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSB2YWx1ZSBpbiAqZW5kcHRyLgorICoKKyAqIENvbXBsYWluIGlmIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIG5vdCB3aGF0IGlzIGV4cGVjdGVkLAorICogZWl0aGVyIGEgc3BhY2Ugb3IgZW5kIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB1aW50bWF4X3QgcGFyc2VfbWFya19yZWYoY29uc3QgY2hhciAqcCwgY2hhciAqKmVuZHB0cikKK3sKKwl1aW50bWF4X3QgbWFyazsKKworCWFzc2VydCgqcCA9PSAnOicpOworCXArKzsKKwltYXJrID0gc3RydG91bWF4KHAsIGVuZHB0ciwgMTApOworCWlmICgqZW5kcHRyID09IHApCisJCWRpZSgiTm8gdmFsdWUgYWZ0ZXIgJzonIGluIG1hcms6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwlyZXR1cm4gbWFyazsKK30KKworLyoKKyAqIFBhcnNlIHRoZSBtYXJrIHJlZmVyZW5jZSwgYW5kIGNvbXBsYWluIGlmIHRoaXMgaXMgbm90IHRoZSBlbmQgb2YKKyAqIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRpYyB1aW50bWF4X3QgcGFyc2VfbWFya19yZWZfZW9sKGNvbnN0IGNoYXIgKnApCit7CisJY2hhciAqZW5kOworCXVpbnRtYXhfdCBtYXJrOworCisJbWFyayA9IHBhcnNlX21hcmtfcmVmKHAsICZlbmQpOworCWlmICgqZW5kICE9ICdcMCcpCisJCWRpZSgiR2FyYmFnZSBhZnRlciBtYXJrOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJcmV0dXJuIG1hcms7Cit9CisKKy8qCisgKiBQYXJzZSB0aGUgbWFyayByZWZlcmVuY2UsIGRlbWFuZGluZyBhIHRyYWlsaW5nIHNwYWNlLiAgUmV0dXJuIGEKKyAqIHBvaW50ZXIgdG8gdGhlIHNwYWNlLgorICovCitzdGF0aWMgdWludG1heF90IHBhcnNlX21hcmtfcmVmX3NwYWNlKGNvbnN0IGNoYXIgKipwKQoreworCXVpbnRtYXhfdCBtYXJrOworCWNoYXIgKmVuZDsKKworCW1hcmsgPSBwYXJzZV9tYXJrX3JlZigqcCwgJmVuZCk7CisJaWYgKCplbmQrKyAhPSAnICcpCisJCWRpZSgiTWlzc2luZyBzcGFjZSBhZnRlciBtYXJrOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJKnAgPSBlbmQ7CisJcmV0dXJuIG1hcms7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGVfY2hhbmdlX20oY29uc3QgY2hhciAqcCwgc3RydWN0IGJyYW5jaCAqYikKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmVuZHA7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2U7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1aW50MTZfdCBtb2RlLCBpbmxpbmVfZGF0YSA9IDA7CisKKwlwID0gZ2V0X21vZGUocCwgJm1vZGUpOworCWlmICghcCkKKwkJZGllKCJDb3JydXB0IG1vZGU6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDA2NDQ6CisJY2FzZSAwNzU1OgorCQltb2RlIHw9IFNfSUZSRUc7CisJY2FzZSBTX0lGUkVHIHwgMDY0NDoKKwljYXNlIFNfSUZSRUcgfCAwNzU1OgorCWNhc2UgU19JRkxOSzoKKwljYXNlIFNfSUZESVI6CisJY2FzZSBTX0lGR0lUTElOSzoKKwkJLyogb2sgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJDb3JydXB0IG1vZGU6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwl9CisKKwlpZiAoKnAgPT0gJzonKSB7CisJCW9lID0gZmluZF9tYXJrKHBhcnNlX21hcmtfcmVmX3NwYWNlKCZwKSk7CisJCWhhc2hjcHkoc2hhMSwgb2UtPmlkeC5zaGExKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KHAsICJpbmxpbmUgIiwgJnApKSB7CisJCWlubGluZV9kYXRhID0gMTsKKwkJb2UgPSBOVUxMOyAvKiBub3QgdXNlZCB3aXRoIGlubGluZV9kYXRhLCBidXQgbWFrZXMgZ2NjIGhhcHB5ICovCisJfSBlbHNlIHsKKwkJaWYgKGdldF9zaGExX2hleChwLCBzaGExKSkKKwkJCWRpZSgiSW52YWxpZCBkYXRhcmVmOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCW9lID0gZmluZF9vYmplY3Qoc2hhMSk7CisJCXAgKz0gNDA7CisJCWlmICgqcCsrICE9ICcgJykKKwkJCWRpZSgiTWlzc2luZyBzcGFjZSBhZnRlciBTSEExOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJfQorCisJc3RyYnVmX3Jlc2V0KCZ1cSk7CisJaWYgKCF1bnF1b3RlX2Nfc3R5bGUoJnVxLCBwLCAmZW5kcCkpIHsKKwkJaWYgKCplbmRwKQorCQkJZGllKCJHYXJiYWdlIGFmdGVyIHBhdGggaW46ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJcCA9IHVxLmJ1ZjsKKwl9CisKKwkvKiBHaXQgZG9lcyBub3QgdHJhY2sgZW1wdHksIG5vbi10b3BsZXZlbCBkaXJlY3Rvcmllcy4gKi8KKwlpZiAoU19JU0RJUihtb2RlKSAmJiAhaGFzaGNtcChzaGExLCBFTVBUWV9UUkVFX1NIQTFfQklOKSAmJiAqcCkgeworCQl0cmVlX2NvbnRlbnRfcmVtb3ZlKCZiLT5icmFuY2hfdHJlZSwgcCwgTlVMTCwgMCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoU19JU0dJVExJTksobW9kZSkpIHsKKwkJaWYgKGlubGluZV9kYXRhKQorCQkJZGllKCJHaXQgbGlua3MgY2Fubm90IGJlIHNwZWNpZmllZCAnaW5saW5lJzogJXMiLAorCQkJCWNvbW1hbmRfYnVmLmJ1Zik7CisJCWVsc2UgaWYgKG9lKSB7CisJCQlpZiAob2UtPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCQlkaWUoIk5vdCBhIGNvbW1pdCAoYWN0dWFsbHkgYSAlcyk6ICVzIiwKKwkJCQkJdHlwZW5hbWUob2UtPnR5cGUpLCBjb21tYW5kX2J1Zi5idWYpOworCQl9CisJCS8qCisJCSAqIEFjY2VwdCB0aGUgc2hhMSB3aXRob3V0IGNoZWNraW5nOyBpdCBleHBlY3RlZCB0byBiZSBpbgorCQkgKiBhbm90aGVyIHJlcG9zaXRvcnkuCisJCSAqLworCX0gZWxzZSBpZiAoaW5saW5lX2RhdGEpIHsKKwkJaWYgKFNfSVNESVIobW9kZSkpCisJCQlkaWUoIkRpcmVjdG9yaWVzIGNhbm5vdCBiZSBzcGVjaWZpZWQgJ2lubGluZSc6ICVzIiwKKwkJCQljb21tYW5kX2J1Zi5idWYpOworCQlpZiAocCAhPSB1cS5idWYpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnVxLCBwKTsKKwkJCXAgPSB1cS5idWY7CisJCX0KKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwkJcGFyc2VfYW5kX3N0b3JlX2Jsb2IoJmxhc3RfYmxvYiwgc2hhMSwgMCk7CisJfSBlbHNlIHsKKwkJZW51bSBvYmplY3RfdHlwZSBleHBlY3RlZCA9IFNfSVNESVIobW9kZSkgPworCQkJCQkJT0JKX1RSRUU6IE9CSl9CTE9COworCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBvZSA/IG9lLT50eXBlIDoKKwkJCQkJc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwkJaWYgKHR5cGUgPCAwKQorCQkJZGllKCIlcyBub3QgZm91bmQ6ICVzIiwKKwkJCQkJU19JU0RJUihtb2RlKSA/ICAiVHJlZSIgOiAiQmxvYiIsCisJCQkJCWNvbW1hbmRfYnVmLmJ1Zik7CisJCWlmICh0eXBlICE9IGV4cGVjdGVkKQorCQkJZGllKCJOb3QgYSAlcyAoYWN0dWFsbHkgYSAlcyk6ICVzIiwKKwkJCQl0eXBlbmFtZShleHBlY3RlZCksIHR5cGVuYW1lKHR5cGUpLAorCQkJCWNvbW1hbmRfYnVmLmJ1Zik7CisJfQorCisJaWYgKCEqcCkgeworCQl0cmVlX2NvbnRlbnRfcmVwbGFjZSgmYi0+YnJhbmNoX3RyZWUsIHNoYTEsIG1vZGUsIE5VTEwpOworCQlyZXR1cm47CisJfQorCXRyZWVfY29udGVudF9zZXQoJmItPmJyYW5jaF90cmVlLCBwLCBzaGExLCBtb2RlLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZmlsZV9jaGFuZ2VfZChjb25zdCBjaGFyICpwLCBzdHJ1Y3QgYnJhbmNoICpiKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHVxID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZW5kcDsKKworCXN0cmJ1Zl9yZXNldCgmdXEpOworCWlmICghdW5xdW90ZV9jX3N0eWxlKCZ1cSwgcCwgJmVuZHApKSB7CisJCWlmICgqZW5kcCkKKwkJCWRpZSgiR2FyYmFnZSBhZnRlciBwYXRoIGluOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCXAgPSB1cS5idWY7CisJfQorCXRyZWVfY29udGVudF9yZW1vdmUoJmItPmJyYW5jaF90cmVlLCBwLCBOVUxMLCAxKTsKK30KKworc3RhdGljIHZvaWQgZmlsZV9jaGFuZ2VfY3IoY29uc3QgY2hhciAqcywgc3RydWN0IGJyYW5jaCAqYiwgaW50IHJlbmFtZSkKK3sKKwljb25zdCBjaGFyICpkOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHNfdXEgPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBkX3VxID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZW5kcDsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSBsZWFmOworCisJc3RyYnVmX3Jlc2V0KCZzX3VxKTsKKwlpZiAoIXVucXVvdGVfY19zdHlsZSgmc191cSwgcywgJmVuZHApKSB7CisJCWlmICgqZW5kcCAhPSAnICcpCisJCQlkaWUoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgc291cmNlOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJfSBlbHNlIHsKKwkJZW5kcCA9IHN0cmNocihzLCAnICcpOworCQlpZiAoIWVuZHApCisJCQlkaWUoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgc291cmNlOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCXN0cmJ1Zl9hZGQoJnNfdXEsIHMsIGVuZHAgLSBzKTsKKwl9CisJcyA9IHNfdXEuYnVmOworCisJZW5kcCsrOworCWlmICghKmVuZHApCisJCWRpZSgiTWlzc2luZyBkZXN0OiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisKKwlkID0gZW5kcDsKKwlzdHJidWZfcmVzZXQoJmRfdXEpOworCWlmICghdW5xdW90ZV9jX3N0eWxlKCZkX3VxLCBkLCAmZW5kcCkpIHsKKwkJaWYgKCplbmRwKQorCQkJZGllKCJHYXJiYWdlIGFmdGVyIGRlc3QgaW46ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJZCA9IGRfdXEuYnVmOworCX0KKworCW1lbXNldCgmbGVhZiwgMCwgc2l6ZW9mKGxlYWYpKTsKKwlpZiAocmVuYW1lKQorCQl0cmVlX2NvbnRlbnRfcmVtb3ZlKCZiLT5icmFuY2hfdHJlZSwgcywgJmxlYWYsIDEpOworCWVsc2UKKwkJdHJlZV9jb250ZW50X2dldCgmYi0+YnJhbmNoX3RyZWUsIHMsICZsZWFmLCAxKTsKKwlpZiAoIWxlYWYudmVyc2lvbnNbMV0ubW9kZSkKKwkJZGllKCJQYXRoICVzIG5vdCBpbiBicmFuY2giLCBzKTsKKwlpZiAoISpkKSB7CS8qIEMgInBhdGgvdG8vc3ViZGlyIiAiIiAqLworCQl0cmVlX2NvbnRlbnRfcmVwbGFjZSgmYi0+YnJhbmNoX3RyZWUsCisJCQlsZWFmLnZlcnNpb25zWzFdLnNoYTEsCisJCQlsZWFmLnZlcnNpb25zWzFdLm1vZGUsCisJCQlsZWFmLnRyZWUpOworCQlyZXR1cm47CisJfQorCXRyZWVfY29udGVudF9zZXQoJmItPmJyYW5jaF90cmVlLCBkLAorCQlsZWFmLnZlcnNpb25zWzFdLnNoYTEsCisJCWxlYWYudmVyc2lvbnNbMV0ubW9kZSwKKwkJbGVhZi50cmVlKTsKK30KKworc3RhdGljIHZvaWQgbm90ZV9jaGFuZ2Vfbihjb25zdCBjaGFyICpwLCBzdHJ1Y3QgYnJhbmNoICpiLCB1bnNpZ25lZCBjaGFyICpvbGRfZmFub3V0KQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHVxID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqb2U7CisJc3RydWN0IGJyYW5jaCAqczsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCBjb21taXRfc2hhMVsyMF07CisJY2hhciBwYXRoWzYwXTsKKwl1aW50MTZfdCBpbmxpbmVfZGF0YSA9IDA7CisJdW5zaWduZWQgY2hhciBuZXdfZmFub3V0OworCisJLyoKKwkgKiBXaGVuIGxvYWRpbmcgYSBicmFuY2gsIHdlIGRvbid0IHRyYXZlcnNlIGl0cyB0cmVlIHRvIGNvdW50IHRoZSByZWFsCisJICogbnVtYmVyIG9mIG5vdGVzICh0b28gZXhwZW5zaXZlIHRvIGRvIHRoaXMgZm9yIGFsbCBub24tbm90ZSByZWZzKS4KKwkgKiBUaGlzIG1lYW5zIHRoYXQgcmVjZW50bHkgbG9hZGVkIG5vdGVzIHJlZnMgbWlnaHQgaW5jb3JyZWN0bHkgaGF2ZQorCSAqIGItPm51bV9ub3RlcyA9PSAwLCBhbmQgY29uc2VxdWVudGx5LCBvbGRfZmFub3V0IG1pZ2h0IGJlIHdyb25nLgorCSAqCisJICogRml4IHRoaXMgYnkgdHJhdmVyc2luZyB0aGUgdHJlZSBhbmQgY291bnRpbmcgdGhlIG51bWJlciBvZiBub3RlcworCSAqIHdoZW4gYi0+bnVtX25vdGVzID09IDAuIElmIHRoZSBub3RlcyB0cmVlIGlzIHRydWx5IGVtcHR5LCB0aGUKKwkgKiBjYWxjdWxhdGlvbiBzaG91bGQgbm90IHRha2UgbG9uZy4KKwkgKi8KKwlpZiAoYi0+bnVtX25vdGVzID09IDAgJiYgKm9sZF9mYW5vdXQgPT0gMCkgeworCQkvKiBJbnZva2UgY2hhbmdlX25vdGVfZmFub3V0KCkgaW4gImNvdW50aW5nIG1vZGUiLiAqLworCQliLT5udW1fbm90ZXMgPSBjaGFuZ2Vfbm90ZV9mYW5vdXQoJmItPmJyYW5jaF90cmVlLCAweGZmKTsKKwkJKm9sZF9mYW5vdXQgPSBjb252ZXJ0X251bV9ub3Rlc190b19mYW5vdXQoYi0+bnVtX25vdGVzKTsKKwl9CisKKwkvKiBOb3cgcGFyc2UgdGhlIG5vdGVtb2RpZnkgY29tbWFuZC4gKi8KKwkvKiA8ZGF0YXJlZj4gb3IgJ2lubGluZScgKi8KKwlpZiAoKnAgPT0gJzonKSB7CisJCW9lID0gZmluZF9tYXJrKHBhcnNlX21hcmtfcmVmX3NwYWNlKCZwKSk7CisJCWhhc2hjcHkoc2hhMSwgb2UtPmlkeC5zaGExKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KHAsICJpbmxpbmUgIiwgJnApKSB7CisJCWlubGluZV9kYXRhID0gMTsKKwkJb2UgPSBOVUxMOyAvKiBub3QgdXNlZCB3aXRoIGlubGluZV9kYXRhLCBidXQgbWFrZXMgZ2NjIGhhcHB5ICovCisJfSBlbHNlIHsKKwkJaWYgKGdldF9zaGExX2hleChwLCBzaGExKSkKKwkJCWRpZSgiSW52YWxpZCBkYXRhcmVmOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCW9lID0gZmluZF9vYmplY3Qoc2hhMSk7CisJCXAgKz0gNDA7CisJCWlmICgqcCsrICE9ICcgJykKKwkJCWRpZSgiTWlzc2luZyBzcGFjZSBhZnRlciBTSEExOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJfQorCisJLyogPGNvbW1pdC1pc2g+ICovCisJcyA9IGxvb2t1cF9icmFuY2gocCk7CisJaWYgKHMpIHsKKwkJaWYgKGlzX251bGxfc2hhMShzLT5zaGExKSkKKwkJCWRpZSgiQ2FuJ3QgYWRkIGEgbm90ZSBvbiBlbXB0eSBicmFuY2guIik7CisJCWhhc2hjcHkoY29tbWl0X3NoYTEsIHMtPnNoYTEpOworCX0gZWxzZSBpZiAoKnAgPT0gJzonKSB7CisJCXVpbnRtYXhfdCBjb21taXRfbWFyayA9IHBhcnNlX21hcmtfcmVmX2VvbChwKTsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqY29tbWl0X29lID0gZmluZF9tYXJrKGNvbW1pdF9tYXJrKTsKKwkJaWYgKGNvbW1pdF9vZS0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJZGllKCJNYXJrIDolIiBQUkl1TUFYICIgbm90IGEgY29tbWl0IiwgY29tbWl0X21hcmspOworCQloYXNoY3B5KGNvbW1pdF9zaGExLCBjb21taXRfb2UtPmlkeC5zaGExKTsKKwl9IGVsc2UgaWYgKCFnZXRfc2hhMShwLCBjb21taXRfc2hhMSkpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQljaGFyICpidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShjb21taXRfc2hhMSwKKwkJCWNvbW1pdF90eXBlLCAmc2l6ZSwgY29tbWl0X3NoYTEpOworCQlpZiAoIWJ1ZiB8fCBzaXplIDwgNDYpCisJCQlkaWUoIk5vdCBhIHZhbGlkIGNvbW1pdDogJXMiLCBwKTsKKwkJZnJlZShidWYpOworCX0gZWxzZQorCQlkaWUoIkludmFsaWQgcmVmIG5hbWUgb3IgU0hBMSBleHByZXNzaW9uOiAlcyIsIHApOworCisJaWYgKGlubGluZV9kYXRhKSB7CisJCWlmIChwICE9IHVxLmJ1ZikgeworCQkJc3RyYnVmX2FkZHN0cigmdXEsIHApOworCQkJcCA9IHVxLmJ1ZjsKKwkJfQorCQlyZWFkX25leHRfY29tbWFuZCgpOworCQlwYXJzZV9hbmRfc3RvcmVfYmxvYigmbGFzdF9ibG9iLCBzaGExLCAwKTsKKwl9IGVsc2UgaWYgKG9lKSB7CisJCWlmIChvZS0+dHlwZSAhPSBPQkpfQkxPQikKKwkJCWRpZSgiTm90IGEgYmxvYiAoYWN0dWFsbHkgYSAlcyk6ICVzIiwKKwkJCQl0eXBlbmFtZShvZS0+dHlwZSksIGNvbW1hbmRfYnVmLmJ1Zik7CisJfSBlbHNlIGlmICghaXNfbnVsbF9zaGExKHNoYTEpKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJCWlmICh0eXBlIDwgMCkKKwkJCWRpZSgiQmxvYiBub3QgZm91bmQ6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJaWYgKHR5cGUgIT0gT0JKX0JMT0IpCisJCQlkaWUoIk5vdCBhIGJsb2IgKGFjdHVhbGx5IGEgJXMpOiAlcyIsCisJCQkgICAgdHlwZW5hbWUodHlwZSksIGNvbW1hbmRfYnVmLmJ1Zik7CisJfQorCisJY29uc3RydWN0X3BhdGhfd2l0aF9mYW5vdXQoc2hhMV90b19oZXgoY29tbWl0X3NoYTEpLCAqb2xkX2Zhbm91dCwgcGF0aCk7CisJaWYgKHRyZWVfY29udGVudF9yZW1vdmUoJmItPmJyYW5jaF90cmVlLCBwYXRoLCBOVUxMLCAwKSkKKwkJYi0+bnVtX25vdGVzLS07CisKKwlpZiAoaXNfbnVsbF9zaGExKHNoYTEpKQorCQlyZXR1cm47IC8qIG5vdGhpbmcgdG8gaW5zZXJ0ICovCisKKwliLT5udW1fbm90ZXMrKzsKKwluZXdfZmFub3V0ID0gY29udmVydF9udW1fbm90ZXNfdG9fZmFub3V0KGItPm51bV9ub3Rlcyk7CisJY29uc3RydWN0X3BhdGhfd2l0aF9mYW5vdXQoc2hhMV90b19oZXgoY29tbWl0X3NoYTEpLCBuZXdfZmFub3V0LCBwYXRoKTsKKwl0cmVlX2NvbnRlbnRfc2V0KCZiLT5icmFuY2hfdHJlZSwgcGF0aCwgc2hhMSwgU19JRlJFRyB8IDA2NDQsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZCBmaWxlX2NoYW5nZV9kZWxldGVhbGwoc3RydWN0IGJyYW5jaCAqYikKK3sKKwlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUoYi0+YnJhbmNoX3RyZWUudHJlZSk7CisJaGFzaGNscihiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1swXS5zaGExKTsKKwloYXNoY2xyKGItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLnNoYTEpOworCWxvYWRfdHJlZSgmYi0+YnJhbmNoX3RyZWUpOworCWItPm51bV9ub3RlcyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2Zyb21fY29tbWl0KHN0cnVjdCBicmFuY2ggKmIsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWlmICghYnVmIHx8IHNpemUgPCA0NikKKwkJZGllKCJOb3QgYSB2YWxpZCBjb21taXQ6ICVzIiwgc2hhMV90b19oZXgoYi0+c2hhMSkpOworCWlmIChtZW1jbXAoInRyZWUgIiwgYnVmLCA1KQorCQl8fCBnZXRfc2hhMV9oZXgoYnVmICsgNSwgYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0uc2hhMSkpCisJCWRpZSgiVGhlIGNvbW1pdCAlcyBpcyBjb3JydXB0Iiwgc2hhMV90b19oZXgoYi0+c2hhMSkpOworCWhhc2hjcHkoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0uc2hhMSwKKwkJYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0uc2hhMSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2Zyb21fZXhpc3Rpbmcoc3RydWN0IGJyYW5jaCAqYikKK3sKKwlpZiAoaXNfbnVsbF9zaGExKGItPnNoYTEpKSB7CisJCWhhc2hjbHIoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMF0uc2hhMSk7CisJCWhhc2hjbHIoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0uc2hhMSk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQljaGFyICpidWY7CisKKwkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UoYi0+c2hhMSwKKwkJCWNvbW1pdF90eXBlLCAmc2l6ZSwgYi0+c2hhMSk7CisJCXBhcnNlX2Zyb21fY29tbWl0KGIsIGJ1Ziwgc2l6ZSk7CisJCWZyZWUoYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZnJvbShzdHJ1Y3QgYnJhbmNoICpiKQoreworCWNvbnN0IGNoYXIgKmZyb207CisJc3RydWN0IGJyYW5jaCAqczsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJaWYgKCFza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJmcm9tICIsICZmcm9tKSkKKwkJcmV0dXJuIDA7CisKKwloYXNoY3B5KHNoYTEsIGItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLnNoYTEpOworCisJcyA9IGxvb2t1cF9icmFuY2goZnJvbSk7CisJaWYgKGIgPT0gcykKKwkJZGllKCJDYW4ndCBjcmVhdGUgYSBicmFuY2ggZnJvbSBpdHNlbGY6ICVzIiwgYi0+bmFtZSk7CisJZWxzZSBpZiAocykgeworCQl1bnNpZ25lZCBjaGFyICp0ID0gcy0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0uc2hhMTsKKwkJaGFzaGNweShiLT5zaGExLCBzLT5zaGExKTsKKwkJaGFzaGNweShiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1swXS5zaGExLCB0KTsKKwkJaGFzaGNweShiLT5icmFuY2hfdHJlZS52ZXJzaW9uc1sxXS5zaGExLCB0KTsKKwl9IGVsc2UgaWYgKCpmcm9tID09ICc6JykgeworCQl1aW50bWF4X3QgaWRudW0gPSBwYXJzZV9tYXJrX3JlZl9lb2woZnJvbSk7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKm9lID0gZmluZF9tYXJrKGlkbnVtKTsKKwkJaWYgKG9lLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQlkaWUoIk1hcmsgOiUiIFBSSXVNQVggIiBub3QgYSBjb21taXQiLCBpZG51bSk7CisJCWlmIChoYXNoY21wKGItPnNoYTEsIG9lLT5pZHguc2hhMSkpIHsKKwkJCWhhc2hjcHkoYi0+c2hhMSwgb2UtPmlkeC5zaGExKTsKKwkJCWlmIChvZS0+cGFja19pZCAhPSBNQVhfUEFDS19JRCkgeworCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkJCQljaGFyICpidWYgPSBnZmlfdW5wYWNrX2VudHJ5KG9lLCAmc2l6ZSk7CisJCQkJcGFyc2VfZnJvbV9jb21taXQoYiwgYnVmLCBzaXplKTsKKwkJCQlmcmVlKGJ1Zik7CisJCQl9IGVsc2UKKwkJCQlwYXJzZV9mcm9tX2V4aXN0aW5nKGIpOworCQl9CisJfSBlbHNlIGlmICghZ2V0X3NoYTEoZnJvbSwgYi0+c2hhMSkpIHsKKwkJcGFyc2VfZnJvbV9leGlzdGluZyhiKTsKKwkJaWYgKGlzX251bGxfc2hhMShiLT5zaGExKSkKKwkJCWItPmRlbGV0ZSA9IDE7CisJfQorCWVsc2UKKwkJZGllKCJJbnZhbGlkIHJlZiBuYW1lIG9yIFNIQTEgZXhwcmVzc2lvbjogJXMiLCBmcm9tKTsKKworCWlmIChiLT5icmFuY2hfdHJlZS50cmVlICYmIGhhc2hjbXAoc2hhMSwgYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0uc2hhMSkpIHsKKwkJcmVsZWFzZV90cmVlX2NvbnRlbnRfcmVjdXJzaXZlKGItPmJyYW5jaF90cmVlLnRyZWUpOworCQliLT5icmFuY2hfdHJlZS50cmVlID0gTlVMTDsKKwl9CisKKwlyZWFkX25leHRfY29tbWFuZCgpOworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IGhhc2hfbGlzdCAqcGFyc2VfbWVyZ2UodW5zaWduZWQgaW50ICpjb3VudCkKK3sKKwlzdHJ1Y3QgaGFzaF9saXN0ICpsaXN0ID0gTlVMTCwgKip0YWlsID0gJmxpc3QsICpuOworCWNvbnN0IGNoYXIgKmZyb207CisJc3RydWN0IGJyYW5jaCAqczsKKworCSpjb3VudCA9IDA7CisJd2hpbGUgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgIm1lcmdlICIsICZmcm9tKSkgeworCQluID0geG1hbGxvYyhzaXplb2YoKm4pKTsKKwkJcyA9IGxvb2t1cF9icmFuY2goZnJvbSk7CisJCWlmIChzKQorCQkJaGFzaGNweShuLT5zaGExLCBzLT5zaGExKTsKKwkJZWxzZSBpZiAoKmZyb20gPT0gJzonKSB7CisJCQl1aW50bWF4X3QgaWRudW0gPSBwYXJzZV9tYXJrX3JlZl9lb2woZnJvbSk7CisJCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSA9IGZpbmRfbWFyayhpZG51bSk7CisJCQlpZiAob2UtPnR5cGUgIT0gT0JKX0NPTU1JVCkKKwkJCQlkaWUoIk1hcmsgOiUiIFBSSXVNQVggIiBub3QgYSBjb21taXQiLCBpZG51bSk7CisJCQloYXNoY3B5KG4tPnNoYTEsIG9lLT5pZHguc2hhMSk7CisJCX0gZWxzZSBpZiAoIWdldF9zaGExKGZyb20sIG4tPnNoYTEpKSB7CisJCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCQljaGFyICpidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShuLT5zaGExLAorCQkJCWNvbW1pdF90eXBlLCAmc2l6ZSwgbi0+c2hhMSk7CisJCQlpZiAoIWJ1ZiB8fCBzaXplIDwgNDYpCisJCQkJZGllKCJOb3QgYSB2YWxpZCBjb21taXQ6ICVzIiwgZnJvbSk7CisJCQlmcmVlKGJ1Zik7CisJCX0gZWxzZQorCQkJZGllKCJJbnZhbGlkIHJlZiBuYW1lIG9yIFNIQTEgZXhwcmVzc2lvbjogJXMiLCBmcm9tKTsKKworCQluLT5uZXh0ID0gTlVMTDsKKwkJKnRhaWwgPSBuOworCQl0YWlsID0gJm4tPm5leHQ7CisKKwkJKCpjb3VudCkrKzsKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwl9CisJcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX25ld19jb21taXQoY29uc3QgY2hhciAqYXJnKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBicmFuY2ggKmI7CisJY2hhciAqYXV0aG9yID0gTlVMTDsKKwljaGFyICpjb21taXR0ZXIgPSBOVUxMOworCXN0cnVjdCBoYXNoX2xpc3QgKm1lcmdlX2xpc3QgPSBOVUxMOworCXVuc2lnbmVkIGludCBtZXJnZV9jb3VudDsKKwl1bnNpZ25lZCBjaGFyIHByZXZfZmFub3V0LCBuZXdfZmFub3V0OworCWNvbnN0IGNoYXIgKnY7CisKKwliID0gbG9va3VwX2JyYW5jaChhcmcpOworCWlmICghYikKKwkJYiA9IG5ld19icmFuY2goYXJnKTsKKworCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJcGFyc2VfbWFyaygpOworCWlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJhdXRob3IgIiwgJnYpKSB7CisJCWF1dGhvciA9IHBhcnNlX2lkZW50KHYpOworCQlyZWFkX25leHRfY29tbWFuZCgpOworCX0KKwlpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiY29tbWl0dGVyICIsICZ2KSkgeworCQljb21taXR0ZXIgPSBwYXJzZV9pZGVudCh2KTsKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwl9CisJaWYgKCFjb21taXR0ZXIpCisJCWRpZSgiRXhwZWN0ZWQgY29tbWl0dGVyIGJ1dCBkaWRuJ3QgZ2V0IG9uZSIpOworCXBhcnNlX2RhdGEoJm1zZywgMCwgTlVMTCk7CisJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwlwYXJzZV9mcm9tKGIpOworCW1lcmdlX2xpc3QgPSBwYXJzZV9tZXJnZSgmbWVyZ2VfY291bnQpOworCisJLyogZW5zdXJlIHRoZSBicmFuY2ggaXMgYWN0aXZlL2xvYWRlZCAqLworCWlmICghYi0+YnJhbmNoX3RyZWUudHJlZSB8fCAhbWF4X2FjdGl2ZV9icmFuY2hlcykgeworCQl1bmxvYWRfb25lX2JyYW5jaCgpOworCQlsb2FkX2JyYW5jaChiKTsKKwl9CisKKwlwcmV2X2Zhbm91dCA9IGNvbnZlcnRfbnVtX25vdGVzX3RvX2Zhbm91dChiLT5udW1fbm90ZXMpOworCisJLyogZmlsZV9jaGFuZ2UqICovCisJd2hpbGUgKGNvbW1hbmRfYnVmLmxlbiA+IDApIHsKKwkJaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgIk0gIiwgJnYpKQorCQkJZmlsZV9jaGFuZ2VfbSh2LCBiKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiRCAiLCAmdikpCisJCQlmaWxlX2NoYW5nZV9kKHYsIGIpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJSICIsICZ2KSkKKwkJCWZpbGVfY2hhbmdlX2NyKHYsIGIsIDEpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJDICIsICZ2KSkKKwkJCWZpbGVfY2hhbmdlX2NyKHYsIGIsIDApOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJOICIsICZ2KSkKKwkJCW5vdGVfY2hhbmdlX24odiwgYiwgJnByZXZfZmFub3V0KTsKKwkJZWxzZSBpZiAoIXN0cmNtcCgiZGVsZXRlYWxsIiwgY29tbWFuZF9idWYuYnVmKSkKKwkJCWZpbGVfY2hhbmdlX2RlbGV0ZWFsbChiKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAibHMgIiwgJnYpKQorCQkJcGFyc2VfbHModiwgYik7CisJCWVsc2UgeworCQkJdW5yZWFkX2NvbW1hbmRfYnVmID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZWFkX25leHRfY29tbWFuZCgpID09IEVPRikKKwkJCWJyZWFrOworCX0KKworCW5ld19mYW5vdXQgPSBjb252ZXJ0X251bV9ub3Rlc190b19mYW5vdXQoYi0+bnVtX25vdGVzKTsKKwlpZiAobmV3X2Zhbm91dCAhPSBwcmV2X2Zhbm91dCkKKwkJYi0+bnVtX25vdGVzID0gY2hhbmdlX25vdGVfZmFub3V0KCZiLT5icmFuY2hfdHJlZSwgbmV3X2Zhbm91dCk7CisKKwkvKiBidWlsZCB0aGUgdHJlZSBhbmQgdGhlIGNvbW1pdCAqLworCXN0b3JlX3RyZWUoJmItPmJyYW5jaF90cmVlKTsKKwloYXNoY3B5KGItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLnNoYTEsCisJCWItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLnNoYTEpOworCisJc3RyYnVmX3Jlc2V0KCZuZXdfZGF0YSk7CisJc3RyYnVmX2FkZGYoJm5ld19kYXRhLCAidHJlZSAlc1xuIiwKKwkJc2hhMV90b19oZXgoYi0+YnJhbmNoX3RyZWUudmVyc2lvbnNbMV0uc2hhMSkpOworCWlmICghaXNfbnVsbF9zaGExKGItPnNoYTEpKQorCQlzdHJidWZfYWRkZigmbmV3X2RhdGEsICJwYXJlbnQgJXNcbiIsIHNoYTFfdG9faGV4KGItPnNoYTEpKTsKKwl3aGlsZSAobWVyZ2VfbGlzdCkgeworCQlzdHJ1Y3QgaGFzaF9saXN0ICpuZXh0ID0gbWVyZ2VfbGlzdC0+bmV4dDsKKwkJc3RyYnVmX2FkZGYoJm5ld19kYXRhLCAicGFyZW50ICVzXG4iLCBzaGExX3RvX2hleChtZXJnZV9saXN0LT5zaGExKSk7CisJCWZyZWUobWVyZ2VfbGlzdCk7CisJCW1lcmdlX2xpc3QgPSBuZXh0OworCX0KKwlzdHJidWZfYWRkZigmbmV3X2RhdGEsCisJCSJhdXRob3IgJXNcbiIKKwkJImNvbW1pdHRlciAlc1xuIgorCQkiXG4iLAorCQlhdXRob3IgPyBhdXRob3IgOiBjb21taXR0ZXIsIGNvbW1pdHRlcik7CisJc3RyYnVmX2FkZGJ1ZigmbmV3X2RhdGEsICZtc2cpOworCWZyZWUoYXV0aG9yKTsKKwlmcmVlKGNvbW1pdHRlcik7CisKKwlpZiAoIXN0b3JlX29iamVjdChPQkpfQ09NTUlULCAmbmV3X2RhdGEsIE5VTEwsIGItPnNoYTEsIG5leHRfbWFyaykpCisJCWItPnBhY2tfaWQgPSBwYWNrX2lkOworCWItPmxhc3RfY29tbWl0ID0gb2JqZWN0X2NvdW50X2J5X3R5cGVbT0JKX0NPTU1JVF07Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX25ld190YWcoY29uc3QgY2hhciAqYXJnKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmZyb207CisJY2hhciAqdGFnZ2VyOworCXN0cnVjdCBicmFuY2ggKnM7CisJc3RydWN0IHRhZyAqdDsKKwl1aW50bWF4X3QgZnJvbV9tYXJrID0gMDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljb25zdCBjaGFyICp2OworCisJdCA9IHBvb2xfYWxsb2Moc2l6ZW9mKHN0cnVjdCB0YWcpKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHN0cnVjdCB0YWcpKTsKKwl0LT5uYW1lID0gcG9vbF9zdHJkdXAoYXJnKTsKKwlpZiAobGFzdF90YWcpCisJCWxhc3RfdGFnLT5uZXh0X3RhZyA9IHQ7CisJZWxzZQorCQlmaXJzdF90YWcgPSB0OworCWxhc3RfdGFnID0gdDsKKwlyZWFkX25leHRfY29tbWFuZCgpOworCisJLyogZnJvbSAuLi4gKi8KKwlpZiAoIXNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImZyb20gIiwgJmZyb20pKQorCQlkaWUoIkV4cGVjdGVkIGZyb20gY29tbWFuZCwgZ290ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwlzID0gbG9va3VwX2JyYW5jaChmcm9tKTsKKwlpZiAocykgeworCQlpZiAoaXNfbnVsbF9zaGExKHMtPnNoYTEpKQorCQkJZGllKCJDYW4ndCB0YWcgYW4gZW1wdHkgYnJhbmNoLiIpOworCQloYXNoY3B5KHNoYTEsIHMtPnNoYTEpOworCQl0eXBlID0gT0JKX0NPTU1JVDsKKwl9IGVsc2UgaWYgKCpmcm9tID09ICc6JykgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZTsKKwkJZnJvbV9tYXJrID0gcGFyc2VfbWFya19yZWZfZW9sKGZyb20pOworCQlvZSA9IGZpbmRfbWFyayhmcm9tX21hcmspOworCQl0eXBlID0gb2UtPnR5cGU7CisJCWhhc2hjcHkoc2hhMSwgb2UtPmlkeC5zaGExKTsKKwl9IGVsc2UgaWYgKCFnZXRfc2hhMShmcm9tLCBzaGExKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSA9IGZpbmRfb2JqZWN0KHNoYTEpOworCQlpZiAoIW9lKSB7CisJCQl0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwkJCWlmICh0eXBlIDwgMCkKKwkJCQlkaWUoIk5vdCBhIHZhbGlkIG9iamVjdDogJXMiLCBmcm9tKTsKKwkJfSBlbHNlCisJCQl0eXBlID0gb2UtPnR5cGU7CisJfSBlbHNlCisJCWRpZSgiSW52YWxpZCByZWYgbmFtZSBvciBTSEExIGV4cHJlc3Npb246ICVzIiwgZnJvbSk7CisJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKworCS8qIHRhZ2dlciAuLi4gKi8KKwlpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAidGFnZ2VyICIsICZ2KSkgeworCQl0YWdnZXIgPSBwYXJzZV9pZGVudCh2KTsKKwkJcmVhZF9uZXh0X2NvbW1hbmQoKTsKKwl9IGVsc2UKKwkJdGFnZ2VyID0gTlVMTDsKKworCS8qIHRhZyBwYXlsb2FkL21lc3NhZ2UgKi8KKwlwYXJzZV9kYXRhKCZtc2csIDAsIE5VTEwpOworCisJLyogYnVpbGQgdGhlIHRhZyBvYmplY3QgKi8KKwlzdHJidWZfcmVzZXQoJm5ld19kYXRhKTsKKworCXN0cmJ1Zl9hZGRmKCZuZXdfZGF0YSwKKwkJICAgICJvYmplY3QgJXNcbiIKKwkJICAgICJ0eXBlICVzXG4iCisJCSAgICAidGFnICVzXG4iLAorCQkgICAgc2hhMV90b19oZXgoc2hhMSksIHR5cGVuYW1lKHR5cGUpLCB0LT5uYW1lKTsKKwlpZiAodGFnZ2VyKQorCQlzdHJidWZfYWRkZigmbmV3X2RhdGEsCisJCQkgICAgInRhZ2dlciAlc1xuIiwgdGFnZ2VyKTsKKwlzdHJidWZfYWRkY2goJm5ld19kYXRhLCAnXG4nKTsKKwlzdHJidWZfYWRkYnVmKCZuZXdfZGF0YSwgJm1zZyk7CisJZnJlZSh0YWdnZXIpOworCisJaWYgKHN0b3JlX29iamVjdChPQkpfVEFHLCAmbmV3X2RhdGEsIE5VTEwsIHQtPnNoYTEsIDApKQorCQl0LT5wYWNrX2lkID0gTUFYX1BBQ0tfSUQ7CisJZWxzZQorCQl0LT5wYWNrX2lkID0gcGFja19pZDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfcmVzZXRfYnJhbmNoKGNvbnN0IGNoYXIgKmFyZykKK3sKKwlzdHJ1Y3QgYnJhbmNoICpiOworCisJYiA9IGxvb2t1cF9icmFuY2goYXJnKTsKKwlpZiAoYikgeworCQloYXNoY2xyKGItPnNoYTEpOworCQloYXNoY2xyKGItPmJyYW5jaF90cmVlLnZlcnNpb25zWzBdLnNoYTEpOworCQloYXNoY2xyKGItPmJyYW5jaF90cmVlLnZlcnNpb25zWzFdLnNoYTEpOworCQlpZiAoYi0+YnJhbmNoX3RyZWUudHJlZSkgeworCQkJcmVsZWFzZV90cmVlX2NvbnRlbnRfcmVjdXJzaXZlKGItPmJyYW5jaF90cmVlLnRyZWUpOworCQkJYi0+YnJhbmNoX3RyZWUudHJlZSA9IE5VTEw7CisJCX0KKwl9CisJZWxzZQorCQliID0gbmV3X2JyYW5jaChhcmcpOworCXJlYWRfbmV4dF9jb21tYW5kKCk7CisJcGFyc2VfZnJvbShiKTsKKwlpZiAoY29tbWFuZF9idWYubGVuID4gMCkKKwkJdW5yZWFkX2NvbW1hbmRfYnVmID0gMTsKK30KKworc3RhdGljIHZvaWQgY2F0X2Jsb2Jfd3JpdGUoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaWYgKHdyaXRlX2luX2Z1bGwoY2F0X2Jsb2JfZmQsIGJ1Ziwgc2l6ZSkgIT0gc2l6ZSkKKwkJZGllX2Vycm5vKCJXcml0ZSB0byBmcm9udGVuZCBmYWlsZWQiKTsKK30KKworc3RhdGljIHZvaWQgY2F0X2Jsb2Ioc3RydWN0IG9iamVjdF9lbnRyeSAqb2UsIHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0pCit7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IDA7CisJY2hhciAqYnVmOworCisJaWYgKCFvZSB8fCBvZS0+cGFja19pZCA9PSBNQVhfUEFDS19JRCkgeworCQlidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCX0gZWxzZSB7CisJCXR5cGUgPSBvZS0+dHlwZTsKKwkJYnVmID0gZ2ZpX3VucGFja19lbnRyeShvZSwgJnNpemUpOworCX0KKworCS8qCisJICogT3V0cHV0IGJhc2VkIG9uIGJhdGNoX29uZV9vYmplY3QoKSBmcm9tIGNhdC1maWxlLmMuCisJICovCisJaWYgKHR5cGUgPD0gMCkgeworCQlzdHJidWZfcmVzZXQoJmxpbmUpOworCQlzdHJidWZfYWRkZigmbGluZSwgIiVzIG1pc3NpbmdcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJY2F0X2Jsb2Jfd3JpdGUobGluZS5idWYsIGxpbmUubGVuKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCQlmcmVlKGJ1Zik7CisJCXJldHVybjsKKwl9CisJaWYgKCFidWYpCisJCWRpZSgiQ2FuJ3QgcmVhZCBvYmplY3QgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJaWYgKHR5cGUgIT0gT0JKX0JMT0IpCisJCWRpZSgiT2JqZWN0ICVzIGlzIGEgJXMgYnV0IGEgYmxvYiB3YXMgZXhwZWN0ZWQuIiwKKwkJICAgIHNoYTFfdG9faGV4KHNoYTEpLCB0eXBlbmFtZSh0eXBlKSk7CisJc3RyYnVmX3Jlc2V0KCZsaW5lKTsKKwlzdHJidWZfYWRkZigmbGluZSwgIiVzICVzICVsdVxuIiwgc2hhMV90b19oZXgoc2hhMSksCisJCQkJCQl0eXBlbmFtZSh0eXBlKSwgc2l6ZSk7CisJY2F0X2Jsb2Jfd3JpdGUobGluZS5idWYsIGxpbmUubGVuKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJY2F0X2Jsb2Jfd3JpdGUoYnVmLCBzaXplKTsKKwljYXRfYmxvYl93cml0ZSgiXG4iLCAxKTsKKwlpZiAob2UgJiYgb2UtPnBhY2tfaWQgPT0gcGFja19pZCkgeworCQlsYXN0X2Jsb2Iub2Zmc2V0ID0gb2UtPmlkeC5vZmZzZXQ7CisJCXN0cmJ1Zl9hdHRhY2goJmxhc3RfYmxvYi5kYXRhLCBidWYsIHNpemUsIHNpemUpOworCQlsYXN0X2Jsb2IuZGVwdGggPSBvZS0+ZGVwdGg7CisJfSBlbHNlCisJCWZyZWUoYnVmKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZ2V0X21hcmsoY29uc3QgY2hhciAqcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSA9IG9lOworCWNoYXIgb3V0cHV0WzQyXTsKKworCS8qIGdldC1tYXJrIFNQIDxvYmplY3Q+IExGICovCisJaWYgKCpwICE9ICc6JykKKwkJZGllKCJOb3QgYSBtYXJrOiAlcyIsIHApOworCisJb2UgPSBmaW5kX21hcmsocGFyc2VfbWFya19yZWZfZW9sKHApKTsKKwlpZiAoIW9lKQorCQlkaWUoIlVua25vd24gbWFyazogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCisJc25wcmludGYob3V0cHV0LCBzaXplb2Yob3V0cHV0KSwgIiVzXG4iLCBzaGExX3RvX2hleChvZS0+aWR4LnNoYTEpKTsKKwljYXRfYmxvYl93cml0ZShvdXRwdXQsIDQxKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY2F0X2Jsb2IoY29uc3QgY2hhciAqcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSA9IG9lOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwkvKiBjYXQtYmxvYiBTUCA8b2JqZWN0PiBMRiAqLworCWlmICgqcCA9PSAnOicpIHsKKwkJb2UgPSBmaW5kX21hcmsocGFyc2VfbWFya19yZWZfZW9sKHApKTsKKwkJaWYgKCFvZSkKKwkJCWRpZSgiVW5rbm93biBtYXJrOiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCWhhc2hjcHkoc2hhMSwgb2UtPmlkeC5zaGExKTsKKwl9IGVsc2UgeworCQlpZiAoZ2V0X3NoYTFfaGV4KHAsIHNoYTEpKQorCQkJZGllKCJJbnZhbGlkIGRhdGFyZWY6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJaWYgKHBbNDBdKQorCQkJZGllKCJHYXJiYWdlIGFmdGVyIFNIQTE6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJb2UgPSBmaW5kX29iamVjdChzaGExKTsKKwl9CisKKwljYXRfYmxvYihvZSwgc2hhMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpkZXJlZmVyZW5jZShzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZSwKKwkJCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXSkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJY2hhciAqYnVmID0gTlVMTDsKKwlpZiAoIW9lKSB7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJCWlmICh0eXBlIDwgMCkKKwkJCWRpZSgib2JqZWN0IG5vdCBmb3VuZDogJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisJCS8qIGNhY2hlIGl0ISAqLworCQlvZSA9IGluc2VydF9vYmplY3Qoc2hhMSk7CisJCW9lLT50eXBlID0gdHlwZTsKKwkJb2UtPnBhY2tfaWQgPSBNQVhfUEFDS19JRDsKKwkJb2UtPmlkeC5vZmZzZXQgPSAxOworCX0KKwlzd2l0Y2ggKG9lLT50eXBlKSB7CisJY2FzZSBPQkpfVFJFRToJLyogZWFzeSBjYXNlLiAqLworCQlyZXR1cm4gb2U7CisJY2FzZSBPQkpfQ09NTUlUOgorCWNhc2UgT0JKX1RBRzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJOb3QgYSB0cmVlLWlzaDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCX0KKworCWlmIChvZS0+cGFja19pZCAhPSBNQVhfUEFDS19JRCkgewkvKiBpbiBhIHBhY2sgYmVpbmcgd3JpdHRlbiAqLworCQlidWYgPSBnZmlfdW5wYWNrX2VudHJ5KG9lLCAmc2l6ZSk7CisJfSBlbHNlIHsKKwkJZW51bSBvYmplY3RfdHlwZSB1bnVzZWQ7CisJCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ1bnVzZWQsICZzaXplKTsKKwl9CisJaWYgKCFidWYpCisJCWRpZSgiQ2FuJ3QgbG9hZCBvYmplY3QgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisKKwkvKiBQZWVsIG9uZSBsYXllci4gKi8KKwlzd2l0Y2ggKG9lLT50eXBlKSB7CisJY2FzZSBPQkpfVEFHOgorCQlpZiAoc2l6ZSA8IDQwICsgc3RybGVuKCJvYmplY3QgIikgfHwKKwkJICAgIGdldF9zaGExX2hleChidWYgKyBzdHJsZW4oIm9iamVjdCAiKSwgc2hhMSkpCisJCQlkaWUoIkludmFsaWQgU0hBMSBpbiB0YWc6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlpZiAoc2l6ZSA8IDQwICsgc3RybGVuKCJ0cmVlICIpIHx8CisJCSAgICBnZXRfc2hhMV9oZXgoYnVmICsgc3RybGVuKCJ0cmVlICIpLCBzaGExKSkKKwkJCWRpZSgiSW52YWxpZCBTSEExIGluIGNvbW1pdDogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCX0KKworCWZyZWUoYnVmKTsKKwlyZXR1cm4gZmluZF9vYmplY3Qoc2hhMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpwYXJzZV90cmVlaXNoX2RhdGFyZWYoY29uc3QgY2hhciAqKnApCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplOworCisJaWYgKCoqcCA9PSAnOicpIHsJLyogPG1hcms+ICovCisJCWUgPSBmaW5kX21hcmsocGFyc2VfbWFya19yZWZfc3BhY2UocCkpOworCQlpZiAoIWUpCisJCQlkaWUoIlVua25vd24gbWFyazogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQloYXNoY3B5KHNoYTEsIGUtPmlkeC5zaGExKTsKKwl9IGVsc2UgewkvKiA8c2hhMT4gKi8KKwkJaWYgKGdldF9zaGExX2hleCgqcCwgc2hhMSkpCisJCQlkaWUoIkludmFsaWQgZGF0YXJlZjogJXMiLCBjb21tYW5kX2J1Zi5idWYpOworCQllID0gZmluZF9vYmplY3Qoc2hhMSk7CisJCSpwICs9IDQwOworCQlpZiAoKigqcCkrKyAhPSAnICcpCisJCQlkaWUoIk1pc3Npbmcgc3BhY2UgYWZ0ZXIgdHJlZS1pc2g6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwl9CisKKwl3aGlsZSAoIWUgfHwgZS0+dHlwZSAhPSBPQkpfVFJFRSkKKwkJZSA9IGRlcmVmZXJlbmNlKGUsIHNoYTEpOworCXJldHVybiBlOworfQorCitzdGF0aWMgdm9pZCBwcmludF9scyhpbnQgbW9kZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBTZWUgc2hvd190cmVlKCkuICovCisJY29uc3QgY2hhciAqdHlwZSA9CisJCVNfSVNHSVRMSU5LKG1vZGUpID8gY29tbWl0X3R5cGUgOgorCQlTX0lTRElSKG1vZGUpID8gdHJlZV90eXBlIDoKKwkJYmxvYl90eXBlOworCisJaWYgKCFtb2RlKSB7CisJCS8qIG1pc3NpbmcgU1AgcGF0aCBMRiAqLworCQlzdHJidWZfcmVzZXQoJmxpbmUpOworCQlzdHJidWZfYWRkc3RyKCZsaW5lLCAibWlzc2luZyAiKTsKKwkJcXVvdGVfY19zdHlsZShwYXRoLCAmbGluZSwgTlVMTCwgMCk7CisJCXN0cmJ1Zl9hZGRjaCgmbGluZSwgJ1xuJyk7CisJfSBlbHNlIHsKKwkJLyogbW9kZSBTUCB0eXBlIFNQIG9iamVjdF9uYW1lIFRBQiBwYXRoIExGICovCisJCXN0cmJ1Zl9yZXNldCgmbGluZSk7CisJCXN0cmJ1Zl9hZGRmKCZsaW5lLCAiJTA2byAlcyAlc1x0IiwKKwkJCQltb2RlICYgfk5PX0RFTFRBLCB0eXBlLCBzaGExX3RvX2hleChzaGExKSk7CisJCXF1b3RlX2Nfc3R5bGUocGF0aCwgJmxpbmUsIE5VTEwsIDApOworCQlzdHJidWZfYWRkY2goJmxpbmUsICdcbicpOworCX0KKwljYXRfYmxvYl93cml0ZShsaW5lLmJ1ZiwgbGluZS5sZW4pOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9scyhjb25zdCBjaGFyICpwLCBzdHJ1Y3QgYnJhbmNoICpiKQoreworCXN0cnVjdCB0cmVlX2VudHJ5ICpyb290ID0gTlVMTDsKKwlzdHJ1Y3QgdHJlZV9lbnRyeSBsZWFmID0ge05VTEx9OworCisJLyogbHMgU1AgKDx0cmVlLWlzaD4gU1ApPyA8cGF0aD4gKi8KKwlpZiAoKnAgPT0gJyInKSB7CisJCWlmICghYikKKwkJCWRpZSgiTm90IGluIGEgY29tbWl0OiAlcyIsIGNvbW1hbmRfYnVmLmJ1Zik7CisJCXJvb3QgPSAmYi0+YnJhbmNoX3RyZWU7CisJfSBlbHNlIHsKKwkJc3RydWN0IG9iamVjdF9lbnRyeSAqZSA9IHBhcnNlX3RyZWVpc2hfZGF0YXJlZigmcCk7CisJCXJvb3QgPSBuZXdfdHJlZV9lbnRyeSgpOworCQloYXNoY3B5KHJvb3QtPnZlcnNpb25zWzFdLnNoYTEsIGUtPmlkeC5zaGExKTsKKwkJaWYgKCFpc19udWxsX3NoYTEocm9vdC0+dmVyc2lvbnNbMV0uc2hhMSkpCisJCQlyb290LT52ZXJzaW9uc1sxXS5tb2RlID0gU19JRkRJUjsKKwkJbG9hZF90cmVlKHJvb3QpOworCX0KKwlpZiAoKnAgPT0gJyInKSB7CisJCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHVxID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKmVuZHA7CisJCXN0cmJ1Zl9yZXNldCgmdXEpOworCQlpZiAodW5xdW90ZV9jX3N0eWxlKCZ1cSwgcCwgJmVuZHApKQorCQkJZGllKCJJbnZhbGlkIHBhdGg6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJaWYgKCplbmRwKQorCQkJZGllKCJHYXJiYWdlIGFmdGVyIHBhdGggaW46ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKwkJcCA9IHVxLmJ1ZjsKKwl9CisJdHJlZV9jb250ZW50X2dldChyb290LCBwLCAmbGVhZiwgMSk7CisJLyoKKwkgKiBBIGRpcmVjdG9yeSBpbiBwcmVwYXJhdGlvbiB3b3VsZCBoYXZlIGEgc2hhMSBvZiB6ZXJvCisJICogdW50aWwgaXQgaXMgc2F2ZWQuICBTYXZlLCBmb3Igc2ltcGxpY2l0eS4KKwkgKi8KKwlpZiAoU19JU0RJUihsZWFmLnZlcnNpb25zWzFdLm1vZGUpKQorCQlzdG9yZV90cmVlKCZsZWFmKTsKKworCXByaW50X2xzKGxlYWYudmVyc2lvbnNbMV0ubW9kZSwgbGVhZi52ZXJzaW9uc1sxXS5zaGExLCBwKTsKKwlpZiAobGVhZi50cmVlKQorCQlyZWxlYXNlX3RyZWVfY29udGVudF9yZWN1cnNpdmUobGVhZi50cmVlKTsKKwlpZiAoIWIgfHwgcm9vdCAhPSAmYi0+YnJhbmNoX3RyZWUpCisJCXJlbGVhc2VfdHJlZV9lbnRyeShyb290KTsKK30KKworc3RhdGljIHZvaWQgY2hlY2twb2ludCh2b2lkKQoreworCWNoZWNrcG9pbnRfcmVxdWVzdGVkID0gMDsKKwlpZiAob2JqZWN0X2NvdW50KSB7CisJCWN5Y2xlX3BhY2tmaWxlKCk7CisJCWR1bXBfYnJhbmNoZXMoKTsKKwkJZHVtcF90YWdzKCk7CisJCWR1bXBfbWFya3MoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NoZWNrcG9pbnQodm9pZCkKK3sKKwljaGVja3BvaW50X3JlcXVlc3RlZCA9IDE7CisJc2tpcF9vcHRpb25hbF9sZigpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9wcm9ncmVzcyh2b2lkKQoreworCWZ3cml0ZShjb21tYW5kX2J1Zi5idWYsIDEsIGNvbW1hbmRfYnVmLmxlbiwgc3Rkb3V0KTsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworCWZmbHVzaChzdGRvdXQpOworCXNraXBfb3B0aW9uYWxfbGYoKTsKK30KKworc3RhdGljIGNoYXIqIG1ha2VfZmFzdF9pbXBvcnRfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCWlmICghcmVsYXRpdmVfbWFya3NfcGF0aHMgfHwgaXNfYWJzb2x1dGVfcGF0aChwYXRoKSkKKwkJcmV0dXJuIHhzdHJkdXAocGF0aCk7CisJcmV0dXJuIHhzdHJkdXAoZ2l0X3BhdGgoImluZm8vZmFzdC1pbXBvcnQvJXMiLCBwYXRoKSk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9pbXBvcnRfbWFya3MoY29uc3QgY2hhciAqbWFya3MsCisJCQkJCWludCBmcm9tX3N0cmVhbSwgaW50IGlnbm9yZV9taXNzaW5nKQoreworCWlmIChpbXBvcnRfbWFya3NfZmlsZSkgeworCQlpZiAoZnJvbV9zdHJlYW0pCisJCQlkaWUoIk9ubHkgb25lIGltcG9ydC1tYXJrcyBjb21tYW5kIGFsbG93ZWQgcGVyIHN0cmVhbSIpOworCisJCS8qIHJlYWQgcHJldmlvdXMgbWFyayBmaWxlICovCisJCWlmKCFpbXBvcnRfbWFya3NfZmlsZV9mcm9tX3N0cmVhbSkKKwkJCXJlYWRfbWFya3MoKTsKKwl9CisKKwlpbXBvcnRfbWFya3NfZmlsZSA9IG1ha2VfZmFzdF9pbXBvcnRfcGF0aChtYXJrcyk7CisJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChpbXBvcnRfbWFya3NfZmlsZSk7CisJaW1wb3J0X21hcmtzX2ZpbGVfZnJvbV9zdHJlYW0gPSBmcm9tX3N0cmVhbTsKKwlpbXBvcnRfbWFya3NfZmlsZV9pZ25vcmVfbWlzc2luZyA9IGlnbm9yZV9taXNzaW5nOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fZGF0ZV9mb3JtYXQoY29uc3QgY2hhciAqZm10KQoreworCWlmICghc3RyY21wKGZtdCwgInJhdyIpKQorCQl3aGVuc3BlYyA9IFdIRU5TUEVDX1JBVzsKKwllbHNlIGlmICghc3RyY21wKGZtdCwgInJmYzI4MjIiKSkKKwkJd2hlbnNwZWMgPSBXSEVOU1BFQ19SRkMyODIyOworCWVsc2UgaWYgKCFzdHJjbXAoZm10LCAibm93IikpCisJCXdoZW5zcGVjID0gV0hFTlNQRUNfTk9XOworCWVsc2UKKwkJZGllKCJ1bmtub3duIC0tZGF0ZS1mb3JtYXQgYXJndW1lbnQgJXMiLCBmbXQpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bG9uZ19hcmcoY29uc3QgY2hhciAqb3B0aW9uLCBjb25zdCBjaGFyICphcmcpCit7CisJY2hhciAqZW5kcHRyOworCXVuc2lnbmVkIGxvbmcgcnYgPSBzdHJ0b3VsKGFyZywgJmVuZHB0ciwgMCk7CisJaWYgKHN0cmNocihhcmcsICctJykgfHwgZW5kcHRyID09IGFyZyB8fCAqZW5kcHRyKQorCQlkaWUoIiVzOiBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIiLCBvcHRpb24pOworCXJldHVybiBydjsKK30KKworc3RhdGljIHZvaWQgb3B0aW9uX2RlcHRoKGNvbnN0IGNoYXIgKmRlcHRoKQoreworCW1heF9kZXB0aCA9IHVsb25nX2FyZygiLS1kZXB0aCIsIGRlcHRoKTsKKwlpZiAobWF4X2RlcHRoID4gTUFYX0RFUFRIKQorCQlkaWUoIi0tZGVwdGggY2Fubm90IGV4Y2VlZCAldSIsIE1BWF9ERVBUSCk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9hY3RpdmVfYnJhbmNoZXMoY29uc3QgY2hhciAqYnJhbmNoZXMpCit7CisJbWF4X2FjdGl2ZV9icmFuY2hlcyA9IHVsb25nX2FyZygiLS1hY3RpdmUtYnJhbmNoZXMiLCBicmFuY2hlcyk7Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9leHBvcnRfbWFya3MoY29uc3QgY2hhciAqbWFya3MpCit7CisJZXhwb3J0X21hcmtzX2ZpbGUgPSBtYWtlX2Zhc3RfaW1wb3J0X3BhdGgobWFya3MpOworCXNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoZXhwb3J0X21hcmtzX2ZpbGUpOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fY2F0X2Jsb2JfZmQoY29uc3QgY2hhciAqZmQpCit7CisJdW5zaWduZWQgbG9uZyBuID0gdWxvbmdfYXJnKCItLWNhdC1ibG9iLWZkIiwgZmQpOworCWlmIChuID4gKHVuc2lnbmVkIGxvbmcpIElOVF9NQVgpCisJCWRpZSgiLS1jYXQtYmxvYi1mZCBjYW5ub3QgZXhjZWVkICVkIiwgSU5UX01BWCk7CisJY2F0X2Jsb2JfZmQgPSAoaW50KSBuOworfQorCitzdGF0aWMgdm9pZCBvcHRpb25fZXhwb3J0X3BhY2tfZWRnZXMoY29uc3QgY2hhciAqZWRnZXMpCit7CisJaWYgKHBhY2tfZWRnZXMpCisJCWZjbG9zZShwYWNrX2VkZ2VzKTsKKwlwYWNrX2VkZ2VzID0gZm9wZW4oZWRnZXMsICJhIik7CisJaWYgKCFwYWNrX2VkZ2VzKQorCQlkaWVfZXJybm8oIkNhbm5vdCBvcGVuICclcyciLCBlZGdlcyk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb25lX29wdGlvbihjb25zdCBjaGFyICpvcHRpb24pCit7CisJaWYgKHNraXBfcHJlZml4KG9wdGlvbiwgIm1heC1wYWNrLXNpemU9IiwgJm9wdGlvbikpIHsKKwkJdW5zaWduZWQgbG9uZyB2OworCQlpZiAoIWdpdF9wYXJzZV91bG9uZyhvcHRpb24sICZ2KSkKKwkJCXJldHVybiAwOworCQlpZiAodiA8IDgxOTIpIHsKKwkJCXdhcm5pbmcoIm1heC1wYWNrLXNpemUgaXMgbm93IGluIGJ5dGVzLCBhc3N1bWluZyAtLW1heC1wYWNrLXNpemU9JWx1bSIsIHYpOworCQkJdiAqPSAxMDI0ICogMTAyNDsKKwkJfSBlbHNlIGlmICh2IDwgMTAyNCAqIDEwMjQpIHsKKwkJCXdhcm5pbmcoIm1pbmltdW0gbWF4LXBhY2stc2l6ZSBpcyAxIE1pQiIpOworCQkJdiA9IDEwMjQgKiAxMDI0OworCQl9CisJCW1heF9wYWNrc2l6ZSA9IHY7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChvcHRpb24sICJiaWctZmlsZS10aHJlc2hvbGQ9IiwgJm9wdGlvbikpIHsKKwkJdW5zaWduZWQgbG9uZyB2OworCQlpZiAoIWdpdF9wYXJzZV91bG9uZyhvcHRpb24sICZ2KSkKKwkJCXJldHVybiAwOworCQliaWdfZmlsZV90aHJlc2hvbGQgPSB2OworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgob3B0aW9uLCAiZGVwdGg9IiwgJm9wdGlvbikpIHsKKwkJb3B0aW9uX2RlcHRoKG9wdGlvbik7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChvcHRpb24sICJhY3RpdmUtYnJhbmNoZXM9IiwgJm9wdGlvbikpIHsKKwkJb3B0aW9uX2FjdGl2ZV9icmFuY2hlcyhvcHRpb24pOworCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgob3B0aW9uLCAiZXhwb3J0LXBhY2stZWRnZXM9IiwgJm9wdGlvbikpIHsKKwkJb3B0aW9uX2V4cG9ydF9wYWNrX2VkZ2VzKG9wdGlvbik7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChvcHRpb24sICJxdWlldCIpKSB7CisJCXNob3dfc3RhdHMgPSAwOworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgob3B0aW9uLCAic3RhdHMiKSkgeworCQlzaG93X3N0YXRzID0gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwYXJzZV9vbmVfZmVhdHVyZShjb25zdCBjaGFyICpmZWF0dXJlLCBpbnQgZnJvbV9zdHJlYW0pCit7CisJY29uc3QgY2hhciAqYXJnOworCisJaWYgKHNraXBfcHJlZml4KGZlYXR1cmUsICJkYXRlLWZvcm1hdD0iLCAmYXJnKSkgeworCQlvcHRpb25fZGF0ZV9mb3JtYXQoYXJnKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGZlYXR1cmUsICJpbXBvcnQtbWFya3M9IiwgJmFyZykpIHsKKwkJb3B0aW9uX2ltcG9ydF9tYXJrcyhhcmcsIGZyb21fc3RyZWFtLCAwKTsKKwl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGZlYXR1cmUsICJpbXBvcnQtbWFya3MtaWYtZXhpc3RzPSIsICZhcmcpKSB7CisJCW9wdGlvbl9pbXBvcnRfbWFya3MoYXJnLCBmcm9tX3N0cmVhbSwgMSk7CisJfSBlbHNlIGlmIChza2lwX3ByZWZpeChmZWF0dXJlLCAiZXhwb3J0LW1hcmtzPSIsICZhcmcpKSB7CisJCW9wdGlvbl9leHBvcnRfbWFya3MoYXJnKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoZmVhdHVyZSwgImdldC1tYXJrIikpIHsKKwkJOyAvKiBEb24ndCBkaWUgLSB0aGlzIGZlYXR1cmUgaXMgc3VwcG9ydGVkICovCisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJjYXQtYmxvYiIpKSB7CisJCTsgLyogRG9uJ3QgZGllIC0gdGhpcyBmZWF0dXJlIGlzIHN1cHBvcnRlZCAqLworCX0gZWxzZSBpZiAoIXN0cmNtcChmZWF0dXJlLCAicmVsYXRpdmUtbWFya3MiKSkgeworCQlyZWxhdGl2ZV9tYXJrc19wYXRocyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGZlYXR1cmUsICJuby1yZWxhdGl2ZS1tYXJrcyIpKSB7CisJCXJlbGF0aXZlX21hcmtzX3BhdGhzID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoZmVhdHVyZSwgImRvbmUiKSkgeworCQlyZXF1aXJlX2V4cGxpY2l0X3Rlcm1pbmF0aW9uID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoZmVhdHVyZSwgImZvcmNlIikpIHsKKwkJZm9yY2VfdXBkYXRlID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoZmVhdHVyZSwgIm5vdGVzIikgfHwgIXN0cmNtcChmZWF0dXJlLCAibHMiKSkgeworCQk7IC8qIGRvIG5vdGhpbmc7IHdlIGhhdmUgdGhlIGZlYXR1cmUgKi8KKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZmVhdHVyZShjb25zdCBjaGFyICpmZWF0dXJlKQoreworCWlmIChzZWVuX2RhdGFfY29tbWFuZCkKKwkJZGllKCJHb3QgZmVhdHVyZSBjb21tYW5kICclcycgYWZ0ZXIgZGF0YSBjb21tYW5kIiwgZmVhdHVyZSk7CisKKwlpZiAocGFyc2Vfb25lX2ZlYXR1cmUoZmVhdHVyZSwgMSkpCisJCXJldHVybjsKKworCWRpZSgiVGhpcyB2ZXJzaW9uIG9mIGZhc3QtaW1wb3J0IGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZSAlcy4iLCBmZWF0dXJlKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2Vfb3B0aW9uKGNvbnN0IGNoYXIgKm9wdGlvbikKK3sKKwlpZiAoc2Vlbl9kYXRhX2NvbW1hbmQpCisJCWRpZSgiR290IG9wdGlvbiBjb21tYW5kICclcycgYWZ0ZXIgZGF0YSBjb21tYW5kIiwgb3B0aW9uKTsKKworCWlmIChwYXJzZV9vbmVfb3B0aW9uKG9wdGlvbikpCisJCXJldHVybjsKKworCWRpZSgiVGhpcyB2ZXJzaW9uIG9mIGZhc3QtaW1wb3J0IGRvZXMgbm90IHN1cHBvcnQgb3B0aW9uOiAlcyIsIG9wdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9wYWNrX2NvbmZpZyh2b2lkKQoreworCWludCBpbmRleHZlcnNpb25fdmFsdWU7CisJdW5zaWduZWQgbG9uZyBwYWNrc2l6ZWxpbWl0X3ZhbHVlOworCisJaWYgKCFnaXRfY29uZmlnX2dldF91bG9uZygicGFjay5kZXB0aCIsICZtYXhfZGVwdGgpKSB7CisJCWlmIChtYXhfZGVwdGggPiBNQVhfREVQVEgpCisJCQltYXhfZGVwdGggPSBNQVhfREVQVEg7CisJfQorCWlmICghZ2l0X2NvbmZpZ19nZXRfaW50KCJwYWNrLmNvbXByZXNzaW9uIiwgJnBhY2tfY29tcHJlc3Npb25fbGV2ZWwpKSB7CisJCWlmIChwYWNrX2NvbXByZXNzaW9uX2xldmVsID09IC0xKQorCQkJcGFja19jb21wcmVzc2lvbl9sZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKwkJZWxzZSBpZiAocGFja19jb21wcmVzc2lvbl9sZXZlbCA8IDAgfHwKKwkJCSBwYWNrX2NvbXByZXNzaW9uX2xldmVsID4gWl9CRVNUX0NPTVBSRVNTSU9OKQorCQkJZ2l0X2RpZV9jb25maWcoInBhY2suY29tcHJlc3Npb24iLAorCQkJCQkiYmFkIHBhY2sgY29tcHJlc3Npb24gbGV2ZWwgJWQiLCBwYWNrX2NvbXByZXNzaW9uX2xldmVsKTsKKwkJcGFja19jb21wcmVzc2lvbl9zZWVuID0gMTsKKwl9CisJaWYgKCFnaXRfY29uZmlnX2dldF9pbnQoInBhY2suaW5kZXh2ZXJzaW9uIiwgJmluZGV4dmVyc2lvbl92YWx1ZSkpIHsKKwkJcGFja19pZHhfb3B0cy52ZXJzaW9uID0gaW5kZXh2ZXJzaW9uX3ZhbHVlOworCQlpZiAocGFja19pZHhfb3B0cy52ZXJzaW9uID4gMikKKwkJCWdpdF9kaWVfY29uZmlnKCJwYWNrLmluZGV4dmVyc2lvbiIsCisJCQkJCSJiYWQgcGFjay5pbmRleHZlcnNpb249JSJQUkl1MzIsIHBhY2tfaWR4X29wdHMudmVyc2lvbik7CisJfQorCWlmICghZ2l0X2NvbmZpZ19nZXRfdWxvbmcoInBhY2sucGFja3NpemVsaW1pdCIsICZwYWNrc2l6ZWxpbWl0X3ZhbHVlKSkKKwkJbWF4X3BhY2tzaXplID0gcGFja3NpemVsaW1pdF92YWx1ZTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgZmFzdF9pbXBvcnRfdXNhZ2VbXSA9CisiZ2l0IGZhc3QtaW1wb3J0IFstLWRhdGUtZm9ybWF0PTxmPl0gWy0tbWF4LXBhY2stc2l6ZT08bj5dIFstLWJpZy1maWxlLXRocmVzaG9sZD08bj5dIFstLWRlcHRoPTxuPl0gWy0tYWN0aXZlLWJyYW5jaGVzPTxuPl0gWy0tZXhwb3J0LW1hcmtzPTxtYXJrcy5maWxlPl0iOworCitzdGF0aWMgdm9pZCBwYXJzZV9hcmd2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgZ2xvYmFsX2FyZ2M7IGkrKykgeworCQljb25zdCBjaGFyICphID0gZ2xvYmFsX2FyZ3ZbaV07CisKKwkJaWYgKCphICE9ICctJyB8fCAhc3RyY21wKGEsICItLSIpKQorCQkJYnJlYWs7CisKKwkJaWYgKCFza2lwX3ByZWZpeChhLCAiLS0iLCAmYSkpCisJCQlkaWUoInVua25vd24gb3B0aW9uICVzIiwgYSk7CisKKwkJaWYgKHBhcnNlX29uZV9vcHRpb24oYSkpCisJCQljb250aW51ZTsKKworCQlpZiAocGFyc2Vfb25lX2ZlYXR1cmUoYSwgMCkpCisJCQljb250aW51ZTsKKworCQlpZiAoc2tpcF9wcmVmaXgoYSwgImNhdC1ibG9iLWZkPSIsICZhKSkgeworCQkJb3B0aW9uX2NhdF9ibG9iX2ZkKGEpOworCQkJY29udGludWU7CisJCX0KKworCQlkaWUoInVua25vd24gb3B0aW9uIC0tJXMiLCBhKTsKKwl9CisJaWYgKGkgIT0gZ2xvYmFsX2FyZ2MpCisJCXVzYWdlKGZhc3RfaW1wb3J0X3VzYWdlKTsKKworCXNlZW5fZGF0YV9jb21tYW5kID0gMTsKKwlpZiAoaW1wb3J0X21hcmtzX2ZpbGUpCisJCXJlYWRfbWFya3MoKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXVuc2lnbmVkIGludCBpOworCisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKworCWdpdF9zZXR1cF9nZXR0ZXh0KCk7CisKKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgIi1oIikpCisJCXVzYWdlKGZhc3RfaW1wb3J0X3VzYWdlKTsKKworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwlyZXNldF9wYWNrX2lkeF9vcHRpb24oJnBhY2tfaWR4X29wdHMpOworCWdpdF9wYWNrX2NvbmZpZygpOworCWlmICghcGFja19jb21wcmVzc2lvbl9zZWVuICYmIGNvcmVfY29tcHJlc3Npb25fc2VlbikKKwkJcGFja19jb21wcmVzc2lvbl9sZXZlbCA9IGNvcmVfY29tcHJlc3Npb25fbGV2ZWw7CisKKwlhbGxvY19vYmplY3RzKG9iamVjdF9lbnRyeV9hbGxvYyk7CisJc3RyYnVmX2luaXQoJmNvbW1hbmRfYnVmLCAwKTsKKwlhdG9tX3RhYmxlID0geGNhbGxvYyhhdG9tX3RhYmxlX3N6LCBzaXplb2Yoc3RydWN0IGF0b21fc3RyKikpOworCWJyYW5jaF90YWJsZSA9IHhjYWxsb2MoYnJhbmNoX3RhYmxlX3N6LCBzaXplb2Yoc3RydWN0IGJyYW5jaCopKTsKKwlhdmFpbF90cmVlX3RhYmxlID0geGNhbGxvYyhhdmFpbF90cmVlX3RhYmxlX3N6LCBzaXplb2Yoc3RydWN0IGF2YWlsX3RyZWVfY29udGVudCopKTsKKwltYXJrcyA9IHBvb2xfY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbWFya19zZXQpKTsKKworCWdsb2JhbF9hcmdjID0gYXJnYzsKKwlnbG9iYWxfYXJndiA9IGFyZ3Y7CisKKwlyY19mcmVlID0gcG9vbF9hbGxvYyhjbWRfc2F2ZSAqIHNpemVvZigqcmNfZnJlZSkpOworCWZvciAoaSA9IDA7IGkgPCAoY21kX3NhdmUgLSAxKTsgaSsrKQorCQlyY19mcmVlW2ldLm5leHQgPSAmcmNfZnJlZVtpICsgMV07CisJcmNfZnJlZVtjbWRfc2F2ZSAtIDFdLm5leHQgPSBOVUxMOworCisJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CisJc3RhcnRfcGFja2ZpbGUoKTsKKwlzZXRfZGllX3JvdXRpbmUoZGllX25pY2VseSk7CisJc2V0X2NoZWNrcG9pbnRfc2lnbmFsKCk7CisJd2hpbGUgKHJlYWRfbmV4dF9jb21tYW5kKCkgIT0gRU9GKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmICghc3RyY21wKCJibG9iIiwgY29tbWFuZF9idWYuYnVmKSkKKwkJCXBhcnNlX25ld19ibG9iKCk7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgImxzICIsICZ2KSkKKwkJCXBhcnNlX2xzKHYsIE5VTEwpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJjb21taXQgIiwgJnYpKQorCQkJcGFyc2VfbmV3X2NvbW1pdCh2KTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAidGFnICIsICZ2KSkKKwkJCXBhcnNlX25ld190YWcodik7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KGNvbW1hbmRfYnVmLmJ1ZiwgInJlc2V0ICIsICZ2KSkKKwkJCXBhcnNlX3Jlc2V0X2JyYW5jaCh2KTsKKwkJZWxzZSBpZiAoIXN0cmNtcCgiY2hlY2twb2ludCIsIGNvbW1hbmRfYnVmLmJ1ZikpCisJCQlwYXJzZV9jaGVja3BvaW50KCk7CisJCWVsc2UgaWYgKCFzdHJjbXAoImRvbmUiLCBjb21tYW5kX2J1Zi5idWYpKQorCQkJYnJlYWs7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKGNvbW1hbmRfYnVmLmJ1ZiwgInByb2dyZXNzICIpKQorCQkJcGFyc2VfcHJvZ3Jlc3MoKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoY29tbWFuZF9idWYuYnVmLCAiZmVhdHVyZSAiLCAmdikpCisJCQlwYXJzZV9mZWF0dXJlKHYpOworCQllbHNlIGlmIChza2lwX3ByZWZpeChjb21tYW5kX2J1Zi5idWYsICJvcHRpb24gZ2l0ICIsICZ2KSkKKwkJCXBhcnNlX29wdGlvbih2KTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoY29tbWFuZF9idWYuYnVmLCAib3B0aW9uICIpKQorCQkJLyogaWdub3JlIG5vbi1naXQgb3B0aW9ucyovOworCQllbHNlCisJCQlkaWUoIlVuc3VwcG9ydGVkIGNvbW1hbmQ6ICVzIiwgY29tbWFuZF9idWYuYnVmKTsKKworCQlpZiAoY2hlY2twb2ludF9yZXF1ZXN0ZWQpCisJCQljaGVja3BvaW50KCk7CisJfQorCisJLyogYXJndiBoYXNuJ3QgYmVlbiBwYXJzZWQgeWV0LCBkbyBzbyAqLworCWlmICghc2Vlbl9kYXRhX2NvbW1hbmQpCisJCXBhcnNlX2FyZ3YoKTsKKworCWlmIChyZXF1aXJlX2V4cGxpY2l0X3Rlcm1pbmF0aW9uICYmIGZlb2Yoc3RkaW4pKQorCQlkaWUoInN0cmVhbSBlbmRzIGVhcmx5Iik7CisKKwllbmRfcGFja2ZpbGUoKTsKKworCWR1bXBfYnJhbmNoZXMoKTsKKwlkdW1wX3RhZ3MoKTsKKwl1bmtlZXBfYWxsX3BhY2tzKCk7CisJZHVtcF9tYXJrcygpOworCisJaWYgKHBhY2tfZWRnZXMpCisJCWZjbG9zZShwYWNrX2VkZ2VzKTsKKworCWlmIChzaG93X3N0YXRzKSB7CisJCXVpbnRtYXhfdCB0b3RhbF9jb3VudCA9IDAsIGR1cGxpY2F0ZV9jb3VudCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9iamVjdF9jb3VudF9ieV90eXBlKTsgaSsrKQorCQkJdG90YWxfY291bnQgKz0gb2JqZWN0X2NvdW50X2J5X3R5cGVbaV07CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGR1cGxpY2F0ZV9jb3VudF9ieV90eXBlKTsgaSsrKQorCQkJZHVwbGljYXRlX2NvdW50ICs9IGR1cGxpY2F0ZV9jb3VudF9ieV90eXBlW2ldOworCisJCWZwcmludGYoc3RkZXJyLCAiJXMgc3RhdGlzdGljczpcbiIsIGFyZ3ZbMF0pOworCQlmcHJpbnRmKHN0ZGVyciwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCWZwcmludGYoc3RkZXJyLCAiQWxsb2MnZCBvYmplY3RzOiAlMTAiIFBSSXVNQVggIlxuIiwgYWxsb2NfY291bnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIlRvdGFsIG9iamVjdHM6ICAgJTEwIiBQUkl1TUFYICIgKCUxMCIgUFJJdU1BWCAiIGR1cGxpY2F0ZXMgICAgICAgICAgICAgICAgICApXG4iLCB0b3RhbF9jb3VudCwgZHVwbGljYXRlX2NvdW50KTsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgICBibG9icyAgOiAgICUxMCIgUFJJdU1BWCAiICglMTAiIFBSSXVNQVggIiBkdXBsaWNhdGVzICUxMCIgUFJJdU1BWCAiIGRlbHRhcyBvZiAlMTAiIFBSSXVNQVgiIGF0dGVtcHRzKVxuIiwgb2JqZWN0X2NvdW50X2J5X3R5cGVbT0JKX0JMT0JdLCBkdXBsaWNhdGVfY291bnRfYnlfdHlwZVtPQkpfQkxPQl0sIGRlbHRhX2NvdW50X2J5X3R5cGVbT0JKX0JMT0JdLCBkZWx0YV9jb3VudF9hdHRlbXB0c19ieV90eXBlW09CSl9CTE9CXSk7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICAgdHJlZXMgIDogICAlMTAiIFBSSXVNQVggIiAoJTEwIiBQUkl1TUFYICIgZHVwbGljYXRlcyAlMTAiIFBSSXVNQVggIiBkZWx0YXMgb2YgJTEwIiBQUkl1TUFYIiBhdHRlbXB0cylcbiIsIG9iamVjdF9jb3VudF9ieV90eXBlW09CSl9UUkVFXSwgZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbT0JKX1RSRUVdLCBkZWx0YV9jb3VudF9ieV90eXBlW09CSl9UUkVFXSwgZGVsdGFfY291bnRfYXR0ZW1wdHNfYnlfdHlwZVtPQkpfVFJFRV0pOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIGNvbW1pdHM6ICAgJTEwIiBQUkl1TUFYICIgKCUxMCIgUFJJdU1BWCAiIGR1cGxpY2F0ZXMgJTEwIiBQUkl1TUFYICIgZGVsdGFzIG9mICUxMCIgUFJJdU1BWCIgYXR0ZW1wdHMpXG4iLCBvYmplY3RfY291bnRfYnlfdHlwZVtPQkpfQ09NTUlUXSwgZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbT0JKX0NPTU1JVF0sIGRlbHRhX2NvdW50X2J5X3R5cGVbT0JKX0NPTU1JVF0sIGRlbHRhX2NvdW50X2F0dGVtcHRzX2J5X3R5cGVbT0JKX0NPTU1JVF0pOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIHRhZ3MgICA6ICAgJTEwIiBQUkl1TUFYICIgKCUxMCIgUFJJdU1BWCAiIGR1cGxpY2F0ZXMgJTEwIiBQUkl1TUFYICIgZGVsdGFzIG9mICUxMCIgUFJJdU1BWCIgYXR0ZW1wdHMpXG4iLCBvYmplY3RfY291bnRfYnlfdHlwZVtPQkpfVEFHXSwgZHVwbGljYXRlX2NvdW50X2J5X3R5cGVbT0JKX1RBR10sIGRlbHRhX2NvdW50X2J5X3R5cGVbT0JKX1RBR10sIGRlbHRhX2NvdW50X2F0dGVtcHRzX2J5X3R5cGVbT0JKX1RBR10pOworCQlmcHJpbnRmKHN0ZGVyciwgIlRvdGFsIGJyYW5jaGVzOiAgJTEwbHUgKCUxMGx1IGxvYWRzICAgICApXG4iLCBicmFuY2hfY291bnQsIGJyYW5jaF9sb2FkX2NvdW50KTsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgICBtYXJrczogICAgICUxMCIgUFJJdU1BWCAiICglMTAiIFBSSXVNQVggIiB1bmlxdWUgICAgKVxuIiwgKCgodWludG1heF90KTEpIDw8IG1hcmtzLT5zaGlmdCkgKiAxMDI0LCBtYXJrc19zZXRfY291bnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAgICAgIGF0b21zOiAgICAgJTEwdVxuIiwgYXRvbV9jbnQpOworCQlmcHJpbnRmKHN0ZGVyciwgIk1lbW9yeSB0b3RhbDogICAgJTEwIiBQUkl1TUFYICIgS2lCXG4iLCAodG90YWxfYWxsb2NkICsgYWxsb2NfY291bnQqc2l6ZW9mKHN0cnVjdCBvYmplY3RfZW50cnkpKS8xMDI0KTsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgICAgcG9vbHM6ICAgICUxMGx1IEtpQlxuIiwgKHVuc2lnbmVkIGxvbmcpKHRvdGFsX2FsbG9jZC8xMDI0KSk7CisJCWZwcmludGYoc3RkZXJyLCAiICAgICBvYmplY3RzOiAgICAlMTAiIFBSSXVNQVggIiBLaUJcbiIsIChhbGxvY19jb3VudCpzaXplb2Yoc3RydWN0IG9iamVjdF9lbnRyeSkpLzEwMjQpOworCQlmcHJpbnRmKHN0ZGVyciwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJCXBhY2tfcmVwb3J0KCk7CisJCWZwcmludGYoc3RkZXJyLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKwkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCX0KKworCXJldHVybiBmYWlsdXJlID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS9mZXRjaC1wYWNrLmMgYi9mZXRjaC1wYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRhYmVlOQotLS0gL2Rldi9udWxsCisrKyBiL2ZldGNoLXBhY2suYwpAQCAtMCwwICsxLDEwNTkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKKyNpbmNsdWRlICJmZXRjaC1wYWNrLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJjb25uZWN0LmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisKK3N0YXRpYyBpbnQgdHJhbnNmZXJfdW5wYWNrX2xpbWl0ID0gLTE7CitzdGF0aWMgaW50IGZldGNoX3VucGFja19saW1pdCA9IC0xOworc3RhdGljIGludCB1bnBhY2tfbGltaXQgPSAxMDA7CitzdGF0aWMgaW50IHByZWZlcl9vZnNfZGVsdGEgPSAxOworc3RhdGljIGludCBub19kb25lOworc3RhdGljIGludCBmZXRjaF9mc2NrX29iamVjdHMgPSAtMTsKK3N0YXRpYyBpbnQgdHJhbnNmZXJfZnNja19vYmplY3RzID0gLTE7CitzdGF0aWMgaW50IGFnZW50X3N1cHBvcnRlZDsKK3N0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIHNoYWxsb3dfbG9jazsKK3N0YXRpYyBjb25zdCBjaGFyICphbHRlcm5hdGVfc2hhbGxvd19maWxlOworCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBDT01QTEVURQkoMVUgPDwgMCkKKyNkZWZpbmUgQ09NTU9OCQkoMVUgPDwgMSkKKyNkZWZpbmUgQ09NTU9OX1JFRgkoMVUgPDwgMikKKyNkZWZpbmUgU0VFTgkJKDFVIDw8IDMpCisjZGVmaW5lIFBPUFBFRAkJKDFVIDw8IDQpCisKK3N0YXRpYyBpbnQgbWFya2VkOworCisvKgorICogQWZ0ZXIgc2VuZGluZyB0aGlzIG1hbnkgImhhdmUicyBpZiB3ZSBkbyBub3QgZ2V0IGFueSBuZXcgQUNLICwgd2UKKyAqIGdpdmUgdXAgdHJhdmVyc2luZyBvdXIgaGlzdG9yeS4KKyAqLworI2RlZmluZSBNQVhfSU5fVkFJTiAyNTYKKworc3RhdGljIHN0cnVjdCBwcmlvX3F1ZXVlIHJldl9saXN0ID0geyBjb21wYXJlX2NvbW1pdHNfYnlfY29tbWl0X2RhdGUgfTsKK3N0YXRpYyBpbnQgbm9uX2NvbW1vbl9yZXZzLCBtdWx0aV9hY2ssIHVzZV9zaWRlYmFuZDsKKy8qIEFsbG93IHNwZWNpZnlpbmcgc2hhMSBpZiBpdCBpcyBhIHJlZiB0aXAuICovCisjZGVmaW5lIEFMTE9XX1RJUF9TSEExCTAxCisvKiBBbGxvdyByZXF1ZXN0IG9mIGEgc2hhMSBpZiBpdCBpcyByZWFjaGFibGUgZnJvbSBhIHJlZiAocG9zc2libHkgaGlkZGVuIHJlZikuICovCisjZGVmaW5lIEFMTE9XX1JFQUNIQUJMRV9TSEExCTAyCitzdGF0aWMgdW5zaWduZWQgaW50IGFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdDsKKworc3RhdGljIHZvaWQgcmV2X2xpc3RfcHVzaChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBtYXJrKQoreworCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgbWFyaykpIHsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gbWFyazsKKworCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCQlyZXR1cm47CisKKwkJcHJpb19xdWV1ZV9wdXQoJnJldl9saXN0LCBjb21taXQpOworCisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkKKwkJCW5vbl9jb21tb25fcmV2cysrOworCX0KK30KKworc3RhdGljIGludCByZXZfbGlzdF9pbnNlcnRfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG9iamVjdCAqbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qoc2hhMSksIHJlZm5hbWUsIDApOworCisJaWYgKG8gJiYgby0+dHlwZSA9PSBPQkpfQ09NTUlUKQorCQlyZXZfbGlzdF9wdXNoKChzdHJ1Y3QgY29tbWl0ICopbywgU0VFTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXZfbGlzdF9pbnNlcnRfcmVmX29pZChjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIHJldl9saXN0X2luc2VydF9yZWYocmVmbmFtZSwgb2lkLT5oYXNoKTsKK30KKworc3RhdGljIGludCBjbGVhcl9tYXJrcyhjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChvaWQtPmhhc2gpLCByZWZuYW1lLCAwKTsKKworCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJY2xlYXJfY29tbWl0X21hcmtzKChzdHJ1Y3QgY29tbWl0ICopbywKKwkJCQkgICBDT01NT04gfCBDT01NT05fUkVGIHwgU0VFTiB8IFBPUFBFRCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgICBUaGlzIGZ1bmN0aW9uIG1hcmtzIGEgcmV2IGFuZCBpdHMgYW5jZXN0b3JzIGFzIGNvbW1vbi4KKyAgIEluIHNvbWUgY2FzZXMsIGl0IGlzIGRlc2lyYWJsZSB0byBtYXJrIG9ubHkgdGhlIGFuY2VzdG9ycyAoZm9yIGV4YW1wbGUKKyAgIHdoZW4gb25seSB0aGUgc2VydmVyIGRvZXMgbm90IHlldCBrbm93IHRoYXQgdGhleSBhcmUgY29tbW9uKS4KKyovCisKK3N0YXRpYyB2b2lkIG1hcmtfY29tbW9uKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJaW50IGFuY2VzdG9yc19vbmx5LCBpbnQgZG9udF9wYXJzZSkKK3sKKwlpZiAoY29tbWl0ICE9IE5VTEwgJiYgIShjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikpIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IChzdHJ1Y3Qgb2JqZWN0ICopY29tbWl0OworCisJCWlmICghYW5jZXN0b3JzX29ubHkpCisJCQlvLT5mbGFncyB8PSBDT01NT047CisKKwkJaWYgKCEoby0+ZmxhZ3MgJiBTRUVOKSkKKwkJCXJldl9saXN0X3B1c2goY29tbWl0LCBTRUVOKTsKKwkJZWxzZSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwkJCWlmICghYW5jZXN0b3JzX29ubHkgJiYgIShvLT5mbGFncyAmIFBPUFBFRCkpCisJCQkJbm9uX2NvbW1vbl9yZXZzLS07CisJCQlpZiAoIW8tPnBhcnNlZCAmJiAhZG9udF9wYXJzZSkKKwkJCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCQkJCXJldHVybjsKKworCQkJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQkJCQlwYXJlbnRzOworCQkJCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkKKwkJCQltYXJrX2NvbW1vbihwYXJlbnRzLT5pdGVtLCAwLCBkb250X3BhcnNlKTsKKwkJfQorCX0KK30KKworLyoKKyAgR2V0IHRoZSBuZXh0IHJldiB0byBzZW5kLCBpZ25vcmluZyB0aGUgY29tbW9uLgorKi8KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmdldF9yZXYodm9pZCkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBOVUxMOworCisJd2hpbGUgKGNvbW1pdCA9PSBOVUxMKSB7CisJCXVuc2lnbmVkIGludCBtYXJrOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwkJaWYgKHJldl9saXN0Lm5yID09IDAgfHwgbm9uX2NvbW1vbl9yZXZzID09IDApCisJCQlyZXR1cm4gTlVMTDsKKworCQljb21taXQgPSBwcmlvX3F1ZXVlX2dldCgmcmV2X2xpc3QpOworCQlwYXJzZV9jb21taXQoY29tbWl0KTsKKwkJcGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsKKworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBQT1BQRUQ7CisJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OKSkKKwkJCW5vbl9jb21tb25fcmV2cy0tOworCisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikgeworCQkJLyogZG8gbm90IHNlbmQgImhhdmUiLCBhbmQgaWdub3JlIGFuY2VzdG9ycyAqLworCQkJY29tbWl0ID0gTlVMTDsKKwkJCW1hcmsgPSBDT01NT04gfCBTRUVOOworCQl9IGVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NTU9OX1JFRikKKwkJCS8qIHNlbmQgImhhdmUiLCBhbmQgaWdub3JlIGFuY2VzdG9ycyAqLworCQkJbWFyayA9IENPTU1PTiB8IFNFRU47CisJCWVsc2UKKwkJCS8qIHNlbmQgImhhdmUiLCBhbHNvIGZvciBpdHMgYW5jZXN0b3JzICovCisJCQltYXJrID0gU0VFTjsKKworCQl3aGlsZSAocGFyZW50cykgeworCQkJaWYgKCEocGFyZW50cy0+aXRlbS0+b2JqZWN0LmZsYWdzICYgU0VFTikpCisJCQkJcmV2X2xpc3RfcHVzaChwYXJlbnRzLT5pdGVtLCBtYXJrKTsKKwkJCWlmIChtYXJrICYgQ09NTU9OKQorCQkJCW1hcmtfY29tbW9uKHBhcmVudHMtPml0ZW0sIDEsIDApOworCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCX0KKwl9CisKKwlyZXR1cm4gY29tbWl0LT5vYmplY3Quc2hhMTsKK30KKworZW51bSBhY2tfdHlwZSB7CisJTkFLID0gMCwKKwlBQ0ssCisJQUNLX2NvbnRpbnVlLAorCUFDS19jb21tb24sCisJQUNLX3JlYWR5Cit9OworCitzdGF0aWMgdm9pZCBjb25zdW1lX3NoYWxsb3dfbGlzdChzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzICphcmdzLCBpbnQgZmQpCit7CisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMgJiYgYXJncy0+ZGVwdGggPiAwKSB7CisJCS8qIElmIHdlIHNlbnQgYSBkZXB0aCB3ZSB3aWxsIGdldCBiYWNrICJkdXBsaWNhdGUiCisJCSAqIHNoYWxsb3cgYW5kIHVuc2hhbGxvdyBjb21tYW5kcyBldmVyeSB0aW1lIHRoZXJlCisJCSAqIGlzIGEgYmxvY2sgb2YgaGF2ZSBsaW5lcyBleGNoYW5nZWQuCisJCSAqLworCQljaGFyICpsaW5lOworCQl3aGlsZSAoKGxpbmUgPSBwYWNrZXRfcmVhZF9saW5lKGZkLCBOVUxMKSkpIHsKKwkJCWlmIChzdGFydHNfd2l0aChsaW5lLCAic2hhbGxvdyAiKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzdGFydHNfd2l0aChsaW5lLCAidW5zaGFsbG93ICIpKQorCQkJCWNvbnRpbnVlOworCQkJZGllKCJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgc2hhbGxvdyBsaXN0Iik7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBlbnVtIGFja190eXBlIGdldF9hY2soaW50IGZkLCB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwlpbnQgbGVuOworCWNoYXIgKmxpbmUgPSBwYWNrZXRfcmVhZF9saW5lKGZkLCAmbGVuKTsKKwljb25zdCBjaGFyICphcmc7CisKKwlpZiAoIWxlbikKKwkJZGllKCJnaXQgZmV0Y2gtcGFjazogZXhwZWN0ZWQgQUNLL05BSywgZ290IEVPRiIpOworCWlmICghc3RyY21wKGxpbmUsICJOQUsiKSkKKwkJcmV0dXJuIE5BSzsKKwlpZiAoc2tpcF9wcmVmaXgobGluZSwgIkFDSyAiLCAmYXJnKSkgeworCQlpZiAoIWdldF9zaGExX2hleChhcmcsIHJlc3VsdF9zaGExKSkgeworCQkJYXJnICs9IDQwOworCQkJbGVuIC09IGFyZyAtIGxpbmU7CisJCQlpZiAobGVuIDwgMSkKKwkJCQlyZXR1cm4gQUNLOworCQkJaWYgKHN0cnN0cihhcmcsICJjb250aW51ZSIpKQorCQkJCXJldHVybiBBQ0tfY29udGludWU7CisJCQlpZiAoc3Ryc3RyKGFyZywgImNvbW1vbiIpKQorCQkJCXJldHVybiBBQ0tfY29tbW9uOworCQkJaWYgKHN0cnN0cihhcmcsICJyZWFkeSIpKQorCQkJCXJldHVybiBBQ0tfcmVhZHk7CisJCQlyZXR1cm4gQUNLOworCQl9CisJfQorCWRpZSgiZ2l0IGZldGNoX3BhY2s6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCAnJXMnIiwgbGluZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfcmVxdWVzdChzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzICphcmdzLAorCQkJIGludCBmZCwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWlmIChhcmdzLT5zdGF0ZWxlc3NfcnBjKSB7CisJCXNlbmRfc2lkZWJhbmQoZmQsIC0xLCBidWYtPmJ1ZiwgYnVmLT5sZW4sIExBUkdFX1BBQ0tFVF9NQVgpOworCQlwYWNrZXRfZmx1c2goZmQpOworCX0gZWxzZQorCQl3cml0ZV9vcl9kaWUoZmQsIGJ1Zi0+YnVmLCBidWYtPmxlbik7Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydF9vbmVfYWx0ZXJuYXRlX3JlZihjb25zdCBzdHJ1Y3QgcmVmICpyZWYsIHZvaWQgKnVudXNlZCkKK3sKKwlyZXZfbGlzdF9pbnNlcnRfcmVmKE5VTEwsIHJlZi0+b2xkX3NoYTEpOworfQorCisjZGVmaW5lIElOSVRJQUxfRkxVU0ggMTYKKyNkZWZpbmUgUElQRVNBRkVfRkxVU0ggMzIKKyNkZWZpbmUgTEFSR0VfRkxVU0ggMTAyNAorCitzdGF0aWMgaW50IG5leHRfZmx1c2goc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywgaW50IGNvdW50KQoreworCWludCBmbHVzaF9saW1pdCA9IGFyZ3MtPnN0YXRlbGVzc19ycGMgPyBMQVJHRV9GTFVTSCA6IFBJUEVTQUZFX0ZMVVNIOworCisJaWYgKGNvdW50IDwgZmx1c2hfbGltaXQpCisJCWNvdW50IDw8PSAxOworCWVsc2UKKwkJY291bnQgKz0gZmx1c2hfbGltaXQ7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGZpbmRfY29tbW9uKHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCSAgICAgICBpbnQgZmRbMl0sIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9zaGExLAorCQkgICAgICAgc3RydWN0IHJlZiAqcmVmcykKK3sKKwlpbnQgZmV0Y2hpbmc7CisJaW50IGNvdW50ID0gMCwgZmx1c2hlcyA9IDAsIGZsdXNoX2F0ID0gSU5JVElBTF9GTFVTSCwgcmV0dmFsOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7CisJdW5zaWduZWQgaW5fdmFpbiA9IDA7CisJaW50IGdvdF9jb250aW51ZSA9IDA7CisJaW50IGdvdF9yZWFkeSA9IDA7CisJc3RydWN0IHN0cmJ1ZiByZXFfYnVmID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IHN0YXRlX2xlbiA9IDA7CisKKwlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYyAmJiBtdWx0aV9hY2sgPT0gMSkKKwkJZGllKCItLXN0YXRlbGVzcy1ycGMgcmVxdWlyZXMgbXVsdGlfYWNrX2RldGFpbGVkIik7CisJaWYgKG1hcmtlZCkKKwkJZm9yX2VhY2hfcmVmKGNsZWFyX21hcmtzLCBOVUxMKTsKKwltYXJrZWQgPSAxOworCisJZm9yX2VhY2hfcmVmKHJldl9saXN0X2luc2VydF9yZWZfb2lkLCBOVUxMKTsKKwlmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKGluc2VydF9vbmVfYWx0ZXJuYXRlX3JlZiwgTlVMTCk7CisKKwlmZXRjaGluZyA9IDA7CisJZm9yICggOyByZWZzIDsgcmVmcyA9IHJlZnMtPm5leHQpIHsKKwkJdW5zaWduZWQgY2hhciAqcmVtb3RlID0gcmVmcy0+b2xkX3NoYTE7CisJCWNvbnN0IGNoYXIgKnJlbW90ZV9oZXg7CisJCXN0cnVjdCBvYmplY3QgKm87CisKKwkJLyoKKwkJICogSWYgdGhhdCBvYmplY3QgaXMgY29tcGxldGUgKGkuZS4gaXQgaXMgYW4gYW5jZXN0b3Igb2YgYQorCQkgKiBsb2NhbCByZWYpLCB3ZSB0ZWxsIHRoZW0gd2UgaGF2ZSBpdCBidXQgZG8gbm90IGhhdmUgdG8KKwkJICogdGVsbCB0aGVtIGFib3V0IGl0cyBhbmNlc3RvcnMsIHdoaWNoIHRoZXkgYWxyZWFkeSBrbm93CisJCSAqIGFib3V0LgorCQkgKgorCQkgKiBXZSB1c2UgbG9va3VwX29iamVjdCBoZXJlIGJlY2F1c2Ugd2UgYXJlIG9ubHkKKwkJICogaW50ZXJlc3RlZCBpbiB0aGUgY2FzZSB3ZSAqa25vdyogdGhlIG9iamVjdCBpcworCQkgKiByZWFjaGFibGUgYW5kIHdlIGhhdmUgYWxyZWFkeSBzY2FubmVkIGl0LgorCQkgKi8KKwkJaWYgKCgobyA9IGxvb2t1cF9vYmplY3QocmVtb3RlKSkgIT0gTlVMTCkgJiYKKwkJCQkoby0+ZmxhZ3MgJiBDT01QTEVURSkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmVtb3RlX2hleCA9IHNoYTFfdG9faGV4KHJlbW90ZSk7CisJCWlmICghZmV0Y2hpbmcpIHsKKwkJCXN0cnVjdCBzdHJidWYgYyA9IFNUUkJVRl9JTklUOworCQkJaWYgKG11bHRpX2FjayA9PSAyKSAgICAgc3RyYnVmX2FkZHN0cigmYywgIiBtdWx0aV9hY2tfZGV0YWlsZWQiKTsKKwkJCWlmIChtdWx0aV9hY2sgPT0gMSkgICAgIHN0cmJ1Zl9hZGRzdHIoJmMsICIgbXVsdGlfYWNrIik7CisJCQlpZiAobm9fZG9uZSkgICAgICAgICAgICBzdHJidWZfYWRkc3RyKCZjLCAiIG5vLWRvbmUiKTsKKwkJCWlmICh1c2Vfc2lkZWJhbmQgPT0gMikgIHN0cmJ1Zl9hZGRzdHIoJmMsICIgc2lkZS1iYW5kLTY0ayIpOworCQkJaWYgKHVzZV9zaWRlYmFuZCA9PSAxKSAgc3RyYnVmX2FkZHN0cigmYywgIiBzaWRlLWJhbmQiKTsKKwkJCWlmIChhcmdzLT51c2VfdGhpbl9wYWNrKSBzdHJidWZfYWRkc3RyKCZjLCAiIHRoaW4tcGFjayIpOworCQkJaWYgKGFyZ3MtPm5vX3Byb2dyZXNzKSAgIHN0cmJ1Zl9hZGRzdHIoJmMsICIgbm8tcHJvZ3Jlc3MiKTsKKwkJCWlmIChhcmdzLT5pbmNsdWRlX3RhZykgICBzdHJidWZfYWRkc3RyKCZjLCAiIGluY2x1ZGUtdGFnIik7CisJCQlpZiAocHJlZmVyX29mc19kZWx0YSkgICBzdHJidWZfYWRkc3RyKCZjLCAiIG9mcy1kZWx0YSIpOworCQkJaWYgKGFnZW50X3N1cHBvcnRlZCkgICAgc3RyYnVmX2FkZGYoJmMsICIgYWdlbnQ9JXMiLAorCQkJCQkJCSAgICBnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQoKSk7CisJCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAid2FudCAlcyVzXG4iLCByZW1vdGVfaGV4LCBjLmJ1Zik7CisJCQlzdHJidWZfcmVsZWFzZSgmYyk7CisJCX0gZWxzZQorCQkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgIndhbnQgJXNcbiIsIHJlbW90ZV9oZXgpOworCQlmZXRjaGluZysrOworCX0KKworCWlmICghZmV0Y2hpbmcpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnJlcV9idWYpOworCQlwYWNrZXRfZmx1c2goZmRbMV0pOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoaXNfcmVwb3NpdG9yeV9zaGFsbG93KCkpCisJCXdyaXRlX3NoYWxsb3dfY29tbWl0cygmcmVxX2J1ZiwgMSwgTlVMTCk7CisJaWYgKGFyZ3MtPmRlcHRoID4gMCkKKwkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgImRlZXBlbiAlZCIsIGFyZ3MtPmRlcHRoKTsKKwlwYWNrZXRfYnVmX2ZsdXNoKCZyZXFfYnVmKTsKKwlzdGF0ZV9sZW4gPSByZXFfYnVmLmxlbjsKKworCWlmIChhcmdzLT5kZXB0aCA+IDApIHsKKwkJY2hhciAqbGluZTsKKwkJY29uc3QgY2hhciAqYXJnOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJCXNlbmRfcmVxdWVzdChhcmdzLCBmZFsxXSwgJnJlcV9idWYpOworCQl3aGlsZSAoKGxpbmUgPSBwYWNrZXRfcmVhZF9saW5lKGZkWzBdLCBOVUxMKSkpIHsKKwkJCWlmIChza2lwX3ByZWZpeChsaW5lLCAic2hhbGxvdyAiLCAmYXJnKSkgeworCQkJCWlmIChnZXRfc2hhMV9oZXgoYXJnLCBzaGExKSkKKwkJCQkJZGllKCJpbnZhbGlkIHNoYWxsb3cgbGluZTogJXMiLCBsaW5lKTsKKwkJCQlyZWdpc3Rlcl9zaGFsbG93KHNoYTEpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHNraXBfcHJlZml4KGxpbmUsICJ1bnNoYWxsb3cgIiwgJmFyZykpIHsKKwkJCQlpZiAoZ2V0X3NoYTFfaGV4KGFyZywgc2hhMSkpCisJCQkJCWRpZSgiaW52YWxpZCB1bnNoYWxsb3cgbGluZTogJXMiLCBsaW5lKTsKKwkJCQlpZiAoIWxvb2t1cF9vYmplY3Qoc2hhMSkpCisJCQkJCWRpZSgib2JqZWN0IG5vdCBmb3VuZDogJXMiLCBsaW5lKTsKKwkJCQkvKiBtYWtlIHN1cmUgdGhhdCBpdCBpcyBwYXJzZWQgYXMgc2hhbGxvdyAqLworCQkJCWlmICghcGFyc2Vfb2JqZWN0KHNoYTEpKQorCQkJCQlkaWUoImVycm9yIGluIG9iamVjdDogJXMiLCBsaW5lKTsKKwkJCQlpZiAodW5yZWdpc3Rlcl9zaGFsbG93KHNoYTEpKQorCQkJCQlkaWUoIm5vIHNoYWxsb3cgZm91bmQ6ICVzIiwgbGluZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlkaWUoImV4cGVjdGVkIHNoYWxsb3cvdW5zaGFsbG93LCBnb3QgJXMiLCBsaW5lKTsKKwkJfQorCX0gZWxzZSBpZiAoIWFyZ3MtPnN0YXRlbGVzc19ycGMpCisJCXNlbmRfcmVxdWVzdChhcmdzLCBmZFsxXSwgJnJlcV9idWYpOworCisJaWYgKCFhcmdzLT5zdGF0ZWxlc3NfcnBjKSB7CisJCS8qIElmIHdlIGFyZW4ndCB1c2luZyB0aGUgc3RhdGVsZXNzLXJwYyBpbnRlcmZhY2UKKwkJICogd2UgZG9uJ3QgbmVlZCB0byByZXRhaW4gdGhlIGhlYWRlcnMuCisJCSAqLworCQlzdHJidWZfc2V0bGVuKCZyZXFfYnVmLCAwKTsKKwkJc3RhdGVfbGVuID0gMDsKKwl9CisKKwlmbHVzaGVzID0gMDsKKwlyZXR2YWwgPSAtMTsKKwl3aGlsZSAoKHNoYTEgPSBnZXRfcmV2KCkpKSB7CisJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICJoYXZlICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CisJCWlmIChhcmdzLT52ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICJoYXZlICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7CisJCWluX3ZhaW4rKzsKKwkJaWYgKGZsdXNoX2F0IDw9ICsrY291bnQpIHsKKwkJCWludCBhY2s7CisKKwkJCXBhY2tldF9idWZfZmx1c2goJnJlcV9idWYpOworCQkJc2VuZF9yZXF1ZXN0KGFyZ3MsIGZkWzFdLCAmcmVxX2J1Zik7CisJCQlzdHJidWZfc2V0bGVuKCZyZXFfYnVmLCBzdGF0ZV9sZW4pOworCQkJZmx1c2hlcysrOworCQkJZmx1c2hfYXQgPSBuZXh0X2ZsdXNoKGFyZ3MsIGNvdW50KTsKKworCQkJLyoKKwkJCSAqIFdlIGtlZXAgb25lIHdpbmRvdyAiYWhlYWQiIG9mIHRoZSBvdGhlciBzaWRlLCBhbmQKKwkJCSAqIHdpbGwgd2FpdCBmb3IgYW4gQUNLIG9ubHkgb24gdGhlIG5leHQgb25lCisJCQkgKi8KKwkJCWlmICghYXJncy0+c3RhdGVsZXNzX3JwYyAmJiBjb3VudCA9PSBJTklUSUFMX0ZMVVNIKQorCQkJCWNvbnRpbnVlOworCisJCQljb25zdW1lX3NoYWxsb3dfbGlzdChhcmdzLCBmZFswXSk7CisJCQlkbyB7CisJCQkJYWNrID0gZ2V0X2FjayhmZFswXSwgcmVzdWx0X3NoYTEpOworCQkJCWlmIChhcmdzLT52ZXJib3NlICYmIGFjaykKKwkJCQkJZnByaW50ZihzdGRlcnIsICJnb3QgYWNrICVkICVzXG4iLCBhY2ssCisJCQkJCQkJc2hhMV90b19oZXgocmVzdWx0X3NoYTEpKTsKKwkJCQlzd2l0Y2ggKGFjaykgeworCQkJCWNhc2UgQUNLOgorCQkJCQlmbHVzaGVzID0gMDsKKwkJCQkJbXVsdGlfYWNrID0gMDsKKwkJCQkJcmV0dmFsID0gMDsKKwkJCQkJZ290byBkb25lOworCQkJCWNhc2UgQUNLX2NvbW1vbjoKKwkJCQljYXNlIEFDS19yZWFkeToKKwkJCQljYXNlIEFDS19jb250aW51ZTogeworCQkJCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPQorCQkJCQkJbG9va3VwX2NvbW1pdChyZXN1bHRfc2hhMSk7CisJCQkJCWlmICghY29tbWl0KQorCQkJCQkJZGllKCJpbnZhbGlkIGNvbW1pdCAlcyIsIHNoYTFfdG9faGV4KHJlc3VsdF9zaGExKSk7CisJCQkJCWlmIChhcmdzLT5zdGF0ZWxlc3NfcnBjCisJCQkJCSAmJiBhY2sgPT0gQUNLX2NvbW1vbgorCQkJCQkgJiYgIShjb21taXQtPm9iamVjdC5mbGFncyAmIENPTU1PTikpIHsKKwkJCQkJCS8qIFdlIG5lZWQgdG8gcmVwbGF5IHRoZSBoYXZlIGZvciB0aGlzIG9iamVjdAorCQkJCQkJICogb24gdGhlIG5leHQgUlBDIHJlcXVlc3Qgc28gdGhlIHBlZXIga25vd3MKKwkJCQkJCSAqIGl0IGlzIGluIGNvbW1vbiB3aXRoIHVzLgorCQkJCQkJICovCisJCQkJCQljb25zdCBjaGFyICpoZXggPSBzaGExX3RvX2hleChyZXN1bHRfc2hhMSk7CisJCQkJCQlwYWNrZXRfYnVmX3dyaXRlKCZyZXFfYnVmLCAiaGF2ZSAlc1xuIiwgaGV4KTsKKwkJCQkJCXN0YXRlX2xlbiA9IHJlcV9idWYubGVuOworCQkJCQl9CisJCQkJCW1hcmtfY29tbW9uKGNvbW1pdCwgMCwgMSk7CisJCQkJCXJldHZhbCA9IDA7CisJCQkJCWluX3ZhaW4gPSAwOworCQkJCQlnb3RfY29udGludWUgPSAxOworCQkJCQlpZiAoYWNrID09IEFDS19yZWFkeSkgeworCQkJCQkJY2xlYXJfcHJpb19xdWV1ZSgmcmV2X2xpc3QpOworCQkJCQkJZ290X3JlYWR5ID0gMTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0gd2hpbGUgKGFjayk7CisJCQlmbHVzaGVzLS07CisJCQlpZiAoZ290X2NvbnRpbnVlICYmIE1BWF9JTl9WQUlOIDwgaW5fdmFpbikgeworCQkJCWlmIChhcmdzLT52ZXJib3NlKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgImdpdmluZyB1cFxuIik7CisJCQkJYnJlYWs7IC8qIGdpdmUgdXAgKi8KKwkJCX0KKwkJfQorCX0KK2RvbmU6CisJaWYgKCFnb3RfcmVhZHkgfHwgIW5vX2RvbmUpIHsKKwkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwgImRvbmVcbiIpOworCQlzZW5kX3JlcXVlc3QoYXJncywgZmRbMV0sICZyZXFfYnVmKTsKKwl9CisJaWYgKGFyZ3MtPnZlcmJvc2UpCisJCWZwcmludGYoc3RkZXJyLCAiZG9uZVxuIik7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCW11bHRpX2FjayA9IDA7CisJCWZsdXNoZXMrKzsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnJlcV9idWYpOworCisJaWYgKCFnb3RfcmVhZHkgfHwgIW5vX2RvbmUpCisJCWNvbnN1bWVfc2hhbGxvd19saXN0KGFyZ3MsIGZkWzBdKTsKKwl3aGlsZSAoZmx1c2hlcyB8fCBtdWx0aV9hY2spIHsKKwkJaW50IGFjayA9IGdldF9hY2soZmRbMF0sIHJlc3VsdF9zaGExKTsKKwkJaWYgKGFjaykgeworCQkJaWYgKGFyZ3MtPnZlcmJvc2UpCisJCQkJZnByaW50ZihzdGRlcnIsICJnb3QgYWNrICglZCkgJXNcbiIsIGFjaywKKwkJCQkJc2hhMV90b19oZXgocmVzdWx0X3NoYTEpKTsKKwkJCWlmIChhY2sgPT0gQUNLKQorCQkJCXJldHVybiAwOworCQkJbXVsdGlfYWNrID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZsdXNoZXMtLTsKKwl9CisJLyogaXQgaXMgbm8gZXJyb3IgdG8gZmV0Y2ggaW50byBhIGNvbXBsZXRlbHkgZW1wdHkgcmVwbyAqLworCXJldHVybiBjb3VudCA/IHJldHZhbCA6IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbXBsZXRlOworCitzdGF0aWMgaW50IG1hcmtfY29tcGxldGUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCisJd2hpbGUgKG8gJiYgby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCXN0cnVjdCB0YWcgKnQgPSAoc3RydWN0IHRhZyAqKSBvOworCQlpZiAoIXQtPnRhZ2dlZCkKKwkJCWJyZWFrOyAvKiBicm9rZW4gcmVwb3NpdG9yeSAqLworCQlvLT5mbGFncyB8PSBDT01QTEVURTsKKwkJbyA9IHBhcnNlX29iamVjdCh0LT50YWdnZWQtPnNoYTEpOworCX0KKwlpZiAobyAmJiBvLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvOworCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIENPTVBMRVRFKSkgeworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gQ09NUExFVEU7CisJCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmY29tcGxldGUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hcmtfY29tcGxldGVfb2lkKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIG1hcmtfY29tcGxldGUob2lkLT5oYXNoKTsKK30KKworc3RhdGljIHZvaWQgbWFya19yZWNlbnRfY29tcGxldGVfY29tbWl0cyhzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzICphcmdzLAorCQkJCQkgdW5zaWduZWQgbG9uZyBjdXRvZmYpCit7CisJd2hpbGUgKGNvbXBsZXRlICYmIGN1dG9mZiA8PSBjb21wbGV0ZS0+aXRlbS0+ZGF0ZSkgeworCQlpZiAoYXJncy0+dmVyYm9zZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiTWFya2luZyAlcyBhcyBjb21wbGV0ZVxuIiwKKwkJCQlzaGExX3RvX2hleChjb21wbGV0ZS0+aXRlbS0+b2JqZWN0LnNoYTEpKTsKKwkJcG9wX21vc3RfcmVjZW50X2NvbW1pdCgmY29tcGxldGUsIENPTVBMRVRFKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZpbHRlcl9yZWZzKHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQlzdHJ1Y3QgcmVmICoqcmVmcywKKwkJCXN0cnVjdCByZWYgKipzb3VnaHQsIGludCBucl9zb3VnaHQpCit7CisJc3RydWN0IHJlZiAqbmV3bGlzdCA9IE5VTEw7CisJc3RydWN0IHJlZiAqKm5ld3RhaWwgPSAmbmV3bGlzdDsKKwlzdHJ1Y3QgcmVmICpyZWYsICpuZXh0OworCWludCBpOworCisJaSA9IDA7CisJZm9yIChyZWYgPSAqcmVmczsgcmVmOyByZWYgPSBuZXh0KSB7CisJCWludCBrZWVwID0gMDsKKwkJbmV4dCA9IHJlZi0+bmV4dDsKKworCQlpZiAoc3RhcnRzX3dpdGgocmVmLT5uYW1lLCAicmVmcy8iKSAmJgorCQkgICAgY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmLT5uYW1lLCAwKSkKKwkJCTsgLyogdHJhc2ggKi8KKwkJZWxzZSB7CisJCQl3aGlsZSAoaSA8IG5yX3NvdWdodCkgeworCQkJCWludCBjbXAgPSBzdHJjbXAocmVmLT5uYW1lLCBzb3VnaHRbaV0tPm5hbWUpOworCQkJCWlmIChjbXAgPCAwKQorCQkJCQlicmVhazsgLyogZGVmaW5pdGVseSBkbyBub3QgaGF2ZSBpdCAqLworCQkJCWVsc2UgaWYgKGNtcCA9PSAwKSB7CisJCQkJCWtlZXAgPSAxOyAvKiBkZWZpbml0ZWx5IGhhdmUgaXQgKi8KKwkJCQkJc291Z2h0W2ldLT5tYXRjaGVkID0gMTsKKwkJCQl9CisJCQkJaSsrOworCQkJfQorCQl9CisKKwkJaWYgKCFrZWVwICYmIGFyZ3MtPmZldGNoX2FsbCAmJgorCQkgICAgKCFhcmdzLT5kZXB0aCB8fCAhc3RhcnRzX3dpdGgocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpKSkKKwkJCWtlZXAgPSAxOworCisJCWlmIChrZWVwKSB7CisJCQkqbmV3dGFpbCA9IHJlZjsKKwkJCXJlZi0+bmV4dCA9IE5VTEw7CisJCQluZXd0YWlsID0gJnJlZi0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCWZyZWUocmVmKTsKKwkJfQorCX0KKworCS8qIEFwcGVuZCB1bm1hdGNoZWQgcmVxdWVzdHMgdG8gdGhlIGxpc3QgKi8KKwlpZiAoKGFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCAmCisJICAgIChBTExPV19USVBfU0hBMSB8IEFMTE9XX1JFQUNIQUJMRV9TSEExKSkpIHsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3NvdWdodDsgaSsrKSB7CisJCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJCQlyZWYgPSBzb3VnaHRbaV07CisJCQlpZiAocmVmLT5tYXRjaGVkKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGdldF9zaGExX2hleChyZWYtPm5hbWUsIHNoYTEpIHx8CisJCQkgICAgcmVmLT5uYW1lWzQwXSAhPSAnXDAnIHx8CisJCQkgICAgaGFzaGNtcChzaGExLCByZWYtPm9sZF9zaGExKSkKKwkJCQljb250aW51ZTsKKworCQkJcmVmLT5tYXRjaGVkID0gMTsKKwkJCSpuZXd0YWlsID0gY29weV9yZWYocmVmKTsKKwkJCW5ld3RhaWwgPSAmKCpuZXd0YWlsKS0+bmV4dDsKKwkJfQorCX0KKwkqcmVmcyA9IG5ld2xpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfYWx0ZXJuYXRlX2NvbXBsZXRlKGNvbnN0IHN0cnVjdCByZWYgKnJlZiwgdm9pZCAqdW51c2VkKQoreworCW1hcmtfY29tcGxldGUocmVmLT5vbGRfc2hhMSk7Cit9CisKK3N0YXRpYyBpbnQgZXZlcnl0aGluZ19sb2NhbChzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzICphcmdzLAorCQkJICAgIHN0cnVjdCByZWYgKipyZWZzLAorCQkJICAgIHN0cnVjdCByZWYgKipzb3VnaHQsIGludCBucl9zb3VnaHQpCit7CisJc3RydWN0IHJlZiAqcmVmOworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBjdXRvZmYgPSAwOworCisJc2F2ZV9jb21taXRfYnVmZmVyID0gMDsKKworCWZvciAocmVmID0gKnJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN0cnVjdCBvYmplY3QgKm87CisKKwkJaWYgKCFoYXNfc2hhMV9maWxlKHJlZi0+b2xkX3NoYTEpKQorCQkJY29udGludWU7CisKKwkJbyA9IHBhcnNlX29iamVjdChyZWYtPm9sZF9zaGExKTsKKwkJaWYgKCFvKQorCQkJY29udGludWU7CisKKwkJLyogV2UgYWxyZWFkeSBoYXZlIGl0IC0tIHdoaWNoIG1heSBtZWFuIHRoYXQgd2Ugd2VyZQorCQkgKiBpbiBzeW5jIHdpdGggdGhlIG90aGVyIHNpZGUgYXQgc29tZSB0aW1lIGFmdGVyCisJCSAqIHRoYXQgKGl0IGlzIE9LIGlmIHdlIGd1ZXNzIHdyb25nIGhlcmUpLgorCQkgKi8KKwkJaWYgKG8tPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKilvOworCQkJaWYgKCFjdXRvZmYgfHwgY3V0b2ZmIDwgY29tbWl0LT5kYXRlKQorCQkJCWN1dG9mZiA9IGNvbW1pdC0+ZGF0ZTsKKwkJfQorCX0KKworCWlmICghYXJncy0+ZGVwdGgpIHsKKwkJZm9yX2VhY2hfcmVmKG1hcmtfY29tcGxldGVfb2lkLCBOVUxMKTsKKwkJZm9yX2VhY2hfYWx0ZXJuYXRlX3JlZihtYXJrX2FsdGVybmF0ZV9jb21wbGV0ZSwgTlVMTCk7CisJCWNvbW1pdF9saXN0X3NvcnRfYnlfZGF0ZSgmY29tcGxldGUpOworCQlpZiAoY3V0b2ZmKQorCQkJbWFya19yZWNlbnRfY29tcGxldGVfY29tbWl0cyhhcmdzLCBjdXRvZmYpOworCX0KKworCS8qCisJICogTWFyayBhbGwgY29tcGxldGUgcmVtb3RlIHJlZnMgYXMgY29tbW9uIHJlZnMuCisJICogRG9uJ3QgbWFyayB0aGVtIGNvbW1vbiB5ZXQ7IHRoZSBzZXJ2ZXIgaGFzIHRvIGJlIHRvbGQgc28gZmlyc3QuCisJICovCisJZm9yIChyZWYgPSAqcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IGRlcmVmX3RhZyhsb29rdXBfb2JqZWN0KHJlZi0+b2xkX3NoYTEpLAorCQkJCQkgICAgIE5VTEwsIDApOworCisJCWlmICghbyB8fCBvLT50eXBlICE9IE9CSl9DT01NSVQgfHwgIShvLT5mbGFncyAmIENPTVBMRVRFKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghKG8tPmZsYWdzICYgU0VFTikpIHsKKwkJCXJldl9saXN0X3B1c2goKHN0cnVjdCBjb21taXQgKilvLCBDT01NT05fUkVGIHwgU0VFTik7CisKKwkJCW1hcmtfY29tbW9uKChzdHJ1Y3QgY29tbWl0ICopbywgMSwgMSk7CisJCX0KKwl9CisKKwlmaWx0ZXJfcmVmcyhhcmdzLCByZWZzLCBzb3VnaHQsIG5yX3NvdWdodCk7CisKKwlmb3IgKHJldHZhbCA9IDEsIHJlZiA9ICpyZWZzOyByZWYgOyByZWYgPSByZWYtPm5leHQpIHsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqcmVtb3RlID0gcmVmLT5vbGRfc2hhMTsKKwkJc3RydWN0IG9iamVjdCAqbzsKKworCQlvID0gbG9va3VwX29iamVjdChyZW1vdGUpOworCQlpZiAoIW8gfHwgIShvLT5mbGFncyAmIENPTVBMRVRFKSkgeworCQkJcmV0dmFsID0gMDsKKwkJCWlmICghYXJncy0+dmVyYm9zZSkKKwkJCQljb250aW51ZTsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJ3YW50ICVzICglcylcbiIsIHNoYTFfdG9faGV4KHJlbW90ZSksCisJCQkJcmVmLT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghYXJncy0+dmVyYm9zZSkKKwkJCWNvbnRpbnVlOworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJhbHJlYWR5IGhhdmUgJXMgKCVzKVxuIiwgc2hhMV90b19oZXgocmVtb3RlKSwKKwkJCXJlZi0+bmFtZSk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgc2lkZWJhbmRfZGVtdXgoaW50IGluLCBpbnQgb3V0LCB2b2lkICpkYXRhKQoreworCWludCAqeGQgPSBkYXRhOworCisJaW50IHJldCA9IHJlY3Zfc2lkZWJhbmQoImZldGNoLXBhY2siLCB4ZFswXSwgb3V0KTsKKwljbG9zZShvdXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3BhY2soc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJICAgIGludCB4ZFsyXSwgY2hhciAqKnBhY2tfbG9ja2ZpbGUpCit7CisJc3RydWN0IGFzeW5jIGRlbXV4OworCWludCBkb19rZWVwID0gYXJncy0+a2VlcF9wYWNrOworCWNvbnN0IGNoYXIgKmNtZF9uYW1lOworCXN0cnVjdCBwYWNrX2hlYWRlciBoZWFkZXI7CisJaW50IHBhc3NfaGVhZGVyID0gMDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IHJldDsKKworCW1lbXNldCgmZGVtdXgsIDAsIHNpemVvZihkZW11eCkpOworCWlmICh1c2Vfc2lkZWJhbmQpIHsKKwkJLyogeGRbXSBpcyB0YWxraW5nIHdpdGggdXBsb2FkLXBhY2s7IHN1YnByb2Nlc3MgcmVhZHMgZnJvbQorCQkgKiB4ZFswXSwgc3BpdHMgb3V0IGJhbmQjMiB0byBzdGRlcnIsIGFuZCBmZWVkcyB1cyBiYW5kIzEKKwkJICogdGhyb3VnaCBkZW11eC0+b3V0LgorCQkgKi8KKwkJZGVtdXgucHJvYyA9IHNpZGViYW5kX2RlbXV4OworCQlkZW11eC5kYXRhID0geGQ7CisJCWRlbXV4Lm91dCA9IC0xOworCQlpZiAoc3RhcnRfYXN5bmMoJmRlbXV4KSkKKwkJCWRpZSgiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIHNpZGViYW5kIgorCQkJICAgICIgZGVtdWx0aXBsZXhlciIpOworCX0KKwllbHNlCisJCWRlbXV4Lm91dCA9IHhkWzBdOworCisJaWYgKCFhcmdzLT5rZWVwX3BhY2sgJiYgdW5wYWNrX2xpbWl0KSB7CisKKwkJaWYgKHJlYWRfcGFja19oZWFkZXIoZGVtdXgub3V0LCAmaGVhZGVyKSkKKwkJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGJhZCBwYWNrIGhlYWRlciIpOworCQlwYXNzX2hlYWRlciA9IDE7CisJCWlmIChudG9obChoZWFkZXIuaGRyX2VudHJpZXMpIDwgdW5wYWNrX2xpbWl0KQorCQkJZG9fa2VlcCA9IDA7CisJCWVsc2UKKwkJCWRvX2tlZXAgPSAxOworCX0KKworCWlmIChhbHRlcm5hdGVfc2hhbGxvd19maWxlKSB7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsICItLXNoYWxsb3ctZmlsZSIpOworCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCBhbHRlcm5hdGVfc2hhbGxvd19maWxlKTsKKwl9CisKKwlpZiAoZG9fa2VlcCkgeworCQlpZiAocGFja19sb2NrZmlsZSkKKwkJCWNtZC5vdXQgPSAtMTsKKwkJY21kX25hbWUgPSAiaW5kZXgtcGFjayI7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIGNtZF9uYW1lKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi0tc3RkaW4iKTsKKwkJaWYgKCFhcmdzLT5xdWlldCAmJiAhYXJncy0+bm9fcHJvZ3Jlc3MpCisJCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLXYiKTsKKwkJaWYgKGFyZ3MtPnVzZV90aGluX3BhY2spCisJCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1maXgtdGhpbiIpOworCQlpZiAoYXJncy0+bG9ja19wYWNrIHx8IHVucGFja19saW1pdCkgeworCQkJY2hhciBob3N0bmFtZVsyNTZdOworCQkJaWYgKGdldGhvc3RuYW1lKGhvc3RuYW1lLCBzaXplb2YoaG9zdG5hbWUpKSkKKwkJCQl4c25wcmludGYoaG9zdG5hbWUsIHNpemVvZihob3N0bmFtZSksICJsb2NhbGhvc3QiKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNtZC5hcmdzLAorCQkJCQkiLS1rZWVwPWZldGNoLXBhY2sgJSJQUkl1TUFYICIgb24gJXMiLAorCQkJCQkodWludG1heF90KWdldHBpZCgpLCBob3N0bmFtZSk7CisJCX0KKwkJaWYgKGFyZ3MtPmNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQpCisJCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1jaGVjay1zZWxmLWNvbnRhaW5lZC1hbmQtY29ubmVjdGVkIik7CisJfQorCWVsc2UgeworCQljbWRfbmFtZSA9ICJ1bnBhY2stb2JqZWN0cyI7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmY21kLmFyZ3MsIGNtZF9uYW1lKTsKKwkJaWYgKGFyZ3MtPnF1aWV0IHx8IGFyZ3MtPm5vX3Byb2dyZXNzKQorCQkJYXJndl9hcnJheV9wdXNoKCZjbWQuYXJncywgIi1xIik7CisJCWFyZ3MtPmNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgPSAwOworCX0KKworCWlmIChwYXNzX2hlYWRlcikKKwkJYXJndl9hcnJheV9wdXNoZigmY21kLmFyZ3MsICItLXBhY2tfaGVhZGVyPSUiUFJJdTMyIiwlIlBSSXUzMiwKKwkJCQkgbnRvaGwoaGVhZGVyLmhkcl92ZXJzaW9uKSwKKwkJCQkgbnRvaGwoaGVhZGVyLmhkcl9lbnRyaWVzKSk7CisJaWYgKGZldGNoX2ZzY2tfb2JqZWN0cyA+PSAwCisJICAgID8gZmV0Y2hfZnNja19vYmplY3RzCisJICAgIDogdHJhbnNmZXJfZnNja19vYmplY3RzID49IDAKKwkgICAgPyB0cmFuc2Zlcl9mc2NrX29iamVjdHMKKwkgICAgOiAwKQorCQlhcmd2X2FycmF5X3B1c2goJmNtZC5hcmdzLCAiLS1zdHJpY3QiKTsKKworCWNtZC5pbiA9IGRlbXV4Lm91dDsKKwljbWQuZ2l0X2NtZCA9IDE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNtZCkpCisJCWRpZSgiZmV0Y2gtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmICVzIiwgY21kX25hbWUpOworCWlmIChkb19rZWVwICYmIHBhY2tfbG9ja2ZpbGUpIHsKKwkJKnBhY2tfbG9ja2ZpbGUgPSBpbmRleF9wYWNrX2xvY2tmaWxlKGNtZC5vdXQpOworCQljbG9zZShjbWQub3V0KTsKKwl9CisKKwlpZiAoIXVzZV9zaWRlYmFuZCkKKwkJLyogQ2xvc2VkIGJ5IHN0YXJ0X2NvbW1hbmQoKSAqLworCQl4ZFswXSA9IC0xOworCisJcmV0ID0gZmluaXNoX2NvbW1hbmQoJmNtZCk7CisJaWYgKCFyZXQgfHwgKGFyZ3MtPmNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgJiYgcmV0ID09IDEpKQorCQlhcmdzLT5zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0KKwkJCWFyZ3MtPmNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgJiYKKwkJCXJldCA9PSAwOworCWVsc2UKKwkJZGllKCIlcyBmYWlsZWQiLCBjbWRfbmFtZSk7CisJaWYgKHVzZV9zaWRlYmFuZCAmJiBmaW5pc2hfYXN5bmMoJmRlbXV4KSkKKwkJZGllKCJlcnJvciBpbiBzaWRlYmFuZCBkZW11bHRpcGxleGVyIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY21wX3JlZl9ieV9uYW1lKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwljb25zdCBzdHJ1Y3QgcmVmICphID0gKigoY29uc3Qgc3RydWN0IHJlZiAqKilhXyk7CisJY29uc3Qgc3RydWN0IHJlZiAqYiA9ICooKGNvbnN0IHN0cnVjdCByZWYgKiopYl8pOworCXJldHVybiBzdHJjbXAoYS0+bmFtZSwgYi0+bmFtZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpkb19mZXRjaF9wYWNrKHN0cnVjdCBmZXRjaF9wYWNrX2FyZ3MgKmFyZ3MsCisJCQkJIGludCBmZFsyXSwKKwkJCQkgY29uc3Qgc3RydWN0IHJlZiAqb3JpZ19yZWYsCisJCQkJIHN0cnVjdCByZWYgKipzb3VnaHQsIGludCBucl9zb3VnaHQsCisJCQkJIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpLAorCQkJCSBjaGFyICoqcGFja19sb2NrZmlsZSkKK3sKKwlzdHJ1Y3QgcmVmICpyZWYgPSBjb3B5X3JlZl9saXN0KG9yaWdfcmVmKTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNvbnN0IGNoYXIgKmFnZW50X2ZlYXR1cmU7CisJaW50IGFnZW50X2xlbjsKKworCXNvcnRfcmVmX2xpc3QoJnJlZiwgcmVmX2NvbXBhcmVfbmFtZSk7CisJcXNvcnQoc291Z2h0LCBucl9zb3VnaHQsIHNpemVvZigqc291Z2h0KSwgY21wX3JlZl9ieV9uYW1lKTsKKworCWlmICgoYXJncy0+ZGVwdGggPiAwIHx8IGlzX3JlcG9zaXRvcnlfc2hhbGxvdygpKSAmJiAhc2VydmVyX3N1cHBvcnRzKCJzaGFsbG93IikpCisJCWRpZSgiU2VydmVyIGRvZXMgbm90IHN1cHBvcnQgc2hhbGxvdyBjbGllbnRzIik7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygibXVsdGlfYWNrX2RldGFpbGVkIikpIHsKKwkJaWYgKGFyZ3MtPnZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIlNlcnZlciBzdXBwb3J0cyBtdWx0aV9hY2tfZGV0YWlsZWRcbiIpOworCQltdWx0aV9hY2sgPSAyOworCQlpZiAoc2VydmVyX3N1cHBvcnRzKCJuby1kb25lIikpIHsKKwkJCWlmIChhcmdzLT52ZXJib3NlKQorCQkJCWZwcmludGYoc3RkZXJyLCAiU2VydmVyIHN1cHBvcnRzIG5vLWRvbmVcbiIpOworCQkJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpCisJCQkJbm9fZG9uZSA9IDE7CisJCX0KKwl9CisJZWxzZSBpZiAoc2VydmVyX3N1cHBvcnRzKCJtdWx0aV9hY2siKSkgeworCQlpZiAoYXJncy0+dmVyYm9zZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiU2VydmVyIHN1cHBvcnRzIG11bHRpX2Fja1xuIik7CisJCW11bHRpX2FjayA9IDE7CisJfQorCWlmIChzZXJ2ZXJfc3VwcG9ydHMoInNpZGUtYmFuZC02NGsiKSkgeworCQlpZiAoYXJncy0+dmVyYm9zZSkKKwkJCWZwcmludGYoc3RkZXJyLCAiU2VydmVyIHN1cHBvcnRzIHNpZGUtYmFuZC02NGtcbiIpOworCQl1c2Vfc2lkZWJhbmQgPSAyOworCX0KKwllbHNlIGlmIChzZXJ2ZXJfc3VwcG9ydHMoInNpZGUtYmFuZCIpKSB7CisJCWlmIChhcmdzLT52ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgc3VwcG9ydHMgc2lkZS1iYW5kXG4iKTsKKwkJdXNlX3NpZGViYW5kID0gMTsKKwl9CisJaWYgKHNlcnZlcl9zdXBwb3J0cygiYWxsb3ctdGlwLXNoYTEtaW4td2FudCIpKSB7CisJCWlmIChhcmdzLT52ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgc3VwcG9ydHMgYWxsb3ctdGlwLXNoYTEtaW4td2FudFxuIik7CisJCWFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCB8PSBBTExPV19USVBfU0hBMTsKKwl9CisJaWYgKHNlcnZlcl9zdXBwb3J0cygiYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudCIpKSB7CisJCWlmIChhcmdzLT52ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICJTZXJ2ZXIgc3VwcG9ydHMgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudFxuIik7CisJCWFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCB8PSBBTExPV19SRUFDSEFCTEVfU0hBMTsKKwl9CisJaWYgKCFzZXJ2ZXJfc3VwcG9ydHMoInRoaW4tcGFjayIpKQorCQlhcmdzLT51c2VfdGhpbl9wYWNrID0gMDsKKwlpZiAoIXNlcnZlcl9zdXBwb3J0cygibm8tcHJvZ3Jlc3MiKSkKKwkJYXJncy0+bm9fcHJvZ3Jlc3MgPSAwOworCWlmICghc2VydmVyX3N1cHBvcnRzKCJpbmNsdWRlLXRhZyIpKQorCQlhcmdzLT5pbmNsdWRlX3RhZyA9IDA7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygib2ZzLWRlbHRhIikpIHsKKwkJaWYgKGFyZ3MtPnZlcmJvc2UpCisJCQlmcHJpbnRmKHN0ZGVyciwgIlNlcnZlciBzdXBwb3J0cyBvZnMtZGVsdGFcbiIpOworCX0gZWxzZQorCQlwcmVmZXJfb2ZzX2RlbHRhID0gMDsKKworCWlmICgoYWdlbnRfZmVhdHVyZSA9IHNlcnZlcl9mZWF0dXJlX3ZhbHVlKCJhZ2VudCIsICZhZ2VudF9sZW4pKSkgeworCQlhZ2VudF9zdXBwb3J0ZWQgPSAxOworCQlpZiAoYXJncy0+dmVyYm9zZSAmJiBhZ2VudF9sZW4pCisJCQlmcHJpbnRmKHN0ZGVyciwgIlNlcnZlciB2ZXJzaW9uIGlzICUuKnNcbiIsCisJCQkJYWdlbnRfbGVuLCBhZ2VudF9mZWF0dXJlKTsKKwl9CisKKwlpZiAoZXZlcnl0aGluZ19sb2NhbChhcmdzLCAmcmVmLCBzb3VnaHQsIG5yX3NvdWdodCkpIHsKKwkJcGFja2V0X2ZsdXNoKGZkWzFdKTsKKwkJZ290byBhbGxfZG9uZTsKKwl9CisJaWYgKGZpbmRfY29tbW9uKGFyZ3MsIGZkLCBzaGExLCByZWYpIDwgMCkKKwkJaWYgKCFhcmdzLT5rZWVwX3BhY2spCisJCQkvKiBXaGVuIGNsb25pbmcsIGl0IGlzIG5vdCB1bnVzdWFsIHRvIGhhdmUKKwkJCSAqIG5vIGNvbW1vbiBjb21taXQuCisJCQkgKi8KKwkJCXdhcm5pbmcoIm5vIGNvbW1vbiBjb21taXRzIik7CisKKwlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYykKKwkJcGFja2V0X2ZsdXNoKGZkWzFdKTsKKwlpZiAoYXJncy0+ZGVwdGggPiAwKQorCQlzZXR1cF9hbHRlcm5hdGVfc2hhbGxvdygmc2hhbGxvd19sb2NrLCAmYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSwKKwkJCQkJTlVMTCk7CisJZWxzZSBpZiAoc2ktPm5yX291cnMgfHwgc2ktPm5yX3RoZWlycykKKwkJYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9IHNldHVwX3RlbXBvcmFyeV9zaGFsbG93KHNpLT5zaGFsbG93KTsKKwllbHNlCisJCWFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSBOVUxMOworCWlmIChnZXRfcGFjayhhcmdzLCBmZCwgcGFja19sb2NrZmlsZSkpCisJCWRpZSgiZ2l0IGZldGNoLXBhY2s6IGZldGNoIGZhaWxlZC4iKTsKKworIGFsbF9kb25lOgorCXJldHVybiByZWY7Cit9CisKK3N0YXRpYyB2b2lkIGZldGNoX3BhY2tfY29uZmlnKHZvaWQpCit7CisJZ2l0X2NvbmZpZ19nZXRfaW50KCJmZXRjaC51bnBhY2tsaW1pdCIsICZmZXRjaF91bnBhY2tfbGltaXQpOworCWdpdF9jb25maWdfZ2V0X2ludCgidHJhbnNmZXIudW5wYWNrbGltaXQiLCAmdHJhbnNmZXJfdW5wYWNrX2xpbWl0KTsKKwlnaXRfY29uZmlnX2dldF9ib29sKCJyZXBhY2sudXNlZGVsdGFiYXNlb2Zmc2V0IiwgJnByZWZlcl9vZnNfZGVsdGEpOworCWdpdF9jb25maWdfZ2V0X2Jvb2woImZldGNoLmZzY2tvYmplY3RzIiwgJmZldGNoX2ZzY2tfb2JqZWN0cyk7CisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgidHJhbnNmZXIuZnNja29iamVjdHMiLCAmdHJhbnNmZXJfZnNja19vYmplY3RzKTsKKworCWdpdF9jb25maWcoZ2l0X2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgZmV0Y2hfcGFja19zZXR1cCh2b2lkKQoreworCXN0YXRpYyBpbnQgZGlkX3NldHVwOworCWlmIChkaWRfc2V0dXApCisJCXJldHVybjsKKwlmZXRjaF9wYWNrX2NvbmZpZygpOworCWlmICgwIDw9IHRyYW5zZmVyX3VucGFja19saW1pdCkKKwkJdW5wYWNrX2xpbWl0ID0gdHJhbnNmZXJfdW5wYWNrX2xpbWl0OworCWVsc2UgaWYgKDAgPD0gZmV0Y2hfdW5wYWNrX2xpbWl0KQorCQl1bnBhY2tfbGltaXQgPSBmZXRjaF91bnBhY2tfbGltaXQ7CisJZGlkX3NldHVwID0gMTsKK30KKworc3RhdGljIGludCByZW1vdmVfZHVwbGljYXRlc19pbl9yZWZzKHN0cnVjdCByZWYgKipyZWYsIGludCBucikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbmFtZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWludCBzcmMsIGRzdDsKKworCWZvciAoc3JjID0gZHN0ID0gMDsgc3JjIDwgbnI7IHNyYysrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZuYW1lcywgcmVmW3NyY10tPm5hbWUpOworCQlpZiAoaXRlbS0+dXRpbCkKKwkJCWNvbnRpbnVlOyAvKiBhbHJlYWR5IGhhdmUgaXQgKi8KKwkJaXRlbS0+dXRpbCA9IHJlZltzcmNdOworCQlpZiAoc3JjICE9IGRzdCkKKwkJCXJlZltkc3RdID0gcmVmW3NyY107CisJCWRzdCsrOworCX0KKwlmb3IgKHNyYyA9IGRzdDsgc3JjIDwgbnI7IHNyYysrKQorCQlyZWZbc3JjXSA9IE5VTEw7CisJc3RyaW5nX2xpc3RfY2xlYXIoJm5hbWVzLCAwKTsKKwlyZXR1cm4gZHN0OworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfc2hhbGxvdyhzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzICphcmdzLAorCQkJICAgc3RydWN0IHJlZiAqKnNvdWdodCwgaW50IG5yX3NvdWdodCwKKwkJCSAgIHN0cnVjdCBzaGFsbG93X2luZm8gKnNpKQoreworCXN0cnVjdCBzaGExX2FycmF5IHJlZiA9IFNIQTFfQVJSQVlfSU5JVDsKKwlpbnQgKnN0YXR1czsKKwlpbnQgaTsKKworCWlmIChhcmdzLT5kZXB0aCA+IDAgJiYgYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSkgeworCQlpZiAoKmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPT0gJ1wwJykgeyAvKiAtLXVuc2hhbGxvdyAqLworCQkJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGhfc2hhbGxvdygpKTsKKwkJCXJvbGxiYWNrX2xvY2tfZmlsZSgmc2hhbGxvd19sb2NrKTsKKwkJfSBlbHNlCisJCQljb21taXRfbG9ja19maWxlKCZzaGFsbG93X2xvY2spOworCQlyZXR1cm47CisJfQorCisJaWYgKCFzaS0+c2hhbGxvdyB8fCAhc2ktPnNoYWxsb3ctPm5yKQorCQlyZXR1cm47CisKKwlpZiAoYXJncy0+Y2xvbmluZykgeworCQkvKgorCQkgKiByZW1vdGUgaXMgc2hhbGxvdywgYnV0IHRoaXMgaXMgYSBjbG9uZSwgdGhlcmUgYXJlCisJCSAqIG5vIG9iamVjdHMgaW4gcmVwbyB0byB3b3JyeSBhYm91dC4gQWNjZXB0IGFueQorCQkgKiBzaGFsbG93IHBvaW50cyB0aGF0IGV4aXN0IGluIHRoZSBwYWNrIChpb3cgaW4gcmVwbworCQkgKiBhZnRlciBnZXRfcGFjaygpIGFuZCByZXByZXBhcmVfcGFja2VkX2dpdCgpKQorCQkgKi8KKwkJc3RydWN0IHNoYTFfYXJyYXkgZXh0cmEgPSBTSEExX0FSUkFZX0lOSVQ7CisJCXVuc2lnbmVkIGNoYXIgKCpzaGExKVsyMF0gPSBzaS0+c2hhbGxvdy0+c2hhMTsKKwkJZm9yIChpID0gMDsgaSA8IHNpLT5zaGFsbG93LT5ucjsgaSsrKQorCQkJaWYgKGhhc19zaGExX2ZpbGUoc2hhMVtpXSkpCisJCQkJc2hhMV9hcnJheV9hcHBlbmQoJmV4dHJhLCBzaGExW2ldKTsKKwkJaWYgKGV4dHJhLm5yKSB7CisJCQlzZXR1cF9hbHRlcm5hdGVfc2hhbGxvdygmc2hhbGxvd19sb2NrLAorCQkJCQkJJmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUsCisJCQkJCQkmZXh0cmEpOworCQkJY29tbWl0X2xvY2tfZmlsZSgmc2hhbGxvd19sb2NrKTsKKwkJfQorCQlzaGExX2FycmF5X2NsZWFyKCZleHRyYSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXNpLT5ucl9vdXJzICYmICFzaS0+bnJfdGhlaXJzKQorCQlyZXR1cm47CisKKwlyZW1vdmVfbm9uZXhpc3RlbnRfdGhlaXJzX3NoYWxsb3coc2kpOworCWlmICghc2ktPm5yX291cnMgJiYgIXNpLT5ucl90aGVpcnMpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc291Z2h0OyBpKyspCisJCXNoYTFfYXJyYXlfYXBwZW5kKCZyZWYsIHNvdWdodFtpXS0+b2xkX3NoYTEpOworCXNpLT5yZWYgPSAmcmVmOworCisJaWYgKGFyZ3MtPnVwZGF0ZV9zaGFsbG93KSB7CisJCS8qCisJCSAqIHJlbW90ZSBpcyBhbHNvIHNoYWxsb3csIC5naXQvc2hhbGxvdyBtYXkgYmUgdXBkYXRlZAorCQkgKiBzbyBhbGwgcmVmcyBjYW4gYmUgYWNjZXB0ZWQuIE1ha2Ugc3VyZSB3ZSBvbmx5IGFkZAorCQkgKiBzaGFsbG93IHJvb3RzIHRoYXQgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZSBmcm9tIG5ldworCQkgKiByZWZzLgorCQkgKi8KKwkJc3RydWN0IHNoYTFfYXJyYXkgZXh0cmEgPSBTSEExX0FSUkFZX0lOSVQ7CisJCXVuc2lnbmVkIGNoYXIgKCpzaGExKVsyMF0gPSBzaS0+c2hhbGxvdy0+c2hhMTsKKwkJYXNzaWduX3NoYWxsb3dfY29tbWl0c190b19yZWZzKHNpLCBOVUxMLCBOVUxMKTsKKwkJaWYgKCFzaS0+bnJfb3VycyAmJiAhc2ktPm5yX3RoZWlycykgeworCQkJc2hhMV9hcnJheV9jbGVhcigmcmVmKTsKKwkJCXJldHVybjsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgc2ktPm5yX291cnM7IGkrKykKKwkJCXNoYTFfYXJyYXlfYXBwZW5kKCZleHRyYSwgc2hhMVtzaS0+b3Vyc1tpXV0pOworCQlmb3IgKGkgPSAwOyBpIDwgc2ktPm5yX3RoZWlyczsgaSsrKQorCQkJc2hhMV9hcnJheV9hcHBlbmQoJmV4dHJhLCBzaGExW3NpLT50aGVpcnNbaV1dKTsKKwkJc2V0dXBfYWx0ZXJuYXRlX3NoYWxsb3coJnNoYWxsb3dfbG9jaywKKwkJCQkJJmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUsCisJCQkJCSZleHRyYSk7CisJCWNvbW1pdF9sb2NrX2ZpbGUoJnNoYWxsb3dfbG9jayk7CisJCXNoYTFfYXJyYXlfY2xlYXIoJmV4dHJhKTsKKwkJc2hhMV9hcnJheV9jbGVhcigmcmVmKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogcmVtb3RlIGlzIGFsc28gc2hhbGxvdywgY2hlY2sgd2hhdCByZWYgaXMgc2FmZSB0byB1cGRhdGUKKwkgKiB3aXRob3V0IHVwZGF0aW5nIC5naXQvc2hhbGxvdworCSAqLworCXN0YXR1cyA9IHhjYWxsb2MobnJfc291Z2h0LCBzaXplb2YoKnN0YXR1cykpOworCWFzc2lnbl9zaGFsbG93X2NvbW1pdHNfdG9fcmVmcyhzaSwgTlVMTCwgc3RhdHVzKTsKKwlpZiAoc2ktPm5yX291cnMgfHwgc2ktPm5yX3RoZWlycykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnJfc291Z2h0OyBpKyspCisJCQlpZiAoc3RhdHVzW2ldKQorCQkJCXNvdWdodFtpXS0+c3RhdHVzID0gUkVGX1NUQVRVU19SRUpFQ1RfU0hBTExPVzsKKwl9CisJZnJlZShzdGF0dXMpOworCXNoYTFfYXJyYXlfY2xlYXIoJnJlZik7Cit9CisKK3N0cnVjdCByZWYgKmZldGNoX3BhY2soc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJICAgICAgIGludCBmZFtdLCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlZiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmRlc3QsCisJCSAgICAgICBzdHJ1Y3QgcmVmICoqc291Z2h0LCBpbnQgbnJfc291Z2h0LAorCQkgICAgICAgc3RydWN0IHNoYTFfYXJyYXkgKnNoYWxsb3csCisJCSAgICAgICBjaGFyICoqcGFja19sb2NrZmlsZSkKK3sKKwlzdHJ1Y3QgcmVmICpyZWZfY3B5OworCXN0cnVjdCBzaGFsbG93X2luZm8gc2k7CisKKwlmZXRjaF9wYWNrX3NldHVwKCk7CisJaWYgKG5yX3NvdWdodCkKKwkJbnJfc291Z2h0ID0gcmVtb3ZlX2R1cGxpY2F0ZXNfaW5fcmVmcyhzb3VnaHQsIG5yX3NvdWdodCk7CisKKwlpZiAoIXJlZikgeworCQlwYWNrZXRfZmx1c2goZmRbMV0pOworCQlkaWUoIm5vIG1hdGNoaW5nIHJlbW90ZSBoZWFkIik7CisJfQorCXByZXBhcmVfc2hhbGxvd19pbmZvKCZzaSwgc2hhbGxvdyk7CisJcmVmX2NweSA9IGRvX2ZldGNoX3BhY2soYXJncywgZmQsIHJlZiwgc291Z2h0LCBucl9zb3VnaHQsCisJCQkJJnNpLCBwYWNrX2xvY2tmaWxlKTsKKwlyZXByZXBhcmVfcGFja2VkX2dpdCgpOworCXVwZGF0ZV9zaGFsbG93KGFyZ3MsIHNvdWdodCwgbnJfc291Z2h0LCAmc2kpOworCWNsZWFyX3NoYWxsb3dfaW5mbygmc2kpOworCXJldHVybiByZWZfY3B5OworfQpkaWZmIC0tZ2l0IGEvZmV0Y2gtcGFjay5oIGIvZmV0Y2gtcGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiN2ZkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9mZXRjaC1wYWNrLmgKQEAgLTAsMCArMSw0NCBAQAorI2lmbmRlZiBGRVRDSF9QQUNLX0gKKyNkZWZpbmUgRkVUQ0hfUEFDS19ICisKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisKK3N0cnVjdCBzaGExX2FycmF5OworCitzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzIHsKKwljb25zdCBjaGFyICp1cGxvYWRwYWNrOworCWludCB1bnBhY2tsaW1pdDsKKwlpbnQgZGVwdGg7CisJdW5zaWduZWQgcXVpZXQ6MTsKKwl1bnNpZ25lZCBrZWVwX3BhY2s6MTsKKwl1bnNpZ25lZCBsb2NrX3BhY2s6MTsKKwl1bnNpZ25lZCB1c2VfdGhpbl9wYWNrOjE7CisJdW5zaWduZWQgZmV0Y2hfYWxsOjE7CisJdW5zaWduZWQgc3RkaW5fcmVmczoxOworCXVuc2lnbmVkIGRpYWdfdXJsOjE7CisJdW5zaWduZWQgdmVyYm9zZToxOworCXVuc2lnbmVkIG5vX3Byb2dyZXNzOjE7CisJdW5zaWduZWQgaW5jbHVkZV90YWc6MTsKKwl1bnNpZ25lZCBzdGF0ZWxlc3NfcnBjOjE7CisJdW5zaWduZWQgY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZDoxOworCXVuc2lnbmVkIHNlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQ6MTsKKwl1bnNpZ25lZCBjbG9uaW5nOjE7CisJdW5zaWduZWQgdXBkYXRlX3NoYWxsb3c6MTsKK307CisKKy8qCisgKiBzb3VnaHQgcmVwcmVzZW50cyByZW1vdGUgcmVmZXJlbmNlcyB0aGF0IHNob3VsZCBiZSB1cGRhdGVkIGZyb20uCisgKiBPbiByZXR1cm4sIHRoZSBuYW1lcyB0aGF0IHdlcmUgZm91bmQgb24gdGhlIHJlbW90ZSB3aWxsIGhhdmUgYmVlbgorICogbWFya2VkIGFzIHN1Y2guCisgKi8KK3N0cnVjdCByZWYgKmZldGNoX3BhY2soc3RydWN0IGZldGNoX3BhY2tfYXJncyAqYXJncywKKwkJICAgICAgIGludCBmZFtdLCBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY29ubiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlZiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmRlc3QsCisJCSAgICAgICBzdHJ1Y3QgcmVmICoqc291Z2h0LAorCQkgICAgICAgaW50IG5yX3NvdWdodCwKKwkJICAgICAgIHN0cnVjdCBzaGExX2FycmF5ICpzaGFsbG93LAorCQkgICAgICAgY2hhciAqKnBhY2tfbG9ja2ZpbGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZtdC1tZXJnZS1tc2cuaCBiL2ZtdC1tZXJnZS1tc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjhkM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvZm10LW1lcmdlLW1zZy5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBGTVRfTUVSR0VfTVNHX0gKKyNkZWZpbmUgRk1UX01FUkdFX01TR19ICisKK2V4dGVybiBpbnQgbWVyZ2VfbG9nX2NvbmZpZzsKK2V4dGVybiBpbnQgZm10X21lcmdlX21zZ19jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworCisjZW5kaWYgLyogRk1UX01FUkdFX01TR19IICovCmRpZmYgLS1naXQgYS9mc2NrLmMgYi9mc2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxZTc1MwotLS0gL2Rldi9udWxsCisrKyBiL2ZzY2suYwpAQCAtMCwwICsxLDgxNyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJmc2NrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisKKyNkZWZpbmUgRlNDS19GQVRBTCAtMQorI2RlZmluZSBGU0NLX0lORk8gLTIKKworI2RlZmluZSBGT1JFQUNIX01TR19JRChGVU5DKSBcCisJLyogZmF0YWwgZXJyb3JzICovIFwKKwlGVU5DKE5VTF9JTl9IRUFERVIsIEZBVEFMKSBcCisJRlVOQyhVTlRFUk1JTkFURURfSEVBREVSLCBGQVRBTCkgXAorCS8qIGVycm9ycyAqLyBcCisJRlVOQyhCQURfREFURSwgRVJST1IpIFwKKwlGVU5DKEJBRF9EQVRFX09WRVJGTE9XLCBFUlJPUikgXAorCUZVTkMoQkFEX0VNQUlMLCBFUlJPUikgXAorCUZVTkMoQkFEX05BTUUsIEVSUk9SKSBcCisJRlVOQyhCQURfT0JKRUNUX1NIQTEsIEVSUk9SKSBcCisJRlVOQyhCQURfUEFSRU5UX1NIQTEsIEVSUk9SKSBcCisJRlVOQyhCQURfVEFHX09CSkVDVCwgRVJST1IpIFwKKwlGVU5DKEJBRF9USU1FWk9ORSwgRVJST1IpIFwKKwlGVU5DKEJBRF9UUkVFLCBFUlJPUikgXAorCUZVTkMoQkFEX1RSRUVfU0hBMSwgRVJST1IpIFwKKwlGVU5DKEJBRF9UWVBFLCBFUlJPUikgXAorCUZVTkMoRFVQTElDQVRFX0VOVFJJRVMsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX0FVVEhPUiwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfQ09NTUlUVEVSLCBFUlJPUikgXAorCUZVTkMoTUlTU0lOR19FTUFJTCwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfR1JBRlQsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX05BTUVfQkVGT1JFX0VNQUlMLCBFUlJPUikgXAorCUZVTkMoTUlTU0lOR19PQkpFQ1QsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1BBUkVOVCwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfU1BBQ0VfQkVGT1JFX0RBVEUsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1NQQUNFX0JFRk9SRV9FTUFJTCwgRVJST1IpIFwKKwlGVU5DKE1JU1NJTkdfVEFHLCBFUlJPUikgXAorCUZVTkMoTUlTU0lOR19UQUdfRU5UUlksIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1RBR19PQkpFQ1QsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1RSRUUsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1RZUEUsIEVSUk9SKSBcCisJRlVOQyhNSVNTSU5HX1RZUEVfRU5UUlksIEVSUk9SKSBcCisJRlVOQyhNVUxUSVBMRV9BVVRIT1JTLCBFUlJPUikgXAorCUZVTkMoVEFHX09CSkVDVF9OT1RfVEFHLCBFUlJPUikgXAorCUZVTkMoVFJFRV9OT1RfU09SVEVELCBFUlJPUikgXAorCUZVTkMoVU5LTk9XTl9UWVBFLCBFUlJPUikgXAorCUZVTkMoWkVST19QQURERURfREFURSwgRVJST1IpIFwKKwkvKiB3YXJuaW5ncyAqLyBcCisJRlVOQyhCQURfRklMRU1PREUsIFdBUk4pIFwKKwlGVU5DKEVNUFRZX05BTUUsIFdBUk4pIFwKKwlGVU5DKEZVTExfUEFUSE5BTUUsIFdBUk4pIFwKKwlGVU5DKEhBU19ET1QsIFdBUk4pIFwKKwlGVU5DKEhBU19ET1RET1QsIFdBUk4pIFwKKwlGVU5DKEhBU19ET1RHSVQsIFdBUk4pIFwKKwlGVU5DKE5VTExfU0hBMSwgV0FSTikgXAorCUZVTkMoWkVST19QQURERURfRklMRU1PREUsIFdBUk4pIFwKKwkvKiBpbmZvcyAocmVwb3J0ZWQgYXMgd2FybmluZ3MsIGJ1dCBpZ25vcmVkIGJ5IGRlZmF1bHQpICovIFwKKwlGVU5DKEJBRF9UQUdfTkFNRSwgSU5GTykgXAorCUZVTkMoTUlTU0lOR19UQUdHRVJfRU5UUlksIElORk8pCisKKyNkZWZpbmUgTVNHX0lEKGlkLCBtc2dfdHlwZSkgRlNDS19NU0dfIyNpZCwKK2VudW0gZnNja19tc2dfaWQgeworCUZPUkVBQ0hfTVNHX0lEKE1TR19JRCkKKwlGU0NLX01TR19NQVgKK307CisjdW5kZWYgTVNHX0lECisKKyNkZWZpbmUgU1RSKHgpICN4CisjZGVmaW5lIE1TR19JRChpZCwgbXNnX3R5cGUpIHsgU1RSKGlkKSwgTlVMTCwgRlNDS18jI21zZ190eXBlIH0sCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICppZF9zdHJpbmc7CisJY29uc3QgY2hhciAqZG93bmNhc2VkOworCWludCBtc2dfdHlwZTsKK30gbXNnX2lkX2luZm9bRlNDS19NU0dfTUFYICsgMV0gPSB7CisJRk9SRUFDSF9NU0dfSUQoTVNHX0lEKQorCXsgTlVMTCwgTlVMTCwgLTEgfQorfTsKKyN1bmRlZiBNU0dfSUQKKworc3RhdGljIGludCBwYXJzZV9tc2dfaWQoY29uc3QgY2hhciAqdGV4dCkKK3sKKwlpbnQgaTsKKworCWlmICghbXNnX2lkX2luZm9bMF0uZG93bmNhc2VkKSB7CisJCS8qIGNvbnZlcnQgaWRfc3RyaW5nIHRvIGxvd2VyIGNhc2UsIHdpdGhvdXQgdW5kZXJzY29yZXMuICovCisJCWZvciAoaSA9IDA7IGkgPCBGU0NLX01TR19NQVg7IGkrKykgeworCQkJY29uc3QgY2hhciAqcCA9IG1zZ19pZF9pbmZvW2ldLmlkX3N0cmluZzsKKwkJCWludCBsZW4gPSBzdHJsZW4ocCk7CisJCQljaGFyICpxID0geG1hbGxvYyhsZW4pOworCisJCQltc2dfaWRfaW5mb1tpXS5kb3duY2FzZWQgPSBxOworCQkJd2hpbGUgKCpwKQorCQkJCWlmICgqcCA9PSAnXycpCisJCQkJCXArKzsKKwkJCQllbHNlCisJCQkJCSoocSkrKyA9IHRvbG93ZXIoKihwKSsrKTsKKwkJCSpxID0gJ1wwJzsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBGU0NLX01TR19NQVg7IGkrKykKKwkJaWYgKCFzdHJjbXAodGV4dCwgbXNnX2lkX2luZm9baV0uZG93bmNhc2VkKSkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGZzY2tfbXNnX3R5cGUoZW51bSBmc2NrX21zZ19pZCBtc2dfaWQsCisJc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpbnQgbXNnX3R5cGU7CisKKwlhc3NlcnQobXNnX2lkID49IDAgJiYgbXNnX2lkIDwgRlNDS19NU0dfTUFYKTsKKworCWlmIChvcHRpb25zLT5tc2dfdHlwZSkKKwkJbXNnX3R5cGUgPSBvcHRpb25zLT5tc2dfdHlwZVttc2dfaWRdOworCWVsc2UgeworCQltc2dfdHlwZSA9IG1zZ19pZF9pbmZvW21zZ19pZF0ubXNnX3R5cGU7CisJCWlmIChvcHRpb25zLT5zdHJpY3QgJiYgbXNnX3R5cGUgPT0gRlNDS19XQVJOKQorCQkJbXNnX3R5cGUgPSBGU0NLX0VSUk9SOworCX0KKworCXJldHVybiBtc2dfdHlwZTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9za2lwbGlzdChzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0YXRpYyBzdHJ1Y3Qgc2hhMV9hcnJheSBza2lwbGlzdCA9IFNIQTFfQVJSQVlfSU5JVDsKKwlpbnQgc29ydGVkLCBmZDsKKwljaGFyIGJ1ZmZlcls0MV07CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWlmIChvcHRpb25zLT5za2lwbGlzdCkKKwkJc29ydGVkID0gb3B0aW9ucy0+c2tpcGxpc3QtPnNvcnRlZDsKKwllbHNlIHsKKwkJc29ydGVkID0gMTsKKwkJb3B0aW9ucy0+c2tpcGxpc3QgPSAmc2tpcGxpc3Q7CisJfQorCisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlkaWUoIkNvdWxkIG5vdCBvcGVuIHNraXAgbGlzdDogJXMiLCBwYXRoKTsKKwlmb3IgKDs7KSB7CisJCWludCByZXN1bHQgPSByZWFkX2luX2Z1bGwoZmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IHJlYWQgJyVzJyIsIHBhdGgpOworCQlpZiAoIXJlc3VsdCkKKwkJCWJyZWFrOworCQlpZiAoZ2V0X3NoYTFfaGV4KGJ1ZmZlciwgc2hhMSkgfHwgYnVmZmVyWzQwXSAhPSAnXG4nKQorCQkJZGllKCJJbnZhbGlkIFNIQS0xOiAlcyIsIGJ1ZmZlcik7CisJCXNoYTFfYXJyYXlfYXBwZW5kKCZza2lwbGlzdCwgc2hhMSk7CisJCWlmIChzb3J0ZWQgJiYgc2tpcGxpc3QubnIgPiAxICYmCisJCQkJaGFzaGNtcChza2lwbGlzdC5zaGExW3NraXBsaXN0Lm5yIC0gMl0sCisJCQkJCXNoYTEpID4gMCkKKwkJCXNvcnRlZCA9IDA7CisJfQorCWNsb3NlKGZkKTsKKworCWlmIChzb3J0ZWQpCisJCXNraXBsaXN0LnNvcnRlZCA9IDE7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbXNnX3R5cGUoY29uc3QgY2hhciAqc3RyKQoreworCWlmICghc3RyY21wKHN0ciwgImVycm9yIikpCisJCXJldHVybiBGU0NLX0VSUk9SOworCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCAid2FybiIpKQorCQlyZXR1cm4gRlNDS19XQVJOOworCWVsc2UgaWYgKCFzdHJjbXAoc3RyLCAiaWdub3JlIikpCisJCXJldHVybiBGU0NLX0lHTk9SRTsKKwllbHNlCisJCWRpZSgiVW5rbm93biBmc2NrIG1lc3NhZ2UgdHlwZTogJyVzJyIsIHN0cik7Cit9CisKK2ludCBpc192YWxpZF9tc2dfdHlwZShjb25zdCBjaGFyICptc2dfaWQsIGNvbnN0IGNoYXIgKm1zZ190eXBlKQoreworCWlmIChwYXJzZV9tc2dfaWQobXNnX2lkKSA8IDApCisJCXJldHVybiAwOworCXBhcnNlX21zZ190eXBlKG1zZ190eXBlKTsKKwlyZXR1cm4gMTsKK30KKwordm9pZCBmc2NrX3NldF9tc2dfdHlwZShzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zLAorCQljb25zdCBjaGFyICptc2dfaWQsIGNvbnN0IGNoYXIgKm1zZ190eXBlKQoreworCWludCBpZCA9IHBhcnNlX21zZ19pZChtc2dfaWQpLCB0eXBlOworCisJaWYgKGlkIDwgMCkKKwkJZGllKCJVbmhhbmRsZWQgbWVzc2FnZSBpZDogJXMiLCBtc2dfaWQpOworCXR5cGUgPSBwYXJzZV9tc2dfdHlwZShtc2dfdHlwZSk7CisKKwlpZiAodHlwZSAhPSBGU0NLX0VSUk9SICYmIG1zZ19pZF9pbmZvW2lkXS5tc2dfdHlwZSA9PSBGU0NLX0ZBVEFMKQorCQlkaWUoIkNhbm5vdCBkZW1vdGUgJXMgdG8gJXMiLCBtc2dfaWQsIG1zZ190eXBlKTsKKworCWlmICghb3B0aW9ucy0+bXNnX3R5cGUpIHsKKwkJaW50IGk7CisJCWludCAqbXNnX3R5cGUgPSB4bWFsbG9jKHNpemVvZihpbnQpICogRlNDS19NU0dfTUFYKTsKKwkJZm9yIChpID0gMDsgaSA8IEZTQ0tfTVNHX01BWDsgaSsrKQorCQkJbXNnX3R5cGVbaV0gPSBmc2NrX21zZ190eXBlKGksIG9wdGlvbnMpOworCQlvcHRpb25zLT5tc2dfdHlwZSA9IG1zZ190eXBlOworCX0KKworCW9wdGlvbnMtPm1zZ190eXBlW2lkXSA9IHR5cGU7Cit9CisKK3ZvaWQgZnNja19zZXRfbXNnX3R5cGVzKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnZhbHVlcykKK3sKKwljaGFyICpidWYgPSB4c3RyZHVwKHZhbHVlcyksICp0b19mcmVlID0gYnVmOworCWludCBkb25lID0gMDsKKworCXdoaWxlICghZG9uZSkgeworCQlpbnQgbGVuID0gc3RyY3NwbihidWYsICIgLHwiKSwgZXF1YWw7CisKKwkJZG9uZSA9ICFidWZbbGVuXTsKKwkJaWYgKCFsZW4pIHsKKwkJCWJ1ZisrOworCQkJY29udGludWU7CisJCX0KKwkJYnVmW2xlbl0gPSAnXDAnOworCisJCWZvciAoZXF1YWwgPSAwOworCQkgICAgIGVxdWFsIDwgbGVuICYmIGJ1ZltlcXVhbF0gIT0gJz0nICYmIGJ1ZltlcXVhbF0gIT0gJzonOworCQkgICAgIGVxdWFsKyspCisJCQlidWZbZXF1YWxdID0gdG9sb3dlcihidWZbZXF1YWxdKTsKKwkJYnVmW2VxdWFsXSA9ICdcMCc7CisKKwkJaWYgKCFzdHJjbXAoYnVmLCAic2tpcGxpc3QiKSkgeworCQkJaWYgKGVxdWFsID09IGxlbikKKwkJCQlkaWUoInNraXBsaXN0IHJlcXVpcmVzIGEgcGF0aCIpOworCQkJaW5pdF9za2lwbGlzdChvcHRpb25zLCBidWYgKyBlcXVhbCArIDEpOworCQkJYnVmICs9IGxlbiArIDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChlcXVhbCA9PSBsZW4pCisJCQlkaWUoIk1pc3NpbmcgJz0nOiAnJXMnIiwgYnVmKTsKKworCQlmc2NrX3NldF9tc2dfdHlwZShvcHRpb25zLCBidWYsIGJ1ZiArIGVxdWFsICsgMSk7CisJCWJ1ZiArPSBsZW4gKyAxOworCX0KKwlmcmVlKHRvX2ZyZWUpOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfbXNnX2lkKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICptc2dfaWQpCit7CisJZm9yICg7OykgeworCQljaGFyIGMgPSAqKG1zZ19pZCkrKzsKKworCQlpZiAoIWMpCisJCQlicmVhazsKKwkJaWYgKGMgIT0gJ18nKQorCQkJc3RyYnVmX2FkZGNoKHNiLCB0b2xvd2VyKGMpKTsKKwkJZWxzZSB7CisJCQlhc3NlcnQoKm1zZ19pZCk7CisJCQlzdHJidWZfYWRkY2goc2IsICoobXNnX2lkKSsrKTsKKwkJfQorCX0KKworCXN0cmJ1Zl9hZGRzdHIoc2IsICI6ICIpOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgNCwgNSkpKQorc3RhdGljIGludCByZXBvcnQoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywgc3RydWN0IG9iamVjdCAqb2JqZWN0LAorCWVudW0gZnNja19tc2dfaWQgaWQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBtc2dfdHlwZSA9IGZzY2tfbXNnX3R5cGUoaWQsIG9wdGlvbnMpLCByZXN1bHQ7CisKKwlpZiAobXNnX3R5cGUgPT0gRlNDS19JR05PUkUpCisJCXJldHVybiAwOworCisJaWYgKG9wdGlvbnMtPnNraXBsaXN0ICYmIG9iamVjdCAmJgorCQkJc2hhMV9hcnJheV9sb29rdXAob3B0aW9ucy0+c2tpcGxpc3QsIG9iamVjdC0+c2hhMSkgPj0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobXNnX3R5cGUgPT0gRlNDS19GQVRBTCkKKwkJbXNnX3R5cGUgPSBGU0NLX0VSUk9SOworCWVsc2UgaWYgKG1zZ190eXBlID09IEZTQ0tfSU5GTykKKwkJbXNnX3R5cGUgPSBGU0NLX1dBUk47CisKKwlhcHBlbmRfbXNnX2lkKCZzYiwgbXNnX2lkX2luZm9baWRdLmlkX3N0cmluZyk7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdHJidWZfdmFkZGYoJnNiLCBmbXQsIGFwKTsKKwlyZXN1bHQgPSBvcHRpb25zLT5lcnJvcl9mdW5jKG9iamVjdCwgbXNnX3R5cGUsIHNiLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBmc2NrX3dhbGtfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIGRlc2M7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJaW50IHJlcyA9IDA7CisKKwlpZiAocGFyc2VfdHJlZSh0cmVlKSkKKwkJcmV0dXJuIC0xOworCisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJaW50IHJlc3VsdDsKKworCQlpZiAoU19JU0dJVExJTksoZW50cnkubW9kZSkpCisJCQljb250aW51ZTsKKwkJaWYgKFNfSVNESVIoZW50cnkubW9kZSkpCisJCQlyZXN1bHQgPSBvcHRpb25zLT53YWxrKCZsb29rdXBfdHJlZShlbnRyeS5zaGExKS0+b2JqZWN0LCBPQkpfVFJFRSwgZGF0YSwgb3B0aW9ucyk7CisJCWVsc2UgaWYgKFNfSVNSRUcoZW50cnkubW9kZSkgfHwgU19JU0xOSyhlbnRyeS5tb2RlKSkKKwkJCXJlc3VsdCA9IG9wdGlvbnMtPndhbGsoJmxvb2t1cF9ibG9iKGVudHJ5LnNoYTEpLT5vYmplY3QsIE9CSl9CTE9CLCBkYXRhLCBvcHRpb25zKTsKKwkJZWxzZSB7CisJCQlyZXN1bHQgPSBlcnJvcigiaW4gdHJlZSAlczogZW50cnkgJXMgaGFzIGJhZCBtb2RlICUuNm8iLAorCQkJCQlzaGExX3RvX2hleCh0cmVlLT5vYmplY3Quc2hhMSksIGVudHJ5LnBhdGgsIGVudHJ5Lm1vZGUpOworCQl9CisJCWlmIChyZXN1bHQgPCAwKQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJaWYgKCFyZXMpCisJCQlyZXMgPSByZXN1bHQ7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZnNja193YWxrX2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCWludCByZXM7CisJaW50IHJlc3VsdDsKKworCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJcmV0dXJuIC0xOworCisJcmVzdWx0ID0gb3B0aW9ucy0+d2Fsaygoc3RydWN0IG9iamVjdCAqKWNvbW1pdC0+dHJlZSwgT0JKX1RSRUUsIGRhdGEsIG9wdGlvbnMpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCXJlcyA9IHJlc3VsdDsKKworCXBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJd2hpbGUgKHBhcmVudHMpIHsKKwkJcmVzdWx0ID0gb3B0aW9ucy0+d2Fsaygoc3RydWN0IG9iamVjdCAqKXBhcmVudHMtPml0ZW0sIE9CSl9DT01NSVQsIGRhdGEsIG9wdGlvbnMpOworCQlpZiAocmVzdWx0IDwgMCkKKwkJCXJldHVybiByZXN1bHQ7CisJCWlmICghcmVzKQorCQkJcmVzID0gcmVzdWx0OworCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCBmc2NrX3dhbGtfdGFnKHN0cnVjdCB0YWcgKnRhZywgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlpZiAocGFyc2VfdGFnKHRhZykpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gb3B0aW9ucy0+d2Fsayh0YWctPnRhZ2dlZCwgT0JKX0FOWSwgZGF0YSwgb3B0aW9ucyk7Cit9CisKK2ludCBmc2NrX3dhbGsoc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWlmICghb2JqKQorCQlyZXR1cm4gLTE7CisJc3dpdGNoIChvYmotPnR5cGUpIHsKKwljYXNlIE9CSl9CTE9COgorCQlyZXR1cm4gMDsKKwljYXNlIE9CSl9UUkVFOgorCQlyZXR1cm4gZnNja193YWxrX3RyZWUoKHN0cnVjdCB0cmVlICopb2JqLCBkYXRhLCBvcHRpb25zKTsKKwljYXNlIE9CSl9DT01NSVQ6CisJCXJldHVybiBmc2NrX3dhbGtfY29tbWl0KChzdHJ1Y3QgY29tbWl0ICopb2JqLCBkYXRhLCBvcHRpb25zKTsKKwljYXNlIE9CSl9UQUc6CisJCXJldHVybiBmc2NrX3dhbGtfdGFnKChzdHJ1Y3QgdGFnICopb2JqLCBkYXRhLCBvcHRpb25zKTsKKwlkZWZhdWx0OgorCQllcnJvcigiVW5rbm93biBvYmplY3QgdHlwZSBmb3IgJXMiLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwkJcmV0dXJuIC0xOworCX0KK30KKworLyoKKyAqIFRoZSBlbnRyaWVzIGluIGEgdHJlZSBhcmUgb3JkZXJlZCBpbiB0aGUgX3BhdGhfIG9yZGVyLAorICogd2hpY2ggbWVhbnMgdGhhdCBhIGRpcmVjdG9yeSBlbnRyeSBpcyBvcmRlcmVkIGJ5IGFkZGluZworICogYSBzbGFzaCB0byB0aGUgZW5kIG9mIGl0LgorICoKKyAqIFNvIGEgZGlyZWN0b3J5IGNhbGxlZCAiYSIgaXMgb3JkZXJlZCBfYWZ0ZXJfIGEgZmlsZQorICogY2FsbGVkICJhLmMiLCBiZWNhdXNlICJhLyIgc29ydHMgYWZ0ZXIgImEuYyIuCisgKi8KKyNkZWZpbmUgVFJFRV9VTk9SREVSRUQgKC0xKQorI2RlZmluZSBUUkVFX0hBU19EVVBTICAoLTIpCisKK3N0YXRpYyBpbnQgdmVyaWZ5X29yZGVyZWQodW5zaWduZWQgbW9kZTEsIGNvbnN0IGNoYXIgKm5hbWUxLCB1bnNpZ25lZCBtb2RlMiwgY29uc3QgY2hhciAqbmFtZTIpCit7CisJaW50IGxlbjEgPSBzdHJsZW4obmFtZTEpOworCWludCBsZW4yID0gc3RybGVuKG5hbWUyKTsKKwlpbnQgbGVuID0gbGVuMSA8IGxlbjIgPyBsZW4xIDogbGVuMjsKKwl1bnNpZ25lZCBjaGFyIGMxLCBjMjsKKwlpbnQgY21wOworCisJY21wID0gbWVtY21wKG5hbWUxLCBuYW1lMiwgbGVuKTsKKwlpZiAoY21wIDwgMCkKKwkJcmV0dXJuIDA7CisJaWYgKGNtcCA+IDApCisJCXJldHVybiBUUkVFX1VOT1JERVJFRDsKKworCS8qCisJICogT2ssIHRoZSBmaXJzdCA8bGVuPiBjaGFyYWN0ZXJzIGFyZSB0aGUgc2FtZS4KKwkgKiBOb3cgd2UgbmVlZCB0byBvcmRlciB0aGUgbmV4dCBvbmUsIGJ1dCB0dXJuCisJICogYSAnXDAnIGludG8gYSAnLycgZm9yIGEgZGlyZWN0b3J5IGVudHJ5LgorCSAqLworCWMxID0gbmFtZTFbbGVuXTsKKwljMiA9IG5hbWUyW2xlbl07CisJaWYgKCFjMSAmJiAhYzIpCisJCS8qCisJCSAqIGdpdC13cml0ZS10cmVlIHVzZWQgdG8gd3JpdGUgb3V0IGEgbm9uc2Vuc2UgdHJlZSB0aGF0IGhhcworCQkgKiBlbnRyaWVzIHdpdGggdGhlIHNhbWUgbmFtZSwgb25lIGJsb2IgYW5kIG9uZSB0cmVlLiAgTWFrZQorCQkgKiBzdXJlIHdlIGRvIG5vdCBoYXZlIGR1cGxpY2F0ZSBlbnRyaWVzLgorCQkgKi8KKwkJcmV0dXJuIFRSRUVfSEFTX0RVUFM7CisJaWYgKCFjMSAmJiBTX0lTRElSKG1vZGUxKSkKKwkJYzEgPSAnLyc7CisJaWYgKCFjMiAmJiBTX0lTRElSKG1vZGUyKSkKKwkJYzIgPSAnLyc7CisJcmV0dXJuIGMxIDwgYzIgPyAwIDogVFJFRV9VTk9SREVSRUQ7Cit9CisKK3N0YXRpYyBpbnQgZnNja190cmVlKHN0cnVjdCB0cmVlICppdGVtLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWludCByZXR2YWw7CisJaW50IGhhc19udWxsX3NoYTEgPSAwOworCWludCBoYXNfZnVsbF9wYXRoID0gMDsKKwlpbnQgaGFzX2VtcHR5X25hbWUgPSAwOworCWludCBoYXNfZG90ID0gMDsKKwlpbnQgaGFzX2RvdGRvdCA9IDA7CisJaW50IGhhc19kb3RnaXQgPSAwOworCWludCBoYXNfemVyb19wYWQgPSAwOworCWludCBoYXNfYmFkX21vZGVzID0gMDsKKwlpbnQgaGFzX2R1cF9lbnRyaWVzID0gMDsKKwlpbnQgbm90X3Byb3Blcmx5X3NvcnRlZCA9IDA7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXVuc2lnbmVkIG9fbW9kZTsKKwljb25zdCBjaGFyICpvX25hbWU7CisKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgaXRlbS0+YnVmZmVyLCBpdGVtLT5zaXplKTsKKworCW9fbW9kZSA9IDA7CisJb19uYW1lID0gTlVMTDsKKworCXdoaWxlIChkZXNjLnNpemUpIHsKKwkJdW5zaWduZWQgbW9kZTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKKworCQlzaGExID0gdHJlZV9lbnRyeV9leHRyYWN0KCZkZXNjLCAmbmFtZSwgJm1vZGUpOworCisJCWhhc19udWxsX3NoYTEgfD0gaXNfbnVsbF9zaGExKHNoYTEpOworCQloYXNfZnVsbF9wYXRoIHw9ICEhc3RyY2hyKG5hbWUsICcvJyk7CisJCWhhc19lbXB0eV9uYW1lIHw9ICEqbmFtZTsKKwkJaGFzX2RvdCB8PSAhc3RyY21wKG5hbWUsICIuIik7CisJCWhhc19kb3Rkb3QgfD0gIXN0cmNtcChuYW1lLCAiLi4iKTsKKwkJaGFzX2RvdGdpdCB8PSAoIXN0cmNtcChuYW1lLCAiLmdpdCIpIHx8CisJCQkgICAgICAgaXNfaGZzX2RvdGdpdChuYW1lKSB8fAorCQkJICAgICAgIGlzX250ZnNfZG90Z2l0KG5hbWUpKTsKKwkJaGFzX3plcm9fcGFkIHw9ICooY2hhciAqKWRlc2MuYnVmZmVyID09ICcwJzsKKwkJdXBkYXRlX3RyZWVfZW50cnkoJmRlc2MpOworCisJCXN3aXRjaCAobW9kZSkgeworCQkvKgorCQkgKiBTdGFuZGFyZCBtb2Rlcy4uCisJCSAqLworCQljYXNlIFNfSUZSRUcgfCAwNzU1OgorCQljYXNlIFNfSUZSRUcgfCAwNjQ0OgorCQljYXNlIFNfSUZMTks6CisJCWNhc2UgU19JRkRJUjoKKwkJY2FzZSBTX0lGR0lUTElOSzoKKwkJCWJyZWFrOworCQkvKgorCQkgKiBUaGlzIGlzIG5vbnN0YW5kYXJkLCBidXQgd2UgaGFkIGEgZmV3IG9mIHRoZXNlCisJCSAqIGVhcmx5IG9uIHdoZW4gd2UgaG9ub3JlZCB0aGUgZnVsbCBzZXQgb2YgbW9kZQorCQkgKiBiaXRzLi4KKwkJICovCisJCWNhc2UgU19JRlJFRyB8IDA2NjQ6CisJCQlpZiAoIW9wdGlvbnMtPnN0cmljdCkKKwkJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWhhc19iYWRfbW9kZXMgPSAxOworCQl9CisKKwkJaWYgKG9fbmFtZSkgeworCQkJc3dpdGNoICh2ZXJpZnlfb3JkZXJlZChvX21vZGUsIG9fbmFtZSwgbW9kZSwgbmFtZSkpIHsKKwkJCWNhc2UgVFJFRV9VTk9SREVSRUQ6CisJCQkJbm90X3Byb3Blcmx5X3NvcnRlZCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIFRSRUVfSEFTX0RVUFM6CisJCQkJaGFzX2R1cF9lbnRyaWVzID0gMTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlvX21vZGUgPSBtb2RlOworCQlvX25hbWUgPSBuYW1lOworCX0KKworCXJldHZhbCA9IDA7CisJaWYgKGhhc19udWxsX3NoYTEpCisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfTlVMTF9TSEExLCAiY29udGFpbnMgZW50cmllcyBwb2ludGluZyB0byBudWxsIHNoYTEiKTsKKwlpZiAoaGFzX2Z1bGxfcGF0aCkKKwkJcmV0dmFsICs9IHJlcG9ydChvcHRpb25zLCAmaXRlbS0+b2JqZWN0LCBGU0NLX01TR19GVUxMX1BBVEhOQU1FLCAiY29udGFpbnMgZnVsbCBwYXRobmFtZXMiKTsKKwlpZiAoaGFzX2VtcHR5X25hbWUpCisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfRU1QVFlfTkFNRSwgImNvbnRhaW5zIGVtcHR5IHBhdGhuYW1lIik7CisJaWYgKGhhc19kb3QpCisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfSEFTX0RPVCwgImNvbnRhaW5zICcuJyIpOworCWlmIChoYXNfZG90ZG90KQorCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0hBU19ET1RET1QsICJjb250YWlucyAnLi4nIik7CisJaWYgKGhhc19kb3RnaXQpCisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfSEFTX0RPVEdJVCwgImNvbnRhaW5zICcuZ2l0JyIpOworCWlmIChoYXNfemVyb19wYWQpCisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfWkVST19QQURERURfRklMRU1PREUsICJjb250YWlucyB6ZXJvLXBhZGRlZCBmaWxlIG1vZGVzIik7CisJaWYgKGhhc19iYWRfbW9kZXMpCisJCXJldHZhbCArPSByZXBvcnQob3B0aW9ucywgJml0ZW0tPm9iamVjdCwgRlNDS19NU0dfQkFEX0ZJTEVNT0RFLCAiY29udGFpbnMgYmFkIGZpbGUgbW9kZXMiKTsKKwlpZiAoaGFzX2R1cF9lbnRyaWVzKQorCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX0RVUExJQ0FURV9FTlRSSUVTLCAiY29udGFpbnMgZHVwbGljYXRlIGZpbGUgZW50cmllcyIpOworCWlmIChub3RfcHJvcGVybHlfc29ydGVkKQorCQlyZXR2YWwgKz0gcmVwb3J0KG9wdGlvbnMsICZpdGVtLT5vYmplY3QsIEZTQ0tfTVNHX1RSRUVfTk9UX1NPUlRFRCwgIm5vdCBwcm9wZXJseSBzb3J0ZWQiKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9oZWFkZXJzKGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgc3RydWN0IG9iamVjdCAqb2JqLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWNvbnN0IGNoYXIgKmJ1ZmZlciA9IChjb25zdCBjaGFyICopZGF0YTsKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXN3aXRjaCAoYnVmZmVyW2ldKSB7CisJCWNhc2UgJ1wwJzoKKwkJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLAorCQkJCUZTQ0tfTVNHX05VTF9JTl9IRUFERVIsCisJCQkJInVudGVybWluYXRlZCBoZWFkZXI6IE5VTCBhdCBvZmZzZXQgJWxkIiwgaSk7CisJCWNhc2UgJ1xuJzoKKwkJCWlmIChpICsgMSA8IHNpemUgJiYgYnVmZmVyW2kgKyAxXSA9PSAnXG4nKQorCQkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoKKwkgKiBXZSBkaWQgbm90IGZpbmQgZG91YmxlLUxGIHRoYXQgc2VwYXJhdGVzIHRoZSBoZWFkZXIKKwkgKiBhbmQgdGhlIGJvZHkuICBOb3QgaGF2aW5nIGEgYm9keSBpcyBub3QgYSBjcmltZSBidXQKKwkgKiB3ZSBkbyB3YW50IHRvIHNlZSB0aGUgdGVybWluYXRpbmcgTEYgZm9yIHRoZSBsYXN0IGhlYWRlcgorCSAqIGxpbmUuCisJICovCisJaWYgKHNpemUgJiYgYnVmZmVyW3NpemUgLSAxXSA9PSAnXG4nKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLAorCQlGU0NLX01TR19VTlRFUk1JTkFURURfSEVBREVSLCAidW50ZXJtaW5hdGVkIGhlYWRlciIpOworfQorCitzdGF0aWMgaW50IGZzY2tfaWRlbnQoY29uc3QgY2hhciAqKmlkZW50LCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCit7CisJY29uc3QgY2hhciAqcCA9ICppZGVudDsKKwljaGFyICplbmQ7CisKKwkqaWRlbnQgPSBzdHJjaHJudWwoKmlkZW50LCAnXG4nKTsKKwlpZiAoKippZGVudCA9PSAnXG4nKQorCQkoKmlkZW50KSsrOworCisJaWYgKCpwID09ICc8JykKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX01JU1NJTkdfTkFNRV9CRUZPUkVfRU1BSUwsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGVtYWlsIik7CisJcCArPSBzdHJjc3BuKHAsICI8PlxuIik7CisJaWYgKCpwID09ICc+JykKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX0JBRF9OQU1FLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgbmFtZSIpOworCWlmICgqcCAhPSAnPCcpCisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19NSVNTSU5HX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIGVtYWlsIik7CisJaWYgKHBbLTFdICE9ICcgJykKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX01JU1NJTkdfU1BBQ0VfQkVGT1JFX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBtaXNzaW5nIHNwYWNlIGJlZm9yZSBlbWFpbCIpOworCXArKzsKKwlwICs9IHN0cmNzcG4ocCwgIjw+XG4iKTsKKwlpZiAoKnAgIT0gJz4nKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfQkFEX0VNQUlMLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgZW1haWwiKTsKKwlwKys7CisJaWYgKCpwICE9ICcgJykKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX01JU1NJTkdfU1BBQ0VfQkVGT1JFX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIG1pc3Npbmcgc3BhY2UgYmVmb3JlIGRhdGUiKTsKKwlwKys7CisJaWYgKCpwID09ICcwJyAmJiBwWzFdICE9ICcgJykKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX1pFUk9fUEFEREVEX0RBVEUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIHplcm8tcGFkZGVkIGRhdGUiKTsKKwlpZiAoZGF0ZV9vdmVyZmxvd3Moc3RydG91bChwLCAmZW5kLCAxMCkpKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfQkFEX0RBVEVfT1ZFUkZMT1csICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGRhdGUgY2F1c2VzIGludGVnZXIgb3ZlcmZsb3ciKTsKKwlpZiAoKGVuZCA9PSBwIHx8ICplbmQgIT0gJyAnKSkKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCBvYmosIEZTQ0tfTVNHX0JBRF9EQVRFLCAiaW52YWxpZCBhdXRob3IvY29tbWl0dGVyIGxpbmUgLSBiYWQgZGF0ZSIpOworCXAgPSBlbmQgKyAxOworCWlmICgoKnAgIT0gJysnICYmICpwICE9ICctJykgfHwKKwkgICAgIWlzZGlnaXQocFsxXSkgfHwKKwkgICAgIWlzZGlnaXQocFsyXSkgfHwKKwkgICAgIWlzZGlnaXQocFszXSkgfHwKKwkgICAgIWlzZGlnaXQocFs0XSkgfHwKKwkgICAgKHBbNV0gIT0gJ1xuJykpCisJCXJldHVybiByZXBvcnQob3B0aW9ucywgb2JqLCBGU0NLX01TR19CQURfVElNRVpPTkUsICJpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIgbGluZSAtIGJhZCB0aW1lIHpvbmUiKTsKKwlwICs9IDY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZnNja19jb21taXRfYnVmZmVyKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqYnVmZmVyLAorCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwl1bnNpZ25lZCBjaGFyIHRyZWVfc2hhMVsyMF0sIHNoYTFbMjBdOworCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0OworCXVuc2lnbmVkIHBhcmVudF9jb3VudCwgcGFyZW50X2xpbmVfY291bnQgPSAwLCBhdXRob3JfY291bnQ7CisJaW50IGVycjsKKworCWlmICh2ZXJpZnlfaGVhZGVycyhidWZmZXIsIHNpemUsICZjb21taXQtPm9iamVjdCwgb3B0aW9ucykpCisJCXJldHVybiAtMTsKKworCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAidHJlZSAiLCAmYnVmZmVyKSkKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCAmY29tbWl0LT5vYmplY3QsIEZTQ0tfTVNHX01JU1NJTkdfVFJFRSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3RyZWUnIGxpbmUiKTsKKwlpZiAoZ2V0X3NoYTFfaGV4KGJ1ZmZlciwgdHJlZV9zaGExKSB8fCBidWZmZXJbNDBdICE9ICdcbicpIHsKKwkJZXJyID0gcmVwb3J0KG9wdGlvbnMsICZjb21taXQtPm9iamVjdCwgRlNDS19NU0dfQkFEX1RSRUVfU0hBMSwgImludmFsaWQgJ3RyZWUnIGxpbmUgZm9ybWF0IC0gYmFkIHNoYTEiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCWJ1ZmZlciArPSA0MTsKKwl3aGlsZSAoc2tpcF9wcmVmaXgoYnVmZmVyLCAicGFyZW50ICIsICZidWZmZXIpKSB7CisJCWlmIChnZXRfc2hhMV9oZXgoYnVmZmVyLCBzaGExKSB8fCBidWZmZXJbNDBdICE9ICdcbicpIHsKKwkJCWVyciA9IHJlcG9ydChvcHRpb25zLCAmY29tbWl0LT5vYmplY3QsIEZTQ0tfTVNHX0JBRF9QQVJFTlRfU0hBMSwgImludmFsaWQgJ3BhcmVudCcgbGluZSBmb3JtYXQgLSBiYWQgc2hhMSIpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJCWJ1ZmZlciArPSA0MTsKKwkJcGFyZW50X2xpbmVfY291bnQrKzsKKwl9CisJZ3JhZnQgPSBsb29rdXBfY29tbWl0X2dyYWZ0KGNvbW1pdC0+b2JqZWN0LnNoYTEpOworCXBhcmVudF9jb3VudCA9IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cyk7CisJaWYgKGdyYWZ0KSB7CisJCWlmIChncmFmdC0+bnJfcGFyZW50ID09IC0xICYmICFwYXJlbnRfY291bnQpCisJCQk7IC8qIHNoYWxsb3cgY29tbWl0ICovCisJCWVsc2UgaWYgKGdyYWZ0LT5ucl9wYXJlbnQgIT0gcGFyZW50X2NvdW50KSB7CisJCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX0dSQUZULCAiZ3JhZnQgb2JqZWN0cyBtaXNzaW5nIik7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocGFyZW50X2NvdW50ICE9IHBhcmVudF9saW5lX2NvdW50KSB7CisJCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1BBUkVOVCwgInBhcmVudCBvYmplY3RzIG1pc3NpbmciKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKwlhdXRob3JfY291bnQgPSAwOworCXdoaWxlIChza2lwX3ByZWZpeChidWZmZXIsICJhdXRob3IgIiwgJmJ1ZmZlcikpIHsKKwkJYXV0aG9yX2NvdW50Kys7CisJCWVyciA9IGZzY2tfaWRlbnQoJmJ1ZmZlciwgJmNvbW1pdC0+b2JqZWN0LCBvcHRpb25zKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCWlmIChhdXRob3JfY291bnQgPCAxKQorCQllcnIgPSByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX0FVVEhPUiwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ2F1dGhvcicgbGluZSIpOworCWVsc2UgaWYgKGF1dGhvcl9jb3VudCA+IDEpCisJCWVyciA9IHJlcG9ydChvcHRpb25zLCAmY29tbWl0LT5vYmplY3QsIEZTQ0tfTVNHX01VTFRJUExFX0FVVEhPUlMsICJpbnZhbGlkIGZvcm1hdCAtIG11bHRpcGxlICdhdXRob3InIGxpbmVzIik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgImNvbW1pdHRlciAiLCAmYnVmZmVyKSkKKwkJcmV0dXJuIHJlcG9ydChvcHRpb25zLCAmY29tbWl0LT5vYmplY3QsIEZTQ0tfTVNHX01JU1NJTkdfQ09NTUlUVEVSLCAiaW52YWxpZCBmb3JtYXQgLSBleHBlY3RlZCAnY29tbWl0dGVyJyBsaW5lIik7CisJZXJyID0gZnNja19pZGVudCgmYnVmZmVyLCAmY29tbWl0LT5vYmplY3QsIG9wdGlvbnMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJaWYgKCFjb21taXQtPnRyZWUpCisJCXJldHVybiByZXBvcnQob3B0aW9ucywgJmNvbW1pdC0+b2JqZWN0LCBGU0NLX01TR19CQURfVFJFRSwgImNvdWxkIG5vdCBsb2FkIGNvbW1pdCdzIHRyZWUgJXMiLCBzaGExX3RvX2hleCh0cmVlX3NoYTEpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzY2tfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgY29uc3QgY2hhciAqZGF0YSwKKwl1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMpCit7CisJY29uc3QgY2hhciAqYnVmZmVyID0gZGF0YSA/ICBkYXRhIDogZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCAmc2l6ZSk7CisJaW50IHJldCA9IGZzY2tfY29tbWl0X2J1ZmZlcihjb21taXQsIGJ1ZmZlciwgc2l6ZSwgb3B0aW9ucyk7CisJaWYgKCFkYXRhKQorCQl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgYnVmZmVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZzY2tfdGFnX2J1ZmZlcihzdHJ1Y3QgdGFnICp0YWcsIGNvbnN0IGNoYXIgKmRhdGEsCisJdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IHJldCA9IDA7CisJY29uc3QgY2hhciAqYnVmZmVyOworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMLCAqZW9sOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmIChkYXRhKQorCQlidWZmZXIgPSBkYXRhOworCWVsc2UgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwkJYnVmZmVyID0gdG9fZnJlZSA9CisJCQlyZWFkX3NoYTFfZmlsZSh0YWctPm9iamVjdC5zaGExLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWJ1ZmZlcikKKwkJCXJldHVybiByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LAorCQkJCUZTQ0tfTVNHX01JU1NJTkdfVEFHX09CSkVDVCwKKwkJCQkiY2Fubm90IHJlYWQgdGFnIG9iamVjdCIpOworCisJCWlmICh0eXBlICE9IE9CSl9UQUcpIHsKKwkJCXJldCA9IHJlcG9ydChvcHRpb25zLCAmdGFnLT5vYmplY3QsCisJCQkJRlNDS19NU0dfVEFHX09CSkVDVF9OT1RfVEFHLAorCQkJCSJleHBlY3RlZCB0YWcgZ290ICVzIiwKKwkJCSAgICB0eXBlbmFtZSh0eXBlKSk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKKwlpZiAodmVyaWZ5X2hlYWRlcnMoYnVmZmVyLCBzaXplLCAmdGFnLT5vYmplY3QsIG9wdGlvbnMpKQorCQlnb3RvIGRvbmU7CisKKwlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgIm9iamVjdCAiLCAmYnVmZmVyKSkgeworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX09CSkVDVCwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ29iamVjdCcgbGluZSIpOworCQlnb3RvIGRvbmU7CisJfQorCWlmIChnZXRfc2hhMV9oZXgoYnVmZmVyLCBzaGExKSB8fCBidWZmZXJbNDBdICE9ICdcbicpIHsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfQkFEX09CSkVDVF9TSEExLCAiaW52YWxpZCAnb2JqZWN0JyBsaW5lIGZvcm1hdCAtIGJhZCBzaGExIik7CisJCWlmIChyZXQpCisJCQlnb3RvIGRvbmU7CisJfQorCWJ1ZmZlciArPSA0MTsKKworCWlmICghc2tpcF9wcmVmaXgoYnVmZmVyLCAidHlwZSAiLCAmYnVmZmVyKSkgeworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1RZUEVfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0eXBlJyBsaW5lIik7CisJCWdvdG8gZG9uZTsKKwl9CisJZW9sID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisJaWYgKCFlb2wpIHsKKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19UWVBFLCAiaW52YWxpZCBmb3JtYXQgLSB1bmV4cGVjdGVkIGVuZCBhZnRlciAndHlwZScgbGluZSIpOworCQlnb3RvIGRvbmU7CisJfQorCWlmICh0eXBlX2Zyb21fc3RyaW5nX2dlbnRseShidWZmZXIsIGVvbCAtIGJ1ZmZlciwgMSkgPCAwKQorCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19CQURfVFlQRSwgImludmFsaWQgJ3R5cGUnIHZhbHVlIik7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCWJ1ZmZlciA9IGVvbCArIDE7CisKKwlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgInRhZyAiLCAmYnVmZmVyKSkgeworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19NSVNTSU5HX1RBR19FTlRSWSwgImludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ3RhZycgbGluZSIpOworCQlnb3RvIGRvbmU7CisJfQorCWVvbCA9IHN0cmNocihidWZmZXIsICdcbicpOworCWlmICghZW9sKSB7CisJCXJldCA9IHJlcG9ydChvcHRpb25zLCAmdGFnLT5vYmplY3QsIEZTQ0tfTVNHX01JU1NJTkdfVEFHLCAiaW52YWxpZCBmb3JtYXQgLSB1bmV4cGVjdGVkIGVuZCBhZnRlciAndHlwZScgbGluZSIpOworCQlnb3RvIGRvbmU7CisJfQorCXN0cmJ1Zl9hZGRmKCZzYiwgInJlZnMvdGFncy8lLipzIiwgKGludCkoZW9sIC0gYnVmZmVyKSwgYnVmZmVyKTsKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoc2IuYnVmLCAwKSkgeworCQlyZXQgPSByZXBvcnQob3B0aW9ucywgJnRhZy0+b2JqZWN0LCBGU0NLX01TR19CQURfVEFHX05BTUUsCisJCQkgICAiaW52YWxpZCAndGFnJyBuYW1lOiAlLipzIiwKKwkJCSAgIChpbnQpKGVvbCAtIGJ1ZmZlciksIGJ1ZmZlcik7CisJCWlmIChyZXQpCisJCQlnb3RvIGRvbmU7CisJfQorCWJ1ZmZlciA9IGVvbCArIDE7CisKKwlpZiAoIXNraXBfcHJlZml4KGJ1ZmZlciwgInRhZ2dlciAiLCAmYnVmZmVyKSkgeworCQkvKiBlYXJseSB0YWdzIGRvIG5vdCBjb250YWluICd0YWdnZXInIGxpbmVzOyB3YXJuIG9ubHkgKi8KKwkJcmV0ID0gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfTUlTU0lOR19UQUdHRVJfRU5UUlksICJpbnZhbGlkIGZvcm1hdCAtIGV4cGVjdGVkICd0YWdnZXInIGxpbmUiKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZG9uZTsKKwl9CisJZWxzZQorCQlyZXQgPSBmc2NrX2lkZW50KCZidWZmZXIsICZ0YWctPm9iamVjdCwgb3B0aW9ucyk7CisKK2RvbmU6CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlmcmVlKHRvX2ZyZWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZnNja190YWcoc3RydWN0IHRhZyAqdGFnLCBjb25zdCBjaGFyICpkYXRhLAorCXVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucykKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICp0YWdnZWQgPSB0YWctPnRhZ2dlZDsKKworCWlmICghdGFnZ2VkKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsICZ0YWctPm9iamVjdCwgRlNDS19NU0dfQkFEX1RBR19PQkpFQ1QsICJjb3VsZCBub3QgbG9hZCB0YWdnZWQgb2JqZWN0Iik7CisKKwlyZXR1cm4gZnNja190YWdfYnVmZmVyKHRhZywgZGF0YSwgc2l6ZSwgb3B0aW9ucyk7Cit9CisKK2ludCBmc2NrX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwlzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKQoreworCWlmICghb2JqKQorCQlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfQkFEX09CSkVDVF9TSEExLCAibm8gdmFsaWQgb2JqZWN0IHRvIGZzY2siKTsKKworCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpCisJCXJldHVybiAwOworCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpCisJCXJldHVybiBmc2NrX3RyZWUoKHN0cnVjdCB0cmVlICopIG9iaiwgb3B0aW9ucyk7CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gZnNja19jb21taXQoKHN0cnVjdCBjb21taXQgKikgb2JqLCAoY29uc3QgY2hhciAqKSBkYXRhLAorCQkJc2l6ZSwgb3B0aW9ucyk7CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfVEFHKQorCQlyZXR1cm4gZnNja190YWcoKHN0cnVjdCB0YWcgKikgb2JqLCAoY29uc3QgY2hhciAqKSBkYXRhLAorCQkJc2l6ZSwgb3B0aW9ucyk7CisKKwlyZXR1cm4gcmVwb3J0KG9wdGlvbnMsIG9iaiwgRlNDS19NU0dfVU5LTk9XTl9UWVBFLCAidW5rbm93biB0eXBlICclZCcgKGludGVybmFsIGZzY2sgZXJyb3IpIiwKKwkJCSAgb2JqLT50eXBlKTsKK30KKworaW50IGZzY2tfZXJyb3JfZnVuY3Rpb24oc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgbXNnX3R5cGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJaWYgKG1zZ190eXBlID09IEZTQ0tfV0FSTikgeworCQl3YXJuaW5nKCJvYmplY3QgJXM6ICVzIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSwgbWVzc2FnZSk7CisJCXJldHVybiAwOworCX0KKwllcnJvcigib2JqZWN0ICVzOiAlcyIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSksIG1lc3NhZ2UpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZnNjay5oIGIvZnNjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZWQ4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9mc2NrLmgKQEAgLTAsMCArMSw1MyBAQAorI2lmbmRlZiBHSVRfRlNDS19ICisjZGVmaW5lIEdJVF9GU0NLX0gKKworI2RlZmluZSBGU0NLX0VSUk9SIDEKKyNkZWZpbmUgRlNDS19XQVJOIDIKKyNkZWZpbmUgRlNDS19JR05PUkUgMworCitzdHJ1Y3QgZnNja19vcHRpb25zOworCit2b2lkIGZzY2tfc2V0X21zZ190eXBlKHN0cnVjdCBmc2NrX29wdGlvbnMgKm9wdGlvbnMsCisJCWNvbnN0IGNoYXIgKm1zZ19pZCwgY29uc3QgY2hhciAqbXNnX3R5cGUpOwordm9pZCBmc2NrX3NldF9tc2dfdHlwZXMoc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucywgY29uc3QgY2hhciAqdmFsdWVzKTsKK2ludCBpc192YWxpZF9tc2dfdHlwZShjb25zdCBjaGFyICptc2dfaWQsIGNvbnN0IGNoYXIgKm1zZ190eXBlKTsKKworLyoKKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBmc2NrX3dhbGsKKyAqIHR5cGUgaXMgdGhlIGV4cGVjdGVkIHR5cGUgb2YgdGhlIG9iamVjdCBvciBPQkpfQU5ZCisgKiB0aGUgcmV0dXJuIHZhbHVlIGlzOgorICogICAgIDAJZXZlcnl0aGluZyBPSworICogICAgIDwwCWVycm9yIHNpZ25hbGVkIGFuZCBhYm9ydAorICogICAgID4wCWVycm9yIHNpZ25hbGVkIGFuZCBkbyBub3QgYWJvcnQKKyAqLwordHlwZWRlZiBpbnQgKCpmc2NrX3dhbGtfZnVuYykoc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgdm9pZCAqZGF0YSwgc3RydWN0IGZzY2tfb3B0aW9ucyAqb3B0aW9ucyk7CisKKy8qIGNhbGxiYWNrIGZvciBmc2NrX29iamVjdCwgdHlwZSBpcyBGU0NLX0VSUk9SIG9yIEZTQ0tfV0FSTiAqLwordHlwZWRlZiBpbnQgKCpmc2NrX2Vycm9yKShzdHJ1Y3Qgb2JqZWN0ICpvYmosIGludCB0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKTsKKworaW50IGZzY2tfZXJyb3JfZnVuY3Rpb24oc3RydWN0IG9iamVjdCAqb2JqLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbWVzc2FnZSk7CisKK3N0cnVjdCBmc2NrX29wdGlvbnMgeworCWZzY2tfd2Fsa19mdW5jIHdhbGs7CisJZnNja19lcnJvciBlcnJvcl9mdW5jOworCXVuc2lnbmVkIHN0cmljdDoxOworCWludCAqbXNnX3R5cGU7CisJc3RydWN0IHNoYTFfYXJyYXkgKnNraXBsaXN0OworfTsKKworI2RlZmluZSBGU0NLX09QVElPTlNfREVGQVVMVCB7IE5VTEwsIGZzY2tfZXJyb3JfZnVuY3Rpb24sIDAsIE5VTEwgfQorI2RlZmluZSBGU0NLX09QVElPTlNfU1RSSUNUIHsgTlVMTCwgZnNja19lcnJvcl9mdW5jdGlvbiwgMSwgTlVMTCB9CisKKy8qIGRlc2NlbmQgaW4gYWxsIGxpbmtlZCBjaGlsZCBvYmplY3RzCisgKiB0aGUgcmV0dXJuIHZhbHVlIGlzOgorICogICAgLTEJZXJyb3IgaW4gcHJvY2Vzc2luZyB0aGUgb2JqZWN0CisgKiAgICA8MAlyZXR1cm4gdmFsdWUgb2YgdGhlIGNhbGxiYWNrLCB3aGljaCBsZWFkIHRvIGFuIGFib3J0CisgKiAgICA+MAlyZXR1cm4gdmFsdWUgb2YgdGhlIGZpcnN0IHNpZ25hbGVkIGVycm9yID4wIChpbiB0aGUgY2FzZSBvZiBubyBvdGhlciBlcnJvcnMpCisgKiAgICAwCQlldmVyeXRoaW5nIE9LCisgKi8KK2ludCBmc2NrX3dhbGsoc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpkYXRhLCBzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKTsKKy8qIElmIE5VTEwgaXMgcGFzc2VkIGZvciBkYXRhLCB3ZSBhc3N1bWUgdGhlIG9iamVjdCBpcyBsb2NhbCBhbmQgcmVhZCBpdC4gKi8KK2ludCBmc2NrX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwlzdHJ1Y3QgZnNja19vcHRpb25zICpvcHRpb25zKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9nZW5lcmF0ZS1jbWRsaXN0LnNoIGIvZ2VuZXJhdGUtY21kbGlzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYjBkMWIwCi0tLSAvZGV2L251bGwKKysrIGIvZ2VuZXJhdGUtY21kbGlzdC5zaApAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vc2gKKworZWNobyAiLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgJDAgKi8KK3N0cnVjdCBjbWRuYW1lX2hlbHAgeworCWNoYXIgbmFtZVsxNl07CisJY2hhciBoZWxwWzgwXTsKKwl1bnNpZ25lZCBjaGFyIGdyb3VwOworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbW1vbl9jbWRfZ3JvdXBzW10gPSB7IgorCitncnBzPWdycHMkJC50bXAKK21hdGNoPW1hdGNoJCQudG1wCit0cmFwICJybSAtZiAnJGdycHMnICckbWF0Y2gnIiAwIDEgMiAzIDE1CisKK3NlZCAtbiAnCisJMSwvXiMjIyBjb21tb24gZ3JvdXBzL2IKKwkvXiMjIyBjb21tYW5kIGxpc3QvcQorCS9eIy9iCisJL15bIAldKiQvYgorCWg7cy9eW14gCV1bXiAJXSpbIAldWyAJXSpcKC4qXCkvCU5fKCJcMSIpLC9wCisJZztzL15cKFteIAldW14gCV0qXClbIAldLiovXDEvdyAnJGdycHMnCisJJyAiJDEiCitwcmludGYgJ307XG5cbicKKworbj0wCitzdWJzdG51bT0KK3doaWxlIHJlYWQgZ3JwCitkbworCWVjaG8gIl5naXQtLi4qWyAJXSRncnAiCisJc3Vic3RudW09IiRzdWJzdG51bSR7c3Vic3RudW06Kzt9cy9bIAldJGdycC8kbi8iCisJbj0kKCgkbisxKSkKK2RvbmUgPCIkZ3JwcyIgPiIkbWF0Y2giCisKK3ByaW50ZiAnc3RhdGljIHN0cnVjdCBjbWRuYW1lX2hlbHAgY29tbW9uX2NtZHNbXSA9IHtcbicKK2dyZXAgLWYgIiRtYXRjaCIgIiQxIiB8CitzZWQgJ3MvXmdpdC0vLycgfAorc29ydCB8Cit3aGlsZSByZWFkIGNtZCB0YWdzCitkbworCXRhZz0kKGVjaG8gIiR0YWdzIiB8IHNlZCAiJHN1YnN0bnVtOyBzL1teMC05XS8vZyIpCisJc2VkIC1uICcKKwkJL15OQU1FLywvZ2l0LSciJGNtZCInL0gKKwkJJHsKKwkJCXgKKwkJCXMvLipnaXQtJyIkY21kIicgLSBcKC4qXCkvCXsiJyIkY21kIiciLCBOXygiXDEiKSwgJyR0YWcnfSwvCisJCQlwCisJCX0nICJEb2N1bWVudGF0aW9uL2dpdC0kY21kLnR4dCIKK2RvbmUKK2VjaG8gIn07IgpkaWZmIC0tZ2l0IGEvZ2V0dGV4dC5jIGIvZ2V0dGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNjhhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9nZXR0ZXh0LmMKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiZ2V0dGV4dC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworI2lmbmRlZiBOT19HRVRURVhUCisjCWluY2x1ZGUgPGxvY2FsZS5oPgorIwlpbmNsdWRlIDxsaWJpbnRsLmg+CisjCWlmZGVmIEhBVkVfTElCQ0hBUlNFVF9ICisjCQlpbmNsdWRlIDxsaWJjaGFyc2V0Lmg+CisjCWVsc2UKKyMJCWluY2x1ZGUgPGxhbmdpbmZvLmg+CisjCQlkZWZpbmUgbG9jYWxlX2NoYXJzZXQoKSBubF9sYW5naW5mbyhDT0RFU0VUKQorIwllbmRpZgorI2VuZGlmCisKKy8qCisgKiBHdWVzcyB0aGUgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZXMgZnJvbSB0aGUgdmFsdWUgaW4gTEFOR1VBR0UgZW52aXJvbm1lbnQKKyAqIHZhcmlhYmxlIGFuZCBMQ19NRVNTQUdFUyBsb2NhbGUgY2F0ZWdvcnkgaWYgTk9fR0VUVEVYVCBpcyBub3QgZGVmaW5lZC4KKyAqCisgKiBUaGUgcmVzdWx0IGNhbiBiZSBhIGNvbG9uLXNlcGFyYXRlZCBsaXN0IGxpa2UgImtvOmphOmVuIi4KKyAqLworY29uc3QgY2hhciAqZ2V0X3ByZWZlcnJlZF9sYW5ndWFnZXModm9pZCkKK3sKKwljb25zdCBjaGFyICpyZXR2YWw7CisKKwlyZXR2YWwgPSBnZXRlbnYoIkxBTkdVQUdFIik7CisJaWYgKHJldHZhbCAmJiAqcmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisjaWZuZGVmIE5PX0dFVFRFWFQKKwlyZXR2YWwgPSBzZXRsb2NhbGUoTENfTUVTU0FHRVMsIE5VTEwpOworCWlmIChyZXR2YWwgJiYgKnJldHZhbCAmJgorCQlzdHJjbXAocmV0dmFsLCAiQyIpICYmCisJCXN0cmNtcChyZXR2YWwsICJQT1NJWCIpKQorCQlyZXR1cm4gcmV0dmFsOworI2VuZGlmCisKKwlyZXR1cm4gTlVMTDsKK30KKworI2lmZGVmIEdFVFRFWFRfUE9JU09OCitpbnQgdXNlX2dldHRleHRfcG9pc29uKHZvaWQpCit7CisJc3RhdGljIGludCBwb2lzb25fcmVxdWVzdGVkID0gLTE7CisJaWYgKHBvaXNvbl9yZXF1ZXN0ZWQgPT0gLTEpCisJCXBvaXNvbl9yZXF1ZXN0ZWQgPSBnZXRlbnYoIkdJVF9HRVRURVhUX1BPSVNPTiIpID8gMSA6IDA7CisJcmV0dXJuIHBvaXNvbl9yZXF1ZXN0ZWQ7Cit9CisjZW5kaWYKKworI2lmbmRlZiBOT19HRVRURVhUCitzdGF0aWMgaW50IHRlc3RfdnNucHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWNoYXIgYnVmWzI2XTsKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNoYXJzZXQ7CitzdGF0aWMgdm9pZCBpbml0X2dldHRleHRfY2hhcnNldChjb25zdCBjaGFyICpkb21haW4pCit7CisJLyoKKwkgICBUaGlzIHRyaWNrIGFycmFuZ2VzIGZvciBtZXNzYWdlcyB0byBiZSBlbWl0dGVkIGluIHRoZSB1c2VyJ3MKKwkgICByZXF1ZXN0ZWQgZW5jb2RpbmcsIGJ1dCBhdm9pZHMgc2V0dGluZyBMQ19DVFlQRSBmcm9tIHRoZQorCSAgIGVudmlyb25tZW50IGZvciB0aGUgd2hvbGUgcHJvZ3JhbS4KKworCSAgIFRoaXMgcHJpbWFyaWx5IGRvbmUgdG8gYXZvaWQgYSBidWcgaW4gdnNucHJpbnRmIGluIHRoZSBHTlUgQworCSAgIExpYnJhcnkgWzFdLiB3aGljaCB0cmlnZ2VyZWQgYSAieW91ciB2c25wcmludGYgaXMgYnJva2VuIiBlcnJvcgorCSAgIG9uIEdpdCdzIG93biByZXBvc2l0b3J5IHdoZW4gaW5zcGVjdGluZyB2MC45OS42fjEgdW5kZXIgYSBVVEYtOAorCSAgIGxvY2FsZS4KKworCSAgIFRoYXQgY29tbWl0IGNvbnRhaW5zIGEgSVNPLTg4NTktMSBlbmNvZGVkIGF1dGhvciBuYW1lLCB3aGljaAorCSAgIHRoZSBsb2NhbGUgYXdhcmUgdnNucHJpbnRmKDMpIHdvbid0IGludGVycG9sYXRlIGluIHRoZSBmb3JtYXQKKwkgICBhcmd1bWVudCwgZHVlIHRvIG1pc21hdGNoIGJldHdlZW4gdGhlIGRhdGEgZW5jb2RpbmcgYW5kIHRoZQorCSAgIGxvY2FsZS4KKworCSAgIEV2ZW4gaWYgaXQgd2Fzbid0IGZvciB0aGF0IGJ1ZyB3ZSB3b3VsZG4ndCB3YW50IHRvIHVzZSBMQ19DVFlQRSBhdAorCSAgIHRoaXMgcG9pbnQsIGJlY2F1c2UgaXQnZCByZXF1aXJlIGF1ZGl0aW5nIGFsbCB0aGUgY29kZSB0aGF0IHVzZXMgQworCSAgIGZ1bmN0aW9ucyB3aG9zZSBzZW1hbnRpY3MgYXJlIG1vZGlmaWVkIGJ5IExDX0NUWVBFLgorCisJICAgQnV0IG9ubHkgc2V0dGluZyBMQ19NRVNTQUdFUyBhcyB3ZSBkbyBjcmVhdGVzIGEgcHJvYmxlbSwgc2luY2UKKwkgICB3ZSBkZWNsYXJlIHRoZSBlbmNvZGluZyBvZiBvdXIgUE8gZmlsZXNbMl0gdGhlIGdldHRleHQKKwkgICBpbXBsZW1lbnRhdGlvbiB3aWxsIHRyeSB0byByZWNvZGUgaXQgdG8gdGhlIHVzZXIncyBsb2NhbGUsIGJ1dAorCSAgIHdpdGhvdXQgTENfQ1RZUEUgaXQnbGwgZW1pdCBzb21ldGhpbmcgbGlrZSB0aGlzIG9uICdnaXQgaW5pdCcKKwkgICB1bmRlciB0aGUgSWNlbGFuZGljIGxvY2FsZToKKworCSAgICAgICBCaj8gdGlsIHQ/bWEgR2l0IGxpbmQgPyAvaGxhZ2gvLmdpdC8KKworCSAgIEdldHRleHQga25vd3MgYWJvdXQgdGhlIGVuY29kaW5nIG9mIG91ciBQTyBmaWxlLCBidXQgd2UgaGF2ZW4ndAorCSAgIHRvbGQgaXQgYWJvdXQgdGhlIHVzZXIncyBlbmNvZGluZywgc28gYWxsIHRoZSBub24tVVMtQVNDSUkKKwkgICBjaGFyYWN0ZXJzIGdldCBlbmNvZGVkIHRvIHF1ZXN0aW9uIG1hcmtzLgorCisJICAgQnV0IHdlJ3JlIGluIGx1Y2shIFdlIGNhbiBzZXQgTENfQ1RZUEUgZnJvbSB0aGUgZW52aXJvbm1lbnQKKwkgICBvbmx5IHdoaWxlIHdlIGNhbGwgbmxfbGFuZ2luZm8gYW5kCisJICAgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQuIFRoYXQgc3VmZmljZXMgdG8gdGVsbCBnZXR0ZXh0IHdoYXQKKwkgICBlbmNvZGluZyBpdCBzaG91bGQgZW1pdCBpbiwgc28gaXQnbGwgbm93IHNheToKKworCSAgICAgICBCasOzIHRpbCB0w7NtYSBHaXQgbGluZCDDrSAvaGxhZ2gvLmdpdC8KKworCSAgIEFuZCB0aGUgZXF1aXZhbGVudCBJU08tODg1OS0xIHN0cmluZyB3aWxsIGJlIGVtaXR0ZWQgdW5kZXIgYQorCSAgIElTTy04ODU5LTEgbG9jYWxlLgorCisJICAgV2l0aCB0aGlzIGNoYW5nZSB3YXkgd2UgZ2V0IHRoZSBhZHZhbnRhZ2VzIG9mIHNldHRpbmcgTENfQ1RZUEUKKwkgICAodGFsayB0byB0aGUgdXNlciBpbiBoaXMgbGFuZ3VhZ2UvZW5jb2RpbmcpLCB3aXRob3V0IHRoZSBtYWpvcgorCSAgIGRyYXdiYWNrcyAoY2hhbmdlZCBzZW1hbnRpY3MgZm9yIEMgZnVuY3Rpb25zIHdlIHJlbHkgb24pLgorCisJICAgSG93ZXZlciBmb3JlaWduIGZ1bmN0aW9ucyB1c2luZyBvdGhlciBtZXNzYWdlIGNhdGFsb2dzIHRoYXQKKwkgICBhcmVuJ3QgdXNpbmcgb3VyIG5lYXQgdHJpY2sgd2lsbCBzdGlsbCBoYXZlIGEgcHJvYmxlbSwgZS5nLiBpZgorCSAgIHdlIGhhdmUgdG8gY2FsbCBwZXJyb3IoMyk6CisKKwkgICAjaW5jbHVkZSA8c3RkaW8uaD4KKwkgICAjaW5jbHVkZSA8bG9jYWxlLmg+CisJICAgI2luY2x1ZGUgPGVycm5vLmg+CisKKwkgICBpbnQgbWFpbih2b2lkKQorCSAgIHsKKwkJICAgc2V0bG9jYWxlKExDX01FU1NBR0VTLCAiIik7CisJCSAgIHNldGxvY2FsZShMQ19DVFlQRSwgIkMiKTsKKwkJICAgZXJybm8gPSBFTk9ERVY7CisJCSAgIHBlcnJvcigidGVzdCIpOworCQkgICByZXR1cm4gMDsKKwkgICB9CisKKwkgICBSdW5uaW5nIHRoYXQgd2lsbCBnaXZlIHlvdSBhIG1lc3NhZ2Ugd2l0aCBxdWVzdGlvbiBtYXJrczoKKworCSAgICQgTEFOR1VBR0U9IExBTkc9ZGVfREUudXRmOCAuL3Rlc3QKKwkgICB0ZXN0OiBLZWluIHBhc3NlbmRlcyBHZXI/dCBnZWZ1bmRlbgorCisJICAgVGhlIHZzbnByaW50ZiBidWcgaGFzIGJlZW4gZml4ZWQgc2luY2UgZ2xpYmMgMi4xNy4KKworCSAgIFRoZW4gd2UgY291bGQgc2ltcGx5IHNldCBMQ19DVFlQRSBmcm9tIHRoZSBlbnZpcm9ubWVudCwgd2hpY2ggd291bGQKKwkgICBtYWtlIHRoaW5ncyBsaWtlIHRoZSBleHRlcm5hbCBwZXJyb3IoMykgbWVzc2FnZXMgd29yay4KKworCSAgIFNlZSB0L3QwMjAzLWdldHRleHQtc2V0bG9jYWxlLXNhbml0eS5zaCdzICJnZXR0ZXh0LmMiIHRlc3RzIGZvcgorCSAgIHJlZ3Jlc3Npb24gdGVzdHMuCisKKwkgICAxLiBodHRwOi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTY1MzAKKwkgICAyLiBFLmcuICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIgaW4gcG8vaXMucG8KKwkqLworCXNldGxvY2FsZShMQ19DVFlQRSwgIiIpOworCWNoYXJzZXQgPSBsb2NhbGVfY2hhcnNldCgpOworCWJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KGRvbWFpbiwgY2hhcnNldCk7CisJLyogdGhlIHN0cmluZyBpcyB0YWtlbiBmcm9tIHYwLjk5LjZ+MSAqLworCWlmICh0ZXN0X3ZzbnByaW50ZigiJS4qcyIsIDEzLCAiRGF2aWRfS1wzNDVnZWRhbCIpIDwgMCkKKwkJc2V0bG9jYWxlKExDX0NUWVBFLCAiQyIpOworfQorCit2b2lkIGdpdF9zZXR1cF9nZXR0ZXh0KHZvaWQpCit7CisJY29uc3QgY2hhciAqcG9kaXIgPSBnZXRlbnYoIkdJVF9URVhURE9NQUlORElSIik7CisKKwlpZiAoIXBvZGlyKQorCQlwb2RpciA9IEdJVF9MT0NBTEVfUEFUSDsKKwliaW5kdGV4dGRvbWFpbigiZ2l0IiwgcG9kaXIpOworCXNldGxvY2FsZShMQ19NRVNTQUdFUywgIiIpOworCXNldGxvY2FsZShMQ19USU1FLCAiIik7CisJaW5pdF9nZXR0ZXh0X2NoYXJzZXQoImdpdCIpOworCXRleHRkb21haW4oImdpdCIpOworfQorCisvKiByZXR1cm4gdGhlIG51bWJlciBvZiBjb2x1bW5zIG9mIHN0cmluZyAncycgaW4gY3VycmVudCBsb2NhbGUgKi8KK2ludCBnZXR0ZXh0X3dpZHRoKGNvbnN0IGNoYXIgKnMpCit7CisJc3RhdGljIGludCBpc191dGY4ID0gLTE7CisJaWYgKGlzX3V0ZjggPT0gLTEpCisJCWlzX3V0ZjggPSAhc3RyY21wKGNoYXJzZXQsICJVVEYtOCIpOworCisJcmV0dXJuIGlzX3V0ZjggPyB1dGY4X3N0cndpZHRoKHMpIDogc3RybGVuKHMpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9nZXR0ZXh0LmggYi9nZXR0ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2OTZhNAotLS0gL2Rldi9udWxsCisrKyBiL2dldHRleHQuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyAqCisgKiBUaGlzIGlzIGEgc2tlbGV0b24gbm8tb3AgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGV4dCBmb3IgR2l0LgorICogWW91IGNhbiByZXBsYWNlIGl0IHdpdGggc29tZXRoaW5nIHRoYXQgdXNlcyBsaWJpbnRsLmggYW5kIHdyYXBzCisgKiBnZXR0ZXh0KCkgdG8gdHJ5IG91dCB0aGUgdHJhbnNsYXRpb25zLgorICovCisKKyNpZm5kZWYgR0VUVEVYVF9ICisjZGVmaW5lIEdFVFRFWFRfSAorCisjaWYgZGVmaW5lZChfKSB8fCBkZWZpbmVkKFFfKQorI2Vycm9yICJuYW1lc3BhY2UgY29uZmxpY3Q6ICdfJyBvciAnUV8nIGlzIHByZS1kZWZpbmVkPyIKKyNlbmRpZgorCisjaWZuZGVmIE5PX0dFVFRFWFQKKyMJaW5jbHVkZSA8bGliaW50bC5oPgorI2Vsc2UKKyMJaWZkZWYgZ2V0dGV4dAorIwkJdW5kZWYgZ2V0dGV4dAorIwllbmRpZgorIwlkZWZpbmUgZ2V0dGV4dChzKSAocykKKyMJaWZkZWYgbmdldHRleHQKKyMJCXVuZGVmIG5nZXR0ZXh0CisjCWVuZGlmCisjCWRlZmluZSBuZ2V0dGV4dChzLCBwLCBuKSAoKG4gPT0gMSkgPyAocykgOiAocCkpCisjZW5kaWYKKworI2RlZmluZSBGT1JNQVRfUFJFU0VSVklORyhuKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXRfYXJnKG4pKSkKKworI2lmbmRlZiBOT19HRVRURVhUCitleHRlcm4gdm9pZCBnaXRfc2V0dXBfZ2V0dGV4dCh2b2lkKTsKK2V4dGVybiBpbnQgZ2V0dGV4dF93aWR0aChjb25zdCBjaGFyICpzKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgZ2l0X3NldHVwX2dldHRleHQodm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgaW50IGdldHRleHRfd2lkdGgoY29uc3QgY2hhciAqcykKK3sKKwlyZXR1cm4gc3RybGVuKHMpOworfQorI2VuZGlmCisKKyNpZmRlZiBHRVRURVhUX1BPSVNPTgorZXh0ZXJuIGludCB1c2VfZ2V0dGV4dF9wb2lzb24odm9pZCk7CisjZWxzZQorI2RlZmluZSB1c2VfZ2V0dGV4dF9wb2lzb24oKSAwCisjZW5kaWYKKworc3RhdGljIGlubGluZSBGT1JNQVRfUFJFU0VSVklORygxKSBjb25zdCBjaGFyICpfKGNvbnN0IGNoYXIgKm1zZ2lkKQoreworCWlmICghKm1zZ2lkKQorCQlyZXR1cm4gIiI7CisJcmV0dXJuIHVzZV9nZXR0ZXh0X3BvaXNvbigpID8gIiMgR0VUVEVYVCBQT0lTT04gIyIgOiBnZXR0ZXh0KG1zZ2lkKTsKK30KKworc3RhdGljIGlubGluZSBGT1JNQVRfUFJFU0VSVklORygxKSBGT1JNQVRfUFJFU0VSVklORygyKQorY29uc3QgY2hhciAqUV8oY29uc3QgY2hhciAqbXNnaWQsIGNvbnN0IGNoYXIgKnBsdSwgdW5zaWduZWQgbG9uZyBuKQoreworCWlmICh1c2VfZ2V0dGV4dF9wb2lzb24oKSkKKwkJcmV0dXJuICIjIEdFVFRFWFQgUE9JU09OICMiOworCXJldHVybiBuZ2V0dGV4dChtc2dpZCwgcGx1LCBuKTsKK30KKworLyogTWFyayBtc2dpZCBmb3IgdHJhbnNsYXRpb24gYnV0IGRvIG5vdCB0cmFuc2xhdGUgaXQuICovCisjaWYgIVVTRV9QQVJFTlNfQVJPVU5EX0dFVFRFWFRfTgorI2RlZmluZSBOXyhtc2dpZCkgbXNnaWQKKyNlbHNlCisvKgorICogU3RyaWN0bHkgc3BlYWtpbmcsIHRoaXMgd2lsbCBsZWFkIHRvIGludmFsaWQgQyB3aGVuCisgKiB1c2VkIHRoaXMgd2F5OgorICoJc3RhdGljIGNvbnN0IGNoYXIgc1tdID0gTl8oIkZPTyIpOworICogd2hpY2ggd2lsbCBleHBhbmQgdG8KKyAqCXN0YXRpYyBjb25zdCBjaGFyIHNbXSA9ICgiRk9PIik7CisgKiBhbmQgaW4gdmFsaWQgQywgdGhlIGluaXRpYWxpemVyIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgbXVzdAorICogYmUgd2l0aG91dCB0aGUgcGFyZW50aGVzZXMuICBCdXQgbWFueSBjb21waWxlcnMgZG8gYWNjZXB0IGl0CisgKiBhcyBhIGxhbmd1YWdlIGV4dGVuc2lvbiBhbmQgaXQgd2lsbCBhbGxvdyB1cyB0byBjYXRjaCBtaXN0YWtlcworICogbGlrZToKKyAqCXN0YXRpYyBjb25zdCBjaGFyICptc2dzW10gPSB7CisgKgkJTl8oIm9uZSIpCisgKgkJTl8oInR3byIpLAorICoJCU5fKCJ0aHJlZSIpLAorICoJCU5VTEwKKyAqCX07CisgKiAobm90aWNlIHRoZSBtaXNzaW5nIGNvbW1hIG9uIG9uZSBvZiB0aGUgbGluZXMpIGJ5IGZvcmNpbmcKKyAqIGEgY29tcGlsYXRpb24gZXJyb3IsIGJlY2F1c2UgcGFyZW50aGVzaXNlZCAoIm9uZSIpICgidHdvIikKKyAqIHdpbGwgbm90IGdldCBzaWxlbnRseSB0dXJuZWQgaW50byAoIm9uZXR3byIpLgorICovCisjZGVmaW5lIE5fKG1zZ2lkKSAobXNnaWQpCisjZW5kaWYKKworY29uc3QgY2hhciAqZ2V0X3ByZWZlcnJlZF9sYW5ndWFnZXModm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZ2l0LWFkZC0taW50ZXJhY3RpdmUucGVybCBiL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzc4NzZkNAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1hZGQtLWludGVyYWN0aXZlLnBlcmwKQEAgLTAsMCArMSwxNjU0IEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHaXQ7CisKK2Jpbm1vZGUoU1RET1VULCAiOnJhdyIpOworCitteSAkcmVwbyA9IEdpdC0+cmVwb3NpdG9yeSgpOworCitteSAkbWVudV91c2VfY29sb3IgPSAkcmVwby0+Z2V0X2NvbG9yYm9vbCgnY29sb3IuaW50ZXJhY3RpdmUnKTsKK215ICgkcHJvbXB0X2NvbG9yLCAkaGVhZGVyX2NvbG9yLCAkaGVscF9jb2xvcikgPQorCSRtZW51X3VzZV9jb2xvciA/ICgKKwkJJHJlcG8tPmdldF9jb2xvcignY29sb3IuaW50ZXJhY3RpdmUucHJvbXB0JywgJ2JvbGQgYmx1ZScpLAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5pbnRlcmFjdGl2ZS5oZWFkZXInLCAnYm9sZCcpLAorCQkkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5pbnRlcmFjdGl2ZS5oZWxwJywgJ3JlZCBib2xkJyksCisJKSA6ICgpOworbXkgJGVycm9yX2NvbG9yID0gKCk7CitpZiAoJG1lbnVfdXNlX2NvbG9yKSB7CisJbXkgJGhlbHBfY29sb3Jfc3BlYyA9ICgkcmVwby0+Y29uZmlnKCdjb2xvci5pbnRlcmFjdGl2ZS5oZWxwJykgb3IKKwkJCQkncmVkIGJvbGQnKTsKKwkkZXJyb3JfY29sb3IgPSAkcmVwby0+Z2V0X2NvbG9yKCdjb2xvci5pbnRlcmFjdGl2ZS5lcnJvcicsCisJCQkJCSRoZWxwX2NvbG9yX3NwZWMpOworfQorCitteSAkZGlmZl91c2VfY29sb3IgPSAkcmVwby0+Z2V0X2NvbG9yYm9vbCgnY29sb3IuZGlmZicpOworbXkgKCRmcmFnaW5mb19jb2xvcikgPQorCSRkaWZmX3VzZV9jb2xvciA/ICgKKwkJJHJlcG8tPmdldF9jb2xvcignY29sb3IuZGlmZi5mcmFnJywgJ2N5YW4nKSwKKwkpIDogKCk7CitteSAoJGRpZmZfcGxhaW5fY29sb3IpID0KKwkkZGlmZl91c2VfY29sb3IgPyAoCisJCSRyZXBvLT5nZXRfY29sb3IoJ2NvbG9yLmRpZmYucGxhaW4nLCAnJyksCisJKSA6ICgpOworbXkgKCRkaWZmX29sZF9jb2xvcikgPQorCSRkaWZmX3VzZV9jb2xvciA/ICgKKwkJJHJlcG8tPmdldF9jb2xvcignY29sb3IuZGlmZi5vbGQnLCAncmVkJyksCisJKSA6ICgpOworbXkgKCRkaWZmX25ld19jb2xvcikgPQorCSRkaWZmX3VzZV9jb2xvciA/ICgKKwkJJHJlcG8tPmdldF9jb2xvcignY29sb3IuZGlmZi5uZXcnLCAnZ3JlZW4nKSwKKwkpIDogKCk7CisKK215ICRub3JtYWxfY29sb3IgPSAkcmVwby0+Z2V0X2NvbG9yKCIiLCAicmVzZXQiKTsKKworbXkgJGRpZmZfYWxnb3JpdGhtID0gJHJlcG8tPmNvbmZpZygnZGlmZi5hbGdvcml0aG0nKTsKKworbXkgJHVzZV9yZWFka2V5ID0gMDsKK215ICR1c2VfdGVybWNhcCA9IDA7CitteSAldGVybV9lc2NhcGVzOworCitzdWIgUmVhZE1vZGU7CitzdWIgUmVhZEtleTsKK2lmICgkcmVwby0+Y29uZmlnX2Jvb2woImludGVyYWN0aXZlLnNpbmdsZWtleSIpKSB7CisJZXZhbCB7CisJCXJlcXVpcmUgVGVybTo6UmVhZEtleTsKKwkJVGVybTo6UmVhZEtleS0+aW1wb3J0OworCQkkdXNlX3JlYWRrZXkgPSAxOworCX07CisJaWYgKCEkdXNlX3JlYWRrZXkpIHsKKwkJcHJpbnQgU1RERVJSICJtaXNzaW5nIFRlcm06OlJlYWRLZXksIGRpc2FibGluZyBpbnRlcmFjdGl2ZS5zaW5nbGVrZXlcbiI7CisJfQorCWV2YWwgeworCQlyZXF1aXJlIFRlcm06OkNhcDsKKwkJbXkgJHRlcm1jYXAgPSBUZXJtOjpDYXAtPlRnZXRlbnQ7CisJCWZvcmVhY2ggKHZhbHVlcyAlJHRlcm1jYXApIHsKKwkJCSR0ZXJtX2VzY2FwZXN7JF99ID0gMSBpZiAvXlxlLzsKKwkJfQorCQkkdXNlX3Rlcm1jYXAgPSAxOworCX07Cit9CisKK3N1YiBjb2xvcmVkIHsKKwlteSAkY29sb3IgPSBzaGlmdDsKKwlteSAkc3RyaW5nID0gam9pbigiIiwgQF8pOworCisJaWYgKGRlZmluZWQgJGNvbG9yKSB7CisJCSMgUHV0IGEgY29sb3IgY29kZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggbGluZSwgYSByZXNldCBhdCB0aGUgZW5kCisJCSMgY29sb3IgYWZ0ZXIgbmV3bGluZXMgdGhhdCBhcmUgbm90IGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZworCQkkc3RyaW5nID1+IHMvKFxuKykoLikvJDEkY29sb3IkMi9nOworCQkjIHJlc2V0IGJlZm9yZSBuZXdsaW5lcworCQkkc3RyaW5nID1+IHMvKFxuKykvJG5vcm1hbF9jb2xvciQxL2c7CisJCSMgY29kZXMgYXQgYmVnaW5uaW5nIGFuZCBlbmQgKGlmIG5lY2Vzc2FyeSk6CisJCSRzdHJpbmcgPX4gcy9eLyRjb2xvci87CisJCSRzdHJpbmcgPX4gcy8kLyRub3JtYWxfY29sb3IvIHVubGVzcyAkc3RyaW5nID1+IC9cbiQvOworCX0KKwlyZXR1cm4gJHN0cmluZzsKK30KKworIyBjb21tYW5kIGxpbmUgb3B0aW9ucworbXkgJHBhdGNoX21vZGU7CitteSAkcGF0Y2hfbW9kZV9yZXZpc2lvbjsKKworc3ViIGFwcGx5X3BhdGNoOworc3ViIGFwcGx5X3BhdGNoX2Zvcl9jaGVja291dF9jb21taXQ7CitzdWIgYXBwbHlfcGF0Y2hfZm9yX3N0YXNoOworCitteSAlcGF0Y2hfbW9kZXMgPSAoCisJJ3N0YWdlJyA9PiB7CisJCURJRkYgPT4gJ2RpZmYtZmlsZXMgLXAnLAorCQlBUFBMWSA9PiBzdWIgeyBhcHBseV9wYXRjaCAnYXBwbHkgLS1jYWNoZWQnLCBAXzsgfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC0tY2FjaGVkJywKKwkJVkVSQiA9PiAnU3RhZ2UnLAorCQlUQVJHRVQgPT4gJycsCisJCVBBUlRJQ0lQTEUgPT4gJ3N0YWdpbmcnLAorCQlGSUxURVIgPT4gJ2ZpbGUtb25seScsCisJCUlTX1JFVkVSU0UgPT4gMCwKKwl9LAorCSdzdGFzaCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1wIEhFQUQnLAorCQlBUFBMWSA9PiBzdWIgeyBhcHBseV9wYXRjaCAnYXBwbHkgLS1jYWNoZWQnLCBAXzsgfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC0tY2FjaGVkJywKKwkJVkVSQiA9PiAnU3Rhc2gnLAorCQlUQVJHRVQgPT4gJycsCisJCVBBUlRJQ0lQTEUgPT4gJ3N0YXNoaW5nJywKKwkJRklMVEVSID0+IHVuZGVmLAorCQlJU19SRVZFUlNFID0+IDAsCisJfSwKKwkncmVzZXRfaGVhZCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1wIC0tY2FjaGVkJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2ggJ2FwcGx5IC1SIC0tY2FjaGVkJywgQF87IH0sCisJCUFQUExZX0NIRUNLID0+ICdhcHBseSAtUiAtLWNhY2hlZCcsCisJCVZFUkIgPT4gJ1Vuc3RhZ2UnLAorCQlUQVJHRVQgPT4gJycsCisJCVBBUlRJQ0lQTEUgPT4gJ3Vuc3RhZ2luZycsCisJCUZJTFRFUiA9PiAnaW5kZXgtb25seScsCisJCUlTX1JFVkVSU0UgPT4gMSwKKwl9LAorCSdyZXNldF9ub3RoZWFkJyA9PiB7CisJCURJRkYgPT4gJ2RpZmYtaW5kZXggLVIgLXAgLS1jYWNoZWQnLAorCQlBUFBMWSA9PiBzdWIgeyBhcHBseV9wYXRjaCAnYXBwbHkgLS1jYWNoZWQnLCBAXzsgfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC0tY2FjaGVkJywKKwkJVkVSQiA9PiAnQXBwbHknLAorCQlUQVJHRVQgPT4gJyB0byBpbmRleCcsCisJCVBBUlRJQ0lQTEUgPT4gJ2FwcGx5aW5nJywKKwkJRklMVEVSID0+ICdpbmRleC1vbmx5JywKKwkJSVNfUkVWRVJTRSA9PiAwLAorCX0sCisJJ2NoZWNrb3V0X2luZGV4JyA9PiB7CisJCURJRkYgPT4gJ2RpZmYtZmlsZXMgLXAnLAorCQlBUFBMWSA9PiBzdWIgeyBhcHBseV9wYXRjaCAnYXBwbHkgLVInLCBAXzsgfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5IC1SJywKKwkJVkVSQiA9PiAnRGlzY2FyZCcsCisJCVRBUkdFVCA9PiAnIGZyb20gd29ya3RyZWUnLAorCQlQQVJUSUNJUExFID0+ICdkaXNjYXJkaW5nJywKKwkJRklMVEVSID0+ICdmaWxlLW9ubHknLAorCQlJU19SRVZFUlNFID0+IDEsCisJfSwKKwknY2hlY2tvdXRfaGVhZCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1wJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2hfZm9yX2NoZWNrb3V0X2NvbW1pdCAnLVInLCBAXyB9LAorCQlBUFBMWV9DSEVDSyA9PiAnYXBwbHkgLVInLAorCQlWRVJCID0+ICdEaXNjYXJkJywKKwkJVEFSR0VUID0+ICcgZnJvbSBpbmRleCBhbmQgd29ya3RyZWUnLAorCQlQQVJUSUNJUExFID0+ICdkaXNjYXJkaW5nJywKKwkJRklMVEVSID0+IHVuZGVmLAorCQlJU19SRVZFUlNFID0+IDEsCisJfSwKKwknY2hlY2tvdXRfbm90aGVhZCcgPT4geworCQlESUZGID0+ICdkaWZmLWluZGV4IC1SIC1wJywKKwkJQVBQTFkgPT4gc3ViIHsgYXBwbHlfcGF0Y2hfZm9yX2NoZWNrb3V0X2NvbW1pdCAnJywgQF8gfSwKKwkJQVBQTFlfQ0hFQ0sgPT4gJ2FwcGx5JywKKwkJVkVSQiA9PiAnQXBwbHknLAorCQlUQVJHRVQgPT4gJyB0byBpbmRleCBhbmQgd29ya3RyZWUnLAorCQlQQVJUSUNJUExFID0+ICdhcHBseWluZycsCisJCUZJTFRFUiA9PiB1bmRlZiwKKwkJSVNfUkVWRVJTRSA9PiAwLAorCX0sCispOworCitteSAlcGF0Y2hfbW9kZV9mbGF2b3VyID0gJXskcGF0Y2hfbW9kZXN7c3RhZ2V9fTsKKworc3ViIHJ1bl9jbWRfcGlwZSB7CisJaWYgKCReTyBlcSAnTVNXaW4zMicpIHsKKwkJbXkgQGludmFsaWQgPSBncmVwIHttL1siOipdL30gQF87CisJCWRpZSAiJF5PIGRvZXMgbm90IHN1cHBvcnQ6IEBpbnZhbGlkXG4iIGlmIEBpbnZhbGlkOworCQlteSBAYXJncyA9IG1hcCB7IG0vIC9vID8gIlwiJF9cIiI6ICRfIH0gQF87CisJCXJldHVybiBxeHtAYXJnc307CisJfSBlbHNlIHsKKwkJbXkgJGZoID0gdW5kZWY7CisJCW9wZW4oJGZoLCAnLXwnLCBAXykgb3IgZGllOworCQlyZXR1cm4gPCRmaD47CisJfQorfQorCitteSAoJEdJVF9ESVIpID0gcnVuX2NtZF9waXBlKHF3KGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKSk7CisKK2lmICghZGVmaW5lZCAkR0lUX0RJUikgeworCWV4aXQoMSk7ICMgcmV2LXBhcnNlIHdvdWxkIGhhdmUgYWxyZWFkeSBzYWlkICJub3QgYSBnaXQgcmVwbyIKK30KK2Nob21wKCRHSVRfRElSKTsKKworbXkgJWNxdW90ZV9tYXAgPSAoCisgImIiID0+IGNocig4KSwKKyAidCIgPT4gY2hyKDkpLAorICJuIiA9PiBjaHIoMTApLAorICJ2IiA9PiBjaHIoMTEpLAorICJmIiA9PiBjaHIoMTIpLAorICJyIiA9PiBjaHIoMTMpLAorICJcXCIgPT4gIlxcIiwKKyAiXDA0MiIgPT4gIlwwNDIiLAorKTsKKworc3ViIHVucXVvdGVfcGF0aCB7CisJbG9jYWwgKCRfKSA9IEBfOworCW15ICgkcmV0dmFsLCAkcmVtYWluZGVyKTsKKwlpZiAoIS9eXDA0MiguKilcMDQyJC8pIHsKKwkJcmV0dXJuICRfOworCX0KKwkoJF8sICRyZXR2YWwpID0gKCQxLCAiIik7CisJd2hpbGUgKC9eKFteXFxdKilcXCguKikkLykgeworCQkkcmVtYWluZGVyID0gJDI7CisJCSRyZXR2YWwgLj0gJDE7CisJCWZvciAoJHJlbWFpbmRlcikgeworCQkJaWYgKC9eKFswLTNdWzAtN11bMC03XSkoLiopJC8pIHsKKwkJCQkkcmV0dmFsIC49IGNocihvY3QoJDEpKTsKKwkJCQkkXyA9ICQyOworCQkJCWxhc3Q7CisJCQl9CisJCQlpZiAoL14oW1xcXDA0MmJ0bnZmcl0pKC4qKSQvKSB7CisJCQkJJHJldHZhbCAuPSAkY3F1b3RlX21hcHskMX07CisJCQkJJF8gPSAkMjsKKwkJCQlsYXN0OworCQkJfQorCQkJIyBUaGlzIGlzIG1hbGZvcm1lZCAtLSBqdXN0IHJldHVybiBpdCBhcy1pcyBmb3Igbm93LgorCQkJcmV0dXJuICRfWzBdOworCQl9CisJCSRfID0gJHJlbWFpbmRlcjsKKwl9CisJJHJldHZhbCAuPSAkXzsKKwlyZXR1cm4gJHJldHZhbDsKK30KKworc3ViIHJlZnJlc2ggeworCW15ICRmaDsKKwlvcGVuICRmaCwgJ2dpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIHwnCisJICAgIG9yIGRpZTsKKwl3aGlsZSAoPCRmaD4pIHsKKwkJOyMgaWdub3JlICduZWVkcyB1cGRhdGUnCisJfQorCWNsb3NlICRmaDsKK30KKworc3ViIGxpc3RfdW50cmFja2VkIHsKKwltYXAgeworCQljaG9tcCAkXzsKKwkJdW5xdW90ZV9wYXRoKCRfKTsKKwl9CisJcnVuX2NtZF9waXBlKHF3KGdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUtc3RhbmRhcmQgLS0pLCBAQVJHVik7Cit9CisKK215ICRzdGF0dXNfZm10ID0gJyUxMnMgJTEycyAlcyc7CitteSAkc3RhdHVzX2hlYWQgPSBzcHJpbnRmKCRzdGF0dXNfZm10LCAnc3RhZ2VkJywgJ3Vuc3RhZ2VkJywgJ3BhdGgnKTsKKworeworCW15ICRpbml0aWFsOworCXN1YiBpc19pbml0aWFsX2NvbW1pdCB7CisJCSRpbml0aWFsID0gc3lzdGVtKCdnaXQgcmV2LXBhcnNlIEhFQUQgLS0gPi9kZXYvbnVsbCAyPiYxJykgIT0gMAorCQkJdW5sZXNzIGRlZmluZWQgJGluaXRpYWw7CisJCXJldHVybiAkaW5pdGlhbDsKKwl9Cit9CisKK3N1YiBnZXRfZW1wdHlfdHJlZSB7CisJcmV0dXJuICc0YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0JzsKK30KKworc3ViIGdldF9kaWZmX3JlZmVyZW5jZSB7CisJbXkgJHJlZiA9IHNoaWZ0OworCWlmIChkZWZpbmVkICRyZWYgYW5kICRyZWYgbmUgJ0hFQUQnKSB7CisJCXJldHVybiAkcmVmOworCX0gZWxzaWYgKGlzX2luaXRpYWxfY29tbWl0KCkpIHsKKwkJcmV0dXJuIGdldF9lbXB0eV90cmVlKCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICdIRUFEJzsKKwl9Cit9CisKKyMgUmV0dXJucyBsaXN0IG9mIGhhc2hlcywgY29udGVudHMgb2YgZWFjaCBvZiB3aGljaCBhcmU6CisjIFZBTFVFOglwYXRobmFtZQorIyBCSU5BUlk6CWlzIGEgYmluYXJ5IHBhdGgKKyMgSU5ERVg6CWlzIGluZGV4IGRpZmZlcmVudCBmcm9tIEhFQUQ/CisjIEZJTEU6CQlpcyBmaWxlIGRpZmZlcmVudCBmcm9tIGluZGV4PworIyBJTkRFWF9BRERERUw6CWlzIGl0IGFkZC9kZWxldGUgYmV0d2VlbiBIRUFEIGFuZCBpbmRleD8KKyMgRklMRV9BRERERUw6CWlzIGl0IGFkZC9kZWxldGUgYmV0d2VlbiBpbmRleCBhbmQgZmlsZT8KKyMgVU5NRVJHRUQ6CWlzIHRoZSBwYXRoIHVubWVyZ2VkCisKK3N1YiBsaXN0X21vZGlmaWVkIHsKKwlteSAoJG9ubHkpID0gQF87CisJbXkgKCVkYXRhLCBAcmV0dXJuKTsKKwlteSAoJGFkZCwgJGRlbCwgJGFkZGRlbCwgJGZpbGUpOworCW15IEB0cmFja2VkID0gKCk7CisKKwlpZiAoQEFSR1YpIHsKKwkJQHRyYWNrZWQgPSBtYXAgeworCQkJY2hvbXAgJF87CisJCQl1bnF1b3RlX3BhdGgoJF8pOworCQl9IHJ1bl9jbWRfcGlwZShxdyhnaXQgbHMtZmlsZXMgLS0pLCBAQVJHVik7CisJCXJldHVybiBpZiAoIUB0cmFja2VkKTsKKwl9CisKKwlteSAkcmVmZXJlbmNlID0gZ2V0X2RpZmZfcmVmZXJlbmNlKCRwYXRjaF9tb2RlX3JldmlzaW9uKTsKKwlmb3IgKHJ1bl9jbWRfcGlwZShxdyhnaXQgZGlmZi1pbmRleCAtLWNhY2hlZAorCQkJICAgICAtLW51bXN0YXQgLS1zdW1tYXJ5KSwgJHJlZmVyZW5jZSwKKwkJCSAgICAgJy0tJywgQHRyYWNrZWQpKSB7CisJCWlmICgoJGFkZCwgJGRlbCwgJGZpbGUpID0KKwkJICAgIC9eKFstXGRdKykJKFstXGRdKykJKC4qKS8pIHsKKwkJCW15ICgkY2hhbmdlLCAkYmluKTsKKwkJCSRmaWxlID0gdW5xdW90ZV9wYXRoKCRmaWxlKTsKKwkJCWlmICgkYWRkIGVxICctJyAmJiAkZGVsIGVxICctJykgeworCQkJCSRjaGFuZ2UgPSAnYmluYXJ5JzsKKwkJCQkkYmluID0gMTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCSRjaGFuZ2UgPSAiKyRhZGQvLSRkZWwiOworCQkJfQorCQkJJGRhdGF7JGZpbGV9ID0geworCQkJCUlOREVYID0+ICRjaGFuZ2UsCisJCQkJQklOQVJZID0+ICRiaW4sCisJCQkJRklMRSA9PiAnbm90aGluZycsCisJCQl9CisJCX0KKwkJZWxzaWYgKCgkYWRkZGVsLCAkZmlsZSkgPQorCQkgICAgICAgL14gKGNyZWF0ZXxkZWxldGUpIG1vZGUgWzAtN10rICguKikkLykgeworCQkJJGZpbGUgPSB1bnF1b3RlX3BhdGgoJGZpbGUpOworCQkJJGRhdGF7JGZpbGV9e0lOREVYX0FERERFTH0gPSAkYWRkZGVsOworCQl9CisJfQorCisJZm9yIChydW5fY21kX3BpcGUocXcoZ2l0IGRpZmYtZmlsZXMgLS1udW1zdGF0IC0tc3VtbWFyeSAtLXJhdyAtLSksIEB0cmFja2VkKSkgeworCQlpZiAoKCRhZGQsICRkZWwsICRmaWxlKSA9CisJCSAgICAvXihbLVxkXSspCShbLVxkXSspCSguKikvKSB7CisJCQkkZmlsZSA9IHVucXVvdGVfcGF0aCgkZmlsZSk7CisJCQlteSAoJGNoYW5nZSwgJGJpbik7CisJCQlpZiAoJGFkZCBlcSAnLScgJiYgJGRlbCBlcSAnLScpIHsKKwkJCQkkY2hhbmdlID0gJ2JpbmFyeSc7CisJCQkJJGJpbiA9IDE7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkY2hhbmdlID0gIiskYWRkLy0kZGVsIjsKKwkJCX0KKwkJCSRkYXRheyRmaWxlfXtGSUxFfSA9ICRjaGFuZ2U7CisJCQlpZiAoJGJpbikgeworCQkJCSRkYXRheyRmaWxlfXtCSU5BUll9ID0gMTsKKwkJCX0KKwkJfQorCQllbHNpZiAoKCRhZGRkZWwsICRmaWxlKSA9CisJCSAgICAgICAvXiAoY3JlYXRlfGRlbGV0ZSkgbW9kZSBbMC03XSsgKC4qKSQvKSB7CisJCQkkZmlsZSA9IHVucXVvdGVfcGF0aCgkZmlsZSk7CisJCQkkZGF0YXskZmlsZX17RklMRV9BRERERUx9ID0gJGFkZGRlbDsKKwkJfQorCQllbHNpZiAoL146WzAtN10rIFswLTddKyBbMC05YS1mXSsgWzAtOWEtZl0rICguKQkoLiopJC8pIHsKKwkJCSRmaWxlID0gdW5xdW90ZV9wYXRoKCQyKTsKKwkJCWlmICghZXhpc3RzICRkYXRheyRmaWxlfSkgeworCQkJCSRkYXRheyRmaWxlfSA9ICt7CisJCQkJCUlOREVYID0+ICd1bmNoYW5nZWQnLAorCQkJCQlCSU5BUlkgPT4gMCwKKwkJCQl9OworCQkJfQorCQkJaWYgKCQxIGVxICdVJykgeworCQkJCSRkYXRheyRmaWxlfXtVTk1FUkdFRH0gPSAxOworCQkJfQorCQl9CisJfQorCisJZm9yIChzb3J0IGtleXMgJWRhdGEpIHsKKwkJbXkgJGl0ID0gJGRhdGF7JF99OworCisJCWlmICgkb25seSkgeworCQkJaWYgKCRvbmx5IGVxICdpbmRleC1vbmx5JykgeworCQkJCW5leHQgaWYgKCRpdC0+e0lOREVYfSBlcSAndW5jaGFuZ2VkJyk7CisJCQl9CisJCQlpZiAoJG9ubHkgZXEgJ2ZpbGUtb25seScpIHsKKwkJCQluZXh0IGlmICgkaXQtPntGSUxFfSBlcSAnbm90aGluZycpOworCQkJfQorCQl9CisJCXB1c2ggQHJldHVybiwgK3sKKwkJCVZBTFVFID0+ICRfLAorCQkJJSRpdCwKKwkJfTsKKwl9CisJcmV0dXJuIEByZXR1cm47Cit9CisKK3N1YiBmaW5kX3VuaXF1ZSB7CisJbXkgKCRzdHJpbmcsIEBzdHVmZikgPSBAXzsKKwlteSAkZm91bmQgPSB1bmRlZjsKKwlmb3IgKG15ICRpID0gMDsgJGkgPCBAc3R1ZmY7ICRpKyspIHsKKwkJbXkgJGl0ID0gJHN0dWZmWyRpXTsKKwkJbXkgJGhpdCA9IHVuZGVmOworCQlpZiAocmVmICRpdCkgeworCQkJaWYgKChyZWYgJGl0KSBlcSAnQVJSQVknKSB7CisJCQkJJGl0ID0gJGl0LT5bMF07CisJCQl9CisJCQllbHNlIHsKKwkJCQkkaXQgPSAkaXQtPntWQUxVRX07CisJCQl9CisJCX0KKwkJZXZhbCB7CisJCQlpZiAoJGl0ID1+IC9eJHN0cmluZy8pIHsKKwkJCQkkaGl0ID0gMTsKKwkJCX07CisJCX07CisJCWlmIChkZWZpbmVkICRoaXQgJiYgZGVmaW5lZCAkZm91bmQpIHsKKwkJCXJldHVybiB1bmRlZjsKKwkJfQorCQlpZiAoJGhpdCkgeworCQkJJGZvdW5kID0gJGkgKyAxOworCQl9CisJfQorCXJldHVybiAkZm91bmQ7Cit9CisKKyMgaW5zZXJ0cyBzdHJpbmcgaW50byB0cmllIGFuZCB1cGRhdGVzIGNvdW50IGZvciBlYWNoIGNoYXJhY3Rlcgorc3ViIHVwZGF0ZV90cmllIHsKKwlteSAoJHRyaWUsICRzdHJpbmcpID0gQF87CisJZm9yZWFjaCAoc3BsaXQgLy8sICRzdHJpbmcpIHsKKwkJJHRyaWUgPSAkdHJpZS0+eyRffSB8fD0ge0NPVU5UID0+IDB9OworCQkkdHJpZS0+e0NPVU5UfSsrOworCX0KK30KKworIyByZXR1cm5zIGFuIGFycmF5IG9mIHR1cGxlcyAocHJlZml4LCByZW1haW5kZXIpCitzdWIgZmluZF91bmlxdWVfcHJlZml4ZXMgeworCW15IEBzdHVmZiA9IEBfOworCW15IEByZXR1cm4gPSAoKTsKKworCSMgYW55IHNpbmdsZSBwcmVmaXggZXhjZWVkaW5nIHRoZSBzb2Z0IGxpbWl0IGlzIG9taXR0ZWQKKwkjIGlmIGFueSBwcmVmaXggZXhjZWVkcyB0aGUgaGFyZCBsaW1pdCBhbGwgYXJlIG9taXR0ZWQKKwkjIDAgaW5kaWNhdGVzIG5vIGxpbWl0CisJbXkgJHNvZnRfbGltaXQgPSAwOworCW15ICRoYXJkX2xpbWl0ID0gMzsKKworCSMgYnVpbGQgYSB0cmllIG1vZGVsbGluZyBhbGwgcG9zc2libGUgb3B0aW9ucworCW15ICV0cmllOworCWZvcmVhY2ggbXkgJHByaW50IChAc3R1ZmYpIHsKKwkJaWYgKChyZWYgJHByaW50KSBlcSAnQVJSQVknKSB7CisJCQkkcHJpbnQgPSAkcHJpbnQtPlswXTsKKwkJfQorCQllbHNpZiAoKHJlZiAkcHJpbnQpIGVxICdIQVNIJykgeworCQkJJHByaW50ID0gJHByaW50LT57VkFMVUV9OworCQl9CisJCXVwZGF0ZV90cmllKFwldHJpZSwgJHByaW50KTsKKwkJcHVzaCBAcmV0dXJuLCAkcHJpbnQ7CisJfQorCisJIyB1c2UgdGhlIHRyaWUgdG8gZmluZCB0aGUgdW5pcXVlIHByZWZpeGVzCisJZm9yIChteSAkaSA9IDA7ICRpIDwgQHJldHVybjsgJGkrKykgeworCQlteSAkcmV0ID0gJHJldHVyblskaV07CisJCW15IEBsZXR0ZXJzID0gc3BsaXQgLy8sICRyZXQ7CisJCW15ICVzZWFyY2ggPSAldHJpZTsKKwkJbXkgKCRwcmVmaXgsICRyZW1haW5kZXIpOworCQlteSAkajsKKwkJZm9yICgkaiA9IDA7ICRqIDwgQGxldHRlcnM7ICRqKyspIHsKKwkJCW15ICRsZXR0ZXIgPSAkbGV0dGVyc1skal07CisJCQlpZiAoJHNlYXJjaHskbGV0dGVyfXtDT1VOVH0gPT0gMSkgeworCQkJCSRwcmVmaXggPSBzdWJzdHIgJHJldCwgMCwgJGogKyAxOworCQkJCSRyZW1haW5kZXIgPSBzdWJzdHIgJHJldCwgJGogKyAxOworCQkJCWxhc3Q7CisJCQl9CisJCQllbHNlIHsKKwkJCQlteSAkcHJlZml4ID0gc3Vic3RyICRyZXQsIDAsICRqOworCQkJCXJldHVybiAoKQorCQkJCSAgICBpZiAoJGhhcmRfbGltaXQgJiYgJGogKyAxID4gJGhhcmRfbGltaXQpOworCQkJfQorCQkJJXNlYXJjaCA9ICV7JHNlYXJjaHskbGV0dGVyfX07CisJCX0KKwkJaWYgKG9yZCgkbGV0dGVyc1swXSkgPiAxMjcgfHwKKwkJICAgICgkc29mdF9saW1pdCAmJiAkaiArIDEgPiAkc29mdF9saW1pdCkpIHsKKwkJCSRwcmVmaXggPSB1bmRlZjsKKwkJCSRyZW1haW5kZXIgPSAkcmV0OworCQl9CisJCSRyZXR1cm5bJGldID0gWyRwcmVmaXgsICRyZW1haW5kZXJdOworCX0KKwlyZXR1cm4gQHJldHVybjsKK30KKworIyBmaWx0ZXJzIG91dCBwcmVmaXhlcyB3aGljaCBoYXZlIHNwZWNpYWwgbWVhbmluZyB0byBsaXN0X2FuZF9jaG9vc2UoKQorc3ViIGlzX3ZhbGlkX3ByZWZpeCB7CisJbXkgJHByZWZpeCA9IHNoaWZ0OworCXJldHVybiAoZGVmaW5lZCAkcHJlZml4KSAmJgorCSAgICAhKCRwcmVmaXggPX4gL1tccyxdLykgJiYgIyBzZXBhcmF0b3JzCisJICAgICEoJHByZWZpeCA9fiAvXi0vKSAmJiAgICAjIGRlc2VsZWN0aW9uCisJICAgICEoJHByZWZpeCA9fiAvXlxkKy8pICYmICAjIHNlbGVjdGlvbgorCSAgICAoJHByZWZpeCBuZSAnKicpICYmICAgICAgIyAiYWxsIiB3aWxkY2FyZAorCSAgICAoJHByZWZpeCBuZSAnPycpOyAgICAgICAgIyBwcm9tcHQgaGVscAorfQorCisjIGdpdmVuIGEgcHJlZml4L3JlbWFpbmRlciB0dXBsZSByZXR1cm4gYSBzdHJpbmcgd2l0aCB0aGUgcHJlZml4IGhpZ2hsaWdodGVkCisjIGZvciBub3cgdXNlIHNxdWFyZSBicmFja2V0czsgbGF0ZXIgbWlnaHQgdXNlIEFOU0kgY29sb3JzICh1bmRlcmxpbmUsIGJvbGQpCitzdWIgaGlnaGxpZ2h0X3ByZWZpeCB7CisJbXkgJHByZWZpeCA9IHNoaWZ0OworCW15ICRyZW1haW5kZXIgPSBzaGlmdDsKKworCWlmICghZGVmaW5lZCAkcHJlZml4KSB7CisJCXJldHVybiAkcmVtYWluZGVyOworCX0KKworCWlmICghaXNfdmFsaWRfcHJlZml4KCRwcmVmaXgpKSB7CisJCXJldHVybiAiJHByZWZpeCRyZW1haW5kZXIiOworCX0KKworCWlmICghJG1lbnVfdXNlX2NvbG9yKSB7CisJCXJldHVybiAiWyRwcmVmaXhdJHJlbWFpbmRlciI7CisJfQorCisJcmV0dXJuICIkcHJvbXB0X2NvbG9yJHByZWZpeCRub3JtYWxfY29sb3IkcmVtYWluZGVyIjsKK30KKworc3ViIGVycm9yX21zZyB7CisJcHJpbnQgU1RERVJSIGNvbG9yZWQgJGVycm9yX2NvbG9yLCBAXzsKK30KKworc3ViIGxpc3RfYW5kX2Nob29zZSB7CisJbXkgKCRvcHRzLCBAc3R1ZmYpID0gQF87CisJbXkgKEBjaG9zZW4sIEByZXR1cm4pOworCWlmICghQHN0dWZmKSB7CisJICAgIHJldHVybiBAcmV0dXJuOworCX0KKwlteSAkaTsKKwlteSBAcHJlZml4ZXMgPSBmaW5kX3VuaXF1ZV9wcmVmaXhlcyhAc3R1ZmYpIHVubGVzcyAkb3B0cy0+e0xJU1RfT05MWX07CisKKyAgICAgIFRPUExPT1A6CisJd2hpbGUgKDEpIHsKKwkJbXkgJGxhc3RfbGYgPSAwOworCisJCWlmICgkb3B0cy0+e0hFQURFUn0pIHsKKwkJCWlmICghJG9wdHMtPntMSVNUX0ZMQVR9KSB7CisJCQkJcHJpbnQgIiAgICAgIjsKKwkJCX0KKwkJCXByaW50IGNvbG9yZWQgJGhlYWRlcl9jb2xvciwgIiRvcHRzLT57SEVBREVSfVxuIjsKKwkJfQorCQlmb3IgKCRpID0gMDsgJGkgPCBAc3R1ZmY7ICRpKyspIHsKKwkJCW15ICRjaG9zZW4gPSAkY2hvc2VuWyRpXSA/ICcqJyA6ICcgJzsKKwkJCW15ICRwcmludCA9ICRzdHVmZlskaV07CisJCQlteSAkcmVmID0gcmVmICRwcmludDsKKwkJCW15ICRoaWdobGlnaHRlZCA9IGhpZ2hsaWdodF9wcmVmaXgoQHskcHJlZml4ZXNbJGldfSkKKwkJCSAgICBpZiBAcHJlZml4ZXM7CisJCQlpZiAoJHJlZiBlcSAnQVJSQVknKSB7CisJCQkJJHByaW50ID0gJGhpZ2hsaWdodGVkIHx8ICRwcmludC0+WzBdOworCQkJfQorCQkJZWxzaWYgKCRyZWYgZXEgJ0hBU0gnKSB7CisJCQkJbXkgJHZhbHVlID0gJGhpZ2hsaWdodGVkIHx8ICRwcmludC0+e1ZBTFVFfTsKKwkJCQkkcHJpbnQgPSBzcHJpbnRmKCRzdGF0dXNfZm10LAorCQkJCSAgICAkcHJpbnQtPntJTkRFWH0sCisJCQkJICAgICRwcmludC0+e0ZJTEV9LAorCQkJCSAgICAkdmFsdWUpOworCQkJfQorCQkJZWxzZSB7CisJCQkJJHByaW50ID0gJGhpZ2hsaWdodGVkIHx8ICRwcmludDsKKwkJCX0KKwkJCXByaW50ZigiJXMlMmQ6ICVzIiwgJGNob3NlbiwgJGkrMSwgJHByaW50KTsKKwkJCWlmICgoJG9wdHMtPntMSVNUX0ZMQVR9KSAmJgorCQkJICAgICgoJGkgKyAxKSAlICgkb3B0cy0+e0xJU1RfRkxBVH0pKSkgeworCQkJCXByaW50ICJcdCI7CisJCQkJJGxhc3RfbGYgPSAwOworCQkJfQorCQkJZWxzZSB7CisJCQkJcHJpbnQgIlxuIjsKKwkJCQkkbGFzdF9sZiA9IDE7CisJCQl9CisJCX0KKwkJaWYgKCEkbGFzdF9sZikgeworCQkJcHJpbnQgIlxuIjsKKwkJfQorCisJCXJldHVybiBpZiAoJG9wdHMtPntMSVNUX09OTFl9KTsKKworCQlwcmludCBjb2xvcmVkICRwcm9tcHRfY29sb3IsICRvcHRzLT57UFJPTVBUfTsKKwkJaWYgKCRvcHRzLT57U0lOR0xFVE9OfSkgeworCQkJcHJpbnQgIj4gIjsKKwkJfQorCQllbHNlIHsKKwkJCXByaW50ICI+PiAiOworCQl9CisJCW15ICRsaW5lID0gPFNURElOPjsKKwkJaWYgKCEkbGluZSkgeworCQkJcHJpbnQgIlxuIjsKKwkJCSRvcHRzLT57T05fRU9GfS0+KCkgaWYgJG9wdHMtPntPTl9FT0Z9OworCQkJbGFzdDsKKwkJfQorCQljaG9tcCAkbGluZTsKKwkJbGFzdCBpZiAkbGluZSBlcSAnJzsKKwkJaWYgKCRsaW5lIGVxICc/JykgeworCQkJJG9wdHMtPntTSU5HTEVUT059ID8KKwkJCSAgICBzaW5nbGV0b25fcHJvbXB0X2hlbHBfY21kKCkgOgorCQkJICAgIHByb21wdF9oZWxwX2NtZCgpOworCQkJbmV4dCBUT1BMT09QOworCQl9CisJCWZvciBteSAkY2hvaWNlIChzcGxpdCgvW1xzLF0rLywgJGxpbmUpKSB7CisJCQlteSAkY2hvb3NlID0gMTsKKwkJCW15ICgkYm90dG9tLCAkdG9wKTsKKworCQkJIyBJbnB1dCB0aGF0IGJlZ2lucyB3aXRoICctJzsgdW5jaG9vc2UKKwkJCWlmICgkY2hvaWNlID1+IHMvXi0vLykgeworCQkJCSRjaG9vc2UgPSAwOworCQkJfQorCQkJIyBBIHJhbmdlIGNhbiBiZSBzcGVjaWZpZWQgbGlrZSA1LTcgb3IgNS0uCisJCQlpZiAoJGNob2ljZSA9fiAvXihcZCspLShcZCopJC8pIHsKKwkJCQkoJGJvdHRvbSwgJHRvcCkgPSAoJDEsIGxlbmd0aCgkMikgPyAkMiA6IDEgKyBAc3R1ZmYpOworCQkJfQorCQkJZWxzaWYgKCRjaG9pY2UgPX4gL15cZCskLykgeworCQkJCSRib3R0b20gPSAkdG9wID0gJGNob2ljZTsKKwkJCX0KKwkJCWVsc2lmICgkY2hvaWNlIGVxICcqJykgeworCQkJCSRib3R0b20gPSAxOworCQkJCSR0b3AgPSAxICsgQHN0dWZmOworCQkJfQorCQkJZWxzZSB7CisJCQkJJGJvdHRvbSA9ICR0b3AgPSBmaW5kX3VuaXF1ZSgkY2hvaWNlLCBAc3R1ZmYpOworCQkJCWlmICghZGVmaW5lZCAkYm90dG9tKSB7CisJCQkJCWVycm9yX21zZyAiSHVoICgkY2hvaWNlKT9cbiI7CisJCQkJCW5leHQgVE9QTE9PUDsKKwkJCQl9CisJCQl9CisJCQlpZiAoJG9wdHMtPntTSU5HTEVUT059ICYmICRib3R0b20gIT0gJHRvcCkgeworCQkJCWVycm9yX21zZyAiSHVoICgkY2hvaWNlKT9cbiI7CisJCQkJbmV4dCBUT1BMT09QOworCQkJfQorCQkJZm9yICgkaSA9ICRib3R0b20tMTsgJGkgPD0gJHRvcC0xOyAkaSsrKSB7CisJCQkJbmV4dCBpZiAoQHN0dWZmIDw9ICRpIHx8ICRpIDwgMCk7CisJCQkJJGNob3NlblskaV0gPSAkY2hvb3NlOworCQkJfQorCQl9CisJCWxhc3QgaWYgKCRvcHRzLT57SU1NRURJQVRFfSB8fCAkbGluZSBlcSAnKicpOworCX0KKwlmb3IgKCRpID0gMDsgJGkgPCBAc3R1ZmY7ICRpKyspIHsKKwkJaWYgKCRjaG9zZW5bJGldKSB7CisJCQlwdXNoIEByZXR1cm4sICRzdHVmZlskaV07CisJCX0KKwl9CisJcmV0dXJuIEByZXR1cm47Cit9CisKK3N1YiBzaW5nbGV0b25fcHJvbXB0X2hlbHBfY21kIHsKKwlwcmludCBjb2xvcmVkICRoZWxwX2NvbG9yLCA8PFxFT0YgOworUHJvbXB0IGhlbHA6CisxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbQorZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXgKKyAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nCitFT0YKK30KKworc3ViIHByb21wdF9oZWxwX2NtZCB7CisJcHJpbnQgY29sb3JlZCAkaGVscF9jb2xvciwgPDxcRU9GIDsKK1Byb21wdCBoZWxwOgorMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtCiszLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXMKKzItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzCitmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeAorLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtcworKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXMKKyAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmcKK0VPRgorfQorCitzdWIgc3RhdHVzX2NtZCB7CisJbGlzdF9hbmRfY2hvb3NlKHsgTElTVF9PTkxZID0+IDEsIEhFQURFUiA9PiAkc3RhdHVzX2hlYWQgfSwKKwkJCWxpc3RfbW9kaWZpZWQoKSk7CisJcHJpbnQgIlxuIjsKK30KKworc3ViIHNheV9uX3BhdGhzIHsKKwlteSAkZGlkID0gc2hpZnQgQF87CisJbXkgJGNudCA9IHNjYWxhciBAXzsKKwlwcmludCAiJGRpZCAiOworCWlmICgxIDwgJGNudCkgeworCQlwcmludCAiJGNudCBwYXRoc1xuIjsKKwl9CisJZWxzZSB7CisJCXByaW50ICJvbmUgcGF0aFxuIjsKKwl9Cit9CisKK3N1YiB1cGRhdGVfY21kIHsKKwlteSBAbW9kcyA9IGxpc3RfbW9kaWZpZWQoJ2ZpbGUtb25seScpOworCXJldHVybiBpZiAoIUBtb2RzKTsKKworCW15IEB1cGRhdGUgPSBsaXN0X2FuZF9jaG9vc2UoeyBQUk9NUFQgPT4gJ1VwZGF0ZScsCisJCQkJICAgICAgIEhFQURFUiA9PiAkc3RhdHVzX2hlYWQsIH0sCisJCQkJICAgICBAbW9kcyk7CisJaWYgKEB1cGRhdGUpIHsKKwkJc3lzdGVtKHF3KGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgLS0pLAorCQkgICAgICAgbWFwIHsgJF8tPntWQUxVRX0gfSBAdXBkYXRlKTsKKwkJc2F5X25fcGF0aHMoJ3VwZGF0ZWQnLCBAdXBkYXRlKTsKKwl9CisJcHJpbnQgIlxuIjsKK30KKworc3ViIHJldmVydF9jbWQgeworCW15IEB1cGRhdGUgPSBsaXN0X2FuZF9jaG9vc2UoeyBQUk9NUFQgPT4gJ1JldmVydCcsCisJCQkJICAgICAgIEhFQURFUiA9PiAkc3RhdHVzX2hlYWQsIH0sCisJCQkJICAgICBsaXN0X21vZGlmaWVkKCkpOworCWlmIChAdXBkYXRlKSB7CisJCWlmIChpc19pbml0aWFsX2NvbW1pdCgpKSB7CisJCQlzeXN0ZW0ocXcoZ2l0IHJtIC0tY2FjaGVkKSwKKwkJCQltYXAgeyAkXy0+e1ZBTFVFfSB9IEB1cGRhdGUpOworCQl9CisJCWVsc2UgeworCQkJbXkgQGxpbmVzID0gcnVuX2NtZF9waXBlKHF3KGdpdCBscy10cmVlIEhFQUQgLS0pLAorCQkJCQkJIG1hcCB7ICRfLT57VkFMVUV9IH0gQHVwZGF0ZSk7CisJCQlteSAkZmg7CisJCQlvcGVuICRmaCwgJ3wgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8nCisJCQkgICAgb3IgZGllOworCQkJZm9yIChAbGluZXMpIHsKKwkJCQlwcmludCAkZmggJF87CisJCQl9CisJCQljbG9zZSgkZmgpOworCQkJZm9yIChAdXBkYXRlKSB7CisJCQkJaWYgKCRfLT57SU5ERVhfQUREREVMfSAmJgorCQkJCSAgICAkXy0+e0lOREVYX0FERERFTH0gZXEgJ2NyZWF0ZScpIHsKKwkJCQkJc3lzdGVtKHF3KGdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgLS0pLAorCQkJCQkgICAgICAgJF8tPntWQUxVRX0pOworCQkJCQlwcmludCAibm90ZTogJF8tPntWQUxVRX0gaXMgdW50cmFja2VkIG5vdy5cbiI7CisJCQkJfQorCQkJfQorCQl9CisJCXJlZnJlc2goKTsKKwkJc2F5X25fcGF0aHMoJ3JldmVydGVkJywgQHVwZGF0ZSk7CisJfQorCXByaW50ICJcbiI7Cit9CisKK3N1YiBhZGRfdW50cmFja2VkX2NtZCB7CisJbXkgQGFkZCA9IGxpc3RfYW5kX2Nob29zZSh7IFBST01QVCA9PiAnQWRkIHVudHJhY2tlZCcgfSwKKwkJCQkgIGxpc3RfdW50cmFja2VkKCkpOworCWlmIChAYWRkKSB7CisJCXN5c3RlbShxdyhnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tKSwgQGFkZCk7CisJCXNheV9uX3BhdGhzKCdhZGRlZCcsIEBhZGQpOworCX0gZWxzZSB7CisJCXByaW50ICJObyB1bnRyYWNrZWQgZmlsZXMuXG4iOworCX0KKwlwcmludCAiXG4iOworfQorCitzdWIgcnVuX2dpdF9hcHBseSB7CisJbXkgJGNtZCA9IHNoaWZ0OworCW15ICRmaDsKKwlvcGVuICRmaCwgJ3wgZ2l0ICcgLiAkY21kIC4gIiAtLXJlY291bnQgLS1hbGxvdy1vdmVybGFwIjsKKwlwcmludCAkZmggQF87CisJcmV0dXJuIGNsb3NlICRmaDsKK30KKworc3ViIHBhcnNlX2RpZmYgeworCW15ICgkcGF0aCkgPSBAXzsKKwlteSBAZGlmZl9jbWQgPSBzcGxpdCgiICIsICRwYXRjaF9tb2RlX2ZsYXZvdXJ7RElGRn0pOworCWlmIChkZWZpbmVkICRkaWZmX2FsZ29yaXRobSkgeworCQlzcGxpY2UgQGRpZmZfY21kLCAxLCAwLCAiLS1kaWZmLWFsZ29yaXRobT0ke2RpZmZfYWxnb3JpdGhtfSI7CisJfQorCWlmIChkZWZpbmVkICRwYXRjaF9tb2RlX3JldmlzaW9uKSB7CisJCXB1c2ggQGRpZmZfY21kLCBnZXRfZGlmZl9yZWZlcmVuY2UoJHBhdGNoX21vZGVfcmV2aXNpb24pOworCX0KKwlteSBAZGlmZiA9IHJ1bl9jbWRfcGlwZSgiZ2l0IiwgQGRpZmZfY21kLCAiLS0iLCAkcGF0aCk7CisJbXkgQGNvbG9yZWQgPSAoKTsKKwlpZiAoJGRpZmZfdXNlX2NvbG9yKSB7CisJCUBjb2xvcmVkID0gcnVuX2NtZF9waXBlKCJnaXQiLCBAZGlmZl9jbWQsIHF3KC0tY29sb3IgLS0pLCAkcGF0aCk7CisJfQorCW15IChAaHVuaykgPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sIFRZUEUgPT4gJ2hlYWRlcicgfTsKKworCWZvciAobXkgJGkgPSAwOyAkaSA8IEBkaWZmOyAkaSsrKSB7CisJCWlmICgkZGlmZlskaV0gPX4gL15AQCAvKSB7CisJCQlwdXNoIEBodW5rLCB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sCisJCQkJVFlQRSA9PiAnaHVuaycgfTsKKwkJfQorCQlwdXNoIEB7JGh1bmtbLTFde1RFWFR9fSwgJGRpZmZbJGldOworCQlwdXNoIEB7JGh1bmtbLTFde0RJU1BMQVl9fSwKKwkJCSgkZGlmZl91c2VfY29sb3IgPyAkY29sb3JlZFskaV0gOiAkZGlmZlskaV0pOworCX0KKwlyZXR1cm4gQGh1bms7Cit9CisKK3N1YiBwYXJzZV9kaWZmX2hlYWRlciB7CisJbXkgJHNyYyA9IHNoaWZ0OworCisJbXkgJGhlYWQgPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sIFRZUEUgPT4gJ2hlYWRlcicgfTsKKwlteSAkbW9kZSA9IHsgVEVYVCA9PiBbXSwgRElTUExBWSA9PiBbXSwgVFlQRSA9PiAnbW9kZScgfTsKKwlteSAkZGVsZXRpb24gPSB7IFRFWFQgPT4gW10sIERJU1BMQVkgPT4gW10sIFRZUEUgPT4gJ2RlbGV0aW9uJyB9OworCisJZm9yIChteSAkaSA9IDA7ICRpIDwgQHskc3JjLT57VEVYVH19OyAkaSsrKSB7CisJCW15ICRkZXN0ID0KKwkJICAgJHNyYy0+e1RFWFR9LT5bJGldID1+IC9eKG9sZHxuZXcpIG1vZGUgKFxkKykkLyA/ICRtb2RlIDoKKwkJICAgJHNyYy0+e1RFWFR9LT5bJGldID1+IC9eZGVsZXRlZCBmaWxlLyA/ICRkZWxldGlvbiA6CisJCSAgICRoZWFkOworCQlwdXNoIEB7JGRlc3QtPntURVhUfX0sICRzcmMtPntURVhUfS0+WyRpXTsKKwkJcHVzaCBAeyRkZXN0LT57RElTUExBWX19LCAkc3JjLT57RElTUExBWX0tPlskaV07CisJfQorCXJldHVybiAoJGhlYWQsICRtb2RlLCAkZGVsZXRpb24pOworfQorCitzdWIgaHVua19zcGxpdHRhYmxlIHsKKwlteSAoJHRleHQpID0gQF87CisKKwlteSBAcyA9IHNwbGl0X2h1bmsoJHRleHQpOworCXJldHVybiAoMSA8IEBzKTsKK30KKworc3ViIHBhcnNlX2h1bmtfaGVhZGVyIHsKKwlteSAoJGxpbmUpID0gQF87CisJbXkgKCRvX29mcywgJG9fY250LCAkbl9vZnMsICRuX2NudCkgPQorCSAgICAkbGluZSA9fiAvXkBAIC0oXGQrKSg/OiwoXGQrKSk/IFwrKFxkKykoPzosKFxkKykpPyBAQC87CisJJG9fY250ID0gMSB1bmxlc3MgZGVmaW5lZCAkb19jbnQ7CisJJG5fY250ID0gMSB1bmxlc3MgZGVmaW5lZCAkbl9jbnQ7CisJcmV0dXJuICgkb19vZnMsICRvX2NudCwgJG5fb2ZzLCAkbl9jbnQpOworfQorCitzdWIgc3BsaXRfaHVuayB7CisJbXkgKCR0ZXh0LCAkZGlzcGxheSkgPSBAXzsKKwlteSBAc3BsaXQgPSAoKTsKKwlpZiAoIWRlZmluZWQgJGRpc3BsYXkpIHsKKwkJJGRpc3BsYXkgPSAkdGV4dDsKKwl9CisJIyBJZiB0aGVyZSBhcmUgY29udGV4dCBsaW5lcyBpbiB0aGUgbWlkZGxlIG9mIGEgaHVuaywKKwkjIGl0IGNhbiBiZSBzcGxpdCwgYnV0IHdlIHdvdWxkIG5lZWQgdG8gdGFrZSBjYXJlIG9mCisJIyBvdmVybGFwcyBsYXRlci4KKworCW15ICgkb19vZnMsIHVuZGVmLCAkbl9vZnMpID0gcGFyc2VfaHVua19oZWFkZXIoJHRleHQtPlswXSk7CisJbXkgJGh1bmtfc3RhcnQgPSAxOworCisgICAgICBPVVRFUjoKKwl3aGlsZSAoMSkgeworCQlteSAkbmV4dF9odW5rX3N0YXJ0ID0gdW5kZWY7CisJCW15ICRpID0gJGh1bmtfc3RhcnQgLSAxOworCQlteSAkdGhpcyA9ICt7CisJCQlURVhUID0+IFtdLAorCQkJRElTUExBWSA9PiBbXSwKKwkJCVRZUEUgPT4gJ2h1bmsnLAorCQkJT0xEID0+ICRvX29mcywKKwkJCU5FVyA9PiAkbl9vZnMsCisJCQlPQ05UID0+IDAsCisJCQlOQ05UID0+IDAsCisJCQlBRERERUwgPT4gMCwKKwkJCVBPU1RDVFggPT4gMCwKKwkJCVVTRSA9PiB1bmRlZiwKKwkJfTsKKworCQl3aGlsZSAoKyskaSA8IEAkdGV4dCkgeworCQkJbXkgJGxpbmUgPSAkdGV4dC0+WyRpXTsKKwkJCW15ICRkaXNwbGF5ID0gJGRpc3BsYXktPlskaV07CisJCQlpZiAoJGxpbmUgPX4gL14gLykgeworCQkJCWlmICgkdGhpcy0+e0FERERFTH0gJiYKKwkJCQkgICAgIWRlZmluZWQgJG5leHRfaHVua19zdGFydCkgeworCQkJCQkjIFdlIGhhdmUgc2VlbiBsZWFkaW5nIGNvbnRleHQgYW5kCisJCQkJCSMgYWRkcy9kZWxzIGFuZCB0aGVuIGhlcmUgaXMgYW5vdGhlcgorCQkJCQkjIGNvbnRleHQsIHdoaWNoIGlzIHRyYWlsaW5nIGZvciB0aGlzCisJCQkJCSMgc3BsaXQgaHVuayBhbmQgbGVhZGluZyBmb3IgdGhlIG5leHQKKwkJCQkJIyBvbmUuCisJCQkJCSRuZXh0X2h1bmtfc3RhcnQgPSAkaTsKKwkJCQl9CisJCQkJcHVzaCBAeyR0aGlzLT57VEVYVH19LCAkbGluZTsKKwkJCQlwdXNoIEB7JHRoaXMtPntESVNQTEFZfX0sICRkaXNwbGF5OworCQkJCSR0aGlzLT57T0NOVH0rKzsKKwkJCQkkdGhpcy0+e05DTlR9Kys7CisJCQkJaWYgKGRlZmluZWQgJG5leHRfaHVua19zdGFydCkgeworCQkJCQkkdGhpcy0+e1BPU1RDVFh9Kys7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisKKwkJCSMgYWRkL2RlbAorCQkJaWYgKGRlZmluZWQgJG5leHRfaHVua19zdGFydCkgeworCQkJCSMgV2UgYXJlIGRvbmUgd2l0aCB0aGUgY3VycmVudCBodW5rIGFuZAorCQkJCSMgdGhpcyBpcyB0aGUgZmlyc3QgcmVhbCBjaGFuZ2UgZm9yIHRoZQorCQkJCSMgbmV4dCBzcGxpdCBvbmUuCisJCQkJJGh1bmtfc3RhcnQgPSAkbmV4dF9odW5rX3N0YXJ0OworCQkJCSRvX29mcyA9ICR0aGlzLT57T0xEfSArICR0aGlzLT57T0NOVH07CisJCQkJJG5fb2ZzID0gJHRoaXMtPntORVd9ICsgJHRoaXMtPntOQ05UfTsKKwkJCQkkb19vZnMgLT0gJHRoaXMtPntQT1NUQ1RYfTsKKwkJCQkkbl9vZnMgLT0gJHRoaXMtPntQT1NUQ1RYfTsKKwkJCQlwdXNoIEBzcGxpdCwgJHRoaXM7CisJCQkJcmVkbyBPVVRFUjsKKwkJCX0KKwkJCXB1c2ggQHskdGhpcy0+e1RFWFR9fSwgJGxpbmU7CisJCQlwdXNoIEB7JHRoaXMtPntESVNQTEFZfX0sICRkaXNwbGF5OworCQkJJHRoaXMtPntBRERERUx9Kys7CisJCQlpZiAoJGxpbmUgPX4gL14tLykgeworCQkJCSR0aGlzLT57T0NOVH0rKzsKKwkJCX0KKwkJCWVsc2UgeworCQkJCSR0aGlzLT57TkNOVH0rKzsKKwkJCX0KKwkJfQorCisJCXB1c2ggQHNwbGl0LCAkdGhpczsKKwkJbGFzdDsKKwl9CisKKwlmb3IgbXkgJGh1bmsgKEBzcGxpdCkgeworCQkkb19vZnMgPSAkaHVuay0+e09MRH07CisJCSRuX29mcyA9ICRodW5rLT57TkVXfTsKKwkJbXkgJG9fY250ID0gJGh1bmstPntPQ05UfTsKKwkJbXkgJG5fY250ID0gJGh1bmstPntOQ05UfTsKKworCQlteSAkaGVhZCA9ICgiQEAgLSRvX29mcyIgLgorCQkJICAgICgoJG9fY250ICE9IDEpID8gIiwkb19jbnQiIDogJycpIC4KKwkJCSAgICAiICskbl9vZnMiIC4KKwkJCSAgICAoKCRuX2NudCAhPSAxKSA/ICIsJG5fY250IiA6ICcnKSAuCisJCQkgICAgIiBAQFxuIik7CisJCW15ICRkaXNwbGF5X2hlYWQgPSAkaGVhZDsKKwkJdW5zaGlmdCBAeyRodW5rLT57VEVYVH19LCAkaGVhZDsKKwkJaWYgKCRkaWZmX3VzZV9jb2xvcikgeworCQkJJGRpc3BsYXlfaGVhZCA9IGNvbG9yZWQoJGZyYWdpbmZvX2NvbG9yLCAkaGVhZCk7CisJCX0KKwkJdW5zaGlmdCBAeyRodW5rLT57RElTUExBWX19LCAkZGlzcGxheV9oZWFkOworCX0KKwlyZXR1cm4gQHNwbGl0OworfQorCitzdWIgZmluZF9sYXN0X29fY3R4IHsKKwlteSAoJGl0KSA9IEBfOworCW15ICR0ZXh0ID0gJGl0LT57VEVYVH07CisJbXkgKCRvX29mcywgJG9fY250KSA9IHBhcnNlX2h1bmtfaGVhZGVyKCR0ZXh0LT5bMF0pOworCW15ICRpID0gQHskdGV4dH07CisJbXkgJGxhc3Rfb19jdHggPSAkb19vZnMgKyAkb19jbnQ7CisJd2hpbGUgKDAgPCAtLSRpKSB7CisJCW15ICRsaW5lID0gJHRleHQtPlskaV07CisJCWlmICgkbGluZSA9fiAvXiAvKSB7CisJCQkkbGFzdF9vX2N0eC0tOworCQkJbmV4dDsKKwkJfQorCQlsYXN0OworCX0KKwlyZXR1cm4gJGxhc3Rfb19jdHg7Cit9CisKK3N1YiBtZXJnZV9odW5rIHsKKwlteSAoJHByZXYsICR0aGlzKSA9IEBfOworCW15ICgkbzBfb2ZzLCAkbzBfY250LCAkbjBfb2ZzLCAkbjBfY250KSA9CisJICAgIHBhcnNlX2h1bmtfaGVhZGVyKCRwcmV2LT57VEVYVH1bMF0pOworCW15ICgkbzFfb2ZzLCAkbzFfY250LCAkbjFfb2ZzLCAkbjFfY250KSA9CisJICAgIHBhcnNlX2h1bmtfaGVhZGVyKCR0aGlzLT57VEVYVH1bMF0pOworCisJbXkgKEBsaW5lLCAkaSwgJG9mcywgJG9fY250LCAkbl9jbnQpOworCSRvZnMgPSAkbzBfb2ZzOworCSRvX2NudCA9ICRuX2NudCA9IDA7CisJZm9yICgkaSA9IDE7ICRpIDwgQHskcHJldi0+e1RFWFR9fTsgJGkrKykgeworCQlteSAkbGluZSA9ICRwcmV2LT57VEVYVH1bJGldOworCQlpZiAoJGxpbmUgPX4gL15cKy8pIHsKKwkJCSRuX2NudCsrOworCQkJcHVzaCBAbGluZSwgJGxpbmU7CisJCQluZXh0OworCQl9CisKKwkJbGFzdCBpZiAoJG8xX29mcyA8PSAkb2ZzKTsKKworCQkkb19jbnQrKzsKKwkJJG9mcysrOworCQlpZiAoJGxpbmUgPX4gL14gLykgeworCQkJJG5fY250Kys7CisJCX0KKwkJcHVzaCBAbGluZSwgJGxpbmU7CisJfQorCisJZm9yICgkaSA9IDE7ICRpIDwgQHskdGhpcy0+e1RFWFR9fTsgJGkrKykgeworCQlteSAkbGluZSA9ICR0aGlzLT57VEVYVH1bJGldOworCQlpZiAoJGxpbmUgPX4gL15cKy8pIHsKKwkJCSRuX2NudCsrOworCQkJcHVzaCBAbGluZSwgJGxpbmU7CisJCQluZXh0OworCQl9CisJCSRvZnMrKzsKKwkJJG9fY250Kys7CisJCWlmICgkbGluZSA9fiAvXiAvKSB7CisJCQkkbl9jbnQrKzsKKwkJfQorCQlwdXNoIEBsaW5lLCAkbGluZTsKKwl9CisJbXkgJGhlYWQgPSAoIkBAIC0kbzBfb2ZzIiAuCisJCSAgICAoKCRvX2NudCAhPSAxKSA/ICIsJG9fY250IiA6ICcnKSAuCisJCSAgICAiICskbjBfb2ZzIiAuCisJCSAgICAoKCRuX2NudCAhPSAxKSA/ICIsJG5fY250IiA6ICcnKSAuCisJCSAgICAiIEBAXG4iKTsKKwlAeyRwcmV2LT57VEVYVH19ID0gKCRoZWFkLCBAbGluZSk7Cit9CisKK3N1YiBjb2FsZXNjZV9vdmVybGFwcGluZ19odW5rcyB7CisJbXkgKEBpbikgPSBAXzsKKwlteSBAb3V0ID0gKCk7CisKKwlteSAoJGxhc3Rfb19jdHgsICRsYXN0X3dhc19kaXJ0eSk7CisKKwlmb3IgKGdyZXAgeyAkXy0+e1VTRX0gfSBAaW4pIHsKKwkJaWYgKCRfLT57VFlQRX0gbmUgJ2h1bmsnKSB7CisJCQlwdXNoIEBvdXQsICRfOworCQkJbmV4dDsKKwkJfQorCQlteSAkdGV4dCA9ICRfLT57VEVYVH07CisJCW15ICgkb19vZnMpID0gcGFyc2VfaHVua19oZWFkZXIoJHRleHQtPlswXSk7CisJCWlmIChkZWZpbmVkICRsYXN0X29fY3R4ICYmCisJCSAgICAkb19vZnMgPD0gJGxhc3Rfb19jdHggJiYKKwkJICAgICEkXy0+e0RJUlRZfSAmJgorCQkgICAgISRsYXN0X3dhc19kaXJ0eSkgeworCQkJbWVyZ2VfaHVuaygkb3V0Wy0xXSwgJF8pOworCQl9CisJCWVsc2UgeworCQkJcHVzaCBAb3V0LCAkXzsKKwkJfQorCQkkbGFzdF9vX2N0eCA9IGZpbmRfbGFzdF9vX2N0eCgkb3V0Wy0xXSk7CisJCSRsYXN0X3dhc19kaXJ0eSA9ICRfLT57RElSVFl9OworCX0KKwlyZXR1cm4gQG91dDsKK30KKworc3ViIHJlYXNzZW1ibGVfcGF0Y2ggeworCW15ICRoZWFkID0gc2hpZnQ7CisJbXkgQHBhdGNoOworCisJIyBJbmNsdWRlIGV2ZXJ5dGhpbmcgaW4gdGhlIGhlYWRlciBleGNlcHQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlmZi4KKwlwdXNoIEBwYXRjaCwgKGdyZXAgeyAhL15bLStdezN9LyB9IEAkaGVhZCk7CisKKwkjIFRoZW4gaW5jbHVkZSBhbnkgaGVhZGVycyBmcm9tIHRoZSBodW5rIGxpbmVzLCB3aGljaCBtdXN0CisJIyBjb21lIGJlZm9yZSBhbnkgYWN0dWFsIGh1bmsuCisJd2hpbGUgKEBfICYmICRfWzBdICF+IC9eQC8pIHsKKwkJcHVzaCBAcGF0Y2gsIHNoaWZ0OworCX0KKworCSMgVGhlbiBiZWdpbiB0aGUgZGlmZi4KKwlwdXNoIEBwYXRjaCwgZ3JlcCB7IC9eWy0rXXszfS8gfSBAJGhlYWQ7CisKKwkjIEFuZCB0aGVuIHRoZSBhY3R1YWwgaHVua3MuCisJcHVzaCBAcGF0Y2gsIEBfOworCisJcmV0dXJuIEBwYXRjaDsKK30KKworc3ViIGNvbG9yX2RpZmYgeworCXJldHVybiBtYXAgeworCQljb2xvcmVkKCgvXkAvICA/ICRmcmFnaW5mb19jb2xvciA6CisJCQkgL15cKy8gPyAkZGlmZl9uZXdfY29sb3IgOgorCQkJIC9eLS8gID8gJGRpZmZfb2xkX2NvbG9yIDoKKwkJCSAkZGlmZl9wbGFpbl9jb2xvciksCisJCQkkXyk7CisJfSBAXzsKK30KKworc3ViIGVkaXRfaHVua19tYW51YWxseSB7CisJbXkgKCRvbGR0ZXh0KSA9IEBfOworCisJbXkgJGh1bmtmaWxlID0gJHJlcG8tPnJlcG9fcGF0aCAuICIvYWRkcC1odW5rLWVkaXQuZGlmZiI7CisJbXkgJGZoOworCW9wZW4gJGZoLCAnPicsICRodW5rZmlsZQorCQlvciBkaWUgImZhaWxlZCB0byBvcGVuIGh1bmsgZWRpdCBmaWxlIGZvciB3cml0aW5nOiAiIC4gJCE7CisJcHJpbnQgJGZoICIjIE1hbnVhbCBodW5rIGVkaXQgbW9kZSAtLSBzZWUgYm90dG9tIGZvciBhIHF1aWNrIGd1aWRlXG4iOworCXByaW50ICRmaCBAJG9sZHRleHQ7CisJbXkgJHBhcnRpY2lwbGUgPSAkcGF0Y2hfbW9kZV9mbGF2b3Vye1BBUlRJQ0lQTEV9OworCW15ICRpc19yZXZlcnNlID0gJHBhdGNoX21vZGVfZmxhdm91cntJU19SRVZFUlNFfTsKKwlteSAoJHJlbW92ZV9wbHVzLCAkcmVtb3ZlX21pbnVzKSA9ICRpc19yZXZlcnNlID8gKCctJywgJysnKSA6ICgnKycsICctJyk7CisJcHJpbnQgJGZoIDw8RU9GOworIyAtLS0KKyMgVG8gcmVtb3ZlICckcmVtb3ZlX21pbnVzJyBsaW5lcywgbWFrZSB0aGVtICcgJyBsaW5lcyAoY29udGV4dCkuCisjIFRvIHJlbW92ZSAnJHJlbW92ZV9wbHVzJyBsaW5lcywgZGVsZXRlIHRoZW0uCisjIExpbmVzIHN0YXJ0aW5nIHdpdGggIyB3aWxsIGJlIHJlbW92ZWQuCisjCisjIElmIHRoZSBwYXRjaCBhcHBsaWVzIGNsZWFubHksIHRoZSBlZGl0ZWQgaHVuayB3aWxsIGltbWVkaWF0ZWx5IGJlCisjIG1hcmtlZCBmb3IgJHBhcnRpY2lwbGUuIElmIGl0IGRvZXMgbm90IGFwcGx5IGNsZWFubHksIHlvdSB3aWxsIGJlIGdpdmVuCisjIGFuIG9wcG9ydHVuaXR5IHRvIGVkaXQgYWdhaW4uIElmIGFsbCBsaW5lcyBvZiB0aGUgaHVuayBhcmUgcmVtb3ZlZCwKKyMgdGhlbiB0aGUgZWRpdCBpcyBhYm9ydGVkIGFuZCB0aGUgaHVuayBpcyBsZWZ0IHVuY2hhbmdlZC4KK0VPRgorCWNsb3NlICRmaDsKKworCWNob21wKG15ICRlZGl0b3IgPSBydW5fY21kX3BpcGUocXcoZ2l0IHZhciBHSVRfRURJVE9SKSkpOworCXN5c3RlbSgnc2gnLCAnLWMnLCAkZWRpdG9yLicgIiRAIicsICRlZGl0b3IsICRodW5rZmlsZSk7CisKKwlpZiAoJD8gIT0gMCkgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCisJb3BlbiAkZmgsICc8JywgJGh1bmtmaWxlCisJCW9yIGRpZSAiZmFpbGVkIHRvIG9wZW4gaHVuayBlZGl0IGZpbGUgZm9yIHJlYWRpbmc6ICIgLiAkITsKKwlteSBAbmV3dGV4dCA9IGdyZXAgeyAhL14jLyB9IDwkZmg+OworCWNsb3NlICRmaDsKKwl1bmxpbmsgJGh1bmtmaWxlOworCisJIyBBYm9ydCBpZiBub3RoaW5nIHJlbWFpbnMKKwlpZiAoIWdyZXAgeyAvXFMvIH0gQG5ld3RleHQpIHsKKwkJcmV0dXJuIHVuZGVmOworCX0KKworCSMgUmVpbnNlcnQgdGhlIGZpcnN0IGh1bmsgaGVhZGVyIGlmIHRoZSB1c2VyIGFjY2lkZW50YWxseSBkZWxldGVkIGl0CisJaWYgKCRuZXd0ZXh0WzBdICF+IC9eQC8pIHsKKwkJdW5zaGlmdCBAbmV3dGV4dCwgJG9sZHRleHQtPlswXTsKKwl9CisJcmV0dXJuIFxAbmV3dGV4dDsKK30KKworc3ViIGRpZmZfYXBwbGllcyB7CisJcmV0dXJuIHJ1bl9naXRfYXBwbHkoJHBhdGNoX21vZGVfZmxhdm91cntBUFBMWV9DSEVDS30gLiAnIC0tY2hlY2snLAorCQkJICAgICBtYXAgeyBAeyRfLT57VEVYVH19IH0gQF8pOworfQorCitzdWIgX3Jlc3RvcmVfdGVybWluYWxfYW5kX2RpZSB7CisJUmVhZE1vZGUgJ3Jlc3RvcmUnOworCXByaW50ICJcbiI7CisJZXhpdCAxOworfQorCitzdWIgcHJvbXB0X3NpbmdsZV9jaGFyYWN0ZXIgeworCWlmICgkdXNlX3JlYWRrZXkpIHsKKwkJbG9jYWwgJFNJR3tURVJNfSA9IFwmX3Jlc3RvcmVfdGVybWluYWxfYW5kX2RpZTsKKwkJbG9jYWwgJFNJR3tJTlR9ID0gXCZfcmVzdG9yZV90ZXJtaW5hbF9hbmRfZGllOworCQlSZWFkTW9kZSAnY2JyZWFrJzsKKwkJbXkgJGtleSA9IFJlYWRLZXkgMDsKKwkJUmVhZE1vZGUgJ3Jlc3RvcmUnOworCQlpZiAoJHVzZV90ZXJtY2FwIGFuZCAka2V5IGVxICJcZSIpIHsKKwkJCXdoaWxlICghZGVmaW5lZCAkdGVybV9lc2NhcGVzeyRrZXl9KSB7CisJCQkJbXkgJG5leHQgPSBSZWFkS2V5IDAuNTsKKwkJCQlsYXN0IGlmICghZGVmaW5lZCAkbmV4dCk7CisJCQkJJGtleSAuPSAkbmV4dDsKKwkJCX0KKwkJCSRrZXkgPX4gcy9cZS9eWy87CisJCX0KKwkJcHJpbnQgIiRrZXkiIGlmIGRlZmluZWQgJGtleTsKKwkJcHJpbnQgIlxuIjsKKwkJcmV0dXJuICRrZXk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDxTVERJTj47CisJfQorfQorCitzdWIgcHJvbXB0X3llc25vIHsKKwlteSAoJHByb21wdCkgPSBAXzsKKwl3aGlsZSAoMSkgeworCQlwcmludCBjb2xvcmVkICRwcm9tcHRfY29sb3IsICRwcm9tcHQ7CisJCW15ICRsaW5lID0gcHJvbXB0X3NpbmdsZV9jaGFyYWN0ZXI7CisJCXJldHVybiAwIGlmICRsaW5lID1+IC9ebi9pOworCQlyZXR1cm4gMSBpZiAkbGluZSA9fiAvXnkvaTsKKwl9Cit9CisKK3N1YiBlZGl0X2h1bmtfbG9vcCB7CisJbXkgKCRoZWFkLCAkaHVuaywgJGl4KSA9IEBfOworCW15ICR0ZXh0ID0gJGh1bmstPlskaXhdLT57VEVYVH07CisKKwl3aGlsZSAoMSkgeworCQkkdGV4dCA9IGVkaXRfaHVua19tYW51YWxseSgkdGV4dCk7CisJCWlmICghZGVmaW5lZCAkdGV4dCkgeworCQkJcmV0dXJuIHVuZGVmOworCQl9CisJCW15ICRuZXdodW5rID0geworCQkJVEVYVCA9PiAkdGV4dCwKKwkJCVRZUEUgPT4gJGh1bmstPlskaXhdLT57VFlQRX0sCisJCQlVU0UgPT4gMSwKKwkJCURJUlRZID0+IDEsCisJCX07CisJCWlmIChkaWZmX2FwcGxpZXMoJGhlYWQsCisJCQkJIEB7JGh1bmt9WzAuLiRpeC0xXSwKKwkJCQkgJG5ld2h1bmssCisJCQkJIEB7JGh1bmt9WyRpeCsxLi4kI3skaHVua31dKSkgeworCQkJJG5ld2h1bmstPntESVNQTEFZfSA9IFtjb2xvcl9kaWZmKEB7JHRleHR9KV07CisJCQlyZXR1cm4gJG5ld2h1bms7CisJCX0KKwkJZWxzZSB7CisJCQlwcm9tcHRfeWVzbm8oCisJCQkJJ1lvdXIgZWRpdGVkIGh1bmsgZG9lcyBub3QgYXBwbHkuIEVkaXQgYWdhaW4gJworCQkJCS4gJyhzYXlpbmcgIm5vIiBkaXNjYXJkcyEpIFt5L25dPyAnCisJCQkJKSBvciByZXR1cm4gdW5kZWY7CisJCX0KKwl9Cit9CisKK3N1YiBoZWxwX3BhdGNoX2NtZCB7CisJbXkgJHZlcmIgPSBsYyAkcGF0Y2hfbW9kZV9mbGF2b3Vye1ZFUkJ9OworCW15ICR0YXJnZXQgPSAkcGF0Y2hfbW9kZV9mbGF2b3Vye1RBUkdFVH07CisJcHJpbnQgY29sb3JlZCAkaGVscF9jb2xvciwgPDxFT0YgOworeSAtICR2ZXJiIHRoaXMgaHVuayR0YXJnZXQKK24gLSBkbyBub3QgJHZlcmIgdGhpcyBodW5rJHRhcmdldAorcSAtIHF1aXQ7IGRvIG5vdCAkdmVyYiB0aGlzIGh1bmsgb3IgYW55IG9mIHRoZSByZW1haW5pbmcgb25lcworYSAtICR2ZXJiIHRoaXMgaHVuayBhbmQgYWxsIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlCitkIC0gZG8gbm90ICR2ZXJiIHRoaXMgaHVuayBvciBhbnkgb2YgdGhlIGxhdGVyIGh1bmtzIGluIHRoZSBmaWxlCitnIC0gc2VsZWN0IGEgaHVuayB0byBnbyB0bworLyAtIHNlYXJjaCBmb3IgYSBodW5rIG1hdGNoaW5nIHRoZSBnaXZlbiByZWdleAoraiAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBuZXh0IHVuZGVjaWRlZCBodW5rCitKIC0gbGVhdmUgdGhpcyBodW5rIHVuZGVjaWRlZCwgc2VlIG5leHQgaHVuaworayAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyB1bmRlY2lkZWQgaHVuaworSyAtIGxlYXZlIHRoaXMgaHVuayB1bmRlY2lkZWQsIHNlZSBwcmV2aW91cyBodW5rCitzIC0gc3BsaXQgdGhlIGN1cnJlbnQgaHVuayBpbnRvIHNtYWxsZXIgaHVua3MKK2UgLSBtYW51YWxseSBlZGl0IHRoZSBjdXJyZW50IGh1bmsKKz8gLSBwcmludCBoZWxwCitFT0YKK30KKworc3ViIGFwcGx5X3BhdGNoIHsKKwlteSAkY21kID0gc2hpZnQ7CisJbXkgJHJldCA9IHJ1bl9naXRfYXBwbHkgJGNtZCwgQF87CisJaWYgKCEkcmV0KSB7CisJCXByaW50IFNUREVSUiBAXzsKKwl9CisJcmV0dXJuICRyZXQ7Cit9CisKK3N1YiBhcHBseV9wYXRjaF9mb3JfY2hlY2tvdXRfY29tbWl0IHsKKwlteSAkcmV2ZXJzZSA9IHNoaWZ0OworCW15ICRhcHBsaWVzX2luZGV4ID0gcnVuX2dpdF9hcHBseSAnYXBwbHkgJy4kcmV2ZXJzZS4nIC0tY2FjaGVkIC0tY2hlY2snLCBAXzsKKwlteSAkYXBwbGllc193b3JrdHJlZSA9IHJ1bl9naXRfYXBwbHkgJ2FwcGx5ICcuJHJldmVyc2UuJyAtLWNoZWNrJywgQF87CisKKwlpZiAoJGFwcGxpZXNfd29ya3RyZWUgJiYgJGFwcGxpZXNfaW5kZXgpIHsKKwkJcnVuX2dpdF9hcHBseSAnYXBwbHkgJy4kcmV2ZXJzZS4nIC0tY2FjaGVkJywgQF87CisJCXJ1bl9naXRfYXBwbHkgJ2FwcGx5ICcuJHJldmVyc2UsIEBfOworCQlyZXR1cm4gMTsKKwl9IGVsc2lmICghJGFwcGxpZXNfaW5kZXgpIHsKKwkJcHJpbnQgY29sb3JlZCAkZXJyb3JfY29sb3IsICJUaGUgc2VsZWN0ZWQgaHVua3MgZG8gbm90IGFwcGx5IHRvIHRoZSBpbmRleCFcbiI7CisJCWlmIChwcm9tcHRfeWVzbm8gIkFwcGx5IHRoZW0gdG8gdGhlIHdvcmt0cmVlIGFueXdheT8gIikgeworCQkJcmV0dXJuIHJ1bl9naXRfYXBwbHkgJ2FwcGx5ICcuJHJldmVyc2UsIEBfOworCQl9IGVsc2UgeworCQkJcHJpbnQgY29sb3JlZCAkZXJyb3JfY29sb3IsICJOb3RoaW5nIHdhcyBhcHBsaWVkLlxuIjsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnQgU1RERVJSIEBfOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N1YiBwYXRjaF91cGRhdGVfY21kIHsKKwlteSBAYWxsX21vZHMgPSBsaXN0X21vZGlmaWVkKCRwYXRjaF9tb2RlX2ZsYXZvdXJ7RklMVEVSfSk7CisJZXJyb3JfbXNnICJpZ25vcmluZyB1bm1lcmdlZDogJF8tPntWQUxVRX1cbiIKKwkJZm9yIGdyZXAgeyAkXy0+e1VOTUVSR0VEfSB9IEBhbGxfbW9kczsKKwlAYWxsX21vZHMgPSBncmVwIHsgISRfLT57VU5NRVJHRUR9IH0gQGFsbF9tb2RzOworCisJbXkgQG1vZHMgPSBncmVwIHsgISgkXy0+e0JJTkFSWX0pIH0gQGFsbF9tb2RzOworCW15IEB0aGVtOworCisJaWYgKCFAbW9kcykgeworCQlpZiAoQGFsbF9tb2RzKSB7CisJCQlwcmludCBTVERFUlIgIk9ubHkgYmluYXJ5IGZpbGVzIGNoYW5nZWQuXG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgU1RERVJSICJObyBjaGFuZ2VzLlxuIjsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJaWYgKCRwYXRjaF9tb2RlKSB7CisJCUB0aGVtID0gQG1vZHM7CisJfQorCWVsc2UgeworCQlAdGhlbSA9IGxpc3RfYW5kX2Nob29zZSh7IFBST01QVCA9PiAnUGF0Y2ggdXBkYXRlJywKKwkJCQkJICBIRUFERVIgPT4gJHN0YXR1c19oZWFkLCB9LAorCQkJCQlAbW9kcyk7CisJfQorCWZvciAoQHRoZW0pIHsKKwkJcmV0dXJuIDAgaWYgcGF0Y2hfdXBkYXRlX2ZpbGUoJF8tPntWQUxVRX0pOworCX0KK30KKworIyBHZW5lcmF0ZSBhIG9uZSBsaW5lIHN1bW1hcnkgb2YgYSBodW5rLgorc3ViIHN1bW1hcml6ZV9odW5rIHsKKwlteSAkcmh1bmsgPSBzaGlmdDsKKwlteSAkc3VtbWFyeSA9ICRyaHVuay0+e1RFWFR9WzBdOworCisJIyBLZWVwIHRoZSBsaW5lIG51bWJlcnMsIGRpc2NhcmQgZXh0cmEgY29udGV4dC4KKwkkc3VtbWFyeSA9fiBzL0BAKC4qPylAQC4qLyQxIC9zOworCSRzdW1tYXJ5IC49ICIgIiB4ICgyMCAtIGxlbmd0aCAkc3VtbWFyeSk7CisKKwkjIEFkZCBzb21lIHVzZXIgY29udGV4dC4KKwlmb3IgbXkgJGxpbmUgKEB7JHJodW5rLT57VEVYVH19KSB7CisJCWlmICgkbGluZSA9fiBtL15bKy1dLipcdy8pIHsKKwkJCSRzdW1tYXJ5IC49ICRsaW5lOworCQkJbGFzdDsKKwkJfQorCX0KKworCWNob21wICRzdW1tYXJ5OworCXJldHVybiBzdWJzdHIoJHN1bW1hcnksIDAsIDgwKSAuICJcbiI7Cit9CisKKworIyBQcmludCBhIG9uZS1saW5lIHN1bW1hcnkgb2YgZWFjaCBodW5rIGluIHRoZSBhcnJheSByZWYgaW4KKyMgdGhlIGZpcnN0IGFyZ3VtZW50LCBzdGFydGluZyB3aXRoIHRoZSBpbmRleCBpbiB0aGUgMm5kLgorc3ViIGRpc3BsYXlfaHVua3MgeworCW15ICgkaHVua3MsICRpKSA9IEBfOworCW15ICRjdHIgPSAwOworCSRpIHx8PSAwOworCWZvciAoOyAkaSA8IEAkaHVua3MgJiYgJGN0ciA8IDIwOyAkaSsrLCAkY3RyKyspIHsKKwkJbXkgJHN0YXR1cyA9ICIgIjsKKwkJaWYgKGRlZmluZWQgJGh1bmtzLT5bJGlde1VTRX0pIHsKKwkJCSRzdGF0dXMgPSAkaHVua3MtPlskaV17VVNFfSA/ICIrIiA6ICItIjsKKwkJfQorCQlwcmludGYgIiVzJTJkOiAlcyIsCisJCQkkc3RhdHVzLAorCQkJJGkgKyAxLAorCQkJc3VtbWFyaXplX2h1bmsoJGh1bmtzLT5bJGldKTsKKwl9CisJcmV0dXJuICRpOworfQorCitzdWIgcGF0Y2hfdXBkYXRlX2ZpbGUgeworCW15ICRxdWl0ID0gMDsKKwlteSAoJGl4LCAkbnVtKTsKKwlteSAkcGF0aCA9IHNoaWZ0OworCW15ICgkaGVhZCwgQGh1bmspID0gcGFyc2VfZGlmZigkcGF0aCk7CisJKCRoZWFkLCBteSAkbW9kZSwgbXkgJGRlbGV0aW9uKSA9IHBhcnNlX2RpZmZfaGVhZGVyKCRoZWFkKTsKKwlmb3IgKEB7JGhlYWQtPntESVNQTEFZfX0pIHsKKwkJcHJpbnQ7CisJfQorCisJaWYgKEB7JG1vZGUtPntURVhUfX0pIHsKKwkJdW5zaGlmdCBAaHVuaywgJG1vZGU7CisJfQorCWlmIChAeyRkZWxldGlvbi0+e1RFWFR9fSkgeworCQlmb3JlYWNoIG15ICRodW5rIChAaHVuaykgeworCQkJcHVzaCBAeyRkZWxldGlvbi0+e1RFWFR9fSwgQHskaHVuay0+e1RFWFR9fTsKKwkJCXB1c2ggQHskZGVsZXRpb24tPntESVNQTEFZfX0sIEB7JGh1bmstPntESVNQTEFZfX07CisJCX0KKwkJQGh1bmsgPSAoJGRlbGV0aW9uKTsKKwl9CisKKwkkbnVtID0gc2NhbGFyIEBodW5rOworCSRpeCA9IDA7CisKKwl3aGlsZSAoMSkgeworCQlteSAoJHByZXYsICRuZXh0LCAkb3RoZXIsICR1bmRlY2lkZWQsICRpKTsKKwkJJG90aGVyID0gJyc7CisKKwkJaWYgKCRudW0gPD0gJGl4KSB7CisJCQkkaXggPSAwOworCQl9CisJCWZvciAoJGkgPSAwOyAkaSA8ICRpeDsgJGkrKykgeworCQkJaWYgKCFkZWZpbmVkICRodW5rWyRpXXtVU0V9KSB7CisJCQkJJHByZXYgPSAxOworCQkJCSRvdGhlciAuPSAnLGsnOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJaWYgKCRpeCkgeworCQkJJG90aGVyIC49ICcsSyc7CisJCX0KKwkJZm9yICgkaSA9ICRpeCArIDE7ICRpIDwgJG51bTsgJGkrKykgeworCQkJaWYgKCFkZWZpbmVkICRodW5rWyRpXXtVU0V9KSB7CisJCQkJJG5leHQgPSAxOworCQkJCSRvdGhlciAuPSAnLGonOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJaWYgKCRpeCA8ICRudW0gLSAxKSB7CisJCQkkb3RoZXIgLj0gJyxKJzsKKwkJfQorCQlpZiAoJG51bSA+IDEpIHsKKwkJCSRvdGhlciAuPSAnLGcnOworCQl9CisJCWZvciAoJGkgPSAwOyAkaSA8ICRudW07ICRpKyspIHsKKwkJCWlmICghZGVmaW5lZCAkaHVua1skaV17VVNFfSkgeworCQkJCSR1bmRlY2lkZWQgPSAxOworCQkJCWxhc3Q7CisJCQl9CisJCX0KKwkJbGFzdCBpZiAoISR1bmRlY2lkZWQpOworCisJCWlmICgkaHVua1skaXhde1RZUEV9IGVxICdodW5rJyAmJgorCQkgICAgaHVua19zcGxpdHRhYmxlKCRodW5rWyRpeF17VEVYVH0pKSB7CisJCQkkb3RoZXIgLj0gJyxzJzsKKwkJfQorCQlpZiAoJGh1bmtbJGl4XXtUWVBFfSBlcSAnaHVuaycpIHsKKwkJCSRvdGhlciAuPSAnLGUnOworCQl9CisJCWZvciAoQHskaHVua1skaXhde0RJU1BMQVl9fSkgeworCQkJcHJpbnQ7CisJCX0KKwkJcHJpbnQgY29sb3JlZCAkcHJvbXB0X2NvbG9yLCAkcGF0Y2hfbW9kZV9mbGF2b3Vye1ZFUkJ9LAorCQkgICgkaHVua1skaXhde1RZUEV9IGVxICdtb2RlJyA/ICcgbW9kZSBjaGFuZ2UnIDoKKwkJICAgJGh1bmtbJGl4XXtUWVBFfSBlcSAnZGVsZXRpb24nID8gJyBkZWxldGlvbicgOgorCQkgICAnIHRoaXMgaHVuaycpLAorCQkgICRwYXRjaF9tb2RlX2ZsYXZvdXJ7VEFSR0VUfSwKKwkJICAiIFt5LG4scSxhLGQsLyRvdGhlciw/XT8gIjsKKwkJbXkgJGxpbmUgPSBwcm9tcHRfc2luZ2xlX2NoYXJhY3RlcjsKKwkJbGFzdCB1bmxlc3MgZGVmaW5lZCAkbGluZTsKKwkJaWYgKCRsaW5lKSB7CisJCQlpZiAoJGxpbmUgPX4gL155L2kpIHsKKwkJCQkkaHVua1skaXhde1VTRX0gPSAxOworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9ebi9pKSB7CisJCQkJJGh1bmtbJGl4XXtVU0V9ID0gMDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXmEvaSkgeworCQkJCXdoaWxlICgkaXggPCAkbnVtKSB7CisJCQkJCWlmICghZGVmaW5lZCAkaHVua1skaXhde1VTRX0pIHsKKwkJCQkJCSRodW5rWyRpeF17VVNFfSA9IDE7CisJCQkJCX0KKwkJCQkJJGl4Kys7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisJCQllbHNpZiAoJG90aGVyID1+IC9nLyAmJiAkbGluZSA9fiAvXmcoLiopLykgeworCQkJCW15ICRyZXNwb25zZSA9ICQxOworCQkJCW15ICRubyA9ICRpeCA+IDEwID8gJGl4IC0gMTAgOiAwOworCQkJCXdoaWxlICgkcmVzcG9uc2UgZXEgJycpIHsKKwkJCQkJbXkgJGV4dHJhID0gIiI7CisJCQkJCSRubyA9IGRpc3BsYXlfaHVua3MoXEBodW5rLCAkbm8pOworCQkJCQlpZiAoJG5vIDwgJG51bSkgeworCQkJCQkJJGV4dHJhID0gIiAoPHJldD4gdG8gc2VlIG1vcmUpIjsKKwkJCQkJfQorCQkJCQlwcmludCAiZ28gdG8gd2hpY2ggaHVuayRleHRyYT8gIjsKKwkJCQkJJHJlc3BvbnNlID0gPFNURElOPjsKKwkJCQkJaWYgKCFkZWZpbmVkICRyZXNwb25zZSkgeworCQkJCQkJJHJlc3BvbnNlID0gJyc7CisJCQkJCX0KKwkJCQkJY2hvbXAgJHJlc3BvbnNlOworCQkJCX0KKwkJCQlpZiAoJHJlc3BvbnNlICF+IC9eXHMqXGQrXHMqJC8pIHsKKwkJCQkJZXJyb3JfbXNnICJJbnZhbGlkIG51bWJlcjogJyRyZXNwb25zZSdcbiI7CisJCQkJfSBlbHNpZiAoMCA8ICRyZXNwb25zZSAmJiAkcmVzcG9uc2UgPD0gJG51bSkgeworCQkJCQkkaXggPSAkcmVzcG9uc2UgLSAxOworCQkJCX0gZWxzZSB7CisJCQkJCWVycm9yX21zZyAiU29ycnksIG9ubHkgJG51bSBodW5rcyBhdmFpbGFibGUuXG4iOworCQkJCX0KKwkJCQluZXh0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eZC9pKSB7CisJCQkJd2hpbGUgKCRpeCA8ICRudW0pIHsKKwkJCQkJaWYgKCFkZWZpbmVkICRodW5rWyRpeF17VVNFfSkgeworCQkJCQkJJGh1bmtbJGl4XXtVU0V9ID0gMDsKKwkJCQkJfQorCQkJCQkkaXgrKzsKKwkJCQl9CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXnEvaSkgeworCQkJCWZvciAoJGkgPSAwOyAkaSA8ICRudW07ICRpKyspIHsKKwkJCQkJaWYgKCFkZWZpbmVkICRodW5rWyRpXXtVU0V9KSB7CisJCQkJCQkkaHVua1skaV17VVNFfSA9IDA7CisJCQkJCX0KKwkJCQl9CisJCQkJJHF1aXQgPSAxOworCQkJCWxhc3Q7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gbXxeLyguKil8KSB7CisJCQkJbXkgJHJlZ2V4ID0gJDE7CisJCQkJaWYgKCQxIGVxICIiKSB7CisJCQkJCXByaW50IGNvbG9yZWQgJHByb21wdF9jb2xvciwgInNlYXJjaCBmb3IgcmVnZXg/ICI7CisJCQkJCSRyZWdleCA9IDxTVERJTj47CisJCQkJCWlmIChkZWZpbmVkICRyZWdleCkgeworCQkJCQkJY2hvbXAgJHJlZ2V4OworCQkJCQl9CisJCQkJfQorCQkJCW15ICRzZWFyY2hfc3RyaW5nOworCQkJCWV2YWwgeworCQkJCQkkc2VhcmNoX3N0cmluZyA9IHFyeyRyZWdleH1tOworCQkJCX07CisJCQkJaWYgKCRAKSB7CisJCQkJCW15ICgkZXJyLCRleHApID0gKCRALCAkMSk7CisJCQkJCSRlcnIgPX4gcy8gYXQgLipnaXQtYWRkLS1pbnRlcmFjdGl2ZSBsaW5lIFxkKywgPFNURElOPiBsaW5lIFxkKy4qJC8vOworCQkJCQllcnJvcl9tc2cgIk1hbGZvcm1lZCBzZWFyY2ggcmVnZXhwICRleHA6ICRlcnJcbiI7CisJCQkJCW5leHQ7CisJCQkJfQorCQkJCW15ICRpeSA9ICRpeDsKKwkJCQl3aGlsZSAoMSkgeworCQkJCQlteSAkdGV4dCA9IGpvaW4gKCIiLCBAeyRodW5rWyRpeV17VEVYVH19KTsKKwkJCQkJbGFzdCBpZiAoJHRleHQgPX4gJHNlYXJjaF9zdHJpbmcpOworCQkJCQkkaXkrKzsKKwkJCQkJJGl5ID0gMCBpZiAoJGl5ID49ICRudW0pOworCQkJCQlpZiAoJGl4ID09ICRpeSkgeworCQkJCQkJZXJyb3JfbXNnICJObyBodW5rIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm5cbiI7CisJCQkJCQlsYXN0OworCQkJCQl9CisJCQkJfQorCQkJCSRpeCA9ICRpeTsKKwkJCQluZXh0OworCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eSy8pIHsKKwkJCQlpZiAoJG90aGVyID1+IC9LLykgeworCQkJCQkkaXgtLTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWVycm9yX21zZyAiTm8gcHJldmlvdXMgaHVua1xuIjsKKwkJCQl9CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXkovKSB7CisJCQkJaWYgKCRvdGhlciA9fiAvSi8pIHsKKwkJCQkJJGl4Kys7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllcnJvcl9tc2cgIk5vIG5leHQgaHVua1xuIjsKKwkJCQl9CisJCQkJbmV4dDsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXmsvKSB7CisJCQkJaWYgKCRvdGhlciA9fiAvay8pIHsKKwkJCQkJd2hpbGUgKDEpIHsKKwkJCQkJCSRpeC0tOworCQkJCQkJbGFzdCBpZiAoISRpeCB8fAorCQkJCQkJCSAhZGVmaW5lZCAkaHVua1skaXhde1VTRX0pOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQllcnJvcl9tc2cgIk5vIHByZXZpb3VzIGh1bmtcbiI7CisJCQkJfQorCQkJCW5leHQ7CisJCQl9CisJCQllbHNpZiAoJGxpbmUgPX4gL15qLykgeworCQkJCWlmICgkb3RoZXIgIX4gL2ovKSB7CisJCQkJCWVycm9yX21zZyAiTm8gbmV4dCBodW5rXG4iOworCQkJCQluZXh0OworCQkJCX0KKwkJCX0KKwkJCWVsc2lmICgkb3RoZXIgPX4gL3MvICYmICRsaW5lID1+IC9ecy8pIHsKKwkJCQlteSBAc3BsaXQgPSBzcGxpdF9odW5rKCRodW5rWyRpeF17VEVYVH0sICRodW5rWyRpeF17RElTUExBWX0pOworCQkJCWlmICgxIDwgQHNwbGl0KSB7CisJCQkJCXByaW50IGNvbG9yZWQgJGhlYWRlcl9jb2xvciwgIlNwbGl0IGludG8gIiwKKwkJCQkJc2NhbGFyKEBzcGxpdCksICIgaHVua3MuXG4iOworCQkJCX0KKwkJCQlzcGxpY2UgKEBodW5rLCAkaXgsIDEsIEBzcGxpdCk7CisJCQkJJG51bSA9IHNjYWxhciBAaHVuazsKKwkJCQluZXh0OworCQkJfQorCQkJZWxzaWYgKCRvdGhlciA9fiAvZS8gJiYgJGxpbmUgPX4gL15lLykgeworCQkJCW15ICRuZXdodW5rID0gZWRpdF9odW5rX2xvb3AoJGhlYWQsIFxAaHVuaywgJGl4KTsKKwkJCQlpZiAoZGVmaW5lZCAkbmV3aHVuaykgeworCQkJCQlzcGxpY2UgQGh1bmssICRpeCwgMSwgJG5ld2h1bms7CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJaGVscF9wYXRjaF9jbWQoJG90aGVyKTsKKwkJCQluZXh0OworCQkJfQorCQkJIyBzb2Z0IGluY3JlbWVudAorCQkJd2hpbGUgKDEpIHsKKwkJCQkkaXgrKzsKKwkJCQlsYXN0IGlmICgkaXggPj0gJG51bSB8fAorCQkJCQkgIWRlZmluZWQgJGh1bmtbJGl4XXtVU0V9KTsKKwkJCX0KKwkJfQorCX0KKworCUBodW5rID0gY29hbGVzY2Vfb3ZlcmxhcHBpbmdfaHVua3MoQGh1bmspOworCisJbXkgJG5fbG9mcyA9IDA7CisJbXkgQHJlc3VsdCA9ICgpOworCWZvciAoQGh1bmspIHsKKwkJaWYgKCRfLT57VVNFfSkgeworCQkJcHVzaCBAcmVzdWx0LCBAeyRfLT57VEVYVH19OworCQl9CisJfQorCisJaWYgKEByZXN1bHQpIHsKKwkJbXkgQHBhdGNoID0gcmVhc3NlbWJsZV9wYXRjaCgkaGVhZC0+e1RFWFR9LCBAcmVzdWx0KTsKKwkJbXkgJGFwcGx5X3JvdXRpbmUgPSAkcGF0Y2hfbW9kZV9mbGF2b3Vye0FQUExZfTsKKwkJJiRhcHBseV9yb3V0aW5lKEBwYXRjaCk7CisJCXJlZnJlc2goKTsKKwl9CisKKwlwcmludCAiXG4iOworCXJldHVybiAkcXVpdDsKK30KKworc3ViIGRpZmZfY21kIHsKKwlteSBAbW9kcyA9IGxpc3RfbW9kaWZpZWQoJ2luZGV4LW9ubHknKTsKKwlAbW9kcyA9IGdyZXAgeyAhKCRfLT57QklOQVJZfSkgfSBAbW9kczsKKwlyZXR1cm4gaWYgKCFAbW9kcyk7CisJbXkgKEB0aGVtKSA9IGxpc3RfYW5kX2Nob29zZSh7IFBST01QVCA9PiAnUmV2aWV3IGRpZmYnLAorCQkJCSAgICAgSU1NRURJQVRFID0+IDEsCisJCQkJICAgICBIRUFERVIgPT4gJHN0YXR1c19oZWFkLCB9LAorCQkJCSAgIEBtb2RzKTsKKwlyZXR1cm4gaWYgKCFAdGhlbSk7CisJbXkgJHJlZmVyZW5jZSA9IGlzX2luaXRpYWxfY29tbWl0KCkgPyBnZXRfZW1wdHlfdHJlZSgpIDogJ0hFQUQnOworCXN5c3RlbShxdyhnaXQgZGlmZiAtcCAtLWNhY2hlZCksICRyZWZlcmVuY2UsICctLScsCisJCW1hcCB7ICRfLT57VkFMVUV9IH0gQHRoZW0pOworfQorCitzdWIgcXVpdF9jbWQgeworCXByaW50ICJCeWUuXG4iOworCWV4aXQoMCk7Cit9CisKK3N1YiBoZWxwX2NtZCB7CisJcHJpbnQgY29sb3JlZCAkaGVscF9jb2xvciwgPDxcRU9GIDsKK3N0YXR1cyAgICAgICAgLSBzaG93IHBhdGhzIHdpdGggY2hhbmdlcwordXBkYXRlICAgICAgICAtIGFkZCB3b3JraW5nIHRyZWUgc3RhdGUgdG8gdGhlIHN0YWdlZCBzZXQgb2YgY2hhbmdlcworcmV2ZXJ0ICAgICAgICAtIHJldmVydCBzdGFnZWQgc2V0IG9mIGNoYW5nZXMgYmFjayB0byB0aGUgSEVBRCB2ZXJzaW9uCitwYXRjaCAgICAgICAgIC0gcGljayBodW5rcyBhbmQgdXBkYXRlIHNlbGVjdGl2ZWx5CitkaWZmCSAgICAgIC0gdmlldyBkaWZmIGJldHdlZW4gSEVBRCBhbmQgaW5kZXgKK2FkZCB1bnRyYWNrZWQgLSBhZGQgY29udGVudHMgb2YgdW50cmFja2VkIGZpbGVzIHRvIHRoZSBzdGFnZWQgc2V0IG9mIGNoYW5nZXMKK0VPRgorfQorCitzdWIgcHJvY2Vzc19hcmdzIHsKKwlyZXR1cm4gdW5sZXNzIEBBUkdWOworCW15ICRhcmcgPSBzaGlmdCBAQVJHVjsKKwlpZiAoJGFyZyA9fiAvLS1wYXRjaCg/Oj0oLiopKT8vKSB7CisJCWlmIChkZWZpbmVkICQxKSB7CisJCQlpZiAoJDEgZXEgJ3Jlc2V0JykgeworCQkJCSRwYXRjaF9tb2RlID0gJ3Jlc2V0X2hlYWQnOworCQkJCSRwYXRjaF9tb2RlX3JldmlzaW9uID0gJ0hFQUQnOworCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgIm1pc3NpbmcgLS0iOworCQkJCWlmICgkYXJnIG5lICctLScpIHsKKwkJCQkJJHBhdGNoX21vZGVfcmV2aXNpb24gPSAkYXJnOworCQkJCQkkcGF0Y2hfbW9kZSA9ICgkYXJnIGVxICdIRUFEJyA/CisJCQkJCQkgICAgICAgJ3Jlc2V0X2hlYWQnIDogJ3Jlc2V0X25vdGhlYWQnKTsKKwkJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSAibWlzc2luZyAtLSI7CisJCQkJfQorCQkJfSBlbHNpZiAoJDEgZXEgJ2NoZWNrb3V0JykgeworCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgIm1pc3NpbmcgLS0iOworCQkJCWlmICgkYXJnIGVxICctLScpIHsKKwkJCQkJJHBhdGNoX21vZGUgPSAnY2hlY2tvdXRfaW5kZXgnOworCQkJCX0gZWxzZSB7CisJCQkJCSRwYXRjaF9tb2RlX3JldmlzaW9uID0gJGFyZzsKKwkJCQkJJHBhdGNoX21vZGUgPSAoJGFyZyBlcSAnSEVBRCcgPworCQkJCQkJICAgICAgICdjaGVja291dF9oZWFkJyA6ICdjaGVja291dF9ub3RoZWFkJyk7CisJCQkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgIm1pc3NpbmcgLS0iOworCQkJCX0KKwkJCX0gZWxzaWYgKCQxIGVxICdzdGFnZScgb3IgJDEgZXEgJ3N0YXNoJykgeworCQkJCSRwYXRjaF9tb2RlID0gJDE7CisJCQkJJGFyZyA9IHNoaWZ0IEBBUkdWIG9yIGRpZSAibWlzc2luZyAtLSI7CisJCQl9IGVsc2UgeworCQkJCWRpZSAidW5rbm93biAtLXBhdGNoIG1vZGU6ICQxIjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRwYXRjaF9tb2RlID0gJ3N0YWdlJzsKKwkJCSRhcmcgPSBzaGlmdCBAQVJHViBvciBkaWUgIm1pc3NpbmcgLS0iOworCQl9CisJCWRpZSAiaW52YWxpZCBhcmd1bWVudCAkYXJnLCBleHBlY3RpbmcgLS0iCisJCSAgICB1bmxlc3MgJGFyZyBlcSAiLS0iOworCQklcGF0Y2hfbW9kZV9mbGF2b3VyID0gJXskcGF0Y2hfbW9kZXN7JHBhdGNoX21vZGV9fTsKKwl9CisJZWxzaWYgKCRhcmcgbmUgIi0tIikgeworCQlkaWUgImludmFsaWQgYXJndW1lbnQgJGFyZywgZXhwZWN0aW5nIC0tIjsKKwl9Cit9CisKK3N1YiBtYWluX2xvb3AgeworCW15IEBjbWQgPSAoWyAnc3RhdHVzJywgXCZzdGF0dXNfY21kLCBdLAorCQkgICBbICd1cGRhdGUnLCBcJnVwZGF0ZV9jbWQsIF0sCisJCSAgIFsgJ3JldmVydCcsIFwmcmV2ZXJ0X2NtZCwgXSwKKwkJICAgWyAnYWRkIHVudHJhY2tlZCcsIFwmYWRkX3VudHJhY2tlZF9jbWQsIF0sCisJCSAgIFsgJ3BhdGNoJywgXCZwYXRjaF91cGRhdGVfY21kLCBdLAorCQkgICBbICdkaWZmJywgXCZkaWZmX2NtZCwgXSwKKwkJICAgWyAncXVpdCcsIFwmcXVpdF9jbWQsIF0sCisJCSAgIFsgJ2hlbHAnLCBcJmhlbHBfY21kLCBdLAorCSk7CisJd2hpbGUgKDEpIHsKKwkJbXkgKCRpdCkgPSBsaXN0X2FuZF9jaG9vc2UoeyBQUk9NUFQgPT4gJ1doYXQgbm93JywKKwkJCQkJICAgICBTSU5HTEVUT04gPT4gMSwKKwkJCQkJICAgICBMSVNUX0ZMQVQgPT4gNCwKKwkJCQkJICAgICBIRUFERVIgPT4gJyoqKiBDb21tYW5kcyAqKionLAorCQkJCQkgICAgIE9OX0VPRiA9PiBcJnF1aXRfY21kLAorCQkJCQkgICAgIElNTUVESUFURSA9PiAxIH0sIEBjbWQpOworCQlpZiAoJGl0KSB7CisJCQlldmFsIHsKKwkJCQkkaXQtPlsxXS0+KCk7CisJCQl9OworCQkJaWYgKCRAKSB7CisJCQkJcHJpbnQgIiRAIjsKKwkJCX0KKwkJfQorCX0KK30KKworcHJvY2Vzc19hcmdzKCk7CityZWZyZXNoKCk7CitpZiAoJHBhdGNoX21vZGUpIHsKKwlwYXRjaF91cGRhdGVfY21kKCk7Cit9CitlbHNlIHsKKwlzdGF0dXNfY21kKCk7CisJbWFpbl9sb29wKCk7Cit9CmRpZmYgLS1naXQgYS9naXQtYXJjaGltcG9ydC5wZXJsIGIvZ2l0LWFyY2hpbXBvcnQucGVybApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45Y2IxMjNhCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWFyY2hpbXBvcnQucGVybApAQCAtMCwwICsxLDExMzQgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBUaGlzIHRvb2wgaXMgY29weXJpZ2h0IChjKSAyMDA1LCBNYXJ0aW4gTGFuZ2hvZmYuCisjIEl0IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHbnUgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyMKKyMgVGhlIGJhc2ljIGlkZWEgaXMgdG8gd2FsayB0aGUgb3V0cHV0IG9mIHRsYSBhYnJvd3NlLAorIyBmZXRjaCB0aGUgY2hhbmdlc2V0cyBhbmQgYXBwbHkgdGhlbS4KKyMKKworPWhlYWQxIEludm9jYXRpb24KKworICAgIGdpdCBhcmNoaW1wb3J0IFsgLWggXSBbIC12IF0gWyAtbyBdIFsgLWEgXSBbIC1mIF0gWyAtVCBdCisJWyAtRCBkZXB0aF0gWyAtdCB0ZW1wZGlyIF0gPGFyY2hpdmU+LzxicmFuY2g+IFsgPGFyY2hpdmU+LzxicmFuY2g+IF0KKworSW1wb3J0cyBhIHByb2plY3QgZnJvbSBvbmUgb3IgbW9yZSBBcmNoIHJlcG9zaXRvcmllcy4gSXQgd2lsbCBmb2xsb3cgYnJhbmNoZXMKK2FuZCByZXBvc2l0b3JpZXMgd2l0aGluIHRoZSBuYW1lc3BhY2VzIGRlZmluZWQgYnkgdGhlIDxhcmNoaXZlL2JyYW5jaD4KK3BhcmFtZXRlcnMgc3VwcGxpZWQuIElmIGl0IGNhbm5vdCBmaW5kIHRoZSByZW1vdGUgYnJhbmNoIGEgbWVyZ2UgY29tZXMgZnJvbQoraXQgd2lsbCBqdXN0IGltcG9ydCBpdCBhcyBhIHJlZ3VsYXIgY29tbWl0LiBJZiBpdCBjYW4gZmluZCBpdCwgaXQgd2lsbCBtYXJrIGl0CithcyBhIG1lcmdlIHdoZW5ldmVyIHBvc3NpYmxlLgorCitTZWUgbWFuICgxKSBnaXQtYXJjaGltcG9ydCBmb3IgbW9yZSBkZXRhaWxzLgorCis9aGVhZDEgVE9ETworCisgLSBjcmVhdGUgdGFnIG9iamVjdHMgaW5zdGVhZCBvZiByZWYgdGFncworIC0gYXVkaXQgc2hlbGwtZXNjYXBpbmcgb2YgZmlsZW5hbWVzCisgLSBoaWRlIG91ciBwcml2YXRlIHRhZ3Mgc29tZXdoZXJlIHNtYXJ0ZXIKKyAtIGZpbmQgYSB3YXkgdG8gbWFrZSAiY2F0ICpwYXRjaGVzIHwgcGF0Y2giIHNhZmUgZXZlbiB3aGVuIHBhdGNoZmlsZXMgYXJlIG1pc3NpbmcgbmV3bGluZXMKKyAtIHNvcnQgYW5kIGFwcGx5IHBhdGNoZXMgYnkgZ3JhcGhpbmcgYW5jZXN0cnkgcmVsYXRpb25zIGluc3RlYWQgb2YganVzdAorICAgcmVseWluZyBpbiBkYXRlcyBzdXBwbGllZCBpbiB0aGUgY2hhbmdlc2V0IGl0c2VsZi4KKyAgIHRsYSBhbmNlc3RyeS1ncmFwaCAtbSBjb3VsZCBiZSBoZWxwZnVsIGhlcmUuLi4KKworPWhlYWQxIERldmVsIHRyaWNrcworCitBZGQgcHJpbnQgaW4gZnJvbnQgb2YgdGhlIHNoZWxsIGNvbW1hbmRzIGludm9rZWQgdmlhIGJhY2t0aWNrcy4KKworPWhlYWQxIERldmVsIE5vdGVzCisKK1RoZXJlIGFyZSBzZXZlcmFsIHBsYWNlcyB3aGVyZSBBcmNoIGFuZCBnaXQgdGVybWlub2xvZ3kgYXJlIGludGVybWl4ZWQKK2FuZCBwb3RlbnRpYWxseSBjb25mdXNlZC4KKworVGhlIG5vdGlvbiBvZiBhICJicmFuY2giIGluIGdpdCBpcyBhcHByb3hpbWF0ZWx5IGVxdWl2YWxlbnQgdG8KK2EgImFyY2hpdmUvY2F0ZWdvcnktLWJyYW5jaC0tdmVyc2lvbiIgaW4gQXJjaC4gIEFsc28sIGl0IHNob3VsZCBiZSBub3RlZAordGhhdCB0aGUgIi0tYnJhbmNoIiBwb3J0aW9uIG9mICJhcmNoaXZlL2NhdGVnb3J5LS1icmFuY2gtLXZlcnNpb24iIGlzIHJlYWxseQorb3B0aW9uYWwgaW4gQXJjaCBhbHRob3VnaCBub3QgbWFueSBwZW9wbGUgKG5vciB0b29scyEpIHNlZW0gdG8ga25vdyB0aGlzLgorVGhpcyBtZWFucyB0aGF0ICJhcmNoaXZlL2NhdGVnb3J5LS12ZXJzaW9uIiBpcyBhbHNvIGEgdmFsaWQgImJyYW5jaCIKK2luIGdpdCB0ZXJtcy4KKworV2UgYWx3YXlzIHJlZmVyIHRvIEFyY2ggbmFtZXMgYnkgdGhlaXIgZnVsbHkgcXVhbGlmaWVkIHZhcmlhbnQgKHdoaWNoCittZWFucyB0aGUgImFyY2hpdmUiIG5hbWUgaXMgcHJlZml4ZWQuCisKK0ZvciBwZW9wbGUgdW5mYW1pbGlhciB3aXRoIEFyY2gsIGFuICJhcmNoaXZlIiBpcyB0aGUgdGVybSBmb3IgInJlcG9zaXRvcnkiLAorYW5kIGNhbiBjb250YWluIG11bHRpcGxlLCB1bnJlbGF0ZWQgYnJhbmNoZXMuCisKKz1jdXQKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHZXRvcHQ6OlN0ZDsKK3VzZSBGaWxlOjpUZW1wIHF3KHRlbXBkaXIpOwordXNlIEZpbGU6OlBhdGggcXcobWtwYXRoIHJtdHJlZSk7Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcoYmFzZW5hbWUgZGlybmFtZSk7Cit1c2UgRGF0YTo6RHVtcGVyIHF3LyBEdW1wZXIgLzsKK3VzZSBJUEM6Ok9wZW4yOworCiskU0lHeydQSVBFJ309IklHTk9SRSI7CiskRU5WeydUWid9PSJVVEMiOworCitteSAkZ2l0X2RpciA9ICRFTlZ7IkdJVF9ESVIifSB8fCAiLmdpdCI7CiskRU5WeyJHSVRfRElSIn0gPSAkZ2l0X2RpcjsKK215ICRwdGFnX2RpciA9ICIkZ2l0X2Rpci9hcmNoaW1wb3J0L3RhZ3MiOworCitvdXIoJG9wdF9oLCRvcHRfZiwkb3B0X3YsJG9wdF9ULCRvcHRfdCwkb3B0X0QsJG9wdF9hLCRvcHRfbyk7CisKK3N1YiB1c2FnZSgpIHsKKyAgICBwcmludCBTVERFUlIgPDxFTkQ7Cit1c2FnZTogZ2l0IGFyY2hpbXBvcnQgICAgICMgZmV0Y2gvdXBkYXRlIEdJVCBmcm9tIEFyY2gKKyAgICAgICBbIC1oIF0gWyAtdiBdIFsgLW8gXSBbIC1hIF0gWyAtZiBdIFsgLVQgXSBbIC1EIGRlcHRoIF0gWyAtdCB0ZW1wZGlyIF0KKyAgICAgICByZXBvc2l0b3J5L2FyY2gtYnJhbmNoIFsgcmVwb3NpdG9yeS9hcmNoLWJyYW5jaF0gLi4uCitFTkQKKyAgICBleGl0KDEpOworfQorCitnZXRvcHRzKCJmVGh2YXQ6RDoiKSBvciB1c2FnZSgpOwordXNhZ2UgaWYgJG9wdF9oOworCitAQVJHViA+PSAxIG9yIHVzYWdlKCk7CisjICRhcmNoX2JyYW5jaGVzOgorIyB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGtleXM6CisjICAgPTEgLSBBcmNoIHZlcnNpb24gLyBnaXQgJ2JyYW5jaCcgZGV0ZWN0ZWQgdmlhIGFicm93c2Ugb24gYSBsaW1pdAorIyAgID4xIC0gQXJjaCB2ZXJzaW9uIC8gZ2l0ICdicmFuY2gnIG9mIGFuIGF1eGlsaWFyeSBicmFuY2ggd2UndmUgbWVyZ2VkCitteSAlYXJjaF9icmFuY2hlcyA9IG1hcCB7IG15ICRicmFuY2ggPSAkXzsgJGJyYW5jaCA9fiBzLzpbXjpdKiQvLzsgJGJyYW5jaCA9PiAxIH0gQEFSR1Y7CisKKyMgJGJyYW5jaF9uYW1lX21hcDoKKyMgbWFwcyBhcmNoIGJyYW5jaGVzIHRvIGdpdCBicmFuY2ggbmFtZXMKK215ICVicmFuY2hfbmFtZV9tYXAgPSBtYXAgeyBtL14oLiopOihbXjpdKikkLzsgJDEgPT4gJDIgfSBncmVwIHsgbS86LyB9IEBBUkdWOworCiskRU5WeydUTVBESVInfSA9ICRvcHRfdCBpZiAkb3B0X3Q7ICMgJEVOVntUTVBESVJ9IHdpbGwgYWZmZWN0IHRlbXBkaXIoKSBjYWxsczoKK215ICR0bXAgPSB0ZW1wZGlyKCdnaXQtYXJjaGltcG9ydC1YWFhYWFgnLCBUTVBESVIgPT4gMSwgQ0xFQU5VUCA9PiAxKTsKKyRvcHRfdiAmJiBwcmludCAiKyBVc2luZyAkdG1wIGFzIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiI7CisKK3VubGVzcyAoLWQgJGdpdF9kaXIpIHsgIyBpbml0aWFsIGltcG9ydCBuZWVkcyBlbXB0eSBkaXJlY3RvcnkKKyAgICBvcGVuZGlyIERJUiwgJy4nIG9yIGRpZSAiVW5hYmxlIHRvIG9wZW4gY3VycmVudCBkaXJlY3Rvcnk6ICQhXG4iOworICAgIHdoaWxlIChteSAkZW50cnkgPSByZWFkZGlyIERJUikgeworICAgICAgICAkZW50cnkgPX4gL15cLlwuPyQvIG9yCisgICAgICAgICAgICBkaWUgIkluaXRpYWwgaW1wb3J0IG5lZWRzIGFuIGVtcHR5IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuXG4iCisgICAgfQorICAgIGNsb3NlZGlyIERJUgorfQorCitteSAkZGVmYXVsdF9hcmNoaXZlOwkJIyBkZWZhdWx0IEFyY2ggYXJjaGl2ZQorbXkgJXJlYWNoYWJsZSA9ICgpOyAgICAgICAgICAgICAjIEFyY2ggcmVwb3NpdG9yaWVzIHdlIGNhbiBhY2Nlc3MKK215ICV1bnJlYWNoYWJsZSA9ICgpOyAgICAgICAgICAgIyBBcmNoIHJlcG9zaXRvcmllcyB3ZSBjYW4ndCBhY2Nlc3MgOjwKK215IEBwc2V0cyAgPSAoKTsgICAgICAgICAgICAgICAgIyB0aGUgY29sbGVjdGlvbgorbXkgJXBzZXRzICA9ICgpOyAgICAgICAgICAgICAgICAjIHRoZSBjb2xsZWN0aW9uLCBieSBuYW1lCitteSAlc3RhdHMgID0gKAkJCSMgVHJhY2sgd2hpY2ggc3RyYXRlZ3kgd2UgdXNlZCB0byBpbXBvcnQ6CisJZ2V0X3RhZyA9PiAwLCByZXBsYXkgPT4gMCwgZ2V0X25ldyA9PiAwLCBnZXRfZGVsdGEgPT4gMCwKKyAgICAgICAgc2ltcGxlX2NoYW5nZXNldCA9PiAwLCBpbXBvcnRfb3JfdGFnID0+IDAKKyk7CisKK215ICVycHRhZ3MgPSAoKTsgICAgICAgICAgICAgICAgIyBteSByZXZlcnNlIHByaXZhdGUgdGFncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvIG1hcCBhIFNIQTEgdG8gYSBjb21taXRpZAorbXkgJFRMQSA9ICRFTlZ7J0FSQ0hfQ0xJRU5UJ30gfHwgJ3RsYSc7CisKK3N1YiBkb19hYnJvd3NlIHsKKyAgICBteSAkc3RhZ2UgPSBzaGlmdDsKKyAgICB3aGlsZSAobXkgKCRsaW1pdCwgJGxldmVsKSA9IGVhY2ggJWFyY2hfYnJhbmNoZXMpIHsKKyAgICAgICAgbmV4dCB1bmxlc3MgJGxldmVsID09ICRzdGFnZTsKKworCW9wZW4gQUJST1dTRSwgIiRUTEEgYWJyb3dzZSAtZmtEIC0tbWVyZ2VzICRsaW1pdCB8IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBkaWUgIlByb2JsZW1zIHdpdGggdGxhIGFicm93c2U6ICQhIjsKKworICAgICAgICBteSAlcHMgICAgICAgID0gKCk7ICAgICAgICAgIyB0aGUgY3VycmVudCBvbmUKKyAgICAgICAgbXkgJGxhc3RzZWVuICA9ICcnOworCisgICAgICAgIHdoaWxlICg8QUJST1dTRT4pIHsKKyAgICAgICAgICAgIGNob21wOworCisgICAgICAgICAgICAjIGZpcnN0IHJlY29yZCBwYWRkZWQgdyA4IHNwYWNlcworICAgICAgICAgICAgaWYgKHMvXlxzezh9XGIvLykgeworICAgICAgICAgICAgICAgIG15ICgkaWQsICR0eXBlKSA9IHNwbGl0KG0vXHMrLywgJF8sIDIpOworCisgICAgICAgICAgICAgICAgbXkgJWxhc3RfcHM7CisgICAgICAgICAgICAgICAgIyBzdG9yZSB0aGUgcmVjb3JkIHdlIGp1c3QgY2FwdHVyZWQKKyAgICAgICAgICAgICAgICBpZiAoJXBzICYmICFleGlzdHMgJHBzZXRzeyAkcHN7aWR9IH0pIHsKKyAgICAgICAgICAgICAgICAgICAgJWxhc3RfcHMgPSAlcHM7ICMgYnJlYWsgcmVmZXJlbmNlcworICAgICAgICAgICAgICAgICAgICBwdXNoIChAcHNldHMsIFwlbGFzdF9wcyk7CisgICAgICAgICAgICAgICAgICAgICRwc2V0c3sgJGxhc3RfcHN7aWR9IH0gPSBcJWxhc3RfcHM7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbXkgJGJyYW5jaCA9IGV4dHJhY3RfdmVyc2lvbm5hbWUoJGlkKTsKKyAgICAgICAgICAgICAgICAlcHMgPSAoIGlkID0+ICRpZCwgYnJhbmNoID0+ICRicmFuY2ggKTsKKyAgICAgICAgICAgICAgICBpZiAoJWxhc3RfcHMgJiYgKCRsYXN0X3Bze2JyYW5jaH0gZXEgJGJyYW5jaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgJHBze3BhcmVudF9pZH0gPSAkbGFzdF9wc3tpZH07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgJGFyY2hfYnJhbmNoZXN7JGJyYW5jaH0gPSAxOworICAgICAgICAgICAgICAgICRsYXN0c2VlbiA9ICdpZCc7CisKKyAgICAgICAgICAgICAgICAjIGRlYWwgd2l0aCB0eXBlcyAoc2hvdWxkIHdvcmsgd2l0aCBiYXogb3IgdGxhKToKKyAgICAgICAgICAgICAgICBpZiAoJHR5cGUgPX4gbS9cKC4qY2hhbmdlc2V0XCkvKSB7CisgICAgICAgICAgICAgICAgICAgICRwc3t0eXBlfSA9ICdzJzsKKyAgICAgICAgICAgICAgICB9IGVsc2lmICgkdHlwZSA9fiAvXCguKmltcG9ydFwpLykgeworICAgICAgICAgICAgICAgICAgICAkcHN7dHlwZX0gPSAnaSc7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHR5cGUgPX4gbS9cKHRhZy4qPyhcUytcQFxTKykuKj9cKS8pIHsKKyAgICAgICAgICAgICAgICAgICAgJHBze3R5cGV9ID0gJ3QnOworICAgICAgICAgICAgICAgICAgICAjIHJlYWQgd2hpY2ggcmV2aXNpb24gd2UndmUgdGFnZ2VkIHdoZW4gd2UgcGFyc2UgdGhlIGxvZworICAgICAgICAgICAgICAgICAgICAkcHN7dGFnfSAgPSAkMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB3YXJuICJVbmtub3duIHR5cGUgJHR5cGUiOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICRhcmNoX2JyYW5jaGVzeyRicmFuY2h9ID0gMTsKKyAgICAgICAgICAgICAgICAkbGFzdHNlZW4gPSAnaWQnOworICAgICAgICAgICAgfSBlbHNpZiAocy9eXHN7MTB9Ly8pIHsKKyAgICAgICAgICAgICAgICAjIDEwIGxlYWRpbmcgc3BhY2VzIG9yIG1vcmUKKyAgICAgICAgICAgICAgICAjIGluZGljYXRlIGNvbW1pdCBtZXRhZGF0YQorCisgICAgICAgICAgICAgICAgIyBkYXRlCisgICAgICAgICAgICAgICAgaWYgKCRsYXN0c2VlbiBlcSAnaWQnICYmIG0vXihcZHs0fS1cZFxkLVxkXGQgXGRcZDpcZFxkOlxkXGQpLyl7CisgICAgICAgICAgICAgICAgICAgICRwc3tkYXRlfSAgID0gJDE7CisgICAgICAgICAgICAgICAgICAgICRsYXN0c2VlbiA9ICdkYXRlJzsKKyAgICAgICAgICAgICAgICB9IGVsc2lmICgkXyBlcSAnbWVyZ2VzIGluOicpIHsKKyAgICAgICAgICAgICAgICAgICAgJHBze21lcmdlc30gPSBbXTsKKyAgICAgICAgICAgICAgICAgICAgJGxhc3RzZWVuID0gJ21lcmdlcyc7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGxhc3RzZWVuIGVxICdtZXJnZXMnICYmIHMvXlxzezJ9Ly8pIHsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGlkID0gJF87CisgICAgICAgICAgICAgICAgICAgIHB1c2ggKEB7JHBze21lcmdlc319LCAkaWQpOworCisgICAgICAgICAgICAgICAgICAgICMgYWdncmVzc2l2ZSBicmFuY2ggZmluZGluZzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCRvcHRfRCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGJyYW5jaCA9IGV4dHJhY3RfdmVyc2lvbm5hbWUoJGlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15ICRyZXBvID0gZXh0cmFjdF9yZXBvbmFtZSgkYnJhbmNoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyY2hpdmVfcmVhY2hhYmxlKCRyZXBvKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZGVmaW5lZCAkYXJjaF9icmFuY2hlc3skYnJhbmNofSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcmNoX2JyYW5jaGVzeyRicmFuY2h9ID0gJHN0YWdlICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHdhcm4gIm1vcmUgbWV0YWRhdGEgYWZ0ZXIgbWVyZ2VzIT86ICRfXG4iIHVubGVzcyAvXlxzKiQvOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICglcHMgJiYgIWV4aXN0cyAkcHNldHN7ICRwc3tpZH0gfSkgeworICAgICAgICAgICAgbXkgJXRlbXAgPSAlcHM7ICAgICAgICAgIyBicmVhayByZWZlcmVuY2VzCisgICAgICAgICAgICBpZiAoQHBzZXRzICYmICRwc2V0c1skI3BzZXRzXXticmFuY2h9IGVxICRwc3ticmFuY2h9KSB7CisgICAgICAgICAgICAgICAgJHRlbXB7cGFyZW50X2lkfSA9ICRwc2V0c1skI3BzZXRzXXtpZH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoIChAcHNldHMsIFwldGVtcCk7CisgICAgICAgICAgICAkcHNldHN7ICR0ZW1we2lkfSB9ID0gXCV0ZW1wOworICAgICAgICB9CisKKyAgICAgICAgY2xvc2UgQUJST1dTRSBvciBkaWUgIiRUTEEgYWJyb3dzZSBmYWlsZWQgb24gJGxpbWl0XG4iOworICAgIH0KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBlbmQgZm9yZWFjaCAkcm9vdAorCitkb19hYnJvd3NlKDEpOworbXkgJGRlcHRoID0gMjsKKyRvcHRfRCB8fD0gMDsKK3doaWxlICgkZGVwdGggPD0gJG9wdF9EKSB7CisgICAgZG9fYWJyb3dzZSgkZGVwdGgpOworICAgICRkZXB0aCsrOworfQorCisjIyBPcmRlciBwYXRjaGVzIGJ5IHRpbWUKKyMgRklYTUUgc2VlIGlmIHdlIGNhbiBmaW5kIGEgbW9yZSBvcHRpbWFsIHdheSB0byBkbyB0aGlzIGJ5IGdyYXBoaW5nCisjIHRoZSBhbmNlc3RyeSBkYXRhIGFuZCB3YWxraW5nIGl0LCB0aGF0IHdheSB3ZSB3b24ndCBoYXZlIHRvIHJlbHkgb24KKyMgY2xpZW50LXN1cHBsaWVkIGRhdGVzCitAcHNldHMgPSBzb3J0IHskYS0+e2RhdGV9LiRiLT57aWR9IGNtcCAkYi0+e2RhdGV9LiRiLT57aWR9fSBAcHNldHM7CisKKyNwcmludCBEdW1wZXIgXEBwc2V0czsKKworIyMKKyMjIFRPRE8gY2xlYW51cCBpcnJlbGV2YW50IHBhdGNoZXMKKyMjICAgICAgYW5kIHB1dCBhbiBpbml0aWFsIGltcG9ydAorIyMgICAgICBvciBhIGZ1bGwgdGFnCitteSAkaW1wb3J0ID0gMDsKK3VubGVzcyAoLWQgJGdpdF9kaXIpIHsgIyBpbml0aWFsIGltcG9ydAorICAgIGlmICgkcHNldHNbMF17dHlwZX0gZXEgJ2knIHx8ICRwc2V0c1swXXt0eXBlfSBlcSAndCcpIHsKKyAgICAgICAgcHJpbnQgIlN0YXJ0aW5nIGltcG9ydCBmcm9tICRwc2V0c1swXXtpZH1cbiI7CisJYGdpdC1pbml0YDsKKwlkaWUgJCEgaWYgJD87CisJJGltcG9ydCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGllICJOZWVkIHRvIHN0YXJ0IGZyb20gYW4gaW1wb3J0IG9yIGEgdGFnIC0tIGNhbm5vdCB1c2UgJHBzZXRzWzBde2lkfSI7CisgICAgfQorfSBlbHNlIHsgICAgIyBwcm9ncmVzc2luZyBhbiBpbXBvcnQKKyAgICAjIGxvYWQgdGhlIHJwdGFncworICAgIG9wZW5kaXIoRElSLCAkcHRhZ19kaXIpCisJfHwgZGllICJjYW4ndCBvcGVuZGlyOiAkISI7CisgICAgd2hpbGUgKG15ICRmaWxlID0gcmVhZGRpcihESVIpKSB7CisgICAgICAgICMgc2tpcCBub24taW50ZXJlc3RpbmctZmlsZXMKKyAgICAgICAgbmV4dCB1bmxlc3MgLWYgIiRwdGFnX2Rpci8kZmlsZSI7CisKKyAgICAgICAgIyBjb252ZXJ0IGZpcnN0ICctLScgdG8gJy8nIGZyb20gb2xkIGdpdC1hcmNoaW1wb3J0IHRvIHVzZQorICAgICAgICAjIGFzIGFuIGFyY2hpdmVuYW1lL2MtLWItLXYgcHJpdmF0ZSB0YWcKKyAgICAgICAgaWYgKCRmaWxlICF+IG0hLCEpIHsKKyAgICAgICAgICAgIG15ICRvbGRmaWxlID0gJGZpbGU7CisgICAgICAgICAgICAkZmlsZSA9fiBzIS0tISwhOworICAgICAgICAgICAgcHJpbnQgU1RERVJSICJjb252ZXJ0aW5nIG9sZCB0YWcgJG9sZGZpbGUgdG8gJGZpbGVcbiI7CisgICAgICAgICAgICByZW5hbWUoIiRwdGFnX2Rpci8kb2xkZmlsZSIsICIkcHRhZ19kaXIvJGZpbGUiKSBvciBkaWUgJCE7CisgICAgICAgIH0KKwlteSAkc2hhID0gcHRhZygkZmlsZSk7CisJY2hvbXAgJHNoYTsKKwkkcnB0YWdzeyRzaGF9ID0gJGZpbGU7CisgICAgfQorICAgIGNsb3NlZGlyIERJUjsKK30KKworIyBwcm9jZXNzIHBhdGNoc2V0cworIyBleHRyYWN0IHRoZSBBcmNoIHJlcG9zaXRvcnkgbmFtZSAoQXJjaCAiYXJjaGl2ZSIgaW4gQXJjaC1zcGVhaykKK3N1YiBleHRyYWN0X3JlcG9uYW1lIHsKKyAgICBteSAkZnFfY3ZiciA9IHNoaWZ0OyAjIGFyY2hpdmVuYW1lL1tbW1tjYXRlZ29yeV1icmFuY2hddmVyc2lvbl1yZXZpc2lvbl0KKyAgICByZXR1cm4gKHNwbGl0KC9cLy8sICRmcV9jdmJyKSlbMF07Cit9CisKK3N1YiBleHRyYWN0X3ZlcnNpb25uYW1lIHsKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworICAgICRuYW1lID1+IHMvLS0oPzpwYXRjaHx2ZXJzaW9uKD86Zml4KT98YmFzZSktXGQrJC8vOworICAgIHJldHVybiAkbmFtZTsKK30KKworIyBjb252ZXJ0IGEgZnVsbHktcXVhbGlmaWVkIHJldmlzaW9uIG9yIHZlcnNpb24gdG8gYSB1bmlxdWUgZGlybmFtZToKKyMgICBub3JtYWxwZXJzb25AeWhidC5uZXQtMDUvbXBkLS11Y2xpbnV4LS0xLS1wYXRjaC0yCisjIGJlY29tZXM6IG5vcm1hbHBlcnNvbkB5aGJ0Lm5ldC0wNSxtcGQtLXVjbGludXgtLTEKKyMKKyMgdGhlIGdpdCBub3Rpb24gb2YgYSBicmFuY2ggaXMgY2xvc2VyIHRvCisjIGFyY2hpdmUvY2F0ZWdvcnktLWJyYW5jaC0tdmVyc2lvbiB0aGFuIGFyY2hpdmUvY2F0ZWdvcnktLWJyYW5jaCwgc28gd2UKKyMgdXNlIHRoaXMgdG8gY29udmVydCB0byBnaXQgYnJhbmNoIG5hbWVzLgorIyBBbHNvLCBrZWVwIGFyY2hpdmUgbmFtZXMgYnV0IHJlcGxhY2UgJy8nIHdpdGggJywnIHNpbmNlIGl0IHdvbid0IHJlcXVpcmUKKyMgc3ViZGlyZWN0b3JpZXMsIGFuZCBpcyBzYWZlciB0aGFuIHN3YXBwaW5nICctLScgd2hpY2ggY291bGQgY29uZnVzZQorIyByZXZlcnNlLW1hcHBpbmcgd2hlbiBkZWFsaW5nIHdpdGggYmFzdGFyZCBicmFuY2hlcyB0aGF0CisjIGFyZSBqdXN0IGFyY2hpdmUvY2F0ZWdvcnktLXZlcnNpb24gIChubyAtLWJyYW5jaCkKK3N1YiB0cmVlX2Rpcm5hbWUgeworICAgIG15ICRyZXZpc2lvbiA9IHNoaWZ0OworICAgIG15ICRuYW1lID0gZXh0cmFjdF92ZXJzaW9ubmFtZSgkcmV2aXNpb24pOworICAgICRuYW1lID1+IHMjLyMsIzsKKyAgICByZXR1cm4gJG5hbWU7Cit9CisKKyMgb2xkIHZlcnNpb25zIG9mIGdpdC1hcmNoaW1wb3J0IGp1c3QgdXNlIHRoZSA8Y2F0ZWdvcnktLWJyYW5jaD4gcGFydDoKK3N1YiBvbGRfc3R5bGVfYnJhbmNobmFtZSB7CisgICAgbXkgJGlkID0gc2hpZnQ7CisgICAgbXkgJHJldCA9IHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ3BhcnNlLXBhY2thZ2UtbmFtZScsJy1wJywkaWQpOworICAgIGNob21wICRyZXQ7CisgICAgcmV0dXJuICRyZXQ7Cit9CisKKypnaXRfZGVmYXVsdF9icmFuY2huYW1lID0gJG9wdF9vID8gKm9sZF9zdHlsZV9icmFuY2huYW1lIDogKnRyZWVfZGlybmFtZTsKKworIyByZXRyaWV2ZSBkZWZhdWx0IGFyY2hpdmUsIHNpbmNlICRicmFuY2hfbmFtZV9tYXAga2V5cyBtaWdodCBub3QgaW5jbHVkZSBpdAorc3ViIGdldF9kZWZhdWx0X2FyY2hpdmUgeworICAgIGlmICghZGVmaW5lZCAkZGVmYXVsdF9hcmNoaXZlKSB7CisgICAgICAgICRkZWZhdWx0X2FyY2hpdmUgPSBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdteS1kZWZhdWx0LWFyY2hpdmUnKTsKKyAgICAgICAgY2hvbXAgJGRlZmF1bHRfYXJjaGl2ZTsKKyAgICB9CisgICAgcmV0dXJuICRkZWZhdWx0X2FyY2hpdmU7Cit9CisKK3N1YiBnaXRfYnJhbmNobmFtZSB7CisgICAgbXkgJHJldmlzaW9uID0gc2hpZnQ7CisgICAgbXkgJG5hbWUgPSBleHRyYWN0X3ZlcnNpb25uYW1lKCRyZXZpc2lvbik7CisKKyAgICBpZiAoZXhpc3RzICRicmFuY2hfbmFtZV9tYXB7JG5hbWV9KSB7CisJcmV0dXJuICRicmFuY2hfbmFtZV9tYXB7JG5hbWV9OworCisgICAgfSBlbHNpZiAoJG5hbWUgPX4gbSNeKFteL10qKS8oLiopJCMKKwkgICAgICYmICQxIGVxIGdldF9kZWZhdWx0X2FyY2hpdmUoKQorCSAgICAgJiYgZXhpc3RzICRicmFuY2hfbmFtZV9tYXB7JDJ9KSB7CisJIyB0aGUgbmFtZXMgZ2l2ZW4gaW4gdGhlIGNvbW1hbmQtbGluZSBsYWNrZWQgdGhlIGFyY2hpdmUuCisJcmV0dXJuICRicmFuY2hfbmFtZV9tYXB7JDJ9OworCisgICAgfSBlbHNlIHsKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfYnJhbmNobmFtZSgkcmV2aXNpb24pOworICAgIH0KK30KKworc3ViIHByb2Nlc3NfcGF0Y2hzZXRfYWNjdXJhdGUgeworICAgIG15ICRwcyA9IHNoaWZ0OworCisgICAgIyBzd2l0Y2ggdG8gdGhhdCBicmFuY2ggaWYgd2UncmUgbm90IGFscmVhZHkgaW4gdGhhdCBicmFuY2g6CisgICAgaWYgKC1lICIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRwcy0+e2JyYW5jaH0iKSB7CisgICAgICAgc3lzdGVtKCdnaXQtY2hlY2tvdXQnLCctZicsJHBzLT57YnJhbmNofSkgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworCisgICAgICAgIyByZW1vdmUgYW55IG9sZCBzdHVmZiB0aGF0IGdvdCBsZWZ0b3ZlcjoKKyAgICAgICBteSAkcm0gPSBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0LWxzLWZpbGVzJywnLS1vdGhlcnMnLCcteicpOworICAgICAgIHJtdHJlZShzcGxpdCgvXDAvLCRybSkpIGlmICRybTsKKyAgICB9CisKKyAgICAjIEFwcGx5IHRoZSBpbXBvcnQvY2hhbmdlc2V0L21lcmdlIGludG8gdGhlIHdvcmtpbmcgdHJlZQorICAgIG15ICRkaXIgPSBzeW5jX3RvX3BzKCRwcyk7CisgICAgIyByZWFkIHRoZSBuZXcgbG9nIGVudHJ5OgorICAgIG15IEBjb21taXRsb2cgPSBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdjYXQtbG9nJywnLWQnLCRkaXIsJHBzLT57aWR9KTsKKyAgICBkaWUgIkVycm9yIGluIGNhdC1sb2c6ICQhIiBpZiAkPzsKKyAgICBjaG9tcCBAY29tbWl0bG9nOworCisgICAgIyBncmFiIHZhcmlhYmxlcyB3ZSB3YW50IGZyb20gdGhlIGxvZywgbmV3IGZpZWxkcyBnZXQgYWRkZWQgdG8gJHBzOgorICAgICMgKGF1dGhvciwgZGF0ZSwgZW1haWwsIHN1bW1hcnksIG1lc3NhZ2UgYm9keSAuLi4pCisgICAgcGFyc2Vsb2coJHBzLCBcQGNvbW1pdGxvZyk7CisKKyAgICBpZiAoJHBzLT57aWR9ID1+IC8tLWJhc2UtMCQvICYmICRwcy0+e2lkfSBuZSAkcHNldHNbMF17aWR9KSB7CisgICAgICAgICMgdGhpcyBzaG91bGQgd29yayB3aGVuIGltcG9ydGluZyBjb250aW51YXRpb25zCisgICAgICAgIGlmICgkcHMtPnt0YWd9ICYmIChteSAkYnJhbmNocG9pbnQgPSBldmFsIHsgcHRhZygkcHMtPnt0YWd9KSB9KSkgeworCisgICAgICAgICAgICAjIGZpbmQgd2hlcmUgd2UgYXJlIHN1cHBvc2VkIHRvIGJyYW5jaCBmcm9tCisJICAgIGlmICghIC1lICIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRwcy0+e2JyYW5jaH0iKSB7CisJCXN5c3RlbSgnZ2l0LWJyYW5jaCcsJHBzLT57YnJhbmNofSwkYnJhbmNocG9pbnQpID09IDAgb3IgZGllICIkISAkP1xuIjsKKworCQkjIFdlIHRydXN0IEFyY2ggd2l0aCB0aGUgZmFjdCB0aGF0IHRoaXMgaXMganVzdCBhIHRhZywKKwkJIyBhbmQgaXQgZG9lcyBub3QgYWZmZWN0IHRoZSBzdGF0ZSBvZiB0aGUgdHJlZSwgc28KKwkJIyB3ZSBqdXN0IHRhZyBhbmQgbW92ZSBvbi4gIElmIHRoZSB1c2VyIHJlYWxseSB3YW50cyB1cworCQkjIHRvIGNvbnNvbGlkYXRlIG1vcmUgYnJhbmNoZXMgaW50byBvbmUsIGRvbid0IHRhZyBiZWNhdXNlCisJCSMgdGhlIHRhZyBuYW1lIHdvdWxkIGJlIGFscmVhZHkgdGFrZW4uCisJCXRhZygkcHMtPntpZH0sICRicmFuY2hwb2ludCk7CisJCXB0YWcoJHBzLT57aWR9LCAkYnJhbmNocG9pbnQpOworCQlwcmludCAiICogVGFnZ2VkICRwcy0+e2lkfSBhdCAkYnJhbmNocG9pbnRcbiI7CisJICAgIH0KKwkgICAgc3lzdGVtKCdnaXQtY2hlY2tvdXQnLCctZicsJHBzLT57YnJhbmNofSkgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworCisgICAgICAgICAgICAjIHJlbW92ZSBhbnkgb2xkIHN0dWZmIHRoYXQgZ290IGxlZnRvdmVyOgorICAgICAgICAgICAgbXkgJHJtID0gc2FmZV9waXBlX2NhcHR1cmUoJ2dpdC1scy1maWxlcycsJy0tb3RoZXJzJywnLXonKTsKKyAgICAgICAgICAgIHJtdHJlZShzcGxpdCgvXDAvLCRybSkpIGlmICRybTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2FybiAiVGFnZ2luZyBmcm9tIHVua25vd24gaWQgdW5zdXBwb3J0ZWRcbiIgaWYgJHBzLT57dGFnfTsKKyAgICAgICAgfQorICAgICAgICAjIGFsbG93IG11bHRpcGxlIGJhc2VzL2ltcG9ydHMgaGVyZSBzaW5jZSBBcmNoIHN1cHBvcnRzIGNoZXJyeS1waWNrcworICAgICAgICAjIGZyb20gdW5yZWxhdGVkIHRyZWVzCisgICAgfQorCisgICAgIyB1cGRhdGUgdGhlIGluZGV4IHdpdGggYWxsIHRoZSBjaGFuZ2VzIHdlIGdvdAorICAgIHN5c3RlbSgnZ2l0LWRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLXogfCAnLgorICAgICAgICAgICAgJ2dpdC11cGRhdGUtaW5kZXggLS1yZW1vdmUgLXogLS1zdGRpbicpID09IDAgb3IgZGllICIkISAkP1xuIjsKKyAgICBzeXN0ZW0oJ2dpdC1scy1maWxlcyAtLW90aGVycyAteiB8ICcuCisgICAgICAgICAgICAnZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCAteiAtLXN0ZGluJykgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworICAgIHJldHVybiAxOworfQorCisjIHRoZSBuYXRpdmUgY2hhbmdlc2V0IHByb2Nlc3Npbmcgc3RyYXRlZ3kuICBUaGlzIGlzIHZlcnkgZmFzdCwgYnV0CisjIGRvZXMgbm90IGhhbmRsZSBwZXJtaXNzaW9ucyBvciBhbnkgcmVuYW1lcyBpbnZvbHZpbmcgZGlyZWN0b3JpZXMKK3N1YiBwcm9jZXNzX3BhdGNoc2V0X2Zhc3QgeworICAgIG15ICRwcyA9IHNoaWZ0OworICAgICMKKyAgICAjIGNyZWF0ZSB0aGUgYnJhbmNoIGlmIG5lZWRlZAorICAgICMKKyAgICBpZiAoJHBzLT57dHlwZX0gZXEgJ2knICYmICEkaW1wb3J0KSB7CisgICAgICAgIGRpZSAiU2hvdWxkIG5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgJ0luaXRpYWwgaW1wb3J0JyBwZXIgR0lUIGltcG9ydDogJHBzLT57aWR9IjsKKyAgICB9CisKKyAgICB1bmxlc3MgKCRpbXBvcnQpIHsgIyBza2lwIGZvciBpbXBvcnQKKyAgICAgICAgaWYgKCAtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kcHMtPnticmFuY2h9IikgeworICAgICAgICAgICAgIyB3ZSBrbm93IGFib3V0IHRoaXMgYnJhbmNoCisgICAgICAgICAgICBzeXN0ZW0oJ2dpdC1jaGVja291dCcsJHBzLT57YnJhbmNofSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAjIG5ldyBicmFuY2ghIHdlIG5lZWQgdG8gdmVyaWZ5IGEgZmV3IHRoaW5ncworICAgICAgICAgICAgZGllICJCcmFuY2ggb24gYSBub24tdGFnISIgdW5sZXNzICRwcy0+e3R5cGV9IGVxICd0JzsKKyAgICAgICAgICAgIG15ICRicmFuY2hwb2ludCA9IHB0YWcoJHBzLT57dGFnfSk7CisgICAgICAgICAgICBkaWUgIlRhZ2dpbmcgZnJvbSB1bmtub3duIGlkIHVuc3VwcG9ydGVkOiAkcHMtPnt0YWd9IgorICAgICAgICAgICAgICAgIHVubGVzcyAkYnJhbmNocG9pbnQ7CisKKyAgICAgICAgICAgICMgZmluZCB3aGVyZSB3ZSBhcmUgc3VwcG9zZWQgdG8gYnJhbmNoIGZyb20KKwkgICAgaWYgKCEgLWUgIiRnaXRfZGlyL3JlZnMvaGVhZHMvJHBzLT57YnJhbmNofSIpIHsKKwkJc3lzdGVtKCdnaXQtYnJhbmNoJywkcHMtPnticmFuY2h9LCRicmFuY2hwb2ludCkgPT0gMCBvciBkaWUgIiQhICQ/XG4iOworCisJCSMgV2UgdHJ1c3QgQXJjaCB3aXRoIHRoZSBmYWN0IHRoYXQgdGhpcyBpcyBqdXN0IGEgdGFnLAorCQkjIGFuZCBpdCBkb2VzIG5vdCBhZmZlY3QgdGhlIHN0YXRlIG9mIHRoZSB0cmVlLCBzbworCQkjIHdlIGp1c3QgdGFnIGFuZCBtb3ZlIG9uLiAgSWYgdGhlIHVzZXIgcmVhbGx5IHdhbnRzIHVzCisJCSMgdG8gY29uc29saWRhdGUgbW9yZSBicmFuY2hlcyBpbnRvIG9uZSwgZG9uJ3QgdGFnIGJlY2F1c2UKKwkJIyB0aGUgdGFnIG5hbWUgd291bGQgYmUgYWxyZWFkeSB0YWtlbi4KKwkJdGFnKCRwcy0+e2lkfSwgJGJyYW5jaHBvaW50KTsKKwkJcHRhZygkcHMtPntpZH0sICRicmFuY2hwb2ludCk7CisJCXByaW50ICIgKiBUYWdnZWQgJHBzLT57aWR9IGF0ICRicmFuY2hwb2ludFxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0LWNoZWNrb3V0JywkcHMtPnticmFuY2h9KSA9PSAwIG9yIGRpZSAiJCEgJD9cbiI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBkaWUgJCEgaWYgJD87CisgICAgfQorCisgICAgIworICAgICMgQXBwbHkgdGhlIGltcG9ydC9jaGFuZ2VzZXQvbWVyZ2UgaW50byB0aGUgd29ya2luZyB0cmVlCisgICAgIworICAgIGlmICgkcHMtPnt0eXBlfSBlcSAnaScgfHwgJHBzLT57dHlwZX0gZXEgJ3QnKSB7CisgICAgICAgIGFwcGx5X2ltcG9ydCgkcHMpIG9yIGRpZSAkITsKKyAgICAgICAgJHN0YXRze2ltcG9ydF9vcl90YWd9Kys7CisgICAgICAgICRpbXBvcnQ9MDsKKyAgICB9IGVsc2lmICgkcHMtPnt0eXBlfSBlcSAncycpIHsKKyAgICAgICAgYXBwbHlfY3NldCgkcHMpOworICAgICAgICAkc3RhdHN7c2ltcGxlX2NoYW5nZXNldH0rKzsKKyAgICB9CisKKyAgICAjCisgICAgIyBwcmVwYXJlIHVwZGF0ZSBnaXQncyBpbmRleCwgYmFzZWQgb24gd2hhdCBhcmNoIGtub3dzCisgICAgIyBhYm91dCB0aGUgcHNldCwgcmVzb2x2ZSBwYXJlbnRzLCBldGMKKyAgICAjCisKKyAgICBteSBAY29tbWl0bG9nID0gc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnY2F0LWFyY2hpdmUtbG9nJywkcHMtPntpZH0pOworICAgIGRpZSAiRXJyb3IgaW4gY2F0LWFyY2hpdmUtbG9nOiAkISIgaWYgJD87CisKKyAgICBwYXJzZWxvZygkcHMsXEBjb21taXRsb2cpOworCisgICAgIyBpbXBvcnRzIGRvbid0IGdpdmUgdXMgZ29vZCBpbmZvCisgICAgIyBvbiBhZGRlZCBmaWxlcy4gU2hhbWUgb24gdGhlbQorICAgIGlmICgkcHMtPnt0eXBlfSBlcSAnaScgfHwgJHBzLT57dHlwZX0gZXEgJ3QnKSB7CisgICAgICAgIHN5c3RlbSgnZ2l0LWxzLWZpbGVzIC0tZGVsZXRlZCAteiB8ICcuCisgICAgICAgICAgICAgICAgJ2dpdC11cGRhdGUtaW5kZXggLS1yZW1vdmUgLXogLS1zdGRpbicpID09IDAgb3IgZGllICIkISAkP1xuIjsKKyAgICAgICAgc3lzdGVtKCdnaXQtbHMtZmlsZXMgLS1vdGhlcnMgLXogfCAnLgorICAgICAgICAgICAgICAgICdnaXQtdXBkYXRlLWluZGV4IC0tYWRkIC16IC0tc3RkaW4nKSA9PSAwIG9yIGRpZSAiJCEgJD9cbiI7CisgICAgfQorCisgICAgIyBUT0RPOiBoYW5kbGUgcmVtb3ZlZF9kaXJlY3RvcmllcyBhbmQgcmVuYW1lZF9kaXJlY3RvcmllczoKKworICAgIGlmIChteSAkZGVsID0gJHBzLT57cmVtb3ZlZF9maWxlc30pIHsKKyAgICAgICAgdW5saW5rIEAkZGVsOworICAgICAgICB3aGlsZSAoQCRkZWwpIHsKKyAgICAgICAgICAgIG15IEBzbGljZSA9IHNwbGljZShAJGRlbCwgMCwgMTAwKTsKKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0LXVwZGF0ZS1pbmRleCcsJy0tcmVtb3ZlJywnLS0nLEBzbGljZSkgPT0gMCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiRXJyb3IgaW4gZ2l0LXVwZGF0ZS1pbmRleCAtLXJlbW92ZTogJCEgJD9cbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobXkgJHJlbiA9ICRwcy0+e3JlbmFtZWRfZmlsZXN9KSB7ICAgICAgICAgICAgICAgICMgcmVuYW1lZAorICAgICAgICBpZiAoQCRyZW4gJSAyKSB7CisgICAgICAgICAgICBkaWUgIk9kZCBudW1iZXIgb2YgZW50cmllcyBpbiByZW5hbWUhPyI7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoQCRyZW4pIHsKKyAgICAgICAgICAgIG15ICRmcm9tID0gc2hpZnQgQCRyZW47CisgICAgICAgICAgICBteSAkdG8gICA9IHNoaWZ0IEAkcmVuOworCisgICAgICAgICAgICB1bmxlc3MgKC1kIGRpcm5hbWUoJHRvKSkgeworICAgICAgICAgICAgICAgIG1rcGF0aChkaXJuYW1lKCR0bykpOyAjIHdpbGwgZGllIG9uIGVycgorICAgICAgICAgICAgfQorICAgICAgICAgICAgIyBwcmludCAibW92aW5nICRmcm9tICR0byI7CisgICAgICAgICAgICByZW5hbWUoJGZyb20sICR0bykgb3IgZGllICJFcnJvciByZW5hbWluZyAnJGZyb20nICckdG8nOiAkIVxuIjsKKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0LXVwZGF0ZS1pbmRleCcsJy0tcmVtb3ZlJywnLS0nLCRmcm9tKSA9PSAwIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllICJFcnJvciBpbiBnaXQtdXBkYXRlLWluZGV4IC0tcmVtb3ZlOiAkISAkP1xuIjsKKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0LXVwZGF0ZS1pbmRleCcsJy0tYWRkJywnLS0nLCR0bykgPT0gMCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSAiRXJyb3IgaW4gZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZDogJCEgJD9cbiI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobXkgJGFkZCA9ICRwcy0+e25ld19maWxlc30pIHsKKyAgICAgICAgd2hpbGUgKEAkYWRkKSB7CisgICAgICAgICAgICBteSBAc2xpY2UgPSBzcGxpY2UoQCRhZGQsIDAsIDEwMCk7CisgICAgICAgICAgICBzeXN0ZW0oJ2dpdC11cGRhdGUtaW5kZXgnLCctLWFkZCcsJy0tJyxAc2xpY2UpID09IDAgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUgIkVycm9yIGluIGdpdC11cGRhdGUtaW5kZXggLS1hZGQ6ICQhICQ/XG4iOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG15ICRtb2QgPSAkcHMtPnttb2RpZmllZF9maWxlc30pIHsKKyAgICAgICAgd2hpbGUgKEAkbW9kKSB7CisgICAgICAgICAgICBteSBAc2xpY2UgPSBzcGxpY2UoQCRtb2QsIDAsIDEwMCk7CisgICAgICAgICAgICBzeXN0ZW0oJ2dpdC11cGRhdGUtaW5kZXgnLCctLScsQHNsaWNlKSA9PSAwIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllICJFcnJvciBpbiBnaXQtdXBkYXRlLWluZGV4OiAkISAkP1xuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsgIyB3ZSBzdWNjZXNzZnVsbHkgYXBwbGllZCB0aGUgY2hhbmdlc2V0Cit9CisKK2lmICgkb3B0X2YpIHsKKyAgICBwcmludCAiV2lsbCBpbXBvcnQgcGF0Y2hzZXRzIHVzaW5nIHRoZSBmYXN0IHN0cmF0ZWd5XG4iLAorICAgICAgICAgICAgIlJlbmFtZWQgZGlyZWN0b3JpZXMgYW5kIHBlcm1pc3Npb24gY2hhbmdlcyB3aWxsIGJlIG1pc3NlZFxuIjsKKyAgICAqcHJvY2Vzc19wYXRjaHNldCA9ICpwcm9jZXNzX3BhdGNoc2V0X2Zhc3Q7Cit9IGVsc2UgeworICAgIHByaW50ICJVc2luZyB0aGUgZGVmYXVsdCAoYWNjdXJhdGUpIGltcG9ydCBzdHJhdGVneS5cbiIsCisgICAgICAgICAgICAiVGhpbmdzIG1heSBiZSBhIGJpdCBzbG93XG4iOworICAgICpwcm9jZXNzX3BhdGNoc2V0ID0gKnByb2Nlc3NfcGF0Y2hzZXRfYWNjdXJhdGU7Cit9CisKK2ZvcmVhY2ggbXkgJHBzIChAcHNldHMpIHsKKyAgICAjIHByb2Nlc3MgcGF0Y2hzZXRzCisgICAgJHBzLT57YnJhbmNofSA9IGdpdF9icmFuY2huYW1lKCRwcy0+e2lkfSk7CisKKyAgICAjCisgICAgIyBlbnN1cmUgd2UgaGF2ZSBhIGNsZWFuIHN0YXRlCisgICAgIworICAgIGlmIChteSAkZGlydHkgPSBgZ2l0LWRpZmYtZmlsZXNgKSB7CisgICAgICAgIGRpZSAiVW5jbGVhbiB0cmVlIHdoZW4gYWJvdXQgdG8gcHJvY2VzcyAkcHMtPntpZH0gIiAuCisgICAgICAgICAgICAiIC0gZGlkIHdlIGZhaWwgdG8gY29tbWl0IGNsZWFubHkgYmVmb3JlP1xuJGRpcnR5IjsKKyAgICB9CisgICAgZGllICQhIGlmICQ/OworCisgICAgIworICAgICMgc2tpcCBjb21taXRzIGFscmVhZHkgaW4gcmVwbworICAgICMKKyAgICBpZiAocHRhZygkcHMtPntpZH0pKSB7CisgICAgICAkb3B0X3YgJiYgcHJpbnQgIiAqIFNraXBwaW5nIGFscmVhZHkgaW1wb3J0ZWQ6ICRwcy0+e2lkfVxuIjsKKyAgICAgIG5leHQ7CisgICAgfQorCisgICAgcHJpbnQgIiAqIFN0YXJ0aW5nIHRvIHdvcmsgb24gJHBzLT57aWR9XG4iOworCisgICAgcHJvY2Vzc19wYXRjaHNldCgkcHMpIG9yIG5leHQ7CisKKyAgICAjIHdhcm4gImVycm9ycyB3aGVuIHJ1bm5pbmcgZ2l0LXVwZGF0ZS1pbmRleCEgJCEiOworICAgIG15ICR0cmVlID0gYGdpdC13cml0ZS10cmVlYDsKKyAgICBkaWUgImNhbm5vdCB3cml0ZSB0cmVlICQhIiBpZiAkPzsKKyAgICBjaG9tcCAkdHJlZTsKKworICAgICMKKyAgICAjIFdobydzIHlvdXIgZGFkZHk/CisgICAgIworICAgIG15IEBwYXI7CisgICAgaWYgKCAtZSAiJGdpdF9kaXIvcmVmcy9oZWFkcy8kcHMtPnticmFuY2h9IikgeworICAgICAgICBpZiAob3BlbiBIRUFELCAiPCIsIiRnaXRfZGlyL3JlZnMvaGVhZHMvJHBzLT57YnJhbmNofSIpIHsKKyAgICAgICAgICAgIG15ICRwID0gPEhFQUQ+OworICAgICAgICAgICAgY2xvc2UgSEVBRDsKKyAgICAgICAgICAgIGNob21wICRwOworICAgICAgICAgICAgcHVzaCBAcGFyLCAnLXAnLCAkcDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgkcHMtPnt0eXBlfSBlcSAncycpIHsKKyAgICAgICAgICAgICAgICB3YXJuICJDb3VsZCBub3QgZmluZCB0aGUgcmlnaHQgaGVhZCBmb3IgdGhlIGJyYW5jaCAkcHMtPnticmFuY2h9IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgkcHMtPnttZXJnZXN9KSB7CisgICAgICAgIHB1c2ggQHBhciwgZmluZF9wYXJlbnRzKCRwcyk7CisgICAgfQorCisgICAgIworICAgICMgQ29tbWl0LCB0YWcgYW5kIGNsZWFuIHN0YXRlCisgICAgIworICAgICRFTlZ7VFp9ICAgICAgICAgICAgICAgICAgPSAnR01UJzsKKyAgICAkRU5We0dJVF9BVVRIT1JfTkFNRX0gICAgID0gJHBzLT57YXV0aG9yfTsKKyAgICAkRU5We0dJVF9BVVRIT1JfRU1BSUx9ICAgID0gJHBzLT57ZW1haWx9OworICAgICRFTlZ7R0lUX0FVVEhPUl9EQVRFfSAgICAgPSAkcHMtPntkYXRlfTsKKyAgICAkRU5We0dJVF9DT01NSVRURVJfTkFNRX0gID0gJHBzLT57YXV0aG9yfTsKKyAgICAkRU5We0dJVF9DT01NSVRURVJfRU1BSUx9ID0gJHBzLT57ZW1haWx9OworICAgICRFTlZ7R0lUX0NPTU1JVFRFUl9EQVRFfSAgPSAkcHMtPntkYXRlfTsKKworICAgIG15ICRwaWQgPSBvcGVuMigqUkVBREVSLCAqV1JJVEVSLCdnaXQtY29tbWl0LXRyZWUnLCR0cmVlLEBwYXIpCisgICAgICAgIG9yIGRpZSAkITsKKyAgICBwcmludCBXUklURVIgJHBzLT57c3VtbWFyeX0sIlxuXG4iOworCisgICAgIyBvbmx5IHByaW50IG1lc3NhZ2UgaWYgaXQncyBub3QgZW1wdHksIHRvIGF2b2lkIGEgc3B1cmlvdXMgYmxhbmsgbGluZTsKKyAgICAjIGFsc28gYXBwZW5kIGFuIGV4dHJhIG5ld2xpbmUsIHNvIHRoZXJlJ3MgYSBibGFuayBsaW5lIGJlZm9yZSB0aGUKKyAgICAjIGZvbGxvd2luZyAiZ2l0LWFyY2hpbXBvcnQtaWQ6IiBsaW5lLgorICAgIHByaW50IFdSSVRFUiAkcHMtPnttZXNzYWdlfSwiXG5cbiIgaWYgKCRwcy0+e21lc3NhZ2V9IG5lICIiKTsKKworICAgICMgbWFrZSBpdCBlYXN5IHRvIGJhY2t0cmFjayBhbmQgZmlndXJlIG91dCB3aGljaCBBcmNoIHJldmlzaW9uIHRoaXMgd2FzOgorICAgIHByaW50IFdSSVRFUiAnZ2l0LWFyY2hpbXBvcnQtaWQ6ICcsJHBzLT57aWR9LCJcbiI7CisKKyAgICBjbG9zZSBXUklURVI7CisgICAgbXkgJGNvbW1pdGlkID0gPFJFQURFUj47ICAgICMgcmVhZAorICAgIGNob21wICRjb21taXRpZDsKKyAgICBjbG9zZSBSRUFERVI7CisgICAgd2FpdHBpZCAkcGlkLDA7ICAgICAgICAgICAgICMgY2xvc2U7CisKKyAgICBpZiAobGVuZ3RoICRjb21taXRpZCAhPSA0MCkgeworICAgICAgICBkaWUgIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGNvbW1pdCEgJCEgJGNvbW1pdGlkIjsKKyAgICB9CisgICAgIworICAgICMgVXBkYXRlIHRoZSBicmFuY2gKKyAgICAjCisgICAgb3BlbiAgSEVBRCwgIj4iLCIkZ2l0X2Rpci9yZWZzL2hlYWRzLyRwcy0+e2JyYW5jaH0iOworICAgIHByaW50IEhFQUQgJGNvbW1pdGlkOworICAgIGNsb3NlIEhFQUQ7CisgICAgc3lzdGVtKCdnaXQtdXBkYXRlLXJlZicsICdIRUFEJywgIiRwcy0+e2JyYW5jaH0iKTsKKworICAgICMgdGFnIGFjY29yZGluZ2x5CisgICAgcHRhZygkcHMtPntpZH0sICRjb21taXRpZCk7ICMgcHJpdmF0ZSB0YWcKKyAgICBpZiAoJG9wdF9UIHx8ICRwcy0+e3R5cGV9IGVxICd0JyB8fCAkcHMtPnt0eXBlfSBlcSAnaScpIHsKKyAgICAgICAgdGFnKCRwcy0+e2lkfSwgJGNvbW1pdGlkKTsKKyAgICB9CisgICAgcHJpbnQgIiAqIENvbW1pdHRlZCAkcHMtPntpZH1cbiI7CisgICAgcHJpbnQgIiAgICsgdHJlZSAgICR0cmVlXG4iOworICAgIHByaW50ICIgICArIGNvbW1pdCAkY29tbWl0aWRcbiI7CisgICAgJG9wdF92ICYmIHByaW50ICIgICArIGNvbW1pdCBkYXRlIGlzICAkcHMtPntkYXRlfSBcbiI7CisgICAgJG9wdF92ICYmIHByaW50ICIgICArIHBhcmVudHM6ICAiLGpvaW4oJyAnLEBwYXIpLCJcbiI7Cit9CisKK2lmICgkb3B0X3YpIHsKKyAgICBmb3JlYWNoIChzb3J0IGtleXMgJXN0YXRzKSB7CisgICAgICAgIHByaW50IiAkXzogJHN0YXRzeyRffVxuIjsKKyAgICB9Cit9CitleGl0IDA7CisKKyMgdXNlZCBieSB0aGUgYWNjdXJhdGUgc3RyYXRlZ3k6CitzdWIgc3luY190b19wcyB7CisgICAgbXkgJHBzID0gc2hpZnQ7CisgICAgbXkgJHRyZWVfZGlyID0gJHRtcC4nLycudHJlZV9kaXJuYW1lKCRwcy0+e2lkfSk7CisKKyAgICAkb3B0X3YgJiYgcHJpbnQgInN5bmNfdG9fcHMoJHBzLT57aWR9KSBtZXRob2Q6ICI7CisKKyAgICBpZiAoLWQgJHRyZWVfZGlyKSB7CisgICAgICAgIGlmICgkcHMtPnt0eXBlfSBlcSAndCcpIHsKKwkgICAgJG9wdF92ICYmIHByaW50ICJnZXQgKHRhZylcbiI7CisgICAgICAgICAgICAjIGxvb2tzIGxpa2UgYSB0YWctb25seSBvciAod29yc2UsKSBhIG1peGVkIHRhZ3MvY2hhbmdlc2V0IGJyYW5jaCwKKyAgICAgICAgICAgICMgY2FuJ3QgcmVseSBvbiByZXBsYXkgdG8gd29yayBjb3JyZWN0bHkgb24gdGhlc2UKKyAgICAgICAgICAgIHJtdHJlZSgkdHJlZV9kaXIpOworICAgICAgICAgICAgc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnZ2V0JywnLS1uby1wcmlzdGluZScsJHBzLT57aWR9LCR0cmVlX2Rpcik7CisgICAgICAgICAgICAkc3RhdHN7Z2V0X3RhZ30rKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBteSAkdHJlZV9pZCA9IGFyY2hfdHJlZV9pZCgkdHJlZV9kaXIpOworICAgICAgICAgICAgICAgIGlmICgkcHMtPntwYXJlbnRfaWR9ICYmICgkcHMtPntwYXJlbnRfaWR9IGVxICR0cmVlX2lkKSkgeworICAgICAgICAgICAgICAgICAgICAjIHRoZSBjb21tb24gY2FzZSAoaG9wZWZ1bGx5KQorCQkgICAgJG9wdF92ICYmIHByaW50ICJyZXBsYXlcbiI7CisgICAgICAgICAgICAgICAgICAgIHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ3JlcGxheScsJy1kJywkdHJlZV9kaXIsJHBzLT57aWR9KTsKKyAgICAgICAgICAgICAgICAgICAgJHN0YXRze3JlcGxheX0rKzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAjIGdldHRpbmcgb25lIHRyZWUgaXMgdXN1YWxseSBmYXN0ZXIgdGhhbiBnZXR0aW5nIHR3byB0cmVlcworICAgICAgICAgICAgICAgICAgICAjIGFuZCBhcHBseWluZyB0aGUgZGVsdGEgLi4uCisgICAgICAgICAgICAgICAgICAgIHJtdHJlZSgkdHJlZV9kaXIpOworCQkgICAgJG9wdF92ICYmIHByaW50ICJhcHBseS1kZWx0YVxuIjsKKyAgICAgICAgICAgICAgICAgICAgc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnZ2V0JywnLS1uby1wcmlzdGluZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBzLT57aWR9LCR0cmVlX2Rpcik7CisgICAgICAgICAgICAgICAgICAgICRzdGF0c3tnZXRfZGVsdGF9Kys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBuZXcgYnJhbmNoIHdvcmsKKyAgICAgICAgJG9wdF92ICYmIHByaW50ICJnZXQgKG5ldyB0cmVlKVxuIjsKKyAgICAgICAgc2FmZV9waXBlX2NhcHR1cmUoJFRMQSwnZ2V0JywnLS1uby1wcmlzdGluZScsJHBzLT57aWR9LCR0cmVlX2Rpcik7CisgICAgICAgICRzdGF0c3tnZXRfbmV3fSsrOworICAgIH0KKworICAgICMgYWRkZWQgLUkgZmxhZyB0byByc3luYyBzaW5jZSB3ZSdyZSBnb2luZyB0byBmYXN0ISBBSUVFRUVFISEhIQorICAgIHN5c3RlbSgncnN5bmMnLCctYUknLCctLWRlbGV0ZScsJy0tZXhjbHVkZScsJGdpdF9kaXIsCisjICAgICAgICAgICAgICAgJy0tZXhjbHVkZScsJy5hcmNoLWludmVudG9yeScsCisgICAgICAgICAgICAgICAgJy0tZXhjbHVkZScsJy5hcmNoLWlkcycsJy0tZXhjbHVkZScsJ3thcmNofScsCisgICAgICAgICAgICAgICAgJy0tZXhjbHVkZScsJysqJywnLS1leGNsdWRlJywnLConLAorICAgICAgICAgICAgICAgICIkdHJlZV9kaXIvIiwnLi8nKSA9PSAwIG9yIGRpZSAiQ2Fubm90IHJzeW5jICR0cmVlX2RpcjogJCEgJD8iOworICAgIHJldHVybiAkdHJlZV9kaXI7Cit9CisKK3N1YiBhcHBseV9pbXBvcnQgeworICAgIG15ICRwcyA9IHNoaWZ0OworICAgIG15ICRibmFtZSA9IGdpdF9icmFuY2huYW1lKCRwcy0+e2lkfSk7CisKKyAgICBta3BhdGgoJHRtcCk7CisKKyAgICBzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdnZXQnLCctcycsJy0tbm8tcHJpc3RpbmUnLCRwcy0+e2lkfSwiJHRtcC9pbXBvcnQiKTsKKyAgICBkaWUgIkNhbm5vdCBnZXQgaW1wb3J0OiAkISIgaWYgJD87CisgICAgc3lzdGVtKCdyc3luYycsJy1hSScsJy0tZGVsZXRlJywgJy0tZXhjbHVkZScsJGdpdF9kaXIsCisJCSctLWV4Y2x1ZGUnLCcuYXJjaC1pZHMnLCctLWV4Y2x1ZGUnLCd7YXJjaH0nLAorCQkiJHRtcC9pbXBvcnQvIiwgJy4vJyk7CisgICAgZGllICJDYW5ub3QgcnN5bmMgaW1wb3J0OiQhIiBpZiAkPzsKKworICAgIHJtdHJlZSgiJHRtcC9pbXBvcnQiKTsKKyAgICBkaWUgIkNhbm5vdCByZW1vdmUgdGVtcGRpcjogJCEiIGlmICQ/OworCisKKyAgICByZXR1cm4gMTsKK30KKworc3ViIGFwcGx5X2NzZXQgeworICAgIG15ICRwcyA9IHNoaWZ0OworCisgICAgbWtwYXRoKCR0bXApOworCisgICAgIyBnZXQgdGhlIGNoYW5nZXNldAorICAgIHNhZmVfcGlwZV9jYXB0dXJlKCRUTEEsJ2dldC1jaGFuZ2VzZXQnLCRwcy0+e2lkfSwiJHRtcC9jaGFuZ2VzZXQiKTsKKyAgICBkaWUgIkNhbm5vdCBnZXQgY2hhbmdlc2V0OiAkISIgaWYgJD87CisKKyAgICAjIGFwcGx5IHBhdGNoZXMKKyAgICBpZiAoYGZpbmQgJHRtcC9jaGFuZ2VzZXQvcGF0Y2hlcyAtdHlwZSBmIC1uYW1lICcqLnBhdGNoJ2ApIHsKKyAgICAgICAgIyB0aGlzIGNhbiBiZSBzcGVkIHVwIGNvbnNpZGVyYWJseSBieSBkb2luZworICAgICAgICAjICAgIChmaW5kIHwgeGFyZ3MgY2F0KSB8IHBhdGNoCisgICAgICAgICMgYnV0IHRoYXQgY2FuIGdldCBtdWNrZWQgdXAgYnkgcGF0Y2hlcworICAgICAgICAjIHdpdGggbWlzc2luZyB0cmFpbGluZyBuZXdsaW5lcyBvciB0aGUgc3RhbmRhcmQKKyAgICAgICAgIyAnbWlzc2luZyBuZXdsaW5lJyBmbGFnIGluIHRoZSBwYXRjaCAtIHBvc3NpYmx5CisgICAgICAgICMgcHJvZHVjZWQgd2l0aCBhbiBvbGQvYnVnZ3kgZGlmZi4KKyAgICAgICAgIyBzbG93IGFuZCBzYWZlLCB3ZSBpbnZva2UgcGF0Y2ggb25jZSBwZXIgcGF0Y2hmaWxlCisgICAgICAgIGBmaW5kICR0bXAvY2hhbmdlc2V0L3BhdGNoZXMgLXR5cGUgZiAtbmFtZSAnKi5wYXRjaCcgLXByaW50MCB8IGdyZXAgLXp2ICd7YXJjaH0nIHwgeGFyZ3MgLWlGSUxFIC0wIC0tbm8tcnVuLWlmLWVtcHR5IHBhdGNoIC1wMSAtLWZvcndhcmQgLWlGSUxFYDsKKyAgICAgICAgZGllICJQcm9ibGVtIGFwcGx5aW5nIHBhdGNoZXMhICQhIiBpZiAkPzsKKyAgICB9CisKKyAgICAjIGFwcGx5IGNoYW5nZWQgYmluYXJ5IGZpbGVzCisgICAgaWYgKG15IEBtb2RpZmllZCA9IGBmaW5kICR0bXAvY2hhbmdlc2V0L3BhdGNoZXMgLXR5cGUgZiAtbmFtZSAnKi5tb2RpZmllZCdgKSB7CisgICAgICAgIGZvcmVhY2ggbXkgJG1vZCAoQG1vZGlmaWVkKSB7CisgICAgICAgICAgICBjaG9tcCAkbW9kOworICAgICAgICAgICAgbXkgJG9yaWcgPSAkbW9kOworICAgICAgICAgICAgJG9yaWcgPX4gcy9cLm1vZGlmaWVkJC8vOyAjIGxhenkKKyAgICAgICAgICAgICRvcmlnID1+IHMhXlxRJHRtcFxFL2NoYW5nZXNldC9wYXRjaGVzLyEhOworICAgICAgICAgICAgI3ByaW50ICJyc3luYyAtcCAnJG1vZCcgJyRvcmlnJyI7CisgICAgICAgICAgICBzeXN0ZW0oJ3JzeW5jJywnLXAnLCRtb2QsIi4vJG9yaWciKTsKKyAgICAgICAgICAgIGRpZSAiUHJvYmxlbSBhcHBseWluZyBiaW5hcnkgY2hhbmdlcyEgJCEiIGlmICQ/OworICAgICAgICB9CisgICAgfQorCisgICAgIyBicmluZyBpbiBuZXcgZmlsZXMKKyAgICBzeXN0ZW0oJ3JzeW5jJywnLWFJJywnLS1leGNsdWRlJywkZ2l0X2RpciwKKwkJJy0tZXhjbHVkZScsJy5hcmNoLWlkcycsCisJCSctLWV4Y2x1ZGUnLCAne2FyY2h9JywKKwkJIiR0bXAvY2hhbmdlc2V0L25ldy1maWxlcy1hcmNoaXZlLyIsJy4vJyk7CisKKyAgICAjIGRlbGV0ZWQgZmlsZXMgYXJlIGhpbnRlZCBmcm9tIHRoZSBjb21taXRsb2cgcHJvY2Vzc2luZworCisgICAgcm10cmVlKCIkdG1wL2NoYW5nZXNldCIpOworfQorCisKKyMgPWZvciByZWZlcmVuY2UKKyMgbm90ZXM6ICotZmlsZXMvLWRpcmVjdG9yaWVzIGtleXMgY2Fubm90IGhhdmUgc3BhY2VzLCB0aGV5J3JlIGFsd2F5cworIyBwaWthLWVzY2FwZWQuICBFdmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBuZXdsaW5lCisjIEEgbG9nIGVudHJ5IGxvb2tzIGxpa2U6CisjIFJldmlzaW9uOiBtb29kbGUtb3JnLS1tb29kbGUtLTEuMy4zLS1wYXRjaC0xNQorIyBBcmNoaXZlOiBhcmNoLWVkdWZvcmdlQGNhdGFseXN0Lm5ldC5uei0tMjAwNAorIyBDcmVhdG9yOiBQZW5ueSBMZWFjaCA8cGVubnlAY2F0YWx5c3QubmV0Lm56PgorIyBEYXRlOiBXZWQgTWF5IDI1IDE0OjE1OjM0IE5aU1QgMjAwNQorIyBTdGFuZGFyZC1kYXRlOiAyMDA1LTA1LTI1IDAyOjE1OjM0IEdNVAorIyBOZXctZmlsZXM6IGxhbmcvZGUvLmFyY2gtaWRzL2Jsb2NrX2dsb3NzYXJ5X3JhbmRvbS5waHAuaWQKKyMgICAgIGxhbmcvZGUvLmFyY2gtaWRzL2Jsb2NrX2h0bWwucGhwLmlkCisjIE5ldy1kaXJlY3RvcmllczogbGFuZy9kZS9oZWxwL3F1ZXN0aW9ubmFpcmUKKyMgICAgIGxhbmcvZGUvaGVscC9xdWVzdGlvbm5haXJlLy5hcmNoLWlkcworIyBSZW5hbWVkLWZpbGVzOiAuYXJjaC1pZHMvZGJfc2VhcnMuc3FsLmlkIGRiLy5hcmNoLWlkcy9kYl9zZWFycy5zcWwuaWQKKyMgICAgZGJfc2VhcnMuc3FsIGRiL2RiX3NlYXJzLnNxbAorIyBSZW1vdmVkLWZpbGVzOiBsYW5nL2JlL2RvY3MvLmFyY2gtaWRzL3JlbGVhc2UuaHRtbC5pZAorIyAgICAgbGFuZy9iZS9kb2NzLy5hcmNoLWlkcy9yZWxlYXNlb2xkLmh0bWwuaWQKKyMgTW9kaWZpZWQtZmlsZXM6IGFkbWluL2Nyb24ucGhwIGFkbWluL2RlbGV0ZS5waHAKKyMgICAgIGFkbWluL2VkaXRvci5odG1sIGJhY2t1cC9saWIucGhwIGJhY2t1cC9yZXN0b3JlLnBocAorIyBOZXctcGF0Y2hlczogYXJjaC1lZHVmb3JnZUBjYXRhbHlzdC5uZXQubnotLTIwMDQvbW9vZGxlLW9yZy0tbW9vZGxlLS0xLjMuMy0tcGF0Y2gtMTUKKyMgU3VtbWFyeTogVXBkYXRpbmcgdG8gbGF0ZXN0IGZyb20gTU9PRExFXzE0X1NUQUJMRSAoMS40LjUrKQorIyAgIHN1bW1hcnkgY2FuIGJlIG11bHRpbGluZSB3aXRoIGEgbGVhZGluZyBzcGFjZSBqdXN0IGxpa2UgdGhlIGFib3ZlIGZpZWxkcworIyBLZXl3b3JkczoKKyMKKyMgVXBkYXRpbmcgeWFkZGEgdGFkZGEgdGFkZGEgbWFkZGEKK3N1YiBwYXJzZWxvZyB7CisgICAgbXkgKCRwcywgJGxvZykgPSBAXzsKKyAgICBteSAka2V5ID0gdW5kZWY7CisKKyAgICAjIGhlYWRlcnMgd2Ugd2FudCB0aGF0IGNvbnRhaW4gZmlsZW5hbWVzOgorICAgIG15ICV3YW50X2hlYWRlcnMgPSAoCisgICAgICAgIG5ld19maWxlcyA9PiAxLAorICAgICAgICBtb2RpZmllZF9maWxlcyA9PiAxLAorICAgICAgICByZW5hbWVkX2ZpbGVzID0+IDEsCisgICAgICAgIHJlbmFtZWRfZGlyZWN0b3JpZXMgPT4gMSwKKyAgICAgICAgcmVtb3ZlZF9maWxlcyA9PiAxLAorICAgICAgICByZW1vdmVkX2RpcmVjdG9yaWVzID0+IDEsCisgICAgKTsKKworICAgIGNob21wIChAJGxvZyk7CisgICAgd2hpbGUgKCRfID0gc2hpZnQgQCRsb2cpIHsKKyAgICAgICAgaWYgKC9eQ29udGludWF0aW9uLW9mOlxzKiguKikvKSB7CisgICAgICAgICAgICAkcHMtPnt0YWd9ID0gJDE7CisgICAgICAgICAgICAka2V5ID0gdW5kZWY7CisgICAgICAgIH0gZWxzaWYgKC9eU3VtbWFyeTpccyooLiopJC8gKSB7CisgICAgICAgICAgICAjIHN1bW1hcnkgY2FuIGJlIG11bHRpbGluZSBhcyBsb25nIGFzIGl0IGhhcyBhIGxlYWRpbmcgc3BhY2UuCisJICAgICMgd2Ugc3F1ZWV6ZSBpdCBvbnRvIGEgc2luZ2xlIGxpbmUsIHRob3VnaC4KKyAgICAgICAgICAgICRwcy0+e3N1bW1hcnl9ID0gWyAkMSBdOworICAgICAgICAgICAgJGtleSA9ICdzdW1tYXJ5JzsKKyAgICAgICAgfSBlbHNpZiAoL15DcmVhdG9yOiAoLiopXHMqPChbXlw+XSspPi8pIHsKKyAgICAgICAgICAgICRwcy0+e2F1dGhvcn0gPSAkMTsKKyAgICAgICAgICAgICRwcy0+e2VtYWlsfSA9ICQyOworICAgICAgICAgICAgJGtleSA9IHVuZGVmOworICAgICAgICAjIGFueSAqLWZpbGVzIG9yICotZGlyZWN0b3JpZXMgY2FuIGJlIHJlYWQgaGVyZToKKyAgICAgICAgfSBlbHNpZiAoL14oW0EtWl1bYS16XC1dKyk6XHMqKC4qKSQvKSB7CisgICAgICAgICAgICBteSAkdmFsID0gJDI7CisgICAgICAgICAgICAka2V5ID0gbGMgJDE7CisgICAgICAgICAgICAka2V5ID1+IHRyLy0vXy87ICMgdG9vIGxhenkgdG8gcXVvdGUgOlAKKyAgICAgICAgICAgIGlmICgkd2FudF9oZWFkZXJzeyRrZXl9KSB7CisgICAgICAgICAgICAgICAgcHVzaCBAeyRwcy0+eyRrZXl9fSwgc3BsaXQoL1xzKy8sICR2YWwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAka2V5ID0gdW5kZWY7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzaWYgKC9eJC8pIHsKKyAgICAgICAgICAgIGxhc3Q7ICMgcmVtYWluZGVyIG9mIEAkbG9nIHRoYXQgZGlkbid0IGdldCBzaGlmdGVkIG9mZiBpcyBtZXNzYWdlCisgICAgICAgIH0gZWxzaWYgKCRrZXkpIHsKKyAgICAgICAgICAgIGlmICgvXlxzKyguKikkLykgeworICAgICAgICAgICAgICAgIGlmICgka2V5IGVxICdzdW1tYXJ5JykgeworICAgICAgICAgICAgICAgICAgICBwdXNoIEB7JHBzLT57JGtleX19LCAkMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAjIGZpbGVzL2RpcmVjdG9yaWVzOgorICAgICAgICAgICAgICAgICAgICBwdXNoIEB7JHBzLT57JGtleX19LCBzcGxpdCgvXHMrLywgJDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJGtleSA9IHVuZGVmOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgIyBkcm9wIGxlYWRpbmcgZW1wdHkgbGluZXMgZnJvbSB0aGUgbG9nIG1lc3NhZ2UKKyAgICB3aGlsZSAoQCRsb2cgJiYgJGxvZy0+WzBdIGVxICcnKSB7CisJc2hpZnQgQCRsb2c7CisgICAgfQorICAgIGlmIChleGlzdHMgJHBzLT57c3VtbWFyeX0gJiYgQHskcHMtPntzdW1tYXJ5fX0pIHsKKwkkcHMtPntzdW1tYXJ5fSA9IGpvaW4oJyAnLCBAeyRwcy0+e3N1bW1hcnl9fSk7CisgICAgfQorICAgIGVsc2lmIChAJGxvZyA9PSAwKSB7CisJJHBzLT57c3VtbWFyeX0gPSAnZW1wdHkgY29tbWl0IG1lc3NhZ2UnOworICAgIH0gZWxzZSB7CisJJHBzLT57c3VtbWFyeX0gPSAkbG9nLT5bMF0gLiAnLi4uJzsKKyAgICB9CisgICAgJHBzLT57bWVzc2FnZX0gPSBqb2luKCJcbiIsQCRsb2cpOworCisgICAgIyBza2lwIEFyY2ggY29udHJvbCBmaWxlcywgdW5lc2NhcGUgcGlrYS1lc2NhcGVkIGZpbGVzCisgICAgZm9yZWFjaCBteSAkayAoa2V5cyAld2FudF9oZWFkZXJzKSB7CisgICAgICAgIG5leHQgdW5sZXNzIChkZWZpbmVkICRwcy0+eyRrfSk7CisgICAgICAgIG15IEB0bXAgPSAoKTsKKyAgICAgICAgZm9yZWFjaCBteSAkdCAoQHskcHMtPnska319KSB7CisgICAgICAgICAgIG5leHQgdW5sZXNzIGxlbmd0aCAoJHQpOworICAgICAgICAgICBuZXh0IGlmICR0ID1+IG0hXHthcmNoXH0vITsKKyAgICAgICAgICAgbmV4dCBpZiAkdCA9fiBtIVwuYXJjaC1pZHMvITsKKyAgICAgICAgICAgIyBzaG91bGQgd2Ugc2tpcCB0aGlzPworICAgICAgICAgICBuZXh0IGlmICR0ID1+IG0hXC5hcmNoLWludmVudG9yeSQhOworICAgICAgICAgICAjIHRsYSBjYXQtYXJjaGl2ZS1sb2cgd2lsbCBnaXZlIHVzIGZpbGVuYW1lcyB3aXRoIHNwYWNlcyBhcyBmaWxlXChzcCluYW1lIC0gd2h5PworICAgICAgICAgICAjIHdlIGNhbiBhc3N1bWUgdGhhdCBhbnkgZmlsZW5hbWUgd2l0aCBcIGluZGljYXRlcyBzb21lIHBpa2EgZXNjYXBpbmcgdGhhdCB3ZSB3YW50IHRvIGdldCByaWQgb2YuCisgICAgICAgICAgIGlmICgkdCA9fiAvXFwvICl7CisgICAgICAgICAgICAgICAkdCA9IChzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdlc2NhcGUnLCctLXVuZXNjYXBlZCcsJHQpKVswXTsKKyAgICAgICAgICAgfQorICAgICAgICAgICBwdXNoIEB0bXAsICR0OworICAgICAgICB9CisgICAgICAgICRwcy0+eyRrfSA9IFxAdG1wOworICAgIH0KK30KKworIyB3cml0ZS9yZWFkIGEgdGFnCitzdWIgdGFnIHsKKyAgICBteSAoJHRhZywgJGNvbW1pdCkgPSBAXzsKKworICAgIGlmICgkb3B0X28pIHsKKyAgICAgICAgJHRhZyA9fiBzfC98LS18ZzsKKyAgICB9IGVsc2UgeworCW15ICRwYXRjaG5hbWUgPSAkdGFnOworCSRwYXRjaG5hbWUgPX4gcy8uKi0tLy87CisgICAgICAgICR0YWcgPSBnaXRfYnJhbmNobmFtZSAoJHRhZykgLiAnLS0nIC4gJHBhdGNobmFtZTsKKyAgICB9CisKKyAgICBpZiAoJGNvbW1pdCkgeworICAgICAgICBvcGVuKEMsIj4iLCIkZ2l0X2Rpci9yZWZzL3RhZ3MvJHRhZyIpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCBjcmVhdGUgdGFnICR0YWc6ICQhXG4iOworICAgICAgICBwcmludCBDICIkY29tbWl0XG4iCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCB3cml0ZSB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgIGNsb3NlKEMpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCB3cml0ZSB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgIHByaW50ICIgKiBDcmVhdGVkIHRhZyAnJHRhZycgb24gJyRjb21taXQnXG4iIGlmICRvcHRfdjsKKyAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgIyByZWFkCisgICAgICAgIG9wZW4oQywiPCIsIiRnaXRfZGlyL3JlZnMvdGFncy8kdGFnIikKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IHJlYWQgdGFnICR0YWc6ICQhXG4iOworICAgICAgICAkY29tbWl0ID0gPEM+OworICAgICAgICBjaG9tcCAkY29tbWl0OworICAgICAgICBkaWUgIkVycm9yIHJlYWRpbmcgdGFnICR0YWc6ICQhXG4iIHVubGVzcyBsZW5ndGggJGNvbW1pdCA9PSA0MDsKKyAgICAgICAgY2xvc2UoQykKKyAgICAgICAgICAgIG9yIGRpZSAiQ2Fubm90IHJlYWQgdGFnICR0YWc6ICQhXG4iOworICAgICAgICByZXR1cm4gJGNvbW1pdDsKKyAgICB9Cit9CisKKyMgd3JpdGUvcmVhZCBhIHByaXZhdGUgdGFnCisjIHJlYWRzIGZhaWwgc29mdGx5IGlmIHRoZSB0YWcgaXNuJ3QgdGhlcmUKK3N1YiBwdGFnIHsKKyAgICBteSAoJHRhZywgJGNvbW1pdCkgPSBAXzsKKworICAgICMgZG9uJ3QgdXNlIHN1YmRpcnMgZm9yIHRhZ3MgeWV0LCBpdCBjb3VsZCBzY3JldyB1cCBvdGhlciBwb3JjZWxhaW5zCisgICAgJHRhZyA9fiBzfC98LHxnOworCisgICAgbXkgJHRhZ19maWxlID0gIiRwdGFnX2Rpci8kdGFnIjsKKyAgICBteSAkdGFnX2JyYW5jaF9kaXIgPSBkaXJuYW1lKCR0YWdfZmlsZSk7CisgICAgbWtwYXRoKCR0YWdfYnJhbmNoX2RpcikgdW5sZXNzICgtZCAkdGFnX2JyYW5jaF9kaXIpOworCisgICAgaWYgKCRjb21taXQpIHsgICAgICAgICAgICAgICMgd3JpdGUKKyAgICAgICAgb3BlbihDLCI+IiwkdGFnX2ZpbGUpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCBjcmVhdGUgdGFnICR0YWc6ICQhXG4iOworICAgICAgICBwcmludCBDICIkY29tbWl0XG4iCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCB3cml0ZSB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgIGNsb3NlKEMpCisgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCB3cml0ZSB0YWcgJHRhZzogJCFcbiI7CisJJHJwdGFnc3skY29tbWl0fSA9ICR0YWcKKwkgICAgdW5sZXNzICR0YWcgPX4gbS8tLWJhc2UtMCQvOworICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAjIHJlYWQKKyAgICAgICAgIyBpZiB0aGUgdGFnIGlzbid0IHRoZXJlLCByZXR1cm4gMAorICAgICAgICB1bmxlc3MgKCAtcyAkdGFnX2ZpbGUpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIG9wZW4oQywiPCIsJHRhZ19maWxlKQorICAgICAgICAgICAgb3IgZGllICJDYW5ub3QgcmVhZCB0YWcgJHRhZzogJCFcbiI7CisgICAgICAgICRjb21taXQgPSA8Qz47CisgICAgICAgIGNob21wICRjb21taXQ7CisgICAgICAgIGRpZSAiRXJyb3IgcmVhZGluZyB0YWcgJHRhZzogJCFcbiIgdW5sZXNzIGxlbmd0aCAkY29tbWl0ID09IDQwOworICAgICAgICBjbG9zZShDKQorICAgICAgICAgICAgb3IgZGllICJDYW5ub3QgcmVhZCB0YWcgJHRhZzogJCFcbiI7CisJdW5sZXNzIChkZWZpbmVkICRycHRhZ3N7JGNvbW1pdH0pIHsKKwkgICAgJHJwdGFnc3skY29tbWl0fSA9ICR0YWc7CisJfQorICAgICAgICByZXR1cm4gJGNvbW1pdDsKKyAgICB9Cit9CisKK3N1YiBmaW5kX3BhcmVudHMgeworICAgICMKKyAgICAjIElkZW50aWZ5IHdoYXQgYnJhbmNoZXMgYXJlIG1lcmdpbmcgaW50byBtZQorICAgICMgYW5kIHdoZXRoZXIgd2UgYXJlIGZ1bGx5IG1lcmdlZAorICAgICMgZ2l0LW1lcmdlLWJhc2UgPGhlYWRzaGE+IDxoZWFkc2hhPiBzaG91bGQgdGVsbAorICAgICMgbWUgd2hhdCB0aGUgYmFzZSBvZiB0aGUgbWVyZ2Ugc2hvdWxkIGJlCisgICAgIworICAgIG15ICRwcyA9IHNoaWZ0OworCisgICAgbXkgJWJyYW5jaGVzOyAjIGhvbGRzIGFuIGFycmF5cmVmIHBlciBicmFuY2gKKyAgICAgICAgICAgICAgICAgICMgdGhlIGFycmF5cmVmIGNvbnRhaW5zIGEgbGlzdCBvZgorICAgICAgICAgICAgICAgICAgIyBtZXJnZWQgcGF0Y2hlcyBiZXR3ZWVuIHRoZSBiYXNlCisgICAgICAgICAgICAgICAgICAjIG9mIHRoZSBtZXJnZSBhbmQgdGhlIGN1cnJlbnQgaGVhZAorCisgICAgbXkgQHBhcmVudHM7ICAjIHBhcmVudHMgZm91bmQgZm9yIHRoaXMgY29tbWl0CisKKyAgICAjIHNpbXBsZSBsb29wIHRvIHNwbGl0IHRoZSBtZXJnZXMKKyAgICAjIHBlciBicmFuY2gKKyAgICBmb3JlYWNoIG15ICRtZXJnZSAoQHskcHMtPnttZXJnZXN9fSkgeworCW15ICRicmFuY2ggPSBnaXRfYnJhbmNobmFtZSgkbWVyZ2UpOworCXVubGVzcyAoZGVmaW5lZCAkYnJhbmNoZXN7JGJyYW5jaH0gKXsKKwkgICAgJGJyYW5jaGVzeyRicmFuY2h9ID0gW107CisJfQorCXB1c2ggQHskYnJhbmNoZXN7JGJyYW5jaH19LCAkbWVyZ2U7CisgICAgfQorCisgICAgIworICAgICMgZm9yZWFjaCBicmFuY2ggZmluZCBhIG1lcmdlIGJhc2UgYW5kIHdhbGsgaXQgdG8gdGhlCisgICAgIyBoZWFkIHdoZXJlIHdlIGFyZSwgY29sbGVjdGluZyB0aGUgbWVyZ2VkIHBhdGNoc2V0cyB0aGF0CisgICAgIyBBcmNoIGhhcyByZWNvcmRlZC4gS2VlcCB0aGF0IGluIEBoYXZlCisgICAgIyBDb21wYXJlIHRoYXQgd2l0aCB0aGUgY29tbWl0cyBvbiB0aGUgb3RoZXIgYnJhbmNoCisgICAgIyBiZXR3ZWVuIG1lcmdlLWJhc2UgYW5kIHRoZSB0aXAgb2YgdGhlIGJyYW5jaCAoQG5lZWQpCisgICAgIyBhbmQgc2VlIGlmIHdlIGhhdmUgYSBzZXJpZXMgb2YgY29uc2VjdXRpdmUgcGF0Y2hlcworICAgICMgc3RhcnRpbmcgZnJvbSB0aGUgbWVyZ2UgYmFzZS4gVGhlIHRpcCBvZiB0aGUgc2VyaWVzCisgICAgIyBvZiBjb25zZWN1dGl2ZSBwYXRjaGVzIG1lcmdlZCBpcyBvdXIgbmV3IHBhcmVudCBmb3IKKyAgICAjIHRoYXQgYnJhbmNoLgorICAgICMKKyAgICBmb3JlYWNoIG15ICRicmFuY2ggKGtleXMgJWJyYW5jaGVzKSB7CisKKwkjIGNoZWNrIHRoYXQgd2UgYWN0dWFsbHkga25vdyBhYm91dCB0aGUgYnJhbmNoCisJbmV4dCB1bmxlc3MgLWUgIiRnaXRfZGlyL3JlZnMvaGVhZHMvJGJyYW5jaCI7CisKKwlteSAkbWVyZ2ViYXNlID0gYGdpdC1tZXJnZS1iYXNlICRicmFuY2ggJHBzLT57YnJhbmNofWA7CisJaWYgKCQ/KSB7CisJICAgICMgRG9uJ3QgZGllIGhlcmUsIEFyY2ggc3VwcG9ydHMgb25lLXdheSBjaGVycnktcGlja2luZworCSAgICAjIGJldHdlZW4gYnJhbmNoZXMgd2l0aCBubyBjb21tb24gYmFzZSAob3IgYW55IHJlbGF0aW9uc2hpcAorCSAgICAjIGF0IGFsbCBiZWZvcmVoYW5kKQorCSAgICB3YXJuICJDYW5ub3QgZmluZCBtZXJnZSBiYXNlIGZvciAkYnJhbmNoIGFuZCAkcHMtPnticmFuY2h9IjsKKwkgICAgbmV4dDsKKwl9CisJY2hvbXAgJG1lcmdlYmFzZTsKKworCSMgbm93IHdhbGsgdXAgdG8gdGhlIG1lcmdlcG9pbnQgY29sbGVjdGluZyB3aGF0IHBhdGNoZXMgd2UgaGF2ZQorCW15ICRicmFuY2h0aXAgPSBnaXRfcmV2X3BhcnNlKCRwcy0+e2JyYW5jaH0pOworCW15IEBhbmNlc3RvcnMgPSBgZ2l0LXJldi1saXN0IC0tdG9wby1vcmRlciAkYnJhbmNodGlwIF4kbWVyZ2ViYXNlYDsKKwlteSAlaGF2ZTsgIyBjb2xsZWN0ZWQgbWVyZ2VzIHRoaXMgYnJhbmNoIGhhcworCWZvcmVhY2ggbXkgJG1lcmdlIChAeyRwcy0+e21lcmdlc319KSB7CisJICAgICRoYXZleyRtZXJnZX0gPSAxOworCX0KKwlteSAlYW5jZXN0b3JzaGF2ZTsKKwlmb3JlYWNoIG15ICRwYXIgKEBhbmNlc3RvcnMpIHsKKwkgICAgJHBhciA9IGNvbW1pdGlkMnBzZXQoJHBhcik7CisJICAgIGlmIChkZWZpbmVkICRwYXItPnttZXJnZXN9KSB7CisJCWZvcmVhY2ggbXkgJG1lcmdlIChAeyRwYXItPnttZXJnZXN9fSkgeworCQkgICAgJGFuY2VzdG9yc2hhdmV7JG1lcmdlfT0xOworCQl9CisJICAgIH0KKwl9CisJIyBwcmludCAiKysrKyBNZXJnZXMgaW4gJHBzLT57aWR9IGFyZS4uLi5cbiI7CisJIyBteSBAaGF2ZSA9IHNvcnQga2V5cyAlaGF2ZTsJcHJpbnQgRHVtcGVyKFxAaGF2ZSk7CisKKwkjIG1lcmdlIHdoYXQgd2UgaGF2ZSB3aXRoIHdoYXQgYW5jZXN0b3JzIGhhdmUKKwklaGF2ZSA9ICglaGF2ZSwgJWFuY2VzdG9yc2hhdmUpOworCisJIyBzZWUgd2hhdCB0aGUgcmVtb3RlIGJyYW5jaCBoYXMgLSB0aGVzZSBhcmUgdGhlIG1lcmdlcyB3ZQorCSMgd2lsbCB3YW50IHRvIGhhdmUgaW4gYSBjb25zZWN1dGl2ZSBzZXJpZXMgZnJvbSB0aGUgbWVyZ2ViYXNlCisJbXkgJG90aGVyYnJhbmNodGlwID0gZ2l0X3Jldl9wYXJzZSgkYnJhbmNoKTsKKwlteSBAbmVlZHJhdyA9IGBnaXQtcmV2LWxpc3QgLS10b3BvLW9yZGVyICRvdGhlcmJyYW5jaHRpcCBeJG1lcmdlYmFzZWA7CisJbXkgQG5lZWQ7CisJZm9yZWFjaCBteSAkbmVlZHBzIChAbmVlZHJhdykgeyAJIyBnZXQgdGhlIHBzZXRzCisJICAgICRuZWVkcHMgPSBjb21taXRpZDJwc2V0KCRuZWVkcHMpOworCSAgICAjIGdpdC1yZXYtbGlzdCB3aWxsIGFsc28KKwkgICAgIyBsaXN0IGNvbW1pdHMgbWVyZ2VkIGluIHZpYSBlYXJsaWVyCisJICAgICMgbWVyZ2VzLiB3ZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIGNvbW1pdHMKKwkgICAgIyBmcm9tIHRoZSBicmFuY2ggd2UncmUgbG9va2luZyBhdAorCSAgICBpZiAoJGJyYW5jaCBlcSAkbmVlZHBzLT57YnJhbmNofSkgeworCQlwdXNoIEBuZWVkLCAkbmVlZHBzLT57aWR9OworCSAgICB9CisJfQorCisJIyBwcmludCAiKysrKyBNZXJnZXMgZnJvbSAkYnJhbmNoIHdlIHdhbnQgYXJlLi4uLlxuIjsKKwkjIHByaW50IER1bXBlcihcQG5lZWQpOworCisJbXkgJG5ld3BhcmVudDsKKwl3aGlsZSAobXkgJG5lZWRlZF9jb21taXQgPSBwb3AgQG5lZWQpIHsKKwkgICAgaWYgKCRoYXZleyRuZWVkZWRfY29tbWl0fSkgeworCQkkbmV3cGFyZW50ID0gJG5lZWRlZF9jb21taXQ7CisJICAgIH0gZWxzZSB7CisJCWxhc3Q7ICMgYnJlYWsgb3V0IG9mIHRoZSB3aGlsZQorCSAgICB9CisJfQorCWlmICgkbmV3cGFyZW50KSB7CisJICAgIHB1c2ggQHBhcmVudHMsICRuZXdwYXJlbnQ7CisJfQorCisKKyAgICB9ICMgZW5kIGZvcmVhY2ggYnJhbmNoCisKKyAgICAjIHBydW5lIHJlZHVuZGFudCBwYXJlbnRzCisgICAgbXkgJXBhcmVudHM7CisgICAgZm9yZWFjaCBteSAkcCAoQHBhcmVudHMpIHsKKwkkcGFyZW50c3skcH0gPSAxOworICAgIH0KKyAgICBmb3JlYWNoIG15ICRwIChAcGFyZW50cykgeworCW5leHQgdW5sZXNzIGV4aXN0cyAkcHNldHN7JHB9e21lcmdlc307CisJbmV4dCB1bmxlc3MgcmVmICAgICRwc2V0c3skcH17bWVyZ2VzfTsKKwlteSBAbWVyZ2VzID0gQHskcHNldHN7JHB9e21lcmdlc319OworCWZvcmVhY2ggbXkgJG1lcmdlIChAbWVyZ2VzKSB7CisJICAgIGlmICgkcGFyZW50c3skbWVyZ2V9KSB7CisJCWRlbGV0ZSAkcGFyZW50c3skbWVyZ2V9OworCSAgICB9CisJfQorICAgIH0KKworICAgIEBwYXJlbnRzID0gKCk7CisgICAgZm9yZWFjaCAoa2V5cyAlcGFyZW50cykgeworICAgICAgICBwdXNoIEBwYXJlbnRzLCAnLXAnLCBwdGFnKCRfKTsKKyAgICB9CisgICAgcmV0dXJuIEBwYXJlbnRzOworfQorCitzdWIgZ2l0X3Jldl9wYXJzZSB7CisgICAgbXkgJG5hbWUgPSBzaGlmdDsKKyAgICBteSAkdmFsICA9IGBnaXQtcmV2LXBhcnNlICRuYW1lYDsKKyAgICBkaWUgIkVycm9yOiBnaXQtcmV2LXBhcnNlICRuYW1lIiBpZiAkPzsKKyAgICBjaG9tcCAkdmFsOworICAgIHJldHVybiAkdmFsOworfQorCisjIHJlc29sdmUgYSBTSEExIHRvIGEga25vd24gcGF0Y2hzZXQKK3N1YiBjb21taXRpZDJwc2V0IHsKKyAgICBteSAkY29tbWl0aWQgPSBzaGlmdDsKKyAgICBjaG9tcCAkY29tbWl0aWQ7CisgICAgbXkgJG5hbWUgPSAkcnB0YWdzeyRjb21taXRpZH0KKwl8fCBkaWUgIkNhbm5vdCBmaW5kIHJldmVyc2UgdGFnIG1hcHBpbmcgZm9yICRjb21taXRpZCI7CisgICAgJG5hbWUgPX4gc3wsfC98OworICAgIG15ICRwcyAgID0gJHBzZXRzeyRuYW1lfQorCXx8IChwcmludCBEdW1wZXIoc29ydCBrZXlzICVwc2V0cykpICYmIGRpZSAiQ2Fubm90IGZpbmQgcGF0Y2hzZXQgZm9yICRuYW1lIjsKKyAgICByZXR1cm4gJHBzOworfQorCisKKyMgYW4gYWx0ZXJuYXRpdmUgdG8gYGNvbW1hbmRgIHRoYXQgYWxsb3dzIGlucHV0IHRvIGJlIHBhc3NlZCBhcyBhbiBhcnJheQorIyB0byB3b3JrIGFyb3VuZCBzaGVsbCBwcm9ibGVtcyB3aXRoIHdlaXJkIGNoYXJhY3RlcnMgaW4gYXJndW1lbnRzCitzdWIgc2FmZV9waXBlX2NhcHR1cmUgeworICAgIG15IEBvdXRwdXQ7CisgICAgaWYgKG15ICRwaWQgPSBvcGVuIG15ICRjaGlsZCwgJy18JykgeworICAgICAgICBAb3V0cHV0ID0gKDwkY2hpbGQ+KTsKKyAgICAgICAgY2xvc2UgJGNoaWxkIG9yIGRpZSBqb2luKCcgJyxAXykuIjogJCEgJD8iOworICAgIH0gZWxzZSB7CisJZXhlYyhAXykgb3IgZGllICIkISAkPyI7ICMgZXhlYygpIGNhbiBmYWlsIHRoZSBleGVjdXRhYmxlIGNhbid0IGJlIGZvdW5kCisgICAgfQorICAgIHJldHVybiB3YW50YXJyYXkgPyBAb3V0cHV0IDogam9pbignJyxAb3V0cHV0KTsKK30KKworIyBgdGxhIGxvZ3MgLXJmIC1kIDxkaXI+IHwgaGVhZCAtbjFgIG9yIGBiYXogdHJlZS1pZCA8ZGlyPmAKK3N1YiBhcmNoX3RyZWVfaWQgeworICAgIG15ICRkaXIgPSBzaGlmdDsKKyAgICBjaG9tcCggbXkgJHJldCA9IChzYWZlX3BpcGVfY2FwdHVyZSgkVExBLCdsb2dzJywnLXJmJywnLWQnLCRkaXIpKVswXSApOworICAgIHJldHVybiAkcmV0OworfQorCitzdWIgYXJjaGl2ZV9yZWFjaGFibGUgeworICAgIG15ICRhcmNoaXZlID0gc2hpZnQ7CisgICAgcmV0dXJuIDEgaWYgJHJlYWNoYWJsZXskYXJjaGl2ZX07CisgICAgcmV0dXJuIDAgaWYgJHVucmVhY2hhYmxleyRhcmNoaXZlfTsKKworICAgIGlmIChzeXN0ZW0gIiRUTEEgd2hlcmVpcy1hcmNoaXZlICRhcmNoaXZlID4vZGV2L251bGwiKSB7CisgICAgICAgIGlmICgkb3B0X2EgJiYgKHN5c3RlbSgkVExBLCdyZWdpc3Rlci1hcmNoaXZlJywKKyAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL21pcnJvcnMuc291cmNlY29udHJvbC5uZXQvJGFyY2hpdmUiKSA9PSAwKSkgeworICAgICAgICAgICAgJHJlYWNoYWJsZXskYXJjaGl2ZX0gPSAxOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgU1RERVJSICJBcmNoaXZlIGlzIHVucmVhY2hhYmxlOiAkYXJjaGl2ZVxuIjsKKyAgICAgICAgJHVucmVhY2hhYmxleyRhcmNoaXZlfSA9IDE7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgICRyZWFjaGFibGV7JGFyY2hpdmV9ID0gMTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvZ2l0LWJpc2VjdC5zaCBiL2dpdC1iaXNlY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWQxY2IwMAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1iaXNlY3Quc2gKQEAgLTAsMCArMSw2OTcgQEAKKyMhL2Jpbi9zaAorCitVU0FHRT0nW2hlbHB8c3RhcnR8YmFkfGdvb2R8bmV3fG9sZHx0ZXJtc3xza2lwfG5leHR8cmVzZXR8dmlzdWFsaXplfHJlcGxheXxsb2d8cnVuXScKK0xPTkdfVVNBR0U9J2dpdCBiaXNlY3QgaGVscAorCXByaW50IHRoaXMgbG9uZyBoZWxwIG1lc3NhZ2UuCitnaXQgYmlzZWN0IHN0YXJ0IFstLXRlcm0te29sZCxnb29kfT08dGVybT4gLS10ZXJtLXtuZXcsYmFkfT08dGVybT5dCisJCSBbLS1uby1jaGVja291dF0gWzxiYWQ+IFs8Z29vZD4uLi5dXSBbLS1dIFs8cGF0aHNwZWM+Li4uXQorCXJlc2V0IGJpc2VjdCBzdGF0ZSBhbmQgc3RhcnQgYmlzZWN0aW9uLgorZ2l0IGJpc2VjdCAoYmFkfG5ldykgWzxyZXY+XQorCW1hcmsgPHJldj4gYSBrbm93bi1iYWQgcmV2aXNpb24vCisJCWEgcmV2aXNpb24gYWZ0ZXIgY2hhbmdlIGluIGEgZ2l2ZW4gcHJvcGVydHkuCitnaXQgYmlzZWN0IChnb29kfG9sZCkgWzxyZXY+Li4uXQorCW1hcmsgPHJldj4uLi4ga25vd24tZ29vZCByZXZpc2lvbnMvCisJCXJldmlzaW9ucyBiZWZvcmUgY2hhbmdlIGluIGEgZ2l2ZW4gcHJvcGVydHkuCitnaXQgYmlzZWN0IHRlcm1zIFstLXRlcm0tZ29vZCB8IC0tdGVybS1iYWRdCisJc2hvdyB0aGUgdGVybXMgdXNlZCBmb3Igb2xkIGFuZCBuZXcgY29tbWl0cyAoZGVmYXVsdDogYmFkLCBnb29kKQorZ2l0IGJpc2VjdCBza2lwIFsoPHJldj58PHJhbmdlPikuLi5dCisJbWFyayA8cmV2Pi4uLiB1bnRlc3RhYmxlIHJldmlzaW9ucy4KK2dpdCBiaXNlY3QgbmV4dAorCWZpbmQgbmV4dCBiaXNlY3Rpb24gdG8gdGVzdCBhbmQgY2hlY2sgaXQgb3V0LgorZ2l0IGJpc2VjdCByZXNldCBbPGNvbW1pdD5dCisJZmluaXNoIGJpc2VjdGlvbiBzZWFyY2ggYW5kIGdvIGJhY2sgdG8gY29tbWl0LgorZ2l0IGJpc2VjdCB2aXN1YWxpemUKKwlzaG93IGJpc2VjdCBzdGF0dXMgaW4gZ2l0ay4KK2dpdCBiaXNlY3QgcmVwbGF5IDxsb2dmaWxlPgorCXJlcGxheSBiaXNlY3Rpb24gbG9nLgorZ2l0IGJpc2VjdCBsb2cKKwlzaG93IGJpc2VjdCBsb2cuCitnaXQgYmlzZWN0IHJ1biA8Y21kPi4uLgorCXVzZSA8Y21kPi4uLiB0byBhdXRvbWF0aWNhbGx5IGJpc2VjdC4KKworUGxlYXNlIHVzZSAiZ2l0IGhlbHAgYmlzZWN0IiB0byBnZXQgdGhlIGZ1bGwgbWFuIHBhZ2UuJworCitPUFRJT05TX1NQRUM9CisuIGdpdC1zaC1zZXR1cAorLiBnaXQtc2gtaTE4bgorCitfeDQwPSdbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdJworX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKK1RFUk1fQkFEPWJhZAorVEVSTV9HT09EPWdvb2QKKworYmlzZWN0X2hlYWQoKQoreworCWlmIHRlc3QgLWYgIiRHSVRfRElSL0JJU0VDVF9IRUFEIgorCXRoZW4KKwkJZWNobyBCSVNFQ1RfSEVBRAorCWVsc2UKKwkJZWNobyBIRUFECisJZmkKK30KKworYmlzZWN0X2F1dG9zdGFydCgpIHsKKwl0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiIHx8IHsKKwkJZ2V0dGV4dGxuICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIgPiYyCisJCWlmIHRlc3QgLXQgMAorCQl0aGVuCisJCQkjIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisJCQkjIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKwkJCSMgYXQgdGhpcyBwb2ludC4KKwkJCWdldHRleHQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIgPiYyCisJCQlyZWFkIHllc25vCisJCQljYXNlICIkeWVzbm8iIGluCisJCQlbTm5dKikKKwkJCQlleGl0IDs7CisJCQllc2FjCisJCQliaXNlY3Rfc3RhcnQKKwkJZWxzZQorCQkJZXhpdCAxCisJCWZpCisJfQorfQorCitiaXNlY3Rfc3RhcnQoKSB7CisJIworCSMgQ2hlY2sgZm9yIG9uZSBiYWQgYW5kIHRoZW4gc29tZSBnb29kIHJldmlzaW9ucy4KKwkjCisJaGFzX2RvdWJsZV9kYXNoPTAKKwlmb3IgYXJnOyBkbworCQljYXNlICIkYXJnIiBpbiAtLSkgaGFzX2RvdWJsZV9kYXNoPTE7IGJyZWFrIDs7IGVzYWMKKwlkb25lCisJb3JpZ19hcmdzPSQoZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlICIkQCIpCisJYmFkX3NlZW49MAorCWV2YWw9JycKKwltdXN0X3dyaXRlX3Rlcm1zPTAKKwlyZXZzPScnCisJaWYgdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSkiICE9IHpmYWxzZQorCXRoZW4KKwkJbW9kZT0tLW5vLWNoZWNrb3V0CisJZWxzZQorCQltb2RlPScnCisJZmkKKwl3aGlsZSBbICQjIC1ndCAwIF07IGRvCisJCWFyZz0iJDEiCisJCWNhc2UgIiRhcmciIGluCisJCS0tKQorCQkJc2hpZnQKKwkJCWJyZWFrCisJCTs7CisJCS0tbm8tY2hlY2tvdXQpCisJCQltb2RlPS0tbm8tY2hlY2tvdXQKKwkJCXNoaWZ0IDs7CisJCS0tdGVybS1nb29kfC0tdGVybS1vbGQpCisJCQlzaGlmdAorCQkJbXVzdF93cml0ZV90ZXJtcz0xCisJCQlURVJNX0dPT0Q9JDEKKwkJCXNoaWZ0IDs7CisJCS0tdGVybS1nb29kPSp8LS10ZXJtLW9sZD0qKQorCQkJbXVzdF93cml0ZV90ZXJtcz0xCisJCQlURVJNX0dPT0Q9JHsxIyo9fQorCQkJc2hpZnQgOzsKKwkJLS10ZXJtLWJhZHwtLXRlcm0tbmV3KQorCQkJc2hpZnQKKwkJCW11c3Rfd3JpdGVfdGVybXM9MQorCQkJVEVSTV9CQUQ9JDEKKwkJCXNoaWZ0IDs7CisJCS0tdGVybS1iYWQ9KnwtLXRlcm0tbmV3PSopCisJCQltdXN0X3dyaXRlX3Rlcm1zPTEKKwkJCVRFUk1fQkFEPSR7MSMqPX0KKwkJCXNoaWZ0IDs7CisJCS0tKikKKwkJCWRpZSAiJChldmFsX2dldHRleHQgInVucmVjb2duaXNlZCBvcHRpb246ICdcJGFyZyciKSIgOzsKKwkJKikKKwkJCXJldj0kKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgIiRhcmdee2NvbW1pdH0iKSB8fCB7CisJCQkJdGVzdCAkaGFzX2RvdWJsZV9kYXNoIC1lcSAxICYmCisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiJ1wkYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIpIgorCQkJCWJyZWFrCisJCQl9CisJCQlyZXZzPSIkcmV2cyAkcmV2IgorCQkJc2hpZnQKKwkJCTs7CisJCWVzYWMKKwlkb25lCisKKwlmb3IgcmV2IGluICRyZXZzCisJZG8KKwkJIyBUaGUgdXNlciByYW4gImdpdCBiaXNlY3Qgc3RhcnQgPHNoYTE+CisJCSMgPHNoYTE+IiwgaGVuY2UgZGlkIG5vdCBleHBsaWNpdGx5IHNwZWNpZnkKKwkJIyB0aGUgdGVybXMsIGJ1dCB3ZSBhcmUgYWxyZWFkeSBzdGFydGluZyB0bworCQkjIHNldCByZWZlcmVuY2VzIG5hbWVkIHdpdGggdGhlIGRlZmF1bHQgdGVybXMsCisJCSMgYW5kIHdvbid0IGJlIGFibGUgdG8gY2hhbmdlIGFmdGVyd2FyZHMuCisJCW11c3Rfd3JpdGVfdGVybXM9MQorCisJCWNhc2UgJGJhZF9zZWVuIGluCisJCTApIHN0YXRlPSRURVJNX0JBRCA7IGJhZF9zZWVuPTEgOzsKKwkJKikgc3RhdGU9JFRFUk1fR09PRCA7OworCQllc2FjCisJCWV2YWw9IiRldmFsIGJpc2VjdF93cml0ZSAnJHN0YXRlJyAnJHJldicgJ25vbG9nJyAmJiIKKwlkb25lCisJIworCSMgVmVyaWZ5IEhFQUQuCisJIworCWhlYWQ9JChHSVRfRElSPSIkR0lUX0RJUiIgZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSB8fAorCWhlYWQ9JChHSVRfRElSPSIkR0lUX0RJUiIgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSB8fAorCWRpZSAiJChnZXR0ZXh0ICJCYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiKSIKKworCSMKKwkjIENoZWNrIGlmIHdlIGFyZSBiaXNlY3RpbmcuCisJIworCXN0YXJ0X2hlYWQ9JycKKwlpZiB0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiCisJdGhlbgorCQkjIFJlc2V0IHRvIHRoZSByZXYgZnJvbSB3aGVyZSB3ZSBzdGFydGVkLgorCQlzdGFydF9oZWFkPSQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiKQorCQlpZiB0ZXN0ICJ6JG1vZGUiICE9ICJ6LS1uby1jaGVja291dCIKKwkJdGhlbgorCQkJZ2l0IGNoZWNrb3V0ICIkc3RhcnRfaGVhZCIgLS0gfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIkNoZWNraW5nIG91dCAnXCRzdGFydF9oZWFkJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8dmFsaWQtYnJhbmNoPicuIikiCisJCWZpCisJZWxzZQorCQkjIEdldCByZXYgZnJvbSB3aGVyZSB3ZSBzdGFydC4KKwkJY2FzZSAiJGhlYWQiIGluCisJCXJlZnMvaGVhZHMvKnwkX3g0MCkKKwkJCSMgVGhpcyBlcnJvciBtZXNzYWdlIHNob3VsZCBvbmx5IGJlIHRyaWdnZXJlZCBieQorCQkJIyBjb2dpdG8gdXNhZ2UsIGFuZCBjb2dpdG8gdXNlcnMgc2hvdWxkIHVuZGVyc3RhbmQKKwkJCSMgaXQgcmVsYXRlcyB0byBjZy1zZWVrLgorCQkJWyAtcyAiJEdJVF9ESVIvaGVhZC1uYW1lIiBdICYmCisJCQkJZGllICIkKGdldHRleHQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiKSIKKwkJCXN0YXJ0X2hlYWQ9IiR7aGVhZCNyZWZzL2hlYWRzL30iCisJCQk7OworCQkqKQorCQkJZGllICIkKGdldHRleHQgIkJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiKSIKKwkJCTs7CisJCWVzYWMKKwlmaQorCisJIworCSMgR2V0IHJpZCBvZiBhbnkgb2xkIGJpc2VjdCBzdGF0ZS4KKwkjCisJYmlzZWN0X2NsZWFuX3N0YXRlIHx8IGV4aXQKKworCSMKKwkjIENoYW5nZSBzdGF0ZS4KKwkjIEluIGNhc2Ugb2YgbWlzdGFrZW4gcmV2cyBvciBjaGVja291dCBlcnJvciwgb3Igc2lnbmFscyByZWNlaXZlZCwKKwkjICJiaXNlY3RfYXV0b19uZXh0IiBiZWxvdyBtYXkgZXhpdCBvciBtaXNiZWhhdmUuCisJIyBXZSBoYXZlIHRvIHRyYXAgdGhpcyB0byBiZSBhYmxlIHRvIGNsZWFuIHVwIHVzaW5nCisJIyAiYmlzZWN0X2NsZWFuX3N0YXRlIi4KKwkjCisJdHJhcCAnYmlzZWN0X2NsZWFuX3N0YXRlJyAwCisJdHJhcCAnZXhpdCAyNTUnIDEgMiAzIDE1CisKKwkjCisJIyBXcml0ZSBuZXcgc3RhcnQgc3RhdGUuCisJIworCWVjaG8gIiRzdGFydF9oZWFkIiA+IiRHSVRfRElSL0JJU0VDVF9TVEFSVCIgJiYgeworCQl0ZXN0ICJ6JG1vZGUiICE9ICJ6LS1uby1jaGVja291dCIgfHwKKwkJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiBCSVNFQ1RfSEVBRCAiJHN0YXJ0X2hlYWQiCisJfSAmJgorCWdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJEAiID4iJEdJVF9ESVIvQklTRUNUX05BTUVTIiAmJgorCWV2YWwgIiRldmFsIHRydWUiICYmCisJaWYgdGVzdCAkbXVzdF93cml0ZV90ZXJtcyAtZXEgMQorCXRoZW4KKwkJd3JpdGVfdGVybXMgIiRURVJNX0JBRCIgIiRURVJNX0dPT0QiCisJZmkgJiYKKwllY2hvICJnaXQgYmlzZWN0IHN0YXJ0JG9yaWdfYXJncyIgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIgfHwgZXhpdAorCSMKKwkjIENoZWNrIGlmIHdlIGNhbiBwcm9jZWVkIHRvIHRoZSBuZXh0IGJpc2VjdCBzdGF0ZS4KKwkjCisJYmlzZWN0X2F1dG9fbmV4dAorCisJdHJhcCAnLScgMAorfQorCitiaXNlY3Rfd3JpdGUoKSB7CisJc3RhdGU9IiQxIgorCXJldj0iJDIiCisJbm9sb2c9IiQzIgorCWNhc2UgIiRzdGF0ZSIgaW4KKwkJIiRURVJNX0JBRCIpCisJCQl0YWc9IiRzdGF0ZSIgOzsKKwkJIiRURVJNX0dPT0QifHNraXApCisJCQl0YWc9IiRzdGF0ZSItIiRyZXYiIDs7CisJCSopCisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiBcJHN0YXRlIikiIDs7CisJZXNhYworCWdpdCB1cGRhdGUtcmVmICJyZWZzL2Jpc2VjdC8kdGFnIiAiJHJldiIgfHwgZXhpdAorCWVjaG8gIiMgJHN0YXRlOiAkKGdpdCBzaG93LWJyYW5jaCAkcmV2KSIgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIKKwl0ZXN0IC1uICIkbm9sb2ciIHx8IGVjaG8gImdpdCBiaXNlY3QgJHN0YXRlICRyZXYiID4+IiRHSVRfRElSL0JJU0VDVF9MT0ciCit9CisKK2lzX2V4cGVjdGVkX3JldigpIHsKKwl0ZXN0IC1mICIkR0lUX0RJUi9CSVNFQ1RfRVhQRUNURURfUkVWIiAmJgorCXRlc3QgIiQxIiA9ICQoY2F0ICIkR0lUX0RJUi9CSVNFQ1RfRVhQRUNURURfUkVWIikKK30KKworY2hlY2tfZXhwZWN0ZWRfcmV2cygpIHsKKwlmb3IgX3JldiBpbiAiJEAiOyBkbworCQlpZiAhIGlzX2V4cGVjdGVkX3JldiAiJF9yZXYiCisJCXRoZW4KKwkJCXJtIC1mICIkR0lUX0RJUi9CSVNFQ1RfQU5DRVNUT1JTX09LIgorCQkJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9FWFBFQ1RFRF9SRVYiCisJCQlyZXR1cm4KKwkJZmkKKwlkb25lCit9CisKK2Jpc2VjdF9za2lwKCkgeworCWFsbD0nJworCWZvciBhcmcgaW4gIiRAIgorCWRvCisJCWNhc2UgIiRhcmciIGluCisJCSouLiopCisJCQlyZXZzPSQoZ2l0IHJldi1saXN0ICIkYXJnIikgfHwgZGllICIkKGV2YWxfZ2V0dGV4dCAiQmFkIHJldiBpbnB1dDogXCRhcmciKSIgOzsKKwkJKikKKwkJCXJldnM9JChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRhcmciKSA7OworCQllc2FjCisJCWFsbD0iJGFsbCAkcmV2cyIKKwlkb25lCisJZXZhbCBiaXNlY3Rfc3RhdGUgJ3NraXAnICRhbGwKK30KKworYmlzZWN0X3N0YXRlKCkgeworCWJpc2VjdF9hdXRvc3RhcnQKKwlzdGF0ZT0kMQorCWNoZWNrX2FuZF9zZXRfdGVybXMgJHN0YXRlCisJY2FzZSAiJCMsJHN0YXRlIiBpbgorCTAsKikKKwkJZGllICIkKGdldHRleHQgIlBsZWFzZSBjYWxsICdiaXNlY3Rfc3RhdGUnIHdpdGggYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpIiA7OworCTEsIiRURVJNX0JBRCJ8MSwiJFRFUk1fR09PRCJ8MSxza2lwKQorCQlyZXY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICQoYmlzZWN0X2hlYWQpKSB8fAorCQkJZGllICIkKGdldHRleHQgIkJhZCByZXYgaW5wdXQ6ICQoYmlzZWN0X2hlYWQpIikiCisJCWJpc2VjdF93cml0ZSAiJHN0YXRlIiAiJHJldiIKKwkJY2hlY2tfZXhwZWN0ZWRfcmV2cyAiJHJldiIgOzsKKwkyLCIkVEVSTV9CQUQifCosIiRURVJNX0dPT0QifCosc2tpcCkKKwkJc2hpZnQKKwkJaGFzaF9saXN0PScnCisJCWZvciByZXYgaW4gIiRAIgorCQlkbworCQkJc2hhPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHJldl57Y29tbWl0fSIpIHx8CisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiQmFkIHJldiBpbnB1dDogXCRyZXYiKSIKKwkJCWhhc2hfbGlzdD0iJGhhc2hfbGlzdCAkc2hhIgorCQlkb25lCisJCWZvciByZXYgaW4gJGhhc2hfbGlzdAorCQlkbworCQkJYmlzZWN0X3dyaXRlICIkc3RhdGUiICIkcmV2IgorCQlkb25lCisJCWNoZWNrX2V4cGVjdGVkX3JldnMgJGhhc2hfbGlzdCA7OworCSosIiRURVJNX0JBRCIpCisJCWRpZSAiJChldmFsX2dldHRleHQgIidnaXQgYmlzZWN0IFwkVEVSTV9CQUQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIpIiA7OworCSopCisJCXVzYWdlIDs7CisJZXNhYworCWJpc2VjdF9hdXRvX25leHQKK30KKworYmlzZWN0X25leHRfY2hlY2soKSB7CisJbWlzc2luZ19nb29kPSBtaXNzaW5nX2JhZD0KKwlnaXQgc2hvdy1yZWYgLXEgLS12ZXJpZnkgcmVmcy9iaXNlY3QvJFRFUk1fQkFEIHx8IG1pc3NpbmdfYmFkPXQKKwl0ZXN0IC1uICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvYmlzZWN0LyRURVJNX0dPT0QtKiIpIiB8fCBtaXNzaW5nX2dvb2Q9dAorCisJY2FzZSAiJG1pc3NpbmdfZ29vZCwkbWlzc2luZ19iYWQsJDEiIGluCisJLCwqKQorCQk6IGhhdmUgYm90aCAkVEVSTV9HT09EIGFuZCAkVEVSTV9CQUQgLSBvaworCQk7OworCSosKQorCQkjIGRvIG5vdCBoYXZlIGJvdGggYnV0IG5vdCBhc2tlZCB0byBmYWlsIC0ganVzdCByZXBvcnQuCisJCWZhbHNlCisJCTs7CisJdCwsIiRURVJNX0dPT0QiKQorCQkjIGhhdmUgYmFkIChvciBuZXcpIGJ1dCBub3QgZ29vZCAob3Igb2xkKS4gIHdlIGNvdWxkIGJpc2VjdCBhbHRob3VnaAorCQkjIHRoaXMgaXMgbGVzcyBvcHRpbXVtLgorCQlldmFsX2dldHRleHRsbiAiV2FybmluZzogYmlzZWN0aW5nIG9ubHkgd2l0aCBhIFwkVEVSTV9CQUQgY29tbWl0LiIgPiYyCisJCWlmIHRlc3QgLXQgMAorCQl0aGVuCisJCQkjIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisJCQkjIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKwkJCSMgYXQgdGhpcyBwb2ludC4KKwkJCWdldHRleHQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIiA+JjIKKwkJCXJlYWQgeWVzbm8KKwkJCWNhc2UgIiR5ZXNubyIgaW4gW05uXSopIGV4aXQgMSA7OyBlc2FjCisJCWZpCisJCTogYmlzZWN0IHdpdGhvdXQgJFRFUk1fR09PRC4uLgorCQk7OworCSopCisJCWJhZF9zeW49JChiaXNlY3Rfdm9jIGJhZCkKKwkJZ29vZF9zeW49JChiaXNlY3Rfdm9jIGdvb2QpCisJCWlmIHRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIKKwkJdGhlbgorCisJCQlldmFsX2dldHRleHRsbiAiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgXCRiYWRfc3luIGFuZCBvbmUgXCRnb29kX3N5biByZXZpc2lvbi4KKyhZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgXCRiYWRfc3luXCIgYW5kIFwiZ2l0IGJpc2VjdCBcJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIgPiYyCisJCWVsc2UKKwkJCWV2YWxfZ2V0dGV4dGxuICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi4KK1lvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgXCRnb29kX3N5biBhbmQgb25lIFwkYmFkX3N5biByZXZpc2lvbi4KKyhZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgXCRiYWRfc3luXCIgYW5kIFwiZ2l0IGJpc2VjdCBcJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIgPiYyCisJCWZpCisJCWV4aXQgMSA7OworCWVzYWMKK30KKworYmlzZWN0X2F1dG9fbmV4dCgpIHsKKwliaXNlY3RfbmV4dF9jaGVjayAmJiBiaXNlY3RfbmV4dCB8fCA6Cit9CisKK2Jpc2VjdF9uZXh0KCkgeworCWNhc2UgIiQjIiBpbiAwKSA7OyAqKSB1c2FnZSA7OyBlc2FjCisJYmlzZWN0X2F1dG9zdGFydAorCWJpc2VjdF9uZXh0X2NoZWNrICRURVJNX0dPT0QKKworCSMgUGVyZm9ybSBhbGwgYmlzZWN0aW9uIGNvbXB1dGF0aW9uLCBkaXNwbGF5IGFuZCBjaGVja291dAorCWdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsICQodGVzdCAtZiAiJEdJVF9ESVIvQklTRUNUX0hFQUQiICYmIGVjaG8gLS1uby1jaGVja291dCkKKwlyZXM9JD8KKworCSMgQ2hlY2sgaWYgd2Ugc2hvdWxkIGV4aXQgYmVjYXVzZSBiaXNlY3Rpb24gaXMgZmluaXNoZWQKKwlpZiB0ZXN0ICRyZXMgLWVxIDEwCisJdGhlbgorCQliYWRfcmV2PSQoZ2l0IHNob3ctcmVmIC0taGFzaCAtLXZlcmlmeSByZWZzL2Jpc2VjdC8kVEVSTV9CQUQpCisJCWJhZF9jb21taXQ9JChnaXQgc2hvdy1icmFuY2ggJGJhZF9yZXYpCisJCWVjaG8gIiMgZmlyc3QgJFRFUk1fQkFEIGNvbW1pdDogJGJhZF9jb21taXQiID4+IiRHSVRfRElSL0JJU0VDVF9MT0ciCisJCWV4aXQgMAorCWVsaWYgdGVzdCAkcmVzIC1lcSAyCisJdGhlbgorCQllY2hvICIjIG9ubHkgc2tpcHBlZCBjb21taXRzIGxlZnQgdG8gdGVzdCIgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIKKwkJZ29vZF9yZXZzPSQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKSIgInJlZnMvYmlzZWN0LyRURVJNX0dPT0QtKiIpCisJCWZvciBza2lwcGVkIGluICQoZ2l0IHJldi1saXN0IHJlZnMvYmlzZWN0LyRURVJNX0JBRCAtLW5vdCAkZ29vZF9yZXZzKQorCQlkbworCQkJc2tpcHBlZF9jb21taXQ9JChnaXQgc2hvdy1icmFuY2ggJHNraXBwZWQpCisJCQllY2hvICIjIHBvc3NpYmxlIGZpcnN0ICRURVJNX0JBRCBjb21taXQ6ICRza2lwcGVkX2NvbW1pdCIgPj4iJEdJVF9ESVIvQklTRUNUX0xPRyIKKwkJZG9uZQorCQlleGl0ICRyZXMKKwlmaQorCisJIyBDaGVjayBmb3IgYW4gZXJyb3IgaW4gdGhlIGJpc2VjdGlvbiBwcm9jZXNzCisJdGVzdCAkcmVzIC1uZSAwICYmIGV4aXQgJHJlcworCisJcmV0dXJuIDAKK30KKworYmlzZWN0X3Zpc3VhbGl6ZSgpIHsKKwliaXNlY3RfbmV4dF9jaGVjayBmYWlsCisKKwlpZiB0ZXN0ICQjID0gMAorCXRoZW4KKwkJaWYgdGVzdCAtbiAiJHtESVNQTEFZK3NldH0ke1NFU1NJT05OQU1FK3NldH0ke01TWVNURU0rc2V0fSR7U0VDVVJJVFlTRVNTSU9OSUQrc2V0fSIgJiYKKwkJCXR5cGUgZ2l0ayA+L2Rldi9udWxsIDI+JjEKKwkJdGhlbgorCQkJc2V0IGdpdGsKKwkJZWxzZQorCQkJc2V0IGdpdCBsb2cKKwkJZmkKKwllbHNlCisJCWNhc2UgIiQxIiBpbgorCQlnaXQqfHRpZykgOzsKKwkJLSopCXNldCBnaXQgbG9nICIkQCIgOzsKKwkJKikJc2V0IGdpdCAiJEAiIDs7CisJCWVzYWMKKwlmaQorCisJZXZhbCAnIiRAIicgLS1iaXNlY3QgLS0gJChjYXQgIiRHSVRfRElSL0JJU0VDVF9OQU1FUyIpCit9CisKK2Jpc2VjdF9yZXNldCgpIHsKKwl0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfU1RBUlQiIHx8IHsKKwkJZ2V0dGV4dGxuICJXZSBhcmUgbm90IGJpc2VjdGluZy4iCisJCXJldHVybgorCX0KKwljYXNlICIkIyIgaW4KKwkwKSBicmFuY2g9JChjYXQgIiRHSVRfRElSL0JJU0VDVF9TVEFSVCIpIDs7CisJMSkgZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5ICIkMV57Y29tbWl0fSIgPi9kZXYvbnVsbCB8fCB7CisJCQlpbnZhbGlkPSIkMSIKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIidcJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIpIgorCQl9CisJCWJyYW5jaD0iJDEiIDs7CisJKikKKwkJdXNhZ2UgOzsKKwllc2FjCisKKwlpZiAhIHRlc3QgLWYgIiRHSVRfRElSL0JJU0VDVF9IRUFEIiAmJiAhIGdpdCBjaGVja291dCAiJGJyYW5jaCIgLS0KKwl0aGVuCisJCWRpZSAiJChldmFsX2dldHRleHQgIkNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnXCRicmFuY2gnLgorVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iKSIKKwlmaQorCWJpc2VjdF9jbGVhbl9zdGF0ZQorfQorCitiaXNlY3RfY2xlYW5fc3RhdGUoKSB7CisJIyBUaGVyZSBtYXkgYmUgc29tZSByZWZzIHBhY2tlZCBkdXJpbmcgYmlzZWN0aW9uLgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUocmVmbmFtZSkgJShvYmplY3RuYW1lKScgcmVmcy9iaXNlY3QvXCogfAorCXdoaWxlIHJlYWQgcmVmIGhhc2gKKwlkbworCQlnaXQgdXBkYXRlLXJlZiAtZCAkcmVmICRoYXNoIHx8IGV4aXQKKwlkb25lCisJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9FWFBFQ1RFRF9SRVYiICYmCisJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9BTkNFU1RPUlNfT0siICYmCisJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9MT0ciICYmCisJcm0gLWYgIiRHSVRfRElSL0JJU0VDVF9OQU1FUyIgJiYKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX1JVTiIgJiYKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX1RFUk1TIiAmJgorCSMgQ2xlYW51cCBoZWFkLW5hbWUgaWYgaXQgZ290IGxlZnQgYnkgYW4gb2xkIHZlcnNpb24gb2YgZ2l0LWJpc2VjdAorCXJtIC1mICIkR0lUX0RJUi9oZWFkLW5hbWUiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgLS1uby1kZXJlZiBCSVNFQ1RfSEVBRCAmJgorCSMgY2xlYW4gdXAgQklTRUNUX1NUQVJUIGxhc3QKKwlybSAtZiAiJEdJVF9ESVIvQklTRUNUX1NUQVJUIgorfQorCitiaXNlY3RfcmVwbGF5ICgpIHsKKwlmaWxlPSIkMSIKKwl0ZXN0ICIkIyIgLWVxIDEgfHwgZGllICIkKGdldHRleHQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iKSIKKwl0ZXN0IC1yICIkZmlsZSIgfHwgZGllICIkKGV2YWxfZ2V0dGV4dCAiY2Fubm90IHJlYWQgXCRmaWxlIGZvciByZXBsYXlpbmciKSIKKwliaXNlY3RfcmVzZXQKKwl3aGlsZSByZWFkIGdpdCBiaXNlY3QgY29tbWFuZCByZXYKKwlkbworCQl0ZXN0ICIkZ2l0ICRiaXNlY3QiID0gImdpdCBiaXNlY3QiIHx8IHRlc3QgIiRnaXQiID0gImdpdC1iaXNlY3QiIHx8IGNvbnRpbnVlCisJCWlmIHRlc3QgIiRnaXQiID0gImdpdC1iaXNlY3QiCisJCXRoZW4KKwkJCXJldj0iJGNvbW1hbmQiCisJCQljb21tYW5kPSIkYmlzZWN0IgorCQlmaQorCQlnZXRfdGVybXMKKwkJY2hlY2tfYW5kX3NldF90ZXJtcyAiJGNvbW1hbmQiCisJCWNhc2UgIiRjb21tYW5kIiBpbgorCQlzdGFydCkKKwkJCWNtZD0iYmlzZWN0X3N0YXJ0ICRyZXYiCisJCQlldmFsICIkY21kIiA7OworCQkiJFRFUk1fR09PRCJ8IiRURVJNX0JBRCJ8c2tpcCkKKwkJCWJpc2VjdF93cml0ZSAiJGNvbW1hbmQiICIkcmV2IiA7OworCQl0ZXJtcykKKwkJCWJpc2VjdF90ZXJtcyAkcmV2IDs7CisJCSopCisJCQlkaWUgIiQoZ2V0dGV4dCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IikiIDs7CisJCWVzYWMKKwlkb25lIDwiJGZpbGUiCisJYmlzZWN0X2F1dG9fbmV4dAorfQorCitiaXNlY3RfcnVuICgpIHsKKwliaXNlY3RfbmV4dF9jaGVjayBmYWlsCisKKwl3aGlsZSB0cnVlCisJZG8KKwkJY29tbWFuZD0iJEAiCisJCWV2YWxfZ2V0dGV4dGxuICJydW5uaW5nIFwkY29tbWFuZCIKKwkJIiRAIgorCQlyZXM9JD8KKworCQkjIENoZWNrIGZvciByZWFsbHkgYmFkIHJ1biBlcnJvci4KKwkJaWYgWyAkcmVzIC1sdCAwIC1vICRyZXMgLWdlIDEyOCBdCisJCXRoZW4KKwkJCWV2YWxfZ2V0dGV4dGxuICJiaXNlY3QgcnVuIGZhaWxlZDoKK2V4aXQgY29kZSBcJHJlcyBmcm9tICdcJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiID4mMgorCQkJZXhpdCAkcmVzCisJCWZpCisKKwkJIyBGaW5kIGN1cnJlbnQgc3RhdGUgZGVwZW5kaW5nIG9uIHJ1biBzdWNjZXNzIG9yIGZhaWx1cmUuCisJCSMgQSBzcGVjaWFsIGV4aXQgY29kZSBvZiAxMjUgbWVhbnMgY2Fubm90IHRlc3QuCisJCWlmIFsgJHJlcyAtZXEgMTI1IF0KKwkJdGhlbgorCQkJc3RhdGU9J3NraXAnCisJCWVsaWYgWyAkcmVzIC1ndCAwIF0KKwkJdGhlbgorCQkJc3RhdGU9IiRURVJNX0JBRCIKKwkJZWxzZQorCQkJc3RhdGU9IiRURVJNX0dPT0QiCisJCWZpCisKKwkJIyBXZSBoYXZlIHRvIHVzZSBhIHN1YnNoZWxsIGJlY2F1c2UgImJpc2VjdF9zdGF0ZSIgY2FuIGV4aXQuCisJCSggYmlzZWN0X3N0YXRlICRzdGF0ZSA+IiRHSVRfRElSL0JJU0VDVF9SVU4iICkKKwkJcmVzPSQ/CisKKwkJY2F0ICIkR0lUX0RJUi9CSVNFQ1RfUlVOIgorCisJCWlmIHNhbmVfZ3JlcCAiZmlyc3QgJFRFUk1fQkFEIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiICIkR0lUX0RJUi9CSVNFQ1RfUlVOIiBcCisJCQk+L2Rldi9udWxsCisJCXRoZW4KKwkJCWdldHRleHRsbiAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiID4mMgorCQkJZXhpdCAkcmVzCisJCWZpCisKKwkJaWYgWyAkcmVzIC1uZSAwIF0KKwkJdGhlbgorCQkJZXZhbF9nZXR0ZXh0bG4gImJpc2VjdCBydW4gZmFpbGVkOgorJ2Jpc2VjdF9zdGF0ZSBcJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlIFwkcmVzIiA+JjIKKwkJCWV4aXQgJHJlcworCQlmaQorCisJCWlmIHNhbmVfZ3JlcCAiaXMgdGhlIGZpcnN0ICRURVJNX0JBRCBjb21taXQiICIkR0lUX0RJUi9CSVNFQ1RfUlVOIiA+L2Rldi9udWxsCisJCXRoZW4KKwkJCWdldHRleHRsbiAiYmlzZWN0IHJ1biBzdWNjZXNzIgorCQkJZXhpdCAwOworCQlmaQorCisJZG9uZQorfQorCitiaXNlY3RfbG9nICgpIHsKKwl0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfTE9HIiB8fCBkaWUgIiQoZ2V0dGV4dCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIikiCisJY2F0ICIkR0lUX0RJUi9CSVNFQ1RfTE9HIgorfQorCitnZXRfdGVybXMgKCkgeworCWlmIHRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9URVJNUyIKKwl0aGVuCisJCXsKKwkJcmVhZCBURVJNX0JBRAorCQlyZWFkIFRFUk1fR09PRAorCQl9IDwiJEdJVF9ESVIvQklTRUNUX1RFUk1TIgorCWZpCit9CisKK3dyaXRlX3Rlcm1zICgpIHsKKwlURVJNX0JBRD0kMQorCVRFUk1fR09PRD0kMgorCWlmIHRlc3QgIiRURVJNX0JBRCIgPSAiJFRFUk1fR09PRCIKKwl0aGVuCisJCWRpZSAiJChnZXR0ZXh0ICJwbGVhc2UgdXNlIHR3byBkaWZmZXJlbnQgdGVybXMiKSIKKwlmaQorCWNoZWNrX3Rlcm1fZm9ybWF0ICIkVEVSTV9CQUQiIGJhZAorCWNoZWNrX3Rlcm1fZm9ybWF0ICIkVEVSTV9HT09EIiBnb29kCisJcHJpbnRmICclc1xuJXNcbicgIiRURVJNX0JBRCIgIiRURVJNX0dPT0QiID4iJEdJVF9ESVIvQklTRUNUX1RFUk1TIgorfQorCitjaGVja190ZXJtX2Zvcm1hdCAoKSB7CisJdGVybT0kMQorCWdpdCBjaGVjay1yZWYtZm9ybWF0IHJlZnMvYmlzZWN0LyIkdGVybSIgfHwKKwlkaWUgIiQoZXZhbF9nZXR0ZXh0ICInXCR0ZXJtJyBpcyBub3QgYSB2YWxpZCB0ZXJtIikiCisJY2FzZSAiJHRlcm0iIGluCisJaGVscHxzdGFydHx0ZXJtc3xza2lwfG5leHR8cmVzZXR8dmlzdWFsaXplfHJlcGxheXxsb2d8cnVuKQorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJjYW4ndCB1c2UgdGhlIGJ1aWx0aW4gY29tbWFuZCAnXCR0ZXJtJyBhcyBhIHRlcm0iKSIKKwkJOzsKKwliYWR8bmV3KQorCQlpZiB0ZXN0ICIkMiIgIT0gYmFkCisJCXRoZW4KKwkJCSMgSW4gdGhlb3J5LCBub3RoaW5nIHByZXZlbnRzIHN3YXBwaW5nCisJCQkjIGNvbXBsZXRlbHkgZ29vZCBhbmQgYmFkLCBidXQgdGhpcyBzaXR1YXRpb24KKwkJCSMgY291bGQgYmUgY29uZnVzaW5nIGFuZCBoYXNuJ3QgYmVlbiB0ZXN0ZWQKKwkJCSMgZW5vdWdoLiBGb3JiaWQgaXQgZm9yIG5vdy4KKwkJCWRpZSAiJChldmFsX2dldHRleHQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0ZXJtICdcJHRlcm0nIikiCisJCWZpCisJCTs7CisJZ29vZHxvbGQpCisJCWlmIHRlc3QgIiQyIiAhPSBnb29kCisJCXRoZW4KKwkJCWRpZSAiJChldmFsX2dldHRleHQgImNhbid0IGNoYW5nZSB0aGUgbWVhbmluZyBvZiB0ZXJtICdcJHRlcm0nIikiCisJCWZpCisJCTs7CisJZXNhYworfQorCitjaGVja19hbmRfc2V0X3Rlcm1zICgpIHsKKwljbWQ9IiQxIgorCWNhc2UgIiRjbWQiIGluCisJc2tpcHxzdGFydHx0ZXJtcykgOzsKKwkqKQorCQlpZiB0ZXN0IC1zICIkR0lUX0RJUi9CSVNFQ1RfVEVSTVMiICYmIHRlc3QgIiRjbWQiICE9ICIkVEVSTV9CQUQiICYmIHRlc3QgIiRjbWQiICE9ICIkVEVSTV9HT09EIgorCQl0aGVuCisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSBcJFRFUk1fQkFEL1wkVEVSTV9HT09EIGJpc2VjdC4iKSIKKwkJZmkKKwkJY2FzZSAiJGNtZCIgaW4KKwkJYmFkfGdvb2QpCisJCQlpZiAhIHRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9URVJNUyIKKwkJCXRoZW4KKwkJCQl3cml0ZV90ZXJtcyBiYWQgZ29vZAorCQkJZmkKKwkJCTs7CisJCW5ld3xvbGQpCisJCQlpZiAhIHRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9URVJNUyIKKwkJCXRoZW4KKwkJCQl3cml0ZV90ZXJtcyBuZXcgb2xkCisJCQlmaQorCQkJOzsKKwkJZXNhYyA7OworCWVzYWMKK30KKworYmlzZWN0X3ZvYyAoKSB7CisJY2FzZSAiJDEiIGluCisJYmFkKSBlY2hvICJiYWR8bmV3IiA7OworCWdvb2QpIGVjaG8gImdvb2R8b2xkIiA7OworCWVzYWMKK30KKworYmlzZWN0X3Rlcm1zICgpIHsKKwlnZXRfdGVybXMKKwlpZiAhIHRlc3QgLXMgIiRHSVRfRElSL0JJU0VDVF9URVJNUyIKKwl0aGVuCisJCWRpZSAiJChnZXR0ZXh0ICJubyB0ZXJtcyBkZWZpbmVkIikiCisJZmkKKwljYXNlICIkIyIgaW4KKwkwKQorCQlnZXR0ZXh0bG4gIllvdXIgY3VycmVudCB0ZXJtcyBhcmUgJFRFUk1fR09PRCBmb3IgdGhlIG9sZCBzdGF0ZQorYW5kICRURVJNX0JBRCBmb3IgdGhlIG5ldyBzdGF0ZS4iCisJCTs7CisJMSkKKwkJYXJnPSQxCisJCWNhc2UgIiRhcmciIGluCisJCQktLXRlcm0tZ29vZHwtLXRlcm0tb2xkKQorCQkJCXByaW50ZiAnJXNcbicgIiRURVJNX0dPT0QiCisJCQkJOzsKKwkJCS0tdGVybS1iYWR8LS10ZXJtLW5ldykKKwkJCQlwcmludGYgJyVzXG4nICIkVEVSTV9CQUQiCisJCQkJOzsKKwkJCSopCisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiaW52YWxpZCBhcmd1bWVudCBcJGFyZyBmb3IgJ2dpdCBiaXNlY3QgdGVybXMnLgorU3VwcG9ydGVkIG9wdGlvbnMgYXJlOiAtLXRlcm0tZ29vZHwtLXRlcm0tb2xkIGFuZCAtLXRlcm0tYmFkfC0tdGVybS1uZXcuIikiCisJCQkJOzsKKwkJZXNhYworCQk7OworCSopCisJCXVzYWdlIDs7CisJZXNhYworfQorCitjYXNlICIkIyIgaW4KKzApCisJdXNhZ2UgOzsKKyopCisJY21kPSIkMSIKKwlnZXRfdGVybXMKKwlzaGlmdAorCWNhc2UgIiRjbWQiIGluCisJaGVscCkKKwkJZ2l0IGJpc2VjdCAtaCA7OworCXN0YXJ0KQorCQliaXNlY3Rfc3RhcnQgIiRAIiA7OworCWJhZHxnb29kfG5ld3xvbGR8IiRURVJNX0JBRCJ8IiRURVJNX0dPT0QiKQorCQliaXNlY3Rfc3RhdGUgIiRjbWQiICIkQCIgOzsKKwlza2lwKQorCQliaXNlY3Rfc2tpcCAiJEAiIDs7CisJbmV4dCkKKwkJIyBOb3Qgc3VyZSB3ZSB3YW50ICJuZXh0IiBhdCB0aGUgVUkgbGV2ZWwgYW55bW9yZS4KKwkJYmlzZWN0X25leHQgIiRAIiA7OworCXZpc3VhbGl6ZXx2aWV3KQorCQliaXNlY3RfdmlzdWFsaXplICIkQCIgOzsKKwlyZXNldCkKKwkJYmlzZWN0X3Jlc2V0ICIkQCIgOzsKKwlyZXBsYXkpCisJCWJpc2VjdF9yZXBsYXkgIiRAIiA7OworCWxvZykKKwkJYmlzZWN0X2xvZyA7OworCXJ1bikKKwkJYmlzZWN0X3J1biAiJEAiIDs7CisJdGVybXMpCisJCWJpc2VjdF90ZXJtcyAiJEAiIDs7CisJKikKKwkJdXNhZ2UgOzsKKwllc2FjCitlc2FjCmRpZmYgLS1naXQgYS9naXQtY29tcGF0LXV0aWwuaCBiL2dpdC1jb21wYXQtdXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OTY0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtY29tcGF0LXV0aWwuaApAQCAtMCwwICsxLDk1MiBAQAorI2lmbmRlZiBHSVRfQ09NUEFUX1VUSUxfSAorI2RlZmluZSBHSVRfQ09NUEFUX1VUSUxfSAorCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisKKworLyogRGVyaXZlZCBmcm9tIExpbnV4ICJGZWF0dXJlcyBUZXN0IE1hY3JvIiBoZWFkZXIKKyAqIENvbnZlbmllbmNlIG1hY3JvcyB0byB0ZXN0IHRoZSB2ZXJzaW9ucyBvZiBnY2MgKG9yCisgKiBhIGNvbXBhdGlibGUgY29tcGlsZXIpLgorICogVXNlIHRoZW0gbGlrZSB0aGlzOgorICogICNpZiBHSVRfR05VQ19QUkVSRVEgKDIsOCkKKyAqICAgLi4uIGNvZGUgcmVxdWlyaW5nIGdjYyAyLjggb3IgbGF0ZXIgLi4uCisgKiAgI2VuZGlmCisqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19HTlVDX01JTk9SX18pCisjIGRlZmluZSBHSVRfR05VQ19QUkVSRVEobWFqLCBtaW4pIFwKKwkoKF9fR05VQ19fIDw8IDE2KSArIF9fR05VQ19NSU5PUl9fID49ICgobWFqKSA8PCAxNikgKyAobWluKSkKKyNlbHNlCisgI2RlZmluZSBHSVRfR05VQ19QUkVSRVEobWFqLCBtaW4pIDAKKyNlbmRpZgorCisKKyNpZm5kZWYgRkxFWF9BUlJBWQorLyoKKyAqIFNlZSBpZiBvdXIgY29tcGlsZXIgaXMga25vd24gdG8gc3VwcG9ydCBmbGV4aWJsZSBhcnJheSBtZW1iZXJzLgorICovCisjaWYgZGVmaW5lZChfX1NURENfVkVSU0lPTl9fKSAmJiAoX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMKSAmJiAoIWRlZmluZWQoX19TVU5QUk9fQykgfHwgKF9fU1VOUFJPX0MgPiAweDU4MCkpCisjIGRlZmluZSBGTEVYX0FSUkFZIC8qIGVtcHR5ICovCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKQorIyBpZiAoX19HTlVDX18gPj0gMykKKyMgIGRlZmluZSBGTEVYX0FSUkFZIC8qIGVtcHR5ICovCisjIGVsc2UKKyMgIGRlZmluZSBGTEVYX0FSUkFZIDAgLyogb2xkZXIgR05VIGV4dGVuc2lvbiAqLworIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBPdGhlcndpc2UsIGRlZmF1bHQgdG8gc2FmZXIgYnV0IGEgYml0IHdhc3RlZnVsIHRyYWRpdGlvbmFsIHN0eWxlCisgKi8KKyNpZm5kZWYgRkxFWF9BUlJBWQorIyBkZWZpbmUgRkxFWF9BUlJBWSAxCisjZW5kaWYKKyNlbmRpZgorCisKKy8qCisgKiBCVUlMRF9BU1NFUlRfT1JfWkVSTyAtIGFzc2VydCBhIGJ1aWxkLXRpbWUgZGVwZW5kZW5jeSwgYXMgYW4gZXhwcmVzc2lvbi4KKyAqIEBjb25kOiB0aGUgY29tcGlsZS10aW1lIGNvbmRpdGlvbiB3aGljaCBtdXN0IGJlIHRydWUuCisgKgorICogWW91ciBjb21waWxlIHdpbGwgZmFpbCBpZiB0aGUgY29uZGl0aW9uIGlzbid0IHRydWUsIG9yIGNhbid0IGJlIGV2YWx1YXRlZAorICogYnkgdGhlIGNvbXBpbGVyLiAgVGhpcyBjYW4gYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uOiBpdHMgdmFsdWUgaXMgIjAiLgorICoKKyAqIEV4YW1wbGU6CisgKgkjZGVmaW5lIGZvb190b19jaGFyKGZvbykJCQkJCVwKKyAqCQkgKChjaGFyICopKGZvbykJCQkJCQlcCisgKgkJICArIEJVSUxEX0FTU0VSVF9PUl9aRVJPKG9mZnNldG9mKHN0cnVjdCBmb28sIHN0cmluZykgPT0gMCkpCisgKi8KKyNkZWZpbmUgQlVJTERfQVNTRVJUX09SX1pFUk8oY29uZCkgXAorCShzaXplb2YoY2hhciBbMSAtIDIqIShjb25kKV0pIC0gMSkKKworI2lmIEdJVF9HTlVDX1BSRVJFUSgzLCAxKQorIC8qICZhcnJbMF0gZGVncmFkZXMgdG8gYSBwb2ludGVyOiBhIGRpZmZlcmVudCB0eXBlIGZyb20gYW4gYXJyYXkgKi8KKyMgZGVmaW5lIEJBUkZfVU5MRVNTX0FOX0FSUkFZKGFycikJCQkJCQlcCisJQlVJTERfQVNTRVJUX09SX1pFUk8oIV9fYnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AoX190eXBlb2ZfXyhhcnIpLCBcCisJCQkJCQkJICAgX190eXBlb2ZfXygmKGFycilbMF0pKSkKKyNlbHNlCisjIGRlZmluZSBCQVJGX1VOTEVTU19BTl9BUlJBWShhcnIpIDAKKyNlbmRpZgorLyoKKyAqIEFSUkFZX1NJWkUgLSBnZXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhIHZpc2libGUgYXJyYXkKKyAqICA8YXQ+IHg6IHRoZSBhcnJheSB3aG9zZSBzaXplIHlvdSB3YW50LgorICoKKyAqIFRoaXMgZG9lcyBub3Qgd29yayBvbiBwb2ludGVycywgb3IgYXJyYXlzIGRlY2xhcmVkIGFzIFtdLCBvcgorICogZnVuY3Rpb24gcGFyYW1ldGVycy4gIFdpdGggY29ycmVjdCBjb21waWxlciBzdXBwb3J0LCBzdWNoIHVzYWdlCisgKiB3aWxsIGNhdXNlIGEgYnVpbGQgZXJyb3IgKHNlZSB0aGUgYnVpbGRfYXNzZXJ0X29yX3plcm8gbWFjcm8pLgorICovCisjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pICsgQkFSRl9VTkxFU1NfQU5fQVJSQVkoeCkpCisKKyNkZWZpbmUgYml0c2l6ZW9mKHgpICAoQ0hBUl9CSVQgKiBzaXplb2YoeCkpCisKKyNkZWZpbmUgbWF4aW11bV9zaWduZWRfdmFsdWVfb2ZfdHlwZShhKSBcCisgICAgKElOVE1BWF9NQVggPj4gKGJpdHNpemVvZihpbnRtYXhfdCkgLSBiaXRzaXplb2YoYSkpKQorCisjZGVmaW5lIG1heGltdW1fdW5zaWduZWRfdmFsdWVfb2ZfdHlwZShhKSBcCisgICAgKFVJTlRNQVhfTUFYID4+IChiaXRzaXplb2YodWludG1heF90KSAtIGJpdHNpemVvZihhKSkpCisKKy8qCisgKiBTaWduZWQgaW50ZWdlciBvdmVyZmxvdyBpcyB1bmRlZmluZWQgaW4gQywgc28gaGVyZSdzIGEgaGVscGVyIG1hY3JvCisgKiB0byBkZXRlY3QgaWYgdGhlIHN1bSBvZiB0d28gaW50ZWdlcnMgd2lsbCBvdmVyZmxvdy4KKyAqCisgKiBSZXF1aXJlczogYSA+PSAwLCB0eXBlb2YoYSkgZXF1YWxzIHR5cGVvZihiKQorICovCisjZGVmaW5lIHNpZ25lZF9hZGRfb3ZlcmZsb3dzKGEsIGIpIFwKKyAgICAoKGIpID4gbWF4aW11bV9zaWduZWRfdmFsdWVfb2ZfdHlwZShhKSAtIChhKSkKKworI2RlZmluZSB1bnNpZ25lZF9hZGRfb3ZlcmZsb3dzKGEsIGIpIFwKKyAgICAoKGIpID4gbWF4aW11bV91bnNpZ25lZF92YWx1ZV9vZl90eXBlKGEpIC0gKGEpKQorCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgVFlQRU9GKHgpIChfX3R5cGVvZl9fKHgpKQorI2Vsc2UKKyNkZWZpbmUgVFlQRU9GKHgpCisjZW5kaWYKKworI2RlZmluZSBNU0IoeCwgYml0cykgKCh4KSAmIFRZUEVPRih4KSh+MFVMTCA8PCAoYml0c2l6ZW9mKHgpIC0gKGJpdHMpKSkpCisjZGVmaW5lIEhBU19NVUxUSV9CSVRTKGkpICAoKGkpICYgKChpKSAtIDEpKSAgLyogY2hlY2tzIGlmIGFuIGludGVnZXIgaGFzIG1vcmUgdGhhbiAxIGJpdCBzZXQgKi8KKworI2RlZmluZSBESVZfUk9VTkRfVVAobixkKSAoKChuKSArIChkKSAtIDEpIC8gKGQpKQorCisvKiBBcHByb3hpbWF0aW9uIG9mIHRoZSBsZW5ndGggb2YgdGhlIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyB0eXBlLiAqLworI2RlZmluZSBkZWNpbWFsX2xlbmd0aCh4KQkoKGludCkoc2l6ZW9mKHgpICogMi41NiArIDAuNSkgKyAxKQorCisjaWYgZGVmaW5lZChfX3N1bl9fKQorIC8qCisgICogT24gU29sYXJpcywgd2hlbiBfWE9QRU5fRVhURU5ERUQgaXMgc2V0LCBpdHMgaGVhZGVyIGZpbGUKKyAgKiBmb3JjZXMgdGhlIHByb2dyYW1zIHRvIGJlIFhQRzR2MiwgZGVmZWF0aW5nIGFueSBfWE9QRU5fU09VUkNFCisgICogc2V0dGluZyB0byBzYXkgd2UgYXJlIFhQRzUgb3IgWFBHNi4gIEFsc28gb24gU29sYXJpcywKKyAgKiBYUEc2IHByb2dyYW1zIG11c3QgYmUgY29tcGlsZWQgd2l0aCBhIGM5OSBjb21waWxlciwgd2hpbGUKKyAgKiBub24gWFBHNiBwcm9ncmFtcyBtdXN0IGJlIGNvbXBpbGVkIHdpdGggYSBwcmUtYzk5IGNvbXBpbGVyLgorICAqLworIyBpZiBfX1NURENfVkVSU0lPTl9fIC0gMCA+PSAxOTk5MDFMCisjIGRlZmluZSBfWE9QRU5fU09VUkNFIDYwMAorIyBlbHNlCisjIGRlZmluZSBfWE9QRU5fU09VUkNFIDUwMAorIyBlbmRpZgorI2VsaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19VU0xDX18pICYmIFwKKyAgICAgICFkZWZpbmVkKF9NX1VOSVgpICYmICFkZWZpbmVkKF9fc2dpKSAmJiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKSAmJiBcCisgICAgICAhZGVmaW5lZChfX1RBTkRFTSkgJiYgIWRlZmluZWQoX19RTlhfXykgJiYgIWRlZmluZWQoX19NaXJCU0RfXykgJiYgXAorICAgICAgIWRlZmluZWQoX19DWUdXSU5fXykKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA2MDAgLyogZ2xpYmMyIGFuZCBBSVggNS4zTCBuZWVkIDUwMCwgT3BlbkJTRCBuZWVkcyA2MDAgZm9yIFNfSVNMTksoKSAqLworI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEgLyogQUlYIDUuM0wgbmVlZHMgdGhpcyAqLworI2VuZGlmCisjZGVmaW5lIF9BTExfU09VUkNFIDEKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQorI2RlZmluZSBfQlNEX1NPVVJDRSAxCisjZGVmaW5lIF9ERUZBVUxUX1NPVVJDRSAxCisjZGVmaW5lIF9ORVRCU0RfU09VUkNFIDEKKyNkZWZpbmUgX1NHSV9TT1VSQ0UgMQorCisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoX19DWUdXSU5fXykgLyogQm90aCBNaW5HVyBhbmQgTVNWQyAqLworIyBpZiBkZWZpbmVkIChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX1dJTjMyX1dJTk5UKQorIyAgZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA1MDIKKyMgZW5kaWYKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTiAgLyogc3RvcHMgd2luZG93cy5oIGluY2x1ZGluZyB3aW5zb2NrLmggKi8KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNkZWZpbmUgR0lUX1dJTkRPV1NfTkFUSVZFCisjZW5kaWYKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lmZGVmIEhBVkVfU1RSSU5HU19ICisjaW5jbHVkZSA8c3RyaW5ncy5oPiAvKiBmb3Igc3RyY2FzZWNtcCgpICovCisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmZGVmIE5FRURTX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxyZWdleC5oPgorI2luY2x1ZGUgPHV0aW1lLmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisjaWZuZGVmIE5PX1NZU19QT0xMX0gKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxwb2xsLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0JTRF9TWVNDVEwKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisvKiBwdWxsIGluIFdpbmRvd3MgY29tcGF0aWJpbGl0eSBzdHVmZiAqLworI2luY2x1ZGUgImNvbXBhdC9taW5ndy5oIgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNpbmNsdWRlICJjb21wYXQvbXN2Yy5oIgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpZm5kZWYgTk9fU1lTX1NFTEVDVF9ICisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpZm5kZWYgTk9fSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaWZkZWYgTk9fSU5UUFRSX1QKKy8qCisgKiBPbiBJMTZMUDMyLCBJTFAzMiBhbmQgTFA2NCAibG9uZyIgaXMgdGhlIHNhdmUgYmV0LCBob3dldmVyCisgKiBvbiBMTFA4NiwgSUwzM0xMUDY0IGFuZCBQNjQgaXQgbmVlZHMgdG8gYmUgImxvbmcgbG9uZyIsCisgKiB3aGlsZSBvbiBJUDE2IGFuZCBJUDE2TDMyIGl0IGlzICJpbnQiIChyZXNwLiAic2hvcnQiKQorICogU2l6ZSBuZWVkcyB0byBtYXRjaCAob3IgZXhjZWVkKSAnc2l6ZW9mKHZvaWQgKiknLgorICogV2UgY2FuJ3QgdGFrZSAibG9uZyBsb25nIiBoZXJlIGFzIG5vdCBldmVyeWJvZHkgaGFzIGl0LgorICovCit0eXBlZGVmIGxvbmcgaW50cHRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdWludHB0cl90OworI2VuZGlmCisjdW5kZWYgX0FMTF9TT1VSQ0UgLyogQUlYIDUuM0wgZGVmaW5lcyBhIHN0cnVjdCBsaXN0IHdpdGggX0FMTF9TT1VSQ0UuICovCisjaW5jbHVkZSA8Z3JwLmg+CisjZGVmaW5lIF9BTExfU09VUkNFIDEKKyNlbmRpZgorCisvKiB1c2VkIG9uIE1hYyBPUyBYICovCisjaWZkZWYgUFJFQ09NUE9TRV9VTklDT0RFCisjaW5jbHVkZSAiY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5oIgorI2Vsc2UKKyNkZWZpbmUgcHJlY29tcG9zZV9zdHIoaW4saV9uZmQybmZjKQorI2RlZmluZSBwcmVjb21wb3NlX2FyZ3YoYyx2KQorI2RlZmluZSBwcm9iZV91dGY4X3BhdGhuYW1lX2NvbXBvc2l0aW9uKCkKKyNlbmRpZgorCisjaWZkZWYgTUtESVJfV09fVFJBSUxJTkdfU0xBU0gKKyNkZWZpbmUgbWtkaXIoYSxiKSBjb21wYXRfbWtkaXJfd29fdHJhaWxpbmdfc2xhc2goKGEpLChiKSkKK2V4dGVybiBpbnQgY29tcGF0X21rZGlyX3dvX3RyYWlsaW5nX3NsYXNoKGNvbnN0IGNoYXIqLCBtb2RlX3QpOworI2VuZGlmCisKKyNpZmRlZiBOT19TVFJVQ1RfSVRJTUVSVkFMCitzdHJ1Y3QgaXRpbWVydmFsIHsKKwlzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKKwlzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKK307CisjZW5kaWYKKworI2lmZGVmIE5PX1NFVElUSU1FUgorI2RlZmluZSBzZXRpdGltZXIod2hpY2gsdmFsdWUsb3ZhbHVlKQorI2VuZGlmCisKKyNpZm5kZWYgTk9fTElCR0VOX0gKKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNlbHNlCisjZGVmaW5lIGJhc2VuYW1lIGdpdGJhc2VuYW1lCitleHRlcm4gY2hhciAqZ2l0YmFzZW5hbWUoY2hhciAqKTsKKyNlbmRpZgorCisjaWZuZGVmIE5PX0lDT05WCisjaW5jbHVkZSA8aWNvbnYuaD4KKyNlbmRpZgorCisjaWZuZGVmIE5PX09QRU5TU0wKKyNpZmRlZiBfX0FQUExFX18KKyNkZWZpbmUgX19BVkFJTEFCSUxJVFlfTUFDUk9TX1VTRVNfQVZBSUxBQklMSVRZIDAKKyNpbmNsdWRlIDxBdmFpbGFiaWxpdHlNYWNyb3MuaD4KKyN1bmRlZiBERVBSRUNBVEVEX0FUVFJJQlVURQorI2RlZmluZSBERVBSRUNBVEVEX0FUVFJJQlVURQorI3VuZGVmIF9fQVZBSUxBQklMSVRZX01BQ1JPU19VU0VTX0FWQUlMQUJJTElUWQorI2VuZGlmCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorI2lmZGVmIE5PX0hNQUNfQ1RYX0NMRUFOVVAKKyNkZWZpbmUgSE1BQ19DVFhfY2xlYW51cCBITUFDX2NsZWFudXAKKyNlbmRpZgorI2VuZGlmCisKKy8qIE9uIG1vc3Qgc3lzdGVtcyA8bmV0ZGIuaD4gd291bGQgaGF2ZSBnaXZlbiB1cyB0aGlzLCBidXQKKyAqIG5vdCBvbiBzb21lIHN5c3RlbXMgKGUuZy4gei9PUykuCisgKi8KKyNpZm5kZWYgTklfTUFYSE9TVAorI2RlZmluZSBOSV9NQVhIT1NUIDEwMjUKKyNlbmRpZgorCisjaWZuZGVmIE5JX01BWFNFUlYKKyNkZWZpbmUgTklfTUFYU0VSViAzMgorI2VuZGlmCisKKy8qIE9uIG1vc3Qgc3lzdGVtcyA8bGltaXRzLmg+IHdvdWxkIGhhdmUgZ2l2ZW4gdXMgdGhpcywgYnV0CisgKiBub3Qgb24gc29tZSBzeXN0ZW1zIChlLmcuIEdOVS9IdXJkKS4KKyAqLworI2lmbmRlZiBQQVRIX01BWAorI2RlZmluZSBQQVRIX01BWCA0MDk2CisjZW5kaWYKKworI2lmbmRlZiBQUkl1TUFYCisjZGVmaW5lIFBSSXVNQVggImxsdSIKKyNlbmRpZgorCisjaWZuZGVmIFBSSXUzMgorI2RlZmluZSBQUkl1MzIgInUiCisjZW5kaWYKKworI2lmbmRlZiBQUkl4MzIKKyNkZWZpbmUgUFJJeDMyICJ4IgorI2VuZGlmCisKKyNpZm5kZWYgUFJJbzMyCisjZGVmaW5lIFBSSW8zMiAibyIKKyNlbmRpZgorCisjaWZuZGVmIFBBVEhfU0VQCisjZGVmaW5lIFBBVEhfU0VQICc6JworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BBVEhTX0gKKyNpbmNsdWRlIDxwYXRocy5oPgorI2VuZGlmCisjaWZuZGVmIF9QQVRIX0RFRlBBVEgKKyNkZWZpbmUgX1BBVEhfREVGUEFUSCAiL3Vzci9sb2NhbC9iaW46L3Vzci9iaW46L2JpbiIKKyNlbmRpZgorCisjaWZuZGVmIFNUUklQX0VYVEVOU0lPTgorI2RlZmluZSBTVFJJUF9FWFRFTlNJT04gIiIKKyNlbmRpZgorCisjaWZuZGVmIGhhc19kb3NfZHJpdmVfcHJlZml4CitzdGF0aWMgaW5saW5lIGludCBnaXRfaGFzX2Rvc19kcml2ZV9wcmVmaXgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gMDsKK30KKyNkZWZpbmUgaGFzX2Rvc19kcml2ZV9wcmVmaXggZ2l0X2hhc19kb3NfZHJpdmVfcHJlZml4CisjZW5kaWYKKworI2lmbmRlZiBpc19kaXJfc2VwCitzdGF0aWMgaW5saW5lIGludCBnaXRfaXNfZGlyX3NlcChpbnQgYykKK3sKKwlyZXR1cm4gYyA9PSAnLyc7Cit9CisjZGVmaW5lIGlzX2Rpcl9zZXAgZ2l0X2lzX2Rpcl9zZXAKKyNlbmRpZgorCisjaWZuZGVmIG9mZnNldF8xc3RfY29tcG9uZW50CitzdGF0aWMgaW5saW5lIGludCBnaXRfb2Zmc2V0XzFzdF9jb21wb25lbnQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gaXNfZGlyX3NlcChwYXRoWzBdKTsKK30KKyNkZWZpbmUgb2Zmc2V0XzFzdF9jb21wb25lbnQgZ2l0X29mZnNldF8xc3RfY29tcG9uZW50CisjZW5kaWYKKworI2lmbmRlZiBmaW5kX2xhc3RfZGlyX3NlcAorc3RhdGljIGlubGluZSBjaGFyICpnaXRfZmluZF9sYXN0X2Rpcl9zZXAoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gc3RycmNocihwYXRoLCAnLycpOworfQorI2RlZmluZSBmaW5kX2xhc3RfZGlyX3NlcCBnaXRfZmluZF9sYXN0X2Rpcl9zZXAKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0hQX2NjKSAmJiAoX19IUF9jYyA+PSA2MTAwMCkKKyNkZWZpbmUgTk9SRVRVUk4gX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKQorI2RlZmluZSBOT1JFVFVSTl9QVFIKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKE5PX05PUkVUVVJOKQorI2RlZmluZSBOT1JFVFVSTiBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQorI2RlZmluZSBOT1JFVFVSTl9QVFIgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIE5PUkVUVVJOIF9fZGVjbHNwZWMobm9yZXR1cm4pCisjZGVmaW5lIE5PUkVUVVJOX1BUUgorI2Vsc2UKKyNkZWZpbmUgTk9SRVRVUk4KKyNkZWZpbmUgTk9SRVRVUk5fUFRSCisjaWZuZGVmIF9fR05VQ19fCisjaWZuZGVmIF9fYXR0cmlidXRlX18KKyNkZWZpbmUgX19hdHRyaWJ1dGVfXyh4KQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgc2VudGluZWwgYXR0cmlidXRlIGlzIHZhbGlkIGZyb20gZ2NjIHZlcnNpb24gNC4wICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID49IDQpCisjZGVmaW5lIExBU1RfQVJHX01VU1RfQkVfTlVMTCBfX2F0dHJpYnV0ZV9fKChzZW50aW5lbCkpCisjZWxzZQorI2RlZmluZSBMQVNUX0FSR19NVVNUX0JFX05VTEwKKyNlbmRpZgorCisjaW5jbHVkZSAiY29tcGF0L2Jzd2FwLmgiCisKKyNpbmNsdWRlICJ3aWxkbWF0Y2guaCIKKworc3RydWN0IHN0cmJ1ZjsKKworLyogR2VuZXJhbCBoZWxwZXIgZnVuY3Rpb25zICovCitleHRlcm4gdm9pZCB2cmVwb3J0Zihjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpOworZXh0ZXJuIE5PUkVUVVJOIHZvaWQgdXNhZ2UoY29uc3QgY2hhciAqZXJyKTsKK2V4dGVybiBOT1JFVFVSTiB2b2lkIHVzYWdlZihjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitleHRlcm4gTk9SRVRVUk4gdm9pZCBkaWUoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIE5PUkVUVVJOIHZvaWQgZGllX2Vycm5vKGNvbnN0IGNoYXIgKmVyciwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKK2V4dGVybiBpbnQgZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOworZXh0ZXJuIHZvaWQgd2FybmluZyhjb25zdCBjaGFyICplcnIsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisKKyNpZm5kZWYgTk9fT1BFTlNTTAorI2lmZGVmIEFQUExFX0NPTU1PTl9DUllQVE8KKyNpbmNsdWRlICJjb21wYXQvYXBwbGUtY29tbW9uLWNyeXB0by5oIgorI2Vsc2UKKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorI2luY2x1ZGUgPG9wZW5zc2wvaG1hYy5oPgorI2VuZGlmIC8qIEFQUExFX0NPTU1PTl9DUllQVE8gKi8KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorI2VuZGlmIC8qIE5PX09QRU5TU0wgKi8KKworLyoKKyAqIExldCBjYWxsZXJzIGJlIGF3YXJlIG9mIHRoZSBjb25zdGFudCByZXR1cm4gdmFsdWU7IHRoaXMgY2FuIGhlbHAKKyAqIGdjYyB3aXRoIC1XdW5pbml0aWFsaXplZCBhbmFseXNpcy4gV2UgcmVzdHJpY3QgdGhpcyB0cmljayB0byBnY2MsIHRob3VnaCwKKyAqIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgbWF5IG5vdCBzdXBwb3J0IHZhcmlhZGljIG1hY3Jvcy4gU2luY2Ugd2UncmUgb25seQorICogdHJ5aW5nIHRvIGhlbHAgZ2NjLCBhbnl3YXksIGl0J3MgT0s7IG90aGVyIGNvbXBpbGVycyB3aWxsIGZhbGwgYmFjayB0bworICogdXNpbmcgdGhlIGZ1bmN0aW9uIGFzIHVzdWFsLgorICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykKK3N0YXRpYyBpbmxpbmUgaW50IGNvbnN0X2Vycm9yKHZvaWQpCit7CisJcmV0dXJuIC0xOworfQorI2RlZmluZSBlcnJvciguLi4pIChlcnJvcihfX1ZBX0FSR1NfXyksIGNvbnN0X2Vycm9yKCkpCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgc2V0X2RpZV9yb3V0aW5lKE5PUkVUVVJOX1BUUiB2b2lkICgqcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykpOworZXh0ZXJuIHZvaWQgc2V0X2Vycm9yX3JvdXRpbmUodm9pZCAoKnJvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpKTsKK2V4dGVybiB2b2lkIHNldF9kaWVfaXNfcmVjdXJzaW5nX3JvdXRpbmUoaW50ICgqcm91dGluZSkodm9pZCkpOworZXh0ZXJuIHZvaWQgc2V0X2Vycm9yX2hhbmRsZShGSUxFICopOworCitleHRlcm4gaW50IHN0YXJ0c193aXRoKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4KTsKKworLyoKKyAqIElmIHRoZSBzdHJpbmcgInN0ciIgYmVnaW5zIHdpdGggdGhlIHN0cmluZyBmb3VuZCBpbiAicHJlZml4IiwgcmV0dXJuIDEuCisgKiBUaGUgIm91dCIgcGFyYW1ldGVyIGlzIHNldCB0byAic3RyICsgc3RybGVuKHByZWZpeCkiIChpLmUuLCB0byB0aGUgcG9pbnQgaW4KKyAqIHRoZSBzdHJpbmcgcmlnaHQgYWZ0ZXIgdGhlIHByZWZpeCkuCisgKgorICogT3RoZXJ3aXNlLCByZXR1cm4gMCBhbmQgbGVhdmUgIm91dCIgdW50b3VjaGVkLgorICoKKyAqIEV4YW1wbGVzOgorICoKKyAqICAgW2V4dHJhY3QgYnJhbmNoIG5hbWUsIGZhaWwgaWYgbm90IGEgYnJhbmNoXQorICogICBpZiAoIXNraXBfcHJlZml4KHJlZiwgInJlZnMvaGVhZHMvIiwgJmJyYW5jaCkKKyAqCXJldHVybiAtMTsKKyAqCisgKiAgIFtza2lwIHByZWZpeCBpZiBwcmVzZW50LCBvdGhlcndpc2UgdXNlIHdob2xlIHN0cmluZ10KKyAqICAgc2tpcF9wcmVmaXgobmFtZSwgInJlZnMvaGVhZHMvIiwgJm5hbWUpOworICovCitzdGF0aWMgaW5saW5lIGludCBza2lwX3ByZWZpeChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKipvdXQpCit7CisJZG8geworCQlpZiAoISpwcmVmaXgpIHsKKwkJCSpvdXQgPSBzdHI7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0gd2hpbGUgKCpzdHIrKyA9PSAqcHJlZml4KyspOworCXJldHVybiAwOworfQorCisvKgorICogSWYgYnVmIGVuZHMgd2l0aCBzdWZmaXgsIHJldHVybiAxIGFuZCBzdWJ0cmFjdCB0aGUgbGVuZ3RoIG9mIHRoZSBzdWZmaXgKKyAqIGZyb20gKmxlbi4gT3RoZXJ3aXNlLCByZXR1cm4gMCBhbmQgbGVhdmUgKmxlbiB1bnRvdWNoZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHN0cmlwX3N1ZmZpeF9tZW0oY29uc3QgY2hhciAqYnVmLCBzaXplX3QgKmxlbiwKKwkJCQkgICBjb25zdCBjaGFyICpzdWZmaXgpCit7CisJc2l6ZV90IHN1ZmxlbiA9IHN0cmxlbihzdWZmaXgpOworCWlmICgqbGVuIDwgc3VmbGVuIHx8IG1lbWNtcChidWYgKyAoKmxlbiAtIHN1ZmxlbiksIHN1ZmZpeCwgc3VmbGVuKSkKKwkJcmV0dXJuIDA7CisJKmxlbiAtPSBzdWZsZW47CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBJZiBzdHIgZW5kcyB3aXRoIHN1ZmZpeCwgcmV0dXJuIDEgYW5kIHNldCAqbGVuIHRvIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcKKyAqIHdpdGhvdXQgdGhlIHN1ZmZpeC4gT3RoZXJ3aXNlLCByZXR1cm4gMCBhbmQgc2V0ICpsZW4gdG8gdGhlIHNpemUgb2YgdGhlCisgKiBzdHJpbmcuCisgKgorICogTm90ZSB0aGF0IHdlIGRvIF9ub3RfIE5VTC10ZXJtaW5hdGUgc3RyIHRvIHRoZSBuZXcgbGVuZ3RoLgorICovCitzdGF0aWMgaW5saW5lIGludCBzdHJpcF9zdWZmaXgoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpzdWZmaXgsIHNpemVfdCAqbGVuKQoreworCSpsZW4gPSBzdHJsZW4oc3RyKTsKKwlyZXR1cm4gc3RyaXBfc3VmZml4X21lbShzdHIsIGxlbiwgc3VmZml4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZW5kc193aXRoKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqc3VmZml4KQoreworCXNpemVfdCBsZW47CisJcmV0dXJuIHN0cmlwX3N1ZmZpeChzdHIsIHN1ZmZpeCwgJmxlbik7Cit9CisKKyNpZiBkZWZpbmVkKE5PX01NQVApIHx8IGRlZmluZWQoVVNFX1dJTjMyX01NQVApCisKKyNpZm5kZWYgUFJPVF9SRUFECisjZGVmaW5lIFBST1RfUkVBRCAxCisjZGVmaW5lIFBST1RfV1JJVEUgMgorI2RlZmluZSBNQVBfUFJJVkFURSAxCisjZW5kaWYKKworI2RlZmluZSBtbWFwIGdpdF9tbWFwCisjZGVmaW5lIG11bm1hcCBnaXRfbXVubWFwCitleHRlcm4gdm9pZCAqZ2l0X21tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KTsKK2V4dGVybiBpbnQgZ2l0X211bm1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCk7CisKKyNlbHNlIC8qIE5PX01NQVAgfHwgVVNFX1dJTjMyX01NQVAgKi8KKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNlbmRpZiAvKiBOT19NTUFQIHx8IFVTRV9XSU4zMl9NTUFQICovCisKKyNpZmRlZiBOT19NTUFQCisKKy8qIFRoaXMgdmFsdWUgbXVzdCBiZSBtdWx0aXBsZSBvZiAocGFnZXNpemUgKiAyKSAqLworI2RlZmluZSBERUZBVUxUX1BBQ0tFRF9HSVRfV0lORE9XX1NJWkUgKDEgKiAxMDI0ICogMTAyNCkKKworI2Vsc2UgLyogTk9fTU1BUCAqLworCisvKiBUaGlzIHZhbHVlIG11c3QgYmUgbXVsdGlwbGUgb2YgKHBhZ2VzaXplICogMikgKi8KKyNkZWZpbmUgREVGQVVMVF9QQUNLRURfR0lUX1dJTkRPV19TSVpFIFwKKwkoc2l6ZW9mKHZvaWQqKSA+PSA4IFwKKwkJPyAgMSAqIDEwMjQgKiAxMDI0ICogMTAyNCBcCisJCTogMzIgKiAxMDI0ICogMTAyNCkKKworI2VuZGlmIC8qIE5PX01NQVAgKi8KKworI2lmbmRlZiBNQVBfRkFJTEVECisjZGVmaW5lIE1BUF9GQUlMRUQgKCh2b2lkICopLTEpCisjZW5kaWYKKworI2lmZGVmIE5PX1NUX0JMT0NLU19JTl9TVFJVQ1RfU1RBVAorI2RlZmluZSBvbl9kaXNrX2J5dGVzKHN0KSAoKHN0KS5zdF9zaXplKQorI2Vsc2UKKyNkZWZpbmUgb25fZGlza19ieXRlcyhzdCkgKChzdCkuc3RfYmxvY2tzICogNTEyKQorI2VuZGlmCisKKyNpZmRlZiBORUVEU19NT0RFX1RSQU5TTEFUSU9OCisjdW5kZWYgU19JRk1UCisjdW5kZWYgU19JRlJFRworI3VuZGVmIFNfSUZESVIKKyN1bmRlZiBTX0lGTE5LCisjdW5kZWYgU19JRkJMSworI3VuZGVmIFNfSUZDSFIKKyN1bmRlZiBTX0lGSUZPCisjdW5kZWYgU19JRlNPQ0sKKyNkZWZpbmUgU19JRk1UICAgMDE3MDAwMAorI2RlZmluZSBTX0lGUkVHICAwMTAwMDAwCisjZGVmaW5lIFNfSUZESVIgIDAwNDAwMDAKKyNkZWZpbmUgU19JRkxOSyAgMDEyMDAwMAorI2RlZmluZSBTX0lGQkxLICAwMDYwMDAwCisjZGVmaW5lIFNfSUZDSFIgIDAwMjAwMDAKKyNkZWZpbmUgU19JRklGTyAgMDAxMDAwMAorI2RlZmluZSBTX0lGU09DSyAwMTQwMDAwCisjaWZkZWYgc3RhdAorI3VuZGVmIHN0YXQKKyNlbmRpZgorI2RlZmluZSBzdGF0KHBhdGgsIGJ1ZikgZ2l0X3N0YXQocGF0aCwgYnVmKQorZXh0ZXJuIGludCBnaXRfc3RhdChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopOworI2lmZGVmIGZzdGF0CisjdW5kZWYgZnN0YXQKKyNlbmRpZgorI2RlZmluZSBmc3RhdChmZCwgYnVmKSBnaXRfZnN0YXQoZmQsIGJ1ZikKK2V4dGVybiBpbnQgZ2l0X2ZzdGF0KGludCwgc3RydWN0IHN0YXQgKik7CisjaWZkZWYgbHN0YXQKKyN1bmRlZiBsc3RhdAorI2VuZGlmCisjZGVmaW5lIGxzdGF0KHBhdGgsIGJ1ZikgZ2l0X2xzdGF0KHBhdGgsIGJ1ZikKK2V4dGVybiBpbnQgZ2l0X2xzdGF0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKik7CisjZW5kaWYKKworI2RlZmluZSBERUZBVUxUX1BBQ0tFRF9HSVRfTElNSVQgXAorCSgoMTAyNEwgKiAxMDI0TCkgKiAoc2l6ZW9mKHZvaWQqKSA+PSA4ID8gODE5MiA6IDI1NikpCisKKyNpZmRlZiBOT19QUkVBRAorI2RlZmluZSBwcmVhZCBnaXRfcHJlYWQKK2V4dGVybiBzc2l6ZV90IGdpdF9wcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBvZmZfdCBvZmZzZXQpOworI2VuZGlmCisvKgorICogRm9yd2FyZCBkZWNsIHRoYXQgd2lsbCByZW1pbmQgdXMgaWYgaXRzIHR3aW4gaW4gY2FjaGUuaCBjaGFuZ2VzLgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGNvbXBhdC9wcmVhZC5jLiAgQnV0IHdlIGNhbid0IGluY2x1ZGUKKyAqIGNhY2hlLmggdGhlcmUuCisgKi8KK2V4dGVybiBzc2l6ZV90IHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKKworI2lmZGVmIE5PX1NFVEVOVgorI2RlZmluZSBzZXRlbnYgZ2l0c2V0ZW52CitleHRlcm4gaW50IGdpdHNldGVudihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKyNlbmRpZgorCisjaWZkZWYgTk9fTUtEVEVNUAorI2RlZmluZSBta2R0ZW1wIGdpdG1rZHRlbXAKK2V4dGVybiBjaGFyICpnaXRta2R0ZW1wKGNoYXIgKik7CisjZW5kaWYKKworI2lmZGVmIE5PX01LU1RFTVBTCisjZGVmaW5lIG1rc3RlbXBzIGdpdG1rc3RlbXBzCitleHRlcm4gaW50IGdpdG1rc3RlbXBzKGNoYXIgKiwgaW50KTsKKyNlbmRpZgorCisjaWZkZWYgTk9fVU5TRVRFTlYKKyNkZWZpbmUgdW5zZXRlbnYgZ2l0dW5zZXRlbnYKK2V4dGVybiB2b2lkIGdpdHVuc2V0ZW52KGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKworI2lmZGVmIE5PX1NUUkNBU0VTVFIKKyNkZWZpbmUgc3RyY2FzZXN0ciBnaXRzdHJjYXNlc3RyCitleHRlcm4gY2hhciAqZ2l0c3RyY2FzZXN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKTsKKyNlbmRpZgorCisjaWZkZWYgTk9fU1RSTENQWQorI2RlZmluZSBzdHJsY3B5IGdpdHN0cmxjcHkKK2V4dGVybiBzaXplX3QgZ2l0c3RybGNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKyNlbmRpZgorCisjaWZkZWYgTk9fU1RSVE9VTUFYCisjZGVmaW5lIHN0cnRvdW1heCBnaXRzdHJ0b3VtYXgKK2V4dGVybiB1aW50bWF4X3QgZ2l0c3RydG91bWF4KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKKyNkZWZpbmUgc3RydG9pbWF4IGdpdHN0cnRvaW1heAorZXh0ZXJuIGludG1heF90IGdpdHN0cnRvaW1heChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CisjZW5kaWYKKworI2lmZGVmIE5PX0hTVFJFUlJPUgorI2RlZmluZSBoc3RyZXJyb3IgZ2l0aHN0cmVycm9yCitleHRlcm4gY29uc3QgY2hhciAqZ2l0aHN0cmVycm9yKGludCBoZXJyb3IpOworI2VuZGlmCisKKyNpZmRlZiBOT19NRU1NRU0KKyNkZWZpbmUgbWVtbWVtIGdpdG1lbW1lbQordm9pZCAqZ2l0bWVtbWVtKGNvbnN0IHZvaWQgKmhheXN0YWNrLCBzaXplX3QgaGF5c3RhY2tsZW4sCisgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqbmVlZGxlLCBzaXplX3QgbmVlZGxlbGVuKTsKKyNlbmRpZgorCisjaWZkZWYgTk9fR0VUUEFHRVNJWkUKKyNkZWZpbmUgZ2V0cGFnZXNpemUoKSBzeXNjb25mKF9TQ19QQUdFU0laRSkKKyNlbmRpZgorCisjaWZkZWYgRlJFQURfUkVBRFNfRElSRUNUT1JJRVMKKyNpZmRlZiBmb3BlbgorI3VuZGVmIGZvcGVuCisjZW5kaWYKKyNkZWZpbmUgZm9wZW4oYSxiKSBnaXRfZm9wZW4oYSxiKQorZXh0ZXJuIEZJTEUgKmdpdF9mb3Blbihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworI2VuZGlmCisKKyNpZmRlZiBTTlBSSU5URl9SRVRVUk5TX0JPR1VTCisjaWZkZWYgc25wcmludGYKKyN1bmRlZiBzbnByaW50ZgorI2VuZGlmCisjZGVmaW5lIHNucHJpbnRmIGdpdF9zbnByaW50ZgorZXh0ZXJuIGludCBnaXRfc25wcmludGYoY2hhciAqc3RyLCBzaXplX3QgbWF4c2l6ZSwKKwkJCWNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKyNpZmRlZiB2c25wcmludGYKKyN1bmRlZiB2c25wcmludGYKKyNlbmRpZgorI2RlZmluZSB2c25wcmludGYgZ2l0X3ZzbnByaW50ZgorZXh0ZXJuIGludCBnaXRfdnNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IG1heHNpemUsCisJCQkgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKTsKKyNlbmRpZgorCisjaWZkZWYgX19HTElCQ19QUkVSRVEKKyNpZiBfX0dMSUJDX1BSRVJFUSgyLCAxKQorI2RlZmluZSBIQVZFX1NUUkNIUk5VTAorI2RlZmluZSBIQVZFX01FTVBDUFkKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TVFJDSFJOVUwKKyNkZWZpbmUgc3RyY2hybnVsIGdpdHN0cmNocm51bAorc3RhdGljIGlubGluZSBjaGFyICpnaXRzdHJjaHJudWwoY29uc3QgY2hhciAqcywgaW50IGMpCit7CisJd2hpbGUgKCpzICYmICpzICE9IGMpCisJCXMrKzsKKwlyZXR1cm4gKGNoYXIgKilzOworfQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9NRU1QQ1BZCisjZGVmaW5lIG1lbXBjcHkgZ2l0bWVtcGNweQorc3RhdGljIGlubGluZSB2b2lkICpnaXRtZW1wY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisJcmV0dXJuIChjaGFyICopbWVtY3B5KGRlc3QsIHNyYywgbikgKyBuOworfQorI2VuZGlmCisKKyNpZmRlZiBOT19JTkVUX1BUT04KK2ludCBpbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCk7CisjZW5kaWYKKworI2lmZGVmIE5PX0lORVRfTlRPUAorY29uc3QgY2hhciAqaW5ldF9udG9wKGludCBhZiwgY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKKyNlbmRpZgorCisjaWZkZWYgTk9fUFRIUkVBRFMKKyNkZWZpbmUgYXRleGl0IGdpdF9hdGV4aXQKK2V4dGVybiBpbnQgZ2l0X2F0ZXhpdCh2b2lkICgqaGFuZGxlcikodm9pZCkpOworI2VuZGlmCisKK2V4dGVybiB2b2lkIHJlbGVhc2VfcGFja19tZW1vcnkoc2l6ZV90KTsKKwordHlwZWRlZiB2b2lkICgqdHJ5X3RvX2ZyZWVfdCkoc2l6ZV90KTsKK2V4dGVybiB0cnlfdG9fZnJlZV90IHNldF90cnlfdG9fZnJlZV9yb3V0aW5lKHRyeV90b19mcmVlX3QpOworCisjaWZkZWYgSEFWRV9BTExPQ0FfSAorIyBpbmNsdWRlIDxhbGxvY2EuaD4KKyMgZGVmaW5lIHhhbGxvY2Eoc2l6ZSkgICAgICAoYWxsb2NhKHNpemUpKQorIyBkZWZpbmUgeGFsbG9jYV9mcmVlKHApICAgIGRvIHt9IHdoaWxlICgwKQorI2Vsc2UKKyMgZGVmaW5lIHhhbGxvY2Eoc2l6ZSkgICAgICAoeG1hbGxvYyhzaXplKSkKKyMgZGVmaW5lIHhhbGxvY2FfZnJlZShwKSAgICAoZnJlZShwKSkKKyNlbmRpZgorZXh0ZXJuIGNoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqc3RyKTsKK2V4dGVybiB2b2lkICp4bWFsbG9jKHNpemVfdCBzaXplKTsKK2V4dGVybiB2b2lkICp4bWFsbG9jeihzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCAqeG1hbGxvY3pfZ2VudGx5KHNpemVfdCBzaXplKTsKK2V4dGVybiB2b2lkICp4bWVtZHVweihjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2V4dGVybiBjaGFyICp4c3RybmR1cChjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pOworZXh0ZXJuIHZvaWQgKnhyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIHZvaWQgKnhjYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gdm9pZCAqeG1tYXAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KTsKK2V4dGVybiB2b2lkICp4bW1hcF9nZW50bHkodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KTsKK2V4dGVybiBpbnQgeG9wZW4oY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLCAuLi4pOworZXh0ZXJuIHNzaXplX3QgeHJlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworZXh0ZXJuIHNzaXplX3QgeHdyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK2V4dGVybiBzc2l6ZV90IHhwcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgb2ZmX3Qgb2Zmc2V0KTsKK2V4dGVybiBpbnQgeGR1cChpbnQgZmQpOworZXh0ZXJuIEZJTEUgKnhmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKTsKK2V4dGVybiBGSUxFICp4ZmRvcGVuKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSk7CitleHRlcm4gaW50IHhta3N0ZW1wKGNoYXIgKnRlbXBsYXRlKTsKK2V4dGVybiBpbnQgeG1rc3RlbXBfbW9kZShjaGFyICp0ZW1wbGF0ZSwgaW50IG1vZGUpOworZXh0ZXJuIGludCBvZGJfbWtzdGVtcChjaGFyICp0ZW1wbGF0ZSwgc2l6ZV90IGxpbWl0LCBjb25zdCBjaGFyICpwYXR0ZXJuKTsKK2V4dGVybiBpbnQgb2RiX3BhY2tfa2VlcChjaGFyICpuYW1lLCBzaXplX3QgbmFtZXN6LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBjaGFyICp4Z2V0Y3dkKHZvaWQpOworCisjZGVmaW5lIFJFQUxMT0NfQVJSQVkoeCwgYWxsb2MpICh4KSA9IHhyZWFsbG9jKCh4KSwgKGFsbG9jKSAqIHNpemVvZigqKHgpKSkKKworc3RhdGljIGlubGluZSBjaGFyICp4c3RyZHVwX29yX251bGwoY29uc3QgY2hhciAqc3RyKQoreworCXJldHVybiBzdHIgPyB4c3RyZHVwKHN0cikgOiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCB4c2l6ZV90KG9mZl90IGxlbikKK3sKKwlpZiAobGVuID4gKHNpemVfdCkgbGVuKQorCQlkaWUoIkNhbm5vdCBoYW5kbGUgZmlsZXMgdGhpcyBiaWciKTsKKwlyZXR1cm4gKHNpemVfdClsZW47Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitleHRlcm4gaW50IHhzbnByaW50ZihjaGFyICpkc3QsIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyogaW4gY3R5cGUuYywgZm9yIGt3c2V0IHVzZXJzICovCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciB0b2xvd2VyX3RyYW5zX3RibFsyNTZdOworCisvKiBTYW5lIGN0eXBlIC0gbm8gbG9jYWxlLCBhbmQgd29ya3Mgd2l0aCBzaWduZWQgY2hhcnMgKi8KKyN1bmRlZiBpc2FzY2lpCisjdW5kZWYgaXNzcGFjZQorI3VuZGVmIGlzZGlnaXQKKyN1bmRlZiBpc2FscGhhCisjdW5kZWYgaXNhbG51bQorI3VuZGVmIGlzcHJpbnQKKyN1bmRlZiBpc2xvd2VyCisjdW5kZWYgaXN1cHBlcgorI3VuZGVmIHRvbG93ZXIKKyN1bmRlZiB0b3VwcGVyCisjdW5kZWYgaXNjbnRybAorI3VuZGVmIGlzcHVuY3QKKyN1bmRlZiBpc3hkaWdpdAorCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBzYW5lX2N0eXBlWzI1Nl07CisjZGVmaW5lIEdJVF9TUEFDRSAweDAxCisjZGVmaW5lIEdJVF9ESUdJVCAweDAyCisjZGVmaW5lIEdJVF9BTFBIQSAweDA0CisjZGVmaW5lIEdJVF9HTE9CX1NQRUNJQUwgMHgwOAorI2RlZmluZSBHSVRfUkVHRVhfU1BFQ0lBTCAweDEwCisjZGVmaW5lIEdJVF9QQVRIU1BFQ19NQUdJQyAweDIwCisjZGVmaW5lIEdJVF9DTlRSTCAweDQwCisjZGVmaW5lIEdJVF9QVU5DVCAweDgwCisjZGVmaW5lIHNhbmVfaXN0ZXN0KHgsbWFzaykgKChzYW5lX2N0eXBlWyh1bnNpZ25lZCBjaGFyKSh4KV0gJiAobWFzaykpICE9IDApCisjZGVmaW5lIGlzYXNjaWkoeCkgKCgoeCkgJiB+MHg3ZikgPT0gMCkKKyNkZWZpbmUgaXNzcGFjZSh4KSBzYW5lX2lzdGVzdCh4LEdJVF9TUEFDRSkKKyNkZWZpbmUgaXNkaWdpdCh4KSBzYW5lX2lzdGVzdCh4LEdJVF9ESUdJVCkKKyNkZWZpbmUgaXNhbHBoYSh4KSBzYW5lX2lzdGVzdCh4LEdJVF9BTFBIQSkKKyNkZWZpbmUgaXNhbG51bSh4KSBzYW5lX2lzdGVzdCh4LEdJVF9BTFBIQSB8IEdJVF9ESUdJVCkKKyNkZWZpbmUgaXNwcmludCh4KSAoKHgpID49IDB4MjAgJiYgKHgpIDw9IDB4N2UpCisjZGVmaW5lIGlzbG93ZXIoeCkgc2FuZV9pc2Nhc2UoeCwgMSkKKyNkZWZpbmUgaXN1cHBlcih4KSBzYW5lX2lzY2FzZSh4LCAwKQorI2RlZmluZSBpc19nbG9iX3NwZWNpYWwoeCkgc2FuZV9pc3Rlc3QoeCxHSVRfR0xPQl9TUEVDSUFMKQorI2RlZmluZSBpc19yZWdleF9zcGVjaWFsKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX0dMT0JfU1BFQ0lBTCB8IEdJVF9SRUdFWF9TUEVDSUFMKQorI2RlZmluZSBpc2NudHJsKHgpIChzYW5lX2lzdGVzdCh4LEdJVF9DTlRSTCkpCisjZGVmaW5lIGlzcHVuY3QoeCkgc2FuZV9pc3Rlc3QoeCwgR0lUX1BVTkNUIHwgR0lUX1JFR0VYX1NQRUNJQUwgfCBcCisJCUdJVF9HTE9CX1NQRUNJQUwgfCBHSVRfUEFUSFNQRUNfTUFHSUMpCisjZGVmaW5lIGlzeGRpZ2l0KHgpIChoZXh2YWxfdGFibGVbKHVuc2lnbmVkIGNoYXIpKHgpXSAhPSAtMSkKKyNkZWZpbmUgdG9sb3dlcih4KSBzYW5lX2Nhc2UoKHVuc2lnbmVkIGNoYXIpKHgpLCAweDIwKQorI2RlZmluZSB0b3VwcGVyKHgpIHNhbmVfY2FzZSgodW5zaWduZWQgY2hhcikoeCksIDApCisjZGVmaW5lIGlzX3BhdGhzcGVjX21hZ2ljKHgpIHNhbmVfaXN0ZXN0KHgsR0lUX1BBVEhTUEVDX01BR0lDKQorCitzdGF0aWMgaW5saW5lIGludCBzYW5lX2Nhc2UoaW50IHgsIGludCBoaWdoKQoreworCWlmIChzYW5lX2lzdGVzdCh4LCBHSVRfQUxQSEEpKQorCQl4ID0gKHggJiB+MHgyMCkgfCBoaWdoOworCXJldHVybiB4OworfQorCitzdGF0aWMgaW5saW5lIGludCBzYW5lX2lzY2FzZShpbnQgeCwgaW50IGlzX2xvd2VyKQoreworCWlmICghc2FuZV9pc3Rlc3QoeCwgR0lUX0FMUEhBKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXNfbG93ZXIpCisJCXJldHVybiAoeCAmIDB4MjApICE9IDA7CisJZWxzZQorCQlyZXR1cm4gKHggJiAweDIwKSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBzdHJ0b3VsX3VpKGNoYXIgY29uc3QgKnMsIGludCBiYXNlLCB1bnNpZ25lZCBpbnQgKnJlc3VsdCkKK3sKKwl1bnNpZ25lZCBsb25nIHVsOworCWNoYXIgKnA7CisKKwllcnJubyA9IDA7CisJLyogbmVnYXRpdmUgdmFsdWVzIHdvdWxkIGJlIGFjY2VwdGVkIGJ5IHN0cnRvdWwgKi8KKwlpZiAoc3RyY2hyKHMsICctJykpCisJCXJldHVybiAtMTsKKwl1bCA9IHN0cnRvdWwocywgJnAsIGJhc2UpOworCWlmIChlcnJubyB8fCAqcCB8fCBwID09IHMgfHwgKHVuc2lnbmVkIGludCkgdWwgIT0gdWwpCisJCXJldHVybiAtMTsKKwkqcmVzdWx0ID0gdWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0cnRvbF9pKGNoYXIgY29uc3QgKnMsIGludCBiYXNlLCBpbnQgKnJlc3VsdCkKK3sKKwlsb25nIHVsOworCWNoYXIgKnA7CisKKwllcnJubyA9IDA7CisJdWwgPSBzdHJ0b2wocywgJnAsIGJhc2UpOworCWlmIChlcnJubyB8fCAqcCB8fCBwID09IHMgfHwgKGludCkgdWwgIT0gdWwpCisJCXJldHVybiAtMTsKKwkqcmVzdWx0ID0gdWw7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBJTlRFUk5BTF9RU09SVAordm9pZCBnaXRfcXNvcnQodm9pZCAqYmFzZSwgc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwKKwkgICAgICAgaW50KCpjb21wYXIpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CisjZGVmaW5lIHFzb3J0IGdpdF9xc29ydAorI2VuZGlmCisKKyNpZm5kZWYgRElSX0hBU19CU0RfR1JPVVBfU0VNQU5USUNTCisjIGRlZmluZSBGT1JDRV9ESVJfU0VUX0dJRCBTX0lTR0lECisjZWxzZQorIyBkZWZpbmUgRk9SQ0VfRElSX1NFVF9HSUQgMAorI2VuZGlmCisKKyNpZmRlZiBOT19OU0VDCisjdW5kZWYgVVNFX05TRUMKKyNkZWZpbmUgU1RfQ1RJTUVfTlNFQyhzdCkgMAorI2RlZmluZSBTVF9NVElNRV9OU0VDKHN0KSAwCisjZWxzZQorI2lmZGVmIFVTRV9TVF9USU1FU1BFQworI2RlZmluZSBTVF9DVElNRV9OU0VDKHN0KSAoKHVuc2lnbmVkIGludCkoKHN0KS5zdF9jdGltZXNwZWMudHZfbnNlYykpCisjZGVmaW5lIFNUX01USU1FX05TRUMoc3QpICgodW5zaWduZWQgaW50KSgoc3QpLnN0X210aW1lc3BlYy50dl9uc2VjKSkKKyNlbHNlCisjZGVmaW5lIFNUX0NUSU1FX05TRUMoc3QpICgodW5zaWduZWQgaW50KSgoc3QpLnN0X2N0aW0udHZfbnNlYykpCisjZGVmaW5lIFNUX01USU1FX05TRUMoc3QpICgodW5zaWduZWQgaW50KSgoc3QpLnN0X210aW0udHZfbnNlYykpCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgVU5SRUxJQUJMRV9GU1RBVAorI2RlZmluZSBmc3RhdF9pc19yZWxpYWJsZSgpIDAKKyNlbHNlCisjZGVmaW5lIGZzdGF0X2lzX3JlbGlhYmxlKCkgMQorI2VuZGlmCisKKyNpZm5kZWYgdmFfY29weQorLyoKKyAqIFNpbmNlIGFuIG9idmlvdXMgaW1wbGVtZW50YXRpb24gb2YgdmFfbGlzdCB3b3VsZCBiZSB0byBtYWtlIGl0IGEKKyAqIHBvaW50ZXIgaW50byB0aGUgc3RhY2sgZnJhbWUsIGEgc2ltcGxlIGFzc2lnbm1lbnQgd2lsbCB3b3JrIG9uCisgKiBtYW55IHN5c3RlbXMuICBCdXQgbGV0J3MgdHJ5IHRvIGJlIG1vcmUgcG9ydGFibGUuCisgKi8KKyNpZmRlZiBfX3ZhX2NvcHkKKyNkZWZpbmUgdmFfY29weShkc3QsIHNyYykgX192YV9jb3B5KGRzdCwgc3JjKQorI2Vsc2UKKyNkZWZpbmUgdmFfY29weShkc3QsIHNyYykgKChkc3QpID0gKHNyYykpCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykgfHwgKF9NU0NfVkVSID49IDE0MDApIHx8IGRlZmluZWQoX19DOTlfTUFDUk9fV0lUSF9WQV9BUkdTKQorI2RlZmluZSBIQVZFX1ZBUklBRElDX01BQ1JPUyAxCisjZW5kaWYKKworLyoKKyAqIFByZXNlcnZlcyBlcnJubywgcHJpbnRzIGEgbWVzc2FnZSwgYnV0IGdpdmVzIG5vIHdhcm5pbmcgZm9yIEVOT0VOVC4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCB3aGljaCBpbmNsdWRlcyB0cnlpbmcgdG8gdW5saW5rIGFuIG9iamVjdCB0aGF0IGRvZXMKKyAqIG5vdCBleGlzdC4KKyAqLworaW50IHVubGlua19vcl93YXJuKGNvbnN0IGNoYXIgKnBhdGgpOworIC8qCisgICogVHJpZXMgdG8gdW5saW5rIGZpbGUuICBSZXR1cm5zIDAgaWYgdW5saW5rIHN1Y2NlZWRlZAorICAqIG9yIHRoZSBmaWxlIGFscmVhZHkgZGlkbid0IGV4aXN0LiAgUmV0dXJucyAtMSBhbmQKKyAgKiBhcHBlbmRzIGEgbWVzc2FnZSB0byBlcnIgc3VpdGFibGUgZm9yCisgICogJ2Vycm9yKCIlcyIsIGVyci0+YnVmKScgb24gZXJyb3IuCisgICovCitpbnQgdW5saW5rX29yX21zZyhjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOworLyoKKyAqIFByZXNlcnZlcyBlcnJubywgcHJpbnRzIGEgbWVzc2FnZSwgYnV0IGdpdmVzIG5vIHdhcm5pbmcgZm9yIEVOT0VOVC4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCB3aGljaCBpbmNsdWRlcyB0cnlpbmcgdG8gcmVtb3ZlIGEgZGlyZWN0b3J5IHRoYXQgZG9lcworICogbm90IGV4aXN0LgorICovCitpbnQgcm1kaXJfb3Jfd2Fybihjb25zdCBjaGFyICpwYXRoKTsKKy8qCisgKiBDYWxscyB0aGUgY29ycmVjdCBmdW5jdGlvbiBvdXQgb2Yge3VubGluayxybWRpcn1fb3Jfd2FybiBiYXNlZCBvbgorICogdGhlIHN1cHBsaWVkIGZpbGUgbW9kZS4KKyAqLworaW50IHJlbW92ZV9vcl93YXJuKHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBjaGFyICpwYXRoKTsKKworLyoKKyAqIENhbGwgYWNjZXNzKDIpLCBidXQgd2FybiBmb3IgYW55IGVycm9yIGV4Y2VwdCAibWlzc2luZyBmaWxlIgorICogKEVOT0VOVCBvciBFTk9URElSKS4KKyAqLworI2RlZmluZSBBQ0NFU1NfRUFDQ0VTX09LICgxVSA8PCAwKQoraW50IGFjY2Vzc19vcl93YXJuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlLCB1bnNpZ25lZCBmbGFnKTsKK2ludCBhY2Nlc3Nfb3JfZGllKGNvbnN0IGNoYXIgKnBhdGgsIGludCBtb2RlLCB1bnNpZ25lZCBmbGFnKTsKKworLyogV2FybiBvbiBhbiBpbmFjY2Vzc2libGUgZmlsZSB0aGF0IG91Z2h0IHRvIGJlIGFjY2Vzc2libGUgKi8KK3ZvaWQgd2Fybl9vbl9pbmFjY2Vzc2libGUoY29uc3QgY2hhciAqcGF0aCk7CisKKy8qIEdldCB0aGUgcGFzc3dkIGVudHJ5IGZvciB0aGUgVUlEIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MuICovCitzdHJ1Y3QgcGFzc3dkICp4Z2V0cHd1aWRfc2VsZih2b2lkKTsKKworI2lmZGVmIEdNVElNRV9VTlJFTElBQkxFX0VSUk9SUworc3RydWN0IHRtICpnaXRfZ210aW1lKGNvbnN0IHRpbWVfdCAqKTsKK3N0cnVjdCB0bSAqZ2l0X2dtdGltZV9yKGNvbnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7CisjZGVmaW5lIGdtdGltZSBnaXRfZ210aW1lCisjZGVmaW5lIGdtdGltZV9yIGdpdF9nbXRpbWVfcgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChVU0VfUEFSRU5TX0FST1VORF9HRVRURVhUX04pICYmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIFVTRV9QQVJFTlNfQVJPVU5EX0dFVFRFWFRfTiAxCisjZW5kaWYKKworI2lmbmRlZiBTSEVMTF9QQVRICisjIGRlZmluZSBTSEVMTF9QQVRIICIvYmluL3NoIgorI2VuZGlmCisKKyNpZm5kZWYgX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUworI2RlZmluZSBmbG9ja2ZpbGUoZmgpCisjZGVmaW5lIGZ1bmxvY2tmaWxlKGZoKQorI2RlZmluZSBnZXRjX3VubG9ja2VkKGZoKSBnZXRjKGZoKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZ2l0LWN2c2V4cG9ydGNvbW1pdC5wZXJsIGIvZ2l0LWN2c2V4cG9ydGNvbW1pdC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxM2YwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtY3ZzZXhwb3J0Y29tbWl0LnBlcmwKQEAgLTAsMCArMSw0NjIgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdldG9wdDo6U3RkOwordXNlIEZpbGU6OlRlbXAgcXcodGVtcGRpcik7Cit1c2UgRGF0YTo6RHVtcGVyOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3KGJhc2VuYW1lIGRpcm5hbWUpOwordXNlIEZpbGU6OlNwZWM7Cit1c2UgR2l0OworCitvdXIgKCRvcHRfaCwgJG9wdF9QLCAkb3B0X3AsICRvcHRfdiwgJG9wdF9jLCAkb3B0X2YsICRvcHRfYSwgJG9wdF9tLCAkb3B0X2QsICRvcHRfdSwgJG9wdF93LCAkb3B0X1csICRvcHRfayk7CisKK2dldG9wdHMoJ3VoUHB2Y2ZrYW06ZDp3OlcnKTsKKworJG9wdF9oICYmIHVzYWdlKCk7CisKK2RpZSAiTmVlZCBhdCBsZWFzdCBvbmUgY29tbWl0IGlkZW50aWZpZXIhIiB1bmxlc3MgQEFSR1Y7CisKKyMgR2V0IGdpdC1jb25maWcgc2V0dGluZ3MKK215ICRyZXBvID0gR2l0LT5yZXBvc2l0b3J5KCk7Ciskb3B0X3cgPSAkcmVwby0+Y29uZmlnKCdjdnNleHBvcnRjb21taXQuY3ZzZGlyJykgdW5sZXNzIGRlZmluZWQgJG9wdF93OworCitpZiAoJG9wdF93IHx8ICRvcHRfVykgeworCSMgUmVtZW1iZXIgd2hlcmUgR0lUX0RJUiBpcyBiZWZvcmUgY2hhbmdpbmcgdG8gQ1ZTIGNoZWNrb3V0CisJdW5sZXNzICgkRU5We0dJVF9ESVJ9KSB7CisJCSMgTm8gR0lUX0RJUiBzZXQuIEZpZ3VyZSBpdCBvdXQgZm9yIG91cnNlbHZlcworCQlteSAkZ2QgPWBnaXQtcmV2LXBhcnNlIC0tZ2l0LWRpcmA7CisJCWNob21wKCRnZCk7CisJCSRFTlZ7R0lUX0RJUn0gPSAkZ2Q7CisJfQorCisJIyBPbiBNU1lTLCBjb252ZXJ0IGEgV2luZG93cy1zdHlsZSBwYXRoIHRvIGFuIE1TWVMtc3R5bGUgcGF0aAorCSMgc28gdGhhdCByZWwyYWJzKCkgYmVsb3cgd29ya3MgY29ycmVjdGx5LgorCWlmICgkXk8gZXEgJ21zeXMnKSB7CisJCSRFTlZ7R0lUX0RJUn0gPX4gcyNeKFtbOmFscGhhOl1dKTovIy8kMS8jOworCX0KKworCSMgTWFrZSBzdXJlIEdJVF9ESVIgaXMgYWJzb2x1dGUKKwkkRU5We0dJVF9ESVJ9ID0gRmlsZTo6U3BlYy0+cmVsMmFicygkRU5We0dJVF9ESVJ9KTsKK30KKworaWYgKCRvcHRfdykgeworCWlmICghIC1kICRvcHRfdy4iL0NWUyIgKSB7CisJCWRpZSAiJG9wdF93IGlzIG5vdCBhIENWUyBjaGVja291dCI7CisJfQorCWNoZGlyICRvcHRfdyBvciBkaWUgIkNhbm5vdCBjaGFuZ2UgdG8gQ1ZTIGNoZWNrb3V0IGF0ICRvcHRfdyI7Cit9Cit1bmxlc3MgKCRFTlZ7R0lUX0RJUn0gJiYgLXIgJEVOVntHSVRfRElSfSl7CisgICAgZGllICJHSVRfRElSIGlzIG5vdCBkZWZpbmVkIG9yIGlzIHVucmVhZGFibGUiOworfQorCisKK215IEBjdnM7CitpZiAoJG9wdF9kKSB7CisJQGN2cyA9ICgnY3ZzJywgJy1kJywgJG9wdF9kKTsKK30gZWxzZSB7CisJQGN2cyA9ICgnY3ZzJyk7Cit9CisKKyMgcmVzb2x2ZSB0YXJnZXQgY29tbWl0CitteSAkY29tbWl0OworJGNvbW1pdCA9IHBvcCBAQVJHVjsKKyRjb21taXQgPSBzYWZlX3BpcGVfY2FwdHVyZSgnZ2l0LXJldi1wYXJzZScsICctLXZlcmlmeScsICIkY29tbWl0XjAiKTsKK2Nob21wICRjb21taXQ7CitpZiAoJD8pIHsKKyAgICBkaWUgIlRoZSBjb21taXQgcmVmZXJlbmNlICRjb21taXQgZGlkIG5vdCByZXNvbHZlISI7Cit9CisKKyMgcmVzb2x2ZSB3aGF0IHBhcmVudCB3ZSB3YW50CitteSAkcGFyZW50OworaWYgKEBBUkdWKSB7CisgICAgJHBhcmVudCA9IHBvcCBAQVJHVjsKKyAgICAkcGFyZW50ID0gIHNhZmVfcGlwZV9jYXB0dXJlKCdnaXQtcmV2LXBhcnNlJywgJy0tdmVyaWZ5JywgIiRwYXJlbnReMCIpOworICAgIGNob21wICRwYXJlbnQ7CisgICAgaWYgKCQ/KSB7CisJZGllICJUaGUgcGFyZW50IHJlZmVyZW5jZSBkaWQgbm90IHJlc29sdmUhIjsKKyAgICB9Cit9CisKKyMgZmluZCBwYXJlbnRzIGZyb20gdGhlIGNvbW1pdCBpdHNlbGYKK215IEBjb21taXQgID0gc2FmZV9waXBlX2NhcHR1cmUoJ2dpdC1jYXQtZmlsZScsICdjb21taXQnLCAkY29tbWl0KTsKK215IEBwYXJlbnRzOworbXkgJGNvbW1pdHRlcjsKK215ICRhdXRob3I7CitteSAkc3RhZ2UgPSAnaGVhZGVycyc7ICMgaGVhZGVycywgbXNnCitteSAkdGl0bGU7CitteSAkbXNnID0gJyc7CisKK2ZvcmVhY2ggbXkgJGxpbmUgKEBjb21taXQpIHsKKyAgICBjaG9tcCAkbGluZTsKKyAgICBpZiAoJHN0YWdlIGVxICdoZWFkZXJzJyAmJiAkbGluZSBlcSAnJykgeworCSRzdGFnZSA9ICdtc2cnOworCW5leHQ7CisgICAgfQorCisgICAgaWYgKCRzdGFnZSBlcSAnaGVhZGVycycpIHsKKwlpZiAoJGxpbmUgPX4gbS9ecGFyZW50IChcd3s0MH0pJC8pIHsgIyBmb3VuZCBhIHBhcmVudAorCSAgICBwdXNoIEBwYXJlbnRzLCAkMTsKKwl9IGVsc2lmICgkbGluZSA9fiBtL15hdXRob3IgKC4rKSBcZCsgWy0rXVxkKyQvKSB7CisJICAgICRhdXRob3IgPSAkMTsKKwl9IGVsc2lmICgkbGluZSA9fiBtL15jb21taXR0ZXIgKC4rKSBcZCsgWy0rXVxkKyQvKSB7CisJICAgICRjb21taXR0ZXIgPSAkMTsKKwl9CisgICAgfSBlbHNlIHsKKwkkbXNnIC49ICRsaW5lIC4gIlxuIjsKKwl1bmxlc3MgKCR0aXRsZSkgeworCSAgICAkdGl0bGUgPSAkbGluZTsKKwl9CisgICAgfQorfQorCitteSAkbm9wYXJlbnQgPSAiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCI7CitpZiAoJHBhcmVudCkgeworICAgIG15ICRmb3VuZDsKKyAgICAjIGRvdWJsZSBjaGVjayB0aGF0IGl0J3MgYSB2YWxpZCBwYXJlbnQKKyAgICBmb3JlYWNoIG15ICRwIChAcGFyZW50cykgeworCWlmICgkcCBlcSAkcGFyZW50KSB7CisJICAgICRmb3VuZCA9IDE7CisJICAgIGxhc3Q7CisJfTsgIyBmb3VuZCBpdAorICAgIH0KKyAgICBkaWUgIkRpZCBub3QgZmluZCAkcGFyZW50IGluIHRoZSBwYXJlbnRzIGZvciB0aGlzIGNvbW1pdCEiIGlmICEkZm91bmQgYW5kICEkb3B0X1A7Cit9IGVsc2UgeyAjIHdlIGRvbid0IGhhdmUgYSBwYXJlbnQgZnJvbSB0aGUgY21kbGluZS4uLgorICAgIGlmIChAcGFyZW50cyA9PSAxKSB7ICMgaXQncyBzYWZlIHRvIGdldCBpdCBmcm9tIHRoZSBjb21taXQKKwkkcGFyZW50ID0gJHBhcmVudHNbMF07CisgICAgfSBlbHNpZiAoQHBhcmVudHMgPT0gMCkgeyAjIHRoZXJlIGlzIG5vIHBhcmVudAorICAgICAgICAkcGFyZW50ID0gJG5vcGFyZW50OworICAgIH0gZWxzZSB7ICMgY2Fubm90IGNob29zZSBhdXRvbWF0aWNhbGx5IGZyb20gbXVsdGlwbGUgcGFyZW50cworICAgICAgICBkaWUgIlRoaXMgY29tbWl0IGhhcyBtb3JlIHRoYW4gb25lIHBhcmVudCAtLSBwbGVhc2UgbmFtZSB0aGUgcGFyZW50IHlvdSB3YW50IHRvIHVzZSBleHBsaWNpdGx5IjsKKyAgICB9Cit9CisKK215ICRnb19iYWNrX3RvID0gMDsKKworaWYgKCRvcHRfVykgeworICAgICRvcHRfdiAmJiBwcmludCAiUmVzZXR0aW5nIHRvICRwYXJlbnRcbiI7CisgICAgJGdvX2JhY2tfdG8gPSBgZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+IC9kZXYvbnVsbCB8fAorCWdpdCByZXYtcGFyc2UgSEVBRGAgfHwgZGllICJDb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoIjsKKyAgICBzeXN0ZW0oImdpdCBjaGVja291dCAtcSAkcGFyZW50XjAiKSAmJiBkaWUgIkNvdWxkIG5vdCBjaGVjayBvdXQgJHBhcmVudF4wIjsKK30KKworJG9wdF92ICYmIHByaW50ICJBcHBseWluZyB0byBDVlMgY29tbWl0ICRjb21taXQgZnJvbSBwYXJlbnQgJHBhcmVudFxuIjsKKworIyBncmFiIHRoZSBjb21taXQgbWVzc2FnZQorb3BlbihNU0csICI+Lm1zZyIpIG9yIGRpZSAiQ2Fubm90IG9wZW4gLm1zZyBmb3Igd3JpdGluZyI7CitpZiAoJG9wdF9tKSB7CisgICAgcHJpbnQgTVNHICRvcHRfbTsKK30KK3ByaW50IE1TRyAkbXNnOworaWYgKCRvcHRfYSkgeworICAgIHByaW50IE1TRyAiXG5cbkF1dGhvcjogJGF1dGhvclxuIjsKKyAgICBpZiAoJGF1dGhvciBuZSAkY29tbWl0dGVyKSB7CisJcHJpbnQgTVNHICJDb21taXR0ZXI6ICRjb21taXR0ZXJcbiI7CisgICAgfQorfQorY2xvc2UgTVNHOworCitpZiAoJHBhcmVudCBlcSAkbm9wYXJlbnQpIHsKKyAgICBgZ2l0LWRpZmYtdHJlZSAtLWJpbmFyeSAtcCAtLXJvb3QgJGNvbW1pdCA+LmN2c2V4cG9ydGNvbW1pdC5kaWZmYDsjIHx8IGRpZSAiQ2Fubm90IGRpZmYiOworfSBlbHNlIHsKKyAgICBgZ2l0LWRpZmYtdHJlZSAtLWJpbmFyeSAtcCAkcGFyZW50ICRjb21taXQgPi5jdnNleHBvcnRjb21taXQuZGlmZmA7IyB8fCBkaWUgIkNhbm5vdCBkaWZmIjsKK30KKworIyMgYXBwbHkgbm9uLWJpbmFyeSBjaGFuZ2VzCisKKyMgSW4gcGVkYW50aWMgbW9kZSByZXF1aXJlIGFsbCBsaW5lcyBvZiBjb250ZXh0IHRvIG1hdGNoLiAgSW4gbm9ybWFsCisjIG1vZGUsIGJlIGNvbXBhdGlibGUgd2l0aCBkaWZmL3BhdGNoOiBhc3N1bWUgMyBsaW5lcyBvZiBjb250ZXh0IGFuZAorIyByZXF1aXJlIGF0IGxlYXN0IG9uZSBsaW5lIG1hdGNoLCBpLmUuIGlnbm9yZSBhdCBtb3N0IDIgbGluZXMgb2YKKyMgY29udGV4dCwgbGlrZSBkaWZmL3BhdGNoIGRvIGJ5IGRlZmF1bHQuCitteSAkY29udGV4dCA9ICRvcHRfcCA/ICcnIDogJy1DMSc7CisKK3ByaW50ICJDaGVja2luZyBpZiBwYXRjaCB3aWxsIGFwcGx5XG4iOworCitteSBAc3RhdDsKK29wZW4gQVBQTFksICJHSVRfRElSPSBnaXQtYXBwbHkgJGNvbnRleHQgLS1zdW1tYXJ5IC0tbnVtc3RhdDwuY3ZzZXhwb3J0Y29tbWl0LmRpZmZ8IiB8fCBkaWUgImNhbm5vdCBwYXRjaCI7CitAc3RhdD08QVBQTFk+OworY2xvc2UgQVBQTFkgfHwgZGllICJDYW5ub3QgcGF0Y2giOworbXkgKEBiZmlsZXMsQGZpbGVzLEBhZmlsZXMsQGRmaWxlcyk7CitjaG9tcCBAc3RhdDsKK2ZvcmVhY2ggKEBzdGF0KSB7CisJcHVzaCAoQGJmaWxlcywkMSkgaWYgbS9eLVx0LVx0KC4qKSQvOworCXB1c2ggKEBmaWxlcywgJDEpIGlmIG0vXi1cdC1cdCguKikkLzsKKwlwdXNoIChAZmlsZXMsICQxKSBpZiBtL15cZCtcdFxkK1x0KC4qKSQvOworCXB1c2ggKEBhZmlsZXMsJDEpIGlmIG0vXiBjcmVhdGUgbW9kZSBbMC03XSsgKC4qKSQvOworCXB1c2ggKEBkZmlsZXMsJDEpIGlmIG0vXiBkZWxldGUgbW9kZSBbMC03XSsgKC4qKSQvOworfQorbWFwIHsgcy9eIiguKikiJC8kMS9nIH0gQGJmaWxlcyxAZmlsZXM7CittYXAgeyBzL1xcKFswLTddezN9KS9zcHJpbnRmKCclYycsb2N0ICQxKS9lZyB9IEBiZmlsZXMsQGZpbGVzOworCisjIGNoZWNrIHRoYXQgdGhlIGZpbGVzIGFyZSBjbGVhbiBhbmQgdXAgdG8gZGF0ZSBhY2NvcmRpbmcgdG8gY3ZzCitteSAkZGlydHk7CitteSBAZGlyczsKK2ZvcmVhY2ggbXkgJHAgKEBhZmlsZXMpIHsKKyAgICBteSAkcGF0aCA9IGRpcm5hbWUgJHA7CisgICAgd2hpbGUgKCEtZCAkcGF0aCBhbmQgISBncmVwIHsgJF8gZXEgJHBhdGggfSBAZGlycykgeworCXVuc2hpZnQgQGRpcnMsICRwYXRoOworCSRwYXRoID0gZGlybmFtZSAkcGF0aDsKKyAgICB9Cit9CisKKyMgLi4uIGNoZWNrIGRpcnMsCitmb3JlYWNoIG15ICRkIChAZGlycykgeworICAgIGlmICgtZSAkZCkgeworCSRkaXJ0eSA9IDE7CisJd2FybiAiJGQgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkhXG4iOworICAgIH0KK30KKworIyAuLi4gcXVlcnkgc3RhdHVzIG9mIGFsbCBmaWxlcyB0aGF0IHdlIGhhdmUgYSBkaXJlY3RvcnkgZm9yIGFuZCBwYXJzZSBvdXRwdXQgb2YgJ2N2cyBzdGF0dXMnIHRvICVjdnNzdGF0LgorbXkgQGNhbnN0YXR1c2ZpbGVzOworZm9yZWFjaCBteSAkZiAoQGZpbGVzKSB7CisgICAgbXkgJHBhdGggPSBkaXJuYW1lICRmOworICAgIG5leHQgaWYgKGdyZXAgeyAkXyBlcSAkcGF0aCB9IEBkaXJzKTsKKyAgICBwdXNoIEBjYW5zdGF0dXNmaWxlcywgJGY7Cit9CisKK215ICVjdnNzdGF0OworaWYgKEBjYW5zdGF0dXNmaWxlcykgeworICAgIGlmICgkb3B0X3UpIHsKKyAgICAgIG15IEB1cGRhdGVkID0geGFyZ3Nfc2FmZV9waXBlX2NhcHR1cmUoW0BjdnMsICd1cGRhdGUnXSwgQGNhbnN0YXR1c2ZpbGVzKTsKKyAgICAgIHByaW50IEB1cGRhdGVkOworICAgIH0KKyAgICAjICJjdnMgc3RhdHVzIiByZW9yZGVycyB0aGUgcGFyYW1ldGVycywgbm90YWJseSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZQorICAgICMgYXJndW1lbnRzIHdpdGggdGhlIHNhbWUgYmFzZW5hbWUuICBTbyBiZSBwcmVjaXNlIGhlcmUuCisKKyAgICBteSAlYWRkZWQgPSBtYXAgeyAkXyA9PiAxIH0gQGFmaWxlczsKKyAgICBteSAldG9kbyA9IG1hcCB7ICRfID0+IDEgfSBAY2Fuc3RhdHVzZmlsZXM7CisKKyAgICB3aGlsZSAoJXRvZG8pIHsKKyAgICAgIG15IEBjYW5zdGF0dXNmaWxlczIgPSAoKTsKKyAgICAgIG15ICVmdWxsbmFtZSA9ICgpOworICAgICAgZm9yZWFjaCBteSAkbmFtZSAoa2V5cyAldG9kbykgeworCW15ICRiYXNlbmFtZSA9IGJhc2VuYW1lKCRuYW1lKTsKKworCSMgQ1ZTIHJlcG9ydHMgZmlsZXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgY3VycmVudCByZXZpc2lvbiBhcworCSMgIm5vIGZpbGUgJGJhc2VuYW1lIiBpbiBpdHMgInN0YXR1cyIgb3V0cHV0LCBzbyB3ZSBzaG91bGQKKwkjIGFudGljaXBhdGUgdGhhdC4gIFRvdGFsbHkgdW5rbm93biBmaWxlcyB3aWxsIGhhdmUgYSBzdGF0dXMKKwkjICJVbmtub3duIi4gSG93ZXZlciwgaWYgdGhleSBleGlzdCBpbiB0aGUgQXR0aWMsIHRoZWlyIHN0YXR1cworCSMgd2lsbCBiZSAiVXAtdG8tZGF0ZSIgKHRoaXMgbWVhbnMgdGhleSB3ZXJlIGFkZGVkIG9uY2UgYnV0IGhhdmUKKwkjIGJlZW4gcmVtb3ZlZCkuCisJJGJhc2VuYW1lID0gIm5vIGZpbGUgJGJhc2VuYW1lIiBpZiAkYWRkZWR7JGJhc2VuYW1lfTsKKworCSRiYXNlbmFtZSA9fiBzL15ccysvLzsKKwkkYmFzZW5hbWUgPX4gcy9ccyskLy87CisKKwlpZiAoIWV4aXN0cygkZnVsbG5hbWV7JGJhc2VuYW1lfSkpIHsKKwkgICRmdWxsbmFtZXskYmFzZW5hbWV9ID0gJG5hbWU7CisJICBwdXNoIChAY2Fuc3RhdHVzZmlsZXMyLCAkbmFtZSk7CisJICBkZWxldGUoJHRvZG97JG5hbWV9KTsKKwl9CisgICAgICB9CisgICAgICBteSBAY3Zzb3V0cHV0OworICAgICAgQGN2c291dHB1dCA9IHhhcmdzX3NhZmVfcGlwZV9jYXB0dXJlKFtAY3ZzLCAnc3RhdHVzJ10sIEBjYW5zdGF0dXNmaWxlczIpOworICAgICAgZm9yZWFjaCBteSAkbCAoQGN2c291dHB1dCkgeworCWNob21wICRsOworCW5leHQgdW5sZXNzCisJICAgIG15ICgkZmlsZSwgJHN0YXR1cykgPSAkbCA9fiAvXkZpbGU6XHMrKC4qXFMpXHMrU3RhdHVzOiAoLiopJC87CisKKwlteSAkZnVsbG5hbWUgPSAkZnVsbG5hbWV7JGZpbGV9OworCXByaW50IFNUREVSUiAiSHVoPyBTdGF0dXMgJyRzdGF0dXMnIHJlcG9ydGVkIGZvciB1bmV4cGVjdGVkIGZpbGUgJyRmaWxlJ1xuIgorCSAgICB1bmxlc3MgZGVmaW5lZCAkZnVsbG5hbWU7CisKKwkjIFRoaXMgcmVzcG9uc2UgbWVhbnMgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QgZXhjZXB0IGluCisJIyBDVlMncyBhdHRpYywgc28gc2V0IHRoZSBzdGF0dXMgYWNjb3JkaW5nbHkKKwkkc3RhdHVzID0gIkluLWF0dGljIgorCSAgICBpZiAkZmlsZSA9fiAvXm5vIGZpbGUgLworCQkmJiAkc3RhdHVzIGVxICdVcC10by1kYXRlJzsKKworCSRjdnNzdGF0eyRmdWxsbmFtZXskZmlsZX19ID0gJHN0YXR1cworCSAgICBpZiBkZWZpbmVkICRmdWxsbmFtZXskZmlsZX07CisgICAgICB9CisgICAgfQorfQorCisjIC4uLiBWYWxpZGF0ZSB0aGF0IG5ldyBmaWxlcyBoYXZlIHRoZSBjb3JyZWN0IHN0YXR1cworZm9yZWFjaCBteSAkZiAoQGFmaWxlcykgeworICAgIG5leHQgdW5sZXNzIGRlZmluZWQobXkgJHN0YXQgPSAkY3Zzc3RhdHskZn0pOworCisgICAgIyBUaGlzIG1lYW5zIHRoZSBmaWxlIGhhcyBuZXZlciBiZWVuIHNlZW4gYmVmb3JlCisgICAgbmV4dCBpZiAkc3RhdCBlcSAnVW5rbm93bic7CisKKyAgICAjIFRoaXMgbWVhbnMgdGhlIGZpbGUgaGFzIGJlZW4gc2VlbiBiZWZvcmUgYnV0IHdhcyByZW1vdmVkCisgICAgbmV4dCBpZiAkc3RhdCBlcSAnSW4tYXR0aWMnOworCisgICAgJGRpcnR5ID0gMTsKKwl3YXJuICJGaWxlICRmIGlzIGFscmVhZHkga25vd24gaW4geW91ciBDVlMgY2hlY2tvdXQgLS0gcGVyaGFwcyBpdCBoYXMgYmVlbiBhZGRlZCBieSBhbm90aGVyIHVzZXIuIE9yIHRoaXMgbWF5IGluZGljYXRlIHRoYXQgaXQgZXhpc3RzIG9uIGEgZGlmZmVyZW50IGJyYW5jaC4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgdXNlIC1mIHRvIGZvcmNlIHRoZSBtZXJnZS5cbiI7CisJd2FybiAiU3RhdHVzIHdhczogJGN2c3N0YXR7JGZ9XG4iOworfQorCisjIC4uLiB2YWxpZGF0ZSBrbm93biBmaWxlcy4KK2ZvcmVhY2ggbXkgJGYgKEBmaWxlcykgeworICAgIG5leHQgaWYgZ3JlcCB7ICRfIGVxICRmIH0gQGFmaWxlczsKKyAgICAjIFRPRE86d2UgbmVlZCB0byBoYW5kbGUgcmVtb3ZlZCBpbiBjdnMKKyAgICB1bmxlc3MgKGRlZmluZWQgKCRjdnNzdGF0eyRmfSkgYW5kICRjdnNzdGF0eyRmfSBlcSAiVXAtdG8tZGF0ZSIpIHsKKwkkZGlydHkgPSAxOworCXdhcm4gIkZpbGUgJGYgbm90IHVwIHRvIGRhdGUgYnV0IGhhcyBzdGF0dXMgJyRjdnNzdGF0eyRmfScgaW4geW91ciBDVlMgY2hlY2tvdXQhXG4iOworICAgIH0KKworICAgICMgRGVwZW5kaW5nIG9uIGhvdyB5b3VyIEdJVCB0cmVlIGdvdCBpbXBvcnRlZCBmcm9tIENWUyB5b3UgbWF5CisgICAgIyBoYXZlIGEgY29uZmxpY3QgYmV0d2VlbiBleHBhbmRlZCBrZXl3b3JkcyBpbiB5b3VyIENWUyB0cmVlIGFuZAorICAgICMgdW5leHBhbmRlZCBrZXl3b3JkcyBpbiB0aGUgcGF0Y2ggYWJvdXQgdG8gYmUgYXBwbGllZC4KKyAgICBpZiAoJG9wdF9rKSB7CisJbXkgJG9yaWdfZmlsZSA9IiRmLm9yaWciOworCXJlbmFtZSAkZiwgJG9yaWdfZmlsZTsKKwlvcGVuKEZJTFRFUl9JTiwgIjwkb3JpZ19maWxlIikgb3IgZGllICJDYW5ub3Qgb3BlbiAkb3JpZ19maWxlXG4iOworCW9wZW4oRklMVEVSX09VVCwgIj4kZiIpIG9yIGRpZSAiQ2Fubm90IG9wZW4gJGZcbiI7CisJd2hpbGUgKDxGSUxURVJfSU4+KQorCXsKKwkgICAgbXkgJGxpbmUgPSAkXzsKKwkgICAgJGxpbmUgPX4gcy9cJChbQS1aXVthLXpdKyk6W15cJF0rXCQvXCQkMVwkL2c7CisJICAgIHByaW50IEZJTFRFUl9PVVQgJGxpbmU7CisJfQorCWNsb3NlIEZJTFRFUl9JTjsKKwljbG9zZSBGSUxURVJfT1VUOworICAgIH0KK30KKworaWYgKCRkaXJ0eSkgeworICAgIGlmICgkb3B0X2YpIHsJd2FybiAiVGhlIHRyZWUgaXMgbm90IGNsZWFuIC0tIGZvcmNlZCBtZXJnZVxuIjsKKwkkZGlydHkgPSAwOworICAgIH0gZWxzZSB7CisJZGllICJFeGl0aW5nOiB5b3VyIENWUyB0cmVlIGlzIG5vdCBjbGVhbiBmb3IgdGhpcyBtZXJnZS4iOworICAgIH0KK30KKworcHJpbnQgIkFwcGx5aW5nXG4iOworaWYgKCRvcHRfVykgeworICAgIHN5c3RlbSgiZ2l0IGNoZWNrb3V0IC1xICRjb21taXReMCIpICYmIGRpZSAiY2Fubm90IHBhdGNoIjsKK30gZWxzZSB7CisgICAgYEdJVF9ESVI9IGdpdC1hcHBseSAkY29udGV4dCAtLXN1bW1hcnkgLS1udW1zdGF0IC0tYXBwbHkgPC5jdnNleHBvcnRjb21taXQuZGlmZmAgfHwgZGllICJjYW5ub3QgcGF0Y2giOworfQorCitwcmludCAiUGF0Y2ggYXBwbGllZCBzdWNjZXNzZnVsbHkuIEFkZGluZyBuZXcgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIENWU1xuIjsKK215ICRkaXJ0eXBhdGNoID0gMDsKKworIworIyBXZSBoYXZlIHRvIGFkZCB0aGUgZGlyZWN0b3JpZXMgaW4gb3JkZXIgb3RoZXJ3aXNlIHdlIHdpbGwgaGF2ZQorIyBwcm9ibGVtcyB3aGVuIHdlIHRyeSBhbmQgYWRkIHRoZSBzdWItZGlyZWN0b3J5IG9mIGEgZGlyZWN0b3J5IHdlCisjIGhhdmUgbm90IGFkZGVkIHlldC4KKyMKKyMgTHVja2lseSB0aGlzIGlzIGVhc3kgdG8gZGVhbCB3aXRoIGJ5IHNvcnRpbmcgdGhlIGRpcmVjdG9yaWVzIGFuZAorIyBkZWFsaW5nIHdpdGggdGhlIHNob3J0ZXN0IG9uZXMgZmlyc3QuCisjCitAZGlycyA9IHNvcnQgeyBsZW5ndGggJGEgPD0+IGxlbmd0aCAkYn0gQGRpcnM7CisKK2ZvcmVhY2ggbXkgJGQgKEBkaXJzKSB7CisgICAgaWYgKHN5c3RlbShAY3ZzLCdhZGQnLCRkKSkgeworCSRkaXJ0eXBhdGNoID0gMTsKKwl3YXJuICJGYWlsZWQgdG8gY3ZzIGFkZCBkaXJlY3RvcnkgJGQgLS0geW91IG1heSBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5IjsKKyAgICB9Cit9CisKK2ZvcmVhY2ggbXkgJGYgKEBhZmlsZXMpIHsKKyAgICBpZiAoZ3JlcCB7ICRfIGVxICRmIH0gQGJmaWxlcykgeworICAgICAgc3lzdGVtKEBjdnMsICdhZGQnLCcta2InLCRmKTsKKyAgICB9IGVsc2UgeworICAgICAgc3lzdGVtKEBjdnMsICdhZGQnLCAkZik7CisgICAgfQorICAgIGlmICgkPykgeworCSRkaXJ0eXBhdGNoID0gMTsKKwl3YXJuICJGYWlsZWQgdG8gY3ZzIGFkZCAkZiAtLSB5b3UgbWF5IG5lZWQgdG8gZG8gaXQgbWFudWFsbHkiOworICAgIH0KK30KKworZm9yZWFjaCBteSAkZiAoQGRmaWxlcykgeworICAgIHN5c3RlbShAY3ZzLCAncm0nLCAnLWYnLCAkZik7CisgICAgaWYgKCQ/KSB7CisJJGRpcnR5cGF0Y2ggPSAxOworCXdhcm4gIkZhaWxlZCB0byBjdnMgcm0gLWYgJGYgLS0geW91IG1heSBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5IjsKKyAgICB9Cit9CisKK3ByaW50ICJDb21taXQgdG8gQ1ZTXG4iOworcHJpbnQgIlBhdGNoIHRpdGxlIChmaXJzdCBjb21tZW50IGxpbmUpOiAkdGl0bGVcbiI7CitteSBAY29tbWl0ZmlsZXMgPSBtYXAgeyB1bmxlc3MgKG0vXHMvKSB7ICdcJycuJF8uJ1wnJzsgfSBlbHNlIHsgJF87IH07IH0gKEBmaWxlcyk7CitteSAkY21kID0gam9pbignICcsIEBjdnMpLiIgY29tbWl0IC1GIC5tc2cgQGNvbW1pdGZpbGVzIjsKKworaWYgKCRkaXJ0eXBhdGNoKSB7CisgICAgcHJpbnQgIk5PVEU6IE9uZSBvciBtb3JlIGh1bmtzIGZhaWxlZCB0byBhcHBseSBjbGVhbmx5LlxuIjsKKyAgICBwcmludCAiWW91J2xsIG5lZWQgdG8gYXBwbHkgdGhlIHBhdGNoIGluIC5jdnNleHBvcnRjb21taXQuZGlmZiBtYW51YWxseVxuIjsKKyAgICBwcmludCAidXNpbmcgYSBwYXRjaCBwcm9ncmFtLiBBZnRlciBhcHBseWluZyB0aGUgcGF0Y2ggYW5kIHJlc29sdmluZyB0aGVcbiI7CisgICAgcHJpbnQgInByb2JsZW1zIHlvdSBtYXkgY29tbWl0IHVzaW5nOiI7CisgICAgcHJpbnQgIlxuICAgIGNkIFwiJG9wdF93XCIiIGlmICRvcHRfdzsKKyAgICBwcmludCAiXG4gICAgJGNtZFxuIjsKKyAgICBwcmludCAiXG4gICAgZ2l0IGNoZWNrb3V0ICRnb19iYWNrX3RvXG4iIGlmICRnb19iYWNrX3RvOworICAgIHByaW50ICJcbiI7CisgICAgZXhpdCgxKTsKK30KKworaWYgKCRvcHRfYykgeworICAgIHByaW50ICJBdXRvY29tbWl0XG4gICRjbWRcbiI7CisgICAgcHJpbnQgeGFyZ3Nfc2FmZV9waXBlX2NhcHR1cmUoW0BjdnMsICdjb21taXQnLCAnLUYnLCAnLm1zZyddLCBAZmlsZXMpOworICAgIGlmICgkPykgeworCWRpZSAiRXhpdGluZzogVGhlIGNvbW1pdCBkaWQgbm90IHN1Y2NlZWQiOworICAgIH0KKyAgICBwcmludCAiQ29tbWl0dGVkIHN1Y2Nlc3NmdWxseSB0byBDVlNcbiI7CisgICAgIyBjbGVhbiB1cAorICAgIHVubGluaygiLm1zZyIpOworfSBlbHNlIHsKKyAgICBwcmludCAiUmVhZHkgZm9yIHlvdSB0byBjb21taXQsIGp1c3QgcnVuOlxuXG4gICAkY21kXG4iOworfQorCisjIGNsZWFuIHVwCit1bmxpbmsoIi5jdnNleHBvcnRjb21taXQuZGlmZiIpOworCitpZiAoJG9wdF9XKSB7CisgICAgc3lzdGVtKCJnaXQgY2hlY2tvdXQgJGdvX2JhY2tfdG8iKSAmJiBkaWUgImNhbm5vdCBtb3ZlIGJhY2sgdG8gJGdvX2JhY2tfdG8iOworICAgIGlmICghKCRnb19iYWNrX3RvID1+IC9eWzAtOWEtZkEtRl17NDB9JC8pKSB7CisJc3lzdGVtKCJnaXQgc3ltYm9saWMtcmVmIEhFQUQgJGdvX2JhY2tfdG8iKSAmJgorCSAgICBkaWUgImNhbm5vdCBtb3ZlIGJhY2sgdG8gJGdvX2JhY2tfdG8iOworICAgIH0KK30KKworIyBDVlMgdmVyc2lvbiAxLjExLnggYW5kIDEuMTIueCBzbGVlcHMgdGhlIHdyb25nIHdheSB0byBlbnN1cmUgdGhlIHRpbWVzdGFtcAorIyB1c2VkIGJ5IENWUyBhbmQgdGhlIG9uZSBzZXQgYnkgc3Vic2VxdWVuY2UgZmlsZSBtb2RpZmljYXRpb25zIGFyZSBkaWZmZXJlbnQuCisjIElmIHRoZXkgYXJlIG5vdCBkaWZmZXJlbnQgQ1ZTIHdpbGwgbm90IGRldGVjdCBjaGFuZ2VzLgorc2xlZXAoMSk7CisKK3N1YiB1c2FnZSB7CisJcHJpbnQgU1RERVJSIDw8RU5EOwordXNhZ2U6IEdJVF9ESVI9L3BhdGgvdG8vLmdpdCBnaXQgY3ZzZXhwb3J0Y29tbWl0IFstaF0gWy1wXSBbLXZdIFstY10gWy1mXSBbLXVdIFsta10gWy13IGN2c3dvcmtkaXJdIFstbSBtc2dwcmVmaXhdIFsgcGFyZW50IF0gY29tbWl0CitFTkQKKwlleGl0KDEpOworfQorCisjIEFuIGFsdGVybmF0aXZlIHRvIGBjb21tYW5kYCB0aGF0IGFsbG93cyBpbnB1dCB0byBiZSBwYXNzZWQgYXMgYW4gYXJyYXkKKyMgdG8gd29yayBhcm91bmQgc2hlbGwgcHJvYmxlbXMgd2l0aCB3ZWlyZCBjaGFyYWN0ZXJzIGluIGFyZ3VtZW50cworIyBpZiB0aGUgZXhlYyByZXR1cm5zIG5vbi16ZXJvIHdlIGRpZQorc3ViIHNhZmVfcGlwZV9jYXB0dXJlIHsKKyAgICBteSBAb3V0cHV0OworICAgIGlmIChteSAkcGlkID0gb3BlbiBteSAkY2hpbGQsICctfCcpIHsKKwlAb3V0cHV0ID0gKDwkY2hpbGQ+KTsKKwljbG9zZSAkY2hpbGQgb3IgZGllIGpvaW4oJyAnLEBfKS4iOiAkISAkPyI7CisgICAgfSBlbHNlIHsKKwlleGVjKEBfKSBvciBkaWUgIiQhICQ/IjsgIyBleGVjKCkgY2FuIGZhaWwgdGhlIGV4ZWN1dGFibGUgY2FuJ3QgYmUgZm91bmQKKyAgICB9CisgICAgcmV0dXJuIHdhbnRhcnJheSA/IEBvdXRwdXQgOiBqb2luKCcnLEBvdXRwdXQpOworfQorCitzdWIgeGFyZ3Nfc2FmZV9waXBlX2NhcHR1cmUgeworCW15ICRNQVhfQVJHX0xFTkdUSCA9IDY1NTM2OworCW15ICRjbWQgPSBzaGlmdDsKKwlteSBAb3V0cHV0OworCW15ICRvdXRwdXQ7CisJd2hpbGUoQF8pIHsKKwkJbXkgQGFyZ3M7CisJCW15ICRsZW5ndGggPSAwOworCQl3aGlsZShAXyAmJiAkbGVuZ3RoIDwgJE1BWF9BUkdfTEVOR1RIKSB7CisJCQlwdXNoIEBhcmdzLCBzaGlmdDsKKwkJCSRsZW5ndGggKz0gbGVuZ3RoKCRhcmdzWyQjYXJnc10pOworCQl9CisJCWlmICh3YW50YXJyYXkpIHsKKwkJCXB1c2ggQG91dHB1dCwgc2FmZV9waXBlX2NhcHR1cmUoQCRjbWQsIEBhcmdzKTsKKwkJfQorCQllbHNlIHsKKwkJCSRvdXRwdXQgLj0gc2FmZV9waXBlX2NhcHR1cmUoQCRjbWQsIEBhcmdzKTsKKwkJfQorCX0KKwlyZXR1cm4gd2FudGFycmF5ID8gQG91dHB1dCA6ICRvdXRwdXQ7Cit9CmRpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LnBlcmwgYi9naXQtY3ZzaW1wb3J0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWU0ZTY1YQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1jdnNpbXBvcnQucGVybApAQCAtMCwwICsxLDExODAgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIFRoaXMgdG9vbCBpcyBjb3B5cmlnaHQgKGMpIDIwMDUsIE1hdHRoaWFzIFVybGljaHMuCisjIEl0IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHbnUgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyMKKyMgVGhlIGJhc2ljIGlkZWEgaXMgdG8gYWdncmVnYXRlIENWUyBjaGVjay1pbnMgaW50byByZWxhdGVkIGNoYW5nZXMuCisjIEZvcnR1bmF0ZWx5LCAiY3ZzcHMiIGRvZXMgdGhhdCBmb3IgdXM7IGFsbCB3ZSBoYXZlIHRvIGRvIGlzIHRvIHBhcnNlCisjIGl0cyBvdXRwdXQuCisjCisjIENoZWNraW5nIG91dCB0aGUgZmlsZXMgaXMgZG9uZSBieSBhIHNpbmdsZSBsb25nLXJ1bm5pbmcgQ1ZTIGNvbm5lY3Rpb24KKyMgLyBzZXJ2ZXIgcHJvY2Vzcy4KKyMKKyMgVGhlIGhlYWQgcmV2aXNpb24gaXMgb24gYnJhbmNoICJvcmlnaW4iIGJ5IGRlZmF1bHQuCisjIFlvdSBjYW4gY2hhbmdlIHRoYXQgd2l0aCB0aGUgJy1vJyBvcHRpb24uCisKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgR2V0b3B0OjpMb25nOwordXNlIEZpbGU6OlNwZWM7Cit1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZmlsZSB0bXBuYW0pOwordXNlIEZpbGU6OlBhdGggcXcobWtwYXRoKTsKK3VzZSBGaWxlOjpCYXNlbmFtZSBxdyhiYXNlbmFtZSBkaXJuYW1lKTsKK3VzZSBUaW1lOjpMb2NhbDsKK3VzZSBJTzo6U29ja2V0OwordXNlIElPOjpQaXBlOwordXNlIFBPU0lYIHF3KHN0cmZ0aW1lIHR6c2V0IGR1cDIgRU5PRU5UKTsKK3VzZSBJUEM6Ok9wZW4yOwordXNlIEdpdCBxdyhnZXRfdHpfb2Zmc2V0KTsKKworJFNJR3snUElQRSd9PSJJR05PUkUiOworc2V0X3RpbWV6b25lKCdVVEMnKTsKKworb3VyICgkb3B0X2gsJG9wdF9vLCRvcHRfdiwkb3B0X2ssJG9wdF91LCRvcHRfZCwkb3B0X3AsJG9wdF9DLCRvcHRfeiwkb3B0X2ksJG9wdF9QLCAkb3B0X3MsJG9wdF9tLEBvcHRfTSwkb3B0X0EsJG9wdF9TLCRvcHRfTCwgJG9wdF9hLCAkb3B0X3IsICRvcHRfUik7CitteSAoJWNvbnZfYXV0aG9yX25hbWUsICVjb252X2F1dGhvcl9lbWFpbCwgJWNvbnZfYXV0aG9yX3R6KTsKKworc3ViIHVzYWdlKDskKSB7CisJbXkgJG1zZyA9IHNoaWZ0OworCXByaW50KFNUREVSUiAiRXJyb3I6ICRtc2dcbiIpIGlmICRtc2c7CisJcHJpbnQgU1RERVJSIDw8RU5EOwordXNhZ2U6IGdpdCBjdnNpbXBvcnQgICAgICMgZmV0Y2gvdXBkYXRlIEdJVCBmcm9tIENWUworICAgICAgIFstbyBicmFuY2gtZm9yLUhFQURdIFstaF0gWy12XSBbLWQgQ1ZTUk9PVF0gWy1BIGF1dGhvci1jb252LWZpbGVdCisgICAgICAgWy1wIG9wdHMtZm9yLWN2c3BzXSBbLVAgZmlsZV0gWy1DIEdJVF9yZXBvc2l0b3J5XSBbLXogZnV6el0gWy1pXSBbLWtdCisgICAgICAgWy11XSBbLXMgc3Vic3RdIFstYV0gWy1tXSBbLU0gcmVnZXhdIFstUyByZWdleF0gWy1MIGNvbW1pdGxpbWl0XQorICAgICAgIFstciByZW1vdGVdIFstUl0gW0NWU19tb2R1bGVdCitFTkQKKwlleGl0KDEpOworfQorCitzdWIgcmVhZF9hdXRob3JfaW5mbygkKSB7CisJbXkgKCRmaWxlKSA9IEBfOworCW15ICR1c2VyOworCW9wZW4gbXkgJGYsICc8JywgIiRmaWxlIiBvciBkaWUoIkZhaWxlZCB0byBvcGVuICRmaWxlOiAkIVxuIik7CisKKwl3aGlsZSAoPCRmPikgeworCQkjIEV4cGVjdGVkIGZvcm1hdCBpcyB0aGlzOgorCQkjICAgZXhvbj1BbmRyZWFzIEVyaWNzc29uIDxhZUBvcDUuc2U+CisJCWlmIChtL14oXFMrPylccyo9XHMqKC4rPylccyo8KC4rKT5ccyokLykgeworCQkJJHVzZXIgPSAkMTsKKwkJCSRjb252X2F1dGhvcl9uYW1leyR1c2VyfSA9ICQyOworCQkJJGNvbnZfYXV0aG9yX2VtYWlseyR1c2VyfSA9ICQzOworCQl9CisJCSMgb3Igd2l0aCBhbiBvcHRpb25hbCB0aW1lem9uZToKKwkJIyAgIHNwYXduPVNpbW9uIFBhd24gPHNwYXduQGZyb2ctcG9uZC5vcmc+IEFtZXJpY2EvQ2hpY2FnbworCQllbHNpZiAobS9eKFxTKz8pXHMqPVxzKiguKz8pXHMqPCguKyk+XHMqKFxTKz8pXHMqJC8pIHsKKwkJCSR1c2VyID0gJDE7CisJCQkkY29udl9hdXRob3JfbmFtZXskdXNlcn0gPSAkMjsKKwkJCSRjb252X2F1dGhvcl9lbWFpbHskdXNlcn0gPSAkMzsKKwkJCSRjb252X2F1dGhvcl90enskdXNlcn0gPSAkNDsKKwkJfQorCQkjIEhvd2V2ZXIsIHdlIGFsc28gcmVhZCBmcm9tIENWU1JPT1QvdXNlcnMgZm9ybWF0CisJCSMgdG8gZWFzZSBtaWdyYXRpb24uCisJCWVsc2lmICgvXihcdyspOihbJyJdPykoLis/KVwyXHMqJC8pIHsKKwkJCW15ICRtYXBwZWQ7CisJCQkoJHVzZXIsICRtYXBwZWQpID0gKCQxLCAkMyk7CisJCQlpZiAoJG1hcHBlZCA9fiAvXlxzKiguKj8pXHMqPCguKik+XHMqJC8pIHsKKwkJCQkkY29udl9hdXRob3JfbmFtZXskdXNlcn0gPSAkMTsKKwkJCQkkY29udl9hdXRob3JfZW1haWx7JHVzZXJ9ID0gJDI7CisJCQl9CisJCQllbHNpZiAoJG1hcHBlZCA9fiAvXjw/KC4qKT4/JC8pIHsKKwkJCQkkY29udl9hdXRob3JfbmFtZXskdXNlcn0gPSAkdXNlcjsKKwkJCQkkY29udl9hdXRob3JfZW1haWx7JHVzZXJ9ID0gJDE7CisJCQl9CisJCX0KKwkJIyBORUVEU1dPUks6IE1heWJlIHdhcm4gb24gdW5yZWNvZ25pemVkIGxpbmVzPworCX0KKwljbG9zZSAoJGYpOworfQorCitzdWIgd3JpdGVfYXV0aG9yX2luZm8oJCkgeworCW15ICgkZmlsZSkgPSBAXzsKKwlvcGVuIG15ICRmLCAnPicsICRmaWxlIG9yCisJICBkaWUoIkZhaWxlZCB0byBvcGVuICRmaWxlIGZvciB3cml0aW5nOiAkISIpOworCisJZm9yZWFjaCAoa2V5cyAlY29udl9hdXRob3JfbmFtZSkgeworCQlwcmludCAkZiAiJF89JGNvbnZfYXV0aG9yX25hbWV7JF99IDwkY29udl9hdXRob3JfZW1haWx7JF99PiI7CisJCXByaW50ICRmICIgJGNvbnZfYXV0aG9yX3R6eyRffSIgaWYgKCRjb252X2F1dGhvcl90enskX30pOworCQlwcmludCAkZiAiXG4iOworCX0KKwljbG9zZSAoJGYpOworfQorCisjIFZlcnNpb25zIG9mIHBlcmwgYmVmb3JlIDUuMTAuMCBtYXkgbm90IGF1dG9tYXRpY2FsbHkgY2hlY2sgJFRaIGVhY2gKKyMgdGltZSBsb2NhbHRpbWUgaXMgcnVuIChtb3N0IHBsYXRmb3JtcyB3aWxsIGRvIHNvIG9ubHkgdGhlIGZpcnN0IHRpbWUpLgorIyBXZSBjYW4gd29yayBhcm91bmQgdGhpcyBieSB1c2luZyB0enNldCgpIHRvIHVwZGF0ZSB0aGUgaW50ZXJuYWwKKyMgdmFyaWFibGUgd2hlbmV2ZXIgd2UgY2hhbmdlIHRoZSBlbnZpcm9ubWVudC4KK3N1YiBzZXRfdGltZXpvbmUgeworCSRFTlZ7VFp9ID0gc2hpZnQ7CisJdHpzZXQoKTsKK30KKworIyBjb252ZXJ0IGdldG9wdHMgc3BlY3MgZm9yIHVzZSBieSBnaXQgY29uZmlnCitteSAlbG9uZ21hcCA9ICgKKwknQTonID0+ICdhdXRob3JzLWZpbGUnLAorCSdNOicgPT4gJ21lcmdlLXJlZ2V4JywKKwknUDonID0+IHVuZGVmLAorCSdSJyA9PiAndHJhY2stcmV2aXNpb25zJywKKwknUzonID0+ICdpZ25vcmUtcGF0aHMnLAorKTsKKworc3ViIHJlYWRfcmVwb19jb25maWcgeworCSMgU3BsaXQgdGhlIHN0cmluZyBiZXR3ZWVuIGNoYXJhY3RlcnMsIHVubGVzcyB0aGVyZSBpcyBhICc6JworCSMgU28gImFiYzpkZSIgYmVjb21lcyBbImEiLCAiYiIsICJjOiIsICJkIiwgImUiXQorCW15IEBvcHRzID0gc3BsaXQoLyAqKD8hOikvLCBzaGlmdCk7CisJZm9yZWFjaCBteSAkbyAoQG9wdHMpIHsKKwkJbXkgJGtleSA9ICRvOworCQkka2V5ID1+IHMvOi8vZzsKKwkJbXkgJGFyZyA9ICdnaXQgY29uZmlnJzsKKwkJJGFyZyAuPSAnIC0tYm9vbCcgaWYgKCRvICF+IC86JC8pOworCQlteSAkY2tleSA9ICRrZXk7CisKKwkJaWYgKGV4aXN0cyAkbG9uZ21hcHskb30pIHsKKwkJCSMgQW4gdXBwZXJjYXNlIG9wdGlvbiBsaWtlIC1SIGNhbm5vdCBiZQorCQkJIyBleHByZXNzZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIGFzIHRoZQorCQkJIyB2YXJpYWJsZSBuYW1lcyBhcmUgZG93bmNhc2VkLgorCQkJJGNrZXkgPSAkbG9uZ21hcHskb307CisJCQluZXh0IGlmICghIGRlZmluZWQgJGNrZXkpOworCQkJJGNrZXkgPX4gcy8tLy9nOworCQl9CisJCWNob21wKG15ICR0bXAgPSBgJGFyZyAtLWdldCBjdnNpbXBvcnQuJGNrZXlgKTsKKwkJaWYgKCR0bXAgJiYgISgkYXJnID1+IC8tLWJvb2wvICYmICR0bXAgZXEgJ2ZhbHNlJykpIHsKKwkJCW5vIHN0cmljdCAncmVmcyc7CisJCQlteSAkb3B0X25hbWUgPSAib3B0XyIgLiAka2V5OworCQkJaWYgKCEkJG9wdF9uYW1lKSB7CisJCQkJJCRvcHRfbmFtZSA9ICR0bXA7CisJCQl9CisJCX0KKwl9Cit9CisKK215ICRvcHRzID0gImhhaXZta3VvOmQ6cDpyOkM6ejpzOk06UDpBOlM6TDpSIjsKK3JlYWRfcmVwb19jb25maWcoJG9wdHMpOworR2V0b3B0OjpMb25nOjpDb25maWd1cmUoICdub19pZ25vcmVfY2FzZScsICdidW5kbGluZycgKTsKKworIyB0dXJuIHRoZSBHZXRvcHQ6OlN0ZCBzcGVjaWZpY2F0aW9uIGluIGEgR2V0b3B0OjpMb25nIG9uZSwKKyMgd2l0aCBzdXBwb3J0IGZvciBtdWx0aXBsZSAtTSBvcHRpb25zCitHZXRPcHRpb25zKCBtYXAgeyBzLzovPXMvOyAvTS8gPyAiJF9cQCIgOiAkXyB9IHNwbGl0KCAvKD8hOikvLCAkb3B0cyApICkKKyAgICBvciB1c2FnZSgpOwordXNhZ2UgaWYgJG9wdF9oOworCitpZiAoQEFSR1YgPT0gMCkgeworCQljaG9tcChteSAkbW9kdWxlID0gYGdpdCBjb25maWcgLS1nZXQgY3ZzaW1wb3J0Lm1vZHVsZWApOworCQlwdXNoKEBBUkdWLCAkbW9kdWxlKSBpZiAkPyA9PSAwOworfQorQEFSR1YgPD0gMSBvciB1c2FnZSgiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBDVlMgbW9kdWxlIik7CisKK2lmICgkb3B0X2QpIHsKKwkkRU5WeyJDVlNST09UIn0gPSAkb3B0X2Q7Cit9IGVsc2lmICgtZiAnQ1ZTL1Jvb3QnKSB7CisJb3BlbiBteSAkZiwgJzwnLCAnQ1ZTL1Jvb3QnIG9yIGRpZSAnRmFpbGVkIHRvIG9wZW4gQ1ZTL1Jvb3QnOworCSRvcHRfZCA9IDwkZj47CisJY2hvbXAgJG9wdF9kOworCWNsb3NlICRmOworCSRFTlZ7IkNWU1JPT1QifSA9ICRvcHRfZDsKK30gZWxzaWYgKCRFTlZ7IkNWU1JPT1QifSkgeworCSRvcHRfZCA9ICRFTlZ7IkNWU1JPT1QifTsKK30gZWxzZSB7CisJdXNhZ2UoIkNWU1JPT1QgbmVlZHMgdG8gYmUgc2V0Iik7Cit9Ciskb3B0X3MgfHw9ICItIjsKKyRvcHRfYSB8fD0gMDsKKworbXkgJGdpdF90cmVlID0gJG9wdF9DOworJGdpdF90cmVlIHx8PSAiLiI7CisKK215ICRyZW1vdGU7CitpZiAoZGVmaW5lZCAkb3B0X3IpIHsKKwkkcmVtb3RlID0gJ3JlZnMvcmVtb3Rlcy8nIC4gJG9wdF9yOworCSRvcHRfbyB8fD0gIm1hc3RlciI7Cit9IGVsc2UgeworCSRvcHRfbyB8fD0gIm9yaWdpbiI7CisJJHJlbW90ZSA9ICdyZWZzL2hlYWRzJzsKK30KKworbXkgJGN2c190cmVlOworaWYgKCQjQVJHViA9PSAwKSB7CisJJGN2c190cmVlID0gJEFSR1ZbMF07Cit9IGVsc2lmICgtZiAnQ1ZTL1JlcG9zaXRvcnknKSB7CisJb3BlbiBteSAkZiwgJzwnLCAnQ1ZTL1JlcG9zaXRvcnknIG9yCisJICAgIGRpZSAnRmFpbGVkIHRvIG9wZW4gQ1ZTL1JlcG9zaXRvcnknOworCSRjdnNfdHJlZSA9IDwkZj47CisJY2hvbXAgJGN2c190cmVlOworCWNsb3NlICRmOworfSBlbHNlIHsKKwl1c2FnZSgiQ1ZTIG1vZHVsZSBoYXMgdG8gYmUgc3BlY2lmaWVkIik7Cit9CisKK291ciBAbWVyZ2VyeCA9ICgpOworaWYgKCRvcHRfbSkgeworCUBtZXJnZXJ4ID0gKCBxci9cYig/OmZyb218b2Z8bWVyZ2V8bWVyZ2luZ3xtZXJnZWQpIChbLVx3XSspL2kgKTsKK30KK2lmIChAb3B0X00pIHsKKwlwdXNoIChAbWVyZ2VyeCwgbWFwIHsgcXIvJF8vIH0gQG9wdF9NKTsKK30KKworIyBSZW1lbWJlciBVVEMgb2Ygb3VyIHN0YXJ0aW5nIHRpbWUKKyMgd2UnbGwgd2FudCB0byBhdm9pZCBpbXBvcnRpbmcgY29tbWl0cworIyB0aGF0IGFyZSB0b28gcmVjZW50CitvdXIgJHN0YXJ0dGltZSA9IHRpbWUoKTsKKworc2VsZWN0KFNUREVSUik7ICR8PTE7IHNlbGVjdChTVERPVVQpOworCisKK3BhY2thZ2UgQ1ZTY29ubjsKKyMgQmFzaWMgQ1ZTIGRpYWxvZy4KKyMgV2UncmUgb25seSBpbnRlcmVzdGVkIGluIGNvbm5lY3RpbmcgYW5kIGRvd25sb2FkaW5nLCBzbyAuLi4KKwordXNlIEZpbGU6OlNwZWM7Cit1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZmlsZSk7Cit1c2UgUE9TSVggcXcoc3RyZnRpbWUgZHVwMik7CisKK3N1YiBuZXcgeworCW15ICgkd2hhdCwkcmVwbywkc3ViZGlyKSA9IEBfOworCSR3aGF0PXJlZigkd2hhdCkgaWYgcmVmKCR3aGF0KTsKKworCW15ICRzZWxmID0ge307CisJJHNlbGYtPnsnYnVmZmVyJ30gPSAiIjsKKwlibGVzcygkc2VsZiwkd2hhdCk7CisKKwkkcmVwbyA9fiBzIy8rJCMjOworCSRzZWxmLT57J2Z1bGxyZXAnfSA9ICRyZXBvOworCSRzZWxmLT5jb25uKCk7CisKKwkkc2VsZi0+eydzdWJkaXInfSA9ICRzdWJkaXI7CisJJHNlbGYtPnsnbGluZXMnfSA9IHVuZGVmOworCisJcmV0dXJuICRzZWxmOworfQorCitzdWIgZmluZF9wYXNzd29yZF9lbnRyeSB7CisJbXkgKCRjdnNwYXNzLCBAY3Zzcm9vdCkgPSBAXzsKKwlteSAoJGZpbGUsICRkZWxpbSkgPSBAJGN2c3Bhc3M7CisJbXkgJHBhc3M7CisJbG9jYWwgKCRfKTsKKworCWlmIChvcGVuKG15ICRmaCwgJGZpbGUpKSB7CisJCSMgOnBzZXJ2ZXI6Y3ZzQG1lYS50bXQudGVsZS5maTovY3Zzcm9vdC96bWFpbGVyIEFoPFoKKwkJQ1ZTUEFTU0ZJTEU6CisJCXdoaWxlICg8JGZoPikgeworCQkJY2hvbXA7CisJCQlzL15cL1xkK1xzKy8vOworCQkJbXkgKCR3LCAkcCkgPSBzcGxpdCgkZGVsaW0sJF8sMik7CisJCQlmb3IgbXkgJGN2c3Jvb3QgKEBjdnNyb290KSB7CisJCQkJaWYgKCR3IGVxICRjdnNyb290KSB7CisJCQkJCSRwYXNzID0gJHA7CisJCQkJCWxhc3QgQ1ZTUEFTU0ZJTEU7CisJCQkJfQorCQkJfQorCQl9CisJCWNsb3NlKCRmaCk7CisJfQorCXJldHVybiAkcGFzczsKK30KKworc3ViIGNvbm4geworCW15ICRzZWxmID0gc2hpZnQ7CisJbXkgJHJlcG8gPSAkc2VsZi0+eydmdWxscmVwJ307CisJaWYgKCRyZXBvID1+IHMvXjpwc2VydmVyKD86KFteOl0qKSk6KD86KC4qPykoPzo6KC4qPykpP0ApPyhbXjpcL10qKSg/OjooXGQqKSk/Ly8pIHsKKwkJbXkgKCRwYXJhbSwkdXNlciwkcGFzcywkc2VydiwkcG9ydCkgPSAoJDEsJDIsJDMsJDQsJDUpOworCisJCW15ICgkcHJveHlob3N0LCRwcm94eXBvcnQpOworCQlpZiAoJHBhcmFtICYmICgkcGFyYW0gPX4gbS9wcm94eT0oW147XSspLykpIHsKKwkJCSRwcm94eWhvc3QgPSAkMTsKKwkJCSMgRGVmYXVsdCBwcm94eXBvcnQsIGlmIG5vdCBzcGVjaWZpZWQsIGlzIDgwODAuCisJCQkkcHJveHlwb3J0ID0gODA4MDsKKwkJCWlmICgkRU5WeyJDVlNfUFJPWFlfUE9SVCJ9KSB7CisJCQkJJHByb3h5cG9ydCA9ICRFTlZ7IkNWU19QUk9YWV9QT1JUIn07CisJCQl9CisJCQlpZiAoJHBhcmFtID1+IG0vcHJveHlwb3J0PShbXjtdKykvKSB7CisJCQkJJHByb3h5cG9ydCA9ICQxOworCQkJfQorCQl9CisJCSRyZXBvIHx8PSAnLyc7CisKKwkJIyBpZiB1c2VybmFtZSBpcyBub3QgZXhwbGljaXQgaW4gQ1ZTUk9PVCwgdGhlbiB1c2UgY3VycmVudCB1c2VyLCBhcyBjdnMgd291bGQKKwkJJHVzZXI9KGdldGxvZ2luKCkgfHwgJEVOVnsnTE9HTkFNRSd9IHx8ICRFTlZ7J1VTRVInfSB8fCAiYW5vbnltb3VzIikgdW5sZXNzICR1c2VyOworCQlteSAkcnIyID0gIi0iOworCQl1bmxlc3MgKCRwb3J0KSB7CisJCQkkcnIyID0gIjpwc2VydmVyOiR1c2VyXEAkc2VydjokcmVwbyI7CisJCQkkcG9ydD0yNDAxOworCQl9CisJCW15ICRyciA9ICI6cHNlcnZlcjokdXNlclxAJHNlcnY6JHBvcnQkcmVwbyI7CisKKwkJaWYgKCRwYXNzKSB7CisJCQkkcGFzcyA9ICRzZWxmLT5fc2NyYW1ibGUoJHBhc3MpOworCQl9IGVsc2UgeworCQkJbXkgQGN2c3Bhc3MgPSAoWyRFTlZ7J0hPTUUnfS4iLy5jdnNwYXNzIiwgcXIvXHMvXSwKKwkJCQkgICAgICAgWyRFTlZ7J0hPTUUnfS4iLy5jdnMvY3ZzcGFzcyIsIHFyLz0vXSk7CisJCQlteSBAbG9jID0gKCk7CisJCQlmb3JlYWNoIG15ICRjdnNwYXNzIChAY3ZzcGFzcykgeworCQkJCW15ICRwID0gZmluZF9wYXNzd29yZF9lbnRyeSgkY3ZzcGFzcywgJHJyLCAkcnIyKTsKKwkJCQlpZiAoJHApIHsKKwkJCQkJcHVzaCBAbG9jLCAkY3ZzcGFzcy0+WzBdOworCQkJCQkkcGFzcyA9ICRwOworCQkJCX0KKwkJCX0KKworCQkJaWYgKDEgPCBAbG9jKSB7CisJCQkJZGllKCJNdWx0aXBsZSBjdnMgcGFzc3dvcmQgZmlsZXMgaGF2ZSAiLgorCQkJCSAgICAiZW50cmllcyBmb3IgQ1ZTUk9PVCAkb3B0X2Q6IEBsb2MiKTsKKwkJCX0gZWxzaWYgKCEkcGFzcykgeworCQkJCSRwYXNzID0gIkEiOworCQkJfQorCQl9CisKKwkJbXkgKCRzLCAkcmVwKTsKKwkJaWYgKCRwcm94eWhvc3QpIHsKKworCQkJIyBVc2UgYSBIVFRQIFByb3h5LiBPbmx5IHdvcmtzIGZvciBIVFRQIHByb3hpZXMgdGhhdAorCQkJIyBkb24ndCByZXF1aXJlIHVzZXIgYXV0aGVudGljYXRpb24KKwkJCSMKKwkJCSMgU2VlOiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMyODE3LnR4dAorCisJCQkkcyA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhQZWVySG9zdCA9PiAkcHJveHlob3N0LCBQZWVyUG9ydCA9PiAkcHJveHlwb3J0KTsKKwkJCWRpZSAiU29ja2V0IHRvICRwcm94eWhvc3Q6ICQhXG4iIHVubGVzcyBkZWZpbmVkICRzOworCQkJJHMtPndyaXRlKCJDT05ORUNUICRzZXJ2OiRwb3J0IEhUVFAvMS4xXHJcbkhvc3Q6ICRzZXJ2OiRwb3J0XHJcblxyXG4iKQorCSAgICAgICAgICAgICAgICAgICAgICAgIG9yIGRpZSAiV3JpdGUgdG8gJHByb3h5aG9zdDogJCFcbiI7CisJICAgICAgICAgICAgICAgICRzLT5mbHVzaCgpOworCisJCQkkcmVwID0gPCRzPjsKKworCQkJIyBUaGUgYW5zd2VyIHNob3VsZCBsb29rIGxpa2UgJ0hUVFAvMS54IDJ5eSAuLi4uJworCQkJaWYgKCEoJHJlcCA9fiBtI15IVFRQLzFcLi4gMlswLTldWzAtOV0jKSkgeworCQkJCWRpZSAiUHJveHkgY29ubmVjdDogJHJlcFxuIjsKKwkJCX0KKwkJCSMgU2tpcCB1cCB0byB0aGUgZW1wdHkgbGluZSBvZiB0aGUgcHJveHkgc2VydmVyIG91dHB1dAorCQkJIyBpbmNsdWRpbmcgdGhlIHJlc3BvbnNlIGhlYWRlcnMuCisJCQl3aGlsZSAoJHJlcCA9IDwkcz4pIHsKKwkJCQlsYXN0IGlmICghZGVmaW5lZCAkcmVwIHx8CisJCQkJCSAkcmVwIGVxICJcbiIgfHwKKwkJCQkJICRyZXAgZXEgIlxyXG4iKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRzID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KFBlZXJIb3N0ID0+ICRzZXJ2LCBQZWVyUG9ydCA9PiAkcG9ydCk7CisJCQlkaWUgIlNvY2tldCB0byAkc2VydjogJCFcbiIgdW5sZXNzIGRlZmluZWQgJHM7CisJCX0KKworCQkkcy0+d3JpdGUoIkJFR0lOIEFVVEggUkVRVUVTVFxuJHJlcG9cbiR1c2VyXG4kcGFzc1xuRU5EIEFVVEggUkVRVUVTVFxuIikKKwkJCW9yIGRpZSAiV3JpdGUgdG8gJHNlcnY6ICQhXG4iOworCQkkcy0+Zmx1c2goKTsKKworCQkkcmVwID0gPCRzPjsKKworCQlpZiAoJHJlcCBuZSAiSSBMT1ZFIFlPVVxuIikgeworCQkJJHJlcD0iPHVua25vd24+IiB1bmxlc3MgJHJlcDsKKwkJCWRpZSAiQXV0aFJlcGx5OiAkcmVwXG4iOworCQl9CisJCSRzZWxmLT57J3NvY2tldG8nfSA9ICRzOworCQkkc2VsZi0+eydzb2NrZXRpJ30gPSAkczsKKwl9IGVsc2UgeyAjIGxvY2FsIG9yIGV4dDogRm9yayBvZmYgb3VyIG93biBjdnMgc2VydmVyLgorCQlteSAkcHIgPSBJTzo6UGlwZS0+bmV3KCk7CisJCW15ICRwdyA9IElPOjpQaXBlLT5uZXcoKTsKKwkJbXkgJHBpZCA9IGZvcmsoKTsKKwkJZGllICJGb3JrOiAkIVxuIiB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQlteSAkY3ZzID0gJ2N2cyc7CisJCSRjdnMgPSAkRU5We0NWU19TRVJWRVJ9IGlmIGV4aXN0cyAkRU5We0NWU19TRVJWRVJ9OworCQlteSAkcnNoID0gJ3JzaCc7CisJCSRyc2ggPSAkRU5We0NWU19SU0h9IGlmIGV4aXN0cyAkRU5We0NWU19SU0h9OworCisJCW15IEBjdnMgPSAoJGN2cywgJ3NlcnZlcicpOworCQlteSAoJGxvY2FsLCAkdXNlciwgJGhvc3QpOworCQkkbG9jYWwgPSAkcmVwbyA9fiBzLzpsb2NhbDovLzsKKwkJaWYgKCEkbG9jYWwpIHsKKwkJICAgICRyZXBvID1+IHMvOmV4dDovLzsKKwkJICAgICRsb2NhbCA9ICEoJHJlcG8gPX4gcy9eKD86KFteXEA6XSspXEApPyhbXjpdKyk6Ly8pOworCQkgICAgKCR1c2VyLCAkaG9zdCkgPSAoJDEsICQyKTsKKwkJfQorCQlpZiAoISRsb2NhbCkgeworCQkgICAgaWYgKCR1c2VyKSB7CisJCQl1bnNoaWZ0IEBjdnMsICRyc2gsICctbCcsICR1c2VyLCAkaG9zdDsKKwkJICAgIH0gZWxzZSB7CisJCQl1bnNoaWZ0IEBjdnMsICRyc2gsICRob3N0OworCQkgICAgfQorCQl9CisKKwkJdW5sZXNzICgkcGlkKSB7CisJCQkkcHItPndyaXRlcigpOworCQkJJHB3LT5yZWFkZXIoKTsKKwkJCWR1cDIoJHB3LT5maWxlbm8oKSwwKTsKKwkJCWR1cDIoJHByLT5maWxlbm8oKSwxKTsKKwkJCSRwci0+Y2xvc2UoKTsKKwkJCSRwdy0+Y2xvc2UoKTsKKwkJCWV4ZWMoQGN2cyk7CisJCX0KKwkJJHB3LT53cml0ZXIoKTsKKwkJJHByLT5yZWFkZXIoKTsKKwkJJHNlbGYtPnsnc29ja2V0byd9ID0gJHB3OworCQkkc2VsZi0+eydzb2NrZXRpJ30gPSAkcHI7CisJfQorCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIlJvb3QgJHJlcG9cbiIpOworCisJIyBUcmlhbCBhbmQgZXJyb3Igc2F5cyB0aGF0IHRoaXMgcHJvYmFibHkgaXMgdGhlIG1pbmltdW0gc2V0CisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiVmFsaWQtcmVzcG9uc2VzIG9rIGVycm9yIFZhbGlkLXJlcXVlc3RzIE1vZGUgTSBNYmluYXJ5IEUgQ2hlY2tlZC1pbiBDcmVhdGVkIFVwZGF0ZWQgTWVyZ2VkIFJlbW92ZWRcbiIpOworCisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgidmFsaWQtcmVxdWVzdHNcbiIpOworCSRzZWxmLT57J3NvY2tldG8nfS0+Zmx1c2goKTsKKworCW15ICRyZXA9JHNlbGYtPnJlYWRsaW5lKCk7CisJZGllICJGYWlsZWQgdG8gcmVhZCBmcm9tIHNlcnZlciIgdW5sZXNzIGRlZmluZWQgJHJlcDsKKwljaG9tcCgkcmVwKTsKKwlpZiAoJHJlcCAhfiBzL15WYWxpZC1yZXF1ZXN0c1xzKi8vKSB7CisJCSRyZXA9Ijx1bmtub3duPiIgdW5sZXNzICRyZXA7CisJCWRpZSAiRXhwZWN0ZWQgVmFsaWQtcmVxdWVzdHMgZnJvbSBzZXJ2ZXIsIGJ1dCBnb3Q6ICRyZXBcbiI7CisJfQorCWNob21wKG15ICRyZXM9JHNlbGYtPnJlYWRsaW5lKCkpOworCWRpZSAidmFsaWRSZXBseTogJHJlc1xuIiBpZiAkcmVzIG5lICJvayI7CisKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJVc2VVbmNoYW5nZWRcbiIpIGlmICRyZXAgPX4gL1xiVXNlVW5jaGFuZ2VkXGIvOworCSRzZWxmLT57J3JlcG8nfSA9ICRyZXBvOworfQorCitzdWIgcmVhZGxpbmUgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPnsnc29ja2V0aSd9LT5nZXRsaW5lKCk7Cit9CisKK3N1YiBfZmlsZSB7CisJIyBSZXF1ZXN0IGEgZmlsZSB3aXRoIGEgZ2l2ZW4gcmV2aXNpb24uCisJIyBUcmlhbCBhbmQgZXJyb3Igc2F5cyB0aGlzIGlzIGEgZ29vZCB3YXkgdG8gZG8gaXQuIDotLworCW15ICgkc2VsZiwkZm4sJHJldikgPSBAXzsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAtTlxuIikgb3IgcmV0dXJuIHVuZGVmOworCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIkFyZ3VtZW50IC1QXG4iKSBvciByZXR1cm4gdW5kZWY7CisJIyAta2s6IExpbnVzJyB2ZXJzaW9uIGRvZXNuJ3QgdXNlIGl0IC0gZGVmYXVsdHMgdG8gb2ZmCisJaWYgKCRvcHRfaykgeworCSAgICAkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAta2tcbiIpIG9yIHJldHVybiB1bmRlZjsKKwl9CisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiQXJndW1lbnQgLXJcbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAkcmV2XG4iKSBvciByZXR1cm4gdW5kZWY7CisJJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiQXJndW1lbnQgLS1cbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJBcmd1bWVudCAkc2VsZi0+eydzdWJkaXInfS8kZm5cbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJEaXJlY3RvcnkgLlxuIikgb3IgcmV0dXJuIHVuZGVmOworCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIiRzZWxmLT57J3JlcG8nfVxuIikgb3IgcmV0dXJuIHVuZGVmOworCSMgJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiU3RpY2t5IFQxLjBcbiIpIG9yIHJldHVybiB1bmRlZjsKKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJjb1xuIikgb3IgcmV0dXJuIHVuZGVmOworCSRzZWxmLT57J3NvY2tldG8nfS0+Zmx1c2goKSBvciByZXR1cm4gdW5kZWY7CisJJHNlbGYtPnsnbGluZXMnfSA9IDA7CisJcmV0dXJuIDE7Cit9CitzdWIgX2xpbmUgeworCSMgUmVhZCBhIGxpbmUgZnJvbSB0aGUgc2VydmVyLgorCSMgLi4uIGV4Y2VwdCB0aGF0ICdsaW5lJyBtYXkgYmUgYW4gZW50aXJlIGZpbGUuIDstKQorCW15ICgkc2VsZiwgJGZoKSA9IEBfOworCWRpZSAiTm90IGluIGxpbmVzIiB1bmxlc3MgZGVmaW5lZCAkc2VsZi0+eydsaW5lcyd9OworCisJbXkgJGxpbmU7CisJbXkgJHJlcz0wOworCXdoaWxlIChkZWZpbmVkKCRsaW5lID0gJHNlbGYtPnJlYWRsaW5lKCkpKSB7CisJCSMgTSBVIGdudXBnLWN2cy1yZXAvQVVUSE9SUworCQkjIFVwZGF0ZWQgZ251cGctY3ZzLXJlcC8KKwkJIyAvZGF0ZW4vc3JjL3JzeW5jL2dudXBnLWN2cy1yZXAvQVVUSE9SUworCQkjIC9BVVRIT1JTLzEuMS8vL1QxLjEKKwkJIyB1PXJ3LGc9cncsbz1ydworCQkjIDAKKwkJIyBvaworCisJCWlmICgkbGluZSA9fiBzL14oPzpDcmVhdGVkfFVwZGF0ZWQpIC8vKSB7CisJCQkkbGluZSA9ICRzZWxmLT5yZWFkbGluZSgpOyAjIHBhdGgKKwkJCSRsaW5lID0gJHNlbGYtPnJlYWRsaW5lKCk7ICMgRW50cmllcyBsaW5lCisJCQlteSAkbW9kZSA9ICRzZWxmLT5yZWFkbGluZSgpOyBjaG9tcCAkbW9kZTsKKwkJCSRzZWxmLT57J21vZGUnfSA9ICRtb2RlOworCQkJZGVmaW5lZCAobXkgJGNudCA9ICRzZWxmLT5yZWFkbGluZSgpKQorCQkJCW9yIGRpZSAiRU9GIGZyb20gc2VydmVyIGFmdGVyICdDaGFuZ2VkJ1xuIjsKKwkJCWNob21wICRjbnQ7CisJCQlkaWUgIkR1aDogRmlsZXNpemUgJGNudCIgaWYgJGNudCAhfiAvXlxkKyQvOworCQkJJGxpbmU9IiI7CisJCQkkcmVzID0gJHNlbGYtPl9mZXRjaGZpbGUoJGZoLCAkY250KTsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gcy9eIC8vKSB7CisJCQlwcmludCAkZmggJGxpbmU7CisJCQkkcmVzICs9IGxlbmd0aCgkbGluZSk7CisJCX0gZWxzaWYgKCRsaW5lID1+IC9eTVxiLykgeworCQkJIyBvdXRwdXQsIGRvIG5vdGhpbmcKKwkJfSBlbHNpZiAoJGxpbmUgPX4gL15NYmluYXJ5XGIvKSB7CisJCQlteSAkY250OworCQkJZGllICJFT0YgZnJvbSBzZXJ2ZXIgYWZ0ZXIgJ01iaW5hcnknIiB1bmxlc3MgZGVmaW5lZCAoJGNudCA9ICRzZWxmLT5yZWFkbGluZSgpKTsKKwkJCWNob21wICRjbnQ7CisJCQlkaWUgIkR1aDogTWJpbmFyeSAkY250IiBpZiAkY250ICF+IC9eXGQrJC8gb3IgJGNudDwxOworCQkJJGxpbmU9IiI7CisJCQkkcmVzICs9ICRzZWxmLT5fZmV0Y2hmaWxlKCRmaCwgJGNudCk7CisJCX0gZWxzZSB7CisJCQljaG9tcCAkbGluZTsKKwkJCWlmICgkbGluZSBlcSAib2siKSB7CisJCQkJIyBwcmludCBTVERFUlIgIlM6IG9rICgiLmxlbmd0aCgkcmVzKS4iKVxuIjsKKwkJCQlyZXR1cm4gJHJlczsKKwkJCX0gZWxzaWYgKCRsaW5lID1+IHMvXkUgLy8pIHsKKwkJCQkjIHByaW50IFNUREVSUiAiUzogJGxpbmVcbiI7CisJCQl9IGVsc2lmICgkbGluZSA9fiAvXihSZW1vdmUtZW50cnl8UmVtb3ZlZCkgL2kpIHsKKwkJCQkkbGluZSA9ICRzZWxmLT5yZWFkbGluZSgpOyAjIGZpbGVuYW1lCisJCQkJJGxpbmUgPSAkc2VsZi0+cmVhZGxpbmUoKTsgIyBPSworCQkJCWNob21wICRsaW5lOworCQkJCWRpZSAiVW5rbm93bjogJGxpbmUiIGlmICRsaW5lIG5lICJvayI7CisJCQkJcmV0dXJuIC0xOworCQkJfSBlbHNlIHsKKwkJCQlkaWUgIlVua25vd246ICRsaW5lXG4iOworCQkJfQorCQl9CisJfQorCXJldHVybiB1bmRlZjsKK30KK3N1YiBmaWxlIHsKKwlteSAoJHNlbGYsJGZuLCRyZXYpID0gQF87CisJbXkgJHJlczsKKworCW15ICgkZmgsICRuYW1lKSA9IHRlbXBmaWxlKCdnaXRjdnMuWFhYWFhYJywKKwkJICAgIERJUiA9PiBGaWxlOjpTcGVjLT50bXBkaXIoKSwgVU5MSU5LID0+IDEpOworCisJJHNlbGYtPl9maWxlKCRmbiwkcmV2KSBhbmQgJHJlcyA9ICRzZWxmLT5fbGluZSgkZmgpOworCisJaWYgKCFkZWZpbmVkICRyZXMpIHsKKwkgICAgcHJpbnQgU1RERVJSICJTZXJ2ZXIgaGFzIGdvbmUgYXdheSB3aGlsZSBmZXRjaGluZyAkZm4gJHJldiwgcmV0cnlpbmcuLi5cbiI7CisJICAgIHRydW5jYXRlICRmaCwgMDsKKwkgICAgJHNlbGYtPmNvbm4oKTsKKwkgICAgJHNlbGYtPl9maWxlKCRmbiwkcmV2KSBvciBkaWUgIk5vIGZpbGUgY29tbWFuZCBzZW5kIjsKKwkgICAgJHJlcyA9ICRzZWxmLT5fbGluZSgkZmgpOworCSAgICBkaWUgIlJldHJ5IGZhaWxlZCIgdW5sZXNzIGRlZmluZWQgJHJlczsKKwl9CisJY2xvc2UgKCRmaCk7CisKKwlyZXR1cm4gKCRuYW1lLCAkcmVzKTsKK30KK3N1YiBfZmV0Y2hmaWxlIHsKKwlteSAoJHNlbGYsICRmaCwgJGNudCkgPSBAXzsKKwlteSAkcmVzID0gMDsKKwlteSAkYnVmc2l6ZSA9IDEwMjQgKiAxMDI0OworCXdoaWxlICgkY250KSB7CisJICAgIGlmICgkYnVmc2l6ZSA+ICRjbnQpIHsKKwkJJGJ1ZnNpemUgPSAkY250OworCSAgICB9CisJICAgIG15ICRidWY7CisJICAgIG15ICRudW0gPSAkc2VsZi0+eydzb2NrZXRpJ30tPnJlYWQoJGJ1ZiwkYnVmc2l6ZSk7CisJICAgIGRpZSAiU2VydmVyOiBGaWxlc2l6ZSAkY250OiAkbnVtOiAkIVxuIiBpZiBub3QgZGVmaW5lZCAkbnVtIG9yICRudW08PTA7CisJICAgIHByaW50ICRmaCAkYnVmOworCSAgICAkcmVzICs9ICRudW07CisJICAgICRjbnQgLT0gJG51bTsKKwl9CisJcmV0dXJuICRyZXM7Cit9CisKK3N1YiBfc2NyYW1ibGUgeworCW15ICgkc2VsZiwgJHBhc3MpID0gQF87CisJbXkgJHNjcmFtYmxlZCA9ICJBIjsKKworCXJldHVybiAkc2NyYW1ibGVkIHVubGVzcyAkcGFzczsKKworCW15ICRwYXNzX2xlbiA9IGxlbmd0aCgkcGFzcyk7CisJbXkgQHBhc3NfYXJyID0gc3BsaXQoIiIsICRwYXNzKTsKKwlteSAkaTsKKworCSMgZnJvbSBjdnMvc3JjL3NjcmFtYmxlLmMKKwlteSBAc2hpZnRzID0gKAorCQkgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisJCSAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwKKwkJMTE0LDEyMCwgNTMsIDc5LCA5NiwxMDksIDcyLDEwOCwgNzAsIDY0LCA3NiwgNjcsMTE2LCA3NCwgNjgsIDg3LAorCQkxMTEsIDUyLCA3NSwxMTksIDQ5LCAzNCwgODIsIDgxLCA5NSwgNjUsMTEyLCA4NiwxMTgsMTEwLDEyMiwxMDUsCisJCSA0MSwgNTcsIDgzLCA0MywgNDYsMTAyLCA0MCwgODksIDM4LDEwMywgNDUsIDUwLCA0MiwxMjMsIDkxLCAzNSwKKwkJMTI1LCA1NSwgNTQsIDY2LDEyNCwxMjYsIDU5LCA0NywgOTIsIDcxLDExNSwgNzgsIDg4LDEwNywxMDYsIDU2LAorCQkgMzYsMTIxLDExNywxMDQsMTAxLDEwMCwgNjksIDczLCA5OSwgNjMsIDk0LCA5MywgMzksIDM3LCA2MSwgNDgsCisJCSA1OCwxMTMsIDMyLCA5MCwgNDQsIDk4LCA2MCwgNTEsIDMzLCA5NywgNjIsIDc3LCA4NCwgODAsIDg1LDIyMywKKwkJMjI1LDIxNiwxODcsMTY2LDIyOSwxODksMjIyLDE4OCwxNDEsMjQ5LDE0OCwyMDAsMTg0LDEzNiwyNDgsMTkwLAorCQkxOTksMTcwLDE4MSwyMDQsMTM4LDIzMiwyMTgsMTgzLDI1NSwyMzQsMjIwLDI0NywyMTMsMjAzLDIyNiwxOTMsCisJCTE3NCwxNzIsMjI4LDI1MiwyMTcsMjAxLDEzMSwyMzAsMTk3LDIxMSwxNDUsMjM4LDE2MSwxNzksMTYwLDIxMiwKKwkJMjA3LDIyMSwyNTQsMTczLDIwMiwxNDYsMjI0LDE1MSwxNDAsMTk2LDIwNSwxMzAsMTM1LDEzMywxNDMsMjQ2LAorCQkxOTIsMTU5LDI0NCwyMzksMTg1LDE2OCwyMTUsMTQ0LDEzOSwxNjUsMTgwLDE1NywxNDcsMTg2LDIxNCwxNzYsCisJCTIyNywyMzEsMjE5LDE2OSwxNzUsMTU2LDIwNiwxOTgsMTI5LDE2NCwxNTAsMjEwLDE1NCwxNzcsMTM0LDEyNywKKwkJMTgyLDEyOCwxNTgsMjA4LDE2MiwxMzIsMTY3LDIwOSwxNDksMjQxLDE1MywyNTEsMjM3LDIzNiwxNzEsMTk1LAorCQkyNDMsMjMzLDI1MywyNDAsMTk0LDI1MCwxOTEsMTU1LDE0MiwxMzcsMjQ1LDIzNSwxNjMsMjQyLDE3OCwxNTIKKwkpOworCisJZm9yICgkaSA9IDA7ICRpIDwgJHBhc3NfbGVuOyAkaSsrKSB7CisJCSRzY3JhbWJsZWQgLj0gcGFjaygiQyIsICRzaGlmdHNbb3JkKCRwYXNzX2FyclskaV0pXSk7CisJfQorCisJcmV0dXJuICRzY3JhbWJsZWQ7Cit9CisKK3BhY2thZ2UgbWFpbjsKKworbXkgJGN2cyA9IENWU2Nvbm4tPm5ldygkb3B0X2QsICRjdnNfdHJlZSk7CisKKworc3ViIHBkYXRlKCQpIHsKKwlteSAoJGQpID0gQF87CisJbSMoXGR7Miw0fSkvKFxkXGQpLyhcZFxkKVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpPyMKKwkJb3IgZGllICJVbnBhcnNlYWJsZSBkYXRlOiAkZFxuIjsKKwlteSAkeT0kMTsgJHktPTE5MDAgaWYgJHk+MTkwMDsKKwlyZXR1cm4gdGltZWdtKCQ2fHwwLCQ1LCQ0LCQzLCQyLTEsJHkpOworfQorCitzdWIgcG1vZGUoJCkgeworCW15ICgkbW9kZSkgPSBAXzsKKwlteSAkbSA9IDA7CisJbXkgJG1tID0gMDsKKwlteSAkdW0gPSAwOworCWZvciBteSAkeChzcGxpdCgvLywkbW9kZSkpIHsKKwkJaWYgKCR4IGVxICIsIikgeworCQkJJG0gfD0gJG1tJiR1bTsKKwkJCSRtbSA9IDA7CisJCQkkdW0gPSAwOworCQl9IGVsc2lmICgkeCBlcSAidSIpIHsgJHVtIHw9IDA3MDA7CisJCX0gZWxzaWYgKCR4IGVxICJnIikgeyAkdW0gfD0gMDA3MDsKKwkJfSBlbHNpZiAoJHggZXEgIm8iKSB7ICR1bSB8PSAwMDA3OworCQl9IGVsc2lmICgkeCBlcSAiciIpIHsgJG1tIHw9IDA0NDQ7CisJCX0gZWxzaWYgKCR4IGVxICJ3IikgeyAkbW0gfD0gMDIyMjsKKwkJfSBlbHNpZiAoJHggZXEgIngiKSB7ICRtbSB8PSAwMTExOworCQl9IGVsc2lmICgkeCBlcSAiPSIpIHsgIyBkbyBub3RoaW5nCisJCX0gZWxzZSB7IGRpZSAiVW5rbm93biBtb2RlOiAkbW9kZVxuIjsKKwkJfQorCX0KKwkkbSB8PSAkbW0mJHVtOworCXJldHVybiAkbTsKK30KKworc3ViIGdldHdkKCkgeworCW15ICRwd2QgPSBgcHdkYDsKKwljaG9tcCAkcHdkOworCXJldHVybiAkcHdkOworfQorCitzdWIgaXNfc2hhMSB7CisJbXkgJHMgPSBzaGlmdDsKKwlyZXR1cm4gJHMgPX4gL15bYS1mMC05XXs0MH0kLzsKK30KKworc3ViIGdldF9oZWFkcmVmICgkKSB7CisJbXkgJG5hbWUgPSBzaGlmdDsKKwlteSAkciA9IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICckbmFtZScgMj4vZGV2L251bGxgOworCXJldHVybiB1bmRlZiB1bmxlc3MgJD8gPT0gMDsKKwljaG9tcCAkcjsKKwlyZXR1cm4gJHI7Cit9CisKK215ICR1c2VyX2ZpbGVuYW1lX3ByZXBlbmQgPSAnJzsKK3N1YiBtdW5nZV91c2VyX2ZpbGVuYW1lIHsKKwlteSAkbmFtZSA9IHNoaWZ0OworCXJldHVybiBGaWxlOjpTcGVjLT5maWxlX25hbWVfaXNfYWJzb2x1dGUoJG5hbWUpID8KKwkJJG5hbWUgOgorCQkkdXNlcl9maWxlbmFtZV9wcmVwZW5kIC4gJG5hbWU7Cit9CisKKy1kICRnaXRfdHJlZQorCW9yIG1rZGlyKCRnaXRfdHJlZSwwNzc3KQorCW9yIGRpZSAiQ291bGQgbm90IGNyZWF0ZSAkZ2l0X3RyZWU6ICQhIjsKK2lmICgkZ2l0X3RyZWUgbmUgJy4nKSB7CisJJHVzZXJfZmlsZW5hbWVfcHJlcGVuZCA9IGdldHdkKCkgLiAnLyc7CisJY2hkaXIoJGdpdF90cmVlKTsKK30KKworbXkgJGxhc3RfYnJhbmNoID0gIiI7CitteSAkb3JpZ19icmFuY2ggPSAiIjsKK215ICVicmFuY2hfZGF0ZTsKK215ICR0aXBfYXRfc3RhcnQgPSB1bmRlZjsKKworbXkgJGdpdF9kaXIgPSAkRU5WeyJHSVRfRElSIn0gfHwgIi5naXQiOworJGdpdF9kaXIgPSBnZXR3ZCgpLiIvIi4kZ2l0X2RpciB1bmxlc3MgJGdpdF9kaXIgPX4gbSNeLyM7CiskRU5WeyJHSVRfRElSIn0gPSAkZ2l0X2RpcjsKK215ICRvcmlnX2dpdF9pbmRleDsKKyRvcmlnX2dpdF9pbmRleCA9ICRFTlZ7R0lUX0lOREVYX0ZJTEV9IGlmIGV4aXN0cyAkRU5We0dJVF9JTkRFWF9GSUxFfTsKKworbXkgJWluZGV4OyAjIGhvbGRzIGZpbGVuYW1lcyBvZiBvbmUgaW5kZXggcGVyIGJyYW5jaAorCit1bmxlc3MgKC1kICRnaXRfZGlyKSB7CisJc3lzdGVtKHF3KGdpdCBpbml0KSk7CisJZGllICJDYW5ub3QgaW5pdCB0aGUgR0lUIGRiIGF0ICRnaXRfdHJlZTogJD9cbiIgaWYgJD87CisJc3lzdGVtKHF3KGdpdCByZWFkLXRyZWUgLS1lbXB0eSkpOworCWRpZSAiQ2Fubm90IGluaXQgYW4gZW1wdHkgdHJlZTogJD9cbiIgaWYgJD87CisKKwkkbGFzdF9icmFuY2ggPSAkb3B0X287CisJJG9yaWdfYnJhbmNoID0gIiI7Cit9IGVsc2UgeworCW9wZW4oRiwgIi18IiwgcXcoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSkgb3IKKwkJZGllICJDYW5ub3QgcnVuIGdpdCBzeW1ib2xpYy1yZWY6ICQhXG4iOworCWNob21wICgkbGFzdF9icmFuY2ggPSA8Rj4pOworCSRsYXN0X2JyYW5jaCA9IGJhc2VuYW1lKCRsYXN0X2JyYW5jaCk7CisJY2xvc2UoRik7CisJdW5sZXNzICgkbGFzdF9icmFuY2gpIHsKKwkJd2FybiAiQ2Fubm90IHJlYWQgdGhlIGxhc3QgYnJhbmNoIG5hbWU6ICQhIC0tIGFzc3VtaW5nICdtYXN0ZXInXG4iOworCQkkbGFzdF9icmFuY2ggPSAibWFzdGVyIjsKKwl9CisJJG9yaWdfYnJhbmNoID0gJGxhc3RfYnJhbmNoOworCSR0aXBfYXRfc3RhcnQgPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYDsKKworCSMgR2V0IHRoZSBsYXN0IGltcG9ydCB0aW1lc3RhbXBzCisJbXkgJGZtdCA9ICcoJHJlZiwgJGF1dGhvcikgPSAoJShyZWZuYW1lKSwgJShhdXRob3IpKTsnOworCW15IEBjbWQgPSAoJ2dpdCcsICdmb3ItZWFjaC1yZWYnLCAnLS1wZXJsJywgIi0tZm9ybWF0PSRmbXQiLCAkcmVtb3RlKTsKKwlvcGVuKEgsICItfCIsIEBjbWQpIG9yIGRpZSAiQ2Fubm90IHJ1biBnaXQgZm9yLWVhY2gtcmVmOiAkIVxuIjsKKwl3aGlsZSAoZGVmaW5lZChteSAkZW50cnkgPSA8SD4pKSB7CisJCW15ICgkcmVmLCAkYXV0aG9yKTsKKwkJZXZhbCgkZW50cnkpIHx8IGRpZSAiY2Fubm90IGV2YWwgcmVmcyBsaXN0OiAkQCI7CisJCW15ICgkaGVhZCkgPSAoJHJlZiA9fiBtfF4kcmVtb3RlLyguKil8KTsKKwkJJGF1dGhvciA9fiAvXi4qXHMoXGQrKVxzWy0rXVxkezR9JC87CisJCSRicmFuY2hfZGF0ZXskaGVhZH0gPSAkMTsKKwl9CisJY2xvc2UoSCk7CisgICAgICAgIGlmICghZXhpc3RzICRicmFuY2hfZGF0ZXskb3B0X299KSB7CisJCWRpZSAiQnJhbmNoICckb3B0X28nIGRvZXMgbm90IGV4aXN0LlxuIi4KKwkJICAgICAgICJFaXRoZXIgdXNlIHRoZSBjb3JyZWN0ICctbyBicmFuY2gnIG9wdGlvbixcbiIuCisJCSAgICAgICAib3IgaW1wb3J0IHRvIGEgbmV3IHJlcG9zaXRvcnkuXG4iOworICAgICAgICB9Cit9CisKKy1kICRnaXRfZGlyCisJb3IgZGllICJDb3VsZCBub3QgY3JlYXRlIGdpdCBzdWJkaXIgKCRnaXRfZGlyKS5cbiI7CisKKyMgbm93IHdlIHJlYWQgKGFuZCBwb3NzaWJseSBzYXZlKSBhdXRob3ItaW5mbyBhcyB3ZWxsCistZiAiJGdpdF9kaXIvY3ZzLWF1dGhvcnMiIGFuZAorICByZWFkX2F1dGhvcl9pbmZvKCIkZ2l0X2Rpci9jdnMtYXV0aG9ycyIpOworaWYgKCRvcHRfQSkgeworCXJlYWRfYXV0aG9yX2luZm8obXVuZ2VfdXNlcl9maWxlbmFtZSgkb3B0X0EpKTsKKwl3cml0ZV9hdXRob3JfaW5mbygiJGdpdF9kaXIvY3ZzLWF1dGhvcnMiKTsKK30KKworIyBvcGVuIC5naXQvY3ZzLXJldmlzaW9ucywgaWYgcmVxdWVzdGVkCitvcGVuIG15ICRyZXZpc2lvbl9tYXAsICc+PicsICIkZ2l0X2Rpci9jdnMtcmV2aXNpb25zIgorICAgIG9yIGRpZSAiQ2FuJ3Qgb3BlbiAkZ2l0X2Rpci9jdnMtcmV2aXNpb25zIGZvciBhcHBlbmRpbmc6ICQhXG4iCisJaWYgZGVmaW5lZCAkb3B0X1I7CisKKworIworIyBydW4gY3ZzcHMgaW50byBhIGZpbGUgdW5sZXNzIHdlIGFyZSBnZXR0aW5nCisjIGl0IHBhc3NlZCBhcyBhIGZpbGUgdmlhICRvcHRfUAorIworbXkgJGN2c3BzZmlsZTsKK3VubGVzcyAoJG9wdF9QKSB7CisJcHJpbnQgIlJ1bm5pbmcgY3ZzcHMuLi5cbiIgaWYgJG9wdF92OworCW15ICRwaWQgPSBvcGVuKENWU1BTLCItfCIpOworCW15ICRjdnNwc2ZoOworCWRpZSAiQ2Fubm90IGZvcms6ICQhXG4iIHVubGVzcyBkZWZpbmVkICRwaWQ7CisJdW5sZXNzICgkcGlkKSB7CisJCW15IEBvcHQ7CisJCUBvcHQgPSBzcGxpdCgvLC8sJG9wdF9wKSBpZiBkZWZpbmVkICRvcHRfcDsKKwkJdW5zaGlmdCBAb3B0LCAnLXonLCAkb3B0X3ogaWYgZGVmaW5lZCAkb3B0X3o7CisJCXVuc2hpZnQgQG9wdCwgJy1xJyAgICAgICAgIHVubGVzcyBkZWZpbmVkICRvcHRfdjsKKwkJdW5sZXNzIChkZWZpbmVkKCRvcHRfcCkgJiYgJG9wdF9wID1+IG0vLS1uby1jdnMtZGlyZWN0LykgeworCQkJcHVzaCBAb3B0LCAnLS1jdnMtZGlyZWN0JzsKKwkJfQorCQlleGVjKCJjdnNwcyIsIi0tbm9yYyIsQG9wdCwiLXUiLCItQSIsJy0tcm9vdCcsJG9wdF9kLCRjdnNfdHJlZSk7CisJCWRpZSAiQ291bGQgbm90IHN0YXJ0IGN2c3BzOiAkIVxuIjsKKwl9CisJKCRjdnNwc2ZoLCAkY3ZzcHNmaWxlKSA9IHRlbXBmaWxlKCdnaXRYWFhYWFgnLCBTVUZGSVggPT4gJy5jdnNwcycsCisJCQkJCSAgRElSID0+IEZpbGU6OlNwZWMtPnRtcGRpcigpKTsKKwl3aGlsZSAoPENWU1BTPikgeworCSAgICBwcmludCAkY3ZzcHNmaCAkXzsKKwl9CisJY2xvc2UgQ1ZTUFM7CisJJD8gPT0gMCBvciBkaWUgImdpdCBjdnNpbXBvcnQ6IGZhdGFsOiBjdnNwcyByZXBvcnRlZCBlcnJvclxuIjsKKwljbG9zZSAkY3ZzcHNmaDsKK30gZWxzZSB7CisJJGN2c3BzZmlsZSA9IG11bmdlX3VzZXJfZmlsZW5hbWUoJG9wdF9QKTsKK30KKworb3BlbihDVlMsICI8JGN2c3BzZmlsZSIpIG9yIGRpZSAkITsKKworIyMgY3ZzcHMgb3V0cHV0OgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI1BhdGNoU2V0IDMxNAorI0RhdGU6IDE5OTkvMDkvMTggMTM6MDM6NTkKKyNBdXRob3I6IHdrb2NoCisjQnJhbmNoOiBTVEFCTEUtQlJBTkNILTEtMAorI0FuY2VzdG9yIGJyYW5jaDogSEVBRAorI1RhZzogKG5vbmUpCisjTG9nOgorIyAgICBTZWUgQ2hhbmdlTG9nOiBTYXQgU2VwIDE4IDEzOjAzOjI4IENFU1QgMTk5OSAgV2VybmVyIEtvY2gKKyNNZW1iZXJzOgorIwlSRUFETUU6MS41Ny0+MS41Ny4yLjEKKyMJVkVSU0lPTjoxLjk2LT4xLjk2LjIuMQorIworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitteSAkc3RhdGUgPSAwOworCitzdWIgdXBkYXRlX2luZGV4IChcQFxAKSB7CisJbXkgJG9sZCA9IHNoaWZ0OworCW15ICRuZXcgPSBzaGlmdDsKKwlvcGVuKG15ICRmaCwgJ3wtJywgcXcoZ2l0IHVwZGF0ZS1pbmRleCAteiAtLWluZGV4LWluZm8pKQorCQlvciBkaWUgInVuYWJsZSB0byBvcGVuIGdpdCB1cGRhdGUtaW5kZXg6ICQhIjsKKwlwcmludCAkZmgKKwkJKG1hcCB7ICIwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcdCRfXDAiIH0KKwkJCUAkb2xkKSwKKwkJKG1hcCB7ICcxMDAnIC4gc3ByaW50ZignJW8nLCAkXy0+WzBdKSAuICIgJF8tPlsxXVx0JF8tPlsyXVwwIiB9CisJCQlAJG5ldykKKwkJb3IgZGllICJ1bmFibGUgdG8gd3JpdGUgdG8gZ2l0IHVwZGF0ZS1pbmRleDogJCEiOworCWNsb3NlICRmaAorCQlvciBkaWUgInVuYWJsZSB0byB3cml0ZSB0byBnaXQgdXBkYXRlLWluZGV4OiAkISI7CisJJD8gYW5kIGRpZSAiZ2l0IHVwZGF0ZS1pbmRleCByZXBvcnRlZCBlcnJvcjogJD8iOworfQorCitzdWIgd3JpdGVfdHJlZSAoKSB7CisJb3BlbihteSAkZmgsICctfCcsIHF3KGdpdCB3cml0ZS10cmVlKSkKKwkJb3IgZGllICJ1bmFibGUgdG8gb3BlbiBnaXQgd3JpdGUtdHJlZTogJCEiOworCWNob21wKG15ICR0cmVlID0gPCRmaD4pOworCWlzX3NoYTEoJHRyZWUpCisJCW9yIGRpZSAiQ2Fubm90IGdldCB0cmVlIGlkICgkdHJlZSk6ICQhIjsKKwljbG9zZSgkZmgpCisJCW9yIGRpZSAiRXJyb3IgcnVubmluZyBnaXQgd3JpdGUtdHJlZTogJD9cbiI7CisJcHJpbnQgIlRyZWUgSUQgJHRyZWVcbiIgaWYgJG9wdF92OworCXJldHVybiAkdHJlZTsKK30KKworbXkgKCRwYXRjaHNldCwkZGF0ZSwkYXV0aG9yX25hbWUsJGF1dGhvcl9lbWFpbCwkYXV0aG9yX3R6LCRicmFuY2gsJGFuY2VzdG9yLCR0YWcsJGxvZ21zZyk7CitteSAoQG9sZCxAbmV3LEBza2lwcGVkLCVpZ25vcmVicmFuY2gsQGNvbW1pdF9yZXZpc2lvbnMpOworCisjIGNvbW1pdHMgdGhhdCBjdnNwcyBjYW5ub3QgcGxhY2UgYW55d2hlcmUuLi4KKyRpZ25vcmVicmFuY2h7JyNDVlNQU19OT19CUkFOQ0gnfSA9IDE7CisKK3N1YiBjb21taXQgeworCWlmICgkYnJhbmNoIGVxICRvcHRfbyAmJiAhJGluZGV4e2JyYW5jaH0gJiYKKwkJIWdldF9oZWFkcmVmKCIkcmVtb3RlLyRicmFuY2giKSkgeworCSAgICAjIGxvb2tzIGxpa2UgYW4gaW5pdGlhbCBjb21taXQKKwkgICAgIyB1c2UgdGhlIGluZGV4IHByaW1lZCBieSBnaXQgaW5pdAorCSAgICAkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICIkZ2l0X2Rpci9pbmRleCI7CisJICAgICRpbmRleHskYnJhbmNofSA9ICIkZ2l0X2Rpci9pbmRleCI7CisJfSBlbHNlIHsKKwkgICAgIyB1c2UgYW4gaW5kZXggcGVyIGJyYW5jaCB0byBzcGVlZCB1cAorCSAgICAjIGltcG9ydHMgb2YgcHJvamVjdHMgd2l0aCBtYW55IGJyYW5jaGVzCisJICAgIHVubGVzcyAoJGluZGV4eyRicmFuY2h9KSB7CisJCSRpbmRleHskYnJhbmNofSA9IHRtcG5hbSgpOworCQkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRpbmRleHskYnJhbmNofTsKKwkJaWYgKCRhbmNlc3RvcikgeworCQkgICAgc3lzdGVtKCJnaXQiLCAicmVhZC10cmVlIiwgIiRyZW1vdGUvJGFuY2VzdG9yIik7CisJCX0gZWxzZSB7CisJCSAgICBzeXN0ZW0oImdpdCIsICJyZWFkLXRyZWUiLCAiJHJlbW90ZS8kYnJhbmNoIik7CisJCX0KKwkJZGllICJyZWFkLXRyZWUgZmFpbGVkOiAkP1xuIiBpZiAkPzsKKwkgICAgfQorCX0KKyAgICAgICAgJEVOVntHSVRfSU5ERVhfRklMRX0gPSAkaW5kZXh7JGJyYW5jaH07CisKKwl1cGRhdGVfaW5kZXgoQG9sZCwgQG5ldyk7CisJQG9sZCA9IEBuZXcgPSAoKTsKKwlteSAkdHJlZSA9IHdyaXRlX3RyZWUoKTsKKwlteSAkcGFyZW50ID0gZ2V0X2hlYWRyZWYoIiRyZW1vdGUvJGxhc3RfYnJhbmNoIik7CisJcHJpbnQgIlBhcmVudCBJRCAiIC4gKCRwYXJlbnQgPyAkcGFyZW50IDogIihlbXB0eSkiKSAuICJcbiIgaWYgJG9wdF92OworCisJbXkgQGNvbW1pdF9hcmdzOworCXB1c2ggQGNvbW1pdF9hcmdzLCAoIi1wIiwgJHBhcmVudCkgaWYgJHBhcmVudDsKKworCSMgbG9vc2UgZGV0ZWN0aW9uIG9mIG1lcmdlcworCSMgYmFzZWQgb24gdGhlIGNvbW1pdCBtc2cKKwlmb3JlYWNoIG15ICRyeCAoQG1lcmdlcngpIHsKKwkJbmV4dCB1bmxlc3MgJGxvZ21zZyA9fiAkcnggJiYgJDE7CisJCW15ICRtcGFyZW50ID0gJDEgZXEgJ0hFQUQnID8gJG9wdF9vIDogJDE7CisJCWlmIChteSAkc2hhMSA9IGdldF9oZWFkcmVmKCIkcmVtb3RlLyRtcGFyZW50IikpIHsKKwkJCXB1c2ggQGNvbW1pdF9hcmdzLCAnLXAnLCAiJHJlbW90ZS8kbXBhcmVudCI7CisJCQlwcmludCAiTWVyZ2UgcGFyZW50IGJyYW5jaDogJG1wYXJlbnRcbiIgaWYgJG9wdF92OworCQl9CisJfQorCisJc2V0X3RpbWV6b25lKCRhdXRob3JfdHopOworCSMgJGRhdGUgaXMgaW4gdGhlIHNlY29uZHMgc2luY2UgZXBvY2ggZm9ybWF0CisJbXkgJHR6X29mZnNldCA9IGdldF90el9vZmZzZXQoJGRhdGUpOworCW15ICRjb21taXRfZGF0ZSA9ICIkZGF0ZSAkdHpfb2Zmc2V0IjsKKwlzZXRfdGltZXpvbmUoJ1VUQycpOworCSRFTlZ7R0lUX0FVVEhPUl9OQU1FfSA9ICRhdXRob3JfbmFtZTsKKwkkRU5We0dJVF9BVVRIT1JfRU1BSUx9ID0gJGF1dGhvcl9lbWFpbDsKKwkkRU5We0dJVF9BVVRIT1JfREFURX0gPSAkY29tbWl0X2RhdGU7CisJJEVOVntHSVRfQ09NTUlUVEVSX05BTUV9ID0gJGF1dGhvcl9uYW1lOworCSRFTlZ7R0lUX0NPTU1JVFRFUl9FTUFJTH0gPSAkYXV0aG9yX2VtYWlsOworCSRFTlZ7R0lUX0NPTU1JVFRFUl9EQVRFfSA9ICRjb21taXRfZGF0ZTsKKwlteSAkcGlkID0gb3BlbjIobXkgJGNvbW1pdF9yZWFkLCBteSAkY29tbWl0X3dyaXRlLAorCQknZ2l0JywgJ2NvbW1pdC10cmVlJywgJHRyZWUsIEBjb21taXRfYXJncyk7CisKKwkjIGNvbXBhdGliaWxpdHkgd2l0aCBnaXQyY3ZzCisJc3Vic3RyKCRsb2dtc2csMzI3NjcpID0gIiIgaWYgbGVuZ3RoKCRsb2dtc2cpID4gMzI3Njc7CisJJGxvZ21zZyA9fiBzL1tcc1xuXStcei8vOworCisJaWYgKEBza2lwcGVkKSB7CisJICAgICRsb2dtc2cgLj0gIlxuXG5cblNLSVBQRUQ6XG5cdCI7CisJICAgICRsb2dtc2cgLj0gam9pbigiXG5cdCIsIEBza2lwcGVkKSAuICJcbiI7CisJICAgIEBza2lwcGVkID0gKCk7CisJfQorCisJcHJpbnQoJGNvbW1pdF93cml0ZSAiJGxvZ21zZ1xuIikgJiYgY2xvc2UoJGNvbW1pdF93cml0ZSkKKwkJb3IgZGllICJFcnJvciB3cml0aW5nIHRvIGdpdCBjb21taXQtdHJlZTogJCFcbiI7CisKKwlwcmludCAiQ29tbWl0dGVkIHBhdGNoICRwYXRjaHNldCAoJGJyYW5jaCAkY29tbWl0X2RhdGUpXG4iIGlmICRvcHRfdjsKKwljaG9tcChteSAkY2lkID0gPCRjb21taXRfcmVhZD4pOworCWlzX3NoYTEoJGNpZCkgb3IgZGllICJDYW5ub3QgZ2V0IGNvbW1pdCBpZCAoJGNpZCk6ICQhXG4iOworCXByaW50ICJDb21taXQgSUQgJGNpZFxuIiBpZiAkb3B0X3Y7CisJY2xvc2UoJGNvbW1pdF9yZWFkKTsKKworCXdhaXRwaWQoJHBpZCwwKTsKKwlkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0IGNvbW1pdC10cmVlOiAkP1xuIiBpZiAkPzsKKworCXN5c3RlbSgnZ2l0JyAsICd1cGRhdGUtcmVmJywgIiRyZW1vdGUvJGJyYW5jaCIsICRjaWQpID09IDAKKwkJb3IgZGllICJDYW5ub3Qgd3JpdGUgYnJhbmNoICRicmFuY2ggZm9yIHVwZGF0ZTogJCFcbiI7CisKKwlpZiAoJHJldmlzaW9uX21hcCkgeworCQlwcmludCAkcmV2aXNpb25fbWFwICJAJF8gJGNpZFxuIiBmb3IgQGNvbW1pdF9yZXZpc2lvbnM7CisJfQorCUBjb21taXRfcmV2aXNpb25zID0gKCk7CisKKwlpZiAoJHRhZykgeworCSAgICAgICAgbXkgKCR4dGFnKSA9ICR0YWc7CisJCSR4dGFnID1+IHMvXHMrXCpcKi4qJC8vOyAjIFJlbW92ZSBzdHVmZiBsaWtlICoqIElOVkFMSUQgKiogYW5kICoqIEZVTktZICoqCisJCSR4dGFnID1+IHRyL18vXC4vIGlmICggJG9wdF91ICk7CisJCSR4dGFnID1+IHMvW1wvXS8kb3B0X3MvZzsKKworCQkjIFNlZSByZWZzLmMgZm9yIHRoZXNlIHJ1bGVzLgorCQkjIFRhZyBjYW5ub3QgY29udGFpbiBiYWQgY2hhcnMuIChTZWUgYmFkX3JlZl9jaGFyIGluIHJlZnMuYy4pCisJCSR4dGFnID1+IHMvWyB+XF46XFxcKlw/XFtdLy9nOworCQkjIE90aGVyIGJhZCBzdHJpbmdzIGZvciB0YWdzOgorCQkjIChTZWUgY2hlY2tfcmVmbmFtZV9jb21wb25lbnQgaW4gcmVmcy5jLikKKwkJMSB3aGlsZSAkeHRhZyA9fiBzLworCQkJKD86IFwuXC4gICAgICAgICMgVGFnIGNhbm5vdCBjb250YWluICcuLicuCisJCQl8ICAgXEBceyAgICAgICAgIyBUYWcgY2Fubm90IGNvbnRhaW4gJ0B7Jy4KKwkJCXwgXiAtICAgICAgICAgICAjIFRhZyBjYW5ub3QgYmVnaW4gd2l0aCAnLScuCisJCQl8ICAgXC5sb2NrICQgICAgIyBUYWcgY2Fubm90IGVuZCB3aXRoICcubG9jaycuCisJCQl8IF4gXC4gICAgICAgICAgIyBUYWcgY2Fubm90IGJlZ2luLi4uCisJCQl8ICAgXC4gJCAgICAgICAgIyAuLi5vciBlbmQgd2l0aCAnLicKKwkJCSkvL3hnOworCQkjIFRhZyBjYW5ub3QgYmUgZW1wdHkuCisJCWlmICgkeHRhZyBlcSAnJykgeworCQkJd2Fybigid2FybmluZzogaWdub3JpbmcgdGFnICckdGFnJyIsCisJCQkiIHdpdGggaW52YWxpZCB0YWduYW1lXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmIChzeXN0ZW0oJ2dpdCcgLCAndGFnJywgJy1mJywgJHh0YWcsICRjaWQpICE9IDApIHsKKwkJCSMgV2UgZGlkIG91ciBiZXN0IHRvIHNhbml0aXplIHRoZSB0YWcsIGJ1dCBzdGlsbCBmYWlsZWQKKwkJCSMgZm9yIHdoYXRldmVyIHJlYXNvbi4gQmFpbCBvdXQsIGFuZCBnaXZlIHRoZSB1c2VyCisJCQkjIGVub3VnaCBpbmZvcm1hdGlvbiB0byB1bmRlcnN0YW5kIGlmL2hvdyB3ZSBzaG91bGQKKwkJCSMgaW1wcm92ZSB0aGUgdHJhbnNsYXRpb24gaW4gdGhlIGZ1dHVyZS4KKwkJCWlmICgkdGFnIG5lICR4dGFnKSB7CisJCQkJcHJpbnQgIlRyYW5zbGF0ZWQgJyR0YWcnIHRhZyB0byAnJHh0YWcnXG4iOworCQkJfQorCQkJZGllICJDYW5ub3QgY3JlYXRlIHRhZyAkeHRhZzogJCFcbiI7CisJCX0KKworCQlwcmludCAiQ3JlYXRlZCB0YWcgJyR4dGFnJyBvbiAnJGJyYW5jaCdcbiIgaWYgJG9wdF92OworCX0KK307CisKK215ICRjb21taXRjb3VudCA9IDE7Cit3aGlsZSAoPENWUz4pIHsKKwljaG9tcDsKKwlpZiAoJHN0YXRlID09IDAgYW5kIC9eLSskLykgeworCQkkc3RhdGUgPSAxOworCX0gZWxzaWYgKCRzdGF0ZSA9PSAwKSB7CisJCSRzdGF0ZSA9IDE7CisJCXJlZG87CisJfSBlbHNpZiAoKCRzdGF0ZT09MCBvciAkc3RhdGU9PTEpIGFuZCBzL15QYXRjaFNldFxzKy8vKSB7CisJCSRwYXRjaHNldCA9IDArJF87CisJCSRzdGF0ZT0yOworCX0gZWxzaWYgKCRzdGF0ZSA9PSAyIGFuZCBzL15EYXRlOlxzKy8vKSB7CisJCSRkYXRlID0gcGRhdGUoJF8pOworCQl1bmxlc3MgKCRkYXRlKSB7CisJCQlwcmludCBTVERFUlIgIkNvdWxkIG5vdCBwYXJzZSBkYXRlOiAkX1xuIjsKKwkJCSRzdGF0ZT0wOworCQkJbmV4dDsKKwkJfQorCQkkc3RhdGU9MzsKKwl9IGVsc2lmICgkc3RhdGUgPT0gMyBhbmQgcy9eQXV0aG9yOlxzKy8vKSB7CisJCSRhdXRob3JfdHogPSAiVVRDIjsKKwkJcy9ccyskLy87CisJCWlmICgvXiguKj8pXHMrPCguKik+LykgeworCQkgICAgKCRhdXRob3JfbmFtZSwgJGF1dGhvcl9lbWFpbCkgPSAoJDEsICQyKTsKKwkJfSBlbHNpZiAoJGNvbnZfYXV0aG9yX25hbWV7JF99KSB7CisJCQkkYXV0aG9yX25hbWUgPSAkY29udl9hdXRob3JfbmFtZXskX307CisJCQkkYXV0aG9yX2VtYWlsID0gJGNvbnZfYXV0aG9yX2VtYWlseyRffTsKKwkJCSRhdXRob3JfdHogPSAkY29udl9hdXRob3JfdHp7JF99IGlmICgkY29udl9hdXRob3JfdHp7JF99KTsKKwkJfSBlbHNlIHsKKwkJICAgICRhdXRob3JfbmFtZSA9ICRhdXRob3JfZW1haWwgPSAkXzsKKwkJfQorCQkkc3RhdGUgPSA0OworCX0gZWxzaWYgKCRzdGF0ZSA9PSA0IGFuZCBzL15CcmFuY2g6XHMrLy8pIHsKKwkJcy9ccyskLy87CisJCXRyL18vXC4vIGlmICggJG9wdF91ICk7CisJCXMvW1wvXS8kb3B0X3MvZzsKKwkJJGJyYW5jaCA9ICRfOworCQkkc3RhdGUgPSA1OworCX0gZWxzaWYgKCRzdGF0ZSA9PSA1IGFuZCBzL15BbmNlc3RvciBicmFuY2g6XHMrLy8pIHsKKwkJcy9ccyskLy87CisJCSRhbmNlc3RvciA9ICRfOworCQkkYW5jZXN0b3IgPSAkb3B0X28gaWYgJGFuY2VzdG9yIGVxICJIRUFEIjsKKwkJJHN0YXRlID0gNjsKKwl9IGVsc2lmICgkc3RhdGUgPT0gNSkgeworCQkkYW5jZXN0b3IgPSB1bmRlZjsKKwkJJHN0YXRlID0gNjsKKwkJcmVkbzsKKwl9IGVsc2lmICgkc3RhdGUgPT0gNiBhbmQgcy9eVGFnOlxzKy8vKSB7CisJCXMvXHMrJC8vOworCQlpZiAoJF8gZXEgIihub25lKSIpIHsKKwkJCSR0YWcgPSB1bmRlZjsKKwkJfSBlbHNlIHsKKwkJCSR0YWcgPSAkXzsKKwkJfQorCQkkc3RhdGUgPSA3OworCX0gZWxzaWYgKCRzdGF0ZSA9PSA3IGFuZCAvXkxvZzovKSB7CisJCSRsb2dtc2cgPSAiIjsKKwkJJHN0YXRlID0gODsKKwl9IGVsc2lmICgkc3RhdGUgPT0gOCBhbmQgL15NZW1iZXJzOi8pIHsKKwkJJGJyYW5jaCA9ICRvcHRfbyBpZiAkYnJhbmNoIGVxICJIRUFEIjsKKwkJaWYgKGRlZmluZWQgJGJyYW5jaF9kYXRleyRicmFuY2h9IGFuZCAkYnJhbmNoX2RhdGV7JGJyYW5jaH0gPj0gJGRhdGUpIHsKKwkJCSMgc2tpcAorCQkJcHJpbnQgInNraXAgcGF0Y2hzZXQgJHBhdGNoc2V0OiAkZGF0ZSBiZWZvcmUgJGJyYW5jaF9kYXRleyRicmFuY2h9XG4iIGlmICRvcHRfdjsKKwkJCSRzdGF0ZSA9IDExOworCQkJbmV4dDsKKwkJfQorCQlpZiAoISRvcHRfYSAmJiAkc3RhcnR0aW1lIC0gMzAwIC0gKGRlZmluZWQgJG9wdF96ID8gJG9wdF96IDogMzAwKSA8PSAkZGF0ZSkgeworCQkJIyBza2lwIGlmIHRoZSBjb21taXQgaXMgdG9vIHJlY2VudAorCQkJIyBnaXZlbiB0aGF0IHRoZSBjdnNwcyBkZWZhdWx0IGZ1enogaXMgMzAwcywgd2UgZ2l2ZSBvdXJzZWx2ZXMgYW5vdGhlcgorCQkJIyAzMDBzIGp1c3QgaW4gY2FzZSAtLSB0aGlzIGFsc28gcHJldmVudHMgc2tpcHBpbmcgY29tbWl0cworCQkJIyBkdWUgdG8gc2VydmVyIGNsb2NrIGRyaWZ0CisJCQlwcmludCAic2tpcCBwYXRjaHNldCAkcGF0Y2hzZXQ6ICRkYXRlIHRvbyByZWNlbnRcbiIgaWYgJG9wdF92OworCQkJJHN0YXRlID0gMTE7CisJCQluZXh0OworCQl9CisJCWlmIChleGlzdHMgJGlnbm9yZWJyYW5jaHskYnJhbmNofSkgeworCQkJcHJpbnQgU1RERVJSICJTa2lwcGluZyAkYnJhbmNoXG4iOworCQkJJHN0YXRlID0gMTE7CisJCQluZXh0OworCQl9CisJCWlmICgkYW5jZXN0b3IpIHsKKwkJCWlmICgkYW5jZXN0b3IgZXEgJGJyYW5jaCkgeworCQkJCXByaW50IFNUREVSUiAiQnJhbmNoICRicmFuY2ggZXJyb25lb3VzbHkgc3RlbXMgZnJvbSBpdHNlbGYgLS0gY2hhbmdlZCBhbmNlc3RvciB0byAkb3B0X29cbiI7CisJCQkJJGFuY2VzdG9yID0gJG9wdF9vOworCQkJfQorCQkJaWYgKGRlZmluZWQgZ2V0X2hlYWRyZWYoIiRyZW1vdGUvJGJyYW5jaCIpKSB7CisJCQkJcHJpbnQgU1RERVJSICJCcmFuY2ggJGJyYW5jaCBhbHJlYWR5IGV4aXN0cyFcbiI7CisJCQkJJHN0YXRlPTExOworCQkJCW5leHQ7CisJCQl9CisJCQlteSAkaWQgPSBnZXRfaGVhZHJlZigiJHJlbW90ZS8kYW5jZXN0b3IiKTsKKwkJCWlmICghJGlkKSB7CisJCQkJcHJpbnQgU1RERVJSICJCcmFuY2ggJGFuY2VzdG9yIGRvZXMgbm90IGV4aXN0IVxuIjsKKwkJCQkkaWdub3JlYnJhbmNoeyRicmFuY2h9ID0gMTsKKwkJCQkkc3RhdGU9MTE7CisJCQkJbmV4dDsKKwkJCX0KKworCQkJc3lzdGVtKHF3KGdpdCB1cGRhdGUtcmVmIC1tIGN2c2ltcG9ydCksCisJCQkJIiRyZW1vdGUvJGJyYW5jaCIsICRpZCk7CisJCQlpZigkPyAhPSAwKSB7CisJCQkJcHJpbnQgU1RERVJSICJDb3VsZCBub3QgY3JlYXRlIGJyYW5jaCAkYnJhbmNoXG4iOworCQkJCSRpZ25vcmVicmFuY2h7JGJyYW5jaH0gPSAxOworCQkJCSRzdGF0ZT0xMTsKKwkJCQluZXh0OworCQkJfQorCQl9CisJCSRsYXN0X2JyYW5jaCA9ICRicmFuY2ggaWYgJGJyYW5jaCBuZSAkbGFzdF9icmFuY2g7CisJCSRzdGF0ZSA9IDk7CisJfSBlbHNpZiAoJHN0YXRlID09IDgpIHsKKwkJJGxvZ21zZyAuPSAiJF9cbiI7CisJfSBlbHNpZiAoJHN0YXRlID09IDkgYW5kIC9eXHMrKC4rPyk6KElOSVRJQUx8XGQrKD86XC5cZCspKyktPihcZCsoPzpcLlxkKykrKVxzKiQvKSB7CisjCVZFUlNJT046MS45Ni0+MS45Ni4yLjEKKwkJbXkgJGluaXQgPSAoJDIgZXEgIklOSVRJQUwiKTsKKwkJbXkgJGZuID0gJDE7CisJCW15ICRyZXYgPSAkMzsKKwkJJGZuID1+IHMjXi8rIyM7CisJCWlmICgkb3B0X1MgJiYgJGZuID1+IG0vJG9wdF9TLykgeworCQkgICAgcHJpbnQgIlNLSVBQSU5HICRmbiB2ICRyZXZcbiI7CisJCSAgICBwdXNoKEBza2lwcGVkLCAkZm4pOworCQkgICAgbmV4dDsKKwkJfQorCQlwdXNoIEBjb21taXRfcmV2aXNpb25zLCBbJGZuLCAkcmV2XTsKKwkJcHJpbnQgIkZldGNoaW5nICRmbiAgIHYgJHJldlxuIiBpZiAkb3B0X3Y7CisJCW15ICgkdG1wbmFtZSwgJHNpemUpID0gJGN2cy0+ZmlsZSgkZm4sJHJldik7CisJCWlmICgkc2l6ZSA9PSAtMSkgeworCQkJcHVzaChAb2xkLCRmbik7CisJCQlwcmludCAiRHJvcCAkZm5cbiIgaWYgJG9wdF92OworCQl9IGVsc2UgeworCQkJcHJpbnQgIiIuKCRpbml0ID8gIk5ldyIgOiAiVXBkYXRlIikuIiAkZm46ICRzaXplIGJ5dGVzXG4iIGlmICRvcHRfdjsKKwkJCW15ICRwaWQgPSBvcGVuKG15ICRGLCAnLXwnKTsKKwkJCWRpZSAkISB1bmxlc3MgZGVmaW5lZCAkcGlkOworCQkJaWYgKCEkcGlkKSB7CisJCQkgICAgZXhlYygiZ2l0IiwgImhhc2gtb2JqZWN0IiwgIi13IiwgJHRtcG5hbWUpCisJCQkJb3IgZGllICJDYW5ub3QgY3JlYXRlIG9iamVjdDogJCFcbiI7CisJCQl9CisJCQlteSAkc2hhID0gPCRGPjsKKwkJCWNob21wICRzaGE7CisJCQljbG9zZSAkRjsKKwkJCW15ICRtb2RlID0gcG1vZGUoJGN2cy0+eydtb2RlJ30pOworCQkJcHVzaChAbmV3LFskbW9kZSwgJHNoYSwgJGZuXSk7ICMgbWF5IGJlIHJlc3VycmVjdGVkIQorCQl9CisJCXVubGluaygkdG1wbmFtZSk7CisJfSBlbHNpZiAoJHN0YXRlID09IDkgYW5kIC9eXHMrKC4rPyk6XGQrKD86XC5cZCspKy0+KFxkKyg/OlwuXGQrKSspXChERUFEXClccyokLykgeworCQlteSAkZm4gPSAkMTsKKwkJbXkgJHJldiA9ICQyOworCQkkZm4gPX4gcyNeLysjIzsKKwkJcHVzaCBAY29tbWl0X3JldmlzaW9ucywgWyRmbiwgJHJldl07CisJCXB1c2goQG9sZCwkZm4pOworCQlwcmludCAiRGVsZXRlICRmblxuIiBpZiAkb3B0X3Y7CisJfSBlbHNpZiAoJHN0YXRlID09IDkgYW5kIC9eXHMqJC8pIHsKKwkJJHN0YXRlID0gMTA7CisJfSBlbHNpZiAoKCRzdGF0ZSA9PSA5IG9yICRzdGF0ZSA9PSAxMCkgYW5kIC9eLSskLykgeworCQkkY29tbWl0Y291bnQrKzsKKwkJaWYgKCRvcHRfTCAmJiAkY29tbWl0Y291bnQgPiAkb3B0X0wpIHsKKwkJCWxhc3Q7CisJCX0KKwkJY29tbWl0KCk7CisJCWlmICgoJGNvbW1pdGNvdW50ICYgMTAyMykgPT0gMCkgeworCQkJc3lzdGVtKHF3KGdpdCByZXBhY2sgLWEgLWQpKTsKKwkJfQorCQkkc3RhdGUgPSAxOworCX0gZWxzaWYgKCRzdGF0ZSA9PSAxMSBhbmQgL14tKyQvKSB7CisJCSRzdGF0ZSA9IDE7CisJfSBlbHNpZiAoL14tKyQvKSB7ICMgZW5kIG9mIHVua25vd24tbGluZSBwcm9jZXNzaW5nCisJCSRzdGF0ZSA9IDE7CisJfSBlbHNpZiAoJHN0YXRlICE9IDExKSB7ICMgaWdub3JlIHN0dWZmIHdoZW4gc2tpcHBpbmcKKwkJcHJpbnQgU1RERVJSICIqIFVOS05PV04gTElORSAqICRfXG4iOworCX0KK30KK2NvbW1pdCgpIGlmICRicmFuY2ggYW5kICRzdGF0ZSAhPSAxMTsKKwordW5sZXNzICgkb3B0X1ApIHsKKwl1bmxpbmsoJGN2c3BzZmlsZSk7Cit9CisKKyMgVGhlIGhldXJpc3RpYyBvZiByZXBhY2tpbmcgZXZlcnkgMTAyNCBjb21taXRzIGNhbiBsZWF2ZSBhCisjIGxvdCBvZiB1bnBhY2tlZCBkYXRhLiAgSWYgdGhlcmUgaXMgbW9yZSB0aGFuIDFNQiB3b3J0aCBvZgorIyBub3QtcGFja2VkIG9iamVjdHMsIHJlcGFjayBvbmNlIG1vcmUuCitteSAkbGluZSA9IGBnaXQgY291bnQtb2JqZWN0c2A7CitpZiAoJGxpbmUgPX4gL14oXGQrKSBvYmplY3RzLCAoXGQrKSBraWxvYnl0ZXMkLykgeworICBteSAoJG5fb2JqZWN0cywgJGtiKSA9ICgkMSwgJDIpOworICAxMDI0IDwgJGtiCisgICAgYW5kIHN5c3RlbShxdyhnaXQgcmVwYWNrIC1hIC1kKSk7Cit9CisKK2ZvcmVhY2ggbXkgJGdpdF9pbmRleCAodmFsdWVzICVpbmRleCkgeworICAgIGlmICgkZ2l0X2luZGV4IG5lICIkZ2l0X2Rpci9pbmRleCIpIHsKKwl1bmxpbmsoJGdpdF9pbmRleCk7CisgICAgfQorfQorCitpZiAoZGVmaW5lZCAkb3JpZ19naXRfaW5kZXgpIHsKKwkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICRvcmlnX2dpdF9pbmRleDsKK30gZWxzZSB7CisJZGVsZXRlICRFTlZ7R0lUX0lOREVYX0ZJTEV9OworfQorCisjIE5vdyBzd2l0Y2ggYmFjayB0byB0aGUgYnJhbmNoIHdlIHdlcmUgaW4gYmVmb3JlIGFsbCBvZiB0aGlzIGhhcHBlbmVkCitpZiAoJG9yaWdfYnJhbmNoKSB7CisJcHJpbnQgIkRPTkUuXG4iIGlmICRvcHRfdjsKKwlpZiAoJG9wdF9pKSB7CisJCWV4aXQgMDsKKwl9CisJbXkgJHRpcF9hdF9lbmQgPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYDsKKwlpZiAoJHRpcF9hdF9zdGFydCBuZSAkdGlwX2F0X2VuZCkgeworCQlmb3IgKCR0aXBfYXRfc3RhcnQsICR0aXBfYXRfZW5kKSB7IGNob21wOyB9CisJCXByaW50ICJGZXRjaGVkIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLlxuIiBpZiAkb3B0X3Y7CisJCXN5c3RlbShxdyhnaXQgcmVhZC10cmVlIC11IC1tKSwKKwkJICAgICAgICR0aXBfYXRfc3RhcnQsICR0aXBfYXRfZW5kKTsKKwkJZGllICJGYXN0LWZvcndhcmQgdXBkYXRlIGZhaWxlZDogJD9cbiIgaWYgJD87CisJfQorCWVsc2UgeworCQlzeXN0ZW0ocXcoZ2l0IG1lcmdlIC1tIGN2c2ltcG9ydCksICIkcmVtb3RlLyRvcHRfbyIpOworCQlkaWUgIkNvdWxkIG5vdCBtZXJnZSAkb3B0X28gaW50byB0aGUgY3VycmVudCBicmFuY2guXG4iIGlmICQ/OworCX0KK30gZWxzZSB7CisJJG9yaWdfYnJhbmNoID0gIm1hc3RlciI7CisJcHJpbnQgIkRPTkU7IGNyZWF0aW5nICRvcmlnX2JyYW5jaCBicmFuY2hcbiIgaWYgJG9wdF92OworCXN5c3RlbSgiZ2l0IiwgInVwZGF0ZS1yZWYiLCAicmVmcy9oZWFkcy9tYXN0ZXIiLCAiJHJlbW90ZS8kb3B0X28iKQorCQl1bmxlc3MgZGVmaW5lZCBnZXRfaGVhZHJlZigncmVmcy9oZWFkcy9tYXN0ZXInKTsKKwlzeXN0ZW0oImdpdCIsICJzeW1ib2xpYy1yZWYiLCAiJHJlbW90ZS9IRUFEIiwgIiRyZW1vdGUvJG9wdF9vIikKKwkJaWYgKCRvcHRfciAmJiAkb3B0X28gbmUgJ0hFQUQnKTsKKwlzeXN0ZW0oJ2dpdCcsICd1cGRhdGUtcmVmJywgJ0hFQUQnLCAiJG9yaWdfYnJhbmNoIik7CisJdW5sZXNzICgkb3B0X2kpIHsKKwkJc3lzdGVtKHF3KGdpdCBjaGVja291dCAtZikpOworCQlkaWUgImNoZWNrb3V0IGZhaWxlZDogJD9cbiIgaWYgJD87CisJfQorfQpkaWZmIC0tZ2l0IGEvZ2l0LWN2c3NlcnZlci5wZXJsIGIvZ2l0LWN2c3NlcnZlci5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1ZTY5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtY3Zzc2VydmVyLnBlcmwKQEAgLTAsMCArMSw1MTA4IEBACisjIS91c3IvYmluL3BlcmwKKworIyMjIworIyMjIyBUaGlzIGFwcGxpY2F0aW9uIGlzIGEgQ1ZTIGVtdWxhdGlvbiBsYXllciBmb3IgZ2l0LgorIyMjIyBJdCBpcyBpbnRlbmRlZCBmb3IgY2xpZW50cyB0byBjb25uZWN0IG92ZXIgU1NILgorIyMjIyBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy4KKyMjIyMKKyMjIyMgQ29weXJpZ2h0IFRoZSBPcGVuIFVuaXZlcnNpdHkgVUsgLSAyMDA2LgorIyMjIworIyMjIyBBdXRob3JzOiBNYXJ0eW4gU21pdGggICAgPG1hcnR5bkBjYXRhbHlzdC5uZXQubno+CisjIyMjICAgICAgICAgIE1hcnRpbiBMYW5naG9mZiA8bWFydGluQGxhcHRvcC5vcmc+CisjIyMjCisjIyMjCisjIyMjIFJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMi4KKyMjIyMKKyMjIyMKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBieXRlczsKKwordXNlIEZjbnRsOwordXNlIEZpbGU6OlRlbXAgcXcvdGVtcGRpciB0ZW1wZmlsZS87Cit1c2UgRmlsZTo6UGF0aCBxdy9ybXRyZWUvOwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIHJlcXVpcmVfb3JkZXIgbm9faWdub3JlX2Nhc2UpOworCitteSAkVkVSU0lPTiA9ICdAQEdJVF9WRVJTSU9OQEAnOworCitteSAkbG9nID0gR0lUQ1ZTOjpsb2ctPm5ldygpOworbXkgJGNmZzsKKworbXkgJERBVEVfTElTVCA9IHsKKyAgICBKYW4gPT4gIjAxIiwKKyAgICBGZWIgPT4gIjAyIiwKKyAgICBNYXIgPT4gIjAzIiwKKyAgICBBcHIgPT4gIjA0IiwKKyAgICBNYXkgPT4gIjA1IiwKKyAgICBKdW4gPT4gIjA2IiwKKyAgICBKdWwgPT4gIjA3IiwKKyAgICBBdWcgPT4gIjA4IiwKKyAgICBTZXAgPT4gIjA5IiwKKyAgICBPY3QgPT4gIjEwIiwKKyAgICBOb3YgPT4gIjExIiwKKyAgICBEZWMgPT4gIjEyIiwKK307CisKKyMgRW5hYmxlIGF1dG9mbHVzaCBmb3IgU1RET1VUIChvdGhlcndpc2UgdGhlIHdob2xlIHRoaW5nIGZhbGxzIGFwYXJ0KQorJHwgPSAxOworCisjIyMjIERlZmluaXRpb24gYW5kIG1hcHBpbmdzIG9mIGZ1bmN0aW9ucyAjIyMjCisKKyMgTk9URTogRGVzcGl0ZSB0aGUgZXhpc3RlbmNlIG9mIHJlcV9DQVRDSEFMTCBhbmQgcmVxX0VNUFRZIHVuaW1wbGVtZW50ZWQKKyMgIHJlcXVlc3RzLCB0aGlzIGxpc3QgaXMgaW5jb21wbGV0ZS4gIEl0IGlzIG1pc3NpbmcgbWFueSByYXJlci9vcHRpb25hbAorIyAgcmVxdWVzdHMuICBQZXJoYXBzIHNvbWUgY2xpZW50cyByZXF1aXJlIGEgY2xhaW0gb2Ygc3VwcG9ydCBmb3IKKyMgIHRoZXNlIHNwZWNpZmljIHJlcXVlc3RzIGZvciBtYWluIGZ1bmN0aW9uYWxpdHkgdG8gd29yaz8KK215ICRtZXRob2RzID0geworICAgICdSb290JyAgICAgICAgICAgID0+IFwmcmVxX1Jvb3QsCisgICAgJ1ZhbGlkLXJlc3BvbnNlcycgPT4gXCZyZXFfVmFsaWRyZXNwb25zZXMsCisgICAgJ3ZhbGlkLXJlcXVlc3RzJyAgPT4gXCZyZXFfdmFsaWRyZXF1ZXN0cywKKyAgICAnRGlyZWN0b3J5JyAgICAgICA9PiBcJnJlcV9EaXJlY3RvcnksCisgICAgJ1N0aWNreScgICAgICAgICAgPT4gXCZyZXFfU3RpY2t5LAorICAgICdFbnRyeScgICAgICAgICAgID0+IFwmcmVxX0VudHJ5LAorICAgICdNb2RpZmllZCcgICAgICAgID0+IFwmcmVxX01vZGlmaWVkLAorICAgICdVbmNoYW5nZWQnICAgICAgID0+IFwmcmVxX1VuY2hhbmdlZCwKKyAgICAnUXVlc3Rpb25hYmxlJyAgICA9PiBcJnJlcV9RdWVzdGlvbmFibGUsCisgICAgJ0FyZ3VtZW50JyAgICAgICAgPT4gXCZyZXFfQXJndW1lbnQsCisgICAgJ0FyZ3VtZW50eCcgICAgICAgPT4gXCZyZXFfQXJndW1lbnQsCisgICAgJ2V4cGFuZC1tb2R1bGVzJyAgPT4gXCZyZXFfZXhwYW5kbW9kdWxlcywKKyAgICAnYWRkJyAgICAgICAgICAgICA9PiBcJnJlcV9hZGQsCisgICAgJ3JlbW92ZScgICAgICAgICAgPT4gXCZyZXFfcmVtb3ZlLAorICAgICdjbycgICAgICAgICAgICAgID0+IFwmcmVxX2NvLAorICAgICd1cGRhdGUnICAgICAgICAgID0+IFwmcmVxX3VwZGF0ZSwKKyAgICAnY2knICAgICAgICAgICAgICA9PiBcJnJlcV9jaSwKKyAgICAnZGlmZicgICAgICAgICAgICA9PiBcJnJlcV9kaWZmLAorICAgICdsb2cnICAgICAgICAgICAgID0+IFwmcmVxX2xvZywKKyAgICAncmxvZycgICAgICAgICAgICA9PiBcJnJlcV9sb2csCisgICAgJ3RhZycgICAgICAgICAgICAgPT4gXCZyZXFfQ0FUQ0hBTEwsCisgICAgJ3N0YXR1cycgICAgICAgICAgPT4gXCZyZXFfc3RhdHVzLAorICAgICdhZG1pbicgICAgICAgICAgID0+IFwmcmVxX0NBVENIQUxMLAorICAgICdoaXN0b3J5JyAgICAgICAgID0+IFwmcmVxX0NBVENIQUxMLAorICAgICd3YXRjaGVycycgICAgICAgID0+IFwmcmVxX0VNUFRZLAorICAgICdlZGl0b3JzJyAgICAgICAgID0+IFwmcmVxX0VNUFRZLAorICAgICdub29wJyAgICAgICAgICAgID0+IFwmcmVxX0VNUFRZLAorICAgICdhbm5vdGF0ZScgICAgICAgID0+IFwmcmVxX2Fubm90YXRlLAorICAgICdHbG9iYWxfb3B0aW9uJyAgID0+IFwmcmVxX0dsb2JhbG9wdGlvbiwKK307CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjICRzdGF0ZSBob2xkcyBhbGwgdGhlIGJpdHMgb2YgaW5mb3JtYXRpb24gdGhlIGNsaWVudHMgc2VuZHMgdXMgdGhhdCBjb3VsZAorIyBwb3RlbnRpYWxseSBiZSB1c2VmdWwgd2hlbiBpdCBjb21lcyB0byBhY3R1YWxseSBfZG9pbmdfIHNvbWV0aGluZy4KK215ICRzdGF0ZSA9IHsgcHJlcGVuZGRpciA9PiAnJyB9OworCisjIFdvcmsgaXMgZm9yIG1hbmFnaW5nIHRlbXBvcmFyeSB3b3JraW5nIGRpcmVjdG9yeQorbXkgJHdvcmsgPQorICAgIHsKKyAgICAgICAgc3RhdGUgPT4gdW5kZWYsICAjIHVuZGVmLCAxIChlbXB0eSksIDIgKHdpdGggc3R1ZmYpCisgICAgICAgIHdvcmtEaXIgPT4gdW5kZWYsCisgICAgICAgIGluZGV4ID0+IHVuZGVmLAorICAgICAgICBlbXB0eURpciA9PiB1bmRlZiwKKyAgICAgICAgdG1wRGlyID0+IHVuZGVmCisgICAgfTsKKworJGxvZy0+aW5mbygiLS0tLS0tLS0tLS0tLS0tIFNUQVJUSU5HIC0tLS0tLS0tLS0tLS0tLS0tIik7CisKK215ICR1c2FnZSA9CisgICAgInVzYWdlOiBnaXQgY3Zzc2VydmVyIFtvcHRpb25zXSBbcHNlcnZlcnxzZXJ2ZXJdIFs8ZGlyZWN0b3J5PiAuLi5dXG4iLgorICAgICIgICAgLS1iYXNlLXBhdGggPHBhdGg+ICA6IFByZXBlbmQgdG8gcmVxdWVzdGVkIENWU1JPT1RcbiIuCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIHJlYWQgZnJvbSBHSVRfQ1ZTU0VSVkVSX0JBU0VfUEFUSFxuIi4KKyAgICAiICAgIC0tc3RyaWN0LXBhdGhzICAgICAgOiBEb24ndCBhbGxvdyByZWN1cnNpbmcgaW50byBzdWJkaXJlY3Rvcmllc1xuIi4KKyAgICAiICAgIC0tZXhwb3J0LWFsbCAgICAgICAgOiBEb24ndCBjaGVjayBmb3IgZ2l0Y3ZzLmVuYWJsZWQgaW4gY29uZmlnXG4iLgorICAgICIgICAgLS12ZXJzaW9uLCAtViAgICAgICA6IFByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIuCisgICAgIiAgICAtaCwgLUggICAgICAgICAgICAgIDogUHJpbnQgdXNhZ2UgaW5mb3JtYXRpb24gYW5kIGV4aXRcbiIuCisgICAgIlxuIi4KKyAgICAiPGRpcmVjdG9yeT4gLi4uIGlzIGEgbGlzdCBvZiBhbGxvd2VkIGRpcmVjdG9yaWVzLiBJZiBubyBkaXJlY3Rvcmllc1xuIi4KKyAgICAiYXJlIGdpdmVuLCBhbGwgYXJlIGFsbG93ZWQuIFRoaXMgaXMgYW4gYWRkaXRpb25hbCByZXN0cmljdGlvbiwgZ2l0Y3ZzXG4iLgorICAgICJhY2Nlc3Mgc3RpbGwgbmVlZHMgdG8gYmUgZW5hYmxlZCBieSB0aGUgZ2l0Y3ZzLmVuYWJsZWQgY29uZmlnIG9wdGlvbi5cbiIuCisgICAgIkFsdGVybmF0ZWx5LCBvbmUgZGlyZWN0b3J5IG1heSBiZSBzcGVjaWZpZWQgaW4gR0lUX0NWU1NFUlZFUl9ST09ULlxuIjsKKworbXkgQG9wdHMgPSAoICdofEgnLCAndmVyc2lvbnxWJywKKwkgICAgICdiYXNlLXBhdGg9cycsICdzdHJpY3QtcGF0aHMnLCAnZXhwb3J0LWFsbCcgKTsKK0dldE9wdGlvbnMoICRzdGF0ZSwgQG9wdHMgKQorICAgIG9yIGRpZSAkdXNhZ2U7CisKK2lmICgkc3RhdGUtPnt2ZXJzaW9ufSkgeworICAgIHByaW50ICJnaXQtY3Zzc2VydmVyIHZlcnNpb24gJFZFUlNJT05cbiI7CisgICAgZXhpdDsKK30KK2lmICgkc3RhdGUtPntoZWxwfSkgeworICAgIHByaW50ICR1c2FnZTsKKyAgICBleGl0OworfQorCitteSAkVEVNUF9ESVIgPSB0ZW1wZGlyKCBDTEVBTlVQID0+IDEgKTsKKyRsb2ctPmRlYnVnKCJUZW1wb3JhcnkgZGlyZWN0b3J5IGlzICckVEVNUF9ESVInIik7CisKKyRzdGF0ZS0+e21ldGhvZH0gPSAnZXh0JzsKK2lmIChAQVJHVikgeworICAgIGlmICgkQVJHVlswXSBlcSAncHNlcnZlcicpIHsKKwkkc3RhdGUtPnttZXRob2R9ID0gJ3BzZXJ2ZXInOworCXNoaWZ0IEBBUkdWOworICAgIH0gZWxzaWYgKCRBUkdWWzBdIGVxICdzZXJ2ZXInKSB7CisJc2hpZnQgQEFSR1Y7CisgICAgfQorfQorCisjIGV2ZXJ5dGhpbmcgZWxzZSBpcyBhIGRpcmVjdG9yeQorJHN0YXRlLT57YWxsb3dlZF9yb290c30gPSBbIEBBUkdWIF07CisKKyMgZG9uJ3QgZXhwb3J0IHRoZSB3aG9sZSBzeXN0ZW0gdW5sZXNzIHRoZSB1c2VycyByZXF1ZXN0cyBpdAoraWYgKCRzdGF0ZS0+eydleHBvcnQtYWxsJ30gJiYgIUB7JHN0YXRlLT57YWxsb3dlZF9yb290c319KSB7CisgICAgZGllICItLWV4cG9ydC1hbGwgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIGFuIGV4cGxpY2l0IHdoaXRlbGlzdFxuIjsKK30KKworIyBFbnZpcm9ubWVudCBoYW5kbGluZyBmb3IgcnVubmluZyB1bmRlciBnaXQtc2hlbGwKK2lmIChleGlzdHMgJEVOVntHSVRfQ1ZTU0VSVkVSX0JBU0VfUEFUSH0pIHsKKyAgICBpZiAoJHN0YXRlLT57J2Jhc2UtcGF0aCd9KSB7CisJZGllICJDYW5ub3Qgc3BlY2lmeSBiYXNlIHBhdGggYm90aCB3YXlzLlxuIjsKKyAgICB9CisgICAgbXkgJGJhc2VfcGF0aCA9ICRFTlZ7R0lUX0NWU1NFUlZFUl9CQVNFX1BBVEh9OworICAgICRzdGF0ZS0+eydiYXNlLXBhdGgnfSA9ICRiYXNlX3BhdGg7CisgICAgJGxvZy0+ZGVidWcoIlBpY2tlZCB1cCBiYXNlIHBhdGggJyRiYXNlX3BhdGgnIGZyb20gZW52aXJvbm1lbnQuXG4iKTsKK30KK2lmIChleGlzdHMgJEVOVntHSVRfQ1ZTU0VSVkVSX1JPT1R9KSB7CisgICAgaWYgKEB7JHN0YXRlLT57YWxsb3dlZF9yb290c319KSB7CisJZGllICJDYW5ub3Qgc3BlY2lmeSByb290cyBib3RoIHdheXM6IEBBUkdWXG4iOworICAgIH0KKyAgICBteSAkYWxsb3dlZF9yb290ID0gJEVOVntHSVRfQ1ZTU0VSVkVSX1JPT1R9OworICAgICRzdGF0ZS0+e2FsbG93ZWRfcm9vdHN9ID0gWyAkYWxsb3dlZF9yb290IF07CisgICAgJGxvZy0+ZGVidWcoIlBpY2tlZCB1cCBhbGxvd2VkIHJvb3QgJyRhbGxvd2VkX3Jvb3QnIGZyb20gZW52aXJvbm1lbnQuXG4iKTsKK30KKworIyBpZiB3ZSBhcmUgY2FsbGVkIHdpdGggYSBwc2VydmVyIGFyZ3VtZW50LAorIyBkZWFsIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIGNhdCBiZWZvcmUgZW50ZXJpbmcgdGhlCisjIG1haW4gbG9vcAoraWYgKCRzdGF0ZS0+e21ldGhvZH0gZXEgJ3BzZXJ2ZXInKSB7CisgICAgbXkgJGxpbmUgPSA8U1RESU4+OyBjaG9tcCAkbGluZTsKKyAgICB1bmxlc3MoICRsaW5lID1+IC9eQkVHSU4gKEFVVEh8VkVSSUZJQ0FUSU9OKSBSRVFVRVNUJC8pIHsKKyAgICAgICBkaWUgIkUgRG8gbm90IHVuZGVyc3RhbmQgJGxpbmUgLSBleHBlY3RpbmcgQkVHSU4gQVVUSCBSRVFVRVNUXG4iOworICAgIH0KKyAgICBteSAkcmVxdWVzdCA9ICQxOworICAgICRsaW5lID0gPFNURElOPjsgY2hvbXAgJGxpbmU7CisgICAgdW5sZXNzIChyZXFfUm9vdCgncm9vdCcsICRsaW5lKSkgeyAjIHJldXNlIFJvb3QKKyAgICAgICBwcmludCAiRSBJbnZhbGlkIHJvb3QgJGxpbmUgXG4iOworICAgICAgIGV4aXQgMTsKKyAgICB9CisgICAgJGxpbmUgPSA8U1RESU4+OyBjaG9tcCAkbGluZTsKKyAgICBteSAkdXNlciA9ICRsaW5lOworICAgICRsaW5lID0gPFNURElOPjsgY2hvbXAgJGxpbmU7CisgICAgbXkgJHBhc3N3b3JkID0gJGxpbmU7CisKKyAgICBpZiAoJHVzZXIgZXEgJ2Fub255bW91cycpIHsKKyAgICAgICAgIyAiQSIgd2lsbCBiZSAxIGJ5dGUsIHVzZSBsZW5ndGggaW5zdGVhZCBpbiBjYXNlIHRoZQorICAgICAgICAjIGVuY3J5cHRpb24gbWV0aG9kIGV2ZXIgY2hhbmdlcyAoeWVhaCwgcmlnaHQhKQorICAgICAgICBpZiAobGVuZ3RoKCRwYXNzd29yZCkgPiAxICkgeworICAgICAgICAgICAgcHJpbnQgIkUgRG9uJ3Qgc3VwcGx5IGEgcGFzc3dvcmQgZm9yIHRoZSBgYW5vbnltb3VzJyB1c2VyXG4iOworICAgICAgICAgICAgcHJpbnQgIkkgSEFURSBZT1VcbiI7CisgICAgICAgICAgICBleGl0IDE7CisgICAgICAgIH0KKworICAgICAgICAjIEZhbGwgdGhyb3VnaCB0byBMT1ZFCisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBUcnlpbmcgdG8gYXV0aGVudGljYXRlIGEgdXNlcgorICAgICAgICBpZiAobm90IGV4aXN0cyAkY2ZnLT57Z2l0Y3ZzfS0+e2F1dGhkYn0pIHsKKyAgICAgICAgICAgIHByaW50ICJFIHRoZSByZXBvIGNvbmZpZyBmaWxlIG5lZWRzIGEgW2dpdGN2c10gc2VjdGlvbiB3aXRoIGFuICdhdXRoZGInIHBhcmFtZXRlciBzZXQgdG8gdGhlIGZpbGVuYW1lIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBkYXRhYmFzZVxuIjsKKyAgICAgICAgICAgIHByaW50ICJJIEhBVEUgWU9VXG4iOworICAgICAgICAgICAgZXhpdCAxOworICAgICAgICB9CisKKyAgICAgICAgbXkgJGF1dGhkYiA9ICRjZmctPntnaXRjdnN9LT57YXV0aGRifTsKKworICAgICAgICB1bmxlc3MgKC1lICRhdXRoZGIpIHsKKyAgICAgICAgICAgIHByaW50ICJFIFRoZSBhdXRoZW50aWNhdGlvbiBkYXRhYmFzZSBzcGVjaWZpZWQgaW4gW2dpdGN2cy5hdXRoZGJdIGRvZXMgbm90IGV4aXN0XG4iOworICAgICAgICAgICAgcHJpbnQgIkkgSEFURSBZT1VcbiI7CisgICAgICAgICAgICBleGl0IDE7CisgICAgICAgIH0KKworICAgICAgICBteSAkYXV0aF9vazsKKyAgICAgICAgb3BlbiBteSAkcGFzc3dkLCAiPCIsICRhdXRoZGIgb3IgZGllICQhOworICAgICAgICB3aGlsZSAoPCRwYXNzd2Q+KSB7CisgICAgICAgICAgICBpZiAobXteXFEkdXNlclxFOiguKil9KSB7CisgICAgICAgICAgICAgICAgaWYgKGNyeXB0KCR1c2VyLCBkZXNjcmFtYmxlKCRwYXNzd29yZCkpIGVxICQxKSB7CisgICAgICAgICAgICAgICAgICAgICRhdXRoX29rID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGNsb3NlICRwYXNzd2Q7CisKKyAgICAgICAgdW5sZXNzICgkYXV0aF9vaykgeworICAgICAgICAgICAgcHJpbnQgIkkgSEFURSBZT1VcbiI7CisgICAgICAgICAgICBleGl0IDE7CisgICAgICAgIH0KKworICAgICAgICAjIEZhbGwgdGhyb3VnaCB0byBMT1ZFCisgICAgfQorCisgICAgIyBGb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgdXNlciBpcyBhbm9ueW1vdXMgb24gY29tbWl0CisgICAgJHN0YXRlLT57dXNlcn0gPSAkdXNlcjsKKworICAgICRsaW5lID0gPFNURElOPjsgY2hvbXAgJGxpbmU7CisgICAgdW5sZXNzICgkbGluZSBlcSAiRU5EICRyZXF1ZXN0IFJFUVVFU1QiKSB7CisgICAgICAgZGllICJFIERvIG5vdCB1bmRlcnN0YW5kICRsaW5lIC0tIGV4cGVjdGluZyBFTkQgJHJlcXVlc3QgUkVRVUVTVFxuIjsKKyAgICB9CisgICAgcHJpbnQgIkkgTE9WRSBZT1VcbiI7CisgICAgZXhpdCBpZiAkcmVxdWVzdCBlcSAnVkVSSUZJQ0FUSU9OJzsgIyBjdnMgbG9naW4KKyAgICAjIGFuZCBub3cgYmFjayB0byBvdXIgcmVndWxhciBwcm9ncmFtbWUuLi4KK30KKworIyBLZWVwIGdvaW5nIHVudGlsIHRoZSBjbGllbnQgY2xvc2VzIHRoZSBjb25uZWN0aW9uCit3aGlsZSAoPFNURElOPikKK3sKKyAgICBjaG9tcDsKKworICAgICMgQ2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIHNlZW4gdGhpcyBtZXRob2QsIGFuZCBjYWxsIGFwcHJvcHJpYXRlIGZ1bmN0aW9uLgorICAgIGlmICggL14oW1x3LV0rKSg/OlxzKyguKikpPyQvIGFuZCBkZWZpbmVkKCRtZXRob2RzLT57JDF9KSApCisgICAgeworICAgICAgICAjIHVzZSB0aGUgJG1ldGhvZHMgaGFzaCB0byBjYWxsIHRoZSBhcHByb3ByaWF0ZSBzdWIgZm9yIHRoaXMgY29tbWFuZAorICAgICAgICAjJGxvZy0+aW5mbygiTWV0aG9kIDogJDEiKTsKKyAgICAgICAgJnskbWV0aG9kcy0+eyQxfX0oJDEsJDIpOworICAgIH0gZWxzZSB7CisgICAgICAgICMgbG9nIGZhdGFsIGJlY2F1c2Ugd2UgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLiBJZiB0aGlzIGhhcHBlbnMKKyAgICAgICAgIyB3ZSdyZSBmYWlybHkgc2NyZXdlZCBiZWNhdXNlIHdlIGRvbid0IGtub3cgaWYgdGhlIGNsaWVudCBpcyBleHBlY3RpbmcKKyAgICAgICAgIyBhIHJlc3BvbnNlLiBJZiBpdCBpcywgdGhlIGNsaWVudCB3aWxsIGhhbmcsIHdlJ2xsIGhhbmcsIGFuZCB0aGUgd2hvbGUKKyAgICAgICAgIyB0aGluZyB3aWxsIGJlIGN1c3RhcmQuCisgICAgICAgICRsb2ctPmZhdGFsKCJEb24ndCB1bmRlcnN0YW5kIGNvbW1hbmQgJF9cbiIpOworICAgICAgICBkaWUoIlVua25vd24gY29tbWFuZCAkXyIpOworICAgIH0KK30KKworJGxvZy0+ZGVidWcoIlByb2Nlc3NpbmcgdGltZSA6IHVzZXI9IiAuICh0aW1lcylbMF0gLiAiIHN5c3RlbT0iIC4gKHRpbWVzKVsxXSk7CiskbG9nLT5pbmZvKCItLS0tLS0tLS0tLS0tLS0gRklOSVNIIC0tLS0tLS0tLS0tLS0tLS0tIik7CisKK2NoZGlyICcvJzsKK2V4aXQgMDsKKworIyBNYWdpYyBjYXRjaGFsbCBtZXRob2QuCisjICAgIFRoaXMgaXMgdGhlIG1ldGhvZCB0aGF0IHdpbGwgaGFuZGxlIGFsbCBjb21tYW5kcyB3ZSBoYXZlbid0IHlldAorIyAgICBpbXBsZW1lbnRlZC4gSXQgc2ltcGx5IHNlbmRzIGEgd2FybmluZyB0byB0aGUgbG9nIGZpbGUgaW5kaWNhdGluZyBhCisjICAgIGNvbW1hbmQgdGhhdCBoYXNuJ3QgYmVlbiBpbXBsZW1lbnRlZCBoYXMgYmVlbiBpbnZva2VkLgorc3ViIHJlcV9DQVRDSEFMTAoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworICAgICRsb2ctPndhcm4oIlVuaGFuZGxlZCBjb21tYW5kIDogcmVxXyRjbWQgOiAkZGF0YSIpOworfQorCisjIFRoaXMgbWV0aG9kIGludmFyaWFibHkgc3VjY2VlZHMgd2l0aCBhbiBlbXB0eSByZXNwb25zZS4KK3N1YiByZXFfRU1QVFkKK3sKKyAgICBwcmludCAib2tcbiI7Cit9CisKKyMgUm9vdCBwYXRobmFtZSBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBUZWxsIHRoZSBzZXJ2ZXIgd2hpY2ggQ1ZTUk9PVCB0byB1c2UuIE5vdGUgdGhhdAorIyAgICAgcGF0aG5hbWUgaXMgYSBsb2NhbCBkaXJlY3RvcnkgYW5kIG5vdCBhIGZ1bGx5IHF1YWxpZmllZCBDVlNST09UIHZhcmlhYmxlLgorIyAgICAgcGF0aG5hbWUgbXVzdCBhbHJlYWR5IGV4aXN0OyBpZiBjcmVhdGluZyBhIG5ldyByb290LCB1c2UgdGhlIGluaXQKKyMgICAgIHJlcXVlc3QsIG5vdCBSb290LiBwYXRobmFtZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBob3N0bmFtZSBvZiB0aGUgc2VydmVyLAorIyAgICAgaG93IHRvIGFjY2VzcyB0aGUgc2VydmVyLCBldGMuOyBieSB0aGUgdGltZSB0aGUgQ1ZTIHByb3RvY29sIGlzIGluIHVzZSwKKyMgICAgIGNvbm5lY3Rpb24sIGF1dGhlbnRpY2F0aW9uLCBldGMuLCBhcmUgYWxyZWFkeSB0YWtlbiBjYXJlIG9mLiBUaGUgUm9vdAorIyAgICAgcmVxdWVzdCBtdXN0IGJlIHNlbnQgb25seSBvbmNlLCBhbmQgaXQgbXVzdCBiZSBzZW50IGJlZm9yZSBhbnkgcmVxdWVzdHMKKyMgICAgIG90aGVyIHRoYW4gVmFsaWQtcmVzcG9uc2VzLCB2YWxpZC1yZXF1ZXN0cywgVXNlVW5jaGFuZ2VkLCBTZXQgb3IgaW5pdC4KK3N1YiByZXFfUm9vdAoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworICAgICRsb2ctPmRlYnVnKCJyZXFfUm9vdCA6ICRkYXRhIik7CisKKyAgICB1bmxlc3MgKCRkYXRhID1+IG0jXi8jKSB7CisJcHJpbnQgImVycm9yIDEgUm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGhuYW1lXG4iOworCXJldHVybiAwOworICAgIH0KKworICAgIG15ICRjdnNyb290ID0gJHN0YXRlLT57J2Jhc2UtcGF0aCd9IHx8ICcnOworICAgICRjdnNyb290ID1+IHMjLyskIyM7CisgICAgJGN2c3Jvb3QgLj0gJGRhdGE7CisKKyAgICBpZiAoJHN0YXRlLT57Q1ZTUk9PVH0KKwkmJiAoJHN0YXRlLT57Q1ZTUk9PVH0gbmUgJGN2c3Jvb3QpKSB7CisJcHJpbnQgImVycm9yIDEgQ29uZmxpY3Rpbmcgcm9vdHMgc3BlY2lmaWVkXG4iOworCXJldHVybiAwOworICAgIH0KKworICAgICRzdGF0ZS0+e0NWU1JPT1R9ID0gJGN2c3Jvb3Q7CisKKyAgICAkRU5We0dJVF9ESVJ9ID0gJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyI7CisKKyAgICBpZiAoQHskc3RhdGUtPnthbGxvd2VkX3Jvb3RzfX0pIHsKKwlteSAkYWxsb3dlZCA9IDA7CisJZm9yZWFjaCBteSAkZGlyIChAeyRzdGF0ZS0+e2FsbG93ZWRfcm9vdHN9fSkgeworCSAgICBuZXh0IHVubGVzcyAkZGlyID1+IG0jXi8jOworCSAgICAkZGlyID1+IHMjLyskIyM7CisJICAgIGlmICgkc3RhdGUtPnsnc3RyaWN0LXBhdGhzJ30pIHsKKwkJaWYgKCRFTlZ7R0lUX0RJUn0gPX4gbSNeXFEkZGlyXEUvPyQjKSB7CisJCSAgICAkYWxsb3dlZCA9IDE7CisJCSAgICBsYXN0OworCQl9CisJICAgIH0gZWxzaWYgKCRFTlZ7R0lUX0RJUn0gPX4gbSNeXFEkZGlyXEUoLz8kfC8pIykgeworCQkkYWxsb3dlZCA9IDE7CisJCWxhc3Q7CisJICAgIH0KKwl9CisKKwl1bmxlc3MgKCRhbGxvd2VkKSB7CisJICAgIHByaW50ICJFICRFTlZ7R0lUX0RJUn0gZG9lcyBub3Qgc2VlbSB0byBiZSBhIHZhbGlkIEdJVCByZXBvc2l0b3J5XG4iOworCSAgICBwcmludCAiRSBcbiI7CisJICAgIHByaW50ICJlcnJvciAxICRFTlZ7R0lUX0RJUn0gaXMgbm90IGEgdmFsaWQgcmVwb3NpdG9yeVxuIjsKKwkgICAgcmV0dXJuIDA7CisJfQorICAgIH0KKworICAgIHVubGVzcyAoLWQgJEVOVntHSVRfRElSfSAmJiAtZSAkRU5We0dJVF9ESVJ9LidIRUFEJykgeworICAgICAgIHByaW50ICJFICRFTlZ7R0lUX0RJUn0gZG9lcyBub3Qgc2VlbSB0byBiZSBhIHZhbGlkIEdJVCByZXBvc2l0b3J5XG4iOworICAgICAgIHByaW50ICJFIFxuIjsKKyAgICAgICBwcmludCAiZXJyb3IgMSAkRU5We0dJVF9ESVJ9IGlzIG5vdCBhIHZhbGlkIHJlcG9zaXRvcnlcbiI7CisgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgbXkgQGdpdHZhcnMgPSBgZ2l0IGNvbmZpZyAtbGA7CisgICAgaWYgKCQ/KSB7CisgICAgICAgcHJpbnQgIkUgcHJvYmxlbXMgZXhlY3V0aW5nIGdpdC1jb25maWcgb24gdGhlIHNlcnZlciAtLSB0aGlzIGlzIG5vdCBhIGdpdCByZXBvc2l0b3J5IG9yIHRoZSBQQVRIIGlzIG5vdCBzZXQgY29ycmVjdGx5LlxuIjsKKyAgICAgICAgcHJpbnQgIkUgXG4iOworICAgICAgICBwcmludCAiZXJyb3IgMSAtIHByb2JsZW0gZXhlY3V0aW5nIGdpdC1jb25maWdcbiI7CisgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGZvcmVhY2ggbXkgJGxpbmUgKCBAZ2l0dmFycyApCisgICAgeworICAgICAgICBuZXh0IHVubGVzcyAoICRsaW5lID1+IC9eKGdpdGN2cylcLig/OihleHR8cHNlcnZlcilcLik/KFtcdy1dKyk9KC4qKSQvICk7CisgICAgICAgIHVubGVzcyAoJDIpIHsKKyAgICAgICAgICAgICRjZmctPnskMX17JDN9ID0gJDQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkY2ZnLT57JDF9eyQyfXskM30gPSAkNDsKKyAgICAgICAgfQorICAgIH0KKworICAgIG15ICRlbmFibGVkID0gKCRjZmctPntnaXRjdnN9eyRzdGF0ZS0+e21ldGhvZH19e2VuYWJsZWR9CisJCSAgIHx8ICRjZmctPntnaXRjdnN9e2VuYWJsZWR9KTsKKyAgICB1bmxlc3MgKCRzdGF0ZS0+eydleHBvcnQtYWxsJ30gfHwKKwkgICAgKCRlbmFibGVkICYmICRlbmFibGVkID1+IC9eXHMqKDF8dHJ1ZXx5ZXMpXHMqJC9pKSkgeworICAgICAgICBwcmludCAiRSBHSVRDVlMgZW11bGF0aW9uIG5lZWRzIHRvIGJlIGVuYWJsZWQgb24gdGhpcyByZXBvXG4iOworICAgICAgICBwcmludCAiRSB0aGUgcmVwbyBjb25maWcgZmlsZSBuZWVkcyBhIFtnaXRjdnNdIHNlY3Rpb24gYWRkZWQsIGFuZCB0aGUgcGFyYW1ldGVyICdlbmFibGVkJyBzZXQgdG8gMVxuIjsKKyAgICAgICAgcHJpbnQgIkUgXG4iOworICAgICAgICBwcmludCAiZXJyb3IgMSBHSVRDVlMgZW11bGF0aW9uIGRpc2FibGVkXG4iOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBteSAkbG9nZmlsZSA9ICRjZmctPntnaXRjdnN9eyRzdGF0ZS0+e21ldGhvZH19e2xvZ2ZpbGV9IHx8ICRjZmctPntnaXRjdnN9e2xvZ2ZpbGV9OworICAgIGlmICggJGxvZ2ZpbGUgKQorICAgIHsKKyAgICAgICAgJGxvZy0+c2V0ZmlsZSgkbG9nZmlsZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJGxvZy0+bm9maWxlKCk7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKKyMgR2xvYmFsX29wdGlvbiBvcHRpb24gXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiBuby4gVHJhbnNtaXQgb25lIG9mIHRoZSBnbG9iYWwgb3B0aW9ucyBgLXEnLCBgLVEnLAorIyAgICAgYC1sJywgYC10JywgYC1yJywgb3IgYC1uJy4gb3B0aW9uIG11c3QgYmUgb25lIG9mIHRob3NlIHN0cmluZ3MsIG5vCisjICAgICB2YXJpYXRpb25zIChzdWNoIGFzIGNvbWJpbmluZyBvZiBvcHRpb25zKSBhcmUgYWxsb3dlZC4gRm9yIGdyYWNlZnVsCisjICAgICBoYW5kbGluZyBvZiB2YWxpZC1yZXF1ZXN0cywgaXQgaXMgcHJvYmFibHkgYmV0dGVyIHRvIG1ha2UgbmV3IGdsb2JhbAorIyAgICAgb3B0aW9ucyBzZXBhcmF0ZSByZXF1ZXN0cywgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGFkZCB0aGVtIHRvIHRoaXMKKyMgICAgIHJlcXVlc3QuCitzdWIgcmVxX0dsb2JhbG9wdGlvbgoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworICAgICRsb2ctPmRlYnVnKCJyZXFfR2xvYmFsb3B0aW9uIDogJGRhdGEiKTsKKyAgICAkc3RhdGUtPntnbG9iYWxvcHRpb25zfXskZGF0YX0gPSAxOworfQorCisjIFZhbGlkLXJlc3BvbnNlcyByZXF1ZXN0LWxpc3QgXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiBuby4gVGVsbCB0aGUgc2VydmVyIHdoYXQgcmVzcG9uc2VzIHRoZSBjbGllbnQgd2lsbAorIyAgICAgYWNjZXB0LiByZXF1ZXN0LWxpc3QgaXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiB0b2tlbnMuCitzdWIgcmVxX1ZhbGlkcmVzcG9uc2VzCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisgICAgJGxvZy0+ZGVidWcoInJlcV9WYWxpZHJlc3BvbnNlcyA6ICRkYXRhIik7CisKKyAgICAjIFRPRE8gOiByZS1lbmFibGUgdGhpcywgY3VycmVudGx5IGl0J3Mgbm90IHBhcnRpY3VsYXJseSB1c2VmdWwKKyAgICAjJHN0YXRlLT57dmFsaWRyZXNwb25zZXN9ID0gWyBzcGxpdCAvXHMrLywgJGRhdGEgXTsKK30KKworIyB2YWxpZC1yZXF1ZXN0cyBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IHllcy4gQXNrIHRoZSBzZXJ2ZXIgdG8gc2VuZCBiYWNrIGEgVmFsaWQtcmVxdWVzdHMKKyMgICAgIHJlc3BvbnNlLgorc3ViIHJlcV92YWxpZHJlcXVlc3RzCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX3ZhbGlkcmVxdWVzdHMiKTsKKworICAgICRsb2ctPmRlYnVnKCJTRU5EIDogVmFsaWQtcmVxdWVzdHMgIiAuIGpvaW4oIiAiLHNvcnQga2V5cyAlJG1ldGhvZHMpKTsKKyAgICAkbG9nLT5kZWJ1ZygiU0VORCA6IG9rIik7CisKKyAgICBwcmludCAiVmFsaWQtcmVxdWVzdHMgIiAuIGpvaW4oIiAiLHNvcnQga2V5cyAlJG1ldGhvZHMpIC4gIlxuIjsKKyAgICBwcmludCAib2tcbiI7Cit9CisKKyMgRGlyZWN0b3J5IGxvY2FsLWRpcmVjdG9yeSBcbgorIyAgICAgQWRkaXRpb25hbCBkYXRhOiByZXBvc2l0b3J5IFxuLiBSZXNwb25zZSBleHBlY3RlZDogbm8uIFRlbGwgdGhlIHNlcnZlcgorIyAgICAgd2hhdCBkaXJlY3RvcnkgdG8gdXNlLiBUaGUgcmVwb3NpdG9yeSBzaG91bGQgYmUgYSBkaXJlY3RvcnkgbmFtZSBmcm9tIGEKKyMgICAgIHByZXZpb3VzIHNlcnZlciByZXNwb25zZS4gTm90ZSB0aGF0IHRoaXMgYm90aCBnaXZlcyBhIGRlZmF1bHQgZm9yIEVudHJ5CisjICAgICBhbmQgTW9kaWZpZWQgYW5kIGFsc28gZm9yIGNpIGFuZCB0aGUgb3RoZXIgY29tbWFuZHM7IG5vcm1hbCB1c2FnZSBpcyB0bworIyAgICAgc2VuZCBEaXJlY3RvcnkgZm9yIGVhY2ggZGlyZWN0b3J5IGluIHdoaWNoIHRoZXJlIHdpbGwgYmUgYW4gRW50cnkgb3IKKyMgICAgIE1vZGlmaWVkLCBhbmQgdGhlbiBhIGZpbmFsIERpcmVjdG9yeSBmb3IgdGhlIG9yaWdpbmFsIGRpcmVjdG9yeSwgdGhlbiB0aGUKKyMgICAgIGNvbW1hbmQuIFRoZSBsb2NhbC1kaXJlY3RvcnkgaXMgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZXZlbCBhdCB3aGljaCB0aGUKKyMgICAgIGNvbW1hbmQgaXMgb2NjdXJyaW5nIChpLmUuIHRoZSBsYXN0IERpcmVjdG9yeSB3aGljaCBpcyBzZW50IGJlZm9yZSB0aGUKKyMgICAgIGNvbW1hbmQpOyB0byBpbmRpY2F0ZSB0aGF0IHRvcCBsZXZlbCwgYC4nIHNob3VsZCBiZSBzZW50IGZvcgorIyAgICAgbG9jYWwtZGlyZWN0b3J5Lgorc3ViIHJlcV9EaXJlY3RvcnkKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIG15ICRyZXBvc2l0b3J5ID0gPFNURElOPjsKKyAgICBjaG9tcCAkcmVwb3NpdG9yeTsKKworCisgICAgJHN0YXRlLT57bG9jYWxkaXJ9ID0gJGRhdGE7CisgICAgJHN0YXRlLT57cmVwb3NpdG9yeX0gPSAkcmVwb3NpdG9yeTsKKyAgICAkc3RhdGUtPntwYXRofSA9ICRyZXBvc2l0b3J5OworICAgICRzdGF0ZS0+e3BhdGh9ID1+IHMvXlxRJHN0YXRlLT57Q1ZTUk9PVH1cRVwvLy87CisgICAgJHN0YXRlLT57bW9kdWxlfSA9ICQxIGlmICgkc3RhdGUtPntwYXRofSA9fiBzL14oLio/KShcL3wkKS8vKTsKKyAgICAkc3RhdGUtPntwYXRofSAuPSAiLyIgaWYgKCAkc3RhdGUtPntwYXRofSA9fiAvXFMvICk7CisKKyAgICAkc3RhdGUtPntkaXJlY3Rvcnl9ID0gJHN0YXRlLT57bG9jYWxkaXJ9OworICAgICRzdGF0ZS0+e2RpcmVjdG9yeX0gPSAiIiBpZiAoICRzdGF0ZS0+e2RpcmVjdG9yeX0gZXEgIi4iICk7CisgICAgJHN0YXRlLT57ZGlyZWN0b3J5fSAuPSAiLyIgaWYgKCAkc3RhdGUtPntkaXJlY3Rvcnl9ID1+IC9cUy8gKTsKKworICAgIGlmICggKG5vdCBkZWZpbmVkKCRzdGF0ZS0+e3ByZXBlbmRkaXJ9KSBvciAkc3RhdGUtPntwcmVwZW5kZGlyfSBlcSAnJykgYW5kICRzdGF0ZS0+e2xvY2FsZGlyfSBlcSAiLiIgYW5kICRzdGF0ZS0+e3BhdGh9ID1+IC9cUy8gKQorICAgIHsKKyAgICAgICAgJGxvZy0+aW5mbygiU2V0dGluZyBwcmVwZW5kIHRvICckc3RhdGUtPntwYXRofSciKTsKKyAgICAgICAgJHN0YXRlLT57cHJlcGVuZGRpcn0gPSAkc3RhdGUtPntwYXRofTsKKyAgICAgICAgbXkgJWVudHJpZXM7CisgICAgICAgIGZvcmVhY2ggbXkgJGVudHJ5ICgga2V5cyAleyRzdGF0ZS0+e2VudHJpZXN9fSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRlbnRyaWVzeyRzdGF0ZS0+e3ByZXBlbmRkaXJ9IC4gJGVudHJ5fSA9ICRzdGF0ZS0+e2VudHJpZXN9eyRlbnRyeX07CisgICAgICAgIH0KKyAgICAgICAgJHN0YXRlLT57ZW50cmllc309XCVlbnRyaWVzOworCisgICAgICAgIG15ICVkaXJNYXA7CisgICAgICAgIGZvcmVhY2ggbXkgJGRpciAoIGtleXMgJXskc3RhdGUtPntkaXJNYXB9fSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRkaXJNYXB7JHN0YXRlLT57cHJlcGVuZGRpcn0gLiAkZGlyfSA9ICRzdGF0ZS0+e2Rpck1hcH17JGRpcn07CisgICAgICAgIH0KKyAgICAgICAgJHN0YXRlLT57ZGlyTWFwfT1cJWRpck1hcDsKKyAgICB9CisKKyAgICBpZiAoIGRlZmluZWQgKCAkc3RhdGUtPntwcmVwZW5kZGlyfSApICkKKyAgICB7CisgICAgICAgICRsb2ctPmRlYnVnKCJQcmVwZW5kaW5nICckc3RhdGUtPntwcmVwZW5kZGlyfScgdG8gc3RhdGV8ZGlyZWN0b3J5Iik7CisgICAgICAgICRzdGF0ZS0+e2RpcmVjdG9yeX0gPSAkc3RhdGUtPntwcmVwZW5kZGlyfSAuICRzdGF0ZS0+e2RpcmVjdG9yeX0KKyAgICB9CisKKyAgICBpZiAoICEgZGVmaW5lZCgkc3RhdGUtPntkaXJNYXB9eyRzdGF0ZS0+e2RpcmVjdG9yeX19KSApCisgICAgeworICAgICAgICAkc3RhdGUtPntkaXJNYXB9eyRzdGF0ZS0+e2RpcmVjdG9yeX19ID0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAnbmFtZXMnID0+IHt9CisgICAgICAgICAgICAgICAgIyd0YWdzcGVjJyA9PiB1bmRlZgorICAgICAgICAgICAgfTsKKyAgICB9CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX0RpcmVjdG9yeSA6IGxvY2FsZGlyPSRkYXRhIHJlcG9zaXRvcnk9JHJlcG9zaXRvcnkgcGF0aD0kc3RhdGUtPntwYXRofSBkaXJlY3Rvcnk9JHN0YXRlLT57ZGlyZWN0b3J5fSBtb2R1bGU9JHN0YXRlLT57bW9kdWxlfSIpOworfQorCisjIFN0aWNreSB0YWdzcGVjIFxuCisjICAgICBSZXNwb25zZSBleHBlY3RlZDogbm8uIFRlbGwgdGhlIHNlcnZlciB0aGF0IHRoZSBkaXJlY3RvcnkgbW9zdAorIyAgICAgcmVjZW50bHkgc3BlY2lmaWVkIHdpdGggRGlyZWN0b3J5IGhhcyBhIHN0aWNreSB0YWcgb3IgZGF0ZQorIyAgICAgdGFnc3BlYy4gVGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0YWdzcGVjIGlzIFQgZm9yIGEgdGFnLCBEIGZvcgorIyAgICAgYSBkYXRlLCBvciBzb21lIG90aGVyIGNoYXJhY3RlciBzdXBwbGllZCBieSBhIFNldC1zdGlja3kKKyMgICAgIHJlc3BvbnNlIGZyb20gYSBwcmV2aW91cyByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIuIFRoZSByZW1haW5kZXIKKyMgICAgIG9mIHRhZ3NwZWMgY29udGFpbnMgdGhlIGFjdHVhbCB0YWcgb3IgZGF0ZSwgYWdhaW4gYXMgc3VwcGxpZWQKKyMgICAgIGJ5IFNldC1zdGlja3kuCisjICAgICAgICAgIFRoZSBzZXJ2ZXIgc2hvdWxkIHJlbWVtYmVyIFN0YXRpYy1kaXJlY3RvcnkgYW5kIFN0aWNreSByZXF1ZXN0cworIyAgICAgZm9yIGEgcGFydGljdWxhciBkaXJlY3Rvcnk7IHRoZSBjbGllbnQgbmVlZCBub3QgcmVzZW5kIHRoZW0gZWFjaAorIyAgICAgdGltZSBpdCBzZW5kcyBhIERpcmVjdG9yeSByZXF1ZXN0IGZvciBhIGdpdmVuIGRpcmVjdG9yeS4gSG93ZXZlciwKKyMgICAgIHRoZSBzZXJ2ZXIgaXMgbm90IG9ibGlnZWQgdG8gcmVtZW1iZXIgdGhlbSBiZXlvbmQgdGhlIGNvbnRleHQKKyMgICAgIG9mIGEgc2luZ2xlIGNvbW1hbmQuCitzdWIgcmVxX1N0aWNreQoreworICAgIG15ICggJGNtZCwgJHRhZ3NwZWMgKSA9IEBfOworCisgICAgbXkgKCAkc3RpY2t5SW5mbyApOworICAgIGlmKCR0YWdzcGVjIGVxICIiKQorICAgIHsKKyAgICAgICAgIyBub3RoaW5nCisgICAgfQorICAgIGVsc2lmKCR0YWdzcGVjPX4vXlQoW14gXSspXHMqJC8pCisgICAgeworICAgICAgICAkc3RpY2t5SW5mbyA9IHsgJ3RhZycgPT4gJDEgfTsKKyAgICB9CisgICAgZWxzaWYoJHRhZ3NwZWM9fi9eRChbMC05Ll0rKVxzKiQvKQorICAgIHsKKyAgICAgICAgJHN0aWNreUluZm89IHsgJ2RhdGUnID0+ICQxIH07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRpZSAiVW5rbm93biB0YWdfb3JfZGF0ZSBmb3JtYXRcbiI7CisgICAgfQorICAgICRzdGF0ZS0+e2Rpck1hcH17JHN0YXRlLT57ZGlyZWN0b3J5fX17c3RpY2t5SW5mb309JHN0aWNreUluZm87CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX1N0aWNreSA6IHRhZ3NwZWM9JHRhZ3NwZWMgcmVwb3NpdG9yeT0kc3RhdGUtPntyZXBvc2l0b3J5fSIKKyAgICAgICAgICAgICAgICAuICIgcGF0aD0kc3RhdGUtPntwYXRofSBkaXJlY3Rvcnk9JHN0YXRlLT57ZGlyZWN0b3J5fSIKKyAgICAgICAgICAgICAgICAuICIgbW9kdWxlPSRzdGF0ZS0+e21vZHVsZX0iKTsKK30KKworIyBFbnRyeSBlbnRyeS1saW5lIFxuCisjICAgICBSZXNwb25zZSBleHBlY3RlZDogbm8uIFRlbGwgdGhlIHNlcnZlciB3aGF0IHZlcnNpb24gb2YgYSBmaWxlIGlzIG9uIHRoZQorIyAgICAgbG9jYWwgbWFjaGluZS4gVGhlIG5hbWUgaW4gZW50cnktbGluZSBpcyBhIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeQorIyAgICAgbW9zdCByZWNlbnRseSBzcGVjaWZpZWQgd2l0aCBEaXJlY3RvcnkuIElmIHRoZSB1c2VyIGlzIG9wZXJhdGluZyBvbiBvbmx5CisjICAgICBzb21lIGZpbGVzIGluIGEgZGlyZWN0b3J5LCBFbnRyeSByZXF1ZXN0cyBmb3Igb25seSB0aG9zZSBmaWxlcyBuZWVkIGJlCisjICAgICBpbmNsdWRlZC4gSWYgYW4gRW50cnkgcmVxdWVzdCBpcyBzZW50IHdpdGhvdXQgTW9kaWZpZWQsIElzLW1vZGlmaWVkLCBvcgorIyAgICAgVW5jaGFuZ2VkLCBpdCBtZWFucyB0aGUgZmlsZSBpcyBsb3N0IChkb2VzIG5vdCBleGlzdCBpbiB0aGUgd29ya2luZworIyAgICAgZGlyZWN0b3J5KS4gSWYgYm90aCBFbnRyeSBhbmQgb25lIG9mIE1vZGlmaWVkLCBJcy1tb2RpZmllZCwgb3IgVW5jaGFuZ2VkCisjICAgICBhcmUgc2VudCBmb3IgdGhlIHNhbWUgZmlsZSwgRW50cnkgbXVzdCBiZSBzZW50IGZpcnN0LiBGb3IgYSBnaXZlbiBmaWxlLAorIyAgICAgb25lIGNhbiBzZW5kIE1vZGlmaWVkLCBJcy1tb2RpZmllZCwgb3IgVW5jaGFuZ2VkLCBidXQgbm90IG1vcmUgdGhhbiBvbmUKKyMgICAgIG9mIHRoZXNlIHRocmVlLgorc3ViIHJlcV9FbnRyeQoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgIyRsb2ctPmRlYnVnKCJyZXFfRW50cnkgOiAkZGF0YSIpOworCisgICAgbXkgQGRhdGEgPSBzcGxpdCgvXC8vLCAkZGF0YSwgLTEpOworCisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YVsxXX0gPSB7CisgICAgICAgIHJldmlzaW9uICAgID0+ICRkYXRhWzJdLAorICAgICAgICBjb25mbGljdCAgICA9PiAkZGF0YVszXSwKKyAgICAgICAgb3B0aW9ucyAgICAgPT4gJGRhdGFbNF0sCisgICAgICAgIHRhZ19vcl9kYXRlID0+ICRkYXRhWzVdLAorICAgIH07CisKKyAgICAkc3RhdGUtPntkaXJNYXB9eyRzdGF0ZS0+e2RpcmVjdG9yeX19e25hbWVzfXskZGF0YVsxXX0gPSAnRic7CisKKyAgICAkbG9nLT5pbmZvKCJSZWNlaXZlZCBlbnRyeSBsaW5lICckZGF0YScgPT4gJyIgLiAkc3RhdGUtPntkaXJlY3Rvcnl9IC4gJGRhdGFbMV0gLiAiJyIpOworfQorCisjIFF1ZXN0aW9uYWJsZSBmaWxlbmFtZSBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBBZGRpdGlvbmFsIGRhdGE6IG5vLiBUZWxsIHRoZSBzZXJ2ZXIgdG8gY2hlY2sKKyMgICAgIHdoZXRoZXIgZmlsZW5hbWUgc2hvdWxkIGJlIGlnbm9yZWQsIGFuZCBpZiBub3QsIG5leHQgdGltZSB0aGUgc2VydmVyCisjICAgICBzZW5kcyByZXNwb25zZXMsIHNlbmQgKGluIGEgTSByZXNwb25zZSkgYD8nIGZvbGxvd2VkIGJ5IHRoZSBkaXJlY3RvcnkgYW5kCisjICAgICBmaWxlbmFtZS4gZmlsZW5hbWUgbXVzdCBub3QgY29udGFpbiBgLyc7IGl0IG5lZWRzIHRvIGJlIGEgZmlsZSBpbiB0aGUKKyMgICAgIGRpcmVjdG9yeSBuYW1lZCBieSB0aGUgbW9zdCByZWNlbnQgRGlyZWN0b3J5IHJlcXVlc3QuCitzdWIgcmVxX1F1ZXN0aW9uYWJsZQoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgJGxvZy0+ZGVidWcoInJlcV9RdWVzdGlvbmFibGUgOiAkZGF0YSIpOworICAgICRzdGF0ZS0+e2VudHJpZXN9eyRzdGF0ZS0+e2RpcmVjdG9yeX0uJGRhdGF9e3F1ZXN0aW9uYWJsZX0gPSAxOworfQorCisjIGFkZCBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IHllcy4gQWRkIGEgZmlsZSBvciBkaXJlY3RvcnkuIFRoaXMgdXNlcyBhbnkgcHJldmlvdXMKKyMgICAgIEFyZ3VtZW50LCBEaXJlY3RvcnksIEVudHJ5LCBvciBNb2RpZmllZCByZXF1ZXN0cywgaWYgdGhleSBoYXZlIGJlZW4gc2VudC4KKyMgICAgIFRoZSBsYXN0IERpcmVjdG9yeSBzZW50IHNwZWNpZmllcyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYXQgdGhlIHRpbWUgb2YKKyMgICAgIHRoZSBvcGVyYXRpb24uIFRvIGFkZCBhIGRpcmVjdG9yeSwgc2VuZCB0aGUgZGlyZWN0b3J5IHRvIGJlIGFkZGVkIHVzaW5nCisjICAgICBEaXJlY3RvcnkgYW5kIEFyZ3VtZW50IHJlcXVlc3RzLgorc3ViIHJlcV9hZGQKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJhZGQiKTsKKworICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgIG15ICRhZGRjb3VudCA9IDA7CisKKyAgICBmb3JlYWNoIG15ICRmaWxlbmFtZSAoIEB7JHN0YXRlLT57YXJnc319ICkKKyAgICB7CisgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRmaWxlbmFtZSk7CisKKyAgICAgICAgIyBubyAtciwgLUEsIG9yIC1EIHdpdGggYWRkCisgICAgICAgIG15ICRzdGlja3lJbmZvID0gcmVzb2x2ZVN0aWNreUluZm8oJGZpbGVuYW1lKTsKKworICAgICAgICBteSAkbWV0YSA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSwkc3RpY2t5SW5mbyk7CisgICAgICAgIG15ICR3cmV2ID0gcmV2cGFyc2UoJGZpbGVuYW1lKTsKKworICAgICAgICBpZiAoJHdyZXYgJiYgJG1ldGEgJiYgKCR3cmV2PX4vXi0vKSkKKyAgICAgICAgeworICAgICAgICAgICAgIyBwcmV2aW91c2x5IHJlbW92ZWQgZmlsZSwgYWRkIGJhY2sKKyAgICAgICAgICAgICRsb2ctPmluZm8oImFkZGVkIGZpbGUgJGZpbGVuYW1lIHdhcyBwcmV2aW91c2x5IHJlbW92ZWQsIHNlbmQgJG1ldGEtPntyZXZpc2lvbn0iKTsKKworICAgICAgICAgICAgcHJpbnQgIk1UICt1cGRhdGVkXG4iOworICAgICAgICAgICAgcHJpbnQgIk1UIHRleHQgVSBcbiI7CisgICAgICAgICAgICBwcmludCAiTVQgZm5hbWUgJGZpbGVuYW1lXG4iOworICAgICAgICAgICAgcHJpbnQgIk1UIG5ld2xpbmVcbiI7CisgICAgICAgICAgICBwcmludCAiTVQgLXVwZGF0ZWRcbiI7CisKKyAgICAgICAgICAgIHVubGVzcyAoICRzdGF0ZS0+e2dsb2JhbG9wdGlvbnN9ey1ufSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbXkgKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICkgPSBmaWxlbmFtZXNwbGl0KCRmaWxlbmFtZSwxKTsKKworICAgICAgICAgICAgICAgIHByaW50ICJDcmVhdGVkICRkaXJwYXJ0XG4iOworICAgICAgICAgICAgICAgIHByaW50ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZVxuIjsKKworICAgICAgICAgICAgICAgICMgdGhpcyBpcyBhbiAiZW50cmllcyIgbGluZQorICAgICAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZW5hbWUsInNoYTEiLCRtZXRhLT57ZmlsZWhhc2h9KTsKKyAgICAgICAgICAgICAgICBteSAkZW50cnlMaW5lID0gIi8kZmlsZXBhcnQvJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy8iOworICAgICAgICAgICAgICAgICRlbnRyeUxpbmUgLj0gZ2V0U3RpY2t5VGFnT3JEYXRlKCRzdGlja3lJbmZvKTsKKyAgICAgICAgICAgICAgICAkbG9nLT5kZWJ1ZygkZW50cnlMaW5lKTsKKyAgICAgICAgICAgICAgICBwcmludCAiJGVudHJ5TGluZVxuIjsKKyAgICAgICAgICAgICAgICAjIHBlcm1pc3Npb25zCisgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIlNFTkQgOiB1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfSIpOworICAgICAgICAgICAgICAgIHByaW50ICJ1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfVxuIjsKKyAgICAgICAgICAgICAgICAjIHRyYW5zbWl0IGZpbGUKKyAgICAgICAgICAgICAgICB0cmFuc21pdGZpbGUoJG1ldGEtPntmaWxlaGFzaH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgdW5sZXNzICggZGVmaW5lZCAoICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfZmlsZW5hbWV9ICkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCAiRSBjdnMgYWRkOiBub3RoaW5nIGtub3duIGFib3V0IGAkZmlsZW5hbWUnXG4iOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICAjIFRPRE8gOiBjaGVjayB3ZSdyZSBub3Qgc3F1YXNoaW5nIGFuIGFscmVhZHkgZXhpc3RpbmcgZmlsZQorICAgICAgICBpZiAoIGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3JldmlzaW9ufSApICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIGFkZDogYCRmaWxlbmFtZScgaGFzIGFscmVhZHkgYmVlbiBlbnRlcmVkXG4iOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIG15ICggJGZpbGVwYXJ0LCAkZGlycGFydCApID0gZmlsZW5hbWVzcGxpdCgkZmlsZW5hbWUsIDEpOworCisgICAgICAgIHByaW50ICJFIGN2cyBhZGQ6IHNjaGVkdWxpbmcgZmlsZSBgJGZpbGVuYW1lJyBmb3IgYWRkaXRpb25cbiI7CisKKyAgICAgICAgcHJpbnQgIkNoZWNrZWQtaW4gJGRpcnBhcnRcbiI7CisgICAgICAgIHByaW50ICIkZmlsZW5hbWVcbiI7CisgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZW5hbWUsImZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0pOworICAgICAgICBwcmludCAiLyRmaWxlcGFydC8wLy8ka29wdHMvIiAuCisgICAgICAgICAgICAgIGdldFN0aWNreVRhZ09yRGF0ZSgkc3RpY2t5SW5mbykgLiAiXG4iOworCisgICAgICAgIG15ICRyZXF1ZXN0ZWRLb3B0cyA9ICRzdGF0ZS0+e29wdH17a307CisgICAgICAgIGlmKGRlZmluZWQoJHJlcXVlc3RlZEtvcHRzKSkKKyAgICAgICAgeworICAgICAgICAgICAgJHJlcXVlc3RlZEtvcHRzID0gIi1rJHJlcXVlc3RlZEtvcHRzIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRyZXF1ZXN0ZWRLb3B0cyA9ICIiOworICAgICAgICB9CisgICAgICAgIGlmKCAka29wdHMgbmUgJHJlcXVlc3RlZEtvcHRzICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiSWdub3JpbmcgcmVxdWVzdGVkIC1rPSckcmVxdWVzdGVkS29wdHMnIgorICAgICAgICAgICAgICAgICAgICAgICAgLiAiIGZvciAnJGZpbGVuYW1lJzsgZGV0ZWN0ZWQgLWs9JyRrb3B0cycgaW5zdGVhZCIpOworICAgICAgICAgICAgI1RPRE86IEFsc28gaGF2ZSBvcHRpb24gdG8gc2VuZCB3YXJuaW5nIHRvIHVzZXI/CisgICAgICAgIH0KKworICAgICAgICAkYWRkY291bnQrKzsKKyAgICB9CisKKyAgICBpZiAoICRhZGRjb3VudCA9PSAxICkKKyAgICB7CisgICAgICAgIHByaW50ICJFIGN2cyBhZGQ6IHVzZSBgY3ZzIGNvbW1pdCcgdG8gYWRkIHRoaXMgZmlsZSBwZXJtYW5lbnRseVxuIjsKKyAgICB9CisgICAgZWxzaWYgKCAkYWRkY291bnQgPiAxICkKKyAgICB7CisgICAgICAgIHByaW50ICJFIGN2cyBhZGQ6IHVzZSBgY3ZzIGNvbW1pdCcgdG8gYWRkIHRoZXNlIGZpbGVzIHBlcm1hbmVudGx5XG4iOworICAgIH0KKworICAgIHByaW50ICJva1xuIjsKK30KKworIyByZW1vdmUgXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiB5ZXMuIFJlbW92ZSBhIGZpbGUuIFRoaXMgdXNlcyBhbnkgcHJldmlvdXMgQXJndW1lbnQsCisjICAgICBEaXJlY3RvcnksIEVudHJ5LCBvciBNb2RpZmllZCByZXF1ZXN0cywgaWYgdGhleSBoYXZlIGJlZW4gc2VudC4gVGhlIGxhc3QKKyMgICAgIERpcmVjdG9yeSBzZW50IHNwZWNpZmllcyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYXQgdGhlIHRpbWUgb2YgdGhlCisjICAgICBvcGVyYXRpb24uIE5vdGUgdGhhdCB0aGlzIHJlcXVlc3QgZG9lcyBub3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgdG8gdGhlCisjICAgICByZXBvc2l0b3J5OyB0aGUgb25seSBlZmZlY3Qgb2YgYSBzdWNjZXNzZnVsIHJlbW92ZSByZXF1ZXN0IGlzIHRvIHN1cHBseQorIyAgICAgdGhlIGNsaWVudCB3aXRoIGEgbmV3IGVudHJpZXMgbGluZSBjb250YWluaW5nIGAtJyB0byBpbmRpY2F0ZSBhIHJlbW92ZWQKKyMgICAgIGZpbGUuIEluIGZhY3QsIHRoZSBjbGllbnQgcHJvYmFibHkgY291bGQgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiB3aXRob3V0CisjICAgICBjb250YWN0aW5nIHRoZSBzZXJ2ZXIsIGFsdGhvdWdoIHVzaW5nIHJlbW92ZSBtYXkgY2F1c2UgdGhlIHNlcnZlciB0bworIyAgICAgcGVyZm9ybSBhIGZldyBtb3JlIGNoZWNrcy4gVGhlIGNsaWVudCBzZW5kcyBhIHN1YnNlcXVlbnQgY2kgcmVxdWVzdCB0bworIyAgICAgYWN0dWFsbHkgcmVjb3JkIHRoZSByZW1vdmFsIGluIHRoZSByZXBvc2l0b3J5Lgorc3ViIHJlcV9yZW1vdmUKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJyZW1vdmUiKTsKKworICAgICMgR3JhYiBhIGhhbmRsZSB0byB0aGUgU1FMaXRlIGRiIGFuZCBkbyBhbnkgbmVjZXNzYXJ5IHVwZGF0ZXMKKyAgICBteSAkdXBkYXRlciA9IEdJVENWUzo6dXBkYXRlci0+bmV3KCRzdGF0ZS0+e0NWU1JPT1R9LCAkc3RhdGUtPnttb2R1bGV9LCAkbG9nKTsKKyAgICAkdXBkYXRlci0+dXBkYXRlKCk7CisKKyAgICAjJGxvZy0+ZGVidWcoImFkZCBzdGF0ZSA6ICIgLiBEdW1wZXIoJHN0YXRlKSk7CisKKyAgICBteSAkcm1jb3VudCA9IDA7CisKKyAgICBmb3JlYWNoIG15ICRmaWxlbmFtZSAoIEB7JHN0YXRlLT57YXJnc319ICkKKyAgICB7CisgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRmaWxlbmFtZSk7CisKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXt1bmNoYW5nZWR9ICkgb3IgZGVmaW5lZCAoICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfZmlsZW5hbWV9ICkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCAiRSBjdnMgcmVtb3ZlOiBmaWxlIGAkZmlsZW5hbWUnIHN0aWxsIGluIHdvcmtpbmcgZGlyZWN0b3J5XG4iOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgICMgb25seSBmcm9tIGVudHJpZXMKKyAgICAgICAgbXkgJHN0aWNreUluZm8gPSByZXNvbHZlU3RpY2t5SW5mbygkZmlsZW5hbWUpOworCisgICAgICAgIG15ICRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCRzdGlja3lJbmZvKTsKKyAgICAgICAgbXkgJHdyZXYgPSByZXZwYXJzZSgkZmlsZW5hbWUpOworCisgICAgICAgIHVubGVzcyAoIGRlZmluZWQgKCAkd3JldiApICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIHJlbW92ZTogbm90aGluZyBrbm93biBhYm91dCBgJGZpbGVuYW1lJ1xuIjsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIGRlZmluZWQoJHdyZXYpIGFuZCAoJHdyZXY9fi9eLS8pICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIHJlbW92ZTogZmlsZSBgJGZpbGVuYW1lJyBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgcmVtb3ZhbFxuIjsKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICB1bmxlc3MgKCAkd3JldiBlcSAkbWV0YS0+e3JldmlzaW9ufSApCisgICAgICAgIHsKKyAgICAgICAgICAgICMgVE9ETyA6IG5vdCBzdXJlIGlmIHRoZSBmb3JtYXQgb2YgdGhpcyBtZXNzYWdlIGlzIHF1aXRlIGNvcnJlY3QuCisgICAgICAgICAgICBwcmludCAiRSBjdnMgcmVtb3ZlOiBVcCB0byBkYXRlIGNoZWNrIGZhaWxlZCBmb3IgYCRmaWxlbmFtZSdcbiI7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKworICAgICAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lLCAxKTsKKworICAgICAgICBwcmludCAiRSBjdnMgcmVtb3ZlOiBzY2hlZHVsaW5nIGAkZmlsZW5hbWUnIGZvciByZW1vdmFsXG4iOworCisgICAgICAgIHByaW50ICJDaGVja2VkLWluICRkaXJwYXJ0XG4iOworICAgICAgICBwcmludCAiJGZpbGVuYW1lXG4iOworICAgICAgICBteSAka29wdHMgPSBrb3B0c19mcm9tX3BhdGgoJGZpbGVuYW1lLCJzaGExIiwkbWV0YS0+e2ZpbGVoYXNofSk7CisgICAgICAgIHByaW50ICIvJGZpbGVwYXJ0Ly0kd3Jldi8vJGtvcHRzLyIgLiBnZXRTdGlja3lUYWdPckRhdGUoJHN0aWNreUluZm8pIC4gIlxuIjsKKworICAgICAgICAkcm1jb3VudCsrOworICAgIH0KKworICAgIGlmICggJHJtY291bnQgPT0gMSApCisgICAgeworICAgICAgICBwcmludCAiRSBjdnMgcmVtb3ZlOiB1c2UgYGN2cyBjb21taXQnIHRvIHJlbW92ZSB0aGlzIGZpbGUgcGVybWFuZW50bHlcbiI7CisgICAgfQorICAgIGVsc2lmICggJHJtY291bnQgPiAxICkKKyAgICB7CisgICAgICAgIHByaW50ICJFIGN2cyByZW1vdmU6IHVzZSBgY3ZzIGNvbW1pdCcgdG8gcmVtb3ZlIHRoZXNlIGZpbGVzIHBlcm1hbmVudGx5XG4iOworICAgIH0KKworICAgIHByaW50ICJva1xuIjsKK30KKworIyBNb2RpZmllZCBmaWxlbmFtZSBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBBZGRpdGlvbmFsIGRhdGE6IG1vZGUsIFxuLCBmaWxlIHRyYW5zbWlzc2lvbi4gU2VuZAorIyAgICAgdGhlIHNlcnZlciBhIGNvcHkgb2Ygb25lIGxvY2FsbHkgbW9kaWZpZWQgZmlsZS4gZmlsZW5hbWUgaXMgYSBmaWxlIHdpdGhpbgorIyAgICAgdGhlIG1vc3QgcmVjZW50IGRpcmVjdG9yeSBzZW50IHdpdGggRGlyZWN0b3J5OyBpdCBtdXN0IG5vdCBjb250YWluIGAvJy4KKyMgICAgIElmIHRoZSB1c2VyIGlzIG9wZXJhdGluZyBvbiBvbmx5IHNvbWUgZmlsZXMgaW4gYSBkaXJlY3RvcnksIG9ubHkgdGhvc2UKKyMgICAgIGZpbGVzIG5lZWQgdG8gYmUgaW5jbHVkZWQuIFRoaXMgY2FuIGFsc28gYmUgc2VudCB3aXRob3V0IEVudHJ5LCBpZiB0aGVyZQorIyAgICAgaXMgbm8gZW50cnkgZm9yIHRoZSBmaWxlLgorc3ViIHJlcV9Nb2RpZmllZAoreworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgbXkgJG1vZGUgPSA8U1RESU4+OworICAgIGRlZmluZWQgJG1vZGUKKyAgICAgICAgb3IgKHByaW50ICJFIGVuZCBvZiBmaWxlIHJlYWRpbmcgbW9kZSBmb3IgJGRhdGFcbiIpLCByZXR1cm47CisgICAgY2hvbXAgJG1vZGU7CisgICAgbXkgJHNpemUgPSA8U1RESU4+OworICAgIGRlZmluZWQgJHNpemUKKyAgICAgICAgb3IgKHByaW50ICJFIGVuZCBvZiBmaWxlIHJlYWRpbmcgc2l6ZSBvZiAkZGF0YVxuIiksIHJldHVybjsKKyAgICBjaG9tcCAkc2l6ZTsKKworICAgICMgR3JhYiBjb25maWcgaW5mb3JtYXRpb24KKyAgICBteSAkYmxvY2tzaXplID0gODE5MjsKKyAgICBteSAkYnl0ZXNsZWZ0ID0gJHNpemU7CisgICAgbXkgJHRtcDsKKworICAgICMgR2V0IGEgZmlsZWhhbmRsZS9uYW1lIHRvIHdyaXRlIGl0IHRvCisgICAgbXkgKCAkZmgsICRmaWxlbmFtZSApID0gdGVtcGZpbGUoIERJUiA9PiAkVEVNUF9ESVIgKTsKKworICAgICMgTG9vcCBvdmVyIGZpbGUgZGF0YSB3cml0aW5nIG91dCB0byB0ZW1wb3JhcnkgZmlsZS4KKyAgICB3aGlsZSAoICRieXRlc2xlZnQgKQorICAgIHsKKyAgICAgICAgJGJsb2Nrc2l6ZSA9ICRieXRlc2xlZnQgaWYgKCAkYnl0ZXNsZWZ0IDwgJGJsb2Nrc2l6ZSApOworICAgICAgICByZWFkIFNURElOLCAkdG1wLCAkYmxvY2tzaXplOworICAgICAgICBwcmludCAkZmggJHRtcDsKKyAgICAgICAgJGJ5dGVzbGVmdCAtPSAkYmxvY2tzaXplOworICAgIH0KKworICAgIGNsb3NlICRmaAorICAgICAgICBvciAocHJpbnQgIkUgZmFpbGVkIHRvIHdyaXRlIHRlbXBvcmFyeSwgJGZpbGVuYW1lOiAkIVxuIiksIHJldHVybjsKKworICAgICMgRW5zdXJlIHdlIGhhdmUgc29tZXRoaW5nIHNlbnNpYmxlIGZvciB0aGUgZmlsZSBtb2RlCisgICAgaWYgKCAkbW9kZSA9fiAvdT0oXHcrKS8gKQorICAgIHsKKyAgICAgICAgJG1vZGUgPSAkMTsKKyAgICB9IGVsc2UgeworICAgICAgICAkbW9kZSA9ICJydyI7CisgICAgfQorCisgICAgIyBTYXZlIHRoZSBmaWxlIGRhdGEgaW4gJHN0YXRlCisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfZmlsZW5hbWV9ID0gJGZpbGVuYW1lOworICAgICRzdGF0ZS0+e2VudHJpZXN9eyRzdGF0ZS0+e2RpcmVjdG9yeX0uJGRhdGF9e21vZGlmaWVkX21vZGV9ID0gJG1vZGU7CisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfaGFzaH0gPSBgZ2l0IGhhc2gtb2JqZWN0ICRmaWxlbmFtZWA7CisgICAgJHN0YXRlLT57ZW50cmllc317JHN0YXRlLT57ZGlyZWN0b3J5fS4kZGF0YX17bW9kaWZpZWRfaGFzaH0gPX4gcy9ccy4qJC8vczsKKworICAgICMkbG9nLT5kZWJ1ZygicmVxX01vZGlmaWVkIDogZmlsZT0kZGF0YSBtb2RlPSRtb2RlIHNpemU9JHNpemUiKTsKK30KKworIyBVbmNoYW5nZWQgZmlsZW5hbWUgXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiBuby4gVGVsbCB0aGUgc2VydmVyIHRoYXQgZmlsZW5hbWUgaGFzIG5vdCBiZWVuCisjICAgICBtb2RpZmllZCBpbiB0aGUgY2hlY2tlZCBvdXQgZGlyZWN0b3J5LiBUaGUgZmlsZW5hbWUgaXMgYSBmaWxlIHdpdGhpbiB0aGUKKyMgICAgIG1vc3QgcmVjZW50IGRpcmVjdG9yeSBzZW50IHdpdGggRGlyZWN0b3J5OyBpdCBtdXN0IG5vdCBjb250YWluIGAvJy4KK3N1YiByZXFfVW5jaGFuZ2VkCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICAkc3RhdGUtPntlbnRyaWVzfXskc3RhdGUtPntkaXJlY3Rvcnl9LiRkYXRhfXt1bmNoYW5nZWR9ID0gMTsKKworICAgICMkbG9nLT5kZWJ1ZygicmVxX1VuY2hhbmdlZCA6ICRkYXRhIik7Cit9CisKKyMgQXJndW1lbnQgdGV4dCBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBTYXZlIGFyZ3VtZW50IGZvciB1c2UgaW4gYSBzdWJzZXF1ZW50IGNvbW1hbmQuCisjICAgICBBcmd1bWVudHMgYWNjdW11bGF0ZSB1bnRpbCBhbiBhcmd1bWVudC11c2luZyBjb21tYW5kIGlzIGdpdmVuLCBhdCB3aGljaAorIyAgICAgcG9pbnQgdGhleSBhcmUgZm9yZ290dGVuLgorIyBBcmd1bWVudHggdGV4dCBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IG5vLiBBcHBlbmQgXG4gZm9sbG93ZWQgYnkgdGV4dCB0byB0aGUgY3VycmVudCBhcmd1bWVudAorIyAgICAgYmVpbmcgc2F2ZWQuCitzdWIgcmVxX0FyZ3VtZW50Cit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICAjIEFyZ3VtZW50eCBtZWFuczogYXBwZW5kIHRvIGxhc3QgQXJndW1lbnQgKHdpdGggYSBuZXdsaW5lIGluIGZyb250KQorCisgICAgJGxvZy0+ZGVidWcoIiRjbWQgOiAkZGF0YSIpOworCisgICAgaWYgKCAkY21kIGVxICdBcmd1bWVudHgnKSB7CisgICAgICAgICR7JHN0YXRlLT57YXJndW1lbnRzfX1bJCN7JHN0YXRlLT57YXJndW1lbnRzfX1dIC49ICJcbiIgLiAkZGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBwdXNoIEB7JHN0YXRlLT57YXJndW1lbnRzfX0sICRkYXRhOworICAgIH0KK30KKworIyBleHBhbmQtbW9kdWxlcyBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IHllcy4gRXhwYW5kIHRoZSBtb2R1bGVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgaW4gdGhlCisjICAgICBhcmd1bWVudHMuIFJldHVybnMgdGhlIGRhdGEgaW4gTW9kdWxlLWV4cGFuc2lvbiByZXNwb25zZXMuIE5vdGUgdGhhdCB0aGUKKyMgICAgIHNlcnZlciBjYW4gYXNzdW1lIHRoYXQgdGhpcyBpcyBjaGVja291dCBvciBleHBvcnQsIG5vdCBydGFnIG9yIHJkaWZmOyB0aGUKKyMgICAgIGxhdHRlciBkbyBub3QgYWNjZXNzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgdGh1cyBoYXZlIG5vIG5lZWQgdG8KKyMgICAgIGV4cGFuZCBtb2R1bGVzIG9uIHRoZSBjbGllbnQgc2lkZS4gRXhwYW5kIG1heSBub3QgYmUgdGhlIGJlc3Qgd29yZCBmb3IKKyMgICAgIHdoYXQgdGhpcyByZXF1ZXN0IGRvZXMuIEl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IHRlbGwgeW91IGFsbCB0aGUgZmlsZXMKKyMgICAgIGNvbnRhaW5lZCBpbiBhIG1vZHVsZSwgZm9yIGV4YW1wbGUuIEJhc2ljYWxseSBpdCBpcyBhIHdheSBvZiB0ZWxsaW5nIHlvdQorIyAgICAgd2hpY2ggd29ya2luZyBkaXJlY3RvcmllcyB0aGUgc2VydmVyIG5lZWRzIHRvIGtub3cgYWJvdXQgaW4gb3JkZXIgdG8KKyMgICAgIGhhbmRsZSBhIGNoZWNrb3V0IG9mIHRoZSBzcGVjaWZpZWQgbW9kdWxlcy4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgdGhhdCB0aGUKKyMgICAgIHNlcnZlciBoYXMgYSBtb2R1bGUgZGVmaW5lZCBieQorIyAgIGFsaWFzbW9kdWxlIC1hIDFkaXIKKyMgICAgIFRoYXQgaXMsIG9uZSBjYW4gY2hlY2sgb3V0IGFsaWFzbW9kdWxlIGFuZCBpdCB3aWxsIHRha2UgMWRpciBpbiB0aGUKKyMgICAgIHJlcG9zaXRvcnkgYW5kIGNoZWNrIGl0IG91dCB0byAxZGlyIGluIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gTm93IHN1cHBvc2UKKyMgICAgIHRoZSBjbGllbnQgYWxyZWFkeSBoYXMgdGhpcyBtb2R1bGUgY2hlY2tlZCBvdXQgYW5kIGlzIHBsYW5uaW5nIG9uIHVzaW5nCisjICAgICB0aGUgY28gcmVxdWVzdCB0byB1cGRhdGUgaXQuIFdpdGhvdXQgdXNpbmcgZXhwYW5kLW1vZHVsZXMsIHRoZSBjbGllbnQKKyMgICAgIHdvdWxkIGhhdmUgdHdvIGJhZCBjaG9pY2VzOiBpdCBjb3VsZCBlaXRoZXIgc2VuZCBpbmZvcm1hdGlvbiBhYm91dCBhbGwKKyMgICAgIHdvcmtpbmcgZGlyZWN0b3JpZXMgdW5kZXIgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCB3aGljaCBjb3VsZCBiZQorIyAgICAgdW5uZWNlc3NhcmlseSBzbG93LCBvciBpdCBjb3VsZCBiZSBpZ25vcmFudCBvZiB0aGUgZmFjdCB0aGF0IGFsaWFzbW9kdWxlCisjICAgICBzdGFuZHMgZm9yIDFkaXIsIGFuZCBuZWdsZWN0IHRvIHNlbmQgaW5mb3JtYXRpb24gZm9yIDFkaXIsIHdoaWNoIHdvdWxkCisjICAgICBsZWFkIHRvIGluY29ycmVjdCBvcGVyYXRpb24uIFdpdGggZXhwYW5kLW1vZHVsZXMsIHRoZSBjbGllbnQgd291bGQgZmlyc3QKKyMgICAgIGFzayBmb3IgdGhlIG1vZHVsZSB0byBiZSBleHBhbmRlZDoKK3N1YiByZXFfZXhwYW5kbW9kdWxlcworeworICAgIG15ICggJGNtZCwgJGRhdGEgKSA9IEBfOworCisgICAgYXJnc3BsaXQoKTsKKworICAgICRsb2ctPmRlYnVnKCJyZXFfZXhwYW5kbW9kdWxlcyA6ICIgLiAoIGRlZmluZWQoJGRhdGEpID8gJGRhdGEgOiAiW05VTExdIiApICk7CisKKyAgICB1bmxlc3MgKCByZWYgJHN0YXRlLT57YXJndW1lbnRzfSBlcSAiQVJSQVkiICkKKyAgICB7CisgICAgICAgIHByaW50ICJva1xuIjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJG1vZHVsZSAoIEB7JHN0YXRlLT57YXJndW1lbnRzfX0gKQorICAgIHsKKyAgICAgICAgJGxvZy0+ZGVidWcoIlNFTkQgOiBNb2R1bGUtZXhwYW5zaW9uICRtb2R1bGUiKTsKKyAgICAgICAgcHJpbnQgIk1vZHVsZS1leHBhbnNpb24gJG1vZHVsZVxuIjsKKyAgICB9CisKKyAgICBwcmludCAib2tcbiI7CisgICAgc3RhdGVjbGVhbnVwKCk7Cit9CisKKyMgY28gXG4KKyMgICAgIFJlc3BvbnNlIGV4cGVjdGVkOiB5ZXMuIEdldCBmaWxlcyBmcm9tIHRoZSByZXBvc2l0b3J5LiBUaGlzIHVzZXMgYW55CisjICAgICBwcmV2aW91cyBBcmd1bWVudCwgRGlyZWN0b3J5LCBFbnRyeSwgb3IgTW9kaWZpZWQgcmVxdWVzdHMsIGlmIHRoZXkgaGF2ZQorIyAgICAgYmVlbiBzZW50LiBBcmd1bWVudHMgdG8gdGhpcyBjb21tYW5kIGFyZSBtb2R1bGUgbmFtZXM7IHRoZSBjbGllbnQgY2Fubm90CisjICAgICBrbm93IHdoYXQgZGlyZWN0b3JpZXMgdGhleSBjb3JyZXNwb25kIHRvIGV4Y2VwdCBieSAoMSkganVzdCBzZW5kaW5nIHRoZQorIyAgICAgY28gcmVxdWVzdCwgYW5kIHRoZW4gc2VlaW5nIHdoYXQgZGlyZWN0b3J5IG5hbWVzIHRoZSBzZXJ2ZXIgc2VuZHMgYmFjayBpbgorIyAgICAgaXRzIHJlc3BvbnNlcywgYW5kICgyKSB0aGUgZXhwYW5kLW1vZHVsZXMgcmVxdWVzdC4KK3N1YiByZXFfY28KK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJjbyIpOworCisgICAgIyBQcm92aWRlIGxpc3Qgb2YgbW9kdWxlcywgaWYgLWMgd2FzIHVzZWQuCisgICAgaWYgKGV4aXN0cyAkc3RhdGUtPntvcHR9e2N9KSB7CisgICAgICAgIG15ICRzaG93cmVmID0gYGdpdCBzaG93LXJlZiAtLWhlYWRzYDsKKyAgICAgICAgZm9yIG15ICRsaW5lIChzcGxpdCAnXG4nLCAkc2hvd3JlZikgeworICAgICAgICAgICAgaWYgKCAkbGluZSA9fiBtJSByZWZzL2hlYWRzLyguKikkJSApIHsKKyAgICAgICAgICAgICAgICBwcmludCAiTSAkMVx0JDFcbiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIm9rXG4iOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBteSAkc3RpY2t5SW5mbyA9IHsgJ3RhZycgPT4gJHN0YXRlLT57b3B0fXtyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGUnID0+ICRzdGF0ZS0+e29wdH17RH0gfTsKKworICAgIG15ICRtb2R1bGUgPSAkc3RhdGUtPnthcmdzfVswXTsKKyAgICAkc3RhdGUtPnttb2R1bGV9ID0gJG1vZHVsZTsKKyAgICBteSAkY2hlY2tvdXRfcGF0aCA9ICRtb2R1bGU7CisKKyAgICAjIHVzZSB0aGUgdXNlciBzcGVjaWZpZWQgZGlyZWN0b3J5IGlmIHdlJ3JlIGdpdmVuIGl0CisgICAgJGNoZWNrb3V0X3BhdGggPSAkc3RhdGUtPntvcHR9e2R9IGlmICggZXhpc3RzICggJHN0YXRlLT57b3B0fXtkfSApICk7CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX2NvIDogIiAuICggZGVmaW5lZCgkZGF0YSkgPyAkZGF0YSA6ICJbTlVMTF0iICkgKTsKKworICAgICRsb2ctPmluZm8oIkNoZWNraW5nIG91dCBtb2R1bGUgJyRtb2R1bGUnICgkc3RhdGUtPntDVlNST09UfSkgdG8gJyRjaGVja291dF9wYXRoJyIpOworCisgICAgJEVOVntHSVRfRElSfSA9ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8iOworCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRtb2R1bGUsICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgIG15ICRoZWFkSGFzaDsKKyAgICBpZiggZGVmaW5lZCgkc3RpY2t5SW5mbykgJiYgZGVmaW5lZCgkc3RpY2t5SW5mby0+e3RhZ30pICkKKyAgICB7CisgICAgICAgICRoZWFkSGFzaCA9ICR1cGRhdGVyLT5sb29rdXBDb21taXRSZWYoJHN0aWNreUluZm8tPnt0YWd9KTsKKyAgICAgICAgaWYoICFkZWZpbmVkKCRoZWFkSGFzaCkgKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCAiZXJyb3IgMSBubyBzdWNoIHRhZyBgJHN0aWNreUluZm8tPnt0YWd9J1xuIjsKKyAgICAgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgfQorICAgIH0KKworICAgICRjaGVja291dF9wYXRoID1+IHN8LyR8fDsgIyBnZXQgcmlkIG9mIHRyYWlsaW5nIHNsYXNoZXMKKworICAgIG15ICVzZWVuZGlycyA9ICgpOworICAgIG15ICRsYXN0ZGlyID0nJzsKKworICAgIHByZXBEaXJGb3JPdXRwdXQoCisgICAgICAgICAgICAiLiIsCisgICAgICAgICAgICAkc3RhdGUtPntDVlNST09UfSAuICIvJG1vZHVsZSIsCisgICAgICAgICAgICAkY2hlY2tvdXRfcGF0aCwKKyAgICAgICAgICAgIFwlc2VlbmRpcnMsCisgICAgICAgICAgICAnY2hlY2tvdXQnLAorICAgICAgICAgICAgJHN0YXRlLT57ZGlyQXJnc30gKTsKKworICAgIGZvcmVhY2ggbXkgJGdpdCAoIEB7JHVwZGF0ZXItPmdldEFueUhlYWQoJGhlYWRIYXNoKX0gKQorICAgIHsKKyAgICAgICAgIyBEb24ndCB3YW50IHRvIGNoZWNrIG91dCBkZWxldGVkIGZpbGVzCisgICAgICAgIG5leHQgaWYgKCAkZ2l0LT57ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApOworCisgICAgICAgIG15ICRmdWxsTmFtZSA9ICRnaXQtPntuYW1lfTsKKyAgICAgICAgKCAkZ2l0LT57bmFtZX0sICRnaXQtPntkaXJ9ICkgPSBmaWxlbmFtZXNwbGl0KCRnaXQtPntuYW1lfSk7CisKKyAgICAgICAgdW5sZXNzIChleGlzdHMoJHNlZW5kaXJzeyRnaXQtPntkaXJ9fSkpIHsKKyAgICAgICAgICAgIHByZXBEaXJGb3JPdXRwdXQoJGdpdC0+e2Rpcn0sICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kbW9kdWxlLyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjaGVja291dF9wYXRoLCBcJXNlZW5kaXJzLCAnY2hlY2tvdXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdGUtPntkaXJBcmdzfSApOworICAgICAgICAgICAgJGxhc3RkaXIgPSAkZ2l0LT57ZGlyfTsKKyAgICAgICAgICAgICRzZWVuZGlyc3skZ2l0LT57ZGlyfX0gPSAxOworICAgICAgICB9CisKKyAgICAgICAgIyBtb2RpZmljYXRpb24gdGltZSBvZiB0aGlzIGZpbGUKKyAgICAgICAgcHJpbnQgIk1vZC10aW1lICRnaXQtPnttb2RpZmllZH1cbiI7CisKKyAgICAgICAgIyBwcmludCBzb21lIGluZm9ybWF0aW9uIHRvIHRoZSBjbGllbnQKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJGdpdC0+e2Rpcn0gKSBhbmQgJGdpdC0+e2Rpcn0gbmUgIi4vIiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIFUgJGNoZWNrb3V0X3BhdGgvJGdpdC0+e2Rpcn0kZ2l0LT57bmFtZX1cbiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludCAiTSBVICRjaGVja291dF9wYXRoLyRnaXQtPntuYW1lfVxuIjsKKyAgICAgICAgfQorCisgICAgICAgIyBpbnN0cnVjdCBjbGllbnQgd2UncmUgc2VuZGluZyBhIGZpbGUgdG8gcHV0IGluIHRoaXMgcGF0aAorICAgICAgIHByaW50ICJDcmVhdGVkICRjaGVja291dF9wYXRoLyIgLiAoIGRlZmluZWQgKCAkZ2l0LT57ZGlyfSApIGFuZCAkZ2l0LT57ZGlyfSBuZSAiLi8iID8gJGdpdC0+e2Rpcn0gLiAiLyIgOiAiIiApIC4gIlxuIjsKKworICAgICAgIHByaW50ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kbW9kdWxlLyIgLiAoIGRlZmluZWQgKCAkZ2l0LT57ZGlyfSApIGFuZCAkZ2l0LT57ZGlyfSBuZSAiLi8iID8gJGdpdC0+e2Rpcn0gLiAiLyIgOiAiIiApIC4gIiRnaXQtPntuYW1lfVxuIjsKKworICAgICAgICAjIHRoaXMgaXMgYW4gImVudHJpZXMiIGxpbmUKKyAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCRmdWxsTmFtZSwic2hhMSIsJGdpdC0+e2ZpbGVoYXNofSk7CisgICAgICAgIHByaW50ICIvJGdpdC0+e25hbWV9LyRnaXQtPntyZXZpc2lvbn0vLyRrb3B0cy8iIC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGdldFN0aWNreVRhZ09yRGF0ZSgkc3RpY2t5SW5mbykgLiAiXG4iOworICAgICAgICAjIHBlcm1pc3Npb25zCisgICAgICAgIHByaW50ICJ1PSRnaXQtPnttb2RlfSxnPSRnaXQtPnttb2RlfSxvPSRnaXQtPnttb2RlfVxuIjsKKworICAgICAgICAjIHRyYW5zbWl0IGZpbGUKKyAgICAgICAgdHJhbnNtaXRmaWxlKCRnaXQtPntmaWxlaGFzaH0pOworICAgIH0KKworICAgIHByaW50ICJva1xuIjsKKworICAgIHN0YXRlY2xlYW51cCgpOworfQorCisjIHVzZWQgYnkgcmVxX2NvIGFuZCByZXFfdXBkYXRlIHRvIHNldCB1cCBkaXJlY3RvcmllcyBmb3IgZmlsZXMKKyMgcmVjdXJzaXZlbHkgaGFuZGxlcyBwYXJlbnRzCitzdWIgcHJlcERpckZvck91dHB1dAoreworICAgIG15ICgkZGlyLCAkcmVwb2RpciwgJHJlbW90ZWRpciwgJHNlZW5kaXJzLCAkcmVxdWVzdCwgJGRpckFyZ3MpID0gQF87CisKKyAgICBteSAkcGFyZW50ID0gZGlybmFtZSgkZGlyKTsKKyAgICAkZGlyICAgICAgID1+IHN8LyskfHw7CisgICAgJHJlcG9kaXIgICA9fiBzfC8rJHx8OworICAgICRyZW1vdGVkaXIgPX4gc3wvKyR8fDsKKyAgICAkcGFyZW50ICAgID1+IHN8LyskfHw7CisKKyAgICBpZiAoJHBhcmVudCBlcSAnLicgfHwgJHBhcmVudCBlcSAnLi8nKQorICAgIHsKKyAgICAgICAgJHBhcmVudCA9ICcnOworICAgIH0KKyAgICAjIHJlY3Vyc2UgdG8gYW5ub3VuY2UgdW5zZWVuIHBhcmVudHMgZmlyc3QKKyAgICBpZiggbGVuZ3RoKCRwYXJlbnQpICYmCisgICAgICAgICFleGlzdHMoJHNlZW5kaXJzLT57JHBhcmVudH0pICYmCisgICAgICAgICggJHJlcXVlc3QgZXEgImNoZWNrb3V0IiB8fAorICAgICAgICAgIGV4aXN0cygkZGlyQXJncy0+eyRwYXJlbnR9KSApICkKKyAgICB7CisgICAgICAgIHByZXBEaXJGb3JPdXRwdXQoJHBhcmVudCwgJHJlcG9kaXIsICRyZW1vdGVkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJHNlZW5kaXJzLCAkcmVxdWVzdCwgJGRpckFyZ3MpOworICAgIH0KKyAgICAjIEFubm91bmNlIHRoYXQgd2UgYXJlIGdvaW5nIHRvIG1vZGlmeSBhdCB0aGUgcGFyZW50IGxldmVsCisgICAgaWYgKCRkaXIgZXEgJy4nIHx8ICRkaXIgZXEgJy4vJykKKyAgICB7CisgICAgICAgICRkaXIgPSAnJzsKKyAgICB9CisgICAgaWYoZXhpc3RzKCRzZWVuZGlycy0+eyRkaXJ9KSkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgJGxvZy0+ZGVidWcoImFubm91bmNlZGlyICRkaXIsICRyZXBvZGlyLCAkcmVtb3RlZGlyIiApOworICAgIG15KCR0aGlzUmVtb3RlRGlyLCR0aGlzUmVwb0Rpcik7CisgICAgaWYgKCRkaXIgbmUgIiIpCisgICAgeworICAgICAgICAkdGhpc1JlcG9EaXI9IiRyZXBvZGlyLyRkaXIiOworICAgICAgICBpZigkcmVtb3RlZGlyIGVxICIuIikKKyAgICAgICAgeworICAgICAgICAgICAgJHRoaXNSZW1vdGVEaXI9JGRpcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICR0aGlzUmVtb3RlRGlyPSIkcmVtb3RlZGlyLyRkaXIiOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICR0aGlzUmVwb0Rpcj0kcmVwb2RpcjsKKyAgICAgICAgJHRoaXNSZW1vdGVEaXI9JHJlbW90ZWRpcjsKKyAgICB9CisgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LVF9IHx8ICRzdGF0ZS0+e2dsb2JhbG9wdGlvbnN9ey1xfSApCisgICAgeworICAgICAgICBwcmludCAiRSBjdnMgJHJlcXVlc3Q6IFVwZGF0aW5nICR0aGlzUmVtb3RlRGlyXG4iOworICAgIH0KKworICAgIG15ICgkb3B0X3IpPSRzdGF0ZS0+e29wdH17cn07CisgICAgbXkgJHN0aWNreUluZm87CisgICAgaWYoZXhpc3RzKCRzdGF0ZS0+e29wdH17QX0pKQorICAgIHsKKyAgICAgICAgIyAkc3RpY2t5SW5mbz11bmRlZjsKKyAgICB9CisgICAgZWxzaWYoIGRlZmluZWQoJG9wdF9yKSAmJiAkb3B0X3IgbmUgIiIgKQorICAgICAgICAgICAjIHx8ICggZGVmaW5lZCgkc3RhdGUtPntvcHR9e0R9KSAmJiAkc3RhdGUtPntvcHR9e0R9IG5lICIiICkgIyBUT0RPCisgICAgeworICAgICAgICAkc3RpY2t5SW5mbz17ICd0YWcnID0+IChkZWZpbmVkKCRvcHRfcik/JG9wdF9yOnVuZGVmKSB9OworCisgICAgICAgICMgVE9ETzogQ29udmVydCAtRCB2YWx1ZSBpbnRvIHRoZSBmb3JtIDIwMTEuMDQuMTAuMDQuNDYuNTcsCisgICAgICAgICMgICBzaW1pbGFyIHRvIGFuIGVudHJ5IGxpbmUncyBzdGlja3kgZGF0ZSwgd2l0aG91dCB0aGUgRCBwcmVmaXguCisgICAgICAgICMgICBJdCBzb21ldGltZXMgKGFsd2F5cz8pIGFycml2ZXMgYXMgc29tZXRoaW5nIG1vcmUgbGlrZQorICAgICAgICAjICAgJzEwIEFwciAyMDExIDA0OjQ2OjU3IC0wMDAwJy4uLgorICAgICAgICAjICRzdGlja3lJbmZvPXsgJ2RhdGUnID0+IChkZWZpbmVkKCRzdGlja3lEYXRlKT8kc3RpY2t5RGF0ZTp1bmRlZikgfTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgJHN0aWNreUluZm89Z2V0RGlyU3RpY2t5SW5mbygkc3RhdGUtPntwcmVwZW5kZGlyfSAuICRkaXIpOworICAgIH0KKworICAgIG15ICRzdGlja3lSZXNwb25zZTsKKyAgICBpZihkZWZpbmVkKCRzdGlja3lJbmZvKSkKKyAgICB7CisgICAgICAgICRzdGlja3lSZXNwb25zZSA9ICJTZXQtc3RpY2t5ICR0aGlzUmVtb3RlRGlyL1xuIiAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICIkdGhpc1JlcG9EaXIvXG4iIC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U3RpY2t5VGFnT3JEYXRlKCRzdGlja3lJbmZvKSAuICJcbiI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICRzdGlja3lSZXNwb25zZSA9ICJDbGVhci1zdGlja3kgJHRoaXNSZW1vdGVEaXIvXG4iIC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiR0aGlzUmVwb0Rpci9cbiI7CisgICAgfQorCisgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkKKyAgICB7CisgICAgICAgIHByaW50ICRzdGlja3lSZXNwb25zZTsKKworICAgICAgICBwcmludCAiQ2xlYXItc3RhdGljLWRpcmVjdG9yeSAkdGhpc1JlbW90ZURpci9cbiI7CisgICAgICAgIHByaW50ICIkdGhpc1JlcG9EaXIvXG4iOworICAgICAgICBwcmludCAkc3RpY2t5UmVzcG9uc2U7ICMgeWVzLCB0d2ljZQorICAgICAgICBwcmludCAiVGVtcGxhdGUgJHRoaXNSZW1vdGVEaXIvXG4iOworICAgICAgICBwcmludCAiJHRoaXNSZXBvRGlyL1xuIjsKKyAgICAgICAgcHJpbnQgIjBcbiI7CisgICAgfQorCisgICAgJHNlZW5kaXJzLT57JGRpcn0gPSAxOworCisgICAgIyBGVVRVUkU6IFRoaXMgd291bGQgbW9yZSBhY2N1cmF0ZWx5IGVtdWxhdGUgQ1ZTIGJ5IHNlbmRpbmcKKyAgICAjICAgYW5vdGhlciBjb3B5IG9mIHN0aWNreSBhZnRlciBwcm9jZXNzaW5nIHRoZSBmaWxlcyBpbiB0aGF0CisgICAgIyAgIGRpcmVjdG9yeS4gIE9yIGludGVybWVkaWF0ZTogcGVyaGFwcyBzZW5kIGFsbCBzdGlja3kncyBmb3IKKyAgICAjICAgJHNlZW5kaXJzIGFmdGVyIGFmdGVyIHByb2Nlc3NpbmcgYWxsIGZpbGVzLgorfQorCisjIHVwZGF0ZSBcbgorIyAgICAgUmVzcG9uc2UgZXhwZWN0ZWQ6IHllcy4gQWN0dWFsbHkgZG8gYSBjdnMgdXBkYXRlIGNvbW1hbmQuIFRoaXMgdXNlcyBhbnkKKyMgICAgIHByZXZpb3VzIEFyZ3VtZW50LCBEaXJlY3RvcnksIEVudHJ5LCBvciBNb2RpZmllZCByZXF1ZXN0cywgaWYgdGhleSBoYXZlCisjICAgICBiZWVuIHNlbnQuIFRoZSBsYXN0IERpcmVjdG9yeSBzZW50IHNwZWNpZmllcyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYXQgdGhlCisjICAgICB0aW1lIG9mIHRoZSBvcGVyYXRpb24uIFRoZSAtSSBvcHRpb24gaXMgbm90IHVzZWQtLWZpbGVzIHdoaWNoIHRoZSBjbGllbnQKKyMgICAgIGNhbiBkZWNpZGUgd2hldGhlciB0byBpZ25vcmUgYXJlIG5vdCBtZW50aW9uZWQgYW5kIHRoZSBjbGllbnQgc2VuZHMgdGhlCisjICAgICBRdWVzdGlvbmFibGUgcmVxdWVzdCBmb3Igb3RoZXJzLgorc3ViIHJlcV91cGRhdGUKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgICRsb2ctPmRlYnVnKCJyZXFfdXBkYXRlIDogIiAuICggZGVmaW5lZCgkZGF0YSkgPyAkZGF0YSA6ICJbTlVMTF0iICkpOworCisgICAgYXJnc3BsaXQoInVwZGF0ZSIpOworCisgICAgIworICAgICMgSXQgbWF5IGp1c3QgYmUgYSBjbGllbnQgZXhwbG9yaW5nIHRoZSBhdmFpbGFibGUgaGVhZHMvbW9kdWxlcworICAgICMgaW4gdGhhdCBjYXNlLCBsaXN0IHRoZW0gYXMgdG9wIGxldmVsIGRpcmVjdG9yaWVzIGFuZCBsZWF2ZSBpdAorICAgICMgYXQgdGhhdC4gRWNsaXBzZSB1c2VzIHRoaXMgdGVjaG5pcXVlIHRvIG9mZmVyIHlvdSBhIGxpc3Qgb2YKKyAgICAjIHByb2plY3RzIChoZWFkcyBpbiB0aGlzIGNhc2UpIHRvIGNoZWNrb3V0LgorICAgICMKKyAgICBpZiAoJHN0YXRlLT57bW9kdWxlfSBlcSAnJykgeworICAgICAgICBteSAkc2hvd3JlZiA9IGBnaXQgc2hvdy1yZWYgLS1oZWFkc2A7CisgICAgICAgIHByaW50ICJFIGN2cyB1cGRhdGU6IFVwZGF0aW5nIC5cbiI7CisgICAgICAgIGZvciBteSAkbGluZSAoc3BsaXQgJ1xuJywgJHNob3dyZWYpIHsKKyAgICAgICAgICAgIGlmICggJGxpbmUgPX4gbSUgcmVmcy9oZWFkcy8oLiopJCUgKSB7CisgICAgICAgICAgICAgICAgcHJpbnQgIkUgY3ZzIHVwZGF0ZTogTmV3IGRpcmVjdG9yeSBgJDEnXG4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHByaW50ICJva1xuIjsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisKKyAgICAjIEdyYWIgYSBoYW5kbGUgdG8gdGhlIFNRTGl0ZSBkYiBhbmQgZG8gYW55IG5lY2Vzc2FyeSB1cGRhdGVzCisgICAgbXkgJHVwZGF0ZXIgPSBHSVRDVlM6OnVwZGF0ZXItPm5ldygkc3RhdGUtPntDVlNST09UfSwgJHN0YXRlLT57bW9kdWxlfSwgJGxvZyk7CisKKyAgICAkdXBkYXRlci0+dXBkYXRlKCk7CisKKyAgICBhcmdzZnJvbWRpcigkdXBkYXRlcik7CisKKyAgICAjJGxvZy0+ZGVidWcoInVwZGF0ZSBzdGF0ZSA6ICIgLiBEdW1wZXIoJHN0YXRlKSk7CisKKyAgICBteSgkcmVwb0Rpcik7CisgICAgJHJlcG9EaXI9JHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyRzdGF0ZS0+e21vZHVsZX0vJHN0YXRlLT57cHJlcGVuZGRpcn0iOworCisgICAgbXkgJXNlZW5kaXJzID0gKCk7CisKKyAgICAjIGZvcmVhY2ggZmlsZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSAuLi4KKyAgICBmb3JlYWNoIG15ICRhcmdzRmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICBteSAkZmlsZW5hbWU7CisgICAgICAgICRmaWxlbmFtZSA9IGZpbGVjbGVhbnVwKCRhcmdzRmlsZW5hbWUpOworCisgICAgICAgICRsb2ctPmRlYnVnKCJQcm9jZXNzaW5nIGZpbGUgJGZpbGVuYW1lIik7CisKKyAgICAgICAgIyBpZiB3ZSBoYXZlIGEgLUMgd2Ugc2hvdWxkIHByZXRlbmQgd2UgbmV2ZXIgc2F3IG1vZGlmaWVkIHN0dWZmCisgICAgICAgIGlmICggZXhpc3RzICggJHN0YXRlLT57b3B0fXtDfSApICkKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfaGFzaH07CisgICAgICAgICAgICBkZWxldGUgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX07CisgICAgICAgICAgICAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3VuY2hhbmdlZH0gPSAxOworICAgICAgICB9CisKKyAgICAgICAgbXkgJHN0aWNreUluZm8gPSByZXNvbHZlU3RpY2t5SW5mbygkZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57b3B0fXtyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdGUtPntvcHR9e0R9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0cygkc3RhdGUtPntvcHR9e0F9KSk7CisgICAgICAgIG15ICRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCAkc3RpY2t5SW5mbyk7CisKKyAgICAgICAgIyBJZiAtcCB3YXMgZ2l2ZW4sICJwcmludCIgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXF1ZXN0ZWQgcmV2aXNpb24uCisgICAgICAgIGlmICggZXhpc3RzICggJHN0YXRlLT57b3B0fXtwfSApICkgeworICAgICAgICAgICAgaWYgKCBkZWZpbmVkICggJG1ldGEtPntyZXZpc2lvbn0gKSApIHsKKyAgICAgICAgICAgICAgICAkbG9nLT5pbmZvKCJQcmludGluZyAnJGZpbGVuYW1lJyByZXZpc2lvbiAiIC4gJG1ldGEtPntyZXZpc2lvbn0pOworCisgICAgICAgICAgICAgICAgdHJhbnNtaXRmaWxlKCRtZXRhLT57ZmlsZWhhc2h9LCB7IHByaW50ID0+IDEgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICAjIERpcmVjdG9yaWVzOgorICAgICAgICBwcmVwRGlyRm9yT3V0cHV0KAorICAgICAgICAgICAgICAgIGRpcm5hbWUoJGFyZ3NGaWxlbmFtZSksCisgICAgICAgICAgICAgICAgJHJlcG9EaXIsCisgICAgICAgICAgICAgICAgIi4iLAorICAgICAgICAgICAgICAgIFwlc2VlbmRpcnMsCisgICAgICAgICAgICAgICAgInVwZGF0ZSIsCisgICAgICAgICAgICAgICAgJHN0YXRlLT57ZGlyQXJnc30gKTsKKworICAgICAgICBteSAkd3JldiA9IHJldnBhcnNlKCRmaWxlbmFtZSk7CisKKwlpZiAoICEgZGVmaW5lZCAkbWV0YSApCisJeworCSAgICAkbWV0YSA9IHsKKwkgICAgICAgIG5hbWUgPT4gJGZpbGVuYW1lLAorCSAgICAgICAgcmV2aXNpb24gPT4gJzAnLAorCSAgICAgICAgZmlsZWhhc2ggPT4gJ2FkZGVkJworCSAgICB9OworCSAgICBpZigkd3JldiBuZSAiMCIpCisJICAgIHsKKwkgICAgICAgICRtZXRhLT57ZmlsZWhhc2h9PSdkZWxldGVkJzsKKwkgICAgfQorCX0KKworICAgICAgICBteSAkb2xkbWV0YSA9ICRtZXRhOworCisgICAgICAgICMgSWYgdGhlIHdvcmtpbmcgY29weSBpcyBhbiBvbGQgcmV2aXNpb24sIGxldHMgZ2V0IHRoYXQgdmVyc2lvbiB0b28gZm9yIGNvbXBhcmlzb24uCisgICAgICAgIG15ICRvbGRXcmV2PSR3cmV2OworICAgICAgICBpZihkZWZpbmVkKCRvbGRXcmV2KSkKKyAgICAgICAgeworICAgICAgICAgICAgJG9sZFdyZXY9fnMvXi0vLzsKKyAgICAgICAgICAgIGlmKCRvbGRXcmV2IG5lICRtZXRhLT57cmV2aXNpb259KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICRvbGRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCAkb2xkV3Jldik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAjJGxvZy0+ZGVidWcoIlRhcmdldCByZXZpc2lvbiBpcyAkbWV0YS0+e3JldmlzaW9ufSwgY3VycmVudCB3b3JraW5nIHJldmlzaW9uIGlzICR3cmV2Iik7CisKKyAgICAgICAgIyBGaWxlcyBhcmUgdXAgdG8gZGF0ZSBpZiB0aGUgd29ya2luZyBjb3B5IGFuZCByZXBvIGNvcHkgaGF2ZSB0aGUgc2FtZSByZXZpc2lvbiwKKyAgICAgICAgIyBhbmQgdGhlIHdvcmtpbmcgY29weSBpcyB1bm1vZGlmaWVkIF9hbmRfIHRoZSB1c2VyIGhhc24ndCBzcGVjaWZpZWQgLUMKKyAgICAgICAgbmV4dCBpZiAoIGRlZmluZWQgKCAkd3JldiApCisgICAgICAgICAgICAgICAgICBhbmQgZGVmaW5lZCgkbWV0YS0+e3JldmlzaW9ufSkKKyAgICAgICAgICAgICAgICAgIGFuZCAkd3JldiBlcSAkbWV0YS0+e3JldmlzaW9ufQorICAgICAgICAgICAgICAgICAgYW5kICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17dW5jaGFuZ2VkfQorICAgICAgICAgICAgICAgICAgYW5kIG5vdCBleGlzdHMgKCAkc3RhdGUtPntvcHR9e0N9ICkgKTsKKworICAgICAgICAjIElmIHRoZSB3b3JraW5nIGNvcHkgYW5kIHJlcG8gY29weSBoYXZlIHRoZSBzYW1lIHJldmlzaW9uLAorICAgICAgICAjIGJ1dCB0aGUgd29ya2luZyBjb3B5IGlzIG1vZGlmaWVkLCB0ZWxsIHRoZSBjbGllbnQgaXQncyBtb2RpZmllZAorICAgICAgICBpZiAoIGRlZmluZWQgKCAkd3JldiApCisgICAgICAgICAgICAgYW5kIGRlZmluZWQoJG1ldGEtPntyZXZpc2lvbn0pCisgICAgICAgICAgICAgYW5kICR3cmV2IGVxICRtZXRhLT57cmV2aXNpb259CisgICAgICAgICAgICAgYW5kICR3cmV2IG5lICIwIgorICAgICAgICAgICAgIGFuZCBkZWZpbmVkKCRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfaGFzaH0pCisgICAgICAgICAgICAgYW5kIG5vdCBleGlzdHMgKCAkc3RhdGUtPntvcHR9e0N9ICkgKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT5pbmZvKCJUZWxsIHRoZSBjbGllbnQgdGhlIGZpbGUgaXMgbW9kaWZpZWQiKTsKKyAgICAgICAgICAgIHByaW50ICJNVCB0ZXh0IE0gXG4iOworICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgIHByaW50ICJNVCBuZXdsaW5lXG4iOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggJG1ldGEtPntmaWxlaGFzaH0gZXEgImRlbGV0ZWQiICYmICR3cmV2IG5lICIwIiApCisgICAgICAgIHsKKyAgICAgICAgICAgICMgVE9ETzogSWYgaXQgaGFzIGJlZW4gbW9kaWZpZWQgaW4gdGhlIHNhbmRib3gsIGVycm9yIG91dAorICAgICAgICAgICAgIyAgIHdpdGggdGhlIGFwcHJvcHJpYXRlIG1lc3NhZ2UsIHJhdGhlciB0aGFuIGRlbGV0aW5nIGEgbW9kaWZpZWQKKyAgICAgICAgICAgICMgICBmaWxlLgorCisgICAgICAgICAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lLDEpOworCisgICAgICAgICAgICAkbG9nLT5pbmZvKCJSZW1vdmluZyAnJGZpbGVuYW1lJyBmcm9tIHdvcmtpbmcgY29weSAobm8gbG9uZ2VyIGluIHRoZSByZXBvKSIpOworCisgICAgICAgICAgICBwcmludCAiRSBjdnMgdXBkYXRlOiBgJGZpbGVuYW1lJyBpcyBubyBsb25nZXIgaW4gdGhlIHJlcG9zaXRvcnlcbiI7CisgICAgICAgICAgICAjIERvbid0IHdhbnQgdG8gYWN0dWFsbHkgX0RPXyB0aGUgdXBkYXRlIGlmIC1uIHNwZWNpZmllZAorICAgICAgICAgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkgeworCQlwcmludCAiUmVtb3ZlZCAkZGlycGFydFxuIjsKKwkJcHJpbnQgIiRmaWxlcGFydFxuIjsKKwkgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2lmICggbm90IGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2hhc2h9ICkKKwkJb3IgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9oYXNofSBlcSAkb2xkbWV0YS0+e2ZpbGVoYXNofQorCQlvciAkbWV0YS0+e2ZpbGVoYXNofSBlcSAnYWRkZWQnICkKKyAgICAgICAgeworICAgICAgICAgICAgIyBub3JtYWwgdXBkYXRlLCBqdXN0IHNlbmQgdGhlIG5ldyByZXZpc2lvbiAoZWl0aGVyIFU9VXBkYXRlLAorICAgICAgICAgICAgIyBvciBBPUFkZCwgb3IgUj1SZW1vdmUpCisJICAgIGlmICggZGVmaW5lZCgkd3JldikgJiYgKCR3cmV2PX4vXi0vKSApCisJICAgIHsKKwkgICAgICAgICRsb2ctPmluZm8oIlRlbGwgdGhlIGNsaWVudCB0aGUgZmlsZSBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwiKTsKKwkJcHJpbnQgIk1UIHRleHQgUiBcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgICAgICBwcmludCAiTVQgbmV3bGluZVxuIjsKKwkJbmV4dDsKKwkgICAgfQorCSAgICBlbHNpZiAoICghZGVmaW5lZCgkd3JldikgfHwgJHdyZXYgZXEgJzAnKSAmJgorICAgICAgICAgICAgICAgICAgICAoIWRlZmluZWQoJG1ldGEtPntyZXZpc2lvbn0pIHx8ICRtZXRhLT57cmV2aXNpb259IGVxICcwJykgKQorCSAgICB7CisJICAgICAgICAkbG9nLT5pbmZvKCJUZWxsIHRoZSBjbGllbnQgdGhlIGZpbGUgaXMgc2NoZWR1bGVkIGZvciBhZGRpdGlvbiIpOworCQlwcmludCAiTVQgdGV4dCBBIFxuIjsKKyAgICAgICAgICAgICAgICBwcmludCAiTVQgZm5hbWUgJGZpbGVuYW1lXG4iOworICAgICAgICAgICAgICAgIHByaW50ICJNVCBuZXdsaW5lXG4iOworCQluZXh0OworCisJICAgIH0KKwkgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgJGxvZy0+aW5mbygiVXBkYXRpbmdYMyAnJGZpbGVuYW1lJyB0byAiLiRtZXRhLT57cmV2aXNpb259KTsKKyAgICAgICAgICAgICAgICBwcmludCAiTVQgK3VwZGF0ZWRcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk1UIHRleHQgVSBcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk1UIGZuYW1lICRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgICAgICBwcmludCAiTVQgbmV3bGluZVxuIjsKKwkJcHJpbnQgIk1UIC11cGRhdGVkXG4iOworCSAgICB9CisKKyAgICAgICAgICAgIG15ICggJGZpbGVwYXJ0LCAkZGlycGFydCApID0gZmlsZW5hbWVzcGxpdCgkZmlsZW5hbWUsMSk7CisKKwkgICAgIyBEb24ndCB3YW50IHRvIGFjdHVhbGx5IF9ET18gdGhlIHVwZGF0ZSBpZiAtbiBzcGVjaWZpZWQKKwkgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkKKwkgICAgeworCQlpZiAoIGRlZmluZWQgKCAkd3JldiApICkKKwkJeworCQkgICAgIyBpbnN0cnVjdCBjbGllbnQgd2UncmUgc2VuZGluZyBhIGZpbGUgdG8gcHV0IGluIHRoaXMgcGF0aCBhcyBhIHJlcGxhY2VtZW50CisJCSAgICBwcmludCAiVXBkYXRlLWV4aXN0aW5nICRkaXJwYXJ0XG4iOworCQkgICAgJGxvZy0+ZGVidWcoIlVwZGF0aW5nIGV4aXN0aW5nIGZpbGUgJ1VwZGF0ZS1leGlzdGluZyAkZGlycGFydCciKTsKKwkJfSBlbHNlIHsKKwkJICAgICMgaW5zdHJ1Y3QgY2xpZW50IHdlJ3JlIHNlbmRpbmcgYSBmaWxlIHRvIHB1dCBpbiB0aGlzIHBhdGggYXMgYSBuZXcgZmlsZQorCisJCSAgICAkbG9nLT5kZWJ1ZygiQ3JlYXRpbmcgbmV3IGZpbGUgJ0NyZWF0ZWQgJGRpcnBhcnQnIik7CisJCSAgICBwcmludCAiQ3JlYXRlZCAkZGlycGFydFxuIjsKKwkJfQorCQlwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWVcbiI7CisKKwkJIyB0aGlzIGlzIGFuICJlbnRyaWVzIiBsaW5lCisJCW15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZW5hbWUsInNoYTEiLCRtZXRhLT57ZmlsZWhhc2h9KTsKKyAgICAgICAgICAgICAgICBteSAkZW50cmllc0xpbmUgPSAiLyRmaWxlcGFydC8kbWV0YS0+e3JldmlzaW9ufS8vJGtvcHRzLyI7CisgICAgICAgICAgICAgICAgJGVudHJpZXNMaW5lIC49IGdldFN0aWNreVRhZ09yRGF0ZSgkc3RpY2t5SW5mbyk7CisJCSRsb2ctPmRlYnVnKCRlbnRyaWVzTGluZSk7CisJCXByaW50ICIkZW50cmllc0xpbmVcbiI7CisKKwkJIyBwZXJtaXNzaW9ucworCQkkbG9nLT5kZWJ1ZygiU0VORCA6IHU9JG1ldGEtPnttb2RlfSxnPSRtZXRhLT57bW9kZX0sbz0kbWV0YS0+e21vZGV9Iik7CisJCXByaW50ICJ1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfVxuIjsKKworCQkjIHRyYW5zbWl0IGZpbGUKKwkJdHJhbnNtaXRmaWxlKCRtZXRhLT57ZmlsZWhhc2h9KTsKKwkgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbXkgKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICkgPSBmaWxlbmFtZXNwbGl0KCRtZXRhLT57bmFtZX0sMSk7CisKKyAgICAgICAgICAgIG15ICRtZXJnZURpciA9IHNldHVwVG1wRGlyKCk7CisKKyAgICAgICAgICAgIG15ICRmaWxlX2xvY2FsID0gJGZpbGVwYXJ0IC4gIi5taW5lIjsKKyAgICAgICAgICAgIG15ICRtZXJnZWRGaWxlID0gIiRtZXJnZURpci8kZmlsZV9sb2NhbCI7CisgICAgICAgICAgICBzeXN0ZW0oImxuIiwiLXMiLCRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfZmlsZW5hbWV9LCAkZmlsZV9sb2NhbCk7CisgICAgICAgICAgICBteSAkZmlsZV9vbGQgPSAkZmlsZXBhcnQgLiAiLiIgLiAkb2xkbWV0YS0+e3JldmlzaW9ufTsKKyAgICAgICAgICAgIHRyYW5zbWl0ZmlsZSgkb2xkbWV0YS0+e2ZpbGVoYXNofSwgeyB0YXJnZXRmaWxlID0+ICRmaWxlX29sZCB9KTsKKyAgICAgICAgICAgIG15ICRmaWxlX25ldyA9ICRmaWxlcGFydCAuICIuIiAuICRtZXRhLT57cmV2aXNpb259OworICAgICAgICAgICAgdHJhbnNtaXRmaWxlKCRtZXRhLT57ZmlsZWhhc2h9LCB7IHRhcmdldGZpbGUgPT4gJGZpbGVfbmV3IH0pOworCisgICAgICAgICAgICAjIHdlIG5lZWQgdG8gbWVyZ2Ugd2l0aCB0aGUgbG9jYWwgY2hhbmdlcyAoIE09c3VjY2Vzc2Z1bCBtZXJnZSwgQz1jb25mbGljdCBtZXJnZSApCisgICAgICAgICAgICAkbG9nLT5pbmZvKCJNZXJnaW5nICRmaWxlX2xvY2FsLCAkZmlsZV9vbGQsICRmaWxlX25ldyIpOworICAgICAgICAgICAgcHJpbnQgIk0gTWVyZ2luZyBkaWZmZXJlbmNlcyBiZXR3ZWVuICRvbGRtZXRhLT57cmV2aXNpb259IGFuZCAkbWV0YS0+e3JldmlzaW9ufSBpbnRvICRmaWxlbmFtZVxuIjsKKworICAgICAgICAgICAgJGxvZy0+ZGVidWcoIlRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIG1lcmdlIGlzICRtZXJnZURpciIpOworCisgICAgICAgICAgICBteSAkcmV0dXJuID0gc3lzdGVtKCJnaXQiLCAibWVyZ2UtZmlsZSIsICRmaWxlX2xvY2FsLCAkZmlsZV9vbGQsICRmaWxlX25ldyk7CisgICAgICAgICAgICAkcmV0dXJuID4+PSA4OworCisgICAgICAgICAgICBjbGVhbnVwVG1wRGlyKCk7CisKKyAgICAgICAgICAgIGlmICggJHJldHVybiA9PSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkbG9nLT5pbmZvKCJNZXJnZWQgc3VjY2Vzc2Z1bGx5Iik7CisgICAgICAgICAgICAgICAgcHJpbnQgIk0gTSAkZmlsZW5hbWVcbiI7CisgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIk1lcmdlZCAkZGlycGFydCIpOworCisgICAgICAgICAgICAgICAgIyBEb24ndCB3YW50IHRvIGFjdHVhbGx5IF9ET18gdGhlIHVwZGF0ZSBpZiAtbiBzcGVjaWZpZWQKKyAgICAgICAgICAgICAgICB1bmxlc3MgKCAkc3RhdGUtPntnbG9iYWxvcHRpb25zfXstbn0gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIk1lcmdlZCAkZGlycGFydFxuIjsKKyAgICAgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoJHN0YXRlLT57Q1ZTUk9PVH0gLiAiLyRzdGF0ZS0+e21vZHVsZX0vJGZpbGVuYW1lIik7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICRzdGF0ZS0+e0NWU1JPT1R9IC4gIi8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGtvcHRzID0ga29wdHNfZnJvbV9wYXRoKCIkZGlycGFydC8kZmlsZXBhcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGUiLCRtZXJnZWRGaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIi8kZmlsZXBhcnQvJG1ldGEtPntyZXZpc2lvbn0vLyRrb3B0cy8iKTsKKyAgICAgICAgICAgICAgICAgICAgbXkgJGVudHJpZXNMaW5lPSIvJGZpbGVwYXJ0LyRtZXRhLT57cmV2aXNpb259Ly8ka29wdHMvIjsKKyAgICAgICAgICAgICAgICAgICAgJGVudHJpZXNMaW5lIC49IGdldFN0aWNreVRhZ09yRGF0ZSgkc3RpY2t5SW5mbyk7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIkZW50cmllc0xpbmVcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzaWYgKCAkcmV0dXJuID09IDEgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICRsb2ctPmluZm8oIk1lcmdlZCB3aXRoIGNvbmZsaWN0cyIpOworICAgICAgICAgICAgICAgIHByaW50ICJFIGN2cyB1cGRhdGU6IGNvbmZsaWN0cyBmb3VuZCBpbiAkZmlsZW5hbWVcbiI7CisgICAgICAgICAgICAgICAgcHJpbnQgIk0gQyAkZmlsZW5hbWVcbiI7CisKKyAgICAgICAgICAgICAgICAjIERvbid0IHdhbnQgdG8gYWN0dWFsbHkgX0RPXyB0aGUgdXBkYXRlIGlmIC1uIHNwZWNpZmllZAorICAgICAgICAgICAgICAgIHVubGVzcyAoICRzdGF0ZS0+e2dsb2JhbG9wdGlvbnN9ey1ufSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcmludCAiTWVyZ2VkICRkaXJwYXJ0XG4iOworICAgICAgICAgICAgICAgICAgICBwcmludCAkc3RhdGUtPntDVlNST09UfSAuICIvJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWVcbiI7CisgICAgICAgICAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgiJGRpcnBhcnQvJGZpbGVwYXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIiwkbWVyZ2VkRmlsZSk7CisgICAgICAgICAgICAgICAgICAgIG15ICRlbnRyaWVzTGluZSA9ICIvJGZpbGVwYXJ0LyRtZXRhLT57cmV2aXNpb259LysvJGtvcHRzLyI7CisgICAgICAgICAgICAgICAgICAgICRlbnRyaWVzTGluZSAuPSBnZXRTdGlja3lUYWdPckRhdGUoJHN0aWNreUluZm8pOworICAgICAgICAgICAgICAgICAgICBwcmludCAiJGVudHJpZXNMaW5lXG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkbG9nLT53YXJuKCJNZXJnZSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAjIERvbid0IHdhbnQgdG8gYWN0dWFsbHkgX0RPXyB0aGUgdXBkYXRlIGlmIC1uIHNwZWNpZmllZAorICAgICAgICAgICAgdW5sZXNzICggJHN0YXRlLT57Z2xvYmFsb3B0aW9uc317LW59ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAjIHBlcm1pc3Npb25zCisgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIlNFTkQgOiB1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfSIpOworICAgICAgICAgICAgICAgIHByaW50ICJ1PSRtZXRhLT57bW9kZX0sZz0kbWV0YS0+e21vZGV9LG89JG1ldGEtPnttb2RlfVxuIjsKKworICAgICAgICAgICAgICAgICMgdHJhbnNtaXQgZmlsZSwgZm9ybWF0IGlzIHNpbmdsZSBpbnRlZ2VyIG9uIGEgbGluZSBieSBpdHNlbGYgKGZpbGUKKyAgICAgICAgICAgICAgICAjIHNpemUpIGZvbGxvd2VkIGJ5IHRoZSBmaWxlIGNvbnRlbnRzCisgICAgICAgICAgICAgICAgIyBUT0RPIDogd2Ugc2hvdWxkIGNvcHkgZmlsZXMgaW4gYmxvY2tzCisgICAgICAgICAgICAgICAgbXkgJGRhdGEgPSBgY2F0ICRtZXJnZWRGaWxlYDsKKyAgICAgICAgICAgICAgICAkbG9nLT5kZWJ1ZygiRmlsZSBzaXplIDogIiAuIGxlbmd0aCgkZGF0YSkpOworICAgICAgICAgICAgICAgIHByaW50IGxlbmd0aCgkZGF0YSkgLiAiXG4iOworICAgICAgICAgICAgICAgIHByaW50ICRkYXRhOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKKyAgICAjIHByZXBEaXJGb3JPdXRwdXQoKSBhbnkgb3RoZXIgZXhpc3RpbmcgZGlyZWN0b3JpZXMgdW5sZXNzIHRoZXkgYWxyZWFkeQorICAgICMgaGF2ZSB0aGUgcmlnaHQgc3RpY2t5IHRhZzoKKyAgICB1bmxlc3MgKCAkc3RhdGUtPntnbG9iYWxvcHRpb25zfXtufSApCisgICAgeworICAgICAgICBteSAkZGlyOworICAgICAgICBmb3JlYWNoICRkaXIgKGtleXMoJXskc3RhdGUtPntkaXJNYXB9fSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAhICRzZWVuZGlyc3skZGlyfSAmJgorICAgICAgICAgICAgICAgIGV4aXN0cygkc3RhdGUtPntkaXJBcmdzfXskZGlyfSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG15KCRvbGRUYWcpOworICAgICAgICAgICAgICAgICRvbGRUYWc9JHN0YXRlLT57ZGlyTWFwfXskZGlyfXt0YWdzcGVjfTsKKworICAgICAgICAgICAgICAgIHVubGVzcyggKCBleGlzdHMoJHN0YXRlLT57b3B0fXtBfSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCgkb2xkVGFnKSApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICggZGVmaW5lZCgkc3RhdGUtPntvcHR9e3J9KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICggIWRlZmluZWQoJG9sZFRhZykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdGF0ZS0+e29wdH17cn0gbmUgJG9sZFRhZyApICkgKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUT0RPPzogT1Igc3RpY2t5IGRpciBpcyBkaWZmZXJlbnQuLi4KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcHJlcERpckZvck91dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAkcmVwb0RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICIuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFwlc2VlbmRpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAndXBkYXRlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICRzdGF0ZS0+e2RpckFyZ3N9ICk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICMgVE9ETz86IENvbnNpZGVyIHNlbmRpbmcgYSBmaW5hbCBkdXBsaWNhdGUgU3RpY2t5IHJlc3BvbnNlCisgICAgICAgICAgICAjICAgdG8gbW9yZSBjbG9zZWx5IG1pbWljIHJlYWwgQ1ZTLgorICAgICAgICB9CisgICAgfQorCisgICAgcHJpbnQgIm9rXG4iOworfQorCitzdWIgcmVxX2NpCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICBhcmdzcGxpdCgiY2kiKTsKKworICAgICMkbG9nLT5kZWJ1ZygiU3RhdGUgOiAiIC4gRHVtcGVyKCRzdGF0ZSkpOworCisgICAgJGxvZy0+aW5mbygicmVxX2NpIDogIiAuICggZGVmaW5lZCgkZGF0YSkgPyAkZGF0YSA6ICJbTlVMTF0iICkpOworCisgICAgaWYgKCAkc3RhdGUtPnttZXRob2R9IGVxICdwc2VydmVyJyBhbmQgJHN0YXRlLT57dXNlcn0gZXEgJ2Fub255bW91cycgKQorICAgIHsKKyAgICAgICAgcHJpbnQgImVycm9yIDEgYW5vbnltb3VzIHVzZXIgY2Fubm90IGNvbW1pdCB2aWEgcHNlcnZlclxuIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorCisgICAgaWYgKCAtZSAkc3RhdGUtPntDVlNST09UfSAuICIvaW5kZXgiICkKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oImZpbGUgJ2luZGV4JyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZ2l0IHJlcG9zaXRvcnkiKTsKKyAgICAgICAgcHJpbnQgImVycm9yIDEgSW5kZXggYWxyZWFkeSBleGlzdHMgaW4gZ2l0IHJlcG9cbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KKworICAgICMgR3JhYiBhIGhhbmRsZSB0byB0aGUgU1FMaXRlIGRiIGFuZCBkbyBhbnkgbmVjZXNzYXJ5IHVwZGF0ZXMKKyAgICBteSAkdXBkYXRlciA9IEdJVENWUzo6dXBkYXRlci0+bmV3KCRzdGF0ZS0+e0NWU1JPT1R9LCAkc3RhdGUtPnttb2R1bGV9LCAkbG9nKTsKKyAgICAkdXBkYXRlci0+dXBkYXRlKCk7CisKKyAgICBteSBAY29tbWl0dGVkZmlsZXMgPSAoKTsKKyAgICBteSAlb2xkbWV0YTsKKyAgICBteSAkc3RpY2t5SW5mbzsKKyAgICBteSAkYnJhbmNoUmVmOworICAgIG15ICRwYXJlbnRoYXNoOworCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICBteSAkY29tbWl0dGVkZmlsZSA9ICRmaWxlbmFtZTsKKyAgICAgICAgJGZpbGVuYW1lID0gZmlsZWNsZWFudXAoJGZpbGVuYW1lKTsKKworICAgICAgICBuZXh0IHVubGVzcyAoIGV4aXN0cyAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSBvciBub3QgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXt1bmNoYW5nZWR9ICk7CisKKyAgICAgICAgIyMjIyMKKyAgICAgICAgIyBGaWd1cmUgb3V0IHdoaWNoIGJyYW5jaCBhbmQgcGFyZW50aGFzaCB3ZSBhcmUgY29tbWl0dGluZworICAgICAgICAjIHRvLCBhbmQgc2V0dXAgd29ya3RyZWU6CisKKyAgICAgICAgIyBzaG91bGQgYWx3YXlzIGNvbWUgZnJvbSBlbnRyaWVzOgorICAgICAgICBteSAkZmlsZVN0aWNreUluZm8gPSByZXNvbHZlU3RpY2t5SW5mbygkZmlsZW5hbWUpOworICAgICAgICBpZiggIWRlZmluZWQoJGJyYW5jaFJlZikgKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RpY2t5SW5mbyA9ICRmaWxlU3RpY2t5SW5mbzsKKyAgICAgICAgICAgIGlmKCBkZWZpbmVkKCRzdGlja3lJbmZvKSAmJgorICAgICAgICAgICAgICAgICggZGVmaW5lZCgkc3RpY2t5SW5mby0+e2RhdGV9KSB8fAorICAgICAgICAgICAgICAgICAgIWRlZmluZWQoJHN0aWNreUluZm8tPnt0YWd9KSApICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludCAiZXJyb3IgMSBjYW5ub3QgY29tbWl0IHdpdGggc3RpY2t5IGRhdGUgZm9yIGZpbGUgYCRmaWxlbmFtZSdcbiI7CisgICAgICAgICAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgJGJyYW5jaFJlZiA9ICJyZWZzL2hlYWRzLyRzdGF0ZS0+e21vZHVsZX0iOworICAgICAgICAgICAgaWYgKCBkZWZpbmVkKCRzdGlja3lJbmZvKSAmJiBkZWZpbmVkKCRzdGlja3lJbmZvLT57dGFnfSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICRicmFuY2hSZWYgPSAicmVmcy9oZWFkcy8kc3RpY2t5SW5mby0+e3RhZ30iOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAkcGFyZW50aGFzaCA9IGBnaXQgc2hvdy1yZWYgLXMgJGJyYW5jaFJlZmA7CisgICAgICAgICAgICBjaG9tcCAkcGFyZW50aGFzaDsKKyAgICAgICAgICAgIGlmICgkcGFyZW50aGFzaCAhfiAvXlswLTlhLWZdezQwfSQvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggZGVmaW5lZCgkc3RpY2t5SW5mbykgJiYgZGVmaW5lZCgkc3RpY2t5SW5mby0+e3RhZ30pICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJlcnJvciAxIHN0aWNreSB0YWcgYCRzdGlja3lJbmZvLT57dGFnfScgZm9yIGZpbGUgYCRmaWxlbmFtZScgaXMgbm90IGEgYnJhbmNoXG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcmludCAiZXJyb3IgMSBwc2VydmVyIGNhbm5vdCBmaW5kIHRoZSBjdXJyZW50IEhFQUQgb2YgbW9kdWxlIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgICAgICAgICAgZXhpdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2V0dXBXb3JrVHJlZSgkcGFyZW50aGFzaCk7CisKKyAgICAgICAgICAgICRsb2ctPmluZm8oIkxvY2tsZXNzIGNvbW1pdCBzdGFydCwgYmFzaW5nIGNvbW1pdCBvbiAnJHdvcmstPnt3b3JrRGlyfScsIGluZGV4IGZpbGUgaXMgJyR3b3JrLT57aW5kZXh9JyIpOworCisgICAgICAgICAgICAkbG9nLT5pbmZvKCJDcmVhdGVkIGluZGV4ICckd29yay0+e2luZGV4fScgZm9yIGhlYWQgJHN0YXRlLT57bW9kdWxlfSAtIGV4aXQgc3RhdHVzICQ/Iik7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoICFyZWZIYXNoRXF1YWwoJHN0aWNreUluZm8sJGZpbGVTdGlja3lJbmZvKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICNUT0RPOiBXZSBjb3VsZCBzcGxpdCB0aGUgY3ZzIGNvbW1pdCBpbnRvIG11bHRpcGxlCisgICAgICAgICAgICAjICBnaXQgY29tbWl0cyBieSBkaXN0aW5jdCBzdGlja3lUYWcgdmFsdWVzLCBidXQgdGhhdAorICAgICAgICAgICAgIyAgaXMgbG93aXNoIHByaW9yaXR5LgorICAgICAgICAgICAgcHJpbnQgImVycm9yIDEgQ29tbWl0dGluZyBkaWZmZXJlbnQgZmlsZXMgdG8gZGlmZmVyZW50IgorICAgICAgICAgICAgICAgICAgLiAiIGJyYW5jaGVzIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkXG4iOworICAgICAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgICAgICBleGl0OworICAgICAgICB9CisKKyAgICAgICAgIyMjIyMKKyAgICAgICAgIyBQcm9jZXNzIHRoaXMgZmlsZToKKworICAgICAgICBteSAkbWV0YSA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSwkc3RpY2t5SW5mbyk7CisJJG9sZG1ldGF7JGZpbGVuYW1lfSA9ICRtZXRhOworCisgICAgICAgIG15ICR3cmV2ID0gcmV2cGFyc2UoJGZpbGVuYW1lKTsKKworICAgICAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lKTsKKworCSMgZG8gYSBjaGVja291dCBvZiB0aGUgZmlsZSBpZiBpdCBpcyBwYXJ0IG9mIHRoaXMgdHJlZQorICAgICAgICBpZiAoJHdyZXYpIHsKKyAgICAgICAgICAgIHN5c3RlbSgnZ2l0JywgJ2NoZWNrb3V0LWluZGV4JywgJy1mJywgJy11JywgJGZpbGVuYW1lKTsKKyAgICAgICAgICAgIHVubGVzcyAoJD8gPT0gMCkgeworICAgICAgICAgICAgICAgIGRpZSAiRXJyb3IgcnVubmluZyBnaXQtY2hlY2tvdXQtaW5kZXggLWYgLXUgJGZpbGVuYW1lIDogJCEiOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbXkgJGFkZGZsYWcgPSAwOworICAgICAgICBteSAkcm1mbGFnID0gMDsKKyAgICAgICAgJHJtZmxhZyA9IDEgaWYgKCBkZWZpbmVkKCR3cmV2KSBhbmQgKCR3cmV2PX4vXi0vKSApOworICAgICAgICAkYWRkZmxhZyA9IDEgdW5sZXNzICggLWUgJGZpbGVuYW1lICk7CisKKyAgICAgICAgIyBEbyB1cCB0byBkYXRlIGNoZWNraW5nCisgICAgICAgIHVubGVzcyAoICRhZGRmbGFnIG9yICR3cmV2IGVxICRtZXRhLT57cmV2aXNpb259IG9yCisgICAgICAgICAgICAgICAgICggJHJtZmxhZyBhbmQgJHdyZXYgZXEgIi0kbWV0YS0+e3JldmlzaW9ufSIgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICMgZmFpbCBldmVyeXRoaW5nIGlmIGFuIHVwIHRvIGRhdGUgY2hlY2sgZmFpbHMKKyAgICAgICAgICAgIHByaW50ICJlcnJvciAxIFVwIHRvIGRhdGUgY2hlY2sgZmFpbGVkIGZvciAkZmlsZW5hbWVcbiI7CisgICAgICAgICAgICBjbGVhbnVwV29ya1RyZWUoKTsKKyAgICAgICAgICAgIGV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBwdXNoIEBjb21taXR0ZWRmaWxlcywgJGNvbW1pdHRlZGZpbGU7CisgICAgICAgICRsb2ctPmluZm8oIkNvbW1pdHRpbmcgJGZpbGVuYW1lIik7CisKKyAgICAgICAgc3lzdGVtKCJta2RpciIsIi1wIiwkZGlycGFydCkgdW5sZXNzICggLWQgJGRpcnBhcnQgKTsKKworICAgICAgICB1bmxlc3MgKCAkcm1mbGFnICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+ZGVidWcoInJlbmFtZSAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSAkZmlsZW5hbWUiKTsKKyAgICAgICAgICAgIHJlbmFtZSAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSwkZmlsZW5hbWU7CisKKyAgICAgICAgICAgICMgQ2FsY3VsYXRlIG1vZGVzIHRvIHJlbW92ZQorICAgICAgICAgICAgbXkgJGludm1vZGUgPSAiIjsKKyAgICAgICAgICAgIGZvcmVhY2ggKCBxdyAociB3IHgpICkgeyAkaW52bW9kZSAuPSAkXyB1bmxlc3MgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX21vZGV9ID1+IC8kXy8gKTsgfQorCisgICAgICAgICAgICAkbG9nLT5kZWJ1ZygiY2htb2QgdSsiIC4gJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9tb2RlfSAuICItIiAuICRpbnZtb2RlIC4gIiAkZmlsZW5hbWUiKTsKKyAgICAgICAgICAgIHN5c3RlbSgiY2htb2QiLCJ1KyIgLiAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9tb2RlfSAuICItIiAuICRpbnZtb2RlLCAkZmlsZW5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCAkcm1mbGFnICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+aW5mbygiUmVtb3ZpbmcgZmlsZSAnJGZpbGVuYW1lJyIpOworICAgICAgICAgICAgdW5saW5rKCRmaWxlbmFtZSk7CisgICAgICAgICAgICBzeXN0ZW0oImdpdCIsICJ1cGRhdGUtaW5kZXgiLCAiLS1yZW1vdmUiLCAkZmlsZW5hbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2lmICggJGFkZGZsYWcgKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT5pbmZvKCJBZGRpbmcgZmlsZSAnJGZpbGVuYW1lJyIpOworICAgICAgICAgICAgc3lzdGVtKCJnaXQiLCAidXBkYXRlLWluZGV4IiwgIi0tYWRkIiwgJGZpbGVuYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRsb2ctPmluZm8oIlVwZGF0aW5nWDIgZmlsZSAnJGZpbGVuYW1lJyIpOworICAgICAgICAgICAgc3lzdGVtKCJnaXQiLCAidXBkYXRlLWluZGV4IiwgJGZpbGVuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVubGVzcyAoIHNjYWxhcihAY29tbWl0dGVkZmlsZXMpID4gMCApCisgICAgeworICAgICAgICBwcmludCAiRSBObyBmaWxlcyB0byBjb21taXRcbiI7CisgICAgICAgIHByaW50ICJva1xuIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBteSAkdHJlZWhhc2ggPSBgZ2l0IHdyaXRlLXRyZWVgOworICAgIGNob21wICR0cmVlaGFzaDsKKworICAgICRsb2ctPmRlYnVnKCJUcmVlaGFzaCA6ICR0cmVlaGFzaCwgUGFyZW50aGFzaCA6ICRwYXJlbnRoYXNoIik7CisKKyAgICAjIHdyaXRlIG91ciBjb21taXQgbWVzc2FnZSBvdXQgaWYgd2UgaGF2ZSBvbmUgLi4uCisgICAgbXkgKCAkbXNnX2ZoLCAkbXNnX2ZpbGVuYW1lICkgPSB0ZW1wZmlsZSggRElSID0+ICRURU1QX0RJUiApOworICAgIHByaW50ICRtc2dfZmggJHN0YXRlLT57b3B0fXttfTsjIGlmICggZXhpc3RzICggJHN0YXRlLT57b3B0fXttfSApICk7CisgICAgaWYgKCBkZWZpbmVkICggJGNmZy0+e2dpdGN2c317Y29tbWl0bXNnYW5ub3RhdGlvbn0gKSApIHsKKyAgICAgICAgaWYgKCRjZmctPntnaXRjdnN9e2NvbW1pdG1zZ2Fubm90YXRpb259ICF+IC9eXHMqJC8gKSB7CisgICAgICAgICAgICBwcmludCAkbXNnX2ZoICJcblxuIi4kY2ZnLT57Z2l0Y3ZzfXtjb21taXRtc2dhbm5vdGF0aW9ufS4iXG4iCisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBwcmludCAkbXNnX2ZoICJcblxudmlhIGdpdC1DVlMgZW11bGF0b3JcbiI7CisgICAgfQorICAgIGNsb3NlICRtc2dfZmg7CisKKyAgICBteSAkY29tbWl0aGFzaCA9IGBnaXQgY29tbWl0LXRyZWUgJHRyZWVoYXNoIC1wICRwYXJlbnRoYXNoIDwgJG1zZ19maWxlbmFtZWA7CisgICAgY2hvbXAoJGNvbW1pdGhhc2gpOworICAgICRsb2ctPmluZm8oIkNvbW1pdCBoYXNoIDogJGNvbW1pdGhhc2giKTsKKworICAgIHVubGVzcyAoICRjb21taXRoYXNoID1+IC9bYS16QS1aMC05XXs0MH0vICkKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oIkNvbW1pdCBmYWlsZWQgKEludmFsaWQgY29tbWl0IGhhc2gpIik7CisgICAgICAgIHByaW50ICJlcnJvciAxIENvbW1pdCBmYWlsZWQgKHVua25vd24gcmVhc29uKVxuIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorCisJIyMjIEVtdWxhdGUgZ2l0LXJlY2VpdmUtcGFjayBieSBydW5uaW5nIGhvb2tzL3VwZGF0ZQorCW15IEBob29rID0gKCAkRU5We0dJVF9ESVJ9Lidob29rcy91cGRhdGUnLCAkYnJhbmNoUmVmLAorCQkJJHBhcmVudGhhc2gsICRjb21taXRoYXNoICk7CisJaWYoIC14ICRob29rWzBdICkgeworCQl1bmxlc3MoIHN5c3RlbSggQGhvb2sgKSA9PSAwICkKKwkJeworCQkJJGxvZy0+d2FybigiQ29tbWl0IGZhaWxlZCAodXBkYXRlIGhvb2sgZGVjbGluZWQgdG8gdXBkYXRlIHJlZikiKTsKKwkJCXByaW50ICJlcnJvciAxIENvbW1pdCBmYWlsZWQgKHVwZGF0ZSBob29rIGRlY2xpbmVkKVxuIjsKKwkJCWNsZWFudXBXb3JrVHJlZSgpOworCQkJZXhpdDsKKwkJfQorCX0KKworCSMjIyBVcGRhdGUgdGhlIHJlZgorCWlmIChzeXN0ZW0ocXcoZ2l0IHVwZGF0ZS1yZWYgLW0pLCAiY3Zzc2VydmVyIGNpIiwKKwkJCSRicmFuY2hSZWYsICRjb21taXRoYXNoLCAkcGFyZW50aGFzaCkpIHsKKwkJJGxvZy0+d2FybigidXBkYXRlLXJlZiBmb3IgJHN0YXRlLT57bW9kdWxlfSBmYWlsZWQuIik7CisJCXByaW50ICJlcnJvciAxIENhbm5vdCBjb21taXQgLS0gdXBkYXRlIGZpcnN0XG4iOworCQljbGVhbnVwV29ya1RyZWUoKTsKKwkJZXhpdDsKKwl9CisKKwkjIyMgRW11bGF0ZSBnaXQtcmVjZWl2ZS1wYWNrIGJ5IHJ1bm5pbmcgaG9va3MvcG9zdC1yZWNlaXZlCisJbXkgJGhvb2sgPSAkRU5We0dJVF9ESVJ9Lidob29rcy9wb3N0LXJlY2VpdmUnOworCWlmKCAteCAkaG9vayApIHsKKwkJb3BlbihteSAkcGlwZSwgInwgJGhvb2siKSB8fCBkaWUgImNhbid0IGZvcmsgJCEiOworCisJCWxvY2FsICRTSUd7UElQRX0gPSBzdWIgeyBkaWUgJ3BpcGUgYnJva2UnIH07CisKKwkJcHJpbnQgJHBpcGUgIiRwYXJlbnRoYXNoICRjb21taXRoYXNoICRicmFuY2hSZWZcbiI7CisKKwkJY2xvc2UgJHBpcGUgfHwgZGllICJiYWQgcGlwZTogJCEgJD8iOworCX0KKworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworCSMjIyBUaGVuIGhvb2tzL3Bvc3QtdXBkYXRlCisJJGhvb2sgPSAkRU5We0dJVF9ESVJ9Lidob29rcy9wb3N0LXVwZGF0ZSc7CisJaWYgKC14ICRob29rKSB7CisJCXN5c3RlbSgkaG9vaywgJGJyYW5jaFJlZik7CisJfQorCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAY29tbWl0dGVkZmlsZXMgKQorICAgIHsKKyAgICAgICAgJGZpbGVuYW1lID0gZmlsZWNsZWFudXAoJGZpbGVuYW1lKTsKKworICAgICAgICBteSAkbWV0YSA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSwkc3RpY2t5SW5mbyk7CisJdW5sZXNzIChkZWZpbmVkICRtZXRhLT57cmV2aXNpb259KSB7CisJICAkbWV0YS0+e3JldmlzaW9ufSA9ICIxLjEiOworCX0KKworICAgICAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lLCAxKTsKKworICAgICAgICAkbG9nLT5kZWJ1ZygiQ2hlY2tlZC1pbiAkZGlycGFydCA6ICRmaWxlbmFtZSIpOworCisJcHJpbnQgIk0gJHN0YXRlLT57Q1ZTUk9PVH0vJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWUsdiAgPC0tICAkZGlycGFydCRmaWxlcGFydFxuIjsKKyAgICAgICAgaWYgKCBkZWZpbmVkICRtZXRhLT57ZmlsZWhhc2h9ICYmICRtZXRhLT57ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIG5ldyByZXZpc2lvbjogZGVsZXRlOyBwcmV2aW91cyByZXZpc2lvbjogJG9sZG1ldGF7JGZpbGVuYW1lfXtyZXZpc2lvbn1cbiI7CisgICAgICAgICAgICBwcmludCAiUmVtb3ZlLWVudHJ5ICRkaXJwYXJ0XG4iOworICAgICAgICAgICAgcHJpbnQgIiRmaWxlbmFtZVxuIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgkbWV0YS0+e3JldmlzaW9ufSBlcSAiMS4xIikgeworCSAgICAgICAgcHJpbnQgIk0gaW5pdGlhbCByZXZpc2lvbjogMS4xXG4iOworICAgICAgICAgICAgfSBlbHNlIHsKKwkgICAgICAgIHByaW50ICJNIG5ldyByZXZpc2lvbjogJG1ldGEtPntyZXZpc2lvbn07IHByZXZpb3VzIHJldmlzaW9uOiAkb2xkbWV0YXskZmlsZW5hbWV9e3JldmlzaW9ufVxuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ICJDaGVja2VkLWluICRkaXJwYXJ0XG4iOworICAgICAgICAgICAgcHJpbnQgIiRmaWxlbmFtZVxuIjsKKyAgICAgICAgICAgIG15ICRrb3B0cyA9IGtvcHRzX2Zyb21fcGF0aCgkZmlsZW5hbWUsInNoYTEiLCRtZXRhLT57ZmlsZWhhc2h9KTsKKyAgICAgICAgICAgIHByaW50ICIvJGZpbGVwYXJ0LyRtZXRhLT57cmV2aXNpb259Ly8ka29wdHMvIiAuCisgICAgICAgICAgICAgICAgICBnZXRTdGlja3lUYWdPckRhdGUoJHN0aWNreUluZm8pIC4gIlxuIjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgIHByaW50ICJva1xuIjsKK30KKworc3ViIHJlcV9zdGF0dXMKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJzdGF0dXMiKTsKKworICAgICRsb2ctPmluZm8oInJlcV9zdGF0dXMgOiAiIC4gKCBkZWZpbmVkKCRkYXRhKSA/ICRkYXRhIDogIltOVUxMXSIgKSk7CisgICAgIyRsb2ctPmRlYnVnKCJzdGF0dXMgc3RhdGUgOiAiIC4gRHVtcGVyKCRzdGF0ZSkpOworCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyOworICAgICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgICMgaWYgbm8gZmlsZXMgd2VyZSBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gd29yayBvdXQgd2hhdCBmaWxlcyB3ZSBzaG91bGQKKyAgICAjIGJlIHByb3ZpZGluZyBzdGF0dXMgb24gLi4uCisgICAgYXJnc2Zyb21kaXIoJHVwZGF0ZXIpOworCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICAkZmlsZW5hbWUgPSBmaWxlY2xlYW51cCgkZmlsZW5hbWUpOworCisgICAgICAgIGlmICggZXhpc3RzKCRzdGF0ZS0+e29wdH17bH0pICYmCisgICAgICAgICAgICAgaW5kZXgoJGZpbGVuYW1lLCAnLycsIGxlbmd0aCgkc3RhdGUtPntwcmVwZW5kZGlyfSkpID49IDAgKQorICAgICAgICB7CisgICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKworICAgICAgICBteSAkd3JldiA9IHJldnBhcnNlKCRmaWxlbmFtZSk7CisKKyAgICAgICAgbXkgJHN0aWNreUluZm8gPSByZXNvbHZlU3RpY2t5SW5mbygkZmlsZW5hbWUpOworICAgICAgICBteSAkbWV0YSA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSwkc3RpY2t5SW5mbyk7CisgICAgICAgIG15ICRvbGRtZXRhID0gJG1ldGE7CisKKyAgICAgICAgIyBJZiB0aGUgd29ya2luZyBjb3B5IGlzIGFuIG9sZCByZXZpc2lvbiwgbGV0cyBnZXQgdGhhdAorICAgICAgICAjIHZlcnNpb24gdG9vIGZvciBjb21wYXJpc29uLgorICAgICAgICBpZiAoIGRlZmluZWQoJHdyZXYpIGFuZCAkd3JldiBuZSAkbWV0YS0+e3JldmlzaW9ufSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG15KCRybVJldik9JHdyZXY7CisgICAgICAgICAgICAkcm1SZXY9fnMvXi0vLzsKKyAgICAgICAgICAgICRvbGRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCAkcm1SZXYpOworICAgICAgICB9CisKKyAgICAgICAgIyBUT0RPIDogQWxsIHBvc3NpYmxlIHN0YXR1c2VzIGFyZW4ndCB5ZXQgaW1wbGVtZW50ZWQKKyAgICAgICAgbXkgJHN0YXR1czsKKyAgICAgICAgIyBGaWxlcyBhcmUgdXAgdG8gZGF0ZSBpZiB0aGUgd29ya2luZyBjb3B5IGFuZCByZXBvIGNvcHkgaGF2ZQorICAgICAgICAjIHRoZSBzYW1lIHJldmlzaW9uLCBhbmQgdGhlIHdvcmtpbmcgY29weSBpcyB1bm1vZGlmaWVkCisgICAgICAgIGlmICggZGVmaW5lZCAoICR3cmV2ICkgYW5kIGRlZmluZWQoJG1ldGEtPntyZXZpc2lvbn0pIGFuZAorICAgICAgICAgICAgICR3cmV2IGVxICRtZXRhLT57cmV2aXNpb259IGFuZAorICAgICAgICAgICAgICggKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3VuY2hhbmdlZH0gYW5kCisgICAgICAgICAgICAgICAgICggbm90IGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e2NvbmZsaWN0fSApIG9yCisgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtjb25mbGljdH0gIX4gL15cKz0vICkgKSBvcgorICAgICAgICAgICAgICAgKCBkZWZpbmVkKCRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfaGFzaH0pIGFuZAorICAgICAgICAgICAgICAgICAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2hhc2h9IGVxCisgICAgICAgICAgICAgICAgICAgICAgICAkbWV0YS0+e2ZpbGVoYXNofSApICkgKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzID0gIlVwLXRvLWRhdGUiCisgICAgICAgIH0KKworICAgICAgICAjIE5lZWQgY2hlY2tvdXQgaWYgdGhlIHdvcmtpbmcgY29weSBoYXMgYSBkaWZmZXJlbnQgKHVzdWFsbHkKKyAgICAgICAgIyBvbGRlcikgcmV2aXNpb24gdGhhbiB0aGUgcmVwbyBjb3B5LCBhbmQgdGhlIHdvcmtpbmcgY29weSBpcworICAgICAgICAjIHVubW9kaWZpZWQKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHdyZXYgKSBhbmQgZGVmaW5lZCAoICRtZXRhLT57cmV2aXNpb259ICkgYW5kCisgICAgICAgICAgICAgJG1ldGEtPntyZXZpc2lvbn0gbmUgJHdyZXYgYW5kCisgICAgICAgICAgICAgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3VuY2hhbmdlZH0gb3IKKyAgICAgICAgICAgICAgICggZGVmaW5lZCgkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2hhc2h9KSBhbmQKKyAgICAgICAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9oYXNofSBlcQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2xkbWV0YS0+e2ZpbGVoYXNofSApICkgKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzIHx8PSAiTmVlZHMgQ2hlY2tvdXQiOworICAgICAgICB9CisKKyAgICAgICAgIyBOZWVkIGNoZWNrb3V0IGlmIGl0IGV4aXN0cyBpbiB0aGUgcmVwbyBidXQgZG9lc24ndCBoYXZlIGEgd29ya2luZworICAgICAgICAjIGNvcHkKKyAgICAgICAgaWYgKCBub3QgZGVmaW5lZCAoICR3cmV2ICkgYW5kIGRlZmluZWQgKCAkbWV0YS0+e3JldmlzaW9ufSApICkKKyAgICAgICAgeworICAgICAgICAgICAgJHN0YXR1cyB8fD0gIk5lZWRzIENoZWNrb3V0IjsKKyAgICAgICAgfQorCisgICAgICAgICMgTG9jYWxseSBtb2RpZmllZCBpZiB3b3JraW5nIGNvcHkgYW5kIHJlcG8gY29weSBoYXZlIHRoZQorICAgICAgICAjIHNhbWUgcmV2aXNpb24gYnV0IHRoZXJlIGFyZSBsb2NhbCBjaGFuZ2VzCisgICAgICAgIGlmICggZGVmaW5lZCAoICR3cmV2ICkgYW5kIGRlZmluZWQoJG1ldGEtPntyZXZpc2lvbn0pIGFuZAorICAgICAgICAgICAgICR3cmV2IGVxICRtZXRhLT57cmV2aXNpb259IGFuZAorICAgICAgICAgICAgICR3cmV2IG5lICIwIiBhbmQKKyAgICAgICAgICAgICAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRzdGF0dXMgfHw9ICJMb2NhbGx5IE1vZGlmaWVkIjsKKyAgICAgICAgfQorCisgICAgICAgICMgTmVlZHMgTWVyZ2UgaWYgd29ya2luZyBjb3B5IHJldmlzaW9uIGlzIGRpZmZlcmVudAorICAgICAgICAjICh1c3VhbGx5IG9sZGVyKSB0aGFuIHJlcG8gY29weSBhbmQgdGhlcmUgYXJlIGxvY2FsIGNoYW5nZXMKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHdyZXYgKSBhbmQgZGVmaW5lZCAoICRtZXRhLT57cmV2aXNpb259ICkgYW5kCisgICAgICAgICAgICAgJG1ldGEtPntyZXZpc2lvbn0gbmUgJHdyZXYgYW5kCisgICAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXttb2RpZmllZF9maWxlbmFtZX0gKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzIHx8PSAiTmVlZHMgTWVyZ2UiOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtyZXZpc2lvbn0gKSBhbmQKKyAgICAgICAgICAgICAoICFkZWZpbmVkKCRtZXRhLT57cmV2aXNpb259KSB8fAorICAgICAgICAgICAgICAgJG1ldGEtPntyZXZpc2lvbn0gZXEgIjAiICkgKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzIHx8PSAiTG9jYWxseSBBZGRlZCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBkZWZpbmVkICggJHdyZXYgKSBhbmQgZGVmaW5lZCAoICRtZXRhLT57cmV2aXNpb259ICkgYW5kCisgICAgICAgICAgICAgJHdyZXYgZXEgIi0kbWV0YS0+e3JldmlzaW9ufSIgKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzIHx8PSAiTG9jYWxseSBSZW1vdmVkIjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGRlZmluZWQgKCAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e2NvbmZsaWN0fSApIGFuZAorICAgICAgICAgICAgICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17Y29uZmxpY3R9ID1+IC9eXCs9LyApCisgICAgICAgIHsKKyAgICAgICAgICAgICRzdGF0dXMgfHw9ICJVbnJlc29sdmVkIENvbmZsaWN0IjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIDAgKQorICAgICAgICB7CisgICAgICAgICAgICAkc3RhdHVzIHx8PSAiRmlsZSBoYWQgY29uZmxpY3RzIG9uIG1lcmdlIjsKKyAgICAgICAgfQorCisgICAgICAgICRzdGF0dXMgfHw9ICJVbmtub3duIjsKKworICAgICAgICBteSAoJGZpbGVwYXJ0KSA9IGZpbGVuYW1lc3BsaXQoJGZpbGVuYW1lKTsKKworICAgICAgICBwcmludCAiTSA9PT09PT09IiAuICggIj0iIHggNjAgKSAuICJcbiI7CisgICAgICAgIHByaW50ICJNIEZpbGU6ICRmaWxlcGFydFx0U3RhdHVzOiAkc3RhdHVzXG4iOworICAgICAgICBpZiAoIGRlZmluZWQoJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtyZXZpc2lvbn0pICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIk0gV29ya2luZyByZXZpc2lvbjpcdCIgLgorICAgICAgICAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXtyZXZpc2lvbn0gLiAiXG4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQgIk0gV29ya2luZyByZXZpc2lvbjpcdE5vIGVudHJ5IGZvciAkZmlsZW5hbWVcbiI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCBkZWZpbmVkKCRtZXRhLT57cmV2aXNpb259KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIFJlcG9zaXRvcnkgcmV2aXNpb246XHQiIC4KKyAgICAgICAgICAgICAgICAgICAkbWV0YS0+e3JldmlzaW9ufSAuCisgICAgICAgICAgICAgICAgICAgIlx0JHN0YXRlLT57Q1ZTUk9PVH0vJHN0YXRlLT57bW9kdWxlfS8kZmlsZW5hbWUsdlxuIjsKKyAgICAgICAgICAgIG15KCR0YWdPckRhdGUpPSRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17dGFnX29yX2RhdGV9OworICAgICAgICAgICAgbXkoJHRhZyk9KCR0YWdPckRhdGU9fm0vXlQoLispJC8pOworICAgICAgICAgICAgaWYoICFkZWZpbmVkKCR0YWcpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkdGFnPSIobm9uZSkiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnQgIk0gU3RpY2t5IFRhZzpcdFx0JHRhZ1xuIjsKKyAgICAgICAgICAgIG15KCRkYXRlKT0oJHRhZ09yRGF0ZT1+bS9eRCguKykkLyk7CisgICAgICAgICAgICBpZiggIWRlZmluZWQoJGRhdGUpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkZGF0ZT0iKG5vbmUpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ICJNIFN0aWNreSBEYXRlOlx0XHQkZGF0ZVxuIjsKKyAgICAgICAgICAgIG15KCRvcHRpb25zKT0kc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e29wdGlvbnN9OworICAgICAgICAgICAgaWYoICRvcHRpb25zIGVxICIiICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkb3B0aW9ucz0iKG5vbmUpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ICJNIFN0aWNreSBPcHRpb25zOlx0XHQkb3B0aW9uc1xuIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ICJNIFJlcG9zaXRvcnkgcmV2aXNpb246XHRObyByZXZpc2lvbiBjb250cm9sIGZpbGVcbiI7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIk1cbiI7CisgICAgfQorCisgICAgcHJpbnQgIm9rXG4iOworfQorCitzdWIgcmVxX2RpZmYKK3sKKyAgICBteSAoICRjbWQsICRkYXRhICkgPSBAXzsKKworICAgIGFyZ3NwbGl0KCJkaWZmIik7CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX2RpZmYgOiAiIC4gKCBkZWZpbmVkKCRkYXRhKSA/ICRkYXRhIDogIltOVUxMXSIgKSk7CisgICAgIyRsb2ctPmRlYnVnKCJzdGF0dXMgc3RhdGUgOiAiIC4gRHVtcGVyKCRzdGF0ZSkpOworCisgICAgbXkgKCRyZXZpc2lvbjEsICRyZXZpc2lvbjIpOworICAgIGlmICggZGVmaW5lZCAoICRzdGF0ZS0+e29wdH17cn0gKSBhbmQgcmVmICRzdGF0ZS0+e29wdH17cn0gZXEgIkFSUkFZIiApCisgICAgeworICAgICAgICAkcmV2aXNpb24xID0gJHN0YXRlLT57b3B0fXtyfVswXTsKKyAgICAgICAgJHJldmlzaW9uMiA9ICRzdGF0ZS0+e29wdH17cn1bMV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgJHJldmlzaW9uMSA9ICRzdGF0ZS0+e29wdH17cn07CisgICAgfQorCisgICAgJGxvZy0+ZGVidWcoIkRpZmZpbmcgcmV2aXNpb25zICIgLgorICAgICAgICAgICAgICAgICggZGVmaW5lZCgkcmV2aXNpb24xKSA/ICRyZXZpc2lvbjEgOiAiW05VTExdIiApIC4KKyAgICAgICAgICAgICAgICAiIGFuZCAiIC4gKCBkZWZpbmVkKCRyZXZpc2lvbjIpID8gJHJldmlzaW9uMiA6ICJbTlVMTF0iICkgKTsKKworICAgICMgR3JhYiBhIGhhbmRsZSB0byB0aGUgU1FMaXRlIGRiIGFuZCBkbyBhbnkgbmVjZXNzYXJ5IHVwZGF0ZXMKKyAgICBteSAkdXBkYXRlcjsKKyAgICAkdXBkYXRlciA9IEdJVENWUzo6dXBkYXRlci0+bmV3KCRzdGF0ZS0+e0NWU1JPT1R9LCAkc3RhdGUtPnttb2R1bGV9LCAkbG9nKTsKKyAgICAkdXBkYXRlci0+dXBkYXRlKCk7CisKKyAgICAjIGlmIG5vIGZpbGVzIHdlcmUgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIHdvcmsgb3V0IHdoYXQgZmlsZXMgd2Ugc2hvdWxkCisgICAgIyBiZSBwcm92aWRpbmcgc3RhdHVzIG9uIC4uLgorICAgIGFyZ3Nmcm9tZGlyKCR1cGRhdGVyKTsKKworICAgIG15KCRmb3VuZERpZmYpOworCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkYXJnRmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICBteSgkZmlsZW5hbWUpID0gZmlsZWNsZWFudXAoJGFyZ0ZpbGVuYW1lKTsKKworICAgICAgICBteSAoICRmaCwgJGZpbGUxLCAkZmlsZTIsICRtZXRhMSwgJG1ldGEyLCAkZmlsZWRpZmYgKTsKKworICAgICAgICBteSAkd3JldiA9IHJldnBhcnNlKCRmaWxlbmFtZSk7CisKKyAgICAgICAgIyBQcmlvcml0eSBmb3IgcmV2aXNpb24xOgorICAgICAgICAjICAxLiBGaXJzdCAtciAobWlzc2luZyBmaWxlOiBjaGVjayAtTikKKyAgICAgICAgIyAgMi4gd3JldiBmcm9tIGNsaWVudCdzIEVudHJ5IGxpbmUKKyAgICAgICAgIyAgICAgIC0gbWlzc2luZyBsaW5lL2ZpbGU6IGNoZWNrIC1OCisgICAgICAgICMgICAgICAtICIwIjogYWRkZWQgZmlsZSBub3QgY29tbWl0dGVkIChlbXB0eSBjb250ZW50cyBmb3IgcmV2MSkKKyAgICAgICAgIyAgICAgIC0gUHJlZml4ZWQgd2l0aCBkYXNoICh0byBiZSByZW1vdmVkKTogY2hlY2sgLU4KKworICAgICAgICBpZiAoIGRlZmluZWQgKCAkcmV2aXNpb24xICkgKQorICAgICAgICB7CisgICAgICAgICAgICAkbWV0YTEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUsICRyZXZpc2lvbjEpOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCBkZWZpbmVkKCR3cmV2KSAmJiAkd3JldiBuZSAiMCIgKQorICAgICAgICB7CisgICAgICAgICAgICBteSgkcm1SZXYpPSR3cmV2OworICAgICAgICAgICAgJHJtUmV2PX5zL14tLy87CisgICAgICAgICAgICAkbWV0YTEgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUsICRybVJldik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAhZGVmaW5lZCgkbWV0YTEpIHx8CisgICAgICAgICAgICAgJG1ldGExLT57ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKCAhZXhpc3RzKCRzdGF0ZS0+e29wdH17Tn0pICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZighZGVmaW5lZCgkcmV2aXNpb24xKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJFIEZpbGUgJGZpbGVuYW1lIGF0IHJldmlzaW9uICRyZXZpc2lvbjEgZG9lc24ndCBleGlzdFxuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2lmKCAhZGVmaW5lZCgkbWV0YTEpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkbWV0YTEgPSB7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPT4gJGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9PiAnMCcsCisgICAgICAgICAgICAgICAgICAgIGZpbGVoYXNoID0+ICdkZWxldGVkJworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAjIFByaW9yaXR5IGZvciByZXZpc2lvbjI6CisgICAgICAgICMgIDEuIFNlY29uZCAtciAobWlzc2luZyBmaWxlOiBjaGVjayAtTikKKyAgICAgICAgIyAgMi4gTW9kaWZpZWQgZmlsZSBjb250ZW50cyBmcm9tIGNsaWVudAorICAgICAgICAjICAzLiB3cmV2IGZyb20gY2xpZW50J3MgRW50cnkgbGluZQorICAgICAgICAjICAgICAgLSBtaXNzaW5nIGxpbmUvZmlsZTogY2hlY2sgLU4KKyAgICAgICAgIyAgICAgIC0gUHJlZml4ZWQgd2l0aCBkYXNoICh0byBiZSByZW1vdmVkKTogY2hlY2sgLU4KKworICAgICAgICAjIGlmIHdlIGhhdmUgYSBzZWNvbmQgLXIgc3dpdGNoLCB1c2UgaXQgdG9vCisgICAgICAgIGlmICggZGVmaW5lZCAoICRyZXZpc2lvbjIgKSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRtZXRhMiA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSwgJHJldmlzaW9uMik7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoZGVmaW5lZCgkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e21vZGlmaWVkX2ZpbGVuYW1lfSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICRmaWxlMiA9ICRzdGF0ZS0+e2VudHJpZXN9eyRmaWxlbmFtZX17bW9kaWZpZWRfZmlsZW5hbWV9OworCSAgICAkbWV0YTIgPSB7CisgICAgICAgICAgICAgICAgbmFtZSA9PiAkZmlsZW5hbWUsCisJICAgICAgICByZXZpc2lvbiA9PiAnMCcsCisJICAgICAgICBmaWxlaGFzaCA9PiAnbW9kaWZpZWQnCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGVsc2lmKCBkZWZpbmVkKCR3cmV2KSAmJiAoJHdyZXYhfi9eLS8pICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoIWRlZmluZWQoJHJldmlzaW9uMSkpICAjIG5vIHJldmlzaW9uIGFuZCBubyBtb2RpZmljYXRpb25zOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkbWV0YTIgPSAkdXBkYXRlci0+Z2V0bWV0YSgkZmlsZW5hbWUsICR3cmV2KTsKKyAgICAgICAgfQorICAgICAgICBpZighZGVmaW5lZCgkZmlsZTIpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoICFkZWZpbmVkKCRtZXRhMikgfHwKKyAgICAgICAgICAgICAgICAgJG1ldGEyLT57ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICFleGlzdHMoJHN0YXRlLT57b3B0fXtOfSkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIWRlZmluZWQoJHJldmlzaW9uMikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJFIEZpbGUgJGZpbGVuYW1lIGF0IHJldmlzaW9uICRyZXZpc2lvbjIgZG9lc24ndCBleGlzdFxuIjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNpZiggIWRlZmluZWQoJG1ldGEyKSApCisgICAgICAgICAgICAgICAgeworCSAgICAgICAgICAgICRtZXRhMiA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPT4gJGZpbGVuYW1lLAorCSAgICAgICAgICAgICAgICByZXZpc2lvbiA9PiAnMCcsCisJICAgICAgICAgICAgICAgIGZpbGVoYXNoID0+ICdkZWxldGVkJworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCAkbWV0YTEtPntmaWxlaGFzaH0gZXEgJG1ldGEyLT57ZmlsZWhhc2h9ICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+aW5mbygidW5jaGFuZ2VkICRmaWxlbmFtZSIpOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAgICMgUmV0cmlldmUgcmV2aXNpb24gY29udGVudHM6CisgICAgICAgICggdW5kZWYsICRmaWxlMSApID0gdGVtcGZpbGUoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCApOworICAgICAgICB0cmFuc21pdGZpbGUoJG1ldGExLT57ZmlsZWhhc2h9LCB7IHRhcmdldGZpbGUgPT4gJGZpbGUxIH0pOworCisgICAgICAgIGlmKCFkZWZpbmVkKCRmaWxlMikpCisgICAgICAgIHsKKyAgICAgICAgICAgICggdW5kZWYsICRmaWxlMiApID0gdGVtcGZpbGUoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCApOworICAgICAgICAgICAgdHJhbnNtaXRmaWxlKCRtZXRhMi0+e2ZpbGVoYXNofSwgeyB0YXJnZXRmaWxlID0+ICRmaWxlMiB9KTsKKyAgICAgICAgfQorCisgICAgICAgICMgR2VuZXJhdGUgdGhlIGFjdHVhbCBkaWZmOgorICAgICAgICBwcmludCAiTSBJbmRleDogJGFyZ0ZpbGVuYW1lXG4iOworICAgICAgICBwcmludCAiTSA9PT09PT09IiAuICggIj0iIHggNjAgKSAuICJcbiI7CisgICAgICAgIHByaW50ICJNIFJDUyBmaWxlOiAkc3RhdGUtPntDVlNST09UfS8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZSx2XG4iOworICAgICAgICBpZiAoIGRlZmluZWQgKCAkbWV0YTEgKSAmJiAkbWV0YTEtPntyZXZpc2lvbn0gbmUgIjAiICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIk0gcmV0cmlldmluZyByZXZpc2lvbiAkbWV0YTEtPntyZXZpc2lvbn1cbiIKKyAgICAgICAgfQorICAgICAgICBpZiAoIGRlZmluZWQgKCAkbWV0YTIgKSAmJiAkbWV0YTItPntyZXZpc2lvbn0gbmUgIjAiICkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIk0gcmV0cmlldmluZyByZXZpc2lvbiAkbWV0YTItPntyZXZpc2lvbn1cbiIKKyAgICAgICAgfQorICAgICAgICBwcmludCAiTSBkaWZmICI7CisgICAgICAgIGZvcmVhY2ggbXkgJG9wdCAoIHNvcnQga2V5cyAleyRzdGF0ZS0+e29wdH19ICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCByZWYgJHN0YXRlLT57b3B0fXskb3B0fSBlcSAiQVJSQVkiICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3JlYWNoIG15ICR2YWx1ZSAoIEB7JHN0YXRlLT57b3B0fXskb3B0fX0gKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIi0kb3B0ICR2YWx1ZSAiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnQgIi0kb3B0ICI7CisgICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkICggJHN0YXRlLT57b3B0fXskb3B0fSApICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIkc3RhdGUtPntvcHR9eyRvcHR9ICIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcHJpbnQgIiRhcmdGaWxlbmFtZVxuIjsKKworICAgICAgICAkbG9nLT5pbmZvKCJEaWZmaW5nICRmaWxlbmFtZSAtciAkbWV0YTEtPntyZXZpc2lvbn0gLXIgIiAuCisgICAgICAgICAgICAgICAgICAgKCAkbWV0YTItPntyZXZpc2lvbn0gb3IgIndvcmtpbmdjb3B5IiApKTsKKworICAgICAgICAjIFRPRE86IFVzZSAtLWxhYmVsIGluc3RlYWQgb2YgLUwgYmVjYXVzZSAtTCBpcyBubyBsb25nZXIKKyAgICAgICAgIyAgZG9jdW1lbnRlZCBhbmQgbWF5IGdvIGF3YXkgc29tZWRheS4gIE5vdCBzdXJlIGlmIHRoZXJlIHRoZXJlIGFyZQorICAgICAgICAjICB2ZXJzaW9ucyB0aGF0IG9ubHkgc3VwcG9ydCAtTCwgd2hpY2ggd291bGQgbWFrZSB0aGlzIGNoYW5nZSByaXNreT8KKyAgICAgICAgIyAgaHR0cDovL29zZGlyLmNvbS9tbC9idWctZ251LXV0aWxzLWdudS8yMDEwLTEyL21zZzAwMDYwLmh0bWwKKyAgICAgICAgIyAgICAoIm1hbiBkaWZmIiBzaG91bGQgYWN0dWFsbHkgZG9jdW1lbnQgdGhlIGJlc3QgbWlncmF0aW9uIHN0cmF0ZWd5LAorICAgICAgICAjICBbY3VycmVudCBiZWhhdmlvciwgZnV0dXJlIGNoYW5nZXMsIG9sZCBjb21wYXRpYmlsaXR5IGlzc3VlcworICAgICAgICAjICBvciBsYWNrIHRoZXJlb2YsIGV0Y10sIG5vdCBqdXN0IHN0b3AgbWVudGlvbmluZyB0aGUgb3B0aW9uLi4uKQorICAgICAgICAjIFRPRE86IFJlYWwgQ1ZTIHNlZW1zIHRvIGluY2x1ZGUgYSBkYXRlIGluIHRoZSBsYWJlbCwgYmVmb3JlCisgICAgICAgICMgIHRoZSByZXZpc2lvbiBwYXJ0LCB3aXRob3V0IHRoZSBrZXl3b3JkICJyZXZpc2lvbiIuICBUaGUgZm9sbG93aW5nCisgICAgICAgICMgIGhhcyBtaW5pbWFsIGNoYW5nZXMgY29tcGFyZWQgdG8gb3JpZ2luYWwgdmVyc2lvbnMgb2YKKyAgICAgICAgIyAgZ2l0LWN2c3NlcnZlci5wZXJsLiAgKE1vc3RseSB0YWIgdnMgc3BhY2UgYWZ0ZXIgZmlsZW5hbWUuKQorCisgICAgICAgIG15IChAZGlmZkNtZCkgPSAoICdkaWZmJyApOworICAgICAgICBpZiAoIGV4aXN0cygkc3RhdGUtPntvcHR9e059KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2ggQGRpZmZDbWQsIi1OIjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIGV4aXN0cyAkc3RhdGUtPntvcHR9e3V9ICkKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaCBAZGlmZkNtZCwoIi11IiwiLUwiKTsKKyAgICAgICAgICAgIGlmKCAkbWV0YTEtPntmaWxlaGFzaH0gZXEgImRlbGV0ZWQiICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdXNoIEBkaWZmQ21kLCIvZGV2L251bGwiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoIEBkaWZmQ21kLCgiJGFyZ0ZpbGVuYW1lXHRyZXZpc2lvbiAkbWV0YTEtPntyZXZpc2lvbn0iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoIGRlZmluZWQoJG1ldGEyLT57ZmlsZWhhc2h9KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYoICRtZXRhMi0+e2ZpbGVoYXNofSBlcSAiZGVsZXRlZCIgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaCBAZGlmZkNtZCwoIi1MIiwiL2Rldi9udWxsIik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaCBAZGlmZkNtZCwoIi1MIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiRhcmdGaWxlbmFtZVx0cmV2aXNpb24gJG1ldGEyLT57cmV2aXNpb259Iik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoIEBkaWZmQ21kLCgiLUwiLCIkYXJnRmlsZW5hbWVcdHdvcmtpbmcgY29weSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHB1c2ggQGRpZmZDbWQsKCRmaWxlMSwkZmlsZTIpOworICAgICAgICBpZighb3BlbihESUZGLCItfCIsQGRpZmZDbWQpKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJVbmFibGUgdG8gcnVuIGRpZmY6ICQhIik7CisgICAgICAgIH0KKyAgICAgICAgbXkoJGRpZmZMaW5lKTsKKyAgICAgICAgd2hpbGUoZGVmaW5lZCgkZGlmZkxpbmU9PERJRkY+KSkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnQgIk0gJGRpZmZMaW5lIjsKKyAgICAgICAgICAgICRmb3VuZERpZmY9MTsKKyAgICAgICAgfQorICAgICAgICBjbG9zZShESUZGKTsKKyAgICB9CisKKyAgICBpZigkZm91bmREaWZmKQorICAgIHsKKyAgICAgICAgcHJpbnQgImVycm9yICBcbiI7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHByaW50ICJva1xuIjsKKyAgICB9Cit9CisKK3N1YiByZXFfbG9nCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICBhcmdzcGxpdCgibG9nIik7CisKKyAgICAkbG9nLT5kZWJ1ZygicmVxX2xvZyA6ICIgLiAoIGRlZmluZWQoJGRhdGEpID8gJGRhdGEgOiAiW05VTExdIiApKTsKKyAgICAjJGxvZy0+ZGVidWcoImxvZyBzdGF0ZSA6ICIgLiBEdW1wZXIoJHN0YXRlKSk7CisKKyAgICBteSAoICRyZXZGaWx0ZXIgKTsKKyAgICBpZiAoIGRlZmluZWQgKCAkc3RhdGUtPntvcHR9e3J9ICkgKQorICAgIHsKKyAgICAgICAgJHJldkZpbHRlciA9ICRzdGF0ZS0+e29wdH17cn07CisgICAgfQorCisgICAgIyBHcmFiIGEgaGFuZGxlIHRvIHRoZSBTUUxpdGUgZGIgYW5kIGRvIGFueSBuZWNlc3NhcnkgdXBkYXRlcworICAgIG15ICR1cGRhdGVyOworICAgICR1cGRhdGVyID0gR0lUQ1ZTOjp1cGRhdGVyLT5uZXcoJHN0YXRlLT57Q1ZTUk9PVH0sICRzdGF0ZS0+e21vZHVsZX0sICRsb2cpOworICAgICR1cGRhdGVyLT51cGRhdGUoKTsKKworICAgICMgaWYgbm8gZmlsZXMgd2VyZSBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gd29yayBvdXQgd2hhdCBmaWxlcyB3ZQorICAgICMgc2hvdWxkIGJlIHByb3ZpZGluZyBzdGF0dXMgb24gLi4uCisgICAgYXJnc2Zyb21kaXIoJHVwZGF0ZXIpOworCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICAkZmlsZW5hbWUgPSBmaWxlY2xlYW51cCgkZmlsZW5hbWUpOworCisgICAgICAgIG15ICRoZWFkbWV0YSA9ICR1cGRhdGVyLT5nZXRtZXRhKCRmaWxlbmFtZSk7CisKKyAgICAgICAgbXkgKCRyZXZpc2lvbnMsJHRvdGFscmV2aXNpb25zKSA9ICR1cGRhdGVyLT5nZXRsb2coJGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV2RmlsdGVyKTsKKworICAgICAgICBuZXh0IHVubGVzcyAoIHNjYWxhcihAJHJldmlzaW9ucykgKTsKKworICAgICAgICBwcmludCAiTSBcbiI7CisgICAgICAgIHByaW50ICJNIFJDUyBmaWxlOiAkc3RhdGUtPntDVlNST09UfS8kc3RhdGUtPnttb2R1bGV9LyRmaWxlbmFtZSx2XG4iOworICAgICAgICBwcmludCAiTSBXb3JraW5nIGZpbGU6ICRmaWxlbmFtZVxuIjsKKyAgICAgICAgcHJpbnQgIk0gaGVhZDogJGhlYWRtZXRhLT57cmV2aXNpb259XG4iOworICAgICAgICBwcmludCAiTSBicmFuY2g6XG4iOworICAgICAgICBwcmludCAiTSBsb2Nrczogc3RyaWN0XG4iOworICAgICAgICBwcmludCAiTSBhY2Nlc3MgbGlzdDpcbiI7CisgICAgICAgIHByaW50ICJNIHN5bWJvbGljIG5hbWVzOlxuIjsKKyAgICAgICAgcHJpbnQgIk0ga2V5d29yZCBzdWJzdGl0dXRpb246IGt2XG4iOworICAgICAgICBwcmludCAiTSB0b3RhbCByZXZpc2lvbnM6ICR0b3RhbHJldmlzaW9ucztcdHNlbGVjdGVkIHJldmlzaW9uczogIiAuCisgICAgICAgICAgICAgIHNjYWxhcihAJHJldmlzaW9ucykgLiAiXG4iOworICAgICAgICBwcmludCAiTSBkZXNjcmlwdGlvbjpcbiI7CisKKyAgICAgICAgZm9yZWFjaCBteSAkcmV2aXNpb24gKCBAJHJldmlzaW9ucyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ICJNIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisgICAgICAgICAgICBwcmludCAiTSByZXZpc2lvbiAkcmV2aXNpb24tPntyZXZpc2lvbn1cbiI7CisgICAgICAgICAgICAjIHJlZm9ybWF0IHRoZSBkYXRlIGZvciBsb2cgb3V0cHV0CisgICAgICAgICAgICBpZiAoICRyZXZpc2lvbi0+e21vZGlmaWVkfSA9fiAvKFxkKylccysoXHcrKVxzKyhcZCspXHMrKFxTKykvIGFuZAorICAgICAgICAgICAgICAgICBkZWZpbmVkKCREQVRFX0xJU1QtPnskMn0pICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkcmV2aXNpb24tPnttb2RpZmllZH0gPSBzcHJpbnRmKCclMDRkLyUwMmQvJTAyZCAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQzLCAkREFURV9MSVNULT57JDJ9LCAkMSwgJDQgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICRyZXZpc2lvbi0+e2F1dGhvcn0gPSBjdnNfYXV0aG9yKCRyZXZpc2lvbi0+e2F1dGhvcn0pOworICAgICAgICAgICAgcHJpbnQgIk0gZGF0ZTogJHJldmlzaW9uLT57bW9kaWZpZWR9OyIgLgorICAgICAgICAgICAgICAgICAgIiAgYXV0aG9yOiAkcmV2aXNpb24tPnthdXRob3J9OyAgc3RhdGU6ICIgLgorICAgICAgICAgICAgICAgICAgKCAkcmV2aXNpb24tPntmaWxlaGFzaH0gZXEgImRlbGV0ZWQiID8gImRlYWQiIDogIkV4cCIgKSAuCisgICAgICAgICAgICAgICAgICAiOyAgbGluZXM6ICsyIC0zXG4iOworICAgICAgICAgICAgbXkgJGNvbW1pdG1lc3NhZ2U7CisgICAgICAgICAgICAkY29tbWl0bWVzc2FnZSA9ICR1cGRhdGVyLT5jb21taXRtZXNzYWdlKCRyZXZpc2lvbi0+e2NvbW1pdGhhc2h9KTsKKyAgICAgICAgICAgICRjb21taXRtZXNzYWdlID1+IHMvXi9NIC9tZzsKKyAgICAgICAgICAgIHByaW50ICRjb21taXRtZXNzYWdlIC4gIlxuIjsKKyAgICAgICAgfQorICAgICAgICBwcmludCAiTSA9PT09PT09IiAuICggIj0iIHggNzAgKSAuICJcbiI7CisgICAgfQorCisgICAgcHJpbnQgIm9rXG4iOworfQorCitzdWIgcmVxX2Fubm90YXRlCit7CisgICAgbXkgKCAkY21kLCAkZGF0YSApID0gQF87CisKKyAgICBhcmdzcGxpdCgiYW5ub3RhdGUiKTsKKworICAgICRsb2ctPmluZm8oInJlcV9hbm5vdGF0ZSA6ICIgLiAoIGRlZmluZWQoJGRhdGEpID8gJGRhdGEgOiAiW05VTExdIiApKTsKKyAgICAjJGxvZy0+ZGVidWcoInN0YXR1cyBzdGF0ZSA6ICIgLiBEdW1wZXIoJHN0YXRlKSk7CisKKyAgICAjIEdyYWIgYSBoYW5kbGUgdG8gdGhlIFNRTGl0ZSBkYiBhbmQgZG8gYW55IG5lY2Vzc2FyeSB1cGRhdGVzCisgICAgbXkgJHVwZGF0ZXIgPSBHSVRDVlM6OnVwZGF0ZXItPm5ldygkc3RhdGUtPntDVlNST09UfSwgJHN0YXRlLT57bW9kdWxlfSwgJGxvZyk7CisgICAgJHVwZGF0ZXItPnVwZGF0ZSgpOworCisgICAgIyBpZiBubyBmaWxlcyB3ZXJlIHNwZWNpZmllZCwgd2UgbmVlZCB0byB3b3JrIG91dCB3aGF0IGZpbGVzIHdlIHNob3VsZCBiZSBwcm92aWRpbmcgYW5ub3RhdGUgb24gLi4uCisgICAgYXJnc2Zyb21kaXIoJHVwZGF0ZXIpOworCisgICAgIyB3ZSdsbCBuZWVkIGEgdGVtcG9yYXJ5IGNoZWNrb3V0IGRpcgorICAgIHNldHVwV29ya1RyZWUoKTsKKworICAgICRsb2ctPmluZm8oIlRlbXAgY2hlY2tvdXRkaXIgY3JlYXRpb24gc3VjY2Vzc2Z1bCwgYmFzaW5nIGFubm90YXRlIHNlc3Npb24gd29yayBvbiAnJHdvcmstPnt3b3JrRGlyfScsIGluZGV4IGZpbGUgaXMgJyRFTlZ7R0lUX0lOREVYX0ZJTEV9JyIpOworCisgICAgIyBmb3JlYWNoIGZpbGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgLi4uCisgICAgZm9yZWFjaCBteSAkZmlsZW5hbWUgKCBAeyRzdGF0ZS0+e2FyZ3N9fSApCisgICAgeworICAgICAgICAkZmlsZW5hbWUgPSBmaWxlY2xlYW51cCgkZmlsZW5hbWUpOworCisgICAgICAgIG15ICRtZXRhID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lKTsKKworICAgICAgICBuZXh0IHVubGVzcyAoICRtZXRhLT57cmV2aXNpb259ICk7CisKKwkjIGdldCBhbGwgdGhlIGNvbW1pdHMgdGhhdCB0aGlzIGZpbGUgd2FzIGluCisJIyBpbiBkZW5zZSBmb3JtYXQgLS0gYWthIHNraXAgZGVhZCByZXZpc2lvbnMKKyAgICAgICAgbXkgJHJldmlzaW9ucyAgID0gJHVwZGF0ZXItPmdldGhpc3RvcnlkZW5zZSgkZmlsZW5hbWUpOworCW15ICRsYXN0c2VlbmluICA9ICRyZXZpc2lvbnMtPlswXVsyXTsKKworCSMgcG9wdWxhdGUgdGhlIHRlbXBvcmFyeSBpbmRleCBiYXNlZCBvbiB0aGUgbGF0ZXN0IGNvbW1pdCB3ZXJlIHdlIHNhdworCSMgdGhlIGZpbGUgLS0gYnV0IGRvIGl0IGNoZWFwbHkgd2l0aG91dCBjaGVja2luZyBvdXQgYW55IGZpbGVzCisJIyBUT0RPOiBpZiB3ZSBnb3QgYSByZXZpc2lvbiBmcm9tIHRoZSBjbGllbnQsIHVzZSB0aGF0IGluc3RlYWQKKwkjIHRvIGxvb2sgdXAgdGhlIGNvbW1pdGhhc2ggaW4gc3FsaXRlIChzdGlsbCBnb29kIHRvIGRlZmF1bHQgdG8KKwkjIHRoZSBjdXJyZW50IGhlYWQgYXMgd2UgZG8gbm93KQorCXN5c3RlbSgiZ2l0IiwgInJlYWQtdHJlZSIsICRsYXN0c2VlbmluKTsKKwl1bmxlc3MgKCQ/ID09IDApCisJeworCSAgICBwcmludCAiRSBlcnJvciBydW5uaW5nIGdpdC1yZWFkLXRyZWUgJGxhc3RzZWVuaW4gJEVOVntHSVRfSU5ERVhfRklMRX0gJCFcbiI7CisJICAgIHJldHVybjsKKwl9CisJJGxvZy0+aW5mbygiQ3JlYXRlZCBpbmRleCAnJEVOVntHSVRfSU5ERVhfRklMRX0nIHdpdGggY29tbWl0ICRsYXN0c2VlbmluIC0gZXhpdCBzdGF0dXMgJD8iKTsKKworICAgICAgICAjIGRvIGEgY2hlY2tvdXQgb2YgdGhlIGZpbGUKKyAgICAgICAgc3lzdGVtKCdnaXQnLCAnY2hlY2tvdXQtaW5kZXgnLCAnLWYnLCAnLXUnLCAkZmlsZW5hbWUpOworICAgICAgICB1bmxlc3MgKCQ/ID09IDApIHsKKyAgICAgICAgICAgIHByaW50ICJFIGVycm9yIHJ1bm5pbmcgZ2l0LWNoZWNrb3V0LWluZGV4IC1mIC11ICRmaWxlbmFtZSA6ICQhXG4iOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgJGxvZy0+aW5mbygiQW5ub3RhdGUgJGZpbGVuYW1lIik7CisKKyAgICAgICAgIyBQcmVwYXJlIGEgZmlsZSB3aXRoIHRoZSBjb21taXRzIGZyb20gdGhlIGxpbmVhcml6ZWQKKyAgICAgICAgIyBoaXN0b3J5IHRoYXQgYW5ub3RhdGUgc2hvdWxkIGtub3cgYWJvdXQuIFRoaXMgcHJldmVudHMKKyAgICAgICAgIyBnaXQtanNhbm5vdGF0ZSB0ZWxsaW5nIHVzIGFib3V0IGNvbW1pdHMgd2UgYXJlIGhpZGluZworICAgICAgICAjIGZyb20gdGhlIGNsaWVudC4KKworICAgICAgICBteSAkYV9oaW50cyA9ICIkd29yay0+e3dvcmtEaXJ9Ly5hbm5vdGF0ZV9oaW50cyI7CisgICAgICAgIGlmICghb3BlbihBTk5PVEFURUhJTlRTLCAnPicsICRhX2hpbnRzKSkgeworICAgICAgICAgICAgcHJpbnQgIkUgZmFpbGVkIHRvIG9wZW4gJyRhX2hpbnRzJyBmb3Igd3JpdGluZzogJCFcbiI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yIChteSAkaT0wOyAkaSA8IEAkcmV2aXNpb25zOyAkaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludCBBTk5PVEFURUhJTlRTICRyZXZpc2lvbnMtPlskaV1bMl07CisgICAgICAgICAgICBpZiAoJGkrMSA8IEAkcmV2aXNpb25zKSB7ICMgaGF2ZSB3ZSBnb3QgYSBwYXJlbnQ/CisgICAgICAgICAgICAgICAgcHJpbnQgQU5OT1RBVEVISU5UUyAnICcgLiAkcmV2aXNpb25zLT5bJGkrMV1bMl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludCBBTk5PVEFURUhJTlRTICJcbiI7CisgICAgICAgIH0KKworICAgICAgICBwcmludCBBTk5PVEFURUhJTlRTICJcbiI7CisgICAgICAgIGNsb3NlIEFOTk9UQVRFSElOVFMKKyAgICAgICAgICAgIG9yIChwcmludCAiRSBmYWlsZWQgdG8gd3JpdGUgJGFfaGludHM6ICQhXG4iKSwgcmV0dXJuOworCisgICAgICAgIG15IEBjbWQgPSAocXcoZ2l0IGFubm90YXRlIC1sIC1TKSwgJGFfaGludHMsICRmaWxlbmFtZSk7CisgICAgICAgIGlmICghb3BlbihBTk5PVEFURSwgIi18IiwgQGNtZCkpIHsKKyAgICAgICAgICAgIHByaW50ICJFIGVycm9yIGludm9raW5nICIuIGpvaW4oJyAnLEBjbWQpIC4iOiAkIVxuIjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBteSAkbWV0YWRhdGEgPSB7fTsKKyAgICAgICAgcHJpbnQgIkUgQW5ub3RhdGlvbnMgZm9yICRmaWxlbmFtZVxuIjsKKyAgICAgICAgcHJpbnQgIkUgKioqKioqKioqKioqKioqXG4iOworICAgICAgICB3aGlsZSAoIDxBTk5PVEFURT4gKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobS9eKFthLXpBLVowLTldezQwfSlcdFwoW15cKV0qXCkoLiopJC9pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG15ICRjb21taXRoYXNoID0gJDE7CisgICAgICAgICAgICAgICAgbXkgJGRhdGEgPSAkMjsKKyAgICAgICAgICAgICAgICB1bmxlc3MgKCBkZWZpbmVkICggJG1ldGFkYXRhLT57JGNvbW1pdGhhc2h9ICkgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhLT57JGNvbW1pdGhhc2h9ID0gJHVwZGF0ZXItPmdldG1ldGEoJGZpbGVuYW1lLCAkY29tbWl0aGFzaCk7CisgICAgICAgICAgICAgICAgICAgICRtZXRhZGF0YS0+eyRjb21taXRoYXNofXthdXRob3J9ID0gY3ZzX2F1dGhvcigkbWV0YWRhdGEtPnskY29tbWl0aGFzaH17YXV0aG9yfSk7CisgICAgICAgICAgICAgICAgICAgICRtZXRhZGF0YS0+eyRjb21taXRoYXNofXttb2RpZmllZH0gPSBzcHJpbnRmKCIlMDJkLSVzLSUwMmQiLCAkMSwgJDIsICQzKSBpZiAoICRtZXRhZGF0YS0+eyRjb21taXRoYXNofXttb2RpZmllZH0gPX4gL14oXGQrKVxzKFx3Kylcc1xkXGQoXGRcZCkvICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHByaW50ZigiTSAlLTdzICAgICAgKCUtOHMgJTEwcyk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGEtPnskY29tbWl0aGFzaH17cmV2aXNpb259LAorICAgICAgICAgICAgICAgICAgICAkbWV0YWRhdGEtPnskY29tbWl0aGFzaH17YXV0aG9yfSwKKyAgICAgICAgICAgICAgICAgICAgJG1ldGFkYXRhLT57JGNvbW1pdGhhc2h9e21vZGlmaWVkfSwKKyAgICAgICAgICAgICAgICAgICAgJGRhdGEKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAkbG9nLT53YXJuKCJFcnJvciBpbiBhbm5vdGF0ZSBvdXRwdXQhIExJTkU6ICRfIik7CisgICAgICAgICAgICAgICAgcHJpbnQgIkUgQW5ub3RhdGUgZXJyb3IgXG4iOworICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2xvc2UgQU5OT1RBVEU7CisgICAgfQorCisgICAgIyBkb25lOyBnZXQgb3V0IG9mIHRoZSB0ZW1wZGlyCisgICAgY2xlYW51cFdvcmtUcmVlKCk7CisKKyAgICBwcmludCAib2tcbiI7CisKK30KKworIyBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc3RhdGUtPnthcmd1bWVudHN9IGFycmF5IGFuZCBwcm9kdWNlcyB0d28gbmV3IGFycmF5cy4KKyMgVGhlIGZpcnN0IGlzICRzdGF0ZS0+e2FyZ3N9IHdoaWNoIGlzIGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSAnLS0nIGFyZ3VtZW50LCBhbmQKKyMgdGhlIHNlY29uZCBpcyAkc3RhdGUtPntmaWxlc30gd2hpY2ggaXMgZXZlcnl0aGluZyBhZnRlciBpdC4KK3N1YiBhcmdzcGxpdAoreworICAgICRzdGF0ZS0+e2FyZ3N9ID0gW107CisgICAgJHN0YXRlLT57ZmlsZXN9ID0gW107CisgICAgJHN0YXRlLT57b3B0fSA9IHt9OworCisgICAgcmV0dXJuIHVubGVzcyggZGVmaW5lZCgkc3RhdGUtPnthcmd1bWVudHN9KSBhbmQgcmVmICRzdGF0ZS0+e2FyZ3VtZW50c30gZXEgIkFSUkFZIiApOworCisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKworICAgIGlmICggZGVmaW5lZCgkdHlwZSkgKQorICAgIHsKKyAgICAgICAgbXkgJG9wdCA9IHt9OworICAgICAgICAkb3B0ID0geyBBID0+IDAsIE4gPT4gMCwgUCA9PiAwLCBSID0+IDAsIGMgPT4gMCwgZiA9PiAwLCBsID0+IDAsIG4gPT4gMCwgcCA9PiAwLCBzID0+IDAsIHIgPT4gMSwgRCA9PiAxLCBkID0+IDEsIGsgPT4gMSwgaiA9PiAxLCB9IGlmICggJHR5cGUgZXEgImNvIiApOworICAgICAgICAkb3B0ID0geyB2ID0+IDAsIGwgPT4gMCwgUiA9PiAwIH0gaWYgKCAkdHlwZSBlcSAic3RhdHVzIiApOworICAgICAgICAkb3B0ID0geyBBID0+IDAsIFAgPT4gMCwgQyA9PiAwLCBkID0+IDAsIGYgPT4gMCwgbCA9PiAwLCBSID0+IDAsIHAgPT4gMCwgayA9PiAxLCByID0+IDEsIEQgPT4gMSwgaiA9PiAxLCBJID0+IDEsIFcgPT4gMSB9IGlmICggJHR5cGUgZXEgInVwZGF0ZSIgKTsKKyAgICAgICAgJG9wdCA9IHsgbCA9PiAwLCBSID0+IDAsIGsgPT4gMSwgRCA9PiAxLCBEID0+IDEsIHIgPT4gMiwgTiA9PiAwIH0gaWYgKCAkdHlwZSBlcSAiZGlmZiIgKTsKKyAgICAgICAgJG9wdCA9IHsgYyA9PiAwLCBSID0+IDAsIGwgPT4gMCwgZiA9PiAwLCBGID0+IDEsIG0gPT4gMSwgciA9PiAxIH0gaWYgKCAkdHlwZSBlcSAiY2kiICk7CisgICAgICAgICRvcHQgPSB7IGsgPT4gMSwgbSA9PiAxIH0gaWYgKCAkdHlwZSBlcSAiYWRkIiApOworICAgICAgICAkb3B0ID0geyBmID0+IDAsIGwgPT4gMCwgUiA9PiAwIH0gaWYgKCAkdHlwZSBlcSAicmVtb3ZlIiApOworICAgICAgICAkb3B0ID0geyBsID0+IDAsIGIgPT4gMCwgaCA9PiAwLCBSID0+IDAsIHQgPT4gMCwgTiA9PiAwLCBTID0+IDAsIHIgPT4gMSwgZCA9PiAxLCBzID0+IDEsIHcgPT4gMSB9IGlmICggJHR5cGUgZXEgImxvZyIgKTsKKworCisgICAgICAgIHdoaWxlICggc2NhbGFyICggQHskc3RhdGUtPnthcmd1bWVudHN9fSApID4gMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIG15ICRhcmcgPSBzaGlmdCBAeyRzdGF0ZS0+e2FyZ3VtZW50c319OworCisgICAgICAgICAgICBuZXh0IGlmICggJGFyZyBlcSAiLS0iICk7CisgICAgICAgICAgICBuZXh0IHVubGVzcyAoICRhcmcgPX4gL1xTLyApOworCisgICAgICAgICAgICAjIGlmIHRoZSBhcmd1bWVudCBsb29rcyBsaWtlIGEgc3dpdGNoCisgICAgICAgICAgICBpZiAoICRhcmcgPX4gL14tKFx3KSguKikvICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAjIGlmIGl0J3MgYSBzd2l0Y2ggdGhhdCB0YWtlcyBhbiBhcmd1bWVudAorICAgICAgICAgICAgICAgIGlmICggJG9wdC0+eyQxfSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAjIElmIHRoaXMgc3dpdGNoIGhhcyBhbHJlYWR5IGJlZW4gcHJvdmlkZWQKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAkb3B0LT57JDF9ID4gMSBhbmQgZXhpc3RzICggJHN0YXRlLT57b3B0fXskMX0gKSApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICRzdGF0ZS0+e29wdH17JDF9ID0gWyAkc3RhdGUtPntvcHR9eyQxfSBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsZW5ndGgoJDIpID4gMCApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyRzdGF0ZS0+e29wdH17JDF9fSwkMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBAeyRzdGF0ZS0+e29wdH17JDF9fSwgc2hpZnQgQHskc3RhdGUtPnthcmd1bWVudHN9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgdGhlcmUncyBleHRyYSBkYXRhIGluIHRoZSBhcmcsIHVzZSB0aGF0IGFzIHRoZSBhcmd1bWVudCBmb3IgdGhlIHN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBsZW5ndGgoJDIpID4gMCApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57b3B0fXskMX0gPSAkMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57b3B0fXskMX0gPSBzaGlmdCBAeyRzdGF0ZS0+e2FyZ3VtZW50c319OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJHN0YXRlLT57b3B0fXskMX0gPSB1bmRlZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHVzaCBAeyRzdGF0ZS0+e2FyZ3N9fSwgJGFyZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBteSAkbW9kZSA9IDA7CisKKyAgICAgICAgZm9yZWFjaCBteSAkdmFsdWUgKCBAeyRzdGF0ZS0+e2FyZ3VtZW50c319ICkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCAkdmFsdWUgZXEgIi0tIiApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJG1vZGUrKzsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVzaCBAeyRzdGF0ZS0+e2FyZ3N9fSwgJHZhbHVlIGlmICggJG1vZGUgPT0gMCApOworICAgICAgICAgICAgcHVzaCBAeyRzdGF0ZS0+e2ZpbGVzfX0sICR2YWx1ZSBpZiAoICRtb2RlID09IDEgKTsKKyAgICAgICAgfQorICAgIH0KK30KKworIyBVc2VkIGJ5IGFyZ3Nmcm9tZGlyCitzdWIgZXhwYW5kQXJnCit7CisgICAgbXkgKCR1cGRhdGVyLCRvdXROYW1lTWFwLCRvdXREaXJNYXAsJHBhdGgsJGlzRGlyKSA9IEBfOworCisgICAgbXkgJGZ1bGxQYXRoID0gZmlsZWNsZWFudXAoJHBhdGgpOworCisgICAgICAjIElzIGl0IGEgZGlyZWN0b3J5PworICAgIGlmKCBkZWZpbmVkKCRzdGF0ZS0+e2Rpck1hcH17JGZ1bGxQYXRofSkgfHwKKyAgICAgICAgZGVmaW5lZCgkc3RhdGUtPntkaXJNYXB9eyIkZnVsbFBhdGgvIn0pICkKKyAgICB7CisgICAgICAgICAgIyBJdCBpcyBhIGRpcmVjdG9yeSBpbiB0aGUgdXNlcidzIHNhbmRib3guCisgICAgICAgICRpc0Rpcj0xOworCisgICAgICAgIGlmKGRlZmluZWQoJHN0YXRlLT57ZW50cmllc317JGZ1bGxQYXRofSkpCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPmZhdGFsKCJJbmNvbnNpc3RlbnQgZmlsZS9kaXIgdHlwZSIpOworICAgICAgICAgICAgZGllICJJbmNvbnNpc3RlbnQgZmlsZS9kaXIgdHlwZSI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzaWYoZGVmaW5lZCgkc3RhdGUtPntlbnRyaWVzfXskZnVsbFBhdGh9KSkKKyAgICB7CisgICAgICAgICAgIyBJdCBpcyBhIGZpbGUgaW4gdGhlIHVzZXIncyBzYW5kYm94LgorICAgICAgICAkaXNEaXI9MDsKKyAgICB9CisgICAgbXkoJHJldkRpck1hcCwkb3RoZXJSZXZEaXJNYXApOworICAgIGlmKCFkZWZpbmVkKCRpc0RpcikgfHwgJGlzRGlyKQorICAgIHsKKyAgICAgICAgICAjIFJlc29sdmUgdmVyc2lvbiB0cmVlIGZvciBzdGlja3kgdGFnOgorICAgICAgICAgICMgKGZvciBub3cgd2Ugb25seSB3YW50IGxpc3Qgb2YgZmlsZXMgZm9yIHRoZSB2ZXJzaW9uLCBub3QKKyAgICAgICAgICAjIHBhcnRpY3VsYXIgdmVyc2lvbnMgb2YgdGhvc2UgZmlsZXM6IGFzc3VtZSBpdCBpcyBhIGRpcmVjdG9yeQorICAgICAgICAgICMgZm9yIHRoZSBtb21lbnQ7IGlnbm9yZSBFbnRyeSdzIHN0aWNrIHRhZykKKworICAgICAgICAgICMgT3JkZXIgb2YgcHJlY2VkZW5jZSBvZiBzdGlja3kgdGFnczoKKyAgICAgICAgICAjICAgIC1BICAgICAgIFtoZWFkXQorICAgICAgICAgICMgICAgLXIgL3RhZy8KKyAgICAgICAgICAjICAgIFtmaWxlIGVudHJ5IHN0aWNreSB0YWcsIGJ1dCB0aGF0IGlzIG9ubHkgcmVsZXZhbnQgdG8gZmlsZXNdCisgICAgICAgICAgIyAgICBbdGhlIHRhZyBzcGVjaWZpZWQgaW4gZGlyIHJlcV9TdGlja3ldCisgICAgICAgICAgIyAgICBbdGhlIHRhZyBzcGVjaWZpZWQgaW4gYSBwYXJlbnQgZGlyIHJlcV9TdGlja3ldCisgICAgICAgICAgIyAgICBbaGVhZF0KKyAgICAgICAgICAjIEFsc28sIC1yIG1heSBhcHBlYXIgdHdpY2UgKGZvciBkaWZmKS4KKyAgICAgICAgICAjCisgICAgICAgICAgIyBGVVRVUkU6IFdoZW4vaWYgLWogKG1lcmdlcykgYXJlIHN1cHBvcnRlZCwgd2UgYWxzbworICAgICAgICAgICMgIG5lZWQgdG8gYWRkIHJlbGV2YW50IGZpbGVzIGZyb20gb25lIG9yIHR3bworICAgICAgICAgICMgIHZlcnNpb25zIHNwZWNpZmllZCB3aXRoIC1qLgorCisgICAgICAgIGlmKGV4aXN0cygkc3RhdGUtPntvcHR9e0F9KSkKKyAgICAgICAgeworICAgICAgICAgICAgJHJldkRpck1hcD0kdXBkYXRlci0+Z2V0UmV2aXNpb25EaXJNYXAoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiggZGVmaW5lZCgkc3RhdGUtPntvcHR9e3J9KSBhbmQKKyAgICAgICAgICAgICAgIHJlZiAkc3RhdGUtPntvcHR9e3J9IGVxICJBUlJBWSIgKQorICAgICAgICB7CisgICAgICAgICAgICAkcmV2RGlyTWFwPSR1cGRhdGVyLT5nZXRSZXZpc2lvbkRpck1hcCgkc3RhdGUtPntvcHR9e3J9WzBdKTsKKyAgICAgICAgICAgICRvdGhlclJldkRpck1hcD0kdXBkYXRlci0+Z2V0UmV2aXNpb25EaXJNYXAoJHN0YXRlLT57b3B0fXtyfVsxXSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYoZGVmaW5lZCgkc3RhdGUtPntvcHR9e3J9KSkKKyAgICAgICAgeworICAgICAgICAgICAgJHJldkRpck1hcD0kdXBkYXRlci0+Z2V0UmV2aXNpb25EaXJNYXAoJHN0YXRlLT57b3B0fXtyfSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBteSgkc3RpY2t5KT1nZXREaXJTdGlja3lJbmZvKCRmdWxsUGF0aCk7CisgICAgICAgICAgICAkcmV2RGlyTWFwPSR1cGRhdGVyLT5nZXRSZXZpc2lvbkRpck1hcCgkc3RpY2t5LT57dGFnfSk7CisgICAgICAgIH0KKworICAgICAgICAgICMgSXMgaXQgYSBkaXJlY3Rvcnk/CisgICAgICAgIGlmKCBkZWZpbmVkKCRyZXZEaXJNYXAtPnskZnVsbFBhdGh9KSB8fAorICAgICAgICAgICAgZGVmaW5lZCgkb3RoZXJSZXZEaXJNYXAtPnskZnVsbFBhdGh9KSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRpc0Rpcj0xOworICAgICAgICB9CisgICAgfQorCisgICAgICAjIFdoYXQgdG8gZG8gd2l0aCBpdD8KKyAgICBpZighJGlzRGlyKQorICAgIHsKKyAgICAgICAgJG91dE5hbWVNYXAtPnskZnVsbFBhdGh9PTE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgICRvdXREaXJNYXAtPnskZnVsbFBhdGh9PTE7CisKKyAgICAgICAgaWYoZGVmaW5lZCgkcmV2RGlyTWFwLT57JGZ1bGxQYXRofSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZERpck1hcEZpbGVzKCR1cGRhdGVyLCRvdXROYW1lTWFwLCRvdXREaXJNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV2RGlyTWFwLT57JGZ1bGxQYXRofSk7CisgICAgICAgIH0KKyAgICAgICAgaWYoIGRlZmluZWQoJG90aGVyUmV2RGlyTWFwKSAmJgorICAgICAgICAgICAgZGVmaW5lZCgkb3RoZXJSZXZEaXJNYXAtPnskZnVsbFBhdGh9KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZERpck1hcEZpbGVzKCR1cGRhdGVyLCRvdXROYW1lTWFwLCRvdXREaXJNYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3RoZXJSZXZEaXJNYXAtPnskZnVsbFBhdGh9KTsKKyAgICAgICAgfQorICAgIH0KK30KKworIyBVc2VkIGJ5IGFyZ3Nmcm9tZGlyCisjIEFkZCBlbnRyaWVzIGZyb20gZGlyTWFwIHRvIG91dE5hbWVNYXAuICBBbHNvIHJlY3Vyc2UgaW50byBlbnRyaWVzCisjIHRoYXQgYXJlIHN1YmRpcmVjdG9yaWVzLgorc3ViIGFkZERpck1hcEZpbGVzCit7CisgICAgbXkoJHVwZGF0ZXIsJG91dE5hbWVNYXAsJG91dERpck1hcCwkZGlyTWFwKT1AXzsKKworICAgIG15KCRmdWxsTmFtZSk7CisgICAgZm9yZWFjaCAkZnVsbE5hbWUgKGtleXMoJSRkaXJNYXApKQorICAgIHsKKyAgICAgICAgbXkgJGNsZWFuTmFtZT0kZnVsbE5hbWU7CisgICAgICAgIGlmKGRlZmluZWQoJHN0YXRlLT57cHJlcGVuZGRpcn0pKQorICAgICAgICB7CisgICAgICAgICAgICBpZighKCRjbGVhbk5hbWU9fnMvXlxRJHN0YXRlLT57cHJlcGVuZGRpcn1cRS8vKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAkbG9nLT5mYXRhbCgiaW50ZXJuYWwgZXJyb3Igc3RyaXBwaW5nIHByZXBlbmRkaXIiKTsKKyAgICAgICAgICAgICAgICBkaWUgImludGVybmFsIGVycm9yIHN0cmlwcGluZyBwcmVwZW5kZGlyIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCRkaXJNYXAtPnskZnVsbE5hbWV9IGVxICJGIikKKyAgICAgICAgeworICAgICAgICAgICAgJG91dE5hbWVNYXAtPnskY2xlYW5OYW1lfT0xOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCRkaXJNYXAtPnskZnVsbE5hbWV9IGVxICJEIikKKyAgICAgICAgeworICAgICAgICAgICAgaWYoISRzdGF0ZS0+e29wdH17bH0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZXhwYW5kQXJnKCR1cGRhdGVyLCRvdXROYW1lTWFwLCRvdXREaXJNYXAsJGNsZWFuTmFtZSwxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPmZhdGFsKCJpbnRlcm5hbCBlcnJvciBpbiBhZGREaXJNYXBGaWxlcyIpOworICAgICAgICAgICAgZGllICJpbnRlcm5hbCBlcnJvciBpbiBhZGREaXJNYXBGaWxlcyI7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyMgVGhpcyBtZXRob2QgcmVwbGFjZXMgJHN0YXRlLT57YXJnc30gd2l0aCBhIGRpcmVjdG9yeS1leHBhbmRlZAorIyBsaXN0IG9mIGFsbCByZWxldmFudCBmaWxlbmFtZXMgKHJlY3Vyc2l2ZWx5IHVubGVzcyAtZCksIGJhc2VkCisjIG9uICRzdGF0ZS0+e2VudHJpZXN9LCBhbmQgdGhlICJjdXJyZW50IiBsaXN0IG9mIGZpbGVzIGluCisjIGVhY2ggZGlyZWN0b3J5LiAgIkN1cnJlbnQiIGZpbGVzIGFzIGRldGVybWluZWQgYnkKKyMgZWl0aGVyIHRoZSByZXF1ZXN0ZWQgKC1yLy1BKSBvciAicmVxX1N0aWNreSIgdmVyc2lvbiBvZgorIyB0aGF0IGRpcmVjdG9yeS4KKyMgICAgQm90aCB0aGUgaW5wdXQgYXJncyBhbmQgdGhlIG5ldyBvdXRwdXQgYXJncyBhcmUgcmVsYXRpdmUKKyMgdG8gdGhlIGN2cy1jbGllbnQncyBDV0QsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGludGVybmFsCisjIGNvbXB1dGF0aW9ucyBhcmUgcmVsYXRpdmUgdG8gdGhlIHRvcCBvZiB0aGUgcHJvamVjdC4KK3N1YiBhcmdzZnJvbWRpcgoreworICAgIG15ICR1cGRhdGVyID0gc2hpZnQ7CisKKyAgICAjIE5vdGVzIGFib3V0IHJlcXVpcmVtZW50cyBmb3Igc3BlY2lmaWMgY2FsbGVyczoKKyAgICAjICAgdXBkYXRlICMgInN0YW5kYXJkIiBjYXNlIChlbnRyaWVzOyBhIHNpbmdsZSAtci8tQS9kZWZhdWx0OyAtbCkKKyAgICAjICAgICAgICAgICMgU3BlY2lhbCBjYXNlOiAtZCBmb3IgY3JlYXRlIG1pc3NpbmcgZGlyZWN0b3JpZXMuCisgICAgIyAgIGRpZmYgIyAwIG9yIDEgLXInczogInN0YW5kYXJkIiBjYXNlLgorICAgICMgICAgICAgICMgMiAtcidzOiBXZSBjb3VsZCBpZ25vcmUgZW50cmllcyAoanVzdCB1c2UgdGhlIHR3byAtcidzKSwKKyAgICAjICAgICAgICAjIGJ1dCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIuCisgICAgIyAgIGFubm90YXRlICMgInN0YW5kYXJkIiBjYXNlCisgICAgIyAgIGxvZyAjIFB1bnRpbmc6IGxvZyAtciBoYXMgYSBtb3JlIGNvbXBsZXggbm9uLSJzdGFuZGFyZCIKKyAgICAjICAgICAgICMgbWVhbmluZywgYW5kIHdlIGRvbid0IGN1cnJlbnRseSB0cnkgdG8gc3VwcG9ydCBsb2cnaW5nCisgICAgIyAgICAgICAjIGJyYW5jaGVzIGF0IGFsbCAobmVlZCBhIGxvdCBvZiB3b3JrIHRvCisgICAgIyAgICAgICAjIHN1cHBvcnQgQ1ZTLWNvbnNpc3RlbnQgYnJhbmNoIHJlbGF0aXZlIHZlcnNpb24KKyAgICAjICAgICAgICMgbnVtYmVyaW5nKS4KKyNIRVJFOiBCdXQgd2Ugc3RpbGwgd2FudCB0byBleHBhbmQgZGlyZWN0b3JpZXMuICBNYXliZSB3ZSBzaG91bGQKKyMgIGVzc2VudGlhbGx5IGZvcmNlICItQSIuCisgICAgIyAgIHN0YXR1cyAjICJzdGFuZGFyZCIsIGV4Y2VwdCB0aGF0IC1yLy1BL2RlZmF1bHQgYXJlIG5vdCBwb3NzaWJsZS4KKyAgICAjICAgICAgICAgICMgTW9zdGx5IG9ubHkgdXNlZCB0byBleHBhbmQgZW50cmllcyBvbmx5KQorICAgICMKKyAgICAjIERvbid0IHVzZSBhcmdzZnJvbWRpciBhdCBhbGw6CisgICAgIyAgIGFkZCAjIEV4cGxpY2l0IGFyZ3VtZW50cyByZXF1aXJlZC4gIERpcmVjdG9yeSBhcmdzIGltcGx5IGFkZAorICAgICMgICAgICAgIyB0aGUgZGlyZWN0b3J5IGl0c2VsZiwgbm90IHRoZSBmaWxlcyBpbiBpdC4KKyAgICAjICAgY28gICMgT2J0YWluIGxpc3QgZGlyZWN0bHkuCisgICAgIyAgIHJlbW92ZSAjIEhFUkU6IFRFU1Q6IE1BWUJFIGNsaWVudCBkb2VzIHRoZSByZWN1cnNpb24gZm9yIHVzLAorICAgICMgICAgICAgICAgIyBzaW5jZSBpdCBvbmx5IG1ha2VzIHNlbnNlIHRvIHJlbW92ZSBzdHVmZiBhbHJlYWR5IGluCisgICAgIyAgICAgICAgICAjIHRoZSBzYW5kb2J4PworICAgICMgICBjaSAjIEhFUkU6IFNpbWlsYXIgdG8gcmVtb3ZlLi4uCisgICAgIyAgICAgICMgRG9uJ3QgdHJ5IHRvIGltcGxlbWVudCB0aGUgY29uZnVzaW5nL3dlaXJkCisgICAgIyAgICAgICMgY2kgLXIgYnVnIGVyLi4iZmVhdHVyZSIuCisKKyAgICBpZihzY2FsYXIoQHskc3RhdGUtPnthcmdzfX0pPT0wKQorICAgIHsKKyAgICAgICAgJHN0YXRlLT57YXJnc30gPSBbICIuIiBdOworICAgIH0KKyAgICBteSAlYWxsQXJnczsKKyAgICBteSAlYWxsRGlyczsKKyAgICBmb3IgbXkgJGZpbGUgKEB7JHN0YXRlLT57YXJnc319KQorICAgIHsKKyAgICAgICAgZXhwYW5kQXJnKCR1cGRhdGVyLFwlYWxsQXJncyxcJWFsbERpcnMsJGZpbGUpOworICAgIH0KKworICAgICMgSW5jbHVkZSBhbnkgZW50cmllcyBmcm9tIHNhbmRib3guICBHZW5lcmFsbHkgY2xpZW50IHdvbid0CisgICAgIyBzZW5kIGVudHJpZXMgdGhhdCBzaG91bGRuJ3QgYmUgdXNlZC4KKyAgICBmb3JlYWNoIG15ICRmaWxlIChrZXlzICV7JHN0YXRlLT57ZW50cmllc319KQorICAgIHsKKyAgICAgICAgJGFsbEFyZ3N7cmVtb3ZlX3ByZXBlbmRkaXIoJGZpbGUpfSA9IDE7CisgICAgfQorCisgICAgJHN0YXRlLT57ZGlyQXJnc30gPSBcJWFsbERpcnM7CisgICAgJHN0YXRlLT57YXJnc30gPSBbCisgICAgICAgIHNvcnQgeworICAgICAgICAgICAgICAgICMgU29ydCBwcmlvcml0eTogYnkgZGlyZWN0b3J5IGRlcHRoLCB0aGVuIGFjdHVhbCBmaWxlIG5hbWU6CisgICAgICAgICAgICBteSBAcGllY2VzQT1zcGxpdCgnLycsJGEpOworICAgICAgICAgICAgbXkgQHBpZWNlc0I9c3BsaXQoJy8nLCRiKTsKKworICAgICAgICAgICAgbXkgJGNvdW50PXNjYWxhcihAcGllY2VzQSk7CisgICAgICAgICAgICBteSAkdG1wPXNjYWxhcihAcGllY2VzQik7CisgICAgICAgICAgICByZXR1cm4gJGNvdW50PD0+JHRtcCBpZigkY291bnQhPSR0bXApOworCisgICAgICAgICAgICBmb3IoJHRtcD0wOyR0bXA8JGNvdW50OyR0bXArKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigkcGllY2VzQVskdG1wXSBuZSAkcGllY2VzQlskdG1wXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAkcGllY2VzQVskdG1wXSBjbXAgJHBpZWNlc0JbJHRtcF0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBrZXlzKCVhbGxBcmdzKSBdOworfQorCisjIyBsb29rIHVwIGRpcmVjdG9yeSBzdGlja3kgdGFnLCBvZiBlaXRoZXIgZnVsbFBhdGggb3IgYSBwYXJlbnQ6CitzdWIgZ2V0RGlyU3RpY2t5SW5mbworeworICAgIG15KCRmdWxsUGF0aCk9QF87CisKKyAgICAkZnVsbFBhdGg9fnMlLyskJSU7CisgICAgd2hpbGUoJGZ1bGxQYXRoIG5lICIiICYmICFkZWZpbmVkKCRzdGF0ZS0+e2Rpck1hcH17IiRmdWxsUGF0aC8ifSkpCisgICAgeworICAgICAgICAkZnVsbFBhdGg9fnMlLz9bXi9dKiQlJTsKKyAgICB9CisKKyAgICBpZiggIWRlZmluZWQoJHN0YXRlLT57ZGlyTWFwfXsiJGZ1bGxQYXRoLyJ9KSAmJgorICAgICAgICAoICRmdWxsUGF0aCBlcSAiIiB8fAorICAgICAgICAgICRmdWxsUGF0aCBlcSAiLiIgKSApCisgICAgeworICAgICAgICByZXR1cm4gJHN0YXRlLT57ZGlyTWFwfXsiIn17c3RpY2t5SW5mb307CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiAkc3RhdGUtPntkaXJNYXB9eyIkZnVsbFBhdGgvIn17c3RpY2t5SW5mb307CisgICAgfQorfQorCisjIFJlc29sdmUgcHJlY2VkZW5jZSBvZiB2YXJpb3VzIHdheXMgb2Ygc3BlY2lmeWluZyB3aGljaCB2ZXJzaW9uIG9mCisjIGEgZmlsZSB5b3Ugd2FudC4gIFJldHVybnMgdW5kZWYgKGZvciBkZWZhdWx0IGhlYWQpLCBvciBhIHJlZiB0byBhIGhhc2gKKyMgdGhhdCBjb250YWlucyAidGFnIiBhbmQvb3IgImRhdGUiIGtleXMuCitzdWIgcmVzb2x2ZVN0aWNreUluZm8KK3sKKyAgICBteSgkZmlsZW5hbWUsJHN0aWNreVRhZywkc3RpY2t5RGF0ZSwkcmVzZXQpID0gQF87CisKKyAgICAjIE9yZGVyIG9mIHByZWNlZGVuY2Ugb2Ygc3RpY2t5IHRhZ3M6CisgICAgIyAgICAtQSAgICAgICBbaGVhZF0KKyAgICAjICAgIC1yIC90YWcvCisgICAgIyAgICBbZmlsZSBlbnRyeSBzdGlja3kgdGFnXQorICAgICMgICAgW3RoZSB0YWcgc3BlY2lmaWVkIGluIGRpciByZXFfU3RpY2t5XQorICAgICMgICAgW3RoZSB0YWcgc3BlY2lmaWVkIGluIGEgcGFyZW50IGRpciByZXFfU3RpY2t5XQorICAgICMgICAgW2hlYWRdCisKKyAgICBteSAkcmVzdWx0OworICAgIGlmKCRyZXNldCkKKyAgICB7CisgICAgICAgICMgJHJlc3VsdD11bmRlZjsKKyAgICB9CisgICAgZWxzaWYoIGRlZmluZWQoJHN0aWNreVRhZykgJiYgJHN0aWNreVRhZyBuZSAiIiApCisgICAgICAgICAgICMgfHwgKCBkZWZpbmVkKCRzdGlja3lEYXRlKSAmJiAkc3RpY2t5RGF0ZSBuZSAiIiApICAgIyBUT0RPCisgICAgeworICAgICAgICAkcmVzdWx0PXsgJ3RhZycgPT4gKGRlZmluZWQoJHN0aWNreVRhZyk/JHN0aWNreVRhZzp1bmRlZikgfTsKKworICAgICAgICAjIFRPRE86IENvbnZlcnQgLUQgdmFsdWUgaW50byB0aGUgZm9ybSAyMDExLjA0LjEwLjA0LjQ2LjU3LAorICAgICAgICAjICAgc2ltaWxhciB0byBhbiBlbnRyeSBsaW5lJ3Mgc3RpY2t5IGRhdGUsIHdpdGhvdXQgdGhlIEQgcHJlZml4LgorICAgICAgICAjICAgSXQgc29tZXRpbWVzIChhbHdheXM/KSBhcnJpdmVzIGFzIHNvbWV0aGluZyBtb3JlIGxpa2UKKyAgICAgICAgIyAgICcxMCBBcHIgMjAxMSAwNDo0Njo1NyAtMDAwMCcuLi4KKyAgICAgICAgIyAkcmVzdWx0PXsgJ2RhdGUnID0+IChkZWZpbmVkKCRzdGlja3lEYXRlKT8kc3RpY2t5RGF0ZTp1bmRlZikgfTsKKyAgICB9CisgICAgZWxzaWYoIGRlZmluZWQoJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfSkgJiYKKyAgICAgICAgICAgZGVmaW5lZCgkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3RhZ19vcl9kYXRlfSkgJiYKKyAgICAgICAgICAgJHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXt0YWdfb3JfZGF0ZX0gbmUgIiIgKQorICAgIHsKKyAgICAgICAgbXkoJHRhZ09yRGF0ZSk9JHN0YXRlLT57ZW50cmllc317JGZpbGVuYW1lfXt0YWdfb3JfZGF0ZX07CisgICAgICAgIGlmKCR0YWdPckRhdGU9fi9eVChbXiBdKylccyokLykKKyAgICAgICAgeworICAgICAgICAgICAgJHJlc3VsdCA9IHsgJ3RhZycgPT4gJDEgfTsKKyAgICAgICAgfQorICAgICAgICBlbHNpZigkdGFnT3JEYXRlPX4vXkQoWzAtOS5dKylccyokLykKKyAgICAgICAgeworICAgICAgICAgICAgJHJlc3VsdD0geyAnZGF0ZScgPT4gJDEgfTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpZSAiVW5rbm93biB0YWdfb3JfZGF0ZSBmb3JtYXRcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgJHJlc3VsdD1nZXREaXJTdGlja3lJbmZvKCRmaWxlbmFtZSk7CisgICAgfQorCisgICAgcmV0dXJuICRyZXN1bHQ7Cit9CisKKyMgQ29udmVydCBhIHN0aWNreUluZm8gKHJlZiB0byBhIGhhc2gpIGFzIHJldHVybmVkIGJ5IHJlc29sdmVTdGlja3lJbmZvIGludG8KKyMgYSBmb3JtIGFwcHJvcHJpYXRlIGZvciB0aGUgc3RpY2t5IHRhZyBmaWVsZCBvZiBhbiBFbnRyaWVzCisjIGxpbmUgKGZpZWxkIGluZGV4IDUsIDAtYmFzZWQpLgorc3ViIGdldFN0aWNreVRhZ09yRGF0ZQoreworICAgIG15KCRzdGlja3lJbmZvKT1AXzsKKworICAgIG15ICRyZXN1bHQ7CisgICAgaWYoZGVmaW5lZCgkc3RpY2t5SW5mbykgJiYgZGVmaW5lZCgkc3RpY2t5SW5mby0+e3RhZ30pKQorICAgIHsKKyAgICAgICAgJHJlc3VsdD0iVCRzdGlja3lJbmZvLT57dGFnfSI7CisgICAgfQorICAgICMgVE9ETzogV2hlbi9pZiB3ZSBhY3R1YWxseSBwaWNrIHZlcnNpb25zIGJ5IHtkYXRlfSBwcm9wZXJseSwKKyAgICAjICAgYWxzbyBoYW5kbGUgaXQgaGVyZToKKyAgICAjICAgIkQkc3RpY2t5SW5mby0+e2RhdGV9IiAoZXhhbXBsZTogIkQyMDExLjA0LjEzLjIwLjM3LjA3IikuCisgICAgZWxzZQorICAgIHsKKyAgICAgICAgJHJlc3VsdD0iIjsKKyAgICB9CisKKyAgICByZXR1cm4gJHJlc3VsdDsKK30KKworIyBUaGlzIG1ldGhvZCBjbGVhbnMgdXAgdGhlICRzdGF0ZSB2YXJpYWJsZSBhZnRlciBhIGNvbW1hbmQgdGhhdCB1c2VzIGFyZ3VtZW50cyBoYXMgcnVuCitzdWIgc3RhdGVjbGVhbnVwCit7CisgICAgJHN0YXRlLT57ZmlsZXN9ID0gW107CisgICAgJHN0YXRlLT57ZGlyQXJnc30gPSB7fTsKKyAgICAkc3RhdGUtPnthcmdzfSA9IFtdOworICAgICRzdGF0ZS0+e2FyZ3VtZW50c30gPSBbXTsKKyAgICAkc3RhdGUtPntlbnRyaWVzfSA9IHt9OworICAgICRzdGF0ZS0+e2Rpck1hcH0gPSB7fTsKK30KKworIyBSZXR1cm4gd29ya2luZyBkaXJlY3RvcnkgQ1ZTIHJldmlzaW9uICIxLlgiIG91dAorIyBvZiB0aGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5ICJlbnRyaWVzIiBzdGF0ZSwgZm9yIHRoZSBnaXZlbiBmaWxlbmFtZS4KKyMgVGhpcyBpcyBwcmVmaXhlZCB3aXRoIGEgZGFzaCBpZiB0aGUgZmlsZSBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwKKyMgd2hlbiBpdCBpcyBjb21taXR0ZWQuCitzdWIgcmV2cGFyc2UKK3sKKyAgICBteSAkZmlsZW5hbWUgPSBzaGlmdDsKKworICAgIHJldHVybiAkc3RhdGUtPntlbnRyaWVzfXskZmlsZW5hbWV9e3JldmlzaW9ufTsKK30KKworIyBUaGlzIG1ldGhvZCB0YWtlcyBhIGZpbGUgaGFzaCBhbmQgZG9lcyBhIENWUyAiZmlsZSB0cmFuc2ZlciIuICBJdHMKKyMgZXhhY3QgYmVoYXZpb3VyIGRlcGVuZHMgb24gYSBzZWNvbmQsIG9wdGlvbmFsIGhhc2ggdGFibGUgYXJndW1lbnQ6CisjIC0gSWYgJG9wdGlvbnMtPnt0YXJnZXRmaWxlfSwgZHVtcCB0aGUgY29udGVudHMgdG8gdGhhdCBmaWxlOworIyAtIElmICRvcHRpb25zLT57cHJpbnR9LCB1c2UgTS9NVCB0byB0cmFuc21pdCB0aGUgY29udGVudHMgb25lIGxpbmUKKyMgICBhdCBhIHRpbWU7CisjIC0gT3RoZXJ3aXNlLCB0cmFuc21pdCB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgZm9sbG93ZWQgYnkgdGhlIGZpbGUKKyMgICBjb250ZW50cy4KK3N1YiB0cmFuc21pdGZpbGUKK3sKKyAgICBteSAkZmlsZWhhc2ggPSBzaGlmdDsKKyAgICBteSAkb3B0aW9ucyA9IHNoaWZ0OworCisgICAgaWYgKCBkZWZpbmVkICggJGZpbGVoYXNoICkgYW5kICRmaWxlaGFzaCBlcSAiZGVsZXRlZCIgKQorICAgIHsKKyAgICAgICAgJGxvZy0+d2FybigiZmlsZWhhc2ggaXMgJ2RlbGV0ZWQnIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkaWUgIk5lZWQgZmlsZWhhc2giIHVubGVzcyAoIGRlZmluZWQgKCAkZmlsZWhhc2ggKSBhbmQgJGZpbGVoYXNoID1+IC9eW2EtekEtWjAtOV17NDB9JC8gKTsKKworICAgIG15ICR0eXBlID0gYGdpdCBjYXQtZmlsZSAtdCAkZmlsZWhhc2hgOworICAgIGNob21wICR0eXBlOworCisgICAgZGllICggIkludmFsaWQgdHlwZSAnJHR5cGUnIChleHBlY3RlZCAnYmxvYicpIiApIHVubGVzcyAoIGRlZmluZWQgKCAkdHlwZSApIGFuZCAkdHlwZSBlcSAiYmxvYiIgKTsKKworICAgIG15ICRzaXplID0gYGdpdCBjYXQtZmlsZSAtcyAkZmlsZWhhc2hgOworICAgIGNob21wICRzaXplOworCisgICAgJGxvZy0+ZGVidWcoInRyYW5zbWl0ZmlsZSgkZmlsZWhhc2gpIHNpemU9JHNpemUsIHR5cGU9JHR5cGUiKTsKKworICAgIGlmICggb3BlbiBteSAkZmgsICctfCcsICJnaXQiLCAiY2F0LWZpbGUiLCAiYmxvYiIsICRmaWxlaGFzaCApCisgICAgeworICAgICAgICBpZiAoIGRlZmluZWQgKCAkb3B0aW9ucy0+e3RhcmdldGZpbGV9ICkgKQorICAgICAgICB7CisgICAgICAgICAgICBteSAkdGFyZ2V0ZmlsZSA9ICRvcHRpb25zLT57dGFyZ2V0ZmlsZX07CisgICAgICAgICAgICBvcGVuIE5FV0ZJTEUsICI+IiwgJHRhcmdldGZpbGUgb3IgZGllKCJDb3VsZG4ndCBvcGVuICckdGFyZ2V0ZmlsZScgZm9yIHdyaXRpbmcgOiAkISIpOworICAgICAgICAgICAgcHJpbnQgTkVXRklMRSAkXyB3aGlsZSAoIDwkZmg+ICk7CisgICAgICAgICAgICBjbG9zZSBORVdGSUxFIG9yIGRpZSgiRmFpbGVkIHRvIHdyaXRlICckdGFyZ2V0ZmlsZSc6ICQhIik7CisgICAgICAgIH0gZWxzaWYgKCBkZWZpbmVkICggJG9wdGlvbnMtPntwcmludH0gKSAmJiAkb3B0aW9ucy0+e3ByaW50fSApIHsKKyAgICAgICAgICAgIHdoaWxlICggPCRmaD4gKSB7CisgICAgICAgICAgICAgICAgaWYoIC9cblx6LyApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ00gJywgJF87CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgJ01UIHRleHQgJywgJF8sICJcbiI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQgIiRzaXplXG4iOworICAgICAgICAgICAgcHJpbnQgd2hpbGUgKCA8JGZoPiApOworICAgICAgICB9CisgICAgICAgIGNsb3NlICRmaCBvciBkaWUgKCJDb3VsZG4ndCBjbG9zZSBmaWxlaGFuZGxlIGZvciB0cmFuc21pdGZpbGUoKTogJCEiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkaWUoIkNvdWxkbid0IGV4ZWN1dGUgZ2l0LWNhdC1maWxlIik7CisgICAgfQorfQorCisjIFRoaXMgbWV0aG9kIHRha2VzIGEgZmlsZSBuYW1lLCBhbmQgcmV0dXJucyAoICRkaXJwYXJ0LCAkZmlsZXBhcnQgKSB3aGljaAorIyByZWZlcnMgdG8gdGhlIGRpcmVjdG9yeSBwb3J0aW9uIGFuZCB0aGUgZmlsZSBwb3J0aW9uIG9mIHRoZSBmaWxlbmFtZQorIyByZXNwZWN0aXZlbHkKK3N1YiBmaWxlbmFtZXNwbGl0Cit7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisgICAgbXkgJGZpeGZvcmxvY2FsZGlyID0gc2hpZnQ7CisKKyAgICBteSAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9ICggJGZpbGVuYW1lLCAiLiIgKTsKKyAgICAoICRmaWxlcGFydCwgJGRpcnBhcnQgKSA9ICggJDIsICQxICkgaWYgKCAkZmlsZW5hbWUgPX4gLyguKilcLyguKikvICk7CisgICAgJGRpcnBhcnQgLj0gIi8iOworCisgICAgaWYgKCAkZml4Zm9ybG9jYWxkaXIgKQorICAgIHsKKyAgICAgICAgJGRpcnBhcnQgPX4gcy9eJHN0YXRlLT57cHJlcGVuZGRpcn0vLzsKKyAgICB9CisKKyAgICByZXR1cm4gKCAkZmlsZXBhcnQsICRkaXJwYXJ0ICk7Cit9CisKKyMgQ2xlYW51cCB2YXJpb3VzIGp1bmsgaW4gZmlsZW5hbWUgKHRyeSB0byBjYW5vbmljYWxpemUgaXQpLCBhbmQKKyMgYWRkIHByZXBlbmRkaXIgdG8gYWNjb21tb2RhdGUgcnVubmluZyBDVlMgY2xpZW50IGZyb20gYQorIyBzdWJkaXJlY3RvcnkgKHNvIHRoZSBvdXRwdXQgaXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdCkuCitzdWIgZmlsZWNsZWFudXAKK3sKKyAgICBteSAkZmlsZW5hbWUgPSBzaGlmdDsKKworICAgIHJldHVybiB1bmRlZiB1bmxlc3MoZGVmaW5lZCgkZmlsZW5hbWUpKTsKKyAgICBpZiAoICRmaWxlbmFtZSA9fiAvXlwvLyApCisgICAgeworICAgICAgICBwcmludCAiRSBhYnNvbHV0ZSBmaWxlbmFtZXMgJyRmaWxlbmFtZScgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXJcbiI7CisgICAgICAgIHJldHVybiB1bmRlZjsKKyAgICB9CisKKyAgICBpZigkZmlsZW5hbWUgZXEgIi4iKQorICAgIHsKKyAgICAgICAgJGZpbGVuYW1lPSIiOworICAgIH0KKyAgICAkZmlsZW5hbWUgPX4gcy9eXC5cLy8vZzsKKyAgICAkZmlsZW5hbWUgPX4gcyUvKyUvJWc7CisgICAgJGZpbGVuYW1lID0gJHN0YXRlLT57cHJlcGVuZGRpcn0gLiAkZmlsZW5hbWU7CisgICAgJGZpbGVuYW1lID1+IHMlLyQlJTsKKyAgICByZXR1cm4gJGZpbGVuYW1lOworfQorCisjIFJlbW92ZSBwcmVwZW5kZGlyIGZyb20gdGhlIHBhdGgsIHNvIHRoYXQgaXMgaXMgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeQorIyB0aGUgQ1ZTIGNsaWVudCB3YXMgc3RhcnRlZCBmcm9tLCByYXRoZXIgdGhhbiB0aGUgdG9wIG9mIHRoZSBwcm9qZWN0LgorIyBFc3NlbnRpYWxseSB0aGUgaW52ZXJzZSBvZiBmaWxlY2xlYW51cCgpLgorc3ViIHJlbW92ZV9wcmVwZW5kZGlyCit7CisgICAgbXkoJHBhdGgpID0gQF87CisgICAgaWYoZGVmaW5lZCgkc3RhdGUtPntwcmVwZW5kZGlyfSkgJiYgJHN0YXRlLT57cHJlcGVuZGRpcn0gbmUgIiIpCisgICAgeworICAgICAgICBteSgkcHJlKT0kc3RhdGUtPntwcmVwZW5kZGlyfTsKKyAgICAgICAgJHByZT1+cyUvJCUlOworICAgICAgICBpZighKCRwYXRoPX5zJV5cUSRwcmVcRS8/JSUpKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT5mYXRhbCgiaW50ZXJuYWwgZXJyb3IgbWlzc2luZyBwcmVwZW5kZGlyIik7CisgICAgICAgICAgICBkaWUoImludGVybmFsIGVycm9yIG1pc3NpbmcgcHJlcGVuZGRpciIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAkcGF0aDsKK30KKworc3ViIHZhbGlkYXRlR2l0RGlyCit7CisgICAgaWYoICFkZWZpbmVkKCRzdGF0ZS0+e0NWU1JPT1R9KSApCisgICAgeworICAgICAgICBwcmludCAiZXJyb3IgMSBDVlNST09UIG5vdCBzcGVjaWZpZWRcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KKyAgICBpZiggJEVOVntHSVRfRElSfSBuZSAoJHN0YXRlLT57Q1ZTUk9PVH0gLiAnLycpICkKKyAgICB7CisgICAgICAgIHByaW50ICJlcnJvciAxIEludGVybmFsbHkgaW5jb25zaXN0ZW50IENWU1JPT1RcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KK30KKworIyBTZXR1cCB3b3JraW5nIGRpcmVjdG9yeSBpbiBhIHdvcmsgdHJlZSB3aXRoIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbgorIyBsb2FkZWQgaW4gdGhlIGluZGV4Lgorc3ViIHNldHVwV29ya1RyZWUKK3sKKyAgICBteSAoJHZlcikgPSBAXzsKKworICAgIHZhbGlkYXRlR2l0RGlyKCk7CisKKyAgICBpZiggKCBkZWZpbmVkKCR3b3JrLT57c3RhdGV9KSAmJiAkd29yay0+e3N0YXRlfSAhPSAxICkgfHwKKyAgICAgICAgZGVmaW5lZCgkd29yay0+e3RtcERpcn0pICkKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oIkJhZCB3b3JrIHRyZWUgc3RhdGUgbWFuYWdlbWVudCIpOworICAgICAgICBwcmludCAiZXJyb3IgMSBJbnRlcm5hbCBzZXR1cCBtdWx0aXBsZSB3b3JrIHRyZWVzIHdpdGhvdXQgY2xlYW51cFxuIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorCisgICAgJHdvcmstPnt3b3JrRGlyfSA9IHRlbXBkaXIgKCBESVIgPT4gJFRFTVBfRElSICk7CisKKyAgICBpZiggIWRlZmluZWQoJHdvcmstPntpbmRleH0pICkKKyAgICB7CisgICAgICAgICh1bmRlZiwgJHdvcmstPntpbmRleH0pID0gdGVtcGZpbGUgKCBESVIgPT4gJFRFTVBfRElSLCBPUEVOID0+IDAgKTsKKyAgICB9CisKKyAgICBjaGRpciAkd29yay0+e3dvcmtEaXJ9IG9yCisgICAgICAgIGRpZSAiVW5hYmxlIHRvIGNoZGlyIHRvICR3b3JrLT57d29ya0Rpcn1cbiI7CisKKyAgICAkbG9nLT5pbmZvKCJTZXR0aW5nIHVwIEdJVF9XT1JLX1RSRUUgYXMgJy4nIGluICckd29yay0+e3dvcmtEaXJ9JywgaW5kZXggZmlsZSBpcyAnJHdvcmstPntpbmRleH0nIik7CisKKyAgICAkRU5We0dJVF9XT1JLX1RSRUV9ID0gIi4iOworICAgICRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJHdvcmstPntpbmRleH07CisgICAgJHdvcmstPntzdGF0ZX0gPSAyOworCisgICAgaWYoJHZlcikKKyAgICB7CisgICAgICAgIHN5c3RlbSgiZ2l0IiwicmVhZC10cmVlIiwkdmVyKTsKKyAgICAgICAgdW5sZXNzICgkPyA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJFcnJvciBydW5uaW5nIGdpdC1yZWFkLXRyZWUiKTsKKyAgICAgICAgICAgIGRpZSAiRXJyb3IgcnVubmluZyBnaXQtcmVhZC10cmVlICR2ZXIgaW4gJHdvcmstPnt3b3JrRGlyfSAkIVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICAjIGVsc2UgIyByZXFfYW5ub3RhdGUgcmVhZHMgdHJlZSBmb3IgZWFjaCBmaWxlCit9CisKKyMgRW5zdXJlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGluIHNvbWUga2luZCBvZiB3b3JraW5nIGRpcmVjdG9yeSwKKyMgd2l0aCBhIHJlY2VudCB2ZXJzaW9uIGxvYWRlZCBpbiB0aGUgaW5kZXguCitzdWIgZW5zdXJlV29ya1RyZWUKK3sKKyAgICBpZiggZGVmaW5lZCgkd29yay0+e3RtcERpcn0pICkKKyAgICB7CisgICAgICAgICRsb2ctPndhcm4oIkJhZCB3b3JrIHRyZWUgc3RhdGUgbWFuYWdlbWVudCBbZW5zdXJlV29ya1RyZWUoKV0iKTsKKyAgICAgICAgcHJpbnQgImVycm9yIDEgSW50ZXJuYWwgc2V0dXAgbXVsdGlwbGUgZGlycyB3aXRob3V0IGNsZWFudXBcbiI7CisgICAgICAgIGNsZWFudXBXb3JrVHJlZSgpOworICAgICAgICBleGl0OworICAgIH0KKyAgICBpZiggJHdvcmstPntzdGF0ZX0gKQorICAgIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZhbGlkYXRlR2l0RGlyKCk7CisKKyAgICBpZiggIWRlZmluZWQoJHdvcmstPntlbXB0eURpcn0pICkKKyAgICB7CisgICAgICAgICR3b3JrLT57ZW1wdHlEaXJ9ID0gdGVtcGRpciAoIERJUiA9PiAkVEVNUF9ESVIsIE9QRU4gPT4gMCk7CisgICAgfQorICAgIGNoZGlyICR3b3JrLT57ZW1wdHlEaXJ9IG9yCisgICAgICAgIGRpZSAiVW5hYmxlIHRvIGNoZGlyIHRvICR3b3JrLT57ZW1wdHlEaXJ9XG4iOworCisgICAgbXkgJHZlciA9IGBnaXQgc2hvdy1yZWYgLXMgcmVmcy9oZWFkcy8kc3RhdGUtPnttb2R1bGV9YDsKKyAgICBjaG9tcCAkdmVyOworICAgIGlmICgkdmVyICF+IC9eWzAtOWEtZl17NDB9JC8pCisgICAgeworICAgICAgICAkbG9nLT53YXJuKCJFcnJvciBmcm9tIGdpdCBzaG93LXJlZiAtcyByZWZzL2hlYWQkc3RhdGUtPnttb2R1bGV9Iik7CisgICAgICAgIHByaW50ICJlcnJvciAxIGNhbm5vdCBmaW5kIHRoZSBjdXJyZW50IEhFQUQgb2YgbW9kdWxlIjsKKyAgICAgICAgY2xlYW51cFdvcmtUcmVlKCk7CisgICAgICAgIGV4aXQ7CisgICAgfQorCisgICAgaWYoICFkZWZpbmVkKCR3b3JrLT57aW5kZXh9KSApCisgICAgeworICAgICAgICAodW5kZWYsICR3b3JrLT57aW5kZXh9KSA9IHRlbXBmaWxlICggRElSID0+ICRURU1QX0RJUiwgT1BFTiA9PiAwICk7CisgICAgfQorCisgICAgJEVOVntHSVRfV09SS19UUkVFfSA9ICIuIjsKKyAgICAkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICR3b3JrLT57aW5kZXh9OworICAgICR3b3JrLT57c3RhdGV9ID0gMTsKKworICAgIHN5c3RlbSgiZ2l0IiwicmVhZC10cmVlIiwkdmVyKTsKKyAgICB1bmxlc3MgKCQ/ID09IDApCisgICAgeworICAgICAgICBkaWUgIkVycm9yIHJ1bm5pbmcgZ2l0LXJlYWQtdHJlZSAkdmVyICQhXG4iOworICAgIH0KK30KKworIyBDbGVhbnVwIHdvcmtpbmcgZGlyZWN0b3J5IHRoYXQgaXMgbm90IG5lZWRlZCBhbnkgbG9uZ2VyLgorc3ViIGNsZWFudXBXb3JrVHJlZQoreworICAgIGlmKCAhICR3b3JrLT57c3RhdGV9ICkKKyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjaGRpciAiLyIgb3IgZGllICJVbmFibGUgdG8gY2hkaXIgJy8nXG4iOworCisgICAgaWYoIGRlZmluZWQoJHdvcmstPnt3b3JrRGlyfSkgKQorICAgIHsKKyAgICAgICAgcm10cmVlKCAkd29yay0+e3dvcmtEaXJ9ICk7CisgICAgICAgIHVuZGVmICR3b3JrLT57d29ya0Rpcn07CisgICAgfQorICAgIHVuZGVmICR3b3JrLT57c3RhdGV9OworfQorCisjIFNldHVwIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSAobm90IGEgd29ya2luZyB0cmVlKSwgdHlwaWNhbGx5IGZvcgorIyBtZXJnaW5nIGRpcnR5IHN0YXRlIGFzIGluIHJlcV91cGRhdGUuCitzdWIgc2V0dXBUbXBEaXIKK3sKKyAgICAkd29yay0+e3RtcERpcn0gPSB0ZW1wZGlyICggRElSID0+ICRURU1QX0RJUiApOworICAgIGNoZGlyICR3b3JrLT57dG1wRGlyfSBvciBkaWUgIlVuYWJsZSB0byBjaGRpciAkd29yay0+e3RtcERpcn1cbiI7CisKKyAgICByZXR1cm4gJHdvcmstPnt0bXBEaXJ9OworfQorCisjIENsZWFuIHVwIGEgcHJldmlvdXNseSBzZXR1cFRtcERpci4gIFJlc3RvcmUgcHJldmlvdXMgd29yayB0cmVlIGlmCisjIGFwcHJvcHJpYXRlLgorc3ViIGNsZWFudXBUbXBEaXIKK3sKKyAgICBpZiAoICFkZWZpbmVkKCR3b3JrLT57dG1wRGlyfSkgKQorICAgIHsKKyAgICAgICAgJGxvZy0+d2FybigiY2xlYW51cCB0bXBkaXIgdGhhdCBoYXMgbm90IGJlZW4gc2V0dXAiKTsKKyAgICAgICAgZGllICJDbGVhbnVwIHRtcERpciB0aGF0IGhhcyBub3QgYmVlbiBzZXR1cFxuIjsKKyAgICB9CisgICAgaWYoIGRlZmluZWQoJHdvcmstPntzdGF0ZX0pICkKKyAgICB7CisgICAgICAgIGlmKCAkd29yay0+e3N0YXRlfSA9PSAxICkKKyAgICAgICAgeworICAgICAgICAgICAgY2hkaXIgJHdvcmstPntlbXB0eURpcn0gb3IKKyAgICAgICAgICAgICAgICBkaWUgIlVuYWJsZSB0byBjaGRpciB0byAkd29yay0+e2VtcHR5RGlyfVxuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiggJHdvcmstPntzdGF0ZX0gPT0gMiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoZGlyICR3b3JrLT57d29ya0Rpcn0gb3IKKyAgICAgICAgICAgICAgICBkaWUgIlVuYWJsZSB0byBjaGRpciB0byAkd29yay0+e2VtcHR5RGlyfVxuIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPndhcm4oIkluY29uc2lzdGVudCB3b3JrIGRpciBzdGF0ZSIpOworICAgICAgICAgICAgZGllICJJbmNvbnNpc3RlbnQgd29yayBkaXIgc3RhdGVcbiI7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY2hkaXIgIi8iIG9yIGRpZSAiVW5hYmxlIHRvIGNoZGlyICcvJ1xuIjsKKyAgICB9Cit9CisKKyMgR2l2ZW4gYSBwYXRoLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUga29wdHMKKyMgdGhhdCBzaG91bGQgZ28gaW50byB0aGF0IHBhdGgncyBFbnRyaWVzIGxpbmUuICBGb3IgZXhhbXBsZSwgYSBiaW5hcnkKKyMgZmlsZSBzaG91bGQgZ2V0IC1rYi4KK3N1YiBrb3B0c19mcm9tX3BhdGgKK3sKKyAgICBteSAoJHBhdGgsICRzcmNUeXBlLCAkbmFtZSkgPSBAXzsKKworICAgIGlmICggZGVmaW5lZCAoICRjZmctPntnaXRjdnN9e3VzZWNybGZhdHRyfSApIGFuZAorICAgICAgICAgJGNmZy0+e2dpdGN2c317dXNlY3JsZmF0dHJ9ID1+IC9ccyooMXx0cnVlfHllcylccyokL2kgKQorICAgIHsKKyAgICAgICAgbXkgKCR2YWwpID0gY2hlY2tfYXR0ciggInRleHQiLCAkcGF0aCApOworICAgICAgICBpZiAoICR2YWwgZXEgInVuc3BlY2lmaWVkIiApCisgICAgICAgIHsKKyAgICAgICAgICAgICR2YWwgPSBjaGVja19hdHRyKCAiY3JsZiIsICRwYXRoICk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAkdmFsIGVxICJ1bnNldCIgKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gIi1rYiIKKyAgICAgICAgfQorICAgICAgICBlbHNpZiAoIGNoZWNrX2F0dHIoICJlb2wiLCAkcGF0aCApIG5lICJ1bnNwZWNpZmllZCIgfHwKKyAgICAgICAgICAgICAgICAkdmFsIGVxICJzZXQiIHx8ICR2YWwgZXEgImlucHV0IiApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAiIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPmluZm8oIlVucmVjb2duaXplZCBjaGVja19hdHRyIGNybGYgJHBhdGggOiAkdmFsIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGRlZmluZWQgKCAkY2ZnLT57Z2l0Y3ZzfXthbGxiaW5hcnl9ICkgKQorICAgIHsKKyAgICAgICAgaWYoICgkY2ZnLT57Z2l0Y3ZzfXthbGxiaW5hcnl9ID1+IC9eXHMqKDF8dHJ1ZXx5ZXMpXHMqJC9pKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAiLWtiIjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiggKCRjZmctPntnaXRjdnN9e2FsbGJpbmFyeX0gPX4gL15ccypndWVzc1xzKiQvaSkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggaXNfYmluYXJ5KCRzcmNUeXBlLCRuYW1lKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIi4uLiBhcyBiaW5hcnkiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIi1rYiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgJGxvZy0+ZGVidWcoIi4uLiBhcyB0ZXh0Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgIyBSZXR1cm4gIiIgdG8gZ2l2ZSBubyBzcGVjaWFsIHRyZWF0bWVudCB0byBhbnkgcGF0aAorICAgIHJldHVybiAiIjsKK30KKworc3ViIGNoZWNrX2F0dHIKK3sKKyAgICBteSAoJGF0dHIsJHBhdGgpID0gQF87CisgICAgZW5zdXJlV29ya1RyZWUoKTsKKyAgICBpZiAoIG9wZW4gbXkgJGZoLCAnLXwnLCAiZ2l0IiwgImNoZWNrLWF0dHIiLCAkYXR0ciwgIi0tIiwgJHBhdGggKQorICAgIHsKKyAgICAgICAgbXkgJHZhbCA9IDwkZmg+OworICAgICAgICBjbG9zZSAkZmg7CisgICAgICAgICR2YWwgPX4gcy8uKjogKFteOlxyXG5dKilccyokLyQxLzsKKyAgICAgICAgcmV0dXJuICR2YWw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiB1bmRlZjsKKyAgICB9Cit9CisKKyMgVGhpcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBoZXVyaXN0aWNzIGFzIGNvbnZlcnQuYzppc19iaW5hcnkoKSBhbmQgcmVsYXRlZC4KKyMgTm90ZSB0aGF0IHRoZSBiYXJlIENSIHRlc3QgaXMgZG9uZSBieSBjYWxsZXJzIGluIGNvbnZlcnQuYy4KK3N1YiBpc19iaW5hcnkKK3sKKyAgICBteSAoJHNyY1R5cGUsJG5hbWUpID0gQF87CisgICAgJGxvZy0+ZGVidWcoImlzX2JpbmFyeSgkc3JjVHlwZSwkbmFtZSkiKTsKKworICAgICMgTWluaW1pemUgYW1vdW50IG9mIGludGVycHJldGVkIGNvZGUgcnVuIGluIHRoZSBpbm5lciBwZXItY2hhcmFjdGVyCisgICAgIyBsb29wIGZvciBsYXJnZSBmaWxlcywgYnkgdG90YWxsaW5nIGVhY2ggY2hhcmFjdGVyIHZhbHVlIGFuZAorICAgICMgdGhlbiBhbmFseXppbmcgdGhlIHRvdGFscy4KKyAgICBteSBAY291bnRzOworICAgIG15ICRpOworICAgIGZvcigkaT0wOyRpPDI1NjskaSsrKQorICAgIHsKKyAgICAgICAgJGNvdW50c1skaV09MDsKKyAgICB9CisKKyAgICBteSAkZmggPSBvcGVuX2Jsb2Jfb3JfZGllKCRzcmNUeXBlLCRuYW1lKTsKKyAgICBteSAkbGluZTsKKyAgICB3aGlsZSggZGVmaW5lZCgkbGluZT08JGZoPikgKQorICAgIHsKKyAgICAgICAgIyBBbnkgJ1wwJyBhbmQgYmFyZSBDUiBhcmUgY29uc2lkZXJlZCBiaW5hcnkuCisgICAgICAgIGlmKCAkbGluZSA9fiAvXDB8KFxyW15cbl0pLyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNsb3NlKCRmaCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgICMgQ291bnQgdXAgZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmU6CisgICAgICAgIG15ICRsZW49bGVuZ3RoKCRsaW5lKTsKKyAgICAgICAgZm9yKCRpPTA7JGk8JGxlbjskaSsrKQorICAgICAgICB7CisgICAgICAgICAgICAkY291bnRzW29yZChzdWJzdHIoJGxpbmUsJGksMSkpXSsrOworICAgICAgICB9CisgICAgfQorICAgIGNsb3NlICRmaDsKKworICAgICMgRG9uJ3QgY291bnQgQ1IgYW5kIExGIGFzIGVpdGhlciBwcmludGFibGUvbm9ucHJpbnRhYmxlCisgICAgJGNvdW50c1tvcmQoIlxuIildPTA7CisgICAgJGNvdW50c1tvcmQoIlxyIildPTA7CisKKyAgICAjIENhdGVnb3JpemUgaW5kaXZpZHVhbCBjaGFyYWN0ZXIgY291bnQgaW50byBwcmludGFibGUgYW5kIG5vbnByaW50YWJsZToKKyAgICBteSAkcHJpbnRhYmxlPTA7CisgICAgbXkgJG5vbnByaW50YWJsZT0wOworICAgIGZvcigkaT0wOyRpPDI1NjskaSsrKQorICAgIHsKKyAgICAgICAgaWYoICRpIDwgMzIgJiYKKyAgICAgICAgICAgICRpICE9IG9yZCgiXGIiKSAmJgorICAgICAgICAgICAgJGkgIT0gb3JkKCJcdCIpICYmCisgICAgICAgICAgICAkaSAhPSAwMzMgJiYgICAgICAgIyBFU0MKKyAgICAgICAgICAgICRpICE9IDAxNCApICAgICAgICAjIEZGCisgICAgICAgIHsKKyAgICAgICAgICAgICRub25wcmludGFibGUrPSRjb3VudHNbJGldOworICAgICAgICB9CisgICAgICAgIGVsc2lmKCAkaT09MTI3ICkgICMgREVMCisgICAgICAgIHsKKyAgICAgICAgICAgICRub25wcmludGFibGUrPSRjb3VudHNbJGldOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgJHByaW50YWJsZSs9JGNvdW50c1skaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKCRwcmludGFibGUgPj4gNykgPCAkbm9ucHJpbnRhYmxlOworfQorCisjIFJldHVybnMgb3BlbiBmaWxlIGhhbmRsZS4gIFBvc3NpYmxlIGludm9jYXRpb25zOgorIyAgLSBvcGVuX2Jsb2Jfb3JfZGllKCJmaWxlIiwkZmlsZW5hbWUpOworIyAgLSBvcGVuX2Jsb2Jfb3JfZGllKCJzaGExIiwkZmlsZWhhc2gpOworc3ViIG9wZW5fYmxvYl9vcl9kaWUKK3sKKyAgICBteSAoJHNyY1R5cGUsJG5hbWUpID0gQF87CisgICAgbXkgKCRmaCk7CisgICAgaWYoICRzcmNUeXBlIGVxICJmaWxlIiApCisgICAgeworICAgICAgICBpZiggIW9wZW4gJGZoLCI8IiwkbmFtZSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPndhcm4oIlVuYWJsZSB0byBvcGVuIGZpbGUgJG5hbWU6ICQhIik7CisgICAgICAgICAgICBkaWUgIlVuYWJsZSB0byBvcGVuIGZpbGUgJG5hbWU6ICQhXG4iOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCAkc3JjVHlwZSBlcSAic2hhMSIgKQorICAgIHsKKyAgICAgICAgdW5sZXNzICggZGVmaW5lZCAoICRuYW1lICkgYW5kICRuYW1lID1+IC9eW2EtekEtWjAtOV17NDB9JC8gKQorICAgICAgICB7CisgICAgICAgICAgICAkbG9nLT53YXJuKCJOZWVkIGZpbGVoYXNoIik7CisgICAgICAgICAgICBkaWUgIk5lZWQgZmlsZWhhc2hcbiI7CisgICAgICAgIH0KKworICAgICAgICBteSAkdHlwZSA9IGBnaXQgY2F0LWZpbGUgLXQgJG5hbWVgOworICAgICAgICBjaG9tcCAkdHlwZTsKKworICAgICAgICB1bmxlc3MgKCBkZWZpbmVkICggJHR5cGUgKSBhbmQgJHR5cGUgZXEgImJsb2IiICkKKyAgICAgICAgeworICAgICAgICAgICAgJGxvZy0+d2FybigiSW52YWxpZCB0eXBlICckdHlwZScgZm9yICckbmFtZSciKTsKKyAgICAgICAgICAgIGRpZSAoICJJbnZhbGlkIHR5cGUgJyR0eXBlJyAoZXhwZWN0ZWQgJ2Jsb2InKSIgKQorICAgICAgICB9CisKKyAgICAgICAgbXkgJHNpemUgPSBgZ2l0IGNhdC1maWxlIC1zICRuYW1lYDsKKyAgICAgICAgY2hvbXAgJHNpemU7CisKKyAgICAgICAgJGxvZy0+ZGVidWcoIm9wZW5fYmxvYl9vcl9kaWUoJG5hbWUpIHNpemU9JHNpemUsIHR5cGU9JHR5cGUiKTsKKworICAgICAgICB1bmxlc3MoIG9wZW4gJGZoLCAnLXwnLCAiZ2l0IiwgImNhdC1maWxlIiwgImJsb2IiLCAkbmFtZSApCisgICAgICAgIHsKKyAgICAgICAgICAgICRsb2ctPndhcm4oIlVuYWJsZSB0byBvcGVuIHNoYTEgJG5hbWUiKTsKKyAgICAgICAgICAgIGRpZSAiVW5hYmxlIHRvIG9wZW4gc2hhMSAkbmFtZVxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAkbG9nLT53YXJuKCJVbmtub3duIHR5cGUgb2YgYmxvYiBzb3VyY2U6ICRzcmNUeXBlIik7CisgICAgICAgIGRpZSAiVW5rbm93biB0eXBlIG9mIGJsb2Igc291cmNlOiAkc3JjVHlwZVxuIjsKKyAgICB9CisgICAgcmV0dXJuICRmaDsKK30KKworIyBHZW5lcmF0ZSBhIENWUyBhdXRob3IgbmFtZSBmcm9tIEdpdCBhdXRob3IgaW5mb3JtYXRpb24sIGJ5IHRha2luZyB0aGUgbG9jYWwKKyMgcGFydCBvZiB0aGUgZW1haWwgYWRkcmVzcyBhbmQgcmVwbGFjaW5nIGNoYXJhY3RlcnMgbm90IGluIHRoZSBQb3J0YWJsZQorIyBGaWxlbmFtZSBDaGFyYWN0ZXIgU2V0IChzZWUgSUVFRSBTdGQgMTAwMy4xLTIwMDEsIDMuMjc2KSBieSB1bmRlcnNjb3Jlcy4gQ1ZTCisjIExvZ2luIG5hbWVzIGFyZSBVbml4IGxvZ2luIG5hbWVzLCB3aGljaCBzaG91bGQgYmUgcmVzdHJpY3RlZCB0byB0aGlzCisjIGNoYXJhY3RlciBzZXQuCitzdWIgY3ZzX2F1dGhvcgoreworICAgIG15ICRhdXRob3JfbGluZSA9IHNoaWZ0OworICAgIChteSAkYXV0aG9yKSA9ICRhdXRob3JfbGluZSA9fiAvPChbXkA+XSopLzsKKworICAgICRhdXRob3IgPX4gcy9bXi1hLXpBLVowLTlfLl0vXy9nOworICAgICRhdXRob3IgPX4gcy9eLS9fLzsKKworICAgICRhdXRob3I7Cit9CisKKworc3ViIGRlc2NyYW1ibGUKK3sKKyAgICAjIFRoaXMgdGFibGUgaXMgZnJvbSBzcmMvc2NyYW1ibGUuYyBpbiB0aGUgQ1ZTIHNvdXJjZQorICAgIG15IEBTSElGVFMgPSAoCisgICAgICAgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisgICAgICAgIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLAorICAgICAgICAxMTQsMTIwLCA1MywgNzksIDk2LDEwOSwgNzIsMTA4LCA3MCwgNjQsIDc2LCA2NywxMTYsIDc0LCA2OCwgODcsCisgICAgICAgIDExMSwgNTIsIDc1LDExOSwgNDksIDM0LCA4MiwgODEsIDk1LCA2NSwxMTIsIDg2LDExOCwxMTAsMTIyLDEwNSwKKyAgICAgICAgNDEsIDU3LCA4MywgNDMsIDQ2LDEwMiwgNDAsIDg5LCAzOCwxMDMsIDQ1LCA1MCwgNDIsMTIzLCA5MSwgMzUsCisgICAgICAgIDEyNSwgNTUsIDU0LCA2NiwxMjQsMTI2LCA1OSwgNDcsIDkyLCA3MSwxMTUsIDc4LCA4OCwxMDcsMTA2LCA1NiwKKyAgICAgICAgMzYsMTIxLDExNywxMDQsMTAxLDEwMCwgNjksIDczLCA5OSwgNjMsIDk0LCA5MywgMzksIDM3LCA2MSwgNDgsCisgICAgICAgIDU4LDExMywgMzIsIDkwLCA0NCwgOTgsIDYwLCA1MSwgMzMsIDk3LCA2MiwgNzcsIDg0LCA4MCwgODUsMjIzLAorICAgICAgICAyMjUsMjE2LDE4NywxNjYsMjI5LDE4OSwyMjIsMTg4LDE0MSwyNDksMTQ4LDIwMCwxODQsMTM2LDI0OCwxOTAsCisgICAgICAgIDE5OSwxNzAsMTgxLDIwNCwxMzgsMjMyLDIxOCwxODMsMjU1LDIzNCwyMjAsMjQ3LDIxMywyMDMsMjI2LDE5MywKKyAgICAgICAgMTc0LDE3MiwyMjgsMjUyLDIxNywyMDEsMTMxLDIzMCwxOTcsMjExLDE0NSwyMzgsMTYxLDE3OSwxNjAsMjEyLAorICAgICAgICAyMDcsMjIxLDI1NCwxNzMsMjAyLDE0NiwyMjQsMTUxLDE0MCwxOTYsMjA1LDEzMCwxMzUsMTMzLDE0MywyNDYsCisgICAgICAgIDE5MiwxNTksMjQ0LDIzOSwxODUsMTY4LDIxNSwxNDQsMTM5LDE2NSwxODAsMTU3LDE0NywxODYsMjE0LDE3NiwKKyAgICAgICAgMjI3LDIzMSwyMTksMTY5LDE3NSwxNTYsMjA2LDE5OCwxMjksMTY0LDE1MCwyMTAsMTU0LDE3NywxMzQsMTI3LAorICAgICAgICAxODIsMTI4LDE1OCwyMDgsMTYyLDEzMiwxNjcsMjA5LDE0OSwyNDEsMTUzLDI1MSwyMzcsMjM2LDE3MSwxOTUsCisgICAgICAgIDI0MywyMzMsMjUzLDI0MCwxOTQsMjUwLDE5MSwxNTUsMTQyLDEzNywyNDUsMjM1LDE2MywyNDIsMTc4LDE1MgorICAgICk7CisgICAgbXkgKCRzdHIpID0gQF87CisKKyAgICAjIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgdGhlIHNhbWUgcGFzc3dvcmQgZm9ybWF0IChBKSBoYXMgYmVlbgorICAgICMgdXNlZCBieSBDVlMgc2luY2UgdGhlIGJlZ2lubmluZyBvZiB0aW1lCisgICAgeworICAgICAgICBteSAkZm10ID0gc3Vic3RyKCRzdHIsIDAsIDEpOworICAgICAgICBkaWUgImludmFsaWQgcGFzc3dvcmQgZm9ybWF0IGAkZm10JyIgdW5sZXNzICRmbXQgZXEgJ0EnOworICAgIH0KKworICAgIG15IEBzdHIgPSB1bnBhY2sgIkMqIiwgc3Vic3RyKCRzdHIsIDEpOworICAgIG15ICRyZXQgPSBqb2luICcnLCBtYXAgeyBjaHIgJFNISUZUU1skX10gfSBAc3RyOworICAgIHJldHVybiAkcmV0OworfQorCisjIFRlc3QgaWYgdGhlIChkZWVwKSB2YWx1ZXMgb2YgdHdvIHJlZmVyZW5jZXMgdG8gYSBoYXNoIGFyZSB0aGUgc2FtZS4KK3N1YiByZWZIYXNoRXF1YWwKK3sKKyAgICBteSgkdjEsJHYyKSA9IEBfOworCisgICAgbXkgJG91dDsKKyAgICBpZighZGVmaW5lZCgkdjEpKQorICAgIHsKKyAgICAgICAgaWYoIWRlZmluZWQoJHYyKSkKKyAgICAgICAgeworICAgICAgICAgICAgJG91dD0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2lmKCAhZGVmaW5lZCgkdjIpIHx8CisgICAgICAgICAgIHNjYWxhcihrZXlzKCV7JHYxfSkpICE9IHNjYWxhcihrZXlzKCV7JHYyfSkpICkKKyAgICB7CisgICAgICAgICMgJG91dD11bmRlZjsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgJG91dD0xOworCisgICAgICAgIG15ICRrZXk7CisgICAgICAgIGZvcmVhY2ggJGtleSAoa2V5cygleyR2MX0pKQorICAgICAgICB7CisgICAgICAgICAgICBpZiggIWV4aXN0cygkdjItPnska2V5fSkgfHwKKyAgICAgICAgICAgICAgICBkZWZpbmVkKCR2MS0+eyRrZXl9KSBuZSBkZWZpbmVkKCR2Mi0+eyRrZXl9KSB8fAorICAgICAgICAgICAgICAgICggZGVmaW5lZCgkdjEtPnska2V5fSkgJiYKKyAgICAgICAgICAgICAgICAgICR2MS0+eyRrZXl9IG5lICR2Mi0+eyRrZXl9ICkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgJG91dD11bmRlZjsKKyAgICAgICAgICAgICAgIGxhc3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gJG91dDsKK30KKworCitwYWNrYWdlIEdJVENWUzo6bG9nOworCisjIyMjCisjIyMjIENvcHlyaWdodCBUaGUgT3BlbiBVbml2ZXJzaXR5IFVLIC0gMjAwNi4KKyMjIyMKKyMjIyMgQXV0aG9yczogTWFydHluIFNtaXRoICAgIDxtYXJ0eW5AY2F0YWx5c3QubmV0Lm56PgorIyMjIyAgICAgICAgICBNYXJ0aW4gTGFuZ2hvZmYgPG1hcnRpbkBsYXB0b3Aub3JnPgorIyMjIworIyMjIworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCis9aGVhZDEgTkFNRQorCitHSVRDVlM6OmxvZworCis9aGVhZDEgREVTQ1JJUFRJT04KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgdmVyeSBjcnVkZSBsb2dnaW5nIHdpdGggYSBzaW1pbGFyIGludGVyZmFjZSB0bworTG9nOjpMb2c0cGVybAorCis9aGVhZDEgTUVUSE9EUworCis9Y3V0CisKKz1oZWFkMiBuZXcKKworQ3JlYXRlcyBhIG5ldyBsb2cgb2JqZWN0LCBvcHRpb25hbGx5IHlvdSBjYW4gc3BlY2lmeSBhIGZpbGVuYW1lIGhlcmUgdG8KK2luZGljYXRlIHRoZSBmaWxlIHRvIGxvZyB0by4gSWYgbm8gbG9nIGZpbGUgaXMgc3BlY2lmaWVkLCB5b3UgY2FuIHNwZWNpZnkgb25lCitsYXRlciB3aXRoIG1ldGhvZCBzZXRmaWxlLCBvciBpbmRpY2F0ZSB5b3Ugbm8gbG9uZ2VyIHdhbnQgbG9nZ2luZyB3aXRoIG1ldGhvZAorbm9maWxlLgorCitVbnRpbCBvbmUgb2YgdGhlc2UgbWV0aG9kcyBpcyBjYWxsZWQsIGFsbCBsb2cgY2FsbHMgd2lsbCBidWZmZXIgbWVzc2FnZXMgcmVhZHkKK3RvIHdyaXRlIG91dC4KKworPWN1dAorc3ViIG5ldworeworICAgIG15ICRjbGFzcyA9IHNoaWZ0OworICAgIG15ICRmaWxlbmFtZSA9IHNoaWZ0OworCisgICAgbXkgJHNlbGYgPSB7fTsKKworICAgIGJsZXNzICRzZWxmLCAkY2xhc3M7CisKKyAgICBpZiAoIGRlZmluZWQgKCAkZmlsZW5hbWUgKSApCisgICAgeworICAgICAgICBvcGVuICRzZWxmLT57Zmh9LCAiPj4iLCAkZmlsZW5hbWUgb3IgZGllKCJDb3VsZG4ndCBvcGVuICckZmlsZW5hbWUnIGZvciB3cml0aW5nIDogJCEiKTsKKyAgICB9CisKKyAgICByZXR1cm4gJHNlbGY7Cit9CisKKz1oZWFkMiBzZXRmaWxlCisKK1RoaXMgbWV0aG9kcyB0YWtlcyBhIGZpbGVuYW1lLCBhbmQgYXR0ZW1wdHMgdG8gb3BlbiB0aGF0IGZpbGUgYXMgdGhlIGxvZyBmaWxlLgorSWYgc3VjY2Vzc2Z1bCwgYWxsIGJ1ZmZlcmVkIGRhdGEgaXMgd3JpdHRlbiBvdXQgdG8gdGhlIGZpbGUsIGFuZCBhbnkgZnVydGhlcgorbG9nZ2luZyBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHRoZSBmaWxlLgorCis9Y3V0CitzdWIgc2V0ZmlsZQoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisKKyAgICBpZiAoIGRlZmluZWQgKCAkZmlsZW5hbWUgKSApCisgICAgeworICAgICAgICBvcGVuICRzZWxmLT57Zmh9LCAiPj4iLCAkZmlsZW5hbWUgb3IgZGllKCJDb3VsZG4ndCBvcGVuICckZmlsZW5hbWUnIGZvciB3cml0aW5nIDogJCEiKTsKKyAgICB9CisKKyAgICByZXR1cm4gdW5sZXNzICggZGVmaW5lZCAoICRzZWxmLT57YnVmZmVyfSApIGFuZCByZWYgJHNlbGYtPntidWZmZXJ9IGVxICJBUlJBWSIgKTsKKworICAgIHdoaWxlICggbXkgJGxpbmUgPSBzaGlmdCBAeyRzZWxmLT57YnVmZmVyfX0gKQorICAgIHsKKyAgICAgICAgcHJpbnQgeyRzZWxmLT57Zmh9fSAkbGluZTsKKyAgICB9Cit9CisKKz1oZWFkMiBub2ZpbGUKKworVGhpcyBtZXRob2QgaW5kaWNhdGVzIG5vIGxvZ2dpbmcgaXMgZ29pbmcgdG8gYmUgdXNlZC4gSXQgZmx1c2hlcyBhbnkgZW50cmllcyBpbgordGhlIGludGVybmFsIGJ1ZmZlciwgYW5kIHNldHMgYSBmbGFnIHRvIGVuc3VyZSBubyBmdXJ0aGVyIGRhdGEgaXMgcHV0IHRoZXJlLgorCis9Y3V0CitzdWIgbm9maWxlCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKworICAgICRzZWxmLT57bm9sb2d9ID0gMTsKKworICAgIHJldHVybiB1bmxlc3MgKCBkZWZpbmVkICggJHNlbGYtPntidWZmZXJ9ICkgYW5kIHJlZiAkc2VsZi0+e2J1ZmZlcn0gZXEgIkFSUkFZIiApOworCisgICAgJHNlbGYtPntidWZmZXJ9ID0gW107Cit9CisKKz1oZWFkMiBfbG9nb3BlbgorCitJbnRlcm5hbCBtZXRob2QuIFJldHVybnMgdHJ1ZSBpZiB0aGUgbG9nIGZpbGUgaXMgb3BlbiwgZmFsc2Ugb3RoZXJ3aXNlLgorCis9Y3V0CitzdWIgX2xvZ29wZW4KK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworCisgICAgcmV0dXJuIDEgaWYgKCBkZWZpbmVkICggJHNlbGYtPntmaH0gKSBhbmQgcmVmICRzZWxmLT57Zmh9IGVxICJHTE9CIiApOworICAgIHJldHVybiAwOworfQorCis9aGVhZDIgZGVidWcgaW5mbyB3YXJuIGZhdGFsCisKK1RoZXNlIGZvdXIgbWV0aG9kcyBhcmUgd3JhcHBlcnMgdG8gX2xvZy4gVGhleSBwcm92aWRlIHRoZSBhY3R1YWwgaW50ZXJmYWNlIGZvcgorbG9nZ2luZyBkYXRhLgorCis9Y3V0CitzdWIgZGVidWcgeyBteSAkc2VsZiA9IHNoaWZ0OyAkc2VsZi0+X2xvZygiZGVidWciLCBAXyk7IH0KK3N1YiBpbmZvICB7IG15ICRzZWxmID0gc2hpZnQ7ICRzZWxmLT5fbG9nKCJpbmZvIiAsIEBfKTsgfQorc3ViIHdhcm4gIHsgbXkgJHNlbGYgPSBzaGlmdDsgJHNlbGYtPl9sb2coIndhcm4iICwgQF8pOyB9CitzdWIgZmF0YWwgeyBteSAkc2VsZiA9IHNoaWZ0OyAkc2VsZi0+X2xvZygiZmF0YWwiLCBAXyk7IH0KKworPWhlYWQyIF9sb2cKKworVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QgY2FsbGVkIGJ5IHRoZSBsb2dnaW5nIGZ1bmN0aW9ucy4gSXQgZ2VuZXJhdGVzIGEKK3RpbWVzdGFtcCBhbmQgcHVzaGVzIHRoZSBsb2dnZWQgbGluZSBlaXRoZXIgdG8gZmlsZSwgb3IgaW50ZXJuYWwgYnVmZmVyLgorCis9Y3V0CitzdWIgX2xvZworeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGxldmVsID0gc2hpZnQ7CisKKyAgICByZXR1cm4gaWYgKCAkc2VsZi0+e25vbG9nfSApOworCisgICAgbXkgQHRpbWUgPSBsb2NhbHRpbWU7CisgICAgbXkgJHRpbWVzdHJpbmcgPSBzcHJpbnRmKCIlNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkIDogJS01cyIsCisgICAgICAgICR0aW1lWzVdICsgMTkwMCwKKyAgICAgICAgJHRpbWVbNF0gKyAxLAorICAgICAgICAkdGltZVszXSwKKyAgICAgICAgJHRpbWVbMl0sCisgICAgICAgICR0aW1lWzFdLAorICAgICAgICAkdGltZVswXSwKKyAgICAgICAgdWMgJGxldmVsLAorICAgICk7CisKKyAgICBpZiAoICRzZWxmLT5fbG9nb3BlbiApCisgICAgeworICAgICAgICBwcmludCB7JHNlbGYtPntmaH19ICR0aW1lc3RyaW5nIC4gIiAtICIgLiBqb2luKCIgIixAXykgLiAiXG4iOworICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2ggQHskc2VsZi0+e2J1ZmZlcn19LCAkdGltZXN0cmluZyAuICIgLSAiIC4gam9pbigiICIsQF8pIC4gIlxuIjsKKyAgICB9Cit9CisKKz1oZWFkMiBERVNUUk9ZCisKK1RoaXMgbWV0aG9kIHNpbXBseSBjbG9zZXMgdGhlIGZpbGUgaGFuZGxlIGlmIG9uZSBpcyBvcGVuCisKKz1jdXQKK3N1YiBERVNUUk9ZCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKworICAgIGlmICggJHNlbGYtPl9sb2dvcGVuICkKKyAgICB7CisgICAgICAgIGNsb3NlICRzZWxmLT57Zmh9OworICAgIH0KK30KKworcGFja2FnZSBHSVRDVlM6OnVwZGF0ZXI7CisKKyMjIyMKKyMjIyMgQ29weXJpZ2h0IFRoZSBPcGVuIFVuaXZlcnNpdHkgVUsgLSAyMDA2LgorIyMjIworIyMjIyBBdXRob3JzOiBNYXJ0eW4gU21pdGggICAgPG1hcnR5bkBjYXRhbHlzdC5uZXQubno+CisjIyMjICAgICAgICAgIE1hcnRpbiBMYW5naG9mZiA8bWFydGluQGxhcHRvcC5vcmc+CisjIyMjCisjIyMjCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgREJJOworCis9aGVhZDEgTUVUSE9EUworCis9Y3V0CisKKz1oZWFkMiBuZXcKKworPWN1dAorc3ViIG5ldworeworICAgIG15ICRjbGFzcyA9IHNoaWZ0OworICAgIG15ICRjb25maWcgPSBzaGlmdDsKKyAgICBteSAkbW9kdWxlID0gc2hpZnQ7CisgICAgbXkgJGxvZyA9IHNoaWZ0OworCisgICAgZGllICJOZWVkIHRvIHNwZWNpZnkgYSBnaXQgcmVwb3NpdG9yeSIgdW5sZXNzICggZGVmaW5lZCgkY29uZmlnKSBhbmQgLWQgJGNvbmZpZyApOworICAgIGRpZSAiTmVlZCB0byBzcGVjaWZ5IGEgbW9kdWxlIiB1bmxlc3MgKCBkZWZpbmVkKCRtb2R1bGUpICk7CisKKyAgICAkY2xhc3MgPSByZWYoJGNsYXNzKSB8fCAkY2xhc3M7CisKKyAgICBteSAkc2VsZiA9IHt9OworCisgICAgYmxlc3MgJHNlbGYsICRjbGFzczsKKworICAgICRzZWxmLT57dmFsaWRfdGFibGVzfSA9IHsncmV2aXNpb24nID0+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXZpc2lvbl9peDEnID0+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXZpc2lvbl9peDInID0+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWFkJyA9PiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVhZF9peDEnID0+IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzJyA9PiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbWl0bXNncycgPT4gMX07CisKKyAgICAkc2VsZi0+e21vZHVsZX0gPSAkbW9kdWxlOworICAgICRzZWxmLT57Z2l0X3BhdGh9ID0gJGNvbmZpZyAuICIvIjsKKworICAgICRzZWxmLT57bG9nfSA9ICRsb2c7CisKKyAgICBkaWUgIkdpdCByZXBvICckc2VsZi0+e2dpdF9wYXRofScgZG9lc24ndCBleGlzdCIgdW5sZXNzICggLWQgJHNlbGYtPntnaXRfcGF0aH0gKTsKKworICAgICMgU3RvcmVzIGZ1bGwgc2hhMSdzIGZvciB2YXJpb3VzIGJyYW5jaC90YWcgbmFtZXMsIGFiYnJldmlhdGlvbnMsIGV0YzoKKyAgICAkc2VsZi0+e2NvbW1pdFJlZkNhY2hlfSA9IHt9OworCisgICAgJHNlbGYtPntkYmRyaXZlcn0gPSAkY2ZnLT57Z2l0Y3ZzfXskc3RhdGUtPnttZXRob2R9fXtkYmRyaXZlcn0gfHwKKyAgICAgICAgJGNmZy0+e2dpdGN2c317ZGJkcml2ZXJ9IHx8ICJTUUxpdGUiOworICAgICRzZWxmLT57ZGJuYW1lfSA9ICRjZmctPntnaXRjdnN9eyRzdGF0ZS0+e21ldGhvZH19e2RibmFtZX0gfHwKKyAgICAgICAgJGNmZy0+e2dpdGN2c317ZGJuYW1lfSB8fCAiJUdnaXRjdnMuJW0uc3FsaXRlIjsKKyAgICAkc2VsZi0+e2RidXNlcn0gPSAkY2ZnLT57Z2l0Y3ZzfXskc3RhdGUtPnttZXRob2R9fXtkYnVzZXJ9IHx8CisgICAgICAgICRjZmctPntnaXRjdnN9e2RidXNlcn0gfHwgIiI7CisgICAgJHNlbGYtPntkYnBhc3N9ID0gJGNmZy0+e2dpdGN2c317JHN0YXRlLT57bWV0aG9kfX17ZGJwYXNzfSB8fAorICAgICAgICAkY2ZnLT57Z2l0Y3ZzfXtkYnBhc3N9IHx8ICIiOworICAgICRzZWxmLT57ZGJ0YWJsZW5hbWVwcmVmaXh9ID0gJGNmZy0+e2dpdGN2c317JHN0YXRlLT57bWV0aG9kfX17ZGJ0YWJsZW5hbWVwcmVmaXh9IHx8CisgICAgICAgICRjZmctPntnaXRjdnN9e2RidGFibGVuYW1lcHJlZml4fSB8fCAiIjsKKyAgICBteSAlbWFwcGluZyA9ICggbSA9PiAkbW9kdWxlLAorICAgICAgICAgICAgICAgICAgICBhID0+ICRzdGF0ZS0+e21ldGhvZH0sCisgICAgICAgICAgICAgICAgICAgIHUgPT4gZ2V0bG9naW4gfHwgZ2V0cHd1aWQoJDwpIHx8ICQ8LAorICAgICAgICAgICAgICAgICAgICBHID0+ICRzZWxmLT57Z2l0X3BhdGh9LAorICAgICAgICAgICAgICAgICAgICBnID0+IG1hbmdsZV9kaXJuYW1lKCRzZWxmLT57Z2l0X3BhdGh9KSwKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAkc2VsZi0+e2RibmFtZX0gPX4gcy8lKFttYXVHZ10pLyRtYXBwaW5neyQxfS9lZzsKKyAgICAkc2VsZi0+e2RidXNlcn0gPX4gcy8lKFttYXVHZ10pLyRtYXBwaW5neyQxfS9lZzsKKyAgICAkc2VsZi0+e2RidGFibGVuYW1lcHJlZml4fSA9fiBzLyUoW21hdUdnXSkvJG1hcHBpbmd7JDF9L2VnOworICAgICRzZWxmLT57ZGJ0YWJsZW5hbWVwcmVmaXh9ID0gbWFuZ2xlX3RhYmxlbmFtZSgkc2VsZi0+e2RidGFibGVuYW1lcHJlZml4fSk7CisKKyAgICBkaWUgIkludmFsaWQgY2hhciAnOicgaW4gZGJkcml2ZXIiIGlmICRzZWxmLT57ZGJkcml2ZXJ9ID1+IC86LzsKKyAgICBkaWUgIkludmFsaWQgY2hhciAnOycgaW4gZGJuYW1lIiBpZiAkc2VsZi0+e2RibmFtZX0gPX4gLzsvOworICAgICRzZWxmLT57ZGJofSA9IERCSS0+Y29ubmVjdCgiZGJpOiRzZWxmLT57ZGJkcml2ZXJ9OmRibmFtZT0kc2VsZi0+e2RibmFtZX0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+e2RidXNlcn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT57ZGJwYXNzfSk7CisgICAgZGllICJFcnJvciBjb25uZWN0aW5nIHRvIGRhdGFiYXNlXG4iIHVubGVzcyBkZWZpbmVkICRzZWxmLT57ZGJofTsKKworICAgICRzZWxmLT57dGFibGVzfSA9IHt9OworICAgIGZvcmVhY2ggbXkgJHRhYmxlICgga2V5cyAleyRzZWxmLT57ZGJofS0+dGFibGVfaW5mbyh1bmRlZix1bmRlZix1bmRlZiwnVEFCTEUnKS0+ZmV0Y2hhbGxfaGFzaHJlZignVEFCTEVfTkFNRScpfSApCisgICAgeworICAgICAgICAkc2VsZi0+e3RhYmxlc317JHRhYmxlfSA9IDE7CisgICAgfQorCisgICAgIyBDb25zdHJ1Y3QgdGhlIHJldmlzaW9uIHRhYmxlIGlmIHJlcXVpcmVkCisgICAgIyBUaGUgcmV2aXNpb24gdGFibGUgc3RvcmVzIGFuIGVudHJ5IGZvciBlYWNoIGZpbGUsIGVhY2ggdGltZSB0aGF0IGZpbGUKKyAgICAjIGNoYW5nZXMuCisgICAgIyAgIG51bWJlck9mUmVjb3JkcyA9IE8oIG51bUNvbW1pdHMgKiBhdmVyYWdlTnVtQ2hhbmdlZEZpbGVzUGVyQ29tbWl0ICkKKyAgICAjIFRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gc3VwcG9ydCAiLXIge2NvbW1pdGhhc2h9IiBmb3IgYW55CisgICAgIyBmaWxlcyBleGNlcHQgZmlsZXMgdGhhdCB3ZXJlIG1vZGlmaWVkIGJ5IHRoYXQgY29tbWl0IChhbHNvLAorICAgICMgc29tZSBwbGFjZXMgaW4gdGhlIGNvZGUgaWdub3JlL2VmZmVjdGl2ZWx5IHN0cmlwIG91dCAtciBpbgorICAgICMgc29tZSBjYXNlcywgYmVmb3JlIGl0IGdldHMgcGFzc2VkIHRvIGdldG1ldGEoKSkuCisgICAgIyBUaGUgImZpbGVoYXNoIiBmaWVsZCB0eXBpY2FsbHkgaGFzIGEgZ2l0IGJsb2IgaGFzaCwgYnV0IGNhbiBhbHNvCisgICAgIyBiZSBzZXQgdG8gImRlYWQiIHRvIGluZGljYXRlIHRoYXQgdGhlIGdpdmVuIHZlcnNpb24gb2YgdGhlIGZpbGUKKyAgICAjIHNob3VsZCBub3QgZXhpc3QgaW4gdGhlIHNhbmRib3guCisgICAgdW5sZXNzICggJHNlbGYtPnt0YWJsZXN9eyRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uIil9ICkKKyAgICB7CisgICAgICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJyZXZpc2lvbiIpOworICAgICAgICBteSAkaXgxbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uX2l4MSIpOworICAgICAgICBteSAkaXgybmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uX2l4MiIpOworICAgICAgICAkc2VsZi0+e2RiaH0tPmRvKCIKKyAgICAgICAgICAgIENSRUFURSBUQUJMRSAkdGFibGVuYW1lICgKKyAgICAgICAgICAgICAgICBuYW1lICAgICAgIFRFWFQgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgcmV2aXNpb24gICBJTlRFR0VSIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIGZpbGVoYXNoICAgVEVYVCBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICBjb21taXRoYXNoIFRFWFQgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgYXV0aG9yICAgICBURVhUIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIG1vZGlmaWVkICAgVEVYVCBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICBtb2RlICAgICAgIFRFWFQgTk9UIE5VTEwKKyAgICAgICAgICAgICkKKyAgICAgICAgIik7CisgICAgICAgICRzZWxmLT57ZGJofS0+ZG8oIgorICAgICAgICAgICAgQ1JFQVRFIElOREVYICRpeDFuYW1lCisgICAgICAgICAgICBPTiAkdGFibGVuYW1lIChuYW1lLHJldmlzaW9uKQorICAgICAgICAiKTsKKyAgICAgICAgJHNlbGYtPntkYmh9LT5kbygiCisgICAgICAgICAgICBDUkVBVEUgSU5ERVggJGl4Mm5hbWUKKyAgICAgICAgICAgIE9OICR0YWJsZW5hbWUgKG5hbWUsY29tbWl0aGFzaCkKKyAgICAgICAgIik7CisgICAgfQorCisgICAgIyBDb25zdHJ1Y3QgdGhlIGhlYWQgdGFibGUgaWYgcmVxdWlyZWQKKyAgICAjIFRoZSBoZWFkIHRhYmxlIChhbG9uZyB3aXRoIHRoZSAibGFzdF9jb21taXQiIGVudHJ5IGluIHRoZSBwcm9wZXJ0eQorICAgICMgdGFibGUpIGlzIHRoZSBwZXJzaXN0ZWQgd29ya2luZyBzdGF0ZSBvZiB0aGUgInN1YiB1cGRhdGUiIHN1YnJvdXRpbmUuCisgICAgIyBBbGwgb2YgaXQncyBkYXRhIGlzIHJlYWQgZW50aXJlbHkgZmlyc3QsIGFuZCBjb21wbGV0ZWx5IHJlY3JlYXRlZAorICAgICMgbGFzdCwgZXZlcnkgdGltZSAic3ViIHVwZGF0ZSIgcnVucy4KKyAgICAjIFRoaXMgaXMgYWxzbyB1c2VkIGJ5ICJzdWIgZ2V0bWV0YSIgd2hlbiBpdCBpcyBhc2tlZCBmb3IgdGhlIGxhdGVzdAorICAgICMgdmVyc2lvbiBvZiBhIGZpbGUgKGFzIG9wcG9zZWQgdG8gc29tZSBzcGVjaWZpYyB2ZXJzaW9uKS4KKyAgICAjIEFub3RoZXIgd2F5IG9mIHRoaW5raW5nIGFib3V0IGl0IGlzIGFzIGEgc2luZ2xlIHNsaWNlIG91dCBvZgorICAgICMgInJldmlzaW9ucyIsIGdpdmluZyBqdXN0IHRoZSBtb3N0IHJlY2VudCByZXZpc2lvbiBpbmZvcm1hdGlvbiBmb3IKKyAgICAjIGVhY2ggZmlsZS4KKyAgICB1bmxlc3MgKCAkc2VsZi0+e3RhYmxlc317JHNlbGYtPnRhYmxlbmFtZSgiaGVhZCIpfSApCisgICAgeworICAgICAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgiaGVhZCIpOworICAgICAgICBteSAkaXgxbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoImhlYWRfaXgxIik7CisgICAgICAgICRzZWxmLT57ZGJofS0+ZG8oIgorICAgICAgICAgICAgQ1JFQVRFIFRBQkxFICR0YWJsZW5hbWUgKAorICAgICAgICAgICAgICAgIG5hbWUgICAgICAgVEVYVCBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICByZXZpc2lvbiAgIElOVEVHRVIgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgZmlsZWhhc2ggICBURVhUIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIGNvbW1pdGhhc2ggVEVYVCBOT1QgTlVMTCwKKyAgICAgICAgICAgICAgICBhdXRob3IgICAgIFRFWFQgTk9UIE5VTEwsCisgICAgICAgICAgICAgICAgbW9kaWZpZWQgICBURVhUIE5PVCBOVUxMLAorICAgICAgICAgICAgICAgIG1vZGUgICAgICAgVEVYVCBOT1QgTlVMTAorICAgICAgICAgICAgKQorICAgICAgICAiKTsKKyAgICAgICAgJHNlbGYtPntkYmh9LT5kbygiCisgICAgICAgICAgICBDUkVBVEUgSU5ERVggJGl4MW5hbWUKKyAgICAgICAgICAgIE9OICR0YWJsZW5hbWUgKG5hbWUpCisgICAgICAgICIpOworICAgIH0KKworICAgICMgQ29uc3RydWN0IHRoZSBwcm9wZXJ0aWVzIHRhYmxlIGlmIHJlcXVpcmVkCisgICAgIyAgLSAibGFzdF9jb21taXQiIC0gVXNlZCBieSAic3ViIHVwZGF0ZSIuCisgICAgdW5sZXNzICggJHNlbGYtPnt0YWJsZXN9eyRzZWxmLT50YWJsZW5hbWUoInByb3BlcnRpZXMiKX0gKQorICAgIHsKKyAgICAgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInByb3BlcnRpZXMiKTsKKyAgICAgICAgJHNlbGYtPntkYmh9LT5kbygiCisgICAgICAgICAgICBDUkVBVEUgVEFCTEUgJHRhYmxlbmFtZSAoCisgICAgICAgICAgICAgICAga2V5ICAgICAgICBURVhUIE5PVCBOVUxMIFBSSU1BUlkgS0VZLAorICAgICAgICAgICAgICAgIHZhbHVlICAgICAgVEVYVAorICAgICAgICAgICAgKQorICAgICAgICAiKTsKKyAgICB9CisKKyAgICAjIENvbnN0cnVjdCB0aGUgY29tbWl0bXNncyB0YWJsZSBpZiByZXF1aXJlZAorICAgICMgVGhlIGNvbW1pdG1zZ3MgdGFibGUgaXMgb25seSB1c2VkIGZvciBtZXJnZSBjb21taXRzLCBzaW5jZQorICAgICMgInN1YiB1cGRhdGUiIHdpbGwgb25seSBrZWVwIG9uZSBicmFuY2ggb2YgcGFyZW50cy4gIFNob3J0bG9ncworICAgICMgZm9yIGlnbm9yZWQgY29tbWl0cyAoaS5lLiBub3Qgb24gdGhlIGNob3NlbiBicmFuY2gpIHdpbGwgYmUgdXNlZAorICAgICMgdG8gY29uc3RydWN0IGEgcmVwbGFjZW1lbnQgImNvbGxhcHNlZCIgbWVyZ2UgY29tbWl0IG1lc3NhZ2UsCisgICAgIyB3aGljaCB3aWxsIGJlIHN0b3JlZCBpbiB0aGlzIHRhYmxlLiAgU2VlIGFsc28gInN1YiBjb21taXRtZXNzYWdlIi4KKyAgICB1bmxlc3MgKCAkc2VsZi0+e3RhYmxlc317JHNlbGYtPnRhYmxlbmFtZSgiY29tbWl0bXNncyIpfSApCisgICAgeworICAgICAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgiY29tbWl0bXNncyIpOworICAgICAgICAkc2VsZi0+e2RiaH0tPmRvKCIKKyAgICAgICAgICAgIENSRUFURSBUQUJMRSAkdGFibGVuYW1lICgKKyAgICAgICAgICAgICAgICBrZXkgICAgICAgIFRFWFQgTk9UIE5VTEwgUFJJTUFSWSBLRVksCisgICAgICAgICAgICAgICAgdmFsdWUgICAgICBURVhUCisgICAgICAgICAgICApCisgICAgICAgICIpOworICAgIH0KKworICAgIHJldHVybiAkc2VsZjsKK30KKworPWhlYWQyIHRhYmxlbmFtZQorCis9Y3V0CitzdWIgdGFibGVuYW1lCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkbmFtZSA9IHNoaWZ0OworCisgICAgaWYgKGV4aXN0cyAkc2VsZi0+e3ZhbGlkX3RhYmxlc317JG5hbWV9KSB7CisgICAgICAgIHJldHVybiAkc2VsZi0+e2RidGFibGVuYW1lcHJlZml4fSAuICRuYW1lOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiB1bmRlZjsKKyAgICB9Cit9CisKKz1oZWFkMiB1cGRhdGUKKworQnJpbmcgdGhlIGRhdGFiYXNlIHVwIHRvIGRhdGUgd2l0aCB0aGUgbGF0ZXN0IGNoYW5nZXMgZnJvbQordGhlIGdpdCByZXBvc2l0b3J5LgorCitJbnRlcm5hbCB3b3JraW5nIHN0YXRlIGlzIHJlYWQgb3V0IG9mIHRoZSAiaGVhZCIgdGFibGUgYW5kIHRoZQorImxhc3RfY29tbWl0IiBwcm9wZXJ0eSwgdGhlbiBpdCB1cGRhdGVzICJyZXZpc2lvbnMiIGJhc2VkIG9uIHRoYXQsIGFuZAorZmluYWxseSBpdCB3cml0ZXMgdGhlIG5ldyBpbnRlcm5hbCBzdGF0ZSBiYWNrIHRvIHRoZSAiaGVhZCIgdGFibGUKK3NvIGl0IGNhbiBiZSB1c2VkIGFzIGEgc3RhcnRpbmcgcG9pbnQgdGhlIG5leHQgdGltZSB1cGRhdGUgaXMgY2FsbGVkLgorCis9Y3V0CitzdWIgdXBkYXRlCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKworICAgICMgZmlyc3QgbGV0cyBnZXQgdGhlIGNvbW1pdCBsaXN0CisgICAgJEVOVntHSVRfRElSfSA9ICRzZWxmLT57Z2l0X3BhdGh9OworCisgICAgbXkgJGNvbW1pdHNoYTEgPSBgZ2l0IHJldi1wYXJzZSAkc2VsZi0+e21vZHVsZX1gOworICAgIGNob21wICRjb21taXRzaGExOworCisgICAgbXkgJGNvbW1pdGluZm8gPSBgZ2l0IGNhdC1maWxlIGNvbW1pdCAkc2VsZi0+e21vZHVsZX0gMj4mMWA7CisgICAgdW5sZXNzICggJGNvbW1pdGluZm8gPX4gL3RyZWVccytbYS16QS1aMC05XXs0MH0vICkKKyAgICB7CisgICAgICAgIGRpZSgiSW52YWxpZCBtb2R1bGUgJyRzZWxmLT57bW9kdWxlfSciKTsKKyAgICB9CisKKworICAgIG15ICRnaXRfbG9nOworICAgIG15ICRsYXN0Y29tbWl0ID0gJHNlbGYtPl9nZXRfcHJvcCgibGFzdF9jb21taXQiKTsKKworICAgIGlmIChkZWZpbmVkICRsYXN0Y29tbWl0ICYmICRsYXN0Y29tbWl0IGVxICRjb21taXRzaGExKSB7ICMgdXAtdG8tZGF0ZQorICAgICAgICAgIyBpbnZhbGlkYXRlIHRoZSBnZXRoZWFkIGNhY2hlCisgICAgICAgICAkc2VsZi0+Y2xlYXJDb21taXRSZWZDYWNoZXMoKTsKKyAgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgICMgU3RhcnQgZXhjbHVzaXZlIGxvY2sgaGVyZS4uLgorICAgICRzZWxmLT57ZGJofS0+YmVnaW5fd29yaygpIG9yIGRpZSAiQ2Fubm90IGxvY2sgZGF0YWJhc2UgZm9yIEJFR0lOIjsKKworICAgICMgVE9ETzogbG9nIHByb2Nlc3NpbmcgaXMgbWVtb3J5IGJvdW5kCisgICAgIyBpZiB3ZSBjYW4gcGFyc2UgaW50byBhIDJuZCBmaWxlIHRoYXQgaXMgaW4gcmV2ZXJzZSBvcmRlcgorICAgICMgd2UgY2FuIHByb2JhYmx5IGRvIHNvbWV0aGluZyByZWFsbHkgZWZmaWNpZW50CisgICAgbXkgQGdpdF9sb2dfcGFyYW1zID0gKCctLXByZXR0eScsICctLXBhcmVudHMnLCAnLS10b3BvLW9yZGVyJyk7CisKKyAgICBpZiAoZGVmaW5lZCAkbGFzdGNvbW1pdCkgeworICAgICAgICBwdXNoIEBnaXRfbG9nX3BhcmFtcywgIiRsYXN0Y29tbWl0Li4kc2VsZi0+e21vZHVsZX0iOworICAgIH0gZWxzZSB7CisgICAgICAgIHB1c2ggQGdpdF9sb2dfcGFyYW1zLCAkc2VsZi0+e21vZHVsZX07CisgICAgfQorICAgICMgZ2l0LXJldi1saXN0IGlzIHRoZSBiYWNrZW5kIC8gcGx1bWJpbmcgdmVyc2lvbiBvZiBnaXQtbG9nCisgICAgb3BlbihteSAkZ2l0TG9nUGlwZSwgJy18JywgJ2dpdCcsICdyZXYtbGlzdCcsIEBnaXRfbG9nX3BhcmFtcykKKyAgICAgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCBjYWxsIGdpdC1yZXYtbGlzdDogJCEiOworICAgIG15IEBjb21taXRzPXJlYWRDb21taXRzKCRnaXRMb2dQaXBlKTsKKyAgICBjbG9zZSAkZ2l0TG9nUGlwZTsKKworICAgICMgTm93IGFsbCB0aGUgY29tbWl0cyBhcmUgaW4gdGhlIEBjb21taXRzIGJ1Y2tldAorICAgICMgb3JkZXJlZCBieSB0aW1lIERFU0MuIGZvciBlYWNoIGNvbW1pdCB0aGF0IG5lZWRzIHByb2Nlc3NpbmcsCisgICAgIyBkZXRlcm1pbmUgd2hldGhlciBpdCdzIGZvbGxvd2luZyB0aGUgbGFzdCBoZWFkIHdlJ3ZlIHNlZW4gb3IgaWYKKyAgICAjIGl0J3Mgb24gaXRzIG93biBicmFuY2gsIGdyYWIgYSBmaWxlIGxpc3QsIGFuZCBhZGQgd2hhdGV2ZXIncyBjaGFuZ2VkCisgICAgIyBOT1RFOiAkbGFzdGNvbW1pdCByZWZlcnMgdG8gdGhlIGxhc3QgY29tbWl0IGZyb20gcHJldmlvdXMgcnVuCisgICAgIyAgICAgICAkbGFzdHBpY2tlZCBpcyB0aGUgbGFzdCBjb21taXQgd2UgcGlja2VkIGluIHRoaXMgcnVuCisgICAgbXkgJGxhc3RwaWNrZWQ7CisgICAgbXkgJGhlYWQgPSB7fTsKKyAgICBpZiAoZGVmaW5lZCAkbGFzdGNvbW1pdCkgeworICAgICAgICAkbGFzdHBpY2tlZCA9ICRsYXN0Y29tbWl0OworICAgIH0KKworICAgIG15ICRjb21taXR0b3RhbCA9IHNjYWxhcihAY29tbWl0cyk7CisgICAgbXkgJGNvbW1pdGNvdW50ID0gMDsKKworICAgICMgTG9hZCB0aGUgaGVhZCB0YWJsZSBpbnRvICRoZWFkIChmb3IgY2FjaGVkIGxvb2t1cHMgZHVyaW5nIHRoZSB1cGRhdGUgcHJvY2VzcykKKyAgICBmb3JlYWNoIG15ICRmaWxlICggQHskc2VsZi0+Z2V0aGVhZCgxKX0gKQorICAgIHsKKyAgICAgICAgJGhlYWQtPnskZmlsZS0+e25hbWV9fSA9ICRmaWxlOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJGNvbW1pdCAoIEBjb21taXRzICkKKyAgICB7CisgICAgICAgICRzZWxmLT57bG9nfS0+ZGVidWcoIkdJVENWUzo6dXBkYXRlciAtIFByb2Nlc3NpbmcgY29tbWl0ICRjb21taXQtPntoYXNofSAoIiAuICgrKyRjb21taXRjb3VudCkgLiAiIG9mICRjb21taXR0b3RhbCkiKTsKKyAgICAgICAgaWYgKGRlZmluZWQgJGxhc3RwaWNrZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghaW5fYXJyYXkoJGxhc3RwaWNrZWQsIEB7JGNvbW1pdC0+e3BhcmVudHN9fSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgIyBza2lwLCB3ZSdsbCBzZWUgdGhpcyBkZWx0YQorICAgICAgICAgICAgICAgICMgYXMgcGFydCBvZiBhIG1lcmdlIGxhdGVyCisgICAgICAgICAgICAgICAgIyB3YXJuICJza2lwcGluZyBvZmYtdHJhY2sgICRjb21taXQtPntoYXNofVxuIjsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfSBlbHNpZiAoQHskY29tbWl0LT57cGFyZW50c319ID4gMSkgeworICAgICAgICAgICAgICAgICMgaXQgaXMgYSBtZXJnZSBjb21taXQsIGZvciBlYWNoIHBhcmVudCB0aGF0IGlzCisgICAgICAgICAgICAgICAgIyBub3QgJGxhc3RwaWNrZWQgKG5vdCBnaXZlbiBhIENWUyByZXZpc2lvbiBudW1iZXIpLAorICAgICAgICAgICAgICAgICMgc2VlIGlmIHdlIGNhbiBnZXQgYSBsb2cKKyAgICAgICAgICAgICAgICAjIGZyb20gdGhlIG1lcmdlLWJhc2UgdG8gdGhhdCBwYXJlbnQgdG8gcHV0IGl0CisgICAgICAgICAgICAgICAgIyBpbiB0aGUgbWVzc2FnZSBhcyBhIG1lcmdlIHN1bW1hcnkuCisgICAgICAgICAgICAgICAgbXkgQHBhcmVudHMgPSBAeyRjb21taXQtPntwYXJlbnRzfX07CisgICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkcGFyZW50IChAcGFyZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmVudCBlcSAkbGFzdHBpY2tlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAjIGdpdC1tZXJnZS1iYXNlIGNhbiBwb3RlbnRpYWxseSAoYnV0IHJhcmVseSkgdGhyb3cKKyAgICAgICAgICAgICAgICAgICAgIyBzZXZlcmFsIGNhbmRpZGF0ZSBtZXJnZSBiYXNlcy4gbGV0J3MgYXNzdW1lCisgICAgICAgICAgICAgICAgICAgICMgdGhhdCB0aGUgZmlyc3Qgb25lIGlzIHRoZSBiZXN0IG9uZS4KKwkJICAgIG15ICRiYXNlID0gZXZhbCB7CisJCQkgICAgc2FmZV9waXBlX2NhcHR1cmUoJ2dpdCcsICdtZXJnZS1iYXNlJywKKwkJCQkJCSAkbGFzdHBpY2tlZCwgJHBhcmVudCk7CisJCSAgICB9OworCQkgICAgIyBUaGUgdHdvIGJyYW5jaGVzIG1heSBub3QgYmUgcmVsYXRlZCBhdCBhbGwsCisJCSAgICAjIGluIHdoaWNoIGNhc2UgbWVyZ2UgYmFzZSBzaW1wbHkgZmFpbHMgdG8gZmluZAorCQkgICAgIyBhbnksIGJ1dCB0aGF0J3MgT2suCisJCSAgICBuZXh0IGlmICgkQCk7CisKKyAgICAgICAgICAgICAgICAgICAgY2hvbXAgJGJhc2U7CisgICAgICAgICAgICAgICAgICAgIGlmICgkYmFzZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbXkgQG1lcmdlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICMgcHJpbnQgIndhbnQgdG8gbG9nIGJldHdlZW4gICRiYXNlICRwYXJlbnQgXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgb3BlbihHSVRMT0csICctfCcsICdnaXQnLCAnbG9nJywgJy0tcHJldHR5PW1lZGl1bScsICIkYmFzZS4uJHBhcmVudCIpCisJCQkgIG9yIGRpZSAiQ2Fubm90IGNhbGwgZ2l0LWxvZzogJCEiOworICAgICAgICAgICAgICAgICAgICAgICAgbXkgJG1lcmdlZGhhc2g7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoPEdJVExPRz4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9tcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmluZWQgJG1lcmdlZGhhc2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0vXmNvbW1pdFxzKyguKykkLykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1lcmdlZGhhc2ggPSAkMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGdyYWIgdGhlIGZpcnN0IGxpbmUgdGhhdCBsb29rcyBub24tcmZjODIyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWthIGhhcyBjb250ZW50IGFmdGVyIGxlYWRpbmcgc3BhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0vXlxzKyhcUy4qKSQvKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkdGl0bGUgPSAkMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aXRsZSA9IHN1YnN0cigkdGl0bGUsMCwxMDApOyAjIHRydW5jYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNoaWZ0IEBtZXJnZWQsICIkbWVyZ2VkaGFzaCAkdGl0bGUiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWYgJG1lcmdlZGhhc2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSBHSVRMT0c7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQG1lcmdlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21taXQtPnttZXJnZW1zZ30gPSAkY29tbWl0LT57bWVzc2FnZX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbW1pdC0+e21lcmdlbXNnfSAuPSAiXG5TdW1tYXJ5IG9mIG1lcmdlZCBjb21taXRzOlxuXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHN1bW1hcnkgKEBtZXJnZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbW1pdC0+e21lcmdlbXNnfSAuPSAiXHQkc3VtbWFyeVxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbW1pdC0+e21lcmdlbXNnfSAuPSAiXG5cbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmludCAiTWVzc2FnZSBmb3IgJGNvbW1pdC0+e2hhc2h9IFxuJGNvbW1pdC0+e21lcmdlbXNnfSI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAjIGNvbnZlcnQgdGhlIGRhdGUgdG8gQ1ZTLWhhcHB5IGZvcm1hdAorICAgICAgICBteSAkY3ZzRGF0ZSA9IGNvbnZlcnRUb0N2c0RhdGUoJGNvbW1pdC0+e2RhdGV9KTsKKworICAgICAgICBpZiAoIGRlZmluZWQgKCAkbGFzdHBpY2tlZCApICkKKyAgICAgICAgeworICAgICAgICAgICAgbXkgJGZpbGVwaXBlID0gb3BlbihGSUxFTElTVCwgJy18JywgJ2dpdCcsICdkaWZmLXRyZWUnLCAnLXonLCAnLXInLCAkbGFzdHBpY2tlZCwgJGNvbW1pdC0+e2hhc2h9KSBvciBkaWUoIkNhbm5vdCBjYWxsIGdpdC1kaWZmLXRyZWUgOiAkISIpOworCSAgICBsb2NhbCAoJC8pID0gIlwwIjsKKyAgICAgICAgICAgIHdoaWxlICggPEZJTEVMSVNUPiApCisgICAgICAgICAgICB7CisJCWNob21wOworICAgICAgICAgICAgICAgIHVubGVzcyAoIC9eOlxkezZ9XHMrKFswLTddezZ9KVxzK1thLWYwLTldezQwfVxzKyhbYS1mMC05XXs0MH0pXHMrKFx3KSQvbyApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkaWUoIkNvdWxkbid0IHByb2Nlc3MgZ2l0LWRpZmYtdHJlZSBsaW5lIDogJF8iKTsKKyAgICAgICAgICAgICAgICB9CisJCW15ICgkbW9kZSwgJGhhc2gsICRjaGFuZ2UpID0gKCQxLCAkMiwgJDMpOworCQlteSAkbmFtZSA9IDxGSUxFTElTVD47CisJCWNob21wKCRuYW1lKTsKKworICAgICAgICAgICAgICAgICMgJGxvZy0+ZGVidWcoIkZpbGUgbW9kZT0kbW9kZSwgaGFzaD0kaGFzaCwgY2hhbmdlPSRjaGFuZ2UsIG5hbWU9JG5hbWUiKTsKKworICAgICAgICAgICAgICAgIG15ICRkYk1vZGUgPSBjb252ZXJ0VG9EYk1vZGUoJG1vZGUpOworCisgICAgICAgICAgICAgICAgaWYgKCAkY2hhbmdlIGVxICJEIiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAjJGxvZy0+ZGVidWcoIkRFTEVURSAgICRuYW1lIik7CisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JG5hbWV9ID0geworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PiAkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uID0+ICRoZWFkLT57JG5hbWV9e3JldmlzaW9ufSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlaGFzaCA9PiAiZGVsZXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRoYXNoID0+ICRjb21taXQtPntoYXNofSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0+ICRjdnNEYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0+ICRjb21taXQtPnthdXRob3J9LAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9PiAkZGJNb2RlLAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAkc2VsZi0+aW5zZXJ0X3JldigkbmFtZSwgJGhlYWQtPnskbmFtZX17cmV2aXNpb259LCAkaGFzaCwgJGNvbW1pdC0+e2hhc2h9LCAkY3ZzRGF0ZSwgJGNvbW1pdC0+e2F1dGhvcn0sICRkYk1vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNpZiAoICRjaGFuZ2UgZXEgIk0iIHx8ICRjaGFuZ2UgZXEgIlQiICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICMkbG9nLT5kZWJ1ZygiTU9ESUZJRUQgJG5hbWUiKTsKKyAgICAgICAgICAgICAgICAgICAgJGhlYWQtPnskbmFtZX0gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0+ICRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb24gPT4gJGhlYWQtPnskbmFtZX17cmV2aXNpb259ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVoYXNoID0+ICRoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0aGFzaCA9PiAkY29tbWl0LT57aGFzaH0sCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9PiAkY3ZzRGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9PiAkY29tbWl0LT57YXV0aG9yfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPT4gJGRiTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmluc2VydF9yZXYoJG5hbWUsICRoZWFkLT57JG5hbWV9e3JldmlzaW9ufSwgJGhhc2gsICRjb21taXQtPntoYXNofSwgJGN2c0RhdGUsICRjb21taXQtPnthdXRob3J9LCAkZGJNb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzaWYgKCAkY2hhbmdlIGVxICJBIiApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAjJGxvZy0+ZGVidWcoIkFEREVEICAgICRuYW1lIik7CisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JG5hbWV9ID0geworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9PiAkbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uID0+ICRoZWFkLT57JG5hbWV9e3JldmlzaW9ufSA/ICRoZWFkLT57JG5hbWV9e3JldmlzaW9ufSsxIDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVoYXNoID0+ICRoYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0aGFzaCA9PiAkY29tbWl0LT57aGFzaH0sCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZCA9PiAkY3ZzRGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvciA9PiAkY29tbWl0LT57YXV0aG9yfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPT4gJGRiTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmluc2VydF9yZXYoJG5hbWUsICRoZWFkLT57JG5hbWV9e3JldmlzaW9ufSwgJGhhc2gsICRjb21taXQtPntoYXNofSwgJGN2c0RhdGUsICRjb21taXQtPnthdXRob3J9LCAkZGJNb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJGxvZy0+d2FybigiVU5LTk9XTiBGSUxFIENIQU5HRSBtb2RlPSRtb2RlLCBoYXNoPSRoYXNoLCBjaGFuZ2U9JGNoYW5nZSwgbmFtZT0kbmFtZSIpOworICAgICAgICAgICAgICAgICAgICBkaWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2xvc2UgRklMRUxJU1Q7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAjIHRoaXMgaXMgdXNlZCB0byBkZXRlY3QgZmlsZXMgcmVtb3ZlZCBmcm9tIHRoZSByZXBvCisgICAgICAgICAgICBteSAkc2Vlbl9maWxlcyA9IHt9OworCisgICAgICAgICAgICBteSAkZmlsZXBpcGUgPSBvcGVuKEZJTEVMSVNULCAnLXwnLCAnZ2l0JywgJ2xzLXRyZWUnLCAnLXonLCAnLXInLCAkY29tbWl0LT57aGFzaH0pIG9yIGRpZSgiQ2Fubm90IGNhbGwgZ2l0LWxzLXRyZWUgOiAkISIpOworCSAgICBsb2NhbCAkLyA9ICJcMCI7CisgICAgICAgICAgICB3aGlsZSAoIDxGSUxFTElTVD4gKQorICAgICAgICAgICAgeworCQljaG9tcDsKKyAgICAgICAgICAgICAgICB1bmxlc3MgKCAvXihcZCspXHMrKFx3KylccysoW2EtekEtWjAtOV0rKVx0KC4qKSQvbyApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkaWUoIkNvdWxkbid0IHByb2Nlc3MgZ2l0LWxzLXRyZWUgbGluZSA6ICRfIik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbXkgKCAkbW9kZSwgJGdpdF90eXBlLCAkZ2l0X2hhc2gsICRnaXRfZmlsZW5hbWUgKSA9ICggJDEsICQyLCAkMywgJDQgKTsKKworICAgICAgICAgICAgICAgICRzZWVuX2ZpbGVzLT57JGdpdF9maWxlbmFtZX0gPSAxOworCisgICAgICAgICAgICAgICAgbXkgKCAkb2xkaGFzaCwgJG9sZHJldmlzaW9uLCAkb2xkbW9kZSApID0gKAorICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRnaXRfZmlsZW5hbWV9e2ZpbGVoYXNofSwKKyAgICAgICAgICAgICAgICAgICAgJGhlYWQtPnskZ2l0X2ZpbGVuYW1lfXtyZXZpc2lvbn0sCisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JGdpdF9maWxlbmFtZX17bW9kZX0KKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgbXkgJGRiTW9kZSA9IGNvbnZlcnRUb0RiTW9kZSgkbW9kZSk7CisKKyAgICAgICAgICAgICAgICAjIHVubGVzcyB0aGUgZmlsZSBleGlzdHMgd2l0aCB0aGUgc2FtZSBoYXNoLCB3ZSBuZWVkIHRvIHVwZGF0ZSBpdCAuLi4KKyAgICAgICAgICAgICAgICB1bmxlc3MgKCBkZWZpbmVkKCRvbGRoYXNoKSBhbmQgJG9sZGhhc2ggZXEgJGdpdF9oYXNoIGFuZCBkZWZpbmVkKCRvbGRtb2RlKSBhbmQgJG9sZG1vZGUgZXEgJGRiTW9kZSApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBteSAkbmV3cmV2aXNpb24gPSAoICRvbGRyZXZpc2lvbiBvciAwICkgKyAxOworCisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JGdpdF9maWxlbmFtZX0gPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0+ICRnaXRfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9PiAkbmV3cmV2aXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlaGFzaCA9PiAkZ2l0X2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRoYXNoID0+ICRjb21taXQtPntoYXNofSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVkID0+ICRjdnNEYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0+ICRjb21taXQtPnthdXRob3J9LAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9PiAkZGJNb2RlLAorICAgICAgICAgICAgICAgICAgICB9OworCisKKyAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmluc2VydF9yZXYoJGdpdF9maWxlbmFtZSwgJG5ld3JldmlzaW9uLCAkZ2l0X2hhc2gsICRjb21taXQtPntoYXNofSwgJGN2c0RhdGUsICRjb21taXQtPnthdXRob3J9LCAkZGJNb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbG9zZSBGSUxFTElTVDsKKworICAgICAgICAgICAgIyBEZXRlY3QgZGVsZXRlZCBmaWxlcworICAgICAgICAgICAgZm9yZWFjaCBteSAkZmlsZSAoIHNvcnQga2V5cyAlJGhlYWQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVubGVzcyAoIGV4aXN0cyAkc2Vlbl9maWxlcy0+eyRmaWxlfSBvciAkaGVhZC0+eyRmaWxlfXtmaWxlaGFzaH0gZXEgImRlbGV0ZWQiICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JGZpbGV9e3JldmlzaW9ufSsrOworICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXtmaWxlaGFzaH0gPSAiZGVsZXRlZCI7CisgICAgICAgICAgICAgICAgICAgICRoZWFkLT57JGZpbGV9e2NvbW1pdGhhc2h9ID0gJGNvbW1pdC0+e2hhc2h9OworICAgICAgICAgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXttb2RpZmllZH0gPSAkY3ZzRGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgJGhlYWQtPnskZmlsZX17YXV0aG9yfSA9ICRjb21taXQtPnthdXRob3J9OworCisgICAgICAgICAgICAgICAgICAgICRzZWxmLT5pbnNlcnRfcmV2KCRmaWxlLCAkaGVhZC0+eyRmaWxlfXtyZXZpc2lvbn0sICRoZWFkLT57JGZpbGV9e2ZpbGVoYXNofSwgJGNvbW1pdC0+e2hhc2h9LCAkY3ZzRGF0ZSwgJGNvbW1pdC0+e2F1dGhvcn0sICRoZWFkLT57JGZpbGV9e21vZGV9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjIEVORCA6ICJEZXRlY3QgZGVsZXRlZCBmaWxlcyIKKyAgICAgICAgfQorCisKKyAgICAgICAgaWYgKGV4aXN0cyAkY29tbWl0LT57bWVyZ2Vtc2d9KQorICAgICAgICB7CisgICAgICAgICAgICAkc2VsZi0+aW5zZXJ0X21lcmdlbG9nKCRjb21taXQtPntoYXNofSwgJGNvbW1pdC0+e21lcmdlbXNnfSk7CisgICAgICAgIH0KKworICAgICAgICAkbGFzdHBpY2tlZCA9ICRjb21taXQtPntoYXNofTsKKworICAgICAgICAkc2VsZi0+X3NldF9wcm9wKCJsYXN0X2NvbW1pdCIsICRjb21taXQtPntoYXNofSk7CisgICAgfQorCisgICAgJHNlbGYtPmRlbGV0ZV9oZWFkKCk7CisgICAgZm9yZWFjaCBteSAkZmlsZSAoIHNvcnQga2V5cyAlJGhlYWQgKQorICAgIHsKKyAgICAgICAgJHNlbGYtPmluc2VydF9oZWFkKAorICAgICAgICAgICAgJGZpbGUsCisgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXtyZXZpc2lvbn0sCisgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXtmaWxlaGFzaH0sCisgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXtjb21taXRoYXNofSwKKyAgICAgICAgICAgICRoZWFkLT57JGZpbGV9e21vZGlmaWVkfSwKKyAgICAgICAgICAgICRoZWFkLT57JGZpbGV9e2F1dGhvcn0sCisgICAgICAgICAgICAkaGVhZC0+eyRmaWxlfXttb2RlfSwKKyAgICAgICAgKTsKKyAgICB9CisgICAgIyBpbnZhbGlkYXRlIHRoZSBnZXRoZWFkIGNhY2hlCisgICAgJHNlbGYtPmNsZWFyQ29tbWl0UmVmQ2FjaGVzKCk7CisKKworICAgICMgRW5kaW5nIGV4Y2x1c2l2ZSBsb2NrIGhlcmUKKyAgICAkc2VsZi0+e2RiaH0tPmNvbW1pdCgpIG9yIGRpZSAiRmFpbGVkIHRvIGNvbW1pdCBjaGFuZ2VzIHRvIFNRTGl0ZSI7Cit9CisKK3N1YiByZWFkQ29tbWl0cworeworICAgIG15ICRwaXBlSGFuZGxlID0gc2hpZnQ7CisgICAgbXkgQGNvbW1pdHM7CisKKyAgICBteSAlY29tbWl0ID0gKCk7CisKKyAgICB3aGlsZSAoIDwkcGlwZUhhbmRsZT4gKQorICAgIHsKKyAgICAgICAgY2hvbXA7CisgICAgICAgIGlmIChtL15jb21taXRccysoLiopJC8pIHsKKyAgICAgICAgICAgICMgb24gXmNvbW1pdCBsaW5lcyBwdXQgdGhlIGp1c3Qgc2VlbiBjb21taXQgaW4gdGhlIHN0YWNrCisgICAgICAgICAgICAjIGFuZCBwcmltZSB0aGluZ3MgZm9yIHRoZSBuZXh0IG9uZQorICAgICAgICAgICAgaWYgKGtleXMgJWNvbW1pdCkgeworICAgICAgICAgICAgICAgIG15ICVjb3B5ID0gJWNvbW1pdDsKKyAgICAgICAgICAgICAgICB1bnNoaWZ0IEBjb21taXRzLCBcJWNvcHk7CisgICAgICAgICAgICAgICAgJWNvbW1pdCA9ICgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXkgQHBhcmVudHMgPSBzcGxpdChtL1xzKy8sICQxKTsKKyAgICAgICAgICAgICRjb21taXR7aGFzaH0gPSBzaGlmdCBAcGFyZW50czsKKyAgICAgICAgICAgICRjb21taXR7cGFyZW50c30gPSBcQHBhcmVudHM7CisgICAgICAgIH0gZWxzaWYgKG0vXihcdys/KTpccysoLiopJC8gJiYgIWV4aXN0cygkY29tbWl0e21lc3NhZ2V9KSkgeworICAgICAgICAgICAgIyBvbiByZmM4MjItbGlrZSBsaW5lcyBzZWVuIGJlZm9yZSB3ZSBzZWUgYW55IG1lc3NhZ2UsCisgICAgICAgICAgICAjIGxvd2VyY2FzZSB0aGUgZW50cnkgYW5kIHB1dCBpdCBpbiB0aGUgaGFzaCBhcyBrZXktdmFsdWUKKyAgICAgICAgICAgICRjb21taXR7bGMoJDEpfSA9ICQyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIyBtZXNzYWdlIGxpbmVzIC0gc2tpcCBpbml0aWFsIGVtcHR5IGxpbmUKKyAgICAgICAgICAgICMgYW5kIHRyaW0gd2hpdGVzcGFjZQorICAgICAgICAgICAgaWYgKCFleGlzdHMoJGNvbW1pdHttZXNzYWdlfSkgJiYgbS9eXHMqJC8pIHsKKyAgICAgICAgICAgICAgICAjIGRlZmluZSBpdCB0byBtYXJrIHRoZSBlbmQgb2YgaGVhZGVycworICAgICAgICAgICAgICAgICRjb21taXR7bWVzc2FnZX0gPSAnJzsKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcy9eXHMrLy87IHMvXHMrJC8vOyAjIHRyaW0gd3MKKyAgICAgICAgICAgICRjb21taXR7bWVzc2FnZX0gLj0gJF8gLiAiXG4iOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaGlmdCBAY29tbWl0cywgXCVjb21taXQgaWYgKCBrZXlzICVjb21taXQgKTsKKworICAgIHJldHVybiBAY29tbWl0czsKK30KKworc3ViIGNvbnZlcnRUb0N2c0RhdGUKK3sKKyAgICBteSAkZGF0ZSA9IHNoaWZ0OworICAgICMgQ29udmVydCBmcm9tOiAiZ2l0IHJldi1saXN0IC0tcHJldHR5IiBmb3JtYXR0ZWQgZGF0ZQorICAgICMgQ29udmVydCB0bzogInRoZSBmb3JtYXQgc3BlY2lmaWVkIGJ5IFJGQzgyMiBhcyBtb2RpZmllZCBieSBSRkMxMTIzLiIKKyAgICAjIEV4YW1wbGU6IDI2IE1heSAxOTk3IDEzOjAxOjQwIC0wNDAwCisgICAgaWYoICRkYXRlID1+IC9eXHcrXHMrKFx3KylccysoXGQrKVxzKyhcZCs6XGQrOlxkKylccysoXGQrKVxzKyhbKy1dXGQrKSQvICkKKyAgICB7CisgICAgICAgICRkYXRlID0gIiQyICQxICQ0ICQzICQ1IjsKKyAgICB9CisKKyAgICByZXR1cm4gJGRhdGU7Cit9CisKK3N1YiBjb252ZXJ0VG9EYk1vZGUKK3sKKyAgICBteSAkbW9kZSA9IHNoaWZ0OworCisgICAgIyBOT1RFOiBUaGUgQ1ZTIHByb3RvY29sIHVzZXMgYSBzdHJpbmcgc2ltaWxhciAidT1ydyxnPXJ3LG89cnciLAorICAgICMgIGJ1dCB0aGUgZGF0YWJhc2UgIm1vZGUiIGNvbHVtbiBoaXN0b3JpY2FsbHkgKGFuZCBjdXJyZW50bHkpCisgICAgIyAgb25seSBzdG9yZXMgdGhlICJydyIgKGZvciB1c2VyKSBwYXJ0IG9mIHRoZSBzdHJpbmcuCisgICAgIyAgICBGVVRVUkU6IEl0IG1pZ2h0IG1ha2UgbW9yZSBzZW5zZSB0byBwZXJzaXN0IHRoZSByYXcKKyAgICAjICBvY3RhbCBtb2RlIChvciBwZXJoYXBzIHRoZSBmaW5hbCBmdWxsIENWUyBmb3JtKSBpbnN0ZWFkIG9mCisgICAgIyAgdGhpcyBoYWxmLWNvbnZlcnRlZCBmb3JtLCBidXQgaXQgaXNuJ3QgY3VycmVudGx5IHdvcnRoIHRoZQorICAgICMgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGhlYWRhY2hlcy4KKworICAgICRtb2RlPX4vXlxkezN9KFxkKVxkXGQkLzsKKyAgICBteSAkdXNlckJpdHM9JDE7CisKKyAgICBteSAkZGJNb2RlID0gIiI7CisgICAgJGRiTW9kZSAuPSAiciIgaWYgKCAkdXNlckJpdHMgJiA0ICk7CisgICAgJGRiTW9kZSAuPSAidyIgaWYgKCAkdXNlckJpdHMgJiAyICk7CisgICAgJGRiTW9kZSAuPSAieCIgaWYgKCAkdXNlckJpdHMgJiAxICk7CisgICAgJGRiTW9kZSA9ICJydyIgaWYgKCAkZGJNb2RlIGVxICIiICk7CisKKyAgICByZXR1cm4gJGRiTW9kZTsKK30KKworc3ViIGluc2VydF9yZXYKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgJHJldmlzaW9uID0gc2hpZnQ7CisgICAgbXkgJGZpbGVoYXNoID0gc2hpZnQ7CisgICAgbXkgJGNvbW1pdGhhc2ggPSBzaGlmdDsKKyAgICBteSAkbW9kaWZpZWQgPSBzaGlmdDsKKyAgICBteSAkYXV0aG9yID0gc2hpZnQ7CisgICAgbXkgJG1vZGUgPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgicmV2aXNpb24iKTsKKworICAgIG15ICRpbnNlcnRfcmV2ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiSU5TRVJUIElOVE8gJHRhYmxlbmFtZSAobmFtZSwgcmV2aXNpb24sIGZpbGVoYXNoLCBjb21taXRoYXNoLCBtb2RpZmllZCwgYXV0aG9yLCBtb2RlKSBWQUxVRVMgKD8sPyw/LD8sPyw/LD8pIix7fSwxKTsKKyAgICAkaW5zZXJ0X3Jldi0+ZXhlY3V0ZSgkbmFtZSwgJHJldmlzaW9uLCAkZmlsZWhhc2gsICRjb21taXRoYXNoLCAkbW9kaWZpZWQsICRhdXRob3IsICRtb2RlKTsKK30KKworc3ViIGluc2VydF9tZXJnZWxvZworeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGtleSA9IHNoaWZ0OworICAgIG15ICR2YWx1ZSA9IHNoaWZ0OworICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJjb21taXRtc2dzIik7CisKKyAgICBteSAkaW5zZXJ0X21lcmdlbG9nID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiSU5TRVJUIElOVE8gJHRhYmxlbmFtZSAoa2V5LCB2YWx1ZSkgVkFMVUVTICg/LD8pIix7fSwxKTsKKyAgICAkaW5zZXJ0X21lcmdlbG9nLT5leGVjdXRlKCRrZXksICR2YWx1ZSk7Cit9CisKK3N1YiBkZWxldGVfaGVhZAoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoImhlYWQiKTsKKworICAgIG15ICRkZWxldGVfaGVhZCA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIkRFTEVURSBGUk9NICR0YWJsZW5hbWUiLHt9LDEpOworICAgICRkZWxldGVfaGVhZC0+ZXhlY3V0ZSgpOworfQorCitzdWIgaW5zZXJ0X2hlYWQKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRuYW1lID0gc2hpZnQ7CisgICAgbXkgJHJldmlzaW9uID0gc2hpZnQ7CisgICAgbXkgJGZpbGVoYXNoID0gc2hpZnQ7CisgICAgbXkgJGNvbW1pdGhhc2ggPSBzaGlmdDsKKyAgICBteSAkbW9kaWZpZWQgPSBzaGlmdDsKKyAgICBteSAkYXV0aG9yID0gc2hpZnQ7CisgICAgbXkgJG1vZGUgPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgiaGVhZCIpOworCisgICAgbXkgJGluc2VydF9oZWFkID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiSU5TRVJUIElOVE8gJHRhYmxlbmFtZSAobmFtZSwgcmV2aXNpb24sIGZpbGVoYXNoLCBjb21taXRoYXNoLCBtb2RpZmllZCwgYXV0aG9yLCBtb2RlKSBWQUxVRVMgKD8sPyw/LD8sPyw/LD8pIix7fSwxKTsKKyAgICAkaW5zZXJ0X2hlYWQtPmV4ZWN1dGUoJG5hbWUsICRyZXZpc2lvbiwgJGZpbGVoYXNoLCAkY29tbWl0aGFzaCwgJG1vZGlmaWVkLCAkYXV0aG9yLCAkbW9kZSk7Cit9CisKK3N1YiBfZ2V0X3Byb3AKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRrZXkgPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgicHJvcGVydGllcyIpOworCisgICAgbXkgJGRiX3F1ZXJ5ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiU0VMRUNUIHZhbHVlIEZST00gJHRhYmxlbmFtZSBXSEVSRSBrZXk9PyIse30sMSk7CisgICAgJGRiX3F1ZXJ5LT5leGVjdXRlKCRrZXkpOworICAgIG15ICggJHZhbHVlICkgPSAkZGJfcXVlcnktPmZldGNocm93X2FycmF5OworCisgICAgcmV0dXJuICR2YWx1ZTsKK30KKworc3ViIF9zZXRfcHJvcAoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGtleSA9IHNoaWZ0OworICAgIG15ICR2YWx1ZSA9IHNoaWZ0OworICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJwcm9wZXJ0aWVzIik7CisKKyAgICBteSAkZGJfcXVlcnkgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKCJVUERBVEUgJHRhYmxlbmFtZSBTRVQgdmFsdWU9PyBXSEVSRSBrZXk9PyIse30sMSk7CisgICAgJGRiX3F1ZXJ5LT5leGVjdXRlKCR2YWx1ZSwgJGtleSk7CisKKyAgICB1bmxlc3MgKCAkZGJfcXVlcnktPnJvd3MgKQorICAgIHsKKyAgICAgICAgJGRiX3F1ZXJ5ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiSU5TRVJUIElOVE8gJHRhYmxlbmFtZSAoa2V5LCB2YWx1ZSkgVkFMVUVTICg/LD8pIix7fSwxKTsKKyAgICAgICAgJGRiX3F1ZXJ5LT5leGVjdXRlKCRrZXksICR2YWx1ZSk7CisgICAgfQorCisgICAgcmV0dXJuICR2YWx1ZTsKK30KKworPWhlYWQyIGdldGhlYWQKKworPWN1dAorCitzdWIgZ2V0aGVhZAoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGludFJldiA9IHNoaWZ0OworICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJoZWFkIik7CisKKyAgICByZXR1cm4gJHNlbGYtPntnZXRoZWFkX2NhY2hlfSBpZiAoIGRlZmluZWQgKCAkc2VsZi0+e2dldGhlYWRfY2FjaGV9ICkgKTsKKworICAgIG15ICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoIlNFTEVDVCBuYW1lLCBmaWxlaGFzaCwgbW9kZSwgcmV2aXNpb24sIG1vZGlmaWVkLCBjb21taXRoYXNoLCBhdXRob3IgRlJPTSAkdGFibGVuYW1lIE9SREVSIEJZIG5hbWUgQVNDIix7fSwxKTsKKyAgICAkZGJfcXVlcnktPmV4ZWN1dGUoKTsKKworICAgIG15ICR0cmVlID0gW107CisgICAgd2hpbGUgKCBteSAkZmlsZSA9ICRkYl9xdWVyeS0+ZmV0Y2hyb3dfaGFzaHJlZiApCisgICAgeworICAgICAgICBpZighJGludFJldikKKyAgICAgICAgeworICAgICAgICAgICAgJGZpbGUtPntyZXZpc2lvbn0gPSAiMS4kZmlsZS0+e3JldmlzaW9ufSIKKyAgICAgICAgfQorICAgICAgICBwdXNoIEAkdHJlZSwgJGZpbGU7CisgICAgfQorCisgICAgJHNlbGYtPntnZXRoZWFkX2NhY2hlfSA9ICR0cmVlOworCisgICAgcmV0dXJuICR0cmVlOworfQorCis9aGVhZDIgZ2V0QW55SGVhZAorCitSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGFuIGFycmF5IG9mIGdldG1ldGEgc3RydWN0dXJlcywgb25lCitwZXIgZmlsZSBpbiB0aGUgc3BlY2lmaWVkIHRyZWUgaGFzaC4KKworPWN1dAorCitzdWIgZ2V0QW55SGVhZAoreworICAgIG15ICgkc2VsZiwkaGFzaCkgPSBAXzsKKworICAgIGlmKCFkZWZpbmVkKCRoYXNoKSkKKyAgICB7CisgICAgICAgIHJldHVybiAkc2VsZi0+Z2V0aGVhZCgpOworICAgIH0KKworICAgIG15IEBmaWxlczsKKyAgICB7CisgICAgICAgIG9wZW4obXkgJGZpbGVQaXBlLCAnLXwnLCAnZ2l0JywgJ2xzLXRyZWUnLCAnLXonLCAnLXInLCAkaGFzaCkKKyAgICAgICAgICAgICAgICBvciBkaWUoIkNhbm5vdCBjYWxsIGdpdC1scy10cmVlIDogJCEiKTsKKyAgICAgICAgbG9jYWwgJC8gPSAiXDAiOworICAgICAgICBAZmlsZXM9PCRmaWxlUGlwZT47CisgICAgICAgIGNsb3NlICRmaWxlUGlwZTsKKyAgICB9CisKKyAgICBteSAkdHJlZT1bXTsKKyAgICBteSgkbGluZSk7CisgICAgZm9yZWFjaCAkbGluZSAoQGZpbGVzKQorICAgIHsKKyAgICAgICAgJGxpbmU9fnMvXDAkLy87CisgICAgICAgIHVubGVzcyAoICRsaW5lPX4vXihcZCspXHMrKFx3KylccysoW2EtekEtWjAtOV0rKVx0KC4qKSQvbyApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpZSgiQ291bGRuJ3QgcHJvY2VzcyBnaXQtbHMtdHJlZSBsaW5lIDogJF8iKTsKKyAgICAgICAgfQorCisgICAgICAgIG15KCRtb2RlLCAkZ2l0X3R5cGUsICRnaXRfaGFzaCwgJGdpdF9maWxlbmFtZSkgPSAoJDEsICQyLCAkMywgJDQpOworICAgICAgICBwdXNoIEAkdHJlZSwgJHNlbGYtPmdldE1ldGFGcm9tQ29tbWl0aGFzaCgkZ2l0X2ZpbGVuYW1lLCRoYXNoKTsKKyAgICB9CisKKyAgICByZXR1cm4gJHRyZWU7Cit9CisKKz1oZWFkMiBnZXRSZXZpc2lvbkRpck1hcAorCitBICJyZXZpc2lvbiBkaXIgbWFwIiBjb250YWlucyBhbGwgdGhlIHBsYWluLWZpbGUgZmlsZW5hbWVzIGFzc29jaWF0ZWQKK3dpdGggYSBwYXJ0aWN1bGFyIHJldmlzaW9uICh0cmVlLWlzaCksIG9yZ2FuaXplZCBieSBkaXJlY3Rvcnk6CisKKyAgJHR5cGUgPSAkb3V0LT57JGRpcn17JGZ1bGxOYW1lfQorCitUaGUgdHlwZSBvZiBlYWNoIGlzICJGIiAoZm9yIG9yZGluYXJ5IGZpbGUpIG9yICJEIiAoZm9yIGRpcmVjdG9yeSwKK2ZvciB3aGljaCB0aGUgbWFwICRvdXQtPnskZnVsbE5hbWV9IHdpbGwgYWxzbyBleGlzdCkuCisKKz1jdXQKKworc3ViIGdldFJldmlzaW9uRGlyTWFwCit7CisgICAgbXkgKCRzZWxmLCR2ZXIpPUBfOworCisgICAgaWYoIWRlZmluZWQoJHNlbGYtPntyZXZpc2lvbkRpck1hcENhY2hlfSkpCisgICAgeworICAgICAgICAkc2VsZi0+e3JldmlzaW9uRGlyTWFwQ2FjaGV9PXt9OworICAgIH0KKworICAgICAgICAjIEdldCBmaWxlIGxpc3QgKHByZXZpb3VzbHkgY2FjaGVkIHJlc3VsdHMgYXJlIGRlcGVuZGVudCBvbiBIRUFELAorICAgICAgICAjIGJ1dCBhcmUgZWFybHkgaW4gZWFjaCBjYXNlKToKKyAgICBteSAkY2FjaGVLZXk7CisgICAgbXkgKEBmaWxlTGlzdCk7CisgICAgaWYoICFkZWZpbmVkKCR2ZXIpIHx8ICR2ZXIgZXEgIiIgKQorICAgIHsKKyAgICAgICAgJGNhY2hlS2V5PSIiOworICAgICAgICBpZiggZGVmaW5lZCgkc2VsZi0+e3JldmlzaW9uRGlyTWFwQ2FjaGV9eyRjYWNoZUtleX0pICkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICRzZWxmLT57cmV2aXNpb25EaXJNYXBDYWNoZX17JGNhY2hlS2V5fTsKKyAgICAgICAgfQorCisgICAgICAgIG15IEBoZWFkID0gQHskc2VsZi0+Z2V0aGVhZCgpfTsKKyAgICAgICAgZm9yZWFjaCBteSAkZmlsZSAoIEBoZWFkICkKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dCBpZiAoICRmaWxlLT57ZmlsZWhhc2h9IGVxICJkZWxldGVkIiApOworCisgICAgICAgICAgICBwdXNoIEBmaWxlTGlzdCwkZmlsZS0+e25hbWV9OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIG15ICgkaGFzaCk9JHNlbGYtPmxvb2t1cENvbW1pdFJlZigkdmVyKTsKKyAgICAgICAgaWYoICFkZWZpbmVkKCRoYXNoKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB1bmRlZjsKKyAgICAgICAgfQorCisgICAgICAgICRjYWNoZUtleT0kaGFzaDsKKyAgICAgICAgaWYoIGRlZmluZWQoJHNlbGYtPntyZXZpc2lvbkRpck1hcENhY2hlfXskY2FjaGVLZXl9KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAkc2VsZi0+e3JldmlzaW9uRGlyTWFwQ2FjaGV9eyRjYWNoZUtleX07CisgICAgICAgIH0KKworICAgICAgICBvcGVuKG15ICRmaWxlUGlwZSwgJy18JywgJ2dpdCcsICdscy10cmVlJywgJy16JywgJy1yJywgJGhhc2gpCisgICAgICAgICAgICAgICAgb3IgZGllKCJDYW5ub3QgY2FsbCBnaXQtbHMtdHJlZSA6ICQhIik7CisgICAgICAgIGxvY2FsICQvID0gIlwwIjsKKyAgICAgICAgd2hpbGUgKCA8JGZpbGVQaXBlPiApCisgICAgICAgIHsKKyAgICAgICAgICAgIGNob21wOworICAgICAgICAgICAgdW5sZXNzICggL14oXGQrKVxzKyhcdyspXHMrKFthLXpBLVowLTldKylcdCguKikkL28gKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRpZSgiQ291bGRuJ3QgcHJvY2VzcyBnaXQtbHMtdHJlZSBsaW5lIDogJF8iKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbXkoJG1vZGUsICRnaXRfdHlwZSwgJGdpdF9oYXNoLCAkZ2l0X2ZpbGVuYW1lKSA9ICgkMSwgJDIsICQzLCAkNCk7CisKKyAgICAgICAgICAgIHB1c2ggQGZpbGVMaXN0LCAkZ2l0X2ZpbGVuYW1lOworICAgICAgICB9CisgICAgICAgIGNsb3NlICRmaWxlUGlwZTsKKyAgICB9CisKKyAgICAgICAgIyBDb252ZXJ0IHRvIG5vcm1hbGl6ZWQgZm9ybToKKyAgICBteSAlcmV2TWFwOworICAgIG15ICRmaWxlOworICAgIGZvcmVhY2ggJGZpbGUgKEBmaWxlTGlzdCkKKyAgICB7CisgICAgICAgIG15KCRkaXIpID0gKCRmaWxlPX5tJV4oPzooLiopLyk/KFteL10qKSQlKTsKKyAgICAgICAgJGRpcj0nJyBpZighZGVmaW5lZCgkZGlyKSk7CisKKyAgICAgICAgICAgICMgcGFyZW50IGRpcmVjdG9yaWVzOgorICAgICAgICAgICAgIyAuLi4gY3JlYXRlIGVtcHR5IGRpciBtYXBzIGZvciBwYXJlbnQgZGlyczoKKyAgICAgICAgbXkoJHRkKT0kZGlyOworICAgICAgICB3aGlsZSghZGVmaW5lZCgkcmV2TWFweyR0ZH0pKQorICAgICAgICB7CisgICAgICAgICAgICAkcmV2TWFweyR0ZH09e307CisKKyAgICAgICAgICAgIG15KCR0cCk9KCR0ZD1+bSVeKD86KC4qKS8pPyhbXi9dKikkJSk7CisgICAgICAgICAgICAkdHA9JycgaWYoIWRlZmluZWQoJHRwKSk7CisgICAgICAgICAgICAkdGQ9JHRwOworICAgICAgICB9CisgICAgICAgICAgICAjIC4uLiBhZGQgY2hpbGRyZW4gdG8gcGFyZW50IG1hcHMgKG5vdyB0aGF0IHRoZXkgZXhpc3QpOgorICAgICAgICAkdGQ9JGRpcjsKKyAgICAgICAgd2hpbGUoJHRkIG5lICIiKQorICAgICAgICB7CisgICAgICAgICAgICBteSgkdHApPSgkdGQ9fm0lXig/OiguKikvKT8oW14vXSopJCUpOworICAgICAgICAgICAgJHRwPScnIGlmKCFkZWZpbmVkKCR0cCkpOworCisgICAgICAgICAgICBpZihkZWZpbmVkKCRyZXZNYXB7JHRwfXskdGR9KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZigkcmV2TWFweyR0cH17JHRkfSBuZSAnRCcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkaWUgIldlaXJkIGZpbGUvZGlyZWN0b3J5IGluY29uc2lzdGVuY3kgaW4gJGNhY2hlS2V5IjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGFzdDsgICAjIGxvb3AgZXhpdAorICAgICAgICAgICAgfQorICAgICAgICAgICAgJHJldk1hcHskdHB9eyR0ZH09J0QnOworCisgICAgICAgICAgICAkdGQ9JHRwOworICAgICAgICB9CisKKyAgICAgICAgICAgICMgZmlsZQorICAgICAgICAkcmV2TWFweyRkaXJ9eyRmaWxlfT0nRic7CisgICAgfQorCisgICAgICAgICMgU2F2ZSBpbiBjYWNoZToKKyAgICAkc2VsZi0+e3JldmlzaW9uRGlyTWFwQ2FjaGV9eyRjYWNoZUtleX09XCVyZXZNYXA7CisgICAgcmV0dXJuICRzZWxmLT57cmV2aXNpb25EaXJNYXBDYWNoZX17JGNhY2hlS2V5fTsKK30KKworPWhlYWQyIGdldGxvZworCitTZWUgYWxzbyBnZXRoaXN0b3J5ZGVuc2UoKS4KKworPWN1dAorCitzdWIgZ2V0bG9nCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkZmlsZW5hbWUgPSBzaGlmdDsKKyAgICBteSAkcmV2RmlsdGVyID0gc2hpZnQ7CisKKyAgICBteSAkdGFibGVuYW1lID0gJHNlbGYtPnRhYmxlbmFtZSgicmV2aXNpb24iKTsKKworICAgICMgRmlsdGVyczoKKyAgICAjIFRPRE86IGRhdGUsIHN0YXRlLCBvciBieSBzcGVjaWZpYyBsb2dpbnMgZmlsdGVycz8KKyAgICAjIFRPRE86IEhhbmRsZSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiByZXZGaWx0ZXIgaXRlbXMsIGVhY2ggaXRlbQorICAgICMgICBjYW4gYmUgYSByYW5nZSBbb25seSBjYXNlIGN1cnJlbnRseSBoYW5kbGVkXSBvciBpbmRpdmlkdWFsCisgICAgIyAgIHJldiBvciBicmFuY2ggb3IgImJyYW5jaC4iLgorICAgICMgVE9ETzogQWRqdXN0ICRkYl9xdWVyeSBXSEVSRSBjbGF1c2UgYmFzZWQgb24gcmV2RmlsdGVyLCBpbnN0ZWFkIG9mCisgICAgIyAgIG1hbnVhbGx5IGZpbHRlcmluZyB0aGUgcmVzdWx0cyBvZiB0aGUgcXVlcnk/CisgICAgbXkgKCAkbWlucmV2LCAkbWF4cmV2ICk7CisgICAgaWYoIGRlZmluZWQoJHJldkZpbHRlcikgYW5kCisgICAgICAgICRzdGF0ZS0+e29wdH17cn0gPX4gL14oMS4oXGQrKSk/KDo6PykoMS4oXGQuKykpPyQvICkKKyAgICB7CisgICAgICAgIG15ICRjb250cm9sID0gJDM7CisgICAgICAgICRtaW5yZXYgPSAkMjsKKyAgICAgICAgJG1heHJldiA9ICQ1OworICAgICAgICAkbWlucmV2KysgaWYgKCBkZWZpbmVkKCRtaW5yZXYpIGFuZCAkY29udHJvbCBlcSAiOjoiICk7CisgICAgfQorCisgICAgbXkgJGRiX3F1ZXJ5ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiU0VMRUNUIG5hbWUsIGZpbGVoYXNoLCBhdXRob3IsIG1vZGUsIHJldmlzaW9uLCBtb2RpZmllZCwgY29tbWl0aGFzaCBGUk9NICR0YWJsZW5hbWUgV0hFUkUgbmFtZT0/IE9SREVSIEJZIHJldmlzaW9uIERFU0MiLHt9LDEpOworICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgkZmlsZW5hbWUpOworCisgICAgbXkgJHRvdGFsUmV2cz0wOworICAgIG15ICR0cmVlID0gW107CisgICAgd2hpbGUgKCBteSAkZmlsZSA9ICRkYl9xdWVyeS0+ZmV0Y2hyb3dfaGFzaHJlZiApCisgICAgeworICAgICAgICAkdG90YWxSZXZzKys7CisgICAgICAgIGlmKCBkZWZpbmVkKCRtaW5yZXYpIGFuZCAkZmlsZS0+e3JldmlzaW9ufSA8ICRtaW5yZXYgKQorICAgICAgICB7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgICAgIGlmKCBkZWZpbmVkKCRtYXhyZXYpIGFuZCAkZmlsZS0+e3JldmlzaW9ufSA+ICRtYXhyZXYgKQorICAgICAgICB7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisKKyAgICAgICAgJGZpbGUtPntyZXZpc2lvbn0gPSAiMS4iIC4gJGZpbGUtPntyZXZpc2lvbn07CisgICAgICAgIHB1c2ggQCR0cmVlLCAkZmlsZTsKKyAgICB9CisKKyAgICByZXR1cm4gKCR0cmVlLCR0b3RhbFJldnMpOworfQorCis9aGVhZDIgZ2V0bWV0YQorCitUaGlzIGZ1bmN0aW9uIHRha2VzIGEgZmlsZW5hbWUgKHdpdGggcGF0aCkgYXJndW1lbnQgYW5kIHJldHVybnMgYSBoYXNocmVmIG9mCittZXRhZGF0YSBmb3IgdGhhdCBmaWxlLgorCitUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzICRyZXZpc2lvbiBjYW4gYmUgc3BlY2lmaWVkOgorCisgICAtIEEgcmVmZXJlbmNlIHRvIGhhc2ggdGhhdCBjb250YWlucyBhICJ0YWciIHRoYXQgaXMgdGhlCisgICAgIGFjdHVhbCByZXZpc2lvbiAob25lIG9mIHRoZSBiZWxvdykuICBUT0RPOiBBbHNvIGFsbG93IGl0IHRvCisgICAgIHNwZWNpZnkgYSAiZGF0ZSIgaW4gdGhlIGhhc2guCisgICAtIHVuZGVmLCB0byByZWZlciB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb24gdGhlIG1haW4gYnJhbmNoLgorICAgLSBGdWxsIENWUyBjbGllbnQgcmV2aXNpb24gbnVtYmVyIChtYXBwZWQgdG8gaW50ZWdlciBpbiBEQiwgd2l0aG91dCB0aGUKKyAgICAgIjEuIiBwcmVmaXgpLAorICAgLSBDb21wbGV4IENWUy1jb21wYXRpYmxlICJzcGVjaWFsIiByZXZpc2lvbiBudW1iZXIgZm9yCisgICAgIG5vbi1saW5lYXIgaGlzdG9yeSAoc2VlIGNvbW1lbnQgYmVsb3cpCisgICAtIGdpdCBjb21taXQgc2hhMSBoYXNoCisgICAtIGJyYW5jaCBvciB0YWcgbmFtZQorCis9Y3V0CisKK3N1YiBnZXRtZXRhCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkZmlsZW5hbWUgPSBzaGlmdDsKKyAgICBteSAkcmV2aXNpb24gPSBzaGlmdDsKKyAgICBteSAkdGFibGVuYW1lX3JldiA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uIik7CisgICAgbXkgJHRhYmxlbmFtZV9oZWFkID0gJHNlbGYtPnRhYmxlbmFtZSgiaGVhZCIpOworCisgICAgaWYgKCByZWYoJHJldmlzaW9uKSBlcSAiSEFTSCIgKQorICAgIHsKKyAgICAgICAgJHJldmlzaW9uID0gJHJldmlzaW9uLT57dGFnfTsKKyAgICB9CisKKyAgICAjIE92ZXJ2aWV3IG9mIENWUyByZXZpc2lvbiBudW1iZXJzOgorICAgICMKKyAgICAjIEdlbmVyYWwgQ1ZTIG51bWJlcmluZyBzY2hlbWU6CisgICAgIyAgIC0gQmFzaWMgbWFpbmxpbmUgYnJhbmNoIG51bWJlcnM6ICIxLjEiLCAiMS4yIiwgIjEuMyIsIGV0Yy4KKyAgICAjICAgLSBSZXN1bHQgb2YgImN2cyBjaGVja2luIC1yIiAocG9zc2libGUsIGJ1dCBub3QgcmVhbGx5CisgICAgIyAgICAgcmVjb21tZW5kZWQpOiAiMi4xIiwgIjIuMiIsIGV0YworICAgICMgICAtIEJyYW5jaCB0YWc6ICIxLjIuMC5uIiwgd2hlcmUgIjEuMiIgaXMgcmV2aXNpb24gaXQgd2FzIGJyYW5jaGVkCisgICAgIyAgICAgZnJvbSwgIjAiIGlzIGEgbWFnaWMgcGxhY2Vob2xkZXIgdGhhdCBpZGVudGlmaWVzIGl0IGFzIGEKKyAgICAjICAgICBicmFuY2ggdGFnIGluc3RlYWQgb2YgYSB2ZXJzaW9uIHRhZywgYW5kIG4gaXMgMiB0aW1lcyB0aGUKKyAgICAjICAgICBicmFuY2ggbnVtYmVyIG9mZiBvZiAiMS4yIiwgc3RhcnRpbmcgd2l0aCAiMiIuCisgICAgIyAgIC0gVmVyc2lvbiBvbiBhIGJyYW5jaDogIjEuMi5uLngiLCB3aGVyZSAiMS4yIiBpcyBicmFuY2gtZnJvbSwgIm4iCisgICAgIyAgICAgaXMgYnJhbmNoIG51bWJlciBvZmYgb2YgIjEuMiIgKGxpa2UgbiBhYm92ZSksIGFuZCAieCIgaXMKKyAgICAjICAgICB0aGUgdmVyc2lvbiBudW1iZXIgb24gdGhlIGJyYW5jaC4KKyAgICAjICAgLSBCcmFuY2hlcyBjYW4gYnJhbmNoIG9mZiBvZiBicmFuY2hlczogIjEuMy4yLjcuNC4xIiAoZXZlbiBudW1iZXIKKyAgICAjICAgICBvZiBjb21wb25lbnRzKS4KKyAgICAjICAgLSBPZGQgIm4icyBhcmUgdXNlZCBieSAidmVuZG9yIGJyYW5jaGVzIiB0aGF0IHJlc3VsdAorICAgICMgICAgIGZyb20gImN2cyBpbXBvcnQiLiAgVmVuZG9yIGJyYW5jaGVzIGhhdmUgYWRkaXRpb25hbAorICAgICMgICAgIHN0cmFuZ2VuZXNzIGluIHRoZSBzZW5zZSB0aGF0IHRoZSBtYWluIHJjcyAiaGVhZCIgb2YgdGhlIG1haW4KKyAgICAjICAgICBicmFuY2ggd2lsbCAodGVtcG9yYXJpbHkgdW50aWwgZmlyc3Qgbm9ybWFsIGNvbW1pdCkgcG9pbnQKKyAgICAjICAgICB0byB0aGUgdmVyc2lvbiBvbiB0aGUgdmVuZG9yIGJyYW5jaCwgcmF0aGVyIHRoYW4gdGhlIGFjdHVhbAorICAgICMgICAgIG1haW4gYnJhbmNoLiAgKEZVVFVSRTogVGhpcyBtYXkgcHJvdmlkZSBhbiBvcHBvcnR1bml0eQorICAgICMgICAgIHRvIHVzZSAic3RyYW5nZSIgcmV2aXNpb24gbnVtYmVycyBmb3IgZmFzdC1mb3J3YXJkLW1lcmdlZAorICAgICMgICAgIGJyYW5jaCB0aXAgd2hlbiBDVlMgY2xpZW50IGlzIGFza2luZyBmb3IgdGhlIG1haW4gYnJhbmNoLikKKyAgICAjCisgICAgIyBnaXQtY3Zzc2VydmVyIENWUy1jb21wYXRpYmxlIHNwZWNpYWwgbnVtYmVyaW5nIHNjaGVtZXM6CisgICAgIyAgIC0gQ3VycmVudGx5IGdpdC1jdnNzZXJ2ZXIgb25seSB0cmllcyB0byBiZSBpZGVudGljYWwgdG8gQ1ZTIGZvcgorICAgICMgICAgIHNpbXBsZSAiMS54IiBudW1iZXJzIG9uIHRoZSAibWFpbiIgYnJhbmNoIChhcyBpZGVudGlmaWVkCisgICAgIyAgICAgYnkgdGhlIG1vZHVsZSBuYW1lIHRoYXQgd2FzIG9yaWdpbmFsbHkgY3ZzIGNoZWNrb3V0J2VkKS4KKyAgICAjICAgLSBUaGUgZGF0YWJhc2Ugb25seSBzdG9yZXMgdGhlICJ4IiBwYXJ0LCBmb3IgaGlzdG9yaWNhbCByZWFzb25zLgorICAgICMgICAgIEJ1dCBtb3N0IG9mIHRoZSByZXN0IG9mIHRoZSBjdnNzZXJ2ZXIgcHJlc2VydmVzCisgICAgIyAgICAgYW5kIHRoaW5rcyB1c2luZyB0aGUgZnVsbCByZXZpc2lvbiBudW1iZXIuCisgICAgIyAgIC0gVG8gaGFuZGxlIG5vbi1saW5lYXIgaGlzdG9yeSwgaXQgdXNlcyBhIHZlcnNpb24gb2YgdGhlIGZvcm0KKyAgICAjICAgICAiMi4xLjEuMjAwMC5iLmIuYi4iLi4uLCB3aGVyZSB0aGUgMi4xLjEuMjAwMCBpcyB0byBoZWxwIHVuaXF1ZWx5CisgICAgIyAgICAgaWRlbnRpZnkgdGhpcyBhcyBhIHNwZWNpYWwgcmV2aXNpb24gbnVtYmVyLCBhbmQgdGhlcmUgYXJlCisgICAgIyAgICAgMjAgYidzIHRoYXQgdG9nZXRoZXIgZW5jb2RlIHRoZSBzaGExIGdpdCBjb21taXQgZnJvbSB3aGljaAorICAgICMgICAgIHRoaXMgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb3JpZ2luYXRlZC4gIEVhY2ggYiBpcworICAgICMgICAgIHRoZSBudW1lcmljYWwgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYnl0ZSBwbHVzCisgICAgIyAgICAgMTAwLgorICAgICMgICAgICAtICJwbHVzIDEwMCIgYXZvaWRzICIwInMsIGFuZCBhbHNvIHJlZHVjZXMgdGhlCisgICAgIyAgICAgICAgbGlrZWxpaG9vZCBvZiBhIGNvbGxpc2lvbiBpbiB0aGUgY2FzZSB0aGF0IHNvbWVvbmUgc29tZWRheQorICAgICMgICAgICAgIHdyaXRlcyBhbiBpbXBvcnQgdG9vbCB0aGF0IHRyaWVzIHRvIHByZXNlcnZlIG9yaWdpbmFsCisgICAgIyAgICAgICAgQ1ZTIHJldmlzaW9uIG51bWJlcnMsIGFuZCB0aGUgb3JpZ2luYWwgQ1ZTIGRhdGEgaGFkIGRvbmUKKyAgICAjICAgICAgICBsb3RzIG9mIGJyYW5jaGVzIG9mZiBvZiBicmFuY2hlcyBhbmQgb3RoZXIgc3RyYW5nZW5lc3MgdG8KKyAgICAjICAgICAgICBlbmQgdXAgd2l0aCBhIHJlYWwgdmVyc2lvbiBudW1iZXIgdGhhdCBqdXN0IGhhcHBlbnMgdG8gbG9vaworICAgICMgICAgICAgIGxpa2UgdGhpcyBzcGVjaWFsIHJldmlzaW9uIG51bWJlciBmb3JtLiAgQWxzbywgaWYgbmVlZGVkCisgICAgIyAgICAgICAgdGhlcmUgYXJlIHNldmVyYWwgd2F5cyB0byBleHRlbmQvaWRlbnRpZnkgYWx0ZXJuYXRpdmUgZW5jb2RpbmdzCisgICAgIyAgICAgICAgd2l0aGluIHRoZSAiMi4xLjEuMjAwMCIgcGFydCBpZiBuZWNlc3NhcnkuCisgICAgIyAgICAgIC0gVW5saWtlIHJlYWwgQ1ZTIHJldmlzaW9ucywgeW91IGNhbid0IHJlYWxseSByZWNvbnN0cnVjdCB3aGF0CisgICAgIyAgICAgICAgcmVsYXRpb24gYSByZXZpc2lvbiBvZiB0aGlzIGZvcm0gaGFzIHRvIG90aGVyIHJldmlzaW9ucy4KKyAgICAjICAgLSBGVVRVUkU6IFRPRE86IFJld29yayBkYXRhYmFzZSBzb21laG93IHRvIG1ha2UgdXAgYW5kIHJlbWVtYmVyCisgICAgIyAgICAgZnVsbHktQ1ZTLWNvbXBhdGlibGUgYnJhbmNoZXMgYW5kIGJyYW5jaCB2ZXJzaW9uIG51bWJlcnMuCisKKyAgICBteSAkbWV0YTsKKyAgICBpZiAoIGRlZmluZWQoJHJldmlzaW9uKSApCisgICAgeworICAgICAgICBpZiAoICRyZXZpc2lvbiA9fiAvXjFcLihcZCspJC8gKQorICAgICAgICB7CisgICAgICAgICAgICBteSAoJGludFJldikgPSAkMTsKKyAgICAgICAgICAgIG15ICRkYl9xdWVyeTsKKyAgICAgICAgICAgICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoCisgICAgICAgICAgICAgICAgIlNFTEVDVCAqIEZST00gJHRhYmxlbmFtZV9yZXYgV0hFUkUgbmFtZT0/IEFORCByZXZpc2lvbj0/IiwKKyAgICAgICAgICAgICAgICB7fSwxKTsKKyAgICAgICAgICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgkZmlsZW5hbWUsICRpbnRSZXYpOworICAgICAgICAgICAgJG1ldGEgPSAkZGJfcXVlcnktPmZldGNocm93X2hhc2hyZWY7CisgICAgICAgIH0KKyAgICAgICAgZWxzaWYgKCAkcmV2aXNpb24gPX4gL14yXC4xXC4xXC4yMDAwKFwuWzEtM11bMC05XVswLTldKXsyMH0kLyApCisgICAgICAgIHsKKyAgICAgICAgICAgIG15ICgkY29tbWl0SGFzaCk9KCRyZXZpc2lvbj1+L14yXC4xXC4xXC4yMDAwKC4qKSQvKTsKKyAgICAgICAgICAgICRjb21taXRIYXNoPX5zL1wuKFswLTldKykvc3ByaW50ZigiJTAyeCIsJDEtMTAwKS9lZzsKKyAgICAgICAgICAgIGlmKCRjb21taXRIYXNoPX4vXlswLTlhLWZdezQwfSQvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAkc2VsZi0+Z2V0TWV0YUZyb21Db21taXRoYXNoKCRmaWxlbmFtZSwkY29tbWl0SGFzaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICMgZXJyb3IgcmVjb3Zlcnk6IGZhbGwgYmFjayBvbiBoZWFkIHZlcnNpb24gYmVsb3cKKyAgICAgICAgICAgIHByaW50ICJFIEZhaWxlZCB0byBmaW5kICRmaWxlbmFtZSB2ZXJzaW9uPSRyZXZpc2lvbiBvciBjb21taXQ9JGNvbW1pdEhhc2hcbiI7CisgICAgICAgICAgICAkbG9nLT53YXJuaW5nKCJmYWlsZWQgZ2V0ICRyZXZpc2lvbiB3aXRoIGNvbW1pdGhhc2g9JGNvbW1pdEhhc2giKTsKKyAgICAgICAgICAgIHVuZGVmICRyZXZpc2lvbjsKKyAgICAgICAgfQorICAgICAgICBlbHNpZiAoICRyZXZpc2lvbiA9fiAvXlswLTlhLWZdezQwfSQvICkKKyAgICAgICAgeworICAgICAgICAgICAgIyBUcnkgREIgZmlyc3QuICBUaGlzIGlzIG1vc3RseSBvbmx5IHVzZWZ1bCBmb3IgcmVxX2Fubm90YXRlKCksCisgICAgICAgICAgICAjIHdoaWNoIG9ubHkgY2FsbHMgdGhpcyBmb3Igc3R1ZmYgdGhhdCBzaG91bGQgYWxyZWFkeSBiZSBpbgorICAgICAgICAgICAgIyB0aGUgREIuICBJdCBpcyBmYWlybHkgbGlrZWx5IHRvIGJlIGEgd2FzdGUgb2YgdGltZQorICAgICAgICAgICAgIyBpbiBtb3N0IG90aGVyIGNhc2VzIFt1bmxlc3MgdGhlIGZpbGUgaGFwcGVuZWQgdG8gYmUKKyAgICAgICAgICAgICMgbW9kaWZpZWQgaW4gJHJldmlzaW9uIHNwZWNpZmljYWxseV0sIGJ1dAorICAgICAgICAgICAgIyBpdCBpcyBwcm9iYWJseSBpbiB0aGUgbm9pc2UgY29tcGFyZWQgdG8gaG93IGxvbmcKKyAgICAgICAgICAgICMgZ2V0TWV0YUZyb21Db21taXRoYXNoKCkgd2lsbCB0YWtlLgorICAgICAgICAgICAgbXkgJGRiX3F1ZXJ5OworICAgICAgICAgICAgJGRiX3F1ZXJ5ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgKKyAgICAgICAgICAgICAgICAiU0VMRUNUICogRlJPTSAkdGFibGVuYW1lX3JldiBXSEVSRSBuYW1lPT8gQU5EIGNvbW1pdGhhc2g9PyIsCisgICAgICAgICAgICAgICAge30sMSk7CisgICAgICAgICAgICAkZGJfcXVlcnktPmV4ZWN1dGUoJGZpbGVuYW1lLCAkcmV2aXNpb24pOworICAgICAgICAgICAgJG1ldGEgPSAkZGJfcXVlcnktPmZldGNocm93X2hhc2hyZWY7CisKKyAgICAgICAgICAgIGlmKCEgJG1ldGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbXkoJHJldkNvbW1pdCk9JHNlbGYtPmxvb2t1cENvbW1pdFJlZigkcmV2aXNpb24pOworICAgICAgICAgICAgICAgIGlmKCRyZXZDb21taXQ9fi9eWzAtOWEtZl17NDB9JC8pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHNlbGYtPmdldE1ldGFGcm9tQ29tbWl0aGFzaCgkZmlsZW5hbWUsJHJldkNvbW1pdCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIyBlcnJvciByZWNvdmVyeTogbm90aGluZyBmb3VuZDoKKyAgICAgICAgICAgICAgICBwcmludCAiRSBGYWlsZWQgdG8gZmluZCAkZmlsZW5hbWUgdmVyc2lvbj0kcmV2aXNpb25cbiI7CisgICAgICAgICAgICAgICAgJGxvZy0+d2FybmluZygiZmFpbGVkIGdldCAkcmV2aXNpb24iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gJG1ldGE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBteSgkcmV2Q29tbWl0KT0kc2VsZi0+bG9va3VwQ29tbWl0UmVmKCRyZXZpc2lvbik7CisgICAgICAgICAgICBpZigkcmV2Q29tbWl0PX4vXlswLTlhLWZdezQwfSQvKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAkc2VsZi0+Z2V0TWV0YUZyb21Db21taXRoYXNoKCRmaWxlbmFtZSwkcmV2Q29tbWl0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgIyBlcnJvciByZWNvdmVyeTogZmFsbCBiYWNrIG9uIGhlYWQgdmVyc2lvbiBiZWxvdworICAgICAgICAgICAgcHJpbnQgIkUgRmFpbGVkIHRvIGZpbmQgJGZpbGVuYW1lIHZlcnNpb249JHJldmlzaW9uXG4iOworICAgICAgICAgICAgJGxvZy0+d2FybmluZygiZmFpbGVkIGdldCAkcmV2aXNpb24iKTsKKyAgICAgICAgICAgIHVuZGVmICRyZXZpc2lvbjsgICMgQWxsb3cgZmFsbGJhY2sKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmKCFkZWZpbmVkKCRyZXZpc2lvbikpCisgICAgeworICAgICAgICBteSAkZGJfcXVlcnk7CisgICAgICAgICRkYl9xdWVyeSA9ICRzZWxmLT57ZGJofS0+cHJlcGFyZV9jYWNoZWQoCisgICAgICAgICAgICAgICAgIlNFTEVDVCAqIEZST00gJHRhYmxlbmFtZV9oZWFkIFdIRVJFIG5hbWU9PyIse30sMSk7CisgICAgICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgkZmlsZW5hbWUpOworICAgICAgICAkbWV0YSA9ICRkYl9xdWVyeS0+ZmV0Y2hyb3dfaGFzaHJlZjsKKyAgICB9CisKKyAgICBpZigkbWV0YSkKKyAgICB7CisgICAgICAgICRtZXRhLT57cmV2aXNpb259ID0gIjEuJG1ldGEtPntyZXZpc2lvbn0iOworICAgIH0KKyAgICByZXR1cm4gJG1ldGE7Cit9CisKK3N1YiBnZXRNZXRhRnJvbUNvbW1pdGhhc2gKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRmaWxlbmFtZSA9IHNoaWZ0OworICAgIG15ICRyZXZDb21taXQgPSBzaGlmdDsKKworICAgICMgTk9URTogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHNjYWxlIHdlbGwgKGxvdHMgb2YgZm9ya3MpLCBlc3BlY2lhbGx5CisgICAgIyAgIGlmIHlvdSBoYXZlIG1hbnkgZmlsZXMgdGhhdCBoYXZlIG5vdCBiZWVuIG1vZGlmaWVkIGZvciBtYW55IGNvbW1pdHMKKyAgICAjICAgKGVhY2ggZ2l0LXJldi1wYXJzZSByZWRvZXMgYSBsb3Qgb2Ygd29yayBmb3IgZWFjaCBmaWxlCisgICAgIyAgIHRoYXQgdGhlb3JldGljYWxseSBjb3VsZCBiZSBkb25lIGluIHBhcmFsbGVsIGJ5IHNtYXJ0ZXIKKyAgICAjICAgZ3JhcGggdHJhdmVyc2FsKS4KKyAgICAjCisgICAgIyBUT0RPOiBQb3NzaWJsZSBvcHRpbWl6YXRpb24gc3RyYXRlZ2llczoKKyAgICAjICAgLSBTb2x2ZSB0aGUgaXNzdWUgb2YgYXNzaWduaW5nIGFuZCByZW1lbWJlcmluZyAicmVhbCIgQ1ZTCisgICAgIyAgICAgcmV2aXNpb24gbnVtYmVycyBmb3IgYnJhbmNoZXMsIGFuZCBlbnN1cmUgdGhlCisgICAgIyAgICAgZGF0YSBzdHJ1Y3R1cmUgY2FuIGRvIHRoaXMgZWZmaWNpZW50bHkuICBQZXJoYXBzIHNvbWV0aGluZworICAgICMgICAgIHNpbWlsYXIgdG8gImdpdCBub3RlcyIsIGFuZCBjYXJlZnVsbHkgc3RydWN0dXJlZCB0byB0YWtlCisgICAgIyAgICAgYWR2YW50YWdlIHNhbWUtc2hhMS1pcy1zYW1lLWNvbnRlbnRzLCB0byByb2xsIHRoZSBzYW1lCisgICAgIyAgICAgdW5tb2RpZmllZCBzdWJkaXJlY3RvcnkgZGF0YSBvbnRvIG11bHRpcGxlIGNvbW1pdHM/CisgICAgIyAgIC0gV3JpdGUgYW5kIHVzZSBhIEMgdG9vbCB0aGF0IGlzIGxpa2UgZ2l0LWJsYW1lLCBidXQKKyAgICAjICAgICBvcGVyYXRlcyBvbiBtdWx0aXBsZSBmaWxlcyB3aXRoIGZpbGUgZ3JhbnVsYXJpdHksIGluc3RlYWQKKyAgICAjICAgICBvZiBvbmUgZmlsZSB3aXRoIGxpbmUgZ3JhbnVsYXJpdHkuICBDYWNoZQorICAgICMgICAgIG1vc3QtcmVjZW50bHktbW9kaWZpZWQgaW4gJHNlbGYtPntjb21taXRSZWZDYWNoZX17JHJldkNvbW1pdH0uCisgICAgIyAgICAgVHJ5IHRvIGJlIGludGVsbGlnZW50IGFib3V0IGhvdyBtYW55IGZpbGVzIHdlIGRvIHdpdGgKKyAgICAjICAgICBvbmUgZm9yayAocGVyaGFwcyBvbmUgZGlyZWN0b3J5IGF0IGEgdGltZSwgd2l0aG91dCByZWN1cnNpb24sCisgICAgIyAgICAgYW5kL29yIGluY2x1ZGUgZGlyZWN0b3J5IGFzIG9uZSBsaW5lIGl0ZW0sIHJlY3Vyc2UgZnJvbSBoZXJlCisgICAgIyAgICAgaW5zdGVhZCBvZiBpbiBDIHRvb2w/KS4KKyAgICAjICAgLSBQZXJoYXBzIHdlIGNvdWxkIGFzayB0aGUgREIgZm9yIChmaWxlbmFtZSxmaWxlSGFzaCksCisgICAgIyAgICAgYW5kIGp1c3QgZ3Vlc3MgdGhhdCBpdCBpcyBjb3JyZWN0ICh0aGF0IHRoZSBmaWxlIGhhZG4ndAorICAgICMgICAgIGNoYW5nZWQgYmV0d2VlbiAkcmV2Q29tbWl0IGFuZCB0aGUgZm91bmQgY29tbWl0LCB0aGVuCisgICAgIyAgICAgY2hhbmdlZCBiYWNrLCBjb25mdXNpbmcgYW55dGhpbmcgdHJ5aW5nIHRvIGludGVycHJldAorICAgICMgICAgIGhpc3RvcnkpLiAgUHJvYmFibHkgbmVlZCB0byBhZGQgYW5vdGhlciBpbmRleCB0byByZXZpc2lvbnMKKyAgICAjICAgICBEQiB0YWJsZSBmb3IgdGhpcy4KKyAgICAjICAgLSBOT1RFOiBUcnlpbmcgdG8gc3RvcmUgYWxsIChjb21taXQsZmlsZSkga2V5cyBpbiBEQiBbdG8KKyAgICAjICAgICBmaW5kICJsYXN0TW9kZmllZENvbW1pdF0gKGluc3RlYWQgb2YKKyAgICAjICAgICBqdXN0IGZpbGVzIHRoYXQgY2hhbmdlZCBpbiBlYWNoIGNvbW1pdCBhcyB3ZSBkbyBub3cpIGlzCisgICAgIyAgICAgcHJvYmFibHkgbm90IHByYWN0aWNhbCBmcm9tIGEgZGlzayBzcGFjZSBwZXJzcGVjdGl2ZS4KKworICAgICAgICAjIERvZXMgdGhlIGZpbGUgZXhpc3QgaW4gJHJldkNvbW1pdD8KKyAgICAjIFRPRE86IEluY2x1ZGUgZmlsZSBoYXNoIGluIGRpcm1hcCBjYWNoZS4KKyAgICBteSgkZGlyTWFwKT0kc2VsZi0+Z2V0UmV2aXNpb25EaXJNYXAoJHJldkNvbW1pdCk7CisgICAgbXkoJGRpciwkZmlsZSk9KCRmaWxlbmFtZT1+bSVeKD86KC4qKS8pPyhbXi9dKiQpJSk7CisgICAgaWYoIWRlZmluZWQoJGRpcikpCisgICAgeworICAgICAgICAkZGlyPSIiOworICAgIH0KKyAgICBpZiggIWRlZmluZWQoJGRpck1hcC0+eyRkaXJ9KSB8fAorICAgICAgICAhZGVmaW5lZCgkZGlyTWFwLT57JGRpcn17JGZpbGVuYW1lfSkgKQorICAgIHsKKyAgICAgICAgbXkoJGZpbGVIYXNoKT0iZGVsZXRlZCI7CisKKyAgICAgICAgbXkoJHJldFZhbCk9e307CisgICAgICAgICRyZXRWYWwtPntuYW1lfT0kZmlsZW5hbWU7CisgICAgICAgICRyZXRWYWwtPntmaWxlaGFzaH09JGZpbGVIYXNoOworCisgICAgICAgICAgICAjIG5vdCBuZWVkZWQgYW5kIGRpZmZpY3VsdCB0byBjb21wdXRlOgorICAgICAgICAkcmV0VmFsLT57cmV2aXNpb259PSIwIjsgICMgJHJldmlzaW9uOworICAgICAgICAkcmV0VmFsLT57Y29tbWl0aGFzaH09JHJldkNvbW1pdDsKKyAgICAgICAgIyRyZXRWYWwtPnthdXRob3J9PSRjb21taXQtPnthdXRob3J9OworICAgICAgICAjJHJldFZhbC0+e21vZGlmaWVkfT1jb252ZXJ0VG9DdnNEYXRlKCRjb21taXQtPntkYXRlfSk7CisgICAgICAgICMkcmV0VmFsLT57bW9kZX09Y29udmVydFRvRGJNb2RlKCRtb2RlKTsKKworICAgICAgICByZXR1cm4gJHJldFZhbDsKKyAgICB9CisKKyAgICBteSgkZmlsZUhhc2gpPXNhZmVfcGlwZV9jYXB0dXJlKCJnaXQiLCJyZXYtcGFyc2UiLCIkcmV2Q29tbWl0OiRmaWxlbmFtZSIpOworICAgIGNob21wICRmaWxlSGFzaDsKKyAgICBpZighKCRmaWxlSGFzaD1+L15bMC05YS1mXXs0MH0kLykpCisgICAgeworICAgICAgICBkaWUgIkludmFsaWQgZmlsZUhhc2ggJyRmaWxlSGFzaCcgbG9va2luZyB1cCIKKyAgICAgICAgICAgICAgICAgICAgLiIgJyRyZXZDb21taXQ6JGZpbGVuYW1lJ1xuIjsKKyAgICB9CisKKyAgICAjIGluZm9ybWF0aW9uIGFib3V0IG1vc3QgcmVjZW50IGNvbW1pdCB0byBtb2RpZnkgJGZpbGVuYW1lOgorICAgIG9wZW4obXkgJGdpdExvZ1BpcGUsICctfCcsICdnaXQnLCAncmV2LWxpc3QnLAorICAgICAgICAgJy0tbWF4LWNvdW50PTEnLCAnLS1wcmV0dHknLCAnLS1wYXJlbnRzJywKKyAgICAgICAgICRyZXZDb21taXQsICctLScsICRmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBvciBkaWUgIkNhbm5vdCBjYWxsIGdpdC1yZXYtbGlzdDogJCEiOworICAgIG15IEBjb21taXRzPXJlYWRDb21taXRzKCRnaXRMb2dQaXBlKTsKKyAgICBjbG9zZSAkZ2l0TG9nUGlwZTsKKyAgICBpZihzY2FsYXIoQGNvbW1pdHMpIT0xKQorICAgIHsKKyAgICAgICAgZGllICJDYW4ndCBmaW5kIG1vc3QgcmVjZW50IGNvbW1pdCBjaGFuZ2luZyAkZmlsZW5hbWVcbiI7CisgICAgfQorICAgIG15KCRjb21taXQpPSRjb21taXRzWzBdOworICAgIGlmKCAhZGVmaW5lZCgkY29tbWl0KSB8fCAhZGVmaW5lZCgkY29tbWl0LT57aGFzaH0pICkKKyAgICB7CisgICAgICAgIHJldHVybiB1bmRlZjsKKyAgICB9CisKKyAgICAjIGRvZXMgdGhpcyAoY29tbWl0LGZpbGUpIGhhdmUgYSByZWFsIGFzc2lnbmVkIENWUyByZXZpc2lvbiBudW1iZXI/CisgICAgbXkgJHRhYmxlbmFtZV9yZXYgPSAkc2VsZi0+dGFibGVuYW1lKCJyZXZpc2lvbiIpOworICAgIG15ICRkYl9xdWVyeTsKKyAgICAkZGJfcXVlcnkgPSAkc2VsZi0+e2RiaH0tPnByZXBhcmVfY2FjaGVkKAorICAgICAgICAiU0VMRUNUICogRlJPTSAkdGFibGVuYW1lX3JldiBXSEVSRSBuYW1lPT8gQU5EIGNvbW1pdGhhc2g9PyIsCisgICAgICAgIHt9LDEpOworICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgkZmlsZW5hbWUsICRjb21taXQtPntoYXNofSk7CisgICAgbXkoJG1ldGEpPSRkYl9xdWVyeS0+ZmV0Y2hyb3dfaGFzaHJlZjsKKyAgICBpZigkbWV0YSkKKyAgICB7CisgICAgICAgICRtZXRhLT57cmV2aXNpb259ID0gIjEuJG1ldGEtPntyZXZpc2lvbn0iOworICAgICAgICByZXR1cm4gJG1ldGE7CisgICAgfQorCisgICAgIyBmYWxsIGJhY2sgb24gc3BlY2lhbCByZXZpc2lvbiBudW1iZXIKKyAgICBteSgkcmV2aXNpb24pPSRjb21taXQtPntoYXNofTsKKyAgICAkcmV2aXNpb249fnMvKC4uKS8nLicgLiAoaGV4KCQxKSsxMDApL2VnOworICAgICRyZXZpc2lvbj0iMi4xLjEuMjAwMCRyZXZpc2lvbiI7CisKKyAgICAjIG1ldGEgZGF0YSBhYm91dCAkZmlsZW5hbWU6CisgICAgb3BlbihteSAkZmlsZVBpcGUsICctfCcsICdnaXQnLCAnbHMtdHJlZScsICcteicsCisgICAgICAgICAgICAgICAgJGNvbW1pdC0+e2hhc2h9LCAnLS0nLCAkZmlsZW5hbWUpCisgICAgICAgICAgICBvciBkaWUoIkNhbm5vdCBjYWxsIGdpdC1scy10cmVlIDogJCEiKTsKKyAgICBsb2NhbCAkLyA9ICJcMCI7CisgICAgbXkgJGxpbmU7CisgICAgJGxpbmU9PCRmaWxlUGlwZT47CisgICAgaWYoZGVmaW5lZCg8JGZpbGVQaXBlPikpCisgICAgeworICAgICAgICBkaWUgIkV4cGVjdGVkIG9ubHkgYSBzaW5nbGUgZmlsZSBmb3IgZ2l0LWxzLXRyZWUgJGZpbGVuYW1lXG4iOworICAgIH0KKyAgICBjbG9zZSAkZmlsZVBpcGU7CisKKyAgICBjaG9tcCAkbGluZTsKKyAgICB1bmxlc3MgKCAkbGluZT1+bS9eKFxkKylccysoXHcrKVxzKyhbYS16QS1aMC05XSspXHQoLiopJC9vICkKKyAgICB7CisgICAgICAgIGRpZSgiQ291bGRuJ3QgcHJvY2VzcyBnaXQtbHMtdHJlZSBsaW5lIDogJGxpbmVcbiIpOworICAgIH0KKyAgICBteSAoICRtb2RlLCAkZ2l0X3R5cGUsICRnaXRfaGFzaCwgJGdpdF9maWxlbmFtZSApID0gKCAkMSwgJDIsICQzLCAkNCApOworCisgICAgIyBzYXZlIHJlc3VsdDoKKyAgICBteSgkcmV0VmFsKT17fTsKKyAgICAkcmV0VmFsLT57bmFtZX09JGZpbGVuYW1lOworICAgICRyZXRWYWwtPntyZXZpc2lvbn09JHJldmlzaW9uOworICAgICRyZXRWYWwtPntmaWxlaGFzaH09JGZpbGVIYXNoOworICAgICRyZXRWYWwtPntjb21taXRoYXNofT0kcmV2Q29tbWl0OworICAgICRyZXRWYWwtPnthdXRob3J9PSRjb21taXQtPnthdXRob3J9OworICAgICRyZXRWYWwtPnttb2RpZmllZH09Y29udmVydFRvQ3ZzRGF0ZSgkY29tbWl0LT57ZGF0ZX0pOworICAgICRyZXRWYWwtPnttb2RlfT1jb252ZXJ0VG9EYk1vZGUoJG1vZGUpOworCisgICAgcmV0dXJuICRyZXRWYWw7Cit9CisKKz1oZWFkMiBsb29rdXBDb21taXRSZWYKKworQ29udmVydCB0YWcvYnJhbmNoL2FiYnJldmlhdGlvbi9ldGMgaW50byBhIGNvbW1pdCBzaGExIGhhc2guICBDYWNoZXMKK3RoZSByZXN1bHQgc28gbG9va2luZyBpdCB1cCBhZ2FpbiBpcyBmYXN0LgorCis9Y3V0CisKK3N1YiBsb29rdXBDb21taXRSZWYKK3sKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICRyZWYgPSBzaGlmdDsKKworICAgIG15ICRjb21taXRIYXNoID0gJHNlbGYtPntjb21taXRSZWZDYWNoZX17JHJlZn07CisgICAgaWYoZGVmaW5lZCgkY29tbWl0SGFzaCkpCisgICAgeworICAgICAgICByZXR1cm4gJGNvbW1pdEhhc2g7CisgICAgfQorCisgICAgJGNvbW1pdEhhc2g9c2FmZV9waXBlX2NhcHR1cmUoImdpdCIsInJldi1wYXJzZSIsIi0tdmVyaWZ5IiwiLS1xdWlldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnVuZXNjYXBlUmVmTmFtZSgkcmVmKSk7CisgICAgJGNvbW1pdEhhc2g9fnMvXHMqJC8vOworICAgIGlmKCEoJGNvbW1pdEhhc2g9fi9eWzAtOWEtZl17NDB9JC8pKQorICAgIHsKKyAgICAgICAgJGNvbW1pdEhhc2g9dW5kZWY7CisgICAgfQorCisgICAgaWYoIGRlZmluZWQoJGNvbW1pdEhhc2gpICkKKyAgICB7CisgICAgICAgIG15ICR0eXBlPXNhZmVfcGlwZV9jYXB0dXJlKCJnaXQiLCJjYXQtZmlsZSIsIi10IiwkY29tbWl0SGFzaCk7CisgICAgICAgIGlmKCAhICgkdHlwZT1+L15jb21taXRccyokLyApICkKKyAgICAgICAgeworICAgICAgICAgICAgJGNvbW1pdEhhc2g9dW5kZWY7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoZGVmaW5lZCgkY29tbWl0SGFzaCkpCisgICAgeworICAgICAgICAkc2VsZi0+e2NvbW1pdFJlZkNhY2hlfXskcmVmfT0kY29tbWl0SGFzaDsKKyAgICB9CisgICAgcmV0dXJuICRjb21taXRIYXNoOworfQorCis9aGVhZDIgY2xlYXJDb21taXRSZWZDYWNoZXMKKworQ2xlYXJzIGNhY2hlZCBjb21taXQgY2FjaGUgKHNoYTEncyBmb3IgdmFyaW91cyB0YWdzL2FiYmV2aWF0aW9ucy9ldGMpLAorYW5kIHJlbGF0ZWQgY2FjaGVzLgorCis9Y3V0CisKK3N1YiBjbGVhckNvbW1pdFJlZkNhY2hlcworeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgJHNlbGYtPntjb21taXRSZWZDYWNoZX0gPSB7fTsKKyAgICAkc2VsZi0+e3JldmlzaW9uRGlyTWFwQ2FjaGV9ID0gdW5kZWY7CisgICAgJHNlbGYtPntnZXRoZWFkX2NhY2hlfSA9IHVuZGVmOworfQorCis9aGVhZDIgY29tbWl0bWVzc2FnZQorCit0aGlzIGZ1bmN0aW9uIHRha2VzIGEgY29tbWl0aGFzaCBhbmQgcmV0dXJucyB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHRoYXQgY29tbWl0CisKKz1jdXQKK3N1YiBjb21taXRtZXNzYWdlCit7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSAkY29tbWl0aGFzaCA9IHNoaWZ0OworICAgIG15ICR0YWJsZW5hbWUgPSAkc2VsZi0+dGFibGVuYW1lKCJjb21taXRtc2dzIik7CisKKyAgICBkaWUoIk5lZWQgY29tbWl0aGFzaCIpIHVubGVzcyAoIGRlZmluZWQoJGNvbW1pdGhhc2gpIGFuZCAkY29tbWl0aGFzaCA9fiAvXlthLXpBLVowLTldezQwfSQvICk7CisKKyAgICBteSAkZGJfcXVlcnk7CisgICAgJGRiX3F1ZXJ5ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiU0VMRUNUIHZhbHVlIEZST00gJHRhYmxlbmFtZSBXSEVSRSBrZXk9PyIse30sMSk7CisgICAgJGRiX3F1ZXJ5LT5leGVjdXRlKCRjb21taXRoYXNoKTsKKworICAgIG15ICggJG1lc3NhZ2UgKSA9ICRkYl9xdWVyeS0+ZmV0Y2hyb3dfYXJyYXk7CisKKyAgICBpZiAoIGRlZmluZWQgKCAkbWVzc2FnZSApICkKKyAgICB7CisgICAgICAgICRtZXNzYWdlIC49ICIgIiBpZiAoICRtZXNzYWdlID1+IC9cbiQvICk7CisgICAgICAgIHJldHVybiAkbWVzc2FnZTsKKyAgICB9CisKKyAgICBteSBAbGluZXMgPSBzYWZlX3BpcGVfY2FwdHVyZSgiZ2l0IiwgImNhdC1maWxlIiwgImNvbW1pdCIsICRjb21taXRoYXNoKTsKKyAgICBzaGlmdCBAbGluZXMgd2hpbGUgKCAkbGluZXNbMF0gPX4gL1xTLyApOworICAgICRtZXNzYWdlID0gam9pbigiIixAbGluZXMpOworICAgICRtZXNzYWdlIC49ICIgIiBpZiAoICRtZXNzYWdlID1+IC9cbiQvICk7CisgICAgcmV0dXJuICRtZXNzYWdlOworfQorCis9aGVhZDIgZ2V0aGlzdG9yeWRlbnNlCisKK1RoaXMgZnVuY3Rpb24gdGFrZXMgYSBmaWxlbmFtZSAod2l0aCBwYXRoKSBhcmd1bWVudCBhbmQgcmV0dXJucyBhbiBhcnJheW9mYXJyYXlzCitjb250YWluaW5nIHJldmlzaW9uLGZpbGVoYXNoLGNvbW1pdGhhc2ggb3JkZXJlZCBieSByZXZpc2lvbiBkZXNjZW5kaW5nLgorCitUaGlzIHZlcnNpb24gb2YgZ2V0aGlzdG9yeSBza2lwcyBkZWxldGVkIGVudHJpZXMgLS0gc28gaXQgaXMgdXNlZnVsIGZvciBhbm5vdGF0ZS4KK1RoZSAnZGVuc2UnIHBhcnQgaXMgYSByZWZlcmVuY2UgdG8gYSAnLS1kZW5zZScgb3B0aW9uIGF2YWlsYWJsZSBmb3IgZ2l0LXJldi1saXN0CithbmQgb3RoZXIgZ2l0IHRvb2xzIHRoYXQgZGVwZW5kIG9uIGl0LgorCitTZWUgYWxzbyBnZXRsb2coKS4KKworPWN1dAorc3ViIGdldGhpc3RvcnlkZW5zZQoreworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisgICAgbXkgJHRhYmxlbmFtZSA9ICRzZWxmLT50YWJsZW5hbWUoInJldmlzaW9uIik7CisKKyAgICBteSAkZGJfcXVlcnk7CisgICAgJGRiX3F1ZXJ5ID0gJHNlbGYtPntkYmh9LT5wcmVwYXJlX2NhY2hlZCgiU0VMRUNUIHJldmlzaW9uLCBmaWxlaGFzaCwgY29tbWl0aGFzaCBGUk9NICR0YWJsZW5hbWUgV0hFUkUgbmFtZT0/IEFORCBmaWxlaGFzaCE9J2RlbGV0ZWQnIE9SREVSIEJZIHJldmlzaW9uIERFU0MiLHt9LDEpOworICAgICRkYl9xdWVyeS0+ZXhlY3V0ZSgkZmlsZW5hbWUpOworCisgICAgbXkgJHJlc3VsdCA9ICRkYl9xdWVyeS0+ZmV0Y2hhbGxfYXJyYXlyZWY7CisKKyAgICBteSAkaTsKKyAgICBmb3IoJGk9MCA7ICRpPHNjYWxhcihAJHJlc3VsdCkgOyAkaSsrKQorICAgIHsKKyAgICAgICAgJHJlc3VsdC0+WyRpXVswXT0iMS4iIC4gJHJlc3VsdC0+WyRpXVswXTsKKyAgICB9CisKKyAgICByZXR1cm4gJHJlc3VsdDsKK30KKworPWhlYWQyIGVzY2FwZVJlZk5hbWUKKworQXBwbHkgYW4gZXNjYXBlIG1lY2hhbmlzbSB0byBjb21wZW5zYXRlIGZvciBjaGFyYWN0ZXJzIHRoYXQKK2dpdCByZWYgbmFtZXMgY2FuIGhhdmUgdGhhdCBDVlMgdGFncyBjYW4gbm90LgorCis9Y3V0CitzdWIgZXNjYXBlUmVmTmFtZQoreworICAgIG15KCRzZWxmLCRyZWZOYW1lKT1AXzsKKworICAgICMgQ1ZTIG9mZmljaWFsbHkgb25seSBhbGxvd3MgWy1fQS1aYS16MC05XSBpbiB0YWcgbmFtZXMgKG9yIGluCisgICAgIyBtYW55IGNvbnRleHRzIGl0IGNhbiBhbHNvIGJlIGEgQ1ZTIHJldmlzaW9uIG51bWJlcikuCisgICAgIworICAgICMgR2l0IHRhZ3MgY29tbW9ubHkgdXNlICcvJyBhbmQgJy4nIGFzIHdlbGwsIGJ1dCBhbHNvIGhhbmRsZQorICAgICMgYW55dGhpbmcgZWxzZSBqdXN0IGluIGNhc2U6CisgICAgIworICAgICMgICA9ICJfLXMtIiAgRm9yICcvJy4KKyAgICAjICAgPSAiXy1wLSIgIEZvciAnLicuCisgICAgIyAgID0gIl8tdS0iICBGb3IgdW5kZXJzY29yZSwgaW4gY2FzZSBzb21lb25lIHdhbnRzIGEgbGl0ZXJhbCAiXy0iIGluCisgICAgIyAgICAgYSB0YWcgbmFtZS4KKyAgICAjICAgPSAiXy14eC0iIFdoZXJlICJ4eCIgaXMgdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICAgICMgICAgIGRlc2lyZWQgQVNDSUkgY2hhcmFjdGVyIGJ5dGUuIChmb3IgYW55dGhpbmcgZWxzZSkKKworICAgIGlmKCEgJHJlZk5hbWU9fi9eWzEtOV1bMC05XSooXC5bMS05XVswLTldKikqJC8pCisgICAgeworICAgICAgICAkcmVmTmFtZT1+cy9fLS9fLXUtLS9nOworICAgICAgICAkcmVmTmFtZT1+cy9cLi9fLXAtL2c7CisgICAgICAgICRyZWZOYW1lPX5zJS8lXy1zLSVnOworICAgICAgICAkcmVmTmFtZT1+cy9bXi1fYS16QS1aMC05XS9zcHJpbnRmKCJfLSUwMngtIiwkMSkvZWc7CisgICAgfQorfQorCis9aGVhZDIgdW5lc2NhcGVSZWZOYW1lCisKK1VuZG8gYW4gZXNjYXBlIG1lY2hhbmlzbSB0byBjb21wZW5zYXRlIGZvciBjaGFyYWN0ZXJzIHRoYXQKK2dpdCByZWYgbmFtZXMgY2FuIGhhdmUgdGhhdCBDVlMgdGFncyBjYW4gbm90LgorCis9Y3V0CitzdWIgdW5lc2NhcGVSZWZOYW1lCit7CisgICAgbXkoJHNlbGYsJHJlZk5hbWUpPUBfOworCisgICAgIyBzZWUgZXNjYXBlUmVmTmFtZSgpIGZvciBkZXNjcmlwdGlvbiBvZiBlc2NhcGUgbWVjaGFuaXNtLgorCisgICAgJHJlZk5hbWU9fnMvXy0oW3NwdV18WzAtOWEtZl1bMC05YS1mXSktL3VuZXNjYXBlUmVmTmFtZUNoYXIoJDEpL2VnOworCisgICAgIyBhbGxvd2VkIHRhZyBuYW1lcworICAgICMgVE9ETzogUGVyaGFwcyB1c2UgZ2l0IGNoZWNrLXJlZi1mb3JtYXQsIHdpdGggYW4gaW4tcHJvY2VzcyBjYWNoZSBvZgorICAgICMgIHZhbGlkYXRlZCBuYW1lcz8KKyAgICBpZiggISggJHJlZk5hbWU9fm0lXlteLV1bLWEtekEtWjAtOV8vLl0qJCUgKSB8fAorICAgICAgICAoICRyZWZOYW1lPX5tJVsvLl0kJSApIHx8CisgICAgICAgICggJHJlZk5hbWU9fi9cLmxvY2skLyApIHx8CisgICAgICAgICggJHJlZk5hbWU9fm0lXC5cLnwvXC58W1tcXDo/Kn5dfFxAXHslICkgKSAgIyBtYXRjaGluZyB9CisgICAgeworICAgICAgICAjIEVycm9yOgorICAgICAgICAkbG9nLT53YXJuKCJpbGxlZ2FsIHJlZk5hbWU6ICRyZWZOYW1lIik7CisgICAgICAgICRyZWZOYW1lPXVuZGVmOworICAgIH0KKyAgICByZXR1cm4gJHJlZk5hbWU7Cit9CisKK3N1YiB1bmVzY2FwZVJlZk5hbWVDaGFyCit7CisgICAgbXkoJGNoYXIpPUBfOworCisgICAgaWYoJGNoYXIgZXEgInMiKQorICAgIHsKKyAgICAgICAgJGNoYXI9Ii8iOworICAgIH0KKyAgICBlbHNpZigkY2hhciBlcSAicCIpCisgICAgeworICAgICAgICAkY2hhcj0iLiI7CisgICAgfQorICAgIGVsc2lmKCRjaGFyIGVxICJ1IikKKyAgICB7CisgICAgICAgICRjaGFyPSJfIjsKKyAgICB9CisgICAgZWxzaWYoJGNoYXI9fi9eWzAtOWEtZl1bMC05YS1mXSQvKQorICAgIHsKKyAgICAgICAgJGNoYXI9Y2hyKGhleCgkY2hhcikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICAjIEVycm9yIGNhc2U6IE1heWJlIGl0IGhhcyBjb21lIHN0cmFpZ2h0IGZyb20gdXNlciwgYW5kCisgICAgICAgICMgd2Fzbid0IHN1cHBvc2VkIHRvIGJlIGVzY2FwZWQ/ICBSZXN0b3JlIGl0IHRoZSB3YXkgd2UgZ290IGl0OgorICAgICAgICAkY2hhcj0iXy0kY2hhci0iOworICAgIH0KKworICAgIHJldHVybiAkY2hhcjsKK30KKworPWhlYWQyIGluX2FycmF5KCkKKworZnJvbSBBcnJheTo6UEFUIC0gbWltaWNzIHRoZSBpbl9hcnJheSgpIGZ1bmN0aW9uCitmb3VuZCBpbiBQSFAuIFl1Y2sgYnV0IHdvcmtzIGZvciBzbWFsbCBhcnJheXMuCisKKz1jdXQKK3N1YiBpbl9hcnJheQoreworICAgIG15ICgkY2hlY2ssIEBhcnJheSkgPSBAXzsKKyAgICBteSAkcmV0dmFsID0gMDsKKyAgICBmb3JlYWNoIG15ICR0ZXN0IChAYXJyYXkpeworICAgICAgICBpZigkY2hlY2sgZXEgJHRlc3QpeworICAgICAgICAgICAgJHJldHZhbCA9ICAxOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAkcmV0dmFsOworfQorCis9aGVhZDIgc2FmZV9waXBlX2NhcHR1cmUKKworYW4gYWx0ZXJuYXRpdmUgdG8gYGNvbW1hbmRgIHRoYXQgYWxsb3dzIGlucHV0IHRvIGJlIHBhc3NlZCBhcyBhbiBhcnJheQordG8gd29yayBhcm91bmQgc2hlbGwgcHJvYmxlbXMgd2l0aCB3ZWlyZCBjaGFyYWN0ZXJzIGluIGFyZ3VtZW50cworCis9Y3V0CitzdWIgc2FmZV9waXBlX2NhcHR1cmUgeworCisgICAgbXkgQG91dHB1dDsKKworICAgIGlmIChteSAkcGlkID0gb3BlbiBteSAkY2hpbGQsICctfCcpIHsKKyAgICAgICAgQG91dHB1dCA9ICg8JGNoaWxkPik7CisgICAgICAgIGNsb3NlICRjaGlsZCBvciBkaWUgam9pbignICcsQF8pLiI6ICQhICQ/IjsKKyAgICB9IGVsc2UgeworICAgICAgICBleGVjKEBfKSBvciBkaWUgIiQhICQ/IjsgIyBleGVjKCkgY2FuIGZhaWwgdGhlIGV4ZWN1dGFibGUgY2FuJ3QgYmUgZm91bmQKKyAgICB9CisgICAgcmV0dXJuIHdhbnRhcnJheSA/IEBvdXRwdXQgOiBqb2luKCcnLEBvdXRwdXQpOworfQorCis9aGVhZDIgbWFuZ2xlX2Rpcm5hbWUKKworY3JlYXRlIGEgc3RyaW5nIGZyb20gYSBkaXJlY3RvcnkgbmFtZSB0aGF0IGlzIHN1aXRhYmxlIHRvIHVzZSBhcworcGFydCBvZiBhIGZpbGVuYW1lLCBtYWlubHkgYnkgY29udmVydGluZyBhbGwgY2hhcnMgZXhjZXB0IFx3Li0gdG8gXworCis9Y3V0CitzdWIgbWFuZ2xlX2Rpcm5hbWUgeworICAgIG15ICRkaXJuYW1lID0gc2hpZnQ7CisgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkICRkaXJuYW1lOworCisgICAgJGRpcm5hbWUgPX4gcy9bXlx3Li1dL18vZzsKKworICAgIHJldHVybiAkZGlybmFtZTsKK30KKworPWhlYWQyIG1hbmdsZV90YWJsZW5hbWUKKworY3JlYXRlIGEgc3RyaW5nIGZyb20gYSB0aGF0IGlzIHN1aXRhYmxlIHRvIHVzZSBhcyBwYXJ0IG9mIGFuIFNRTCB0YWJsZQorbmFtZSwgbWFpbmx5IGJ5IGNvbnZlcnRpbmcgYWxsIGNoYXJzIGV4Y2VwdCBcdyB0byBfCisKKz1jdXQKK3N1YiBtYW5nbGVfdGFibGVuYW1lIHsKKyAgICBteSAkdGFibGVuYW1lID0gc2hpZnQ7CisgICAgcmV0dXJuIHVubGVzcyBkZWZpbmVkICR0YWJsZW5hbWU7CisKKyAgICAkdGFibGVuYW1lID1+IHMvW15cd19dL18vZzsKKworICAgIHJldHVybiAkdGFibGVuYW1lOworfQorCisxOwpkaWZmIC0tZ2l0IGEvZ2l0LWRpZmZ0b29sLS1oZWxwZXIuc2ggYi9naXQtZGlmZnRvb2wtLWhlbHBlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYjExYjFkCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWRpZmZ0b29sLS1oZWxwZXIuc2gKQEAgLTAsMCArMSw5OCBAQAorIyEvYmluL3NoCisjIGdpdC1kaWZmdG9vbC0taGVscGVyIGlzIGEgR0lUX0VYVEVSTkFMX0RJRkYtY29tcGF0aWJsZSBkaWZmIHRvb2wgbGF1bmNoZXIuCisjIFRoaXMgc2NyaXB0IGlzIHR5cGljYWxseSBsYXVuY2hlZCBieSB1c2luZyB0aGUgJ2dpdCBkaWZmdG9vbCcKKyMgY29udmVuaWVuY2UgY29tbWFuZC4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIERhdmlkIEFndWlsYXIKKworVE9PTF9NT0RFPWRpZmYKKy4gZ2l0LW1lcmdldG9vbC0tbGliCisKKyMgZGlmZnRvb2wucHJvbXB0IGNvbnRyb2xzIHRoZSBkZWZhdWx0IHByb21wdC9uby1wcm9tcHQgYmVoYXZpb3IKKyMgYW5kIGlzIG92ZXJyaWRkZW4gd2l0aCAkR0lUX0RJRkZUT09MKl9QUk9NUFQuCitzaG91bGRfcHJvbXB0ICgpIHsKKwlwcm9tcHRfbWVyZ2U9JChnaXQgY29uZmlnIC0tYm9vbCBtZXJnZXRvb2wucHJvbXB0IHx8IGVjaG8gdHJ1ZSkKKwlwcm9tcHQ9JChnaXQgY29uZmlnIC0tYm9vbCBkaWZmdG9vbC5wcm9tcHQgfHwgZWNobyAkcHJvbXB0X21lcmdlKQorCWlmIHRlc3QgIiRwcm9tcHQiID0gdHJ1ZQorCXRoZW4KKwkJdGVzdCAteiAiJEdJVF9ESUZGVE9PTF9OT19QUk9NUFQiCisJZWxzZQorCQl0ZXN0IC1uICIkR0lUX0RJRkZUT09MX1BST01QVCIKKwlmaQorfQorCisjIEluZGljYXRlcyB0aGF0IC0tZXh0Y21kPS4uLiB3YXMgc3BlY2lmaWVkCit1c2VfZXh0X2NtZCAoKSB7CisJdGVzdCAtbiAiJEdJVF9ESUZGVE9PTF9FWFRDTUQiCit9CisKK2xhdW5jaF9tZXJnZV90b29sICgpIHsKKwkjIE1lcmdlZCBpcyB0aGUgZmlsZW5hbWUgYXMgaXQgYXBwZWFycyBpbiB0aGUgd29yayB0cmVlCisJIyBMb2NhbCBpcyB0aGUgY29udGVudHMgb2YgYS9maWxlbmFtZQorCSMgUmVtb3RlIGlzIHRoZSBjb250ZW50cyBvZiBiL2ZpbGVuYW1lCisJIyBDdXN0b20gbWVyZ2UgdG9vbCBjb21tYW5kcyBtaWdodCB1c2UgJEJBU0Ugc28gd2UgcHJvdmlkZSBpdAorCU1FUkdFRD0iJDEiCisJTE9DQUw9IiQyIgorCVJFTU9URT0iJDMiCisJQkFTRT0iJDEiCisKKwkjICRMT0NBTCBhbmQgJFJFTU9URSBhcmUgdGVtcG9yYXJ5IGZpbGVzIHNvIHByb21wdAorCSMgdGhlIHVzZXIgd2l0aCB0aGUgcmVhbCAkTUVSR0VEIG5hbWUgYmVmb3JlIGxhdW5jaGluZyAkbWVyZ2VfdG9vbC4KKwlpZiBzaG91bGRfcHJvbXB0CisJdGhlbgorCQlwcmludGYgIlxuVmlld2luZyAoJXMvJXMpOiAnJXMnXG4iICIkR0lUX0RJRkZfUEFUSF9DT1VOVEVSIiBcCisJCQkiJEdJVF9ESUZGX1BBVEhfVE9UQUwiICIkTUVSR0VEIgorCQlpZiB1c2VfZXh0X2NtZAorCQl0aGVuCisJCQlwcmludGYgIkxhdW5jaCAnJXMnIFtZL25dOiAiIFwKKwkJCQkiJEdJVF9ESUZGVE9PTF9FWFRDTUQiCisJCWVsc2UKKwkJCXByaW50ZiAiTGF1bmNoICclcycgW1kvbl06ICIgIiRtZXJnZV90b29sIgorCQlmaQorCQlyZWFkIGFucyB8fCByZXR1cm4KKwkJaWYgdGVzdCAiJGFucyIgPSBuCisJCXRoZW4KKwkJCXJldHVybgorCQlmaQorCWZpCisKKwlpZiB1c2VfZXh0X2NtZAorCXRoZW4KKwkJZXhwb3J0IEJBU0UKKwkJZXZhbCAkR0lUX0RJRkZUT09MX0VYVENNRCAnIiRMT0NBTCInICciJFJFTU9URSInCisJZWxzZQorCQlydW5fbWVyZ2VfdG9vbCAiJG1lcmdlX3Rvb2wiCisJZmkKK30KKworaWYgISB1c2VfZXh0X2NtZAordGhlbgorCWlmIHRlc3QgLW4gIiRHSVRfRElGRl9UT09MIgorCXRoZW4KKwkJbWVyZ2VfdG9vbD0iJEdJVF9ESUZGX1RPT0wiCisJZWxzZQorCQltZXJnZV90b29sPSIkKGdldF9tZXJnZV90b29sKSIgfHwgZXhpdAorCWZpCitmaQorCitpZiB0ZXN0IC1uICIkR0lUX0RJRkZUT09MX0RJUkRJRkYiCit0aGVuCisJTE9DQUw9IiQxIgorCVJFTU9URT0iJDIiCisJcnVuX21lcmdlX3Rvb2wgIiRtZXJnZV90b29sIiBmYWxzZQorZWxzZQorCSMgTGF1bmNoIHRoZSBtZXJnZSB0b29sIG9uIGVhY2ggcGF0aCBwcm92aWRlZCBieSAnZ2l0IGRpZmYnCisJd2hpbGUgdGVzdCAkIyAtZ3QgNgorCWRvCisJCWxhdW5jaF9tZXJnZV90b29sICIkMSIgIiQyIiAiJDUiCisJCXN0YXR1cz0kPworCQlpZiB0ZXN0ICIkc3RhdHVzIiAhPSAwICYmCisJCQl0ZXN0ICIkR0lUX0RJRkZUT09MX1RSVVNUX0VYSVRfQ09ERSIgPSB0cnVlCisJCXRoZW4KKwkJCWV4aXQgJHN0YXR1cworCQlmaQorCQlzaGlmdCA3CisJZG9uZQorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS9naXQtZGlmZnRvb2wucGVybCBiL2dpdC1kaWZmdG9vbC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkZjdjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZGlmZnRvb2wucGVybApAQCAtMCwwICsxLDQ5OSBAQAorIyEvdXNyL2Jpbi9wZXJsCisjIENvcHlyaWdodCAoYykgMjAwOSwgMjAxMCBEYXZpZCBBZ3VpbGFyCisjIENvcHlyaWdodCAoYykgMjAxMiBUaW0gSGVuaWdhbgorIworIyBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIEdJVF9FWFRFUk5BTF9ESUZGLWNvbXBhdGlibGUKKyMgZ2l0LWRpZmZ0b29sLS1oZWxwZXIgc2NyaXB0LgorIworIyBUaGlzIHNjcmlwdCBleHBvcnRzIEdJVF9FWFRFUk5BTF9ESUZGIGFuZCBHSVRfUEFHRVIgZm9yIHVzZSBieSBnaXQuCisjIFRoZSBHSVRfRElGRiogdmFyaWFibGVzIGFyZSBleHBvcnRlZCBmb3IgdXNlIGJ5IGdpdC1kaWZmdG9vbC0taGVscGVyLgorIworIyBBbnkgYXJndW1lbnRzIHRoYXQgYXJlIHVua25vd24gdG8gdGhpcyBzY3JpcHQgYXJlIGZvcndhcmRlZCB0byAnZ2l0IGRpZmYnLgorCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEVycm9yIHF3KDp0cnkpOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3KGRpcm5hbWUpOwordXNlIEZpbGU6OkNvcHk7Cit1c2UgRmlsZTo6RmluZDsKK3VzZSBGaWxlOjpzdGF0OwordXNlIEZpbGU6OlBhdGggcXcobWtwYXRoIHJtdHJlZSk7Cit1c2UgRmlsZTo6VGVtcCBxdyh0ZW1wZGlyKTsKK3VzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBwYXNzX3Rocm91Z2gpOwordXNlIEdpdDsKKworc3ViIHVzYWdlCit7CisJbXkgJGV4aXRjb2RlID0gc2hpZnQ7CisJcHJpbnQgPDwgJ1VTQUdFJzsKK3VzYWdlOiBnaXQgZGlmZnRvb2wgWy10fC0tdG9vbD08dG9vbD5dIFstLXRvb2wtaGVscF0KKyAgICAgICAgICAgICAgICAgICAgWy14fC0tZXh0Y21kPTxjbWQ+XQorICAgICAgICAgICAgICAgICAgICBbLWd8LS1ndWldIFstLW5vLWd1aV0KKyAgICAgICAgICAgICAgICAgICAgWy0tcHJvbXB0XSBbLXl8LS1uby1wcm9tcHRdCisgICAgICAgICAgICAgICAgICAgIFstZHwtLWRpci1kaWZmXQorICAgICAgICAgICAgICAgICAgICBbJ2dpdCBkaWZmJyBvcHRpb25zXQorVVNBR0UKKwlleGl0KCRleGl0Y29kZSk7Cit9CisKK3N1YiBmaW5kX3dvcmt0cmVlCit7CisJIyBHaXQtPnJlcG9zaXRvcnktPndjX3BhdGgoKSBkb2VzIG5vdCBob25vciBjaGFuZ2VzIHRvIHRoZSB3b3JraW5nCisJIyB0cmVlIGxvY2F0aW9uIG1hZGUgYnkgJEVOVntHSVRfV09SS19UUkVFfSBvciB0aGUgJ2NvcmUud29ya3RyZWUnCisJIyBjb25maWcgdmFyaWFibGUuCisJcmV0dXJuIEdpdDo6Y29tbWFuZF9vbmVsaW5lKCdyZXYtcGFyc2UnLCAnLS1zaG93LXRvcGxldmVsJyk7Cit9CisKK3N1YiBwcmludF90b29sX2hlbHAKK3sKKwkjIFNlZSB0aGUgY29tbWVudCBhdCB0aGUgYm90dG9tIG9mIGZpbGVfZGlmZigpIGZvciB0aGUgcmVhc29uIGJlaGluZAorCSMgdXNpbmcgc3lzdGVtKCkgZm9sbG93ZWQgYnkgZXhpdCgpIGluc3RlYWQgb2YgZXhlYygpLgorCW15ICRyYyA9IHN5c3RlbShxdyhnaXQgbWVyZ2V0b29sIC0tdG9vbC1oZWxwPWRpZmYpKTsKKwlleGl0KCRyYyB8ICgkcmMgPj4gOCkpOworfQorCitzdWIgZXhpdF9jbGVhbnVwCit7CisJbXkgKCR0bXBkaXIsICRzdGF0dXMpID0gQF87CisJbXkgJGVycm5vID0gJCE7CisJcm10cmVlKCR0bXBkaXIpOworCWlmICgkc3RhdHVzIGFuZCAkZXJybm8pIHsKKwkJbXkgKCRwYWNrYWdlLCAkZmlsZSwgJGxpbmUpID0gY2FsbGVyKCk7CisJCXdhcm4gIiRmaWxlIGxpbmUgJGxpbmU6ICRlcnJub1xuIjsKKwl9CisJZXhpdCgkc3RhdHVzIHwgKCRzdGF0dXMgPj4gOCkpOworfQorCitzdWIgdXNlX3d0X2ZpbGUKK3sKKwlteSAoJHJlcG8sICR3b3JrZGlyLCAkZmlsZSwgJHNoYTEpID0gQF87CisJbXkgJG51bGxfc2hhMSA9ICcwJyB4IDQwOworCisJaWYgKCEgLWUgIiR3b3JrZGlyLyRmaWxlIikgeworCQkjIElmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHdvcmtpbmcgdHJlZSwgd2UgY2Fubm90CisJCSMgdXNlIGl0LgorCQlyZXR1cm4gKDAsICRudWxsX3NoYTEpOworCX0KKworCW15ICR3dF9zaGExID0gJHJlcG8tPmNvbW1hbmRfb25lbGluZSgnaGFzaC1vYmplY3QnLCAiJHdvcmtkaXIvJGZpbGUiKTsKKwlteSAkdXNlID0gKCRzaGExIGVxICRudWxsX3NoYTEpIHx8ICgkc2hhMSBlcSAkd3Rfc2hhMSk7CisJcmV0dXJuICgkdXNlLCAkd3Rfc2hhMSk7Cit9CisKK3N1YiBjaGFuZ2VkX2ZpbGVzCit7CisJbXkgKCRyZXBvX3BhdGgsICRpbmRleCwgJHdvcmt0cmVlKSA9IEBfOworCSRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJGluZGV4OworCSRFTlZ7R0lUX1dPUktfVFJFRX0gPSAkd29ya3RyZWU7CisJbXkgJG11c3RfdW5zZXRfZ2l0X2RpciA9IDA7CisJaWYgKG5vdCBkZWZpbmVkKCRFTlZ7R0lUX0RJUn0pKSB7CisJCSRtdXN0X3Vuc2V0X2dpdF9kaXIgPSAxOworCQkkRU5We0dJVF9ESVJ9ID0gJHJlcG9fcGF0aDsKKwl9CisKKwlteSBAcmVmcmVzaGFyZ3MgPSBxdy91cGRhdGUtaW5kZXggLS1yZWFsbHktcmVmcmVzaCAtcSAtLXVubWVyZ2VkLzsKKwlteSBAZ2l0YXJncyA9IHF3L2RpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLXovOworCXRyeSB7CisJCUdpdDo6Y29tbWFuZF9vbmVsaW5lKEByZWZyZXNoYXJncyk7CisJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGgge307CisKKwlteSAkbGluZSA9IEdpdDo6Y29tbWFuZF9vbmVsaW5lKEBnaXRhcmdzKTsKKwlteSBAZmlsZXM7CisJaWYgKGRlZmluZWQgJGxpbmUpIHsKKwkJQGZpbGVzID0gc3BsaXQoJ1wwJywgJGxpbmUpOworCX0gZWxzZSB7CisJCUBmaWxlcyA9ICgpOworCX0KKworCWRlbGV0ZSgkRU5We0dJVF9JTkRFWF9GSUxFfSk7CisJZGVsZXRlKCRFTlZ7R0lUX1dPUktfVFJFRX0pOworCWRlbGV0ZSgkRU5We0dJVF9ESVJ9KSBpZiAoJG11c3RfdW5zZXRfZ2l0X2Rpcik7CisKKwlyZXR1cm4gbWFwIHsgJF8gPT4gMSB9IEBmaWxlczsKK30KKworc3ViIHNldHVwX2Rpcl9kaWZmCit7CisJbXkgKCRyZXBvLCAkd29ya2RpciwgJHN5bWxpbmtzKSA9IEBfOworCisJIyBSdW4gdGhlIGRpZmY7IGV4aXQgaW1tZWRpYXRlbHkgaWYgbm8gZGlmZiBmb3VuZAorCSMgJ1JlcG9zaXRvcnknIGFuZCAnV29ya2luZ0NvcHknIG11c3QgYmUgZXhwbGljaXRseSBzZXQgdG8gaW5zdXJlIHRoYXQKKwkjIGlmICRHSVRfRElSIGFuZCAkR0lUX1dPUktfVFJFRSBhcmUgc2V0IGluIEVOViwgdGhleSBhcmUgYWN0dWFsbHkgdXNlZAorCSMgYnkgR2l0LT5yZXBvc2l0b3J5LT5jb21tYW5kKi4KKwlteSAkcmVwb19wYXRoID0gJHJlcG8tPnJlcG9fcGF0aCgpOworCW15ICVyZXBvX2FyZ3MgPSAoUmVwb3NpdG9yeSA9PiAkcmVwb19wYXRoLCBXb3JraW5nQ29weSA9PiAkd29ya2Rpcik7CisJbXkgJGRpZmZyZXBvID0gR2l0LT5yZXBvc2l0b3J5KCVyZXBvX2FyZ3MpOworCisJbXkgQGdpdGFyZ3MgPSAoJ2RpZmYnLCAnLS1yYXcnLCAnLS1uby1hYmJyZXYnLCAnLXonLCBAQVJHVik7CisJbXkgJGRpZmZydG4gPSAkZGlmZnJlcG8tPmNvbW1hbmRfb25lbGluZShAZ2l0YXJncyk7CisJZXhpdCgwKSB1bmxlc3MgZGVmaW5lZCgkZGlmZnJ0bik7CisKKwkjIEJ1aWxkIGluZGV4IGluZm8gZm9yIGxlZnQgYW5kIHJpZ2h0IHNpZGVzIG9mIHRoZSBkaWZmCisJbXkgJHN1Ym1vZHVsZV9tb2RlID0gJzE2MDAwMCc7CisJbXkgJHN5bWxpbmtfbW9kZSA9ICcxMjAwMDAnOworCW15ICRudWxsX21vZGUgPSAnMCcgeCA2OworCW15ICRudWxsX3NoYTEgPSAnMCcgeCA0MDsKKwlteSAkbGluZGV4ID0gJyc7CisJbXkgJHJpbmRleCA9ICcnOworCW15ICR3dGluZGV4ID0gJyc7CisJbXkgJXN1Ym1vZHVsZTsKKwlteSAlc3ltbGluazsKKwlteSBAd29ya2luZ190cmVlID0gKCk7CisJbXkgQHJhd2RpZmYgPSBzcGxpdCgnXDAnLCAkZGlmZnJ0bik7CisKKwlteSAkaSA9IDA7CisJd2hpbGUgKCRpIDwgJCNyYXdkaWZmKSB7CisJCWlmICgkcmF3ZGlmZlskaV0gPX4gL146Oi8pIHsKKwkJCXdhcm4gPDwgJ0VPRic7CitDb21iaW5lZCBkaWZmIGZvcm1hdHMgKCctYycgYW5kICctLWNjJykgYXJlIG5vdCBzdXBwb3J0ZWQgaW4KK2RpcmVjdG9yeSBkaWZmIG1vZGUgKCctZCcgYW5kICctLWRpci1kaWZmJykuCitFT0YKKwkJCWV4aXQoMSk7CisJCX0KKworCQlteSAoJGxtb2RlLCAkcm1vZGUsICRsc2hhMSwgJHJzaGExLCAkc3RhdHVzKSA9CisJCQlzcGxpdCgnICcsIHN1YnN0cigkcmF3ZGlmZlskaV0sIDEpKTsKKwkJbXkgJHNyY19wYXRoID0gJHJhd2RpZmZbJGkgKyAxXTsKKwkJbXkgJGRzdF9wYXRoOworCisJCWlmICgkc3RhdHVzID1+IC9eW0NSXS8pIHsKKwkJCSRkc3RfcGF0aCA9ICRyYXdkaWZmWyRpICsgMl07CisJCQkkaSArPSAzOworCQl9IGVsc2UgeworCQkJJGRzdF9wYXRoID0gJHNyY19wYXRoOworCQkJJGkgKz0gMjsKKwkJfQorCisJCWlmICgkbG1vZGUgZXEgJHN1Ym1vZHVsZV9tb2RlIG9yICRybW9kZSBlcSAkc3VibW9kdWxlX21vZGUpIHsKKwkJCSRzdWJtb2R1bGV7JHNyY19wYXRofXtsZWZ0fSA9ICRsc2hhMTsKKwkJCWlmICgkbHNoYTEgbmUgJHJzaGExKSB7CisJCQkJJHN1Ym1vZHVsZXskZHN0X3BhdGh9e3JpZ2h0fSA9ICRyc2hhMTsKKwkJCX0gZWxzZSB7CisJCQkJJHN1Ym1vZHVsZXskZHN0X3BhdGh9e3JpZ2h0fSA9ICIkcnNoYTEtZGlydHkiOworCQkJfQorCQkJbmV4dDsKKwkJfQorCisJCWlmICgkbG1vZGUgZXEgJHN5bWxpbmtfbW9kZSkgeworCQkJJHN5bWxpbmt7JHNyY19wYXRofXtsZWZ0fSA9CisJCQkJJGRpZmZyZXBvLT5jb21tYW5kX29uZWxpbmUoJ3Nob3cnLCAiJGxzaGExIik7CisJCX0KKworCQlpZiAoJHJtb2RlIGVxICRzeW1saW5rX21vZGUpIHsKKwkJCSRzeW1saW5reyRkc3RfcGF0aH17cmlnaHR9ID0KKwkJCQkkZGlmZnJlcG8tPmNvbW1hbmRfb25lbGluZSgnc2hvdycsICIkcnNoYTEiKTsKKwkJfQorCisJCWlmICgkbG1vZGUgbmUgJG51bGxfbW9kZSBhbmQgJHN0YXR1cyAhfiAvXkMvKSB7CisJCQkkbGluZGV4IC49ICIkbG1vZGUgJGxzaGExXHQkc3JjX3BhdGhcMCI7CisJCX0KKworCQlpZiAoJHJtb2RlIG5lICRudWxsX21vZGUpIHsKKwkJCW15ICgkdXNlLCAkd3Rfc2hhMSkgPSB1c2Vfd3RfZmlsZSgkcmVwbywgJHdvcmtkaXIsCisJCQkJCQkJICAkZHN0X3BhdGgsICRyc2hhMSk7CisJCQlpZiAoJHVzZSkgeworCQkJCXB1c2ggQHdvcmtpbmdfdHJlZSwgJGRzdF9wYXRoOworCQkJCSR3dGluZGV4IC49ICIkcm1vZGUgJHd0X3NoYTFcdCRkc3RfcGF0aFwwIjsKKwkJCX0gZWxzZSB7CisJCQkJJHJpbmRleCAuPSAiJHJtb2RlICRyc2hhMVx0JGRzdF9wYXRoXDAiOworCQkJfQorCQl9CisJfQorCisJIyBTZXR1cCB0ZW1wIGRpcmVjdG9yaWVzCisJbXkgJHRtcGRpciA9IHRlbXBkaXIoJ2dpdC1kaWZmdG9vbC5YWFhYWCcsIENMRUFOVVAgPT4gMCwgVE1QRElSID0+IDEpOworCW15ICRsZGlyID0gIiR0bXBkaXIvbGVmdCI7CisJbXkgJHJkaXIgPSAiJHRtcGRpci9yaWdodCI7CisJbWtwYXRoKCRsZGlyKSBvciBleGl0X2NsZWFudXAoJHRtcGRpciwgMSk7CisJbWtwYXRoKCRyZGlyKSBvciBleGl0X2NsZWFudXAoJHRtcGRpciwgMSk7CisKKwkjIElmICRHSVRfRElSIGlzIG5vdCBzZXQgcHJpb3IgdG8gY2FsbGluZyAnZ2l0IHVwZGF0ZS1pbmRleCcgYW5kCisJIyAnZ2l0IGNoZWNrb3V0LWluZGV4JywgdGhlbiB0aG9zZSBjb21tYW5kcyB3aWxsIGZhaWwgaWYgZGlmZnRvb2wKKwkjIGlzIGNhbGxlZCBmcm9tIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIHJlcG8gcm9vdC4KKwlteSAkbXVzdF91bnNldF9naXRfZGlyID0gMDsKKwlpZiAobm90IGRlZmluZWQoJEVOVntHSVRfRElSfSkpIHsKKwkJJG11c3RfdW5zZXRfZ2l0X2RpciA9IDE7CisJCSRFTlZ7R0lUX0RJUn0gPSAkcmVwb19wYXRoOworCX0KKworCSMgUG9wdWxhdGUgdGhlIGxlZnQgYW5kIHJpZ2h0IGRpcmVjdG9yaWVzIGJhc2VkIG9uIGVhY2ggaW5kZXggZmlsZQorCW15ICgkaW5waXBlLCAkY3R4KTsKKwkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICIkdG1wZGlyL2xpbmRleCI7CisJKCRpbnBpcGUsICRjdHgpID0KKwkJJHJlcG8tPmNvbW1hbmRfaW5wdXRfcGlwZShxdyh1cGRhdGUtaW5kZXggLXogLS1pbmRleC1pbmZvKSk7CisJcHJpbnQoJGlucGlwZSAkbGluZGV4KTsKKwkkcmVwby0+Y29tbWFuZF9jbG9zZV9waXBlKCRpbnBpcGUsICRjdHgpOworCisJbXkgJHJjID0gc3lzdGVtKCdnaXQnLCAnY2hlY2tvdXQtaW5kZXgnLCAnLS1hbGwnLCAiLS1wcmVmaXg9JGxkaXIvIik7CisJZXhpdF9jbGVhbnVwKCR0bXBkaXIsICRyYykgaWYgJHJjICE9IDA7CisKKwkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICIkdG1wZGlyL3JpbmRleCI7CisJKCRpbnBpcGUsICRjdHgpID0KKwkJJHJlcG8tPmNvbW1hbmRfaW5wdXRfcGlwZShxdyh1cGRhdGUtaW5kZXggLXogLS1pbmRleC1pbmZvKSk7CisJcHJpbnQoJGlucGlwZSAkcmluZGV4KTsKKwkkcmVwby0+Y29tbWFuZF9jbG9zZV9waXBlKCRpbnBpcGUsICRjdHgpOworCisJJHJjID0gc3lzdGVtKCdnaXQnLCAnY2hlY2tvdXQtaW5kZXgnLCAnLS1hbGwnLCAiLS1wcmVmaXg9JHJkaXIvIik7CisJZXhpdF9jbGVhbnVwKCR0bXBkaXIsICRyYykgaWYgJHJjICE9IDA7CisKKwkkRU5We0dJVF9JTkRFWF9GSUxFfSA9ICIkdG1wZGlyL3d0aW5kZXgiOworCSgkaW5waXBlLCAkY3R4KSA9CisJCSRyZXBvLT5jb21tYW5kX2lucHV0X3BpcGUocXcodXBkYXRlLWluZGV4IC0taW5mby1vbmx5IC16IC0taW5kZXgtaW5mbykpOworCXByaW50KCRpbnBpcGUgJHd0aW5kZXgpOworCSRyZXBvLT5jb21tYW5kX2Nsb3NlX3BpcGUoJGlucGlwZSwgJGN0eCk7CisKKwkjIElmICRHSVRfRElSIHdhcyBleHBsaWNpdGx5IHNldCBqdXN0IGZvciB0aGUgdXBkYXRlL2NoZWNrb3V0CisJIyBjb21tYW5kcywgdGhlbiBpdCBzaG91bGQgYmUgdW5zZXQgYmVmb3JlIGNvbnRpbnVpbmcuCisJZGVsZXRlKCRFTlZ7R0lUX0RJUn0pIGlmICgkbXVzdF91bnNldF9naXRfZGlyKTsKKwlkZWxldGUoJEVOVntHSVRfSU5ERVhfRklMRX0pOworCisJIyBDaGFuZ2VzIGluIHRoZSB3b3JraW5nIHRyZWUgbmVlZCBzcGVjaWFsIHRyZWF0bWVudCBzaW5jZSB0aGV5IGFyZQorCSMgbm90IHBhcnQgb2YgdGhlIGluZGV4LiBSZW1vdmUgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gJHdvcmtkaXIKKwkjIGJlZm9yZSBzdGFydGluZyB0byBhdm9pZCBkb3VibGUgc2xhc2hlcyBpbiBzeW1saW5rIHRhcmdldHMuCisJJHdvcmtkaXIgPX4gc3wvJHx8OworCWZvciBteSAkZmlsZSAoQHdvcmtpbmdfdHJlZSkgeworCQlteSAkZGlyID0gZGlybmFtZSgkZmlsZSk7CisJCXVubGVzcyAoLWQgIiRyZGlyLyRkaXIiKSB7CisJCQlta3BhdGgoIiRyZGlyLyRkaXIiKSBvcgorCQkJZXhpdF9jbGVhbnVwKCR0bXBkaXIsIDEpOworCQl9CisJCWlmICgkc3ltbGlua3MpIHsKKwkJCXN5bWxpbmsoIiR3b3JrZGlyLyRmaWxlIiwgIiRyZGlyLyRmaWxlIikgb3IKKwkJCWV4aXRfY2xlYW51cCgkdG1wZGlyLCAxKTsKKwkJfSBlbHNlIHsKKwkJCWNvcHkoIiR3b3JrZGlyLyRmaWxlIiwgIiRyZGlyLyRmaWxlIikgb3IKKwkJCWV4aXRfY2xlYW51cCgkdG1wZGlyLCAxKTsKKworCQkJbXkgJG1vZGUgPSBzdGF0KCIkd29ya2Rpci8kZmlsZSIpLT5tb2RlOworCQkJY2htb2QoJG1vZGUsICIkcmRpci8kZmlsZSIpIG9yCisJCQlleGl0X2NsZWFudXAoJHRtcGRpciwgMSk7CisJCX0KKwl9CisKKwkjIENoYW5nZXMgdG8gc3VibW9kdWxlcyByZXF1aXJlIHNwZWNpYWwgdHJlYXRtZW50LiBUaGlzIGxvb3Agd3JpdGVzIGEKKwkjIHRlbXBvcmFyeSBmaWxlIHRvIGJvdGggdGhlIGxlZnQgYW5kIHJpZ2h0IGRpcmVjdG9yaWVzIHRvIHNob3cgdGhlCisJIyBjaGFuZ2UgaW4gdGhlIHJlY29yZGVkIFNIQTEgZm9yIHRoZSBzdWJtb2R1bGUuCisJZm9yIG15ICRwYXRoIChrZXlzICVzdWJtb2R1bGUpIHsKKwkJbXkgJG9rOworCQlpZiAoZGVmaW5lZCgkc3VibW9kdWxleyRwYXRofXtsZWZ0fSkpIHsKKwkJCSRvayA9IHdyaXRlX3RvX2ZpbGUoIiRsZGlyLyRwYXRoIiwKKwkJCQkiU3VicHJvamVjdCBjb21taXQgJHN1Ym1vZHVsZXskcGF0aH17bGVmdH0iKTsKKwkJfQorCQlpZiAoZGVmaW5lZCgkc3VibW9kdWxleyRwYXRofXtyaWdodH0pKSB7CisJCQkkb2sgPSB3cml0ZV90b19maWxlKCIkcmRpci8kcGF0aCIsCisJCQkJIlN1YnByb2plY3QgY29tbWl0ICRzdWJtb2R1bGV7JHBhdGh9e3JpZ2h0fSIpOworCQl9CisJCWV4aXRfY2xlYW51cCgkdG1wZGlyLCAxKSBpZiBub3QgJG9rOworCX0KKworCSMgU3ltYm9saWMgbGlua3MgcmVxdWlyZSBzcGVjaWFsIHRyZWF0bWVudC4gVGhlIHN0YW5kYXJkICJnaXQgZGlmZiIKKwkjIHNob3dzIG9ubHkgdGhlIGxpbmsgaXRzZWxmLCBub3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBsaW5rIHRhcmdldC4KKwkjIFRoaXMgbG9vcCByZXBsaWNhdGVzIHRoYXQgYmVoYXZpb3IuCisJZm9yIG15ICRwYXRoIChrZXlzICVzeW1saW5rKSB7CisJCW15ICRvazsKKwkJaWYgKGRlZmluZWQoJHN5bWxpbmt7JHBhdGh9e2xlZnR9KSkgeworCQkJJG9rID0gd3JpdGVfdG9fZmlsZSgiJGxkaXIvJHBhdGgiLAorCQkJCQkkc3ltbGlua3skcGF0aH17bGVmdH0pOworCQl9CisJCWlmIChkZWZpbmVkKCRzeW1saW5reyRwYXRofXtyaWdodH0pKSB7CisJCQkkb2sgPSB3cml0ZV90b19maWxlKCIkcmRpci8kcGF0aCIsCisJCQkJCSRzeW1saW5reyRwYXRofXtyaWdodH0pOworCQl9CisJCWV4aXRfY2xlYW51cCgkdG1wZGlyLCAxKSBpZiBub3QgJG9rOworCX0KKworCXJldHVybiAoJGxkaXIsICRyZGlyLCAkdG1wZGlyLCBAd29ya2luZ190cmVlKTsKK30KKworc3ViIHdyaXRlX3RvX2ZpbGUKK3sKKwlteSAkcGF0aCA9IHNoaWZ0OworCW15ICR2YWx1ZSA9IHNoaWZ0OworCisJIyBNYWtlIHN1cmUgdGhlIHBhdGggdG8gdGhlIGZpbGUgZXhpc3RzCisJbXkgJGRpciA9IGRpcm5hbWUoJHBhdGgpOworCXVubGVzcyAoLWQgIiRkaXIiKSB7CisJCW1rcGF0aCgiJGRpciIpIG9yIHJldHVybiAwOworCX0KKworCSMgSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMgaW4gdGhhdCBsb2NhdGlvbiwgZGVsZXRlIGl0LiAgVGhpcworCSMgaXMgcmVxdWlyZWQgaW4gdGhlIGNhc2Ugb2Ygc3ltYm9saWMgbGlua3MuCisJdW5saW5rKCRwYXRoKTsKKworCW9wZW4obXkgJGZoLCAnPicsICRwYXRoKSBvciByZXR1cm4gMDsKKwlwcmludCgkZmggJHZhbHVlKTsKKwljbG9zZSgkZmgpOworCisJcmV0dXJuIDE7Cit9CisKK3N1YiBtYWluCit7CisJIyBwYXJzZSBjb21tYW5kLWxpbmUgb3B0aW9ucy4gYWxsIHVucmVjb2duaXplZCBvcHRpb25zIGFuZCBhcmd1bWVudHMKKwkjIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgJ2dpdCBkaWZmJyBjb21tYW5kLgorCW15ICVvcHRzID0gKAorCQlkaWZmdG9vbF9jbWQgPT4gdW5kZWYsCisJCWRpcmRpZmYgPT4gdW5kZWYsCisJCWV4dGNtZCA9PiB1bmRlZiwKKwkJZ3VpID0+IHVuZGVmLAorCQloZWxwID0+IHVuZGVmLAorCQlwcm9tcHQgPT4gdW5kZWYsCisJCXN5bWxpbmtzID0+ICReTyBuZSAnY3lnd2luJyAmJgorCQkJCSReTyBuZSAnTVNXaW4zMicgJiYgJF5PIG5lICdtc3lzJywKKwkJdG9vbF9oZWxwID0+IHVuZGVmLAorCQl0cnVzdF9leGl0X2NvZGUgPT4gdW5kZWYsCisJKTsKKwlHZXRPcHRpb25zKCdnfGd1aSEnID0+IFwkb3B0c3tndWl9LAorCQknZHxkaXItZGlmZicgPT4gXCRvcHRze2RpcmRpZmZ9LAorCQknaCcgPT4gXCRvcHRze2hlbHB9LAorCQkncHJvbXB0IScgPT4gXCRvcHRze3Byb21wdH0sCisJCSd5JyA9PiBzdWIgeyAkb3B0c3twcm9tcHR9ID0gMDsgfSwKKwkJJ3N5bWxpbmtzJyA9PiBcJG9wdHN7c3ltbGlua3N9LAorCQknbm8tc3ltbGlua3MnID0+IHN1YiB7ICRvcHRze3N5bWxpbmtzfSA9IDA7IH0sCisJCSd0fHRvb2w6cycgPT4gXCRvcHRze2RpZmZ0b29sX2NtZH0sCisJCSd0b29sLWhlbHAnID0+IFwkb3B0c3t0b29sX2hlbHB9LAorCQkndHJ1c3QtZXhpdC1jb2RlJyA9PiBcJG9wdHN7dHJ1c3RfZXhpdF9jb2RlfSwKKwkJJ25vLXRydXN0LWV4aXQtY29kZScgPT4gc3ViIHsgJG9wdHN7dHJ1c3RfZXhpdF9jb2RlfSA9IDA7IH0sCisJCSd4fGV4dGNtZDpzJyA9PiBcJG9wdHN7ZXh0Y21kfSk7CisKKwlpZiAoZGVmaW5lZCgkb3B0c3toZWxwfSkpIHsKKwkJdXNhZ2UoMCk7CisJfQorCWlmIChkZWZpbmVkKCRvcHRze3Rvb2xfaGVscH0pKSB7CisJCXByaW50X3Rvb2xfaGVscCgpOworCX0KKwlpZiAoZGVmaW5lZCgkb3B0c3tkaWZmdG9vbF9jbWR9KSkgeworCQlpZiAobGVuZ3RoKCRvcHRze2RpZmZ0b29sX2NtZH0pID4gMCkgeworCQkJJEVOVntHSVRfRElGRl9UT09MfSA9ICRvcHRze2RpZmZ0b29sX2NtZH07CisJCX0gZWxzZSB7CisJCQlwcmludCAiTm8gPHRvb2w+IGdpdmVuIGZvciAtLXRvb2w9PHRvb2w+XG4iOworCQkJdXNhZ2UoMSk7CisJCX0KKwl9CisJaWYgKGRlZmluZWQoJG9wdHN7ZXh0Y21kfSkpIHsKKwkJaWYgKGxlbmd0aCgkb3B0c3tleHRjbWR9KSA+IDApIHsKKwkJCSRFTlZ7R0lUX0RJRkZUT09MX0VYVENNRH0gPSAkb3B0c3tleHRjbWR9OworCQl9IGVsc2UgeworCQkJcHJpbnQgIk5vIDxjbWQ+IGdpdmVuIGZvciAtLWV4dGNtZD08Y21kPlxuIjsKKwkJCXVzYWdlKDEpOworCQl9CisJfQorCWlmICgkb3B0c3tndWl9KSB7CisJCW15ICRndWl0b29sID0gR2l0Ojpjb25maWcoJ2RpZmYuZ3VpdG9vbCcpOworCQlpZiAoZGVmaW5lZCgkZ3VpdG9vbCkgJiYgbGVuZ3RoKCRndWl0b29sKSA+IDApIHsKKwkJCSRFTlZ7R0lUX0RJRkZfVE9PTH0gPSAkZ3VpdG9vbDsKKwkJfQorCX0KKworCWlmICghZGVmaW5lZCAkb3B0c3t0cnVzdF9leGl0X2NvZGV9KSB7CisJCSRvcHRze3RydXN0X2V4aXRfY29kZX0gPSBHaXQ6OmNvbmZpZ19ib29sKCdkaWZmdG9vbC50cnVzdEV4aXRDb2RlJyk7CisJfQorCWlmICgkb3B0c3t0cnVzdF9leGl0X2NvZGV9KSB7CisJCSRFTlZ7R0lUX0RJRkZUT09MX1RSVVNUX0VYSVRfQ09ERX0gPSAndHJ1ZSc7CisJfSBlbHNlIHsKKwkJJEVOVntHSVRfRElGRlRPT0xfVFJVU1RfRVhJVF9DT0RFfSA9ICdmYWxzZSc7CisJfQorCisJIyBJbiBkaXJlY3RvcnkgZGlmZiBtb2RlLCAnZ2l0LWRpZmZ0b29sLS1oZWxwZXInIGlzIGNhbGxlZCBvbmNlCisJIyB0byBjb21wYXJlIHRoZSBhL2IgZGlyZWN0b3JpZXMuICBJbiBmaWxlIGRpZmYgbW9kZSwgJ2dpdCBkaWZmJworCSMgd2lsbCBpbnZva2UgYSBzZXBhcmF0ZSBpbnN0YW5jZSBvZiAnZ2l0LWRpZmZ0b29sLS1oZWxwZXInIGZvcgorCSMgZWFjaCBmaWxlIHRoYXQgY2hhbmdlZC4KKwlpZiAoZGVmaW5lZCgkb3B0c3tkaXJkaWZmfSkpIHsKKwkJZGlyX2RpZmYoJG9wdHN7ZXh0Y21kfSwgJG9wdHN7c3ltbGlua3N9KTsKKwl9IGVsc2UgeworCQlmaWxlX2RpZmYoJG9wdHN7cHJvbXB0fSk7CisJfQorfQorCitzdWIgZGlyX2RpZmYKK3sKKwlteSAoJGV4dGNtZCwgJHN5bWxpbmtzKSA9IEBfOworCW15ICRyYzsKKwlteSAkZXJyb3IgPSAwOworCW15ICRyZXBvID0gR2l0LT5yZXBvc2l0b3J5KCk7CisJbXkgJHdvcmtkaXIgPSBmaW5kX3dvcmt0cmVlKCk7CisJbXkgKCRhLCAkYiwgJHRtcGRpciwgQHdvcmt0cmVlKSA9CisJCXNldHVwX2Rpcl9kaWZmKCRyZXBvLCAkd29ya2RpciwgJHN5bWxpbmtzKTsKKworCWlmIChkZWZpbmVkKCRleHRjbWQpKSB7CisJCSRyYyA9IHN5c3RlbSgkZXh0Y21kLCAkYSwgJGIpOworCX0gZWxzZSB7CisJCSRFTlZ7R0lUX0RJRkZUT09MX0RJUkRJRkZ9ID0gJ3RydWUnOworCQkkcmMgPSBzeXN0ZW0oJ2dpdCcsICdkaWZmdG9vbC0taGVscGVyJywgJGEsICRiKTsKKwl9CisJIyBJZiB0aGUgZGlmZiBpbmNsdWRpbmcgd29ya2luZyBjb3B5IGZpbGVzIGFuZCB0aG9zZQorCSMgZmlsZXMgd2VyZSBtb2RpZmllZCBkdXJpbmcgdGhlIGRpZmYsIHRoZW4gdGhlIGNoYW5nZXMKKwkjIHNob3VsZCBiZSBjb3BpZWQgYmFjayB0byB0aGUgd29ya2luZyB0cmVlLgorCSMgRG8gbm90IGNvcHkgYmFjayBmaWxlcyB3aGVuIHN5bWxpbmtzIGFyZSB1c2VkIGFuZCB0aGUKKwkjIGV4dGVybmFsIHRvb2wgZGlkIG5vdCByZXBsYWNlIHRoZSBvcmlnaW5hbCBsaW5rIHdpdGggYSBmaWxlLgorCSMKKwkjIFRoZXNlIGhhc2hlcyBhcmUgbG9hZGVkIGxhemlseSBzaW5jZSB0aGV5IGFyZW4ndCBuZWVkZWQKKwkjIGluIHRoZSBjb21tb24gY2FzZSBvZiAtLXN5bWxpbmtzIGFuZCB0aGUgZGlmZnRvb2wgdXBkYXRpbmcKKwkjIGZpbGVzIHRocm91Z2ggdGhlIHN5bWxpbmsuCisJbXkgJXd0X21vZGlmaWVkOworCW15ICV0bXBfbW9kaWZpZWQ7CisJbXkgJGluZGljZXNfbG9hZGVkID0gMDsKKworCWZvciBteSAkZmlsZSAoQHdvcmt0cmVlKSB7CisJCW5leHQgaWYgJHN5bWxpbmtzICYmIC1sICIkYi8kZmlsZSI7CisJCW5leHQgaWYgISAtZiAiJGIvJGZpbGUiOworCisJCWlmICghJGluZGljZXNfbG9hZGVkKSB7CisJCQkld3RfbW9kaWZpZWQgPSBjaGFuZ2VkX2ZpbGVzKCRyZXBvLT5yZXBvX3BhdGgoKSwKKwkJCQkiJHRtcGRpci93dGluZGV4IiwgIiR3b3JrZGlyIik7CisJCQkldG1wX21vZGlmaWVkID0gY2hhbmdlZF9maWxlcygkcmVwby0+cmVwb19wYXRoKCksCisJCQkJIiR0bXBkaXIvd3RpbmRleCIsICIkYiIpOworCQkJJGluZGljZXNfbG9hZGVkID0gMTsKKwkJfQorCisJCWlmIChleGlzdHMgJHd0X21vZGlmaWVkeyRmaWxlfSBhbmQgZXhpc3RzICR0bXBfbW9kaWZpZWR7JGZpbGV9KSB7CisJCQlteSAkZXJybXNnID0gIndhcm5pbmc6IEJvdGggZmlsZXMgbW9kaWZpZWQ6ICI7CisJCQkkZXJybXNnIC49ICInJHdvcmtkaXIvJGZpbGUnIGFuZCAnJGIvJGZpbGUnLlxuIjsKKwkJCSRlcnJtc2cgLj0gIndhcm5pbmc6IFdvcmtpbmcgdHJlZSBmaWxlIGhhcyBiZWVuIGxlZnQuXG4iOworCQkJJGVycm1zZyAuPSAid2FybmluZzpcbiI7CisJCQl3YXJuICRlcnJtc2c7CisJCQkkZXJyb3IgPSAxOworCQl9IGVsc2lmIChleGlzdHMgJHRtcF9tb2RpZmllZHskZmlsZX0pIHsKKwkJCW15ICRtb2RlID0gc3RhdCgiJGIvJGZpbGUiKS0+bW9kZTsKKwkJCWNvcHkoIiRiLyRmaWxlIiwgIiR3b3JrZGlyLyRmaWxlIikgb3IKKwkJCWV4aXRfY2xlYW51cCgkdG1wZGlyLCAxKTsKKworCQkJY2htb2QoJG1vZGUsICIkd29ya2Rpci8kZmlsZSIpIG9yCisJCQlleGl0X2NsZWFudXAoJHRtcGRpciwgMSk7CisJCX0KKwl9CisJaWYgKCRlcnJvcikgeworCQl3YXJuICJ3YXJuaW5nOiBUZW1wb3JhcnkgZmlsZXMgZXhpc3QgaW4gJyR0bXBkaXInLlxuIjsKKwkJd2FybiAid2FybmluZzogWW91IG1heSB3YW50IHRvIGNsZWFudXAgb3IgcmVjb3ZlciB0aGVzZS5cbiI7CisJCWV4aXQoMSk7CisJfSBlbHNlIHsKKwkJZXhpdF9jbGVhbnVwKCR0bXBkaXIsICRyYyk7CisJfQorfQorCitzdWIgZmlsZV9kaWZmCit7CisJbXkgKCRwcm9tcHQpID0gQF87CisKKwlpZiAoZGVmaW5lZCgkcHJvbXB0KSkgeworCQlpZiAoJHByb21wdCkgeworCQkJJEVOVntHSVRfRElGRlRPT0xfUFJPTVBUfSA9ICd0cnVlJzsKKwkJfSBlbHNlIHsKKwkJCSRFTlZ7R0lUX0RJRkZUT09MX05PX1BST01QVH0gPSAndHJ1ZSc7CisJCX0KKwl9CisKKwkkRU5We0dJVF9QQUdFUn0gPSAnJzsKKwkkRU5We0dJVF9FWFRFUk5BTF9ESUZGfSA9ICdnaXQtZGlmZnRvb2wtLWhlbHBlcic7CisKKwkjIEFjdGl2ZVN0YXRlIFBlcmwgZm9yIFdpbjMyIGRvZXMgbm90IGltcGxlbWVudCBQT1NJWCBzZW1hbnRpY3Mgb2YKKwkjIGV4ZWMqIHN5c3RlbSBjYWxsLiBJdCBqdXN0IHNwYXducyB0aGUgZ2l2ZW4gZXhlY3V0YWJsZSBhbmQgZmluaXNoZXMKKwkjIHRoZSBzdGFydGluZyBwcm9ncmFtLCBleGl0aW5nIHdpdGggY29kZSAwLgorCSMgc3lzdGVtIHdpbGwgYXQgbGVhc3QgY2F0Y2ggdGhlIGVycm9ycyByZXR1cm5lZCBieSBnaXQgZGlmZiwKKwkjIGFsbG93aW5nIHRoZSBjYWxsZXIgb2YgZ2l0IGRpZmZ0b29sIGJldHRlciBoYW5kbGluZyBvZiBmYWlsdXJlcy4KKwlteSAkcmMgPSBzeXN0ZW0oJ2dpdCcsICdkaWZmJywgQEFSR1YpOworCWV4aXQoJHJjIHwgKCRyYyA+PiA4KSk7Cit9CisKK21haW4oKTsKZGlmZiAtLWdpdCBhL2dpdC1maWx0ZXItYnJhbmNoLnNoIGIvZ2l0LWZpbHRlci1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjdjOWM1NAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1maWx0ZXItYnJhbmNoLnNoCkBAIC0wLDAgKzEsNTQwIEBACisjIS9iaW4vc2gKKyMKKyMgUmV3cml0ZSByZXZpc2lvbiBoaXN0b3J5CisjIENvcHlyaWdodCAoYykgUGV0ciBCYXVkaXMsIDIwMDYKKyMgTWluaW1hbCBjaGFuZ2VzIHRvICJwb3J0IiBpdCB0byBjb3JlLWdpdCAoYykgSm9oYW5uZXMgU2NoaW5kZWxpbiwgMjAwNworIworIyBMZXRzIHlvdSByZXdyaXRlIHRoZSByZXZpc2lvbiBoaXN0b3J5IG9mIHRoZSBjdXJyZW50IGJyYW5jaCwgY3JlYXRpbmcKKyMgYSBuZXcgYnJhbmNoLiBZb3UgY2FuIHNwZWNpZnkgYSBudW1iZXIgb2YgZmlsdGVycyB0byBtb2RpZnkgdGhlIGNvbW1pdHMsCisjIGZpbGVzIGFuZCB0cmVlcy4KKworIyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3aWxsIGFsc28gYmUgYXZhaWxhYmxlIGluIHRoZSBjb21taXQgZmlsdGVyOgorCitmdW5jdGlvbnM9JChjYXQgPDwgXEVPRgord2FybiAoKSB7CisJZWNobyAiJCoiID4mMgorfQorCittYXAoKQoreworCSMgaWYgaXQgd2FzIG5vdCByZXdyaXR0ZW4sIHRha2UgdGhlIG9yaWdpbmFsCisJaWYgdGVzdCAtciAiJHdvcmtkaXIvLi4vbWFwLyQxIgorCXRoZW4KKwkJY2F0ICIkd29ya2Rpci8uLi9tYXAvJDEiCisJZWxzZQorCQllY2hvICIkMSIKKwlmaQorfQorCisjIGlmIHlvdSBydW4gJ3NraXBfY29tbWl0ICIkQCInIGluIGEgY29tbWl0IGZpbHRlciwgaXQgd2lsbCBwcmludAorIyB0aGUgKG1hcHBlZCkgcGFyZW50cywgZWZmZWN0aXZlbHkgc2tpcHBpbmcgdGhlIGNvbW1pdC4KKworc2tpcF9jb21taXQoKQoreworCXNoaWZ0OworCXdoaWxlIFsgLW4gIiQxIiBdOworCWRvCisJCXNoaWZ0OworCQltYXAgIiQxIjsKKwkJc2hpZnQ7CisJZG9uZTsKK30KKworIyBpZiB5b3UgcnVuICdnaXRfY29tbWl0X25vbl9lbXB0eV90cmVlICIkQCInIGluIGEgY29tbWl0IGZpbHRlciwKKyMgaXQgd2lsbCBza2lwIGNvbW1pdHMgdGhhdCBsZWF2ZSB0aGUgdHJlZSB1bnRvdWNoZWQsIGNvbW1pdCB0aGUgb3RoZXIuCitnaXRfY29tbWl0X25vbl9lbXB0eV90cmVlKCkKK3sKKwlpZiB0ZXN0ICQjID0gMyAmJiB0ZXN0ICIkMSIgPSAkKGdpdCByZXYtcGFyc2UgIiQzXnt0cmVlfSIpOyB0aGVuCisJCW1hcCAiJDMiCisJZWxzZQorCQlnaXQgY29tbWl0LXRyZWUgIiRAIgorCWZpCit9CisjIG92ZXJyaWRlIGRpZSgpOiB0aGlzIHZlcnNpb24gcHV0cyBpbiBhbiBleHRyYSBsaW5lIGJyZWFrLCBzbyB0aGF0CisjIHRoZSBwcm9ncmVzcyBpcyBzdGlsbCB2aXNpYmxlCisKK2RpZSgpCit7CisJZWNobyA+JjIKKwllY2hvICIkKiIgPiYyCisJZXhpdCAxCit9CitFT0YKKykKKworZXZhbCAiJGZ1bmN0aW9ucyIKKworZmluaXNoX2lkZW50KCkgeworCSMgRW5zdXJlIG5vbi1lbXB0eSBpZCBuYW1lLgorCWVjaG8gImNhc2UgXCJcJEdJVF8kMV9OQU1FXCIgaW4gXCJcIikgR0lUXyQxX05BTUU9XCJcJHtHSVRfJDFfRU1BSUwlJUAqfVwiICYmIGV4cG9ydCBHSVRfJDFfTkFNRTs7IGVzYWMiCisJIyBBbmQgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgZXhwb3J0ZWQuCisJZWNobyAiZXhwb3J0IEdJVF8kMV9OQU1FIgorCWVjaG8gImV4cG9ydCBHSVRfJDFfRU1BSUwiCisJZWNobyAiZXhwb3J0IEdJVF8kMV9EQVRFIgorfQorCitzZXRfaWRlbnQgKCkgeworCXBhcnNlX2lkZW50X2Zyb21fY29tbWl0IGF1dGhvciBBVVRIT1IgY29tbWl0dGVyIENPTU1JVFRFUgorCWZpbmlzaF9pZGVudCBBVVRIT1IKKwlmaW5pc2hfaWRlbnQgQ09NTUlUVEVSCit9CisKK1VTQUdFPSJbLS1lbnYtZmlsdGVyIDxjb21tYW5kPl0gWy0tdHJlZS1maWx0ZXIgPGNvbW1hbmQ+XQorCVstLWluZGV4LWZpbHRlciA8Y29tbWFuZD5dIFstLXBhcmVudC1maWx0ZXIgPGNvbW1hbmQ+XQorCVstLW1zZy1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1jb21taXQtZmlsdGVyIDxjb21tYW5kPl0KKwlbLS10YWctbmFtZS1maWx0ZXIgPGNvbW1hbmQ+XSBbLS1zdWJkaXJlY3RvcnktZmlsdGVyIDxkaXJlY3Rvcnk+XQorCVstLW9yaWdpbmFsIDxuYW1lc3BhY2U+XSBbLWQgPGRpcmVjdG9yeT5dIFstZiB8IC0tZm9yY2VdCisJWzxyZXYtbGlzdCBvcHRpb25zPi4uLl0iCisKK09QVElPTlNfU1BFQz0KKy4gZ2l0LXNoLXNldHVwCisKK2lmIFsgIiQoaXNfYmFyZV9yZXBvc2l0b3J5KSIgPSBmYWxzZSBdOyB0aGVuCisJcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgJ3Jld3JpdGUgYnJhbmNoZXMnCitmaQorCit0ZW1wZGlyPS5naXQtcmV3cml0ZQorZmlsdGVyX2Vudj0KK2ZpbHRlcl90cmVlPQorZmlsdGVyX2luZGV4PQorZmlsdGVyX3BhcmVudD0KK2ZpbHRlcl9tc2c9Y2F0CitmaWx0ZXJfY29tbWl0PQorZmlsdGVyX3RhZ19uYW1lPQorZmlsdGVyX3N1YmRpcj0KK29yaWdfbmFtZXNwYWNlPXJlZnMvb3JpZ2luYWwvCitmb3JjZT0KK3BydW5lX2VtcHR5PQorcmVtYXBfdG9fYW5jZXN0b3I9Cit3aGlsZSA6CitkbworCWNhc2UgIiQxIiBpbgorCS0tKQorCQlzaGlmdAorCQlicmVhaworCQk7OworCS0tZm9yY2V8LWYpCisJCXNoaWZ0CisJCWZvcmNlPXQKKwkJY29udGludWUKKwkJOzsKKwktLXJlbWFwLXRvLWFuY2VzdG9yKQorCQkjIGRlcHJlY2F0ZWQgKCRyZW1hcF90b19hbmNlc3RvciBpcyBzZXQgbm93IGF1dG9tYXRpY2FsbHkpCisJCXNoaWZ0CisJCXJlbWFwX3RvX2FuY2VzdG9yPXQKKwkJY29udGludWUKKwkJOzsKKwktLXBydW5lLWVtcHR5KQorCQlzaGlmdAorCQlwcnVuZV9lbXB0eT10CisJCWNvbnRpbnVlCisJCTs7CisJLSopCisJCTs7CisJKikKKwkJYnJlYWs7CisJZXNhYworCisJIyBhbGwgc3dpdGNoZXMgdGFrZSBvbmUgYXJndW1lbnQKKwlBUkc9IiQxIgorCWNhc2UgIiQjIiBpbiAxKSB1c2FnZSA7OyBlc2FjCisJc2hpZnQKKwlPUFRBUkc9IiQxIgorCXNoaWZ0CisKKwljYXNlICIkQVJHIiBpbgorCS1kKQorCQl0ZW1wZGlyPSIkT1BUQVJHIgorCQk7OworCS0tZW52LWZpbHRlcikKKwkJZmlsdGVyX2Vudj0iJE9QVEFSRyIKKwkJOzsKKwktLXRyZWUtZmlsdGVyKQorCQlmaWx0ZXJfdHJlZT0iJE9QVEFSRyIKKwkJOzsKKwktLWluZGV4LWZpbHRlcikKKwkJZmlsdGVyX2luZGV4PSIkT1BUQVJHIgorCQk7OworCS0tcGFyZW50LWZpbHRlcikKKwkJZmlsdGVyX3BhcmVudD0iJE9QVEFSRyIKKwkJOzsKKwktLW1zZy1maWx0ZXIpCisJCWZpbHRlcl9tc2c9IiRPUFRBUkciCisJCTs7CisJLS1jb21taXQtZmlsdGVyKQorCQlmaWx0ZXJfY29tbWl0PSIkZnVuY3Rpb25zOyAkT1BUQVJHIgorCQk7OworCS0tdGFnLW5hbWUtZmlsdGVyKQorCQlmaWx0ZXJfdGFnX25hbWU9IiRPUFRBUkciCisJCTs7CisJLS1zdWJkaXJlY3RvcnktZmlsdGVyKQorCQlmaWx0ZXJfc3ViZGlyPSIkT1BUQVJHIgorCQlyZW1hcF90b19hbmNlc3Rvcj10CisJCTs7CisJLS1vcmlnaW5hbCkKKwkJb3JpZ19uYW1lc3BhY2U9JChleHByICIkT1BUQVJHLyIgOiAnXCguKlteL11cKS8qJCcpLworCQk7OworCSopCisJCXVzYWdlCisJCTs7CisJZXNhYworZG9uZQorCitjYXNlICIkcHJ1bmVfZW1wdHksJGZpbHRlcl9jb21taXQiIGluCissKQorCWZpbHRlcl9jb21taXQ9J2dpdCBjb21taXQtdHJlZSAiJEAiJzs7Cit0LCkKKwlmaWx0ZXJfY29tbWl0PSIkZnVuY3Rpb25zOyInIGdpdF9jb21taXRfbm9uX2VtcHR5X3RyZWUgIiRAIic7OworLCopCisJOzsKKyopCisJZGllICJDYW5ub3Qgc2V0IC0tcHJ1bmUtZW1wdHkgYW5kIC0tY29tbWl0LWZpbHRlciBhdCB0aGUgc2FtZSB0aW1lIgorZXNhYworCitjYXNlICIkZm9yY2UiIGluCit0KQorCXJtIC1yZiAiJHRlbXBkaXIiCis7OworJycpCisJdGVzdCAtZCAiJHRlbXBkaXIiICYmCisJCWRpZSAiJHRlbXBkaXIgYWxyZWFkeSBleGlzdHMsIHBsZWFzZSByZW1vdmUgaXQiCitlc2FjCitvcmlnX2Rpcj0kKHB3ZCkKK21rZGlyIC1wICIkdGVtcGRpci90IiAmJgordGVtcGRpcj0iJChjZCAiJHRlbXBkaXIiOyBwd2QpIiAmJgorY2QgIiR0ZW1wZGlyL3QiICYmCit3b3JrZGlyPSIkKHB3ZCkiIHx8CitkaWUgIiIKKworIyBSZW1vdmUgdGVtcGRpciBvbiBleGl0Cit0cmFwICdjZCAiJG9yaWdfZGlyIjsgcm0gLXJmICIkdGVtcGRpciInIDAKKworT1JJR19HSVRfRElSPSIkR0lUX0RJUiIKK09SSUdfR0lUX1dPUktfVFJFRT0iJEdJVF9XT1JLX1RSRUUiCitPUklHX0dJVF9JTkRFWF9GSUxFPSIkR0lUX0lOREVYX0ZJTEUiCitHSVRfV09SS19UUkVFPS4KK2V4cG9ydCBHSVRfRElSIEdJVF9XT1JLX1RSRUUKKworIyBNYWtlIHN1cmUgcmVmcy9vcmlnaW5hbCBpcyBlbXB0eQorZ2l0IGZvci1lYWNoLXJlZiA+ICIkdGVtcGRpciIvYmFja3VwLXJlZnMgfHwgZXhpdAord2hpbGUgcmVhZCBzaGExIHR5cGUgbmFtZQorZG8KKwljYXNlICIkZm9yY2UsJG5hbWUiIGluCisJLCRvcmlnX25hbWVzcGFjZSopCisJCWRpZSAiQ2Fubm90IGNyZWF0ZSBhIG5ldyBiYWNrdXAuCitBIHByZXZpb3VzIGJhY2t1cCBhbHJlYWR5IGV4aXN0cyBpbiAkb3JpZ19uYW1lc3BhY2UKK0ZvcmNlIG92ZXJ3cml0aW5nIHRoZSBiYWNrdXAgd2l0aCAtZiIKKwk7OworCXQsJG9yaWdfbmFtZXNwYWNlKikKKwkJZ2l0IHVwZGF0ZS1yZWYgLWQgIiRuYW1lIiAkc2hhMQorCTs7CisJZXNhYworZG9uZSA8ICIkdGVtcGRpciIvYmFja3VwLXJlZnMKKworIyBUaGUgcmVmcyBzaG91bGQgYmUgdXBkYXRlZCBpZiB0aGVpciBoZWFkcyB3ZXJlIHJld3JpdHRlbgorZ2l0IHJldi1wYXJzZSAtLW5vLWZsYWdzIC0tcmV2cy1vbmx5IC0tc3ltYm9saWMtZnVsbC1uYW1lIFwKKwktLWRlZmF1bHQgSEVBRCAiJEAiID4gIiR0ZW1wZGlyIi9yYXctaGVhZHMgfHwgZXhpdAorc2VkIC1lICcvXl4vZCcgIiR0ZW1wZGlyIi9yYXctaGVhZHMgPiIkdGVtcGRpciIvaGVhZHMKKwordGVzdCAtcyAiJHRlbXBkaXIiL2hlYWRzIHx8CisJZGllICJXaGljaCByZWYgZG8geW91IHdhbnQgdG8gcmV3cml0ZT8iCisKK0dJVF9JTkRFWF9GSUxFPSIkKHB3ZCkvLi4vaW5kZXgiCitleHBvcnQgR0lUX0lOREVYX0ZJTEUKKworIyBtYXAgb2xkLT5uZXcgY29tbWl0IGlkcyBmb3IgcmV3cml0aW5nIHBhcmVudHMKK21rZGlyIC4uL21hcCB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgbWFwLyBkaXJlY3RvcnkiCisKKyMgd2UgbmVlZCAiLS0iIG9ubHkgaWYgdGhlcmUgYXJlIG5vIHBhdGggYXJndW1lbnRzIGluICRACitub25yZXZzPSQoZ2l0IHJldi1wYXJzZSAtLW5vLXJldnMgIiRAIikgfHwgZXhpdAoraWYgdGVzdCAteiAiJG5vbnJldnMiCit0aGVuCisJZGFzaGRhc2g9LS0KK2Vsc2UKKwlkYXNoZGFzaD0KKwlyZW1hcF90b19hbmNlc3Rvcj10CitmaQorCitnaXQgcmV2LXBhcnNlIC0tcmV2cy1vbmx5ICIkQCIgPi4uL3BhcnNlCisKK2Nhc2UgIiRmaWx0ZXJfc3ViZGlyIiBpbgorIiIpCisJZXZhbCBzZXQgLS0gIiQoZ2l0IHJldi1wYXJzZSAtLXNxIC0tbm8tcmV2cyAiJEAiKSIKKwk7OworKikKKwlldmFsIHNldCAtLSAiJChnaXQgcmV2LXBhcnNlIC0tc3EgLS1uby1yZXZzICIkQCIgJGRhc2hkYXNoIFwKKwkJIiRmaWx0ZXJfc3ViZGlyIikiCisJOzsKK2VzYWMKKworZ2l0IHJldi1saXN0IC0tcmV2ZXJzZSAtLXRvcG8tb3JkZXIgLS1kZWZhdWx0IEhFQUQgXAorCS0tcGFyZW50cyAtLXNpbXBsaWZ5LW1lcmdlcyAtLXN0ZGluICIkQCIgPC4uL3BhcnNlID4uLi9yZXZzIHx8CisJZGllICJDb3VsZCBub3QgZ2V0IHRoZSBjb21taXRzIgorY29tbWl0cz0kKHdjIC1sIDwuLi9yZXZzIHwgdHIgLWQgIiAiKQorCit0ZXN0ICRjb21taXRzIC1lcSAwICYmIGRpZSAiRm91bmQgbm90aGluZyB0byByZXdyaXRlIgorCisjIFJld3JpdGUgdGhlIGNvbW1pdHMKK3JlcG9ydF9wcm9ncmVzcyAoKQoreworCWlmIHRlc3QgLW4gIiRwcm9ncmVzcyIgJiYKKwkJdGVzdCAkZ2l0X2ZpbHRlcl9icmFuY2hfX2NvbW1pdF9jb3VudCAtZ3QgJG5leHRfc2FtcGxlX2F0CisJdGhlbgorCQljb3VudD0kZ2l0X2ZpbHRlcl9icmFuY2hfX2NvbW1pdF9jb3VudAorCisJCW5vdz0kKGRhdGUgKyVzKQorCQllbGFwc2VkPSQoKCRub3cgLSAkc3RhcnRfdGltZXN0YW1wKSkKKwkJcmVtYWluaW5nPSQoKCAoJGNvbW1pdHMgLSAkY291bnQpICogJGVsYXBzZWQgLyAkY291bnQgKSkKKwkJaWYgdGVzdCAkZWxhcHNlZCAtZ3QgMAorCQl0aGVuCisJCQluZXh0X3NhbXBsZV9hdD0kKCggKCRlbGFwc2VkICsgMSkgKiAkY291bnQgLyAkZWxhcHNlZCApKQorCQllbHNlCisJCQluZXh0X3NhbXBsZV9hdD0kKCgkbmV4dF9zYW1wbGVfYXQgKyAxKSkKKwkJZmkKKwkJcHJvZ3Jlc3M9IiAoJGVsYXBzZWQgc2Vjb25kcyBwYXNzZWQsIHJlbWFpbmluZyAkcmVtYWluaW5nIHByZWRpY3RlZCkiCisJZmkKKwlwcmludGYgIlxyUmV3cml0ZSAkY29tbWl0ICgkY291bnQvJGNvbW1pdHMpJHByb2dyZXNzICAgICIKK30KKworZ2l0X2ZpbHRlcl9icmFuY2hfX2NvbW1pdF9jb3VudD0wCisKK3Byb2dyZXNzPSBzdGFydF90aW1lc3RhbXA9CitpZiBkYXRlICcrJXMnIDI+L2Rldi9udWxsIHwgZ3JlcCAtcSAnXlswLTldWzAtOV0qJCcKK3RoZW4KKwluZXh0X3NhbXBsZV9hdD0wCisJcHJvZ3Jlc3M9ImR1bW15IHRvIGVuc3VyZSB0aGlzIGlzIG5vdCBlbXB0eSIKKwlzdGFydF90aW1lc3RhbXA9JChkYXRlICcrJXMnKQorZmkKKword2hpbGUgcmVhZCBjb21taXQgcGFyZW50czsgZG8KKwlnaXRfZmlsdGVyX2JyYW5jaF9fY29tbWl0X2NvdW50PSQoKCRnaXRfZmlsdGVyX2JyYW5jaF9fY29tbWl0X2NvdW50KzEpKQorCisJcmVwb3J0X3Byb2dyZXNzCisKKwljYXNlICIkZmlsdGVyX3N1YmRpciIgaW4KKwkiIikKKwkJR0lUX0FMTE9XX05VTExfU0hBMT0xIGdpdCByZWFkLXRyZWUgLWkgLW0gJGNvbW1pdAorCQk7OworCSopCisJCSMgVGhlIGNvbW1pdCBtYXkgbm90IGhhdmUgdGhlIHN1YmRpcmVjdG9yeSBhdCBhbGwKKwkJZXJyPSQoR0lUX0FMTE9XX05VTExfU0hBMT0xIFwKKwkJICAgICAgZ2l0IHJlYWQtdHJlZSAtaSAtbSAkY29tbWl0OiIkZmlsdGVyX3N1YmRpciIgMj4mMSkgfHwgeworCQkJaWYgISBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICRjb21taXQ6IiRmaWx0ZXJfc3ViZGlyIgorCQkJdGhlbgorCQkJCXJtIC1mICIkR0lUX0lOREVYX0ZJTEUiCisJCQllbHNlCisJCQkJZWNobyA+JjIgIiRlcnIiCisJCQkJZmFsc2UKKwkJCWZpCisJCX0KKwllc2FjIHx8IGRpZSAiQ291bGQgbm90IGluaXRpYWxpemUgdGhlIGluZGV4IgorCisJR0lUX0NPTU1JVD0kY29tbWl0CisJZXhwb3J0IEdJVF9DT01NSVQKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICIkY29tbWl0IiA+Li4vY29tbWl0IHx8CisJCWRpZSAiQ2Fubm90IHJlYWQgY29tbWl0ICRjb21taXQiCisKKwlldmFsICIkKHNldF9pZGVudCA8Li4vY29tbWl0KSIgfHwKKwkJZGllICJzZXR0aW5nIGF1dGhvci9jb21taXR0ZXIgZmFpbGVkIGZvciBjb21taXQgJGNvbW1pdCIKKwlldmFsICIkZmlsdGVyX2VudiIgPCAvZGV2L251bGwgfHwKKwkJZGllICJlbnYgZmlsdGVyIGZhaWxlZDogJGZpbHRlcl9lbnYiCisKKwlpZiBbICIkZmlsdGVyX3RyZWUiIF07IHRoZW4KKwkJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IC1hIHx8CisJCQlkaWUgIkNvdWxkIG5vdCBjaGVja291dCB0aGUgaW5kZXgiCisJCSMgZmlsZXMgdGhhdCAkY29tbWl0IHJlbW92ZWQgYXJlIG5vdyBzdGlsbCBpbiB0aGUgd29ya2luZyB0cmVlOworCQkjIHJlbW92ZSB0aGVtLCBlbHNlIHRoZXkgd291bGQgYmUgYWRkZWQgYWdhaW4KKwkJZ2l0IGNsZWFuIC1kIC1xIC1mIC14CisJCWV2YWwgIiRmaWx0ZXJfdHJlZSIgPCAvZGV2L251bGwgfHwKKwkJCWRpZSAidHJlZSBmaWx0ZXIgZmFpbGVkOiAkZmlsdGVyX3RyZWUiCisKKwkJKAorCQkJZ2l0IGRpZmYtaW5kZXggLXIgLS1uYW1lLW9ubHkgLS1pZ25vcmUtc3VibW9kdWxlcyAkY29tbWl0ICYmCisJCQlnaXQgbHMtZmlsZXMgLS1vdGhlcnMKKwkJKSA+ICIkdGVtcGRpciIvdHJlZS1zdGF0ZSB8fCBleGl0CisJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZXBsYWNlIC0tcmVtb3ZlIC0tc3RkaW4gXAorCQkJPCAiJHRlbXBkaXIiL3RyZWUtc3RhdGUgfHwgZXhpdAorCWZpCisKKwlldmFsICIkZmlsdGVyX2luZGV4IiA8IC9kZXYvbnVsbCB8fAorCQlkaWUgImluZGV4IGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfaW5kZXgiCisKKwlwYXJlbnRzdHI9CisJZm9yIHBhcmVudCBpbiAkcGFyZW50czsgZG8KKwkJZm9yIHJlcGFyZW50IGluICQobWFwICIkcGFyZW50Iik7IGRvCisJCQljYXNlICIkcGFyZW50c3RyICIgaW4KKwkJCSoiIC1wICRyZXBhcmVudCAiKikKKwkJCQk7OworCQkJKikKKwkJCQlwYXJlbnRzdHI9IiRwYXJlbnRzdHIgLXAgJHJlcGFyZW50IgorCQkJCTs7CisJCQllc2FjCisJCWRvbmUKKwlkb25lCisJaWYgWyAiJGZpbHRlcl9wYXJlbnQiIF07IHRoZW4KKwkJcGFyZW50c3RyPSIkKGVjaG8gIiRwYXJlbnRzdHIiIHwgZXZhbCAiJGZpbHRlcl9wYXJlbnQiKSIgfHwKKwkJCQlkaWUgInBhcmVudCBmaWx0ZXIgZmFpbGVkOiAkZmlsdGVyX3BhcmVudCIKKwlmaQorCisJeworCQl3aGlsZSBJRlM9JycgcmVhZCAtciBoZWFkZXJfbGluZSAmJiB0ZXN0IC1uICIkaGVhZGVyX2xpbmUiCisJCWRvCisJCQkjIHNraXAgaGVhZGVyIGxpbmVzLi4uCisJCQk6OworCQlkb25lCisJCSMgYW5kIG91dHB1dCB0aGUgYWN0dWFsIGNvbW1pdCBtZXNzYWdlCisJCWNhdAorCX0gPC4uL2NvbW1pdCB8CisJCWV2YWwgIiRmaWx0ZXJfbXNnIiA+IC4uL21lc3NhZ2UgfHwKKwkJCWRpZSAibXNnIGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfbXNnIgorCXdvcmtkaXI9JHdvcmtkaXIgQFNIRUxMX1BBVEhAIC1jICIkZmlsdGVyX2NvbW1pdCIgImdpdCBjb21taXQtdHJlZSIgXAorCQkkKGdpdCB3cml0ZS10cmVlKSAkcGFyZW50c3RyIDwgLi4vbWVzc2FnZSA+IC4uL21hcC8kY29tbWl0IHx8CisJCQlkaWUgImNvdWxkIG5vdCB3cml0ZSByZXdyaXR0ZW4gY29tbWl0IgorZG9uZSA8Li4vcmV2cworCisjIElmIHdlIGFyZSBmaWx0ZXJpbmcgZm9yIHBhdGhzLCBhcyBpbiB0aGUgY2FzZSBvZiBhIHN1YmRpcmVjdG9yeQorIyBmaWx0ZXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBzcGVjaWZpZWQgaGVhZCBpcyBub3QgaW4gdGhlIHNldCBvZgorIyByZXdyaXR0ZW4gY29tbWl0cywgYmVjYXVzZSBpdCB3YXMgcHJ1bmVkIGJ5IHRoZSByZXZpc2lvbiB3YWxrZXIuCisjIEFuY2VzdG9yIHJlbWFwcGluZyBmaXhlcyB0aGlzIGJ5IG1hcHBpbmcgdGhlc2UgaGVhZHMgdG8gdGhlIHVuaXF1ZQorIyBuZWFyZXN0IGFuY2VzdG9yIHRoYXQgc3Vydml2ZWQgdGhlIHBydW5pbmcuCisKK2lmIHRlc3QgIiRyZW1hcF90b19hbmNlc3RvciIgPSB0Cit0aGVuCisJd2hpbGUgcmVhZCByZWYKKwlkbworCQlzaGExPSQoZ2l0IHJldi1wYXJzZSAiJHJlZiJeMCkKKwkJdGVzdCAtZiAiJHdvcmtkaXIiLy4uL21hcC8kc2hhMSAmJiBjb250aW51ZQorCQlhbmNlc3Rvcj0kKGdpdCByZXYtbGlzdCAtLXNpbXBsaWZ5LW1lcmdlcyAtMSAiJHJlZiIgIiRAIikKKwkJdGVzdCAiJGFuY2VzdG9yIiAmJiBlY2hvICQobWFwICRhbmNlc3RvcikgPj4gIiR3b3JrZGlyIi8uLi9tYXAvJHNoYTEKKwlkb25lIDwgIiR0ZW1wZGlyIi9oZWFkcworZmkKKworIyBGaW5hbGx5IHVwZGF0ZSB0aGUgcmVmcworCitfeDQwPSdbMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdJworX3g0MD0iJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCRfeDQwJF94NDAkX3g0MCIKK2VjaG8KK3doaWxlIHJlYWQgcmVmCitkbworCSMgYXZvaWQgcmV3cml0aW5nIGEgcmVmIHR3aWNlCisJdGVzdCAtZiAiJG9yaWdfbmFtZXNwYWNlJHJlZiIgJiYgY29udGludWUKKworCXNoYTE9JChnaXQgcmV2LXBhcnNlICIkcmVmIl4wKQorCXJld3JpdHRlbj0kKG1hcCAkc2hhMSkKKworCXRlc3QgJHNoYTEgPSAiJHJld3JpdHRlbiIgJiYKKwkJd2FybiAiV0FSTklORzogUmVmICckcmVmJyBpcyB1bmNoYW5nZWQiICYmCisJCWNvbnRpbnVlCisKKwljYXNlICIkcmV3cml0dGVuIiBpbgorCScnKQorCQllY2hvICJSZWYgJyRyZWYnIHdhcyBkZWxldGVkIgorCQlnaXQgdXBkYXRlLXJlZiAtbSAiZmlsdGVyLWJyYW5jaDogZGVsZXRlIiAtZCAiJHJlZiIgJHNoYTEgfHwKKwkJCWRpZSAiQ291bGQgbm90IGRlbGV0ZSAkcmVmIgorCTs7CisJJF94NDApCisJCWVjaG8gIlJlZiAnJHJlZicgd2FzIHJld3JpdHRlbiIKKwkJaWYgISBnaXQgdXBkYXRlLXJlZiAtbSAiZmlsdGVyLWJyYW5jaDogcmV3cml0ZSIgXAorCQkJCQkiJHJlZiIgJHJld3JpdHRlbiAkc2hhMSAyPi9kZXYvbnVsbDsgdGhlbgorCQkJaWYgdGVzdCAkKGdpdCBjYXQtZmlsZSAtdCAiJHJlZiIpID0gdGFnOyB0aGVuCisJCQkJaWYgdGVzdCAteiAiJGZpbHRlcl90YWdfbmFtZSI7IHRoZW4KKwkJCQkJd2FybiAiV0FSTklORzogWW91IHNhaWQgdG8gcmV3cml0ZSB0YWdnZWQgY29tbWl0cywgYnV0IG5vdCB0aGUgY29ycmVzcG9uZGluZyB0YWcuIgorCQkJCQl3YXJuICJXQVJOSU5HOiBQZXJoYXBzIHVzZSAnLS10YWctbmFtZS1maWx0ZXIgY2F0JyB0byByZXdyaXRlIHRoZSB0YWcuIgorCQkJCWZpCisJCQllbHNlCisJCQkJZGllICJDb3VsZCBub3QgcmV3cml0ZSAkcmVmIgorCQkJZmkKKwkJZmkKKwk7OworCSopCisJCSMgTkVFRFNXT1JLOiBwb3NzaWJseSBhZGQgLVdlcnJvciwgbWFraW5nIHRoaXMgYW4gZXJyb3IKKwkJd2FybiAiV0FSTklORzogJyRyZWYnIHdhcyByZXdyaXR0ZW4gaW50byBtdWx0aXBsZSBjb21taXRzOiIKKwkJd2FybiAiJHJld3JpdHRlbiIKKwkJd2FybiAiV0FSTklORzogUmVmICckcmVmJyBwb2ludHMgdG8gdGhlIGZpcnN0IG9uZSBub3cuIgorCQlyZXdyaXR0ZW49JChlY2hvICIkcmV3cml0dGVuIiB8IGhlYWQgLW4gMSkKKwkJZ2l0IHVwZGF0ZS1yZWYgLW0gImZpbHRlci1icmFuY2g6IHJld3JpdGUgdG8gZmlyc3QiIFwKKwkJCQkiJHJlZiIgJHJld3JpdHRlbiAkc2hhMSB8fAorCQkJZGllICJDb3VsZCBub3QgcmV3cml0ZSAkcmVmIgorCTs7CisJZXNhYworCWdpdCB1cGRhdGUtcmVmIC1tICJmaWx0ZXItYnJhbmNoOiBiYWNrdXAiICIkb3JpZ19uYW1lc3BhY2UkcmVmIiAkc2hhMSB8fAorCQkgZXhpdAorZG9uZSA8ICIkdGVtcGRpciIvaGVhZHMKKworIyBUT0RPOiBUaGlzIHNob3VsZCBwb3NzaWJseSBnbywgd2l0aCB0aGUgc2VtYW50aWNzIHRoYXQgYWxsIHBvc2l0aXZlIGdpdmVuCisjICAgICAgIHJlZnMgYXJlIHVwZGF0ZWQsIGFuZCB0aGVpciBvcmlnaW5hbCBoZWFkcyBzdG9yZWQgaW4gcmVmcy9vcmlnaW5hbC8KKyMgRmlsdGVyIHRhZ3MKKworaWYgWyAiJGZpbHRlcl90YWdfbmFtZSIgXTsgdGhlbgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUob2JqZWN0bmFtZSkgJShvYmplY3R0eXBlKSAlKHJlZm5hbWUpJyByZWZzL3RhZ3MgfAorCXdoaWxlIHJlYWQgc2hhMSB0eXBlIHJlZjsgZG8KKwkJcmVmPSIke3JlZiNyZWZzL3RhZ3MvfSIKKwkJIyBYWFg6IFJld3JpdGUgdGFnZ2VkIHRyZWVzIGFzIHdlbGw/CisJCWlmIFsgIiR0eXBlIiAhPSAiY29tbWl0IiAtYSAiJHR5cGUiICE9ICJ0YWciIF07IHRoZW4KKwkJCWNvbnRpbnVlOworCQlmaQorCisJCWlmIFsgIiR0eXBlIiA9ICJ0YWciIF07IHRoZW4KKwkJCSMgRGVyZWZlcmVuY2UgdG8gYSBjb21taXQKKwkJCXNoYTF0PSIkc2hhMSIKKwkJCXNoYTE9IiQoZ2l0IHJldi1wYXJzZSAtcSAiJHNoYTEiXntjb21taXR9KSIgfHwgY29udGludWUKKwkJZmkKKworCQlbIC1mICIuLi9tYXAvJHNoYTEiIF0gfHwgY29udGludWUKKwkJbmV3X3NoYTE9IiQoY2F0ICIuLi9tYXAvJHNoYTEiKSIKKwkJR0lUX0NPTU1JVD0iJHNoYTEiCisJCWV4cG9ydCBHSVRfQ09NTUlUCisJCW5ld19yZWY9IiQoZWNobyAiJHJlZiIgfCBldmFsICIkZmlsdGVyX3RhZ19uYW1lIikiIHx8CisJCQlkaWUgInRhZyBuYW1lIGZpbHRlciBmYWlsZWQ6ICRmaWx0ZXJfdGFnX25hbWUiCisKKwkJZWNobyAiJHJlZiAtPiAkbmV3X3JlZiAoJHNoYTEgLT4gJG5ld19zaGExKSIKKworCQlpZiBbICIkdHlwZSIgPSAidGFnIiBdOyB0aGVuCisJCQluZXdfc2hhMT0kKCAoIHByaW50ZiAnb2JqZWN0ICVzXG50eXBlIGNvbW1pdFxudGFnICVzXG4nIFwKKwkJCQkJCSIkbmV3X3NoYTEiICIkbmV3X3JlZiIKKwkJCQlnaXQgY2F0LWZpbGUgdGFnICIkcmVmIiB8CisJCQkJc2VkIC1uIFwKKwkJCQkgICAgLWUgJzEsL14kL3sKKwkJCQkJICAvXm9iamVjdCAvZAorCQkJCQkgIC9edHlwZSAvZAorCQkJCQkgIC9edGFnIC9kCisJCQkJCX0nIFwKKwkJCQkgICAgLWUgJy9eLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0vcScgXAorCQkJCSAgICAtZSAncCcgKSB8CisJCQkJZ2l0IG1rdGFnKSB8fAorCQkJCWRpZSAiQ291bGQgbm90IGNyZWF0ZSBuZXcgdGFnIG9iamVjdCBmb3IgJHJlZiIKKwkJCWlmIGdpdCBjYXQtZmlsZSB0YWcgIiRyZWYiIHwgXAorCQkJICAgc2FuZV9ncmVwICdeLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4vZGV2L251bGwgMj4mMQorCQkJdGhlbgorCQkJCXdhcm4gImdwZyBzaWduYXR1cmUgc3RyaXBwZWQgZnJvbSB0YWcgb2JqZWN0ICRzaGExdCIKKwkJCWZpCisJCWZpCisKKwkJZ2l0IHVwZGF0ZS1yZWYgInJlZnMvdGFncy8kbmV3X3JlZiIgIiRuZXdfc2hhMSIgfHwKKwkJCWRpZSAiQ291bGQgbm90IHdyaXRlIHRhZyAkbmV3X3JlZiIKKwlkb25lCitmaQorCitjZCAiJG9yaWdfZGlyIgorcm0gLXJmICIkdGVtcGRpciIKKwordHJhcCAtIDAKKwordW5zZXQgR0lUX0RJUiBHSVRfV09SS19UUkVFIEdJVF9JTkRFWF9GSUxFCit0ZXN0IC16ICIkT1JJR19HSVRfRElSIiB8fCB7CisJR0lUX0RJUj0iJE9SSUdfR0lUX0RJUiIgJiYgZXhwb3J0IEdJVF9ESVIKK30KK3Rlc3QgLXogIiRPUklHX0dJVF9XT1JLX1RSRUUiIHx8IHsKKwlHSVRfV09SS19UUkVFPSIkT1JJR19HSVRfV09SS19UUkVFIiAmJgorCWV4cG9ydCBHSVRfV09SS19UUkVFCit9Cit0ZXN0IC16ICIkT1JJR19HSVRfSU5ERVhfRklMRSIgfHwgeworCUdJVF9JTkRFWF9GSUxFPSIkT1JJR19HSVRfSU5ERVhfRklMRSIgJiYKKwlleHBvcnQgR0lUX0lOREVYX0ZJTEUKK30KKworaWYgWyAiJChpc19iYXJlX3JlcG9zaXRvcnkpIiA9IGZhbHNlIF07IHRoZW4KKwlnaXQgcmVhZC10cmVlIC11IC1tIEhFQUQgfHwgZXhpdAorZmkKKworZXhpdCAwCmRpZmYgLS1naXQgYS9naXQtZ3VpLy5naXRhdHRyaWJ1dGVzIGIvZ2l0LWd1aS8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QwN2MwCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxLDQgQEAKKyogICAgICAgICAgIHdoaXRlc3BhY2U9aW5kZW50LXdpdGgtbm9uLXRhYix0cmFpbGluZy1zcGFjZSxzcGFjZS1iZWZvcmUtdGFiLHRhYndpZHRoPTQKKyogICAgICAgICAgIGVuY29kaW5nPVVTLUFTQ0lJCitnaXQtZ3VpLnNoICBlbmNvZGluZz1VVEYtOAorL3BvLyoucG8gICAgZW5jb2Rpbmc9VVRGLTgKZGlmZiAtLWdpdCBhL2dpdC1ndWkvLmdpdGlnbm9yZSBiL2dpdC1ndWkvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDgzYjIxCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsOCBAQAorLkRTX1N0b3JlCitjb25maWcubWFrCitHaXQgR3VpLmFwcCoKK2dpdC1ndWkudGNsCitHSVQtVkVSU0lPTi1GSUxFCitHSVQtR1VJLVZBUlMKK2dpdC1ndWkKK2xpYi90Y2xJbmRleApkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9HSVQtVkVSU0lPTi1HRU4gYi9naXQtZ3VpL0dJVC1WRVJTSU9OLUdFTgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hODhiNjgyCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9HSVQtVkVSU0lPTi1HRU4KQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisKK0dWRj1HSVQtVkVSU0lPTi1GSUxFCitERUZfVkVSPTAuMjAuR0lUR1VJCisKK0xGPScKKycKKwordHJlZV9zZWFyY2ggKCkKK3sKKwloZWFkPSQxCisJdHJlZT0kMgorCWZvciBwIGluICQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLW1heC1jb3VudD0xICRoZWFkIDI+L2Rldi9udWxsKQorCWRvCisJCXRlc3QgJHRyZWUgPSAkKGdpdCByZXYtcGFyc2UgJHBee3RyZWV9IDI+L2Rldi9udWxsKSAmJgorCQl2bj0kKGdpdCBkZXNjcmliZSAtLWFiYnJldj00ICRwIDI+L2Rldi9udWxsKSAmJgorCQljYXNlICIkdm4iIGluCisJCWdpdGd1aS1bMC05XSopIGVjaG8gJHZuOyBicmVhazs7CisJCWVzYWMKKwlkb25lCit9CisKKyMgQWx3YXlzIHVzZSB0aGUgdGFyYmFsbCB2ZXJzaW9uIGZpbGUgaWYgZm91bmQsIGp1c3QKKyMgaW4gY2FzZSB3ZSBhcmUgc29tZWhvdyBjb250YWluZWQgaW4gYSBsYXJnZXIgZ2l0CisjIHJlcG9zaXRvcnkgdGhhdCBkb2Vzbid0IGFjdHVhbGx5IHRyYWNrIG91ciBzdGF0ZS4KKyMgKEF0IGxlYXN0IG9uZSBwYWNrYWdlIG1hbmFnZXIgaXMgZG9pbmcgdGhpcy4pCisjCisjIFdlIG1heSBiZSBhIHN1YnByb2plY3QsIHNvIHRyeSBsb29raW5nIGZvciB0aGUgbWVyZ2UKKyMgY29tbWl0IHRoYXQgc3VwcGxpZWQgdGhpcyBkaXJlY3RvcnkgY29udGVudCBpZiB3ZSBhcmUKKyMgbm90IGF0IHRoZSB0b3BsZXZlbC4gIFdlIHByb2JhYmx5IHdpbGwgYWx3YXlzIGJlIHRoZQorIyBzZWNvbmQgcGFyZW50IGluIHRoZSBjb21taXQsIGJ1dCB3ZSBzaG91bGRuJ3QgcmVseSBvbgorIyB0aGF0IGZhY3QuCisjCisjIElmIHdlIGFyZSBhdCB0aGUgdG9wbGV2ZWwgb3IgdGhlIG1lcmdlIGFzc3VtcHRpb24gZmFpbHMKKyMgdHJ5IGxvb2tpbmcgZm9yIGEgZ2l0Z3VpLSogdGFnLgorCitpZiB0ZXN0IC1mIHZlcnNpb24gJiYKKyAgIFZOPSQoY2F0IHZlcnNpb24pCit0aGVuCisJOiBoYXBweQorZWxpZiBwcmVmaXg9IiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4IDI+L2Rldi9udWxsKSIKKyAgIHRlc3QgLW4gIiRwcmVmaXgiICYmCisgICBoZWFkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCAtLSAuIDI+L2Rldi9udWxsKSAmJgorICAgdHJlZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIkhFQUQ6JHByZWZpeCIgMj4vZGV2L251bGwpICYmCisgICBWTj0kKHRyZWVfc2VhcmNoICRoZWFkICR0cmVlKQorICAgY2FzZSAiJFZOIiBpbgorICAgZ2l0Z3VpLVswLTldKikgOiBoYXBweSA7OworICAgKikgKGV4aXQgMSkgOzsKKyAgIGVzYWMKK3RoZW4KKwlWTj0kKGVjaG8gIiRWTiIgfCBzZWQgLWUgJ3MvXmdpdGd1aS0vLztzLy0vLi9nJyk7CitlbGlmIFZOPSQoZ2l0IGRlc2NyaWJlIC0tYWJicmV2PTQgSEVBRCAyPi9kZXYvbnVsbCkgJiYKKyAgIGNhc2UgIiRWTiIgaW4KKyAgIGdpdGd1aS1bMC05XSopIDogaGFwcHkgOzsKKyAgICopIChleGl0IDEpIDs7CisgICBlc2FjCit0aGVuCisJVk49JChlY2hvICIkVk4iIHwgc2VkIC1lICdzL15naXRndWktLy87cy8tLy4vZycpOworZWxzZQorCVZOPSIkREVGX1ZFUiIKK2ZpCisKK2RpcnR5PSQoc2ggLWMgJ2dpdCBkaWZmLWluZGV4IC0tbmFtZS1vbmx5IEhFQUQnIDI+L2Rldi9udWxsKSB8fCBkaXJ0eT0KK2Nhc2UgIiRkaXJ0eSIgaW4KKycnKQorCTs7CisqKQorCVZOPSIkVk4tZGlydHkiIDs7Citlc2FjCisKK2lmIHRlc3QgLXIgJEdWRgordGhlbgorCVZDPSQoc2VkIC1lICdzL15HSVRHVUlfVkVSU0lPTiA9IC8vJyA8JEdWRikKK2Vsc2UKKwlWQz11bnNldAorZmkKK3Rlc3QgIiRWTiIgPSAiJFZDIiB8fCB7CisJZWNobyA+JjIgIkdJVEdVSV9WRVJTSU9OID0gJFZOIgorCWVjaG8gIkdJVEdVSV9WRVJTSU9OID0gJFZOIiA+JEdWRgorfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9NYWtlZmlsZSBiL2dpdC1ndWkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwMGJkZAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvTWFrZWZpbGUKQEAgLTAsMCArMSwzNDUgQEAKK2FsbDo6CisKKyMgRGVmaW5lIFY9MSB0byBoYXZlIGEgbW9yZSB2ZXJib3NlIGNvbXBpbGUuCisjCisjIERlZmluZSBOT19NU0dGTVQgaWYgeW91IGRvIG5vdCBoYXZlIG1zZ2ZtdCBmcm9tIHRoZSBHTlUgZ2V0dGV4dAorIyBwYWNrYWdlIGFuZCB3YW50IHRvIHVzZSBvdXIgcm91Z2ggcHVyZSBUY2wgcG8tPm1zZyB0cmFuc2xhdG9yLgorIyBUQ0xfUEFUSCBtdXN0IGJlIHZhbGlkIGZvciB0aGlzIHRvIHdvcmsuCisjCisKK0dJVC1WRVJTSU9OLUZJTEU6IEZPUkNFCisJQCQoU0hFTExfUEFUSCkgLi9HSVQtVkVSU0lPTi1HRU4KKy1pbmNsdWRlIEdJVC1WRVJTSU9OLUZJTEUKKwordW5hbWVfUyA6PSAkKHNoZWxsIHNoIC1jICd1bmFtZSAtcyAyPi9kZXYvbnVsbCB8fCBlY2hvIG5vdCcpCit1bmFtZV9PIDo9ICQoc2hlbGwgc2ggLWMgJ3VuYW1lIC1vIDI+L2Rldi9udWxsIHx8IGVjaG8gbm90JykKK3VuYW1lX1IgOj0gJChzaGVsbCBzaCAtYyAndW5hbWUgLXIgMj4vZGV2L251bGwgfHwgZWNobyBub3QnKQorCitTQ1JJUFRfU0ggPSBnaXQtZ3VpLnNoCitHSVRHVUlfTUFJTiA6PSBnaXQtZ3VpCitHSVRHVUlfQlVJTFRfSU5TID0gZ2l0LWNpdG9vbAorQUxMX0xJQkZJTEVTID0gJCh3aWxkY2FyZCBsaWIvKi50Y2wpCitQUkVMT0FEX0ZJTEVTID0gbGliL2NsYXNzLnRjbAorTk9OVENMX0xJQkZJTEVTID0gXAorCWxpYi9naXQtZ3VpLmljbyBcCisJJCh3aWxkY2FyZCBsaWIvd2luMzJfKi5qcykgXAorI2VuZCBOT05UQ0xfTElCRklMRVMKKworaWZuZGVmIFNIRUxMX1BBVEgKKwlTSEVMTF9QQVRIID0gL2Jpbi9zaAorZW5kaWYKKworaWZuZGVmIGdpdGV4ZWNkaXIKKwlnaXRleGVjZGlyIDo9ICQoc2hlbGwgZ2l0IC0tZXhlYy1wYXRoKQorZW5kaWYKKworaWZuZGVmIHNoYXJlZGlyCitpZmVxIChnaXQtY29yZSwkKG5vdGRpciAkKGdpdGV4ZWNkaXIpKSkKKwlzaGFyZWRpciA6PSAkKGRpciAkKHBhdHN1YnN0ICUvLCUsJChkaXIgJChnaXRleGVjZGlyKSkpKXNoYXJlCitlbHNlCisJc2hhcmVkaXIgOj0gJChkaXIgJChnaXRleGVjZGlyKSlzaGFyZQorZW5kaWYKK2VuZGlmCisKK2lmbmRlZiBJTlNUQUxMCisJSU5TVEFMTCA9IGluc3RhbGwKK2VuZGlmCisKK1JNX1JGICAgICA/PSBybSAtcmYKK1JNRElSICAgICA/PSBybWRpcgorCitJTlNUQUxMX0QwID0gJChJTlNUQUxMKSAtZCAtbSA3NTUgIyBzcGFjZSBpcyByZXF1aXJlZCBoZXJlCitJTlNUQUxMX0QxID0KK0lOU1RBTExfUjAgPSAkKElOU1RBTEwpIC1tIDY0NCAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKK0lOU1RBTExfUjEgPQorSU5TVEFMTF9YMCA9ICQoSU5TVEFMTCkgLW0gNzU1ICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQorSU5TVEFMTF9YMSA9CitJTlNUQUxMX0EwID0gZmluZCAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKK0lOU1RBTExfQTEgPSB8IGNwaW8gLXB1ZAorSU5TVEFMTF9MMCA9IHJtIC1mICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQorSU5TVEFMTF9MMSA9ICYmIGxuICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQorSU5TVEFMTF9MMiA9CitJTlNUQUxMX0wzID0KKworUkVNT1ZFX0QwICA9ICQoUk1ESVIpICMgc3BhY2UgaXMgcmVxdWlyZWQgaGVyZQorUkVNT1ZFX0QxICA9IHx8IHRydWUKK1JFTU9WRV9GMCAgPSAkKFJNX1JGKSAjIHNwYWNlIGlzIHJlcXVpcmVkIGhlcmUKK1JFTU9WRV9GMSAgPQorQ0xFQU5fRFNUICA9IHRydWUKKworaWZuZGVmIFYKKwlRVUlFVCAgICAgICAgICA9IEAKKwlRVUlFVF9HRU4gICAgICA9ICQoUVVJRVQpZWNobyAnICAgJyBHRU4gJyRAJyAmJgorCVFVSUVUX0lOREVYICAgID0gJChRVUlFVCllY2hvICcgICAnIElOREVYICQoZGlyICRAKSAmJgorCVFVSUVUX01TR0ZNVDAgID0gJChRVUlFVClwcmludGYgJyAgICBNU0dGTVQgJTEycyAnICRAICYmIHY9YAorCVFVSUVUX01TR0ZNVDEgID0gMj4mMWAgJiYgZWNobyAiJCR2IiB8IHNlZCAtZSAncy9mdXp6eSB0cmFuc2xhdGlvbnMvZnV6enkvJyB8IHNlZCAtZSAncy8gbWVzc2FnZXMqLy9nJworCVFVSUVUXzJERVZOVUxMID0gMj4vZGV2L251bGwKKworCUlOU1RBTExfRDAgPSBkaXI9CisJSU5TVEFMTF9EMSA9ICYmIGVjaG8gJyAnIERFU1QgJCRkaXIgJiYgJChJTlNUQUxMKSAtZCAtbSA3NTUgIiQkZGlyIgorCUlOU1RBTExfUjAgPSBzcmM9CisJSU5TVEFMTF9SMSA9ICYmIGVjaG8gJyAgICcgSU5TVEFMTCA2NDQgYGJhc2VuYW1lICQkc3JjYCAmJiAkKElOU1RBTEwpIC1tIDY0NCAkJHNyYworCUlOU1RBTExfWDAgPSBzcmM9CisJSU5TVEFMTF9YMSA9ICYmIGVjaG8gJyAgICcgSU5TVEFMTCA3NTUgYGJhc2VuYW1lICQkc3JjYCAmJiAkKElOU1RBTEwpIC1tIDc1NSAkJHNyYworCUlOU1RBTExfQTAgPSBzcmM9CisJSU5TVEFMTF9BMSA9ICYmIGVjaG8gJyAgICcgSU5TVEFMTCAnICAgJyBgYmFzZW5hbWUgIiQkc3JjImAgJiYgZmluZCAiJCRzcmMiIHwgY3BpbyAtcHVkCisKKwlJTlNUQUxMX0wwID0gZHN0PQorCUlOU1RBTExfTDEgPSAmJiBzcmM9CisJSU5TVEFMTF9MMiA9ICYmIGRzdD0KKwlJTlNUQUxMX0wzID0gJiYgZWNobyAnICAgJyAnTElOSyAgICAgICAnIGBiYXNlbmFtZSAiJCRkc3QiYCAnLT4nIGBiYXNlbmFtZSAiJCRzcmMiYCAmJiBybSAtZiAiJCRkc3QiICYmIGxuICIkJHNyYyIgIiQkZHN0IgorCisJQ0xFQU5fRFNUID0gZWNobyAnICcgVU5JTlNUQUxMCisJUkVNT1ZFX0QwID0gZGlyPQorCVJFTU9WRV9EMSA9ICYmIGVjaG8gJyAnIFJFTU9WRSAkJGRpciAmJiB0ZXN0IC1kICIkJGRpciIgJiYgJChSTURJUikgIiQkZGlyIiB8fCB0cnVlCisJUkVNT1ZFX0YwID0gZHN0PQorCVJFTU9WRV9GMSA9ICYmIGVjaG8gJyAgICcgUkVNT1ZFIGBiYXNlbmFtZSAiJCRkc3QiYCAmJiAkKFJNX1JGKSAiJCRkc3QiCitlbmRpZgorCitUQ0xUS19QQVRIID89IHdpc2gKK2lmZXEgKC4vLCQoZGlyICQoVENMVEtfUEFUSCkpKQorCVRDTF9QQVRIID89ICQoc3Vic3Qgd2lzaCx0Y2xzaCwkKFRDTFRLX1BBVEgpKQorZWxzZQorCVRDTF9QQVRIID89ICQoZGlyICQoVENMVEtfUEFUSCkpJChub3RkaXIgJChzdWJzdCB3aXNoLHRjbHNoLCQoVENMVEtfUEFUSCkpKQorZW5kaWYKKworaWZlcSAoJCh1bmFtZV9TKSxEYXJ3aW4pCisJVEtGUkFNRVdPUksgPSAvTGlicmFyeS9GcmFtZXdvcmtzL1RrLmZyYW1ld29yay9SZXNvdXJjZXMvV2lzaC5hcHAKKwlpZmVxICgkKHNoZWxsIGVjaG8gIiQodW5hbWVfUikiIHwgYXdrIC1GLiAne2lmICgkJDEgPj0gOSkgcHJpbnQgInkifScpXyQoc2hlbGwgdGVzdCAtZCAkKFRLRlJBTUVXT1JLKSB8fCBlY2hvIG4pLHlfbikKKwkJVEtGUkFNRVdPUksgPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Uay5mcmFtZXdvcmsvUmVzb3VyY2VzL1dpc2guYXBwCisJCWlmZXEgKCQoc2hlbGwgdGVzdCAtZCAkKFRLRlJBTUVXT1JLKSB8fCBlY2hvIG4pLG4pCisJCQlUS0ZSQU1FV09SSyA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL1RrLmZyYW1ld29yay9SZXNvdXJjZXMvV2lzaFwgU2hlbGwuYXBwCisJCWVuZGlmCisJZW5kaWYKKwlUS0VYRUNVVEFCTEUgPSAkKHNoZWxsIGJhc2VuYW1lICIkKFRLRlJBTUVXT1JLKSIgLmFwcCkKK2VuZGlmCisKK2lmZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUykscykscykKK1FVSUVUX0dFTiA9CitlbmRpZgorCistaW5jbHVkZSBjb25maWcubWFrCisKK0RFU1RESVJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKERFU1RESVIpKQorZ2l0ZXhlY2Rpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0ZXhlY2RpcikpCitTSEVMTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChTSEVMTF9QQVRIKSkKK1RDTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xfUEFUSCkpCitUQ0xUS19QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChUQ0xUS19QQVRIKSkKK1RDTFRLX1BBVEhfU0VEID0gJChzdWJzdCAnLCdcJycsJChzdWJzdCBcLFxcLCQoVENMVEtfUEFUSCkpKQorCitnZ19saWJkaXIgPz0gJChzaGFyZWRpcikvZ2l0LWd1aS9saWIKK2xpYmRpcl9TUSAgPSAkKHN1YnN0ICcsJ1wnJywkKGdnX2xpYmRpcikpCitsaWJkaXJfU0VEID0gJChzdWJzdCAnLCdcJycsJChzdWJzdCBcLFxcLCQoZ2dfbGliZGlyX3NlZF9pbikpKQorZXhlZGlyICAgICA9ICQoZGlyICQoZ2l0ZXhlY2Rpcikpc2hhcmUvZ2l0LWd1aS9saWIKKworR0lUR1VJX1NDUklQVCAgIDo9ICQkMAorR0lUR1VJX1JFTEFUSVZFIDo9CitHSVRHVUlfTUFDT1NYQVBQIDo9CisKK2lmZXEgKCQodW5hbWVfTyksQ3lnd2luKQorCUdJVEdVSV9TQ1JJUFQgOj0gYGN5Z3BhdGggLS13aW5kb3dzIC0tYWJzb2x1dGUgIiQoR0lUR1VJX1NDUklQVCkiYAorCisJIyBJcyB0aGlzIGEgQ3lnd2luIFRjbC9UayBiaW5hcnk/ICBJZiBzbyBpdCBrbm93cyBob3cgdG8gZG8KKwkjIFBPU0lYIHBhdGggdHJhbnNsYXRpb24ganVzdCBsaWtlIGN5Z3BhdGggZG9lcyBhbmQgd2UgbXVzdAorCSMga2VlcCBsaWJkaXIgaW4gUE9TSVggZm9ybWF0IHNvIEN5Z3dpbiBwYWNrYWdlcyBvZiBnaXQtZ3VpCisJIyB3b3JrIG5vIG1hdHRlciB3aGVyZSB0aGUgdXNlciBpbnN0YWxscyB0aGVtLgorCSMKKwlpZmVxICgkKHNoZWxsIGVjaG8gJ3B1dHMgW2ZpbGUgbm9ybWFsaXplIC9dJyB8ICckKFRDTF9QQVRIX1NRKScpLCQoc2hlbGwgY3lncGF0aCAtLW1peGVkIC0tYWJzb2x1dGUgLykpCisJCWdnX2xpYmRpcl9zZWRfaW4gOj0gJChnZ19saWJkaXIpCisJZWxzZQorCQlnZ19saWJkaXJfc2VkX2luIDo9ICQoc2hlbGwgY3lncGF0aCAtLXdpbmRvd3MgLS1hYnNvbHV0ZSAiJChnZ19saWJkaXIpIikKKwllbmRpZgorZWxzZQorCWlmZXEgKCQoZXhlZGlyKSwkKGdnX2xpYmRpcikpCisJCUdJVEdVSV9SRUxBVElWRSA6PSAxCisJZW5kaWYKKwlnZ19saWJkaXJfc2VkX2luIDo9ICQoZ2dfbGliZGlyKQorZW5kaWYKK2lmZXEgKCQodW5hbWVfUyksRGFyd2luKQorCWlmZXEgKCQoc2hlbGwgdGVzdCAtZCAkKFRLRlJBTUVXT1JLKSAmJiBlY2hvIHkpLHkpCisJCUdJVEdVSV9NQUNPU1hBUFAgOj0gWWVzUGxlYXNlCisJZW5kaWYKK2VuZGlmCitpZm5lcSAoLCQoZmluZHN0cmluZyBNSU5HVywkKHVuYW1lX1MpKSkKKwlOT19NU0dGTVQ9MQorCUdJVEdVSV9XSU5ET1dTX1dSQVBQRVIgOj0gWWVzUGxlYXNlCisJR0lUR1VJX1JFTEFUSVZFIDo9IDEKK2VuZGlmCisKK2lmZGVmIEdJVEdVSV9NQUNPU1hBUFAKK0dJVEdVSV9NQUlOIDo9IGdpdC1ndWkudGNsCisKK2dpdC1ndWk6IEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTCisJJChRVUlFVF9HRU4pcm0gLWYgJEAgJEArICYmIFwKKwllY2hvICcjISQoU0hFTExfUEFUSF9TUSknID4kQCsgJiYgXAorCWVjaG8gJ2lmIHRlc3QgInokJCoiID0genZlcnNpb24gfHwnID4+JEArICYmIFwKKwllY2hvICcgICB0ZXN0ICJ6JCQqIiA9IHotLXZlcnNpb24nID4+JEArICYmIFwKKwllY2hvIHRoZW4gPj4kQCsgJiYgXAorCWVjaG8gJwknZWNobyBcJ2dpdC1ndWkgdmVyc2lvbiAnJChHSVRHVUlfVkVSU0lPTiknXCcgPj4kQCsgJiYgXAorCWVjaG8gZWxzZSA+PiRAKyAmJiBcCisJZWNobyAnCWxpYmRpcj0iJCR7R0lUX0dVSV9MSUJfRElSOi0kKGxpYmRpcl9TUSl9IicgPj4kQCsgJiYgXAorCWVjaG8gJwknZXhlYyBcIickJGxpYmRpci9HaXQgR3VpLmFwcC9Db250ZW50cy9NYWNPUy8kKHN1YnN0IFwsLCQoVEtFWEVDVVRBQkxFKSknXCIgXAorCQknIiQkMCIgIiQkQCInID4+JEArICYmIFwKKwllY2hvIGZpID4+JEArICYmIFwKKwljaG1vZCAreCAkQCsgJiYgXAorCW12ICRAKyAkQAorCitHaXRcIEd1aS5hcHA6IEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTIFwKKwkJbWFjb3N4L0luZm8ucGxpc3QgXAorCQltYWNvc3gvZ2l0LWd1aS5pY25zIFwKKwkJbWFjb3N4L0FwcE1haW4udGNsIFwKKwkJJChUS0ZSQU1FV09SSykvQ29udGVudHMvTWFjT1MvJChUS0VYRUNVVEFCTEUpCisJJChRVUlFVF9HRU4pcm0gLXJmICckQCcgJyRAJysgJiYgXAorCW1rZGlyIC1wICckQCcrL0NvbnRlbnRzL01hY09TICYmIFwKKwlta2RpciAtcCAnJEAnKy9Db250ZW50cy9SZXNvdXJjZXMvU2NyaXB0cyAmJiBcCisJY3AgJyQoc3Vic3QgJywnXCcnLCQoc3Vic3QgXCwsJChUS0ZSQU1FV09SSykvQ29udGVudHMvTWFjT1MvJChUS0VYRUNVVEFCTEUpKSknIFwKKwkJJyRAJysvQ29udGVudHMvTWFjT1MgJiYgXAorCWNwIG1hY29zeC9naXQtZ3VpLmljbnMgJyRAJysvQ29udGVudHMvUmVzb3VyY2VzICYmIFwKKwlzZWQgLWUgJ3MvQEBHSVRHVUlfVkVSU0lPTkBALyQoR0lUR1VJX1ZFUlNJT04pL2cnIFwKKwkJLWUgJ3MvQEBHSVRHVUlfVEtFWEVDVVRBQkxFQEAvJChUS0VYRUNVVEFCTEUpL2cnIFwKKwkJbWFjb3N4L0luZm8ucGxpc3QgXAorCQk+JyRAJysvQ29udGVudHMvSW5mby5wbGlzdCAmJiBcCisJc2VkIC1lICdzfEBAZ2l0ZXhlY2RpckBAfCQoZ2l0ZXhlY2Rpcl9TUSl8JyBcCisJCS1lICdzfEBAR0lUR1VJX0xJQkRJUkBAfCQobGliZGlyX1NFRCl8JyBcCisJCW1hY29zeC9BcHBNYWluLnRjbCBcCisJCT4nJEAnKy9Db250ZW50cy9SZXNvdXJjZXMvU2NyaXB0cy9BcHBNYWluLnRjbCAmJiBcCisJbXYgJyRAJysgJyRAJworZW5kaWYKKworaWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgorR0lUR1VJX01BSU4gOj0gZ2l0LWd1aS50Y2wKKworZ2l0LWd1aTogd2luZG93cy9naXQtZ3VpLnNoCisJY3AgJDwgJEAKK2VuZGlmCisKKyQoR0lUR1VJX01BSU4pOiBnaXQtZ3VpLnNoIEdJVC1WRVJTSU9OLUZJTEUgR0lULUdVSS1WQVJTCisJJChRVUlFVF9HRU4pcm0gLWYgJEAgJEArICYmIFwKKwlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAorCQktZSAnc3xAQFNIRUxMX1BBVEhAQHwkKFNIRUxMX1BBVEhfU1EpfCcgXAorCQktZSAnMSwzMHN8XiBhcmd2MD0kJDB8IGFyZ3YwPSQoR0lUR1VJX1NDUklQVCl8JyBcCisJCS1lICcxLDMwc3xeIGV4ZWMgd2lzaCB8IGV4ZWMgJ1wnJyQoVENMVEtfUEFUSF9TRUQpJ1wnJyB8JyBcCisJCS1lICdzL0BAR0lUR1VJX1ZFUlNJT05AQC8kKEdJVEdVSV9WRVJTSU9OKS9nJyBcCisJCS1lICdzfEBAR0lUR1VJX1JFTEFUSVZFQEB8JChHSVRHVUlfUkVMQVRJVkUpfCcgXAorCQktZSAnJChHSVRHVUlfUkVMQVRJVkUpc3xAQEdJVEdVSV9MSUJESVJAQHwkKGxpYmRpcl9TRUQpfCcgXAorCQlnaXQtZ3VpLnNoID4kQCsgJiYgXAorCWNobW9kICt4ICRAKyAmJiBcCisJbXYgJEArICRACisKK1hHRVRURVhUICAgPz0geGdldHRleHQKK2lmZGVmIE5PX01TR0ZNVAorCU1TR0ZNVCA/PSAkKFRDTF9QQVRIKSBwby9wbzJtc2cuc2gKK2Vsc2UKKwlNU0dGTVQgPz0gbXNnZm10CisJaWZuZXEgKCQoc2hlbGwgJChNU0dGTVQpIC0tdGNsIC1sIEMgLWQgLiAvZGV2L251bGwgMj4vZGV2L251bGw7IGVjaG8gJCQ/KSwwKQorCQlNU0dGTVQgOj0gJChUQ0xfUEFUSCkgcG8vcG8ybXNnLnNoCisJZW5kaWYKK2VuZGlmCisKK21zZ3NkaXIgICAgID0gJChnZ19saWJkaXIpL21zZ3MKK21zZ3NkaXJfU1EgID0gJChzdWJzdCAnLCdcJycsJChtc2dzZGlyKSkKK1BPX1RFTVBMQVRFID0gcG8vZ2l0LWd1aS5wb3QKK0FMTF9QT0ZJTEVTID0gJCh3aWxkY2FyZCBwby8qLnBvKQorQUxMX01TR0ZJTEVTID0gJChzdWJzdCAucG8sLm1zZywkKEFMTF9QT0ZJTEVTKSkKKworJChQT19URU1QTEFURSk6ICQoU0NSSVBUX1NIKSAkKEFMTF9MSUJGSUxFUykKKwkkKFhHRVRURVhUKSAta21jIC1MVGNsIC1vICRAICQoU0NSSVBUX1NIKSAkKEFMTF9MSUJGSUxFUykKK3VwZGF0ZS1wbzo6ICQoUE9fVEVNUExBVEUpCisJJChmb3JlYWNoIHAsICQoQUxMX1BPRklMRVMpLCBlY2hvIFVwZGF0aW5nICRwIDsgbXNnbWVyZ2UgLVUgJHAgJChQT19URU1QTEFURSkgOyApCiskKEFMTF9NU0dGSUxFUyk6ICUubXNnIDogJS5wbworCSQoUVVJRVRfTVNHRk1UMCkkKE1TR0ZNVCkgLS1zdGF0aXN0aWNzIC0tdGNsIC1sICQoYmFzZW5hbWUgJChub3RkaXIgJDwpKSAtZCAkKGRpciAkQCkgJDwgJChRVUlFVF9NU0dGTVQxKQorCitsaWIvdGNsSW5kZXg6ICQoQUxMX0xJQkZJTEVTKSBHSVQtR1VJLVZBUlMKKwkkKFFVSUVUX0lOREVYKWlmIGVjaG8gXAorCSAgJChmb3JlYWNoIHAsJChQUkVMT0FEX0ZJTEVTKSxzb3VyY2UgJHBcOykgXAorCSAgYXV0b19ta2luZGV4IGxpYiAnKi50Y2wnIFwKKwl8ICQoVENMX1BBVEgpICQoUVVJRVRfMkRFVk5VTEwpOyB0aGVuIDogb2s7IFwKKwllbHNlIFwKKwkgZWNobyA+JjIgIiAgICAqICQoVENMX1BBVEgpIGZhaWxlZDsgdXNpbmcgdW5vcHRpbWl6ZWQgbG9hZGluZyI7IFwKKwkgcm0gLWYgJEAgOyBcCisJIGVjaG8gJyMgQXV0b2dlbmVyYXRlZCBieSBnaXQtZ3VpIE1ha2VmaWxlJyA+JEAgJiYgXAorCSBlY2hvID4+JEAgJiYgXAorCSAkKGZvcmVhY2ggcCwkKFBSRUxPQURfRklMRVMpICQoQUxMX0xJQkZJTEVTKSxlY2hvICckKHN1YnN0IGxpYi8sLCRwKScgPj4kQCAmJikgXAorCSBlY2hvID4+JEAgOyBcCisJZmkKKworVFJBQ0tfVkFSUyA9IFwKKwkkKHN1YnN0ICcsJ1wnJyxTSEVMTF9QQVRIPSckKFNIRUxMX1BBVEhfU1EpJykgXAorCSQoc3Vic3QgJywnXCcnLFRDTF9QQVRIPSckKFRDTF9QQVRIX1NRKScpIFwKKwkkKHN1YnN0ICcsJ1wnJyxUQ0xUS19QQVRIPSckKFRDTFRLX1BBVEhfU1EpJykgXAorCSQoc3Vic3QgJywnXCcnLGdpdGV4ZWNkaXI9JyQoZ2l0ZXhlY2Rpcl9TUSknKSBcCisJJChzdWJzdCAnLCdcJycsZ2dfbGliZGlyPSckKGxpYmRpcl9TUSknKSBcCisJR0lUR1VJX01BQ09TWEFQUD0kKEdJVEdVSV9NQUNPU1hBUFApIFwKKyNlbmQgVFJBQ0tfVkFSUworCitHSVQtR1VJLVZBUlM6IEZPUkNFCisJQFZBUlM9JyQoVFJBQ0tfVkFSUyknOyBcCisJaWYgdGVzdCB4IiQkVkFSUyIgIT0geCJgY2F0ICRAIDI+L2Rldi9udWxsYCIgOyB0aGVuIFwKKwkJZWNobyA+JjIgIiAgICAqIG5ldyBsb2NhdGlvbnMgb3IgVGNsL1RrIGludGVycHJldGVyIjsgXAorCQllY2hvID4kQCAiJCRWQVJTIjsgXAorCWZpCisKK2lmZGVmIEdJVEdVSV9NQUNPU1hBUFAKK2FsbDo6IGdpdC1ndWkgR2l0XCBHdWkuYXBwCitlbmRpZgoraWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgorYWxsOjogZ2l0LWd1aQorZW5kaWYKK2FsbDo6ICQoR0lUR1VJX01BSU4pIGxpYi90Y2xJbmRleCAkKEFMTF9NU0dGSUxFUykKKworaW5zdGFsbDogYWxsCisJJChRVUlFVCkkKElOU1RBTExfRDApJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJyAkKElOU1RBTExfRDEpCisJJChRVUlFVCkkKElOU1RBTExfWDApZ2l0LWd1aSAkKElOU1RBTExfWDEpICckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScKKwkkKFFVSUVUKSQoSU5TVEFMTF9YMClnaXQtZ3VpLS1hc2twYXNzICQoSU5TVEFMTF9YMSkgJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpJworCSQoUVVJRVQpJChmb3JlYWNoIHAsJChHSVRHVUlfQlVJTFRfSU5TKSwgJChJTlNUQUxMX0wwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKS8kcCcgJChJTlNUQUxMX0wxKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKS9naXQtZ3VpJyAkKElOU1RBTExfTDIpJyQoREVTVERJUl9TUSkkKGdpdGV4ZWNkaXJfU1EpLyRwJyAkKElOU1RBTExfTDMpICYmKSB0cnVlCitpZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCisJJChRVUlFVCkkKElOU1RBTExfUjApZ2l0LWd1aS50Y2wgJChJTlNUQUxMX1IxKSAnJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknCitlbmRpZgorCSQoUVVJRVQpJChJTlNUQUxMX0QwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJyAkKElOU1RBTExfRDEpCisJJChRVUlFVCkkKElOU1RBTExfUjApbGliL3RjbEluZGV4ICQoSU5TVEFMTF9SMSkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknCitpZmRlZiBHSVRHVUlfTUFDT1NYQVBQCisJJChRVUlFVCkkKElOU1RBTExfQTApJ0dpdCBHdWkuYXBwJyAkKElOU1RBTExfQTEpICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJworCSQoUVVJRVQpJChJTlNUQUxMX1gwKWdpdC1ndWkudGNsICQoSU5TVEFMTF9YMSkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknCitlbmRpZgorCSQoUVVJRVQpJChmb3JlYWNoIHAsJChBTExfTElCRklMRVMpICQoTk9OVENMX0xJQkZJTEVTKSwgJChJTlNUQUxMX1IwKSRwICQoSU5TVEFMTF9SMSkgJyQoREVTVERJUl9TUSkkKGxpYmRpcl9TUSknICYmKSB0cnVlCisJJChRVUlFVCkkKElOU1RBTExfRDApJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAkKElOU1RBTExfRDEpCisJJChRVUlFVCkkKGZvcmVhY2ggcCwkKEFMTF9NU0dGSUxFUyksICQoSU5TVEFMTF9SMCkkcCAkKElOU1RBTExfUjEpICckKERFU1RESVJfU1EpJChtc2dzZGlyX1NRKScgJiYpIHRydWUKKwordW5pbnN0YWxsOgorCSQoUVVJRVQpJChDTEVBTl9EU1QpICckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScKKwkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvZ2l0LWd1aSAkKFJFTU9WRV9GMSkKKwkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvZ2l0LWd1aS0tYXNrcGFzcyAkKFJFTU9WRV9GMSkKKwkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoR0lUR1VJX0JVSUxUX0lOUyksICQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChnaXRleGVjZGlyX1NRKScvJHAgJChSRU1PVkVfRjEpICYmKSB0cnVlCitpZmRlZiBHSVRHVUlfV0lORE9XU19XUkFQUEVSCisJJChRVUlFVCkkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknL2dpdC1ndWkudGNsICQoUkVNT1ZFX0YxKQorZW5kaWYKKwkkKFFVSUVUKSQoQ0xFQU5fRFNUKSAnJChERVNURElSX1NRKSQobGliZGlyX1NRKScKKwkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJy90Y2xJbmRleCAkKFJFTU9WRV9GMSkKK2lmZGVmIEdJVEdVSV9NQUNPU1hBUFAKKwkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpL0dpdCBHdWkuYXBwJyAkKFJFTU9WRV9GMSkKKwkkKFFVSUVUKSQoUkVNT1ZFX0YwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJy9naXQtZ3VpLnRjbCAkKFJFTU9WRV9GMSkKK2VuZGlmCisJJChRVUlFVCkkKGZvcmVhY2ggcCwkKEFMTF9MSUJGSUxFUykgJChOT05UQ0xfTElCRklMRVMpLCAkKFJFTU9WRV9GMCknJChERVNURElSX1NRKSQobGliZGlyX1NRKScvJChub3RkaXIgJHApICQoUkVNT1ZFX0YxKSAmJikgdHJ1ZQorCSQoUVVJRVQpJChDTEVBTl9EU1QpICckKERFU1RESVJfU1EpJChtc2dzZGlyX1NRKScKKwkkKFFVSUVUKSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChSRU1PVkVfRjApJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJy8kKG5vdGRpciAkcCkgJChSRU1PVkVfRjEpICYmKSB0cnVlCisJJChRVUlFVCkkKFJFTU9WRV9EMCknJChERVNURElSX1NRKSQoZ2l0ZXhlY2Rpcl9TUSknICQoUkVNT1ZFX0QxKQorCSQoUVVJRVQpJChSRU1PVkVfRDApJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAkKFJFTU9WRV9EMSkKKwkkKFFVSUVUKSQoUkVNT1ZFX0QwKSckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJyAkKFJFTU9WRV9EMSkKKwkkKFFVSUVUKSQoUkVNT1ZFX0QwKWBkaXJuYW1lICckKERFU1RESVJfU1EpJChsaWJkaXJfU1EpJ2AgJChSRU1PVkVfRDEpCisKK2Rpc3QtdmVyc2lvbjoKKwlAbWtkaXIgLXAgJChUQVJESVIpCisJQGVjaG8gJChHSVRHVUlfVkVSU0lPTikgPiAkKFRBUkRJUikvdmVyc2lvbgorCitjbGVhbjo6CisJJChSTV9SRikgJChHSVRHVUlfTUFJTikgbGliL3RjbEluZGV4IHBvLyoubXNnCisJJChSTV9SRikgR0lULVZFUlNJT04tRklMRSBHSVQtR1VJLVZBUlMKK2lmZGVmIEdJVEdVSV9NQUNPU1hBUFAKKwkkKFJNX1JGKSAnR2l0IEd1aS5hcHAnKiBnaXQtZ3VpCitlbmRpZgoraWZkZWYgR0lUR1VJX1dJTkRPV1NfV1JBUFBFUgorCSQoUk1fUkYpIGdpdC1ndWkKK2VuZGlmCisKKy5QSE9OWTogYWxsIGluc3RhbGwgdW5pbnN0YWxsIGRpc3QtdmVyc2lvbiBjbGVhbgorLlBIT05ZOiBGT1JDRQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9naXQtZ3VpLS1hc2twYXNzIGIvZ2l0LWd1aS9naXQtZ3VpLS1hc2twYXNzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQyNzdmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2dpdC1ndWktLWFza3Bhc3MKQEAgLTAsMCArMSw2NiBAQAorIyEvYmluL3NoCisjIFRjbCBpZ25vcmVzIHRoZSBuZXh0IGxpbmUgLSotIHRjbCAtKi0gXAorZXhlYyB3aXNoICIkMCIgLS0gIiRAIgorCisjIFRoaXMgaXMgYSB0cml2aWFsIGltcGxlbWVudGF0aW9uIG9mIGFuIFNTSF9BU0tQQVNTIGhhbmRsZXIuCisjIEdpdC1ndWkgdXNlcyB0aGlzIHNjcmlwdCBpZiBub25lIGFyZSBhbHJlYWR5IGNvbmZpZ3VyZWQuCisKK3BhY2thZ2UgcmVxdWlyZSBUaworCitzZXQgYW5zd2VyIHt9CitzZXQgeWVzbm8gIDAKK3NldCByYyAgICAgMjU1CisKK2lmIHskYXJnYyA8IDF9IHsKKwlzZXQgcHJvbXB0ICJFbnRlciB5b3VyIE9wZW5TU0ggcGFzc3BocmFzZToiCit9IGVsc2UgeworCXNldCBwcm9tcHQgW2pvaW4gJGFyZ3YgIiAiXQorCWlmIHtbcmVnZXhwIC1ub2Nhc2Uge1woeWVzXC9ub1wpXD9ccyokfSAkcHJvbXB0XX0geworCQlzZXQgeWVzbm8gMQorCX0KK30KKworbWVzc2FnZSAubSAtdGV4dCAkcHJvbXB0IC1qdXN0aWZ5IGNlbnRlciAtYXNwZWN0IDQwMDAKK3BhY2sgLm0gLXNpZGUgdG9wIC1maWxsIHggLXBhZHggMjAgLXBhZHkgMjAgLWV4cGFuZCAxCisKK2VudHJ5IC5lIC10ZXh0dmFyaWFibGUgYW5zd2VyIC13aWR0aCA1MAorcGFjayAuZSAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeCAxMCAtcGFkeSAxMAorCitpZiB7ISR5ZXNub30geworCS5lIGNvbmZpZ3VyZSAtc2hvdyAiKiIKK30KKworZnJhbWUgLmIKK2J1dHRvbiAuYi5vayAgICAgLXRleHQgT0sgICAgIC1jb21tYW5kIGZpbmlzaAorYnV0dG9uIC5iLmNhbmNlbCAtdGV4dCBDYW5jZWwgLWNvbW1hbmQgY2FuY2VsCisKK3BhY2sgLmIub2sgLXNpZGUgbGVmdCAtZXhwYW5kIDEKK3BhY2sgLmIuY2FuY2VsIC1zaWRlIHJpZ2h0IC1leHBhbmQgMQorcGFjayAuYiAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeCAxMCAtcGFkeSAxMAorCitiaW5kIC4gPFZpc2liaWxpdHk+IHtmb2N1cyAtZm9yY2UgLmV9CitiaW5kIC4gPEtleS1SZXR1cm4+IFtsaXN0IC5iLm9rIGludm9rZV0KK2JpbmQgLiA8S2V5LUVzY2FwZT4gW2xpc3QgLmIuY2FuY2VsIGludm9rZV0KK2JpbmQgLiA8RGVzdHJveT4gICAge3NldCByYyAkcmN9CisKK3Byb2MgY2FuY2VsIHt9IHsKKwlzZXQgOjpyYyAyNTUKK30KKworcHJvYyBmaW5pc2gge30geworCWlmIHskOjp5ZXNub30geworCQlpZiB7JDo6YW5zd2VyIG5lICJ5ZXMiICYmICQ6OmFuc3dlciBuZSAibm8ifSB7CisJCQl0a19tZXNzYWdlQm94IC1pY29uIGVycm9yIC10aXRsZSAiRXJyb3IiIC10eXBlIG9rIFwKKwkJCQktbWVzc2FnZSAiT25seSAneWVzJyBvciAnbm8nIGlucHV0IGFsbG93ZWQuIgorCQkJcmV0dXJuCisJCX0KKwl9CisKKwlwdXRzICQ6OmFuc3dlcgorCXNldCA6OnJjIDAKK30KKword20gdGl0bGUgLiAiT3BlblNTSCIKK3RrOjpQbGFjZVdpbmRvdyAuCit2d2FpdCByYworZXhpdCAkcmMKZGlmZiAtLWdpdCBhL2dpdC1ndWkvZ2l0LWd1aS5zaCBiL2dpdC1ndWkvZ2l0LWd1aS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMTA0OGM3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9naXQtZ3VpLnNoCkBAIC0wLDAgKzEsNDAyMSBAQAorIyEvYmluL3NoCisjIFRjbCBpZ25vcmVzIHRoZSBuZXh0IGxpbmUgLSotIHRjbCAtKi0gXAorIGlmIHRlc3QgInokKiIgPSB6dmVyc2lvbiBcCisgfHwgdGVzdCAieiQqIiA9IHotLXZlcnNpb247IFwKKyB0aGVuIFwKKwllY2hvICdnaXQtZ3VpIHZlcnNpb24gQEBHSVRHVUlfVkVSU0lPTkBAJzsgXAorCWV4aXQ7IFwKKyBmaTsgXAorIGFyZ3YwPSQwOyBcCisgZXhlYyB3aXNoICIkYXJndjAiIC0tICIkQCIKKworc2V0IGFwcHZlcnMge0BAR0lUR1VJX1ZFUlNJT05AQH0KK3NldCBjb3B5cmlnaHQgW3N0cmluZyBtYXAgW2xpc3QgKGMpIFx1MDBhOV0geworQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgU2hhd24gUGVhcmNlLCBldC4gYWwuCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CitpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyhhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQX1dCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyBUY2wvVGsgc2FuaXR5IGNoZWNrCisKK2lmIHtbY2F0Y2gge3BhY2thZ2UgcmVxdWlyZSBUY2wgOC40fSBlcnJdCisgfHwgW2NhdGNoIHtwYWNrYWdlIHJlcXVpcmUgVGsgIDguNH0gZXJyXQorfSB7CisJY2F0Y2gge3dtIHdpdGhkcmF3IC59CisJdGtfbWVzc2FnZUJveCBcCisJCS1pY29uIGVycm9yIFwKKwkJLXR5cGUgb2sgXAorCQktdGl0bGUgImdpdC1ndWk6IGZhdGFsIGVycm9yIiBcCisJCS1tZXNzYWdlICRlcnIKKwlleGl0IDEKK30KKworY2F0Y2gge3JlbmFtZSBzZW5kIHt9fSA7ICMgV2hhdCBhbiBldmlsIGNvbmNlcHQuLi4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMjIGxvY2F0ZSBvdXIgbGlicmFyeQorCitpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihHSVRfR1VJX0xJQl9ESVIpIF0gfSB7CisJc2V0IG9ndWlsaWIgJDo6ZW52KEdJVF9HVUlfTElCX0RJUikKK30gZWxzZSB7CisJc2V0IG9ndWlsaWIge0BAR0lUR1VJX0xJQkRJUkBAfQorfQorc2V0IG9ndWlyZWwge0BAR0lUR1VJX1JFTEFUSVZFQEB9CitpZiB7JG9ndWlyZWwgZXEgezF9fSB7CisJc2V0IG9ndWlsaWIgW2ZpbGUgZGlybmFtZSBbZmlsZSBub3JtYWxpemUgJGFyZ3YwXV0KKwlpZiB7W2ZpbGUgdGFpbCAkb2d1aWxpYl0gZXEge2dpdC1jb3JlfX0geworCQlzZXQgb2d1aWxpYiBbZmlsZSBkaXJuYW1lICRvZ3VpbGliXQorCX0KKwlzZXQgb2d1aWxpYiBbZmlsZSBkaXJuYW1lICRvZ3VpbGliXQorCXNldCBvZ3VpbGliIFtmaWxlIGpvaW4gJG9ndWlsaWIgc2hhcmUgZ2l0LWd1aSBsaWJdCisJc2V0IG9ndWltc2cgW2ZpbGUgam9pbiAkb2d1aWxpYiBtc2dzXQorfSBlbHNlaWYge1tzdHJpbmcgbWF0Y2ggQEAqICRvZ3VpcmVsXX0geworCXNldCBvZ3VpbGliIFtmaWxlIGpvaW4gW2ZpbGUgZGlybmFtZSBbZmlsZSBub3JtYWxpemUgJGFyZ3YwXV0gbGliXQorCXNldCBvZ3VpbXNnIFtmaWxlIGpvaW4gW2ZpbGUgZGlybmFtZSBbZmlsZSBub3JtYWxpemUgJGFyZ3YwXV0gcG9dCit9IGVsc2UgeworCXNldCBvZ3VpbXNnIFtmaWxlIGpvaW4gJG9ndWlsaWIgbXNnc10KK30KK3Vuc2V0IG9ndWlyZWwKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMjIGVuYWJsZSB2ZXJib3NlIGxvYWRpbmc/CisKK2lmIHshW2NhdGNoIHtzZXQgX3ZlcmJvc2UgJGVudihHSVRHVUlfVkVSQk9TRSl9XX0geworCXVuc2V0IF92ZXJib3NlCisJcmVuYW1lIGF1dG9fbG9hZCByZWFsX19hdXRvX2xvYWQKKwlwcm9jIGF1dG9fbG9hZCB7bmFtZSBhcmdzfSB7CisJCXB1dHMgc3RkZXJyICJhdXRvX2xvYWQgJG5hbWUiCisJCXJldHVybiBbdXBsZXZlbCAxIHJlYWxfX2F1dG9fbG9hZCAkbmFtZSAkYXJnc10KKwl9CisJcmVuYW1lIHNvdXJjZSByZWFsX19zb3VyY2UKKwlwcm9jIHNvdXJjZSB7YXJnc30geworCQlwdXRzIHN0ZGVyciAic291cmNlICAgICRhcmdzIgorCQl1cGxldmVsIDEgW2xpbnNlcnQgJGFyZ3MgMCByZWFsX19zb3VyY2VdCisJfQorCWlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAid2luMzIifSB7IGNvbnNvbGUgc2hvdyB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyBJbnRlcm5hdGlvbmFsaXphdGlvbiAoaTE4bikgdGhyb3VnaCBtc2djYXQgYW5kIGdldHRleHQuIFNlZQorIyMgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2dldHRleHQvbWFudWFsL2h0bWxfbm9kZS9UY2wuaHRtbAorCitwYWNrYWdlIHJlcXVpcmUgbXNnY2F0CisKKyMgQ2hlY2sgZm9yIFdpbmRvd3MgNyBNVUkgbGFuZ3VhZ2UgcGFjayAobWlzc2VkIGJ5IG1zZ2NhdCA8IDEuNC40KQoraWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJ3aW4zMiIKKwkmJiBbcGFja2FnZSB2Y29tcGFyZSBbcGFja2FnZSBwcm92aWRlIG1zZ2NhdF0gMS40LjRdIDwgMAorfSB0aGVuIHsKKwlwcm9jIF9tY191cGRhdGVfbG9jYWxlIHt9IHsKKwkJc2V0IGtleSB7SEtFWV9DVVJSRU5UX1VTRVJcQ29udHJvbCBQYW5lbFxEZXNrdG9wfQorCQlpZiB7IVtjYXRjaCB7CisJCQlwYWNrYWdlIHJlcXVpcmUgcmVnaXN0cnkKKwkJCXNldCB1aWxvY2FsZSBbcmVnaXN0cnkgZ2V0ICRrZXkgIlByZWZlcnJlZFVJTGFuZ3VhZ2VzIl0KKwkJCW1zZ2NhdDo6Q29udmVydExvY2FsZSBbc3RyaW5nIG1hcCB7LSBffSBbbGluZGV4ICR1aWxvY2FsZSAwXV0KKwkJfSB1aWxvY2FsZV19IHsKKwkJCWlmIHtbc3RyaW5nIGxlbmd0aCAkdWlsb2NhbGVdID4gMH0geworCQkJCW1zZ2NhdDo6bWNsb2NhbGUgJHVpbG9jYWxlCisJCQl9CisJCX0KKwl9CisJX21jX3VwZGF0ZV9sb2NhbGUKK30KKworcHJvYyBfbWNfdHJpbSB7Zm10fSB7CisJc2V0IGNtayBbc3RyaW5nIGZpcnN0IEBAICRmbXRdCisJaWYgeyRjbWsgPiAwfSB7CisJCXJldHVybiBbc3RyaW5nIHJhbmdlICRmbXQgMCBbZXhwciB7JGNtayAtIDF9XV0KKwl9CisJcmV0dXJuICRmbXQKK30KKworcHJvYyBtYyB7ZW5fZm10IGFyZ3N9IHsKKwlzZXQgZm10IFtfbWNfdHJpbSBbOjptc2djYXQ6Om1jICRlbl9mbXRdXQorCWlmIHtbY2F0Y2gge3NldCBtc2cgW2V2YWwgW2xpc3QgZm9ybWF0ICRmbXRdICRhcmdzXX0gZXJyXX0geworCQlzZXQgbXNnIFtldmFsIFtsaXN0IGZvcm1hdCBbX21jX3RyaW0gJGVuX2ZtdF1dICRhcmdzXQorCX0KKwlyZXR1cm4gJG1zZworfQorCitwcm9jIHN0cmNhdCB7YXJnc30geworCXJldHVybiBbam9pbiAkYXJncyB7fV0KK30KKworOjptc2djYXQ6Om1jbG9hZCAkb2d1aW1zZwordW5zZXQgb2d1aW1zZworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgT24gTWFjLCBicmluZyB0aGUgY3VycmVudCBXaXNoIHByb2Nlc3Mgd2luZG93IHRvIGZyb250CisKK2lmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAiYXF1YSJ9IHsKKwljYXRjaCB7CisJCWV4ZWMgb3Nhc2NyaXB0IC1lIFtmb3JtYXQgeworCQkJdGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIKKwkJCQlzZXQgZnJvbnRtb3N0IG9mIHByb2Nlc3NlcyB3aG9zZSB1bml4IGlkIGlzICVkIHRvIHRydWUKKwkJCWVuZCB0ZWxsCisJCX0gW3BpZF1dCisJfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgcmVhZCBvbmx5IGdsb2JhbHMKKworc2V0IF9hcHBuYW1lIHtHaXQgR3VpfQorc2V0IF9naXRkaXIge30KK3NldCBfZ2l0d29ya3RyZWUge30KK3NldCBfaXNiYXJlIHt9CitzZXQgX2dpdGV4ZWMge30KK3NldCBfZ2l0aHRtbGRpciB7fQorc2V0IF9yZXBvbmFtZSB7fQorc2V0IF9pc2N5Z3dpbiB7fQorc2V0IF9zZWFyY2hfcGF0aCB7fQorc2V0IF9zaGVsbHBhdGgge0BAU0hFTExfUEFUSEBAfQorCitzZXQgX3RyYWNlIFtsc2VhcmNoIC1leGFjdCAkYXJndiAtLXRyYWNlXQoraWYgeyRfdHJhY2UgPj0gMH0geworCXNldCBhcmd2IFtscmVwbGFjZSAkYXJndiAkX3RyYWNlICRfdHJhY2VdCisJc2V0IF90cmFjZSAxCisJaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJ3aW4zMiJ9IHsgY29uc29sZSBzaG93IH0KK30gZWxzZSB7CisJc2V0IF90cmFjZSAwCit9CisKKyMgdmFyaWFibGUgZm9yIHRoZSBsYXN0IG1lcmdlZCBicmFuY2ggKHVzZWZ1bCBmb3IgYSBkZWZhdWx0IHdoZW4gZGVsZXRpbmcKKyMgYnJhbmNoZXMpLgorc2V0IF9sYXN0X21lcmdlZF9icmFuY2gge30KKworcHJvYyBzaGVsbHBhdGgge30geworCWdsb2JhbCBfc2hlbGxwYXRoIGVudgorCWlmIHtbc3RyaW5nIG1hdGNoIEBAKiAkX3NoZWxscGF0aF19IHsKKwkJaWYge1tpbmZvIGV4aXN0cyBlbnYoU0hFTEwpXX0geworCQkJcmV0dXJuICRlbnYoU0hFTEwpCisJCX0gZWxzZSB7CisJCQlyZXR1cm4gL2Jpbi9zaAorCQl9CisJfQorCXJldHVybiAkX3NoZWxscGF0aAorfQorCitwcm9jIGFwcG5hbWUge30geworCWdsb2JhbCBfYXBwbmFtZQorCXJldHVybiAkX2FwcG5hbWUKK30KKworcHJvYyBnaXRkaXIge2FyZ3N9IHsKKwlnbG9iYWwgX2dpdGRpcgorCWlmIHskYXJncyBlcSB7fX0geworCQlyZXR1cm4gJF9naXRkaXIKKwl9CisJcmV0dXJuIFtldmFsIFtsaXN0IGZpbGUgam9pbiAkX2dpdGRpcl0gJGFyZ3NdCit9CisKK3Byb2MgZ2l0ZXhlYyB7YXJnc30geworCWdsb2JhbCBfZ2l0ZXhlYworCWlmIHskX2dpdGV4ZWMgZXEge319IHsKKwkJaWYge1tjYXRjaCB7c2V0IF9naXRleGVjIFtnaXQgLS1leGVjLXBhdGhdfSBlcnJdfSB7CisJCQllcnJvciAiR2l0IG5vdCBpbnN0YWxsZWQ/XG5cbiRlcnIiCisJCX0KKwkJaWYge1tpc19DeWd3aW5dfSB7CisJCQlzZXQgX2dpdGV4ZWMgW2V4ZWMgY3lncGF0aCBcCisJCQkJLS13aW5kb3dzIFwKKwkJCQktLWFic29sdXRlIFwKKwkJCQkkX2dpdGV4ZWNdCisJCX0gZWxzZSB7CisJCQlzZXQgX2dpdGV4ZWMgW2ZpbGUgbm9ybWFsaXplICRfZ2l0ZXhlY10KKwkJfQorCX0KKwlpZiB7JGFyZ3MgZXEge319IHsKKwkJcmV0dXJuICRfZ2l0ZXhlYworCX0KKwlyZXR1cm4gW2V2YWwgW2xpc3QgZmlsZSBqb2luICRfZ2l0ZXhlY10gJGFyZ3NdCit9CisKK3Byb2MgZ2l0aHRtbGRpciB7YXJnc30geworCWdsb2JhbCBfZ2l0aHRtbGRpcgorCWlmIHskX2dpdGh0bWxkaXIgZXEge319IHsKKwkJaWYge1tjYXRjaCB7c2V0IF9naXRodG1sZGlyIFtnaXQgLS1odG1sLXBhdGhdfV19IHsKKwkJCSMgR2l0IG5vdCBpbnN0YWxsZWQgb3Igb3B0aW9uIG5vdCB5ZXQgc3VwcG9ydGVkCisJCQlyZXR1cm4ge30KKwkJfQorCQlpZiB7W2lzX0N5Z3dpbl19IHsKKwkJCXNldCBfZ2l0aHRtbGRpciBbZXhlYyBjeWdwYXRoIFwKKwkJCQktLXdpbmRvd3MgXAorCQkJCS0tYWJzb2x1dGUgXAorCQkJCSRfZ2l0aHRtbGRpcl0KKwkJfSBlbHNlIHsKKwkJCXNldCBfZ2l0aHRtbGRpciBbZmlsZSBub3JtYWxpemUgJF9naXRodG1sZGlyXQorCQl9CisJfQorCWlmIHskYXJncyBlcSB7fX0geworCQlyZXR1cm4gJF9naXRodG1sZGlyCisJfQorCXJldHVybiBbZXZhbCBbbGlzdCBmaWxlIGpvaW4gJF9naXRodG1sZGlyXSAkYXJnc10KK30KKworcHJvYyByZXBvbmFtZSB7fSB7CisJcmV0dXJuICQ6Ol9yZXBvbmFtZQorfQorCitwcm9jIGlzX01hY09TWCB7fSB7CisJaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxIHthcXVhfX0geworCQlyZXR1cm4gMQorCX0KKwlyZXR1cm4gMAorfQorCitwcm9jIGlzX1dpbmRvd3Mge30geworCWlmIHskOjp0Y2xfcGxhdGZvcm0ocGxhdGZvcm0pIGVxIHt3aW5kb3dzfX0geworCQlyZXR1cm4gMQorCX0KKwlyZXR1cm4gMAorfQorCitwcm9jIGlzX0N5Z3dpbiB7fSB7CisJZ2xvYmFsIF9pc2N5Z3dpbgorCWlmIHskX2lzY3lnd2luIGVxIHt9fSB7CisJCWlmIHskOjp0Y2xfcGxhdGZvcm0ocGxhdGZvcm0pIGVxIHt3aW5kb3dzfX0geworCQkJaWYge1tjYXRjaCB7c2V0IHAgW2V4ZWMgY3lncGF0aCAtLXdpbmRpcl19IGVycl19IHsKKwkJCQlzZXQgX2lzY3lnd2luIDAKKwkJCX0gZWxzZSB7CisJCQkJc2V0IF9pc2N5Z3dpbiAxCisJCQl9CisJCX0gZWxzZSB7CisJCQlzZXQgX2lzY3lnd2luIDAKKwkJfQorCX0KKwlyZXR1cm4gJF9pc2N5Z3dpbgorfQorCitwcm9jIGlzX2VuYWJsZWQge29wdGlvbn0geworCWdsb2JhbCBlbmFibGVkX29wdGlvbnMKKwlpZiB7W2NhdGNoIHtzZXQgb24gJGVuYWJsZWRfb3B0aW9ucygkb3B0aW9uKX1dfSB7cmV0dXJuIDB9CisJcmV0dXJuICRvbgorfQorCitwcm9jIGVuYWJsZV9vcHRpb24ge29wdGlvbn0geworCWdsb2JhbCBlbmFibGVkX29wdGlvbnMKKwlzZXQgZW5hYmxlZF9vcHRpb25zKCRvcHRpb24pIDEKK30KKworcHJvYyBkaXNhYmxlX29wdGlvbiB7b3B0aW9ufSB7CisJZ2xvYmFsIGVuYWJsZWRfb3B0aW9ucworCXNldCBlbmFibGVkX29wdGlvbnMoJG9wdGlvbikgMAorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgY29uZmlnCisKK3Byb2MgaXNfbWFueV9jb25maWcge25hbWV9IHsKKwlzd2l0Y2ggLWdsb2IgLS0gJG5hbWUgeworCWd1aS5yZWNlbnRyZXBvIC0KKwlyZW1vdGUuKi5mZXRjaCAtCisJcmVtb3RlLioucHVzaAorCQl7cmV0dXJuIDF9CisJKgorCQl7cmV0dXJuIDB9CisJfQorfQorCitwcm9jIGlzX2NvbmZpZ190cnVlIHtuYW1lfSB7CisJZ2xvYmFsIHJlcG9fY29uZmlnCisJaWYge1tjYXRjaCB7c2V0IHYgJHJlcG9fY29uZmlnKCRuYW1lKX1dfSB7CisJCXJldHVybiAwCisJfQorCXNldCB2IFtzdHJpbmcgdG9sb3dlciAkdl0KKwlpZiB7JHYgZXEge30gfHwgJHYgZXEge3RydWV9IHx8ICR2IGVxIHsxfSB8fCAkdiBlcSB7eWVzfSB8fCAkdiBlcSB7b259fSB7CisJCXJldHVybiAxCisJfSBlbHNlIHsKKwkJcmV0dXJuIDAKKwl9Cit9CisKK3Byb2MgaXNfY29uZmlnX2ZhbHNlIHtuYW1lfSB7CisJZ2xvYmFsIHJlcG9fY29uZmlnCisJaWYge1tjYXRjaCB7c2V0IHYgJHJlcG9fY29uZmlnKCRuYW1lKX1dfSB7CisJCXJldHVybiAwCisJfQorCXNldCB2IFtzdHJpbmcgdG9sb3dlciAkdl0KKwlpZiB7JHYgZXEge2ZhbHNlfSB8fCAkdiBlcSB7MH0gfHwgJHYgZXEge25vfSB8fCAkdiBlcSB7b2ZmfX0geworCQlyZXR1cm4gMQorCX0gZWxzZSB7CisJCXJldHVybiAwCisJfQorfQorCitwcm9jIGdldF9jb25maWcge25hbWV9IHsKKwlnbG9iYWwgcmVwb19jb25maWcKKwlpZiB7W2NhdGNoIHtzZXQgdiAkcmVwb19jb25maWcoJG5hbWUpfV19IHsKKwkJcmV0dXJuIHt9CisJfSBlbHNlIHsKKwkJcmV0dXJuICR2CisJfQorfQorCitwcm9jIGlzX2JhcmUge30geworCWdsb2JhbCBfaXNiYXJlCisJZ2xvYmFsIF9naXRkaXIKKwlnbG9iYWwgX2dpdHdvcmt0cmVlCisKKwlpZiB7JF9pc2JhcmUgZXEge319IHsKKwkJaWYge1tjYXRjaCB7CisJCQlzZXQgX2JhcmUgW2dpdCByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnldCisJCQlzd2l0Y2ggIC0tICRfYmFyZSB7CisJCQl0cnVlIHsgc2V0IF9pc2JhcmUgMSB9CisJCQlmYWxzZSB7IHNldCBfaXNiYXJlIDB9CisJCQlkZWZhdWx0IHsgdGhyb3cgfQorCQkJfQorCQl9XX0geworCQkJaWYge1tpc19jb25maWdfdHJ1ZSBjb3JlLmJhcmVdCisJCQkJfHwgKCRfZ2l0d29ya3RyZWUgZXEge30KKwkJCQkJJiYgW2xpbmRleCBbZmlsZSBzcGxpdCAkX2dpdGRpcl0gZW5kXSBuZSB7LmdpdH0pfSB7CisJCQkJc2V0IF9pc2JhcmUgMQorCQkJfSBlbHNlIHsKKwkJCQlzZXQgX2lzYmFyZSAwCisJCQl9CisJCX0KKwl9CisJcmV0dXJuICRfaXNiYXJlCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyBoYW5keSB1dGlscworCitwcm9jIF90cmFjZV9leGVjIHtjbWR9IHsKKwlpZiB7ISQ6Ol90cmFjZX0gcmV0dXJuCisJc2V0IGQge30KKwlmb3JlYWNoIHYgJGNtZCB7CisJCWlmIHskZCBuZSB7fX0geworCQkJYXBwZW5kIGQgeyB9CisJCX0KKwkJaWYge1tyZWdleHAge1sgXHRcclxuJyIkPypdfSAkdl19IHsKKwkJCXNldCB2IFtzcSAkdl0KKwkJfQorCQlhcHBlbmQgZCAkdgorCX0KKwlwdXRzIHN0ZGVyciAkZAorfQorCisjJyIgIGZpeCBwb29yIG9sZCBlbWFjcyBmb250LWxvY2sgbW9kZQorCitwcm9jIF9naXRfY21kIHtuYW1lfSB7CisJZ2xvYmFsIF9naXRfY21kX3BhdGgKKworCWlmIHtbY2F0Y2gge3NldCB2ICRfZ2l0X2NtZF9wYXRoKCRuYW1lKX1dfSB7CisJCXN3aXRjaCAtLSAkbmFtZSB7CisJCSAgdmVyc2lvbiAgIC0KKwkJLS12ZXJzaW9uICAgLQorCQktLWV4ZWMtcGF0aCB7IHJldHVybiBbbGlzdCAkOjpfZ2l0ICRuYW1lXSB9CisJCX0KKworCQlzZXQgcCBbZ2l0ZXhlYyBnaXQtJG5hbWUkOjpfc2VhcmNoX2V4ZV0KKwkJaWYge1tmaWxlIGV4aXN0cyAkcF19IHsKKwkJCXNldCB2IFtsaXN0ICRwXQorCQl9IGVsc2VpZiB7W2lzX1dpbmRvd3NdICYmIFtmaWxlIGV4aXN0cyBbZ2l0ZXhlYyBnaXQtJG5hbWVdXX0geworCQkJIyBUcnkgdG8gZGV0ZXJtaW5lIHdoYXQgc29ydCBvZiBtYWdpYyB3aWxsIG1ha2UKKwkJCSMgZ2l0LSRuYW1lIGdvIGFuZCBkbyBpdHMgdGhpbmcsIGJlY2F1c2UgbmF0aXZlCisJCQkjIFRjbCBvbiBXaW5kb3dzIGRvZXNuJ3Qga25vdyBpdC4KKwkJCSMKKwkJCXNldCBwIFtnaXRleGVjIGdpdC0kbmFtZV0KKwkJCXNldCBmIFtvcGVuICRwIHJdCisJCQlzZXQgcyBbZ2V0cyAkZl0KKwkJCWNsb3NlICRmCisKKwkJCXN3aXRjaCAtZ2xvYiAtLSBbbGluZGV4ICRzIDBdIHsKKwkJCSMhKnNoICAgICB7IHNldCBpIHNoICAgICB9CisJCQkjISpwZXJsICAgeyBzZXQgaSBwZXJsICAgfQorCQkJIyEqcHl0aG9uIHsgc2V0IGkgcHl0aG9uIH0KKwkJCWRlZmF1bHQgICB7IGVycm9yICJnaXQtJG5hbWUgaXMgbm90IHN1cHBvcnRlZDogJHMiIH0KKwkJCX0KKworCQkJdXB2YXIgIzAgXyRpIGludGVycAorCQkJaWYgeyFbaW5mbyBleGlzdHMgaW50ZXJwXX0geworCQkJCXNldCBpbnRlcnAgW193aGljaCAkaV0KKwkJCX0KKwkJCWlmIHskaW50ZXJwIGVxIHt9fSB7CisJCQkJZXJyb3IgImdpdC0kbmFtZSByZXF1aXJlcyAkaSAobm90IGluIFBBVEgpIgorCQkJfQorCQkJc2V0IHYgW2NvbmNhdCBbbGlzdCAkaW50ZXJwXSBbbHJhbmdlICRzIDEgZW5kXSBbbGlzdCAkcF1dCisJCX0gZWxzZSB7CisJCQkjIEFzc3VtZSBpdCBpcyBidWlsdGluIHRvIGdpdCBzb21laG93IGFuZCB3ZQorCQkJIyBhcmVuJ3QgYWN0dWFsbHkgYWJsZSB0byBzZWUgYSBmaWxlIGZvciBpdC4KKwkJCSMKKwkJCXNldCB2IFtsaXN0ICQ6Ol9naXQgJG5hbWVdCisJCX0KKwkJc2V0IF9naXRfY21kX3BhdGgoJG5hbWUpICR2CisJfQorCXJldHVybiAkdgorfQorCitwcm9jIF93aGljaCB7d2hhdCBhcmdzfSB7CisJZ2xvYmFsIGVudiBfc2VhcmNoX2V4ZSBfc2VhcmNoX3BhdGgKKworCWlmIHskX3NlYXJjaF9wYXRoIGVxIHt9fSB7CisJCWlmIHtbaXNfQ3lnd2luXSAmJiBbcmVnZXhwIHteKC98XC46KX0gJGVudihQQVRIKV19IHsKKwkJCXNldCBfc2VhcmNoX3BhdGggW3NwbGl0IFtleGVjIGN5Z3BhdGggXAorCQkJCS0td2luZG93cyBcCisJCQkJLS1wYXRoIFwKKwkJCQktLWFic29sdXRlIFwKKwkJCQkkZW52KFBBVEgpXSB7O31dCisJCQlzZXQgX3NlYXJjaF9leGUgLmV4ZQorCQl9IGVsc2VpZiB7W2lzX1dpbmRvd3NdfSB7CisJCQlzZXQgZ2l0Z3VpZGlyIFtmaWxlIGRpcm5hbWUgW2luZm8gc2NyaXB0XV0KKwkJCXJlZ3N1YiAtYWxsICI7IiAkZ2l0Z3VpZGlyICJcXDsiIGdpdGd1aWRpcgorCQkJc2V0IGVudihQQVRIKSAiJGdpdGd1aWRpcjskZW52KFBBVEgpIgorCQkJc2V0IF9zZWFyY2hfcGF0aCBbc3BsaXQgJGVudihQQVRIKSB7O31dCisJCQlzZXQgX3NlYXJjaF9leGUgLmV4ZQorCQl9IGVsc2UgeworCQkJc2V0IF9zZWFyY2hfcGF0aCBbc3BsaXQgJGVudihQQVRIKSA6XQorCQkJc2V0IF9zZWFyY2hfZXhlIHt9CisJCX0KKwl9CisKKwlpZiB7W2lzX1dpbmRvd3NdICYmIFtsc2VhcmNoIC1leGFjdCAkYXJncyAtc2NyaXB0XSA+PSAwfSB7CisJCXNldCBzdWZmaXgge30KKwl9IGVsc2UgeworCQlzZXQgc3VmZml4ICRfc2VhcmNoX2V4ZQorCX0KKworCWZvcmVhY2ggcCAkX3NlYXJjaF9wYXRoIHsKKwkJc2V0IHAgW2ZpbGUgam9pbiAkcCAkd2hhdCRzdWZmaXhdCisJCWlmIHtbZmlsZSBleGlzdHMgJHBdfSB7CisJCQlyZXR1cm4gW2ZpbGUgbm9ybWFsaXplICRwXQorCQl9CisJfQorCXJldHVybiB7fQorfQorCisjIFRlc3QgYSBmaWxlIGZvciBhIGhhc2hiYW5nIHRvIGlkZW50aWZ5IGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBXaW5kb3dzLgorcHJvYyBpc19zaGVsbHNjcmlwdCB7ZmlsZW5hbWV9IHsKKwlpZiB7IVtmaWxlIGV4aXN0cyAkZmlsZW5hbWVdfSB7cmV0dXJuIDB9CisJc2V0IGYgW29wZW4gJGZpbGVuYW1lIHJdCisJZmNvbmZpZ3VyZSAkZiAtZW5jb2RpbmcgYmluYXJ5CisJc2V0IG1hZ2ljIFtyZWFkICRmIDJdCisJY2xvc2UgJGYKKwlyZXR1cm4gW2V4cHIgeyRtYWdpYyBlcSAiIyEifV0KK30KKworIyBSdW4gYSBjb21tYW5kIGNvbm5lY3RlZCB2aWEgcGlwZXMgb24gc3Rkb3V0LgorIyBUaGlzIGlzIGZvciB1c2Ugd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIGFuZCB1c2VzIHNoIC1jICIuLi4iIHRvIGFsbG93IGl0IHRvCisjIGNvbnRhaW4gYSBjb21tYW5kIHdpdGggYXJndW1lbnRzLiBPbiB3aW5kb3dzIHdlIG11c3QgY2hlY2sgZm9yIHNoZWxsCisjIHNjcmlwdHMgc3BlY2lmaWNhbGx5IG90aGVyd2lzZSBqdXN0IGNhbGwgdGhlIGZpbHRlciBjb21tYW5kLgorcHJvYyBvcGVuX2NtZF9waXBlIHtjbWQgcGF0aH0geworCWdsb2JhbCBlbnYKKwlpZiB7IVtmaWxlIGV4ZWN1dGFibGUgW3NoZWxscGF0aF1dfSB7CisJCXNldCBleGUgW2F1dG9fZXhlY29rIFtsaW5kZXggJGNtZCAwXV0KKwkJaWYge1tpc19zaGVsbHNjcmlwdCBbbGluZGV4ICRleGUgMF1dfSB7CisJCQlzZXQgcnVuIFtsaW5zZXJ0IFthdXRvX2V4ZWNvayBzaF0gZW5kIC1jICIkY21kIFwiXCQwXCIiICRwYXRoXQorCQl9IGVsc2UgeworCQkJc2V0IHJ1biBbY29uY2F0ICRleGUgW2xyYW5nZSAkY21kIDEgZW5kXSAkcGF0aF0KKwkJfQorCX0gZWxzZSB7CisJCXNldCBydW4gW2xpc3QgW3NoZWxscGF0aF0gLWMgIiRjbWQgXCJcJDBcIiIgJHBhdGhdCisJfQorCXJldHVybiBbb3BlbiB8JHJ1biByXQorfQorCitwcm9jIF9sYXBwZW5kX25pY2Uge2NtZF92YXJ9IHsKKwlnbG9iYWwgX25pY2UKKwl1cHZhciAkY21kX3ZhciBjbWQKKworCWlmIHshW2luZm8gZXhpc3RzIF9uaWNlXX0geworCQlzZXQgX25pY2UgW193aGljaCBuaWNlXQorCQlpZiB7W2NhdGNoIHtleGVjICRfbmljZSBnaXQgdmVyc2lvbn1dfSB7CisJCQlzZXQgX25pY2Uge30KKwkJfSBlbHNlaWYge1tpc19XaW5kb3dzXSAmJiBbZmlsZSBkaXJuYW1lICRfbmljZV0gbmUgW2ZpbGUgZGlybmFtZSAkOjpfZ2l0XX0geworCQkJc2V0IF9uaWNlIHt9CisJCX0KKwl9CisJaWYgeyRfbmljZSBuZSB7fX0geworCQlsYXBwZW5kIGNtZCAkX25pY2UKKwl9Cit9CisKK3Byb2MgZ2l0IHthcmdzfSB7CisJc2V0IG9wdCBbbGlzdF0KKworCXdoaWxlIHsxfSB7CisJCXN3aXRjaCAtLSBbbGluZGV4ICRhcmdzIDBdIHsKKwkJLS1uaWNlIHsKKwkJCV9sYXBwZW5kX25pY2Ugb3B0CisJCX0KKworCQlkZWZhdWx0IHsKKwkJCWJyZWFrCisJCX0KKworCQl9CisKKwkJc2V0IGFyZ3MgW2xyYW5nZSAkYXJncyAxIGVuZF0KKwl9CisKKwlzZXQgY21kcCBbX2dpdF9jbWQgW2xpbmRleCAkYXJncyAwXV0KKwlzZXQgYXJncyBbbHJhbmdlICRhcmdzIDEgZW5kXQorCisJX3RyYWNlX2V4ZWMgW2NvbmNhdCAkb3B0ICRjbWRwICRhcmdzXQorCXNldCByZXN1bHQgW2V2YWwgZXhlYyAkb3B0ICRjbWRwICRhcmdzXQorCWlmIHskOjpfdHJhY2V9IHsKKwkJcHV0cyBzdGRlcnIgIjwgJHJlc3VsdCIKKwl9CisJcmV0dXJuICRyZXN1bHQKK30KKworcHJvYyBfb3Blbl9zdGRvdXRfc3RkZXJyIHtjbWR9IHsKKwlfdHJhY2VfZXhlYyAkY21kCisJaWYge1tjYXRjaCB7CisJCQlzZXQgZmQgW29wZW4gW2NvbmNhdCBbbGlzdCB8IF0gJGNtZF0gcl0KKwkJfSBlcnJdfSB7CisJCWlmIHsgICBbbGluZGV4ICRjbWQgZW5kXSBlcSB7Mj5AMX0KKwkJICAgICYmICRlcnIgZXEge2NhbiBub3QgZmluZCBjaGFubmVsIG5hbWVkICIxIn0KKwkJCX0geworCQkJIyBPbGRlciB2ZXJzaW9ucyBvZiBUY2wgOC40IGRvbid0IGhhdmUgdGhpcyAyPkAxIElPCisJCQkjIHJlZGlyZWN0IG9wZXJhdG9yLiAgRmFsbGJhY2sgdG8gfCYgY2F0IGZvciB0aG9zZS4KKwkJCSMgVGhlIGNvbW1hbmQgd2FzIG5vdCBhY3R1YWxseSBzdGFydGVkLCBzbyBpdHMgc2FmZQorCQkJIyB0byB0cnkgdG8gc3RhcnQgaXQgYSBzZWNvbmQgdGltZS4KKwkJCSMKKwkJCXNldCBmZCBbb3BlbiBbY29uY2F0IFwKKwkJCQlbbGlzdCB8IF0gXAorCQkJCVtscmFuZ2UgJGNtZCAwIGVuZC0xXSBcCisJCQkJW2xpc3QgfCYgY2F0XSBcCisJCQkJXSByXQorCQl9IGVsc2UgeworCQkJZXJyb3IgJGVycgorCQl9CisJfQorCWZjb25maWd1cmUgJGZkIC1lb2ZjaGFyIHt9CisJcmV0dXJuICRmZAorfQorCitwcm9jIGdpdF9yZWFkIHthcmdzfSB7CisJc2V0IG9wdCBbbGlzdF0KKworCXdoaWxlIHsxfSB7CisJCXN3aXRjaCAtLSBbbGluZGV4ICRhcmdzIDBdIHsKKwkJLS1uaWNlIHsKKwkJCV9sYXBwZW5kX25pY2Ugb3B0CisJCX0KKworCQktLXN0ZGVyciB7CisJCQlsYXBwZW5kIGFyZ3MgMj5AMQorCQl9CisKKwkJZGVmYXVsdCB7CisJCQlicmVhaworCQl9CisKKwkJfQorCisJCXNldCBhcmdzIFtscmFuZ2UgJGFyZ3MgMSBlbmRdCisJfQorCisJc2V0IGNtZHAgW19naXRfY21kIFtsaW5kZXggJGFyZ3MgMF1dCisJc2V0IGFyZ3MgW2xyYW5nZSAkYXJncyAxIGVuZF0KKworCXJldHVybiBbX29wZW5fc3Rkb3V0X3N0ZGVyciBbY29uY2F0ICRvcHQgJGNtZHAgJGFyZ3NdXQorfQorCitwcm9jIGdpdF93cml0ZSB7YXJnc30geworCXNldCBvcHQgW2xpc3RdCisKKwl3aGlsZSB7MX0geworCQlzd2l0Y2ggLS0gW2xpbmRleCAkYXJncyAwXSB7CisJCS0tbmljZSB7CisJCQlfbGFwcGVuZF9uaWNlIG9wdAorCQl9CisKKwkJZGVmYXVsdCB7CisJCQlicmVhaworCQl9CisKKwkJfQorCisJCXNldCBhcmdzIFtscmFuZ2UgJGFyZ3MgMSBlbmRdCisJfQorCisJc2V0IGNtZHAgW19naXRfY21kIFtsaW5kZXggJGFyZ3MgMF1dCisJc2V0IGFyZ3MgW2xyYW5nZSAkYXJncyAxIGVuZF0KKworCV90cmFjZV9leGVjIFtjb25jYXQgJG9wdCAkY21kcCAkYXJnc10KKwlyZXR1cm4gW29wZW4gW2NvbmNhdCBbbGlzdCB8IF0gJG9wdCAkY21kcCAkYXJnc10gd10KK30KKworcHJvYyBnaXRob29rX3JlYWQge2hvb2tfbmFtZSBhcmdzfSB7CisJc2V0IHBjaG9vayBbZ2l0ZGlyIGhvb2tzICRob29rX25hbWVdCisJbGFwcGVuZCBhcmdzIDI+QDEKKworCSMgT24gV2luZG93cyBbZmlsZSBleGVjdXRhYmxlXSBtaWdodCBsaWUgc28gd2UgbmVlZCB0byBhc2sKKwkjIHRoZSBzaGVsbCBpZiB0aGUgaG9vayBpcyBleGVjdXRhYmxlLiAgWWVzIHRoYXQncyBhbm5veWluZy4KKwkjCisJaWYge1tpc19XaW5kb3dzXX0geworCQl1cHZhciAjMCBfc2ggaW50ZXJwCisJCWlmIHshW2luZm8gZXhpc3RzIGludGVycF19IHsKKwkJCXNldCBpbnRlcnAgW193aGljaCBzaF0KKwkJfQorCQlpZiB7JGludGVycCBlcSB7fX0geworCQkJZXJyb3IgImhvb2sgZXhlY3V0aW9uIHJlcXVpcmVzIHNoIChub3QgaW4gUEFUSCkiCisJCX0KKworCQlzZXQgc2NyIHtpZiB0ZXN0IC14ICIkMSI7dGhlbiBleGVjICIkQCI7Zml9CisJCXNldCBzaF9jIFtsaXN0ICRpbnRlcnAgLWMgJHNjciAkaW50ZXJwICRwY2hvb2tdCisJCXJldHVybiBbX29wZW5fc3Rkb3V0X3N0ZGVyciBbY29uY2F0ICRzaF9jICRhcmdzXV0KKwl9CisKKwlpZiB7W2ZpbGUgZXhlY3V0YWJsZSAkcGNob29rXX0geworCQlyZXR1cm4gW19vcGVuX3N0ZG91dF9zdGRlcnIgW2NvbmNhdCBbbGlzdCAkcGNob29rXSAkYXJnc11dCisJfQorCisJcmV0dXJuIHt9Cit9CisKK3Byb2Mga2lsbF9maWxlX3Byb2Nlc3Mge2ZkfSB7CisJc2V0IHByb2Nlc3MgW3BpZCAkZmRdCisKKwljYXRjaCB7CisJCWlmIHtbaXNfV2luZG93c119IHsKKwkJCWV4ZWMgdGFza2tpbGwgL3BpZCAkcHJvY2VzcworCQl9IGVsc2UgeworCQkJZXhlYyBraWxsICRwcm9jZXNzCisJCX0KKwl9Cit9CisKK3Byb2MgZ2l0YXR0ciB7cGF0aCBhdHRyIGRlZmF1bHR9IHsKKwlpZiB7W2NhdGNoIHtzZXQgciBbZ2l0IGNoZWNrLWF0dHIgJGF0dHIgLS0gJHBhdGhdfV19IHsKKwkJc2V0IHIgdW5zcGVjaWZpZWQKKwl9IGVsc2UgeworCQlzZXQgciBbam9pbiBbbHJhbmdlIFtzcGxpdCAkciA6XSAyIGVuZF0gOl0KKwkJcmVnc3ViIHteIH0gJHIge30gcgorCX0KKwlpZiB7JHIgZXEge3Vuc3BlY2lmaWVkfX0geworCQlyZXR1cm4gJGRlZmF1bHQKKwl9CisJcmV0dXJuICRyCit9CisKK3Byb2Mgc3Ege3ZhbHVlfSB7CisJcmVnc3ViIC1hbGwgJyAkdmFsdWUgIidcXCcnIiB2YWx1ZQorCXJldHVybiAiJyR2YWx1ZSciCit9CisKK3Byb2MgbG9hZF9jdXJyZW50X2JyYW5jaCB7fSB7CisJZ2xvYmFsIGN1cnJlbnRfYnJhbmNoIGlzX2RldGFjaGVkCisKKwlzZXQgZmQgW29wZW4gW2dpdGRpciBIRUFEXSByXQorCWlmIHtbZ2V0cyAkZmQgcmVmXSA8IDF9IHsKKwkJc2V0IHJlZiB7fQorCX0KKwljbG9zZSAkZmQKKworCXNldCBwZngge3JlZjogcmVmcy9oZWFkcy99CisJc2V0IGxlbiBbc3RyaW5nIGxlbmd0aCAkcGZ4XQorCWlmIHtbc3RyaW5nIGVxdWFsIC1sZW5ndGggJGxlbiAkcGZ4ICRyZWZdfSB7CisJCSMgV2UncmUgb24gYSBicmFuY2guICBJdCBtaWdodCBub3QgZXhpc3QuICBCdXQKKwkJIyBIRUFEIGxvb2tzIGdvb2QgZW5vdWdoIHRvIGJlIGEgYnJhbmNoLgorCQkjCisJCXNldCBjdXJyZW50X2JyYW5jaCBbc3RyaW5nIHJhbmdlICRyZWYgJGxlbiBlbmRdCisJCXNldCBpc19kZXRhY2hlZCAwCisJfSBlbHNlIHsKKwkJIyBBc3N1bWUgdGhpcyBpcyBhIGRldGFjaGVkIGhlYWQuCisJCSMKKwkJc2V0IGN1cnJlbnRfYnJhbmNoIEhFQUQKKwkJc2V0IGlzX2RldGFjaGVkIDEKKwl9Cit9CisKK2F1dG9fbG9hZCB0a19vcHRpb25NZW51CityZW5hbWUgdGtfb3B0aW9uTWVudSByZWFsX190a09wdGlvbk1lbnUKK3Byb2MgdGtfb3B0aW9uTWVudSB7dyB2YXJOYW1lIGFyZ3N9IHsKKwlzZXQgbSBbZXZhbCByZWFsX190a09wdGlvbk1lbnUgJHcgJHZhck5hbWUgJGFyZ3NdCisJJG0gY29uZmlndXJlIC1mb250IGZvbnRfdWkKKwkkdyBjb25maWd1cmUgLWZvbnQgZm9udF91aQorCXJldHVybiAkbQorfQorCitwcm9jIHJtc2VsX3RhZyB7dGV4dH0geworCSR0ZXh0IHRhZyBjb25mIHNlbCBcCisJCS1iYWNrZ3JvdW5kIFskdGV4dCBjZ2V0IC1iYWNrZ3JvdW5kXSBcCisJCS1mb3JlZ3JvdW5kIFskdGV4dCBjZ2V0IC1mb3JlZ3JvdW5kXSBcCisJCS1ib3JkZXJ3aWR0aCAwCisJJHRleHQgdGFnIGNvbmYgaW5fc2VsIC1iYWNrZ3JvdW5kIGxpZ2h0Z3JheQorCWJpbmQgJHRleHQgPE1vdGlvbj4gYnJlYWsKKwlyZXR1cm4gJHRleHQKK30KKword20gd2l0aGRyYXcgLgorc2V0IHJvb3RfZXhpc3RzIDAKK2JpbmQgLiA8VmlzaWJpbGl0eT4geworCWJpbmQgLiA8VmlzaWJpbGl0eT4ge30KKwlzZXQgcm9vdF9leGlzdHMgMQorfQorCitpZiB7W2lzX1dpbmRvd3NdfSB7CisJd20gaWNvbmJpdG1hcCAuIC1kZWZhdWx0ICRvZ3VpbGliL2dpdC1ndWkuaWNvCisJc2V0IDo6dGs6OkFsd2F5c1Nob3dTZWxlY3Rpb24gMQorCWJpbmQgLiA8Q29udHJvbC1GMj4ge2NvbnNvbGUgc2hvd30KKworCSMgU3Bvb2YgYW4gWDExIGRpc3BsYXkgZm9yIFNTSAorCWlmIHshW2luZm8gZXhpc3RzIGVudihESVNQTEFZKV19IHsKKwkJc2V0IGVudihESVNQTEFZKSA6OTk5OQorCX0KK30gZWxzZSB7CisJY2F0Y2ggeworCQlpbWFnZSBjcmVhdGUgcGhvdG8gZ2l0bG9nbyAtd2lkdGggMTYgLWhlaWdodCAxNgorCisJCWdpdGxvZ28gcHV0ICMzM0NDMzMgLXRvICA3ICAwICA5ICAyCisJCWdpdGxvZ28gcHV0ICMzM0NDMzMgLXRvICA0ICAyIDEyICA0CisJCWdpdGxvZ28gcHV0ICMzM0NDMzMgLXRvICA3ICA0ICA5ICA2CisJCWdpdGxvZ28gcHV0ICNDQzMzMzMgLXRvICA0ICA2IDEyICA4CisJCWdpdGxvZ28gcHV0IGdyYXkyNiAgLXRvICA0ICA5ICA2IDEwCisJCWdpdGxvZ28gcHV0IGdyYXkyNiAgLXRvICAzIDEwICA2IDEyCisJCWdpdGxvZ28gcHV0IGdyYXkyNiAgLXRvICA4ICA5IDEzIDExCisJCWdpdGxvZ28gcHV0IGdyYXkyNiAgLXRvICA4IDExIDEwIDEyCisJCWdpdGxvZ28gcHV0IGdyYXkyNiAgLXRvIDExIDExIDEzIDE0CisJCWdpdGxvZ28gcHV0IGdyYXkyNiAgLXRvICAzIDEyICA1IDE0CisJCWdpdGxvZ28gcHV0IGdyYXkyNiAgLXRvICA1IDEzCisJCWdpdGxvZ28gcHV0IGdyYXkyNiAgLXRvIDEwIDEzCisJCWdpdGxvZ28gcHV0IGdyYXkyNiAgLXRvICA0IDE0IDEyIDE1CisJCWdpdGxvZ28gcHV0IGdyYXkyNiAgLXRvICA1IDE1IDExIDE2CisJCWdpdGxvZ28gcmVkaXRoZXIKKworCQlpbWFnZSBjcmVhdGUgcGhvdG8gZ2l0bG9nbzMyIC13aWR0aCAzMiAtaGVpZ2h0IDMyCisJCWdpdGxvZ28zMiBjb3B5IGdpdGxvZ28gLXpvb20gMiAyCisKKwkJd20gaWNvbnBob3RvIC4gLWRlZmF1bHQgZ2l0bG9nbyBnaXRsb2dvMzIKKwl9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyBjb25maWcgZGVmYXVsdHMKKworc2V0IGN1cnNvcl9wdHIgYXJyb3cKK2ZvbnQgY3JlYXRlIGZvbnRfdWkKK2lmIHtbbHNlYXJjaCAtZXhhY3QgW2ZvbnQgbmFtZXNdIFRrRGVmYXVsdEZvbnRdICE9IC0xfSB7CisJZXZhbCBbbGluc2VydCBbZm9udCBhY3R1YWwgVGtEZWZhdWx0Rm9udF0gMCBmb250IGNvbmZpZ3VyZSBmb250X3VpXQorCWV2YWwgW2xpbnNlcnQgW2ZvbnQgYWN0dWFsIFRrRml4ZWRGb250XSAwIGZvbnQgY3JlYXRlIGZvbnRfZGlmZl0KK30gZWxzZSB7CisJZm9udCBjcmVhdGUgZm9udF9kaWZmIC1mYW1pbHkgQ291cmllciAtc2l6ZSAxMAorCWNhdGNoIHsKKwkJbGFiZWwgLmR1bW15CisJCWV2YWwgZm9udCBjb25maWd1cmUgZm9udF91aSBbZm9udCBhY3R1YWwgWy5kdW1teSBjZ2V0IC1mb250XV0KKwkJZGVzdHJveSAuZHVtbXkKKwl9Cit9CisKK2ZvbnQgY3JlYXRlIGZvbnRfdWlpdGFsaWMKK2ZvbnQgY3JlYXRlIGZvbnRfdWlib2xkCitmb250IGNyZWF0ZSBmb250X2RpZmZib2xkCitmb250IGNyZWF0ZSBmb250X2RpZmZpdGFsaWMKKworZm9yZWFjaCBjbGFzcyB7QnV0dG9uIENoZWNrYnV0dG9uIEVudHJ5IExhYmVsCisJCUxhYmVsZnJhbWUgTGlzdGJveCBNZXNzYWdlCisJCVJhZGlvYnV0dG9uIFNwaW5ib3ggVGV4dH0geworCW9wdGlvbiBhZGQgKiRjbGFzcy5mb250IGZvbnRfdWkKK30KK2lmIHshW2lzX01hY09TWF19IHsKKwlvcHRpb24gYWRkICpNZW51LmZvbnQgZm9udF91aQorCW9wdGlvbiBhZGQgKkVudHJ5LmJvcmRlcldpZHRoIDEgc3RhcnR1cEZpbGUKKwlvcHRpb24gYWRkICpFbnRyeS5yZWxpZWYgc3Vua2VuIHN0YXJ0dXBGaWxlCisJb3B0aW9uIGFkZCAqUmFkaW9CdXR0b24uYW5jaG9yIHcgc3RhcnR1cEZpbGUKK30KK3Vuc2V0IGNsYXNzCisKK2lmIHtbaXNfV2luZG93c10gfHwgW2lzX01hY09TWF19IHsKKwlvcHRpb24gYWRkICpNZW51LnRlYXJPZmYgMAorfQorCitpZiB7W2lzX01hY09TWF19IHsKKwlzZXQgTTFCIE0xCisJc2V0IE0xVCBDbWQKK30gZWxzZSB7CisJc2V0IE0xQiBDb250cm9sCisJc2V0IE0xVCBDdHJsCit9CisKK3Byb2MgYmluZF9idXR0b24zIHt3IGNtZH0geworCWJpbmQgJHcgPEFueS1CdXR0b24tMz4gJGNtZAorCWlmIHtbaXNfTWFjT1NYXX0geworCQkjIE1hYyBPUyBYIHNlbmRzIEJ1dHRvbi0yIG9uIHJpZ2h0IGNsaWNrIHRocm91Z2ggdGhyZWUtYnV0dG9uIG1vdXNlLAorCQkjIG9yIHRocm91Z2ggdHJhY2twYWQgcmlnaHQtY2xpY2tpbmcgKHR3by1maW5nZXIgdG91Y2ggKyBjbGljaykuCisJCWJpbmQgJHcgPEFueS1CdXR0b24tMj4gJGNtZAorCQliaW5kICR3IDxDb250cm9sLUJ1dHRvbi0xPiAkY21kCisJfQorfQorCitwcm9jIGFwcGx5X2NvbmZpZyB7fSB7CisJZ2xvYmFsIHJlcG9fY29uZmlnIGZvbnRfZGVzY3MKKworCWZvcmVhY2ggb3B0aW9uICRmb250X2Rlc2NzIHsKKwkJc2V0IG5hbWUgW2xpbmRleCAkb3B0aW9uIDBdCisJCXNldCBmb250IFtsaW5kZXggJG9wdGlvbiAxXQorCQlpZiB7W2NhdGNoIHsKKwkJCXNldCBuZWVkX3dlaWdodCAxCisJCQlmb3JlYWNoIHtjbiBjdn0gJHJlcG9fY29uZmlnKGd1aS4kbmFtZSkgeworCQkJCWlmIHskY24gZXEgey13ZWlnaHR9fSB7CisJCQkJCXNldCBuZWVkX3dlaWdodCAwCisJCQkJfQorCQkJCWZvbnQgY29uZmlndXJlICRmb250ICRjbiAkY3YKKwkJCX0KKwkJCWlmIHskbmVlZF93ZWlnaHR9IHsKKwkJCQlmb250IGNvbmZpZ3VyZSAkZm9udCAtd2VpZ2h0IG5vcm1hbAorCQkJfQorCQkJfSBlcnJdfSB7CisJCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiICJndWkuJG5hbWUiXSAiXG5cbiRlcnIiXQorCQl9CisJCWZvcmVhY2gge2NuIGN2fSBbZm9udCBjb25maWd1cmUgJGZvbnRdIHsKKwkJCWZvbnQgY29uZmlndXJlICR7Zm9udH1ib2xkICRjbiAkY3YKKwkJCWZvbnQgY29uZmlndXJlICR7Zm9udH1pdGFsaWMgJGNuICRjdgorCQl9CisJCWZvbnQgY29uZmlndXJlICR7Zm9udH1ib2xkIC13ZWlnaHQgYm9sZAorCQlmb250IGNvbmZpZ3VyZSAke2ZvbnR9aXRhbGljIC1zbGFudCBpdGFsaWMKKwl9CisKKwlnbG9iYWwgdXNlX3R0ayBOUworCXNldCB1c2VfdHRrIDAKKwlzZXQgTlMge30KKwlpZiB7JHJlcG9fY29uZmlnKGd1aS51c2V0dGspfSB7CisJCXNldCB1c2VfdHRrIFtwYWNrYWdlIHZzYXRpc2ZpZXMgW3BhY2thZ2UgcHJvdmlkZSBUa10gOC41XQorCQlpZiB7JHVzZV90dGt9IHsKKwkJCXNldCBOUyB0dGsKKwkJCWJpbmQgW3dpbmZvIGNsYXNzIC5dIDw8VGhlbWVDaGFuZ2VkPj4gW2xpc3QgSW5pdFRoZW1lXQorCQkJcGF2ZV90b3BsZXZlbCAuCisJCX0KKwl9Cit9CisKK3NldCBkZWZhdWx0X2NvbmZpZyhicmFuY2guYXV0b3NldHVwbWVyZ2UpIHRydWUKK3NldCBkZWZhdWx0X2NvbmZpZyhtZXJnZS50b29sKSB7fQorc2V0IGRlZmF1bHRfY29uZmlnKG1lcmdldG9vbC5rZWVwYmFja3VwKSB0cnVlCitzZXQgZGVmYXVsdF9jb25maWcobWVyZ2UuZGlmZnN0YXQpIHRydWUKK3NldCBkZWZhdWx0X2NvbmZpZyhtZXJnZS5zdW1tYXJ5KSBmYWxzZQorc2V0IGRlZmF1bHRfY29uZmlnKG1lcmdlLnZlcmJvc2l0eSkgMgorc2V0IGRlZmF1bHRfY29uZmlnKHVzZXIubmFtZSkge30KK3NldCBkZWZhdWx0X2NvbmZpZyh1c2VyLmVtYWlsKSB7fQorCitzZXQgZGVmYXVsdF9jb25maWcoZ3VpLmVuY29kaW5nKSBbZW5jb2Rpbmcgc3lzdGVtXQorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS5tYXRjaHRyYWNraW5nYnJhbmNoKSBmYWxzZQorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS50ZXh0Y29udikgdHJ1ZQorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS5wcnVuZWR1cmluZ2ZldGNoKSBmYWxzZQorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS50cnVzdG10aW1lKSBmYWxzZQorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS5mYXN0Y29weWJsYW1lKSBmYWxzZQorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS5tYXhyZWNlbnRyZXBvKSAxMAorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS5jb3B5YmxhbWV0aHJlc2hvbGQpIDQwCitzZXQgZGVmYXVsdF9jb25maWcoZ3VpLmJsYW1laGlzdG9yeWN0eCkgNworc2V0IGRlZmF1bHRfY29uZmlnKGd1aS5kaWZmY29udGV4dCkgNQorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS5kaWZmb3B0cykge30KK3NldCBkZWZhdWx0X2NvbmZpZyhndWkuY29tbWl0bXNnd2lkdGgpIDc1CitzZXQgZGVmYXVsdF9jb25maWcoZ3VpLm5ld2JyYW5jaHRlbXBsYXRlKSB7fQorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS5zcGVsbGluZ2RpY3Rpb25hcnkpIHt9CitzZXQgZGVmYXVsdF9jb25maWcoZ3VpLmZvbnR1aSkgW2ZvbnQgY29uZmlndXJlIGZvbnRfdWldCitzZXQgZGVmYXVsdF9jb25maWcoZ3VpLmZvbnRkaWZmKSBbZm9udCBjb25maWd1cmUgZm9udF9kaWZmXQorIyBUT0RPOiB0aGlzIG9wdGlvbiBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGdpdC1jb25maWcgZG9jdW1lbnRhdGlvbgorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS5tYXhmaWxlc2Rpc3BsYXllZCkgNTAwMAorc2V0IGRlZmF1bHRfY29uZmlnKGd1aS51c2V0dGspIDEKK3NldCBkZWZhdWx0X2NvbmZpZyhndWkud2FybmRldGFjaGVkY29tbWl0KSAxCitzZXQgZGVmYXVsdF9jb25maWcoZ3VpLnRhYnNpemUpIDgKK3NldCBmb250X2Rlc2NzIHsKKwl7Zm9udHVpICAgZm9udF91aSAgIHttYyAiTWFpbiBGb250In19CisJe2ZvbnRkaWZmIGZvbnRfZGlmZiB7bWMgIkRpZmYvQ29uc29sZSBGb250In19Cit9CitzZXQgZGVmYXVsdF9jb25maWcoZ3VpLnN0YWdldW50cmFja2VkKSBhc2sKK3NldCBkZWZhdWx0X2NvbmZpZyhndWkuZGlzcGxheXVudHJhY2tlZCkgdHJ1ZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgZmluZCBnaXQKKworc2V0IF9naXQgIFtfd2hpY2ggZ2l0XQoraWYgeyRfZ2l0IGVxIHt9fSB7CisJY2F0Y2gge3dtIHdpdGhkcmF3IC59CisJdGtfbWVzc2FnZUJveCBcCisJCS1pY29uIGVycm9yIFwKKwkJLXR5cGUgb2sgXAorCQktdGl0bGUgW21jICJnaXQtZ3VpOiBmYXRhbCBlcnJvciJdIFwKKwkJLW1lc3NhZ2UgW21jICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iXQorCWV4aXQgMQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgdmVyc2lvbiBjaGVjaworCitpZiB7W2NhdGNoIHtzZXQgX2dpdF92ZXJzaW9uIFtnaXQgLS12ZXJzaW9uXX0gZXJyXX0geworCWNhdGNoIHt3bSB3aXRoZHJhdyAufQorCXRrX21lc3NhZ2VCb3ggXAorCQktaWNvbiBlcnJvciBcCisJCS10eXBlIG9rIFwKKwkJLXRpdGxlIFttYyAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiXSBcCisJCS1tZXNzYWdlICJDYW5ub3QgZGV0ZXJtaW5lIEdpdCB2ZXJzaW9uOgorCiskZXJyCisKK1thcHBuYW1lXSByZXF1aXJlcyBHaXQgMS41LjAgb3IgbGF0ZXIuIgorCWV4aXQgMQorfQoraWYgeyFbcmVnc3ViIHteZ2l0IHZlcnNpb24gfSAkX2dpdF92ZXJzaW9uIHt9IF9naXRfdmVyc2lvbl19IHsKKwljYXRjaCB7d20gd2l0aGRyYXcgLn0KKwl0a19tZXNzYWdlQm94IFwKKwkJLWljb24gZXJyb3IgXAorCQktdHlwZSBvayBcCisJCS10aXRsZSBbbWMgImdpdC1ndWk6IGZhdGFsIGVycm9yIl0gXAorCQktbWVzc2FnZSBbc3RyY2F0IFttYyAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiXSAiXG5cbiRfZ2l0X3ZlcnNpb24iXQorCWV4aXQgMQorfQorCitwcm9jIGdldF90cmltbWVkX3ZlcnNpb24ge3N9IHsKKyAgICBzZXQgciB7fQorICAgIGZvcmVhY2ggeCBbc3BsaXQgJHMgLS5fXSB7CisgICAgICAgIGlmIHtbc3RyaW5nIGlzIGludGVnZXIgLXN0cmljdCAkeF19IHsKKyAgICAgICAgICAgIGxhcHBlbmQgciAkeAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gW2pvaW4gJHIgLl0KK30KK3NldCBfcmVhbF9naXRfdmVyc2lvbiAkX2dpdF92ZXJzaW9uCitzZXQgX2dpdF92ZXJzaW9uIFtnZXRfdHJpbW1lZF92ZXJzaW9uICRfZ2l0X3ZlcnNpb25dCisKK2lmIHshW3JlZ2V4cCB7XlsxLTldKyhcLlswLTldKykrJH0gJF9naXRfdmVyc2lvbl19IHsKKwljYXRjaCB7d20gd2l0aGRyYXcgLn0KKwlpZiB7W3RrX21lc3NhZ2VCb3ggXAorCQktaWNvbiB3YXJuaW5nIFwKKwkJLXR5cGUgeWVzbm8gXAorCQktZGVmYXVsdCBubyBcCisJCS10aXRsZSAiW2FwcG5hbWVdOiB3YXJuaW5nIiBcCisJCSAtbWVzc2FnZSBbbWMgIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLgorCislcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLgorCislcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuCisKK0Fzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/CisiICRfZ2l0ICRfcmVhbF9naXRfdmVyc2lvbiBbYXBwbmFtZV0gJF9yZWFsX2dpdF92ZXJzaW9uXV0gZXEge3llc319IHsKKwkJc2V0IF9naXRfdmVyc2lvbiAxLjUuMAorCX0gZWxzZSB7CisJCWV4aXQgMQorCX0KK30KK3Vuc2V0IF9yZWFsX2dpdF92ZXJzaW9uCisKK3Byb2MgZ2l0LXZlcnNpb24ge2FyZ3N9IHsKKwlnbG9iYWwgX2dpdF92ZXJzaW9uCisKKwlzd2l0Y2ggW2xsZW5ndGggJGFyZ3NdIHsKKwkwIHsKKwkJcmV0dXJuICRfZ2l0X3ZlcnNpb24KKwl9CisKKwkyIHsKKwkJc2V0IG9wIFtsaW5kZXggJGFyZ3MgMF0KKwkJc2V0IHZyIFtsaW5kZXggJGFyZ3MgMV0KKwkJc2V0IGNtIFtwYWNrYWdlIHZjb21wYXJlICRfZ2l0X3ZlcnNpb24gJHZyXQorCQlyZXR1cm4gW2V4cHIgJGNtICRvcCAwXQorCX0KKworCTQgeworCQlzZXQgdHlwZSBbbGluZGV4ICRhcmdzIDBdCisJCXNldCBuYW1lIFtsaW5kZXggJGFyZ3MgMV0KKwkJc2V0IHBhcm0gW2xpbmRleCAkYXJncyAyXQorCQlzZXQgYm9keSBbbGluZGV4ICRhcmdzIDNdCisKKwkJaWYgeygkdHlwZSBuZSB7cHJvY30gJiYgJHR5cGUgbmUge21ldGhvZH0pfSB7CisJCQllcnJvciAiSW52YWxpZCBhcmd1bWVudHMgdG8gZ2l0LXZlcnNpb24iCisJCX0KKwkJaWYge1tsbGVuZ3RoICRib2R5XSA8IDIgfHwgW2xpbmRleCAkYm9keSBlbmQtMV0gbmUge2RlZmF1bHR9fSB7CisJCQllcnJvciAiTGFzdCBhcm0gb2YgJHR5cGUgJG5hbWUgbXVzdCBiZSBkZWZhdWx0IgorCQl9CisKKwkJZm9yZWFjaCB7b3AgdnIgY2J9IFtscmFuZ2UgJGJvZHkgMCBlbmQtMl0geworCQkJaWYge1tnaXQtdmVyc2lvbiAkb3AgJHZyXX0geworCQkJCXJldHVybiBbdXBsZXZlbCBbbGlzdCAkdHlwZSAkbmFtZSAkcGFybSAkY2JdXQorCQkJfQorCQl9CisKKwkJcmV0dXJuIFt1cGxldmVsIFtsaXN0ICR0eXBlICRuYW1lICRwYXJtIFtsaW5kZXggJGJvZHkgZW5kXV1dCisJfQorCisJZGVmYXVsdCB7CisJCWVycm9yICJnaXQtdmVyc2lvbiA+PSB4IgorCX0KKworCX0KK30KKworaWYge1tnaXQtdmVyc2lvbiA8IDEuNV19IHsKKwljYXRjaCB7d20gd2l0aGRyYXcgLn0KKwl0a19tZXNzYWdlQm94IFwKKwkJLWljb24gZXJyb3IgXAorCQktdHlwZSBvayBcCisJCS10aXRsZSBbbWMgImdpdC1ndWk6IGZhdGFsIGVycm9yIl0gXAorCQktbWVzc2FnZSAiW2FwcG5hbWVdIHJlcXVpcmVzIEdpdCAxLjUuMCBvciBsYXRlci4KKworWW91IGFyZSB1c2luZyBbZ2l0LXZlcnNpb25dOgorCitbZ2l0IC0tdmVyc2lvbl0iCisJZXhpdCAxCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyBjb25maWd1cmUgb3VyIGxpYnJhcnkKKworc2V0IGlkeCBbZmlsZSBqb2luICRvZ3VpbGliIHRjbEluZGV4XQoraWYge1tjYXRjaCB7c2V0IGZkIFtvcGVuICRpZHggcl19IGVycl19IHsKKwljYXRjaCB7d20gd2l0aGRyYXcgLn0KKwl0a19tZXNzYWdlQm94IFwKKwkJLWljb24gZXJyb3IgXAorCQktdHlwZSBvayBcCisJCS10aXRsZSBbbWMgImdpdC1ndWk6IGZhdGFsIGVycm9yIl0gXAorCQktbWVzc2FnZSAkZXJyCisJZXhpdCAxCit9CitpZiB7W2dldHMgJGZkXSBlcSB7IyBBdXRvZ2VuZXJhdGVkIGJ5IGdpdC1ndWkgTWFrZWZpbGV9fSB7CisJc2V0IGlkeCBbbGlzdF0KKwl3aGlsZSB7W2dldHMgJGZkIG5dID49IDB9IHsKKwkJaWYgeyRuIG5lIHt9ICYmICFbc3RyaW5nIG1hdGNoICMqICRuXX0geworCQkJbGFwcGVuZCBpZHggJG4KKwkJfQorCX0KK30gZWxzZSB7CisJc2V0IGlkeCB7fQorfQorY2xvc2UgJGZkCisKK2lmIHskaWR4IG5lIHt9fSB7CisJc2V0IGxvYWRlZCBbbGlzdF0KKwlmb3JlYWNoIHAgJGlkeCB7CisJCWlmIHtbbHNlYXJjaCAtZXhhY3QgJGxvYWRlZCAkcF0gPj0gMH0gY29udGludWUKKwkJc291cmNlIFtmaWxlIGpvaW4gJG9ndWlsaWIgJHBdCisJCWxhcHBlbmQgbG9hZGVkICRwCisJfQorCXVuc2V0IGxvYWRlZCBwCit9IGVsc2UgeworCXNldCBhdXRvX3BhdGggW2NvbmNhdCBbbGlzdCAkb2d1aWxpYl0gJGF1dG9fcGF0aF0KK30KK3Vuc2V0IC1ub2NvbXBsYWluIGlkeCBmZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgY29uZmlnIGZpbGUgcGFyc2luZworCitnaXQtdmVyc2lvbiBwcm9jIF9wYXJzZV9jb25maWcge2Fycl9uYW1lIGFyZ3N9IHsKKwk+PSAxLjUuMyB7CisJCXVwdmFyICRhcnJfbmFtZSBhcnIKKwkJYXJyYXkgdW5zZXQgYXJyCisJCXNldCBidWYge30KKwkJY2F0Y2ggeworCQkJc2V0IGZkX3JjIFtldmFsIFwKKwkJCQlbbGlzdCBnaXRfcmVhZCBjb25maWddIFwKKwkJCQkkYXJncyBcCisJCQkJW2xpc3QgLS1udWxsIC0tbGlzdF1dCisJCQlmY29uZmlndXJlICRmZF9yYyAtdHJhbnNsYXRpb24gYmluYXJ5CisJCQlzZXQgYnVmIFtyZWFkICRmZF9yY10KKwkJCWNsb3NlICRmZF9yYworCQl9CisJCWZvcmVhY2ggbGluZSBbc3BsaXQgJGJ1ZiAiXDAiXSB7CisJCQlpZiB7W3JlZ2V4cCB7XihbXlxuXSspXG4oLiopJH0gJGxpbmUgbGluZSBuYW1lIHZhbHVlXX0geworCQkJCWlmIHtbaXNfbWFueV9jb25maWcgJG5hbWVdfSB7CisJCQkJCWxhcHBlbmQgYXJyKCRuYW1lKSAkdmFsdWUKKwkJCQl9IGVsc2UgeworCQkJCQlzZXQgYXJyKCRuYW1lKSAkdmFsdWUKKwkJCQl9CisJCQl9IGVsc2VpZiB7W3JlZ2V4cCB7XihbXlxuXSspJH0gJGxpbmUgbGluZSBuYW1lXX0geworCQkJCSMgbm8gdmFsdWUgZ2l2ZW4sIGJ1dCBpbnRlcnByZXRpbmcgdGhlbSBhcworCQkJCSMgYm9vbGVhbiB3aWxsIGJlIGhhbmRsZWQgYXMgdHJ1ZQorCQkJCXNldCBhcnIoJG5hbWUpIHt9CisJCQl9CisJCX0KKwl9CisJZGVmYXVsdCB7CisJCXVwdmFyICRhcnJfbmFtZSBhcnIKKwkJYXJyYXkgdW5zZXQgYXJyCisJCWNhdGNoIHsKKwkJCXNldCBmZF9yYyBbZXZhbCBbbGlzdCBnaXRfcmVhZCBjb25maWcgLS1saXN0XSAkYXJnc10KKwkJCXdoaWxlIHtbZ2V0cyAkZmRfcmMgbGluZV0gPj0gMH0geworCQkJCWlmIHtbcmVnZXhwIHteKFtePV0rKT0oLiopJH0gJGxpbmUgbGluZSBuYW1lIHZhbHVlXX0geworCQkJCQlpZiB7W2lzX21hbnlfY29uZmlnICRuYW1lXX0geworCQkJCQkJbGFwcGVuZCBhcnIoJG5hbWUpICR2YWx1ZQorCQkJCQl9IGVsc2UgeworCQkJCQkJc2V0IGFycigkbmFtZSkgJHZhbHVlCisJCQkJCX0KKwkJCQl9IGVsc2VpZiB7W3JlZ2V4cCB7XihbXj1dKykkfSAkbGluZSBsaW5lIG5hbWVdfSB7CisJCQkJCSMgbm8gdmFsdWUgZ2l2ZW4sIGJ1dCBpbnRlcnByZXRpbmcgdGhlbSBhcworCQkJCQkjIGJvb2xlYW4gd2lsbCBiZSBoYW5kbGVkIGFzIHRydWUKKwkJCQkJc2V0IGFycigkbmFtZSkge30KKwkJCQl9CisJCQl9CisJCQljbG9zZSAkZmRfcmMKKwkJfQorCX0KK30KKworcHJvYyBsb2FkX2NvbmZpZyB7aW5jbHVkZV9nbG9iYWx9IHsKKwlnbG9iYWwgcmVwb19jb25maWcgZ2xvYmFsX2NvbmZpZyBzeXN0ZW1fY29uZmlnIGRlZmF1bHRfY29uZmlnCisKKwlpZiB7JGluY2x1ZGVfZ2xvYmFsfSB7CisJCV9wYXJzZV9jb25maWcgc3lzdGVtX2NvbmZpZyAtLXN5c3RlbQorCQlfcGFyc2VfY29uZmlnIGdsb2JhbF9jb25maWcgLS1nbG9iYWwKKwl9CisJX3BhcnNlX2NvbmZpZyByZXBvX2NvbmZpZworCisJZm9yZWFjaCBuYW1lIFthcnJheSBuYW1lcyBkZWZhdWx0X2NvbmZpZ10geworCQlpZiB7W2NhdGNoIHtzZXQgdiAkc3lzdGVtX2NvbmZpZygkbmFtZSl9XX0geworCQkJc2V0IHN5c3RlbV9jb25maWcoJG5hbWUpICRkZWZhdWx0X2NvbmZpZygkbmFtZSkKKwkJfQorCX0KKwlmb3JlYWNoIG5hbWUgW2FycmF5IG5hbWVzIHN5c3RlbV9jb25maWddIHsKKwkJaWYge1tjYXRjaCB7c2V0IHYgJGdsb2JhbF9jb25maWcoJG5hbWUpfV19IHsKKwkJCXNldCBnbG9iYWxfY29uZmlnKCRuYW1lKSAkc3lzdGVtX2NvbmZpZygkbmFtZSkKKwkJfQorCQlpZiB7W2NhdGNoIHtzZXQgdiAkcmVwb19jb25maWcoJG5hbWUpfV19IHsKKwkJCXNldCByZXBvX2NvbmZpZygkbmFtZSkgJHN5c3RlbV9jb25maWcoJG5hbWUpCisJCX0KKwl9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyBmZWF0dXJlIG9wdGlvbiBzZWxlY3Rpb24KKworaWYge1tyZWdleHAge15naXQtKC4rKSR9IFtmaWxlIHRhaWwgJGFyZ3YwXSBfanVuayBzdWJjb21tYW5kXX0geworCXVuc2V0IF9qdW5rCit9IGVsc2UgeworCXNldCBzdWJjb21tYW5kIGd1aQorfQoraWYgeyRzdWJjb21tYW5kIGVxIHtndWkuc2h9fSB7CisJc2V0IHN1YmNvbW1hbmQgZ3VpCit9CitpZiB7JHN1YmNvbW1hbmQgZXEge2d1aX0gJiYgW2xsZW5ndGggJGFyZ3ZdID4gMH0geworCXNldCBzdWJjb21tYW5kIFtsaW5kZXggJGFyZ3YgMF0KKwlzZXQgYXJndiBbbHJhbmdlICRhcmd2IDEgZW5kXQorfQorCitlbmFibGVfb3B0aW9uIG11bHRpY29tbWl0CitlbmFibGVfb3B0aW9uIGJyYW5jaAorZW5hYmxlX29wdGlvbiB0cmFuc3BvcnQKK2Rpc2FibGVfb3B0aW9uIGJhcmUKKworc3dpdGNoIC0tICRzdWJjb21tYW5kIHsKK2Jyb3dzZXIgLQorYmxhbWUgeworCWVuYWJsZV9vcHRpb24gYmFyZQorCisJZGlzYWJsZV9vcHRpb24gbXVsdGljb21taXQKKwlkaXNhYmxlX29wdGlvbiBicmFuY2gKKwlkaXNhYmxlX29wdGlvbiB0cmFuc3BvcnQKK30KK2NpdG9vbCB7CisJZW5hYmxlX29wdGlvbiBzaW5nbGVjb21taXQKKwllbmFibGVfb3B0aW9uIHJldGNvZGUKKworCWRpc2FibGVfb3B0aW9uIG11bHRpY29tbWl0CisJZGlzYWJsZV9vcHRpb24gYnJhbmNoCisJZGlzYWJsZV9vcHRpb24gdHJhbnNwb3J0CisKKwl3aGlsZSB7W2xsZW5ndGggJGFyZ3ZdID4gMH0geworCQlzZXQgYSBbbGluZGV4ICRhcmd2IDBdCisJCXN3aXRjaCAtLSAkYSB7CisJCS0tYW1lbmQgeworCQkJZW5hYmxlX29wdGlvbiBpbml0aWFsYW1lbmQKKwkJfQorCQktLW5vY29tbWl0IHsKKwkJCWVuYWJsZV9vcHRpb24gbm9jb21taXQKKwkJCWVuYWJsZV9vcHRpb24gbm9jb21taXRtc2cKKwkJfQorCQktLWNvbW1pdG1zZyB7CisJCQlkaXNhYmxlX29wdGlvbiBub2NvbW1pdG1zZworCQl9CisJCWRlZmF1bHQgeworCQkJYnJlYWsKKwkJfQorCQl9CisKKwkJc2V0IGFyZ3YgW2xyYW5nZSAkYXJndiAxIGVuZF0KKwl9Cit9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyBleGVjdXRpb24gZW52aXJvbm1lbnQKKworc2V0IGhhdmVfdGs4NSBbZXhwciB7W3BhY2thZ2UgdmNvbXBhcmUgJHRrX3ZlcnNpb24gIjguNSJdID49IDB9XQorCisjIFN1Z2dlc3Qgb3VyIGltcGxlbWVudGF0aW9uIG9mIGFza3Bhc3MsIGlmIG5vbmUgaXMgc2V0CitpZiB7IVtpbmZvIGV4aXN0cyBlbnYoU1NIX0FTS1BBU1MpXX0geworCXNldCBlbnYoU1NIX0FTS1BBU1MpIFtnaXRleGVjIGdpdC1ndWktLWFza3Bhc3NdCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyByZXBvc2l0b3J5IHNldHVwCisKK3NldCBwaWNrZWQgMAoraWYge1tjYXRjaCB7CisJCXNldCBfZ2l0ZGlyICRlbnYoR0lUX0RJUikKKwkJc2V0IF9wcmVmaXgge30KKwkJfV0KKwkmJiBbY2F0Y2ggeworCQkjIGJld2FyZSB0aGF0IGZyb20gdGhlIC5naXQgZGlyIHRoaXMgc2V0cyBfZ2l0ZGlyIHRvIC4KKwkJIyBhbmQgX3ByZWZpeCB0byB0aGUgZW1wdHkgc3RyaW5nCisJCXNldCBfZ2l0ZGlyIFtnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcl0KKwkJc2V0IF9wcmVmaXggW2dpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeF0KKwl9IGVycl19IHsKKwlsb2FkX2NvbmZpZyAxCisJYXBwbHlfY29uZmlnCisJY2hvb3NlX3JlcG9zaXRvcnk6OnBpY2sKKwlzZXQgcGlja2VkIDEKK30KKworIyB3ZSBleHBhbmQgdGhlIF9naXRkaXIgd2hlbiBpdCdzIGp1c3QgYSBzaW5nbGUgZG90IChpLmUuIHdoZW4gd2UncmUgYmVpbmcKKyMgcnVuIGZyb20gdGhlIC5naXQgZGlyIGl0c2VsZikgbGVzdCB0aGUgcm91dGluZXMgdG8gZmluZCB0aGUgd29ya3RyZWUKKyMgZ2V0IGNvbmZ1c2VkCitpZiB7JF9naXRkaXIgZXEgIi4ifSB7CisJc2V0IF9naXRkaXIgW3B3ZF0KK30KKworaWYgeyFbZmlsZSBpc2RpcmVjdG9yeSAkX2dpdGRpcl0gJiYgW2lzX0N5Z3dpbl19IHsKKwljYXRjaCB7c2V0IF9naXRkaXIgW2V4ZWMgY3lncGF0aCAtLXdpbmRvd3MgJF9naXRkaXJdfQorfQoraWYgeyFbZmlsZSBpc2RpcmVjdG9yeSAkX2dpdGRpcl19IHsKKwljYXRjaCB7d20gd2l0aGRyYXcgLn0KKwllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6Il0gIlxuXG4kX2dpdGRpciJdCisJZXhpdCAxCit9CisjIF9naXRkaXIgZXhpc3RzLCBzbyB0cnkgbG9hZGluZyB0aGUgY29uZmlnCitsb2FkX2NvbmZpZyAwCithcHBseV9jb25maWcKKworIyB2MS43LjAgaW50cm9kdWNlZCAtLXNob3ctdG9wbGV2ZWwgdG8gcmV0dXJuIHRoZSBjYW5vbmljYWwgd29yay10cmVlCitpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJF9naXRfdmVyc2lvbiAxLjcuMF0gPj0gMH0geworCWlmIHsgW2lzX0N5Z3dpbl0gfSB7CisJCWNhdGNoIHtzZXQgX2dpdHdvcmt0cmVlIFtleGVjIGN5Z3BhdGggLS13aW5kb3dzIFtnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbF1dfQorCX0gZWxzZSB7CisJCXNldCBfZ2l0d29ya3RyZWUgW2dpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsXQorCX0KK30gZWxzZSB7CisJIyB0cnkgdG8gc2V0IHdvcmsgdHJlZSBmcm9tIGVudmlyb25tZW50LCBjb3JlLndvcmt0cmVlIG9yIHVzZQorCSMgY2R1cCB0byBvYnRhaW4gYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSB0b3Agb2YgdGhlIHdvcmt0cmVlLiBJZgorCSMgcnVuIGZyb20gdGhlIHRvcCwgdGhlIC4vIHByZWZpeCBlbnN1cmVzIG5vcm1hbGl6ZSBleHBhbmRzIHB3ZC4KKwlpZiB7W2NhdGNoIHsgc2V0IF9naXR3b3JrdHJlZSAkZW52KEdJVF9XT1JLX1RSRUUpIH1dfSB7CisJCXNldCBfZ2l0d29ya3RyZWUgW2dldF9jb25maWcgY29yZS53b3JrdHJlZV0KKwkJaWYgeyRfZ2l0d29ya3RyZWUgZXEgIiJ9IHsKKwkJCXNldCBfZ2l0d29ya3RyZWUgW2ZpbGUgbm9ybWFsaXplIC4vW2dpdCByZXYtcGFyc2UgLS1zaG93LWNkdXBdXQorCQl9CisJfQorfQorCitpZiB7JF9wcmVmaXggbmUge319IHsKKwlpZiB7JF9naXR3b3JrdHJlZSBlcSB7fX0geworCQlyZWdzdWIgLWFsbCB7W14vXSsvfSAkX3ByZWZpeCAuLi8gY2R1cAorCX0gZWxzZSB7CisJCXNldCBjZHVwICRfZ2l0d29ya3RyZWUKKwl9CisJaWYge1tjYXRjaCB7Y2QgJGNkdXB9IGVycl19IHsKKwkJY2F0Y2gge3dtIHdpdGhkcmF3IC59CisJCWVycm9yX3BvcHVwIFtzdHJjYXQgW21jICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6Il0gIlxuXG4kZXJyIl0KKwkJZXhpdCAxCisJfQorCXNldCBfZ2l0d29ya3RyZWUgW3B3ZF0KKwl1bnNldCBjZHVwCit9IGVsc2VpZiB7IVtpc19lbmFibGVkIGJhcmVdfSB7CisJaWYge1tpc19iYXJlXX0geworCQljYXRjaCB7d20gd2l0aGRyYXcgLn0KKwkJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiJdICJcblxuJF9naXRkaXIiXQorCQlleGl0IDEKKwl9CisJaWYgeyRfZ2l0d29ya3RyZWUgZXEge319IHsKKwkJc2V0IF9naXR3b3JrdHJlZSBbZmlsZSBkaXJuYW1lICRfZ2l0ZGlyXQorCX0KKwlpZiB7W2NhdGNoIHtjZCAkX2dpdHdvcmt0cmVlfSBlcnJdfSB7CisJCWNhdGNoIHt3bSB3aXRoZHJhdyAufQorCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiTm8gd29ya2luZyBkaXJlY3RvcnkiXSAiICRfZ2l0d29ya3RyZWU6XG5cbiRlcnIiXQorCQlleGl0IDEKKwl9CisJc2V0IF9naXR3b3JrdHJlZSBbcHdkXQorfQorc2V0IF9yZXBvbmFtZSBbZmlsZSBzcGxpdCBbZmlsZSBub3JtYWxpemUgJF9naXRkaXJdXQoraWYge1tsaW5kZXggJF9yZXBvbmFtZSBlbmRdIGVxIHsuZ2l0fX0geworCXNldCBfcmVwb25hbWUgW2xpbmRleCAkX3JlcG9uYW1lIGVuZC0xXQorfSBlbHNlIHsKKwlzZXQgX3JlcG9uYW1lIFtsaW5kZXggJF9yZXBvbmFtZSBlbmRdCit9CisKK3NldCBlbnYoR0lUX0RJUikgJF9naXRkaXIKK3NldCBlbnYoR0lUX1dPUktfVFJFRSkgJF9naXR3b3JrdHJlZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgZ2xvYmFsIGluaXQKKworc2V0IGN1cnJlbnRfZGlmZl9wYXRoIHt9CitzZXQgY3VycmVudF9kaWZmX3NpZGUge30KK3NldCBkaWZmX2FjdGlvbnMgW2xpc3RdCisKK3NldCBIRUFEIHt9CitzZXQgUEFSRU5UIHt9CitzZXQgTUVSR0VfSEVBRCBbbGlzdF0KK3NldCBjb21taXRfdHlwZSB7fQorc2V0IGVtcHR5X3RyZWUge30KK3NldCBjdXJyZW50X2JyYW5jaCB7fQorc2V0IGlzX2RldGFjaGVkIDAKK3NldCBjdXJyZW50X2RpZmZfcGF0aCB7fQorc2V0IGlzXzN3YXlfZGlmZiAwCitzZXQgaXNfc3VibW9kdWxlX2RpZmYgMAorc2V0IGlzX2NvbmZsaWN0X2RpZmYgMAorc2V0IHNlbGVjdGVkX2NvbW1pdF90eXBlIG5ldworc2V0IGRpZmZfZW1wdHlfY291bnQgMAorCitzZXQgbnVsbGlkICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIgorc2V0IG51bGxpZDIgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyB0YXNrIG1hbmFnZW1lbnQKKworc2V0IHJlc2Nhbl9hY3RpdmUgMAorc2V0IGRpZmZfYWN0aXZlIDAKK3NldCBsYXN0X2NsaWNrZWQge30KKworc2V0IGRpc2FibGVfb25fbG9jayBbbGlzdF0KK3NldCBpbmRleF9sb2NrX3R5cGUgbm9uZQorCitwcm9jIGxvY2tfaW5kZXgge3R5cGV9IHsKKwlnbG9iYWwgaW5kZXhfbG9ja190eXBlIGRpc2FibGVfb25fbG9jaworCisJaWYgeyRpbmRleF9sb2NrX3R5cGUgZXEge25vbmV9fSB7CisJCXNldCBpbmRleF9sb2NrX3R5cGUgJHR5cGUKKwkJZm9yZWFjaCB3ICRkaXNhYmxlX29uX2xvY2sgeworCQkJdXBsZXZlbCAjMCAkdyBkaXNhYmxlZAorCQl9CisJCXJldHVybiAxCisJfSBlbHNlaWYgeyRpbmRleF9sb2NrX3R5cGUgZXEgImJlZ2luLSR0eXBlIn0geworCQlzZXQgaW5kZXhfbG9ja190eXBlICR0eXBlCisJCXJldHVybiAxCisJfQorCXJldHVybiAwCit9CisKK3Byb2MgdW5sb2NrX2luZGV4IHt9IHsKKwlnbG9iYWwgaW5kZXhfbG9ja190eXBlIGRpc2FibGVfb25fbG9jaworCisJc2V0IGluZGV4X2xvY2tfdHlwZSBub25lCisJZm9yZWFjaCB3ICRkaXNhYmxlX29uX2xvY2sgeworCQl1cGxldmVsICMwICR3IG5vcm1hbAorCX0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMjIHN0YXR1cworCitwcm9jIHJlcG9zaXRvcnlfc3RhdGUge2N0dmFyIGhkdmFyIG1odmFyfSB7CisJZ2xvYmFsIGN1cnJlbnRfYnJhbmNoCisJdXB2YXIgJGN0dmFyIGN0ICRoZHZhciBoZCAkbWh2YXIgbWgKKworCXNldCBtaCBbbGlzdF0KKworCWxvYWRfY3VycmVudF9icmFuY2gKKwlpZiB7W2NhdGNoIHtzZXQgaGQgW2dpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF19XX0geworCQlzZXQgaGQge30KKwkJc2V0IGN0IGluaXRpYWwKKwkJcmV0dXJuCisJfQorCisJc2V0IG1lcmdlX2hlYWQgW2dpdGRpciBNRVJHRV9IRUFEXQorCWlmIHtbZmlsZSBleGlzdHMgJG1lcmdlX2hlYWRdfSB7CisJCXNldCBjdCBtZXJnZQorCQlzZXQgZmRfbWggW29wZW4gJG1lcmdlX2hlYWQgcl0KKwkJd2hpbGUge1tnZXRzICRmZF9taCBsaW5lXSA+PSAwfSB7CisJCQlsYXBwZW5kIG1oICRsaW5lCisJCX0KKwkJY2xvc2UgJGZkX21oCisJCXJldHVybgorCX0KKworCXNldCBjdCBub3JtYWwKK30KKworcHJvYyBQQVJFTlQge30geworCWdsb2JhbCBQQVJFTlQgZW1wdHlfdHJlZQorCisJc2V0IHAgW2xpbmRleCAkUEFSRU5UIDBdCisJaWYgeyRwIG5lIHt9fSB7CisJCXJldHVybiAkcAorCX0KKwlpZiB7JGVtcHR5X3RyZWUgZXEge319IHsKKwkJc2V0IGVtcHR5X3RyZWUgW2dpdCBta3RyZWUgPDwge31dCisJfQorCXJldHVybiAkZW1wdHlfdHJlZQorfQorCitwcm9jIGZvcmNlX2FtZW5kIHt9IHsKKwlnbG9iYWwgc2VsZWN0ZWRfY29tbWl0X3R5cGUKKwlnbG9iYWwgSEVBRCBQQVJFTlQgTUVSR0VfSEVBRCBjb21taXRfdHlwZQorCisJcmVwb3NpdG9yeV9zdGF0ZSBuZXdUeXBlIG5ld0hFQUQgbmV3TUVSR0VfSEVBRAorCXNldCBIRUFEICRuZXdIRUFECisJc2V0IFBBUkVOVCAkbmV3SEVBRAorCXNldCBNRVJHRV9IRUFEICRuZXdNRVJHRV9IRUFECisJc2V0IGNvbW1pdF90eXBlICRuZXdUeXBlCisKKwlzZXQgc2VsZWN0ZWRfY29tbWl0X3R5cGUgYW1lbmQKKwlkb19zZWxlY3RfY29tbWl0X3R5cGUKK30KKworcHJvYyByZXNjYW4ge2FmdGVyIHtob25vcl90cnVzdG10aW1lIDF9fSB7CisJZ2xvYmFsIEhFQUQgUEFSRU5UIE1FUkdFX0hFQUQgY29tbWl0X3R5cGUKKwlnbG9iYWwgdWlfaW5kZXggdWlfd29ya2RpciB1aV9jb21tCisJZ2xvYmFsIHJlc2Nhbl9hY3RpdmUgZmlsZV9zdGF0ZXMKKwlnbG9iYWwgcmVwb19jb25maWcKKworCWlmIHskcmVzY2FuX2FjdGl2ZSA+IDAgfHwgIVtsb2NrX2luZGV4IHJlYWRdfSByZXR1cm4KKworCXJlcG9zaXRvcnlfc3RhdGUgbmV3VHlwZSBuZXdIRUFEIG5ld01FUkdFX0hFQUQKKwlpZiB7W3N0cmluZyBtYXRjaCBhbWVuZCogJGNvbW1pdF90eXBlXQorCQkmJiAkbmV3VHlwZSBlcSB7bm9ybWFsfQorCQkmJiAkbmV3SEVBRCBlcSAkSEVBRH0geworCX0gZWxzZSB7CisJCXNldCBIRUFEICRuZXdIRUFECisJCXNldCBQQVJFTlQgJG5ld0hFQUQKKwkJc2V0IE1FUkdFX0hFQUQgJG5ld01FUkdFX0hFQUQKKwkJc2V0IGNvbW1pdF90eXBlICRuZXdUeXBlCisJfQorCisJYXJyYXkgdW5zZXQgZmlsZV9zdGF0ZXMKKworCWlmIHshJDo6R0lUR1VJX0JDS19leGlzdHMgJiYKKwkJKCFbJHVpX2NvbW0gZWRpdCBtb2RpZmllZF0KKwkJfHwgW3N0cmluZyB0cmltIFskdWlfY29tbSBnZXQgMC4wIGVuZF1dIGVxIHt9KX0geworCQlpZiB7W3N0cmluZyBtYXRjaCBhbWVuZCogJGNvbW1pdF90eXBlXX0geworCQl9IGVsc2VpZiB7W2xvYWRfbWVzc2FnZSBHSVRHVUlfTVNHIHV0Zi04XX0geworCQl9IGVsc2VpZiB7W3J1bl9wcmVwYXJlX2NvbW1pdF9tc2dfaG9va119IHsKKwkJfSBlbHNlaWYge1tsb2FkX21lc3NhZ2UgTUVSR0VfTVNHXX0geworCQl9IGVsc2VpZiB7W2xvYWRfbWVzc2FnZSBTUVVBU0hfTVNHXX0geworCQl9CisJCSR1aV9jb21tIGVkaXQgcmVzZXQKKwkJJHVpX2NvbW0gZWRpdCBtb2RpZmllZCBmYWxzZQorCX0KKworCWlmIHskaG9ub3JfdHJ1c3RtdGltZSAmJiAkcmVwb19jb25maWcoZ3VpLnRydXN0bXRpbWUpIGVxIHt0cnVlfX0geworCQlyZXNjYW5fc3RhZ2UyIHt9ICRhZnRlcgorCX0gZWxzZSB7CisJCXNldCByZXNjYW5fYWN0aXZlIDEKKwkJdWlfc3RhdHVzIFttYyAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiJdCisJCXNldCBmZF9yZiBbZ2l0X3JlYWQgdXBkYXRlLWluZGV4IFwKKwkJCS1xIFwKKwkJCS0tdW5tZXJnZWQgXAorCQkJLS1pZ25vcmUtbWlzc2luZyBcCisJCQktLXJlZnJlc2ggXAorCQkJXQorCQlmY29uZmlndXJlICRmZF9yZiAtYmxvY2tpbmcgMCAtdHJhbnNsYXRpb24gYmluYXJ5CisJCWZpbGVldmVudCAkZmRfcmYgcmVhZGFibGUgXAorCQkJW2xpc3QgcmVzY2FuX3N0YWdlMiAkZmRfcmYgJGFmdGVyXQorCX0KK30KKworaWYge1tpc19DeWd3aW5dfSB7CisJc2V0IGlzX2dpdF9pbmZvX2V4Y2x1ZGUge30KKwlwcm9jIGhhdmVfaW5mb19leGNsdWRlIHt9IHsKKwkJZ2xvYmFsIGlzX2dpdF9pbmZvX2V4Y2x1ZGUKKworCQlpZiB7JGlzX2dpdF9pbmZvX2V4Y2x1ZGUgZXEge319IHsKKwkJCWlmIHtbY2F0Y2gge2V4ZWMgdGVzdCAtZiBbZ2l0ZGlyIGluZm8gZXhjbHVkZV19XX0geworCQkJCXNldCBpc19naXRfaW5mb19leGNsdWRlIDAKKwkJCX0gZWxzZSB7CisJCQkJc2V0IGlzX2dpdF9pbmZvX2V4Y2x1ZGUgMQorCQkJfQorCQl9CisJCXJldHVybiAkaXNfZ2l0X2luZm9fZXhjbHVkZQorCX0KK30gZWxzZSB7CisJcHJvYyBoYXZlX2luZm9fZXhjbHVkZSB7fSB7CisJCXJldHVybiBbZmlsZSByZWFkYWJsZSBbZ2l0ZGlyIGluZm8gZXhjbHVkZV1dCisJfQorfQorCitwcm9jIHJlc2Nhbl9zdGFnZTIge2ZkIGFmdGVyfSB7CisJZ2xvYmFsIHJlc2Nhbl9hY3RpdmUgYnVmX3JkaSBidWZfcmRmIGJ1Zl9ybG8KKworCWlmIHskZmQgbmUge319IHsKKwkJcmVhZCAkZmQKKwkJaWYgeyFbZW9mICRmZF19IHJldHVybgorCQljbG9zZSAkZmQKKwl9CisKKwlpZiB7W3BhY2thZ2UgdmNvbXBhcmUgJDo6X2dpdF92ZXJzaW9uIDEuNi4zXSA+PSAwfSB7CisJCXNldCBsc19vdGhlcnMgW2xpc3QgLS1leGNsdWRlLXN0YW5kYXJkXQorCX0gZWxzZSB7CisJCXNldCBsc19vdGhlcnMgW2xpc3QgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZV0KKwkJaWYge1toYXZlX2luZm9fZXhjbHVkZV19IHsKKwkJCWxhcHBlbmQgbHNfb3RoZXJzICItLWV4Y2x1ZGUtZnJvbT1bZ2l0ZGlyIGluZm8gZXhjbHVkZV0iCisJCX0KKwkJc2V0IHVzZXJfZXhjbHVkZSBbZ2V0X2NvbmZpZyBjb3JlLmV4Y2x1ZGVzZmlsZV0KKwkJaWYgeyR1c2VyX2V4Y2x1ZGUgbmUge30gJiYgW2ZpbGUgcmVhZGFibGUgJHVzZXJfZXhjbHVkZV19IHsKKwkJCWxhcHBlbmQgbHNfb3RoZXJzICItLWV4Y2x1ZGUtZnJvbT1bZmlsZSBub3JtYWxpemUgJHVzZXJfZXhjbHVkZV0iCisJCX0KKwl9CisKKwlzZXQgYnVmX3JkaSB7fQorCXNldCBidWZfcmRmIHt9CisJc2V0IGJ1Zl9ybG8ge30KKworCXNldCByZXNjYW5fYWN0aXZlIDIKKwl1aV9zdGF0dXMgW21jICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIl0KKwlpZiB7W2dpdC12ZXJzaW9uID49ICIxLjcuMiJdfSB7CisJCXNldCBmZF9kaSBbZ2l0X3JlYWQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC16IFtQQVJFTlRdXQorCX0gZWxzZSB7CisJCXNldCBmZF9kaSBbZ2l0X3JlYWQgZGlmZi1pbmRleCAtLWNhY2hlZCAteiBbUEFSRU5UXV0KKwl9CisJc2V0IGZkX2RmIFtnaXRfcmVhZCBkaWZmLWZpbGVzIC16XQorCisJZmNvbmZpZ3VyZSAkZmRfZGkgLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGJpbmFyeSAtZW5jb2RpbmcgYmluYXJ5CisJZmNvbmZpZ3VyZSAkZmRfZGYgLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGJpbmFyeSAtZW5jb2RpbmcgYmluYXJ5CisKKwlmaWxlZXZlbnQgJGZkX2RpIHJlYWRhYmxlIFtsaXN0IHJlYWRfZGlmZl9pbmRleCAkZmRfZGkgJGFmdGVyXQorCWZpbGVldmVudCAkZmRfZGYgcmVhZGFibGUgW2xpc3QgcmVhZF9kaWZmX2ZpbGVzICRmZF9kZiAkYWZ0ZXJdCisKKwlpZiB7W2lzX2NvbmZpZ190cnVlIGd1aS5kaXNwbGF5dW50cmFja2VkXX0geworCQlzZXQgZmRfbG8gW2V2YWwgZ2l0X3JlYWQgbHMtZmlsZXMgLS1vdGhlcnMgLXogJGxzX290aGVyc10KKwkJZmNvbmZpZ3VyZSAkZmRfbG8gLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGJpbmFyeSAtZW5jb2RpbmcgYmluYXJ5CisJCWZpbGVldmVudCAkZmRfbG8gcmVhZGFibGUgW2xpc3QgcmVhZF9sc19vdGhlcnMgJGZkX2xvICRhZnRlcl0KKwkJaW5jciByZXNjYW5fYWN0aXZlCisJfQorfQorCitwcm9jIGxvYWRfbWVzc2FnZSB7ZmlsZSB7ZW5jb2Rpbmcge319fSB7CisJZ2xvYmFsIHVpX2NvbW0KKworCXNldCBmIFtnaXRkaXIgJGZpbGVdCisJaWYge1tmaWxlIGlzZmlsZSAkZl19IHsKKwkJaWYge1tjYXRjaCB7c2V0IGZkIFtvcGVuICRmIHJdfV19IHsKKwkJCXJldHVybiAwCisJCX0KKwkJZmNvbmZpZ3VyZSAkZmQgLWVvZmNoYXIge30KKwkJaWYgeyRlbmNvZGluZyBuZSB7fX0geworCQkJZmNvbmZpZ3VyZSAkZmQgLWVuY29kaW5nICRlbmNvZGluZworCQl9CisJCXNldCBjb250ZW50IFtzdHJpbmcgdHJpbSBbcmVhZCAkZmRdXQorCQljbG9zZSAkZmQKKwkJcmVnc3ViIC1hbGwgLWxpbmUge1sgXHJcdF0rJH0gJGNvbnRlbnQge30gY29udGVudAorCQkkdWlfY29tbSBkZWxldGUgMC4wIGVuZAorCQkkdWlfY29tbSBpbnNlcnQgZW5kICRjb250ZW50CisJCXJldHVybiAxCisJfQorCXJldHVybiAwCit9CisKK3Byb2MgcnVuX3ByZXBhcmVfY29tbWl0X21zZ19ob29rIHt9IHsKKwlnbG9iYWwgcGNoX2Vycm9yCisKKwkjIHByZXBhcmUtY29tbWl0LW1zZyByZXF1aXJlcyBQUkVQQVJFX0NPTU1JVF9NU0cgZXhpc3QuICBGcm9tIGdpdC1ndWkKKwkjIGl0IHdpbGwgYmUgLmdpdC9NRVJHRV9NU0cgKG1lcmdlKSwgLmdpdC9TUVVBU0hfTVNHIChzcXVhc2gpLCBvciBhbgorCSMgZW1wdHkgZmlsZSBidXQgZXhpc3RlbnQgZmlsZS4KKworCXNldCBmZF9wY20gW29wZW4gW2dpdGRpciBQUkVQQVJFX0NPTU1JVF9NU0ddIGFdCisKKwlpZiB7W2ZpbGUgaXNmaWxlIFtnaXRkaXIgTUVSR0VfTVNHXV19IHsKKwkJc2V0IHBjbV9zb3VyY2UgIm1lcmdlIgorCQlzZXQgZmRfbW0gW29wZW4gW2dpdGRpciBNRVJHRV9NU0ddIHJdCisJCXB1dHMgLW5vbmV3bGluZSAkZmRfcGNtIFtyZWFkICRmZF9tbV0KKwkJY2xvc2UgJGZkX21tCisJfSBlbHNlaWYge1tmaWxlIGlzZmlsZSBbZ2l0ZGlyIFNRVUFTSF9NU0ddXX0geworCQlzZXQgcGNtX3NvdXJjZSAic3F1YXNoIgorCQlzZXQgZmRfc20gW29wZW4gW2dpdGRpciBTUVVBU0hfTVNHXSByXQorCQlwdXRzIC1ub25ld2xpbmUgJGZkX3BjbSBbcmVhZCAkZmRfc21dCisJCWNsb3NlICRmZF9zbQorCX0gZWxzZSB7CisJCXNldCBwY21fc291cmNlICIiCisJfQorCisJY2xvc2UgJGZkX3BjbQorCisJc2V0IGZkX3BoIFtnaXRob29rX3JlYWQgcHJlcGFyZS1jb21taXQtbXNnIFwKKwkJCVtnaXRkaXIgUFJFUEFSRV9DT01NSVRfTVNHXSAkcGNtX3NvdXJjZV0KKwlpZiB7JGZkX3BoIGVxIHt9fSB7CisJCWNhdGNoIHtmaWxlIGRlbGV0ZSBbZ2l0ZGlyIFBSRVBBUkVfQ09NTUlUX01TR119CisJCXJldHVybiAwOworCX0KKworCXVpX3N0YXR1cyBbbWMgIkNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iXQorCXNldCBwY2hfZXJyb3Ige30KKworCWZjb25maWd1cmUgJGZkX3BoIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBiaW5hcnkgLWVvZmNoYXIge30KKwlmaWxlZXZlbnQgJGZkX3BoIHJlYWRhYmxlIFwKKwkJW2xpc3QgcHJlcGFyZV9jb21taXRfbXNnX2hvb2tfd2FpdCAkZmRfcGhdCisKKwlyZXR1cm4gMTsKK30KKworcHJvYyBwcmVwYXJlX2NvbW1pdF9tc2dfaG9va193YWl0IHtmZF9waH0geworCWdsb2JhbCBwY2hfZXJyb3IKKworCWFwcGVuZCBwY2hfZXJyb3IgW3JlYWQgJGZkX3BoXQorCWZjb25maWd1cmUgJGZkX3BoIC1ibG9ja2luZyAxCisJaWYge1tlb2YgJGZkX3BoXX0geworCQlpZiB7W2NhdGNoIHtjbG9zZSAkZmRfcGh9XX0geworCQkJdWlfc3RhdHVzIFttYyAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiJdCisJCQlob29rX2ZhaWxlZF9wb3B1cCBwcmVwYXJlLWNvbW1pdC1tc2cgJHBjaF9lcnJvcgorCQkJY2F0Y2gge2ZpbGUgZGVsZXRlIFtnaXRkaXIgUFJFUEFSRV9DT01NSVRfTVNHXX0KKwkJCWV4aXQgMQorCQl9IGVsc2UgeworCQkJbG9hZF9tZXNzYWdlIFBSRVBBUkVfQ09NTUlUX01TRworCQl9CisJCXNldCBwY2hfZXJyb3Ige30KKwkJY2F0Y2gge2ZpbGUgZGVsZXRlIFtnaXRkaXIgUFJFUEFSRV9DT01NSVRfTVNHXX0KKwkJcmV0dXJuCisgICAgICAgIH0KKwlmY29uZmlndXJlICRmZF9waCAtYmxvY2tpbmcgMAorCWNhdGNoIHtmaWxlIGRlbGV0ZSBbZ2l0ZGlyIFBSRVBBUkVfQ09NTUlUX01TR119Cit9CisKK3Byb2MgcmVhZF9kaWZmX2luZGV4IHtmZCBhZnRlcn0geworCWdsb2JhbCBidWZfcmRpCisKKwlhcHBlbmQgYnVmX3JkaSBbcmVhZCAkZmRdCisJc2V0IGMgMAorCXNldCBuIFtzdHJpbmcgbGVuZ3RoICRidWZfcmRpXQorCXdoaWxlIHskYyA8ICRufSB7CisJCXNldCB6MSBbc3RyaW5nIGZpcnN0ICJcMCIgJGJ1Zl9yZGkgJGNdCisJCWlmIHskejEgPT0gLTF9IGJyZWFrCisJCWluY3IgejEKKwkJc2V0IHoyIFtzdHJpbmcgZmlyc3QgIlwwIiAkYnVmX3JkaSAkejFdCisJCWlmIHskejIgPT0gLTF9IGJyZWFrCisKKwkJaW5jciBjCisJCXNldCBpIFtzcGxpdCBbc3RyaW5nIHJhbmdlICRidWZfcmRpICRjIFtleHByIHskejEgLSAyfV1dIHsgfV0KKwkJc2V0IHAgW3N0cmluZyByYW5nZSAkYnVmX3JkaSAkejEgW2V4cHIgeyR6MiAtIDF9XV0KKwkJbWVyZ2Vfc3RhdGUgXAorCQkJW2VuY29kaW5nIGNvbnZlcnRmcm9tICRwXSBcCisJCQlbbGluZGV4ICRpIDRdPyBcCisJCQlbbGlzdCBbbGluZGV4ICRpIDBdIFtsaW5kZXggJGkgMl1dIFwKKwkJCVtsaXN0XQorCQlzZXQgYyAkejIKKwkJaW5jciBjCisJfQorCWlmIHskYyA8ICRufSB7CisJCXNldCBidWZfcmRpIFtzdHJpbmcgcmFuZ2UgJGJ1Zl9yZGkgJGMgZW5kXQorCX0gZWxzZSB7CisJCXNldCBidWZfcmRpIHt9CisJfQorCisJcmVzY2FuX2RvbmUgJGZkIGJ1Zl9yZGkgJGFmdGVyCit9CisKK3Byb2MgcmVhZF9kaWZmX2ZpbGVzIHtmZCBhZnRlcn0geworCWdsb2JhbCBidWZfcmRmCisKKwlhcHBlbmQgYnVmX3JkZiBbcmVhZCAkZmRdCisJc2V0IGMgMAorCXNldCBuIFtzdHJpbmcgbGVuZ3RoICRidWZfcmRmXQorCXdoaWxlIHskYyA8ICRufSB7CisJCXNldCB6MSBbc3RyaW5nIGZpcnN0ICJcMCIgJGJ1Zl9yZGYgJGNdCisJCWlmIHskejEgPT0gLTF9IGJyZWFrCisJCWluY3IgejEKKwkJc2V0IHoyIFtzdHJpbmcgZmlyc3QgIlwwIiAkYnVmX3JkZiAkejFdCisJCWlmIHskejIgPT0gLTF9IGJyZWFrCisKKwkJaW5jciBjCisJCXNldCBpIFtzcGxpdCBbc3RyaW5nIHJhbmdlICRidWZfcmRmICRjIFtleHByIHskejEgLSAyfV1dIHsgfV0KKwkJc2V0IHAgW3N0cmluZyByYW5nZSAkYnVmX3JkZiAkejEgW2V4cHIgeyR6MiAtIDF9XV0KKwkJbWVyZ2Vfc3RhdGUgXAorCQkJW2VuY29kaW5nIGNvbnZlcnRmcm9tICRwXSBcCisJCQk/W2xpbmRleCAkaSA0XSBcCisJCQlbbGlzdF0gXAorCQkJW2xpc3QgW2xpbmRleCAkaSAwXSBbbGluZGV4ICRpIDJdXQorCQlzZXQgYyAkejIKKwkJaW5jciBjCisJfQorCWlmIHskYyA8ICRufSB7CisJCXNldCBidWZfcmRmIFtzdHJpbmcgcmFuZ2UgJGJ1Zl9yZGYgJGMgZW5kXQorCX0gZWxzZSB7CisJCXNldCBidWZfcmRmIHt9CisJfQorCisJcmVzY2FuX2RvbmUgJGZkIGJ1Zl9yZGYgJGFmdGVyCit9CisKK3Byb2MgcmVhZF9sc19vdGhlcnMge2ZkIGFmdGVyfSB7CisJZ2xvYmFsIGJ1Zl9ybG8KKworCWFwcGVuZCBidWZfcmxvIFtyZWFkICRmZF0KKwlzZXQgcGNrIFtzcGxpdCAkYnVmX3JsbyAiXDAiXQorCXNldCBidWZfcmxvIFtsaW5kZXggJHBjayBlbmRdCisJZm9yZWFjaCBwIFtscmFuZ2UgJHBjayAwIGVuZC0xXSB7CisJCXNldCBwIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSAkcF0KKwkJaWYge1tzdHJpbmcgaW5kZXggJHAgZW5kXSBlcSB7L319IHsKKwkJCXNldCBwIFtzdHJpbmcgcmFuZ2UgJHAgMCBlbmQtMV0KKwkJfQorCQltZXJnZV9zdGF0ZSAkcCA/TworCX0KKwlyZXNjYW5fZG9uZSAkZmQgYnVmX3JsbyAkYWZ0ZXIKK30KKworcHJvYyByZXNjYW5fZG9uZSB7ZmQgYnVmIGFmdGVyfSB7CisJZ2xvYmFsIHJlc2Nhbl9hY3RpdmUgY3VycmVudF9kaWZmX3BhdGgKKwlnbG9iYWwgZmlsZV9zdGF0ZXMgcmVwb19jb25maWcKKwl1cHZhciAkYnVmIHRvX2NsZWFyCisKKwlpZiB7IVtlb2YgJGZkXX0gcmV0dXJuCisJc2V0IHRvX2NsZWFyIHt9CisJY2xvc2UgJGZkCisJaWYge1tpbmNyIHJlc2Nhbl9hY3RpdmUgLTFdID4gMH0gcmV0dXJuCisKKwlwcnVuZV9zZWxlY3Rpb24KKwl1bmxvY2tfaW5kZXgKKwlkaXNwbGF5X2FsbF9maWxlcworCWlmIHskY3VycmVudF9kaWZmX3BhdGggbmUge319IHsgcmVzaG93X2RpZmYgJGFmdGVyIH0KKwlpZiB7JGN1cnJlbnRfZGlmZl9wYXRoIGVxIHt9fSB7IHNlbGVjdF9maXJzdF9kaWZmICRhZnRlciB9Cit9CisKK3Byb2MgcHJ1bmVfc2VsZWN0aW9uIHt9IHsKKwlnbG9iYWwgZmlsZV9zdGF0ZXMgc2VsZWN0ZWRfcGF0aHMKKworCWZvcmVhY2ggcGF0aCBbYXJyYXkgbmFtZXMgc2VsZWN0ZWRfcGF0aHNdIHsKKwkJaWYge1tjYXRjaCB7c2V0IHN0aWxsX2hlcmUgJGZpbGVfc3RhdGVzKCRwYXRoKX1dfSB7CisJCQl1bnNldCBzZWxlY3RlZF9wYXRocygkcGF0aCkKKwkJfQorCX0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMjIHVpIGhlbHBlcnMKKworcHJvYyBtYXBpY29uIHt3IHN0YXRlIHBhdGh9IHsKKwlnbG9iYWwgYWxsX2ljb25zCisKKwlpZiB7W2NhdGNoIHtzZXQgciAkYWxsX2ljb25zKCRzdGF0ZSR3KX1dfSB7CisJCXB1dHMgImVycm9yOiBubyBpY29uIGZvciAkdyBzdGF0ZT17JHN0YXRlfSAkcGF0aCIKKwkJcmV0dXJuIGZpbGVfcGxhaW4KKwl9CisJcmV0dXJuICRyCit9CisKK3Byb2MgbWFwZGVzYyB7c3RhdGUgcGF0aH0geworCWdsb2JhbCBhbGxfZGVzY3MKKworCWlmIHtbY2F0Y2gge3NldCByICRhbGxfZGVzY3MoJHN0YXRlKX1dfSB7CisJCXB1dHMgImVycm9yOiBubyBkZXNjIGZvciBzdGF0ZT17JHN0YXRlfSAkcGF0aCIKKwkJcmV0dXJuICRzdGF0ZQorCX0KKwlyZXR1cm4gJHIKK30KKworcHJvYyB1aV9zdGF0dXMge21zZ30geworCWdsb2JhbCBtYWluX3N0YXR1cworCWlmIHtbaW5mbyBleGlzdHMgbWFpbl9zdGF0dXNdfSB7CisJCSRtYWluX3N0YXR1cyBzaG93ICRtc2cKKwl9Cit9CisKK3Byb2MgdWlfcmVhZHkge3t0ZXN0IHt9fX0geworCWdsb2JhbCBtYWluX3N0YXR1cworCWlmIHtbaW5mbyBleGlzdHMgbWFpbl9zdGF0dXNdfSB7CisJCSRtYWluX3N0YXR1cyBzaG93IFttYyAiUmVhZHkuIl0gJHRlc3QKKwl9Cit9CisKK3Byb2MgZXNjYXBlX3BhdGgge3BhdGh9IHsKKwlyZWdzdWIgLWFsbCB7XFx9ICRwYXRoICJcXFxcIiBwYXRoCisJcmVnc3ViIC1hbGwgIlxuIiAkcGF0aCAiXFxuIiBwYXRoCisJcmV0dXJuICRwYXRoCit9CisKK3Byb2Mgc2hvcnRfcGF0aCB7cGF0aH0geworCXJldHVybiBbZXNjYXBlX3BhdGggW2xpbmRleCBbZmlsZSBzcGxpdCAkcGF0aF0gZW5kXV0KK30KKworc2V0IG5leHRfaWNvbl9pZCAwCitzZXQgbnVsbF9zaGExIFtzdHJpbmcgcmVwZWF0IDAgNDBdCisKK3Byb2MgbWVyZ2Vfc3RhdGUge3BhdGggbmV3X3N0YXRlIHtoZWFkX2luZm8ge319IHtpbmRleF9pbmZvIHt9fX0geworCWdsb2JhbCBmaWxlX3N0YXRlcyBuZXh0X2ljb25faWQgbnVsbF9zaGExCisKKwlzZXQgczAgW3N0cmluZyBpbmRleCAkbmV3X3N0YXRlIDBdCisJc2V0IHMxIFtzdHJpbmcgaW5kZXggJG5ld19zdGF0ZSAxXQorCisJaWYge1tjYXRjaCB7c2V0IGluZm8gJGZpbGVfc3RhdGVzKCRwYXRoKX1dfSB7CisJCXNldCBzdGF0ZSBfXworCQlzZXQgaWNvbiBuW2luY3IgbmV4dF9pY29uX2lkXQorCX0gZWxzZSB7CisJCXNldCBzdGF0ZSBbbGluZGV4ICRpbmZvIDBdCisJCXNldCBpY29uIFtsaW5kZXggJGluZm8gMV0KKwkJaWYgeyRoZWFkX2luZm8gZXEge319ICB7c2V0IGhlYWRfaW5mbyAgW2xpbmRleCAkaW5mbyAyXX0KKwkJaWYgeyRpbmRleF9pbmZvIGVxIHt9fSB7c2V0IGluZGV4X2luZm8gW2xpbmRleCAkaW5mbyAzXX0KKwl9CisKKwlpZiAgICAgeyRzMCBlcSB7P319IHtzZXQgczAgW3N0cmluZyBpbmRleCAkc3RhdGUgMF19IFwKKwllbHNlaWYgeyRzMCBlcSB7X319IHtzZXQgczAgX30KKworCWlmICAgICB7JHMxIGVxIHs/fX0ge3NldCBzMSBbc3RyaW5nIGluZGV4ICRzdGF0ZSAxXX0gXAorCWVsc2VpZiB7JHMxIGVxIHtffX0ge3NldCBzMSBffQorCisJaWYgeyRzMCBlcSB7QX0gJiYgJHMxIGVxIHtffSAmJiAkaGVhZF9pbmZvIGVxIHt9fSB7CisJCXNldCBoZWFkX2luZm8gW2xpc3QgMCAkbnVsbF9zaGExXQorCX0gZWxzZWlmIHskczAgbmUge199ICYmIFtzdHJpbmcgaW5kZXggJHN0YXRlIDBdIGVxIHtffQorCQkmJiAkaGVhZF9pbmZvIGVxIHt9fSB7CisJCXNldCBoZWFkX2luZm8gJGluZGV4X2luZm8KKwl9IGVsc2VpZiB7JHMwIGVxIHtffSAmJiBbc3RyaW5nIGluZGV4ICRzdGF0ZSAwXSBuZSB7X319IHsKKwkJc2V0IGluZGV4X2luZm8gJGhlYWRfaW5mbworCQlzZXQgaGVhZF9pbmZvIHt9CisJfQorCisJc2V0IGZpbGVfc3RhdGVzKCRwYXRoKSBbbGlzdCAkczAkczEgJGljb24gXAorCQkkaGVhZF9pbmZvICRpbmRleF9pbmZvIFwKKwkJXQorCXJldHVybiAkc3RhdGUKK30KKworcHJvYyBkaXNwbGF5X2ZpbGVfaGVscGVyIHt3IHBhdGggaWNvbl9uYW1lIG9sZF9tIG5ld19tfSB7CisJZ2xvYmFsIGZpbGVfbGlzdHMKKworCWlmIHskbmV3X20gZXEge199fSB7CisJCXNldCBsbm8gW2xzZWFyY2ggLXNvcnRlZCAtZXhhY3QgJGZpbGVfbGlzdHMoJHcpICRwYXRoXQorCQlpZiB7JGxubyA+PSAwfSB7CisJCQlzZXQgZmlsZV9saXN0cygkdykgW2xyZXBsYWNlICRmaWxlX2xpc3RzKCR3KSAkbG5vICRsbm9dCisJCQlpbmNyIGxubworCQkJJHcgY29uZiAtc3RhdGUgbm9ybWFsCisJCQkkdyBkZWxldGUgJGxuby4wIFtleHByIHskbG5vICsgMX1dLjAKKwkJCSR3IGNvbmYgLXN0YXRlIGRpc2FibGVkCisJCX0KKwl9IGVsc2VpZiB7JG9sZF9tIGVxIHtffSAmJiAkbmV3X20gbmUge199fSB7CisJCWxhcHBlbmQgZmlsZV9saXN0cygkdykgJHBhdGgKKwkJc2V0IGZpbGVfbGlzdHMoJHcpIFtsc29ydCAtdW5pcXVlICRmaWxlX2xpc3RzKCR3KV0KKwkJc2V0IGxubyBbbHNlYXJjaCAtc29ydGVkIC1leGFjdCAkZmlsZV9saXN0cygkdykgJHBhdGhdCisJCWluY3IgbG5vCisJCSR3IGNvbmYgLXN0YXRlIG5vcm1hbAorCQkkdyBpbWFnZSBjcmVhdGUgJGxuby4wIFwKKwkJCS1hbGlnbiBjZW50ZXIgLXBhZHggNSAtcGFkeSAxIFwKKwkJCS1uYW1lICRpY29uX25hbWUgXAorCQkJLWltYWdlIFttYXBpY29uICR3ICRuZXdfbSAkcGF0aF0KKwkJJHcgaW5zZXJ0ICRsbm8uMSAiW2VzY2FwZV9wYXRoICRwYXRoXVxuIgorCQkkdyBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCX0gZWxzZWlmIHskb2xkX20gbmUgJG5ld19tfSB7CisJCSR3IGNvbmYgLXN0YXRlIG5vcm1hbAorCQkkdyBpbWFnZSBjb25mICRpY29uX25hbWUgLWltYWdlIFttYXBpY29uICR3ICRuZXdfbSAkcGF0aF0KKwkJJHcgY29uZiAtc3RhdGUgZGlzYWJsZWQKKwl9Cit9CisKK3Byb2MgZGlzcGxheV9maWxlIHtwYXRoIHN0YXRlfSB7CisJZ2xvYmFsIGZpbGVfc3RhdGVzIHNlbGVjdGVkX3BhdGhzCisJZ2xvYmFsIHVpX2luZGV4IHVpX3dvcmtkaXIKKworCXNldCBvbGRfbSBbbWVyZ2Vfc3RhdGUgJHBhdGggJHN0YXRlXQorCXNldCBzICRmaWxlX3N0YXRlcygkcGF0aCkKKwlzZXQgbmV3X20gW2xpbmRleCAkcyAwXQorCXNldCBpY29uX25hbWUgW2xpbmRleCAkcyAxXQorCisJc2V0IG8gW3N0cmluZyBpbmRleCAkb2xkX20gMF0KKwlzZXQgbiBbc3RyaW5nIGluZGV4ICRuZXdfbSAwXQorCWlmIHskbyBlcSB7VX19IHsKKwkJc2V0IG8gXworCX0KKwlpZiB7JG4gZXEge1V9fSB7CisJCXNldCBuIF8KKwl9CisJZGlzcGxheV9maWxlX2hlbHBlcgkkdWlfaW5kZXggJHBhdGggJGljb25fbmFtZSAkbyAkbgorCisJaWYge1tzdHJpbmcgaW5kZXggJG9sZF9tIDBdIGVxIHtVfX0geworCQlzZXQgbyBVCisJfSBlbHNlIHsKKwkJc2V0IG8gW3N0cmluZyBpbmRleCAkb2xkX20gMV0KKwl9CisJaWYge1tzdHJpbmcgaW5kZXggJG5ld19tIDBdIGVxIHtVfX0geworCQlzZXQgbiBVCisJfSBlbHNlIHsKKwkJc2V0IG4gW3N0cmluZyBpbmRleCAkbmV3X20gMV0KKwl9CisJZGlzcGxheV9maWxlX2hlbHBlcgkkdWlfd29ya2RpciAkcGF0aCAkaWNvbl9uYW1lICRvICRuCisKKwlpZiB7JG5ld19tIGVxIHtfX319IHsKKwkJdW5zZXQgZmlsZV9zdGF0ZXMoJHBhdGgpCisJCWNhdGNoIHt1bnNldCBzZWxlY3RlZF9wYXRocygkcGF0aCl9CisJfQorfQorCitwcm9jIGRpc3BsYXlfYWxsX2ZpbGVzX2hlbHBlciB7dyBwYXRoIGljb25fbmFtZSBtfSB7CisJZ2xvYmFsIGZpbGVfbGlzdHMKKworCWxhcHBlbmQgZmlsZV9saXN0cygkdykgJHBhdGgKKwlzZXQgbG5vIFtleHByIHtbbGluZGV4IFtzcGxpdCBbJHcgaW5kZXggZW5kXSAuXSAwXSAtIDF9XQorCSR3IGltYWdlIGNyZWF0ZSBlbmQgXAorCQktYWxpZ24gY2VudGVyIC1wYWR4IDUgLXBhZHkgMSBcCisJCS1uYW1lICRpY29uX25hbWUgXAorCQktaW1hZ2UgW21hcGljb24gJHcgJG0gJHBhdGhdCisJJHcgaW5zZXJ0IGVuZCAiW2VzY2FwZV9wYXRoICRwYXRoXVxuIgorfQorCitzZXQgZmlsZXNfd2FybmluZyAwCitwcm9jIGRpc3BsYXlfYWxsX2ZpbGVzIHt9IHsKKwlnbG9iYWwgdWlfaW5kZXggdWlfd29ya2RpcgorCWdsb2JhbCBmaWxlX3N0YXRlcyBmaWxlX2xpc3RzCisJZ2xvYmFsIGxhc3RfY2xpY2tlZAorCWdsb2JhbCBmaWxlc193YXJuaW5nCisKKwkkdWlfaW5kZXggY29uZiAtc3RhdGUgbm9ybWFsCisJJHVpX3dvcmtkaXIgY29uZiAtc3RhdGUgbm9ybWFsCisKKwkkdWlfaW5kZXggZGVsZXRlIDAuMCBlbmQKKwkkdWlfd29ya2RpciBkZWxldGUgMC4wIGVuZAorCXNldCBsYXN0X2NsaWNrZWQge30KKworCXNldCBmaWxlX2xpc3RzKCR1aV9pbmRleCkgW2xpc3RdCisJc2V0IGZpbGVfbGlzdHMoJHVpX3dvcmtkaXIpIFtsaXN0XQorCisJc2V0IHRvX2Rpc3BsYXkgW2xzb3J0IFthcnJheSBuYW1lcyBmaWxlX3N0YXRlc11dCisJc2V0IGRpc3BsYXlfbGltaXQgW2dldF9jb25maWcgZ3VpLm1heGZpbGVzZGlzcGxheWVkXQorCXNldCBkaXNwbGF5ZWQgMAorCWZvcmVhY2ggcGF0aCAkdG9fZGlzcGxheSB7CisJCXNldCBzICRmaWxlX3N0YXRlcygkcGF0aCkKKwkJc2V0IG0gW2xpbmRleCAkcyAwXQorCQlzZXQgaWNvbl9uYW1lIFtsaW5kZXggJHMgMV0KKworCQlpZiB7JGRpc3BsYXllZCA+ICRkaXNwbGF5X2xpbWl0ICYmIFtzdHJpbmcgaW5kZXggJG0gMV0gZXEge099IH0geworCQkJaWYgeyEkZmlsZXNfd2FybmluZ30geworCQkJCSMgZG8gbm90IHJlcGVhdGVkbHkgd2FybjoKKwkJCQlzZXQgZmlsZXNfd2FybmluZyAxCisJCQkJaW5mb19wb3B1cCBbbWMgIkRpc3BsYXkgbGltaXQgKGd1aS5tYXhmaWxlc2Rpc3BsYXllZCA9ICVzKSByZWFjaGVkLCBub3Qgc2hvd2luZyBhbGwgJXMgZmlsZXMuIiBcCisJCQkJCSRkaXNwbGF5X2xpbWl0IFtsbGVuZ3RoICR0b19kaXNwbGF5XV0KKwkJCX0KKwkJCWNvbnRpbnVlCisJCX0KKworCQlzZXQgcyBbc3RyaW5nIGluZGV4ICRtIDBdCisJCWlmIHskcyBuZSB7VX0gJiYgJHMgbmUge199fSB7CisJCQlkaXNwbGF5X2FsbF9maWxlc19oZWxwZXIgJHVpX2luZGV4ICRwYXRoIFwKKwkJCQkkaWNvbl9uYW1lICRzCisJCX0KKworCQlpZiB7W3N0cmluZyBpbmRleCAkbSAwXSBlcSB7VX19IHsKKwkJCXNldCBzIFUKKwkJfSBlbHNlIHsKKwkJCXNldCBzIFtzdHJpbmcgaW5kZXggJG0gMV0KKwkJfQorCQlpZiB7JHMgbmUge199fSB7CisJCQlkaXNwbGF5X2FsbF9maWxlc19oZWxwZXIgJHVpX3dvcmtkaXIgJHBhdGggXAorCQkJCSRpY29uX25hbWUgJHMKKwkJCWluY3IgZGlzcGxheWVkCisJCX0KKwl9CisKKwkkdWlfaW5kZXggY29uZiAtc3RhdGUgZGlzYWJsZWQKKwkkdWlfd29ya2RpciBjb25mIC1zdGF0ZSBkaXNhYmxlZAorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgaWNvbnMKKworc2V0IGZpbGVtYXNrIHsKKyNkZWZpbmUgbWFza193aWR0aCAxNAorI2RlZmluZSBtYXNrX2hlaWdodCAxNQorc3RhdGljIHVuc2lnbmVkIGNoYXIgbWFza19iaXRzW10gPSB7CisgICAweGZlLCAweDFmLCAweGZlLCAweDFmLCAweGZlLCAweDFmLCAweGZlLCAweDFmLCAweGZlLCAweDFmLCAweGZlLCAweDFmLAorICAgMHhmZSwgMHgxZiwgMHhmZSwgMHgxZiwgMHhmZSwgMHgxZiwgMHhmZSwgMHgxZiwgMHhmZSwgMHgxZiwgMHhmZSwgMHgxZiwKKyAgIDB4ZmUsIDB4MWYsIDB4ZmUsIDB4MWYsIDB4ZmUsIDB4MWZ9OworfQorCitpbWFnZSBjcmVhdGUgYml0bWFwIGZpbGVfcGxhaW4gLWJhY2tncm91bmQgd2hpdGUgLWZvcmVncm91bmQgYmxhY2sgLWRhdGEgeworI2RlZmluZSBwbGFpbl93aWR0aCAxNAorI2RlZmluZSBwbGFpbl9oZWlnaHQgMTUKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHBsYWluX2JpdHNbXSA9IHsKKyAgIDB4ZmUsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDIsIDB4MDUsIDB4MDIsIDB4MDksIDB4MDIsIDB4MWYsIDB4MDIsIDB4MTAsCisgICAweDAyLCAweDEwLCAweDAyLCAweDEwLCAweDAyLCAweDEwLCAweDAyLCAweDEwLCAweDAyLCAweDEwLCAweDAyLCAweDEwLAorICAgMHgwMiwgMHgxMCwgMHgwMiwgMHgxMCwgMHhmZSwgMHgxZn07Cit9IC1tYXNrZGF0YSAkZmlsZW1hc2sKKworaW1hZ2UgY3JlYXRlIGJpdG1hcCBmaWxlX21vZCAtYmFja2dyb3VuZCB3aGl0ZSAtZm9yZWdyb3VuZCBibHVlIC1kYXRhIHsKKyNkZWZpbmUgbW9kX3dpZHRoIDE0CisjZGVmaW5lIG1vZF9oZWlnaHQgMTUKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIG1vZF9iaXRzW10gPSB7CisgICAweGZlLCAweDAxLCAweDAyLCAweDAzLCAweDdhLCAweDA1LCAweDAyLCAweDA5LCAweDdhLCAweDFmLCAweDAyLCAweDEwLAorICAgMHhmYSwgMHgxNywgMHgwMiwgMHgxMCwgMHhmYSwgMHgxNywgMHgwMiwgMHgxMCwgMHhmYSwgMHgxNywgMHgwMiwgMHgxMCwKKyAgIDB4ZmEsIDB4MTcsIDB4MDIsIDB4MTAsIDB4ZmUsIDB4MWZ9OworfSAtbWFza2RhdGEgJGZpbGVtYXNrCisKK2ltYWdlIGNyZWF0ZSBiaXRtYXAgZmlsZV9mdWxsdGljayAtYmFja2dyb3VuZCB3aGl0ZSAtZm9yZWdyb3VuZCAiIzAwNzAwMCIgLWRhdGEgeworI2RlZmluZSBmaWxlX2Z1bGx0aWNrX3dpZHRoIDE0CisjZGVmaW5lIGZpbGVfZnVsbHRpY2tfaGVpZ2h0IDE1CitzdGF0aWMgdW5zaWduZWQgY2hhciBmaWxlX2Z1bGx0aWNrX2JpdHNbXSA9IHsKKyAgIDB4ZmUsIDB4MDEsIDB4MDIsIDB4MWEsIDB4MDIsIDB4MGMsIDB4MDIsIDB4MGMsIDB4MDIsIDB4MTYsIDB4MDIsIDB4MTYsCisgICAweDAyLCAweDEzLCAweDAwLCAweDEzLCAweDg2LCAweDExLCAweDhjLCAweDExLCAweGQ4LCAweDEwLCAweGYyLCAweDEwLAorICAgMHg2MiwgMHgxMCwgMHgwMiwgMHgxMCwgMHhmZSwgMHgxZn07Cit9IC1tYXNrZGF0YSAkZmlsZW1hc2sKKworaW1hZ2UgY3JlYXRlIGJpdG1hcCBmaWxlX3F1ZXN0aW9uIC1iYWNrZ3JvdW5kIHdoaXRlIC1mb3JlZ3JvdW5kIGJsYWNrIC1kYXRhIHsKKyNkZWZpbmUgZmlsZV9xdWVzdGlvbl93aWR0aCAxNAorI2RlZmluZSBmaWxlX3F1ZXN0aW9uX2hlaWdodCAxNQorc3RhdGljIHVuc2lnbmVkIGNoYXIgZmlsZV9xdWVzdGlvbl9iaXRzW10gPSB7CisgICAweGZlLCAweDAxLCAweDAyLCAweDAyLCAweGUyLCAweDA0LCAweGYyLCAweDA5LCAweDFhLCAweDFiLCAweDBhLCAweDEzLAorICAgMHg4MiwgMHgxMSwgMHhjMiwgMHgxMCwgMHg2MiwgMHgxMCwgMHg2MiwgMHgxMCwgMHgwMiwgMHgxMCwgMHg2MiwgMHgxMCwKKyAgIDB4NjIsIDB4MTAsIDB4MDIsIDB4MTAsIDB4ZmUsIDB4MWZ9OworfSAtbWFza2RhdGEgJGZpbGVtYXNrCisKK2ltYWdlIGNyZWF0ZSBiaXRtYXAgZmlsZV9yZW1vdmVkIC1iYWNrZ3JvdW5kIHdoaXRlIC1mb3JlZ3JvdW5kIHJlZCAtZGF0YSB7CisjZGVmaW5lIGZpbGVfcmVtb3ZlZF93aWR0aCAxNAorI2RlZmluZSBmaWxlX3JlbW92ZWRfaGVpZ2h0IDE1CitzdGF0aWMgdW5zaWduZWQgY2hhciBmaWxlX3JlbW92ZWRfYml0c1tdID0geworICAgMHhmZSwgMHgwMSwgMHgwMiwgMHgwMywgMHgwMiwgMHgwNSwgMHgwMiwgMHgwOSwgMHgwMiwgMHgxZiwgMHgwMiwgMHgxMCwKKyAgIDB4MWEsIDB4MTYsIDB4MzIsIDB4MTMsIDB4ZTIsIDB4MTEsIDB4YzIsIDB4MTAsIDB4ZTIsIDB4MTEsIDB4MzIsIDB4MTMsCisgICAweDFhLCAweDE2LCAweDAyLCAweDEwLCAweGZlLCAweDFmfTsKK30gLW1hc2tkYXRhICRmaWxlbWFzaworCitpbWFnZSBjcmVhdGUgYml0bWFwIGZpbGVfbWVyZ2UgLWJhY2tncm91bmQgd2hpdGUgLWZvcmVncm91bmQgYmx1ZSAtZGF0YSB7CisjZGVmaW5lIGZpbGVfbWVyZ2Vfd2lkdGggMTQKKyNkZWZpbmUgZmlsZV9tZXJnZV9oZWlnaHQgMTUKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGZpbGVfbWVyZ2VfYml0c1tdID0geworICAgMHhmZSwgMHgwMSwgMHgwMiwgMHgwMywgMHg2MiwgMHgwNSwgMHg2MiwgMHgwOSwgMHg2MiwgMHgxZiwgMHg2MiwgMHgxMCwKKyAgIDB4ZmEsIDB4MTEsIDB4ZjIsIDB4MTAsIDB4NjIsIDB4MTAsIDB4MDIsIDB4MTAsIDB4ZmEsIDB4MTcsIDB4MDIsIDB4MTAsCisgICAweGZhLCAweDE3LCAweDAyLCAweDEwLCAweGZlLCAweDFmfTsKK30gLW1hc2tkYXRhICRmaWxlbWFzaworCitpbWFnZSBjcmVhdGUgYml0bWFwIGZpbGVfc3RhdGVjaGFuZ2UgLWJhY2tncm91bmQgd2hpdGUgLWZvcmVncm91bmQgZ3JlZW4gLWRhdGEgeworI2RlZmluZSBmaWxlX3N0YXRlY2hhbmdlX3dpZHRoIDE0CisjZGVmaW5lIGZpbGVfc3RhdGVjaGFuZ2VfaGVpZ2h0IDE1CitzdGF0aWMgdW5zaWduZWQgY2hhciBmaWxlX3N0YXRlY2hhbmdlX2JpdHNbXSA9IHsKKyAgIDB4ZmUsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDIsIDB4MDUsIDB4MDIsIDB4MDksIDB4MDIsIDB4MWYsIDB4NjIsIDB4MTAsCisgICAweDYyLCAweDEwLCAweGJhLCAweDExLCAweGJhLCAweDExLCAweDYyLCAweDEwLCAweDYyLCAweDEwLCAweDAyLCAweDEwLAorICAgMHgwMiwgMHgxMCwgMHgwMiwgMHgxMCwgMHhmZSwgMHgxZn07Cit9IC1tYXNrZGF0YSAkZmlsZW1hc2sKKworc2V0IHVpX2luZGV4IC52cGFuZS5maWxlcy5pbmRleC5saXN0CitzZXQgdWlfd29ya2RpciAudnBhbmUuZmlsZXMud29ya2Rpci5saXN0CisKK3NldCBhbGxfaWNvbnMoXyR1aV9pbmRleCkgICBmaWxlX3BsYWluCitzZXQgYWxsX2ljb25zKEEkdWlfaW5kZXgpICAgZmlsZV9wbGFpbgorc2V0IGFsbF9pY29ucyhNJHVpX2luZGV4KSAgIGZpbGVfZnVsbHRpY2sKK3NldCBhbGxfaWNvbnMoRCR1aV9pbmRleCkgICBmaWxlX3JlbW92ZWQKK3NldCBhbGxfaWNvbnMoVSR1aV9pbmRleCkgICBmaWxlX21lcmdlCitzZXQgYWxsX2ljb25zKFQkdWlfaW5kZXgpICAgZmlsZV9zdGF0ZWNoYW5nZQorCitzZXQgYWxsX2ljb25zKF8kdWlfd29ya2RpcikgZmlsZV9wbGFpbgorc2V0IGFsbF9pY29ucyhNJHVpX3dvcmtkaXIpIGZpbGVfbW9kCitzZXQgYWxsX2ljb25zKEQkdWlfd29ya2RpcikgZmlsZV9xdWVzdGlvbgorc2V0IGFsbF9pY29ucyhVJHVpX3dvcmtkaXIpIGZpbGVfbWVyZ2UKK3NldCBhbGxfaWNvbnMoTyR1aV93b3JrZGlyKSBmaWxlX3BsYWluCitzZXQgYWxsX2ljb25zKFQkdWlfd29ya2RpcikgZmlsZV9zdGF0ZWNoYW5nZQorCitzZXQgbWF4X3N0YXR1c19kZXNjIDAKK2ZvcmVhY2ggaSB7CisJCXtfXyB7bWMgIlVubW9kaWZpZWQifX0KKworCQl7X00ge21jICJNb2RpZmllZCwgbm90IHN0YWdlZCJ9fQorCQl7TV8ge21jICJTdGFnZWQgZm9yIGNvbW1pdCJ9fQorCQl7TU0ge21jICJQb3J0aW9ucyBzdGFnZWQgZm9yIGNvbW1pdCJ9fQorCQl7TUQge21jICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyJ9fQorCisJCXtfVCB7bWMgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIn19CisJCXtNVCB7bWMgIkZpbGUgdHlwZSBjaGFuZ2VkLCBvbGQgdHlwZSBzdGFnZWQgZm9yIGNvbW1pdCJ9fQorCQl7QVQge21jICJGaWxlIHR5cGUgY2hhbmdlZCwgb2xkIHR5cGUgc3RhZ2VkIGZvciBjb21taXQifX0KKwkJe1RfIHttYyAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCJ9fQorCQl7VE0ge21jICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgbW9kaWZpY2F0aW9uIG5vdCBzdGFnZWQifX0KKwkJe1REIHttYyAiRmlsZSB0eXBlIGNoYW5nZSBzdGFnZWQsIGZpbGUgbWlzc2luZyJ9fQorCisJCXtfTyB7bWMgIlVudHJhY2tlZCwgbm90IHN0YWdlZCJ9fQorCQl7QV8ge21jICJTdGFnZWQgZm9yIGNvbW1pdCJ9fQorCQl7QU0ge21jICJQb3J0aW9ucyBzdGFnZWQgZm9yIGNvbW1pdCJ9fQorCQl7QUQge21jICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyJ9fQorCisJCXtfRCB7bWMgIk1pc3NpbmcifX0KKwkJe0RfIHttYyAiU3RhZ2VkIGZvciByZW1vdmFsIn19CisJCXtETyB7bWMgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCJ9fQorCisJCXtfVSB7bWMgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24ifX0KKwkJe1VfIHttYyAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiJ9fQorCQl7VVUge21jICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIn19CisJCXtVTSB7bWMgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24ifX0KKwkJe1VEIHttYyAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiJ9fQorCQl7VVQge21jICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIn19CisJfSB7CisJc2V0IHRleHQgW2V2YWwgW2xpbmRleCAkaSAxXV0KKwlpZiB7JG1heF9zdGF0dXNfZGVzYyA8IFtzdHJpbmcgbGVuZ3RoICR0ZXh0XX0geworCQlzZXQgbWF4X3N0YXR1c19kZXNjIFtzdHJpbmcgbGVuZ3RoICR0ZXh0XQorCX0KKwlzZXQgYWxsX2Rlc2NzKFtsaW5kZXggJGkgMF0pICR0ZXh0Cit9Cit1bnNldCBpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyB1dGlsCisKK3Byb2Mgc2Nyb2xsYmFyMm1hbnkge2xpc3QgbW9kZSBhcmdzfSB7CisJZm9yZWFjaCB3ICRsaXN0IHtldmFsICR3ICRtb2RlICRhcmdzfQorfQorCitwcm9jIG1hbnkyc2Nyb2xsYmFyIHtsaXN0IG1vZGUgc2IgdG9wIGJvdHRvbX0geworCSRzYiBzZXQgJHRvcCAkYm90dG9tCisJZm9yZWFjaCB3ICRsaXN0IHskdyAkbW9kZSBtb3ZldG8gJHRvcH0KK30KKworcHJvYyBpbmNyX2ZvbnRfc2l6ZSB7Zm9udCB7YW10IDF9fSB7CisJc2V0IHN6IFtmb250IGNvbmZpZ3VyZSAkZm9udCAtc2l6ZV0KKwlpbmNyIHN6ICRhbXQKKwlmb250IGNvbmZpZ3VyZSAkZm9udCAtc2l6ZSAkc3oKKwlmb250IGNvbmZpZ3VyZSAke2ZvbnR9Ym9sZCAtc2l6ZSAkc3oKKwlmb250IGNvbmZpZ3VyZSAke2ZvbnR9aXRhbGljIC1zaXplICRzegorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgdWkgY29tbWFuZHMKKworc2V0IHN0YXJ0aW5nX2dpdGtfbXNnIFttYyAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiJdCisKK3Byb2MgZG9fZ2l0ayB7cmV2cyB7aXNfc3VibW9kdWxlIGZhbHNlfX0geworCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aCBmaWxlX3N0YXRlcyBjdXJyZW50X2RpZmZfc2lkZSB1aV9pbmRleAorCWdsb2JhbCBfZ2l0ZGlyIF9naXR3b3JrdHJlZQorCisJIyAtLSBBbHdheXMgc3RhcnQgZ2l0ayB0aHJvdWdoIHdoYXRldmVyIHdlIHdlcmUgbG9hZGVkIHdpdGguICBUaGlzCisJIyAgICBsZXRzIHVzIGJ5cGFzcyB1c2luZyBzaGVsbCBwcm9jZXNzIG9uIFdpbmRvd3Mgc3lzdGVtcy4KKwkjCisJc2V0IGV4ZSBbX3doaWNoIGdpdGsgLXNjcmlwdF0KKwlzZXQgY21kIFtsaXN0IFtpbmZvIG5hbWVvZmV4ZWN1dGFibGVdICRleGVdCisJaWYgeyRleGUgZXEge319IHsKKwkJZXJyb3JfcG9wdXAgW21jICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCJdCisJfSBlbHNlIHsKKwkJZ2xvYmFsIGVudgorCisJCXNldCBwd2QgW3B3ZF0KKworCQlpZiB7ISRpc19zdWJtb2R1bGV9IHsKKwkJCWlmIHshW2lzX2JhcmVdfSB7CisJCQkJY2QgJF9naXR3b3JrdHJlZQorCQkJfQorCQl9IGVsc2UgeworCQkJY2QgJGN1cnJlbnRfZGlmZl9wYXRoCisJCQlpZiB7JHJldnMgZXEgey0tfX0geworCQkJCXNldCBzICRmaWxlX3N0YXRlcygkY3VycmVudF9kaWZmX3BhdGgpCisJCQkJc2V0IG9sZF9zaGExIHt9CisJCQkJc2V0IG5ld19zaGExIHt9CisJCQkJc3dpdGNoIC1nbG9iIC0tIFtsaW5kZXggJHMgMF0geworCQkJCU1fIHsgc2V0IG9sZF9zaGExIFtsaW5kZXggW2xpbmRleCAkcyAyXSAxXSB9CisJCQkJX00geyBzZXQgb2xkX3NoYTEgW2xpbmRleCBbbGluZGV4ICRzIDNdIDFdIH0KKwkJCQlNTSB7CisJCQkJCWlmIHskY3VycmVudF9kaWZmX3NpZGUgZXEgJHVpX2luZGV4fSB7CisJCQkJCQlzZXQgb2xkX3NoYTEgW2xpbmRleCBbbGluZGV4ICRzIDJdIDFdCisJCQkJCQlzZXQgbmV3X3NoYTEgW2xpbmRleCBbbGluZGV4ICRzIDNdIDFdCisJCQkJCX0gZWxzZSB7CisJCQkJCQlzZXQgb2xkX3NoYTEgW2xpbmRleCBbbGluZGV4ICRzIDNdIDFdCisJCQkJCX0KKwkJCQl9CisJCQkJfQorCQkJCXNldCByZXZzICRvbGRfc2hhMS4uLiRuZXdfc2hhMQorCQkJfQorCQkJIyBHSVRfRElSIGFuZCBHSVRfV09SS19UUkVFIGZvciB0aGUgc3VibW9kdWxlIGFyZSBub3QgdGhlIG9uZXMKKwkJCSMgd2UndmUgYmVlbiB1c2luZyBmb3IgdGhlIG1haW4gcmVwb3NpdG9yeSwgc28gdW5zZXQgdGhlbS4KKwkJCSMgVE9ETyB3ZSBjb3VsZCBtYWtlIGxpZmUgZWFzaWVyIChzdGFydCB1cCBmYXN0ZXI/KSBmb3IgZ2l0aworCQkJIyBieSBzZXR0aW5nIHRoZXNlIHRvIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMgdG8gYWxsb3cgZ2l0aworCQkJIyB0byBza2lwIHRoZSBoZXVyaXN0aWNzIHRvIGZpbmQgdGhlaXIgcHJvcGVyIHZhbHVlCisJCQl1bnNldCBlbnYoR0lUX0RJUikKKwkJCXVuc2V0IGVudihHSVRfV09SS19UUkVFKQorCQl9CisJCWV2YWwgZXhlYyAkY21kICRyZXZzICItLSIgIi0tIiAmCisKKwkJc2V0IGVudihHSVRfRElSKSAkX2dpdGRpcgorCQlzZXQgZW52KEdJVF9XT1JLX1RSRUUpICRfZ2l0d29ya3RyZWUKKwkJY2QgJHB3ZAorCisJCXVpX3N0YXR1cyAkOjpzdGFydGluZ19naXRrX21zZworCQlhZnRlciAxMDAwMCB7CisJCQl1aV9yZWFkeSAkc3RhcnRpbmdfZ2l0a19tc2cKKwkJfQorCX0KK30KKworcHJvYyBkb19naXRfZ3VpIHt9IHsKKwlnbG9iYWwgY3VycmVudF9kaWZmX3BhdGgKKworCSMgLS0gQWx3YXlzIHN0YXJ0IGdpdCBndWkgdGhyb3VnaCB3aGF0ZXZlciB3ZSB3ZXJlIGxvYWRlZCB3aXRoLiAgVGhpcworCSMgICAgbGV0cyB1cyBieXBhc3MgdXNpbmcgc2hlbGwgcHJvY2VzcyBvbiBXaW5kb3dzIHN5c3RlbXMuCisJIworCXNldCBleGUgW2xpc3QgW193aGljaCBnaXRdXQorCWlmIHskZXhlIGVxIHt9fSB7CisJCWVycm9yX3BvcHVwIFttYyAiQ291bGRuJ3QgZmluZCBnaXQgZ3VpIGluIFBBVEgiXQorCX0gZWxzZSB7CisJCWdsb2JhbCBlbnYKKwkJZ2xvYmFsIF9naXRkaXIgX2dpdHdvcmt0cmVlCisKKwkJIyBzZWUgbm90ZSBpbiBkb19naXRrIGFib3V0IHVuc2V0dGluZyB0aGVzZSB2YXJzIHdoZW4KKwkJIyBydW5uaW5nIHRvb2xzIGluIGEgc3VibW9kdWxlCisJCXVuc2V0IGVudihHSVRfRElSKQorCQl1bnNldCBlbnYoR0lUX1dPUktfVFJFRSkKKworCQlzZXQgcHdkIFtwd2RdCisJCWNkICRjdXJyZW50X2RpZmZfcGF0aAorCisJCWV2YWwgZXhlYyAkZXhlIGd1aSAmCisKKwkJc2V0IGVudihHSVRfRElSKSAkX2dpdGRpcgorCQlzZXQgZW52KEdJVF9XT1JLX1RSRUUpICRfZ2l0d29ya3RyZWUKKwkJY2QgJHB3ZAorCisJCXVpX3N0YXR1cyAkOjpzdGFydGluZ19naXRrX21zZworCQlhZnRlciAxMDAwMCB7CisJCQl1aV9yZWFkeSAkc3RhcnRpbmdfZ2l0a19tc2cKKwkJfQorCX0KK30KKworcHJvYyBkb19leHBsb3JlIHt9IHsKKwlnbG9iYWwgX2dpdHdvcmt0cmVlCisJc2V0IGV4cGxvcmVyIHt9CisJaWYge1tpc19DeWd3aW5dIHx8IFtpc19XaW5kb3dzXX0geworCQlzZXQgZXhwbG9yZXIgImV4cGxvcmVyLmV4ZSIKKwl9IGVsc2VpZiB7W2lzX01hY09TWF19IHsKKwkJc2V0IGV4cGxvcmVyICJvcGVuIgorCX0gZWxzZSB7CisJCSMgZnJlZWRlc2t0b3Aub3JnLWNvbmZvcm1pbmcgc3lzdGVtIGlzIG91ciBiZXN0IHNob3QKKwkJc2V0IGV4cGxvcmVyICJ4ZGctb3BlbiIKKwl9CisJZXZhbCBleGVjICRleHBsb3JlciBbbGlzdCBbZmlsZSBuYXRpdmVuYW1lICRfZ2l0d29ya3RyZWVdXSAmCit9CisKK3NldCBpc19xdWl0dGluZyAwCitzZXQgcmV0X2NvZGUgICAgMQorCitwcm9jIHRlcm1pbmF0ZV9tZSB7d2lufSB7CisJZ2xvYmFsIHJldF9jb2RlCisJaWYgeyR3aW4gbmUgey59fSByZXR1cm4KKwlleGl0ICRyZXRfY29kZQorfQorCitwcm9jIGRvX3F1aXQge3tyYyB7MX19fSB7CisJZ2xvYmFsIHVpX2NvbW0gaXNfcXVpdHRpbmcgcmVwb19jb25maWcgY29tbWl0X3R5cGUKKwlnbG9iYWwgR0lUR1VJX0JDS19leGlzdHMgR0lUR1VJX0JDS19pCisJZ2xvYmFsIHVpX2NvbW1fc3BlbGwKKwlnbG9iYWwgcmV0X2NvZGUgdXNlX3R0aworCisJaWYgeyRpc19xdWl0dGluZ30gcmV0dXJuCisJc2V0IGlzX3F1aXR0aW5nIDEKKworCWlmIHtbd2luZm8gZXhpc3RzICR1aV9jb21tXX0geworCQkjIC0tIFN0YXNoIG91ciBjdXJyZW50IGNvbW1pdCBidWZmZXIuCisJCSMKKwkJc2V0IHNhdmUgW2dpdGRpciBHSVRHVUlfTVNHXQorCQlpZiB7JEdJVEdVSV9CQ0tfZXhpc3RzICYmICFbJHVpX2NvbW0gZWRpdCBtb2RpZmllZF19IHsKKwkJCWZpbGUgcmVuYW1lIC1mb3JjZSBbZ2l0ZGlyIEdJVEdVSV9CQ0tdICRzYXZlCisJCQlzZXQgR0lUR1VJX0JDS19leGlzdHMgMAorCQl9IGVsc2UgeworCQkJc2V0IG1zZyBbc3RyaW5nIHRyaW0gWyR1aV9jb21tIGdldCAwLjAgZW5kXV0KKwkJCXJlZ3N1YiAtYWxsIC1saW5lIHtbIFxyXHRdKyR9ICRtc2cge30gbXNnCisJCQlpZiB7KCFbc3RyaW5nIG1hdGNoIGFtZW5kKiAkY29tbWl0X3R5cGVdCisJCQkJfHwgWyR1aV9jb21tIGVkaXQgbW9kaWZpZWRdKQorCQkJCSYmICRtc2cgbmUge319IHsKKwkJCQljYXRjaCB7CisJCQkJCXNldCBmZCBbb3BlbiAkc2F2ZSB3XQorCQkJCQlmY29uZmlndXJlICRmZCAtZW5jb2RpbmcgdXRmLTgKKwkJCQkJcHV0cyAtbm9uZXdsaW5lICRmZCAkbXNnCisJCQkJCWNsb3NlICRmZAorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJY2F0Y2gge2ZpbGUgZGVsZXRlICRzYXZlfQorCQkJfQorCQl9CisKKwkJIyAtLSBDYW5jZWwgb3VyIHNwZWxsY2hlY2tlciBpZiBpdHMgcnVubmluZy4KKwkJIworCQlpZiB7W2luZm8gZXhpc3RzIHVpX2NvbW1fc3BlbGxdfSB7CisJCQkkdWlfY29tbV9zcGVsbCBzdG9wCisJCX0KKworCQkjIC0tIFJlbW92ZSBvdXIgZWRpdG9yIGJhY2t1cCwgaXRzIG5vdCBuZWVkZWQuCisJCSMKKwkJYWZ0ZXIgY2FuY2VsICRHSVRHVUlfQkNLX2kKKwkJaWYgeyRHSVRHVUlfQkNLX2V4aXN0c30geworCQkJY2F0Y2gge2ZpbGUgZGVsZXRlIFtnaXRkaXIgR0lUR1VJX0JDS119CisJCX0KKworCQkjIC0tIFN0YXNoIG91ciBjdXJyZW50IHdpbmRvdyBnZW9tZXRyeSBpbnRvIHRoaXMgcmVwb3NpdG9yeS4KKwkJIworCQlzZXQgY2ZnX3dtc3RhdGUgW3dtIHN0YXRlIC5dCisJCWlmIHtbY2F0Y2gge3NldCByY193bXN0YXRlICRyZXBvX2NvbmZpZyhndWkud21zdGF0ZSl9XX0geworCQkJc2V0IHJjX3dtc3RhdGUge30KKwkJfQorCQlpZiB7JGNmZ193bXN0YXRlIG5lICRyY193bXN0YXRlfSB7CisJCQljYXRjaCB7Z2l0IGNvbmZpZyBndWkud21zdGF0ZSAkY2ZnX3dtc3RhdGV9CisJCX0KKwkJaWYgeyRjZmdfd21zdGF0ZSBlcSB7em9vbWVkfX0geworCQkJIyBvbiBXaW5kb3dzIHdtIGdlb21ldHJ5IHdpbGwgbGllIGFib3V0IHdpbmRvdworCQkJIyBwb3NpdGlvbiAoYnV0IG5vdCBzaXplKSB3aGVuIHdpbmRvdyBpcyB6b29tZWQKKwkJCSMgcmVzdG9yZSB0aGUgd2luZG93IGJlZm9yZSBxdWVyeWluZyB3bSBnZW9tZXRyeQorCQkJd20gc3RhdGUgLiBub3JtYWwKKwkJfQorCQlzZXQgY2ZnX2dlb21ldHJ5IFtsaXN0XQorCQlsYXBwZW5kIGNmZ19nZW9tZXRyeSBbd20gZ2VvbWV0cnkgLl0KKwkJaWYgeyR1c2VfdHRrfSB7CisJCQlsYXBwZW5kIGNmZ19nZW9tZXRyeSBbLnZwYW5lIHNhc2hwb3MgMF0KKwkJCWxhcHBlbmQgY2ZnX2dlb21ldHJ5IFsudnBhbmUuZmlsZXMgc2FzaHBvcyAwXQorCQl9IGVsc2UgeworCQkJbGFwcGVuZCBjZmdfZ2VvbWV0cnkgW2xpbmRleCBbLnZwYW5lIHNhc2ggY29vcmQgMF0gMF0KKwkJCWxhcHBlbmQgY2ZnX2dlb21ldHJ5IFtsaW5kZXggWy52cGFuZS5maWxlcyBzYXNoIGNvb3JkIDBdIDFdCisJCX0KKwkJaWYge1tjYXRjaCB7c2V0IHJjX2dlb21ldHJ5ICRyZXBvX2NvbmZpZyhndWkuZ2VvbWV0cnkpfV19IHsKKwkJCXNldCByY19nZW9tZXRyeSB7fQorCQl9CisJCWlmIHskY2ZnX2dlb21ldHJ5IG5lICRyY19nZW9tZXRyeX0geworCQkJY2F0Y2gge2dpdCBjb25maWcgZ3VpLmdlb21ldHJ5ICRjZmdfZ2VvbWV0cnl9CisJCX0KKwl9CisKKwlzZXQgcmV0X2NvZGUgJHJjCisKKwkjIEJyaWVmbHkgZW5hYmxlIHNlbmQgYWdhaW4sIHdvcmtpbmcgYXJvdW5kIFRrIGJ1ZworCSMgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhdGlkPTExMjk5NyZhaWQ9MTgyMTE3NCZncm91cF9pZD0xMjk5NworCXRrIGFwcG5hbWUgW2FwcG5hbWVdCisKKwlkZXN0cm95IC4KK30KKworcHJvYyBkb19yZXNjYW4ge30geworCXJlc2NhbiB1aV9yZWFkeQorfQorCitwcm9jIHVpX2RvX3Jlc2NhbiB7fSB7CisJcmVzY2FuIHtmb3JjZV9maXJzdF9kaWZmIHVpX3JlYWR5fQorfQorCitwcm9jIGRvX2NvbW1pdCB7fSB7CisJY29tbWl0X3RyZWUKK30KKworcHJvYyBuZXh0X2RpZmYge3thZnRlciB7fX19IHsKKwlnbG9iYWwgbmV4dF9kaWZmX3AgbmV4dF9kaWZmX3cgbmV4dF9kaWZmX2kKKwlzaG93X2RpZmYgJG5leHRfZGlmZl9wICRuZXh0X2RpZmZfdyB7fSB7fSAkYWZ0ZXIKK30KKworcHJvYyBmaW5kX2FuY2hvcl9wb3Mge2xzdCBuYW1lfSB7CisJc2V0IGxpZCBbbHNlYXJjaCAtc29ydGVkIC1leGFjdCAkbHN0ICRuYW1lXQorCisJaWYgeyRsaWQgPT0gLTF9IHsKKwkJc2V0IGxpZCAwCisJCWZvcmVhY2ggbG5hbWUgJGxzdCB7CisJCQlpZiB7JGxuYW1lID49ICRuYW1lfSBicmVhaworCQkJaW5jciBsaWQKKwkJfQorCX0KKworCXJldHVybiAkbGlkCit9CisKK3Byb2MgZmluZF9maWxlX2Zyb20ge2ZsaXN0IGlkeCBkZWx0YSBwYXRoIG1tYXNrfSB7CisJZ2xvYmFsIGZpbGVfc3RhdGVzCisKKwlzZXQgbGVuIFtsbGVuZ3RoICRmbGlzdF0KKwl3aGlsZSB7JGlkeCA+PSAwICYmICRpZHggPCAkbGVufSB7CisJCXNldCBuYW1lIFtsaW5kZXggJGZsaXN0ICRpZHhdCisKKwkJaWYgeyRuYW1lIG5lICRwYXRoICYmIFtpbmZvIGV4aXN0cyBmaWxlX3N0YXRlcygkbmFtZSldfSB7CisJCQlzZXQgc3RhdGUgW2xpbmRleCAkZmlsZV9zdGF0ZXMoJG5hbWUpIDBdCisKKwkJCWlmIHskbW1hc2sgZXEge30gfHwgW3JlZ2V4cCAkbW1hc2sgJHN0YXRlXX0geworCQkJCXJldHVybiAkaWR4CisJCQl9CisJCX0KKworCQlpbmNyIGlkeCAkZGVsdGEKKwl9CisKKwlyZXR1cm4ge30KK30KKworcHJvYyBmaW5kX25leHRfZGlmZiB7dyBwYXRoIHtsbm8ge319IHttbWFzayB7fX19IHsKKwlnbG9iYWwgbmV4dF9kaWZmX3AgbmV4dF9kaWZmX3cgbmV4dF9kaWZmX2kKKwlnbG9iYWwgZmlsZV9saXN0cyB1aV9pbmRleCB1aV93b3JrZGlyCisKKwlzZXQgZmxpc3QgJGZpbGVfbGlzdHMoJHcpCisJaWYgeyRsbm8gZXEge319IHsKKwkJc2V0IGxubyBbZmluZF9hbmNob3JfcG9zICRmbGlzdCAkcGF0aF0KKwl9IGVsc2UgeworCQlpbmNyIGxubyAtMQorCX0KKworCWlmIHskbW1hc2sgbmUge30gJiYgIVtyZWdleHAgeyheXF4pfChcJCQpfSAkbW1hc2tdfSB7CisJCWlmIHskdyBlcSAkdWlfaW5kZXh9IHsKKwkJCXNldCBtbWFzayAiXiRtbWFzayIKKwkJfSBlbHNlIHsKKwkJCXNldCBtbWFzayAiJG1tYXNrXCQiCisJCX0KKwl9CisKKwlzZXQgaWR4IFtmaW5kX2ZpbGVfZnJvbSAkZmxpc3QgJGxubyAxICRwYXRoICRtbWFza10KKwlpZiB7JGlkeCBlcSB7fX0geworCQlpbmNyIGxubyAtMQorCQlzZXQgaWR4IFtmaW5kX2ZpbGVfZnJvbSAkZmxpc3QgJGxubyAtMSAkcGF0aCAkbW1hc2tdCisJfQorCisJaWYgeyRpZHggbmUge319IHsKKwkJc2V0IG5leHRfZGlmZl93ICR3CisJCXNldCBuZXh0X2RpZmZfcCBbbGluZGV4ICRmbGlzdCAkaWR4XQorCQlzZXQgbmV4dF9kaWZmX2kgW2V4cHIgeyRpZHgrMX1dCisJCXJldHVybiAxCisJfSBlbHNlIHsKKwkJcmV0dXJuIDAKKwl9Cit9CisKK3Byb2MgbmV4dF9kaWZmX2FmdGVyX2FjdGlvbiB7dyBwYXRoIHtsbm8ge319IHttbWFzayB7fX19IHsKKwlnbG9iYWwgY3VycmVudF9kaWZmX3BhdGgKKworCWlmIHskcGF0aCBuZSAkY3VycmVudF9kaWZmX3BhdGh9IHsKKwkJcmV0dXJuIHt9CisJfSBlbHNlaWYge1tmaW5kX25leHRfZGlmZiAkdyAkcGF0aCAkbG5vICRtbWFza119IHsKKwkJcmV0dXJuIHtuZXh0X2RpZmY7fQorCX0gZWxzZSB7CisJCXJldHVybiB7cmVzaG93X2RpZmY7fQorCX0KK30KKworcHJvYyBzZWxlY3RfZmlyc3RfZGlmZiB7YWZ0ZXJ9IHsKKwlnbG9iYWwgdWlfd29ya2RpcgorCisJaWYge1tmaW5kX25leHRfZGlmZiAkdWlfd29ya2RpciB7fSAxIHteXz9VfV0gfHwKKwkgICAgW2ZpbmRfbmV4dF9kaWZmICR1aV93b3JrZGlyIHt9IDEge1teT10kfV19IHsKKwkJbmV4dF9kaWZmICRhZnRlcgorCX0gZWxzZSB7CisJCXVwbGV2ZWwgIzAgJGFmdGVyCisJfQorfQorCitwcm9jIGZvcmNlX2ZpcnN0X2RpZmYge2FmdGVyfSB7CisJZ2xvYmFsIHVpX3dvcmtkaXIgY3VycmVudF9kaWZmX3BhdGggZmlsZV9zdGF0ZXMKKworCWlmIHtbaW5mbyBleGlzdHMgZmlsZV9zdGF0ZXMoJGN1cnJlbnRfZGlmZl9wYXRoKV19IHsKKwkJc2V0IHN0YXRlIFtsaW5kZXggJGZpbGVfc3RhdGVzKCRjdXJyZW50X2RpZmZfcGF0aCkgMF0KKwl9IGVsc2UgeworCQlzZXQgc3RhdGUge09PfQorCX0KKworCXNldCByZXNlbGVjdCAwCisJaWYge1tzdHJpbmcgZmlyc3Qge1V9ICRzdGF0ZV0gPj0gMH0geworCQkjIEFscmVhZHkgYSBjb25mbGljdCwgZG8gbm90aGluZworCX0gZWxzZWlmIHtbZmluZF9uZXh0X2RpZmYgJHVpX3dvcmtkaXIgJGN1cnJlbnRfZGlmZl9wYXRoIHt9IHteXz9VfV19IHsKKwkJc2V0IHJlc2VsZWN0IDEKKwl9IGVsc2VpZiB7W3N0cmluZyBpbmRleCAkc3RhdGUgMV0gbmUge099fSB7CisJCSMgQWxyZWFkeSBhIGRpZmYgJiBubyBjb25mbGljdHMsIGRvIG5vdGhpbmcKKwl9IGVsc2VpZiB7W2ZpbmRfbmV4dF9kaWZmICR1aV93b3JrZGlyICRjdXJyZW50X2RpZmZfcGF0aCB7fSB7W15PXSR9XX0geworCQlzZXQgcmVzZWxlY3QgMQorCX0KKworCWlmIHskcmVzZWxlY3R9IHsKKwkJbmV4dF9kaWZmICRhZnRlcgorCX0gZWxzZSB7CisJCXVwbGV2ZWwgIzAgJGFmdGVyCisJfQorfQorCitwcm9jIHRvZ2dsZV9vcl9kaWZmIHt3IHggeX0geworCWdsb2JhbCBmaWxlX3N0YXRlcyBmaWxlX2xpc3RzIGN1cnJlbnRfZGlmZl9wYXRoIHVpX2luZGV4IHVpX3dvcmtkaXIKKwlnbG9iYWwgbGFzdF9jbGlja2VkIHNlbGVjdGVkX3BhdGhzCisKKwlzZXQgcG9zIFtzcGxpdCBbJHcgaW5kZXggQCR4LCR5XSAuXQorCXNldCBsbm8gW2xpbmRleCAkcG9zIDBdCisJc2V0IGNvbCBbbGluZGV4ICRwb3MgMV0KKwlzZXQgcGF0aCBbbGluZGV4ICRmaWxlX2xpc3RzKCR3KSBbZXhwciB7JGxubyAtIDF9XV0KKwlpZiB7JHBhdGggZXEge319IHsKKwkJc2V0IGxhc3RfY2xpY2tlZCB7fQorCQlyZXR1cm4KKwl9CisKKwlzZXQgbGFzdF9jbGlja2VkIFtsaXN0ICR3ICRsbm9dCisJYXJyYXkgdW5zZXQgc2VsZWN0ZWRfcGF0aHMKKwkkdWlfaW5kZXggdGFnIHJlbW92ZSBpbl9zZWwgMC4wIGVuZAorCSR1aV93b3JrZGlyIHRhZyByZW1vdmUgaW5fc2VsIDAuMCBlbmQKKworCSMgRGV0ZXJtaW5lIHRoZSBzdGF0ZSBvZiB0aGUgZmlsZQorCWlmIHtbaW5mbyBleGlzdHMgZmlsZV9zdGF0ZXMoJHBhdGgpXX0geworCQlzZXQgc3RhdGUgW2xpbmRleCAkZmlsZV9zdGF0ZXMoJHBhdGgpIDBdCisJfSBlbHNlIHsKKwkJc2V0IHN0YXRlIHtfX30KKwl9CisKKwkjIFJlc3RhZ2UgdGhlIGZpbGUsIG9yIHNpbXBseSBzaG93IHRoZSBkaWZmCisJaWYgeyRjb2wgPT0gMCAmJiAkeSA+IDF9IHsKKwkJIyBDb25mbGljdHMgbmVlZCBzcGVjaWFsIGhhbmRsaW5nCisJCWlmIHtbc3RyaW5nIGZpcnN0IHtVfSAkc3RhdGVdID49IDB9IHsKKwkJCSMgJHcgbXVzdCBhbHdheXMgYmUgJHVpX3dvcmtkaXIsIGJ1dC4uLgorCQkJaWYgeyR3IG5lICR1aV93b3JrZGlyfSB7IHNldCBsbm8ge30gfQorCQkJbWVyZ2Vfc3RhZ2Vfd29ya2RpciAkcGF0aCAkbG5vCisJCQlyZXR1cm4KKwkJfQorCisJCWlmIHtbc3RyaW5nIGluZGV4ICRzdGF0ZSAxXSBlcSB7T319IHsKKwkJCXNldCBtbWFzayB7fQorCQl9IGVsc2UgeworCQkJc2V0IG1tYXNrIHtbXk9dfQorCQl9CisKKwkJc2V0IGFmdGVyIFtuZXh0X2RpZmZfYWZ0ZXJfYWN0aW9uICR3ICRwYXRoICRsbm8gJG1tYXNrXQorCisJCWlmIHskdyBlcSAkdWlfaW5kZXh9IHsKKwkJCXVwZGF0ZV9pbmRleGluZm8gXAorCQkJCSJVbnN0YWdpbmcgW3Nob3J0X3BhdGggJHBhdGhdIGZyb20gY29tbWl0IiBcCisJCQkJW2xpc3QgJHBhdGhdIFwKKwkJCQlbY29uY2F0ICRhZnRlciBbbGlzdCB1aV9yZWFkeV1dCisJCX0gZWxzZWlmIHskdyBlcSAkdWlfd29ya2Rpcn0geworCQkJdXBkYXRlX2luZGV4IFwKKwkJCQkiQWRkaW5nIFtzaG9ydF9wYXRoICRwYXRoXSIgXAorCQkJCVtsaXN0ICRwYXRoXSBcCisJCQkJW2NvbmNhdCAkYWZ0ZXIgW2xpc3QgdWlfcmVhZHldXQorCQl9CisJfSBlbHNlIHsKKwkJc2V0IHNlbGVjdGVkX3BhdGhzKCRwYXRoKSAxCisJCXNob3dfZGlmZiAkcGF0aCAkdyAkbG5vCisJfQorfQorCitwcm9jIGFkZF9vbmVfdG9fc2VsZWN0aW9uIHt3IHggeX0geworCWdsb2JhbCBmaWxlX2xpc3RzIGxhc3RfY2xpY2tlZCBzZWxlY3RlZF9wYXRocworCisJc2V0IGxubyBbbGluZGV4IFtzcGxpdCBbJHcgaW5kZXggQCR4LCR5XSAuXSAwXQorCXNldCBwYXRoIFtsaW5kZXggJGZpbGVfbGlzdHMoJHcpIFtleHByIHskbG5vIC0gMX1dXQorCWlmIHskcGF0aCBlcSB7fX0geworCQlzZXQgbGFzdF9jbGlja2VkIHt9CisJCXJldHVybgorCX0KKworCWlmIHskbGFzdF9jbGlja2VkIG5lIHt9CisJCSYmIFtsaW5kZXggJGxhc3RfY2xpY2tlZCAwXSBuZSAkd30geworCQlhcnJheSB1bnNldCBzZWxlY3RlZF9wYXRocworCQlbbGluZGV4ICRsYXN0X2NsaWNrZWQgMF0gdGFnIHJlbW92ZSBpbl9zZWwgMC4wIGVuZAorCX0KKworCXNldCBsYXN0X2NsaWNrZWQgW2xpc3QgJHcgJGxub10KKwlpZiB7W2NhdGNoIHtzZXQgaW5fc2VsICRzZWxlY3RlZF9wYXRocygkcGF0aCl9XX0geworCQlzZXQgaW5fc2VsIDAKKwl9CisJaWYgeyRpbl9zZWx9IHsKKwkJdW5zZXQgc2VsZWN0ZWRfcGF0aHMoJHBhdGgpCisJCSR3IHRhZyByZW1vdmUgaW5fc2VsICRsbm8uMCBbZXhwciB7JGxubyArIDF9XS4wCisJfSBlbHNlIHsKKwkJc2V0IHNlbGVjdGVkX3BhdGhzKCRwYXRoKSAxCisJCSR3IHRhZyBhZGQgaW5fc2VsICRsbm8uMCBbZXhwciB7JGxubyArIDF9XS4wCisJfQorfQorCitwcm9jIGFkZF9yYW5nZV90b19zZWxlY3Rpb24ge3cgeCB5fSB7CisJZ2xvYmFsIGZpbGVfbGlzdHMgbGFzdF9jbGlja2VkIHNlbGVjdGVkX3BhdGhzCisKKwlpZiB7W2xpbmRleCAkbGFzdF9jbGlja2VkIDBdIG5lICR3fSB7CisJCXRvZ2dsZV9vcl9kaWZmICR3ICR4ICR5CisJCXJldHVybgorCX0KKworCXNldCBsbm8gW2xpbmRleCBbc3BsaXQgWyR3IGluZGV4IEAkeCwkeV0gLl0gMF0KKwlzZXQgbGMgW2xpbmRleCAkbGFzdF9jbGlja2VkIDFdCisJaWYgeyRsYyA8ICRsbm99IHsKKwkJc2V0IGJlZ2luICRsYworCQlzZXQgZW5kICRsbm8KKwl9IGVsc2UgeworCQlzZXQgYmVnaW4gJGxubworCQlzZXQgZW5kICRsYworCX0KKworCWZvcmVhY2ggcGF0aCBbbHJhbmdlICRmaWxlX2xpc3RzKCR3KSBcCisJCVtleHByIHskYmVnaW4gLSAxfV0gXAorCQlbZXhwciB7JGVuZCAtIDF9XV0geworCQlzZXQgc2VsZWN0ZWRfcGF0aHMoJHBhdGgpIDEKKwl9CisJJHcgdGFnIGFkZCBpbl9zZWwgJGJlZ2luLjAgW2V4cHIgeyRlbmQgKyAxfV0uMAorfQorCitwcm9jIHNob3dfbW9yZV9jb250ZXh0IHt9IHsKKwlnbG9iYWwgcmVwb19jb25maWcKKwlpZiB7JHJlcG9fY29uZmlnKGd1aS5kaWZmY29udGV4dCkgPCA5OX0geworCQlpbmNyIHJlcG9fY29uZmlnKGd1aS5kaWZmY29udGV4dCkKKwkJcmVzaG93X2RpZmYKKwl9Cit9CisKK3Byb2Mgc2hvd19sZXNzX2NvbnRleHQge30geworCWdsb2JhbCByZXBvX2NvbmZpZworCWlmIHskcmVwb19jb25maWcoZ3VpLmRpZmZjb250ZXh0KSA+IDF9IHsKKwkJaW5jciByZXBvX2NvbmZpZyhndWkuZGlmZmNvbnRleHQpIC0xCisJCXJlc2hvd19kaWZmCisJfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyMgdWkgY29uc3RydWN0aW9uCisKK3NldCB1aV9jb21tIHt9CisKKyMgLS0gTWVudSBCYXIKKyMKK21lbnUgLm1iYXIgLXRlYXJvZmYgMAoraWYge1tpc19NYWNPU1hdfSB7CisJIyAtLSBBcHBsZSBNZW51IChNYWMgT1MgWCBvbmx5KQorCSMKKwkubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgQXBwbGUgLW1lbnUgLm1iYXIuYXBwbGUKKwltZW51IC5tYmFyLmFwcGxlCit9CisubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgW21jIFJlcG9zaXRvcnldIC1tZW51IC5tYmFyLnJlcG9zaXRvcnkKKy5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBbbWMgRWRpdF0gLW1lbnUgLm1iYXIuZWRpdAoraWYge1tpc19lbmFibGVkIGJyYW5jaF19IHsKKwkubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgW21jIEJyYW5jaF0gLW1lbnUgLm1iYXIuYnJhbmNoCit9CitpZiB7W2lzX2VuYWJsZWQgbXVsdGljb21taXRdIHx8IFtpc19lbmFibGVkIHNpbmdsZWNvbW1pdF19IHsKKwkubWJhciBhZGQgY2FzY2FkZSAtbGFiZWwgW21jIENvbW1pdEBAbm91bl0gLW1lbnUgLm1iYXIuY29tbWl0Cit9CitpZiB7W2lzX2VuYWJsZWQgdHJhbnNwb3J0XX0geworCS5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBbbWMgTWVyZ2VdIC1tZW51IC5tYmFyLm1lcmdlCisJLm1iYXIgYWRkIGNhc2NhZGUgLWxhYmVsIFttYyBSZW1vdGVdIC1tZW51IC5tYmFyLnJlbW90ZQorfQoraWYge1tpc19lbmFibGVkIG11bHRpY29tbWl0XSB8fCBbaXNfZW5hYmxlZCBzaW5nbGVjb21taXRdfSB7CisJLm1iYXIgYWRkIGNhc2NhZGUgLWxhYmVsIFttYyBUb29sc10gLW1lbnUgLm1iYXIudG9vbHMKK30KKworIyAtLSBSZXBvc2l0b3J5IE1lbnUKKyMKK21lbnUgLm1iYXIucmVwb3NpdG9yeQorCitpZiB7IVtpc19iYXJlXX0geworCS5tYmFyLnJlcG9zaXRvcnkgYWRkIGNvbW1hbmQgXAorCQktbGFiZWwgW21jICJFeHBsb3JlIFdvcmtpbmcgQ29weSJdIFwKKwkJLWNvbW1hbmQge2RvX2V4cGxvcmV9Cit9CisKK2lmIHtbaXNfV2luZG93c119IHsKKwkubWJhci5yZXBvc2l0b3J5IGFkZCBjb21tYW5kIFwKKwkJLWxhYmVsIFttYyAiR2l0IEJhc2giXSBcCisJCS1jb21tYW5kIHtldmFsIGV4ZWMgW2F1dG9fZXhlY29rIHN0YXJ0XSBcCisJCQkJCSAgW2xpc3QgIkdpdCBCYXNoIiBiYXNoIC0tbG9naW4gLWwgJl19Cit9CisKK2lmIHtbaXNfV2luZG93c10gfHwgIVtpc19iYXJlXX0geworCS5tYmFyLnJlcG9zaXRvcnkgYWRkIHNlcGFyYXRvcgorfQorCisubWJhci5yZXBvc2l0b3J5IGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyJdIFwKKwktY29tbWFuZCB7YnJvd3Nlcjo6bmV3ICRjdXJyZW50X2JyYW5jaH0KK3NldCB1aV9icm93c2VfY3VycmVudCBbLm1iYXIucmVwb3NpdG9yeSBpbmRleCBsYXN0XQorLm1iYXIucmVwb3NpdG9yeSBhZGQgY29tbWFuZCBcCisJLWxhYmVsIFttYyAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiJdIFwKKwktY29tbWFuZCBicm93c2VyX29wZW46OmRpYWxvZworLm1iYXIucmVwb3NpdG9yeSBhZGQgc2VwYXJhdG9yCisKKy5tYmFyLnJlcG9zaXRvcnkgYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCdzIEhpc3RvcnkiXSBcCisJLWNvbW1hbmQge2RvX2dpdGsgJGN1cnJlbnRfYnJhbmNofQorc2V0IHVpX3Zpc3VhbGl6ZV9jdXJyZW50IFsubWJhci5yZXBvc2l0b3J5IGluZGV4IGxhc3RdCisubWJhci5yZXBvc2l0b3J5IGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5Il0gXAorCS1jb21tYW5kIHtkb19naXRrIC0tYWxsfQorLm1iYXIucmVwb3NpdG9yeSBhZGQgc2VwYXJhdG9yCisKK3Byb2MgY3VycmVudF9icmFuY2hfd3JpdGUge2FyZ3N9IHsKKwlnbG9iYWwgY3VycmVudF9icmFuY2gKKwkubWJhci5yZXBvc2l0b3J5IGVudHJ5Y29uZiAkOjp1aV9icm93c2VfY3VycmVudCBcCisJCS1sYWJlbCBbbWMgIkJyb3dzZSAlcydzIEZpbGVzIiAkY3VycmVudF9icmFuY2hdCisJLm1iYXIucmVwb3NpdG9yeSBlbnRyeWNvbmYgJDo6dWlfdmlzdWFsaXplX2N1cnJlbnQgXAorCQktbGFiZWwgW21jICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IiAkY3VycmVudF9icmFuY2hdCit9Cit0cmFjZSBhZGQgdmFyaWFibGUgY3VycmVudF9icmFuY2ggd3JpdGUgY3VycmVudF9icmFuY2hfd3JpdGUKKworaWYge1tpc19lbmFibGVkIG11bHRpY29tbWl0XX0geworCS5tYmFyLnJlcG9zaXRvcnkgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiRGF0YWJhc2UgU3RhdGlzdGljcyJdIFwKKwkJLWNvbW1hbmQgZG9fc3RhdHMKKworCS5tYmFyLnJlcG9zaXRvcnkgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiQ29tcHJlc3MgRGF0YWJhc2UiXSBcCisJCS1jb21tYW5kIGRvX2djCisKKwkubWJhci5yZXBvc2l0b3J5IGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIlZlcmlmeSBEYXRhYmFzZSJdIFwKKwkJLWNvbW1hbmQgZG9fZnNja19vYmplY3RzCisKKwkubWJhci5yZXBvc2l0b3J5IGFkZCBzZXBhcmF0b3IKKworCWlmIHtbaXNfQ3lnd2luXX0geworCQkubWJhci5yZXBvc2l0b3J5IGFkZCBjb21tYW5kIFwKKwkJCS1sYWJlbCBbbWMgIkNyZWF0ZSBEZXNrdG9wIEljb24iXSBcCisJCQktY29tbWFuZCBkb19jeWd3aW5fc2hvcnRjdXQKKwl9IGVsc2VpZiB7W2lzX1dpbmRvd3NdfSB7CisJCS5tYmFyLnJlcG9zaXRvcnkgYWRkIGNvbW1hbmQgXAorCQkJLWxhYmVsIFttYyAiQ3JlYXRlIERlc2t0b3AgSWNvbiJdIFwKKwkJCS1jb21tYW5kIGRvX3dpbmRvd3Nfc2hvcnRjdXQKKwl9IGVsc2VpZiB7W2lzX01hY09TWF19IHsKKwkJLm1iYXIucmVwb3NpdG9yeSBhZGQgY29tbWFuZCBcCisJCQktbGFiZWwgW21jICJDcmVhdGUgRGVza3RvcCBJY29uIl0gXAorCQkJLWNvbW1hbmQgZG9fbWFjb3N4X2FwcAorCX0KK30KKworaWYge1tpc19NYWNPU1hdfSB7CisJcHJvYyA6OnRrOjptYWM6OlF1aXQge2FyZ3N9IHsgZG9fcXVpdCB9Cit9IGVsc2UgeworCS5tYmFyLnJlcG9zaXRvcnkgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyBRdWl0XSBcCisJCS1jb21tYW5kIGRvX3F1aXQgXAorCQktYWNjZWxlcmF0b3IgJE0xVC1RCit9CisKKyMgLS0gRWRpdCBNZW51CisjCittZW51IC5tYmFyLmVkaXQKKy5tYmFyLmVkaXQgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyBVbmRvXSBcCisJLWNvbW1hbmQge2NhdGNoIHtbZm9jdXNdIGVkaXQgdW5kb319IFwKKwktYWNjZWxlcmF0b3IgJE0xVC1aCisubWJhci5lZGl0IGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgUmVkb10gXAorCS1jb21tYW5kIHtjYXRjaCB7W2ZvY3VzXSBlZGl0IHJlZG99fSBcCisJLWFjY2VsZXJhdG9yICRNMVQtWQorLm1iYXIuZWRpdCBhZGQgc2VwYXJhdG9yCisubWJhci5lZGl0IGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgQ3V0XSBcCisJLWNvbW1hbmQge2NhdGNoIHt0a190ZXh0Q3V0IFtmb2N1c119fSBcCisJLWFjY2VsZXJhdG9yICRNMVQtWAorLm1iYXIuZWRpdCBhZGQgY29tbWFuZCAtbGFiZWwgW21jIENvcHldIFwKKwktY29tbWFuZCB7Y2F0Y2gge3RrX3RleHRDb3B5IFtmb2N1c119fSBcCisJLWFjY2VsZXJhdG9yICRNMVQtQworLm1iYXIuZWRpdCBhZGQgY29tbWFuZCAtbGFiZWwgW21jIFBhc3RlXSBcCisJLWNvbW1hbmQge2NhdGNoIHt0a190ZXh0UGFzdGUgW2ZvY3VzXTsgW2ZvY3VzXSBzZWUgaW5zZXJ0fX0gXAorCS1hY2NlbGVyYXRvciAkTTFULVYKKy5tYmFyLmVkaXQgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyBEZWxldGVdIFwKKwktY29tbWFuZCB7Y2F0Y2gge1tmb2N1c10gZGVsZXRlIHNlbC5maXJzdCBzZWwubGFzdH19IFwKKwktYWNjZWxlcmF0b3IgRGVsCisubWJhci5lZGl0IGFkZCBzZXBhcmF0b3IKKy5tYmFyLmVkaXQgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiU2VsZWN0IEFsbCJdIFwKKwktY29tbWFuZCB7Y2F0Y2gge1tmb2N1c10gdGFnIGFkZCBzZWwgMC4wIGVuZH19IFwKKwktYWNjZWxlcmF0b3IgJE0xVC1BCisKKyMgLS0gQnJhbmNoIE1lbnUKKyMKK2lmIHtbaXNfZW5hYmxlZCBicmFuY2hdfSB7CisJbWVudSAubWJhci5icmFuY2gKKworCS5tYmFyLmJyYW5jaCBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJDcmVhdGUuLi4iXSBcCisJCS1jb21tYW5kIGJyYW5jaF9jcmVhdGU6OmRpYWxvZyBcCisJCS1hY2NlbGVyYXRvciAkTTFULU4KKwlsYXBwZW5kIGRpc2FibGVfb25fbG9jayBbbGlzdCAubWJhci5icmFuY2ggZW50cnljb25mIFwKKwkJWy5tYmFyLmJyYW5jaCBpbmRleCBsYXN0XSAtc3RhdGVdCisKKwkubWJhci5icmFuY2ggYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiQ2hlY2tvdXQuLi4iXSBcCisJCS1jb21tYW5kIGJyYW5jaF9jaGVja291dDo6ZGlhbG9nIFwKKwkJLWFjY2VsZXJhdG9yICRNMVQtTworCWxhcHBlbmQgZGlzYWJsZV9vbl9sb2NrIFtsaXN0IC5tYmFyLmJyYW5jaCBlbnRyeWNvbmYgXAorCQlbLm1iYXIuYnJhbmNoIGluZGV4IGxhc3RdIC1zdGF0ZV0KKworCS5tYmFyLmJyYW5jaCBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJSZW5hbWUuLi4iXSBcCisJCS1jb21tYW5kIGJyYW5jaF9yZW5hbWU6OmRpYWxvZworCWxhcHBlbmQgZGlzYWJsZV9vbl9sb2NrIFtsaXN0IC5tYmFyLmJyYW5jaCBlbnRyeWNvbmYgXAorCQlbLm1iYXIuYnJhbmNoIGluZGV4IGxhc3RdIC1zdGF0ZV0KKworCS5tYmFyLmJyYW5jaCBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJEZWxldGUuLi4iXSBcCisJCS1jb21tYW5kIGJyYW5jaF9kZWxldGU6OmRpYWxvZworCWxhcHBlbmQgZGlzYWJsZV9vbl9sb2NrIFtsaXN0IC5tYmFyLmJyYW5jaCBlbnRyeWNvbmYgXAorCQlbLm1iYXIuYnJhbmNoIGluZGV4IGxhc3RdIC1zdGF0ZV0KKworCS5tYmFyLmJyYW5jaCBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJSZXNldC4uLiJdIFwKKwkJLWNvbW1hbmQgbWVyZ2U6OnJlc2V0X2hhcmQKKwlsYXBwZW5kIGRpc2FibGVfb25fbG9jayBbbGlzdCAubWJhci5icmFuY2ggZW50cnljb25mIFwKKwkJWy5tYmFyLmJyYW5jaCBpbmRleCBsYXN0XSAtc3RhdGVdCit9CisKKyMgLS0gQ29tbWl0IE1lbnUKKyMKK3Byb2MgY29tbWl0X2J0bl9jYXB0aW9uIHt9IHsKKwlpZiB7W2lzX2VuYWJsZWQgbm9jb21taXRdfSB7CisJCXJldHVybiBbbWMgIkRvbmUiXQorCX0gZWxzZSB7CisJCXJldHVybiBbbWMgQ29tbWl0QEB2ZXJiXQorCX0KK30KKworaWYge1tpc19lbmFibGVkIG11bHRpY29tbWl0XSB8fCBbaXNfZW5hYmxlZCBzaW5nbGVjb21taXRdfSB7CisJbWVudSAubWJhci5jb21taXQKKworCWlmIHshW2lzX2VuYWJsZWQgbm9jb21taXRdfSB7CisJCS5tYmFyLmNvbW1pdCBhZGQgcmFkaW9idXR0b24gXAorCQkJLWxhYmVsIFttYyAiTmV3IENvbW1pdCJdIFwKKwkJCS1jb21tYW5kIGRvX3NlbGVjdF9jb21taXRfdHlwZSBcCisJCQktdmFyaWFibGUgc2VsZWN0ZWRfY29tbWl0X3R5cGUgXAorCQkJLXZhbHVlIG5ldworCQlsYXBwZW5kIGRpc2FibGVfb25fbG9jayBcCisJCQlbbGlzdCAubWJhci5jb21taXQgZW50cnljb25mIFsubWJhci5jb21taXQgaW5kZXggbGFzdF0gLXN0YXRlXQorCisJCS5tYmFyLmNvbW1pdCBhZGQgcmFkaW9idXR0b24gXAorCQkJLWxhYmVsIFttYyAiQW1lbmQgTGFzdCBDb21taXQiXSBcCisJCQktY29tbWFuZCBkb19zZWxlY3RfY29tbWl0X3R5cGUgXAorCQkJLXZhcmlhYmxlIHNlbGVjdGVkX2NvbW1pdF90eXBlIFwKKwkJCS12YWx1ZSBhbWVuZAorCQlsYXBwZW5kIGRpc2FibGVfb25fbG9jayBcCisJCQlbbGlzdCAubWJhci5jb21taXQgZW50cnljb25mIFsubWJhci5jb21taXQgaW5kZXggbGFzdF0gLXN0YXRlXQorCisJCS5tYmFyLmNvbW1pdCBhZGQgc2VwYXJhdG9yCisJfQorCisJLm1iYXIuY29tbWl0IGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgUmVzY2FuXSBcCisJCS1jb21tYW5kIHVpX2RvX3Jlc2NhbiBcCisJCS1hY2NlbGVyYXRvciBGNQorCWxhcHBlbmQgZGlzYWJsZV9vbl9sb2NrIFwKKwkJW2xpc3QgLm1iYXIuY29tbWl0IGVudHJ5Y29uZiBbLm1iYXIuY29tbWl0IGluZGV4IGxhc3RdIC1zdGF0ZV0KKworCS5tYmFyLmNvbW1pdCBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJTdGFnZSBUbyBDb21taXQiXSBcCisJCS1jb21tYW5kIGRvX2FkZF9zZWxlY3Rpb24gXAorCQktYWNjZWxlcmF0b3IgJE0xVC1UCisJbGFwcGVuZCBkaXNhYmxlX29uX2xvY2sgXAorCQlbbGlzdCAubWJhci5jb21taXQgZW50cnljb25mIFsubWJhci5jb21taXQgaW5kZXggbGFzdF0gLXN0YXRlXQorCisJLm1iYXIuY29tbWl0IGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0Il0gXAorCQktY29tbWFuZCBkb19hZGRfYWxsIFwKKwkJLWFjY2VsZXJhdG9yICRNMVQtSQorCWxhcHBlbmQgZGlzYWJsZV9vbl9sb2NrIFwKKwkJW2xpc3QgLm1iYXIuY29tbWl0IGVudHJ5Y29uZiBbLm1iYXIuY29tbWl0IGluZGV4IGxhc3RdIC1zdGF0ZV0KKworCS5tYmFyLmNvbW1pdCBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJVbnN0YWdlIEZyb20gQ29tbWl0Il0gXAorCQktY29tbWFuZCBkb191bnN0YWdlX3NlbGVjdGlvbiBcCisJCS1hY2NlbGVyYXRvciAkTTFULVUKKwlsYXBwZW5kIGRpc2FibGVfb25fbG9jayBcCisJCVtsaXN0IC5tYmFyLmNvbW1pdCBlbnRyeWNvbmYgWy5tYmFyLmNvbW1pdCBpbmRleCBsYXN0XSAtc3RhdGVdCisKKwkubWJhci5jb21taXQgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiUmV2ZXJ0IENoYW5nZXMiXSBcCisJCS1jb21tYW5kIGRvX3JldmVydF9zZWxlY3Rpb24gXAorCQktYWNjZWxlcmF0b3IgJE0xVC1KCisJbGFwcGVuZCBkaXNhYmxlX29uX2xvY2sgXAorCQlbbGlzdCAubWJhci5jb21taXQgZW50cnljb25mIFsubWJhci5jb21taXQgaW5kZXggbGFzdF0gLXN0YXRlXQorCisJLm1iYXIuY29tbWl0IGFkZCBzZXBhcmF0b3IKKworCS5tYmFyLmNvbW1pdCBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJTaG93IExlc3MgQ29udGV4dCJdIFwKKwkJLWNvbW1hbmQgc2hvd19sZXNzX2NvbnRleHQgXAorCQktYWNjZWxlcmF0b3IgJE0xVC1cLQorCisJLm1iYXIuY29tbWl0IGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIlNob3cgTW9yZSBDb250ZXh0Il0gXAorCQktY29tbWFuZCBzaG93X21vcmVfY29udGV4dCBcCisJCS1hY2NlbGVyYXRvciAkTTFULT0KKworCS5tYmFyLmNvbW1pdCBhZGQgc2VwYXJhdG9yCisKKwlpZiB7IVtpc19lbmFibGVkIG5vY29tbWl0bXNnXX0geworCQkubWJhci5jb21taXQgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiU2lnbiBPZmYiXSBcCisJCQktY29tbWFuZCBkb19zaWdub2ZmIFwKKwkJCS1hY2NlbGVyYXRvciAkTTFULVMKKwl9CisKKwkubWJhci5jb21taXQgYWRkIGNvbW1hbmQgLWxhYmVsIFtjb21taXRfYnRuX2NhcHRpb25dIFwKKwkJLWNvbW1hbmQgZG9fY29tbWl0IFwKKwkJLWFjY2VsZXJhdG9yICRNMVQtUmV0dXJuCisJbGFwcGVuZCBkaXNhYmxlX29uX2xvY2sgXAorCQlbbGlzdCAubWJhci5jb21taXQgZW50cnljb25mIFsubWJhci5jb21taXQgaW5kZXggbGFzdF0gLXN0YXRlXQorfQorCisjIC0tIE1lcmdlIE1lbnUKKyMKK2lmIHtbaXNfZW5hYmxlZCBicmFuY2hdfSB7CisJbWVudSAubWJhci5tZXJnZQorCS5tYmFyLm1lcmdlIGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIkxvY2FsIE1lcmdlLi4uIl0gXAorCQktY29tbWFuZCBtZXJnZTo6ZGlhbG9nIFwKKwkJLWFjY2VsZXJhdG9yICRNMVQtTQorCWxhcHBlbmQgZGlzYWJsZV9vbl9sb2NrIFwKKwkJW2xpc3QgLm1iYXIubWVyZ2UgZW50cnljb25mIFsubWJhci5tZXJnZSBpbmRleCBsYXN0XSAtc3RhdGVdCisJLm1iYXIubWVyZ2UgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiQWJvcnQgTWVyZ2UuLi4iXSBcCisJCS1jb21tYW5kIG1lcmdlOjpyZXNldF9oYXJkCisJbGFwcGVuZCBkaXNhYmxlX29uX2xvY2sgXAorCQlbbGlzdCAubWJhci5tZXJnZSBlbnRyeWNvbmYgWy5tYmFyLm1lcmdlIGluZGV4IGxhc3RdIC1zdGF0ZV0KK30KKworIyAtLSBUcmFuc3BvcnQgTWVudQorIworaWYge1tpc19lbmFibGVkIHRyYW5zcG9ydF19IHsKKwltZW51IC5tYmFyLnJlbW90ZQorCisJLm1iYXIucmVtb3RlIGFkZCBjb21tYW5kIFwKKwkJLWxhYmVsIFttYyAiQWRkLi4uIl0gXAorCQktY29tbWFuZCByZW1vdGVfYWRkOjpkaWFsb2cgXAorCQktYWNjZWxlcmF0b3IgJE0xVC1BCisJLm1iYXIucmVtb3RlIGFkZCBjb21tYW5kIFwKKwkJLWxhYmVsIFttYyAiUHVzaC4uLiJdIFwKKwkJLWNvbW1hbmQgZG9fcHVzaF9hbnl3aGVyZSBcCisJCS1hY2NlbGVyYXRvciAkTTFULVAKKwkubWJhci5yZW1vdGUgYWRkIGNvbW1hbmQgXAorCQktbGFiZWwgW21jICJEZWxldGUgQnJhbmNoLi4uIl0gXAorCQktY29tbWFuZCByZW1vdGVfYnJhbmNoX2RlbGV0ZTo6ZGlhbG9nCit9CisKK2lmIHtbaXNfTWFjT1NYXX0geworCXByb2MgOjp0azo6bWFjOjpTaG93UHJlZmVyZW5jZXMge30ge2RvX29wdGlvbnN9Cit9IGVsc2UgeworCSMgLS0gRWRpdCBNZW51CisJIworCS5tYmFyLmVkaXQgYWRkIHNlcGFyYXRvcgorCS5tYmFyLmVkaXQgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiT3B0aW9ucy4uLiJdIFwKKwkJLWNvbW1hbmQgZG9fb3B0aW9ucworfQorCisjIC0tIFRvb2xzIE1lbnUKKyMKK2lmIHtbaXNfZW5hYmxlZCBtdWx0aWNvbW1pdF0gfHwgW2lzX2VuYWJsZWQgc2luZ2xlY29tbWl0XX0geworCXNldCB0b29sc19tZW51YmFyIC5tYmFyLnRvb2xzCisJbWVudSAkdG9vbHNfbWVudWJhcgorCSR0b29sc19tZW51YmFyIGFkZCBzZXBhcmF0b3IKKwkkdG9vbHNfbWVudWJhciBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJBZGQuLi4iXSAtY29tbWFuZCB0b29sc19hZGQ6OmRpYWxvZworCSR0b29sc19tZW51YmFyIGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIlJlbW92ZS4uLiJdIC1jb21tYW5kIHRvb2xzX3JlbW92ZTo6ZGlhbG9nCisJc2V0IHRvb2xzX3RhaWxjbnQgMworCWlmIHtbYXJyYXkgbmFtZXMgcmVwb19jb25maWcgZ3VpdG9vbC4qLmNtZF0gbmUge319IHsKKwkJdG9vbHNfcG9wdWxhdGVfYWxsCisJfQorfQorCisjIC0tIEhlbHAgTWVudQorIworLm1iYXIgYWRkIGNhc2NhZGUgLWxhYmVsIFttYyBIZWxwXSAtbWVudSAubWJhci5oZWxwCittZW51IC5tYmFyLmhlbHAKKworaWYge1tpc19NYWNPU1hdfSB7CisJLm1iYXIuYXBwbGUgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiQWJvdXQgJXMiIFthcHBuYW1lXV0gXAorCQktY29tbWFuZCBkb19hYm91dAorCS5tYmFyLmFwcGxlIGFkZCBzZXBhcmF0b3IKK30gZWxzZSB7CisJLm1iYXIuaGVscCBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJBYm91dCAlcyIgW2FwcG5hbWVdXSBcCisJCS1jb21tYW5kIGRvX2Fib3V0Cit9CisuIGNvbmZpZ3VyZSAtbWVudSAubWJhcgorCitzZXQgZG9jX3BhdGggW2dpdGh0bWxkaXJdCitpZiB7JGRvY19wYXRoIG5lIHt9fSB7CisJc2V0IGRvY19wYXRoIFtmaWxlIGpvaW4gJGRvY19wYXRoIGluZGV4Lmh0bWxdCisKKwlpZiB7W2lzX0N5Z3dpbl19IHsKKwkJc2V0IGRvY19wYXRoIFtleGVjIGN5Z3BhdGggLS1taXhlZCAkZG9jX3BhdGhdCisJfQorfQorCitpZiB7W2ZpbGUgaXNmaWxlICRkb2NfcGF0aF19IHsKKwlzZXQgZG9jX3VybCAiZmlsZTokZG9jX3BhdGgiCit9IGVsc2UgeworCXNldCBkb2NfdXJsIHtodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy99Cit9CisKK3Byb2Mgc3RhcnRfYnJvd3NlciB7dXJsfSB7CisJZ2l0ICJ3ZWItLWJyb3dzZSIgJHVybAorfQorCisubWJhci5oZWxwIGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIk9ubGluZSBEb2N1bWVudGF0aW9uIl0gXAorCS1jb21tYW5kIFtsaXN0IHN0YXJ0X2Jyb3dzZXIgJGRvY191cmxdCisKKy5tYmFyLmhlbHAgYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiU2hvdyBTU0ggS2V5Il0gXAorCS1jb21tYW5kIGRvX3NzaF9rZXkKKwordW5zZXQgZG9jX3BhdGggZG9jX3VybAorCisjIC0tIFN0YW5kYXJkIGJpbmRpbmdzCisjCit3bSBwcm90b2NvbCAuIFdNX0RFTEVURV9XSU5ET1cgZG9fcXVpdAorYmluZCBhbGwgPCRNMUItS2V5LXE+IGRvX3F1aXQKK2JpbmQgYWxsIDwkTTFCLUtleS1RPiBkb19xdWl0CitiaW5kIGFsbCA8JE0xQi1LZXktdz4ge2Rlc3Ryb3kgW3dpbmZvIHRvcGxldmVsICVXXX0KK2JpbmQgYWxsIDwkTTFCLUtleS1XPiB7ZGVzdHJveSBbd2luZm8gdG9wbGV2ZWwgJVddfQorCitzZXQgc3ViY29tbWFuZF9hcmdzIHt9Citwcm9jIHVzYWdlIHt9IHsKKwlzZXQgcyAidXNhZ2U6ICQ6OmFyZ3YwICQ6OnN1YmNvbW1hbmQgJDo6c3ViY29tbWFuZF9hcmdzIgorCWlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAid2luMzIifSB7CisJCXdtIHdpdGhkcmF3IC4KKwkJdGtfbWVzc2FnZUJveCAtaWNvbiBpbmZvIC1tZXNzYWdlICRzIFwKKwkJCS10aXRsZSBbbWMgIlVzYWdlIl0KKwl9IGVsc2UgeworCQlwdXRzIHN0ZGVyciAkcworCX0KKwlleGl0IDEKK30KKworcHJvYyBub3JtYWxpemVfcmVscGF0aCB7cGF0aH0geworCXNldCBlbGVtZW50cyB7fQorCWZvcmVhY2ggaXRlbSBbZmlsZSBzcGxpdCAkcGF0aF0geworCQlpZiB7JGl0ZW0gZXEgey59fSBjb250aW51ZQorCQlpZiB7JGl0ZW0gZXEgey4ufSAmJiBbbGxlbmd0aCAkZWxlbWVudHNdID4gMAorCQkgICAgJiYgW2xpbmRleCAkZWxlbWVudHMgZW5kXSBuZSB7Li59fSB7CisJCQlzZXQgZWxlbWVudHMgW2xyYW5nZSAkZWxlbWVudHMgMCBlbmQtMV0KKwkJCWNvbnRpbnVlCisJCX0KKwkJbGFwcGVuZCBlbGVtZW50cyAkaXRlbQorCX0KKwlyZXR1cm4gW2V2YWwgZmlsZSBqb2luICRlbGVtZW50c10KK30KKworIyAtLSBOb3QgYSBub3JtYWwgY29tbWl0IHR5cGUgaW52b2NhdGlvbj8gIERvIHRoYXQgaW5zdGVhZCEKKyMKK3N3aXRjaCAtLSAkc3ViY29tbWFuZCB7Citicm93c2VyIC0KK2JsYW1lIHsKKwlpZiB7JHN1YmNvbW1hbmQgZXEgImJsYW1lIn0geworCQlzZXQgc3ViY29tbWFuZF9hcmdzIHtbLS1saW5lPTxudW0+XSByZXY/IHBhdGh9CisJfSBlbHNlIHsKKwkJc2V0IHN1YmNvbW1hbmRfYXJncyB7cmV2PyBwYXRofQorCX0KKwlpZiB7JGFyZ3YgZXEge319IHVzYWdlCisJc2V0IGhlYWQge30KKwlzZXQgcGF0aCB7fQorCXNldCBqdW1wX3NwZWMge30KKwlzZXQgaXNfcGF0aCAwCisJZm9yZWFjaCBhICRhcmd2IHsKKwkJc2V0IHAgW2ZpbGUgam9pbiAkX3ByZWZpeCAkYV0KKworCQlpZiB7JGlzX3BhdGggfHwgW2ZpbGUgZXhpc3RzICRwXX0geworCQkJaWYgeyRwYXRoIG5lIHt9fSB1c2FnZQorCQkJc2V0IHBhdGggW25vcm1hbGl6ZV9yZWxwYXRoICRwXQorCQkJYnJlYWsKKwkJfSBlbHNlaWYgeyRhIGVxIHstLX19IHsKKwkJCWlmIHskcGF0aCBuZSB7fX0geworCQkJCWlmIHskaGVhZCBuZSB7fX0gdXNhZ2UKKwkJCQlzZXQgaGVhZCAkcGF0aAorCQkJCXNldCBwYXRoIHt9CisJCQl9CisJCQlzZXQgaXNfcGF0aCAxCisJCX0gZWxzZWlmIHtbcmVnZXhwIHteLS1saW5lPShcZCspJH0gJGEgYSBsbnVtXX0geworCQkJaWYgeyRqdW1wX3NwZWMgbmUge30gfHwgJGhlYWQgbmUge319IHVzYWdlCisJCQlzZXQganVtcF9zcGVjIFtsaXN0ICRsbnVtXQorCQl9IGVsc2VpZiB7JGhlYWQgZXEge319IHsKKwkJCWlmIHskaGVhZCBuZSB7fX0gdXNhZ2UKKwkJCXNldCBoZWFkICRhCisJCQlzZXQgaXNfcGF0aCAxCisJCX0gZWxzZSB7CisJCQl1c2FnZQorCQl9CisJfQorCXVuc2V0IGlzX3BhdGgKKworCWlmIHskaGVhZCBuZSB7fSAmJiAkcGF0aCBlcSB7fX0geworCQlpZiB7W3N0cmluZyBpbmRleCAkaGVhZCAwXSBlcSB7L319IHsKKwkJCXNldCBwYXRoIFtub3JtYWxpemVfcmVscGF0aCAkaGVhZF0KKwkJCXNldCBoZWFkIHt9CisJCX0gZWxzZSB7CisJCQlzZXQgcGF0aCBbbm9ybWFsaXplX3JlbHBhdGggJF9wcmVmaXgkaGVhZF0KKwkJCXNldCBoZWFkIHt9CisJCX0KKwl9CisKKwlpZiB7JGhlYWQgZXEge319IHsKKwkJbG9hZF9jdXJyZW50X2JyYW5jaAorCX0gZWxzZSB7CisJCWlmIHtbcmVnZXhwIHteWzAtOWEtZl17MSwzOX0kfSAkaGVhZF19IHsKKwkJCWlmIHtbY2F0Y2ggeworCQkJCQlzZXQgaGVhZCBbZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkaGVhZF0KKwkJCQl9IGVycl19IHsKKwkJCQlpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgIndpbjMyIn0geworCQkJCQl0a19tZXNzYWdlQm94IC1pY29uIGVycm9yIC10aXRsZSBbbWMgRXJyb3JdIC1tZXNzYWdlICRlcnIKKwkJCQl9IGVsc2UgeworCQkJCQlwdXRzIHN0ZGVyciAkZXJyCisJCQkJfQorCQkJCWV4aXQgMQorCQkJfQorCQl9CisJCXNldCBjdXJyZW50X2JyYW5jaCAkaGVhZAorCX0KKworCXdtIGRlaWNvbmlmeSAuCisJc3dpdGNoIC0tICRzdWJjb21tYW5kIHsKKwlicm93c2VyIHsKKwkJaWYgeyRqdW1wX3NwZWMgbmUge319IHVzYWdlCisJCWlmIHskaGVhZCBlcSB7fX0geworCQkJaWYgeyRwYXRoIG5lIHt9ICYmIFtmaWxlIGlzZGlyZWN0b3J5ICRwYXRoXX0geworCQkJCXNldCBoZWFkICRjdXJyZW50X2JyYW5jaAorCQkJfSBlbHNlIHsKKwkJCQlzZXQgaGVhZCAkcGF0aAorCQkJCXNldCBwYXRoIHt9CisJCQl9CisJCX0KKwkJYnJvd3Nlcjo6bmV3ICRoZWFkICRwYXRoCisJfQorCWJsYW1lICAgeworCQlpZiB7JGhlYWQgZXEge30gJiYgIVtmaWxlIGV4aXN0cyAkcGF0aF19IHsKKwkJCWNhdGNoIHt3bSB3aXRoZHJhdyAufQorCQkJdGtfbWVzc2FnZUJveCBcCisJCQkJLWljb24gZXJyb3IgXAorCQkJCS10eXBlIG9rIFwKKwkJCQktdGl0bGUgW21jICJnaXQtZ3VpOiBmYXRhbCBlcnJvciJdIFwKKwkJCQktbWVzc2FnZSBbbWMgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IiAkcGF0aF0KKwkJCWV4aXQgMQorCQl9CisJCWJsYW1lOjpuZXcgJGhlYWQgJHBhdGggJGp1bXBfc3BlYworCX0KKwl9CisJcmV0dXJuCit9CitjaXRvb2wgLQorZ3VpIHsKKwlpZiB7W2xsZW5ndGggJGFyZ3ZdICE9IDB9IHsKKwkJdXNhZ2UKKwl9CisJIyBmYWxsIHRocm91Z2ggdG8gc2V0dXAgVUkgZm9yIGNvbW1pdHMKK30KK2RlZmF1bHQgeworCXNldCBlcnIgInVzYWdlOiAkYXJndjAgXFt7YmxhbWV8YnJvd3NlcnxjaXRvb2x9XF0iCisJaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJ3aW4zMiJ9IHsKKwkJd20gd2l0aGRyYXcgLgorCQl0a19tZXNzYWdlQm94IC1pY29uIGVycm9yIC1tZXNzYWdlICRlcnIgXAorCQkJLXRpdGxlIFttYyAiVXNhZ2UiXQorCX0gZWxzZSB7CisJCXB1dHMgc3RkZXJyICRlcnIKKwl9CisJZXhpdCAxCit9Cit9CisKKyMgLS0gQnJhbmNoIENvbnRyb2wKKyMKKyR7TlN9OjpmcmFtZSAuYnJhbmNoCitpZiB7ISR1c2VfdHRrfSB7LmJyYW5jaCBjb25maWd1cmUgLWJvcmRlcndpZHRoIDEgLXJlbGllZiBzdW5rZW59Ciske05TfTo6bGFiZWwgLmJyYW5jaC5sMSBcCisJLXRleHQgW21jICJDdXJyZW50IEJyYW5jaDoiXSBcCisJLWFuY2hvciB3IFwKKwktanVzdGlmeSBsZWZ0Ciske05TfTo6bGFiZWwgLmJyYW5jaC5jYiBcCisJLXRleHR2YXJpYWJsZSBjdXJyZW50X2JyYW5jaCBcCisJLWFuY2hvciB3IFwKKwktanVzdGlmeSBsZWZ0CitwYWNrIC5icmFuY2gubDEgLXNpZGUgbGVmdAorcGFjayAuYnJhbmNoLmNiIC1zaWRlIGxlZnQgLWZpbGwgeAorcGFjayAuYnJhbmNoIC1zaWRlIHRvcCAtZmlsbCB4CisKKyMgLS0gTWFpbiBXaW5kb3cgTGF5b3V0CisjCiske05TfTo6cGFuZWR3aW5kb3cgLnZwYW5lIC1vcmllbnQgaG9yaXpvbnRhbAorJHtOU306OnBhbmVkd2luZG93IC52cGFuZS5maWxlcyAtb3JpZW50IHZlcnRpY2FsCitpZiB7JHVzZV90dGt9IHsKKwkudnBhbmUgYWRkIC52cGFuZS5maWxlcworfSBlbHNlIHsKKwkudnBhbmUgYWRkIC52cGFuZS5maWxlcyAtc3RpY2t5IG5zZXcgLWhlaWdodCAxMDAgLXdpZHRoIDIwMAorfQorcGFjayAudnBhbmUgLWFuY2hvciBuIC1zaWRlIHRvcCAtZmlsbCBib3RoIC1leHBhbmQgMQorCisjIC0tIEluZGV4IEZpbGUgTGlzdAorIworJHtOU306OmZyYW1lIC52cGFuZS5maWxlcy5pbmRleCAtaGVpZ2h0IDEwMCAtd2lkdGggMjAwCit0bGFiZWwgLnZwYW5lLmZpbGVzLmluZGV4LnRpdGxlIFwKKwktdGV4dCBbbWMgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiXSBcCisJLWJhY2tncm91bmQgbGlnaHRncmVlbiAtZm9yZWdyb3VuZCBibGFjawordGV4dCAkdWlfaW5kZXggLWJhY2tncm91bmQgd2hpdGUgLWZvcmVncm91bmQgYmxhY2sgXAorCS1ib3JkZXJ3aWR0aCAwIFwKKwktd2lkdGggMjAgLWhlaWdodCAxMCBcCisJLXdyYXAgbm9uZSBcCisJLWN1cnNvciAkY3Vyc29yX3B0ciBcCisJLXhzY3JvbGxjb21tYW5kIHsudnBhbmUuZmlsZXMuaW5kZXguc3ggc2V0fSBcCisJLXlzY3JvbGxjb21tYW5kIHsudnBhbmUuZmlsZXMuaW5kZXguc3kgc2V0fSBcCisJLXN0YXRlIGRpc2FibGVkCiske05TfTo6c2Nyb2xsYmFyIC52cGFuZS5maWxlcy5pbmRleC5zeCAtb3JpZW50IGggLWNvbW1hbmQgW2xpc3QgJHVpX2luZGV4IHh2aWV3XQorJHtOU306OnNjcm9sbGJhciAudnBhbmUuZmlsZXMuaW5kZXguc3kgLW9yaWVudCB2IC1jb21tYW5kIFtsaXN0ICR1aV9pbmRleCB5dmlld10KK3BhY2sgLnZwYW5lLmZpbGVzLmluZGV4LnRpdGxlIC1zaWRlIHRvcCAtZmlsbCB4CitwYWNrIC52cGFuZS5maWxlcy5pbmRleC5zeCAtc2lkZSBib3R0b20gLWZpbGwgeAorcGFjayAudnBhbmUuZmlsZXMuaW5kZXguc3kgLXNpZGUgcmlnaHQgLWZpbGwgeQorcGFjayAkdWlfaW5kZXggLXNpZGUgbGVmdCAtZmlsbCBib3RoIC1leHBhbmQgMQorCisjIC0tIFdvcmtpbmcgRGlyZWN0b3J5IEZpbGUgTGlzdAorIworJHtOU306OmZyYW1lIC52cGFuZS5maWxlcy53b3JrZGlyIC1oZWlnaHQgMTAwIC13aWR0aCAyMDAKK3RsYWJlbCAudnBhbmUuZmlsZXMud29ya2Rpci50aXRsZSAtdGV4dCBbbWMgIlVuc3RhZ2VkIENoYW5nZXMiXSBcCisJLWJhY2tncm91bmQgbGlnaHRzYWxtb24gLWZvcmVncm91bmQgYmxhY2sKK3RleHQgJHVpX3dvcmtkaXIgLWJhY2tncm91bmQgd2hpdGUgLWZvcmVncm91bmQgYmxhY2sgXAorCS1ib3JkZXJ3aWR0aCAwIFwKKwktd2lkdGggMjAgLWhlaWdodCAxMCBcCisJLXdyYXAgbm9uZSBcCisJLWN1cnNvciAkY3Vyc29yX3B0ciBcCisJLXhzY3JvbGxjb21tYW5kIHsudnBhbmUuZmlsZXMud29ya2Rpci5zeCBzZXR9IFwKKwkteXNjcm9sbGNvbW1hbmQgey52cGFuZS5maWxlcy53b3JrZGlyLnN5IHNldH0gXAorCS1zdGF0ZSBkaXNhYmxlZAorJHtOU306OnNjcm9sbGJhciAudnBhbmUuZmlsZXMud29ya2Rpci5zeCAtb3JpZW50IGggLWNvbW1hbmQgW2xpc3QgJHVpX3dvcmtkaXIgeHZpZXddCiske05TfTo6c2Nyb2xsYmFyIC52cGFuZS5maWxlcy53b3JrZGlyLnN5IC1vcmllbnQgdiAtY29tbWFuZCBbbGlzdCAkdWlfd29ya2RpciB5dmlld10KK3BhY2sgLnZwYW5lLmZpbGVzLndvcmtkaXIudGl0bGUgLXNpZGUgdG9wIC1maWxsIHgKK3BhY2sgLnZwYW5lLmZpbGVzLndvcmtkaXIuc3ggLXNpZGUgYm90dG9tIC1maWxsIHgKK3BhY2sgLnZwYW5lLmZpbGVzLndvcmtkaXIuc3kgLXNpZGUgcmlnaHQgLWZpbGwgeQorcGFjayAkdWlfd29ya2RpciAtc2lkZSBsZWZ0IC1maWxsIGJvdGggLWV4cGFuZCAxCisKKy52cGFuZS5maWxlcyBhZGQgLnZwYW5lLmZpbGVzLndvcmtkaXIKKy52cGFuZS5maWxlcyBhZGQgLnZwYW5lLmZpbGVzLmluZGV4CitpZiB7ISR1c2VfdHRrfSB7CisJLnZwYW5lLmZpbGVzIHBhbmVjb25maWd1cmUgLnZwYW5lLmZpbGVzLndvcmtkaXIgLXN0aWNreSBuZXdzCisJLnZwYW5lLmZpbGVzIHBhbmVjb25maWd1cmUgLnZwYW5lLmZpbGVzLmluZGV4IC1zdGlja3kgbmV3cworfQorCitmb3JlYWNoIGkgW2xpc3QgJHVpX2luZGV4ICR1aV93b3JrZGlyXSB7CisJcm1zZWxfdGFnICRpCisJJGkgdGFnIGNvbmYgaW5fZGlmZiAtYmFja2dyb3VuZCBbJGkgdGFnIGNnZXQgaW5fc2VsIC1iYWNrZ3JvdW5kXQorfQordW5zZXQgaQorCisjIC0tIERpZmYgYW5kIENvbW1pdCBBcmVhCisjCitpZiB7JGhhdmVfdGs4NX0geworCSR7TlN9OjpwYW5lZHdpbmRvdyAudnBhbmUubG93ZXIgLW9yaWVudCB2ZXJ0aWNhbAorCSR7TlN9OjpmcmFtZSAudnBhbmUubG93ZXIuY29tbWFyZWEKKwkke05TfTo6ZnJhbWUgLnZwYW5lLmxvd2VyLmRpZmYgLXJlbGllZiBzdW5rZW4gLWJvcmRlcndpZHRoIDEgLWhlaWdodCA1MDAKKwkudnBhbmUubG93ZXIgYWRkIC52cGFuZS5sb3dlci5kaWZmCisJLnZwYW5lLmxvd2VyIGFkZCAudnBhbmUubG93ZXIuY29tbWFyZWEKKwkudnBhbmUgYWRkIC52cGFuZS5sb3dlcgorCWlmIHskdXNlX3R0a30geworCQkudnBhbmUubG93ZXIgcGFuZSAudnBhbmUubG93ZXIuZGlmZiAtd2VpZ2h0IDEKKwkJLnZwYW5lLmxvd2VyIHBhbmUgLnZwYW5lLmxvd2VyLmNvbW1hcmVhIC13ZWlnaHQgMAorCX0gZWxzZSB7CisJCS52cGFuZS5sb3dlciBwYW5lY29uZmlndXJlIC52cGFuZS5sb3dlci5kaWZmIC1zdHJldGNoIGFsd2F5cworCQkudnBhbmUubG93ZXIgcGFuZWNvbmZpZ3VyZSAudnBhbmUubG93ZXIuY29tbWFyZWEgLXN0cmV0Y2ggbmV2ZXIKKwl9Cit9IGVsc2UgeworCWZyYW1lIC52cGFuZS5sb3dlciAtaGVpZ2h0IDMwMCAtd2lkdGggNDAwCisJZnJhbWUgLnZwYW5lLmxvd2VyLmNvbW1hcmVhCisJZnJhbWUgLnZwYW5lLmxvd2VyLmRpZmYgLXJlbGllZiBzdW5rZW4gLWJvcmRlcndpZHRoIDEKKwlwYWNrIC52cGFuZS5sb3dlci5kaWZmIC1maWxsIGJvdGggLWV4cGFuZCAxCisJcGFjayAudnBhbmUubG93ZXIuY29tbWFyZWEgLXNpZGUgYm90dG9tIC1maWxsIHgKKwkudnBhbmUgYWRkIC52cGFuZS5sb3dlcgorCS52cGFuZSBwYW5lY29uZmlndXJlIC52cGFuZS5sb3dlciAtc3RpY2t5IG5zZXcKK30KKworIyAtLSBDb21taXQgQXJlYSBCdXR0b25zCisjCiske05TfTo6ZnJhbWUgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMKKyR7TlN9OjpsYWJlbCAudnBhbmUubG93ZXIuY29tbWFyZWEuYnV0dG9ucy5sIC10ZXh0IHt9IFwKKwktYW5jaG9yIHcgXAorCS1qdXN0aWZ5IGxlZnQKK3BhY2sgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMubCAtc2lkZSB0b3AgLWZpbGwgeAorcGFjayAudnBhbmUubG93ZXIuY29tbWFyZWEuYnV0dG9ucyAtc2lkZSBsZWZ0IC1maWxsIHkKKworJHtOU306OmJ1dHRvbiAudnBhbmUubG93ZXIuY29tbWFyZWEuYnV0dG9ucy5yZXNjYW4gLXRleHQgW21jIFJlc2Nhbl0gXAorCS1jb21tYW5kIHVpX2RvX3Jlc2NhbgorcGFjayAudnBhbmUubG93ZXIuY29tbWFyZWEuYnV0dG9ucy5yZXNjYW4gLXNpZGUgdG9wIC1maWxsIHgKK2xhcHBlbmQgZGlzYWJsZV9vbl9sb2NrIFwKKwl7LnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMucmVzY2FuIGNvbmYgLXN0YXRlfQorCiske05TfTo6YnV0dG9uIC52cGFuZS5sb3dlci5jb21tYXJlYS5idXR0b25zLmluY2FsbCAtdGV4dCBbbWMgIlN0YWdlIENoYW5nZWQiXSBcCisJLWNvbW1hbmQgZG9fYWRkX2FsbAorcGFjayAudnBhbmUubG93ZXIuY29tbWFyZWEuYnV0dG9ucy5pbmNhbGwgLXNpZGUgdG9wIC1maWxsIHgKK2xhcHBlbmQgZGlzYWJsZV9vbl9sb2NrIFwKKwl7LnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMuaW5jYWxsIGNvbmYgLXN0YXRlfQorCitpZiB7IVtpc19lbmFibGVkIG5vY29tbWl0bXNnXX0geworCSR7TlN9OjpidXR0b24gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMuc2lnbm9mZiAtdGV4dCBbbWMgIlNpZ24gT2ZmIl0gXAorCQktY29tbWFuZCBkb19zaWdub2ZmCisJcGFjayAudnBhbmUubG93ZXIuY29tbWFyZWEuYnV0dG9ucy5zaWdub2ZmIC1zaWRlIHRvcCAtZmlsbCB4Cit9CisKKyR7TlN9OjpidXR0b24gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMuY29tbWl0IC10ZXh0IFtjb21taXRfYnRuX2NhcHRpb25dIFwKKwktY29tbWFuZCBkb19jb21taXQKK3BhY2sgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMuY29tbWl0IC1zaWRlIHRvcCAtZmlsbCB4CitsYXBwZW5kIGRpc2FibGVfb25fbG9jayBcCisJey52cGFuZS5sb3dlci5jb21tYXJlYS5idXR0b25zLmNvbW1pdCBjb25mIC1zdGF0ZX0KKworaWYgeyFbaXNfZW5hYmxlZCBub2NvbW1pdF19IHsKKwkke05TfTo6YnV0dG9uIC52cGFuZS5sb3dlci5jb21tYXJlYS5idXR0b25zLnB1c2ggLXRleHQgW21jIFB1c2hdIFwKKwkJLWNvbW1hbmQgZG9fcHVzaF9hbnl3aGVyZQorCXBhY2sgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1dHRvbnMucHVzaCAtc2lkZSB0b3AgLWZpbGwgeAorfQorCisjIC0tIENvbW1pdCBNZXNzYWdlIEJ1ZmZlcgorIworJHtOU306OmZyYW1lIC52cGFuZS5sb3dlci5jb21tYXJlYS5idWZmZXIKKyR7TlN9OjpmcmFtZSAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLmhlYWRlcgorc2V0IHVpX2NvbW0gLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlci50CitzZXQgdWlfY29tbCAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLmhlYWRlci5sCisKK2lmIHshW2lzX2VuYWJsZWQgbm9jb21taXRdfSB7CisJJHtOU306OnJhZGlvYnV0dG9uIC52cGFuZS5sb3dlci5jb21tYXJlYS5idWZmZXIuaGVhZGVyLm5ldyBcCisJCS10ZXh0IFttYyAiTmV3IENvbW1pdCJdIFwKKwkJLWNvbW1hbmQgZG9fc2VsZWN0X2NvbW1pdF90eXBlIFwKKwkJLXZhcmlhYmxlIHNlbGVjdGVkX2NvbW1pdF90eXBlIFwKKwkJLXZhbHVlIG5ldworCWxhcHBlbmQgZGlzYWJsZV9vbl9sb2NrIFwKKwkJW2xpc3QgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlci5oZWFkZXIubmV3IGNvbmYgLXN0YXRlXQorCSR7TlN9OjpyYWRpb2J1dHRvbiAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLmhlYWRlci5hbWVuZCBcCisJCS10ZXh0IFttYyAiQW1lbmQgTGFzdCBDb21taXQiXSBcCisJCS1jb21tYW5kIGRvX3NlbGVjdF9jb21taXRfdHlwZSBcCisJCS12YXJpYWJsZSBzZWxlY3RlZF9jb21taXRfdHlwZSBcCisJCS12YWx1ZSBhbWVuZAorCWxhcHBlbmQgZGlzYWJsZV9vbl9sb2NrIFwKKwkJW2xpc3QgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlci5oZWFkZXIuYW1lbmQgY29uZiAtc3RhdGVdCit9CisKKyR7TlN9OjpsYWJlbCAkdWlfY29tbCBcCisJLWFuY2hvciB3IFwKKwktanVzdGlmeSBsZWZ0Citwcm9jIHRyYWNlX2NvbW1pdF90eXBlIHt2YXJuYW1lIGFyZ3N9IHsKKwlnbG9iYWwgdWlfY29tbCBjb21taXRfdHlwZQorCXN3aXRjaCAtZ2xvYiAtLSAkY29tbWl0X3R5cGUgeworCWluaXRpYWwgICAgICAge3NldCB0eHQgW21jICJJbml0aWFsIENvbW1pdCBNZXNzYWdlOiJdfQorCWFtZW5kICAgICAgICAge3NldCB0eHQgW21jICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiJdfQorCWFtZW5kLWluaXRpYWwge3NldCB0eHQgW21jICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6Il19CisJYW1lbmQtbWVyZ2UgICB7c2V0IHR4dCBbbWMgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6Il19CisJbWVyZ2UgICAgICAgICB7c2V0IHR4dCBbbWMgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiJdfQorCSogICAgICAgICAgICAge3NldCB0eHQgW21jICJDb21taXQgTWVzc2FnZToiXX0KKwl9CisJJHVpX2NvbWwgY29uZiAtdGV4dCAkdHh0Cit9Cit0cmFjZSBhZGQgdmFyaWFibGUgY29tbWl0X3R5cGUgd3JpdGUgdHJhY2VfY29tbWl0X3R5cGUKK3BhY2sgJHVpX2NvbWwgLXNpZGUgbGVmdCAtZmlsbCB4CisKK2lmIHshW2lzX2VuYWJsZWQgbm9jb21taXRdfSB7CisJcGFjayAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLmhlYWRlci5hbWVuZCAtc2lkZSByaWdodAorCXBhY2sgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlci5oZWFkZXIubmV3IC1zaWRlIHJpZ2h0Cit9CisKK3RleHQgJHVpX2NvbW0gLWJhY2tncm91bmQgd2hpdGUgLWZvcmVncm91bmQgYmxhY2sgXAorCS1ib3JkZXJ3aWR0aCAxIFwKKwktdW5kbyB0cnVlIFwKKwktbWF4dW5kbyAyMCBcCisJLWF1dG9zZXBhcmF0b3JzIHRydWUgXAorCS1yZWxpZWYgc3Vua2VuIFwKKwktd2lkdGggJHJlcG9fY29uZmlnKGd1aS5jb21taXRtc2d3aWR0aCkgLWhlaWdodCA5IC13cmFwIG5vbmUgXAorCS1mb250IGZvbnRfZGlmZiBcCisJLXlzY3JvbGxjb21tYW5kIHsudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLnNieSBzZXR9Ciske05TfTo6c2Nyb2xsYmFyIC52cGFuZS5sb3dlci5jb21tYXJlYS5idWZmZXIuc2J5IFwKKwktY29tbWFuZCBbbGlzdCAkdWlfY29tbSB5dmlld10KK3BhY2sgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlci5oZWFkZXIgLXNpZGUgdG9wIC1maWxsIHgKK3BhY2sgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlci5zYnkgLXNpZGUgcmlnaHQgLWZpbGwgeQorcGFjayAkdWlfY29tbSAtc2lkZSBsZWZ0IC1maWxsIHkKK3BhY2sgLnZwYW5lLmxvd2VyLmNvbW1hcmVhLmJ1ZmZlciAtc2lkZSBsZWZ0IC1maWxsIHkKKworIyAtLSBDb21taXQgTWVzc2FnZSBCdWZmZXIgQ29udGV4dCBNZW51CisjCitzZXQgY3R4bSAudnBhbmUubG93ZXIuY29tbWFyZWEuYnVmZmVyLmN0eG0KK21lbnUgJGN0eG0gLXRlYXJvZmYgMAorJGN0eG0gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgQ3V0XSBcCisJLWNvbW1hbmQge3RrX3RleHRDdXQgJHVpX2NvbW19CiskY3R4bSBhZGQgY29tbWFuZCBcCisJLWxhYmVsIFttYyBDb3B5XSBcCisJLWNvbW1hbmQge3RrX3RleHRDb3B5ICR1aV9jb21tfQorJGN0eG0gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgUGFzdGVdIFwKKwktY29tbWFuZCB7dGtfdGV4dFBhc3RlICR1aV9jb21tfQorJGN0eG0gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgRGVsZXRlXSBcCisJLWNvbW1hbmQge2NhdGNoIHskdWlfY29tbSBkZWxldGUgc2VsLmZpcnN0IHNlbC5sYXN0fX0KKyRjdHhtIGFkZCBzZXBhcmF0b3IKKyRjdHhtIGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJTZWxlY3QgQWxsIl0gXAorCS1jb21tYW5kIHtmb2N1cyAkdWlfY29tbTskdWlfY29tbSB0YWcgYWRkIHNlbCAwLjAgZW5kfQorJGN0eG0gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIkNvcHkgQWxsIl0gXAorCS1jb21tYW5kIHsKKwkJJHVpX2NvbW0gdGFnIGFkZCBzZWwgMC4wIGVuZAorCQl0a190ZXh0Q29weSAkdWlfY29tbQorCQkkdWlfY29tbSB0YWcgcmVtb3ZlIHNlbCAwLjAgZW5kCisJfQorJGN0eG0gYWRkIHNlcGFyYXRvcgorJGN0eG0gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIlNpZ24gT2ZmIl0gXAorCS1jb21tYW5kIGRvX3NpZ25vZmYKK3NldCB1aV9jb21tX2N0eG0gJGN0eG0KKworIyAtLSBEaWZmIEhlYWRlcgorIworcHJvYyB0cmFjZV9jdXJyZW50X2RpZmZfcGF0aCB7dmFybmFtZSBhcmdzfSB7CisJZ2xvYmFsIGN1cnJlbnRfZGlmZl9wYXRoIGRpZmZfYWN0aW9ucyBmaWxlX3N0YXRlcworCWlmIHskY3VycmVudF9kaWZmX3BhdGggZXEge319IHsKKwkJc2V0IHMge30KKwkJc2V0IGYge30KKwkJc2V0IHAge30KKwkJc2V0IG8gZGlzYWJsZWQKKwl9IGVsc2UgeworCQlzZXQgcCAkY3VycmVudF9kaWZmX3BhdGgKKwkJc2V0IHMgW21hcGRlc2MgW2xpbmRleCAkZmlsZV9zdGF0ZXMoJHApIDBdICRwXQorCQlzZXQgZiBbbWMgIkZpbGU6Il0KKwkJc2V0IHAgW2VzY2FwZV9wYXRoICRwXQorCQlzZXQgbyBub3JtYWwKKwl9CisKKwkudnBhbmUubG93ZXIuZGlmZi5oZWFkZXIuc3RhdHVzIGNvbmZpZ3VyZSAtdGV4dCAkcworCS52cGFuZS5sb3dlci5kaWZmLmhlYWRlci5maWxlIGNvbmZpZ3VyZSAtdGV4dCAkZgorCS52cGFuZS5sb3dlci5kaWZmLmhlYWRlci5wYXRoIGNvbmZpZ3VyZSAtdGV4dCAkcAorCWZvcmVhY2ggdyAkZGlmZl9hY3Rpb25zIHsKKwkJdXBsZXZlbCAjMCAkdyAkbworCX0KK30KK3RyYWNlIGFkZCB2YXJpYWJsZSBjdXJyZW50X2RpZmZfcGF0aCB3cml0ZSB0cmFjZV9jdXJyZW50X2RpZmZfcGF0aAorCitnb2xkX2ZyYW1lIC52cGFuZS5sb3dlci5kaWZmLmhlYWRlcgordGxhYmVsIC52cGFuZS5sb3dlci5kaWZmLmhlYWRlci5zdGF0dXMgXAorCS1iYWNrZ3JvdW5kIGdvbGQgXAorCS1mb3JlZ3JvdW5kIGJsYWNrIFwKKwktd2lkdGggJG1heF9zdGF0dXNfZGVzYyBcCisJLWFuY2hvciB3IFwKKwktanVzdGlmeSBsZWZ0Cit0bGFiZWwgLnZwYW5lLmxvd2VyLmRpZmYuaGVhZGVyLmZpbGUgXAorCS1iYWNrZ3JvdW5kIGdvbGQgXAorCS1mb3JlZ3JvdW5kIGJsYWNrIFwKKwktYW5jaG9yIHcgXAorCS1qdXN0aWZ5IGxlZnQKK3RsYWJlbCAudnBhbmUubG93ZXIuZGlmZi5oZWFkZXIucGF0aCBcCisJLWJhY2tncm91bmQgZ29sZCBcCisJLWZvcmVncm91bmQgYmxhY2sgXAorCS1hbmNob3IgdyBcCisJLWp1c3RpZnkgbGVmdAorcGFjayAudnBhbmUubG93ZXIuZGlmZi5oZWFkZXIuc3RhdHVzIC1zaWRlIGxlZnQKK3BhY2sgLnZwYW5lLmxvd2VyLmRpZmYuaGVhZGVyLmZpbGUgLXNpZGUgbGVmdAorcGFjayAudnBhbmUubG93ZXIuZGlmZi5oZWFkZXIucGF0aCAtZmlsbCB4CitzZXQgY3R4bSAudnBhbmUubG93ZXIuZGlmZi5oZWFkZXIuY3R4bQorbWVudSAkY3R4bSAtdGVhcm9mZiAwCiskY3R4bSBhZGQgY29tbWFuZCBcCisJLWxhYmVsIFttYyBDb3B5XSBcCisJLWNvbW1hbmQgeworCQljbGlwYm9hcmQgY2xlYXIKKwkJY2xpcGJvYXJkIGFwcGVuZCBcCisJCQktZm9ybWF0IFNUUklORyBcCisJCQktdHlwZSBTVFJJTkcgXAorCQkJLS0gJGN1cnJlbnRfZGlmZl9wYXRoCisJfQorbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG0gZW50cnljb25mIFskY3R4bSBpbmRleCBsYXN0XSAtc3RhdGVdCitiaW5kX2J1dHRvbjMgLnZwYW5lLmxvd2VyLmRpZmYuaGVhZGVyLnBhdGggInRrX3BvcHVwICRjdHhtICVYICVZIgorCisjIC0tIERpZmYgQm9keQorIworJHtOU306OmZyYW1lIC52cGFuZS5sb3dlci5kaWZmLmJvZHkKK3NldCB1aV9kaWZmIC52cGFuZS5sb3dlci5kaWZmLmJvZHkudAordGV4dCAkdWlfZGlmZiAtYmFja2dyb3VuZCB3aGl0ZSAtZm9yZWdyb3VuZCBibGFjayBcCisJLWJvcmRlcndpZHRoIDAgXAorCS13aWR0aCA4MCAtaGVpZ2h0IDUgLXdyYXAgbm9uZSBcCisJLWZvbnQgZm9udF9kaWZmIFwKKwkteHNjcm9sbGNvbW1hbmQgey52cGFuZS5sb3dlci5kaWZmLmJvZHkuc2J4IHNldH0gXAorCS15c2Nyb2xsY29tbWFuZCB7LnZwYW5lLmxvd2VyLmRpZmYuYm9keS5zYnkgc2V0fSBcCisJLXN0YXRlIGRpc2FibGVkCitjYXRjaCB7JHVpX2RpZmYgY29uZmlndXJlIC10YWJzdHlsZSB3b3JkcHJvY2Vzc29yfQorJHtOU306OnNjcm9sbGJhciAudnBhbmUubG93ZXIuZGlmZi5ib2R5LnNieCAtb3JpZW50IGhvcml6b250YWwgXAorCS1jb21tYW5kIFtsaXN0ICR1aV9kaWZmIHh2aWV3XQorJHtOU306OnNjcm9sbGJhciAudnBhbmUubG93ZXIuZGlmZi5ib2R5LnNieSAtb3JpZW50IHZlcnRpY2FsIFwKKwktY29tbWFuZCBbbGlzdCAkdWlfZGlmZiB5dmlld10KK3BhY2sgLnZwYW5lLmxvd2VyLmRpZmYuYm9keS5zYnggLXNpZGUgYm90dG9tIC1maWxsIHgKK3BhY2sgLnZwYW5lLmxvd2VyLmRpZmYuYm9keS5zYnkgLXNpZGUgcmlnaHQgLWZpbGwgeQorcGFjayAkdWlfZGlmZiAtc2lkZSBsZWZ0IC1maWxsIGJvdGggLWV4cGFuZCAxCitwYWNrIC52cGFuZS5sb3dlci5kaWZmLmhlYWRlciAtc2lkZSB0b3AgLWZpbGwgeAorcGFjayAudnBhbmUubG93ZXIuZGlmZi5ib2R5IC1zaWRlIGJvdHRvbSAtZmlsbCBib3RoIC1leHBhbmQgMQorCitmb3JlYWNoIHtuIGN9IHswIGJsYWNrIDEgcmVkNCAyIGdyZWVuNCAzIHllbGxvdzQgNCBibHVlNCA1IG1hZ2VudGE0IDYgY3lhbjQgNyBncmV5NjB9IHsKKwkkdWlfZGlmZiB0YWcgY29uZmlndXJlIGNscjQkbiAtYmFja2dyb3VuZCAkYworCSR1aV9kaWZmIHRhZyBjb25maWd1cmUgY2xyaTQkbiAtZm9yZWdyb3VuZCAkYworCSR1aV9kaWZmIHRhZyBjb25maWd1cmUgY2xyMyRuIC1mb3JlZ3JvdW5kICRjCisJJHVpX2RpZmYgdGFnIGNvbmZpZ3VyZSBjbHJpMyRuIC1iYWNrZ3JvdW5kICRjCit9CiskdWlfZGlmZiB0YWcgY29uZmlndXJlIGNscjEgLWZvbnQgZm9udF9kaWZmYm9sZAorJHVpX2RpZmYgdGFnIGNvbmZpZ3VyZSBjbHI0IC11bmRlcmxpbmUgMQorCiskdWlfZGlmZiB0YWcgY29uZiBkX2luZm8gLWZvcmVncm91bmQgYmx1ZSAtZm9udCBmb250X2RpZmZib2xkCisKKyR1aV9kaWZmIHRhZyBjb25mIGRfY3IgLWVsaWRlIHRydWUKKyR1aV9kaWZmIHRhZyBjb25mIGRfQCAtZm9udCBmb250X2RpZmZib2xkCiskdWlfZGlmZiB0YWcgY29uZiBkXysgLWZvcmVncm91bmQgeyMwMGEwMDB9CiskdWlfZGlmZiB0YWcgY29uZiBkXy0gLWZvcmVncm91bmQgcmVkCisKKyR1aV9kaWZmIHRhZyBjb25mIGRfKysgLWZvcmVncm91bmQgeyMwMGEwMDB9CiskdWlfZGlmZiB0YWcgY29uZiBkXy0tIC1mb3JlZ3JvdW5kIHJlZAorJHVpX2RpZmYgdGFnIGNvbmYgZF8rcyBcCisJLWZvcmVncm91bmQgeyMwMGEwMDB9IFwKKwktYmFja2dyb3VuZCB7I2UyZWZmYX0KKyR1aV9kaWZmIHRhZyBjb25mIGRfLXMgXAorCS1mb3JlZ3JvdW5kIHJlZCBcCisJLWJhY2tncm91bmQgeyNlMmVmZmF9CiskdWlfZGlmZiB0YWcgY29uZiBkX3MrIFwKKwktZm9yZWdyb3VuZCB7IzAwYTAwMH0gXAorCS1iYWNrZ3JvdW5kIGl2b3J5MQorJHVpX2RpZmYgdGFnIGNvbmYgZF9zLSBcCisJLWZvcmVncm91bmQgcmVkIFwKKwktYmFja2dyb3VuZCBpdm9yeTEKKworJHVpX2RpZmYgdGFnIGNvbmYgZDwgXAorCS1mb3JlZ3JvdW5kIG9yYW5nZSBcCisJLWZvbnQgZm9udF9kaWZmYm9sZAorJHVpX2RpZmYgdGFnIGNvbmYgZD0gXAorCS1mb3JlZ3JvdW5kIG9yYW5nZSBcCisJLWZvbnQgZm9udF9kaWZmYm9sZAorJHVpX2RpZmYgdGFnIGNvbmYgZD4gXAorCS1mb3JlZ3JvdW5kIG9yYW5nZSBcCisJLWZvbnQgZm9udF9kaWZmYm9sZAorCiskdWlfZGlmZiB0YWcgcmFpc2Ugc2VsCisKKyMgLS0gRGlmZiBCb2R5IENvbnRleHQgTWVudQorIworCitwcm9jIGNyZWF0ZV9jb21tb25fZGlmZl9wb3B1cCB7Y3R4bX0geworCSRjdHhtIGFkZCBjb21tYW5kIFwKKwkJLWxhYmVsIFttYyBSZWZyZXNoXSBcCisJCS1jb21tYW5kIHJlc2hvd19kaWZmCisJbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG0gZW50cnljb25mIFskY3R4bSBpbmRleCBsYXN0XSAtc3RhdGVdCisJJGN0eG0gYWRkIGNvbW1hbmQgXAorCQktbGFiZWwgW21jIENvcHldIFwKKwkJLWNvbW1hbmQge3RrX3RleHRDb3B5ICR1aV9kaWZmfQorCWxhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtIGVudHJ5Y29uZiBbJGN0eG0gaW5kZXggbGFzdF0gLXN0YXRlXQorCSRjdHhtIGFkZCBjb21tYW5kIFwKKwkJLWxhYmVsIFttYyAiU2VsZWN0IEFsbCJdIFwKKwkJLWNvbW1hbmQge2ZvY3VzICR1aV9kaWZmOyR1aV9kaWZmIHRhZyBhZGQgc2VsIDAuMCBlbmR9CisJbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG0gZW50cnljb25mIFskY3R4bSBpbmRleCBsYXN0XSAtc3RhdGVdCisJJGN0eG0gYWRkIGNvbW1hbmQgXAorCQktbGFiZWwgW21jICJDb3B5IEFsbCJdIFwKKwkJLWNvbW1hbmQgeworCQkJJHVpX2RpZmYgdGFnIGFkZCBzZWwgMC4wIGVuZAorCQkJdGtfdGV4dENvcHkgJHVpX2RpZmYKKwkJCSR1aV9kaWZmIHRhZyByZW1vdmUgc2VsIDAuMCBlbmQKKwkJfQorCWxhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtIGVudHJ5Y29uZiBbJGN0eG0gaW5kZXggbGFzdF0gLXN0YXRlXQorCSRjdHhtIGFkZCBzZXBhcmF0b3IKKwkkY3R4bSBhZGQgY29tbWFuZCBcCisJCS1sYWJlbCBbbWMgIkRlY3JlYXNlIEZvbnQgU2l6ZSJdIFwKKwkJLWNvbW1hbmQge2luY3JfZm9udF9zaXplIGZvbnRfZGlmZiAtMX0KKwlsYXBwZW5kIGRpZmZfYWN0aW9ucyBbbGlzdCAkY3R4bSBlbnRyeWNvbmYgWyRjdHhtIGluZGV4IGxhc3RdIC1zdGF0ZV0KKwkkY3R4bSBhZGQgY29tbWFuZCBcCisJCS1sYWJlbCBbbWMgIkluY3JlYXNlIEZvbnQgU2l6ZSJdIFwKKwkJLWNvbW1hbmQge2luY3JfZm9udF9zaXplIGZvbnRfZGlmZiAxfQorCWxhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtIGVudHJ5Y29uZiBbJGN0eG0gaW5kZXggbGFzdF0gLXN0YXRlXQorCSRjdHhtIGFkZCBzZXBhcmF0b3IKKwlzZXQgZW1lbnUgJGN0eG0uZW5jCisJbWVudSAkZW1lbnUKKwlidWlsZF9lbmNvZGluZ19tZW51ICRlbWVudSBbbGlzdCBmb3JjZV9kaWZmX2VuY29kaW5nXQorCSRjdHhtIGFkZCBjYXNjYWRlIFwKKwkJLWxhYmVsIFttYyAiRW5jb2RpbmciXSBcCisJCS1tZW51ICRlbWVudQorCWxhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtIGVudHJ5Y29uZiBbJGN0eG0gaW5kZXggbGFzdF0gLXN0YXRlXQorCSRjdHhtIGFkZCBzZXBhcmF0b3IKKwkkY3R4bSBhZGQgY29tbWFuZCAtbGFiZWwgW21jICJPcHRpb25zLi4uIl0gXAorCQktY29tbWFuZCBkb19vcHRpb25zCit9CisKK3NldCBjdHhtIC52cGFuZS5sb3dlci5kaWZmLmJvZHkuY3R4bQorbWVudSAkY3R4bSAtdGVhcm9mZiAwCiskY3R4bSBhZGQgY29tbWFuZCBcCisJLWxhYmVsIFttYyAiQXBwbHkvUmV2ZXJzZSBIdW5rIl0gXAorCS1jb21tYW5kIHthcHBseV9odW5rICRjdXJzb3JYICRjdXJzb3JZfQorc2V0IHVpX2RpZmZfYXBwbHlodW5rIFskY3R4bSBpbmRleCBsYXN0XQorbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG0gZW50cnljb25mICR1aV9kaWZmX2FwcGx5aHVuayAtc3RhdGVdCiskY3R4bSBhZGQgY29tbWFuZCBcCisJLWxhYmVsIFttYyAiQXBwbHkvUmV2ZXJzZSBMaW5lIl0gXAorCS1jb21tYW5kIHthcHBseV9yYW5nZV9vcl9saW5lICRjdXJzb3JYICRjdXJzb3JZOyBkb19yZXNjYW59CitzZXQgdWlfZGlmZl9hcHBseWxpbmUgWyRjdHhtIGluZGV4IGxhc3RdCitsYXBwZW5kIGRpZmZfYWN0aW9ucyBbbGlzdCAkY3R4bSBlbnRyeWNvbmYgJHVpX2RpZmZfYXBwbHlsaW5lIC1zdGF0ZV0KKyRjdHhtIGFkZCBzZXBhcmF0b3IKKyRjdHhtIGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJTaG93IExlc3MgQ29udGV4dCJdIFwKKwktY29tbWFuZCBzaG93X2xlc3NfY29udGV4dAorbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG0gZW50cnljb25mIFskY3R4bSBpbmRleCBsYXN0XSAtc3RhdGVdCiskY3R4bSBhZGQgY29tbWFuZCBcCisJLWxhYmVsIFttYyAiU2hvdyBNb3JlIENvbnRleHQiXSBcCisJLWNvbW1hbmQgc2hvd19tb3JlX2NvbnRleHQKK2xhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtIGVudHJ5Y29uZiBbJGN0eG0gaW5kZXggbGFzdF0gLXN0YXRlXQorJGN0eG0gYWRkIHNlcGFyYXRvcgorY3JlYXRlX2NvbW1vbl9kaWZmX3BvcHVwICRjdHhtCisKK3NldCBjdHhtbWcgLnZwYW5lLmxvd2VyLmRpZmYuYm9keS5jdHhtbWcKK21lbnUgJGN0eG1tZyAtdGVhcm9mZiAwCiskY3R4bW1nIGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJSdW4gTWVyZ2UgVG9vbCJdIFwKKwktY29tbWFuZCB7bWVyZ2VfcmVzb2x2ZV90b29sfQorbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG1tZyBlbnRyeWNvbmYgWyRjdHhtbWcgaW5kZXggbGFzdF0gLXN0YXRlXQorJGN0eG1tZyBhZGQgc2VwYXJhdG9yCiskY3R4bW1nIGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJVc2UgUmVtb3RlIFZlcnNpb24iXSBcCisJLWNvbW1hbmQge21lcmdlX3Jlc29sdmVfb25lIDN9CitsYXBwZW5kIGRpZmZfYWN0aW9ucyBbbGlzdCAkY3R4bW1nIGVudHJ5Y29uZiBbJGN0eG1tZyBpbmRleCBsYXN0XSAtc3RhdGVdCiskY3R4bW1nIGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJVc2UgTG9jYWwgVmVyc2lvbiJdIFwKKwktY29tbWFuZCB7bWVyZ2VfcmVzb2x2ZV9vbmUgMn0KK2xhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtbWcgZW50cnljb25mIFskY3R4bW1nIGluZGV4IGxhc3RdIC1zdGF0ZV0KKyRjdHhtbWcgYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIlJldmVydCBUbyBCYXNlIl0gXAorCS1jb21tYW5kIHttZXJnZV9yZXNvbHZlX29uZSAxfQorbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG1tZyBlbnRyeWNvbmYgWyRjdHhtbWcgaW5kZXggbGFzdF0gLXN0YXRlXQorJGN0eG1tZyBhZGQgc2VwYXJhdG9yCiskY3R4bW1nIGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJTaG93IExlc3MgQ29udGV4dCJdIFwKKwktY29tbWFuZCBzaG93X2xlc3NfY29udGV4dAorbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG1tZyBlbnRyeWNvbmYgWyRjdHhtbWcgaW5kZXggbGFzdF0gLXN0YXRlXQorJGN0eG1tZyBhZGQgY29tbWFuZCBcCisJLWxhYmVsIFttYyAiU2hvdyBNb3JlIENvbnRleHQiXSBcCisJLWNvbW1hbmQgc2hvd19tb3JlX2NvbnRleHQKK2xhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtbWcgZW50cnljb25mIFskY3R4bW1nIGluZGV4IGxhc3RdIC1zdGF0ZV0KKyRjdHhtbWcgYWRkIHNlcGFyYXRvcgorY3JlYXRlX2NvbW1vbl9kaWZmX3BvcHVwICRjdHhtbWcKKworc2V0IGN0eG1zbSAudnBhbmUubG93ZXIuZGlmZi5ib2R5LmN0eG1zbQorbWVudSAkY3R4bXNtIC10ZWFyb2ZmIDAKKyRjdHhtc20gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiXSBcCisJLWNvbW1hbmQge2RvX2dpdGsgLS0gdHJ1ZX0KK2xhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtc20gZW50cnljb25mIFskY3R4bXNtIGluZGV4IGxhc3RdIC1zdGF0ZV0KKyRjdHhtc20gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiXSBcCisJLWNvbW1hbmQge2RvX2dpdGsge30gdHJ1ZX0KK2xhcHBlbmQgZGlmZl9hY3Rpb25zIFtsaXN0ICRjdHhtc20gZW50cnljb25mIFskY3R4bXNtIGluZGV4IGxhc3RdIC1zdGF0ZV0KKyRjdHhtc20gYWRkIGNvbW1hbmQgXAorCS1sYWJlbCBbbWMgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSJdIFwKKwktY29tbWFuZCB7ZG9fZ2l0ayAtLWFsbCB0cnVlfQorbGFwcGVuZCBkaWZmX2FjdGlvbnMgW2xpc3QgJGN0eG1zbSBlbnRyeWNvbmYgWyRjdHhtc20gaW5kZXggbGFzdF0gLXN0YXRlXQorJGN0eG1zbSBhZGQgc2VwYXJhdG9yCiskY3R4bXNtIGFkZCBjb21tYW5kIFwKKwktbGFiZWwgW21jICJTdGFydCBnaXQgZ3VpIEluIFRoZSBTdWJtb2R1bGUiXSBcCisJLWNvbW1hbmQge2RvX2dpdF9ndWl9CitsYXBwZW5kIGRpZmZfYWN0aW9ucyBbbGlzdCAkY3R4bXNtIGVudHJ5Y29uZiBbJGN0eG1zbSBpbmRleCBsYXN0XSAtc3RhdGVdCiskY3R4bXNtIGFkZCBzZXBhcmF0b3IKK2NyZWF0ZV9jb21tb25fZGlmZl9wb3B1cCAkY3R4bXNtCisKK3Byb2MgaGFzX3RleHRjb252IHtwYXRofSB7CisJaWYge1tpc19jb25maWdfZmFsc2UgZ3VpLnRleHRjb252XX0geworCQlyZXR1cm4gMAorCX0KKwlzZXQgZmlsdGVyIFtnaXRhdHRyICRwYXRoIGRpZmYgc2V0XQorCXNldCB0ZXh0Y29udiBbZ2V0X2NvbmZpZyBbam9pbiBbbGlzdCBkaWZmICRmaWx0ZXIgdGV4dGNvbnZdIC5dXQorCWlmIHskZmlsdGVyIG5lIHtzZXR9ICYmICR0ZXh0Y29udiBuZSB7fX0geworCQlyZXR1cm4gMQorCX0gZWxzZSB7CisJCXJldHVybiAwCisJfQorfQorCitwcm9jIHBvcHVwX2RpZmZfbWVudSB7Y3R4bSBjdHhtbWcgY3R4bXNtIHggeSBYIFl9IHsKKwlnbG9iYWwgY3VycmVudF9kaWZmX3BhdGggZmlsZV9zdGF0ZXMKKwlzZXQgOjpjdXJzb3JYICR4CisJc2V0IDo6Y3Vyc29yWSAkeQorCWlmIHtbaW5mbyBleGlzdHMgZmlsZV9zdGF0ZXMoJGN1cnJlbnRfZGlmZl9wYXRoKV19IHsKKwkJc2V0IHN0YXRlIFtsaW5kZXggJGZpbGVfc3RhdGVzKCRjdXJyZW50X2RpZmZfcGF0aCkgMF0KKwl9IGVsc2UgeworCQlzZXQgc3RhdGUge19ffQorCX0KKwlpZiB7W3N0cmluZyBmaXJzdCB7VX0gJHN0YXRlXSA+PSAwfSB7CisJCXRrX3BvcHVwICRjdHhtbWcgJFggJFkKKwl9IGVsc2VpZiB7JDo6aXNfc3VibW9kdWxlX2RpZmZ9IHsKKwkJdGtfcG9wdXAgJGN0eG1zbSAkWCAkWQorCX0gZWxzZSB7CisJCXNldCBoYXNfcmFuZ2UgW2V4cHIge1skOjp1aV9kaWZmIHRhZyBuZXh0cmFuZ2Ugc2VsIDAuMF0gIT0ge319XQorCQlpZiB7JDo6dWlfaW5kZXggZXEgJDo6Y3VycmVudF9kaWZmX3NpZGV9IHsKKwkJCXNldCBsIFttYyAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0Il0KKwkJCWlmIHskaGFzX3JhbmdlfSB7CisJCQkJc2V0IHQgW21jICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0Il0KKwkJCX0gZWxzZSB7CisJCQkJc2V0IHQgW21jICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiXQorCQkJfQorCQl9IGVsc2UgeworCQkJc2V0IGwgW21jICJTdGFnZSBIdW5rIEZvciBDb21taXQiXQorCQkJaWYgeyRoYXNfcmFuZ2V9IHsKKwkJCQlzZXQgdCBbbWMgIlN0YWdlIExpbmVzIEZvciBDb21taXQiXQorCQkJfSBlbHNlIHsKKwkJCQlzZXQgdCBbbWMgIlN0YWdlIExpbmUgRm9yIENvbW1pdCJdCisJCQl9CisJCX0KKwkJaWYgeyQ6OmlzXzN3YXlfZGlmZgorCQkJfHwgJGN1cnJlbnRfZGlmZl9wYXRoIGVxIHt9CisJCQl8fCB7X199IGVxICRzdGF0ZQorCQkJfHwge19PfSBlcSAkc3RhdGUKKwkJCXx8IFtzdHJpbmcgbWF0Y2ggez9UfSAkc3RhdGVdCisJCQl8fCBbc3RyaW5nIG1hdGNoIHtUP30gJHN0YXRlXQorCQkJfHwgW2hhc190ZXh0Y29udiAkY3VycmVudF9kaWZmX3BhdGhdfSB7CisJCQlzZXQgcyBkaXNhYmxlZAorCQl9IGVsc2UgeworCQkJc2V0IHMgbm9ybWFsCisJCX0KKwkJJGN0eG0gZW50cnljb25mICQ6OnVpX2RpZmZfYXBwbHlodW5rIC1zdGF0ZSAkcyAtbGFiZWwgJGwKKwkJJGN0eG0gZW50cnljb25mICQ6OnVpX2RpZmZfYXBwbHlsaW5lIC1zdGF0ZSAkcyAtbGFiZWwgJHQKKwkJdGtfcG9wdXAgJGN0eG0gJFggJFkKKwl9Cit9CitiaW5kX2J1dHRvbjMgJHVpX2RpZmYgW2xpc3QgcG9wdXBfZGlmZl9tZW51ICRjdHhtICRjdHhtbWcgJGN0eG1zbSAleCAleSAlWCAlWV0KKworIyAtLSBTdGF0dXMgQmFyCisjCitzZXQgbWFpbl9zdGF0dXMgWzo6c3RhdHVzX2Jhcjo6bmV3IC5zdGF0dXNdCitwYWNrIC5zdGF0dXMgLWFuY2hvciB3IC1zaWRlIGJvdHRvbSAtZmlsbCB4CiskbWFpbl9zdGF0dXMgc2hvdyBbbWMgIkluaXRpYWxpemluZy4uLiJdCisKKyMgLS0gTG9hZCBnZW9tZXRyeQorIworcHJvYyBvbl90dGtfcGFuZV9tYXBwZWQge3cgcGFuZSBwb3N9IHsKKwliaW5kICR3IDxNYXA+IHt9CisJYWZ0ZXIgMCBbbGlzdCBhZnRlciBpZGxlIFtsaXN0ICR3IHNhc2hwb3MgJHBhbmUgJHBvc11dCit9Citwcm9jIG9uX3RrX3BhbmVfbWFwcGVkIHt3IHBhbmUgeCB5fSB7CisJYmluZCAkdyA8TWFwPiB7fQorCWFmdGVyIDAgW2xpc3QgYWZ0ZXIgaWRsZSBbbGlzdCAkdyBzYXNoIHBsYWNlICRwYW5lICR4ICR5XV0KK30KK3Byb2Mgb25fYXBwbGljYXRpb25fbWFwcGVkIHt9IHsKKwlnbG9iYWwgcmVwb19jb25maWcgdXNlX3R0aworCWJpbmQgLiA8TWFwPiB7fQorCXNldCBnbSAkcmVwb19jb25maWcoZ3VpLmdlb21ldHJ5KQorCWlmIHskdXNlX3R0a30geworCQliaW5kIC52cGFuZSA8TWFwPiBcCisJCSAgICBbbGlzdCBvbl90dGtfcGFuZV9tYXBwZWQgJVcgMCBbbGluZGV4ICRnbSAxXV0KKwkJYmluZCAudnBhbmUuZmlsZXMgPE1hcD4gXAorCQkgICAgW2xpc3Qgb25fdHRrX3BhbmVfbWFwcGVkICVXIDAgW2xpbmRleCAkZ20gMl1dCisJfSBlbHNlIHsKKwkJYmluZCAudnBhbmUgPE1hcD4gXAorCQkgICAgW2xpc3Qgb25fdGtfcGFuZV9tYXBwZWQgJVcgMCBcCisJCQkgW2xpbmRleCAkZ20gMV0gXAorCQkJIFtsaW5kZXggWy52cGFuZSBzYXNoIGNvb3JkIDBdIDFdXQorCQliaW5kIC52cGFuZS5maWxlcyA8TWFwPiBcCisJCSAgICBbbGlzdCBvbl90a19wYW5lX21hcHBlZCAlVyAwIFwKKwkJCSBbbGluZGV4IFsudnBhbmUuZmlsZXMgc2FzaCBjb29yZCAwXSAwXSBcCisJCQkgW2xpbmRleCAkZ20gMl1dCisJfQorCXdtIGdlb21ldHJ5IC4gW2xpbmRleCAkZ20gMF0KK30KK2lmIHtbaW5mbyBleGlzdHMgcmVwb19jb25maWcoZ3VpLmdlb21ldHJ5KV19IHsKKwliaW5kIC4gPE1hcD4gW2xpc3Qgb25fYXBwbGljYXRpb25fbWFwcGVkXQorCXdtIGdlb21ldHJ5IC4gW2xpbmRleCAkcmVwb19jb25maWcoZ3VpLmdlb21ldHJ5KSAwXQorfQorCisjIC0tIExvYWQgd2luZG93IHN0YXRlCisjCitpZiB7W2luZm8gZXhpc3RzIHJlcG9fY29uZmlnKGd1aS53bXN0YXRlKV19IHsKKwljYXRjaCB7d20gc3RhdGUgLiAkcmVwb19jb25maWcoZ3VpLndtc3RhdGUpfQorfQorCisjIC0tIEtleSBCaW5kaW5ncworIworYmluZCAkdWlfY29tbSA8JE0xQi1LZXktUmV0dXJuPiB7ZG9fY29tbWl0O2JyZWFrfQorYmluZCAkdWlfY29tbSA8JE0xQi1LZXktdD4ge2RvX2FkZF9zZWxlY3Rpb247YnJlYWt9CitiaW5kICR1aV9jb21tIDwkTTFCLUtleS1UPiB7ZG9fYWRkX3NlbGVjdGlvbjticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LXU+IHtkb191bnN0YWdlX3NlbGVjdGlvbjticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LVU+IHtkb191bnN0YWdlX3NlbGVjdGlvbjticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LWo+IHtkb19yZXZlcnRfc2VsZWN0aW9uO2JyZWFrfQorYmluZCAkdWlfY29tbSA8JE0xQi1LZXktSj4ge2RvX3JldmVydF9zZWxlY3Rpb247YnJlYWt9CitiaW5kICR1aV9jb21tIDwkTTFCLUtleS1pPiB7ZG9fYWRkX2FsbDticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LUk+IHtkb19hZGRfYWxsO2JyZWFrfQorYmluZCAkdWlfY29tbSA8JE0xQi1LZXkteD4ge3RrX3RleHRDdXQgJVc7YnJlYWt9CitiaW5kICR1aV9jb21tIDwkTTFCLUtleS1YPiB7dGtfdGV4dEN1dCAlVzticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LWM+IHt0a190ZXh0Q29weSAlVzticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LUM+IHt0a190ZXh0Q29weSAlVzticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LXY+IHt0a190ZXh0UGFzdGUgJVc7ICVXIHNlZSBpbnNlcnQ7IGJyZWFrfQorYmluZCAkdWlfY29tbSA8JE0xQi1LZXktVj4ge3RrX3RleHRQYXN0ZSAlVzsgJVcgc2VlIGluc2VydDsgYnJlYWt9CitiaW5kICR1aV9jb21tIDwkTTFCLUtleS1hPiB7JVcgdGFnIGFkZCBzZWwgMC4wIGVuZDticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LUE+IHslVyB0YWcgYWRkIHNlbCAwLjAgZW5kO2JyZWFrfQorYmluZCAkdWlfY29tbSA8JE0xQi1LZXktbWludXM+IHtzaG93X2xlc3NfY29udGV4dDticmVha30KK2JpbmQgJHVpX2NvbW0gPCRNMUItS2V5LUtQX1N1YnRyYWN0PiB7c2hvd19sZXNzX2NvbnRleHQ7YnJlYWt9CitiaW5kICR1aV9jb21tIDwkTTFCLUtleS1lcXVhbD4ge3Nob3dfbW9yZV9jb250ZXh0O2JyZWFrfQorYmluZCAkdWlfY29tbSA8JE0xQi1LZXktcGx1cz4ge3Nob3dfbW9yZV9jb250ZXh0O2JyZWFrfQorYmluZCAkdWlfY29tbSA8JE0xQi1LZXktS1BfQWRkPiB7c2hvd19tb3JlX2NvbnRleHQ7YnJlYWt9CisKK2JpbmQgJHVpX2RpZmYgPCRNMUItS2V5LXg+IHt0a190ZXh0Q29weSAlVzticmVha30KK2JpbmQgJHVpX2RpZmYgPCRNMUItS2V5LVg+IHt0a190ZXh0Q29weSAlVzticmVha30KK2JpbmQgJHVpX2RpZmYgPCRNMUItS2V5LWM+IHt0a190ZXh0Q29weSAlVzticmVha30KK2JpbmQgJHVpX2RpZmYgPCRNMUItS2V5LUM+IHt0a190ZXh0Q29weSAlVzticmVha30KK2JpbmQgJHVpX2RpZmYgPCRNMUItS2V5LXY+IHticmVha30KK2JpbmQgJHVpX2RpZmYgPCRNMUItS2V5LVY+IHticmVha30KK2JpbmQgJHVpX2RpZmYgPCRNMUItS2V5LWE+IHslVyB0YWcgYWRkIHNlbCAwLjAgZW5kO2JyZWFrfQorYmluZCAkdWlfZGlmZiA8JE0xQi1LZXktQT4geyVXIHRhZyBhZGQgc2VsIDAuMCBlbmQ7YnJlYWt9CitiaW5kICR1aV9kaWZmIDwkTTFCLUtleS1qPiB7ZG9fcmV2ZXJ0X3NlbGVjdGlvbjticmVha30KK2JpbmQgJHVpX2RpZmYgPCRNMUItS2V5LUo+IHtkb19yZXZlcnRfc2VsZWN0aW9uO2JyZWFrfQorYmluZCAkdWlfZGlmZiA8S2V5LVVwPiAgICAge2NhdGNoIHslVyB5dmlldyBzY3JvbGwgLTEgdW5pdHN9O2JyZWFrfQorYmluZCAkdWlfZGlmZiA8S2V5LURvd24+ICAge2NhdGNoIHslVyB5dmlldyBzY3JvbGwgIDEgdW5pdHN9O2JyZWFrfQorYmluZCAkdWlfZGlmZiA8S2V5LUxlZnQ+ICAge2NhdGNoIHslVyB4dmlldyBzY3JvbGwgLTEgdW5pdHN9O2JyZWFrfQorYmluZCAkdWlfZGlmZiA8S2V5LVJpZ2h0PiAge2NhdGNoIHslVyB4dmlldyBzY3JvbGwgIDEgdW5pdHN9O2JyZWFrfQorYmluZCAkdWlfZGlmZiA8S2V5LWs+ICAgICAgICAge2NhdGNoIHslVyB5dmlldyBzY3JvbGwgLTEgdW5pdHN9O2JyZWFrfQorYmluZCAkdWlfZGlmZiA8S2V5LWo+ICAgICAgICAge2NhdGNoIHslVyB5dmlldyBzY3JvbGwgIDEgdW5pdHN9O2JyZWFrfQorYmluZCAkdWlfZGlmZiA8S2V5LWg+ICAgICAgICAge2NhdGNoIHslVyB4dmlldyBzY3JvbGwgLTEgdW5pdHN9O2JyZWFrfQorYmluZCAkdWlfZGlmZiA8S2V5LWw+ICAgICAgICAge2NhdGNoIHslVyB4dmlldyBzY3JvbGwgIDEgdW5pdHN9O2JyZWFrfQorYmluZCAkdWlfZGlmZiA8Q29udHJvbC1LZXktYj4ge2NhdGNoIHslVyB5dmlldyBzY3JvbGwgLTEgcGFnZXN9O2JyZWFrfQorYmluZCAkdWlfZGlmZiA8Q29udHJvbC1LZXktZj4ge2NhdGNoIHslVyB5dmlldyBzY3JvbGwgIDEgcGFnZXN9O2JyZWFrfQorYmluZCAkdWlfZGlmZiA8QnV0dG9uLTE+ICAge2ZvY3VzICVXfQorCitpZiB7W2lzX2VuYWJsZWQgYnJhbmNoXX0geworCWJpbmQgLiA8JE0xQi1LZXktbj4gYnJhbmNoX2NyZWF0ZTo6ZGlhbG9nCisJYmluZCAuIDwkTTFCLUtleS1OPiBicmFuY2hfY3JlYXRlOjpkaWFsb2cKKwliaW5kIC4gPCRNMUItS2V5LW8+IGJyYW5jaF9jaGVja291dDo6ZGlhbG9nCisJYmluZCAuIDwkTTFCLUtleS1PPiBicmFuY2hfY2hlY2tvdXQ6OmRpYWxvZworCWJpbmQgLiA8JE0xQi1LZXktbT4gbWVyZ2U6OmRpYWxvZworCWJpbmQgLiA8JE0xQi1LZXktTT4gbWVyZ2U6OmRpYWxvZworfQoraWYge1tpc19lbmFibGVkIHRyYW5zcG9ydF19IHsKKwliaW5kIC4gPCRNMUItS2V5LXA+IGRvX3B1c2hfYW55d2hlcmUKKwliaW5kIC4gPCRNMUItS2V5LVA+IGRvX3B1c2hfYW55d2hlcmUKK30KKworYmluZCAuICAgPEtleS1GNT4gICAgIHVpX2RvX3Jlc2NhbgorYmluZCAuICAgPCRNMUItS2V5LXI+IHVpX2RvX3Jlc2NhbgorYmluZCAuICAgPCRNMUItS2V5LVI+IHVpX2RvX3Jlc2NhbgorYmluZCAuICAgPCRNMUItS2V5LXM+IGRvX3NpZ25vZmYKK2JpbmQgLiAgIDwkTTFCLUtleS1TPiBkb19zaWdub2ZmCitiaW5kIC4gICA8JE0xQi1LZXktdD4gZG9fYWRkX3NlbGVjdGlvbgorYmluZCAuICAgPCRNMUItS2V5LVQ+IGRvX2FkZF9zZWxlY3Rpb24KK2JpbmQgLiAgIDwkTTFCLUtleS11PiBkb191bnN0YWdlX3NlbGVjdGlvbgorYmluZCAuICAgPCRNMUItS2V5LVU+IGRvX3Vuc3RhZ2Vfc2VsZWN0aW9uCitiaW5kIC4gICA8JE0xQi1LZXktaj4gZG9fcmV2ZXJ0X3NlbGVjdGlvbgorYmluZCAuICAgPCRNMUItS2V5LUo+IGRvX3JldmVydF9zZWxlY3Rpb24KK2JpbmQgLiAgIDwkTTFCLUtleS1pPiBkb19hZGRfYWxsCitiaW5kIC4gICA8JE0xQi1LZXktST4gZG9fYWRkX2FsbAorYmluZCAuICAgPCRNMUItS2V5LW1pbnVzPiB7c2hvd19sZXNzX2NvbnRleHQ7YnJlYWt9CitiaW5kIC4gICA8JE0xQi1LZXktS1BfU3VidHJhY3Q+IHtzaG93X2xlc3NfY29udGV4dDticmVha30KK2JpbmQgLiAgIDwkTTFCLUtleS1lcXVhbD4ge3Nob3dfbW9yZV9jb250ZXh0O2JyZWFrfQorYmluZCAuICAgPCRNMUItS2V5LXBsdXM+IHtzaG93X21vcmVfY29udGV4dDticmVha30KK2JpbmQgLiAgIDwkTTFCLUtleS1LUF9BZGQ+IHtzaG93X21vcmVfY29udGV4dDticmVha30KK2JpbmQgLiAgIDwkTTFCLUtleS1SZXR1cm4+IGRvX2NvbW1pdAorZm9yZWFjaCBpIFtsaXN0ICR1aV9pbmRleCAkdWlfd29ya2Rpcl0geworCWJpbmQgJGkgPEJ1dHRvbi0xPiAgICAgICAidG9nZ2xlX29yX2RpZmYgICAgICAgICAkaSAleCAleTsgYnJlYWsiCisJYmluZCAkaSA8JE0xQi1CdXR0b24tMT4gICJhZGRfb25lX3RvX3NlbGVjdGlvbiAgICRpICV4ICV5OyBicmVhayIKKwliaW5kICRpIDxTaGlmdC1CdXR0b24tMT4gImFkZF9yYW5nZV90b19zZWxlY3Rpb24gJGkgJXggJXk7IGJyZWFrIgorfQordW5zZXQgaQorCitzZXQgZmlsZV9saXN0cygkdWlfaW5kZXgpIFtsaXN0XQorc2V0IGZpbGVfbGlzdHMoJHVpX3dvcmtkaXIpIFtsaXN0XQorCit3bSB0aXRsZSAuICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pIFtmaWxlIG5vcm1hbGl6ZSAkX2dpdHdvcmt0cmVlXSIKK2ZvY3VzIC1mb3JjZSAkdWlfY29tbQorCisjIC0tIFdhcm4gdGhlIHVzZXIgYWJvdXQgZW52aXJvbm1lbnRhbCBwcm9ibGVtcy4gIEN5Z3dpbidzIFRjbAorIyAgICBkb2VzICpub3QqIHBhc3MgaXRzIGVudiBhcnJheSBvbnRvIGFueSBwcm9jZXNzZXMgaXQgc3Bhd25zLgorIyAgICBUaGlzIG1lYW5zIHRoYXQgZ2l0IHByb2Nlc3NlcyBnZXQgbm9uZSBvZiBvdXIgZW52aXJvbm1lbnQuCisjCitpZiB7W2lzX0N5Z3dpbl19IHsKKwlzZXQgaWdub3JlZF9lbnYgMAorCXNldCBzdWdnZXN0X3VzZXIge30KKwlzZXQgbXNnIFttYyAiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LgorCitUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHkKK2dvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1bgorYnkgJXM6CisKKyIgW2FwcG5hbWVdXQorCWZvcmVhY2ggbmFtZSBbYXJyYXkgbmFtZXMgZW52XSB7CisJCXN3aXRjaCAtcmVnZXhwIC0tICRuYW1lIHsKKwkJe15HSVRfSU5ERVhfRklMRSR9IC0KKwkJe15HSVRfT0JKRUNUX0RJUkVDVE9SWSR9IC0KKwkJe15HSVRfQUxURVJOQVRFX09CSkVDVF9ESVJFQ1RPUklFUyR9IC0KKwkJe15HSVRfRElGRl9PUFRTJH0gLQorCQl7XkdJVF9FWFRFUk5BTF9ESUZGJH0gLQorCQl7XkdJVF9QQUdFUiR9IC0KKwkJe15HSVRfVFJBQ0UkfSAtCisJCXteR0lUX0NPTkZJRyR9IC0KKwkJe15HSVRfKEFVVEhPUnxDT01NSVRURVIpX0RBVEUkfSB7CisJCQlhcHBlbmQgbXNnICIgLSAkbmFtZVxuIgorCQkJaW5jciBpZ25vcmVkX2VudgorCQl9CisJCXteR0lUXyhBVVRIT1J8Q09NTUlUVEVSKV8oTkFNRXxFTUFJTCkkfSB7CisJCQlhcHBlbmQgbXNnICIgLSAkbmFtZVxuIgorCQkJaW5jciBpZ25vcmVkX2VudgorCQkJc2V0IHN1Z2dlc3RfdXNlciAkbmFtZQorCQl9CisJCX0KKwl9CisJaWYgeyRpZ25vcmVkX2VudiA+IDB9IHsKKwkJYXBwZW5kIG1zZyBbbWMgIgorVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZQorVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIl0KKworCQlpZiB7JHN1Z2dlc3RfdXNlciBuZSB7fX0geworCQkJYXBwZW5kIG1zZyBbbWMgIgorCitBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzCitpcyBwbGFjaW5nIHZhbHVlcyBmb3IgdGhlIHVzZXIubmFtZSBhbmQKK3VzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsCit+Ly5naXRjb25maWcgZmlsZS4KKyIgJHN1Z2dlc3RfdXNlcl0KKwkJfQorCQl3YXJuX3BvcHVwICRtc2cKKwl9CisJdW5zZXQgaWdub3JlZF9lbnYgbXNnIHN1Z2dlc3RfdXNlciBuYW1lCit9CisKKyMgLS0gT25seSBpbml0aWFsaXplIGNvbXBsZXggVUkgaWYgd2UgYXJlIGdvaW5nIHRvIHN0YXkgcnVubmluZy4KKyMKK2lmIHtbaXNfZW5hYmxlZCB0cmFuc3BvcnRdfSB7CisJbG9hZF9hbGxfcmVtb3RlcworCisJc2V0IG4gWy5tYmFyLnJlbW90ZSBpbmRleCBlbmRdCisJcG9wdWxhdGVfcmVtb3Rlc19tZW51CisJc2V0IG4gW2V4cHIge1subWJhci5yZW1vdGUgaW5kZXggZW5kXSAtICRufV0KKwlpZiB7JG4gPiAwfSB7CisJCWlmIHtbLm1iYXIucmVtb3RlIHR5cGUgMF0gZXEgInRlYXJvZmYifSB7IGluY3IgbiB9CisJCS5tYmFyLnJlbW90ZSBpbnNlcnQgJG4gc2VwYXJhdG9yCisJfQorCXVuc2V0IG4KK30KKworaWYge1t3aW5mbyBleGlzdHMgJHVpX2NvbW1dfSB7CisJc2V0IEdJVEdVSV9CQ0tfZXhpc3RzIFtsb2FkX21lc3NhZ2UgR0lUR1VJX0JDSyB1dGYtOF0KKworCSMgLS0gSWYgYm90aCBvdXIgYmFja3VwIGFuZCBtZXNzYWdlIGZpbGVzIGV4aXN0IHVzZSB0aGUKKwkjICAgIG5ld2VyIG9mIHRoZSB0d28gZmlsZXMgdG8gaW5pdGlhbGl6ZSB0aGUgYnVmZmVyLgorCSMKKwlpZiB7JEdJVEdVSV9CQ0tfZXhpc3RzfSB7CisJCXNldCBtIFtnaXRkaXIgR0lUR1VJX01TR10KKwkJaWYge1tmaWxlIGlzZmlsZSAkbV19IHsKKwkJCWlmIHtbZmlsZSBtdGltZSBbZ2l0ZGlyIEdJVEdVSV9CQ0tdXSA+IFtmaWxlIG10aW1lICRtXX0geworCQkJCWNhdGNoIHtmaWxlIGRlbGV0ZSBbZ2l0ZGlyIEdJVEdVSV9NU0ddfQorCQkJfSBlbHNlIHsKKwkJCQkkdWlfY29tbSBkZWxldGUgMC4wIGVuZAorCQkJCSR1aV9jb21tIGVkaXQgcmVzZXQKKwkJCQkkdWlfY29tbSBlZGl0IG1vZGlmaWVkIGZhbHNlCisJCQkJY2F0Y2gge2ZpbGUgZGVsZXRlIFtnaXRkaXIgR0lUR1VJX0JDS119CisJCQkJc2V0IEdJVEdVSV9CQ0tfZXhpc3RzIDAKKwkJCX0KKwkJfQorCQl1bnNldCBtCisJfQorCisJcHJvYyBiYWNrdXBfY29tbWl0X2J1ZmZlciB7fSB7CisJCWdsb2JhbCB1aV9jb21tIEdJVEdVSV9CQ0tfZXhpc3RzCisKKwkJc2V0IG0gWyR1aV9jb21tIGVkaXQgbW9kaWZpZWRdCisJCWlmIHskbSB8fCAkR0lUR1VJX0JDS19leGlzdHN9IHsKKwkJCXNldCBtc2cgW3N0cmluZyB0cmltIFskdWlfY29tbSBnZXQgMC4wIGVuZF1dCisJCQlyZWdzdWIgLWFsbCAtbGluZSB7WyBcclx0XSskfSAkbXNnIHt9IG1zZworCisJCQlpZiB7JG1zZyBlcSB7fX0geworCQkJCWlmIHskR0lUR1VJX0JDS19leGlzdHN9IHsKKwkJCQkJY2F0Y2gge2ZpbGUgZGVsZXRlIFtnaXRkaXIgR0lUR1VJX0JDS119CisJCQkJCXNldCBHSVRHVUlfQkNLX2V4aXN0cyAwCisJCQkJfQorCQkJfSBlbHNlaWYgeyRtfSB7CisJCQkJY2F0Y2ggeworCQkJCQlzZXQgZmQgW29wZW4gW2dpdGRpciBHSVRHVUlfQkNLXSB3XQorCQkJCQlmY29uZmlndXJlICRmZCAtZW5jb2RpbmcgdXRmLTgKKwkJCQkJcHV0cyAtbm9uZXdsaW5lICRmZCAkbXNnCisJCQkJCWNsb3NlICRmZAorCQkJCQlzZXQgR0lUR1VJX0JDS19leGlzdHMgMQorCQkJCX0KKwkJCX0KKworCQkJJHVpX2NvbW0gZWRpdCBtb2RpZmllZCBmYWxzZQorCQl9CisKKwkJc2V0IDo6R0lUR1VJX0JDS19pIFthZnRlciAyMDAwIGJhY2t1cF9jb21taXRfYnVmZmVyXQorCX0KKworCWJhY2t1cF9jb21taXRfYnVmZmVyCisKKwkjIC0tIElmIHRoZSB1c2VyIGhhcyBhc3BlbGwgYXZhaWxhYmxlIHdlIGNhbiBkcml2ZSBpdAorCSMgICAgaW4gcGlwZSBtb2RlIHRvIHNwZWxsY2hlY2sgdGhlIGNvbW1pdCBtZXNzYWdlLgorCSMKKwlzZXQgc3BlbGxfY21kIFtsaXN0IHxdCisJc2V0IHNwZWxsX2RpY3QgW2dldF9jb25maWcgZ3VpLnNwZWxsaW5nZGljdGlvbmFyeV0KKwlsYXBwZW5kIHNwZWxsX2NtZCBhc3BlbGwKKwlpZiB7JHNwZWxsX2RpY3QgbmUge319IHsKKwkJbGFwcGVuZCBzcGVsbF9jbWQgLS1tYXN0ZXI9JHNwZWxsX2RpY3QKKwl9CisJbGFwcGVuZCBzcGVsbF9jbWQgLS1tb2RlPW5vbmUKKwlsYXBwZW5kIHNwZWxsX2NtZCAtLWVuY29kaW5nPXV0Zi04CisJbGFwcGVuZCBzcGVsbF9jbWQgcGlwZQorCWlmIHskc3BlbGxfZGljdCBlcSB7bm9uZX0KKwkgfHwgW2NhdGNoIHtzZXQgc3BlbGxfZmQgW29wZW4gJHNwZWxsX2NtZCByK119IHNwZWxsX2Vycl19IHsKKwkJYmluZF9idXR0b24zICR1aV9jb21tIFtsaXN0IHRrX3BvcHVwICR1aV9jb21tX2N0eG0gJVggJVldCisJfSBlbHNlIHsKKwkJc2V0IHVpX2NvbW1fc3BlbGwgW3NwZWxsY2hlY2s6OmluaXQgXAorCQkJJHNwZWxsX2ZkIFwKKwkJCSR1aV9jb21tIFwKKwkJCSR1aV9jb21tX2N0eG0gXAorCQldCisJfQorCXVuc2V0IC1ub2NvbXBsYWluIHNwZWxsX2NtZCBzcGVsbF9mZCBzcGVsbF9lcnIgc3BlbGxfZGljdAorfQorCitsb2NrX2luZGV4IGJlZ2luLXJlYWQKK2lmIHshW3dpbmZvIGlzbWFwcGVkIC5dfSB7CisJd20gZGVpY29uaWZ5IC4KK30KK2FmdGVyIDEgeworCWlmIHtbaXNfZW5hYmxlZCBpbml0aWFsYW1lbmRdfSB7CisJCWZvcmNlX2FtZW5kCisJfSBlbHNlIHsKKwkJZG9fcmVzY2FuCisJfQorCisJaWYge1tpc19lbmFibGVkIG5vY29tbWl0bXNnXX0geworCQkkdWlfY29tbSBjb25maWd1cmUgLXN0YXRlIGRpc2FibGVkIC1iYWNrZ3JvdW5kIGdyYXkKKwl9Cit9CitpZiB7W2lzX2VuYWJsZWQgbXVsdGljb21taXRdICYmICFbaXNfY29uZmlnX2ZhbHNlIGd1aS5nY3dhcm5pbmddfSB7CisJYWZ0ZXIgMTAwMCBoaW50X2djCit9CitpZiB7W2lzX2VuYWJsZWQgcmV0Y29kZV19IHsKKwliaW5kIC4gPERlc3Ryb3k+IHsrdGVybWluYXRlX21lICVXfQorfQoraWYgeyRwaWNrZWQgJiYgW2lzX2NvbmZpZ190cnVlIGd1aS5hdXRvZXhwbG9yZV19IHsKKwlkb19leHBsb3JlCit9CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBtb2RlOiB0Y2wKKyMgaW5kZW50LXRhYnMtbW9kZTogdAorIyB0YWItd2lkdGg6IDQKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvYWJvdXQudGNsIGIvZ2l0LWd1aS9saWIvYWJvdXQudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYTUwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi9hYm91dC50Y2wKQEAgLTAsMCArMSw3MCBAQAorIyBnaXQtZ3VpIGFib3V0IGdpdC1ndWkgZGlhbG9nCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTaGF3biBQZWFyY2UKKworcHJvYyBkb19hYm91dCB7fSB7CisJZ2xvYmFsIGFwcHZlcnMgY29weXJpZ2h0IG9ndWlsaWIKKwlnbG9iYWwgdGNsX3BhdGNoTGV2ZWwgdGtfcGF0Y2hMZXZlbAorCWdsb2JhbCB1aV9jb21tX3NwZWxsIE5TIHVzZV90dGsKKworCXNldCB3IC5hYm91dF9kaWFsb2cKKwlEaWFsb2cgJHcKKwl3bSBnZW9tZXRyeSAkdyAiK1t3aW5mbyByb290eCAuXStbd2luZm8gcm9vdHkgLl0iCisKKwlwYWNrIFtnaXRfbG9nbyAkdy5naXRfbG9nb10gLXNpZGUgbGVmdCAtZmlsbCB5IC1wYWR4IDEwIC1wYWR5IDEwCisJJHtOU306OmxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIkFib3V0ICVzIiBbYXBwbmFtZV1dIFwKKwkJLWZvbnQgZm9udF91aWJvbGQgLWFuY2hvciBjZW50ZXIKKwlwYWNrICR3LmhlYWRlciAtc2lkZSB0b3AgLWZpbGwgeAorCisJJHtOU306OmZyYW1lICR3LmJ1dHRvbnMKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2xvc2UgLXRleHQge0Nsb3NlfSBcCisJCS1kZWZhdWx0IGFjdGl2ZSBcCisJCS1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHddCisJcGFjayAkdy5idXR0b25zLmNsb3NlIC1zaWRlIHJpZ2h0CisJcGFjayAkdy5idXR0b25zIC1zaWRlIGJvdHRvbSAtZmlsbCB4IC1wYWR5IDEwIC1wYWR4IDEwCisKKwlwYWRkZWRsYWJlbCAkdy5kZXNjIFwKKwkJLXRleHQgIlttYyAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIl1cbiRjb3B5cmlnaHQiCisJcGFjayAkdy5kZXNjIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR4IDUgLXBhZHkgNQorCisJc2V0IHYge30KKwlhcHBlbmQgdiAiZ2l0LWd1aSB2ZXJzaW9uICRhcHB2ZXJzXG4iCisJYXBwZW5kIHYgIltnaXQgdmVyc2lvbl1cbiIKKwlhcHBlbmQgdiAiXG4iCisJaWYgeyR0Y2xfcGF0Y2hMZXZlbCBlcSAkdGtfcGF0Y2hMZXZlbH0geworCQlhcHBlbmQgdiAiVGNsL1RrIHZlcnNpb24gJHRjbF9wYXRjaExldmVsIgorCX0gZWxzZSB7CisJCWFwcGVuZCB2ICJUY2wgdmVyc2lvbiAkdGNsX3BhdGNoTGV2ZWwiCisJCWFwcGVuZCB2ICIsIFRrIHZlcnNpb24gJHRrX3BhdGNoTGV2ZWwiCisJfQorCWlmIHtbaW5mbyBleGlzdHMgdWlfY29tbV9zcGVsbF0KKwkJJiYgWyR1aV9jb21tX3NwZWxsIHZlcnNpb25dIG5lIHt9fSB7CisJCWFwcGVuZCB2ICJcbiIKKwkJYXBwZW5kIHYgWyR1aV9jb21tX3NwZWxsIHZlcnNpb25dCisJfQorCisJc2V0IGQge30KKwlhcHBlbmQgZCAiZ2l0IHdyYXBwZXI6ICQ6Ol9naXRcbiIKKwlhcHBlbmQgZCAiZ2l0IGV4ZWMgZGlyOiBbZ2l0ZXhlY11cbiIKKwlhcHBlbmQgZCAiZ2l0LWd1aSBsaWI6ICRvZ3VpbGliIgorCisJcGFkZGVkbGFiZWwgJHcudmVycyAtdGV4dCAkdgorCXBhY2sgJHcudmVycyAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeCA1IC1wYWR5IDUKKworCXBhZGRlZGxhYmVsICR3LmRpcnMgLXRleHQgJGQKKwlwYWNrICR3LmRpcnMgLXNpZGUgdG9wIC1maWxsIHggLXBhZHggNSAtcGFkeSA1CisKKwltZW51ICR3LmN0eG0gLXRlYXJvZmYgMAorCSR3LmN0eG0gYWRkIGNvbW1hbmQgXAorCQktbGFiZWwge0NvcHl9IFwKKwkJLWNvbW1hbmQgIgorCQljbGlwYm9hcmQgY2xlYXIKKwkJY2xpcGJvYXJkIGFwcGVuZCAtZm9ybWF0IFNUUklORyAtdHlwZSBTVFJJTkcgLS0gXFskdy52ZXJzIGNnZXQgLXRleHRcXQorCSIKKworCWJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3OyBmb2N1cyAkdy5idXR0b25zLmNsb3NlIgorCWJpbmQgJHcgPEtleS1Fc2NhcGU+ICJkZXN0cm95ICR3IgorCWJpbmQgJHcgPEtleS1SZXR1cm4+ICJkZXN0cm95ICR3IgorCWJpbmRfYnV0dG9uMyAkdy52ZXJzICJ0a19wb3B1cCAkdy5jdHhtICVYICVZOyBncmFiICR3OyBmb2N1cyAkdyIKKwl3bSB0aXRsZSAkdyAiQWJvdXQgW2FwcG5hbWVdIgorCXRrd2FpdCB3aW5kb3cgJHcKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2JsYW1lLnRjbCBiL2dpdC1ndWkvbGliL2JsYW1lLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWQxNWY0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvYmxhbWUudGNsCkBAIC0wLDAgKzEsMTM2MyBAQAorIyBnaXQtZ3VpIGJsYW1lIHZpZXdlcgorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2hhd24gUGVhcmNlCisKK2NsYXNzIGJsYW1lIHsKKworaW1hZ2UgY3JlYXRlIHBob3RvIDo6YmxhbWU6OmltZ19iYWNrX2Fycm93IC1kYXRhIHtSMGxHT0RsaEdBQVlBSVVBQVB3Q0JFektYRlRTWkl6K25Hem1oR3pxZkdUaWRJVCtuRXpHWEhUcWhHem1mR3ppZkZ6YWRFVENWRVMrVkFSV0RGeldiSHp5akFSZURHVGFkRlRPWkRTeVJEeXlUQ3ltUEFSYUZHVGVkRnpTYkR5MlRDeXFSQ3lxUEFSYURBeUNIRVM2VkR5NlZDeWlQQVI2SENTZU5CeVdMQVJ5RkFSaURBUnFGR1RpZkFSaUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBQUFBQUxBQUFBQUFZQUJnQUFBYWpRSUJ3U0N3YWo4aWtjc2swQnBwSndSUHFIRXlwUXdIQmlzMFdEQWRFRnlCSUtCYU1BS0xCZGpRZVNrRkJZVEJBSXZnRW9TNkptaFVURXdJVURRNFZGaGNNR0VoeUNnb1pFeG9VYXhzV0hCMFRIa2dmQVhVR0Fob0JEU0FWRlIwWEJuQ2JEUm1nb2cwaHBTSWlESnBKSXlFUWhCVWNKQ0lsd0EyMlNTWVZvZ2tuRWc4ZUQ4MnFTaWdkRFNrblkwSXFKUVhQWXhJbDFkWkNHTnZXdytEbTUxMEdRUUFoL21oRGNtVmhkR1ZrSUdKNUlFSk5VRlJ2UjBsR0lGQnlieUIyWlhKemFXOXVJREl1TlEwS3FTQkVaWFpsYkVOdmNpQXhPVGszTERFNU9UZ3VJRUZzYkNCeWFXZG9kSE1nY21WelpYSjJaV1F1RFFwb2RIUndPaTh2ZDNkM0xtUmxkbVZzWTI5eUxtTnZiUUE3fQorCisjIFBlcnNpc3RlbnQgZGF0YSAoc3Vydml2ZXMgbG9hZHMpCisjCitmaWVsZCBoaXN0b3J5IHt9OyAjIHZpZXdlciBoaXN0b3J5OiB7Y29tbWl0IHBhdGh9CitmaWVsZCBoZWFkZXIgICAgOyAjIGFycmF5IGNvbW1pdCxrZXkgLT4gaGVhZGVyIGZpZWxkCisKKyMgVGsgVUkgY29udHJvbCBwYXRocworIworZmllbGQgdyAgICAgICAgICA7ICMgdG9wIHdpbmRvdyBpbiB0aGlzIHZpZXdlcgorZmllbGQgd19iYWNrICAgICA7ICMgb3VyIGJhY2sgYnV0dG9uCitmaWVsZCB3X3BhdGggICAgIDsgIyBsYWJlbCBzaG93aW5nIHRoZSBjdXJyZW50IGZpbGUgcGF0aAorZmllbGQgd19jb2x1bW5zICA7ICMgbGlzdCBvZiBhbGwgY29sdW1uIHdpZGdldHMgaW4gdGhlIHZpZXdlcgorZmllbGQgd19saW5lICAgICA7ICMgdGV4dCBjb2x1bW46IGFsbCBsaW5lIG51bWJlcnMKK2ZpZWxkIHdfYW1vdiAgICAgOyAjIHRleHQgY29sdW1uOiBhbm5vdGF0aW9ucyArIG1vdmUgdHJhY2tpbmcKK2ZpZWxkIHdfYXNpbSAgICAgOyAjIHRleHQgY29sdW1uOiBhbm5vdGF0aW9ucyAoc2ltcGxlIGNvbXB1dGF0aW9uKQorZmllbGQgd19maWxlICAgICA7ICMgdGV4dCBjb2x1bW46IGFjdHVhbCBmaWxlIGRhdGEKK2ZpZWxkIHdfY3ZpZXdlciAgOyAjIHBhbmUgc2hvd2luZyBjb21taXQgbWVzc2FnZQorZmllbGQgZmluZGVyICAgICA7ICMgZmluZCBtaW5pLWRpYWxvZyBmcmFtZQorZmllbGQgZ290b2xpbmUgICA7ICMgbGluZSBnb3RvIG1pbmktZGlhbG9nIGZyYW1lCitmaWVsZCBzdGF0dXMgICAgIDsgIyBzdGF0dXMgbWVnYS13aWRnZXQgaW5zdGFuY2UKK2ZpZWxkIG9sZF9oZWlnaHQgOyAjIGxhc3Qga25vd24gaGVpZ2h0IG9mICR3LmZpbGVfcGFuZQorCisKKyMgVGsgVUkgY29sb3JzCisjCit2YXJpYWJsZSBhY3RpdmVfY29sb3IgI2MwZWRjNQordmFyaWFibGUgZ3JvdXBfY29sb3JzIHsKKwkjZDZkNmQ2CisJI2UxZTFlMQorCSNlY2VjZWMKK30KKworIyBDdXJyZW50IGJsYW1lIGRhdGE7IGNsZWFyZWQvcmVzZXQgb24gZWFjaCBsb2FkCisjCitmaWVsZCBjb21taXQgICAgICAgICAgICAgICA7ICMgaW5wdXQgY29tbWl0IHRvIGJsYW1lCitmaWVsZCBwYXRoICAgICAgICAgICAgICAgICA7ICMgaW5wdXQgZmlsZW5hbWUgdG8gdmlldyBpbiAkY29tbWl0CisKK2ZpZWxkIGN1cnJlbnRfZmQgICAgICAgIHt9IDsgIyBiYWNrZ3JvdW5kIHByb2Nlc3MgcnVubmluZworZmllbGQgaGlnaGxpZ2h0X2xpbmUgICAgLTEgOyAjIGN1cnJlbnQgbGluZSBzZWxlY3RlZAorZmllbGQgaGlnaGxpZ2h0X2NvbHVtbiAge30gOyAjIGN1cnJlbnQgY29tbWl0IGNvbHVtbiBzZWxlY3RlZAorZmllbGQgaGlnaGxpZ2h0X2NvbW1pdCAge30gOyAjIHNoYTEgb2YgY29tbWl0IHNlbGVjdGVkCisKK2ZpZWxkIHRvdGFsX2xpbmVzICAgICAgIDAgIDsgIyB0b3RhbCBsZW5ndGggb2YgZmlsZQorZmllbGQgYmxhbWVfbGluZXMgICAgICAgMCAgOyAjIG51bWJlciBvZiBsaW5lcyBjb21wdXRlZAorZmllbGQgYW1vdl9kYXRhICAgICAgICAgICAgOyAjIGxpc3Qgb2Yge2NvbW1pdCBvcmlnZmlsZSBvcmlnbGluZX0KK2ZpZWxkIGFzaW1fZGF0YSAgICAgICAgICAgIDsgIyBsaXN0IG9mIHtjb21taXQgb3JpZ2ZpbGUgb3JpZ2xpbmV9CisKK2ZpZWxkIHJfY29tbWl0ICAgICAgICAgICAgIDsgIyBjb21taXQgY3VycmVudGx5IGJlaW5nIHBhcnNlZAorZmllbGQgcl9vcmlnX2xpbmUgICAgICAgICAgOyAjIG9yaWdpbmFsIGxpbmUgbnVtYmVyCitmaWVsZCByX2ZpbmFsX2xpbmUgICAgICAgICA7ICMgZmluYWwgbGluZSBudW1iZXIKK2ZpZWxkIHJfbGluZV9jb3VudCAgICAgICAgIDsgIyBsaW5lcyBpbiB0aGlzIHJlZ2lvbgorCitmaWVsZCB0b29sdGlwX3dtICAgICAgICB7fSA7ICMgQ3VycmVudCB0b29sdGlwIHRvcGxldmVsLCBpZiBvcGVuCitmaWVsZCB0b29sdGlwX3QgICAgICAgICB7fSA7ICMgVGV4dCB3aWRnZXQgaW4gJHRvb2x0aXBfd20KK2ZpZWxkIHRvb2x0aXBfdGltZXIgICAgIHt9IDsgIyBDdXJyZW50IHRpbWVyIGV2ZW50IGZvciBvdXIgdG9vbHRpcAorZmllbGQgdG9vbHRpcF9jb21taXQgICAge30gOyAjIENvbW1pdChzKSBpbiB0b29sdGlwCisKK2NvbnN0cnVjdG9yIG5ldyB7aV9jb21taXQgaV9wYXRoIGlfanVtcH0geworCWdsb2JhbCBjdXJzb3JfcHRyIE0xQiBNMVQgaGF2ZV90azg1IHVzZV90dGsgTlMKKwl2YXJpYWJsZSBhY3RpdmVfY29sb3IKKwl2YXJpYWJsZSBncm91cF9jb2xvcnMKKworCXNldCBjb21taXQgJGlfY29tbWl0CisJc2V0IHBhdGggICAkaV9wYXRoCisKKwltYWtlX3RvcGxldmVsIHRvcCB3CisJd20gdGl0bGUgJHRvcCBbYXBwZW5kICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiRmlsZSBWaWV3ZXIiXV0KKworCXNldCBmb250X3cgW2ZvbnQgbWVhc3VyZSBmb250X2RpZmYgIjAiXQorCisJZ29sZF9mcmFtZSAkdy5oZWFkZXIKKwl0bGFiZWwgJHcuaGVhZGVyLmNvbW1pdF9sIFwKKwkJLXRleHQgW21jICJDb21taXQ6Il0gXAorCQktYmFja2dyb3VuZCBnb2xkIFwKKwkJLWZvcmVncm91bmQgYmxhY2sgXAorCQktYW5jaG9yIHcgXAorCQktanVzdGlmeSBsZWZ0CisJc2V0IHdfYmFjayAkdy5oZWFkZXIuY29tbWl0X2IKKwl0bGFiZWwgJHdfYmFjayBcCisJCS1pbWFnZSA6OmJsYW1lOjppbWdfYmFja19hcnJvdyBcCisJCS1ib3JkZXJ3aWR0aCAwIFwKKwkJLXJlbGllZiBmbGF0IFwKKwkJLXN0YXRlIGRpc2FibGVkIFwKKwkJLWJhY2tncm91bmQgZ29sZCBcCisJCS1mb3JlZ3JvdW5kIGJsYWNrIFwKKwkJLWFjdGl2ZWJhY2tncm91bmQgZ29sZAorCWJpbmQgJHdfYmFjayA8QnV0dG9uLTE+ICIKKwkJaWYge1xbJHdfYmFjayBjZ2V0IC1zdGF0ZVxdIGVxIHtub3JtYWx9fSB7CisJCQlbY2IgX2hpc3RvcnlfbWVudV0KKwkJfQorCQkiCisJdGxhYmVsICR3LmhlYWRlci5jb21taXQgXAorCQktdGV4dHZhcmlhYmxlIEBjb21taXQgXAorCQktYmFja2dyb3VuZCBnb2xkIFwKKwkJLWZvcmVncm91bmQgYmxhY2sgXAorCQktYW5jaG9yIHcgXAorCQktanVzdGlmeSBsZWZ0CisJdGxhYmVsICR3LmhlYWRlci5wYXRoX2wgXAorCQktdGV4dCBbbWMgIkZpbGU6Il0gXAorCQktYmFja2dyb3VuZCBnb2xkIFwKKwkJLWZvcmVncm91bmQgYmxhY2sgXAorCQktYW5jaG9yIHcgXAorCQktanVzdGlmeSBsZWZ0CisJc2V0IHdfcGF0aCAkdy5oZWFkZXIucGF0aAorCXRsYWJlbCAkd19wYXRoIFwKKwkJLWJhY2tncm91bmQgZ29sZCBcCisJCS1mb3JlZ3JvdW5kIGJsYWNrIFwKKwkJLWFuY2hvciB3IFwKKwkJLWp1c3RpZnkgbGVmdAorCXBhY2sgJHcuaGVhZGVyLmNvbW1pdF9sIC1zaWRlIGxlZnQKKwlwYWNrICR3X2JhY2sgLXNpZGUgbGVmdAorCXBhY2sgJHcuaGVhZGVyLmNvbW1pdCAtc2lkZSBsZWZ0CisJcGFjayAkd19wYXRoIC1maWxsIHggLXNpZGUgcmlnaHQKKwlwYWNrICR3LmhlYWRlci5wYXRoX2wgLXNpZGUgcmlnaHQKKworCXBhbmVkd2luZG93ICR3LmZpbGVfcGFuZSAtb3JpZW50IHZlcnRpY2FsIC1ib3JkZXJ3aWR0aCAwIC1zYXNod2lkdGggMworCWZyYW1lICR3LmZpbGVfcGFuZS5vdXQgLXJlbGllZiBmbGF0IC1ib3JkZXJ3aWR0aCAxCisJZnJhbWUgJHcuZmlsZV9wYW5lLmNtIC1yZWxpZWYgc3Vua2VuIC1ib3JkZXJ3aWR0aCAxCisJJHcuZmlsZV9wYW5lIGFkZCAkdy5maWxlX3BhbmUub3V0IFwKKwkJLXN0aWNreSBuc2V3IFwKKwkJLW1pbnNpemUgMTAwIFwKKwkJLWhlaWdodCAxMDAgXAorCQktd2lkdGggMTAwCisJJHcuZmlsZV9wYW5lIGFkZCAkdy5maWxlX3BhbmUuY20gXAorCQktc3RpY2t5IG5zZXcgXAorCQktbWluc2l6ZSAyNSBcCisJCS1oZWlnaHQgMjUgXAorCQktd2lkdGggMTAwCisKKwlzZXQgd19saW5lICR3LmZpbGVfcGFuZS5vdXQubGluZW51bWJlcl90CisJdGV4dCAkd19saW5lIFwKKwkJLXRha2Vmb2N1cyAwIFwKKwkJLWhpZ2hsaWdodHRoaWNrbmVzcyAwIFwKKwkJLXBhZHggMCAtcGFkeSAwIFwKKwkJLWJhY2tncm91bmQgd2hpdGUgXAorCQktZm9yZWdyb3VuZCBibGFjayBcCisJCS1ib3JkZXJ3aWR0aCAwIFwKKwkJLXN0YXRlIGRpc2FibGVkIFwKKwkJLXdyYXAgbm9uZSBcCisJCS1oZWlnaHQgNDAgXAorCQktd2lkdGggNiBcCisJCS1mb250IGZvbnRfZGlmZgorCSR3X2xpbmUgdGFnIGNvbmYgbGluZW51bWJlciAtanVzdGlmeSByaWdodCAtcm1hcmdpbiA1CisKKwlzZXQgd19hbW92ICR3LmZpbGVfcGFuZS5vdXQuYW1vdmVfdAorCXRleHQgJHdfYW1vdiBcCisJCS10YWtlZm9jdXMgMCBcCisJCS1oaWdobGlnaHR0aGlja25lc3MgMCBcCisJCS1wYWR4IDAgLXBhZHkgMCBcCisJCS1iYWNrZ3JvdW5kIHdoaXRlIFwKKwkJLWZvcmVncm91bmQgYmxhY2sgXAorCQktYm9yZGVyd2lkdGggMCBcCisJCS1zdGF0ZSBkaXNhYmxlZCBcCisJCS13cmFwIG5vbmUgXAorCQktaGVpZ2h0IDQwIFwKKwkJLXdpZHRoIDUgXAorCQktZm9udCBmb250X2RpZmYKKwkkd19hbW92IHRhZyBjb25mIGF1dGhvcl9hYmJyIC1qdXN0aWZ5IHJpZ2h0IC1ybWFyZ2luIDUKKwkkd19hbW92IHRhZyBjb25mIGN1cnJfY29tbWl0CisJJHdfYW1vdiB0YWcgY29uZiBwcmlvcl9jb21taXQgLWZvcmVncm91bmQgYmx1ZSAtdW5kZXJsaW5lIDEKKwkkd19hbW92IHRhZyBiaW5kIHByaW9yX2NvbW1pdCBcCisJCTxCdXR0b24tMT4gXAorCQkiW2NiIF9sb2FkX2NvbW1pdCAkd19hbW92IEBhbW92X2RhdGEgQCV4LCV5XTticmVhayIKKworCXNldCB3X2FzaW0gJHcuZmlsZV9wYW5lLm91dC5hc2ltcGxlX3QKKwl0ZXh0ICR3X2FzaW0gXAorCQktdGFrZWZvY3VzIDAgXAorCQktaGlnaGxpZ2h0dGhpY2tuZXNzIDAgXAorCQktcGFkeCAwIC1wYWR5IDAgXAorCQktYmFja2dyb3VuZCB3aGl0ZSBcCisJCS1mb3JlZ3JvdW5kIGJsYWNrIFwKKwkJLWJvcmRlcndpZHRoIDAgXAorCQktc3RhdGUgZGlzYWJsZWQgXAorCQktd3JhcCBub25lIFwKKwkJLWhlaWdodCA0MCBcCisJCS13aWR0aCA0IFwKKwkJLWZvbnQgZm9udF9kaWZmCisJJHdfYXNpbSB0YWcgY29uZiBhdXRob3JfYWJiciAtanVzdGlmeSByaWdodAorCSR3X2FzaW0gdGFnIGNvbmYgY3Vycl9jb21taXQKKwkkd19hc2ltIHRhZyBjb25mIHByaW9yX2NvbW1pdCAtZm9yZWdyb3VuZCBibHVlIC11bmRlcmxpbmUgMQorCSR3X2FzaW0gdGFnIGJpbmQgcHJpb3JfY29tbWl0IFwKKwkJPEJ1dHRvbi0xPiBcCisJCSJbY2IgX2xvYWRfY29tbWl0ICR3X2FzaW0gQGFzaW1fZGF0YSBAJXgsJXldO2JyZWFrIgorCisJc2V0IHdfZmlsZSAkdy5maWxlX3BhbmUub3V0LmZpbGVfdAorCXRleHQgJHdfZmlsZSBcCisJCS10YWtlZm9jdXMgMCBcCisJCS1oaWdobGlnaHR0aGlja25lc3MgMCBcCisJCS1wYWR4IDAgLXBhZHkgMCBcCisJCS1iYWNrZ3JvdW5kIHdoaXRlIFwKKwkJLWZvcmVncm91bmQgYmxhY2sgXAorCQktYm9yZGVyd2lkdGggMCBcCisJCS1zdGF0ZSBkaXNhYmxlZCBcCisJCS13cmFwIG5vbmUgXAorCQktaGVpZ2h0IDQwIFwKKwkJLXdpZHRoIDgwIFwKKwkJLXhzY3JvbGxjb21tYW5kIFtsaXN0ICR3LmZpbGVfcGFuZS5vdXQuc2J4IHNldF0gXAorCQktZm9udCBmb250X2RpZmYKKwlpZiB7JGhhdmVfdGs4NX0geworCQkkd19maWxlIGNvbmZpZ3VyZSAtaW5hY3RpdmVzZWxlY3RiYWNrZ3JvdW5kIGRhcmtibHVlCisJfQorCSR3X2ZpbGUgdGFnIGNvbmYgZm91bmQgXAorCQktYmFja2dyb3VuZCB5ZWxsb3cKKworCXNldCB3X2NvbHVtbnMgW2xpc3QgJHdfYW1vdiAkd19hc2ltICR3X2xpbmUgJHdfZmlsZV0KKworCSR7TlN9OjpzY3JvbGxiYXIgJHcuZmlsZV9wYW5lLm91dC5zYnggXAorCQktb3JpZW50IGggXAorCQktY29tbWFuZCBbbGlzdCAkd19maWxlIHh2aWV3XQorCSR7TlN9OjpzY3JvbGxiYXIgJHcuZmlsZV9wYW5lLm91dC5zYnkgXAorCQktb3JpZW50IHYgXAorCQktY29tbWFuZCBbbGlzdCBzY3JvbGxiYXIybWFueSAkd19jb2x1bW5zIHl2aWV3XQorCWV2YWwgZ3JpZCAkd19jb2x1bW5zICR3LmZpbGVfcGFuZS5vdXQuc2J5IC1zdGlja3kgbnNldworCWdyaWQgY29uZiBcCisJCSR3LmZpbGVfcGFuZS5vdXQuc2J4IFwKKwkJLWNvbHVtbiAwIFwKKwkJLWNvbHVtbnNwYW4gW2V4cHIge1tsbGVuZ3RoICR3X2NvbHVtbnNdICsgMX1dIFwKKwkJLXN0aWNreSB3ZQorCWdyaWQgY29sdW1uY29uZmlndXJlIFwKKwkJJHcuZmlsZV9wYW5lLm91dCBcCisJCVtleHByIHtbbGxlbmd0aCAkd19jb2x1bW5zXSAtIDF9XSBcCisJCS13ZWlnaHQgMQorCWdyaWQgcm93Y29uZmlndXJlICR3LmZpbGVfcGFuZS5vdXQgMCAtd2VpZ2h0IDEKKworCXNldCBmaW5kZXIgWzo6c2VhcmNoYmFyOjpuZXcgXAorCQkkdy5maWxlX3BhbmUub3V0LmZmICR3X2ZpbGUgXAorCQktY29sdW1uIDAgXAorCQktY29sdW1uc3BhbiBbZXhwciB7W2xsZW5ndGggJHdfY29sdW1uc10gKyAxfV0gXAorCQldCisKKwlzZXQgZ290b2xpbmUgWzo6bGluZWJhcjo6bmV3IFwKKwkJJHcuZmlsZV9wYW5lLm91dC5sZiAkd19maWxlIFwKKwkJLWNvbHVtbiAwIFwKKwkJLWNvbHVtbnNwYW4gW2V4cHIge1tsbGVuZ3RoICR3X2NvbHVtbnNdICsgMX1dIFwKKwkJXQorCisJc2V0IHdfY3ZpZXdlciAkdy5maWxlX3BhbmUuY20udAorCXRleHQgJHdfY3ZpZXdlciBcCisJCS1iYWNrZ3JvdW5kIHdoaXRlIFwKKwkJLWZvcmVncm91bmQgYmxhY2sgXAorCQktYm9yZGVyd2lkdGggMCBcCisJCS1zdGF0ZSBkaXNhYmxlZCBcCisJCS13cmFwIG5vbmUgXAorCQktaGVpZ2h0IDEwIFwKKwkJLXdpZHRoIDgwIFwKKwkJLXhzY3JvbGxjb21tYW5kIFtsaXN0ICR3LmZpbGVfcGFuZS5jbS5zYnggc2V0XSBcCisJCS15c2Nyb2xsY29tbWFuZCBbbGlzdCAkdy5maWxlX3BhbmUuY20uc2J5IHNldF0gXAorCQktZm9udCBmb250X2RpZmYKKwkkd19jdmlld2VyIHRhZyBjb25mIHN0aWxsX2xvYWRpbmcgXAorCQktZm9udCBmb250X3VpaXRhbGljIFwKKwkJLWp1c3RpZnkgY2VudGVyCisJJHdfY3ZpZXdlciB0YWcgY29uZiBoZWFkZXJfa2V5IFwKKwkJLXRhYnMgezNjfSBcCisJCS1iYWNrZ3JvdW5kICRhY3RpdmVfY29sb3IgXAorCQktZm9udCBmb250X3VpYm9sZAorCSR3X2N2aWV3ZXIgdGFnIGNvbmYgaGVhZGVyX3ZhbCBcCisJCS1iYWNrZ3JvdW5kICRhY3RpdmVfY29sb3IgXAorCQktZm9udCBmb250X3VpCisJJHdfY3ZpZXdlciB0YWcgcmFpc2Ugc2VsCisJJHtOU306OnNjcm9sbGJhciAkdy5maWxlX3BhbmUuY20uc2J4IFwKKwkJLW9yaWVudCBoIFwKKwkJLWNvbW1hbmQgW2xpc3QgJHdfY3ZpZXdlciB4dmlld10KKwkke05TfTo6c2Nyb2xsYmFyICR3LmZpbGVfcGFuZS5jbS5zYnkgXAorCQktb3JpZW50IHYgXAorCQktY29tbWFuZCBbbGlzdCAkd19jdmlld2VyIHl2aWV3XQorCXBhY2sgJHcuZmlsZV9wYW5lLmNtLnNieSAtc2lkZSByaWdodCAtZmlsbCB5CisJcGFjayAkdy5maWxlX3BhbmUuY20uc2J4IC1zaWRlIGJvdHRvbSAtZmlsbCB4CisJcGFjayAkd19jdmlld2VyIC1leHBhbmQgMSAtZmlsbCBib3RoCisKKwlzZXQgc3RhdHVzIFs6OnN0YXR1c19iYXI6Om5ldyAkdy5zdGF0dXNdCisKKwltZW51ICR3LmN0eG0gLXRlYXJvZmYgMAorCSR3LmN0eG0gYWRkIGNvbW1hbmQgXAorCQktbGFiZWwgW21jICJDb3B5IENvbW1pdCJdIFwKKwkJLWNvbW1hbmQgW2NiIF9jb3B5Y29tbWl0XQorCSR3LmN0eG0gYWRkIHNlcGFyYXRvcgorCSR3LmN0eG0gYWRkIGNvbW1hbmQgXAorCQktbGFiZWwgW21jICJGaW5kIFRleHQuLi4iXSBcCisJCS1hY2NlbGVyYXRvciBGNyBcCisJCS1jb21tYW5kIFtjYiBfc2hvd19maW5kZXJdCisJJHcuY3R4bSBhZGQgY29tbWFuZCBcCisJCS1sYWJlbCBbbWMgIkdvdG8gTGluZS4uLiJdIFwKKwkJLWFjY2VsZXJhdG9yICJDdHJsLUciIFwKKwkJLWNvbW1hbmQgW2NiIF9zaG93X2xpbmViYXJdCisJbWVudSAkdy5jdHhtLmVuYworCWJ1aWxkX2VuY29kaW5nX21lbnUgJHcuY3R4bS5lbmMgW2NiIF9zZXRlbmNvZGluZ10KKwkkdy5jdHhtIGFkZCBjYXNjYWRlIFwKKwkJLWxhYmVsIFttYyAiRW5jb2RpbmciXSBcCisJCS1tZW51ICR3LmN0eG0uZW5jCisJJHcuY3R4bSBhZGQgY29tbWFuZCBcCisJCS1sYWJlbCBbbWMgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iXSBcCisJCS1jb21tYW5kIFtjYiBfZnVsbGNvcHlibGFtZV0KKwkkdy5jdHhtIGFkZCBzZXBhcmF0b3IKKwkkdy5jdHhtIGFkZCBjb21tYW5kIFwKKwkJLWxhYmVsIFttYyAiU2hvdyBIaXN0b3J5IENvbnRleHQiXSBcCisJCS1jb21tYW5kIFtjYiBfZ2l0a2NvbW1pdF0KKwkkdy5jdHhtIGFkZCBjb21tYW5kIFwKKwkJLWxhYmVsIFttYyAiQmxhbWUgUGFyZW50IENvbW1pdCJdIFwKKwkJLWNvbW1hbmQgW2NiIF9ibGFtZXBhcmVudF0KKworCWZvcmVhY2ggaSAkd19jb2x1bW5zIHsKKwkJZm9yIHtzZXQgZyAwfSB7JGcgPCBbbGxlbmd0aCAkZ3JvdXBfY29sb3JzXX0ge2luY3IgZ30geworCQkJJGkgdGFnIGNvbmYgY29sb3IkZyAtYmFja2dyb3VuZCBbbGluZGV4ICRncm91cF9jb2xvcnMgJGddCisJCX0KKworCQlpZiB7JGkgZXEgJHdfZmlsZX0geworCQkJJHdfZmlsZSB0YWcgcmFpc2UgZm91bmQKKwkJfQorCQkkaSB0YWcgcmFpc2Ugc2VsCisKKwkJJGkgY29uZiAtY3Vyc29yICRjdXJzb3JfcHRyCisJCSRpIGNvbmYgLXlzY3JvbGxjb21tYW5kIFwKKwkJCSJbbGlzdCA6OnNlYXJjaGJhcjo6c2Nyb2xsZWQgJGZpbmRlcl0KKwkJCSBbbGlzdCBtYW55MnNjcm9sbGJhciAkd19jb2x1bW5zIHl2aWV3ICR3LmZpbGVfcGFuZS5vdXQuc2J5XSIKKwkJYmluZCAkaSA8QnV0dG9uLTE+ICIKKwkJCVtjYiBfaGlkZV90b29sdGlwXQorCQkJW2NiIF9jbGljayAkaSBAJXgsJXldCisJCQlmb2N1cyAkaQorCQkiCisJCWJpbmQgJGkgPEFueS1Nb3Rpb24+ICBbY2IgX3Nob3dfdG9vbHRpcCAkaSBAJXgsJXldCisJCWJpbmQgJGkgPEFueS1FbnRlcj4gICBbY2IgX2hpZGVfdG9vbHRpcF0KKwkJYmluZCAkaSA8QW55LUxlYXZlPiAgIFtjYiBfaGlkZV90b29sdGlwXQorCQliaW5kX2J1dHRvbjMgJGkgIgorCQkJW2NiIF9oaWRlX3Rvb2x0aXBdCisJCQlzZXQgY3Vyc29yWCAleAorCQkJc2V0IGN1cnNvclkgJXkKKwkJCXNldCBjdXJzb3JXICVXCisJCQl0a19wb3B1cCAkdy5jdHhtICVYICVZCisJCSIKKwkJYmluZCAkaSA8U2hpZnQtVGFiPiAiW2xpc3QgZm9jdXMgJHdfY3ZpZXdlcl07YnJlYWsiCisJCWJpbmQgJGkgPFRhYj4gICAgICAgIltjYiBfZm9jdXNfc2VhcmNoICR3X2N2aWV3ZXJdO2JyZWFrIgorCX0KKworCWZvcmVhY2ggaSBbY29uY2F0ICR3X2NvbHVtbnMgJHdfY3ZpZXdlcl0geworCQliaW5kICRpIDxLZXktVXA+ICAgICAgICB7Y2F0Y2ggeyVXIHl2aWV3IHNjcm9sbCAtMSB1bml0c307YnJlYWt9CisJCWJpbmQgJGkgPEtleS1Eb3duPiAgICAgIHtjYXRjaCB7JVcgeXZpZXcgc2Nyb2xsICAxIHVuaXRzfTticmVha30KKwkJYmluZCAkaSA8S2V5LUxlZnQ+ICAgICAge2NhdGNoIHslVyB4dmlldyBzY3JvbGwgLTEgdW5pdHN9O2JyZWFrfQorCQliaW5kICRpIDxLZXktUmlnaHQ+ICAgICB7Y2F0Y2ggeyVXIHh2aWV3IHNjcm9sbCAgMSB1bml0c307YnJlYWt9CisJCWJpbmQgJGkgPEtleS1rPiAgICAgICAgIHtjYXRjaCB7JVcgeXZpZXcgc2Nyb2xsIC0xIHVuaXRzfTticmVha30KKwkJYmluZCAkaSA8S2V5LWo+ICAgICAgICAge2NhdGNoIHslVyB5dmlldyBzY3JvbGwgIDEgdW5pdHN9O2JyZWFrfQorCQliaW5kICRpIDxLZXktaD4gICAgICAgICB7Y2F0Y2ggeyVXIHh2aWV3IHNjcm9sbCAtMSB1bml0c307YnJlYWt9CisJCWJpbmQgJGkgPEtleS1sPiAgICAgICAgIHtjYXRjaCB7JVcgeHZpZXcgc2Nyb2xsICAxIHVuaXRzfTticmVha30KKwkJYmluZCAkaSA8Q29udHJvbC1LZXktYj4ge2NhdGNoIHslVyB5dmlldyBzY3JvbGwgLTEgcGFnZXN9O2JyZWFrfQorCQliaW5kICRpIDxDb250cm9sLUtleS1mPiB7Y2F0Y2ggeyVXIHl2aWV3IHNjcm9sbCAgMSBwYWdlc307YnJlYWt9CisJfQorCisJYmluZCAkd19jdmlld2VyIDxTaGlmdC1UYWI+ICJbY2IgX2ZvY3VzX3NlYXJjaCAkd19maWxlXTticmVhayIKKwliaW5kICR3X2N2aWV3ZXIgPFRhYj4gICAgICAgIltsaXN0IGZvY3VzICR3X2ZpbGVdO2JyZWFrIgorCWJpbmQgJHdfY3ZpZXdlciA8QnV0dG9uLTE+ICAgW2xpc3QgZm9jdXMgJHdfY3ZpZXdlcl0KKwliaW5kICR3X2ZpbGUgICAgPFZpc2liaWxpdHk+IFtjYiBfZm9jdXNfc2VhcmNoICR3X2ZpbGVdCisJYmluZCAkdG9wICAgICAgIDxGNz4gICAgICAgICBbY2IgX3Nob3dfZmluZGVyXQorCWJpbmQgJHRvcCAgICAgICA8S2V5LXNsYXNoPiAgW2NiIF9zaG93X2ZpbmRlcl0KKwliaW5kICR0b3AgICAgPENvbnRyb2wtS2V5LXM+IFtjYiBfc2hvd19maW5kZXJdCisJYmluZCAkdG9wICAgICAgIDxFc2NhcGU+ICAgICBbbGlzdCBzZWFyY2hiYXI6OmhpZGUgJGZpbmRlcl0KKwliaW5kICR0b3AgICAgICAgPEYzPiAgICAgICAgIFtsaXN0IHNlYXJjaGJhcjo6ZmluZF9uZXh0ICRmaW5kZXJdCisJYmluZCAkdG9wICAgICAgIDxTaGlmdC1GMz4gICBbbGlzdCBzZWFyY2hiYXI6OmZpbmRfcHJldiAkZmluZGVyXQorCWJpbmQgJHRvcCAgICA8Q29udHJvbC1LZXktZz4gW2NiIF9zaG93X2xpbmViYXJdCisJY2F0Y2ggeyBiaW5kICR0b3AgPFNoaWZ0LUtleS1YRjg2X1N3aXRjaF9WVF8zPiBbbGlzdCBzZWFyY2hiYXI6OmZpbmRfcHJldiAkZmluZGVyXSB9CisKKwlncmlkIGNvbmZpZ3VyZSAkdy5oZWFkZXIgLXN0aWNreSBldworCWdyaWQgY29uZmlndXJlICR3LmZpbGVfcGFuZSAtc3RpY2t5IG5zZXcKKwlncmlkIGNvbmZpZ3VyZSAkdy5zdGF0dXMgLXN0aWNreSBldworCWdyaWQgY29sdW1uY29uZmlndXJlICR0b3AgMCAtd2VpZ2h0IDEKKwlncmlkIHJvd2NvbmZpZ3VyZSAkdG9wIDAgLXdlaWdodCAwCisJZ3JpZCByb3djb25maWd1cmUgJHRvcCAxIC13ZWlnaHQgMQorCWdyaWQgcm93Y29uZmlndXJlICR0b3AgMiAtd2VpZ2h0IDAKKworCXNldCByZXFfdyBbd2luZm8gcmVxd2lkdGggICR0b3BdCisJc2V0IHJlcV9oIFt3aW5mbyByZXFoZWlnaHQgJHRvcF0KKwlzZXQgc2NyX3cgW2V4cHIge1t3aW5mbyBzY3JlZW53aWR0aCAkdG9wXSAtIDQwfV0KKwlzZXQgc2NyX2ggW2V4cHIge1t3aW5mbyBzY3JlZW5oZWlnaHQgJHRvcF0gLSAxMjB9XQorCXNldCBvcHRfdyBbZXhwciB7JGZvbnRfdyAqICg4MCArIDUqMyArIDMpfV0KKwlpZiB7JHJlcV93IDwgJG9wdF93fSB7c2V0IHJlcV93ICRvcHRfd30KKwlpZiB7JHJlcV93ID4gJHNjcl93fSB7c2V0IHJlcV93ICRzY3Jfd30KKwlzZXQgb3B0X2ggW2V4cHIgeyRyZXFfdyo0LzN9XQorCWlmIHskcmVxX2ggPCAkc2NyX2h9IHtzZXQgcmVxX2ggJHNjcl9ofQorCWlmIHskcmVxX2ggPiAkb3B0X2h9IHtzZXQgcmVxX2ggJG9wdF9ofQorCXNldCBnICIke3JlcV93fXgke3JlcV9ofSIKKwl3bSBnZW9tZXRyeSAkdG9wICRnCisJdXBkYXRlCisKKwlzZXQgb2xkX2hlaWdodCBbd2luZm8gaGVpZ2h0ICR3LmZpbGVfcGFuZV0KKwkkdy5maWxlX3BhbmUgc2FzaCBwbGFjZSAwIFwKKwkJW2xpbmRleCBbJHcuZmlsZV9wYW5lIHNhc2ggY29vcmQgMF0gMF0gXAorCQlbZXhwciB7aW50KCRvbGRfaGVpZ2h0ICogMC44MCl9XQorCWJpbmQgJHcuZmlsZV9wYW5lIDxDb25maWd1cmU+IFwKKwkiaWYge3skdy5maWxlX3BhbmV9IGVxIHslV319IHtbY2IgX3Jlc2l6ZSAlaF19IgorCisJd20gcHJvdG9jb2wgJHRvcCBXTV9ERUxFVEVfV0lORE9XICJkZXN0cm95ICR0b3AiCisJYmluZCAkdG9wIDxEZXN0cm95PiBbY2IgX2hhbmRsZV9kZXN0cm95ICVXXQorCisJX2xvYWQgJHRoaXMgJGlfanVtcAorfQorCittZXRob2QgX2ZvY3VzX3NlYXJjaCB7d2lufSB7CisJaWYge1tzZWFyY2hiYXI6OnZpc2libGUgJGZpbmRlcl19IHsKKwkJZm9jdXMgW3NlYXJjaGJhcjo6ZWRpdG9yICRmaW5kZXJdCisJfSBlbHNlIHsKKwkJZm9jdXMgJHdpbgorCX0KK30KKworbWV0aG9kIF9oYW5kbGVfZGVzdHJveSB7d2lufSB7CisJaWYgeyR3aW4gZXEgJHd9IHsKKwkJX2tpbGwgJHRoaXMKKwkJZGVsZXRlX3RoaXMKKwl9Cit9CisKK21ldGhvZCBfa2lsbCB7fSB7CisJaWYgeyRjdXJyZW50X2ZkIG5lIHt9fSB7CisJCWtpbGxfZmlsZV9wcm9jZXNzICRjdXJyZW50X2ZkCisJCWNhdGNoIHtjbG9zZSAkY3VycmVudF9mZH0KKwkJc2V0IGN1cnJlbnRfZmQge30KKwl9Cit9CisKK21ldGhvZCBfbG9hZCB7anVtcH0geworCXZhcmlhYmxlIGdyb3VwX2NvbG9ycworCisJX2hpZGVfdG9vbHRpcCAkdGhpcworCisJaWYgeyR0b3RhbF9saW5lcyAhPSAwIHx8ICRjdXJyZW50X2ZkIG5lIHt9fSB7CisJCV9raWxsICR0aGlzCisKKwkJZm9yZWFjaCBpICR3X2NvbHVtbnMgeworCQkJJGkgY29uZiAtc3RhdGUgbm9ybWFsCisJCQkkaSBkZWxldGUgMC4wIGVuZAorCQkJZm9yZWFjaCBnIFskaSB0YWcgbmFtZXNdIHsKKwkJCQlpZiB7W3JlZ2V4cCB7XmdbMC05YS1mXXs0MH0kfSAkZ119IHsKKwkJCQkJJGkgdGFnIGRlbGV0ZSAkZworCQkJCX0KKwkJCX0KKwkJCSRpIGNvbmYgLXN0YXRlIGRpc2FibGVkCisJCX0KKworCQkkd19jdmlld2VyIGNvbmYgLXN0YXRlIG5vcm1hbAorCQkkd19jdmlld2VyIGRlbGV0ZSAwLjAgZW5kCisJCSR3X2N2aWV3ZXIgY29uZiAtc3RhdGUgZGlzYWJsZWQKKworCQlzZXQgaGlnaGxpZ2h0X2xpbmUgLTEKKwkJc2V0IGhpZ2hsaWdodF9jb2x1bW4ge30KKwkJc2V0IGhpZ2hsaWdodF9jb21taXQge30KKwkJc2V0IHRvdGFsX2xpbmVzIDAKKwl9CisKKwlpZiB7JGhpc3RvcnkgZXEge319IHsKKwkJJHdfYmFjayBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCX0gZWxzZSB7CisJCSR3X2JhY2sgY29uZiAtc3RhdGUgbm9ybWFsCisJfQorCisJIyBJbmRleCAwIGlzIGFsd2F5cyBlbXB0eS4gIFRoZXJlIGlzIG5ldmVyIGxpbmUgMCBhcworCSMgd2UgdXNlIG9ubHkgMSBiYXNlZCBsaW5lcywgYXMgdGhhdCBtYXRjaGVzIGJvdGggd2l0aAorCSMgZ2l0LWJsYW1lIG91dHB1dCBhbmQgd2l0aCBUaydzIHRleHQgd2lkZ2V0LgorCSMKKwlzZXQgYW1vdl9kYXRhIFtsaXN0IFtsaXN0XV0KKwlzZXQgYXNpbV9kYXRhIFtsaXN0IFtsaXN0XV0KKworCSRzdGF0dXMgc2hvdyBbbWMgIlJlYWRpbmcgJXMuLi4iICIkY29tbWl0Oltlc2NhcGVfcGF0aCAkcGF0aF0iXQorCSR3X3BhdGggY29uZiAtdGV4dCBbZXNjYXBlX3BhdGggJHBhdGhdCisKKwlzZXQgZG9fdGV4dGNvbnYgMAorCWlmIHshW2lzX2NvbmZpZ19mYWxzZSBndWkudGV4dGNvbnZdICYmIFtnaXQtdmVyc2lvbiA+PSAxLjcuMl19IHsKKwkJc2V0IGZpbHRlciBbZ2l0YXR0ciAkcGF0aCBkaWZmIHNldF0KKwkJc2V0IHRleHRjb252IFtnZXRfY29uZmlnIFtqb2luIFtsaXN0IGRpZmYgJGZpbHRlciB0ZXh0Y29udl0gLl1dCisJCWlmIHskZmlsdGVyIG5lIHtzZXR9ICYmICR0ZXh0Y29udiBuZSB7fX0geworCQkJc2V0IGRvX3RleHRjb252IDEKKwkJfQorCX0KKwlpZiB7JGNvbW1pdCBlcSB7fX0geworCQlpZiB7JGRvX3RleHRjb252IG5lIDB9IHsKKwkJCXNldCBmZCBbb3Blbl9jbWRfcGlwZSAkdGV4dGNvbnYgJHBhdGhdCisJCX0gZWxzZSB7CisJCQlzZXQgZmQgW29wZW4gJHBhdGggcl0KKwkJfQorCQlmY29uZmlndXJlICRmZCAtZW9mY2hhciB7fQorCX0gZWxzZSB7CisJCWlmIHskZG9fdGV4dGNvbnYgbmUgMH0geworCQkJc2V0IGZkIFtnaXRfcmVhZCBjYXQtZmlsZSAtLXRleHRjb252ICIkY29tbWl0OiRwYXRoIl0KKwkJfSBlbHNlIHsKKwkJCXNldCBmZCBbZ2l0X3JlYWQgY2F0LWZpbGUgYmxvYiAiJGNvbW1pdDokcGF0aCJdCisJCX0KKwl9CisJZmNvbmZpZ3VyZSAkZmQgXAorCQktYmxvY2tpbmcgMCBcCisJCS10cmFuc2xhdGlvbiBsZiBcCisJCS1lbmNvZGluZyBbZ2V0X3BhdGhfZW5jb2RpbmcgJHBhdGhdCisJZmlsZWV2ZW50ICRmZCByZWFkYWJsZSBbY2IgX3JlYWRfZmlsZSAkZmQgJGp1bXBdCisJc2V0IGN1cnJlbnRfZmQgJGZkCit9CisKK21ldGhvZCBfaGlzdG9yeV9tZW51IHt9IHsKKwlzZXQgbSAkdy5iYWNrbWVudQorCWlmIHtbd2luZm8gZXhpc3RzICRtXX0geworCQkkbSBkZWxldGUgMCBlbmQKKwl9IGVsc2UgeworCQltZW51ICRtIC10ZWFyb2ZmIDAKKwl9CisKKwlmb3Ige3NldCBpIFtleHByIHtbbGxlbmd0aCAkaGlzdG9yeV0gLSAxfV0KKwkJfSB7JGkgPj0gMH0ge2luY3IgaSAtMX0geworCQlzZXQgZSBbbGluZGV4ICRoaXN0b3J5ICRpXQorCQlzZXQgYyBbbGluZGV4ICRlIDBdCisJCXNldCBmIFtsaW5kZXggJGUgMV0KKworCQlpZiB7W3JlZ2V4cCB7XlswLTlhLWZdezQwfSR9ICRjXX0geworCQkJc2V0IHQgW3N0cmluZyByYW5nZSAkYyAwIDhdLi4uCisJCX0gZWxzZWlmIHskYyBlcSB7fX0geworCQkJc2V0IHQge1dvcmtpbmcgRGlyZWN0b3J5fQorCQl9IGVsc2UgeworCQkJc2V0IHQgJGMKKwkJfQorCQlpZiB7IVtjYXRjaCB7c2V0IHN1bW1hcnkgJGhlYWRlcigkYyxzdW1tYXJ5KX1dfSB7CisJCQlhcHBlbmQgdCAiICRzdW1tYXJ5IgorCQkJaWYge1tzdHJpbmcgbGVuZ3RoICR0XSA+IDcwfSB7CisJCQkJc2V0IHQgW3N0cmluZyByYW5nZSAkdCAwIDY2XS4uLgorCQkJfQorCQl9CisKKwkJJG0gYWRkIGNvbW1hbmQgLWxhYmVsICR0IC1jb21tYW5kIFtjYiBfZ29iYWNrICRpXQorCX0KKwlzZXQgWCBbd2luZm8gcm9vdHggJHdfYmFja10KKwlzZXQgWSBbZXhwciB7W3dpbmZvIHJvb3R5ICR3X2JhY2tdICsgW3dpbmZvIGhlaWdodCAkd19iYWNrXX1dCisJdGtfcG9wdXAgJG0gJFggJFkKK30KKworbWV0aG9kIF9nb2JhY2sge2l9IHsKKwlzZXQgZGF0IFtsaW5kZXggJGhpc3RvcnkgJGldCisJc2V0IGhpc3RvcnkgW2xyYW5nZSAkaGlzdG9yeSAwIFtleHByIHskaSAtIDF9XV0KKwlzZXQgY29tbWl0IFtsaW5kZXggJGRhdCAwXQorCXNldCBwYXRoIFtsaW5kZXggJGRhdCAxXQorCV9sb2FkICR0aGlzIFtscmFuZ2UgJGRhdCAyIDVdCit9CisKK21ldGhvZCBfcmVhZF9maWxlIHtmZCBqdW1wfSB7CisJaWYgeyRmZCBuZSAkY3VycmVudF9mZH0geworCQljYXRjaCB7Y2xvc2UgJGZkfQorCQlyZXR1cm4KKwl9CisKKwlmb3JlYWNoIGkgJHdfY29sdW1ucyB7JGkgY29uZiAtc3RhdGUgbm9ybWFsfQorCXdoaWxlIHtbZ2V0cyAkZmQgbGluZV0gPj0gMH0geworCQlyZWdzdWIgIlxyXCQiICRsaW5lIHt9IGxpbmUKKwkJaW5jciB0b3RhbF9saW5lcworCQlsYXBwZW5kIGFtb3ZfZGF0YSB7fQorCQlsYXBwZW5kIGFzaW1fZGF0YSB7fQorCisJCWlmIHskdG90YWxfbGluZXMgPiAxfSB7CisJCQlmb3JlYWNoIGkgJHdfY29sdW1ucyB7JGkgaW5zZXJ0IGVuZCAiXG4ifQorCQl9CisKKwkJJHdfbGluZSBpbnNlcnQgZW5kICIkdG90YWxfbGluZXMiIGxpbmVudW1iZXIKKwkJJHdfZmlsZSBpbnNlcnQgZW5kICIkbGluZSIKKwl9CisKKwlzZXQgbG5fd2MgW2V4cHIge1tzdHJpbmcgbGVuZ3RoICR0b3RhbF9saW5lc10gKyAyfV0KKwlpZiB7WyR3X2xpbmUgY2dldCAtd2lkdGhdIDwgJGxuX3djfSB7CisJCSR3X2xpbmUgY29uZiAtd2lkdGggJGxuX3djCisJfQorCisJZm9yZWFjaCBpICR3X2NvbHVtbnMgeyRpIGNvbmYgLXN0YXRlIGRpc2FibGVkfQorCisJaWYge1tlb2YgJGZkXX0geworCQlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMTsgIyBlbmFibGUgZXJyb3IgcmVwb3J0aW5nIG9uIGNsb3NlCisJCWlmIHtbY2F0Y2gge2Nsb3NlICRmZH0gZXJyXX0geworCQkJdGtfbWVzc2FnZUJveCAtaWNvbiBlcnJvciAtdGl0bGUgW21jIEVycm9yXSBcCisJCQkJLW1lc3NhZ2UgJGVycgorCQl9CisKKwkJIyBJZiB3ZSBkb24ndCBmb3JjZSBUayB0byB1cGRhdGUgdGhlIHdpZGdldHMgKnJpZ2h0IG5vdyoKKwkJIyBub25lIG9mIG91ciBqdW1wIGNvbW1hbmRzIHdpbGwgY2F1c2UgYSBjaGFuZ2UgaW4gdGhlIFVJLgorCQkjCisJCXVwZGF0ZQorCisJCWlmIHtbbGxlbmd0aCAkanVtcF0gPT0gMX0geworCQkJc2V0IGhpZ2hsaWdodF9saW5lIFtsaW5kZXggJGp1bXAgMF0KKwkJCSR3X2ZpbGUgc2VlICIkaGlnaGxpZ2h0X2xpbmUuMCIKKwkJfSBlbHNlaWYge1tsbGVuZ3RoICRqdW1wXSA9PSA0fSB7CisJCQlzZXQgaGlnaGxpZ2h0X2NvbHVtbiBbbGluZGV4ICRqdW1wIDBdCisJCQlzZXQgaGlnaGxpZ2h0X2xpbmUgW2xpbmRleCAkanVtcCAxXQorCQkJJHdfZmlsZSB4dmlldyBtb3ZldG8gW2xpbmRleCAkanVtcCAyXQorCQkJJHdfZmlsZSB5dmlldyBtb3ZldG8gW2xpbmRleCAkanVtcCAzXQorCQl9CisKKwkJX2V4ZWNfYmxhbWUgJHRoaXMgJHdfYXNpbSBAYXNpbV9kYXRhIFwKKwkJCVtsaXN0XSBcCisJCQlbbWMgIkxvYWRpbmcgY29weS9tb3ZlIHRyYWNraW5nIGFubm90YXRpb25zLi4uIl0KKwl9Cit9IGlmZGVsZXRlZCB7IGNhdGNoIHtjbG9zZSAkZmR9IH0KKworbWV0aG9kIF9leGVjX2JsYW1lIHtjdXJfdyBjdXJfZCBvcHRpb25zIGN1cl9zfSB7CisJbGFwcGVuZCBvcHRpb25zIC0taW5jcmVtZW50YWwgLS1lbmNvZGluZz11dGYtOAorCWlmIHskY29tbWl0IGVxIHt9fSB7CisJCWxhcHBlbmQgb3B0aW9ucyAtLWNvbnRlbnRzICRwYXRoCisJfSBlbHNlIHsKKwkJbGFwcGVuZCBvcHRpb25zICRjb21taXQKKwl9CisJbGFwcGVuZCBvcHRpb25zIC0tICRwYXRoCisJc2V0IGZkIFtldmFsIGdpdF9yZWFkIC0tbmljZSBibGFtZSAkb3B0aW9uc10KKwlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMCAtdHJhbnNsYXRpb24gbGYgLWVuY29kaW5nIHV0Zi04CisJZmlsZWV2ZW50ICRmZCByZWFkYWJsZSBbY2IgX3JlYWRfYmxhbWUgJGZkICRjdXJfdyAkY3VyX2RdCisJc2V0IGN1cnJlbnRfZmQgJGZkCisJc2V0IGJsYW1lX2xpbmVzIDAKKworCSRzdGF0dXMgc3RhcnQgXAorCQkkY3VyX3MgXAorCQlbbWMgImxpbmVzIGFubm90YXRlZCJdCit9CisKK21ldGhvZCBfcmVhZF9ibGFtZSB7ZmQgY3VyX3cgY3VyX2R9IHsKKwl1cHZhciAjMCAkY3VyX2QgbGluZV9kYXRhCisJdmFyaWFibGUgZ3JvdXBfY29sb3JzCisKKwlpZiB7JGZkIG5lICRjdXJyZW50X2ZkfSB7CisJCWNhdGNoIHtjbG9zZSAkZmR9CisJCXJldHVybgorCX0KKworCSRjdXJfdyBjb25mIC1zdGF0ZSBub3JtYWwKKwl3aGlsZSB7W2dldHMgJGZkIGxpbmVdID49IDB9IHsKKwkJaWYge1tyZWdleHAge14oW2EtejAtOV17NDB9KSAoXGQrKSAoXGQrKSAoXGQrKSR9ICRsaW5lIGxpbmUgXAorCQkJY21pdCBvcmlnaW5hbF9saW5lIGZpbmFsX2xpbmUgbGluZV9jb3VudF19IHsKKwkJCXNldCByX2NvbW1pdCAgICAgJGNtaXQKKwkJCXNldCByX29yaWdfbGluZSAgJG9yaWdpbmFsX2xpbmUKKwkJCXNldCByX2ZpbmFsX2xpbmUgJGZpbmFsX2xpbmUKKwkJCXNldCByX2xpbmVfY291bnQgJGxpbmVfY291bnQKKwkJfSBlbHNlaWYge1tzdHJpbmcgbWF0Y2gge2ZpbGVuYW1lICp9ICRsaW5lXX0geworCQkJc2V0IGZpbGUgW3N0cmluZyByYW5nZSAkbGluZSA5IGVuZF0KKwkJCXNldCBuICAgICRyX2xpbmVfY291bnQKKwkJCXNldCBsbm8gICRyX2ZpbmFsX2xpbmUKKwkJCXNldCBvbG4gICRyX29yaWdfbGluZQorCQkJc2V0IGNtaXQgJHJfY29tbWl0CisKKwkJCWlmIHtbcmVnZXhwIHteMHs0MH0kfSAkY21pdF19IHsKKwkJCQlzZXQgY29tbWl0X2FiYnIgd29yaworCQkJCXNldCBjb21taXRfdHlwZSBjdXJyX2NvbW1pdAorCQkJfSBlbHNlaWYgeyRjbWl0IGVxICRjb21taXR9IHsKKwkJCQlzZXQgY29tbWl0X2FiYnIgdGhpcworCQkJCXNldCBjb21taXRfdHlwZSBjdXJyX2NvbW1pdAorCQkJfSBlbHNlIHsKKwkJCQlzZXQgY29tbWl0X3R5cGUgcHJpb3JfY29tbWl0CisJCQkJc2V0IGNvbW1pdF9hYmJyIFtzdHJpbmcgcmFuZ2UgJGNtaXQgMCAzXQorCQkJfQorCisJCQlzZXQgYXV0aG9yX2FiYnIge30KKwkJCXNldCBhX25hbWUge30KKwkJCWNhdGNoIHtzZXQgYV9uYW1lICRoZWFkZXIoJGNtaXQsYXV0aG9yKX0KKwkJCXdoaWxlIHskYV9uYW1lIG5lIHt9fSB7CisJCQkJaWYgeyRhdXRob3JfYWJiciBuZSB7fQorCQkJCQkmJiBbc3RyaW5nIGluZGV4ICRhX25hbWUgMF0gZXEgeyd9fSB7CisJCQkJCXJlZ3N1YiB7XidbXiddKydccyt9ICRhX25hbWUge30gYV9uYW1lCisJCQkJfQorCQkJCWlmIHshW3JlZ2V4cCB7XihbWzp1cHBlcjpdXSl9ICRhX25hbWUgX2FdfSBicmVhaworCQkJCWFwcGVuZCBhdXRob3JfYWJiciAkX2EKKwkJCQl1bnNldCBfYQorCQkJCWlmIHshW3JlZ3N1YiBcCisJCQkJCXteW1s6dXBwZXI6XV1bXlxzXSpccyt9IFwKKwkJCQkJJGFfbmFtZSB7fSBhX25hbWUgXX0gYnJlYWsKKwkJCX0KKwkJCWlmIHskYXV0aG9yX2FiYnIgZXEge319IHsKKwkJCQlzZXQgYXV0aG9yX2FiYnIgeyB8fQorCQkJfSBlbHNlIHsKKwkJCQlzZXQgYXV0aG9yX2FiYnIgW3N0cmluZyByYW5nZSAkYXV0aG9yX2FiYnIgMCAzXQorCQkJfQorCQkJdW5zZXQgYV9uYW1lCisKKwkJCXNldCBmaXJzdF9sbm8gJGxubworCQkJd2hpbGUgeworCQkJICAgJGZpcnN0X2xubyA+IDEKKwkJCSYmICRjbWl0IGVxIFtsaW5kZXggJGxpbmVfZGF0YSBbZXhwciB7JGZpcnN0X2xubyAtIDF9XSAwXQorCQkJJiYgJGZpbGUgZXEgW2xpbmRleCAkbGluZV9kYXRhIFtleHByIHskZmlyc3RfbG5vIC0gMX1dIDFdCisJCQl9IHsKKwkJCQlpbmNyIGZpcnN0X2xubyAtMQorCQkJfQorCisJCQlzZXQgY29sb3Ige30KKwkJCWlmIHskZmlyc3RfbG5vIDwgJGxub30geworCQkJCWZvcmVhY2ggZyBbJHdfZmlsZSB0YWcgbmFtZXMgJGZpcnN0X2xuby4wXSB7CisJCQkJCWlmIHtbcmVnZXhwIHteY29sb3JbMC05XSskfSAkZ119IHsKKwkJCQkJCXNldCBjb2xvciAkZworCQkJCQkJYnJlYWsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJc2V0IGkgW2xzb3J0IFtjb25jYXQgXAorCQkJCQlbJHdfZmlsZSB0YWcgbmFtZXMgIltleHByIHskZmlyc3RfbG5vIC0gMX1dLjAiXSBcCisJCQkJCVskd19maWxlIHRhZyBuYW1lcyAiW2V4cHIgeyRsbm8gKyAkbn1dLjAiXSBcCisJCQkJCV1dCisJCQkJZm9yIHtzZXQgZyAwfSB7JGcgPCBbbGxlbmd0aCAkZ3JvdXBfY29sb3JzXX0ge2luY3IgZ30geworCQkJCQlpZiB7W2xzZWFyY2ggLXNvcnRlZCAtZXhhY3QgJGkgY29sb3IkZ10gPT0gLTF9IHsKKwkJCQkJCXNldCBjb2xvciBjb2xvciRnCisJCQkJCQlicmVhaworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJaWYgeyRjb2xvciBlcSB7fX0geworCQkJCXNldCBjb2xvciBjb2xvcjAKKwkJCX0KKworCQkJd2hpbGUgeyRuID4gMH0geworCQkJCXNldCBsbm9fZSAiJGxuby4wIGxpbmVlbmQgKyAxYyIKKwkJCQlpZiB7W2xpbmRleCAkbGluZV9kYXRhICRsbm9dIG5lIHt9fSB7CisJCQkJCXNldCBnIFtsaW5kZXggJGxpbmVfZGF0YSAkbG5vIDBdCisJCQkJCWZvcmVhY2ggaSAkd19jb2x1bW5zIHsKKwkJCQkJCSRpIHRhZyByZW1vdmUgZyRnICRsbm8uMCAkbG5vX2UKKwkJCQkJfQorCQkJCX0KKwkJCQlsc2V0IGxpbmVfZGF0YSAkbG5vIFtsaXN0ICRjbWl0ICRmaWxlICRvbG5dCisKKwkJCQkkY3VyX3cgZGVsZXRlICRsbm8uMCAiJGxuby4wIGxpbmVlbmQiCisJCQkJaWYgeyRsbm8gPT0gJGZpcnN0X2xub30geworCQkJCQkkY3VyX3cgaW5zZXJ0ICRsbm8uMCAkY29tbWl0X2FiYnIgJGNvbW1pdF90eXBlCisJCQkJfSBlbHNlaWYgeyRsbm8gPT0gW2V4cHIgeyRmaXJzdF9sbm8gKyAxfV19IHsKKwkJCQkJJGN1cl93IGluc2VydCAkbG5vLjAgJGF1dGhvcl9hYmJyIGF1dGhvcl9hYmJyCisJCQkJfSBlbHNlIHsKKwkJCQkJJGN1cl93IGluc2VydCAkbG5vLjAgeyB8fQorCQkJCX0KKworCQkJCWZvcmVhY2ggaSAkd19jb2x1bW5zIHsKKwkJCQkJaWYgeyRjdXJfdyBlcSAkd19hbW92fSB7CisJCQkJCQlmb3Ige3NldCBnIDB9IFwKKwkJCQkJCQl7JGcgPCBbbGxlbmd0aCAkZ3JvdXBfY29sb3JzXX0gXAorCQkJCQkJCXtpbmNyIGd9IHsKKwkJCQkJCQkkaSB0YWcgcmVtb3ZlIGNvbG9yJGcgJGxuby4wICRsbm9fZQorCQkJCQkJfQorCQkJCQkJJGkgdGFnIGFkZCAkY29sb3IgJGxuby4wICRsbm9fZQorCQkJCQl9CisJCQkJCSRpIHRhZyBhZGQgZyRjbWl0ICRsbm8uMCAkbG5vX2UKKwkJCQl9CisKKwkJCQlpZiB7JGhpZ2hsaWdodF9jb2x1bW4gZXEgJGN1cl93fSB7CisJCQkJCWlmIHskaGlnaGxpZ2h0X2xpbmUgPT0gLTEKKwkJCQkJICYmIFtsaW5kZXggWyR3X2ZpbGUgeXZpZXddIDBdID09IDB9IHsKKwkJCQkJCSR3X2ZpbGUgc2VlICRsbm8uMAorCQkJCQkJc2V0IGhpZ2hsaWdodF9saW5lICRsbm8KKwkJCQkJfQorCQkJCQlpZiB7JGhpZ2hsaWdodF9saW5lID09ICRsbm99IHsKKwkJCQkJCV9zaG93Y29tbWl0ICR0aGlzICRjdXJfdyAkbG5vCisJCQkJCX0KKwkJCQl9CisKKwkJCQlpbmNyIG4gLTEKKwkJCQlpbmNyIGxubworCQkJCWluY3Igb2xuCisJCQkJaW5jciBibGFtZV9saW5lcworCQkJfQorCisJCQl3aGlsZSB7CisJCQkgICAkY21pdCBlcSBbbGluZGV4ICRsaW5lX2RhdGEgJGxubyAwXQorCQkJJiYgJGZpbGUgZXEgW2xpbmRleCAkbGluZV9kYXRhICRsbm8gMV0KKwkJCX0geworCQkJCSRjdXJfdyBkZWxldGUgJGxuby4wICIkbG5vLjAgbGluZWVuZCIKKworCQkJCWlmIHskbG5vID09ICRmaXJzdF9sbm99IHsKKwkJCQkJJGN1cl93IGluc2VydCAkbG5vLjAgJGNvbW1pdF9hYmJyICRjb21taXRfdHlwZQorCQkJCX0gZWxzZWlmIHskbG5vID09IFtleHByIHskZmlyc3RfbG5vICsgMX1dfSB7CisJCQkJCSRjdXJfdyBpbnNlcnQgJGxuby4wICRhdXRob3JfYWJiciBhdXRob3JfYWJicgorCQkJCX0gZWxzZSB7CisJCQkJCSRjdXJfdyBpbnNlcnQgJGxuby4wIHsgfH0KKwkJCQl9CisKKwkJCQlpZiB7JGN1cl93IGVxICR3X2Ftb3Z9IHsKKwkJCQkJZm9yZWFjaCBpICR3X2NvbHVtbnMgeworCQkJCQkJZm9yIHtzZXQgZyAwfSBcCisJCQkJCQkJeyRnIDwgW2xsZW5ndGggJGdyb3VwX2NvbG9yc119IFwKKwkJCQkJCQl7aW5jciBnfSB7CisJCQkJCQkJJGkgdGFnIHJlbW92ZSBjb2xvciRnICRsbm8uMCAkbG5vX2UKKwkJCQkJCX0KKwkJCQkJCSRpIHRhZyBhZGQgJGNvbG9yICRsbm8uMCAkbG5vX2UKKwkJCQkJfQorCQkJCX0KKworCQkJCWluY3IgbG5vCisJCQl9CisKKwkJfSBlbHNlaWYge1tyZWdleHAge14oW2Etei1dKykgKC4qKSR9ICRsaW5lIGxpbmUga2V5IGRhdGFdfSB7CisJCQlzZXQgaGVhZGVyKCRyX2NvbW1pdCwka2V5KSAkZGF0YQorCQl9CisJfQorCSRjdXJfdyBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCisJaWYge1tlb2YgJGZkXX0geworCQljbG9zZSAkZmQKKwkJaWYgeyRjdXJfdyBlcSAkd19hc2ltfSB7CisJCQkjIFN3aXRjaGVzIGZvciBvcmlnaW5hbCBsb2NhdGlvbiBkZXRlY3Rpb24KKwkJCXNldCB0aHJlc2hvbGQgW2dldF9jb25maWcgZ3VpLmNvcHlibGFtZXRocmVzaG9sZF0KKwkJCXNldCBvcmlnaW5hbF9vcHRpb25zIFtsaXN0ICItQyR0aHJlc2hvbGQiXQorCisJCQlpZiB7IVtpc19jb25maWdfdHJ1ZSBndWkuZmFzdGNvcHlibGFtZV19IHsKKwkJCQkjIHRob3JvdWdoIGNvcHkgc2VhcmNoOyBpbnNlcnQgYmVmb3JlIHRoZSB0aHJlc2hvbGQKKwkJCQlzZXQgb3JpZ2luYWxfb3B0aW9ucyBbbGluc2VydCAkb3JpZ2luYWxfb3B0aW9ucyAwIC1DXQorCQkJfQorCQkJaWYge1tnaXQtdmVyc2lvbiA+PSAxLjUuM119IHsKKwkJCQlsYXBwZW5kIG9yaWdpbmFsX29wdGlvbnMgLXcgOyAjIGlnbm9yZSBpbmRlbnRhdGlvbiBjaGFuZ2VzCisJCQl9CisKKwkJCV9leGVjX2JsYW1lICR0aGlzICR3X2Ftb3YgQGFtb3ZfZGF0YSBcCisJCQkJJG9yaWdpbmFsX29wdGlvbnMgXAorCQkJCVttYyAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiJdCisJCX0gZWxzZSB7CisJCQlzZXQgY3VycmVudF9mZCB7fQorCQkJJHN0YXR1cyBzdG9wIFttYyAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iXQorCQl9CisJfSBlbHNlIHsKKwkJJHN0YXR1cyB1cGRhdGUgJGJsYW1lX2xpbmVzICR0b3RhbF9saW5lcworCX0KK30gaWZkZWxldGVkIHsgY2F0Y2gge2Nsb3NlICRmZH0gfQorCittZXRob2QgX2ZpbmRfY29tbWl0X2JvdW5kIHtkYXRhX2xpc3Qgc3RhcnRfaWR4IGRlbHRhfSB7CisJdXB2YXIgIzAgJGRhdGFfbGlzdCBsaW5lX2RhdGEKKwlzZXQgcG9zICRzdGFydF9pZHgKKwlzZXQgbGltaXQgICAgICAgW2V4cHIge1tsbGVuZ3RoICRsaW5lX2RhdGFdIC0gMX1dCisJc2V0IGJhc2VfY29tbWl0IFtsaW5kZXggJGxpbmVfZGF0YSAkcG9zIDBdCisKKwl3aGlsZSB7JHBvcyA+IDAgJiYgJHBvcyA8ICRsaW1pdH0geworCQlzZXQgbmV3X3BvcyBbZXhwciB7JHBvcyArICRkZWx0YX1dCisJCWlmIHtbbGluZGV4ICRsaW5lX2RhdGEgJG5ld19wb3MgMF0gbmUgJGJhc2VfY29tbWl0fSB7CisJCQlyZXR1cm4gJHBvcworCQl9CisKKwkJc2V0IHBvcyAkbmV3X3BvcworCX0KKworCXJldHVybiAkcG9zCit9CisKK21ldGhvZCBfZnVsbGNvcHlibGFtZSB7fSB7CisJaWYgeyRjdXJyZW50X2ZkIG5lIHt9fSB7CisJCXRrX21lc3NhZ2VCb3ggXAorCQkJLWljb24gZXJyb3IgXAorCQkJLXR5cGUgb2sgXAorCQkJLXRpdGxlIFttYyAiQnVzeSJdIFwKKwkJCS1tZXNzYWdlIFttYyAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iXQorCisJCXJldHVybgorCX0KKworCSMgU3dpdGNoZXMgZm9yIG9yaWdpbmFsIGxvY2F0aW9uIGRldGVjdGlvbgorCXNldCB0aHJlc2hvbGQgW2dldF9jb25maWcgZ3VpLmNvcHlibGFtZXRocmVzaG9sZF0KKwlzZXQgb3JpZ2luYWxfb3B0aW9ucyBbbGlzdCAtQyAtQyAiLUMkdGhyZXNob2xkIl0KKworCWlmIHtbZ2l0LXZlcnNpb24gPj0gMS41LjNdfSB7CisJCWxhcHBlbmQgb3JpZ2luYWxfb3B0aW9ucyAtdyA7ICMgaWdub3JlIGluZGVudGF0aW9uIGNoYW5nZXMKKwl9CisKKwkjIEZpbmQgdGhlIGxpbmUgcmFuZ2UKKwlzZXQgcG9zIEAkOjpjdXJzb3JYLCQ6OmN1cnNvclkKKwlzZXQgbG5vIFtsaW5kZXggW3NwbGl0IFskOjpjdXJzb3JXIGluZGV4ICRwb3NdIC5dIDBdCisJc2V0IG1pbl9hbW92X2xubyBbX2ZpbmRfY29tbWl0X2JvdW5kICR0aGlzIEBhbW92X2RhdGEgJGxubyAtMV0KKwlzZXQgbWF4X2Ftb3ZfbG5vIFtfZmluZF9jb21taXRfYm91bmQgJHRoaXMgQGFtb3ZfZGF0YSAkbG5vIDFdCisJc2V0IG1pbl9hc2ltX2xubyBbX2ZpbmRfY29tbWl0X2JvdW5kICR0aGlzIEBhc2ltX2RhdGEgJGxubyAtMV0KKwlzZXQgbWF4X2FzaW1fbG5vIFtfZmluZF9jb21taXRfYm91bmQgJHRoaXMgQGFzaW1fZGF0YSAkbG5vIDFdCisKKwlpZiB7JG1pbl9hc2ltX2xubyA8ICRtaW5fYW1vdl9sbm99IHsKKwkJc2V0IG1pbl9hbW92X2xubyAkbWluX2FzaW1fbG5vCisJfQorCisJaWYgeyRtYXhfYXNpbV9sbm8gPiAkbWF4X2Ftb3ZfbG5vfSB7CisJCXNldCBtYXhfYW1vdl9sbm8gJG1heF9hc2ltX2xubworCX0KKworCWxhcHBlbmQgb3JpZ2luYWxfb3B0aW9ucyAtTCAiJG1pbl9hbW92X2xubywkbWF4X2Ftb3ZfbG5vIgorCisJIyBDbGVhciBsaW5lcworCWZvciB7c2V0IGkgJG1pbl9hbW92X2xub30geyRpIDw9ICRtYXhfYW1vdl9sbm99IHtpbmNyIGl9IHsKKwkJbHNldCBhbW92X2RhdGEgJGkgW2xpc3QgXQorCX0KKworCSMgU3RhcnQgdGhlIGJhY2stZW5kIHByb2Nlc3MKKwlfZXhlY19ibGFtZSAkdGhpcyAkd19hbW92IEBhbW92X2RhdGEgXAorCQkkb3JpZ2luYWxfb3B0aW9ucyBcCisJCVttYyAiUnVubmluZyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4uLiJdCit9CisKK21ldGhvZCBfY2xpY2sge2N1cl93IHBvc30geworCXNldCBsbm8gW2xpbmRleCBbc3BsaXQgWyRjdXJfdyBpbmRleCAkcG9zXSAuXSAwXQorCV9zaG93Y29tbWl0ICR0aGlzICRjdXJfdyAkbG5vCit9CisKK21ldGhvZCBfc2V0ZW5jb2Rpbmcge2VuY30geworCWZvcmNlX3BhdGhfZW5jb2RpbmcgJHBhdGggJGVuYworCV9sb2FkICR0aGlzIFtsaXN0IFwKKwkJJGhpZ2hsaWdodF9jb2x1bW4gXAorCQkkaGlnaGxpZ2h0X2xpbmUgXAorCQlbbGluZGV4IFskd19maWxlIHh2aWV3XSAwXSBcCisJCVtsaW5kZXggWyR3X2ZpbGUgeXZpZXddIDBdIFwKKwkJXQorfQorCittZXRob2QgX2xvYWRfY29tbWl0IHtjdXJfdyBjdXJfZCBwb3N9IHsKKwl1cHZhciAjMCAkY3VyX2QgbGluZV9kYXRhCisJc2V0IGxubyBbbGluZGV4IFtzcGxpdCBbJGN1cl93IGluZGV4ICRwb3NdIC5dIDBdCisJc2V0IGRhdCBbbGluZGV4ICRsaW5lX2RhdGEgJGxub10KKwlpZiB7JGRhdCBuZSB7fX0geworCQlfbG9hZF9uZXdfY29tbWl0ICR0aGlzICBcCisJCQlbbGluZGV4ICRkYXQgMF0gXAorCQkJW2xpbmRleCAkZGF0IDFdIFwKKwkJCVtsaXN0IFtsaW5kZXggJGRhdCAyXV0KKwl9Cit9CisKK21ldGhvZCBfbG9hZF9uZXdfY29tbWl0IHtuZXdfY29tbWl0IG5ld19wYXRoIGp1bXB9IHsKKwlsYXBwZW5kIGhpc3RvcnkgW2xpc3QgXAorCQkkY29tbWl0ICRwYXRoIFwKKwkJJGhpZ2hsaWdodF9jb2x1bW4gXAorCQkkaGlnaGxpZ2h0X2xpbmUgXAorCQlbbGluZGV4IFskd19maWxlIHh2aWV3XSAwXSBcCisJCVtsaW5kZXggWyR3X2ZpbGUgeXZpZXddIDBdIFwKKwkJXQorCisJc2V0IGNvbW1pdCAkbmV3X2NvbW1pdAorCXNldCBwYXRoICAgJG5ld19wYXRoCisJX2xvYWQgJHRoaXMgJGp1bXAKK30KKworbWV0aG9kIF9zaG93Y29tbWl0IHtjdXJfdyBsbm99IHsKKwlnbG9iYWwgcmVwb19jb25maWcKKwl2YXJpYWJsZSBhY3RpdmVfY29sb3IKKworCWlmIHskaGlnaGxpZ2h0X2NvbW1pdCBuZSB7fX0geworCQlmb3JlYWNoIGkgJHdfY29sdW1ucyB7CisJCQkkaSB0YWcgY29uZiBnJGhpZ2hsaWdodF9jb21taXQgLWJhY2tncm91bmQge30KKwkJCSRpIHRhZyBsb3dlciBnJGhpZ2hsaWdodF9jb21taXQKKwkJfQorCX0KKworCWlmIHskY3VyX3cgZXEgJHdfYXNpbX0geworCQlzZXQgZGF0IFtsaW5kZXggJGFzaW1fZGF0YSAkbG5vXQorCQlzZXQgaGlnaGxpZ2h0X2NvbHVtbiAkd19hc2ltCisJfSBlbHNlIHsKKwkJc2V0IGRhdCBbbGluZGV4ICRhbW92X2RhdGEgJGxub10KKwkJc2V0IGhpZ2hsaWdodF9jb2x1bW4gJHdfYW1vdgorCX0KKworCSR3X2N2aWV3ZXIgY29uZiAtc3RhdGUgbm9ybWFsCisJJHdfY3ZpZXdlciBkZWxldGUgMC4wIGVuZAorCisJaWYgeyRkYXQgZXEge319IHsKKwkJc2V0IGNtaXQge30KKwkJJHdfY3ZpZXdlciBpbnNlcnQgZW5kIFttYyAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIl0gc3RpbGxfbG9hZGluZworCX0gZWxzZSB7CisJCXNldCBjbWl0IFtsaW5kZXggJGRhdCAwXQorCQlzZXQgZmlsZSBbbGluZGV4ICRkYXQgMV0KKworCQlmb3JlYWNoIGkgJHdfY29sdW1ucyB7CisJCQkkaSB0YWcgY29uZiBnJGNtaXQgLWJhY2tncm91bmQgJGFjdGl2ZV9jb2xvcgorCQkJJGkgdGFnIHJhaXNlIGckY21pdAorCQkJaWYgeyRpIGVxICR3X2ZpbGV9IHsKKwkJCQkkd19maWxlIHRhZyByYWlzZSBmb3VuZAorCQkJfQorCQkJJGkgdGFnIHJhaXNlIHNlbAorCQl9CisKKwkJc2V0IGF1dGhvcl9uYW1lIHt9CisJCXNldCBhdXRob3JfZW1haWwge30KKwkJc2V0IGF1dGhvcl90aW1lIHt9CisJCWNhdGNoIHtzZXQgYXV0aG9yX25hbWUgJGhlYWRlcigkY21pdCxhdXRob3IpfQorCQljYXRjaCB7c2V0IGF1dGhvcl9lbWFpbCAkaGVhZGVyKCRjbWl0LGF1dGhvci1tYWlsKX0KKwkJY2F0Y2gge3NldCBhdXRob3JfdGltZSBbZm9ybWF0X2RhdGUgJGhlYWRlcigkY21pdCxhdXRob3ItdGltZSldfQorCisJCXNldCBjb21taXR0ZXJfbmFtZSB7fQorCQlzZXQgY29tbWl0dGVyX2VtYWlsIHt9CisJCXNldCBjb21taXR0ZXJfdGltZSB7fQorCQljYXRjaCB7c2V0IGNvbW1pdHRlcl9uYW1lICRoZWFkZXIoJGNtaXQsY29tbWl0dGVyKX0KKwkJY2F0Y2gge3NldCBjb21taXR0ZXJfZW1haWwgJGhlYWRlcigkY21pdCxjb21taXR0ZXItbWFpbCl9CisJCWNhdGNoIHtzZXQgY29tbWl0dGVyX3RpbWUgW2Zvcm1hdF9kYXRlICRoZWFkZXIoJGNtaXQsY29tbWl0dGVyLXRpbWUpXX0KKworCQlpZiB7W2NhdGNoIHtzZXQgbXNnICRoZWFkZXIoJGNtaXQsbWVzc2FnZSl9XX0geworCQkJc2V0IG1zZyB7fQorCQkJY2F0Y2ggeworCQkJCXNldCBmZCBbZ2l0X3JlYWQgY2F0LWZpbGUgY29tbWl0ICRjbWl0XQorCQkJCWZjb25maWd1cmUgJGZkIC1lbmNvZGluZyBiaW5hcnkgLXRyYW5zbGF0aW9uIGxmCisJCQkJIyBCeSBkZWZhdWx0IGNvbW1pdHMgYXJlIGFzc3VtZWQgdG8gYmUgaW4gdXRmLTgKKwkJCQlzZXQgZW5jIHV0Zi04CisJCQkJd2hpbGUge1tnZXRzICRmZCBsaW5lXSA+IDB9IHsKKwkJCQkJaWYge1tzdHJpbmcgbWF0Y2gge2VuY29kaW5nICp9ICRsaW5lXX0geworCQkJCQkJc2V0IGVuYyBbc3RyaW5nIHRvbG93ZXIgW3N0cmluZyByYW5nZSAkbGluZSA5IGVuZF1dCisJCQkJCX0KKwkJCQl9CisJCQkJc2V0IG1zZyBbcmVhZCAkZmRdCisJCQkJY2xvc2UgJGZkCisKKwkJCQlzZXQgZW5jIFt0Y2xfZW5jb2RpbmcgJGVuY10KKwkJCQlpZiB7JGVuYyBuZSB7fX0geworCQkJCQlzZXQgbXNnIFtlbmNvZGluZyBjb252ZXJ0ZnJvbSAkZW5jICRtc2ddCisJCQkJfQorCQkJCXNldCBtc2cgW3N0cmluZyB0cmltICRtc2ddCisJCQl9CisJCQlzZXQgaGVhZGVyKCRjbWl0LG1lc3NhZ2UpICRtc2cKKwkJfQorCisJCSR3X2N2aWV3ZXIgaW5zZXJ0IGVuZCAiY29tbWl0ICRjbWl0XG4iIGhlYWRlcl9rZXkKKwkJJHdfY3ZpZXdlciBpbnNlcnQgZW5kIFtzdHJjYXQgW21jICJBdXRob3I6Il0gIlx0Il0gaGVhZGVyX2tleQorCQkkd19jdmlld2VyIGluc2VydCBlbmQgIiRhdXRob3JfbmFtZSAkYXV0aG9yX2VtYWlsIiBoZWFkZXJfdmFsCisJCSR3X2N2aWV3ZXIgaW5zZXJ0IGVuZCAiICAkYXV0aG9yX3RpbWVcbiIgaGVhZGVyX3ZhbAorCisJCSR3X2N2aWV3ZXIgaW5zZXJ0IGVuZCBbc3RyY2F0IFttYyAiQ29tbWl0dGVyOiJdICJcdCJdIGhlYWRlcl9rZXkKKwkJJHdfY3ZpZXdlciBpbnNlcnQgZW5kICIkY29tbWl0dGVyX25hbWUgJGNvbW1pdHRlcl9lbWFpbCIgaGVhZGVyX3ZhbAorCQkkd19jdmlld2VyIGluc2VydCBlbmQgIiAgJGNvbW1pdHRlcl90aW1lXG4iIGhlYWRlcl92YWwKKworCQlpZiB7JGZpbGUgbmUgJHBhdGh9IHsKKwkJCSR3X2N2aWV3ZXIgaW5zZXJ0IGVuZCBbc3RyY2F0IFttYyAiT3JpZ2luYWwgRmlsZToiXSAiXHQiXSBoZWFkZXJfa2V5CisJCQkkd19jdmlld2VyIGluc2VydCBlbmQgIltlc2NhcGVfcGF0aCAkZmlsZV1cbiIgaGVhZGVyX3ZhbAorCQl9CisKKwkJJHdfY3ZpZXdlciBpbnNlcnQgZW5kICJcbiRtc2ciCisJfQorCSR3X2N2aWV3ZXIgY29uZiAtc3RhdGUgZGlzYWJsZWQKKworCXNldCBoaWdobGlnaHRfbGluZSAkbG5vCisJc2V0IGhpZ2hsaWdodF9jb21taXQgJGNtaXQKKworCWlmIHtbbHNlYXJjaCAtZXhhY3QgJHRvb2x0aXBfY29tbWl0ICRoaWdobGlnaHRfY29tbWl0XSAhPSAtMX0geworCQlfaGlkZV90b29sdGlwICR0aGlzCisJfQorfQorCittZXRob2QgX2dldF9jbGlja19hbW92X2luZm8ge30geworCXNldCBwb3MgQCQ6OmN1cnNvclgsJDo6Y3Vyc29yWQorCXNldCBsbm8gW2xpbmRleCBbc3BsaXQgWyQ6OmN1cnNvclcgaW5kZXggJHBvc10gLl0gMF0KKwlyZXR1cm4gW2xpbmRleCAkYW1vdl9kYXRhICRsbm9dCit9CisKK21ldGhvZCBfY29weWNvbW1pdCB7fSB7CisJc2V0IGRhdCBbX2dldF9jbGlja19hbW92X2luZm8gJHRoaXNdCisJaWYgeyRkYXQgbmUge319IHsKKwkJY2xpcGJvYXJkIGNsZWFyCisJCWNsaXBib2FyZCBhcHBlbmQgXAorCQkJLWZvcm1hdCBTVFJJTkcgXAorCQkJLXR5cGUgU1RSSU5HIFwKKwkJCS0tIFtsaW5kZXggJGRhdCAwXQorCX0KK30KKworbWV0aG9kIF9mb3JtYXRfb2Zmc2V0X2RhdGUge2Jhc2Ugb2Zmc2V0fSB7CisJc2V0IGV4dmFsIFtleHByIHskYmFzZSArICRvZmZzZXQqMjQqNjAqNjB9XQorCXJldHVybiBbY2xvY2sgZm9ybWF0ICRleHZhbCAtZm9ybWF0IHslWS0lbS0lZH1dCit9CisKK21ldGhvZCBfZ2l0a2NvbW1pdCB7fSB7CisJZ2xvYmFsIG51bGxpZAorCisJc2V0IGRhdCBbX2dldF9jbGlja19hbW92X2luZm8gJHRoaXNdCisJaWYgeyRkYXQgbmUge319IHsKKwkJc2V0IGNtaXQgW2xpbmRleCAkZGF0IDBdCisKKwkJIyBJZiB0aGUgbGluZSBiZWxvbmdzIHRvIHRoZSB3b3JraW5nIGNvcHksIHVzZSBIRUFEIGluc3RlYWQKKwkJaWYgeyRjbWl0IGVxICRudWxsaWR9IHsKKwkJCWlmIHtbY2F0Y2gge3NldCBjbWl0IFtnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURdfSBlcnJdfSB7CisJCQkJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiJdICJcblxuJGVyciJdCisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJc2V0IHJhZGl1cyBbZ2V0X2NvbmZpZyBndWkuYmxhbWVoaXN0b3J5Y3R4XQorCQlzZXQgY21kbGluZSBbbGlzdCAtLXNlbGVjdC1jb21taXQ9JGNtaXRdCisKKwkJaWYgeyRyYWRpdXMgPiAwfSB7CisJCQlzZXQgYXV0aG9yX3RpbWUge30KKwkJCXNldCBjb21taXR0ZXJfdGltZSB7fQorCisJCQljYXRjaCB7c2V0IGF1dGhvcl90aW1lICRoZWFkZXIoJGNtaXQsYXV0aG9yLXRpbWUpfQorCQkJY2F0Y2gge3NldCBjb21taXR0ZXJfdGltZSAkaGVhZGVyKCRjbWl0LGNvbW1pdHRlci10aW1lKX0KKworCQkJaWYgeyRjb21taXR0ZXJfdGltZSBlcSB7fX0geworCQkJCXNldCBjb21taXR0ZXJfdGltZSAkYXV0aG9yX3RpbWUKKwkJCX0KKworCQkJc2V0IGFmdGVyX3RpbWUgW19mb3JtYXRfb2Zmc2V0X2RhdGUgJHRoaXMgJGNvbW1pdHRlcl90aW1lIFtleHByIHstJHJhZGl1c31dXQorCQkJc2V0IGJlZm9yZV90aW1lIFtfZm9ybWF0X29mZnNldF9kYXRlICR0aGlzICRjb21taXR0ZXJfdGltZSAkcmFkaXVzXQorCisJCQlsYXBwZW5kIGNtZGxpbmUgLS1hZnRlcj0kYWZ0ZXJfdGltZSAtLWJlZm9yZT0kYmVmb3JlX3RpbWUKKwkJfQorCisJCWxhcHBlbmQgY21kbGluZSAkY21pdAorCisJCXNldCBiYXNlX3JldiAiSEVBRCIKKwkJaWYgeyRjb21taXQgbmUge319IHsKKwkJCXNldCBiYXNlX3JldiAkY29tbWl0CisJCX0KKworCQlpZiB7JGJhc2VfcmV2IG5lICRjbWl0fSB7CisJCQlsYXBwZW5kIGNtZGxpbmUgJGJhc2VfcmV2CisJCX0KKworCQlkb19naXRrICRjbWRsaW5lCisJfQorfQorCittZXRob2QgX2JsYW1lcGFyZW50IHt9IHsKKwlnbG9iYWwgbnVsbGlkCisKKwlzZXQgZGF0IFtfZ2V0X2NsaWNrX2Ftb3ZfaW5mbyAkdGhpc10KKwlpZiB7JGRhdCBuZSB7fX0geworCQlzZXQgY21pdCBbbGluZGV4ICRkYXQgMF0KKwkJc2V0IG5ld19wYXRoIFtsaW5kZXggJGRhdCAxXQorCisJCSMgQWxsb3cgdXNpbmcgQmxhbWUgUGFyZW50IG9uIGxpbmVzIG1vZGlmaWVkIGluIHRoZSB3b3JraW5nIGNvcHkKKwkJaWYgeyRjbWl0IGVxICRudWxsaWR9IHsKKwkJCXNldCBwYXJlbnRfcmVmICJIRUFEIgorCQl9IGVsc2UgeworCQkJc2V0IHBhcmVudF9yZWYgIiRjbWl0XiIKKwkJfQorCQlpZiB7W2NhdGNoIHtzZXQgY3BhcmVudCBbZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkcGFyZW50X3JlZl19IGVycl19IHsKKwkJCWVycm9yX3BvcHVwIFtzdHJjYXQgW21jICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiJdICJcblxuJGVyciJdCisJCQlyZXR1cm47CisJCX0KKworCQlfa2lsbCAkdGhpcworCisJCSMgR2VuZXJhdGUgYSBkaWZmIGJldHdlZW4gdGhlIGNvbW1pdCBhbmQgaXRzIHBhcmVudCwKKwkJIyBhbmQgdXNlIHRoZSBodW5rcyB0byB1cGRhdGUgdGhlIGxpbmUgbnVtYmVyLgorCQkjIFJlcXVlc3QgemVybyBjb250ZXh0IHRvIHNpbXBsaWZ5IGNhbGN1bGF0aW9ucy4KKwkJaWYgeyRjbWl0IGVxICRudWxsaWR9IHsKKwkJCXNldCBkaWZmY21kIFtsaXN0IGRpZmYtaW5kZXggLS11bmlmaWVkPTAgJGNwYXJlbnQgLS0gJG5ld19wYXRoXQorCQl9IGVsc2UgeworCQkJc2V0IGRpZmZjbWQgW2xpc3QgZGlmZi10cmVlIC0tdW5pZmllZD0wICRjcGFyZW50ICRjbWl0IC0tICRuZXdfcGF0aF0KKwkJfQorCQlpZiB7W2NhdGNoIHtzZXQgZmQgW2V2YWwgZ2l0X3JlYWQgJGRpZmZjbWRdfSBlcnJdfSB7CisJCQkkc3RhdHVzIHN0b3AgW21jICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiXQorCQkJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgIkVycm9yIGxvYWRpbmcgZGlmZjoiXSAiXG5cbiRlcnIiXQorCQkJcmV0dXJuCisJCX0KKworCQlzZXQgcl9vcmlnX2xpbmUgW2xpbmRleCAkZGF0IDJdCisKKwkJZmNvbmZpZ3VyZSAkZmQgXAorCQkJLWJsb2NraW5nIDAgXAorCQkJLWVuY29kaW5nIGJpbmFyeSBcCisJCQktdHJhbnNsYXRpb24gYmluYXJ5CisJCWZpbGVldmVudCAkZmQgcmVhZGFibGUgW2NiIF9yZWFkX2RpZmZfbG9hZF9jb21taXQgXAorCQkJJGZkICRjcGFyZW50ICRuZXdfcGF0aCAkcl9vcmlnX2xpbmVdCisJCXNldCBjdXJyZW50X2ZkICRmZAorCX0KK30KKworbWV0aG9kIF9yZWFkX2RpZmZfbG9hZF9jb21taXQge2ZkIGNwYXJlbnQgbmV3X3BhdGggdGxpbmV9IHsKKwlpZiB7JGZkIG5lICRjdXJyZW50X2ZkfSB7CisJCWNhdGNoIHtjbG9zZSAkZmR9CisJCXJldHVybgorCX0KKworCXdoaWxlIHtbZ2V0cyAkZmQgbGluZV0gPj0gMH0geworCQlpZiB7W3JlZ2V4cCB7XkBAIC0oXGQrKSgsKFxkKykpPyBcKyhcZCspKCwoXGQrKSk/IEBAfSAkbGluZSBsaW5lIFwKKwkJCW9sZF9saW5lIG9zeiBvbGRfc2l6ZSBuZXdfbGluZSBuc3ogbmV3X3NpemVdfSB7CisKKwkJCWlmIHskb3N6IGVxIHt9fSB7IHNldCBvbGRfc2l6ZSAxIH0KKwkJCWlmIHskbnN6IGVxIHt9fSB7IHNldCBuZXdfc2l6ZSAxIH0KKworCQkJaWYgeyRuZXdfbGluZSA8PSAkdGxpbmV9IHsKKwkJCQlpZiB7W2V4cHIgeyRuZXdfbGluZSArICRuZXdfc2l6ZX1dID4gJHRsaW5lfSB7CisJCQkJCSMgVGFyZ2V0IGxpbmUgd2l0aGluIHRoZSBodW5rCisJCQkJCXNldCBsaW5lX3NoaWZ0IFtleHByIHsKKwkJCQkJCSgkbmV3X3NpemUtJG9sZF9zaXplKSooJHRsaW5lLSRuZXdfbGluZSkvJG5ld19zaXplCisJCQkJCQl9XQorCQkJCX0gZWxzZSB7CisJCQkJCXNldCBsaW5lX3NoaWZ0IFtleHByIHskbmV3X3NpemUtJG9sZF9zaXplfV0KKwkJCQl9CisKKwkJCQlzZXQgcl9vcmlnX2xpbmUgW2V4cHIgeyRyX29yaWdfbGluZSAtICRsaW5lX3NoaWZ0fV0KKwkJCX0KKwkJfQorCX0KKworCWlmIHtbZW9mICRmZF19IHsKKwkJY2xvc2UgJGZkCisJCXNldCBjdXJyZW50X2ZkIHt9CisKKwkJX2xvYWRfbmV3X2NvbW1pdCAkdGhpcyAgXAorCQkJJGNwYXJlbnQgICAgICAgIFwKKwkJCSRuZXdfcGF0aCAgICAgICBcCisJCQlbbGlzdCAkcl9vcmlnX2xpbmVdCisJfQorfSBpZmRlbGV0ZWQgeyBjYXRjaCB7Y2xvc2UgJGZkfSB9CisKK21ldGhvZCBfc2hvd190b29sdGlwIHtjdXJfdyBwb3N9IHsKKwlpZiB7JHRvb2x0aXBfd20gbmUge319IHsKKwkJX29wZW5fdG9vbHRpcCAkdGhpcyAkY3VyX3cKKwl9IGVsc2VpZiB7JHRvb2x0aXBfdGltZXIgZXEge319IHsKKwkJc2V0IHRvb2x0aXBfdGltZXIgW2FmdGVyIDEwMDAgW2NiIF9vcGVuX3Rvb2x0aXAgJGN1cl93XV0KKwl9Cit9CisKK21ldGhvZCBfb3Blbl90b29sdGlwIHtjdXJfd30geworCXNldCB0b29sdGlwX3RpbWVyIHt9CisJc2V0IHBvc194IFt3aW5mbyBwb2ludGVyeCAkY3VyX3ddCisJc2V0IHBvc195IFt3aW5mbyBwb2ludGVyeSAkY3VyX3ddCisJaWYge1t3aW5mbyBjb250YWluaW5nICRwb3NfeCAkcG9zX3ldIG5lICRjdXJfd30geworCQlfaGlkZV90b29sdGlwICR0aGlzCisJCXJldHVybgorCX0KKworCWlmIHskdG9vbHRpcF93bSBuZSAiJGN1cl93LnRvb2x0aXAifSB7CisJCV9oaWRlX3Rvb2x0aXAgJHRoaXMKKworCQlzZXQgdG9vbHRpcF93bSBbdG9wbGV2ZWwgJGN1cl93LnRvb2x0aXAgLWJvcmRlcndpZHRoIDFdCisJCWNhdGNoIHt3bSBhdHRyaWJ1dGVzICR0b29sdGlwX3dtIC10eXBlIHRvb2x0aXB9CisJCXdtIG92ZXJyaWRlcmVkaXJlY3QgJHRvb2x0aXBfd20gMQorCQl3bSB0cmFuc2llbnQgJHRvb2x0aXBfd20gW3dpbmZvIHRvcGxldmVsICRjdXJfd10KKwkJc2V0IHRvb2x0aXBfdCAkdG9vbHRpcF93bS5sYWJlbAorCQl0ZXh0ICR0b29sdGlwX3QgXAorCQkJLXRha2Vmb2N1cyAwIFwKKwkJCS1oaWdobGlnaHR0aGlja25lc3MgMCBcCisJCQktcmVsaWVmIGZsYXQgXAorCQkJLWJvcmRlcndpZHRoIDAgXAorCQkJLXdyYXAgbm9uZSBcCisJCQktYmFja2dyb3VuZCBsaWdodHllbGxvdyBcCisJCQktZm9yZWdyb3VuZCBibGFjaworCQkkdG9vbHRpcF90IHRhZyBjb25mIHNlY3Rpb25faGVhZGVyIC1mb250IGZvbnRfdWlib2xkCisJCXBhY2sgJHRvb2x0aXBfdAorCX0gZWxzZSB7CisJCSR0b29sdGlwX3QgY29uZiAtc3RhdGUgbm9ybWFsCisJCSR0b29sdGlwX3QgZGVsZXRlIDAuMCBlbmQKKwl9CisKKwlzZXQgcG9zIEBbam9pbiBbbGlzdCBcCisJCVtleHByIHskcG9zX3ggLSBbd2luZm8gcm9vdHggJGN1cl93XX1dIFwKKwkJW2V4cHIgeyRwb3NfeSAtIFt3aW5mbyByb290eSAkY3VyX3ddfV1dICxdCisJc2V0IGxubyBbbGluZGV4IFtzcGxpdCBbJGN1cl93IGluZGV4ICRwb3NdIC5dIDBdCisJaWYgeyRjdXJfdyBlcSAkd19hbW92fSB7CisJCXNldCBkYXQgW2xpbmRleCAkYW1vdl9kYXRhICRsbm9dCisJCXNldCBvcmcge30KKwl9IGVsc2UgeworCQlzZXQgZGF0IFtsaW5kZXggJGFzaW1fZGF0YSAkbG5vXQorCQlzZXQgb3JnIFtsaW5kZXggJGFtb3ZfZGF0YSAkbG5vXQorCX0KKworCWlmIHskZGF0IGVxIHt9fSB7CisJCV9oaWRlX3Rvb2x0aXAgJHRoaXMKKwkJcmV0dXJuCisJfQorCisJc2V0IGNtaXQgW2xpbmRleCAkZGF0IDBdCisJc2V0IHRvb2x0aXBfY29tbWl0IFtsaXN0ICRjbWl0XQorCisJc2V0IGF1dGhvcl9uYW1lIHt9CisJc2V0IHN1bW1hcnkgICAgIHt9CisJc2V0IGF1dGhvcl90aW1lIHt9CisJY2F0Y2gge3NldCBhdXRob3JfbmFtZSAkaGVhZGVyKCRjbWl0LGF1dGhvcil9CisJY2F0Y2gge3NldCBzdW1tYXJ5ICAgICAkaGVhZGVyKCRjbWl0LHN1bW1hcnkpfQorCWNhdGNoIHtzZXQgYXV0aG9yX3RpbWUgW2Zvcm1hdF9kYXRlICRoZWFkZXIoJGNtaXQsYXV0aG9yLXRpbWUpXX0KKworCSR0b29sdGlwX3QgaW5zZXJ0IGVuZCAiY29tbWl0ICRjbWl0XG4iCisJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICIkYXV0aG9yX25hbWUgICRhdXRob3JfdGltZVxuIgorCSR0b29sdGlwX3QgaW5zZXJ0IGVuZCAiJHN1bW1hcnkiCisKKwlpZiB7JG9yZyBuZSB7fSAmJiBbbGluZGV4ICRvcmcgMF0gbmUgJGNtaXR9IHsKKwkJc2V0IHNhdmUgWyR0b29sdGlwX3QgZ2V0IDAuMCBlbmRdCisJCSR0b29sdGlwX3QgZGVsZXRlIDAuMCBlbmQKKworCQlzZXQgY21pdCBbbGluZGV4ICRvcmcgMF0KKwkJc2V0IGZpbGUgW2xpbmRleCAkb3JnIDFdCisJCWxhcHBlbmQgdG9vbHRpcF9jb21taXQgJGNtaXQKKworCQlzZXQgYXV0aG9yX25hbWUge30KKwkJc2V0IHN1bW1hcnkgICAgIHt9CisJCXNldCBhdXRob3JfdGltZSB7fQorCQljYXRjaCB7c2V0IGF1dGhvcl9uYW1lICRoZWFkZXIoJGNtaXQsYXV0aG9yKX0KKwkJY2F0Y2gge3NldCBzdW1tYXJ5ICAgICAkaGVhZGVyKCRjbWl0LHN1bW1hcnkpfQorCQljYXRjaCB7c2V0IGF1dGhvcl90aW1lIFtmb3JtYXRfZGF0ZSAkaGVhZGVyKCRjbWl0LGF1dGhvci10aW1lKV19CisKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kIFtzdHJjYXQgW21jICJPcmlnaW5hbGx5IEJ5OiJdICJcbiJdIHNlY3Rpb25faGVhZGVyCisJCSR0b29sdGlwX3QgaW5zZXJ0IGVuZCAiY29tbWl0ICRjbWl0XG4iCisJCSR0b29sdGlwX3QgaW5zZXJ0IGVuZCAiJGF1dGhvcl9uYW1lICAkYXV0aG9yX3RpbWVcbiIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICIkc3VtbWFyeVxuIgorCisJCWlmIHskZmlsZSBuZSAkcGF0aH0geworCQkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kIFtzdHJjYXQgW21jICJJbiBGaWxlOiJdICIgIl0gc2VjdGlvbl9oZWFkZXIKKwkJCSR0b29sdGlwX3QgaW5zZXJ0IGVuZCAiJGZpbGVcbiIKKwkJfQorCisJCSR0b29sdGlwX3QgaW5zZXJ0IGVuZCAiXG4iCisJCSR0b29sdGlwX3QgaW5zZXJ0IGVuZCBbc3RyY2F0IFttYyAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6Il0gIlxuIl0gc2VjdGlvbl9oZWFkZXIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICRzYXZlCisJfQorCisJJHRvb2x0aXBfdCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCV9wb3NpdGlvbl90b29sdGlwICR0aGlzCisKKwkjIE9uIE1hY09TIHJhaXNpbmcgYSB3aW5kb3cgY2F1c2VzIGl0IHRvIGFjcXVpcmUgZm9jdXMuCisJIyBUayA4LjUgb24gTWFjT1Mgc2VlbXMgdG8gcHJvcGVybHkgc3VwcG9ydCB3bSB0cmFuc2llbnQsCisJIyBzbyB3ZSBjYW4gc2FmZWx5IGNvdW50ZXIgdGhlIGVmZmVjdCB0aGVyZS4KKwlpZiB7JDo6aGF2ZV90azg1ICYmIFtpc19NYWNPU1hdfSB7CisJCXVwZGF0ZQorCQlpZiB7JHcgZXEge319IHsKKwkJCXJhaXNlIC4KKwkJfSBlbHNlIHsKKwkJCXJhaXNlICR3CisJCX0KKwl9Cit9CisKK21ldGhvZCBfcG9zaXRpb25fdG9vbHRpcCB7fSB7CisJc2V0IG1heF9oIFtsaW5kZXggW3NwbGl0IFskdG9vbHRpcF90IGluZGV4IGVuZF0gLl0gMF0KKwlzZXQgbWF4X3cgMAorCWZvciB7c2V0IGkgMX0geyRpIDw9ICRtYXhfaH0ge2luY3IgaX0geworCQlzZXQgYyBbbGluZGV4IFtzcGxpdCBbJHRvb2x0aXBfdCBpbmRleCAiJGkuMCBsaW5lZW5kIl0gLl0gMV0KKwkJaWYgeyRjID4gJG1heF93fSB7c2V0IG1heF93ICRjfQorCX0KKwkkdG9vbHRpcF90IGNvbmYgLXdpZHRoICRtYXhfdyAtaGVpZ2h0ICRtYXhfaAorCisJc2V0IHJlcV93IFt3aW5mbyByZXF3aWR0aCAgJHRvb2x0aXBfdF0KKwlzZXQgcmVxX2ggW3dpbmZvIHJlcWhlaWdodCAkdG9vbHRpcF90XQorCXNldCBwb3NfeCBbZXhwciB7W3dpbmZvIHBvaW50ZXJ4IC5dICsgIDV9XQorCXNldCBwb3NfeSBbZXhwciB7W3dpbmZvIHBvaW50ZXJ5IC5dICsgMTB9XQorCisJc2V0IGcgIiR7cmVxX3d9eCR7cmVxX2h9IgorCWlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAid2luMzIiIHx8ICRwb3NfeCA+PSAwfSB7YXBwZW5kIGcgK30KKwlhcHBlbmQgZyAkcG9zX3gKKwlpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgIndpbjMyIiB8fCAkcG9zX3kgPj0gMH0ge2FwcGVuZCBnICt9CisJYXBwZW5kIGcgJHBvc195CisKKwl3bSBnZW9tZXRyeSAkdG9vbHRpcF93bSAkZworCWlmIHshW2lzX01hY09TWF19IHsKKwkJcmFpc2UgJHRvb2x0aXBfd20KKwl9Cit9CisKK21ldGhvZCBfaGlkZV90b29sdGlwIHt9IHsKKwlpZiB7JHRvb2x0aXBfd20gbmUge319IHsKKwkJZGVzdHJveSAkdG9vbHRpcF93bQorCQlzZXQgdG9vbHRpcF93bSB7fQorCQlzZXQgdG9vbHRpcF9jb21taXQge30KKwl9CisJaWYgeyR0b29sdGlwX3RpbWVyIG5lIHt9fSB7CisJCWFmdGVyIGNhbmNlbCAkdG9vbHRpcF90aW1lcgorCQlzZXQgdG9vbHRpcF90aW1lciB7fQorCX0KK30KKworbWV0aG9kIF9yZXNpemUge25ld19oZWlnaHR9IHsKKwlzZXQgZGlmZiBbZXhwciB7JG5ld19oZWlnaHQgLSAkb2xkX2hlaWdodH1dCisJaWYgeyRkaWZmID09IDB9IHJldHVybgorCisJc2V0IG15IFtleHByIHtbd2luZm8gaGVpZ2h0ICR3LmZpbGVfcGFuZV0gLSAyNX1dCisJc2V0IG8gWyR3LmZpbGVfcGFuZSBzYXNoIGNvb3JkIDBdCisJc2V0IG94IFtsaW5kZXggJG8gMF0KKwlzZXQgb3kgW2V4cHIge1tsaW5kZXggJG8gMV0gKyAkZGlmZn1dCisJaWYgeyRveSA8IDB9ICAge3NldCBveSAwfQorCWlmIHskb3kgPiAkbXl9IHtzZXQgb3kgJG15fQorCSR3LmZpbGVfcGFuZSBzYXNoIHBsYWNlIDAgJG94ICRveQorCisJc2V0IG9sZF9oZWlnaHQgJG5ld19oZWlnaHQKK30KKworbWV0aG9kIF9zaG93X2ZpbmRlciB7fSB7CisJbGluZWJhcjo6aGlkZSAkZ290b2xpbmUKKwlzZWFyY2hiYXI6OnNob3cgJGZpbmRlcgorfQorCittZXRob2QgX3Nob3dfbGluZWJhciB7fSB7CisJc2VhcmNoYmFyOjpoaWRlICRmaW5kZXIKKwlsaW5lYmFyOjpzaG93ICRnb3RvbGluZQorfQorCit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9icmFuY2gudGNsIGIvZ2l0LWd1aS9saWIvYnJhbmNoLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzdlZWI3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvYnJhbmNoLnRjbApAQCAtMCwwICsxLDM4IEBACisjIGdpdC1ndWkgYnJhbmNoIChjcmVhdGUvZGVsZXRlKSBzdXBwb3J0CisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTaGF3biBQZWFyY2UKKworcHJvYyBsb2FkX2FsbF9oZWFkcyB7fSB7CisJZ2xvYmFsIHNvbWVfaGVhZHNfdHJhY2tpbmcKKworCXNldCByaCByZWZzL2hlYWRzCisJc2V0IHJoX2xlbiBbZXhwciB7W3N0cmluZyBsZW5ndGggJHJoXSArIDF9XQorCXNldCBhbGxfaGVhZHMgW2xpc3RdCisJc2V0IGZkIFtnaXRfcmVhZCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JShyZWZuYW1lKSAkcmhdCisJd2hpbGUge1tnZXRzICRmZCBsaW5lXSA+IDB9IHsKKwkJaWYgeyEkc29tZV9oZWFkc190cmFja2luZyB8fCAhW2lzX3RyYWNraW5nX2JyYW5jaCAkbGluZV19IHsKKwkJCWxhcHBlbmQgYWxsX2hlYWRzIFtzdHJpbmcgcmFuZ2UgJGxpbmUgJHJoX2xlbiBlbmRdCisJCX0KKwl9CisJY2xvc2UgJGZkCisKKwlyZXR1cm4gW2xzb3J0ICRhbGxfaGVhZHNdCit9CisKK3Byb2MgbG9hZF9hbGxfdGFncyB7fSB7CisJc2V0IGFsbF90YWdzIFtsaXN0XQorCXNldCBmZCBbZ2l0X3JlYWQgZm9yLWVhY2gtcmVmIFwKKwkJLS1zb3J0PS10YWdnZXJkYXRlIFwKKwkJLS1mb3JtYXQ9JShyZWZuYW1lKSBcCisJCXJlZnMvdGFnc10KKwl3aGlsZSB7W2dldHMgJGZkIGxpbmVdID4gMH0geworCQlpZiB7IVtyZWdzdWIgXnJlZnMvdGFncy8gJGxpbmUge30gbmFtZV19IGNvbnRpbnVlCisJCWxhcHBlbmQgYWxsX3RhZ3MgJG5hbWUKKwl9CisJY2xvc2UgJGZkCisJcmV0dXJuICRhbGxfdGFncworfQorCitwcm9jIHJhZGlvX3NlbGVjdG9yIHt2YXJuYW1lIHZhbHVlIGFyZ3N9IHsKKwl1cHZhciAjMCAkdmFybmFtZSB2YXIKKwlzZXQgdmFyICR2YWx1ZQorfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvYnJhbmNoX2NoZWNrb3V0LnRjbCBiL2dpdC1ndWkvbGliL2JyYW5jaF9jaGVja291dC50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0NTlhOAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL2JyYW5jaF9jaGVja291dC50Y2wKQEAgLTAsMCArMSw5MyBAQAorIyBnaXQtZ3VpIGJyYW5jaCBjaGVja291dCBzdXBwb3J0CisjIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UKKworY2xhc3MgYnJhbmNoX2NoZWNrb3V0IHsKKworZmllbGQgdyAgICAgICAgICAgICAgOyAjIHdpZGdldCBwYXRoCitmaWVsZCB3X3JldiAgICAgICAgICA7ICMgbWVnYS13aWRnZXQgdG8gcGljayB0aGUgaW5pdGlhbCByZXZpc2lvbgorCitmaWVsZCBvcHRfZmV0Y2ggICAgIDE7ICMgcmVmZXRjaCB0cmFja2luZyBicmFuY2ggaWYgdXNlZD8KK2ZpZWxkIG9wdF9kZXRhY2ggICAgMDsgIyBmb3JjZSBhIGRldGFjaGVkIGhlYWQgY2FzZT8KKworY29uc3RydWN0b3IgZGlhbG9nIHt9IHsKKwlnbG9iYWwgdXNlX3R0ayBOUworCW1ha2VfZGlhbG9nIHRvcCB3CisJd20gd2l0aGRyYXcgJHcKKwl3bSB0aXRsZSAkdG9wIFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJDaGVja291dCBCcmFuY2giXV0KKwlpZiB7JHRvcCBuZSB7Ln19IHsKKwkJd20gZ2VvbWV0cnkgJHRvcCAiK1t3aW5mbyByb290eCAuXStbd2luZm8gcm9vdHkgLl0iCisJfQorCisJJHtOU306OmxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIkNoZWNrb3V0IEJyYW5jaCJdIFwKKwkJLWZvbnQgZm9udF91aWJvbGQgLWFuY2hvciBjZW50ZXIKKwlwYWNrICR3LmhlYWRlciAtc2lkZSB0b3AgLWZpbGwgeAorCisJJHtOU306OmZyYW1lICR3LmJ1dHRvbnMKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY3JlYXRlIC10ZXh0IFttYyBDaGVja291dF0gXAorCQktZGVmYXVsdCBhY3RpdmUgXAorCQktY29tbWFuZCBbY2IgX2NoZWNrb3V0XQorCXBhY2sgJHcuYnV0dG9ucy5jcmVhdGUgLXNpZGUgcmlnaHQKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIFwKKwkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KKwlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKKwlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKKworCXNldCB3X3JldiBbOjpjaG9vc2VfcmV2OjpuZXcgJHcucmV2IFttYyBSZXZpc2lvbl1dCisJJHdfcmV2IGJpbmRfbGlzdGJveCA8RG91YmxlLUJ1dHRvbi0xPiBbY2IgX2NoZWNrb3V0XQorCXBhY2sgJHcucmV2IC1hbmNob3IgbncgLWZpbGwgYm90aCAtZXhwYW5kIDEgLXBhZHkgNSAtcGFkeCA1CisKKwkke05TfTo6bGFiZWxmcmFtZSAkdy5vcHRpb25zIC10ZXh0IFttYyBPcHRpb25zXQorCisJJHtOU306OmNoZWNrYnV0dG9uICR3Lm9wdGlvbnMuZmV0Y2ggXAorCQktdGV4dCBbbWMgIkZldGNoIFRyYWNraW5nIEJyYW5jaCJdIFwKKwkJLXZhcmlhYmxlIEBvcHRfZmV0Y2gKKwlwYWNrICR3Lm9wdGlvbnMuZmV0Y2ggLWFuY2hvciBudworCisJJHtOU306OmNoZWNrYnV0dG9uICR3Lm9wdGlvbnMuZGV0YWNoIFwKKwkJLXRleHQgW21jICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giXSBcCisJCS12YXJpYWJsZSBAb3B0X2RldGFjaAorCXBhY2sgJHcub3B0aW9ucy5kZXRhY2ggLWFuY2hvciBudworCisJcGFjayAkdy5vcHRpb25zIC1hbmNob3IgbncgLWZpbGwgeCAtcGFkeSA1IC1wYWR4IDUKKworCWJpbmQgJHcgPFZpc2liaWxpdHk+IFtjYiBfdmlzaWJsZV0KKwliaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQorCWJpbmQgJHcgPEtleS1SZXR1cm4+IFtjYiBfY2hlY2tvdXRdXDticmVhaworCXdtIGRlaWNvbmlmeSAkdworCXRrd2FpdCB3aW5kb3cgJHcKK30KKworbWV0aG9kIF9jaGVja291dCB7fSB7CisJc2V0IHNwZWMgWyR3X3JldiBnZXRfdHJhY2tpbmdfYnJhbmNoXQorCWlmIHskc3BlYyBuZSB7fSAmJiAkb3B0X2ZldGNofSB7CisJCXNldCBuZXcge30KKwl9IGVsc2VpZiB7W2NhdGNoIHtzZXQgbmV3IFskd19yZXYgY29tbWl0X29yX2RpZV19XX0geworCQlyZXR1cm4KKwl9CisKKwlpZiB7JG9wdF9kZXRhY2h9IHsKKwkJc2V0IHJlZiB7fQorCX0gZWxzZSB7CisJCXNldCByZWYgWyR3X3JldiBnZXRfbG9jYWxfYnJhbmNoXQorCX0KKworCXNldCBjbyBbOjpjaGVja291dF9vcDo6bmV3IFskd19yZXYgZ2V0XSAkbmV3ICRyZWZdCisJJGNvIHBhcmVudCAkdworCSRjbyBlbmFibGVfY2hlY2tvdXQgMQorCWlmIHskc3BlYyBuZSB7fSAmJiAkb3B0X2ZldGNofSB7CisJCSRjbyBlbmFibGVfZmV0Y2ggJHNwZWMKKwl9CisKKwlpZiB7WyRjbyBydW5dfSB7CisJCWRlc3Ryb3kgJHcKKwl9IGVsc2UgeworCQkkd19yZXYgZm9jdXNfZmlsdGVyCisJfQorfQorCittZXRob2QgX3Zpc2libGUge30geworCWdyYWIgJHcKKwkkd19yZXYgZm9jdXNfZmlsdGVyCit9CisKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2JyYW5jaF9jcmVhdGUudGNsIGIvZ2l0LWd1aS9saWIvYnJhbmNoX2NyZWF0ZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJiOTA3NwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL2JyYW5jaF9jcmVhdGUudGNsCkBAIC0wLDAgKzEsMjI0IEBACisjIGdpdC1ndWkgYnJhbmNoIGNyZWF0ZSBzdXBwb3J0CisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTaGF3biBQZWFyY2UKKworY2xhc3MgYnJhbmNoX2NyZWF0ZSB7CisKK2ZpZWxkIHcgICAgICAgICAgICAgIDsgIyB3aWRnZXQgcGF0aAorZmllbGQgd19yZXYgICAgICAgICAgOyAjIG1lZ2Etd2lkZ2V0IHRvIHBpY2sgdGhlIGluaXRpYWwgcmV2aXNpb24KK2ZpZWxkIHdfbmFtZSAgICAgICAgIDsgIyBuZXcgYnJhbmNoIG5hbWUgd2lkZ2V0CisKK2ZpZWxkIG5hbWUgICAgICAgICB7fTsgIyBuYW1lIG9mIHRoZSBicmFuY2ggdGhlIHVzZXIgaGFzIGNob3NlbgorZmllbGQgbmFtZV90eXBlICB1c2VyOyAjIHR5cGUgb2YgYnJhbmNoIG5hbWUgdG8gdXNlCisKK2ZpZWxkIG9wdF9tZXJnZSAgICBmZjsgIyB0eXBlIG9mIG1lcmdlIHRvIGFwcGx5IHRvIGV4aXN0aW5nIGJyYW5jaAorZmllbGQgb3B0X2NoZWNrb3V0ICAxOyAjIGF1dG9tYXRpY2FsbHkgY2hlY2tvdXQgdGhlIG5ldyBicmFuY2g/CitmaWVsZCBvcHRfZmV0Y2ggICAgIDE7ICMgcmVmZXRjaCB0cmFja2luZyBicmFuY2ggaWYgdXNlZD8KK2ZpZWxkIHJlc2V0X29rICAgICAgMDsgIyBkaWQgdGhlIHVzZXIgYWdyZWUgdG8gcmVzZXQ/CisKK2NvbnN0cnVjdG9yIGRpYWxvZyB7fSB7CisJZ2xvYmFsIHJlcG9fY29uZmlnIHVzZV90dGsgTlMKKworCW1ha2VfZGlhbG9nIHRvcCB3CisJd20gd2l0aGRyYXcgJHcKKwl3bSB0aXRsZSAkdG9wIFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJDcmVhdGUgQnJhbmNoIl1dCisJaWYgeyR0b3AgbmUgey59fSB7CisJCXdtIGdlb21ldHJ5ICR0b3AgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgorCX0KKworCSR7TlN9OjpsYWJlbCAkdy5oZWFkZXIgLXRleHQgW21jICJDcmVhdGUgTmV3IEJyYW5jaCJdIFwKKwkJLWZvbnQgZm9udF91aWJvbGQgLWFuY2hvciBjZW50ZXIKKwlwYWNrICR3LmhlYWRlciAtc2lkZSB0b3AgLWZpbGwgeAorCisJJHtOU306OmZyYW1lICR3LmJ1dHRvbnMKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY3JlYXRlIC10ZXh0IFttYyBDcmVhdGVdIFwKKwkJLWRlZmF1bHQgYWN0aXZlIFwKKwkJLWNvbW1hbmQgW2NiIF9jcmVhdGVdCisJcGFjayAkdy5idXR0b25zLmNyZWF0ZSAtc2lkZSByaWdodAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gXAorCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQorCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQorCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAorCisJJHtOU306OmxhYmVsZnJhbWUgJHcuZGVzYyAtdGV4dCBbbWMgIkJyYW5jaCBOYW1lIl0KKwkke05TfTo6cmFkaW9idXR0b24gJHcuZGVzYy5uYW1lX3IgXAorCQktdGV4dCBbbWMgIk5hbWU6Il0gXAorCQktdmFsdWUgdXNlciBcCisJCS12YXJpYWJsZSBAbmFtZV90eXBlCisJaWYgeyEkdXNlX3R0a30geyR3LmRlc2MubmFtZV9yIGNvbmZpZ3VyZSAtYW5jaG9yIHd9CisJc2V0IHdfbmFtZSAkdy5kZXNjLm5hbWVfdAorCSR7TlN9OjplbnRyeSAkd19uYW1lIFwKKwkJLXdpZHRoIDQwIFwKKwkJLXRleHR2YXJpYWJsZSBAbmFtZSBcCisJCS12YWxpZGF0ZSBrZXkgXAorCQktdmFsaWRhdGVjb21tYW5kIFtjYiBfdmFsaWRhdGUgJWQgJVNdCisJZ3JpZCAkdy5kZXNjLm5hbWVfciAkd19uYW1lIC1zdGlja3kgd2UgLXBhZHggezAgNX0KKworCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5kZXNjLm1hdGNoX3IgXAorCQktdGV4dCBbbWMgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIl0gXAorCQktdmFsdWUgbWF0Y2ggXAorCQktdmFyaWFibGUgQG5hbWVfdHlwZQorCWlmIHshJHVzZV90dGt9IHskdy5kZXNjLm1hdGNoX3IgY29uZmlndXJlIC1hbmNob3Igd30KKwlncmlkICR3LmRlc2MubWF0Y2hfciAtc3RpY2t5IHdlIC1wYWR4IHswIDV9IC1jb2x1bW5zcGFuIDIKKworCWdyaWQgY29sdW1uY29uZmlndXJlICR3LmRlc2MgMSAtd2VpZ2h0IDEKKwlwYWNrICR3LmRlc2MgLWFuY2hvciBudyAtZmlsbCB4IC1wYWR5IDUgLXBhZHggNQorCisJc2V0IHdfcmV2IFs6OmNob29zZV9yZXY6Om5ldyAkdy5yZXYgW21jICJTdGFydGluZyBSZXZpc2lvbiJdXQorCXBhY2sgJHcucmV2IC1hbmNob3IgbncgLWZpbGwgYm90aCAtZXhwYW5kIDEgLXBhZHkgNSAtcGFkeCA1CisKKwkke05TfTo6bGFiZWxmcmFtZSAkdy5vcHRpb25zIC10ZXh0IFttYyBPcHRpb25zXQorCisJJHtOU306OmZyYW1lICR3Lm9wdGlvbnMubWVyZ2UKKwkke05TfTo6bGFiZWwgJHcub3B0aW9ucy5tZXJnZS5sIC10ZXh0IFttYyAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiXQorCXBhY2sgJHcub3B0aW9ucy5tZXJnZS5sIC1zaWRlIGxlZnQKKwkke05TfTo6cmFkaW9idXR0b24gJHcub3B0aW9ucy5tZXJnZS5ubyBcCisJCS10ZXh0IFttYyBOb10gXAorCQktdmFsdWUgbm9uZSBcCisJCS12YXJpYWJsZSBAb3B0X21lcmdlCisJcGFjayAkdy5vcHRpb25zLm1lcmdlLm5vIC1zaWRlIGxlZnQKKwkke05TfTo6cmFkaW9idXR0b24gJHcub3B0aW9ucy5tZXJnZS5mZiBcCisJCS10ZXh0IFttYyAiRmFzdCBGb3J3YXJkIE9ubHkiXSBcCisJCS12YWx1ZSBmZiBcCisJCS12YXJpYWJsZSBAb3B0X21lcmdlCisJcGFjayAkdy5vcHRpb25zLm1lcmdlLmZmIC1zaWRlIGxlZnQKKwkke05TfTo6cmFkaW9idXR0b24gJHcub3B0aW9ucy5tZXJnZS5yZXNldCBcCisJCS10ZXh0IFttYyBSZXNldF0gXAorCQktdmFsdWUgcmVzZXQgXAorCQktdmFyaWFibGUgQG9wdF9tZXJnZQorCXBhY2sgJHcub3B0aW9ucy5tZXJnZS5yZXNldCAtc2lkZSBsZWZ0CisJcGFjayAkdy5vcHRpb25zLm1lcmdlIC1hbmNob3IgbncKKworCSR7TlN9OjpjaGVja2J1dHRvbiAkdy5vcHRpb25zLmZldGNoIFwKKwkJLXRleHQgW21jICJGZXRjaCBUcmFja2luZyBCcmFuY2giXSBcCisJCS12YXJpYWJsZSBAb3B0X2ZldGNoCisJcGFjayAkdy5vcHRpb25zLmZldGNoIC1hbmNob3IgbncKKworCSR7TlN9OjpjaGVja2J1dHRvbiAkdy5vcHRpb25zLmNoZWNrb3V0IFwKKwkJLXRleHQgW21jICJDaGVja291dCBBZnRlciBDcmVhdGlvbiJdIFwKKwkJLXZhcmlhYmxlIEBvcHRfY2hlY2tvdXQKKwlwYWNrICR3Lm9wdGlvbnMuY2hlY2tvdXQgLWFuY2hvciBudworCXBhY2sgJHcub3B0aW9ucyAtYW5jaG9yIG53IC1maWxsIHggLXBhZHkgNSAtcGFkeCA1CisKKwl0cmFjZSBhZGQgdmFyaWFibGUgQG5hbWVfdHlwZSB3cml0ZSBbY2IgX3NlbGVjdF0KKworCXNldCBuYW1lICRyZXBvX2NvbmZpZyhndWkubmV3YnJhbmNodGVtcGxhdGUpCisJaWYge1tpc19jb25maWdfdHJ1ZSBndWkubWF0Y2h0cmFja2luZ2JyYW5jaF19IHsKKwkJc2V0IG5hbWVfdHlwZSBtYXRjaAorCX0KKworCWJpbmQgJHcgPFZpc2liaWxpdHk+IFtjYiBfdmlzaWJsZV0KKwliaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQorCWJpbmQgJHcgPEtleS1SZXR1cm4+IFtjYiBfY3JlYXRlXVw7YnJlYWsKKwl3bSBkZWljb25pZnkgJHcKKwl0a3dhaXQgd2luZG93ICR3Cit9CisKK21ldGhvZCBfY3JlYXRlIHt9IHsKKwlnbG9iYWwgcmVwb19jb25maWcKKwlnbG9iYWwgTTFCCisKKwlzZXQgc3BlYyBbJHdfcmV2IGdldF90cmFja2luZ19icmFuY2hdCisJc3dpdGNoIC0tICRuYW1lX3R5cGUgeworCXVzZXIgeworCQlzZXQgbmV3YnJhbmNoICRuYW1lCisJfQorCW1hdGNoIHsKKwkJaWYgeyRzcGVjIGVxIHt9fSB7CisJCQl0a19tZXNzYWdlQm94IFwKKwkJCQktaWNvbiBlcnJvciBcCisJCQkJLXR5cGUgb2sgXAorCQkJCS10aXRsZSBbd20gdGl0bGUgJHddIFwKKwkJCQktcGFyZW50ICR3IFwKKwkJCQktbWVzc2FnZSBbbWMgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIl0KKwkJCXJldHVybgorCQl9CisJCWlmIHshW3JlZ3N1YiBecmVmcy9oZWFkcy8gW2xpbmRleCAkc3BlYyAyXSB7fSBuZXdicmFuY2hdfSB7CisJCQl0a19tZXNzYWdlQm94IFwKKwkJCQktaWNvbiBlcnJvciBcCisJCQkJLXR5cGUgb2sgXAorCQkJCS10aXRsZSBbd20gdGl0bGUgJHddIFwKKwkJCQktcGFyZW50ICR3IFwKKwkJCQktbWVzc2FnZSBbbWMgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIgWyR3IGdldF1dCisJCQlyZXR1cm4KKwkJfQorCX0KKwl9CisKKwlpZiB7JG5ld2JyYW5jaCBlcSB7fQorCQl8fCAkbmV3YnJhbmNoIGVxICRyZXBvX2NvbmZpZyhndWkubmV3YnJhbmNodGVtcGxhdGUpfSB7CisJCXRrX21lc3NhZ2VCb3ggXAorCQkJLWljb24gZXJyb3IgXAorCQkJLXR5cGUgb2sgXAorCQkJLXRpdGxlIFt3bSB0aXRsZSAkd10gXAorCQkJLXBhcmVudCAkdyBcCisJCQktbWVzc2FnZSBbbWMgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iXQorCQlmb2N1cyAkd19uYW1lCisJCXJldHVybgorCX0KKworCWlmIHtbY2F0Y2gge2dpdCBjaGVjay1yZWYtZm9ybWF0ICJoZWFkcy8kbmV3YnJhbmNoIn1dfSB7CisJCXRrX21lc3NhZ2VCb3ggXAorCQkJLWljb24gZXJyb3IgXAorCQkJLXR5cGUgb2sgXAorCQkJLXRpdGxlIFt3bSB0aXRsZSAkd10gXAorCQkJLXBhcmVudCAkdyBcCisJCQktbWVzc2FnZSBbbWMgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIiAkbmV3YnJhbmNoXQorCQlmb2N1cyAkd19uYW1lCisJCXJldHVybgorCX0KKworCWlmIHskc3BlYyBuZSB7fSAmJiAkb3B0X2ZldGNofSB7CisJCXNldCBuZXcge30KKwl9IGVsc2VpZiB7W2NhdGNoIHtzZXQgbmV3IFskd19yZXYgY29tbWl0X29yX2RpZV19XX0geworCQlyZXR1cm4KKwl9CisKKwlzZXQgY28gWzo6Y2hlY2tvdXRfb3A6Om5ldyBcCisJCVskd19yZXYgZ2V0XSBcCisJCSRuZXcgXAorCQlyZWZzL2hlYWRzLyRuZXdicmFuY2hdCisJJGNvIHBhcmVudCAkdworCSRjbyBlbmFibGVfY3JlYXRlICAgMQorCSRjbyBlbmFibGVfbWVyZ2UgICAgJG9wdF9tZXJnZQorCSRjbyBlbmFibGVfY2hlY2tvdXQgJG9wdF9jaGVja291dAorCWlmIHskc3BlYyBuZSB7fSAmJiAkb3B0X2ZldGNofSB7CisJCSRjbyBlbmFibGVfZmV0Y2ggJHNwZWMKKwl9CisJaWYgeyRzcGVjIG5lIHt9fSB7CisJCSRjbyByZW1vdGVfc291cmNlICRzcGVjCisJfQorCisJaWYge1skY28gcnVuXX0geworCQlkZXN0cm95ICR3CisJfSBlbHNlIHsKKwkJZm9jdXMgJHdfbmFtZQorCX0KK30KKworbWV0aG9kIF92YWxpZGF0ZSB7ZCBTfSB7CisJaWYgeyRkID09IDF9IHsKKwkJaWYge1tyZWdleHAge1t+Xjo/KlxbXDAtIF19ICRTXX0geworCQkJcmV0dXJuIDAKKwkJfQorCQlpZiB7W3N0cmluZyBsZW5ndGggJFNdID4gMH0geworCQkJc2V0IG5hbWVfdHlwZSB1c2VyCisJCX0KKwl9CisJcmV0dXJuIDEKK30KKworbWV0aG9kIF9zZWxlY3Qge2FyZ3N9IHsKKwlpZiB7JG5hbWVfdHlwZSBlcSB7bWF0Y2h9fSB7CisJCSR3X3JldiBwaWNrX3RyYWNraW5nX2JyYW5jaAorCX0KK30KKworbWV0aG9kIF92aXNpYmxlIHt9IHsKKwlncmFiICR3CisJaWYgeyRuYW1lX3R5cGUgZXEge3VzZXJ9fSB7CisJCSR3X25hbWUgaWN1cnNvciBlbmQKKwkJZm9jdXMgJHdfbmFtZQorCX0KK30KKworfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvYnJhbmNoX2RlbGV0ZS50Y2wgYi9naXQtZ3VpL2xpYi9icmFuY2hfZGVsZXRlLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Njc5MzhlCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvYnJhbmNoX2RlbGV0ZS50Y2wKQEAgLTAsMCArMSwxNDcgQEAKKyMgZ2l0LWd1aSBicmFuY2ggZGVsZXRlIHN1cHBvcnQKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQorCitjbGFzcyBicmFuY2hfZGVsZXRlIHsKKworZmllbGQgdyAgICAgICAgICAgICAgIDsgIyB3aWRnZXQgcGF0aAorZmllbGQgd19oZWFkcyAgICAgICAgIDsgIyBsaXN0Ym94IG9mIGxvY2FsIGhlYWQgbmFtZXMKK2ZpZWxkIHdfY2hlY2sgICAgICAgICA7ICMgcmV2aXNpb24gcGlja2VyIGZvciBtZXJnZSB0ZXN0CitmaWVsZCB3X2RlbGV0ZSAgICAgICAgOyAjIGRlbGV0ZSBidXR0b24KKworY29uc3RydWN0b3IgZGlhbG9nIHt9IHsKKwlnbG9iYWwgY3VycmVudF9icmFuY2ggdXNlX3R0ayBOUworCisJbWFrZV9kaWFsb2cgdG9wIHcKKwl3bSB3aXRoZHJhdyAkdworCXdtIHRpdGxlICR0b3AgW2FwcGVuZCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogIiBbbWMgIkRlbGV0ZSBCcmFuY2giXV0KKwlpZiB7JHRvcCBuZSB7Ln19IHsKKwkJd20gZ2VvbWV0cnkgJHRvcCAiK1t3aW5mbyByb290eCAuXStbd2luZm8gcm9vdHkgLl0iCisJfQorCisJJHtOU306OmxhYmVsICR3LmhlYWRlciAtdGV4dCBbbWMgIkRlbGV0ZSBMb2NhbCBCcmFuY2giXSBcCisJCS1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyCisJcGFjayAkdy5oZWFkZXIgLXNpZGUgdG9wIC1maWxsIHgKKworCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJc2V0IHdfZGVsZXRlICR3LmJ1dHRvbnMuZGVsZXRlCisJJHtOU306OmJ1dHRvbiAkd19kZWxldGUgXAorCQktdGV4dCBbbWMgRGVsZXRlXSBcCisJCS1kZWZhdWx0IGFjdGl2ZSBcCisJCS1zdGF0ZSBkaXNhYmxlZCBcCisJCS1jb21tYW5kIFtjYiBfZGVsZXRlXQorCXBhY2sgJHdfZGVsZXRlIC1zaWRlIHJpZ2h0CisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCBcCisJCS10ZXh0IFttYyBDYW5jZWxdIFwKKwkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KKwlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKKwlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKKworCSR7TlN9OjpsYWJlbGZyYW1lICR3Lmxpc3QgLXRleHQgW21jICJMb2NhbCBCcmFuY2hlcyJdCisJc2V0IHdfaGVhZHMgJHcubGlzdC5sCisJc2xpc3Rib3ggJHdfaGVhZHMgXAorCQktaGVpZ2h0IDEwIFwKKwkJLXdpZHRoIDcwIFwKKwkJLXNlbGVjdG1vZGUgZXh0ZW5kZWQgXAorCQktZXhwb3J0c2VsZWN0aW9uIGZhbHNlCisJcGFjayAkdy5saXN0LmwgLXNpZGUgbGVmdCAtZmlsbCBib3RoIC1leHBhbmQgMQorCXBhY2sgJHcubGlzdCAtZmlsbCBib3RoIC1leHBhbmQgMSAtcGFkeSA1IC1wYWR4IDUKKworCXNldCB3X2NoZWNrIFtjaG9vc2VfcmV2OjpuZXcgXAorCQkkdy5jaGVjayBcCisJCVttYyAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iXSBcCisJCV0KKwkkd19jaGVjayBub25lIFttYyAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIl0KKwlwYWNrICR3LmNoZWNrIC1hbmNob3IgbncgLWZpbGwgeCAtcGFkeSA1IC1wYWR4IDUKKworCWZvcmVhY2ggaCBbbG9hZF9hbGxfaGVhZHNdIHsKKwkJaWYgeyRoIG5lICRjdXJyZW50X2JyYW5jaH0geworCQkJJHdfaGVhZHMgaW5zZXJ0IGVuZCAkaAorCQl9CisJfQorCisJYmluZCAkd19oZWFkcyA8PExpc3Rib3hTZWxlY3Q+PiBbY2IgX3NlbGVjdF0KKwliaW5kICR3IDxWaXNpYmlsaXR5PiAiCisJCWdyYWIgJHcKKwkJZm9jdXMgJHcKKwkiCisJYmluZCAkdyA8S2V5LUVzY2FwZT4gW2xpc3QgZGVzdHJveSAkd10KKwliaW5kICR3IDxLZXktUmV0dXJuPiBbY2IgX2RlbGV0ZV1cO2JyZWFrCisJd20gZGVpY29uaWZ5ICR3CisJdGt3YWl0IHdpbmRvdyAkdworfQorCittZXRob2QgX3NlbGVjdCB7fSB7CisJaWYge1skd19oZWFkcyBjdXJzZWxlY3Rpb25dIGVxIHt9fSB7CisJCSR3X2RlbGV0ZSBjb25maWd1cmUgLXN0YXRlIGRpc2FibGVkCisJfSBlbHNlIHsKKwkJJHdfZGVsZXRlIGNvbmZpZ3VyZSAtc3RhdGUgbm9ybWFsCisJfQorfQorCittZXRob2QgX2RlbGV0ZSB7fSB7CisJaWYge1tjYXRjaCB7c2V0IGNoZWNrX2NtdCBbJHdfY2hlY2sgY29tbWl0X29yX2RpZV19XX0geworCQlyZXR1cm4KKwl9CisKKwlzZXQgdG9fZGVsZXRlIFtsaXN0XQorCXNldCBub3RfbWVyZ2VkIFtsaXN0XQorCWZvcmVhY2ggaSBbJHdfaGVhZHMgY3Vyc2VsZWN0aW9uXSB7CisJCXNldCBiIFskd19oZWFkcyBnZXQgJGldCisJCWlmIHtbY2F0Y2ggeworCQkJc2V0IG8gW2dpdCByZXYtcGFyc2UgLS12ZXJpZnkgInJlZnMvaGVhZHMvJGIiXQorCQl9XX0gY29udGludWUKKwkJaWYgeyRjaGVja19jbXQgbmUge319IHsKKwkJCWlmIHtbY2F0Y2gge3NldCBtIFtnaXQgbWVyZ2UtYmFzZSAkbyAkY2hlY2tfY210XX1dfSBjb250aW51ZQorCQkJaWYgeyRvIG5lICRtfSB7CisJCQkJbGFwcGVuZCBub3RfbWVyZ2VkICRiCisJCQkJY29udGludWUKKwkJCX0KKwkJfQorCQlsYXBwZW5kIHRvX2RlbGV0ZSBbbGlzdCAkYiAkb10KKwl9CisJaWYgeyRub3RfbWVyZ2VkIG5lIHt9fSB7CisJCXNldCBtc2cgIlttYyAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IiBbJHdfY2hlY2sgZ2V0XV0KKworIC0gW2pvaW4gJG5vdF9tZXJnZWQgIlxuIC0gIl0iCisJCXRrX21lc3NhZ2VCb3ggXAorCQkJLWljb24gaW5mbyBcCisJCQktdHlwZSBvayBcCisJCQktdGl0bGUgW3dtIHRpdGxlICR3XSBcCisJCQktcGFyZW50ICR3IFwKKwkJCS1tZXNzYWdlICRtc2cKKwl9CisJaWYgeyR0b19kZWxldGUgZXEge319IHJldHVybgorCWlmIHskY2hlY2tfY210IGVxIHt9fSB7CisJCXNldCBtc2cgW21jICJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuXG5EZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyJdCisJCWlmIHtbdGtfbWVzc2FnZUJveCBcCisJCQktaWNvbiB3YXJuaW5nIFwKKwkJCS10eXBlIHllc25vIFwKKwkJCS10aXRsZSBbd20gdGl0bGUgJHddIFwKKwkJCS1wYXJlbnQgJHcgXAorCQkJLW1lc3NhZ2UgJG1zZ10gbmUgeWVzfSB7CisJCQlyZXR1cm4KKwkJfQorCX0KKworCXNldCBmYWlsZWQge30KKwlmb3JlYWNoIGkgJHRvX2RlbGV0ZSB7CisJCXNldCBiIFtsaW5kZXggJGkgMF0KKwkJc2V0IG8gW2xpbmRleCAkaSAxXQorCQlpZiB7W2NhdGNoIHtnaXQgYnJhbmNoIC1EICRifSBlcnJdfSB7CisJCQlhcHBlbmQgZmFpbGVkICIgLSAkYjogJGVyclxuIgorCQl9CisJfQorCisJaWYgeyRmYWlsZWQgbmUge319IHsKKwkJdGtfbWVzc2FnZUJveCBcCisJCQktaWNvbiBlcnJvciBcCisJCQktdHlwZSBvayBcCisJCQktdGl0bGUgW3dtIHRpdGxlICR3XSBcCisJCQktcGFyZW50ICR3IFwKKwkJCS1tZXNzYWdlIFttYyAiRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiVzIiAkZmFpbGVkXQorCX0KKworCWRlc3Ryb3kgJHcKK30KKworfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvYnJhbmNoX3JlbmFtZS50Y2wgYi9naXQtZ3VpL2xpYi9icmFuY2hfcmVuYW1lLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTUxMGVjCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvYnJhbmNoX3JlbmFtZS50Y2wKQEAgLTAsMCArMSwxMzQgQEAKKyMgZ2l0LWd1aSBicmFuY2ggcmVuYW1lIHN1cHBvcnQKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQorCitjbGFzcyBicmFuY2hfcmVuYW1lIHsKKworZmllbGQgdworZmllbGQgb2xkbmFtZQorZmllbGQgbmV3bmFtZQorCitjb25zdHJ1Y3RvciBkaWFsb2cge30geworCWdsb2JhbCBjdXJyZW50X2JyYW5jaCB1c2VfdHRrIE5TCisKKwltYWtlX2RpYWxvZyB0b3AgdworCXdtIHdpdGhkcmF3ICR3CisJd20gdGl0bGUgJHRvcCBbYXBwZW5kICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiUmVuYW1lIEJyYW5jaCJdXQorCWlmIHskdG9wIG5lIHsufX0geworCQl3bSBnZW9tZXRyeSAkdG9wICIrW3dpbmZvIHJvb3R4IC5dK1t3aW5mbyByb290eSAuXSIKKwl9CisKKwlzZXQgb2xkbmFtZSAkY3VycmVudF9icmFuY2gKKwlzZXQgbmV3bmFtZSBbZ2V0X2NvbmZpZyBndWkubmV3YnJhbmNodGVtcGxhdGVdCisKKwkke05TfTo6bGFiZWwgJHcuaGVhZGVyIC10ZXh0IFttYyAiUmVuYW1lIEJyYW5jaCJdXAorCQktZm9udCBmb250X3VpYm9sZCAtYW5jaG9yIGNlbnRlcgorCXBhY2sgJHcuaGVhZGVyIC1zaWRlIHRvcCAtZmlsbCB4CisKKwkke05TfTo6ZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5yZW5hbWUgLXRleHQgW21jIFJlbmFtZV0gXAorCQktZGVmYXVsdCBhY3RpdmUgXAorCQktY29tbWFuZCBbY2IgX3JlbmFtZV0KKwlwYWNrICR3LmJ1dHRvbnMucmVuYW1lIC1zaWRlIHJpZ2h0CisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCAtdGV4dCBbbWMgQ2FuY2VsXSBcCisJCS1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHddCisJcGFjayAkdy5idXR0b25zLmNhbmNlbCAtc2lkZSByaWdodCAtcGFkeCA1CisJcGFjayAkdy5idXR0b25zIC1zaWRlIGJvdHRvbSAtZmlsbCB4IC1wYWR5IDEwIC1wYWR4IDEwCisKKwkke05TfTo6ZnJhbWUgJHcucmVuYW1lCisJJHtOU306OmxhYmVsICR3LnJlbmFtZS5vbGRuYW1lX2wgLXRleHQgW21jICJCcmFuY2g6Il0KKwlpZiB7JHVzZV90dGt9IHsKKwkJdHRrOjpjb21ib2JveCAkdy5yZW5hbWUub2xkbmFtZV9tIC10ZXh0dmFyaWFibGUgQG9sZG5hbWUgXAorCQkJLXZhbHVlcyBbbG9hZF9hbGxfaGVhZHNdIC1zdGF0ZSByZWFkb25seQorCX0gZWxzZSB7CisJCWV2YWwgdGtfb3B0aW9uTWVudSAkdy5yZW5hbWUub2xkbmFtZV9tIEBvbGRuYW1lIFtsb2FkX2FsbF9oZWFkc10KKwl9CisKKwkke05TfTo6bGFiZWwgJHcucmVuYW1lLm5ld25hbWVfbCAtdGV4dCBbbWMgIk5ldyBOYW1lOiJdCisJJHtOU306OmVudHJ5ICR3LnJlbmFtZS5uZXduYW1lX3QgXAorCQktd2lkdGggNDAgXAorCQktdGV4dHZhcmlhYmxlIEBuZXduYW1lIFwKKwkJLXZhbGlkYXRlIGtleSBcCisJCS12YWxpZGF0ZWNvbW1hbmQgeworCQkJaWYgeyVkID09IDEgJiYgW3JlZ2V4cCB7W35eOj8qXFtcMC0gXX0gJVNdfSB7cmV0dXJuIDB9CisJCQlyZXR1cm4gMQorCQl9CisKKwlncmlkICR3LnJlbmFtZS5vbGRuYW1lX2wgJHcucmVuYW1lLm9sZG5hbWVfbSAtc3RpY2t5IHdlIC1wYWR4IHswIDV9CisJZ3JpZCAkdy5yZW5hbWUubmV3bmFtZV9sICR3LnJlbmFtZS5uZXduYW1lX3QgLXN0aWNreSB3ZSAtcGFkeCB7MCA1fQorCWdyaWQgY29sdW1uY29uZmlndXJlICR3LnJlbmFtZSAxIC13ZWlnaHQgMQorCXBhY2sgJHcucmVuYW1lIC1hbmNob3IgbncgLWZpbGwgeCAtcGFkeSA1IC1wYWR4IDUKKworCWJpbmQgJHcgPEtleS1SZXR1cm4+IFtjYiBfcmVuYW1lXQorCWJpbmQgJHcgPEtleS1Fc2NhcGU+IFtsaXN0IGRlc3Ryb3kgJHddCisJYmluZCAkdyA8VmlzaWJpbGl0eT4gIgorCQlncmFiICR3CisJCSR3LnJlbmFtZS5uZXduYW1lX3QgaWN1cnNvciBlbmQKKwkJZm9jdXMgJHcucmVuYW1lLm5ld25hbWVfdAorCSIKKwl3bSBkZWljb25pZnkgJHcKKwl0a3dhaXQgd2luZG93ICR3Cit9CisKK21ldGhvZCBfcmVuYW1lIHt9IHsKKwlnbG9iYWwgY3VycmVudF9icmFuY2gKKworCWlmIHskb2xkbmFtZSBlcSB7fX0geworCQl0a19tZXNzYWdlQm94IFwKKwkJCS1pY29uIGVycm9yIFwKKwkJCS10eXBlIG9rIFwKKwkJCS10aXRsZSBbd20gdGl0bGUgJHddIFwKKwkJCS1wYXJlbnQgJHcgXAorCQkJLW1lc3NhZ2UgW21jICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iXQorCQlmb2N1cyAkdy5yZW5hbWUub2xkbmFtZV9tCisJCXJldHVybgorCX0KKwlpZiB7JG5ld25hbWUgZXEge30KKwkJfHwgJG5ld25hbWUgZXEgW2dldF9jb25maWcgZ3VpLm5ld2JyYW5jaHRlbXBsYXRlXX0geworCQl0a19tZXNzYWdlQm94IFwKKwkJCS1pY29uIGVycm9yIFwKKwkJCS10eXBlIG9rIFwKKwkJCS10aXRsZSBbd20gdGl0bGUgJHddIFwKKwkJCS1wYXJlbnQgJHcgXAorCQkJLW1lc3NhZ2UgW21jICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIl0KKwkJZm9jdXMgJHcucmVuYW1lLm5ld25hbWVfdAorCQlyZXR1cm4KKwl9CisJaWYgeyFbY2F0Y2gge2dpdCBzaG93LXJlZiAtLXZlcmlmeSAtLSAicmVmcy9oZWFkcy8kbmV3bmFtZSJ9XX0geworCQl0a19tZXNzYWdlQm94IFwKKwkJCS1pY29uIGVycm9yIFwKKwkJCS10eXBlIG9rIFwKKwkJCS10aXRsZSBbd20gdGl0bGUgJHddIFwKKwkJCS1wYXJlbnQgJHcgXAorCQkJLW1lc3NhZ2UgW21jICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iICRuZXduYW1lXQorCQlmb2N1cyAkdy5yZW5hbWUubmV3bmFtZV90CisJCXJldHVybgorCX0KKwlpZiB7W2NhdGNoIHtnaXQgY2hlY2stcmVmLWZvcm1hdCAiaGVhZHMvJG5ld25hbWUifV19IHsKKwkJdGtfbWVzc2FnZUJveCBcCisJCQktaWNvbiBlcnJvciBcCisJCQktdHlwZSBvayBcCisJCQktdGl0bGUgW3dtIHRpdGxlICR3XSBcCisJCQktcGFyZW50ICR3IFwKKwkJCS1tZXNzYWdlIFttYyAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iICRuZXduYW1lXQorCQlmb2N1cyAkdy5yZW5hbWUubmV3bmFtZV90CisJCXJldHVybgorCX0KKworCWlmIHtbY2F0Y2gge2dpdCBicmFuY2ggLW0gJG9sZG5hbWUgJG5ld25hbWV9IGVycl19IHsKKwkJdGtfbWVzc2FnZUJveCBcCisJCQktaWNvbiBlcnJvciBcCisJCQktdHlwZSBvayBcCisJCQktdGl0bGUgW3dtIHRpdGxlICR3XSBcCisJCQktcGFyZW50ICR3IFwKKwkJCS1tZXNzYWdlIFtzdHJjYXQgW21jICJGYWlsZWQgdG8gcmVuYW1lICclcycuIiAkb2xkbmFtZV0gIlxuXG4kZXJyIl0KKwkJcmV0dXJuCisJfQorCisJaWYgeyRjdXJyZW50X2JyYW5jaCBlcSAkb2xkbmFtZX0geworCQlzZXQgY3VycmVudF9icmFuY2ggJG5ld25hbWUKKwl9CisKKwlkZXN0cm95ICR3Cit9CisKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2Jyb3dzZXIudGNsIGIvZ2l0LWd1aS9saWIvYnJvd3Nlci50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyODMzOAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL2Jyb3dzZXIudGNsCkBAIC0wLDAgKzEsMzIyIEBACisjIGdpdC1ndWkgdHJlZSBicm93c2VyCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTaGF3biBQZWFyY2UKKworY2xhc3MgYnJvd3NlciB7CisKK2ltYWdlIGNyZWF0ZSBwaG90byA6OmJyb3dzZXI6OmltZ19wYXJlbnQgIC1kYXRhIHtSMGxHT0RsaEVBQVFBSVVBQVB3Q0JCeFNIQnhPSE1UU3pOenUzS3pDdEJSR0hDU0tGSXpDakx6U3hCUTJGQXhHSER6Q0xDeWVIQlErRkhTbWZBd3VGQnhLTERTQ05Neml6SVN5akp6T25EU3lMQXcrRkFRU0RBUWVEQnhXSkF3bURBUU9CS3pXckR5bU5BUWFEQVFPREF3YUREeUtURlN5WEZUR1RFeTZUQVFDQkFRS0RBd2lGQlF5SEF3U0ZBd21IQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBQUFBQUxBQUFBQUFRQUJBQUFBWjFRSUJ3U0N3YWowaGlRQ0JJQ3BjRFFzRmdHQWFJZ3VoaGkwZ29oSXNyUUVEWU1oaU5yUmZnZUFRQzVmTUNBb2xJRGhEMmhGSTVXQzRZUkJrYUJ4c09FMmwvUnhzSEhBNGRIbWtmUnlBYklRNGlJeVFsQjVORkdDQUFDaWFrcFNaRUp5aW5UZ0FjS1Nlc0FDb3JnVTRtSjZ1eFIzNUJBQ0grYUVOeVpXRjBaV1FnWW5rZ1FrMVFWRzlIU1VZZ1VISnZJSFpsY25OcGIyNGdNaTQxRFFxcElFUmxkbVZzUTI5eUlERTVPVGNzTVRrNU9DNGdRV3hzSUhKcFoyaDBjeUJ5WlhObGNuWmxaQzROQ21oMGRIQTZMeTkzZDNjdVpHVjJaV3hqYjNJdVkyOXRBRHM9fQoraW1hZ2UgY3JlYXRlIHBob3RvIDo6YnJvd3Nlcjo6aW1nX3JibG9iICAgLWRhdGEge1IwbEdPRGxoRUFBUUFJVUFBUHdDQkZ4YVhOemUzTHkyckpTV2pQeisvT3pxN0d4cWJKeWFuUFQyOUhSeWRNek96RFF5Tkl5S2pFUkNST1RpM1B6NjlQVHk3UHp5N1BUdTVPem0zTHlxbEp5V2xKU1NqSlNPaE96aTFMeXVsUHoyN1BUcTNQVG0xT3plekx5cWpJeUtoSlNLZk96YXhQejI5T3ppekx5aWRJeUdkSXlDZE9UT3BMeW1oT3phdk9UU3RNVEN0TVMrck1TNnBNU3luTVN1bEx5ZWRBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBRUFBQUFBTEFBQUFBQVFBQkFBQUFhUVFJQVFFQ2dhamNOa1FNQmtEZ0tFUUZLNExGZ0xoa01CSVZVS3JvV0VZbEVnTUx4YkJLTFFVQndjNTJIZ0FRNExCbzA0OWF0V1F5SVBBM3BFZEZjUUVoTVVGWU5WYWdRV0Z4Z1pHb3hmWVJzVEhCMGVINVVKQ0pBWUlDRWluVW9QSXhJY0hDUWtJaUlsbFFZRUdDRWhKaWNvS1l3UG1pUWVLaXNyS0xGS0xDd3RMaTh3SHlVbE1Zd00wdFBVREg1QkFDSCthRU55WldGMFpXUWdZbmtnUWsxUVZHOUhTVVlnVUhKdklIWmxjbk5wYjI0Z01pNDFEUXFwSUVSbGRtVnNRMjl5SURFNU9UY3NNVGs1T0M0Z1FXeHNJSEpwWjJoMGN5QnlaWE5sY25abFpDNE5DbWgwZEhBNkx5OTNkM2N1WkdWMlpXeGpiM0l1WTI5dEFEcz19CitpbWFnZSBjcmVhdGUgcGhvdG8gOjpicm93c2VyOjppbWdfeGJsb2IgICAtZGF0YSB7UjBsR09EbGhFQUFRQUlZQUFQd0NCRlJXVkZ4YVhOemEzT1RpM056ZTNMeTJ0SnlhblB6Ky9PenE3R3h1Yk56U3hNek96TVRHeEhSeWJEUXlOTHkrdkhSeWRIeDZmS1NpcElTQ2hJeUtqR3hxYkVSQ1JDd3VMTHk2dkdSaVpFeEtUQ1FpSkF3S0RMU3l0THkyckpTU2xIeCtmRHc2UEt5cXJCUVdGUFR1NU96bTNMeXVsTFMydENRbUpBUUNCUFRxM096aTFNU3luQ3dxTEFRR0JPVGF6T3ppek96ZXpMeXFqQndlSE56U3ZPemF4S3l1ckhSdVpOek90THltaER3K1BJeUNkT3pXdk9UT3BMeWlkTnpLdE9UU3RMeWlmTVRDdE1TK3JMeWVkQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBRUFBQUFBTEFBQUFBQVFBQkFBQUFmWmdBQ0NBQUVDaFllR2c0b0NBd1FGamdZQkJ3R0tnZ0VFQ0prSUNRb0lrd0FEQ3d3TkRZMm1EQTRMbmc4UURoRVNzTEFSRXhRVkRoWVhHQmtXRXhJYUd3OGNIUjRTQ1FRZkZROGVGZ1VnSVFFaXdpTVNCTVlmR0I0YXR3RVhEeVFkMHdRbEppY1BLQUhvRnlJcEpDb2VEZ01yTEMwWUtCc1g2aTRrTCs0T01ERXlaaWpyNW9MR054VXFVQ2lvRWNQR0RBd2pQTnlJNk1FRENoUWpjT1N3c1VESGd3MDdSSWdJNEtDa0FnczhjdlR3OGVPQm9nQXhRdFhJQVNUSVNpRXVCd1VZTW9SSWl4WW5aZ2dwVWdURHl3ZElrV0pJaXRSUElBQWgvbWhEY21WaGRHVmtJR0o1SUVKTlVGUnZSMGxHSUZCeWJ5QjJaWEp6YVc5dUlESXVOUTBLcVNCRVpYWmxiRU52Y2lBeE9UazNMREU1T1RndUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVEUXBvZEhSd09pOHZkM2QzTG1SbGRtVnNZMjl5TG1OdmJRQTd9CitpbWFnZSBjcmVhdGUgcGhvdG8gOjpicm93c2VyOjppbWdfdHJlZSAgICAtZGF0YSB7UjBsR09EbGhFQUFRQUlZQUFQd0NCQVFDQkV4S1RCd1dITXpLek96cTdFUkNSRXhHVEN3cUxBUnFuQVErWkhSMmRLeXFyTlRPekh4MmZDUWlKTVRpOU5UdTlIekMzQXhtbkFRK1hQVG03RHk2N0R5bXpJVEMzSXpHNUF4eXBIUnlkS3ltck16T3pPenU3QndlSEJ5eTlBeUd0Rnl5MUl6RzNOVHUvQVJ1cEZSU1ZCeWF6QlI2ckF5R3ZGeXV6SlRLM01UbTlCUit0QXhXaEhTNjFNVGk3UHorL0l5bXZDeHVsQlJlbEF4MnJIUzYzUHo2L1BUeTlQVHU5TnphM0lTaXRCUnVwRlNpeE5UUzFDeHFuRFF5Tk16R3pPVGk1TVRDeE1UR3hHeHViR3hxYkx5MnZMU3V0R1JpWkx5NnZMU3l0S3l1ckRRdU5GeGFYS1NpcER3NlBBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBRUFBQUFBTEFBQUFBQVFBQkFBQUFmRGdBQ0NBQUVDZzRlSUFBTUVCUVlIQ0ltREJna0tDd3dOQlFJQkJ3NEJodzhRRVJJVEZKWUVGUVVGbm9JUEZoY1lvUmthRkJzY0hSNEdnaDhnSVJjaUVpTVFKQmtsdENhNkp5VW9LU2tYS2hJckxDUVl1UUFQTFM0VEV5VWhLYjBxTHpEVkFqRUZNak11TkJNb05jdzIxUVkzT0RrRk9qczgyUk0xUGZEekZSVTNmT2dnY003RmoycEFnZ2dSb2tPSER4OURoaEFaVXFRYUlTQkdoandNRXZFSWtpSUhFZ1VBa2dTSmtpTkxtRlNNSkNoQUV5ZFBHQlNCd3ZKUWdBYzAvUVFDQUNIK2FFTnlaV0YwWldRZ1lua2dRazFRVkc5SFNVWWdVSEp2SUhabGNuTnBiMjRnTWk0MURRcXBJRVJsZG1Wc1EyOXlJREU1T1Rjc01UazVPQzRnUVd4c0lISnBaMmgwY3lCeVpYTmxjblpsWkM0TkNtaDBkSEE2THk5M2QzY3VaR1YyWld4amIzSXVZMjl0QURzPX0KK2ltYWdlIGNyZWF0ZSBwaG90byA6OmJyb3dzZXI6OmltZ19zeW1saW5rIC1kYXRhIHtSMGxHT0RsaEVBQVFBSVFBQVB3Q0JDd3FMTFN5dEx5K3ZFUkdSRlJXVkRRMk5LU21wQVFDQkt5dXJNVEd4SVNDaEp5YW5IUjJkSXlLakd4dWJIUnlkR1JtWkl5T2pGeGVYSHg2ZkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1QkFFQUFBQUFMQUFBQUFBUUFCQUFBQVZiSUNBQ3dXaWVZMUNpYkNDc3JCa01iMHpjaFNFY05Zc2tDdHFCQnpzaEZrT0dRRmswSVJxT3hxUEJPRFJIQ01oQ1FLdGVSYzlGSS9LUVdHT0l5Rllna0RDK2dQUjRzbkNjZlJHS09JS0lnU01RRTMxK2Y0T0VZQ1orSVFBaC9taERjbVZoZEdWa0lHSjVJRUpOVUZSdlIwbEdJRkJ5YnlCMlpYSnphVzl1SURJdU5RMEtxU0JFWlhabGJFTnZjaUF4T1RrM0xERTVPVGd1SUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdURRcG9kSFJ3T2k4dmQzZDNMbVJsZG1Wc1kyOXlMbU52YlFBN30KK2ltYWdlIGNyZWF0ZSBwaG90byA6OmJyb3dzZXI6OmltZ191bmtub3duIC1kYXRhIHtSMGxHT0RsaEVBQVFBSVVBQVB3Q0JGeGFYSXlLak5UVzFOemUzTFMydEp5YW5FUjJSR1MrVlB6Ky9QVHU1R3hxYlB6NjlCUTZCQ3hlTEZTcVJQVDI5SFJ5ZE16T3pEUXlORVJtUEtTeXBDUldISXlLaEVSQ1JEeUdQS3oybkVTaUxCeEdIQ3lDSEd4dWJQejYvUFR5N096aTFMeTJyS1NpcE96bTNMeXFsS1NXaENSeUZPeml6THltaE5US3ROek92T3pheE9UU3RQejI3T3pXdk9UT3BMU3VwTHllZE1TK3JNUzZwTVN1bEx5cWpMeW1mTHlpZkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBQUFBQUxBQUFBQUFRQUJBQUFBYW1RSUFRRUNnYWpjT2tZRUJvRGdvQlF5QUpPQ0N1aUVOQ3NXQkloOWFHdzlGNEhDQVJpWGNpUkRRb0JVbmxZUmxjSWdzTUc1Q3hYQWdNR2hzY0JSQUVCUmQ3QUIwZUJCb0lneFVmSUNFaWlrU1BneU1NSUFva0paY0JrQnliSmdvbUlhQkpBWm9NcHlDbXFrTUJGQ2NWQ3JnS0tBd3BvU29yS3FjaEtDd3R2YXNJRkJJaExpWXZMekRIc3hRTk1jTUtMREF3TXFFejNqUTFOVFkzT055ckUranA2aE4rUVFBaC9taERjbVZoZEdWa0lHSjVJRUpOVUZSdlIwbEdJRkJ5YnlCMlpYSnphVzl1SURJdU5RMEtxU0JFWlhabGJFTnZjaUF4T1RrM0xERTVPVGd1SUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdURRcG9kSFJ3T2k4dmQzZDNMbVJsZG1Wc1kyOXlMbU52YlFBN30KKworZmllbGQgdworZmllbGQgYnJvd3Nlcl9jb21taXQKK2ZpZWxkIGJyb3dzZXJfcGF0aAorZmllbGQgYnJvd3Nlcl9maWxlcyAge30KK2ZpZWxkIGJyb3dzZXJfc3RhdHVzIFttYyAiU3RhcnRpbmcuLi4iXQorZmllbGQgYnJvd3Nlcl9zdGFjayAge30KK2ZpZWxkIGJyb3dzZXJfYnVzeSAgIDEKKworZmllbGQgbHNfYnVmICAgICB7fTsgIyBCdWZmZXJlZCByZWNvcmQgb3V0cHV0IGZyb20gbHMtdHJlZQorCitjb25zdHJ1Y3RvciBuZXcge2NvbW1pdCB7cGF0aCB7fX19IHsKKwlnbG9iYWwgY3Vyc29yX3B0ciBNMUIgdXNlX3R0ayBOUworCW1ha2VfZGlhbG9nIHRvcCB3CisJd20gd2l0aGRyYXcgJHRvcAorCXdtIHRpdGxlICR0b3AgW2FwcGVuZCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogIiBbbWMgIkZpbGUgQnJvd3NlciJdXQorCisJaWYgeyRwYXRoIG5lIHt9fSB7CisJCWlmIHtbc3RyaW5nIGluZGV4ICRwYXRoIGVuZF0gbmUgey99fSB7CisJCQlhcHBlbmQgcGF0aCAvCisJCX0KKwl9CisKKwlzZXQgYnJvd3Nlcl9jb21taXQgJGNvbW1pdAorCXNldCBicm93c2VyX3BhdGggIiRicm93c2VyX2NvbW1pdDpbZXNjYXBlX3BhdGggJHBhdGhdIgorCisJJHtOU306OmxhYmVsICR3LnBhdGggXAorCQktdGV4dHZhcmlhYmxlIEBicm93c2VyX3BhdGggXAorCQktYW5jaG9yIHcgXAorCQktanVzdGlmeSBsZWZ0IFwKKwkJLWZvbnQgZm9udF91aWJvbGQKKwlpZiB7ISR1c2VfdHRrfSB7ICR3LnBhdGggY29uZmlndXJlIC1ib3JkZXJ3aWR0aCAxIC1yZWxpZWYgc3Vua2VufQorCXBhY2sgJHcucGF0aCAtYW5jaG9yIHcgLXNpZGUgdG9wIC1maWxsIHgKKworCSR7TlN9OjpmcmFtZSAkdy5saXN0CisJc2V0IHdfbGlzdCAkdy5saXN0LmwKKwl0ZXh0ICR3X2xpc3QgLWJhY2tncm91bmQgd2hpdGUgLWZvcmVncm91bmQgYmxhY2sgXAorCQktYm9yZGVyd2lkdGggMCBcCisJCS1jdXJzb3IgJGN1cnNvcl9wdHIgXAorCQktc3RhdGUgZGlzYWJsZWQgXAorCQktd3JhcCBub25lIFwKKwkJLWhlaWdodCAyMCBcCisJCS13aWR0aCA3MCBcCisJCS14c2Nyb2xsY29tbWFuZCBbbGlzdCAkdy5saXN0LnNieCBzZXRdIFwKKwkJLXlzY3JvbGxjb21tYW5kIFtsaXN0ICR3Lmxpc3Quc2J5IHNldF0KKwlybXNlbF90YWcgJHdfbGlzdAorCSR7TlN9OjpzY3JvbGxiYXIgJHcubGlzdC5zYnggLW9yaWVudCBoIC1jb21tYW5kIFtsaXN0ICR3X2xpc3QgeHZpZXddCisJJHtOU306OnNjcm9sbGJhciAkdy5saXN0LnNieSAtb3JpZW50IHYgLWNvbW1hbmQgW2xpc3QgJHdfbGlzdCB5dmlld10KKwlwYWNrICR3Lmxpc3Quc2J4IC1zaWRlIGJvdHRvbSAtZmlsbCB4CisJcGFjayAkdy5saXN0LnNieSAtc2lkZSByaWdodCAtZmlsbCB5CisJcGFjayAkd19saXN0IC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtZXhwYW5kIDEKKwlwYWNrICR3Lmxpc3QgLXNpZGUgdG9wIC1maWxsIGJvdGggLWV4cGFuZCAxCisKKwkke05TfTo6bGFiZWwgJHcuc3RhdHVzIFwKKwkJLXRleHR2YXJpYWJsZSBAYnJvd3Nlcl9zdGF0dXMgXAorCQktYW5jaG9yIHcgXAorCQktanVzdGlmeSBsZWZ0CisJaWYgeyEkdXNlX3R0a30geyAkdy5zdGF0dXMgY29uZmlndXJlIC1ib3JkZXJ3aWR0aCAxIC1yZWxpZWYgc3Vua2VufQorCXBhY2sgJHcuc3RhdHVzIC1hbmNob3IgdyAtc2lkZSBib3R0b20gLWZpbGwgeAorCisJYmluZCAkd19saXN0IDxCdXR0b24tMT4gICAgICAgICJbY2IgX2NsaWNrIDAgQCV4LCV5XTticmVhayIKKwliaW5kICR3X2xpc3QgPERvdWJsZS1CdXR0b24tMT4gIltjYiBfY2xpY2sgMSBAJXgsJXldO2JyZWFrIgorCWJpbmQgJHdfbGlzdCA8JE0xQi1VcD4gICAgICAgICAiW2NiIF9wYXJlbnRdICAgICAgICA7YnJlYWsiCisJYmluZCAkd19saXN0IDwkTTFCLUxlZnQ+ICAgICAgICJbY2IgX3BhcmVudF0gICAgICAgIDticmVhayIKKwliaW5kICR3X2xpc3QgPFVwPiAgICAgICAgICAgICAgIltjYiBfbW92ZSAtMV0gICAgICAgO2JyZWFrIgorCWJpbmQgJHdfbGlzdCA8RG93bj4gICAgICAgICAgICAiW2NiIF9tb3ZlICAxXSAgICAgICA7YnJlYWsiCisJYmluZCAkd19saXN0IDwkTTFCLVJpZ2h0PiAgICAgICJbY2IgX2VudGVyXSAgICAgICAgIDticmVhayIKKwliaW5kICR3X2xpc3QgPFJldHVybj4gICAgICAgICAgIltjYiBfZW50ZXJdICAgICAgICAgO2JyZWFrIgorCWJpbmQgJHdfbGlzdCA8UHJpb3I+ICAgICAgICAgICAiW2NiIF9wYWdlIC0xXSAgICAgICA7YnJlYWsiCisJYmluZCAkd19saXN0IDxOZXh0PiAgICAgICAgICAgICJbY2IgX3BhZ2UgIDFdICAgICAgIDticmVhayIKKwliaW5kICR3X2xpc3QgPExlZnQ+ICAgICAgICAgICAgYnJlYWsKKwliaW5kICR3X2xpc3QgPFJpZ2h0PiAgICAgICAgICAgYnJlYWsKKworCWJpbmQgJHdfbGlzdCA8VmlzaWJpbGl0eT4gW2xpc3QgZm9jdXMgJHdfbGlzdF0KKwl3bSBkZWljb25pZnkgJHRvcAorCXNldCB3ICR3X2xpc3QKKwlpZiB7JHBhdGggbmUge319IHsKKwkJX2xzICR0aGlzICRicm93c2VyX2NvbW1pdDokcGF0aCAkcGF0aAorCX0gZWxzZSB7CisJCV9scyAkdGhpcyAkYnJvd3Nlcl9jb21taXQgJHBhdGgKKwl9CisJcmV0dXJuICR0aGlzCit9CisKK21ldGhvZCBfbW92ZSB7ZGlyfSB7CisJaWYgeyRicm93c2VyX2J1c3l9IHJldHVybgorCXNldCBsbm8gW2xpbmRleCBbc3BsaXQgWyR3IGluZGV4IGluX3NlbC5maXJzdF0gLl0gMF0KKwlpbmNyIGxubyAkZGlyCisJaWYge1tsaW5kZXggJGJyb3dzZXJfZmlsZXMgW2V4cHIgeyRsbm8gLSAxfV1dIG5lIHt9fSB7CisJCSR3IHRhZyByZW1vdmUgaW5fc2VsIDAuMCBlbmQKKwkJJHcgdGFnIGFkZCBpbl9zZWwgJGxuby4wIFtleHByIHskbG5vICsgMX1dLjAKKwkJJHcgc2VlICRsbm8uMAorCX0KK30KKworbWV0aG9kIF9wYWdlIHtkaXJ9IHsKKwlpZiB7JGJyb3dzZXJfYnVzeX0gcmV0dXJuCisJJHcgeXZpZXcgc2Nyb2xsICRkaXIgcGFnZXMKKwlzZXQgbG5vIFtleHByIHtpbnQoCisJCSAgW2xpbmRleCBbJHcgeXZpZXddIDBdCisJCSogW2xsZW5ndGggJGJyb3dzZXJfZmlsZXNdCisJCSsgMSl9XQorCWlmIHtbbGluZGV4ICRicm93c2VyX2ZpbGVzIFtleHByIHskbG5vIC0gMX1dXSBuZSB7fX0geworCQkkdyB0YWcgcmVtb3ZlIGluX3NlbCAwLjAgZW5kCisJCSR3IHRhZyBhZGQgaW5fc2VsICRsbm8uMCBbZXhwciB7JGxubyArIDF9XS4wCisJCSR3IHNlZSAkbG5vLjAKKwl9Cit9CisKK21ldGhvZCBfcGFyZW50IHt9IHsKKwlpZiB7JGJyb3dzZXJfYnVzeX0gcmV0dXJuCisJc2V0IGluZm8gW2xpbmRleCAkYnJvd3Nlcl9maWxlcyAwXQorCWlmIHtbbGluZGV4ICRpbmZvIDBdIGVxIHtwYXJlbnR9fSB7CisJCXNldCBwYXJlbnQgW2xpbmRleCAkYnJvd3Nlcl9zdGFjayBlbmQtMV0KKwkJc2V0IGJyb3dzZXJfc3RhY2sgW2xyYW5nZSAkYnJvd3Nlcl9zdGFjayAwIGVuZC0yXQorCQlpZiB7JGJyb3dzZXJfc3RhY2sgZXEge319IHsKKwkJCXJlZ3N1YiB7Oi4qJH0gJGJyb3dzZXJfcGF0aCB7On0gYnJvd3Nlcl9wYXRoCisJCX0gZWxzZSB7CisJCQlyZWdzdWIgey9bXi9dKy8kfSAkYnJvd3Nlcl9wYXRoIHsvfSBicm93c2VyX3BhdGgKKwkJfQorCQlzZXQgYnJvd3Nlcl9zdGF0dXMgW21jICJMb2FkaW5nICVzLi4uIiAkYnJvd3Nlcl9wYXRoXQorCQlfbHMgJHRoaXMgW2xpbmRleCAkcGFyZW50IDBdIFtsaW5kZXggJHBhcmVudCAxXQorCX0KK30KKworbWV0aG9kIF9lbnRlciB7fSB7CisJaWYgeyRicm93c2VyX2J1c3l9IHJldHVybgorCXNldCBsbm8gW2xpbmRleCBbc3BsaXQgWyR3IGluZGV4IGluX3NlbC5maXJzdF0gLl0gMF0KKwlzZXQgaW5mbyBbbGluZGV4ICRicm93c2VyX2ZpbGVzIFtleHByIHskbG5vIC0gMX1dXQorCWlmIHskaW5mbyBuZSB7fX0geworCQlzd2l0Y2ggLS0gW2xpbmRleCAkaW5mbyAwXSB7CisJCXBhcmVudCB7CisJCQlfcGFyZW50ICR0aGlzCisJCX0KKwkJdHJlZSB7CisJCQlzZXQgbmFtZSBbbGluZGV4ICRpbmZvIDJdCisJCQlzZXQgZXNjbiBbZXNjYXBlX3BhdGggJG5hbWVdCisJCQlzZXQgYnJvd3Nlcl9zdGF0dXMgW21jICJMb2FkaW5nICVzLi4uIiAkZXNjbl0KKwkJCWFwcGVuZCBicm93c2VyX3BhdGggJGVzY24KKwkJCV9scyAkdGhpcyBbbGluZGV4ICRpbmZvIDFdICRuYW1lCisJCX0KKwkJYmxvYiB7CisJCQlzZXQgbmFtZSBbbGluZGV4ICRpbmZvIDJdCisJCQlzZXQgcCB7fQorCQkJZm9yZWFjaCBuICRicm93c2VyX3N0YWNrIHsKKwkJCQlhcHBlbmQgcCBbbGluZGV4ICRuIDFdCisJCQl9CisJCQlhcHBlbmQgcCAkbmFtZQorCQkJYmxhbWU6Om5ldyAkYnJvd3Nlcl9jb21taXQgJHAge30KKwkJfQorCQl9CisJfQorfQorCittZXRob2QgX2NsaWNrIHt3YXNfZG91YmxlX2NsaWNrIHBvc30geworCWlmIHskYnJvd3Nlcl9idXN5fSByZXR1cm4KKwlzZXQgbG5vIFtsaW5kZXggW3NwbGl0IFskdyBpbmRleCAkcG9zXSAuXSAwXQorCWZvY3VzICR3CisKKwlpZiB7W2xpbmRleCAkYnJvd3Nlcl9maWxlcyBbZXhwciB7JGxubyAtIDF9XV0gbmUge319IHsKKwkJJHcgdGFnIHJlbW92ZSBpbl9zZWwgMC4wIGVuZAorCQkkdyB0YWcgYWRkIGluX3NlbCAkbG5vLjAgW2V4cHIgeyRsbm8gKyAxfV0uMAorCQlpZiB7JHdhc19kb3VibGVfY2xpY2t9IHsKKwkJCV9lbnRlciAkdGhpcworCQl9CisJfQorfQorCittZXRob2QgX2xzIHt0cmVlX2lkIHtuYW1lIHt9fX0geworCXNldCBsc19idWYge30KKwlzZXQgYnJvd3Nlcl9maWxlcyB7fQorCXNldCBicm93c2VyX2J1c3kgMQorCisJJHcgY29uZiAtc3RhdGUgbm9ybWFsCisJJHcgdGFnIHJlbW92ZSBpbl9zZWwgMC4wIGVuZAorCSR3IGRlbGV0ZSAwLjAgZW5kCisJaWYgeyRicm93c2VyX3N0YWNrIG5lIHt9fSB7CisJCSR3IGltYWdlIGNyZWF0ZSBlbmQgXAorCQkJLWFsaWduIGNlbnRlciAtcGFkeCA1IC1wYWR5IDEgXAorCQkJLW5hbWUgaWNvbjAgXAorCQkJLWltYWdlIDo6YnJvd3Nlcjo6aW1nX3BhcmVudAorCQkkdyBpbnNlcnQgZW5kIFttYyAiXFtVcCBUbyBQYXJlbnRcXSJdCisJCWxhcHBlbmQgYnJvd3Nlcl9maWxlcyBwYXJlbnQKKwl9CisJbGFwcGVuZCBicm93c2VyX3N0YWNrIFtsaXN0ICR0cmVlX2lkICRuYW1lXQorCSR3IGNvbmYgLXN0YXRlIGRpc2FibGVkCisKKwlzZXQgZmQgW2dpdF9yZWFkIGxzLXRyZWUgLXogJHRyZWVfaWRdCisJZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGJpbmFyeSAtZW5jb2RpbmcgYmluYXJ5CisJZmlsZWV2ZW50ICRmZCByZWFkYWJsZSBbY2IgX3JlYWQgJGZkXQorfQorCittZXRob2QgX3JlYWQge2ZkfSB7CisJYXBwZW5kIGxzX2J1ZiBbcmVhZCAkZmRdCisJc2V0IHBjayBbc3BsaXQgJGxzX2J1ZiAiXDAiXQorCXNldCBsc19idWYgW2xpbmRleCAkcGNrIGVuZF0KKworCXNldCBuIFtsbGVuZ3RoICRicm93c2VyX2ZpbGVzXQorCSR3IGNvbmYgLXN0YXRlIG5vcm1hbAorCWZvcmVhY2ggcCBbbHJhbmdlICRwY2sgMCBlbmQtMV0geworCQlzZXQgdGFiIFtzdHJpbmcgZmlyc3QgIlx0IiAkcF0KKwkJaWYgeyR0YWIgPT0gLTF9IGNvbnRpbnVlCisKKwkJc2V0IGluZm8gW3NwbGl0IFtzdHJpbmcgcmFuZ2UgJHAgMCBbZXhwciB7JHRhYiAtIDF9XV0geyB9XQorCQlzZXQgcGF0aCBbc3RyaW5nIHJhbmdlICRwIFtleHByIHskdGFiICsgMX1dIGVuZF0KKwkJc2V0IHR5cGUgICBbbGluZGV4ICRpbmZvIDFdCisJCXNldCBvYmplY3QgW2xpbmRleCAkaW5mbyAyXQorCisJCXN3aXRjaCAtLSAkdHlwZSB7CisJCWJsb2IgeworCQkJc2NhbiBbbGluZGV4ICRpbmZvIDBdICVvIG1vZGUKKwkJCWlmIHskbW9kZSA9PSAwMTIwMDAwfSB7CisJCQkJc2V0IGltYWdlIDo6YnJvd3Nlcjo6aW1nX3N5bWxpbmsKKwkJCX0gZWxzZWlmIHsoJG1vZGUgJiAwMTAwKSAhPSAwfSB7CisJCQkJc2V0IGltYWdlIDo6YnJvd3Nlcjo6aW1nX3hibG9iCisJCQl9IGVsc2UgeworCQkJCXNldCBpbWFnZSA6OmJyb3dzZXI6OmltZ19yYmxvYgorCQkJfQorCQl9CisJCXRyZWUgeworCQkJc2V0IGltYWdlIDo6YnJvd3Nlcjo6aW1nX3RyZWUKKwkJCWFwcGVuZCBwYXRoIC8KKwkJfQorCQlkZWZhdWx0IHsKKwkJCXNldCBpbWFnZSA6OmJyb3dzZXI6OmltZ191bmtub3duCisJCX0KKwkJfQorCisJCWlmIHskbiA+IDB9IHskdyBpbnNlcnQgZW5kICJcbiJ9CisJCSR3IGltYWdlIGNyZWF0ZSBlbmQgXAorCQkJLWFsaWduIGNlbnRlciAtcGFkeCA1IC1wYWR5IDEgXAorCQkJLW5hbWUgaWNvbltpbmNyIG5dIFwKKwkJCS1pbWFnZSAkaW1hZ2UKKwkJJHcgaW5zZXJ0IGVuZCBbZXNjYXBlX3BhdGggJHBhdGhdCisJCWxhcHBlbmQgYnJvd3Nlcl9maWxlcyBbbGlzdCAkdHlwZSAkb2JqZWN0ICRwYXRoXQorCX0KKwkkdyBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCisJaWYge1tlb2YgJGZkXX0geworCQljbG9zZSAkZmQKKwkJc2V0IGJyb3dzZXJfc3RhdHVzIFttYyAiUmVhZHkuIl0KKwkJc2V0IGJyb3dzZXJfYnVzeSAwCisJCXNldCBsc19idWYge30KKwkJaWYgeyRuID4gMH0geworCQkJJHcgdGFnIGFkZCBpbl9zZWwgMS4wIDIuMAorCQkJZm9jdXMgLWZvcmNlICR3CisJCX0KKwl9Cit9IGlmZGVsZXRlZCB7CisJY2F0Y2gge2Nsb3NlICRmZH0KK30KKworfQorCitjbGFzcyBicm93c2VyX29wZW4geworCitmaWVsZCB3ICAgICAgICAgICAgICA7ICMgd2lkZ2V0IHBhdGgKK2ZpZWxkIHdfcmV2ICAgICAgICAgIDsgIyBtZWdhLXdpZGdldCB0byBwaWNrIHRoZSBpbml0aWFsIHJldmlzaW9uCisKK2NvbnN0cnVjdG9yIGRpYWxvZyB7fSB7CisJZ2xvYmFsIHVzZV90dGsgTlMKKwltYWtlX2RpYWxvZyB0b3AgdworCXdtIHdpdGhkcmF3ICR0b3AKKwl3bSB0aXRsZSAkdG9wIFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJCcm93c2UgQnJhbmNoIEZpbGVzIl1dCisJaWYgeyR0b3AgbmUgey59fSB7CisJCXdtIGdlb21ldHJ5ICR0b3AgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgorCQl3bSB0cmFuc2llbnQgJHRvcCAuCisJfQorCisJJHtOU306OmxhYmVsICR3LmhlYWRlciBcCisJCS10ZXh0IFttYyAiQnJvd3NlIEJyYW5jaCBGaWxlcyJdIFwKKwkJLWZvbnQgZm9udF91aWJvbGQgXAorCQktYW5jaG9yIGNlbnRlcgorCXBhY2sgJHcuaGVhZGVyIC1zaWRlIHRvcCAtZmlsbCB4CisKKwkke05TfTo6ZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5icm93c2UgLXRleHQgW21jIEJyb3dzZV0gXAorCQktZGVmYXVsdCBhY3RpdmUgXAorCQktY29tbWFuZCBbY2IgX29wZW5dCisJcGFjayAkdy5idXR0b25zLmJyb3dzZSAtc2lkZSByaWdodAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gXAorCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQorCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQorCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAorCisJc2V0IHdfcmV2IFs6OmNob29zZV9yZXY6Om5ldyAkdy5yZXYgW21jIFJldmlzaW9uXV0KKwkkd19yZXYgYmluZF9saXN0Ym94IDxEb3VibGUtQnV0dG9uLTE+IFtjYiBfb3Blbl0KKwlwYWNrICR3LnJldiAtYW5jaG9yIG53IC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR5IDUgLXBhZHggNQorCisJYmluZCAkdyA8VmlzaWJpbGl0eT4gW2NiIF92aXNpYmxlXQorCWJpbmQgJHcgPEtleS1Fc2NhcGU+IFtsaXN0IGRlc3Ryb3kgJHddCisJYmluZCAkdyA8S2V5LVJldHVybj4gW2NiIF9vcGVuXVw7YnJlYWsKKwl3bSBkZWljb25pZnkgJHRvcAorCXRrd2FpdCB3aW5kb3cgJHcKK30KKworbWV0aG9kIF9vcGVuIHt9IHsKKwlpZiB7W2NhdGNoIHskd19yZXYgY29tbWl0X29yX2RpZX0gZXJyXX0geworCQlyZXR1cm4KKwl9CisJc2V0IG5hbWUgWyR3X3JldiBnZXRdCisJZGVzdHJveSAkdworCWJyb3dzZXI6Om5ldyAkbmFtZQorfQorCittZXRob2QgX3Zpc2libGUge30geworCWdyYWIgJHcKKwkkd19yZXYgZm9jdXNfZmlsdGVyCit9CisKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2NoZWNrb3V0X29wLnRjbCBiL2dpdC1ndWkvbGliL2NoZWNrb3V0X29wLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTc0MTJjCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvY2hlY2tvdXRfb3AudGNsCkBAIC0wLDAgKzEsNjQ1IEBACisjIGdpdC1ndWkgY29tbWl0IGNoZWNrb3V0IHN1cHBvcnQKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQorCitjbGFzcyBjaGVja291dF9vcCB7CisKK2ZpZWxkIHcgICAgICAgIHt9OyAjIG91ciB3aW5kb3cgKGlmIHdlIGhhdmUgb25lKQorZmllbGQgd19jb25zICAge307ICMgZW1iZWRkZWQgY29uc29sZSB3aW5kb3cgb2JqZWN0CisKK2ZpZWxkIG5ld19leHByICAgOyAjIGV4cHJlc3Npb24gdGhlIHVzZXIgc2F3L3RoaW5rcyB0aGlzIGlzCitmaWVsZCBuZXdfaGFzaCAgIDsgIyBjb21taXQgU0hBLTEgd2UgYXJlIHN3aXRjaGluZyB0bworZmllbGQgbmV3X3JlZiAgICA7ICMgcmVmIHdlIGFyZSB1cGRhdGluZy9jcmVhdGluZworZmllbGQgb2xkX2hhc2ggICA7ICMgY29tbWl0IFNIQS0xIHRoYXQgd2FzIGNoZWNrZWQgb3V0IHdoZW4gd2Ugc3RhcnRlZAorCitmaWVsZCBwYXJlbnRfdyAgICAgIC47ICMgd2luZG93IHRoYXQgc3RhcnRlZCB1cworZmllbGQgbWVyZ2VfdHlwZSBub25lOyAjIHR5cGUgb2YgbWVyZ2UgdG8gYXBwbHkgdG8gZXhpc3RpbmcgYnJhbmNoCitmaWVsZCBtZXJnZV9iYXNlICAge307ICMgbWVyZ2UgYmFzZSBpZiB3ZSBoYXZlIGFub3RoZXIgcmVmIGludm9sdmVkCitmaWVsZCBmZXRjaF9zcGVjICAge307ICMgcmVmZXRjaCB0cmFja2luZyBicmFuY2ggaWYgdXNlZD8KK2ZpZWxkIGNoZWNrb3V0ICAgICAgMTsgIyBhY3R1YWxseSBjaGVja291dCB0aGUgYnJhbmNoPworZmllbGQgY3JlYXRlICAgICAgICAwOyAjIGNyZWF0ZSB0aGUgYnJhbmNoIGlmIGl0IGRvZXNuJ3QgZXhpc3Q/CitmaWVsZCByZW1vdGVfc291cmNlIHt9OyAjIHNhbWUgYXMgZmV0Y2hfc3BlYywgdG8gc2V0dXAgdHJhY2tpbmcKKworZmllbGQgcmVzZXRfb2sgICAgICAwOyAjIGRpZCB0aGUgdXNlciBhZ3JlZSB0byByZXNldD8KK2ZpZWxkIGZldGNoX29rICAgICAgMDsgIyBkaWQgdGhlIGZldGNoIHN1Y2NlZWQ/CisKK2ZpZWxkIHJlYWR0cmVlX2QgICB7fTsgIyBidWZmZXJlZCBvdXRwdXQgZnJvbSByZWFkLXRyZWUKK2ZpZWxkIHVwZGF0ZV9vbGQgICB7fTsgIyB3YXMgdGhlIHVwZGF0ZS1yZWYgY2FsbCBkZWZlcnJlZD8KK2ZpZWxkIHJlZmxvZ19tc2cgICB7fTsgIyBsb2cgbWVzc2FnZSBmb3IgdGhlIHVwZGF0ZS1yZWYgY2FsbAorCitjb25zdHJ1Y3RvciBuZXcge2V4cHIgaGFzaCB7cmVmIHt9fX0geworCXNldCBuZXdfZXhwciAkZXhwcgorCXNldCBuZXdfaGFzaCAkaGFzaAorCXNldCBuZXdfcmVmICAkcmVmCisKKwlyZXR1cm4gJHRoaXMKK30KKworbWV0aG9kIHBhcmVudCB7cGF0aH0geworCXNldCBwYXJlbnRfdyBbd2luZm8gdG9wbGV2ZWwgJHBhdGhdCit9CisKK21ldGhvZCBlbmFibGVfbWVyZ2Uge3R5cGV9IHsKKwlzZXQgbWVyZ2VfdHlwZSAkdHlwZQorfQorCittZXRob2QgZW5hYmxlX2ZldGNoIHtzcGVjfSB7CisJc2V0IGZldGNoX3NwZWMgJHNwZWMKK30KKworbWV0aG9kIHJlbW90ZV9zb3VyY2Uge3NwZWN9IHsKKwlzZXQgcmVtb3RlX3NvdXJjZSAkc3BlYworfQorCittZXRob2QgZW5hYmxlX2NoZWNrb3V0IHtjb30geworCXNldCBjaGVja291dCAkY28KK30KKworbWV0aG9kIGVuYWJsZV9jcmVhdGUge2NvfSB7CisJc2V0IGNyZWF0ZSAkY28KK30KKworbWV0aG9kIHJ1biB7fSB7CisJaWYgeyRmZXRjaF9zcGVjIG5lIHt9fSB7CisJCWdsb2JhbCBNMUIKKworCQkjIFdlIHdlcmUgYXNrZWQgdG8gcmVmcmVzaCBhIHNpbmdsZSB0cmFja2luZyBicmFuY2gKKwkJIyBiZWZvcmUgd2UgZ2V0IHRvIHdvcmsuICBXZSBzaG91bGQgZG8gdGhhdCBiZWZvcmUgd2UKKwkJIyBjb25zaWRlciBhbnkgcmVmIHVwZGF0aW5nLgorCQkjCisJCXNldCBmZXRjaF9vayAwCisJCXNldCBsX3RyY2sgW2xpbmRleCAkZmV0Y2hfc3BlYyAwXQorCQlzZXQgcmVtb3RlIFtsaW5kZXggJGZldGNoX3NwZWMgMV0KKwkJc2V0IHJfaGVhZCBbbGluZGV4ICRmZXRjaF9zcGVjIDJdCisJCXJlZ3N1YiBecmVmcy9oZWFkcy8gJHJfaGVhZCB7fSByX25hbWUKKworCQlzZXQgY21kIFtsaXN0IGdpdCBmZXRjaCAkcmVtb3RlXQorCQlpZiB7JGxfdHJjayBuZSB7fX0geworCQkJbGFwcGVuZCBjbWQgKyRyX2hlYWQ6JGxfdHJjaworCQl9IGVsc2UgeworCQkJbGFwcGVuZCBjbWQgJHJfaGVhZAorCQl9CisKKwkJX3RvcGxldmVsICR0aGlzIHtSZWZyZXNoaW5nIFRyYWNraW5nIEJyYW5jaH0KKwkJc2V0IHdfY29ucyBbOjpjb25zb2xlOjplbWJlZCBcCisJCQkkdy5jb25zb2xlIFwKKwkJCVttYyAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIgJHJfbmFtZSAkcmVtb3RlXV0KKwkJcGFjayAkdy5jb25zb2xlIC1maWxsIGJvdGggLWV4cGFuZCAxCisJCSR3X2NvbnMgZXhlYyAkY21kIFtjYiBfZmluaXNoX2ZldGNoXQorCisJCWJpbmQgJHcgPCRNMUItS2V5LXc+IGJyZWFrCisJCWJpbmQgJHcgPCRNMUItS2V5LVc+IGJyZWFrCisJCWJpbmQgJHcgPFZpc2liaWxpdHk+ICIKKwkJCVtsaXN0IGdyYWIgJHddCisJCQlbbGlzdCBmb2N1cyAkd10KKwkJIgorCQl3bSBwcm90b2NvbCAkdyBXTV9ERUxFVEVfV0lORE9XIFtjYiBfbm9vcF0KKwkJdGt3YWl0IHdpbmRvdyAkdworCisJCWlmIHshJGZldGNoX29rfSB7CisJCQlkZWxldGVfdGhpcworCQkJcmV0dXJuIDAKKwkJfQorCX0KKworCWlmIHskbmV3X3JlZiBuZSB7fX0geworCQkjIElmIHdlIGhhdmUgYSByZWYgd2UgbmVlZCB0byB1cGRhdGUgaXQgYmVmb3JlIHdlIGNhbgorCQkjIHByb2NlZWQgd2l0aCBhIGNoZWNrb3V0IChpZiBvbmUgd2FzIGVuYWJsZWQpLgorCQkjCisJCWlmIHshW191cGRhdGVfcmVmICR0aGlzXX0geworCQkJZGVsZXRlX3RoaXMKKwkJCXJldHVybiAwCisJCX0KKwl9CisKKwlpZiB7JGNoZWNrb3V0fSB7CisJCV9jaGVja291dCAkdGhpcworCQlyZXR1cm4gMQorCX0KKworCWRlbGV0ZV90aGlzCisJcmV0dXJuIDEKK30KKworbWV0aG9kIF9ub29wIHt9IHt9CisKK21ldGhvZCBfZmluaXNoX2ZldGNoIHtva30geworCWlmIHskb2t9IHsKKwkJc2V0IGxfdHJjayBbbGluZGV4ICRmZXRjaF9zcGVjIDBdCisJCWlmIHskbF90cmNrIGVxIHt9fSB7CisJCQlzZXQgbF90cmNrIEZFVENIX0hFQUQKKwkJfQorCQlpZiB7W2NhdGNoIHtzZXQgbmV3X2hhc2ggW2dpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRsX3RyY2teMCJdfSBlcnJdfSB7CisJCQlzZXQgb2sgMAorCQkJJHdfY29ucyBpbnNlcnQgW21jICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiICRsX3RyY2tdCisJCQkkd19jb25zIGluc2VydCAkZXJyCisJCX0KKwl9CisKKwkkd19jb25zIGRvbmUgJG9rCisJc2V0IHdfY29ucyB7fQorCXdtIHByb3RvY29sICR3IFdNX0RFTEVURV9XSU5ET1cge30KKworCWlmIHskb2t9IHsKKwkJZGVzdHJveSAkdworCQlzZXQgdyB7fQorCX0gZWxzZSB7CisJCWJ1dHRvbiAkdy5jbG9zZSAtdGV4dCBbbWMgQ2xvc2VdIC1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHddCisJCXBhY2sgJHcuY2xvc2UgLXNpZGUgYm90dG9tIC1hbmNob3IgZSAtcGFkeCAxMCAtcGFkeSAxMAorCX0KKworCXNldCBmZXRjaF9vayAkb2sKK30KKworbWV0aG9kIF91cGRhdGVfcmVmIHt9IHsKKwlnbG9iYWwgbnVsbF9zaGExIGN1cnJlbnRfYnJhbmNoIHJlcG9fY29uZmlnCisKKwlzZXQgcmVmICRuZXdfcmVmCisJc2V0IG5ldyAkbmV3X2hhc2gKKworCXNldCBpc19jdXJyZW50IDAKKwlzZXQgcmggcmVmcy9oZWFkcy8KKwlzZXQgcm4gW3N0cmluZyBsZW5ndGggJHJoXQorCWlmIHtbc3RyaW5nIGVxdWFsIC1sZW5ndGggJHJuICRyaCAkcmVmXX0geworCQlzZXQgbmV3YnJhbmNoIFtzdHJpbmcgcmFuZ2UgJHJlZiAkcm4gZW5kXQorCQlpZiB7JGN1cnJlbnRfYnJhbmNoIGVxICRuZXdicmFuY2h9IHsKKwkJCXNldCBpc19jdXJyZW50IDEKKwkJfQorCX0gZWxzZSB7CisJCXNldCBuZXdicmFuY2ggJHJlZgorCX0KKworCWlmIHtbY2F0Y2gge3NldCBjdXIgW2dpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRyZWZeMCJdfV19IHsKKwkJIyBBc3N1bWUgaXQgZG9lcyBub3QgZXhpc3QsIGFuZCB0aGF0IGlzIHdoYXQgdGhlIGVycm9yIHdhcy4KKwkJIworCQlpZiB7ISRjcmVhdGV9IHsKKwkJCV9lcnJvciAkdGhpcyBbbWMgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIgJG5ld2JyYW5jaF0KKwkJCXJldHVybiAwCisJCX0KKworCQlzZXQgcmVmbG9nX21zZyAiYnJhbmNoOiBDcmVhdGVkIGZyb20gJG5ld19leHByIgorCQlzZXQgY3VyICRudWxsX3NoYTEKKworCQlpZiB7KCRyZXBvX2NvbmZpZyhicmFuY2guYXV0b3NldHVwbWVyZ2UpIGVxIHt0cnVlfQorCQkJfHwgJHJlcG9fY29uZmlnKGJyYW5jaC5hdXRvc2V0dXBtZXJnZSkgZXEge2Fsd2F5c30pCisJCQkmJiAkcmVtb3RlX3NvdXJjZSBuZSB7fQorCQkJJiYgInJlZnMvaGVhZHMvJG5ld2JyYW5jaCIgZXEgJHJlZn0geworCisJCQlzZXQgY19yZW1vdGUgW2xpbmRleCAkcmVtb3RlX3NvdXJjZSAxXQorCQkJc2V0IGNfbWVyZ2UgW2xpbmRleCAkcmVtb3RlX3NvdXJjZSAyXQorCQkJaWYge1tjYXRjaCB7CisJCQkJCWdpdCBjb25maWcgYnJhbmNoLiRuZXdicmFuY2gucmVtb3RlICRjX3JlbW90ZQorCQkJCQlnaXQgY29uZmlnIGJyYW5jaC4kbmV3YnJhbmNoLm1lcmdlICAkY19tZXJnZQorCQkJCX0gZXJyXX0geworCQkJCV9lcnJvciAkdGhpcyBbc3RyY2F0IFwKKwkJCQlbbWMgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iICRuZXdicmFuY2hdIFwKKwkJCQkiXG5cbiRlcnIiXQorCQkJfQorCQl9CisJfSBlbHNlaWYgeyRjcmVhdGUgJiYgJG1lcmdlX3R5cGUgZXEge25vbmV9fSB7CisJCSMgV2Ugd2VyZSB0b2xkIHRvIGNyZWF0ZSBpdCwgYnV0IG5vdCBkbyBhIG1lcmdlLgorCQkjIEJhZC4gIE5hbWUgc2hvdWxkbid0IGhhdmUgZXhpc3RlZC4KKwkJIworCQlfZXJyb3IgJHRoaXMgW21jICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iICRuZXdicmFuY2hdCisJCXJldHVybiAwCisJfSBlbHNlaWYgeyEkY3JlYXRlICYmICRtZXJnZV90eXBlIGVxIHtub25lfX0geworCQkjIFdlIGFyZW4ndCBjcmVhdGluZywgaXQgZXhpc3RzIGFuZCB3ZSBkb24ndCBtZXJnZS4KKwkJIyBXZSBhcmUgcHJvYmFibHkganVzdCBhIHNpbXBsZSBicmFuY2ggc3dpdGNoLgorCQkjIFVzZSB3aGF0ZXZlciB2YWx1ZSB3ZSBqdXN0IHJlYWQuCisJCSMKKwkJc2V0IG5ldyAgICAgICRjdXIKKwkJc2V0IG5ld19oYXNoICRjdXIKKwl9IGVsc2VpZiB7JG5ldyBlcSAkY3VyfSB7CisJCSMgTm8gbWVyZ2Ugd291bGQgYmUgcmVxdWlyZWQsIGRvbid0IGNvbXB1dGUgYW55dGhpbmcuCisJCSMKKwl9IGVsc2UgeworCQljYXRjaCB7c2V0IG1lcmdlX2Jhc2UgW2dpdCBtZXJnZS1iYXNlICRuZXcgJGN1cl19CisJCWlmIHskbWVyZ2VfYmFzZSBlcSAkY3VyfSB7CisJCQkjIFRoZSBjdXJyZW50IGJyYW5jaCBpcyBvbGRlci4KKwkJCSMKKwkJCXNldCByZWZsb2dfbXNnICJtZXJnZSAkbmV3X2V4cHI6IEZhc3QtZm9yd2FyZCIKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAtLSAkbWVyZ2VfdHlwZSB7CisJCQlmZiB7CisJCQkJaWYgeyRtZXJnZV9iYXNlIGVxICRuZXd9IHsKKwkJCQkJIyBUaGUgY3VycmVudCBicmFuY2ggaXMgYWN0dWFsbHkgbmV3ZXIuCisJCQkJCSMKKwkJCQkJc2V0IG5ldyAkY3VyCisJCQkJCXNldCBuZXdfaGFzaCAkY3VyCisJCQkJfSBlbHNlIHsKKwkJCQkJX2Vycm9yICR0aGlzIFttYyAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG5cbkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG5BIG1lcmdlIGlzIHJlcXVpcmVkLiIgJG5ld2JyYW5jaCAkbmV3X2V4cHJdCisJCQkJCXJldHVybiAwCisJCQkJfQorCQkJfQorCQkJcmVzZXQgeworCQkJCSMgVGhlIGN1cnJlbnQgYnJhbmNoIHdpbGwgbG9zZSB0aGluZ3MuCisJCQkJIworCQkJCWlmIHtbX2NvbmZpcm1fcmVzZXQgJHRoaXMgJGN1cl19IHsKKwkJCQkJc2V0IHJlZmxvZ19tc2cgInJlc2V0ICRuZXdfZXhwciIKKwkJCQl9IGVsc2UgeworCQkJCQlyZXR1cm4gMAorCQkJCX0KKwkJCX0KKwkJCWRlZmF1bHQgeworCQkJCV9lcnJvciAkdGhpcyBbbWMgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iICRtZXJnZV90eXBlXQorCQkJCXJldHVybiAwCisJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiB7JG5ldyBuZSAkY3VyfSB7CisJCWlmIHskaXNfY3VycmVudH0geworCQkJIyBObyBzbyBmYXN0LiAgV2Ugc2hvdWxkIGRlZmVyIHRoaXMgaW4gY2FzZQorCQkJIyB3ZSBjYW5ub3QgdXBkYXRlIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4KKwkJCSMKKwkJCXNldCB1cGRhdGVfb2xkICRjdXIKKwkJCXJldHVybiAxCisJCX0KKworCQlpZiB7W2NhdGNoIHsKKwkJCQlnaXQgdXBkYXRlLXJlZiAtbSAkcmVmbG9nX21zZyAkcmVmICRuZXcgJGN1cgorCQkJfSBlcnJdfSB7CisJCQlfZXJyb3IgJHRoaXMgW3N0cmNhdCBbbWMgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iICRuZXdicmFuY2hdICJcblxuJGVyciJdCisJCQlyZXR1cm4gMAorCQl9CisJfQorCisJcmV0dXJuIDEKK30KKworbWV0aG9kIF9jaGVja291dCB7fSB7CisJaWYge1tsb2NrX2luZGV4IGNoZWNrb3V0X29wXX0geworCQlhZnRlciBpZGxlIFtjYiBfc3RhcnRfY2hlY2tvdXRdCisJfSBlbHNlIHsKKwkJX2Vycm9yICR0aGlzIFttYyAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIl0KKwkJZGVsZXRlX3RoaXMKKwl9Cit9CisKK21ldGhvZCBfc3RhcnRfY2hlY2tvdXQge30geworCWdsb2JhbCBIRUFEIGNvbW1pdF90eXBlCisKKwkjIC0tIE91ciBpbiBtZW1vcnkgc3RhdGUgc2hvdWxkIG1hdGNoIHRoZSByZXBvc2l0b3J5LgorCSMKKwlyZXBvc2l0b3J5X3N0YXRlIGN1clR5cGUgb2xkX2hhc2ggY3VyTUVSR0VfSEVBRAorCWlmIHtbc3RyaW5nIG1hdGNoIGFtZW5kKiAkY29tbWl0X3R5cGVdCisJCSYmICRjdXJUeXBlIGVxIHtub3JtYWx9CisJCSYmICRvbGRfaGFzaCBlcSAkSEVBRH0geworCX0gZWxzZWlmIHskY29tbWl0X3R5cGUgbmUgJGN1clR5cGUgfHwgJEhFQUQgbmUgJG9sZF9oYXNofSB7CisJCWluZm9fcG9wdXAgW21jICJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS4KKworQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBIHJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLgorCitUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy4KKyJdCisJCXVubG9ja19pbmRleAorCQlyZXNjYW4gdWlfcmVhZHkKKwkJZGVsZXRlX3RoaXMKKwkJcmV0dXJuCisJfQorCisJaWYgeyRvbGRfaGFzaCBlcSAkbmV3X2hhc2h9IHsKKwkJX2FmdGVyX3JlYWR0cmVlICR0aGlzCisJfSBlbHNlaWYge1tpc19jb25maWdfdHJ1ZSBndWkudHJ1c3RtdGltZV19IHsKKwkJX3JlYWR0cmVlICR0aGlzCisJfSBlbHNlIHsKKwkJdWlfc3RhdHVzIFttYyAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiJdCisJCXNldCBmZCBbZ2l0X3JlYWQgdXBkYXRlLWluZGV4IFwKKwkJCS1xIFwKKwkJCS0tdW5tZXJnZWQgXAorCQkJLS1pZ25vcmUtbWlzc2luZyBcCisJCQktLXJlZnJlc2ggXAorCQkJXQorCQlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMCAtdHJhbnNsYXRpb24gYmluYXJ5CisJCWZpbGVldmVudCAkZmQgcmVhZGFibGUgW2NiIF9yZWZyZXNoX3dhaXQgJGZkXQorCX0KK30KKworbWV0aG9kIF9yZWZyZXNoX3dhaXQge2ZkfSB7CisJcmVhZCAkZmQKKwlpZiB7W2VvZiAkZmRdfSB7CisJCWNsb3NlICRmZAorCQlfcmVhZHRyZWUgJHRoaXMKKwl9Cit9CisKK21ldGhvZCBfbmFtZSB7fSB7CisJaWYgeyRuZXdfcmVmIGVxIHt9fSB7CisJCXJldHVybiBbc3RyaW5nIHJhbmdlICRuZXdfaGFzaCAwIDddCisJfQorCisJc2V0IHJoIHJlZnMvaGVhZHMvCisJc2V0IHJuIFtzdHJpbmcgbGVuZ3RoICRyaF0KKwlpZiB7W3N0cmluZyBlcXVhbCAtbGVuZ3RoICRybiAkcmggJG5ld19yZWZdfSB7CisJCXJldHVybiBbc3RyaW5nIHJhbmdlICRuZXdfcmVmICRybiBlbmRdCisJfSBlbHNlIHsKKwkJcmV0dXJuICRuZXdfcmVmCisJfQorfQorCittZXRob2QgX3JlYWR0cmVlIHt9IHsKKwlnbG9iYWwgSEVBRAorCisJc2V0IHJlYWR0cmVlX2Qge30KKwkkOjptYWluX3N0YXR1cyBzdGFydCBcCisJCVttYyAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIgW19uYW1lICR0aGlzXV0gXAorCQlbbWMgImZpbGVzIGNoZWNrZWQgb3V0Il0KKworCXNldCBmZCBbZ2l0X3JlYWQgLS1zdGRlcnIgcmVhZC10cmVlIFwKKwkJLW0gXAorCQktdSBcCisJCS12IFwKKwkJLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBcCisJCSRIRUFEIFwKKwkJJG5ld19oYXNoIFwKKwkJXQorCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBiaW5hcnkKKwlmaWxlZXZlbnQgJGZkIHJlYWRhYmxlIFtjYiBfcmVhZHRyZWVfd2FpdCAkZmRdCit9CisKK21ldGhvZCBfcmVhZHRyZWVfd2FpdCB7ZmR9IHsKKwlnbG9iYWwgY3VycmVudF9icmFuY2gKKworCXNldCBidWYgW3JlYWQgJGZkXQorCSQ6Om1haW5fc3RhdHVzIHVwZGF0ZV9tZXRlciAkYnVmCisJYXBwZW5kIHJlYWR0cmVlX2QgJGJ1ZgorCisJZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDEKKwlpZiB7IVtlb2YgJGZkXX0geworCQlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMAorCQlyZXR1cm4KKwl9CisKKwlpZiB7W2NhdGNoIHtjbG9zZSAkZmR9XX0geworCQlzZXQgZXJyICRyZWFkdHJlZV9kCisJCXJlZ3N1YiB7XmZhdGFsOiB9ICRlcnIge30gZXJyCisJCSQ6Om1haW5fc3RhdHVzIHN0b3AgW21jICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIiBbX25hbWUgJHRoaXNdXQorCQl3YXJuX3BvcHVwIFtzdHJjYXQgW21jICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiJdICIKKworJGVycgorCisiIFttYyAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iICRjdXJyZW50X2JyYW5jaF1dCisJCXVubG9ja19pbmRleAorCQlkZWxldGVfdGhpcworCQlyZXR1cm4KKwl9CisKKwkkOjptYWluX3N0YXR1cyBzdG9wCisJX2FmdGVyX3JlYWR0cmVlICR0aGlzCit9CisKK21ldGhvZCBfYWZ0ZXJfcmVhZHRyZWUge30geworCWdsb2JhbCBzZWxlY3RlZF9jb21taXRfdHlwZSBjb21taXRfdHlwZSBIRUFEIE1FUkdFX0hFQUQgUEFSRU5UCisJZ2xvYmFsIGN1cnJlbnRfYnJhbmNoIGlzX2RldGFjaGVkCisJZ2xvYmFsIHVpX2NvbW0KKworCXNldCBuYW1lIFtfbmFtZSAkdGhpc10KKwlzZXQgbG9nICJjaGVja291dDogbW92aW5nIgorCWlmIHshJGlzX2RldGFjaGVkfSB7CisJCWFwcGVuZCBsb2cgIiBmcm9tICRjdXJyZW50X2JyYW5jaCIKKwl9CisKKwkjIC0tIE1vdmUvY3JlYXRlIEhFQUQgYXMgYSBzeW1ib2xpYyByZWYuICBDb3JlIGdpdCBkb2VzIG5vdAorCSMgICAgZXZlbiBjaGVjayBmb3IgZmFpbHVyZSBoZXJlLCBpdCBKdXN0IFdvcmtzKHRtKS4gIElmIGl0CisJIyAgICBkb2Vzbid0IHdlIGFyZSBpbiBzb21lIHJlYWxseSB1Z2x5IHN0YXRlIHRoYXQgaXMgZGlmZmljdWx0CisJIyAgICB0byByZWNvdmVyIGZyb20gd2l0aGluIGdpdC1ndWkuCisJIworCXNldCByaCByZWZzL2hlYWRzLworCXNldCBybiBbc3RyaW5nIGxlbmd0aCAkcmhdCisJaWYge1tzdHJpbmcgZXF1YWwgLWxlbmd0aCAkcm4gJHJoICRuZXdfcmVmXX0geworCQlzZXQgbmV3X2JyYW5jaCBbc3RyaW5nIHJhbmdlICRuZXdfcmVmICRybiBlbmRdCisJCWlmIHskaXNfZGV0YWNoZWQgfHwgJGN1cnJlbnRfYnJhbmNoIG5lICRuZXdfYnJhbmNofSB7CisJCQlhcHBlbmQgbG9nICIgdG8gJG5ld19icmFuY2giCisJCQlpZiB7W2NhdGNoIHsKKwkJCQkJZ2l0IHN5bWJvbGljLXJlZiAtbSAkbG9nIEhFQUQgJG5ld19yZWYKKwkJCQl9IGVycl19IHsKKwkJCQlfZmF0YWwgJHRoaXMgJGVycgorCQkJfQorCQkJc2V0IGN1cnJlbnRfYnJhbmNoICRuZXdfYnJhbmNoCisJCQlzZXQgaXNfZGV0YWNoZWQgMAorCQl9CisJfSBlbHNlIHsKKwkJaWYgeyEkaXNfZGV0YWNoZWQgfHwgJG5ld19oYXNoIG5lICRIRUFEfSB7CisJCQlhcHBlbmQgbG9nICIgdG8gJG5ld19leHByIgorCQkJaWYge1tjYXRjaCB7CisJCQkJCV9kZXRhY2hfSEVBRCAkbG9nICRuZXdfaGFzaAorCQkJCX0gZXJyXX0geworCQkJCV9mYXRhbCAkdGhpcyAkZXJyCisJCQl9CisJCX0KKwkJc2V0IGN1cnJlbnRfYnJhbmNoIEhFQUQKKwkJc2V0IGlzX2RldGFjaGVkIDEKKwl9CisKKwkjIC0tIFdlIGhhZCB0byBkZWZlciB1cGRhdGluZyB0aGUgYnJhbmNoIGl0c2VsZiB1bnRpbCB3ZQorCSMgICAga25ldyB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd291bGQgdXBkYXRlLiAgU28gbm93IHdlCisJIyAgICBuZWVkIHRvIGZpbmlzaCB0aGF0IHdvcmsuICBJZiBpdCBmYWlscyB3ZSdyZSBpbiBiaWcKKwkjICAgIHRyb3VibGUuCisJIworCWlmIHskdXBkYXRlX29sZCBuZSB7fX0geworCQlpZiB7W2NhdGNoIHsKKwkJCQlnaXQgdXBkYXRlLXJlZiBcCisJCQkJCS1tICRyZWZsb2dfbXNnIFwKKwkJCQkJJG5ld19yZWYgXAorCQkJCQkkbmV3X2hhc2ggXAorCQkJCQkkdXBkYXRlX29sZAorCQkJfSBlcnJdfSB7CisJCQlfZmF0YWwgJHRoaXMgJGVycgorCQl9CisJfQorCisJaWYgeyRpc19kZXRhY2hlZH0geworCQlpbmZvX3BvcHVwIFttYyAiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guCisKK0lmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgQ2hlY2tvdXQnLiJdCisJfQorCisJIyAtLSBSdW4gdGhlIHBvc3QtY2hlY2tvdXQgaG9vay4KKwkjCisJc2V0IGZkX3BoIFtnaXRob29rX3JlYWQgcG9zdC1jaGVja291dCAkb2xkX2hhc2ggJG5ld19oYXNoIDFdCisJaWYgeyRmZF9waCBuZSB7fX0geworCQlnbG9iYWwgcGNoX2Vycm9yCisJCXNldCBwY2hfZXJyb3Ige30KKwkJZmNvbmZpZ3VyZSAkZmRfcGggLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGJpbmFyeSAtZW9mY2hhciB7fQorCQlmaWxlZXZlbnQgJGZkX3BoIHJlYWRhYmxlIFtjYiBfcG9zdGNoZWNrb3V0X3dhaXQgJGZkX3BoXQorCX0gZWxzZSB7CisJCV91cGRhdGVfcmVwb19zdGF0ZSAkdGhpcworCX0KK30KKworbWV0aG9kIF9wb3N0Y2hlY2tvdXRfd2FpdCB7ZmRfcGh9IHsKKwlnbG9iYWwgcGNoX2Vycm9yCisKKwlhcHBlbmQgcGNoX2Vycm9yIFtyZWFkICRmZF9waF0KKwlmY29uZmlndXJlICRmZF9waCAtYmxvY2tpbmcgMQorCWlmIHtbZW9mICRmZF9waF19IHsKKwkJaWYge1tjYXRjaCB7Y2xvc2UgJGZkX3BofV19IHsKKwkJCWhvb2tfZmFpbGVkX3BvcHVwIHBvc3QtY2hlY2tvdXQgJHBjaF9lcnJvciAwCisJCX0KKwkJdW5zZXQgcGNoX2Vycm9yCisJCV91cGRhdGVfcmVwb19zdGF0ZSAkdGhpcworCQlyZXR1cm4KKwl9CisJZmNvbmZpZ3VyZSAkZmRfcGggLWJsb2NraW5nIDAKK30KKworbWV0aG9kIF91cGRhdGVfcmVwb19zdGF0ZSB7fSB7CisJIyAtLSBVcGRhdGUgb3VyIHJlcG9zaXRvcnkgc3RhdGUuICBJZiB3ZSB3ZXJlIHByZXZpb3VzbHkgaW4KKwkjICAgIGFtZW5kIG1vZGUgd2UgbmVlZCB0byB0b3NzIHRoZSBjdXJyZW50IGJ1ZmZlciBhbmQgZG8gYQorCSMgICAgZnVsbCByZXNjYW4gdG8gdXBkYXRlIG91ciBmaWxlIGxpc3RzLiAgSWYgd2Ugd2VyZW4ndCBpbgorCSMgICAgYW1lbmQgbW9kZSBvdXIgZmlsZSBsaXN0cyBhcmUgYWNjdXJhdGUgYW5kIHdlIGNhbiBhdm9pZAorCSMgICAgdGhlIHJlc2Nhbi4KKwkjCisJZ2xvYmFsIHNlbGVjdGVkX2NvbW1pdF90eXBlIGNvbW1pdF90eXBlIEhFQUQgTUVSR0VfSEVBRCBQQVJFTlQKKwlnbG9iYWwgdWlfY29tbQorCisJdW5sb2NrX2luZGV4CisJc2V0IG5hbWUgW19uYW1lICR0aGlzXQorCXNldCBzZWxlY3RlZF9jb21taXRfdHlwZSBuZXcKKwlpZiB7W3N0cmluZyBtYXRjaCBhbWVuZCogJGNvbW1pdF90eXBlXX0geworCQkkdWlfY29tbSBkZWxldGUgMC4wIGVuZAorCQkkdWlfY29tbSBlZGl0IHJlc2V0CisJCSR1aV9jb21tIGVkaXQgbW9kaWZpZWQgZmFsc2UKKwkJcmVzY2FuIFtsaXN0IHVpX3N0YXR1cyBbbWMgIkNoZWNrZWQgb3V0ICclcycuIiAkbmFtZV1dCisJfSBlbHNlIHsKKwkJcmVwb3NpdG9yeV9zdGF0ZSBjb21taXRfdHlwZSBIRUFEIE1FUkdFX0hFQUQKKwkJc2V0IFBBUkVOVCAkSEVBRAorCQl1aV9zdGF0dXMgW21jICJDaGVja2VkIG91dCAnJXMnLiIgJG5hbWVdCisJfQorCWRlbGV0ZV90aGlzCit9CisKK2dpdC12ZXJzaW9uIHByb2MgX2RldGFjaF9IRUFEIHtsb2cgbmV3fSB7CisJPj0gMS41LjMgeworCQlnaXQgdXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1tICRsb2cgSEVBRCAkbmV3CisJfQorCWRlZmF1bHQgeworCQlzZXQgcCBbZ2l0ZGlyIEhFQURdCisJCWZpbGUgZGVsZXRlICRwCisJCXNldCBmZCBbb3BlbiAkcCB3XQorCQlmY29uZmlndXJlICRmZCAtdHJhbnNsYXRpb24gbGYgLWVuY29kaW5nIHV0Zi04CisJCXB1dHMgJGZkICRuZXcKKwkJY2xvc2UgJGZkCisJfQorfQorCittZXRob2QgX2NvbmZpcm1fcmVzZXQge2N1cn0geworCXNldCByZXNldF9vayAwCisJc2V0IG5hbWUgW19uYW1lICR0aGlzXQorCXNldCBnaXRrIFtsaXN0IGRvX2dpdGsgW2xpc3QgJGN1ciBeJG5ld19oYXNoXV0KKworCV90b3BsZXZlbCAkdGhpcyB7Q29uZmlybSBCcmFuY2ggUmVzZXR9CisJcGFjayBbbGFiZWwgJHcubXNnMSBcCisJCS1hbmNob3IgdyBcCisJCS1qdXN0aWZ5IGxlZnQgXAorCQktdGV4dCBbbWMgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiICRuYW1lICRuZXdfZXhwcl1cCisJCV0gLWFuY2hvciB3CisKKwlzZXQgbGlzdCAkdy5saXN0LmwKKwlmcmFtZSAkdy5saXN0CisJdGV4dCAkbGlzdCBcCisJCS1mb250IGZvbnRfZGlmZiBcCisJCS13aWR0aCA4MCBcCisJCS1oZWlnaHQgMTAgXAorCQktd3JhcCBub25lIFwKKwkJLXhzY3JvbGxjb21tYW5kIFtsaXN0ICR3Lmxpc3Quc2J4IHNldF0gXAorCQkteXNjcm9sbGNvbW1hbmQgW2xpc3QgJHcubGlzdC5zYnkgc2V0XQorCXNjcm9sbGJhciAkdy5saXN0LnNieCAtb3JpZW50IGggLWNvbW1hbmQgW2xpc3QgJGxpc3QgeHZpZXddCisJc2Nyb2xsYmFyICR3Lmxpc3Quc2J5IC1vcmllbnQgdiAtY29tbWFuZCBbbGlzdCAkbGlzdCB5dmlld10KKwlwYWNrICR3Lmxpc3Quc2J4IC1maWxsIHggLXNpZGUgYm90dG9tCisJcGFjayAkdy5saXN0LnNieSAtZmlsbCB5IC1zaWRlIHJpZ2h0CisJcGFjayAkbGlzdCAtZmlsbCBib3RoIC1leHBhbmQgMQorCXBhY2sgJHcubGlzdCAtZmlsbCBib3RoIC1leHBhbmQgMSAtcGFkeCA1IC1wYWR5IDUKKworCXBhY2sgW2xhYmVsICR3Lm1zZzIgXAorCQktYW5jaG9yIHcgXAorCQktanVzdGlmeSBsZWZ0IFwKKwkJLXRleHQgW21jICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIl0gXAorCQldCisJcGFjayBbbGFiZWwgJHcubXNnMyBcCisJCS1hbmNob3IgdyBcCisJCS1qdXN0aWZ5IGxlZnQgXAorCQktdGV4dCBbbWMgIlJlc2V0ICclcyc/IiAkbmFtZV0gXAorCQldCisKKwlmcmFtZSAkdy5idXR0b25zCisJYnV0dG9uICR3LmJ1dHRvbnMudmlzdWFsaXplIFwKKwkJLXRleHQgW21jIFZpc3VhbGl6ZV0gXAorCQktY29tbWFuZCAkZ2l0aworCXBhY2sgJHcuYnV0dG9ucy52aXN1YWxpemUgLXNpZGUgbGVmdAorCWJ1dHRvbiAkdy5idXR0b25zLnJlc2V0IFwKKwkJLXRleHQgW21jIFJlc2V0XSBcCisJCS1jb21tYW5kICIKKwkJCXNldCBAcmVzZXRfb2sgMQorCQkJZGVzdHJveSAkdworCQkiCisJcGFjayAkdy5idXR0b25zLnJlc2V0IC1zaWRlIHJpZ2h0CisJYnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIFwKKwkJLWRlZmF1bHQgYWN0aXZlIFwKKwkJLXRleHQgW21jIENhbmNlbF0gXAorCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQorCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQorCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAorCisJc2V0IGZkIFtnaXRfcmVhZCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lICRjdXIgXiRuZXdfaGFzaF0KKwl3aGlsZSB7W2dldHMgJGZkIGxpbmVdID4gMH0geworCQlzZXQgYWJiciBbc3RyaW5nIHJhbmdlICRsaW5lIDAgN10KKwkJc2V0IHN1YmogW3N0cmluZyByYW5nZSAkbGluZSA0MSBlbmRdCisJCSRsaXN0IGluc2VydCBlbmQgIiRhYmJyICAkc3VialxuIgorCX0KKwljbG9zZSAkZmQKKwkkbGlzdCBjb25maWd1cmUgLXN0YXRlIGRpc2FibGVkCisKKwliaW5kICR3ICAgIDxLZXktdj4gJGdpdGsKKwliaW5kICR3IDxWaXNpYmlsaXR5PiAiCisJCWdyYWIgJHcKKwkJZm9jdXMgJHcuYnV0dG9ucy5jYW5jZWwKKwkiCisJYmluZCAkdyA8S2V5LVJldHVybj4gW2xpc3QgZGVzdHJveSAkd10KKwliaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQorCXRrd2FpdCB3aW5kb3cgJHcKKwlyZXR1cm4gJHJlc2V0X29rCit9CisKK21ldGhvZCBfZXJyb3Ige21zZ30geworCWlmIHtbd2luZm8gaXNtYXBwZWQgJHBhcmVudF93XX0geworCQlzZXQgcCAkcGFyZW50X3cKKwl9IGVsc2UgeworCQlzZXQgcCAuCisJfQorCisJdGtfbWVzc2FnZUJveCBcCisJCS1pY29uIGVycm9yIFwKKwkJLXR5cGUgb2sgXAorCQktdGl0bGUgW3dtIHRpdGxlICRwXSBcCisJCS1wYXJlbnQgJHAgXAorCQktbWVzc2FnZSAkbXNnCit9CisKK21ldGhvZCBfdG9wbGV2ZWwge3RpdGxlfSB7CisJcmVnc3ViIC1hbGwgezo6fSAkdGhpcyB7X199IHcKKwlzZXQgdyAuJHcKKworCWlmIHtbd2luZm8gaXNtYXBwZWQgJHBhcmVudF93XX0geworCQlzZXQgcCAkcGFyZW50X3cKKwl9IGVsc2UgeworCQlzZXQgcCAuCisJfQorCisJdG9wbGV2ZWwgJHcKKwl3bSB0aXRsZSAkdyAkdGl0bGUKKwl3bSBnZW9tZXRyeSAkdyAiK1t3aW5mbyByb290eCAkcF0rW3dpbmZvIHJvb3R5ICRwXSIKK30KKworbWV0aG9kIF9mYXRhbCB7ZXJyfSB7CisJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guCisKK1RoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCB5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS4KKworVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iIFthcHBuYW1lXV0gIgorCiskZXJyIl0KKwlleGl0IDEKK30KKworfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvY2hvb3NlX2ZvbnQudGNsIGIvZ2l0LWd1aS9saWIvY2hvb3NlX2ZvbnQudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZTUwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi9jaG9vc2VfZm9udC50Y2wKQEAgLTAsMCArMSwxNzEgQEAKKyMgZ2l0LWd1aSBmb250IGNob29zZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQorCitjbGFzcyBjaG9vc2VfZm9udCB7CisKK2ZpZWxkIHcKK2ZpZWxkIHdfZmFtaWx5ICAgIDsgIyBVSSB3aWRnZXQgb2YgYWxsIGtub3duIGZhbWlseSBuYW1lcworZmllbGQgd19leGFtcGxlICAgOyAjIEV4YW1wbGUgdG8gc2hvd2Nhc2UgdGhlIGNob3NlbiBmb250CisKK2ZpZWxkIGZfZmFtaWx5ICAgIDsgIyBDdXJyZW50bHkgY2hvc2VuIGZhbWlseSBuYW1lCitmaWVsZCBmX3NpemUgICAgICA7ICMgQ3VycmVudGx5IGNob3NlbiBwb2ludCBzaXplCisKK2ZpZWxkIHZfZmFtaWx5ICAgIDsgIyBOYW1lIG9mIGdsb2JhbCB2YXJpYWJsZSBmb3IgZmFtaWx5CitmaWVsZCB2X3NpemUgICAgICA7ICMgTmFtZSBvZiBnbG9iYWwgdmFyaWFibGUgZm9yIHNpemUKKwordmFyaWFibGUgYWxsX2ZhbWlsaWVzIFtsaXN0XSAgOyAjIEFsbCBmb250cyBrbm93biB0byBUaworCitjb25zdHJ1Y3RvciBwaWNrIHtwYXRoIHRpdGxlIGFfZmFtaWx5IGFfc2l6ZX0geworCXZhcmlhYmxlIGFsbF9mYW1pbGllcworCWdsb2JhbCB1c2VfdHRrIE5TCisKKwlzZXQgdl9mYW1pbHkgJGFfZmFtaWx5CisJc2V0IHZfc2l6ZSAkYV9zaXplCisKKwl1cHZhciAjMCAkdl9mYW1pbHkgcHZfZmFtaWx5CisJdXB2YXIgIzAgJHZfc2l6ZSBwdl9zaXplCisKKwlzZXQgZl9mYW1pbHkgJHB2X2ZhbWlseQorCXNldCBmX3NpemUgJHB2X3NpemUKKworCW1ha2VfZGlhbG9nIHRvcCB3CisJd20gd2l0aGRyYXcgJHRvcAorCXdtIHRpdGxlICR0b3AgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICR0aXRsZSIKKwl3bSBnZW9tZXRyeSAkdG9wICIrW3dpbmZvIHJvb3R4ICRwYXRoXStbd2luZm8gcm9vdHkgJHBhdGhdIgorCisJJHtOU306OmxhYmVsICR3LmhlYWRlciAtdGV4dCAkdGl0bGUgLWZvbnQgZm9udF91aWJvbGQgLWFuY2hvciBjZW50ZXIKKwlwYWNrICR3LmhlYWRlciAtc2lkZSB0b3AgLWZpbGwgeAorCisJJHtOU306OmZyYW1lICR3LmJ1dHRvbnMKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuc2VsZWN0IFwKKwkJLXRleHQgW21jIFNlbGVjdF0gXAorCQktZGVmYXVsdCBhY3RpdmUgXAorCQktY29tbWFuZCBbY2IgX3NlbGVjdF0KKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIFwKKwkJLXRleHQgW21jIENhbmNlbF0gXAorCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQorCXBhY2sgJHcuYnV0dG9ucy5zZWxlY3QgLXNpZGUgcmlnaHQKKwlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKKwlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKKworCSR7TlN9OjpmcmFtZSAkdy5pbm5lcgorCisJJHtOU306OmZyYW1lICR3LmlubmVyLmZhbWlseQorCSR7TlN9OjpsYWJlbCAkdy5pbm5lci5mYW1pbHkubCBcCisJCS10ZXh0IFttYyAiRm9udCBGYW1pbHkiXSBcCisJCS1hbmNob3IgdworCXNldCB3X2ZhbWlseSAkdy5pbm5lci5mYW1pbHkudgorCXRleHQgJHdfZmFtaWx5IFwKKwkJLWJhY2tncm91bmQgd2hpdGUgXAorCQktZm9yZWdyb3VuZCBibGFjayBcCisJCS1ib3JkZXJ3aWR0aCAxIFwKKwkJLXJlbGllZiBzdW5rZW4gXAorCQktY3Vyc29yICQ6OmN1cnNvcl9wdHIgXAorCQktd3JhcCBub25lIFwKKwkJLXdpZHRoIDMwIFwKKwkJLWhlaWdodCAxMCBcCisJCS15c2Nyb2xsY29tbWFuZCBbbGlzdCAkdy5pbm5lci5mYW1pbHkuc2J5IHNldF0KKwlybXNlbF90YWcgJHdfZmFtaWx5CisJJHtOU306OnNjcm9sbGJhciAkdy5pbm5lci5mYW1pbHkuc2J5IC1jb21tYW5kIFtsaXN0ICR3X2ZhbWlseSB5dmlld10KKwlwYWNrICR3LmlubmVyLmZhbWlseS5sIC1zaWRlIHRvcCAtZmlsbCB4CisJcGFjayAkdy5pbm5lci5mYW1pbHkuc2J5IC1zaWRlIHJpZ2h0IC1maWxsIHkKKwlwYWNrICR3X2ZhbWlseSAtZmlsbCBib3RoIC1leHBhbmQgMQorCisJJHtOU306OmZyYW1lICR3LmlubmVyLnNpemUKKwkke05TfTo6bGFiZWwgJHcuaW5uZXIuc2l6ZS5sIFwKKwkJLXRleHQgW21jICJGb250IFNpemUiXSBcCisJCS1hbmNob3IgdworCXRzcGluYm94ICR3LmlubmVyLnNpemUudiBcCisJCS10ZXh0dmFyaWFibGUgQGZfc2l6ZSBcCisJCS1mcm9tIDIgLXRvIDgwIC1pbmNyZW1lbnQgMSBcCisJCS13aWR0aCAzCisJYmluZCAkdy5pbm5lci5zaXplLnYgPEZvY3VzSW4+IHslVyBzZWxlY3Rpb24gcmFuZ2UgMCBlbmR9CisJcGFjayAkdy5pbm5lci5zaXplLmwgLWZpbGwgeCAtc2lkZSB0b3AKKwlwYWNrICR3LmlubmVyLnNpemUudiAtZmlsbCB4IC1wYWR4IDIKKworCWdyaWQgY29uZmlndXJlICR3LmlubmVyLmZhbWlseSAkdy5pbm5lci5zaXplIC1zdGlja3kgbnNldworCWdyaWQgcm93Y29uZmlndXJlICR3LmlubmVyIDAgLXdlaWdodCAxCisJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHcuaW5uZXIgMCAtd2VpZ2h0IDEKKwlwYWNrICR3LmlubmVyIC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR4IDUgLXBhZHkgNQorCisJJHtOU306OmZyYW1lICR3LmV4YW1wbGUKKwkke05TfTo6bGFiZWwgJHcuZXhhbXBsZS5sIFwKKwkJLXRleHQgW21jICJGb250IEV4YW1wbGUiXSBcCisJCS1hbmNob3IgdworCXNldCB3X2V4YW1wbGUgJHcuZXhhbXBsZS50CisJdGV4dCAkd19leGFtcGxlIFwKKwkJLWJhY2tncm91bmQgd2hpdGUgXAorCQktZm9yZWdyb3VuZCBibGFjayBcCisJCS1ib3JkZXJ3aWR0aCAxIFwKKwkJLXJlbGllZiBzdW5rZW4gXAorCQktaGVpZ2h0IDMgXAorCQktd2lkdGggNDAKKwlybXNlbF90YWcgJHdfZXhhbXBsZQorCSR3X2V4YW1wbGUgdGFnIGNvbmYgZXhhbXBsZSAtanVzdGlmeSBjZW50ZXIKKwkkd19leGFtcGxlIGluc2VydCBlbmQgW21jICJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iXSBleGFtcGxlCisJJHdfZXhhbXBsZSBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCXBhY2sgJHcuZXhhbXBsZS5sIC1maWxsIHgKKwlwYWNrICR3X2V4YW1wbGUgLWZpbGwgeAorCXBhY2sgJHcuZXhhbXBsZSAtZmlsbCB4IC1wYWR4IDUKKworCWlmIHskYWxsX2ZhbWlsaWVzIGVxIHt9fSB7CisJCXNldCBhbGxfZmFtaWxpZXMgW2xzb3J0IFtmb250IGZhbWlsaWVzXV0KKwl9CisKKwkkd19mYW1pbHkgdGFnIGNvbmYgcGljaworCSR3X2ZhbWlseSB0YWcgYmluZCBwaWNrIDxCdXR0b24tMT4gW2NiIF9waWNrX2ZhbWlseSAleCAleV1cO2JyZWFrCisJZm9yZWFjaCBmICRhbGxfZmFtaWxpZXMgeworCQlzZXQgc2VsIFtsaXN0IHBpY2tdCisJCWlmIHskZiBlcSAkZl9mYW1pbHl9IHsKKwkJCWxhcHBlbmQgc2VsIGluX3NlbAorCQl9CisJCSR3X2ZhbWlseSBpbnNlcnQgZW5kICIkZlxuIiAkc2VsCisJfQorCSR3X2ZhbWlseSBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCV91cGRhdGUgJHRoaXMKKworCXRyYWNlIGFkZCB2YXJpYWJsZSBAZl9zaXplIHdyaXRlIFtjYiBfdXBkYXRlXQorCWJpbmQgJHcgPEtleS1Fc2NhcGU+IFtsaXN0IGRlc3Ryb3kgJHddCisJYmluZCAkdyA8S2V5LVJldHVybj4gW2NiIF9zZWxlY3RdXDticmVhaworCWJpbmQgJHcgPFZpc2liaWxpdHk+ICIKKwkJZ3JhYiAkdworCQlmb2N1cyAkdworCSIKKwl3bSBkZWljb25pZnkgJHcKKwl0a3dhaXQgd2luZG93ICR3Cit9CisKK21ldGhvZCBfc2VsZWN0IHt9IHsKKwl1cHZhciAjMCAkdl9mYW1pbHkgcHZfZmFtaWx5CisJdXB2YXIgIzAgJHZfc2l6ZSBwdl9zaXplCisKKwlzZXQgcHZfZmFtaWx5ICRmX2ZhbWlseQorCXNldCBwdl9zaXplICRmX3NpemUKKworCWRlc3Ryb3kgJHcKK30KKworbWV0aG9kIF9waWNrX2ZhbWlseSB7eCB5fSB7CisJdmFyaWFibGUgYWxsX2ZhbWlsaWVzCisKKwlzZXQgaSBbbGluZGV4IFtzcGxpdCBbJHdfZmFtaWx5IGluZGV4IEAkeCwkeV0gLl0gMF0KKwlzZXQgbiBbbGluZGV4ICRhbGxfZmFtaWxpZXMgW2V4cHIgeyRpIC0gMX1dXQorCWlmIHskbiBuZSB7fX0geworCQkkd19mYW1pbHkgdGFnIHJlbW92ZSBpbl9zZWwgMC4wIGVuZAorCQkkd19mYW1pbHkgdGFnIGFkZCBpbl9zZWwgJGkuMCBbZXhwciB7JGkgKyAxfV0uMAorCQlzZXQgZl9mYW1pbHkgJG4KKwkJX3VwZGF0ZSAkdGhpcworCX0KK30KKworbWV0aG9kIF91cGRhdGUge2FyZ3N9IHsKKwl2YXJpYWJsZSBhbGxfZmFtaWxpZXMKKworCXNldCBpIFtsc2VhcmNoIC1leGFjdCAkYWxsX2ZhbWlsaWVzICRmX2ZhbWlseV0KKwlpZiB7JGkgPCAwfSByZXR1cm4KKworCSR3X2V4YW1wbGUgdGFnIGNvbmYgZXhhbXBsZSAtZm9udCBbbGlzdCAkZl9mYW1pbHkgJGZfc2l6ZV0KKwkkd19mYW1pbHkgc2VlIFtleHByIHskaSArIDF9XS4wCit9CisKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbCBiL2dpdC1ndWkvbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQxZGE4Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsCkBAIC0wLDAgKzEsMTEyOSBAQAorIyBnaXQtZ3VpIEdpdCByZXBvc2l0b3J5IGNob29zZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQorCitjbGFzcyBjaG9vc2VfcmVwb3NpdG9yeSB7CisKK2ZpZWxkIHRvcAorZmllbGQgdworZmllbGQgd19ib2R5ICAgICAgOyAjIFdpZGdldCBob2xkaW5nIHRoZSBjZW50ZXIgY29udGVudAorZmllbGQgd19uZXh0ICAgICAgOyAjIE5leHQgYnV0dG9uCitmaWVsZCB3X3F1aXQgICAgICA7ICMgUXVpdCBidXR0b24KK2ZpZWxkIG9fY29ucyAgICAgIDsgIyBDb25zb2xlIG9iamVjdCAoaWYgYWN0aXZlKQorZmllbGQgd190eXBlcyAgICAgOyAjIExpc3Qgb2YgdHlwZSBidXR0b25zIGluIGNsb25lCitmaWVsZCB3X3JlY2VudGxpc3QgOyAjIExpc3Rib3ggY29udGFpbmluZyByZWNlbnQgcmVwb3NpdG9yaWVzCitmaWVsZCB3X2xvY2FscGF0aCAgOyAjIEVudHJ5IHdpZGdldCBib3VuZCB0byBsb2NhbF9wYXRoCisKK2ZpZWxkIGRvbmUgICAgICAgICAgICAgIDAgOyAjIEZpbmlzaGVkIHBpY2tpbmcgdGhlIHJlcG9zaXRvcnk/CitmaWVsZCBsb2NhbF9wYXRoICAgICAgIHt9IDsgIyBXaGVyZSB0aGlzIHJlcG9zaXRvcnkgaXMgbG9jYWxseQorZmllbGQgb3JpZ2luX3VybCAgICAgICB7fSA7ICMgV2hlcmUgd2UgYXJlIGNsb25pbmcgZnJvbQorZmllbGQgb3JpZ2luX25hbWUgIG9yaWdpbiA7ICMgV2hhdCB3ZSBzaGFsbCBjYWxsICdvcmlnaW4nCitmaWVsZCBjbG9uZV90eXBlIGhhcmRsaW5rIDsgIyBUeXBlIG9mIGNsb25lIHRvIGNvbnN0cnVjdAorZmllbGQgcmVjdXJzaXZlICAgICAgdHJ1ZSA7ICMgUmVjdXJzaXZlIGNsb25pbmcgZmxhZworZmllbGQgcmVhZHRyZWVfZXJyICAgICAgICA7ICMgRXJyb3Igb3V0cHV0IGZyb20gcmVhZC10cmVlIChpZiBhbnkpCitmaWVsZCBzb3J0ZWRfcmVjZW50ICAgICAgIDsgIyByZWNlbnQgcmVwb3NpdG9yaWVzIChzb3J0ZWQpCisKK2NvbnN0cnVjdG9yIHBpY2sge30geworCWdsb2JhbCBNMVQgTTFCIHVzZV90dGsgTlMKKworCWlmIHtbc2V0IG1heHJlY2VudCBbZ2V0X2NvbmZpZyBndWkubWF4cmVjZW50cmVwb11dIGVxIHt9fSB7CisJCXNldCBtYXhyZWNlbnQgMTAKKwl9CisKKwltYWtlX2RpYWxvZyB0b3AgdworCXdtIHRpdGxlICR0b3AgW21jICJHaXQgR3VpIl0KKworCWlmIHskdG9wIGVxIHsufX0geworCQltZW51ICR3Lm1iYXIgLXRlYXJvZmYgMAorCQkkdG9wIGNvbmZpZ3VyZSAtbWVudSAkdy5tYmFyCisKKwkJc2V0IG1fcmVwbyAkdy5tYmFyLnJlcG9zaXRvcnkKKwkJJHcubWJhciBhZGQgY2FzY2FkZSBcCisJCQktbGFiZWwgW21jIFJlcG9zaXRvcnldIFwKKwkJCS1tZW51ICRtX3JlcG8KKwkJbWVudSAkbV9yZXBvCisKKwkJaWYge1tpc19NYWNPU1hdfSB7CisJCQkkdy5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBBcHBsZSAtbWVudSAubWJhci5hcHBsZQorCQkJbWVudSAkdy5tYmFyLmFwcGxlCisJCQkkdy5tYmFyLmFwcGxlIGFkZCBjb21tYW5kIFwKKwkJCQktbGFiZWwgW21jICJBYm91dCAlcyIgW2FwcG5hbWVdXSBcCisJCQkJLWNvbW1hbmQgZG9fYWJvdXQKKwkJCSR3Lm1iYXIuYXBwbGUgYWRkIGNvbW1hbmQgXAorCQkJCS1sYWJlbCBbbWMgIlNob3cgU1NIIEtleSJdIFwKKwkJCQktY29tbWFuZCBkb19zc2hfa2V5CisJCX0gZWxzZSB7CisJCQkkdy5tYmFyIGFkZCBjYXNjYWRlIC1sYWJlbCBbbWMgSGVscF0gLW1lbnUgJHcubWJhci5oZWxwCisJCQltZW51ICR3Lm1iYXIuaGVscAorCQkJJHcubWJhci5oZWxwIGFkZCBjb21tYW5kIFwKKwkJCQktbGFiZWwgW21jICJBYm91dCAlcyIgW2FwcG5hbWVdXSBcCisJCQkJLWNvbW1hbmQgZG9fYWJvdXQKKwkJCSR3Lm1iYXIuaGVscCBhZGQgY29tbWFuZCBcCisJCQkJLWxhYmVsIFttYyAiU2hvdyBTU0ggS2V5Il0gXAorCQkJCS1jb21tYW5kIGRvX3NzaF9rZXkKKwkJfQorCisJCXdtIHByb3RvY29sICR0b3AgV01fREVMRVRFX1dJTkRPVyBleGl0CisJCWJpbmQgJHRvcCA8JE0xQi1xPiBleGl0CisJCWJpbmQgJHRvcCA8JE0xQi1RPiBleGl0CisJCWJpbmQgJHRvcCA8S2V5LUVzY2FwZT4gZXhpdAorCX0gZWxzZSB7CisJCXdtIGdlb21ldHJ5ICR0b3AgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgorCQliaW5kICR0b3AgPEtleS1Fc2NhcGU+IFtsaXN0IGRlc3Ryb3kgJHRvcF0KKwkJc2V0IG1fcmVwbyB7fQorCX0KKworCXBhY2sgW2dpdF9sb2dvICR3LmdpdF9sb2dvXSAtc2lkZSBsZWZ0IC1maWxsIHkgLXBhZHggMTAgLXBhZHkgMTAKKworCXNldCB3X2JvZHkgJHcuYm9keQorCXNldCBvcHRzICR3X2JvZHkub3B0aW9ucworCSR7TlN9OjpmcmFtZSAkd19ib2R5CisJdGV4dCAkb3B0cyBcCisJCS1jdXJzb3IgJDo6Y3Vyc29yX3B0ciBcCisJCS1yZWxpZWYgZmxhdCBcCisJCS1iYWNrZ3JvdW5kIFtnZXRfYmdfY29sb3IgJHdfYm9keV0gXAorCQktd3JhcCBub25lIFwKKwkJLXNwYWNpbmcxIDUgXAorCQktd2lkdGggNTAgXAorCQktaGVpZ2h0IDMKKwlwYWNrICRvcHRzIC1hbmNob3IgdyAtZmlsbCB4CisKKwkkb3B0cyB0YWcgY29uZiBsaW5rX25ldyAtZm9yZWdyb3VuZCBibHVlIC11bmRlcmxpbmUgMQorCSRvcHRzIHRhZyBiaW5kIGxpbmtfbmV3IDwxPiBbY2IgX25leHQgbmV3XQorCSRvcHRzIGluc2VydCBlbmQgW21jICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiXSBsaW5rX25ldworCSRvcHRzIGluc2VydCBlbmQgIlxuIgorCWlmIHskbV9yZXBvIG5lIHt9fSB7CisJCSRtX3JlcG8gYWRkIGNvbW1hbmQgXAorCQkJLWNvbW1hbmQgW2NiIF9uZXh0IG5ld10gXAorCQkJLWFjY2VsZXJhdG9yICRNMVQtTiBcCisJCQktbGFiZWwgW21jICJOZXcuLi4iXQorCQliaW5kICR0b3AgPCRNMUItbj4gW2NiIF9uZXh0IG5ld10KKwkJYmluZCAkdG9wIDwkTTFCLU4+IFtjYiBfbmV4dCBuZXddCisJfQorCisJJG9wdHMgdGFnIGNvbmYgbGlua19jbG9uZSAtZm9yZWdyb3VuZCBibHVlIC11bmRlcmxpbmUgMQorCSRvcHRzIHRhZyBiaW5kIGxpbmtfY2xvbmUgPDE+IFtjYiBfbmV4dCBjbG9uZV0KKwkkb3B0cyBpbnNlcnQgZW5kIFttYyAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSJdIGxpbmtfY2xvbmUKKwkkb3B0cyBpbnNlcnQgZW5kICJcbiIKKwlpZiB7JG1fcmVwbyBuZSB7fX0geworCQlpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgIndpbjMyIn0geworCQkJc2V0IGtleSBMCisJCX0gZWxzZSB7CisJCQlzZXQga2V5IEMKKwkJfQorCQkkbV9yZXBvIGFkZCBjb21tYW5kIFwKKwkJCS1jb21tYW5kIFtjYiBfbmV4dCBjbG9uZV0gXAorCQkJLWFjY2VsZXJhdG9yICRNMVQtJGtleSBcCisJCQktbGFiZWwgW21jICJDbG9uZS4uLiJdCisJCWJpbmQgJHRvcCA8JE0xQi1bc3RyaW5nIHRvbG93ZXIgJGtleV0+IFtjYiBfbmV4dCBjbG9uZV0KKwkJYmluZCAkdG9wIDwkTTFCLVtzdHJpbmcgdG91cHBlciAka2V5XT4gW2NiIF9uZXh0IGNsb25lXQorCX0KKworCSRvcHRzIHRhZyBjb25mIGxpbmtfb3BlbiAtZm9yZWdyb3VuZCBibHVlIC11bmRlcmxpbmUgMQorCSRvcHRzIHRhZyBiaW5kIGxpbmtfb3BlbiA8MT4gW2NiIF9uZXh0IG9wZW5dCisJJG9wdHMgaW5zZXJ0IGVuZCBbbWMgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSJdIGxpbmtfb3BlbgorCSRvcHRzIGluc2VydCBlbmQgIlxuIgorCWlmIHskbV9yZXBvIG5lIHt9fSB7CisJCSRtX3JlcG8gYWRkIGNvbW1hbmQgXAorCQkJLWNvbW1hbmQgW2NiIF9uZXh0IG9wZW5dIFwKKwkJCS1hY2NlbGVyYXRvciAkTTFULU8gXAorCQkJLWxhYmVsIFttYyAiT3Blbi4uLiJdCisJCWJpbmQgJHRvcCA8JE0xQi1vPiBbY2IgX25leHQgb3Blbl0KKwkJYmluZCAkdG9wIDwkTTFCLU8+IFtjYiBfbmV4dCBvcGVuXQorCX0KKworCSRvcHRzIGNvbmYgLXN0YXRlIGRpc2FibGVkCisKKwlzZXQgc29ydGVkX3JlY2VudCBbX2dldF9yZWNlbnRyZXBvc10KKwlpZiB7W2xsZW5ndGggJHNvcnRlZF9yZWNlbnRdID4gMH0geworCQlpZiB7JG1fcmVwbyBuZSB7fX0geworCQkJJG1fcmVwbyBhZGQgc2VwYXJhdG9yCisJCQkkbV9yZXBvIGFkZCBjb21tYW5kIFwKKwkJCQktc3RhdGUgZGlzYWJsZWQgXAorCQkJCS1sYWJlbCBbbWMgIlJlY2VudCBSZXBvc2l0b3JpZXMiXQorCQl9CisKKwkJJHtOU306OmxhYmVsICR3X2JvZHkuc3BhY2UKKwkJJHtOU306OmxhYmVsICR3X2JvZHkucmVjZW50bGFiZWwgXAorCQkJLWFuY2hvciB3IFwKKwkJCS10ZXh0IFttYyAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiXQorCQlzZXQgd19yZWNlbnRsaXN0ICR3X2JvZHkucmVjZW50bGlzdAorCQl0ZXh0ICR3X3JlY2VudGxpc3QgXAorCQkJLWN1cnNvciAkOjpjdXJzb3JfcHRyIFwKKwkJCS1yZWxpZWYgZmxhdCBcCisJCQktYmFja2dyb3VuZCBbZ2V0X2JnX2NvbG9yICR3X2JvZHkucmVjZW50bGFiZWxdIFwKKwkJCS13cmFwIG5vbmUgXAorCQkJLXdpZHRoIDUwIFwKKwkJCS1oZWlnaHQgJG1heHJlY2VudAorCQkkd19yZWNlbnRsaXN0IHRhZyBjb25mIGxpbmsgXAorCQkJLWZvcmVncm91bmQgYmx1ZSBcCisJCQktdW5kZXJsaW5lIDEKKwkJc2V0IGhvbWUgJDo6ZW52KEhPTUUpCisJCWlmIHtbaXNfQ3lnd2luXX0geworCQkJc2V0IGhvbWUgW2V4ZWMgY3lncGF0aCAtLXdpbmRvd3MgLS1hYnNvbHV0ZSAkaG9tZV0KKwkJfQorCQlzZXQgaG9tZSAiW2ZpbGUgbm9ybWFsaXplICRob21lXS8iCisJCXNldCBobGVuIFtzdHJpbmcgbGVuZ3RoICRob21lXQorCQlmb3JlYWNoIHAgJHNvcnRlZF9yZWNlbnQgeworCQkJc2V0IHBhdGggJHAKKwkJCWlmIHtbc3RyaW5nIGVxdWFsIC1sZW5ndGggJGhsZW4gJGhvbWUgJHBdfSB7CisJCQkJc2V0IHAgIn4vW3N0cmluZyByYW5nZSAkcCAkaGxlbiBlbmRdIgorCQkJfQorCQkJcmVnc3ViIC1hbGwgIlxuIiAkcCAiXFxuIiBwCisJCQkkd19yZWNlbnRsaXN0IGluc2VydCBlbmQgJHAgbGluaworCQkJJHdfcmVjZW50bGlzdCBpbnNlcnQgZW5kICJcbiIKKworCQkJaWYgeyRtX3JlcG8gbmUge319IHsKKwkJCQkkbV9yZXBvIGFkZCBjb21tYW5kIFwKKwkJCQkJLWNvbW1hbmQgW2NiIF9vcGVuX3JlY2VudF9wYXRoICRwYXRoXSBcCisJCQkJCS1sYWJlbCAiICAgICRwIgorCQkJfQorCQl9CisJCSR3X3JlY2VudGxpc3QgY29uZiAtc3RhdGUgZGlzYWJsZWQKKwkJJHdfcmVjZW50bGlzdCB0YWcgYmluZCBsaW5rIDwxPiBbY2IgX29wZW5fcmVjZW50ICV4LCV5XQorCQlwYWNrICR3X2JvZHkuc3BhY2UgLWFuY2hvciB3IC1maWxsIHgKKwkJcGFjayAkd19ib2R5LnJlY2VudGxhYmVsIC1hbmNob3IgdyAtZmlsbCB4CisJCXBhY2sgJHdfcmVjZW50bGlzdCAtYW5jaG9yIHcgLWZpbGwgeAorCX0KKwlwYWNrICR3X2JvZHkgLWZpbGwgeCAtcGFkeCAxMCAtcGFkeSAxMAorCisJJHtOU306OmZyYW1lICR3LmJ1dHRvbnMKKwlzZXQgd19uZXh0ICR3LmJ1dHRvbnMubmV4dAorCXNldCB3X3F1aXQgJHcuYnV0dG9ucy5xdWl0CisJJHtOU306OmJ1dHRvbiAkd19xdWl0IFwKKwkJLXRleHQgW21jICJRdWl0Il0gXAorCQktY29tbWFuZCBleGl0CisJcGFjayAkd19xdWl0IC1zaWRlIHJpZ2h0IC1wYWR4IDUKKwlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHggMTAgLXBhZHkgMTAKKworCWlmIHskbV9yZXBvIG5lIHt9fSB7CisJCSRtX3JlcG8gYWRkIHNlcGFyYXRvcgorCQkkbV9yZXBvIGFkZCBjb21tYW5kIFwKKwkJCS1sYWJlbCBbbWMgUXVpdF0gXAorCQkJLWNvbW1hbmQgZXhpdCBcCisJCQktYWNjZWxlcmF0b3IgJE0xVC1RCisJfQorCisJYmluZCAkdG9wIDxSZXR1cm4+IFtjYiBfaW52b2tlX25leHRdCisJYmluZCAkdG9wIDxWaXNpYmlsaXR5PiAiCisJCVtjYiBfY2VudGVyXQorCQlncmFiICR0b3AKKwkJZm9jdXMgJHRvcAorCQliaW5kICR0b3AgPFZpc2liaWxpdHk+IHt9CisJIgorCXdtIGRlaWNvbmlmeSAkdG9wCisJdGt3YWl0IHZhcmlhYmxlIEBkb25lCisKKwlncmFiIHJlbGVhc2UgJHRvcAorCWlmIHskdG9wIGVxIHsufX0geworCQlldmFsIGRlc3Ryb3kgW3dpbmZvIGNoaWxkcmVuICR0b3BdCisJfQorfQorCittZXRob2QgX2NlbnRlciB7fSB7CisJc2V0IG54IFt3aW5mbyByZXF3aWR0aCAkdG9wXQorCXNldCBueSBbd2luZm8gcmVxaGVpZ2h0ICR0b3BdCisJc2V0IHJ4IFtleHByIHsoW3dpbmZvIHNjcmVlbndpZHRoICAkdG9wXSAtICRueCkgLyAzfV0KKwlzZXQgcnkgW2V4cHIgeyhbd2luZm8gc2NyZWVuaGVpZ2h0ICR0b3BdIC0gJG55KSAvIDN9XQorCXdtIGdlb21ldHJ5ICR0b3AgW2Zvcm1hdCB7KyVkKyVkfSAkcnggJHJ5XQorfQorCittZXRob2QgX2ludm9rZV9uZXh0IHt9IHsKKwlpZiB7W3dpbmZvIGV4aXN0cyAkd19uZXh0XX0geworCQl1cGxldmVsICMwIFskd19uZXh0IGNnZXQgLWNvbW1hbmRdCisJfQorfQorCitwcm9jIF9nZXRfcmVjZW50cmVwb3Mge30geworCXNldCByZWNlbnQgW2xpc3RdCisJZm9yZWFjaCBwIFtnZXRfY29uZmlnIGd1aS5yZWNlbnRyZXBvXSB7CisJCWlmIHtbX2lzX2dpdCBbZmlsZSBqb2luICRwIC5naXRdXX0geworCQkJbGFwcGVuZCByZWNlbnQgJHAKKwkJfSBlbHNlIHsKKwkJCV91bnNldF9yZWNlbnRyZXBvICRwCisJCX0KKwl9CisJcmV0dXJuIFtsc29ydCAkcmVjZW50XQorfQorCitwcm9jIF91bnNldF9yZWNlbnRyZXBvIHtwfSB7CisJcmVnc3ViIC1hbGwgLS0geyhbKClcW1xde31cLl4kKyo/XFxdKX0gJHAge1xcXDF9IHAKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIC0tdW5zZXQgZ3VpLnJlY2VudHJlcG8gIl4kcFwkIgorCWxvYWRfY29uZmlnIDEKK30KKworcHJvYyBfYXBwZW5kX3JlY2VudHJlcG9zIHtwYXRofSB7CisJc2V0IHBhdGggW2ZpbGUgbm9ybWFsaXplICRwYXRoXQorCXNldCByZWNlbnQgW2dldF9jb25maWcgZ3VpLnJlY2VudHJlcG9dCisKKwlpZiB7W2xpbmRleCAkcmVjZW50IGVuZF0gZXEgJHBhdGh9IHsKKwkJcmV0dXJuCisJfQorCisJc2V0IGkgW2xzZWFyY2ggJHJlY2VudCAkcGF0aF0KKwlpZiB7JGkgPj0gMH0geworCQlfdW5zZXRfcmVjZW50cmVwbyAkcGF0aAorCQlzZXQgcmVjZW50IFtscmVwbGFjZSAkcmVjZW50ICRpICRpXQorCX0KKworCWxhcHBlbmQgcmVjZW50ICRwYXRoCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWFkZCBndWkucmVjZW50cmVwbyAkcGF0aAorCWxvYWRfY29uZmlnIDEKKworCWlmIHtbc2V0IG1heHJlY2VudCBbZ2V0X2NvbmZpZyBndWkubWF4cmVjZW50cmVwb11dIGVxIHt9fSB7CisJCXNldCBtYXhyZWNlbnQgMTAKKwl9CisKKwl3aGlsZSB7W2xsZW5ndGggJHJlY2VudF0gPiAkbWF4cmVjZW50fSB7CisJCV91bnNldF9yZWNlbnRyZXBvIFtsaW5kZXggJHJlY2VudCAwXQorCQlzZXQgcmVjZW50IFtscmFuZ2UgJHJlY2VudCAxIGVuZF0KKwl9Cit9CisKK21ldGhvZCBfb3Blbl9yZWNlbnQge3h5fSB7CisJc2V0IGlkIFtsaW5kZXggW3NwbGl0IFskd19yZWNlbnRsaXN0IGluZGV4IEAkeHldIC5dIDBdCisJc2V0IGxvY2FsX3BhdGggW2xpbmRleCAkc29ydGVkX3JlY2VudCBbZXhwciB7JGlkIC0gMX1dXQorCV9kb19vcGVuMiAkdGhpcworfQorCittZXRob2QgX29wZW5fcmVjZW50X3BhdGgge3B9IHsKKwlzZXQgbG9jYWxfcGF0aCAkcAorCV9kb19vcGVuMiAkdGhpcworfQorCittZXRob2QgX25leHQge2FjdGlvbn0geworCWdsb2JhbCBOUworCWRlc3Ryb3kgJHdfYm9keQorCWlmIHshW3dpbmZvIGV4aXN0cyAkd19uZXh0XX0geworCQkke05TfTo6YnV0dG9uICR3X25leHQgLWRlZmF1bHQgYWN0aXZlCisJCXNldCBwb3MgLWJlZm9yZQorCQlpZiB7W3RrIHdpbmRvd2luZ3N5c3RlbV0gZXEgIndpbjMyIn0geyBzZXQgcG9zIC1hZnRlciB9CisJCXBhY2sgJHdfbmV4dCAtc2lkZSByaWdodCAtcGFkeCA1ICRwb3MgJHdfcXVpdAorCX0KKwlfZG9fJGFjdGlvbiAkdGhpcworfQorCittZXRob2QgX3dyaXRlX2xvY2FsX3BhdGgge2FyZ3N9IHsKKwlpZiB7JGxvY2FsX3BhdGggZXEge319IHsKKwkJJHdfbmV4dCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCX0gZWxzZSB7CisJCSR3X25leHQgY29uZiAtc3RhdGUgbm9ybWFsCisJfQorfQorCittZXRob2QgX2dpdF9pbml0IHt9IHsKKwlpZiB7W2NhdGNoIHtmaWxlIG1rZGlyICRsb2NhbF9wYXRofSBlcnJdfSB7CisJCWVycm9yX3BvcHVwIFtzdHJjYXQgXAorCQkJW21jICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IiAkbG9jYWxfcGF0aF0gXAorCQkJIlxuXG4kZXJyIl0KKwkJcmV0dXJuIDAKKwl9CisKKwlpZiB7W2NhdGNoIHtjZCAkbG9jYWxfcGF0aH0gZXJyXX0geworCQllcnJvcl9wb3B1cCBbc3RyY2F0IFwKKwkJCVttYyAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIgJGxvY2FsX3BhdGhdIFwKKwkJCSJcblxuJGVyciJdCisJCXJldHVybiAwCisJfQorCisJaWYge1tjYXRjaCB7Z2l0IGluaXR9IGVycl19IHsKKwkJZXJyb3JfcG9wdXAgW3N0cmNhdCBcCisJCQlbbWMgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiICRsb2NhbF9wYXRoXSBcCisJCQkiXG5cbiRlcnIiXQorCQlyZXR1cm4gMAorCX0KKworCV9hcHBlbmRfcmVjZW50cmVwb3MgW3B3ZF0KKwlzZXQgOjpfZ2l0ZGlyIC5naXQKKwlzZXQgOjpfcHJlZml4IHt9CisJcmV0dXJuIDEKK30KKworcHJvYyBfaXNfZ2l0IHtwYXRoIHtvdXRkaXJfdmFyICIifX0geworCWlmIHskb3V0ZGlyX3ZhciBuZSAiIn0geworCQl1cHZhciAxICRvdXRkaXJfdmFyIG91dGRpcgorCX0KKwlpZiB7W2ZpbGUgaXNmaWxlICRwYXRoXX0geworCQlzZXQgZnAgW29wZW4gJHBhdGggcl0KKwkJZ2V0cyAkZnAgbGluZQorCQljbG9zZSAkZnAKKwkJaWYge1tyZWdleHAgIl5naXRkaXI6ICguKykkIiAkbGluZSBsaW5lIGxpbmtfdGFyZ2V0XX0geworCQkJc2V0IHBhdGggW2ZpbGUgam9pbiBbZmlsZSBkaXJuYW1lICRwYXRoXSAkbGlua190YXJnZXRdCisJCQlzZXQgcGF0aCBbZmlsZSBub3JtYWxpemUgJHBhdGhdCisJCX0KKwl9CisKKwlpZiB7W2ZpbGUgZXhpc3RzIFtmaWxlIGpvaW4gJHBhdGggSEVBRF1dCisJICYmIFtmaWxlIGV4aXN0cyBbZmlsZSBqb2luICRwYXRoIG9iamVjdHNdXQorCSAmJiBbZmlsZSBleGlzdHMgW2ZpbGUgam9pbiAkcGF0aCBjb25maWddXX0geworCQlzZXQgb3V0ZGlyICRwYXRoCisJCXJldHVybiAxCisJfQorCWlmIHtbaXNfQ3lnd2luXX0geworCQlpZiB7W2ZpbGUgZXhpc3RzIFtmaWxlIGpvaW4gJHBhdGggSEVBRF1dCisJCSAmJiBbZmlsZSBleGlzdHMgW2ZpbGUgam9pbiAkcGF0aCBvYmplY3RzLmxua11dCisJCSAmJiBbZmlsZSBleGlzdHMgW2ZpbGUgam9pbiAkcGF0aCBjb25maWcubG5rXV19IHsKKwkJCXNldCBvdXRkaXIgJHBhdGgKKwkJCXJldHVybiAxCisJCX0KKwl9CisJcmV0dXJuIDAKK30KKworcHJvYyBfb2JqZGlyIHtwYXRofSB7CisJc2V0IG9iamRpciBbZmlsZSBqb2luICRwYXRoIC5naXQgb2JqZWN0c10KKwlpZiB7W2ZpbGUgaXNkaXJlY3RvcnkgJG9iamRpcl19IHsKKwkJcmV0dXJuICRvYmpkaXIKKwl9CisKKwlzZXQgb2JqZGlyIFtmaWxlIGpvaW4gJHBhdGggb2JqZWN0c10KKwlpZiB7W2ZpbGUgaXNkaXJlY3RvcnkgJG9iamRpcl19IHsKKwkJcmV0dXJuICRvYmpkaXIKKwl9CisKKwlpZiB7W2lzX0N5Z3dpbl19IHsKKwkJc2V0IG9iamRpciBbZmlsZSBqb2luICRwYXRoIC5naXQgb2JqZWN0cy5sbmtdCisJCWlmIHtbZmlsZSBpc2ZpbGUgJG9iamRpcl19IHsKKwkJCXJldHVybiBbd2luMzJfcmVhZF9sbmsgJG9iamRpcl0KKwkJfQorCisJCXNldCBvYmpkaXIgW2ZpbGUgam9pbiAkcGF0aCBvYmplY3RzLmxua10KKwkJaWYge1tmaWxlIGlzZmlsZSAkb2JqZGlyXX0geworCQkJcmV0dXJuIFt3aW4zMl9yZWFkX2xuayAkb2JqZGlyXQorCQl9CisJfQorCisJcmV0dXJuIHt9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIyBDcmVhdGUgTmV3IFJlcG9zaXRvcnkKKworbWV0aG9kIF9kb19uZXcge30geworCWdsb2JhbCB1c2VfdHRrIE5TCisJJHdfbmV4dCBjb25mIFwKKwkJLXN0YXRlIGRpc2FibGVkIFwKKwkJLWNvbW1hbmQgW2NiIF9kb19uZXcyXSBcCisJCS10ZXh0IFttYyAiQ3JlYXRlIl0KKworCSR7TlN9OjpmcmFtZSAkd19ib2R5CisJJHtOU306OmxhYmVsICR3X2JvZHkuaCBcCisJCS1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyIFwKKwkJLXRleHQgW21jICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiXQorCXBhY2sgJHdfYm9keS5oIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR5IDEwCisJcGFjayAkd19ib2R5IC1maWxsIHggLXBhZHggMTAKKworCSR7TlN9OjpmcmFtZSAkd19ib2R5LndoZXJlCisJJHtOU306OmxhYmVsICR3X2JvZHkud2hlcmUubCAtdGV4dCBbbWMgIkRpcmVjdG9yeToiXQorCSR7TlN9OjplbnRyeSAkd19ib2R5LndoZXJlLnQgXAorCQktdGV4dHZhcmlhYmxlIEBsb2NhbF9wYXRoIFwKKwkJLXdpZHRoIDUwCisJJHtOU306OmJ1dHRvbiAkd19ib2R5LndoZXJlLmIgXAorCQktdGV4dCBbbWMgIkJyb3dzZSJdIFwKKwkJLWNvbW1hbmQgW2NiIF9uZXdfbG9jYWxfcGF0aF0KKwlzZXQgd19sb2NhbHBhdGggJHdfYm9keS53aGVyZS50CisKKwlncmlkICR3X2JvZHkud2hlcmUubCAkd19ib2R5LndoZXJlLnQgJHdfYm9keS53aGVyZS5iIC1zdGlja3kgZXcKKwlwYWNrICR3X2JvZHkud2hlcmUgLWZpbGwgeAorCisJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHdfYm9keS53aGVyZSAxIC13ZWlnaHQgMQorCisJdHJhY2UgYWRkIHZhcmlhYmxlIEBsb2NhbF9wYXRoIHdyaXRlIFtjYiBfd3JpdGVfbG9jYWxfcGF0aF0KKwliaW5kICR3X2JvZHkuaCA8RGVzdHJveT4gW2xpc3QgdHJhY2UgcmVtb3ZlIHZhcmlhYmxlIEBsb2NhbF9wYXRoIHdyaXRlIFtjYiBfd3JpdGVfbG9jYWxfcGF0aF1dCisJdXBkYXRlCisJZm9jdXMgJHdfYm9keS53aGVyZS50Cit9CisKK21ldGhvZCBfbmV3X2xvY2FsX3BhdGgge30geworCWlmIHskbG9jYWxfcGF0aCBuZSB7fX0geworCQlzZXQgcCBbZmlsZSBkaXJuYW1lICRsb2NhbF9wYXRoXQorCX0gZWxzZSB7CisJCXNldCBwIFtwd2RdCisJfQorCisJc2V0IHAgW3RrX2Nob29zZURpcmVjdG9yeSBcCisJCS1pbml0aWFsZGlyICRwIFwKKwkJLXBhcmVudCAkdG9wIFwKKwkJLXRpdGxlIFttYyAiR2l0IFJlcG9zaXRvcnkiXSBcCisJCS1tdXN0ZXhpc3QgZmFsc2VdCisJaWYgeyRwIGVxIHt9fSByZXR1cm4KKworCXNldCBwIFtmaWxlIG5vcm1hbGl6ZSAkcF0KKwlpZiB7IVtfbmV3X29rICRwXX0geworCQlyZXR1cm4KKwl9CisJc2V0IGxvY2FsX3BhdGggJHAKKwkkd19sb2NhbHBhdGggaWN1cnNvciBlbmQKK30KKworbWV0aG9kIF9kb19uZXcyIHt9IHsKKwlpZiB7IVtfbmV3X29rICRsb2NhbF9wYXRoXX0geworCQlyZXR1cm4KKwl9CisJaWYgeyFbX2dpdF9pbml0ICR0aGlzXX0geworCQlyZXR1cm4KKwl9CisJc2V0IGRvbmUgMQorfQorCitwcm9jIF9uZXdfb2sge3B9IHsKKwlpZiB7W2ZpbGUgaXNkaXJlY3RvcnkgJHBdfSB7CisJCWlmIHtbX2lzX2dpdCBbZmlsZSBqb2luICRwIC5naXRdXX0geworCQkJZXJyb3JfcG9wdXAgW21jICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIiAkcF0KKwkJCXJldHVybiAwCisJCX0KKwl9IGVsc2VpZiB7W2ZpbGUgZXhpc3RzICRwXX0geworCQllcnJvcl9wb3B1cCBbbWMgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIiAkcF0KKwkJcmV0dXJuIDAKKwl9CisJcmV0dXJuIDEKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMjIENsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkKKworbWV0aG9kIF9kb19jbG9uZSB7fSB7CisJZ2xvYmFsIHVzZV90dGsgTlMKKwkkd19uZXh0IGNvbmYgXAorCQktc3RhdGUgZGlzYWJsZWQgXAorCQktY29tbWFuZCBbY2IgX2RvX2Nsb25lMl0gXAorCQktdGV4dCBbbWMgIkNsb25lIl0KKworCSR7TlN9OjpmcmFtZSAkd19ib2R5CisJJHtOU306OmxhYmVsICR3X2JvZHkuaCBcCisJCS1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyIFwKKwkJLXRleHQgW21jICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5Il0KKwlwYWNrICR3X2JvZHkuaCAtc2lkZSB0b3AgLWZpbGwgeCAtcGFkeSAxMAorCXBhY2sgJHdfYm9keSAtZmlsbCB4IC1wYWR4IDEwCisKKwlzZXQgYXJncyAkd19ib2R5LmFyZ3MKKwkke05TfTo6ZnJhbWUgJHdfYm9keS5hcmdzCisJcGFjayAkYXJncyAtZmlsbCBib3RoCisKKwkke05TfTo6bGFiZWwgJGFyZ3Mub3JpZ2luX2wgLXRleHQgW21jICJTb3VyY2UgTG9jYXRpb246Il0KKwkke05TfTo6ZW50cnkgJGFyZ3Mub3JpZ2luX3QgXAorCQktdGV4dHZhcmlhYmxlIEBvcmlnaW5fdXJsIFwKKwkJLXdpZHRoIDUwCisJJHtOU306OmJ1dHRvbiAkYXJncy5vcmlnaW5fYiBcCisJCS10ZXh0IFttYyAiQnJvd3NlIl0gXAorCQktY29tbWFuZCBbY2IgX29wZW5fb3JpZ2luXQorCWdyaWQgJGFyZ3Mub3JpZ2luX2wgJGFyZ3Mub3JpZ2luX3QgJGFyZ3Mub3JpZ2luX2IgLXN0aWNreSBldworCisJJHtOU306OmxhYmVsICRhcmdzLndoZXJlX2wgLXRleHQgW21jICJUYXJnZXQgRGlyZWN0b3J5OiJdCisJJHtOU306OmVudHJ5ICRhcmdzLndoZXJlX3QgXAorCQktdGV4dHZhcmlhYmxlIEBsb2NhbF9wYXRoIFwKKwkJLXdpZHRoIDUwCisJJHtOU306OmJ1dHRvbiAkYXJncy53aGVyZV9iIFwKKwkJLXRleHQgW21jICJCcm93c2UiXSBcCisJCS1jb21tYW5kIFtjYiBfbmV3X2xvY2FsX3BhdGhdCisJZ3JpZCAkYXJncy53aGVyZV9sICRhcmdzLndoZXJlX3QgJGFyZ3Mud2hlcmVfYiAtc3RpY2t5IGV3CisJc2V0IHdfbG9jYWxwYXRoICRhcmdzLndoZXJlX3QKKworCSR7TlN9OjpsYWJlbCAkYXJncy50eXBlX2wgLXRleHQgW21jICJDbG9uZSBUeXBlOiJdCisJJHtOU306OmZyYW1lICRhcmdzLnR5cGVfZgorCXNldCB3X3R5cGVzIFtsaXN0XQorCWxhcHBlbmQgd190eXBlcyBbJHtOU306OnJhZGlvYnV0dG9uICRhcmdzLnR5cGVfZi5oYXJkbGluayBcCisJCS1zdGF0ZSBkaXNhYmxlZCBcCisJCS10ZXh0IFttYyAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIl0gXAorCQktdmFyaWFibGUgQGNsb25lX3R5cGUgXAorCQktdmFsdWUgaGFyZGxpbmtdCisJbGFwcGVuZCB3X3R5cGVzIFske05TfTo6cmFkaW9idXR0b24gJGFyZ3MudHlwZV9mLmZ1bGwgXAorCQktc3RhdGUgZGlzYWJsZWQgXAorCQktdGV4dCBbbWMgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSJdIFwKKwkJLXZhcmlhYmxlIEBjbG9uZV90eXBlIFwKKwkJLXZhbHVlIGZ1bGxdCisJbGFwcGVuZCB3X3R5cGVzIFske05TfTo6cmFkaW9idXR0b24gJGFyZ3MudHlwZV9mLnNoYXJlZCBcCisJCS1zdGF0ZSBkaXNhYmxlZCBcCisJCS10ZXh0IFttYyAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiXSBcCisJCS12YXJpYWJsZSBAY2xvbmVfdHlwZSBcCisJCS12YWx1ZSBzaGFyZWRdCisJZm9yZWFjaCByICR3X3R5cGVzIHsKKwkJcGFjayAkciAtYW5jaG9yIHcKKwl9CisJJHtOU306OmNoZWNrYnV0dG9uICRhcmdzLnR5cGVfZi5yZWN1cnNpdmUgXAorCQktdGV4dCBbbWMgIlJlY3Vyc2l2ZWx5IGNsb25lIHN1Ym1vZHVsZXMgdG9vIl0gXAorCQktdmFyaWFibGUgQHJlY3Vyc2l2ZSBcCisJCS1vbnZhbHVlIHRydWUgLW9mZnZhbHVlIGZhbHNlCisJcGFjayAkYXJncy50eXBlX2YucmVjdXJzaXZlIC1hbmNob3IgdworCWdyaWQgJGFyZ3MudHlwZV9sICRhcmdzLnR5cGVfZiAtc3RpY2t5IG5ldworCisJZ3JpZCBjb2x1bW5jb25maWd1cmUgJGFyZ3MgMSAtd2VpZ2h0IDEKKworCXRyYWNlIGFkZCB2YXJpYWJsZSBAbG9jYWxfcGF0aCB3cml0ZSBbY2IgX3VwZGF0ZV9jbG9uZV0KKwl0cmFjZSBhZGQgdmFyaWFibGUgQG9yaWdpbl91cmwgd3JpdGUgW2NiIF91cGRhdGVfY2xvbmVdCisJYmluZCAkd19ib2R5LmggPERlc3Ryb3k+ICIKKwkJW2xpc3QgdHJhY2UgcmVtb3ZlIHZhcmlhYmxlIEBsb2NhbF9wYXRoIHdyaXRlIFtjYiBfdXBkYXRlX2Nsb25lXV0KKwkJW2xpc3QgdHJhY2UgcmVtb3ZlIHZhcmlhYmxlIEBvcmlnaW5fdXJsIHdyaXRlIFtjYiBfdXBkYXRlX2Nsb25lXV0KKwkiCisJdXBkYXRlCisJZm9jdXMgJGFyZ3Mub3JpZ2luX3QKK30KKworbWV0aG9kIF9vcGVuX29yaWdpbiB7fSB7CisJaWYgeyRvcmlnaW5fdXJsIG5lIHt9ICYmIFtmaWxlIGlzZGlyZWN0b3J5ICRvcmlnaW5fdXJsXX0geworCQlzZXQgcCAkb3JpZ2luX3VybAorCX0gZWxzZSB7CisJCXNldCBwIFtwd2RdCisJfQorCisJc2V0IHAgW3RrX2Nob29zZURpcmVjdG9yeSBcCisJCS1pbml0aWFsZGlyICRwIFwKKwkJLXBhcmVudCAkdG9wIFwKKwkJLXRpdGxlIFttYyAiR2l0IFJlcG9zaXRvcnkiXSBcCisJCS1tdXN0ZXhpc3QgdHJ1ZV0KKwlpZiB7JHAgZXEge319IHJldHVybgorCisJc2V0IHAgW2ZpbGUgbm9ybWFsaXplICRwXQorCWlmIHshW19pc19naXQgW2ZpbGUgam9pbiAkcCAuZ2l0XV0gJiYgIVtfaXNfZ2l0ICRwXX0geworCQllcnJvcl9wb3B1cCBbbWMgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIgW2ZpbGUgdGFpbCAkcF1dCisJCXJldHVybgorCX0KKwlzZXQgb3JpZ2luX3VybCAkcAorfQorCittZXRob2QgX3VwZGF0ZV9jbG9uZSB7YXJnc30geworCWlmIHskbG9jYWxfcGF0aCBuZSB7fSAmJiAkb3JpZ2luX3VybCBuZSB7fX0geworCQkkd19uZXh0IGNvbmYgLXN0YXRlIG5vcm1hbAorCX0gZWxzZSB7CisJCSR3X25leHQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKwl9CisKKwlpZiB7JG9yaWdpbl91cmwgbmUge30gJiYKKwkJKCAgW19pc19naXQgW2ZpbGUgam9pbiAkb3JpZ2luX3VybCAuZ2l0XV0KKwkJfHwgW19pc19naXQgJG9yaWdpbl91cmxdKX0geworCQlzZXQgZSBub3JtYWwKKwkJaWYge1tbbGluZGV4ICR3X3R5cGVzIDBdIGNnZXQgLXN0YXRlXSBlcSB7ZGlzYWJsZWR9fSB7CisJCQlzZXQgY2xvbmVfdHlwZSBoYXJkbGluaworCQl9CisJfSBlbHNlIHsKKwkJc2V0IGUgZGlzYWJsZWQKKwkJc2V0IGNsb25lX3R5cGUgZnVsbAorCX0KKworCWZvcmVhY2ggciAkd190eXBlcyB7CisJCSRyIGNvbmYgLXN0YXRlICRlCisJfQorfQorCittZXRob2QgX2RvX2Nsb25lMiB7fSB7CisJaWYge1tmaWxlIGlzZGlyZWN0b3J5ICRvcmlnaW5fdXJsXX0geworCQlzZXQgb3JpZ2luX3VybCBbZmlsZSBub3JtYWxpemUgJG9yaWdpbl91cmxdCisJfQorCisJaWYgeyRjbG9uZV90eXBlIGVxIHtoYXJkbGlua30gJiYgIVtmaWxlIGlzZGlyZWN0b3J5ICRvcmlnaW5fdXJsXX0geworCQllcnJvcl9wb3B1cCBbbWMgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiJdCisJCXJldHVybgorCX0KKwlpZiB7JGNsb25lX3R5cGUgZXEge3NoYXJlZH0gJiYgIVtmaWxlIGlzZGlyZWN0b3J5ICRvcmlnaW5fdXJsXX0geworCQllcnJvcl9wb3B1cCBbbWMgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iXQorCQlyZXR1cm4KKwl9CisKKwlpZiB7JGNsb25lX3R5cGUgZXEge2hhcmRsaW5rfSB8fCAkY2xvbmVfdHlwZSBlcSB7c2hhcmVkfX0geworCQlzZXQgb2JqZGlyIFtfb2JqZGlyICRvcmlnaW5fdXJsXQorCQlpZiB7JG9iamRpciBlcSB7fX0geworCQkJZXJyb3JfcG9wdXAgW21jICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiIFtmaWxlIHRhaWwgJG9yaWdpbl91cmxdXQorCQkJcmV0dXJuCisJCX0KKwl9CisKKwlzZXQgZ2l0dXJsICRvcmlnaW5fdXJsCisJaWYge1tpc19DeWd3aW5dICYmIFtmaWxlIGlzZGlyZWN0b3J5ICRnaXR1cmxdfSB7CisJCXNldCBnaXR1cmwgW2V4ZWMgY3lncGF0aCAtLXVuaXggLS1hYnNvbHV0ZSAkZ2l0dXJsXQorCQlpZiB7JGNsb25lX3R5cGUgZXEge3NoYXJlZH19IHsKKwkJCXNldCBvYmpkaXIgW2V4ZWMgY3lncGF0aCAtLXVuaXggLS1hYnNvbHV0ZSAkb2JqZGlyXQorCQl9CisJfQorCisJaWYge1tmaWxlIGV4aXN0cyAkbG9jYWxfcGF0aF19IHsKKwkJZXJyb3JfcG9wdXAgW21jICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iICRsb2NhbF9wYXRoXQorCQlyZXR1cm4KKwl9CisKKwlpZiB7IVtfZ2l0X2luaXQgJHRoaXNdfSByZXR1cm4KKwlzZXQgbG9jYWxfcGF0aCBbcHdkXQorCisJaWYge1tjYXRjaCB7CisJCQlnaXQgY29uZmlnIHJlbW90ZS4kb3JpZ2luX25hbWUudXJsICRnaXR1cmwKKwkJCWdpdCBjb25maWcgcmVtb3RlLiRvcmlnaW5fbmFtZS5mZXRjaCArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy8kb3JpZ2luX25hbWUvKgorCQl9IGVycl19IHsKKwkJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIl0gIlxuXG4kZXJyIl0KKwkJcmV0dXJuCisJfQorCisJZGVzdHJveSAkd19ib2R5ICR3X25leHQKKworCXN3aXRjaCAtZXhhY3QgLS0gJGNsb25lX3R5cGUgeworCWhhcmRsaW5rIHsKKwkJc2V0IG9fY29ucyBbc3RhdHVzX2Jhcjo6dHdvX2xpbmUgJHdfYm9keV0KKwkJcGFjayAkd19ib2R5IC1maWxsIHggLXBhZHggMTAgLXBhZHkgMTAKKworCQkkb19jb25zIHN0YXJ0IFwKKwkJCVttYyAiQ291bnRpbmcgb2JqZWN0cyJdIFwKKwkJCVttYyAiYnVja2V0cyJdCisJCXVwZGF0ZQorCisJCWlmIHtbZmlsZSBleGlzdHMgW2ZpbGUgam9pbiAkb2JqZGlyIGluZm8gYWx0ZXJuYXRlc11dfSB7CisJCQlzZXQgcHdkIFtwd2RdCisJCQlpZiB7W2NhdGNoIHsKKwkJCQlmaWxlIG1rZGlyIFtnaXRkaXIgb2JqZWN0cyBpbmZvXQorCQkJCXNldCBmX2luIFtvcGVuIFtmaWxlIGpvaW4gJG9iamRpciBpbmZvIGFsdGVybmF0ZXNdIHJdCisJCQkJc2V0IGZfY3AgW29wZW4gW2dpdGRpciBvYmplY3RzIGluZm8gYWx0ZXJuYXRlc10gd10KKwkJCQlmY29uZmlndXJlICRmX2luIC10cmFuc2xhdGlvbiBiaW5hcnkgLWVuY29kaW5nIGJpbmFyeQorCQkJCWZjb25maWd1cmUgJGZfY3AgLXRyYW5zbGF0aW9uIGJpbmFyeSAtZW5jb2RpbmcgYmluYXJ5CisJCQkJY2QgJG9iamRpcgorCQkJCXdoaWxlIHtbZ2V0cyAkZl9pbiBsaW5lXSA+PSAwfSB7CisJCQkJCWlmIHtbaXNfQ3lnd2luXX0geworCQkJCQkJcHV0cyAkZl9jcCBbZXhlYyBjeWdwYXRoIC0tdW5peCAtLWFic29sdXRlICRsaW5lXQorCQkJCQl9IGVsc2UgeworCQkJCQkJcHV0cyAkZl9jcCBbZmlsZSBub3JtYWxpemUgJGxpbmVdCisJCQkJCX0KKwkJCQl9CisJCQkJY2xvc2UgJGZfaW4KKwkJCQljbG9zZSAkZl9jcAorCQkJCWNkICRwd2QKKwkJCX0gZXJyXX0geworCQkJCWNhdGNoIHtjZCAkcHdkfQorCQkJCV9jbG9uZV9mYWlsZWQgJHRoaXMgW21jICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiICRlcnJdCisJCQkJcmV0dXJuCisJCQl9CisJCX0KKworCQlzZXQgdG9saW5rICBbbGlzdF0KKwkJc2V0IGJ1Y2tldHMgW2dsb2IgXAorCQkJLXRhaWxzIFwKKwkJCS1ub2NvbXBsYWluIFwKKwkJCS1kaXJlY3RvcnkgW2ZpbGUgam9pbiAkb2JqZGlyXSA/P10KKwkJc2V0IGJjbnQgW2V4cHIge1tsbGVuZ3RoICRidWNrZXRzXSArIDJ9XQorCQlzZXQgYmN1ciAxCisJCSRvX2NvbnMgdXBkYXRlICRiY3VyICRiY250CisJCXVwZGF0ZQorCisJCWZpbGUgbWtkaXIgW2ZpbGUgam9pbiAuZ2l0IG9iamVjdHMgcGFja10KKwkJZm9yZWFjaCBpIFtnbG9iIC10YWlscyAtbm9jb21wbGFpbiBcCisJCQktZGlyZWN0b3J5IFtmaWxlIGpvaW4gJG9iamRpciBwYWNrXSAqXSB7CisJCQlsYXBwZW5kIHRvbGluayBbZmlsZSBqb2luIHBhY2sgJGldCisJCX0KKwkJJG9fY29ucyB1cGRhdGUgW2luY3IgYmN1cl0gJGJjbnQKKwkJdXBkYXRlCisKKwkJZm9yZWFjaCBpICRidWNrZXRzIHsKKwkJCWZpbGUgbWtkaXIgW2ZpbGUgam9pbiAuZ2l0IG9iamVjdHMgJGldCisJCQlmb3JlYWNoIGogW2dsb2IgLXRhaWxzIC1ub2NvbXBsYWluIFwKKwkJCQktZGlyZWN0b3J5IFtmaWxlIGpvaW4gJG9iamRpciAkaV0gKl0geworCQkJCWxhcHBlbmQgdG9saW5rIFtmaWxlIGpvaW4gJGkgJGpdCisJCQl9CisJCQkkb19jb25zIHVwZGF0ZSBbaW5jciBiY3VyXSAkYmNudAorCQkJdXBkYXRlCisJCX0KKwkJJG9fY29ucyBzdG9wCisKKwkJaWYgeyR0b2xpbmsgZXEge319IHsKKwkJCWluZm9fcG9wdXAgW3N0cmNhdCBcCisJCQkJW21jICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIiAkb3JpZ2luX3VybF0gXAorCQkJCSJcbiIgXAorCQkJCVttYyAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIl0gXAorCQkJCV0KKwkJCWRlc3Ryb3kgJHdfYm9keQorCQkJc2V0IGRvbmUgMQorCQkJcmV0dXJuCisJCX0KKworCQlzZXQgaSBbbGluZGV4ICR0b2xpbmsgMF0KKwkJaWYge1tjYXRjaCB7CisJCQkJZmlsZSBsaW5rIC1oYXJkIFwKKwkJCQkJW2ZpbGUgam9pbiAuZ2l0IG9iamVjdHMgJGldIFwKKwkJCQkJW2ZpbGUgam9pbiAkb2JqZGlyICRpXQorCQkJfSBlcnJdfSB7CisJCQlpbmZvX3BvcHVwIFttYyAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiJdCisJCQlzZXQgaSBbX2NvcHlfZmlsZXMgJHRoaXMgJG9iamRpciAkdG9saW5rXQorCQl9IGVsc2UgeworCQkJc2V0IGkgW19saW5rX2ZpbGVzICR0aGlzICRvYmpkaXIgW2xyYW5nZSAkdG9saW5rIDEgZW5kXV0KKwkJfQorCQlpZiB7ISRpfSByZXR1cm4KKworCQlkZXN0cm95ICR3X2JvZHkKKwl9CisJZnVsbCB7CisJCXNldCBvX2NvbnMgW2NvbnNvbGU6OmVtYmVkIFwKKwkJCSR3X2JvZHkgXAorCQkJW21jICJDbG9uaW5nIGZyb20gJXMiICRvcmlnaW5fdXJsXV0KKwkJcGFjayAkd19ib2R5IC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR4IDEwCisJCSRvX2NvbnMgZXhlYyBcCisJCQlbbGlzdCBnaXQgZmV0Y2ggLS1uby10YWdzIC1rICRvcmlnaW5fbmFtZV0gXAorCQkJW2NiIF9kb19jbG9uZV90YWdzXQorCX0KKwlzaGFyZWQgeworCQlzZXQgZmQgW29wZW4gW2dpdGRpciBvYmplY3RzIGluZm8gYWx0ZXJuYXRlc10gd10KKwkJZmNvbmZpZ3VyZSAkZmQgLXRyYW5zbGF0aW9uIGJpbmFyeQorCQlwdXRzICRmZCAkb2JqZGlyCisJCWNsb3NlICRmZAorCX0KKwl9CisKKwlpZiB7JGNsb25lX3R5cGUgZXEge2hhcmRsaW5rfSB8fCAkY2xvbmVfdHlwZSBlcSB7c2hhcmVkfX0geworCQlpZiB7IVtfY2xvbmVfcmVmcyAkdGhpc119IHJldHVybgorCQlzZXQgcHdkIFtwd2RdCisJCWlmIHtbY2F0Y2ggeworCQkJCWNkICRvcmlnaW5fdXJsCisJCQkJc2V0IEhFQUQgW2dpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF4wXQorCQkJfSBlcnJdfSB7CisJCQlfY2xvbmVfZmFpbGVkICR0aGlzIFttYyAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIiBbZmlsZSB0YWlsICRvcmlnaW5fdXJsXV0KKwkJCXJldHVybiAwCisJCX0KKwkJY2QgJHB3ZAorCQlfZG9fY2xvbmVfY2hlY2tvdXQgJHRoaXMgJEhFQUQKKwl9Cit9CisKK21ldGhvZCBfY29weV9maWxlcyB7b2JqZGlyIHRvY29weX0geworCSRvX2NvbnMgc3RhcnQgXAorCQlbbWMgIkNvcHlpbmcgb2JqZWN0cyJdIFwKKwkJW21jICJLaUIiXQorCXNldCB0b3QgMAorCXNldCBjbXAgMAorCWZvcmVhY2ggcCAkdG9jb3B5IHsKKwkJaW5jciB0b3QgW2ZpbGUgc2l6ZSBbZmlsZSBqb2luICRvYmpkaXIgJHBdXQorCX0KKwlmb3JlYWNoIHAgJHRvY29weSB7CisJCWlmIHtbY2F0Y2ggeworCQkJCXNldCBmX2luIFtvcGVuIFtmaWxlIGpvaW4gJG9iamRpciAkcF0gcl0KKwkJCQlzZXQgZl9jcCBbb3BlbiBbZmlsZSBqb2luIC5naXQgb2JqZWN0cyAkcF0gd10KKwkJCQlmY29uZmlndXJlICRmX2luIC10cmFuc2xhdGlvbiBiaW5hcnkgLWVuY29kaW5nIGJpbmFyeQorCQkJCWZjb25maWd1cmUgJGZfY3AgLXRyYW5zbGF0aW9uIGJpbmFyeSAtZW5jb2RpbmcgYmluYXJ5CisKKwkJCQl3aGlsZSB7IVtlb2YgJGZfaW5dfSB7CisJCQkJCWluY3IgY21wIFtmY29weSAkZl9pbiAkZl9jcCAtc2l6ZSAxNjM4NF0KKwkJCQkJJG9fY29ucyB1cGRhdGUgXAorCQkJCQkJW2V4cHIgeyRjbXAgLyAxMDI0fV0gXAorCQkJCQkJW2V4cHIgeyR0b3QgLyAxMDI0fV0KKwkJCQkJdXBkYXRlCisJCQkJfQorCisJCQkJY2xvc2UgJGZfaW4KKwkJCQljbG9zZSAkZl9jcAorCQkJfSBlcnJdfSB7CisJCQlfY2xvbmVfZmFpbGVkICR0aGlzIFttYyAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIgJGVycl0KKwkJCXJldHVybiAwCisJCX0KKwl9CisJcmV0dXJuIDEKK30KKworbWV0aG9kIF9saW5rX2ZpbGVzIHtvYmpkaXIgdG9saW5rfSB7CisJc2V0IHRvdGFsIFtsbGVuZ3RoICR0b2xpbmtdCisJJG9fY29ucyBzdGFydCBcCisJCVttYyAiTGlua2luZyBvYmplY3RzIl0gXAorCQlbbWMgIm9iamVjdHMiXQorCWZvciB7c2V0IGkgMH0geyRpIDwgJHRvdGFsfSB7fSB7CisJCXNldCBwIFtsaW5kZXggJHRvbGluayAkaV0KKwkJaWYge1tjYXRjaCB7CisJCQkJZmlsZSBsaW5rIC1oYXJkIFwKKwkJCQkJW2ZpbGUgam9pbiAuZ2l0IG9iamVjdHMgJHBdIFwKKwkJCQkJW2ZpbGUgam9pbiAkb2JqZGlyICRwXQorCQkJfSBlcnJdfSB7CisJCQlfY2xvbmVfZmFpbGVkICR0aGlzIFttYyAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiICRlcnJdCisJCQlyZXR1cm4gMAorCQl9CisKKwkJaW5jciBpCisJCWlmIHskaSAlIDUgPT0gMH0geworCQkJJG9fY29ucyB1cGRhdGUgJGkgJHRvdGFsCisJCQl1cGRhdGUKKwkJfQorCX0KKwlyZXR1cm4gMQorfQorCittZXRob2QgX2Nsb25lX3JlZnMge30geworCXNldCBwd2QgW3B3ZF0KKwlpZiB7W2NhdGNoIHtjZCAkb3JpZ2luX3VybH0gZXJyXX0geworCQllcnJvcl9wb3B1cCBbbWMgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIgW2ZpbGUgdGFpbCAkb3JpZ2luX3VybF1dCisJCXJldHVybiAwCisJfQorCXNldCBmZF9pbiBbZ2l0X3JlYWQgZm9yLWVhY2gtcmVmIFwKKwkJLS10Y2wgXAorCQl7LS1mb3JtYXQ9bGlzdCAlKHJlZm5hbWUpICUob2JqZWN0bmFtZSkgJSgqb2JqZWN0bmFtZSl9XQorCWNkICRwd2QKKworCXNldCBmZCBbb3BlbiBbZ2l0ZGlyIHBhY2tlZC1yZWZzXSB3XQorCWZjb25maWd1cmUgJGZkIC10cmFuc2xhdGlvbiBiaW5hcnkKKwlwdXRzICRmZCAiIyBwYWNrLXJlZnMgd2l0aDogcGVlbGVkIgorCXdoaWxlIHtbZ2V0cyAkZmRfaW4gbGluZV0gPj0gMH0geworCQlzZXQgbGluZSBbZXZhbCAkbGluZV0KKwkJc2V0IHJlZm4gW2xpbmRleCAkbGluZSAwXQorCQlzZXQgcm9iaiBbbGluZGV4ICRsaW5lIDFdCisJCXNldCB0b2JqIFtsaW5kZXggJGxpbmUgMl0KKworCQlpZiB7W3JlZ3N1YiBecmVmcy9oZWFkcy8gJHJlZm4gXAorCQkJInJlZnMvcmVtb3Rlcy8kb3JpZ2luX25hbWUvIiByZWZuXX0geworCQkJcHV0cyAkZmQgIiRyb2JqICRyZWZuIgorCQl9IGVsc2VpZiB7W3N0cmluZyBtYXRjaCByZWZzL3RhZ3MvKiAkcmVmbl19IHsKKwkJCXB1dHMgJGZkICIkcm9iaiAkcmVmbiIKKwkJCWlmIHskdG9iaiBuZSB7fX0geworCQkJCXB1dHMgJGZkICJeJHRvYmoiCisJCQl9CisJCX0KKwl9CisJY2xvc2UgJGZkX2luCisJY2xvc2UgJGZkCisJcmV0dXJuIDEKK30KKworbWV0aG9kIF9kb19jbG9uZV90YWdzIHtva30geworCWlmIHskb2t9IHsKKwkJJG9fY29ucyBleGVjIFwKKwkJCVtsaXN0IGdpdCBmZXRjaCAtLXRhZ3MgLWsgJG9yaWdpbl9uYW1lXSBcCisJCQlbY2IgX2RvX2Nsb25lX0hFQURdCisJfSBlbHNlIHsKKwkJJG9fY29ucyBkb25lICRvaworCQlfY2xvbmVfZmFpbGVkICR0aGlzIFttYyAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiJdCisJfQorfQorCittZXRob2QgX2RvX2Nsb25lX0hFQUQge29rfSB7CisJaWYgeyRva30geworCQkkb19jb25zIGV4ZWMgXAorCQkJW2xpc3QgZ2l0IGZldGNoICRvcmlnaW5fbmFtZSBIRUFEXSBcCisJCQlbY2IgX2RvX2Nsb25lX2Z1bGxfZW5kXQorCX0gZWxzZSB7CisJCSRvX2NvbnMgZG9uZSAkb2sKKwkJX2Nsb25lX2ZhaWxlZCAkdGhpcyBbbWMgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiJdCisJfQorfQorCittZXRob2QgX2RvX2Nsb25lX2Z1bGxfZW5kIHtva30geworCSRvX2NvbnMgZG9uZSAkb2sKKworCWlmIHskb2t9IHsKKwkJZGVzdHJveSAkd19ib2R5CisKKwkJc2V0IEhFQUQge30KKwkJaWYge1tmaWxlIGV4aXN0cyBbZ2l0ZGlyIEZFVENIX0hFQURdXX0geworCQkJc2V0IGZkIFtvcGVuIFtnaXRkaXIgRkVUQ0hfSEVBRF0gcl0KKwkJCXdoaWxlIHtbZ2V0cyAkZmQgbGluZV0gPj0gMH0geworCQkJCWlmIHtbcmVnZXhwICJeKC57NDB9KVx0XHQiICRsaW5lIGxpbmUgSEVBRF19IHsKKwkJCQkJYnJlYWsKKwkJCQl9CisJCQl9CisJCQljbG9zZSAkZmQKKwkJfQorCisJCWNhdGNoIHtnaXQgcGFjay1yZWZzfQorCQlfZG9fY2xvbmVfY2hlY2tvdXQgJHRoaXMgJEhFQUQKKwl9IGVsc2UgeworCQlfY2xvbmVfZmFpbGVkICR0aGlzIFttYyAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiJdCisJfQorfQorCittZXRob2QgX2Nsb25lX2ZhaWxlZCB7e3doeSB7fX19IHsKKwlpZiB7W2NhdGNoIHtmaWxlIGRlbGV0ZSAtZm9yY2UgJGxvY2FsX3BhdGh9IGVycl19IHsKKwkJc2V0IHdoeSBbc3RyY2F0IFwKKwkJCSR3aHkgXAorCQkJIlxuXG4iIFwKKwkJCVttYyAiVW5hYmxlIHRvIGNsZWFudXAgJXMiICRsb2NhbF9wYXRoXSBcCisJCQkiXG5cbiIgXAorCQkJJGVycl0KKwl9CisJaWYgeyR3aHkgbmUge319IHsKKwkJdXBkYXRlCisJCWVycm9yX3BvcHVwIFtzdHJjYXQgW21jICJDbG9uZSBmYWlsZWQuIl0gIlxuIiAkd2h5XQorCX0KK30KKworbWV0aG9kIF9kb19jbG9uZV9jaGVja291dCB7SEVBRH0geworCWlmIHskSEVBRCBlcSB7fX0geworCQlpbmZvX3BvcHVwIFtzdHJjYXQgXAorCQkJW21jICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iXSBcCisJCQkiXG4iIFwKKwkJCVttYyAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIl0gXAorCQkJXQorCQlzZXQgZG9uZSAxCisJCXJldHVybgorCX0KKwlpZiB7W2NhdGNoIHsKKwkJCWdpdCB1cGRhdGUtcmVmIEhFQUQgJEhFQUReMAorCQl9IGVycl19IHsKKwkJaW5mb19wb3B1cCBbc3RyY2F0IFwKKwkJCVttYyAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIiAkSEVBRF4wXSBcCisJCQkiXG4gICRlcnIiIFwKKwkJCSJcbiIgXAorCQkJW21jICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iXSBcCisJCQldCisJCXNldCBkb25lIDEKKwkJcmV0dXJuCisJfQorCisJc2V0IG9fY29ucyBbc3RhdHVzX2Jhcjo6dHdvX2xpbmUgJHdfYm9keV0KKwlwYWNrICR3X2JvZHkgLWZpbGwgeCAtcGFkeCAxMCAtcGFkeSAxMAorCSRvX2NvbnMgc3RhcnQgXAorCQlbbWMgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5Il0gXAorCQlbbWMgImZpbGVzIl0KKworCXNldCByZWFkdHJlZV9lcnIge30KKwlzZXQgZmQgW2dpdF9yZWFkIC0tc3RkZXJyIHJlYWQtdHJlZSBcCisJCS1tIFwKKwkJLXUgXAorCQktdiBcCisJCUhFQUQgXAorCQlIRUFEIFwKKwkJXQorCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBiaW5hcnkKKwlmaWxlZXZlbnQgJGZkIHJlYWRhYmxlIFtjYiBfcmVhZHRyZWVfd2FpdCAkZmRdCit9CisKK21ldGhvZCBfZG9fdmFsaWRhdGVfc3VibW9kdWxlX2Nsb25pbmcge29rfSB7CisJaWYgeyRva30geworCQkkb19jb25zIGRvbmUgJG9rCisJCXNldCBkb25lIDEKKwl9IGVsc2UgeworCQlfY2xvbmVfZmFpbGVkICR0aGlzIFttYyAiQ2Fubm90IGNsb25lIHN1Ym1vZHVsZXMuIl0KKwl9Cit9CisKK21ldGhvZCBfZG9fY2xvbmVfc3VibW9kdWxlcyB7fSB7CisJaWYgeyRyZWN1cnNpdmUgZXEge3RydWV9fSB7CisJCWRlc3Ryb3kgJHdfYm9keQorCQlzZXQgb19jb25zIFtjb25zb2xlOjplbWJlZCBcCisJCQkkd19ib2R5IFwKKwkJCVttYyAiQ2xvbmluZyBzdWJtb2R1bGVzIl1dCisJCXBhY2sgJHdfYm9keSAtZmlsbCBib3RoIC1leHBhbmQgMSAtcGFkeCAxMAorCQkkb19jb25zIGV4ZWMgXAorCQkJW2xpc3QgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlXSBcCisJCQlbY2IgX2RvX3ZhbGlkYXRlX3N1Ym1vZHVsZV9jbG9uaW5nXQorCX0gZWxzZSB7CisJCXNldCBkb25lIDEKKwl9Cit9CisKK21ldGhvZCBfcmVhZHRyZWVfd2FpdCB7ZmR9IHsKKwlzZXQgYnVmIFtyZWFkICRmZF0KKwkkb19jb25zIHVwZGF0ZV9tZXRlciAkYnVmCisJYXBwZW5kIHJlYWR0cmVlX2VyciAkYnVmCisKKwlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMQorCWlmIHshW2VvZiAkZmRdfSB7CisJCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAwCisJCXJldHVybgorCX0KKworCWlmIHtbY2F0Y2gge2Nsb3NlICRmZH1dfSB7CisJCXNldCBlcnIgJHJlYWR0cmVlX2VycgorCQlyZWdzdWIge15mYXRhbDogfSAkZXJyIHt9IGVycgorCQllcnJvcl9wb3B1cCBbc3RyY2F0IFwKKwkJCVttYyAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iXSBcCisJCQkiXG5cbiRlcnIiXQorCQlyZXR1cm4KKwl9CisKKwkjIC0tIFJ1biB0aGUgcG9zdC1jaGVja291dCBob29rLgorCSMKKwlzZXQgZmRfcGggW2dpdGhvb2tfcmVhZCBwb3N0LWNoZWNrb3V0IFtzdHJpbmcgcmVwZWF0IDAgNDBdIFwKKwkJW2dpdCByZXYtcGFyc2UgSEVBRF0gMV0KKwlpZiB7JGZkX3BoIG5lIHt9fSB7CisJCWdsb2JhbCBwY2hfZXJyb3IKKwkJc2V0IHBjaF9lcnJvciB7fQorCQlmY29uZmlndXJlICRmZF9waCAtYmxvY2tpbmcgMCAtdHJhbnNsYXRpb24gYmluYXJ5IC1lb2ZjaGFyIHt9CisJCWZpbGVldmVudCAkZmRfcGggcmVhZGFibGUgW2NiIF9wb3N0Y2hlY2tvdXRfd2FpdCAkZmRfcGhdCisJfSBlbHNlIHsKKwkJX2RvX2Nsb25lX3N1Ym1vZHVsZXMgJHRoaXMKKwl9Cit9CisKK21ldGhvZCBfcG9zdGNoZWNrb3V0X3dhaXQge2ZkX3BofSB7CisJZ2xvYmFsIHBjaF9lcnJvcgorCisJYXBwZW5kIHBjaF9lcnJvciBbcmVhZCAkZmRfcGhdCisJZmNvbmZpZ3VyZSAkZmRfcGggLWJsb2NraW5nIDEKKwlpZiB7W2VvZiAkZmRfcGhdfSB7CisJCWlmIHtbY2F0Y2gge2Nsb3NlICRmZF9waH1dfSB7CisJCQlob29rX2ZhaWxlZF9wb3B1cCBwb3N0LWNoZWNrb3V0ICRwY2hfZXJyb3IgMAorCQl9CisJCXVuc2V0IHBjaF9lcnJvcgorCQlfZG9fY2xvbmVfc3VibW9kdWxlcyAkdGhpcworCQlyZXR1cm4KKwl9CisJZmNvbmZpZ3VyZSAkZmRfcGggLWJsb2NraW5nIDAKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMjIE9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeQorCittZXRob2QgX2RvX29wZW4ge30geworCWdsb2JhbCBOUworCSR3X25leHQgY29uZiBcCisJCS1zdGF0ZSBkaXNhYmxlZCBcCisJCS1jb21tYW5kIFtjYiBfZG9fb3BlbjJdIFwKKwkJLXRleHQgW21jICJPcGVuIl0KKworCSR7TlN9OjpmcmFtZSAkd19ib2R5CisJJHtOU306OmxhYmVsICR3X2JvZHkuaCBcCisJCS1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyIFwKKwkJLXRleHQgW21jICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiXQorCXBhY2sgJHdfYm9keS5oIC1zaWRlIHRvcCAtZmlsbCB4IC1wYWR5IDEwCisJcGFjayAkd19ib2R5IC1maWxsIHggLXBhZHggMTAKKworCSR7TlN9OjpmcmFtZSAkd19ib2R5LndoZXJlCisJJHtOU306OmxhYmVsICR3X2JvZHkud2hlcmUubCAtdGV4dCBbbWMgIlJlcG9zaXRvcnk6Il0KKwkke05TfTo6ZW50cnkgJHdfYm9keS53aGVyZS50IFwKKwkJLXRleHR2YXJpYWJsZSBAbG9jYWxfcGF0aCBcCisJCS13aWR0aCA1MAorCSR7TlN9OjpidXR0b24gJHdfYm9keS53aGVyZS5iIFwKKwkJLXRleHQgW21jICJCcm93c2UiXSBcCisJCS1jb21tYW5kIFtjYiBfb3Blbl9sb2NhbF9wYXRoXQorCisJZ3JpZCAkd19ib2R5LndoZXJlLmwgJHdfYm9keS53aGVyZS50ICR3X2JvZHkud2hlcmUuYiAtc3RpY2t5IGV3CisJcGFjayAkd19ib2R5LndoZXJlIC1maWxsIHgKKworCWdyaWQgY29sdW1uY29uZmlndXJlICR3X2JvZHkud2hlcmUgMSAtd2VpZ2h0IDEKKworCXRyYWNlIGFkZCB2YXJpYWJsZSBAbG9jYWxfcGF0aCB3cml0ZSBbY2IgX3dyaXRlX2xvY2FsX3BhdGhdCisJYmluZCAkd19ib2R5LmggPERlc3Ryb3k+IFtsaXN0IHRyYWNlIHJlbW92ZSB2YXJpYWJsZSBAbG9jYWxfcGF0aCB3cml0ZSBbY2IgX3dyaXRlX2xvY2FsX3BhdGhdXQorCXVwZGF0ZQorCWZvY3VzICR3X2JvZHkud2hlcmUudAorfQorCittZXRob2QgX29wZW5fbG9jYWxfcGF0aCB7fSB7CisJaWYgeyRsb2NhbF9wYXRoIG5lIHt9fSB7CisJCXNldCBwICRsb2NhbF9wYXRoCisJfSBlbHNlIHsKKwkJc2V0IHAgW3B3ZF0KKwl9CisKKwlzZXQgcCBbdGtfY2hvb3NlRGlyZWN0b3J5IFwKKwkJLWluaXRpYWxkaXIgJHAgXAorCQktcGFyZW50ICR0b3AgXAorCQktdGl0bGUgW21jICJHaXQgUmVwb3NpdG9yeSJdIFwKKwkJLW11c3RleGlzdCB0cnVlXQorCWlmIHskcCBlcSB7fX0gcmV0dXJuCisKKwlzZXQgcCBbZmlsZSBub3JtYWxpemUgJHBdCisJaWYgeyFbX2lzX2dpdCBbZmlsZSBqb2luICRwIC5naXRdXX0geworCQllcnJvcl9wb3B1cCBbbWMgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIgW2ZpbGUgdGFpbCAkcF1dCisJCXJldHVybgorCX0KKwlzZXQgbG9jYWxfcGF0aCAkcAorfQorCittZXRob2QgX2RvX29wZW4yIHt9IHsKKwlpZiB7IVtfaXNfZ2l0IFtmaWxlIGpvaW4gJGxvY2FsX3BhdGggLmdpdF0gYWN0dWFsZ2l0XX0geworCQllcnJvcl9wb3B1cCBbbWMgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIgW2ZpbGUgdGFpbCAkbG9jYWxfcGF0aF1dCisJCXJldHVybgorCX0KKworCWlmIHtbY2F0Y2gge2NkICRsb2NhbF9wYXRofSBlcnJdfSB7CisJCWVycm9yX3BvcHVwIFtzdHJjYXQgXAorCQkJW21jICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIgJGxvY2FsX3BhdGhdIFwKKwkJCSJcblxuJGVyciJdCisJCXJldHVybgorCX0KKworCV9hcHBlbmRfcmVjZW50cmVwb3MgW3B3ZF0KKwlzZXQgOjpfZ2l0ZGlyICRhY3R1YWxnaXQKKwlzZXQgOjpfcHJlZml4IHt9CisJc2V0IGRvbmUgMQorfQorCit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9jaG9vc2VfcmV2LnRjbCBiL2dpdC1ndWkvbGliL2Nob29zZV9yZXYudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYWU3OTMKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi9jaG9vc2VfcmV2LnRjbApAQCAtMCwwICsxLDYzNCBAQAorIyBnaXQtZ3VpIHJldmlzaW9uIGNob29zZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNoYXduIFBlYXJjZQorCitjbGFzcyBjaG9vc2VfcmV2IHsKKworaW1hZ2UgY3JlYXRlIHBob3RvIDo6Y2hvb3NlX3Jldjo6aW1nX2ZpbmQgLWRhdGEge1IwbEdPRGxoRUFBUUFJWUFBUHdDQkNRbUpEdytQQlFTRkFRQ0JNemEzTlRtNU1UVzFIeUNoT1QyOU96cTdNVHE3S3plNUt6bTdPejYvTlR5OUl6YTVHekd6S3pTMU56eTlOejI5S3pxOUhUR3pIVEsxTHphM0F3S0RMenU5SlRpN0hUVzVHVEN6SVRPMU16cTdIemE1RlRLMUVTeXZIekt6S3pXM0RReU5EeXF0RHc2UEl6VzVIekd6QVQrL0R3K1JLeXVyTlRPek1UR3hNUyt0SlNHZEFUQ3hIUnlkTFNxcEx5bW5MU2lqQndlSEVSQ1JOemUzUHo2OVBUeTlPemUxT1RTeE9UR3JNU3FsTHkrdlBUdTVPelN2TXltak5UR3ZOUyt0TXkycE15dW5NU2VmQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBQUFBQUxBQUFBQUFRQUJBQUFBZTRnQUNDQUFFQ0E0T0lpQUlFQlFZSEJBS0pnd0lJQ1FvTERBMElrWklFQ1E0UEN4QVJDd1NTQXhJVEZBOFZFQllYR0JtSkFRWUxHaFViSEIwZUg3S0lHUklNRUJBZ0lTSWpKS2FJSlFRTEZ4RVJJaWFsa2llVUdpZ3BLUm9JQkNxSkt5eUxCd3ZKQWlvRXlvSUNMUzR2NlFRd01RUXlMdXFMbGk4ek5EVTJCQ2YxbE4zQWtVUEhEaDQ5ZkFRQUFFbkdEMU1DQ0FMWkVhU0hrSVVNQlFTOHdXTUlrU0pHaEJ6Qm1GRUdnUnNCVXFwTWlTZ2RBRCtCQUFBaC9taERjbVZoZEdWa0lHSjVJRUpOVUZSdlIwbEdJRkJ5YnlCMlpYSnphVzl1SURJdU5RMEtxU0JFWlhabGJFTnZjaUF4T1RrM0xERTVPVGd1SUVGc2JDQnlhV2RvZEhNZ2NtVnpaWEoyWldRdURRcG9kSFJ3T2k4dmQzZDNMbVJsZG1Wc1kyOXlMbU52YlFBN30KKworZmllbGQgdyAgICAgICAgICAgICAgIDsgIyBvdXIgbWVnYXdpZGdldCBwYXRoCitmaWVsZCB3X2xpc3QgICAgICAgICAgOyAjIGxpc3Qgb2YgY3VycmVudGx5IGZpbHRlcmVkIHNwZWNzCitmaWVsZCB3X2ZpbHRlciAgICAgICAgOyAjIGZpbHRlciBlbnRyeSBmb3IgJHdfbGlzdAorCitmaWVsZCBjX2V4cHIgICAgICAgIHt9OyAjIGN1cnJlbnQgcmV2aXNpb24gZXhwcmVzc2lvbgorZmllbGQgZmlsdGVyICAgICAgICAiIjsgIyBjdXJyZW50IGZpbHRlciBzdHJpbmcKK2ZpZWxkIHJldnR5cGUgICAgIGhlYWQ7ICMgdHlwZSBvZiByZXZpc2lvbiBjaG9zZW4KK2ZpZWxkIGN1cl9zcGVjcyBbbGlzdF07ICMgbGlzdCBvZiBzcGVjcyBmb3IgJHJldnR5cGUKK2ZpZWxkIHNwZWNfaGVhZCAgICAgICA7ICMgbGlzdCBvZiBhbGwgaGVhZCBzcGVjcworZmllbGQgc3BlY190cmNrICAgICAgIDsgIyBsaXN0IG9mIGFsbCB0cmFja2luZyBicmFuY2ggc3BlY3MKK2ZpZWxkIHNwZWNfdGFnICAgICAgICA7ICMgbGlzdCBvZiBhbGwgdGFnIHNwZWNzCitmaWVsZCB0aXBfZGF0YSAgICAgICAgOyAjIGFycmF5IG9mIHRpcCBjb21taXQgaW5mbyBieSByZWZuYW1lCitmaWVsZCBsb2dfbGFzdCAgICAgICAgOyAjIGFycmF5IG9mIHJlZmxvZyBkYXRlIGJ5IHJlZm5hbWUKKworZmllbGQgdG9vbHRpcF93bSAgICAgICAge30gOyAjIEN1cnJlbnQgdG9vbHRpcCB0b3BsZXZlbCwgaWYgb3BlbgorZmllbGQgdG9vbHRpcF90ICAgICAgICAge30gOyAjIFRleHQgd2lkZ2V0IGluICR0b29sdGlwX3dtCitmaWVsZCB0b29sdGlwX3RpbWVyICAgICB7fSA7ICMgQ3VycmVudCB0aW1lciBldmVudCBmb3Igb3VyIHRvb2x0aXAKKworcHJvYyBuZXcge3BhdGgge3RpdGxlIHt9fX0geworCXJldHVybiBbX25ldyAkcGF0aCAwICR0aXRsZV0KK30KKworcHJvYyBuZXdfdW5tZXJnZWQge3BhdGgge3RpdGxlIHt9fX0geworCXJldHVybiBbX25ldyAkcGF0aCAxICR0aXRsZV0KK30KKworY29uc3RydWN0b3IgX25ldyB7cGF0aCB1bm1lcmdlZF9vbmx5IHRpdGxlfSB7CisJZ2xvYmFsIGN1cnJlbnRfYnJhbmNoIGlzX2RldGFjaGVkIHVzZV90dGsgTlMKKworCWlmIHshW2luZm8gZXhpc3RzIDo6YWxsX3JlbW90ZXNdfSB7CisJCWxvYWRfYWxsX3JlbW90ZXMKKwl9CisKKwlzZXQgdyAkcGF0aAorCisJaWYgeyR0aXRsZSBuZSB7fX0geworCQkke05TfTo6bGFiZWxmcmFtZSAkdyAtdGV4dCAkdGl0bGUKKwl9IGVsc2UgeworCQkke05TfTo6ZnJhbWUgJHcKKwl9CisJYmluZCAkdyA8RGVzdHJveT4gW2NiIF9kZWxldGUgJVddCisKKwlpZiB7JGlzX2RldGFjaGVkfSB7CisJCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5kZXRhY2hlZGhlYWRfciBcCisJCQktdGV4dCBbbWMgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiXSBcCisJCQktdmFsdWUgSEVBRCBcCisJCQktdmFyaWFibGUgQHJldnR5cGUKKwkJaWYgeyEkdXNlX3R0a30geyR3LmRldGFjaGVkaGVhZF9yIGNvbmZpZ3VyZSAtYW5jaG9yIHd9CisJCWdyaWQgJHcuZGV0YWNoZWRoZWFkX3IgLXN0aWNreSB3ZSAtcGFkeCB7MCA1fSAtY29sdW1uc3BhbiAyCisJfQorCisJJHtOU306OnJhZGlvYnV0dG9uICR3LmV4cHJfciBcCisJCS10ZXh0IFttYyAiUmV2aXNpb24gRXhwcmVzc2lvbjoiXSBcCisJCS12YWx1ZSBleHByIFwKKwkJLXZhcmlhYmxlIEByZXZ0eXBlCisJJHtOU306OmVudHJ5ICR3LmV4cHJfdCBcCisJCS13aWR0aCA1MCBcCisJCS10ZXh0dmFyaWFibGUgQGNfZXhwciBcCisJCS12YWxpZGF0ZSBrZXkgXAorCQktdmFsaWRhdGVjb21tYW5kIFtjYiBfdmFsaWRhdGUgJWQgJVNdCisJZ3JpZCAkdy5leHByX3IgJHcuZXhwcl90IC1zdGlja3kgd2UgLXBhZHggezAgNX0KKworCSR7TlN9OjpmcmFtZSAkdy50eXBlcworCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy50eXBlcy5oZWFkX3IgXAorCQktdGV4dCBbbWMgIkxvY2FsIEJyYW5jaCJdIFwKKwkJLXZhbHVlIGhlYWQgXAorCQktdmFyaWFibGUgQHJldnR5cGUKKwlwYWNrICR3LnR5cGVzLmhlYWRfciAtc2lkZSBsZWZ0CisJJHtOU306OnJhZGlvYnV0dG9uICR3LnR5cGVzLnRyY2tfciBcCisJCS10ZXh0IFttYyAiVHJhY2tpbmcgQnJhbmNoIl0gXAorCQktdmFsdWUgdHJjayBcCisJCS12YXJpYWJsZSBAcmV2dHlwZQorCXBhY2sgJHcudHlwZXMudHJja19yIC1zaWRlIGxlZnQKKwkke05TfTo6cmFkaW9idXR0b24gJHcudHlwZXMudGFnX3IgXAorCQktdGV4dCBbbWMgIlRhZyJdIFwKKwkJLXZhbHVlIHRhZyBcCisJCS12YXJpYWJsZSBAcmV2dHlwZQorCXBhY2sgJHcudHlwZXMudGFnX3IgLXNpZGUgbGVmdAorCXNldCB3X2ZpbHRlciAkdy50eXBlcy5maWx0ZXIKKwkke05TfTo6ZW50cnkgJHdfZmlsdGVyIFwKKwkJLXdpZHRoIDEyIFwKKwkJLXRleHR2YXJpYWJsZSBAZmlsdGVyIFwKKwkJLXZhbGlkYXRlIGtleSBcCisJCS12YWxpZGF0ZWNvbW1hbmQgW2NiIF9maWx0ZXIgJVBdCisJcGFjayAkd19maWx0ZXIgLXNpZGUgcmlnaHQKKwlwYWNrIFske05TfTo6bGFiZWwgJHcudHlwZXMuZmlsdGVyX2ljb24gXAorCQktaW1hZ2UgOjpjaG9vc2VfcmV2OjppbWdfZmluZCBcCisJCV0gLXNpZGUgcmlnaHQKKwlncmlkICR3LnR5cGVzIC1zdGlja3kgd2UgLXBhZHggezAgNX0gLWNvbHVtbnNwYW4gMgorCisJaWYgeyR1c2VfdHRrfSB7CisJCXR0azo6ZnJhbWUgJHcubGlzdCAtc3R5bGUgU0xpc3Rib3guVEZyYW1lIC1wYWRkaW5nIDIKKwl9IGVsc2UgeworCQlmcmFtZSAkdy5saXN0CisJfQorCXNldCB3X2xpc3QgJHcubGlzdC5sCisJbGlzdGJveCAkd19saXN0IFwKKwkJLWZvbnQgZm9udF9kaWZmIFwKKwkJLXdpZHRoIDUwIFwKKwkJLWhlaWdodCAxMCBcCisJCS1zZWxlY3Rtb2RlIGJyb3dzZSBcCisJCS1leHBvcnRzZWxlY3Rpb24gZmFsc2UgXAorCQkteHNjcm9sbGNvbW1hbmQgW2NiIF9zYl9zZXQgJHcubGlzdC5zYnggaF0gXAorCQkteXNjcm9sbGNvbW1hbmQgW2NiIF9zYl9zZXQgJHcubGlzdC5zYnkgdl0KKwlpZiB7JHVzZV90dGt9IHsKKwkJJHdfbGlzdCBjb25maWd1cmUgLXJlbGllZiBmbGF0IC1oaWdobGlnaHR0aGlja25lc3MgMCAtYm9yZGVyd2lkdGggMAorCX0KKwlwYWNrICR3X2xpc3QgLWZpbGwgYm90aCAtZXhwYW5kIDEKKwlncmlkICR3Lmxpc3QgLXN0aWNreSBuc3dlIC1wYWR4IHsyMCA1fSAtY29sdW1uc3BhbiAyCisJYmluZCAkd19saXN0IDxBbnktTW90aW9uPiAgW2NiIF9zaG93X3Rvb2x0aXAgQCV4LCV5XQorCWJpbmQgJHdfbGlzdCA8QW55LUVudGVyPiAgIFtjYiBfaGlkZV90b29sdGlwXQorCWJpbmQgJHdfbGlzdCA8QW55LUxlYXZlPiAgIFtjYiBfaGlkZV90b29sdGlwXQorCWJpbmQgJHdfbGlzdCA8RGVzdHJveT4gICAgIFtjYiBfaGlkZV90b29sdGlwXQorCisJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHcgMSAtd2VpZ2h0IDEKKwlpZiB7JGlzX2RldGFjaGVkfSB7CisJCWdyaWQgcm93Y29uZmlndXJlICR3IDMgLXdlaWdodCAxCisJfSBlbHNlIHsKKwkJZ3JpZCByb3djb25maWd1cmUgJHcgMiAtd2VpZ2h0IDEKKwl9CisKKwl0cmFjZSBhZGQgdmFyaWFibGUgQHJldnR5cGUgd3JpdGUgW2NiIF9zZWxlY3RdCisJYmluZCAkd19maWx0ZXIgPEtleS1SZXR1cm4+IFtsaXN0IGZvY3VzICR3X2xpc3RdXDticmVhaworCWJpbmQgJHdfZmlsdGVyIDxLZXktRG93bj4gICBbbGlzdCBmb2N1cyAkd19saXN0XQorCisJc2V0IGZtdCBsaXN0CisJYXBwZW5kIGZtdCB7ICUocmVmbmFtZSl9CisJYXBwZW5kIGZtdCB7IFtsaXN0fQorCWFwcGVuZCBmbXQgeyAlKG9iamVjdHR5cGUpfQorCWFwcGVuZCBmbXQgeyAlKG9iamVjdG5hbWUpfQorCWFwcGVuZCBmbXQgeyBbY29uY2F0ICUodGFnZ2VybmFtZSkgJShhdXRob3JuYW1lKV19CisJYXBwZW5kIGZtdCB7IFtyZWZvcm1hdF9kYXRlIFtjb25jYXQgJSh0YWdnZXJkYXRlKSAlKGF1dGhvcmRhdGUpXV19CisJYXBwZW5kIGZtdCB7ICUoc3ViamVjdCl9CisJYXBwZW5kIGZtdCB7XSBbbGlzdH0KKwlhcHBlbmQgZm10IHsgJSgqb2JqZWN0dHlwZSl9CisJYXBwZW5kIGZtdCB7ICUoKm9iamVjdG5hbWUpfQorCWFwcGVuZCBmbXQgeyAlKCphdXRob3JuYW1lKX0KKwlhcHBlbmQgZm10IHsgW3JlZm9ybWF0X2RhdGUgJSgqYXV0aG9yZGF0ZSldfQorCWFwcGVuZCBmbXQgeyAlKCpzdWJqZWN0KX0KKwlhcHBlbmQgZm10IHtdfQorCXNldCBhbGxfcmVmbiBbbGlzdF0KKwlzZXQgZnJfZmQgW2dpdF9yZWFkIGZvci1lYWNoLXJlZiBcCisJCS0tdGNsIFwKKwkJLS1zb3J0PS10YWdnZXJkYXRlIFwKKwkJLS1mb3JtYXQ9JGZtdCBcCisJCXJlZnMvaGVhZHMgXAorCQlyZWZzL3JlbW90ZXMgXAorCQlyZWZzL3RhZ3MgXAorCQldCisJZmNvbmZpZ3VyZSAkZnJfZmQgLXRyYW5zbGF0aW9uIGxmIC1lbmNvZGluZyB1dGYtOAorCXdoaWxlIHtbZ2V0cyAkZnJfZmQgbGluZV0gPiAwfSB7CisJCXNldCBsaW5lIFtldmFsICRsaW5lXQorCQlpZiB7W2xpbmRleCAkbGluZSAxIDBdIGVxIHt0YWd9fSB7CisJCQlpZiB7W2xpbmRleCAkbGluZSAyIDBdIGVxIHtjb21taXR9fSB7CisJCQkJc2V0IHNoYTEgW2xpbmRleCAkbGluZSAyIDFdCisJCQl9IGVsc2UgeworCQkJCWNvbnRpbnVlCisJCQl9CisJCX0gZWxzZWlmIHtbbGluZGV4ICRsaW5lIDEgMF0gZXEge2NvbW1pdH19IHsKKwkJCXNldCBzaGExIFtsaW5kZXggJGxpbmUgMSAxXQorCQl9IGVsc2UgeworCQkJY29udGludWUKKwkJfQorCQlzZXQgcmVmbiBbbGluZGV4ICRsaW5lIDBdCisJCXNldCB0aXBfZGF0YSgkcmVmbikgW2xyYW5nZSAkbGluZSAxIGVuZF0KKwkJbGFwcGVuZCBjbXRfcmVmbigkc2hhMSkgJHJlZm4KKwkJbGFwcGVuZCBhbGxfcmVmbiAkcmVmbgorCX0KKwljbG9zZSAkZnJfZmQKKworCWlmIHskdW5tZXJnZWRfb25seX0geworCQlzZXQgZnJfZmQgW2dpdF9yZWFkIHJldi1saXN0IC0tYWxsIF4kOjpIRUFEXQorCQl3aGlsZSB7W2dldHMgJGZyX2ZkIHNoYTFdID4gMH0geworCQkJaWYge1tjYXRjaCB7c2V0IHJsc3QgJGNtdF9yZWZuKCRzaGExKX1dfSBjb250aW51ZQorCQkJZm9yZWFjaCByZWZuICRybHN0IHsKKwkJCQlzZXQgaW5jKCRyZWZuKSAxCisJCQl9CisJCX0KKwkJY2xvc2UgJGZyX2ZkCisJfSBlbHNlIHsKKwkJZm9yZWFjaCByZWZuICRhbGxfcmVmbiB7CisJCQlzZXQgaW5jKCRyZWZuKSAxCisJCX0KKwl9CisKKwlzZXQgc3BlY19oZWFkIFtsaXN0XQorCWZvcmVhY2ggbmFtZSBbbG9hZF9hbGxfaGVhZHNdIHsKKwkJc2V0IHJlZm4gcmVmcy9oZWFkcy8kbmFtZQorCQlpZiB7W2luZm8gZXhpc3RzIGluYygkcmVmbildfSB7CisJCQlsYXBwZW5kIHNwZWNfaGVhZCBbbGlzdCAkbmFtZSAkcmVmbl0KKwkJfQorCX0KKworCXNldCBzcGVjX3RyY2sgW2xpc3RdCisJZm9yZWFjaCBzcGVjIFthbGxfdHJhY2tpbmdfYnJhbmNoZXNdIHsKKwkJc2V0IHJlZm4gW2xpbmRleCAkc3BlYyAwXQorCQlpZiB7W2luZm8gZXhpc3RzIGluYygkcmVmbildfSB7CisJCQlyZWdzdWIgXnJlZnMvKGhlYWRzfHJlbW90ZXMpLyAkcmVmbiB7fSBuYW1lCisJCQlsYXBwZW5kIHNwZWNfdHJjayBbY29uY2F0ICRuYW1lICRzcGVjXQorCQl9CisJfQorCisJc2V0IHNwZWNfdGFnIFtsaXN0XQorCWZvcmVhY2ggbmFtZSBbbG9hZF9hbGxfdGFnc10geworCQlzZXQgcmVmbiByZWZzL3RhZ3MvJG5hbWUKKwkJaWYge1tpbmZvIGV4aXN0cyBpbmMoJHJlZm4pXX0geworCQkJbGFwcGVuZCBzcGVjX3RhZyBbbGlzdCAkbmFtZSAkcmVmbl0KKwkJfQorCX0KKworCQkgIGlmIHskaXNfZGV0YWNoZWR9ICAgICAgICAgICAgIHsgc2V0IHJldnR5cGUgSEVBRAorCX0gZWxzZWlmIHtbbGxlbmd0aCAkc3BlY19oZWFkXSA+IDB9IHsgc2V0IHJldnR5cGUgaGVhZAorCX0gZWxzZWlmIHtbbGxlbmd0aCAkc3BlY190cmNrXSA+IDB9IHsgc2V0IHJldnR5cGUgdHJjaworCX0gZWxzZWlmIHtbbGxlbmd0aCAkc3BlY190YWcgXSA+IDB9IHsgc2V0IHJldnR5cGUgdGFnCisJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgcmV2dHlwZSBleHByCisJfQorCisJaWYgeyRyZXZ0eXBlIGVxIHtoZWFkfSAmJiAkY3VycmVudF9icmFuY2ggbmUge319IHsKKwkJc2V0IGkgMAorCQlmb3JlYWNoIHNwZWMgJHNwZWNfaGVhZCB7CisJCQlpZiB7W2xpbmRleCAkc3BlYyAwXSBlcSAkY3VycmVudF9icmFuY2h9IHsKKwkJCQkkd19saXN0IHNlbGVjdGlvbiBjbGVhciAwIGVuZAorCQkJCSR3X2xpc3Qgc2VsZWN0aW9uIHNldCAkaQorCQkJCWJyZWFrCisJCQl9CisJCQlpbmNyIGkKKwkJfQorCX0KKworCXJldHVybiAkdGhpcworfQorCittZXRob2Qgbm9uZSB7dGV4dH0geworCWdsb2JhbCBOUyB1c2VfdHRrCisJaWYgeyFbd2luZm8gZXhpc3RzICR3Lm5vbmVfcl19IHsKKwkJJHtOU306OnJhZGlvYnV0dG9uICR3Lm5vbmVfciBcCisJCQktdmFsdWUgbm9uZSBcCisJCQktdmFyaWFibGUgQHJldnR5cGUKKwkJaWYgeyEkdXNlX3R0a30geyR3Lm5vbmVfciBjb25maWd1cmUgLWFuY2hvciB3fQorCQlncmlkICR3Lm5vbmVfciAtc3RpY2t5IHdlIC1wYWR4IHswIDV9IC1jb2x1bW5zcGFuIDIKKwl9CisJJHcubm9uZV9yIGNvbmZpZ3VyZSAtdGV4dCAkdGV4dAorfQorCittZXRob2QgZ2V0IHt9IHsKKwlzd2l0Y2ggLS0gJHJldnR5cGUgeworCWhlYWQgLQorCXRyY2sgLQorCXRhZyAgeworCQlzZXQgaSBbJHdfbGlzdCBjdXJzZWxlY3Rpb25dCisJCWlmIHskaSBuZSB7fX0geworCQkJcmV0dXJuIFtsaW5kZXggJGN1cl9zcGVjcyAkaSAwXQorCQl9IGVsc2UgeworCQkJcmV0dXJuIHt9CisJCX0KKwl9CisKKwlIRUFEIHsgcmV0dXJuIEhFQUQgICAgICAgICAgICAgICAgICAgICB9CisJZXhwciB7IHJldHVybiAkY19leHByICAgICAgICAgICAgICAgICAgfQorCW5vbmUgeyByZXR1cm4ge30gICAgICAgICAgICAgICAgICAgICAgIH0KKwlkZWZhdWx0IHsgZXJyb3IgInVua25vd24gdHlwZSBvZiByZXZpc2lvbiIgfQorCX0KK30KKworbWV0aG9kIHBpY2tfdHJhY2tpbmdfYnJhbmNoIHt9IHsKKwlzZXQgcmV2dHlwZSB0cmNrCit9CisKK21ldGhvZCBmb2N1c19maWx0ZXIge30geworCWlmIHtbJHdfZmlsdGVyIGNnZXQgLXN0YXRlXSBlcSB7bm9ybWFsfX0geworCQlmb2N1cyAkd19maWx0ZXIKKwl9Cit9CisKK21ldGhvZCBiaW5kX2xpc3Rib3gge2V2ZW50IHNjcmlwdH0gIHsKKwliaW5kICR3X2xpc3QgJGV2ZW50ICRzY3JpcHQKK30KKworbWV0aG9kIGdldF9sb2NhbF9icmFuY2gge30geworCWlmIHskcmV2dHlwZSBlcSB7aGVhZH19IHsKKwkJcmV0dXJuIFtfZXhwciAkdGhpc10KKwl9IGVsc2UgeworCQlyZXR1cm4ge30KKwl9Cit9CisKK21ldGhvZCBnZXRfdHJhY2tpbmdfYnJhbmNoIHt9IHsKKwlzZXQgaSBbJHdfbGlzdCBjdXJzZWxlY3Rpb25dCisJaWYgeyRpIGVxIHt9IHx8ICRyZXZ0eXBlIG5lIHt0cmNrfX0geworCQlyZXR1cm4ge30KKwl9CisJcmV0dXJuIFtscmFuZ2UgW2xpbmRleCAkY3VyX3NwZWNzICRpXSAxIGVuZF0KK30KKworbWV0aG9kIGdldF9jb21taXQge30geworCXNldCBlIFtfZXhwciAkdGhpc10KKwlpZiB7JGUgZXEge319IHsKKwkJcmV0dXJuIHt9CisJfQorCXJldHVybiBbZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJGVeMCJdCit9CisKK21ldGhvZCBjb21taXRfb3JfZGllIHt9IHsKKwlpZiB7W2NhdGNoIHtzZXQgbmV3IFtnZXRfY29tbWl0ICR0aGlzXX0gZXJyXX0geworCisJCSMgQ2xlYW51cCB0aGUgbm90LXNvLWZyaWVuZGx5IGVycm9yIGZyb20gcmV2LXBhcnNlLgorCQkjCisJCXJlZ3N1YiB7XmZhdGFsOlxzKn0gJGVyciB7fSBlcnIKKwkJaWYgeyRlcnIgZXEge05lZWRlZCBhIHNpbmdsZSByZXZpc2lvbn19IHsKKwkJCXNldCBlcnIge30KKwkJfQorCisJCXNldCB0b3AgW3dpbmZvIHRvcGxldmVsICR3XQorCQlzZXQgbXNnIFtzdHJjYXQgW21jICJJbnZhbGlkIHJldmlzaW9uOiAlcyIgW2dldCAkdGhpc11dICJcblxuJGVyciJdCisJCXRrX21lc3NhZ2VCb3ggXAorCQkJLWljb24gZXJyb3IgXAorCQkJLXR5cGUgb2sgXAorCQkJLXRpdGxlIFt3bSB0aXRsZSAkdG9wXSBcCisJCQktcGFyZW50ICR0b3AgXAorCQkJLW1lc3NhZ2UgJG1zZworCQllcnJvciAkbXNnCisJfQorCXJldHVybiAkbmV3Cit9CisKK21ldGhvZCBfZXhwciB7fSB7CisJc3dpdGNoIC0tICRyZXZ0eXBlIHsKKwloZWFkIC0KKwl0cmNrIC0KKwl0YWcgIHsKKwkJc2V0IGkgWyR3X2xpc3QgY3Vyc2VsZWN0aW9uXQorCQlpZiB7JGkgbmUge319IHsKKwkJCXJldHVybiBbbGluZGV4ICRjdXJfc3BlY3MgJGkgMV0KKwkJfSBlbHNlIHsKKwkJCWVycm9yIFttYyAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIl0KKwkJfQorCX0KKworCWV4cHIgeworCQlpZiB7JGNfZXhwciBuZSB7fX0geworCQkJcmV0dXJuICRjX2V4cHIKKwkJfSBlbHNlIHsKKwkJCWVycm9yIFttYyAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iXQorCQl9CisJfQorCUhFQUQgeyByZXR1cm4gSEVBRCAgICAgICAgICAgICAgICAgICAgIH0KKwlub25lIHsgcmV0dXJuIHt9ICAgICAgICAgICAgICAgICAgICAgICB9CisJZGVmYXVsdCB7IGVycm9yICJ1bmtub3duIHR5cGUgb2YgcmV2aXNpb24iICAgICAgfQorCX0KK30KKworbWV0aG9kIF92YWxpZGF0ZSB7ZCBTfSB7CisJaWYgeyRkID09IDF9IHsKKwkJaWYge1tyZWdleHAge1xzfSAkU119IHsKKwkJCXJldHVybiAwCisJCX0KKwkJaWYge1tzdHJpbmcgbGVuZ3RoICRTXSA+IDB9IHsKKwkJCXNldCByZXZ0eXBlIGV4cHIKKwkJfQorCX0KKwlyZXR1cm4gMQorfQorCittZXRob2QgX2ZpbHRlciB7UH0geworCWlmIHtbcmVnZXhwIHtcc30gJFBdfSB7CisJCXJldHVybiAwCisJfQorCV9yZWJ1aWxkICR0aGlzICRQCisJcmV0dXJuIDEKK30KKworbWV0aG9kIF9zZWxlY3Qge2FyZ3N9IHsKKwlfcmVidWlsZCAkdGhpcyAkZmlsdGVyCisJZm9jdXNfZmlsdGVyICR0aGlzCit9CisKK21ldGhvZCBfcmVidWlsZCB7cGF0fSB7CisJc2V0IHN0ZSBub3JtYWwKKwlzd2l0Y2ggLS0gJHJldnR5cGUgeworCWhlYWQgeyBzZXQgbmV3ICRzcGVjX2hlYWQgfQorCXRyY2sgeyBzZXQgbmV3ICRzcGVjX3RyY2sgfQorCXRhZyAgeyBzZXQgbmV3ICRzcGVjX3RhZyAgfQorCWV4cHIgLQorCUhFQUQgLQorCW5vbmUgeworCQlzZXQgbmV3IFtsaXN0XQorCQlzZXQgc3RlIGRpc2FibGVkCisJfQorCX0KKworCWlmIHtbJHdfbGlzdCBjZ2V0IC1zdGF0ZV0gZXEge2Rpc2FibGVkfX0geworCQkkd19saXN0IGNvbmZpZ3VyZSAtc3RhdGUgbm9ybWFsCisJfQorCSR3X2xpc3QgZGVsZXRlIDAgZW5kCisKKwlpZiB7JHBhdCBuZSB7fX0geworCQlzZXQgcGF0ICoke3BhdH0qCisJfQorCXNldCBjdXJfc3BlY3MgW2xpc3RdCisJZm9yZWFjaCBzcGVjICRuZXcgeworCQlzZXQgdHh0IFtsaW5kZXggJHNwZWMgMF0KKwkJaWYgeyRwYXQgZXEge30gfHwgW3N0cmluZyBtYXRjaCAkcGF0ICR0eHRdfSB7CisJCQlsYXBwZW5kIGN1cl9zcGVjcyAkc3BlYworCQkJJHdfbGlzdCBpbnNlcnQgZW5kICR0eHQKKwkJfQorCX0KKwlpZiB7JGN1cl9zcGVjcyBuZSB7fX0geworCQkkd19saXN0IHNlbGVjdGlvbiBjbGVhciAwIGVuZAorCQkkd19saXN0IHNlbGVjdGlvbiBzZXQgMAorCX0KKworCWlmIHtbJHdfZmlsdGVyIGNnZXQgLXN0YXRlXSBuZSAkc3RlfSB7CisJCSR3X2xpc3QgICBjb25maWd1cmUgLXN0YXRlICRzdGUKKwkJJHdfZmlsdGVyIGNvbmZpZ3VyZSAtc3RhdGUgJHN0ZQorCX0KK30KKworbWV0aG9kIF9kZWxldGUge2N1cnJlbnR9IHsKKwlpZiB7JGN1cnJlbnQgZXEgJHd9IHsKKwkJZGVsZXRlX3RoaXMKKwl9Cit9CisKK21ldGhvZCBfc2Jfc2V0IHtzYiBvcmllbnQgZmlyc3QgbGFzdH0geworCWdsb2JhbCBOUworCXNldCBvbGRfZm9jdXMgW2ZvY3VzIC1sYXN0Zm9yICR3XQorCisJaWYgeyRmaXJzdCA9PSAwICYmICRsYXN0ID09IDF9IHsKKwkJaWYge1t3aW5mbyBleGlzdHMgJHNiXX0geworCQkJZGVzdHJveSAkc2IKKwkJCWlmIHskb2xkX2ZvY3VzIG5lIHt9fSB7CisJCQkJdXBkYXRlCisJCQkJZm9jdXMgJG9sZF9mb2N1cworCQkJfQorCQl9CisJCXJldHVybgorCX0KKworCWlmIHshW3dpbmZvIGV4aXN0cyAkc2JdfSB7CisJCWlmIHskb3JpZW50IGVxIHtofX0geworCQkJJHtOU306OnNjcm9sbGJhciAkc2IgLW9yaWVudCBoIC1jb21tYW5kIFtsaXN0ICR3X2xpc3QgeHZpZXddCisJCQlwYWNrICRzYiAtZmlsbCB4IC1zaWRlIGJvdHRvbSAtYmVmb3JlICR3X2xpc3QKKwkJfSBlbHNlIHsKKwkJCSR7TlN9OjpzY3JvbGxiYXIgJHNiIC1vcmllbnQgdiAtY29tbWFuZCBbbGlzdCAkd19saXN0IHl2aWV3XQorCQkJcGFjayAkc2IgLWZpbGwgeSAtc2lkZSByaWdodCAtYmVmb3JlICR3X2xpc3QKKwkJfQorCQlpZiB7JG9sZF9mb2N1cyBuZSB7fX0geworCQkJdXBkYXRlCisJCQlmb2N1cyAkb2xkX2ZvY3VzCisJCX0KKwl9CisKKwljYXRjaCB7JHNiIHNldCAkZmlyc3QgJGxhc3R9Cit9CisKK21ldGhvZCBfc2hvd190b29sdGlwIHtwb3N9IHsKKwlpZiB7JHRvb2x0aXBfd20gbmUge319IHsKKwkJX29wZW5fdG9vbHRpcCAkdGhpcworCX0gZWxzZWlmIHskdG9vbHRpcF90aW1lciBlcSB7fX0geworCQlzZXQgdG9vbHRpcF90aW1lciBbYWZ0ZXIgMTAwMCBbY2IgX29wZW5fdG9vbHRpcF1dCisJfQorfQorCittZXRob2QgX29wZW5fdG9vbHRpcCB7fSB7CisJZ2xvYmFsIHJlbW90ZV91cmwKKworCXNldCB0b29sdGlwX3RpbWVyIHt9CisJc2V0IHBvc194IFt3aW5mbyBwb2ludGVyeCAkd19saXN0XQorCXNldCBwb3NfeSBbd2luZm8gcG9pbnRlcnkgJHdfbGlzdF0KKwlpZiB7W3dpbmZvIGNvbnRhaW5pbmcgJHBvc194ICRwb3NfeV0gbmUgJHdfbGlzdH0geworCQlfaGlkZV90b29sdGlwICR0aGlzCisJCXJldHVybgorCX0KKworCXNldCBwb3MgQFtqb2luIFtsaXN0IFwKKwkJW2V4cHIgeyRwb3NfeCAtIFt3aW5mbyByb290eCAkd19saXN0XX1dIFwKKwkJW2V4cHIgeyRwb3NfeSAtIFt3aW5mbyByb290eSAkd19saXN0XX1dXSAsXQorCXNldCBsbm8gWyR3X2xpc3QgaW5kZXggJHBvc10KKwlpZiB7JGxubyBlcSB7fX0geworCQlfaGlkZV90b29sdGlwICR0aGlzCisJCXJldHVybgorCX0KKworCXNldCBzcGVjIFtsaW5kZXggJGN1cl9zcGVjcyAkbG5vXQorCXNldCByZWZuIFtsaW5kZXggJHNwZWMgMV0KKwlpZiB7JHJlZm4gZXEge319IHsKKwkJX2hpZGVfdG9vbHRpcCAkdGhpcworCQlyZXR1cm4KKwl9CisKKwlpZiB7JHRvb2x0aXBfd20gZXEge319IHsKKwkJc2V0IHRvb2x0aXBfd20gW3RvcGxldmVsICR3X2xpc3QudG9vbHRpcCAtYm9yZGVyd2lkdGggMV0KKwkJY2F0Y2gge3dtIGF0dHJpYnV0ZXMgJHRvb2x0aXBfd20gLXR5cGUgdG9vbHRpcH0KKwkJd20gb3ZlcnJpZGVyZWRpcmVjdCAkdG9vbHRpcF93bSAxCisJCXdtIHRyYW5zaWVudCAkdG9vbHRpcF93bSBbd2luZm8gdG9wbGV2ZWwgJHdfbGlzdF0KKwkJc2V0IHRvb2x0aXBfdCAkdG9vbHRpcF93bS5sYWJlbAorCQl0ZXh0ICR0b29sdGlwX3QgXAorCQkJLXRha2Vmb2N1cyAwIFwKKwkJCS1oaWdobGlnaHR0aGlja25lc3MgMCBcCisJCQktcmVsaWVmIGZsYXQgXAorCQkJLWJvcmRlcndpZHRoIDAgXAorCQkJLXdyYXAgbm9uZSBcCisJCQktYmFja2dyb3VuZCBsaWdodHllbGxvdyBcCisJCQktZm9yZWdyb3VuZCBibGFjaworCQkkdG9vbHRpcF90IHRhZyBjb25mIHNlY3Rpb25faGVhZGVyIC1mb250IGZvbnRfdWlib2xkCisJCWJpbmQgJHRvb2x0aXBfd20gPEVzY2FwZT4gW2NiIF9oaWRlX3Rvb2x0aXBdCisJCXBhY2sgJHRvb2x0aXBfdAorCX0gZWxzZSB7CisJCSR0b29sdGlwX3QgY29uZiAtc3RhdGUgbm9ybWFsCisJCSR0b29sdGlwX3QgZGVsZXRlIDAuMCBlbmQKKwl9CisKKwlzZXQgZGF0YSAkdGlwX2RhdGEoJHJlZm4pCisJaWYge1tsaW5kZXggJGRhdGEgMCAwXSBlcSB7dGFnfX0geworCQlzZXQgdGFnICBbbGluZGV4ICRkYXRhIDBdCisJCWlmIHtbbGluZGV4ICRkYXRhIDEgMF0gZXEge2NvbW1pdH19IHsKKwkJCXNldCBjbWl0IFtsaW5kZXggJGRhdGEgMV0KKwkJfSBlbHNlIHsKKwkJCXNldCBjbWl0IHt9CisJCX0KKwl9IGVsc2VpZiB7W2xpbmRleCAkZGF0YSAwIDBdIGVxIHtjb21taXR9fSB7CisJCXNldCB0YWcgIHt9CisJCXNldCBjbWl0IFtsaW5kZXggJGRhdGEgMF0KKwl9CisKKwkkdG9vbHRpcF90IGluc2VydCBlbmQgW2xpbmRleCAkc3BlYyAwXQorCXNldCBsYXN0IFtfcmVmbG9nX2xhc3QgJHRoaXMgW2xpbmRleCAkc3BlYyAxXV0KKwlpZiB7JGxhc3QgbmUge319IHsKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICJcbiIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kIFttYyAiVXBkYXRlZCJdCisJCSR0b29sdGlwX3QgaW5zZXJ0IGVuZCAiICRsYXN0IgorCX0KKwkkdG9vbHRpcF90IGluc2VydCBlbmQgIlxuIgorCisJaWYgeyR0YWcgbmUge319IHsKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICJcbiIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kIFttYyAiVGFnIl0gc2VjdGlvbl9oZWFkZXIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICIgIFtsaW5kZXggJHRhZyAxXVxuIgorCQkkdG9vbHRpcF90IGluc2VydCBlbmQgW2xpbmRleCAkdGFnIDJdCisJCSR0b29sdGlwX3QgaW5zZXJ0IGVuZCAiIChbbGluZGV4ICR0YWcgM10pXG4iCisJCSR0b29sdGlwX3QgaW5zZXJ0IGVuZCBbbGluZGV4ICR0YWcgNF0KKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICJcbiIKKwl9CisKKwlpZiB7JGNtaXQgbmUge319IHsKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICJcbiIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kIFttYyAiQ29tbWl0QEBub3VuIl0gc2VjdGlvbl9oZWFkZXIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICIgIFtsaW5kZXggJGNtaXQgMV1cbiIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kIFtsaW5kZXggJGNtaXQgMl0KKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICIgKFtsaW5kZXggJGNtaXQgM10pXG4iCisJCSR0b29sdGlwX3QgaW5zZXJ0IGVuZCBbbGluZGV4ICRjbWl0IDRdCisJfQorCisJaWYge1tsbGVuZ3RoICRzcGVjXSA+IDJ9IHsKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICJcbiIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kIFttYyAiUmVtb3RlIl0gc2VjdGlvbl9oZWFkZXIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICIgIFtsaW5kZXggJHNwZWMgMl1cbiIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kIFttYyAiVVJMIl0KKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICIgJHJlbW90ZV91cmwoW2xpbmRleCAkc3BlYyAyXSlcbiIKKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kIFttYyAiQnJhbmNoIl0KKwkJJHRvb2x0aXBfdCBpbnNlcnQgZW5kICIgW2xpbmRleCAkc3BlYyAzXSIKKwl9CisKKwkkdG9vbHRpcF90IGNvbmYgLXN0YXRlIGRpc2FibGVkCisJX3Bvc2l0aW9uX3Rvb2x0aXAgJHRoaXMKK30KKworbWV0aG9kIF9yZWZsb2dfbGFzdCB7bmFtZX0geworCWlmIHtbaW5mbyBleGlzdHMgcmVmbG9nX2xhc3QoJG5hbWUpXX0geworCQlyZXR1cm4gcmVmbG9nX2xhc3QoJG5hbWUpCisJfQorCisJc2V0IGxhc3Qge30KKwlpZiB7W2NhdGNoIHtzZXQgbGFzdCBbZmlsZSBtdGltZSBbZ2l0ZGlyICRuYW1lXV19XQorCSYmICFbY2F0Y2gge3NldCBnIFtvcGVuIFtnaXRkaXIgbG9ncyAkbmFtZV0gcl19XX0geworCQlmY29uZmlndXJlICRnIC10cmFuc2xhdGlvbiBiaW5hcnkKKwkJd2hpbGUge1tnZXRzICRnIGxpbmVdID49IDB9IHsKKwkJCWlmIHtbcmVnZXhwIHs+IChbMS05XVswLTldKikgfSAkbGluZSBsaW5lIHdoZW5dfSB7CisJCQkJc2V0IGxhc3QgJHdoZW4KKwkJCX0KKwkJfQorCQljbG9zZSAkZworCX0KKworCWlmIHskbGFzdCBuZSB7fX0geworCQlzZXQgbGFzdCBbZm9ybWF0X2RhdGUgJGxhc3RdCisJfQorCXNldCByZWZsb2dfbGFzdCgkbmFtZSkgJGxhc3QKKwlyZXR1cm4gJGxhc3QKK30KKworbWV0aG9kIF9wb3NpdGlvbl90b29sdGlwIHt9IHsKKwlzZXQgbWF4X2ggW2xpbmRleCBbc3BsaXQgWyR0b29sdGlwX3QgaW5kZXggZW5kXSAuXSAwXQorCXNldCBtYXhfdyAwCisJZm9yIHtzZXQgaSAxfSB7JGkgPD0gJG1heF9ofSB7aW5jciBpfSB7CisJCXNldCBjIFtsaW5kZXggW3NwbGl0IFskdG9vbHRpcF90IGluZGV4ICIkaS4wIGxpbmVlbmQiXSAuXSAxXQorCQlpZiB7JGMgPiAkbWF4X3d9IHtzZXQgbWF4X3cgJGN9CisJfQorCSR0b29sdGlwX3QgY29uZiAtd2lkdGggJG1heF93IC1oZWlnaHQgJG1heF9oCisKKwlzZXQgcmVxX3cgW3dpbmZvIHJlcXdpZHRoICAkdG9vbHRpcF90XQorCXNldCByZXFfaCBbd2luZm8gcmVxaGVpZ2h0ICR0b29sdGlwX3RdCisJc2V0IHBvc194IFtleHByIHtbd2luZm8gcG9pbnRlcnggLl0gKyAgNX1dCisJc2V0IHBvc195IFtleHByIHtbd2luZm8gcG9pbnRlcnkgLl0gKyAxMH1dCisKKwlzZXQgZyAiJHtyZXFfd314JHtyZXFfaH0iCisJaWYge1t0ayB3aW5kb3dpbmdzeXN0ZW1dIGVxICJ3aW4zMiIgfHwgJHBvc194ID49IDB9IHthcHBlbmQgZyArfQorCWFwcGVuZCBnICRwb3NfeAorCWlmIHtbdGsgd2luZG93aW5nc3lzdGVtXSBlcSAid2luMzIiIHx8ICRwb3NfeSA+PSAwfSB7YXBwZW5kIGcgK30KKwlhcHBlbmQgZyAkcG9zX3kKKworCXdtIGdlb21ldHJ5ICR0b29sdGlwX3dtICRnCisJcmFpc2UgJHRvb2x0aXBfd20KK30KKworbWV0aG9kIF9oaWRlX3Rvb2x0aXAge30geworCWlmIHskdG9vbHRpcF93bSBuZSB7fX0geworCQlkZXN0cm95ICR0b29sdGlwX3dtCisJCXNldCB0b29sdGlwX3dtIHt9CisJfQorCWlmIHskdG9vbHRpcF90aW1lciBuZSB7fX0geworCQlhZnRlciBjYW5jZWwgJHRvb2x0aXBfdGltZXIKKwkJc2V0IHRvb2x0aXBfdGltZXIge30KKwl9Cit9CisKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2NsYXNzLnRjbCBiL2dpdC1ndWkvbGliL2NsYXNzLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDg1MDZmCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvY2xhc3MudGNsCkBAIC0wLDAgKzEsMTk0IEBACisjIGdpdC1ndWkgc2ltcGxlIGNsYXNzL29iamVjdCBmYWtlLWFsaWtlCisjIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UKKworcHJvYyBjbGFzcyB7Y2xhc3MgYm9keX0geworCWlmIHtbbmFtZXNwYWNlIGV4aXN0cyAkY2xhc3NdfSB7CisJCWVycm9yICJjbGFzcyAkY2xhc3MgYWxyZWFkeSBkZWNsYXJlZCIKKwl9CisJbmFtZXNwYWNlIGV2YWwgJGNsYXNzICIKKwkJdmFyaWFibGUgX19uZXh0aWQgICAgIDAKKwkJdmFyaWFibGUgX19zZWFsZWQgICAgIDAKKwkJdmFyaWFibGUgX19maWVsZF9saXN0IHt9CisJCXZhcmlhYmxlIF9fZmllbGRfYXJyYXkKKworCQlwcm9jIGNiIHtuYW1lIGFyZ3N9IHsKKwkJCXVwdmFyIHRoaXMgdGhpcworCQkJY29uY2F0IFxbbGlzdCAke2NsYXNzfTo6XCRuYW1lIFwkdGhpc1xdIFwkYXJncworCQl9CisJIgorCW5hbWVzcGFjZSBldmFsICRjbGFzcyAkYm9keQorfQorCitwcm9jIGZpZWxkIHtuYW1lIGFyZ3N9IHsKKwlzZXQgY2xhc3MgW3VwbGV2ZWwge25hbWVzcGFjZSBjdXJyZW50fV0KKwl2YXJpYWJsZSAke2NsYXNzfTo6X19zZWFsZWQKKwl2YXJpYWJsZSAke2NsYXNzfTo6X19maWVsZF9hcnJheQorCisJc3dpdGNoIFtsbGVuZ3RoICRhcmdzXSB7CisJMCB7IHNldCBuZXcgW2xpc3QgJG5hbWVdIH0KKwkxIHsgc2V0IG5ldyBbbGlzdCAkbmFtZSBbbGluZGV4ICRhcmdzIDBdXSB9CisJZGVmYXVsdCB7IGVycm9yICJ3cm9uZyAjIGFyZ3M6IGZpZWxkIG5hbWUgdmFsdWU/IiB9CisJfQorCisJaWYgeyRfX3NlYWxlZH0geworCQllcnJvciAiY2xhc3MgJGNsYXNzIGlzIHNlYWxlZCAoY2Fubm90IGFkZCBuZXcgZmllbGRzKSIKKwl9CisKKwlpZiB7W2NhdGNoIHtzZXQgb2xkICRfX2ZpZWxkX2FycmF5KCRuYW1lKX1dfSB7CisJCXZhcmlhYmxlICR7Y2xhc3N9OjpfX2ZpZWxkX2xpc3QKKwkJbGFwcGVuZCBfX2ZpZWxkX2xpc3QgJG5ldworCQlzZXQgX19maWVsZF9hcnJheSgkbmFtZSkgMQorCX0gZWxzZSB7CisJCWVycm9yICJmaWVsZCAkbmFtZSBhbHJlYWR5IGRlY2xhcmVkIgorCX0KK30KKworcHJvYyBjb25zdHJ1Y3RvciB7bmFtZSBwYXJhbXMgYm9keX0geworCXNldCBjbGFzcyBbdXBsZXZlbCB7bmFtZXNwYWNlIGN1cnJlbnR9XQorCXNldCAke2NsYXNzfTo6X19zZWFsZWQgMQorCXZhcmlhYmxlICR7Y2xhc3N9OjpfX2ZpZWxkX2xpc3QKKwlzZXQgbWJvZHljIHt9CisKKwlhcHBlbmQgbWJvZHljIHtzZXQgdGhpcyB9ICRjbGFzcworCWFwcGVuZCBtYm9keWMgezo6X19vW2luY3IgfSAkY2xhc3Mgezo6X19uZXh0aWRdOjpfX2R9IFw7CisJYXBwZW5kIG1ib2R5YyB7Y3JlYXRlX3RoaXMgfSAkY2xhc3MgXDsKKwlhcHBlbmQgbWJvZHljIHtzZXQgX190aGlzIFtuYW1lc3BhY2UgcXVhbGlmaWVycyAkdGhpc119IFw7CisKKwlpZiB7JF9fZmllbGRfbGlzdCBuZSB7fX0geworCQlhcHBlbmQgbWJvZHljIHt1cHZhciAjMH0KKwkJZm9yZWFjaCBuICRfX2ZpZWxkX2xpc3QgeworCQkJc2V0IG4gW2xpbmRleCAkbiAwXQorCQkJYXBwZW5kIG1ib2R5YyB7ICR7X190aGlzfTo6fSAkbiB7IH0gJG4KKwkJCXJlZ3N1YiAtYWxsIEAkblxcTSAkYm9keSAiXCR7X190aGlzfTo6JG4iIGJvZHkKKwkJfQorCQlhcHBlbmQgbWJvZHljIFw7CisJCWZvcmVhY2ggbiAkX19maWVsZF9saXN0IHsKKwkJCWlmIHtbbGxlbmd0aCAkbl0gPT0gMn0geworCQkJCWFwcGVuZCBtYm9keWMgXAorCQkJCXtzZXQgfSBbbGluZGV4ICRuIDBdIHsgfSBbbGlzdCBbbGluZGV4ICRuIDFdXSBcOworCQkJfQorCQl9CisJfQorCWFwcGVuZCBtYm9keWMgJGJvZHkKKwluYW1lc3BhY2UgZXZhbCAkY2xhc3MgW2xpc3QgcHJvYyAkbmFtZSAkcGFyYW1zICRtYm9keWNdCit9CisKK3Byb2MgbWV0aG9kIHtuYW1lIHBhcmFtcyBib2R5IHtkZWxldGVkIHt9fSB7ZGVsX2JvZHkge319fSB7CisJc2V0IGNsYXNzIFt1cGxldmVsIHtuYW1lc3BhY2UgY3VycmVudH1dCisJc2V0ICR7Y2xhc3N9OjpfX3NlYWxlZCAxCisJdmFyaWFibGUgJHtjbGFzc306Ol9fZmllbGRfbGlzdAorCXNldCBwYXJhbXMgW2xpbnNlcnQgJHBhcmFtcyAwIHRoaXNdCisJc2V0IG1ib2R5YyB7fQorCisJYXBwZW5kIG1ib2R5YyB7c2V0IF9fdGhpcyBbbmFtZXNwYWNlIHF1YWxpZmllcnMgJHRoaXNdfSBcOworCisJc3dpdGNoICRkZWxldGVkIHsKKwl7fSB7fQorCWlmZGVsZXRlZCB7CisJCWFwcGVuZCBtYm9keWMge2lmIHshW25hbWVzcGFjZSBleGlzdHMgJF9fdGhpc119IH0KKwkJYXBwZW5kIG1ib2R5YyBceyAkZGVsX2JvZHkgXDsgcmV0dXJuIFx9IFw7CisJfQorCWRlZmF1bHQgeworCQllcnJvciAid3JvbmcgIyBhcmdzOiBtZXRob2QgbmFtZSBhcmdzIGJvZHkgKGlmZGVsZXRlZCBib2R5KT8iCisJfQorCX0KKworCXNldCBkZWNsIHt9CisJZm9yZWFjaCBuICRfX2ZpZWxkX2xpc3QgeworCQlzZXQgbiBbbGluZGV4ICRuIDBdCisJCWlmIHtbcmVnZXhwIC0tICRuXFxNICRib2R5XX0geworCQkJaWYgeyAgIFtyZWdleHAgLWFsbCAtLSAkblxcTSAkYm9keV0gPT0gMQorCQkJCSYmIFtyZWdleHAgLWFsbCAtLSBcXFwkJG5cXE0gJGJvZHldID09IDEKKwkJCQkmJiBbcmVnZXhwIC1hbGwgLS0gXFxcJCRuXFwoICRib2R5XSA9PSAwfSB7CisJCQkJcmVnc3ViIC1hbGwgXAorCQkJCQlcXFwkJG5cXE0gJGJvZHkgXAorCQkJCQkiXFtzZXQgXCR7X190aGlzfTo6JG5cXSIgYm9keQorCQkJfSBlbHNlIHsKKwkJCQlhcHBlbmQgZGVjbCB7ICR7X190aGlzfTo6fSAkbiB7IH0gJG4KKwkJCQlyZWdzdWIgLWFsbCBAJG5cXE0gJGJvZHkgIlwke19fdGhpc306OiRuIiBib2R5CisJCQl9CisJCX0KKwl9CisJaWYgeyRkZWNsIG5lIHt9fSB7CisJCWFwcGVuZCBtYm9keWMge3VwdmFyICMwfSAkZGVjbCBcOworCX0KKwlhcHBlbmQgbWJvZHljICRib2R5CisJbmFtZXNwYWNlIGV2YWwgJGNsYXNzIFtsaXN0IHByb2MgJG5hbWUgJHBhcmFtcyAkbWJvZHljXQorfQorCitwcm9jIGNyZWF0ZV90aGlzIHtjbGFzc30geworCXVwdmFyIHRoaXMgdGhpcworCW5hbWVzcGFjZSBldmFsIFtuYW1lc3BhY2UgcXVhbGlmaWVycyAkdGhpc10gW2xpc3QgcHJvYyBcCisJCVtuYW1lc3BhY2UgdGFpbCAkdGhpc10gXAorCQlbbGlzdCBuYW1lIGFyZ3NdIFwKKwkJImV2YWwgXFtsaXN0ICR7Y2xhc3N9OjpcJG5hbWUgJHRoaXNcXSBcJGFyZ3MiIFwKKwldCit9CisKK3Byb2MgZGVsZXRlX3RoaXMge3t0IHt9fX0geworCWlmIHskdCBlcSB7fX0geworCQl1cHZhciB0aGlzIHRoaXMKKwkJc2V0IHQgJHRoaXMKKwl9CisJc2V0IHQgW25hbWVzcGFjZSBxdWFsaWZpZXJzICR0XQorCWlmIHtbbmFtZXNwYWNlIGV4aXN0cyAkdF19IHtuYW1lc3BhY2UgZGVsZXRlICR0fQorfQorCitwcm9jIG1ha2VfZGlhbG9nIHt0IHcgYXJnc30geworCXVwdmFyICR0IHRvcCAkdyBwZnggdGhpcyB0aGlzCisJZ2xvYmFsIHVzZV90dGsKKwl1cGxldmVsIFtsaW5zZXJ0ICRhcmdzIDAgbWFrZV90b3BsZXZlbCAkdCAkd10KKwljYXRjaCB7d20gYXR0cmlidXRlcyAkdG9wIC10eXBlIGRpYWxvZ30KKwlwYXZlX3RvcGxldmVsICRwZngKK30KKworcHJvYyBtYWtlX3RvcGxldmVsIHt0IHcgYXJnc30geworCXVwdmFyICR0IHRvcCAkdyBwZnggdGhpcyB0aGlzCisKKwlpZiB7W2xsZW5ndGggJGFyZ3NdICUgMn0geworCQllcnJvciAibWFrZV90b3BsZXZlbCB0b3B2YXIgd2ludmFyIHtvcHRpb25zfSIKKwl9CisJc2V0IGF1dG9kZWxldGUgMQorCWZvcmVhY2gge25hbWUgdmFsdWV9ICRhcmdzIHsKKwkJc3dpdGNoIC1leGFjdCAtLSAkbmFtZSB7CisJCS1hdXRvZGVsZXRlIHtzZXQgYXV0b2RlbGV0ZSAkdmFsdWV9CisJCWRlZmF1bHQgICAgIHtlcnJvciAidW5zdXBwb3J0ZWQgb3B0aW9uICRuYW1lIn0KKwkJfQorCX0KKworCWlmIHskOjpyb290X2V4aXN0cyB8fCBbd2luZm8gaXNtYXBwZWQgLl19IHsKKwkJcmVnc3ViIC1hbGwgezo6fSAkdGhpcyB7X199IHcKKwkJc2V0IHRvcCAuJHcKKwkJc2V0IHBmeCAkdG9wCisJCXRvcGxldmVsICR0b3AKKwkJc2V0IDo6cm9vdF9leGlzdHMgMQorCX0gZWxzZSB7CisJCXNldCB0b3AgLgorCQlzZXQgcGZ4IHt9CisJfQorCisJaWYgeyRhdXRvZGVsZXRlfSB7CisJCXdtIHByb3RvY29sICR0b3AgV01fREVMRVRFX1dJTkRPVyAiCisJCQlbbGlzdCBkZWxldGVfdGhpcyAkdGhpc10KKwkJCVtsaXN0IGRlc3Ryb3kgJHRvcF0KKwkJIgorCX0KK30KKworCisjIyBhdXRvX21raW5kZXggc3VwcG9ydCBmb3IgY2xhc3MvY29uc3RydWN0b3IvbWV0aG9kCisjIworYXV0b19ta2luZGV4X3BhcnNlcjo6Y29tbWFuZCBjbGFzcyB7bmFtZSBib2R5fSB7CisJdmFyaWFibGUgcGFyc2VyCisJdmFyaWFibGUgY29udGV4dFN0YWNrCisJc2V0IGNvbnRleHRTdGFjayBbbGluc2VydCAkY29udGV4dFN0YWNrIDAgJG5hbWVdCisJJHBhcnNlciBldmFsIFtsaXN0IF8lQG5hbWVzcGFjZSBldmFsICRuYW1lXSAkYm9keQorCXNldCBjb250ZXh0U3RhY2sgW2xyYW5nZSAkY29udGV4dFN0YWNrIDEgZW5kXQorfQorYXV0b19ta2luZGV4X3BhcnNlcjo6Y29tbWFuZCBjb25zdHJ1Y3RvciB7bmFtZSBhcmdzfSB7CisJdmFyaWFibGUgaW5kZXgKKwl2YXJpYWJsZSBzY3JpcHRGaWxlCisJYXBwZW5kIGluZGV4IFtsaXN0IHNldCBhdXRvX2luZGV4KFtmdWxsbmFtZSAkbmFtZV0pXSBcCisJCVtmb3JtYXQgeyBbbGlzdCBzb3VyY2UgW2ZpbGUgam9pbiAkZGlyICVzXV19IFwKKwkJW2ZpbGUgc3BsaXQgJHNjcmlwdEZpbGVdXSAiXG4iCit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9jb21taXQudGNsIGIvZ2l0LWd1aS9saWIvY29tbWl0LnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjRiNjg3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvY29tbWl0LnRjbApAQCAtMCwwICsxLDUwOCBAQAorIyBnaXQtZ3VpIG1pc2MuIGNvbW1pdCByZWFkaW5nL3dyaXRpbmcgc3VwcG9ydAorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2hhd24gUGVhcmNlCisKK3Byb2MgbG9hZF9sYXN0X2NvbW1pdCB7fSB7CisJZ2xvYmFsIEhFQUQgUEFSRU5UIE1FUkdFX0hFQUQgY29tbWl0X3R5cGUgdWlfY29tbQorCWdsb2JhbCByZXBvX2NvbmZpZworCisJaWYge1tsbGVuZ3RoICRQQVJFTlRdID09IDB9IHsKKwkJZXJyb3JfcG9wdXAgW21jICJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLgorCitZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgdG8gYW1lbmQuCisiXQorCQlyZXR1cm4KKwl9CisKKwlyZXBvc2l0b3J5X3N0YXRlIGN1clR5cGUgY3VySEVBRCBjdXJNRVJHRV9IRUFECisJaWYgeyRjdXJUeXBlIGVxIHttZXJnZX19IHsKKwkJZXJyb3JfcG9wdXAgW21jICJDYW5ub3QgYW1lbmQgd2hpbGUgbWVyZ2luZy4KKworWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5IGNvbXBsZXRlZC4gIFlvdSBjYW5ub3QgYW1lbmQgdGhlIHByaW9yIGNvbW1pdCB1bmxlc3MgeW91IGZpcnN0IGFib3J0IHRoZSBjdXJyZW50IG1lcmdlIGFjdGl2aXR5LgorIl0KKwkJcmV0dXJuCisJfQorCisJc2V0IG1zZyB7fQorCXNldCBwYXJlbnRzIFtsaXN0XQorCWlmIHtbY2F0Y2ggeworCQkJc2V0IGZkIFtnaXRfcmVhZCBjYXQtZmlsZSBjb21taXQgJGN1ckhFQURdCisJCQlmY29uZmlndXJlICRmZCAtZW5jb2RpbmcgYmluYXJ5IC10cmFuc2xhdGlvbiBsZgorCQkJIyBCeSBkZWZhdWx0IGNvbW1pdHMgYXJlIGFzc3VtZWQgdG8gYmUgaW4gdXRmLTgKKwkJCXNldCBlbmMgdXRmLTgKKwkJCXdoaWxlIHtbZ2V0cyAkZmQgbGluZV0gPiAwfSB7CisJCQkJaWYge1tzdHJpbmcgbWF0Y2gge3BhcmVudCAqfSAkbGluZV19IHsKKwkJCQkJbGFwcGVuZCBwYXJlbnRzIFtzdHJpbmcgcmFuZ2UgJGxpbmUgNyBlbmRdCisJCQkJfSBlbHNlaWYge1tzdHJpbmcgbWF0Y2gge2VuY29kaW5nICp9ICRsaW5lXX0geworCQkJCQlzZXQgZW5jIFtzdHJpbmcgdG9sb3dlciBbc3RyaW5nIHJhbmdlICRsaW5lIDkgZW5kXV0KKwkJCQl9CisJCQl9CisJCQlzZXQgbXNnIFtyZWFkICRmZF0KKwkJCWNsb3NlICRmZAorCisJCQlzZXQgZW5jIFt0Y2xfZW5jb2RpbmcgJGVuY10KKwkJCWlmIHskZW5jIG5lIHt9fSB7CisJCQkJc2V0IG1zZyBbZW5jb2RpbmcgY29udmVydGZyb20gJGVuYyAkbXNnXQorCQkJfQorCQkJc2V0IG1zZyBbc3RyaW5nIHRyaW0gJG1zZ10KKwkJfSBlcnJdfSB7CisJCWVycm9yX3BvcHVwIFtzdHJjYXQgW21jICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiXSAiXG5cbiRlcnIiXQorCQlyZXR1cm4KKwl9CisKKwlzZXQgSEVBRCAkY3VySEVBRAorCXNldCBQQVJFTlQgJHBhcmVudHMKKwlzZXQgTUVSR0VfSEVBRCBbbGlzdF0KKwlzd2l0Y2ggLS0gW2xsZW5ndGggJHBhcmVudHNdIHsKKwkwICAgICAgIHtzZXQgY29tbWl0X3R5cGUgYW1lbmQtaW5pdGlhbH0KKwkxICAgICAgIHtzZXQgY29tbWl0X3R5cGUgYW1lbmR9CisJZGVmYXVsdCB7c2V0IGNvbW1pdF90eXBlIGFtZW5kLW1lcmdlfQorCX0KKworCSR1aV9jb21tIGRlbGV0ZSAwLjAgZW5kCisJJHVpX2NvbW0gaW5zZXJ0IGVuZCAkbXNnCisJJHVpX2NvbW0gZWRpdCByZXNldAorCSR1aV9jb21tIGVkaXQgbW9kaWZpZWQgZmFsc2UKKwlyZXNjYW4gdWlfcmVhZHkKK30KKworc2V0IEdJVF9DT01NSVRURVJfSURFTlQge30KKworcHJvYyBjb21taXR0ZXJfaWRlbnQge30geworCWdsb2JhbCBHSVRfQ09NTUlUVEVSX0lERU5UCisKKwlpZiB7JEdJVF9DT01NSVRURVJfSURFTlQgZXEge319IHsKKwkJaWYge1tjYXRjaCB7c2V0IG1lIFtnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlRdfSBlcnJdfSB7CisJCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiVW5hYmxlIHRvIG9idGFpbiB5b3VyIGlkZW50aXR5OiJdICJcblxuJGVyciJdCisJCQlyZXR1cm4ge30KKwkJfQorCQlpZiB7IVtyZWdleHAge14oLiopIFswLTldKyBbLSswLTldKyR9IFwKKwkJCSRtZSBtZSBHSVRfQ09NTUlUVEVSX0lERU5UXX0geworCQkJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiXSAiXG5cbiRtZSJdCisJCQlyZXR1cm4ge30KKwkJfQorCX0KKworCXJldHVybiAkR0lUX0NPTU1JVFRFUl9JREVOVAorfQorCitwcm9jIGRvX3NpZ25vZmYge30geworCWdsb2JhbCB1aV9jb21tCisKKwlzZXQgbWUgW2NvbW1pdHRlcl9pZGVudF0KKwlpZiB7JG1lIGVxIHt9fSByZXR1cm4KKworCXNldCBzb2IgIlNpZ25lZC1vZmYtYnk6ICRtZSIKKwlzZXQgbGFzdCBbJHVpX2NvbW0gZ2V0IHtlbmQgLTFjIGxpbmVzdGFydH0ge2VuZCAtMWN9XQorCWlmIHskbGFzdCBuZSAkc29ifSB7CisJCSR1aV9jb21tIGVkaXQgc2VwYXJhdG9yCisJCWlmIHskbGFzdCBuZSB7fQorCQkJJiYgIVtyZWdleHAge15bQS1aXVtBLVphLXpdKi1bQS1aYS16LV0rOiAqfSAkbGFzdF19IHsKKwkJCSR1aV9jb21tIGluc2VydCBlbmQgIlxuIgorCQl9CisJCSR1aV9jb21tIGluc2VydCBlbmQgIlxuJHNvYiIKKwkJJHVpX2NvbW0gZWRpdCBzZXBhcmF0b3IKKwkJJHVpX2NvbW0gc2VlIGVuZAorCX0KK30KKworcHJvYyBjcmVhdGVfbmV3X2NvbW1pdCB7fSB7CisJZ2xvYmFsIGNvbW1pdF90eXBlIHVpX2NvbW0KKworCXNldCBjb21taXRfdHlwZSBub3JtYWwKKwkkdWlfY29tbSBkZWxldGUgMC4wIGVuZAorCSR1aV9jb21tIGVkaXQgcmVzZXQKKwkkdWlfY29tbSBlZGl0IG1vZGlmaWVkIGZhbHNlCisJcmVzY2FuIHVpX3JlYWR5Cit9CisKK3Byb2Mgc2V0dXBfY29tbWl0X2VuY29kaW5nIHttc2dfd3Qge3F1aWV0IDB9fSB7CisJZ2xvYmFsIHJlcG9fY29uZmlnCisKKwlpZiB7W2NhdGNoIHtzZXQgZW5jICRyZXBvX2NvbmZpZyhpMThuLmNvbW1pdGVuY29kaW5nKX1dfSB7CisJCXNldCBlbmMgdXRmLTgKKwl9CisJc2V0IHVzZV9lbmMgW3RjbF9lbmNvZGluZyAkZW5jXQorCWlmIHskdXNlX2VuYyBuZSB7fX0geworCQlmY29uZmlndXJlICRtc2dfd3QgLWVuY29kaW5nICR1c2VfZW5jCisJfSBlbHNlIHsKKwkJaWYgeyEkcXVpZXR9IHsKKwkJCWVycm9yX3BvcHVwIFttYyAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iICRlbmNdCisJCX0KKwkJZmNvbmZpZ3VyZSAkbXNnX3d0IC1lbmNvZGluZyB1dGYtOAorCX0KK30KKworcHJvYyBjb21taXRfdHJlZSB7fSB7CisJZ2xvYmFsIEhFQUQgY29tbWl0X3R5cGUgZmlsZV9zdGF0ZXMgdWlfY29tbSByZXBvX2NvbmZpZworCWdsb2JhbCBwY2hfZXJyb3IKKworCWlmIHtbY29tbWl0dGVyX2lkZW50XSBlcSB7fX0gcmV0dXJuCisJaWYgeyFbbG9ja19pbmRleCB1cGRhdGVdfSByZXR1cm4KKworCSMgLS0gT3VyIGluIG1lbW9yeSBzdGF0ZSBzaG91bGQgbWF0Y2ggdGhlIHJlcG9zaXRvcnkuCisJIworCXJlcG9zaXRvcnlfc3RhdGUgY3VyVHlwZSBjdXJIRUFEIGN1ck1FUkdFX0hFQUQKKwlpZiB7W3N0cmluZyBtYXRjaCBhbWVuZCogJGNvbW1pdF90eXBlXQorCQkmJiAkY3VyVHlwZSBlcSB7bm9ybWFsfQorCQkmJiAkY3VySEVBRCBlcSAkSEVBRH0geworCX0gZWxzZWlmIHskY29tbWl0X3R5cGUgbmUgJGN1clR5cGUgfHwgJEhFQUQgbmUgJGN1ckhFQUR9IHsKKwkJaW5mb19wb3B1cCBbbWMgIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLgorCitBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgcmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC4KKworVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuCisiXQorCQl1bmxvY2tfaW5kZXgKKwkJcmVzY2FuIHVpX3JlYWR5CisJCXJldHVybgorCX0KKworCSMgLS0gQXQgbGVhc3Qgb25lIGZpbGUgc2hvdWxkIGRpZmZlciBpbiB0aGUgaW5kZXguCisJIworCXNldCBmaWxlc19yZWFkeSAwCisJZm9yZWFjaCBwYXRoIFthcnJheSBuYW1lcyBmaWxlX3N0YXRlc10geworCQlzZXQgcyAkZmlsZV9zdGF0ZXMoJHBhdGgpCisJCXN3aXRjaCAtZ2xvYiAtLSBbbGluZGV4ICRzIDBdIHsKKwkJXz8ge2NvbnRpbnVlfQorCQlBPyAtCisJCUQ/IC0KKwkJVD8gLQorCQlNPyB7c2V0IGZpbGVzX3JlYWR5IDF9CisJCV9VIC0KKwkJVT8geworCQkJZXJyb3JfcG9wdXAgW21jICJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLgorCitGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlIGJlZm9yZSBjb21taXR0aW5nLgorIiBbc2hvcnRfcGF0aCAkcGF0aF1dCisJCQl1bmxvY2tfaW5kZXgKKwkJCXJldHVybgorCQl9CisJCWRlZmF1bHQgeworCQkJZXJyb3JfcG9wdXAgW21jICJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuCisKK0ZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uCisiIFtsaW5kZXggJHMgMF0gW3Nob3J0X3BhdGggJHBhdGhdXQorCQl9CisJCX0KKwl9CisJaWYgeyEkZmlsZXNfcmVhZHkgJiYgIVtzdHJpbmcgbWF0Y2ggKm1lcmdlICRjdXJUeXBlXSAmJiAhW2lzX2VuYWJsZWQgbm9jb21taXRdfSB7CisJCWluZm9fcG9wdXAgW21jICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4KKworWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC4KKyJdCisJCXVubG9ja19pbmRleAorCQlyZXR1cm4KKwl9CisKKwlpZiB7W2lzX2VuYWJsZWQgbm9jb21taXRtc2ddfSB7IGRvX3F1aXQgMCB9CisKKwkjIC0tIEEgbWVzc2FnZSBpcyByZXF1aXJlZC4KKwkjCisJc2V0IG1zZyBbc3RyaW5nIHRyaW0gWyR1aV9jb21tIGdldCAxLjAgZW5kXV0KKwlyZWdzdWIgLWFsbCAtbGluZSB7WyBcdFxyXSskfSAkbXNnIHt9IG1zZworCWlmIHskbXNnIGVxIHt9fSB7CisJCWVycm9yX3BvcHVwIFttYyAiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLgorCitBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorCistIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuCistIFNlY29uZCBsaW5lOiBCbGFuaworLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLgorIl0KKwkJdW5sb2NrX2luZGV4CisJCXJldHVybgorCX0KKworCSMgLS0gQnVpbGQgdGhlIG1lc3NhZ2UgZmlsZS4KKwkjCisJc2V0IG1zZ19wIFtnaXRkaXIgR0lUR1VJX0VESVRNU0ddCisJc2V0IG1zZ193dCBbb3BlbiAkbXNnX3Agd10KKwlmY29uZmlndXJlICRtc2dfd3QgLXRyYW5zbGF0aW9uIGxmCisJc2V0dXBfY29tbWl0X2VuY29kaW5nICRtc2dfd3QKKwlwdXRzICRtc2dfd3QgJG1zZworCWNsb3NlICRtc2dfd3QKKworCWlmIHtbaXNfZW5hYmxlZCBub2NvbW1pdF19IHsgZG9fcXVpdCAwIH0KKworCSMgLS0gUnVuIHRoZSBwcmUtY29tbWl0IGhvb2suCisJIworCXNldCBmZF9waCBbZ2l0aG9va19yZWFkIHByZS1jb21taXRdCisJaWYgeyRmZF9waCBlcSB7fX0geworCQljb21taXRfY29tbWl0bXNnICRjdXJIRUFEICRtc2dfcAorCQlyZXR1cm4KKwl9CisKKwl1aV9zdGF0dXMgW21jICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiJdCisJc2V0IHBjaF9lcnJvciB7fQorCWZjb25maWd1cmUgJGZkX3BoIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBiaW5hcnkgLWVvZmNoYXIge30KKwlmaWxlZXZlbnQgJGZkX3BoIHJlYWRhYmxlIFwKKwkJW2xpc3QgY29tbWl0X3ByZWhvb2tfd2FpdCAkZmRfcGggJGN1ckhFQUQgJG1zZ19wXQorfQorCitwcm9jIGNvbW1pdF9wcmVob29rX3dhaXQge2ZkX3BoIGN1ckhFQUQgbXNnX3B9IHsKKwlnbG9iYWwgcGNoX2Vycm9yCisKKwlhcHBlbmQgcGNoX2Vycm9yIFtyZWFkICRmZF9waF0KKwlmY29uZmlndXJlICRmZF9waCAtYmxvY2tpbmcgMQorCWlmIHtbZW9mICRmZF9waF19IHsKKwkJaWYge1tjYXRjaCB7Y2xvc2UgJGZkX3BofV19IHsKKwkJCWNhdGNoIHtmaWxlIGRlbGV0ZSAkbXNnX3B9CisJCQl1aV9zdGF0dXMgW21jICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiJdCisJCQlob29rX2ZhaWxlZF9wb3B1cCBwcmUtY29tbWl0ICRwY2hfZXJyb3IKKwkJCXVubG9ja19pbmRleAorCQl9IGVsc2UgeworCQkJY29tbWl0X2NvbW1pdG1zZyAkY3VySEVBRCAkbXNnX3AKKwkJfQorCQlzZXQgcGNoX2Vycm9yIHt9CisJCXJldHVybgorCX0KKwlmY29uZmlndXJlICRmZF9waCAtYmxvY2tpbmcgMAorfQorCitwcm9jIGNvbW1pdF9jb21taXRtc2cge2N1ckhFQUQgbXNnX3B9IHsKKwlnbG9iYWwgaXNfZGV0YWNoZWQgcmVwb19jb25maWcKKwlnbG9iYWwgcGNoX2Vycm9yCisKKwlpZiB7JGlzX2RldGFjaGVkCisJICAgICYmICFbZmlsZSBleGlzdHMgW2dpdGRpciByZWJhc2UtbWVyZ2UgaGVhZC1uYW1lXV0KKwkgICAgJiYgCVtpc19jb25maWdfdHJ1ZSBndWkud2FybmRldGFjaGVkY29tbWl0XX0geworCQlzZXQgbXNnIFttYyAiWW91IGFyZSBhYm91dCB0byBjb21taXQgb24gYSBkZXRhY2hlZCBoZWFkLlwKK1RoaXMgaXMgYSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgdGhpbmcgdG8gZG8gYmVjYXVzZSBpZiB5b3Ugc3dpdGNoXAordG8gYW5vdGhlciBicmFuY2ggeW91IHdpbGwgbG9zZSB5b3VyIGNoYW5nZXMgYW5kIGl0IGNhbiBiZSBkaWZmaWN1bHRcCit0byByZXRyaWV2ZSB0aGVtIGxhdGVyIGZyb20gdGhlIHJlZmxvZy4gWW91IHNob3VsZCBwcm9iYWJseSBjYW5jZWwgdGhpc1wKK2NvbW1pdCBhbmQgY3JlYXRlIGEgbmV3IGJyYW5jaCB0byBjb250aW51ZS5cblwKK1xuXAorRG8geW91IHJlYWxseSB3YW50IHRvIHByb2NlZWQgd2l0aCB5b3VyIENvbW1pdD8iXQorCQlpZiB7W2Fza19wb3B1cCAkbXNnXSBuZSB5ZXN9IHsKKwkJCXVubG9ja19pbmRleAorCQkJcmV0dXJuCisJCX0KKwl9CisKKwkjIC0tIFJ1biB0aGUgY29tbWl0LW1zZyBob29rLgorCSMKKwlzZXQgZmRfcGggW2dpdGhvb2tfcmVhZCBjb21taXQtbXNnICRtc2dfcF0KKwlpZiB7JGZkX3BoIGVxIHt9fSB7CisJCWNvbW1pdF93cml0ZXRyZWUgJGN1ckhFQUQgJG1zZ19wCisJCXJldHVybgorCX0KKworCXVpX3N0YXR1cyBbbWMgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIl0KKwlzZXQgcGNoX2Vycm9yIHt9CisJZmNvbmZpZ3VyZSAkZmRfcGggLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGJpbmFyeSAtZW9mY2hhciB7fQorCWZpbGVldmVudCAkZmRfcGggcmVhZGFibGUgXAorCQlbbGlzdCBjb21taXRfY29tbWl0bXNnX3dhaXQgJGZkX3BoICRjdXJIRUFEICRtc2dfcF0KK30KKworcHJvYyBjb21taXRfY29tbWl0bXNnX3dhaXQge2ZkX3BoIGN1ckhFQUQgbXNnX3B9IHsKKwlnbG9iYWwgcGNoX2Vycm9yCisKKwlhcHBlbmQgcGNoX2Vycm9yIFtyZWFkICRmZF9waF0KKwlmY29uZmlndXJlICRmZF9waCAtYmxvY2tpbmcgMQorCWlmIHtbZW9mICRmZF9waF19IHsKKwkJaWYge1tjYXRjaCB7Y2xvc2UgJGZkX3BofV19IHsKKwkJCWNhdGNoIHtmaWxlIGRlbGV0ZSAkbXNnX3B9CisJCQl1aV9zdGF0dXMgW21jICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiJdCisJCQlob29rX2ZhaWxlZF9wb3B1cCBjb21taXQtbXNnICRwY2hfZXJyb3IKKwkJCXVubG9ja19pbmRleAorCQl9IGVsc2UgeworCQkJY29tbWl0X3dyaXRldHJlZSAkY3VySEVBRCAkbXNnX3AKKwkJfQorCQlzZXQgcGNoX2Vycm9yIHt9CisJCXJldHVybgorCX0KKwlmY29uZmlndXJlICRmZF9waCAtYmxvY2tpbmcgMAorfQorCitwcm9jIGNvbW1pdF93cml0ZXRyZWUge2N1ckhFQUQgbXNnX3B9IHsKKwl1aV9zdGF0dXMgW21jICJDb21taXR0aW5nIGNoYW5nZXMuLi4iXQorCXNldCBmZF93dCBbZ2l0X3JlYWQgd3JpdGUtdHJlZV0KKwlmaWxlZXZlbnQgJGZkX3d0IHJlYWRhYmxlIFwKKwkJW2xpc3QgY29tbWl0X2NvbW1pdHRyZWUgJGZkX3d0ICRjdXJIRUFEICRtc2dfcF0KK30KKworcHJvYyBjb21taXRfY29tbWl0dHJlZSB7ZmRfd3QgY3VySEVBRCBtc2dfcH0geworCWdsb2JhbCBIRUFEIFBBUkVOVCBNRVJHRV9IRUFEIGNvbW1pdF90eXBlCisJZ2xvYmFsIGN1cnJlbnRfYnJhbmNoCisJZ2xvYmFsIHVpX2NvbW0gc2VsZWN0ZWRfY29tbWl0X3R5cGUKKwlnbG9iYWwgZmlsZV9zdGF0ZXMgc2VsZWN0ZWRfcGF0aHMgcmVzY2FuX2FjdGl2ZQorCWdsb2JhbCByZXBvX2NvbmZpZworCisJZ2V0cyAkZmRfd3QgdHJlZV9pZAorCWlmIHtbY2F0Y2gge2Nsb3NlICRmZF93dH0gZXJyXX0geworCQljYXRjaCB7ZmlsZSBkZWxldGUgJG1zZ19wfQorCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAid3JpdGUtdHJlZSBmYWlsZWQ6Il0gIlxuXG4kZXJyIl0KKwkJdWlfc3RhdHVzIFttYyAiQ29tbWl0IGZhaWxlZC4iXQorCQl1bmxvY2tfaW5kZXgKKwkJcmV0dXJuCisJfQorCisJIyAtLSBWZXJpZnkgdGhpcyB3YXNuJ3QgYW4gZW1wdHkgY2hhbmdlLgorCSMKKwlpZiB7JGNvbW1pdF90eXBlIGVxIHtub3JtYWx9fSB7CisJCXNldCBmZF9vdCBbZ2l0X3JlYWQgY2F0LWZpbGUgY29tbWl0ICRQQVJFTlRdCisJCWZjb25maWd1cmUgJGZkX290IC1lbmNvZGluZyBiaW5hcnkgLXRyYW5zbGF0aW9uIGxmCisJCXNldCBvbGRfdHJlZSBbZ2V0cyAkZmRfb3RdCisJCWNsb3NlICRmZF9vdAorCisJCWlmIHtbc3RyaW5nIGVxdWFsIC1sZW5ndGggNSB7dHJlZSB9ICRvbGRfdHJlZV0KKwkJCSYmIFtzdHJpbmcgbGVuZ3RoICRvbGRfdHJlZV0gPT0gNDV9IHsKKwkJCXNldCBvbGRfdHJlZSBbc3RyaW5nIHJhbmdlICRvbGRfdHJlZSA1IGVuZF0KKwkJfSBlbHNlIHsKKwkJCWVycm9yIFttYyAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIgJFBBUkVOVF0KKwkJfQorCisJCWlmIHskdHJlZV9pZCBlcSAkb2xkX3RyZWV9IHsKKwkJCWNhdGNoIHtmaWxlIGRlbGV0ZSAkbXNnX3B9CisJCQlpbmZvX3BvcHVwIFttYyAiTm8gY2hhbmdlcyB0byBjb21taXQuCisKK05vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuCisKK0EgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy4KKyJdCisJCQl1bmxvY2tfaW5kZXgKKwkJCXJlc2NhbiB7dWlfc3RhdHVzIFttYyAiTm8gY2hhbmdlcyB0byBjb21taXQuIl19CisJCQlyZXR1cm4KKwkJfQorCX0KKworCSMgLS0gQ3JlYXRlIHRoZSBjb21taXQuCisJIworCXNldCBjbWQgW2xpc3QgY29tbWl0LXRyZWUgJHRyZWVfaWRdCisJZm9yZWFjaCBwIFtjb25jYXQgJFBBUkVOVCAkTUVSR0VfSEVBRF0geworCQlsYXBwZW5kIGNtZCAtcCAkcAorCX0KKwlsYXBwZW5kIGNtZCA8JG1zZ19wCisJaWYge1tjYXRjaCB7c2V0IGNtdF9pZCBbZXZhbCBnaXQgJGNtZF19IGVycl19IHsKKwkJY2F0Y2gge2ZpbGUgZGVsZXRlICRtc2dfcH0KKwkJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgImNvbW1pdC10cmVlIGZhaWxlZDoiXSAiXG5cbiRlcnIiXQorCQl1aV9zdGF0dXMgW21jICJDb21taXQgZmFpbGVkLiJdCisJCXVubG9ja19pbmRleAorCQlyZXR1cm4KKwl9CisKKwkjIC0tIFVwZGF0ZSB0aGUgSEVBRCByZWYuCisJIworCXNldCByZWZsb2dtIGNvbW1pdAorCWlmIHskY29tbWl0X3R5cGUgbmUge25vcm1hbH19IHsKKwkJYXBwZW5kIHJlZmxvZ20gIiAoJGNvbW1pdF90eXBlKSIKKwl9CisJc2V0IG1zZ19mZCBbb3BlbiAkbXNnX3Agcl0KKwlzZXR1cF9jb21taXRfZW5jb2RpbmcgJG1zZ19mZCAxCisJZ2V0cyAkbXNnX2ZkIHN1YmplY3QKKwljbG9zZSAkbXNnX2ZkCisJYXBwZW5kIHJlZmxvZ20gezogfSAkc3ViamVjdAorCWlmIHtbY2F0Y2ggeworCQkJZ2l0IHVwZGF0ZS1yZWYgLW0gJHJlZmxvZ20gSEVBRCAkY210X2lkICRjdXJIRUFECisJCX0gZXJyXX0geworCQljYXRjaCB7ZmlsZSBkZWxldGUgJG1zZ19wfQorCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAidXBkYXRlLXJlZiBmYWlsZWQ6Il0gIlxuXG4kZXJyIl0KKwkJdWlfc3RhdHVzIFttYyAiQ29tbWl0IGZhaWxlZC4iXQorCQl1bmxvY2tfaW5kZXgKKwkJcmV0dXJuCisJfQorCisJIyAtLSBDbGVhbnVwIGFmdGVyIG91cnNlbHZlcy4KKwkjCisJY2F0Y2gge2ZpbGUgZGVsZXRlICRtc2dfcH0KKwljYXRjaCB7ZmlsZSBkZWxldGUgW2dpdGRpciBNRVJHRV9IRUFEXX0KKwljYXRjaCB7ZmlsZSBkZWxldGUgW2dpdGRpciBNRVJHRV9NU0ddfQorCWNhdGNoIHtmaWxlIGRlbGV0ZSBbZ2l0ZGlyIFNRVUFTSF9NU0ddfQorCWNhdGNoIHtmaWxlIGRlbGV0ZSBbZ2l0ZGlyIEdJVEdVSV9NU0ddfQorCWNhdGNoIHtmaWxlIGRlbGV0ZSBbZ2l0ZGlyIENIRVJSWV9QSUNLX0hFQURdfQorCisJIyAtLSBMZXQgcmVyZXJlIGRvIGl0cyB0aGluZy4KKwkjCisJaWYge1tnZXRfY29uZmlnIHJlcmVyZS5lbmFibGVkXSBlcSB7fX0geworCQlzZXQgcmVyZXJlIFtmaWxlIGlzZGlyZWN0b3J5IFtnaXRkaXIgcnItY2FjaGVdXQorCX0gZWxzZSB7CisJCXNldCByZXJlcmUgW2lzX2NvbmZpZ190cnVlIHJlcmVyZS5lbmFibGVkXQorCX0KKwlpZiB7JHJlcmVyZX0geworCQljYXRjaCB7Z2l0IHJlcmVyZX0KKwl9CisKKwkjIC0tIFJ1biB0aGUgcG9zdC1jb21taXQgaG9vay4KKwkjCisJc2V0IGZkX3BoIFtnaXRob29rX3JlYWQgcG9zdC1jb21taXRdCisJaWYgeyRmZF9waCBuZSB7fX0geworCQlnbG9iYWwgcGNoX2Vycm9yCisJCXNldCBwY2hfZXJyb3Ige30KKwkJZmNvbmZpZ3VyZSAkZmRfcGggLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGJpbmFyeSAtZW9mY2hhciB7fQorCQlmaWxlZXZlbnQgJGZkX3BoIHJlYWRhYmxlIFwKKwkJCVtsaXN0IGNvbW1pdF9wb3N0Y29tbWl0X3dhaXQgJGZkX3BoICRjbXRfaWRdCisJfQorCisJJHVpX2NvbW0gZGVsZXRlIDAuMCBlbmQKKwkkdWlfY29tbSBlZGl0IHJlc2V0CisJJHVpX2NvbW0gZWRpdCBtb2RpZmllZCBmYWxzZQorCWlmIHskOjpHSVRHVUlfQkNLX2V4aXN0c30geworCQljYXRjaCB7ZmlsZSBkZWxldGUgW2dpdGRpciBHSVRHVUlfQkNLXX0KKwkJc2V0IDo6R0lUR1VJX0JDS19leGlzdHMgMAorCX0KKworCWlmIHtbaXNfZW5hYmxlZCBzaW5nbGVjb21taXRdfSB7IGRvX3F1aXQgMCB9CisKKwkjIC0tIFVwZGF0ZSBpbiBtZW1vcnkgc3RhdHVzCisJIworCXNldCBzZWxlY3RlZF9jb21taXRfdHlwZSBuZXcKKwlzZXQgY29tbWl0X3R5cGUgbm9ybWFsCisJc2V0IEhFQUQgJGNtdF9pZAorCXNldCBQQVJFTlQgJGNtdF9pZAorCXNldCBNRVJHRV9IRUFEIFtsaXN0XQorCisJZm9yZWFjaCBwYXRoIFthcnJheSBuYW1lcyBmaWxlX3N0YXRlc10geworCQlzZXQgcyAkZmlsZV9zdGF0ZXMoJHBhdGgpCisJCXNldCBtIFtsaW5kZXggJHMgMF0KKwkJc3dpdGNoIC1nbG9iIC0tICRtIHsKKwkJX08gLQorCQlfTSAtCisJCV9EIHtjb250aW51ZX0KKwkJX18gLQorCQlBXyAtCisJCU1fIC0KKwkJVF8gLQorCQlEXyB7CisJCQl1bnNldCBmaWxlX3N0YXRlcygkcGF0aCkKKwkJCWNhdGNoIHt1bnNldCBzZWxlY3RlZF9wYXRocygkcGF0aCl9CisJCX0KKwkJRE8geworCQkJc2V0IGZpbGVfc3RhdGVzKCRwYXRoKSBbbGlzdCBfTyBbbGluZGV4ICRzIDFdIHt9IHt9XQorCQl9CisJCUFNIC0KKwkJQUQgLQorCQlBVCAtCisJCVRNIC0KKwkJVEQgLQorCQlNTSAtCisJCU1UIC0KKwkJTUQgeworCQkJc2V0IGZpbGVfc3RhdGVzKCRwYXRoKSBbbGlzdCBcCisJCQkJX1tzdHJpbmcgaW5kZXggJG0gMV0gXAorCQkJCVtsaW5kZXggJHMgMV0gXAorCQkJCVtsaW5kZXggJHMgM10gXAorCQkJCXt9XQorCQl9CisJCX0KKwl9CisKKwlkaXNwbGF5X2FsbF9maWxlcworCXVubG9ja19pbmRleAorCXJlc2hvd19kaWZmCisJdWlfc3RhdHVzIFttYyAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIiBbc3RyaW5nIHJhbmdlICRjbXRfaWQgMCA3XSAkc3ViamVjdF0KK30KKworcHJvYyBjb21taXRfcG9zdGNvbW1pdF93YWl0IHtmZF9waCBjbXRfaWR9IHsKKwlnbG9iYWwgcGNoX2Vycm9yCisKKwlhcHBlbmQgcGNoX2Vycm9yIFtyZWFkICRmZF9waF0KKwlmY29uZmlndXJlICRmZF9waCAtYmxvY2tpbmcgMQorCWlmIHtbZW9mICRmZF9waF19IHsKKwkJaWYge1tjYXRjaCB7Y2xvc2UgJGZkX3BofV19IHsKKwkJCWhvb2tfZmFpbGVkX3BvcHVwIHBvc3QtY29tbWl0ICRwY2hfZXJyb3IgMAorCQl9CisJCXVuc2V0IHBjaF9lcnJvcgorCQlyZXR1cm4KKwl9CisJZmNvbmZpZ3VyZSAkZmRfcGggLWJsb2NraW5nIDAKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2NvbnNvbGUudGNsIGIvZ2l0LWd1aS9saWIvY29uc29sZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzMjQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL2NvbnNvbGUudGNsCkBAIC0wLDAgKzEsMjIzIEBACisjIGdpdC1ndWkgY29uc29sZSBzdXBwb3J0CisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTaGF3biBQZWFyY2UKKworY2xhc3MgY29uc29sZSB7CisKK2ZpZWxkIHRfc2hvcnQKK2ZpZWxkIHRfbG9uZworZmllbGQgdworZmllbGQgd190CitmaWVsZCBjb25zb2xlX2NyCitmaWVsZCBpc190b3BsZXZlbCAgICAxOyAjIGFyZSB3ZSBvdXIgb3duIHdpbmRvdz8KKworY29uc3RydWN0b3IgbmV3IHtzaG9ydF90aXRsZSBsb25nX3RpdGxlfSB7CisJc2V0IHRfc2hvcnQgJHNob3J0X3RpdGxlCisJc2V0IHRfbG9uZyAkbG9uZ190aXRsZQorCV9pbml0ICR0aGlzCisJcmV0dXJuICR0aGlzCit9CisKK2NvbnN0cnVjdG9yIGVtYmVkIHtwYXRoIHRpdGxlfSB7CisJc2V0IHRfc2hvcnQge30KKwlzZXQgdF9sb25nICR0aXRsZQorCXNldCB3ICRwYXRoCisJc2V0IGlzX3RvcGxldmVsIDAKKwlfaW5pdCAkdGhpcworCXJldHVybiAkdGhpcworfQorCittZXRob2QgX2luaXQge30geworCWdsb2JhbCBNMUIgdXNlX3R0ayBOUworCisJaWYgeyRpc190b3BsZXZlbH0geworCQltYWtlX2RpYWxvZyB0b3AgdyAtYXV0b2RlbGV0ZSAwCisJCXdtIHRpdGxlICR0b3AgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICR0X3Nob3J0IgorCX0gZWxzZSB7CisJCSR7TlN9OjpmcmFtZSAkdworCX0KKworCXNldCBjb25zb2xlX2NyIDEuMAorCXNldCB3X3QgJHcubS50CisKKwkke05TfTo6ZnJhbWUgJHcubQorCSR7TlN9OjpsYWJlbCAkdy5tLmwxIFwKKwkJLXRleHR2YXJpYWJsZSBAdF9sb25nICBcCisJCS1hbmNob3IgdyBcCisJCS1qdXN0aWZ5IGxlZnQgXAorCQktZm9udCBmb250X3VpYm9sZAorCXRleHQgJHdfdCBcCisJCS1iYWNrZ3JvdW5kIHdoaXRlIFwKKwkJLWZvcmVncm91bmQgYmxhY2sgXAorCQktYm9yZGVyd2lkdGggMSBcCisJCS1yZWxpZWYgc3Vua2VuIFwKKwkJLXdpZHRoIDgwIC1oZWlnaHQgMTAgXAorCQktd3JhcCBub25lIFwKKwkJLWZvbnQgZm9udF9kaWZmIFwKKwkJLXN0YXRlIGRpc2FibGVkIFwKKwkJLXhzY3JvbGxjb21tYW5kIFtjYiBfc2Jfc2V0ICR3Lm0uc2J4IGhdIFwKKwkJLXlzY3JvbGxjb21tYW5kIFtjYiBfc2Jfc2V0ICR3Lm0uc2J5IHZdCisJbGFiZWwgJHcubS5zIC10ZXh0IFttYyAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiJdIFwKKwkJLWFuY2hvciB3IFwKKwkJLWp1c3RpZnkgbGVmdCBcCisJCS1mb250IGZvbnRfdWlib2xkCisJcGFjayAkdy5tLmwxIC1zaWRlIHRvcCAtZmlsbCB4CisJcGFjayAkdy5tLnMgLXNpZGUgYm90dG9tIC1maWxsIHgKKwlwYWNrICR3X3QgLXNpZGUgbGVmdCAtZmlsbCBib3RoIC1leHBhbmQgMQorCXBhY2sgJHcubSAtc2lkZSB0b3AgLWZpbGwgYm90aCAtZXhwYW5kIDEgLXBhZHggNSAtcGFkeSAxMAorCisJbWVudSAkdy5jdHhtIC10ZWFyb2ZmIDAKKwkkdy5jdHhtIGFkZCBjb21tYW5kIC1sYWJlbCBbbWMgIkNvcHkiXSBcCisJCS1jb21tYW5kICJ0a190ZXh0Q29weSAkd190IgorCSR3LmN0eG0gYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiU2VsZWN0IEFsbCJdIFwKKwkJLWNvbW1hbmQgImZvY3VzICR3X3Q7JHdfdCB0YWcgYWRkIHNlbCAwLjAgZW5kIgorCSR3LmN0eG0gYWRkIGNvbW1hbmQgLWxhYmVsIFttYyAiQ29weSBBbGwiXSBcCisJCS1jb21tYW5kICIKKwkJCSR3X3QgdGFnIGFkZCBzZWwgMC4wIGVuZAorCQkJdGtfdGV4dENvcHkgJHdfdAorCQkJJHdfdCB0YWcgcmVtb3ZlIHNlbCAwLjAgZW5kCisJCSIKKworCWlmIHskaXNfdG9wbGV2ZWx9IHsKKwkJJHtOU306OmJ1dHRvbiAkdy5vayAtdGV4dCBbbWMgIkNsb3NlIl0gXAorCQkJLXN0YXRlIGRpc2FibGVkIFwKKwkJCS1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHddCisJCXBhY2sgJHcub2sgLXNpZGUgYm90dG9tIC1hbmNob3IgZSAtcGFkeSAxMCAtcGFkeCAxMAorCQliaW5kICR3IDxWaXNpYmlsaXR5PiBbbGlzdCBmb2N1cyAkd10KKwl9CisKKwliaW5kX2J1dHRvbjMgJHdfdCAidGtfcG9wdXAgJHcuY3R4bSAlWCAlWSIKKwliaW5kICR3X3QgPCRNMUItS2V5LWE+ICIkd190IHRhZyBhZGQgc2VsIDAuMCBlbmQ7YnJlYWsiCisJYmluZCAkd190IDwkTTFCLUtleS1BPiAiJHdfdCB0YWcgYWRkIHNlbCAwLjAgZW5kO2JyZWFrIgorfQorCittZXRob2QgZXhlYyB7Y21kIHthZnRlciB7fX19IHsKKwlpZiB7W2xpbmRleCAkY21kIDBdIGVxIHtnaXR9fSB7CisJCXNldCBmZF9mIFtldmFsIGdpdF9yZWFkIC0tc3RkZXJyIFtscmFuZ2UgJGNtZCAxIGVuZF1dCisJfSBlbHNlIHsKKwkJbGFwcGVuZCBjbWQgMj5AMQorCQlzZXQgZmRfZiBbX29wZW5fc3Rkb3V0X3N0ZGVyciAkY21kXQorCX0KKwlmY29uZmlndXJlICRmZF9mIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBiaW5hcnkKKwlmaWxlZXZlbnQgJGZkX2YgcmVhZGFibGUgW2NiIF9yZWFkICRmZF9mICRhZnRlcl0KK30KKworbWV0aG9kIF9yZWFkIHtmZCBhZnRlcn0geworCXNldCBidWYgW3JlYWQgJGZkXQorCWlmIHskYnVmIG5lIHt9fSB7CisJCWlmIHshW3dpbmZvIGV4aXN0cyAkd190XX0ge19pbml0ICR0aGlzfQorCQkkd190IGNvbmYgLXN0YXRlIG5vcm1hbAorCQlzZXQgYyAwCisJCXNldCBuIFtzdHJpbmcgbGVuZ3RoICRidWZdCisJCXdoaWxlIHskYyA8ICRufSB7CisJCQlzZXQgY3IgW3N0cmluZyBmaXJzdCAiXHIiICRidWYgJGNdCisJCQlzZXQgbGYgW3N0cmluZyBmaXJzdCAiXG4iICRidWYgJGNdCisJCQlpZiB7JGNyIDwgMH0ge3NldCBjciBbZXhwciB7JG4gKyAxfV19CisJCQlpZiB7JGxmIDwgMH0ge3NldCBsZiBbZXhwciB7JG4gKyAxfV19CisKKwkJCWlmIHskbGYgPCAkY3J9IHsKKwkJCQkkd190IGluc2VydCBlbmQgW3N0cmluZyByYW5nZSAkYnVmICRjICRsZl0KKwkJCQlzZXQgY29uc29sZV9jciBbJHdfdCBpbmRleCB7ZW5kIC0xY31dCisJCQkJc2V0IGMgJGxmCisJCQkJaW5jciBjCisJCQl9IGVsc2UgeworCQkJCSR3X3QgZGVsZXRlICRjb25zb2xlX2NyIGVuZAorCQkJCSR3X3QgaW5zZXJ0IGVuZCAiXG4iCisJCQkJJHdfdCBpbnNlcnQgZW5kIFtzdHJpbmcgcmFuZ2UgJGJ1ZiAkYyBbZXhwciB7JGNyIC0gMX1dXQorCQkJCXNldCBjICRjcgorCQkJCWluY3IgYworCQkJfQorCQl9CisJCSR3X3QgY29uZiAtc3RhdGUgZGlzYWJsZWQKKwkJJHdfdCBzZWUgZW5kCisJfQorCisJZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDEKKwlpZiB7W2VvZiAkZmRdfSB7CisJCWlmIHtbY2F0Y2gge2Nsb3NlICRmZH1dfSB7CisJCQlzZXQgb2sgMAorCQl9IGVsc2UgeworCQkJc2V0IG9rIDEKKwkJfQorCQlpZiB7JGFmdGVyIG5lIHt9fSB7CisJCQl1cGxldmVsICMwICRhZnRlciAkb2sKKwkJfSBlbHNlIHsKKwkJCWRvbmUgJHRoaXMgJG9rCisJCX0KKwkJcmV0dXJuCisJfQorCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAwCit9CisKK21ldGhvZCBjaGFpbiB7Y21kbGlzdCB7b2sgMX19IHsKKwlpZiB7JG9rfSB7CisJCWlmIHtbbGxlbmd0aCAkY21kbGlzdF0gPT0gMH0geworCQkJZG9uZSAkdGhpcyAkb2sKKwkJCXJldHVybgorCQl9CisKKwkJc2V0IGNtZCBbbGluZGV4ICRjbWRsaXN0IDBdCisJCXNldCBjbWRsaXN0IFtscmFuZ2UgJGNtZGxpc3QgMSBlbmRdCisKKwkJaWYge1tsaW5kZXggJGNtZCAwXSBlcSB7ZXhlY319IHsKKwkJCWV4ZWMgJHRoaXMgXAorCQkJCVtscmFuZ2UgJGNtZCAxIGVuZF0gXAorCQkJCVtjYiBjaGFpbiAkY21kbGlzdF0KKwkJfSBlbHNlIHsKKwkJCXVwbGV2ZWwgIzAgJGNtZCBbY2IgY2hhaW4gJGNtZGxpc3RdCisJCX0KKwl9IGVsc2UgeworCQlkb25lICR0aGlzICRvaworCX0KK30KKworbWV0aG9kIGluc2VydCB7dHh0fSB7CisJaWYgeyFbd2luZm8gZXhpc3RzICR3X3RdfSB7X2luaXQgJHRoaXN9CisJJHdfdCBjb25mIC1zdGF0ZSBub3JtYWwKKwkkd190IGluc2VydCBlbmQgIiR0eHRcbiIKKwlzZXQgY29uc29sZV9jciBbJHdfdCBpbmRleCB7ZW5kIC0xY31dCisJJHdfdCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorfQorCittZXRob2QgZG9uZSB7b2t9IHsKKwlpZiB7JG9rfSB7CisJCWlmIHtbd2luZm8gZXhpc3RzICR3Lm0uc119IHsKKwkJCWJpbmQgJHcubS5zIDxEZXN0cm95PiBbbGlzdCBkZWxldGVfdGhpcyAkdGhpc10KKwkJCSR3Lm0ucyBjb25mIC1iYWNrZ3JvdW5kIGdyZWVuIC1mb3JlZ3JvdW5kIGJsYWNrIFwKKwkJCQktdGV4dCBbbWMgIlN1Y2Nlc3MiXQorCQkJaWYgeyRpc190b3BsZXZlbH0geworCQkJCSR3Lm9rIGNvbmYgLXN0YXRlIG5vcm1hbAorCQkJCWZvY3VzICR3Lm9rCisJCQl9CisJCX0gZWxzZSB7CisJCQlkZWxldGVfdGhpcworCQl9CisJfSBlbHNlIHsKKwkJaWYgeyFbd2luZm8gZXhpc3RzICR3Lm0uc119IHsKKwkJCV9pbml0ICR0aGlzCisJCX0KKwkJYmluZCAkdy5tLnMgPERlc3Ryb3k+IFtsaXN0IGRlbGV0ZV90aGlzICR0aGlzXQorCQkkdy5tLnMgY29uZiAtYmFja2dyb3VuZCByZWQgLWZvcmVncm91bmQgYmxhY2sgXAorCQkJLXRleHQgW21jICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiXQorCQlpZiB7JGlzX3RvcGxldmVsfSB7CisJCQkkdy5vayBjb25mIC1zdGF0ZSBub3JtYWwKKwkJCWZvY3VzICR3Lm9rCisJCX0KKwl9Cit9CisKK21ldGhvZCBfc2Jfc2V0IHtzYiBvcmllbnQgZmlyc3QgbGFzdH0geworCWdsb2JhbCBOUworCWlmIHshW3dpbmZvIGV4aXN0cyAkc2JdfSB7CisJCWlmIHskZmlyc3QgPT0gJGxhc3QgfHwgKCRmaXJzdCA9PSAwICYmICRsYXN0ID09IDEpfSByZXR1cm4KKwkJaWYgeyRvcmllbnQgZXEge2h9fSB7CisJCQkke05TfTo6c2Nyb2xsYmFyICRzYiAtb3JpZW50IGggLWNvbW1hbmQgW2xpc3QgJHdfdCB4dmlld10KKwkJCXBhY2sgJHNiIC1maWxsIHggLXNpZGUgYm90dG9tIC1iZWZvcmUgJHdfdAorCQl9IGVsc2UgeworCQkJJHtOU306OnNjcm9sbGJhciAkc2IgLW9yaWVudCB2IC1jb21tYW5kIFtsaXN0ICR3X3QgeXZpZXddCisJCQlwYWNrICRzYiAtZmlsbCB5IC1zaWRlIHJpZ2h0IC1iZWZvcmUgJHdfdAorCQl9CisJfQorCSRzYiBzZXQgJGZpcnN0ICRsYXN0Cit9CisKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2RhdGFiYXNlLnRjbCBiL2dpdC1ndWkvbGliL2RhdGFiYXNlLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjE4N2VkCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvZGF0YWJhc2UudGNsCkBAIC0wLDAgKzEsMTE1IEBACisjIGdpdC1ndWkgb2JqZWN0IGRhdGFiYXNlIG1hbmFnZW1lbnQgc3VwcG9ydAorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2hhd24gUGVhcmNlCisKK3Byb2MgZG9fc3RhdHMge30geworCWdsb2JhbCB1c2VfdHRrIE5TCisJc2V0IGZkIFtnaXRfcmVhZCBjb3VudC1vYmplY3RzIC12XQorCXdoaWxlIHtbZ2V0cyAkZmQgbGluZV0gPiAwfSB7CisJCWlmIHtbcmVnZXhwIHteKFteOl0rKTogKFxkKykkfSAkbGluZSBfIG5hbWUgdmFsdWVdfSB7CisJCQlzZXQgc3RhdHMoJG5hbWUpICR2YWx1ZQorCQl9CisJfQorCWNsb3NlICRmZAorCisJc2V0IHBhY2tlZF9zeiAwCisJZm9yZWFjaCBwIFtnbG9iIC1kaXJlY3RvcnkgW2dpdGRpciBvYmplY3RzIHBhY2tdIFwKKwkJLXR5cGUgZiBcCisJCS1ub2NvbXBsYWluIC0tICpdIHsKKwkJaW5jciBwYWNrZWRfc3ogW2ZpbGUgc2l6ZSAkcF0KKwl9CisJaWYgeyRwYWNrZWRfc3ogPiAwfSB7CisJCXNldCBzdGF0cyhzaXplLXBhY2spIFtleHByIHskcGFja2VkX3N6IC8gMTAyNH1dCisJfQorCisJc2V0IHcgLnN0YXRzX3ZpZXcKKwlEaWFsb2cgJHcKKwl3bSB3aXRoZHJhdyAkdworCXdtIGdlb21ldHJ5ICR3ICIrW3dpbmZvIHJvb3R4IC5dK1t3aW5mbyByb290eSAuXSIKKworCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNsb3NlIC10ZXh0IFttYyBDbG9zZV0gXAorCQktZGVmYXVsdCBhY3RpdmUgXAorCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5nYyAtdGV4dCBbbWMgIkNvbXByZXNzIERhdGFiYXNlIl0gXAorCQktZGVmYXVsdCBub3JtYWwgXAorCQktY29tbWFuZCAiZGVzdHJveSAkdztkb19nYyIKKwlwYWNrICR3LmJ1dHRvbnMuY2xvc2UgLXNpZGUgcmlnaHQKKwlwYWNrICR3LmJ1dHRvbnMuZ2MgLXNpZGUgbGVmdAorCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAorCisJJHtOU306OmxhYmVsZnJhbWUgJHcuc3RhdCAtdGV4dCBbbWMgIkRhdGFiYXNlIFN0YXRpc3RpY3MiXQorCWZvcmVhY2ggcyB7CisJCXtjb3VudCAgICAgICAgICAge21jICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyJ9fQorCQl7c2l6ZSAgICAgICAgICAgIHttYyAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMifSB7IEtpQn19CisJCXtpbi1wYWNrICAgICAgICAge21jICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMifX0KKwkJe3BhY2tzICAgICAgICAgICB7bWMgIk51bWJlciBvZiBwYWNrcyJ9fQorCQl7c2l6ZS1wYWNrICAgICAgIHttYyAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIn0geyBLaUJ9fQorCQl7cHJ1bmUtcGFja2FibGUgIHttYyAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyJ9fQorCQl7Z2FyYmFnZSAgICAgICAgIHttYyAiR2FyYmFnZSBmaWxlcyJ9fQorCQl9IHsKKwkJc2V0IG5hbWUgW2xpbmRleCAkcyAwXQorCQlzZXQgbGFiZWwgW2V2YWwgW2xpbmRleCAkcyAxXV0KKwkJaWYge1tjYXRjaCB7c2V0IHZhbHVlICRzdGF0cygkbmFtZSl9XX0gY29udGludWUKKwkJaWYge1tsbGVuZ3RoICRzXSA+IDJ9IHsKKwkJCXNldCB2YWx1ZSAiJHZhbHVlW2xpbmRleCAkcyAyXSIKKwkJfQorCisJCSR7TlN9OjpsYWJlbCAkdy5zdGF0LmxfJG5hbWUgLXRleHQgIiRsYWJlbDoiIC1hbmNob3IgdworCQkke05TfTo6bGFiZWwgJHcuc3RhdC52XyRuYW1lIC10ZXh0ICR2YWx1ZSAtYW5jaG9yIHcKKwkJZ3JpZCAkdy5zdGF0LmxfJG5hbWUgJHcuc3RhdC52XyRuYW1lIC1zdGlja3kgd2UgLXBhZHggezAgNX0KKwl9CisJcGFjayAkdy5zdGF0IC1wYWR5IDEwIC1wYWR4IDEwCisKKwliaW5kICR3IDxWaXNpYmlsaXR5PiAiZ3JhYiAkdzsgZm9jdXMgJHcuYnV0dG9ucy5jbG9zZSIKKwliaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQorCWJpbmQgJHcgPEtleS1SZXR1cm4+IFtsaXN0IGRlc3Ryb3kgJHddCisJd20gdGl0bGUgJHcgW2FwcGVuZCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogIiBbbWMgIkRhdGFiYXNlIFN0YXRpc3RpY3MiXV0KKwl3bSBkZWljb25pZnkgJHcKKwl0a3dhaXQgd2luZG93ICR3Cit9CisKK3Byb2MgZG9fZ2Mge30geworCXNldCB3IFtjb25zb2xlOjpuZXcge2djfSBbbWMgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiXV0KKwljb25zb2xlOjpjaGFpbiAkdyB7CisJCXtleGVjIGdpdCBwYWNrLXJlZnMgLS1wcnVuZX0KKwkJe2V4ZWMgZ2l0IHJlZmxvZyBleHBpcmUgLS1hbGx9CisJCXtleGVjIGdpdCByZXBhY2sgLWEgLWQgLWx9CisJCXtleGVjIGdpdCByZXJlcmUgZ2N9CisJfQorfQorCitwcm9jIGRvX2ZzY2tfb2JqZWN0cyB7fSB7CisJc2V0IHcgW2NvbnNvbGU6Om5ldyB7ZnNjay1vYmplY3RzfSBcCisJCVttYyAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiXV0KKwlzZXQgY21kIFtsaXN0IGdpdCBmc2NrLW9iamVjdHNdCisJbGFwcGVuZCBjbWQgLS1mdWxsCisJbGFwcGVuZCBjbWQgLS1jYWNoZQorCWxhcHBlbmQgY21kIC0tc3RyaWN0CisJY29uc29sZTo6ZXhlYyAkdyAkY21kCit9CisKK3Byb2MgaGludF9nYyB7fSB7CisJc2V0IG5kaXJzIDEKKwlzZXQgbGltaXQgOAorCWlmIHtbaXNfV2luZG93c119IHsKKwkJc2V0IG5kaXJzIDQKKwkJc2V0IGxpbWl0IDEKKwl9CisKKwlzZXQgY291bnQgW2xsZW5ndGggW2dsb2IgXAorCQktbm9jb21wbGFpbiBcCisJCS0tIFwKKwkJW2dpdGRpciBvYmplY3RzIDRcWzAtW2V4cHIgeyRuZGlycy0xfV1cXS8qXV1dCisKKwlpZiB7JGNvdW50ID49ICRsaW1pdCAqICRuZGlyc30geworCQlzZXQgb2JqZWN0c19jdXJyZW50IFtleHByIHskY291bnQgKiAyNTYvJG5kaXJzfV0KKwkJaWYge1thc2tfcG9wdXAgXAorCQkJW21jICJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuCisKK1RvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgdGhlIGRhdGFiYXNlLgorCitDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIgJG9iamVjdHNfY3VycmVudF1dIGVxIHllc30geworCQkJZG9fZ2MKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2RhdGUudGNsIGIvZ2l0LWd1aS9saWIvZGF0ZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJlODI5OQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL2RhdGUudGNsCkBAIC0wLDAgKzEsNTMgQEAKKyMgZ2l0LWd1aSBkYXRlIHByb2Nlc3Npbmcgc3VwcG9ydAorIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlCisKK3NldCBnaXRfbW9udGgoSmFuKSAgMQorc2V0IGdpdF9tb250aChGZWIpICAyCitzZXQgZ2l0X21vbnRoKE1hcikgIDMKK3NldCBnaXRfbW9udGgoQXByKSAgNAorc2V0IGdpdF9tb250aChNYXkpICA1CitzZXQgZ2l0X21vbnRoKEp1bikgIDYKK3NldCBnaXRfbW9udGgoSnVsKSAgNworc2V0IGdpdF9tb250aChBdWcpICA4CitzZXQgZ2l0X21vbnRoKFNlcCkgIDkKK3NldCBnaXRfbW9udGgoT2N0KSAxMAorc2V0IGdpdF9tb250aChOb3YpIDExCitzZXQgZ2l0X21vbnRoKERlYykgMTIKKworcHJvYyBwYXJzZV9naXRfZGF0ZSB7c30geworCWlmIHskcyBlcSB7fX0geworCQlyZXR1cm4ge30KKwl9CisKKwlpZiB7IVtyZWdleHAgXAorCQl7Xi4uLiAoLi4uKSAoXGR7MSwyfSkgKFxkXGQpOihcZFxkKTooXGRcZCkgKFxkezR9KSAoWystXT8pKFxkXGQpKFxkXGQpJH0gJHMgcyBcCisJCW1vbnRoIGRheSBociBtbSBzcyB5ciBldyB0el9oIHR6X21dfSB7CisJCWVycm9yIFttYyAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIgJHNdCisJfQorCisJc2V0IHMgW2Nsb2NrIHNjYW4gW2Zvcm1hdCB7JTQuNGklMi4yaSUyLjJpVCUycyUycyUyc30gXAorCQkJJHlyICQ6OmdpdF9tb250aCgkbW9udGgpICRkYXkgXAorCQkJJGhyICRtbSAkc3NdIFwKKwkJCS1nbXQgMV0KKworCXJlZ3N1YiBeMCAkdHpfaCB7fSB0el9oCisJcmVnc3ViIF4wICR0el9tIHt9IHR6X20KKwlzd2l0Y2ggLS0gJGV3IHsKKwktICB7c2V0IGV3ICt9CisJKyAge3NldCBldyAtfQorCXt9IHtzZXQgZXcgLX0KKwl9CisKKwlyZXR1cm4gW2V4cHIgIiRzICRldyAoJHR6X2ggKiAzNjAwICsgJHR6X20gKiA2MCkiXQorfQorCitwcm9jIGZvcm1hdF9kYXRlIHtzfSB7CisJaWYgeyRzIGVxIHt9fSB7CisJCXJldHVybiB7fQorCX0KKwlyZXR1cm4gW2Nsb2NrIGZvcm1hdCAkcyAtZm9ybWF0IHslYSAlYiAlZSAlSDolTTolUyAlWX1dCit9CisKK3Byb2MgcmVmb3JtYXRfZGF0ZSB7c30geworCXJldHVybiBbZm9ybWF0X2RhdGUgW3BhcnNlX2dpdF9kYXRlICRzXV0KK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL2RpZmYudGNsIGIvZ2l0LWd1aS9saWIvZGlmZi50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ1Njk4NgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL2RpZmYudGNsCkBAIC0wLDAgKzEsODMzIEBACisjIGdpdC1ndWkgZGlmZiB2aWV3ZXIKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNoYXduIFBlYXJjZQorCitwcm9jIGFwcGx5X3RhYl9zaXplIHt7Zmlyc3R0YWIge319fSB7CisJZ2xvYmFsIGhhdmVfdGs4NSByZXBvX2NvbmZpZyB1aV9kaWZmCisKKwlzZXQgdyBbZm9udCBtZWFzdXJlIGZvbnRfZGlmZiAiMCJdCisJaWYgeyRoYXZlX3RrODUgJiYgJGZpcnN0dGFiICE9IDB9IHsKKwkJJHVpX2RpZmYgY29uZmlndXJlIC10YWJzIFtsaXN0IFtleHByIHskZmlyc3R0YWIgKiAkd31dIFtleHByIHsoJGZpcnN0dGFiICsgJHJlcG9fY29uZmlnKGd1aS50YWJzaXplKSkgKiAkd31dXQorCX0gZWxzZWlmIHskaGF2ZV90azg1IHx8ICRyZXBvX2NvbmZpZyhndWkudGFic2l6ZSkgIT0gOH0geworCQkkdWlfZGlmZiBjb25maWd1cmUgLXRhYnMgW2V4cHIgeyRyZXBvX2NvbmZpZyhndWkudGFic2l6ZSkgKiAkd31dCisJfSBlbHNlIHsKKwkJJHVpX2RpZmYgY29uZmlndXJlIC10YWJzIHt9CisJfQorfQorCitwcm9jIGNsZWFyX2RpZmYge30geworCWdsb2JhbCB1aV9kaWZmIGN1cnJlbnRfZGlmZl9wYXRoIGN1cnJlbnRfZGlmZl9oZWFkZXIKKwlnbG9iYWwgdWlfaW5kZXggdWlfd29ya2RpcgorCisJJHVpX2RpZmYgY29uZiAtc3RhdGUgbm9ybWFsCisJJHVpX2RpZmYgZGVsZXRlIDAuMCBlbmQKKwkkdWlfZGlmZiBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCisJc2V0IGN1cnJlbnRfZGlmZl9wYXRoIHt9CisJc2V0IGN1cnJlbnRfZGlmZl9oZWFkZXIge30KKworCSR1aV9pbmRleCB0YWcgcmVtb3ZlIGluX2RpZmYgMC4wIGVuZAorCSR1aV93b3JrZGlyIHRhZyByZW1vdmUgaW5fZGlmZiAwLjAgZW5kCit9CisKK3Byb2MgcmVzaG93X2RpZmYge3thZnRlciB7fX19IHsKKwlnbG9iYWwgZmlsZV9zdGF0ZXMgZmlsZV9saXN0cworCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aCBjdXJyZW50X2RpZmZfc2lkZQorCWdsb2JhbCB1aV9kaWZmCisKKwlzZXQgcCAkY3VycmVudF9kaWZmX3BhdGgKKwlpZiB7JHAgZXEge319IHsKKwkJIyBObyBkaWZmIGlzIGJlaW5nIHNob3duLgorCX0gZWxzZWlmIHskY3VycmVudF9kaWZmX3NpZGUgZXEge319IHsKKwkJY2xlYXJfZGlmZgorCX0gZWxzZWlmIHtbY2F0Y2gge3NldCBzICRmaWxlX3N0YXRlcygkcCl9XQorCQl8fCBbbHNlYXJjaCAtc29ydGVkIC1leGFjdCAkZmlsZV9saXN0cygkY3VycmVudF9kaWZmX3NpZGUpICRwXSA9PSAtMX0geworCisJCWlmIHtbZmluZF9uZXh0X2RpZmYgJGN1cnJlbnRfZGlmZl9zaWRlICRwIHt9IHtbXk9dfV19IHsKKwkJCW5leHRfZGlmZiAkYWZ0ZXIKKwkJfSBlbHNlIHsKKwkJCWNsZWFyX2RpZmYKKwkJfQorCX0gZWxzZSB7CisJCXNldCBzYXZlX3BvcyBbbGluZGV4IFskdWlfZGlmZiB5dmlld10gMF0KKwkJc2hvd19kaWZmICRwICRjdXJyZW50X2RpZmZfc2lkZSB7fSAkc2F2ZV9wb3MgJGFmdGVyCisJfQorfQorCitwcm9jIGZvcmNlX2RpZmZfZW5jb2Rpbmcge2VuY30geworCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aAorCQorCWlmIHskY3VycmVudF9kaWZmX3BhdGggbmUge319IHsKKwkJZm9yY2VfcGF0aF9lbmNvZGluZyAkY3VycmVudF9kaWZmX3BhdGggJGVuYworCQlyZXNob3dfZGlmZgorCX0KK30KKworcHJvYyBoYW5kbGVfZW1wdHlfZGlmZiB7fSB7CisJZ2xvYmFsIGN1cnJlbnRfZGlmZl9wYXRoIGZpbGVfc3RhdGVzIGZpbGVfbGlzdHMKKwlnbG9iYWwgZGlmZl9lbXB0eV9jb3VudAorCisJc2V0IHBhdGggJGN1cnJlbnRfZGlmZl9wYXRoCisJc2V0IHMgJGZpbGVfc3RhdGVzKCRwYXRoKQorCWlmIHtbbGluZGV4ICRzIDBdIG5lIHtfTX0gfHwgW2hhc190ZXh0Y29udiAkcGF0aF19IHJldHVybgorCisJIyBQcmV2ZW50IGluZmluaXRlIHJlc2NhbiBsb29wcworCWluY3IgZGlmZl9lbXB0eV9jb3VudAorCWlmIHskZGlmZl9lbXB0eV9jb3VudCA+IDF9IHJldHVybgorCisJaW5mb19wb3B1cCBbbWMgIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLgorCislcyBoYXMgbm8gY2hhbmdlcy4KKworVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgdGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC4KKworQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSB0aGUgc2FtZSBzdGF0ZS4iIFtzaG9ydF9wYXRoICRwYXRoXV0KKworCWNsZWFyX2RpZmYKKwlkaXNwbGF5X2ZpbGUgJHBhdGggX18KKwlyZXNjYW4gdWlfcmVhZHkgMAorfQorCitwcm9jIHNob3dfZGlmZiB7cGF0aCB3IHtsbm8ge319IHtzY3JvbGxfcG9zIHt9fSB7Y2FsbGJhY2sge319fSB7CisJZ2xvYmFsIGZpbGVfc3RhdGVzIGZpbGVfbGlzdHMKKwlnbG9iYWwgaXNfM3dheV9kaWZmIGlzX2NvbmZsaWN0X2RpZmYgZGlmZl9hY3RpdmUgcmVwb19jb25maWcKKwlnbG9iYWwgdWlfZGlmZiB1aV9pbmRleCB1aV93b3JrZGlyCisJZ2xvYmFsIGN1cnJlbnRfZGlmZl9wYXRoIGN1cnJlbnRfZGlmZl9zaWRlIGN1cnJlbnRfZGlmZl9oZWFkZXIKKwlnbG9iYWwgY3VycmVudF9kaWZmX3F1ZXVlCisKKwlpZiB7JGRpZmZfYWN0aXZlIHx8ICFbbG9ja19pbmRleCByZWFkXX0gcmV0dXJuCisKKwljbGVhcl9kaWZmCisJaWYgeyRsbm8gPT0ge319IHsKKwkJc2V0IGxubyBbbHNlYXJjaCAtc29ydGVkIC1leGFjdCAkZmlsZV9saXN0cygkdykgJHBhdGhdCisJCWlmIHskbG5vID49IDB9IHsKKwkJCWluY3IgbG5vCisJCX0KKwl9CisJaWYgeyRsbm8gPj0gMX0geworCQkkdyB0YWcgYWRkIGluX2RpZmYgJGxuby4wIFtleHByIHskbG5vICsgMX1dLjAKKwkJJHcgc2VlICRsbm8uMAorCX0KKworCXNldCBzICRmaWxlX3N0YXRlcygkcGF0aCkKKwlzZXQgbSBbbGluZGV4ICRzIDBdCisJc2V0IGlzX2NvbmZsaWN0X2RpZmYgMAorCXNldCBjdXJyZW50X2RpZmZfcGF0aCAkcGF0aAorCXNldCBjdXJyZW50X2RpZmZfc2lkZSAkdworCXNldCBjdXJyZW50X2RpZmZfcXVldWUge30KKwl1aV9zdGF0dXMgW21jICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iIFtlc2NhcGVfcGF0aCAkcGF0aF1dCisKKwlzZXQgY29udF9pbmZvIFtsaXN0ICRzY3JvbGxfcG9zICRjYWxsYmFja10KKworCWFwcGx5X3RhYl9zaXplIDAKKworCWlmIHtbc3RyaW5nIGZpcnN0IHtVfSAkbV0gPj0gMH0geworCQltZXJnZV9sb2FkX3N0YWdlcyAkcGF0aCBbbGlzdCBzaG93X3VubWVyZ2VkX2RpZmYgJGNvbnRfaW5mb10KKwl9IGVsc2VpZiB7JG0gZXEge19PfX0geworCQlzaG93X290aGVyX2RpZmYgJHBhdGggJHcgJG0gJGNvbnRfaW5mbworCX0gZWxzZSB7CisJCXN0YXJ0X3Nob3dfZGlmZiAkY29udF9pbmZvCisJfQorfQorCitwcm9jIHNob3dfdW5tZXJnZWRfZGlmZiB7Y29udF9pbmZvfSB7CisJZ2xvYmFsIGN1cnJlbnRfZGlmZl9wYXRoIGN1cnJlbnRfZGlmZl9zaWRlCisJZ2xvYmFsIG1lcmdlX3N0YWdlcyB1aV9kaWZmIGlzX2NvbmZsaWN0X2RpZmYKKwlnbG9iYWwgY3VycmVudF9kaWZmX3F1ZXVlCisKKwlpZiB7JG1lcmdlX3N0YWdlcygyKSBlcSB7fX0geworCQlzZXQgaXNfY29uZmxpY3RfZGlmZiAxCisJCWxhcHBlbmQgY3VycmVudF9kaWZmX3F1ZXVlIFwKKwkJCVtsaXN0IFttYyAiTE9DQUw6IGRlbGV0ZWRcblJFTU9URTpcbiJdIGQ9IFwKKwkJCSAgICBbbGlzdCAiOjE6JGN1cnJlbnRfZGlmZl9wYXRoIiAiOjM6JGN1cnJlbnRfZGlmZl9wYXRoIl1dCisJfSBlbHNlaWYgeyRtZXJnZV9zdGFnZXMoMykgZXEge319IHsKKwkJc2V0IGlzX2NvbmZsaWN0X2RpZmYgMQorCQlsYXBwZW5kIGN1cnJlbnRfZGlmZl9xdWV1ZSBcCisJCQlbbGlzdCBbbWMgIlJFTU9URTogZGVsZXRlZFxuTE9DQUw6XG4iXSBkPSBcCisJCQkgICAgW2xpc3QgIjoxOiRjdXJyZW50X2RpZmZfcGF0aCIgIjoyOiRjdXJyZW50X2RpZmZfcGF0aCJdXQorCX0gZWxzZWlmIHtbbGluZGV4ICRtZXJnZV9zdGFnZXMoMSkgMF0gZXEgezEyMDAwMH0KKwkJfHwgW2xpbmRleCAkbWVyZ2Vfc3RhZ2VzKDIpIDBdIGVxIHsxMjAwMDB9CisJCXx8IFtsaW5kZXggJG1lcmdlX3N0YWdlcygzKSAwXSBlcSB7MTIwMDAwfX0geworCQlzZXQgaXNfY29uZmxpY3RfZGlmZiAxCisJCWxhcHBlbmQgY3VycmVudF9kaWZmX3F1ZXVlIFwKKwkJCVtsaXN0IFttYyAiTE9DQUw6XG4iXSBkPSBcCisJCQkgICAgW2xpc3QgIjoxOiRjdXJyZW50X2RpZmZfcGF0aCIgIjoyOiRjdXJyZW50X2RpZmZfcGF0aCJdXQorCQlsYXBwZW5kIGN1cnJlbnRfZGlmZl9xdWV1ZSBcCisJCQlbbGlzdCBbbWMgIlJFTU9URTpcbiJdIGQ9IFwKKwkJCSAgICBbbGlzdCAiOjE6JGN1cnJlbnRfZGlmZl9wYXRoIiAiOjM6JGN1cnJlbnRfZGlmZl9wYXRoIl1dCisJfSBlbHNlIHsKKwkJc3RhcnRfc2hvd19kaWZmICRjb250X2luZm8KKwkJcmV0dXJuCisJfQorCisJYWR2YW5jZV9kaWZmX3F1ZXVlICRjb250X2luZm8KK30KKworcHJvYyBhZHZhbmNlX2RpZmZfcXVldWUge2NvbnRfaW5mb30geworCWdsb2JhbCBjdXJyZW50X2RpZmZfcXVldWUgdWlfZGlmZgorCisJc2V0IGl0ZW0gW2xpbmRleCAkY3VycmVudF9kaWZmX3F1ZXVlIDBdCisJc2V0IGN1cnJlbnRfZGlmZl9xdWV1ZSBbbHJhbmdlICRjdXJyZW50X2RpZmZfcXVldWUgMSBlbmRdCisKKwkkdWlfZGlmZiBjb25mIC1zdGF0ZSBub3JtYWwKKwkkdWlfZGlmZiBpbnNlcnQgZW5kIFtsaW5kZXggJGl0ZW0gMF0gW2xpbmRleCAkaXRlbSAxXQorCSR1aV9kaWZmIGNvbmYgLXN0YXRlIGRpc2FibGVkCisKKwlzdGFydF9zaG93X2RpZmYgJGNvbnRfaW5mbyBbbGluZGV4ICRpdGVtIDJdCit9CisKK3Byb2Mgc2hvd19vdGhlcl9kaWZmIHtwYXRoIHcgbSBjb250X2luZm99IHsKKwlnbG9iYWwgZmlsZV9zdGF0ZXMgZmlsZV9saXN0cworCWdsb2JhbCBpc18zd2F5X2RpZmYgZGlmZl9hY3RpdmUgcmVwb19jb25maWcKKwlnbG9iYWwgdWlfZGlmZiB1aV9pbmRleCB1aV93b3JrZGlyCisJZ2xvYmFsIGN1cnJlbnRfZGlmZl9wYXRoIGN1cnJlbnRfZGlmZl9zaWRlIGN1cnJlbnRfZGlmZl9oZWFkZXIKKworCSMgLSBHaXQgd29uJ3QgZ2l2ZSB1cyB0aGUgZGlmZiwgdGhlcmUncyBub3RoaW5nIHRvIGNvbXBhcmUgdG8hCisJIworCWlmIHskbSBlcSB7X099fSB7CisJCXNldCBtYXhfc3ogMTAwMDAwCisJCXNldCB0eXBlIHVua25vd24KKwkJaWYge1tjYXRjaCB7CisJCQkJc2V0IHR5cGUgW2ZpbGUgdHlwZSAkcGF0aF0KKwkJCQlzd2l0Y2ggLS0gJHR5cGUgeworCQkJCWRpcmVjdG9yeSB7CisJCQkJCXNldCB0eXBlIHN1Ym1vZHVsZQorCQkJCQlzZXQgY29udGVudCB7fQorCQkJCQlzZXQgc3ogMAorCQkJCX0KKwkJCQlsaW5rIHsKKwkJCQkJc2V0IGNvbnRlbnQgW2ZpbGUgcmVhZGxpbmsgJHBhdGhdCisJCQkJCXNldCBzeiBbc3RyaW5nIGxlbmd0aCAkY29udGVudF0KKwkJCQl9CisJCQkJZmlsZSB7CisJCQkJCXNldCBmZCBbb3BlbiAkcGF0aCByXQorCQkJCQlmY29uZmlndXJlICRmZCBcCisJCQkJCQktZW9mY2hhciB7fSBcCisJCQkJCQktZW5jb2RpbmcgW2dldF9wYXRoX2VuY29kaW5nICRwYXRoXQorCQkJCQlzZXQgY29udGVudCBbcmVhZCAkZmQgJG1heF9zel0KKwkJCQkJY2xvc2UgJGZkCisJCQkJCXNldCBzeiBbZmlsZSBzaXplICRwYXRoXQorCQkJCX0KKwkJCQlkZWZhdWx0IHsKKwkJCQkJZXJyb3IgIickdHlwZScgbm90IHN1cHBvcnRlZCIKKwkJCQl9CisJCQkJfQorCQkJfSBlcnIgXX0geworCQkJc2V0IGRpZmZfYWN0aXZlIDAKKwkJCXVubG9ja19pbmRleAorCQkJdWlfc3RhdHVzIFttYyAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiIFtlc2NhcGVfcGF0aCAkcGF0aF1dCisJCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiRXJyb3IgbG9hZGluZyBmaWxlOiJdICJcblxuJGVyciJdCisJCQlyZXR1cm4KKwkJfQorCQkkdWlfZGlmZiBjb25mIC1zdGF0ZSBub3JtYWwKKwkJaWYgeyR0eXBlIGVxIHtzdWJtb2R1bGV9fSB7CisJCQkkdWlfZGlmZiBpbnNlcnQgZW5kIFthcHBlbmQgXAorCQkJCSIqICIgXAorCQkJCVttYyAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIl0gXAorCQkJCSJcbiJdIGRfaW5mbworCQl9IGVsc2VpZiB7IVtjYXRjaCB7c2V0IHR5cGUgW2V4ZWMgZmlsZSAkcGF0aF19XX0geworCQkJc2V0IG4gW3N0cmluZyBsZW5ndGggJHBhdGhdCisJCQlpZiB7W3N0cmluZyBlcXVhbCAtbGVuZ3RoICRuICRwYXRoICR0eXBlXX0geworCQkJCXNldCB0eXBlIFtzdHJpbmcgcmFuZ2UgJHR5cGUgJG4gZW5kXQorCQkJCXJlZ3N1YiB7Xjo/XHMqfSAkdHlwZSB7fSB0eXBlCisJCQl9CisJCQkkdWlfZGlmZiBpbnNlcnQgZW5kICIqICR0eXBlXG4iIGRfaW5mbworCQl9CisJCWlmIHtbc3RyaW5nIGZpcnN0ICJcMCIgJGNvbnRlbnRdICE9IC0xfSB7CisJCQkkdWlfZGlmZiBpbnNlcnQgZW5kIFwKKwkJCQlbbWMgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiJdIFwKKwkJCQlkX2luZm8KKwkJfSBlbHNlIHsKKwkJCWlmIHskc3ogPiAkbWF4X3N6fSB7CisJCQkJJHVpX2RpZmYgaW5zZXJ0IGVuZCBbbWMgXAorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuCisqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy4KKyIgJHN6ICRtYXhfc3pdIGRfaW5mbworCQkJfQorCQkJJHVpX2RpZmYgaW5zZXJ0IGVuZCAkY29udGVudAorCQkJaWYgeyRzeiA+ICRtYXhfc3p9IHsKKwkJCQkkdWlfZGlmZiBpbnNlcnQgZW5kIFttYyAiCisqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy4KKyogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci4KKyIgW2FwcG5hbWVdXSBkX2luZm8KKwkJCX0KKwkJfQorCQkkdWlfZGlmZiBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCQlzZXQgZGlmZl9hY3RpdmUgMAorCQl1bmxvY2tfaW5kZXgKKwkJc2V0IHNjcm9sbF9wb3MgW2xpbmRleCAkY29udF9pbmZvIDBdCisJCWlmIHskc2Nyb2xsX3BvcyBuZSB7fX0geworCQkJdXBkYXRlCisJCQkkdWlfZGlmZiB5dmlldyBtb3ZldG8gJHNjcm9sbF9wb3MKKwkJfQorCQl1aV9yZWFkeQorCQlzZXQgY2FsbGJhY2sgW2xpbmRleCAkY29udF9pbmZvIDFdCisJCWlmIHskY2FsbGJhY2sgbmUge319IHsKKwkJCWV2YWwgJGNhbGxiYWNrCisJCX0KKwkJcmV0dXJuCisJfQorfQorCitwcm9jIGdldF9jb25mbGljdF9tYXJrZXJfc2l6ZSB7cGF0aH0geworCXNldCBzaXplIDcKKwljYXRjaCB7CisJCXNldCBmZF9yYyBbZXZhbCBbbGlzdCBnaXRfcmVhZCBjaGVjay1hdHRyICJjb25mbGljdC1tYXJrZXItc2l6ZSIgLS0gJHBhdGhdXQorCQlzZXQgcmV0IFtnZXRzICRmZF9yYyBsaW5lXQorCQljbG9zZSAkZmRfcmMKKwkJaWYgeyRyZXQgPiAwfSB7CisJCQlyZWdleHAgey4qOiBjb25mbGljdC1tYXJrZXItc2l6ZTogKFxkKykkfSAkbGluZSBsaW5lIHNpemUKKwkJfQorCX0KKwlyZXR1cm4gJHNpemUKK30KKworcHJvYyBzdGFydF9zaG93X2RpZmYge2NvbnRfaW5mbyB7YWRkX29wdHMge319fSB7CisJZ2xvYmFsIGZpbGVfc3RhdGVzIGZpbGVfbGlzdHMKKwlnbG9iYWwgaXNfM3dheV9kaWZmIGlzX3N1Ym1vZHVsZV9kaWZmIGRpZmZfYWN0aXZlIHJlcG9fY29uZmlnCisJZ2xvYmFsIHVpX2RpZmYgdWlfaW5kZXggdWlfd29ya2RpcgorCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aCBjdXJyZW50X2RpZmZfc2lkZSBjdXJyZW50X2RpZmZfaGVhZGVyCisKKwlzZXQgcGF0aCAkY3VycmVudF9kaWZmX3BhdGgKKwlzZXQgdyAkY3VycmVudF9kaWZmX3NpZGUKKworCXNldCBzICRmaWxlX3N0YXRlcygkcGF0aCkKKwlzZXQgbSBbbGluZGV4ICRzIDBdCisJc2V0IGlzXzN3YXlfZGlmZiAwCisJc2V0IGlzX3N1Ym1vZHVsZV9kaWZmIDAKKwlzZXQgZGlmZl9hY3RpdmUgMQorCXNldCBjdXJyZW50X2RpZmZfaGVhZGVyIHt9CisJc2V0IGNvbmZsaWN0X3NpemUgW2dldF9jb25mbGljdF9tYXJrZXJfc2l6ZSAkcGF0aF0KKworCXNldCBjbWQgW2xpc3RdCisJaWYgeyR3IGVxICR1aV9pbmRleH0geworCQlsYXBwZW5kIGNtZCBkaWZmLWluZGV4CisJCWxhcHBlbmQgY21kIC0tY2FjaGVkCisJCWlmIHtbZ2l0LXZlcnNpb24gPj0gIjEuNy4yIl19IHsKKwkJCWxhcHBlbmQgY21kIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkKKwkJfQorCX0gZWxzZWlmIHskdyBlcSAkdWlfd29ya2Rpcn0geworCQlpZiB7W3N0cmluZyBmaXJzdCB7VX0gJG1dID49IDB9IHsKKwkJCWxhcHBlbmQgY21kIGRpZmYKKwkJfSBlbHNlIHsKKwkJCWxhcHBlbmQgY21kIGRpZmYtZmlsZXMKKwkJfQorCX0KKwlpZiB7IVtpc19jb25maWdfZmFsc2UgZ3VpLnRleHRjb252XSAmJiBbZ2l0LXZlcnNpb24gPj0gMS42LjFdfSB7CisJCWxhcHBlbmQgY21kIC0tdGV4dGNvbnYKKwl9CisKKwlpZiB7W3N0cmluZyBtYXRjaCB7MTYwMDAwICp9IFtsaW5kZXggJHMgMl1dCisJIHx8IFtzdHJpbmcgbWF0Y2ggezE2MDAwMCAqfSBbbGluZGV4ICRzIDNdXX0geworCQlzZXQgaXNfc3VibW9kdWxlX2RpZmYgMQorCisJCWlmIHtbZ2l0LXZlcnNpb24gPj0gIjEuNi42Il19IHsKKwkJCWxhcHBlbmQgY21kIC0tc3VibW9kdWxlCisJCX0KKwl9CisKKwlsYXBwZW5kIGNtZCAtcAorCWxhcHBlbmQgY21kIC0tY29sb3IKKwlzZXQgY21kIFtjb25jYXQgJGNtZCAkcmVwb19jb25maWcoZ3VpLmRpZmZvcHRzKV0KKwlpZiB7JHJlcG9fY29uZmlnKGd1aS5kaWZmY29udGV4dCkgPj0gMX0geworCQlsYXBwZW5kIGNtZCAiLVUkcmVwb19jb25maWcoZ3VpLmRpZmZjb250ZXh0KSIKKwl9CisJaWYgeyR3IGVxICR1aV9pbmRleH0geworCQlsYXBwZW5kIGNtZCBbUEFSRU5UXQorCX0KKwlpZiB7JGFkZF9vcHRzIG5lIHt9fSB7CisJCWV2YWwgbGFwcGVuZCBjbWQgJGFkZF9vcHRzCisJfSBlbHNlIHsKKwkJbGFwcGVuZCBjbWQgLS0KKwkJbGFwcGVuZCBjbWQgJHBhdGgKKwl9CisKKwlpZiB7JGlzX3N1Ym1vZHVsZV9kaWZmICYmIFtnaXQtdmVyc2lvbiA8ICIxLjYuNiJdfSB7CisJCWlmIHskdyBlcSAkdWlfaW5kZXh9IHsKKwkJCXNldCBjbWQgW2xpc3Qgc3VibW9kdWxlIHN1bW1hcnkgLS1jYWNoZWQgLS0gJHBhdGhdCisJCX0gZWxzZSB7CisJCQlzZXQgY21kIFtsaXN0IHN1Ym1vZHVsZSBzdW1tYXJ5IC0tZmlsZXMgLS0gJHBhdGhdCisJCX0KKwl9CisKKwlpZiB7W2NhdGNoIHtzZXQgZmQgW2V2YWwgZ2l0X3JlYWQgLS1uaWNlICRjbWRdfSBlcnJdfSB7CisJCXNldCBkaWZmX2FjdGl2ZSAwCisJCXVubG9ja19pbmRleAorCQl1aV9zdGF0dXMgW21jICJVbmFibGUgdG8gZGlzcGxheSAlcyIgW2VzY2FwZV9wYXRoICRwYXRoXV0KKwkJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgIkVycm9yIGxvYWRpbmcgZGlmZjoiXSAiXG5cbiRlcnIiXQorCQlyZXR1cm4KKwl9CisKKwlzZXQgOjpjdXJyZW50X2RpZmZfaW5oZWFkZXIgMQorCWZjb25maWd1cmUgJGZkIFwKKwkJLWJsb2NraW5nIDAgXAorCQktZW5jb2RpbmcgW2dldF9wYXRoX2VuY29kaW5nICRwYXRoXSBcCisJCS10cmFuc2xhdGlvbiBsZgorCWZpbGVldmVudCAkZmQgcmVhZGFibGUgW2xpc3QgcmVhZF9kaWZmICRmZCAkY29uZmxpY3Rfc2l6ZSAkY29udF9pbmZvXQorfQorCitwcm9jIHBhcnNlX2NvbG9yX2xpbmUge2xpbmV9IHsKKwlzZXQgc3RhcnQgMAorCXNldCByZXN1bHQgIiIKKwlzZXQgbWFya3VwIFtsaXN0XQorCXNldCByZWdleHAge1wwMzNcWygoPzpcZCs7KSpcZCspP219CisJc2V0IG5lZWRfcmVzZXQgMAorCXdoaWxlIHtbcmVnZXhwIC1pbmRpY2VzIC1zdGFydCAkc3RhcnQgJHJlZ2V4cCAkbGluZSBtYXRjaCBjb2RlXX0geworCQlmb3JlYWNoIHtiZWdpbiBlbmR9ICRtYXRjaCBicmVhaworCQlhcHBlbmQgcmVzdWx0IFtzdHJpbmcgcmFuZ2UgJGxpbmUgJHN0YXJ0IFtleHByIHskYmVnaW4gLSAxfV1dCisJCXNldCBwb3MgW3N0cmluZyBsZW5ndGggJHJlc3VsdF0KKwkJc2V0IGNvbCBbZXZhbCBbbGluc2VydCAkY29kZSAwIHN0cmluZyByYW5nZSAkbGluZV1dCisJCXNldCBzdGFydCBbaW5jciBlbmRdCisJCWlmIHskY29sIGVxICIwIiB8fCAkY29sIGVxICIifSB7CisJCQlpZiB7ISRuZWVkX3Jlc2V0fSBjb250aW51ZQorCQkJc2V0IG5lZWRfcmVzZXQgMAorCQl9IGVsc2UgeworCQkJc2V0IG5lZWRfcmVzZXQgMQorCQl9CisJCWxhcHBlbmQgbWFya3VwICRwb3MgJGNvbAorCX0KKwlhcHBlbmQgcmVzdWx0IFtzdHJpbmcgcmFuZ2UgJGxpbmUgJHN0YXJ0IGVuZF0KKwlpZiB7W2xsZW5ndGggJG1hcmt1cF0gPCA0fSB7c2V0IG1hcmt1cCB7fX0KKwlyZXR1cm4gW2xpc3QgJHJlc3VsdCAkbWFya3VwXQorfQorCitwcm9jIHJlYWRfZGlmZiB7ZmQgY29uZmxpY3Rfc2l6ZSBjb250X2luZm99IHsKKwlnbG9iYWwgdWlfZGlmZiBkaWZmX2FjdGl2ZSBpc19zdWJtb2R1bGVfZGlmZgorCWdsb2JhbCBpc18zd2F5X2RpZmYgaXNfY29uZmxpY3RfZGlmZiBjdXJyZW50X2RpZmZfaGVhZGVyCisJZ2xvYmFsIGN1cnJlbnRfZGlmZl9xdWV1ZQorCWdsb2JhbCBkaWZmX2VtcHR5X2NvdW50CisKKwkkdWlfZGlmZiBjb25mIC1zdGF0ZSBub3JtYWwKKwl3aGlsZSB7W2dldHMgJGZkIGxpbmVdID49IDB9IHsKKwkJZm9yZWFjaCB7bGluZSBtYXJrdXB9IFtwYXJzZV9jb2xvcl9saW5lICRsaW5lXSBicmVhaworCQlzZXQgbGluZSBbc3RyaW5nIG1hcCB7XDAzMyBefSAkbGluZV0KKworCQlzZXQgdGFncyB7fQorCisJCSMgLS0gQ2hlY2sgZm9yIHN0YXJ0IG9mIGRpZmYgaGVhZGVyLgorCQlpZiB7ICAgW3N0cmluZyBtYXRjaCB7ZGlmZiAtLWdpdCAqfSAgICAgICRsaW5lXQorCQkgICAgfHwgW3N0cmluZyBtYXRjaCB7ZGlmZiAtLWNjICp9ICAgICAgICRsaW5lXQorCQkgICAgfHwgW3N0cmluZyBtYXRjaCB7ZGlmZiAtLWNvbWJpbmVkICp9ICRsaW5lXX0geworCQkJc2V0IDo6Y3VycmVudF9kaWZmX2luaGVhZGVyIDEKKwkJfQorCisJCSMgLS0gQ2hlY2sgZm9yIGVuZCBvZiBkaWZmIGhlYWRlciAoYW55IGh1bmsgbGluZSB3aWxsIGRvIHRoaXMpLgorCQkjCisJCWlmIHtbcmVnZXhwIHteQEArIH0gJGxpbmVdfSB7c2V0IDo6Y3VycmVudF9kaWZmX2luaGVhZGVyIDB9CisKKwkJIyAtLSBBdXRvbWF0aWNhbGx5IGRldGVjdCBpZiB0aGlzIGlzIGEgMyB3YXkgZGlmZi4KKwkJIworCQlpZiB7W3N0cmluZyBtYXRjaCB7QEBAICp9ICRsaW5lXX0geworCQkJc2V0IGlzXzN3YXlfZGlmZiAxCisJCQlhcHBseV90YWJfc2l6ZSAxCisJCX0KKworCQlpZiB7JDo6Y3VycmVudF9kaWZmX2luaGVhZGVyfSB7CisKKwkJCSMgLS0gVGhlc2UgdHdvIGxpbmVzIHN0b3AgYSBkaWZmIGhlYWRlciBhbmQgc2hvdWxkbid0IGJlIGluIHRoZXJlCisJCQlpZiB7ICAgW3N0cmluZyBtYXRjaCB7QmluYXJ5IGZpbGVzICogYW5kICogZGlmZmVyfSAkbGluZV0KKwkJCSAgICB8fCBbcmVnZXhwIHteXCogVW5tZXJnZWQgcGF0aCB9ICAgICAgICAgICAgICAgICRsaW5lXX0geworCQkJCXNldCA6OmN1cnJlbnRfZGlmZl9pbmhlYWRlciAwCisJCQl9IGVsc2UgeworCQkJCWFwcGVuZCBjdXJyZW50X2RpZmZfaGVhZGVyICRsaW5lICJcbiIKKwkJCX0KKworCQkJIyAtLSBDbGVhbnVwIHVuaW50ZXJlc3RpbmcgZGlmZiBoZWFkZXIgbGluZXMuCisJCQkjCisJCQlpZiB7ICAgW3N0cmluZyBtYXRjaCB7ZGlmZiAtLWdpdCAqfSAgICAgICRsaW5lXQorCQkJICAgIHx8IFtzdHJpbmcgbWF0Y2gge2RpZmYgLS1jYyAqfSAgICAgICAkbGluZV0KKwkJCSAgICB8fCBbc3RyaW5nIG1hdGNoIHtkaWZmIC0tY29tYmluZWQgKn0gJGxpbmVdCisJCQkgICAgfHwgW3N0cmluZyBtYXRjaCB7LS0tICp9ICAgICAgICAgICAgICRsaW5lXQorCQkJICAgIHx8IFtzdHJpbmcgbWF0Y2ggeysrKyAqfSAgICAgICAgICAgICAkbGluZV0KKwkJCSAgICB8fCBbc3RyaW5nIG1hdGNoIHtpbmRleCAqfSAgICAgICAgICAgJGxpbmVdfSB7CisJCQkJY29udGludWUKKwkJCX0KKworCQkJIyAtLSBOYW1lIGl0IHN5bWxpbmssIG5vdCAxMjAwMDAKKwkJCSMgICAgTm90ZSwgdGhhdCB0aGUgb3JpZ2luYWwgbGluZSBpcyBpbiAkY3VycmVudF9kaWZmX2hlYWRlcgorCQkJcmVnc3ViIHteKGRlbGV0ZWR8bmV3KSBmaWxlIG1vZGUgMTIwMDAwfSAkbGluZSB7XDEgc3ltbGlua30gbGluZQorCisJCX0gZWxzZWlmIHsgICAkbGluZSBlcSB7XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlfX0geworCQkJIyAtLSBIYW5kbGUgc29tZSBzcGVjaWFsIGxpbmVzCisJCX0gZWxzZWlmIHskaXNfM3dheV9kaWZmfSB7CisJCQlzZXQgb3AgW3N0cmluZyByYW5nZSAkbGluZSAwIDFdCisJCQlzd2l0Y2ggLS0gJG9wIHsKKwkJCXsgIH0ge3NldCB0YWdzIHt9fQorCQkJe0BAfSB7c2V0IHRhZ3MgZF9AfQorCQkJeyArfSB7c2V0IHRhZ3MgZF9zK30KKwkJCXsgLX0ge3NldCB0YWdzIGRfcy19CisJCQl7KyB9IHtzZXQgdGFncyBkXytzfQorCQkJey0gfSB7c2V0IHRhZ3MgZF8tc30KKwkJCXstLX0ge3NldCB0YWdzIGRfLS19CisJCQl7Kyt9IHsKKwkJCQlzZXQgcmVnZXhwIFtzdHJpbmcgbWFwIFtsaXN0ICVjb25mbGljdF9zaXplICRjb25mbGljdF9zaXplXVwKKwkJCQkJCQkJe15cK1wrKFs8Pj1dKXslY29uZmxpY3Rfc2l6ZX0oPzogfCQpfV0KKwkJCQlpZiB7W3JlZ2V4cCAkcmVnZXhwICRsaW5lIF9nIG9wXX0geworCQkJCQlzZXQgaXNfY29uZmxpY3RfZGlmZiAxCisJCQkJCXNldCBsaW5lIFtzdHJpbmcgcmVwbGFjZSAkbGluZSAwIDEgeyAgfV0KKwkJCQkJc2V0IHRhZ3MgZCRvcAorCQkJCX0gZWxzZSB7CisJCQkJCXNldCB0YWdzIGRfKysKKwkJCQl9CisJCQl9CisJCQlkZWZhdWx0IHsKKwkJCQlwdXRzICJlcnJvcjogVW5oYW5kbGVkIDMgd2F5IGRpZmYgbWFya2VyOiB7JG9wfSIKKwkJCQlzZXQgdGFncyB7fQorCQkJfQorCQkJfQorCQl9IGVsc2VpZiB7JGlzX3N1Ym1vZHVsZV9kaWZmfSB7CisJCQlpZiB7JGxpbmUgPT0gIiJ9IGNvbnRpbnVlCisJCQlpZiB7W3JlZ2V4cCB7XlN1Ym1vZHVsZSB9ICRsaW5lXX0geworCQkJCXNldCB0YWdzIGRfaW5mbworCQkJfSBlbHNlaWYge1tyZWdleHAge15cKiB9ICRsaW5lXX0geworCQkJCXNldCBsaW5lIFtzdHJpbmcgcmVwbGFjZSAkbGluZSAwIDEge1N1Ym1vZHVsZSB9XQorCQkJCXNldCB0YWdzIGRfaW5mbworCQkJfSBlbHNlIHsKKwkJCQlzZXQgb3AgW3N0cmluZyByYW5nZSAkbGluZSAwIDJdCisJCQkJc3dpdGNoIC0tICRvcCB7CisJCQkJeyAgPH0ge3NldCB0YWdzIGRfLX0KKwkJCQl7ICA+fSB7c2V0IHRhZ3MgZF8rfQorCQkJCXsgIFd9IHtzZXQgdGFncyB7fX0KKwkJCQlkZWZhdWx0IHsKKwkJCQkJcHV0cyAiZXJyb3I6IFVuaGFuZGxlZCBzdWJtb2R1bGUgZGlmZiBtYXJrZXI6IHskb3B9IgorCQkJCQlzZXQgdGFncyB7fQorCQkJCX0KKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlzZXQgb3AgW3N0cmluZyBpbmRleCAkbGluZSAwXQorCQkJc3dpdGNoIC0tICRvcCB7CisJCQl7IH0ge3NldCB0YWdzIHt9fQorCQkJe0B9IHtzZXQgdGFncyBkX0B9CisJCQl7LX0ge3NldCB0YWdzIGRfLX0KKwkJCXsrfSB7CisJCQkJc2V0IHJlZ2V4cCBbc3RyaW5nIG1hcCBbbGlzdCAlY29uZmxpY3Rfc2l6ZSAkY29uZmxpY3Rfc2l6ZV1cCisJCQkJCQkJCXteXCsoWzw+PV0peyVjb25mbGljdF9zaXplfSg/OiB8JCl9XQorCQkJCWlmIHtbcmVnZXhwICRyZWdleHAgJGxpbmUgX2cgb3BdfSB7CisJCQkJCXNldCBpc19jb25mbGljdF9kaWZmIDEKKwkJCQkJc2V0IHRhZ3MgZCRvcAorCQkJCX0gZWxzZSB7CisJCQkJCXNldCB0YWdzIGRfKworCQkJCX0KKwkJCX0KKwkJCWRlZmF1bHQgeworCQkJCXB1dHMgImVycm9yOiBVbmhhbmRsZWQgMiB3YXkgZGlmZiBtYXJrZXI6IHskb3B9IgorCQkJCXNldCB0YWdzIHt9CisJCQl9CisJCQl9CisJCX0KKwkJc2V0IG1hcmsgWyR1aV9kaWZmIGluZGV4ICJlbmQgLSAxIGxpbmUgbGluZXN0YXJ0Il0KKwkJJHVpX2RpZmYgaW5zZXJ0IGVuZCAkbGluZSAkdGFncworCQlpZiB7W3N0cmluZyBpbmRleCAkbGluZSBlbmRdIGVxICJcciJ9IHsKKwkJCSR1aV9kaWZmIHRhZyBhZGQgZF9jciB7ZW5kIC0gMmN9CisJCX0KKwkJJHVpX2RpZmYgaW5zZXJ0IGVuZCAiXG4iICR0YWdzCisKKwkJZm9yZWFjaCB7cG9zYmVnaW4gY29sYmVnaW4gcG9zZW5kIGNvbGVuZH0gJG1hcmt1cCB7CisJCQlzZXQgcHJlZml4IGNscgorCQkJZm9yZWFjaCBzdHlsZSBbbHNvcnQgLWludGVnZXIgW3NwbGl0ICRjb2xiZWdpbiAiOyJdXSB7CisJCQkJaWYgeyRzdHlsZSBlcSAiNyJ9IHthcHBlbmQgcHJlZml4IGk7IGNvbnRpbnVlfQorCQkJCWlmIHskc3R5bGUgIT0gNCAmJiAoJHN0eWxlIDwgMzAgfHwgJHN0eWxlID4gNDcpfSB7Y29udGludWV9CisJCQkJc2V0IGEgIiRtYXJrIGxpbmVzdGFydCArICRwb3NiZWdpbiBjaGFycyIKKwkJCQlzZXQgYiAiJG1hcmsgbGluZXN0YXJ0ICsgJHBvc2VuZCBjaGFycyIKKwkJCQljYXRjaCB7JHVpX2RpZmYgdGFnIGFkZCAkcHJlZml4JHN0eWxlICRhICRifQorCQkJfQorCQl9CisJfQorCSR1aV9kaWZmIGNvbmYgLXN0YXRlIGRpc2FibGVkCisKKwlpZiB7W2VvZiAkZmRdfSB7CisJCWNsb3NlICRmZAorCisJCWlmIHskY3VycmVudF9kaWZmX3F1ZXVlIG5lIHt9fSB7CisJCQlhZHZhbmNlX2RpZmZfcXVldWUgJGNvbnRfaW5mbworCQkJcmV0dXJuCisJCX0KKworCQlzZXQgZGlmZl9hY3RpdmUgMAorCQl1bmxvY2tfaW5kZXgKKwkJc2V0IHNjcm9sbF9wb3MgW2xpbmRleCAkY29udF9pbmZvIDBdCisJCWlmIHskc2Nyb2xsX3BvcyBuZSB7fX0geworCQkJdXBkYXRlCisJCQkkdWlfZGlmZiB5dmlldyBtb3ZldG8gJHNjcm9sbF9wb3MKKwkJfQorCQl1aV9yZWFkeQorCisJCWlmIHtbJHVpX2RpZmYgaW5kZXggZW5kXSBlcSB7Mi4wfX0geworCQkJaGFuZGxlX2VtcHR5X2RpZmYKKwkJfSBlbHNlIHsKKwkJCXNldCBkaWZmX2VtcHR5X2NvdW50IDAKKwkJfQorCisJCXNldCBjYWxsYmFjayBbbGluZGV4ICRjb250X2luZm8gMV0KKwkJaWYgeyRjYWxsYmFjayBuZSB7fX0geworCQkJZXZhbCAkY2FsbGJhY2sKKwkJfQorCX0KK30KKworcHJvYyBhcHBseV9odW5rIHt4IHl9IHsKKwlnbG9iYWwgY3VycmVudF9kaWZmX3BhdGggY3VycmVudF9kaWZmX2hlYWRlciBjdXJyZW50X2RpZmZfc2lkZQorCWdsb2JhbCB1aV9kaWZmIHVpX2luZGV4IGZpbGVfc3RhdGVzCisKKwlpZiB7JGN1cnJlbnRfZGlmZl9wYXRoIGVxIHt9IHx8ICRjdXJyZW50X2RpZmZfaGVhZGVyIGVxIHt9fSByZXR1cm4KKwlpZiB7IVtsb2NrX2luZGV4IGFwcGx5X2h1bmtdfSByZXR1cm4KKworCXNldCBhcHBseV9jbWQge2FwcGx5IC0tY2FjaGVkIC0td2hpdGVzcGFjZT1ub3dhcm59CisJc2V0IG1pIFtsaW5kZXggJGZpbGVfc3RhdGVzKCRjdXJyZW50X2RpZmZfcGF0aCkgMF0KKwlpZiB7JGN1cnJlbnRfZGlmZl9zaWRlIGVxICR1aV9pbmRleH0geworCQlzZXQgZmFpbGVkX21zZyBbbWMgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIl0KKwkJbGFwcGVuZCBhcHBseV9jbWQgLS1yZXZlcnNlCisJCWlmIHtbc3RyaW5nIGluZGV4ICRtaSAwXSBuZSB7TX19IHsKKwkJCXVubG9ja19pbmRleAorCQkJcmV0dXJuCisJCX0KKwl9IGVsc2UgeworCQlzZXQgZmFpbGVkX21zZyBbbWMgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiJdCisJCWlmIHtbc3RyaW5nIGluZGV4ICRtaSAxXSBuZSB7TX19IHsKKwkJCXVubG9ja19pbmRleAorCQkJcmV0dXJuCisJCX0KKwl9CisKKwlzZXQgc19sbm8gW2xpbmRleCBbc3BsaXQgWyR1aV9kaWZmIGluZGV4IEAkeCwkeV0gLl0gMF0KKwlzZXQgc19sbm8gWyR1aV9kaWZmIHNlYXJjaCAtYmFja3dhcmRzIC1yZWdleHAgXkBAICRzX2xuby4wIDAuMF0KKwlpZiB7JHNfbG5vIGVxIHt9fSB7CisJCXVubG9ja19pbmRleAorCQlyZXR1cm4KKwl9CisKKwlzZXQgZV9sbm8gWyR1aV9kaWZmIHNlYXJjaCAtZm9yd2FyZHMgLXJlZ2V4cCBeQEAgIiRzX2xubyArIDEgbGluZXMiIGVuZF0KKwlpZiB7JGVfbG5vIGVxIHt9fSB7CisJCXNldCBlX2xubyBlbmQKKwl9CisKKwlpZiB7W2NhdGNoIHsKKwkJc2V0IGVuYyBbZ2V0X3BhdGhfZW5jb2RpbmcgJGN1cnJlbnRfZGlmZl9wYXRoXQorCQlzZXQgcCBbZXZhbCBnaXRfd3JpdGUgJGFwcGx5X2NtZF0KKwkJZmNvbmZpZ3VyZSAkcCAtdHJhbnNsYXRpb24gYmluYXJ5IC1lbmNvZGluZyAkZW5jCisJCXB1dHMgLW5vbmV3bGluZSAkcCAkY3VycmVudF9kaWZmX2hlYWRlcgorCQlwdXRzIC1ub25ld2xpbmUgJHAgWyR1aV9kaWZmIGdldCAkc19sbm8gJGVfbG5vXQorCQljbG9zZSAkcH0gZXJyXX0geworCQllcnJvcl9wb3B1cCBbYXBwZW5kICRmYWlsZWRfbXNnICJcblxuJGVyciJdCisJCXVubG9ja19pbmRleAorCQlyZXR1cm4KKwl9CisKKwkkdWlfZGlmZiBjb25mIC1zdGF0ZSBub3JtYWwKKwkkdWlfZGlmZiBkZWxldGUgJHNfbG5vICRlX2xubworCSR1aV9kaWZmIGNvbmYgLXN0YXRlIGRpc2FibGVkCisKKwlpZiB7WyR1aV9kaWZmIGdldCAxLjAgZW5kXSBlcSAiXG4ifSB7CisJCXNldCBvIF8KKwl9IGVsc2UgeworCQlzZXQgbyA/CisJfQorCisJaWYgeyRjdXJyZW50X2RpZmZfc2lkZSBlcSAkdWlfaW5kZXh9IHsKKwkJc2V0IG1pICR7b31NCisJfSBlbHNlaWYge1tzdHJpbmcgaW5kZXggJG1pIDBdIGVxIHtffX0geworCQlzZXQgbWkgTSRvCisJfSBlbHNlIHsKKwkJc2V0IG1pID8kbworCX0KKwl1bmxvY2tfaW5kZXgKKwlkaXNwbGF5X2ZpbGUgJGN1cnJlbnRfZGlmZl9wYXRoICRtaQorCSMgVGhpcyBzaG91bGQgdHJpZ2dlciBzaGlmdCB0byB0aGUgbmV4dCBjaGFuZ2VkIGZpbGUKKwlpZiB7JG8gZXEge199fSB7CisJCXJlc2hvd19kaWZmCisJfQorfQorCitwcm9jIGFwcGx5X3JhbmdlX29yX2xpbmUge3ggeX0geworCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aCBjdXJyZW50X2RpZmZfaGVhZGVyIGN1cnJlbnRfZGlmZl9zaWRlCisJZ2xvYmFsIHVpX2RpZmYgdWlfaW5kZXggZmlsZV9zdGF0ZXMKKworCXNldCBzZWxlY3RlZCBbJHVpX2RpZmYgdGFnIG5leHRyYW5nZSBzZWwgMC4wXQorCisJaWYgeyRzZWxlY3RlZCA9PSB7fX0geworCQlzZXQgZmlyc3QgWyR1aV9kaWZmIGluZGV4ICJAJHgsJHkiXQorCQlzZXQgbGFzdCAkZmlyc3QKKwl9IGVsc2UgeworCQlzZXQgZmlyc3QgW2xpbmRleCAkc2VsZWN0ZWQgMF0KKwkJc2V0IGxhc3QgW2xpbmRleCAkc2VsZWN0ZWQgMV0KKwl9CisKKwlzZXQgZmlyc3RfbCBbJHVpX2RpZmYgaW5kZXggIiRmaXJzdCBsaW5lc3RhcnQiXQorCXNldCBsYXN0X2wgWyR1aV9kaWZmIGluZGV4ICIkbGFzdCBsaW5lZW5kIl0KKworCWlmIHskY3VycmVudF9kaWZmX3BhdGggZXEge30gfHwgJGN1cnJlbnRfZGlmZl9oZWFkZXIgZXEge319IHJldHVybgorCWlmIHshW2xvY2tfaW5kZXggYXBwbHlfaHVua119IHJldHVybgorCisJc2V0IGFwcGx5X2NtZCB7YXBwbHkgLS1jYWNoZWQgLS13aGl0ZXNwYWNlPW5vd2Fybn0KKwlzZXQgbWkgW2xpbmRleCAkZmlsZV9zdGF0ZXMoJGN1cnJlbnRfZGlmZl9wYXRoKSAwXQorCWlmIHskY3VycmVudF9kaWZmX3NpZGUgZXEgJHVpX2luZGV4fSB7CisJCXNldCBmYWlsZWRfbXNnIFttYyAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iXQorCQlzZXQgdG9fY29udGV4dCB7K30KKwkJbGFwcGVuZCBhcHBseV9jbWQgLS1yZXZlcnNlCisJCWlmIHtbc3RyaW5nIGluZGV4ICRtaSAwXSBuZSB7TX19IHsKKwkJCXVubG9ja19pbmRleAorCQkJcmV0dXJuCisJCX0KKwl9IGVsc2UgeworCQlzZXQgZmFpbGVkX21zZyBbbWMgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiJdCisJCXNldCB0b19jb250ZXh0IHstfQorCQlpZiB7W3N0cmluZyBpbmRleCAkbWkgMV0gbmUge019fSB7CisJCQl1bmxvY2tfaW5kZXgKKwkJCXJldHVybgorCQl9CisJfQorCisJc2V0IHdob2xlcGF0Y2gge30KKworCXdoaWxlIHskZmlyc3RfbCA8ICRsYXN0X2x9IHsKKwkJc2V0IGlfbCBbJHVpX2RpZmYgc2VhcmNoIC1iYWNrd2FyZHMgLXJlZ2V4cCBeQEAgJGZpcnN0X2wgMC4wXQorCQlpZiB7JGlfbCBlcSB7fX0geworCQkJIyBJZiB0aGVyZSdzIG5vdCBhIEBAIGFib3ZlLCB0aGVuIHRoZSBzZWxlY3RlZCByYW5nZQorCQkJIyBtdXN0IGhhdmUgY29tZSBiZWZvcmUgdGhlIGZpcnN0X2wgQEAKKwkJCXNldCBpX2wgWyR1aV9kaWZmIHNlYXJjaCAtcmVnZXhwIF5AQCAkZmlyc3RfbCAkbGFzdF9sXQorCQl9CisJCWlmIHskaV9sIGVxIHt9fSB7CisJCQl1bmxvY2tfaW5kZXgKKwkJCXJldHVybgorCQl9CisJCSMgJGlfbCBpcyBub3cgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKKworCQkjIHBpY2sgc3RhcnQgbGluZSBudW1iZXIgZnJvbSBodW5rIGhlYWRlcgorCQlzZXQgaGggWyR1aV9kaWZmIGdldCAkaV9sICIkaV9sICsgMSBsaW5lcyJdCisJCXNldCBoaCBbbGluZGV4IFtzcGxpdCAkaGggLF0gMF0KKwkJc2V0IGhsbiBbbGluZGV4IFtzcGxpdCAkaGggLV0gMV0KKworCQkjIFRoZXJlIGlzIGEgc3BlY2lhbCBzaXR1YXRpb24gdG8gdGFrZSBjYXJlIG9mLiBDb25zaWRlciB0aGlzCisJCSMgaHVuazoKKwkJIworCQkjICAgIEBAIC0xMCw0ICsxMCw0IEBACisJCSMgICAgIGNvbnRleHQgYmVmb3JlCisJCSMgICAgLW9sZCAxCisJCSMgICAgLW9sZCAyCisJCSMgICAgK25ldyAxCisJCSMgICAgK25ldyAyCisJCSMgICAgIGNvbnRleHQgYWZ0ZXIKKwkJIworCQkjIFdlIHVzZWQgdG8ga2VlcCB0aGUgY29udGV4dCBsaW5lcyBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4KKwkJIyB0aGUgaHVuay4gQnV0IHRoZW4gaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNvcnJlY3RseSBzdGFnZSBvbmx5CisJCSMgIi1vbGQgMSIgYW5kICIrbmV3IDEiIC0gaXQgd291bGQgcmVzdWx0IGluIHRoaXMgc3RhZ2VkIHRleHQ6CisJCSMKKwkJIyAgICBjb250ZXh0IGJlZm9yZQorCQkjICAgIG9sZCAyCisJCSMgICAgbmV3IDEKKwkJIyAgICBjb250ZXh0IGFmdGVyCisJCSMKKwkJIyAoQnkgc3ltbWV0cnkgaXQgaXMgbm90IHBvc3NpYmxlIHRvICp1bipzdGFnZSAib2xkIDIiIGFuZCAibmV3CisJCSMgMiIuKQorCQkjCisJCSMgV2UgcmVzb2x2ZSB0aGUgcHJvYmxlbSBieSBpbnRyb2R1Y2luZyBhbiBhc3ltbWV0cnksIG5hbWVseSwKKwkJIyB3aGVuIGEgIisiIGxpbmUgaXMgKnN0YWdlZCosIGl0IGlzIG1vdmVkIGluIGZyb250IG9mIHRoZQorCQkjIGNvbnRleHQgbGluZXMgdGhhdCBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlICItIiBsaW5lcyB0aGF0IGFyZQorCQkjIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgIisiIGJsb2NrLiBUaGF0IGlzLCB3ZSBjb25zdHJ1Y3QgdGhpcworCQkjIHBhdGNoOgorCQkjCisJCSMgICAgQEAgLTEwLDQgKzEwLDUgQEAKKwkJIyAgICAgY29udGV4dCBiZWZvcmUKKwkJIyAgICArbmV3IDEKKwkJIyAgICAgb2xkIDEKKwkJIyAgICAgb2xkIDIKKwkJIyAgICAgY29udGV4dCBhZnRlcgorCQkjCisJCSMgQnV0IHdlIGRvICpub3QqIHRyZWF0ICItIiBsaW5lcyB0aGF0IGFyZSAqdW4qc3RhZ2VkIGluIGEKKwkJIyBzcGVjaWFsIHdheS4KKwkJIworCQkjIFdpdGggdGhpcyBhc3ltbWV0cnkgaXQgaXMgcG9zc2libGUgdG8gc3RhZ2UgdGhlIGNoYW5nZSAib2xkCisJCSMgMSIgLT4gIm5ldyAxIiBkaXJlY3RseSwgYW5kIHRvIHN0YWdlIHRoZSBjaGFuZ2UgIm9sZCAyIiAtPgorCQkjICJuZXcgMiIgYnkgZmlyc3Qgc3RhZ2luZyB0aGUgZW50aXJlIGh1bmsgYW5kIHRoZW4gdW5zdGFnaW5nCisJCSMgdGhlIGNoYW5nZSAib2xkIDEiIC0+ICJuZXcgMSIuCisJCSMKKwkJIyBBcHBseWluZyBtdWx0aXBsZSBsaW5lcyBhZGRzIGNvbXBsZXhpdHkgdG8gdGhlIHNwZWNpYWwKKwkJIyBzaXR1YXRpb24uICBUaGUgcHJlX2NvbnRleHQgbXVzdCBiZSBtb3ZlZCBhZnRlciB0aGUgZW50aXJlCisJCSMgZmlyc3QgYmxvY2sgb2YgY29uc2VjdXRpdmUgc3RhZ2VkICIrIiBsaW5lcywgc28gdGhhdAorCQkjIHN0YWdpbmcgYm90aCBhZGRpdGlvbnMgZ2l2ZXMgdGhlIGZvbGxvd2luZyBwYXRjaDoKKwkJIworCQkjICAgIEBAIC0xMCw0ICsxMCw2IEBACisJCSMgICAgIGNvbnRleHQgYmVmb3JlCisJCSMgICAgK25ldyAxCisJCSMgICAgK25ldyAyCisJCSMgICAgIG9sZCAxCisJCSMgICAgIG9sZCAyCisJCSMgICAgIGNvbnRleHQgYWZ0ZXIKKworCQkjIFRoaXMgaXMgbm9uLWVtcHR5IGlmIGFuZCBvbmx5IGlmIHdlIGFyZSBfc3RhZ2luZ18gY2hhbmdlczsKKwkJIyB0aGVuIGl0IGFjY3VtdWxhdGVzIHRoZSBjb25zZWN1dGl2ZSAiLSIgbGluZXMgKGFmdGVyCisJCSMgY29udmVydGluZyB0aGVtIHRvIGNvbnRleHQgbGluZXMpIGluIG9yZGVyIHRvIGJlIG1vdmVkIGFmdGVyCisJCSMgIisiIGNoYW5nZSBsaW5lcy4KKwkJc2V0IHByZV9jb250ZXh0IHt9CisKKwkJc2V0IG4gMAorCQlzZXQgbSAwCisJCXNldCBpX2wgWyR1aV9kaWZmIGluZGV4ICIkaV9sICsgMSBsaW5lcyJdCisJCXNldCBwYXRjaCB7fQorCQl3aGlsZSB7WyR1aV9kaWZmIGNvbXBhcmUgJGlfbCA8ICJlbmQgLSAxIGNoYXJzIl0gJiYKKwkJICAgICAgIFskdWlfZGlmZiBnZXQgJGlfbCAiJGlfbCArIDIgY2hhcnMiXSBuZSB7QEB9fSB7CisJCQlzZXQgbmV4dF9sIFskdWlfZGlmZiBpbmRleCAiJGlfbCArIDEgbGluZXMiXQorCQkJc2V0IGMxIFskdWlfZGlmZiBnZXQgJGlfbF0KKwkJCWlmIHtbJHVpX2RpZmYgY29tcGFyZSAkZmlyc3RfbCA8PSAkaV9sXSAmJgorCQkJICAgIFskdWlfZGlmZiBjb21wYXJlICRpX2wgPCAkbGFzdF9sXSAmJgorCQkJICAgICgkYzEgZXEgey19IHx8ICRjMSBlcSB7K30pfSB7CisJCQkJIyBhIGxpbmUgdG8gc3RhZ2UvdW5zdGFnZQorCQkJCXNldCBsbiBbJHVpX2RpZmYgZ2V0ICRpX2wgJG5leHRfbF0KKwkJCQlpZiB7JGMxIGVxIHstfX0geworCQkJCQlzZXQgbiBbZXhwciAkbisxXQorCQkJCQlzZXQgcGF0Y2ggIiRwYXRjaCRwcmVfY29udGV4dCRsbiIKKwkJCQkJc2V0IHByZV9jb250ZXh0IHt9CisJCQkJfSBlbHNlIHsKKwkJCQkJc2V0IG0gW2V4cHIgJG0rMV0KKwkJCQkJc2V0IHBhdGNoICIkcGF0Y2gkbG4iCisJCQkJfQorCQkJfSBlbHNlaWYgeyRjMSBuZSB7LX0gJiYgJGMxIG5lIHsrfX0geworCQkJCSMgY29udGV4dCBsaW5lCisJCQkJc2V0IGxuIFskdWlfZGlmZiBnZXQgJGlfbCAkbmV4dF9sXQorCQkJCXNldCBwYXRjaCAiJHBhdGNoJHByZV9jb250ZXh0JGxuIgorCQkJCSMgU2tpcCB0aGUgIlwgTm8gbmV3bGluZSBhdCBlbmQgb2YKKwkJCQkjIGZpbGUiLiBEZXBlbmRpbmcgb24gdGhlIGxvY2FsZSBzZXR0aW5nCisJCQkJIyB3ZSBkb24ndCBrbm93IHdoYXQgdGhpcyBsaW5lIGxvb2tzCisJCQkJIyBsaWtlIGV4YWN0bHkuIFRoZSBvbmx5IHRoaW5nIHdlIGRvCisJCQkJIyBrbm93IGlzIHRoYXQgaXQgc3RhcnRzIHdpdGggIlwgIgorCQkJCWlmIHshW3N0cmluZyBtYXRjaCB7XFwgKn0gJGxuXX0geworCQkJCQlzZXQgbiBbZXhwciAkbisxXQorCQkJCQlzZXQgbSBbZXhwciAkbSsxXQorCQkJCX0KKwkJCQlzZXQgcHJlX2NvbnRleHQge30KKwkJCX0gZWxzZWlmIHskYzEgZXEgJHRvX2NvbnRleHR9IHsKKwkJCQkjIHR1cm4gY2hhbmdlIGxpbmUgaW50byBjb250ZXh0IGxpbmUKKwkJCQlzZXQgbG4gWyR1aV9kaWZmIGdldCAiJGlfbCArIDEgY2hhcnMiICRuZXh0X2xdCisJCQkJaWYgeyRjMSBlcSB7LX19IHsKKwkJCQkJc2V0IHByZV9jb250ZXh0ICIkcHJlX2NvbnRleHQgJGxuIgorCQkJCX0gZWxzZSB7CisJCQkJCXNldCBwYXRjaCAiJHBhdGNoICRsbiIKKwkJCQl9CisJCQkJc2V0IG4gW2V4cHIgJG4rMV0KKwkJCQlzZXQgbSBbZXhwciAkbSsxXQorCQkJfSBlbHNlIHsKKwkJCQkjIGEgY2hhbmdlIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gb2YKKwkJCQkjIHRvX2NvbnRleHQgd2hpY2ggaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YKKwkJCQkjIGxpbmVzIHRvIGFwcGx5LgorCQkJCXNldCBwYXRjaCAiJHBhdGNoJHByZV9jb250ZXh0IgorCQkJCXNldCBwcmVfY29udGV4dCB7fQorCQkJfQorCQkJc2V0IGlfbCAkbmV4dF9sCisJCX0KKwkJc2V0IHBhdGNoICIkcGF0Y2gkcHJlX2NvbnRleHQiCisJCXNldCB3aG9sZXBhdGNoICIkd2hvbGVwYXRjaEBAIC0kaGxuLCRuICskaGxuLCRtIEBAXG4kcGF0Y2giCisJCXNldCBmaXJzdF9sIFskdWlfZGlmZiBpbmRleCAiJG5leHRfbCArIDEgbGluZXMiXQorCX0KKworCWlmIHtbY2F0Y2ggeworCQlzZXQgZW5jIFtnZXRfcGF0aF9lbmNvZGluZyAkY3VycmVudF9kaWZmX3BhdGhdCisJCXNldCBwIFtldmFsIGdpdF93cml0ZSAkYXBwbHlfY21kXQorCQlmY29uZmlndXJlICRwIC10cmFuc2xhdGlvbiBiaW5hcnkgLWVuY29kaW5nICRlbmMKKwkJcHV0cyAtbm9uZXdsaW5lICRwICRjdXJyZW50X2RpZmZfaGVhZGVyCisJCXB1dHMgLW5vbmV3bGluZSAkcCAkd2hvbGVwYXRjaAorCQljbG9zZSAkcH0gZXJyXX0geworCQllcnJvcl9wb3B1cCBbYXBwZW5kICRmYWlsZWRfbXNnICJcblxuJGVyciJdCisJfQorCisJdW5sb2NrX2luZGV4Cit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9lbmNvZGluZy50Y2wgYi9naXQtZ3VpL2xpYi9lbmNvZGluZy50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI2NjhmYwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL2VuY29kaW5nLnRjbApAQCAtMCwwICsxLDQ2NiBAQAorIyBnaXQtZ3VpIGVuY29kaW5nIHN1cHBvcnQKKyMgQ29weXJpZ2h0IChDKSAyMDA1IFBhdWwgTWFja2VycmFzIDxwYXVsdXNAc2FtYmEub3JnPgorIyAoQ29waWVkIGZyb20gZ2l0aywgY29tbWl0IGZkOGNjYmVjNGYwMTYxKQorCisjIFRoaXMgbGlzdCBvZiBlbmNvZGluZyBuYW1lcyBhbmQgYWxpYXNlcyBpcyBkaXN0aWxsZWQgZnJvbQorIyBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzLgorIyBOb3QgYWxsIG9mIHRoZW0gYXJlIHN1cHBvcnRlZCBieSBUY2wuCitzZXQgZW5jb2RpbmdfYWxpYXNlcyB7CisgICAgeyBBTlNJX1gzLjQtMTk2OCBpc28taXItNiBBTlNJX1gzLjQtMTk4NiBJU09fNjQ2LmlydjoxOTkxIEFTQ0lJCisgICAgICBJU082NDYtVVMgVVMtQVNDSUkgdXMgSUJNMzY3IGNwMzY3IGNzQVNDSUkgfQorICAgIHsgSVNPLTEwNjQ2LVVURi0xIGNzSVNPMTA2NDZVVEYxIH0KKyAgICB7IElTT182NDYuYmFzaWM6MTk4MyByZWYgY3NJU082NDZiYXNpYzE5ODMgfQorICAgIHsgSU5WQVJJQU5UIGNzSU5WQVJJQU5UIH0KKyAgICB7IElTT182NDYuaXJ2OjE5ODMgaXNvLWlyLTIgaXJ2IGNzSVNPMkludGxSZWZWZXJzaW9uIH0KKyAgICB7IEJTXzQ3MzAgaXNvLWlyLTQgSVNPNjQ2LUdCIGdiIHVrIGNzSVNPNFVuaXRlZEtpbmdkb20gfQorICAgIHsgTkFUUy1TRUZJIGlzby1pci04LTEgY3NOQVRTU0VGSSB9CisgICAgeyBOQVRTLVNFRkktQUREIGlzby1pci04LTIgY3NOQVRTU0VGSUFERCB9CisgICAgeyBOQVRTLURBTk8gaXNvLWlyLTktMSBjc05BVFNEQU5PIH0KKyAgICB7IE5BVFMtREFOTy1BREQgaXNvLWlyLTktMiBjc05BVFNEQU5PQUREIH0KKyAgICB7IFNFTl84NTAyMDBfQiBpc28taXItMTAgRkkgSVNPNjQ2LUZJIElTTzY0Ni1TRSBzZSBjc0lTTzEwU3dlZGlzaCB9CisgICAgeyBTRU5fODUwMjAwX0MgaXNvLWlyLTExIElTTzY0Ni1TRTIgc2UyIGNzSVNPMTFTd2VkaXNoRm9yTmFtZXMgfQorICAgIHsgS1NfQ181NjAxLTE5ODcgaXNvLWlyLTE0OSBLU19DXzU2MDEtMTk4OSBLU0NfNTYwMSBrb3JlYW4gY3NLU0M1NjAxMTk4NyB9CisgICAgeyBJU08tMjAyMi1LUiBjc0lTTzIwMjJLUiB9CisgICAgeyBFVUMtS1IgY3NFVUNLUiB9CisgICAgeyBJU08tMjAyMi1KUCBjc0lTTzIwMjJKUCB9CisgICAgeyBJU08tMjAyMi1KUC0yIGNzSVNPMjAyMkpQMiB9CisgICAgeyBKSVNfQzYyMjAtMTk2OS1qcCBKSVNfQzYyMjAtMTk2OSBpc28taXItMTMga2F0YWthbmEgeDAyMDEtNworICAgICAgY3NJU08xM0pJU0M2MjIwanAgfQorICAgIHsgSklTX0M2MjIwLTE5Njktcm8gaXNvLWlyLTE0IGpwIElTTzY0Ni1KUCBjc0lTTzE0SklTQzYyMjBybyB9CisgICAgeyBJVCBpc28taXItMTUgSVNPNjQ2LUlUIGNzSVNPMTVJdGFsaWFuIH0KKyAgICB7IFBUIGlzby1pci0xNiBJU082NDYtUFQgY3NJU08xNlBvcnR1Z3Vlc2UgfQorICAgIHsgRVMgaXNvLWlyLTE3IElTTzY0Ni1FUyBjc0lTTzE3U3BhbmlzaCB9CisgICAgeyBncmVlazctb2xkIGlzby1pci0xOCBjc0lTTzE4R3JlZWs3T2xkIH0KKyAgICB7IGxhdGluLWdyZWVrIGlzby1pci0xOSBjc0lTTzE5TGF0aW5HcmVlayB9CisgICAgeyBESU5fNjYwMDMgaXNvLWlyLTIxIGRlIElTTzY0Ni1ERSBjc0lTTzIxR2VybWFuIH0KKyAgICB7IE5GX1pfNjItMDEwXygxOTczKSBpc28taXItMjUgSVNPNjQ2LUZSMSBjc0lTTzI1RnJlbmNoIH0KKyAgICB7IExhdGluLWdyZWVrLTEgaXNvLWlyLTI3IGNzSVNPMjdMYXRpbkdyZWVrMSB9CisgICAgeyBJU09fNTQyNyBpc28taXItMzcgY3NJU081NDI3Q3lyaWxsaWMgfQorICAgIHsgSklTX0M2MjI2LTE5NzggaXNvLWlyLTQyIGNzSVNPNDJKSVNDNjIyNjE5NzggfQorICAgIHsgQlNfdmlld2RhdGEgaXNvLWlyLTQ3IGNzSVNPNDdCU1ZpZXdkYXRhIH0KKyAgICB7IElOSVMgaXNvLWlyLTQ5IGNzSVNPNDlJTklTIH0KKyAgICB7IElOSVMtOCBpc28taXItNTAgY3NJU081MElOSVM4IH0KKyAgICB7IElOSVMtY3lyaWxsaWMgaXNvLWlyLTUxIGNzSVNPNTFJTklTQ3lyaWxsaWMgfQorICAgIHsgSVNPXzU0Mjc6MTk4MSBpc28taXItNTQgSVNPNTQyN0N5cmlsbGljMTk4MSB9CisgICAgeyBJU09fNTQyODoxOTgwIGlzby1pci01NSBjc0lTTzU0MjhHcmVlayB9CisgICAgeyBHQl8xOTg4LTgwIGlzby1pci01NyBjbiBJU082NDYtQ04gY3NJU081N0dCMTk4OCB9CisgICAgeyBHQl8yMzEyLTgwIGlzby1pci01OCBjaGluZXNlIGNzSVNPNThHQjIzMTI4MCB9CisgICAgeyBOU180NTUxLTEgaXNvLWlyLTYwIElTTzY0Ni1OTyBubyBjc0lTTzYwRGFuaXNoTm9yd2VnaWFuCisgICAgICBjc0lTTzYwTm9yd2VnaWFuMSB9CisgICAgeyBOU180NTUxLTIgSVNPNjQ2LU5PMiBpc28taXItNjEgbm8yIGNzSVNPNjFOb3J3ZWdpYW4yIH0KKyAgICB7IE5GX1pfNjItMDEwIGlzby1pci02OSBJU082NDYtRlIgZnIgY3NJU082OUZyZW5jaCB9CisgICAgeyB2aWRlb3RleC1zdXBwbCBpc28taXItNzAgY3NJU083MFZpZGVvdGV4U3VwcDEgfQorICAgIHsgUFQyIGlzby1pci04NCBJU082NDYtUFQyIGNzSVNPODRQb3J0dWd1ZXNlMiB9CisgICAgeyBFUzIgaXNvLWlyLTg1IElTTzY0Ni1FUzIgY3NJU084NVNwYW5pc2gyIH0KKyAgICB7IE1TWl83Nzk1LjMgaXNvLWlyLTg2IElTTzY0Ni1IVSBodSBjc0lTTzg2SHVuZ2FyaWFuIH0KKyAgICB7IEpJU19DNjIyNi0xOTgzIGlzby1pci04NyB4MDIwOCBKSVNfWDAyMDgtMTk4MyBjc0lTTzg3SklTWDAyMDggfQorICAgIHsgZ3JlZWs3IGlzby1pci04OCBjc0lTTzg4R3JlZWs3IH0KKyAgICB7IEFTTU9fNDQ5IElTT185MDM2IGFyYWJpYzcgaXNvLWlyLTg5IGNzSVNPODlBU01PNDQ5IH0KKyAgICB7IGlzby1pci05MCBjc0lTTzkwIH0KKyAgICB7IEpJU19DNjIyOS0xOTg0LWEgaXNvLWlyLTkxIGpwLW9jci1hIGNzSVNPOTFKSVNDNjIyOTE5ODRhIH0KKyAgICB7IEpJU19DNjIyOS0xOTg0LWIgaXNvLWlyLTkyIElTTzY0Ni1KUC1PQ1ItQiBqcC1vY3ItYgorICAgICAgY3NJU085MkpJU0M2Mjk5MTk4NGIgfQorICAgIHsgSklTX0M2MjI5LTE5ODQtYi1hZGQgaXNvLWlyLTkzIGpwLW9jci1iLWFkZCBjc0lTTzkzSklTNjIyOTE5ODRiYWRkIH0KKyAgICB7IEpJU19DNjIyOS0xOTg0LWhhbmQgaXNvLWlyLTk0IGpwLW9jci1oYW5kIGNzSVNPOTRKSVM2MjI5MTk4NGhhbmQgfQorICAgIHsgSklTX0M2MjI5LTE5ODQtaGFuZC1hZGQgaXNvLWlyLTk1IGpwLW9jci1oYW5kLWFkZAorICAgICAgY3NJU085NUpJUzYyMjkxOTg0aGFuZGFkZCB9CisgICAgeyBKSVNfQzYyMjktMTk4NC1rYW5hIGlzby1pci05NiBjc0lTTzk2SklTQzYyMjkxOTg0a2FuYSB9CisgICAgeyBJU09fMjAzMy0xOTgzIGlzby1pci05OCBlMTNiIGNzSVNPMjAzMyB9CisgICAgeyBBTlNJX1gzLjExMC0xOTgzIGlzby1pci05OSBDU0FfVDUwMC0xOTgzIE5BUExQUyBjc0lTTzk5TkFQTFBTIH0KKyAgICB7IElTT184ODU5LTE6MTk4NyBpc28taXItMTAwIElTT184ODU5LTEgSVNPLTg4NTktMSBsYXRpbjEgbDEgSUJNODE5CisgICAgICBDUDgxOSBjc0lTT0xhdGluMSB9CisgICAgeyBJU09fODg1OS0yOjE5ODcgaXNvLWlyLTEwMSBJU09fODg1OS0yIElTTy04ODU5LTIgbGF0aW4yIGwyIGNzSVNPTGF0aW4yIH0KKyAgICB7IFQuNjEtN2JpdCBpc28taXItMTAyIGNzSVNPMTAyVDYxN2JpdCB9CisgICAgeyBULjYxLThiaXQgVC42MSBpc28taXItMTAzIGNzSVNPMTAzVDYxOGJpdCB9CisgICAgeyBJU09fODg1OS0zOjE5ODggaXNvLWlyLTEwOSBJU09fODg1OS0zIElTTy04ODU5LTMgbGF0aW4zIGwzIGNzSVNPTGF0aW4zIH0KKyAgICB7IElTT184ODU5LTQ6MTk4OCBpc28taXItMTEwIElTT184ODU5LTQgSVNPLTg4NTktNCBsYXRpbjQgbDQgY3NJU09MYXRpbjQgfQorICAgIHsgRUNNQS1jeXJpbGxpYyBpc28taXItMTExIEtPSTgtRSBjc0lTTzExMUVDTUFDeXJpbGxpYyB9CisgICAgeyBDU0FfWjI0My40LTE5ODUtMSBpc28taXItMTIxIElTTzY0Ni1DQSBjc2E3LTEgY2EgY3NJU08xMjFDYW5hZGlhbjEgfQorICAgIHsgQ1NBX1oyNDMuNC0xOTg1LTIgaXNvLWlyLTEyMiBJU082NDYtQ0EyIGNzYTctMiBjc0lTTzEyMkNhbmFkaWFuMiB9CisgICAgeyBDU0FfWjI0My40LTE5ODUtZ3IgaXNvLWlyLTEyMyBjc0lTTzEyM0NTQVoyNDM0MTk4NWdyIH0KKyAgICB7IElTT184ODU5LTY6MTk4NyBpc28taXItMTI3IElTT184ODU5LTYgSVNPLTg4NTktNiBFQ01BLTExNCBBU01PLTcwOAorICAgICAgYXJhYmljIGNzSVNPTGF0aW5BcmFiaWMgfQorICAgIHsgSVNPXzg4NTktNi1FIGNzSVNPODg1OTZFIElTTy04ODU5LTYtRSB9CisgICAgeyBJU09fODg1OS02LUkgY3NJU084ODU5NkkgSVNPLTg4NTktNi1JIH0KKyAgICB7IElTT184ODU5LTc6MTk4NyBpc28taXItMTI2IElTT184ODU5LTcgSVNPLTg4NTktNyBFTE9UXzkyOCBFQ01BLTExOAorICAgICAgZ3JlZWsgZ3JlZWs4IGNzSVNPTGF0aW5HcmVlayB9CisgICAgeyBULjEwMS1HMiBpc28taXItMTI4IGNzSVNPMTI4VDEwMUcyIH0KKyAgICB7IElTT184ODU5LTg6MTk4OCBpc28taXItMTM4IElTT184ODU5LTggSVNPLTg4NTktOCBoZWJyZXcKKyAgICAgIGNzSVNPTGF0aW5IZWJyZXcgfQorICAgIHsgSVNPXzg4NTktOC1FIGNzSVNPODg1OThFIElTTy04ODU5LTgtRSB9CisgICAgeyBJU09fODg1OS04LUkgY3NJU084ODU5OEkgSVNPLTg4NTktOC1JIH0KKyAgICB7IENTTl8zNjkxMDMgaXNvLWlyLTEzOSBjc0lTTzEzOUNTTjM2OTEwMyB9CisgICAgeyBKVVNfSS5CMS4wMDIgaXNvLWlyLTE0MSBJU082NDYtWVUganMgeXUgY3NJU08xNDFKVVNJQjEwMDIgfQorICAgIHsgSVNPXzY5MzctMi1hZGQgaXNvLWlyLTE0MiBjc0lTT1RleHRDb21tIH0KKyAgICB7IElFQ19QMjctMSBpc28taXItMTQzIGNzSVNPMTQzSUVDUDI3MSB9CisgICAgeyBJU09fODg1OS01OjE5ODggaXNvLWlyLTE0NCBJU09fODg1OS01IElTTy04ODU5LTUgY3lyaWxsaWMKKyAgICAgIGNzSVNPTGF0aW5DeXJpbGxpYyB9CisgICAgeyBKVVNfSS5CMS4wMDMtc2VyYiBpc28taXItMTQ2IHNlcmJpYW4gY3NJU08xNDZTZXJiaWFuIH0KKyAgICB7IEpVU19JLkIxLjAwMy1tYWMgbWFjZWRvbmlhbiBpc28taXItMTQ3IGNzSVNPMTQ3TWFjZWRvbmlhbiB9CisgICAgeyBJU09fODg1OS05OjE5ODkgaXNvLWlyLTE0OCBJU09fODg1OS05IElTTy04ODU5LTkgbGF0aW41IGw1IGNzSVNPTGF0aW41IH0KKyAgICB7IGdyZWVrLWNjaXR0IGlzby1pci0xNTAgY3NJU08xNTAgY3NJU08xNTBHcmVla0NDSVRUIH0KKyAgICB7IE5DX05DMDAtMTA6ODEgY3ViYSBpc28taXItMTUxIElTTzY0Ni1DVSBjc0lTTzE1MUN1YmEgfQorICAgIHsgSVNPXzY5MzctMi0yNSBpc28taXItMTUyIGNzSVNPNjkzN0FkZCB9CisgICAgeyBHT1NUXzE5NzY4LTc0IFNUX1NFVl8zNTgtODggaXNvLWlyLTE1MyBjc0lTTzE1M0dPU1QxOTc2ODc0IH0KKyAgICB7IElTT184ODU5LXN1cHAgaXNvLWlyLTE1NCBsYXRpbjEtMi01IGNzSVNPODg1OVN1cHAgfQorICAgIHsgSVNPXzEwMzY3LWJveCBpc28taXItMTU1IGNzSVNPMTAzNjdCb3ggfQorICAgIHsgSVNPLTg4NTktMTAgaXNvLWlyLTE1NyBsNiBJU09fODg1OS0xMDoxOTkyIGNzSVNPTGF0aW42IGxhdGluNiB9CisgICAgeyBsYXRpbi1sYXAgbGFwIGlzby1pci0xNTggY3NJU08xNThMYXAgfQorICAgIHsgSklTX1gwMjEyLTE5OTAgeDAyMTIgaXNvLWlyLTE1OSBjc0lTTzE1OUpJU1gwMjEyMTk5MCB9CisgICAgeyBEU18yMDg5IERTMjA4OSBJU082NDYtREsgZGsgY3NJU082NDZEYW5pc2ggfQorICAgIHsgdXMtZGsgY3NVU0RLIH0KKyAgICB7IGRrLXVzIGNzREtVUyB9CisgICAgeyBKSVNfWDAyMDEgWDAyMDEgY3NIYWxmV2lkdGhLYXRha2FuYSB9CisgICAgeyBLU0M1NjM2IElTTzY0Ni1LUiBjc0tTQzU2MzYgfQorICAgIHsgSVNPLTEwNjQ2LVVDUy0yIGNzVW5pY29kZSB9CisgICAgeyBJU08tMTA2NDYtVUNTLTQgY3NVQ1M0IH0KKyAgICB7IERFQy1NQ1MgZGVjIGNzREVDTUNTIH0KKyAgICB7IGhwLXJvbWFuOCByb21hbjggcjggY3NIUFJvbWFuOCB9CisgICAgeyBtYWNpbnRvc2ggbWFjIGNzTWFjaW50b3NoIH0KKyAgICB7IElCTTAzNyBjcDAzNyBlYmNkaWMtY3AtdXMgZWJjZGljLWNwLWNhIGViY2RpYy1jcC13dCBlYmNkaWMtY3AtbmwKKyAgICAgIGNzSUJNMDM3IH0KKyAgICB7IElCTTAzOCBFQkNESUMtSU5UIGNwMDM4IGNzSUJNMDM4IH0KKyAgICB7IElCTTI3MyBDUDI3MyBjc0lCTTI3MyB9CisgICAgeyBJQk0yNzQgRUJDRElDLUJFIENQMjc0IGNzSUJNMjc0IH0KKyAgICB7IElCTTI3NSBFQkNESUMtQlIgY3AyNzUgY3NJQk0yNzUgfQorICAgIHsgSUJNMjc3IEVCQ0RJQy1DUC1ESyBFQkNESUMtQ1AtTk8gY3NJQk0yNzcgfQorICAgIHsgSUJNMjc4IENQMjc4IGViY2RpYy1jcC1maSBlYmNkaWMtY3Atc2UgY3NJQk0yNzggfQorICAgIHsgSUJNMjgwIENQMjgwIGViY2RpYy1jcC1pdCBjc0lCTTI4MCB9CisgICAgeyBJQk0yODEgRUJDRElDLUpQLUUgY3AyODEgY3NJQk0yODEgfQorICAgIHsgSUJNMjg0IENQMjg0IGViY2RpYy1jcC1lcyBjc0lCTTI4NCB9CisgICAgeyBJQk0yODUgQ1AyODUgZWJjZGljLWNwLWdiIGNzSUJNMjg1IH0KKyAgICB7IElCTTI5MCBjcDI5MCBFQkNESUMtSlAta2FuYSBjc0lCTTI5MCB9CisgICAgeyBJQk0yOTcgY3AyOTcgZWJjZGljLWNwLWZyIGNzSUJNMjk3IH0KKyAgICB7IElCTTQyMCBjcDQyMCBlYmNkaWMtY3AtYXIxIGNzSUJNNDIwIH0KKyAgICB7IElCTTQyMyBjcDQyMyBlYmNkaWMtY3AtZ3IgY3NJQk00MjMgfQorICAgIHsgSUJNNDI0IGNwNDI0IGViY2RpYy1jcC1oZSBjc0lCTTQyNCB9CisgICAgeyBJQk00MzcgY3A0MzcgNDM3IGNzUEM4Q29kZVBhZ2U0MzcgfQorICAgIHsgSUJNNTAwIENQNTAwIGViY2RpYy1jcC1iZSBlYmNkaWMtY3AtY2ggY3NJQk01MDAgfQorICAgIHsgSUJNNzc1IGNwNzc1IGNzUEM3NzVCYWx0aWMgfQorICAgIHsgSUJNODUwIGNwODUwIDg1MCBjc1BDODUwTXVsdGlsaW5ndWFsIH0KKyAgICB7IElCTTg1MSBjcDg1MSA4NTEgY3NJQk04NTEgfQorICAgIHsgSUJNODUyIGNwODUyIDg1MiBjc1BDcDg1MiB9CisgICAgeyBJQk04NTUgY3A4NTUgODU1IGNzSUJNODU1IH0KKyAgICB7IElCTTg1NyBjcDg1NyA4NTcgY3NJQk04NTcgfQorICAgIHsgSUJNODYwIGNwODYwIDg2MCBjc0lCTTg2MCB9CisgICAgeyBJQk04NjEgY3A4NjEgODYxIGNwLWlzIGNzSUJNODYxIH0KKyAgICB7IElCTTg2MiBjcDg2MiA4NjIgY3NQQzg2MkxhdGluSGVicmV3IH0KKyAgICB7IElCTTg2MyBjcDg2MyA4NjMgY3NJQk04NjMgfQorICAgIHsgSUJNODY0IGNwODY0IGNzSUJNODY0IH0KKyAgICB7IElCTTg2NSBjcDg2NSA4NjUgY3NJQk04NjUgfQorICAgIHsgSUJNODY2IGNwODY2IDg2NiBjc0lCTTg2NiB9CisgICAgeyBJQk04NjggQ1A4NjggY3AtYXIgY3NJQk04NjggfQorICAgIHsgSUJNODY5IGNwODY5IDg2OSBjcC1nciBjc0lCTTg2OSB9CisgICAgeyBJQk04NzAgQ1A4NzAgZWJjZGljLWNwLXJvZWNlIGViY2RpYy1jcC15dSBjc0lCTTg3MCB9CisgICAgeyBJQk04NzEgQ1A4NzEgZWJjZGljLWNwLWlzIGNzSUJNODcxIH0KKyAgICB7IElCTTg4MCBjcDg4MCBFQkNESUMtQ3lyaWxsaWMgY3NJQk04ODAgfQorICAgIHsgSUJNODkxIGNwODkxIGNzSUJNODkxIH0KKyAgICB7IElCTTkwMyBjcDkwMyBjc0lCTTkwMyB9CisgICAgeyBJQk05MDQgY3A5MDQgOTA0IGNzSUJCTTkwNCB9CisgICAgeyBJQk05MDUgQ1A5MDUgZWJjZGljLWNwLXRyIGNzSUJNOTA1IH0KKyAgICB7IElCTTkxOCBDUDkxOCBlYmNkaWMtY3AtYXIyIGNzSUJNOTE4IH0KKyAgICB7IElCTTEwMjYgQ1AxMDI2IGNzSUJNMTAyNiB9CisgICAgeyBFQkNESUMtQVQtREUgY3NJQk1FQkNESUNBVERFIH0KKyAgICB7IEVCQ0RJQy1BVC1ERS1BIGNzRUJDRElDQVRERUEgfQorICAgIHsgRUJDRElDLUNBLUZSIGNzRUJDRElDQ0FGUiB9CisgICAgeyBFQkNESUMtREstTk8gY3NFQkNESUNES05PIH0KKyAgICB7IEVCQ0RJQy1ESy1OTy1BIGNzRUJDRElDREtOT0EgfQorICAgIHsgRUJDRElDLUZJLVNFIGNzRUJDRElDRklTRSB9CisgICAgeyBFQkNESUMtRkktU0UtQSBjc0VCQ0RJQ0ZJU0VBIH0KKyAgICB7IEVCQ0RJQy1GUiBjc0VCQ0RJQ0ZSIH0KKyAgICB7IEVCQ0RJQy1JVCBjc0VCQ0RJQ0lUIH0KKyAgICB7IEVCQ0RJQy1QVCBjc0VCQ0RJQ1BUIH0KKyAgICB7IEVCQ0RJQy1FUyBjc0VCQ0RJQ0VTIH0KKyAgICB7IEVCQ0RJQy1FUy1BIGNzRUJDRElDRVNBIH0KKyAgICB7IEVCQ0RJQy1FUy1TIGNzRUJDRElDRVNTIH0KKyAgICB7IEVCQ0RJQy1VSyBjc0VCQ0RJQ1VLIH0KKyAgICB7IEVCQ0RJQy1VUyBjc0VCQ0RJQ1VTIH0KKyAgICB7IFVOS05PV04tOEJJVCBjc1Vua25vd244QmlUIH0KKyAgICB7IE1ORU1PTklDIGNzTW5lbW9uaWMgfQorICAgIHsgTU5FTSBjc01uZW0gfQorICAgIHsgVklTQ0lJIGNzVklTQ0lJIH0KKyAgICB7IFZJUVIgY3NWSVFSIH0KKyAgICB7IEtPSTgtUiBjc0tPSThSIH0KKyAgICB7IElCTTAwODU4IENDU0lEMDA4NTggQ1AwMDg1OCBQQy1NdWx0aWxpbmd1YWwtODUwK2V1cm8gfQorICAgIHsgSUJNMDA5MjQgQ0NTSUQwMDkyNCBDUDAwOTI0IGViY2RpYy1MYXRpbjktLWV1cm8gfQorICAgIHsgSUJNMDExNDAgQ0NTSUQwMTE0MCBDUDAxMTQwIGViY2RpYy11cy0zNytldXJvIH0KKyAgICB7IElCTTAxMTQxIENDU0lEMDExNDEgQ1AwMTE0MSBlYmNkaWMtZGUtMjczK2V1cm8gfQorICAgIHsgSUJNMDExNDIgQ0NTSUQwMTE0MiBDUDAxMTQyIGViY2RpYy1kay0yNzcrZXVybyBlYmNkaWMtbm8tMjc3K2V1cm8gfQorICAgIHsgSUJNMDExNDMgQ0NTSUQwMTE0MyBDUDAxMTQzIGViY2RpYy1maS0yNzgrZXVybyBlYmNkaWMtc2UtMjc4K2V1cm8gfQorICAgIHsgSUJNMDExNDQgQ0NTSUQwMTE0NCBDUDAxMTQ0IGViY2RpYy1pdC0yODArZXVybyB9CisgICAgeyBJQk0wMTE0NSBDQ1NJRDAxMTQ1IENQMDExNDUgZWJjZGljLWVzLTI4NCtldXJvIH0KKyAgICB7IElCTTAxMTQ2IENDU0lEMDExNDYgQ1AwMTE0NiBlYmNkaWMtZ2ItMjg1K2V1cm8gfQorICAgIHsgSUJNMDExNDcgQ0NTSUQwMTE0NyBDUDAxMTQ3IGViY2RpYy1mci0yOTcrZXVybyB9CisgICAgeyBJQk0wMTE0OCBDQ1NJRDAxMTQ4IENQMDExNDggZWJjZGljLWludGVybmF0aW9uYWwtNTAwK2V1cm8gfQorICAgIHsgSUJNMDExNDkgQ0NTSUQwMTE0OSBDUDAxMTQ5IGViY2RpYy1pcy04NzErZXVybyB9CisgICAgeyBJQk0xMDQ3IElCTS0xMDQ3IH0KKyAgICB7IFBUQ1AxNTQgY3NQVENQMTU0IFBUMTU0IENQMTU0IEN5cmlsbGljLUFzaWFuIH0KKyAgICB7IEFtaWdhLTEyNTEgQW1pMTI1MSBBbWlnYTEyNTEgQW1pLTEyNTEgfQorICAgIHsgVU5JQ09ERS0xLTEgY3NVbmljb2RlMTEgfQorICAgIHsgQ0VTVS04IGNzQ0VTVS04IH0KKyAgICB7IEJPQ1UtMSBjc0JPQ1UtMSB9CisgICAgeyBVTklDT0RFLTEtMS1VVEYtNyBjc1VuaWNvZGUxMVVURjcgfQorICAgIHsgSVNPLTg4NTktMTQgaXNvLWlyLTE5OSBJU09fODg1OS0xNDoxOTk4IElTT184ODU5LTE0IGxhdGluOCBpc28tY2VsdGljCisgICAgICBsOCB9CisgICAgeyBJU08tODg1OS0xNSBJU09fODg1OS0xNSBMYXRpbi05IH0KKyAgICB7IElTTy04ODU5LTE2IGlzby1pci0yMjYgSVNPXzg4NTktMTY6MjAwMSBJU09fODg1OS0xNiBsYXRpbjEwIGwxMCB9CisgICAgeyBHQksgQ1A5MzYgTVM5MzYgd2luZG93cy05MzYgfQorICAgIHsgSklTX0VuY29kaW5nIGNzSklTRW5jb2RpbmcgfQorICAgIHsgU2hpZnRfSklTIE1TX0thbmppIGNzU2hpZnRKSVMgU2hpZnRKSVMgU2hpZnQtSklTIH0KKyAgICB7IEV4dGVuZGVkX1VOSVhfQ29kZV9QYWNrZWRfRm9ybWF0X2Zvcl9KYXBhbmVzZSBjc0VVQ1BrZEZtdEphcGFuZXNlCisgICAgICBFVUMtSlAgfQorICAgIHsgRXh0ZW5kZWRfVU5JWF9Db2RlX0ZpeGVkX1dpZHRoX2Zvcl9KYXBhbmVzZSBjc0VVQ0ZpeFdpZEphcGFuZXNlIH0KKyAgICB7IElTTy0xMDY0Ni1VQ1MtQmFzaWMgY3NVbmljb2RlQVNDSUkgfQorICAgIHsgSVNPLTEwNjQ2LVVuaWNvZGUtTGF0aW4xIGNzVW5pY29kZUxhdGluMSBJU08tMTA2NDYgfQorICAgIHsgSVNPLVVuaWNvZGUtSUJNLTEyNjEgY3NVbmljb2RlSUJNMTI2MSB9CisgICAgeyBJU08tVW5pY29kZS1JQk0tMTI2OCBjc1VuaWNvZGVJQk0xMjY4IH0KKyAgICB7IElTTy1Vbmljb2RlLUlCTS0xMjc2IGNzVW5pY29kZUlCTTEyNzYgfQorICAgIHsgSVNPLVVuaWNvZGUtSUJNLTEyNjQgY3NVbmljb2RlSUJNMTI2NCB9CisgICAgeyBJU08tVW5pY29kZS1JQk0tMTI2NSBjc1VuaWNvZGVJQk0xMjY1IH0KKyAgICB7IElTTy04ODU5LTEtV2luZG93cy0zLjAtTGF0aW4tMSBjc1dpbmRvd3MzMExhdGluMSB9CisgICAgeyBJU08tODg1OS0xLVdpbmRvd3MtMy4xLUxhdGluLTEgY3NXaW5kb3dzMzFMYXRpbjEgfQorICAgIHsgSVNPLTg4NTktMi1XaW5kb3dzLUxhdGluLTIgY3NXaW5kb3dzMzFMYXRpbjIgfQorICAgIHsgSVNPLTg4NTktOS1XaW5kb3dzLUxhdGluLTUgY3NXaW5kb3dzMzFMYXRpbjUgfQorICAgIHsgQWRvYmUtU3RhbmRhcmQtRW5jb2RpbmcgY3NBZG9iZVN0YW5kYXJkRW5jb2RpbmcgfQorICAgIHsgVmVudHVyYS1VUyBjc1ZlbnR1cmFVUyB9CisgICAgeyBWZW50dXJhLUludGVybmF0aW9uYWwgY3NWZW50dXJhSW50ZXJuYXRpb25hbCB9CisgICAgeyBQQzgtRGFuaXNoLU5vcndlZ2lhbiBjc1BDOERhbmlzaE5vcndlZ2lhbiB9CisgICAgeyBQQzgtVHVya2lzaCBjc1BDOFR1cmtpc2ggfQorICAgIHsgSUJNLVN5bWJvbHMgY3NJQk1TeW1ib2xzIH0KKyAgICB7IElCTS1UaGFpIGNzSUJNVGhhaSB9CisgICAgeyBIUC1MZWdhbCBjc0hQTGVnYWwgfQorICAgIHsgSFAtUGktZm9udCBjc0hQUGlGb250IH0KKyAgICB7IEhQLU1hdGg4IGNzSFBNYXRoOCB9CisgICAgeyBBZG9iZS1TeW1ib2wtRW5jb2RpbmcgY3NIUFBTTWF0aCB9CisgICAgeyBIUC1EZXNrVG9wIGNzSFBEZXNrdG9wIH0KKyAgICB7IFZlbnR1cmEtTWF0aCBjc1ZlbnR1cmFNYXRoIH0KKyAgICB7IE1pY3Jvc29mdC1QdWJsaXNoaW5nIGNzTWljcm9zb2Z0UHVibGlzaGluZyB9CisgICAgeyBXaW5kb3dzLTMxSiBjc1dpbmRvd3MzMUogfQorICAgIHsgR0IyMzEyIGNzR0IyMzEyIH0KKyAgICB7IEJpZzUgY3NCaWc1IH0KK30KKworc2V0IGVuY29kaW5nX2dyb3VwcyB7CisgICAgeyIiICIiCisJeyJVbmljb2RlIiBVVEYtOH0KKwl7Ildlc3Rlcm4iIElTTy04ODU5LTF9fQorICAgIHt3ZSAiV2VzdCBFdXJvcGVhbiIKKwl7Ildlc3Rlcm4iIElTTy04ODU5LTE1IENQLTQzNyBDUC04NTAgTWFjUm9tYW4gQ1AtMTI1MiBXaW5kb3dzLTEyNTJ9CisJeyJDZWx0aWMiIElTTy04ODU5LTE0fQorCXsiR3JlZWsiIElTTy04ODU5LTE0IElTTy04ODU5LTcgQ1AtNzM3IENQLTg2OSBNYWNHcmVlayBDUC0xMjUzIFdpbmRvd3MtMTI1M30KKwl7IkljZWxhbmRpYyIgTWFjSWNlbGFuZCBNYWNJY2VsYW5kaWMgQ1AtODYxfQorCXsiTm9yZGljIiBJU08tODg1OS0xMCBDUC04NjV9CisJeyJQb3J0dWd1ZXNlIiBDUC04NjB9CisJeyJTb3V0aCBFdXJvcGVhbiIgSVNPLTg4NTktM319CisgICAge2VlICJFYXN0IEV1cm9wZWFuIgorCXsiQmFsdGljIiBDUC03NzUgSVNPLTg4NTktNCBJU08tODg1OS0xMyBDUC0xMjU3IFdpbmRvd3MtMTI1N30KKwl7IkNlbnRyYWwgRXVyb3BlYW4iIENQLTg1MiBJU08tODg1OS0yIE1hY0NFIENQLTEyNTAgV2luZG93cy0xMjUwfQorCXsiQ3JvYXRpYW4iIE1hY0Nyb2F0aWFufQorCXsiQ3lyaWxsaWMiIENQLTg1NSBJU08tODg1OS01IElTTy1JUi0xMTEgS09JOC1SIE1hY0N5cmlsbGljIENQLTEyNTEgV2luZG93cy0xMjUxfQorCXsiUnVzc2lhbiIgQ1AtODY2fQorCXsiVWtyYWluaWFuIiBLT0k4LVUgTWFjVWtyYWluZSBNYWNVa3JhaW5pYW59CisJeyJSb21hbmlhbiIgSVNPLTg4NTktMTYgTWFjUm9tYW5pYSBNYWNSb21hbmlhbn19CisgICAge2VhICJFYXN0IEFzaWFuIgorCXsiR2VuZXJpYyIgSVNPLTIwMjJ9CisJeyJDaGluZXNlIFNpbXBsaWZpZWQiIEdCMjMxMiBHQjE5ODggR0IxMjM0NSBHQjIzMTItUkFXIEdCSyBFVUMtQ04gR0IxODAzMCBIWiBJU08tMjAyMi1DTn0KKwl7IkNoaW5lc2UgVHJhZGl0aW9uYWwiIEJpZzUgQmlnNS1IS1NDUyBFVUMtVFcgQ1AtOTUwfQorCXsiSmFwYW5lc2UiIEVVQy1KUCBJU08tMjAyMi1KUCBTaGlmdC1KSVMgSklTLTAyMTIgSklTLTAyMDggSklTLTAyMDEgQ1AtOTMyIE1hY0phcGFufQorCXsiS29yZWFuIiBFVUMtS1IgVUhDIEpPSEFCIElTTy0yMDIyLUtSIENQLTk0OSBLU0M1NjAxfX0KKyAgICB7c2EgIlNFICYgU1cgQXNpYW4iCisJeyJBcm1lbmlhbiIgQVJNU0NJSS04fQorCXsiR2VvcmdpYW4iIEdFT1NURDh9CisJeyJUaGFpIiBUSVMtNjIwIElTTy04ODU5LTExIENQLTg3NCBXaW5kb3dzLTg3NCBNYWNUaGFpfQorCXsiVHVya2lzaCIgQ1AtODU3IENQODU3IElTTy04ODU5LTkgTWFjVHVya2lzaCBDUC0xMjU0IFdpbmRvd3MtMTI1NH0KKwl7IlZpZXRuYW1lc2UiIFRDVk4gVklTQ0lJIFZQUyBDUC0xMjU4IFdpbmRvd3MtMTI1OH0KKwl7IkhpbmRpIiBNYWNEZXZhbmFnYXJpfQorCXsiR3VqYXJhdGkiIE1hY0d1amFyYXRpfQorCXsiR3VybXVraGkiIE1hY0d1cm11a2hpfX0KKyAgICB7bWUgIk1pZGRsZSBFYXN0ZXJuIgorCXsiQXJhYmljIiBJU08tODg1OS02IFdpbmRvd3MtMTI1NiBDUC0xMjU2IENQLTg2NCBNYWNBcmFiaWN9CisJeyJGYXJzaSIgTWFjRmFyc2l9CisJeyJIZWJyZXciIElTTy04ODU5LTgtSSBXaW5kb3dzLTEyNTUgQ1AtMTI1NSBJU08tODg1OS04IENQLTg2MiBNYWNIZWJyZXd9fQorICAgIHttaSAiTWlzYyIKKwl7IjctYml0IiBBU0NJSX0KKwl7IjE2LWJpdCIgVW5pY29kZX0KKwl7IkxlZ2FjeSIgQ1AtODYzIEVCQ0RJQ30KKwl7IlN5bWJvbCIgU3ltYm9sIERpbmdiYXRzIE1hY0RpbmdiYXRzIE1hY0NlbnRFdXJvfX0KK30KKworcHJvYyBidWlsZF9lbmNvZGluZ190YWJsZSB7fSB7CisJZ2xvYmFsIGVuY29kaW5nX2FsaWFzZXMgZW5jb2RpbmdfbG9va3VwX3RhYmxlCisKKwkjIFByZXBhcmUgdGhlIGxvb2t1cCBsaXN0OyBjYW5ub3QgdXNlIGxzb3J0IC1ub2Nhc2UgYmVjYXVzZQorCSMgb2YgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBvbGRlciBUY2wgKGUuZy4gaW4gbXN5c2dpdCkKKwlzZXQgbmFtZXMgW2xpc3RdCisJZm9yZWFjaCBpdGVtIFtlbmNvZGluZyBuYW1lc10geworCQlsYXBwZW5kIG5hbWVzIFtsaXN0IFtzdHJpbmcgdG9sb3dlciAkaXRlbV0gJGl0ZW1dCisJfQorCXNldCBuYW1lcyBbbHNvcnQgLWFzY2lpIC1pbmRleCAwICRuYW1lc10KKwkjIG5laXRoZXIgY2FuIHdlIHVzZSBsc2VhcmNoIC1pbmRleAorCXNldCBsbmFtZXMgW2xpc3RdCisJZm9yZWFjaCBpdGVtICRuYW1lcyB7CisJCWxhcHBlbmQgbG5hbWVzIFtsaW5kZXggJGl0ZW0gMF0KKwl9CisKKwlmb3JlYWNoIGdycCAkZW5jb2RpbmdfYWxpYXNlcyB7CisJCXNldCB0YXJnZXQge30KKwkJZm9yZWFjaCBpdGVtICRncnAgeworCQkJc2V0IGkgW2xzZWFyY2ggLXNvcnRlZCAtYXNjaWkgJGxuYW1lcyBcCisJCQkJCVtzdHJpbmcgdG9sb3dlciAkaXRlbV1dCisJCQlpZiB7JGkgPj0gMH0geworCQkJCXNldCB0YXJnZXQgW2xpbmRleCAkbmFtZXMgJGkgMV0KKwkJCQlicmVhaworCQkJfQorCQl9CisJCWlmIHskdGFyZ2V0IGVxIHt9fSBjb250aW51ZQorCQlmb3JlYWNoIGl0ZW0gJGdycCB7CisJCQlzZXQgZW5jb2RpbmdfbG9va3VwX3RhYmxlKFtzdHJpbmcgdG9sb3dlciAkaXRlbV0pICR0YXJnZXQKKwkJfQorCX0KKworCWZvcmVhY2ggaXRlbSAkbmFtZXMgeworCQlzZXQgZW5jb2RpbmdfbG9va3VwX3RhYmxlKFtsaW5kZXggJGl0ZW0gMF0pIFtsaW5kZXggJGl0ZW0gMV0KKwl9Cit9CisKK3Byb2MgdGNsX2VuY29kaW5nIHtlbmN9IHsKKwlnbG9iYWwgZW5jb2RpbmdfbG9va3VwX3RhYmxlCisJaWYgeyRlbmMgZXEge319IHsKKwkJcmV0dXJuIHt9CisJfQorCWlmIHshW2luZm8gZXhpc3RzIGVuY29kaW5nX2xvb2t1cF90YWJsZV19IHsKKwkJYnVpbGRfZW5jb2RpbmdfdGFibGUKKwl9CisJc2V0IGVuYyBbc3RyaW5nIHRvbG93ZXIgJGVuY10KKwlpZiB7IVtpbmZvIGV4aXN0cyBlbmNvZGluZ19sb29rdXBfdGFibGUoJGVuYyldfSB7CisJCSMgbG9vayBmb3IgImlzb25ubiIgaW5zdGVhZCBvZiAiaXNvLW5ubiIgb3IgImlzb19ubm4iCisJCWlmIHtbcmVnc3ViIHteKGlzb3xjcHxpYm18amlzKVstX119ICRlbmMge1wxfSBlbmN4XX0geworCQkJc2V0IGVuYyAkZW5jeAorCQl9CisJfQorCWlmIHtbaW5mbyBleGlzdHMgZW5jb2RpbmdfbG9va3VwX3RhYmxlKCRlbmMpXX0geworCQlyZXR1cm4gJGVuY29kaW5nX2xvb2t1cF90YWJsZSgkZW5jKQorCX0gZWxzZSB7CisJCXJldHVybiB7fQorCX0KK30KKworcHJvYyBmb3JjZV9wYXRoX2VuY29kaW5nIHtwYXRoIGVuY30geworCWdsb2JhbCBwYXRoX2VuY29kaW5nX292ZXJyaWRlcyBsYXN0X2VuY29kaW5nX292ZXJyaWRlCisKKwlzZXQgZW5jIFt0Y2xfZW5jb2RpbmcgJGVuY10KKwlpZiB7JGVuYyBlcSB7fX0geworCQljYXRjaCB7IHVuc2V0IGxhc3RfZW5jb2Rpbmdfb3ZlcnJpZGUgfQorCQljYXRjaCB7IHVuc2V0IHBhdGhfZW5jb2Rpbmdfb3ZlcnJpZGVzKCRwYXRoKSB9CisJfSBlbHNlIHsKKwkJc2V0IGxhc3RfZW5jb2Rpbmdfb3ZlcnJpZGUgJGVuYworCQlpZiB7JHBhdGggbmUge319IHsKKwkJCXNldCBwYXRoX2VuY29kaW5nX292ZXJyaWRlcygkcGF0aCkgJGVuYworCQl9CisJfQorfQorCitwcm9jIGdldF9wYXRoX2VuY29kaW5nIHtwYXRofSB7CisJZ2xvYmFsIHBhdGhfZW5jb2Rpbmdfb3ZlcnJpZGVzIGxhc3RfZW5jb2Rpbmdfb3ZlcnJpZGUKKworCWlmIHtbaW5mbyBleGlzdHMgbGFzdF9lbmNvZGluZ19vdmVycmlkZV19IHsKKwkJc2V0IHRjbF9lbmMgJGxhc3RfZW5jb2Rpbmdfb3ZlcnJpZGUKKwl9IGVsc2UgeworCQlzZXQgdGNsX2VuYyBbdGNsX2VuY29kaW5nIFtnZXRfY29uZmlnIGd1aS5lbmNvZGluZ11dCisJfQorCWlmIHskdGNsX2VuYyBlcSB7fX0geworCQlzZXQgdGNsX2VuYyBbZW5jb2Rpbmcgc3lzdGVtXQorCX0KKwlpZiB7JHBhdGggbmUge319IHsKKwkJaWYge1tpbmZvIGV4aXN0cyBwYXRoX2VuY29kaW5nX292ZXJyaWRlcygkcGF0aCldfSB7CisJCQlzZXQgZW5jMiAkcGF0aF9lbmNvZGluZ19vdmVycmlkZXMoJHBhdGgpCisJCX0gZWxzZSB7CisJCQlzZXQgZW5jMiBbdGNsX2VuY29kaW5nIFtnaXRhdHRyICRwYXRoIGVuY29kaW5nICR0Y2xfZW5jXV0KKwkJfQorCQlpZiB7JGVuYzIgbmUge319IHsKKwkJCXNldCB0Y2xfZW5jICRlbmMyCisJCX0KKwl9CisJcmV0dXJuICR0Y2xfZW5jCit9CisKK3Byb2MgYnVpbGRfZW5jb2Rpbmdfc3VibWVudSB7cGFyZW50IGdycCBjbWR9IHsKKwlnbG9iYWwgdXNlZF9lbmNvZGluZ3MKKworCXNldCBtaWQgW2xpbmRleCAkZ3JwIDBdCisJc2V0IGduYW1lIFttYyBbbGluZGV4ICRncnAgMV1dCisKKwlzZXQgc21lbnUge30KKwlmb3JlYWNoIHN1YnNldCBbbHJhbmdlICRncnAgMiBlbmRdIHsKKwkJc2V0IG5hbWUgW21jIFtsaW5kZXggJHN1YnNldCAwXV0KKworCQlmb3JlYWNoIGVuYyBbbHJhbmdlICRzdWJzZXQgMSBlbmRdIHsKKwkJCXNldCB0Y2xfZW5jIFt0Y2xfZW5jb2RpbmcgJGVuY10KKwkJCWlmIHskdGNsX2VuYyBlcSB7fX0gY29udGludWUKKworCQkJaWYgeyRzbWVudSBlcSB7fX0geworCQkJCWlmIHskbWlkIGVxIHt9fSB7CisJCQkJCXNldCBzbWVudSAkcGFyZW50CisJCQkJfSBlbHNlIHsKKwkJCQkJc2V0IHNtZW51ICIkcGFyZW50LiRtaWQiCisJCQkJCW1lbnUgJHNtZW51CisJCQkJCSRwYXJlbnQgYWRkIGNhc2NhZGUgXAorCQkJCQkJLWxhYmVsICRnbmFtZSBcCisJCQkJCQktbWVudSAkc21lbnUKKwkJCQl9CisJCQl9CisKKwkJCWlmIHskbmFtZSBuZSB7fX0geworCQkJCXNldCBsYmwgIiRuYW1lICgkZW5jKSIKKwkJCX0gZWxzZSB7CisJCQkJc2V0IGxibCAkZW5jCisJCQl9CisJCQkkc21lbnUgYWRkIGNvbW1hbmQgXAorCQkJCS1sYWJlbCAkbGJsIFwKKwkJCQktY29tbWFuZCBbY29uY2F0ICRjbWQgW2xpc3QgJHRjbF9lbmNdXQorCisJCQlsYXBwZW5kIHVzZWRfZW5jb2RpbmdzICR0Y2xfZW5jCisJCX0KKwl9Cit9CisKK3Byb2MgcG9wdXBfYnRuX21lbnUge20gYn0geworCXRrX3BvcHVwICRtIFt3aW5mbyBwb2ludGVyeCAkYl0gW3dpbmZvIHBvaW50ZXJ5ICRiXQorfQorCitwcm9jIGJ1aWxkX2VuY29kaW5nX21lbnUge2VtZW51IGNtZCB7bm9kZWYgMH19IHsKKwkkZW1lbnUgY29uZmlndXJlIC1wb3N0Y29tbWFuZCBcCisJCVtsaXN0IGRvX2J1aWxkX2VuY29kaW5nX21lbnUgJGVtZW51ICRjbWQgJG5vZGVmXQorfQorCitwcm9jIGRvX2J1aWxkX2VuY29kaW5nX21lbnUge2VtZW51IGNtZCB7bm9kZWYgMH19IHsKKwlnbG9iYWwgdXNlZF9lbmNvZGluZ3MgZW5jb2RpbmdfZ3JvdXBzCisKKwkkZW1lbnUgY29uZmlndXJlIC1wb3N0Y29tbWFuZCB7fQorCisJaWYgeyEkbm9kZWZ9IHsKKwkJJGVtZW51IGFkZCBjb21tYW5kIFwKKwkJCS1sYWJlbCBbbWMgIkRlZmF1bHQiXSBcCisJCQktY29tbWFuZCBbY29uY2F0ICRjbWQgW2xpc3Qge31dXQorCX0KKwlzZXQgc3lzZW5jIFtlbmNvZGluZyBzeXN0ZW1dCisJJGVtZW51IGFkZCBjb21tYW5kIFwKKwkJLWxhYmVsIFttYyAiU3lzdGVtICglcykiICRzeXNlbmNdIFwKKwkJLWNvbW1hbmQgW2NvbmNhdCAkY21kIFtsaXN0ICRzeXNlbmNdXQorCisJIyBNYWluIGVuY29kaW5nIHRyZWUKKwlzZXQgdXNlZF9lbmNvZGluZ3MgW2xpc3QgaWRlbnRpdHldCisJJGVtZW51IGFkZCBzZXBhcmF0b3IKKwlmb3JlYWNoIGdycCAkZW5jb2RpbmdfZ3JvdXBzIHsKKwkJYnVpbGRfZW5jb2Rpbmdfc3VibWVudSAkZW1lbnUgJGdycCAkY21kCisJfQorCisJIyBBZGQgdW5jbGFzc2lmaWVkIGVuY29kaW5ncworCXNldCB1bnVzZWRfZ3JwIFtsaXN0IFttYyBPdGhlcl1dCisJZm9yZWFjaCBlbmMgW2VuY29kaW5nIG5hbWVzXSB7CisJCWlmIHtbbHNlYXJjaCAtZXhhY3QgJHVzZWRfZW5jb2RpbmdzICRlbmNdIDwgMH0geworCQkJbGFwcGVuZCB1bnVzZWRfZ3JwICRlbmMKKwkJfQorCX0KKwlidWlsZF9lbmNvZGluZ19zdWJtZW51ICRlbWVudSBbbGlzdCBvdGhlciBbbWMgT3RoZXJdICR1bnVzZWRfZ3JwXSAkY21kCit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9lcnJvci50Y2wgYi9naXQtZ3VpL2xpYi9lcnJvci50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBmYTY5YQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL2Vycm9yLnRjbApAQCAtMCwwICsxLDExOSBAQAorIyBnaXQtZ3VpIGJyYW5jaCAoY3JlYXRlL2RlbGV0ZSkgc3VwcG9ydAorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2hhd24gUGVhcmNlCisKK3Byb2MgX2Vycm9yX3BhcmVudCB7fSB7CisJc2V0IHAgW2dyYWIgY3VycmVudCAuXQorCWlmIHskcCBlcSB7fX0geworCQlyZXR1cm4gLgorCX0KKwlyZXR1cm4gJHAKK30KKworcHJvYyBlcnJvcl9wb3B1cCB7bXNnfSB7CisJc2V0IHRpdGxlIFthcHBuYW1lXQorCWlmIHtbcmVwb25hbWVdIG5lIHt9fSB7CisJCWFwcGVuZCB0aXRsZSAiIChbcmVwb25hbWVdKSIKKwl9CisJc2V0IGNtZCBbbGlzdCB0a19tZXNzYWdlQm94IFwKKwkJLWljb24gZXJyb3IgXAorCQktdHlwZSBvayBcCisJCS10aXRsZSBbYXBwZW5kICIkdGl0bGU6ICIgW21jICJlcnJvciJdXSBcCisJCS1tZXNzYWdlICRtc2ddCisJaWYge1t3aW5mbyBpc21hcHBlZCBbX2Vycm9yX3BhcmVudF1dfSB7CisJCWxhcHBlbmQgY21kIC1wYXJlbnQgW19lcnJvcl9wYXJlbnRdCisJfQorCWV2YWwgJGNtZAorfQorCitwcm9jIHdhcm5fcG9wdXAge21zZ30geworCXNldCB0aXRsZSBbYXBwbmFtZV0KKwlpZiB7W3JlcG9uYW1lXSBuZSB7fX0geworCQlhcHBlbmQgdGl0bGUgIiAoW3JlcG9uYW1lXSkiCisJfQorCXNldCBjbWQgW2xpc3QgdGtfbWVzc2FnZUJveCBcCisJCS1pY29uIHdhcm5pbmcgXAorCQktdHlwZSBvayBcCisJCS10aXRsZSBbYXBwZW5kICIkdGl0bGU6ICIgW21jICJ3YXJuaW5nIl1dIFwKKwkJLW1lc3NhZ2UgJG1zZ10KKwlpZiB7W3dpbmZvIGlzbWFwcGVkIFtfZXJyb3JfcGFyZW50XV19IHsKKwkJbGFwcGVuZCBjbWQgLXBhcmVudCBbX2Vycm9yX3BhcmVudF0KKwl9CisJZXZhbCAkY21kCit9CisKK3Byb2MgaW5mb19wb3B1cCB7bXNnfSB7CisJc2V0IHRpdGxlIFthcHBuYW1lXQorCWlmIHtbcmVwb25hbWVdIG5lIHt9fSB7CisJCWFwcGVuZCB0aXRsZSAiIChbcmVwb25hbWVdKSIKKwl9CisJdGtfbWVzc2FnZUJveCBcCisJCS1wYXJlbnQgW19lcnJvcl9wYXJlbnRdIFwKKwkJLWljb24gaW5mbyBcCisJCS10eXBlIG9rIFwKKwkJLXRpdGxlICR0aXRsZSBcCisJCS1tZXNzYWdlICRtc2cKK30KKworcHJvYyBhc2tfcG9wdXAge21zZ30geworCXNldCB0aXRsZSBbYXBwbmFtZV0KKwlpZiB7W3JlcG9uYW1lXSBuZSB7fX0geworCQlhcHBlbmQgdGl0bGUgIiAoW3JlcG9uYW1lXSkiCisJfQorCXNldCBjbWQgW2xpc3QgdGtfbWVzc2FnZUJveCBcCisJCS1pY29uIHF1ZXN0aW9uIFwKKwkJLXR5cGUgeWVzbm8gXAorCQktdGl0bGUgJHRpdGxlIFwKKwkJLW1lc3NhZ2UgJG1zZ10KKwlpZiB7W3dpbmZvIGlzbWFwcGVkIFtfZXJyb3JfcGFyZW50XV19IHsKKwkJbGFwcGVuZCBjbWQgLXBhcmVudCBbX2Vycm9yX3BhcmVudF0KKwl9CisJZXZhbCAkY21kCit9CisKK3Byb2MgaG9va19mYWlsZWRfcG9wdXAge2hvb2sgbXNnIHtpc19mYXRhbCAxfX0geworCWdsb2JhbCB1c2VfdHRrIE5TCisJc2V0IHcgLmhvb2tmYWlsCisJRGlhbG9nICR3CisJd20gd2l0aGRyYXcgJHcKKworCSR7TlN9OjpmcmFtZSAkdy5tCisJJHtOU306OmxhYmVsICR3Lm0ubDEgLXRleHQgIiRob29rIGhvb2sgZmFpbGVkOiIgXAorCQktYW5jaG9yIHcgXAorCQktanVzdGlmeSBsZWZ0IFwKKwkJLWZvbnQgZm9udF91aWJvbGQKKwl0ZXh0ICR3Lm0udCBcCisJCS1iYWNrZ3JvdW5kIHdoaXRlIFwKKwkJLWZvcmVncm91bmQgYmxhY2sgXAorCQktYm9yZGVyd2lkdGggMSBcCisJCS1yZWxpZWYgc3Vua2VuIFwKKwkJLXdpZHRoIDgwIC1oZWlnaHQgMTAgXAorCQktZm9udCBmb250X2RpZmYgXAorCQkteXNjcm9sbGNvbW1hbmQgW2xpc3QgJHcubS5zYnkgc2V0XQorCSR7TlN9OjpzY3JvbGxiYXIgJHcubS5zYnkgLWNvbW1hbmQgW2xpc3QgJHcubS50IHl2aWV3XQorCXBhY2sgJHcubS5sMSAtc2lkZSB0b3AgLWZpbGwgeAorCWlmIHskaXNfZmF0YWx9IHsKKwkJJHtOU306OmxhYmVsICR3Lm0ubDIgXAorCQkJLXRleHQgW21jICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIl0gXAorCQkJLWFuY2hvciB3IFwKKwkJCS1qdXN0aWZ5IGxlZnQgXAorCQkJLWZvbnQgZm9udF91aWJvbGQKKwkJcGFjayAkdy5tLmwyIC1zaWRlIGJvdHRvbSAtZmlsbCB4CisJfQorCXBhY2sgJHcubS5zYnkgLXNpZGUgcmlnaHQgLWZpbGwgeQorCXBhY2sgJHcubS50IC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtZXhwYW5kIDEKKwlwYWNrICR3Lm0gLXNpZGUgdG9wIC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR4IDUgLXBhZHkgMTAKKworCSR3Lm0udCBpbnNlcnQgMS4wICRtc2cKKwkkdy5tLnQgY29uZiAtc3RhdGUgZGlzYWJsZWQKKworCSR7TlN9OjpidXR0b24gJHcub2sgLXRleHQgT0sgXAorCQktd2lkdGggMTUgXAorCQktY29tbWFuZCAiZGVzdHJveSAkdyIKKwlwYWNrICR3Lm9rIC1zaWRlIGJvdHRvbSAtYW5jaG9yIGUgLXBhZHkgMTAgLXBhZHggMTAKKworCWJpbmQgJHcgPFZpc2liaWxpdHk+ICJncmFiICR3OyBmb2N1cyAkdyIKKwliaW5kICR3IDxLZXktUmV0dXJuPiAiZGVzdHJveSAkdyIKKwl3bSB0aXRsZSAkdyBbc3RyY2F0ICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiZXJyb3IiXV0KKwl3bSBkZWljb25pZnkgJHcKKwl0a3dhaXQgd2luZG93ICR3Cit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9naXQtZ3VpLmljbyBiL2dpdC1ndWkvbGliL2dpdC1ndWkuaWNvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNGNmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi9naXQtZ3VpLmljbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9pbmRleC50Y2wgYi9naXQtZ3VpL2xpYi9pbmRleC50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRhODFhNwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL2luZGV4LnRjbApAQCAtMCwwICsxLDQ4NCBAQAorIyBnaXQtZ3VpIGluZGV4IChhZGQvcmVtb3ZlKSBzdXBwb3J0CisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTaGF3biBQZWFyY2UKKworcHJvYyBfZGVsZXRlX2luZGV4bG9jayB7fSB7CisJaWYge1tjYXRjaCB7ZmlsZSBkZWxldGUgLS0gW2dpdGRpciBpbmRleC5sb2NrXX0gZXJyXX0geworCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIl0gIlxuXG4kZXJyIl0KKwl9Cit9CisKK3Byb2MgX2Nsb3NlX3VwZGF0ZWluZGV4IHtmZCBhZnRlcn0geworCWdsb2JhbCB1c2VfdHRrIE5TCisJZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDEKKwlpZiB7W2NhdGNoIHtjbG9zZSAkZmR9IGVycl19IHsKKwkJc2V0IHcgLmluZGV4ZnJpZWQKKwkJRGlhbG9nICR3CisJCXdtIHdpdGhkcmF3ICR3CisJCXdtIHRpdGxlICR3IFtzdHJjYXQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJJbmRleCBFcnJvciJdXQorCQl3bSBnZW9tZXRyeSAkdyAiK1t3aW5mbyByb290eCAuXStbd2luZm8gcm9vdHkgLl0iCisJCXNldCBzIFttYyAiVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byByZXN5bmNocm9uaXplIGdpdC1ndWkuIl0KKwkJdGV4dCAkdy5tc2cgLXlzY3JvbGxjb21tYW5kIFtsaXN0ICR3LnZzIHNldF0gXAorCQkJLXdpZHRoIFtzdHJpbmcgbGVuZ3RoICRzXSAtcmVsaWVmIGZsYXQgXAorCQkJLWJvcmRlcndpZHRoIDAgLWhpZ2hsaWdodHRoaWNrbmVzcyAwIFwKKwkJCS1iYWNrZ3JvdW5kIFtnZXRfYmdfY29sb3IgJHddCisJCSR3Lm1zZyB0YWcgY29uZmlndXJlIGJvbGQgLWZvbnQgZm9udF91aWJvbGQgLWp1c3RpZnkgY2VudGVyCisJCSR7TlN9OjpzY3JvbGxiYXIgJHcudnMgLWNvbW1hbmQgW2xpc3QgJHcubXNnIHl2aWV3XQorCQkkdy5tc2cgaW5zZXJ0IGVuZCAkcyBib2xkIFxuXG4kZXJyIHt9CisJCSR3Lm1zZyBjb25maWd1cmUgLXN0YXRlIGRpc2FibGVkCisKKwkJJHtOU306OmJ1dHRvbiAkdy5jb250aW51ZSBcCisJCQktdGV4dCBbbWMgIkNvbnRpbnVlIl0gXAorCQkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KKwkJJHtOU306OmJ1dHRvbiAkdy51bmxvY2sgXAorCQkJLXRleHQgW21jICJVbmxvY2sgSW5kZXgiXSBcCisJCQktY29tbWFuZCAiZGVzdHJveSAkdzsgX2RlbGV0ZV9pbmRleGxvY2siCisJCWdyaWQgJHcubXNnIC0gJHcudnMgLXN0aWNreSBuZXdzCisJCWdyaWQgJHcudW5sb2NrICR3LmNvbnRpbnVlIC0gLXN0aWNreSBzZSAtcGFkeCAyIC1wYWR5IDIKKwkJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHcgMCAtd2VpZ2h0IDEKKwkJZ3JpZCByb3djb25maWd1cmUgJHcgMCAtd2VpZ2h0IDEKKworCQl3bSBwcm90b2NvbCAkdyBXTV9ERUxFVEVfV0lORE9XIHVwZGF0ZQorCQliaW5kICR3LmNvbnRpbnVlIDxWaXNpYmlsaXR5PiAiCisJCQlncmFiICR3CisJCQlmb2N1cyAlVworCQkiCisJCXdtIGRlaWNvbmlmeSAkdworCQl0a3dhaXQgd2luZG93ICR3CisKKwkJJDo6bWFpbl9zdGF0dXMgc3RvcAorCQl1bmxvY2tfaW5kZXgKKwkJcmVzY2FuICRhZnRlciAwCisJCXJldHVybgorCX0KKworCSQ6Om1haW5fc3RhdHVzIHN0b3AKKwl1bmxvY2tfaW5kZXgKKwl1cGxldmVsICMwICRhZnRlcgorfQorCitwcm9jIHVwZGF0ZV9pbmRleGluZm8ge21zZyBwYXRoTGlzdCBhZnRlcn0geworCWdsb2JhbCB1cGRhdGVfaW5kZXhfY3AKKworCWlmIHshW2xvY2tfaW5kZXggdXBkYXRlXX0gcmV0dXJuCisKKwlzZXQgdXBkYXRlX2luZGV4X2NwIDAKKwlzZXQgcGF0aExpc3QgW2xzb3J0ICRwYXRoTGlzdF0KKwlzZXQgdG90YWxDbnQgW2xsZW5ndGggJHBhdGhMaXN0XQorCXNldCBiYXRjaCBbZXhwciB7aW50KCR0b3RhbENudCAqIC4wMSkgKyAxfV0KKwlpZiB7JGJhdGNoID4gMjV9IHtzZXQgYmF0Y2ggMjV9CisKKwkkOjptYWluX3N0YXR1cyBzdGFydCAkbXNnIFttYyAiZmlsZXMiXQorCXNldCBmZCBbZ2l0X3dyaXRlIHVwZGF0ZS1pbmRleCAteiAtLWluZGV4LWluZm9dCisJZmNvbmZpZ3VyZSAkZmQgXAorCQktYmxvY2tpbmcgMCBcCisJCS1idWZmZXJpbmcgZnVsbCBcCisJCS1idWZmZXJzaXplIDUxMiBcCisJCS1lbmNvZGluZyBiaW5hcnkgXAorCQktdHJhbnNsYXRpb24gYmluYXJ5CisJZmlsZWV2ZW50ICRmZCB3cml0YWJsZSBbbGlzdCBcCisJCXdyaXRlX3VwZGF0ZV9pbmRleGluZm8gXAorCQkkZmQgXAorCQkkcGF0aExpc3QgXAorCQkkdG90YWxDbnQgXAorCQkkYmF0Y2ggXAorCQkkYWZ0ZXIgXAorCQldCit9CisKK3Byb2Mgd3JpdGVfdXBkYXRlX2luZGV4aW5mbyB7ZmQgcGF0aExpc3QgdG90YWxDbnQgYmF0Y2ggYWZ0ZXJ9IHsKKwlnbG9iYWwgdXBkYXRlX2luZGV4X2NwCisJZ2xvYmFsIGZpbGVfc3RhdGVzIGN1cnJlbnRfZGlmZl9wYXRoCisKKwlpZiB7JHVwZGF0ZV9pbmRleF9jcCA+PSAkdG90YWxDbnR9IHsKKwkJX2Nsb3NlX3VwZGF0ZWluZGV4ICRmZCAkYWZ0ZXIKKwkJcmV0dXJuCisJfQorCisJZm9yIHtzZXQgaSAkYmF0Y2h9IFwKKwkJeyR1cGRhdGVfaW5kZXhfY3AgPCAkdG90YWxDbnQgJiYgJGkgPiAwfSBcCisJCXtpbmNyIGkgLTF9IHsKKwkJc2V0IHBhdGggW2xpbmRleCAkcGF0aExpc3QgJHVwZGF0ZV9pbmRleF9jcF0KKwkJaW5jciB1cGRhdGVfaW5kZXhfY3AKKworCQlzZXQgcyAkZmlsZV9zdGF0ZXMoJHBhdGgpCisJCXN3aXRjaCAtZ2xvYiAtLSBbbGluZGV4ICRzIDBdIHsKKwkJQT8ge3NldCBuZXcgX099CisJCU1UIC0KKwkJVE0gLQorCQlUXyB7c2V0IG5ldyBfVH0KKwkJTT8ge3NldCBuZXcgX019CisJCVREIC0KKwkJRF8ge3NldCBuZXcgX0R9CisJCUQ/IHtzZXQgbmV3IF8/fQorCQk/PyB7Y29udGludWV9CisJCX0KKwkJc2V0IGluZm8gW2xpbmRleCAkcyAyXQorCQlpZiB7JGluZm8gZXEge319IGNvbnRpbnVlCisKKwkJcHV0cyAtbm9uZXdsaW5lICRmZCAiJGluZm9cdFtlbmNvZGluZyBjb252ZXJ0dG8gJHBhdGhdXDAiCisJCWRpc3BsYXlfZmlsZSAkcGF0aCAkbmV3CisJfQorCisJJDo6bWFpbl9zdGF0dXMgdXBkYXRlICR1cGRhdGVfaW5kZXhfY3AgJHRvdGFsQ250Cit9CisKK3Byb2MgdXBkYXRlX2luZGV4IHttc2cgcGF0aExpc3QgYWZ0ZXJ9IHsKKwlnbG9iYWwgdXBkYXRlX2luZGV4X2NwCisKKwlpZiB7IVtsb2NrX2luZGV4IHVwZGF0ZV19IHJldHVybgorCisJc2V0IHVwZGF0ZV9pbmRleF9jcCAwCisJc2V0IHBhdGhMaXN0IFtsc29ydCAkcGF0aExpc3RdCisJc2V0IHRvdGFsQ250IFtsbGVuZ3RoICRwYXRoTGlzdF0KKwlzZXQgYmF0Y2ggW2V4cHIge2ludCgkdG90YWxDbnQgKiAuMDEpICsgMX1dCisJaWYgeyRiYXRjaCA+IDI1fSB7c2V0IGJhdGNoIDI1fQorCisJJDo6bWFpbl9zdGF0dXMgc3RhcnQgJG1zZyBbbWMgImZpbGVzIl0KKwlzZXQgZmQgW2dpdF93cml0ZSB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgLXogLS1zdGRpbl0KKwlmY29uZmlndXJlICRmZCBcCisJCS1ibG9ja2luZyAwIFwKKwkJLWJ1ZmZlcmluZyBmdWxsIFwKKwkJLWJ1ZmZlcnNpemUgNTEyIFwKKwkJLWVuY29kaW5nIGJpbmFyeSBcCisJCS10cmFuc2xhdGlvbiBiaW5hcnkKKwlmaWxlZXZlbnQgJGZkIHdyaXRhYmxlIFtsaXN0IFwKKwkJd3JpdGVfdXBkYXRlX2luZGV4IFwKKwkJJGZkIFwKKwkJJHBhdGhMaXN0IFwKKwkJJHRvdGFsQ250IFwKKwkJJGJhdGNoIFwKKwkJJGFmdGVyIFwKKwkJXQorfQorCitwcm9jIHdyaXRlX3VwZGF0ZV9pbmRleCB7ZmQgcGF0aExpc3QgdG90YWxDbnQgYmF0Y2ggYWZ0ZXJ9IHsKKwlnbG9iYWwgdXBkYXRlX2luZGV4X2NwCisJZ2xvYmFsIGZpbGVfc3RhdGVzIGN1cnJlbnRfZGlmZl9wYXRoCisKKwlpZiB7JHVwZGF0ZV9pbmRleF9jcCA+PSAkdG90YWxDbnR9IHsKKwkJX2Nsb3NlX3VwZGF0ZWluZGV4ICRmZCAkYWZ0ZXIKKwkJcmV0dXJuCisJfQorCisJZm9yIHtzZXQgaSAkYmF0Y2h9IFwKKwkJeyR1cGRhdGVfaW5kZXhfY3AgPCAkdG90YWxDbnQgJiYgJGkgPiAwfSBcCisJCXtpbmNyIGkgLTF9IHsKKwkJc2V0IHBhdGggW2xpbmRleCAkcGF0aExpc3QgJHVwZGF0ZV9pbmRleF9jcF0KKwkJaW5jciB1cGRhdGVfaW5kZXhfY3AKKworCQlzd2l0Y2ggLWdsb2IgLS0gW2xpbmRleCAkZmlsZV9zdGF0ZXMoJHBhdGgpIDBdIHsKKwkJQUQge3NldCBuZXcgX199CisJCT9EIHtzZXQgbmV3IERffQorCQlfTyAtCisJCUFUIC0KKwkJQU0ge3NldCBuZXcgQV99CisJCVRNIC0KKwkJTVQgLQorCQlfVCB7c2V0IG5ldyBUX30KKwkJX1UgLQorCQlVPyB7CisJCQlpZiB7W2ZpbGUgZXhpc3RzICRwYXRoXX0geworCQkJCXNldCBuZXcgTV8KKwkJCX0gZWxzZSB7CisJCQkJc2V0IG5ldyBEXworCQkJfQorCQl9CisJCT9NIHtzZXQgbmV3IE1ffQorCQk/PyB7Y29udGludWV9CisJCX0KKwkJcHV0cyAtbm9uZXdsaW5lICRmZCAiW2VuY29kaW5nIGNvbnZlcnR0byAkcGF0aF1cMCIKKwkJZGlzcGxheV9maWxlICRwYXRoICRuZXcKKwl9CisKKwkkOjptYWluX3N0YXR1cyB1cGRhdGUgJHVwZGF0ZV9pbmRleF9jcCAkdG90YWxDbnQKK30KKworcHJvYyBjaGVja291dF9pbmRleCB7bXNnIHBhdGhMaXN0IGFmdGVyfSB7CisJZ2xvYmFsIHVwZGF0ZV9pbmRleF9jcAorCisJaWYgeyFbbG9ja19pbmRleCB1cGRhdGVdfSByZXR1cm4KKworCXNldCB1cGRhdGVfaW5kZXhfY3AgMAorCXNldCBwYXRoTGlzdCBbbHNvcnQgJHBhdGhMaXN0XQorCXNldCB0b3RhbENudCBbbGxlbmd0aCAkcGF0aExpc3RdCisJc2V0IGJhdGNoIFtleHByIHtpbnQoJHRvdGFsQ250ICogLjAxKSArIDF9XQorCWlmIHskYmF0Y2ggPiAyNX0ge3NldCBiYXRjaCAyNX0KKworCSQ6Om1haW5fc3RhdHVzIHN0YXJ0ICRtc2cgW21jICJmaWxlcyJdCisJc2V0IGZkIFtnaXRfd3JpdGUgY2hlY2tvdXQtaW5kZXggXAorCQktLWluZGV4IFwKKwkJLS1xdWlldCBcCisJCS0tZm9yY2UgXAorCQkteiBcCisJCS0tc3RkaW4gXAorCQldCisJZmNvbmZpZ3VyZSAkZmQgXAorCQktYmxvY2tpbmcgMCBcCisJCS1idWZmZXJpbmcgZnVsbCBcCisJCS1idWZmZXJzaXplIDUxMiBcCisJCS1lbmNvZGluZyBiaW5hcnkgXAorCQktdHJhbnNsYXRpb24gYmluYXJ5CisJZmlsZWV2ZW50ICRmZCB3cml0YWJsZSBbbGlzdCBcCisJCXdyaXRlX2NoZWNrb3V0X2luZGV4IFwKKwkJJGZkIFwKKwkJJHBhdGhMaXN0IFwKKwkJJHRvdGFsQ250IFwKKwkJJGJhdGNoIFwKKwkJJGFmdGVyIFwKKwkJXQorfQorCitwcm9jIHdyaXRlX2NoZWNrb3V0X2luZGV4IHtmZCBwYXRoTGlzdCB0b3RhbENudCBiYXRjaCBhZnRlcn0geworCWdsb2JhbCB1cGRhdGVfaW5kZXhfY3AKKwlnbG9iYWwgZmlsZV9zdGF0ZXMgY3VycmVudF9kaWZmX3BhdGgKKworCWlmIHskdXBkYXRlX2luZGV4X2NwID49ICR0b3RhbENudH0geworCQlfY2xvc2VfdXBkYXRlaW5kZXggJGZkICRhZnRlcgorCQlyZXR1cm4KKwl9CisKKwlmb3Ige3NldCBpICRiYXRjaH0gXAorCQl7JHVwZGF0ZV9pbmRleF9jcCA8ICR0b3RhbENudCAmJiAkaSA+IDB9IFwKKwkJe2luY3IgaSAtMX0geworCQlzZXQgcGF0aCBbbGluZGV4ICRwYXRoTGlzdCAkdXBkYXRlX2luZGV4X2NwXQorCQlpbmNyIHVwZGF0ZV9pbmRleF9jcAorCQlzd2l0Y2ggLWdsb2IgLS0gW2xpbmRleCAkZmlsZV9zdGF0ZXMoJHBhdGgpIDBdIHsKKwkJVT8ge2NvbnRpbnVlfQorCQk/TSAtCisJCT9UIC0KKwkJP0QgeworCQkJcHV0cyAtbm9uZXdsaW5lICRmZCAiW2VuY29kaW5nIGNvbnZlcnR0byAkcGF0aF1cMCIKKwkJCWRpc3BsYXlfZmlsZSAkcGF0aCA/XworCQl9CisJCX0KKwl9CisKKwkkOjptYWluX3N0YXR1cyB1cGRhdGUgJHVwZGF0ZV9pbmRleF9jcCAkdG90YWxDbnQKK30KKworcHJvYyB1bnN0YWdlX2hlbHBlciB7dHh0IHBhdGhzfSB7CisJZ2xvYmFsIGZpbGVfc3RhdGVzIGN1cnJlbnRfZGlmZl9wYXRoCisKKwlpZiB7IVtsb2NrX2luZGV4IGJlZ2luLXVwZGF0ZV19IHJldHVybgorCisJc2V0IHBhdGhMaXN0IFtsaXN0XQorCXNldCBhZnRlciB7fQorCWZvcmVhY2ggcGF0aCAkcGF0aHMgeworCQlzd2l0Y2ggLWdsb2IgLS0gW2xpbmRleCAkZmlsZV9zdGF0ZXMoJHBhdGgpIDBdIHsKKwkJQT8gLQorCQlNPyAtCisJCVQ/IC0KKwkJRD8geworCQkJbGFwcGVuZCBwYXRoTGlzdCAkcGF0aAorCQkJaWYgeyRwYXRoIGVxICRjdXJyZW50X2RpZmZfcGF0aH0geworCQkJCXNldCBhZnRlciB7cmVzaG93X2RpZmY7fQorCQkJfQorCQl9CisJCX0KKwl9CisJaWYgeyRwYXRoTGlzdCBlcSB7fX0geworCQl1bmxvY2tfaW5kZXgKKwl9IGVsc2UgeworCQl1cGRhdGVfaW5kZXhpbmZvIFwKKwkJCSR0eHQgXAorCQkJJHBhdGhMaXN0IFwKKwkJCVtjb25jYXQgJGFmdGVyIFtsaXN0IHVpX3JlYWR5XV0KKwl9Cit9CisKK3Byb2MgZG9fdW5zdGFnZV9zZWxlY3Rpb24ge30geworCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aCBzZWxlY3RlZF9wYXRocworCisJaWYge1thcnJheSBzaXplIHNlbGVjdGVkX3BhdGhzXSA+IDB9IHsKKwkJdW5zdGFnZV9oZWxwZXIgXAorCQkJe1Vuc3RhZ2luZyBzZWxlY3RlZCBmaWxlcyBmcm9tIGNvbW1pdH0gXAorCQkJW2FycmF5IG5hbWVzIHNlbGVjdGVkX3BhdGhzXQorCX0gZWxzZWlmIHskY3VycmVudF9kaWZmX3BhdGggbmUge319IHsKKwkJdW5zdGFnZV9oZWxwZXIgXAorCQkJW21jICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiIFtzaG9ydF9wYXRoICRjdXJyZW50X2RpZmZfcGF0aF1dIFwKKwkJCVtsaXN0ICRjdXJyZW50X2RpZmZfcGF0aF0KKwl9Cit9CisKK3Byb2MgYWRkX2hlbHBlciB7dHh0IHBhdGhzfSB7CisJZ2xvYmFsIGZpbGVfc3RhdGVzIGN1cnJlbnRfZGlmZl9wYXRoCisKKwlpZiB7IVtsb2NrX2luZGV4IGJlZ2luLXVwZGF0ZV19IHJldHVybgorCisJc2V0IHBhdGhMaXN0IFtsaXN0XQorCXNldCBhZnRlciB7fQorCWZvcmVhY2ggcGF0aCAkcGF0aHMgeworCQlzd2l0Y2ggLWdsb2IgLS0gW2xpbmRleCAkZmlsZV9zdGF0ZXMoJHBhdGgpIDBdIHsKKwkJX1UgLQorCQlVPyB7CisJCQlpZiB7JHBhdGggZXEgJGN1cnJlbnRfZGlmZl9wYXRofSB7CisJCQkJdW5sb2NrX2luZGV4CisJCQkJbWVyZ2Vfc3RhZ2Vfd29ya2RpciAkcGF0aAorCQkJCXJldHVybgorCQkJfQorCQl9CisJCV9PIC0KKwkJP00gLQorCQk/RCAtCisJCT9UIHsKKwkJCWxhcHBlbmQgcGF0aExpc3QgJHBhdGgKKwkJCWlmIHskcGF0aCBlcSAkY3VycmVudF9kaWZmX3BhdGh9IHsKKwkJCQlzZXQgYWZ0ZXIge3Jlc2hvd19kaWZmO30KKwkJCX0KKwkJfQorCQl9CisJfQorCWlmIHskcGF0aExpc3QgZXEge319IHsKKwkJdW5sb2NrX2luZGV4CisJfSBlbHNlIHsKKwkJdXBkYXRlX2luZGV4IFwKKwkJCSR0eHQgXAorCQkJJHBhdGhMaXN0IFwKKwkJCVtjb25jYXQgJGFmdGVyIHt1aV9zdGF0dXMgW21jICJSZWFkeSB0byBjb21taXQuIl19XQorCX0KK30KKworcHJvYyBkb19hZGRfc2VsZWN0aW9uIHt9IHsKKwlnbG9iYWwgY3VycmVudF9kaWZmX3BhdGggc2VsZWN0ZWRfcGF0aHMKKworCWlmIHtbYXJyYXkgc2l6ZSBzZWxlY3RlZF9wYXRoc10gPiAwfSB7CisJCWFkZF9oZWxwZXIgXAorCQkJe0FkZGluZyBzZWxlY3RlZCBmaWxlc30gXAorCQkJW2FycmF5IG5hbWVzIHNlbGVjdGVkX3BhdGhzXQorCX0gZWxzZWlmIHskY3VycmVudF9kaWZmX3BhdGggbmUge319IHsKKwkJYWRkX2hlbHBlciBcCisJCQlbbWMgIkFkZGluZyAlcyIgW3Nob3J0X3BhdGggJGN1cnJlbnRfZGlmZl9wYXRoXV0gXAorCQkJW2xpc3QgJGN1cnJlbnRfZGlmZl9wYXRoXQorCX0KK30KKworcHJvYyBkb19hZGRfYWxsIHt9IHsKKwlnbG9iYWwgZmlsZV9zdGF0ZXMKKworCXNldCBwYXRocyBbbGlzdF0KKwlzZXQgdW50cmFja2VkX3BhdGhzIFtsaXN0XQorCWZvcmVhY2ggcGF0aCBbYXJyYXkgbmFtZXMgZmlsZV9zdGF0ZXNdIHsKKwkJc3dpdGNoIC1nbG9iIC0tIFtsaW5kZXggJGZpbGVfc3RhdGVzKCRwYXRoKSAwXSB7CisJCVU/IHtjb250aW51ZX0KKwkJP00gLQorCQk/VCAtCisJCT9EIHtsYXBwZW5kIHBhdGhzICRwYXRofQorCQk/TyB7bGFwcGVuZCB1bnRyYWNrZWRfcGF0aHMgJHBhdGh9CisJCX0KKwl9CisJaWYge1tsbGVuZ3RoICR1bnRyYWNrZWRfcGF0aHNdfSB7CisJCXNldCByZXBseSAwCisJCXN3aXRjaCAtLSBbZ2V0X2NvbmZpZyBndWkuc3RhZ2V1bnRyYWNrZWRdIHsKKwkJbm8geworCQkJc2V0IHJlcGx5IDAKKwkJfQorCQl5ZXMgeworCQkJc2V0IHJlcGx5IDEKKwkJfQorCQlhc2sgLQorCQlkZWZhdWx0IHsKKwkJCXNldCByZXBseSBbYXNrX3BvcHVwIFttYyAiU3RhZ2UgJWQgdW50cmFja2VkIGZpbGVzPyIgXAorCQkJCQkJCQkJICBbbGxlbmd0aCAkdW50cmFja2VkX3BhdGhzXV1dCisJCX0KKwkJfQorCQlpZiB7JHJlcGx5fSB7CisJCQlzZXQgcGF0aHMgW2NvbmNhdCAkcGF0aHMgJHVudHJhY2tlZF9wYXRoc10KKwkJfQorCX0KKwlhZGRfaGVscGVyIHtBZGRpbmcgYWxsIGNoYW5nZWQgZmlsZXN9ICRwYXRocworfQorCitwcm9jIHJldmVydF9oZWxwZXIge3R4dCBwYXRoc30geworCWdsb2JhbCBmaWxlX3N0YXRlcyBjdXJyZW50X2RpZmZfcGF0aAorCisJaWYgeyFbbG9ja19pbmRleCBiZWdpbi11cGRhdGVdfSByZXR1cm4KKworCXNldCBwYXRoTGlzdCBbbGlzdF0KKwlzZXQgYWZ0ZXIge30KKwlmb3JlYWNoIHBhdGggJHBhdGhzIHsKKwkJc3dpdGNoIC1nbG9iIC0tIFtsaW5kZXggJGZpbGVfc3RhdGVzKCRwYXRoKSAwXSB7CisJCVU/IHtjb250aW51ZX0KKwkJP00gLQorCQk/VCAtCisJCT9EIHsKKwkJCWxhcHBlbmQgcGF0aExpc3QgJHBhdGgKKwkJCWlmIHskcGF0aCBlcSAkY3VycmVudF9kaWZmX3BhdGh9IHsKKwkJCQlzZXQgYWZ0ZXIge3Jlc2hvd19kaWZmO30KKwkJCX0KKwkJfQorCQl9CisJfQorCisKKwkjIFNwbGl0IHF1ZXN0aW9uIGJldHdlZW4gc2luZ3VsYXIgYW5kIHBsdXJhbCBjYXNlcywgYmVjYXVzZQorCSMgc3VjaCBkaXN0aW5jdGlvbiBpcyBuZWVkZWQgaW4gc29tZSBsYW5ndWFnZXMuIFByZXZpb3VzbHksIHRoZQorCSMgY29kZSB1c2VkICJSZXZlcnQgY2hhbmdlcyBpbiIgZm9yIGJvdGgsIGJ1dCB0aGF0IGNhbid0IHdvcmsKKwkjIGluIGxhbmd1YWdlcyB3aGVyZSAnaW4nIG11c3QgYmUgY29tYmluZWQgd2l0aCB3b3JkIGZyb20KKwkjIHJlc3Qgb2Ygc3RyaW5nIChpbiBkaWZmZXJlbnQgd2F5IGZvciBib3RoIGNhc2VzIG9mIGNvdXJzZSkuCisJIworCSMgRklYTUU6IFVuZm9ydHVuYXRlbHksIGV2ZW4gdGhhdCBpc24ndCBlbm91Z2ggaW4gc29tZSBsYW5ndWFnZXMKKwkjIGFzIHRoZXkgaGF2ZSBxdWl0ZSBjb21wbGV4IHBsdXJhbC1mb3JtIHJ1bGVzLiBVbmZvcnR1bmF0ZWx5LAorCSMgbXNnY2F0IGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHRoYXQga2luZCBvZiBzdHJpbmcgdHJhbnNsYXRpb24uCisJIworCXNldCBuIFtsbGVuZ3RoICRwYXRoTGlzdF0KKwlpZiB7JG4gPT0gMH0geworCQl1bmxvY2tfaW5kZXgKKwkJcmV0dXJuCisJfSBlbHNlaWYgeyRuID09IDF9IHsKKwkJc2V0IHF1ZXJ5IFttYyAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iIFtzaG9ydF9wYXRoIFtsaW5kZXggJHBhdGhMaXN0XV1dCisJfSBlbHNlIHsKKwkJc2V0IHF1ZXJ5IFttYyAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IiAkbl0KKwl9CisKKwlzZXQgcmVwbHkgW3RrX2RpYWxvZyBcCisJCS5jb25maXJtX3JldmVydCBcCisJCSJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pIiBcCisJCSIkcXVlcnkKKworW21jICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iXSIgXAorCQlxdWVzdGlvbiBcCisJCTEgXAorCQlbbWMgIkRvIE5vdGhpbmciXSBcCisJCVttYyAiUmV2ZXJ0IENoYW5nZXMiXSBcCisJCV0KKwlpZiB7JHJlcGx5ID09IDF9IHsKKwkJY2hlY2tvdXRfaW5kZXggXAorCQkJJHR4dCBcCisJCQkkcGF0aExpc3QgXAorCQkJW2NvbmNhdCAkYWZ0ZXIgW2xpc3QgdWlfcmVhZHldXQorCX0gZWxzZSB7CisJCXVubG9ja19pbmRleAorCX0KK30KKworcHJvYyBkb19yZXZlcnRfc2VsZWN0aW9uIHt9IHsKKwlnbG9iYWwgY3VycmVudF9kaWZmX3BhdGggc2VsZWN0ZWRfcGF0aHMKKworCWlmIHtbYXJyYXkgc2l6ZSBzZWxlY3RlZF9wYXRoc10gPiAwfSB7CisJCXJldmVydF9oZWxwZXIgXAorCQkJW21jICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiXSBcCisJCQlbYXJyYXkgbmFtZXMgc2VsZWN0ZWRfcGF0aHNdCisJfSBlbHNlaWYgeyRjdXJyZW50X2RpZmZfcGF0aCBuZSB7fX0geworCQlyZXZlcnRfaGVscGVyIFwKKwkJCVttYyAiUmV2ZXJ0aW5nICVzIiBbc2hvcnRfcGF0aCAkY3VycmVudF9kaWZmX3BhdGhdXSBcCisJCQlbbGlzdCAkY3VycmVudF9kaWZmX3BhdGhdCisJfQorfQorCitwcm9jIGRvX3NlbGVjdF9jb21taXRfdHlwZSB7fSB7CisJZ2xvYmFsIGNvbW1pdF90eXBlIHNlbGVjdGVkX2NvbW1pdF90eXBlCisKKwlpZiB7JHNlbGVjdGVkX2NvbW1pdF90eXBlIGVxIHtuZXd9CisJCSYmIFtzdHJpbmcgbWF0Y2ggYW1lbmQqICRjb21taXRfdHlwZV19IHsKKwkJY3JlYXRlX25ld19jb21taXQKKwl9IGVsc2VpZiB7JHNlbGVjdGVkX2NvbW1pdF90eXBlIGVxIHthbWVuZH0KKwkJJiYgIVtzdHJpbmcgbWF0Y2ggYW1lbmQqICRjb21taXRfdHlwZV19IHsKKwkJbG9hZF9sYXN0X2NvbW1pdAorCisJCSMgVGhlIGFtZW5kIHJlcXVlc3Qgd2FzIHJlamVjdGVkLi4uCisJCSMKKwkJaWYgeyFbc3RyaW5nIG1hdGNoIGFtZW5kKiAkY29tbWl0X3R5cGVdfSB7CisJCQlzZXQgc2VsZWN0ZWRfY29tbWl0X3R5cGUgbmV3CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9saW5lLnRjbCBiL2dpdC1ndWkvbGliL2xpbmUudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMjZkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi9saW5lLnRjbApAQCAtMCwwICsxLDgxIEBACisjIGdvdG8gbGluZSBudW1iZXIKKyMgYmFzZWQgb24gY29kZSBmcm9tIGdpdGssIENvcHlyaWdodCAoQykgUGF1bCBNYWNrZXJyYXMKKworY2xhc3MgbGluZWJhciB7CisKK2ZpZWxkIHcKK2ZpZWxkIGN0ZXh0CisKK2ZpZWxkIGxpbmVudW0gICB7fQorCitjb25zdHJ1Y3RvciBuZXcge2lfdyBpX3RleHQgYXJnc30geworCWdsb2JhbCB1c2VfdHRrIE5TCisJc2V0IHcgICAgICAkaV93CisJc2V0IGN0ZXh0ICAkaV90ZXh0CisKKwkke05TfTo6ZnJhbWUgICR3CisJJHtOU306OmxhYmVsICAkdy5sICAgICAgIC10ZXh0IFttYyAiR290byBMaW5lOiJdCisJdGVudHJ5ICAkdy5lbnQgXAorCQktdGV4dHZhcmlhYmxlICR7X190aGlzfTo6bGluZW51bSBcCisJCS1iYWNrZ3JvdW5kIGxpZ2h0Z3JlZW4gXAorCQktdmFsaWRhdGUga2V5IFwKKwkJLXZhbGlkYXRlY29tbWFuZCBbY2IgX3ZhbGlkYXRlICVQXQorCSR7TlN9OjpidXR0b24gJHcuYm4gICAgICAtdGV4dCBbbWMgR29dIC1jb21tYW5kIFtjYiBfZ290b10KKworCXBhY2sgICAkdy5sICAgLXNpZGUgbGVmdAorCXBhY2sgICAkdy5ibiAgLXNpZGUgcmlnaHQKKwlwYWNrICAgJHcuZW50IC1zaWRlIGxlZnQgLWV4cGFuZCAxIC1maWxsIHgKKworCWV2YWwgZ3JpZCBjb25mICR3IC1zdGlja3kgd2UgJGFyZ3MKKwlncmlkIHJlbW92ZSAkdworCisJdHJhY2UgYWRkIHZhcmlhYmxlIGxpbmVudW0gd3JpdGUgW2NiIF9nb3RvX2NiXQorCWJpbmQgJHcuZW50IDxSZXR1cm4+IFtjYiBfZ290b10KKwliaW5kICR3LmVudCA8RXNjYXBlPiBbY2IgaGlkZV0KKworCWJpbmQgJHcgPERlc3Ryb3k+IFtsaXN0IGRlbGV0ZV90aGlzICR0aGlzXQorCXJldHVybiAkdGhpcworfQorCittZXRob2Qgc2hvdyB7fSB7CisJaWYgeyFbdmlzaWJsZSAkdGhpc119IHsKKwkJZ3JpZCAkdworCX0KKwlmb2N1cyAtZm9yY2UgJHcuZW50Cit9CisKK21ldGhvZCBoaWRlIHt9IHsKKwlpZiB7W3Zpc2libGUgJHRoaXNdfSB7CisJCSR3LmVudCBkZWxldGUgMCBlbmQKKwkJZm9jdXMgJGN0ZXh0CisJCWdyaWQgcmVtb3ZlICR3CisJfQorfQorCittZXRob2QgdmlzaWJsZSB7fSB7CisJcmV0dXJuIFt3aW5mbyBpc21hcHBlZCAkd10KK30KKworbWV0aG9kIGVkaXRvciB7fSB7CisJcmV0dXJuICR3LmVudAorfQorCittZXRob2QgX3ZhbGlkYXRlIHtQfSB7CisJIyBvbmx5IGFjY2VwdCBudW1iZXJzIGFzIGlucHV0CisJc3RyaW5nIGlzIGludGVnZXIgJFAKK30KKworbWV0aG9kIF9nb3RvX2NiIHtuYW1lIGl4IG9wfSB7CisJYWZ0ZXIgaWRsZSBbY2IgX2dvdG8gMV0KK30KKworbWV0aG9kIF9nb3RvIHt7bm9oaWRlIHswfX19IHsKKwlpZiB7JGxpbmVudW0gbmUge319IHsKKwkJJGN0ZXh0IHNlZSAkbGluZW51bS4wCisJCWlmIHshJG5vaGlkZX0geworCQkJaGlkZSAkdGhpcworCQl9CisJfQorfQorCit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9sb2dvLnRjbCBiL2dpdC1ndWkvbGliL2xvZ28udGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZjc2NjkKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi9sb2dvLnRjbApAQCAtMCwwICsxLDQzIEBACisjIGdpdC1ndWkgR2l0IEd1aSBsb2dvCisjIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UKKworIyBIZW5yaWsgTnloJ3MgYWx0ZXJuYXRpdmUgR2l0IGxvZ28sIGZyb20gaGlzIGJsb2cgcG9zdAorIyBodHRwOi8vaGVucmlrLm55aC5zZS8yMDA3LzA2L2FsdGVybmF0aXZlLWdpdC1sb2dvLWFuZC1mYXZpY29uCisjCitpbWFnZSBjcmVhdGUgcGhvdG8gOjpnaXRfbG9nb19kYXRhIC1kYXRhIHsKK1IwbEdPRGRoWVFDOEFJUWJBR1ptWnRnNExXOXZiM2w1ZVlLQ2dveU1qRUMvVE9KcFlaV1ZsWitmbjIvUGVLbXBxYkt5c3J5OHZNWEYKK3haL2ZwYy9QejdmbnZQWE55dG5aMmVMaTRzL3YwdmphMSt6czdPZjM2ZlgxOWYzejh2Ly8vLy8vLy8vLy8vLy8vLy8vL3l3QUFBQUEKK1lRQzhBQUFGL3VBbWptUnBubWlxcm16cnZxNGh6M1J0R3crczd6eDUvN2RjYjBoVUFZOHpZWEhKUkNLVnpHalBlWVJLcnk4cTBJcnQKK0dyVkJyM2dGRG8vUHByS05peDZyYSt5MjkwMkx5N0gwNUwyZGw5bjNVWDA0Z0dlQ2Y0UkZob2hpaW90ZGpZNVhrSkdCZlllVU9wT1kKK2laYWJsWG1YVVJnUHBLV21wNmlwcVlJS3FxNnZxUkVqRllLMXRyVUtzN2U3dkZxNUlyUzl3c00wdnh2QnhNbTh4c2pLenF5Nno5SjUKK3pOUFdhdFhYMms3WjI5NDMzZC9pTXVIajMrWG0yK2pwMSt2czArN3Z6L0h5eXZUMXhQZjR3dnI3eTlIK3BCa2JCYXNnTEZZR0U4YmEKK284blRsRTRPT1lHS0tKRk9LSW9wR21MTUFuSGpEbzBlV1lBTStXVWlTUmdqL2srZVNLbXlCTXVXSTE3QzNDQVRaczJXTjFYbVBMbVQKK1pNK1FQejBHM1ZpaHFOR2pTSk5Xd0RDenFkT25VS1B1MFNDaHF0V3JXTE5xM2NxMXE5ZXZZQ1ZZR0NFaGdObXphTk9xWGN1MnJkdTMKK2NPTUdPRUJXcnQyN2VQUENwU3Vpck42L2dBTzM1YnZCcitERGlQTVNOcHk0c1dPMml4OUxubXcyTXVYTGlTMWozZ3hZTStmUGR6MkQKK0h2MVdOT25UYWsyalhqMjNMdXZYbFYzRFpxMTZOdWphdGpuanpvMTVOMi9Ldm45TERpN2NNZkhpbWFVcVg4Njh1ZlBuMEtQUHBPQ0EKK0FRTVdDUUJvMzg2OXUvZnY0TU5yZDNEbFFvTUMzUWxrU0pGZHZQdjM4TFZEV0pMQkFZSHdFMUxFMzgrLysvVWhHVEFnZ0h2NW9kRGYKK2dmdjkvc2VEZ1BBVmVBS0NFTHFuSUF3VTNCZWZneVpFcU9GM0U3ckFRSDhZbHJEaGlOdDF1RUlHNklHb0g0a2ptcGpDQlJhcWFDQ0wKK0c3cDRBZ1VESWhnaUNUVFcyQUtPRWU0NFFvOGEya2hDQmdOb0tLUUlSRVpvcEFnWnhBamhraHMwQ2VHVEc3U241SXBXOXZla0F5UlMKKzJlV0JSbDZRNDRaaWpobGZBUWxRbWVLSWFhcnBIWnNNVEhBQkN4RFFHS2VjM0pIM1FwSXM3c25uZG42eUFLYWVYQTdhWnd1QUJwcG8KK2ZBd3MwR2lFaGFLUUo0MEYzRGtqZndWQzhDYUNBbENnQWdJa0pqRGZDZ2RpT01Hbi9RMnczZ2tadFBncUM2bWEwRUNFQ2FCd2E0UUUKK2FPcENyU1lBcWVNSnBFS1lxdzdBQm5zbWZ3UThhQ3dQeVNxTFlLVWIva3dBWWJQUXlvaUN0UWNPVU1LSEJ3cmdLN0xhb2dCdXVheEMKK09rUzBLRXdhMzdFaUxCdWZBTFB1d080SmgvSW53QWl4a2tuRXZTZTRDOStwM1BZM3JyM2xwbkR1Zmd1SWNDbXpSUUFjN0lIWUxoeGYKK3cvOG1uSUxBNzRsZzhjQVJhNHhDc1p4dXNNQ0JvbVpjY2dzZnYwZGV1aDJIdkxLaC9zTHMzaEpTdmlldUN3VXp2SUhONHRHWGMzaWgKK3Z0RHptajhmU05MUjhCV1FkSDlMSCtnMDBPRkYzZC9VQng0Y1VjdnVPYzIxZUZSaW91VitYdnZyMGREdmxYMjFSLzJ1elRSODlUcVUKK0wzKzVVb0JnQXh0UkhkNS9DSHBMa2QxM2k0RDJlM2hIUkxLTVkrOUhyME52eC9mcTNQdzU3Y25nNy9tOXdRVk9ibkl5aEFpUXdIRjgKKy90UVM4bkRnSTJ3T1llaDNDQXZodUlCSGlERWdxdmR0d3Vka2F6M0dCUEthVGNLdUdncUFKUk1abUs2aDFobmszbmNEY1V2aGdQRlMKK281QjQ3NlpLUWNFQ3pDTjRxZ21ZTjRsQW5jbXpjQUVFa2hKcCtRbGZreWhBQWR0Yk44SDY3RnZIUUFGNmI0ZzZ2OVVyeXFma0trQnUKK3YvMHByeEQvL2tSNjNZbnFCOEFlcWNkb0JSeFUvMXpBdXdSYWFYNHJlSjREU1NSQUhVaHdncmdxd2dVeDJCOTRFV0dESElTUEJ6VVkKK1FnU05jQW42SzZGNGZzY0RDdEJPaGRvUndQVzZrSUhEd1pBN3ZXb0RCRjQ0UWQvdElVQUVCQ0FDYkllRzRBWHhmbUZyUTRCNE9DWUUKK0pCRVFFTENobWdiQUFDSmlvajRKT0NLQ0NMQ0FCWjZFQWcxSUh3RGx5TFlBQjFnUkpoU1lnSFVRQUQ5V25ROStDV0JBQSt3a25UcEMKK0p3UUFPdz09Cit9CisKK3Byb2MgZ2l0X2xvZ28ge3d9IHsKKwlsYWJlbCAkdyBcCisJCS1ib3JkZXJ3aWR0aCAxIFwKKwkJLXJlbGllZiBzdW5rZW4gXAorCQktYmFja2dyb3VuZCB3aGl0ZSBcCisJCS1pbWFnZSA6OmdpdF9sb2dvX2RhdGEKKwlyZXR1cm4gJHcKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL21lcmdlLnRjbCBiL2dpdC1ndWkvbGliL21lcmdlLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjBkMzJmCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvbWVyZ2UudGNsCkBAIC0wLDAgKzEsMjc3IEBACisjIGdpdC1ndWkgYnJhbmNoIG1lcmdlIHN1cHBvcnQKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNoYXduIFBlYXJjZQorCitjbGFzcyBtZXJnZSB7CisKK2ZpZWxkIHcgICAgICAgICA7ICMgdG9wIGxldmVsIHdpbmRvdworZmllbGQgd19yZXYgICAgIDsgIyBtZWdhLXdpZGdldCB0byBwaWNrIHRoZSByZXZpc2lvbiB0byBtZXJnZQorCittZXRob2QgX2Nhbl9tZXJnZSB7fSB7CisJZ2xvYmFsIEhFQUQgY29tbWl0X3R5cGUgZmlsZV9zdGF0ZXMKKworCWlmIHtbc3RyaW5nIG1hdGNoIGFtZW5kKiAkY29tbWl0X3R5cGVdfSB7CisJCWluZm9fcG9wdXAgW21jICJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuCisKK1lvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuCisiXQorCQlyZXR1cm4gMAorCX0KKworCWlmIHtbY29tbWl0dGVyX2lkZW50XSBlcSB7fX0ge3JldHVybiAwfQorCWlmIHshW2xvY2tfaW5kZXggbWVyZ2VdfSB7cmV0dXJuIDB9CisKKwkjIC0tIE91ciBpbiBtZW1vcnkgc3RhdGUgc2hvdWxkIG1hdGNoIHRoZSByZXBvc2l0b3J5LgorCSMKKwlyZXBvc2l0b3J5X3N0YXRlIGN1clR5cGUgY3VySEVBRCBjdXJNRVJHRV9IRUFECisJaWYgeyRjb21taXRfdHlwZSBuZSAkY3VyVHlwZSB8fCAkSEVBRCBuZSAkY3VySEVBRH0geworCQlpbmZvX3BvcHVwIFttYyAiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuCisKK0Fub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSByZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC4KKworVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuCisiXQorCQl1bmxvY2tfaW5kZXgKKwkJcmVzY2FuIHVpX3JlYWR5CisJCXJldHVybiAwCisJfQorCisJZm9yZWFjaCBwYXRoIFthcnJheSBuYW1lcyBmaWxlX3N0YXRlc10geworCQlzd2l0Y2ggLWdsb2IgLS0gW2xpbmRleCAkZmlsZV9zdGF0ZXMoJHBhdGgpIDBdIHsKKwkJX08geworCQkJY29udGludWU7ICMgYW5kIHByYXkgaXQgd29ya3MhCisJCX0KKwkJX1UgLQorCQlVPyB7CisJCQllcnJvcl9wb3B1cCBbbWMgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuCisKK0ZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4KKworWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCBtZXJnZS4gIE9ubHkgdGhlbiBjYW4geW91IGJlZ2luIGFub3RoZXIgbWVyZ2UuCisiIFtzaG9ydF9wYXRoICRwYXRoXV0KKwkJCXVubG9ja19pbmRleAorCQkJcmV0dXJuIDAKKwkJfQorCQk/PyB7CisJCQllcnJvcl9wb3B1cCBbbWMgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS4KKworRmlsZSAlcyBpcyBtb2RpZmllZC4KKworWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyB3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuCisiIFtzaG9ydF9wYXRoICRwYXRoXV0KKwkJCXVubG9ja19pbmRleAorCQkJcmV0dXJuIDAKKwkJfQorCQl9CisJfQorCisJcmV0dXJuIDEKK30KKworbWV0aG9kIF9yZXYge30geworCWlmIHtbY2F0Y2ggeyR3X3JldiBjb21taXRfb3JfZGllfV19IHsKKwkJcmV0dXJuIHt9CisJfQorCXJldHVybiBbJHdfcmV2IGdldF0KK30KKworbWV0aG9kIF92aXN1YWxpemUge30geworCXNldCByZXYgW19yZXYgJHRoaXNdCisJaWYgeyRyZXYgbmUge319IHsKKwkJZG9fZ2l0ayBbbGlzdCAkcmV2IC0tbm90IEhFQURdCisJfQorfQorCittZXRob2QgX3N0YXJ0IHt9IHsKKwlnbG9iYWwgSEVBRCBjdXJyZW50X2JyYW5jaCByZW1vdGVfdXJsCisJZ2xvYmFsIF9sYXN0X21lcmdlZF9icmFuY2gKKworCXNldCBuYW1lIFtfcmV2ICR0aGlzXQorCWlmIHskbmFtZSBlcSB7fX0geworCQlyZXR1cm4KKwl9CisKKwlzZXQgc3BlYyBbJHdfcmV2IGdldF90cmFja2luZ19icmFuY2hdCisJc2V0IGNtaXQgWyR3X3JldiBnZXRfY29tbWl0XQorCisJc2V0IGZoIFtvcGVuIFtnaXRkaXIgRkVUQ0hfSEVBRF0gd10KKwlmY29uZmlndXJlICRmaCAtdHJhbnNsYXRpb24gbGYKKwlpZiB7JHNwZWMgZXEge319IHsKKwkJc2V0IHJlbW90ZSAuCisJCXNldCBicmFuY2ggJG5hbWUKKwkJc2V0IHN0aXRsZSAkYnJhbmNoCisJfSBlbHNlIHsKKwkJc2V0IHJlbW90ZSAkcmVtb3RlX3VybChbbGluZGV4ICRzcGVjIDFdKQorCQlpZiB7W3JlZ2V4cCB7XlteOkBdKkBbXjpdKjovfSAkcmVtb3RlXX0geworCQkJcmVnc3ViIHteW146QF0qQH0gJHJlbW90ZSB7fSByZW1vdGUKKwkJfQorCQlzZXQgYnJhbmNoIFtsaW5kZXggJHNwZWMgMl0KKwkJc2V0IHN0aXRsZSBbbWMgIiVzIG9mICVzIiAkYnJhbmNoICRyZW1vdGVdCisJfQorCXJlZ3N1YiBecmVmcy9oZWFkcy8gJGJyYW5jaCB7fSBicmFuY2gKKwlwdXRzICRmaCAiJGNtaXRcdFx0YnJhbmNoICckYnJhbmNoJyBvZiAkcmVtb3RlIgorCWNsb3NlICRmaAorCXNldCBfbGFzdF9tZXJnZWRfYnJhbmNoICRicmFuY2gKKworCXNldCBjbWQgW2xpc3QgZ2l0XQorCWxhcHBlbmQgY21kIG1lcmdlCisJbGFwcGVuZCBjbWQgLS1zdHJhdGVneT1yZWN1cnNpdmUKKwlsYXBwZW5kIGNtZCBbZ2l0IGZtdC1tZXJnZS1tc2cgPFtnaXRkaXIgRkVUQ0hfSEVBRF1dCisJbGFwcGVuZCBjbWQgSEVBRAorCWxhcHBlbmQgY21kICRuYW1lCisKKwl1aV9zdGF0dXMgW21jICJNZXJnaW5nICVzIGFuZCAlcy4uLiIgJGN1cnJlbnRfYnJhbmNoICRzdGl0bGVdCisJc2V0IGNvbnMgW2NvbnNvbGU6Om5ldyBbbWMgIk1lcmdlIl0gIm1lcmdlICRzdGl0bGUiXQorCWNvbnNvbGU6OmV4ZWMgJGNvbnMgJGNtZCBbY2IgX2ZpbmlzaCAkY29uc10KKworCXdtIHByb3RvY29sICR3IFdNX0RFTEVURV9XSU5ET1cge30KKwlkZXN0cm95ICR3Cit9CisKK21ldGhvZCBfZmluaXNoIHtjb25zIG9rfSB7CisJY29uc29sZTo6ZG9uZSAkY29ucyAkb2sKKwlpZiB7JG9rfSB7CisJCXNldCBtc2cgW21jICJNZXJnZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiJdCisJfSBlbHNlIHsKKwkJc2V0IG1zZyBbbWMgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIl0KKwl9CisJdW5sb2NrX2luZGV4CisJcmVzY2FuIFtsaXN0IHVpX3N0YXR1cyAkbXNnXQorCWRlbGV0ZV90aGlzCit9CisKK2NvbnN0cnVjdG9yIGRpYWxvZyB7fSB7CisJZ2xvYmFsIGN1cnJlbnRfYnJhbmNoCisJZ2xvYmFsIE0xQiB1c2VfdHRrIE5TCisKKwlpZiB7IVtfY2FuX21lcmdlICR0aGlzXX0geworCQlkZWxldGVfdGhpcworCQlyZXR1cm4KKwl9CisKKwltYWtlX2RpYWxvZyB0b3AgdworCXdtIHRpdGxlICR0b3AgW2FwcGVuZCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogIiBbbWMgIk1lcmdlIl1dCisJaWYgeyR0b3AgbmUgey59fSB7CisJCXdtIGdlb21ldHJ5ICR0b3AgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgorCX0KKworCXNldCBfc3RhcnQgW2NiIF9zdGFydF0KKworCSR7TlN9OjpsYWJlbCAkdy5oZWFkZXIgXAorCQktdGV4dCBbbWMgIk1lcmdlIEludG8gJXMiICRjdXJyZW50X2JyYW5jaF0gXAorCQktZm9udCBmb250X3VpYm9sZAorCXBhY2sgJHcuaGVhZGVyIC1zaWRlIHRvcCAtZmlsbCB4CisKKwkke05TfTo6ZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy52aXN1YWxpemUgXAorCQktdGV4dCBbbWMgVmlzdWFsaXplXSBcCisJCS1jb21tYW5kIFtjYiBfdmlzdWFsaXplXQorCXBhY2sgJHcuYnV0dG9ucy52aXN1YWxpemUgLXNpZGUgbGVmdAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5tZXJnZSBcCisJCS10ZXh0IFttYyBNZXJnZV0gXAorCQktY29tbWFuZCAkX3N0YXJ0CisJcGFjayAkdy5idXR0b25zLm1lcmdlIC1zaWRlIHJpZ2h0CisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCBcCisJCS10ZXh0IFttYyAiQ2FuY2VsIl0gXAorCQktY29tbWFuZCBbY2IgX2NhbmNlbF0KKwlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKKwlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKKworCXNldCB3X3JldiBbOjpjaG9vc2VfcmV2OjpuZXdfdW5tZXJnZWQgJHcucmV2IFttYyAiUmV2aXNpb24gVG8gTWVyZ2UiXV0KKwlwYWNrICR3LnJldiAtYW5jaG9yIG53IC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR5IDUgLXBhZHggNQorCisJYmluZCAkdyA8JE0xQi1LZXktUmV0dXJuPiAkX3N0YXJ0CisJYmluZCAkdyA8S2V5LVJldHVybj4gJF9zdGFydAorCWJpbmQgJHcgPEtleS1Fc2NhcGU+IFtjYiBfY2FuY2VsXQorCXdtIHByb3RvY29sICR3IFdNX0RFTEVURV9XSU5ET1cgW2NiIF9jYW5jZWxdCisKKwliaW5kICR3LmJ1dHRvbnMubWVyZ2UgPFZpc2liaWxpdHk+IFtjYiBfdmlzaWJsZV0KKwl0a3dhaXQgd2luZG93ICR3Cit9CisKK21ldGhvZCBfdmlzaWJsZSB7fSB7CisJZ3JhYiAkdworCWlmIHtbaXNfY29uZmlnX3RydWUgZ3VpLm1hdGNodHJhY2tpbmdicmFuY2hdfSB7CisJCSR3X3JldiBwaWNrX3RyYWNraW5nX2JyYW5jaAorCX0KKwkkd19yZXYgZm9jdXNfZmlsdGVyCit9CisKK21ldGhvZCBfY2FuY2VsIHt9IHsKKwl3bSBwcm90b2NvbCAkdyBXTV9ERUxFVEVfV0lORE9XIHt9CisJdW5sb2NrX2luZGV4CisJZGVzdHJveSAkdworCWRlbGV0ZV90aGlzCit9CisKK30KKworbmFtZXNwYWNlIGV2YWwgbWVyZ2UgeworCitwcm9jIHJlc2V0X2hhcmQge30geworCWdsb2JhbCBIRUFEIGNvbW1pdF90eXBlIGZpbGVfc3RhdGVzCisKKwlpZiB7W3N0cmluZyBtYXRjaCBhbWVuZCogJGNvbW1pdF90eXBlXX0geworCQlpbmZvX3BvcHVwIFttYyAiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLgorCitZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuCisiXQorCQlyZXR1cm4KKwl9CisKKwlpZiB7IVtsb2NrX2luZGV4IGFib3J0XX0gcmV0dXJuCisKKwlpZiB7W3N0cmluZyBtYXRjaCAqbWVyZ2UqICRjb21taXRfdHlwZV19IHsKKwkJc2V0IG9wX3F1ZXN0aW9uIFttYyAiQWJvcnQgbWVyZ2U/CisKK0Fib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LgorCitDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyJdCisJfSBlbHNlIHsKKwkJc2V0IG9wX3F1ZXN0aW9uIFttYyAiUmVzZXQgY2hhbmdlcz8KKworUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LgorCitDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyJdCisJfQorCisJaWYge1thc2tfcG9wdXAgJG9wX3F1ZXN0aW9uXSBlcSB7eWVzfX0geworCQlzZXQgZmQgW2dpdF9yZWFkIC0tc3RkZXJyIHJlYWQtdHJlZSAtLXJlc2V0IC11IC12IEhFQURdCisJCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBiaW5hcnkKKwkJZmlsZWV2ZW50ICRmZCByZWFkYWJsZSBbbmFtZXNwYWNlIGNvZGUgW2xpc3QgX3Jlc2V0X3dhaXQgJGZkXV0KKwkJJDo6bWFpbl9zdGF0dXMgc3RhcnQgW21jICJBYm9ydGluZyJdIFttYyAiZmlsZXMgcmVzZXQiXQorCX0gZWxzZSB7CisJCXVubG9ja19pbmRleAorCX0KK30KKworcHJvYyBfcmVzZXRfd2FpdCB7ZmR9IHsKKwlnbG9iYWwgdWlfY29tbQorCisJJDo6bWFpbl9zdGF0dXMgdXBkYXRlX21ldGVyIFtyZWFkICRmZF0KKworCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAxCisJaWYge1tlb2YgJGZkXX0geworCQlzZXQgZmFpbCBbY2F0Y2gge2Nsb3NlICRmZH0gZXJyXQorCQkkOjptYWluX3N0YXR1cyBzdG9wCisJCXVubG9ja19pbmRleAorCisJCSR1aV9jb21tIGRlbGV0ZSAwLjAgZW5kCisJCSR1aV9jb21tIGVkaXQgbW9kaWZpZWQgZmFsc2UKKworCQljYXRjaCB7ZmlsZSBkZWxldGUgW2dpdGRpciBNRVJHRV9IRUFEXX0KKwkJY2F0Y2gge2ZpbGUgZGVsZXRlIFtnaXRkaXIgcnItY2FjaGUgTUVSR0VfUlJdfQorCQljYXRjaCB7ZmlsZSBkZWxldGUgW2dpdGRpciBNRVJHRV9SUl19CisJCWNhdGNoIHtmaWxlIGRlbGV0ZSBbZ2l0ZGlyIFNRVUFTSF9NU0ddfQorCQljYXRjaCB7ZmlsZSBkZWxldGUgW2dpdGRpciBNRVJHRV9NU0ddfQorCQljYXRjaCB7ZmlsZSBkZWxldGUgW2dpdGRpciBHSVRHVUlfTVNHXX0KKworCQlpZiB7JGZhaWx9IHsKKwkJCXdhcm5fcG9wdXAgIlttYyAiQWJvcnQgZmFpbGVkLiJdXG5cbiRlcnIiCisJCX0KKwkJcmVzY2FuIHt1aV9zdGF0dXMgW21jICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iXX0KKwl9IGVsc2UgeworCQlmY29uZmlndXJlICRmZCAtYmxvY2tpbmcgMAorCX0KK30KKworfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvbWVyZ2V0b29sLnRjbCBiL2dpdC1ndWkvbGliL21lcmdldG9vbC50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIwYmM0MAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL21lcmdldG9vbC50Y2wKQEAgLTAsMCArMSw0MDAgQEAKKyMgZ2l0LWd1aSBtZXJnZSBjb25mbGljdCByZXNvbHV0aW9uCisjIHBhcnRzIGJhc2VkIG9uIGdpdC1tZXJnZXRvb2wgKGMpIDIwMDYgVGhlb2RvcmUgWS4gVHMnbworCitwcm9jIG1lcmdlX3Jlc29sdmVfb25lIHtzdGFnZX0geworCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aAorCisJc3dpdGNoIC0tICRzdGFnZSB7CisJCTEgeyBzZXQgdGFyZ2V0cXVlc3Rpb24gW21jICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/Il0gfQorCQkyIHsgc2V0IHRhcmdldHF1ZXN0aW9uIFttYyAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iXSB9CisJCTMgeyBzZXQgdGFyZ2V0cXVlc3Rpb24gW21jICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBvdGhlciBicmFuY2g/Il0gfQorCX0KKworCXNldCBvcF9xdWVzdGlvbiBbc3RyY2F0ICR0YXJnZXRxdWVzdGlvbiAiXG4iIFwKK1ttYyAiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy4KKworJXMgd2lsbCBiZSBvdmVyd3JpdHRlbi4KKworVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVuZG9uZSBvbmx5IGJ5IHJlc3RhcnRpbmcgdGhlIG1lcmdlLiIgXAorCQlbc2hvcnRfcGF0aCAkY3VycmVudF9kaWZmX3BhdGhdXV0KKworCWlmIHtbYXNrX3BvcHVwICRvcF9xdWVzdGlvbl0gZXEge3llc319IHsKKwkJbWVyZ2VfbG9hZF9zdGFnZXMgJGN1cnJlbnRfZGlmZl9wYXRoIFtsaXN0IG1lcmdlX2ZvcmNlX3N0YWdlICRzdGFnZV0KKwl9Cit9CisKK3Byb2MgbWVyZ2Vfc3RhZ2Vfd29ya2RpciB7cGF0aCB7bG5vIHt9fX0geworCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aCBkaWZmX2FjdGl2ZQorCWdsb2JhbCBjdXJyZW50X2RpZmZfc2lkZSB1aV93b3JrZGlyCisKKwlpZiB7JGRpZmZfYWN0aXZlfSByZXR1cm4KKworCWlmIHskcGF0aCBuZSAkY3VycmVudF9kaWZmX3BhdGggfHwgJHVpX3dvcmtkaXIgbmUgJGN1cnJlbnRfZGlmZl9zaWRlfSB7CisJCXNob3dfZGlmZiAkcGF0aCAkdWlfd29ya2RpciAkbG5vIHt9IFtsaXN0IGRvX21lcmdlX3N0YWdlX3dvcmtkaXIgJHBhdGhdCisJfSBlbHNlIHsKKwkJZG9fbWVyZ2Vfc3RhZ2Vfd29ya2RpciAkcGF0aAorCX0KK30KKworcHJvYyBkb19tZXJnZV9zdGFnZV93b3JrZGlyIHtwYXRofSB7CisJZ2xvYmFsIGN1cnJlbnRfZGlmZl9wYXRoIGlzX2NvbmZsaWN0X2RpZmYKKworCWlmIHskcGF0aCBuZSAkY3VycmVudF9kaWZmX3BhdGh9IHJldHVybjsKKworCWlmIHskaXNfY29uZmxpY3RfZGlmZn0geworCQlpZiB7W2Fza19wb3B1cCBbbWMgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IiBcCisJCQkJW3Nob3J0X3BhdGggJHBhdGhdXV0gbmUge3llc319IHsKKwkJCXJldHVybgorCQl9CisJfQorCisJbWVyZ2VfYWRkX3Jlc29sdXRpb24gJHBhdGgKK30KKworcHJvYyBtZXJnZV9hZGRfcmVzb2x1dGlvbiB7cGF0aH0geworCWdsb2JhbCBjdXJyZW50X2RpZmZfcGF0aCB1aV93b3JrZGlyCisKKwlzZXQgYWZ0ZXIgW25leHRfZGlmZl9hZnRlcl9hY3Rpb24gJHVpX3dvcmtkaXIgJHBhdGgge30ge15fP1V9XQorCisJdXBkYXRlX2luZGV4IFwKKwkJW21jICJBZGRpbmcgcmVzb2x1dGlvbiBmb3IgJXMiIFtzaG9ydF9wYXRoICRwYXRoXV0gXAorCQlbbGlzdCAkcGF0aF0gXAorCQlbY29uY2F0ICRhZnRlciBbbGlzdCB1aV9yZWFkeV1dCit9CisKK3Byb2MgbWVyZ2VfZm9yY2Vfc3RhZ2Uge3N0YWdlfSB7CisJZ2xvYmFsIGN1cnJlbnRfZGlmZl9wYXRoIG1lcmdlX3N0YWdlcworCisJaWYgeyRtZXJnZV9zdGFnZXMoJHN0YWdlKSBuZSB7fX0geworCQlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLS1zdGFnZT0kc3RhZ2UgLS0gJGN1cnJlbnRfZGlmZl9wYXRoCisJfSBlbHNlIHsKKwkJZmlsZSBkZWxldGUgLS0gJGN1cnJlbnRfZGlmZl9wYXRoCisJfQorCisJbWVyZ2VfYWRkX3Jlc29sdXRpb24gJGN1cnJlbnRfZGlmZl9wYXRoCit9CisKK3Byb2MgbWVyZ2VfbG9hZF9zdGFnZXMge3BhdGggY29udH0geworCWdsb2JhbCBtZXJnZV9zdGFnZXNfZmQgbWVyZ2Vfc3RhZ2VzIG1lcmdlX3N0YWdlc19idWYKKworCWlmIHtbaW5mbyBleGlzdHMgbWVyZ2Vfc3RhZ2VzX2ZkXX0geworCQljYXRjaCB7IGtpbGxfZmlsZV9wcm9jZXNzICRtZXJnZV9zdGFnZXNfZmQgfQorCQljYXRjaCB7IGNsb3NlICRtZXJnZV9zdGFnZXNfZmQgfQorCX0KKworCXNldCBtZXJnZV9zdGFnZXMoMCkge30KKwlzZXQgbWVyZ2Vfc3RhZ2VzKDEpIHt9CisJc2V0IG1lcmdlX3N0YWdlcygyKSB7fQorCXNldCBtZXJnZV9zdGFnZXMoMykge30KKwlzZXQgbWVyZ2Vfc3RhZ2VzX2J1ZiB7fQorCisJc2V0IG1lcmdlX3N0YWdlc19mZCBbZXZhbCBnaXRfcmVhZCBscy1maWxlcyAtdSAteiAtLSB7JHBhdGh9XQorCisJZmNvbmZpZ3VyZSAkbWVyZ2Vfc3RhZ2VzX2ZkIC1ibG9ja2luZyAwIC10cmFuc2xhdGlvbiBiaW5hcnkgLWVuY29kaW5nIGJpbmFyeQorCWZpbGVldmVudCAkbWVyZ2Vfc3RhZ2VzX2ZkIHJlYWRhYmxlIFtsaXN0IHJlYWRfbWVyZ2Vfc3RhZ2VzICRtZXJnZV9zdGFnZXNfZmQgJGNvbnRdCit9CisKK3Byb2MgcmVhZF9tZXJnZV9zdGFnZXMge2ZkIGNvbnR9IHsKKwlnbG9iYWwgbWVyZ2Vfc3RhZ2VzX2J1ZiBtZXJnZV9zdGFnZXNfZmQgbWVyZ2Vfc3RhZ2VzCisKKwlhcHBlbmQgbWVyZ2Vfc3RhZ2VzX2J1ZiBbcmVhZCAkZmRdCisJc2V0IHBjayBbc3BsaXQgJG1lcmdlX3N0YWdlc19idWYgIlwwIl0KKwlzZXQgbWVyZ2Vfc3RhZ2VzX2J1ZiBbbGluZGV4ICRwY2sgZW5kXQorCisJaWYge1tlb2YgJGZkXSAmJiAkbWVyZ2Vfc3RhZ2VzX2J1ZiBuZSB7fX0geworCQlsYXBwZW5kIHBjayB7fQorCQlzZXQgbWVyZ2Vfc3RhZ2VzX2J1ZiB7fQorCX0KKworCWZvcmVhY2ggcCBbbHJhbmdlICRwY2sgMCBlbmQtMV0geworCQlzZXQgZmNvbHMgW3NwbGl0ICRwICJcdCJdCisJCXNldCBjb2xzICBbc3BsaXQgW2xpbmRleCAkZmNvbHMgMF0gIiAiXQorCQlzZXQgc3RhZ2UgW2xpbmRleCAkY29scyAyXQorCQkKKwkJc2V0IG1lcmdlX3N0YWdlcygkc3RhZ2UpIFtscmFuZ2UgJGNvbHMgMCAxXQorCX0KKworCWlmIHtbZW9mICRmZF19IHsKKwkJY2xvc2UgJGZkCisJCXVuc2V0IG1lcmdlX3N0YWdlc19mZAorCQlldmFsICRjb250CisJfQorfQorCitwcm9jIG1lcmdlX3Jlc29sdmVfdG9vbCB7fSB7CisJZ2xvYmFsIGN1cnJlbnRfZGlmZl9wYXRoCisKKwltZXJnZV9sb2FkX3N0YWdlcyAkY3VycmVudF9kaWZmX3BhdGggW2xpc3QgbWVyZ2VfcmVzb2x2ZV90b29sMl0KK30KKworcHJvYyBtZXJnZV9yZXNvbHZlX3Rvb2wyIHt9IHsKKwlnbG9iYWwgY3VycmVudF9kaWZmX3BhdGggbWVyZ2Vfc3RhZ2VzCisKKwkjIFZhbGlkYXRlIHRoZSBzdGFnZXMKKwlpZiB7JG1lcmdlX3N0YWdlcygyKSBlcSB7fSB8fAorCSAgICBbbGluZGV4ICRtZXJnZV9zdGFnZXMoMikgMF0gZXEgezEyMDAwMH0gfHwKKwkgICAgW2xpbmRleCAkbWVyZ2Vfc3RhZ2VzKDIpIDBdIGVxIHsxNjAwMDB9IHx8CisJICAgICRtZXJnZV9zdGFnZXMoMykgZXEge30gfHwKKwkgICAgW2xpbmRleCAkbWVyZ2Vfc3RhZ2VzKDMpIDBdIGVxIHsxMjAwMDB9IHx8CisJICAgIFtsaW5kZXggJG1lcmdlX3N0YWdlcygzKSAwXSBlcSB7MTYwMDAwfQorCX0geworCQllcnJvcl9wb3B1cCBbbWMgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCJdCisJCXJldHVybgorCX0KKworCWlmIHshW2ZpbGUgZXhpc3RzICRjdXJyZW50X2RpZmZfcGF0aF19IHsKKwkJZXJyb3JfcG9wdXAgW21jICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0Il0KKwkJcmV0dXJuCisJfQorCisJIyBEZXRlcm1pbmUgdGhlIHRvb2wgdG8gdXNlCisJc2V0IHRvb2wgW2dldF9jb25maWcgbWVyZ2UudG9vbF0KKwlpZiB7JHRvb2wgZXEge319IHsgc2V0IHRvb2wgbWVsZCB9CisKKwlzZXQgbWVyZ2VfdG9vbF9wYXRoIFtnZXRfY29uZmlnICJtZXJnZXRvb2wuJHRvb2wucGF0aCJdCisJaWYgeyRtZXJnZV90b29sX3BhdGggZXEge319IHsKKwkJc3dpdGNoIC0tICR0b29sIHsKKwkJZW1lcmdlIHsgc2V0IG1lcmdlX3Rvb2xfcGF0aCAiZW1hY3MiIH0KKwkJYXJheGlzIHsgc2V0IG1lcmdlX3Rvb2xfcGF0aCAiY29tcGFyZSIgfQorCQlkZWZhdWx0IHsgc2V0IG1lcmdlX3Rvb2xfcGF0aCAkdG9vbCB9CisJCX0KKwl9CisKKwkjIE1ha2UgZmlsZSBuYW1lcworCXNldCBmaWxlYmFzZSBbZmlsZSByb290bmFtZSAkY3VycmVudF9kaWZmX3BhdGhdCisJc2V0IGZpbGVleHQgIFtmaWxlIGV4dGVuc2lvbiAkY3VycmVudF9kaWZmX3BhdGhdCisJc2V0IGJhc2VuYW1lIFtsaW5kZXggW2ZpbGUgc3BsaXQgJGN1cnJlbnRfZGlmZl9wYXRoXSBlbmRdCisKKwlzZXQgTUVSR0VEICAgJGN1cnJlbnRfZGlmZl9wYXRoCisJc2V0IEJBU0UgICAgICIuLyRNRVJHRUQuQkFTRSRmaWxlZXh0IgorCXNldCBMT0NBTCAgICAiLi8kTUVSR0VELkxPQ0FMJGZpbGVleHQiCisJc2V0IFJFTU9URSAgICIuLyRNRVJHRUQuUkVNT1RFJGZpbGVleHQiCisJc2V0IEJBQ0tVUCAgICIuLyRNRVJHRUQuQkFDS1VQJGZpbGVleHQiCisKKwlzZXQgYmFzZV9zdGFnZSAkbWVyZ2Vfc3RhZ2VzKDEpCisKKwkjIEJ1aWxkIHRoZSBjb21tYW5kIGxpbmUKKwlzd2l0Y2ggLS0gJHRvb2wgeworCWFyYXhpcyB7CisJCWlmIHskYmFzZV9zdGFnZSBuZSB7fX0geworCQkJc2V0IGNtZGxpbmUgW2xpc3QgIiRtZXJnZV90b29sX3BhdGgiIC13YWl0IC1tZXJnZSAtMyAtYTEgXAorCQkJCS10aXRsZTE6IickTUVSR0VEIChCYXNlKSciIC10aXRsZTI6IickTUVSR0VEIChMb2NhbCknIiBcCisJCQkJLXRpdGxlMzoiJyRNRVJHRUQgKFJlbW90ZSknIiBcCisJCQkJIiRCQVNFIiAiJExPQ0FMIiAiJFJFTU9URSIgIiRNRVJHRUQiXQorCQl9IGVsc2UgeworCQkJc2V0IGNtZGxpbmUgW2xpc3QgIiRtZXJnZV90b29sX3BhdGgiIC13YWl0IC0yIFwKKwkJCQkgLXRpdGxlMToiJyRNRVJHRUQgKExvY2FsKSciIC10aXRsZTI6IickTUVSR0VEIChSZW1vdGUpJyIgXAorCQkJCSAiJExPQ0FMIiAiJFJFTU9URSIgIiRNRVJHRUQiXQorCQl9CisJfQorCWJjMyB7CisJCWlmIHskYmFzZV9zdGFnZSBuZSB7fX0geworCQkJc2V0IGNtZGxpbmUgW2xpc3QgIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAiJEJBU0UiICItbWVyZ2VvdXRwdXQ9JE1FUkdFRCJdCisJCX0gZWxzZSB7CisJCQlzZXQgY21kbGluZSBbbGlzdCAiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiICItbWVyZ2VvdXRwdXQ9JE1FUkdFRCJdCisJCX0KKwl9CisJZWNtZXJnZSB7CisJCWlmIHskYmFzZV9zdGFnZSBuZSB7fX0geworCQkJc2V0IGNtZGxpbmUgW2xpc3QgIiRtZXJnZV90b29sX3BhdGgiICIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiIC0tZGVmYXVsdCAtLW1vZGU9bWVyZ2UzIC0tdG89IiRNRVJHRUQiXQorCQl9IGVsc2UgeworCQkJc2V0IGNtZGxpbmUgW2xpc3QgIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAtLWRlZmF1bHQgLS1tb2RlPW1lcmdlMiAtLXRvPSIkTUVSR0VEIl0KKwkJfQorCX0KKwllbWVyZ2UgeworCQlpZiB7JGJhc2Vfc3RhZ2UgbmUge319IHsKKwkJCXNldCBjbWRsaW5lIFtsaXN0ICIkbWVyZ2VfdG9vbF9wYXRoIiAtZiBlbWVyZ2UtZmlsZXMtd2l0aC1hbmNlc3Rvci1jb21tYW5kIFwKKwkJCQkJIiRMT0NBTCIgIiRSRU1PVEUiICIkQkFTRSIgIiRiYXNlbmFtZSJdCisJCX0gZWxzZSB7CisJCQlzZXQgY21kbGluZSBbbGlzdCAiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgZW1lcmdlLWZpbGVzLWNvbW1hbmQgXAorCQkJCQkiJExPQ0FMIiAiJFJFTU9URSIgIiRiYXNlbmFtZSJdCisJCX0KKwl9CisJZ3ZpbWRpZmYgeworCQlzZXQgY21kbGluZSBbbGlzdCAiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIl0KKwl9CisJa2RpZmYzIHsKKwkJaWYgeyRiYXNlX3N0YWdlIG5lIHt9fSB7CisJCQlzZXQgY21kbGluZSBbbGlzdCAiJG1lcmdlX3Rvb2xfcGF0aCIgLS1hdXRvIC0tTDEgIiRNRVJHRUQgKEJhc2UpIiBcCisJCQkJLS1MMiAiJE1FUkdFRCAoTG9jYWwpIiAtLUwzICIkTUVSR0VEIChSZW1vdGUpIiAtbyAiJE1FUkdFRCIgIiRCQVNFIiAiJExPQ0FMIiAiJFJFTU9URSJdCisJCX0gZWxzZSB7CisJCQlzZXQgY21kbGluZSBbbGlzdCAiJG1lcmdlX3Rvb2xfcGF0aCIgLS1hdXRvIC0tTDEgIiRNRVJHRUQgKExvY2FsKSIgXAorCQkJCS0tTDIgIiRNRVJHRUQgKFJlbW90ZSkiIC1vICIkTUVSR0VEIiAiJExPQ0FMIiAiJFJFTU9URSJdCisJCX0KKwl9CisJbWVsZCB7CisJCXNldCBjbWRsaW5lIFtsaXN0ICIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJE1FUkdFRCIgIiRSRU1PVEUiXQorCX0KKwlvcGVuZGlmZiB7CisJCWlmIHskYmFzZV9zdGFnZSBuZSB7fX0geworCQkJc2V0IGNtZGxpbmUgW2xpc3QgIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAtYW5jZXN0b3IgIiRCQVNFIiAtbWVyZ2UgIiRNRVJHRUQiXQorCQl9IGVsc2UgeworCQkJc2V0IGNtZGxpbmUgW2xpc3QgIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAtbWVyZ2UgIiRNRVJHRUQiXQorCQl9CisJfQorCXA0bWVyZ2UgeworCQlzZXQgY21kbGluZSBbbGlzdCAiJG1lcmdlX3Rvb2xfcGF0aCIgIiRCQVNFIiAiJFJFTU9URSIgIiRMT0NBTCIgIiRNRVJHRUQiXQorCX0KKwl0a2RpZmYgeworCQlpZiB7JGJhc2Vfc3RhZ2UgbmUge319IHsKKwkJCXNldCBjbWRsaW5lIFtsaXN0ICIkbWVyZ2VfdG9vbF9wYXRoIiAtYSAiJEJBU0UiIC1vICIkTUVSR0VEIiAiJExPQ0FMIiAiJFJFTU9URSJdCisJCX0gZWxzZSB7CisJCQlzZXQgY21kbGluZSBbbGlzdCAiJG1lcmdlX3Rvb2xfcGF0aCIgLW8gIiRNRVJHRUQiICIkTE9DQUwiICIkUkVNT1RFIl0KKwkJfQorCX0KKwl2aW1kaWZmIHsKKwkJZXJyb3JfcG9wdXAgW21jICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIgJHRvb2xdCisJCXJldHVybgorCX0KKwl3aW5tZXJnZSB7CisJCWlmIHskYmFzZV9zdGFnZSBuZSB7fX0geworCQkJIyBUaGlzIHRvb2wgZG9lcyBub3Qgc3VwcG9ydCAzLXdheSBtZXJnZXMuCisJCQkjIFVzZSB0aGUgJ2NvbmZsaWN0IGZpbGUnIHJlc29sdXRpb24gZmVhdHVyZSBpbnN0ZWFkLgorCQkJc2V0IGNtZGxpbmUgW2xpc3QgIiRtZXJnZV90b29sX3BhdGgiIC1lIC11YiAiJE1FUkdFRCJdCisJCX0gZWxzZSB7CisJCQlzZXQgY21kbGluZSBbbGlzdCAiJG1lcmdlX3Rvb2xfcGF0aCIgLWUgLXViIC13bCBcCisJCQkJLWRsICJUaGVpcnMgRmlsZSIgLWRyICJNaW5lIEZpbGUiICIkUkVNT1RFIiAiJExPQ0FMIiAiJE1FUkdFRCJdCisJCX0KKwl9CisJeHhkaWZmIHsKKwkJaWYgeyRiYXNlX3N0YWdlIG5lIHt9fSB7CisJCQlzZXQgY21kbGluZSBbbGlzdCAiJG1lcmdlX3Rvb2xfcGF0aCIgLVggLS1zaG93LW1lcmdlZC1wYW5lIFwKKwkJCQkJICAgIC1SIHtBY2NlbC5TYXZlQXNNZXJnZWQ6ICJDdHJsLVMifSBcCisJCQkJCSAgICAtUiB7QWNjZWwuU2VhcmNoOiAiQ3RybCtGIn0gXAorCQkJCQkgICAgLVIge0FjY2VsLlNlYXJjaEZvcndhcmQ6ICJDdHJsLUcifSBcCisJCQkJCSAgICAtLW1lcmdlZC1maWxlICIkTUVSR0VEIiAiJExPQ0FMIiAiJEJBU0UiICIkUkVNT1RFIl0KKwkJfSBlbHNlIHsKKwkJCXNldCBjbWRsaW5lIFtsaXN0ICIkbWVyZ2VfdG9vbF9wYXRoIiAtWCAtLXNob3ctbWVyZ2VkLXBhbmUgXAorCQkJCQkgICAgLVIge0FjY2VsLlNhdmVBc01lcmdlZDogIkN0cmwtUyJ9IFwKKwkJCQkJICAgIC1SIHtBY2NlbC5TZWFyY2g6ICJDdHJsK0YifSBcCisJCQkJCSAgICAtUiB7QWNjZWwuU2VhcmNoRm9yd2FyZDogIkN0cmwtRyJ9IFwKKwkJCQkJICAgIC0tbWVyZ2VkLWZpbGUgIiRNRVJHRUQiICIkTE9DQUwiICIkUkVNT1RFIl0KKwkJfQorCX0KKwlkZWZhdWx0IHsKKwkJZXJyb3JfcG9wdXAgW21jICJVbnN1cHBvcnRlZCBtZXJnZSB0b29sICclcyciICR0b29sXQorCQlyZXR1cm4KKwl9CisJfQorCisJbWVyZ2VfdG9vbF9zdGFydCAkY21kbGluZSAkTUVSR0VEICRCQUNLVVAgW2xpc3QgJEJBU0UgJExPQ0FMICRSRU1PVEVdCit9CisKK3Byb2MgZGVsZXRlX3RlbXBfZmlsZXMge2ZpbGVzfSB7CisJZm9yZWFjaCBmbmFtZSAkZmlsZXMgeworCQlmaWxlIGRlbGV0ZSAkZm5hbWUKKwl9Cit9CisKK3Byb2MgbWVyZ2VfdG9vbF9nZXRfc3RhZ2VzIHt0YXJnZXQgc3RhZ2VzfSB7CisJZ2xvYmFsIG1lcmdlX3N0YWdlcworCisJc2V0IGkgMQorCWZvcmVhY2ggZm5hbWUgJHN0YWdlcyB7CisJCWlmIHskbWVyZ2Vfc3RhZ2VzKCRpKSBlcSB7fX0geworCQkJZmlsZSBkZWxldGUgJGZuYW1lCisJCQljYXRjaCB7IGNsb3NlIFtvcGVuICRmbmFtZSB3XSB9CisJCX0gZWxzZSB7CisJCQkjIEEgaGFjayB0byBzdXBwb3J0IGF1dG9jcmxmIHByb3Blcmx5CisJCQlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLS1zdGFnZT0kaSAtLSAkdGFyZ2V0CisJCQlmaWxlIHJlbmFtZSAtZm9yY2UgLS0gJHRhcmdldCAkZm5hbWUKKwkJfQorCQlpbmNyIGkKKwl9Cit9CisKK3Byb2MgbWVyZ2VfdG9vbF9zdGFydCB7Y21kbGluZSB0YXJnZXQgYmFja3VwIHN0YWdlc30geworCWdsb2JhbCBtZXJnZV9zdGFnZXMgbXRvb2xfdGFyZ2V0IG10b29sX3RtcGZpbGVzIG10b29sX2ZkIG10b29sX210aW1lCisKKwlpZiB7W2luZm8gZXhpc3RzIG10b29sX2ZkXX0geworCQlpZiB7W2Fza19wb3B1cCBbbWMgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/Il1dIGVxIHt5ZXN9fSB7CisJCQljYXRjaCB7IGtpbGxfZmlsZV9wcm9jZXNzICRtdG9vbF9mZCB9CisJCQljYXRjaCB7IGNsb3NlICRtdG9vbF9mZCB9CisJCQl1bnNldCBtdG9vbF9mZAorCisJCQlzZXQgb2xkX2JhY2t1cCBbbGluZGV4ICRtdG9vbF90bXBmaWxlcyBlbmRdCisJCQlmaWxlIHJlbmFtZSAtZm9yY2UgLS0gJG9sZF9iYWNrdXAgJG10b29sX3RhcmdldAorCQkJZGVsZXRlX3RlbXBfZmlsZXMgJG10b29sX3RtcGZpbGVzCisJCX0gZWxzZSB7CisJCQlyZXR1cm4KKwkJfQorCX0KKworCSMgU2F2ZSB0aGUgb3JpZ2luYWwgZmlsZQorCWZpbGUgcmVuYW1lIC1mb3JjZSAtLSAkdGFyZ2V0ICRiYWNrdXAKKworCSMgR2V0IHRoZSBibG9iczsgaXQgZGVzdHJveXMgJHRhcmdldAorCWlmIHtbY2F0Y2gge21lcmdlX3Rvb2xfZ2V0X3N0YWdlcyAkdGFyZ2V0ICRzdGFnZXN9IGVycl19IHsKKwkJZmlsZSByZW5hbWUgLWZvcmNlIC0tICRiYWNrdXAgJHRhcmdldAorCQlkZWxldGVfdGVtcF9maWxlcyAkc3RhZ2VzCisJCWVycm9yX3BvcHVwIFttYyAiRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiVzIiAkZXJyXQorCQlyZXR1cm4KKwl9CisKKwkjIFJlc3RvcmUgdGhlIGNvbmZsaWN0IGZpbGUKKwlmaWxlIGNvcHkgLWZvcmNlIC0tICRiYWNrdXAgJHRhcmdldAorCisJIyBJbml0aWFsaXplIGdsb2JhbCBzdGF0ZQorCXNldCBtdG9vbF90YXJnZXQgJHRhcmdldAorCXNldCBtdG9vbF9tdGltZSBbZmlsZSBtdGltZSAkdGFyZ2V0XQorCXNldCBtdG9vbF90bXBmaWxlcyAkc3RhZ2VzCisKKwlsYXBwZW5kIG10b29sX3RtcGZpbGVzICRiYWNrdXAKKworCSMgRm9yY2UgcmVkaXJlY3Rpb24gdG8gYXZvaWQgaW50ZXJwcmV0aW5nIG91dHB1dCBvbiBzdGRlcnIKKwkjIGFzIGFuIGVycm9yLCBhbmQgbGF1bmNoIHRoZSB0b29sCisJbGFwcGVuZCBjbWRsaW5lIHsyPkAxfQorCisJaWYge1tjYXRjaCB7IHNldCBtdG9vbF9mZCBbX29wZW5fc3Rkb3V0X3N0ZGVyciAkY21kbGluZV0gfSBlcnJdfSB7CisJCWRlbGV0ZV90ZW1wX2ZpbGVzICRtdG9vbF90bXBmaWxlcworCQllcnJvcl9wb3B1cCBbbWMgIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcblxuJXMiICRlcnJdCisJCXJldHVybgorCX0KKworCXVpX3N0YXR1cyBbbWMgIlJ1bm5pbmcgbWVyZ2UgdG9vbC4uLiJdCisKKwlmY29uZmlndXJlICRtdG9vbF9mZCAtYmxvY2tpbmcgMCAtdHJhbnNsYXRpb24gYmluYXJ5IC1lbmNvZGluZyBiaW5hcnkKKwlmaWxlZXZlbnQgJG10b29sX2ZkIHJlYWRhYmxlIFtsaXN0IHJlYWRfbXRvb2xfb3V0cHV0ICRtdG9vbF9mZF0KK30KKworcHJvYyByZWFkX210b29sX291dHB1dCB7ZmR9IHsKKwlnbG9iYWwgbXRvb2xfZmQgbXRvb2xfdG1wZmlsZXMKKworCXJlYWQgJGZkCisJaWYge1tlb2YgJGZkXX0geworCQl1bnNldCBtdG9vbF9mZAorCisJCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAxCisJCW1lcmdlX3Rvb2xfZmluaXNoICRmZAorCX0KK30KKworcHJvYyBtZXJnZV90b29sX2ZpbmlzaCB7ZmR9IHsKKwlnbG9iYWwgbXRvb2xfdG1wZmlsZXMgbXRvb2xfdGFyZ2V0IG10b29sX210aW1lCisKKwlzZXQgYmFja3VwIFtsaW5kZXggJG10b29sX3RtcGZpbGVzIGVuZF0KKwlzZXQgZmFpbGVkIDAKKworCSMgQ2hlY2sgdGhlIHJldHVybiBjb2RlCisJaWYge1tjYXRjaCB7Y2xvc2UgJGZkfSBlcnJdfSB7CisJCXNldCBmYWlsZWQgMQorCQlpZiB7JGVyciBuZSB7Y2hpbGQgcHJvY2VzcyBleGl0ZWQgYWJub3JtYWxseX19IHsKKwkJCWVycm9yX3BvcHVwIFtzdHJjYXQgW21jICJNZXJnZSB0b29sIGZhaWxlZC4iXSAiXG5cbiRlcnIiXQorCQl9CisJfQorCisJIyBGaW5pc2gKKwlpZiB7JGZhaWxlZH0geworCQlmaWxlIHJlbmFtZSAtZm9yY2UgLS0gJGJhY2t1cCAkbXRvb2xfdGFyZ2V0CisJCWRlbGV0ZV90ZW1wX2ZpbGVzICRtdG9vbF90bXBmaWxlcworCQl1aV9zdGF0dXMgW21jICJNZXJnZSB0b29sIGZhaWxlZC4iXQorCX0gZWxzZSB7CisJCWlmIHtbaXNfY29uZmlnX3RydWUgbWVyZ2V0b29sLmtlZXBiYWNrdXBdfSB7CisJCQlmaWxlIHJlbmFtZSAtZm9yY2UgLS0gJGJhY2t1cCAiJG10b29sX3RhcmdldC5vcmlnIgorCQl9CisKKwkJZGVsZXRlX3RlbXBfZmlsZXMgJG10b29sX3RtcGZpbGVzCisKKwkJcmVzaG93X2RpZmYKKwl9Cit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9vcHRpb24udGNsIGIvZ2l0LWd1aS9saWIvb3B0aW9uLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWI2YjJmCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvb3B0aW9uLnRjbApAQCAtMCwwICsxLDM0OSBAQAorIyBnaXQtZ3VpIG9wdGlvbnMgZWRpdG9yCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTaGF3biBQZWFyY2UKKworcHJvYyBjb25maWdfY2hlY2tfZW5jb2RpbmdzIHt9IHsKKwlnbG9iYWwgcmVwb19jb25maWdfbmV3IGdsb2JhbF9jb25maWdfbmV3CisKKwlzZXQgZW5jICRnbG9iYWxfY29uZmlnX25ldyhndWkuZW5jb2RpbmcpCisJaWYgeyRlbmMgZXEge319IHsKKwkJc2V0IGdsb2JhbF9jb25maWdfbmV3KGd1aS5lbmNvZGluZykgW2VuY29kaW5nIHN5c3RlbV0KKwl9IGVsc2VpZiB7W3RjbF9lbmNvZGluZyAkZW5jXSBlcSB7fX0geworCQllcnJvcl9wb3B1cCBbbWMgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciICRlbmNdCisJCXJldHVybiAwCisJfQorCisJc2V0IGVuYyAkcmVwb19jb25maWdfbmV3KGd1aS5lbmNvZGluZykKKwlpZiB7JGVuYyBlcSB7fX0geworCQlzZXQgcmVwb19jb25maWdfbmV3KGd1aS5lbmNvZGluZykgW2VuY29kaW5nIHN5c3RlbV0KKwl9IGVsc2VpZiB7W3RjbF9lbmNvZGluZyAkZW5jXSBlcSB7fX0geworCQllcnJvcl9wb3B1cCBbbWMgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIiAkZW5jXQorCQlyZXR1cm4gMAorCX0KKworCXJldHVybiAxCit9CisKK3Byb2Mgc2F2ZV9jb25maWcge30geworCWdsb2JhbCBkZWZhdWx0X2NvbmZpZyBmb250X2Rlc2NzCisJZ2xvYmFsIHJlcG9fY29uZmlnIGdsb2JhbF9jb25maWcgc3lzdGVtX2NvbmZpZworCWdsb2JhbCByZXBvX2NvbmZpZ19uZXcgZ2xvYmFsX2NvbmZpZ19uZXcKKwlnbG9iYWwgdWlfY29tbV9zcGVsbAorCisJZm9yZWFjaCBvcHRpb24gJGZvbnRfZGVzY3MgeworCQlzZXQgbmFtZSBbbGluZGV4ICRvcHRpb24gMF0KKwkJc2V0IGZvbnQgW2xpbmRleCAkb3B0aW9uIDFdCisJCWZvbnQgY29uZmlndXJlICRmb250IFwKKwkJCS1mYW1pbHkgJGdsb2JhbF9jb25maWdfbmV3KGd1aS4kZm9udF5eZmFtaWx5KSBcCisJCQktc2l6ZSAkZ2xvYmFsX2NvbmZpZ19uZXcoZ3VpLiRmb250Xl5zaXplKQorCQlmb250IGNvbmZpZ3VyZSAke2ZvbnR9Ym9sZCBcCisJCQktZmFtaWx5ICRnbG9iYWxfY29uZmlnX25ldyhndWkuJGZvbnReXmZhbWlseSkgXAorCQkJLXNpemUgJGdsb2JhbF9jb25maWdfbmV3KGd1aS4kZm9udF5ec2l6ZSkKKwkJZm9udCBjb25maWd1cmUgJHtmb250fWl0YWxpYyBcCisJCQktZmFtaWx5ICRnbG9iYWxfY29uZmlnX25ldyhndWkuJGZvbnReXmZhbWlseSkgXAorCQkJLXNpemUgJGdsb2JhbF9jb25maWdfbmV3KGd1aS4kZm9udF5ec2l6ZSkKKwkJc2V0IGdsb2JhbF9jb25maWdfbmV3KGd1aS4kbmFtZSkgW2ZvbnQgY29uZmlndXJlICRmb250XQorCQl1bnNldCBnbG9iYWxfY29uZmlnX25ldyhndWkuJGZvbnReXmZhbWlseSkKKwkJdW5zZXQgZ2xvYmFsX2NvbmZpZ19uZXcoZ3VpLiRmb250Xl5zaXplKQorCX0KKworCWZvcmVhY2ggbmFtZSBbYXJyYXkgbmFtZXMgZGVmYXVsdF9jb25maWddIHsKKwkJc2V0IHZhbHVlICRnbG9iYWxfY29uZmlnX25ldygkbmFtZSkKKwkJaWYgeyR2YWx1ZSBuZSAkZ2xvYmFsX2NvbmZpZygkbmFtZSl9IHsKKwkJCWlmIHskdmFsdWUgZXEgJHN5c3RlbV9jb25maWcoJG5hbWUpfSB7CisJCQkJY2F0Y2gge2dpdCBjb25maWcgLS1nbG9iYWwgLS11bnNldCAkbmFtZX0KKwkJCX0gZWxzZSB7CisJCQkJcmVnc3ViIC1hbGwgIlxbe31cXSIgJHZhbHVlIHsifSB2YWx1ZQorCQkJCWdpdCBjb25maWcgLS1nbG9iYWwgJG5hbWUgJHZhbHVlCisJCQl9CisJCQlzZXQgZ2xvYmFsX2NvbmZpZygkbmFtZSkgJHZhbHVlCisJCQlpZiB7JHZhbHVlIGVxICRyZXBvX2NvbmZpZygkbmFtZSl9IHsKKwkJCQljYXRjaCB7Z2l0IGNvbmZpZyAtLXVuc2V0ICRuYW1lfQorCQkJCXNldCByZXBvX2NvbmZpZygkbmFtZSkgJHZhbHVlCisJCQl9CisJCX0KKwl9CisKKwlmb3JlYWNoIG5hbWUgW2FycmF5IG5hbWVzIGRlZmF1bHRfY29uZmlnXSB7CisJCXNldCB2YWx1ZSAkcmVwb19jb25maWdfbmV3KCRuYW1lKQorCQlpZiB7JHZhbHVlIG5lICRyZXBvX2NvbmZpZygkbmFtZSl9IHsKKwkJCWlmIHskdmFsdWUgZXEgJGdsb2JhbF9jb25maWcoJG5hbWUpfSB7CisJCQkJY2F0Y2gge2dpdCBjb25maWcgLS11bnNldCAkbmFtZX0KKwkJCX0gZWxzZSB7CisJCQkJcmVnc3ViIC1hbGwgIlxbe31cXSIgJHZhbHVlIHsifSB2YWx1ZQorCQkJCWdpdCBjb25maWcgJG5hbWUgJHZhbHVlCisJCQl9CisJCQlzZXQgcmVwb19jb25maWcoJG5hbWUpICR2YWx1ZQorCQl9CisJfQorCisJaWYge1tpbmZvIGV4aXN0cyByZXBvX2NvbmZpZyhndWkuc3BlbGxpbmdkaWN0aW9uYXJ5KV19IHsKKwkJc2V0IHZhbHVlICRyZXBvX2NvbmZpZyhndWkuc3BlbGxpbmdkaWN0aW9uYXJ5KQorCQlpZiB7JHZhbHVlIGVxIHtub25lfX0geworCQkJaWYge1tpbmZvIGV4aXN0cyB1aV9jb21tX3NwZWxsXX0geworCQkJCSR1aV9jb21tX3NwZWxsIHN0b3AKKwkJCX0KKwkJfSBlbHNlaWYge1tpbmZvIGV4aXN0cyB1aV9jb21tX3NwZWxsXX0geworCQkJJHVpX2NvbW1fc3BlbGwgbGFuZyAkdmFsdWUKKwkJfQorCX0KK30KKworcHJvYyBkb19vcHRpb25zIHt9IHsKKwlnbG9iYWwgcmVwb19jb25maWcgZ2xvYmFsX2NvbmZpZyBmb250X2Rlc2NzCisJZ2xvYmFsIHJlcG9fY29uZmlnX25ldyBnbG9iYWxfY29uZmlnX25ldworCWdsb2JhbCB1aV9jb21tX3NwZWxsIHVzZV90dGsgTlMKKworCWFycmF5IHVuc2V0IHJlcG9fY29uZmlnX25ldworCWFycmF5IHVuc2V0IGdsb2JhbF9jb25maWdfbmV3CisJZm9yZWFjaCBuYW1lIFthcnJheSBuYW1lcyByZXBvX2NvbmZpZ10geworCQlzZXQgcmVwb19jb25maWdfbmV3KCRuYW1lKSAkcmVwb19jb25maWcoJG5hbWUpCisJfQorCWxvYWRfY29uZmlnIDEKKwlmb3JlYWNoIG5hbWUgW2FycmF5IG5hbWVzIHJlcG9fY29uZmlnXSB7CisJCXN3aXRjaCAtLSAkbmFtZSB7CisJCWd1aS5kaWZmY29udGV4dCB7Y29udGludWV9CisJCX0KKwkJc2V0IHJlcG9fY29uZmlnX25ldygkbmFtZSkgJHJlcG9fY29uZmlnKCRuYW1lKQorCX0KKwlmb3JlYWNoIG5hbWUgW2FycmF5IG5hbWVzIGdsb2JhbF9jb25maWddIHsKKwkJc2V0IGdsb2JhbF9jb25maWdfbmV3KCRuYW1lKSAkZ2xvYmFsX2NvbmZpZygkbmFtZSkKKwl9CisKKwlzZXQgdyAub3B0aW9uc19lZGl0b3IKKwlEaWFsb2cgJHcKKwl3bSB3aXRoZHJhdyAkdworCXdtIHRyYW5zaWVudCAkdyBbd2luZm8gcGFyZW50ICR3XQorCXdtIGdlb21ldHJ5ICR3ICIrW3dpbmZvIHJvb3R4IC5dK1t3aW5mbyByb290eSAuXSIKKworCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLnJlc3RvcmUgLXRleHQgW21jICJSZXN0b3JlIERlZmF1bHRzIl0gXAorCQktZGVmYXVsdCBub3JtYWwgXAorCQktY29tbWFuZCBkb19yZXN0b3JlX2RlZmF1bHRzCisJcGFjayAkdy5idXR0b25zLnJlc3RvcmUgLXNpZGUgbGVmdAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5zYXZlIC10ZXh0IFttYyBTYXZlXSBcCisJCS1kZWZhdWx0IGFjdGl2ZSBcCisJCS1jb21tYW5kIFtsaXN0IGRvX3NhdmVfY29uZmlnICR3XQorCXBhY2sgJHcuYnV0dG9ucy5zYXZlIC1zaWRlIHJpZ2h0CisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCAtdGV4dCBbbWMgIkNhbmNlbCJdIFwKKwkJLWRlZmF1bHQgbm9ybWFsIFwKKwkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KKwlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKKwlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKKworCSR7TlN9OjpsYWJlbGZyYW1lICR3LnJlcG8gLXRleHQgW21jICIlcyBSZXBvc2l0b3J5IiBbcmVwb25hbWVdXQorCSR7TlN9OjpsYWJlbGZyYW1lICR3Lmdsb2JhbCAtdGV4dCBbbWMgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiXQorCXBhY2sgJHcucmVwbyAtc2lkZSBsZWZ0IC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR5IDUgLXBhZHggNQorCXBhY2sgJHcuZ2xvYmFsIC1zaWRlIHJpZ2h0IC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR5IDUgLXBhZHggNQorCisJc2V0IG9wdGlkIDAKKwlmb3JlYWNoIG9wdGlvbiB7CisJCXt0IHVzZXIubmFtZSB7bWMgIlVzZXIgTmFtZSJ9fQorCQl7dCB1c2VyLmVtYWlsIHttYyAiRW1haWwgQWRkcmVzcyJ9fQorCisJCXtiIG1lcmdlLnN1bW1hcnkge21jICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyJ9fQorCQl7aS0xLi41IG1lcmdlLnZlcmJvc2l0eSB7bWMgIk1lcmdlIFZlcmJvc2l0eSJ9fQorCQl7YiBtZXJnZS5kaWZmc3RhdCB7bWMgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UifX0KKwkJe3QgbWVyZ2UudG9vbCB7bWMgIlVzZSBNZXJnZSBUb29sIn19CisKKwkJe2IgZ3VpLnRydXN0bXRpbWUgIHttYyAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyJ9fQorCQl7YiBndWkucHJ1bmVkdXJpbmdmZXRjaCB7bWMgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCJ9fQorCQl7YiBndWkubWF0Y2h0cmFja2luZ2JyYW5jaCB7bWMgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIn19CisJCXtiIGd1aS50ZXh0Y29udiB7bWMgIlVzZSBUZXh0Y29udiBGb3IgRGlmZnMgYW5kIEJsYW1lcyJ9fQorCQl7YiBndWkuZmFzdGNvcHlibGFtZSB7bWMgIkJsYW1lIENvcHkgT25seSBPbiBDaGFuZ2VkIEZpbGVzIn19CisJCXtpLTAuLjEwMCBndWkubWF4cmVjZW50cmVwbyB7bWMgIk1heGltdW0gTGVuZ3RoIG9mIFJlY2VudCBSZXBvc2l0b3JpZXMgTGlzdCJ9fQorCQl7aS0yMC4uMjAwIGd1aS5jb3B5YmxhbWV0aHJlc2hvbGQge21jICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiJ9fQorCQl7aS0wLi4zMDAgZ3VpLmJsYW1laGlzdG9yeWN0eCB7bWMgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIn19CisJCXtpLTEuLjk5IGd1aS5kaWZmY29udGV4dCB7bWMgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMifX0KKwkJe3QgZ3VpLmRpZmZvcHRzIHttYyAiQWRkaXRpb25hbCBEaWZmIFBhcmFtZXRlcnMifX0KKwkJe2ktMC4uOTkgZ3VpLmNvbW1pdG1zZ3dpZHRoIHttYyAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCJ9fQorCQl7dCBndWkubmV3YnJhbmNodGVtcGxhdGUge21jICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUifX0KKwkJe2MgZ3VpLmVuY29kaW5nIHttYyAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIn19CisJCXtiIGd1aS53YXJuZGV0YWNoZWRjb21taXQge21jICJXYXJuIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZGV0YWNoZWQgaGVhZCJ9fQorCQl7cyBndWkuc3RhZ2V1bnRyYWNrZWQge21jICJTdGFnaW5nIG9mIHVudHJhY2tlZCBmaWxlcyJ9IHtsaXN0ICJ5ZXMiICJubyIgImFzayJ9fQorCQl7YiBndWkuZGlzcGxheXVudHJhY2tlZCB7bWMgIlNob3cgdW50cmFja2VkIGZpbGVzIn19CisJCXtpLTEuLjk5IGd1aS50YWJzaXplIHttYyAiVGFiIHNwYWNpbmcifX0KKwkJfSB7CisJCXNldCB0eXBlIFtsaW5kZXggJG9wdGlvbiAwXQorCQlzZXQgbmFtZSBbbGluZGV4ICRvcHRpb24gMV0KKwkJc2V0IHRleHQgW2V2YWwgW2xpbmRleCAkb3B0aW9uIDJdXQorCQlpbmNyIG9wdGlkCisJCWZvcmVhY2ggZiB7cmVwbyBnbG9iYWx9IHsKKwkJCXN3aXRjaCAtZ2xvYiAtLSAkdHlwZSB7CisJCQliIHsKKwkJCQkke05TfTo6Y2hlY2tidXR0b24gJHcuJGYuJG9wdGlkIC10ZXh0ICR0ZXh0IFwKKwkJCQkJLXZhcmlhYmxlICR7Zn1fY29uZmlnX25ldygkbmFtZSkgXAorCQkJCQktb252YWx1ZSB0cnVlIFwKKwkJCQkJLW9mZnZhbHVlIGZhbHNlCisJCQkJcGFjayAkdy4kZi4kb3B0aWQgLXNpZGUgdG9wIC1hbmNob3IgdworCQkJfQorCQkJaS0qIHsKKwkJCQlyZWdleHAgLS0gey0oXGQrKVwuXC4oXGQrKSR9ICR0eXBlIF9qdW5rIG1pbiBtYXgKKwkJCQkke05TfTo6ZnJhbWUgJHcuJGYuJG9wdGlkCisJCQkJJHtOU306OmxhYmVsICR3LiRmLiRvcHRpZC5sIC10ZXh0ICIkdGV4dDoiCisJCQkJcGFjayAkdy4kZi4kb3B0aWQubCAtc2lkZSBsZWZ0IC1hbmNob3IgdyAtZmlsbCB4CisJCQkJdHNwaW5ib3ggJHcuJGYuJG9wdGlkLnYgXAorCQkJCQktdGV4dHZhcmlhYmxlICR7Zn1fY29uZmlnX25ldygkbmFtZSkgXAorCQkJCQktZnJvbSAkbWluIFwKKwkJCQkJLXRvICRtYXggXAorCQkJCQktaW5jcmVtZW50IDEgXAorCQkJCQktd2lkdGggW2V4cHIgezEgKyBbc3RyaW5nIGxlbmd0aCAkbWF4XX1dCisJCQkJYmluZCAkdy4kZi4kb3B0aWQudiA8Rm9jdXNJbj4geyVXIHNlbGVjdGlvbiByYW5nZSAwIGVuZH0KKwkJCQlwYWNrICR3LiRmLiRvcHRpZC52IC1zaWRlIHJpZ2h0IC1hbmNob3IgZSAtcGFkeCA1CisJCQkJcGFjayAkdy4kZi4kb3B0aWQgLXNpZGUgdG9wIC1hbmNob3IgdyAtZmlsbCB4CisJCQl9CisJCQljIC0KKwkJCXQgeworCQkJCSR7TlN9OjpmcmFtZSAkdy4kZi4kb3B0aWQKKwkJCQkke05TfTo6bGFiZWwgJHcuJGYuJG9wdGlkLmwgLXRleHQgIiR0ZXh0OiIKKwkJCQkke05TfTo6ZW50cnkgJHcuJGYuJG9wdGlkLnYgXAorCQkJCQktd2lkdGggMjAgXAorCQkJCQktdGV4dHZhcmlhYmxlICR7Zn1fY29uZmlnX25ldygkbmFtZSkKKwkJCQlwYWNrICR3LiRmLiRvcHRpZC5sIC1zaWRlIGxlZnQgLWFuY2hvciB3CisJCQkJcGFjayAkdy4kZi4kb3B0aWQudiAtc2lkZSBsZWZ0IC1hbmNob3IgdyBcCisJCQkJCS1maWxsIHggLWV4cGFuZCAxIFwKKwkJCQkJLXBhZHggNQorCQkJCWlmIHskdHlwZSBlcSB7Y319IHsKKwkJCQkJbWVudSAkdy4kZi4kb3B0aWQubQorCQkJCQlidWlsZF9lbmNvZGluZ19tZW51ICR3LiRmLiRvcHRpZC5tIFwKKwkJCQkJCVtsaXN0IHNldCAke2Z9X2NvbmZpZ19uZXcoJG5hbWUpXSAxCisJCQkJCSR7TlN9OjpidXR0b24gJHcuJGYuJG9wdGlkLmIgXAorCQkJCQkJLXRleHQgW21jICJDaGFuZ2UiXSBcCisJCQkJCQktY29tbWFuZCBbbGlzdCBwb3B1cF9idG5fbWVudSBcCisJCQkJCQkJJHcuJGYuJG9wdGlkLm0gJHcuJGYuJG9wdGlkLmJdCisJCQkJCXBhY2sgJHcuJGYuJG9wdGlkLmIgLXNpZGUgbGVmdCAtYW5jaG9yIHcKKwkJCQl9CisJCQkJcGFjayAkdy4kZi4kb3B0aWQgLXNpZGUgdG9wIC1hbmNob3IgdyAtZmlsbCB4CisJCQl9CisJCQlzIHsKKwkJCQlzZXQgb3B0cyBbZXZhbCBbbGluZGV4ICRvcHRpb24gM11dCisJCQkJJHtOU306OmZyYW1lICR3LiRmLiRvcHRpZAorCQkJCSR7TlN9OjpsYWJlbCAkdy4kZi4kb3B0aWQubCAtdGV4dCAiJHRleHQ6IgorCQkJCWlmIHskdXNlX3R0a30geworCQkJCQl0dGs6OmNvbWJvYm94ICR3LiRmLiRvcHRpZC52IFwKKwkJCQkJCS10ZXh0dmFyaWFibGUgJHtmfV9jb25maWdfbmV3KCRuYW1lKSBcCisJCQkJCQktdmFsdWVzICRvcHRzIC1zdGF0ZSByZWFkb25seQorCQkJCX0gZWxzZSB7CisJCQkJCWV2YWwgdGtfb3B0aW9uTWVudSAkdy4kZi4kb3B0aWQudiBcCisJCQkJCQkke2Z9X2NvbmZpZ19uZXcoJG5hbWUpIFwKKwkJCQkJCSRvcHRzCisJCQkJfQorCQkJCXBhY2sgJHcuJGYuJG9wdGlkLmwgLXNpZGUgbGVmdCAtYW5jaG9yIHcgLWZpbGwgeAorCQkJCXBhY2sgJHcuJGYuJG9wdGlkLnYgLXNpZGUgcmlnaHQgLWFuY2hvciBlIC1wYWR4IDUKKwkJCQlwYWNrICR3LiRmLiRvcHRpZCAtc2lkZSB0b3AgLWFuY2hvciB3IC1maWxsIHgKKwkJCX0KKwkJCX0KKwkJfQorCX0KKworCXNldCBhbGxfZGljdHMgW2xpbnNlcnQgXAorCQlbc3BlbGxjaGVjazo6YXZhaWxhYmxlX2xhbmdzXSBcCisJCTAgXAorCQlub25lXQorCWluY3Igb3B0aWQKKwlmb3JlYWNoIGYge3JlcG8gZ2xvYmFsfSB7CisJCWlmIHshW2luZm8gZXhpc3RzICR7Zn1fY29uZmlnX25ldyhndWkuc3BlbGxpbmdkaWN0aW9uYXJ5KV19IHsKKwkJCWlmIHtbaW5mbyBleGlzdHMgdWlfY29tbV9zcGVsbF19IHsKKwkJCQlzZXQgdmFsdWUgWyR1aV9jb21tX3NwZWxsIGxhbmddCisJCQl9IGVsc2UgeworCQkJCXNldCB2YWx1ZSBub25lCisJCQl9CisJCQlzZXQgJHtmfV9jb25maWdfbmV3KGd1aS5zcGVsbGluZ2RpY3Rpb25hcnkpICR2YWx1ZQorCQl9CisKKwkJJHtOU306OmZyYW1lICR3LiRmLiRvcHRpZAorCQkke05TfTo6bGFiZWwgJHcuJGYuJG9wdGlkLmwgLXRleHQgW21jICJTcGVsbGluZyBEaWN0aW9uYXJ5OiJdCisJCWlmIHskdXNlX3R0a30geworCQkJdHRrOjpjb21ib2JveCAkdy4kZi4kb3B0aWQudiBcCisJCQkJLXRleHR2YXJpYWJsZSAke2Z9X2NvbmZpZ19uZXcoZ3VpLnNwZWxsaW5nZGljdGlvbmFyeSkgXAorCQkJCS12YWx1ZXMgJGFsbF9kaWN0cyAtc3RhdGUgcmVhZG9ubHkKKwkJfSBlbHNlIHsKKwkJCWV2YWwgdGtfb3B0aW9uTWVudSAkdy4kZi4kb3B0aWQudiBcCisJCQkJJHtmfV9jb25maWdfbmV3KGd1aS5zcGVsbGluZ2RpY3Rpb25hcnkpIFwKKwkJCQkkYWxsX2RpY3RzCisJCX0KKwkJcGFjayAkdy4kZi4kb3B0aWQubCAtc2lkZSBsZWZ0IC1hbmNob3IgdyAtZmlsbCB4CisJCXBhY2sgJHcuJGYuJG9wdGlkLnYgLXNpZGUgcmlnaHQgLWFuY2hvciBlIC1wYWR4IDUKKwkJcGFjayAkdy4kZi4kb3B0aWQgLXNpZGUgdG9wIC1hbmNob3IgdyAtZmlsbCB4CisJfQorCXVuc2V0IGFsbF9kaWN0cworCisJc2V0IGFsbF9mb250cyBbbHNvcnQgW2ZvbnQgZmFtaWxpZXNdXQorCWZvcmVhY2ggb3B0aW9uICRmb250X2Rlc2NzIHsKKwkJc2V0IG5hbWUgW2xpbmRleCAkb3B0aW9uIDBdCisJCXNldCBmb250IFtsaW5kZXggJG9wdGlvbiAxXQorCQlzZXQgdGV4dCBbZXZhbCBbbGluZGV4ICRvcHRpb24gMl1dCisKKwkJc2V0IGdsb2JhbF9jb25maWdfbmV3KGd1aS4kZm9udF5eZmFtaWx5KSBcCisJCQlbZm9udCBjb25maWd1cmUgJGZvbnQgLWZhbWlseV0KKwkJc2V0IGdsb2JhbF9jb25maWdfbmV3KGd1aS4kZm9udF5ec2l6ZSkgXAorCQkJW2ZvbnQgY29uZmlndXJlICRmb250IC1zaXplXQorCisJCSR7TlN9OjpmcmFtZSAkdy5nbG9iYWwuJG5hbWUKKwkJJHtOU306OmxhYmVsICR3Lmdsb2JhbC4kbmFtZS5sIC10ZXh0ICIkdGV4dDoiCisJCSR7TlN9OjpidXR0b24gJHcuZ2xvYmFsLiRuYW1lLmIgXAorCQkJLXRleHQgW21jICJDaGFuZ2UgRm9udCJdIFwKKwkJCS1jb21tYW5kIFtsaXN0IFwKKwkJCQl0Y2hvb3NlZm9udCBcCisJCQkJJHcgXAorCQkJCVttYyAiQ2hvb3NlICVzIiAkdGV4dF0gXAorCQkJCWdsb2JhbF9jb25maWdfbmV3KGd1aS4kZm9udF5eZmFtaWx5KSBcCisJCQkJZ2xvYmFsX2NvbmZpZ19uZXcoZ3VpLiRmb250Xl5zaXplKSBcCisJCQkJXQorCQkke05TfTo6bGFiZWwgJHcuZ2xvYmFsLiRuYW1lLmYgLXRleHR2YXJpYWJsZSBnbG9iYWxfY29uZmlnX25ldyhndWkuJGZvbnReXmZhbWlseSkKKwkJJHtOU306OmxhYmVsICR3Lmdsb2JhbC4kbmFtZS5zIC10ZXh0dmFyaWFibGUgZ2xvYmFsX2NvbmZpZ19uZXcoZ3VpLiRmb250Xl5zaXplKQorCQkke05TfTo6bGFiZWwgJHcuZ2xvYmFsLiRuYW1lLnB0IC10ZXh0IFttYyAicHQuIl0KKwkJcGFjayAkdy5nbG9iYWwuJG5hbWUubCAtc2lkZSBsZWZ0IC1hbmNob3IgdworCQlwYWNrICR3Lmdsb2JhbC4kbmFtZS5iIC1zaWRlIHJpZ2h0IC1hbmNob3IgZQorCQlwYWNrICR3Lmdsb2JhbC4kbmFtZS5wdCAtc2lkZSByaWdodCAtYW5jaG9yIHcKKwkJcGFjayAkdy5nbG9iYWwuJG5hbWUucyAtc2lkZSByaWdodCAtYW5jaG9yIHcKKwkJcGFjayAkdy5nbG9iYWwuJG5hbWUuZiAtc2lkZSByaWdodCAtYW5jaG9yIHcKKwkJcGFjayAkdy5nbG9iYWwuJG5hbWUgLXNpZGUgdG9wIC1hbmNob3IgdyAtZmlsbCB4CisJfQorCisJYmluZCAkdyA8VmlzaWJpbGl0eT4gImdyYWIgJHc7IGZvY3VzICR3LmJ1dHRvbnMuc2F2ZSIKKwliaW5kICR3IDxLZXktRXNjYXBlPiAiZGVzdHJveSAkdyIKKwliaW5kICR3IDxLZXktUmV0dXJuPiBbbGlzdCBkb19zYXZlX2NvbmZpZyAkd10KKworCWlmIHtbaXNfTWFjT1NYXX0geworCQlzZXQgdCBbbWMgIlByZWZlcmVuY2VzIl0KKwl9IGVsc2UgeworCQlzZXQgdCBbbWMgIk9wdGlvbnMiXQorCX0KKwl3bSB0aXRsZSAkdyAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogJHQiCisJd20gZGVpY29uaWZ5ICR3CisJdGt3YWl0IHdpbmRvdyAkdworfQorCitwcm9jIGRvX3Jlc3RvcmVfZGVmYXVsdHMge30geworCWdsb2JhbCBmb250X2Rlc2NzIGRlZmF1bHRfY29uZmlnIHJlcG9fY29uZmlnIHN5c3RlbV9jb25maWcKKwlnbG9iYWwgcmVwb19jb25maWdfbmV3IGdsb2JhbF9jb25maWdfbmV3CisKKwlmb3JlYWNoIG5hbWUgW2FycmF5IG5hbWVzIGRlZmF1bHRfY29uZmlnXSB7CisJCXNldCByZXBvX2NvbmZpZ19uZXcoJG5hbWUpICRzeXN0ZW1fY29uZmlnKCRuYW1lKQorCQlzZXQgZ2xvYmFsX2NvbmZpZ19uZXcoJG5hbWUpICRzeXN0ZW1fY29uZmlnKCRuYW1lKQorCX0KKworCWZvcmVhY2ggb3B0aW9uICRmb250X2Rlc2NzIHsKKwkJc2V0IG5hbWUgW2xpbmRleCAkb3B0aW9uIDBdCisJCXNldCByZXBvX2NvbmZpZyhndWkuJG5hbWUpICRzeXN0ZW1fY29uZmlnKGd1aS4kbmFtZSkKKwl9CisJYXBwbHlfY29uZmlnCisKKwlmb3JlYWNoIG9wdGlvbiAkZm9udF9kZXNjcyB7CisJCXNldCBuYW1lIFtsaW5kZXggJG9wdGlvbiAwXQorCQlzZXQgZm9udCBbbGluZGV4ICRvcHRpb24gMV0KKwkJc2V0IGdsb2JhbF9jb25maWdfbmV3KGd1aS4kZm9udF5eZmFtaWx5KSBcCisJCQlbZm9udCBjb25maWd1cmUgJGZvbnQgLWZhbWlseV0KKwkJc2V0IGdsb2JhbF9jb25maWdfbmV3KGd1aS4kZm9udF5ec2l6ZSkgXAorCQkJW2ZvbnQgY29uZmlndXJlICRmb250IC1zaXplXQorCX0KK30KKworcHJvYyBkb19zYXZlX2NvbmZpZyB7d30geworCWlmIHshW2NvbmZpZ19jaGVja19lbmNvZGluZ3NdfSByZXR1cm4KKwlpZiB7W2NhdGNoIHtzYXZlX2NvbmZpZ30gZXJyXX0geworCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiJdICJcblxuJGVyciJdCisJfQorCXJlc2hvd19kaWZmCisJZGVzdHJveSAkdworfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvcmVtb3RlLnRjbCBiL2dpdC1ndWkvbGliL3JlbW90ZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU1Yzc4NAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL3JlbW90ZS50Y2wKQEAgLTAsMCArMSwzMzMgQEAKKyMgZ2l0LWd1aSByZW1vdGUgbWFuYWdlbWVudAorIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgU2hhd24gUGVhcmNlCisKK3NldCBzb21lX2hlYWRzX3RyYWNraW5nIDA7ICAjIGFzc3VtZSBub3QKKworcHJvYyBpc190cmFja2luZ19icmFuY2gge25hbWV9IHsKKwlnbG9iYWwgdHJhY2tpbmdfYnJhbmNoZXMKKwlmb3JlYWNoIHNwZWMgJHRyYWNraW5nX2JyYW5jaGVzIHsKKwkJc2V0IHQgW2xpbmRleCAkc3BlYyAwXQorCQlpZiB7JHQgZXEgJG5hbWUgfHwgW3N0cmluZyBtYXRjaCAkdCAkbmFtZV19IHsKKwkJCXJldHVybiAxCisJCX0KKwl9CisJcmV0dXJuIDAKK30KKworcHJvYyBhbGxfdHJhY2tpbmdfYnJhbmNoZXMge30geworCWdsb2JhbCB0cmFja2luZ19icmFuY2hlcworCisJc2V0IGFsbCBbbGlzdF0KKwlzZXQgcGF0IFtsaXN0XQorCXNldCBjbWQgW2xpc3RdCisKKwlmb3JlYWNoIHNwZWMgJHRyYWNraW5nX2JyYW5jaGVzIHsKKwkJc2V0IGRzdCBbbGluZGV4ICRzcGVjIDBdCisJCWlmIHtbc3RyaW5nIHJhbmdlICRkc3QgZW5kLTEgZW5kXSBlcSB7Lyp9fSB7CisJCQlsYXBwZW5kIHBhdCAkc3BlYworCQkJbGFwcGVuZCBjbWQgW3N0cmluZyByYW5nZSAkZHN0IDAgZW5kLTJdCisJCX0gZWxzZSB7CisJCQlsYXBwZW5kIGFsbCAkc3BlYworCQl9CisJfQorCisJaWYgeyRwYXQgbmUge319IHsKKwkJc2V0IGZkIFtldmFsIGdpdF9yZWFkIGZvci1lYWNoLXJlZiAtLWZvcm1hdD0lKHJlZm5hbWUpICRjbWRdCisJCXdoaWxlIHtbZ2V0cyAkZmQgbl0gPiAwfSB7CisJCQlmb3JlYWNoIHNwZWMgJHBhdCB7CisJCQkJc2V0IGRzdCBbc3RyaW5nIHJhbmdlIFtsaW5kZXggJHNwZWMgMF0gMCBlbmQtMl0KKwkJCQlzZXQgbGVuIFtzdHJpbmcgbGVuZ3RoICRkc3RdCisJCQkJaWYge1tzdHJpbmcgZXF1YWwgLWxlbmd0aCAkbGVuICRkc3QgJG5dfSB7CisJCQkJCXNldCBzcmMgW3N0cmluZyByYW5nZSBbbGluZGV4ICRzcGVjIDJdIDAgZW5kLTJdCisJCQkJCXNldCBzcGVjIFtsaXN0IFwKKwkJCQkJCSRuIFwKKwkJCQkJCVtsaW5kZXggJHNwZWMgMV0gXAorCQkJCQkJJHNyY1tzdHJpbmcgcmFuZ2UgJG4gJGxlbiBlbmRdIFwKKwkJCQkJCV0KKwkJCQkJbGFwcGVuZCBhbGwgJHNwZWMKKwkJCQl9CisJCQl9CisJCX0KKwkJY2xvc2UgJGZkCisJfQorCisJcmV0dXJuIFtsc29ydCAtaW5kZXggMCAtdW5pcXVlICRhbGxdCit9CisKK3Byb2MgbG9hZF9hbGxfcmVtb3RlcyB7fSB7CisJZ2xvYmFsIHJlcG9fY29uZmlnCisJZ2xvYmFsIGFsbF9yZW1vdGVzIHRyYWNraW5nX2JyYW5jaGVzIHNvbWVfaGVhZHNfdHJhY2tpbmcKKwlnbG9iYWwgcmVtb3RlX3VybAorCisJc2V0IHNvbWVfaGVhZHNfdHJhY2tpbmcgMAorCXNldCBhbGxfcmVtb3RlcyBbbGlzdF0KKwlzZXQgdHJjayBbbGlzdF0KKworCXNldCByaF9zdHIgcmVmcy9oZWFkcy8KKwlzZXQgcmhfbGVuIFtzdHJpbmcgbGVuZ3RoICRyaF9zdHJdCisJc2V0IHJtX2RpciBbZ2l0ZGlyIHJlbW90ZXNdCisJaWYge1tmaWxlIGlzZGlyZWN0b3J5ICRybV9kaXJdfSB7CisJCXNldCBhbGxfcmVtb3RlcyBbZ2xvYiBcCisJCQktdHlwZXMgZiBcCisJCQktdGFpbHMgXAorCQkJLW5vY29tcGxhaW4gXAorCQkJLWRpcmVjdG9yeSAkcm1fZGlyICpdCisKKwkJZm9yZWFjaCBuYW1lICRhbGxfcmVtb3RlcyB7CisJCQljYXRjaCB7CisJCQkJc2V0IGZkIFtvcGVuIFtmaWxlIGpvaW4gJHJtX2RpciAkbmFtZV0gcl0KKwkJCQl3aGlsZSB7W2dldHMgJGZkIGxpbmVdID49IDB9IHsKKwkJCQkJaWYge1tyZWdleHAge15VUkw6WyAJXSooLispJH0gJGxpbmUgbGluZSB1cmxdfSB7CisJCQkJCQlzZXQgcmVtb3RlX3VybCgkbmFtZSkgJHVybAorCQkJCQkJY29udGludWUKKwkJCQkJfQorCQkJCQlpZiB7IVtyZWdleHAge15QdWxsOlsgCV0qKFteOl0rKTooLispJH0gXAorCQkJCQkJJGxpbmUgbGluZSBzcmMgZHN0XX0gY29udGludWUKKwkJCQkJaWYge1tzdHJpbmcgaW5kZXggJHNyYyAwXSBlcSB7K319IHsKKwkJCQkJCXNldCBzcmMgW3N0cmluZyByYW5nZSAkc3JjIDEgZW5kXQorCQkJCQl9CisJCQkJCWlmIHshW3N0cmluZyBlcXVhbCAtbGVuZ3RoIDUgcmVmcy8gJHNyY119IHsKKwkJCQkJCXNldCBzcmMgJHJoX3N0ciRzcmMKKwkJCQkJfQorCQkJCQlpZiB7IVtzdHJpbmcgZXF1YWwgLWxlbmd0aCA1IHJlZnMvICRkc3RdfSB7CisJCQkJCQlzZXQgZHN0ICRyaF9zdHIkZHN0CisJCQkJCX0KKwkJCQkJaWYge1tzdHJpbmcgZXF1YWwgLWxlbmd0aCAkcmhfbGVuICRyaF9zdHIgJGRzdF19IHsKKwkJCQkJCXNldCBzb21lX2hlYWRzX3RyYWNraW5nIDEKKwkJCQkJfQorCQkJCQlsYXBwZW5kIHRyY2sgW2xpc3QgJGRzdCAkbmFtZSAkc3JjXQorCQkJCX0KKwkJCQljbG9zZSAkZmQKKwkJCX0KKwkJfQorCX0KKworCWZvcmVhY2ggbGluZSBbYXJyYXkgbmFtZXMgcmVwb19jb25maWcgcmVtb3RlLioudXJsXSB7CisJCWlmIHshW3JlZ2V4cCBecmVtb3RlXC4oLiopXC51cmxcJCAkbGluZSBsaW5lIG5hbWVdfSBjb250aW51ZQorCQlsYXBwZW5kIGFsbF9yZW1vdGVzICRuYW1lCisJCXNldCByZW1vdGVfdXJsKCRuYW1lKSAkcmVwb19jb25maWcocmVtb3RlLiRuYW1lLnVybCkKKworCQlpZiB7W2NhdGNoIHtzZXQgZmwgJHJlcG9fY29uZmlnKHJlbW90ZS4kbmFtZS5mZXRjaCl9XX0geworCQkJc2V0IGZsIHt9CisJCX0KKwkJZm9yZWFjaCBsaW5lICRmbCB7CisJCQlpZiB7IVtyZWdleHAge14oW146XSspOiguKykkfSAkbGluZSBsaW5lIHNyYyBkc3RdfSBjb250aW51ZQorCQkJaWYge1tzdHJpbmcgaW5kZXggJHNyYyAwXSBlcSB7K319IHsKKwkJCQlzZXQgc3JjIFtzdHJpbmcgcmFuZ2UgJHNyYyAxIGVuZF0KKwkJCX0KKwkJCWlmIHshW3N0cmluZyBlcXVhbCAtbGVuZ3RoIDUgcmVmcy8gJHNyY119IHsKKwkJCQlzZXQgc3JjICRyaF9zdHIkc3JjCisJCQl9CisJCQlpZiB7IVtzdHJpbmcgZXF1YWwgLWxlbmd0aCA1IHJlZnMvICRkc3RdfSB7CisJCQkJc2V0IGRzdCAkcmhfc3RyJGRzdAorCQkJfQorCQkJaWYge1tzdHJpbmcgZXF1YWwgLWxlbmd0aCAkcmhfbGVuICRyaF9zdHIgJGRzdF19IHsKKwkJCQlzZXQgc29tZV9oZWFkc190cmFja2luZyAxCisJCQl9CisJCQlsYXBwZW5kIHRyY2sgW2xpc3QgJGRzdCAkbmFtZSAkc3JjXQorCQl9CisJfQorCisJc2V0IHRyYWNraW5nX2JyYW5jaGVzIFtsc29ydCAtaW5kZXggMCAtdW5pcXVlICR0cmNrXQorCXNldCBhbGxfcmVtb3RlcyBbbHNvcnQgLXVuaXF1ZSAkYWxsX3JlbW90ZXNdCit9CisKK3Byb2MgYWRkX2ZldGNoX2VudHJ5IHtyfSB7CisJZ2xvYmFsIHJlcG9fY29uZmlnCisJc2V0IHJlbW90ZV9tIC5tYmFyLnJlbW90ZQorCXNldCBmZXRjaF9tICRyZW1vdGVfbS5mZXRjaAorCXNldCBwcnVuZV9tICRyZW1vdGVfbS5wcnVuZQorCXNldCByZW1vdmVfbSAkcmVtb3RlX20ucmVtb3ZlCisJc2V0IGVuYWJsZSAwCisJaWYgeyFbY2F0Y2gge3NldCBhICRyZXBvX2NvbmZpZyhyZW1vdGUuJHIudXJsKX1dfSB7CisJCWlmIHshW2NhdGNoIHtzZXQgYSAkcmVwb19jb25maWcocmVtb3RlLiRyLmZldGNoKX1dfSB7CisJCQlzZXQgZW5hYmxlIDEKKwkJfQorCX0gZWxzZSB7CisJCWNhdGNoIHsKKwkJCXNldCBmZCBbb3BlbiBbZ2l0ZGlyIHJlbW90ZXMgJHJdIHJdCisJCQl3aGlsZSB7W2dldHMgJGZkIG5dID49IDB9IHsKKwkJCQlpZiB7W3JlZ2V4cCB7XlB1bGw6WyBcdF0qKFteOl0rKTp9ICRuXX0geworCQkJCQlzZXQgZW5hYmxlIDEKKwkJCQkJYnJlYWsKKwkJCQl9CisJCQl9CisJCQljbG9zZSAkZmQKKwkJfQorCX0KKworCWlmIHskZW5hYmxlfSB7CisJCW1ha2Vfc3VyZV9yZW1vdGVfc3VibWVudWVzX2V4aXN0ICRyZW1vdGVfbQorCisJCSRmZXRjaF9tIGFkZCBjb21tYW5kIFwKKwkJCS1sYWJlbCAkciBcCisJCQktY29tbWFuZCBbbGlzdCBmZXRjaF9mcm9tICRyXQorCQkkcHJ1bmVfbSBhZGQgY29tbWFuZCBcCisJCQktbGFiZWwgJHIgXAorCQkJLWNvbW1hbmQgW2xpc3QgcHJ1bmVfZnJvbSAkcl0KKwkJJHJlbW92ZV9tIGFkZCBjb21tYW5kIFwKKwkJCS1sYWJlbCAkciBcCisJCQktY29tbWFuZCBbbGlzdCByZW1vdmVfcmVtb3RlICRyXQorCX0KK30KKworcHJvYyBhZGRfcHVzaF9lbnRyeSB7cn0geworCWdsb2JhbCByZXBvX2NvbmZpZworCXNldCByZW1vdGVfbSAubWJhci5yZW1vdGUKKwlzZXQgcHVzaF9tICRyZW1vdGVfbS5wdXNoCisJc2V0IGVuYWJsZSAwCisJaWYgeyFbY2F0Y2gge3NldCBhICRyZXBvX2NvbmZpZyhyZW1vdGUuJHIudXJsKX1dfSB7CisJCWlmIHshW2NhdGNoIHtzZXQgYSAkcmVwb19jb25maWcocmVtb3RlLiRyLnB1c2gpfV19IHsKKwkJCXNldCBlbmFibGUgMQorCQl9CisJfSBlbHNlIHsKKwkJY2F0Y2ggeworCQkJc2V0IGZkIFtvcGVuIFtnaXRkaXIgcmVtb3RlcyAkcl0gcl0KKwkJCXdoaWxlIHtbZ2V0cyAkZmQgbl0gPj0gMH0geworCQkJCWlmIHtbcmVnZXhwIHteUHVzaDpbIFx0XSooW146XSspOn0gJG5dfSB7CisJCQkJCXNldCBlbmFibGUgMQorCQkJCQlicmVhaworCQkJCX0KKwkJCX0KKwkJCWNsb3NlICRmZAorCQl9CisJfQorCisJaWYgeyRlbmFibGV9IHsKKwkJaWYgeyFbd2luZm8gZXhpc3RzICRwdXNoX21dfSB7CisJCQltZW51ICRwdXNoX20KKwkJCSRyZW1vdGVfbSBpbnNlcnQgMCBjYXNjYWRlIFwKKwkJCQktbGFiZWwgW21jICJQdXNoIHRvIl0gXAorCQkJCS1tZW51ICRwdXNoX20KKwkJfQorCisJCSRwdXNoX20gYWRkIGNvbW1hbmQgXAorCQkJLWxhYmVsICRyIFwKKwkJCS1jb21tYW5kIFtsaXN0IHB1c2hfdG8gJHJdCisJfQorfQorCitwcm9jIG1ha2Vfc3VyZV9yZW1vdGVfc3VibWVudWVzX2V4aXN0IHtyZW1vdGVfbX0geworCXNldCBmZXRjaF9tICRyZW1vdGVfbS5mZXRjaAorCXNldCBwcnVuZV9tICRyZW1vdGVfbS5wcnVuZQorCXNldCByZW1vdmVfbSAkcmVtb3RlX20ucmVtb3ZlCisKKwlpZiB7IVt3aW5mbyBleGlzdHMgJGZldGNoX21dfSB7CisJCW1lbnUgJHJlbW92ZV9tCisJCSRyZW1vdGVfbSBpbnNlcnQgMCBjYXNjYWRlIFwKKwkJCS1sYWJlbCBbbWMgIlJlbW92ZSBSZW1vdGUiXSBcCisJCQktbWVudSAkcmVtb3ZlX20KKworCQltZW51ICRwcnVuZV9tCisJCSRyZW1vdGVfbSBpbnNlcnQgMCBjYXNjYWRlIFwKKwkJCS1sYWJlbCBbbWMgIlBydW5lIGZyb20iXSBcCisJCQktbWVudSAkcHJ1bmVfbQorCisJCW1lbnUgJGZldGNoX20KKwkJJHJlbW90ZV9tIGluc2VydCAwIGNhc2NhZGUgXAorCQkJLWxhYmVsIFttYyAiRmV0Y2ggZnJvbSJdIFwKKwkJCS1tZW51ICRmZXRjaF9tCisJfQorfQorCitwcm9jIHVwZGF0ZV9hbGxfcmVtb3Rlc19tZW51X2VudHJ5IHt9IHsKKwlnbG9iYWwgYWxsX3JlbW90ZXMKKworCWlmIHtbZ2l0LXZlcnNpb24gPCAxLjYuNl19IHsgcmV0dXJuIH0KKworCXNldCBoYXZlX3JlbW90ZSAwCisJZm9yZWFjaCByICRhbGxfcmVtb3RlcyB7CisJCWluY3IgaGF2ZV9yZW1vdGUKKwl9CisKKwlzZXQgcmVtb3RlX20gLm1iYXIucmVtb3RlCisJc2V0IGZldGNoX20gJHJlbW90ZV9tLmZldGNoCisJc2V0IHBydW5lX20gJHJlbW90ZV9tLnBydW5lCisJaWYgeyRoYXZlX3JlbW90ZSA+IDF9IHsKKwkJbWFrZV9zdXJlX3JlbW90ZV9zdWJtZW51ZXNfZXhpc3QgJHJlbW90ZV9tCisJCWlmIHtbJGZldGNoX20gdHlwZSBlbmRdIGVxICJjb21tYW5kIiBcCisJCQkmJiBbJGZldGNoX20gZW50cnljZ2V0IGVuZCAtbGFiZWxdIG5lICJBbGwifSB7CisKKwkJCSRmZXRjaF9tIGluc2VydCBlbmQgc2VwYXJhdG9yCisJCQkkZmV0Y2hfbSBpbnNlcnQgZW5kIGNvbW1hbmQgXAorCQkJCS1sYWJlbCAiQWxsIiBcCisJCQkJLWNvbW1hbmQgZmV0Y2hfZnJvbV9hbGwKKworCQkJJHBydW5lX20gaW5zZXJ0IGVuZCBzZXBhcmF0b3IKKwkJCSRwcnVuZV9tIGluc2VydCBlbmQgY29tbWFuZCBcCisJCQkJLWxhYmVsICJBbGwiIFwKKwkJCQktY29tbWFuZCBwcnVuZV9mcm9tX2FsbAorCQl9CisJfSBlbHNlIHsKKwkJaWYge1t3aW5mbyBleGlzdHMgJGZldGNoX21dfSB7CisJCQlpZiB7WyRmZXRjaF9tIHR5cGUgZW5kXSBlcSAiY29tbWFuZCIgXAorCQkJCSYmIFskZmV0Y2hfbSBlbnRyeWNnZXQgZW5kIC1sYWJlbF0gZXEgIkFsbCJ9IHsKKworCQkJCWRlbGV0ZV9mcm9tX21lbnUgJGZldGNoX20gZW5kCisJCQkJZGVsZXRlX2Zyb21fbWVudSAkZmV0Y2hfbSBlbmQKKworCQkJCWRlbGV0ZV9mcm9tX21lbnUgJHBydW5lX20gZW5kCisJCQkJZGVsZXRlX2Zyb21fbWVudSAkcHJ1bmVfbSBlbmQKKwkJCX0KKwkJfQorCX0KK30KKworcHJvYyBwb3B1bGF0ZV9yZW1vdGVzX21lbnUge30geworCWdsb2JhbCBhbGxfcmVtb3RlcworCisJZm9yZWFjaCByICRhbGxfcmVtb3RlcyB7CisJCWFkZF9mZXRjaF9lbnRyeSAkcgorCQlhZGRfcHVzaF9lbnRyeSAkcgorCX0KKworCXVwZGF0ZV9hbGxfcmVtb3Rlc19tZW51X2VudHJ5Cit9CisKK3Byb2MgYWRkX3NpbmdsZV9yZW1vdGUge25hbWUgbG9jYXRpb259IHsKKwlnbG9iYWwgYWxsX3JlbW90ZXMgcmVwb19jb25maWcKKwlsYXBwZW5kIGFsbF9yZW1vdGVzICRuYW1lCisKKwlnaXQgcmVtb3RlIGFkZCAkbmFtZSAkbG9jYXRpb24KKworCSMgWFhYOiBCZXR0ZXIgcmUtcmVhZCB0aGUgY29uZmlnIHNvIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgb3V0CisJIyBvZiBzeW5jIHdpdGggZ2l0IHJlbW90ZSBpbXBsZW1lbnRhdGlvbj8KKwlzZXQgcmVwb19jb25maWcocmVtb3RlLiRuYW1lLnVybCkgJGxvY2F0aW9uCisJc2V0IHJlcG9fY29uZmlnKHJlbW90ZS4kbmFtZS5mZXRjaCkgIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzLyRuYW1lLyoiCisKKwlhZGRfZmV0Y2hfZW50cnkgJG5hbWUKKwlhZGRfcHVzaF9lbnRyeSAkbmFtZQorCisJdXBkYXRlX2FsbF9yZW1vdGVzX21lbnVfZW50cnkKK30KKworcHJvYyBkZWxldGVfZnJvbV9tZW51IHttZW51IG5hbWV9IHsKKwlpZiB7W3dpbmZvIGV4aXN0cyAkbWVudV19IHsKKwkJJG1lbnUgZGVsZXRlICRuYW1lCisJfQorfQorCitwcm9jIHJlbW92ZV9yZW1vdGUge25hbWV9IHsKKwlnbG9iYWwgYWxsX3JlbW90ZXMgcmVwb19jb25maWcKKworCWdpdCByZW1vdGUgcm0gJG5hbWUKKworCWNhdGNoIHsKKwkJIyBNaXNzaW5nIHZhbHVlcyBhcmUgb2sKKwkJdW5zZXQgcmVwb19jb25maWcocmVtb3RlLiRuYW1lLnVybCkKKwkJdW5zZXQgcmVwb19jb25maWcocmVtb3RlLiRuYW1lLmZldGNoKQorCQl1bnNldCByZXBvX2NvbmZpZyhyZW1vdGUuJG5hbWUucHVzaCkKKwl9CisKKwlzZXQgaSBbbHNlYXJjaCAtZXhhY3QgJGFsbF9yZW1vdGVzICRuYW1lXQorCXNldCBhbGxfcmVtb3RlcyBbbHJlcGxhY2UgJGFsbF9yZW1vdGVzICRpICRpXQorCisJc2V0IHJlbW90ZV9tIC5tYmFyLnJlbW90ZQorCWRlbGV0ZV9mcm9tX21lbnUgJHJlbW90ZV9tLmZldGNoICRuYW1lCisJZGVsZXRlX2Zyb21fbWVudSAkcmVtb3RlX20ucHJ1bmUgJG5hbWUKKwlkZWxldGVfZnJvbV9tZW51ICRyZW1vdGVfbS5yZW1vdmUgJG5hbWUKKwkjIE5vdCBhbGwgcmVtb3RlcyBhcmUgaW4gdGhlIHB1c2ggbWVudQorCWNhdGNoIHsgZGVsZXRlX2Zyb21fbWVudSAkcmVtb3RlX20ucHVzaCAkbmFtZSB9CisKKwl1cGRhdGVfYWxsX3JlbW90ZXNfbWVudV9lbnRyeQorfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvcmVtb3RlX2FkZC50Y2wgYi9naXQtZ3VpL2xpYi9yZW1vdGVfYWRkLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDAyOWQwCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvcmVtb3RlX2FkZC50Y2wKQEAgLTAsMCArMSwxOTAgQEAKKyMgZ2l0LWd1aSByZW1vdGUgYWRkaW5nIHN1cHBvcnQKKyMgQ29weXJpZ2h0IChDKSAyMDA4IFBldHIgQmF1ZGlzCisKK2NsYXNzIHJlbW90ZV9hZGQgeworCitmaWVsZCB3ICAgICAgICAgICAgICA7ICMgd2lkZ2V0IHBhdGgKK2ZpZWxkIHdfbmFtZSAgICAgICAgIDsgIyBuZXcgcmVtb3RlIG5hbWUgd2lkZ2V0CitmaWVsZCB3X2xvYyAgICAgICAgICA7ICMgbmV3IHJlbW90ZSBsb2NhdGlvbiB3aWRnZXQKKworZmllbGQgbmFtZSAgICAgICAgIHt9OyAjIG5hbWUgb2YgdGhlIHJlbW90ZSB0aGUgdXNlciBoYXMgY2hvc2VuCitmaWVsZCBsb2NhdGlvbiAgICAge307ICMgbG9jYXRpb24gb2YgdGhlIHJlbW90ZSB0aGUgdXNlciBoYXMgY2hvc2VuCisKK2ZpZWxkIG9wdF9hY3Rpb24gZmV0Y2g7ICMgYWN0aW9uIHRvIGRvIGFmdGVyIHJlZ2lzdGVyaW5nIHRoZSByZW1vdGUgbG9jYWxseQorCitjb25zdHJ1Y3RvciBkaWFsb2cge30geworCWdsb2JhbCByZXBvX2NvbmZpZyB1c2VfdHRrIE5TCisKKwltYWtlX2RpYWxvZyB0b3AgdworCXdtIHdpdGhkcmF3ICR0b3AKKwl3bSB0aXRsZSAkdG9wIFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJBZGQgUmVtb3RlIl1dCisJaWYgeyR0b3AgbmUgey59fSB7CisJCXdtIGdlb21ldHJ5ICR0b3AgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgorCX0KKworCSR7TlN9OjpsYWJlbCAkdy5oZWFkZXIgLXRleHQgW21jICJBZGQgTmV3IFJlbW90ZSJdIFwKKwkJLWZvbnQgZm9udF91aWJvbGQgLWFuY2hvciBjZW50ZXIKKwlwYWNrICR3LmhlYWRlciAtc2lkZSB0b3AgLWZpbGwgeAorCisJJHtOU306OmZyYW1lICR3LmJ1dHRvbnMKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY3JlYXRlIC10ZXh0IFttYyBBZGRdIFwKKwkJLWRlZmF1bHQgYWN0aXZlIFwKKwkJLWNvbW1hbmQgW2NiIF9hZGRdCisJcGFjayAkdy5idXR0b25zLmNyZWF0ZSAtc2lkZSByaWdodAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gXAorCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQorCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQorCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAorCisJJHtOU306OmxhYmVsZnJhbWUgJHcuZGVzYyAtdGV4dCBbbWMgIlJlbW90ZSBEZXRhaWxzIl0KKworCSR7TlN9OjpsYWJlbCAkdy5kZXNjLm5hbWVfbCAtdGV4dCBbbWMgIk5hbWU6Il0KKwlzZXQgd19uYW1lICR3LmRlc2MubmFtZV90CisJJHtOU306OmVudHJ5ICR3X25hbWUgXAorCQktd2lkdGggNDAgXAorCQktdGV4dHZhcmlhYmxlIEBuYW1lIFwKKwkJLXZhbGlkYXRlIGtleSBcCisJCS12YWxpZGF0ZWNvbW1hbmQgW2NiIF92YWxpZGF0ZV9uYW1lICVkICVTXQorCWdyaWQgJHcuZGVzYy5uYW1lX2wgJHdfbmFtZSAtc3RpY2t5IHdlIC1wYWR4IHswIDV9CisKKwkke05TfTo6bGFiZWwgJHcuZGVzYy5sb2NfbCAtdGV4dCBbbWMgIkxvY2F0aW9uOiJdCisJc2V0IHdfbG9jICR3LmRlc2MubG9jX3QKKwkke05TfTo6ZW50cnkgJHdfbG9jIFwKKwkJLXdpZHRoIDQwIFwKKwkJLXRleHR2YXJpYWJsZSBAbG9jYXRpb24KKwlncmlkICR3LmRlc2MubG9jX2wgJHdfbG9jIC1zdGlja3kgd2UgLXBhZHggezAgNX0KKworCWdyaWQgY29sdW1uY29uZmlndXJlICR3LmRlc2MgMSAtd2VpZ2h0IDEKKwlwYWNrICR3LmRlc2MgLWFuY2hvciBudyAtZmlsbCB4IC1wYWR5IDUgLXBhZHggNQorCisJJHtOU306OmxhYmVsZnJhbWUgJHcuYWN0aW9uIC10ZXh0IFttYyAiRnVydGhlciBBY3Rpb24iXQorCisJJHtOU306OnJhZGlvYnV0dG9uICR3LmFjdGlvbi5mZXRjaCBcCisJCS10ZXh0IFttYyAiRmV0Y2ggSW1tZWRpYXRlbHkiXSBcCisJCS12YWx1ZSBmZXRjaCBcCisJCS12YXJpYWJsZSBAb3B0X2FjdGlvbgorCXBhY2sgJHcuYWN0aW9uLmZldGNoIC1hbmNob3IgbncKKworCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5hY3Rpb24ucHVzaCBcCisJCS10ZXh0IFttYyAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCJdIFwKKwkJLXZhbHVlIHB1c2ggXAorCQktdmFyaWFibGUgQG9wdF9hY3Rpb24KKwlwYWNrICR3LmFjdGlvbi5wdXNoIC1hbmNob3IgbncKKworCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5hY3Rpb24ubm9uZSBcCisJCS10ZXh0IFttYyAiRG8gTm90aGluZyBFbHNlIE5vdyJdIFwKKwkJLXZhbHVlIG5vbmUgXAorCQktdmFyaWFibGUgQG9wdF9hY3Rpb24KKwlwYWNrICR3LmFjdGlvbi5ub25lIC1hbmNob3IgbncKKworCWdyaWQgY29sdW1uY29uZmlndXJlICR3LmFjdGlvbiAxIC13ZWlnaHQgMQorCXBhY2sgJHcuYWN0aW9uIC1hbmNob3IgbncgLWZpbGwgeCAtcGFkeSA1IC1wYWR4IDUKKworCWJpbmQgJHcgPFZpc2liaWxpdHk+IFtjYiBfdmlzaWJsZV0KKwliaW5kICR3IDxLZXktRXNjYXBlPiBbbGlzdCBkZXN0cm95ICR3XQorCWJpbmQgJHcgPEtleS1SZXR1cm4+IFtjYiBfYWRkXVw7YnJlYWsKKwl3bSBkZWljb25pZnkgJHRvcAorCXRrd2FpdCB3aW5kb3cgJHcKK30KKworbWV0aG9kIF9hZGQge30geworCWdsb2JhbCByZXBvX2NvbmZpZyBlbnYKKwlnbG9iYWwgTTFCCisKKwlpZiB7JG5hbWUgZXEge319IHsKKwkJdGtfbWVzc2FnZUJveCBcCisJCQktaWNvbiBlcnJvciBcCisJCQktdHlwZSBvayBcCisJCQktdGl0bGUgW3dtIHRpdGxlICR3XSBcCisJCQktcGFyZW50ICR3IFwKKwkJCS1tZXNzYWdlIFttYyAiUGxlYXNlIHN1cHBseSBhIHJlbW90ZSBuYW1lLiJdCisJCWZvY3VzICR3X25hbWUKKwkJcmV0dXJuCisJfQorCisJIyBYWFg6IFdlIGFidXNlIGNoZWNrLXJlZi1mb3JtYXQgaGVyZSwgYnV0CisJIyB0aGF0IHNob3VsZCBiZSBvay4KKwlpZiB7W2NhdGNoIHtnaXQgY2hlY2stcmVmLWZvcm1hdCAicmVtb3Rlcy8kbmFtZSJ9XX0geworCQl0a19tZXNzYWdlQm94IFwKKwkJCS1pY29uIGVycm9yIFwKKwkJCS10eXBlIG9rIFwKKwkJCS10aXRsZSBbd20gdGl0bGUgJHddIFwKKwkJCS1wYXJlbnQgJHcgXAorCQkJLW1lc3NhZ2UgW21jICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIgJG5hbWVdCisJCWZvY3VzICR3X25hbWUKKwkJcmV0dXJuCisJfQorCisJaWYge1tjYXRjaCB7YWRkX3NpbmdsZV9yZW1vdGUgJG5hbWUgJGxvY2F0aW9ufV19IHsKKwkJdGtfbWVzc2FnZUJveCBcCisJCQktaWNvbiBlcnJvciBcCisJCQktdHlwZSBvayBcCisJCQktdGl0bGUgW3dtIHRpdGxlICR3XSBcCisJCQktcGFyZW50ICR3IFwKKwkJCS1tZXNzYWdlIFttYyAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIgJG5hbWUgJGxvY2F0aW9uXQorCQlmb2N1cyAkd19uYW1lCisJCXJldHVybgorCX0KKworCXN3aXRjaCAtLSAkb3B0X2FjdGlvbiB7CisJZmV0Y2ggeworCQlzZXQgYyBbY29uc29sZTo6bmV3IFwKKwkJCVttYyAiZmV0Y2ggJXMiICRuYW1lXSBcCisJCQlbbWMgIkZldGNoaW5nIHRoZSAlcyIgJG5hbWVdXQorCQljb25zb2xlOjpleGVjICRjIFtsaXN0IGdpdCBmZXRjaCAkbmFtZV0KKwl9CisJcHVzaCB7CisJCXNldCBjbWRzIFtsaXN0XQorCisJCSMgUGFyc2UgdGhlIGxvY2F0aW9uCisJCWlmIHsgW3JlZ2V4cCB7KD86Z2l0XCspP3NzaDovLyhbXi9dKykoLy4rKX0gJGxvY2F0aW9uIHh4IGhvc3QgcGF0aF0KKwkJICAgICB8fCBbcmVnZXhwIHsoW146XVteOl0rKTooLispfSAkbG9jYXRpb24geHggaG9zdCBwYXRoXX0geworCQkJc2V0IHNzaCBzc2gKKwkJCWlmIHtbaW5mbyBleGlzdHMgZW52KEdJVF9TU0gpXX0geworCQkJCXNldCBzc2ggJGVudihHSVRfU1NIKQorCQkJfQorCQkJbGFwcGVuZCBjbWRzIFtsaXN0IGV4ZWMgJHNzaCAkaG9zdCBta2RpciAtcCAkbG9jYXRpb24gJiYgZ2l0IC0tZ2l0LWRpcj0kcGF0aCBpbml0IC0tYmFyZV0KKwkJfSBlbHNlaWYgeyAhIFtyZWdleHAgezovL30gJGxvY2F0aW9uIHh4XSB9IHsKKwkJCWxhcHBlbmQgY21kcyBbbGlzdCBleGVjIG1rZGlyIC1wICRsb2NhdGlvbl0KKwkJCWxhcHBlbmQgY21kcyBbbGlzdCBleGVjIGdpdCAtLWdpdC1kaXI9JGxvY2F0aW9uIGluaXQgLS1iYXJlXQorCQl9IGVsc2UgeworCQkJdGtfbWVzc2FnZUJveCBcCisJCQkJLWljb24gZXJyb3IgXAorCQkJCS10eXBlIG9rIFwKKwkJCQktdGl0bGUgW3dtIHRpdGxlICR3XSBcCisJCQkJLXBhcmVudCAkdyBcCisJCQkJLW1lc3NhZ2UgW21jICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIiAkbG9jYXRpb25dCisJCQlkZXN0cm95ICR3CisJCQlyZXR1cm4KKwkJfQorCisJCXNldCBjIFtjb25zb2xlOjpuZXcgXAorCQkJW21jICJwdXNoICVzIiAkbmFtZV0gXAorCQkJW21jICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIiAkbmFtZSAkbG9jYXRpb25dXQorCisJCWxhcHBlbmQgY21kcyBbbGlzdCBleGVjIGdpdCBwdXNoIC12IC0tYWxsICRuYW1lXQorCQljb25zb2xlOjpjaGFpbiAkYyAkY21kcworCX0KKwlub25lIHsKKwl9CisJfQorCisJZGVzdHJveSAkdworfQorCittZXRob2QgX3ZhbGlkYXRlX25hbWUge2QgU30geworCWlmIHskZCA9PSAxfSB7CisJCWlmIHtbcmVnZXhwIHtbfl46PypcW1wwLSBdfSAkU119IHsKKwkJCXJldHVybiAwCisJCX0KKwl9CisJcmV0dXJuIDEKK30KKworbWV0aG9kIF92aXNpYmxlIHt9IHsKKwlncmFiICR3CisJJHdfbmFtZSBpY3Vyc29yIGVuZAorCWZvY3VzICR3X25hbWUKK30KKworfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsIGIvZ2l0LWd1aS9saWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzA2ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2wKQEAgLTAsMCArMSwzNTkgQEAKKyMgZ2l0LWd1aSByZW1vdGUgYnJhbmNoIGRlbGV0aW5nIHN1cHBvcnQKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQorCitjbGFzcyByZW1vdGVfYnJhbmNoX2RlbGV0ZSB7CisKK2ZpZWxkIHcKK2ZpZWxkIGhlYWRfbQorCitmaWVsZCB1cmx0eXBlICAge3VybH0KK2ZpZWxkIHJlbW90ZSAgICB7fQorZmllbGQgdXJsICAgICAgIHt9CisKK2ZpZWxkIGNoZWNrdHlwZSAge2hlYWR9CitmaWVsZCBjaGVja19oZWFkIHt9CisKK2ZpZWxkIHN0YXR1cyAgICB7fQorZmllbGQgaWRsZV9pZCAgIHt9CitmaWVsZCBmdWxsX2xpc3Qge30KK2ZpZWxkIGhlYWRfbGlzdCB7fQorZmllbGQgYWN0aXZlX2xzIHt9CitmaWVsZCBoZWFkX2NhY2hlCitmaWVsZCBmdWxsX2NhY2hlCitmaWVsZCBjYWNoZWQKKworY29uc3RydWN0b3IgZGlhbG9nIHt9IHsKKwlnbG9iYWwgYWxsX3JlbW90ZXMgTTFCIHVzZV90dGsgTlMKKworCW1ha2VfZGlhbG9nIHRvcCB3CisJd20gdGl0bGUgJHRvcCBbYXBwZW5kICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSJdXQorCWlmIHskdG9wIG5lIHsufX0geworCQl3bSBnZW9tZXRyeSAkdG9wICIrW3dpbmZvIHJvb3R4IC5dK1t3aW5mbyByb290eSAuXSIKKwl9CisKKwkke05TfTo6bGFiZWwgJHcuaGVhZGVyIC10ZXh0IFttYyAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSJdIFwKKwkJLWZvbnQgZm9udF91aWJvbGQgLWFuY2hvciBjZW50ZXIKKwlwYWNrICR3LmhlYWRlciAtc2lkZSB0b3AgLWZpbGwgeAorCisJJHtOU306OmZyYW1lICR3LmJ1dHRvbnMKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuZGVsZXRlIC10ZXh0IFttYyBEZWxldGVdIFwKKwkJLWRlZmF1bHQgYWN0aXZlIFwKKwkJLWNvbW1hbmQgW2NiIF9kZWxldGVdCisJcGFjayAkdy5idXR0b25zLmRlbGV0ZSAtc2lkZSByaWdodAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQgW21jICJDYW5jZWwiXSBcCisJCS1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHddCisJcGFjayAkdy5idXR0b25zLmNhbmNlbCAtc2lkZSByaWdodCAtcGFkeCA1CisJcGFjayAkdy5idXR0b25zIC1zaWRlIGJvdHRvbSAtZmlsbCB4IC1wYWR5IDEwIC1wYWR4IDEwCisKKwkke05TfTo6bGFiZWxmcmFtZSAkdy5kZXN0IC10ZXh0IFttYyAiRnJvbSBSZXBvc2l0b3J5Il0KKwlpZiB7JGFsbF9yZW1vdGVzIG5lIHt9fSB7CisJCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5kZXN0LnJlbW90ZV9yIFwKKwkJCS10ZXh0IFttYyAiUmVtb3RlOiJdIFwKKwkJCS12YWx1ZSByZW1vdGUgXAorCQkJLXZhcmlhYmxlIEB1cmx0eXBlCisJCWlmIHskdXNlX3R0a30geworCQkJdHRrOjpjb21ib2JveCAkdy5kZXN0LnJlbW90ZV9tIC10ZXh0dmFyaWFibGUgQHJlbW90ZSBcCisJCQkJLXZhbHVlcyAkYWxsX3JlbW90ZXMgLXN0YXRlIHJlYWRvbmx5CisJCX0gZWxzZSB7CisJCQlldmFsIHRrX29wdGlvbk1lbnUgJHcuZGVzdC5yZW1vdGVfbSBAcmVtb3RlICRhbGxfcmVtb3RlcworCQl9CisJCWdyaWQgJHcuZGVzdC5yZW1vdGVfciAkdy5kZXN0LnJlbW90ZV9tIC1zdGlja3kgdworCQlpZiB7W2xzZWFyY2ggLXNvcnRlZCAtZXhhY3QgJGFsbF9yZW1vdGVzIG9yaWdpbl0gIT0gLTF9IHsKKwkJCXNldCByZW1vdGUgb3JpZ2luCisJCX0gZWxzZSB7CisJCQlzZXQgcmVtb3RlIFtsaW5kZXggJGFsbF9yZW1vdGVzIDBdCisJCX0KKwkJc2V0IHVybHR5cGUgcmVtb3RlCisJCXRyYWNlIGFkZCB2YXJpYWJsZSBAcmVtb3RlIHdyaXRlIFtjYiBfd3JpdGVfcmVtb3RlXQorCX0gZWxzZSB7CisJCXNldCB1cmx0eXBlIHVybAorCX0KKwkke05TfTo6cmFkaW9idXR0b24gJHcuZGVzdC51cmxfciBcCisJCS10ZXh0IFttYyAiQXJiaXRyYXJ5IExvY2F0aW9uOiJdIFwKKwkJLXZhbHVlIHVybCBcCisJCS12YXJpYWJsZSBAdXJsdHlwZQorCSR7TlN9OjplbnRyeSAkdy5kZXN0LnVybF90IFwKKwkJLXdpZHRoIDUwIFwKKwkJLXRleHR2YXJpYWJsZSBAdXJsIFwKKwkJLXZhbGlkYXRlIGtleSBcCisJCS12YWxpZGF0ZWNvbW1hbmQgeworCQkJaWYgeyVkID09IDEgJiYgW3JlZ2V4cCB7XHN9ICVTXX0ge3JldHVybiAwfQorCQkJcmV0dXJuIDEKKwkJfQorCXRyYWNlIGFkZCB2YXJpYWJsZSBAdXJsIHdyaXRlIFtjYiBfd3JpdGVfdXJsXQorCWdyaWQgJHcuZGVzdC51cmxfciAkdy5kZXN0LnVybF90IC1zdGlja3kgd2UgLXBhZHggezAgNX0KKwlncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdy5kZXN0IDEgLXdlaWdodCAxCisJcGFjayAkdy5kZXN0IC1hbmNob3IgbncgLWZpbGwgeCAtcGFkeSA1IC1wYWR4IDUKKworCSR7TlN9OjpsYWJlbGZyYW1lICR3LmhlYWRzIC10ZXh0IFttYyAiQnJhbmNoZXMiXQorCXNsaXN0Ym94ICR3LmhlYWRzLmwgXAorCQktaGVpZ2h0IDEwIFwKKwkJLXdpZHRoIDcwIFwKKwkJLWxpc3R2YXJpYWJsZSBAaGVhZF9saXN0IFwKKwkJLXNlbGVjdG1vZGUgZXh0ZW5kZWQKKworCSR7TlN9OjpmcmFtZSAkdy5oZWFkcy5mb290ZXIKKwkke05TfTo6bGFiZWwgJHcuaGVhZHMuZm9vdGVyLnN0YXR1cyBcCisJCS10ZXh0dmFyaWFibGUgQHN0YXR1cyBcCisJCS1hbmNob3IgdyBcCisJCS1qdXN0aWZ5IGxlZnQKKwkke05TfTo6YnV0dG9uICR3LmhlYWRzLmZvb3Rlci5yZXNjYW4gXAorCQktdGV4dCBbbWMgIlJlc2NhbiJdIFwKKwkJLWNvbW1hbmQgW2NiIF9yZXNjYW5dCisJcGFjayAkdy5oZWFkcy5mb290ZXIuc3RhdHVzIC1zaWRlIGxlZnQgLWZpbGwgeAorCXBhY2sgJHcuaGVhZHMuZm9vdGVyLnJlc2NhbiAtc2lkZSByaWdodAorCisJcGFjayAkdy5oZWFkcy5mb290ZXIgLXNpZGUgYm90dG9tIC1maWxsIHgKKwlwYWNrICR3LmhlYWRzLmwgLXNpZGUgbGVmdCAtZmlsbCBib3RoIC1leHBhbmQgMQorCXBhY2sgJHcuaGVhZHMgLWZpbGwgYm90aCAtZXhwYW5kIDEgLXBhZHkgNSAtcGFkeCA1CisKKwkke05TfTo6bGFiZWxmcmFtZSAkdy52YWxpZGF0ZSAtdGV4dCBbbWMgIkRlbGV0ZSBPbmx5IElmIl0KKwkke05TfTo6cmFkaW9idXR0b24gJHcudmFsaWRhdGUuaGVhZF9yIFwKKwkJLXRleHQgW21jICJNZXJnZWQgSW50bzoiXSBcCisJCS12YWx1ZSBoZWFkIFwKKwkJLXZhcmlhYmxlIEBjaGVja3R5cGUKKwlzZXQgaGVhZF9tIFt0a19vcHRpb25NZW51ICR3LnZhbGlkYXRlLmhlYWRfbSBAY2hlY2tfaGVhZCB7fV0KKwl0cmFjZSBhZGQgdmFyaWFibGUgQGhlYWRfbGlzdCB3cml0ZSBbY2IgX3dyaXRlX2hlYWRfbGlzdF0KKwl0cmFjZSBhZGQgdmFyaWFibGUgQGNoZWNrX2hlYWQgd3JpdGUgW2NiIF93cml0ZV9jaGVja19oZWFkXQorCWdyaWQgJHcudmFsaWRhdGUuaGVhZF9yICR3LnZhbGlkYXRlLmhlYWRfbSAtc3RpY2t5IHcKKwkke05TfTo6cmFkaW9idXR0b24gJHcudmFsaWRhdGUuYWx3YXlzX3IgXAorCQktdGV4dCBbbWMgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSJdIFwKKwkJLXZhbHVlIGFsd2F5cyBcCisJCS12YXJpYWJsZSBAY2hlY2t0eXBlCisJZ3JpZCAkdy52YWxpZGF0ZS5hbHdheXNfciAtY29sdW1uc3BhbiAyIC1zdGlja3kgdworCWdyaWQgY29sdW1uY29uZmlndXJlICR3LnZhbGlkYXRlIDEgLXdlaWdodCAxCisJcGFjayAkdy52YWxpZGF0ZSAtYW5jaG9yIG53IC1maWxsIHggLXBhZHkgNSAtcGFkeCA1CisKKwl0cmFjZSBhZGQgdmFyaWFibGUgQHVybHR5cGUgd3JpdGUgW2NiIF93cml0ZV91cmx0eXBlXQorCV9yZXNjYW4gJHRoaXMKKworCWJpbmQgJHcgPEtleS1GNT4gICAgIFtjYiBfcmVzY2FuXQorCWJpbmQgJHcgPCRNMUItS2V5LXI+IFtjYiBfcmVzY2FuXQorCWJpbmQgJHcgPCRNMUItS2V5LVI+IFtjYiBfcmVzY2FuXQorCWJpbmQgJHcgPEtleS1SZXR1cm4+IFtjYiBfZGVsZXRlXQorCWJpbmQgJHcgPEtleS1Fc2NhcGU+IFtsaXN0IGRlc3Ryb3kgJHddCisJcmV0dXJuICR3Cit9CisKK21ldGhvZCBfZGVsZXRlIHt9IHsKKwlzd2l0Y2ggJHVybHR5cGUgeworCXJlbW90ZSB7c2V0IHVyaSAkcmVtb3RlfQorCXVybCAgICB7c2V0IHVyaSAkdXJsfQorCX0KKworCXNldCBjYWNoZSAkdXJsdHlwZTokdXJpCisJc2V0IGNyZXYge30KKwlpZiB7JGNoZWNrdHlwZSBlcSB7aGVhZH19IHsKKwkJaWYgeyRjaGVja19oZWFkIGVxIHt9fSB7CisJCQl0a19tZXNzYWdlQm94IFwKKwkJCQktaWNvbiBlcnJvciBcCisJCQkJLXR5cGUgb2sgXAorCQkJCS10aXRsZSBbd20gdGl0bGUgJHddIFwKKwkJCQktcGFyZW50ICR3IFwKKwkJCQktbWVzc2FnZSBbbWMgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiJdCisJCQlyZXR1cm4KKwkJfQorCQlzZXQgY3JldiAkZnVsbF9jYWNoZSgiJGNhY2hlXG5yZWZzL2hlYWRzLyRjaGVja19oZWFkIikKKwl9CisKKwlzZXQgbm90X21lcmdlZCBbbGlzdF0KKwlzZXQgbmVlZF9mZXRjaCAwCisJc2V0IGhhdmVfc2VsZWN0aW9uIDAKKwlzZXQgcHVzaF9jbWQgW2xpc3QgZ2l0IHB1c2hdCisJbGFwcGVuZCBwdXNoX2NtZCAtdgorCWxhcHBlbmQgcHVzaF9jbWQgJHVyaQorCisJZm9yZWFjaCBpIFskdy5oZWFkcy5sIGN1cnNlbGVjdGlvbl0geworCQlzZXQgcmVmIFtsaW5kZXggJGZ1bGxfbGlzdCAkaV0KKwkJaWYgeyRjcmV2IG5lIHt9fSB7CisJCQlzZXQgb2JqICRmdWxsX2NhY2hlKCIkY2FjaGVcbiRyZWYiKQorCQkJaWYge1tjYXRjaCB7c2V0IG0gW2dpdCBtZXJnZS1iYXNlICRvYmogJGNyZXZdfV19IHsKKwkJCQlzZXQgbmVlZF9mZXRjaCAxCisJCQkJc2V0IG0ge30KKwkJCX0KKwkJCWlmIHskb2JqIG5lICRtfSB7CisJCQkJbGFwcGVuZCBub3RfbWVyZ2VkIFtsaW5kZXggJGhlYWRfbGlzdCAkaV0KKwkJCQljb250aW51ZQorCQkJfQorCQl9CisKKwkJbGFwcGVuZCBwdXNoX2NtZCA6JHJlZgorCQlzZXQgaGF2ZV9zZWxlY3Rpb24gMQorCX0KKworCWlmIHskbm90X21lcmdlZCBuZSB7fX0geworCQlzZXQgbXNnIFttYyAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6CisKKyAtICVzIiAkY2hlY2tfaGVhZCBbam9pbiAkbm90X21lcmdlZCAiXG4gLSAiXV0KKworCQlpZiB7JG5lZWRfZmV0Y2h9IHsKKwkJCWFwcGVuZCBtc2cgIlxuXG4iIFttYyAiT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSBuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIgJHVyaV0KKwkJfQorCisJCXRrX21lc3NhZ2VCb3ggXAorCQkJLWljb24gaW5mbyBcCisJCQktdHlwZSBvayBcCisJCQktdGl0bGUgW3dtIHRpdGxlICR3XSBcCisJCQktcGFyZW50ICR3IFwKKwkJCS1tZXNzYWdlICRtc2cKKwkJaWYgeyEkaGF2ZV9zZWxlY3Rpb259IHJldHVybgorCX0KKworCWlmIHshJGhhdmVfc2VsZWN0aW9ufSB7CisJCXRrX21lc3NhZ2VCb3ggXAorCQkJLWljb24gZXJyb3IgXAorCQkJLXR5cGUgb2sgXAorCQkJLXRpdGxlIFt3bSB0aXRsZSAkd10gXAorCQkJLXBhcmVudCAkdyBcCisJCQktbWVzc2FnZSBbbWMgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiJdCisJCXJldHVybgorCX0KKworCWlmIHskY2hlY2t0eXBlIG5lIHtoZWFkfX0geworCQlpZiB7W3RrX21lc3NhZ2VCb3ggXAorCQkJLWljb24gd2FybmluZyBcCisJCQktdHlwZSB5ZXNubyBcCisJCQktdGl0bGUgW3dtIHRpdGxlICR3XSBcCisJCQktcGFyZW50ICR3IFwKKwkJCS1tZXNzYWdlIFttYyAiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cblxuRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iXV0gbmUgeWVzfSB7CisJCQlyZXR1cm4KKwkJfQorCX0KKworCWRlc3Ryb3kgJHcKKworCXNldCBjb25zIFtjb25zb2xlOjpuZXcgXAorCQkicHVzaCAkdXJpIiBcCisJCVttYyAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIgJHVyaV1dCisJY29uc29sZTo6ZXhlYyAkY29ucyAkcHVzaF9jbWQKK30KKworbWV0aG9kIF9yZXNjYW4ge3tmb3JjZSAxfX0geworCXN3aXRjaCAkdXJsdHlwZSB7CisJcmVtb3RlIHtzZXQgdXJpICRyZW1vdGV9CisJdXJsICAgIHtzZXQgdXJpICR1cmx9CisJfQorCisJaWYgeyRmb3JjZX0geworCQl1bnNldCAtbm9jb21wbGFpbiBjYWNoZWQoJHVybHR5cGU6JHVyaSkKKwl9CisKKwlpZiB7JGlkbGVfaWQgbmUge319IHsKKwkJYWZ0ZXIgY2FuY2VsICRpZGxlX2lkCisJCXNldCBpZGxlX2lkIHt9CisJfQorCisJX2xvYWQgJHRoaXMgJHVybHR5cGU6JHVyaSAkdXJpCit9CisKK21ldGhvZCBfd3JpdGVfcmVtb3RlICAgICB7YXJnc30geyBzZXQgdXJsdHlwZSByZW1vdGUgfQorbWV0aG9kIF93cml0ZV91cmwgICAgICAgIHthcmdzfSB7IHNldCB1cmx0eXBlIHVybCAgICB9CittZXRob2QgX3dyaXRlX2NoZWNrX2hlYWQge2FyZ3N9IHsgc2V0IGNoZWNrdHlwZSBoZWFkIH0KKworbWV0aG9kIF93cml0ZV9oZWFkX2xpc3Qge2FyZ3N9IHsKKwlnbG9iYWwgY3VycmVudF9icmFuY2ggX2xhc3RfbWVyZ2VkX2JyYW5jaAorCisJJGhlYWRfbSBkZWxldGUgMCBlbmQKKwlmb3JlYWNoIGFiciAkaGVhZF9saXN0IHsKKwkJJGhlYWRfbSBpbnNlcnQgZW5kIHJhZGlvYnV0dG9uIFwKKwkJCS1sYWJlbCAkYWJyIFwKKwkJCS12YWx1ZSAkYWJyIFwKKwkJCS12YXJpYWJsZSBAY2hlY2tfaGVhZAorCX0KKwlpZiB7W2xzZWFyY2ggLWV4YWN0IC1zb3J0ZWQgJGhlYWRfbGlzdCAkY2hlY2tfaGVhZF0gPCAwfSB7CisJCWlmIHtbbHNlYXJjaCAtZXhhY3QgLXNvcnRlZCAkaGVhZF9saXN0ICRjdXJyZW50X2JyYW5jaF0gPCAwfSB7CisJCQlzZXQgY2hlY2tfaGVhZCB7fQorCQl9IGVsc2UgeworCQkJc2V0IGNoZWNrX2hlYWQgJGN1cnJlbnRfYnJhbmNoCisJCX0KKwl9CisJc2V0IGxtYiBbbHNlYXJjaCAtZXhhY3QgLXNvcnRlZCAkaGVhZF9saXN0ICRfbGFzdF9tZXJnZWRfYnJhbmNoXQorCWlmIHskbG1iID49IDB9IHsKKwkJJHcuaGVhZHMubCBjb25mIC1zdGF0ZSBub3JtYWwKKwkJJHcuaGVhZHMubCBzZWxlY3Qgc2V0ICRsbWIKKwkJJHcuaGVhZHMubCB5dmlldyAkbG1iCisJCSR3LmhlYWRzLmwgY29uZiAtc3RhdGUgZGlzYWJsZWQKKwl9Cit9CisKK21ldGhvZCBfd3JpdGVfdXJsdHlwZSB7YXJnc30geworCWlmIHskdXJsdHlwZSBlcSB7dXJsfX0geworCQlpZiB7JGlkbGVfaWQgbmUge319IHsKKwkJCWFmdGVyIGNhbmNlbCAkaWRsZV9pZAorCQl9CisJCV9sb2FkICR0aGlzIG5vbmU6IHt9CisJCXNldCBpZGxlX2lkIFthZnRlciAxMDAwIFtjYiBfcmVzY2FuIDBdXQorCX0gZWxzZSB7CisJCV9yZXNjYW4gJHRoaXMgMAorCX0KK30KKworbWV0aG9kIF9sb2FkIHtjYWNoZSB1cml9IHsKKwlpZiB7JGFjdGl2ZV9scyBuZSB7fX0geworCQljYXRjaCB7Y2xvc2UgJGFjdGl2ZV9sc30KKwl9CisKKwlpZiB7JHVyaSBlcSB7fX0geworCQkkdy5oZWFkcy5sIGNvbmYgLXN0YXRlIGRpc2FibGVkCisJCXNldCBoZWFkX2xpc3QgW2xpc3RdCisJCXNldCBmdWxsX2xpc3QgW2xpc3RdCisJCXNldCBzdGF0dXMgW21jICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiJdCisJCXJldHVybgorCX0KKworCWlmIHtbY2F0Y2gge3NldCB4ICRjYWNoZWQoJGNhY2hlKX1dfSB7CisJCXNldCBzdGF0dXMgW21jICJTY2FubmluZyAlcy4uLiIgJHVyaV0KKwkJJHcuaGVhZHMubCBjb25mIC1zdGF0ZSBkaXNhYmxlZAorCQlzZXQgaGVhZF9saXN0IFtsaXN0XQorCQlzZXQgZnVsbF9saXN0IFtsaXN0XQorCQlzZXQgaGVhZF9jYWNoZSgkY2FjaGUpIFtsaXN0XQorCQlzZXQgZnVsbF9jYWNoZSgkY2FjaGUpIFtsaXN0XQorCQlzZXQgYWN0aXZlX2xzIFtnaXRfcmVhZCBscy1yZW1vdGUgJHVyaV0KKwkJZmNvbmZpZ3VyZSAkYWN0aXZlX2xzIFwKKwkJCS1ibG9ja2luZyAwIFwKKwkJCS10cmFuc2xhdGlvbiBsZiBcCisJCQktZW5jb2RpbmcgdXRmLTgKKwkJZmlsZWV2ZW50ICRhY3RpdmVfbHMgcmVhZGFibGUgW2NiIF9yZWFkICRjYWNoZSAkYWN0aXZlX2xzXQorCX0gZWxzZSB7CisJCXNldCBzdGF0dXMge30KKwkJc2V0IGZ1bGxfbGlzdCAkZnVsbF9jYWNoZSgkY2FjaGUpCisJCXNldCBoZWFkX2xpc3QgJGhlYWRfY2FjaGUoJGNhY2hlKQorCQkkdy5oZWFkcy5sIGNvbmYgLXN0YXRlIG5vcm1hbAorCX0KK30KKworbWV0aG9kIF9yZWFkIHtjYWNoZSBmZH0geworCWlmIHskZmQgbmUgJGFjdGl2ZV9sc30geworCQljYXRjaCB7Y2xvc2UgJGZkfQorCQlyZXR1cm4KKwl9CisKKwl3aGlsZSB7W2dldHMgJGZkIGxpbmVdID49IDB9IHsKKwkJaWYge1tzdHJpbmcgbWF0Y2ggeypee319ICRsaW5lXX0gY29udGludWUKKwkJaWYge1tyZWdleHAge14oWzAtOWEtZl17NDB9KQkoLiopJH0gJGxpbmUgX2p1bmsgb2JqIHJlZl19IHsKKwkJCWlmIHtbcmVnc3ViIF5yZWZzL2hlYWRzLyAkcmVmIHt9IGFicl19IHsKKwkJCQlsYXBwZW5kIGhlYWRfbGlzdCAkYWJyCisJCQkJbGFwcGVuZCBoZWFkX2NhY2hlKCRjYWNoZSkgJGFicgorCQkJCWxhcHBlbmQgZnVsbF9saXN0ICRyZWYKKwkJCQlsYXBwZW5kIGZ1bGxfY2FjaGUoJGNhY2hlKSAkcmVmCisJCQkJc2V0IGZ1bGxfY2FjaGUoIiRjYWNoZVxuJHJlZiIpICRvYmoKKwkJCX0KKwkJfQorCX0KKworCWlmIHtbZW9mICRmZF19IHsKKwkJaWYge1tjYXRjaCB7Y2xvc2UgJGZkfSBlcnJdfSB7CisJCQlzZXQgc3RhdHVzICRlcnIKKwkJCXNldCBoZWFkX2xpc3QgW2xpc3RdCisJCQlzZXQgZnVsbF9saXN0IFtsaXN0XQorCQl9IGVsc2UgeworCQkJc2V0IHN0YXR1cyB7fQorCQkJc2V0IGNhY2hlZCgkY2FjaGUpIDEKKwkJCSR3LmhlYWRzLmwgY29uZiAtc3RhdGUgbm9ybWFsCisJCX0KKwl9Cit9IGlmZGVsZXRlZCB7CisJY2F0Y2gge2Nsb3NlICRmZH0KK30KKworfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvc2VhcmNoLnRjbCBiL2dpdC1ndWkvbGliL3NlYXJjaC50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYxZTU1NQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL3NlYXJjaC50Y2wKQEAgLTAsMCArMSwzMDAgQEAKKyMgaW5jcmVtZW50YWwgc2VhcmNoIHBhbmVsCisjIGJhc2VkIG9uIGNvZGUgZnJvbSBnaXRrLCBDb3B5cmlnaHQgKEMpIFBhdWwgTWFja2VycmFzCisKK2NsYXNzIHNlYXJjaGJhciB7CisKK2ZpZWxkIHcKK2ZpZWxkIGN0ZXh0CisKK2ZpZWxkIHNlYXJjaHN0cmluZyAgIHt9CitmaWVsZCByZWdleHBzZWFyY2gKK2ZpZWxkIGRlZmF1bHRfcmVnZXhwc2VhcmNoCitmaWVsZCBjYXNlc2Vuc2l0aXZlCitmaWVsZCBkZWZhdWx0X2Nhc2VzZW5zaXRpdmUKK2ZpZWxkIHNtYXJ0Y2FzZQorZmllbGQgc2VhcmNoZGlybiAgICAgLWZvcndhcmRzCisKK2ZpZWxkIGhpc3RvcnkKK2ZpZWxkIGhpc3RvcnlfaW5kZXgKKworZmllbGQgc21hcmt0b3AKK2ZpZWxkIHNtYXJrYm90CisKK2NvbnN0cnVjdG9yIG5ldyB7aV93IGlfdGV4dCBhcmdzfSB7CisJZ2xvYmFsIHVzZV90dGsgTlMKKwlzZXQgdyAgICAgICRpX3cKKwlzZXQgY3RleHQgICRpX3RleHQKKworCXNldCBkZWZhdWx0X3JlZ2V4cHNlYXJjaCBbaXNfY29uZmlnX3RydWUgZ3VpLnNlYXJjaC5yZWdleHBdCisJc3dpdGNoIC0tIFtnZXRfY29uZmlnIGd1aS5zZWFyY2guY2FzZV0geworCW5vIHsKKwkJc2V0IGRlZmF1bHRfY2FzZXNlbnNpdGl2ZSAwCisJCXNldCBzbWFydGNhc2UgMAorCX0KKwlzbWFydCB7CisJCXNldCBkZWZhdWx0X2Nhc2VzZW5zaXRpdmUgMAorCQlzZXQgc21hcnRjYXNlIDEKKwl9CisJeWVzIC0KKwlkZWZhdWx0IHsKKwkJc2V0IGRlZmF1bHRfY2FzZXNlbnNpdGl2ZSAxCisJCXNldCBzbWFydGNhc2UgMAorCX0KKwl9CisKKwlzZXQgaGlzdG9yeSBbbGlzdF0KKworCSR7TlN9OjpmcmFtZSAgJHcKKwkke05TfTo6bGFiZWwgICR3LmwgICAgICAgLXRleHQgW21jIEZpbmQ6XQorCXRlbnRyeSAgJHcuZW50IC10ZXh0dmFyaWFibGUgJHtfX3RoaXN9OjpzZWFyY2hzdHJpbmcgLWJhY2tncm91bmQgbGlnaHRncmVlbgorCSR7TlN9OjpidXR0b24gJHcuYm4gICAgICAtdGV4dCBbbWMgTmV4dF0gLWNvbW1hbmQgW2NiIGZpbmRfbmV4dF0KKwkke05TfTo6YnV0dG9uICR3LmJwICAgICAgLXRleHQgW21jIFByZXZdIC1jb21tYW5kIFtjYiBmaW5kX3ByZXZdCisJJHtOU306OmNoZWNrYnV0dG9uICR3LnJlIC10ZXh0IFttYyBSZWdFeHBdIFwKKwkJLXZhcmlhYmxlICR7X190aGlzfTo6cmVnZXhwc2VhcmNoIC1jb21tYW5kIFtjYiBfaW5jcnNlYXJjaF0KKwkke05TfTo6Y2hlY2tidXR0b24gJHcuY3MgLXRleHQgW21jIENhc2VdIFwKKwkJLXZhcmlhYmxlICR7X190aGlzfTo6Y2FzZXNlbnNpdGl2ZSAtY29tbWFuZCBbY2IgX2luY3JzZWFyY2hdCisJcGFjayAgICR3LmwgICAtc2lkZSBsZWZ0CisJcGFjayAgICR3LmNzICAtc2lkZSByaWdodAorCXBhY2sgICAkdy5yZSAgLXNpZGUgcmlnaHQKKwlwYWNrICAgJHcuYnAgIC1zaWRlIHJpZ2h0CisJcGFjayAgICR3LmJuICAtc2lkZSByaWdodAorCXBhY2sgICAkdy5lbnQgLXNpZGUgbGVmdCAtZXhwYW5kIDEgLWZpbGwgeAorCisJZXZhbCBncmlkIGNvbmYgJHcgLXN0aWNreSB3ZSAkYXJncworCWdyaWQgcmVtb3ZlICR3CisKKwl0cmFjZSBhZGQgdmFyaWFibGUgc2VhcmNoc3RyaW5nIHdyaXRlIFtjYiBfaW5jcnNlYXJjaF9jYl0KKwliaW5kICR3LmVudCA8UmV0dXJuPiBbY2IgZmluZF9uZXh0XQorCWJpbmQgJHcuZW50IDxTaGlmdC1SZXR1cm4+IFtjYiBmaW5kX3ByZXZdCisJYmluZCAkdy5lbnQgPEtleS1VcD4gICBbY2IgX3ByZXZfc2VhcmNoXQorCWJpbmQgJHcuZW50IDxLZXktRG93bj4gW2NiIF9uZXh0X3NlYXJjaF0KKwkKKwliaW5kICR3IDxEZXN0cm95PiBbbGlzdCBkZWxldGVfdGhpcyAkdGhpc10KKwlyZXR1cm4gJHRoaXMKK30KKworbWV0aG9kIHNob3cge30geworCWlmIHshW3Zpc2libGUgJHRoaXNdfSB7CisJCWdyaWQgJHcKKwkJJHcuZW50IGRlbGV0ZSAwIGVuZAorCQlzZXQgcmVnZXhwc2VhcmNoICAkZGVmYXVsdF9yZWdleHBzZWFyY2gKKwkJc2V0IGNhc2VzZW5zaXRpdmUgJGRlZmF1bHRfY2FzZXNlbnNpdGl2ZQorCQlzZXQgaGlzdG9yeV9pbmRleCBbbGxlbmd0aCAkaGlzdG9yeV0KKwl9CisJZm9jdXMgLWZvcmNlICR3LmVudAorfQorCittZXRob2QgaGlkZSB7fSB7CisJaWYge1t2aXNpYmxlICR0aGlzXX0geworCQlmb2N1cyAkY3RleHQKKwkJZ3JpZCByZW1vdmUgJHcKKwkJX3NhdmVfc2VhcmNoICR0aGlzCisJfQorfQorCittZXRob2QgdmlzaWJsZSB7fSB7CisJcmV0dXJuIFt3aW5mbyBpc21hcHBlZCAkd10KK30KKworbWV0aG9kIGVkaXRvciB7fSB7CisJcmV0dXJuICR3LmVudAorfQorCittZXRob2QgX2dldF9uZXdfYW5jaG9yIHt9IHsKKwkjIHVzZSBzdGFydCBvZiBzZWxlY3Rpb24gaWYgaXQgaXMgdmlzaWJsZSwKKwkjIG9yIHRoZSBib3VuZHMgb2YgdGhlIHZpc2libGUgYXJlYQorCXNldCB0b3AgICAgWyRjdGV4dCBpbmRleCBAMCwwXQorCXNldCBib3R0b20gWyRjdGV4dCBpbmRleCBAMCxbd2luZm8gaGVpZ2h0ICRjdGV4dF1dCisJc2V0IHNlbCAgICBbJGN0ZXh0IHRhZyByYW5nZXMgc2VsXQorCWlmIHskc2VsIG5lIHt9fSB7CisJCXNldCBzcG9zIFtsaW5kZXggJHNlbCAwXQorCQlpZiB7W2xpbmRleCAkc3BvcyAwXSA+PSBbbGluZGV4ICR0b3AgMF0gJiYKKwkJICAgIFtsaW5kZXggJHNwb3MgMF0gPD0gW2xpbmRleCAkYm90dG9tIDBdfSB7CisJCQlyZXR1cm4gJHNwb3MKKwkJfQorCX0KKwlpZiB7JHNlYXJjaGRpcm4gZXEgIi1mb3J3YXJkcyJ9IHsKKwkJcmV0dXJuICR0b3AKKwl9IGVsc2UgeworCQlyZXR1cm4gJGJvdHRvbQorCX0KK30KKworbWV0aG9kIF9nZXRfd3JhcF9hbmNob3Ige2Rpcn0geworCWlmIHskZGlyIGVxICItZm9yd2FyZHMifSB7CisJCXJldHVybiAxLjAKKwl9IGVsc2UgeworCQlyZXR1cm4gZW5kCisJfQorfQorCittZXRob2QgX2RvX3NlYXJjaCB7c3RhcnQge21sZW52YXIge319IHtkaXIge319IHtlbmRib3VuZCB7fX19IHsKKwlzZXQgY21kIFtsaXN0ICRjdGV4dCBzZWFyY2hdCisJaWYgeyRtbGVudmFyIG5lIHt9fSB7CisJCXVwdmFyICRtbGVudmFyIG1sZW4KKwkJbGFwcGVuZCBjbWQgLWNvdW50IG1sZW4KKwl9CisJaWYgeyRyZWdleHBzZWFyY2h9IHsKKwkJbGFwcGVuZCBjbWQgLXJlZ2V4cAorCX0KKwlpZiB7ISRjYXNlc2Vuc2l0aXZlfSB7CisJCWxhcHBlbmQgY21kIC1ub2Nhc2UKKwl9CisJaWYgeyRkaXIgZXEge319IHsKKwkJc2V0IGRpciAkc2VhcmNoZGlybgorCX0KKwlsYXBwZW5kIGNtZCAkZGlyIC0tICRzZWFyY2hzdHJpbmcKKwlpZiB7W2NhdGNoIHsKKwkJaWYgeyRlbmRib3VuZCBuZSB7fX0geworCQkJc2V0IGhlcmUgW2V2YWwgJGNtZCBbbGlzdCAkc3RhcnRdIFtsaXN0ICRlbmRib3VuZF1dCisJCX0gZWxzZSB7CisJCQlzZXQgaGVyZSBbZXZhbCAkY21kIFtsaXN0ICRzdGFydF1dCisJCQlpZiB7JGhlcmUgZXEge319IHsKKwkJCQlzZXQgaGVyZSBbZXZhbCAkY21kIFtfZ2V0X3dyYXBfYW5jaG9yICR0aGlzICRkaXJdXQorCQkJfQorCQl9CisJfSBlcnJdfSB7IHNldCBoZXJlIHt9IH0KKwlyZXR1cm4gJGhlcmUKK30KKworbWV0aG9kIF9pbmNyc2VhcmNoX2NiIHtuYW1lIGl4IG9wfSB7CisJYWZ0ZXIgaWRsZSBbY2IgX2luY3JzZWFyY2hdCit9CisKK21ldGhvZCBfaW5jcnNlYXJjaCB7fSB7CisJJGN0ZXh0IHRhZyByZW1vdmUgZm91bmQgMS4wIGVuZAorCWlmIHtbY2F0Y2ggeyRjdGV4dCBpbmRleCBhbmNob3J9XX0geworCQkkY3RleHQgbWFyayBzZXQgYW5jaG9yIFtfZ2V0X25ld19hbmNob3IgJHRoaXNdCisJfQorCWlmIHskc2VhcmNoc3RyaW5nIG5lIHt9fSB7CisJCWlmIHskc21hcnRjYXNlICYmIFtyZWdleHAge1tbOnVwcGVyOl1dfSAkc2VhcmNoc3RyaW5nXX0geworCQkJc2V0IGNhc2VzZW5zaXRpdmUgMQorCQl9CisJCXNldCBoZXJlIFtfZG9fc2VhcmNoICR0aGlzIGFuY2hvciBtbGVuXQorCQlpZiB7JGhlcmUgbmUge319IHsKKwkJCSRjdGV4dCBzZWUgJGhlcmUKKwkJCSRjdGV4dCB0YWcgcmVtb3ZlIHNlbCAxLjAgZW5kCisJCQkkY3RleHQgdGFnIGFkZCBzZWwgJGhlcmUgIiRoZXJlICsgJG1sZW4gYyIKKwkJCSMkdy5lbnQgY29uZmlndXJlIC1iYWNrZ3JvdW5kIGxpZ2h0Z3JlZW4KKwkJCSR3LmVudCBzdGF0ZSAhcHJlc3NlZAorCQkJX3NldF9tYXJrcyAkdGhpcyAxCisJCX0gZWxzZSB7CisJCQkjJHcuZW50IGNvbmZpZ3VyZSAtYmFja2dyb3VuZCBsaWdodHBpbmsKKwkJCSR3LmVudCBzdGF0ZSBwcmVzc2VkCisJCX0KKwl9IGVsc2VpZiB7JHNtYXJ0Y2FzZX0geworCQkjIGNsZWFyaW5nIHRoZSBmaWVsZCByZXNldHMgdGhlIHNtYXJ0IGNhc2UgZGV0ZWN0aW9uCisJCXNldCBjYXNlc2Vuc2l0aXZlIDAKKwl9Cit9CisKK21ldGhvZCBfc2F2ZV9zZWFyY2gge30geworCWlmIHskc2VhcmNoc3RyaW5nIGVxIHt9fSB7CisJCXJldHVybgorCX0KKwlpZiB7W2xsZW5ndGggJGhpc3RvcnldID4gMH0geworCQlmb3JlYWNoIHtzX3JlZ2V4cCBzX2Nhc2Ugc19leHByfSBbbGluZGV4ICRoaXN0b3J5IGVuZF0gYnJlYWsKKwl9IGVsc2UgeworCQlzZXQgc19yZWdleHAgJHJlZ2V4cHNlYXJjaAorCQlzZXQgc19jYXNlICAgJGNhc2VzZW5zaXRpdmUKKwkJc2V0IHNfZXhwciAgICIiCisJfQorCWlmIHskc2VhcmNoc3RyaW5nIGVxICRzX2V4cHJ9IHsKKwkJIyB1cGRhdGUgbW9kZXMKKwkJc2V0IGhpc3RvcnkgW2xyZXBsYWNlICRoaXN0b3J5IGVuZCBlbmQgXAorCQkJCVtsaXN0ICRyZWdleHBzZWFyY2ggJGNhc2VzZW5zaXRpdmUgJHNlYXJjaHN0cmluZ11dCisJfSBlbHNlIHsKKwkJbGFwcGVuZCBoaXN0b3J5IFtsaXN0ICRyZWdleHBzZWFyY2ggJGNhc2VzZW5zaXRpdmUgJHNlYXJjaHN0cmluZ10KKwl9CisJc2V0IGhpc3RvcnlfaW5kZXggW2xsZW5ndGggJGhpc3RvcnldCit9CisKK21ldGhvZCBfcHJldl9zZWFyY2gge30geworCWlmIHskaGlzdG9yeV9pbmRleCA+IDB9IHsKKwkJaW5jciBoaXN0b3J5X2luZGV4IC0xCisJCWZvcmVhY2gge3NfcmVnZXhwIHNfY2FzZSBzX2V4cHJ9IFtsaW5kZXggJGhpc3RvcnkgJGhpc3RvcnlfaW5kZXhdIGJyZWFrCisJCSR3LmVudCBkZWxldGUgMCBlbmQKKwkJJHcuZW50IGluc2VydCAwICRzX2V4cHIKKwkJc2V0IHJlZ2V4cHNlYXJjaCAkc19yZWdleHAKKwkJc2V0IGNhc2VzZW5zaXRpdmUgJHNfY2FzZQorCX0KK30KKworbWV0aG9kIF9uZXh0X3NlYXJjaCB7fSB7CisJaWYgeyRoaXN0b3J5X2luZGV4IDwgW2xsZW5ndGggJGhpc3RvcnldfSB7CisJCWluY3IgaGlzdG9yeV9pbmRleAorCX0KKwlpZiB7JGhpc3RvcnlfaW5kZXggPCBbbGxlbmd0aCAkaGlzdG9yeV19IHsKKwkJZm9yZWFjaCB7c19yZWdleHAgc19jYXNlIHNfZXhwcn0gW2xpbmRleCAkaGlzdG9yeSAkaGlzdG9yeV9pbmRleF0gYnJlYWsKKwl9IGVsc2UgeworCQlzZXQgc19yZWdleHAgJGRlZmF1bHRfcmVnZXhwc2VhcmNoCisJCXNldCBzX2Nhc2UgICAkZGVmYXVsdF9jYXNlc2Vuc2l0aXZlCisJCXNldCBzX2V4cHIgICAiIgorCX0KKwkkdy5lbnQgZGVsZXRlIDAgZW5kCisJJHcuZW50IGluc2VydCAwICRzX2V4cHIKKwlzZXQgcmVnZXhwc2VhcmNoICRzX3JlZ2V4cAorCXNldCBjYXNlc2Vuc2l0aXZlICRzX2Nhc2UKK30KKworbWV0aG9kIGZpbmRfcHJldiB7fSB7CisJZmluZF9uZXh0ICR0aGlzIC1iYWNrd2FyZHMKK30KKworbWV0aG9kIGZpbmRfbmV4dCB7e2RpciAtZm9yd2FyZHN9fSB7CisJZm9jdXMgJHcuZW50CisJJHcuZW50IGljdXJzb3IgZW5kCisJc2V0IHNlYXJjaGRpcm4gJGRpcgorCSRjdGV4dCBtYXJrIHVuc2V0IGFuY2hvcgorCWlmIHskc2VhcmNoc3RyaW5nIG5lIHt9fSB7CisJCV9zYXZlX3NlYXJjaCAkdGhpcworCQlzZXQgc3RhcnQgW19nZXRfbmV3X2FuY2hvciAkdGhpc10KKwkJaWYgeyRkaXIgZXEgIi1mb3J3YXJkcyJ9IHsKKwkJCXNldCBzdGFydCAiJHN0YXJ0ICsgMWMiCisJCX0KKwkJc2V0IG1hdGNoIFtfZG9fc2VhcmNoICR0aGlzICRzdGFydCBtbGVuXQorCQkkY3RleHQgdGFnIHJlbW92ZSBzZWwgMS4wIGVuZAorCQlpZiB7JG1hdGNoIG5lIHt9fSB7CisJCQkkY3RleHQgc2VlICRtYXRjaAorCQkJJGN0ZXh0IHRhZyBhZGQgc2VsICRtYXRjaCAiJG1hdGNoICsgJG1sZW4gYyIKKwkJfQorCX0KK30KKworbWV0aG9kIF9tYXJrX3JhbmdlIHtmaXJzdCBsYXN0fSB7CisJc2V0IG1lbmQgJGZpcnN0LjAKKwl3aGlsZSB7MX0geworCQlzZXQgbWF0Y2ggW19kb19zZWFyY2ggJHRoaXMgJG1lbmQgbWxlbiAtZm9yd2FyZHMgJGxhc3QuZW5kXQorCQlpZiB7JG1hdGNoIGVxIHt9fSBicmVhaworCQlzZXQgbWVuZCAiJG1hdGNoICsgJG1sZW4gYyIKKwkJJGN0ZXh0IHRhZyBhZGQgZm91bmQgJG1hdGNoICRtZW5kCisJfQorfQorCittZXRob2QgX3NldF9tYXJrcyB7ZG9hbGx9IHsKKwlzZXQgdG9wbGluZSBbbGluZGV4IFtzcGxpdCBbJGN0ZXh0IGluZGV4IEAwLDBdIC5dIDBdCisJc2V0IGJvdGxpbmUgW2xpbmRleCBbc3BsaXQgWyRjdGV4dCBpbmRleCBAMCxbd2luZm8gaGVpZ2h0ICRjdGV4dF1dIC5dIDBdCisJaWYgeyRkb2FsbCB8fCAkYm90bGluZSA8ICRzbWFya3RvcCB8fCAkdG9wbGluZSA+ICRzbWFya2JvdH0geworCQkjIG5vIG92ZXJsYXAgd2l0aCBwcmV2aW91cworCQlfbWFya19yYW5nZSAkdGhpcyAkdG9wbGluZSAkYm90bGluZQorCQlzZXQgc21hcmt0b3AgJHRvcGxpbmUKKwkJc2V0IHNtYXJrYm90ICRib3RsaW5lCisJfSBlbHNlIHsKKwkJaWYgeyR0b3BsaW5lIDwgJHNtYXJrdG9wfSB7CisJCQlfbWFya19yYW5nZSAkdGhpcyAkdG9wbGluZSBbZXhwciB7JHNtYXJrdG9wLTF9XQorCQkJc2V0IHNtYXJrdG9wICR0b3BsaW5lCisJCX0KKwkJaWYgeyRib3RsaW5lID4gJHNtYXJrYm90fSB7CisJCQlfbWFya19yYW5nZSAkdGhpcyBbZXhwciB7JHNtYXJrYm90KzF9XSAkYm90bGluZQorCQkJc2V0IHNtYXJrYm90ICRib3RsaW5lCisJCX0KKwl9Cit9CisKK21ldGhvZCBzY3JvbGxlZCB7fSB7CisJaWYgeyRzZWFyY2hzdHJpbmcgbmUge319IHsKKwkJYWZ0ZXIgaWRsZSBbY2IgX3NldF9tYXJrcyAwXQorCX0KK30KKworfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvc2hvcnRjdXQudGNsIGIvZ2l0LWd1aS9saWIvc2hvcnRjdXQudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODc4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi9zaG9ydGN1dC50Y2wKQEAgLTAsMCArMSwxNDAgQEAKKyMgZ2l0LWd1aSBkZXNrdG9wIGljb24gY3JlYXRvcnMKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNoYXduIFBlYXJjZQorCitwcm9jIGRvX3dpbmRvd3Nfc2hvcnRjdXQge30geworCWdsb2JhbCBfZ2l0d29ya3RyZWUKKwlzZXQgZm4gW3RrX2dldFNhdmVGaWxlIFwKKwkJLXBhcmVudCAuIFwKKwkJLXRpdGxlIFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJDcmVhdGUgRGVza3RvcCBJY29uIl1dIFwKKwkJLWluaXRpYWxmaWxlICJHaXQgW3JlcG9uYW1lXS5sbmsiXQorCWlmIHskZm4gIT0ge319IHsKKwkJaWYge1tmaWxlIGV4dGVuc2lvbiAkZm5dIG5lIHsubG5rfX0geworCQkJc2V0IGZuICR7Zm59LmxuaworCQl9CisJCWlmIHtbY2F0Y2ggeworCQkJCXdpbjMyX2NyZWF0ZV9sbmsgJGZuIFtsaXN0IFwKKwkJCQkJW2luZm8gbmFtZW9mZXhlY3V0YWJsZV0gXAorCQkJCQlbZmlsZSBub3JtYWxpemUgJDo6YXJndjBdIFwKKwkJCQkJXSBcCisJCQkJCVtmaWxlIG5vcm1hbGl6ZSAkX2dpdHdvcmt0cmVlXQorCQkJfSBlcnJdfSB7CisJCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiJdICJcblxuJGVyciJdCisJCX0KKwl9Cit9CisKK3Byb2MgZG9fY3lnd2luX3Nob3J0Y3V0IHt9IHsKKwlnbG9iYWwgYXJndjAgX2dpdHdvcmt0cmVlCisKKwlpZiB7W2NhdGNoIHsKKwkJc2V0IGRlc2t0b3AgW2V4ZWMgY3lncGF0aCBcCisJCQktLXdpbmRvd3MgXAorCQkJLS1hYnNvbHV0ZSBcCisJCQktLWxvbmctbmFtZSBcCisJCQktLWRlc2t0b3BdCisJCX1dfSB7CisJCQlzZXQgZGVza3RvcCAuCisJfQorCXNldCBmbiBbdGtfZ2V0U2F2ZUZpbGUgXAorCQktcGFyZW50IC4gXAorCQktdGl0bGUgW2FwcGVuZCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogIiBbbWMgIkNyZWF0ZSBEZXNrdG9wIEljb24iXV0gXAorCQktaW5pdGlhbGRpciAkZGVza3RvcCBcCisJCS1pbml0aWFsZmlsZSAiR2l0IFtyZXBvbmFtZV0ubG5rIl0KKwlpZiB7JGZuICE9IHt9fSB7CisJCWlmIHtbZmlsZSBleHRlbnNpb24gJGZuXSBuZSB7Lmxua319IHsKKwkJCXNldCBmbiAke2ZufS5sbmsKKwkJfQorCQlpZiB7W2NhdGNoIHsKKwkJCQlzZXQgc2ggW2V4ZWMgY3lncGF0aCBcCisJCQkJCS0td2luZG93cyBcCisJCQkJCS0tYWJzb2x1dGUgXAorCQkJCQkvYmluL3NoLmV4ZV0KKwkJCQlzZXQgbWUgW2V4ZWMgY3lncGF0aCBcCisJCQkJCS0tdW5peCBcCisJCQkJCS0tYWJzb2x1dGUgXAorCQkJCQkkYXJndjBdCisJCQkJd2luMzJfY3JlYXRlX2xuayAkZm4gW2xpc3QgXAorCQkJCQkkc2ggLWMgXAorCQkJCQkiQ0hFUkVfSU5WT0tJTkc9MSBzb3VyY2UgL2V0Yy9wcm9maWxlO1tzcSAkbWVdICYiIFwKKwkJCQkJXSBcCisJCQkJCVtmaWxlIG5vcm1hbGl6ZSAkX2dpdHdvcmt0cmVlXQorCQkJfSBlcnJdfSB7CisJCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiJdICJcblxuJGVyciJdCisJCX0KKwl9Cit9CisKK3Byb2MgZG9fbWFjb3N4X2FwcCB7fSB7CisJZ2xvYmFsIGFyZ3YwIGVudgorCisJc2V0IGZuIFt0a19nZXRTYXZlRmlsZSBcCisJCS1wYXJlbnQgLiBcCisJCS10aXRsZSBbYXBwZW5kICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiQ3JlYXRlIERlc2t0b3AgSWNvbiJdXSBcCisJCS1pbml0aWFsZGlyIFtmaWxlIGpvaW4gJGVudihIT01FKSBEZXNrdG9wXSBcCisJCS1pbml0aWFsZmlsZSAiR2l0IFtyZXBvbmFtZV0uYXBwIl0KKwlpZiB7JGZuICE9IHt9fSB7CisJCWlmIHtbZmlsZSBleHRlbnNpb24gJGZuXSBuZSB7LmFwcH19IHsKKwkJCXNldCBmbiAke2ZufS5hcHAKKwkJfQorCQlpZiB7W2NhdGNoIHsKKwkJCQlzZXQgQ29udGVudHMgW2ZpbGUgam9pbiAkZm4gQ29udGVudHNdCisJCQkJc2V0IE1hY09TIFtmaWxlIGpvaW4gJENvbnRlbnRzIE1hY09TXQorCQkJCXNldCBleGUgW2ZpbGUgam9pbiAkTWFjT1MgZ2l0LWd1aV0KKworCQkJCWZpbGUgbWtkaXIgJE1hY09TCisKKwkJCQlzZXQgZmQgW29wZW4gW2ZpbGUgam9pbiAkQ29udGVudHMgSW5mby5wbGlzdF0gd10KKwkJCQlwdXRzICRmZCB7PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlIENvbXB1dGVyLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZlcnNpb249IjEuMCI+Cis8ZGljdD4KKwk8a2V5PkNGQnVuZGxlRGV2ZWxvcG1lbnRSZWdpb248L2tleT4KKwk8c3RyaW5nPkVuZ2xpc2g8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PgorCTxzdHJpbmc+Z2l0LWd1aTwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJZGVudGlmaWVyPC9rZXk+CisJPHN0cmluZz5vcmcuc3BlYXJjZS5naXQtZ3VpPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUluZm9EaWN0aW9uYXJ5VmVyc2lvbjwva2V5PgorCTxzdHJpbmc+Ni4wPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVBhY2thZ2VUeXBlPC9rZXk+CisJPHN0cmluZz5BUFBMPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZVNpZ25hdHVyZTwva2V5PgorCTxzdHJpbmc+Pz8/Pzwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVWZXJzaW9uPC9rZXk+CisJPHN0cmluZz4xLjA8L3N0cmluZz4KKwk8a2V5Pk5TUHJpbmNpcGFsQ2xhc3M8L2tleT4KKwk8c3RyaW5nPk5TQXBwbGljYXRpb248L3N0cmluZz4KKzwvZGljdD4KKzwvcGxpc3Q+fQorCQkJCWNsb3NlICRmZAorCisJCQkJc2V0IGZkIFtvcGVuICRleGUgd10KKwkJCQlwdXRzICRmZCAiIyEvYmluL3NoIgorCQkJCWZvcmVhY2ggbmFtZSBbbHNvcnQgW2FycmF5IG5hbWVzIGVudl1dIHsKKwkJCQkJc2V0IHZhbHVlICRlbnYoJG5hbWUpCisJCQkJCXN3aXRjaCAtLSAkbmFtZSB7CisJCQkJCUdJVF9ESVIgeyBzZXQgdmFsdWUgW2ZpbGUgbm9ybWFsaXplIFtnaXRkaXJdXSB9CisJCQkJCX0KKworCQkJCQlzd2l0Y2ggLWdsb2IgLS0gJG5hbWUgeworCQkJCQlTU0hfKiAtCisJCQkJCUdJVF8qIHsKKwkJCQkJCXB1dHMgJGZkICJpZiB0ZXN0IFwielwkJG5hbWVcIiA9IHo7IHRoZW4iCisJCQkJCQlwdXRzICRmZCAiICBleHBvcnQgJG5hbWU9W3NxICR2YWx1ZV0iCisJCQkJCQlwdXRzICRmZCAiZmkgJiYiCisJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQlwdXRzICRmZCAiZXhwb3J0IFBBVEg9W3NxIFtmaWxlIGRpcm5hbWUgJDo6X2dpdF1dOlwkUEFUSCAmJiIKKwkJCQlwdXRzICRmZCAiY2QgW3NxIFtmaWxlIG5vcm1hbGl6ZSBbcHdkXV1dICYmIgorCQkJCXB1dHMgJGZkICJleGVjIFxcIgorCQkJCXB1dHMgJGZkICIgW3NxIFtpbmZvIG5hbWVvZmV4ZWN1dGFibGVdXSBcXCIKKwkJCQlwdXRzICRmZCAiIFtzcSBbZmlsZSBub3JtYWxpemUgJGFyZ3YwXV0iCisJCQkJY2xvc2UgJGZkCisKKwkJCQlmaWxlIGF0dHJpYnV0ZXMgJGV4ZSAtcGVybWlzc2lvbnMgdSt4LGcreCxvK3gKKwkJCX0gZXJyXX0geworCQkJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgIkNhbm5vdCB3cml0ZSBpY29uOiJdICJcblxuJGVyciJdCisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9zcGVsbGNoZWNrLnRjbCBiL2dpdC1ndWkvbGliL3NwZWxsY2hlY2sudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOGQ2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi9zcGVsbGNoZWNrLnRjbApAQCAtMCwwICsxLDQxNSBAQAorIyBnaXQtZ3VpIHNwZWxsY2hlY2tpbmcgc3VwcG9ydCB0aHJvdWdoIGlzcGVsbC9hc3BlbGwKKyMgQ29weXJpZ2h0IChDKSAyMDA4IFNoYXduIFBlYXJjZQorCitjbGFzcyBzcGVsbGNoZWNrIHsKKworZmllbGQgc19mZCAgICAgIHt9IDsgIyBwaXBlIHRvIGlzcGVsbC9hc3BlbGwKK2ZpZWxkIHNfdmVyc2lvbiB7fSA7ICMgaXNwZWxsL2FzcGVsbCB2ZXJzaW9uIHN0cmluZworZmllbGQgc19sYW5nICAgIHt9IDsgIyBjdXJyZW50IGxhbmd1YWdlIGNvZGUKK2ZpZWxkIHNfcHJvZyBhc3BlbGw7ICMgYXJlIHdlIGFjdHVhbGx5IG9sZCBpc3BlbGw/CitmaWVsZCBzX2ZhaWxlZCAgIDAgOyAjIGlzICRzX3Byb2cgYm9ndXMgYW5kIG5vdCB3b3JraW5nPworCitmaWVsZCB3X3RleHQgICAgICA7ICMgdGV4dCB3aWRnZXQgd2UgYXJlIHNwZWxsaW5nCitmaWVsZCB3X21lbnUgICAgICA7ICMgY29udGV4dCBtZW51IGZvciB0aGUgd2lkZ2V0CitmaWVsZCBzX21lbnVpZHggMCA7ICMgbGFzdCBpbmRleCBvZiBpbnNlcnRpb24gaW50byAkd19tZW51CisKK2ZpZWxkIHNfaSAgICAgICAgICAge30gOyAjIHRpbWVyIHJlZ2lzdHJhdGlvbiBmb3IgX3J1biBjYWxsYmFja3MKK2ZpZWxkIHNfY2xlYXIgICAgICAgIDAgOyAjIGRpZCB3ZSBlcmFzZSBtaXNzcGVsbGVkIHRhZ3MgeWV0PworZmllbGQgc19zZWVuICAgIFtsaXN0XSA7ICMgbGluZXMgbGFzdCBzZWVuIGZyb20gJHdfdGV4dCBpbiBfcnVuCitmaWVsZCBzX2NoZWNrZWQgW2xpc3RdIDsgIyBsaW5lcyBhbHJlYWR5IGNoZWNrZWQKK2ZpZWxkIHNfcGVuZGluZyBbbGlzdF0gOyAjIFskbGluZSAkZGF0YV0gc2VudCB0byBpc3BlbGwvYXNwZWxsCitmaWVsZCBzX3N1Z2dlc3QgICAgICAgIDsgIyBhcnJheSwgbGlzdCBvZiBzdWdnZXN0aW9ucywga2V5ZWQgYnkgbWlzc3BlbGxpbmcKKworY29uc3RydWN0b3IgaW5pdCB7cGlwZV9mZCB1aV90ZXh0IHVpX21lbnV9IHsKKwlzZXQgd190ZXh0ICR1aV90ZXh0CisJc2V0IHdfbWVudSAkdWlfbWVudQorCWFycmF5IHVuc2V0IHNfc3VnZ2VzdAorCisJYmluZF9idXR0b24zICR3X3RleHQgW2NiIF9wb3B1cF9zdWdnZXN0ICVYICVZIEAleCwleV0KKwlfY29ubmVjdCAkdGhpcyAkcGlwZV9mZAorCXJldHVybiAkdGhpcworfQorCittZXRob2QgX2Nvbm5lY3Qge3BpcGVfZmR9IHsKKwlmY29uZmlndXJlICRwaXBlX2ZkIFwKKwkJLWVuY29kaW5nIHV0Zi04IFwKKwkJLWVvZmNoYXIge30gXAorCQktdHJhbnNsYXRpb24gbGYKKworCWlmIHtbZ2V0cyAkcGlwZV9mZCBzX3ZlcnNpb25dIDw9IDB9IHsKKwkJaWYge1tjYXRjaCB7Y2xvc2UgJHBpcGVfZmR9IGVycl19IHsKKworCQkJIyBFaD8gIElzIHRoaXMgYWN0dWFsbHkgaXNwZWxsIGNob2tpbmcgb24gYXNwZWxsIG9wdGlvbnM/CisJCQkjCisJCQlpZiB7JHNfcHJvZyBlcSB7YXNwZWxsfQorCQkJCSYmIFtyZWdleHAgLW5vY2FzZSB7XlVzYWdlOiB9ICRlcnJdCisJCQkJJiYgIVtjYXRjaCB7CisJCQkJCQlzZXQgcGlwZV9mZCBbb3BlbiBbbGlzdCB8ICRzX3Byb2cgLXZdIHJdCisJCQkJCQlnZXRzICRwaXBlX2ZkIHNfdmVyc2lvbgorCQkJCQkJY2xvc2UgJHBpcGVfZmQKKwkJCQl9XQorCQkJCSYmICRzX3ZlcnNpb24gbmUge319IHsKKwkJCQlpZiB7e0AoIykgfSBlcSBbc3RyaW5nIHJhbmdlICRzX3ZlcnNpb24gMCA0XX0geworCQkJCQlzZXQgc192ZXJzaW9uIFtzdHJpbmcgcmFuZ2UgJHNfdmVyc2lvbiA1IGVuZF0KKwkJCQl9CisJCQkJc2V0IHNfZmFpbGVkIDEKKwkJCQllcnJvcl9wb3B1cCBbc3RyY2F0IFwKKwkJCQkJW21jICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIl0gXAorCQkJCQkiOlxuXG4kc192ZXJzaW9uIl0KKwkJCQlzZXQgc192ZXJzaW9uIHt9CisJCQkJcmV0dXJuCisJCQl9CisKKwkJCXJlZ3N1YiAtbm9jYXNlIHteRXJyb3I6IH0gJGVyciB7fSBlcnIKKwkJCWlmIHskc19mZCBlcSB7fX0geworCQkJCWVycm9yX3BvcHVwIFtzdHJjYXQgW21jICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSJdICI6XG5cbiRlcnIiXQorCQkJfSBlbHNlIHsKKwkJCQllcnJvcl9wb3B1cCBbc3RyY2F0IFwKKwkJCQkJW21jICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iXSBcCisJCQkJCSI6XG5cbiRlcnJcblxuIiBcCisJCQkJCVttYyAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIiAkc19sYW5nXV0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWVycm9yX3BvcHVwIFttYyAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCJdCisJCX0KKwkJcmV0dXJuCisJfQorCisJaWYge3tAKCMpIH0gbmUgW3N0cmluZyByYW5nZSAkc192ZXJzaW9uIDAgNF19IHsKKwkJY2F0Y2gge2Nsb3NlICRwaXBlX2ZkfQorCQllcnJvcl9wb3B1cCBbc3RyY2F0IFttYyAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiXSAiOlxuXG4kc192ZXJzaW9uIl0KKwkJcmV0dXJuCisJfQorCXNldCBzX3ZlcnNpb24gW3N0cmluZyByYW5nZSBbc3RyaW5nIHRyaW0gJHNfdmVyc2lvbl0gNSBlbmRdCisJcmVnZXhwIFwKKwkJe0ludGVybmF0aW9uYWwgSXNwZWxsIFZlcnNpb24gLiogXChidXQgcmVhbGx5IChBc3BlbGwgLio/KVwpJH0gXAorCQkkc192ZXJzaW9uIF9qdW5rIHNfdmVyc2lvbgorCXJlZ2V4cCB7XkFzcGVsbCAoXGQpK1wuKFxkKyl9ICRzX3ZlcnNpb24gX2p1bmsgbWFqb3IgbWlub3IKKworCXB1dHMgJHBpcGVfZmQgISAgICAgICAgICAgICA7ICMgZW5hYmxlIHRlcnNlIG1vZGUKKworCSMgZmV0Y2ggdGhlIGxhbmd1YWdlCisJaWYgeyRtYWpvciA+IDAgfHwgKCRtYWpvciA9PSAwICYmICRtaW5vciA+PSA2MCl9IHsKKwkJcHV0cyAkcGlwZV9mZCB7JCRjciBtYXN0ZXJ9CisJCWZsdXNoICRwaXBlX2ZkCisJCWdldHMgJHBpcGVfZmQgc19sYW5nCisJCXJlZ2V4cCB7Wy9cXF0oW14vXFxdKylcLlteXC5dKyR9ICRzX2xhbmcgXyBzX2xhbmcKKwl9IGVsc2UgeworCQlzZXQgc19sYW5nIHt9CisJfQorCisJaWYgeyQ6OmRlZmF1bHRfY29uZmlnKGd1aS5zcGVsbGluZ2RpY3Rpb25hcnkpIGVxIHt9CisJICYmIFtnZXRfY29uZmlnIGd1aS5zcGVsbGluZ2RpY3Rpb25hcnldIGVxIHt9fSB7CisJCXNldCA6OmRlZmF1bHRfY29uZmlnKGd1aS5zcGVsbGluZ2RpY3Rpb25hcnkpICRzX2xhbmcKKwl9CisKKwlpZiB7JHNfZmQgbmUge319IHsKKwkJY2F0Y2gge2Nsb3NlICRzX2ZkfQorCX0KKwlzZXQgc19mZCAkcGlwZV9mZAorCisJZmNvbmZpZ3VyZSAkc19mZCAtYmxvY2tpbmcgMAorCWZpbGVldmVudCAkc19mZCByZWFkYWJsZSBbY2IgX3JlYWRdCisKKwkkd190ZXh0IHRhZyBjb25mIG1pc3NwZWxsZWQgXAorCQktZm9yZWdyb3VuZCByZWQgXAorCQktdW5kZXJsaW5lIDEKKworCWFycmF5IHVuc2V0IHNfc3VnZ2VzdAorCXNldCBzX3NlZW4gICAgW2xpc3RdCisJc2V0IHNfY2hlY2tlZCBbbGlzdF0KKwlzZXQgc19wZW5kaW5nIFtsaXN0XQorCV9ydW4gJHRoaXMKK30KKworbWV0aG9kIGxhbmcge3tuIHt9fX0geworCWlmIHskbiBuZSB7fSAmJiAkc19sYW5nIG5lICRuICYmICEkc19mYWlsZWR9IHsKKwkJc2V0IHNwZWxsX2NtZCBbbGlzdCB8XQorCQlsYXBwZW5kIHNwZWxsX2NtZCBhc3BlbGwKKwkJbGFwcGVuZCBzcGVsbF9jbWQgLS1tYXN0ZXI9JG4KKwkJbGFwcGVuZCBzcGVsbF9jbWQgLS1tb2RlPW5vbmUKKwkJbGFwcGVuZCBzcGVsbF9jbWQgLS1lbmNvZGluZz1VVEYtOAorCQlsYXBwZW5kIHNwZWxsX2NtZCBwaXBlCisJCV9jb25uZWN0ICR0aGlzIFtvcGVuICRzcGVsbF9jbWQgcitdCisJfQorCXJldHVybiAkc19sYW5nCit9CisKK21ldGhvZCB2ZXJzaW9uIHt9IHsKKwlpZiB7JHNfdmVyc2lvbiBuZSB7fX0geworCQlyZXR1cm4gIiRzX3ZlcnNpb24sICRzX2xhbmciCisJfQorCXJldHVybiB7fQorfQorCittZXRob2Qgc3RvcCB7fSB7CisJd2hpbGUgeyRzX21lbnVpZHggPiAwfSB7CisJCSR3X21lbnUgZGVsZXRlIDAKKwkJaW5jciBzX21lbnVpZHggLTEKKwl9CisJJHdfdGV4dCB0YWcgZGVsZXRlIG1pc3NwZWxsZWQKKworCWNhdGNoIHtjbG9zZSAkc19mZH0KKwljYXRjaCB7YWZ0ZXIgY2FuY2VsICRzX2l9CisJc2V0IHNfZmQge30KKwlzZXQgc19pIHt9CisJc2V0IHNfbGFuZyB7fQorfQorCittZXRob2QgX3BvcHVwX3N1Z2dlc3Qge1ggWSBwb3N9IHsKKwl3aGlsZSB7JHNfbWVudWlkeCA+IDB9IHsKKwkJJHdfbWVudSBkZWxldGUgMAorCQlpbmNyIHNfbWVudWlkeCAtMQorCX0KKworCXNldCBiX2xvYyBbJHdfdGV4dCBpbmRleCAiJHBvcyB3b3Jkc3RhcnQiXQorCXNldCBlX2xvYyBbX3dvcmRlbmQgJHRoaXMgJGJfbG9jXQorCXNldCBvcmlnICBbJHdfdGV4dCBnZXQgJGJfbG9jICRlX2xvY10KKwlzZXQgdGFncyAgWyR3X3RleHQgdGFnIG5hbWVzICRiX2xvY10KKworCWlmIHtbbHNlYXJjaCAtZXhhY3QgJHRhZ3MgbWlzc3BlbGxlZF0gPj0gMH0geworCQlpZiB7W2luZm8gZXhpc3RzIHNfc3VnZ2VzdCgkb3JpZyldfSB7CisJCQlzZXQgY250IDAKKwkJCWZvcmVhY2ggcyAkc19zdWdnZXN0KCRvcmlnKSB7CisJCQkJaWYgeyRjbnQgPCA1fSB7CisJCQkJCSR3X21lbnUgaW5zZXJ0ICRzX21lbnVpZHggY29tbWFuZCBcCisJCQkJCQktbGFiZWwgJHMgXAorCQkJCQkJLWNvbW1hbmQgW2NiIF9yZXBsYWNlICRiX2xvYyAkZV9sb2MgJHNdCisJCQkJCWluY3Igc19tZW51aWR4CisJCQkJCWluY3IgY250CisJCQkJfSBlbHNlIHsKKwkJCQkJYnJlYWsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkkd19tZW51IGluc2VydCAkc19tZW51aWR4IGNvbW1hbmQgXAorCQkJCS1sYWJlbCBbbWMgIk5vIFN1Z2dlc3Rpb25zIl0gXAorCQkJCS1zdGF0ZSBkaXNhYmxlZAorCQkJaW5jciBzX21lbnVpZHgKKwkJfQorCQkkd19tZW51IGluc2VydCAkc19tZW51aWR4IHNlcGFyYXRvcgorCQlpbmNyIHNfbWVudWlkeAorCX0KKworCSR3X3RleHQgbWFyayBzZXQgc2F2ZWQtaW5zZXJ0IGluc2VydAorCXRrX3BvcHVwICR3X21lbnUgJFggJFkKK30KKworbWV0aG9kIF9yZXBsYWNlIHtiX2xvYyBlX2xvYyB3b3JkfSB7CisJJHdfdGV4dCBjb25maWd1cmUgLWF1dG9zZXBhcmF0b3JzIDAKKwkkd190ZXh0IGVkaXQgc2VwYXJhdG9yCisKKwkkd190ZXh0IGRlbGV0ZSAkYl9sb2MgJGVfbG9jCisJJHdfdGV4dCBpbnNlcnQgJGJfbG9jICR3b3JkCisKKwkkd190ZXh0IGVkaXQgc2VwYXJhdG9yCisJJHdfdGV4dCBjb25maWd1cmUgLWF1dG9zZXBhcmF0b3JzIDEKKwkkd190ZXh0IG1hcmsgc2V0IGluc2VydCBzYXZlZC1pbnNlcnQKK30KKworbWV0aG9kIF9yZXN0YXJ0X3RpbWVyIHt9IHsKKwlzZXQgc19pIFthZnRlciAzMDAgW2NiIF9ydW5dXQorfQorCitwcm9jIF9tYXRjaF9sZW5ndGgge21heF9saW5lIGFycl9uYW1lfSB7CisJdXB2YXIgJGFycl9uYW1lIGEKKworCWlmIHtbbGxlbmd0aCAkYV0gPiAkbWF4X2xpbmV9IHsKKwkJc2V0IGEgW2xyYW5nZSAkYSAwICRtYXhfbGluZV0KKwl9CisJd2hpbGUge1tsbGVuZ3RoICRhXSA8PSAkbWF4X2xpbmV9IHsKKwkJbGFwcGVuZCBhIHt9CisJfQorfQorCittZXRob2QgX3dvcmRlbmQge3Bvc30geworCXNldCBwb3MgIFskd190ZXh0IGluZGV4ICIkcG9zIHdvcmRlbmQiXQorCXNldCB0YWdzIFskd190ZXh0IHRhZyBuYW1lcyAkcG9zXQorCXdoaWxlIHtbbHNlYXJjaCAtZXhhY3QgJHRhZ3MgbWlzc3BlbGxlZF0gPj0gMH0geworCQlzZXQgcG9zICBbJHdfdGV4dCBpbmRleCAiJHBvcyArMWMiXQorCQlzZXQgdGFncyBbJHdfdGV4dCB0YWcgbmFtZXMgJHBvc10KKwl9CisJcmV0dXJuICRwb3MKK30KKworbWV0aG9kIF9ydW4ge30geworCXNldCBjdXJfcG9zICBbJHdfdGV4dCBpbmRleCB7aW5zZXJ0IC0xY31dCisJc2V0IGN1cl9saW5lIFtsaW5kZXggW3NwbGl0ICRjdXJfcG9zIC5dIDBdCisJc2V0IG1heF9saW5lIFtsaW5kZXggW3NwbGl0IFskd190ZXh0IGluZGV4IGVuZF0gLl0gMF0KKwlfbWF0Y2hfbGVuZ3RoICRtYXhfbGluZSBzX3NlZW4KKwlfbWF0Y2hfbGVuZ3RoICRtYXhfbGluZSBzX2NoZWNrZWQKKworCSMgTm90aGluZyBpbiB0aGUgbWVzc2FnZSBidWZmZXI/ICBOb3RoaW5nIHRvIHNwZWxsY2hlY2suCisJIworCWlmIHskY3VyX2xpbmUgPT0gMQorCSAmJiAkbWF4X2xpbmUgPT0gMgorCSAmJiBbJHdfdGV4dCBnZXQgMS4wIGVuZF0gZXEgIlxuIn0geworCQlhcnJheSB1bnNldCBzX3N1Z2dlc3QKKwkJX3Jlc3RhcnRfdGltZXIgJHRoaXMKKwkJcmV0dXJuCisJfQorCisJc2V0IGFjdGl2ZSAwCisJZm9yIHtzZXQgbiAxfSB7JG4gPD0gJG1heF9saW5lfSB7aW5jciBufSB7CisJCXNldCBzIFskd190ZXh0IGdldCAiJG4uMCIgIiRuLmVuZCJdCisKKwkJIyBEb24ndCBzcGVsbGNoZWNrIHRoZSBjdXJyZW50IGxpbmUgdW5sZXNzIHdlIGFyZSBhdAorCQkjIGEgd29yZCBib3VuZGFyeS4gIFRoZSB1c2VyIG1pZ2h0IGJlIHR5cGluZyBvbiBpdC4KKwkJIworCQlpZiB7JG4gPT0gJGN1cl9saW5lCisJCSAmJiAhW3JlZ2V4cCB7XlxXJH0gWyR3X3RleHQgZ2V0ICRjdXJfcG9zIGluc2VydF1dfSB7CisKKwkJCSMgSWYgdGhlIGN1cnJlbnQgd29yZCBpcyBtaXNzcGVsbGVkIHJlbW92ZSB0aGUgdGFnCisJCQkjIGJ1dCBmb3JjZSBhIHNwZWxsY2hlY2sgbGF0ZXIuCisJCQkjCisJCQlzZXQgdGFncyBbJHdfdGV4dCB0YWcgbmFtZXMgJGN1cl9wb3NdCisJCQlpZiB7W2xzZWFyY2ggLWV4YWN0ICR0YWdzIG1pc3NwZWxsZWRdID49IDB9IHsKKwkJCQkkd190ZXh0IHRhZyByZW1vdmUgbWlzc3BlbGxlZCBcCisJCQkJCSIkY3VyX3BvcyB3b3Jkc3RhcnQiIFwKKwkJCQkJW193b3JkZW5kICR0aGlzICRjdXJfcG9zXQorCQkJCWxzZXQgc19zZWVuICAgICRuICRzCisJCQkJbHNldCBzX2NoZWNrZWQgJG4ge30KKwkJCX0KKworCQkJY29udGludWUKKwkJfQorCisJCWlmIHtbbGluZGV4ICRzX3NlZW4gICAgJG5dIGVxICRzCisJCSAmJiBbbGluZGV4ICRzX2NoZWNrZWQgJG5dIG5lICRzfSB7CisJCQkjIERvbid0IHNlbmQgZW1wdHkgbGluZXMgdG8gQXNwZWxsIGl0IGRvZXNuJ3QgY2hlY2sgdGhlbS4KKwkJCSMKKwkJCWlmIHskcyBlcSB7fX0geworCQkJCWxzZXQgc19jaGVja2VkICRuICRzCisJCQkJY29udGludWUKKwkJCX0KKworCQkJIyBEb24ndCBzZW5kIHR5cGljYWwgcy1iLW8gbGluZXMgYXMgdGhlIGVtYWlscyBhcmUKKwkJCSMgYWxtb3N0IGFsd2F5cyBtaXNzcGVsbGVkIGFjY29yZGluZyB0byBBc3BlbGwuCisJCQkjCisJCQlpZiB7W3JlZ2V4cCAtbm9jYXNlIHteW2Etei1dKy1ieTouKjwuKkAuKj4kfSAkc119IHsKKwkJCQkkd190ZXh0IHRhZyByZW1vdmUgbWlzc3BlbGxlZCAiJG4uMCIgIiRuLmVuZCIKKwkJCQlsc2V0IHNfY2hlY2tlZCAkbiAkcworCQkJCWNvbnRpbnVlCisJCQl9CisKKwkJCXB1dHMgJHNfZmQgXiRzCisJCQlsYXBwZW5kIHNfcGVuZGluZyBbbGlzdCAkbiAkc10KKwkJCXNldCBhY3RpdmUgMQorCQl9IGVsc2UgeworCQkJIyBEZWxheSB1bnRpbCBhbm90aGVyIGlkbGUgbG9vcCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QKKwkJCSMgc3BlbGxjaGVjayBsaW5lcyB0aGUgdXNlciBpcyBhY3RpdmVseSBjaGFuZ2luZy4KKwkJCSMKKwkJCWxzZXQgc19zZWVuICRuICRzCisJCX0KKwl9CisKKwlpZiB7JGFjdGl2ZX0geworCQlzZXQgc19jbGVhciAxCisJCWZsdXNoICRzX2ZkCisJfSBlbHNlIHsKKwkJX3Jlc3RhcnRfdGltZXIgJHRoaXMKKwl9Cit9CisKK21ldGhvZCBfcmVhZCB7fSB7CisJd2hpbGUge1tnZXRzICRzX2ZkIGxpbmVdID49IDB9IHsKKwkJc2V0IGxpbmVubyBbbGluZGV4ICRzX3BlbmRpbmcgMCAwXQorCQlzZXQgbGluZSBbc3RyaW5nIHRyaW0gJGxpbmVdCisKKwkJaWYgeyRzX2NsZWFyfSB7CisJCQkkd190ZXh0IHRhZyByZW1vdmUgbWlzc3BlbGxlZCAiJGxpbmVuby4wIiAiJGxpbmVuby5lbmQiCisJCQlzZXQgc19jbGVhciAwCisJCX0KKworCQlpZiB7JGxpbmUgZXEge319IHsKKwkJCWxzZXQgc19jaGVja2VkICRsaW5lbm8gW2xpbmRleCAkc19wZW5kaW5nIDAgMV0KKwkJCXNldCBzX3BlbmRpbmcgW2xyYW5nZSAkc19wZW5kaW5nIDEgZW5kXQorCQkJc2V0IHNfY2xlYXIgMQorCQkJY29udGludWUKKwkJfQorCisJCXNldCBzdWdnIFtsaXN0XQorCQlzd2l0Y2ggLS0gW3N0cmluZyByYW5nZSAkbGluZSAwIDFdIHsKKwkJeyYgfSB7CisJCQlzZXQgbGluZSBbc3BsaXQgW3N0cmluZyByYW5nZSAkbGluZSAyIGVuZF0gOl0KKwkJCXNldCBpbmZvIFtzcGxpdCBbbGluZGV4ICRsaW5lIDBdIHsgfV0KKwkJCXNldCBvcmlnIFtsaW5kZXggJGluZm8gMF0KKwkJCXNldCBvZmZzIFtsaW5kZXggJGluZm8gMl0KKwkJCWZvcmVhY2ggcyBbc3BsaXQgW2xpbmRleCAkbGluZSAxXSAsXSB7CisJCQkJbGFwcGVuZCBzdWdnIFtzdHJpbmcgcmFuZ2UgJHMgMSBlbmRdCisJCQl9CisJCX0KKwkJeyMgfSB7CisJCQlzZXQgaW5mbyBbc3BsaXQgW3N0cmluZyByYW5nZSAkbGluZSAyIGVuZF0geyB9XQorCQkJc2V0IG9yaWcgW2xpbmRleCAkaW5mbyAwXQorCQkJc2V0IG9mZnMgW2xpbmRleCAkaW5mbyAxXQorCQl9CisJCWRlZmF1bHQgeworCQkJcHV0cyBzdGRlcnIgIjxzcGVsbD4gJGxpbmUiCisJCQljb250aW51ZQorCQl9CisJCX0KKworCQlpbmNyIG9mZnMgLTEKKwkJc2V0IGJfbG9jICIkbGluZW5vLiRvZmZzIgorCQlzZXQgZV9sb2MgWyR3X3RleHQgaW5kZXggIiRsaW5lbm8uJG9mZnMgd29yZGVuZCJdCisJCXNldCBjdXJyIFskd190ZXh0IGdldCAkYl9sb2MgJGVfbG9jXQorCisJCSMgQXQgbGVhc3QgZm9yIEVuZ2xpc2ggY3VyciA9ICJib2IiLCBvcmlnID0gImJvYidzIgorCQkjIHNvIFRrIGRpZG4ndCBpbmNsdWRlIHRoZSAncyBidXQgQXNwZWxsIGRpZC4gIFdlCisJCSMgdHJ5IHRvIHJvdW5kIG91dCB0aGUgd29yZC4KKwkJIworCQl3aGlsZSB7JGN1cnIgbmUgJG9yaWcKKwkJICYmIFtzdHJpbmcgZXF1YWwgLWxlbmd0aCBbc3RyaW5nIGxlbmd0aCAkY3Vycl0gJGN1cnIgJG9yaWddfSB7CisJCQlzZXQgbl9sb2MgIFskd190ZXh0IGluZGV4ICIkZV9sb2MgKzFjIl0KKwkJCXNldCBuX2N1cnIgWyR3X3RleHQgZ2V0ICRiX2xvYyAkbl9sb2NdCisJCQlpZiB7JG5fY3VyciBlcSAkY3Vycn0geworCQkJCWJyZWFrCisJCQl9CisJCQlzZXQgY3VyciAgJG5fY3VycgorCQkJc2V0IGVfbG9jICRuX2xvYworCQl9CisKKwkJaWYgeyRjdXJyIGVxICRvcmlnfSB7CisJCQkkd190ZXh0IHRhZyBhZGQgbWlzc3BlbGxlZCAkYl9sb2MgJGVfbG9jCisJCQlpZiB7W2xsZW5ndGggJHN1Z2ddID4gMH0geworCQkJCXNldCBzX3N1Z2dlc3QoJG9yaWcpICRzdWdnCisJCQl9IGVsc2UgeworCQkJCXVuc2V0IC1ub2NvbXBsYWluIHNfc3VnZ2VzdCgkb3JpZykKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXVuc2V0IC1ub2NvbXBsYWluIHNfc3VnZ2VzdCgkb3JpZykKKwkJfQorCX0KKworCWZjb25maWd1cmUgJHNfZmQgLWJsb2NrIDEKKwlpZiB7W2VvZiAkc19mZF19IHsKKwkJaWYgeyFbY2F0Y2gge2Nsb3NlICRzX2ZkfSBlcnJdfSB7CisJCQlzZXQgZXJyIFttYyAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIl0KKwkJfQorCQljYXRjaCB7YWZ0ZXIgY2FuY2VsICRzX2l9CisJCSR3X3RleHQgdGFnIHJlbW92ZSBtaXNzcGVsbGVkIDEuMCBlbmQKKwkJZXJyb3JfcG9wdXAgW3N0cmNhdCBbbWMgIlNwZWxsIENoZWNrZXIgRmFpbGVkIl0gIlxuXG4iICRlcnJdCisJCXJldHVybgorCX0KKwlmY29uZmlndXJlICRzX2ZkIC1ibG9jayAwCisKKwlpZiB7W2xsZW5ndGggJHNfcGVuZGluZ10gPT0gMH0geworCQlfcmVzdGFydF90aW1lciAkdGhpcworCX0KK30KKworcHJvYyBhdmFpbGFibGVfbGFuZ3Mge30geworCXNldCBsYW5ncyBbbGlzdF0KKwljYXRjaCB7CisJCXNldCBmZCBbb3BlbiBbbGlzdCB8IGFzcGVsbCBkdW1wIGRpY3RzXSByXQorCQl3aGlsZSB7W2dldHMgJGZkIGxpbmVdID49IDB9IHsKKwkJCWlmIHskbGluZSBlcSB7fX0gY29udGludWUKKwkJCWxhcHBlbmQgbGFuZ3MgJGxpbmUKKwkJfQorCQljbG9zZSAkZmQKKwl9CisJcmV0dXJuICRsYW5ncworfQorCit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi9zc2hrZXkudGNsIGIvZ2l0LWd1aS9saWIvc3Noa2V5LnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTY0NTdiCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvc3Noa2V5LnRjbApAQCAtMCwwICsxLDEyOCBAQAorIyBnaXQtZ3VpIGFib3V0IGdpdC1ndWkgZGlhbG9nCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBTaGF3biBQZWFyY2UKKworcHJvYyBmaW5kX3NzaF9rZXkge30geworCWZvcmVhY2ggbmFtZSB7fi8uc3NoL2lkX2RzYS5wdWIgfi8uc3NoL2lkX3JzYS5wdWIgfi8uc3NoL2lkZW50aXR5LnB1Yn0geworCQlpZiB7W2ZpbGUgZXhpc3RzICRuYW1lXX0geworCQkJc2V0IGZoICAgIFtvcGVuICRuYW1lIHJdCisJCQlzZXQgY29udCAgW3JlYWQgJGZoXQorCQkJY2xvc2UgJGZoCisJCQlyZXR1cm4gW2xpc3QgJG5hbWUgJGNvbnRdCisJCX0KKwl9CisKKwlyZXR1cm4ge30KK30KKworcHJvYyBkb19zc2hfa2V5IHt9IHsKKwlnbG9iYWwgc3Noa2V5X3RpdGxlIGhhdmVfdGs4NSBzc2hrZXlfZmQgdXNlX3R0ayBOUworCisJc2V0IHcgLnNzaGtleV9kaWFsb2cKKwlpZiB7W3dpbmZvIGV4aXN0cyAkd119IHsKKwkJcmFpc2UgJHcKKwkJcmV0dXJuCisJfQorCisJRGlhbG9nICR3CisJd20gdHJhbnNpZW50ICR3IC4KKworCXNldCBmaW5mbyBbZmluZF9zc2hfa2V5XQorCWlmIHskZmluZm8gZXEge319IHsKKwkJc2V0IHNzaGtleV90aXRsZSBbbWMgIk5vIGtleXMgZm91bmQuIl0KKwkJc2V0IGdlbl9zdGF0ZSAgIG5vcm1hbAorCX0gZWxzZSB7CisJCXNldCBzc2hrZXlfdGl0bGUgW21jICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIiBbbGluZGV4ICRmaW5mbyAwXV0KKwkJc2V0IGdlbl9zdGF0ZSAgIGRpc2FibGVkCisJfQorCisJJHtOU306OmZyYW1lICR3LmhlYWRlcgorCSR7TlN9OjpsYWJlbCAkdy5oZWFkZXIubGJsIC10ZXh0dmFyaWFibGUgc3Noa2V5X3RpdGxlIC1hbmNob3IgdworCSR7TlN9OjpidXR0b24gJHcuaGVhZGVyLmdlbiAtdGV4dCBbbWMgIkdlbmVyYXRlIEtleSJdIFwKKwkJLWNvbW1hbmQgW2xpc3QgbWFrZV9zc2hfa2V5ICR3XSAtc3RhdGUgJGdlbl9zdGF0ZQorCXBhY2sgJHcuaGVhZGVyLmxibCAtc2lkZSBsZWZ0IC1leHBhbmQgMSAtZmlsbCB4CisJcGFjayAkdy5oZWFkZXIuZ2VuIC1zaWRlIHJpZ2h0CisJcGFjayAkdy5oZWFkZXIgLWZpbGwgeCAtcGFkeSA1IC1wYWR4IDUKKworCXRleHQgJHcuY29udGVudHMgLXdpZHRoIDYwIC1oZWlnaHQgMTAgLXdyYXAgY2hhciAtcmVsaWVmIHN1bmtlbgorCXBhY2sgJHcuY29udGVudHMgLWZpbGwgYm90aCAtZXhwYW5kIDEKKwlpZiB7JGhhdmVfdGs4NX0geworCQlzZXQgY2xyIGRhcmtibHVlCisJCWlmIHskdXNlX3R0a30geyBzZXQgY2xyIFt0dGs6OnN0eWxlIGxvb2t1cCAuIC1zZWxlY3RiYWNrZ3JvdW5kXSB9CisJCSR3LmNvbnRlbnRzIGNvbmZpZ3VyZSAtaW5hY3RpdmVzZWxlY3RiYWNrZ3JvdW5kICRjbHIKKwl9CisKKwkke05TfTo6ZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jbG9zZSAtdGV4dCBbbWMgQ2xvc2VdIFwKKwkJLWRlZmF1bHQgYWN0aXZlIC1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHddCisJcGFjayAkdy5idXR0b25zLmNsb3NlIC1zaWRlIHJpZ2h0CisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNvcHkgLXRleHQgW21jICJDb3B5IFRvIENsaXBib2FyZCJdIFwKKwkJLWNvbW1hbmQgW2xpc3QgdGtfdGV4dENvcHkgJHcuY29udGVudHNdCisJcGFjayAkdy5idXR0b25zLmNvcHkgLXNpZGUgbGVmdAorCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSA1IC1wYWR4IDUKKworCWlmIHskZmluZm8gbmUge319IHsKKwkJJHcuY29udGVudHMgaW5zZXJ0IGVuZCBbbGluZGV4ICRmaW5mbyAxXSBzZWwKKwl9CisJJHcuY29udGVudHMgY29uZmlndXJlIC1zdGF0ZSBkaXNhYmxlZAorCisJYmluZCAkdyA8VmlzaWJpbGl0eT4gImdyYWIgJHc7IGZvY3VzICR3LmJ1dHRvbnMuY2xvc2UiCisJYmluZCAkdyA8S2V5LUVzY2FwZT4gImRlc3Ryb3kgJHciCisJYmluZCAkdyA8S2V5LVJldHVybj4gImRlc3Ryb3kgJHciCisJYmluZCAkdyA8RGVzdHJveT4ga2lsbF9zc2hrZXkKKwl3bSB0aXRsZSAkdyBbbWMgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5Il0KKwl0azo6UGxhY2VXaW5kb3cgJHcgd2lkZ2V0IC4KKwl0a3dhaXQgd2luZG93ICR3Cit9CisKK3Byb2MgbWFrZV9zc2hfa2V5IHt3fSB7CisJZ2xvYmFsIHNzaGtleV90aXRsZSBzc2hrZXlfb3V0cHV0IHNzaGtleV9mZAorCisJc2V0IHNzaGtleV90aXRsZSBbbWMgIkdlbmVyYXRpbmcuLi4iXQorCSR3LmhlYWRlci5nZW4gY29uZmlndXJlIC1zdGF0ZSBkaXNhYmxlZAorCisJc2V0IGNtZGxpbmUgW2xpc3Qgc2ggLWMge2VjaG8gfCBzc2gta2V5Z2VuIC1xIC10IHJzYSAtZiB+Ly5zc2gvaWRfcnNhIDI+JjF9XQorCisJaWYge1tjYXRjaCB7IHNldCBzc2hrZXlfZmQgW19vcGVuX3N0ZG91dF9zdGRlcnIgJGNtZGxpbmVdIH0gZXJyXX0geworCQllcnJvcl9wb3B1cCBbbWMgIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuXG4lcyIgJGVycl0KKwkJcmV0dXJuCisJfQorCisJc2V0IHNzaGtleV9vdXRwdXQge30KKwlmY29uZmlndXJlICRzc2hrZXlfZmQgLWJsb2NraW5nIDAKKwlmaWxlZXZlbnQgJHNzaGtleV9mZCByZWFkYWJsZSBbbGlzdCByZWFkX3NzaGtleV9vdXRwdXQgJHNzaGtleV9mZCAkd10KK30KKworcHJvYyBraWxsX3NzaGtleSB7fSB7CisJZ2xvYmFsIHNzaGtleV9mZAorCWlmIHshW2luZm8gZXhpc3RzIHNzaGtleV9mZF19IHJldHVybgorCWNhdGNoIHsga2lsbF9maWxlX3Byb2Nlc3MgJHNzaGtleV9mZCB9CisJY2F0Y2ggeyBjbG9zZSAkc3Noa2V5X2ZkIH0KK30KKworcHJvYyByZWFkX3NzaGtleV9vdXRwdXQge2ZkIHd9IHsKKwlnbG9iYWwgc3Noa2V5X2ZkIHNzaGtleV9vdXRwdXQgc3Noa2V5X3RpdGxlCisKKwlzZXQgc3Noa2V5X291dHB1dCAiJHNzaGtleV9vdXRwdXRbcmVhZCAkZmRdIgorCWlmIHshW2VvZiAkZmRdfSByZXR1cm4KKworCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAxCisJdW5zZXQgc3Noa2V5X2ZkCisKKwkkdy5jb250ZW50cyBjb25maWd1cmUgLXN0YXRlIG5vcm1hbAorCWlmIHtbY2F0Y2gge2Nsb3NlICRmZH0gZXJyXX0geworCQlzZXQgc3Noa2V5X3RpdGxlIFttYyAiR2VuZXJhdGlvbiBmYWlsZWQuIl0KKwkJJHcuY29udGVudHMgaW5zZXJ0IGVuZCAkZXJyCisJCSR3LmNvbnRlbnRzIGluc2VydCBlbmQgIlxuIgorCQkkdy5jb250ZW50cyBpbnNlcnQgZW5kICRzc2hrZXlfb3V0cHV0CisJfSBlbHNlIHsKKwkJc2V0IGZpbmZvIFtmaW5kX3NzaF9rZXldCisJCWlmIHskZmluZm8gZXEge319IHsKKwkJCXNldCBzc2hrZXlfdGl0bGUgW21jICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIl0KKwkJCSR3LmNvbnRlbnRzIGluc2VydCBlbmQgJHNzaGtleV9vdXRwdXQKKwkJfSBlbHNlIHsKKwkJCXNldCBzc2hrZXlfdGl0bGUgW21jICJZb3VyIGtleSBpcyBpbjogJXMiIFtsaW5kZXggJGZpbmZvIDBdXQorCQkJJHcuY29udGVudHMgaW5zZXJ0IGVuZCBbbGluZGV4ICRmaW5mbyAxXSBzZWwKKwkJfQorCX0KKwkkdy5jb250ZW50cyBjb25maWd1cmUgLXN0YXRlIGRpc2FibGUKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL3N0YXR1c19iYXIudGNsIGIvZ2l0LWd1aS9saWIvc3RhdHVzX2Jhci50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxMTFhMQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL3N0YXR1c19iYXIudGNsCkBAIC0wLDAgKzEsMTMxIEBACisjIGdpdC1ndWkgc3RhdHVzIGJhciBtZWdhLXdpZGdldAorIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlCisKK2NsYXNzIHN0YXR1c19iYXIgeworCitmaWVsZCB3ICAgICAgICAgOyAjIG91ciBvd24gd2luZG93IHBhdGgKK2ZpZWxkIHdfbCAgICAgICA7ICMgdGV4dCB3aWRnZXQgd2UgZHJhdyBtZXNzYWdlcyBpbnRvCitmaWVsZCB3X2MgICAgICAgOyAjIGNhbnZhcyB3ZSBkcmF3IGEgcHJvZ3Jlc3MgYmFyIGludG8KK2ZpZWxkIGNfcGFjayAgICA7ICMgc2NyaXB0IHRvIHBhY2sgdGhlIGNhbnZhcyB3aXRoCitmaWVsZCBzdGF0dXMgIHt9OyAjIHNpbmdsZSBsaW5lIG9mIHRleHQgd2Ugc2hvdworZmllbGQgcHJlZml4ICB7fTsgIyB0ZXh0IHdlIGZvcm1hdCBpbnRvIHN0YXR1cworZmllbGQgdW5pdHMgICB7fTsgIyB1bml0IG9mIHByb2dyZXNzCitmaWVsZCBtZXRlciAgIHt9OyAjIGN1cnJlbnQgY29yZSBnaXQgcHJvZ3Jlc3MgbWV0ZXIgKGlmIGFjdGl2ZSkKKworY29uc3RydWN0b3IgbmV3IHtwYXRofSB7CisJZ2xvYmFsIHVzZV90dGsgTlMKKwlzZXQgdyAkcGF0aAorCXNldCB3X2wgJHcubAorCXNldCB3X2MgJHcuYworCisJJHtOU306OmZyYW1lICR3CisJaWYgeyEkdXNlX3R0a30geworCQkkdyBjb25maWd1cmUgLWJvcmRlcndpZHRoIDEgLXJlbGllZiBzdW5rZW4KKwl9CisJJHtOU306OmxhYmVsICR3X2wgXAorCQktdGV4dHZhcmlhYmxlIEBzdGF0dXMgXAorCQktYW5jaG9yIHcgXAorCQktanVzdGlmeSBsZWZ0CisJcGFjayAkd19sIC1zaWRlIGxlZnQKKwlzZXQgY19wYWNrIFtjYiBfb25lbGluZV9wYWNrXQorCisJYmluZCAkdyA8RGVzdHJveT4gW2NiIF9kZWxldGUgJVddCisJcmV0dXJuICR0aGlzCit9CisKK21ldGhvZCBfb25lbGluZV9wYWNrIHt9IHsKKwkkd19jIGNvbmYgLXdpZHRoIDEwMAorCXBhY2sgJHdfYyAtc2lkZSByaWdodAorfQorCitjb25zdHJ1Y3RvciB0d29fbGluZSB7cGF0aH0geworCWdsb2JhbCBOUworCXNldCB3ICRwYXRoCisJc2V0IHdfbCAkdy5sCisJc2V0IHdfYyAkdy5jCisKKwkke05TfTo6ZnJhbWUgJHcKKwkke05TfTo6bGFiZWwgJHdfbCBcCisJCS10ZXh0dmFyaWFibGUgQHN0YXR1cyBcCisJCS1hbmNob3IgdyBcCisJCS1qdXN0aWZ5IGxlZnQKKwlwYWNrICR3X2wgLWFuY2hvciB3IC1maWxsIHgKKwlzZXQgY19wYWNrIFtsaXN0IHBhY2sgJHdfYyAtZmlsbCB4XQorCisJYmluZCAkdyA8RGVzdHJveT4gW2NiIF9kZWxldGUgJVddCisJcmV0dXJuICR0aGlzCit9CisKK21ldGhvZCBzdGFydCB7bXNnIHVkc30geworCWlmIHtbd2luZm8gZXhpc3RzICR3X2NdfSB7CisJCSR3X2MgY29vcmRzIGJhciAwIDAgMCAyMAorCX0gZWxzZSB7CisJCWNhbnZhcyAkd19jIFwKKwkJCS1oZWlnaHQgW2V4cHIge2ludChbd2luZm8gcmVxaGVpZ2h0ICR3X2xdICogMC42KX1dIFwKKwkJCS1ib3JkZXJ3aWR0aCAxIFwKKwkJCS1yZWxpZWYgZ3Jvb3ZlIFwKKwkJCS1oaWdobGlnaHR0IDAKKwkJJHdfYyBjcmVhdGUgcmVjdGFuZ2xlIDAgMCAwIDIwIC10YWdzIGJhciAtZmlsbCBuYXZ5CisJCWV2YWwgJGNfcGFjaworCX0KKworCXNldCBzdGF0dXMgJG1zZworCXNldCBwcmVmaXggJG1zZworCXNldCB1bml0cyAgJHVkcworCXNldCBtZXRlciAge30KK30KKworbWV0aG9kIHVwZGF0ZSB7aGF2ZSB0b3RhbH0geworCXNldCBwZG9uZSAwCisJc2V0IGNkb25lIDAKKwlpZiB7JHRvdGFsID4gMH0geworCQlzZXQgcGRvbmUgW2V4cHIgezEwMCAqICRoYXZlIC8gJHRvdGFsfV0KKwkJc2V0IGNkb25lIFtleHByIHtbd2luZm8gd2lkdGggJHdfY10gKiAkaGF2ZSAvICR0b3RhbH1dCisJfQorCisJc2V0IHByZWMgW3N0cmluZyBsZW5ndGggW2Zvcm1hdCAlaSAkdG90YWxdXQorCXNldCBzdGF0dXMgW21jICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIiBcCisJCSRwcmVmaXggXAorCQkkcHJlYyAkaGF2ZSBcCisJCSRwcmVjICR0b3RhbCBcCisJCSR1bml0cyAkcGRvbmVdCisJJHdfYyBjb29yZHMgYmFyIDAgMCAkY2RvbmUgMjAKK30KKworbWV0aG9kIHVwZGF0ZV9tZXRlciB7YnVmfSB7CisJYXBwZW5kIG1ldGVyICRidWYKKwlzZXQgciBbc3RyaW5nIGxhc3QgIlxyIiAkbWV0ZXJdCisJaWYgeyRyID09IC0xfSB7CisJCXJldHVybgorCX0KKworCXNldCBwcmlvciBbc3RyaW5nIHJhbmdlICRtZXRlciAwICRyXQorCXNldCBtZXRlciBbc3RyaW5nIHJhbmdlICRtZXRlciBbZXhwciB7JHIgKyAxfV0gZW5kXQorCXNldCBwICJcXCgoXFxkKykvKFxcZCspXFwpIgorCWlmIHtbcmVnZXhwICI6XFxzKlxcZCslICRwXCg/OiwgZG9uZS5cXHMqXG58XFxzKlxyKVwkIiAkcHJpb3IgX2ogYSBiXX0geworCQl1cGRhdGUgJHRoaXMgJGEgJGIKKwl9IGVsc2VpZiB7W3JlZ2V4cCAiJHBcXHMrZG9uZVxyXCQiICRwcmlvciBfaiBhIGJdfSB7CisJCXVwZGF0ZSAkdGhpcyAkYSAkYgorCX0KK30KKworbWV0aG9kIHN0b3Age3ttc2cge319fSB7CisJZGVzdHJveSAkd19jCisJaWYgeyRtc2cgbmUge319IHsKKwkJc2V0IHN0YXR1cyAkbXNnCisJfQorfQorCittZXRob2Qgc2hvdyB7bXNnIHt0ZXN0IHt9fX0geworCWlmIHskdGVzdCBlcSB7fSB8fCAkc3RhdHVzIGVxICR0ZXN0fSB7CisJCXNldCBzdGF0dXMgJG1zZworCX0KK30KKworbWV0aG9kIF9kZWxldGUge2N1cnJlbnR9IHsKKwlpZiB7JGN1cnJlbnQgZXEgJHd9IHsKKwkJZGVsZXRlX3RoaXMKKwl9Cit9CisKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL3RoZW1lZC50Y2wgYi9naXQtZ3VpL2xpYi90aGVtZWQudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiODhkMzYKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi90aGVtZWQudGNsCkBAIC0wLDAgKzEsMjY1IEBACisjIEZ1bmN0aW9ucyBmb3Igc3VwcG9ydGluZyB0aGUgdXNlIG9mIHRoZW1lZCBUayB3aWRnZXRzIGluIGdpdC1ndWkuCisjIENvcHlyaWdodCAoQykgMjAwOSBQYXQgVGhveXRzIDxwYXR0aG95dHNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitwcm9jIEluaXRUaGVtZSB7fSB7CisJIyBDcmVhdGUgYSBjb2xvciBsYWJlbCBzdHlsZSAoYmcgY2FuIGJlIG92ZXJyaWRkZW4gYnkgd2lkZ2V0IG9wdGlvbikKKwl0dGs6OnN0eWxlIGxheW91dCBDb2xvci5UTGFiZWwgeworCQlDb2xvci5MYWJlbC5ib3JkZXIgLXN0aWNreSBuZXdzIC1jaGlsZHJlbiB7CisJCQlDb2xvci5sYWJlbC5maWxsIC1zdGlja3kgbmV3cyAtY2hpbGRyZW4geworCQkJCUNvbG9yLkxhYmVsLnBhZGRpbmcgLXN0aWNreSBuZXdzIC1jaGlsZHJlbiB7CisJCQkJCUNvbG9yLkxhYmVsLmxhYmVsIC1zdGlja3kgbmV3c319fX0KKwlldmFsIFtsaW5zZXJ0IFt0dGs6OnN0eWxlIGNvbmZpZ3VyZSBUTGFiZWxdIDAgXAorCQkJICB0dGs6OnN0eWxlIGNvbmZpZ3VyZSBDb2xvci5UTGFiZWxdCisJdHRrOjpzdHlsZSBjb25maWd1cmUgQ29sb3IuVExhYmVsIFwKKwkJLWJvcmRlcndpZHRoIDAgLXJlbGllZiBmbGF0IC1wYWRkaW5nIDIKKwl0dGs6OnN0eWxlIG1hcCBDb2xvci5UTGFiZWwgLWJhY2tncm91bmQge3t9IGdvbGR9CisJIyBXZSBhbHNvIG5lZWQgYSBwYWRkZWQgbGFiZWwuCisJdHRrOjpzdHlsZSBjb25maWd1cmUgUGFkZGVkLlRMYWJlbCBcCisJCS1wYWRkaW5nIHs1IDV9IC1ib3JkZXJ3aWR0aCAxIC1yZWxpZWYgc29saWQKKwkjIFdlIG5lZWQgYSBnb2xkIGZyYW1lLgorCXR0azo6c3R5bGUgbGF5b3V0IEdvbGQuVEZyYW1lIHsKKwkJR29sZC5GcmFtZS5ib3JkZXIgLXN0aWNreSBuc3dlIC1jaGlsZHJlbiB7CisJCQlHb2xkLkZyYW1lLmZpbGwgLXN0aWNreSBuc3dlfX0KKwl0dGs6OnN0eWxlIGNvbmZpZ3VyZSBHb2xkLlRGcmFtZSAtYmFja2dyb3VuZCBnb2xkIC1yZWxpZWYgZmxhdAorCSMgbGlzdGJveGVzIHNob3VsZCBoYXZlIGEgdGhlbWUgYm9yZGVyIHNvIGVtYmVkIGluIHR0azo6ZnJhbWUKKwl0dGs6OnN0eWxlIGxheW91dCBTTGlzdGJveC5URnJhbWUgeworCQlTTGlzdGJveC5GcmFtZS5FbnRyeS5maWVsZCAtc3RpY2t5IG5ld3MgLWJvcmRlciB0cnVlIC1jaGlsZHJlbiB7CisJCQlTTGlzdGJveC5GcmFtZS5wYWRkaW5nIC1zdGlja3kgbmV3cworCQl9CisJfQorCisJIyBIYW5kbGUgZWl0aGVyIGN1cnJlbnQgVGsgb3Igb2xkZXIgdmVyc2lvbnMgb2YgOC41CisJaWYge1tjYXRjaCB7c2V0IHRoZW1lIFt0dGs6OnN0eWxlIHRoZW1lIHVzZV19XX0geworCQlzZXQgdGhlbWUgICQ6OnR0azo6Y3VycmVudFRoZW1lCisJfQorCisJaWYge1tsc2VhcmNoIC1leGFjdCB7ZGVmYXVsdCBhbHQgY2xhc3NpYyBjbGFtfSAkdGhlbWVdICE9IC0xfSB7CisJCSMgU2ltcGxlIG92ZXJyaWRlIG9mIHN0YW5kYXJkIHR0azo6ZW50cnkgdG8gY2hhbmdlIHRoZSBmaWVsZAorCQkjIHBhY2tncm91bmQgYWNjb3JkaW5nIHRvIGEgc3RhdGUgZmxhZy4gV2Ugc2hvdWxkIHVzZSAndXNlcjEnCisJCSMgYnV0IG5vdCBhbGwgdmVyc2lvbnMgb2YgOC41IHN1cHBvcnQgdGhhdCBzbyBtYWtlIHVzZSBvZiAncHJlc3NlZCcKKwkJIyB3aGljaCBpcyBub3Qgbm9ybWFsbHkgaW4gdXNlIGZvciBlbnRyeSB3aWRnZXRzLgorCQl0dGs6OnN0eWxlIGxheW91dCBFZGdlZC5FbnRyeSBbdHRrOjpzdHlsZSBsYXlvdXQgVEVudHJ5XQorCQl0dGs6OnN0eWxlIG1hcCBFZGdlZC5FbnRyeSB7Kn1bdHRrOjpzdHlsZSBtYXAgVEVudHJ5XQorCQl0dGs6OnN0eWxlIGNvbmZpZ3VyZSBFZGdlZC5FbnRyeSB7Kn1bdHRrOjpzdHlsZSBjb25maWd1cmUgVEVudHJ5XSBcCisJCQktZmllbGRiYWNrZ3JvdW5kIGxpZ2h0Z3JlZW4KKwkJdHRrOjpzdHlsZSBtYXAgRWRnZWQuRW50cnkgLWZpZWxkYmFja2dyb3VuZCB7CisJCQl7cHJlc3NlZCAhZGlzYWJsZWR9IGxpZ2h0cGluaworCQl9CisJfSBlbHNlIHsKKwkJIyBGb3IgZmFuY2llciB0aGVtZXMsIGluIHBhcnRpY3VsYXIgdGhlIFdpbmRvd3Mgb25lcywgdGhlIGZpZWxkCisJCSMgZWxlbWVudCBtYXkgbm90IHN1cHBvcnQgY2hhbmdpbmcgdGhlIGJhY2tncm91bmQgY29sb3IuIFNvIGluc3RlYWQKKwkJIyBvdmVycmlkZSB0aGUgZmlsbCB1c2luZyB0aGUgZGVmYXVsdCBmaWxsIGVsZW1lbnQuIElmIHdlIG92ZXJyb2RlCisJCSMgdGhlIHZpc3RhIHRoZW1lIGZpZWxkIGVsZW1lbnQgd2Ugd291bGQgbG9vc2UgdGhlIHRoZW1lZCBib3JkZXIKKwkJIyBvZiB0aGUgd2lkZ2V0LgorCQljYXRjaCB7CisJCQl0dGs6OnN0eWxlIGVsZW1lbnQgY3JlYXRlIGNvbG9yLmZpbGwgZnJvbSBkZWZhdWx0CisJCX0KKworCQl0dGs6OnN0eWxlIGxheW91dCBFZGdlZC5FbnRyeSB7CisJCQlFZGdlZC5FbnRyeS5maWVsZCAtc3RpY2t5IG5zd2UgLWJvcmRlciAwIC1jaGlsZHJlbiB7CisJCQkJRWRnZWQuRW50cnkuYm9yZGVyIC1zdGlja3kgbnN3ZSAtYm9yZGVyIDEgLWNoaWxkcmVuIHsKKwkJCQkJRWRnZWQuRW50cnkucGFkZGluZyAtc3RpY2t5IG5zd2UgLWNoaWxkcmVuIHsKKwkJCQkJCUVkZ2VkLkVudHJ5LmNvbG9yLmZpbGwgLXN0aWNreSBuc3dlIC1jaGlsZHJlbiB7CisJCQkJCQkJRWRnZWQuRW50cnkudGV4dGFyZWEgLXN0aWNreSBuc3dlCisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQl0dGs6OnN0eWxlIGNvbmZpZ3VyZSBFZGdlZC5FbnRyeSB7Kn1bdHRrOjpzdHlsZSBjb25maWd1cmUgVEVudHJ5XSBcCisJCQktYmFja2dyb3VuZCBsaWdodGdyZWVuIC1wYWRkaW5nIDAgLWJvcmRlcndpZHRoIDAKKwkJdHRrOjpzdHlsZSBtYXAgRWRnZWQuRW50cnkgeyp9W3R0azo6c3R5bGUgbWFwIFRFbnRyeV0gXAorCQkJLWJhY2tncm91bmQge3twcmVzc2VkICFkaXNhYmxlZH0gbGlnaHRwaW5rfQorCX0KKworCWlmIHtbbHNlYXJjaCBbYmluZCAuIDw8VGhlbWVDaGFuZ2VkPj5dIEluaXRUaGVtZV0gPT0gLTF9IHsKKwkJYmluZCAuIDw8VGhlbWVDaGFuZ2VkPj4gK1tuYW1lc3BhY2UgY29kZSBbbGlzdCBJbml0VGhlbWVdXQorCX0KK30KKworcHJvYyBnb2xkX2ZyYW1lIHt3IGFyZ3N9IHsKKwlnbG9iYWwgdXNlX3R0aworCWlmIHskdXNlX3R0a30geworCQlldmFsIFtsaW5zZXJ0ICRhcmdzIDAgdHRrOjpmcmFtZSAkdyAtc3R5bGUgR29sZC5URnJhbWVdCisJfSBlbHNlIHsKKwkJZXZhbCBbbGluc2VydCAkYXJncyAwIGZyYW1lICR3IC1iYWNrZ3JvdW5kIGdvbGRdCisJfQorfQorCitwcm9jIHRsYWJlbCB7dyBhcmdzfSB7CisJZ2xvYmFsIHVzZV90dGsKKwlpZiB7JHVzZV90dGt9IHsKKwkJc2V0IGNtZCBbbGlzdCB0dGs6OmxhYmVsICR3IC1zdHlsZSBDb2xvci5UTGFiZWxdCisJCWZvcmVhY2gge2sgdn0gJGFyZ3MgeworCQkJc3dpdGNoIC1nbG9iIC0tICRrIHsKKwkJCQktYWN0aXZlYmFja2dyb3VuZCB7fQorCQkJCWRlZmF1bHQgeyBsYXBwZW5kIGNtZCAkayAkdiB9CisJCQl9CisJCX0KKwkJZXZhbCAkY21kCisJfSBlbHNlIHsKKwkJZXZhbCBbbGluc2VydCAkYXJncyAwIGxhYmVsICR3XQorCX0KK30KKworIyBUaGUgcGFkZGVkIGxhYmVsIGdldHMgdXNlZCBpbiB0aGUgYWJvdXQgY2xhc3MuCitwcm9jIHBhZGRlZGxhYmVsIHt3IGFyZ3N9IHsKKwlnbG9iYWwgdXNlX3R0aworCWlmIHskdXNlX3R0a30geworCQlldmFsIFtsaW5zZXJ0ICRhcmdzIDAgdHRrOjpsYWJlbCAkdyAtc3R5bGUgUGFkZGVkLlRMYWJlbF0KKwl9IGVsc2UgeworCQlldmFsIFtsaW5zZXJ0ICRhcmdzIDAgbGFiZWwgJHcgXAorCQkJCSAgLXBhZHggNSAtcGFkeSA1IFwKKwkJCQkgIC1qdXN0aWZ5IGxlZnQgXAorCQkJCSAgLWFuY2hvciB3IFwKKwkJCQkgIC1ib3JkZXJ3aWR0aCAxIFwKKwkJCQkgIC1yZWxpZWYgc29saWRdCisJfQorfQorCisjIENyZWF0ZSBhIHRvcGxldmVsIGZvciB1c2UgYXMgYSBkaWFsb2cuCisjIElmIGF2YWlsYWJsZSwgc2V0cyB0aGUgRVdNSCBkaWFsb2cgaGludCBhbmQgaWYgdHRrIGlzIGVuYWJsZWQKKyMgcGxhY2UgYSB0aGVtZWQgZnJhbWUgb3ZlciB0aGUgc3VyZmFjZS4KK3Byb2MgRGlhbG9nIHt3IGFyZ3N9IHsKKwlldmFsIFtsaW5zZXJ0ICRhcmdzIDAgdG9wbGV2ZWwgJHcgLWNsYXNzIERpYWxvZ10KKwljYXRjaCB7d20gYXR0cmlidXRlcyAkdyAtdHlwZSBkaWFsb2d9CQorCXBhdmVfdG9wbGV2ZWwgJHcKKwlyZXR1cm4gJHcKK30KKworIyBUayB0b3BsZXZlbHMgYXJlIG5vdCB0aGVtZWQgLSBzbyBwYXZlIGl0IG92ZXIgd2l0aCBhIHRoZW1lZCBmcmFtZSB0byBnZXQKKyMgdGhlIGJhc2UgY29sb3IgY29ycmVjdCBwZXIgdGhlbWUuCitwcm9jIHBhdmVfdG9wbGV2ZWwge3d9IHsKKwlnbG9iYWwgdXNlX3R0aworCWlmIHskdXNlX3R0ayAmJiAhW3dpbmZvIGV4aXN0cyAkdy4hcGF2aW5nXX0geworCQlzZXQgcGF2aW5nIFt0dGs6OmZyYW1lICR3LiFwYXZpbmddCisJCXBsYWNlICRwYXZpbmcgLXggMCAteSAwIC1yZWx3aWR0aCAxIC1yZWxoZWlnaHQgMQorCQlsb3dlciAkcGF2aW5nCisJfQorfQorCisjIENyZWF0ZSBhIHNjcm9sbGVkIGxpc3Rib3ggd2l0aCBhcHByb3ByaWF0ZSBib3JkZXIgZm9yIHRoZSBjdXJyZW50IHRoZW1lLgorIyBPbiBtYW55IHRoZW1lcyB0aGUgYm9yZGVyIGZvciBhIHNjcm9sbGVkIGxpc3Rib3ggbmVlZHMgdG8gZ28gYXJvdW5kIHRoZQorIyBsaXN0Ym94IGFuZCB0aGUgc2Nyb2xsYmFyLgorcHJvYyBzbGlzdGJveCB7dyBhcmdzfSB7CisJZ2xvYmFsIHVzZV90dGsgTlMKKwlpZiB7JHVzZV90dGt9IHsKKwkJc2V0IGYgW3R0azo6ZnJhbWUgJHcgLXN0eWxlIFNMaXN0Ym94LlRGcmFtZSAtcGFkZGluZyAyXQorCX0gZWxzZSB7CisJCXNldCBmIFtmcmFtZSAkdyAtcmVsaWVmIGZsYXRdCisJfQorICAgIGlmIHtbY2F0Y2ggeworCQlpZiB7JHVzZV90dGt9IHsKKwkJCWV2YWwgW2xpbnNlcnQgJGFyZ3MgMCBsaXN0Ym94ICRmLmxpc3QgLXJlbGllZiBmbGF0IFwKKwkJCQkJICAtaGlnaGxpZ2h0dGhpY2tuZXNzIDAgLWJvcmRlcndpZHRoIDBdCisJCX0gZWxzZSB7CisJCQlldmFsIFtsaW5zZXJ0ICRhcmdzIDAgbGlzdGJveCAkZi5saXN0XQorCQl9CisgICAgICAgICR7TlN9OjpzY3JvbGxiYXIgJGYudnMgLWNvbW1hbmQgW2xpc3QgJGYubGlzdCB5dmlld10KKyAgICAgICAgJGYubGlzdCBjb25maWd1cmUgLXlzY3JvbGxjb21tYW5kIFtsaXN0ICRmLnZzIHNldF0KKyAgICAgICAgZ3JpZCAkZi5saXN0ICRmLnZzIC1zdGlja3kgbmV3cworICAgICAgICBncmlkIHJvd2NvbmZpZ3VyZSAkZiAwIC13ZWlnaHQgMQorICAgICAgICBncmlkIGNvbHVtbmNvbmZpZ3VyZSAkZiAwIC13ZWlnaHQgMQorCQliaW5kICRmLmxpc3QgPDxMaXN0Ym94U2VsZWN0Pj4gXAorCQkJW2xpc3QgZXZlbnQgZ2VuZXJhdGUgJHcgPDxMaXN0Ym94U2VsZWN0Pj5dCisgICAgICAgIGludGVycCBoaWRlIHt9ICR3CisgICAgICAgIGludGVycCBhbGlhcyB7fSAkdyB7fSAkZi5saXN0CisgICAgfSBlcnJdfSB7CisgICAgICAgIGRlc3Ryb3kgJGYKKyAgICAgICAgcmV0dXJuIC1jb2RlIGVycm9yICRlcnIKKyAgICB9CisgICAgcmV0dXJuICR3Cit9CisKKyMgZmV0Y2ggdGhlIGJhY2tncm91bmQgY29sb3IgZnJvbSBhIHdpZGdldC4KK3Byb2MgZ2V0X2JnX2NvbG9yIHt3fSB7CisJZ2xvYmFsIHVzZV90dGsKKwlpZiB7JHVzZV90dGt9IHsKKwkJc2V0IGJnIFt0dGs6OnN0eWxlIGxvb2t1cCBbd2luZm8gY2xhc3MgJHddIC1iYWNrZ3JvdW5kXQorCX0gZWxzZSB7CisJCXNldCBiZyBbJHcgY2dldCAtYmFja2dyb3VuZF0KKwl9CisJcmV0dXJuICRiZworfQorCisjIHR0azo6c3BpbmJveCBkaWRuJ3QgZ2V0IGFkZGVkIHVudGlsIDguNgorcHJvYyB0c3BpbmJveCB7dyBhcmdzfSB7CisJZ2xvYmFsIHVzZV90dGsKKwlpZiB7JHVzZV90dGsgJiYgW2xsZW5ndGggW2luZm8gY29tbWFuZHMgdHRrOjpzcGluYm94XV0gPiAwfSB7CisJCWV2YWwgW2xpbnNlcnQgJGFyZ3MgMCB0dGs6OnNwaW5ib3ggJHddCisJfSBlbHNlIHsKKwkJZXZhbCBbbGluc2VydCAkYXJncyAwIHNwaW5ib3ggJHddCisJfQorfQorCitwcm9jIHRlbnRyeSB7dyBhcmdzfSB7CisJZ2xvYmFsIHVzZV90dGsKKwlpZiB7JHVzZV90dGt9IHsKKwkJSW5pdFRoZW1lCisJCXR0azo6ZW50cnkgJHcgLXN0eWxlIEVkZ2VkLkVudHJ5CisJfSBlbHNlIHsKKwkJZW50cnkgJHcKKwl9CisKKwlyZW5hbWUgJHcgXyR3CisJaW50ZXJwIGFsaWFzIHt9ICR3IHt9IHRlbnRyeV93aWRnZXRwcm9jICR3CisJZXZhbCBbbGluc2VydCAkYXJncyAwIHRlbnRyeV93aWRnZXRwcm9jICR3IGNvbmZpZ3VyZV0KKwlyZXR1cm4gJHcKK30KK3Byb2MgdGVudHJ5X3dpZGdldHByb2Mge3cgY21kIGFyZ3N9IHsKKwlnbG9iYWwgdXNlX3R0aworCXN3aXRjaCAtLSAkY21kIHsKKwkJc3RhdGUgeworCQkJaWYgeyR1c2VfdHRrfSB7CisJCQkJcmV0dXJuIFt1cGxldmVsIDEgW2xpc3QgXyR3ICRjbWRdICRhcmdzXQorCQkJfSBlbHNlIHsKKwkJCQlpZiB7W2xzZWFyY2ggLWV4YWN0ICRhcmdzIHByZXNzZWRdICE9IC0xfSB7CisJCQkJCV8kdyBjb25maWd1cmUgLWJhY2tncm91bmQgbGlnaHRwaW5rCisJCQkJfSBlbHNlIHsKKwkJCQkJXyR3IGNvbmZpZ3VyZSAtYmFja2dyb3VuZCBsaWdodGdyZWVuCisJCQkJfQorCQkJfQorCQl9CisJCWNvbmZpZ3VyZSB7CisJCQlpZiB7JHVzZV90dGt9IHsKKwkJCQlpZiB7W3NldCBuIFtsc2VhcmNoIC1leGFjdCAkYXJncyAtYmFja2dyb3VuZF1dICE9IC0xfSB7CisJCQkJCXNldCBhcmdzIFtscmVwbGFjZSAkYXJncyAkbiBbaW5jciBuXV0KKwkJCQkJaWYge1tsbGVuZ3RoICRhcmdzXSA9PSAwfSB7cmV0dXJufQorCQkJCX0KKwkJCX0KKwkJCXJldHVybiBbdXBsZXZlbCAxIFtsaXN0IF8kdyAkY21kXSAkYXJnc10KKwkJfQorCQlkZWZhdWx0IHsgcmV0dXJuIFt1cGxldmVsIDEgW2xpc3QgXyR3ICRjbWRdICRhcmdzXSB9CisJfQorfQorCisjIFRrIDguNiBwcm92aWRlcyBhIHN0YW5kYXJkIGZvbnQgc2VsZWN0aW9uIGRpYWxvZy4gVGhpcyB1c2VzIHRoZSBuYXRpdmUKKyMgZGlhbG9ncyBvbiBXaW5kb3dzIGFuZCBNYWNPU1ggb3IgYSBzdGFuZGFyZCBUayBkaWFsb2cgb24gWDExLgorcHJvYyB0Y2hvb3NlZm9udCB7dyB0aXRsZSBmYW1pbHl2YXIgc2l6ZXZhcn0geworCWlmIHtbcGFja2FnZSB2c2F0aXNmaWVzIFtwYWNrYWdlIHByb3ZpZGUgVGtdIDguNl19IHsKKwkJdXB2YXIgIzAgJGZhbWlseXZhciBmYW1pbHkKKwkJdXB2YXIgIzAgJHNpemV2YXIgc2l6ZQorCQl0ayBmb250Y2hvb3NlciBjb25maWd1cmUgLXBhcmVudCAkdyAtdGl0bGUgJHRpdGxlIFwKKwkJCS1mb250IFtsaXN0ICRmYW1pbHkgJHNpemVdIFwKKwkJCS1jb21tYW5kIFtsaXN0IG9uX2Nob29zZWZvbnQgJGZhbWlseXZhciAkc2l6ZXZhcl0KKwkJdGsgZm9udGNob29zZXIgc2hvdworCX0gZWxzZSB7CisJCWNob29zZV9mb250OjpwaWNrICR3ICR0aXRsZSAkZmFtaWx5dmFyICRzaXpldmFyCisJfQorfQorCisjIENhbGxlZCB3aGVuIHRoZSBUayA4LjYgZm9udGNob29zZXIgc2VsZWN0cyBhIGZvbnQuCitwcm9jIG9uX2Nob29zZWZvbnQge2ZhbWlseXZhciBzaXpldmFyIGZvbnR9IHsKKwl1cHZhciAjMCAkZmFtaWx5dmFyIGZhbWlseQorCXVwdmFyICMwICRzaXpldmFyIHNpemUKKwlzZXQgZm9udCBbZm9udCBhY3R1YWwgJGZvbnRdCisJc2V0IGZhbWlseSBbZGljdCBnZXQgJGZvbnQgLWZhbWlseV0KKwlzZXQgc2l6ZSBbZGljdCBnZXQgJGZvbnQgLXNpemVdCit9CisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBtb2RlOiB0Y2wKKyMgaW5kZW50LXRhYnMtbW9kZTogdAorIyB0YWItd2lkdGg6IDQKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvdG9vbHMudGNsIGIvZ2l0LWd1aS9saWIvdG9vbHMudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYzk0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi90b29scy50Y2wKQEAgLTAsMCArMSwxNjUgQEAKKyMgZ2l0LWd1aSBUb29scyBtZW51IGltcGxlbWVudGF0aW9uCisKK3Byb2MgdG9vbHNfbGlzdCB7fSB7CisJZ2xvYmFsIHJlcG9fY29uZmlnCisKKwlzZXQgbmFtZXMge30KKwlmb3JlYWNoIGl0ZW0gW2FycmF5IG5hbWVzIHJlcG9fY29uZmlnIGd1aXRvb2wuKi5jbWRdIHsKKwkJbGFwcGVuZCBuYW1lcyBbc3RyaW5nIHJhbmdlICRpdGVtIDggZW5kLTRdCisJfQorCXJldHVybiBbbHNvcnQgJG5hbWVzXQorfQorCitwcm9jIHRvb2xzX3BvcHVsYXRlX2FsbCB7fSB7CisJZ2xvYmFsIHRvb2xzX21lbnViYXIgdG9vbHNfbWVudXRibAorCWdsb2JhbCB0b29sc190YWlsY250CisKKwlzZXQgbWJhcl9lbmQgWyR0b29sc19tZW51YmFyIGluZGV4IGVuZF0KKwlzZXQgbWJhcl9iYXNlIFtleHByIHskbWJhcl9lbmQgLSAkdG9vbHNfdGFpbGNudH1dCisJaWYgeyRtYmFyX2Jhc2UgPj0gMH0geworCQkkdG9vbHNfbWVudWJhciBkZWxldGUgMCAkbWJhcl9iYXNlCisJfQorCisJYXJyYXkgdW5zZXQgdG9vbHNfbWVudXRibAorCisJZm9yZWFjaCBmdWxsbmFtZSBbdG9vbHNfbGlzdF0geworCQl0b29sc19wb3B1bGF0ZV9vbmUgJGZ1bGxuYW1lCisJfQorfQorCitwcm9jIHRvb2xzX2NyZWF0ZV9pdGVtIHtwYXJlbnQgYXJnc30geworCWdsb2JhbCB0b29sc19tZW51YmFyIHRvb2xzX3RhaWxjbnQKKwlpZiB7JHBhcmVudCBlcSAkdG9vbHNfbWVudWJhcn0geworCQlzZXQgcG9zIFtleHByIHtbJHBhcmVudCBpbmRleCBlbmRdLSR0b29sc190YWlsY250KzF9XQorCQlldmFsIFtsaXN0ICRwYXJlbnQgaW5zZXJ0ICRwb3NdICRhcmdzCisJfSBlbHNlIHsKKwkJZXZhbCBbbGlzdCAkcGFyZW50IGFkZF0gJGFyZ3MKKwl9Cit9CisKK3Byb2MgdG9vbHNfcG9wdWxhdGVfb25lIHtmdWxsbmFtZX0geworCWdsb2JhbCB0b29sc19tZW51YmFyIHRvb2xzX21lbnV0YmwgdG9vbHNfaWQKKworCWlmIHshW2luZm8gZXhpc3RzIHRvb2xzX2lkXX0geworCQlzZXQgdG9vbHNfaWQgMAorCX0KKworCXNldCBuYW1lcyBbc3BsaXQgJGZ1bGxuYW1lICcvJ10KKwlzZXQgcGFyZW50ICR0b29sc19tZW51YmFyCisJZm9yIHtzZXQgaSAwfSB7JGkgPCBbbGxlbmd0aCAkbmFtZXNdLTF9IHtpbmNyIGl9IHsKKwkJc2V0IHN1Ym5hbWUgW2pvaW4gW2xyYW5nZSAkbmFtZXMgMCAkaV0gJy8nXQorCQlpZiB7W2luZm8gZXhpc3RzIHRvb2xzX21lbnV0YmwoJHN1Ym5hbWUpXX0geworCQkJc2V0IHBhcmVudCAkdG9vbHNfbWVudXRibCgkc3VibmFtZSkKKwkJfSBlbHNlIHsKKwkJCXNldCBzdWJpZCAkcGFyZW50LnQkdG9vbHNfaWQKKwkJCXRvb2xzX2NyZWF0ZV9pdGVtICRwYXJlbnQgY2FzY2FkZSBcCisJCQkJCS1sYWJlbCBbbGluZGV4ICRuYW1lcyAkaV0gLW1lbnUgJHN1YmlkCisJCQltZW51ICRzdWJpZAorCQkJc2V0IHRvb2xzX21lbnV0YmwoJHN1Ym5hbWUpICRzdWJpZAorCQkJc2V0IHBhcmVudCAkc3ViaWQKKwkJCWluY3IgdG9vbHNfaWQKKwkJfQorCX0KKworCXRvb2xzX2NyZWF0ZV9pdGVtICRwYXJlbnQgY29tbWFuZCBcCisJCS1sYWJlbCBbbGluZGV4ICRuYW1lcyBlbmRdIFwKKwkJLWNvbW1hbmQgW2xpc3QgdG9vbHNfZXhlYyAkZnVsbG5hbWVdCit9CisKK3Byb2MgdG9vbHNfZXhlYyB7ZnVsbG5hbWV9IHsKKwlnbG9iYWwgcmVwb19jb25maWcgZW52IGN1cnJlbnRfZGlmZl9wYXRoCisJZ2xvYmFsIGN1cnJlbnRfYnJhbmNoIGlzX2RldGFjaGVkCisKKwlpZiB7W2lzX2NvbmZpZ190cnVlICJndWl0b29sLiRmdWxsbmFtZS5uZWVkc2ZpbGUiXX0geworCQlpZiB7JGN1cnJlbnRfZGlmZl9wYXRoIGVxIHt9fSB7CisJCQllcnJvcl9wb3B1cCBbbWMgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIgJGZ1bGxuYW1lXQorCQkJcmV0dXJuCisJCX0KKwl9CisKKwljYXRjaCB7IHVuc2V0IGVudihBUkdTKSB9CisJY2F0Y2ggeyB1bnNldCBlbnYoUkVWSVNJT04pIH0KKworCWlmIHtbZ2V0X2NvbmZpZyAiZ3VpdG9vbC4kZnVsbG5hbWUucmV2cHJvbXB0Il0gbmUge30gfHwKKwkgICAgW2dldF9jb25maWcgImd1aXRvb2wuJGZ1bGxuYW1lLmFyZ3Byb21wdCJdIG5lIHt9fSB7CisJCXNldCBkbGcgW3Rvb2xzX2Fza2RsZzo6ZGlhbG9nICRmdWxsbmFtZV0KKwkJaWYgeyFbdG9vbHNfYXNrZGxnOjpleGVjdXRlICRkbGddfSB7CisJCQlyZXR1cm4KKwkJfQorCX0gZWxzZWlmIHtbaXNfY29uZmlnX3RydWUgImd1aXRvb2wuJGZ1bGxuYW1lLmNvbmZpcm0iXX0geworCQlpZiB7W2lzX2NvbmZpZ190cnVlICJndWl0b29sLiRmdWxsbmFtZS5uZWVkc2ZpbGUiXX0geworCQkJaWYge1thc2tfcG9wdXAgW21jICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICUxXCRzIG9uIGZpbGUgXCIlMlwkc1wiPyIgJGZ1bGxuYW1lICRjdXJyZW50X2RpZmZfcGF0aF1dIG5lIHt5ZXN9fSB7CisJCQkJcmV0dXJuCisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiB7W2Fza19wb3B1cCBbbWMgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IiAkZnVsbG5hbWVdXSBuZSB7eWVzfX0geworCQkJCXJldHVybgorCQkJfQorCQl9CisJfQorCisJc2V0IGVudihHSVRfR1VJVE9PTCkgJGZ1bGxuYW1lCisJc2V0IGVudihGSUxFTkFNRSkgJGN1cnJlbnRfZGlmZl9wYXRoCisJaWYgeyRpc19kZXRhY2hlZH0geworCQlzZXQgZW52KENVUl9CUkFOQ0gpICIiCisJfSBlbHNlIHsKKwkJc2V0IGVudihDVVJfQlJBTkNIKSAkY3VycmVudF9icmFuY2gKKwl9CisKKwlzZXQgY21kbGluZSAkcmVwb19jb25maWcoZ3VpdG9vbC4kZnVsbG5hbWUuY21kKQorCWlmIHtbaXNfY29uZmlnX3RydWUgImd1aXRvb2wuJGZ1bGxuYW1lLm5vY29uc29sZSJdfSB7CisJCXRvb2xzX3J1bl9zaWxlbnQgW2xpc3Qgc2ggLWMgJGNtZGxpbmVdIFwKKwkJCQkgW2xpc3QgdG9vbHNfY29tcGxldGUgJGZ1bGxuYW1lIHt9XQorCX0gZWxzZSB7CisJCXJlZ3N1YiB7L30gJGZ1bGxuYW1lIHsgLyB9IHRpdGxlCisJCXNldCB3IFtjb25zb2xlOjpuZXcgXAorCQkJW21jICJUb29sOiAlcyIgJHRpdGxlXSBcCisJCQlbbWMgIlJ1bm5pbmc6ICVzIiAkY21kbGluZV1dCisJCWNvbnNvbGU6OmV4ZWMgJHcgW2xpc3Qgc2ggLWMgJGNtZGxpbmVdIFwKKwkJCQkgW2xpc3QgdG9vbHNfY29tcGxldGUgJGZ1bGxuYW1lICR3XQorCX0KKworCXVuc2V0IGVudihHSVRfR1VJVE9PTCkKKwl1bnNldCBlbnYoRklMRU5BTUUpCisJdW5zZXQgZW52KENVUl9CUkFOQ0gpCisJY2F0Y2ggeyB1bnNldCBlbnYoQVJHUykgfQorCWNhdGNoIHsgdW5zZXQgZW52KFJFVklTSU9OKSB9Cit9CisKK3Byb2MgdG9vbHNfcnVuX3NpbGVudCB7Y21kIGFmdGVyfSB7CisJbGFwcGVuZCBjbWQgMj5AMQorCXNldCBmZCBbX29wZW5fc3Rkb3V0X3N0ZGVyciAkY21kXQorCisJZmNvbmZpZ3VyZSAkZmQgLWJsb2NraW5nIDAgLXRyYW5zbGF0aW9uIGJpbmFyeQorCWZpbGVldmVudCAkZmQgcmVhZGFibGUgW2xpc3QgdG9vbHNfY29uc3VtZV9pbnB1dCAkZmQgJGFmdGVyXQorfQorCitwcm9jIHRvb2xzX2NvbnN1bWVfaW5wdXQge2ZkIGFmdGVyfSB7CisJcmVhZCAkZmQKKwlpZiB7W2VvZiAkZmRdfSB7CisJCWZjb25maWd1cmUgJGZkIC1ibG9ja2luZyAxCisJCWlmIHtbY2F0Y2gge2Nsb3NlICRmZH1dfSB7CisJCQl1cGxldmVsICMwICRhZnRlciAwCisJCX0gZWxzZSB7CisJCQl1cGxldmVsICMwICRhZnRlciAxCisJCX0KKwl9Cit9CisKK3Byb2MgdG9vbHNfY29tcGxldGUge2Z1bGxuYW1lIHcge29rIDF9fSB7CisJaWYgeyR3IG5lIHt9fSB7CisJCWNvbnNvbGU6OmRvbmUgJHcgJG9rCisJfQorCisJaWYgeyRva30geworCQlzZXQgbXNnIFttYyAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIgJGZ1bGxuYW1lXQorCX0gZWxzZSB7CisJCXNldCBtc2cgW21jICJUb29sIGZhaWxlZDogJXMiICRmdWxsbmFtZV0KKwl9CisKKwlpZiB7W2lzX2NvbmZpZ190cnVlICJndWl0b29sLiRmdWxsbmFtZS5ub3Jlc2NhbiJdfSB7CisJCXVpX3N0YXR1cyAkbXNnCisJfSBlbHNlIHsKKwkJcmVzY2FuIFtsaXN0IHVpX3N0YXR1cyAkbXNnXQorCX0KK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbGliL3Rvb2xzX2RsZy50Y2wgYi9naXQtZ3VpL2xpYi90b29sc19kbGcudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZWRhOWQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL2xpYi90b29sc19kbGcudGNsCkBAIC0wLDAgKzEsNDE0IEBACisjIGdpdC1ndWkgVG9vbHMgbWVudSBkaWFsb2dzCisKK2NsYXNzIHRvb2xzX2FkZCB7CisKK2ZpZWxkIHcgICAgICAgICAgICAgIDsgIyB3aWRnZXQgcGF0aAorZmllbGQgd19uYW1lICAgICAgICAgOyAjIG5ldyByZW1vdGUgbmFtZSB3aWRnZXQKK2ZpZWxkIHdfY21kICAgICAgICAgIDsgIyBuZXcgcmVtb3RlIGxvY2F0aW9uIHdpZGdldAorCitmaWVsZCBuYW1lICAgICAgICAge307ICMgbmFtZSBvZiB0aGUgdG9vbAorZmllbGQgY29tbWFuZCAgICAgIHt9OyAjIGNvbW1hbmQgdG8gZXhlY3V0ZQorZmllbGQgYWRkX2dsb2JhbCAgICAwOyAjIGFkZCB0byB0aGUgLS1nbG9iYWwgY29uZmlnCitmaWVsZCBub19jb25zb2xlICAgIDA7ICMgZGlzYWJsZSB1c2luZyB0aGUgY29uc29sZQorZmllbGQgbmVlZHNfZmlsZSAgICAwOyAjIGVuc3VyZSBmaWxlbmFtZSBpcyBzZXQKK2ZpZWxkIGNvbmZpcm0gICAgICAgMDsgIyBhc2sgZm9yIGNvbmZpcm1hdGlvbgorZmllbGQgYXNrX2JyYW5jaCAgICAwOyAjIGFzayBmb3IgYSByZXZpc2lvbgorZmllbGQgYXNrX2FyZ3MgICAgICAwOyAjIGFzayBmb3IgYWRkaXRpb25hbCBhcmdzCisKK2NvbnN0cnVjdG9yIGRpYWxvZyB7fSB7CisJZ2xvYmFsIHJlcG9fY29uZmlnIHVzZV90dGsgTlMKKworCW1ha2VfZGlhbG9nIHRvcCB3CisJd20gdGl0bGUgJHRvcCBbYXBwZW5kICJbYXBwbmFtZV0gKFtyZXBvbmFtZV0pOiAiIFttYyAiQWRkIFRvb2wiXV0KKwlpZiB7JHRvcCBuZSB7Ln19IHsKKwkJd20gZ2VvbWV0cnkgJHRvcCAiK1t3aW5mbyByb290eCAuXStbd2luZm8gcm9vdHkgLl0iCisJCXdtIHRyYW5zaWVudCAkdG9wIC4KKwl9CisKKwkke05TfTo6bGFiZWwgJHcuaGVhZGVyIC10ZXh0IFttYyAiQWRkIE5ldyBUb29sIENvbW1hbmQiXSBcCisJCS1mb250IGZvbnRfdWlib2xkIC1hbmNob3IgY2VudGVyCisJcGFjayAkdy5oZWFkZXIgLXNpZGUgdG9wIC1maWxsIHgKKworCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJJHtOU306OmNoZWNrYnV0dG9uICR3LmJ1dHRvbnMuZ2xvYmFsIFwKKwkJLXRleHQgW21jICJBZGQgZ2xvYmFsbHkiXSBcCisJCS12YXJpYWJsZSBAYWRkX2dsb2JhbAorCXBhY2sgJHcuYnV0dG9ucy5nbG9iYWwgLXNpZGUgbGVmdCAtcGFkeCA1CisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNyZWF0ZSAtdGV4dCBbbWMgQWRkXSBcCisJCS1kZWZhdWx0IGFjdGl2ZSBcCisJCS1jb21tYW5kIFtjYiBfYWRkXQorCXBhY2sgJHcuYnV0dG9ucy5jcmVhdGUgLXNpZGUgcmlnaHQKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY2FuY2VsIC10ZXh0IFttYyBDYW5jZWxdIFwKKwkJLWNvbW1hbmQgW2xpc3QgZGVzdHJveSAkd10KKwlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKKwlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKKworCSR7TlN9OjpsYWJlbGZyYW1lICR3LmRlc2MgLXRleHQgW21jICJUb29sIERldGFpbHMiXQorCisJJHtOU306OmxhYmVsICR3LmRlc2MubmFtZV9jbW50IC1hbmNob3Igd1wKKwkJLXRleHQgW21jICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiJdCisJZ3JpZCB4ICR3LmRlc2MubmFtZV9jbW50IC1zdGlja3kgd2UgLXBhZHggezAgNX0gLXBhZHkgezAgMn0KKwkke05TfTo6bGFiZWwgJHcuZGVzYy5uYW1lX2wgLXRleHQgW21jICJOYW1lOiJdCisJc2V0IHdfbmFtZSAkdy5kZXNjLm5hbWVfdAorCSR7TlN9OjplbnRyeSAkd19uYW1lIFwKKwkJLXdpZHRoIDQwIFwKKwkJLXRleHR2YXJpYWJsZSBAbmFtZSBcCisJCS12YWxpZGF0ZSBrZXkgXAorCQktdmFsaWRhdGVjb21tYW5kIFtjYiBfdmFsaWRhdGVfbmFtZSAlZCAlU10KKwlncmlkICR3LmRlc2MubmFtZV9sICR3X25hbWUgLXN0aWNreSB3ZSAtcGFkeCB7MCA1fQorCisJJHtOU306OmxhYmVsICR3LmRlc2MuY21kX2wgLXRleHQgW21jICJDb21tYW5kOiJdCisJc2V0IHdfY21kICR3LmRlc2MuY21kX3QKKwkke05TfTo6ZW50cnkgJHdfY21kIFwKKwkJLXdpZHRoIDQwIFwKKwkJLXRleHR2YXJpYWJsZSBAY29tbWFuZAorCWdyaWQgJHcuZGVzYy5jbWRfbCAkd19jbWQgLXN0aWNreSB3ZSAtcGFkeCB7MCA1fSAtcGFkeSB7MCAzfQorCisJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHcuZGVzYyAxIC13ZWlnaHQgMQorCXBhY2sgJHcuZGVzYyAtYW5jaG9yIG53IC1maWxsIHggLXBhZHkgNSAtcGFkeCA1CisKKwkke05TfTo6Y2hlY2tidXR0b24gJHcuY29uZmlybSBcCisJCS10ZXh0IFttYyAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyJdIFwKKwkJLXZhcmlhYmxlIEBjb25maXJtIC1jb21tYW5kIFtjYiBfY2hlY2tfZW5hYmxlX2RsZ10KKworCSR7TlN9OjpsYWJlbGZyYW1lICR3LmRsZyAtbGFiZWx3aWRnZXQgJHcuY29uZmlybQorCisJJHtOU306OmNoZWNrYnV0dG9uICR3LmRsZy5hc2ticmFuY2ggXAorCQktdGV4dCBbbWMgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyBcJFJFVklTSU9OKSJdIFwKKwkJLXZhcmlhYmxlIEBhc2tfYnJhbmNoIC1zdGF0ZSBkaXNhYmxlZAorCXBhY2sgJHcuZGxnLmFza2JyYW5jaCAtYW5jaG9yIHcgLXBhZHggMTUKKworCSR7TlN9OjpjaGVja2J1dHRvbiAkdy5kbGcuYXNrYXJncyBcCisJCS10ZXh0IFttYyAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyBcJEFSR1MpIl0gXAorCQktdmFyaWFibGUgQGFza19hcmdzIC1zdGF0ZSBkaXNhYmxlZAorCXBhY2sgJHcuZGxnLmFza2FyZ3MgLWFuY2hvciB3IC1wYWR4IDE1CisKKwlwYWNrICR3LmRsZyAtYW5jaG9yIG53IC1maWxsIHggLXBhZHkgezAgOH0gLXBhZHggNQorCisJJHtOU306OmNoZWNrYnV0dG9uICR3Lm5vY29uc29sZSBcCisJCS10ZXh0IFttYyAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93Il0gXAorCQktdmFyaWFibGUgQG5vX2NvbnNvbGUKKwlwYWNrICR3Lm5vY29uc29sZSAtYW5jaG9yIHcgLXBhZHggNQorCisJJHtOU306OmNoZWNrYnV0dG9uICR3Lm5lZWRzZmlsZSBcCisJCS10ZXh0IFttYyAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkIChcJEZJTEVOQU1FIG5vdCBlbXB0eSkiXSBcCisJCS12YXJpYWJsZSBAbmVlZHNfZmlsZQorCXBhY2sgJHcubmVlZHNmaWxlIC1hbmNob3IgdyAtcGFkeCA1CisKKwliaW5kICR3IDxWaXNpYmlsaXR5PiBbY2IgX3Zpc2libGVdCisJYmluZCAkdyA8S2V5LUVzY2FwZT4gW2xpc3QgZGVzdHJveSAkd10KKwliaW5kICR3IDxLZXktUmV0dXJuPiBbY2IgX2FkZF1cO2JyZWFrCisJdGt3YWl0IHdpbmRvdyAkdworfQorCittZXRob2QgX2NoZWNrX2VuYWJsZV9kbGcge30geworCWlmIHskY29uZmlybX0geworCQkkdy5kbGcuYXNrYnJhbmNoIGNvbmZpZ3VyZSAtc3RhdGUgbm9ybWFsCisJCSR3LmRsZy5hc2thcmdzIGNvbmZpZ3VyZSAtc3RhdGUgbm9ybWFsCisJfSBlbHNlIHsKKwkJJHcuZGxnLmFza2JyYW5jaCBjb25maWd1cmUgLXN0YXRlIGRpc2FibGVkCisJCSR3LmRsZy5hc2thcmdzIGNvbmZpZ3VyZSAtc3RhdGUgZGlzYWJsZWQKKwl9Cit9CisKK21ldGhvZCBfYWRkIHt9IHsKKwlnbG9iYWwgcmVwb19jb25maWcKKworCWlmIHskbmFtZSBlcSB7fX0geworCQllcnJvcl9wb3B1cCBbbWMgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iXQorCQlmb2N1cyAkd19uYW1lCisJCXJldHVybgorCX0KKworCXNldCBpdGVtICJndWl0b29sLiRuYW1lLmNtZCIKKworCWlmIHtbaW5mbyBleGlzdHMgcmVwb19jb25maWcoJGl0ZW0pXX0geworCQllcnJvcl9wb3B1cCBbbWMgIlRvb2wgJyVzJyBhbHJlYWR5IGV4aXN0cy4iICRuYW1lXQorCQlmb2N1cyAkd19uYW1lCisJCXJldHVybgorCX0KKworCXNldCBjbWQgW2xpc3QgZ2l0IGNvbmZpZ10KKwlpZiB7JGFkZF9nbG9iYWx9IHsgbGFwcGVuZCBjbWQgLS1nbG9iYWwgfQorCXNldCBpdGVtcyB7fQorCWlmIHskbm9fY29uc29sZX0geyBsYXBwZW5kIGl0ZW1zICJndWl0b29sLiRuYW1lLm5vY29uc29sZSIgfQorCWlmIHskbmVlZHNfZmlsZX0geyBsYXBwZW5kIGl0ZW1zICJndWl0b29sLiRuYW1lLm5lZWRzZmlsZSIgfQorCWlmIHskY29uZmlybX0geworCQlpZiB7JGFza19hcmdzfSAgIHsgbGFwcGVuZCBpdGVtcyAiZ3VpdG9vbC4kbmFtZS5hcmdwcm9tcHQiIH0KKwkJaWYgeyRhc2tfYnJhbmNofSB7IGxhcHBlbmQgaXRlbXMgImd1aXRvb2wuJG5hbWUucmV2cHJvbXB0IiB9CisJCWlmIHshJGFza19hcmdzICYmICEkYXNrX2JyYW5jaH0geworCQkJbGFwcGVuZCBpdGVtcyAiZ3VpdG9vbC4kbmFtZS5jb25maXJtIgorCQl9CisJfQorCisJaWYge1tjYXRjaCB7CisJCWV2YWwgJGNtZCBbbGlzdCAkaXRlbSAkY29tbWFuZF0KKwkJZm9yZWFjaCBjaXRlbSAkaXRlbXMgeyBldmFsICRjbWQgW2xpc3QgJGNpdGVtIHllc10gfQorCSAgICB9IGVycl19IHsKKwkJZXJyb3JfcG9wdXAgW21jICJDb3VsZCBub3QgYWRkIHRvb2w6XG4lcyIgJGVycl0KKwl9IGVsc2UgeworCQlzZXQgcmVwb19jb25maWcoJGl0ZW0pICRjb21tYW5kCisJCWZvcmVhY2ggY2l0ZW0gJGl0ZW1zIHsgc2V0IHJlcG9fY29uZmlnKCRjaXRlbSkgeWVzIH0KKworCQl0b29sc19wb3B1bGF0ZV9hbGwKKwl9CisKKwlkZXN0cm95ICR3Cit9CisKK21ldGhvZCBfdmFsaWRhdGVfbmFtZSB7ZCBTfSB7CisJaWYgeyRkID09IDF9IHsKKwkJaWYge1tyZWdleHAge1t+PyomXFtcMFwiXFxce119ICRTXX0geworCQkJcmV0dXJuIDAKKwkJfQorCX0KKwlyZXR1cm4gMQorfQorCittZXRob2QgX3Zpc2libGUge30geworCWdyYWIgJHcKKwkkd19uYW1lIGljdXJzb3IgZW5kCisJZm9jdXMgJHdfbmFtZQorfQorCit9CisKK2NsYXNzIHRvb2xzX3JlbW92ZSB7CisKK2ZpZWxkIHcgICAgICAgICAgICAgIDsgIyB3aWRnZXQgcGF0aAorZmllbGQgd19uYW1lcyAgICAgICAgOyAjIG5hbWUgbGlzdAorCitjb25zdHJ1Y3RvciBkaWFsb2cge30geworCWdsb2JhbCByZXBvX2NvbmZpZyBnbG9iYWxfY29uZmlnIHN5c3RlbV9jb25maWcgdXNlX3R0ayBOUworCisJbG9hZF9jb25maWcgMQorCisJbWFrZV9kaWFsb2cgdG9wIHcKKwl3bSB0aXRsZSAkdG9wIFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgW21jICJSZW1vdmUgVG9vbCJdXQorCWlmIHskdG9wIG5lIHsufX0geworCQl3bSBnZW9tZXRyeSAkdG9wICIrW3dpbmZvIHJvb3R4IC5dK1t3aW5mbyByb290eSAuXSIKKwkJd20gdHJhbnNpZW50ICR0b3AgLgorCX0KKworCSR7TlN9OjpsYWJlbCAkdy5oZWFkZXIgLXRleHQgW21jICJSZW1vdmUgVG9vbCBDb21tYW5kcyJdIFwKKwkJLWZvbnQgZm9udF91aWJvbGQgLWFuY2hvciBjZW50ZXIKKwlwYWNrICR3LmhlYWRlciAtc2lkZSB0b3AgLWZpbGwgeAorCisJJHtOU306OmZyYW1lICR3LmJ1dHRvbnMKKwkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMuY3JlYXRlIC10ZXh0IFttYyBSZW1vdmVdIFwKKwkJLWRlZmF1bHQgYWN0aXZlIFwKKwkJLWNvbW1hbmQgW2NiIF9yZW1vdmVdCisJcGFjayAkdy5idXR0b25zLmNyZWF0ZSAtc2lkZSByaWdodAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQgW21jIENhbmNlbF0gXAorCQktY29tbWFuZCBbbGlzdCBkZXN0cm95ICR3XQorCXBhY2sgJHcuYnV0dG9ucy5jYW5jZWwgLXNpZGUgcmlnaHQgLXBhZHggNQorCXBhY2sgJHcuYnV0dG9ucyAtc2lkZSBib3R0b20gLWZpbGwgeCAtcGFkeSAxMCAtcGFkeCAxMAorCisJJHtOU306OmZyYW1lICR3Lmxpc3QKKwlzZXQgd19uYW1lcyAkdy5saXN0LmwKKwlzbGlzdGJveCAkd19uYW1lcyBcCisJCS1oZWlnaHQgMTAgXAorCQktd2lkdGggMzAgXAorCQktc2VsZWN0bW9kZSBleHRlbmRlZCBcCisJCS1leHBvcnRzZWxlY3Rpb24gZmFsc2UKKwlwYWNrICR3Lmxpc3QubCAtc2lkZSBsZWZ0IC1maWxsIGJvdGggLWV4cGFuZCAxCisJcGFjayAkdy5saXN0IC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR5IDUgLXBhZHggNQorCisJc2V0IGxvY2FsX2NudCAwCisJZm9yZWFjaCBmdWxsbmFtZSBbdG9vbHNfbGlzdF0geworCQkjIENhbm5vdCBkZWxldGUgc3lzdGVtIHRvb2xzCisJCWlmIHtbaW5mbyBleGlzdHMgc3lzdGVtX2NvbmZpZyhndWl0b29sLiRmdWxsbmFtZS5jbWQpXX0gY29udGludWUKKworCQkkd19uYW1lcyBpbnNlcnQgZW5kICRmdWxsbmFtZQorCQlpZiB7IVtpbmZvIGV4aXN0cyBnbG9iYWxfY29uZmlnKGd1aXRvb2wuJGZ1bGxuYW1lLmNtZCldfSB7CisJCQkkd19uYW1lcyBpdGVtY29uZmlndXJlIGVuZCAtZm9yZWdyb3VuZCBibHVlCisJCQlpbmNyIGxvY2FsX2NudAorCQl9CisJfQorCisJaWYgeyRsb2NhbF9jbnQgPiAwfSB7CisJCSR7TlN9OjpsYWJlbCAkdy5jb2xvcmxibCAtZm9yZWdyb3VuZCBibHVlIFwKKwkJCS10ZXh0IFttYyAiKEJsdWUgZGVub3RlcyByZXBvc2l0b3J5LWxvY2FsIHRvb2xzKSJdCisJCXBhY2sgJHcuY29sb3JsYmwgLWZpbGwgeCAtcGFkeSA1IC1wYWR4IDUKKwl9CisKKwliaW5kICR3IDxWaXNpYmlsaXR5PiBbY2IgX3Zpc2libGVdCisJYmluZCAkdyA8S2V5LUVzY2FwZT4gW2xpc3QgZGVzdHJveSAkd10KKwliaW5kICR3IDxLZXktUmV0dXJuPiBbY2IgX3JlbW92ZV1cO2JyZWFrCisJdGt3YWl0IHdpbmRvdyAkdworfQorCittZXRob2QgX3JlbW92ZSB7fSB7CisJZm9yZWFjaCBpIFskd19uYW1lcyBjdXJzZWxlY3Rpb25dIHsKKwkJc2V0IG5hbWUgWyR3X25hbWVzIGdldCAkaV0KKworCQljYXRjaCB7IGdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBndWl0b29sLiRuYW1lIH0KKwkJY2F0Y2ggeyBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tcmVtb3ZlLXNlY3Rpb24gZ3VpdG9vbC4kbmFtZSB9CisJfQorCisJbG9hZF9jb25maWcgMAorCXRvb2xzX3BvcHVsYXRlX2FsbAorCisJZGVzdHJveSAkdworfQorCittZXRob2QgX3Zpc2libGUge30geworCWdyYWIgJHcKKwlmb2N1cyAkd19uYW1lcworfQorCit9CisKK2NsYXNzIHRvb2xzX2Fza2RsZyB7CisKK2ZpZWxkIHcgICAgICAgICAgICAgIDsgIyB3aWRnZXQgcGF0aAorZmllbGQgd19yZXYgICAgICAgIHt9OyAjIHJldmlzaW9uIGJyb3dzZXIKK2ZpZWxkIHdfYXJncyAgICAgICB7fTsgIyBhcmd1bWVudHMKKworZmllbGQgaXNfYXNrX2FyZ3MgICAwOyAjIGhhcyBhcmd1bWVudHMgZmllbGQKK2ZpZWxkIGlzX2Fza19yZXZzICAgMDsgIyBoYXMgcmV2aXNpb24gYnJvd3NlcgorCitmaWVsZCBpc19vayAgICAgICAgIDA7ICMgb2sgdG8gc3RhcnQKK2ZpZWxkIGFyZ3N0ciAgICAgICB7fTsgIyBhcmd1bWVudHMKKworY29uc3RydWN0b3IgZGlhbG9nIHtmdWxsbmFtZX0geworCWdsb2JhbCBNMUIgdXNlX3R0ayBOUworCisJc2V0IHRpdGxlIFtnZXRfY29uZmlnICJndWl0b29sLiRmdWxsbmFtZS50aXRsZSJdCisJaWYgeyR0aXRsZSBlcSB7fX0geworCQlyZWdzdWIgey99ICRmdWxsbmFtZSB7IC8gfSB0aXRsZQorCX0KKworCW1ha2VfZGlhbG9nIHRvcCB3IC1hdXRvZGVsZXRlIDAKKwl3bSB0aXRsZSAkdG9wIFthcHBlbmQgIlthcHBuYW1lXSAoW3JlcG9uYW1lXSk6ICIgJHRpdGxlXQorCWlmIHskdG9wIG5lIHsufX0geworCQl3bSBnZW9tZXRyeSAkdG9wICIrW3dpbmZvIHJvb3R4IC5dK1t3aW5mbyByb290eSAuXSIKKwkJd20gdHJhbnNpZW50ICR0b3AgLgorCX0KKworCXNldCBwcm9tcHQgW2dldF9jb25maWcgImd1aXRvb2wuJGZ1bGxuYW1lLnByb21wdCJdCisJaWYgeyRwcm9tcHQgZXEge319IHsKKwkJc2V0IGNvbW1hbmQgW2dldF9jb25maWcgImd1aXRvb2wuJGZ1bGxuYW1lLmNtZCJdCisJCXNldCBwcm9tcHQgW21jICJSdW4gQ29tbWFuZDogJXMiICRjb21tYW5kXQorCX0KKworCSR7TlN9OjpsYWJlbCAkdy5oZWFkZXIgLXRleHQgJHByb21wdCAtZm9udCBmb250X3VpYm9sZCAtYW5jaG9yIGNlbnRlcgorCXBhY2sgJHcuaGVhZGVyIC1zaWRlIHRvcCAtZmlsbCB4CisKKwlzZXQgYXJncHJvbXB0IFtnZXRfY29uZmlnICJndWl0b29sLiRmdWxsbmFtZS5hcmdwcm9tcHQiXQorCXNldCByZXZwcm9tcHQgW2dldF9jb25maWcgImd1aXRvb2wuJGZ1bGxuYW1lLnJldnByb21wdCJdCisKKwlzZXQgaXNfYXNrX2FyZ3MgW2V4cHIgeyRhcmdwcm9tcHQgbmUge319XQorCXNldCBpc19hc2tfcmV2cyBbZXhwciB7JHJldnByb21wdCBuZSB7fX1dCisKKwlpZiB7JGlzX2Fza19hcmdzfSB7CisJCWlmIHskYXJncHJvbXB0IGVxIHt5ZXN9IHx8ICRhcmdwcm9tcHQgZXEge3RydWV9IHx8ICRhcmdwcm9tcHQgZXEgezF9fSB7CisJCQlzZXQgYXJncHJvbXB0IFttYyAiQXJndW1lbnRzIl0KKwkJfQorCisJCSR7TlN9OjpsYWJlbGZyYW1lICR3LmFyZyAtdGV4dCAkYXJncHJvbXB0CisKKwkJc2V0IHdfYXJncyAkdy5hcmcudHh0CisJCSR7TlN9OjplbnRyeSAkd19hcmdzIFwKKwkJCS13aWR0aCA0MCBcCisJCQktdGV4dHZhcmlhYmxlIEBhcmdzdHIKKwkJcGFjayAkd19hcmdzIC1wYWR4IDUgLXBhZHkgNSAtZmlsbCBib3RoCisJCXBhY2sgJHcuYXJnIC1hbmNob3IgbncgLWZpbGwgYm90aCAtcGFkeSA1IC1wYWR4IDUKKwl9CisKKwlpZiB7JGlzX2Fza19yZXZzfSB7CisJCWlmIHskcmV2cHJvbXB0IGVxIHt5ZXN9IHx8ICRyZXZwcm9tcHQgZXEge3RydWV9IHx8ICRyZXZwcm9tcHQgZXEgezF9fSB7CisJCQlzZXQgcmV2cHJvbXB0IFttYyAiUmV2aXNpb24iXQorCQl9CisKKwkJaWYge1tpc19jb25maWdfdHJ1ZSAiZ3VpdG9vbC4kZnVsbG5hbWUucmV2dW5tZXJnZWQiXX0geworCQkJc2V0IHdfcmV2IFs6OmNob29zZV9yZXY6Om5ld191bm1lcmdlZCAkdy5yZXYgJHJldnByb21wdF0KKwkJfSBlbHNlIHsKKwkJCXNldCB3X3JldiBbOjpjaG9vc2VfcmV2OjpuZXcgJHcucmV2ICRyZXZwcm9tcHRdCisJCX0KKworCQlwYWNrICR3LnJldiAtYW5jaG9yIG53IC1maWxsIGJvdGggLWV4cGFuZCAxIC1wYWR5IDUgLXBhZHggNQorCX0KKworCSR7TlN9OjpmcmFtZSAkdy5idXR0b25zCisJaWYgeyRpc19hc2tfcmV2c30geworCQkke05TfTo6YnV0dG9uICR3LmJ1dHRvbnMudmlzdWFsaXplIFwKKwkJCS10ZXh0IFttYyBWaXN1YWxpemVdIFwKKwkJCS1jb21tYW5kIFtjYiBfdmlzdWFsaXplXQorCQlwYWNrICR3LmJ1dHRvbnMudmlzdWFsaXplIC1zaWRlIGxlZnQKKwl9CisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLm9rIFwKKwkJLXRleHQgW21jIE9LXSBcCisJCS1jb21tYW5kIFtjYiBfc3RhcnRdCisJcGFjayAkdy5idXR0b25zLm9rIC1zaWRlIHJpZ2h0CisJJHtOU306OmJ1dHRvbiAkdy5idXR0b25zLmNhbmNlbCBcCisJCS10ZXh0IFttYyAiQ2FuY2VsIl0gXAorCQktY29tbWFuZCBbY2IgX2NhbmNlbF0KKwlwYWNrICR3LmJ1dHRvbnMuY2FuY2VsIC1zaWRlIHJpZ2h0IC1wYWR4IDUKKwlwYWNrICR3LmJ1dHRvbnMgLXNpZGUgYm90dG9tIC1maWxsIHggLXBhZHkgMTAgLXBhZHggMTAKKworCWJpbmQgJHcgPCRNMUItS2V5LVJldHVybj4gW2NiIF9zdGFydF0KKwliaW5kICR3IDxLZXktUmV0dXJuPiBbY2IgX3N0YXJ0XQorCWJpbmQgJHcgPEtleS1Fc2NhcGU+IFtjYiBfY2FuY2VsXQorCXdtIHByb3RvY29sICR3IFdNX0RFTEVURV9XSU5ET1cgW2NiIF9jYW5jZWxdCisKKwliaW5kICR3IDxWaXNpYmlsaXR5PiBbY2IgX3Zpc2libGVdCisJcmV0dXJuICR0aGlzCit9CisKK21ldGhvZCBleGVjdXRlIHt9IHsKKwl0a3dhaXQgd2luZG93ICR3CisJc2V0IHJ2ICRpc19vaworCWRlbGV0ZV90aGlzCisJcmV0dXJuICRydgorfQorCittZXRob2QgX3Zpc2libGUge30geworCWdyYWIgJHcKKwlpZiB7JGlzX2Fza19hcmdzfSB7CisJCWZvY3VzICR3X2FyZ3MKKwl9IGVsc2VpZiB7JGlzX2Fza19yZXZzfSB7CisJCSR3X3JldiBmb2N1c19maWx0ZXIKKwl9Cit9CisKK21ldGhvZCBfY2FuY2VsIHt9IHsKKwl3bSBwcm90b2NvbCAkdyBXTV9ERUxFVEVfV0lORE9XIHt9CisJZGVzdHJveSAkdworfQorCittZXRob2QgX3JldiB7fSB7CisJaWYge1tjYXRjaCB7JHdfcmV2IGNvbW1pdF9vcl9kaWV9XX0geworCQlyZXR1cm4ge30KKwl9CisJcmV0dXJuIFskd19yZXYgZ2V0XQorfQorCittZXRob2QgX3Zpc3VhbGl6ZSB7fSB7CisJZ2xvYmFsIGN1cnJlbnRfYnJhbmNoCisJc2V0IHJldiBbX3JldiAkdGhpc10KKwlpZiB7JHJldiBuZSB7fX0geworCQlkb19naXRrIFtsaXN0IC0tbGVmdC1yaWdodCAiJGN1cnJlbnRfYnJhbmNoLi4uJHJldiJdCisJfQorfQorCittZXRob2QgX3N0YXJ0IHt9IHsKKwlnbG9iYWwgZW52CisKKwlpZiB7JGlzX2Fza19yZXZzfSB7CisJCXNldCBuYW1lIFtfcmV2ICR0aGlzXQorCQlpZiB7JG5hbWUgZXEge319IHsKKwkJCXJldHVybgorCQl9CisJCXNldCBlbnYoUkVWSVNJT04pICRuYW1lCisJfQorCisJaWYgeyRpc19hc2tfYXJnc30geworCQlzZXQgZW52KEFSR1MpICRhcmdzdHIKKwl9CisKKwlzZXQgaXNfb2sgMQorCV9jYW5jZWwgJHRoaXMKK30KKworfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvdHJhbnNwb3J0LnRjbCBiL2dpdC1ndWkvbGliL3RyYW5zcG9ydC50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkMjExZQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL3RyYW5zcG9ydC50Y2wKQEAgLTAsMCArMSwyMzIgQEAKKyMgZ2l0LWd1aSB0cmFuc3BvcnQgKGZldGNoL3B1c2gpIHN1cHBvcnQKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IFNoYXduIFBlYXJjZQorCitwcm9jIGZldGNoX2Zyb20ge3JlbW90ZX0geworCXNldCB3IFtjb25zb2xlOjpuZXcgXAorCQlbbWMgImZldGNoICVzIiAkcmVtb3RlXSBcCisJCVttYyAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIgJHJlbW90ZV1dCisJc2V0IGNtZHMgW2xpc3RdCisJbGFwcGVuZCBjbWRzIFtsaXN0IGV4ZWMgZ2l0IGZldGNoICRyZW1vdGVdCisJaWYge1tpc19jb25maWdfdHJ1ZSBndWkucHJ1bmVkdXJpbmdmZXRjaF19IHsKKwkJbGFwcGVuZCBjbWRzIFtsaXN0IGV4ZWMgZ2l0IHJlbW90ZSBwcnVuZSAkcmVtb3RlXQorCX0KKwljb25zb2xlOjpjaGFpbiAkdyAkY21kcworfQorCitwcm9jIHBydW5lX2Zyb20ge3JlbW90ZX0geworCXNldCB3IFtjb25zb2xlOjpuZXcgXAorCQlbbWMgInJlbW90ZSBwcnVuZSAlcyIgJHJlbW90ZV0gXAorCQlbbWMgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIiAkcmVtb3RlXV0KKwljb25zb2xlOjpleGVjICR3IFtsaXN0IGdpdCByZW1vdGUgcHJ1bmUgJHJlbW90ZV0KK30KKworcHJvYyBmZXRjaF9mcm9tX2FsbCB7fSB7CisJc2V0IHcgW2NvbnNvbGU6Om5ldyBcCisJCVttYyAiZmV0Y2ggYWxsIHJlbW90ZXMiXSBcCisJCVttYyAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSBhbGwgcmVtb3RlcyJdXQorCisJc2V0IGNtZCBbbGlzdCBnaXQgZmV0Y2ggLS1hbGxdCisJaWYge1tpc19jb25maWdfdHJ1ZSBndWkucHJ1bmVkdXJpbmdmZXRjaF19IHsKKwkJbGFwcGVuZCBjbWQgLS1wcnVuZQorCX0KKworCWNvbnNvbGU6OmV4ZWMgJHcgJGNtZAorfQorCitwcm9jIHBydW5lX2Zyb21fYWxsIHt9IHsKKwlnbG9iYWwgYWxsX3JlbW90ZXMKKworCXNldCB3IFtjb25zb2xlOjpuZXcgXAorCQlbbWMgInJlbW90ZSBwcnVuZSBhbGwgcmVtb3RlcyJdIFwKKwkJW21jICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSBhbGwgcmVtb3RlcyJdXQorCisJc2V0IGNtZCBbbGlzdCBnaXQgcmVtb3RlIHBydW5lXQorCisJZm9yZWFjaCByICRhbGxfcmVtb3RlcyB7CisJCWxhcHBlbmQgY21kICRyCisJfQorCisJY29uc29sZTo6ZXhlYyAkdyAkY21kCit9CisKK3Byb2MgcHVzaF90byB7cmVtb3RlfSB7CisJc2V0IHcgW2NvbnNvbGU6Om5ldyBcCisJCVttYyAicHVzaCAlcyIgJHJlbW90ZV0gXAorCQlbbWMgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIgJHJlbW90ZV1dCisJc2V0IGNtZCBbbGlzdCBnaXQgcHVzaF0KKwlsYXBwZW5kIGNtZCAtdgorCWxhcHBlbmQgY21kICRyZW1vdGUKKwljb25zb2xlOjpleGVjICR3ICRjbWQKK30KKworcHJvYyBzdGFydF9wdXNoX2FueXdoZXJlX2FjdGlvbiB7d30geworCWdsb2JhbCBwdXNoX3VybHR5cGUgcHVzaF9yZW1vdGUgcHVzaF91cmwgcHVzaF90aGluIHB1c2hfdGFncworCWdsb2JhbCBwdXNoX2ZvcmNlCisJZ2xvYmFsIHJlcG9fY29uZmlnCisKKwlzZXQgaXNfbWlycm9yIDAKKwlzZXQgcl91cmwge30KKwlzd2l0Y2ggLS0gJHB1c2hfdXJsdHlwZSB7CisJcmVtb3RlIHsKKwkJc2V0IHJfdXJsICRwdXNoX3JlbW90ZQorCQljYXRjaCB7c2V0IGlzX21pcnJvciAkcmVwb19jb25maWcocmVtb3RlLiRwdXNoX3JlbW90ZS5taXJyb3IpfQorCX0KKwl1cmwge3NldCByX3VybCAkcHVzaF91cmx9CisJfQorCWlmIHskcl91cmwgZXEge319IHJldHVybgorCisJc2V0IGNtZCBbbGlzdCBnaXQgcHVzaF0KKwlsYXBwZW5kIGNtZCAtdgorCWlmIHskcHVzaF90aGlufSB7CisJCWxhcHBlbmQgY21kIC0tdGhpbgorCX0KKwlpZiB7JHB1c2hfZm9yY2V9IHsKKwkJbGFwcGVuZCBjbWQgLS1mb3JjZQorCX0KKwlpZiB7JHB1c2hfdGFnc30geworCQlsYXBwZW5kIGNtZCAtLXRhZ3MKKwl9CisJbGFwcGVuZCBjbWQgJHJfdXJsCisJaWYgeyRpc19taXJyb3J9IHsKKwkJc2V0IGNvbnMgW2NvbnNvbGU6Om5ldyBcCisJCQlbbWMgInB1c2ggJXMiICRyX3VybF0gXAorCQkJW21jICJNaXJyb3JpbmcgdG8gJXMiICRyX3VybF1dCisJfSBlbHNlIHsKKwkJc2V0IGNudCAwCisJCWZvcmVhY2ggaSBbJHcuc291cmNlLmwgY3Vyc2VsZWN0aW9uXSB7CisJCQlzZXQgYiBbJHcuc291cmNlLmwgZ2V0ICRpXQorCQkJbGFwcGVuZCBjbWQgInJlZnMvaGVhZHMvJGI6cmVmcy9oZWFkcy8kYiIKKwkJCWluY3IgY250CisJCX0KKwkJaWYgeyRjbnQgPT0gMH0geworCQkJcmV0dXJuCisJCX0gZWxzZWlmIHskY250ID09IDF9IHsKKwkJCXNldCB1bml0IGJyYW5jaAorCQl9IGVsc2UgeworCQkJc2V0IHVuaXQgYnJhbmNoZXMKKwkJfQorCisJCXNldCBjb25zIFtjb25zb2xlOjpuZXcgXAorCQkJW21jICJwdXNoICVzIiAkcl91cmxdIFwKKwkJCVttYyAiUHVzaGluZyAlcyAlcyB0byAlcyIgJGNudCAkdW5pdCAkcl91cmxdXQorCX0KKwljb25zb2xlOjpleGVjICRjb25zICRjbWQKKwlkZXN0cm95ICR3Cit9CisKK3RyYWNlIGFkZCB2YXJpYWJsZSBwdXNoX3JlbW90ZSB3cml0ZSBcCisJW2xpc3QgcmFkaW9fc2VsZWN0b3IgcHVzaF91cmx0eXBlIHJlbW90ZV0KKworcHJvYyBkb19wdXNoX2FueXdoZXJlIHt9IHsKKwlnbG9iYWwgYWxsX3JlbW90ZXMgY3VycmVudF9icmFuY2gKKwlnbG9iYWwgcHVzaF91cmx0eXBlIHB1c2hfcmVtb3RlIHB1c2hfdXJsIHB1c2hfdGhpbiBwdXNoX3RhZ3MKKwlnbG9iYWwgcHVzaF9mb3JjZSB1c2VfdHRrIE5TCisKKwlzZXQgdyAucHVzaF9zZXR1cAorCXRvcGxldmVsICR3CisJY2F0Y2gge3dtIGF0dHJpYnV0ZXMgJHcgLXR5cGUgZGlhbG9nfQorCXdtIHdpdGhkcmF3ICR3CisJd20gZ2VvbWV0cnkgJHcgIitbd2luZm8gcm9vdHggLl0rW3dpbmZvIHJvb3R5IC5dIgorCXBhdmVfdG9wbGV2ZWwgJHcKKworCSR7TlN9OjpsYWJlbCAkdy5oZWFkZXIgLXRleHQgW21jICJQdXNoIEJyYW5jaGVzIl0gXAorCQktZm9udCBmb250X3VpYm9sZCAtYW5jaG9yIGNlbnRlcgorCXBhY2sgJHcuaGVhZGVyIC1zaWRlIHRvcCAtZmlsbCB4CisKKwkke05TfTo6ZnJhbWUgJHcuYnV0dG9ucworCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jcmVhdGUgLXRleHQgW21jIFB1c2hdIFwKKwkJLWRlZmF1bHQgYWN0aXZlIFwKKwkJLWNvbW1hbmQgW2xpc3Qgc3RhcnRfcHVzaF9hbnl3aGVyZV9hY3Rpb24gJHddCisJcGFjayAkdy5idXR0b25zLmNyZWF0ZSAtc2lkZSByaWdodAorCSR7TlN9OjpidXR0b24gJHcuYnV0dG9ucy5jYW5jZWwgLXRleHQgW21jICJDYW5jZWwiXSBcCisJCS1kZWZhdWx0IG5vcm1hbCBcCisJCS1jb21tYW5kIFtsaXN0IGRlc3Ryb3kgJHddCisJcGFjayAkdy5idXR0b25zLmNhbmNlbCAtc2lkZSByaWdodCAtcGFkeCA1CisJcGFjayAkdy5idXR0b25zIC1zaWRlIGJvdHRvbSAtZmlsbCB4IC1wYWR5IDEwIC1wYWR4IDEwCisKKwkke05TfTo6bGFiZWxmcmFtZSAkdy5zb3VyY2UgLXRleHQgW21jICJTb3VyY2UgQnJhbmNoZXMiXQorCXNsaXN0Ym94ICR3LnNvdXJjZS5sIFwKKwkJLWhlaWdodCAxMCBcCisJCS13aWR0aCA3MCBcCisJCS1zZWxlY3Rtb2RlIGV4dGVuZGVkCisJZm9yZWFjaCBoIFtsb2FkX2FsbF9oZWFkc10geworCQkkdy5zb3VyY2UubCBpbnNlcnQgZW5kICRoCisJCWlmIHskaCBlcSAkY3VycmVudF9icmFuY2h9IHsKKwkJCSR3LnNvdXJjZS5sIHNlbGVjdCBzZXQgZW5kCisJCQkkdy5zb3VyY2UubCB5dmlldyBlbmQKKwkJfQorCX0KKwlwYWNrICR3LnNvdXJjZS5sIC1zaWRlIGxlZnQgLWZpbGwgYm90aCAtZXhwYW5kIDEKKwlwYWNrICR3LnNvdXJjZSAtZmlsbCBib3RoIC1leHBhbmQgMSAtcGFkeSA1IC1wYWR4IDUKKworCSR7TlN9OjpsYWJlbGZyYW1lICR3LmRlc3QgLXRleHQgW21jICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5Il0KKwlpZiB7JGFsbF9yZW1vdGVzIG5lIHt9fSB7CisJCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5kZXN0LnJlbW90ZV9yIFwKKwkJCS10ZXh0IFttYyAiUmVtb3RlOiJdIFwKKwkJCS12YWx1ZSByZW1vdGUgXAorCQkJLXZhcmlhYmxlIHB1c2hfdXJsdHlwZQorCQlpZiB7JHVzZV90dGt9IHsKKwkJCXR0azo6Y29tYm9ib3ggJHcuZGVzdC5yZW1vdGVfbSAtc3RhdGUgcmVhZG9ubHkgXAorCQkJCS1leHBvcnRzZWxlY3Rpb24gZmFsc2UgXAorCQkJCS10ZXh0dmFyaWFibGUgcHVzaF9yZW1vdGUgXAorCQkJCS12YWx1ZXMgJGFsbF9yZW1vdGVzCisJCX0gZWxzZSB7CisJCQlldmFsIHRrX29wdGlvbk1lbnUgJHcuZGVzdC5yZW1vdGVfbSBwdXNoX3JlbW90ZSAkYWxsX3JlbW90ZXMKKwkJfQorCQlncmlkICR3LmRlc3QucmVtb3RlX3IgJHcuZGVzdC5yZW1vdGVfbSAtc3RpY2t5IHcKKwkJaWYge1tsc2VhcmNoIC1zb3J0ZWQgLWV4YWN0ICRhbGxfcmVtb3RlcyBvcmlnaW5dICE9IC0xfSB7CisJCQlzZXQgcHVzaF9yZW1vdGUgb3JpZ2luCisJCX0gZWxzZSB7CisJCQlzZXQgcHVzaF9yZW1vdGUgW2xpbmRleCAkYWxsX3JlbW90ZXMgMF0KKwkJfQorCQlzZXQgcHVzaF91cmx0eXBlIHJlbW90ZQorCX0gZWxzZSB7CisJCXNldCBwdXNoX3VybHR5cGUgdXJsCisJfQorCSR7TlN9OjpyYWRpb2J1dHRvbiAkdy5kZXN0LnVybF9yIFwKKwkJLXRleHQgW21jICJBcmJpdHJhcnkgTG9jYXRpb246Il0gXAorCQktdmFsdWUgdXJsIFwKKwkJLXZhcmlhYmxlIHB1c2hfdXJsdHlwZQorCSR7TlN9OjplbnRyeSAkdy5kZXN0LnVybF90IFwKKwkJLXdpZHRoIDUwIFwKKwkJLXRleHR2YXJpYWJsZSBwdXNoX3VybCBcCisJCS12YWxpZGF0ZSBrZXkgXAorCQktdmFsaWRhdGVjb21tYW5kIHsKKwkJCWlmIHslZCA9PSAxICYmIFtyZWdleHAge1xzfSAlU119IHtyZXR1cm4gMH0KKwkJCWlmIHslZCA9PSAxICYmIFtzdHJpbmcgbGVuZ3RoICVTXSA+IDB9IHsKKwkJCQlzZXQgcHVzaF91cmx0eXBlIHVybAorCQkJfQorCQkJcmV0dXJuIDEKKwkJfQorCWdyaWQgJHcuZGVzdC51cmxfciAkdy5kZXN0LnVybF90IC1zdGlja3kgd2UgLXBhZHggezAgNX0KKwlncmlkIGNvbHVtbmNvbmZpZ3VyZSAkdy5kZXN0IDEgLXdlaWdodCAxCisJcGFjayAkdy5kZXN0IC1hbmNob3IgbncgLWZpbGwgeCAtcGFkeSA1IC1wYWR4IDUKKworCSR7TlN9OjpsYWJlbGZyYW1lICR3Lm9wdGlvbnMgLXRleHQgW21jICJUcmFuc2ZlciBPcHRpb25zIl0KKwkke05TfTo6Y2hlY2tidXR0b24gJHcub3B0aW9ucy5mb3JjZSBcCisJCS10ZXh0IFttYyAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiXSBcCisJCS12YXJpYWJsZSBwdXNoX2ZvcmNlCisJZ3JpZCAkdy5vcHRpb25zLmZvcmNlIC1jb2x1bW5zcGFuIDIgLXN0aWNreSB3CisJJHtOU306OmNoZWNrYnV0dG9uICR3Lm9wdGlvbnMudGhpbiBcCisJCS10ZXh0IFttYyAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiXSBcCisJCS12YXJpYWJsZSBwdXNoX3RoaW4KKwlncmlkICR3Lm9wdGlvbnMudGhpbiAtY29sdW1uc3BhbiAyIC1zdGlja3kgdworCSR7TlN9OjpjaGVja2J1dHRvbiAkdy5vcHRpb25zLnRhZ3MgXAorCQktdGV4dCBbbWMgIkluY2x1ZGUgdGFncyJdIFwKKwkJLXZhcmlhYmxlIHB1c2hfdGFncworCWdyaWQgJHcub3B0aW9ucy50YWdzIC1jb2x1bW5zcGFuIDIgLXN0aWNreSB3CisJZ3JpZCBjb2x1bW5jb25maWd1cmUgJHcub3B0aW9ucyAxIC13ZWlnaHQgMQorCXBhY2sgJHcub3B0aW9ucyAtYW5jaG9yIG53IC1maWxsIHggLXBhZHkgNSAtcGFkeCA1CisKKwlzZXQgcHVzaF91cmwge30KKwlzZXQgcHVzaF9mb3JjZSAwCisJc2V0IHB1c2hfdGhpbiAwCisJc2V0IHB1c2hfdGFncyAwCisKKwliaW5kICR3IDxWaXNpYmlsaXR5PiAiZ3JhYiAkdzsgZm9jdXMgJHcuYnV0dG9ucy5jcmVhdGUiCisJYmluZCAkdyA8S2V5LUVzY2FwZT4gImRlc3Ryb3kgJHciCisJYmluZCAkdyA8S2V5LVJldHVybj4gW2xpc3Qgc3RhcnRfcHVzaF9hbnl3aGVyZV9hY3Rpb24gJHddCisJd20gdGl0bGUgJHcgW2FwcGVuZCAiW2FwcG5hbWVdIChbcmVwb25hbWVdKTogIiBbbWMgIlB1c2giXV0KKwl3bSBkZWljb25pZnkgJHcKKwl0a3dhaXQgd2luZG93ICR3Cit9CmRpZmYgLS1naXQgYS9naXQtZ3VpL2xpYi93aW4zMi50Y2wgYi9naXQtZ3VpL2xpYi93aW4zMi50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5MWFiOAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbGliL3dpbjMyLnRjbApAQCAtMCwwICsxLDI2IEBACisjIGdpdC1ndWkgTWlzYy4gbmF0aXZlIFdpbmRvd3MgMzIgc3VwcG9ydAorIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlCisKK3Byb2Mgd2luMzJfcmVhZF9sbmsge2xua19wYXRofSB7CisJcmV0dXJuIFtleGVjIGNzY3JpcHQuZXhlIFwKKwkJL0U6anNjcmlwdCBcCisJCS9ub2xvZ28gXAorCQlbZmlsZSBqb2luICQ6Om9ndWlsaWIgd2luMzJfc2hvcnRjdXQuanNdIFwKKwkJJGxua19wYXRoXQorfQorCitwcm9jIHdpbjMyX2NyZWF0ZV9sbmsge2xua19wYXRoIGxua19leGVjIGxua19kaXJ9IHsKKwlnbG9iYWwgb2d1aWxpYgorCisJc2V0IGxua19hcmdzIFtscmFuZ2UgJGxua19leGVjIDEgZW5kXQorCXNldCBsbmtfZXhlYyBbbGluZGV4ICRsbmtfZXhlYyAwXQorCisJZXZhbCBbbGlzdCBleGVjIHdzY3JpcHQuZXhlIFwKKwkJL0U6anNjcmlwdCBcCisJCS9ub2xvZ28gXAorCQlbZmlsZSBuYXRpdmVuYW1lIFtmaWxlIGpvaW4gJG9ndWlsaWIgd2luMzJfc2hvcnRjdXQuanNdXSBcCisJCSRsbmtfcGF0aCBcCisJCVtmaWxlIG5hdGl2ZW5hbWUgW2ZpbGUgam9pbiAkb2d1aWxpYiBnaXQtZ3VpLmljb11dIFwKKwkJJGxua19kaXIgXAorCQkkbG5rX2V4ZWNdICRsbmtfYXJncworfQpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9saWIvd2luMzJfc2hvcnRjdXQuanMgYi9naXQtZ3VpL2xpYi93aW4zMl9zaG9ydGN1dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc5MjNmCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9saWIvd2luMzJfc2hvcnRjdXQuanMKQEAgLTAsMCArMSwzNCBAQAorLy8gZ2l0LWd1aSBXaW5kb3dzIHNob3J0Y3V0IHN1cHBvcnQKKy8vIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UKKwordmFyIFdzaFNoZWxsID0gV1NjcmlwdC5DcmVhdGVPYmplY3QoIldTY3JpcHQuU2hlbGwiKTsKK3ZhciBhcmd2ID0gV1NjcmlwdC5Bcmd1bWVudHM7Cit2YXIgYXJnaSA9IDA7Cit2YXIgbG5rX3BhdGggPSBhcmd2Lml0ZW0oYXJnaSsrKTsKK3ZhciBpY29fcGF0aCA9IGFyZ2kgPCBhcmd2Lmxlbmd0aCA/IGFyZ3YuaXRlbShhcmdpKyspIDogdW5kZWZpbmVkOwordmFyIGRpcl9wYXRoID0gYXJnaSA8IGFyZ3YubGVuZ3RoID8gYXJndi5pdGVtKGFyZ2krKykgOiB1bmRlZmluZWQ7Cit2YXIgbG5rX2V4ZWMgPSBhcmdpIDwgYXJndi5sZW5ndGggPyBhcmd2Lml0ZW0oYXJnaSsrKSA6IHVuZGVmaW5lZDsKK3ZhciBsbmtfYXJncyA9ICcnOword2hpbGUgKGFyZ2kgPCBhcmd2Lmxlbmd0aCkgeworCXZhciBzID0gYXJndi5pdGVtKGFyZ2krKyk7CisJaWYgKGxua19hcmdzICE9ICcnKQorCQlsbmtfYXJncyArPSAnICc7CisJaWYgKHMuaW5kZXhPZignICcpID49IDApIHsKKwkJbG5rX2FyZ3MgKz0gJyInOworCQlsbmtfYXJncyArPSBzOworCQlsbmtfYXJncyArPSAnIic7CisJfSBlbHNlIHsKKwkJbG5rX2FyZ3MgKz0gczsKKwl9Cit9CisKK3ZhciBsbmsgPSBXc2hTaGVsbC5DcmVhdGVTaG9ydGN1dChsbmtfcGF0aCk7CitpZiAoYXJndi5sZW5ndGggPT0gMSkgeworCVdTY3JpcHQuZWNobyhsbmsuVGFyZ2V0UGF0aCk7Cit9IGVsc2UgeworCWxuay5UYXJnZXRQYXRoID0gbG5rX2V4ZWM7CisJbG5rLkFyZ3VtZW50cyA9IGxua19hcmdzOworCWxuay5JY29uTG9jYXRpb24gPSBpY29fcGF0aCArICIsIDAiOworCWxuay5Xb3JraW5nRGlyZWN0b3J5ID0gZGlyX3BhdGg7CisJbG5rLlNhdmUoKTsKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvbWFjb3N4L0FwcE1haW4udGNsIGIvZ2l0LWd1aS9tYWNvc3gvQXBwTWFpbi50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjNmRjMwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbWFjb3N4L0FwcE1haW4udGNsCkBAIC0wLDAgKzEsMjkgQEAKK3NldCBnaXRleGVjZGlyIHtAQGdpdGV4ZWNkaXJAQH0KK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEdJVF9HVUlfTElCX0RJUikgXSB9IHsKKwlzZXQgZ2l0Z3VpbGliICQ6OmVudihHSVRfR1VJX0xJQl9ESVIpCit9IGVsc2UgeworCXNldCBnaXRndWlsaWIge0BAR0lUR1VJX0xJQkRJUkBAfQorfQorCitzZXQgZW52KFBBVEgpICIkZ2l0ZXhlY2RpcjokZW52KFBBVEgpIgorCitpZiB7W3N0cmluZyBmaXJzdCAtcHNuIFtsaW5kZXggJGFyZ3YgMF1dID09IDB9IHsKKwlsc2V0IGFyZ3YgMCBbZmlsZSBqb2luICRnaXRleGVjZGlyIGdpdC1ndWldCit9CisKK2lmIHtbZmlsZSB0YWlsIFtsaW5kZXggJGFyZ3YgMF1dIGVxIHtnaXRrfX0geworCXNldCBhcmd2MCBbbGluZGV4ICRhcmd2IDBdCisJc2V0IEFwcE1haW5fc291cmNlICRhcmd2MAorfSBlbHNlIHsKKwlzZXQgYXJndjAgW2ZpbGUgam9pbiAkZ2l0ZXhlY2RpciBbZmlsZSB0YWlsIFtsaW5kZXggJGFyZ3YgMF1dXQorCXNldCBBcHBNYWluX3NvdXJjZSBbZmlsZSBqb2luICRnaXRndWlsaWIgZ2l0LWd1aS50Y2xdCisJaWYge1tpbmZvIGV4aXN0cyBlbnYoUFdEKV19IHsKKwkJY2QgJGVudihQV0QpCisJfSBlbHNlaWYge1twd2RdIGVxIHsvfX0geworCQljZCAkZW52KEhPTUUpCisJfQorfQorCit1bnNldCBnaXRleGVjZGlyIGdpdGd1aWxpYgorc2V0IGFyZ3YgW2xyYW5nZSAkYXJndiAxIGVuZF0KK3NvdXJjZSAkQXBwTWFpbl9zb3VyY2UKZGlmZiAtLWdpdCBhL2dpdC1ndWkvbWFjb3N4L0luZm8ucGxpc3QgYi9naXQtZ3VpL21hY29zeC9JbmZvLnBsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZGUxMjEKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL21hY29zeC9JbmZvLnBsaXN0CkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21wdXRlci8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIxLjAiPgorPGRpY3Q+CisJPGtleT5DRkJ1bmRsZURldmVsb3BtZW50UmVnaW9uPC9rZXk+CisJPHN0cmluZz5FbmdsaXNoPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUV4ZWN1dGFibGU8L2tleT4KKwk8c3RyaW5nPkBAR0lUR1VJX1RLRVhFQ1VUQUJMRUBAPC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUdldEluZm9TdHJpbmc8L2tleT4KKwk8c3RyaW5nPkdpdCBHdWkgQEBHSVRHVUlfVkVSU0lPTkBAIMKpIDIwMDYtMjAwNyBTaGF3biBQZWFyY2UsIGV0LiBhbC48L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlSWNvbkZpbGU8L2tleT4KKwk8c3RyaW5nPmdpdC1ndWkuaWNuczwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVJZGVudGlmaWVyPC9rZXk+CisJPHN0cmluZz5jei5vci5yZXBvLmdpdC1ndWk8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlSW5mb0RpY3Rpb25hcnlWZXJzaW9uPC9rZXk+CisJPHN0cmluZz42LjA8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlTmFtZTwva2V5PgorCTxzdHJpbmc+R2l0IEd1aTwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PgorCTxzdHJpbmc+QVBQTDwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmc8L2tleT4KKwk8c3RyaW5nPkBAR0lUR1VJX1ZFUlNJT05AQDwvc3RyaW5nPgorCTxrZXk+Q0ZCdW5kbGVTaWduYXR1cmU8L2tleT4KKwk8c3RyaW5nPkdJVGc8L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlVmVyc2lvbjwva2V5PgorCTxzdHJpbmc+QEBHSVRHVUlfVkVSU0lPTkBAPC9zdHJpbmc+CisJPGtleT5OU0hpZ2hSZXNvbHV0aW9uQ2FwYWJsZTwva2V5PgorCTx0cnVlLz4KKzwvZGljdD4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9naXQtZ3VpL21hY29zeC9naXQtZ3VpLmljbnMgYi9naXQtZ3VpL21hY29zeC9naXQtZ3VpLmljbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkODhhNwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvbWFjb3N4L2dpdC1ndWkuaWNucwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvLy5naXRpZ25vcmUgYi9naXQtZ3VpL3BvLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg5Y2Y0NAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKyoubXNnCisqfgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9SRUFETUUgYi9naXQtZ3VpL3BvL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjU4MzdkCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9SRUFETUUKQEAgLTAsMCArMSwyNTEgQEAKK0xvY2FsaXppbmcgZ2l0LWd1aSBmb3IgeW91ciBsYW5ndWFnZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2hvcnQgbm90ZSBpcyB0byBoZWxwIHlvdSwgd2hvIHJlYWRzIGFuZCB3cml0ZXMgRW5nbGlzaCBhbmQgeW91cgorb3duIGxhbmd1YWdlLCBoZWxwIHVzIGdldHRpbmcgZ2l0LWd1aSBsb2NhbGl6ZWQgZm9yIG1vcmUgbGFuZ3VhZ2VzLiAgSXQKK2RvZXMgbm90IHRyeSB0byBiZSBhIGNvbXByZWhlbnNpdmUgbWFudWFsIG9mIEdOVSBnZXR0ZXh0LCB3aGljaCBpcyB0aGUKK2kxOG4gZnJhbWV3b3JrIHdlIHVzZSwgYnV0IHRyaWVzIHRvIGhlbHAgeW91IGdldCBzdGFydGVkIGJ5IGNvdmVyaW5nIHRoZQorYmFzaWNzIGFuZCBob3cgaXQgaXMgdXNlZCBpbiB0aGlzIHByb2plY3QuCisKKzEuIEdldHRpbmcgc3RhcnRlZC4KKworWW91IHdvdWxkIGZpcnN0IG5lZWQgdG8gaGF2ZSBhIHdvcmtpbmcgImdpdCIuICBZb3VyIGRpc3RyaWJ1dGlvbiBtYXkKK2hhdmUgaXQgYXMgImdpdC1jb3JlIiBwYWNrYWdlIChkbyBub3QgZ2V0ICJHTlUgSW50ZXJhY3RpdmUgVG9vbHMiIC0tCit0aGF0IGlzIGEgZGlmZmVyZW50ICJnaXQiKS4gIFlvdSB3b3VsZCBhbHNvIG5lZWQgR05VIGdldHRleHQgdG9vbGNoYWluCit0byB0ZXN0IHRoZSByZXN1bHRpbmcgdHJhbnNsYXRpb24gb3V0LiAgQWx0aG91Z2ggeW91IGNhbiB3b3JrIG9uIG1lc3NhZ2UKK3RyYW5zbGF0aW9uIGZpbGVzIHdpdGggYSByZWd1bGFyIHRleHQgZWRpdG9yLCBpdCBpcyBhIGdvb2QgaWRlYSB0byBoYXZlCitzcGVjaWFsaXplZCBzby1jYWxsZWQgInBvIGZpbGUgZWRpdG9ycyIgKGUuZy4gZW1hY3MgcG8tbW9kZSwgS0JhYmVsLAorcG9lZGl0LCBHVHJhbnNsYXRvciAtLS0gYW55IG9mIHRoZW0gd291bGQgd29yayB3ZWxsKS4gIFBsZWFzZSBpbnN0YWxsCit0aGVtLgorCitZb3Ugd291bGQgdGhlbiBuZWVkIHRvIGNsb25lIHRoZSBnaXQtZ3VpIHByb2plY3QgcmVwb3NpdG9yeSBhbmQgY3JlYXRlCithIGZlYXR1cmUgYnJhbmNoIHRvIGJlZ2luIHdvcmtpbmc6CisKKwkkIGdpdCBjbG9uZSBnaXQ6Ly9yZXBvLm9yLmN6L2dpdC1ndWkuZ2l0CisJJCBjZCBnaXQtZ3VpLmdpdAorCSQgZ2l0IGNoZWNrb3V0IC1iIG15LXRyYW5zbGF0aW9uCisKK1RoZSAiZ2l0IGNoZWNrb3V0IiBjb21tYW5kIGNyZWF0ZXMgYSBuZXcgYnJhbmNoIHRvIGtlZXAgeW91ciB3b3JrCitpc29sYXRlZCBhbmQgdG8gbWFrZSBpdCBzaW1wbGUgdG8gcG9zdCB5b3VyIHBhdGNoIHNlcmllcyB3aGVuCitjb21wbGV0ZWQuICBZb3Ugd2lsbCBiZSB3b3JraW5nIG9uIHRoaXMgYnJhbmNoLgorCisKKzIuIFN0YXJ0aW5nIGEgbmV3IGxhbmd1YWdlLgorCitJbiB0aGUgZ2l0LWd1aSBkaXJlY3RvcnkgaXMgYSBwby8gc3ViZGlyZWN0b3J5LiAgSXQgaGFzIGEgaGFuZGZ1bCBvZgorZmlsZXMgd2hvc2UgbmFtZXMgZW5kIHdpdGggIi5wbyIuICBJcyB0aGVyZSBhIGZpbGUgdGhhdCBoYXMgbWVzc2FnZXMKK2luIHlvdXIgbGFuZ3VhZ2U/CisKK0lmIHlvdSBkbyBub3Qga25vdyB3aGF0IHlvdXIgbGFuZ3VhZ2Ugc2hvdWxkIGJlIG5hbWVkLCB5b3UgbmVlZCB0byBmaW5kCitpdC4gIFRoaXMgY3VycmVudGx5IGZvbGxvd3MgSVNPIDYzOS0xIHR3byBsZXR0ZXIgY29kZXM6CisKKwlodHRwOi8vd3d3LmxvYy5nb3Yvc3RhbmRhcmRzL2lzbzYzOS0yL3BocC9jb2RlX2xpc3QucGhwCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHByZXBhcmluZyBhIHRyYW5zbGF0aW9uIGZvciBBZnJpa2FhbnMsIHRoZQorbGFuZ3VhZ2UgY29kZSBpcyAiYWYiLiAgSWYgdGhlcmUgYWxyZWFkeSBpcyBhIHRyYW5zbGF0aW9uIGZvciB5b3VyCitsYW5ndWFnZSwgeW91IGRvIG5vdCBoYXZlIHRvIHBlcmZvcm0gYW55IHN0ZXAgaW4gdGhpcyBzZWN0aW9uLCBidXQga2VlcAorcmVhZGluZywgYmVjYXVzZSB3ZSBhcmUgY292ZXJpbmcgdGhlIGJhc2ljcy4KKworSWYgeW91IGRpZCBub3QgZmluZCB5b3VyIGxhbmd1YWdlLCB5b3Ugd291bGQgbmVlZCB0byBzdGFydCBvbmUgeW91cnNlbGYuCitDb3B5IHBvL2dpdC1ndWkucG90IGZpbGUgdG8gcG8vYWYucG8gKHJlcGxhY2UgImFmIiB3aXRoIHRoZSBjb2RlIGZvcgoreW91ciBsYW5ndWFnZSkuICBFZGl0IHRoZSBmaXJzdCBzZXZlcmFsIGxpbmVzIHRvIG1hdGNoIGV4aXN0aW5nICoucG8KK2ZpbGVzIHRvIG1ha2UgaXQgY2xlYXIgdGhpcyBpcyBhIHRyYW5zbGF0aW9uIHRhYmxlIGZvciBnaXQtZ3VpIHByb2plY3QsCithbmQgeW91IGFyZSB0aGUgcHJpbWFyeSB0cmFuc2xhdG9yLiAgVGhlIHJlc3VsdCBvZiB5b3VyIGVkaXRpbmcgd291bGQKK2xvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKKworICAgICMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSB0byBBZnJpa2FhbnMKKyAgICAjIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UKKyAgICAjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCisgICAgIyBZT1VSIE5BTUUgPFlPVVJARS1NQUlMLkFERFJFU1M+LCAyMDA3LgorICAgICMKKyAgICAjLCBmdXp6eQorICAgIG1zZ2lkICIiCisgICAgbXNnc3RyICIiCisgICAgIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorICAgICJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisgICAgIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA3LTA3LTI0IDIyOjE5KzAzMDBcbiIKKyAgICAiUE8tUmV2aXNpb24tRGF0ZTogMjAwNy0wNy0yNSAxODowMCswOTAwXG4iCisgICAgIkxhc3QtVHJhbnNsYXRvcjogWU9VUiBOQU1FIDxZT1VSQEUtTUFJTC5BRERSRVNTPlxuIgorICAgICJMYW5ndWFnZS1UZWFtOiBBZnJpa2FhbnNcbiIKKyAgICAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisgICAgIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworWW91IHdpbGwgZmluZCBtYW55IHBhaXJzIG9mIGEgIm1zZ2lkIiBsaW5lIGZvbGxvd2VkIGJ5IGEgIm1zZ3N0ciIgbGluZS4KK1RoZXNlIHBhaXJzIGRlZmluZSBob3cgbWVzc2FnZXMgaW4gZ2l0LWd1aSBhcHBsaWNhdGlvbiBhcmUgdHJhbnNsYXRlZCB0bworeW91ciBsYW5ndWFnZS4gIFlvdXIgcHJpbWFyaWx5IGpvYiBpcyB0byBmaWxsIGluIHRoZSBlbXB0eSBkb3VibGUgcXVvdGUKK3BhaXJzIG9uIG1zZ3N0ciBsaW5lcyB3aXRoIHRoZSB0cmFuc2xhdGlvbiBvZiB0aGUgc3RyaW5ncyBvbiB0aGVpcgorbWF0Y2hpbmcgbXNnaWQgbGluZXMuICBBIGZldyB0aXBzOgorCisgLSBDb250cm9sIGNoYXJhY3RlcnMsIHN1Y2ggYXMgbmV3bGluZXMsIGFyZSB3cml0dGVuIGluIGJhY2tzbGFzaAorICAgc2VxdWVuY2Ugc2ltaWxhciB0byBzdHJpbmcgbGl0ZXJhbHMgaW4gdGhlIEMgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuCisgICBXaGVuIHRoZSBzdHJpbmcgZ2l2ZW4gb24gYSBtc2dpZCBsaW5lIGhhcyBzdWNoIGEgYmFja3NsYXNoIHNlcXVlbmNlLAorICAgeW91IHdvdWxkIHR5cGljYWxseSB3YW50IHRvIGhhdmUgY29ycmVzcG9uZGluZyBvbmVzIGluIHRoZSBzdHJpbmcgb24KKyAgIHlvdXIgbXNnc3RyIGxpbmUuCisKKyAtIFNvbWUgbWVzc2FnZXMgY29udGFpbiBhbiBvcHRpb25hbCBjb250ZXh0IGluZGljYXRvciBhdCB0aGUgZW5kLAorICAgZm9yIGV4YW1wbGUgIkBAbm91biIgb3IgIkBAdmVyYiIuICBUaGlzIGluZGljYXRvciBhbGxvd3MgdGhlCisgICBzb2Z0d2FyZSB0byBzZWxlY3QgdGhlIGNvcnJlY3QgdHJhbnNsYXRpb24gZGVwZW5kaW5nIHVwb24gdGhlIHVzZS4KKyAgIFRoZSBpbmRpY2F0b3IgaXMgbm90IGFjdHVhbGx5IHBhcnQgb2YgdGhlIG1lc3NhZ2UgYW5kIHdpbGwgbm90CisgICBiZSBzaG93biB0byB0aGUgZW5kLXVzZXIuCisKKyAgIElmIHlvdXIgbGFuZ3VhZ2UgZG9lcyBub3QgcmVxdWlyZSBhIGRpZmZlcmVudCB0cmFuc2xhdGlvbiB5b3UKKyAgIHdpbGwgc3RpbGwgbmVlZCB0byB0cmFuc2xhdGUgYm90aCBtZXNzYWdlcy4KKworIC0gT2Z0ZW4gdGhlIG1lc3NhZ2VzIGJlaW5nIHRyYW5zbGF0ZWQgYXJlIGZvcm1hdCBzdHJpbmdzIGdpdmVuIHRvCisgICAicHJpbnRmKCkiLWxpa2UgZnVuY3Rpb25zLiAgTWFrZSBzdXJlICIlcyIsICIlZCIsIGFuZCAiJSUiIGluIHlvdXIKKyAgIHRyYW5zbGF0ZWQgbWVzc2FnZXMgbWF0Y2ggdGhlIG9yaWdpbmFsLgorCisgICBXaGVuIHlvdSBoYXZlIHRvIGNoYW5nZSB0aGUgb3JkZXIgb2Ygd29yZHMsIHlvdSBjYW4gYWRkICI8bnVtYmVyPiQiCisgICBiZXR3ZWVuICclJyBhbmQgdGhlIGNvbnZlcnNpb24gKCdzJywgJ2QnLCBldGMuKSB0byBzYXkgIjxudW1iZXI+LXRoCisgICBwYXJhbWV0ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcgaXMgdXNlZCBhdCB0aGlzIHBvaW50Ii4gIEZvciBleGFtcGxlLAorICAgaWYgdGhlIG9yaWdpbmFsIG1lc3NhZ2UgaXMgbGlrZSB0aGlzOgorCisJIkxlbmd0aCBpcyAlZCwgV2VpZ2h0IGlzICVkIgorCisgICBhbmQgaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB5b3VyIHRyYW5zbGF0aW9uIG5lZWRzIHRvIHNheSB3ZWlnaHQgZmlyc3QKKyAgIGFuZCB0aGVuIGxlbmd0aCwgeW91IGNhbiBzYXkgc29tZXRoaW5nIGxpa2U6CisKKwkiV0VJR0hUIElTICUyJGQsIExFTkdUSCBJUyAlMSRkIgorCisgICBBIGZvcm1hdCBzcGVjaWZpY2F0aW9uIHdpdGggYSAnKicgKGFzdGVyaXNrKSByZWZlcnMgdG8gKnR3byogYXJndW1lbnRzCisgICBpbnN0ZWFkIG9mIG9uZSwgaGVuY2UgdGhlIHN1Y2NlZWRpbmcgYXJndW1lbnQgbnVtYmVyIGlzIHR3byBoaWdoZXIKKyAgIGluc3RlYWQgb2Ygb25lLiBTbywgYSBtZXNzYWdlIGxpa2UgdGhpcworCisJIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCisKKyAgIGlzIGVxdWl2YWxlbnQgdG8KKworCSIlMSRzIC4uLiAlMiQqaSBvZiAlNCQqaSAlNiRzICglNyQzaSUlKSIKKworIC0gQSBsb25nIG1lc3NhZ2UgY2FuIGJlIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBsaW5lcyBieSBlbmRpbmcgdGhlCisgICBzdHJpbmcgd2l0aCBhIGRvdWJsZSBxdW90ZSwgYW5kIHN0YXJ0aW5nIGFub3RoZXIgc3RyaW5nIG9uIHRoZSBuZXh0CisgICBsaW5lIHdpdGggYW5vdGhlciBkb3VibGUgcXVvdGUuICBUaGV5IHdpbGwgYmUgY29uY2F0ZW5hdGVkIGluIHRoZQorICAgcmVzdWx0LiAgRm9yIGV4YW1wbGU6CisKKyAgICM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5CisgICAjLCB0Y2wtZm9ybWF0CisgICBtc2dpZCAiIgorICAgIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorICAgIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorICAgbXNnc3RyICIiCisgICAiSEVSRSBZT1UgV0lMTCBXUklURSBZT1VSIFRSQU5TTEFUSU9OIE9GIFRIRSBBQk9WRSBMT05HICIKKyAgICJNRVNTQUdFIElOIFlPVVIgTEFOR1VBR0UuIgorCitZb3UgY2FuIHRlc3QgeW91ciB0cmFuc2xhdGlvbiBieSBydW5uaW5nICJtYWtlIGluc3RhbGwiLCB3aGljaCB3b3VsZAorY3JlYXRlIHBvL2FmLm1zZyBmaWxlIGFuZCBpbnN0YWxscyB0aGUgcmVzdWx0LCBhbmQgdGhlbiBydW5uaW5nIHRoZQorcmVzdWx0aW5nIGdpdC1ndWkgdW5kZXIgeW91ciBsb2NhbGU6CisKKwkkIG1ha2UgaW5zdGFsbAorCSQgTEFORz1hZiBnaXQtZ3VpCisKK1RoZXJlIGlzIGEgdHJpY2sgdG8gdGVzdCB5b3VyIHRyYW5zbGF0aW9uIHdpdGhvdXQgZmlyc3QgaW5zdGFsbGluZzoKKworCSQgbWFrZQorCSQgTEFORz1hZiAuL2dpdC1ndWkuc2gKKworV2hlbiB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgdHJhbnNsYXRpb24sIGNvbW1pdCB5b3VyIGNoYW5nZXMgdGhlbiBzdWJtaXQKK3lvdXIgcGF0Y2ggc2VyaWVzIHRvIHRoZSBtYWludGFpbmVyIGFuZCB0aGUgR2l0IG1haWxpbmcgbGlzdDoKKworCSQgZWRpdCBwby9hZi5wbworCS4uLiBiZSBzdXJlIHRvIHVwZGF0ZSBMYXN0LVRyYW5zbGF0b3I6IGFuZAorCS4uLiBQTy1SZXZpc2lvbi1EYXRlOiBsaW5lcy4KKwkkIGdpdCBhZGQgcG8vYWYucG8KKwkkIGdpdCBjb21taXQgLXMgLW0gJ2dpdC1ndWk6IGFkZGVkIEFmcmlrYWFucyB0cmFuc2xhdGlvbi4nCisJJCBnaXQgc2VuZC1lbWFpbCAtLXRvICdnaXRAdmdlci5rZXJuZWwub3JnJyBcCisJICAgLS1jYyAnUGF0IFRob3l0cyA8cGF0dGhveXRzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4nIFwKKwkgICAtLXN1YmplY3QgJ2dpdC1ndWk6IEFmcmlrYWFucyB0cmFuc2xhdGlvbicgXAorCSAgIG1hc3Rlci4uCisKKworMy4gVXBkYXRpbmcgeW91ciB0cmFuc2xhdGlvbi4KKworVGhlcmUgbWF5IGFscmVhZHkgYmUgYSB0cmFuc2xhdGlvbiBmb3IgeW91ciBsYW5ndWFnZSwgYW5kIHlvdSBtYXkgd2FudAordG8gY29udHJpYnV0ZSBhbiB1cGRhdGUuICBUaGlzIG1heSBiZSBiZWNhdXNlIHlvdSB3b3VsZCB3YW50IHRvIGltcHJvdmUKK3RoZSB0cmFuc2xhdGlvbiBvZiBleGlzdGluZyBtZXNzYWdlcywgb3IgYmVjYXVzZSB0aGUgZ2l0LWd1aSBzb2Z0d2FyZQoraXRzZWxmIHdhcyB1cGRhdGVkIGFuZCB0aGVyZSBhcmUgbmV3IG1lc3NhZ2VzIHRoYXQgbmVlZCB0cmFuc2xhdGlvbi4KKworSW4gYW55IGNhc2UsIG1ha2Ugc3VyZSB5b3UgYXJlIHVwLXRvLWRhdGUgYmVmb3JlIHN0YXJ0aW5nIHlvdXIgd29yazoKKworCSQgZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSQgZ2l0IHB1bGwKKworSW4gdGhlIGZvcm1lciBjYXNlLCB5b3Ugd2lsbCBlZGl0IHBvL2FmLnBvIChhZ2FpbiwgcmVwbGFjZSAiYWYiIHdpdGgKK3lvdXIgbGFuZ3VhZ2UgY29kZSksIGFuZCBhZnRlciB0ZXN0aW5nIGFuZCB1cGRhdGluZyB0aGUgTGFzdC1UcmFuc2xhdG9yOgorYW5kIFBPLVJldmlzaW9uLURhdGU6IGxpbmVzLCAiYWRkL2NvbW1pdC9wdXNoIiBhcyBpbiB0aGUgcHJldmlvdXMKK3NlY3Rpb24uCisKK0J5IGNvbXBhcmluZyAiUE9ULUNyZWF0aW9uLURhdGU6IiBsaW5lIGluIHBvL2dpdC1ndWkucG90IGZpbGUgYW5kCitwby9hZi5wbyBmaWxlLCB5b3UgY2FuIHRlbGwgaWYgdGhlcmUgYXJlIG5ldyBtZXNzYWdlcyB0aGF0IG5lZWQgdG8gYmUKK3RyYW5zbGF0ZWQuICBZb3Ugd291bGQgbmVlZCB0aGUgR05VIGdldHRleHQgcGFja2FnZSB0byBwZXJmb3JtIHRoaXMKK3N0ZXAuCisKKwkkIG1zZ21lcmdlIC1VIHBvL2FmLnBvIHBvL2dpdC1ndWkucG90CisKK1RoaXMgdXBkYXRlcyBwby9hZi5wbyAoYWdhaW4sIHJlcGxhY2UgImFmIiB3aXRoIHlvdXIgbGFuZ3VhZ2UKK2NvZGUpIHNvIHRoYXQgaXQgY29udGFpbnMgbXNnaWQgbGluZXMgKGkuZS4gdGhlIG9yaWdpbmFsKSB0aGF0Cit5b3VyIHRyYW5zbGF0aW9uIGRpZCBub3QgaGF2ZSBiZWZvcmUuICBUaGVyZSBhcmUgYSBmZXcgdGhpbmdzIHRvCit3YXRjaCBvdXQgZm9yOgorCisgLSBUaGUgb3JpZ2luYWwgdGV4dCBpbiBFbmdsaXNoIG9mIGFuIG9sZGVyIG1lc3NhZ2UgeW91IGFscmVhZHkKKyAgIHRyYW5zbGF0ZWQgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWQuICBZb3Ugd2lsbCBub3RpY2UgYSBjb21tZW50IGxpbmUKKyAgIHRoYXQgYmVnaW5zIHdpdGggIiMsIGZ1enp5IiBpbiBmcm9udCBvZiBzdWNoIGEgbWVzc2FnZS4gIG1zZ21lcmdlCisgICB0b29sIG1hZGUgaXRzIGJlc3QgZWZmb3J0IHRvIG1hdGNoIHlvdXIgb2xkIHRyYW5zbGF0aW9uIHdpdGggdGhlCisgICBtZXNzYWdlIGZyb20gdGhlIHVwZGF0ZWQgc29mdHdhcmUsIGJ1dCB5b3UgbWF5IGZpbmQgY2FzZXMgdGhhdCBpdAorICAgbWF0Y2hlZCB5b3VyIG9sZCB0cmFuc2xhdGVkIG1lc3NhZ2UgdG8gYSBuZXcgbXNnaWQgYW5kIHRoZSBwYWlyaW5nCisgICBkb2VzIG5vdCBtYWtlIGFueSBzZW5zZSAtLSB5b3Ugd291bGQgbmVlZCB0byBmaXggdGhlbSwgYW5kIHRoZW4KKyAgIHJlbW92ZSB0aGUgIiMsIGZ1enp5IiBsaW5lIGZyb20gdGhlIG1lc3NhZ2UgKHlvdXIgZml4ZWQgdHJhbnNsYXRpb24KKyAgIG9mIHRoZSBtZXNzYWdlIHdpbGwgbm90IGJlIHVzZWQgYmVmb3JlIHlvdSByZW1vdmUgdGhlIG1hcmtlcikuCisKKyAtIE5ldyBtZXNzYWdlcyBhZGRlZCB0byB0aGUgc29mdHdhcmUgd2lsbCBoYXZlIG1zZ3N0ciBsaW5lcyB3aXRoIGVtcHR5CisgICBzdHJpbmdzLiAgWW91IHdvdWxkIG5lZWQgdG8gdHJhbnNsYXRlIHRoZW0uCisKK1RoZSBwby9naXQtZ3VpLnBvdCBmaWxlIGlzIHVwZGF0ZWQgYnkgdGhlIGludGVybmF0aW9uYWxpemF0aW9uCitjb29yZGluYXRvciBmcm9tIHRpbWUgdG8gdGltZS4gIFlvdSBfY291bGRfIHVwZGF0ZSBpdCB5b3Vyc2VsZiwgYnV0Cit0cmFuc2xhdG9ycyBhcmUgZGlzY291cmFnZWQgZnJvbSBkb2luZyBzbyBiZWNhdXNlIHdlIHdvdWxkIHdhbnQgYWxsCitsYW5ndWFnZSB0ZWFtcyB0byBiZSB3b3JraW5nIG9mZiBvZiB0aGUgc2FtZSB2ZXJzaW9uIG9mIGdpdC1ndWkucG90LgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgc2VjdGlvbiBpcyBhIG5vdGUgdG8gdGhlIGludGVybmF0aW9uYWxpemF0aW9uIGNvb3JkaW5hdG9yLCBhbmQKK3RyYW5zbGF0b3JzIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IGl0IHRvbyBtdWNoLgorCitUaGUgbWVzc2FnZSB0ZW1wbGF0ZSBmaWxlIHBvL2dpdC1ndWkucG90IG5lZWRzIHRvIGJlIGtlcHQgdXAgdG8gZGF0ZQorcmVsYXRpdmUgdG8gdGhlIHNvZnR3YXJlIHRoZSB0cmFuc2xhdGlvbnMgYXBwbHkgdG8sIGFuZCBpdCBpcyB0aGUKK3Jlc3BvbnNpYmlsaXR5IG9mIHRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBjb29yZGluYXRvci4KKworV2hlbiB1cGRhdGluZyBwby9naXQtZ3VpLnBvdCBmaWxlLCBob3dldmVyLCBfbmV2ZXJfIHJ1biAibXNnbWVyZ2UgLVUKK3BvL3h4LnBvIiBmb3IgaW5kaXZpZHVhbCBsYW5ndWFnZSB0cmFuc2xhdGlvbnMsIHVubGVzcyB5b3UgYXJlIGFic29sdXRlbHkKK3N1cmUgdGhhdCB0aGVyZSBpcyBubyBvdXRzdGFuZGluZyB3b3JrIG9uIHRyYW5zbGF0aW9uIGZvciBsYW5ndWFnZSB4eC4KK0RvaW5nIHNvIHdpbGwgY3JlYXRlIHVubmVjZXNzYXJ5IG1lcmdlIGNvbmZsaWN0cyBhbmQgZm9yY2UgbmVlZGxlc3MKK3JlLXRyYW5zbGF0aW9uIG9uIHRyYW5zbGF0b3JzLiAgVGhlIHRyYW5zbGF0b3IgaG93ZXZlciBtYXkgbm90IGhhdmUgYWNjZXNzCit0byB0aGUgbXNnbWVyZ2UgdG9vbCwgaW4gd2hpY2ggY2FzZSB0aGUgY29vcmRpbmF0b3IgbWF5IHJ1biBpdCBmb3IgdGhlCit0cmFuc2xhdG9yIGFzIGEgc2VydmljZS4KKworQnV0IG1pc3Rha2VzIGRvIGhhcHBlbi4gIFN1cHBvc2UgYSB0cmFuc2xhdGlvbiB3YXMgYmFzZWQgb24gYW4gb2xkZXIKK3ZlcnNpb24gWCwgdGhlIFBPVCBmaWxlIHdhcyB1cGRhdGVkIGF0IHZlcnNpb24gWSBhbmQgdGhlbiBtc2dtZXJnZSB3YXMgcnVuCithdCB2ZXJzaW9uIFogZm9yIHRoZSBsYW5ndWFnZSwgYW5kIHRoZSB0cmFuc2xhdG9yIHNlbnQgaW4gYSBwYXRjaCBiYXNlZCBvbgordmVyc2lvbiBYOgorCisgICAgICAgICA/IHRyYW5zbGF0ZWQKKyAgICAgICAgLworICAgIC0tLVgtLS1ZLS0tWiAobWFzdGVyKQorCitUaGUgY29vcmRpbmF0b3IgY291bGQgcmVjb3ZlciBmcm9tIHN1Y2ggYSBtaXN0YWtlIGJ5IGZpcnN0IGFwcGx5aW5nIHRoZQorcGF0Y2ggdG8gWCwgcmVwbGFjZSB0aGUgdHJhbnNsYXRlZCBmaWxlIGluIFosIGFuZCB0aGVuIHJ1bm5pbmcgbXNnbWVyZ2UKK2FnYWluIGJhc2VkIG9uIHRoZSB1cGRhdGVkIFBPVCBmaWxlIGFuZCBjb21taXQgdGhlIHJlc3VsdC4gIFRoZSBzZXF1ZW5jZQord291bGQgbG9vayBsaWtlIHRoaXM6CisKKyAgICAkIGdpdCBjaGVja291dCBYCisgICAgJCBnaXQgYW0gLXMgeHgucGF0Y2gKKyAgICAkIGdpdCBjaGVja291dCBtYXN0ZXIKKyAgICAkIGdpdCBjaGVja291dCBIRUFEQHsxfSBwby94eC5wbworICAgICQgbXNnbWVyZ2UgLVUgcG8veHgucG8gcG8vZ2l0LWd1aS5wb3QKKyAgICAkIGdpdCBjb21taXQgLWMgSEVBREB7MX0gcG8veHgucG8KKworU3RhdGUgaW4gdGhlIG1lc3NhZ2UgdGhhdCB0aGUgdHJhbnNsYXRlZCBtZXNzYWdlcyBhcmUgYmFzZWQgb24gYSBzbGlnaHRseQorb2xkZXIgdmVyc2lvbiwgYW5kIG1zZ21lcmdlIHdhcyBydW4gdG8gaW5jb3Jwb3JhdGUgY2hhbmdlcyB0byBtZXNzYWdlCit0ZW1wbGF0ZXMgZnJvbSB0aGUgdXBkYXRlZCBQT1QgZmlsZS4gIFRoZSByZXN1bHQgbmVlZHMgdG8gYmUgZnVydGhlcgordHJhbnNsYXRlZCwgYnV0IGF0IGxlYXN0IHRoZSBtZXNzYWdlcyB0aGF0IHdlcmUgdXBkYXRlZCBieSB0aGUgcGF0Y2ggdGhhdAord2VyZSBub3QgY2hhbmdlZCBieSB0aGUgUE9UIHVwZGF0ZSB3aWxsIHN1cnZpdmUgdGhlIHByb2Nlc3MgYW5kIGRvIG5vdAorbmVlZCB0byBiZSByZS10cmFuc2xhdGVkLgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9iZy5wbyBiL2dpdC1ndWkvcG8vYmcucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ5YjAzOQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vYmcucG8KQEAgLTAsMCArMSwyNzE0IEBACisjIEJ1bGdhcmlhbiB0cmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHBvLWZpbGUuCisjIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCwgMjAxNSBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+LgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0IHBhY2thZ2UuCisjIEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz4sIDIwMTIsIDIwMTMsIDIwMTQsIDIwMTUuCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpIG1hc3RlclxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNC0wNyAwNzozNyswMzAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0wNC0wNyAwNzo0NiswMzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQnVsZ2FyaWFuIDxkaWN0QGZzYS1iZy5vcmc+XG4iCisiTGFuZ3VhZ2U6IGJnXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGdpdC1ndWkuc2g6ODYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgItCj0LrQsNC30LDQvSDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDRiNGA0LjRhNGCINCyIOKAniVz4oCcOiIKKworIzogZ2l0LWd1aS5zaDo5MTUKK21zZ2lkICJNYWluIEZvbnQiCittc2dzdHIgItCe0YHQvdC+0LLQtdC9INGI0YDQuNGE0YIiCisKKyM6IGdpdC1ndWkuc2g6OTE2Cittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgItCo0YDQuNGE0YIg0LfQsCDRgNCw0LfQu9C40LrQuNGC0LUv0LrQvtC90LfQvtC70LDRgtCwIgorCisjOiBnaXQtZ3VpLnNoOjkzMSBnaXQtZ3VpLnNoOjk0NSBnaXQtZ3VpLnNoOjk1OCBnaXQtZ3VpLnNoOjEwNDgKKyM6IGdpdC1ndWkuc2g6MTA2NyBnaXQtZ3VpLnNoOjMxMjUKK21zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKK21zZ3N0ciAiZ2l0LWd1aTog0YTQsNGC0LDQu9C90LAg0LPRgNC10YjQutCwIgorCisjOiBnaXQtZ3VpLnNoOjkzMgorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIGdpdCDQu9C40L/RgdCy0LAg0LIg0L/RitGC0Y8gKFBBVEgpLiIKKworIzogZ2l0LWd1aS5zaDo5NTkKK21zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKK21zZ3N0ciAi0J3QuNC30YrRgiDRgSDQstC10YDRgdC40Y/RgtCwINC90LAgR2l0INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC90YLQtdGA0L/RgNC10YLQuNGA0LDQvToiCisKKyM6IGdpdC1ndWkuc2g6OTg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIlxuIgorIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCisiXG4iCisiJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgorIlxuIgorIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCittc2dzdHIgIiIKKyLQktC10YDRgdC40Y/RgtCwINC90LAgR2l0INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtC/0YDQtdC00LXQu9C10L3QsC5cbiIKKyJcbiIKKyLQktC10YDRgdC40Y/RgtCwINC90LAg4oCeJXPigJwg0LjQt9Cz0LvQtdC20LTQsCwg0YfQtSDQtSDigJ4lc+KAnC5cbiIKKyJcbiIKKyLigJ4lc+KAnCDQuNC30LjRgdC60LLQsCBHaXQsINCy0LXRgNGB0LjRjyDQv9C+0L3QtSAxLjUuMC5cbiIKKyJcbiIKKyLQlNCwINGB0LUg0L/RgNC40LXQvNC1INC70LgsINGH0LUg4oCeJXPigJwg0LUg0LLQtdGA0YHQuNGPIOKAnjEuNS4w4oCcP1xuIgorCisjOiBnaXQtZ3VpLnNoOjEyODEKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgItCU0LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdCwIEdpdCDQvdC1INC1INC+0YLQutGA0LjRgtCwOiIKKworIzogZ2l0LWd1aS5zaDoxMzE1Cittc2dpZCAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC10LzQuNC90LUg0LrRitC8INGA0L7QtNC40YLQtdC70YHQutCw0YLQsCAg0LTQuNGA0LXQutGC0L7RgNC40Y8uIgorCisjOiBnaXQtZ3VpLnNoOjEzMjMKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgItCT0L7Qu9C+INGF0YDQsNC90LjQu9C40YnQtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwOiIKKworIzogZ2l0LWd1aS5zaDoxMzMxCittc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgItCg0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQu9C40L/RgdCy0LAiCisKKyM6IGdpdC1ndWkuc2g6MTUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNgorbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCittc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINGE0LDQudC70LDigKYiCisKKyM6IGdpdC1ndWkuc2g6MTU2MworbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0LfQsCDQv9GA0L7QvNC10L3QtdC90Lgg0YTQsNC50LvQvtCy0LXigKYiCisKKyM6IGdpdC1ndWkuc2g6MTYzOQorbXNnaWQgIkNhbGxpbmcgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgItCa0YPQutCw0YLQsCDigJ5wcmVwYXJlLWNvbW1pdC1tc2figJwg0YHQtSDQuNC30L/RitC70L3Rj9Cy0LAg0LIg0LzQvtC80LXQvdGC0LDigKYiCisKKyM6IGdpdC1ndWkuc2g6MTY1NgorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+INC1INC+0YLRhdCy0YrRgNC70LXQvdC+INC+0YIg0LrRg9C60LDRgtCwIOKAnnByZXBhcmUtY29tbWl0LW1zZ+KAnC4iCisKKyM6IGdpdC1ndWkuc2g6MTgxNCBsaWIvYnJvd3Nlci50Y2w6MjUyCittc2dpZCAiUmVhZHkuIgorbXNnc3RyICLQk9C+0YLQvtCy0L4uIgorCisjOiBnaXQtZ3VpLnNoOjE5NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRGlzcGxheSBsaW1pdCAoZ3VpLm1heGZpbGVzZGlzcGxheWVkID0gJXMpIHJlYWNoZWQsIG5vdCBzaG93aW5nIGFsbCAlcyBmaWxlcy4iCittc2dzdHIgIiIKKyLQlNC+0YHRgtC40LPQvdCw0YIg0LUg0LzQsNC60YHQuNC80LDQu9C90LjRj9GCINCx0YDQvtC5INGE0LDQudC70L7QstC1INC30LAg0L/QvtC60LDQt9Cy0LDQvdC1IChndWkubWF4ZmlsZXNkaXNwbGF5ZWQgPSAiCisiJXMpLiDQpNCw0LnQu9C+0LLQtdGC0LUg0YHQsCDQvtCx0YnQviAlcy4iCisKKyM6IGdpdC1ndWkuc2g6MjEwMQorbXNnaWQgIlVubW9kaWZpZWQiCittc2dzdHIgItCd0LXQv9GA0L7QvNC10L3QtdC9IgorCisjOiBnaXQtZ3VpLnNoOjIxMDMKK21zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90LXQvSwg0L3QviDQvdC1INC1INCyINC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtZ3VpLnNoOjIxMDQgZ2l0LWd1aS5zaDoyMTE2Cittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgItCSINC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyMTA1IGdpdC1ndWkuc2g6MjExNworbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICLQp9Cw0YHRgtC4INGB0LAg0LIg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjIxMDYgZ2l0LWd1aS5zaDoyMTE4Cittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCittc2dzdHIgItCSINC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSwg0L3QviDQu9C40L/RgdCy0LAiCisKKyM6IGdpdC1ndWkuc2g6MjEwOAorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICLQktC40LTRitGCINC90LAg0YTQsNC50LvQsCDQtSDRgdC80LXQvdC10L0sINC90L4g0L3QtSDQtSDQsiDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0LWd1aS5zaDoyMTA5IGdpdC1ndWkuc2g6MjExMAorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBvbGQgdHlwZSBzdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAi0JLQuNC00YrRgiDQvdCwINGE0LDQudC70LAg0LUg0YHQvNC10L3QtdC9LCDQvdC+INCyINC40L3QtNC10LrRgdCwINC1INCy0YHQtSDQvtGJ0LUg0YHRgtCw0YDQuNGP0YIiCisKKyM6IGdpdC1ndWkuc2g6MjExMQorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCittc2dzdHIgItCS0LjQtNGK0YIg0L3QsCDRhNCw0LnQu9CwINC1INGB0LzQtdC90LXQvSDQuCDQtSDQsiDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0LWd1aS5zaDoyMTEyCittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZSBzdGFnZWQsIG1vZGlmaWNhdGlvbiBub3Qgc3RhZ2VkIgorbXNnc3RyICLQktC40LTRitGCINC90LAg0YTQsNC50LvQsCDQtSDRgdC80LXQvdC10L0sINC90L4g0L/RgNC+0LzRj9C90LDRgtCwINC90LUg0LUg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGdpdC1ndWkuc2g6MjExMworbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBmaWxlIG1pc3NpbmciCittc2dzdHIgItCS0LjQtNGK0YIg0L3QsCDRhNCw0LnQu9CwINC1INGB0LzQtdC90LXQvSwg0YTQsNC50LvRitGCINC70LjQv9GB0LLQsCIKKworIzogZ2l0LWd1aS5zaDoyMTE1Cittc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICLQndC10YHQu9C10LTQtdC9IgorCisjOiBnaXQtZ3VpLnNoOjIxMjAKK21zZ2lkICJNaXNzaW5nIgorbXNnc3RyICLQm9C40L/RgdCy0LDRiSIKKworIzogZ2l0LWd1aS5zaDoyMTIxCittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgorbXNnc3RyICLQkiDQuNC90LTQtdC60YHQsCDQt9CwINC40LfRgtGA0LjQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyMTIyCittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgorbXNnc3RyICLQkiDQuNC90LTQtdC60YHQsCDQt9CwINC40LfRgtGA0LjQstCw0L3QtSwg0L3QviDQvtGJ0LUg0LPQviDQuNC80LAiCisKKyM6IGdpdC1ndWkuc2g6MjEyNCBnaXQtZ3VpLnNoOjIxMjUgZ2l0LWd1aS5zaDoyMTI2IGdpdC1ndWkuc2g6MjEyNworIzogZ2l0LWd1aS5zaDoyMTI4IGdpdC1ndWkuc2g6MjEyOQorbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgItCY0LfQuNGB0LrQstCwINC60L7RgNC40LPQuNGA0LDQvdC1INC/0YDQuCDRgdC70LjQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyMTY0Cittc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAi0KHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCDigJ5naXRr4oCc4oCmLCDQuNC30YfQsNC60LDQudGC0LXigKYiCisKKyM6IGdpdC1ndWkuc2g6MjE3NgorbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgorbXNnc3RyICLQmtC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0a+KAnCDQu9C40L/RgdCy0LAg0LIg0L/RitGC0LjRidCw0YLQsCwg0L7Qv9GA0LXQtNC10LvQtdC90Lgg0L7RgiDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAgUEFUSC4iCisKKyM6IGdpdC1ndWkuc2g6MjIzNQorbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgorbXNnc3RyICIiCisi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBndWnigJwg0LvQuNC/0YHQstCwINCyINC/0YrRgtC40YnQsNGC0LAsINC+0L/RgNC10LTQtdC70LXQvdC4INC+0YIg0L/RgNC+0LzQtdC90LvQuNCy0LDRgtCwIFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjI2NTQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MQorbXNnaWQgIlJlcG9zaXRvcnkiCittc2dzdHIgItCl0YDQsNC90LjQu9C40YnQtSIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAi0KDQtdC00LDQutGC0LjRgNCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyNjU3IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjcKK21zZ2lkICJCcmFuY2giCittc2dzdHIgItCa0LvQvtC9IgorCisjOiBnaXQtZ3VpLnNoOjI2NjAgbGliL2Nob29zZV9yZXYudGNsOjU1NAorbXNnaWQgIkNvbW1pdEBAbm91biIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyNjYzIGxpYi9tZXJnZS50Y2w6MTIzIGxpYi9tZXJnZS50Y2w6MTUyIGxpYi9tZXJnZS50Y2w6MTcwCittc2dpZCAiTWVyZ2UiCittc2dzdHIgItCh0LvQuNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjI2NjQgbGliL2Nob29zZV9yZXYudGNsOjU2MworbXNnaWQgIlJlbW90ZSIKK21zZ3N0ciAi0J7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBnaXQtZ3VpLnNoOjI2NjcKK21zZ2lkICJUb29scyIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LgiCisKKyM6IGdpdC1ndWkuc2g6MjY3NgorbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgorbXNnc3RyICLQoNCw0LfQs9C70LXQttC00LDQvdC1INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC60L7Qv9C40LUiCisKKyM6IGdpdC1ndWkuc2g6MjY4MgorbXNnaWQgIkdpdCBCYXNoIgorbXNnc3RyICJCYXNoINC30LAgR2l0IgorCisjOiBnaXQtZ3VpLnNoOjI2OTIKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAi0KDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDQsiDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSIKKworIzogZ2l0LWd1aS5zaDoyNjk2Cittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKK21zZ3N0ciAi0KDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINGC0LXQutGD0YnQuNGPINC60LvQvtC94oCmIgorCisjOiBnaXQtZ3VpLnNoOjI3MDEKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y8g0L3QsCDQuNGB0YLQvtGA0LjRj9GC0LAg0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSIKKworIzogZ2l0LWd1aS5zaDoyNzA1Cittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKK21zZ3N0ciAi0JLQuNC30YPQsNC70LjQt9Cw0YbQuNGPINC90LAg0LjRgdGC0L7RgNC40Y/RgtCwINC90LAg0LLRgdC40YfQutC4INC60LvQvtC90L7QstC1IgorCisjOiBnaXQtZ3VpLnNoOjI3MTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKK21zZ3N0ciAi0KDQsNC30LPQu9C10LbQtNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSDQsiAlcyIKKworIzogZ2l0LWd1aS5zaDoyNzE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKK21zZ3N0ciAi0JLQuNC30YPQsNC70LjQt9Cw0YbQuNGPINC90LAg0LjRgdGC0L7RgNC40Y/RgtCwINC90LAgJXMiCisKKyM6IGdpdC1ndWkuc2g6MjcxOSBsaWIvZGF0YWJhc2UudGNsOjQwIGxpYi9kYXRhYmFzZS50Y2w6NjYKK21zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgorbXNnc3RyICLQodGC0LDRgtC40YHRgtC40LrQsCDQvdCwINCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90LgiCisKKyM6IGdpdC1ndWkuc2g6MjcyMiBsaWIvZGF0YWJhc2UudGNsOjMzCittc2dpZCAiQ29tcHJlc3MgRGF0YWJhc2UiCittc2dzdHIgItCa0L7QvNC/0YDQtdGB0LjRgNCw0L3QtSDQvdCwINCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90LgiCisKKyM6IGdpdC1ndWkuc2g6MjcyNQorbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINCx0LDQt9Cw0YLQsCDQvtGCINC00LDQvdC90LgiCisKKyM6IGdpdC1ndWkuc2g6MjczMiBnaXQtZ3VpLnNoOjI3MzYgZ2l0LWd1aS5zaDoyNzQwIGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC40LrQvtC90LAg0L3QsCDRgNCw0LHQvtGC0L3QuNGPINC/0LvQvtGCIgorCisjOiBnaXQtZ3VpLnNoOjI3NDggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyMDEKK21zZ2lkICJRdWl0IgorbXNnc3RyICLQodC/0LjRgNCw0L3QtSDQvdCwINC/0YDQvtCz0YDQsNC80LDRgtCwIgorCisjOiBnaXQtZ3VpLnNoOjI3NTYKK21zZ2lkICJVbmRvIgorbXNnc3RyICLQntGC0LzRj9C90LAiCisKKyM6IGdpdC1ndWkuc2g6Mjc1OQorbXNnaWQgIlJlZG8iCittc2dzdHIgItCf0L7QstGC0L7RgNC10L3QuNC1IgorCisjOiBnaXQtZ3VpLnNoOjI3NjMgZ2l0LWd1aS5zaDozMzY4Cittc2dpZCAiQ3V0IgorbXNnc3RyICLQntGC0YDRj9C30LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6Mjc2NiBnaXQtZ3VpLnNoOjMzNzEgZ2l0LWd1aS5zaDozNDQ1IGdpdC1ndWkuc2g6MzUzMAorIzogbGliL2NvbnNvbGUudGNsOjY5Cittc2dpZCAiQ29weSIKK21zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyNzY5IGdpdC1ndWkuc2g6MzM3NAorbXNnaWQgIlBhc3RlIgorbXNnc3RyICLQn9C+0YHRgtCw0LLRj9C90LUiCisKKyM6IGdpdC1ndWkuc2g6Mjc3MiBnaXQtZ3VpLnNoOjMzNzcgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOQorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjI4Cittc2dpZCAiRGVsZXRlIgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6Mjc3NiBnaXQtZ3VpLnNoOjMzODEgZ2l0LWd1aS5zaDozNTM0IGxpYi9jb25zb2xlLnRjbDo3MQorbXNnaWQgIlNlbGVjdCBBbGwiCittc2dzdHIgItCY0LfQsdC40YDQsNC90LUg0L3QsCDQstGB0LjRh9C60L4iCisKKyM6IGdpdC1ndWkuc2g6Mjc4NQorbXNnaWQgIkNyZWF0ZS4uLiIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC14oCmIgorCisjOiBnaXQtZ3VpLnNoOjI3OTEKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAi0JjQt9GC0LXQs9C70Y/QvdC14oCmIgorCisjOiBnaXQtZ3VpLnNoOjI3OTcKK21zZ2lkICJSZW5hbWUuLi4iCittc2dzdHIgItCf0YDQtdC40LzQtdC90YPQstCw0L3QteKApiIKKworIzogZ2l0LWd1aS5zaDoyODAyCittc2dpZCAiRGVsZXRlLi4uIgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LXigKYiCisKKyM6IGdpdC1ndWkuc2g6MjgwNworbXNnaWQgIlJlc2V0Li4uIgorbXNnc3RyICLQntGC0LzRj9C90LAg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LXigKYiCisKKyM6IGdpdC1ndWkuc2g6MjgxNworbXNnaWQgIkRvbmUiCittc2dzdHIgItCT0L7RgtC+0LLQviIKKworIzogZ2l0LWd1aS5zaDoyODE5Cittc2dpZCAiQ29tbWl0QEB2ZXJiIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjI4MjggZ2l0LWd1aS5zaDozMzA5Cittc2dpZCAiTmV3IENvbW1pdCIKK21zZ3N0ciAi0J3QvtCy0L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyODM2IGdpdC1ndWkuc2g6MzMxNgorbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICLQn9C+0L/RgNCw0LLRj9C90LUg0L3QsCDQv9C+0YHQu9C10LTQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjI4NDYgZ2l0LWd1aS5zaDozMjcwIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTAxCittc2dpZCAiUmVzY2FuIgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyODUyCittc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgorbXNnc3RyICLQmtGK0Lwg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjI4NTgKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAi0JLRgdC40YfQutC4INC/0YDQvtC80LXQvdC10L3QuCDRhNCw0LnQu9C+0LLQtSDQutGK0Lwg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjI4NjQKK21zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgorbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L7RgiDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6Mjg3MCBsaWIvaW5kZXgudGNsOjQ0MgorbXNnaWQgIlJldmVydCBDaGFuZ2VzIgorbXNnc3RyICLQktGA0YrRidCw0L3QtSDQvdCwINC+0YDQuNCz0LjQvdCw0LvQsCIKKworIzogZ2l0LWd1aS5zaDoyODc4IGdpdC1ndWkuc2g6MzU4MSBnaXQtZ3VpLnNoOjM2MTIKK21zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKK21zZ3N0ciAi0J/Qvi3QvNCw0LvQutC+INC60L7QvdGC0LXQutGB0YIiCisKKyM6IGdpdC1ndWkuc2g6Mjg4MiBnaXQtZ3VpLnNoOjM1ODUgZ2l0LWd1aS5zaDozNjE2Cittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgItCf0L7QstC10YfQtSDQutC+0L3RgtC10LrRgdGCIgorCisjOiBnaXQtZ3VpLnNoOjI4ODkgZ2l0LWd1aS5zaDozMjgzIGdpdC1ndWkuc2g6MzM5MgorbXNnaWQgIlNpZ24gT2ZmIgorbXNnc3RyICLQn9C+0LTQv9C40YHQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDoyOTA1Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgItCb0L7QutCw0LvQvdC+INGB0LvQuNCy0LDQvdC14oCmIgorCisjOiBnaXQtZ3VpLnNoOjI5MTAKK21zZ2lkICJBYm9ydCBNZXJnZS4uLiIKK21zZ3N0ciAi0J/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YHQu9C40LLQsNC90LXigKYiCisKKyM6IGdpdC1ndWkuc2g6MjkyMiBnaXQtZ3VpLnNoOjI5NTAKK21zZ2lkICJBZGQuLi4iCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LXigKYiCisKKyM6IGdpdC1ndWkuc2g6MjkyNgorbXNnaWQgIlB1c2guLi4iCittc2dzdHIgItCY0LfQsdGD0YLQstCw0L3QteKApiIKKworIzogZ2l0LWd1aS5zaDoyOTMwCittc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LrQu9C+0L3igKYiCisKKyM6IGdpdC1ndWkuc2g6Mjk0MCBnaXQtZ3VpLnNoOjM1NjMKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICLQntC/0YbQuNC44oCmIgorCisjOiBnaXQtZ3VpLnNoOjI5NTEKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgItCf0YDQtdC80LDRhdCy0LDQvdC14oCmIgorCisjOiBnaXQtZ3VpLnNoOjI5NjAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NQorbXNnaWQgIkhlbHAiCittc2dzdHIgItCf0L7QvNC+0YkiCisKKyM6IGdpdC1ndWkuc2g6Mjk2NCBnaXQtZ3VpLnNoOjI5NjggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OCBsaWIvYWJvdXQudGNsOjE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvdXQgJXMiCittc2dzdHIgItCe0YLQvdC+0YHQvdC+ICVzIgorCisjOiBnaXQtZ3VpLnNoOjI5OTIKK21zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKK21zZ3N0ciAi0JTQvtC60YPQvNC10L3RgtCw0YbQuNGPINCyINCY0L3RgtC10YDQvdC10YIiCisKKyM6IGdpdC1ndWkuc2g6Mjk5NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjEKK21zZ2lkICJTaG93IFNTSCBLZXkiCittc2dzdHIgItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC60LvRjtGH0LAg0LfQsCBTU0giCisKKyM6IGdpdC1ndWkuc2g6MzAxNCBnaXQtZ3VpLnNoOjMxNDYKK21zZ2lkICJVc2FnZSIKK21zZ3N0ciAi0KPQv9C+0YLRgNC10LHQsCIKKworIzogZ2l0LWd1aS5zaDozMDk1IGxpYi9ibGFtZS50Y2w6NTczCittc2dpZCAiRXJyb3IiCittc2dzdHIgItCT0YDQtdGI0LrQsCIKKworIzogZ2l0LWd1aS5zaDozMTI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyLQpNCQ0KLQkNCb0J3QkCDQk9Cg0JXQqNCa0JA6INC/0YrRgtGP0YIgJXMg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgjog0YLQsNC60YrQsiDRhNCw0LnQuyDQuNC70Lgg0LTQuNGA0LXQutGC0L7RgNC40Y8gIgorItC90Y/QvNCwIgorCisjOiBnaXQtZ3VpLnNoOjMxNTkKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgItCi0LXQutGD0Ykg0LrQu9C+0L06IgorCisjOiBnaXQtZ3VpLnNoOjMxODUKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICLQn9GA0L7QvNC10L3QuCDQsiDQuNC90LTQtdC60YHQsCAo0LfQsCDQv9C+0LTQsNCy0LDQvdC1KSIKKworIzogZ2l0LWd1aS5zaDozMjA1Cittc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90Lgg0LjQt9Cy0YrQvSDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0LWd1aS5zaDozMjc2Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAi0JjQvdC00LXQutGB0YrRgiDQtSDQv9GA0L7QvNC10L3QtdC9IgorCisjOiBnaXQtZ3VpLnNoOjMyOTUgbGliL3RyYW5zcG9ydC50Y2w6MTM3IGxpYi90cmFuc3BvcnQudGNsOjIyOQorbXNnaWQgIlB1c2giCittc2dzdHIgItCY0LfRgtC70LDRgdC60LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6MzMzMAorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLQn9GK0YDQstC+0L3QsNGH0LDQu9C90L4g0YHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1OiIKKworIzogZ2l0LWd1aS5zaDozMzMxCittc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgItCf0L7Qv9GA0LDQstC10L3QviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LU6IgorCisjOiBnaXQtZ3VpLnNoOjMzMzIKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLQn9C+0L/RgNCw0LLQtdC90L4g0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtToiCisKKyM6IGdpdC1ndWkuc2g6MzMzMworbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLQn9C+0L/RgNCw0LLQtdC90L4g0YHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1INGB0YrRgSDRgdC70LjQstCw0L3QtToiCisKKyM6IGdpdC1ndWkuc2g6MzMzNAorbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1INGB0YrRgSDRgdC70LjQstCw0L3QtToiCisKKyM6IGdpdC1ndWkuc2g6MzMzNQorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1OiIKKworIzogZ2l0LWd1aS5zaDozMzg0IGdpdC1ndWkuc2g6MzUzOCBsaWIvY29uc29sZS50Y2w6NzMKK21zZ2lkICJDb3B5IEFsbCIKK21zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQviIKKworIzogZ2l0LWd1aS5zaDozNDA4IGxpYi9ibGFtZS50Y2w6MTA1Cittc2dpZCAiRmlsZToiCittc2dzdHIgItCk0LDQudC7OiIKKworIzogZ2l0LWd1aS5zaDozNTI2Cittc2dpZCAiUmVmcmVzaCIKK21zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6MzU0NworbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAi0J/Qvi3QtdC00YrRgCDRiNGA0LjRhNGCIgorCisjOiBnaXQtZ3VpLnNoOjM1NTEKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgItCf0L4t0LTRgNC10LHQtdC9INGI0YDQuNGE0YIiCisKKyM6IGdpdC1ndWkuc2g6MzU1OSBsaWIvYmxhbWUudGNsOjI5NAorbXNnaWQgIkVuY29kaW5nIgorbXNnc3RyICLQmtC+0LTQuNGA0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjM1NzAKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgItCf0YDQuNC70LDQs9Cw0L3QtS/QstGA0YrRidCw0L3QtSDQvdCwINC/0LDRgNGH0LUiCisKKyM6IGdpdC1ndWkuc2g6MzU3NQorbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1L9Cy0YDRitGJ0LDQvdC1INC90LAg0YDQtdC0IgorCisjOiBnaXQtZ3VpLnNoOjM1OTQKK21zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKK21zZ3N0ciAi0JjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjM1OTkKK21zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCittc2dzdHIgItCS0LXRgNGB0LjRjyDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGdpdC1ndWkuc2g6MzYwMworbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICLQm9C+0LrQsNC70L3QsCDQstC10YDRgdC40Y8iCisKKyM6IGdpdC1ndWkuc2g6MzYwNworbXNnaWQgIlJldmVydCBUbyBCYXNlIgorbXNnc3RyICLQktGA0YrRidCw0L3QtSDQutGK0Lwg0YDQvtC00LjRgtC10LvRgdC60LDRgtCwINCy0LXRgNGB0LjRjyIKKworIzogZ2l0LWd1aS5zaDozNjI1Cittc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAi0JLQuNC30YPQsNC70LjQt9C40YDQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0LIg0L/QvtC00LzQvtC00YPQu9CwIgorCisjOiBnaXQtZ3VpLnNoOjM2MjkKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y8g0L3QsCDQuNGB0YLQvtGA0LjRj9GC0LAg0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QvSDQsiDQuNGB0YLQvtGA0LjRj9GC0LAg0LfQsCDQv9C+0LTQvNC+0LTRg9C70LAiCisKKyM6IGdpdC1ndWkuc2g6MzYzMworbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAi0JLQuNC30YPQsNC70LjQt9Cw0YbQuNGPINC90LAg0LjRgdGC0L7RgNC40Y/RgtCwINC90LAg0LLRgdC40YfQutC4INC60LvQvtC90Lgg0LIg0LjRgdGC0L7RgNC40Y/RgtCwINC30LAg0L/QvtC00LzQvtC00YPQu9CwIgorCisjOiBnaXQtZ3VpLnNoOjM2MzgKK21zZ2lkICJTdGFydCBnaXQgZ3VpIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgItCh0YLQsNGA0YLQuNGA0LDQvdC1INC90LAg4oCeZ2l0IGd1aeKAnCDQt9CwINC/0L7QtNC80L7QtNGD0LvQsCIKKworIzogZ2l0LWd1aS5zaDozNjczCittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDQv9Cw0YDRh9C10YLQviDQvtGCINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBnaXQtZ3VpLnNoOjM2NzUKK21zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgorbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDRgNC10LTQvtCy0LXRgtC1INC+0YIg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IGdpdC1ndWkuc2g6MzY3NworbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAi0JjQt9Cy0LDQttC00LDQvdC1INC90LAg0YDQtdC00LAg0L7RgiDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogZ2l0LWd1aS5zaDozNjgwCittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0L/QsNGA0YfQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXQtZ3VpLnNoOjM2ODIKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0YDQtdC00L7QstC10YLQtSDQt9CwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdC1ndWkuc2g6MzY4NAorbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LXQtNCwINC30LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0LWd1aS5zaDozNzA5Cittc2dpZCAiSW5pdGlhbGl6aW5nLi4uIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC14oCmIgorCisjOiBnaXQtZ3VpLnNoOjM4NTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisi0JLRitC30LzQvtC20L3QviDQtSDQtNCwINC40LzQsCDQv9GA0L7QsdC70LXQvCDRgdGK0YEg0YHRgNC10LTQsNGC0LAuXG4iCisiXG4iCisi0J3QsNC5LdCy0LXRgNC+0Y/RgtC90L4g0YHQu9C10LTQvdC40YLQtSDQv9GA0L7QvNC10L3Qu9C40LLQuCDQvdGP0LzQsCDQtNCwINCx0YrQtNCw0YJcbiIKKyLQstC30LXRgtC4INC/0L7QtCDQstC90LjQvNCw0L3QuNC1INC+0YIg0L/QvtC00L/RgNC+0YbQtdGB0LjRgtC1INC90LAgR2l0XG4iCisi0L7RgiAlczpcbiIKKyJcbiIKKworIzogZ2l0LWd1aS5zaDozODgxCittc2dpZCAiIgorIlxuIgorIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKKyJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCittc2dzdHIgIiIKKyJcbiIKKyLQotC+0LLQsCDQtSDQv9C+0LfQvdCw0YIg0L/RgNC+0LHQu9C10Lwg0Lgg0YHQtSDQtNGK0LvQttC4INC90LBcbiIKKyLQstC10YDRgdC40Y/RgtCwINC90LAgVGNsINCy0LrQu9GO0YfQtdC90LAg0LIgQ3lnd2luLiIKKworIzogZ2l0LWd1aS5zaDozODg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkEgZ29vZCByZXBsYWNlbWVudCBmb3IgJXNcbiIKKyJpcyBwbGFjaW5nIHZhbHVlcyBmb3IgdGhlIHVzZXIubmFtZSBhbmRcbiIKKyJ1c2VyLmVtYWlsIHNldHRpbmdzIGludG8geW91ciBwZXJzb25hbFxuIgorIn4vLmdpdGNvbmZpZyBmaWxlLlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisi0JTQvtCx0YrRgCDQt9Cw0LzQtdGB0YLQuNGC0LXQuyDQvdCwIOKAniVz4oCcXG4iCisi0LUg0LTQsCDQv9C+0YHRgtCw0LLQuNGC0LUg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDigJ51c2VyLm5hbWXigJwg0LhcbiIKKyLigJ51c2VyLmVtYWls4oCcINCyINC70LjRh9C90LjRjyDRgdC4INGE0LDQudC7IOKAnn4vLmdpdGNvbmZpZ+KAnC5cbiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Cittc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAi0KLQsNC30Lgg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICLQm9C40L/RgdCy0LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90Lgg0L3QsNGB0YLRgNC+0LnQutC4INC90LAg0L/RgNC+0LLQtdGA0LrQsNGC0LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKK21zZ3N0ciAi0J/QvtC70LfQstCw0L3QtSDQvdCwINGA0LXRh9C90LjQuiDQt9CwINC10LfQuNC6IOKAniVz4oCcLiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjczCittc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQsNGC0LAg0LfQsCDQv9GA0LDQstC+0L/QuNGBINC00LDQttC1INC90LUg0YHRgtCw0YDRgtC40YDQsCDRg9GB0L/QtdGI0L3Qvi4iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAorbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICLQndC10L/QvtC30L3QsNGC0LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKK21zZ2lkICJObyBTdWdnZXN0aW9ucyIKK21zZ3N0ciAi0J3Rj9C80LAg0L/RgNC10LTQu9C+0LbQtdC90LjRjyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAorbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAi0J3QtdC+0YfQsNC60LLQsNC9INC60YDQsNC5INC90LAg0YTQsNC50Lsg0L7RgiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LDQstC+0L/QuNGB0LAiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKK21zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKK21zZ3N0ciAi0JPRgNC10YjQutCwINCyINC/0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC/0YDQsNCy0L7Qv9C40YHQsCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjIwCittc2dpZCAiQWRkIFJlbW90ZSIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI1Cittc2dpZCAiQWRkIE5ldyBSZW1vdGUiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozMCBsaWIvdG9vbHNfZGxnLnRjbDozNworbXNnaWQgIkFkZCIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjM0IGxpYi9icm93c2VyLnRjbDoyOTIgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzAKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE0MSBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzIgbGliL2Nob29zZV9mb250LnRjbDo0NQorIzogbGliL29wdGlvbi50Y2w6MTI3IGxpYi90b29sc19kbGcudGNsOjQxIGxpYi90b29sc19kbGcudGNsOjIwMgorIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQ1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDMKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNyBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzQKKyM6IGxpYi9tZXJnZS50Y2w6MTc0Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICLQntGC0LrQsNC30LLQsNC90LUiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozOQorbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgorbXNnc3RyICLQlNCw0L3QvdC4INC30LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjQxIGxpYi90b29sc19kbGcudGNsOjUxIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0NAorbXNnaWQgIk5hbWU6IgorbXNnc3RyICLQmNC80LU6IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgItCc0LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LU6IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjAKK21zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKK21zZ3N0ciAi0KHQu9C10LTQstCw0YnQviDQtNC10LnRgdGC0LLQuNC1IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjMKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAi0J3QtdC30LDQsdCw0LLQvdC+INC00L7RgdGC0LDQstGP0L3QtSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjY5Cittc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKK21zZ3N0ciAi0JjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0Lgg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjc1Cittc2dpZCAiRG8gTm90aGluZyBFbHNlIE5vdyIKK21zZ3N0ciAi0JTQsCDQvdC1INGB0LUg0L/RgNCw0LLQuCDQvdC40YnQviIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCittc2dzdHIgItCX0LDQtNCw0LnRgtC1INC40LzQtSDQt9CwINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTEzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCittc2dzdHIgItCe0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQutCw0LfQstCwIOKAniVz4oCcLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCDQvtGCINCw0LTRgNC10YEg4oCeJXPigJwuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMyIGxpYi90cmFuc3BvcnQudGNsOjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmZXRjaCAlcyIKK21zZ3N0ciAi0LTQvtGB0YLQsNCy0Y/QvdC1INC90LAg4oCeJXPigJwiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyB0aGUgJXMiCittc2dzdHIgItCU0L7RgdGC0LDQstGP0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAi0KXRgNCw0L3QuNC70LjRidC10YLQviDRgSDQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC+LiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MiBsaWIvdHJhbnNwb3J0LnRjbDo1NCBsaWIvdHJhbnNwb3J0LnRjbDo5MgorIzogbGliL3RyYW5zcG9ydC50Y2w6MTEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicHVzaCAlcyIKK21zZ3N0ciAi0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCAo0YEg0LDQtNGA0LXRgSDigJ4lc+KAnCkiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICLQodGC0LDRgNGC0LjRgNCw0L3QteKApiIKKworIzogbGliL2Jyb3dzZXIudGNsOjI3Cittc2dpZCAiRmlsZSBCcm93c2VyIgorbXNnc3RyICLQpNCw0LnQu9C+0LIg0LHRgNCw0YPQt9GK0YAiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxMzIgbGliL2Jyb3dzZXIudGNsOjE0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgJXMuLi4iCittc2dzdHIgItCX0LDRgNC10LbQtNCw0L3QtSDQvdCwIOKAniVz4oCc4oCmIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTkzCittc2dpZCAiW1VwIFRvIFBhcmVudF0iCittc2dzdHIgIlvQmtGK0Lwg0YDQvtC00LjRgtC10LvRj10iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNzUgbGliL2Jyb3dzZXIudGNsOjI4MgorbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCittc2dzdHIgItCg0LDQt9Cz0LvQtdC20LTQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0LIg0LrQu9C+0L3QsCIKKworIzogbGliL2Jyb3dzZXIudGNsOjI4OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3NAorbXNnaWQgIkJyb3dzZSIKK21zZ3N0ciAi0KDQsNC30LPQu9C10LbQtNCw0L3QtSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI5NyBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNSBsaWIvdG9vbHNfZGxnLnRjbDozMjEKK21zZ2lkICJSZXZpc2lvbiIKK21zZ3N0ciAi0JLQtdGA0YHQuNGPIgorCisjOiBsaWIvdG9vbHMudGNsOjc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVubmluZyAlcyByZXF1aXJlcyBhIHNlbGVjdGVkIGZpbGUuIgorbXNnc3RyICLQl9CwINC40LfQv9GK0LvQvdC10L3QuNC10YLQviDQvdCwIOKAniVz4oCcINGC0YDRj9Cx0LLQsCDQtNCwINC40LfQsdC10YDQtdGC0LUg0YTQsNC50LsuIgorCisjOiBsaWIvdG9vbHMudGNsOjkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlMSRzIG9uIGZpbGUgXCIlMiRzXCI/IgorbXNnc3RyICLQodC40LPRg9GA0L3QuCDQu9C4INGB0YLQtSwg0YfQtSDQuNGB0LrQsNGC0LUg0LTQsCDQuNC30L/RitC70L3QuNGC0LUg4oCeJTEkc+KAnCDQstGK0YDRhdGDINGE0LDQudC70LAg4oCeJTIkc+KAnD8iCisKKyM6IGxpYi90b29scy50Y2w6OTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKK21zZ3N0ciAi0KHQuNCz0YPRgNC90Lgg0LvQuCDRgdGC0LUsINGH0LUg0LjRgdC60LDRgtC1INC00LAg0LjQt9C/0YrQu9C90LjRgtC1IOKAniVz4oCcPyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sOiAlcyIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LA6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjExNworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmc6ICVzIgorbXNnc3RyICLQmNC30L/RitC70L3QtdC90LjQtTogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwINC30LDQstGK0YDRiNC4INGD0YHQv9C10YjQvdC+OiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGZhaWxlZDogJXMiCittc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDQstGK0YDQvdCwINCz0YDQtdGI0LrQsDogJXMiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE2IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIxCittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICLQmtC70L7QvSDQt9CwINC40LfRgtC10LPQu9GP0L3QtSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjYKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAi0JjQt9GC0LXQs9C70Y/QvdC1IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvb3B0aW9uLnRjbDozMTAgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5Cittc2dpZCAiT3B0aW9ucyIKK21zZ3N0ciAi0J7Qv9GG0LjQuCIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjkyCittc2dpZCAiRmV0Y2ggVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICLQmNC30YLQtdCz0LvRj9C90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0L7RgiDRgdC70LXQtNC10L3QuNGPINC60LvQvtC9IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NworbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC+0YIg0LvQvtC60LDQu9C90LjRjyDQutC70L7QvSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCittc2dzdHIgItCU0L7RgdGC0LDQstGP0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQvtGCIOKAniVz4oCcIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAorIywgdGNsLWZvcm1hdAorbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKK21zZ3N0ciAi0L7QutCw0YHRgtGA0Y/QvdC1INC90LAg0YHQu9C10LTRj9GJ0LjRgtC1INC60LvQvtC90Lgg0LrRitC8IOKAniVz4oCcIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgorbXNnc3RyICLQntC60LDRgdGC0YDRj9C90LUg0L3QsCDRgdC70LXQtNGP0YnQuNGC0LUg0LrQu9C+0L3QuCDQvdCwINC40LfRgtGA0LjRgtC40YLQtSDQutC70L7QvdC4INC+0YIg4oCeJXPigJwiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjI1Cittc2dpZCAiZmV0Y2ggYWxsIHJlbW90ZXMiCittc2dzdHIgItC00L7RgdGC0LDQstGP0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQvtGC0LTQsNC70LXRh9C10L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjI2Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAi0JTQvtGB0YLQsNCy0Y/QvdC1INC90LAg0L3QvtCy0LjRgtC1INC/0YDQvtC80LXQvdC4INC+0YIg0LLRgdC40YfQutC4INC+0YLQtNCw0LvQtdGH0LXQvdC4INGF0YDQsNC90LjQu9C40YnQsCIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NDAKK21zZ2lkICJyZW1vdGUgcHJ1bmUgYWxsIHJlbW90ZXMiCittc2dzdHIgItC+0LrQsNGB0YLRgNGP0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDRgdC70LXQtNGP0YnQuCDQutC70L7QvdC4IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo0MQorbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tIGFsbCByZW1vdGVzIgorbXNnc3RyICIiCisi0J7QutCw0YHRgtGA0Y/QvdC1INC90LAg0LLRgdC40YfQutC4INC60LvQvtC90LgsINC60L7QuNGC0L4g0YHQu9C10LTRj9GCINC40LfRgtGA0LjRgtC4INC60LvQvtC90Lgg0L7RgiDQvtGC0LTQsNC70LXRh9C10L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgorbXNnc3RyICLQmNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INC60YrQvCDigJ4lc+KAnCIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCittc2dzdHIgItCY0LfRgtC70LDRgdC60LLQsNC90LUg0L3QsCDQstGB0LjRh9C60L4g0LrRitC8IOKAniVz4oCcIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgorbXNnc3RyICLQmNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAgJXMg4oCeJXPigJwg0LrRitC8IOKAniVz4oCcIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzIKK21zZ2lkICJQdXNoIEJyYW5jaGVzIgorbXNnc3RyICLQmtC70L7QvdC4INC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTQ3Cittc2dpZCAiU291cmNlIEJyYW5jaGVzIgorbXNnc3RyICLQmtC70L7QvdC4LdC40LfRgtC+0YfQvdC40YbQuCIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTYyCittc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKK21zZ3N0ciAi0KbQtdC70LXQstC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTY1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTEKK21zZ2lkICJSZW1vdGU6IgorbXNnc3RyICLQntGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LU6IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxODcgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo3MgorbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCittc2dzdHIgItCf0YDQvtC40LfQstC+0LvQvdC+INC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LU6IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyMDUKK21zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L/RgNC4INC/0YDQtdC90LDRgdGP0L3QtdGC0L4iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjIwNworbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorbXNnc3RyICIiCisi0JjQt9GA0LjRh9C90L4g0L/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRiSDQutC70L7QvSAo0L3Rj9C60L7QuCDQv9GA0L7QvNC10L3QuCDQvNC+0LbQtSDQtNCwINCx0YrQtNCw0YIgIgorItC30LDQs9GD0LHQtdC90LgpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyMTEKK21zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKK21zZ3N0ciAi0JzQsNC60YHQuNC80LDQu9C90LAg0LrQvtC80L/RgNC10YHQuNGPICjQt9CwINCx0LDQstC90Lgg0LzRgNC10LbQvtCy0Lgg0LLRgNGK0LfQutC4KSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjE1Cittc2dpZCAiSW5jbHVkZSB0YWdzIgorbXNnc3RyICLQktC60LvRjtGH0LLQsNC90LUg0L3QsCDQtdGC0LjQutC10YLQuNGC0LUiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiVz4oCmICUqaSDQvtGCINC+0LHRidC+ICUqaSAlcyAoJTNpJSUpIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMDAKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICLQmNC30YLQu9Cw0YHQutCy0LDQvdC1INC60YrQvCIKKworIzogbGliL3JlbW90ZS50Y2w6MjE4Cittc2dpZCAiUmVtb3ZlIFJlbW90ZSIKK21zZ3N0ciAi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGxpYi9yZW1vdGUudGNsOjIyMworbXNnaWQgIlBydW5lIGZyb20iCittc2dzdHIgItCe0LrQsNGB0YLRgNGP0L3QtSDQvtGCIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMjgKK21zZ2lkICJGZXRjaCBmcm9tIgorbXNnc3RyICLQlNC+0YHRgtCw0LLRj9C90LUg0L7RgiIKKworIzogbGliL3NzaGtleS50Y2w6MzEKK21zZ2lkICJObyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAi0J3QtSDRgdCwINC+0YLQutGA0LjRgtC4INC60LvRjtGH0L7QstC1LiIKKworIzogbGliL3NzaGtleS50Y2w6MzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgorbXNnc3RyICLQntGC0LrRgNC40YIg0LUg0L/Rg9Cx0LvQuNGH0LXQvSDQutC70Y7RhyDQsiDigJ4lc+KAnCIKKworIzogbGliL3NzaGtleS50Y2w6NDAKK21zZ2lkICJHZW5lcmF0ZSBLZXkiCittc2dzdHIgItCT0LXQvdC10YDQuNGA0LDQvdC1INC90LAg0LrQu9GO0YciCisKKyM6IGxpYi9zc2hrZXkudGNsOjU1IGxpYi9jaGVja291dF9vcC50Y2w6MTQ2IGxpYi9jb25zb2xlLnRjbDo4MQorIzogbGliL2RhdGFiYXNlLnRjbDozMAorbXNnaWQgIkNsb3NlIgorbXNnc3RyICLQl9Cw0YLQstCw0YDRj9C90LUiCisKKyM6IGxpYi9zc2hrZXkudGNsOjU4Cittc2dpZCAiQ29weSBUbyBDbGlwYm9hcmQiCittc2dzdHIgItCa0L7Qv9C40YDQsNC90LUg0LrRitC8INGB0LjRgdGC0LXQvNC90LjRjyDQsdGD0YTQtdGAIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3MgorbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgorbXNnc3RyICLQn9GD0LHQu9C40YfQvdC40Y/RgiDQstC4INC60LvRjtGHINC30LAgT3BlblNTSCIKKworIzogbGliL3NzaGtleS50Y2w6ODAKK21zZ2lkICJHZW5lcmF0aW5nLi4uIgorbXNnc3RyICLQk9C10L3QtdGA0LjRgNCw0L3QteKApiIKKworIzogbGliL3NzaGtleS50Y2w6ODYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyLQn9GA0L7Qs9GA0LDQvNCw0YLQsCDigJ5zc2gta2V5Z2Vu4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGC0LDRgNGC0LjRgNCw0L3QsDpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3NzaGtleS50Y2w6MTEzCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LPQtdC90LXRgNC40YDQsNC90LUuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjAKK21zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgorbXNnc3RyICLQk9C10L3QtdGA0LjRgNCw0L3QtdGC0L4g0LfQsNCy0YrRgNGI0Lgg0YPRgdC/0LXRiNC90L4sINCwINC90LUg0YHQsCDQvdCw0LzQtdGA0LXQvdC4INC60LvRjtGH0L7QstC1LiIKKworIzogbGliL3NzaGtleS50Y2w6MTIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgorbXNnc3RyICLQmtC70Y7Rh9GK0YIg0LLQuCDQtSDQsiDigJ4lc+KAnCIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMworbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgItCf0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINC60LvQvtC9IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjgKK21zZ2lkICJSZW5hbWUiCittc2dzdHIgItCf0YDQtdC40LzQtdC90YPQstCw0L3QtSIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM4Cittc2dpZCAiQnJhbmNoOiIKK21zZ3N0ciAi0JrQu9C+0L06IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NDYKK21zZ2lkICJOZXcgTmFtZToiCittc2dzdHIgItCd0L7QstC+INC40LzQtToiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4MQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKK21zZ3N0ciAi0JjQt9Cx0LXRgNC10YLQtSDQutC70L7QvSDQt9CwINC/0YDQtdC40LzQtdC90YPQstCw0L3QtS4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5MiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTU0Cittc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAi0JTQsNC50YLQtSDQuNC80LUg0L3QsCDQutC70L7QvdCwLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwMiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExMiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LfQsCDQuNC80LUg0L3QsCDQutC70L7QvS4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg4oCeJXPigJwuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQxCittc2dpZCAiU2VsZWN0IgorbXNnc3RyICLQmNC30LHQvtGAIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjU1Cittc2dpZCAiRm9udCBGYW1pbHkiCittc2dzdHIgItCo0YDQuNGE0YIiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzYKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgItCg0LDQt9C80LXRgCIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo5MworbXNnaWQgIkZvbnQgRXhhbXBsZSIKK21zZ3N0ciAi0JzQvtGB0YLRgNCwIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwNQorbXNnaWQgIiIKKyJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKKyJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorbXNnc3RyICIiCisi0KLQvtCy0LAg0LUg0L/RgNC40LzQtdGA0LXQvSDRgtC10LrRgdGCLlxuIgorItCQ0LrQviDQstC4INGF0LDRgNC10YHQstCwINC60LDQuiDQuNC30LPQu9C10LbQtNCwLCDQuNC30LHQtdGA0LXRgtC1INGI0YDQuNGE0YLQsC4iCisKKyM6IGxpYi9vcHRpb24udGNsOjExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0LPQu9C+0LHQsNC70L3QviDQutC+0LTQuNGA0LDQvdC1IOKAniVz4oCcIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmVwbyBlbmNvZGluZyAnJXMnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QviDQutC+0LTQuNGA0LDQvdC1IOKAniVz4oCcINC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviIKKworIzogbGliL29wdGlvbi50Y2w6MTE5Cittc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKK21zZ3N0ciAi0KHRgtCw0L3QtNCw0YDRgtC90Lgg0L3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjMKK21zZ2lkICJTYXZlIgorbXNnc3RyICLQl9Cw0L/QsNC30LLQsNC90LUiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIFJlcG9zaXRvcnkiCittc2dzdHIgItCl0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCIKKworIzogbGliL29wdGlvbi50Y2w6MTM0Cittc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKK21zZ3N0ciAi0JPQu9C+0LHQsNC70L3QviAo0LfQsCDQstGB0LjRh9C60Lgg0YXRgNCw0L3QuNC70LjRidCwKSIKKworIzogbGliL29wdGlvbi50Y2w6MTQwCittc2dpZCAiVXNlciBOYW1lIgorbXNnc3RyICLQn9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQuNC80LUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MQorbXNnaWQgIkVtYWlsIEFkZHJlc3MiCittc2dzdHIgItCQ0LTRgNC10YEg0L3QsCDQtS3Qv9C+0YnQsCIKKworIzogbGliL29wdGlvbi50Y2w6MTQzCittc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCittc2dzdHIgItCe0LHQvtCx0YnQsNCy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQv9GA0Lgg0YHQu9C40LLQsNC90LUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NAorbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKK21zZ3N0ciAi0J/QvtC00YDQvtCx0L3QvtGB0YLQuCDQv9GA0Lgg0YHQu9C40LLQsNC90LjRj9GC0LAiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NQorbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YLQsNGC0LjRgdGC0LjQutCwINGB0LvQtdC0INGB0LvQuNCy0LDQvdC40Y/RgtCwIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDYKK21zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKK21zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCittc2dzdHIgItCU0L7QstC10YDQuNC1INCy0YrQsiDQstGA0LXQvNC10YLQviDQvdCwINC/0YDQvtC80Y/QvdCwINC90LAg0YTQsNC50LvQvtCy0LXRgtC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDkKK21zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCittc2dzdHIgItCe0LrQsNGB0YLRgNGP0L3QtSDQvdCwINGB0LvQtdC00Y/RidC40YLQtSDQutC70L7QvdC+0LLQtSDQv9GA0Lgg0LTQvtGB0YLQsNCy0Y/QvdC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKK21zZ3N0ciAi0J3QsNC/0LDRgdCy0LDQvdC1INC90LAg0YHQu9C10LTRj9GJ0LjRgtC1INC60LvQvtC90L7QstC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTEKK21zZ2lkICJVc2UgVGV4dGNvbnYgRm9yIERpZmZzIGFuZCBCbGFtZXMiCittc2dzdHIgIiIKKyLQn9GA0LXQvtCx0YDQsNC30YPQstCw0L3QtSDQvdCwINGC0LXQutGB0YLQsCDRgSDigJ50ZXh0Y29uduKAnCDQv9GA0Lgg0LDQvdC+0YLQuNGA0LDQvdC1INC4INC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C70LjQutC4IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTIKK21zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKK21zZ3N0ciAi0JDQvdC+0YLQuNGA0LDQvdC1INC90LAg0LrQvtC/0LjQtdGC0L4g0YHQsNC80L4g0L/QviDQv9GA0L7QvNC10L3QtdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTMKK21zZ2lkICJNYXhpbXVtIExlbmd0aCBvZiBSZWNlbnQgUmVwb3NpdG9yaWVzIExpc3QiCittc2dzdHIgItCc0LDQutGB0LjQvNCw0LvQvdCwINC00YrQu9C20LjQvdCwINC90LAg0YHQv9C40YHRitC60LAg0YHRitGBINGB0LrQvtGA0L4g0L/QvtC70LfQstCw0L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NAorbXNnaWQgIk1pbmltdW0gTGV0dGVycyBUbyBCbGFtZSBDb3B5IE9uIgorbXNnc3RyICLQnNC40L3QuNC80LDQu9C10L0g0LHRgNC+0Lkg0LfQvdCw0YbQuCDQt9CwINCw0L3QvtGC0LjRgNCw0L3QtSDQvdCwINC60L7Qv9C40LXRgtC+IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTUKK21zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKK21zZ3N0ciAi0JjRgdGC0L7RgNC40YfQtdGB0LrQuCDQvtCx0YXQstCw0YIg0LfQsCDQsNC90L7RgtC40YDQsNC90LUg0LIg0LTQvdC4IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTYKK21zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgorbXNnc3RyICLQkdGA0L7QuSDRgNC10LTQvtCy0LUg0LfQsCDQutC+0L3RgtC10LrRgdGC0LAg0L/RgNC4INC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C70LjQutC40YLQtSIKKworIzogbGliL29wdGlvbi50Y2w6MTU3Cittc2dpZCAiQWRkaXRpb25hbCBEaWZmIFBhcmFtZXRlcnMiCittc2dzdHIgItCU0L7Qv9GK0LvQvdC40YLQtdC70L3QuCDQsNGA0LPRg9C80LXQvdGC0Lgg0LrRitC8IOKAnmdpdCBkaWZm4oCcIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTgKK21zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgorbXNnc3RyICLQqNC40YDQvtGH0LjQvdCwINC90LAg0YLQtdC60YHRgtCwINC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSIKKworIzogbGliL29wdGlvbi50Y2w6MTU5Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICLQqNCw0LHQu9C+0L0g0LfQsCDQuNC80LXRgtC+INC90LAg0L3QvtCy0LjRgtC1INC60LvQvtC90LgiCisKKyM6IGxpYi9vcHRpb24udGNsOjE2MAorbXNnaWQgIkRlZmF1bHQgRmlsZSBDb250ZW50cyBFbmNvZGluZyIKK21zZ3N0ciAi0KHRgtCw0L3QtNCw0YDRgtC90L4g0LrQvtC00LjRgNCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSIKKworIzogbGliL29wdGlvbi50Y2w6MTYxCittc2dpZCAiV2FybiBiZWZvcmUgY29tbWl0dGluZyB0byBhIGRldGFjaGVkIGhlYWQiCittc2dzdHIgItCf0YDQtdC00YPQv9GA0LXQttC00LDQstCw0L3QtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtdGC0L4g0L/RgNC4INC90LXRgdCy0YrRgNC30LDQvSDQstGA0YrRhSIKKworIzogbGliL29wdGlvbi50Y2w6MTYyCittc2dpZCAiU3RhZ2luZyBvZiB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgItCS0LrQsNGA0LLQsNC90LUg0L3QsCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGxpYi9vcHRpb24udGNsOjE2MworbXNnaWQgIlNob3cgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNjQKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAi0KDQsNC30LzQtdGAINC90LAg0YLQsNCx0YPQu9Cw0YbQuNGP0YLQsCDQsiDQuNC90YLQtdGA0LLQsNC70LgiCisKKyM6IGxpYi9vcHRpb24udGNsOjIxMAorbXNnaWQgIkNoYW5nZSIKK21zZ3N0ciAi0KHQvNGP0L3QsCIKKworIzogbGliL29wdGlvbi50Y2w6MjU0Cittc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCittc2dzdHIgItCf0YDQsNCy0L7Qv9C40YHQtdC9INGA0LXRh9C90LjQujoiCisKKyM6IGxpYi9vcHRpb24udGNsOjI4NAorbXNnaWQgIkNoYW5nZSBGb250IgorbXNnc3RyICLQodC80Y/QvdCwINC90LAg0YjRgNC40YTRgtCwIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgItCY0LfQsdC+0YAg0L3QsCDigJ4lc+KAnCIKKworIzogbGliL29wdGlvbi50Y2w6Mjk0Cittc2dpZCAicHQuIgorbXNnc3RyICLRgtGH0LouIgorCisjOiBsaWIvb3B0aW9uLnRjbDozMDgKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBsaWIvb3B0aW9uLnRjbDozNDUKK21zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0L3QsNGB0YLRgNC+0LnQutC40YLQtToiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQzCittc2dpZCAiRGVmYXVsdCIKK21zZ3N0ciAi0KHRgtCw0L3QtNCw0YDRgtC90L7RgtC+IgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN5c3RlbSAoJXMpIgorbXNnc3RyICLQodC40YHRgtC10LzQvdC+0YLQviAoJXMpIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQorbXNnaWQgIk90aGVyIgorbXNnc3RyICLQlNGA0YPQs9C+IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKK21zZ3N0ciAi0JTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LHQsNC30L7QstCw0YLQsCDQstC10YDRgdC40Y8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjkKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKK21zZ3N0ciAi0JTQsCDRgdC1INC40LfQv9C+0LvQt9Cy0LAg0LLQtdGA0YHQuNGP0YLQsCDQvtGCINGC0L7Qt9C4INC60LvQvtC9IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCittc2dzdHIgItCU0LAg0YHQtSDQuNC30L/QvtC70LfQstCwINCy0LXRgNGB0LjRj9GC0LAg0L7RgiDQtNGA0YPQs9C40Y8g0LrQu9C+0L0iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vdGUgdGhhdCB0aGUgZGlmZiBzaG93cyBvbmx5IGNvbmZsaWN0aW5nIGNoYW5nZXMuXG4iCisiXG4iCisiJXMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiIKKyJcbiIKKyJUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdW5kb25lIG9ubHkgYnkgcmVzdGFydGluZyB0aGUgbWVyZ2UuIgorbXNnc3RyICIiCisi0KDQsNC30LvQuNC60LDRgtCwINC/0L7QutCw0LfQstCwINGB0LDQvNC+INGA0LDQt9C70LjQutC40YLQtSDRgSDQutC+0L3RhNC70LjQutGCLlxuIgorIlxuIgorItCk0LDQudC70YrRgiDigJ4lc+KAnCDRidC1INCx0YrQtNC1INC/0YDQtdC30LDQv9C40YHQsNC9LlxuIgorIlxuIgorItCi0LDQt9C4INC+0L/QtdGA0LDRhtC40Y8g0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LzQtdC90LXQvdCwINGB0LDQvNC+INGH0YDQtdC3INC30LDQv9C+0YfQstCw0L3QtSDQvdCwINGB0LvQuNCy0LDQvdC10YLQviDQvdCw0L3QvtCy0L4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorbXNnc3RyICIiCisi0JjQt9Cz0LvQtdC20LTQsCwg0YfQtSDQstGB0LUg0L7RidC1INC40LzQsCDQvdC10LrQvtGA0LjQs9C40YDQsNC90Lgg0LrQvtC90YTQu9C40LrRgtC4INCy0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcLiDQlNCwINGB0LUg0LTQvtCx0LDQstC4ICIKKyLQu9C4INGE0LDQudC70YrRgiDQutGK0Lwg0LjQvdC00LXQutGB0LA/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC60L7RgNC10LrRhtC40Y8g0L3QsCDQutC+0L3RhNC70LjQutGC0LjRgtC1INCyIOKAniVz4oCcIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDEKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSBkZWxldGlvbiBvciBsaW5rIGNvbmZsaWN0cyB1c2luZyBhIHRvb2wiCittc2dzdHIgIiIKKyLQmtC+0L3RhNC70LjQutGC0LjRgtC1INC/0YDQuCDRgdC40LzQstC+0LvQvdC4INCy0YDRitC30LrQuCDQuNC70Lgg0LjQt9GC0YDQuNCy0LDQvdC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LrQvtGA0LjQs9C40YDQsNC90Lgg0YEgIgorItCy0YrQvdGI0L3QsCDQv9GA0L7Qs9GA0LDQvNCwLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Cittc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi0KTQsNC50LvRitGCLCDQsiDQutC+0LnRgtC+INC1INC60L7QvdGE0LvQuNC60YLRitGCLCDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKK21zZ3N0ciAi0KLQvtCy0LAg0L3QtSDQtSDQs9GA0LDRhNC40YfQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDRgdC70LjQstCw0L3QtTog4oCeJXPigJwiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIG1lcmdlIHRvb2wgJyVzJyIKK21zZ3N0ciAi0J3QtdC/0L7QtNC00YrRgNC20LDQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDRgdC70LjQstCw0L3QtTog4oCeJXPigJwiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMxMAorbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgorbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1INCy0LXRh9C1INC1INGB0YLQsNGA0YLQuNGA0LDQvdCwLiDQlNCwINCx0YrQtNC1INC70Lgg0LjQt9C60LvRjtGH0LXQvdCwPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCisiJXMiCittc2dzdHIgIiIKKyLQk9GA0LXRiNC60LAg0L/RgNC4INC40LfRgtC10LPQu9GP0L3QtdGC0L4g0L3QsCDQstC10YDRgdC40Lg6XG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyLQn9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGC0LDRgNGC0LjRgNCw0L3QsDpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzU0Cittc2dpZCAiUnVubmluZyBtZXJnZSB0b29sLi4uIgorbXNnc3RyICLQodGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwINC/0YDQvtCz0YDQsNC80LDRgtCwINC30LAg0YHQu9C40LLQsNC90LXigKYiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM4MiBsaWIvbWVyZ2V0b29sLnRjbDozOTAKK21zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCittc2dzdHIgItCT0YDQtdGI0LrQsCDQsiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1LiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKK21zZ2lkICJBZGQgVG9vbCIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINC60L7QvNCw0L3QtNCwIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAorbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0LrQvtC80LDQvdC00LAiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjM0Cittc2dpZCAiQWRkIGdsb2JhbGx5IgorbXNnc3RyICLQk9C70L7QsdCw0LvQvdC+INC00L7QsdCw0LLRj9C90LUiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjQ2Cittc2dpZCAiVG9vbCBEZXRhaWxzIgorbXNnc3RyICLQn9C+0LTRgNC+0LHQvdC+0YHRgtC4INC30LAg0LrQvtC80LDQvdC00LDRgtCwIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0OQorbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgorbXNnc3RyICLQl9CwINGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC/0L7QtNC80LXQvdGO0YLQsCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC30L3QsNC60LAg4oCeL+KAnCDQt9CwINGA0LDQt9C00LXQu9C40YLQtdC7OiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NjAKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LA6IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo3MQorbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCittc2dzdHIgItCf0YDQtdC00Lgg0LjQt9C/0YrQu9C90LXQvdC40LUg0LTQsCDRgdC1INC40LfQstC10LbQtNCwINC00LjQsNC70L7Qs9C+0LIg0L/RgNC+0LfQvtGA0LXRhiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzcKK21zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKK21zZ3N0ciAi0J/QvtGC0YDQtdCx0LjRgtC10LvRj9GCINC00LAg0YPQutCw0LbQtSDQstC10YDRgdC40Y8gKNC30LDQtNCw0LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAgJFJFVklTSU9OKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODIKK21zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKK21zZ3N0ciAiIgorItCf0L7RgtGA0LXQsdC40YLQtdC70Y/RgiDQtNCwINGD0LrQsNC20LUg0LTQvtC/0YrQu9C90LjRgtC10LvQvdC4INCw0YDQs9GD0LzQtdC90YLQuCAo0LfQsNC00LDQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCAkQVJHUykiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjg5Cittc2dpZCAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93IgorbXNnc3RyICLQkdC10Lcg0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L/RgNC+0LfQvtGA0LXRhiDRgSDQuNC30YXQvtC00LAg0L7RgiDQutC+0LzQsNC90LTQsNGC0LAiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjk0Cittc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKK21zZ3N0ciAiIgorItCh0YLQsNGA0YLQuNGA0LDQvdC1INGB0LDQvNC+INGB0LvQtdC0INC40LfQsdC+0YAg0L3QsCDRgNCw0LfQu9C40LrQsCAo0L/RgNC+0LzQtdC90LvQuNCy0LDRgtCwICRGSUxFTkFNRSDQvdC1INC1INC/0YDQsNC30L3QsCkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjExOAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCittc2dzdHIgItCX0LDQtNCw0LnRgtC1INC40LzQtSDQt9CwINC60L7QvNCw0L3QtNCw0YLQsC4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjEyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgYWRkIHRvb2w6XG4iCisiJXMiCittc2dzdHIgIiIKKyLQmtC+0LzQsNC90LTQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC00L7QsdCw0LLQtdC90LA6XG4iCisiJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE4NworbXNnaWQgIlJlbW92ZSBUb29sIgorbXNnc3RyICLQn9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINC60L7QvNCw0L3QtNCwIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTMKK21zZ2lkICJSZW1vdmUgVG9vbCBDb21tYW5kcyIKK21zZ3N0ciAi0J/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQutC+0LzQsNC90LTQuCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk4Cittc2dpZCAiUmVtb3ZlIgorbXNnc3RyICLQn9GA0LXQvNCw0YXQstCw0L3QtSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjMxCittc2dpZCAiKEJsdWUgZGVub3RlcyByZXBvc2l0b3J5LWxvY2FsIHRvb2xzKSIKK21zZ3N0ciAiKNC60L7QvNCw0L3QtNC40YLQtSDQutGK0Lwg0LvQvtC60LDQu9C90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDRgdCwINC+0LHQvtC30L3QsNGH0LXQvdC4INCyINGB0LjQvdGM0L4pIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW4gQ29tbWFuZDogJXMiCittc2dzdHIgItCY0LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAniVz4oCcIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMDYKK21zZ2lkICJBcmd1bWVudHMiCittc2dzdHIgItCQ0YDQs9GD0LzQtdC90YLQuCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzM2IGxpYi9jaGVja291dF9vcC50Y2w6NTY3IGxpYi9tZXJnZS50Y2w6MTY2Cittc2dpZCAiVmlzdWFsaXplIgorbXNnc3RyICLQktC40LfRg9Cw0LvQuNC30LDRhtC40Y8iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjM0MQorbXNnaWQgIk9LIgorbXNnc3RyICLQlNC+0LHRgNC1IgorCisjOiBsaWIvc2VhcmNoLnRjbDo0OAorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICLQotGK0YDRgdC10L3QtToiCisKKyM6IGxpYi9zZWFyY2gudGNsOjUwCittc2dpZCAiTmV4dCIKK21zZ3N0ciAi0KHQu9C10LTQstCw0YnQsCDQv9C+0Y/QstCwIgorCisjOiBsaWIvc2VhcmNoLnRjbDo1MQorbXNnaWQgIlByZXYiCittc2dzdHIgItCf0YDQtdC00LjRiNC90LAg0L/QvtGP0LLQsCIKKworIzogbGliL3NlYXJjaC50Y2w6NTIKK21zZ2lkICJSZWdFeHAiCittc2dzdHIgItCg0LXQsy4g0LjQt9GA0LDQtyIKKworIzogbGliL3NlYXJjaC50Y2w6NTQKK21zZ2lkICJDYXNlIgorbXNnc3RyICLQoNC10LPQuNGB0YLRitGAIgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjIxIGxpYi9zaG9ydGN1dC50Y2w6NjIKK21zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgorbXNnc3RyICLQmtC70LDQstC40YjQvdCw0YLQsCDQutC+0LzQsdC40L3QsNGG0LjRjyDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L3QsDoiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3Cittc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgorbXNnc3RyICLQmNC60L7QvdCw0YLQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L3QsDoiCisKKyM6IGxpYi9kaWZmLnRjbDo3NworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKKyJcbiIKKyJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCisidGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKKyJ0aGUgc2FtZSBzdGF0ZS4iCittc2dzdHIgIiIKKyLQndC1INGB0LAg0L7RgtC60YDQuNGC0Lgg0YDQsNC30LvQuNC60LguXG4iCisiXG4iCisi0J3Rj9C80LAg0L/RgNC+0LzQtdC90Lgg0LIg4oCeJXPigJwuXG4iCisiXG4iCisi0JLRgNC10LzQtdGC0L4g0L3QsCDQv9GA0L7QvNGP0L3QsCDQvdCwINGE0LDQudC70LAg0LUg0LHQuNC7INC30LDQtNCw0LTQtdC9INC+0YIg0LTRgNGD0LPQsCDQv9GA0L7Qs9GA0LDQvNCwLCDQvdC+INGB0YrQtNGK0YDQttCw0L3QuNC10YLQviAiCisi0LzRgyDQvdC1INC1INC/0YDQvtC80LXQvdC10L3Qvi5cbiIKKyJcbiIKKyLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGJ0LUg0LfQsNC/0L7Rh9C90LUg0L3QvtCy0LAg0L/RgNC+0LLQtdGA0LrQsCDQtNCw0LvQuCDQvdGP0LzQsCDQtNGA0YPQs9C4INGE0LDQudC70L7QstC1INCyINGC0L7QstCwICIKKyLRgdGK0YHRgtC+0Y/QvdC40LUuIgorCisjOiBsaWIvZGlmZi50Y2w6MTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgorbXNnc3RyICLQl9Cw0YDQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUg0LIg4oCeJXPigJzigKYiCisKKyM6IGxpYi9kaWZmLnRjbDoxNDAKK21zZ2lkICIiCisiTE9DQUw6IGRlbGV0ZWRcbiIKKyJSRU1PVEU6XG4iCittc2dzdHIgIiIKKyLQm9Ce0JrQkNCb0J3Qnjog0LjQt9GC0YDQuNGCXG4iCisi0J7QotCU0JDQm9CV0KfQldCd0J46XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxNDUKK21zZ2lkICIiCisiUkVNT1RFOiBkZWxldGVkXG4iCisiTE9DQUw6XG4iCittc2dzdHIgIiIKKyLQntCi0JTQkNCb0JXQp9CV0J3Qnjog0LjQt9GC0YDQuNGCXG4iCisi0JvQntCa0JDQm9Cd0J46XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxNTIKK21zZ2lkICJMT0NBTDpcbiIKK21zZ3N0ciAi0JvQntCa0JDQm9Cd0J46XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxNTUKK21zZ2lkICJSRU1PVEU6XG4iCittc2dzdHIgItCe0KLQlNCQ0JvQldCn0JXQndCeOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjE3IGxpYi9kaWZmLnRjbDozNTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSAlcyIKK21zZ3N0ciAi0KTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LrQsNC30LDQvSIKKworIzogbGliL2RpZmYudGNsOjIxOAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNGA0LXQttC00LDQvdC1INC90LAg0YTQsNC50Ls6IgorCisjOiBsaWIvZGlmZi50Y2w6MjI1Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgorbXNnc3RyICLQpdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQgKNC/0L7QtNC80L7QtNGD0LspIgorCisjOiBsaWIvZGlmZi50Y2w6MjM3Cittc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgorbXNnc3RyICLil48g0JTQstC+0LjRh9C10L0g0YTQsNC50LsgKNGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdC1INGB0LUg0L/QvtC60LDQt9Cy0LApLiIKKworIzogbGliL2RpZmYudGNsOjI0MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgorIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgorbXNnc3RyICIiCisi4pePINCd0LXRgdC70LXQtNC10L3QuNGP0YIg0YTQsNC50Lsg0LUgJWQg0LHQsNC50YLQsC5cbiIKKyLil48g0J/QvtC60LDQt9Cy0LDRgiDRgdC1INGB0LDQvNC+INC/0YrRgNCy0LjRgtC1ICVkINCx0LDQudGC0LAuXG4iCisKKyM6IGxpYi9kaWZmLnRjbDoyNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCisiKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgorbXNnc3RyICIiCisiXG4iCisi4pePINCd0LXRgdC70LXQtNC10L3QuNGP0YIg0YTQsNC50Lsg0LUg0L7RgtGA0Y/Qt9Cw0L0g0LTQvtGC0YPQuiDQvtGCINC/0YDQvtCz0YDQsNC80LDRgtCwIOKAniVz4oCcLlxuIgorIuKXjyDQmNC30L/QvtC70LfQstCw0LnRgtC1INCy0YrQvdGI0LXQvSDRgNC10LTQsNC60YLQvtGALCDQt9CwINC00LAg0LLQuNC00LjRgtC1INGG0LXQu9C40Y8g0YTQsNC50LsuXG4iCisKKyM6IGxpYi9kaWZmLnRjbDozNTYgbGliL2JsYW1lLnRjbDoxMTI4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBkaWZmOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YDQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQu9C40LrQsDoiCisKKyM6IGxpYi9kaWZmLnRjbDo1NzgKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAi0JjQt9Cx0YDQsNC90L7RgtC+INC/0LDRgNGH0LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfQstCw0LTQtdC90L4g0L7RgiDQuNC90LTQtdC60YHQsC4iCisKKyM6IGxpYi9kaWZmLnRjbDo1ODUKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgItCY0LfQsdGA0LDQvdC+0YLQviDQv9Cw0YDRh9C1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQtNC+0LHQsNCy0LXQvdC+INC60YrQvCDQuNC90LTQtdC60YHQsC4iCisKKyM6IGxpYi9kaWZmLnRjbDo2NjQKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAi0JjQt9Cx0YDQsNC90LjRj9GCINGA0LXQtCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9Cy0LDQtNC10L0g0L7RgiDQuNC90LTQtdC60YHQsC4iCisKKyM6IGxpYi9kaWZmLnRjbDo2NzIKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgItCY0LfQsdGA0LDQvdC40Y/RgiDRgNC10LQg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC00L7QsdCw0LLQtdC9INC60YrQvCDQuNC90LTQtdC60YHQsC4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozNAorbXNnaWQgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDgKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgItCe0YIg0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg4Cittc2dpZCAiQnJhbmNoZXMiCittc2dzdHIgItCa0LvQvtC90LgiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEwCittc2dpZCAiRGVsZXRlIE9ubHkgSWYiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSwg0YHQsNC80L4g0LDQutC+IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMgorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAi0KHQu9GP0YIg0LI6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEyMCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTMKK21zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCittc2dzdHIgItCS0LjQvdCw0LPQuCAo0LHQtdC3INC/0YDQvtCy0LXRgNC60LAg0LfQsCDRgdC70LjQstCw0L3QtSkiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUzCittc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgorbXNnc3RyICLQl9CwINC00LDQvdC90LjRgtC1IOKAntCh0LvRj9GCINCy4oCcINC1INC90LXQvtCx0YXQvtC00LjQvNC+INC00LAg0LfQsNC00LDQtNC10YLQtSDQutC70L7QvS4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgorIlxuIgorIiAtICVzIgorbXNnc3RyICIiCisi0KHQu9C10LTQvdC40YLQtSDQutC70L7QvdC4INC90LUg0YHQsCDRgdC70LXRgtC4INC90LDQv9GK0LvQvdC+INCyIOKAniVz4oCcOlxuIgorIlxuIgorIiDil48gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisi0J/QvtC90LUg0LXQtNC90LAg0L7RgiDQv9GA0L7QsdC40YLQtSDQt9CwINGB0LvQuNCy0LDQvdC1INC1INC90LXRg9GB0L/QtdGI0L3QsCwg0LfQsNGJ0L7RgtC+INC90LUg0YHRgtC1INC00L7RgdGC0LDQstC40LvQuCDQstGB0LjRh9C60LggIgorItC90LXQvtCx0YXQvtC00LjQvNC4INC/0L7QtNCw0LLQsNC90LjRjy4g0J/RgNC+0LHQstCw0LnRgtC1INC/0YrRgNCy0L4g0LTQsCDQtNC+0YHRgtCw0LLQuNGC0LUg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQvtGCIOKAniVz4oCcLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDgKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgItCY0LfQsdC10YDQtdGC0LUg0L/QvtC90LUg0LXQtNC40L0g0LrQu9C+0L0g0LfQsCDQuNC30YLRgNC40LLQsNC90LUuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1Cittc2dpZCAiIgorIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiXG4iCisiRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKyLQktGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC10YLQviDQvdCwINC40LfRgtGA0LjRgtC4INC60LvQvtC90Lgg0LzQvtC20LUg0LTQsCDQtSDRgtGA0YPQtNC90L4uXG4iCisiXG4iCisi0KHQuNCz0YPRgNC90Lgg0LvQuCDRgdGC0LUsINGH0LUg0LjRgdC60LDRgtC1INC00LAg0YLRgNC40LXRgtC1PyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDQutC70L7QvdC4INC+0YIg4oCeJXPigJwiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzAwCittc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCittc2dzdHIgItCd0LUg0LUg0LjQt9Cx0YDQsNC90L4g0YXRgNCw0L3QuNC70LjRidC1LiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAi0J/RgNC10YLRitGA0YHQstCw0L3QtSDQvdCwIOKAniVz4oCc4oCmIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMzCittc2dpZCAiR2l0IEd1aSIKK21zZ3N0ciAi0JPQn9CYINC90LAgR2l0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDEyCittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvdC+0LLQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgKK21zZ2lkICJOZXcuLi4iCittc2dzdHIgItCd0L7QstC+4oCmIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NgorbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgItCa0LvQvtC90LjRgNCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE2Cittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgItCa0LvQvtC90LjRgNCw0L3QteKApiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY0Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICLQntGC0LLQsNGA0Y/QvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjkKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICLQntGC0LLQsNGA0Y/QvdC14oCmIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0MgorbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCittc2dzdHIgItCh0LrQvtGA0L4g0L/QvtC70LfQstCw0L3QuCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNDgKK21zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKK21zZ3N0ciAi0J7RgtCy0LDRgNGP0L3QtSDQvdCwINGF0YDQsNC90LjQu9C40YnQtSDQv9C+0LvQt9Cy0LDQvdC+INC90LDRgdC60L7RgNC+OiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMjMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINGF0YDQsNC90LjQu9C40YnQtdGC0L4g4oCeJXPigJw6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQwNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzMKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTcKK21zZ2lkICJEaXJlY3Rvcnk6IgorbXNnc3RyICLQlNC40YDQtdC60YLQvtGA0LjRjzoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTczCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwOTgKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAi0KXRgNCw0L3QuNC70LjRidC1INC90LAgR2l0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCS0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINC00LjRgNC10LrRgtC+0YDQuNGPIOKAniVz4oCcLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0JLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0YTQsNC50Lsg4oCeJXPigJwuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MQorbXNnaWQgIkNsb25lIgorbXNnc3RyICLQmtC70L7QvdC40YDQsNC90LUiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA0Cittc2dpZCAiU291cmNlIExvY2F0aW9uOiIKK21zZ3N0ciAi0JDQtNGA0LXRgSDQvdCwINC40LfRgtC+0YfQvdC40LrQsDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTEzCittc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCittc2dzdHIgItCm0LXQu9C10LLQsCDQtNC40YDQtdC60YLQvtGA0LjRjzoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIzCittc2dpZCAiQ2xvbmUgVHlwZToiCittc2dzdHIgItCS0LjQtCDQutC70L7QvdC40YDQsNC90LU6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyOAorbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKK21zZ3N0ciAi0KHRgtCw0L3QtNCw0YDRgtC90L4gKNCx0YrRgNC30L4sINGH0LDRgdGC0LjRh9C90L4g0YHQv9C+0LTQtdC70Y/QvdC1INC90LAg0YTQsNC50LvQvtCy0LUsINGC0LLRitGA0LTQuCDQstGA0YrQt9C60LgpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzMworbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKK21zZ3N0ciAi0J/RitC70L3QviAo0LHQsNCy0L3Qviwg0L/RitC70L3QvtGG0LXQvdC90L4g0YDQtdC30LXRgNCy0L3QviDQutC+0L/QuNC1KSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzgKK21zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKK21zZ3N0ciAi0KHQv9C+0LTQtdC70LXQvdC+ICjQvdCw0Lkt0LHRitGA0LfQviwg0L3QtSDRgdC1INC/0YDQtdC/0L7RgNGK0YfQstCwLCDQvdC1INC/0YDQsNCy0Lgg0YDQtdC30LXRgNCy0L3QviDQutC+0L/QuNC1KSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDUKK21zZ2lkICJSZWN1cnNpdmVseSBjbG9uZSBzdWJtb2R1bGVzIHRvbyIKK21zZ3N0ciAi0KDQtdC60YPRgNGB0LjQstC90L4g0LrQu9C+0L3QuNGA0LDQvdC1INC4INC90LAg0L/QvtC00LzQvtC00YPQu9C40YLQtSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NzkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzcyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODQyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTEyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICLQotC+0LLQsCDQvdC1INC1INGF0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdDogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE1Cittc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICLQodCw0LzQviDQu9C+0LrQsNC70L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LrQu9C+0L3QuNGA0LDRgiDRgdGC0LDQvdC00LDRgNGC0L3QviIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTkKK21zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICLQodCw0LzQviDQu9C+0LrQsNC70L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LrQu9C+0L3QuNGA0LDRgiDRgdC/0L7QtNC10LvQtdC90L4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLQnNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC10YLQviDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjUxCittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQvdCw0YHRgtGA0L7QudCy0LDQvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQvi3QuNC30YLQvtGH0L3QuNC6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2MworbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgItCf0YDQtdCx0YDQvtGP0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LgiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY0Cittc2dpZCAiYnVja2V0cyIKK21zZ3N0ciAi0LrQu9C10YLQutC4IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKK21zZ3N0ciAi0J7QsdC10LrRgtC40YLQtS/QuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAv0YHQuNC90L7QvdC40LzQuNGC0LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQutC+0L/QuNGA0LDQvdC4OiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgorbXNnc3RyICLQndGP0LzQsCDQutCw0LrQstC+INC00LAg0YHQtSDQutC70L7QvdC40YDQsCDQvtGCIOKAniVz4oCcLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NDAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTUyCittc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgorbXNnc3RyICLQntGB0L3QvtCy0L3QuNGP0YIg0LrQu9C+0L0g4oCUIOKAnm1hc3RlcuKAnCDQvdC1INC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQsNC9LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MzkKK21zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgorbXNnc3RyICLQndC1INGB0LUg0L/QvtC00LTRitGA0LbQsNGCINGC0LLRitGA0LTQuCDQstGA0YrQt9C60LguINCf0YDQtdC80LjQvdCw0LLQsCDRgdC1INC60YrQvCDQutC+0L/QuNGA0LDQvdC1LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGZyb20gJXMiCittc2dzdHIgItCa0LvQvtC90LjRgNCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4MgorbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YLQuCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODMKK21zZ2lkICJLaUIiCittc2dzdHIgIktpQiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LrQvtC/0LjRgNCw0L3QtSDQvdCwINC+0LHQtdC60YI6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxNworbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0LLRgNGK0LfQutC4INC60YrQvCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOAorbXNnaWQgIm9iamVjdHMiCittc2dzdHIgItC+0LHQtdC60YLQuCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINGC0LLRitGA0LTQsCDQstGA0YrQt9C60LAg0LrRitC8INC+0LHQtdC60YI6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4MQorbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLQmtC70L7QvdC40YLQtSDQuCDQvtCx0LXQutGC0LjRgtC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LjQt9GC0LXQs9C70LXQvdC4LiDQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyAiCisi0L/QvtCz0LvQtdC00L3QtdGC0LUg0LjQt9GF0L7QtNCwINC90LAg0LrQvtC90LfQvtC70LDRgtCwLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTIKK21zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLQldGC0LjQutC10YLQuNGC0LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQuNC30YLQtdCz0LvQtdC90LguINCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC/0L7Qs9C70LXQtNC90LXRgtC1ICIKKyLQuNC30YXQvtC00LAg0L3QsCDQutC+0L3Qt9C+0LvQsNGC0LAuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNgorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLQktGK0YDRhdGK0YIg4oCeSEVBROKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7Qv9GA0LXQtNC10LvQtdC9LiDQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9C+0LPQu9C10LTQvdC10YLQtSAiCisi0LjQt9GF0L7QtNCwINC90LAg0LrQvtC90LfQvtC70LDRgtCwLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNGH0LjRgdGC0LgiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMxCittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC60LvQvtC90LjRgNCw0L3QtS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Cittc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgorbXNnc3RyICLQndC1INC1INC/0L7Qu9GD0YfQtdC9INC60LvQvtC9INC/0L4g0L/QvtC00YDQsNC30LHQuNGA0LDQvdC1LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCittc2dzdHIgItCd0Y/QvNCwINC/0L7QtNCw0LLQsNC90LUg0L7RgtCz0L7QstCw0YDRj9GJ0L4g0L3QsCDigJ4lc+KAnC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTYxCittc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINGA0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjIgbGliL2luZGV4LnRjbDo3MCBsaWIvaW5kZXgudGNsOjEzNgorIzogbGliL2luZGV4LnRjbDoyMDcKK21zZ2lkICJmaWxlcyIKK21zZ3N0ciAi0YTQsNC50LvQvtCy0LUiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgxCittc2dpZCAiQ2Fubm90IGNsb25lIHN1Ym1vZHVsZXMuIgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70LjRgtC1INC90LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LrQu9C+0L3QuNGA0LDRgi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTkwCittc2dpZCAiQ2xvbmluZyBzdWJtb2R1bGVzIgorbXNnc3RyICLQmtC70L7QvdC40YDQsNC90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LjRgtC1IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTUKK21zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QviDQuNC30YLQtdCz0LvRj9C90LUuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTkKK21zZ2lkICJPcGVuIgorbXNnc3RyICLQntGC0LLQsNGA0Y/QvdC1IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjkKK21zZ2lkICJSZXBvc2l0b3J5OiIKK21zZ3N0ciAi0KXRgNCw0L3QuNC70LjRidC1OiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQvtGC0LLQsNGA0Y/QvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnDoiCisKKyM6IGxpYi9hYm91dC50Y2w6MjYKK21zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCittc2dzdHIgImdpdC1ndWkg4oCUINCz0YDQsNGE0LjRh9C10L0g0LjQvdGC0LXRgNGE0LXQudGBINC30LAgR2l0LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCittc2dzdHIgItCU0L7RgdGC0LDQstGP0L3QtSDQvdCwIOKAniVz4oCcINC+0YIg4oCeJXPigJwiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICLRhNCw0YLQsNC70L3QsCDQs9GA0LXRiNC60LA6IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQutGA0LjQtSIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgItCa0LvQvtC90YrRgiDigJ4lc+KAnCDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L3QsNGB0YLRgNC+0LnQstCw0L3QtSDQvdCwINC+0L/RgNC+0YHRgtC10L0gZ2l0LXB1bGwg0LfQsCDigJ4lc+KAnC4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKyLQmtC70L7QvdGK0YIg4oCeJXPigJwg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuXG4iCisiXG4iCisi0KLQvtC5INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgtGA0LjQstC40LDQu9C90L4g0YHQu9GP0YIg0LTQviDigJ4lc+KAnC5cbiIKKyLQndC10L7QsdGF0L7QtNC40LzQviDQtSDRgdC70LjQstCw0L3QtS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAi0KHRgtGA0LDRgtC10LPQuNGPINC30LAg0YHQu9C40LLQsNC90LUgIOKAniVz4oCcINC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDigJ4lc+KAnC4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Cittc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgorbXNnc3RyICLQmNC90LTQtdC60YHRitGCINCy0LXRh9C1INC1INC30LDQutC70Y7Rh9C10L0uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OQorbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisi0KHRitGB0YLQvtGP0L3QuNC10YLQviDQv9GA0Lgg0L/QvtGB0LvQtdC00L3QsNGC0LAg0L/RgNC+0LLQtdGA0LrQsCDQvdC1INC+0YLQs9C+0LLQsNGA0Y8g0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAgIgorItGF0YDQsNC90LjQu9C40YnQtdGC0L4uXG4iCisiXG4iCisi0J3Rj9C60L7QuSDQtNGA0YPQsyDQv9GA0L7RhtC10YEg0LfQsCBHaXQg0LUg0L/RgNC+0LzQtdC90LjQuyDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC80LXQttC00YPQstGA0LXQvNC10L3QvdC+LiDQodGK0YHRgtC+0Y/QvdC40LXRgtC+ICIKKyLRgtGA0Y/QsdCy0LAg0LTQsCDQsdGK0LTQtSDQv9GA0L7QstC10YDQtdC90L4sINC/0YDQtdC00Lgg0LTQsCDRgdC1INC/0YDQtdC80LjQvdC1INC60YrQvCDQvdC+0LIg0LrQu9C+0L0uXG4iCisiXG4iCisi0JDQstGC0L7QvNCw0YLQuNGH0L3QviDRidC1INC30LDQv9C+0YfQvdC1INC90L7QstCwINC/0YDQvtCy0LXRgNC60LAuXG4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAi0KDQsNCx0L7RgtC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINGB0LUg0L/RgNC40LLQtdC20LTQsCDQutGK0Lwg4oCeJXPigJzigKYiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Cittc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCittc2dzdHIgItGE0LDQudC70LAg0YHQsCDQuNC30YLQtdCz0LvQtdC90LgiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKK21zZ3N0ciAiIgorItCf0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC40LfRgtC10LPQu9GP0L3QtdGC0L4g0L3QsCDigJ4lc+KAnCAo0L3QtdC+0LHRhdC+0LTQuNC80L4g0LUg0L/QvtGE0LDQudC70L7QstC+INGB0LvQuNCy0LDQvdC1KS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3Cittc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCittc2dzdHIgItCd0LXQvtCx0YXQvtC00LjQvNC+INC1INC/0L7RhNCw0LnQu9C+0LLQviDRgdC70LjQstCw0L3QtS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCittc2dzdHIgItCe0YHRgtCw0LLQsNC90LUg0LLRitGA0YXRgyDQutC70L7QvdCwIOKAniVz4oCcLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorItCS0LXRh9C1INC90LUg0YHRgtC1INC90LAg0LvQvtC60LDQu9C10L0g0LrQu9C+0L0uXG4iCisiXG4iCisi0JDQutC+INC40YHQutCw0YLQtSDQtNCwINGB0YLQtSDQvdCwINC60LvQvtC9LCDRgdGK0LfQtNCw0LnRgtC1INCx0LDQt9C40YDQsNC9INC90LAg4oCe0KLQvtCy0LAg0L3QtdGB0LLRitGA0LfQsNC90L4g0LjQt9GC0LXQs9C70Y/QvdC14oCcLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDMgbGliL2NoZWNrb3V0X29wLnRjbDo1MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaGVja2VkIG91dCAnJXMnLiIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0LjQt9GC0LXQs9C70LXQvS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAiIgorItCX0LDQvdGD0LvRj9Cy0LDQvdC10YLQviDQvdCwIOKAniVz4oCcINC60YrQvCDigJ4lc+KAnCDRidC1INC00L7QstC10LTQtSDQtNC+INC30LDQs9GD0LHQstCw0L3QtdGC0L4g0L3QsCDRgdC70LXQtNC90LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjzoiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Cittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAi0JLRitC30YHRgtCw0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDQt9Cw0LPRg9Cx0LXQvdC40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y8g0LzQvtC20LUg0LTQsCDQtSDRgtGA0YPQtNC90L4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICclcyc/IgorbXNnc3RyICLQl9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwIOKAniVz4oCcPyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzEgbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1Cittc2dpZCAiUmVzZXQiCittc2dzdHIgItCe0YLQvdCw0YfQsNC70L4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKKyJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDQt9Cw0LTQsNCy0LDQvdC1INC90LAg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0uXG4iCisiXG4iCisi0KDQsNCx0L7RgtC90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC1INGB0LDQvNC+INGH0LDRgdGC0LjRh9C90L4g0L7QsdC90L7QstC10L3QsDog0YTQsNC50LvQvtCy0LXRgtC1INGB0LAg0L7QsdC90L7QstC10L3QuCAiCisi0YPRgdC/0LXRiNC90L4sINC90L4g0L3Rj9C60L7QuSDQvtGCINCy0YrRgtGA0LXRiNC90LjRgtC1LCDRgdC70YPQttC10LHQvdC4INGE0LDQudC70L7QstC1INC90LAgR2l0INC90LUg0LUg0LHQuNC7LlxuIgorIlxuIgorItCi0L7QstCwINGB0YrRgdGC0L7Rj9C90LjQtSDQtSDQsNCy0LDRgNC40LnQvdC+INC4INC90LUg0YLRgNGP0LHQstCwINC00LAg0YHQtSDRgdC70YPRh9Cy0LAuINCf0YDQvtCz0YDQsNC80LDRgtCwIOKAniVz4oCcINGJ0LUgIgorItC/0YDQtdGD0YHRgtCw0L3QvtCy0Lgg0YDQsNCx0L7RgtCwLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIzCittc2dpZCAiQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0LrQu9C+0L0iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyOAorbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvdC+0LIg0LrQu9C+0L0iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MgorbXNnaWQgIkJyYW5jaCBOYW1lIgorbXNnc3RyICLQmNC80LUg0L3QsCDQutC70L7QvdCwIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTcKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKK21zZ3N0ciAi0KHRitCy0L/QsNC00LDQvdC1INC/0L4g0LjQvNC10YLQviDQvdCwINGB0LvQtdC00LXQvdC40Y8g0LrQu9C+0L0iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2NgorbXNnaWQgIlN0YXJ0aW5nIFJldmlzaW9uIgorbXNnc3RyICLQndCw0YfQsNC70L3QsCDQstC10YDRgdC40Y8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgorbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgorbXNnc3RyICLQntCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0Ykg0LrQu9C+0L06IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKK21zZ2lkICJObyIKK21zZ3N0ciAi0J3QtSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjgwCittc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCittc2dzdHIgItCh0LDQvNC+INGC0YDQuNCy0LjQsNC70L3QviDQv9GA0LXQstGK0YDRgtCw0YnQviDRgdC70LjQstCw0L3QtSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgItCf0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC60LvQvtC90LAg0YHQu9C10LQg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvNGDIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMyCittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCittc2dzdHIgItCY0LfQsdC10YDQtdGC0LUg0LrQu9C+0L0g0LfQsCDRgdC70LXQtNC10L3QuC4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCittc2dzdHIgItCh0LvQtdC00Y/RidC40Y/RgiDQutC70L7QvSDigJQg4oCeJXPigJwsINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtS4iCisKKyM6IGxpYi9jb25zb2xlLnRjbDo1OQorbXNnaWQgIldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQtNC10LnRgdGC0LLQuNC1LCDQuNC30YfQsNC60LDQudGC0LXigKYiCisKKyM6IGxpYi9jb25zb2xlLnRjbDoxODYKK21zZ2lkICJTdWNjZXNzIgorbXNnc3RyICLQo9GB0L/QtdGFIgorCisjOiBsaWIvY29uc29sZS50Y2w6MjAwCittc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgorbXNnc3RyICLQk9GA0LXRiNC60LA6INC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCwIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTIKK21zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgorbXNnc3RyICLQotC+0LLQsCDQvdC10YHQstGK0YDQt9Cw0L3QviDQuNC30YLQtdCz0LvRj9C90LUiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo2MAorbXNnaWQgIlJldmlzaW9uIEV4cHJlc3Npb246IgorbXNnc3RyICLQmNC30YDQsNC3INC30LAg0LLQtdGA0YHQuNGPOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjcyCittc2dpZCAiTG9jYWwgQnJhbmNoIgorbXNnc3RyICLQm9C+0LrQsNC70LXQvSDQutC70L7QvSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc3Cittc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICLQodC70LXQtNGP0Ykg0LrQu9C+0L0iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4MiBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ0Cittc2dpZCAiVGFnIgorbXNnc3RyICLQldGC0LjQutC10YIiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90LAg0LLQtdGA0YHQuNGPOiAlcyIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjM0MgorbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKK21zZ3N0ciAi0J3QtSDQtSDQuNC30LHRgNCw0L3QsCDQstC10YDRgdC40Y8uIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzUwCittc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCittc2dzdHIgItCY0LfRgNCw0LfRitGCINC30LAg0LLQtdGA0YHQuNGPINC1INC/0YDQsNC30LXQvS4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzcKK21zZ2lkICJVcGRhdGVkIgorbXNnc3RyICLQntCx0L3QvtCy0LXQvSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjU2NQorbXNnaWQgIlVSTCIKK21zZ3N0ciAi0JDQtNGA0LXRgSIKKworIzogbGliL2xpbmUudGNsOjE3Cittc2dpZCAiR290byBMaW5lOiIKK21zZ3N0ciAi0JrRitC8INGA0LXQtDoiCisKKyM6IGxpYi9saW5lLnRjbDoyMworbXNnaWQgIkdvIgorbXNnc3RyICLQn9GA0LjQtNCy0LjQttCy0LDQvdC1IgorCisjOiBsaWIvY29tbWl0LnRjbDo5Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCisiXG4iCisiWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKKyJ0byBhbWVuZC5cbiIKK21zZ3N0ciAiIgorItCd0Y/QvNCwINC60LDQutCy0L4g0LTQsCDRgdC1INC/0L7Qv9GA0LDQstC4LlxuIgorIlxuIgorItCp0LUg0YHRitC30LTQsNC00LXRgtC1INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtS4g0J/RgNC10LTQuCDQvdC10LPQviDQvdGP0LzQsCDQtNGA0YPQs9C4INC/0L7QtNCw0LLQsNC90LjRjywg0LrQvtC40YLQviAiCisi0LTQsCDQv9C+0L/RgNCw0LLQuNGC0LUuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisi0J/QviDQstGA0LXQvNC1INC90LAg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINC/0L7Qv9GA0LDQstGP0YLQtS5cbiIKKyJcbiIKKyLQkiDQvNC+0LzQtdC90YLQsCDQstGB0LUg0L7RidC1INC90LUg0YHRgtC1INC30LDQstGK0YDRiNC40LvQuCDQvtC/0LXRgNCw0YbQuNGPINC/0L4g0YHQu9C40LLQsNC90LUuINCd0LUg0LzQvtC20LUg0LTQsCDQv9C+0L/RgNCw0LLQuNGC0LUgIgorItC/0YDQtdC00LjRiNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUsINC+0YHQstC10L0g0LDQutC+INC/0YrRgNCy0L4g0L3QtSDQv9GA0LXRg9GB0YLQsNC90L7QstC40YLQtSDRgtC10LrRg9GJ0L7RgtC+INGB0LvQuNCy0LDQvdC1LlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDo0OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0YDQtdC20LTQsNC90LUg0L3QsCDQtNCw0L3QvdC40YLQtSDQvtGCINC/0L7QtNCw0LLQsNC90LUsINC60L7QuNGC0L4g0LTQsCDRgdC1INC/0L7Qv9GA0LDQstGP0YI6IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgItCY0LTQtdC90YLQuNGE0LjQutCw0YbQuNGP0YLQsCDQstC4INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtC/0YDQtdC00LXQu9C10L3QsDoiCisKKyM6IGxpYi9jb21taXQudGNsOjgwCittc2dpZCAiSW52YWxpZCBHSVRfQ09NTUlUVEVSX0lERU5UOiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0L/QvtC70LUg4oCeR0lUX0NPTU1JVFRFUl9JREVOVOKAnDoiCisKKyM6IGxpYi9jb21taXQudGNsOjEyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgorbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiBUY2wg0L3QtSDQv9C+0LTQtNGK0YDQttCwINC60L7QtNC40YDQsNC90LXRgtC+IOKAniVz4oCcLiIKKworIzogbGliL2NvbW1pdC50Y2w6MTQ5Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorItCh0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L/RgNC4INC/0L7RgdC70LXQtNC90LDRgtCwINC/0YDQvtCy0LXRgNC60LAg0L3QtSDQvtGC0LPQvtCy0LDRgNGPINC90LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwICIKKyLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+LlxuIgorIlxuIgorItCd0Y/QutC+0Lkg0LTRgNGD0LMg0L/RgNC+0YbQtdGBINC30LAgR2l0INC1INC/0YDQvtC80LXQvdC40Lsg0YXRgNCw0L3QuNC70LjRidC10YLQviDQvNC10LbQtNGD0LLRgNC10LzQtdC90L3Qvi4g0KHRitGB0YLQvtGP0L3QuNC10YLQviAiCisi0YLRgNGP0LHQstCwINC00LAg0LHRitC00LUg0L/RgNC+0LLQtdGA0LXQvdC+INC/0YDQtdC00Lgg0L3QvtCy0L4g0L/QvtC00LDQstCw0L3QtS5cbiIKKyJcbiIKKyLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGJ0LUg0LfQsNC/0L7Rh9C90LUg0L3QvtCy0LAg0L/RgNC+0LLQtdGA0LrQsC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKyLQndC10YHQu9C10YLQuNGC0LUg0YTQsNC50LvQvtCy0LUg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQv9C+0LTQsNCy0LDQvdC4LlxuIgorIlxuIgorItCS0YrQsiDRhNCw0LnQu9CwIOKAniVz4oCcINC40LzQsCDQutC+0L3RhNC70LjQutGC0Lgg0L/RgNC4INGB0LvQuNCy0LDQvdC1LiDQl9CwINC00LAg0LPQviDQv9C+0LTQsNC00LXRgtC1LCDRgtGA0Y/QsdCy0LAg0L/RitGA0LLQviDQtNCwICIKKyLQutC+0YDQuNCz0LjRgNCw0YLQtSDQutC+0L3RhNC70LjQutGC0LjRgtC1INC4INC00LAg0LTQvtCx0LDQstC40YLQtSDRhNCw0LnQu9CwINC60YrQvCDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKK21zZ3N0ciAiIgorItCd0LXQv9C+0LfQvdCw0YLQviDRgdGK0YHRgtC+0Y/QvdC40LUg0L3QsCDRhNCw0LnQuyDigJ4lc+KAnC5cbiIKKyJcbiIKKyLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7QtNCw0LTQtdC9INGH0YDQtdC3INGC0LXQutGD0YnQsNGC0LAg0L/RgNC+0LPRgNCw0LzQsC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTg5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCittc2dzdHIgIiIKKyLQndGP0LzQsCDQv9GA0L7QvNC10L3QuCDQt9CwINC/0L7QtNCw0LLQsNC90LUuXG4iCisiXG4iCisi0KLRgNGP0LHQstCwINC00LAg0LTQvtCx0LDQstC40YLQtSDQv9C+0L3QtSDQtdC00LjQvSDRhNCw0LnQuyDQutGK0Lwg0LjQvdC00LXQutGB0LAsINC30LAg0LTQsCDQv9C+0LTQsNC00LXRgtC1LlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMDQKK21zZ2lkICIiCisiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiXG4iCisiLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgorIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCisiLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorbXNnc3RyICIiCisi0JfQsNC00LDQudGC0LUg0LTQvtCx0YDQviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUuXG4iCisiXG4iCisi0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDRgdC70LXQtNC90LjRjyDRhNC+0YDQvNCw0YI6XG4iCisiXG4iCisi4pePINCf0YrRgNCy0Lgg0YDQtdC0OiDQvtC/0LjRgdCw0L3QuNC1INCyINC10LTQvdC+INC40LfRgNC10YfQtdC90LjQtSDQvdCwINC/0YDQvtC80Y/QvdCw0YLQsC5cbiIKKyLil48g0JLRgtC+0YDQuCDRgNC10LQ6INC/0YDQsNC30LXQvS5cbiIKKyLil48g0J7RgdGC0LDQvdCw0LvQuNGC0LUg0YDQtdC00L7QstC1OiDQvtC/0LjRiNC10YLQtSDQt9Cw0YnQviDRgdC1INC90LDQu9Cw0LPQsCDRgtCw0LfQuCDQv9GA0L7QvNGP0L3QsC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjM1Cittc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCittc2dzdHIgItCY0LfQv9GK0LvQvdGP0LLQsNC90LUg0L3QsCDQutGD0LrQsNGC0LAg0L/RgNC10LTQuCDQv9C+0LTQsNCy0LDQvdC14oCmIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNTAKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g0LUg0L7RgtGF0LLRitGA0LvQtdC90L4g0L7RgiDQutGD0LrQsNGC0LAg0L/RgNC10LTQuCDQv9C+0LTQsNCy0LDQvdC1LiIKKworIzogbGliL2NvbW1pdC50Y2w6MjY5Cittc2dpZCAiIgorIllvdSBhcmUgYWJvdXQgdG8gY29tbWl0IG9uIGEgZGV0YWNoZWQgaGVhZC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyAiCisidGhpbmcgdG8gZG8gYmVjYXVzZSBpZiB5b3Ugc3dpdGNoIHRvIGFub3RoZXIgYnJhbmNoIHlvdSB3aWxsIGxvc2UgeW91ciAiCisiY2hhbmdlcyBhbmQgaXQgY2FuIGJlIGRpZmZpY3VsdCB0byByZXRyaWV2ZSB0aGVtIGxhdGVyIGZyb20gdGhlIHJlZmxvZy4gWW91ICIKKyJzaG91bGQgcHJvYmFibHkgY2FuY2VsIHRoaXMgY29tbWl0IGFuZCBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIGNvbnRpbnVlLlxuIgorIiBcbiIKKyIgRG8geW91IHJlYWxseSB3YW50IHRvIHByb2NlZWQgd2l0aCB5b3VyIENvbW1pdD8iCittc2dzdHIgIiIKKyLQqdC1INC/0L7QtNCw0LLQsNGC0LUg0LrRitC8INC90LXRgdCy0YrRgNC30LDQvSDQstGA0YrRhS4g0KLQvtCy0LAg0LUg0L7Qv9Cw0YHQvdC+IOKAlCDQv9GA0Lgg0LjQt9GC0LXQs9C70Y/QvdC10YLQviDQvdCwINC00YDRg9CzINC60LvQvtC9ICIKKyLRidC1INC40LfQs9GD0LHQuNGC0LUg0L/RgNC+0LzQtdC90LjRgtC1INGB0LguINCh0LvQtdC0INGC0L7QstCwINC80L7QttC1INC00LAg0LUg0L3QtdCy0YrQt9C80L7QttC90L4g0LTQsCDQs9C4INCy0YrQt9GB0YLQsNC90L7QstC40YLQtSAiCisi0L7RgiDQttGD0YDQvdCw0LvQsCDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUg4oCecmVmbG9n4oCcLiDQndCw0Lkt0LLQtdGA0L7Rj9GC0L3QviDRgtGA0Y/QsdCy0LAg0LTQsCDQvtGC0LzQtdC90LjRgtC1INGC0L7QstCwICIKKyLQv9C+0LTQsNCy0LDQvdC1INC4INC00LAg0YHRitC30LTQsNC00LXRgtC1INC60LvQvtC9LCDQsiDQutC+0LnRgtC+INC00LAg0L/QvtC00LDQtNC10YLQtS5cbiIKKyIgXG4iCisi0KHQuNCz0YPRgNC90Lgg0LvQuCDRgdGC0LUsINGH0LUg0LjRgdC60LDRgtC1INC00LAg0L/QvtC00LDQtNC10YLQtSDQutGK0Lwg0L3QtdGB0LLRitGA0LfQsNC9INCy0YDRitGFPyIKKworIzogbGliL2NvbW1pdC50Y2w6MjkwCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgItCY0LfQv9GK0LvQvdGP0LLQsNC90LUg0L3QsCDQutGD0LrQsNGC0LAg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC14oCmIgorCisjOiBsaWIvY29tbWl0LnRjbDozMDUKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g0LUg0L7RgtGF0LLRitGA0LvQtdC90L4g0L7RgiDQutGD0LrQsNGC0LAg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1LiIKKworIzogbGliL2NvbW1pdC50Y2w6MzE4Cittc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC14oCmIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzQKK21zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQtNGK0YDQstC+0YLQviAod3JpdGUtdHJlZSk6IgorCisjOiBsaWIvY29tbWl0LnRjbDozMzUgbGliL2NvbW1pdC50Y2w6Mzc5IGxpYi9jb21taXQudGNsOjQwMAorbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/QvtC00LDQstCw0L3QtS4iCisKKyM6IGxpYi9jb21taXQudGNsOjM1MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC40LfQs9C70LXQttC00LAg0L/QvtCy0YDQtdC00LXQvdC+IgorCisjOiBsaWIvY29tbWl0LnRjbDozNTcKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLQndGP0LzQsCDQv9GA0L7QvNC10L3QuCDQt9CwINC/0L7QtNCw0LLQsNC90LUuXG4iCisiXG4iCisi0JIg0YLQvtCy0LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INGB0LAg0L/RgNC+0LzQtdC90Y/QvdC4INC90LjQutCw0LrQstC4INGE0LDQudC70L7QstC1LCDQsCDQuCDQvdC1INC1INC/0L7QtNCw0LLQsNC90LUg0YHRitGBICIKKyLRgdC70LjQstCw0L3QtS5cbiIKKyJcbiIKKyLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGJ0LUg0LfQsNC/0L7Rh9C90LUg0L3QvtCy0LAg0L/RgNC+0LLQtdGA0LrQsC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzY0Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICLQndGP0LzQsCDQv9GA0L7QvNC10L3QuCDQt9CwINC/0L7QtNCw0LLQsNC90LUuIgorCisjOiBsaWIvY29tbWl0LnRjbDozNzgKK21zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L/QvtC00LDQstCw0L3QtSDQvdCwINC00YrRgNCy0L7RgtC+IChjb21taXQtdHJlZSk6IgorCisjOiBsaWIvY29tbWl0LnRjbDozOTkKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUgKHVwZGF0ZS1yZWYpOiIKKworIzogbGliL2NvbW1pdC50Y2w6NDkyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgorbXNnc3RyICLQo9GB0L/QtdGI0L3QviDQv9C+0LTQsNCy0LDQvdC1ICVzOiAlcyIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE2Cittc2dpZCAiRGVsZXRlIEJyYW5jaCIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LrQu9C+0L0iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMQorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC70L7QutCw0LvQtdC9INC60LvQvtC9IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzkKK21zZ2lkICJMb2NhbCBCcmFuY2hlcyIKK21zZ3N0ciAi0JvQvtC60LDQu9C90Lgg0LrQu9C+0L3QuCIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUxCittc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSwg0YHQsNC80L4g0LDQutC+INC/0YDQvtC80LXQvdC40YLQtSDRgdCwINGB0LvQtdGC0Lgg0Lgg0LTRgNGD0LPQsNC00LUiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCittc2dzdHIgItCd0LUg0LLRgdC40YfQutC4INC/0YDQvtC80LXQvdC4INCyINC60LvQvtC90LjRgtC1INGB0LAg0YHQu9C10YLQuCDQsiDigJ4lc+KAnDoiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDRgtGA0LjQtdC90LUg0L3QsCDQutC70L7QvdC4OlxuIgorIiVzIgorCisjOiBsaWIvYmxhbWUudGNsOjczCittc2dpZCAiRmlsZSBWaWV3ZXIiCittc2dzdHIgItCf0YDQtdCz0LvQtdC0INC90LAg0YTQsNC50LvQvtCy0LUiCisKKyM6IGxpYi9ibGFtZS50Y2w6NzkKK21zZ2lkICJDb21taXQ6IgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC1OiIKKworIzogbGliL2JsYW1lLnRjbDoyODAKK21zZ2lkICJDb3B5IENvbW1pdCIKK21zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg0Cittc2dpZCAiRmluZCBUZXh0Li4uIgorbXNnc3RyICLQotGK0YDRgdC10L3QtSDQvdCwINGC0LXQutGB0YLigKYiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg4Cittc2dpZCAiR290byBMaW5lLi4uIgorbXNnc3RyICLQmtGK0Lwg0YDQtdC04oCmIgorCisjOiBsaWIvYmxhbWUudGNsOjI5NworbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCittc2dzdHIgItCf0YrQu9C90L4g0YLRitGA0YHQtdC90LUg0L3QsCDQutC+0L/QuNGA0LDQvdC1IgorCisjOiBsaWIvYmxhbWUudGNsOjMwMQorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICLQn9C+0LrQsNC30LLQsNC90LUg0L3QsCDQutC+0L3RgtC10LrRgdGC0LAg0L7RgiDQuNGB0YLQvtGA0LjRj9GC0LAiCisKKyM6IGxpYi9ibGFtZS50Y2w6MzA0Cittc2dpZCAiQmxhbWUgUGFyZW50IENvbW1pdCIKK21zZ3N0ciAi0JDQvdC+0YLQuNGA0LDQvdC1INC90LAg0YDQvtC00LjRgtC10LvRgdC60L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGxpYi9ibGFtZS50Y2w6NDY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVhZGluZyAlcy4uLiIKK21zZ3N0ciAi0KfQtdGC0LUg0YHQtSDigJ4lc+KAnOKApiIKKworIzogbGliL2JsYW1lLnRjbDo1OTQKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAi0JfQsNGA0LXQttC00LDQvdC1INC90LAg0LDQvdC+0YLQsNGG0LjQuNGC0LUg0LfQsCDQv9GA0L7RgdC70LXQtNGP0LLQsNC90LUg0L3QsCDQutC+0L/QuNGA0LDQvdC10YLQvi/Qv9GA0LXQvNC10YHRgtCy0LDQvdC10YLQvuKApiIKKworIzogbGliL2JsYW1lLnRjbDo2MTQKK21zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCittc2dzdHIgItGA0LXQtNCwINCw0L3QvtGC0LjRgNCw0L3QuCIKKworIzogbGliL2JsYW1lLnRjbDo4MDYKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICLQl9Cw0YDQtdC20LTQsNC90LUg0L3QsCDQsNC90L7RgtCw0YbQuNC40YLQtSDQt9CwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0LzQtdGB0YLQvtC/0L7Qu9C+0LbQtdC90LjQteKApiIKKworIzogbGliL2JsYW1lLnRjbDo4MDkKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAi0JDQvdC+0YLQuNGA0LDQvdC10YLQviDQt9Cw0LLRitGA0YjQuC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODM5Cittc2dpZCAiQnVzeSIKK21zZ3N0ciAi0J7Qv9C10YDQsNGG0LjRj9GC0LAg0L3QtSDQtSDQt9Cw0LLRitGA0YjQuNC70LAiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODQwCittc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGC0LXRh9C1INC/0YDQvtGG0LXRgSDQvdCwINCw0L3QvtGC0LjRgNCw0L3QtS4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODc5Cittc2dpZCAiUnVubmluZyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4uLiIKK21zZ3N0ciAi0JjQt9C/0YrQu9C90Y/QstCwINGB0LUg0YbRj9C70L7RgdGC0LXQvSDQv9GA0L7RhtC10YEg0L3QsCDQvtGC0LrRgNC40LLQsNC90LUg0L3QsCDQutC+0L/QuNGA0LDQvdC14oCmIgorCisjOiBsaWIvYmxhbWUudGNsOjk0NworbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKK21zZ3N0ciAi0JfQsNGA0LXQttC00LDQvdC1INC90LAg0LDQvdC+0YLQsNGG0LjQuOKApiIKKworIzogbGliL2JsYW1lLnRjbDoxMDAwCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAi0JDQstGC0L7RgDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTAwNAorbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgItCf0L7QtNCw0Ls6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwMDkKK21zZ2lkICJPcmlnaW5hbCBGaWxlOiIKK21zZ3N0ciAi0J/RitGA0LLQvtC90LDRh9Cw0LvQtdC9INGE0LDQudC7OiIKKworIzogbGliL2JsYW1lLnRjbDoxMDU3Cittc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDQt9CwINCy0YDRitGFIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1OiIKKworIzogbGliL2JsYW1lLnRjbDoxMTEyCittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgItCg0L7QtNC40YLQtdC70YHQutC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQviIKKworIzogbGliL2JsYW1lLnRjbDoxMTI3Cittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgorbXNnc3RyICLQoNC+0LTQuNGC0LXQu9GP0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7QutCw0LfQsNC9IgorCisjOiBsaWIvYmxhbWUudGNsOjEyNjkKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAi0J/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INC+0YI6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyNzUKK21zZ2lkICJJbiBGaWxlOiIKK21zZ3N0ciAi0JLRitCyINGE0LDQudC7OiIKKworIzogbGliL2JsYW1lLnRjbDoxMjgwCittc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgorbXNnc3RyICLQmtC+0L/QuNGA0LDQvdC+INC40LvQuCDQv9GA0LXQvNC10YHRgtC10L3QviDRgtGD0Log0L7RgjoiCisKKyM6IGxpYi9pbmRleC50Y2w6NgorbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKK21zZ3N0ciAi0JjQvdC00LXQutGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60LvRjtGH0LXQvS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MTcKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAi0JPRgNC10YjQutCwINCyINC40L3QtNC10LrRgdCwIgorCisjOiBsaWIvaW5kZXgudGNsOjE5Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCDQvdCwIEdpdC4g0JDQstGC0L7QvNCw0YLQuNGH0L3QviDRidC1INC30LDQv9C+0YfQvdC1INC90L7QstCwINC/0YDQvtCy0LXRgNC60LAgIgorItC30LAg0YHQuNC90YXRgNC+0L3QuNC30LjRgNCw0L3QtdGC0L4g0L3QsCBnaXQtZ3VpLiIKKworIzogbGliL2luZGV4LnRjbDozMAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICLQn9GA0L7QtNGK0LvQttCw0LLQsNC90LUiCisKKyM6IGxpYi9pbmRleC50Y2w6MzMKK21zZ2lkICJVbmxvY2sgSW5kZXgiCittc2dzdHIgItCe0YLQutC70Y7Rh9Cy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGxpYi9pbmRleC50Y2w6Mjk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgorbXNnc3RyICLQmNC30LLQsNC20LTQsNC90LUg0L3QsCDigJ4lc+KAnCDQvtGCINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBsaWIvaW5kZXgudGNsOjMzNworbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCittc2dzdHIgItCT0L7RgtC+0LLQvdC+0YHRgiDQt9CwINC/0L7QtNCw0LLQsNC90LUuIgorCisjOiBsaWIvaW5kZXgudGNsOjM1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBsaWIvaW5kZXgudGNsOjM4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YWdlICVkIHVudHJhY2tlZCBmaWxlcz8iCittc2dzdHIgItCU0LAg0YHQtSDQstC60LDRgNCw0YIg0LvQuCAlZCDQvdC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQsCDQsiDQuNC90LTQtdC60YHQsD8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgItCU0LAg0YHQtSDQvNCw0YXQvdCw0YIg0LvQuCDQv9GA0L7QvNC10L3QuNGC0LUg0LLRitCyINGE0LDQudC70LAg4oCeJXPigJw/IgorCisjOiBsaWIvaW5kZXgudGNsOjQzMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKK21zZ3N0ciAi0JTQsCDRgdC1INC80LDRhdC90LDRgiDQu9C4INC/0YDQvtC80LXQvdC40YLQtSDQsiDRgtC10LfQuCAlaSDRhNCw0LnQu9CwPyIKKworIzogbGliL2luZGV4LnRjbDo0MzgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyLQktGB0LjRh9C60Lgg0L/RgNC+0LzQtdC90LgsINC60L7QuNGC0L4g0L3QtSDRgdCwINCx0LjQu9C4INCy0LrQsNGA0LDQvdC4INCyINC40L3QtNC10LrRgdCwLCDRidC1INCx0YrQtNCw0YIg0LHQtdC30LLRitC30LLRgNCw0YLQvdC+ICIKKyLQt9Cw0LPRg9Cx0LXQvdC4LiIKKworIzogbGliL2luZGV4LnRjbDo0NDEKK21zZ2lkICJEbyBOb3RoaW5nIgorbXNnc3RyICLQndC40YnQviDQtNCwINC90LUg0YHQtSDQv9GA0LDQstC4IgorCisjOiBsaWIvaW5kZXgudGNsOjQ1OQorbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKK21zZ3N0ciAi0JzQsNGF0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INCyINC40LfQsdGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogbGliL2luZGV4LnRjbDo0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgJXMiCittc2dzdHIgItCc0LDRhdCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQsiDigJ4lc+KAnCIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90Lgg0LTQsNC90L3QuCDQvtGCIEdpdDogJXMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDIKK21zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAi0JHRgNC+0Lkg0L3QtdC/0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0MworbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgorbXNnc3RyICLQlNC40YHQutC+0LLQviDQv9GA0L7RgdGC0YDQsNC90YHRgtCy0L4g0LfQsNC10YLQviDQvtGCINC90LXQv9Cw0LrQtdGC0LjRgNCw0L3QuCDQvtCx0LXQutGC0LgiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKK21zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCittc2dzdHIgItCR0YDQvtC5INC/0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NQorbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKK21zZ3N0ciAi0JHRgNC+0Lkg0L/QsNC60LXRgtC4IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLQlNC40YHQutC+0LLQviDQv9GA0L7RgdGC0YDQsNC90YHRgtCy0L4g0LfQsNC10YLQviDQvtGCINC/0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NworbXNnaWQgIlBhY2tlZCBvYmplY3RzIHdhaXRpbmcgZm9yIHBydW5pbmciCittc2dzdHIgItCf0LDQutC10YLQuNGA0LDQvdC4INC+0LHQtdC60YLQuCDQt9CwINC+0LrQsNGB0YLRgNGP0L3QtSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OAorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgItCk0LDQudC70L7QstC1INC30LAg0LHQvtC60LvRg9C60LAiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKK21zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLQmtC+0LzQv9GA0LXRgdC40YDQsNC90LUg0L3QsCDQsdCw0LfQsNGC0LAg0YEg0LTQsNC90L3QuCDQt9CwINC+0LHQtdC60YLQuNGC0LUiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKK21zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINCx0LDQt9Cw0YLQsCDRgSDQtNCw0L3QvdC4INC30LAg0L7QsdC10LrRgtC40YLQtSDRgSDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDigJ5mc2NrLW9iamVjdHPigJwiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2UuXG4iCisiXG4iCisiQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCittc2dzdHIgIiIKKyLQkiDRgtC+0LLQsCDRhdGA0LDQvdC40LvQuNGJ0LUg0LIg0LzQvtC80LXQvdGC0LAg0LjQvNCwINC60YrQvCAlaSDQvdC10L/QsNC60LXRgtC40YDQsNC90Lgg0L7QsdC10LrRgtC4LlxuIgorIlxuIgorItCX0LAg0LTQvtCx0YDQsCDQv9GA0L7QuNC30LLQvtC00LjRgtC10LvQvdC+0YHRgiDRgdC1INC/0YDQtdC/0L7RgNGK0YfQstCwINC00LAg0LrQvtC80L/RgNC10YHQuNGA0LDRgtC1INCx0LDQt9Cw0YLQsCDRgSDQtNCw0L3QvdC4INC30LAgIgorItC+0LHQtdC60YLQuNGC0LUuXG4iCisiXG4iCisi0JTQsCDRgdC1INC30LDQv9C+0YfQvdC1INC70Lgg0LrQvtC80L/RgNC10YHQuNGA0LDQvdC10YLQvj8iCisKKyM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTYKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAi0LPRgNC10YjQutCwIgorCisjOiBsaWIvZXJyb3IudGNsOjM2Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAi0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSIKKworIzogbGliL2Vycm9yLnRjbDo5NgorbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCittc2dzdHIgItCf0YDQtdC00Lgg0LTQsCDQvNC+0LbQtdGC0LUg0LTQsCDQv9C+0LTQsNC00LXRgtC1LCDQutC+0YDQuNCz0LjRgNCw0LnRgtC1INCz0L7RgNC90LjRgtC1INCz0YDQtdGI0LrQuC4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMKK21zZ2lkICIiCisiQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyLQn9C+INCy0YDQtdC80LUg0L3QsCDQv9C+0L/RgNCw0LLRj9C90LUg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LvQuNCy0LDQvdC1LlxuIgorIlxuIgorItCi0YDRj9Cx0LLQsCDQtNCwINC30LDQstGK0YDRiNC40YLQtSDQv9C+0L/RgNCw0LLRj9C90LXRgtC+INC90LAg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1LCDQv9GA0LXQtNC4INC00LAg0LfQsNC/0L7Rh9C90LXRgtC1ICIKKyLRgdC70LjQstCw0L3QtS5cbiIKKworIzogbGliL21lcmdlLnRjbDoyNworbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisi0J/QvtGB0LvQtdC00L3QviDRg9GB0YLQsNC90L7QstC10L3QvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1INC90LUg0L7RgtCz0L7QstCw0YDRjyDQvdCwINGC0L7QstCwINCyINGF0YDQsNC90LjQu9C40YnQtdGC0L4uXG4iCisiXG4iCisi0J3Rj9C60L7QuSDQtNGA0YPQsyDQv9GA0L7RhtC10YEg0LfQsCBHaXQg0LUg0L/RgNC+0LzQtdC90LjQuyDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC80LXQttC00YPQstGA0LXQvNC10L3QvdC+LiDQodGK0YHRgtC+0Y/QvdC40LXRgtC+ICIKKyLRgtGA0Y/QsdCy0LAg0LTQsCDQsdGK0LTQtSDQv9GA0L7QstC10YDQtdC90L4sINC/0YDQtdC00Lgg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INGB0LvQuNCy0LDQvdC1LlxuIgorIlxuIgorItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0YnQtSDQt9Cw0L/QvtGH0L3QtSDQvdC+0LLQsCDQv9GA0L7QstC10YDQutCwLlxuIgorIlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgorIlxuIgorIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgorIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAiIgorItCSINC80L7QvNC10L3RgtCwINGC0LXRh9C1INGB0LvQuNCy0LDQvdC1LCDQvdC+INC40LzQsCDQutC+0L3RhNC70LjQutGC0LguXG4iCisiXG4iCisi0J/QvtCz0LvQtdC00L3QtdGC0LUg0YTQsNC50LvQsCDigJ4lc+KAnC5cbiIKKyJcbiIKKyLQotGA0Y/QsdCy0LAg0LTQsCDQutC+0YDQuNCz0LjRgNCw0YLQtSDQutC+0L3RhNC70LjQutGC0LjRgtC1INCyINC90LXQs9C+LCDQtNCwINCz0L4g0LTQvtCx0LDQstC40YLQtSDQutGK0Lwg0LjQvdC00LXQutGB0LAg0Lgg0LTQsCAiCisi0LfQsNCy0YrRgNGI0LjRgtC1INGC0LXQutGD0YnQvtGC0L4g0YHQu9C40LLQsNC90LUg0YfRgNC10Lcg0L/QvtC00LDQstCw0L3QtS4g0KfQsNC6INGC0L7Qs9Cw0LLQsCDQvNC+0LbQtSDQtNCwINC30LDQv9C+0YfQvdC10YLQtSDQvdC+0LLQviAiCisi0YHQu9C40LLQsNC90LUuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhbmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaXMgbW9kaWZpZWQuXG4iCisiXG4iCisiWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyAiCisid2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgorbXNnc3RyICIiCisi0JIg0LzQvtC80LXQvdGC0LAg0YLQtdGH0LUg0L/QvtC00LDQstCw0L3QtS5cbiIKKyJcbiIKKyLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0LUg0L/RgNC+0LzQtdC90LXQvS5cbiIKKyJcbiIKKyLQotGA0Y/QsdCy0LAg0LTQsCDQt9Cw0LLRitGA0YjQuNGC0LUg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1LCDQv9GA0LXQtNC4INC00LAg0LfQsNC/0L7Rh9C90LXRgtC1INGB0LvQuNCy0LDQvdC1LiDQotCw0LrQsCDRidC1ICIKKyLQvNC+0LbQtdGC0LUg0LvQtdGB0L3QviDQtNCwINC/0YDQtdGD0YHRgtCw0L3QvtCy0LjRgtC1INGB0LvQuNCy0LDQvdC10YLQviwg0LDQutC+INCy0YrQt9C90LjQutC90LUg0L3Rg9C20LTQsC5cbiIKKworIzogbGliL21lcmdlLnRjbDoxMDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBvZiAlcyIKK21zZ3N0ciAiJXMg0L7RgiDQvtCx0YnQviAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LUg0L3QsCDigJ4lc+KAnCDQuCDigJ4lc+KAnOKApiIKKworIzogbGliL21lcmdlLnRjbDoxMzMKK21zZ2lkICJNZXJnZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiIKK21zZ3N0ciAi0KHQu9C40LLQsNC90LXRgtC+INC30LDQstGK0YDRiNC4INGD0YHQv9C10YjQvdC+LiIKKworIzogbGliL21lcmdlLnRjbDoxMzUKK21zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1IOKAlCDQuNC80LAg0LrQvtC90YTQu9C40LrRgtC4INC30LAg0LrQvtGA0LjQs9C40YDQsNC90LUuIgorCisjOiBsaWIvbWVyZ2UudGNsOjE2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIEludG8gJXMiCittc2dzdHIgItCh0LvQuNCy0LDQvdC1INCyIOKAniVz4oCcIgorCisjOiBsaWIvbWVyZ2UudGNsOjE3OQorbXNnaWQgIlJldmlzaW9uIFRvIE1lcmdlIgorbXNnc3RyICLQktC10YDRgdC40Y8g0LfQsCDRgdC70LjQstCw0L3QtSIKKworIzogbGliL21lcmdlLnRjbDoyMTQKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorItCf0L7Qv9GA0LDQstGP0L3QtdGC0L4g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQtdGD0YHRgtCw0L3QvtCy0LXQvdC+LlxuIgorIlxuIgorItCi0YDRj9Cx0LLQsCDQtNCwINC30LDQstGK0YDRiNC40YLQtSDQv9C+0L/RgNCw0LLQutCw0YLQsCDQvdCwINGC0L7QstCwINC/0L7QtNCw0LLQsNC90LUuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjI0Cittc2dpZCAiIgorIkFib3J0IG1lcmdlP1xuIgorIlxuIgorIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorbXNnc3RyICIiCisi0JTQsCDRgdC1INC/0YDQtdGD0YHRgtCw0L3QvtCy0Lgg0LvQuCDRgdC70LjQstCw0L3QtdGC0L4/XG4iCisiXG4iCisi0JIg0YLQsNC60YrQsiDRgdC70YPRh9Cw0Lkg4peP0JLQodCY0KfQmtCY4pePINC90LXQv9C+0LTQsNC00LXQvdC4INC/0YDQvtC80LXQvdC4INGJ0LUg0LHRitC00LDRgiDQsdC10LfQstGK0LfQstGA0LDRgtC90L4g0LfQsNCz0YPQsdC10L3QuC5cbiIKKyJcbiIKKyLQndCw0LjRgdGC0LjQvdCwINC70Lgg0LTQsCDRgdC1INC/0YDQtdGD0YHRgtCw0L3QvtCy0Lgg0YHQu9C40LLQsNC90LXRgtC+PyIKKworIzogbGliL21lcmdlLnRjbDoyMzAKK21zZ2lkICIiCisiUmVzZXQgY2hhbmdlcz9cbiIKKyJcbiIKKyJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCittc2dzdHIgIiIKKyLQlNCwINGB0LUg0LfQsNC90YPQu9GP0YIg0LvQuCDQv9GA0L7QvNC10L3QuNGC0LU/XG4iCisiXG4iCisi0JIg0YLQsNC60YrQsiDRgdC70YPRh9Cw0Lkg4peP0JLQodCY0KfQmtCY4pePINC90LXQv9C+0LTQsNC00LXQvdC4INC/0YDQvtC80LXQvdC4INGJ0LUg0LHRitC00LDRgiDQsdC10LfQstGK0LfQstGA0LDRgtC90L4g0LfQsNCz0YPQsdC10L3QuC5cbiIKKyJcbiIKKyLQndCw0LjRgdGC0LjQvdCwINC70Lgg0LTQsCDRgdC1INC30LDQvdGD0LvRj9GCINC/0YDQvtC80LXQvdC40YLQtT8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjQxCittc2dpZCAiQWJvcnRpbmciCittc2dzdHIgItCf0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSIKKworIzogbGliL21lcmdlLnRjbDoyNDEKK21zZ2lkICJmaWxlcyByZXNldCIKK21zZ3N0ciAi0YTQsNC50LvQsCDRgdGK0YEg0LfQsNC90YPQu9C10L3QuCDQv9GA0L7QvNC10L3QuCIKKworIzogbGliL21lcmdlLnRjbDoyNjkKK21zZ2lkICJBYm9ydCBmYWlsZWQuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1LiIKKworIzogbGliL21lcmdlLnRjbDoyNzEKK21zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCittc2dzdHIgItCj0YHQv9C10YjQvdC+INC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtS4g0JPQvtGC0L7QstC90L7RgdGCINC30LAg0YHQu9C10LTQstCw0YnQviDQtNC10LnRgdGC0LLQuNC1LiIKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vZGUucG8gYi9naXQtZ3VpL3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZWJmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL2RlLnBvCkBAIC0wLDAgKzEsMjU5MiBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHRvIEdlcm1hbi4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZSwgZXQgYWwuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQgcGFja2FnZS4KKyMgQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPiwgMjAwNworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAyMjoyMiswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMS0yNiAyMjoyNSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR2VybWFuXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3OTMgZ2l0LWd1aS5zaDo4MDcgZ2l0LWd1aS5zaDo4MjAgZ2l0LWd1aS5zaDo5MDMKKyM6IGdpdC1ndWkuc2g6OTIyCittc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCittc2dzdHIgImdpdC1ndWk6IFByb2dyYW1tZmVobGVyIgorCisjOiBnaXQtZ3VpLnNoOjc0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgorbXNnc3RyICJVbmfDvGx0aWdlIFplaWNoZW5zYXR6LUFuZ2FiZSBpbiAlczoiCisKKyM6IGdpdC1ndWkuc2g6Nzc5Cittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICJQcm9ncmFtbXNjaHJpZnRhcnQiCisKKyM6IGdpdC1ndWkuc2g6NzgwCittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgIlZlcmdsZWljaC1TY2hyaWZ0YXJ0IgorCisjOiBnaXQtZ3VpLnNoOjc5NAorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAiR2l0IGthbm4gaW0gUEFUSCBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4uIgorCisjOiBnaXQtZ3VpLnNoOjgyMQorbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgorbXNnc3RyICJHaXQgVmVyc2lvbnNhbmdhYmUga2FubiBuaWNodCBlcmthbm50IHdlcmRlbjoiCisKKyM6IGdpdC1ndWkuc2g6ODM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIlxuIgorIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCisiXG4iCisiJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgorIlxuIgorIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCittc2dzdHIgIiIKKyJEaWUgVmVyc2lvbiB2b24gR2l0IGthbm4gbmljaHQgYmVzdGltbXQgd2VyZGVuLlxuIgorIlxuIgorIsK7JXPCqyBiZWhhdXB0ZXQsIGVzIHNlaSBWZXJzaW9uIMK7JXPCqy5cbiIKKyJcbiIKKyIlcyBiZW7DtnRpZ3QgbWluZGVzdGVucyBHaXQgMS41LjAgb2RlciBow7ZoZXIuXG4iCisiXG4iCisiU29sbCBhbmdlbm9tbWVuIHdlcmRlbiwgwrslc8KrIHNlaSBWZXJzaW9uIDEuNS4wP1xuIgorCisjOiBnaXQtZ3VpLnNoOjExMjgKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgIkdpdC1WZXJ6ZWljaG5pcyBuaWNodCBnZWZ1bmRlbjoiCisKKyM6IGdpdC1ndWkuc2g6MTE0NgorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIiIKKyJFcyBrb25udGUgbmljaHQgaW4gZGFzIG9iZXJzdGUgVmVyemVpY2huaXMgZGVyIEFyYmVpdHNrb3BpZSBnZXdlY2hzZWx0ICIKKyJ3ZXJkZW46IgorCisjOiBnaXQtZ3VpLnNoOjExNTQKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgIkJsb8OfZXMgUHJvamVrdGFyY2hpdiBrYW5uIG5pY2h0IGJlbnV0enQgd2VyZGVuOiIKKworIzogZ2l0LWd1aS5zaDoxMTYyCittc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIktlaW4gQXJiZWl0c3ZlcnplaWNobmlzIgorCisjOiBnaXQtZ3VpLnNoOjEzMzQgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKK21zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgorbXNnc3RyICJEYXRlaXN0YXR1cyBha3R1YWxpc2llcmVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjEzOTAKK21zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgorbXNnc3RyICJOYWNoIGdlw6RuZGVydGVuIERhdGVpZW4gc3VjaGVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE0NTQKK21zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICJBdWZydWZlbiBkZXIgRWludHJhZ2VuLVZvcmJlcmVpdGVuLUtvbnRyb2xsZSAowrtwcmVwYXJlLWNvbW1pdCBob29rwqspLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE0NzEKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgorbXNnc3RyICIiCisiRWludHJhZ2VuIGFiZ2VsZWhudCBkdXJjaCBFaW50cmFnZW4tVm9yYmVyZWl0ZW4tS29udHJvbGxlICjCu3ByZXBhcmUtY29tbWl0ICIKKyJob29rwqspLiIKKworIzogZ2l0LWd1aS5zaDoxNjI5IGxpYi9icm93c2VyLnRjbDoyNDYKK21zZ2lkICJSZWFkeS4iCittc2dzdHIgIkJlcmVpdC4iCisKKyM6IGdpdC1ndWkuc2g6MTc4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCittc2dzdHIgIk51ciAlcyB2b24gJXMgRGF0ZWllbiB3ZXJkZW4gYW5nZXplaWd0LiIKKworIzogZ2l0LWd1aS5zaDoxOTEzCittc2dpZCAiVW5tb2RpZmllZCIKK21zZ3N0ciAiVW52ZXLDpG5kZXJ0IgorCisjOiBnaXQtZ3VpLnNoOjE5MTUKK21zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiVmVyw6RuZGVydCwgbmljaHQgYmVyZWl0Z2VzdGVsbHQiCisKKyM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAiQmVyZWl0Z2VzdGVsbHQgenVtIEVpbnRyYWdlbiIKKworIzogZ2l0LWd1aS5zaDoxOTE3IGdpdC1ndWkuc2g6MTkyNQorbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJUZWlsd2Vpc2UgYmVyZWl0Z2VzdGVsbHQgenVtIEVpbnRyYWdlbiIKKworIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICJCZXJlaXRnZXN0ZWxsdCB6dW0gRWludHJhZ2VuLCBmZWhsZW5kIgorCisjOiBnaXQtZ3VpLnNoOjE5MjAKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiRGF0ZWl0eXAgZ2XDpG5kZXJ0LCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKKworIzogZ2l0LWd1aS5zaDoxOTIxCittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKK21zZ3N0ciAiRGF0ZWl0eXAgZ2XDpG5kZXJ0LCBiZXJlaXRnZXN0ZWxsdCIKKworIzogZ2l0LWd1aS5zaDoxOTIzCittc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJOaWNodCB1bnRlciBWZXJzaW9uc2tvbnRyb2xsZSwgbmljaHQgYmVyZWl0Z2VzdGVsbHQiCisKKyM6IGdpdC1ndWkuc2g6MTkyOAorbXNnaWQgIk1pc3NpbmciCittc2dzdHIgIkZlaGxlbmQiCisKKyM6IGdpdC1ndWkuc2g6MTkyOQorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAiQmVyZWl0Z2VzdGVsbHQgenVtIEzDtnNjaGVuIgorCisjOiBnaXQtZ3VpLnNoOjE5MzAKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIkJlcmVpdGdlc3RlbGx0IHp1bSBMw7ZzY2hlbiwgdHJvdHpkZW0gdm9yaGFuZGVuIgorCisjOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKKyM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJLb25mbGlrdGF1ZmzDtnN1bmcgbsO2dGlnIgorCisjOiBnaXQtZ3VpLnNoOjE5NzIKK21zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICJHaXRrIHdpcmQgZ2VzdGFydGV0Li4uIGJpdHRlIHdhcnRlbi4iCisKKyM6IGdpdC1ndWkuc2g6MTk4NAorbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgorbXNnc3RyICJHaXRrIGthbm4gaW0gUEFUSCBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4uIgorCisjOiBnaXQtZ3VpLnNoOjIwNDMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiwrtHaXQgZ3Vpwqsga2FubiBpbSBQQVRIIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4iCisKKyM6IGdpdC1ndWkuc2g6MjQ1NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2Cittc2dpZCAiUmVwb3NpdG9yeSIKK21zZ3N0ciAiUHJvamVrdGFyY2hpdiIKKworIzogZ2l0LWd1aS5zaDoyNDU2Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAiQmVhcmJlaXRlbiIKKworIzogZ2l0LWd1aS5zaDoyNDU4IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlp3ZWlnIgorCisjOiBnaXQtZ3VpLnNoOjI0NjEgbGliL2Nob29zZV9yZXYudGNsOjU0OAorbXNnaWQgIkNvbW1pdEBAbm91biIKK21zZ3N0ciAiVmVyc2lvbiIKKworIzogZ2l0LWd1aS5zaDoyNDY0IGxpYi9tZXJnZS50Y2w6MTIxIGxpYi9tZXJnZS50Y2w6MTUwIGxpYi9tZXJnZS50Y2w6MTY4Cittc2dpZCAiTWVyZ2UiCittc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiIKKworIzogZ2l0LWd1aS5zaDoyNDY1IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKK21zZ2lkICJSZW1vdGUiCittc2dzdHIgIkV4dGVybmUgQXJjaGl2ZSIKKworIzogZ2l0LWd1aS5zaDoyNDY4Cittc2dpZCAiVG9vbHMiCittc2dzdHIgIldlcmt6ZXVnZSIKKworIzogZ2l0LWd1aS5zaDoyNDc3Cittc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCittc2dzdHIgIkFyYmVpdHNrb3BpZSBpbSBEYXRlaW1hbmFnZXIiCisKKyM6IGdpdC1ndWkuc2g6MjQ4MworbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgorbXNnc3RyICJBa3R1ZWxsZW4gWndlaWcgZHVyY2hibMOkdHRlcm4iCisKKyM6IGdpdC1ndWkuc2g6MjQ4NworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCittc2dzdHIgIkVpbmVuIFp3ZWlnIGR1cmNoYmzDpHR0ZXJuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI0OTIKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICJBa3R1ZWxsZW4gWndlaWcgZGFyc3RlbGxlbiIKKworIzogZ2l0LWd1aS5zaDoyNDk2Cittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKK21zZ3N0ciAiQWxsZSBad2VpZ2UgZGFyc3RlbGxlbiIKKworIzogZ2l0LWd1aS5zaDoyNTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCittc2dzdHIgIlp3ZWlnIMK7JXPCqyBkdXJjaGJsw6R0dGVybiIKKworIzogZ2l0LWd1aS5zaDoyNTA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKK21zZ3N0ciAiSGlzdG9yaWUgdm9uIMK7JXPCqyBkYXJzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjI1MTAgbGliL2RhdGFiYXNlLnRjbDoyNyBsaWIvZGF0YWJhc2UudGNsOjY3Cittc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKK21zZ3N0ciAiRGF0ZW5iYW5rc3RhdGlzdGlrIgorCisjOiBnaXQtZ3VpLnNoOjI1MTMgbGliL2RhdGFiYXNlLnRjbDozNAorbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICJEYXRlbmJhbmsga29tcHJpbWllcmVuIgorCisjOiBnaXQtZ3VpLnNoOjI1MTYKK21zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCittc2dzdHIgIkRhdGVuYmFuayDDvGJlcnByw7xmZW4iCisKKyM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAiRGVza3RvcC1JY29uIGVyc3RlbGxlbiIKKworIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCittc2dpZCAiUXVpdCIKK21zZ3N0ciAiQmVlbmRlbiIKKworIzogZ2l0LWd1aS5zaDoyNTQ3Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAiUsO8Y2tnw6RuZ2lnIgorCisjOiBnaXQtZ3VpLnNoOjI1NTAKK21zZ2lkICJSZWRvIgorbXNnc3RyICJXaWVkZXJob2xlbiIKKworIzogZ2l0LWd1aS5zaDoyNTU0IGdpdC1ndWkuc2g6MzEwOQorbXNnaWQgIkN1dCIKK21zZ3N0ciAiQXVzc2NobmVpZGVuIgorCisjOiBnaXQtZ3VpLnNoOjI1NTcgZ2l0LWd1aS5zaDozMTEyIGdpdC1ndWkuc2g6MzE4NiBnaXQtZ3VpLnNoOjMyNTkKKyM6IGxpYi9jb25zb2xlLnRjbDo2OQorbXNnaWQgIkNvcHkiCittc2dzdHIgIktvcGllcmVuIgorCisjOiBnaXQtZ3VpLnNoOjI1NjAgZ2l0LWd1aS5zaDozMTE1Cittc2dpZCAiUGFzdGUiCittc2dzdHIgIkVpbmbDvGdlbiIKKworIzogZ2l0LWd1aS5zaDoyNTYzIGdpdC1ndWkuc2g6MzExOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzgKK21zZ2lkICJEZWxldGUiCittc2dzdHIgIkzDtnNjaGVuIgorCisjOiBnaXQtZ3VpLnNoOjI1NjcgZ2l0LWd1aS5zaDozMTIyIGdpdC1ndWkuc2g6MzI2MyBsaWIvY29uc29sZS50Y2w6NzEKK21zZ2lkICJTZWxlY3QgQWxsIgorbXNnc3RyICJBbGxlIGF1c3fDpGhsZW4iCisKKyM6IGdpdC1ndWkuc2g6MjU3NgorbXNnaWQgIkNyZWF0ZS4uLiIKK21zZ3N0ciAiRXJzdGVsbGVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1ODIKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAiVW1zdGVsbGVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1ODgKK21zZ2lkICJSZW5hbWUuLi4iCittc2dzdHIgIlVtYmVuZW5uZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU5MworbXNnaWQgIkRlbGV0ZS4uLiIKK21zZ3N0ciAiTMO2c2NoZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU5OAorbXNnaWQgIlJlc2V0Li4uIgorbXNnc3RyICJadXLDvGNrc2V0emVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI2MDgKK21zZ2lkICJEb25lIgorbXNnc3RyICJGZXJ0aWciCisKKyM6IGdpdC1ndWkuc2g6MjYxMAorbXNnaWQgIkNvbW1pdEBAdmVyYiIKK21zZ3N0ciAiRWludHJhZ2VuIgorCisjOiBnaXQtZ3VpLnNoOjI2MTkgZ2l0LWd1aS5zaDozMDUwCittc2dpZCAiTmV3IENvbW1pdCIKK21zZ3N0ciAiTmV1ZSBWZXJzaW9uIgorCisjOiBnaXQtZ3VpLnNoOjI2MjcgZ2l0LWd1aS5zaDozMDU3Cittc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCittc2dzdHIgIkxldHp0ZSBuYWNoYmVzc2VybiIKKworIzogZ2l0LWd1aS5zaDoyNjM3IGdpdC1ndWkuc2g6MzAxMSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjk5Cittc2dpZCAiUmVzY2FuIgorbXNnc3RyICJOZXUgbGFkZW4iCisKKyM6IGdpdC1ndWkuc2g6MjY0MworbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKK21zZ3N0ciAiWnVtIEVpbnRyYWdlbiBiZXJlaXRzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjI2NDkKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAiR2XDpG5kZXJ0ZSBEYXRlaWVuIGJlcmVpdHN0ZWxsZW4iCisKKyM6IGdpdC1ndWkuc2g6MjY1NQorbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCittc2dzdHIgIkF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgorCisjOiBnaXQtZ3VpLnNoOjI2NjEgbGliL2luZGV4LnRjbDo0MTIKK21zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKK21zZ3N0ciAiw4RuZGVydW5nZW4gdmVyd2VyZmVuIgorCisjOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQorbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgorbXNnc3RyICJXZW5pZ2VyIFplaWxlbiBhbnplaWdlbiIKKworIzogZ2l0LWd1aS5zaDoyNjczIGdpdC1ndWkuc2g6MzMxNCBnaXQtZ3VpLnNoOjMzNDUKK21zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKK21zZ3N0ciAiTWVociBaZWlsZW4gYW56ZWlnZW4iCisKKyM6IGdpdC1ndWkuc2g6MjY4MCBnaXQtZ3VpLnNoOjMwMjQgZ2l0LWd1aS5zaDozMTMzCittc2dpZCAiU2lnbiBPZmYiCittc2dzdHIgIkFiemVpY2huZW4iCisKKyM6IGdpdC1ndWkuc2g6MjY5NgorbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgorbXNnc3RyICJMb2thbGVzIFp1c2FtbWVuZsO8aHJlbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzAxCittc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCittc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBhYmJyZWNoZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjcxMyBnaXQtZ3VpLnNoOjI3NDEKK21zZ2lkICJBZGQuLi4iCittc2dzdHIgIkhpbnp1ZsO8Z2VuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MTcKK21zZ2lkICJQdXNoLi4uIgorbXNnc3RyICJWZXJzZW5kZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjcyMQorbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCittc2dzdHIgIlp3ZWlnIGzDtnNjaGVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MzEgZ2l0LWd1aS5zaDozMjkyCittc2dpZCAiT3B0aW9ucy4uLiIKK21zZ3N0ciAiT3B0aW9uZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc0MgorbXNnaWQgIlJlbW92ZS4uLiIKK21zZ3N0ciAiRW50ZmVybmVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MAorbXNnaWQgIkhlbHAiCittc2dzdHIgIkhpbGZlIgorCisjOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3V0ICVzIgorbXNnc3RyICLDnGJlciAlcyIKKworIzogZ2l0LWd1aS5zaDoyNzgzCittc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCittc2dzdHIgIk9ubGluZS1Eb2t1bWVudGF0aW9uIgorCisjOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Cittc2dpZCAiU2hvdyBTU0ggS2V5IgorbXNnc3RyICJTU0gtU2NobMO8c3NlbCBhbnplaWdlbiIKKworIzogZ2l0LWd1aS5zaDoyODkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJGZWhsZXI6IFZlcnplaWNobmlzIMK7JXPCqyBrYW5uIG5pY2h0IGdlbGVzZW4gd2VyZGVuOiBEYXRlaSBvZGVyIFZlcnplaWNobmlzICIKKyJuaWNodCBnZWZ1bmRlbiIKKworIzogZ2l0LWd1aS5zaDoyOTI2Cittc2dpZCAiQ3VycmVudCBCcmFuY2g6IgorbXNnc3RyICJBa3R1ZWxsZXIgWndlaWc6IgorCisjOiBnaXQtZ3VpLnNoOjI5NDcKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICJCZXJlaXRzdGVsbHVuZyAoenVtIEVpbnRyYWdlbikiCisKKyM6IGdpdC1ndWkuc2g6Mjk2NworbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCittc2dzdHIgIk5pY2h0IGJlcmVpdGdlc3RlbGx0ZSDDhG5kZXJ1bmdlbiIKKworIzogZ2l0LWd1aS5zaDozMDE3Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAiQWxsZXMgYmVyZWl0c3RlbGxlbiIKKworIzogZ2l0LWd1aS5zaDozMDM2IGxpYi90cmFuc3BvcnQudGNsOjEwNCBsaWIvdHJhbnNwb3J0LnRjbDoxOTMKK21zZ2lkICJQdXNoIgorbXNnc3RyICJWZXJzZW5kZW4iCisKKyM6IGdpdC1ndWkuc2g6MzA3MQorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJFcnN0ZSBWZXJzaW9uc2Jlc2NocmVpYnVuZzoiCisKKyM6IGdpdC1ndWkuc2g6MzA3MgorbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJOYWNoZ2ViZXNzZXJ0ZSBCZXNjaHJlaWJ1bmc6IgorCisjOiBnaXQtZ3VpLnNoOjMwNzMKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJOYWNoZ2ViZXNzZXJ0ZSBlcnN0ZSBCZXNjaHJlaWJ1bmc6IgorCisjOiBnaXQtZ3VpLnNoOjMwNzQKK21zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTmFjaGdlYmVzc2VydGUgWnVzYW1tZW5mw7xocnVuZ3MtQmVzY2hyZWlidW5nOiIKKworIzogZ2l0LWd1aS5zaDozMDc1Cittc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1CZXNjaHJlaWJ1bmc6IgorCisjOiBnaXQtZ3VpLnNoOjMwNzYKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlZlcnNpb25zYmVzY2hyZWlidW5nOiIKKworIzogZ2l0LWd1aS5zaDozMTI1IGdpdC1ndWkuc2g6MzI2NyBsaWIvY29uc29sZS50Y2w6NzMKK21zZ2lkICJDb3B5IEFsbCIKK21zZ3N0ciAiQWxsZSBrb3BpZXJlbiIKKworIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0Cittc2dpZCAiRmlsZToiCittc2dzdHIgIkRhdGVpOiIKKworIzogZ2l0LWd1aS5zaDozMjU1Cittc2dpZCAiUmVmcmVzaCIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlbiIKKworIzogZ2l0LWd1aS5zaDozMjc2Cittc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICJTY2hyaWZ0Z3LDtsOfZSB2ZXJrbGVpbmVybiIKKworIzogZ2l0LWd1aS5zaDozMjgwCittc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICJTY2hyaWZ0Z3LDtsOfZSB2ZXJncsO2w59lcm4iCisKKyM6IGdpdC1ndWkuc2g6MzI4OCBsaWIvYmxhbWUudGNsOjI4MQorbXNnaWQgIkVuY29kaW5nIgorbXNnc3RyICJaZWljaGVua29kaWVydW5nIgorCisjOiBnaXQtZ3VpLnNoOjMyOTkKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgIktvbnRleHQgYW53ZW5kZW4vdW1rZWhyZW4iCisKKyM6IGdpdC1ndWkuc2g6MzMwNAorbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKK21zZ3N0ciAiWmVpbGUgYW53ZW5kZW4vdW1rZWhyZW4iCisKKyM6IGdpdC1ndWkuc2g6MzMyMworbXNnaWQgIlJ1biBNZXJnZSBUb29sIgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnIgorCisjOiBnaXQtZ3VpLnNoOjMzMjgKK21zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCittc2dzdHIgIkV4dGVybmUgVmVyc2lvbiBiZW51dHplbiIKKworIzogZ2l0LWd1aS5zaDozMzMyCittc2dpZCAiVXNlIExvY2FsIFZlcnNpb24iCittc2dzdHIgIkxva2FsZSBWZXJzaW9uIGJlbnV0emVuIgorCisjOiBnaXQtZ3VpLnNoOjMzMzYKK21zZ2lkICJSZXZlcnQgVG8gQmFzZSIKK21zZ3N0ciAiVXJzcHLDvG5nbGljaGUgVmVyc2lvbiBiZW51dHplbiIKKworIzogZ2l0LWd1aS5zaDozMzU0Cittc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiRGllc2Ugw4RuZGVydW5nZW4gaW0gVW50ZXJtb2R1bCBkYXJzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjMzNTgKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJBa3R1ZWxsZW4gWndlaWcgaW0gVW50ZXJtb2R1bCBkYXJzdGVsbGVuIgorCisjOiBnaXQtZ3VpLnNoOjMzNjIKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIkFsbGUgWndlaWdlIGltIFVudGVybW9kdWwgZGFyc3RlbGxlbiIKKworIzogZ2l0LWd1aS5zaDozMzY3Cittc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJHaXQgZ3VpIGltIFVudGVybW9kdWwgc3RhcnRlbiIKKworIzogZ2l0LWd1aS5zaDozMzg5Cittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICJLb250ZXh0IGF1cyBCZXJlaXRzdGVsbHVuZyBoZXJhdXNuZWhtZW4iCisKKyM6IGdpdC1ndWkuc2g6MzM5MQorbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCittc2dzdHIgIlplaWxlbiBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKKworIzogZ2l0LWd1aS5zaDozMzkzCittc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgorbXNnc3RyICJaZWlsZSBhdXMgZGVyIEJlcmVpdHN0ZWxsdW5nIGhlcmF1c25laG1lbiIKKworIzogZ2l0LWd1aS5zaDozMzk2Cittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICJLb250ZXh0IHp1ciBCZXJlaXRzdGVsbHVuZyBoaW56dWbDvGdlbiIKKworIzogZ2l0LWd1aS5zaDozMzk4Cittc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKK21zZ3N0ciAiWmVpbGVuIHp1ciBCZXJlaXRzdGVsbHVuZyBoaW56dWbDvGdlbiIKKworIzogZ2l0LWd1aS5zaDozNDAwCittc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgorbXNnc3RyICJaZWlsZSB6dXIgQmVyZWl0c3RlbGx1bmcgaGluenVmw7xnZW4iCisKKyM6IGdpdC1ndWkuc2g6MzQyNAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiSW5pdGlhbGlzaWVyZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MzU0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJQb3NzaWJsZSBlbnZpcm9ubWVudCBpc3N1ZXMgZXhpc3QuXG4iCisiXG4iCisiVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHByb2JhYmx5XG4iCisiZ29pbmcgdG8gYmUgaWdub3JlZCBieSBhbnkgR2l0IHN1YnByb2Nlc3MgcnVuXG4iCisiYnkgJXM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJNw7ZnbGljaGVyd2Vpc2UgZ2lidCBlcyBQcm9ibGVtZSBtaXQgbWFuY2hlbiBVbWdlYnVuZ3N2YXJpYWJsZW4uXG4iCisiXG4iCisiRGllIGZvbGdlbmRlbiBVbWdlYnVuZ3N2YXJpYWJsZW4ga8O2bm5lbiB2ZXJtdXRsaWNoIG5pY2h0IFxuIgorInZvbiAlcyBhbiBHaXQgd2VpdGVyZ2VnZWJlbiB3ZXJkZW46XG4iCisiXG4iCisKKyM6IGdpdC1ndWkuc2g6MzU3MAorbXNnaWQgIiIKKyJcbiIKKyJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCisiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorbXNnc3RyICIiCisiXG4iCisiRGllcyBpc3QgZWluIGJla2FubnRlcyBQcm9ibGVtIGRlciBUY2wtVmVyc2lvbiwgZGllXG4iCisiaW4gQ3lnd2luIG1pdGdlbGllZmVydCB3aXJkLiIKKworIzogZ2l0LWd1aS5zaDozNTc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkEgZ29vZCByZXBsYWNlbWVudCBmb3IgJXNcbiIKKyJpcyBwbGFjaW5nIHZhbHVlcyBmb3IgdGhlIHVzZXIubmFtZSBhbmRcbiIKKyJ1c2VyLmVtYWlsIHNldHRpbmdzIGludG8geW91ciBwZXJzb25hbFxuIgorIn4vLmdpdGNvbmZpZyBmaWxlLlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiVW0gZGVuIE5hbWVuIMK7JXPCqyB6dSDDpG5kZXJuLCBzb2xsdGVuIFNpZSBkaWUgXG4iCisiZ2V3w7xuc2NodGVuIFdlcnRlIGbDvHIgZGllIEVpbnN0ZWxsdW5nIHVzZXIubmFtZSB1bmQgXG4iCisidXNlci5lbWFpbCBpbiBJaHJlIERhdGVpIH4vLmdpdGNvbmZpZyBlaW5mw7xnZW4uXG4iCisKKyM6IGxpYi9hYm91dC50Y2w6MjYKK21zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCittc2dzdHIgImdpdC1ndWkgLSBlaW5lIGdyYWZpc2NoZSBPYmVyZmzDpGNoZSBmw7xyIEdpdC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzIKK21zZ2lkICJGaWxlIFZpZXdlciIKK21zZ3N0ciAiRGF0ZWktQnJvd3NlciIKKworIzogbGliL2JsYW1lLnRjbDo3OAorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIlZlcnNpb246IgorCisjOiBsaWIvYmxhbWUudGNsOjI3MQorbXNnaWQgIkNvcHkgQ29tbWl0IgorbXNnc3RyICJWZXJzaW9uIGtvcGllcmVuIgorCisjOiBsaWIvYmxhbWUudGNsOjI3NQorbXNnaWQgIkZpbmQgVGV4dC4uLiIKK21zZ3N0ciAiVGV4dCBzdWNoZW4uLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg0Cittc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKK21zZ3N0ciAiVm9sbGUgS29waWUtRXJrZW5udW5nIgorCisjOiBsaWIvYmxhbWUudGNsOjI4OAorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICJIaXN0b3JpZW4tS29udGV4dCBhbnplaWdlbiIKKworIzogbGliL2JsYW1lLnRjbDoyOTEKK21zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgorbXNnc3RyICJFbHRlcm52ZXJzaW9uIGFubm90aWVyZW4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NDUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVhZGluZyAlcy4uLiIKK21zZ3N0ciAiJXMgbGVzZW4uLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NTU3Cittc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIkFubm90aWVydW5nZW4gZsO8ciBLb3BpZXJlbi9WZXJzY2hpZWJlbiB3ZXJkZW4gZ2VsYWRlbi4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1NzcKK21zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCittc2dzdHIgIlplaWxlbiBhbm5vdGllcnQiCisKKyM6IGxpYi9ibGFtZS50Y2w6NzY5Cittc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAiQW5ub3RpZXJ1bmdlbiBmw7xyIHVyc3Byw7xuZ2xpY2hlbiBPcnQgd2VyZGVuIGdlbGFkZW4uLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzcyCittc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCittc2dzdHIgIkFubm90aWVydW5nIHZvbGxzdMOkbmRpZy4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAyCittc2dpZCAiQnVzeSIKK21zZ3N0ciAiVmVyYXJiZWl0dW5nIGzDpHVmdCIKKworIzogbGliL2JsYW1lLnRjbDo4MDMKK21zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKK21zZ3N0ciAiQW5ub3RpZXJ1bmcgbMOkdWZ0IGJlcmVpdHMuIgorCisjOiBsaWIvYmxhbWUudGNsOjg0MgorbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCittc2dzdHIgIkludGVuc2l2ZSBLb3BpZS1Fcmtlbm51bmcgbMOkdWZ0Li4uIgorCisjOiBsaWIvYmxhbWUudGNsOjkxMAorbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKK21zZ3N0ciAiQW5ub3RpZXJ1bmcgbGFkZW4uLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6OTYzCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiQXV0b3I6IgorCisjOiBsaWIvYmxhbWUudGNsOjk2NworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIkVpbnRyYWdlbmRlcjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTcyCittc2dpZCAiT3JpZ2luYWwgRmlsZToiCittc2dzdHIgIlVyc3Byw7xuZ2xpY2hlIERhdGVpOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDIwCittc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgorbXNnc3RyICJad2VpZ3NwaXR6ZSAowrtIRUFEwqspIGthbm4gbmljaHQgZ2VmdW5kZW4gd2VyZGVuOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDc1Cittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgIkVsdGVybnZlcnNpb24ga2FubiBuaWNodCBnZWZ1bmRlbiB3ZXJkZW46IgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTAKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCittc2dzdHIgIkVsdGVybnZlcnNpb24ga2FubiBuaWNodCBhbmdlemVpZ3Qgd2VyZGVuIgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjMyMAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlcyBWZXJnbGVpY2hzOiIKKworIzogbGliL2JsYW1lLnRjbDoxMjMxCittc2dpZCAiT3JpZ2luYWxseSBCeToiCittc2dzdHIgIlVyc3Byw7xuZ2xpY2ggdm9uOiIKKworIzogbGliL2JsYW1lLnRjbDoxMjM3Cittc2dpZCAiSW4gRmlsZToiCittc2dzdHIgIkluIERhdGVpOiIKKworIzogbGliL2JsYW1lLnRjbDoxMjQyCittc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgorbXNnc3RyICJLb3BpZXJ0IG9kZXIgdmVyc2Nob2JlbiBkdXJjaDoiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE0IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE5Cittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICJBdWYgWndlaWcgdW1zdGVsbGVuIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyMworbXNnaWQgIkNoZWNrb3V0IgorbXNnc3RyICJVbXN0ZWxsZW4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcyCisjOiBsaWIvb3B0aW9uLnRjbDoxMjUgbGliL3JlbW90ZV9hZGQudGNsOjMyIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDIKKyM6IGxpYi90b29sc19kbGcudGNsOjQwIGxpYi90b29sc19kbGcudGNsOjIwNCBsaWIvdG9vbHNfZGxnLnRjbDozNTIKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwOAorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQWJicmVjaGVuIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6Mjg3IGxpYi90b29sc19kbGcudGNsOjMyOAorbXNnaWQgIlJldmlzaW9uIgorbXNnc3RyICJWZXJzaW9uIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MjgwCittc2dpZCAiT3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9uZW4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiw5xiZXJuYWhtZXp3ZWlnIGFuZm9yZGVybiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDQKK21zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCittc2dzdHIgIlZlcmJpbmR1bmcgenUgbG9rYWxlbSBad2VpZyBsw7ZzZW4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgorbXNnaWQgIkNyZWF0ZSBCcmFuY2giCittc2dzdHIgIlp3ZWlnIGVyc3RlbGxlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI3Cittc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCittc2dzdHIgIk5ldWVuIFp3ZWlnIGVyc3RlbGxlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgxCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJFcnN0ZWxsZW4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MAorbXNnaWQgIkJyYW5jaCBOYW1lIgorbXNnc3RyICJad2VpZ25hbWUiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MyBsaWIvcmVtb3RlX2FkZC50Y2w6MzkgbGliL3Rvb2xzX2RsZy50Y2w6NTAKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTmFtZToiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgorbXNnc3RyICJQYXNzZW5kIHp1IMOcYmVybmFobWV6d2VpZy1OYW1lIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKK21zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKK21zZ3N0ciAiQW5mYW5nc3ZlcnNpb24iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgorbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgorbXNnc3RyICJFeGlzdGllcmVuZGVuIFp3ZWlnIGFrdHVhbGlzaWVyZW46IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKK21zZ2lkICJObyIKK21zZ3N0ciAiTmVpbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjgwCittc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCittc2dzdHIgIk51ciBTY2huZWxsenVzYW1tZW5mw7xocnVuZyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTcxCittc2dpZCAiUmVzZXQiCittc2dzdHIgIlp1csO8Y2tzZXR6ZW4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NworbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgorbXNnc3RyICJBcmJlaXRza29waWUgdW1zdGVsbGVuIG5hY2ggRXJzdGVsbGVuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMxCittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCittc2dzdHIgIkJpdHRlIHfDpGhsZW4gU2llIGVpbmVuIMOcYmVybmFobWV6d2VpZy4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCittc2dzdHIgIsOcYmVybmFobWV6d2VpZyDCuyVzwqsgaXN0IGtlaW4gWndlaWcgaW0gZXh0ZXJuZW4gUHJvamVrdGFyY2hpdi4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTMgbGliL2JyYW5jaF9yZW5hbWUudGNsOjg2Cittc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiQml0dGUgZ2ViZW4gU2llIGVpbmVuIFp3ZWlnbmFtZW4gYW4uIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTY0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiwrslc8KrIGlzdCBrZWluIHp1bMOkc3NpZ2VyIFp3ZWlnbmFtZS4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNQorbXNnaWQgIkRlbGV0ZSBCcmFuY2giCittc2dzdHIgIlp3ZWlnIGzDtnNjaGVuIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjAKK21zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgorbXNnc3RyICJMb2thbGVuIFp3ZWlnIGzDtnNjaGVuIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzcKK21zZ2lkICJMb2NhbCBCcmFuY2hlcyIKK21zZ3N0ciAiTG9rYWxlIFp3ZWlnZSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUyCittc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCittc2dzdHIgIk51ciBsw7ZzY2hlbiwgd2VubiB6dXNhbW1lbmdlZsO8aHJ0IG5hY2giCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1NCBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExOQorbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKK21zZ3N0ciAiSW1tZXIgKEtlaW5lIFp1c2FtbWVuZsO8aHJ1bmdzcHLDvGZ1bmcpIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgorbXNnc3RyICJGb2xnZW5kZSBad2VpZ2Ugc2luZCBub2NoIG5pY2h0IG1pdCDCuyVzwqsgenVzYW1tZW5nZWbDvGhydDoiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTcKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJcbiIKKyJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKK21zZ3N0ciAiIgorIkRhcyBXaWVkZXJoZXJzdGVsbGVuIHZvbiBnZWzDtnNjaHRlbiBad2VpZ2VuIGlzdCBudXIgbWl0IGdyw7bDn2VyZW0gQXVmd2FuZCAiCisibcO2Z2xpY2guXG4iCisiXG4iCisiU29sbGVuIGRpZSBhdXNnZXfDpGhsdGVuIFp3ZWlnZSBnZWzDtnNjaHQgd2VyZGVuPyIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gTMO2c2NoZW4gZGVyIFp3ZWlnZTpcbiIKKyIlcyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMgorbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIlp3ZWlnIHVtYmVuZW5uZW4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgorbXNnaWQgIlJlbmFtZSIKK21zZ3N0ciAiVW1iZW5lbm5lbiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM2Cittc2dpZCAiQnJhbmNoOiIKK21zZ3N0ciAiWndlaWc6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzkKK21zZ2lkICJOZXcgTmFtZToiCittc2dzdHIgIk5ldWVyIE5hbWU6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NzUKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCittc2dzdHIgIkJpdHRlIHfDpGhsZW4gU2llIGVpbmVuIFp3ZWlnIHp1bSB1bWJlbmVubmVuLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MjAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJad2VpZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gVW1iZW5lbm5lbiB2b24gwrslc8KrLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE3Cittc2dpZCAiU3RhcnRpbmcuLi4iCittc2dzdHIgIlN0YXJ0ZW4uLi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNgorbXNnaWQgIkZpbGUgQnJvd3NlciIKK21zZ3N0ciAiRGF0ZWktQnJvd3NlciIKKworIzogbGliL2Jyb3dzZXIudGNsOjEyNiBsaWIvYnJvd3Nlci50Y2w6MTQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyAlcy4uLiIKK21zZ3N0ciAiJXMgbGFkZW4uLi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxODcKK21zZ2lkICJbVXAgVG8gUGFyZW50XSIKK21zZ3N0ciAiW05hY2ggb2Jlbl0iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNjcgbGliL2Jyb3dzZXIudGNsOjI3MworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCittc2dzdHIgIkRhdGVpZW4gZGVzIFp3ZWlncyBkdXJjaGJsw6R0dGVybiIKKworIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyOAorbXNnaWQgIkJyb3dzZSIKK21zZ3N0ciAiQmzDpHR0ZXJuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAiw4RuZGVydW5nZW4gwrslc8KrIHZvbiDCuyVzwqsgYW5mb3JkZXJuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMworIywgdGNsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAiRmVobGVyOiDCuyVzwqsga2FubiBuaWNodCBhbHMgWndlaWcgb2RlciBWZXJzaW9uIGVya2FubnQgd2VyZGVuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQorIzogbGliL3NzaGtleS50Y2w6NTMKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiU2NobGllw59lbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIlp3ZWlnIMK7JXPCqyBleGlzdGllcnQgbmljaHQuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCittc2dzdHIgIkZlaGxlciBiZWltIEVpbnJpY2h0ZW4gZGVyIHZlcmVpbmZhY2h0ZW4gZ2l0LXB1bGwgZsO8ciDCuyVzwqsuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKKyJcbiIKKyJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgorIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgorbXNnc3RyICIiCisiWndlaWcgwrslc8KrIGV4aXN0aWVydCBiZXJlaXRzLlxuIgorIlxuIgorIlp3ZWlnIGthbm4gbmljaHQgbWl0IMK7JXPCqyBzY2huZWxsenVzYW1tZW5nZWbDvGhydCB3ZXJkZW4uIFJlZ3Vsw6RyZXMgIgorIlp1c2FtbWVuZsO8aHJlbiBpc3Qgbm90d2VuZGlnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc21ldGhvZGUgwrslc8KrIG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlbiB2b24gwrslc8KrIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKK21zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCittc2dzdHIgIkJlcmVpdHN0ZWxsdW5nICjCu2luZGV4wqspIGlzdCB6dXIgQmVhcmJlaXR1bmcgZ2VzcGVycnQgKMK7bG9ja2VkwqspLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIkRlciBsZXR6dGUgZ2VsYWRlbmUgU3RhdHVzIHN0aW1tdCBuaWNodCBtZWhyIG1pdCBkZW0gUHJvamVrdGFyY2hpdiDDvGJlcmVpbi5cbiIKKyJcbiIKKyJFaW4gYW5kZXJlcyBHaXQtUHJvZ3JhbW0gaGF0IGRhcyBQcm9qZWt0YXJjaGl2IHNlaXQgZGVtIGxldHp0ZW4gTGFkZW4gIgorImdlw6RuZGVydC4gIFZvciBkZW0gV2VjaHNlbG4gZGVzIGxva2FsZW4gWndlaWdzIG11c3MgbmV1IGdlbGFkZW4gd2VyZGVuLlxuIgorIlxuIgorIkVzIHdpcmQgZ2xlaWNoIG5ldSBnZWxhZGVuLlxuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCittc2dzdHIgIkFyYmVpdHNrb3BpZSB1bXN0ZWxsZW4gYXVmIMK7JXPCqy4uLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDYKK21zZ2lkICJmaWxlcyBjaGVja2VkIG91dCIKK21zZ3N0ciAiRGF0ZWllbiBha3R1YWxpc2llcnQiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKK21zZ3N0ciAiIgorIkF1ZiBad2VpZyDCuyVzwqsgdW1zdGVsbGVuIGFiZ2Vicm9jaGVuIChadXNhbW1lbmbDvGhyZW4gZGVyIERhdGVpZW4gaXN0ICIKKyJub3R3ZW5kaWcpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKK21zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGRlciBEYXRlaWVuIGlzdCBub3R3ZW5kaWcuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgorbXNnc3RyICJFcyB3aXJkIGF1ZiBad2VpZyDCuyVzwqsgdmVyYmxpZWJlbi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUyCittc2dpZCAiIgorIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgIgorIkNoZWNrb3V0Jy4iCittc2dzdHIgIiIKKyJEaWUgQXJiZWl0c2tvcGllIGlzdCBuaWNodCBhdWYgZWluZW0gbG9rYWxlbiBad2VpZy5cbiIKKyJcbiIKKyJXZW5uIFNpZSBhdWYgZWluZW0gWndlaWcgYXJiZWl0ZW4gbcO2Y2h0ZW4sIGVyc3RlbGxlbiBTaWUgYml0dGUgamV0enQgZWluZW4gIgorIlp3ZWlnIG1pdCBkZXIgQXVzd2FobCDCu0FiZ2V0cmVubnRlIEFyYmVpdHNrb3BpZS1WZXJzaW9uwqsuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgorbXNnc3RyICJVbWdlc3RlbGx0IGF1ZiDCuyVzwqsuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCittc2dzdHIgIlp1csO8Y2tzZXR6ZW4gdm9uIMK7JXPCqyBuYWNoIMK7JXPCqyB3aXJkIGZvbGdlbmRlIFZlcnNpb25lbiB2ZXJ3ZXJmZW46IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU1NworbXNnaWQgIlJlY292ZXJpbmcgbG9zdCBjb21taXRzIG1heSBub3QgYmUgZWFzeS4iCittc2dzdHIgIiIKKyJWZXJ3b3JmZW5lIFZlcnNpb25lbiBrw7ZubmVuIG51ciBtaXQgZ3LDtsOfZXJlbSBBdWZ3YW5kIHdpZWRlcmhlcmdlc3RlbGx0ICIKKyJ3ZXJkZW4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICclcyc/IgorbXNnc3RyICLCuyVzwqsgenVyw7xja3NldHplbj8iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTY3IGxpYi9tZXJnZS50Y2w6MTY0IGxpYi90b29sc19kbGcudGNsOjM0MworbXNnaWQgIlZpc3VhbGl6ZSIKK21zZ3N0ciAiRGFyc3RlbGxlbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgorInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgorIlxuIgorIlRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgJXMgd2lsbCBub3cgY2xvc2UgYW5kIGdpdmUgdXAuIgorbXNnc3RyICIiCisiTG9rYWxlciBad2VpZyBrYW5uIG5pY2h0IGdlc2V0enQgd2VyZGVuLlxuIgorIlxuIgorIkRpZXNlIEFyYmVpdHNrb3BpZSBpc3QgbnVyIHRlaWx3ZWlzZSB1bWdlc3RlbGx0LiBEaWUgRGF0ZWllbiBzaW5kIGtvcnJla3QgIgorImFrdHVhbGlzaWVydCwgYWJlciBlaW5pZ2UgaW50ZXJuZSBHaXQtRGF0ZWllbiBrb25udGVuIG5pY2h0IGdlw6RuZGVydCAiCisid2VyZGVuLlxuIgorIlxuIgorIkRpZXMgaXN0IGVpbiBpbnRlcm5lciBQcm9ncmFtbWZlaGxlciB2b24gJXMuIFByb2dyYW1tIHdpcmQgamV0enQgYWJnZWJyb2NoZW4uIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Cittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJBdXN3w6RobGVuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCittc2dpZCAiRm9udCBGYW1pbHkiCittc2dzdHIgIlNjaHJpZnRmYW1pbGllIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc0Cittc2dpZCAiRm9udCBTaXplIgorbXNnc3RyICJTY2hyaWZ0Z3LDtsOfZSIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo5MQorbXNnaWQgIkZvbnQgRXhhbXBsZSIKK21zZ3N0ciAiU2NocmlmdGJlaXNwaWVsIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworbXNnaWQgIiIKKyJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKKyJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorbXNnc3RyICIiCisiRGllcyBpc3QgZWluIEJlaXNwaWVsdGV4dC5cbiIKKyJXZW5uIElobmVuIGRpZXNlciBUZXh0IGdlZsOkbGx0LCBzb2xsdGVuIFNpZSBkaWVzZSBTY2hyaWZ0YXJ0IHfDpGhsZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI4Cittc2dpZCAiR2l0IEd1aSIKK21zZ3N0ciAiR2l0IEd1aSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NgorbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiTmV1ZXMgUHJvamVrdGFyY2hpdiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MworbXNnaWQgIk5ldy4uLiIKK21zZ3N0ciAiTmV1Li4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MQorbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIlByb2pla3RhcmNoaXYga2xvbmVuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNgorbXNnaWQgIkNsb25lLi4uIgorbXNnc3RyICJLbG9uZW4uLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNgorbXNnaWQgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiUHJvamVrdGFyY2hpdiDDtmZmbmVuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExOQorbXNnaWQgIk9wZW4uLi4iCittc2dzdHIgIsOWZmZuZW4uLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCittc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiWnVsZXR6dCBiZW51dHp0ZSBQcm9qZWt0YXJjaGl2ZSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzgKK21zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKK21zZ3N0ciAiWnVsZXR6dCBiZW51dHp0ZXMgUHJvamVrdGFyY2hpdiDDtmZmbmVuOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAiUHJvamVrdGFyY2hpdiDCuyVzwqsga29ubnRlIG5pY2h0IGVyc3RlbGx0IHdlcmRlbjoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzkxCittc2dpZCAiRGlyZWN0b3J5OiIKK21zZ3N0ciAiVmVyemVpY2huaXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1MAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUyCittc2dpZCAiR2l0IFJlcG9zaXRvcnkiCittc2dzdHIgIkdpdCBQcm9qZWt0YXJjaGl2IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIlZlcnplaWNobmlzIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkRhdGVpIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY2Cittc2dpZCAiQ2xvbmUiCittc2dzdHIgIktsb25lbiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzkKK21zZ2lkICJTb3VyY2UgTG9jYXRpb246IgorbXNnc3RyICJIZXJrdW5mdDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkwCittc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCittc2dzdHIgIlppZWx2ZXJ6ZWljaG5pczoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCittc2dpZCAiQ2xvbmUgVHlwZToiCittc2dzdHIgIkFydCBkZXMgS2xvbmVuczoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA4Cittc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorbXNnc3RyICJTdGFuZGFyZCAoc2NobmVsbCwgdGVpbHdlaXNlIHJlZHVuZGFudCwgSGFyZGxpbmtzKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKK21zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCittc2dzdHIgIkFsbGVzIGtvcGllcmVuIChsYW5nc2FtZXIsIHZvbGxlIFJlZHVuZGFueikiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIwCittc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCittc2dzdHIgIlZlcmtuw7xwZnQgKHNjaG5lbGwsIG5pY2h0IGVtcGZvaGxlbiwga2VpbiBCYWNrdXApIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIktlaW4gR2l0LVByb2pla3RhcmNoaXYgaW4gwrslc8KrIGdlZnVuZGVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTIKK21zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIlN0YW5kYXJkIGlzdCBudXIgZsO8ciBsb2thbGUgUHJvamVrdGFyY2hpdmUgdmVyZsO8Z2Jhci4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk2Cittc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiVmVya27DvHBmdCBpc3QgbnVyIGbDvHIgbG9rYWxlIFByb2pla3RhcmNoaXZlIHZlcmbDvGdiYXIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiUHJvamVrdGFyY2hpdiDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyOAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgorbXNnc3RyICJEZXIgVXJzcHJ1bmdzb3J0IGtvbm50ZSBuaWNodCBlaW5nZXJpY2h0ZXQgd2VyZGVuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIk9iamVrdGUgd2VyZGVuIGdlesOkaGx0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQorbXNnaWQgImJ1Y2tldHMiCittc2dzdHIgIkJ1Y2tldHMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgorbXNnc3RyICJLb3BpZW4gdm9uIE9iamVrdGVuL0luZm8vQWx0ZXJuYXRlcyBrb25udGVuIG5pY2h0IGVyc3RlbGx0IHdlcmRlbjogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKK21zZ3N0ciAiVm9uIMK7JXPCqyBrb25udGUgbmljaHRzIGdla2xvbnQgd2VyZGVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI5Cittc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgorbXNnc3RyICJEZXIgwrttYXN0ZXLCqy1ad2VpZyB3dXJkZSBub2NoIG5pY2h0IGluaXRpYWxpc2llcnQuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNgorbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCittc2dzdHIgIkhhcmRsaW5rcyBuaWNodCB2ZXJmw7xnYmFyLiBTdGF0dGRlc3NlbiB3aXJkIGtvcGllcnQuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAiS29waWVyZW4gdm9uIMK7JXPCqyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTkKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgIk9iamVrdGRhdGVuYmFuayBrb3BpZXJlbiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjAKK21zZ2lkICJLaUIiCittc2dzdHIgIktCIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCittc2dzdHIgIk9iamVrdCBrYW5uIG5pY2h0IGtvcGllcnQgd2VyZGVuOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIk9iamVrdGUgdmVybGlua2VuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NQorbXNnaWQgIm9iamVjdHMiCittc2dzdHIgIk9iamVrdGUiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCittc2dzdHIgIkbDvHIgT2JqZWt0IGtvbm50ZSBrZWluIEhhcmRsaW5rIGVyc3RlbGx0IHdlcmRlbjogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4Cittc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIlp3ZWlnZSB1bmQgT2JqZWt0ZSBrb25udGVuIG5pY2h0IGFuZ2Vmb3JkZXJ0IHdlcmRlbi4gIEtvbnRyb2xsaWVyZW4gU2llIGRpZSAiCisiQXVzZ2FiZW4gYXVmIGRlciBLb25zb2xlIGbDvHIgd2VpdGVyZSBBbmdhYmVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjkKK21zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJNYXJraWVydW5nZW4ga29ubnRlbiBuaWNodCBhbmdlZm9yZGVydCB3ZXJkZW4uICBLb250cm9sbGllcmVuIFNpZSBkaWUgIgorIkF1c2dhYmVuIGF1ZiBkZXIgS29uc29sZSBmw7xyIHdlaXRlcmUgQW5nYWJlbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCittc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkRpZSBad2VpZ3NwaXR6ZSAoSEVBRCkga29ubnRlIG5pY2h0IGdlZnVuZGVuIHdlcmRlbi4gIEtvbnRyb2xsaWVyZW4gU2llIGRpZSAiCisiQXVzZ2FiZW4gYXVmIGRlciBLb25zb2xlIGbDvHIgd2VpdGVyZSBBbmdhYmVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKK21zZ3N0ciAiVmVyemVpY2huaXMgwrslc8KrIGthbm4gbmljaHQgYXVmZ2Vyw6R1bXQgd2VyZGVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MDgKK21zZ2lkICJDbG9uZSBmYWlsZWQuIgorbXNnc3RyICJLbG9uZW4gZmVobGdlc2NobGFnZW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAiS2VpbiB2b3JlaW5nZXN0ZWxsdGVyIFp3ZWlnIGdlZnVuZGVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCittc2dzdHIgIsK7JXPCqyB3dXJkZSBuaWNodCBhbHMgVmVyc2lvbiBnZWZ1bmRlbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Cittc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIkFyYmVpdHNrb3BpZSBlcnN0ZWxsZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKKyM6IGxpYi9pbmRleC50Y2w6MTk4Cittc2dpZCAiZmlsZXMiCittc2dzdHIgIkRhdGVpZW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTY4Cittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIkVyc3RlbGxlbiBkZXIgQXJiZWl0c2tvcGllIGZlaGxnZXNjaGxhZ2VuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDExCittc2dpZCAiT3BlbiIKK21zZ3N0ciAiw5ZmZm5lbiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDIxCittc2dpZCAiUmVwb3NpdG9yeToiCittc2dzdHIgIlByb2pla3RhcmNoaXY6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAiUHJvamVrdGFyY2hpdiDCuyVzwqsga29ubnRlIG5pY2h0IGdlw7ZmZm5ldCB3ZXJkZW4uIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMKK21zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgorbXNnc3RyICJBYmdldHJlbm50ZSBBcmJlaXRza29waWUtVmVyc2lvbiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjYwCittc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCittc2dzdHIgIlZlcnNpb24gUmVnZXhwLUF1c2RydWNrOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc0Cittc2dpZCAiTG9jYWwgQnJhbmNoIgorbXNnc3RyICJMb2thbGVyIFp3ZWlnIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzkKK21zZ2lkICJUcmFja2luZyBCcmFuY2giCittc2dzdHIgIsOcYmVybmFobWV6d2VpZyIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjg0IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzgKK21zZ2lkICJUYWciCittc2dzdHIgIk1hcmtpZXJ1bmciCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBWZXJzaW9uOiAlcyIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMzOAorbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKK21zZ3N0ciAiS2VpbmUgVmVyc2lvbiBhdXNnZXfDpGhsdC4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDYKK21zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKK21zZ3N0ciAiVmVyc2lvbnMtQXVzZHJ1Y2sgaXN0IGxlZXIuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMxCittc2dpZCAiVXBkYXRlZCIKK21zZ3N0ciAiQWt0dWFsaXNpZXJ0IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Cittc2dpZCAiVVJMIgorbXNnc3RyICJVUkwiCisKKyM6IGxpYi9jb21taXQudGNsOjkKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJcbiIKKyJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgorInRvIGFtZW5kLlxuIgorbXNnc3RyICIiCisiS2VpbmUgVmVyc2lvbiB6dXIgTmFjaGJlc3NlcnVuZyB2b3JoYW5kZW4uXG4iCisiXG4iCisiU2llIHNpbmQgZGFiZWksIGRpZSBlcnN0ZSBWZXJzaW9uIHp1IMO8YmVydHJhZ2VuLiBFcyBnaWJ0IGtlaW5lIGV4aXN0aWVyZW5kZSAiCisiVmVyc2lvbiwgZGllIFNpZSBuYWNoYmVzc2VybiBrw7ZubnRlbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgKK21zZ2lkICIiCisiQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCisiXG4iCisiWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKKyJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgorImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCittc2dzdHIgIiIKKyJOYWNoYmVzc2VydW5nIHfDpGhyZW4gWnVzYW1tZW5mw7xocnVuZyBuaWNodCBtw7ZnbGljaC5cbiIKKyJcbiIKKyJTaWUgaGFiZW4gZGFzIFp1c2FtbWVuZsO8aHJlbiB2b24gVmVyc2lvbmVuIGFuZ2VmYW5nZW4sIGFiZXIgbm9jaCBuaWNodCAiCisiYmVlbmRldC4gU2llIGvDtm5uZW4ga2VpbmUgdm9yaWdlIMOcYmVydHJhZ3VuZyBuYWNoYmVzc2Vybiwgc29sYW5nZSBlaW5lICIKKyJ1bmZlcnRpZ2UgWnVzYW1tZW5mw7xocnVuZyBleGlzdGllcnQuIERhenUgbcO8c3NlbiBTaWUgZGllIFp1c2FtbWVuZsO8aHJ1bmcgIgorImJlZW5kZW4gb2RlciBhYmJyZWNoZW4uXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjQ4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXIgVmVyc2lvbnNkYXRlbiBmw7xyIE5hY2hiZXNzZXJuOiIKKworIzogbGliL2NvbW1pdC50Y2w6NzUKK21zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgorbXNnc3RyICJCZW51dHplcm5hbWUga29ubnRlIG5pY2h0IGJlc3RpbW10IHdlcmRlbjoiCisKKyM6IGxpYi9jb21taXQudGNsOjgwCittc2dpZCAiSW52YWxpZCBHSVRfQ09NTUlUVEVSX0lERU5UOiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgV2VydCB2b24gR0lUX0NPTU1JVFRFUl9JTkRFTlQ6IgorCisjOiBsaWIvY29tbWl0LnRjbDoxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKK21zZ3N0ciAiV2FybmluZzogVGNsL1RrIHVudGVyc3TDvHR6dCBkaWUgWmVpY2hlbmNvZGllcnVuZyDCuyVzwqsgbmljaHQuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNDkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiRGVyIGxldHp0ZSBnZWxhZGVuZSBTdGF0dXMgc3RpbW10IG5pY2h0IG1laHIgbWl0IGRlbSBQcm9qZWt0YXJjaGl2IMO8YmVyZWluLlxuIgorIlxuIgorIkVpbiBhbmRlcmVzIEdpdC1Qcm9ncmFtbSBoYXQgZGFzIFByb2pla3RhcmNoaXYgc2VpdCBkZW0gbGV0enRlbiBMYWRlbiAiCisiZ2XDpG5kZXJ0LiAgVm9yIGRlbSBFaW50cmFnZW4gZWluZXIgbmV1ZW4gVmVyc2lvbiBtdXNzIG5ldSBnZWxhZGVuIHdlcmRlbi5cbiIKKyJcbiIKKyJFcyB3aXJkIGdsZWljaCBuZXUgZ2VsYWRlbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKyJOaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBEYXRlaWVuIGvDtm5uZW4gbmljaHQgZWluZ2V0cmFnZW4gd2VyZGVuLlxuIgorIlxuIgorIkRpZSBEYXRlaSDCuyVzwqsgaGF0IG5vY2ggbmljaHQgYXVmZ2Vsw7ZzdGUgWnVzYW1tZW5mw7xocnVuZ3MtS29uZmxpa3RlLiBTaWUgIgorIm3DvHNzZW4gZGllc2UgS29uZmxpa3RlIGF1ZmzDtnNlbiwgYmV2b3IgU2llIGVpbnRyYWdlbiBrw7ZubmVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgorIlxuIgorIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCittc2dzdHIgIiIKKyJVbmJla2FubnRlciBEYXRlaXp1c3RhbmQgwrslc8KrLlxuIgorIlxuIgorIkRhdGVpIMK7JXPCqyBrYW5uIG5pY2h0IGVpbmdldHJhZ2VuIHdlcmRlbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTg4Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCittc2dzdHIgIiIKKyJLZWluZSDDhG5kZXJ1bmdlbiB2b3JoYW5kZW4sIGRpZSBlaW5nZXRyYWdlbiB3ZXJkZW4ga8O2bm50ZW4uXG4iCisiXG4iCisiU2llIG3DvHNzZW4gbWluZGVzdGVucyBlaW5lIERhdGVpIGJlcmVpdHN0ZWxsZW4sIGJldm9yIFNpZSBlaW50cmFnZW4ga8O2bm5lbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjAzCittc2dpZCAiIgorIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgorIlxuIgorIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKKyItIFNlY29uZCBsaW5lOiBCbGFua1xuIgorIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKK21zZ3N0ciAiIgorIkJpdHRlIGdlYmVuIFNpZSBlaW5lIFZlcnNpb25zYmVzY2hyZWlidW5nIGVpbi5cbiIKKyJcbiIKKyJFaW5lIGd1dGUgVmVyc2lvbnNiZXNjaHJlaWJ1bmcgZW50aMOkbHQgZm9sZ2VuZGUgQWJzY2huaXR0ZTpcbiIKKyJcbiIKKyItIEVyc3RlIFplaWxlOiBFaW5lIFp1c2FtbWVuZmFzc3VuZywgd2FzIG1hbiBnZW1hY2h0IGhhdC5cbiIKKyJcbiIKKyItIFp3ZWl0ZSBaZWlsZTogTGVlcnplaWxlXG4iCisiXG4iCisiLSBSZXN0OiBFaW5lIGF1c2bDvGhybGljaGUgQmVzY2hyZWlidW5nLCB3YXJ1bSBkaWVzZSDDhG5kZXJ1bmcgaGlsZnJlaWNoIGlzdC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjM0Cittc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCittc2dzdHIgIkF1ZnJ1ZmVuIGRlciBWb3ItRWludHJhZ2VuLUtvbnRyb2xsZSAowrtwcmUtY29tbWl0IGhvb2vCqykuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI0OQorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgorbXNnc3RyICJFaW50cmFnZW4gYWJnZWxlaG50IGR1cmNoIFZvci1FaW50cmFnZW4tS29udHJvbGxlICjCu3ByZS1jb21taXQgaG9va8KrKS4iCisKKyM6IGxpYi9jb21taXQudGNsOjI3MgorbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICJBdWZydWZlbiBkZXIgVmVyc2lvbnNiZXNjaHJlaWJ1bmdzLUtvbnRyb2xsZSAowrtjb21taXQtbWVzc2FnZSBob29rwqspLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDoyODcKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiIgorIkVpbnRyYWdlbiBhYmdlbGVobnQgZHVyY2ggVmVyc2lvbnNiZXNjaHJlaWJ1bmdzLUtvbnRyb2xsZSAowrtjb21taXQtbWVzc2FnZSAiCisiaG9va8KrKS4iCisKKyM6IGxpYi9jb21taXQudGNsOjMwMAorbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKK21zZ3N0ciAiw4RuZGVydW5nZW4gZWludHJhZ2VuLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMTYKK21zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCittc2dzdHIgIndyaXRlLXRyZWUgZmVobGdlc2NobGFnZW46IgorCisjOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgorbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICJFaW50cmFnZW4gZmVobGdlc2NobGFnZW4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgorbXNnc3RyICJWZXJzaW9uIMK7JXPCqyBzY2hlaW50IGJlc2Now6RkaWd0IHp1IHNlaW4iCisKKyM6IGxpYi9jb21taXQudGNsOjMzOQorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIktlaW5lIMOEbmRlcnVuZ2VuIGVpbnp1dHJhZ2VuLlxuIgorIlxuIgorIkVzIGdpYnQga2VpbmUgZ2XDpG5kZXJ0ZSBEYXRlaSBiZWkgZGllc2VyIFZlcnNpb24gdW5kIGVzIHd1cmRlIGF1Y2ggbmljaHRzICIKKyJ6dXNhbW1lbmdlZsO8aHJ0LlxuIgorIlxuIgorIkRhcyBBcmJlaXRzdmVyemVpY2huaXMgd2lyZCBkYWhlciBqZXR6dCBuZXUgZ2VsYWRlbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzQ2Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICJLZWluZSDDhG5kZXJ1bmdlbiwgZGllIGVpbmdldHJhZ2VuIHdlcmRlbiBrw7ZubmVuLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzYwCittc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAiY29tbWl0LXRyZWUgZmVobGdlc2NobGFnZW46IgorCisjOiBsaWIvY29tbWl0LnRjbDozODEKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgInVwZGF0ZS1yZWYgZmVobGdlc2NobGFnZW46IgorCisjOiBsaWIvY29tbWl0LnRjbDo0NjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCittc2dzdHIgIlZlcnNpb24gJXMgw7xiZXJ0cmFnZW46ICVzIgorCisjOiBsaWIvY29uc29sZS50Y2w6NTkKK21zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICJWZXJhcmJlaXR1bmcuIEJpdHRlIHdhcnRlbi4uLiIKKworIzogbGliL2NvbnNvbGUudGNsOjE4NgorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIkVyZm9sZ3JlaWNoIgorCisjOiBsaWIvY29uc29sZS50Y2w6MjAwCittc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgorbXNnc3RyICJGZWhsZXI6IEtvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkFuemFobCB1bnZlcmtuw7xwZnRlciBPYmpla3RlIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ0Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkZlc3RwbGF0dGVucGxhdHogdm9uIHVudmVya27DvHBmdGVuIE9iamVrdGVuIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ1Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJBbnphaGwga29tcHJpbWllcnRlciBPYmpla3RlIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgorbXNnc3RyICJBbnphaGwgS29tcHJpbWllcnVuZ3NlaW5oZWl0ZW4iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIkZlc3RwbGF0dGVucGxhdHogdm9uIGtvbXByaW1pZXJ0ZW4gT2JqZWt0ZW4iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICJLb21wcmltaWVydGUgT2JqZWt0ZSwgZGllIHp1bSBBdWZyw6R1bWVuIHZvcmdlc2VoZW4gc2luZCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OQorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIkRhdGVpZW4gaW0gTcO8bGxlaW1lciIKKworIzogbGliL2RhdGFiYXNlLnRjbDo3MgorbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIk9iamVrdGRhdGVuYmFuayBrb21wcmltaWVyZW4iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKK21zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKK21zZ3N0ciAiRGllIE9iamVrdGRhdGVuYmFuayBkdXJjaCDCu2ZzY2stb2JqZWN0c8KrIMO8YmVycHLDvGZlbiBsYXNzZW4iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2UuXG4iCisiXG4iCisiQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCittc2dzdHIgIiIKKyJEaWVzZXMgUHJvamVrdGFyY2hpdiBlbnRow6RsdCB1bmdlZsOkaHIgJWkgbmljaHQgdmVya27DvHBmdGUgT2JqZWt0ZS5cbiIKKyJcbiIKKyJGw7xyIGVpbmUgb3B0aW1hbGUgUGVyZm9ybWFuY2Ugd2lyZCBlbXBmb2hsZW4sIGRpZSBEYXRlbmJhbmsgZGVzIFByb2pla3RhcmNoaXZzIHp1IGtvbXByaW1pZXJlbi5cbiIKKyJcbiIKKyJTb2xsIGRpZSBEYXRlbmJhbmsgamV0enQga29tcHJpbWllcnQgd2VyZGVuPyIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXMgRGF0dW0gdm9uIEdpdDogJXMiCisKKyM6IGxpYi9kaWZmLnRjbDo2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKKyJcbiIKKyJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCisidGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKKyJ0aGUgc2FtZSBzdGF0ZS4iCittc2dzdHIgIiIKKyJLZWluZSDDhG5kZXJ1bmdlbiBmZXN0c3RlbGxiYXIuXG4iCisiXG4iCisiwrslc8KrIGVudGjDpGx0IGtlaW5lIMOEbmRlcnVuZ2VuLiBad2FyIHd1cmRlIGRhcyDDhG5kZXJ1bmdzZGF0dW0gZGllc2VyIERhdGVpIHZvbiAiCisiZWluZW0gYW5kZXJlbiBQcm9ncmFtbSBtb2RpZml6aWVydCwgYWJlciBkZXIgSW5oYWx0IGRlciBEYXRlaSBpc3QgIgorInVudmVyw6RuZGVydC5cbiIKKyJcbiIKKyJEYXMgQXJiZWl0c3ZlcnplaWNobmlzIHdpcmQgamV0enQgbmV1IGdlbGFkZW4sIHVtIGRpZXNlIMOEbmRlcnVuZyBiZWkgYWxsZW4gIgorIkRhdGVpZW4genUgcHLDvGZlbi4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iCittc2dzdHIgIlZlcmdsZWljaCB2b24gwrslc8KrIGxhZGVuLi4uIgorCisjOiBsaWIvZGlmZi50Y2w6MTI1Cittc2dpZCAiIgorIkxPQ0FMOiBkZWxldGVkXG4iCisiUkVNT1RFOlxuIgorbXNnc3RyICIiCisiTE9LQUw6IGdlbMO2c2NodFxuIgorIkFOREVSRVM6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzAKK21zZ2lkICIiCisiUkVNT1RFOiBkZWxldGVkXG4iCisiTE9DQUw6XG4iCittc2dzdHIgIiIKKyJBTkRFUkVTOiBnZWzDtnNjaHRcbiIKKyJMT0tBTDpcbiIKKworIzogbGliL2RpZmYudGNsOjEzNworbXNnaWQgIkxPQ0FMOlxuIgorbXNnc3RyICJMT0tBTDpcbiIKKworIzogbGliL2RpZmYudGNsOjE0MAorbXNnaWQgIlJFTU9URTpcbiIKK21zZ3N0ciAiQU5ERVJFUzpcbiIKKworIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCittc2dzdHIgIkRhdGVpIMK7JXPCqyBrYW5uIG5pY2h0IGFuZ2V6ZWlndCB3ZXJkZW4iCisKKyM6IGxpYi9kaWZmLnRjbDoyMDMKK21zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXIgRGF0ZWk6IgorCisjOiBsaWIvZGlmZi50Y2w6MjEwCittc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgorbXNnc3RyICJHaXQtUHJvamVrdGFyY2hpdiAoVW50ZXJwcm9qZWt0KSIKKworIzogbGliL2RpZmYudGNsOjIyMgorbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKK21zZ3N0ciAiKiBCaW7DpHJkYXRlaSAoSW5oYWx0IHdpcmQgbmljaHQgYW5nZXplaWd0KSIKKworIzogbGliL2RpZmYudGNsOjIyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgorIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgorbXNnc3RyICIiCisiKiBEYXRlaSBuaWNodCB1bnRlciBWZXJzaW9uc2tvbnRyb2xsZSwgRGF0ZWlncsO2w59lICVkIEJ5dGVzLlxuIgorIiogTnVyIGVyc3RlICVkIEJ5dGVzIHdlcmRlbiBhbmdlemVpZ3QuXG4iCisKKyM6IGxpYi9kaWZmLnRjbDoyMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCisiKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgorbXNnc3RyICIiCisiXG4iCisiKiBEYXRlaSBuaWNodCB1bnRlciBWZXJzaW9uc2tvbnRyb2xsZSwgaGllciBhYmdlc2Nobml0dGVuIGR1cmNoICVzLlxuIgorIiogWnVtIEFuc2VoZW4gZGVyIHZvbGxzdMOkbmRpZ2VuIERhdGVpIGV4dGVybmVuIEVkaXRvciBiZW51dHplbi5cbiIKKworIzogbGliL2RpZmYudGNsOjQ4MgorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gSGVyYXVzbmVobWVuIGRlcyBnZXfDpGhsdGVuIEtvbnRleHRzIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcuIgorCisjOiBsaWIvZGlmZi50Y2w6NDg5Cittc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBCZXJlaXRzdGVsbGVuIGRlcyBnZXfDpGhsdGVuIEtvbnRleHRzLiIKKworIzogbGliL2RpZmYudGNsOjU2OAorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBIZXJhdXNuZWhtZW4gZGVyIGdld8OkaGx0ZW4gWmVpbGUgYXVzIGRlciBCZXJlaXRzdGVsbHVuZy4iCisKKyM6IGxpYi9kaWZmLnRjbDo1NzYKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIkZlaGxlciBiZWltIEJlcmVpdHN0ZWxsZW4gZGVyIGdld8OkaGx0ZW4gWmVpbGUuIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0MworbXNnaWQgIkRlZmF1bHQiCittc2dzdHIgIlZvcmVpbnN0ZWxsdW5nIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN5c3RlbSAoJXMpIgorbXNnc3RyICJTeXN0ZW13ZWl0ICglcykiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Cittc2dpZCAiT3RoZXIiCittc2dzdHIgIkFuZGVyZSIKKworIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNAorbXNnaWQgImVycm9yIgorbXNnc3RyICJGZWhsZXIiCisKKyM6IGxpYi9lcnJvci50Y2w6MzYKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICJXYXJudW5nIgorCisjOiBsaWIvZXJyb3IudGNsOjk0Cittc2dpZCAiWW91IG11c3QgY29ycmVjdCB0aGUgYWJvdmUgZXJyb3JzIGJlZm9yZSBjb21taXR0aW5nLiIKK21zZ3N0ciAiIgorIlNpZSBtw7xzc2VuIGRpZSBvYmlnZW4gRmVobGVyIHp1ZXJzdCBiZWhlYmVuLCBiZXZvciBTaWUgZWludHJhZ2VuIGvDtm5uZW4uIgorCisjOiBsaWIvaW5kZXgudGNsOjYKK21zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCittc2dzdHIgIkJlcmVpdHN0ZWxsdW5nIGthbm4gbmljaHQgd2llZGVyIGZyZWlnZWdlYmVuIHdlcmRlbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6MTUKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAiRmVobGVyIGluIEJlcmVpdHN0ZWxsdW5nIgorCisjOiBsaWIvaW5kZXgudGNsOjE3Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIiIKKyJEYXMgQWt0dWFsaXNpZXJlbiBkZXIgR2l0LUJlcmVpdHN0ZWxsdW5nIGlzdCBmZWhsZ2VzY2hsYWdlbi4gRWluZSBhbGxnZW1laW5lICIKKyJHaXQtQWt0dWFsaXNpZXJ1bmcgd2lyZCBqZXR6dCBnZXN0YXJ0ZXQsIHVtIGdpdC1ndWkgd2llZGVyIG1pdCBnaXQgenUgIgorInN5bmNocm9uaXNpZXJlbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6MjgKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiRm9ydHNldHplbiIKKworIzogbGliL2luZGV4LnRjbDozMQorbXNnaWQgIlVubG9jayBJbmRleCIKK21zZ3N0ciAiQmVyZWl0c3RlbGx1bmcgZnJlaWdlYmVuIgorCisjOiBsaWIvaW5kZXgudGNsOjI4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKK21zZ3N0ciAiRGF0ZWkgwrslc8KrIGF1cyBkZXIgQmVyZWl0c3RlbGx1bmcgaGVyYXVzbmVobWVuIgorCisjOiBsaWIvaW5kZXgudGNsOjMyOAorbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCittc2dzdHIgIkJlcmVpdCB6dW0gRWludHJhZ2VuLiIKKworIzogbGliL2luZGV4LnRjbDozNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIsK7JXPCqyBoaW56dWbDvGdlbi4uLiIKKworIzogbGliL2luZGV4LnRjbDozOTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKK21zZ3N0ciAiw4RuZGVydW5nZW4gaW4gRGF0ZWkgwrslc8KrIHZlcndlcmZlbj8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgorbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiBkZW4gZ2V3w6RobHRlbiAlaSBEYXRlaWVuIHZlcndlcmZlbj8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDA4Cittc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgorbXNnc3RyICIiCisiQWxsZSBuaWNodCBiZXJlaXRnZXN0ZWxsdGVuIMOEbmRlcnVuZ2VuIHdlcmRlbiBiZWltIFZlcndlcmZlbiB2ZXJsb3JlbiBnZWhlbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6NDExCittc2dpZCAiRG8gTm90aGluZyIKK21zZ3N0ciAiTmljaHRzIHR1biIKKworIzogbGliL2luZGV4LnRjbDo0MjkKK21zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGluIGdld8OkaGx0ZW4gRGF0ZWllbiB2ZXJ3ZXJmZW4iCisKKyM6IGxpYi9pbmRleC50Y2w6NDMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nICVzIgorbXNnc3RyICLDhG5kZXJ1bmdlbiBpbiAlcyB2ZXJ3ZXJmZW4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMKK21zZ2lkICIiCisiQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJadXNhbW1lbmbDvGhyZW4ga2FubiBuaWNodCBnbGVpY2h6ZWl0aWcgbWl0IE5hY2hiZXNzZXJuIGR1cmNoZ2Vmw7xocnQgd2VyZGVuLlxuIgorIlxuIgorIlNpZSBtw7xzc2VuIHp1ZXJzdCBkaWUgTmFjaGJlc3NlcnVuZ3MtVmVyc2lvbiBhYnNjaGxpZcOfZW4sIGJldm9yIFNpZSAiCisienVzYW1tZW5mw7xocmVuIGvDtm5uZW4uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjcKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIkRlciBsZXR6dGUgZ2VsYWRlbmUgU3RhdHVzIHN0aW1tdCBuaWNodCBtZWhyIG1pdCBkZW0gUHJvamVrdGFyY2hpdiDDvGJlcmVpbi5cbiIKKyJcbiIKKyJFaW4gYW5kZXJlcyBHaXQtUHJvZ3JhbW0gaGF0IGRhcyBQcm9qZWt0YXJjaGl2IHNlaXQgZGVtIGxldHp0ZW4gTGFkZW4gIgorImdlw6RuZGVydC4gIFZvciBlaW5lbSBadXNhbW1lbmbDvGhyZW4gbXVzcyBuZXUgZ2VsYWRlbiB3ZXJkZW4uXG4iCisiXG4iCisiRXMgd2lyZCBnbGVpY2ggbmV1IGdlbGFkZW4uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCisiXG4iCisiWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCisibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorbXNnc3RyICIiCisiWnVzYW1tZW5mw7xocnVuZyBtaXQgS29uZmxpa3Rlbi5cbiIKKyJcbiIKKyJEaWUgRGF0ZWkgwrslc8KrIGVudGjDpGx0IEtvbmZsaWt0ZSBiZWltIFp1c2FtbWVuZsO8aHJlbi4gU2llIG3DvHNzZW4gZGllc2UgIgorIktvbmZsaWt0ZSBwZXIgSGFuZCBhdWZsw7ZzZW4uIEFuc2NobGllw59lbmQgbcO8c3NlbiBTaWUgZGllIERhdGVpIHdpZWRlciAiCisiYmVyZWl0c3RlbGxlbiB1bmQgZWludHJhZ2VuLCB1bSBkaWUgWnVzYW1tZW5mw7xocnVuZyBhYnp1c2NobGllw59lbi4gRXJzdCAiCisiZGFuYWNoIGthbm4gZWluZSBuZXVlIFp1c2FtbWVuZsO8aHJ1bmcgYmVnb25uZW4gd2VyZGVuLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKKyJcbiIKKyJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgorIlxuIgorIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgorIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKK21zZ3N0ciAiIgorIkVzIGxpZWdlbiDDhG5kZXJ1bmdlbiB2b3IuXG4iCisiXG4iCisiRGllIERhdGVpIMK7JXPCqyB3dXJkZSBnZcOkbmRlcnQuICBTaWUgc29sbHRlbiB6dWVyc3QgZGllIGJlcmVpdGdlc3RlbGx0ZSAiCisiVmVyc2lvbiBhYnNjaGxpZcOfZW4sIGJldm9yIFNpZSBlaW5lIFp1c2FtbWVuZsO8aHJ1bmcgYmVnaW5uZW4uICBNaXQgZGllc2VyICIKKyJSZWloZW5mb2xnZSBrw7ZubmVuIFNpZSBtw7ZnbGljaGUgS29uZmxpa3RlIGJlaW0gWnVzYW1tZW5mw7xocmVuIHdlc2VudGxpY2ggIgorImVpbmZhY2hlciBiZWhlYmVuIG9kZXIgYWJicmVjaGVuLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIG9mICVzIgorbXNnc3RyICIlcyB2b24gJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCittc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiB2b24gJXMgdW5kICVzLi4uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMQorbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgorbXNnc3RyICJadXNhbW1lbmbDvGhyZW4gZXJmb2xncmVpY2ggYWJnZXNjaGxvc3Nlbi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMzCittc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCittc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBmZWhsZ2VzY2hsYWdlbi4gS29uZmxpa3RhdWZsw7ZzdW5nIGlzdCBub3R3ZW5kaWcuIgorCisjOiBsaWIvbWVyZ2UudGNsOjE1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIEludG8gJXMiCittc2dzdHIgIlp1c2FtbWVuZsO8aHJlbiBpbiDCuyVzwqsiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTc3Cittc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCittc2dzdHIgIlp1c2FtbWVuenVmw7xocmVuZGUgVmVyc2lvbiIKKworIzogbGliL21lcmdlLnRjbDoyMTIKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkFiYnJ1Y2ggZGVyIE5hY2hiZXNzZXJ1bmcgaXN0IG5pY2h0IG3DtmdsaWNoLlxuIgorIlxuIgorIlNpZSBtw7xzc2VuIGRpZSBOYWNoYmVzc2VydW5nIGRlciBWZXJzaW9uIGFic2NobGllw59lbi5cbiIKKworIzogbGliL21lcmdlLnRjbDoyMjIKK21zZ2lkICIiCisiQWJvcnQgbWVyZ2U/XG4iCisiXG4iCisiQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCittc2dzdHIgIiIKKyJadXNhbW1lbmbDvGhyZW4gYWJicmVjaGVuP1xuIgorIlxuIgorIldlbm4gU2llIGFiYnJlY2hlbiwgZ2VoZW4gYWxsZSBub2NoIG5pY2h0IGVpbmdldHJhZ2VuZW4gw4RuZGVydW5nZW4gIgorInZlcmxvcmVuLlxuIgorIlxuIgorIlp1c2FtbWVuZsO8aHJlbiBqZXR6dCBhYmJyZWNoZW4/IgorCisjOiBsaWIvbWVyZ2UudGNsOjIyOAorbXNnaWQgIiIKKyJSZXNldCBjaGFuZ2VzP1xuIgorIlxuIgorIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKK21zZ3N0ciAiIgorIsOEbmRlcnVuZ2VuIHp1csO8Y2tzZXR6ZW4/XG4iCisiXG4iCisiV2VubiBTaWUgenVyw7xja3NldHplbiwgZ2VoZW4gYWxsZSBub2NoIG5pY2h0IGVpbmdldHJhZ2VuZW4gw4RuZGVydW5nZW4gIgorInZlcmxvcmVuLlxuIgorIlxuIgorIsOEbmRlcnVuZ2VuIGpldHp0IHp1csO8Y2tzZXR6ZW4/IgorCisjOiBsaWIvbWVyZ2UudGNsOjIzOQorbXNnaWQgIkFib3J0aW5nIgorbXNnc3RyICJBYmJydWNoIgorCisjOiBsaWIvbWVyZ2UudGNsOjIzOQorbXNnaWQgImZpbGVzIHJlc2V0IgorbXNnc3RyICJEYXRlaWVuIHp1csO8Y2tnZXNldHp0IgorCisjOiBsaWIvbWVyZ2UudGNsOjI2NworbXNnaWQgIkFib3J0IGZhaWxlZC4iCittc2dzdHIgIkFiYnJ1Y2ggZmVobGdlc2NobGFnZW4uIgorCisjOiBsaWIvbWVyZ2UudGNsOjI2OQorbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKK21zZ3N0ciAiQWJicnVjaCBkdXJjaGdlZsO8aHJ0LiBCZXJlaXQuIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKK21zZ3N0ciAiS29uZmxpa3QgZHVyY2ggQmFzaXN2ZXJzaW9uIGVyc2V0emVuPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6OQorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhpcyBicmFuY2g/IgorbXNnc3RyICJLb25mbGlrdCBkdXJjaCBkaWVzZW4gWndlaWcgZXJzZXR6ZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCittc2dzdHIgIktvbmZsaWt0IGR1cmNoIGFuZGVyZW4gWndlaWcgZXJzZXR6ZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlIHRoYXQgdGhlIGRpZmYgc2hvd3Mgb25seSBjb25mbGljdGluZyBjaGFuZ2VzLlxuIgorIlxuIgorIiVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4iCisiXG4iCisiVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVuZG9uZSBvbmx5IGJ5IHJlc3RhcnRpbmcgdGhlIG1lcmdlLiIKK21zZ3N0ciAiIgorIkhpbndlaXM6IERlciBWZXJnbGVpY2ggemVpZ3QgbnVyIGtvbmZsaWt0dmVydXJzYWNoZW5kZSDDhG5kZXJ1bmdlbiBhbi5cbiIKKyJcbiIKKyLCuyVzwqsgd2lyZCDDvGJlcnNjaHJpZWJlbi5cbiIKKyJcbiIKKyJEaWVzZSBPcGVyYXRpb24ga2FubiBudXIgcsO8Y2tnw6RuZ2lnIGdlbWFjaHQgd2VyZGVuLCB3ZW5uIGRpZVxuIgorIlp1c2FtbWVuZsO8aHJ1bmcgZXJuZXV0IGdlc3RhcnRldCB3aXJkLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKK21zZ3N0ciAiRGF0ZWkgwrslc8KrIGhhdCBuaWNodCBhdWZnZWzDtnN0ZSBLb25mbGlrdGUuIFRyb3R6ZGVtIGJlcmVpdHN0ZWxsZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKK21zZ3N0ciAiQXVmbMO2c3VuZyBoaW56dWdlZsO8Z3QgZsO8ciAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQxCittc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorbXNnc3RyICIiCisiS29uZmxpa3RlIGR1cmNoIGdlbMO2c2NodGUgRGF0ZWllbiBvZGVyIHN5bWJvbGlzY2hlIExpbmtzIGvDtm5uZW4gbmljaHQgZHVyY2ggIgorImRhcyBadXNhbWVuZsO8aHJ1bmdzd2Vya3pldWcgZ2Vsw7ZzdCB3ZXJkZW4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKK21zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJLb25mbGlrdC1EYXRlaSBleGlzdGllcnQgbmljaHQiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgorbXNnc3RyICJLZWluIEdVSSBadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnOiDCuyVzwqsiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI2OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIG1lcmdlIHRvb2wgJyVzJyIKK21zZ3N0ciAiVW5iZWthbm50ZXMgWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1Zzogwrslc8KrIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMDMKK21zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyBsw6R1ZnQgYmVyZWl0cy4gU29sbCBlcyBhYmdlYnJvY2hlbiB3ZXJkZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkZlaGxlciBiZWltIEFicnVmZW4gZGVyIERhdGVpdmVyc2lvbmVuOlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHRoZSBtZXJnZSB0b29sOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiWnVzYW1tZW5mw7xocnVuZ3N3ZXJremV1ZyBrb25udGUgbmljaHQgZ2VzdGFydGV0IHdlcmRlbjpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzQ3Cittc2dpZCAiUnVubmluZyBtZXJnZSB0b29sLi4uIgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5nc3dlcmt6ZXVnIHN0YXJ0ZW4uLi4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKK21zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCittc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWcgZmVobGdlc2NobGFnZW4uIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2UgZ2xvYmFsZSBaZWljaGVua29kaWVydW5nIMK7JXPCqyIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBBcmNoaXYtWmVpY2hlbmtvZGllcnVuZyDCuyVzwqsiCisKKyM6IGxpYi9vcHRpb24udGNsOjExNworbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgIlZvcmVpbnN0ZWxsdW5nZW4gd2llZGVyaGVyc3RlbGxlbiIKKworIzogbGliL29wdGlvbi50Y2w6MTIxCittc2dpZCAiU2F2ZSIKK21zZ3N0ciAiU3BlaWNoZXJuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBSZXBvc2l0b3J5IgorbXNnc3RyICJQcm9qZWt0YXJjaGl2ICVzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzIKK21zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgorbXNnc3RyICJHbG9iYWwgKEFsbGUgUHJvamVrdGFyY2hpdmUpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzgKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgIkJlbnV0emVybmFtZSIKKworIzogbGliL29wdGlvbi50Y2w6MTM5Cittc2dpZCAiRW1haWwgQWRkcmVzcyIKK21zZ3N0ciAiRS1NYWlsLUFkcmVzc2UiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MQorbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgorbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1WZXJzaW9uZW4genVzYW1tZW5mYXNzZW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MgorbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKK21zZ3N0ciAiQXVzZsO8aHJsaWNoa2VpdCBkZXIgWnVzYW1tZW5mw7xocmVuLU1lbGR1bmdlbiIKKworIzogbGliL29wdGlvbi50Y2w6MTQzCittc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKK21zZ3N0ciAiVmVyZ2xlaWNoc3N0YXRpc3RpayBuYWNoIFp1c2FtbWVuZsO8aHJlbiBhbnplaWdlbiIKKworIzogbGliL29wdGlvbi50Y2w6MTQ0Cittc2dpZCAiVXNlIE1lcmdlIFRvb2wiCittc2dzdHIgIlp1c2FtbWVuZsO8aHJ1bmdzd2Vya3pldWciCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NgorbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCittc2dzdHIgIkF1ZiBEYXRlacOkbmRlcnVuZ3NkYXR1bSB2ZXJsYXNzZW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NworbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKK21zZ3N0ciAiw5xiZXJuYWhtZXp3ZWlnZSBhdWZyw6R1bWVuIHfDpGhyZW5kIEFuZm9yZGVydW5nIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDgKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKK21zZ3N0ciAiUGFzc2VuZCB6dSDDnGJlcm5haG1lendlaWciCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OQorbXNnaWQgIkJsYW1lIENvcHkgT25seSBPbiBDaGFuZ2VkIEZpbGVzIgorbXNnc3RyICJLb3BpZS1Bbm5vdGllcmVuIG51ciBiZWkgZ2XDpG5kZXJ0ZW4gRGF0ZWllbiIKKworIzogbGliL29wdGlvbi50Y2w6MTUwCittc2dpZCAiTWluaW11bSBMZXR0ZXJzIFRvIEJsYW1lIENvcHkgT24iCittc2dzdHIgIk1pbmRlc3R6YWhsIFplaWNoZW4gZsO8ciBLb3BpZS1Bbm5vdGllcmVuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTEKK21zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKK21zZ3N0ciAiQW56YWhsIFRhZ2UgZsO8ciBIaXN0b3JpZW4tS29udGV4dCIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAiQW56YWhsIGRlciBLb250ZXh0emVpbGVuIGJlaW0gVmVyZ2xlaWNoIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTMKK21zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgorbXNnc3RyICJUZXh0YnJlaXRlIGRlciBWZXJzaW9uc2Jlc2NocmVpYnVuZyIKKworIzogbGliL29wdGlvbi50Y2w6MTU0Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJOYW1lbnN2b3JzY2hsYWcgZsO8ciBuZXVlIFp3ZWlnZSIKKworIzogbGliL29wdGlvbi50Y2w6MTU1Cittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICJWb3JlaW5nZXN0ZWxsdGUgWmVpY2hlbmtvZGllcnVuZyIKKworIzogbGliL29wdGlvbi50Y2w6MjAzCittc2dpZCAiQ2hhbmdlIgorbXNnc3RyICLDhG5kZXJuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMzAKK21zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKK21zZ3N0ciAiV8O2cnRlcmJ1Y2ggUmVjaHRzY2hyZWlicHLDvGZ1bmc6IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTQKK21zZ2lkICJDaGFuZ2UgRm9udCIKK21zZ3N0ciAiU2NocmlmdGFydCDDpG5kZXJuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgIiVzIHfDpGhsZW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjI2NAorbXNnaWQgInB0LiIKK21zZ3N0ciAicHQuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNzgKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAiRWluc3RlbGx1bmdlbiIKKworIzogbGliL29wdGlvbi50Y2w6MzE0Cittc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKK21zZ3N0ciAiT3B0aW9uZW4ga29ubnRlbiBuaWNodCBnZXNwZWljaGVydCB3ZXJkZW46IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTkKK21zZ2lkICJBZGQgUmVtb3RlIgorbXNnc3RyICJFeHRlcm5lcyBBcmNoaXYgaGluenVmw7xnZW4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNAorbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgorbXNnc3RyICJOZXVlcyBleHRlcm5lcyBBcmNoaXYgaGluenVmw7xnZW4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyOCBsaWIvdG9vbHNfZGxnLnRjbDozNgorbXNnaWQgIkFkZCIKK21zZ3N0ciAiSGluenVmw7xnZW4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozNworbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgorbXNnc3RyICJFaW56ZWxoZWl0ZW4gZGVzIGV4dGVybmVuIEFyY2hpdnMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo1MAorbXNnaWQgIkxvY2F0aW9uOiIKK21zZ3N0ciAiQWRyZXNzZToiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MgorbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgorbXNnc3RyICJXZWl0ZXJlIEFrdGlvbiBqZXR6dCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjY1Cittc2dpZCAiRmV0Y2ggSW1tZWRpYXRlbHkiCittc2dzdHIgIkdsZWljaCBhbmZvcmRlcm4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3MQorbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCittc2dzdHIgIkV4dGVybmVzIEFyY2hpdiBpbml0aWFsaXNpZXJlbiB1bmQgZGFoaW4gdmVyc2VuZGVuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzcKK21zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgorbXNnc3RyICJOaWNodHMgdHVuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTAxCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiQml0dGUgZ2ViZW4gU2llIGVpbmVuIE5hbWVuIGRlcyBleHRlcm5lbiBBcmNoaXZzIGFuLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjExNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgcmVtb3RlIG5hbWUuIgorbXNnc3RyICLCuyVzwqsgaXN0IGtlaW4genVsw6Rzc2lnZXIgTmFtZSBlaW5lcyBleHRlcm5lbiBBcmNoaXZzLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCittc2dzdHIgIkZlaGxlciBiZWltIEhpbnp1ZsO8Z2VuIGRlcyBleHRlcm5lbiBBcmNoaXZzIMK7JXPCqyBhdXMgSGVya3VuZnRzb3J0IMK7JXPCqy4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMgbGliL3RyYW5zcG9ydC50Y2w6NgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZldGNoICVzIgorbXNnc3RyICLCuyVzwqsgYW5mb3JkZXJuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgorbXNnc3RyICLCuyVzwqsgYW5mb3JkZXJuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiSW5pdGlhbGlzaWVyZW4gZWluZXMgZXh0ZXJuZW4gQXJjaGl2cyBhbiBBZHJlc3NlIMK7JXPCqyBpc3QgbmljaHQgbcO2Z2xpY2guIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzIGxpYi90cmFuc3BvcnQudGNsOjI1IGxpYi90cmFuc3BvcnQudGNsOjYzCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgInB1c2ggJXMiCittc2dzdHIgIsK7JXPCqyB2ZXJzZW5kZW4uLi4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgorbXNnc3RyICJFaW5yaWNodGVuIHZvbiDCuyVzwqsgYW4gwrslc8KrIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICJad2VpZyBpbiBleHRlcm5lbSBBcmNoaXYgbMO2c2NoZW4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgIkluIFByb2pla3RhcmNoaXYiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTAgbGliL3RyYW5zcG9ydC50Y2w6MTM0Cittc2dpZCAiUmVtb3RlOiIKK21zZ3N0ciAiRXh0ZXJuZXMgQXJjaGl2OiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo2NiBsaWIvdHJhbnNwb3J0LnRjbDoxNDkKK21zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgorbXNnc3RyICJBZHJlc3NlOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4NAorbXNnaWQgIkJyYW5jaGVzIgorbXNnc3RyICJad2VpZ2UiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTA5Cittc2dpZCAiRGVsZXRlIE9ubHkgSWYiCittc2dzdHIgIk51ciBsw7ZzY2hlbiwgd2VubiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTEKK21zZ2lkICJNZXJnZWQgSW50bzoiCittc2dzdHIgIlp1c2FtbWVuZ2Vmw7xocnQgbWl0OiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTIKK21zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCittc2dzdHIgIkbDvHIgwrtadXNhbW1lbmbDvGhyZW4gbWl0wqsgbXVzcyBlaW4gWndlaWcgYW5nZWdlYmVuIHdlcmRlbi4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgorIlxuIgorIiAtICVzIgorbXNnc3RyICIiCisiRm9sZ2VuZGUgWndlaWdlIHNpbmQgbm9jaCBuaWNodCBtaXQgwrslc8KrIHp1c2FtbWVuZ2Vmw7xocnQ6XG4iCisiXG4iCisiIC0gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisiRWluIG9kZXIgbWVocmVyZSBadXNhbW1lbmbDvGhydW5nZW4gc2luZCBmZWhsZ2VzY2hsYWdlbiwgZGEgU2llIG5pY2h0IGRpZSAiCisibm90d2VuZGlnZW4gVmVyc2lvbmVuIHZvcmhlciBhbmdlZm9yZGVydCBoYWJlbi4gIFNpZSBzb2xsdGVuIHZlcnN1Y2hlbiwgIgorInp1ZXJzdCB2b24gwrslc8KrIGFuenVmb3JkZXJuLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDcKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgIkJpdHRlIHfDpGhsZW4gU2llIG1pbmRlc3RlbnMgZWluZW4gWndlaWcsIGRlciBnZWzDtnNjaHQgd2VyZGVuIHNvbGwuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCittc2dzdHIgIlp3ZWlnZSBhdWYgwrslc8KrIHdlcmRlbiBnZWzDtnNjaHQiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkyCittc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCittc2dzdHIgIktlaW4gUHJvamVrdGFyY2hpdiBhdXNnZXfDpGhsdC4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCittc2dzdHIgIsK7JXPCqyBsYWRlbi4uLiIKKworIzogbGliL3JlbW90ZS50Y2w6MTYzCittc2dpZCAiUmVtb3ZlIFJlbW90ZSIKK21zZ3N0ciAiRXh0ZXJuZXMgQXJjaGl2IGVudGZlcm5lbiIKKworIzogbGliL3JlbW90ZS50Y2w6MTY4Cittc2dpZCAiUHJ1bmUgZnJvbSIKK21zZ3N0ciAiQXVmcsOkdW1lbiB2b24iCisKKyM6IGxpYi9yZW1vdGUudGNsOjE3MworbXNnaWQgIkZldGNoIGZyb20iCittc2dzdHIgIkFuZm9yZGVybiB2b24iCisKKyM6IGxpYi9yZW1vdGUudGNsOjIxNQorbXNnaWQgIlB1c2ggdG8iCittc2dzdHIgIlZlcnNlbmRlbiBuYWNoIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMQorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICJTdWNoZW46IgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMworbXNnaWQgIk5leHQiCittc2dzdHIgIk7DpGNoc3RlciIKKworIzogbGliL3NlYXJjaC50Y2w6MjQKK21zZ2lkICJQcmV2IgorbXNnc3RyICJWb3JpZ2VyIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyNQorbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgorbXNnc3RyICJHcm/Dny0vS2xlaW5zY2hyZWlidW5nIHVudGVyc2NoZWlkZW4iCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgorbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIgVmVya27DvHBmdW5nOiIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKK21zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBkZXMgSWNvbnM6IgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKK21zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZ3Nwcm9ncmFtbSBuaWNodCB1bnRlcnN0w7x0enQiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZyBuaWNodCB2ZXJmw7xnYmFyIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKK21zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIlVuYmVudXR6YmFyZSBLb25maWd1cmF0aW9uIGRlciBSZWNodHNjaHJlaWJwcsO8ZnVuZyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgorbXNnc3RyICJXw7ZydGVyYnVjaCBhdWYgJXMgenVyw7xja2dlc2V0enQuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKK21zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgorbXNnc3RyICJSZWNodHNjaHJlaWJwcsO8ZnVuZ3Nwcm9ncmFtbSBtaXQgRmVobGVyIGFiZ2Vicm9jaGVuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6ODAKK21zZ2lkICJVbnJlY29nbml6ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiVW5iZWthbm50ZXMgUmVjaHRzY2hyZWlicHLDvGZ1bmdzcHJvZ3JhbW0iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKK21zZ2lkICJObyBTdWdnZXN0aW9ucyIKK21zZ3N0ciAiS2VpbmUgVm9yc2NobMOkZ2UiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKK21zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIlVuZXJ3YXJ0ZXRlcyBFT0Ygdm9tIFJlY2h0c2NocmVpYnByw7xmdW5nc3Byb2dyYW1tIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCittc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCittc2dzdHIgIlJlY2h0c2NocmVpYnByw7xmdW5nIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBsaWIvc3Noa2V5LnRjbDozMQorbXNnaWQgIk5vIGtleXMgZm91bmQuIgorbXNnc3RyICJLZWluZSBTY2hsw7xzc2VsIGdlZnVuZGVuLiIKKworIzogbGliL3NzaGtleS50Y2w6MzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgorbXNnc3RyICLDlmZmZW50bGljaGVyIFNjaGzDvHNzZWwgZ2VmdW5kZW4gaW46ICVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDo0MAorbXNnaWQgIkdlbmVyYXRlIEtleSIKK21zZ3N0ciAiU2NobMO8c3NlbCBlcnpldWdlbiIKKworIzogbGliL3NzaGtleS50Y2w6NTYKK21zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKK21zZ3N0ciAiSW4gWndpc2NoZW5hYmxhZ2Uga29waWVyZW4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjcwCittc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCittc2dzdHIgIklociBPcGVuU1NIIMO2ZmZlbmxpY2hlciBTY2hsw7xzc2VsIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3OAorbXNnaWQgIkdlbmVyYXRpbmcuLi4iCittc2dzdHIgIkVyemV1Z2VuLi4uIgorCisjOiBsaWIvc3Noa2V5LnRjbDo4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIktvbm50ZSDCu3NzaC1rZXlnZW7CqyBuaWNodCBzdGFydGVuOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMTEKK21zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCittc2dzdHIgIlNjaGzDvHNzZWxlcnpldWd1bmcgZmVobGdlc2NobGFnZW4uIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMTgKK21zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgorbXNnc3RyICJTY2hsw7xzc2VsZXJ6ZXVndW5nIGVyZm9sZ3JlaWNoLCBhYmVyIGtlaW5lIFNjaGzDvHNzZWwgZ2VmdW5kZW4uIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCittc2dzdHIgIklociBTY2hsw7xzc2VsIGlzdCBhYmdlbGVndCBpbjogJXMiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiVzIC4uLiAlKmkgdm9uICUqaSAlcyAoJTNpJSUpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorbXNnaWQgIkFkZCBUb29sIgorbXNnc3RyICJXZXJremV1ZyBoaW56dWbDvGdlbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKK21zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKK21zZ3N0ciAiTmV1ZXMgS29tbWFuZG8gZsO8ciBXZXJremV1ZyBoaW56dWbDvGdlbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzMKK21zZ2lkICJBZGQgZ2xvYmFsbHkiCittc2dzdHIgIkdsb2JhbCBoaW56dWbDvGdlbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDUKK21zZ2lkICJUb29sIERldGFpbHMiCittc2dzdHIgIkVpbnplbGhlaXRlbiBkZXMgV2Vya3pldWdzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0OAorbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgorbXNnc3RyICJCZW51dHplbiBTaWUgZWluZW4gU2NocsOkZ3N0cmljaCDCuy/CqywgdW0gVW50ZXJtZW7DvHMgenUgZXJzdGVsbGVuOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NjEKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiS29tbWFuZG86IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo3NAorbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCittc2dzdHIgIkJlc3TDpHRpZ3VuZ3NmcmFnZSB2b3IgU3RhcnRlbiBhbnplaWdlbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODAKK21zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKK21zZ3N0ciAiQmVudXR6ZXIgbmFjaCBWZXJzaW9uIGZyYWdlbiAoc2V0enQgJFJFVklTSU9OKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODUKK21zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKK21zZ3N0ciAiQmVudXR6ZXIgbmFjaCB6dXPDpHR6bGljaGVuIEFyZ3VtZW50ZW4gZnJhZ2VuIChzZXR6dCAkQVJHUykiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjkyCittc2dpZCAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93IgorbXNnc3RyICJLZWluIEF1c2dhYmVmZW5zdGVyIHplaWdlbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTcKK21zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgorbXNnc3RyICJOdXIgc3RhcnRlbiwgd2VubiBlaW4gVmVyZ2xlaWNoIGdld8OkaGx0IGlzdCAoJEZJTEVOQU1FIGlzdCBuaWNodCBsZWVyKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTIxCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKK21zZ3N0ciAiQml0dGUgZ2ViZW4gU2llIGVpbmVuIFdlcmt6ZXVnbmFtZW4gYW4uIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJXZXJremV1ZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFkZCB0b29sOlxuIgorIiVzIgorbXNnc3RyICIiCisiV2Vya3pldWcga29ubnRlIG5pY2h0IGhpbnp1Z2Vmw7xndCB3ZXJkZW46XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MAorbXNnaWQgIlJlbW92ZSBUb29sIgorbXNnc3RyICJXZXJremV1ZyBlbnRmZXJuZW4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5NgorbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgorbXNnc3RyICJXZXJremV1Z2tvbW1hbmRvcyBlbnRmZXJuZW4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIwMAorbXNnaWQgIlJlbW92ZSIKK21zZ3N0ciAiRW50ZmVybmVuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoV2Vya3pldWdlIGbDvHIgbG9rYWxlcyBBcmNoaXYgd2VyZGVuIGluIEJsYXUgYW5nZXplaWd0KSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6Mjk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgorbXNnc3RyICJLb21tYW5kbyBhdWZydWZlbjogJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjMxMQorbXNnaWQgIkFyZ3VtZW50cyIKK21zZ3N0ciAiQXJndW1lbnRlIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDgKK21zZ2lkICJPSyIKK21zZ3N0ciAiT2siCisKKyM6IGxpYi90b29scy50Y2w6NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgIlVtIMK7JXPCqyB6dSBzdGFydGVuLCBtdXNzIGVpbmUgRGF0ZWkgYXVzZ2V3w6RobHQgc2Vpbi4iCisKKyM6IGxpYi90b29scy50Y2w6OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKK21zZ3N0ciAiV29sbGVuIFNpZSAlcyB3aXJrbGljaCBzdGFydGVuPyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sOiAlcyIKK21zZ3N0ciAiV2Vya3pldWc6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjExMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmc6ICVzIgorbXNnc3RyICJTdGFydGVuOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgorbXNnc3RyICJXZXJremV1ZyBlcmZvbGdyZWljaCBhYmdlc2NobG9zc2VuOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGZhaWxlZDogJXMiCittc2dzdHIgIldlcmt6ZXVnIGZlaGxnZXNjaGxhZ2VuOiAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCittc2dzdHIgIk5ldWUgw4RuZGVydW5nZW4gdm9uIMK7JXPCqyBob2xlbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCittc2dzdHIgIkF1ZnLDpHVtZW4gdm9uIMK7JXPCqyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKK21zZ3N0ciAiw5xiZXJuYWhtZXp3ZWlnZSBhdWZyw6R1bWVuIHVuZCBlbnRmZXJuZW4sIGRpZSBpbiDCuyVzwqsgZ2Vsw7ZzY2h0IHd1cmRlbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCittc2dzdHIgIsOEbmRlcnVuZ2VuIG5hY2ggwrslc8KrIHZlcnNlbmRlbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCittc2dzdHIgIlNwaWVnZWxuIG5hY2ggJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAiJXMgJXMgbmFjaCAlcyB2ZXJzZW5kZW4iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwMAorbXNnaWQgIlB1c2ggQnJhbmNoZXMiCittc2dzdHIgIlp3ZWlnZSB2ZXJzZW5kZW4iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjExNAorbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKK21zZ3N0ciAiTG9rYWxlIFp3ZWlnZSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCittc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKK21zZ3N0ciAiWmllbC1Qcm9qZWt0YXJjaGl2IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjkKK21zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgorbXNnc3RyICJOZXR6d2Vyay1FaW5zdGVsbHVuZ2VuIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzEKK21zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIsOcYmVyc2NocmVpYmVuIHZvbiBleGlzdGllcmVuZGVuIFp3ZWlnZW4gZXJ6d2luZ2VuIChrw7ZubnRlIMOEbmRlcnVuZ2VuIGzDtnNjaGVuKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTc1Cittc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCittc2dzdHIgIktvbXBha3RlcyBEYXRlbmZvcm1hdCBiZW51dHplbiAoZsO8ciBsYW5nc2FtZSBOZXR6dmVyYmluZHVuZ2VuKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTc5Cittc2dpZCAiSW5jbHVkZSB0YWdzIgorbXNnc3RyICJNaXQgTWFya2llcnVuZ2VuIMO8YmVydHJhZ2VuIgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9lbC5wbyBiL2dpdC1ndWkvcG8vZWwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYzNGJhNAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vZWwucG8KQEAgLTAsMCArMSwyMDA1IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gR3JlZWsKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEppbW15IEFuZ2VsYWtvcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgorIyBKaW1teSBBbmdlbGFrb3MgPHZ5cnVzc0BoZWxsdWcuZ3I+LCAyMDA5LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZWxcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMDMtMTQgMDc6MTgrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDYtMjMgMjE6MzMrMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmltbXkgQW5nZWxha29zIDx2eXJ1c3NAaGVsbHVnLmdyPlxuIgorIkxhbmd1YWdlLVRlYW06IEdyZWVrIDxpMThuQGxpc3RzLmhlbGx1Zy5ncj5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLUdlbmVyYXRvcjogTG9rYWxpemUgMC4zXG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo2MzQgZ2l0LWd1aS5zaDo2NDggZ2l0LWd1aS5zaDo2NjEgZ2l0LWd1aS5zaDo3NDQKKyM6IGdpdC1ndWkuc2g6NzYzCittc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCittc2dzdHIgImdpdC1ndWk6IM66z4HOr8+DzrnOvM6/IM+Dz4bOrM67zrzOsSIKKworIzogZ2l0LWd1aS5zaDo1OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZvbnQgc3BlY2lmaWVkIGluICVzOiIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+BzrcgzrPPgc6xzrzOvM6xz4TOv8+DzrXOuc+Bzqwgz4PPhM6/ICVzOiIKKworIzogZ2l0LWd1aS5zaDo2MjAKK21zZ2lkICJNYWluIEZvbnQiCittc2dzdHIgIs6az43Pgc65zrEgzpPPgc6xzrzOvM6xz4TOv8+DzrXOuc+BzqwiCisKKyM6IGdpdC1ndWkuc2g6NjIxCittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgIs6Tz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sIM6UzrnOsc+Gzr/Pgc6sz4IvzprOv869z4PPjM67zrHPgiIKKworIzogZ2l0LWd1aS5zaDo2MzUKK21zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCittc2dzdHIgIs6UzrUgzrLPgc6tzrjOt866zrUgz4TOvyBnaXQgz4PPhM6/IFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjY2MgorbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgorbXNnc3RyICLOkc60z43Ovc6xz4TOtyDOtyDOsc69zqzOs869z4nPg863IM+Dz4TOv865z4fOtc65zr/Pg861zrnPgc6sz4Igzq3Ous60zr/Pg863z4IgR2l0OiIKKworIzogZ2l0LWd1aS5zaDo2ODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCisiXG4iCisiJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKKyJcbiIKKyIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCisiXG4iCisiQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKK21zZ3N0ciAiIgorIs6UzrUgzrzPgM6/z4HOtc6vIM69zrEgzrHOvc65z4fOvc61z4XPhM61zq8gzrcgzq3Ous60zr/Pg863IM+Ezr/PhSBHaXQuIFxuIgorIlxuIgorIs6kzr8gJXMgz4XPgM6/z4PPhM63z4HOr862zrXOuSDPgM+Jz4IgzrXOr869zrHOuSDOtyDOrc66zrTOv8+DzrcgJyVzJy5cbiIKKyJcbiIKKyLOpM6/ICVzICDOsc+AzrHOuc+EzrXOryDPhM6/z4XOu86sz4fOuc+Dz4TOv869IEdpdCAxLjUuMCDOriDPgM65z4wgz4DPgc+Mz4PPhs6xz4TOty5cbiIKKyJcbiIKKyLOnc6xIM+Fz4DOv8+EzrXOuM61zq8gz4DPic+CIM+Ezr8gJyVzJyDOtc6vzr3Osc65IM63IM6tzrrOtM6/z4POtyAxLjUuMDtcbiIKKworIzogZ2l0LWd1aS5zaDo5MTgKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgIs6UzrUgzrLPgc6tzrjOt866zrUgz4bOrM66zrXOu86/z4IgR2l0OiIKKworIzogZ2l0LWd1aS5zaDo5MjUKK21zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgzrzOtc+EzrHOus6vzr3Ot8+Dzrcgz4PPhM63zr0gzrrOv8+Bz4XPhs6uIM+Ezr/PhSDPhs6xzrrOrc67zr/PhSDOtc+BzrPOsc+Dzq/Osc+COiIKKworIzogZ2l0LWd1aS5zaDo5MzIKK21zZ2lkICJDYW5ub3QgdXNlIGZ1bm55IC5naXQgZGlyZWN0b3J5OiIKK21zZ3N0ciAizpTOtc69IM61zq/Ovc6xzrkgzrTPhc69zrHPhM6uIM63IM+Hz4HOrs+Dzrcgz4DOtc+Bzq/Otc+BzrPOv8+FIM+GzrHOus6tzrvOv8+FIC5naXQ6IgorCisjOiBnaXQtZ3VpLnNoOjkzNworbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLOlM61zr0gz4XPgM6sz4HPh861zrkgz4bOrM66zrXOu86/z4IgzrXPgc6zzrHPg86vzrHPgiIKKworIzogZ2l0LWd1aS5zaDoxMDg0IGxpYi9jaGVja291dF9vcC50Y2w6MjgzCittc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKK21zZ3N0ciAizpHOvc6xzr3Orc+Jz4POtyDOus6xz4TOrM+Dz4TOsc+DzrfPgiDOsc+Bz4fOtc6vzr/PhS4uLiIKKworIzogZ2l0LWd1aS5zaDoxMTQ5Cittc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKK21zZ3N0ciAizpHOvc6vz4fOvc61z4XPg863IM6zzrnOsSDPhM+Bzr/PgM6/z4DOv865zrfOvM6tzr3OsSDOsc+Bz4fOtc6vzrEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTMyNCBsaWIvYnJvd3Nlci50Y2w6MjQ2Cittc2dpZCAiUmVhZHkuIgorbXNnc3RyICLOiM+Ezr/Ouc68zr8uIgorCisjOiBnaXQtZ3VpLnNoOjE1OTAKK21zZ2lkICJVbm1vZGlmaWVkIgorbXNnc3RyICLOnM63IM+Ez4HOv8+Azr/PgM6/zrnOt868zq3Ovc6/IgorCisjOiBnaXQtZ3VpLnNoOjE1OTIKK21zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAizqTPgc6/z4DOv8+Azr/Ouc63zrzOrc69zr8sIM68zrcgz4PPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3OvyIKKworIzogZ2l0LWd1aS5zaDoxNTkzIGdpdC1ndWkuc2g6MTU5OAorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICLOo8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc6/IM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uIgorCisjOiBnaXQtZ3VpLnNoOjE1OTQgZ2l0LWd1aS5zaDoxNTk5Cittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIs6czq3Pgc63IM+Dz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zrEgz4DPgc6/z4Igz4XPgM6/zrLOv867zq4iCisKKyM6IGdpdC1ndWkuc2g6MTU5NSBnaXQtZ3VpLnNoOjE2MDAKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKK21zZ3N0ciAizqPPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3OvyDPgM+Bzr/PgiDPhc+Azr/Oss6/zrvOriwgzrvOtc6vz4DOtc65IgorCisjOiBnaXQtZ3VpLnNoOjE1OTcKK21zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIs6czrcgz4DOsc+BzrHOus6/zrvOv8+FzrjOv8+NzrzOtc69zr8sIM68zrcgz4PPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3OvyIKKworIzogZ2l0LWd1aS5zaDoxNjAyCittc2dpZCAiTWlzc2luZyIKK21zZ3N0ciAizpvOtc6vz4DOtc65IgorCisjOiBnaXQtZ3VpLnNoOjE2MDMKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCittc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Ouc63zrzOrc69zr8gz4DPgc6/z4IgzrHPhs6xzq/Pgc61z4POtyIKKworIzogZ2l0LWd1aS5zaDoxNjA0Cittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgorbXNnc3RyICLOo8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc6/IM+Az4HOv8+CIM6xz4bOsc6vz4HOtc+DzrcsIM6xzrrPjM68zrEgz4DOsc+Bz4zOvSIKKworIzogZ2l0LWd1aS5zaDoxNjA2IGdpdC1ndWkuc2g6MTYwNyBnaXQtZ3VpLnNoOjE2MDggZ2l0LWd1aS5zaDoxNjA5Cittc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAizpHPgM6xzrnPhM61zq8gzrXPgM6vzrvPhc+Dzrcgz4PPhc6zz4fPjs69zrXPhc+DzrfPgiIKKworIzogZ2l0LWd1aS5zaDoxNjQ0Cittc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrXOus66zq/Ovc63z4POtyDPhM6/z4UgZ2l0ay4uLiDPgM6xz4HOsc66zrHOu8+OIM+AzrXPgc65zrzOrc69zrXPhM61Li4uIgorCisjOiBnaXQtZ3VpLnNoOjE2NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIHN0YXJ0IGdpdGs6XG4iCisiXG4iCisiJXMgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKyLOkc60z4XOvc6xzrzOr86xIM61zrrOus6vzr3Ot8+DzrfPgiDPhM6/z4UgZ2l0azpcbiIKKyJcbiIKKyLOpM6/ICVzIM60zrXOvSDPhc+AzqzPgc+HzrXOuSIKKworIzogZ2l0LWd1aS5zaDoxODYwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICLOkc+Azr/OuM61z4TOrs+BzrnOvyIKKworIzogZ2l0LWd1aS5zaDoxODYxCittc2dpZCAiRWRpdCIKK21zZ3N0ciAizpXPgM61zr7Otc+BzrPOsc+Dzq/OsSIKKworIzogZ2l0LWd1aS5zaDoxODYzIGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIs6azrvOrM60zr/PgiIKKworIzogZ2l0LWd1aS5zaDoxODY2IGxpYi9jaG9vc2VfcmV2LnRjbDo1NDgKK21zZ2lkICJDb21taXRAQG5vdW4iCittc2dzdHIgIs6lz4DOv86yzr/Ou86uQEBub3VuIgorCisjOiBnaXQtZ3VpLnNoOjE4NjkgbGliL21lcmdlLnRjbDoxMjAgbGliL21lcmdlLnRjbDoxNDkgbGliL21lcmdlLnRjbDoxNjcKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAizqPPhc6zz4fPjs69zrXPhc+DzrciCisKKyM6IGdpdC1ndWkuc2g6MTg3MCBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3Cittc2dpZCAiUmVtb3RlIgorbXNnc3RyICLOkc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvyIKKworIzogZ2l0LWd1aS5zaDoxODc5Cittc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCittc2dzdHIgIs6gzrXPgc65zq7Os863z4POtyDOkc+Bz4fOtc6vz4nOvSDOpM+Bzq3Ph86/zr3PhM6xIM6azrvOrM60zr/PhSIKKworIzogZ2l0LWd1aS5zaDoxODgzCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKK21zZ3N0ciAizqDOtc+BzrnOrs6zzrfPg863IM6Rz4HPh861zq/Pic69IM6azrvOrM60zr/PhS4uLiIKKworIzogZ2l0LWd1aS5zaDoxODg4Cittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKK21zZ3N0ciAizpHPgM61zrnOus+Mzr3Ouc+DzrcgzpnPg8+Ezr/Pgc65zrrOv8+NIM6kz4HOrc+Hzr/Ovc+EzrEgzprOu86szrTOv8+FIgorCisjOiBnaXQtZ3VpLnNoOjE4OTIKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgorbXNnc3RyICLOkc+AzrXOuc66z4zOvc65z4POtyDOmc+Dz4TOv8+BzrnOus6/z40gzozOu8+Jzr0gz4TPic69IM6azrvOrM60z4nOvSIKKworIzogZ2l0LWd1aS5zaDoxODk5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCittc2dzdHIgIs6gzrXPgc65zq7Os863z4POtyDOkc+Bz4fOtc6vz4nOvSDPhM6/z4UgJXMiCisKKyM6IGdpdC1ndWkuc2g6MTkwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCittc2dzdHIgIs6Rz4DOtc65zrrPjM69zrnPg863IM6Zz4PPhM6/z4HOuc66zr/PjSDPhM6/z4UgJXMiCisKKyM6IGdpdC1ndWkuc2g6MTkwNiBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKK21zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgorbXNnc3RyICLOo8+EzrHPhM65z4PPhM65zrrOrCDOks6sz4POt8+CIM6UzrXOtM6/zrzOrc69z4nOvSIKKworIzogZ2l0LWd1aS5zaDoxOTA5IGxpYi9kYXRhYmFzZS50Y2w6MzQKK21zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKK21zZ3N0ciAizqPPhc68z4DOr861z4POtyDOks6sz4POt8+CIM6UzrXOtM6/zrzOrc69z4nOvSIKKworIzogZ2l0LWd1aS5zaDoxOTEyCittc2dpZCAiVmVyaWZ5IERhdGFiYXNlIgorbXNnc3RyICLOlc+AzrHOu86uzrjOtc+Fz4POtyDOks6sz4POt8+CIM6UzrXOtM6/zrzOrc69z4nOvSIKKworIzogZ2l0LWd1aS5zaDoxOTE5IGdpdC1ndWkuc2g6MTkyMyBnaXQtZ3VpLnNoOjE5MjcgbGliL3Nob3J0Y3V0LnRjbDo3CisjOiBsaWIvc2hvcnRjdXQudGNsOjM5IGxpYi9zaG9ydGN1dC50Y2w6NzEKK21zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgorbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSDOlc65zrrOv869zrnOtM6vzr/PhSDOlc+AzrnPhs6szr3Otc65zrHPgiDOlc+BzrPOsc+Dzq/Osc+CIgorCisjOiBnaXQtZ3VpLnNoOjE5MzIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxNzcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODUKK21zZ2lkICJRdWl0IgorbXNnc3RyICLOiM6+zr/OtM6/z4IiCisKKyM6IGdpdC1ndWkuc2g6MTkzOQorbXNnaWQgIlVuZG8iCittc2dzdHIgIs6Rzr3Osc6vz4HOtc+DzrciCisKKyM6IGdpdC1ndWkuc2g6MTk0MgorbXNnaWQgIlJlZG8iCittc2dzdHIgIs6ezrHOvc6sIgorCisjOiBnaXQtZ3VpLnNoOjE5NDYgZ2l0LWd1aS5zaDoyNDQzCittc2dpZCAiQ3V0IgorbXNnc3RyICLOkc+Azr/Ous6/z4DOriIKKworIzogZ2l0LWd1aS5zaDoxOTQ5IGdpdC1ndWkuc2g6MjQ0NiBnaXQtZ3VpLnNoOjI1MjAgZ2l0LWd1aS5zaDoyNjE0CisjOiBsaWIvY29uc29sZS50Y2w6NjkKK21zZ2lkICJDb3B5IgorbXNnc3RyICLOkc69z4TOuc6zz4HOsc+Gzq4iCisKKyM6IGdpdC1ndWkuc2g6MTk1MiBnaXQtZ3VpLnNoOjI0NDkKK21zZ2lkICJQYXN0ZSIKK21zZ3N0ciAizpXPgM65zrrPjM67zrvOt8+DzrciCisKKyM6IGdpdC1ndWkuc2g6MTk1NSBnaXQtZ3VpLnNoOjI0NTIgbGliL2JyYW5jaF9kZWxldGUudGNsOjI2CisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM4Cittc2dpZCAiRGVsZXRlIgorbXNnc3RyICLOlM65zrHOs8+BzrHPhs6uIgorCisjOiBnaXQtZ3VpLnNoOjE5NTkgZ2l0LWd1aS5zaDoyNDU2IGdpdC1ndWkuc2g6MjYxOCBsaWIvY29uc29sZS50Y2w6NzEKK21zZ2lkICJTZWxlY3QgQWxsIgorbXNnc3RyICLOlc+AzrnOu86/zrPOriDOjM67z4nOvSIKKworIzogZ2l0LWd1aS5zaDoxOTY4Cittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsS4uLiIKKworIzogZ2l0LWd1aS5zaDoxOTc0Cittc2dpZCAiQ2hlY2tvdXQuLi4iCittc2dzdHIgIs6Vzr7Osc6zz4nOs86uLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE5ODAKK21zZ2lkICJSZW5hbWUuLi4iCittc2dzdHIgIs6czrXPhM6/zr3Ov868zrHPg86vzrEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTk4NSBnaXQtZ3VpLnNoOjIwODUKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MTk5MAorbXNnaWQgIlJlc2V0Li4uIgorbXNnc3RyICLOlc+AzrHOvc6xz4bOv8+BzqwuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjAwMiBnaXQtZ3VpLnNoOjIzODkKK21zZ2lkICJOZXcgQ29tbWl0IgorbXNnc3RyICLOnc6tzrEgzqXPgM6/zrLOv867zq4iCisKKyM6IGdpdC1ndWkuc2g6MjAxMCBnaXQtZ3VpLnNoOjIzOTYKK21zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKK21zZ3N0ciAizpTOuc+Mz4HOuM+Jz4POtyDOpM61zrvOtc+Fz4TOsc6vzrHPgiDOpc+Azr/Oss6/zrvOrs+CIgorCisjOiBnaXQtZ3VpLnNoOjIwMTkgZ2l0LWd1aS5zaDoyMzU2IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKK21zZ2lkICJSZXNjYW4iCittc2dzdHIgIs6Vz4DOsc69zrHOvc6vz4fOvc61z4XPg863IgorCisjOiBnaXQtZ3VpLnNoOjIwMjUKK21zZ2lkICJTdGFnZSBUbyBDb21taXQiCittc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Or863z4POtyDOoM+Bzr/PgiDOpc+Azr/Oss6/zrvOriIKKworIzogZ2l0LWd1aS5zaDoyMDMxCittc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCittc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Or863z4POtyDOkc67zrvOsc6zzrzOrc69z4nOvSDOkc+Bz4fOtc6vz4nOvSDOoM+Bzr/PgiDOpc+Azr/Oss6/zrvOriIKKworIzogZ2l0LWd1aS5zaDoyMDM3Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAizpHPgM6/z4PPhM6xzrTOuc6/z4DOv86vzrfPg863IM6Rz4DPjCDOpc+Azr/Oss6/zrvOriIKKworIzogZ2l0LWd1aS5zaDoyMDQyIGxpYi9pbmRleC50Y2w6Mzk1Cittc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCittc2dzdHIgIs6Rzr3Osc6vz4HOtc+DzrcgzpHOu867zrHOs8+Ozr0iCisKKyM6IGdpdC1ndWkuc2g6MjA0OSBnaXQtZ3VpLnNoOjIzNjggZ2l0LWd1aS5zaDoyNDY3Cittc2dpZCAiU2lnbiBPZmYiCittc2dzdHIgIs6Rz4DOv8+Dz43Ovc60zrXPg863IgorCisjOiBnaXQtZ3VpLnNoOjIwNTMgZ2l0LWd1aS5zaDoyMzcyCittc2dpZCAiQ29tbWl0QEB2ZXJiIgorbXNnc3RyICLOpc+Azr/Oss6/zrvOrkBAdmVyYiIKKworIzogZ2l0LWd1aS5zaDoyMDY0Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgIs6kzr/PgM65zrrOriDOo8+FzrPPh8+Ozr3Otc+Fz4POty4uLiIKKworIzogZ2l0LWd1aS5zaDoyMDY5Cittc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCittc2dzdHIgIs6RzrrPjc+Bz4nPg863IM6jz4XOs8+Hz47Ovc61z4XPg863z4IuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjA4MQorbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIs6PzrjOt8+DzrcuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjA5MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxCisjLCBmdXp6eQorbXNnaWQgIkFwcGxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjA5NSBnaXQtZ3VpLnNoOjIxMTcgbGliL2Fib3V0LnRjbDoxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvdXQgJXMiCittc2dzdHIgIs6gzrXPgc6vICVzIgorCisjOiBnaXQtZ3VpLnNoOjIwOTkKK21zZ2lkICJQcmVmZXJlbmNlcy4uLiIKK21zZ3N0ciAizqDPgc6/z4TOuc68zq7Pg861zrnPgi4uLiIKKworIzogZ2l0LWd1aS5zaDoyMTA3IGdpdC1ndWkuc2g6MjYzOQorbXNnaWQgIk9wdGlvbnMuLi4iCittc2dzdHIgIs6Vz4DOuc67zr/Os86tz4IuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3Cittc2dpZCAiSGVscCIKK21zZ3N0ciAizpLOv86uzrjOtc65zrEiCisKKyM6IGdpdC1ndWkuc2g6MjE1NAorbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgorbXNnc3RyICLOlM65zrHOtM65zrrPhM+FzrHOus6uIM6kzrXOus68zrfPgc6vz4nPg863IgorCisjOiBnaXQtZ3VpLnNoOjIyMzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAizrrPgc6vz4POuc68zr86IM60zrUgzrLPgc6tzrjOt866zrUgzrcgzrTOuc6xzrTPgc6/zrzOrjogJXM6IM6UzrXOvSDPhc+AzqzPgc+HzrXOuSDPhM6/IM6xz4HPh861zq/OvyDOriDOvyDPhs6szrrOtc67zr/PgiIKKworIzogZ2l0LWd1aS5zaDoyMjcxCittc2dpZCAiQ3VycmVudCBCcmFuY2g6IgorbXNnc3RyICLOpM+Bzq3Ph8+Jzr0gzprOu86szrTOv8+COiIKKworIzogZ2l0LWd1aS5zaDoyMjkyCittc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKK21zZ3N0ciAizqPPhM6xzrTOuc6/z4DOv865zrfOvM6tzr3Otc+CIM6RzrvOu86xzrPOrc+CICjOmM6xIM6lz4DOv86yzrvOt864zr/Pjc69KSIKKworIzogZ2l0LWd1aS5zaDoyMzEyCittc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKK21zZ3N0ciAizpzOtyDOo8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc61z4IgzpHOu867zrHOs86tz4IiCisKKyM6IGdpdC1ndWkuc2g6MjM2MgorbXNnaWQgIlN0YWdlIENoYW5nZWQiCittc2dzdHIgIs6jz4TOsc60zrnOv8+Azr/Or863z4POtyDOkc67zrvOsc6zz47OvSIKKworIzogZ2l0LWd1aS5zaDoyMzc4IGxpYi90cmFuc3BvcnQudGNsOjkzIGxpYi90cmFuc3BvcnQudGNsOjE4MgorbXNnaWQgIlB1c2giCittc2dzdHIgIs6PzrjOt8+DzrciCisKKyM6IGdpdC1ndWkuc2g6MjQwOAorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLOkc+Bz4fOuc66z4wgzpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4I6IgorCisjOiBnaXQtZ3VpLnNoOjI0MDkKK21zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAizpTOuc6/z4HOuM+JzrzOrc69zr8gzpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4I6IgorCisjOiBnaXQtZ3VpLnNoOjI0MTAKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLOlM65zr/Pgc64z4nOvM6tzr3OvyDOkc+Bz4fOuc66z4wgzpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4I6IgorCisjOiBnaXQtZ3VpLnNoOjI0MTEKK21zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAizpTOuc6/z4HOuM+JzrzOrc69zr8gzpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4IgzqPPhc6zz4fPjs69zrXPhc+DzrfPgjoiCisKKyM6IGdpdC1ndWkuc2g6MjQxMgorbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAizpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4IgzqPPhc6zz4fPjs69zrXPhc+DzrfPgjoiCisKKyM6IGdpdC1ndWkuc2g6MjQxMworbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAizpzOrs69z4XOvM6xIM6lz4DOv86yzr/Ou86uz4I6IgorCisjOiBnaXQtZ3VpLnNoOjI0NTkgZ2l0LWd1aS5zaDoyNjIyIGxpYi9jb25zb2xlLnRjbDo3MworbXNnaWQgIkNvcHkgQWxsIgorbXNnc3RyICLOkc69z4TOuc6zz4HOsc+Gzq4gzozOu8+Jzr0iCisKKyM6IGdpdC1ndWkuc2g6MjQ4MyBsaWIvYmxhbWUudGNsOjEwNworbXNnaWQgIkZpbGU6IgorbXNnc3RyICLOkc+Bz4fOtc6vzr86IgorCisjOiBnaXQtZ3VpLnNoOjI1ODkKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgIs6Vz4bOsc+BzrzOv86zzq4vzpHOvc+EzrnPg8+Ez4HOv8+Gzq4gzprOv868zrzOsc+EzrnOv8+NIgorCisjOiBnaXQtZ3VpLnNoOjI1OTUKK21zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKK21zZ3N0ciAizqDPgc6/zrLOv867zq4gzqPPhM61zr3PjM+EzrXPgc6/z4UgzqDOu86xzrnPg86vzr/PhSIKKworIzogZ2l0LWd1aS5zaDoyNjAyCittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgIs6gz4HOv86yzr/Ou86uIM6Vz4XPgc+Nz4TOtc+Bzr/PhSDOoM67zrHOuc+Dzq/Ov8+FIgorCisjOiBnaXQtZ3VpLnNoOjI2MTAKK21zZ2lkICJSZWZyZXNoIgorbXNnc3RyICLOkc69zrHOvc6tz4nPg863IgorCisjOiBnaXQtZ3VpLnNoOjI2MzEKK21zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIs6czrXOr8+Jz4POtyDOnM61zrPOrc64zr/Phc+CIM6Tz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sz4IiCisKKyM6IGdpdC1ndWkuc2g6MjYzNQorbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAizpHPjc6+zrfPg863IM6czrXOs86tzrjOv8+Fz4IgzpPPgc6xzrzOvM6xz4TOv8+DzrXOuc+BzqzPgiIKKworIzogZ2l0LWd1aS5zaDoyNjQ2Cittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICLOkc+Azr/Pg8+EzrHOtM65zr/PgM6/zq/Ot8+DzrcgzprOv868zrzOsc+EzrnOv8+NIM6Rz4DPjCDOpc+Azr/Oss6/zrvOriIKKworIzogZ2l0LWd1aS5zaDoyNjQ4Cittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICLOo8+EzrHOtM65zr/PgM6/zq/Ot8+DzrcgzprOv868zrzOsc+EzrnOv8+NIM6gz4HOv8+CIM6lz4DOv86yzr/Ou86uIgorCisjOiBnaXQtZ3VpLnNoOjI2NjcKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM6xz4HPh865zrrOv8+Azr/Or863z4POty4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKKyJcbiIKKyJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKKyJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKKyJieSAlczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIs6lz4DOrM+Bz4fOv8+Fzr0gz4DOuc64zrHOvc6sIM64zq3OvM6xz4TOsSDOvM61IM+Ezr8gz4DOtc+BzrnOss6szrvOu86/zr0uXG4iCisiXG4iCisizp/OuSDOtc6+zq7PgiDOvM61z4TOsc6yzrvOt8+Ezq3PgiDPgM61z4HOuc6yzqzOu867zr/Ovc+Ezr/PgiDOvM6szrvOu86/zr0gzrjOsVxuIgorIs6xzrPOvc6/zrfOuM6/z43OvSDOsc+Az4wgz4DOuc64zrHOvc6uIM61zrrPhM6tzrvOtc+Dzrcgz4XPgM6/zrTOuc61z4HOs86xz4POr86xz4IgR2l0XG4iCisizrHPgM+MIM+Ezr8gJXM6XG4iCisiXG4iCisKKyM6IGdpdC1ndWkuc2g6Mjc5MgorbXNnaWQgIiIKKyJcbiIKKyJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCisiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorbXNnc3RyICIiCisiXG4iCisizpHPhc+Ez4wgzr/Phs61zq/Ou861z4TOsc65IM+DzrUgzq3Ovc6xIM6zzr3Pic+Dz4TPjCDOuM6tzrzOsSDOvM61IM+Ezr9cbiIKKyLOtc66z4TOtc67zq3Pg865zrzOvyBUY2wgz4DOv8+FIM60zrnOsc69zq3OvM61z4TOsc65IM68zrUgz4TOvyBDeWd3aW4uIgorCisjOiBnaXQtZ3VpLnNoOjI3OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgorImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgorInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCisifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyLOiM69zrEgzrrOsc67z4wgz4XPgM6/zrrOsc+EzqzPg8+EzrHPhM6/IM6zzrnOsSDPhM6/ICVzXG4iCisizrXOr869zrHOuSDOtyDPhM6/z4DOv864zq3PhM63z4POtyDPhM65zrzPjs69IM6zzrnOsSDPhM65z4Igz4HPhc64zrzOr8+DzrXOuc+CXG4iCisidXNlci5uYW1lIM66zrHOuSB1c2VyLmVtYWlsIM+Dz4TOvyDPgM+Bzr/Pg8+Jz4DOuc66z4wgz4POsc+CXG4iCisizrHPgc+HzrXOr86/IH4vLmdpdGNvbmZpZyAuXG4iCisKKyM6IGxpYi9hYm91dC50Y2w6MjYKK21zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCittc2dzdHIgImdpdC1ndWkgLSDOrc69zrEgzrPPgc6xz4bOuc66z4wgz4DOtc+BzrnOss6szrvOu86/zr0gzrPOuc6xIM+Ezr8gR2l0LiIKKworIzogbGliL2JsYW1lLnRjbDo3NworbXNnaWQgIkZpbGUgVmlld2VyIgorbXNnc3RyICLOlc+GzrHPgc68zr/Os86uIM6gz4HOv86yzr/Ou86uz4IgzpHPgc+HzrXOr86/z4UiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODEKK21zZ2lkICJDb21taXQ6IgorbXNnc3RyICLOpc+Azr/Oss6/zrvOrjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjY0Cittc2dpZCAiQ29weSBDb21taXQiCittc2dzdHIgIs6Rzr3PhM65zrPPgc6xz4bOriDOpc+Azr/Oss6/zrvOrs+CIgorCisjOiBsaWIvYmxhbWUudGNsOjM4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgJXMuLi4iCittc2dzdHIgIs6Rzr3OrM6zzr3Pic+DzrcgJXMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NDg4Cittc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Gz4zPgc+Ez4nPg863IM+Dz4fOv867zq/Pic69IM+AzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IgzrHOvc+EzrnOs8+BzrHPhs6uz4IvzrzOtc+EzrHOus6vzr3Ot8+DzrfPgi4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1MDgKK21zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCittc2dzdHIgIs6zz4HOsc68zrzOrc+CIM+Dz4fOv867zrnOsc+DzrzOrc69zrXPgiIKKworIzogbGliL2JsYW1lLnRjbDo2ODkKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPhs+Mz4HPhM+Jz4POtyDPg8+Hzr/Ou86vz4nOvSDOsc+Bz4fOuc66zq7PgiDPhM6/z4DOv864zrXPg86vzrHPgi4uLiIKKworIzogbGliL2JsYW1lLnRjbDo2OTIKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAizojOs865zr3OtSDOv867zr/Ous67zq7Pgc+Jz4POtyDPhM6/z4Ugz4PPh86/zrvOuc6xz4POvM6/z40uIgorCisjOiBsaWIvYmxhbWUudGNsOjc0NgorbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKK21zZ3N0ciAizqbPjM+Bz4TPic+Dzrcgz4PPh86/zrvOr86/z4UuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAizpTOt868zrnOv8+Fz4HOs8+Mz4I6IgorCisjOiBsaWIvYmxhbWUudGNsOjgwNgorbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIs6lz4DOv86yzr/Ou86tzrHPgjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODExCittc2dpZCAiT3JpZ2luYWwgRmlsZToiCittc2dzdHIgIs6Rz4HPh865zrrPjCDOkc+Bz4fOtc6vzr86IgorCisjOiBsaWIvYmxhbWUudGNsOjkyNQorbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgorbXNnc3RyICLOkc+Bz4fOuc66zqwgzpHPgM+MOiIKKworIzogbGliL2JsYW1lLnRjbDo5MzEKK21zZ2lkICJJbiBGaWxlOiIKK21zZ3N0ciAizqPPhM6/IM6Rz4HPh861zq/OvzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTM2Cittc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgorbXNnc3RyICLOkc69z4TOuc6zz4HOrM+GzrfOus61IM6uIM6czrXPhM6xzrrOuc69zq7OuM63zrrOtSDOlc60z44gzpHPgM+MOiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTkKK21zZ2lkICJDaGVja291dCBCcmFuY2giCittc2dzdHIgIs6Vzr7Osc6zz4nOs86uIM6azrvOrM60zr/PhSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAizpXOvs6xzrPPic6zzq4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUyMiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcxCisjOiBsaWIvb3B0aW9uLnRjbDoxMDMgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MiBsaWIvdHJhbnNwb3J0LnRjbDo5NworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAizpHOus+Nz4HPic+DzrciCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcKK21zZ2lkICJSZXZpc2lvbiIKK21zZ3N0ciAizpHOvc6xzrjOtc+Oz4HOt8+DzrciCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM2IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OSBsaWIvb3B0aW9uLnRjbDoyNDIKK21zZ2lkICJPcHRpb25zIgorbXNnc3RyICLOlc+AzrnOu86/zrPOrc+CIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKK21zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCittc2dzdHIgIs6Rzr3OrM66z4TOt8+DzrcgzprOu86szrTOv8+FIM6gzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Cittc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgorbXNnc3RyICLOkc+Azr/Ous+MzrvOu863z4POtyDOkc+Az4wgzqTOv8+AzrnOus+MIM6azrvOrM60zr8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgorbXNnaWQgIkNyZWF0ZSBCcmFuY2giCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOr86xIM6azrvOrM60zr/PhSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI3Cittc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOr86xIM6dzq3Ov8+FIM6azrvOrM60zr/PhSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzcxCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQwCittc2dpZCAiQnJhbmNoIE5hbWUiCittc2dzdHIgIs6Mzr3Ov868zrEgzprOu86szrTOv8+FIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAizozOvc6/zrzOsToiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgorbXNnc3RyICLOo8+FzrzPhs+Jzr3Or86xIM6fzr3PjM68zrHPhM6/z4IgzprOu86szrTOv8+FIM6gzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2NgorbXNnaWQgIlN0YXJ0aW5nIFJldmlzaW9uIgorbXNnc3RyICLOkc+Bz4fOuc66zq4gzpHOvc6xzrjOtc+Oz4HOt8+DzrciCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgorbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgorbXNnc3RyICLOlc69zrfOvM6tz4HPic+DzrcgzqXPgM6sz4HPh86/zr3PhM6xIM6azrvOrM60zr/PhToiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorIywgZnV6enkKK21zZ2lkICJObyIKK21zZ3N0ciAizozPh865IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKK21zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKK21zZ3N0ciAizqPPhc6zz4fPjs69zrXPhc+DzrcgzpXPgM65z4TOrM+Hz4XOvc+DzrfPgiDOnM+Mzr3OvyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTE0Cittc2dpZCAiUmVzZXQiCittc2dzdHIgIs6Vz4DOsc69zrHPhs6/z4HOrCIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgIs6Vzr7Osc6zz4nOs86uIM6czrXPhM6sIM+EzrcgzpTOt868zrnOv8+Fz4HOs86vzrEiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzEKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKK21zZ3N0ciAizqDOsc+BzrHOus6xzrvPjiDOtc+AzrnOu86tzr7PhM61IM6tzr3Osc69IM66zrvOrM60zr8gz4DOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgi4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCittc2dzdHIgIiIKKyLOnyDOus67zqzOtM6/z4Igz4DOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiAlcyDOtM61zr0gzrXOr869zrHOuSDOus67zqzOtM6/z4Igz4DOv8+FIM6yz4HOr8+DzrrOtc+EzrHOuSDPg8+Ezr8gzrHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr8gIgorIs6xz4DOv864zrXPhM6uz4HOuc6/LiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1MyBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODYKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgorbXNnc3RyICLOoM6xz4HOsc66zrHOu8+OIM60z47Pg8+EzrUgzq3Ovc6xIM+Mzr3Ov868zrEgzrrOu86szrTOv8+FLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycgzrTOtc69IM61zq/Ovc6xzrkgzrHPgM6/zrTOtc66z4TPjCDPjM69zr/OvM6xIM66zrvOrM60zr/PhS4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNQorbXNnaWQgIkRlbGV0ZSBCcmFuY2giCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzprOu86szrTOv8+FIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjAKK21zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgorbXNnc3RyICLOlM65zrHOs8+BzrHPhs6uIM6kzr/PgM65zrrOv8+NIM6azrvOrM60zr/PhSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM3Cittc2dpZCAiTG9jYWwgQnJhbmNoZXMiCittc2dzdHIgIs6kzr/PgM65zrrOv86vIM6azrvOrM60zr/OuSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUyCittc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzpzPjM69zr8gzpXOrM69IM6Vzq/Ovc6xzrkgzqPPhc6zz4fPic69zrXPhc68zq3Ovc6/IM6czrUiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1NAorbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgdGVzdC4pIgorbXNnc3RyICLOoM6szr3PhM6xICjOnM63IM60zrnOtc69zrXPgc6zzrfOuM61zq8gzrTOv866zrnOvM6uIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IuKSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKK21zZ3N0ciAizp/OuSDOtc6+zq7PgiDOus67zqzOtM6/zrkgzrTOtc69IM61zq/Ovc6xzrkgz4DOu86uz4HPic+CIM+Dz4XOs8+Hz4nOvc61z4XOvM6tzr3Ov865IM68zrUgz4TOvyAlczoiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC4gXG4iCisiXG4iCisiIERlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisizpcgzrHOvc6szrrPhM63z4POtyDOtM65zrXOs8+BzrHOvM68zq3Ovc+Jzr0gzrrOu86szrTPic69IM61zq/Ovc6xzrkgzrTPjc+DzrrOv867zrcuXG4iCisiXG4iCisizpTOuc6xzrPPgc6xz4bOriDPhM+Jzr0gzrXPgM65zrvOtc6zzrzOrc69z4nOvSDOus67zqzOtM+Jzr07IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyLOkc+Azr/PhM+Fz4fOr86xIM60zrnOsc6zz4HOsc+Gzq7PgiDOus67zqzOtM+Jzr06XG4iCisiJXMiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxNCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjIKK21zZ2lkICJSZW5hbWUgQnJhbmNoIgorbXNnc3RyICLOnM61z4TOv869zr/OvM6xz4POr86xIM6azrvOrM60zr/PhSIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjI2Cittc2dpZCAiUmVuYW1lIgorbXNnc3RyICLOnM61z4TOv869zr/OvM6xz4POr86xIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKK21zZ2lkICJCcmFuY2g6IgorbXNnc3RyICLOms67zqzOtM6/z4I6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzkKK21zZ2lkICJOZXcgTmFtZToiCittc2dzdHIgIs6dzq3OvyDOjM69zr/OvM6xOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjc1Cittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgorbXNnc3RyICLOoM6xz4HOsc66zrHOu8+OIM61z4DOuc67zq3Ovs+EzrUgzrrOu86szrTOvyDPgM+Bzr/PgiDOvM61z4TOv869zr/OvM6xz4POr86xOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MTc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLOnyDOms67zqzOtM6/z4IgJyVzJyDPhc+AzqzPgc+HzrXOuSDOrs60zrcuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOvM61z4TOv869zr/OvM6xz4POr86xz4IgJyVzJy4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOlc66zrrOr869zrfPg863Li4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjYKK21zZ2lkICJGaWxlIEJyb3dzZXIiCittc2dzdHIgIs6gzrXPgc65zrfOs863z4TOrs+CIM6Rz4HPh861zq/Pic69IgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTI2IGxpYi9icm93c2VyLnRjbDoxNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nICVzLi4uIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPhs+Mz4HPhM+Jz4POtyAlcy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE4NworIywgZnV6enkKK21zZ2lkICJbVXAgVG8gUGFyZW50XSIKK21zZ3N0ciAiW86gzqzOvc+JIM6gz4HOv8+CIM6Tzr/Ovc6tzrFdIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjY3IGxpYi9icm93c2VyLnRjbDoyNzMKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgorbXNnc3RyICLOoM61z4HOuc6uzrPOt8+DzrcgzpHPgc+HzrXOr8+Jzr0gzprOu86szrTOv8+FIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5ODcKK21zZ2lkICJCcm93c2UiCittc2dzdHIgIs6gzrXPgc65zq7Os863z4POtyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCittc2dzdHIgIs6Rzr3OrM66z4TOt8+DzrcgJXMgzrHPgM+MIM+Ezr8gJXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICLOus+Bzq/Pg865zrzOvzogzpTOtSDOvM+Az4zPgc61z4POtSDOvc6xIM61z4DOuc67z4XOuM61zq8gz4TOvyAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDAgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAizprOu861zq/Pg865zrzOvyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIs6fIM6azrvOrM60zr/PgiAnJXMnIM60zrXOvSDPhc+AzqzPgc+HzrXOuS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKyLOnyDOms67zqzOtM6/z4IgJyVzJyDPhc+AzqzPgc+HzrXOuSDOrs60zrcuXG4iCisiXG4iCisizpTOtSDOs86vzr3Otc+EzrHOuSDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDOtc+AzrnPhM6sz4fPhc69z4POrs+CIM+Ezr/PhSDPg8+Ezr8gJXMuXG4iCisizpHPgM6xzrnPhM61zq/PhM6xzrkgz4PPhc6zz4fPjs69zrXPhc+DzrcuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIs6XIM+Dz4TPgc6xz4TOt86zzrnOus6uIM6jz4XOs8+Hz47Ovc61z4XPg863z4IgJXMgzrTOtc69IM+Fz4DOv8+Dz4TOt8+Bzq/Ots61z4TOsc65LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM61zr3Ot868zq3Pgc+Jz4POt8+CICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI1MQorbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKK21zZ3N0ciAizpcgz4DOtc+BzrnOv8+Hzq4gz4PPhM6xzrTOuc6/z4DOv86vzrfPg863z4IgKM+Ezr8gzrXPhc+BzrXPhM6uz4HOuc6/KSDOtc6vzr3Osc65IM6uzrTOtyDOus67zrXOuc60z4nOvM6tzr3Oty4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjY2Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLOlyDPhM61zrvOtc+Fz4TOsc6vzrEgzrrOsc+EzqzPg8+EzrHPg863IM+Azr/PhSDOsc69zrnPh869zrXPjc64zrfOus61IM60zrUgz4PPhc68z4bPic69zrXOryDOvM61IM+EzrfOvSDOus6xz4TOrM+Dz4TOsc+Dzrcgz4TOv8+FICIKKyLOsc+Azr/OuM61z4TOt8+Bzq/Ov8+FLlxuIgorIlxuIgorIs6azqzPgM6/zrnOvyDOrM67zrvOvyDPgM+Bz4zOs8+BzrHOvM68zrEgR2l0IM+Ez4HOv8+Azr/PgM6/zq/Ot8+DzrUgz4TOvyDOsc+Azr/OuM61z4TOrs+BzrnOvyDOsc+Az4wgz4TOt869IM+EzrXOu861z4XPhM6xzq/OsSAiCisizrHOvc6vz4fOvc61z4XPg863LiDOoM+Bzq3PgM61zrkgzr3OsSDOs86vzr3Otc65IM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM+Az4HOuc69IM69zrEgzrHOu867zrHPh864zrXOryDOvyDPhM+Bzq3Ph8+Jzr0gzrrOu86szrTOv8+CLlxuIgorIlxuIgorIs6XIM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM64zrEgzr7Otc66zrnOvc6uz4POtc65IM6xz4XPhM+MzrzOsc+EzrEgz4TPjs+BzrEuXG4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAizpXOvc63zrzOrc+Bz4nPg863IM+GzrHOus6tzrvOv8+FIM61z4HOs86xz4POr86xz4Igz4POtSAnJXMnLi4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjMyMworbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgorbXNnc3RyICLOsc+Bz4fOtc6vzrEgzq3Ph86/z4XOvSDOtc6+zrHPh864zrXOryIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICIiCisizojOs865zr3OtSDOsc66z43Pgc+Jz4POtyDOtc6+zrHOs8+JzrPOrs+CIM+Ezr/PhSAnJXMnICjOsc+AzrHOuc+EzrXOr8+EzrHOuSDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDOtc+AzrnPgM6tzrTOv8+FIM6xz4HPh861zq/Ov8+FKS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzU0Cittc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCittc2dzdHIgIs6Rz4DOsc65z4TOtc6vz4TOsc65IM+Dz4XOs8+Hz47Ovc61z4XPg863IM61z4DOuc+Azq3OtM6/z4UgzrHPgc+HzrXOr86/z4UuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgorbXNnc3RyICLOoM6xz4HOsc68zr/Ovc6uIM+Dz4TOv869IM66zrvOrM60zr8gJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NDI5Cittc2dpZCAiIgorIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgIgorIkNoZWNrb3V0Jy4iCittc2dzdHIgIiIKKyLOlM61IM6yz4HOr8+DzrrOtc+Dz4TOtSDPgM65zrEgz4POtSDPhM6/z4DOuc66z4wgzrrOu86szrTOvy5cbiIKKyJcbiIKKyLOkc69IM64zq3Ou86xz4TOtSDOvc6xIM6yz4HOr8+DzrrOtc+Dz4TOtSDPg861IM66zrvOrM60zr8sIM60zrfOvM65zr/Phc+BzrPOrs+Dz4TOtSDOrc69zrHOvSDPhM+Oz4HOsSDOsc+Bz4fOr862zr/Ovc+EzrHPgiDOsc+Az4wgJ1RoaXMgIgorIkRldGFjaGVkIENoZWNrb3V0Jy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NDQ2IGxpYi9jaGVja291dF9vcC50Y2w6NDUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIs6IzrPOuc69zrUgzrXOvs6xzrPPic6zzq4gz4TOv8+FICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCittc2dzdHIgIs6XIM61z4DOsc69zrHPhs6/z4HOrCAnJXMnIM+Dz4TOvyAnJXMnIM64zrEgz4fOrM+DzrXOuSDPhM65z4IgzrXOvs6uz4Igz4XPgM6/zrLOv867zq3PgjoiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAwCittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAizpcgzrHOvc6szrrPhM63z4POtyDPh86xzrzOrc69z4nOvSDPhc+Azr/Oss6/zrvPjs69IM68z4DOv8+BzrXOryDOvc6xIM61zq/Ovc6xzrkgzrTPjc+DzrrOv867zrcuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICclcyc/IgorbXNnc3RyICLOlc+AzrHOvc6xz4bOv8+BzqwgJyVzJzsiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTEwIGxpYi9tZXJnZS50Y2w6MTYzCittc2dpZCAiVmlzdWFsaXplIgorbXNnc3RyICLOkc+AzrXOuc66z4zOvc65z4POtyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgorInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgorIlxuIgorIlRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgJXMgd2lsbCBub3cgY2xvc2UgYW5kIGdpdmUgdXAuIgorbXNnc3RyICIiCisizpHPgM6/z4TPhc+Hzq/OsSDOv8+BzrnPg868zr/PjSDPhM+Bzq3Ph86/zr3PhM6/z4IgzrrOu86szrTOv8+FLlxuIgorIlxuIgorIs6Rz4XPhM+Mz4Igzr8gz4bOrM66zrXOu86/z4IgzrXPgc6zzrHPg86vzrHPgiDOtc6vzr3Osc65IM68z4zOvc6/IM61zr0gzrzOrc+BzrXOuSDOtc+AzrnOu861zrPOvM6tzr3Ov8+CLiAnzpXOs865zr3OtSDOtc+AzrnPhM+Fz4fOrs+CICIKKyLOtc69zrfOvM6tz4HPic+Dzrcgz4TPic69IM6xz4HPh861zq/Pic69IM+DzrHPgiwgzrHOu867zqwgzrHPgM6tz4TPhc+HzrUgzrcgzrXOvc63zrzOrc+Bz4nPg863IM61zr3PjM+CIM61z4PPic+EzrXPgc65zrrOv8+NIM6xz4HPh861zq/Ov8+FICIKKyLPhM6/z4UgR2l0LlxuIgorIlxuIgorIs6Rz4XPhM+MIM60zrUgzrjOsSDOrc+Az4HOtc+AzrUgzr3OsSDPg8+FzrzOss61zq8uIM6kzr8gJXMgzrjOsSDOus67zrXOr8+DzrXOuSDOus6xzrkgzrjOsSDOtc6zzrrOsc+EzrHOu861zq/PiM61zrkgz4TPjs+BzrEuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Cittc2dpZCAiU2VsZWN0IgorbXNnc3RyICLOlc+AzrnOu86/zrPOriIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo1MworbXNnaWQgIkZvbnQgRmFtaWx5IgorbXNnc3RyICLOn865zrrOv86zzq3Ovc61zrnOsSDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjc0Cittc2dpZCAiRm9udCBTaXplIgorbXNnc3RyICLOnM6tzrPOtc64zr/PgiDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjkxCittc2dpZCAiRm9udCBFeGFtcGxlIgorbXNnc3RyICLOoM6xz4HOrM60zrXOuc6zzrzOsSDOk8+BzrHOvM68zrHPhM6/z4POtc65z4HOrM+CIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworbXNnaWQgIiIKKyJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKKyJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorbXNnc3RyICIiCisizpHPhc+Ez4wgzrXOr869zrHOuSDOrc69zrEgz4DOsc+BzqzOtM61zrnOs868zrEgzrrOtc65zrzOrc69zr/PhS5cbiIKKyLOkc69IM+DzrHPgiDOsc+Bzq3Pg861zrkgzrHPhc+Ez4wgz4TOvyDOus61zq/OvM61zr3OvywgzrzPgM6/z4HOtc6vIM69zrEgzrPOr869zrXOuSDOtM65zrrPjCDPg86xz4IuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI4Cittc2dpZCAiR2l0IEd1aSIKK21zZ3N0ciAizpPPgc6xz4bOuc66z4wgzqDOtc+BzrnOss6szrvOu86/zr0gR2l0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzc2Cittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSDOnc6tzr/PhSDOkc+Azr/OuM61z4TOt8+Bzq/Ov8+FIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3Cittc2dpZCAiTmV3Li4uIgorbXNnc3RyICLOnc6tzr8uLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjAKK21zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICLOms67z4nOvc6/z4DOv86vzrfPg863IM6lz4DOrM+Bz4fOv869z4TOv8+CIM6Rz4DOv864zrXPhM63z4HOr86/z4UiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwCittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgIs6azrvPic69zr/PgM6/zq/Ot8+DzrcuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc2Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICLOhs69zr/Ouc6zzrzOsSDOpc+AzqzPgc+Hzr/Ovc+Ezr/PgiDOkc+Azr/OuM61z4TOt8+Bzq/Ov8+FIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMworbXNnaWQgIk9wZW4uLi4iCittc2dzdHIgIs6Gzr3Ov865zrPOvM6xLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyNgorbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCittc2dzdHIgIs6gz4HPjM+Dz4bOsc+EzrEgzpHPgM6/zrjOtc+Ezq7Pgc65zrEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCittc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCittc2dzdHIgIs6Gzr3Ov865zrPOvM6xIM6gz4HPjM+Dz4bOsc+Ezr/PhSDOkc+Azr/OuM61z4TOt8+Bzq/Ov8+FOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyOTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOtM63zrzOuc6/z4XPgc6zzq/Osc+CIM6xz4DOv864zrXPhM63z4HOr86/z4UgJXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OAorbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIs6mzqzOus61zrvOv8+COiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MTIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MzcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMQorbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgorbXNnc3RyICLOkc+Azr/OuM61z4TOrs+BzrnOvyBHaXQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAizp8gzqbOrM66zrXOu86/z4IgJyVzJyDPhc+AzqzPgc+HzrXOuSDOrs60zrcuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLOpM6/IM6xz4HPh861zq/OvyAlcyDPhc+AzqzPgc+HzrXOuSDOrs60zrcuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1NQorbXNnaWQgIkNsb25lIgorbXNnc3RyICLOms67z47Ovc6/z4IiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY4CisjLCBmdXp6eQorbXNnaWQgIlVSTDoiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODkKK21zZ2lkICJDbG9uZSBUeXBlOiIKK21zZ3N0ciAizqTPjc+Azr/PgiDOms67z47Ovc6/z4U6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NQorbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKK21zZ3N0ciAizqTPhc+AzrnOus+MICjOpM6xz4fPjSwgzpfOvM65Lc6gzrvOtc6/zr3OrM62zr/OvSwgSGFyZGxpbmtzKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDEKK21zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCittc2dzdHIgIs6gzrvOrs+BzrXPgiDOkc69z4TOr86zz4HOsc+Gzr8gKM6gzrnOvyDOsc+BzrPPjCwgzqDOu861zr/Ovc6szrbOv869IM6Rzr3PhM6vzrPPgc6xz4bOvyDOkc+Dz4bOsc67zrXOr86xz4IpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwNworbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgorbXNnc3RyICLOms6/zrnOvc6uIM6nz4HOrs+DzrcgKM6kzrHPh8+Nz4TOsc+Ezr8sIM6UzrUgzqPPhc69zrnPg8+EzqzPhM6xzrksIM6azrHOvc6tzr3OsSDOkc69z4TOr86zz4HOsc+Gzr8gzpHPg8+GzrHOu861zq/Osc+CKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzM2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODA2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOsc+Azr/OuM61z4TOrs+BzrnOvyBHaXQ6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU3OQorbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiXCLOpM+Fz4DOuc66z4xcIiDOtM65zrHOuM6tz4POuc68zr8gzrzPjM69zr8gzrPOuc6xIM+Ezr/PgM65zrrPjCDOsc+Azr/OuM61z4TOrs+BzrnOvy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTgzCittc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiXCLOms6/zrnOvc6uIM6nz4HOrs+DzrdcIiDOtM65zrHOuM6tz4POuc68zrcgzrzPjM69zr8gzrPOuc6xIM+Ezr/PgM65zrrPjCDOsc+Azr/OuM61z4TOrs+BzrnOvy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjA0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLOlyDOpM6/z4DOv864zrXPg86vzrEgJXMgz4XPgM6sz4HPh861zrkgzq7OtM63LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTUKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDPgc+NzrjOvM65z4POt8+CIM+AzrfOs86uz4IiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI3Cittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrrOsc+EzrHOvM6tz4TPgc63z4POtyDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4CisjLCBmdXp6eQorbXNnaWQgImJ1Y2tldHMiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc+EzrnOs8+BzrHPhs6uz4IgzrHOvc+EzrnOus61zrnOvM6tzr3Pic69L8+AzrvOt8+Bzr/Phs6/z4HOuc+Ozr0vzrXOvc69zrHOu86xzrrPhM65zrrPjs69OiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgorbXNnc3RyICLOpM6vz4DOv8+EzrEgz4DPgc6/z4IgzrrOu8+Jzr3Ov8+Azr/Or863z4POtyDOsc+Az4wgz4TOvyAlcy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjkwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNgorbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKK21zZ3N0ciAizp8gzrrOu86szrTOv8+CICdtYXN0ZXInIM60zrXOvSDOrc+HzrXOuSDOsc+Bz4fOuc66zr/PgM6/zrnOt864zrXOry4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzCittc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKK21zZ3N0ciAiSGFyZGxpbmtzIM68zrcgzrTOuc6xzrjOrc+DzrnOvM6xLiDOnM61z4TOrM+Az4TPic+Dzrcgz4POtSDOsc69z4TOuc6zz4HOsc+Gzq4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrrOu8+Jzr3Ov8+Azr/Or863z4POtyDOsc+Az4wgz4TOvyAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDYKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM6xzr3PhM65zrPPgc6xz4bOriDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ3CisjLCBmdXp6eQorbXNnaWQgIktpQiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCittc2dzdHIgIs6RzrTPhc69zrHOvM6vzrEgzrHOvc+EzrnOs8+BzrHPhs6uz4IgzrHOvc+EzrnOus61zrnOvM6tzr3Ov8+FOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODEKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Dz43Ovc60zrXPg863IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODIKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICLOsc69z4TOuc66zrXOr868zrXOvc6xIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIGhhcmRsaW5rIM6xzr3PhM65zrrOtc65zrzOrc69zr/PhTogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODQ1Cittc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIs6UzrUgzrzPgM+Mz4HOtc+DzrUgzr3OsSDOs86vzr3Otc65IM6xzr3OrM66z4TOt8+DzrcgzrrOu86szrTPic69IM66zrHOuSDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0uIM6UzrXOr8+EzrUgz4TOt869IM6tzr7Ov860zr8gIgorIs66zr/Ovc+Dz4zOu86xz4IgzrPOuc6xIM67zrXPgM+Ezr/OvM6tz4HOtc65zrXPgi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU2Cittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisizpTOtSDOvM+Az4zPgc61z4POtSDOvc6xIM6zzq/Ovc61zrkgzrHOvc6szrrPhM63z4POtyDOtc+EzrnOus61z4TPjs69LiDOlM61zq/PhM61IM+EzrfOvSDOrc6+zr/OtM6/IM66zr/Ovc+Dz4zOu86xz4IgzrPOuc6xICIKKyLOu861z4DPhM6/zrzOrc+BzrXOuc61z4IuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4MAorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLOlM61IM68z4DPjM+BzrXPg861IM69zrEgzrPOr869zrXOuSDOus6xzrjOv8+BzrnPg868z4zPgiDPhM6/z4UgSEVBRCAoz4DOsc+BzrHOus67zrHOtM65zr/PjSkuIM6UzrXOr8+EzrUgz4TOt869IM6tzr7Ov860zr8gIgorIs66zr/Ovc+Dz4zOu86xz4IgzrPOuc6xICIKKyLOu861z4DPhM6/zrzOrc+BzrXOuc61z4IuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM61zrrOus6xzrjOrM+BzrnPg863z4IgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODk1Cittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOus67z4nOvc6/z4DOv86vzrfPg863z4IuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAizpTOtc69IM6tzrPOuc69zrUgzrHOvc6szrrPhM63z4POtyDPgM+Bzr/Otc+AzrnOu861zrPOvM6tzr3Ov8+FIM66zrvOrM60zr/PhS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTEzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgorbXNnc3RyICLOlM61IM68z4DPjM+BzrXPg861IM69zrEgzrXPgM65zrvPhc64zrXOryDPhM6/ICVzIM+Jz4Igz4XPgM6/zrLOv867zq4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNQorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLOlM63zrzOuc6/z4XPgc6zzq/OsSDPhs6xzrrOrc67zr/PhSDOtc+BzrPOsc+Dzq/Osc+CIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNiBsaWIvaW5kZXgudGNsOjY1IGxpYi9pbmRleC50Y2w6MTI3CisjOiBsaWIvaW5kZXgudGNsOjE5MworbXNnaWQgImZpbGVzIgorbXNnc3RyICLOsc+Bz4fOtc6vzrEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTU1Cittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIs6XIM6xz4HPh865zrrOriDOtc6+zrHOs8+JzrPOriDOsc+Bz4fOtc6vzr/PhSDOsc+Azq3PhM+Fz4fOtS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTcxCittc2dpZCAiT3BlbiIKK21zZ3N0ciAizobOvc6/zrnOs868zrEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgxCittc2dpZCAiUmVwb3NpdG9yeToiCittc2dzdHIgIs6Rz4DOv864zrXPhM6uz4HOuc6/OiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgzrHOvc6/zq/Os868zrHPhM6/z4IgzrHPgM6/zrjOtc+EzrfPgc6vzr/PhSAlczoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MworIywgZnV6enkKK21zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgorbXNnc3RyICLOkc+Azr/Pg8+Fzr3OtM61zrTOtc68zq3Ovc63IM6Vzr7Osc6zz4nOs86uIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAizojOus+Gz4HOsc+DzrcgzpHOvc6xzrjOtc+Oz4HOt8+DzrfPgjoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NAorbXNnaWQgIkxvY2FsIEJyYW5jaCIKK21zZ3N0ciAizqTOv8+AzrnOus+Mz4IgzprOu86szrTOv8+CIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzkKK21zZ2lkICJUcmFja2luZyBCcmFuY2giCittc2dzdHIgIs6azrvOrM60zr/PgiDOoM6xz4HOsc66zr/Ou86/z43OuM63z4POt8+CIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODQgbGliL2Nob29zZV9yZXYudGNsOjUzOAorbXNnaWQgIlRhZyIKK21zZ3N0ciAizpXPhM65zrrOrc+EzrEiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+BzrcgzrHOvc6xzrjOtc+Oz4HOt8+Dzrc6ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Cittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICLOlM61zr0gzq3Ph861zrkgzrXPgM65zrvOtc6zzrXOryDOsc69zrHOuM61z47Pgc63z4POty4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDYKK21zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKK21zZ3N0ciAizpcgzq3Ous+Gz4HOsc+DzrcgzrHOvc6xzrjOtc+Oz4HOt8+DzrfPgiDOtc6vzr3Osc65IM66zrXOvc6uLiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzMQorbXNnaWQgIlVwZGF0ZWQiCittc2dzdHIgIs6Vzr3Ot868zrXPgc+JzrzOrc69zr8iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTkKKyMsIGZ1enp5Cittc2dpZCAiVVJMIgorbXNnc3RyICIiCisKKyM6IGxpYi9jb21taXQudGNsOjkKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJcbiIKKyJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgorInRvIGFtZW5kLlxuIgorbXNnc3RyICIiCisizpTOtc69IM+Fz4DOrM+Bz4fOtc65IM66zqzPhM65IM+Az4HOv8+CIM60zrnPjM+BzrjPic+DzrcuXG4iCisiXG4iCisizqDPgc+MzrrOtc65z4TOsc65IM69zrEgzrTOt868zrnOv8+Fz4HOs86uz4POtc+EzrUgz4TOt869IM6xz4HPh865zrrOriDPhc+Azr/Oss6/zrvOri4gzpTOtc69IM+Fz4DOrM+Bz4fOtc65IM+Fz4DOv86yzr/Ou86uIM+Az4HOuc69IM6xz4DPjCAiCisizrHPhc+Ezq4gzrPOuc6xIM69zrEgzrTOuc6/z4HOuM+Oz4POtc+EzrUuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisizpTOtSDOs86vzr3Otc+EzrHOuSDOtM65z4zPgc64z4nPg863IM66zrHOuM+Oz4Igz4PPhc6zz4fPic69zrXPjc61z4TOtS5cbiIKKyJcbiIKKyLOks+Bzq/Pg866zrXPg8+EzrUgz4PPhM6/IM68zq3Pg86/IM68zrnOsc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4Igz4DOv8+FIM60zrXOvSDOrc+HzrXOuSDOv867zr/Ous67zrfPgc+JzrjOtc6vLiDOlM61IM68z4DOv8+BzrXOr8+EzrUgzr3OsSAiCisizrTOuc6/z4HOuM+Oz4POtc+EzrUgz4TOt869IM+Az4HOv863zrPOv8+NzrzOtc69zrcgz4XPgM6/zrLOv867zq4gzrXOus+Ez4zPgiDOtc6szr0gzrHOus+Fz4HPjs+DzrXPhM61IM+EzrfOvSDPhM+Bzq3Ph86/z4XPg86xIM61zr3Orc+BzrPOtc65zrEgIgorIs+Dz4XOs8+Hz47Ovc61z4XPg863z4IuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjQ5Cittc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgorbXNnc3RyICLOo8+GzqzOu868zrEgz4bPjM+Bz4TPic+DzrfPgiDOtM61zrTOv868zq3Ovc+Jzr0gz4XPgM6/zrLOv867zq7PgiDPgM+Bzr/PgiDOtM65z4zPgc64z4nPg863OiIKKworIzogbGliL2NvbW1pdC50Y2w6NzYKK21zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM6xzr3OrM66z4TOt8+DzrfPgiDPhM63z4Igz4TOsc+Fz4TPjM+EzrfPhM6sz4Igz4POsc+COiIKKworIzogbGliL2NvbW1pdC50Y2w6ODEKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICLOnM63IM6tzrPOus+Fz4HOvyBHSVRfQ09NTUlUVEVSX0lERU5UOiIKKworIzogbGliL2NvbW1pdC50Y2w6MTMzCittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIs6XIM+EzrXOu861z4XPhM6xzq/OsSDOus6xz4TOrM+Dz4TOsc+Dzrcgz4DOv8+FIM6xzr3Ouc+Hzr3Otc+NzrjOt866zrUgzrTOtSDPg8+FzrzPhs+Jzr3Otc6vIM68zrUgz4TOt869IM66zrHPhM6sz4PPhM6xz4POtyDPhM6/z4UgIgorIs6xz4DOv864zrXPhM63z4HOr86/z4UuXG4iCisiXG4iCisizprOrM+Azr/Ouc6/IM6szrvOu86/IM+Az4HPjM6zz4HOsc68zrzOsSBHaXQgz4TPgc6/z4DOv8+Azr/Or863z4POtSDPhM6/IM6xz4DOv864zrXPhM6uz4HOuc6/IM6xz4DPjCDPhM63zr0gz4TOtc67zrXPhc+EzrHOr86xICIKKyLOsc69zq/Ph869zrXPhc+DzrcuIM6gz4HOrc+AzrXOuSDOvc6xIM6zzq/Ovc61zrkgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+Dzrcgz4DPgc65zr0gz4TOtyDOtM63zrzOuc6/z4XPgc6zzq/OsSDOvc6tzrHPgiDPhc+Azr/Oss6/zrvOrs+CLlxuIgorIlxuIgorIs6XIM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM64zrEgzr7Otc66zrnOvc6uz4POtc65IM6xz4XPhM+MzrzOsc+EzrEgz4TPjs+BzrEuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE1NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgorIlxuIgorIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgorImJlZm9yZSBjb21taXR0aW5nLlxuIgorbXNnc3RyICIiCisizqTOsSDOvM63IM+Dz4XOs8+Hz4nOvc61z4XOvM6tzr3OsSDOsc+Bz4fOtc6vzrEgzrTOtSDOvM+Azr/Pgc6/z43OvSDOvc6xIM+Fz4DOv86yzrvOt864zr/Pjc69LlxuIgorIlxuIgorIs6kzr8gzrHPgc+HzrXOr86/ICVzIM6tz4fOtc65IM+Dz4XOs866z4HOv8+Nz4POtc65z4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgi4gzqDPgc6tz4DOtc65IM69zrEgz4TOuc+CIM61z4DOuc67z43Pg861z4TOtSDOus6xzrkgzr3OsSAiCisiz4PPhM6xzrTOuc6/z4DOv865zq7Pg861z4TOtSDPhM6/IM6xz4HPh861zq/OvyDPgM+BzrnOvSDPhM63zr0gz4XPgM6/zrLOv867zq4uXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbmtub3duIGZpbGUgc3RhdGUgJXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBjYW5ub3QgYmUgY29tbWl0dGVkIGJ5IHRoaXMgcHJvZ3JhbS5cbiIKK21zZ3N0ciAiIgorIs6GzrPOvc+Jz4PPhM63IM66zrHPhM6sz4PPhM6xz4POtyDOsc+Bz4fOtc6vzr/PhSAlcyDOsc69zrnPh869zrXPjc64zrfOus61LlxuIgorIlxuIgorIs6kzr8gzrHPgc+HzrXOr86/ICVzIM60zrUgzrzPgM6/z4HOtc6vIM69zrEgz4XPgM6/zrLOu863zrjOtc6vIM6xz4DPjCDOsc+Fz4TPjCDPhM6/IM+Az4HPjM6zz4HOsc68zrzOsS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTcwCittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCittc2dzdHIgIiIKKyLOlM61zr0gz4XPgM6sz4HPh86/z4XOvSDOsc67zrvOsc6zzq3PgiDPgM+Bzr/PgiDPhc+Azr/Oss6/zrvOri5cbiIKKyJcbiAiCisizqDPgc6tz4DOtc65IM69zrEgz4PPhM6xzrTOuc6/z4DOv865zq7Pg861z4TOtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IDEgzrHPgc+HzrXOr86/IM+Az4HOuc69IM69zrEgzrrOrM69zrXPhM61IM+Fz4DOv86yzr/Ou86uLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODMKK21zZ2lkICIiCisiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiXG4iCisiLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgorIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCisiLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorbXNnc3RyICIiCisizqDOsc+BzrHOus6xzrvPjiDOtM+Oz4PPhM61IM6tzr3OsSDOvM6uzr3Phc68zrEgz4XPgM6/zrLOv867zq7Pgi5cbiIKKyJcbiIKKyLOiM69zrEgz4PPic+Dz4TPjCDOvM6uzr3Phc68zrEgz4XPgM6/zrLOv867zq7PgiDOrc+HzrXOuSDPhM63zr0gzrXOvs6uz4IgzrzOv8+Bz4bOrjpcbiIKKyJcbiIKKyItIM6gz4HPjs+EzrcgzrPPgc6xzrzOvM6uOiDOoM61z4HOuc6zz4HOsc+Gzq4gz4POtSDOvM6vzrEgz4DPgc+Mz4TOsc+Dzrcgz4TOv8+FIM+EzrkgzrrOrM69zrHPhM61LlxuIgorIi0gzpTOtc+Nz4TOtc+BzrcgzrPPgc6xzrzOvM6uOiDOms61zr3OrlxuIgorIi0gzqXPgM+MzrvOv865z4DOtc+CIM6zz4HOsc68zrzOrc+COiDOoM61z4HOuc6zz4HOsc+Gzq4gz4TOv8+FIM6zzrnOsc+Ezq8gzrHPhc+Ezq4gzrcgzrHOu867zrHOs86uIM61zq/Ovc6xzrkgz4PPic+Dz4TOri5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgIs+Az4HOv861zrnOtM6/z4DOv86vzrfPg863OiBIIFRjbCDOtM61zr0gz4XPgM6/z4PPhM63z4HOr862zrXOuSDPhM63zr0gzrrPic60zrnOus6/z4DOv86vzrfPg863ICclcycuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMjEKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrrOu86uz4POtyDPhM6/z4UgcHJlLWNvbW1pdCBob29rLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzYKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKK21zZ3N0ciAizpcgz4XPgM6/zrLOv867zq4gzrHPgM6/z4HPgc6vz4bOuM63zrrOtSDOsc+Az4wgz4TOvyBwcmUtY29tbWl0IGhvb2suIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNTkKK21zZ2lkICJDYWxsaW5nIGNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrrOu86uz4POtyDPhM6/z4UgY29tbWl0LW1zZyBob29rLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNzQKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAizpcgz4XPgM6/zrLOv867zq4gzrHPgM6/z4HPgc6vz4bOuM63zrrOtSDOsc+Az4wgz4TOvyBjb21taXQtbXNnIGhvb2suIgorCisjOiBsaWIvY29tbWl0LnRjbDoyODcKK21zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM+Fz4DOv86yzr/Ou86uIM+Ez4nOvSDOsc67zrvOsc6zz47OvS4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzAzCittc2dpZCAid3JpdGUtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICLPhM6/IHdyaXRlLXRyZWUgzrHPgM6tz4TPhc+HzrU6IgorCisjOiBsaWIvY29tbWl0LnRjbDozMDQgbGliL2NvbW1pdC50Y2w6MzQ4IGxpYi9jb21taXQudGNsOjM2OAorbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICLOlyDPhc+Azr/Oss6/zrvOriDOsc+Azq3PhM+Fz4fOtS4iCisKKyM6IGxpYi9jb21taXQudGNsOjMyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgIs6XIM+Fz4DOv86yzr/Ou86uICVzIM60zrXOr8+Hzr3Otc65IM66zrHPhM61z4PPhM+BzrHOvM68zq3Ovc63IgorCisjOiBsaWIvY29tbWl0LnRjbDozMjYKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiTm8gZmlsZXMgd2VyZSBtb2RpZmllZCBieSB0aGlzIGNvbW1pdCBhbmQgaXQgd2FzIG5vdCBhIG1lcmdlIGNvbW1pdC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLOlM61zr0gz4XPgM6sz4HPh86/z4XOvSDOsc67zrvOsc6zzq3PgiDPgM+Bzr/PgiDPhc+Azr/Oss6/zrvOri5cbiIKKyJcbiIKKyLOlM61zr0gz4TPgc6/z4DOv8+Azr/Ouc6uzrjOt866zrHOvSDOsc+Bz4fOtc6vzrEgzrHPgM+MIM6xz4XPhM6uIM+EzrfOvSDPhc+Azr/Oss6/zrvOriDOus6xzrkgzrTOtc69IM6uz4TOsc69IM+Fz4DOv86yzr/Ou86uICIKKyLPg8+FzrPPh8+Ozr3Otc+Fz4POt8+CLlxuIgorIlxuIgorIs6YzrEgzr7Otc66zrnOvc6uz4POtc65IM6xz4XPhM+MzrzOsc+EzrEgzrXPgM6xzr3Osc69zq/Ph869zrXPhc+Dzrcgz4TPjs+BzrEuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjMzMworbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKK21zZ3N0ciAizpTOtc69IM+Fz4DOrM+Bz4fOv8+Fzr0gzrHOu867zrHOs86tz4Igz4DPgc6/z4Igz4XPgM6/zrLOv867zq4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozNDcKK21zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICLPhM6/IGNvbW1pdC10cmVlIM6xz4DOrc+Ez4XPh861OiIKKworIzogbGliL2NvbW1pdC50Y2w6MzY3Cittc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgorbXNnc3RyICLPhM6/IHVwZGF0ZS1yZWYgzrHPgM6tz4TPhc+HzrU6IgorCisjOiBsaWIvY29tbWl0LnRjbDo0NTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCittc2dzdHIgIs6UzrfOvM65zr/Phc+BzrPOrs64zrfOus61IM+Fz4DOv86yzr/Ou86uICVzOiAlcyIKKworIzogbGliL2NvbnNvbGUudGNsOjU5Cittc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgzrXPgc6zzrHPg86vzrEuLi4gzqDOsc+BzrHOus6xzrvPjiDPgM61z4HOuc68zq3Ovc61z4TOtS4uLiIKKworIzogbGliL2NvbnNvbGUudGNsOjE4NgorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIs6Vz4DOuc+Ez4XPh86vzrEiCisKKyM6IGxpYi9jb25zb2xlLnRjbDoyMDAKK21zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCittc2dzdHIgIs6jz4bOrM67zrzOsTogzpcgzpXOvc+Ezr/Ou86uIM6Rz4DOrc+Ez4XPh861IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIs6Rz4HOuc64zrzPjM+CIM61zrvOtc+NzrjOtc+Bz4nOvSDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAizqfPjs+Bzr/PgiDOus6xz4TOtc65zrvOu863zrzOrc69zr/PgiDOsc+Az4wgzrXOu861z43OuM61z4HOsSDOsc69z4TOuc66zrXOr868zrXOvc6xIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ1Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLOkc+BzrnOuM68z4zPgiDPgM6xzrrOtc+EzrHPgc65z4POvM6tzr3Pic69IM6xzr3PhM65zrrOtc65zrzOrc69z4nOvSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NgorbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKK21zZ3N0ciAizpHPgc65zrjOvM+Mz4Igz4DOsc66zq3PhM+Jzr0iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIs6nz47Pgc6/z4IgzrrOsc+EzrXOuc67zrvOt868zq3Ovc6/z4IgzrHPgM+MIM+AzrHOus61z4TOsc+BzrnPg868zq3Ovc6xIM6xzr3PhM65zrrOtc6vzrzOtc69zrEiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICLOoM6xzrrOtc+EzrHPgc65z4POvM6tzr3OsSDOsc69z4TOuc66zrXOr868zrXOvc6xIM6tz4TOv865zrzOsSDOs865zrEgzrrOu86szrTOtc68zrEiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDkKK21zZ2lkICJHYXJiYWdlIGZpbGVzIgorbXNnc3RyICLOhs+Hz4HOt8+Dz4TOsSDOsc+Bz4fOtc6vzrEiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKK21zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDPg8+FzrzPgM6vzrXPg863IM+EzrfPgiDOss6sz4POt8+CIM60zrXOtM6/zrzOrc69z4nOvSDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKK21zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorIs6Tzq/Ovc61z4TOsc65IM61z4DOsc67zq7OuM61z4XPg863IM+EzrfPgiDOss6sz4POt8+CIM60zrXOtM6/zrzOrc69z4nOvSDOsc69z4TOuc66zrXOuc68zq3Ovc+Jzr0gzrzOtSDOsc69z4TOuc66zrXOr868zrXOvc6xIGZzY2siCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2Ugd2hlbiBtb3JlIHRoYW4gJWkgbG9vc2Ugb2JqZWN0cyBleGlzdC5cbiIKKyJcbiIKKyJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKK21zZ3N0ciAiIgorIs6Rz4XPhM+MIM+Ezr8gzrHPgM6/zrjOtc+Ezq7Pgc65zr8gzq3Ph861zrkgzrHPhc+Ezq4gz4TOtyDPg8+EzrnOs868zq4gz4DOtc+Bzq/PgM6/z4UgJWkgzrXOu861z43OuM61z4HOsSDOsc69z4TOuc66zrXOr868zrXOvc6xLlxuIgorIlxuIgorIs6TzrnOsSDPhM63IM60zrnOsc+Ezq7Pgc63z4POtyDOss6tzrvPhM65z4PPhM+Jzr0gzrXPgM65zrTPjM+DzrXPic69IM+Dz4XOvc65z4PPhM6sz4TOsc65IM69zrEgz4PPhc68z4DOuc6tz4POtc+EzrUgz4TOtyDOss6sz4POtyAiCisizrTOtc60zr/OvM6tzr3Pic69IM+Mz4TOsc69IM+Fz4DOrM+Bz4fOv8+Fzr0gz4DOtc+BzrnPg8+Dz4zPhM61z4HOsSDOsc+Az4wgJWkgzrXOu861z43OuM61z4HOsSDOsc69z4TOuc66zrXOr868zrXOvc6xLlxuIgorIlxuIgorIs6jz4XOvM+Azq/Otc+Dzrcgz4TOt8+CIM6yzqzPg863z4IgzrTOtc60zr/OvM6tzr3Pic69IM+Ez47Pgc6xOyIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+BzrcgzrfOvM61z4HOv868zrfOvc6vzrEgzrHPgM+MIM+Ezr8gR2l0OiAlcyIKKworIzogbGliL2RpZmYudGNsOjQyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgorIlxuIgorIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgorIlxuIgorIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKKyJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgorInRoZSBzYW1lIHN0YXRlLiIKK21zZ3N0ciAiIgorIs6UzrXOvSDOsc69zrnPh869zrXPjc64zrfOus6xzr0gzrTOuc6xz4bOv8+Bzq3Pgi5cbiIKKyJcbiIKKyLOpM6/ICVzIM60zrXOvSDOrc+HzrXOuSDOsc67zrvOsc6zzq3Pgi4iCisiXG4iCisizpcgzrfOvM61z4HOv868zrfOvc6vzrEgz4TPgc6/z4DOv8+Azr/Or863z4POt8+CIM6xz4XPhM6/z40gz4TOv8+FIM6xz4HPh861zq/Ov8+FIM61zr3Ot868zrXPgc+OzrjOt866zrUgzrHPgM+MIM6szrvOu863IM61z4bOsc+BzrzOv86zzq4sICIKKyLOsc67zrvOrCDPhM6/IM+AzrXPgc65zrXPh8+MzrzOtc69zr8gz4TOv8+FIM6xz4HPh861zq/Ov8+FIM60zrXOvSDOrM67zrvOsc6+zrUuXG4iCisiXG4iCisizpjOsSDOvs61zrrOuc69zq7Pg861zrkgzrHPhc+Ez4zOvM6xz4TOsSDOtc+AzrHOvc6xzr3Or8+Hzr3Otc+Fz4POtyDOs865zrEgzr3OsSDOss+BzrXOuM6/z43OvSDOrM67zrvOsSDOsc+Bz4fOtc6vzrEgz4DOv8+FIM68z4DOv8+BzrXOryDOvc6xICIKKyLOss+Bzq/Pg866zr/Ovc+EzrHOuSDPg861IM6vzrTOuc6xIM66zrHPhM6sz4PPhM6xz4POty4iCisKKyM6IGxpYi9kaWZmLnRjbDo4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgz4bPjM+Bz4TPic+DzrcgzrTOuc6xz4bOv8+BzqzPgiDPhM6/z4UgJXMuLi4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMTQgbGliL2RpZmYudGNsOjE4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgorbXNnc3RyICLOlM61zr0gzrXOr869zrHOuSDOtM+Fzr3Osc+Ezq4gzrcgz4DPgc6/zrLOv867zq4gz4TOv8+FICVzIgorCisjOiBsaWIvZGlmZi50Y2w6MTE1Cittc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKK21zZ3N0ciAizqPPhs6szrvOvM6xIM+Gz4zPgc+Ez4nPg863z4IgzrHPgc+HzrXOr86/z4U6IgorCisjOiBsaWIvZGlmZi50Y2w6MTIyCittc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgorbXNnc3RyICLOkc+Azr/OuM61z4TOrs+BzrnOvyBHaXQgKM64z4XOs86xz4TPgc65zrrPjCDOrc+BzrPOvykiCisKKyM6IGxpYi9kaWZmLnRjbDoxMzQKK21zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCittc2dzdHIgIiogzpTPhc6xzrTOuc66z4wgzrHPgc+HzrXOr86/ICjOvM63IM61zrzPhs6szr3Ouc+Dzrcgz4DOtc+BzrnOtc+Hzr/OvM6tzr3Ov8+FKS4iCisKKyM6IGxpYi9kaWZmLnRjbDoxODUKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICLOo8+GzqzOu868zrEgz4bPjM+Bz4TPic+DzrfPgiDOtM65zrHPhs6/z4HOrM+COiIKKworIzogbGliL2RpZmYudGNsOjMwMworbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICLOkc+Azr/PhM+Fz4fOr86xIM6xz4DOv8+Dz4TOsc60zrnOv8+Azr/Or863z4POt8+CIM61z4DOuc67zrXOs868zq3Ovc6/z4UgzrrOv868zrzOsc+EzrnOv8+NLiIKKworIzogbGliL2RpZmYudGNsOjMxMAorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDPg8+EzrHOtM65zr/PgM6/zq/Ot8+DzrfPgiDOtc+AzrnOu861zrPOvM6tzr3Ov8+FIM66zr/OvM68zrHPhM65zr/PjS4iCisKKyM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTQKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiz4PPhs6szrvOvM6xIgorCisjOiBsaWIvZXJyb3IudGNsOjM2Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiz4DPgc6/zrXOuc60zr/PgM6/zq/Ot8+DzrciCisKKyM6IGxpYi9lcnJvci50Y2w6OTQKK21zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgorbXNnc3RyICLOoM+Bzq3PgM61zrkgzr3OsSDOtM65zr/Pgc64z47Pg861z4TOtSDPhM6xIM+AzrHPgc6xz4DOrM69z4kgzrvOrM64zrcgz4DPgc65zr0gz4TOt869IM+Fz4DOv86yzr/Ou86uLiIKKworIzogbGliL2luZGV4LnRjbDo2Cittc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgorbXNnc3RyICLOkc60z4XOvc6xzrzOr86xIM6+zrXOus67zrXOuc60z47OvM6xz4TOv8+CIM+Ezr/PhSDOtc+Fz4HOtc+EzrfPgc6vzr/PhS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MTUKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAizqPPhs6szrvOvM6xIM6Vz4XPgc61z4TOt8+Bzq/Ov8+FIgorCisjOiBsaWIvaW5kZXgudGNsOjIxCittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIiIKKyLOlyDOtc69zrfOvM6tz4HPic+Dzrcgz4TOv8+FIM61z4XPgc61z4TOt8+Bzq/Ov8+FIEdpdCDOsc+Azq3PhM+Fz4fOtS4gzpjOsSDOvs61zrrOuc69zq7Pg861zrkgzrHPhc+Ez4zOvM6xz4TOsSDOtc+AzrHOvc6xzr3Or8+Hzr3Otc+Fz4POtyAiCisizrPOuc6xIM61z4DOsc69zrHPg8+FzrPPh8+Bzr/Ovc65z4POvM+MIM+Ezr/PhSBnaXQtZ3VpLiIKKworIzogbGliL2luZGV4LnRjbDoyNworbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICLOo8+Fzr3Orc+HzrXOuc6xIgorCisjOiBsaWIvaW5kZXgudGNsOjMxCittc2dpZCAiVW5sb2NrIEluZGV4IgorbXNnc3RyICLOns61zrrOu861zq/OtM+JzrzOsSDOlc+Fz4HOtc+EzrfPgc6vzr/PhSIKKworIzogbGliL2luZGV4LnRjbDoyODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgIs6Rz4DOv8+Dz4TOsc60zrnOv8+Azr/Or863z4POtyAlcyDOsc+Az4wgz4XPgM6/zrLOv867zq4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzEzCittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAizojPhM6/zrnOvM6/IM+Az4HOv8+CIM+Fz4DOv86yzr/Ou86uLiIKKworIzogbGliL2luZGV4LnRjbDozMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIs6gz4HOv8+DzrjOrs66zrcgJXMiCisKKyM6IGxpYi9pbmRleC50Y2w6MzgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgIs6Rzr3Osc6vz4HOtc+DzrcgzrHOu867zrHOs8+Ozr0gz4PPhM6/IM6xz4HPh861zq/OvyAlczsiCisKKyM6IGxpYi9pbmRleC50Y2w6MzgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgorbXNnc3RyICLOkc69zrHOr8+BzrXPg863IM6xzrvOu86xzrPPjs69IM+DzrUgzrHPhc+Ezqwgz4TOsSAlaSDOsc+Bz4fOtc6vzrE7IgorCisjOiBsaWIvaW5kZXgudGNsOjM5MQorbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKK21zZ3N0ciAiIgorIs6MzrvOtc+CIM6/zrkgzrzOtyDPg8+EzrHOtM65zr/PgM6/zrnOt868zq3Ovc61z4IgzrHOu867zrHOs86tz4IgzrjOsSDPh86xzrjOv8+Nzr0gzr/Pgc65z4PPhM65zrrOrCDOsc+Az4wgz4TOt869IM6xzr3Osc6vz4HOtc+DzrcuIgorCisjOiBsaWIvaW5kZXgudGNsOjM5NAorbXNnaWQgIkRvIE5vdGhpbmciCittc2dzdHIgIs6azrHOvM6vzrEgzpXOvc6tz4HOs861zrnOsSIKKworIzogbGliL21lcmdlLnRjbDoxMworbXNnaWQgIiIKKyJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIs6UzrUgzrPOr869zrXPhM6xzrkgz4PPhc6zz4fPjs69zrXPhc+DzrcgzrrOsc64z47PgiDOtM65zr/Pgc64z47Ovc61z4TOtS5cbiIKKyJcbiIKKyLOoM+Bzq3PgM61zrkgzr3OsSDPhM61zrvOtc65z47Pg861z4TOtSDPhM63IM60zrnPjM+BzrjPic+DzrcgzrHPhc+Ezq7PgiDPhM63z4Igz4XPgM6/zrLOv867zq7PgiDPgM+BzrnOvSDOvc6xIM6+zrXOus65zr3Ors+DzrXPhM61ICIKKyLOv8+Azr/Ouc6xz4POtM6uz4DOv8+EzrUgzrzOv8+Bz4bOrs+CIM+Dz4XOs8+Hz47Ovc61z4XPg863LlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLOlyDPhM61zrvOtc+Fz4TOsc6vzrEgzrrOsc+EzqzPg8+EzrHPg863IM+Azr/PhSDOsc69zrnPh869zrXPjc64zrfOus61IM60zrUgz4PPhc68z4bPic69zrXOryDOvM61IM+EzrfOvSDOus6xz4TOrM+Dz4TOsc+Dzrcgz4TOv8+FICIKKyLOsc+Azr/OuM61z4TOt8+Bzq/Ov8+FLlxuIgorIlxuIgorIs6azqzPgM6/zrnOvyDOrM67zrvOvyDPgM+Bz4zOs8+BzrHOvM68zrEgR2l0IM+Ez4HOv8+Azr/PgM6/zq/Ot8+DzrUgz4TOvyDOsc+Azr/OuM61z4TOrs+BzrnOvyDOsc+Az4wgz4TOt869IM+EzrXOu861z4XPhM6xzq/OsSAiCisizrHOvc6vz4fOvc61z4XPg863LiDOoM+Bzq3PgM61zrkgzr3OsSDOs86vzr3Otc65IM61z4DOsc69zrHOvc6vz4fOvc61z4XPg863IM+Az4HOuc69IM+EzrcgzrTOuc61zr3Orc+BzrPOtc65zrEgz4PPhc6zz4fPjs69zrXPhc+DzrfPgi5cbiIKKyJcbiIKKyLOlyDOtc+AzrHOvc6xzr3Or8+Hzr3Otc+Fz4POtyDOuM6xIM6+zrXOus65zr3Ors+DzrXOuSDOsc+Fz4TPjM68zrHPhM6xIM+Ez47Pgc6xLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgorIlxuIgorIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgorIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIs6Sz4HOr8+DzrrOtc+Dz4TOtSDPg8+Ezr8gzrzOrc+Dzr8gzrzOuc6xz4Igz4PPhc6zzrrPgc6/z4XPjM68zrXOvc63z4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgi5cbiIKKyJcbiIKKyLOpM6/IM6xz4HPh861zq/OvyAlcyDOrc+HzrXOuSDPg8+FzrPOus+Bzr/Pjc+DzrXOuc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IuXG4iCisiXG4iCisizqDPgc6tz4DOtc65IM69zrEgz4TOuc+CIM61z4DOuc67z43Pg861z4TOtSwgzr3OsSDPg8+EzrHOtM65zr/PgM6/zrnOrs+DzrXPhM61IM+Ezr8gzrHPgc+HzrXOr86/LCDOus6xzrkgzr3OsSDOus6szr3Otc+EzrUgz4XPgM6/zrLOv867zq4gIgorIs6zzrnOsSDOvc6xIM6/zrvOv866zrvOt8+Bz47Pg861z4TOtSDPhM63zr0gz4TPgc6tz4fOv8+Fz4POsSDPg8+FzrPPh8+Ozr3Otc+Fz4POty4gzpzPjM69zr8gz4TPjM+EzrUgzrzPgM6/z4HOtc6vz4TOtSDOvc6xICIKKyLOvs61zrrOuc69zq7Pg861z4TOtSDOrM67zrvOtyDPg8+FzrPPh8+Ozr3Otc+Fz4POty5cbiIKKworIzogbGliL21lcmdlLnRjbDo1NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKKyJcbiIKKyJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKKyJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCittc2dzdHIgIiIKKyLOks+Bzq/Pg866zrXPg8+EzrUgz4PPhM6/IM68zq3Pg86/IM68zrnOsc+CIM6xzrvOu86xzrPOrs+CLlxuIgorIlxuIgorIs6kzr8gzrHPgc+HzrXOr86/ICVzIM6tz4fOtc65IM+Ez4HOv8+Azr/PgM6/zrnOt864zrXOry5cbiIKKyJcbiIKKyLOoM+Bzq3PgM61zrkgzr3OsSDOv867zr/Ous67zrfPgc+Oz4POtc+EzrUgz4TOt869IM+Ez4HOrc+Hzr/Phc+DzrEgz4PPhc6zz4fPjs69zrXPhc+Dzrcgz4DPgc65zr0gzr3OsSDOvs61zrrOuc69zq7Pg861z4TOtSDPg8+FzrPPh8+Ozr3Otc+Fz4POty4iCisiIM6Rz4XPhM+MIM6yzr/Ot864zqwgz4PPhM63zr0gzrHOus+Nz4HPic+DzrcgzrHPgM6/z4TPhc+HzrfOvM6tzr3Ot8+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IsIM61zqzOvSDPh8+BzrXOuc6xz4PPhM61zq8uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzIM6xz4DPjCAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgz4PPhc6zz4fPjs69zrXPhc+Dzrcgz4TOv8+FICVzIM68zrUgz4TOvyAlcy4uLiIKKworIzogbGliL21lcmdlLnRjbDoxMzAKK21zZ2lkICJNZXJnZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiIKK21zZ3N0ciAizpcgz4PPhc6zz4fPjs69zrXPhc+Dzrcgzr/Ou86/zrrOu863z4HPjs64zrfOus61IM61z4DOuc+Ez4XPh8+Oz4IuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMgorbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICLOlyDPg8+FzrPPh8+Ozr3Otc+Fz4POtyDOsc+Azq3PhM+Fz4fOtS4gzpHPgM6xzrnPhM61zq/PhM6xzrkgzrXPgM6vzrvPhc+Dzrcgz4PPhc6zzrrPgc6/z43Pg861z4nOvS4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2UgSW50byAlcyIKK21zZ3N0ciAizqPPhc6zz4fPjs69zrXPhc+DzrcgzrzOtSAlcyIKKworIzogbGliL21lcmdlLnRjbDoxNzYKK21zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKK21zZ3N0ciAizpHOvc6xzrjOtc+Oz4HOt8+DzrcgzqDPgc6/z4IgzqPPhc6zz4fPjs69zrXPhc+DzrciCisKKyM6IGxpYi9tZXJnZS50Y2w6MjExCittc2dpZCAiIgorIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCittc2dzdHIgIiIKKyLOlM61IM6zzq/Ovc61z4TOsc65IM6xzrrPjc+Bz4nPg863IM66zrHOuM+Oz4IgzrTOuc6/z4HOuM+Ozr3Otc+EzrUuXG4iCisiXG4iCisizqDPgc6tz4DOtc65IM69zrEgz4TOtc67zrXOuc+Oz4POtc+EzrUgz4TOtyDOtM65z4zPgc64z4nPg863IM6xz4XPhM6uz4Igz4TOt8+CIM+Fz4DOv86yzr/Ou86uz4IuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjIxCittc2dpZCAiIgorIkFib3J0IG1lcmdlP1xuIgorIlxuIgorIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorbXNnc3RyICIiCisizpHOus+Nz4HPic+Dzrcgz4PPhc6zz4fPjs69zrXPhc+DzrfPgjtcbiIKKyJcbiIKKyLOlyDOsc66z43Pgc+Jz4POtyDPhM63z4Igz4TPgc6tz4fOv8+Fz4POsc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IgzrjOsSDPgM+Bzr/Ous6xzrvOrc+DzrXOuSDOsc+Az47Ou861zrnOsSAqzp/Om86pzp0qIM+Ez4nOvSDOvM63ICIKKyLPhc+Azr/Oss61zrLOu863zrzOrc69z4nOvSDOsc67zrvOsc6zz47OvS5cbiIKKyJcbiIKKyLOnc6xIM+Az4HOv8+Hz4nPgc6uz4POtc65IM63IM6xzrrPjc+Bz4nPg863IM+EzrfPgiDPhM+Bzq3Ph86/z4XPg86xz4Igz4PPhc6zz4fPjs69zrXPhc+DzrfPgjsiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjI3Cittc2dpZCAiIgorIlJlc2V0IGNoYW5nZXM/XG4iCisiXG4iCisiUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorbXNnc3RyICIiCisizpXPgM6xzr3Osc+Gzr/Pgc6sIM6xzrvOu86xzrPPjs69O1xuIgorIlxuIgorIs6XIM61z4DOsc69zrHPhs6/z4HOrCDPhM+Jzr0gzrHOu867zrHOs8+Ozr0gzrjOsSDPgM+Bzr/Ous6xzrvOrc+DzrXOuSDOsc+Az47Ou861zrnOsSAqzp/Om86pzp0qIM+Ez4nOvSDOvM63IM+Fz4DOv86yzrXOss67zrfOvM6tzr3Pic69ICIKKyLOsc67zrvOsc6zz47OvS5cbiIKKyJcbiIKKyLOnc6xIM+Dz4XOvc61z4fOr8+DzrXOuSDOtyDOtc+AzrHOvc6xz4bOv8+Bzqwgz4TPic69IM+Ez4HOrc+Hzr/Phc+Dz4nOvSDOsc67zrvOsc6zz47OvTsiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM4Cittc2dpZCAiQWJvcnRpbmciCittc2dzdHIgIs6Tzq/Ovc61z4TOsc65IM6xzrrPjc+Bz4nPg863IgorCisjOiBsaWIvbWVyZ2UudGNsOjIzOAorbXNnaWQgImZpbGVzIHJlc2V0IgorbXNnc3RyICLOsc+Bz4fOtc6vzrEgz4DOv8+FIM61z4DOsc69zrHPhs6tz4HOuM63zrrOsc69IgorCisjOiBsaWIvbWVyZ2UudGNsOjI2NQorbXNnaWQgIkFib3J0IGZhaWxlZC4iCittc2dzdHIgIs6XIM6xzrrPjc+Bz4nPg863IM6xz4DOrc+Ez4XPh861LiIKKworIzogbGliL21lcmdlLnRjbDoyNjcKK21zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCittc2dzdHIgIs6XIM6xzrrPjc+Bz4nPg863IM6xz4DOrc+Ez4XPh861LiDOiM+Ezr/Ouc68zr8uIgorCisjOiBsaWIvb3B0aW9uLnRjbDo5NQorbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgIs6Vz4DOsc69zrHPhs6/z4HOrCDOoM+Bzr/Otc+AzrnOu86/zrPPjs69IgorCisjOiBsaWIvb3B0aW9uLnRjbDo5OQorbXNnaWQgIlNhdmUiCittc2dzdHIgIs6Rz4DOv864zq7Ous61z4XPg863IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBSZXBvc2l0b3J5IgorbXNnc3RyICIlcyDOkc+Azr/OuM61z4TOrs+BzrnOvyIKKworIzogbGliL29wdGlvbi50Y2w6MTEwCittc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKK21zZ3N0ciAizp/Ou865zrrPjCAozozOu86xIM+EzrEgzpHPgM6/zrjOtc+Ezq7Pgc65zrEpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTYKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgIs6Mzr3Ov868zrEgzqfPgc6uz4PPhM63IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTcKK21zZ2lkICJFbWFpbCBBZGRyZXNzIgorbXNnc3RyICLOlM65zrXPjc64z4XOvc+DzrcgRW1haWwiCisKKyM6IGxpYi9vcHRpb24udGNsOjExOQorbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgorbXNnc3RyICLOoM61z4HOr867zrfPiM63IM6lz4DOv86yzr/Ou8+Ozr0gzqPPhc6zz4fPjs69zrXPhc+DzrfPgiIKKworIzogbGliL29wdGlvbi50Y2w6MTIwCittc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgorbXNnc3RyICLOm861z4DPhM6/zrzOrc+BzrXOuc6xIM6jz4XOs8+Hz47Ovc61z4XPg863z4IiCisKKyM6IGxpYi9vcHRpb24udGNsOjEyMQorbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCittc2dzdHIgIs6gz4HOv86yzr/Ou86uIM6jz4TOsc+EzrnPg8+EzrnOus+Ozr0gzpTOuc6xz4bOv8+BzqzPgiDOnM61z4TOrCDOsc+Az4wgzqPPhc6zz4fPjs69zrXPhc+DzrciCisKKyM6IGxpYi9vcHRpb24udGNsOjEyMworbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCittc2dzdHIgIs6VzrzPgM65z4PPhM6/z4PPjc69zrcgzpfOvM61z4HOv868zrfOvc65z47OvSDOnM61z4TOsc+Ez4HOv8+Azq7PgiDOkc+Bz4fOtc6vz4nOvSIKKworIzogbGliL29wdGlvbi50Y2w6MTI0Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICLOms67zqzOtM61zrzOsSDOms67zqzOtM+Jzr0gzqDOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiDOms6xz4TOrCDOpM63zr0gzpHOvc6szrrPhM63z4POtyIKKworIzogbGliL29wdGlvbi50Y2w6MTI1Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCittc2dzdHIgIs6jz4XOvM+Gz4nOvc6vzrEgzprOu86szrTPic69IM6gzrHPgc6xzrrOv867zr/Pjc64zrfPg863z4IiCisKKyM6IGxpYi9vcHRpb24udGNsOjEyNgorbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCittc2dzdHIgIs6Rz4HOuc64zrzPjM+CIM6Tz4HOsc68zrzPjs69IM6Vzr3Ovc6/zrnOv867zr/Os865zrrOv8+NIM6gzrvOsc65z4POr86/z4UgzpTOuc6xz4bOv8+BzqzPgiIKKworIzogbGliL29wdGlvbi50Y2w6MTI3Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKK21zZ3N0ciAizqDOu86sz4TOv8+CIM6azrXOuc68zq3Ovc6/z4UgzpzOt869z43OvM6xz4TOv8+CIM6lz4DOv86yzr/Ou86uz4IiCisKKyM6IGxpYi9vcHRpb24udGNsOjEyOAorbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKK21zZ3N0ciAizp3Orc6/IM6gz4HPjM+Ez4XPgM6/IM6fzr3PjM68zrHPhM6/z4IgzprOu86szrTOv8+FIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxOTIKK21zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKK21zZ3N0ciAizpvOtc6+zrnOus+MIM6fz4HOuM6/zrPPgc6xz4bOr86xz4I6IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMTYKK21zZ2lkICJDaGFuZ2UgRm9udCIKK21zZ3N0ciAizpHOu867zrHOs86uIM6Tz4HOsc68zrzOsc+Ezr/Pg861zrnPgc6sz4IiCisKKyM6IGxpYi9vcHRpb24udGNsOjIyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNob29zZSAlcyIKK21zZ3N0ciAizpXPgM65zrvOv86zzq4gJXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjIyNgorIywgZnV6enkKK21zZ2lkICJwdC4iCittc2dzdHIgIiIKKworIzogbGliL29wdGlvbi50Y2w6MjQwCittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIs6gz4HOv8+EzrnOvM6uz4POtc65z4IiCisKKyM6IGxpYi9vcHRpb24udGNsOjI3NQorbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCittc2dzdHIgIs6Rz4DOv8+Ez4XPh86vzrEgz4DOu86uz4HOv8+Fz4IgzrHPgM6/zrjOrs66zrXPhc+DzrfPgiDOtc+AzrnOu86/zrPPjs69OiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Cittc2dpZCAiRGVsZXRlIFJlbW90ZSBCcmFuY2giCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzpHPgM6/zrzOsc66z4HPhc+DzrzOrc69zr/PhSDOms67zqzOtM6/z4UiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgIs6Rz4DPjCDOkc+Azr/OuM61z4TOrs+BzrnOvyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMjMKK21zZ2lkICJSZW1vdGU6IgorbXNnc3RyICLOkc+Azr/OvM6xzrrPgc+Fz4POvM6tzr3OvzoiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NjYgbGliL3RyYW5zcG9ydC50Y2w6MTM4CisjLCBmdXp6eQorbXNnaWQgIkFyYml0cmFyeSBVUkw6IgorbXNnc3RyICLOkc+FzrjOsc6vz4HOtc+Ezr8gVVJMOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4NAorbXNnaWQgIkJyYW5jaGVzIgorbXNnc3RyICLOms67zqzOtM6/zrkiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTA5Cittc2dpZCAiRGVsZXRlIE9ubHkgSWYiCittc2dzdHIgIs6UzrnOsc6zz4HOsc+Gzq4gzpzPjM69zr8gzpXOrM69IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAizqPPhc6zz4fPic69zrXPhc68zq3Ovc6/IM6czrU6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExOQorbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKK21zZ3N0ciAizqDOrM69z4TOsSAozpzOtyDOtM65zrXOvc61z4HOs863zrjOv8+Nzr0gzq3Ou861zrPPh86/zrkgz4PPhc6zz4fPjs69zrXPhc+DzrfPgikiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUyCittc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgorbXNnc3RyICLOkc+AzrHOuc+EzrXOr8+EzrHOuSDOrc69zrHPgiDOus67zqzOtM6/z4IgzrPOuc6xICfOo8+FzrPPh8+Jzr3Otc+FzrzOrc69zr8gzpzOtScuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKKyJcbiIKKyIgLSAlcyIKK21zZ3N0ciAiIgorIs6fzrkgzrXOvs6uz4IgzrrOu86szrTOv865IM60zrXOvSDOtc6vzr3Osc65IM+AzrvOrs+Bz4nPgiDPg8+FzrPPh8+Jzr3Otc+FzrzOrc69zr/OuSDOvM61IM+Ezr8gJXM6XG4iCisiXG4iCisiIC0gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisizpzOr86xIM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrXPgiDOsc+Az4wgz4TOuc+CIM60zr/Ous65zrzOrc+CIM+Dz4XOs8+Hz47Ovc61z4XPg863z4IgzrHPgM6tz4TPhc+HzrHOvSDOtc+AzrXOuc60zq4gzrTOtc69IM6tz4fOtc+EzrUgIgorIs+Gzq3Pgc61zrkgz4TOuc+CIM6xzr3Osc6zzrrOsc6vzrXPgiDPhc+Azr/Oss6/zrvOrc+CLiDOlM6/zrrOuc68zqzPg8+EzrUgzrHOvc6szrrPhM63z4POtyDOsc+Az4wgz4TOvyAlcyDPgM+Bz47PhM6xLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDcKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgIs6gzrHPgc6xzrrOsc67z44gzrXPgM65zrvOrc6+z4TOtSDOrc69zrHOvSDOriDPgM61z4HOuc+Dz4PPjM+EzrXPgc6/z4XPgiDOus67zqzOtM6/z4XPgiDPgM+Bzr/PgiDOtM65zrHOs8+BzrHPhs6uLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTYKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJcbiIKKyJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKK21zZ3N0ciAiIgorIs6XIM6xzr3OrM66z4TOt8+DzrcgzrTOuc61zrPPgc6xzrzOvM6tzr3Pic69IM66zrvOrM60z4nOvSDOtc6vzr3Osc65IM60z43Pg866zr/Ou863LlxuIgorIlxuIgorIs6UzrnOsc6zz4HOsc+Gzq4gz4TPic69IM61z4DOuc67zrXOs868zq3Ovc+Jzr0gzrrOu86szrTPic69OyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOtM65zrHOs8+BzrHPhs6uIM66zrvOrM60z4nOvSDOsc+Az4wgJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjg2Cittc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCittc2dzdHIgIs6UzrXOvSDOrc+HzrXOuSDOtc+AzrnOu861zrPOtc6vIM6xz4DOv864zrXPhM6uz4HOuc6/LiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAizpHOvc6vz4fOvc61z4XPg863ICVzLi4uIgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjUKK21zZ2lkICJQcnVuZSBmcm9tIgorbXNnc3RyICLOms67zqzOtM61zrzOsSDOsc+Az4wiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE3MAorbXNnaWQgIkZldGNoIGZyb20iCittc2dzdHIgIs6Rzr3OrM66z4TOt8+DzrcgzrHPgM+MIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMTMKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICLOj864zrfPg863IM+DzrUiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MjAgbGliL3Nob3J0Y3V0LnRjbDo2MQorbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCittc2dzdHIgIs6UzrUgzrzPgM+Mz4HOtc+DzrUgzr3OsSDOsc+Azr/OuM63zrrOtc+Fz4TOtc6vIM63IM+Dz4XOvc+Ez4zOvM61z4XPg863OiIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoxMzYKK21zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCittc2dzdHIgIs6UzrUgzrzPgM+Mz4HOtc+DzrUgzr3OsSDOsc+Azr/OuM63zrrOtc+Fz4TOtc6vIM+Ezr8gzrXOuc66zr/Ovc6vzrTOuc6/OiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Cittc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiTc63IM+Fz4DOv8+Dz4TOt8+BzrnOts+MzrzOtc69zr/PgiDOtc67zrXOs866z4TOrs+CIM6/z4HOuM6/zrPPgc6xz4bOr86xz4IiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICLOiM67zrXOs8+Hzr/PgiDOv8+BzrjOv86zz4HOsc+Gzq/Osc+CIM68zrcgzrTOuc6xzrjOrc+DzrnOvM6/z4IiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAizpzOtyDOrc6zzrrPhc+Bzrcgz4HPjc64zrzOuc+DzrcgzrXOu86tzrPPh86/z4Ugzr/Pgc64zr/Os8+BzrHPhs6vzrHPgiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOtc+AzrHOvc6xz4bOv8+Bzqwgz4TOv8+FIM67zrXOvs65zrrOv8+NIM+DzrUgJXMuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKK21zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgorbXNnc3RyICLOnyDOtc67zrXOs866z4TOrs+CIM6/z4HOuM6/zrPPgc6xz4bOr86xz4IgzrHPgM6tz4TPhc+HzrUgz4POuc+Jz4DOt867zqwgzrrOsc+Ezqwgz4TOt869IM61zrrOus6vzr3Ot8+DzrciCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAorbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICLOnM63IM6xzr3Osc6zzr3Pic+Bzq/Pg865zrzOv8+CIM61zrvOtc6zzrrPhM6uz4Igzr/Pgc64zr/Os8+BzrHPhs6vzrHPgiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjE4MAorbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgorbXNnc3RyICLOms6xzrzOr86xIM6gz4HPjM+EzrHPg863IgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MzgxCittc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgorbXNnc3RyICLOnM63IM6xzr3Osc68zrXOvc+MzrzOtc69zr8gz4TOrc67zr/PgiDOsc+Bz4fOtc6vzr/PhSDOsc+Az4wgz4TOv869IM61zrvOtc6zzrrPhM6uIM6/z4HOuM6/zrPPgc6xz4bOr86xz4IiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODUKK21zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKK21zZ3N0ciAizpHPgM6/z4TPhc+Hzq/OsSDOlc67zrXOs866z4TOriDOn8+BzrjOv86zz4HOsc+Gzq/Osc+CIgorCisjOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgorbXNnc3RyICIlcyAuLi4gJSppIM6xz4DPjCAlKmkgJXMgKCUzaSUlKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZldGNoICVzIgorbXNnc3RyICLOsc69zqzOus+EzrfPg863ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKK21zZ3N0ciAizpHOvc6szrrPhM63z4POtyDOvc6tz4nOvSDOsc67zrvOsc6zz47OvSDOsc+Az4wgz4TOvyAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCittc2dzdHIgIs6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IM66zrvOrM60zrXOvM6xICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgorbXNnc3RyICLOk86vzr3Otc+EzrHOuSDOus67zqzOtM61zrzOsSDOus67zqzOtM+Jzr0gz4DOsc+BzrHOus6/zrvOv8+NzrjOt8+DzrfPgiDPgM6/z4UgzrTOuc61zrPPgc6sz4bOt8+DzrHOvSDOsc+Az4wgz4TOvyAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJwdXNoICVzIgorbXNnc3RyICLPjs64zrfPg863ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgz47OuM63z4POtyDOsc67zrvOsc6zz47OvSDPg8+Ezr8gJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAizpPOr869zrXPhM6xzrkgz47OuM63z4POtyAlcyAlcyDPg8+Ezr8gJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjg5Cittc2dpZCAiUHVzaCBCcmFuY2hlcyIKK21zZ3N0ciAizo/OuM63z4POtyDOms67zqzOtM+Jzr0iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwMworbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKK21zZ3N0ciAizqDOt86zzrHOr86/zrkgzprOu86szrTOv865IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMjAKK21zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgorbXNnc3RyICLOkc+Azr/OuM61z4TOrs+BzrnOvyDOoM+Bzr/Ov8+BzrnPg868zr/PjSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTU4Cittc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKK21zZ3N0ciAizpXPgM65zrvOv86zzq3PgiDOnM61z4TOsc+Gzr/Pgc6sz4IiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2MAorbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorbXNnc3RyICIiCisizpXOvs6xzr3Osc6zzrrOsc+DzrzPjM+CIM61z4DOtc6zzrPPgc6xz4bOrs+CIM+Fz4DOrM+Bz4fOv869z4TOv8+CIM66zrvOrM60zr/PhSAozrzPgM6/z4HOtc6vIM69zrEgzrHPgM6/z4HPgc6vz4jOtc65IM6xzrvOu86xzrPOrc+CKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTY0Cittc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCittc2dzdHIgIs6nz4HOrs+DzrcgzrnPg8+Hzr3Ov8+NIM+AzrHOus6tz4TOv8+FICjOs865zrEgzrHPgc6zzq3PgiDPg8+Fzr3OtM6tz4POtc65z4IgzrTOuc66z4TPjc6/z4UpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjgKK21zZ2lkICJJbmNsdWRlIHRhZ3MiCittc2dzdHIgIs6jz4XOvM+AzrXPgc6vzrvOt8+IzrcgzrXPhM65zrrOtc+Ez47OvSIKKworCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2ZyLnBvIGIvZ2l0LWd1aS9wby9mci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWZmMTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9mci5wbwpAQCAtMCwwICsxLDI2MDQgQEAKKyMgdHJhbnNsYXRpb24gb2YgZnIucG8gdG8gRnJlbmNoCisjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gRnJlbmNoLgorIyBDb3B5cmlnaHQgKEMpIDIwMDggU2hhd24gUGVhcmNlLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdCBwYWNrYWdlLgorIworIyBDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz4sIDIwMDguCisjIEFsZXhhbmRyZSBCb3VyZ2V0IDxhbGV4YW5kcmUuYm91cmdldEBzYXZvaXJmYWlyZWxpbnV4LmNvbT4sIDIwMDguCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBmclxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAxNTo0Ny0wODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMi0wMiAxMjo1OSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGcmVuY2hcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLUdlbmVyYXRvcjogS0JhYmVsIDEuMTEuNFxuIgorIlBsdXJhbC1Gb3JtczogIG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgorCisjOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzkzIGdpdC1ndWkuc2g6ODA3IGdpdC1ndWkuc2g6ODIwIGdpdC1ndWkuc2g6OTAzCisjOiBnaXQtZ3VpLnNoOjkyMgorbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgorbXNnc3RyICJnaXQtZ3VpOiBlcnJldXIgZmF0YWxlIgorCisjOiBnaXQtZ3VpLnNoOjc0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgorbXNnc3RyICJQb2xpY2UgaW52YWxpZGUgc3DDqWNpZmnDqWUgZGFucyAlcyA6IgorCisjOiBnaXQtZ3VpLnNoOjc3OQorbXNnaWQgIk1haW4gRm9udCIKK21zZ3N0ciAiUG9saWNlIHByaW5jaXBhbGUiCisKKyM6IGdpdC1ndWkuc2g6NzgwCittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgIlBvbGljZSBkaWZmL2NvbnNvbGUiCisKKyM6IGdpdC1ndWkuc2g6Nzk0Cittc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgZ2l0IGRhbnMgUEFUSC4iCisKKyM6IGdpdC1ndWkuc2g6ODIxCittc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCittc2dzdHIgIkltcG9zc2libGUgZGUgcGFyc2VyIGxhIHZlcnNpb24gZGUgR2l0IDoiCisKKyM6IGdpdC1ndWkuc2g6ODM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIlxuIgorIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCisiXG4iCisiJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgorIlxuIgorIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGTDqXRlcm1pbmVyIGxhIHZlcnNpb24gZGUgR2l0LlxuIgorIlxuIgorIiVzIGFmZmlybWUgcXUnaWwgcydhZ2l0IGRlIGxhIHZlcnNpb24gJyVzJy5cbiIKKyJcbiIKKyIlcyBuw6ljZXNzaXRlIGF1IG1vaW5zIEdpdCAxLjUuMC5cbiIKKyJcbiIKKyJQZXV0LW9uIGNvbnNpZMOpcmVyIHF1ZSAnJXMnIGVzdCBlbiB2ZXJzaW9uIDEuNS4wID9cbiIKKworIzogZ2l0LWd1aS5zaDoxMTI4Cittc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGUgcsOpcGVydG9pcmUgZ2l0IDoiCisKKyM6IGdpdC1ndWkuc2g6MTE0NgorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIkltcG9zc2libGUgZCdhbGxlciDDoCBsYSByYWNpbmUgZHUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCA6IgorCisjOiBnaXQtZ3VpLnNoOjExNTQKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgIkltcG9zc2libGUgZCd1dGlsaXNlciB1biBkw6lww7R0IG51IChiYXJlKSA6IgorCisjOiBnaXQtZ3VpLnNoOjExNjIKK21zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiQXVjdW4gcsOpcGVydG9pcmUgZGUgdHJhdmFpbCIKKworIzogZ2l0LWd1aS5zaDoxMzM0IGxpYi9jaGVja291dF9vcC50Y2w6MzA2Cittc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKK21zZ3N0ciAiUmFmcmHDrmNoaXNzZW1lbnQgZHUgc3RhdHV0IGRlcyBmaWNoaWVycy4uLiIKKworIzogZ2l0LWd1aS5zaDoxMzkwCittc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKK21zZ3N0ciAiUmVjaGVyY2hlIGRlIGZpY2hpZXJzIG1vZGlmacOpcy4uLiIKKworIzogZ2l0LWd1aS5zaDoxNDU0Cittc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAiTGFuY2VtZW50IGRlIGwnYWN0aW9uIGRlIHByw6lwYXJhdGlvbiBkdSBtZXNzYWdlIGRlIGNvbW1pdC4uLiIKKworIzogZ2l0LWd1aS5zaDoxNDcxCittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiQ29tbWl0IHJlZnVzw6kgcGFyIGwnYWN0aW9uIGRlIHByw6lwYXJhdGlvbiBkdSBtZXNzYWdlIGRlIGNvbW1pdC4iCisKKyM6IGdpdC1ndWkuc2g6MTYyOSBsaWIvYnJvd3Nlci50Y2w6MjQ2Cittc2dpZCAiUmVhZHkuIgorbXNnc3RyICJQcsOqdC4iCisKKyM6IGdpdC1ndWkuc2g6MTc4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCittc2dzdHIgIkFmZmljaGUgc2V1bGVtZW50ICVzIGZpY2hpZXJzIHN1ciAlcy4iCisKKyM6IGdpdC1ndWkuc2g6MTkxMworbXNnaWQgIlVubW9kaWZpZWQiCittc2dzdHIgIk5vbiBtb2RpZmnDqSIKKworIzogZ2l0LWd1aS5zaDoxOTE1Cittc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIk1vZGlmacOpLCBwYXMgaW5kZXjDqSIKKworIzogZ2l0LWd1aS5zaDoxOTE2IGdpdC1ndWkuc2g6MTkyNAorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJJbmRleMOpIgorCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1Cittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIlBvcnRpb25zIGluZGV4w6llcyIKKworIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICJJbmRleMOpcywgbWFucXVhbnQiCisKKyM6IGdpdC1ndWkuc2g6MTkyMAorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJMZSB0eXBlIGRlIGZpY2hpZXIgYSBjaGFuZ8OpLCBub24gaW5kZXjDqSIKKworIzogZ2l0LWd1aS5zaDoxOTIxCittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKK21zZ3N0ciAiTGUgdHlwZSBkZSBmaWNoaWVyIGEgY2hhbmfDqSwgaW5kZXjDqSIKKworIzogZ2l0LWd1aS5zaDoxOTIzCittc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJOb24gdmVyc2lvbm7DqSwgbm9uIGluZGV4w6kiCisKKyM6IGdpdC1ndWkuc2g6MTkyOAorbXNnaWQgIk1pc3NpbmciCittc2dzdHIgIk1hbnF1YW50IgorCisjOiBnaXQtZ3VpLnNoOjE5MjkKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCittc2dzdHIgIkluZGV4w6kgcG91ciBzdXBwcmVzc2lvbiIKKworIzogZ2l0LWd1aS5zaDoxOTMwCittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgorbXNnc3RyICJJbmRleMOpIHBvdXIgc3VwcHJlc3Npb24sIHRvdWpvdXJzIHByw6lzZW50IgorCisjOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKKyM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJOw6ljZXNzaXRlIGxhIHLDqXNvbHV0aW9uIGQndW5lIGZ1c2lvbiIKKworIzogZ2l0LWd1aS5zaDoxOTcyCittc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAiTGFuY2VtZW50IGRlIGdpdGsuLi4gdW4gaW5zdGFudC4uLiIKKworIzogZ2l0LWd1aS5zaDoxOTg0Cittc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBnaXRrIGRhbnMgUEFUSC4iCisKKyM6IGdpdC1ndWkuc2g6MjA0MworbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgZ2l0IGd1aSBkYW5zIFBBVEgiCisKKyM6IGdpdC1ndWkuc2g6MjQ1NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2Cittc2dpZCAiUmVwb3NpdG9yeSIKK21zZ3N0ciAiRMOpcMO0dCIKKworIzogZ2l0LWd1aS5zaDoyNDU2Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAiw4lkaXRpb24iCisKKyM6IGdpdC1ndWkuc2g6MjQ1OCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJCcmFuY2hlIgorCisjOiBnaXQtZ3VpLnNoOjI0NjEgbGliL2Nob29zZV9yZXYudGNsOjU0OAorbXNnaWQgIkNvbW1pdEBAbm91biIKK21zZ3N0ciAiQ29tbWl0IgorCisjOiBnaXQtZ3VpLnNoOjI0NjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAiRnVzaW9ubmVyIgorCisjOiBnaXQtZ3VpLnNoOjI0NjUgbGliL2Nob29zZV9yZXYudGNsOjU1NworbXNnaWQgIlJlbW90ZSIKK21zZ3N0ciAiRMOpcMO0dCBkaXN0YW50IgorCisjOiBnaXQtZ3VpLnNoOjI0NjgKK21zZ2lkICJUb29scyIKK21zZ3N0ciAiT3V0aWxzIgorCisjOiBnaXQtZ3VpLnNoOjI0NzcKK21zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKK21zZ3N0ciAiRXhwbG9yZXIgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogZ2l0LWd1aS5zaDoyNDgzCittc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCittc2dzdHIgIk5hdmlndWVyIGRhbnMgbGEgYnJhbmNoZSBjb3VyYW50ZSIKKworIzogZ2l0LWd1aS5zaDoyNDg3Cittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKK21zZ3N0ciAiTmF2aWd1ZXIgZGFucyBsYSBicmFuY2hlLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI0OTIKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpc2VyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlIGNvdXJhbnRlIgorCisjOiBnaXQtZ3VpLnNoOjI0OTYKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgorbXNnc3RyICJWb2lyIGwnaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIGJyYW5jaGVzIgorCisjOiBnaXQtZ3VpLnNoOjI1MDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKK21zZ3N0ciAiUGFyY291cmlyIGwnYXJib3Jlc2NlbmNlIGRlICVzIgorCisjOiBnaXQtZ3VpLnNoOjI1MDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgorbXNnc3RyICJWb2lyIGwnaGlzdG9yaXF1ZSBkZSBsYSBicmFuY2hlIDogJXMiCisKKyM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKK21zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgorbXNnc3RyICJTdGF0aXN0aXF1ZXMgZHUgZMOpcMO0dCIKKworIzogZ2l0LWd1aS5zaDoyNTEzIGxpYi9kYXRhYmFzZS50Y2w6MzQKK21zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKK21zZ3N0ciAiQ29tcHJpbWVyIGxlIGTDqXDDtHQiCisKKyM6IGdpdC1ndWkuc2g6MjUxNgorbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKK21zZ3N0ciAiVsOpcmlmaWVyIGxlIGTDqXDDtHQiCisKKyM6IGdpdC1ndWkuc2g6MjUyMyBnaXQtZ3VpLnNoOjI1MjcgZ2l0LWd1aS5zaDoyNTMxIGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAiQ3LDqWVyIHVuZSBpY8O0bmUgc3VyIGxlIGJ1cmVhdSIKKworIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCittc2dpZCAiUXVpdCIKK21zZ3N0ciAiUXVpdHRlciIKKworIzogZ2l0LWd1aS5zaDoyNTQ3Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAiRMOpZmFpcmUiCisKKyM6IGdpdC1ndWkuc2g6MjU1MAorbXNnaWQgIlJlZG8iCittc2dzdHIgIlJlZmFpcmUiCisKKyM6IGdpdC1ndWkuc2g6MjU1NCBnaXQtZ3VpLnNoOjMxMDkKK21zZ2lkICJDdXQiCittc2dzdHIgIkNvdXBlciIKKworIzogZ2l0LWd1aS5zaDoyNTU3IGdpdC1ndWkuc2g6MzExMiBnaXQtZ3VpLnNoOjMxODYgZ2l0LWd1aS5zaDozMjU5CisjOiBsaWIvY29uc29sZS50Y2w6NjkKK21zZ2lkICJDb3B5IgorbXNnc3RyICJDb3BpZXIiCisKKyM6IGdpdC1ndWkuc2g6MjU2MCBnaXQtZ3VpLnNoOjMxMTUKK21zZ2lkICJQYXN0ZSIKK21zZ3N0ciAiQ29sbGVyIgorCisjOiBnaXQtZ3VpLnNoOjI1NjMgZ2l0LWd1aS5zaDozMTE4IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAorbXNnaWQgIkRlbGV0ZSIKK21zZ3N0ciAiU3VwcHJpbWVyIgorCisjOiBnaXQtZ3VpLnNoOjI1NjcgZ2l0LWd1aS5zaDozMTIyIGdpdC1ndWkuc2g6MzI2MyBsaWIvY29uc29sZS50Y2w6NzEKK21zZ2lkICJTZWxlY3QgQWxsIgorbXNnc3RyICJUb3V0IHPDqWxlY3Rpb25uZXIiCisKKyM6IGdpdC1ndWkuc2g6MjU3NgorbXNnaWQgIkNyZWF0ZS4uLiIKK21zZ3N0ciAiQ3LDqWVyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1ODIKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAiQ2hhcmdlciAoY2hlY2tvdXQpLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1ODgKK21zZ2lkICJSZW5hbWUuLi4iCittc2dzdHIgIlJlbm9tbWVyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1OTMKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIlN1cHByaW1lci4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTk4Cittc2dpZCAiUmVzZXQuLi4iCittc2dzdHIgIlLDqWluaXRpYWxpc2VyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI2MDgKK21zZ2lkICJEb25lIgorbXNnc3RyICJFZmZlY3R1w6kiCisKKyM6IGdpdC1ndWkuc2g6MjYxMAorbXNnaWQgIkNvbW1pdEBAdmVyYiIKK21zZ3N0ciAiQ29tbWl0ZXJAQHZlcmIiCisKKyM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKK21zZ2lkICJOZXcgQ29tbWl0IgorbXNnc3RyICJOb3V2ZWF1IGNvbW1pdCIKKworIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NworbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICJDb3JyaWdlciBkZXJuaWVyIGNvbW1pdCIKKworIzogZ2l0LWd1aS5zaDoyNjM3IGdpdC1ndWkuc2g6MzAxMSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjk5Cittc2dpZCAiUmVzY2FuIgorbXNnc3RyICJSZWNoYXJnZXIgbW9kaWZzLiIKKworIzogZ2l0LWd1aS5zaDoyNjQzCittc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgorbXNnc3RyICJJbmRleGVyIgorCisjOiBnaXQtZ3VpLnNoOjI2NDkKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAiSW5kZXhlciB0b3V0ZXMgbW9kaWZpY2F0aW9ucyIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAiRMOpc2luZGV4ZXIiCisKKyM6IGdpdC1ndWkuc2g6MjY2MSBsaWIvaW5kZXgudGNsOjQxMgorbXNnaWQgIlJldmVydCBDaGFuZ2VzIgorbXNnc3RyICJBbm51bGVyIGxlcyBtb2RpZmljYXRpb25zIgorCisjOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQorbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgorbXNnc3RyICJNb250cmVyIG1vaW5zIGRlIGNvbnRleHRlIgorCisjOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQorbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgorbXNnc3RyICJNb250cmVyIHBsdXMgZGUgY29udGV4dGUiCisKKyM6IGdpdC1ndWkuc2g6MjY4MCBnaXQtZ3VpLnNoOjMwMjQgZ2l0LWd1aS5zaDozMTMzCittc2dpZCAiU2lnbiBPZmYiCittc2dzdHIgIlNpZ25lciIKKworIzogZ2l0LWd1aS5zaDoyNjk2Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgIkZ1c2lvbiBsb2NhbGUuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjcwMQorbXNnaWQgIkFib3J0IE1lcmdlLi4uIgorbXNnc3RyICJBYmFuZG9ubmVyIGZ1c2lvbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzEzIGdpdC1ndWkuc2g6Mjc0MQorbXNnaWQgIkFkZC4uLiIKK21zZ3N0ciAiQWpvdXRlci4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzE3Cittc2dpZCAiUHVzaC4uLiIKK21zZ3N0ciAiUG91c3Nlci4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzIxCittc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKK21zZ3N0ciAiU3VwcHJpbWVyIGJyYW5jaGUuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjczMSBnaXQtZ3VpLnNoOjMyOTIKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICJPcHRpb25zLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3NDIKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgIlN1cHByaW1lci4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKK21zZ2lkICJIZWxwIgorbXNnc3RyICJBaWRlIgorCisjOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3V0ICVzIgorbXNnc3RyICLDgCBwcm9wb3MgZGUgJXMiCisKKyM6IGdpdC1ndWkuc2g6Mjc4MworbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgorbXNnc3RyICJEb2N1bWVudGF0aW9uIGVuIGxpZ25lIgorCisjOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Cittc2dpZCAiU2hvdyBTU0ggS2V5IgorbXNnc3RyICJNb250cmVyIGxhIGNsw6kgU1NIIgorCisjOiBnaXQtZ3VpLnNoOjI4OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImVycmV1ciBmYXRhbGUgOiBwYXMgZCdpbmZvcyBzdXIgbGUgY2hlbWluICVzIDogRmljaGllciBvdSByw6lwZXJ0b2lyZSAiCisiaW5leGlzdGFudCIKKworIzogZ2l0LWd1aS5zaDoyOTI2Cittc2dpZCAiQ3VycmVudCBCcmFuY2g6IgorbXNnc3RyICJCcmFuY2hlIGNvdXJhbnRlIDoiCisKKyM6IGdpdC1ndWkuc2g6Mjk0NworbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCittc2dzdHIgIk1vZGlmcy4gaW5kZXjDqWVzIChwb3VyIGNvbW1pdCkiCisKKyM6IGdpdC1ndWkuc2g6Mjk2NworbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCittc2dzdHIgIk1vZGlmcy4gbm9uIGluZGV4w6llcyIKKworIzogZ2l0LWd1aS5zaDozMDE3Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAiSW5kZXhlciBtb2RpZnMuIgorCisjOiBnaXQtZ3VpLnNoOjMwMzYgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MworbXNnaWQgIlB1c2giCittc2dzdHIgIlBvdXNzZXIiCisKKyM6IGdpdC1ndWkuc2g6MzA3MQorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBpbml0aWFsIDoiCisKKyM6IGdpdC1ndWkuc2g6MzA3MgorbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBjb3JyaWfDqSA6IgorCisjOiBnaXQtZ3VpLnNoOjMwNzMKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBpbml0aWFsIGNvcnJpZ8OpIDoiCisKKyM6IGdpdC1ndWkuc2g6MzA3NAorbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBkZSBmdXNpb24gY29ycmlnw6kgOiIKKworIzogZ2l0LWd1aS5zaDozMDc1Cittc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCBkZSBmdXNpb24gOiIKKworIzogZ2l0LWd1aS5zaDozMDc2Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdlIGRlIGNvbW1pdCA6IgorCisjOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MworbXNnaWQgIkNvcHkgQWxsIgorbXNnc3RyICJDb3BpZXIgdG91dCIKKworIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0Cittc2dpZCAiRmlsZToiCittc2dzdHIgIkZpY2hpZXIgOiIKKworIzogZ2l0LWd1aS5zaDozMjU1Cittc2dpZCAiUmVmcmVzaCIKK21zZ3N0ciAiUmFmcmHDrmNoaXIiCisKKyM6IGdpdC1ndWkuc2g6MzI3NgorbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAiRGltaW51ZXIgbGEgcG9saWNlIgorCisjOiBnaXQtZ3VpLnNoOjMyODAKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIkFncmFuZGlyIGxhIHBvbGljZSIKKworIzogZ2l0LWd1aS5zaDozMjg4IGxpYi9ibGFtZS50Y2w6MjgxCittc2dpZCAiRW5jb2RpbmciCittc2dzdHIgIkNvZGFnZSBkZXMgY2FyYWN0w6hyZXMiCisKKyM6IGdpdC1ndWkuc2g6MzI5OQorbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKK21zZ3N0ciAiQXBwbGlxdWVyL0ludmVyc2VyIHNlY3Rpb24iCisKKyM6IGdpdC1ndWkuc2g6MzMwNAorbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKK21zZ3N0ciAiQXBwbGlxdWVyL0ludmVyc2VyIGxhIGxpZ25lIgorCisjOiBnaXQtZ3VpLnNoOjMzMjMKK21zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKK21zZ3N0ciAiTGFuY2VyIGwnb3V0aWwgZGUgZnVzaW9uIgorCisjOiBnaXQtZ3VpLnNoOjMzMjgKK21zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCittc2dzdHIgIlV0aWxpc2VyIGxhIHZlcnNpb24gZGlzdGFudGUiCisKKyM6IGdpdC1ndWkuc2g6MzMzMgorbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICJVdGlsaXNlciBsYSB2ZXJzaW9uIGxvY2FsZSIKKworIzogZ2l0LWd1aS5zaDozMzM2Cittc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCittc2dzdHIgIlJldmVuaXIgw6AgbGEgdmVyc2lvbiBkZSBiYXNlIgorCisjOiBnaXQtZ3VpLnNoOjMzNTQKK21zZ2lkICJWaXN1YWxpemUgVGhlc2UgQ2hhbmdlcyBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWb2lyIGxlcyBjaGFuZ21lbnRzIGRhbnMgbGUgc291cy1tb2R1bGUiCisKKyM6IGdpdC1ndWkuc2g6MzM1OAorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZvaXIgbCdoaXN0b3JpcXVlIGRlIGxhIGJyYW5jaGUgY291cmFudGUgZHUgc291cy1tb2R1bGUiCisKKyM6IGdpdC1ndWkuc2g6MzM2MgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiVm9pciBsJ2hpc3RvcmlxdWUgZGUgdG91dGVzIGxlcyBicmFuY2hlcyBkdSBzb3VzLW1vZHVsZSIKKworIzogZ2l0LWd1aS5zaDozMzY3Cittc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJEw6ltYXJyZXIgZ2l0IGd1aSBkYW5zIGxlIHNvdXMtbW9kdWxlIgorCisjOiBnaXQtZ3VpLnNoOjMzODkKK21zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCittc2dzdHIgIkTDqXNpbmRleGVyIGxhIHNlY3Rpb24iCisKKyM6IGdpdC1ndWkuc2g6MzM5MQorbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCittc2dzdHIgIkTDqXNpbmRleGVyIGxhIGxpZ25lIGR1IGNvbW1pdCIKKworIzogZ2l0LWd1aS5zaDozMzkzCittc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgorbXNnc3RyICJEw6lzaW5kZXhlciBsYSBsaWduZSIKKworIzogZ2l0LWd1aS5zaDozMzk2Cittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICJJbmRleGVyIGxhIHNlY3Rpb24iCisKKyM6IGdpdC1ndWkuc2g6MzM5OAorbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCittc2dzdHIgIkluZGV4ZXIgbGVzIGxpZ25lcyIKKworIzogZ2l0LWd1aS5zaDozNDAwCittc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgorbXNnc3RyICJJbmRleGVyIGxhIGxpZ25lIgorCisjOiBnaXQtZ3VpLnNoOjM0MjQKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIkluaXRpYWxpc2F0aW9uLi4uIgorCisjOiBnaXQtZ3VpLnNoOjM1NDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisiRGVzIHByb2Jsw6htZXMgZCdlbnZpcm9ubmVtZW50IHNvbnQgcG9zc2libGVzLlxuIgorIlxuIgorIkxlcyB2YXJpYWJsZXMgZCdlbnZpcm9ubmVtZW50IHN1aXZhbnRlcyBzZXJvbnRcbiIKKyJwcm9iYWJsZW1lbnQgaWdub3LDqWVzIHBhciB0b3VzIGxlc1xuIgorInNvdXMtcHJvY2Vzc3VzIGRlIEdpdCBsYW5jw6lzIHBhciAlc1xuIgorIlxuIgorCisjOiBnaXQtZ3VpLnNoOjM1NzAKK21zZ2lkICIiCisiXG4iCisiVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgorIlRjbCBiaW5hcnkgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLiIKK21zZ3N0ciAiIgorIlxuIgorIkNlY2kgZXN0IGTDuyDDoCB1biBwcm9ibMOobWUgY29ubnUgYXZlY1xuIgorImxlIGJpbmFpcmUgVGNsIGRpc3RyaWJ1w6kgcGFyIEN5Z3dpbi4iCisKKyM6IGdpdC1ndWkuc2g6MzU3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCisiaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCisidXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKKyJ+Ly5naXRjb25maWcgZmlsZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIlVuIGJvbiByZW1wbGFjZW1lbnQgcG91ciAlc1xuIgorImVzdCBkZSBtZXR0cmUgbGVzIHZhbGV1cnMgcG91ciAndXNlci5uYW1lJyAobm9tXG4iCisiZGUgbCd1dGlsaXNhdGV1cikgZXQgJ3VzZXIuZW1haWwnIChhZGRyZXNzZSBlbWFpbFxuIgorImRlIGwndXRpbGlzYXRldXIpIGRhbnMgdm90cmUgZmljaGllciAnfi8uZ2l0Y29uZmlnJy5cbiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtIHVuZSBpbnRlcmZhY2UgZ3JhcGhpcXVlIHV0aWxpc2F0ZXVyIHBvdXIgR2l0IgorCisjOiBsaWIvYmxhbWUudGNsOjcyCittc2dpZCAiRmlsZSBWaWV3ZXIiCittc2dzdHIgIlZpc2lvbm5ldXIgZGUgZmljaGllciIKKworIzogbGliL2JsYW1lLnRjbDo3OAorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIkNvbW1pdCA6IgorCisjOiBsaWIvYmxhbWUudGNsOjI3MQorbXNnaWQgIkNvcHkgQ29tbWl0IgorbXNnc3RyICJDb3BpZXIgY29tbWl0IgorCisjOiBsaWIvYmxhbWUudGNsOjI3NQorbXNnaWQgIkZpbmQgVGV4dC4uLiIKK21zZ3N0ciAiQ2hlcmNoZXIgdGV4dGUuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg0Cittc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKK21zZ3N0ciAiTGFuY2VyIGxhIGTDqXRlY3Rpb24gYXBwcm9mb25kaWUgZGVzIGNvcGllcyIKKworIzogbGliL2JsYW1lLnRjbDoyODgKK21zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKK21zZ3N0ciAiTW9udHJlciBsJ2hpc3RvcmlxdWUiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjkxCittc2dpZCAiQmxhbWUgUGFyZW50IENvbW1pdCIKK21zZ3N0ciAiQmzDom1lciBsZSBjb21taXQgcGFyZW50IgorCisjOiBsaWIvYmxhbWUudGNsOjQ1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgJXMuLi4iCittc2dzdHIgIkxlY3R1cmUgZGUgJXMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NTU3Cittc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIkNoYXJnZW1lbnQgZGVzIGFubm90YXRpb25zIGRlIHN1aXZpIGRlcyBjb3BpZXMvZMOpcGxhY2VtZW50cy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1NzcKK21zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCittc2dzdHIgImxpZ25lcyBhbm5vdMOpZXMiCisKKyM6IGxpYi9ibGFtZS50Y2w6NzY5Cittc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAiQ2hhcmdlbWVudCBkZXMgYW5ub3RhdGlvbnMgZCdlbXBsYWNlbWVudCBvcmlnaW5hbCIKKworIzogbGliL2JsYW1lLnRjbDo3NzIKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAiQW5ub3RhdGlvbiB0ZXJtaW7DqWUuIgorCisjOiBsaWIvYmxhbWUudGNsOjgwMgorbXNnaWQgIkJ1c3kiCittc2dzdHIgIk9jY3Vww6kiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAzCittc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCittc2dzdHIgIkFubm90YXRpb24gZW4gY291cnMgZCdleMOpY3V0aW9uLiIKKworIzogbGliL2JsYW1lLnRjbDo4NDIKK21zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgorbXNnc3RyICJSZWNoZXJjaGUgZGUgY29waWUgYXBwcm9mb25kaWUgZW4gY291cnMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6OTEwCittc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgorbXNnc3RyICJDaGFyZ2VtZW50IGRlcyBhbm5vdGF0aW9ucy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo5NjMKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRldXIgOiIKKworIzogbGliL2JsYW1lLnRjbDo5NjcKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJDb21taXRldXIgOiIKKworIzogbGliL2JsYW1lLnRjbDo5NzIKK21zZ2lkICJPcmlnaW5hbCBGaWxlOiIKK21zZ3N0ciAiRmljaGllciBvcmlnaW5hbCA6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwMjAKK21zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBsZSBjb21taXQgSEVBRCA6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwNzUKK21zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIGNvbW1pdCBwYXJlbnQgOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDkwCittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYWZmaWNoZXIgbGUgcGFyZW50IgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjMyMAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgIkVycmV1ciBsb3JzIGR1IGNoYXJnZW1lbnQgZGVzIGRpZmbDqXJlbmNlcyA6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzEKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAiw4AgbCdvcmlnaW5lIHBhciA6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzcKK21zZ2lkICJJbiBGaWxlOiIKK21zZ3N0ciAiRGFucyBsZSBmaWNoaWVyIDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI0MgorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAiQ29wacOpIG91IGTDqXBsYWPDqSBpY2kgcGFyIDoiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE0IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE5Cittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICJDaGFyZ2VyIGxhIGJyYW5jaGUgKGNoZWNrb3V0KSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiQ2hhcmdlciAoY2hlY2tvdXQpIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgorIzogbGliL29wdGlvbi50Y2w6MTI1IGxpYi9yZW1vdGVfYWRkLnRjbDozMiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0MCBsaWIvdG9vbHNfZGxnLnRjbDoyMDQgbGliL3Rvb2xzX2RsZy50Y2w6MzUyCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDgKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFubnVsZXIiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcgbGliL3Rvb2xzX2RsZy50Y2w6MzI4Cittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIlLDqXZpc2lvbiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI4MAorbXNnaWQgIk9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiUsOpY3Vww6lyZXIgbGEgYnJhbmNoZSBkZSBzdWl2aSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDQKK21zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCittc2dzdHIgIkTDqXRhY2hlciBkZSBsYSBicmFuY2hlIGxvY2FsZSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIyCittc2dpZCAiQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAiQ3LDqWVyIHVuZSBicmFuY2hlIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjcKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAiQ3LDqWVyIHVuZSBub3V2ZWxsZSBicmFuY2hlIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODEKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyw6llciIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQwCittc2dpZCAiQnJhbmNoIE5hbWUiCittc2dzdHIgIk5vbSBkZSBicmFuY2hlIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMgbGliL3JlbW90ZV9hZGQudGNsOjM5IGxpYi90b29sc19kbGcudGNsOjUwCittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbSA6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTgKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKK21zZ3N0ciAiVHJvdXZlciBub20gZGUgYnJhbmNoZSBkZSBzdWl2aSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Cittc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCittc2dzdHIgIlLDqXZpc2lvbiBpbml0aWFsZSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCittc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCittc2dzdHIgIk1ldHRyZSDDoCBqb3VyIHVuZSBicmFuY2hlIGV4aXN0YW50ZSA6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKK21zZ2lkICJObyIKK21zZ3N0ciAiTm9uIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKK21zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIHJlY3RpbGlnbmUgc2V1bGVtZW50IChmYXN0LWZvcndhcmQpIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1NzEKK21zZ2lkICJSZXNldCIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzZXIiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NworbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgorbXNnc3RyICJDaGFyZ2VyIChjaGVja291dCkgYXByw6hzIGNyw6lhdGlvbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgorbXNnc3RyICJDaG9pc2lzc2V6IHVuZSBicmFuY2hlIGRlIHN1aXZpIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgorbXNnc3RyICJMYSBicmFuY2hlIGRlIHN1aXZpICVzIG4nZXN0IHBhcyB1bmUgYnJhbmNoZSBkYW5zIGxlIGTDqXDDtHQgZGlzdGFudC4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTMgbGliL2JyYW5jaF9yZW5hbWUudGNsOjg2Cittc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiRm91cm5pc3NleiB1biBub20gZGUgYnJhbmNoZS4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBub20gZGUgYnJhbmNoZSBhY2NlcHRhYmxlLiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE1Cittc2dpZCAiRGVsZXRlIEJyYW5jaCIKK21zZ3N0ciAiU3VwcHJpbWVyIGJyYW5jaGUiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgIlN1cHByaW1lciBicmFuY2hlIGxvY2FsZSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM3Cittc2dpZCAiTG9jYWwgQnJhbmNoZXMiCittc2dzdHIgIkJyYW5jaGVzIGxvY2FsZXMiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MgorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgorbXNnc3RyICJTdXBwcmltZXIgc2V1bGVtZW50IHNpIGZ1c2lvbm7DqWUgZGFucyA6IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKK21zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCittc2dzdHIgIlRvdWpvdXJzIChuZSBwYXMgdsOpcmlmaWVyIGxlcyBmdXNpb25zKSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKK21zZ3N0ciAiTGVzIGJyYW5jaGVzIHN1aXZhbnRlcyBuZSBzb250IHBhcyBjb21wbMOodGVtZW50IGZ1c2lvbm7DqWVzIGRhbnMgJXMgOiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNworbXNnaWQgIiIKKyJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgorIlxuIgorIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisiSWwgZXN0IGRpZmZpY2lsZSBkZSByw6ljdXDDqXJlciBkZXMgYnJhbmNoZXMgc3VwcHJpbcOpZXMuXG4iCisiXG4iCisiU3VwcHJpbWVyIGxlcyBicmFuY2hlcyBzw6lsZWN0aW9ubsOpZXMgPyIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisiTGEgc3VwcHJlc3Npb24gZGVzIGJyYW5jaGVzIHN1aXZhbnRlcyBhIMOpY2hvdcOpIDpcbiIKKyIlcyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMgorbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIlJlbm9tbWVyIGJyYW5jaGUiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgorbXNnaWQgIlJlbmFtZSIKK21zZ3N0ciAiUmVub21tZXIiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozNgorbXNnaWQgIkJyYW5jaDoiCittc2dzdHIgIkJyYW5jaGUgOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM5Cittc2dpZCAiTmV3IE5hbWU6IgorbXNnc3RyICJOb3V2ZWF1IG5vbSA6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NzUKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCittc2dzdHIgIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgdW5lIGJyYW5jaGUgw6AgcmVub21tZXIuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkxhIGJyYW5jaGUgJyVzJyBleGlzdGUgZMOpasOgLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCittc2dzdHIgIsOJY2hlYyBwb3VyIHJlbm9tbWVyICclcycuIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTcKK21zZ2lkICJTdGFydGluZy4uLiIKK21zZ3N0ciAiTGFuY2VtZW50Li4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjYKK21zZ2lkICJGaWxlIEJyb3dzZXIiCittc2dzdHIgIlZpc2lvbm5ldXIgZGUgZmljaGllciIKKworIzogbGliL2Jyb3dzZXIudGNsOjEyNiBsaWIvYnJvd3Nlci50Y2w6MTQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyAlcy4uLiIKK21zZ3N0ciAiQ2hhcmdlbWVudCBkZSAlcy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE4NworbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJbSnVzcXUnYXUgcGFyZW50XSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI2NyBsaWIvYnJvd3Nlci50Y2w6MjczCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKK21zZ3N0ciAiTmF2aWd1ZXIgZGFucyBsZXMgZmljaGllcnMgZGUgbGUgYnJhbmNoZSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyOAorbXNnaWQgIkJyb3dzZSIKK21zZ3N0ciAiTmF2aWd1ZXIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgorbXNnc3RyICJSw6ljdXDDqXJhdGlvbiBkZSAlcyDDoCBwYXJ0aXIgZGUgJXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICJlcnJldXIgZmF0YWxlIDogSW1wb3NzaWJsZSBkZSByw6lzb3VkcmUgJXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ2IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCisjOiBsaWIvc3Noa2V5LnRjbDo1MworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJGZXJtZXIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJMYSBicmFuY2hlICclcycgbidleGlzdGUgcGFzLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgorbXNnc3RyICLDiWNoZWMgZGUgbGEgY29uZmlndXJhdGlvbiBzaW1wbGlmacOpZSBkZSBnaXQtcHVsbCBwb3VyICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKKyJcbiIKKyJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgorIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSAnJXMnIGV4aXN0ZSBkw6lqw6AuXG4iCisiXG4iCisiSW1wb3NzaWJsZSBkZSBmYWlyZSB1bmUgYXZhbmNlIHJhcGlkZSAoZmFzdCBmb3J3YXJkKSB2ZXJzICVzLlxuIgorIlVuZSBmdXNpb24gZXN0IG7DqWNlc3NhaXJlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJMYSBzdHJhdMOpZ2llIGRlIGZ1c2lvbiAnJXMnIG4nZXN0IHBhcyBzdXBwb3J0w6llLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgorbXNnc3RyICJMYSBtaXNlIMOgIGpvdXIgZGUgJyVzJyBhIMOpY2hvdcOpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKK21zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCittc2dzdHIgIkwnaW5kZXggKHN0YWdpbmcgYXJlYSkgZXN0IGTDqWrDoCB2ZXJyb3VpbGzDqS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJMJ8OpdGF0IGxvcnMgZGUgbGEgZGVybmnDqHJlIHN5bmNocm9uaXNhdGlvbiBuZSBjb3JyZXNwb25kIHBsdXMgw6AgbCfDqXRhdCBkdSAiCisiZMOpcMO0dC5cbiIKKyJcbiIKKyJVbiBhdXRyZSBwcm9ncmFtbWUgR2l0IGEgbW9kaWZpw6kgY2UgZMOpcMO0dCBkZXB1aXMgbGEgZGVybmnDqHJlICIKKyJzeW5jaHJvbmlzYXRpb24uIFVuZSByZXN5bmNocm9uaXNhdGlvbiBkb2l0IMOqdHJlIGVmZmVjdHXDqWUgYXZhbnQgZGUgcG91dm9pciAiCisibW9kaWZpZXIgbGEgYnJhbmNoZSBjb3VyYW50ZS5cbiIKKyJcbiIKKyJDZWxhIHZhIMOqdHJlIGZhaXQgdG91dCBkZSBzdWl0ZSBhdXRvbWF0aXF1ZW1lbnQuXG4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAiTWlzZSDDoCBqb3VyIGR1IHLDqXBlcnRvaXJlIGNvdXJhbnQgYXZlYyAnJXMnLi4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgorbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgorbXNnc3RyICJmaWNoaWVycyBjaGFyZ8OpcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICIiCisiQ2hhcmdlbWVudCBkZSAnJXMnIGFiYW5kb25uw6kgKGlsIGVzdCBuw6ljZXNzYWlyZSBkZSBmdXNpb25uZXIgZGVzIGZpY2hpZXJzKS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3Cittc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCittc2dzdHIgIklsIGVzdCBuw6ljZXNzYWlyZSBkZSBmdXNpb25uZXIgZGVzIGZpY2hpZXJzLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiTGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCByZXN0ZSBzdXIgbGEgYnJhbmNoZSAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorIlZvdXMgbifDqnRlcyBwbHVzIHN1ciB1bmUgYnJhbmNoZSBsb2NhbGUuXG4iCisiXG4iCisiU2kgdm91cyB2b3VsaWV6IMOqdHJlIHN1ciB1bmUgYnJhbmNoZSwgY3LDqWV6LWVuIHVuZSBtYWludGVuYW50IGVuIHBhcnRhbnQgZGUgIgorIidDZXQgZW1wcnVudCBkw6l0YWNow6knLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDMgbGliL2NoZWNrb3V0X29wLnRjbDo1MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaGVja2VkIG91dCAnJXMnLiIKK21zZ3N0ciAiJyVzJyBjaGFyZ8OpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorbXNnc3RyICJSw6lpbml0aWFsaXNlciAnJXMnIMOgICclcycgdmEgZmFpcmUgcGVyZHJlIGxlcyBjb21taXRzIHN1aXZhbnRzIDoiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Cittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAiUsOpY3Vww6lyZXIgbGVzIGNvbW1pdHMgcGVyZHVzIG5lIHNlcmEgcGV1dCDDqnRyZSBwYXMgZmFjaWxlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAnJXMnPyIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzZXIgJyVzJyA/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIlZpc3VhbGlzZXIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKKyJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAiIgorIkxlIGNoYW5nZW1lbnQgZGUgbGEgYnJhbmNoZSBjb3VyYW50ZSBhIMOpY2hvdcOpLlxuIgorIlxuIgorIkxlIHLDqXBlcnRvaXJlIGNvdXJhbnQgbidlc3QgcXVlIHBhcnRpZWxsZW1lbnQgbW9kaWZpw6kuIExlcyBmaWNoaWVycyBvbnQgw6l0w6kgIgorIm1pcyDDoCBqb3VyIGF2ZWMgc3VjY8OocywgbWFpcyBsYSBtaXNlIMOgIGpvdXIgZCd1biBmaWNoaWVyIGludGVybmUgw6AgR2l0IGEgIgorIsOpY2hvdcOpZS5cbiIKKyJcbiIKKyJDZWxhIG4nYXVyYWl0IHBhcyBkw7sgc2UgcHJvZHVpcmUuICVzIHZhIGFiYW5kb25uZXIgZXQgc2UgdGVybWluZXIuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Cittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJTw6lsZWN0aW9ubmVyIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCittc2dpZCAiRm9udCBGYW1pbHkiCittc2dzdHIgIkZhbWlsbGVzIGRlIHBvbGljZXMiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzQKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIlRhaWxsZSBkZSBwb2xpY2UiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTEKK21zZ2lkICJGb250IEV4YW1wbGUiCittc2dzdHIgIkV4ZW1wbGUgZGUgcG9saWNlIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworbXNnaWQgIiIKKyJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKKyJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorbXNnc3RyICIiCisiQ2VjaSBlc3QgdW4gdGV4dGUgZCdleGVtcGxlLlxuIgorIlNpIHZvdXMgYWltZXogY2UgdGV4dGUsIHZvdXMgcG91dmV6IGNob2lzaXIgY2V0dGUgcG9saWNlLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyOAorbXNnaWQgIkdpdCBHdWkiCittc2dzdHIgIkdpdCBHdWkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODYKK21zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCittc2dzdHIgIkNyw6llciBub3V2ZWF1IGTDqXDDtHQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMKK21zZ2lkICJOZXcuLi4iCittc2dzdHIgIk5vdXZlYXUuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCittc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiQ2xvbmVyIHVuIGTDqXDDtHQgZXhpc3RhbnQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2Cittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgIkNsb25lci4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE2Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICJPdXZyaXIgdW4gZMOpcMO0dCBleGlzdGFudCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTkKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICJPdXZyaXIuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCittc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiRMOpcMO0dHMgcsOpY2VtbWVudCB1dGlsaXPDqXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTM4Cittc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCittc2dzdHIgIk91dnJpciB1biBkw6lww7R0IHLDqWNlbnQgOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAiTGEgY3LDqWF0aW9uIGR1IGTDqXDDtHQgJXMgYSDDqWNob3XDqSA6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5MQorbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIlLDqXBlcnRvaXJlIDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAiRMOpcMO0dCBHaXQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiTGUgcsOpcGVydG9pcmUgJXMgZXhpc3RlIGTDqWrDoC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkxlIGZpY2hpZXIgJXMgZXhpc3RlIGTDqWrDoC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDY2Cittc2dpZCAiQ2xvbmUiCittc2dzdHIgIkNsb25lciIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzkKK21zZ2lkICJTb3VyY2UgTG9jYXRpb246IgorbXNnc3RyICJFbXBsYWNlbWVudCBzb3VyY2UgOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTAKK21zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKK21zZ3N0ciAiUsOpcGVydG9pcmUgY2libGUgOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKK21zZ2lkICJDbG9uZSBUeXBlOiIKK21zZ3N0ciAiVHlwZSBkZSBjbG9uYWdlIDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA4Cittc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorbXNnc3RyICJTdGFuZGFyZCAocmFwaWRlLCBzZW1pLXJlZG9uZGFudCwgbGllbnMgZHVycykiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0Cittc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgorbXNnc3RyICJDb3BpZSBjb21wbMOodGUgKHBsdXMgbGVudCwgc2F1dmVnYXJkZSByZWRvbmRhbnRlKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjAKK21zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKK21zZ3N0ciAiUGFydGFnw6kgKGxlIHBsdXMgcmFwaWRlLCBub24gcmVjb21tYW5kw6ksIHBhcyBkZSBzYXV2ZWdhcmRlKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODE5CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR2l0IHJlcG9zaXRvcnk6ICVzIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBkw6lww7R0IEdpdC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCittc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJTdGFuZGFyZCBuJ2VzdCBkaXNwb25pYmxlIHF1ZSBwb3VyIHVuIGTDqXDDtHQgbG9jYWwuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NgorbXNnaWQgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIlBhcnRhZ8OpIG4nZXN0IGRpc3BvbmlibGUgcXVlIHBvdXIgdW4gZMOpcMO0dCBsb2NhbC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJMJ2VtcGxhY2VtZW50ICVzIGV4aXN0ZSBkw6lqw6AuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyOAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgorbXNnc3RyICJMYSBjb25maWd1cmF0aW9uIGRlIGwnb3JpZ2luZSBhIMOpY2hvdcOpLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDAKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJEw6ljb21wdGUgZGVzIG9iamV0cyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDEKK21zZ2lkICJidWNrZXRzIgorbXNnc3RyICJwYW5pZXJzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjb3BpZXIgJ29iamVjdHMvaW5mby9hbHRlcm5hdGVzJyA6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCittc2dzdHIgIklsIG4neSBhIHJpZW4gw6AgY2xvbmVyIGRlcHVpcyAlcy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyOQorbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKK21zZ3N0ciAiTGEgYnJhbmNoZSAnbWFzdGVyJyBuJ2EgcGFzIMOpdMOpIGluaXRpYWxpc8OpZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2Cittc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKK21zZ3N0ciAiIgorIkxlcyBsaWVucyBkdXJzIG5lIHNvbnQgcGFzIHN1cHBvcnTDqXMuIFVuZSBjb3BpZSBzZXJhIGVmZmVjdHXDqWUgw6AgbGEgcGxhY2UuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAiQ2xvbmFnZSBkZXB1aXMgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU5Cittc2dpZCAiQ29weWluZyBvYmplY3RzIgorbXNnc3RyICJDb3BpZSBkZXMgb2JqZXRzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAorbXNnaWQgIktpQiIKK21zZ3N0ciAiS2lCIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgY29waWVyIGwnb2JqZXQgOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIkxpYWlzb24gZGVzIG9iamV0cyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTUKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICJvYmpldHMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCittc2dzdHIgIkltcG9zc2libGUgY3LDqWVyIHVuIGxpZW4gZHVyIHBvdXIgbCdvYmpldCA6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg1OAorbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyIGxlcyBicmFuY2hlcyBldCBvYmpldHMuIFZvaXIgbGEgc29ydGllIGNvbnNvbGUgcG91ciAiCisicGx1cyBkZSBkw6l0YWlscy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODY5Cittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsZXMgbWFycXVlcyAodGFncykuIFZvaXIgbGEgc29ydGllIGNvbnNvbGUgcG91ciBwbHVzICIKKyJkZSBkw6l0YWlscy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCittc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgZMOpdGVybWluZXIgSEVBRC4gVm9pciBsYSBzb3J0aWUgY29uc29sZSBwb3VyIHBsdXMgZGUgZMOpdGFpbHMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIG5ldHRveWVyICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAorbXNnaWQgIkNsb25lIGZhaWxlZC4iCittc2dzdHIgIkxlIGNsb25hZ2UgYSDDqWNob3XDqS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTE1Cittc2dpZCAiTm8gZGVmYXVsdCBicmFuY2ggb2J0YWluZWQuIgorbXNnc3RyICJBdWN1bmUgYnJhbmNoZSBwYXIgZMOpZmF1dCBuJ2Egw6l0w6kgb2J0ZW51ZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSAlcyBjb21tZSBjb21taXQuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJDcsOpYXRpb24gZHUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzkgbGliL2luZGV4LnRjbDo2NyBsaWIvaW5kZXgudGNsOjEzMAorIzogbGliL2luZGV4LnRjbDoxOTgKK21zZ2lkICJmaWxlcyIKK21zZ3N0ciAiZmljaGllcnMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTY4Cittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIkxlIGNoYXJnZW1lbnQgaW5pdGlhbCBkdSBmaWNoaWVyIGEgw6ljaG91w6kuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKK21zZ2lkICJPcGVuIgorbXNnc3RyICJPdXZyaXIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMQorbXNnaWQgIlJlcG9zaXRvcnk6IgorbXNnc3RyICJEw6lww7R0IDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGTDqXDDtHQgJXMgOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzCittc2dpZCAiVGhpcyBEZXRhY2hlZCBDaGVja291dCIKK21zZ3N0ciAiQ2V0IGVtcHJ1bnQgZMOpdGFjaMOpIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAiRXhwcmVzc2lvbiBkZSByw6l2aXNpb24gOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc0Cittc2dpZCAiTG9jYWwgQnJhbmNoIgorbXNnc3RyICJCcmFuY2hlIGxvY2FsZSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc5Cittc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICJCcmFuY2hlIGRlIHN1aXZpIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODQgbGliL2Nob29zZV9yZXYudGNsOjUzOAorbXNnaWQgIlRhZyIKK21zZ3N0ciAiTWFycXVlICh0YWcpIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCittc2dzdHIgIlLDqXZpc2lvbiBpbnZhbGlkZSA6ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Cittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICJQYXMgZGUgcsOpdmlzaW9uIHPDqWxlY3Rpb25uw6llLiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjM0NgorbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgorbXNnc3RyICJMJ2V4cHJlc3Npb24gZGUgcsOpdmlzaW9uIGVzdCB2aWRlLiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzMQorbXNnaWQgIlVwZGF0ZWQiCittc2dzdHIgIk1pc2Ugw6Agam91cjoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTkKK21zZ2lkICJVUkwiCittc2dzdHIgIlVSTCIKKworIzogbGliL2NvbW1pdC50Y2w6OQorbXNnaWQgIiIKKyJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgorIlxuIgorIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCisidG8gYW1lbmQuXG4iCittc2dzdHIgIiIKKyJJbCBuJ3kgYSByaWVuIMOgIGNvcnJpZ2VyLlxuIgorIlxuIgorIlZvdXMgYWxsZXogY3LDqWVyIGxlIGNvbW1pdCBpbml0aWFsLiBJbCBuJ3kgYSBwYXMgZGUgY29tbWl0IGF2YW50IGNlbHVpLWNpIMOgICIKKyJjb3JyaWdlci5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgKK21zZ2lkICIiCisiQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCisiXG4iCisiWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKKyJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgorImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGNvcnJpZ2VyIHBlbmRhbnQgdW5lIGZ1c2lvbi5cbiIKKyJcbiIKKyJWb3VzIMOqdGVzIGFjdHVlbGxlbWVudCBhdSBtaWxpZXUgZCd1bmUgZnVzaW9uIHF1aSBuJ2EgcGFzIMOpdMOpIGNvbXBsw6h0ZW1lbnQgIgorInRlcm1pbsOpZS4gVm91cyBuZSBwb3V2ZXogcGFzIGNvcnJpZ2VyIGxlIGNvbW1pdCBwcsOpY8OpZGVudCBzYXVmIHNpIHZvdXMgIgorImFiYW5kb25uZXogbGEgZnVzaW9uIGNvdXJhbnRlLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDo0OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZHUgY2hhcmdlbWVudCBkZXMgZG9ubsOpZXMgZGUgY29tbWl0IHBvdXIgY29ycmVjdGlvbiA6IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgIkltcG9zc2libGUgZCdvYnRlbmlyIHZvdHJlIGlkZW50aXTDqSA6IgorCisjOiBsaWIvY29tbWl0LnRjbDo4MAorbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCittc2dzdHIgIkdJVF9DT01NSVRURVJfSURFTlQgaW52YWxpZGUgOiIKKworIzogbGliL2NvbW1pdC50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgImF0dGVudGlvbiA6IFRjbCBuZSBzdXBwb3J0ZSBwYXMgbGUgY29kYWdlICclcycuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNDkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiTCfDqXRhdCBsb3JzIGRlIGxhIGRlcm5pw6hyZSBzeW5jaHJvbmlzYXRpb24gbmUgY29ycmVzcG9uZCBwbHVzIMOgIGwnw6l0YXQgZHUgIgorImTDqXDDtHQuXG4iCisiXG4iCisiVW4gYXV0cmUgcHJvZ3JhbW1lIEdpdCBhIG1vZGlmacOpIGNlIGTDqXDDtHQgZGVwdWlzIGxhIGRlcm5pw6hyZSAiCisic3luY2hyb25pc2F0aW9uLiBVbmUgcmVzeW5zaHJvbmlzYXRpb24gZG9pdCDDqnRyZSBlZmZlY3R1w6llIGF2YW50IGRlIHBvdXZvaXIgIgorImNyw6llciB1biBub3V2ZWF1IGNvbW1pdC5cbiIKKyJcbiIKKyJDZWxhIHZhIMOqdHJlIGZhaXQgdG91dCBkZSBzdWl0ZSBhdXRvbWF0aXF1ZW1lbnQuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgorIlxuIgorIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgorImJlZm9yZSBjb21taXR0aW5nLlxuIgorbXNnc3RyICIiCisiRGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzIG5lIHBldXZlbnQgw6p0cmUgY29tbWl0w6lzLlxuIgorIlxuIgorIkxlIGZpY2hpZXIgJXMgYSBkZXMgY29uZmxpY3RzIGRlIGZ1c2lvbi4gVm91cyBkZXZleiBsZXMgcsOpc291ZHJlIGV0IHByw6ktIgorImNvbW1pdGVyIGxlIGZpY2hpZXIgYXZhbnQgZGUgcG91dm9pciBjb21taXRlci5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorbXNnc3RyICIiCisiVW4gw6l0YXQgZGUgZmljaGllciBpbmNvbm51ICVzIGEgw6l0w6kgZMOpdGVjdMOpLlxuIgorIlxuIgorIkxlIGZpY2hpZXIgJXMgbmUgcGV1dCBwYXMgw6p0cmUgY29tbWl0w6kgcGFyIGNlIHByb2dyYW1tZS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTg4Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCittc2dzdHIgIiIKKyJQYXMgZGUgbW9kaWZpY2F0aW9uIMOgIGNvbW1pdGVyLlxuIgorIlxuIgorIlZvdXMgZGV2ZXogaW5kZXhlciBhdSBtb2lucyAxIGZpY2hpZXIgYXZhbnQgZGUgcG91dm9pciBjb21taXRlci5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjAzCittc2dpZCAiIgorIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgorIlxuIgorIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKKyItIFNlY29uZCBsaW5lOiBCbGFua1xuIgorIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKK21zZ3N0ciAiIgorIk1lcmNpIGRlIGZvdXJuaXIgdW4gbWVzc2FnZSBkZSBjb21taXQuXG4iCisiXG4iCisiVW4gYm9uIG1lc3NhZ2UgZGUgY29tbWl0IGEgbGUgZm9ybWF0IHN1aXZhbnQgOlxuIgorIlxuIgorIi0gUHJlbWnDqHJlIGxpZ25lIDogZMOpY3JpcmUgZW4gdW5lIHBocmFzZSBjZSBxdWUgdm91cyBhdmV6IGZhaXQuXG4iCisiLSBEZXV4acOobWUgbGlnbmUgOiByaWVuLlxuIgorIi0gTGlnbmVzIHN1aXZhbnRlcyA6IETDqWNyaXJlIHBvdXJxdW9pIGNlcyBtb2RpZmljYXRpb25zIHNvbnQgYm9ubmVzLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzQKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAiTGFuY2VtZW50IGRlIGwnYWN0aW9uIGQnYXZhbnQtY29tbWl0Li4uIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNDkKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKK21zZ3N0ciAiQ29tbWl0IHJlZnVzw6kgcGFyIGwnYWN0aW9uIGQnYXZhbnQtY29tbWl0LiIKKworIzogbGliL2NvbW1pdC50Y2w6MjcyCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIkxhbmNlbWVudCBkZSBsJ2FjdGlvbiBcIm1lc3NhZ2UgZGUgY29tbWl0XCIuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI4NworbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgorbXNnc3RyICJDb21taXQgcmVmdXPDqSBwYXIgbCdhY3Rpb24gXCJtZXNzYWdlIGRlIGNvbW1pdFwiLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzAwCittc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgorbXNnc3RyICJDb21taXQgZGVzIG1vZGlmaWNhdGlvbnMuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjMxNgorbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAid3JpdGUtdHJlZSBhIMOpY2hvdcOpIDoiCisKKyM6IGxpYi9jb21taXQudGNsOjMxNyBsaWIvY29tbWl0LnRjbDozNjEgbGliL2NvbW1pdC50Y2w6MzgyCittc2dpZCAiQ29tbWl0IGZhaWxlZC4iCittc2dzdHIgIkxlIGNvbW1pdCBhIMOpY2hvdcOpLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIKK21zZ3N0ciAiTGUgY29tbWl0ICVzIHNlbWJsZSDDqnRyZSBjb3Jyb21wdSIKKworIzogbGliL2NvbW1pdC50Y2w6MzM5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiUGFzIGRlIG1vZGlmaWNhdGlvbiDDoCBjb21taXRlci5cbiIKKyJcbiIKKyJBdWN1biBmaWNoaWVyIG4nYSDDqXTDqSBtb2RpZmnDqSBwYXIgY2UgY29tbWl0IGV0IGlsIG5lIHMnYWdpdCBwYXMgZCd1biBjb21taXQgIgorImRlIGZ1c2lvbi5cbiIKKyJcbiIKKyJVbmUgcmVzeW5jaHJvbmlzYXRpb24gdmEgw6p0cmUgbGFuY8OpZSB0b3V0IGRlIHN1aXRlIGF1dG9tYXRpcXVlbWVudC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzQ2Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICJQYXMgZGUgbW9kaWZpY2F0aW9ucyDDoCBjb21taXRlci4iCisKKyM6IGxpYi9jb21taXQudGNsOjM2MAorbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCittc2dzdHIgImNvbW1pdC10cmVlIGEgw6ljaG91w6kgOiIKKworIzogbGliL2NvbW1pdC50Y2w6MzgxCittc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgorbXNnc3RyICJ1cGRhdGUtcmVmIGEgw6ljaG91w6kgOiIKKworIzogbGliL2NvbW1pdC50Y2w6NDY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgorbXNnc3RyICJDb21taXQgJXMgY3LDqcOpIDogJXMiCisKKyM6IGxpYi9jb25zb2xlLnRjbDo1OQorbXNnaWQgIldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIlRyYXZhaWwgZW4gY291cnMuLi4gbWVyY2kgZGUgcGF0aWVudGVyLi4uIgorCisjOiBsaWIvY29uc29sZS50Y2w6MTg2Cittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiU3VjY8OocyIKKworIzogbGliL2NvbnNvbGUudGNsOjIwMAorbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKK21zZ3N0ciAiRXJyZXVyIDogw6ljaGVjIGRlIGxhIGNvbW1hbmRlIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIk5vbWJyZSBkJ29iamV0cyBlbiBmaWNoaWVyIHBhcnRpY3VsaWVyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ0Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkVzcGFjZSBkaXNxdWUgdXRpbGlzw6kgcGFyIGxlcyBmaWNoaWVycyBwYXJ0aWN1bGllcnMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKK21zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIk5vbWJyZSBkJ29iamV0cyBlbXBhcXVldMOpcyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NgorbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKK21zZ3N0ciAiTm9tYnJlIGRlIHBhcXVldHMgZCdvYmpldHMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIkVzcGFjZSBkaXNxdWUgdXRpbGlzw6kgcGFyIGxlcyBvYmpldHMgZW1wYXF1ZXTDqXMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICJPYmpldHMgZW1wYXF1ZXTDqXMgYXR0ZW5kYW50IGQnw6p0cmUgc3VwcHJpbcOpcyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OQorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIkZpY2hpZXJzIHBvdWJlbGxlIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjcyCittc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiQ29tcHJlc3Npb24gZGUgbGEgYmFzZSBkZXMgb2JqZXRzIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjgzCittc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCittc2dzdHIgIlbDqXJpZmljYXRpb24gZGUgbGEgYmFzZSBkZXMgb2JqZXRzIGF2ZWMgZnNjay1vYmplY3RzIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCisiXG4iCisiVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCisidGhlIGRhdGFiYXNlLlxuIgorIlxuIgorIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorbXNnc3RyICIiCisiQ2UgZMOpcMO0dCBjb21wcmVuZCBhY3R1ZWxsZW1lbnQgZW52aXJvbiAlaSBvYmpldHMgYXlhbnQgbGV1ciBmaWNoaWVyICIKKyJwYXJ0aWN1bGllci5cbiIKKyJcbiIKKyJQb3VyIGNvbnNlcnZlciB1bmUgcGVyZm9ybWFuY2Ugb3B0aW1hbGUsIGlsIGVzdCBmb3J0ZW1lbnQgcmVjb21tYW5kw6kgZGUgIgorImNvbXByaW1lciBsYSBiYXNlIGRlIGRvbm7DqWUuXG4iCisiXG4iCisiQ29tcHJpbWVyIGxhIGJhc2UgbWFpbnRlbmFudCA/IgorCisjOiBsaWIvZGF0ZS50Y2w6MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgorbXNnc3RyICJEYXRlIGludmFsaWRlIGRlIEdpdCA6ICVzIgorCisjOiBsaWIvZGlmZi50Y2w6NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiJXMgaGFzIG5vIGNoYW5nZXMuXG4iCisiXG4iCisiVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgorInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCisidGhlIHNhbWUgc3RhdGUuIgorbXNnc3RyICIiCisiQXVjdW5lIGRpZmbDqXJlbmNlIGTDqXRlY3TDqWUuXG4iCisiXG4iCisiJXMgbmUgY29tcG9ydGUgYXVjdW5lIG1vZGlmaWNhdGlvbi5cbiIKKyJcbiIKKyJMYSBkYXRlIGRlIG1vZGlmaWNhdGlvbiBkZSBjZSBmaWNoaWVyIGEgw6l0w6kgbWlzZSDDoCBqb3VyIHBhciB1bmUgYXV0cmUgIgorImFwcGxpY2F0aW9uLCBtYWlzIGxlIGNvbnRlbnUgZHUgZmljaGllciBuJ2EgcGFzIGNoYW5nw6kuXG4iCisiXG4iCisiVW5lIHJlc3luY2hyb25pc2F0aW9uIHZhIMOqdHJlIGxhbmPDqWUgYXV0b21hdGlxdWVtZW50IHBvdXIgdHJvdXZlciBkJ2F1dHJlcyAiCisiZmljaGllcnMgcXVpIHBvdXJyYWllbnQgc2UgdHJvdXZlciBkYW5zIGxlIG3Dqm1lIMOpdGF0LiIKKworIzogbGliL2RpZmYudGNsOjEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAiQ2hhcmdlbWVudCBkZXMgZGlmZsOpcmVuY2VzIGRlICVzLi4uIgorCisjOiBsaWIvZGlmZi50Y2w6MTI1Cittc2dpZCAiIgorIkxPQ0FMOiBkZWxldGVkXG4iCisiUkVNT1RFOlxuIgorbXNnc3RyICIiCisiTE9DQUwgOiBzdXBwcmltw6lcbiIKKyJESVNUQU5UIDpcbiIKKworIzogbGliL2RpZmYudGNsOjEzMAorbXNnaWQgIiIKKyJSRU1PVEU6IGRlbGV0ZWRcbiIKKyJMT0NBTDpcbiIKK21zZ3N0ciAiIgorIkRJU1RBTlQgOiBzdXBwcmltw6lcbiIKKyJMT0NBTCA6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzcKK21zZ2lkICJMT0NBTDpcbiIKK21zZ3N0ciAiTE9DQUwgOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTQwCittc2dpZCAiUkVNT1RFOlxuIgorbXNnc3RyICJESVNUQU5UIDpcbiIKKworIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCittc2dzdHIgIkltcG9zc2libGUgZCdhZmZpY2hlciAlcyIKKworIzogbGliL2RpZmYudGNsOjIwMworbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCittc2dzdHIgIkVycmV1ciBsb3JzIGR1IGNoYXJnZW1lbnQgZHUgZmljaGllciA6IgorCisjOiBsaWIvZGlmZi50Y2w6MjEwCittc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgorbXNnc3RyICJEw6lww7R0IEdpdCAoc291cyBwcm9qZXQpIgorCisjOiBsaWIvZGlmZi50Y2w6MjIyCittc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgorbXNnc3RyICIqIEZpY2hpZXIgYmluYWlyZSAocGFzIGQnYXBwZXLDp3UgZHUgY29udGVudSkuIgorCisjOiBsaWIvZGlmZi50Y2w6MjI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCisiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCittc2dzdHIgIiIKKyIqIExlIGZpY2hpZXIgbm9uIHN1aXZpIGZhaXQgJWQgb2N0ZXRzLlxuIgorIiogU2V1bHMgbGVzICVkIHByZW1pZXJzIG9jdGV0cyBzb250IG1vbnRyw6lzLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgorIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKK21zZ3N0ciAiIgorIlxuIgorIiogRmljaGllciBzdWl2aSByYWNjb3VyY2lzIGljaSBkZSAlcy5cbiIKKyIqIFBvdXIgdm9pciBsZSBmaWNoaWVyIGVudGllciwgdXRpbGlzZXogdW4gw6lkaXRldXIgZXh0ZXJuZS5cbiIKKworIzogbGliL2RpZmYudGNsOjQ4MgorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICLDiWNoZWMgbG9ycyBkZSBsYSBkw6lzaW5kZXhhdGlvbiBkZSBsYSBzZWN0aW9uIHPDqWxlY3Rpb25uw6llLiIKKworIzogbGliL2RpZmYudGNsOjQ4OQorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAiw4ljaGVjIGxvcnMgZGUgbCdpbmRleGF0aW9uIGRlIGxhIHNlY3Rpb24uIgorCisjOiBsaWIvZGlmZi50Y2w6NTY4Cittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIsOJY2hlYyBsb3JzIGRlIGxhIGTDqXNpbmRleGF0aW9uIGRlIGxhIGxpZ25lIHPDqWxlY3Rpb25uw6llLiIKKworIzogbGliL2RpZmYudGNsOjU3NgorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiw4ljaGVjIGxvcnMgZGUgbCdpbmRleGF0aW9uIGRlIGxhIGxpZ25lLiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDMKK21zZ2lkICJEZWZhdWx0IgorbXNnc3RyICJEw6lmYXV0IgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN5c3RlbSAoJXMpIgorbXNnc3RyICJTeXN0w6htZSAoJXMpIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQorbXNnaWQgIk90aGVyIgorbXNnc3RyICJBdXRyZSIKKworIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNAorbXNnaWQgImVycm9yIgorbXNnc3RyICJlcnJldXIiCisKKyM6IGxpYi9lcnJvci50Y2w6MzYKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICJhdHRlbnRpb24iCisKKyM6IGxpYi9lcnJvci50Y2w6OTQKK21zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgorbXNnc3RyICJWb3VzIGRldmV6IGNvcnJpZ2VyIGxlcyBlcnJldXJzIHN1aXZhbnRlcyBhdmFudCBkZSBwb3V2b2lyIGNvbW1pdGVyLiIKKworIzogbGliL2luZGV4LnRjbDo2Cittc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqXZlcnJvdWlsbGVyIGwnaW5kZXguIgorCisjOiBsaWIvaW5kZXgudGNsOjE1Cittc2dpZCAiSW5kZXggRXJyb3IiCittc2dzdHIgIkVycmV1ciBkZSBsJ2luZGV4IgorCisjOiBsaWIvaW5kZXgudGNsOjE3Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIiIKKyLDiWNoZWMgZGUgbGEgbWlzZSDDoCBqb3VyIGRlIGwnaW5kZXguIFVuZSByZXN5bmNocm9uaXNhdGlvbiB2YSDDqnRyZSBsYW5jw6llICIKKyJhdXRvbWF0aXF1ZW1lbnQuIgorCisjOiBsaWIvaW5kZXgudGNsOjI4Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkNvbnRpbnVlciIKKworIzogbGliL2luZGV4LnRjbDozMQorbXNnaWQgIlVubG9jayBJbmRleCIKK21zZ3N0ciAiRMOpdmVycm91aWxsZXIgbCdpbmRleCIKKworIzogbGliL2luZGV4LnRjbDoyODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgIkTDqXNpbmRleGF0aW9uIGRlIDogJXMiCisKKyM6IGxpYi9pbmRleC50Y2w6MzI4Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAiUHLDqnQgw6Agw6p0cmUgY29tbWl0w6kuIgorCisjOiBsaWIvaW5kZXgudGNsOjM0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiQWpvdXQgZGUgJXMiCisKKyM6IGxpYi9pbmRleC50Y2w6Mzk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgIkFubnVsZXIgbGVzIG1vZGlmaWNhdGlvbnMgZGFucyBsZSBmaWNoaWVyICVzID8gIgorCisjOiBsaWIvaW5kZXgudGNsOjQwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKK21zZ3N0ciAiQW5udWxlciBsZXMgbW9kaWZpY2F0aW9ucyBkYW5zIGNlcyAlaSBmaWNoaWVycyA/IgorCisjOiBsaWIvaW5kZXgudGNsOjQwOAorbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKK21zZ3N0ciAiIgorIlRvdXRlcyBsZXMgbW9kaWZpY2F0aW9ucyBub24taW5kZXjDqWVzIHNlcm9udCBkw6lmaW5pdGl2ZW1lbnQgcGVyZHVlcyBwYXIgIgorImwnYW5udWxhdGlvbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6NDExCittc2dpZCAiRG8gTm90aGluZyIKK21zZ3N0ciAiTmUgcmllbiBmYWlyZSIKKworIzogbGliL2luZGV4LnRjbDo0MjkKK21zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCittc2dzdHIgIkFubnVsZXIgbW9kaWZpY2F0aW9ucyBkYW5zIGZpY2hpZXJzIHNlbGVjdGlvbm7DqXMiCisKKyM6IGxpYi9pbmRleC50Y2w6NDMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nICVzIgorbXNnc3RyICJBbm51bGF0aW9uIGRlcyBtb2RpZmljYXRpb25zIGRhbnMgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMKK21zZ2lkICIiCisiQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGZ1c2lvbm5lciBwZW5kYW50IHVuZSBjb3JyZWN0aW9uLlxuIgorIlxuIgorIlZvdXMgZGV2ZXogZmluaXIgZGUgY29ycmlnZXIgY2UgY29tbWl0IGF2YW50IGRlIGxhbmNlciB1bmUgcXVlbGNvbnF1ZSAiCisiZnVzaW9uLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJMJ8OpdGF0IGxvcnMgZGUgbGEgZGVybmnDqHJlIHN5bmNocm9uaXNhdGlvbiBuZSBjb3JyZXNwb25kIHBsdXMgw6AgbCfDqXRhdCBkdSAiCisiZMOpcMO0dC5cbiIKKyJcbiIKKyJVbiBhdXRyZSBwcm9ncmFtbWUgR2l0IGEgbW9kaWZpw6kgY2UgZMOpcMO0dCBkZXB1aXMgbGEgZGVybmnDqHJlICIKKyJzeW5jaHJvbmlzYXRpb24uIFVuZSByZXN5bmNocm9uaXNhdGlvbiBkb2l0IMOqdHJlIGVmZmVjdHXDqWUgYXZhbnQgZGUgcG91dm9pciAiCisiZnVzaW9ubmVyIGRlIG5vdXZlYXUuXG4iCisiXG4iCisiQ2VsYSB2YSDDqnRyZSBmYWl0IHRvdXQgZGUgc3VpdGUgYXV0b21hdGlxdWVtZW50XG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCisiXG4iCisiWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCisibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorbXNnc3RyICIiCisiVm91cyDDqnRlcyBhdSBtaWxpZXUgZCd1bmUgZnVzaW9uIGNvbmZsaWN0dWVsbGUuXG4iCisiXG4iCisiTGUgZmljaGllciAlcyBhIGRlcyBjb25mbGljdHMgZGUgZnVzaW9uLlxuIgorIlxuIgorIlZvdXMgZGV2ZXogbGVzIHLDqXNvdWRyZSwgcHVpcyBpbmRleGVyIGxlIGZpY2hpZXIsIGV0IGVuZmluIGNvbW1pdGVyIHBvdXIgIgorInRlcm1pbmVyIGxhIGZ1c2lvbiBjb3VyYW50ZS4gU2V1bGVtZW50IMOgIGNlIG1vbWVudCBsw6Agc2VyYS10LWlsIHBvc3NpYmxlICIKKyJkJ2VmZmVjdHVlciB1bmUgbm91dmVsbGUgZnVzaW9uLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKKyJcbiIKKyJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgorIlxuIgorIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgorIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKK21zZ3N0ciAiIgorIlZvdXMgw6p0ZXMgYXUgbWlsaWV1IGQndW5lIG1vZGlmaWNhdGlvbi5cbiIKKyJcbiIKKyJMZSBmaWNoaWVyICVzIGEgw6l0w6kgbW9kaWZpw6kuXG4iCisiXG4iCisiVm91cyBkZXZyaWV6IHRlcm1pbmVyIGxlIGNvbW1pdCBjb3VyYW50IGF2YW50IGRlIGxhbmNlciB1bmUgZnVzaW9uLiBFbiAiCisiZmFpc2FpdCBjb21tZSBjZWxhLCB2b3VzIMOpdml0ZXJleiBkZSBkZXZvaXIgw6l2ZW50dWVsbGVtZW50IGFiYW5kb25uZXIgdW5lICIKKyJmdXNpb24gYXlhbnQgw6ljaG91w6kuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzIGRlICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjEyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgorbXNnc3RyICJGdXNpb24gZGUgJXMgZXQgJXMuLi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMxCittc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCittc2dzdHIgIkxhIGZ1c2lvbiBzJ2VzdCBmYWl0ZSBhdmVjIHN1Y2PDqHMuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMworbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICJMYSBmdXNpb24gYSBlY2hvdcOpLiBJbCBlc3QgbsOpY2Vzc2FpcmUgZGUgcsOpc291ZHJlIGxlcyBjb25mbGl0cy4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2UgSW50byAlcyIKK21zZ3N0ciAiRnVzaW9uIGRhbnMgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTc3Cittc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCittc2dzdHIgIlLDqXZpc2lvbiDDoCBmdXNpb25uZXIiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjEyCittc2dpZCAiIgorIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGQnYWJhbmRvbm5lciBlbiBjb3VycyBkZSBjb3JyZWN0aW9uLlxuIgorIlxuIgorIlZvdXMgZGV2ZXogZmluaXIgZGUgY29ycmlnZXIgY2UgY29tbWl0LlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyMgorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorIkFiYW5kb25uZXIgbGEgZnVzaW9uID9cbiIKKyJcbiIKKyJBYmFuZG9ubmVyIGxhIGZ1c2lvbiBjb3VyYW50ZSBlbnRyYWluZXJhIGxhIHBlcnRlIGRlIFRPVVRFUyBsZXMgIgorIm1vZGlmaWNhdGlvbnMgbm9uIGNvbW1pdMOpZXMuXG4iCisiXG4iCisiQWJhbmRvbm5lciBxdWFuZCBtw6ptZSBsYSBmdXNpb24gY291cmFudGUgPyIKKworIzogbGliL21lcmdlLnRjbDoyMjgKK21zZ2lkICIiCisiUmVzZXQgY2hhbmdlcz9cbiIKKyJcbiIKKyJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCittc2dzdHIgIiIKKyJSw6lpbml0aWFsaXNlciBsZXMgbW9kaWZpY2F0aW9ucyA/XG4iCisiXG4iCisiUsOpaW5pdGlhbGlzZXIgbGVzIG1vZGlmaWNhdGlvbnMgdmEgZmFpcmUgcGVyZHJlIFRPVVRFUyBsZXMgbW9kaWZpY2F0aW9ucyBub24gIgorImNvbW1pdMOpZXMuXG4iCisiXG4iCisiUsOpaW5pdGlhbGlzZXIgcXVhbmQgbcOqbWUgbGVzIG1vZGlmaWNhdGlvbnMgY291cmFudGVzID8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiQWJvcnRpbmciCittc2dzdHIgIkFiYW5kb24iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiZmlsZXMgcmVzZXQiCittc2dzdHIgImZpY2hpZXJzIHLDqWluaXRpYWxpc8OpcyIKKworIzogbGliL21lcmdlLnRjbDoyNjcKK21zZ2lkICJBYm9ydCBmYWlsZWQuIgorbXNnc3RyICJMJ2FiYW5kb24gYSDDqWNob3XDqS4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY5Cittc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgorbXNnc3RyICJBYmFuZG9uIHRlbWluw6kuIFByw6p0LiIKKworIzogbGliL21lcmdldG9vbC50Y2w6OAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIGJhc2UgdmVyc2lvbj8iCittc2dzdHIgIkZvcmNlciBsYSByw6lzb2x1dGlvbiDDoCBsYSB2ZXJzaW9uIGRlIGJhc2UgPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6OQorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhpcyBicmFuY2g/IgorbXNnc3RyICJGb3JjZXIgbGEgcsOpc29sdXRpb24gw6AgY2V0dGUgYnJhbmNoZSA/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCittc2dzdHIgIkZvcmNlciBsYSByw6lzb2x1dGlvbiDDoCBsJ2F1dHJlIGJyYW5jaGUgPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKyJOb3RlciBxdWUgbGUgZGlmZiBuZSBtb250cmUgcXVlIGxlcyBtb2RpZmljYXRpb25zIGVuIGNvbmZsaXQuXG4iCisiXG4iCisiJXMgc2VyYSDDqWNyYXPDqS5cbiIKKyJcbiIKKyJDZXR0ZSBvcMOpcmF0aW9uIG5lIHBldXQgw6p0cmUgaW52ZXJzw6llIHF1J2VuIHJlbGFuw6dhbnQgbGEgZnVzaW9uLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKK21zZ3N0ciAiIgorIkxlIGZpY2hpZXIgJXMgc2VtYmxlIGF2b2lyIGRlcyBjb25mbGl0cyBub24gcsOpc29sdXMsIGluZGV4ZXIgcXVhbmQgbcOqbWUgPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6NjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgcmVzb2x1dGlvbiBmb3IgJXMiCittc2dzdHIgIkFqb3V0ZXIgdW5lIHLDqXNvbHV0aW9uIHBvdXIgJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQorbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKK21zZ3N0ciAiIgorIkltcG9zc2libGUgZGUgcsOpc291ZHJlIGxhIHN1cHByZXNzaW9uIG91IGRlIHJlbGllciBkZXMgY29uZmxpdHMgZW4gdXRpbGlzYW50ICIKKyJ1biBvdXRpbCIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Cittc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiTGUgZmljaGllciBlbiBjb25mbGl0IG4nZXhpc3RlIHBhcy4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBvdXRpbCBncmFwaGlxdWUgcG91ciBmdXNpb25uZXIgZGVzIGZpY2hpZXJzLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICJPdXRpbCBkZSBmdXNpb24gJyVzJyBub24gc3VwcG9ydMOpIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMDMKK21zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKK21zZ3N0ciAiTCdvdXRpbCBkZSBmdXNpb24gdG91cm5lIGTDqWrDoCwgZmF1dC1pbCBsZSB0ZXJtaW5lciA/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkVycmV1ciBsb3JzIGRlIGxhIHLDqWN1cMOpcmF0aW9uIGRlcyB2ZXJzaW9ucyA6XG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGxhbmNlciBsJ291dGlsIGRlIGZ1c2lvbiA6XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0NworbXNnaWQgIlJ1bm5pbmcgbWVyZ2UgdG9vbC4uLiIKK21zZ3N0ciAiTGFuY2VtZW50IGRlIGwnb3V0aWwgZGUgZnVzaW9uLi4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNzUgbGliL21lcmdldG9vbC50Y2w6MzgzCittc2dpZCAiTWVyZ2UgdG9vbCBmYWlsZWQuIgorbXNnc3RyICJMJ291dGlsIGRlIGZ1c2lvbiBhIMOpY2hvdcOpLiIKKworIzogbGliL29wdGlvbi50Y2w6MTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgorbXNnc3RyICJDb2RhZ2UgZ2xvYmFsICclcycgaW52YWxpZGUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXBvIGVuY29kaW5nICclcyciCittc2dzdHIgIkNvZGFnZSBkZSBkw6lww7R0ICclcycgaW52YWxpZGUiCisKKyM6IGxpYi9vcHRpb24udGNsOjExNworbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgIlJlbWV0dHJlIGxlcyB2YWxldXJzIHBhciBkw6lmYXV0IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjEKK21zZ2lkICJTYXZlIgorbXNnc3RyICJTYXV2ZWdhcmRlciIKKworIzogbGliL29wdGlvbi50Y2w6MTMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgUmVwb3NpdG9yeSIKK21zZ3N0ciAiRMOpcMO0dCA6ICVzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzIKK21zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgorbXNnc3RyICJHbG9iYWxlcyAodG91cyBsZXMgZMOpcMO0dHMpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzgKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgIk5vbSBkJ3V0aWxpc2F0ZXVyIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzkKK21zZ2lkICJFbWFpbCBBZGRyZXNzIgorbXNnc3RyICJBZHJlc3NlIGVtYWlsIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDEKK21zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKK21zZ3N0ciAiUsOpc3VtZXIgbGVzIGNvbW1pdHMgZGUgZnVzaW9uIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDIKK21zZ2lkICJNZXJnZSBWZXJib3NpdHkiCittc2dzdHIgIkZ1c2lvbiBiYXZhcmRlIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDMKK21zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgorbXNnc3RyICJNb250cmVyIHN0YXRpc3RpcXVlcyBkZSBkaWZmIGFwcsOocyBmdXNpb24iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NAorbXNnaWQgIlVzZSBNZXJnZSBUb29sIgorbXNnc3RyICJVdGlsaXNlciBvdXRpbCBkZSBmdXNpb24iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NgorbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCittc2dzdHIgIkZhaXJlIGNvbmZpYW5jZSBhdXggZGF0ZXMgZGUgbW9kaWZpY2F0aW9uIGRlIGZpY2hpZXJzICIKKworIzogbGliL29wdGlvbi50Y2w6MTQ3Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICJQdXJnZXIgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIHBlbmRhbnQgbGEgcsOpY3Vww6lyYXRpb24iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgorbXNnc3RyICJGYWlyZSBjb3JyZXNwb25kcmUgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDkKK21zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKK21zZ3N0ciAiQW5ub3RlciBsZXMgY29waWVzIHNldWxlbWVudCBzdXIgZmljaGllcnMgbW9kaWZpw6lzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAiTWluaW11bSBkZSBjYXJhdMOocmVzIHBvdXIgYW5ub3RlciB1bmUgY29waWUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MQorbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgorbXNnc3RyICJEaXN0YW5jZSBkZSBibMOibWUgZGFucyBsJ2hpc3RvcmlxdWUgKGpvdXJzKSIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAiTm9tYnJlIGRlIGxpZ25lcyBkZSBjb250ZXh0ZSBkYW5zIGxlcyBkaWZmcyIKKworIzogbGliL29wdGlvbi50Y2w6MTUzCittc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKK21zZ3N0ciAiTGFyZ2V1ciBkdSB0ZXh0ZSBkZSBtZXNzYWdlIGRlIGNvbW1pdCIKKworIzogbGliL29wdGlvbi50Y2w6MTU0Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJOb3V2ZWF1IG1vZMOobGUgZGUgbm9tIGRlIGJyYW5jaGUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NQorbXNnaWQgIkRlZmF1bHQgRmlsZSBDb250ZW50cyBFbmNvZGluZyIKK21zZ3N0ciAiQ29kYWdlIGR1IGNvbnRlbnUgZGVzIGZpY2hpZXJzIHBhciBkw6lmYXV0IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMDMKK21zZ2lkICJDaGFuZ2UiCittc2dzdHIgIk1vZGlmaWVyIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMzAKK21zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKK21zZ3N0ciAiRGljdGlvbm5haXJlIGQnb3J0aG9ncmFwaGUgOiIKKworIzogbGliL29wdGlvbi50Y2w6MjU0Cittc2dpZCAiQ2hhbmdlIEZvbnQiCittc2dzdHIgIk1vZGlmaWVyIGxlcyBwb2xpY2VzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgIkNob2lzaXIgJXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjI2NAorbXNnaWQgInB0LiIKK21zZ3N0ciAicHQuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNzgKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHLDqWbDqXJlbmNlcyIKKworIzogbGliL29wdGlvbi50Y2w6MzE0Cittc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKK21zZ3N0ciAiTGEgc2F1dmVnYXJkZSBjb21wbMOodGUgZGVzIG9wdGlvbnMgYSDDqWNob3XDqSA6IgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjMKK21zZ2lkICJSZW1vdmUgUmVtb3RlIgorbXNnc3RyICJTdXBwcmltZXIgdW4gZMOpcMO0dCBkaXN0YW50IgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjgKK21zZ2lkICJQcnVuZSBmcm9tIgorbXNnc3RyICJQdXJnZXIgZGUiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE3MworbXNnaWQgIkZldGNoIGZyb20iCittc2dzdHIgIlLDqWN1cMOpcmVyIGRlIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMTUKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICJQb3Vzc2VyIHZlcnMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxOQorbXNnaWQgIkFkZCBSZW1vdGUiCittc2dzdHIgIkFqb3V0ZXIgdW4gZMOpcMO0dCBkaXN0YW50IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjQKK21zZ2lkICJBZGQgTmV3IFJlbW90ZSIKK21zZ3N0ciAiQWpvdXRlciB1biBub3V2ZWF1IGTDqXDDtHQgZGlzdGFudCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI4IGxpYi90b29sc19kbGcudGNsOjM2Cittc2dpZCAiQWRkIgorbXNnc3RyICJBam91dGVyIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzcKK21zZ2lkICJSZW1vdGUgRGV0YWlscyIKK21zZ3N0ciAiRMOpdGFpbHMgZGVzIGTDqXDDtHRzIGRpc3RhbnRzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgIkVtcGxhY2VtZW50IDoiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MgorbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgorbXNnc3RyICJBY3Rpb24gc3VwcGzDqW1lbnRhaXJlIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiUsOpY3Vww6lyZXIgaW1tw6lkaWF0ZW1lbnQiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3MQorbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCittc2dzdHIgIkluaXRpYWxpc2VyIHVuIGTDqXDDtHQgZGlzdGFudCBldCBwb3Vzc2VyIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzcKK21zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgorbXNnc3RyICJOZSByaWVuIGZhaXJlIGQnYXV0cmUgbWFpbnRlbmFudCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCittc2dzdHIgIk1lcmNpIGRlIGZvdXJuaXIgdW4gbm9tIGRlIGTDqXDDtHQgZGlzdGFudC4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW4gbm9tIGRlIGTDqXDDtHQgZGlzdGFudCBhY2NlcHRhYmxlLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCittc2dzdHIgIsOJY2hlYyBkZSBsJ2Fqb3V0IGR1IGTDqXDDtHQgZGlzdGFudCAnJXMnIMOgIGwnZW1wbGFjZW1lbnQgJyVzJy4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMgbGliL3RyYW5zcG9ydC50Y2w6NgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZldGNoICVzIgorbXNnc3RyICJyw6ljdXDDqXJlciAlcyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHRoZSAlcyIKK21zZ3N0ciAiUsOpY3Vww6lyYXRpb24gZGUgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorbXNnc3RyICJQYXMgZGUgbcOpdGhvZGUgY29ubnVlIHBvdXIgaW5pdGlhbGlzZXIgbGUgZMOpcMO0dCDDoCBsJ2VtcGxhY2VtZW50ICclcycuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzIGxpYi90cmFuc3BvcnQudGNsOjI1IGxpYi90cmFuc3BvcnQudGNsOjYzCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgInB1c2ggJXMiCittc2dzdHIgInBvdXNzZXIgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgorbXNnc3RyICJNaXNlIGVuIHBsYWNlIGRlICVzICjDoCAlcykiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozNAorbXNnaWQgIkRlbGV0ZSBCcmFuY2ggUmVtb3RlbHkiCittc2dzdHIgIlN1cHByaW1lciB1bmUgYnJhbmNoZSDDoCBkaXN0YW5jZSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0NworbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKK21zZ3N0ciAiRMOpcMO0dCBzb3VyY2UiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTAgbGliL3RyYW5zcG9ydC50Y2w6MTM0Cittc2dpZCAiUmVtb3RlOiIKK21zZ3N0ciAiQnJhbmNoZSBkaXN0YW50ZSA6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQorbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCittc2dzdHIgIkVtcGxhY2VtZW50IGFyYml0cmFpcmUgOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4NAorbXNnaWQgIkJyYW5jaGVzIgorbXNnc3RyICJCcmFuY2hlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDkKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAiU3VwcHJpbWVyIHNldWxlbWVudCBzaSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTEKK21zZ2lkICJNZXJnZWQgSW50bzoiCittc2dzdHIgIkZ1c2lvbm7DqSBkYW5zIDoiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUyCittc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgorbXNnc3RyICJVbmUgYnJhbmNoZSBlc3QgbsOpY2Vzc2FpcmUgcG91ciAnRnVzaW9ubsOpIGRhbnMnLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCisiXG4iCisiIC0gJXMiCittc2dzdHIgIiIKKyJMZXMgYnJhbmNoZXMgc3VpdmFudGVzIG5lIHNvbnQgcGFzIGNvbXBsw6h0ZW1lbnQgZnVzaW9ubsOpZXMgZGFucyAlcyA6XG4iCisiXG4iCisiIC0gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisiVW4gb3UgcGx1c2lldXJzIGRlcyB0ZXN0cyBkZSBmdXNpb24gb250IMOpY2hvdcOpIHBhcmNlIHF1ZSB2b3VzIG4nYXZleiBwYXMgIgorInLDqWN1cMOpcsOpIGxlcyBjb21taXRzIG7DqWNlc3NhaXJlcy4gRXNzYXlleiBkZSByw6ljdXDDqXJlciDDoCBwYXJ0aXIgZGUgJXMgIgorImQnYWJvcmQuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNworbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKK21zZ3N0ciAiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciB1bmUgb3UgcGx1c2lldXJzIGJyYW5jaGVzIMOgIHN1cHByaW1lci4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGVzIGJyYW5jaGVzIGRlICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgorbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgorbXNnc3RyICJBdWN1biBkw6lww7R0IG4nZXN0IHPDqWxlY3Rpb25uw6kuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nICVzLi4uIgorbXNnc3RyICJTeW5jaHJvbmlzYXRpb24gZGUgJXMuLi4iCisKKyM6IGxpYi9zZWFyY2gudGNsOjIxCittc2dpZCAiRmluZDoiCittc2dzdHIgIkNoZXJjaGVyIDoiCisKKyM6IGxpYi9zZWFyY2gudGNsOjIzCittc2dpZCAiTmV4dCIKK21zZ3N0ciAiU3VpdmFudCIKKworIzogbGliL3NlYXJjaC50Y2w6MjQKK21zZ2lkICJQcmV2IgorbXNnc3RyICJQcsOpY8OpZGVudCIKKworIzogbGliL3NlYXJjaC50Y2w6MjUKK21zZ2lkICJDYXNlLVNlbnNpdGl2ZSIKK21zZ3N0ciAiU2Vuc2libGUgw6AgbGEgY2Fzc2UiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgorbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGxlIHJhY2NvdXJjaSA6IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjEzNworbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ8OpY3JpcmUgbCdpY8O0bmUgOiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Cittc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiVsOpcmlmaWNhdGV1ciBkJ29ydGhvZ3JhcGhlIG5vbiBzdXBwb3J0w6kiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJMYSB2w6lyaWZpY2F0aW9uIGQnb3J0aG9ncmFwaGUgbidlc3QgcGFzIGRpc3BvbmlibGUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiQ29uZmlndXJhdGlvbiBkZSB2w6lyaWZpY2F0aW9uIGQnb3J0aG9ncmFwaGUgaW52YWxpZGUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzYXRpb24gZHUgZGljdGlvbm5haXJlIMOgICVzLiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjczCittc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKK21zZ3N0ciAiTGEgdsOpcmlmaWNhdGlvbiBkJ29ydGhvZ3JhcGhlIGEgw6ljaG91w6kgc2lsZW5jaWV1c2VtZW50IGF1IGTDqW1hcnJhZ2UiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAorbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJWw6lyaWZpY2F0ZXVyIGQnb3J0aG9ncmFwaGUgbm9uIHJlY29ubnUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKK21zZ2lkICJObyBTdWdnZXN0aW9ucyIKK21zZ3N0ciAiQXVjdW5lIHN1Z2dlc3Rpb24iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKK21zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIkVPRiBpbmF0dGVuZHVlIGVudm95w6llIHBhciBsZSB2w6lyaWZpY2F0ZXVyIGQnb3J0aG9ncmFwaGUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKK21zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKK21zZ3N0ciAiTGUgdsOpcmlmaWNhdGV1ciBkJ29ydGhvZ3JhcGhlIGEgw6ljaG91w6kiCisKKyM6IGxpYi9zc2hrZXkudGNsOjMxCittc2dpZCAiTm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIkF1Y3VuZSBjbMOpIHRyb3V2w6llLiIKKworIzogbGliL3NzaGtleS50Y2w6MzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgorbXNnc3RyICJDbMOpIHB1YmxpcXVlIHRyb3V2w6llIGRhbnMgOiAlcyIKKworIzogbGliL3NzaGtleS50Y2w6NDAKK21zZ2lkICJHZW5lcmF0ZSBLZXkiCittc2dzdHIgIkfDqW7DqXJlciB1bmUgY2zDqSIKKworIzogbGliL3NzaGtleS50Y2w6NTYKK21zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKK21zZ3N0ciAiQ29waWVyIGRhbnMgbGUgcHJlc3NlLXBhcGllciIKKworIzogbGliL3NzaGtleS50Y2w6NzAKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAiVm90cmUgY2zDqSBwdWJsaXF1ZSBPcGVuU1NIIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3OAorbXNnaWQgIkdlbmVyYXRpbmcuLi4iCittc2dzdHIgIkfDqW7DqXJhdGlvbi4uLiIKKworIzogbGliL3NzaGtleS50Y2w6ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGxhbmNlciBzc2gta2V5Z2VuIDpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3NzaGtleS50Y2w6MTExCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICJMYSBnw6luw6lyYXRpb24gYSDDqWNob3XDqS4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjExOAorbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIkxhIGfDqW7DqXJhdGlvbiBhIHLDqXVzc2ksIG1haXMgYXVjdW5lIGNsw6kgbidhIMOpdMOpIHRyb3V2w6llLiIKKworIzogbGliL3NzaGtleS50Y2w6MTIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgorbXNnc3RyICJWb3RyZSBjbMOpIGVzdCBkYW5zIDogJXMiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiVzIC4uLiAlKmkgZGUgJSppICVzICglM2klJSkiCisKKyM6IGxpYi90b29scy50Y2w6NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgIkxhbmNlciAlcyBuw6ljZXNzaXRlIHF1J3VuIGZpY2hpZXIgc29pdCBzw6lsZWN0aW9ubsOpLiIKKworIzogbGliL3Rvb2xzLnRjbDo5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBydW4gJXM/IgorbXNnc3RyICLDinRlcy12b3VzIHPDu3IgZGUgdm91bG9pciBsYW5jZXIgJXMgPyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sOiAlcyIKK21zZ3N0ciAiT3V0aWwgOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAiTGFuY2VtZW50IGRlIDogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKK21zZ3N0ciAiTCdvdXRpbCBhIHRlcm1pbsOpIGF2ZWMgc3VjY8OocyA6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKK21zZ3N0ciAiTCdvdXRpbCBhIMOpY2hvdcOpIDogJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIyCittc2dpZCAiQWRkIFRvb2wiCittc2dzdHIgIkFqb3V0ZXIgdW4gb3V0aWwiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI4Cittc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCittc2dzdHIgIkFqb3V0ZXIgdW5lIG5vdXZlbGxlIGNvbW1hbmRlIGQnb3V0aWwiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjMzCittc2dpZCAiQWRkIGdsb2JhbGx5IgorbXNnc3RyICJBam91dGVyIGdsb2JhbGVtZW50IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NQorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAiRMOpdGFpbHMgc3VyIGwnb3V0aWwiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjQ4Cittc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCittc2dzdHIgIlV0aWxpc2VyIGxlcyBzw6lwYXJhdGV1cnMgJy8nIHBvdXIgY3LDqWVyIHVuIGFyYnJlIGRlIHNvdXMtbWVudXMgOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NjEKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiQ29tbWFuZGUgOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzQKK21zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgorbXNnc3RyICJNb250cmVyIHVuZSBib8OudGUgZGUgZGlhbG9ndWUgYXZhbnQgbGUgbGFuY2VtZW50IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4MAorbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgorbXNnc3RyICIiCisiRGVtYW5kZXIgw6AgbCd1dGlsaXNhdGV1ciBkZSBzw6lsZWN0aW9ubmVyIHVuZSByw6l2aXNpb24gKGNoYW5nZSAkUkVWSVNJT04pIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4NQorbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgorbXNnc3RyICJEZW1hbmRlciDDoCBsJ3V0aWxpc2F0ZXVyIGRlcyBhcmd1bWVudHMgc3VwcGzDqW1lbnRhaXJlcyAoY2hhbmdlICRBUkdTKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTIKK21zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCittc2dzdHIgIk5lIHBhcyBtb250cmVyIGxhIGZlbsOqdHJlIGRlIHNvcnRpZSBkZXMgY29tbWFuZGVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo5NworbXNnaWQgIlJ1biBvbmx5IGlmIGEgZGlmZiBpcyBzZWxlY3RlZCAoJEZJTEVOQU1FIG5vdCBlbXB0eSkiCittc2dzdHIgIkxhbmNlciBzZXVsZW1lbnQgc2kgdW4gZGlmZiBlc3Qgc8OpbGVjdGlvbm7DqSAoJEZJTEVOQU1FIG5vbiB2aWRlKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTIxCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKK21zZ3N0ciAiTWVyY2kgZGUgZm91cm5pciB1biBub20gcG91ciBsJ291dGlsLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiTCdvdXRpbCAnJXMnIGV4aXN0ZSBkw6lqw6AuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFkZCB0b29sOlxuIgorIiVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ2Fqb3V0ZXIgbCdvdXRpbCA6XG4iCisiJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MAorbXNnaWQgIlJlbW92ZSBUb29sIgorbXNnc3RyICJTdXBwcmltZXIgbCdvdXRpbCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk2Cittc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCittc2dzdHIgIlN1cHByaW1lciBkZXMgY29tbWFuZGVzIGQnb3V0aWwiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIwMAorbXNnaWQgIlJlbW92ZSIKK21zZ3N0ciAiU3VwcHJpbWVyIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoTGUgYmxldSBpbmRpcXVlIGRlcyBvdXRpbHMgbG9jYXV4IGF1IGTDqXDDtHQpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW4gQ29tbWFuZDogJXMiCittc2dzdHIgIkxhbmNlciBjb21tYW5kZSA6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMTEKK21zZ2lkICJBcmd1bWVudHMiCittc2dzdHIgIkFyZ3VtZW50cyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQ4Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKK21zZ3N0ciAiUsOpY3Vww6lyYXRpb24gZGVzIGRlcm5pw6hyZXMgbW9kaWZpY2F0aW9ucyBkZSAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCittc2dzdHIgInB1cmdlciDDoCBkaXN0YW5jZSAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKK21zZ3N0ciAiTmV0dG95ZXIgbGVzIGJyYW5jaGVzIGRlIHN1aXZpIHN1cHByaW3DqWVzIGRlICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAiTGVzIG1vZGlmaWNhdGlvbnMgc29udCBwb3Vzc8OpZXMgdmVycyAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCittc2dzdHIgIkR1cGxpcXVlciBkYW5zICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCittc2dzdHIgIlBvdXNzZSAlcyAlcyB2ZXJzICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDAKK21zZ2lkICJQdXNoIEJyYW5jaGVzIgorbXNnc3RyICJQb3Vzc2VyIGJyYW5jaGVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTQKK21zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCittc2dzdHIgIkJyYW5jaGVzIHNvdXJjZSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCittc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKK21zZ3N0ciAiRMOpcMO0dCBkZSBkZXN0aW5hdGlvbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTY5Cittc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkZSB0cmFuc2ZlcnQiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3MQorbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorbXNnc3RyICIiCisiRm9yY2VyIGwnw6ljcmFzZW1lbnQgZCd1bmUgYnJhbmNoZSBleGlzdGFudGUgKHBldXQgc3VwcHJpbWVyIGRlcyAiCisibW9kaWZpY2F0aW9ucykiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3NQorbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgorbXNnc3RyICJVdGlsaXNlciBkZXMgcGV0aXRzIHBhcXVldHMgKHBvdXIgbGVzIGNvbm5leGlvbnMgbGVudGVzKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTc5Cittc2dpZCAiSW5jbHVkZSB0YWdzIgorbXNnc3RyICJJbmNsdXJlIGxlcyBtYXJxdWVzICh0YWdzKSIKKworI34gbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgorI34gbXNnc3RyICJJbXBvc3NpYmxlIGQndXRpbGlzZXIgbGUgcsOpcGVydG9pcmUgLmdpdDoiCisKKyN+IG1zZ2lkICJQcmVmZXJlbmNlcy4uLiIKKyN+IG1zZ3N0ciAiUHLDqWbDqXJlbmNlcy4uLiIKKworI34gbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgdGVzdC4pIgorI34gbXNnc3RyICJUb3Vqb3VycyAoTmUgcGFzIGZhaXJlIGRlIHRlc3QgZGUgZnVzaW9uLikiCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2dpdC1ndWkucG90IGIvZ2l0LWd1aS9wby9naXQtZ3VpLnBvdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzk0ZjljCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9naXQtZ3VpLnBvdApAQCAtMCwwICsxLDIzOTQgQEAKKyMgU09NRSBERVNDUklQVElWRSBUSVRMRS4KKyMgQ29weXJpZ2h0IChDKSBZRUFSIFRIRSBQQUNLQUdFJ1MgQ09QWVJJR0hUIEhPTERFUgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgUEFDS0FHRSBwYWNrYWdlLgorIyBGSVJTVCBBVVRIT1IgPEVNQUlMQEFERFJFU1M+LCBZRUFSLgorIworIywgZnV6enkKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IFBBQ0tBR0UgVkVSU0lPTlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAxNTo0Ny0wODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSStaT05FXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBGVUxMIE5BTUUgPEVNQUlMQEFERFJFU1M+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTEFOR1VBR0UgPExMQGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1DSEFSU0VUXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzkzIGdpdC1ndWkuc2g6ODA3IGdpdC1ndWkuc2g6ODIwIGdpdC1ndWkuc2g6OTAzCisjOiBnaXQtZ3VpLnNoOjkyMgorbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6NzQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDo3NzkKK21zZ2lkICJNYWluIEZvbnQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDo3ODAKK21zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjc5NAorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjgyMQorbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6ODM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIlxuIgorIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCisiXG4iCisiJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgorIlxuIgorIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoxMTI4Cittc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTE0NgorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoxMTU0Cittc2dpZCAiQ2Fubm90IHVzZSBiYXJlIHJlcG9zaXRvcnk6IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTE2MgorbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTMzNCBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNgorbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoxMzkwCittc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjE0NTQKK21zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTQ3MQorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoxNjI5IGxpYi9icm93c2VyLnRjbDoyNDYKK21zZ2lkICJSZWFkeS4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoxNzg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjE5MTMKK21zZ2lkICJVbm1vZGlmaWVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTkxNQorbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1Cittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTkyMAorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTkyMQorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoxOTIzCittc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTkyOAorbXNnaWQgIk1pc3NpbmciCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoxOTI5Cittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTkzMAorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKKyM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTk3MgorbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoxOTg0Cittc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyMDQzCittc2dpZCAiQ291bGRuJ3QgZmluZCBnaXQgZ3VpIGluIFBBVEgiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNDU1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjQ1NgorbXNnaWQgIkVkaXQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNDU4IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNDYxIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDgKK21zZ2lkICJDb21taXRAQG5vdW4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNDY0IGxpYi9tZXJnZS50Y2w6MTIxIGxpYi9tZXJnZS50Y2w6MTUwIGxpYi9tZXJnZS50Y2w6MTY4Cittc2dpZCAiTWVyZ2UiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNDY1IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKK21zZ2lkICJSZW1vdGUiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNDY4Cittc2dpZCAiVG9vbHMiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNDc3Cittc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNDgzCittc2dpZCAiQnJvd3NlIEN1cnJlbnQgQnJhbmNoJ3MgRmlsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNDg3Cittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI0OTIKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjQ5NgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNTA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI1MTAgbGliL2RhdGFiYXNlLnRjbDoyNyBsaWIvZGF0YWJhc2UudGNsOjY3Cittc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI1MTMgbGliL2RhdGFiYXNlLnRjbDozNAorbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjUxNgorbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI1MjMgZ2l0LWd1aS5zaDoyNTI3IGdpdC1ndWkuc2g6MjUzMSBsaWIvc2hvcnRjdXQudGNsOjgKKyM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgorbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCittc2dpZCAiUXVpdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI1NDcKK21zZ2lkICJVbmRvIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjU1MAorbXNnaWQgIlJlZG8iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNTU0IGdpdC1ndWkuc2g6MzEwOQorbXNnaWQgIkN1dCIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI1NTcgZ2l0LWd1aS5zaDozMTEyIGdpdC1ndWkuc2g6MzE4NiBnaXQtZ3VpLnNoOjMyNTkKKyM6IGxpYi9jb25zb2xlLnRjbDo2OQorbXNnaWQgIkNvcHkiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNTYwIGdpdC1ndWkuc2g6MzExNQorbXNnaWQgIlBhc3RlIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjU2MyBnaXQtZ3VpLnNoOjMxMTggbGliL2JyYW5jaF9kZWxldGUudGNsOjI2CisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM4Cittc2dpZCAiRGVsZXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjU2NyBnaXQtZ3VpLnNoOjMxMjIgZ2l0LWd1aS5zaDozMjYzIGxpYi9jb25zb2xlLnRjbDo3MQorbXNnaWQgIlNlbGVjdCBBbGwiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNTc2Cittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjU4MgorbXNnaWQgIkNoZWNrb3V0Li4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjU4OAorbXNnaWQgIlJlbmFtZS4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI1OTMKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNTk4Cittc2dpZCAiUmVzZXQuLi4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNjA4Cittc2dpZCAiRG9uZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI2MTAKK21zZ2lkICJDb21taXRAQHZlcmIiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNjE5IGdpdC1ndWkuc2g6MzA1MAorbXNnaWQgIk5ldyBDb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NworbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjYzNyBnaXQtZ3VpLnNoOjMwMTEgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQorbXNnaWQgIlJlc2NhbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI2NDMKK21zZ2lkICJTdGFnZSBUbyBDb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNjQ5Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI2NjEgbGliL2luZGV4LnRjbDo0MTIKK21zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQorbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjY3MyBnaXQtZ3VpLnNoOjMzMTQgZ2l0LWd1aS5zaDozMzQ1Cittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNjgwIGdpdC1ndWkuc2g6MzAyNCBnaXQtZ3VpLnNoOjMxMzMKK21zZ2lkICJTaWduIE9mZiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI2OTYKK21zZ2lkICJMb2NhbCBNZXJnZS4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI3MDEKK21zZ2lkICJBYm9ydCBNZXJnZS4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI3MTMgZ2l0LWd1aS5zaDoyNzQxCittc2dpZCAiQWRkLi4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MjcxNworbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNzIxCittc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI3MzEgZ2l0LWd1aS5zaDozMjkyCittc2dpZCAiT3B0aW9ucy4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI3NDIKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKK21zZ2lkICJIZWxwIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6Mjc1NSBnaXQtZ3VpLnNoOjI3NTkgbGliL2Fib3V0LnRjbDoxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvdXQgJXMiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNzgzCittc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyNzg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NgorbXNnaWQgIlNob3cgU1NIIEtleSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI4OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI5MjYKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoyOTQ3Cittc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjI5NjcKK21zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzAxNworbXNnaWQgIlN0YWdlIENoYW5nZWQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDozMDM2IGxpYi90cmFuc3BvcnQudGNsOjEwNCBsaWIvdHJhbnNwb3J0LnRjbDoxOTMKK21zZ2lkICJQdXNoIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzA3MQorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzA3MgorbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzA3MworbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDozMDc0Cittc2dpZCAiQW1lbmRlZCBNZXJnZSBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDozMDc1Cittc2dpZCAiTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzA3NgorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MworbXNnaWQgIkNvcHkgQWxsIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzE0OSBsaWIvYmxhbWUudGNsOjEwNAorbXNnaWQgIkZpbGU6IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzI1NQorbXNnaWQgIlJlZnJlc2giCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDozMjc2Cittc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzI4MAorbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMyODggbGliL2JsYW1lLnRjbDoyODEKK21zZ2lkICJFbmNvZGluZyIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMyOTkKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDozMzA0Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzMyMworbXNnaWQgIlJ1biBNZXJnZSBUb29sIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzMyOAorbXNnaWQgIlVzZSBSZW1vdGUgVmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMzMzIKK21zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMzMzYKK21zZ2lkICJSZXZlcnQgVG8gQmFzZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMzNTQKK21zZ2lkICJWaXN1YWxpemUgVGhlc2UgQ2hhbmdlcyBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzM1OAorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDozMzYyCittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzM2NworbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMzODkKK21zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDozMzkxCittc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMzOTMKK21zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDozMzk2Cittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzM5OAorbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDozNDAwCittc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzQyNAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjM1NDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzU3MAorbXNnaWQgIiIKKyJcbiIKKyJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCisiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzU3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCisiaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCisidXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKKyJ+Ly5naXRjb25maWcgZmlsZS5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYWJvdXQudGNsOjI2Cittc2dpZCAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9ibGFtZS50Y2w6NzIKK21zZ2lkICJGaWxlIFZpZXdlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjc4Cittc2dpZCAiQ29tbWl0OiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjI3MQorbXNnaWQgIkNvcHkgQ29tbWl0IgorbXNnc3RyICIiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjc1Cittc2dpZCAiRmluZCBUZXh0Li4uIgorbXNnc3RyICIiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg0Cittc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjI4OAorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICIiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjkxCittc2dpZCAiQmxhbWUgUGFyZW50IENvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjQ1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgJXMuLi4iCittc2dzdHIgIiIKKworIzogbGliL2JsYW1lLnRjbDo1NTcKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjU3NworbXNnaWQgImxpbmVzIGFubm90YXRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjc2OQorbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIiIKKworIzogbGliL2JsYW1lLnRjbDo3NzIKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjgwMgorbXNnaWQgIkJ1c3kiCittc2dzdHIgIiIKKworIzogbGliL2JsYW1lLnRjbDo4MDMKK21zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjg0MgorbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCittc2dzdHIgIiIKKworIzogbGliL2JsYW1lLnRjbDo5MTAKK21zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCittc2dzdHIgIiIKKworIzogbGliL2JsYW1lLnRjbDo5NjMKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICIiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTY3Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjk3MgorbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgorbXNnc3RyICIiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTAyMAorbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjEwNzUKK21zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTAKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCittc2dzdHIgIiIKKworIzogbGliL2JsYW1lLnRjbDoxMDkxIGxpYi9kaWZmLnRjbDozMjAKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICIiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTIzMQorbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgorbXNnc3RyICIiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTIzNworbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICIiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI0MgorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxNCBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxOQorbXNnaWQgIkNoZWNrb3V0IEJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyMworbXNnaWQgIkNoZWNrb3V0IgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcyCisjOiBsaWIvb3B0aW9uLnRjbDoxMjUgbGliL3JlbW90ZV9hZGQudGNsOjMyIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDIKKyM6IGxpYi90b29sc19kbGcudGNsOjQwIGxpYi90b29sc19kbGcudGNsOjIwNCBsaWIvdG9vbHNfZGxnLnRjbDozNTIKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwOAorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6Mjg3IGxpYi90b29sc19kbGcudGNsOjMyOAorbXNnaWQgIlJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM2IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OSBsaWIvb3B0aW9uLnRjbDoyODAKK21zZ2lkICJPcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NAorbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjIKK21zZ2lkICJDcmVhdGUgQnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyNworbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MQorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDAKK21zZ2lkICJCcmFuY2ggTmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMgbGliL3JlbW90ZV9hZGQudGNsOjM5IGxpYi90b29sc19kbGcudGNsOjUwCittc2dpZCAiTmFtZToiCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU4Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Cittc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCittc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1Cittc2dpZCAiTm8iCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjgwCittc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTcxCittc2dpZCAiUmVzZXQiCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1MyBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODYKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNQorbXNnaWQgIkRlbGV0ZSBCcmFuY2giCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIwCittc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzcKK21zZ2lkICJMb2NhbCBCcmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTIKK21zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKK21zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE3Cittc2dpZCAiIgorIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiXG4iCisiRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxNCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjIKK21zZ2lkICJSZW5hbWUgQnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgorbXNnaWQgIlJlbmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKK21zZ2lkICJCcmFuY2g6IgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOQorbXNnaWQgIk5ldyBOYW1lOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NzUKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCittc2dzdHIgIiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MjAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgorbXNnc3RyICIiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICIiCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNgorbXNnaWQgIkZpbGUgQnJvd3NlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTI2IGxpYi9icm93c2VyLnRjbDoxNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nICVzLi4uIgorbXNnc3RyICIiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxODcKK21zZ2lkICJbVXAgVG8gUGFyZW50XSIKK21zZ3N0ciAiIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjY3IGxpYi9icm93c2VyLnRjbDoyNzMKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjgKK21zZ2lkICJCcm93c2UiCittc2dzdHIgIiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCittc2dzdHIgIiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKKyM6IGxpYi9zc2hrZXkudGNsOjUzCittc2dpZCAiQ2xvc2UiCittc2dzdHIgIiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAorbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OQorbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgorbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgorbXNnc3RyICIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NworbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCittc2dzdHIgIiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU1NworbXNnaWQgIlJlY292ZXJpbmcgbG9zdCBjb21taXRzIG1heSBub3QgYmUgZWFzeS4iCittc2dzdHIgIiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAnJXMnPyIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgorInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgorIlxuIgorIlRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgJXMgd2lsbCBub3cgY2xvc2UgYW5kIGdpdmUgdXAuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MzkKK21zZ2lkICJTZWxlY3QiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo1MworbXNnaWQgIkZvbnQgRmFtaWx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzQKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo5MQorbXNnaWQgIkZvbnQgRXhhbXBsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworbXNnaWQgIiIKKyJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKKyJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKK21zZ2lkICJHaXQgR3VpIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODYKK21zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MworbXNnaWQgIk5ldy4uLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MQorbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDYKK21zZ2lkICJDbG9uZS4uLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTYKK21zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTkKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCittc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzOAorbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzA2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzEzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTEKK21zZ2lkICJEaXJlY3Rvcnk6IgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgorbXNnaWQgIkNsb25lIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc5Cittc2dpZCAiU291cmNlIExvY2F0aW9uOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MAorbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCittc2dpZCAiQ2xvbmUgVHlwZToiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDgKK21zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKK21zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjAKK21zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTIKK21zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKK21zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4Cittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDAKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQxCittc2dpZCAiYnVja2V0cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI5Cittc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2Cittc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1OQorbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAorbXNnaWQgIktpQiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTUKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTgKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODY5Cittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCittc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA4Cittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKKyM6IGxpYi9pbmRleC50Y2w6MTk4Cittc2dpZCAiZmlsZXMiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKK21zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKK21zZ2lkICJPcGVuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMQorbXNnaWQgIlJlcG9zaXRvcnk6IgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MworbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjYwCittc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc0Cittc2dpZCAiTG9jYWwgQnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3OQorbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODQgbGliL2Nob29zZV9yZXYudGNsOjUzOAorbXNnaWQgIlRhZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMzOAorbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQ2Cittc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzMQorbXNnaWQgIlVwZGF0ZWQiCittc2dzdHIgIiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjU1OQorbXNnaWQgIlVSTCIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29tbWl0LnRjbDo5Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCisiXG4iCisiWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKKyJ0byBhbWVuZC5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29tbWl0LnRjbDoxOAorbXNnaWQgIiIKKyJDYW5ub3QgYW1lbmQgd2hpbGUgbWVyZ2luZy5cbiIKKyJcbiIKKyJZb3UgYXJlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgdGhhdCBoYXMgbm90IGJlZW4gZnVsbHkgIgorImNvbXBsZXRlZC4gIFlvdSBjYW5ub3QgYW1lbmQgdGhlIHByaW9yIGNvbW1pdCB1bmxlc3MgeW91IGZpcnN0IGFib3J0IHRoZSAiCisiY3VycmVudCBtZXJnZSBhY3Rpdml0eS5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29tbWl0LnRjbDo0OAorbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6ODAKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICIiCisKKyM6IGxpYi9jb21taXQudGNsOjEyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jb21taXQudGNsOjE0OQorbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jb21taXQudGNsOjE4OAorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jb21taXQudGNsOjIwMworbXNnaWQgIiIKKyJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKKyJcbiIKKyItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCisiLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKKyItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MjM0Cittc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MjQ5Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MjcyCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6Mjg3Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MzAwCittc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgorbXNnc3RyICIiCisKKyM6IGxpYi9jb21taXQudGNsOjMxNgorbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgorbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jb21taXQudGNsOjMzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MzM5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jb21taXQudGNsOjM0NgorbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29tbWl0LnRjbDozNjAKK21zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICIiCisKKyM6IGxpYi9jb21taXQudGNsOjM4MQorbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29tbWl0LnRjbDo0NjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCittc2dzdHIgIiIKKworIzogbGliL2NvbnNvbGUudGNsOjU5Cittc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29uc29sZS50Y2w6MTg2Cittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29uc29sZS50Y2w6MjAwCittc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKK21zZ2lkICJOdW1iZXIgb2YgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ0Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NQorbXNnaWQgIk51bWJlciBvZiBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgorbXNnc3RyICIiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OAorbXNnaWQgIlBhY2tlZCBvYmplY3RzIHdhaXRpbmcgZm9yIHBydW5pbmciCittc2dzdHIgIiIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OQorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIiIKKworIzogbGliL2RhdGFiYXNlLnRjbDo3MgorbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogbGliL2RhdGFiYXNlLnRjbDo4MworbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2UuXG4iCisiXG4iCisiQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCittc2dzdHIgIiIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvZGlmZi50Y2w6NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiJXMgaGFzIG5vIGNoYW5nZXMuXG4iCisiXG4iCisiVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgorInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCisidGhlIHNhbWUgc3RhdGUuIgorbXNnc3RyICIiCisKKyM6IGxpYi9kaWZmLnRjbDoxMDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iCittc2dzdHIgIiIKKworIzogbGliL2RpZmYudGNsOjEyNQorbXNnaWQgIiIKKyJMT0NBTDogZGVsZXRlZFxuIgorIlJFTU9URTpcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZGlmZi50Y2w6MTMwCittc2dpZCAiIgorIlJFTU9URTogZGVsZXRlZFxuIgorIkxPQ0FMOlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9kaWZmLnRjbDoxMzcKK21zZ2lkICJMT0NBTDpcbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZGlmZi50Y2w6MTQwCittc2dpZCAiUkVNT1RFOlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9kaWZmLnRjbDoyMDIgbGliL2RpZmYudGNsOjMxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9kaWZmLnRjbDoyMDMKK21zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgorbXNnc3RyICIiCisKKyM6IGxpYi9kaWZmLnRjbDoyMTAKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCittc2dzdHIgIiIKKworIzogbGliL2RpZmYudGNsOjIyMgorbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvZGlmZi50Y2w6MjI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCisiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCittc2dzdHIgIiIKKworIzogbGliL2RpZmYudGNsOjIzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy5cbiIKKyIqIFRvIHNlZSB0aGUgZW50aXJlIGZpbGUsIHVzZSBhbiBleHRlcm5hbCBlZGl0b3IuXG4iCittc2dzdHIgIiIKKworIzogbGliL2RpZmYudGNsOjQ4MgorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICIiCisKKyM6IGxpYi9kaWZmLnRjbDo0ODkKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIiIKKworIzogbGliL2RpZmYudGNsOjU2OAorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICIiCisKKyM6IGxpYi9kaWZmLnRjbDo1NzYKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDMKK21zZ2lkICJEZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3lzdGVtICglcykiCittc2dzdHIgIiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE0Cittc2dpZCAiZXJyb3IiCittc2dzdHIgIiIKKworIzogbGliL2Vycm9yLnRjbDozNgorbXNnaWQgIndhcm5pbmciCittc2dzdHIgIiIKKworIzogbGliL2Vycm9yLnRjbDo5NAorbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCittc2dzdHIgIiIKKworIzogbGliL2luZGV4LnRjbDo2Cittc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGxpYi9pbmRleC50Y2w6MTUKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAiIgorCisjOiBsaWIvaW5kZXgudGNsOjE3Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIiIKKworIzogbGliL2luZGV4LnRjbDoyOAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICIiCisKKyM6IGxpYi9pbmRleC50Y2w6MzEKK21zZ2lkICJVbmxvY2sgSW5kZXgiCittc2dzdHIgIiIKKworIzogbGliL2luZGV4LnRjbDoyODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgIiIKKworIzogbGliL2luZGV4LnRjbDozMjgKK21zZ2lkICJSZWFkeSB0byBjb21taXQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9pbmRleC50Y2w6MzQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9pbmRleC50Y2w6Mzk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgIiIKKworIzogbGliL2luZGV4LnRjbDo0MDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCittc2dzdHIgIiIKKworIzogbGliL2luZGV4LnRjbDo0MDgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKworIzogbGliL2luZGV4LnRjbDo0MTEKK21zZ2lkICJEbyBOb3RoaW5nIgorbXNnc3RyICIiCisKKyM6IGxpYi9pbmRleC50Y2w6NDI5Cittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9pbmRleC50Y2w6NDMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMKK21zZ2lkICIiCisiQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCittc2dzdHIgIiIKKworIzogbGliL21lcmdlLnRjbDoyNworbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZS50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCisiXG4iCisiWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCisibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZS50Y2w6NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhbmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaXMgbW9kaWZpZWQuXG4iCisiXG4iCisiWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyAiCisid2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogbGliL21lcmdlLnRjbDoxMjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMQorbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMzCittc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKworIzogbGliL21lcmdlLnRjbDoxNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBJbnRvICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTc3Cittc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCittc2dzdHIgIiIKKworIzogbGliL21lcmdlLnRjbDoyMTIKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyMgorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyOAorbXNnaWQgIiIKKyJSZXNldCBjaGFuZ2VzP1xuIgorIlxuIgorIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2UudGNsOjIzOQorbXNnaWQgIkFib3J0aW5nIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiZmlsZXMgcmVzZXQiCittc2dzdHIgIiIKKworIzogbGliL21lcmdlLnRjbDoyNjcKK21zZ2lkICJBYm9ydCBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY5Cittc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjgKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjkKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCittc2dzdHIgIiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogbGliL21lcmdldG9vbC50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDEKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSBkZWxldGlvbiBvciBsaW5rIGNvbmZsaWN0cyB1c2luZyBhIHRvb2wiCittc2dzdHIgIiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Cittc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBtZXJnZSB0b29sICclcyciCittc2dzdHIgIiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzAzCittc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCittc2dzdHIgIiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgIiIKKworIzogbGliL21lcmdldG9vbC50Y2w6Mzc1IGxpYi9tZXJnZXRvb2wudGNsOjM4MworbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciCittc2dzdHIgIiIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTcKK21zZ2lkICJSZXN0b3JlIERlZmF1bHRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjEyMQorbXNnaWQgIlNhdmUiCittc2dzdHIgIiIKKworIzogbGliL29wdGlvbi50Y2w6MTMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgUmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzIKK21zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzOAorbXNnaWQgIlVzZXIgTmFtZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzkKK21zZ2lkICJFbWFpbCBBZGRyZXNzIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MQorbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MgorbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKK21zZ3N0ciAiIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDMKK21zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NAorbXNnaWQgIlVzZSBNZXJnZSBUb29sIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NgorbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCittc2dzdHIgIiIKKworIzogbGliL29wdGlvbi50Y2w6MTQ3Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OQorbXNnaWQgIkJsYW1lIENvcHkgT25seSBPbiBDaGFuZ2VkIEZpbGVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MAorbXNnaWQgIk1pbmltdW0gTGV0dGVycyBUbyBCbGFtZSBDb3B5IE9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MQorbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MgorbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCittc2dzdHIgIiIKKworIzogbGliL29wdGlvbi50Y2w6MTUzCittc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKK21zZ3N0ciAiIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTQKK21zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCittc2dzdHIgIiIKKworIzogbGliL29wdGlvbi50Y2w6MTU1Cittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjIwMworbXNnaWQgIkNoYW5nZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMzAKK21zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKK21zZ3N0ciAiIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTQKK21zZ2lkICJDaGFuZ2UgRm9udCIKK21zZ3N0ciAiIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgIiIKKworIzogbGliL29wdGlvbi50Y2w6MjY0Cittc2dpZCAicHQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjI3OAorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjMxNAorbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCittc2dzdHIgIiIKKworIzogbGliL3JlbW90ZS50Y2w6MTYzCittc2dpZCAiUmVtb3ZlIFJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjgKK21zZ2lkICJQcnVuZSBmcm9tIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE3MworbXNnaWQgIkZldGNoIGZyb20iCittc2dzdHIgIiIKKworIzogbGliL3JlbW90ZS50Y2w6MjE1Cittc2dpZCAiUHVzaCB0byIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTkKK21zZ2lkICJBZGQgUmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNAorbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyOCBsaWIvdG9vbHNfZGxnLnRjbDozNgorbXNnaWQgIkFkZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzcKK21zZ2lkICJSZW1vdGUgRGV0YWlscyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgIiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjYyCittc2dpZCAiRnVydGhlciBBY3Rpb24iCittc2dzdHIgIiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjY1Cittc2dpZCAiRmV0Y2ggSW1tZWRpYXRlbHkiCittc2dzdHIgIiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjcxCittc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzcKK21zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDEKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzIGxpYi90cmFuc3BvcnQudGNsOjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmZXRjaCAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorbXNnc3RyICIiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjMgbGliL3RyYW5zcG9ydC50Y2w6MjUgbGliL3RyYW5zcG9ydC50Y2w6NjMKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicHVzaCAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKK21zZ2lkICJSZW1vdGU6IgorbXNnc3RyICIiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NjYgbGliL3RyYW5zcG9ydC50Y2w6MTQ5Cittc2dpZCAiQXJiaXRyYXJ5IExvY2F0aW9uOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg0Cittc2dpZCAiQnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDkKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgorbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKKyJcbiIKKyIgLSAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKKyJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNworbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTIKK21zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nICVzLi4uIgorbXNnc3RyICIiCisKKyM6IGxpYi9zZWFyY2gudGNsOjIxCittc2dpZCAiRmluZDoiCittc2dzdHIgIiIKKworIzogbGliL3NlYXJjaC50Y2w6MjMKK21zZ2lkICJOZXh0IgorbXNnc3RyICIiCisKKyM6IGxpYi9zZWFyY2gudGNsOjI0Cittc2dpZCAiUHJldiIKK21zZ3N0ciAiIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyNQorbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgorbXNnc3RyICIiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgorbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCittc2dzdHIgIiIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoxMzcKK21zZ2lkICJDYW5ub3Qgd3JpdGUgaWNvbjoiCittc2dzdHIgIiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Cittc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NjUKK21zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKK21zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgorbXNnc3RyICIiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MworbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCittc2dzdHIgIiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgorbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgorbXNnc3RyICIiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKK21zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM5MgorbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGxpYi9zc2hrZXkudGNsOjMxCittc2dpZCAiTm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIiIKKworIzogbGliL3NzaGtleS50Y2w6MzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9zc2hrZXkudGNsOjQwCittc2dpZCAiR2VuZXJhdGUgS2V5IgorbXNnc3RyICIiCisKKyM6IGxpYi9zc2hrZXkudGNsOjU2Cittc2dpZCAiQ29weSBUbyBDbGlwYm9hcmQiCittc2dzdHIgIiIKKworIzogbGliL3NzaGtleS50Y2w6NzAKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAiIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3OAorbXNnaWQgIkdlbmVyYXRpbmcuLi4iCittc2dzdHIgIiIKKworIzogbGliL3NzaGtleS50Y2w6ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKworIzogbGliL3NzaGtleS50Y2w6MTExCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICIiCisKKyM6IGxpYi9zc2hrZXkudGNsOjExOAorbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIiIKKworIzogbGliL3NzaGtleS50Y2w6MTIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiIKKworIzogbGliL3Rvb2xzLnRjbDo3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvdG9vbHMudGNsOjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCittc2dzdHIgIiIKKworIzogbGliL3Rvb2xzLnRjbDoxMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvdG9vbHMudGNsOjExMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmc6ICVzIgorbXNnc3RyICIiCisKKyM6IGxpYi90b29scy50Y2w6MTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvdG9vbHMudGNsOjE1MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorbXNnaWQgIkFkZCBUb29sIgorbXNnc3RyICIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI4Cittc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCittc2dzdHIgIiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzMKK21zZ2lkICJBZGQgZ2xvYmFsbHkiCittc2dzdHIgIiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDUKK21zZ2lkICJUb29sIERldGFpbHMiCittc2dzdHIgIiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDgKK21zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKK21zZ3N0ciAiIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo2MQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjc0Cittc2dpZCAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyIKK21zZ3N0ciAiIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4MAorbXNnaWQgIkFzayB0aGUgdXNlciB0byBzZWxlY3QgYSByZXZpc2lvbiAoc2V0cyAkUkVWSVNJT04pIgorbXNnc3RyICIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjg1Cittc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCittc2dzdHIgIiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTIKK21zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCittc2dzdHIgIiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTcKK21zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgorbXNnc3RyICIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjEyMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCittc2dzdHIgIiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFkZCB0b29sOlxuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MAorbXNnaWQgIlJlbW92ZSBUb29sIgorbXNnc3RyICIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5NgorbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgorbXNnc3RyICIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIwMAorbXNnaWQgIlJlbW92ZSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMTEKK21zZ2lkICJBcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQ4Cittc2dpZCAiT0siCittc2dzdHIgIiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCittc2dzdHIgIiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCittc2dzdHIgIiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTAwCittc2dpZCAiUHVzaCBCcmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTQKK21zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCittc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjkKK21zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3MQorbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorbXNnc3RyICIiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3NQorbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgorbXNnc3RyICIiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3OQorbXNnaWQgIkluY2x1ZGUgdGFncyIKK21zZ3N0ciAiIgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9nbG9zc2FyeS9NYWtlZmlsZSBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5YWEyZQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACitQT19URU1QTEFURSA9IGdpdC1ndWktZ2xvc3NhcnkucG90CisKK0FMTF9QT0ZJTEVTID0gJCh3aWxkY2FyZCAqLnBvKQorCiskKFBPX1RFTVBMQVRFKTogJChzdWJzdCAucG90LC50eHQsJChQT19URU1QTEFURSkpCisJLi90eHQtdG8tcG90LnNoICQ8ID4gJEAKKwordXBkYXRlLXBvOjogZ2l0LWd1aS1nbG9zc2FyeS5wb3QKKwkkKGZvcmVhY2ggcCwgJChBTExfUE9GSUxFUyksIGVjaG8gVXBkYXRpbmcgJHAgOyBtc2dtZXJnZSAtVSAkcCAkKFBPX1RFTVBMQVRFKSA7ICkKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vZ2xvc3NhcnkvYmcucG8gYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2JnLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNzFmYWQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2JnLnBvCkBAIC0wLDAgKzEsMjg3IEBACisjIEJ1bGdhcmlhbiB0cmFuc2xhdGlvbiBvZiBnaXQtZ3VpLWdsb3NzYXJ5IHBvLWZpbGUuCisjIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+LgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0IHBhY2thZ2UuCisjIEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz4sIDIwMTIsIDIwMTMsIDIwMTQuCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpLWdsb3NzYXJ5IG1hc3RlclxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE0LTAxLTEzIDIxOjM5KzAyMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTAxLTEzIDIxOjM5KzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBCdWxnYXJpYW4gPGRpY3RAZnNhLWJnLm9yZz5cbiIKKyJMYW5ndWFnZTogYmdcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIy4gIkVuZ2xpc2ggRGVmaW5pdGlvbiAoRGVhciB0cmFuc2xhdG9yOiBUaGlzIGZpbGUgd2lsbCBuZXZlciBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyISBJdCBzaG91bGQgb25seSBzZXJ2ZSBhcyBhIHRvb2wgZm9yIHlvdSwgdGhlIHRyYW5zbGF0b3IuIE5vdGhpbmcgbW9yZS4pIgorbXNnaWQgIiIKKyJFbmdsaXNoIFRlcm0gKERlYXIgdHJhbnNsYXRvcjogVGhpcyBmaWxlIHdpbGwgbmV2ZXIgYmUgdmlzaWJsZSB0byB0aGUgdXNlciEpIgorbXNnc3RyICLQotC10YDQvNC40L0iCisKKyMuICIiCittc2dpZCAiYW1lbmQiCittc2dzdHIgItC/0L7Qv9GA0LDQstGP0LwiCisKKyMuICIiCittc2dpZCAiYW5ub3RhdGUiCittc2dzdHIgItCw0L3QvtGC0LjRgNCw0LwiCisKKyMuICJBICdicmFuY2gnIGlzIGFuIGFjdGl2ZSBsaW5lIG9mIGRldmVsb3BtZW50LiIKK21zZ2lkICJicmFuY2ggW25vdW5dIgorbXNnc3RyICLQutC70L7QvSwg0YDQsNC30LrQu9C+0L3QtdC90LjQtSBb0YHRitGJ0LXRgdGC0LLQuNGC0LXQu9C90L5dIgorCisjLiAiIgorbXNnaWQgImJyYW5jaCBbdmVyYl0iCittc2dzdHIgItGA0LDQt9C60LvQvtC90Y/QstCw0LwgW9Cz0LvQsNCz0L7Qu10iCisKKyMuICIiCittc2dpZCAiY2hlY2tvdXQgW25vdW5dIgorbXNnc3RyICLQuNC30YLQtdCz0LvRj9C90LUgW9GB0YrRidC10YHRgtCy0LjRgtC10LvQvdC+XSIKKworIy4gIlRoZSBhY3Rpb24gb2YgdXBkYXRpbmcgdGhlIHdvcmtpbmcgdHJlZSB0byBhIHJldmlzaW9uIHdoaWNoIHdhcyBzdG9yZWQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZS4iCittc2dpZCAiY2hlY2tvdXQgW3ZlcmJdIgorbXNnc3RyICLQuNC30YLQtdCz0LvRj9C90LUgW9Cz0LvQsNCz0L7Qu10iCisKKyMuICIiCittc2dpZCAiY2xvbmUgW3ZlcmJdIgorbXNnc3RyICLQutC70L7QvdC40YDQsNC8IFvQs9C70LDQs9C+0LtdIgorCisjLiAiQSBzaW5nbGUgcG9pbnQgaW4gdGhlIGdpdCBoaXN0b3J5LiIKK21zZ2lkICJjb21taXQgW25vdW5dIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1IFvRgdGK0YnQtdGB0YLQstC40YLQtdC70L3Qvl0iCisKKyMuICJUaGUgYWN0aW9uIG9mIHN0b3JpbmcgYSBuZXcgc25hcHNob3Qgb2YgdGhlIHByb2plY3QncyBzdGF0ZSBpbiB0aGUgZ2l0IGhpc3RvcnkuIgorbXNnaWQgImNvbW1pdCBbdmVyYl0iCittc2dzdHIgItC/0L7QtNCw0LLQsNC8IFvRgdGK0YnQtdGB0YLQstC40YLQtdC70L3Qvl0iCisKKyMuICIiCittc2dpZCAiZGlmZiBbbm91bl0iCittc2dzdHIgItGA0LDQt9C70LjQutCwL9C/0YDQvtC80LXQvdC4IFvRgdGK0YnQtdGB0YLQstC40YLQtdC70L3Qvl0iCisKKyMuICIiCittc2dpZCAiZGlmZiBbdmVyYl0iCittc2dzdHIgItC40LfRh9C40YHQu9GP0LLQsNC8INGA0LDQt9C70LjQutCwL9C/0YDQvtC80LXQvdC4IFvQs9C70LDQs9C+0LtdIgorCisjLiAiQSBmYXN0LWZvcndhcmQgaXMgYSBzcGVjaWFsIHR5cGUgb2YgbWVyZ2Ugd2hlcmUgeW91IGhhdmUgYSByZXZpc2lvbiBhbmQgeW91IGFyZSBtZXJnaW5nIGFub3RoZXIgYnJhbmNoJ3MgY2hhbmdlcyB0aGF0IGhhcHBlbiB0byBiZSBhIGRlc2NlbmRhbnQgb2Ygd2hhdCB5b3UgaGF2ZS4iCittc2dpZCAiZmFzdCBmb3J3YXJkIG1lcmdlIgorbXNnc3RyICLQv9GA0LXQstGK0YDRgtCw0YnQvi/QtNC40YDQtdC60YLQvdC+L9GC0YDQuNCy0LjQsNC70L3QviDRgdC70LjQstCw0L3QtSIKKworIy4gIkZldGNoaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGdldCB0aGUgYnJhbmNoJ3MgaGVhZCBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnksIHRvIGZpbmQgb3V0IHdoaWNoIG9iamVjdHMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgbG9jYWwgb2JqZWN0IGRhdGFiYXNlLCBhbmQgdG8gZ2V0IHRoZW0sIHRvby4iCittc2dpZCAiZmV0Y2giCittc2dzdHIgItC00L7RgdGC0LDQstGP0L3QtSIKKworIy4gIk9uZSBjb250ZXh0IG9mIGNvbnNlY3V0aXZlIGxpbmVzIGluIGEgd2hvbGUgcGF0Y2gsIHdoaWNoIGNvbnNpc3RzIG9mIG1hbnkgc3VjaCBodW5rcyIKK21zZ2lkICJodW5rIgorbXNnc3RyICLQv9Cw0YDRh9C1IgorCisjLiAiQSBjb2xsZWN0aW9uIG9mIGZpbGVzLiBUaGUgaW5kZXggaXMgYSBzdG9yZWQgdmVyc2lvbiBvZiB5b3VyIHdvcmtpbmcgdHJlZS4iCittc2dpZCAiaW5kZXggKGluIGdpdC1ndWk6IHN0YWdpbmcgYXJlYSkiCittc2dzdHIgItGB0LrQtdC70LUv0LjQvdC00LXQutGBL9C40LfQsdCwIgorCisjLiAiQSBzdWNjZXNzZnVsIG1lcmdlIHJlc3VsdHMgaW4gdGhlIGNyZWF0aW9uIG9mIGEgbmV3IGNvbW1pdCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuIgorbXNnaWQgIm1lcmdlIFtub3VuXSIKK21zZ3N0ciAi0YHQu9C40LLQsNC90LUv0L7QsdC10LTQuNC90Y/QstCw0L3QtSBb0YHRitGJ0LXRgdGC0LLQuNGC0LXQu9C90L5dIgorCisjLiAiVG8gYnJpbmcgdGhlIGNvbnRlbnRzIG9mIGFub3RoZXIgYnJhbmNoIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ2lkICJtZXJnZSBbdmVyYl0iCittc2dzdHIgItGB0LvQuNCy0LDQvC/QvtCx0LXQtNC40L3Rj9Cy0LDQvCBb0LPQu9Cw0LPQvtC7XSIKKworIy4gIiIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LUiCisKKyMuICJEZWxldGVzIGFsbCBzdGFsZSB0cmFja2luZyBicmFuY2hlcyB1bmRlciA8bmFtZT4uIFRoZXNlIHN0YWxlIGJyYW5jaGVzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgcmVmZXJlbmNlZCBieSA8bmFtZT4sIGJ1dCBhcmUgc3RpbGwgbG9jYWxseSBhdmFpbGFibGUgaW4gJ3JlbW90ZXMvPG5hbWU+Jy4iCittc2dpZCAicHJ1bmUiCittc2dzdHIgItC+0LrQsNGB0YLRgNGP0LwiCisKKyMuICJQdWxsaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGZldGNoIGl0IGFuZCBtZXJnZSBpdC4iCittc2dpZCAicHVsbCIKK21zZ3N0ciAi0LjQt9C00YrRgNC/0LLQsNC8IgorCisjLiAiUHVzaGluZyBhIGJyYW5jaCBtZWFucyB0byBnZXQgdGhlIGJyYW5jaCdzIGhlYWQgcmVmIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgYW5kIC4uLiAod2VsbCwgY2FuIHNvbWVvbmUgcGxlYXNlIGV4cGxhaW4gaXQgZm9yIG1lcmUgbW9ydGFscz8pIgorbXNnaWQgInB1c2giCittc2dzdHIgItC40LfRgtC70LDRgdC60LLQsNC8IgorCisjLiAiIgorbXNnaWQgInJlZG8iCittc2dzdHIgItC/0L7QstGC0LDRgNGP0Lwv0L/RgNCw0LLRjyDQvdCw0L3QvtCy0L4iCisKKyMuICJBbiBvdGhlciByZXBvc2l0b3J5ICgncmVtb3RlJykuIE9uZSBtaWdodCBoYXZlIGEgc2V0IG9mIHJlbW90ZXMgd2hvc2UgYnJhbmNoZXMgb25lIHRyYWNrcy4iCittc2dpZCAicmVtb3RlIgorbXNnc3RyICLQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyMuICJBIGNvbGxlY3Rpb24gb2YgcmVmcyAoPykgdG9nZXRoZXIgd2l0aCBhbiBvYmplY3QgZGF0YWJhc2UgY29udGFpbmluZyBhbGwgb2JqZWN0cyB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIHJlZnMuLi4gKG9vcHMsIHlvdSd2ZSBsb3N0IG1lIGhlcmUuIEFnYWluLCBwbGVhc2UgYW4gZXhwbGFuYXRpb24gZm9yIG1lcmUgbW9ydGFscz8pIgorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgItGF0YDQsNC90LjQu9C40YnQtSIKKworIy4gIiIKK21zZ2lkICJyZXNldCIKK21zZ3N0ciAi0LfQsNC90YPQu9GP0LLQsNC8L9C+0YLQvNC10L3Rj9C8IgorCisjLiAiIgorbXNnaWQgInJldmVydCIKK21zZ3N0ciAi0LLRgNGK0YnQsNC8L9C+0YLQvNC10L3Rj9C8IgorCisjLiAiQSBwYXJ0aWN1bGFyIHN0YXRlIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aGljaCB3YXMgc3RvcmVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UuIgorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICLQstC10YDRgdC40Y8iCisKKyMuICIiCittc2dpZCAic2lnbiBvZmYiCittc2dzdHIgItC/0L7QtNC/0LjRgdCy0LDQvCIKKworIy4gIiIKK21zZ2lkICJzdGFnaW5nIGFyZWEiCittc2dzdHIgItGB0LrQtdC70LUv0LjQvdC00LXQutGBL9C40LfQsdCwIgorCisjLiAiIgorbXNnaWQgInN0YXR1cyIKK21zZ3N0ciAi0YHRitGB0YLQvtGP0L3QuNC1IgorCisjLiAiQSByZWYgcG9pbnRpbmcgdG8gYSB0YWcgb3IgY29tbWl0IG9iamVjdCIKK21zZ2lkICJ0YWcgW25vdW5dIgorbXNnc3RyICLQtdGC0LjQutC10YIgW9GB0YrRidC10YHRgtCy0LjRgtC10LvQvdC+XSIKKworIy4gIiIKK21zZ2lkICJ0YWcgW3ZlcmJdIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvCDQtdGC0LjQutC10YIgW9Cz0LvQsNCz0L7Qu10iCisKKyMuICJBIHJlZ3VsYXIgZ2l0IGJyYW5jaCB0aGF0IGlzIHVzZWQgdG8gZm9sbG93IGNoYW5nZXMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkuIgorbXNnaWQgInRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAi0YHQu9C10LTRj9GJINC60LvQvtC9IgorCisjLiAiIgorbXNnaWQgInVuZG8iCittc2dzdHIgItC+0YLQvNC10L3Rj9C8IgorCisjLiAiIgorbXNnaWQgInVwZGF0ZSIKK21zZ3N0ciAi0L7QsdC90L7QstGP0LLQsNC8IgorCisjLiAiIgorbXNnaWQgInZlcmlmeSIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0Y/QstCw0LwiCisKKyMuICJUaGUgdHJlZSBvZiBhY3R1YWwgY2hlY2tlZCBvdXQgZmlsZXMuIgorbXNnaWQgIndvcmtpbmcgY29weSwgd29ya2luZyB0cmVlIgorbXNnc3RyICLRgNCw0LHQvtGC0L3QviDQutC+0L/QuNC1L9GA0LDQsdC+0YLQvdC+INC00YrRgNCy0L4iCisKKyMuICJhIGNvbW1pdCB0aGF0IHN1Y2NlZWRzIHRoZSBjdXJyZW50IG9uZSBpbiBnaXQncyBncmFwaCBvZiBjb21taXRzIChub3QgbmVjZXNzYXJpbHkgZGlyZWN0bHkpIgorbXNnaWQgImFuY2VzdG9yIgorbXNnc3RyICLQv9GA0LXQtNGI0LXRgdGC0LLQtdC90LjQuiIKKworIy4gInByZW1hdHVyZWx5IHN0b3AgYW5kIGFiYW5kb24gYW4gb3BlcmF0aW9uIgorbXNnaWQgImFib3J0IgorbXNnc3RyICLQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsNC8IgorCisjLiAiYSByZXBvc2l0b3J5IHdpdGggb25seSAuZ2l0IGRpcmVjdG9yeSwgd2l0aG91dCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ2lkICJiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgItCz0L7Qu9C+INGF0YDQsNC90LjQu9C40YnQtSIKKworIy4gImEgcGFyZW50IHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgZmlsZSIKK21zZ2lkICJiYXNlIgorbXNnc3RyICLRgNC+0LTQuNGC0LXQu9GB0LrQsCDQstC10YDRgdC40Y8iCisKKyMuICJnZXQgdGhlIGF1dGhvcnMgcmVzcG9uc2libGUgZm9yIGVhY2ggbGluZSBpbiBhIGZpbGUiCittc2dpZCAiYmxhbWUiCittc2dzdHIgItCw0L3QvtGC0LjRgNCw0Lwv0LDQvdC+0YLQuNGA0LDQvdC1IgorCisjLiAidG8gc2VsZWN0IGFuZCBhcHBseSBhIHNpbmdsZSBjb21taXQgd2l0aG91dCBtZXJnaW5nIgorbXNnaWQgImNoZXJyeS1waWNrIgorbXNnc3RyICLQvtGC0LHQuNGA0LDQvCIKKworIy4gImEgY29tbWl0IHRoYXQgZGlyZWN0bHkgc3VjY2VlZHMgdGhlIGN1cnJlbnQgb25lIGluIGdpdCdzIGdyYXBoIG9mIGNvbW1pdHMiCittc2dpZCAiY2hpbGQiCittc2dzdHIgItC00LXRgtC1IgorCisjLiAiY2xlYW4gdGhlIHN0YXRlIG9mIHRoZSBnaXQgcmVwb3NpdG9yeSwgb2Z0ZW4gYWZ0ZXIgbWFudWFsbHkgc3RvcHBlZCBvcGVyYXRpb24iCittc2dpZCAiY2xlYW51cCIKK21zZ3N0ciAi0LfQsNGH0LjRgdGC0LLQsNC8IgorCisjLiAiYSBtZXNzYWdlIHRoYXQgZ2V0cyBhdHRhY2hlZCB3aXRoIGFueSBjb21taXQiCittc2dpZCAiY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgItGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSIKKworIy4gImEgY29tbWl0IHRoYXQgcHJlY2VkZXMgdGhlIGN1cnJlbnQgb25lIGluIGdpdCdzIGdyYXBoIG9mIGNvbW1pdHMgKG5vdCBuZWNlc3NhcmlseSBkaXJlY3RseSkiCittc2dpZCAiZGVzY2VuZGFudCIKK21zZ3N0ciAi0L3QsNGB0LvQtdC00L3QuNC6IgorCisjLiAiY2hlY2tvdXQgb2YgYSByZXZpc2lvbiByYXRoZXIgdGhhbiBhIHNvbWUgaGVhZCIKK21zZ2lkICJkZXRhY2hlZCBjaGVja291dCIKK21zZ3N0ciAi0L3QtdGB0LLRitGA0LfQsNC90L4g0LjQt9GC0LXQs9C70Y/QvdC1IgorCisjLiAiYW55IG1lcmdlIHN0cmF0ZWd5IHRoYXQgd29ya3Mgb24gYSBmaWxlIGJ5IGZpbGUgYmFzaXMiCittc2dpZCAiZmlsZSBsZXZlbCBtZXJnaW5nIgorbXNnc3RyICLQv9C+0YTQsNC50LvQvtCy0L4g0YHQu9C40LLQsNC90LUiCisKKyMuICJ0aGUgbGFzdCByZXZpc2lvbiBpbiBhIGJyYW5jaCIKK21zZ2lkICJoZWFkIgorbXNnc3RyICLQs9C70LDQstCwL9Cy0YDRitGFICjQvdCwINC60LvQvtC9LCDRgNCw0LfRgNCw0LHQvtGC0LrQsCkiCisKKyMuICJzY3JpcHQgdGhhdCBnZXRzIGV4ZWN1dGVkIGF1dG9tYXRpY2FsbHkgb24gc29tZSBldmVudCIKK21zZ2lkICJob29rIgorbXNnc3RyICLQutGD0LrQsC/QsNCy0YLQvtC80LDRgtC40YfQtdC9INGB0LrRgNC40L/RgiIKKworIy4gInRoZSBmaXJzdCBjaGVja291dCBkdXJpbmcgYSBjbG9uZSBvcGVyYXRpb24iCittc2dpZCAiaW5pdGlhbCBjaGVja291dCIKK21zZ3N0ciAi0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INC40LfRgtC10LPQu9GP0L3QtSIKKworIy4gImEgYnJhbmNoIHRoYXQgcmVzaWRlcyBpbiB0aGUgbG9jYWwgZ2l0IHJlcG9zaXRvcnkiCittc2dpZCAibG9jYWwgYnJhbmNoIgorbXNnc3RyICLQu9C+0LrQsNC70LXQvSDQutC70L7QvSIKKworIy4gImEgR2l0IG9iamVjdCB0aGF0IGlzIG5vdCBwYXJ0IG9mIGFueSBwYWNrIgorbXNnaWQgImxvb3NlIG9iamVjdCIKK21zZ3N0ciAi0L3QtdC/0LDQutC10YLQuNGA0LDQvSDQvtCx0LXQutGCIgorCisjLiAiYSBicmFuY2ggY2FsbGVkIGJ5IGNvbnZlbnRpb24gJ21hc3RlcicgdGhhdCBleGlzdHMgaW4gYSBuZXdseSBjcmVhdGVkIGdpdCByZXBvc2l0b3J5IgorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgItC+0YHQvdC+0LLQtdC9INC60LvQvtC9IgorCisjLiAiYSByZW1vdGUgY2FsbGVkIGJ5IGNvbnZlbnRpb24gJ29yaWdpbicgdGhhdCB0aGUgY3VycmVudCBnaXQgcmVwb3NpdG9yeSBoYXMgYmVlbiBjbG9uZWQgZnJvbSIKK21zZ2lkICJvcmlnaW4iCittc2dzdHIgItGF0YDQsNC90LjQu9C40YnQtS3QuNC30YLQvtGH0L3QuNC6IgorCisjLiAiYSBmaWxlIGNvbnRhaW5pbmcgbWFueSBnaXQgb2JqZWN0cyBwYWNrZWQgdG9nZXRoZXIiCittc2dpZCAicGFjayBbbm91bl0iCittc2dzdHIgItC10YLQuNC60LXRgiIKKworIy4gImEgR2l0IG9iamVjdCBwYXJ0IG9mIHNvbWUgcGFjayIKK21zZ2lkICJwYWNrZWQgb2JqZWN0IgorbXNnc3RyICLQv9Cw0LrQtdGC0LjRgNCw0L0g0L7QsdC10LrRgiIKKworIy4gImEgY29tbWl0IHRoYXQgZGlyZWN0bHkgcHJlY2VkZXMgdGhlIGN1cnJlbnQgb25lIGluIGdpdCdzIGdyYXBoIG9mIGNvbW1pdHMiCittc2dpZCAicGFyZW50IgorbXNnc3RyICLRgNC+0LTQuNGC0LXQuyIKKworIy4gInRoZSBsb2cgZmlsZSBjb250YWluaW5nIGFsbCBzdGF0ZXMgb2YgdGhlIEhFQUQgcmVmZXJlbmNlIChpbiBvdGhlciB3b3JkcyBwYXN0IHByaXN0aW5lIHN0YXRlcyBvZiB0aGUgd29ya2luZyBjb3B5KSIKK21zZ2lkICJyZWZsb2ciCittc2dzdHIgItC20YPRgNC90LDQuyDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUiCisKKyMuICJkZWNpZGUgd2hpY2ggY2hhbmdlcyBmcm9tIGFsdGVybmF0aXZlIHZlcnNpb25zIG9mIGEgZmlsZSBzaG91bGQgcGVyc2lzdCBpbiBHaXQiCittc2dpZCAicmVzb2x2ZSAoYSBjb25mbGljdCkiCittc2dzdHIgItC60L7RgNC40LPQuNGA0LDQvCAo0LrQvtC90YTQu9C40LrRgikiCisKKyMuICJhYmFuZG9uIGNoYW5nZXMgYW5kIGdvIHRvIHByaXN0aW5lIHZlcnNpb24iCittc2dpZCAicmV2ZXJ0IGNoYW5nZXMiCittc2dzdHIgItCy0YDRitGJ0LDQvdC1INC90LAg0L7RgNC40LPQuNC90LDQu9CwIgorCisjLiAiZXhwcmVzc2lvbiB0aGF0IHNpZ25pZmllcyBhIHJldmlzaW9uIGluIGdpdCIKK21zZ2lkICJyZXZpc2lvbiBleHByZXNzaW9uIgorbXNnc3RyICLQuNC30YDQsNC3INC30LAg0LLQtdGA0YHQuNGPIgorCisjLiAiYWRkIHNvbWUgY29udGVudCBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gdGhlIHN0YWdpbmcgYXJlYSBpbiBwcmVwYXJhdGlvbiBmb3IgYSBjb21taXQiCittc2dpZCAic3RhZ2UvdW5zdGFnZSIKK21zZ3N0ciAiKNC00L7QsdCw0LLRj9C90LUpINC60YrQvCDRgdC60LXQu9C10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUv0LjQt9Cy0LDQttC00LDQvdC1INC+0YIg0YHQutC10LvQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjLiAidGVtcG9yYXJpbHkgc2F2ZSBjaGFuZ2VzIGluIGEgc3RhY2sgd2l0aG91dCBjb21taXR0aW5nIgorbXNnaWQgInN0YXNoIgorbXNnc3RyICLRgdC60LDRgtCw0LLQsNC8INC/0YDQvtC80LXQvdC4IgorCisjLiAiZmlsZSB3aG9zZSBjb250ZW50IGlzIHRyYWNrZWQvbm90IHRyYWNrZWQgYnkgZ2l0IgorbXNnaWQgInRyYWNrZWQvdW50cmFja2VkIgorbXNnc3RyICLRgdC70LXQtNC10L0v0L3QtdGB0LvQtdC00LXQvSIKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZGUucG8gYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NzY0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2RlLnBvCkBAIC0wLDAgKzEsMTg5IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgZ2xvc3NhcnkgdG8gR2VybWFuCisjIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UsIGV0IGFsLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0IHBhY2thZ2UuCisjIENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT4sIDIwMDcKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWkgZ2xvc3NhcnlcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOC0wMS0wNyAyMToyMCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wMi0xNiAyMTo0OCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR2VybWFuIFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjLiAiRW5nbGlzaCBEZWZpbml0aW9uIChEZWFyIHRyYW5zbGF0b3I6IFRoaXMgZmlsZSB3aWxsIG5ldmVyIGJlIHZpc2libGUgdG8gdGhlIHVzZXIhIEl0IHNob3VsZCBvbmx5IHNlcnZlIGFzIGEgdG9vbCBmb3IgeW91LCB0aGUgdHJhbnNsYXRvci4gTm90aGluZyBtb3JlLikiCittc2dpZCAiIgorIkVuZ2xpc2ggVGVybSAoRGVhciB0cmFuc2xhdG9yOiBUaGlzIGZpbGUgd2lsbCBuZXZlciBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyISkiCittc2dzdHIgIiIKKyJEZXV0c2NoZSDDnGJlcnNldHp1bmcuXG4iCisiQW5kZXJlIGRldXRzY2hlIFNDTTpcbiIKKyIgIGh0dHA6Ly90b3J0b2lzZXN2bi5uZXQvZG9jcy9yZWxlYXNlL1RvcnRvaXNlU1ZOX2RlL2luZGV4Lmh0bWwgdW5kIGh0dHA6Ly8iCisidG9ydG9pc2Vzdm4udGlncmlzLm9yZy9zdm4vdG9ydG9pc2Vzdm4vdHJ1bmsvTGFuZ3VhZ2VzL1RvcnRvaXNlX2RlLnBvICIKKyIodXNlcm5hbWU9Z3Vlc3QsIHBhc3N3b3JkIGVtcHR5LCBndXQpLFxuIgorIiAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9kZS1kZS9saWJyYXJ5L21zMTgxMDM4KHZzLjgwKS5hc3B4IChNUyBWaXN1YWwgIgorIlNvdXJjZSBTYWZlLCBrb21tZXJ6aWVsbCksXG4iCisiICBodHRwOi8vY3ZzYm9vay5yZWQtYmVhbi5jb20vdHJhbnNsYXRpb25zL2dlcm1hbi9LYXBfMDYuaHRtbCAiCisiKG1pdHRlbG3DpMOfaWcpLFxuIgorIiAgaHR0cDovL3RvcnRvaXNlY3ZzLmN2cy5zb3VyY2Vmb3JnZS5uZXQvdG9ydG9pc2VjdnMvcG8vVG9ydG9pc2VDVlMvZGVfREUucG8/IgorInZpZXc9bWFya3VwIChtaXR0ZWxtw6TDn2lnKSxcbiIKKyIgIGh0dHA6Ly9yYXBpZHN2bi50aWdyaXMub3JnL3N2bi9yYXBpZHN2bi90cnVuay9zcmMvbG9jYWxlL2RlL3JhcGlkc3ZuLnBvICIKKyIodXNlcm5hbWU9Z3Vlc3QsIHBhc3N3b3JkIGVtcHR5LCBzY2hsZWNodCkiCisKKyMuICIiCittc2dpZCAiYW1lbmQiCittc2dzdHIgIm5hY2hiZXNzZXJuIChlcmfDpG56ZW4pIgorCisjLiAiIgorbXNnaWQgImFubm90YXRlIgorbXNnc3RyICJhbm5vdGllcmVuIgorCisjLiAiQSAnYnJhbmNoJyBpcyBhbiBhY3RpdmUgbGluZSBvZiBkZXZlbG9wbWVudC4iCittc2dpZCAiYnJhbmNoIFtub3VuXSIKK21zZ3N0ciAiWndlaWciCisKKyMuICIiCittc2dpZCAiYnJhbmNoIFt2ZXJiXSIKK21zZ3N0ciAidmVyendlaWdlbiIKKworIy4gIiIKK21zZ2lkICJjaGVja291dCBbbm91bl0iCittc2dzdHIgIiIKKyJBcmJlaXRza29waWUgKEVyc3RlbGx1bmcgZWluZXIgQXJiZWl0c2tvcGllOyBBdXNjaGVjaz8gQXVzc3BpZWx1bmc/IEFicnVmPyAiCisiU291cmNlIFNhZmU6IEF1c2NoZWNrdm9yZ2FuZykiCisKKyMuICJUaGUgYWN0aW9uIG9mIHVwZGF0aW5nIHRoZSB3b3JraW5nIHRyZWUgdG8gYSByZXZpc2lvbiB3aGljaCB3YXMgc3RvcmVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UuIgorbXNnaWQgImNoZWNrb3V0IFt2ZXJiXSIKK21zZ3N0ciAiIgorIkFyYmVpdHNrb3BpZSBlcnN0ZWxsZW47IFp3ZWlnIHVtc3RlbGxlbiBbY2hlY2tvdXQgYSBicmFuY2hdIChhdXNjaGVja2VuPyAiCisiYXVzc3BpZWxlbj8gYWJydWZlbj8gU291cmNlIFNhZmU6IGF1c2NoZWNrZW4pIgorCisjLiAiIgorbXNnaWQgImNsb25lIFt2ZXJiXSIKK21zZ3N0ciAia2xvbmVuIgorCisjLiAiQSBzaW5nbGUgcG9pbnQgaW4gdGhlIGdpdCBoaXN0b3J5LiIKK21zZ2lkICJjb21taXQgW25vdW5dIgorbXNnc3RyICIiCisiVmVyc2lvbjsgRWludHJhZ3VuZzsgw4RuZGVydW5nIChCdWNodW5nPywgRWludHJhZ3VuZz8sIMOcYmVydHJhZ3VuZz8sICIKKyJTZW5kdW5nPywgw5xiZXJnYWJlPywgRWluc3BpZWx1bmc/LCBBYmxhZ2V2b3JnYW5nPykiCisKKyMuICJUaGUgYWN0aW9uIG9mIHN0b3JpbmcgYSBuZXcgc25hcHNob3Qgb2YgdGhlIHByb2plY3QncyBzdGF0ZSBpbiB0aGUgZ2l0IGhpc3RvcnkuIgorbXNnaWQgImNvbW1pdCBbdmVyYl0iCittc2dzdHIgIiIKKyJlaW50cmFnZW4gKFRvcnRvaXNlU1ZOOiDDvGJlcnRyYWdlbjsgU291cmNlIFNhZmU6IGVpbmNoZWNrZW47IHNlbmRlbj8sICIKKyLDvGJlcmdlYmVuPywgZWluc3BpZWxlbj8sIGVpbnBmbGVnZW4/LCBhYmxlZ2VuPykiCisKKyMuICIiCittc2dpZCAiZGlmZiBbbm91bl0iCittc2dzdHIgIlZlcmdsZWljaCAoU291cmNlIFNhZmU6IFVudGVyc2NoaWVkZSkiCisKKyMuICIiCittc2dpZCAiZGlmZiBbdmVyYl0iCittc2dzdHIgInZlcmdsZWljaGVuIgorCisjLiAiQSBmYXN0LWZvcndhcmQgaXMgYSBzcGVjaWFsIHR5cGUgb2YgbWVyZ2Ugd2hlcmUgeW91IGhhdmUgYSByZXZpc2lvbiBhbmQgeW91IGFyZSBtZXJnaW5nIGFub3RoZXIgYnJhbmNoJ3MgY2hhbmdlcyB0aGF0IGhhcHBlbiB0byBiZSBhIGRlc2NlbmRhbnQgb2Ygd2hhdCB5b3UgaGF2ZS4iCittc2dpZCAiZmFzdCBmb3J3YXJkIG1lcmdlIgorbXNnc3RyICJTY2huZWxsenVzYW1tZW5mw7xocnVuZyIKKworIy4gIkZldGNoaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGdldCB0aGUgYnJhbmNoJ3MgaGVhZCBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnksIHRvIGZpbmQgb3V0IHdoaWNoIG9iamVjdHMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgbG9jYWwgb2JqZWN0IGRhdGFiYXNlLCBhbmQgdG8gZ2V0IHRoZW0sIHRvby4iCittc2dpZCAiZmV0Y2giCittc2dzdHIgImFuZm9yZGVybiAoaG9sZW4/KSIKKworIy4gIk9uZSBjb250ZXh0IG9mIGNvbnNlY3V0aXZlIGxpbmVzIGluIGEgd2hvbGUgcGF0Y2gsIHdoaWNoIGNvbnNpc3RzIG9mIG1hbnkgc3VjaCBodW5rcyIKK21zZ2lkICJodW5rIgorbXNnc3RyICJLb250ZXh0IgorCisjLiAiQSBjb2xsZWN0aW9uIG9mIGZpbGVzLiBUaGUgaW5kZXggaXMgYSBzdG9yZWQgdmVyc2lvbiBvZiB5b3VyIHdvcmtpbmcgdHJlZS4iCittc2dpZCAiaW5kZXggKGluIGdpdC1ndWk6IHN0YWdpbmcgYXJlYSkiCittc2dzdHIgIkJlcmVpdHN0ZWxsdW5nIgorCisjLiAiQSBzdWNjZXNzZnVsIG1lcmdlIHJlc3VsdHMgaW4gdGhlIGNyZWF0aW9uIG9mIGEgbmV3IGNvbW1pdCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuIgorbXNnaWQgIm1lcmdlIFtub3VuXSIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZyIKKworIy4gIlRvIGJyaW5nIHRoZSBjb250ZW50cyBvZiBhbm90aGVyIGJyYW5jaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dpZCAibWVyZ2UgW3ZlcmJdIgorbXNnc3RyICJ6dXNhbW1lbmbDvGhyZW4iCisKKyMuICIiCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAiQmVzY2hyZWlidW5nIChNZWxkdW5nPywgTmFjaHJpY2h0PzsgU291cmNlIFNhZmU6IEtvbW1lbnRhcikiCisKKyMuICJEZWxldGVzIGFsbCBzdGFsZSB0cmFja2luZyBicmFuY2hlcyB1bmRlciA8bmFtZT4uIFRoZXNlIHN0YWxlIGJyYW5jaGVzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgcmVmZXJlbmNlZCBieSA8bmFtZT4sIGJ1dCBhcmUgc3RpbGwgbG9jYWxseSBhdmFpbGFibGUgaW4gJ3JlbW90ZXMvPG5hbWU+Jy4iCittc2dpZCAicHJ1bmUiCittc2dzdHIgImF1ZnLDpHVtZW4gKGVudGZlcm5lbj8pIgorCisjLiAiUHVsbGluZyBhIGJyYW5jaCBtZWFucyB0byBmZXRjaCBpdCBhbmQgbWVyZ2UgaXQuIgorbXNnaWQgInB1bGwiCittc2dzdHIgIsO8YmVybmVobWVuICh6aWVoZW4/KSIKKworIy4gIlB1c2hpbmcgYSBicmFuY2ggbWVhbnMgdG8gZ2V0IHRoZSBicmFuY2gncyBoZWFkIHJlZiBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnksIGFuZCAuLi4gKHdlbGwsIGNhbiBzb21lb25lIHBsZWFzZSBleHBsYWluIGl0IGZvciBtZXJlIG1vcnRhbHM/KSIKK21zZ2lkICJwdXNoIgorbXNnc3RyICJ2ZXJzZW5kZW4gKGF1c2xpZWZlcm4/IGhvY2hsYWRlbj8gdmVyc2NoaWNrZW4/IHNjaGllYmVuPykiCisKKyMuICIiCittc2dpZCAicmVkbyIKK21zZ3N0ciAid2llZGVyaG9sZW4iCisKKyMuICJBbiBvdGhlciByZXBvc2l0b3J5ICgncmVtb3RlJykuIE9uZSBtaWdodCBoYXZlIGEgc2V0IG9mIHJlbW90ZXMgd2hvc2UgYnJhbmNoZXMgb25lIHRyYWNrcy4iCittc2dpZCAicmVtb3RlIgorbXNnc3RyICJBbmRlcmUgQXJjaGl2ZSAoR2VnZW5zZWl0ZT8sIEVudGZlcm50ZT8sIFNlcnZlcj8pIgorCisjLiAiQSBjb2xsZWN0aW9uIG9mIHJlZnMgKD8pIHRvZ2V0aGVyIHdpdGggYW4gb2JqZWN0IGRhdGFiYXNlIGNvbnRhaW5pbmcgYWxsIG9iamVjdHMgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSByZWZzLi4uIChvb3BzLCB5b3UndmUgbG9zdCBtZSBoZXJlLiBBZ2FpbiwgcGxlYXNlIGFuIGV4cGxhbmF0aW9uIGZvciBtZXJlIG1vcnRhbHM/KSIKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICJQcm9qZWt0YXJjaGl2IgorCisjLiAiIgorbXNnaWQgInJlc2V0IgorbXNnc3RyICJ6dXLDvGNrc2V0emVuICh6dXLDvGNra2VocmVuPykiCisKKyMuICIiCittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICJ2ZXJ3ZXJmZW4gKGJlaSBnaXQtcmVzZXQpLCByZXZpZGllcmVuIChiZWkgZ2l0LXJldmVydCwgYWxzbyBtaXQgbmV1ZW0gY29tbWl0KSIKKworIy4gIkEgcGFydGljdWxhciBzdGF0ZSBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2hpY2ggd2FzIHN0b3JlZCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiIKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAiVmVyc2lvbiAoVG9ydG9pc2VTVk46IFJldmlzaW9uOyBTb3VyY2UgU2FmZTogVmVyc2lvbikiCisKKyMuICIiCittc2dpZCAic2lnbiBvZmYiCittc2dzdHIgImFiemVpY2huZW4gKGdlZ2VuemVpY2huZW4/LCBmcmVpemVpY2huZW4/LCBhYnNlZ25lbj8pIgorCisjLiAiIgorbXNnaWQgInN0YWdpbmcgYXJlYSIKK21zZ3N0ciAiQmVyZWl0c3RlbGx1bmciCisKKyMuICIiCittc2dpZCAic3RhdHVzIgorbXNnc3RyICJTdGF0dXMiCisKKyMuICJBIHJlZiBwb2ludGluZyB0byBhIHRhZyBvciBjb21taXQgb2JqZWN0IgorbXNnaWQgInRhZyBbbm91bl0iCittc2dzdHIgIk1hcmtpZXJ1bmciCisKKyMuICIiCittc2dpZCAidGFnIFt2ZXJiXSIKK21zZ3N0ciAibWFya2llcmVuIgorCisjLiAiQSByZWd1bGFyIGdpdCBicmFuY2ggdGhhdCBpcyB1c2VkIHRvIGZvbGxvdyBjaGFuZ2VzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5LiIKK21zZ2lkICJ0cmFja2luZyBicmFuY2giCittc2dzdHIgIsOcYmVybmFobWV6d2VpZyIKKworIy4gIiIKK21zZ2lkICJ1bmRvIgorbXNnc3RyICJyw7xja2fDpG5naWciCisKKyMuICIiCittc2dpZCAidXBkYXRlIgorbXNnc3RyICJha3R1YWxpc2llcmVuIgorCisjLiAiIgorbXNnaWQgInZlcmlmeSIKK21zZ3N0ciAiw7xiZXJwcsO8ZmVuIgorCisjLiAiVGhlIHRyZWUgb2YgYWN0dWFsIGNoZWNrZWQgb3V0IGZpbGVzLiIKK21zZ2lkICJ3b3JraW5nIGNvcHksIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiQXJiZWl0c2tvcGllIgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9nbG9zc2FyeS9lbC5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZWwucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzY2M4MQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZWwucG8KQEAgLTAsMCArMSwxNzEgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSBnbG9zc2FyeSB0byBHcmVlaworIyBDb3B5cmlnaHQgKEMpIDIwMDkgSmltbXkgQW5nZWxha29zCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCisjIEppbW15IEFuZ2VsYWtvcyA8dnlydXNzQGhlbGx1Zy5ncj4sIDIwMDkuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpLWdsb3NzYXJ5XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDgtMDEtMDcgMjE6MjArMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMDYtMjMgMjA6NDErMDMwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmltbXkgQW5nZWxha29zIDx2eXJ1c3NAaGVsbHVnLmdyPlxuIgorIkxhbmd1YWdlLVRlYW06IEdyZWVrIDxpMThuQGxpc3RzLmhlbGx1Zy5ncj5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLUdlbmVyYXRvcjogTG9rYWxpemUgMC4zXG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4gIT0gMSk7XG4iCisKKyMuICJFbmdsaXNoIERlZmluaXRpb24gKERlYXIgdHJhbnNsYXRvcjogVGhpcyBmaWxlIHdpbGwgbmV2ZXIgYmUgdmlzaWJsZSB0byB0aGUgdXNlciEgSXQgc2hvdWxkIG9ubHkgc2VydmUgYXMgYSB0b29sIGZvciB5b3UsIHRoZSB0cmFuc2xhdG9yLiBOb3RoaW5nIG1vcmUuKSIKK21zZ2lkICJFbmdsaXNoIFRlcm0gKERlYXIgdHJhbnNsYXRvcjogVGhpcyBmaWxlIHdpbGwgbmV2ZXIgYmUgdmlzaWJsZSB0byB0aGUgdXNlciEpIgorbXNnc3RyICIiCisKKyMuICIiCittc2dpZCAiYW1lbmQiCittc2dzdHIgIs60zrnPjM+BzrjPic+DzrciCisKKyMuICIiCittc2dpZCAiYW5ub3RhdGUiCittc2dzdHIgIs+Dz4fOv867zrnOsc+DzrzPjM+CIgorCisjLiAiQSAnYnJhbmNoJyBpcyBhbiBhY3RpdmUgbGluZSBvZiBkZXZlbG9wbWVudC4iCittc2dpZCAiYnJhbmNoIFtub3VuXSIKK21zZ3N0ciAizrrOu86szrTOv8+CIFvOsc69z4TOuc66zrXOr868zrXOvc6/XSIKKworIy4gIiIKK21zZ2lkICJicmFuY2ggW3ZlcmJdIgorbXNnc3RyICLOtM65zrHOus67zqzOtM+Jz4POtyBbzrXOvc6tz4HOs861zrnOsV0iCisKKyMuICIiCittc2dpZCAiY2hlY2tvdXQgW25vdW5dIgorbXNnc3RyICLOtc6+zrHOs8+JzrPOriBbzrHOvc+EzrnOus61zq/OvM61zr3Ov10iCisKKyMuICJUaGUgYWN0aW9uIG9mIHVwZGF0aW5nIHRoZSB3b3JraW5nIHRyZWUgdG8gYSByZXZpc2lvbiB3aGljaCB3YXMgc3RvcmVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UuIgorbXNnaWQgImNoZWNrb3V0IFt2ZXJiXSIKK21zZ3N0ciAizrXOvs6xzrPPic6zzq4gW861zr3Orc+BzrPOtc65zrFdIgorCisjLiAiIgorbXNnaWQgImNsb25lIFt2ZXJiXSIKK21zZ3N0ciAizrrOu8+Jzr3Ov8+Azr/Or863z4POtyBbzrXOvc6tz4HOs861zrnOsV0iCisKKyMuICJBIHNpbmdsZSBwb2ludCBpbiB0aGUgZ2l0IGhpc3RvcnkuIgorbXNnaWQgImNvbW1pdCBbbm91bl0iCittc2dzdHIgIs+Fz4DOv86yzr/Ou86uIFvOsc69z4TOuc66zrXOr868zrXOvc6/XSAiCisKKyMuICJUaGUgYWN0aW9uIG9mIHN0b3JpbmcgYSBuZXcgc25hcHNob3Qgb2YgdGhlIHByb2plY3QncyBzdGF0ZSBpbiB0aGUgZ2l0IGhpc3RvcnkuIgorbXNnaWQgImNvbW1pdCBbdmVyYl0iCittc2dzdHIgIs+Fz4DOv86yzr/Ou86uIFvOtc69zq3Pgc6zzrXOuc6xXSIKKworIy4gIiIKK21zZ2lkICJkaWZmIFtub3VuXSIKK21zZ3N0ciAizrTOuc6xz4bOv8+BzqwgW86xzr3PhM65zrrOtc6vzrzOtc69zr9dICIKKworIy4gIiIKK21zZ2lkICJkaWZmIFt2ZXJiXSIKK21zZ3N0ciAizrTOuc6xz4bOv8+BzqwgW861zr3Orc+BzrPOtc65zrFdIgorCisjLiAiQSBmYXN0LWZvcndhcmQgaXMgYSBzcGVjaWFsIHR5cGUgb2YgbWVyZ2Ugd2hlcmUgeW91IGhhdmUgYSByZXZpc2lvbiBhbmQgeW91IGFyZSBtZXJnaW5nIGFub3RoZXIgYnJhbmNoJ3MgY2hhbmdlcyB0aGF0IGhhcHBlbiB0byBiZSBhIGRlc2NlbmRhbnQgb2Ygd2hhdCB5b3UgaGF2ZS4iCittc2dpZCAiZmFzdCBmb3J3YXJkIG1lcmdlIgorbXNnc3RyICLPg8+FzrPPh8+Ozr3Otc+Fz4POtyDOtc+AzrnPhM6sz4fPhc69z4POt8+CIgorCisjLiAiRmV0Y2hpbmcgYSBicmFuY2ggbWVhbnMgdG8gZ2V0IHRoZSBicmFuY2gncyBoZWFkIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgdG8gZmluZCBvdXQgd2hpY2ggb2JqZWN0cyBhcmUgbWlzc2luZyBmcm9tIHRoZSBsb2NhbCBvYmplY3QgZGF0YWJhc2UsIGFuZCB0byBnZXQgdGhlbSwgdG9vLiIKK21zZ2lkICJmZXRjaCIKK21zZ3N0ciAizrHOvc6szrrPhM63z4POtyIKKworIy4gIk9uZSBjb250ZXh0IG9mIGNvbnNlY3V0aXZlIGxpbmVzIGluIGEgd2hvbGUgcGF0Y2gsIHdoaWNoIGNvbnNpc3RzIG9mIG1hbnkgc3VjaCBodW5rcyIKK21zZ2lkICJodW5rIgorbXNnc3RyICLOus6/zrzOvM6sz4TOuSIKKworIy4gIkEgY29sbGVjdGlvbiBvZiBmaWxlcy4gVGhlIGluZGV4IGlzIGEgc3RvcmVkIHZlcnNpb24gb2YgeW91ciB3b3JraW5nIHRyZWUuIgorbXNnaWQgImluZGV4IChpbiBnaXQtZ3VpOiBzdGFnaW5nIGFyZWEpIgorbXNnc3RyICLOtc+Fz4HOtc+Ezq7Pgc65zr8gKM+Dz4TOvyBnaXQtZ3VpOiDPgM61z4HOuc6/z4fOriDPg8+EzrHOtM65zr/PgM6/zq/Ot8+DzrfPgikiCisKKyMuICJBIHN1Y2Nlc3NmdWwgbWVyZ2UgcmVzdWx0cyBpbiB0aGUgY3JlYXRpb24gb2YgYSBuZXcgY29tbWl0IHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZS4iCittc2dpZCAibWVyZ2UgW25vdW5dIgorbXNnc3RyICLPg8+FzrPPh8+Ozr3Otc+Fz4POtyBbzrHOvc+EzrnOus61zq/OvM61zr3Ov10iCisKKyMuICJUbyBicmluZyB0aGUgY29udGVudHMgb2YgYW5vdGhlciBicmFuY2ggaW50byB0aGUgY3VycmVudCBicmFuY2guIgorbXNnaWQgIm1lcmdlIFt2ZXJiXSIKK21zZ3N0ciAiz4PPhc6zz4fPjs69zrXPhc+DzrcgW861zr3Orc+BzrPOtc65zrFdIgorCisjLiAiIgorbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgIs68zq7Ovc+FzrzOsSIKKworIy4gIkRlbGV0ZXMgYWxsIHN0YWxlIHRyYWNraW5nIGJyYW5jaGVzIHVuZGVyIDxuYW1lPi4gVGhlc2Ugc3RhbGUgYnJhbmNoZXMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSByZW1vdGUgcmVwb3NpdG9yeSByZWZlcmVuY2VkIGJ5IDxuYW1lPiwgYnV0IGFyZSBzdGlsbCBsb2NhbGx5IGF2YWlsYWJsZSBpbiAncmVtb3Rlcy88bmFtZT4nLiIKK21zZ2lkICJwcnVuZSIKK21zZ3N0ciAizrrOu86szrTOtc68zrEiCisKKyMuICJQdWxsaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGZldGNoIGl0IGFuZCBtZXJnZSBpdC4iCittc2dpZCAicHVsbCIKK21zZ3N0ciAizrvOrs+IzrciCisKKyMuICJQdXNoaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGdldCB0aGUgYnJhbmNoJ3MgaGVhZCByZWYgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LCBhbmQgLi4uICh3ZWxsLCBjYW4gc29tZW9uZSBwbGVhc2UgZXhwbGFpbiBpdCBmb3IgbWVyZSBtb3J0YWxzPykiCittc2dpZCAicHVzaCIKK21zZ3N0ciAiz47OuM63z4POtyIKKworIy4gIiIKK21zZ2lkICJyZWRvIgorbXNnc3RyICLOvs6xzr3OrCIKKworIy4gIkFuIG90aGVyIHJlcG9zaXRvcnkgKCdyZW1vdGUnKS4gT25lIG1pZ2h0IGhhdmUgYSBzZXQgb2YgcmVtb3RlcyB3aG9zZSBicmFuY2hlcyBvbmUgdHJhY2tzLiIKK21zZ2lkICJyZW1vdGUiCittc2dzdHIgIs6xz4DOv868zrHOus+Bz4XPg868zq3Ovc6/IgorCisjLiAiQSBjb2xsZWN0aW9uIG9mIHJlZnMgKD8pIHRvZ2V0aGVyIHdpdGggYW4gb2JqZWN0IGRhdGFiYXNlIGNvbnRhaW5pbmcgYWxsIG9iamVjdHMgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSByZWZzLi4uIChvb3BzLCB5b3UndmUgbG9zdCBtZSBoZXJlLiBBZ2FpbiwgcGxlYXNlIGFuIGV4cGxhbmF0aW9uIGZvciBtZXJlIG1vcnRhbHM/KSIKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICLOsc+Azr/OuM61z4TOrs+BzrnOvyIKKworIy4gIiIKK21zZ2lkICJyZXNldCIKK21zZ3N0ciAizrXPgM6xzr3Osc+Gzr/Pgc6sIgorCisjLiAiIgorbXNnaWQgInJldmVydCIKK21zZ3N0ciAizrHOvc6xzq/Pgc61z4POtyIKKworIy4gIkEgcGFydGljdWxhciBzdGF0ZSBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2hpY2ggd2FzIHN0b3JlZCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiIKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAizrHOvc6xzrjOtc+Oz4HOt8+DzrciCisKKyMuICIiCisjLCBmdXp6eQorbXNnaWQgInNpZ24gb2ZmIgorbXNnc3RyICLOsc+Azr/Pg8+Nzr3OtM61z4POtyIKKworIy4gIiIKK21zZ2lkICJzdGFnaW5nIGFyZWEiCittc2dzdHIgIs+AzrXPgc65zr/Ph86uIM+Dz4TOsc60zrnOv8+Azr/Or863z4POt8+CIgorCisjLiAiIgorbXNnaWQgInN0YXR1cyIKK21zZ3N0ciAizrrOsc+EzqzPg8+EzrHPg863IgorCisjLiAiQSByZWYgcG9pbnRpbmcgdG8gYSB0YWcgb3IgY29tbWl0IG9iamVjdCIKK21zZ2lkICJ0YWcgW25vdW5dIgorbXNnc3RyICLOtc+EzrnOus6tz4TOsSBbzrHOvc+EzrnOus61zq/OvM61zr3Ov10iCisKKyMuICIiCittc2dpZCAidGFnIFt2ZXJiXSIKK21zZ3N0ciAizrXPhM65zrrOrc+EzrEgW861zr3Orc+BzrPOtc65zrFdIgorCisjLiAiQSByZWd1bGFyIGdpdCBicmFuY2ggdGhhdCBpcyB1c2VkIHRvIGZvbGxvdyBjaGFuZ2VzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5LiIKK21zZ2lkICJ0cmFja2luZyBicmFuY2giCittc2dzdHIgIs66zrvOrM60zr/PgiDPgM6xz4HOsc66zr/Ou86/z43OuM63z4POt8+CIgorCisjLiAiIgorbXNnaWQgInVuZG8iCittc2dzdHIgIs6xzr3Osc6vz4HOtc+DzrciCisKKyMuICIiCittc2dpZCAidXBkYXRlIgorbXNnc3RyICLOtc69zrfOvM6tz4HPic+DzrciCisKKyMuICIiCittc2dpZCAidmVyaWZ5IgorbXNnc3RyICLOtc+AzrHOu86uzrjOtc+Fz4POtyIKKworIy4gIlRoZSB0cmVlIG9mIGFjdHVhbCBjaGVja2VkIG91dCBmaWxlcy4iCittc2dpZCAid29ya2luZyBjb3B5LCB3b3JraW5nIHRyZWUiCittc2dzdHIgIs6xzr3PhM6vzrPPgc6xz4bOvyDOtc+BzrPOsc+Dzq/Osc+CIgorCisKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZnIucG8gYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2ZyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YzAwNmEKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2ZyLnBvCkBAIC0wLDAgKzEsMTY2IEBACisjIHRyYW5zbGF0aW9uIG9mIGZyLnBvIHRvIEZyZW5jaAorIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIGdsb3NzYXJ5IHRvIEZyZW5jaAorIyBDb3B5cmlnaHQgKEMpIDIwMDggU2hhd24gUGVhcmNlLCBldCBhbC4KKyMKKyMgQ2hyaXN0aWFuIENvdWRlciA8Y2hyaXNjb29sQHR1eGZhbWlseS5vcmc+LCAyMDA4LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZnJcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOC0wMS0xNSAyMTowNCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wMS0xNSAyMToxNyswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBDaHJpc3RpYW4gQ291ZGVyIDxjaHJpc2Nvb2xAdHV4ZmFtaWx5Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBGcmVuY2hcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLUdlbmVyYXRvcjogS0JhYmVsIDEuMTEuNFxuIgorIlBsdXJhbC1Gb3JtczogIG5wbHVyYWxzPTI7IHBsdXJhbD0obiA+IDEpO1xuIgorCisjLiAiRW5nbGlzaCBEZWZpbml0aW9uIChEZWFyIHRyYW5zbGF0b3I6IFRoaXMgZmlsZSB3aWxsIG5ldmVyIGJlIHZpc2libGUgdG8gdGhlIHVzZXIhIEl0IHNob3VsZCBvbmx5IHNlcnZlIGFzIGEgdG9vbCBmb3IgeW91LCB0aGUgdHJhbnNsYXRvci4gTm90aGluZyBtb3JlLikiCittc2dpZCAiRW5nbGlzaCBUZXJtIChEZWFyIHRyYW5zbGF0b3I6IFRoaXMgZmlsZSB3aWxsIG5ldmVyIGJlIHZpc2libGUgdG8gdGhlIHVzZXIhKSIKK21zZ3N0ciAiIgorCisjLiAiIgorbXNnaWQgImFtZW5kIgorbXNnc3RyICJjb3JyaWdlciIKKworIy4gIiIKK21zZ2lkICJhbm5vdGF0ZSIKK21zZ3N0ciAiYW5ub3RlciIKKworIy4gIkEgJ2JyYW5jaCcgaXMgYW4gYWN0aXZlIGxpbmUgb2YgZGV2ZWxvcG1lbnQuIgorbXNnaWQgImJyYW5jaCBbbm91bl0iCittc2dzdHIgImJyYW5jaGUiCisKKyMuICIiCittc2dpZCAiYnJhbmNoIFt2ZXJiXSIKK21zZ3N0ciAiY3LDqWVyIHVuZSBicmFuY2hlIgorCisjLiAiIgorbXNnaWQgImNoZWNrb3V0IFtub3VuXSIKK21zZ3N0ciAiZW1wcnVudCIKKworIy4gIlRoZSBhY3Rpb24gb2YgdXBkYXRpbmcgdGhlIHdvcmtpbmcgdHJlZSB0byBhIHJldmlzaW9uIHdoaWNoIHdhcyBzdG9yZWQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZS4iCittc2dpZCAiY2hlY2tvdXQgW3ZlcmJdIgorbXNnc3RyICJlbXBydW50ZXIiCisKKyMuICIiCittc2dpZCAiY2xvbmUgW3ZlcmJdIgorbXNnc3RyICJjbG9uZXIiCisKKyMuICJBIHNpbmdsZSBwb2ludCBpbiB0aGUgZ2l0IGhpc3RvcnkuIgorbXNnaWQgImNvbW1pdCBbbm91bl0iCittc2dzdHIgImNvbW1pdCIKKworIy4gIlRoZSBhY3Rpb24gb2Ygc3RvcmluZyBhIG5ldyBzbmFwc2hvdCBvZiB0aGUgcHJvamVjdCdzIHN0YXRlIGluIHRoZSBnaXQgaGlzdG9yeS4iCittc2dpZCAiY29tbWl0IFt2ZXJiXSIKK21zZ3N0ciAiY29tbWl0ZXIiCisKKyMuICIiCittc2dpZCAiZGlmZiBbbm91bl0iCittc2dzdHIgImRpZmbDqXJlbmNlIgorCisjLiAiIgorbXNnaWQgImRpZmYgW3ZlcmJdIgorbXNnc3RyICJjb21wYXJlciIKKworIy4gIkEgZmFzdC1mb3J3YXJkIGlzIGEgc3BlY2lhbCB0eXBlIG9mIG1lcmdlIHdoZXJlIHlvdSBoYXZlIGEgcmV2aXNpb24gYW5kIHlvdSBhcmUgbWVyZ2luZyBhbm90aGVyIGJyYW5jaCdzIGNoYW5nZXMgdGhhdCBoYXBwZW4gdG8gYmUgYSBkZXNjZW5kYW50IG9mIHdoYXQgeW91IGhhdmUuIgorbXNnaWQgImZhc3QgZm9yd2FyZCBtZXJnZSIKK21zZ3N0ciAiZnVzaW9uIHBhciBhdmFuY2UgcmFwaWRlIgorCisjLiAiRmV0Y2hpbmcgYSBicmFuY2ggbWVhbnMgdG8gZ2V0IHRoZSBicmFuY2gncyBoZWFkIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgdG8gZmluZCBvdXQgd2hpY2ggb2JqZWN0cyBhcmUgbWlzc2luZyBmcm9tIHRoZSBsb2NhbCBvYmplY3QgZGF0YWJhc2UsIGFuZCB0byBnZXQgdGhlbSwgdG9vLiIKK21zZ2lkICJmZXRjaCIKK21zZ3N0ciAicsOpY3Vww6lyZXIiCisKKyMuICJBIGNvbGxlY3Rpb24gb2YgZmlsZXMuIFRoZSBpbmRleCBpcyBhIHN0b3JlZCB2ZXJzaW9uIG9mIHlvdXIgd29ya2luZyB0cmVlLiIKK21zZ2lkICJpbmRleCAoaW4gZ2l0LWd1aTogc3RhZ2luZyBhcmVhKSIKK21zZ3N0ciAicHLDqS1jb21taXQiCisKKyMuICJBIHN1Y2Nlc3NmdWwgbWVyZ2UgcmVzdWx0cyBpbiB0aGUgY3JlYXRpb24gb2YgYSBuZXcgY29tbWl0IHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZS4iCittc2dpZCAibWVyZ2UgW25vdW5dIgorbXNnc3RyICJmdXNpb24iCisKKyMuICJUbyBicmluZyB0aGUgY29udGVudHMgb2YgYW5vdGhlciBicmFuY2ggaW50byB0aGUgY3VycmVudCBicmFuY2guIgorbXNnaWQgIm1lcmdlIFt2ZXJiXSIKK21zZ3N0ciAiZnVzaW9ubmVyIgorCisjLiAiIgorbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgIm1lc3NhZ2UiCisKKyMuICJEZWxldGVzIGFsbCBzdGFsZSB0cmFja2luZyBicmFuY2hlcyB1bmRlciA8bmFtZT4uIFRoZXNlIHN0YWxlIGJyYW5jaGVzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgcmVmZXJlbmNlZCBieSA8bmFtZT4sIGJ1dCBhcmUgc3RpbGwgbG9jYWxseSBhdmFpbGFibGUgaW4gJ3JlbW90ZXMvPG5hbWU+Jy4iCittc2dpZCAicHJ1bmUiCittc2dzdHIgIm5ldHRveWVyIgorCisjLiAiUHVsbGluZyBhIGJyYW5jaCBtZWFucyB0byBmZXRjaCBpdCBhbmQgbWVyZ2UgaXQuIgorbXNnaWQgInB1bGwiCittc2dzdHIgInRpcmVyIgorCisjLiAiUHVzaGluZyBhIGJyYW5jaCBtZWFucyB0byBnZXQgdGhlIGJyYW5jaCdzIGhlYWQgcmVmIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgYW5kIC4uLiAod2VsbCwgY2FuIHNvbWVvbmUgcGxlYXNlIGV4cGxhaW4gaXQgZm9yIG1lcmUgbW9ydGFscz8pIgorbXNnaWQgInB1c2giCittc2dzdHIgInBvdXNzZXIiCisKKyMuICIiCittc2dpZCAicmVkbyIKK21zZ3N0ciAicmVmYWlyZSIKKworIy4gIkFuIG90aGVyIHJlcG9zaXRvcnkgKCdyZW1vdGUnKS4gT25lIG1pZ2h0IGhhdmUgYSBzZXQgb2YgcmVtb3RlcyB3aG9zZSBicmFuY2hlcyBvbmUgdHJhY2tzLiIKK21zZ2lkICJyZW1vdGUiCittc2dzdHIgInLDqWbDqXJlbnRpZWwgZGlzdGFudCIKKworIy4gIkEgY29sbGVjdGlvbiBvZiByZWZzICg/KSB0b2dldGhlciB3aXRoIGFuIG9iamVjdCBkYXRhYmFzZSBjb250YWluaW5nIGFsbCBvYmplY3RzIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB0aGUgcmVmcy4uLiAob29wcywgeW91J3ZlIGxvc3QgbWUgaGVyZS4gQWdhaW4sIHBsZWFzZSBhbiBleHBsYW5hdGlvbiBmb3IgbWVyZSBtb3J0YWxzPykiCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAicsOpZsOpcmVudGllbCIKKworIy4gIiIKK21zZ2lkICJyZXNldCIKK21zZ3N0ciAicsOpaW5pdGlhbGlzZXIiCisKKyMuICIiCittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICJpbnZlcnNlciIKKworIy4gIkEgcGFydGljdWxhciBzdGF0ZSBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2hpY2ggd2FzIHN0b3JlZCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiIKK21zZ2lkICJyZXZpc2lvbiIKK21zZ3N0ciAicsOpdmlzaW9uIgorCisjLiAiIgorbXNnaWQgInNpZ24gb2ZmIgorbXNnc3RyICJzaWduZXIiCisKKyMuICIiCittc2dpZCAic3RhZ2luZyBhcmVhIgorbXNnc3RyICJwcsOpLWNvbW1pdCIKKworIy4gIiIKK21zZ2lkICJzdGF0dXMiCittc2dzdHIgIsOpdGF0IgorCisjLiAiQSByZWYgcG9pbnRpbmcgdG8gYSB0YWcgb3IgY29tbWl0IG9iamVjdCIKK21zZ2lkICJ0YWcgW25vdW5dIgorbXNnc3RyICJtYXJxdWUiCisKKyMuICIiCittc2dpZCAidGFnIFt2ZXJiXSIKK21zZ3N0ciAibWFycXVlciIKKworIy4gIkEgcmVndWxhciBnaXQgYnJhbmNoIHRoYXQgaXMgdXNlZCB0byBmb2xsb3cgY2hhbmdlcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeS4iCittc2dpZCAidHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJicmFuY2hlIGRlIHN1aXZpIgorCisjLiAiIgorbXNnaWQgInVuZG8iCittc2dzdHIgImTDqWZhaXJlIgorCisjLiAiIgorbXNnaWQgInVwZGF0ZSIKK21zZ3N0ciAibWlzZSDDoCBqb3VyIgorCisjLiAiIgorbXNnaWQgInZlcmlmeSIKK21zZ3N0ciAidsOpcmlmaWVyIgorCisjLiAiVGhlIHRyZWUgb2YgYWN0dWFsIGNoZWNrZWQgb3V0IGZpbGVzLiIKK21zZ2lkICJ3b3JraW5nIGNvcHksIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiY29waWUgZGUgdHJhdmFpbCwgYXJib3Jlc2NlbmNlIGRlIHRyYXZhaWwiCisKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vZ2xvc3NhcnkvZ2l0LWd1aS1nbG9zc2FyeS5wb3QgYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2dpdC1ndWktZ2xvc3NhcnkucG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZWIzZTkKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2dpdC1ndWktZ2xvc3NhcnkucG90CkBAIC0wLDAgKzEsMTY4IEBACisjIFNPTUUgREVTQ1JJUFRJVkUgVElUTEUuCisjIENvcHlyaWdodCAoQykgWUVBUiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgRklSU1QgQVVUSE9SIDxFTUFJTEBBRERSRVNTPiwgWUVBUi4KKyMKKyMsIGZ1enp5Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBQQUNLQUdFIFZFUlNJT05cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOC0wMS0wNyAyMToyMCswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogWUVBUi1NTy1EQSBITzpNSStaT05FXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBGVUxMIE5BTUUgPEVNQUlMQEFERFJFU1M+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTEFOR1VBR0UgPExMQGxpLm9yZz5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1DSEFSU0VUXG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogRU5DT0RJTkdcbiIKKworIy4gIkVuZ2xpc2ggRGVmaW5pdGlvbiAoRGVhciB0cmFuc2xhdG9yOiBUaGlzIGZpbGUgd2lsbCBuZXZlciBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyISBJdCBzaG91bGQgb25seSBzZXJ2ZSBhcyBhIHRvb2wgZm9yIHlvdSwgdGhlIHRyYW5zbGF0b3IuIE5vdGhpbmcgbW9yZS4pIgorbXNnaWQgIkVuZ2xpc2ggVGVybSAoRGVhciB0cmFuc2xhdG9yOiBUaGlzIGZpbGUgd2lsbCBuZXZlciBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyISkiCittc2dzdHIgIiIKKworIy4gIiIKK21zZ2lkICJhbWVuZCIKK21zZ3N0ciAiIgorCisjLiAiIgorbXNnaWQgImFubm90YXRlIgorbXNnc3RyICIiCisKKyMuICJBICdicmFuY2gnIGlzIGFuIGFjdGl2ZSBsaW5lIG9mIGRldmVsb3BtZW50LiIKK21zZ2lkICJicmFuY2ggW25vdW5dIgorbXNnc3RyICIiCisKKyMuICIiCittc2dpZCAiYnJhbmNoIFt2ZXJiXSIKK21zZ3N0ciAiIgorCisjLiAiIgorbXNnaWQgImNoZWNrb3V0IFtub3VuXSIKK21zZ3N0ciAiIgorCisjLiAiVGhlIGFjdGlvbiBvZiB1cGRhdGluZyB0aGUgd29ya2luZyB0cmVlIHRvIGEgcmV2aXNpb24gd2hpY2ggd2FzIHN0b3JlZCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiIKK21zZ2lkICJjaGVja291dCBbdmVyYl0iCittc2dzdHIgIiIKKworIy4gIiIKK21zZ2lkICJjbG9uZSBbdmVyYl0iCittc2dzdHIgIiIKKworIy4gIkEgc2luZ2xlIHBvaW50IGluIHRoZSBnaXQgaGlzdG9yeS4iCittc2dpZCAiY29tbWl0IFtub3VuXSIKK21zZ3N0ciAiIgorCisjLiAiVGhlIGFjdGlvbiBvZiBzdG9yaW5nIGEgbmV3IHNuYXBzaG90IG9mIHRoZSBwcm9qZWN0J3Mgc3RhdGUgaW4gdGhlIGdpdCBoaXN0b3J5LiIKK21zZ2lkICJjb21taXQgW3ZlcmJdIgorbXNnc3RyICIiCisKKyMuICIiCittc2dpZCAiZGlmZiBbbm91bl0iCittc2dzdHIgIiIKKworIy4gIiIKK21zZ2lkICJkaWZmIFt2ZXJiXSIKK21zZ3N0ciAiIgorCisjLiAiQSBmYXN0LWZvcndhcmQgaXMgYSBzcGVjaWFsIHR5cGUgb2YgbWVyZ2Ugd2hlcmUgeW91IGhhdmUgYSByZXZpc2lvbiBhbmQgeW91IGFyZSBtZXJnaW5nIGFub3RoZXIgYnJhbmNoJ3MgY2hhbmdlcyB0aGF0IGhhcHBlbiB0byBiZSBhIGRlc2NlbmRhbnQgb2Ygd2hhdCB5b3UgaGF2ZS4iCittc2dpZCAiZmFzdCBmb3J3YXJkIG1lcmdlIgorbXNnc3RyICIiCisKKyMuICJGZXRjaGluZyBhIGJyYW5jaCBtZWFucyB0byBnZXQgdGhlIGJyYW5jaCdzIGhlYWQgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LCB0byBmaW5kIG91dCB3aGljaCBvYmplY3RzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGxvY2FsIG9iamVjdCBkYXRhYmFzZSwgYW5kIHRvIGdldCB0aGVtLCB0b28uIgorbXNnaWQgImZldGNoIgorbXNnc3RyICIiCisKKyMuICJPbmUgY29udGV4dCBvZiBjb25zZWN1dGl2ZSBsaW5lcyBpbiBhIHdob2xlIHBhdGNoLCB3aGljaCBjb25zaXN0cyBvZiBtYW55IHN1Y2ggaHVua3MiCittc2dpZCAiaHVuayIKK21zZ3N0ciAiIgorCisjLiAiQSBjb2xsZWN0aW9uIG9mIGZpbGVzLiBUaGUgaW5kZXggaXMgYSBzdG9yZWQgdmVyc2lvbiBvZiB5b3VyIHdvcmtpbmcgdHJlZS4iCittc2dpZCAiaW5kZXggKGluIGdpdC1ndWk6IHN0YWdpbmcgYXJlYSkiCittc2dzdHIgIiIKKworIy4gIkEgc3VjY2Vzc2Z1bCBtZXJnZSByZXN1bHRzIGluIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBjb21taXQgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLiIKK21zZ2lkICJtZXJnZSBbbm91bl0iCittc2dzdHIgIiIKKworIy4gIlRvIGJyaW5nIHRoZSBjb250ZW50cyBvZiBhbm90aGVyIGJyYW5jaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dpZCAibWVyZ2UgW3ZlcmJdIgorbXNnc3RyICIiCisKKyMuICIiCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAiIgorCisjLiAiRGVsZXRlcyBhbGwgc3RhbGUgdHJhY2tpbmcgYnJhbmNoZXMgdW5kZXIgPG5hbWU+LiBUaGVzZSBzdGFsZSBicmFuY2hlcyBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHJlZmVyZW5jZWQgYnkgPG5hbWU+LCBidXQgYXJlIHN0aWxsIGxvY2FsbHkgYXZhaWxhYmxlIGluICdyZW1vdGVzLzxuYW1lPicuIgorbXNnaWQgInBydW5lIgorbXNnc3RyICIiCisKKyMuICJQdWxsaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGZldGNoIGl0IGFuZCBtZXJnZSBpdC4iCittc2dpZCAicHVsbCIKK21zZ3N0ciAiIgorCisjLiAiUHVzaGluZyBhIGJyYW5jaCBtZWFucyB0byBnZXQgdGhlIGJyYW5jaCdzIGhlYWQgcmVmIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgYW5kIC4uLiAod2VsbCwgY2FuIHNvbWVvbmUgcGxlYXNlIGV4cGxhaW4gaXQgZm9yIG1lcmUgbW9ydGFscz8pIgorbXNnaWQgInB1c2giCittc2dzdHIgIiIKKworIy4gIiIKK21zZ2lkICJyZWRvIgorbXNnc3RyICIiCisKKyMuICJBbiBvdGhlciByZXBvc2l0b3J5ICgncmVtb3RlJykuIE9uZSBtaWdodCBoYXZlIGEgc2V0IG9mIHJlbW90ZXMgd2hvc2UgYnJhbmNoZXMgb25lIHRyYWNrcy4iCittc2dpZCAicmVtb3RlIgorbXNnc3RyICIiCisKKyMuICJBIGNvbGxlY3Rpb24gb2YgcmVmcyAoPykgdG9nZXRoZXIgd2l0aCBhbiBvYmplY3QgZGF0YWJhc2UgY29udGFpbmluZyBhbGwgb2JqZWN0cyB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIHJlZnMuLi4gKG9vcHMsIHlvdSd2ZSBsb3N0IG1lIGhlcmUuIEFnYWluLCBwbGVhc2UgYW4gZXhwbGFuYXRpb24gZm9yIG1lcmUgbW9ydGFscz8pIgorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIy4gIiIKK21zZ2lkICJyZXNldCIKK21zZ3N0ciAiIgorCisjLiAiIgorbXNnaWQgInJldmVydCIKK21zZ3N0ciAiIgorCisjLiAiQSBwYXJ0aWN1bGFyIHN0YXRlIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aGljaCB3YXMgc3RvcmVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UuIgorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICIiCisKKyMuICIiCittc2dpZCAic2lnbiBvZmYiCittc2dzdHIgIiIKKworIy4gIiIKK21zZ2lkICJzdGFnaW5nIGFyZWEiCittc2dzdHIgIiIKKworIy4gIiIKK21zZ2lkICJzdGF0dXMiCittc2dzdHIgIiIKKworIy4gIkEgcmVmIHBvaW50aW5nIHRvIGEgdGFnIG9yIGNvbW1pdCBvYmplY3QiCittc2dpZCAidGFnIFtub3VuXSIKK21zZ3N0ciAiIgorCisjLiAiIgorbXNnaWQgInRhZyBbdmVyYl0iCittc2dzdHIgIiIKKworIy4gIkEgcmVndWxhciBnaXQgYnJhbmNoIHRoYXQgaXMgdXNlZCB0byBmb2xsb3cgY2hhbmdlcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeS4iCittc2dpZCAidHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisKKyMuICIiCittc2dpZCAidW5kbyIKK21zZ3N0ciAiIgorCisjLiAiIgorbXNnaWQgInVwZGF0ZSIKK21zZ3N0ciAiIgorCisjLiAiIgorbXNnaWQgInZlcmlmeSIKK21zZ3N0ciAiIgorCisjLiAiVGhlIHRyZWUgb2YgYWN0dWFsIGNoZWNrZWQgb3V0IGZpbGVzLiIKK21zZ2lkICJ3b3JraW5nIGNvcHksIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2dsb3NzYXJ5L2dpdC1ndWktZ2xvc3NhcnkudHh0IGIvZ2l0LWd1aS9wby9nbG9zc2FyeS9naXQtZ3VpLWdsb3NzYXJ5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDkzMDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9nbG9zc2FyeS9naXQtZ3VpLWdsb3NzYXJ5LnR4dApAQCAtMCwwICsxLDY3IEBACisiRW5nbGlzaCBUZXJtIChEZWFyIHRyYW5zbGF0b3I6IFRoaXMgZmlsZSB3aWxsIG5ldmVyIGJlIHZpc2libGUgdG8gdGhlIHVzZXIhKSIJIkVuZ2xpc2ggRGVmaW5pdGlvbiAoRGVhciB0cmFuc2xhdG9yOiBUaGlzIGZpbGUgd2lsbCBuZXZlciBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyISBJdCBzaG91bGQgb25seSBzZXJ2ZSBhcyBhIHRvb2wgZm9yIHlvdSwgdGhlIHRyYW5zbGF0b3IuIE5vdGhpbmcgbW9yZS4pIgorImFtZW5kIgkiIgorImFubm90YXRlIgkiIgorImJyYW5jaCBbbm91bl0iCSJBICdicmFuY2gnIGlzIGFuIGFjdGl2ZSBsaW5lIG9mIGRldmVsb3BtZW50LiIKKyJicmFuY2ggW3ZlcmJdIgkiIgorImNoZWNrb3V0IFtub3VuXSIJIiIKKyJjaGVja291dCBbdmVyYl0iCSJUaGUgYWN0aW9uIG9mIHVwZGF0aW5nIHRoZSB3b3JraW5nIHRyZWUgdG8gYSByZXZpc2lvbiB3aGljaCB3YXMgc3RvcmVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UuIgorImNsb25lIFt2ZXJiXSIJIiIKKyJjb21taXQgW25vdW5dIgkiQSBzaW5nbGUgcG9pbnQgaW4gdGhlIGdpdCBoaXN0b3J5LiIKKyJjb21taXQgW3ZlcmJdIgkiVGhlIGFjdGlvbiBvZiBzdG9yaW5nIGEgbmV3IHNuYXBzaG90IG9mIHRoZSBwcm9qZWN0J3Mgc3RhdGUgaW4gdGhlIGdpdCBoaXN0b3J5LiIKKyJkaWZmIFtub3VuXSIJIiIKKyJkaWZmIFt2ZXJiXSIJIiIKKyJmYXN0IGZvcndhcmQgbWVyZ2UiCSJBIGZhc3QtZm9yd2FyZCBpcyBhIHNwZWNpYWwgdHlwZSBvZiBtZXJnZSB3aGVyZSB5b3UgaGF2ZSBhIHJldmlzaW9uIGFuZCB5b3UgYXJlIG1lcmdpbmcgYW5vdGhlciBicmFuY2gncyBjaGFuZ2VzIHRoYXQgaGFwcGVuIHRvIGJlIGEgZGVzY2VuZGFudCBvZiB3aGF0IHlvdSBoYXZlLiIKKyJmZXRjaCIJIkZldGNoaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGdldCB0aGUgYnJhbmNoJ3MgaGVhZCBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnksIHRvIGZpbmQgb3V0IHdoaWNoIG9iamVjdHMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgbG9jYWwgb2JqZWN0IGRhdGFiYXNlLCBhbmQgdG8gZ2V0IHRoZW0sIHRvby4iCisiaHVuayIJIk9uZSBjb250ZXh0IG9mIGNvbnNlY3V0aXZlIGxpbmVzIGluIGEgd2hvbGUgcGF0Y2gsIHdoaWNoIGNvbnNpc3RzIG9mIG1hbnkgc3VjaCBodW5rcyIKKyJpbmRleCAoaW4gZ2l0LWd1aTogc3RhZ2luZyBhcmVhKSIJIkEgY29sbGVjdGlvbiBvZiBmaWxlcy4gVGhlIGluZGV4IGlzIGEgc3RvcmVkIHZlcnNpb24gb2YgeW91ciB3b3JraW5nIHRyZWUuIgorIm1lcmdlIFtub3VuXSIJIkEgc3VjY2Vzc2Z1bCBtZXJnZSByZXN1bHRzIGluIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBjb21taXQgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLiIKKyJtZXJnZSBbdmVyYl0iCSJUbyBicmluZyB0aGUgY29udGVudHMgb2YgYW5vdGhlciBicmFuY2ggaW50byB0aGUgY3VycmVudCBicmFuY2guIgorIm1lc3NhZ2UiCSIiCisicHJ1bmUiCSJEZWxldGVzIGFsbCBzdGFsZSB0cmFja2luZyBicmFuY2hlcyB1bmRlciA8bmFtZT4uIFRoZXNlIHN0YWxlIGJyYW5jaGVzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgcmVmZXJlbmNlZCBieSA8bmFtZT4sIGJ1dCBhcmUgc3RpbGwgbG9jYWxseSBhdmFpbGFibGUgaW4gJ3JlbW90ZXMvPG5hbWU+Jy4iCisicHVsbCIJIlB1bGxpbmcgYSBicmFuY2ggbWVhbnMgdG8gZmV0Y2ggaXQgYW5kIG1lcmdlIGl0LiIKKyJwdXNoIgkiUHVzaGluZyBhIGJyYW5jaCBtZWFucyB0byBnZXQgdGhlIGJyYW5jaCdzIGhlYWQgcmVmIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgYW5kIC4uLiAod2VsbCwgY2FuIHNvbWVvbmUgcGxlYXNlIGV4cGxhaW4gaXQgZm9yIG1lcmUgbW9ydGFscz8pIgorInJlZG8iCSIiCisicmVtb3RlIgkiQW4gb3RoZXIgcmVwb3NpdG9yeSAoJ3JlbW90ZScpLiBPbmUgbWlnaHQgaGF2ZSBhIHNldCBvZiByZW1vdGVzIHdob3NlIGJyYW5jaGVzIG9uZSB0cmFja3MuIgorInJlcG9zaXRvcnkiCSJBIGNvbGxlY3Rpb24gb2YgcmVmcyAoPykgdG9nZXRoZXIgd2l0aCBhbiBvYmplY3QgZGF0YWJhc2UgY29udGFpbmluZyBhbGwgb2JqZWN0cyB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIHJlZnMuLi4gKG9vcHMsIHlvdSd2ZSBsb3N0IG1lIGhlcmUuIEFnYWluLCBwbGVhc2UgYW4gZXhwbGFuYXRpb24gZm9yIG1lcmUgbW9ydGFscz8pIgorInJlc2V0IgkiIgorInJldmVydCIJIiIKKyJyZXZpc2lvbiIJIkEgcGFydGljdWxhciBzdGF0ZSBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgd2hpY2ggd2FzIHN0b3JlZCBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlLiIKKyJzaWduIG9mZiIJIiIKKyJzdGFnaW5nIGFyZWEiCSIiCisic3RhdHVzIgkiIgorInRhZyBbbm91bl0iCSJBIHJlZiBwb2ludGluZyB0byBhIHRhZyBvciBjb21taXQgb2JqZWN0IgorInRhZyBbdmVyYl0iCSIiCisidHJhY2tpbmcgYnJhbmNoIgkiQSByZWd1bGFyIGdpdCBicmFuY2ggdGhhdCBpcyB1c2VkIHRvIGZvbGxvdyBjaGFuZ2VzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5LiIKKyJ1bmRvIgkiIgorInVwZGF0ZSIJIiIKKyJ2ZXJpZnkiCSIiCisid29ya2luZyBjb3B5LCB3b3JraW5nIHRyZWUiCSJUaGUgdHJlZSBvZiBhY3R1YWwgY2hlY2tlZCBvdXQgZmlsZXMuIgorImFuY2VzdG9yIgkiYSBjb21taXQgdGhhdCBzdWNjZWVkcyB0aGUgY3VycmVudCBvbmUgaW4gZ2l0J3MgZ3JhcGggb2YgY29tbWl0cyAobm90IG5lY2Vzc2FyaWx5IGRpcmVjdGx5KSIKKyJhYm9ydCIJInByZW1hdHVyZWx5IHN0b3AgYW5kIGFiYW5kb24gYW4gb3BlcmF0aW9uIgorImJhcmUgcmVwb3NpdG9yeSIJImEgcmVwb3NpdG9yeSB3aXRoIG9ubHkgLmdpdCBkaXJlY3RvcnksIHdpdGhvdXQgd29ya2luZyBkaXJlY3RvcnkiCisiYmFzZSIJImEgcGFyZW50IHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgZmlsZSIKKyJibGFtZSIJImdldCB0aGUgYXV0aG9ycyByZXNwb25zaWJsZSBmb3IgZWFjaCBsaW5lIGluIGEgZmlsZSIKKyJjaGVycnktcGljayIJInRvIHNlbGVjdCBhbmQgYXBwbHkgYSBzaW5nbGUgY29tbWl0IHdpdGhvdXQgbWVyZ2luZyIKKyJjaGlsZCIJImEgY29tbWl0IHRoYXQgZGlyZWN0bHkgc3VjY2VlZHMgdGhlIGN1cnJlbnQgb25lIGluIGdpdCdzIGdyYXBoIG9mIGNvbW1pdHMiCisiY2xlYW51cCIJImNsZWFuIHRoZSBzdGF0ZSBvZiB0aGUgZ2l0IHJlcG9zaXRvcnksIG9mdGVuIGFmdGVyIG1hbnVhbGx5IHN0b3BwZWQgb3BlcmF0aW9uIgorImNvbW1pdCBtZXNzYWdlIgkiYSBtZXNzYWdlIHRoYXQgZ2V0cyBhdHRhY2hlZCB3aXRoIGFueSBjb21taXQiCisiZGVzY2VuZGFudCIJImEgY29tbWl0IHRoYXQgcHJlY2VkZXMgdGhlIGN1cnJlbnQgb25lIGluIGdpdCdzIGdyYXBoIG9mIGNvbW1pdHMgKG5vdCBuZWNlc3NhcmlseSBkaXJlY3RseSkiCisiZGV0YWNoZWQgY2hlY2tvdXQiCSJjaGVja291dCBvZiBhIHJldmlzaW9uIHJhdGhlciB0aGFuIGEgc29tZSBoZWFkIgorImZpbGUgbGV2ZWwgbWVyZ2luZyIJImFueSBtZXJnZSBzdHJhdGVneSB0aGF0IHdvcmtzIG9uIGEgZmlsZSBieSBmaWxlIGJhc2lzIgorImhlYWQiCSJ0aGUgbGFzdCByZXZpc2lvbiBpbiBhIGJyYW5jaCIKKyJob29rIgkic2NyaXB0IHRoYXQgZ2V0cyBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IG9uIHNvbWUgZXZlbnQiCisiaW5pdGlhbCBjaGVja291dCIJInRoZSBmaXJzdCBjaGVja291dCBkdXJpbmcgYSBjbG9uZSBvcGVyYXRpb24iCisibG9jYWwgYnJhbmNoIgkiYSBicmFuY2ggdGhhdCByZXNpZGVzIGluIHRoZSBsb2NhbCBnaXQgcmVwb3NpdG9yeSIKKyJsb29zZSBvYmplY3QiCSJhIEdpdCBvYmplY3QgdGhhdCBpcyBub3QgcGFydCBvZiBhbnkgcGFjayIKKyJtYXN0ZXIgYnJhbmNoIgkiYSBicmFuY2ggY2FsbGVkIGJ5IGNvbnZlbnRpb24gJ21hc3RlcicgdGhhdCBleGlzdHMgaW4gYSBuZXdseSBjcmVhdGVkIGdpdCByZXBvc2l0b3J5IgorIm9yaWdpbiIJImEgcmVtb3RlIGNhbGxlZCBieSBjb252ZW50aW9uICdvcmlnaW4nIHRoYXQgdGhlIGN1cnJlbnQgZ2l0IHJlcG9zaXRvcnkgaGFzIGJlZW4gY2xvbmVkIGZyb20iCisicGFjayBbbm91bl0iCSJhIGZpbGUgY29udGFpbmluZyBtYW55IGdpdCBvYmplY3RzIHBhY2tlZCB0b2dldGhlciIKKyJwYWNrZWQgb2JqZWN0IgkiYSBHaXQgb2JqZWN0IHBhcnQgb2Ygc29tZSBwYWNrIgorInBhcmVudCIJImEgY29tbWl0IHRoYXQgZGlyZWN0bHkgcHJlY2VkZXMgdGhlIGN1cnJlbnQgb25lIGluIGdpdCdzIGdyYXBoIG9mIGNvbW1pdHMiCisicmVmbG9nIgkidGhlIGxvZyBmaWxlIGNvbnRhaW5pbmcgYWxsIHN0YXRlcyBvZiB0aGUgSEVBRCByZWZlcmVuY2UgKGluIG90aGVyIHdvcmRzIHBhc3QgcHJpc3RpbmUgc3RhdGVzIG9mIHRoZSB3b3JraW5nIGNvcHkpIgorInJlc29sdmUgKGEgY29uZmxpY3QpIgkiZGVjaWRlIHdoaWNoIGNoYW5nZXMgZnJvbSBhbHRlcm5hdGl2ZSB2ZXJzaW9ucyBvZiBhIGZpbGUgc2hvdWxkIHBlcnNpc3QgaW4gR2l0IgorInJldmVydCBjaGFuZ2VzIgkiYWJhbmRvbiBjaGFuZ2VzIGFuZCBnbyB0byBwcmlzdGluZSB2ZXJzaW9uIgorInJldmlzaW9uIGV4cHJlc3Npb24iCSJleHByZXNzaW9uIHRoYXQgc2lnbmlmaWVzIGEgcmV2aXNpb24gaW4gZ2l0IgorInN0YWdlL3Vuc3RhZ2UiCSJhZGQgc29tZSBjb250ZW50IG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byB0aGUgc3RhZ2luZyBhcmVhIGluIHByZXBhcmF0aW9uIGZvciBhIGNvbW1pdCIKKyJzdGFzaCIJInRlbXBvcmFyaWx5IHNhdmUgY2hhbmdlcyBpbiBhIHN0YWNrIHdpdGhvdXQgY29tbWl0dGluZyIKKyJ0cmFja2VkL3VudHJhY2tlZCIJImZpbGUgd2hvc2UgY29udGVudCBpcyB0cmFja2VkL25vdCB0cmFja2VkIGJ5IGdpdCIKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vZ2xvc3NhcnkvaXQucG8gYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNDZiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL2dsb3NzYXJ5L2l0LnBvCkBAIC0wLDAgKzEsMTg0IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgZ2xvc3NhcnkgdG8gSXRhbGlhbgorIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdCBwYWNrYWdlLgorIyBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+LCAyMDA3CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpIGdsb3NzYXJ5XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMDctMTAtMTkgMjE6NDMrMDIwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDctMTAtMTAgMTU6MjQrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWljaGVsZSBCYWxsYWJpbyA8YmFycmFfY3VkYUBrYXRhbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSXRhbGlhbiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIy4gIkVuZ2xpc2ggRGVmaW5pdGlvbiAoRGVhciB0cmFuc2xhdG9yOiBUaGlzIGZpbGUgd2lsbCBuZXZlciBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyISBJdCBzaG91bGQgb25seSBzZXJ2ZSBhcyBhIHRvb2wgZm9yIHlvdSwgdGhlIHRyYW5zbGF0b3IuIE5vdGhpbmcgbW9yZS4pIgorbXNnaWQgIiIKKyJFbmdsaXNoIFRlcm0gKERlYXIgdHJhbnNsYXRvcjogVGhpcyBmaWxlIHdpbGwgbmV2ZXIgYmUgdmlzaWJsZSB0byB0aGUgdXNlciEpIgorbXNnc3RyICIiCisiVHJhZHV6aW9uZSBpdGFsaWFuYS5cbiIKKyJBbHRyaSBTQ00gaW4gaXRhbGlhbm86XG4iCisiICBodHRwOi8vdG9ydG9pc2Vzdm4udGlncmlzLm9yZy9zdm4vdG9ydG9pc2Vzdm4vdHJ1bmsvTGFuZ3VhZ2VzL1RvcnRvaXNlX2l0LiIKKyJwbyAodXNlcm5hbWU9Z3Vlc3QsIHBhc3N3b3JkIGVtcHR5KSxcbiIKKyIgIGh0dHA6Ly90b3J0b2lzZWN2cy5jdnMuc291cmNlZm9yZ2UubmV0L3RvcnRvaXNlY3ZzL3BvL1RvcnRvaXNlQ1ZTL2l0X0lULnBvPyIKKyJ2aWV3PW1hcmt1cCAsXG4iCisiICBodHRwOi8vcmFwaWRzdm4udGlncmlzLm9yZy9zdm4vcmFwaWRzdm4vdHJ1bmsvc3JjL2xvY2FsZS9pdF9JVC9yYXBpZHN2bi5wbyAiCisiKHVzZXJuYW1lPWd1ZXN0LCBwYXNzd29yZCBlbXB0eSkiCisKKyMuICIiCittc2dpZCAiYW1lbmQiCittc2dzdHIgImNvcnJlZ2dlcmUsIGNvcnJlemlvbmUiCisKKyMuICIiCittc2dpZCAiYW5ub3RhdGUiCittc2dzdHIgImFubm90YXJlLCBhbm5vdGF6aW9uZSIKKworIy4gIkEgJ2JyYW5jaCcgaXMgYW4gYWN0aXZlIGxpbmUgb2YgZGV2ZWxvcG1lbnQuIgorbXNnaWQgImJyYW5jaCBbbm91bl0iCittc2dzdHIgInJhbW8sIGRpcmFtYXppb25lLCByYW1pZmljYXppb25lIgorCisjLiAiIgorbXNnaWQgImJyYW5jaCBbdmVyYl0iCittc2dzdHIgImNyZWFyZSByYW1vLCByYW1pZmljYXJlLCBkaXJhbWFyZSIKKworIy4gIiIKK21zZ2lkICJjaGVja291dCBbbm91bl0iCittc2dzdHIgImF0dGl2YXppb25lLCBjaGVja291dCwgcmV2aXNpb25lIGF0dGl2YSwgcHJlbGlldm8gKFRvcnRvaXNlQ1ZTKT8iCisKKyMuICJUaGUgYWN0aW9uIG9mIHVwZGF0aW5nIHRoZSB3b3JraW5nIHRyZWUgdG8gYSByZXZpc2lvbiB3aGljaCB3YXMgc3RvcmVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UuIgorbXNnaWQgImNoZWNrb3V0IFt2ZXJiXSIKK21zZ3N0ciAiIgorImF0dGl2YXJlLCBlZmZldHR1YXJlIHVuIGNoZWNrb3V0LCBhdHRpdmFyZSByZXZpc2lvbmUsIHByZWxldmFyZSAiCisiKFRvcnRvaXNlQ1ZTKSwgcml0aXJhcmUgKFRTVk4pPyIKKworIy4gIiIKK21zZ2lkICJjbG9uZSBbdmVyYl0iCittc2dzdHIgImNsb25hcmUiCisKKyMuICJBIHNpbmdsZSBwb2ludCBpbiB0aGUgZ2l0IGhpc3RvcnkuIgorbXNnaWQgImNvbW1pdCBbbm91bl0iCittc2dzdHIgInJldmlzaW9uZSwgY29tbWl0LCBkZXBvc2l0byAoVG9ydG9pc2VDVlMpLCBpbnZpbyAoVFNWTik/IgorCisjLiAiVGhlIGFjdGlvbiBvZiBzdG9yaW5nIGEgbmV3IHNuYXBzaG90IG9mIHRoZSBwcm9qZWN0J3Mgc3RhdGUgaW4gdGhlIGdpdCBoaXN0b3J5LiIKK21zZ2lkICJjb21taXQgW3ZlcmJdIgorbXNnc3RyICIiCisiY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUsIGFyY2hpdmlhcmUsIGVmZmV0dHVhcmUgdW4gY29tbWl0LCBkZXBvc2l0YXJlICIKKyIobmVsIHNlcnZlciksIGZhcmUgdW4gZGVwb3NpdG8gKFRvcnRvaXNlQ1ZTKSwgaW52aWFyZSAoVFNWTik/IgorCisjLiAiIgorbXNnaWQgImRpZmYgW25vdW5dIgorbXNnc3RyICJkaWZmZXJlbnphLCBjb25mcm9udG8sIGNvbXBhcmF6aW9uZSwgcmFmZnJvbnRvIgorCisjLiAiIgorbXNnaWQgImRpZmYgW3ZlcmJdIgorbXNnc3RyICJjb25mcm9udGEsIG1vc3RyYSBsZSBkaWZmZXJlbnplIgorCisjLiAiQSBmYXN0LWZvcndhcmQgaXMgYSBzcGVjaWFsIHR5cGUgb2YgbWVyZ2Ugd2hlcmUgeW91IGhhdmUgYSByZXZpc2lvbiBhbmQgeW91IGFyZSBtZXJnaW5nIGFub3RoZXIgYnJhbmNoJ3MgY2hhbmdlcyB0aGF0IGhhcHBlbiB0byBiZSBhIGRlc2NlbmRhbnQgb2Ygd2hhdCB5b3UgaGF2ZS4iCittc2dpZCAiZmFzdCBmb3J3YXJkIG1lcmdlIgorbXNnc3RyICJmdXNpb25lIGluICdmYXN0LWZvcndhcmQnLCBmdXNpb25lIGluIGF2YW50aSB2ZWxvY2UiCisKKyMuICJGZXRjaGluZyBhIGJyYW5jaCBtZWFucyB0byBnZXQgdGhlIGJyYW5jaCdzIGhlYWQgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LCB0byBmaW5kIG91dCB3aGljaCBvYmplY3RzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGxvY2FsIG9iamVjdCBkYXRhYmFzZSwgYW5kIHRvIGdldCB0aGVtLCB0b28uIgorbXNnaWQgImZldGNoIgorbXNnc3RyICJyZWN1cGVyYXJlLCBwcmVsZXZhcmUsIHByZW5kZXJlIGRhLCByZWN1cGVyYXJlIChUU1ZOKSIKKworIy4gIkEgY29sbGVjdGlvbiBvZiBmaWxlcy4gVGhlIGluZGV4IGlzIGEgc3RvcmVkIHZlcnNpb24gb2YgeW91ciB3b3JraW5nIHRyZWUuIgorbXNnaWQgImluZGV4IChpbiBnaXQtZ3VpOiBzdGFnaW5nIGFyZWEpIgorbXNnc3RyICJpbmRpY2UiCisKKyMuICJBIHN1Y2Nlc3NmdWwgbWVyZ2UgcmVzdWx0cyBpbiB0aGUgY3JlYXRpb24gb2YgYSBuZXcgY29tbWl0IHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IG9mIHRoZSBtZXJnZS4iCittc2dpZCAibWVyZ2UgW25vdW5dIgorbXNnc3RyICJmdXNpb25lLCB1bmlvbmUiCisKKyMuICJUbyBicmluZyB0aGUgY29udGVudHMgb2YgYW5vdGhlciBicmFuY2ggaW50byB0aGUgY3VycmVudCBicmFuY2guIgorbXNnaWQgIm1lcmdlIFt2ZXJiXSIKK21zZ3N0ciAiZWZmZXR0dWFyZSBsYSBmdXNpb25lLCB1bmlyZSwgZm9uZGVyZSwgZXNlZ3VpcmUgbGEgZnVzaW9uZSIKKworIy4gIiIKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICJtZXNzYWdnaW8sIGNvbW1lbnRvIgorCisjLiAiRGVsZXRlcyBhbGwgc3RhbGUgdHJhY2tpbmcgYnJhbmNoZXMgdW5kZXIgPG5hbWU+LiBUaGVzZSBzdGFsZSBicmFuY2hlcyBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHJlZmVyZW5jZWQgYnkgPG5hbWU+LCBidXQgYXJlIHN0aWxsIGxvY2FsbHkgYXZhaWxhYmxlIGluICdyZW1vdGVzLzxuYW1lPicuIgorbXNnaWQgInBydW5lIgorbXNnc3RyICJwb3RhdHVyYSIKKworIy4gIlB1bGxpbmcgYSBicmFuY2ggbWVhbnMgdG8gZmV0Y2ggaXQgYW5kIG1lcmdlIGl0LiIKK21zZ2lkICJwdWxsIgorbXNnc3RyICIiCisicHJlbmRpIChyZWN1cGVyYSkgZSBmb25kaSAodW5pc2NpKT8gKGluIHByYXRpY2EgdW5hIHRyYWR1emlvbmUgZGkgZmV0Y2ggKyAiCisibWVyZ2UpIgorCisjLiAiUHVzaGluZyBhIGJyYW5jaCBtZWFucyB0byBnZXQgdGhlIGJyYW5jaCdzIGhlYWQgcmVmIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgYW5kIC4uLiAod2VsbCwgY2FuIHNvbWVvbmUgcGxlYXNlIGV4cGxhaW4gaXQgZm9yIG1lcmUgbW9ydGFscz8pIgorbXNnaWQgInB1c2giCittc2dzdHIgInByb3BhZ2EiCisKKyMuICIiCittc2dpZCAicmVkbyIKK21zZ3N0ciAicmlwZXRpLCByaWZhaSIKKworIy4gIkFuIG90aGVyIHJlcG9zaXRvcnkgKCdyZW1vdGUnKS4gT25lIG1pZ2h0IGhhdmUgYSBzZXQgb2YgcmVtb3RlcyB3aG9zZSBicmFuY2hlcyBvbmUgdHJhY2tzLiIKK21zZ2lkICJyZW1vdGUiCittc2dzdHIgInJlbW90byIKKworIy4gIkEgY29sbGVjdGlvbiBvZiByZWZzICg/KSB0b2dldGhlciB3aXRoIGFuIG9iamVjdCBkYXRhYmFzZSBjb250YWluaW5nIGFsbCBvYmplY3RzIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB0aGUgcmVmcy4uLiAob29wcywgeW91J3ZlIGxvc3QgbWUgaGVyZS4gQWdhaW4sIHBsZWFzZSBhbiBleHBsYW5hdGlvbiBmb3IgbWVyZSBtb3J0YWxzPykiCittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAiYXJjaGl2aW8sIHJlcG9zaXRvcnksIGRhdGFiYXNlPyBkZXBvc2l0byAocmFwaWRzdm4pPyIKKworIy4gIiIKK21zZ2lkICJyZXNldCIKK21zZ3N0ciAicmlwcmlzdGluYXJlLCBhbm51bGxhcmUsIGF6emVyYXJlLCByaXByaXN0aW5hcmUiCisKKyMuICIiCittc2dpZCAicmV2ZXJ0IgorbXNnc3RyICIiCisiYW5udWxsYXJlLCBpbnZlcnRpIChyYXBpZHN2biksIHJpdG9ybmEgYWxsbyBzdGF0byBwcmVjZWRlbnRlLCBhbm51bGxhIGxlICIKKyJtb2RpZmljaGUgZGVsbGEgcmV2aXNpb25lIgorCisjLiAiQSBwYXJ0aWN1bGFyIHN0YXRlIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aGljaCB3YXMgc3RvcmVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UuIgorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICJyZXZpc2lvbmUgKFRvcnRvaXNlU1ZOKSIKKworIy4gIiIKK21zZ2lkICJzaWduIG9mZiIKK21zZ3N0ciAic2lnbiBvZmYsIGZpcm1hIgorCisjLiAiIgorbXNnaWQgInN0YWdpbmcgYXJlYSIKK21zZ3N0ciAiIgorImFyZWEgZGkgcHJlcGFyYXppb25lLCB6b25hIGRpIHByZXBhcmF6aW9uZSwgbW9kaWZpY2hlIGluIHByZXBhcmF6aW9uZT8gIgorIm1vZGlmaWNoZSBpbiBhbGxlc3RpbWVudG8/IgorCisjLiAiIgorbXNnaWQgInN0YXR1cyIKK21zZ3N0ciAic3RhdG8iCisKKyMuICJBIHJlZiBwb2ludGluZyB0byBhIHRhZyBvciBjb21taXQgb2JqZWN0IgorbXNnaWQgInRhZyBbbm91bl0iCittc2dzdHIgImV0aWNoZXR0YSwgZXRpY2hldHRhdHVyYSAoVG9ydG9pc2VDVlMpIgorCisjLiAiIgorbXNnaWQgInRhZyBbdmVyYl0iCittc2dzdHIgImV0aWNoZXR0YXJlIgorCisjLiAiQSByZWd1bGFyIGdpdCBicmFuY2ggdGhhdCBpcyB1c2VkIHRvIGZvbGxvdyBjaGFuZ2VzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5LiIKK21zZ2lkICJ0cmFja2luZyBicmFuY2giCittc2dzdHIgIiIKKyJkdXBsaWNhdG8gbG9jYWxlIGRpIHJhbW8gcmVtb3RvLCByYW1vIGluICd0cmFja2luZycsIHJhbW8gaW5zZWd1aXRvcmU/IHJhbW8gIgorImRpIHtpbnNlZ3VpbWVudG8sYWxsaW5lYW1lbnRvLHJpbGV2YW1lbnRvLHB1bnRhbWVudG99PyIKKworIy4gIiIKK21zZ2lkICJ1bmRvIgorbXNnc3RyICJhbm51bGxhIgorCisjLiAiIgorbXNnaWQgInVwZGF0ZSIKK21zZ3N0ciAiYWdnaW9ybmFtZW50bywgYWdnaW9ybmFyZSIKKworIy4gIiIKK21zZ2lkICJ2ZXJpZnkiCittc2dzdHIgInZlcmlmaWNhLCB2ZXJpZmljYXJlIgorCisjLiAiVGhlIHRyZWUgb2YgYWN0dWFsIGNoZWNrZWQgb3V0IGZpbGVzLiIKK21zZ2lkICJ3b3JraW5nIGNvcHksIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiZGlyZWN0b3J5IGRpIGxhdm9ybywgY29waWEgZGkgbGF2b3JvIgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9nbG9zc2FyeS9wdF9ici5wbyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvcHRfYnIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIwMzliMgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvcHRfYnIucG8KQEAgLTAsMCArMSwxNjkgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSB0byBCcmF6aWxpYW4gUG9ydHVndWVzZQorIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdC1ndWkgcGFja2FnZS4KKyMKKyMgQWxleGFuZHJlIEVyd2luIEl0dG5lciA8YWxleGFuZHJlQGl0dG5lci5jb20uYnI+LCAyMDEwLgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAxNTo0Ny0wODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wOS0xOCAxMTowOS0wMzAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbGV4YW5kcmUgRXJ3aW4gSXR0bmVyIDxhbGV4YW5kcmVAaXR0bmVyLmNvbS5icj5cbiIKKyJMYW5ndWFnZS1UZWFtOiBCcmF6aWxpYW4gUG9ydHVndWVzZSA8PlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjLiAiRW5nbGlzaCBEZWZpbml0aW9uIChEZWFyIHRyYW5zbGF0b3I6IFRoaXMgZmlsZSB3aWxsIG5ldmVyIGJlIHZpc2libGUgdG8gdGhlIHVzZXIhIEl0IHNob3VsZCBvbmx5IHNlcnZlIGFzIGEgdG9vbCBmb3IgeW91LCB0aGUgdHJhbnNsYXRvci4gTm90aGluZyBtb3JlLikiCittc2dpZCAiIgorIkVuZ2xpc2ggVGVybSAoRGVhciB0cmFuc2xhdG9yOiBUaGlzIGZpbGUgd2lsbCBuZXZlciBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyISkiCittc2dzdHIgIiIKKworIy4gIiIKK21zZ2lkICJhbWVuZCIKK21zZ3N0ciAiY29ycmlnaXIiCisKKyMuICIiCittc2dpZCAiYW5ub3RhdGUiCittc2dzdHIgImFub3RhciIKKworIy4gIkEgJ2JyYW5jaCcgaXMgYW4gYWN0aXZlIGxpbmUgb2YgZGV2ZWxvcG1lbnQuIgorbXNnaWQgImJyYW5jaCBbbm91bl0iCittc2dzdHIgInJhbW8iCisKKyMuICIiCittc2dpZCAiYnJhbmNoIFt2ZXJiXSIKK21zZ3N0ciAicmFtaWZpY2FyIgorCisjLiAiIgorbXNnaWQgImNoZWNrb3V0IFtub3VuXSIKK21zZ3N0ciAiY2hlY2tvdXQiCisKKyMuICJUaGUgYWN0aW9uIG9mIHVwZGF0aW5nIHRoZSB3b3JraW5nIHRyZWUgdG8gYSByZXZpc2lvbiB3aGljaCB3YXMgc3RvcmVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UuIgorbXNnaWQgImNoZWNrb3V0IFt2ZXJiXSIKK21zZ3N0ciAiZWZldHVhciBjaGVja291dCIKKworIy4gIiIKK21zZ2lkICJjbG9uZSBbdmVyYl0iCittc2dzdHIgImNsb25hciIKKworIy4gIkEgc2luZ2xlIHBvaW50IGluIHRoZSBnaXQgaGlzdG9yeS4iCittc2dpZCAiY29tbWl0IFtub3VuXSIKK21zZ3N0ciAicmV2aXPDo28iCisKKyMuICJUaGUgYWN0aW9uIG9mIHN0b3JpbmcgYSBuZXcgc25hcHNob3Qgb2YgdGhlIHByb2plY3QncyBzdGF0ZSBpbiB0aGUgZ2l0IGhpc3RvcnkuIgorbXNnaWQgImNvbW1pdCBbdmVyYl0iCittc2dzdHIgInNhbHZhciByZXZpc8OjbyIKKworIy4gIiIKK21zZ2lkICJkaWZmIFtub3VuXSIKK21zZ3N0ciAiZGlmZiIKKworIy4gIiIKK21zZ2lkICJkaWZmIFt2ZXJiXSIKK21zZ3N0ciAiY29tcGFyYXIiCisKKyMuICJBIGZhc3QtZm9yd2FyZCBpcyBhIHNwZWNpYWwgdHlwZSBvZiBtZXJnZSB3aGVyZSB5b3UgaGF2ZSBhIHJldmlzaW9uIGFuZCB5b3UgYXJlIG1lcmdpbmcgYW5vdGhlciBicmFuY2gncyBjaGFuZ2VzIHRoYXQgaGFwcGVuIHRvIGJlIGEgZGVzY2VuZGFudCBvZiB3aGF0IHlvdSBoYXZlLiIKK21zZ2lkICJmYXN0IGZvcndhcmQgbWVyZ2UiCittc2dzdHIgIm1lc2NsYWdlbSByw6FwaWRhIgorCisjLiAiRmV0Y2hpbmcgYSBicmFuY2ggbWVhbnMgdG8gZ2V0IHRoZSBicmFuY2gncyBoZWFkIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgdG8gZmluZCBvdXQgd2hpY2ggb2JqZWN0cyBhcmUgbWlzc2luZyBmcm9tIHRoZSBsb2NhbCBvYmplY3QgZGF0YWJhc2UsIGFuZCB0byBnZXQgdGhlbSwgdG9vLiIKK21zZ2lkICJmZXRjaCIKK21zZ3N0ciAicmVjZWJlciIKKworIy4gIk9uZSBjb250ZXh0IG9mIGNvbnNlY3V0aXZlIGxpbmVzIGluIGEgd2hvbGUgcGF0Y2gsIHdoaWNoIGNvbnNpc3RzIG9mIG1hbnkgc3VjaCBodW5rcyIKK21zZ2lkICJodW5rIgorbXNnc3RyICJ0cmVjaG8iCisKKyMuICJBIGNvbGxlY3Rpb24gb2YgZmlsZXMuIFRoZSBpbmRleCBpcyBhIHN0b3JlZCB2ZXJzaW9uIG9mIHlvdXIgd29ya2luZyB0cmVlLiIKK21zZ2lkICJpbmRleCAoaW4gZ2l0LWd1aTogc3RhZ2luZyBhcmVhKSIKK21zZ3N0ciAiw61uZGljZSIKKworIy4gIkEgc3VjY2Vzc2Z1bCBtZXJnZSByZXN1bHRzIGluIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBjb21taXQgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhlIG1lcmdlLiIKK21zZ2lkICJtZXJnZSBbbm91bl0iCittc2dzdHIgIm1lc2NsYWdlbSIKKworIy4gIlRvIGJyaW5nIHRoZSBjb250ZW50cyBvZiBhbm90aGVyIGJyYW5jaCBpbnRvIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dpZCAibWVyZ2UgW3ZlcmJdIgorbXNnc3RyICJtZXNjbGFyIgorCisjLiAiIgorbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgImRlc2NyacOnw6NvIGRhIHJldmlzw6NvIgorCisjLiAiRGVsZXRlcyBhbGwgc3RhbGUgdHJhY2tpbmcgYnJhbmNoZXMgdW5kZXIgPG5hbWU+LiBUaGVzZSBzdGFsZSBicmFuY2hlcyBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5IHJlZmVyZW5jZWQgYnkgPG5hbWU+LCBidXQgYXJlIHN0aWxsIGxvY2FsbHkgYXZhaWxhYmxlIGluICdyZW1vdGVzLzxuYW1lPicuIgorbXNnaWQgInBydW5lIgorbXNnc3RyICJsaW1wYXIiCisKKyMuICJQdWxsaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGZldGNoIGl0IGFuZCBtZXJnZSBpdC4iCittc2dpZCAicHVsbCIKK21zZ3N0ciAicmVjZWJlciBlIG1lc2NsYXIiCisKKyMuICJQdXNoaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGdldCB0aGUgYnJhbmNoJ3MgaGVhZCByZWYgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5LCBhbmQgLi4uICh3ZWxsLCBjYW4gc29tZW9uZSBwbGVhc2UgZXhwbGFpbiBpdCBmb3IgbWVyZSBtb3J0YWxzPykiCittc2dpZCAicHVzaCIKK21zZ3N0ciAiZW52aWFyIgorCisjLiAiIgorbXNnaWQgInJlZG8iCittc2dzdHIgInJlZmF6ZXIiCisKKyMuICJBbiBvdGhlciByZXBvc2l0b3J5ICgncmVtb3RlJykuIE9uZSBtaWdodCBoYXZlIGEgc2V0IG9mIHJlbW90ZXMgd2hvc2UgYnJhbmNoZXMgb25lIHRyYWNrcy4iCittc2dpZCAicmVtb3RlIgorbXNnc3RyICJyZXBvc2l0w7NyaW8gcmVtb3RvIgorCisjLiAiQSBjb2xsZWN0aW9uIG9mIHJlZnMgKD8pIHRvZ2V0aGVyIHdpdGggYW4gb2JqZWN0IGRhdGFiYXNlIGNvbnRhaW5pbmcgYWxsIG9iamVjdHMgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHRoZSByZWZzLi4uIChvb3BzLCB5b3UndmUgbG9zdCBtZSBoZXJlLiBBZ2FpbiwgcGxlYXNlIGFuIGV4cGxhbmF0aW9uIGZvciBtZXJlIG1vcnRhbHM/KSIKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICJyZXBvc2l0w7NyaW8iCisKKyMuICIiCittc2dpZCAicmVzZXQiCittc2dzdHIgImRlc2NhcnRhciwgcmVkZWZpbmlyIgorCisjLiAiIgorbXNnaWQgInJldmVydCIKK21zZ3N0ciAicmV2ZXJ0ZXIiCisKKyMuICJBIHBhcnRpY3VsYXIgc3RhdGUgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHdoaWNoIHdhcyBzdG9yZWQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZS4iCittc2dpZCAicmV2aXNpb24iCittc2dzdHIgInJldmlzw6NvIgorCisjLiAiIgorbXNnaWQgInNpZ24gb2ZmIgorbXNnc3RyICJhc3NpbmFyIGVtYmFpeG8iCisKKyMuICIiCittc2dpZCAic3RhZ2luZyBhcmVhIgorbXNnc3RyICI/Pz8iCisKKyMuICIiCittc2dpZCAic3RhdHVzIgorbXNnc3RyICJzdGF0dXMiCisKKyMuICJBIHJlZiBwb2ludGluZyB0byBhIHRhZyBvciBjb21taXQgb2JqZWN0IgorbXNnaWQgInRhZyBbbm91bl0iCittc2dzdHIgImV0aXF1ZXRhIgorCisjLiAiIgorbXNnaWQgInRhZyBbdmVyYl0iCittc2dzdHIgIm1hcmNhciBldGlxdWV0YSIKKworIy4gIkEgcmVndWxhciBnaXQgYnJhbmNoIHRoYXQgaXMgdXNlZCB0byBmb2xsb3cgY2hhbmdlcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeS4iCittc2dpZCAidHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJyYW1vIGRlIHJhc3RyZWFtZW50byIKKworIy4gIiIKK21zZ2lkICJ1bmRvIgorbXNnc3RyICJkZXNmYXplciIKKworIy4gIiIKK21zZ2lkICJ1cGRhdGUiCittc2dzdHIgImF0dWFsaXphciIKKworIy4gIiIKK21zZ2lkICJ2ZXJpZnkiCittc2dzdHIgInZlcmlmaWNhciIKKworIy4gIlRoZSB0cmVlIG9mIGFjdHVhbCBjaGVja2VkIG91dCBmaWxlcy4iCittc2dpZCAid29ya2luZyBjb3B5LCB3b3JraW5nIHRyZWUiCittc2dzdHIgImPDs3BpYSBkZSB0cmFiYWxobywgw6Fydm9yZSBkZSB0cmFiYWxobyIKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vZ2xvc3NhcnkvdHh0LXRvLXBvdC5zaCBiL2dpdC1ndWkvcG8vZ2xvc3NhcnkvdHh0LXRvLXBvdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OWJmN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9nbG9zc2FyeS90eHQtdG8tcG90LnNoCkBAIC0wLDAgKzEsNDggQEAKKyMhL2Jpbi9zaAorIyBUaGlzIGlzIGEgdmVyeSwgX3ZlcnlfLCBzaW1wbGUgc2NyaXB0IHRvIGNvbnZlcnQgYSB0YWItc2VwYXJhdGVkCisjIC50eHQgZmlsZSBpbnRvIGEgLnBvdC8ucG8uCisjIEl0cyBub3QgY2xldmVyIGJ1dCBpdCB0b29rIG1lIDIgbWludXRlcyB0byB3cml0ZSA6KQorIyBNaWNoYWVsIFR3b21leSA8bWljaGFlbC50d29tZXlAaXJlbGFuZC5zdW4uY29tPgorIyAyMyBNYXJjaCAyMDAxCisjIHdpdGggc2xpZ2h0IEdudUNhc2ggbW9kaWZpY2F0aW9ucyBieSBDaHJpc3RpYW4gU3RpbW1pbmcgPHN0aW1taW5nQHR1aGguZGU+CisjIDE5IEF1ZyAyMDAxLCAyMyBKdWwgMjAwNworCisjY2hlY2sgYXJncworaWYgWyAkIyAtZXEgMCBdCit0aGVuCisJY2F0IDw8IQorVXNhZ2U6IGBiYXNlbmFtZSAkMGAgZ2l0LWd1aS1nbG9zc2FyeS50eHQgPiBnaXQtZ3VpLWdsb3NzYXJ5LnBvdAorIQorCWV4aXQgMTsKK2ZpCisKK0dMT1NTQVJZX0NTVj0iJDEiOworCitpZiBbICEgLWYgIiRHTE9TU0FSWV9DU1YiIF0KK3RoZW4KKwllY2hvICJDYW4ndCBmaW5kICRHTE9TU0FSWV9DU1YuIjsKKwlleGl0IDE7CitmaQorCitjYXQgPDwhCisjIFNPTUUgREVTQ1JJUFRJVkUgVElUTEUuCisjIENvcHlyaWdodCAoQykgWUVBUiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgRklSU1QgQVVUSE9SIDxFTUFJTEBBRERSRVNTPiwgWUVBUi4KKyMKKyMsIGZ1enp5Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBQQUNLQUdFIFZFUlNJT05cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogYGRhdGUgKyclWS0lbS0lZCAlSDolTSV6J2BcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiBZRUFSLU1PLURBIEhPOk1JK1pPTkVcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEZVTEwgTkFNRSA8RU1BSUxAQUREUkVTUz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBMQU5HVUFHRSA8TExAbGkub3JnPlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUNIQVJTRVRcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBFTkNPRElOR1xuIgorCishCisKKyNZZXMgdGhpcyBpcyB0aGUgbW9zdCBzaW1wbGUgYXdrIHNjcmlwdCB5b3UndmUgZXZlciBzZWVuIDopCithd2sgLUYnXHQnICd7aWYgKCQyICE9ICIiKSBwcmludCAiIy4gIiQyOyBwcmludCAibXNnaWQgIiQxOyBwcmludCAibXNnc3RyIFwiXCJcbiJ9JyBcCiskR0xPU1NBUllfQ1NWCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2dsb3NzYXJ5L3poX2NuLnBvIGIvZ2l0LWd1aS9wby9nbG9zc2FyeS96aF9jbi5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTg4MzViCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9nbG9zc2FyeS96aF9jbi5wbwpAQCAtMCwwICsxLDE3MCBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIGdsb3NzYXJ5IHRvIFNpbXBsaWZpZWQgQ2hpbmVzZQorIyBDb3B5cmlnaHQgKEMpIDIwMDcgU2hhd24gUGVhcmNlLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdCBwYWNrYWdlLgorIyBYdWRvbmcgR3VhbiA8eHVkb25nLmd1YW5AZ21haWwuY29tPiBhbmQgdGhlIHpoLWtlcm5lbC5vcmcgbWFpbGluZyBsaXN0LCAyMDA3CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpIGdsb3NzYXJ5XG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNy0wNy0yMyAyMjowNyswMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBYdWRvbmcgR3VhbiA8eHVkb25nLmd1YW5AZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFNpbXBsaWZpZWQgQ2hpbmVzZSBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIy4gIkVuZ2xpc2ggRGVmaW5pdGlvbiAoRGVhciB0cmFuc2xhdG9yOiBUaGlzIGZpbGUgd2lsbCBuZXZlciBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyISBJdCBzaG91bGQgb25seSBzZXJ2ZSBhcyBhIHRvb2wgZm9yIHlvdSwgdGhlIHRyYW5zbGF0b3IuIE5vdGhpbmcgbW9yZS4pIgorbXNnaWQgIiIKKyJFbmdsaXNoIFRlcm0gKERlYXIgdHJhbnNsYXRvcjogVGhpcyBmaWxlIHdpbGwgbmV2ZXIgYmUgdmlzaWJsZSB0byB0aGUgdXNlciEpIgorbXNnc3RyICLms6jvvJrov5nkuKrmlofku7bmmK/kuLrkuobluK7liqnnv7vor5HkurrlkZjnu5/kuIDlkI3or43mnK/or63jgILmnIDnu4jnlKjmiLfkuI3kvJrlhbPlv4Pov5nkuKrmlofku7bjgIIiCisKKyMuICIiCisjLiBhbWVuZOaMh+eUqOaIt+S/ruaUueacgOi/keS4gOasoWNvbW1pdOeahOaTjeS9nO+8jOS/ruiuou+8n+S/ruaUue+8n+S/ruato++8nworIy4gW1dBTkcgQ29uZ106IOagueaNruaIkeeahOS6huino++8jOi/meS4quivjeS8vOS5jue/u+ivkeaIkOKAnOS/ruiuouKAneWkmuS4gOS6m+OAguKAnOS/ruato+KAneS5n+WPr+S7pe+8jOKAnOS/ruaUueKAneWGjeasoeS5i+OAggorIy4gW1pIQU5HIExlXTog5L+u6K6i77yM5oSf6KeJ5LiA6Iis5oyH5a+55LiA5Lqb5aSn5Z6L5Ye654mI54mp55qE5aSn6KeE5qih5Y2H57qn77yM5q+U5aaC5L+u6K6i5paw5Y2O5a2X5YW4CisjICAgICAgICAgICAgICDkv67mraPvvIzlhbblrp7mr4/mrKFhbWVuZOeahOe7k+aenOS5n+S4jeS4gOWumuWwseaYr+acgOWQjue7k+aenO+8jOivtOS4jeWumui/mOmcgOimgeS/ruaUueOAguaJgOS7peS4jQorIyAgICAgICAgICAgICAg5aaC5bCx5Y+r5L+u5pS5Cittc2dpZCAiYW1lbmQiCittc2dzdHIgIuS/ruiuoiIKKworIy4gIiIKKyMuIGdpdCBhbm5vdGF0ZSDmlofku7blkI3vvJrnlKjmnaXmoIfms6jmlofku7bnmoTmr4/kuIDooYzlnKjku4DkuYjml7blgJnooqvosIHmnIDlkI7kv67mlLnjgIIKKyMuIFtXQU5HIENvbmddOiAi5qCH6K6wIuS4gOiIrOaYr21hcmvjgII7KQorIy4gW1pIQU5HIExlXTog5qCH5rOo77yM5oiW6ICF5bmy6ISG55So5Y6f5oSP77ya5rOo6Kej77yM5oiW5rOo6YeKCittc2dpZCAiYW5ub3RhdGUiCittc2dzdHIgIuagh+azqCIKKworIy4gIkEgJ2JyYW5jaCcgaXMgYW4gYWN0aXZlIGxpbmUgb2YgZGV2ZWxvcG1lbnQuIgorbXNnaWQgImJyYW5jaCBbbm91bl0iCittc2dzdHIgIuWIhuaUryIKKworIy4gIiIKK21zZ2lkICJicmFuY2ggW3ZlcmJdIgorbXNnc3RyICLlu7rnq4vliIbmlK8iCisKKyMuICIiCisjLiBbV0FORyBDb25nXTog572R5LiK5pyJ5Lq657+76K+R5oiQ4oCc5qOA5Ye64oCd77yM5oiR5oSf6KeJ5pu05aW95LiA5Lqb77yM5q+V56uf5oqKY2hlY2vnmoTmhI/mgJ3nv7vor5Hlh7rmnaXkuobjgIIKKyMuIFtaSE5BRyBMZV06IOaPkOWPluWQp++8jOaPkOWPluWIhuaUr++8j+eJiOacrAorIy4gW3JhZSBsXTog562+5Ye644CCc3VidmVyc2lvbui9r+S7tuS4reeahOWkp+Wkmuivjeaxh+W3suaciee/u+ivke+8jOaXoueEtmdpdOS4jnN1YnZlcnNpb27lkIzmmK9TQ03nrqHnkIbvvIzlj6/ku6Xlj4LogIPlkIznsbvova/ku7bnmoTnv7vor5HkuZ/kuI3plJnjgIIKK21zZ2lkICJjaGVja291dCBbbm91bl0iCittc2dzdHIgIuetvuWHuiIKKworIy4gIlRoZSBhY3Rpb24gb2YgdXBkYXRpbmcgdGhlIHdvcmtpbmcgdHJlZSB0byBhIHJldmlzaW9uIHdoaWNoIHdhcyBzdG9yZWQgaW4gdGhlIG9iamVjdCBkYXRhYmFzZS4iCittc2dpZCAiY2hlY2tvdXQgW3ZlcmJdIgorbXNnc3RyICLnrb7lh7oiCisKKyMuICJBIHNpbmdsZSBwb2ludCBpbiB0aGUgZ2l0IGhpc3RvcnkuIgorbXNnaWQgImNvbW1pdCBbbm91bl0iCittc2dzdHIgIuaPkOS6pCIKKworIy4gIlRoZSBhY3Rpb24gb2Ygc3RvcmluZyBhIG5ldyBzbmFwc2hvdCBvZiB0aGUgcHJvamVjdCdzIHN0YXRlIGluIHRoZSBnaXQgaGlzdG9yeS4iCittc2dpZCAiY29tbWl0IFt2ZXJiXSIKK21zZ3N0ciAi5o+Q5LqkIgorCisjLiAiIgorIy4g5beu5byC77yf5beu5Yir77yfCisjLiBbWkhBTkcgTGVdOiDkuKrkurrmhJ/op4nlt67liKvmm7TliqDkuK3mgKfkuIDkupsKK21zZ2lkICJkaWZmIFtub3VuXSIKK21zZ3N0ciAi5beu5YirIgorCisjLiAiIgorbXNnaWQgImRpZmYgW3ZlcmJdIgorbXNnc3RyICLmr5TovoMiCisKKyMuICJBIGZhc3QtZm9yd2FyZCBpcyBhIHNwZWNpYWwgdHlwZSBvZiBtZXJnZSB3aGVyZSB5b3UgaGF2ZSBhIHJldmlzaW9uIGFuZCB5b3UgYXJlIG1lcmdpbmcgYW5vdGhlciBicmFuY2gncyBjaGFuZ2VzIHRoYXQgaGFwcGVuIHRvIGJlIGEgZGVzY2VuZGFudCBvZiB3aGF0IHlvdSBoYXZlLiIKK21zZ2lkICJmYXN0IGZvcndhcmQgbWVyZ2UiCittc2dzdHIgIuW/q+i/m+W8j+WQiOW5tiIKKworIy4gIkZldGNoaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGdldCB0aGUgYnJhbmNoJ3MgaGVhZCBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnksIHRvIGZpbmQgb3V0IHdoaWNoIG9iamVjdHMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgbG9jYWwgb2JqZWN0IGRhdGFiYXNlLCBhbmQgdG8gZ2V0IHRoZW0sIHRvby4iCisjLiDojrflj5bvvJ/lj5blvpfvvJ/kuIvovb3vvJ/mm7TmlrDvvJ/ms6jmhI/lkox1cGRhdGXnmoTljLrliIYKK21zZ2lkICJmZXRjaCIKK21zZ3N0ciAi6I635Y+WIgorCisjLiAiQSBjb2xsZWN0aW9uIG9mIGZpbGVzLiBUaGUgaW5kZXggaXMgYSBzdG9yZWQgdmVyc2lvbiBvZiB5b3VyIHdvcmtpbmcgdHJlZS4iCisjLiBpbmRleOaYr3dvcmtpbmcgdHJlZeWSjHJlcG9zaXRvcnnkuYvpl7TnmoTnvJPlrZgKK21zZ2lkICJpbmRleCAoaW4gZ2l0LWd1aTogc3RhZ2luZyBhcmVhKSIKK21zZ3N0ciAi5bel5L2c57yT5a2Y77yfIgorCisjLiAiQSBzdWNjZXNzZnVsIG1lcmdlIHJlc3VsdHMgaW4gdGhlIGNyZWF0aW9uIG9mIGEgbmV3IGNvbW1pdCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuIgorbXNnaWQgIm1lcmdlIFtub3VuXSIKK21zZ3N0ciAi5ZCI5bm2IgorCisjLiAiVG8gYnJpbmcgdGhlIGNvbnRlbnRzIG9mIGFub3RoZXIgYnJhbmNoIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ2lkICJtZXJnZSBbdmVyYl0iCittc2dzdHIgIuWQiOW5tiIKKworIy4gIiIKKyMuIG1lc3NhZ2XmmK/mjIdjb21taXTkuK3nmoTmloflrZfkv6Hmga8KK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICLmj4/ov7AiCisKKyMuICJQdWxsaW5nIGEgYnJhbmNoIG1lYW5zIHRvIGZldGNoIGl0IGFuZCBtZXJnZSBpdC4iCittc2dpZCAicHVsbCIKK21zZ3N0ciAi6I635Y+W77yL5ZCI5bm2IgorCisjLiAiUHVzaGluZyBhIGJyYW5jaCBtZWFucyB0byBnZXQgdGhlIGJyYW5jaCdzIGhlYWQgcmVmIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSwgYW5kIC4uLiAod2VsbCwgY2FuIHNvbWVvbmUgcGxlYXNlIGV4cGxhaW4gaXQgZm9yIG1lcmUgbW9ydGFscz8pIgorbXNnaWQgInB1c2giCittc2dzdHIgIuaOqOWFpSIKKworIy4gIiIKK21zZ2lkICJyZWRvIgorbXNnc3RyICLph43lgZoiCisKKyMuICJBIGNvbGxlY3Rpb24gb2YgcmVmcyAoPykgdG9nZXRoZXIgd2l0aCBhbiBvYmplY3QgZGF0YWJhc2UgY29udGFpbmluZyBhbGwgb2JqZWN0cyB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIHJlZnMuLi4gKG9vcHMsIHlvdSd2ZSBsb3N0IG1lIGhlcmUuIEFnYWluLCBwbGVhc2UgYW4gZXhwbGFuYXRpb24gZm9yIG1lcmUgbW9ydGFscz8pIgorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgIuS7k+W6kyIKKworIy4gIiIKK21zZ2lkICJyZXNldCIKK21zZ3N0ciAi6YeN572uIgorCisjLiAiIgorbXNnaWQgInJldmVydCIKK21zZ3N0ciAi5oGi5aSNIgorCisjLiAiQSBwYXJ0aWN1bGFyIHN0YXRlIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB3aGljaCB3YXMgc3RvcmVkIGluIHRoZSBvYmplY3QgZGF0YWJhc2UuIgorbXNnaWQgInJldmlzaW9uIgorbXNnc3RyICLniYjmnKwiCisKKyMuICIiCittc2dpZCAic2lnbiBvZmYiCittc2dzdHIgIuetvuWQjSIKKworIy4gIiIKKyMuIOS8vOS5juaYr2dpdC1ndWnph4zpnaLmmL7npLrnmoTmnKzmrKHmj5DkuqTnmoTmlofku7bmuIXljZXljLrln58KK21zZ2lkICJzdGFnaW5nIGFyZWEiCittc2dzdHIgIuaPkOS6pOaaguWtmOWMuiIKKworIy4gIiIKK21zZ2lkICJzdGF0dXMiCittc2dzdHIgIueKtuaAgSIKKworIy4gIkEgcmVmIHBvaW50aW5nIHRvIGEgdGFnIG9yIGNvbW1pdCBvYmplY3QiCittc2dpZCAidGFnIFtub3VuXSIKK21zZ3N0ciAi5qCH562+IgorCisjLiAiIgorbXNnaWQgInRhZyBbdmVyYl0iCittc2dzdHIgIua3u+WKoOagh+etviIKKworIy4gIkEgcmVndWxhciBnaXQgYnJhbmNoIHRoYXQgaXMgdXNlZCB0byBmb2xsb3cgY2hhbmdlcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeS4iCittc2dpZCAidHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLot5/ouKrliIbmlK8iCisKKyMuICIiCittc2dpZCAidW5kbyIKK21zZ3N0ciAi5pKk6ZSAIgorCisjLiAiIgorbXNnaWQgInVwZGF0ZSIKK21zZ3N0ciAi5pu05paw44CC5rOo5oSP5ZKMZmV0Y2jnmoTljLrliIYiCisKKyMuICIiCittc2dpZCAidmVyaWZ5IgorbXNnc3RyICLpqozor4EiCisKKyMuICJUaGUgdHJlZSBvZiBhY3R1YWwgY2hlY2tlZCBvdXQgZmlsZXMuIgorIy4gIuW3peS9nOWJr+acrO+8n+W3peS9nOWMuuWfn++8n+W3peS9nOebruW9lSIKKyMuIFtMSSBZYW5nXTog5b2T5YmN5Ymv5pys77yMIOW9k+WJjea6kOeggeagke+8nworbXNnaWQgIndvcmtpbmcgY29weSwgd29ya2luZyB0cmVlIgorbXNnc3RyICLlt6XkvZzlia/mnKzvvIzlt6XkvZzmupDnoIHmoJEiCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2h1LnBvIGIvZ2l0LWd1aS9wby9odS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTA2ZGFkCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9odS5wbwpAQCAtMCwwICsxLDI2MDIgQEAKKyMgSHVuZ2FyaWFuIHRyYW5zbGF0aW9ucyBmb3IgZ2l0LWd1aS1pIHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMjAwNyBUSEUgZ2l0LWd1aS1pJ1MgQ09QWVJJR0hUIEhPTERFUgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aS1pIHBhY2thZ2UuCisjIE1pa2xvcyBWYWpuYSA8dm1pa2xvc0BmcnVnYWx3YXJlLm9yZz4sIDIwMDcuCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpLWkgMThuXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTEyLTA4IDA4OjMxLTA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA4LTEyLTEwIDE1OjAwKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1pa2xvcyBWYWpuYSA8dm1pa2xvc0BmcnVnYWx3YXJlLm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBIdW5nYXJpYW5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjczNyBnaXQtZ3VpLnNoOjc1MSBnaXQtZ3VpLnNoOjc2NCBnaXQtZ3VpLnNoOjg0NworIzogZ2l0LWd1aS5zaDo4NjYKK21zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKK21zZ3N0ciAiZ2l0LWd1aTogdsOpZ3pldGVzIGhpYmEiCisKKyM6IGdpdC1ndWkuc2g6Njg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgIsOJcnbDqW55dGVsZW4gZm9udCBsZXR0IG1lZ2FkdmEgaXR0OiAlczoiCisKKyM6IGdpdC1ndWkuc2g6NzIzCittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICJGxZEgYmV0xbF0w61wdXMiCisKKyM6IGdpdC1ndWkuc2g6NzI0Cittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgIkRpZmYva29uem9sIGJldMWxdMOtcHVzIgorCisjOiBnaXQtZ3VpLnNoOjczOAorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAiQSBnaXQgbmVtIHRhbMOhbGhhdMOzIGEgUEFUSC1iYW4uIgorCisjOiBnaXQtZ3VpLnNoOjc2NQorbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgorbXNnc3RyICJOZW0gw6lydGVsbWV6aGV0xZEgYSBHaXQgdmVyemnDsyBzenRyaW5nOiIKKworIzogZ2l0LWd1aS5zaDo3ODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCisiXG4iCisiJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKKyJcbiIKKyIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCisiXG4iCisiQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKK21zZ3N0ciAiIgorIk5lbSDDoWxsw61ww610aGF0w7MgbWVnIGEgR2l0IHZlcnppw7NqYS5cbiIKKyJcbiIKKyJBKHopICVzIHN6ZXJpbnQgYSB2ZXJ6acOzICclcycuXG4iCisiXG4iCisiQSh6KSAlcyBhIEdpdCAxLjUuMCB2YWd5IGvDqXPFkWJiaSB2ZXJ6acOzasOhdCBpZ8OpbnlsaS5cbiIKKyJcbiIKKyJGZWx0w6l0ZWxlemhldGrDvGssIGhvZ3kgYSh6KSAnJXMnIHZlcnppw7NqYSBsZWdhbMOhYmIgMS41LjA/XG4iCisKKyM6IGdpdC1ndWkuc2g6MTA2MgorbXNnaWQgIkdpdCBkaXJlY3Rvcnkgbm90IGZvdW5kOiIKK21zZ3N0ciAiQSBHaXQga8O2bnl2dMOhciBuZW0gdGFsw6FsaGF0w7M6IgorCisjOiBnaXQtZ3VpLnNoOjEwNjkKK21zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgorbXNnc3RyICJOZW0gbGVoZXQgYSBtdW5rYWvDtm55dnTDoXIgdGV0ZWrDqXJlIGzDqXBuaToiCisKKyM6IGdpdC1ndWkuc2g6MTA3NgorbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgorbXNnc3RyICJOZW0gaGFzem7DoWxoYXTDsyB2aWNjZXMgLmdpdCBrw7ZueXZ0w6FyOiIKKworIzogZ2l0LWd1aS5zaDoxMDgxCittc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIk5pbmNzIG11bmtha8O2bnl2dMOhciIKKworIzogZ2l0LWd1aS5zaDoxMjQ3IGxpYi9jaGVja291dF9vcC50Y2w6MzA1Cittc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKK21zZ3N0ciAiQSBmw6FqbG9rIHN0w6F0dXN6w6FuYWsgZnJpc3PDrXTDqXNlLi4uIgorCisjOiBnaXQtZ3VpLnNoOjEzMDMKK21zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgorbXNnc3RyICJNw7Nkb3PDrXRvdHQgZsOhamxvayBrZXJlc8Opc2UgLi4uIgorCisjOiBnaXQtZ3VpLnNoOjEzNjcKK21zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICJBIHByZXBhcmUtY29tbWl0LW1zZyBodXJvayBtZWdow612w6FzYS4uLiIKKworIzogZ2l0LWd1aS5zaDoxMzg0Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiQSBjb21taXRvdCBtZWdha2Fkw6FseW96dGEgYSBwcmVwYXJlLWNvbW1pdC1tc2cgaHVyb2suIgorCisjOiBnaXQtZ3VpLnNoOjE1NDIgbGliL2Jyb3dzZXIudGNsOjI0NgorbXNnaWQgIlJlYWR5LiIKK21zZ3N0ciAiS8Opc3ouIgorCisjOiBnaXQtZ3VpLnNoOjE4MTkKK21zZ2lkICJVbm1vZGlmaWVkIgorbXNnc3RyICJOZW0gbcOzZG9zw610b3R0IgorCisjOiBnaXQtZ3VpLnNoOjE4MjEKK21zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiTcOzZG9zw610b3R0LCBkZSBuZW0ga2l2w6FsYXN6dG90dCIKKworIzogZ2l0LWd1aS5zaDoxODIyIGdpdC1ndWkuc2g6MTgzMAorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJLaXbDoWxhc3p0dmEgY29tbWl0b2zDoXNyYSIKKworIzogZ2l0LWd1aS5zaDoxODIzIGdpdC1ndWkuc2g6MTgzMQorbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJSw6lzemVrIGtpdsOhbGFzenR2YSBjb21taXRvbMOhc3JhIgorCisjOiBnaXQtZ3VpLnNoOjE4MjQgZ2l0LWd1aS5zaDoxODMyCittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCittc2dzdHIgIktpdsOhbGFzenR2YSBjb21taXRvbMOhc3JhLCBoacOhbnl6w7MiCisKKyM6IGdpdC1ndWkuc2g6MTgyNgorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJGw6FqbCB0w61wdXMgbWVndsOhbHRvem90dCwgbmVtIGtpdsOhbGFzenRvdHQiCisKKyM6IGdpdC1ndWkuc2g6MTgyNworbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCittc2dzdHIgIkEgZsOhamx0w61wdXMgbWVndsOhbHRvem90dCwga2l2w6FsYXN6dG90dCIKKworIzogZ2l0LWd1aS5zaDoxODI5Cittc2dpZCAiVW50cmFja2VkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJOZW0ga8O2dmV0ZXR0LCBuZW0ga2l2w6FsYXN6dG90dCIKKworIzogZ2l0LWd1aS5zaDoxODM0Cittc2dpZCAiTWlzc2luZyIKK21zZ3N0ciAiSGnDoW55esOzIgorCisjOiBnaXQtZ3VpLnNoOjE4MzUKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCittc2dzdHIgIktpdsOhbGFzenR2YSBlbHTDoXZvbMOtdMOhc3JhIgorCisjOiBnaXQtZ3VpLnNoOjE4MzYKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIktpdsOhbGFzenR2YSBlbHTDoXZvbMOtdMOhc3JhLCBqZWxlbmxlZyBpcyBlbMOpcmhldMWRIgorCisjOiBnaXQtZ3VpLnNoOjE4MzggZ2l0LWd1aS5zaDoxODM5IGdpdC1ndWkuc2g6MTg0MCBnaXQtZ3VpLnNoOjE4NDEKKyM6IGdpdC1ndWkuc2g6MTg0MiBnaXQtZ3VpLnNoOjE4NDMKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJNZXJnZSBmZWxvbGTDoXMgc3rDvGtzw6lnZXMiCisKKyM6IGdpdC1ndWkuc2g6MTg3OAorbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIkEgZ2l0ayBpbmTDrXTDoXNhLi4uIHbDoXJqdW5rLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE4ODcKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKK21zZ3N0ciAiQSBnaXRrIG5lbSB0YWzDoWxoYXTDsyBhIFBBVEgtYmFuLiIKKworIzogZ2l0LWd1aS5zaDoyMjgwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICJSZXDDsyIKKworIzogZ2l0LWd1aS5zaDoyMjgxCittc2dpZCAiRWRpdCIKK21zZ3N0ciAiU3plcmtlc3p0w6lzIgorCisjOiBnaXQtZ3VpLnNoOjIyODMgbGliL2Nob29zZV9yZXYudGNsOjU2MQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiQnJhbmNoIgorCisjOiBnaXQtZ3VpLnNoOjIyODYgbGliL2Nob29zZV9yZXYudGNsOjU0OAorbXNnaWQgIkNvbW1pdEBAbm91biIKK21zZ3N0ciAiQ29tbWl0QEBmxZFuw6l2IgorCisjOiBnaXQtZ3VpLnNoOjIyODkgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAiTWVyZ2UiCisKKyM6IGdpdC1ndWkuc2g6MjI5MCBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3Cittc2dpZCAiUmVtb3RlIgorbXNnc3RyICJUw6F2b2xpIgorCisjOiBnaXQtZ3VpLnNoOjIyOTMKK21zZ2lkICJUb29scyIKK21zZ3N0ciAiRXN6a8O2esO2ayIKKworIzogZ2l0LWd1aS5zaDoyMzAyCittc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCittc2dzdHIgIk11bmthbcOhc29sYXQgZmVsZmVkZXrDqXNlIgorCisjOiBnaXQtZ3VpLnNoOjIzMDcKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAiQSBqZWxlbmxlZ2kgYnJhbmNoIGbDoWpsamFpbmFrIGLDtm5nw6lzesOpc2UiCisKKyM6IGdpdC1ndWkuc2g6MjMxMQorbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCittc2dzdHIgIkEgYnJhbmNoIGbDoWpsamFpbmFrIGLDtm5nw6lzesOpc2UuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjMxNgorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCdzIEhpc3RvcnkiCittc2dzdHIgIkEgamVsZW5sZWdpIGJyYW5jaCB0w7ZydMOpbmV0w6luZWsgdml6dWFsaXrDoWzDoXNhIgorCisjOiBnaXQtZ3VpLnNoOjIzMjAKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgorbXNnc3RyICJBeiDDtnNzemVzIGJyYW5jaCB0w7ZydMOpbmV0w6luZWsgdml6dWFsaXrDoWzDoXNhIgorCisjOiBnaXQtZ3VpLnNoOjIzMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKK21zZ3N0ciAiQSh6KSAlcyBicmFuY2ggZsOhamxqYWluYWsgYsO2bmfDqXN6w6lzZSIKKworIzogZ2l0LWd1aS5zaDoyMzI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKK21zZ3N0ciAiQSh6KSAlcyBicmFuY2ggdMO2cnTDqW5ldMOpbmVrIHZpenVhbGl6w6Fsw6FzYSIKKworIzogZ2l0LWd1aS5zaDoyMzM0IGxpYi9kYXRhYmFzZS50Y2w6MjcgbGliL2RhdGFiYXNlLnRjbDo2NworbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCittc2dzdHIgIkFkYXRiw6F6aXMgc3RhdGlzenRpa8OhayIKKworIzogZ2l0LWd1aS5zaDoyMzM3IGxpYi9kYXRhYmFzZS50Y2w6MzQKK21zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKK21zZ3N0ciAiQWRhdGLDoXppcyB0w7Ztw7Zyw610w6lzZSIKKworIzogZ2l0LWd1aS5zaDoyMzQwCittc2dpZCAiVmVyaWZ5IERhdGFiYXNlIgorbXNnc3RyICJBZGF0YsOhemlzIGVsbGVuxZFyesOpc2UiCisKKyM6IGdpdC1ndWkuc2g6MjM0NyBnaXQtZ3VpLnNoOjIzNTEgZ2l0LWd1aS5zaDoyMzU1IGxpYi9zaG9ydGN1dC50Y2w6NworIzogbGliL3Nob3J0Y3V0LnRjbDozOSBsaWIvc2hvcnRjdXQudGNsOjcxCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAiQXN6dGFsIGlrb24gbMOpdHJlaG96w6FzYSIKKworIzogZ2l0LWd1aS5zaDoyMzYzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCittc2dpZCAiUXVpdCIKK21zZ3N0ciAiS2lsw6lww6lzIgorCisjOiBnaXQtZ3VpLnNoOjIzNzEKK21zZ2lkICJVbmRvIgorbXNnc3RyICJWaXNzemF2b27DoXMiCisKKyM6IGdpdC1ndWkuc2g6MjM3NAorbXNnaWQgIlJlZG8iCittc2dzdHIgIk3DqWdpcyIKKworIzogZ2l0LWd1aS5zaDoyMzc4IGdpdC1ndWkuc2g6MjkzNworbXNnaWQgIkN1dCIKK21zZ3N0ciAiS2l2w6Fnw6FzIgorCisjOiBnaXQtZ3VpLnNoOjIzODEgZ2l0LWd1aS5zaDoyOTQwIGdpdC1ndWkuc2g6MzAxNCBnaXQtZ3VpLnNoOjMwOTYKKyM6IGxpYi9jb25zb2xlLnRjbDo2OQorbXNnaWQgIkNvcHkiCittc2dzdHIgIk3DoXNvbMOhcyIKKworIzogZ2l0LWd1aS5zaDoyMzg0IGdpdC1ndWkuc2g6Mjk0MworbXNnaWQgIlBhc3RlIgorbXNnc3RyICJCZWlsbGVzenTDqXMiCisKKyM6IGdpdC1ndWkuc2g6MjM4NyBnaXQtZ3VpLnNoOjI5NDYgbGliL2JyYW5jaF9kZWxldGUudGNsOjI2CisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM4Cittc2dpZCAiRGVsZXRlIgorbXNnc3RyICJUw7ZybMOpcyIKKworIzogZ2l0LWd1aS5zaDoyMzkxIGdpdC1ndWkuc2g6Mjk1MCBnaXQtZ3VpLnNoOjMxMDAgbGliL2NvbnNvbGUudGNsOjcxCittc2dpZCAiU2VsZWN0IEFsbCIKK21zZ3N0ciAiTWluZGVudCBraXbDoWxhc3p0IgorCisjOiBnaXQtZ3VpLnNoOjI0MDAKK21zZ2lkICJDcmVhdGUuLi4iCittc2dzdHIgIkzDqXRyZWhvesOhcy4uLiIKKworIzogZ2l0LWd1aS5zaDoyNDA2Cittc2dpZCAiQ2hlY2tvdXQuLi4iCittc2dzdHIgIkNoZWNrb3V0Li4uIgorCisjOiBnaXQtZ3VpLnNoOjI0MTIKK21zZ2lkICJSZW5hbWUuLi4iCittc2dzdHIgIsOBdG5ldmV6w6lzLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI0MTcKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIlTDtnJsw6lzLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI0MjIKK21zZ2lkICJSZXNldC4uLiIKK21zZ3N0ciAiVmlzc3phw6FsbMOtdMOhcy4uLiIKKworIzogZ2l0LWd1aS5zaDoyNDMyCittc2dpZCAiRG9uZSIKK21zZ3N0ciAiS8Opc3oiCisKKyM6IGdpdC1ndWkuc2g6MjQzNAorbXNnaWQgIkNvbW1pdEBAdmVyYiIKK21zZ3N0ciAiQ29tbWl0QEBpZ2UiCisKKyM6IGdpdC1ndWkuc2g6MjQ0MyBnaXQtZ3VpLnNoOjI4NzgKK21zZ2lkICJOZXcgQ29tbWl0IgorbXNnc3RyICLDmmogY29tbWl0IgorCisjOiBnaXQtZ3VpLnNoOjI0NTEgZ2l0LWd1aS5zaDoyODg1Cittc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCittc2dzdHIgIlV0b2xzw7MgY29tbWl0IGphdsOtdMOhc2EiCisKKyM6IGdpdC1ndWkuc2g6MjQ2MSBnaXQtZ3VpLnNoOjI4MzkgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQorbXNnaWQgIlJlc2NhbiIKK21zZ3N0ciAiS2VyZXPDqXMgw7pqcmEiCisKKyM6IGdpdC1ndWkuc2g6MjQ2NworbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKK21zZ3N0ciAiS2l2w6FsYXN6dMOhcyBjb21taXRvbMOhc3JhIgorCisjOiBnaXQtZ3VpLnNoOjI0NzMKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAiTcOzZG9zw610b3R0IGbDoWpsb2sga2l2w6FsYXN6dMOhc2EgY29tbWl0b2zDoXNyYSIKKworIzogZ2l0LWd1aS5zaDoyNDc5Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAiQ29tbWl0YmEgdmFsw7Mga2l2w6FsYXN6dMOhcyB2aXNzemF2b27DoXNhIgorCisjOiBnaXQtZ3VpLnNoOjI0ODQgbGliL2luZGV4LnRjbDo0MTAKK21zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKK21zZ3N0ciAiVsOhbHRvenRhdMOhc29rIHZpc3N6YcOhbGzDrXTDoXNhIgorCisjOiBnaXQtZ3VpLnNoOjI0OTEgZ2l0LWd1aS5zaDozMDgzCittc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCittc2dzdHIgIktldmVzZWJiIGvDtnJueWV6ZXQgbXV0YXTDoXNhIgorCisjOiBnaXQtZ3VpLnNoOjI0OTUgZ2l0LWd1aS5zaDozMDg3Cittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgIlTDtmJiIGvDtnJueWV6ZXQgbXV0YXTDoXNhIgorCisjOiBnaXQtZ3VpLnNoOjI1MDIgZ2l0LWd1aS5zaDoyODUyIGdpdC1ndWkuc2g6Mjk2MQorbXNnaWQgIlNpZ24gT2ZmIgorbXNnc3RyICJBbMOhw61yIgorCisjOiBnaXQtZ3VpLnNoOjI1MTgKK21zZ2lkICJMb2NhbCBNZXJnZS4uLiIKK21zZ3N0ciAiSGVseWkgbWVyZ2UuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjUyMworbXNnaWQgIkFib3J0IE1lcmdlLi4uIgorbXNnc3RyICJNZXJnZSBtZWdzemFrw610w6FzYS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTM1IGdpdC1ndWkuc2g6MjU3NQorbXNnaWQgIkFkZC4uLiIKK21zZ3N0ciAiSG96esOhYWTDoXMuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjUzOQorbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIlB1c2guLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU0MworbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCittc2dzdHIgIkJyYW5jaCB0w7ZybMOpc2UuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU1MyBnaXQtZ3VpLnNoOjI1ODkgbGliL2Fib3V0LnRjbDoxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvdXQgJXMiCittc2dzdHIgIk7DqXZqZWd5OiAlcyIKKworIzogZ2l0LWd1aS5zaDoyNTU3Cittc2dpZCAiUHJlZmVyZW5jZXMuLi4iCittc2dzdHIgIkJlw6FsbMOtdMOhc29rLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1NjUgZ2l0LWd1aS5zaDozMTI5Cittc2dpZCAiT3B0aW9ucy4uLiIKK21zZ3N0ciAiT3BjacOzay4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTc2Cittc2dpZCAiUmVtb3ZlLi4uIgorbXNnc3RyICJFbHTDoXZvbMOtdMOhcy4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTg1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKK21zZ2lkICJIZWxwIgorbXNnc3RyICJTZWfDrXRzw6lnIgorCisjOiBnaXQtZ3VpLnNoOjI2MTEKK21zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKK21zZ3N0ciAiT25saW5lIGRva3VtZW50w6FjacOzIgorCisjOiBnaXQtZ3VpLnNoOjI2MTQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Cittc2dpZCAiU2hvdyBTU0ggS2V5IgorbXNnc3RyICJTU0gga3VsY3MgbXV0YXTDoXNhIgorCisjOiBnaXQtZ3VpLnNoOjI3MjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorInbDqWd6ZXRlcyBoaWJhOiBuZW0gw6lyaGV0xZEgZWwgYSh6KSAlcyDDunR2b25hbDogTmluY3MgaWx5ZW4gZsOhamwgdmFneSBrw7ZueXZ0w6FyIgorCisjOiBnaXQtZ3VpLnNoOjI3NTQKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgIkplbGVubGVnaSBicmFuY2g6IgorCisjOiBnaXQtZ3VpLnNoOjI3NzUKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICJLaXbDoWxhc3p0b3R0IHbDoWx0b3p0YXTDoXNvayAoY29tbWl0b2x2YSBsZXN6KSIKKworIzogZ2l0LWd1aS5zaDoyNzk1Cittc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKK21zZ3N0ciAiS2l2w6FsYXN6dGF0bGFuIHbDoWx0b3p0YXTDoXNvayIKKworIzogZ2l0LWd1aS5zaDoyODQ1Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAiVsOhbHRvenRhdMOhc29rIGtpdsOhbGFzenTDoXNhIgorCisjOiBnaXQtZ3VpLnNoOjI4NjQgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MworbXNnaWQgIlB1c2giCittc2dzdHIgIlB1c2giCisKKyM6IGdpdC1ndWkuc2g6Mjg5OQorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJLZXpkZXRpIGNvbW1pdCDDvHplbmV0OiIKKworIzogZ2l0LWd1aS5zaDoyOTAwCittc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkphdsOtdMOzIGNvbW1pdCDDvHplbmV0OiIKKworIzogZ2l0LWd1aS5zaDoyOTAxCittc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiS2V6ZGV0aSBqYXbDrXTDsyBjb21taXQgw7x6ZW5ldDoiCisKKyM6IGdpdC1ndWkuc2g6MjkwMgorbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJKYXbDrXTDsyBtZXJnZSBjb21taXQgw7x6ZW5ldDoiCisKKyM6IGdpdC1ndWkuc2g6MjkwMworbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTWVyZ2UgY29tbWl0IMO8emVuZXQ6IgorCisjOiBnaXQtZ3VpLnNoOjI5MDQKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkNvbW1pdCDDvHplbmV0OiIKKworIzogZ2l0LWd1aS5zaDoyOTUzIGdpdC1ndWkuc2g6MzEwNCBsaWIvY29uc29sZS50Y2w6NzMKK21zZ2lkICJDb3B5IEFsbCIKK21zZ3N0ciAiw5Zzc3plcyBtw6Fzb2zDoXNhIgorCisjOiBnaXQtZ3VpLnNoOjI5NzcgbGliL2JsYW1lLnRjbDoxMDQKK21zZ2lkICJGaWxlOiIKK21zZ3N0ciAiRsOhamw6IgorCisjOiBnaXQtZ3VpLnNoOjMwOTIKK21zZ2lkICJSZWZyZXNoIgorbXNnc3RyICJGcmlzc8OtdMOpcyIKKworIzogZ2l0LWd1aS5zaDozMTEzCittc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICJGb250IG3DqXJldCBjc8O2a2tlbnTDqXNlIgorCisjOiBnaXQtZ3VpLnNoOjMxMTcKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIkbDtm50IG3DqXJldCBuw7Z2ZWzDqXNlIgorCisjOiBnaXQtZ3VpLnNoOjMxMjUgbGliL2JsYW1lLnRjbDoyODEKK21zZ2lkICJFbmNvZGluZyIKK21zZ3N0ciAiS8OzZG9sw6FzIgorCisjOiBnaXQtZ3VpLnNoOjMxMzYKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgIkh1bmsgYWxrYWxtYXrDoXNhL3Zpc3N6YcOhbGzDrXTDoXNhIgorCisjOiBnaXQtZ3VpLnNoOjMxNDEKK21zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCittc2dzdHIgIlNvciBhbGthbG1hesOhc2Evdmlzc3phw6FsbMOtdMOhc2EiCisKKyM6IGdpdC1ndWkuc2g6MzE1MQorbXNnaWQgIlJ1biBNZXJnZSBUb29sIgorbXNnc3RyICJNZXJnZSBlc3prw7Z6IGZ1dHRhdMOhc2EiCisKKyM6IGdpdC1ndWkuc2g6MzE1NgorbXNnaWQgIlVzZSBSZW1vdGUgVmVyc2lvbiIKK21zZ3N0ciAiVMOhdm9saSB2ZXJ6acOzIGhhc3puw6FsYXRhIgorCisjOiBnaXQtZ3VpLnNoOjMxNjAKK21zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKK21zZ3N0ciAiSGVseWkgdmVyemnDsyBoYXN6bsOhbGF0YSIKKworIzogZ2l0LWd1aS5zaDozMTY0Cittc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCittc2dzdHIgIlZpc3N6YcOhbGzDrXTDoXMgYXogYWxhcGhveiIKKworIzogZ2l0LWd1aS5zaDozMTgzCittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICJIdW5rIHTDtnJsw6lzZSBjb21taXRiw7NsIgorCisjOiBnaXQtZ3VpLnNoOjMxODQKK21zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCittc2dzdHIgIkEgc29yIGtpdsOhbGFzenTDoXPDoW5hayB0w7ZybMOpc2UiCisKKyM6IGdpdC1ndWkuc2g6MzE4NgorbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKK21zZ3N0ciAiSHVuayBraXbDoWxhc3p0w6FzYSBjb21taXRiYSIKKworIzogZ2l0LWd1aS5zaDozMTg3Cittc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgorbXNnc3RyICJTb3Iga2l2w6FsYXN6dMOhc2EgY29tbWl0YmEiCisKKyM6IGdpdC1ndWkuc2g6MzIxMAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiSW5pY2lhbGl6w6Fsw6FzLi4uIgorCisjOiBnaXQtZ3VpLnNoOjMzMTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisiTGVoZXRzw6lnZXMsIGhvZ3kga8O2cm55ZXpldGkgcHJvYmzDqW3DoWsgdmFubmFrLlxuIgorIlxuIgorIkEga8O2dmV0a2V6xZEga8O2cm55ZXpldGkgdsOhbHRvesOzayB2YWzDs3N6w61uxbFsZWdcbiIKKyJmaWd5ZWxtZW4ga8OtdsO8bCBsZXN6bmVrIGhhZ3l2YSBhKHopICVzIMOhbHRhbFxuIgorImluZMOtdG90dCBmb2x5YW1hdG9rIMOhbHRhbDpcbiIKKyJcbiIKKworIzogZ2l0LWd1aS5zaDozMzQ1Cittc2dpZCAiIgorIlxuIgorIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKKyJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJFeiBhIEN5Z3dpbiDDoWx0YWwgdGVyamVzenRldHQgVGNsIGJpbsOhcmlzYmFuXG4iCisibMOpdsWRIGlzbWVydCBoaWJhIG1pYXR0IHZhbi4iCisKKyM6IGdpdC1ndWkuc2g6MzM1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCisiaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCisidXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKKyJ+Ly5naXRjb25maWcgZmlsZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIkVneSBqw7MgaGVseWV0dGVzw610w6lzIGEoeikgJXMgc3rDoW3DoXJhXG4iCisiYSB1c2VyLm5hbWUgw6lzIHVzZXIuZW1haWwgYmXDoWxsw610w6Fzb2tcbiIKKyJlbGhlbHllesOpc2UgYSBzemVtw6lseWVzXG4iCisifi8uZ2l0Y29uZmlnIGbDoWpsYmEuXG4iCisKKyM6IGxpYi9hYm91dC50Y2w6MjYKK21zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCittc2dzdHIgImdpdC1ndWkgLSBlZ3kgZ3JhZmlrdXMgZmVsw7xsZXQgYSBHaXRoZXouIgorCisjOiBsaWIvYmxhbWUudGNsOjcyCittc2dpZCAiRmlsZSBWaWV3ZXIiCittc2dzdHIgIkbDoWpsIG7DqXrFkSIKKworIzogbGliL2JsYW1lLnRjbDo3OAorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIkNvbW1pdDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjcxCittc2dpZCAiQ29weSBDb21taXQiCittc2dzdHIgIkNvbW1pdCBtw6Fzb2zDoXNhIgorCisjOiBsaWIvYmxhbWUudGNsOjI3NQorbXNnaWQgIkZpbmQgVGV4dC4uLiIKK21zZ3N0ciAiU3rDtnZlZyBrZXJlc8Opc2UuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg0Cittc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKK21zZ3N0ciAiVGVsamVzIG3DoXNvbGF0LcOpcnrDqWtlbMOpcyBiZWthcGNzb2zDoXNhIgorCisjOiBsaWIvYmxhbWUudGNsOjI4OAorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICJUw7ZydMOpbmV0aSBrw7ZybnllemV0IG11dGF0w6FzYSIKKworIzogbGliL2JsYW1lLnRjbDoyOTEKK21zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgorbXNnc3RyICJTesO8bMWRIGNvbW1pdCB2aXpzZ8OhbGF0YSIKKworIzogbGliL2JsYW1lLnRjbDo0NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZWFkaW5nICVzLi4uIgorbXNnc3RyICJBKHopICVzIG9sdmFzw6FzYS4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1NTcKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAiQSBtw6Fzb2zDoXN0L8OhdG5ldmV6w6lzdCBrw7Z2ZXTFkSBhbm5vdMOhY2nDs2sgYmV0w7ZsdMOpc2UuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NTc3Cittc2dpZCAibGluZXMgYW5ub3RhdGVkIgorbXNnc3RyICJzb3IgYW5ub3TDoWx2YSIKKworIzogbGliL2JsYW1lLnRjbDo3NjkKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICJBeiBlcmVkZXRpIGhlbHkgYW5ub3TDoWNpw7NrIGJldMO2bHTDqXNlLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjc3MgorbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgorbXNnc3RyICJBeiBhbm5vdMOhY2nDsyBrw6lzei4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAyCittc2dpZCAiQnVzeSIKK21zZ3N0ciAiRWxmb2dsYWx0IgorCisjOiBsaWIvYmxhbWUudGNsOjgwMworbXNnaWQgIkFubm90YXRpb24gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcuIgorbXNnc3RyICJBeiBhbm5vdMOhY2nDs3MgZm9seWFtYXQgbcOhciBmdXQuIgorCisjOiBsaWIvYmxhbWUudGNsOjg0MgorbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCittc2dzdHIgIkZ1dHRhdMOhcyBtw6Fzb2zDoXMtw6lyesOpa2Vsw6lzZW4ga2VyZXN6dMO8bC4uLiIKKworIzogbGliL2JsYW1lLnRjbDo5MTAKK21zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCittc2dzdHIgIkF6IGFubm90w6FjacOzIGJldMO2bHTDqXNlLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjk2MworbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIlN6ZXJ6xZE6IgorCisjOiBsaWIvYmxhbWUudGNsOjk2NworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIkNvbW1pdGVyOiIKKworIzogbGliL2JsYW1lLnRjbDo5NzIKK21zZ2lkICJPcmlnaW5hbCBGaWxlOiIKK21zZ3N0ciAiRXJlZGV0aSBmw6FqbDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTAyMAorbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKK21zZ3N0ciAiTmVtIHRhbMOhbGhhdMOzIGEgSEVBRCBjb21taXQ6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwNzUKK21zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKK21zZ3N0ciAiTmVtIHRhbMOhbGhhdMOzIGEgc3rDvGzFkSBjb21taXQ6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTAKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSBwYXJlbnQiCittc2dzdHIgIk5lbSBsZWhldCBtZWdqZWxlbsOtdGVuaSBhIHN6w7xsxZF0IgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjI5NworbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgIkhpYmEgYSBkaWZmIGJldMO2bHTDqXNlIGvDtnpiZW46IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzEKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAiRXJlZGV0aSBzemVyesWROiIKKworIzogbGliL2JsYW1lLnRjbDoxMjM3Cittc2dpZCAiSW4gRmlsZToiCittc2dzdHIgIkViYmVuIGEgZsOhamxiYW46IgorCisjOiBsaWIvYmxhbWUudGNsOjEyNDIKK21zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCittc2dzdHIgIklkZSBtw6Fzb2x0YSB2YWd5IGhlbHllenRlOiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTkKK21zZ2lkICJDaGVja291dCBCcmFuY2giCittc2dzdHIgIkJyYW5jaCBjaGVja291dG9sw6FzYSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiQ2hlY2tvdXQiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU0NCBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcyCisjOiBsaWIvb3B0aW9uLnRjbDoxMjUgbGliL3JlbW90ZV9hZGQudGNsOjMyIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDIKKyM6IGxpYi90b29sc19kbGcudGNsOjQwIGxpYi90b29sc19kbGcudGNsOjIwNCBsaWIvdG9vbHNfZGxnLnRjbDozNTIKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwOAorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiTcOpZ3NlbSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzIgbGliL2Jyb3dzZXIudGNsOjI4NyBsaWIvdG9vbHNfZGxnLnRjbDozMjgKK21zZ2lkICJSZXZpc2lvbiIKK21zZ3N0ciAiUmV2w616acOzIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MjgwCittc2dpZCAiT3B0aW9ucyIKK21zZ3N0ciAiT3BjacOzayIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzkgbGliL2JyYW5jaF9jcmVhdGUudGNsOjkyCittc2dpZCAiRmV0Y2ggVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICJLw7Z2ZXTFkSBicmFuY2ggbGV0w7ZsdMOpc2UiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Cittc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgorbXNnc3RyICJIZWx5aSBicmFuY2ggbGV2w6FsYXN6dMOhc2EiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgorbXNnaWQgIkNyZWF0ZSBCcmFuY2giCittc2dzdHIgIkJyYW5jaCBsw6l0cmVob3rDoXNhIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjcKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAiw5pqIGJyYW5jaCBsw6l0cmVob3rDoXNhIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNzcKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkzDqXRyZWhvesOhcyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQwCittc2dpZCAiQnJhbmNoIE5hbWUiCittc2dzdHIgIkJyYW5jaCBuZXZlIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMgbGliL3JlbW90ZV9hZGQudGNsOjM5IGxpYi90b29sc19kbGcudGNsOjUwCittc2dpZCAiTmFtZToiCittc2dzdHIgIk7DqXY6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTgKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKK21zZ3N0ciAiRWd5ZXp0ZXRlbmTFkSBrw7Z2ZXTDqXNpIGJyYW5jaCBuw6l2IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKK21zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKK21zZ3N0ciAiQSBrw7Z2ZXRrZXrFkSByZXbDrXppw7N0w7NsIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKK21zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKK21zZ3N0ciAiTMOpdGV6xZEgYnJhbmNoIGZyaXNzw610w6lzZSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1Cittc2dpZCAiTm8iCittc2dzdHIgIk5lbSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjgwCittc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCittc2dzdHIgIkNzYWsgZmFzdCBmb3J3YXJkIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUgbGliL2NoZWNrb3V0X29wLnRjbDo1MzYKK21zZ2lkICJSZXNldCIKK21zZ3N0ciAiVmlzc3phw6FsbMOtdMOhcyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgIkNoZWNrb3V0IGzDqXRyZWhvesOhcyB1dMOhbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgorbXNnc3RyICJWw6FsYXNzenVuayBraSBlZ3kga8O2dmV0xZEgYnJhbmNoZXQuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgorbXNnc3RyICJBKHopICVzIGvDtnZldMWRIGJyYW5jaCBuZW0gYnJhbmNoIGEgdMOhdm9saSByZXDDs2Jhbi4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTMgbGliL2JyYW5jaF9yZW5hbWUudGNsOjg2Cittc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiQWRqdW5rIG1lZ3kgZWd5IGJyYW5jaCBuZXZldC4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgorbXNnc3RyICJBKHopICclcycgbmVtIGVneSBlbGZvZ2FkaGF0w7MgYnJhbmNoIG7DqXYuIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTUKK21zZ2lkICJEZWxldGUgQnJhbmNoIgorbXNnc3RyICJCcmFuY2ggdMO2cmzDqXNlIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjAKK21zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgorbXNnc3RyICJIZWx5aSBicmFuY2ggdMO2cmzDqXNlIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzcKK21zZ2lkICJMb2NhbCBCcmFuY2hlcyIKK21zZ3N0ciAiSGVseWkgYnJhbmNoZWsiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MgorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgorbXNnc3RyICJDc2FrIG3DoXIgbWVyZ2Utw7ZsdCB0w7ZybMOpc2UiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1NAorbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgdGVzdC4pIgorbXNnc3RyICJNaW5kaWcgKE5lIGxlZ3llbiBtZXJnZSB0ZXN6dC4pIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgorbXNnc3RyICJBIGvDtnZldGtlesWRIGJyYW5jaGVrIG5lbSB0ZWxqZXNlbiBsZXR0ZWsgbWVyZ2Utw7ZsdmUgZWJiZTogJXM6IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJOZW0gc2lrZXLDvGx0IHTDtnLDtmxuaSBhIGvDtnZldGtlesWRIGJyYW5jaGVrZXQ6XG4iCisiJXMiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxNCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjIKK21zZ2lkICJSZW5hbWUgQnJhbmNoIgorbXNnc3RyICJCcmFuY2ggw6F0bmV2ZXrDqXNlIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjYKK21zZ2lkICJSZW5hbWUiCittc2dzdHIgIsOBdG5ldmV6w6lzIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKK21zZ2lkICJCcmFuY2g6IgorbXNnc3RyICJCcmFuY2g6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzkKK21zZ2lkICJOZXcgTmFtZToiCittc2dzdHIgIsOaaiBuw6l2OiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjc1Cittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgorbXNnc3RyICJWw6FsYXNzenVuayBraSBlZ3kgw6F0bmV2ZXplbmTFkSBicmFuY2hldC4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5NiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiQSh6KSAnJXMnIGJyYW5jaCBtw6FyIGzDqXRlemlrLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCittc2dzdHIgIk5lbSBzaWtlcsO8bHQgw6F0bmV2ZXpuaTogJyVzJy4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICJJbmTDrXTDoXMuLi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNgorbXNnaWQgIkZpbGUgQnJvd3NlciIKK21zZ3N0ciAiRsOhamwgYsO2bmfDqXN6xZEiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxMjYgbGliL2Jyb3dzZXIudGNsOjE0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgJXMuLi4iCittc2dzdHIgIkEoeikgJXMgYmV0w7ZsdMOpc2UuLi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxODcKK21zZ2lkICJbVXAgVG8gUGFyZW50XSIKK21zZ3N0ciAiW0ZlbCBhIHN6w7xsxZFow7Z6XSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI2NyBsaWIvYnJvd3Nlci50Y2w6MjczCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKK21zZ3N0ciAiQSBicmFuY2ggZsOhamxqYWluYWsgYsO2bmfDqXN6w6lzZSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5NAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTEKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTk1Cittc2dpZCAiQnJvd3NlIgorbXNnc3RyICJCw7ZuZ8Opc3rDqXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgorbXNnc3RyICJBKHopICVzIGxldMO2bHTDqXNlIGlubmVuOiAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCittc2dzdHIgInbDqWd6ZXRlczogTmVtIGxlaGV0IGZlbG9sZGFuaSBhIGvDtnZldGtlesWRdDogJXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTQ1IGxpYi9jb25zb2xlLnRjbDo4MSBsaWIvZGF0YWJhc2UudGNsOjMxCisjOiBsaWIvc3Noa2V5LnRjbDo1MworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJCZXrDoXLDoXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJBKHopICclcycgYnJhbmNoIG5lbSBsw6l0ZXppay4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBzaW1wbGlmaWVkIGdpdC1wdWxsIGZvciAnJXMnLiIKK21zZ3N0ciAiIgorIk5lbSBzaWtlcsO8bHQgYmXDoWxsw610YW5pIGF6IGVneXN6ZXLFsXPDrXRldHQgZ2l0LXB1bGwtdCBhKHopICclcycgc3rDoW3DoXJhLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCisiXG4iCisiSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKKyJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKK21zZ3N0ciAiIgorIkEoeikgJyVzJyBicmFuY2ggbcOhciBsw6l0ZXppay5cbiIKKyJcbiIKKyJOZW0gbGVoZXQgZmFzdC1mb3J3YXJkb2xuaSBhIGvDtnZldGtlesWRaMO2ejogJXMuXG4iCisiRWd5IG1lcmdlIHN6w7xrc8OpZ2VzLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJBKHopICclcycgbWVyZ2Ugc3RyYXRlZ3kgbmVtIHTDoW1vZ2F0b3R0LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IGZyaXNzw610ZW5pIGEga8O2dmV0a2V6xZF0OiAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzMKK21zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCittc2dzdHIgIkEga2l2w6FsYXN6dMOhc2kgdGVyw7xsZXQgKGluZGV4KSBtw6FyIHrDoXJvbHZhIHZhbi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg4Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJBeiB1dG9sc8OzIGtlcmVzw6lzaSDDoWxsYXBvdCBuZW0gZWd5ZXppayBtZWcgYSByZXDDsyDDoWxscG90w6F2YWwuXG4iCisiXG4iCisiRWd5IG3DoXNpayBHaXQgcHJvZ3JhbSBtw7Nkb3PDrXRvdHRhIGV6dCBhIHJlcMOzdCBheiB1dG9sc8OzIGtlcmVzw6lzIMOzdGEuIEVneSAiCisiw7pqcmFrZXJlc8OpcyBtaW5kZW5rw6lwcGVuIHN6w7xrc8OpZ2VzIG1pZWzFkXR0IGEgamVsZW5sZWdpIGJyYW5jaGV0IG3Ds2Rvc8OtdGFuaSAiCisibGVoZXRuZS5cbiIKKyJcbiIKKyJBeiDDumpyYWtlcmVzw6lzIG1vc3QgYXV0b21hdGlrdXNhbiBlbCBmb2cgaW5kdWxuaS5cbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgorbXNnc3RyICJBIG11bmtrw7ZueXZ0w6FyIGZyaXNzacOtdMOpc2UgYSBrw7Z2ZXRrZXrFkXJlOiAnJXMnLi4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQorbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgorbXNnc3RyICJmw6FqbCBmcmlzc8OtdHZlIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3J0ZWQgY2hlY2tvdXQgb2YgJyVzJyAoZmlsZSBsZXZlbCBtZXJnaW5nIGlzIHJlcXVpcmVkKS4iCittc2dzdHIgIkEoeikgJyVzJyBjaGVja291dGphIG1lZ3N6YWvDrXR2YSAoZsOhamxzemludMWxIG1lcmdlLcO2bMOpcyBzesO8a3PDqWdlcykuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NgorbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgorbXNnc3RyICJGw6FqbHN6aW50xbEgbWVyZ2Utw7Zsw6lzIHN6w7xrc8OpZ2VzLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiSmVsZW5sZWcgYSh6KSAnJXMnIGJyYW5jaGVuLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTEKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorIk3DoXIgbmVtIGVneSBoZWx5aSBicmFuY2hlbiB2YWd5dW5rLlxuIgorIlxuIgorIkhhIGVneSBicmFuY2hlbiBzemVyZXRuw6luayBsZW5uaSwgaG96enVuayBsw6l0cmUgZWd5ZXQgYXogJ0V6IGEgbGV2w6FsYXN6dG90dCAiCisiY2hlY2tvdXQnLWLDs2wuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ2OCBsaWIvY2hlY2tvdXRfb3AudGNsOjQ3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgorbXNnc3RyICInJXMnIGtpZmVqdHZlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorbXNnc3RyICIiCisiQSh6KSAnJXMnIC0+ICclcycgdmlzc3phw6FsbMOtdMOhcyBhIGvDtnZldGtlesWRIGNvbW1pdG9rIGVsdmVzenTDqXPDqXQgamVsZW50aToiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTIyCittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAiQXogZWx2ZXN6ZXR0IGNvbW1pdG9rIGhlbHlyZcOhbGzDrXTDoXNhIG5lbSBiaXp0b3MsIGhvZ3kgZWd5c3plcsWxLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAnJXMnPyIKK21zZ3N0ciAiVmlzc3phw6FsbMOtdGp1ayBhIGvDtnZldGtlesWRdDogJyVzJz8iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTMyIGxpYi9tZXJnZS50Y2w6MTY0IGxpYi90b29sc19kbGcudGNsOjM0MworbXNnaWQgIlZpc3VhbGl6ZSIKK21zZ3N0ciAiVml6dWFsaXrDoWzDoXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKKyJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAiIgorIk5lbSBzaWtlcsO8bHQgYmXDoWxsw610YW5pIGEgamVsZW5sZWdpIGJyYW5jaGV0LlxuIgorIlxuIgorIkEgbXVua2Frw7ZueXZ0w6FyIGNzYWsgcsOpc3piZW4gdsOhbHRvdHQgw6F0LiAgQSBmw6FqbG9rIHNpa2VyZXNlbiBmcmlzc8OtdHZlICIKKyJsZXR0ZWssIGRlIG5lbSBzaWtlcsO8bHQgZnJpc3PDrXRlbmkgZWd5IGJlbHPFkSBHaXQgZsOhamx0LlxuIgorIlxuIgorIkVubmVrIG5lbSBzemFiYWQgbWVndMO2cnTDqW5uaWUuICBBKHopICVzIG1vc3Qga2lsw6lwIMOpcyBmZWxhZGphLiIKKworIzogbGliL2Nob29zZV9mb250LnRjbDozOQorbXNnaWQgIlNlbGVjdCIKK21zZ3N0ciAiS2l2w6FsYXN6dCIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo1MworbXNnaWQgIkZvbnQgRmFtaWx5IgorbXNnc3RyICJGb250IGNzYWzDoWQiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzQKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIkZvbnQgbcOpcmV0IgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjkxCittc2dpZCAiRm9udCBFeGFtcGxlIgorbXNnc3RyICJGb250IHDDqWxkYSIKKworIzogbGliL2Nob29zZV9mb250LnRjbDoxMDMKK21zZ2lkICIiCisiVGhpcyBpcyBleGFtcGxlIHRleHQuXG4iCisiSWYgeW91IGxpa2UgdGhpcyB0ZXh0LCBpdCBjYW4gYmUgeW91ciBmb250LiIKK21zZ3N0ciAiIgorIkV6IGVneSBww6lsZGEgc3rDtnZlZy5cbiIKKyJIYSBleiBtZWdmZWxlbCwgZXogbGVoZXQgYSBiZXTFsXTDrXB1cy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKK21zZ2lkICJHaXQgR3VpIgorbXNnc3RyICJHaXQgR3VpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgyCittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICLDmmogcmVww7MgbMOpdHJlaG96w6FzYSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MworbXNnaWQgIk5ldy4uLiIKK21zZ3N0ciAiw5pqLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NQorbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIkzDqXRlesWRIHJlcMOzIG3DoXNvbMOhc2EiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2Cittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgIk3DoXNvbMOhcy4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5ODMKK21zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIkzDqXRlesWRIGvDtm55dnTDoXIgbWVnbnlpdMOhc2EiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE5Cittc2dpZCAiT3Blbi4uLiIKK21zZ3N0ciAiTWVnZ3lpdMOhcy4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKK21zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJMZWd1dMOzYmJpIHJlcMOzayIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzgKK21zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKK21zZ3N0ciAiTGVndXTDs2JiaSByZXDDs2sgbWVnbnlpdMOhc2E6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwMiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwOQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IGxldHJlaG96bmkgYSh6KSAlcyByZXDDs3Q6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NworbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIkvDtm55dnTDoXI6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxNyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU0NAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE3Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkiCittc2dzdHIgIkdpdCByZXDDsyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJBKHopICclcycga8O2bnl2dMOhciBtw6FyIGzDqXRlemlrLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiQSh6KSAnJXMnIGbDoWpsIG3DoXIgbMOpdGV6aWsuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2MAorbXNnaWQgIkNsb25lIgorbXNnc3RyICJCZXrDoXLDoXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDczCittc2dpZCAiU291cmNlIExvY2F0aW9uOiIKK21zZ3N0ciAiRm9ycsOhcyBoZWx5ZToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg0Cittc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCittc2dzdHIgIkPDqWwga8O2bnl2dMOhcjoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk2Cittc2dpZCAiQ2xvbmUgVHlwZToiCittc2dzdHIgIk3DoXNvbMOhcyB0w61wdXNhOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKK21zZ2lkICJTdGFuZGFyZCAoRmFzdCwgU2VtaS1SZWR1bmRhbnQsIEhhcmRsaW5rcykiCittc2dzdHIgIsOBbHRhbMOhbm9zIChHeW9ycywgZsOpbGlnLXJlZHVuZMOhbnMsIGhhcmRsaW5rZWspIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOAorbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKK21zZ3N0ciAiVGVsamVzIG3DoXNvbMOhcyAoTGFzc2FiYiwgcmVkdW5kw6FucyBiaXp0b25zw6FnaSBtZW50w6lzKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKK21zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKK21zZ3N0ciAiTWVnb3N6dG90dCAoTGVnZ3lvcnNhYmIsIG5lbSBhasOhbmxvdHQsIG5pbmNzIG1lbnTDqXMpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIk5lbSBHaXQgcmVww7M6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU4NgorbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiQSBzdGFuZGFyZCBjc2FrIGhlbHlpIHJlcMOza3JhIMOpcmhldMWRIGVsLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTAKK21zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJBIG1lZ29zenRvdHQgY3NhayBoZWx5aSByZXDDs2tyYSDDqXJoZXTFkSBlbC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9jYXRpb24gJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJBKHopICclcycgaGVseSBtw6FyIGzDqXRlemlrLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjIKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBiZcOhbGzDrXRhbmkgYXogb3JpZ2ludCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MzQKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJPYmpla3R1bW9rIHN6w6Ftb2zDoXNhIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYzNQorbXNnaWQgImJ1Y2tldHMiCittc2dzdHIgInbDtmRyw7ZrIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBtw6Fzb2xuaSBheiBvYmplY3RzL2luZm8vYWx0ZXJuYXRlcy10OiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2OTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHRvIGNsb25lIGZyb20gJXMuIgorbXNnc3RyICJTZW1taSBtw6Fzb2xuaSB2YWzDsyBuaW5jcyBpbm5lbjogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Njk3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTExCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyMworbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKK21zZ3N0ciAiQSAnbWFzdGVyJyBicmFuY2ggbmluY3MgaW5pY2lhbGl6w6FsdmEuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxMAorbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCittc2dzdHIgIk5lbSDDqXJoZXTFkWVrIGVsIGhhcmRsaW5rZWsuICBNw6Fzb2zDoXMgaGFzem7DoWxhdGEuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAiTcOhc29sw6FzIGlubmVuOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTMKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgIk9iamVrdHVtb2sgbcOhc29sw6FzYSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTQKK21zZ2lkICJLaUIiCittc2dzdHIgIktpQiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IG3DoXNvbG5pIGF6IG9iamVrdHVtb3Q6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4OAorbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKK21zZ3N0ciAiT2JqZWt0dW1vayDDtnNzemVmxbF6w6lzZSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODkKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICJvYmpla3R1bSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBoYXJkbGlua2VsbmkgYXogb2JqZWt0dW1vdDogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODUyCittc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIk5lbSBzaWtlcsO8bHQgbGV0w7ZsdGVuaSBhIGJyYW5jaC1la2V0IMOpcyBheiBvYmpla3R1bW9rYXQuICBCxZF2ZWJiZW4gYSAiCisia29uem9sb3Mga2ltZW5ldGJlbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODYzCittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IGxldMO2bHRlbmkgYSB0YWdla2V0LiAgQsWRdmViYmVuIGEga29uem9sb3Mga2ltZW5ldGJlbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODg3Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBtZWfDoWxsYXDDrXRhbmkgYSBIRUFELWV0LiAgQsWRdmViYmVuIGEga29uem9sb3Mga2ltZW5ldGJlbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCittc2dzdHIgIk5lbSBzaWtlcsO8bHQgdGlzesOtdGFuaTogJXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgorbXNnaWQgIkNsb25lIGZhaWxlZC4iCittc2dzdHIgIkEgbcOhc29sw6FzIG5lbSBzaWtlcsO8bHQuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOQorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAiTmluY3MgYWxhcMOpcnRlbG1lemV0dCBicmFuY2guIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBmZWzDtmxkYW5pIGEoeikgJXMgb2JqZWt0dW1vdCBjb21taXRrw6ludC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMyCittc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIk11bmtha8O2bnl2dMOhciBsw6l0cmVob3rDoXNhIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzMyBsaWIvaW5kZXgudGNsOjY1IGxpYi9pbmRleC50Y2w6MTI4CisjOiBsaWIvaW5kZXgudGNsOjE5NgorbXNnaWQgImZpbGVzIgorbXNnc3RyICJmw6FqbCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjIKK21zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKK21zZ3N0ciAiQSBrZXpkZXRpIGbDoWpsLWtpYm9udMOhcyBzaWtlcnRlbGVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NzgKK21zZ2lkICJPcGVuIgorbXNnc3RyICJNZWdueWl0w6FzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4OAorbXNnaWQgIlJlcG9zaXRvcnk6IgorbXNnc3RyICJSZXDDszoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAzNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IG1lZ255aXRuaSBhKHopICVzIHJlcMOzdDoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MworbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCittc2dzdHIgIkV6IGEgbGV2w6FsYXN6dG90dCBjaGVja291dCIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjYwCittc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCittc2dzdHIgIlJldsOtemnDsyBraWZlamV6w6lzOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc0Cittc2dpZCAiTG9jYWwgQnJhbmNoIgorbXNnc3RyICJIZWx5aSBicmFuY2giCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3OQorbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiS8O2dmV0xZEgYnJhbmNoIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODQgbGliL2Nob29zZV9yZXYudGNsOjUzOAorbXNnaWQgIlRhZyIKK21zZ3N0ciAiVGFnIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCittc2dzdHIgIsOJcnbDqW55dGVsZW4gcmV2w616acOzOiAlcyIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMzOAorbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKK21zZ3N0ciAiTmluY3Mga2l2w6FsYXN6dHZhIHJldsOtemnDsy4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDYKK21zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKK21zZ3N0ciAiQSByZXbDrXppw7Mga2lmZWplesOpcyDDvHJlcy4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzEKK21zZ2lkICJVcGRhdGVkIgorbXNnc3RyICJGcmlzc8OtdHZlIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Cittc2dpZCAiVVJMIgorbXNnc3RyICJVUkwiCisKKyM6IGxpYi9jb21taXQudGNsOjkKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJcbiIKKyJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgorInRvIGFtZW5kLlxuIgorbXNnc3RyICIiCisiTmluY3Mgc2VtbWkgamF2w610YW5pdmFsw7MuXG4iCisiXG4iCisiQXogZWxzxZEgY29tbWl0IGzDqXRyZWhvesOhc2EgZWzFkXR0IG5pbmNzIHNlbW1pbHllbiBjb21taXQgYW1pdCBqYXZpdGFuaSAiCisibGVoZXRuZS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgKK21zZ2lkICIiCisiQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCisiXG4iCisiWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKKyJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgorImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCittc2dzdHIgIiIKKyJOZW0gbGVoZXQgamF2w610YW5pIG1lcmdlIGFsYXR0LlxuIgorIlxuIgorIkEgamVsZW5sZWdpIG1lcmdlIG3DqWcgbmVtIHRlbGplc2VuIGZlamV6xZFkw7Z0dCBiZS4gQ3NhayBha2tvciBqYXbDrXRoYXQgZWd5ICIKKyJlbMWRYmJpIGNvbW1pdG90LCBob2d5aGEgbWVnc3pha8OtdGphIGEgamVsZW5sZWdpIG1lcmdlIGZvbHlhbWF0b3QuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjQ4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgorbXNnc3RyICJIaWJhIGEgamF2w610YW5kw7MgY29tbWl0IGFkYXQgYmV0w7ZsdMOpc2Uga8O2emJlbjoiCisKKyM6IGxpYi9jb21taXQudGNsOjc1Cittc2dpZCAiVW5hYmxlIHRvIG9idGFpbiB5b3VyIGlkZW50aXR5OiIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBtZWfDoWxsYXDDrXRhbmkgYXogYXpvbm9zw610w7N0OiIKKworIzogbGliL2NvbW1pdC50Y2w6ODAKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICLDiXJ2w6lueXRlbGVuIEdJVF9DT01NSVRURVJfSURFTlQ6IgorCisjOiBsaWIvY29tbWl0LnRjbDoxMzIKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiQXogdXRvbHPDsyBrZXJlc8Opc2kgw6FsbGFwb3QgbmVtIGVneWV6aWsgbWVnIGEgcmVww7Mgw6FsbGFwb3TDoXZhbC5cbiIKKyJcbiIKKyJFZ3kgbcOhc2lrIEdpdCBwcm9ncmFtIG3Ds2Rvc8OtdG90dGEgZXp0IGEgcmVww7N0IGF6IHV0b2xzw7Mga2VyZXPDqXMgw7N0YS4gRWd5ICIKKyLDumpyYWtlcmVzw6lzIG1pbmRlbmvDqXBwZW4gc3rDvGtzw6lnZXMgbWllbMWRdHQgYSBqZWxlbmxlZ2kgYnJhbmNoZXQgbcOzZG9zw610YW5pICIKKyJsZWhldG5lLlxuIgorIlxuIgorIkF6IMO6anJha2VyZXPDqXMgbW9zdCBhdXRvbWF0aWt1c2FuIGVsIGZvZyBpbmR1bG5pLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKKyJiZWZvcmUgY29tbWl0dGluZy5cbiIKK21zZ3N0ciAiIgorIk5lbSBjb21taXRvbGhhdHVuayBmw6FqbG9rYXQgbWVyZ2UgZWzFkXR0LlxuIgorIlxuIgorIkEoeikgJXMgZsOhamxiYW4gw7x0a8O2esOpc2VrIHZhbm5hay4gRWd5c3plciBhem9rYXQga2kga2VsbCBqYXbDrXRhbmksIG1hamQgIgorImhvenrDoSBraSBrZWxsIHbDoWxhc3p0YW5pIGEgZsOhamx0IG1pZWzFkXR0IGNvbW1pdG9sbmkgbGVoZXRuZS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorbXNnc3RyICIiCisiSXNtZXJldGxlbiBmw6FqbCB0w61wdXMgJXMgw6lyesOpa2VsdmUuXG4iCisiXG4iCisiQSh6KSAlcyBmw6FqbHQgbmVtIHR1ZGphIGV6IGEgcHJvZ3JhbSBjb21taXRvbG5pLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNzEKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIk5pbmNzIGNvbW1pdG9sYW5kw7MgdsOhbHRvenRhdMOhcy5cbiIKKyJcbiIKKyJMZWdhbMOhYmIgZWd5IGbDoWpsIGtpIGtlbGwgdsOhbGFzenRhbmksIGhvZ3kgY29tbWl0b2xuaSBsZWhlc3Nlbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTg2Cittc2dpZCAiIgorIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgorIlxuIgorIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKKyItIFNlY29uZCBsaW5lOiBCbGFua1xuIgorIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKK21zZ3N0ciAiIgorIkFkanVuayBtZWd5IGVneSBjb21taXQgw7x6ZW5ldGV0LlxuIgorIlxuIgorIkVneSBqw7MgY29tbWl0IMO8emVuZXRuZWsgYSBrw7Z2ZXRrZXrFkSBhIGZvcm3DoXR1bWE6XG4iCisiXG4iCisiLSBFbHPFkSBzb3I6IEVneSBtb25kYXRiYW4gbGXDrXJqYSwgaG9neSBtaXQgY3NpbsOhbHR1bmsuXG4iCisiLSBNw6Fzb2RpayBzb3I6IMOccmVzXG4iCisiLSBBIHTDtmJiaSBzb3I6IExlw61yamEsIGhvZ3kgbWnDqXJ0IGrDsyBleiBhIHbDoWx0b3p0YXTDoXMuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjIxMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgorbXNnc3RyICJmaWd5ZWxtZXp0ZXTDqXM6IGEgVGNsIG5lbSB0w6Ftb2dhdGphIGEoeikgJyVzJyBrw7Nkb2zDoXN0LiIKKworIzogbGliL2NvbW1pdC50Y2w6MjI2Cittc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCittc2dzdHIgIkEgcHJlLWNvbW1pdCBodXJvayBtZWdow612w6FzYS4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjQxCittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCittc2dzdHIgIkEgY29tbWl0b3QgbWVnYWthZMOhbHlvenRhIGEgcHJlLWNvbW1pdCBodXJvay4gIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNjQKK21zZ2lkICJDYWxsaW5nIGNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAiQSBjb21taXQtbXNnIGh1cm9rIG1lZ2jDrXbDoXNhLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNzkKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiQSBjb21taW90IG1lZ2FrYWTDoWx5b3p0YSBhIGNvbW1pdC1tc2cgaHVyb2suIgorCisjOiBsaWIvY29tbWl0LnRjbDoyOTIKK21zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCittc2dzdHIgIkEgdsOhbHRvenRhdMOhc29rIGNvbW1pdG9sw6FzYS4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzA4Cittc2dpZCAid3JpdGUtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICJhIHdyaXRlLXRyZWUgc2lrZXJ0ZWxlbjoiCisKKyM6IGxpYi9jb21taXQudGNsOjMwOSBsaWIvY29tbWl0LnRjbDozNTMgbGliL2NvbW1pdC50Y2w6MzczCittc2dpZCAiQ29tbWl0IGZhaWxlZC4iCittc2dzdHIgIkEgY29tbWl0IG5lbSBzaWtlcsO8bHQuIgorCisjOiBsaWIvY29tbWl0LnRjbDozMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgorbXNnc3RyICJBKHopICVzIGNvbW1pdCBzw6lyw7xsdG5layB0xbFuaWsiCisKKyM6IGxpYi9jb21taXQudGNsOjMzMQorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIk5pbmNzIGNvbW1pdG9sYW5kw7MgdsOhbHRvenRhdMOhcy5cbiIKKyJcbiIKKyJFZ3lldGxlbiBmw6FqbHQgc2UgbcOzZG9zw610b3R0IGV6IGEgY29tbWl0IMOpcyBtZXJnZSBjb21taXQgc2Ugdm9sdC5cbiIKKyJcbiIKKyJBeiDDumpyYWtlcmVzw6lzIG1vc3QgYXV0b21hdGlrdXNhbiBlbCBmb2cgaW5kdWxuaS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzM4Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICJOaW5jcyBjb21taXRvbGFuZMOzIHbDoWx0b3p0YXTDoXMuIgorCisjOiBsaWIvY29tbWl0LnRjbDozNTIKK21zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICJhIGNvbW1pdC10cmVlIHNpa2VydGVsZW46IgorCisjOiBsaWIvY29tbWl0LnRjbDozNzIKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgImF6IHVwZGF0ZS1yZWYgc2lrZXJ0ZWxlbjoiCisKKyM6IGxpYi9jb21taXQudGNsOjQ2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKK21zZ3N0ciAiTMOpdHJlasO2dHQgYSAlcyBjb21taXQ6ICVzIgorCisjOiBsaWIvY29uc29sZS50Y2w6NTkKK21zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICJNdW5rYSBmb2x5YW1hdGJhbi4uIFbDoXJqdW5rLi4uIgorCisjOiBsaWIvY29uc29sZS50Y2w6MTg2Cittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiU2lrZXIiCisKKyM6IGxpYi9jb25zb2xlLnRjbDoyMDAKK21zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCittc2dzdHIgIkhpYmE6IGEgcGFyYW5jcyBzaWtlcnRlbGVuIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkVsdmVzenRldHQgb2JqZWt0dW1vayBzesOhbWEiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAiRWx2ZXN6ZXR0IG9iamVrdHVtb2sgw6FsdGFsIGVsZm9nbGFsdCBsZW1lenRlcsO8bGV0IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ1Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJDc29tYWdvbHQgb2JqZWt0dW1vayBzesOhbXJhIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgorbXNnc3RyICJDc29tYWdvayBzesOhbWEiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIkEgY3NvbWFnb2x0IG9iamVrdHVtb2sgw6FsdGFsIGhhc3puw6FsdCBsZW1lenRlcsO8bGV0IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ4Cittc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKK21zZ3N0ciAiRWx0w6F2b2zDrXTDoXNyYSB2w6Fyw7MgY3NvbWFnb2x0IG9iamVrdHVtb2sgc3rDoW1yYSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OQorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIkh1bGxhZMOpayBmw6FqbG9rIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjcyCittc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiQXogb2JqZWt0dW0gYWRhdGLDoXppcyB0w7Ztw7Zyw610w6lzZSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo4MworbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgorbXNnc3RyICJBeiBvYmpla3R1bSBhZGF0YsOhemlzIGVsbGVuxZFyesOpc2UgYXogZnNjay1vYmplY3RzIGhhc3puw6FsYXTDoXZhbCIKKworIzogbGliL2RhdGFiYXNlLnRjbDoxMDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgorIlxuIgorIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgorInRoZSBkYXRhYmFzZSB3aGVuIG1vcmUgdGhhbiAlaSBsb29zZSBvYmplY3RzIGV4aXN0LlxuIgorIlxuIgorIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorbXNnc3RyICIiCisiRW5uZWsgYSByZXDDs25hayBqZWxlbmxlZyAlaSBrw7xsw7Zuw6FsbMOzIG9iamVrdHVtYSB2YW4uXG4iCisiXG4iCisiQXogb3B0aW3DoWxpcyB0ZWxqZXPDrXRtw6lueWhleiBlcsWRc2VuIGFqw6FubG90dCBheiBhZGF0YsOhemlzIHTDtm3DtnLDrXTDqXNlLCBoYSAiCisidMO2YmIgbWludCAlaSBvYmpla3R1bSBsw6l0ZXppay5cbiIKKyJcbiIKKyJMZWhldCBtb3N0IHTDtm3DtnLDrXRlbmkgYXogYWRhdGLDoXppc3Q/IgorCisjOiBsaWIvZGF0ZS50Y2w6MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgorbXNnc3RyICLDiXJ2w6lueXRlbGVuIGTDoXR1bSBhIEdpdC10xZFsOiAlcyIKKworIzogbGliL2RpZmYudGNsOjU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgorIlxuIgorIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgorIlxuIgorIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKKyJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgorInRoZSBzYW1lIHN0YXRlLiIKK21zZ3N0ciAiIgorIk5pbmNzZW5layB2w6FsdG96w6Fzb2suXG4iCisiXG4iCisiQSh6KSAlcyBtw7Nkb3PDrXRhdGxhbi5cbiIKKyJcbiIKKyJBIGbDoWpsIG3Ds2Rvc8OtdMOhc2kgZMOhdHVtw6F0IGZyaXNzw610ZXR0ZSBlZ3kgbcOhc2lrIGFsa2FsbWF6w6FzLCBkZSBhIGbDoWpsICIKKyJ0YXJ0YWxtYSB2w6FsdG96YXRsYW4uXG4iCisiXG4iCisiRWd5IMO6anJha2VyZXPDqXMgZm9nIGluZHVsbmkgYSBoYXNvbmzDsyDDoWxsYXBvdMO6IGbDoWpsb2sgbWVndGFsw6Fsw6FzYSDDqXJkZWvDqWJlbi4iCisKKyM6IGxpYi9kaWZmLnRjbDo5OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAiQSh6KSAlcyBkaWZmLWrDqW5layBiZXTDtmx0w6lzZS4uLiIKKworIzogbGliL2RpZmYudGNsOjEyMAorbXNnaWQgIiIKKyJMT0NBTDogZGVsZXRlZFxuIgorIlJFTU9URTpcbiIKK21zZ3N0ciAiIgorIkhFTFlJOiB0w7Zyw7ZsdmVcbiIKKyJUw4FWT0xJOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTI1Cittc2dpZCAiIgorIlJFTU9URTogZGVsZXRlZFxuIgorIkxPQ0FMOlxuIgorbXNnc3RyICIiCisiVMOBVk9MSTogdMO2csO2bHZlXG4iCisiSEVMWUk6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzIKK21zZ2lkICJMT0NBTDpcbiIKK21zZ3N0ciAiSEVMWUk6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzUKK21zZ2lkICJSRU1PVEU6XG4iCittc2dzdHIgIlTDgVZPTEk6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxOTcgbGliL2RpZmYudGNsOjI5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgorbXNnc3RyICJOZW0gbGVoZXQgbWVnamVsZW7DrXRlbmkgYSBrw7Z2ZXRrZXrFkXQ6ICVzIgorCisjOiBsaWIvZGlmZi50Y2w6MTk4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKK21zZ3N0ciAiSGliYSBhIGbDoWpsIGJldMO2bHTDqXNlIGvDtnpiZW46IgorCisjOiBsaWIvZGlmZi50Y2w6MjA1Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgorbXNnc3RyICJHaXQgcmVww7MgKGFscHJvamVrdCkiCisKKyM6IGxpYi9kaWZmLnRjbDoyMTcKK21zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCittc2dzdHIgIiogQmluw6FyaXMgZsOhamwgKHRhcnRhbG9tIGVscmVqdMOpc2UpLiIKKworIzogbGliL2RpZmYudGNsOjIyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgorIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgorbXNnc3RyICIiCisiKiBOZW0ga8O2dmV0ZXR0IGbDoWpsICVkIGLDoWp0dGFsLlxuIgorIiogQ3NhayBheiBlbHPFkSAlZCBiw6FqdCBtdXRhdMOhc2EuXG4iCisKKyM6IGxpYi9kaWZmLnRjbDoyMjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCisiKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgorbXNnc3RyICIiCisiXG4iCisiKiBOZW0ga8O2dmV0ZXR0IGbDoWpsdCBsZXbDoWd0YSBhKHopICVzLlxuIgorIiogQSB0ZWxqZXMgdGFydGFsb20gbWVnamVsZW7DrXTDqXPDqWhleiBoYXN6bsOhbGp1bmsga8O8bHPFkSBzesO2dmVnc3plcmtlc3p0xZF0LlxuIgorCisjOiBsaWIvZGlmZi50Y2w6NDM2Cittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIk5lbSB2aXNzemF2b25uaSBhIGh1bmsga2l2w6FsYXN6dMOhc8OhdC4iCisKKyM6IGxpYi9kaWZmLnRjbDo0NDMKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIk5lbSBzaWtlcsO8bHQga2l2w6FsYXN6dGFuaSBhIGh1bmtvdC4iCisKKyM6IGxpYi9kaWZmLnRjbDo1MDkKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCB2aXNzemF2b25uaSBhIHNvciBraXbDoWxhc3p0w6Fzw6F0LiIKKworIzogbGliL2RpZmYudGNsOjUxNworbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCBraXbDoWxhc3p0YW5pIGEgc29ydC4iCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQzCittc2dpZCAiRGVmYXVsdCIKK21zZ3N0ciAiQWxhcMOpcnRlbG1lesOpcyIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gKCVzKSIKK21zZ3N0ciAiUmVuZHN6ZXIgKCVzKSIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NTkgbGliL2VuY29kaW5nLnRjbDo0NjUKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiTcOhcyIKKworIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNAorbXNnaWQgImVycm9yIgorbXNnc3RyICJoaWJhIgorCisjOiBsaWIvZXJyb3IudGNsOjM2Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAiZmlneWVsbWV6dGV0w6lzIgorCisjOiBsaWIvZXJyb3IudGNsOjk0Cittc2dpZCAiWW91IG11c3QgY29ycmVjdCB0aGUgYWJvdmUgZXJyb3JzIGJlZm9yZSBjb21taXR0aW5nLiIKK21zZ3N0ciAiS2kga2VsbCBqYXbDrXRhbnVuayBhIGZlbnRpIGhpYsOha2F0IGNvbW1pdCBlbMWRdHQuIgorCisjOiBsaWIvaW5kZXgudGNsOjYKK21zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCittc2dzdHIgIk5lbSBzaWtlcsO8bHQgYXogaW5kZXggesOhcm9sw6Fzw6FuYWsgZmVsb2xkw6FzYS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MTUKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAiSW5kZXggaGliYSIKKworIzogbGliL2luZGV4LnRjbDoyMQorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvICIKKyJyZXN5bmNocm9uaXplIGdpdC1ndWkuIgorbXNnc3RyICIiCisiQSBHaXQgaW5kZXggZnJpc3PDrXTDqXNlIHNpa2VydGVsZW4gdm9sdC4gIEVneSDDumpyYW9sdmFzw6FzIGF1dG9tYXRpa3VzYW4gIgorImVsaW5kdWx0LCBob2d5IGEgZ2l0LWd1aSDDumpyYSBzemlua29uYmFuIGxlZ3llbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6MjcKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiRm9seXRhdMOhcyIKKworIzogbGliL2luZGV4LnRjbDozMQorbXNnaWQgIlVubG9jayBJbmRleCIKK21zZ3N0ciAiSW5kZXggesOhcm9sw6Fzw6FuYWsgZmVsb2xkw6FzYSIKKworIzogbGliL2luZGV4LnRjbDoyODcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgIkEoeikgJXMgY29tbWl0YmEgdmFsw7Mga2l2w6FsYXN6dMOhc8OhbmFrIHZpc3N6YXZvbsOhc2EiCisKKyM6IGxpYi9pbmRleC50Y2w6MzI2Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAiQ29tbWl0b2zDoXNyYSBrw6lzei4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICJBKHopICVzIGhvenrDoWFkw6FzYS4uLiIKKworIzogbGliL2luZGV4LnRjbDozOTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKK21zZ3N0ciAiVmlzc3phw6FsbMOtdGphIGEgdsOhbHRvenRhdMOhc29rYXQgYSh6KSAlcyBmw6FqbGJhbj8iCisKKyM6IGxpYi9pbmRleC50Y2w6Mzk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgorbXNnc3RyICJWaXNzemHDoWxsw610amEgYSB2w6FsdG96dGF0w6Fzb2thdCBlYmJlbiBlICVpIGbDoWpsYmFuPyIKKworIzogbGliL2luZGV4LnRjbDo0MDYKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyJNaW5kZW4gbmVtIGtpdsOhbGFzenRvdHQgdsOhbHRvenRhdMOhcyBlbCBmb2cgdmVzem5pIGV6w6FsdGFsIGEgdmlzc3phw6FsbMOtdMOhcyAiCisiw6FsdGFsLiIKKworIzogbGliL2luZGV4LnRjbDo0MDkKK21zZ2lkICJEbyBOb3RoaW5nIgorbXNnc3RyICJOZSBjc2luw6FsanVuayBzZW1taXQiCisKKyM6IGxpYi9pbmRleC50Y2w6NDI3Cittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICJBIGtpdsOhbGFzenRvdHQgZsOhamxvayB2aXNzemHDoWxsw610w6FzYSIKKworIzogbGliL2luZGV4LnRjbDo0MzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgJXMiCittc2dzdHIgIiVzIHZpc3N6YcOhbGzDrXTDoXNhIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzCittc2dpZCAiIgorIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgorbXNnc3RyICIiCisiSmF2w610w6FzIGvDtnpiZW4gbmVtIGxlaGV0c8OpZ2VzIGEgbWVyZ2UuXG4iCisiXG4iCisiRWd5c3plciBiZSBrZWxsIGZlamV6bmkgZW5uZWsgYSBjb21taXRuYWsgYSBqYXbDrXTDoXPDoXQsIG1hamQga2V6ZMWRZGhldCBlZ3kgIgorIm1lcmdlLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJBeiB1dG9sc8OzIGtlcmVzw6lzaSDDoWxsYXBvdCBuZW0gZWd5ZXppayBtZWcgYSByZXDDsyDDoWxsYXBvdMOhdmFsLlxuIgorIlxuIgorIkVneSBtw6FzaWsgR2l0IHByb2dyYW0gbcOzZG9zw610b3R0YSBlenQgYSByZXDDs3QgYXogdXRvbHPDsyBrZXJlc8OpcyDDs3RhLiBFZ3kgIgorIsO6anJha2VyZXPDqXMgbWluZGVua8OpcHBlbiBzesO8a3PDqWdlcyBtaWVsxZF0dCBhIGplbGVubGVnaSBicmFuY2hldCBtw7Nkb3PDrXRhbmkgIgorImxlaGV0bmUuXG4iCisiXG4iCisiQXogw7pqcmFrZXJlc8OpcyBtb3N0IGF1dG9tYXRpa3VzYW4gZWwgZm9nIGluZHVsbmkuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCisiXG4iCisiWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCisibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorbXNnc3RyICIiCisiSmVsZW5sZWcgZWd5IMO8dGvDtnrDqXMgZmVsb2xkw6FzYSBrw7Z6YmVuIHZhZ3l1bmsuXG4iCisiXG4iCisiQSh6KSAlcyBmw6FqbGJhbiDDvHRrw7Z6w6lzZWsgdmFubmFrLlxuIgorIlxuIgorIkZlbCBrZWxsIG9sZGFudW5rIMWRa2V0LCBraXbDoWxhc3p0YW5pIGEgZsOhamx0LCDDqXMgY29tbWl0b2xuaSBob2d5IGJlZmVqZXp6w7xrICIKKyJhIGplbGVubGVnaSBtZXJnZS10LiBDc2FrIGV6dXTDoW4ga2V6ZGhldMO8bmsgZWwgZWd5IMO6amFiYmF0LlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKKyJcbiIKKyJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgorIlxuIgorIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgorIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKK21zZ3N0ciAiIgorIkplbGVubGVnIGVneSB2w6FsdG96dGF0w6FzIGvDtnpiZW4gdmFneXVuay5cbiIKKyJcbiIKKyJBKHopICVzIGbDoWpsIG1lZ3bDoWx0b3pvdHQuXG4iCisiXG4iCisiRWzFkXN6w7ZyIGJlIGtlbGwgZmVqZXpuw7xuayBhIGplbGVubGVnaSBjb21taXRvdCwgaG9neSBlbGtlemRoZXNzw7xuayBlZ3kgbWVyZ2UtIgorInQuIEV6IHNlZ8OtdGVuaSBmb2csIGhvZ3kgZsOpbGJlc3pha8OtdGhhc3N1bmsgZWd5IG1lcmdlLXQuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzIC8gJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCittc2dzdHIgIkEoeikgJXMgw6lzIGEoeikgJXMgbWVyZ2Utw7Zsw6lzZS4uLiIKKworIzogbGliL21lcmdlLnRjbDoxMzEKK21zZ2lkICJNZXJnZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiIKK21zZ3N0ciAiQSBtZXJnZSBzaWtlcmVzZW4gYmVmZWplesWRZMO2dHQuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMworbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICJBIG1lcmdlIHNpa2VydGVsZW4uIEZlbCBrZWxsIG9sZGFudW5rIGF6IMO8dGvDtnrDqXNla2V0LiIKKworIzogbGliL21lcmdlLnRjbDoxNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBJbnRvICVzIgorbXNnc3RyICJNZXJnZS3DtmzDqXMgYSBrw7Z2ZXRrZXrFkWJlOiAlcyIKKworIzogbGliL21lcmdlLnRjbDoxNzcKK21zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKK21zZ3N0ciAiTWVyZ2Utw7Zsbmkgc3rDoW5kw6lrb3pvdHQgcmV2w616acOzIgorCisjOiBsaWIvbWVyZ2UudGNsOjIxMgorbXNnaWQgIiIKKyJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgorbXNnc3RyICIiCisiQSBjb21taXQgamF2w610w6FzIGvDtnpiZW4gbWVnc3pha8OtdHZhLlxuIgorIlxuIgorIkJlIGtlbGwgZmVqZXpuw7xuayBlbm5layBhIGNvbW1pdG5hayBhIGphdsOtdMOhc8OhdC5cbiIKKworIzogbGliL21lcmdlLnRjbDoyMjIKK21zZ2lkICIiCisiQWJvcnQgbWVyZ2U/XG4iCisiXG4iCisiQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCittc2dzdHIgIiIKKyJNZWdzemFrw610anVrIGEgbWVyZ2UtdD9cbiIKKyJcbiIKKyJBIGplbGVubGVnaSBtZXJnZSBtZWdzemFrw610w6FzYSAqTUlOREVOKiBuZW0gY29tbWl0b2x0IHbDoWx0b3p0YXTDoXMgIgorImVsdmVzenTDqXPDqXQgamVsZW50aS5cbiIKKyJcbiIKKyJGb2x5dGF0anVrIGEgamVsZW5sZWdpIG1lcmdlIG1lZ3N6YWvDrXTDoXPDoXQ/IgorCisjOiBsaWIvbWVyZ2UudGNsOjIyOAorbXNnaWQgIiIKKyJSZXNldCBjaGFuZ2VzP1xuIgorIlxuIgorIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKK21zZ3N0ciAiIgorIlZpc3N6YXZvbmp1ayBhIG3Ds2Rvc8OtdMOhc29rYXQ/XG4iCisiXG4iCisiQSBtw7Nkb3PDrXTDoXNvayB2aXNzemF2b27DoXNhICpNSU5ERU4qIG5lbSBjb21taXRvbHQgdsOhbHRvenRhdMOhcyBlbHZlc3p0w6lzw6l0ICIKKyJqZWxlbnRpLlxuIgorIlxuIgorIkZvbHl0YXRqdWsgYSBqZWxlbmxlZ2kgbcOzZG9zw610w6Fzb2sgdmlzc3phdm9uw6Fzw6F0PyIKKworIzogbGliL21lcmdlLnRjbDoyMzkKK21zZ2lkICJBYm9ydGluZyIKK21zZ3N0ciAiRsOpbGJlc3pha8OtdMOhcyIKKworIzogbGliL21lcmdlLnRjbDoyMzkKK21zZ2lkICJmaWxlcyByZXNldCIKK21zZ3N0ciAiZsOhamwgdmlzc3phw6FsbMOtdHZhIgorCisjOiBsaWIvbWVyZ2UudGNsOjI2NworbXNnaWQgIkFib3J0IGZhaWxlZC4iCittc2dzdHIgIkEgZsOpbGJlc3pha8OtdMOhcyBuZW0gc2lrZXLDvGx0LiIKKworIzogbGliL21lcmdlLnRjbDoyNjkKK21zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCittc2dzdHIgIkEgbWVna2VzemFrw610w6FzIGJlZmVqZXrFkWTDtnR0LiBLw6lzei4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjgKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgorbXNnc3RyICJGZWxvbGTDoXMgZXLFkWx0ZXTDqXNlIGF6IGFsYXAgdmVyemnDs2hvej8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjkKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKK21zZ3N0ciAiRmVsb2xkw6FzIGVyxZFsdGV0w6lzZSBlaGhleiBhIGJyYW5jaC1oZXo/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxMAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIG90aGVyIGJyYW5jaD8iCittc2dzdHIgIkZlbG9sZMOhcyBlcsWRbHRldMOpc2UgYSBtw6FzaWsgYnJhbmNoLWhlej8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vdGUgdGhhdCB0aGUgZGlmZiBzaG93cyBvbmx5IGNvbmZsaWN0aW5nIGNoYW5nZXMuXG4iCisiXG4iCisiJXMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiIKKyJcbiIKKyJUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdW5kb25lIG9ubHkgYnkgcmVzdGFydGluZyB0aGUgbWVyZ2UuIgorbXNnc3RyICIiCisiTWVnamVneXrDqXM6IGNzYWsgYXogw7x0a8O2esWRIGvDvGzDtm5ic8OpZ2VrIGzDoXRzemFuYWsuXG4iCisiXG4iCisiQSh6KSAlcyBmZWzDvGwgbGVzeiDDrXJ2YS5cbiIKKyJcbiIKKyJFeiBhIG3FsXZlbGV0IGNzYWsgYSBtZXJnZSDDumpyYWluZMOtdMOhc8OhdmFsIGxlc3ogdmlzc3phdm9uaGF0w7MuIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorbXNnc3RyICIiCisiQSh6KSAlcyBmw6FqbCBuZW0gZmVsb2xkb3R0IMO8dGvDtnrDqXNla2V0IHRhcnRhbG1heiwgbcOpZ2lzIGxlZ3llbiBraXbDoWxhc3p0dmE/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKK21zZ3N0ciAiRmVsb2xkw6FzIGhvenrDoWFkw6FzYSBhKHopICVzIHN6w6Ftw6FyYSIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQxCittc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorbXNnc3RyICJOZW0gbGVoZXQgZmVsb2xkYW5pIHTDtnJsw6lzaSB2YWd5IGxpbmsgw7x0a8O2esOpc3QgZWd5IGVzemvDtnp6ZWwiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgorbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkEga29uZmlrbHVzLWbDoWpsIG5lbSBsw6l0ZXppay4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgorbXNnc3RyICJOZW0gR1VJIG1lcmdlIGVzemvDtno6ICVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN1cHBvcnRlZCBtZXJnZSB0b29sICclcyciCittc2dzdHIgIkEoeikgJyVzJyBtZXJnZSBlc3prw7Z6IG5lbSB0w6Ftb2dhdG90dCIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzAzCittc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCittc2dzdHIgIkEgbWVyZ2UgZXN6a8O2eiBtw6FyIGZ1dCwgbGUgbGVneWVuIMOhbGzDrXR2YT8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgorIiVzIgorbXNnc3RyICIiCisiSGliYSBhIHZlcnppw7NrIGtpbnllcsOpc2Uga8O2emJlbjpcbiIKKyIlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkEgbWVyZ2UgZXN6a8O2eiBpbmTDrXTDoXNhIHNpa2VydGVsZW46XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0NworbXNnaWQgIlJ1bm5pbmcgbWVyZ2UgdG9vbC4uLiIKK21zZ3N0ciAiQSBtZXJnZSBlc3prw7Z6IGZ1dHRhdMOhc2EuLi4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKK21zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCittc2dzdHIgIkEgbWVyZ2UgZXN6a8O2eiBuZW0gc2lrZXLDvGx0LiIKKworIzogbGliL29wdGlvbi50Y2w6MTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgorbXNnc3RyICLDiXJ2w6lueXRlbGVuIGdsb2LDoWxpcyBrw7Nkb2zDoXMgJyVzJyIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiw4lydsOpbnl0ZWxlbiByZXDDsyBrw7Nkb2zDoXMgJyVzJyIKKworIzogbGliL29wdGlvbi50Y2w6MTE3Cittc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKK21zZ3N0ciAiQWxhcMOpcnRlbG1lesOpcyB2aXNzemHDoWxsw610w6FzYSIKKworIzogbGliL29wdGlvbi50Y2w6MTIxCittc2dpZCAiU2F2ZSIKK21zZ3N0ciAiTWVudMOpcyIKKworIzogbGliL29wdGlvbi50Y2w6MTMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgUmVwb3NpdG9yeSIKK21zZ3N0ciAiJXMgUmVww7MiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMgorbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCittc2dzdHIgIkdsb2LDoWxpcyAobWluZGVuIHJlcMOzKSIKKworIzogbGliL29wdGlvbi50Y2w6MTM4Cittc2dpZCAiVXNlciBOYW1lIgorbXNnc3RyICJGZWxoYXN6bsOhbMOzbsOpdiIKKworIzogbGliL29wdGlvbi50Y2w6MTM5Cittc2dpZCAiRW1haWwgQWRkcmVzcyIKK21zZ3N0ciAiRW1haWwgY8OtbSIKKworIzogbGliL29wdGlvbi50Y2w6MTQxCittc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCittc2dzdHIgIkEgbWVyZ2UgY29tbWl0b2sgw7Zzc3plZ3rDqXNlIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDIKK21zZ2lkICJNZXJnZSBWZXJib3NpdHkiCittc2dzdHIgIk1lcmdlIGJlc3rDqWRlc3PDqWciCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MworbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCittc2dzdHIgIkRpZmZzdGF0IG11dGF0w6FzYSBtZXJnZSB1dMOhbiIKKworIzogbGliL29wdGlvbi50Y2w6MTQ0Cittc2dpZCAiVXNlIE1lcmdlIFRvb2wiCittc2dzdHIgIk1lcmdlIGVzemvDtnogaGFzem7DoWxhdGEiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NgorbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCittc2dzdHIgIkEgZsOhamwgbcOzZG9zw610w6FzaSBkw6F0dW1vayBtZWdiw616aGF0w7NhayIKKworIzogbGliL29wdGlvbi50Y2w6MTQ3Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICJBIGvDtnZldMWRIGJyYW5jaGVrIGVsdMOhdm9sw610w6FzYSBsZXTDtmx0w6lzIGFsYXR0IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDgKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKK21zZ3N0ciAiQSBrw7Z2ZXTFkSBicmFuY2hlayBlZ3llenRldMOpc2UiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OQorbXNnaWQgIkJsYW1lIENvcHkgT25seSBPbiBDaGFuZ2VkIEZpbGVzIgorbXNnc3RyICJBIGJsYW1lIG3DoXNvbMOhcyBiZWthcGNzb2zDoXNhIGNzYWsgbWVndsOhbHRvem90dCBmw6FqbG9rcmEiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MAorbXNnaWQgIk1pbmltdW0gTGV0dGVycyBUbyBCbGFtZSBDb3B5IE9uIgorbXNnc3RyICJNaW5pbXVtIGJldMWxc3rDoW0gYmxhbWUgbcOhc29sw6FzLcOpcnrDqWtlbMOpc2hleiIKKworIzogbGliL29wdGlvbi50Y2w6MTUxCittc2dpZCAiQmxhbWUgSGlzdG9yeSBDb250ZXh0IFJhZGl1cyAoZGF5cykiCittc2dzdHIgIkJsYW1lIHTDtnJ0w6luZXQga8O2cm55ZXpldCBzdWfDoXIgKG5hcG9rYmFuKSIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAiQSBkaWZmIGvDtnJueWV6ZXRpIHNvcm9rIHN6w6FtYSIKKworIzogbGliL29wdGlvbi50Y2w6MTUzCittc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKK21zZ3N0ciAiQ29tbWl0IMO8emVuZXQgc3rDtnZlZ8OpbmVrIHN6w6lsZXNzw6lnZSIKKworIzogbGliL29wdGlvbi50Y2w6MTU0Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICLDmmogYnJhbmNoIG7DqXYgc2FibG9uIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTUKK21zZ2lkICJEZWZhdWx0IEZpbGUgQ29udGVudHMgRW5jb2RpbmciCittc2dzdHIgIkFsYXDDqXJ0ZWxtZXpldHQgZsOhamx0YXJ0YWxvbS1rw7Nkb2zDoXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjIwMworbXNnaWQgIkNoYW5nZSIKK21zZ3N0ciAiTWVndsOhbHRvenRhdMOhcyIKKworIzogbGliL29wdGlvbi50Y2w6MjMwCittc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCittc2dzdHIgIkhlbHllc8OtcsOhcy1lbGxlbsWRcnrFkSBzesOzdMOhcjoiCisKKyM6IGxpYi9vcHRpb24udGNsOjI1NAorbXNnaWQgIkNoYW5nZSBGb250IgorbXNnc3RyICJCZXTFsXTDrXB1cyBtZWd2w6FsdG96dGF0w6FzYSIKKworIzogbGliL29wdGlvbi50Y2w6MjU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hvb3NlICVzIgorbXNnc3RyICIlcyB2w6FsYXN6dMOhc2EiCisKKyM6IGxpYi9vcHRpb24udGNsOjI2NAorbXNnaWQgInB0LiIKK21zZ3N0ciAicHQuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNzgKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAiQmXDoWxsw610w6Fzb2siCisKKyM6IGxpYi9vcHRpb24udGNsOjMxNAorbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCittc2dzdHIgIk5lbSBzaWtlcsO8bHQgdGVsamVzZW4gZWxtZW50ZW5pIGEgYmXDoWxsw610w6Fzb2thdDoiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2MworbXNnaWQgIlJlbW92ZSBSZW1vdGUiCittc2dzdHIgIlJlbW90ZSBlbHTDoXZvbMOtdMOhc2EiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2OAorbXNnaWQgIlBydW5lIGZyb20iCittc2dzdHIgIlTDtnJsw6lzIGlubmVuIgorCisjIHRjbC1mb3JtYXQKKyM6IGxpYi9yZW1vdGUudGNsOjE3MworbXNnaWQgIkZldGNoIGZyb20iCittc2dzdHIgIkxldMO2bHTDqXMgaW5uZW4iCisKKyM6IGxpYi9yZW1vdGUudGNsOjIxNQorbXNnaWQgIlB1c2ggdG8iCittc2dzdHIgIlB1c2ggaWRlIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTkKK21zZ2lkICJBZGQgUmVtb3RlIgorbXNnc3RyICJSZW1vdGUgaG96esOhYWTDoXNhIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjQKK21zZ2lkICJBZGQgTmV3IFJlbW90ZSIKK21zZ3N0ciAiw5pqIHJlbW90ZSBob3p6w6FhZMOhc2EiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyOCBsaWIvdG9vbHNfZGxnLnRjbDozNgorbXNnaWQgIkFkZCIKK21zZ3N0ciAiSG96esOhYWTDoXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozNworbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgorbXNnc3RyICJSZW1vdGUgcsOpc3psZXRlaSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCittc2dpZCAiTG9jYXRpb246IgorbXNnc3RyICJIZWx5OiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjYyCittc2dpZCAiRnVydGhlciBBY3Rpb24iCittc2dzdHIgIkvDtnZldGtlesWRIG3FsXZlbGV0IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiTGV0w7ZsdMOpcyBtb3N0IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzEKK21zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgorbXNnc3RyICJUw6F2b2xpIHJlcMOzIGluaWNpYWxpesOhbMOhc2Egw6lzIHB1c2giCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3NworbXNnaWQgIkRvIE5vdGhpbmcgRWxzZSBOb3ciCittc2dzdHIgIk5lIGNzaW7DoWxqdW5rIHNlbW1pdCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCittc2dzdHIgIkFkanVuayBtZWd5IGVneSByZW1vdGUgbmV2ZXQuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCittc2dzdHIgIkEoeikgJyVzJyBuZW0gZWd5IGVsZm9nYWRoYXTDsyByZW1vdGUgbsOpdi4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHJlbW90ZSAnJXMnIG9mIGxvY2F0aW9uICclcycuIgorbXNnc3RyICJOZW0gc2lrZXLDvGx0IGEodCkgJyVzJyByZW1vdGUgaG96esOhYWTDoXNhIGlubmVuOiAnJXMnLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMyBsaWIvdHJhbnNwb3J0LnRjbDo2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmV0Y2ggJXMiCittc2dzdHIgImEoeikgJXMgbGV0w7ZsdMOpc2UiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyB0aGUgJXMiCittc2dzdHIgIkEoeikgJXMgbGV0w7ZsdMOpc2UiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorbXNnc3RyICJOZW0gdHVkbmksIGhvZ3kgaG9neSBrZWxsIGEoeikgJyVzJyBoZWx5ZW4gcmVww7N0IGluaWNpYWxpesOhbG5pLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MyBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo2MworIzogbGliL3RyYW5zcG9ydC50Y2w6ODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJwdXNoICVzIgorbXNnc3RyICIlcyBwdXNoLW9sw6FzYSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCittc2dzdHIgIkEoeikgJXMgYmXDoWxsw610w6FzYSBpdHQ6ICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICJUw6F2b2xpIEJyYW5jaCB0w7ZybMOpc2UiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgIkZvcnLDoXMgcmVww7MiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTAgbGliL3RyYW5zcG9ydC50Y2w6MTM0Cittc2dpZCAiUmVtb3RlOiIKK21zZ3N0ciAiVMOhdm9saToiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NjYgbGliL3RyYW5zcG9ydC50Y2w6MTQ5Cittc2dpZCAiQXJiaXRyYXJ5IExvY2F0aW9uOiIKK21zZ3N0ciAiw5Zua8OpbnllcyBoZWx5OiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4NAorbXNnaWQgIkJyYW5jaGVzIgorbXNnc3RyICJCcmFuY2hlayIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDkKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAiVMO2cmzDqXMgY3NhayBha2tvciBoYSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTEKK21zZ2lkICJNZXJnZWQgSW50bzoiCittc2dzdHIgIk1lcmdlLcO2bHQgYSBrw7Z2ZXRrZXrFkWJlOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTkKK21zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIGNoZWNrcykiCittc2dzdHIgIk1pbmRpZyAoTmUgdsOpZ2V6emVuIG1lcmdlIHZpenNnw6FsYXRva2F0KSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTIKK21zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCittc2dzdHIgIkVneSBicmFuY2ggc3rDvGtzw6lnZXMgYSAnTWVyZ2Utw7ZsdCBhIGvDtnZldGtlesWRYmUnLWhlei4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgorIlxuIgorIiAtICVzIgorbXNnc3RyICIiCisiQSBrw7Z2ZXRrZXrFkSBicmFuY2hlayBuZW0gdGVsamVzZW4gbGV0dGVrIG1lcmdlLcO2bHZlIGViYmU6ICVzOlxuIgorIiAtICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKKyJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKK21zZ3N0ciAiIgorIkVneSB2YWd5IHTDtmJiIG1lcmdlIHRlc3p0IGhpYsOhdCBqZWx6ZXR0LCBtaXZlbCBuZW0gdMO2bHTDtnR0w7xrIGxlIGEgbWVnZmVsZWzFkSAiCisiY29tbWl0b2thdC4gUHLDs2LDoWxqdW5rIG1lZyBsZXTDtmx0ZW5pIGEga8O2dmV0a2V6xZFixZFsOiAlcyBlbMWRc3rDtnIuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNworbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKK21zZ3N0ciAiVsOhbGFzc3p1bmsga2kgZWd5IHZhZ3kgdMO2YmIgYnJhbmNoZXQgdMO2cmzDqXNyZS4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE2Cittc2dpZCAiIgorIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiXG4iCisiRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKyJBIHTDtnLDtmx0IGJyYW5jaGVrIHZpc3N6YcOhbGzDrXTDoXNhIG5laMOpei5cbiIKKyJcbiIKKyJUw7Zyw7ZsasO8ayBhIGtpdsOhbGFzenRvdHQgYnJhbmNoZWtldD8iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAiQnJhbmNlayB0w7ZybMOpc2UgaW5uZW46ICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI4NgorbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgorbXNnc3RyICJOaW5jcyBraXbDoWxhc3p0b3R0IHJlcMOzLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAiS2VyZXPDqXMgaXR0OiAlcy4uLiIKKworIzogbGliL3NlYXJjaC50Y2w6MjEKK21zZ2lkICJGaW5kOiIKK21zZ3N0ciAiS2VyZXPDqXM6IgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMworbXNnaWQgIk5leHQiCittc2dzdHIgIkvDtnZldGtlesWRIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyNAorbXNnaWQgIlByZXYiCittc2dzdHIgIkVsxZF6xZEiCisKKyM6IGxpYi9zZWFyY2gudGNsOjI1Cittc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCittc2dzdHIgIktpc2JldMWxLW5hZ3liZXTFsSBzesOhbcOtdCIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyMCBsaWIvc2hvcnRjdXQudGNsOjYxCittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCDDrXJuaSBhIGd5b3JzYmlsbGVudHnFsXQ6IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjEzNgorbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKK21zZ3N0ciAiTmVtIHNpa2Vyw7xsdCDDrXJuaSBheiBpa29udDoiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NworbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIk5lbSB0w6Ftb2dhdG90dCBoZWx5ZXPDrXLDoXMtZWxsZW7FkXJ6xZEiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJBIGhlbHllc8OtcsOhcy1lbGxlbsWRcnrDqXMgbmVtIGVsw6lyaGV0xZEiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiw4lydsOpbnl0ZWxlbiBhIGhlbHllc8OtcsOhcy1lbGxlbsWRcnrFkSBiZcOhbGzDrXTDoXNhIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCittc2dzdHIgIlN6w7N0w6FyIHZpc3N6YcOhbGzDrXTDoXNhIGEga8O2dmV0a2V6xZFyZTogJXMuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKK21zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgorbXNnc3RyICJBIGhlbHllc8OtcsOhcy1lbGxlbsWRcsWRIGluZMOtdMOhc2Egc2lrZXJ0ZWxlbiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIklzbWVyZXRsZW4gaGVseWVzw61yw6FzLWVsbGVuxZFyesWRIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Cittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgIk5pbmNzIGphdmFzbGF0IgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Cittc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJOZW0gdsOhcnQgRU9GIGEgaGVseWVzw61yw6FzLWVsbGVuxZFyesWRdMWRbCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM5MgorbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgorbXNnc3RyICJBIGhlbHllc8OtcsOhcy1lbGxlbsWRcnrDqXMgc2lrZXJ0ZWxlbiIKKworIzogbGliL3NzaGtleS50Y2w6MzEKK21zZ2lkICJObyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAiTmluY3NlbmVrIGt1bGNzb2suIgorCisjOiBsaWIvc3Noa2V5LnRjbDozNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCittc2dzdHIgIk55aWx2w6Fub3Mga3VsY3MgdGFsw6FsaGF0w7MgZWJiZW46ICVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDo0MAorbXNnaWQgIkdlbmVyYXRlIEtleSIKK21zZ3N0ciAiS3VsY3MgZ2VuZXLDoWzDoXNhIgorCisjOiBsaWIvc3Noa2V5LnRjbDo1NgorbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgorbXNnc3RyICJNw6Fzb2zDoXMgdsOhZ8OzbGFwcmEiCisKKyM6IGxpYi9zc2hrZXkudGNsOjcwCittc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCittc2dzdHIgIkF6IE9wZW5TU0ggcHVibGlrdXMga3VsY3N1bmsiCisKKyM6IGxpYi9zc2hrZXkudGNsOjc4Cittc2dpZCAiR2VuZXJhdGluZy4uLiIKK21zZ3N0ciAiR2VuZXLDoWzDoXMuLi4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiQXogc3NoLWtleWdlbiBpbmTDrXTDoXNhIHNpa2VydGVsZW46XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjExMQorbXNnaWQgIkdlbmVyYXRpb24gZmFpbGVkLiIKK21zZ3N0ciAiQSBnZW5lcsOhbMOhcyBuZW0gc2lrZXLDvGx0LiIKKworIzogbGliL3NzaGtleS50Y2w6MTE4Cittc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAiQSBnZW5lcsOhbMOhcyBzaWtlcmVzLCBkZSBlZ3kga3VsY3Mgc2UgdGFsw6FsaGF0w7MuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCittc2dzdHIgIkEga3VsY3N1bmsgaXR0IHZhbjogJXMiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiVzIC4uLiAlKmkgLyAlKmkgJXMgKCUzaSUlKSIKKworIzogbGliL3Rvb2xzLnRjbDo3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKK21zZ3N0ciAiQSh6KSAlcyBmdXR0YXTDoXNhIGVneSBraXbDoWxhc3p0b3R0IGbDoWpsdCBpZ8OpbnllbC4iCisKKyM6IGxpYi90b29scy50Y2w6OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKK21zZ3N0ciAiQml6dG9zIGJlbm5lLCBob2d5IGZ1dHRhdG5pIGvDrXbDoW5qYTogJXM/IgorCisjOiBsaWIvdG9vbHMudGNsOjExMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2w6ICVzIgorbXNnc3RyICJFc3prw7Z6OiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAiRnV0dGF0w6FzOiAlcy4uLiIKKworIzogbGliL3Rvb2xzLnRjbDoxNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgorbXNnc3RyICJBeiBlc3prw7Z6IHNpa2VyZXNlbiBiZWZlamV6xZFkw7Z0dDogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTUxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBmYWlsZWQ6ICVzIgorbXNnc3RyICJBeiBlc3prw7Z6IHNpa2VydGVsZW46ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorbXNnaWQgIkFkZCBUb29sIgorbXNnc3RyICJFc3prw7Z6IGhvenrDoWFkw6FzYSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKK21zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKK21zZ3N0ciAiw5pqIGVzemvDtnotcGFyYW5jcyBob3p6w6FhZMOhc2EiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjMzCittc2dpZCAiQWRkIGdsb2JhbGx5IgorbXNnc3RyICJHbG9iw6FsaXMgaG96esOhYWTDoXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjQ1Cittc2dpZCAiVG9vbCBEZXRhaWxzIgorbXNnc3RyICJFc3prw7Z6IHLDqXN6bGV0ZWkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjQ4Cittc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCittc2dzdHIgIkhhc3puw6FsanVuayAnLycgc3plcGFyw6F0b3Jva2F0IGFsbWVuw7wtZmEgbMOpdHJlaG96w6Fzw6Fob3o6IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo2MQorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJQYXJhbmNzOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzQKK21zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgorbXNnc3RyICJQYXJhbmNzYWJsYWsgbXV0YXTDoXNhIGZ1dHRhdMOhcyBlbMWRdHQiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjgwCittc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCittc2dzdHIgIiIKKyJNZWdrw6lyaSBhIGZlbGhhc3puw6Fsw7N0LCBob2d5IHbDoWxhc3N6b24ga2kgZWd5IHJldsOtemnDs3QgKGEgJFJFVklTSU9OLXQgIgorIsOhbGzDrXRqYSkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjg1Cittc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCittc2dzdHIgIk1lZ2vDqXJkZXppIGEgZmVsaGFzem7DoWzDs3QgdG92w6FiYmkgYXJndW1lbnR1bW9rw6lydCAoYSAkQVJHUy1vdCDDoWxsw610amEpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo5MgorbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKK21zZ3N0ciAiTmUgbXV0YXNzYSBhIHBhcmFuY3Mga2ltZW5ldGkgYWJsYWvDoXQiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjk3Cittc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKK21zZ3N0ciAiRnV0dGF0w6FzIGNzYWsgaGEgZWd5IGRpZmYga2kgdmFuIHbDoWxhc3p0dmEgKGEgJEZJTEVOQU1FIG5lbSDDvHJlcykiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjEyMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCittc2dzdHIgIkFkanVuayBtZWcgZWd5IGVzemvDtnogbmV2ZXQuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJBKHopICclcycgZXN6a8O2eiBtw6FyIGzDqXRlemlrLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTUxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkF6IGVzemvDtnogbmVtIGhvenrDoWFkaGF0w7M6XG4iCisiJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MAorbXNnaWQgIlJlbW92ZSBUb29sIgorbXNnc3RyICJFc3prw7Z6IGVsdMOhdm9sw610w6FzYSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk2Cittc2dpZCAiUmVtb3ZlIFRvb2wgQ29tbWFuZHMiCittc2dzdHIgIkVzemvDtnogcGFyYW5jc29rIGVsdMOhdm9sw610w6FzYSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjAwCittc2dpZCAiUmVtb3ZlIgorbXNnc3RyICJFbHTDoXZvbMOtdMOhcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjM2Cittc2dpZCAiKEJsdWUgZGVub3RlcyByZXBvc2l0b3J5LWxvY2FsIHRvb2xzKSIKK21zZ3N0ciAiKEvDqWsgamVsemkgYSByZXDDsy1zcGVjaWZpa3VzIGVzemvDtnrDtmtldCkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKK21zZ3N0ciAiUGFyYW5jcyBmdXR0YXTDoXNhOiAlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzExCittc2dpZCAiQXJndW1lbnRzIgorbXNnc3RyICJBcmd1bWVudHVtb2siCisKKyM6IGxpYi90b29sc19kbGcudGNsOjM0OAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCittc2dzdHIgIsOaaiB2w6FsdG96w6Fzb2sgbGV0w7ZsdMOpc2UgaW5uZW46ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAorIywgdGNsLWZvcm1hdAorbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKK21zZ3N0ciAiYSh6KSAlcyB0w6F2b2xpIHTDtnJsw6lzZSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKK21zZ3N0ciAiQSAlcyByZXDDs2LDs2wgdMO2csO2bHQga8O2dmV0xZEgYnJhbmNoZWsgdMO2cmzDqXNlIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAiVsOhbHRvesOhc29rIHB1c2hvbMOhc2EgaWRlOiAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCittc2dzdHIgIlTDvGtyw7Z6w6lzIGEga8O2dmV0a2V6xZEgaGVseXJlOiAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6ODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgorbXNnc3RyICJQdXNob2zDoXM6ICVzICVzLCBpZGU6ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDAKK21zZ2lkICJQdXNoIEJyYW5jaGVzIgorbXNnc3RyICJCcmFuY2hlayBwdXNob2zDoXNhIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTQKK21zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCittc2dzdHIgIkZvcnLDoXMgYnJhbmNoZWsiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEzMQorbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCittc2dzdHIgIkPDqWwgcmVww7MiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2OQorbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCittc2dzdHIgIsOBdHZpdGVsaSBvcGNpw7NrIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzEKK21zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkzDqXRlesWRIGJyYW5jaCBmZWzDvGzDrXLDoXPDoW5hayBlcsWRbHRldMOpc2UgKGxlaGV0LCBob2d5IGVsIGZvZyBkb2JuaSAiCisidsOhbHRvenRhdMOhc29rYXQpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzUKK21zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKK21zZ3N0ciAiVsOpa29ueSBjc29tYWdvayBoYXN6bsOhbGF0YSAobGFzc8O6IGjDoWzDs3phdGkga2FwY3NvbGF0b2sgc3rDoW3DoXJhKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTc5Cittc2dpZCAiSW5jbHVkZSB0YWdzIgorbXNnc3RyICJUYWdla2V0IGlzIgorCisjfiBtc2dpZCAiIgorI34gIlVuYWJsZSB0byBzdGFydCBnaXRrOlxuIgorI34gIlxuIgorI34gIiVzIGRvZXMgbm90IGV4aXN0IgorI34gbXNnc3RyICIiCisjfiAiQSBnaXRrIGluZMOtdMOhc2Egc2lrZXJ0ZWxlbjpcbiIKKyN+ICJcbiIKKyN+ICJBKHopICVzIG5lbSBsw6l0ZXppayIKKworI34gbXNnaWQgIkFwcGxlIgorI34gbXNnc3RyICJBcHBsZSIKKworI34gbXNnaWQgIlVSTDoiCisjfiBtc2dzdHIgIlVSTDoiCisKKyN+IG1zZ2lkICJEZWxldGUgUmVtb3RlIEJyYW5jaCIKKyN+IG1zZ3N0ciAiVMOhdm9saSBicmFuY2ggdMO2cmzDqXNlIgorCisjfiBtc2dpZCAiTm90IGNvbm5lY3RlZCB0byBhc3BlbGwiCisjfiBtc2dzdHIgIk5pbmNzIGthcGNzb2xhdCBheiBhc3BlbGxoZXoiCisKKyN+IG1zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIChXaWxsIE5vdCBCZSBDb21taXR0ZWQpIgorI34gbXNnc3RyICJOZW0ga2l2w6FsYXN6dG90dCB2w6FsdG96dGF0w6Fzb2sgKG5lbSBsZXN6IGNvbW1pdG9sdmEpIgorCisjfiBtc2dpZCAiUHVzaCB0byAlcy4uLiIKKyN+IG1zZ3N0ciAiUHVzaG9sw6FzIGlkZTogJXMuLi4iCisKKyN+IG1zZ2lkICJBZGQgRXhpc3RpbmcgVG8gQ29tbWl0IgorI34gbXNnc3RyICJIb3p6w6FhZMOhcyBsw6l0ZXrFkSBjb21taXRob3oiCisKKyN+IG1zZ2lkICJBZGQgRXhpc3RpbmciCisjfiBtc2dzdHIgIkzDqXRlesWRIGhvenrDoWFkw6FzYSIKKworI34gbXNnaWQgIiIKKyN+ICJBYm9ydCBjb21taXQ/XG4iCisjfiAiXG4iCisjfiAiQWJvcnRpbmcgdGhlIGN1cnJlbnQgY29tbWl0IHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSAiCisjfiAibG9zdC5cbiIKKyN+ICJcbiIKKyN+ICJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IGNvbW1pdD8iCisjfiBtc2dzdHIgIiIKKyN+ICJNZWdzemFrw610anVrIGEgY29tbWl0b3Q/XG4iCisjfiAiXG4iCisjfiAiQSBqZWxlbmxlZ2kgY29tbWl0IG1lZ3N6YWvDrXTDoXNhICpNSU5ERU4qIG5lbSBjb21taXRvbHQgdsOhbHRvenRhdMOhcyAiCisjfiAiZWx2ZXN6dMOpc8OpdCBqZWxlbnRpLlxuIgorI34gIlxuIgorI34gIkZvbHl0YXRqdWsgYSBqZWxlbmxlZ2kgY29tbWl0IG1lZ3N6YWvDrXTDoXPDoXQ/IgorCisjfiBtc2dpZCAiQWJvcnRpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCisjfiBtc2dzdHIgIk1lZ3N6YWvDrXTDoXMuLi4gdsOhcmp1bmsuLi4iCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL2l0LnBvIGIvZ2l0LWd1aS9wby9pdC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmQ4YjhlCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS9wby9pdC5wbwpAQCAtMCwwICsxLDI1OTEgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0LWd1aSB0byBJdGFsaWFuCisjIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UKKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdC1ndWkgcGFja2FnZS4KKyMgUGFvbG8gQ2lhcnJvY2NoaSA8cGFvbG8uY2lhcnJvY2NoaUBnbWFpbC5jb20+LCAyMDA3CisjIE1pY2hlbGUgQmFsbGFiaW8gPGJhcnJhX2N1ZGFAa2F0YW1haWwuY29tPiwgMjAwNy4KKyMKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWlcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDEtMjYgMTU6NDctMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDEtMjggMTA6MDQrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogTWljaGVsZSBCYWxsYWJpbyA8YmFycmFfY3VkYUBrYXRhbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogSXRhbGlhbiA8dHBAbGlzdHMubGludXguaXQ+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3OTMgZ2l0LWd1aS5zaDo4MDcgZ2l0LWd1aS5zaDo4MjAgZ2l0LWd1aS5zaDo5MDMKKyM6IGdpdC1ndWkuc2g6OTIyCittc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCittc2dzdHIgImdpdC1ndWk6IGVycm9yZSBncmF2ZSIKKworIzogZ2l0LWd1aS5zaDo3NDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGZvbnQgc3BlY2lmaWVkIGluICVzOiIKK21zZ3N0ciAiQ2FyYXR0ZXJpIG5vbiB2YWxpZGkgc3BlY2lmaWNhdGkgaW4gJXM6IgorCisjOiBnaXQtZ3VpLnNoOjc3OQorbXNnaWQgIk1haW4gRm9udCIKK21zZ3N0ciAiQ2FyYXR0ZXJpIHByaW5jaXBhbGkiCisKKyM6IGdpdC1ndWkuc2g6NzgwCittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgIkNhcmF0dGVyaSBwZXIgY29uZnJvbnRpIGUgdGVybWluYWxlIgorCisjOiBnaXQtZ3VpLnNoOjc5NAorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBnaXQgbmVsIFBBVEgiCisKKyM6IGdpdC1ndWkuc2g6ODIxCittc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCittc2dzdHIgIkltcG9zc2liaWxlIGRldGVybWluYXJlIGxhIHZlcnNpb25lIGRpIEdpdDoiCisKKyM6IGdpdC1ndWkuc2g6ODM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIlxuIgorIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCisiXG4iCisiJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgorIlxuIgorIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCittc2dzdHIgIiIKKyJMYSB2ZXJzaW9uZSBkaSBHaXQgbm9uIHB1w7IgZXNzZXJlIGRldGVybWluYXRhLlxuIgorIlxuIgorIiVzIHJpcG9ydGEgY2hlIGxhIHZlcnNpb25lIMOoICclcycuXG4iCisiXG4iCisiJXMgcmljaGllZGUgYWxtZW5vIEdpdCAxLjUuMCBvIHN1cGVyaW9yZS5cbiIKKyJcbiIKKyJBc3N1bWVyZSBjaGUgJyVzJyBzaWEgYWxsYSB2ZXJzaW9uZSAxLjUuMD9cbiIKKworIzogZ2l0LWd1aS5zaDoxMTI4Cittc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgorbXNnc3RyICJOb24gdHJvdm8gbGEgZGlyZWN0b3J5IGRpIGdpdDogIgorCisjOiBnaXQtZ3VpLnNoOjExNDYKK21zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBzcG9zdGFyc2kgc3VsbGEgZGlyZWN0b3J5IHByaW5jaXBhbGUgZGVsIHByb2dldHRvOiIKKworIzogZ2l0LWd1aS5zaDoxMTU0Cittc2dpZCAiQ2Fubm90IHVzZSBiYXJlIHJlcG9zaXRvcnk6IgorbXNnc3RyICJJbXBvc3NpYmlsZSB1c2FyZSB1biBhcmNoaXZpbyBzZW56YSBkaXJlY3RvcnkgZGkgbGF2b3JvOiIKKworIzogZ2l0LWd1aS5zaDoxMTYyCittc2dpZCAiTm8gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIk5lc3N1bmEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKKworIzogZ2l0LWd1aS5zaDoxMzM0IGxpYi9jaGVja291dF9vcC50Y2w6MzA2Cittc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKK21zZ3N0ciAiQ29udHJvbGxvIGRlbGxvIHN0YXRvIGRlaSBmaWxlIGluIGNvcnNvLi4uIgorCisjOiBnaXQtZ3VpLnNoOjEzOTAKK21zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgorbXNnc3RyICJSaWNlcmNhIGRpIGZpbGUgbW9kaWZpY2F0aSBpbiBjb3Jzby4uLiIKKworIzogZ2l0LWd1aS5zaDoxNDU0Cittc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAiQXZ2aW8gcHJlcGFyZS1jb21taXQtbXNnIGhvb2suLi4iCisKKyM6IGdpdC1ndWkuc2g6MTQ3MQorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIlJldmlzaW9uZSByaWZpdXRhdGEgZGFsIHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKKworIzogZ2l0LWd1aS5zaDoxNjI5IGxpYi9icm93c2VyLnRjbDoyNDYKK21zZ2lkICJSZWFkeS4iCittc2dzdHIgIlByb250by4iCisKKyM6IGdpdC1ndWkuc2g6MTc4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpc3BsYXlpbmcgb25seSAlcyBvZiAlcyBmaWxlcy4iCittc2dzdHIgIlNhcmFubm8gbW9zdHJhdGkgc29sbyAlcyBmaWxlIHN1ICVzLiIKKworIzogZ2l0LWd1aS5zaDoxOTEzCittc2dpZCAiVW5tb2RpZmllZCIKK21zZ3N0ciAiTm9uIG1vZGlmaWNhdG8iCisKKyM6IGdpdC1ndWkuc2g6MTkxNQorbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJNb2RpZmljYXRvLCBub24gcHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjE5MTYgZ2l0LWd1aS5zaDoxOTI0Cittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIlByZXBhcmF0byBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoxOTE3IGdpdC1ndWkuc2g6MTkyNQorbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJQYXJ0aSBwcmVwYXJhdGUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MTkxOCBnaXQtZ3VpLnNoOjE5MjYKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKK21zZ3N0ciAiUHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lLCBtYW5jYW50ZSIKKworIzogZ2l0LWd1aS5zaDoxOTIwCittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIlRpcG8gZGkgZmlsZSBtb2RpZmljYXRvLCBub24gcHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjE5MjEKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgorbXNnc3RyICJUaXBvIGRpIGZpbGUgbW9kaWZpY2F0bywgcHJlcGFyYXRvIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjE5MjMKK21zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIk5vbiB0cmFjY2lhdG8sIG5vbiBwcmVwYXJhdG8gcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MTkyOAorbXNnaWQgIk1pc3NpbmciCittc2dzdHIgIk1hbmNhbnRlIgorCisjOiBnaXQtZ3VpLnNoOjE5MjkKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCittc2dzdHIgIlByZXBhcmF0byBwZXIgbGEgcmltb3ppb25lIgorCisjOiBnaXQtZ3VpLnNoOjE5MzAKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIlByZXBhcmF0byBhbGxhIHJpbW96aW9uZSwgYW5jb3JhIHByZXNlbnRlIgorCisjOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKKyM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICJSaWNoaWVkZSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIgorCisjOiBnaXQtZ3VpLnNoOjE5NzIKK21zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICJBdnZpbyBkaSBnaXRrLi4uIGF0dGVuZGVyZS4uLiIKKworIzogZ2l0LWd1aS5zaDoxOTg0Cittc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgZ2l0ayBuZWwgUEFUSCIKKworIzogZ2l0LWd1aS5zaDoyMDQzCittc2dpZCAiQ291bGRuJ3QgZmluZCBnaXQgZ3VpIGluIFBBVEgiCittc2dzdHIgIkltcG9zc2liaWxlIHRyb3ZhcmUgZ2l0IGd1aSBuZWwgUEFUSCIKKworIzogZ2l0LWd1aS5zaDoyNDU1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICJBcmNoaXZpbyIKKworIzogZ2l0LWd1aS5zaDoyNDU2Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAiTW9kaWZpY2EiCisKKyM6IGdpdC1ndWkuc2g6MjQ1OCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJSYW1vIgorCisjOiBnaXQtZ3VpLnNoOjI0NjEgbGliL2Nob29zZV9yZXYudGNsOjU0OAorbXNnaWQgIkNvbW1pdEBAbm91biIKK21zZ3N0ciAiUmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjI0NjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAiRnVzaW9uZSAoTWVyZ2UpIgorCisjOiBnaXQtZ3VpLnNoOjI0NjUgbGliL2Nob29zZV9yZXYudGNsOjU1NworbXNnaWQgIlJlbW90ZSIKK21zZ3N0ciAiUmVtb3RvIgorCisjOiBnaXQtZ3VpLnNoOjI0NjgKK21zZ2lkICJUb29scyIKK21zZ3N0ciAiQWNjZXNzb3JpIgorCisjOiBnaXQtZ3VpLnNoOjI0NzcKK21zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKK21zZ3N0ciAiRXNwbG9yYSBjb3BpYSBkaSBsYXZvcm8iCisKKyM6IGdpdC1ndWkuc2g6MjQ4MworbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgorbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkZWwgcmFtbyBhdHR1YWxlIgorCisjOiBnaXQtZ3VpLnNoOjI0ODcKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgorbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkZWwgcmFtby4uLiIKKworIzogZ2l0LWd1aS5zaDoyNDkyCittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKK21zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRlbCByYW1vIGF0dHVhbGUiCisKKyM6IGdpdC1ndWkuc2g6MjQ5NgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCittc2dzdHIgIlZpc3VhbGl6emEgbGEgY3Jvbm9sb2dpYSBkaSB0dXR0aSBpIHJhbWkiCisKKyM6IGdpdC1ndWkuc2g6MjUwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgorbXNnc3RyICJFc3Bsb3JhIGkgZmlsZSBkaSAlcyIKKworIzogZ2l0LWd1aS5zaDoyNTA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKK21zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRpICVzIgorCisjOiBnaXQtZ3VpLnNoOjI1MTAgbGliL2RhdGFiYXNlLnRjbDoyNyBsaWIvZGF0YWJhc2UudGNsOjY3Cittc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKK21zZ3N0ciAiU3RhdGlzdGljaGUgZGVsbCdhcmNoaXZpbyIKKworIzogZ2l0LWd1aS5zaDoyNTEzIGxpYi9kYXRhYmFzZS50Y2w6MzQKK21zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKK21zZ3N0ciAiQ29tcHJpbWkgbCdhcmNoaXZpbyIKKworIzogZ2l0LWd1aS5zaDoyNTE2Cittc2dpZCAiVmVyaWZ5IERhdGFiYXNlIgorbXNnc3RyICJWZXJpZmljYSBsJ2FyY2hpdmlvIgorCisjOiBnaXQtZ3VpLnNoOjI1MjMgZ2l0LWd1aS5zaDoyNTI3IGdpdC1ndWkuc2g6MjUzMSBsaWIvc2hvcnRjdXQudGNsOjgKKyM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgorbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCittc2dzdHIgIkNyZWEgaWNvbmEgZGVza3RvcCIKKworIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCittc2dpZCAiUXVpdCIKK21zZ3N0ciAiRXNjaSIKKworIzogZ2l0LWd1aS5zaDoyNTQ3Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAiQW5udWxsYSIKKworIzogZ2l0LWd1aS5zaDoyNTUwCittc2dpZCAiUmVkbyIKK21zZ3N0ciAiUmlwZXRpIgorCisjOiBnaXQtZ3VpLnNoOjI1NTQgZ2l0LWd1aS5zaDozMTA5Cittc2dpZCAiQ3V0IgorbXNnc3RyICJUYWdsaWEiCisKKyM6IGdpdC1ndWkuc2g6MjU1NyBnaXQtZ3VpLnNoOjMxMTIgZ2l0LWd1aS5zaDozMTg2IGdpdC1ndWkuc2g6MzI1OQorIzogbGliL2NvbnNvbGUudGNsOjY5Cittc2dpZCAiQ29weSIKK21zZ3N0ciAiQ29waWEiCisKKyM6IGdpdC1ndWkuc2g6MjU2MCBnaXQtZ3VpLnNoOjMxMTUKK21zZ2lkICJQYXN0ZSIKK21zZ3N0ciAiSW5jb2xsYSIKKworIzogZ2l0LWd1aS5zaDoyNTYzIGdpdC1ndWkuc2g6MzExOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzgKK21zZ2lkICJEZWxldGUiCittc2dzdHIgIkVsaW1pbmEiCisKKyM6IGdpdC1ndWkuc2g6MjU2NyBnaXQtZ3VpLnNoOjMxMjIgZ2l0LWd1aS5zaDozMjYzIGxpYi9jb25zb2xlLnRjbDo3MQorbXNnaWQgIlNlbGVjdCBBbGwiCittc2dzdHIgIlNlbGV6aW9uYSB0dXR0byIKKworIzogZ2l0LWd1aS5zaDoyNTc2Cittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICJDcmVhLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1ODIKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAiQXR0aXZhLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1ODgKK21zZ2lkICJSZW5hbWUuLi4iCittc2dzdHIgIlJpbm9taW5hIgorCisjOiBnaXQtZ3VpLnNoOjI1OTMKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIkVsaW1pbmEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU5OAorbXNnaWQgIlJlc2V0Li4uIgorbXNnc3RyICJSaXByaXN0aW5hLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI2MDgKK21zZ2lkICJEb25lIgorbXNnc3RyICJGYXR0byIKKworIzogZ2l0LWd1aS5zaDoyNjEwCittc2dpZCAiQ29tbWl0QEB2ZXJiIgorbXNnc3RyICJOdW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKK21zZ2lkICJOZXcgQ29tbWl0IgorbXNnc3RyICJOdW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MjYyNyBnaXQtZ3VpLnNoOjMwNTcKK21zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKK21zZ3N0ciAiQ29ycmVnZ2kgbCd1bHRpbWEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjI2MzcgZ2l0LWd1aS5zaDozMDExIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKK21zZ2lkICJSZXNjYW4iCittc2dzdHIgIkFuYWxpenphIG51b3ZhbWVudGUiCisKKyM6IGdpdC1ndWkuc2g6MjY0MworbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKK21zZ3N0ciAiUHJlcGFyYSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDoyNjQ5Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCittc2dzdHIgIlByZXBhcmEgaSBmaWxlIG1vZGlmaWNhdGkgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MjY1NQorbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCittc2dzdHIgIkFubnVsbGEgcHJlcGFyYXppb25lIgorCisjOiBnaXQtZ3VpLnNoOjI2NjEgbGliL2luZGV4LnRjbDo0MTIKK21zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKK21zZ3N0ciAiQW5udWxsYSBtb2RpZmljaGUiCisKKyM6IGdpdC1ndWkuc2g6MjY2OSBnaXQtZ3VpLnNoOjMzMTAgZ2l0LWd1aS5zaDozMzQxCittc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCittc2dzdHIgIk1vc3RyYSBtZW5vIGNvbnRlc3RvIgorCisjOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQorbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgorbXNnc3RyICJNb3N0cmEgcGnDuSBjb250ZXN0byIKKworIzogZ2l0LWd1aS5zaDoyNjgwIGdpdC1ndWkuc2g6MzAyNCBnaXQtZ3VpLnNoOjMxMzMKK21zZ2lkICJTaWduIE9mZiIKK21zZ3N0ciAiU2lnbiBPZmYiCisKKyM6IGdpdC1ndWkuc2g6MjY5NgorbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgorbXNnc3RyICJGdXNpb25lIGxvY2FsZS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzAxCittc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCittc2dzdHIgIkludGVycm9tcGkgZnVzaW9uZS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzEzIGdpdC1ndWkuc2g6Mjc0MQorbXNnaWQgIkFkZC4uLiIKK21zZ3N0ciAiQWdnaXVuZ2kuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjcxNworbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIlByb3BhZ2EuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjcyMQorbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCittc2dzdHIgIkVsaW1pbmEgcmFtby4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzMxIGdpdC1ndWkuc2g6MzI5MgorbXNnaWQgIk9wdGlvbnMuLi4iCittc2dzdHIgIk9wemlvbmkuLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc0MgorbXNnaWQgIlJlbW92ZS4uLiIKK21zZ3N0ciAiUmltdW92aS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKK21zZ2lkICJIZWxwIgorbXNnc3RyICJBaXV0byIKKworIzogZ2l0LWd1aS5zaDoyNzU1IGdpdC1ndWkuc2g6Mjc1OSBsaWIvYWJvdXQudGNsOjE0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm91dCAlcyIKK21zZ3N0ciAiSW5mb3JtYXppb25pIHN1ICVzIgorCisjOiBnaXQtZ3VpLnNoOjI3ODMKK21zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKK21zZ3N0ciAiRG9jdW1lbnRhemlvbmUgc3VsIHdlYiIKKworIzogZ2l0LWd1aS5zaDoyNzg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NgorbXNnaWQgIlNob3cgU1NIIEtleSIKK21zZ3N0ciAiTW9zdHJhIGNoYXZlIFNTSCIKKworIzogZ2l0LWd1aS5zaDoyODkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJlcnJvcmUgZ3JhdmU6IGltcG9zc2liaWxlIGVmZmV0dHVhcmUgbG8gc3RhdCBkZWwgcGF0aCAlczogZmlsZSBvIGRpcmVjdG9yeSAiCisibm9uIHRyb3ZhdGEiCisKKyM6IGdpdC1ndWkuc2g6MjkyNgorbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKK21zZ3N0ciAiUmFtbyBhdHR1YWxlOiIKKworIzogZ2l0LWd1aS5zaDoyOTQ3Cittc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKK21zZ3N0ciAiTW9kaWZpY2hlIHByZXBhcmF0ZSAoc2FyYW5ubyBuZWxsYSBudW92YSByZXZpc2lvbmUpIgorCisjOiBnaXQtZ3VpLnNoOjI5NjcKK21zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgorbXNnc3RyICJNb2RpZmljaGUgbm9uIHByZXBhcmF0ZSIKKworIzogZ2l0LWd1aS5zaDozMDE3Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAiUHJlcGFyYSBtb2RpZmljYXRpIgorCisjOiBnaXQtZ3VpLnNoOjMwMzYgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MworbXNnaWQgIlB1c2giCittc2dzdHIgIlByb3BhZ2EgKFB1c2gpIgorCisjOiBnaXQtZ3VpLnNoOjMwNzEKK21zZ2lkICJJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTWVzc2FnZ2lvIGRpIHJldmlzaW9uZSBpbml6aWFsZToiCisKKyM6IGdpdC1ndWkuc2g6MzA3MgorbXNnaWQgIkFtZW5kZWQgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdnaW8gZGkgcmV2aXNpb25lIGNvcnJldHRvOiIKKworIzogZ2l0LWd1aS5zaDozMDczCittc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTWVzc2FnZ2lvIGluaXppYWxlIGRpIHJldmlzaW9uZSBjb3JyZXR0bzoiCisKKyM6IGdpdC1ndWkuc2g6MzA3NAorbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNZXNzYWdnaW8gZGkgZnVzaW9uZSBjb3JyZXR0bzoiCisKKyM6IGdpdC1ndWkuc2g6MzA3NQorbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiTWVzc2FnZ2lvIGRpIGZ1c2lvbmU6IgorCisjOiBnaXQtZ3VpLnNoOjMwNzYKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2dpbyBkaSByZXZpc2lvbmU6IgorCisjOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MworbXNnaWQgIkNvcHkgQWxsIgorbXNnc3RyICJDb3BpYSB0dXR0byIKKworIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0Cittc2dpZCAiRmlsZToiCittc2dzdHIgIkZpbGU6IgorCisjOiBnaXQtZ3VpLnNoOjMyNTUKK21zZ2lkICJSZWZyZXNoIgorbXNnc3RyICJSaW5mcmVzY2EiCisKKyM6IGdpdC1ndWkuc2g6MzI3NgorbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAiRGltaW51aXNjaSBkaW1lbnNpb25lIGNhcmF0dGVyaSIKKworIzogZ2l0LWd1aS5zaDozMjgwCittc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICJBdW1lbnRhIGRpbWVuc2lvbmUgY2FyYXR0ZXJpIgorCisjOiBnaXQtZ3VpLnNoOjMyODggbGliL2JsYW1lLnRjbDoyODEKK21zZ2lkICJFbmNvZGluZyIKK21zZ3N0ciAiQ29kaWZpY2EiCisKKyM6IGdpdC1ndWkuc2g6MzI5OQorbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKK21zZ3N0ciAiQXBwbGljYS9JbnZlcnRpIHNlemlvbmUiCisKKyM6IGdpdC1ndWkuc2g6MzMwNAorbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKK21zZ3N0ciAiQXBwbGljYS9JbnZlcnRpIHJpZ2EiCisKKyM6IGdpdC1ndWkuc2g6MzMyMworbXNnaWQgIlJ1biBNZXJnZSBUb29sIgorbXNnc3RyICJBdnZpYSBwcm9ncmFtbWEgZXN0ZXJubyBwZXIgbGEgcmlzb2x1emlvbmUgZGVpIGNvbmZsaXR0aSIKKworIzogZ2l0LWd1aS5zaDozMzI4Cittc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgorbXNnc3RyICJVc2EgdmVyc2lvbmUgcmVtb3RhIgorCisjOiBnaXQtZ3VpLnNoOjMzMzIKK21zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKK21zZ3N0ciAiVXNhIHZlcnNpb25lIGxvY2FsZSIKKworIzogZ2l0LWd1aS5zaDozMzM2Cittc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCittc2dzdHIgIlJpdG9ybmEgYWxsYSByZXZpc2lvbmUgY29tdW5lIgorCisjOiBnaXQtZ3VpLnNoOjMzNTQKK21zZ2lkICJWaXN1YWxpemUgVGhlc2UgQ2hhbmdlcyBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWaXN1YWxpenphIHF1ZXN0ZSBtb2RpZmljaGUgbmVsIHNvdHRvbW9kdWxvIgorCisjOiBnaXQtZ3VpLnNoOjMzNTgKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWaXN1YWxpenphIGxhIGNyb25vbG9naWEgZGVsIHJhbW8gYXR0dWFsZSBuZWwgc290dG9tb2R1bG8iCisKKyM6IGdpdC1ndWkuc2g6MzM2MgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiVmlzdWFsaXp6YSBsYSBjcm9ub2xvZ2lhIGRpIHR1dHRpIGkgcmFtaSBuZWwgc290dG9tb2R1bG8iCisKKyM6IGdpdC1ndWkuc2g6MzM2NworbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiQXZ2aWEgZ2l0IGd1aSBuZWwgc290dG9tb2R1bG8iCisKKyM6IGdpdC1ndWkuc2g6MzM4OQorbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKK21zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUgZGVsbGEgc2V6aW9uZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSIKKworIzogZ2l0LWd1aS5zaDozMzkxCittc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKK21zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUgZGVsbGUgbGluZWUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MzM5MworbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAiQW5udWxsYSBwcmVwYXJhemlvbmUgZGVsbGEgbGluZWEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MzM5NgorbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKK21zZ3N0ciAiUHJlcGFyYSBzZXppb25lIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjMzOTgKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICJQcmVwYXJhIGxpbmVlIHBlciB1bmEgbnVvdmEgcmV2aXNpb25lIgorCisjOiBnaXQtZ3VpLnNoOjM0MDAKK21zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCittc2dzdHIgIlByZXBhcmEgbGluZWEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUiCisKKyM6IGdpdC1ndWkuc2g6MzQyNAorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiSW5pemlhbGl6emF6aW9uZS4uLiIKKworIzogZ2l0LWd1aS5zaDozNTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKKyJcbiIKKyJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKKyJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKKyJieSAlczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBvc3NpYmlsaSBwcm9ibGVtaSBjb24gbGUgdmFyaWFiaWxpIGQnYW1iaWVudGUuXG4iCisiXG4iCisiTGUgc2VndWVudGkgdmFyaWFiaWxpIGQnYW1iaWVudGUgc2FyYW5ubyBwcm9iYWJpbG1lbnRlXG4iCisiaWdub3JhdGUgZGEgdHV0dGkgaSBzb3R0b3Byb2Nlc3NpIGRpIEdpdCBhdnZpYXRpXG4iCisiZGEgJXM6XG4iCisiXG4iCisKKyM6IGdpdC1ndWkuc2g6MzU3MAorbXNnaWQgIiIKKyJcbiIKKyJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCisiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorbXNnc3RyICIiCisiXG4iCisiQ2nDsiDDqCBkb3Z1dG8gYSB1biBwcm9ibGVtYSBjb25vc2NpdXRvXG4iCisiY2F1c2F0byBkYWxsJ2VzZWd1aWJpbGUgVGNsIGRpc3RyaWJ1aXRvIGRhIEN5Z3dpbi4iCisKKyM6IGdpdC1ndWkuc2g6MzU3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCisiaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCisidXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKKyJ+Ly5naXRjb25maWcgZmlsZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIlVuYSBidW9uYSBhbHRlcm5hdGl2YSBhICVzXG4iCisiY29uc2lzdGUgbmVsbCdhc3NlZ25hcmUgdmFsb3JpIGFsbGUgdmFyaWFiaWxpIGRpIGNvbmZpZ3VyYXppb25lXG4iCisidXNlci5uYW1lIGUgdXNlci5lbWFpbCBuZWwgdHVvIGZpbGUgfi8uZ2l0Y29uZmlnIHBlcnNvbmFsZS5cbiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtIHVuJ2ludGVyZmFjY2lhIGdyYWZpY2EgcGVyIEdpdC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzIKK21zZ2lkICJGaWxlIFZpZXdlciIKK21zZ3N0ciAiTW9zdHJhIGZpbGUiCisKKyM6IGxpYi9ibGFtZS50Y2w6NzgKK21zZ2lkICJDb21taXQ6IgorbXNnc3RyICJSZXZpc2lvbmU6IgorCisjOiBsaWIvYmxhbWUudGNsOjI3MQorbXNnaWQgIkNvcHkgQ29tbWl0IgorbXNnc3RyICJDb3BpYSByZXZpc2lvbmUiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjc1Cittc2dpZCAiRmluZCBUZXh0Li4uIgorbXNnc3RyICJUcm92YSB0ZXN0by4uLiIKKworIzogbGliL2JsYW1lLnRjbDoyODQKK21zZ2lkICJEbyBGdWxsIENvcHkgRGV0ZWN0aW9uIgorbXNnc3RyICJSaWNlcmNhIGFjY3VyYXRhIGRlbGxlIGNvcGllIgorCisjOiBsaWIvYmxhbWUudGNsOjI4OAorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICJNb3N0cmEgY29udGVzdG8gbmVsbGEgY3Jvbm9sb2dpYSIKKworIzogbGliL2JsYW1lLnRjbDoyOTEKK21zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgorbXNnc3RyICJBbm5vdGEgbGEgcmV2aXNpb25lIHByZWNlZGVudGUiCisKKyM6IGxpYi9ibGFtZS50Y2w6NDUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVhZGluZyAlcy4uLiIKK21zZ3N0ciAiTGV0dHVyYSBkaSAlcy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1NTcKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAiQ2FyaWNhbWVudG8gYW5ub3RhemlvbmkgcGVyIGNvcGllL3Nwb3N0YW1lbnRpLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjU3NworbXNnaWQgImxpbmVzIGFubm90YXRlZCIKK21zZ3N0ciAibGluZWUgYW5ub3RhdGUiCisKKyM6IGxpYi9ibGFtZS50Y2w6NzY5Cittc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAiQ2FyaWNhbWVudG8gYW5ub3RhemlvbmkgcGVyIHBvc2l6aW9uZSBvcmlnaW5hcmlhLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjc3MgorbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgorbXNnc3RyICJBbm5vdGF6aW9uZSBjb21wbGV0YXRhLiIKKworIzogbGliL2JsYW1lLnRjbDo4MDIKK21zZ2lkICJCdXN5IgorbXNnc3RyICJPY2N1cGF0byIKKworIzogbGliL2JsYW1lLnRjbDo4MDMKK21zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKK21zZ3N0ciAiSWwgcHJvY2Vzc28gZGkgYW5ub3RhemlvbmUgw6ggZ2nDoCBpbiBjb3Jzby4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODQyCittc2dpZCAiUnVubmluZyB0aG9yb3VnaCBjb3B5IGRldGVjdGlvbi4uLiIKK21zZ3N0ciAiUmljZXJjYSBhY2N1cmF0YSBkZWxsZSBjb3BpZSBpbiBjb3Jzby4uLiIKKworIzogbGliL2JsYW1lLnRjbDo5MTAKK21zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCittc2dzdHIgIkNhcmljYW1lbnRvIGFubm90YXppb25pLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjk2MworbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIkF1dG9yZToiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTY3Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiUmV2aXNpb25lIGNyZWF0YSBkYToiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTcyCittc2dpZCAiT3JpZ2luYWwgRmlsZToiCittc2dzdHIgIkZpbGUgb3JpZ2luYXJpbzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTAyMAorbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgdHJvdmFyZSBsYSByZXZpc2lvbmUgSEVBRDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA3NQorbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgorbXNnc3RyICJJbXBvc3NpYmlsZSB0cm92YXJlIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDkwCittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgcGFyZW50IgorbXNnc3RyICJJbXBvc3NpYmlsZSB2aXN1YWxpenphcmUgbGEgcmV2aXNpb25lIHByZWNlZGVudGUiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA5MSBsaWIvZGlmZi50Y2w6MzIwCittc2dpZCAiRXJyb3IgbG9hZGluZyBkaWZmOiIKK21zZ3N0ciAiRXJyb3JlIG5lbCBjYXJpY2FtZW50byBkZWxsZSBkaWZmZXJlbnplOiIKKworIzogbGliL2JsYW1lLnRjbDoxMjMxCittc2dpZCAiT3JpZ2luYWxseSBCeToiCittc2dzdHIgIkluIG9yaWdpbmUgZGE6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzcKK21zZ2lkICJJbiBGaWxlOiIKK21zZ3N0ciAiTmVsIGZpbGU6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyNDIKK21zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCittc2dzdHIgIkNvcGlhdG8gbyBzcG9zdGF0byBxdWkgZGE6IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxNCBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoxOQorbXNnaWQgIkNoZWNrb3V0IEJyYW5jaCIKK21zZ3N0ciAiQXR0aXZhIHJhbW8iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIzCittc2dpZCAiQ2hlY2tvdXQiCittc2dzdHIgIkF0dGl2YSIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjcgbGliL2JyYW5jaF9jcmVhdGUudGNsOjM1CisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjMwIGxpYi9icm93c2VyLnRjbDoyODIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKKyM6IGxpYi9vcHRpb24udGNsOjEyNSBsaWIvcmVtb3RlX2FkZC50Y2w6MzIgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MgorIzogbGliL3Rvb2xzX2RsZy50Y2w6NDAgbGliL3Rvb2xzX2RsZy50Y2w6MjA0IGxpYi90b29sc19kbGcudGNsOjM1MgorIzogbGliL3RyYW5zcG9ydC50Y2w6MTA4Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBbm51bGxhIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6Mjg3IGxpYi90b29sc19kbGcudGNsOjMyOAorbXNnaWQgIlJldmlzaW9uIgorbXNnc3RyICJSZXZpc2lvbmUiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM2IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo2OSBsaWIvb3B0aW9uLnRjbDoyODAKK21zZ2lkICJPcHRpb25zIgorbXNnc3RyICJPcHppb25pIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKK21zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCittc2dzdHIgIlJlY3VwZXJhIGR1cGxpY2F0byBsb2NhbGUgZGkgcmFtbyByZW1vdG8iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Cittc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgorbXNnc3RyICJTdGFjY2EgZGEgcmFtbyBsb2NhbGUiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgorbXNnaWQgIkNyZWF0ZSBCcmFuY2giCittc2dzdHIgIkNyZWEgcmFtbyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI3Cittc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCittc2dzdHIgIkNyZWEgbnVvdm8gcmFtbyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgxCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJDcmVhIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDAKK21zZ2lkICJCcmFuY2ggTmFtZSIKK21zZ3N0ciAiTm9tZSBkZWwgcmFtbyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQzIGxpYi9yZW1vdGVfYWRkLnRjbDozOSBsaWIvdG9vbHNfZGxnLnRjbDo1MAorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOb21lOiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU4Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCittc2dzdHIgIkFwcGFpYSBub21lIGRlbCBkdXBsaWNhdG8gbG9jYWxlIGRpIHJhbW8gcmVtb3RvIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKK21zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKK21zZ3N0ciAiUmV2aXNpb25lIGluaXppYWxlIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKK21zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKK21zZ3N0ciAiQWdnaW9ybmEgcmFtbyBlc2lzdGVudGU6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKK21zZ2lkICJObyIKK21zZ3N0ciAiTm8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAorbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgorbXNnc3RyICJTb2xvIGZhc3QgZm9yd2FyZCIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTcxCittc2dpZCAiUmVzZXQiCittc2dzdHIgIlJpcHJpc3RpbmEiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NworbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgorbXNnc3RyICJBdHRpdmEgZG9wbyBsYSBjcmVhemlvbmUiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzEKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKK21zZ3N0ciAiU2NlZ2xpZXJlIHVuIGR1cGxpY2F0byBsb2NhbGUgZGkgcmFtbyByZW1vdG8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCittc2dzdHIgIiIKKyJJbCBkdXBsaWNhdG8gbG9jYWxlIGRlbCByYW1vIHJlbW90byAlcyBub24gw6ggdW4gcmFtbyBuZWxsJ2FyY2hpdmlvIHJlbW90by4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTMgbGliL2JyYW5jaF9yZW5hbWUudGNsOjg2Cittc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiSW5zZXJpcmUgdW4gbm9tZSBwZXIgaWwgcmFtby4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgorbXNnc3RyICInJXMnIG5vbiDDqCB1dGlsaXp6YWJpbGUgY29tZSBub21lIGRpIHJhbW8uIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTUKK21zZ2lkICJEZWxldGUgQnJhbmNoIgorbXNnc3RyICJFbGltaW5hIHJhbW8iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgIkVsaW1pbmEgcmFtbyBsb2NhbGUiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNworbXNnaWQgIkxvY2FsIEJyYW5jaGVzIgorbXNnc3RyICJSYW1pIGxvY2FsaSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUyCittc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCittc2dzdHIgIkNhbmNlbGxhIHNvbG8gc2UgZnVzbyBjb24gdW4gYWx0cm8gcmFtbyIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICJTZW1wcmUgKG5vbiB2ZXJpZmljYXJlIGxlIGZ1c2lvbmkpIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgorbXNnc3RyICJJIHJhbWkgc2VndWVudGkgbm9uIHNvbm8gc3RhdGkgZnVzaSBjb21wbGV0YW1lbnRlIGluICVzOiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNworbXNnaWQgIiIKKyJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgorIlxuIgorIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisiUmlwcmlzdGluYXJlIHJhbWkgY2FuY2VsbGF0aSDDqCBkaWZmaWNpbGUuXG4iCisiXG4iCisiQ2FuY2VsbGFyZSBpIHJhbWkgc2VsZXppb25hdGk/IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBjYW5jZWxsYXJlIGkgcmFtaTpcbiIKKyIlcyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMgorbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIlJpbm9taW5hIHJhbW8iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgorbXNnaWQgIlJlbmFtZSIKK21zZ3N0ciAiUmlub21pbmEiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozNgorbXNnaWQgIkJyYW5jaDoiCittc2dzdHIgIlJhbW86IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzkKK21zZ2lkICJOZXcgTmFtZToiCittc2dzdHIgIk51b3ZvIE5vbWU6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NzUKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCittc2dzdHIgIlNjZWdsaWVyZSB1biByYW1vIGRhIHJpbm9taW5hcmUuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIklsIHJhbW8gJyVzJyBlc2lzdGUgZ2nDoC4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgorbXNnc3RyICJJbXBvc3NpYmlsZSByaW5vbWluYXJlICclcycuIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTcKK21zZ2lkICJTdGFydGluZy4uLiIKK21zZ3N0ciAiQXZ2aW8gaW4gY29yc28uLi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNgorbXNnaWQgIkZpbGUgQnJvd3NlciIKK21zZ3N0ciAiRmlsZSBicm93c2VyIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTI2IGxpYi9icm93c2VyLnRjbDoxNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nICVzLi4uIgorbXNnc3RyICJDYXJpY2FtZW50byAlcy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE4NworbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJbRGlyZWN0b3J5IHN1cGVyaW9yZV0iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNjcgbGliL2Jyb3dzZXIudGNsOjI3MworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCittc2dzdHIgIkVzcGxvcmEgaSBmaWxlIGRlbCByYW1vIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4Cittc2dpZCAiQnJvd3NlIgorbXNnc3RyICJFc3Bsb3JhIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAiUmVjdXBlcm8gJXMgZGEgJXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICJlcnJvcmUgZ3JhdmU6IGltcG9zc2liaWxlIHJpc29sdmVyZSAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKKyM6IGxpYi9zc2hrZXkudGNsOjUzCittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkNoaXVkaSIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIklsIHJhbW8gJyVzJyBub24gZXNpc3RlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjb25maWd1cmFyZSBnaXQtcHVsbCBzZW1wbGlmaWNhdG8gcGVyICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKKyJcbiIKKyJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgorIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgorbXNnc3RyICIiCisiSWwgcmFtbyAnJXMnIGVzaXN0ZSBnacOgLlxuIgorIlxuIgorIk5vbiBwdcOyIGVmZmV0dHVhcmUgdW4gJ2Zhc3QtZm9yd2FyZCcgYSAlcy5cbiIKKyJFJyBuZWNlc3NhcmlhIHVuYSBmdXNpb25lLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJMYSBzdHJhdGVnaWEgZGkgZnVzaW9uZSAnJXMnIG5vbiDDqCBzdXBwb3J0YXRhLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhZ2dpb3JuYXJlICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAorbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKK21zZ3N0ciAiIgorIkwnYXJlYSBkaSBwcmVwYXJhemlvbmUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUgKGluZGljZSkgw6ggZ2nDoCBibG9jY2F0YS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJMJ3VsdGltbyBzdGF0byBhbmFsaXp6YXRvIG5vbiBjb3JyaXNwb25kZSBhbGxvIHN0YXRvIGRlbGwnYXJjaGl2aW8uXG4iCisiXG4iCisiVW4gYWx0cm8gcHJvZ3JhbW1hIEdpdCBoYSBtb2RpZmljYXRvIHF1ZXN0byBhcmNoaXZpbyBkYWxsJ3VsdGltYSBhbmFsaXNpLiAiCisiQmlzb2duYSBlZmZldHR1YXJlIHVuYSBudW92YSBhbmFsaXNpIHByaW1hIGRpIHBvdGVyIGNhbWJpYXJlIGlsIHJhbW8gIgorImF0dHVhbGUuXG4iCisiXG4iCisiTGEgbnVvdmEgYW5hbGlzaSBjb21pbmNlcsOgIG9yYS5cbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgorbXNnc3RyICJBZ2dpb3JuYW1lbnRvIGRlbGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gYSAnJXMnIGluIGNvcnNvLi4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgorbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgorbXNnc3RyICJmaWxlIHByZXNlbnRpIG5lbGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKK21zZ3N0ciAiQXR0aXZhemlvbmUgZGkgJyVzJyBmYWxsaXRhIChyaWNoaWVzdGEgdW5hIGZ1c2lvbmUgYSBsaXZlbGxvIGZpbGUpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKK21zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKK21zZ3N0ciAiRScgcmljaGllc3RhIHVuYSBmdXNpb25lIGEgbGl2ZWxsbyBmaWxlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiU2kgcmltYXJyw6Agc3VsIHJhbW8gJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUyCittc2dpZCAiIgorIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgIgorIkNoZWNrb3V0Jy4iCittc2dzdHIgIiIKKyJOb24gc2kgw6ggcGnDuSBzdSB1biByYW1vIGxvY2FsZVxuIgorIlxuIgorIlNlIHNpIHZ1b2xlIHJpbWFuZXJlIHN1IHVuIHJhbW8sIGNyZWFybmUgdW5vIG9yYSBhIHBhcnRpcmUgZGEgJ1F1ZXN0YSAiCisicmV2aXNpb25lIGF0dGl2YSBzdGFjY2F0YScuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgorbXNnc3RyICJBdHRpdmF6aW9uZSBkaSAnJXMnIGNvbXBsZXRhdGEuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0dGluZyAnJXMnIHRvICclcycgd2lsbCBsb3NlIHRoZSBmb2xsb3dpbmcgY29tbWl0czoiCittc2dzdHIgIiIKKyJSaXByaXN0aW5hcmUgJyVzJyBhICclcycgY29tcG9ydGVyw6AgbGEgcGVyZGl0YSBkZWxsZSBzZWd1ZW50aSByZXZpc2lvbmk6IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU1NworbXNnaWQgIlJlY292ZXJpbmcgbG9zdCBjb21taXRzIG1heSBub3QgYmUgZWFzeS4iCittc2dzdHIgIlJpY29tcG9ycmUgbGUgcmV2aXNpb25pIHBlcmR1dGUgcG90cmViYmUgbm9uIGVzc2VyZSBzZW1wbGljZS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJyVzJz8iCittc2dzdHIgIlJpcHJpc3RpbmFyZSAnJXMnPyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjcgbGliL21lcmdlLnRjbDoxNjQgbGliL3Rvb2xzX2RsZy50Y2w6MzQzCittc2dpZCAiVmlzdWFsaXplIgorbXNnc3RyICJWaXN1YWxpenphIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgorIlxuIgorIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCAiCisieW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuXG4iCisiXG4iCisiVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBwcmVwYXJhcmUgaWwgcmFtbyBhdHR1YWxlLlxuIgorIlxuIgorIlF1ZXN0YSBkaXJlY3RvcnkgZGkgbGF2b3JvIMOoIHN0YXRhIGNvbnZlcnRpdGEgc29sbyBwYXJ6aWFsbWVudGUuIEkgZmlsZSBzb25vICIKKyJzdGF0aSBhZ2dpb3JuYXRpIGNvcnJldHRhbWVudGUsIG1hIGwnYWdnaW9ybmFtZW50byBkaSB1biBmaWxlIGRpIEdpdCBoYSAiCisicHJvZG90dG8gZGVnbGkgZXJyb3JpLlxuIgorIlxuIgorIlF1ZXN0byBub24gc2FyZWJiZSBkb3Z1dG8gc3VjY2VkZXJlLiAgJXMgb3JhIHRlcm1pbmVyw6Agc2VuemEgYWx0cmUgYXppb25pLiIKKworIzogbGliL2Nob29zZV9mb250LnRjbDozOQorbXNnaWQgIlNlbGVjdCIKK21zZ3N0ciAiU2VsZXppb25hIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCittc2dpZCAiRm9udCBGYW1pbHkiCittc2dzdHIgIkZhbWlnbGlhIGRpIGNhcmF0dGVyaSIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo3NAorbXNnaWQgIkZvbnQgU2l6ZSIKK21zZ3N0ciAiRGltZW5zaW9uZSBjYXJhdHRlcmkiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTEKK21zZ2lkICJGb250IEV4YW1wbGUiCittc2dzdHIgIkVzZW1waW8gY2FyYXR0ZXJpIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworbXNnaWQgIiIKKyJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKKyJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorbXNnc3RyICIiCisiUXVlc3RvIMOoIHVuIHRlc3RvIGQnZXNlbXBpby5cbiIKKyJTZSB0aSBwaWFjZSBxdWVzdG8gdGVzdG8sIHNjZWdsaSBxdWVzdG8gY2FyYXR0ZXJlLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyOAorbXNnaWQgIkdpdCBHdWkiCittc2dzdHIgIkdpdCBHdWkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODYKK21zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCittc2dzdHIgIkNyZWEgbnVvdm8gYXJjaGl2aW8iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMKK21zZ2lkICJOZXcuLi4iCittc2dzdHIgIk51b3ZvLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MQorbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIkNsb25hIGFyY2hpdmlvIGVzaXN0ZW50ZSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDYKK21zZ2lkICJDbG9uZS4uLiIKK21zZ3N0ciAiQ2xvbmEuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNgorbXNnaWQgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiQXByaSBhcmNoaXZpbyBlc2lzdGVudGUiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE5Cittc2dpZCAiT3Blbi4uLiIKK21zZ3N0ciAiQXByaS4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKK21zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJBcmNoaXZpIHJlY2VudGkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTM4Cittc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCittc2dzdHIgIkFwcmkgYXJjaGl2aW8gcmVjZW50ZToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzA2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzEzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIkltcG9zc2liaWxlIGNyZWFyZSBsJ2FyY2hpdmlvICVzOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTEKK21zZ2lkICJEaXJlY3Rvcnk6IgorbXNnc3RyICJEaXJlY3Rvcnk6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1MAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUyCittc2dpZCAiR2l0IFJlcG9zaXRvcnkiCittc2dzdHIgIkFyY2hpdmlvIEdpdCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJMYSBkaXJlY3RvcnkgJXMgZXNpc3RlIGdpw6AuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ1MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJJbCBmaWxlICVzIGVzaXN0ZSBnacOgLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjYKK21zZ2lkICJDbG9uZSIKK21zZ3N0ciAiQ2xvbmEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc5Cittc2dpZCAiU291cmNlIExvY2F0aW9uOiIKK21zZ3N0ciAiUG9zaXppb25lIHNvcmdlbnRlOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTAKK21zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKK21zZ3N0ciAiRGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCittc2dpZCAiQ2xvbmUgVHlwZToiCittc2dzdHIgIlRpcG8gZGkgY2xvbmU6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOAorbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKK21zZ3N0ciAiU3RhbmRhcmQgKHZlbG9jZSwgc2VtaS1yaWRvbmRhbnRlLCBjb24gaGFyZGxpbmspIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxNAorbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKK21zZ3N0ciAiQ29waWEgY29tcGxldGEgKHBpw7kgbGVudG8sIGJhY2t1cCByaWRvbmRhbnRlKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjAKK21zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKK21zZ3N0ciAiU2hhcmVkIChpbCBwacO5IHZlbG9jZSwgbm9uIHJhY2NvbWFuZGF0bywgbmVzc3VuIGJhY2t1cCkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTU2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjAzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDU4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiJXMgbm9uIMOoIHVuIGFyY2hpdmlvIEdpdC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCittc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJTdGFuZGFyZCDDqCBkaXNwb25pYmlsZSBzb2xvIHBlciBhcmNoaXZpIGxvY2FsaS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk2Cittc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiU2hhcmVkIMOoIGRpc3BvbmliaWxlIHNvbG8gcGVyIGFyY2hpdmkgbG9jYWxpLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIklsIGZpbGUvZGlyZWN0b3J5ICVzIGVzaXN0ZSBnacOgLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY29uZmlndXJhcmUgb3JpZ2luIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIkNhbGNvbG8gb2dnZXR0aSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDEKK21zZ2lkICJidWNrZXRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBjb3BpYXJlIG9nZ2V0dGkvaW5mby9hbHRlcm5hdGU6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCittc2dzdHIgIk5pZW50ZSBkYSBjbG9uYXJlIGRhICVzLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI5Cittc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgorbXNnc3RyICJJbCByYW1vICdtYXN0ZXInIG5vbiDDqCBzdGF0byBpbml6aWFsaXp6YXRvLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTYKK21zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgorbXNnc3RyICJJbXBvc3NpYmlsZSB1dGlsaXp6YXJlIGdsaSBoYXJkbGluay4gU2kgcmljb3JyZXLDoCBhbGxhIGNvcGlhLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGZyb20gJXMiCittc2dzdHIgIkNsb25hemlvbmUgZGEgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU5Cittc2dpZCAiQ29weWluZyBvYmplY3RzIgorbXNnc3RyICJDb3BpYSBkZWdsaSBvZ2dldHRpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAorbXNnaWQgIktpQiIKK21zZ3N0ciAiS2lCIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCittc2dzdHIgIkltcG9zc2liaWxlIGNvcGlhcmUgb2dnZXR0bzogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk0Cittc2dpZCAiTGlua2luZyBvYmplY3RzIgorbXNnc3RyICJDb2xsZWdhbWVudG8gb2dnZXR0aSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTUKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICJvZ2dldHRpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgorbXNnc3RyICJIYXJkbGluayBpbXBvc3NpYmlsZSBzdWxsJ29nZ2V0dG86ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg1OAorbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSByZWN1cGVyYXJlIHJhbWkgZSBvZ2dldHRpLiBDb250cm9sbGFyZSBpIGRldHRhZ2xpIGZvcm5pdGkgZGFsbGEgIgorImNvbnNvbGUuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2OQorbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIHJlY3VwZXJhcmUgbGUgZXRpY2hldHRlLiBDb250cm9sbGFyZSBpIGRldHRhZ2xpIGZvcm5pdGkgZGFsbGEgIgorImNvbnNvbGUuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5MworbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBIRUFELiBDb250cm9sbGFyZSBpIGRldHRhZ2xpIGZvcm5pdGkgZGFsbGEgY29uc29sZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCittc2dzdHIgIkltcG9zc2liaWxlIHJpcHVsaXJlICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAorbXNnaWQgIkNsb25lIGZhaWxlZC4iCittc2dzdHIgIkNsb25hemlvbmUgbm9uIHJpdXNjaXRhLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTUKK21zZ2lkICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iCittc2dzdHIgIk5vbiDDqCBzdGF0byB0cm92YXRvIHVuIHJhbW8gcHJlZGVmaW5pdG8uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmlzb2x2ZXJlICVzIGNvbWUgdW5hIHJldmlzaW9uZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Cittc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIkNyZWF6aW9uZSBkaXJlY3RvcnkgZGkgbGF2b3JvIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOSBsaWIvaW5kZXgudGNsOjY3IGxpYi9pbmRleC50Y2w6MTMwCisjOiBsaWIvaW5kZXgudGNsOjE5OAorbXNnaWQgImZpbGVzIgorbXNnc3RyICJmaWxlIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2OAorbXNnaWQgIkluaXRpYWwgZmlsZSBjaGVja291dCBmYWlsZWQuIgorbXNnc3RyICJBdHRpdmF6aW9uZSBpbml6aWFsZSBub24gcml1c2NpdGEuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKK21zZ2lkICJPcGVuIgorbXNnc3RyICJBcHJpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjEKK21zZ2lkICJSZXBvc2l0b3J5OiIKK21zZ3N0ciAiQXJjaGl2aW86IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgYWNjZWRlcmUgYWxsJ2FyY2hpdmlvICVzOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzCittc2dpZCAiVGhpcyBEZXRhY2hlZCBDaGVja291dCIKK21zZ3N0ciAiUXVlc3RhIHJldmlzaW9uZSBhdHRpdmEgc3RhY2NhdGEiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo2MAorbXNnaWQgIlJldmlzaW9uIEV4cHJlc3Npb246IgorbXNnc3RyICJFc3ByZXNzaW9uZSBkaSByZXZpc2lvbmU6IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzQKK21zZ2lkICJMb2NhbCBCcmFuY2giCittc2dzdHIgIlJhbW8gbG9jYWxlIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzkKK21zZ2lkICJUcmFja2luZyBCcmFuY2giCittc2dzdHIgIkR1cGxpY2F0byBsb2NhbGUgZGkgcmFtbyByZW1vdG8iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTM4Cittc2dpZCAiVGFnIgorbXNnc3RyICJFdGljaGV0dGEiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAiUmV2aXNpb25lIG5vbiB2YWxpZGE6ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Cittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICJOZXNzdW5hIHJldmlzaW9uZSBzZWxlemlvbmF0YS4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDYKK21zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKK21zZ3N0ciAiTCdlc3ByZXNzaW9uZSBkaSByZXZpc2lvbmUgw6ggdnVvdGEuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMxCittc2dpZCAiVXBkYXRlZCIKK21zZ3N0ciAiQWdnaW9ybmF0byIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjU1OQorbXNnaWQgIlVSTCIKK21zZ3N0ciAiVVJMIgorCisjOiBsaWIvY29tbWl0LnRjbDo5Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCisiXG4iCisiWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKKyJ0byBhbWVuZC5cbiIKK21zZ3N0ciAiIgorIk5vbiBjJ8OoIG5pZW50ZSBkYSBjb3JyZWdnZXJlLlxuIgorIlxuIgorIlN0YWkgcGVyIGNyZWFyZSBsYSByZXZpc2lvbmUgaW5pemlhbGUuIE5vbiBlc2lzdGUgdW5hIHJldmlzaW9uZSBwcmVjZWRlbnRlICIKKyJkYSBjb3JyZWdnZXJlLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxOAorbXNnaWQgIiIKKyJDYW5ub3QgYW1lbmQgd2hpbGUgbWVyZ2luZy5cbiIKKyJcbiIKKyJZb3UgYXJlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgdGhhdCBoYXMgbm90IGJlZW4gZnVsbHkgIgorImNvbXBsZXRlZC4gIFlvdSBjYW5ub3QgYW1lbmQgdGhlIHByaW9yIGNvbW1pdCB1bmxlc3MgeW91IGZpcnN0IGFib3J0IHRoZSAiCisiY3VycmVudCBtZXJnZSBhY3Rpdml0eS5cbiIKK21zZ3N0ciAiIgorIk5vbiDDqCBwb3NzaWJpbGUgZWZmZXR0dWFyZSB1bmEgY29ycmV6aW9uZSBkdXJhbnRlIHVuYSBmdXNpb25lLlxuIgorIlxuIgorIkluIHF1ZXN0byBtb21lbnRvIHNpIHN0YSBlZmZldHR1YW5kbyB1bmEgZnVzaW9uZSBjaGUgbm9uIMOoIHN0YXRhIGRlbCB0dXR0byAiCisiY29tcGxldGF0YS4gTm9uIHB1b2kgY29ycmVnZ2VyZSBsYSByZXZpc2lvbmUgcHJlY2VkZW50ZSBhIG1lbm8gY2hlIHByaW1hIHR1ICIKKyJub24gaW50ZXJyb21wYSBsJ29wZXJhemlvbmUgZGkgZnVzaW9uZSBpbiBjb3Jzby5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6NDgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGlsIGNhcmljYW1lbnRvIGRlaSBkYXRpIGRlbGxhIHJldmlzaW9uZSBkYSBjb3JyZWdnZXJlOiIKKworIzogbGliL2NvbW1pdC50Y2w6NzUKK21zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBvdHRlbmVyZSBsYSB0dWEgaWRlbnRpdMOgOiIKKworIzogbGliL2NvbW1pdC50Y2w6ODAKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICJHSVRfQ09NTUlUVEVSX0lERU5UIG5vbiB2YWxpZGE6IgorCisjOiBsaWIvY29tbWl0LnRjbDoxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKK21zZ3N0ciAiYXR0ZW56aW9uZTogVGNsIG5vbiBzdXBwb3J0YSBsYSBjb2RpZmljYSAnJXMnLiIKKworIzogbGliL2NvbW1pdC50Y2w6MTQ5Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIkwndWx0aW1vIHN0YXRvIGFuYWxpenphdG8gbm9uIGNvcnJpc3BvbmRlIGFsbG8gc3RhdG8gZGVsbCdhcmNoaXZpby5cbiIKKyJcbiIKKyJVbiBhbHRybyBwcm9ncmFtbWEgR2l0IGhhIG1vZGlmaWNhdG8gcXVlc3RvIGFyY2hpdmlvIGRhbGwndWx0aW1hIGFuYWxpc2kuICIKKyJCaXNvZ25hIGVmZmV0dHVhcmUgdW5hIG51b3ZhIGFuYWxpc2kgcHJpbWEgZGkgcG90ZXIgY3JlYXJlIHVuYSBudW92YSAiCisicmV2aXNpb25lLlxuIgorIlxuIgorIkxhIG51b3ZhIGFuYWxpc2kgY29taW5jZXLDoCBvcmEuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgorIlxuIgorIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgorImJlZm9yZSBjb21taXR0aW5nLlxuIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSBjcmVhcmUgdW5hIHJldmlzaW9uZSBjb24gZmlsZSBub24gc290dG9wb3N0aSBhIGZ1c2lvbmUuXG4iCisiXG4iCisiSWwgZmlsZSAlcyBwcmVzZW50YSBkZWkgY29uZmxpdHRpLiBEZXZpIHJpc29sdmVybGkgZSBwcmVwYXJhcmUgaWwgZmlsZSBwZXIgIgorImNyZWFyZSB1bmEgbnVvdmEgcmV2aXNpb25lIHByaW1hIGRpIGVmZmV0dHVhcmUgcXVlc3RhIGF6aW9uZS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorbXNnc3RyICIiCisiU3RhdG8gZGkgZmlsZSAlcyBzY29ub3NjaXV0by5cbiIKKyJcbiIKKyJRdWVzdG8gcHJvZ3JhbW1hIG5vbiBwdcOyIGNyZWFyZSB1bmEgcmV2aXNpb25lIGNvbnRlbmVudGUgaWwgZmlsZSAlcy5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTg4Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCittc2dzdHIgIiIKKyJOZXNzdW5hIG1vZGlmaWNhIHBlciBsYSBudW92YSByZXZpc2lvbmUuXG4iCisiXG4iCisiRGV2aSBwcmVwYXJhcmUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUgYWxtZW5vIDEgZmlsZSBwcmltYSBkaSBlZmZldHR1YXJlICIKKyJxdWVzdGEgb3BlcmF6aW9uZS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjAzCittc2dpZCAiIgorIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgorIlxuIgorIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKKyItIFNlY29uZCBsaW5lOiBCbGFua1xuIgorIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKK21zZ3N0ciAiIgorIkJpc29nbmEgZm9ybmlyZSB1biBtZXNzYWdnaW8gZGkgcmV2aXNpb25lLlxuIgorIlxuIgorIlVuIGJ1b24gbWVzc2FnZ2lvIGRpIHJldmlzaW9uZSBoYSBpbCBzZWd1ZW50ZSBmb3JtYXRvOlxuIgorIlxuIgorIi0gUHJpbWEgbGluZWE6IGRlc2NyaXZpIGluIHVuYSBmcmFzZSBjacOyIGNoZSBoYWkgZmF0dG8uXG4iCisiLSBTZWNvbmRhIGxpbmVhOiB2dW90YS5cbiIKKyItIFRlcnphIGxpbmVhOiBzcGllZ2EgYSBjb3NhIHNlcnZlIGxhIHR1YSBtb2RpZmljYS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjM0Cittc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCittc2dzdHIgIkF2dmlvIHByZS1jb21taXQgaG9vay4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjQ5Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCittc2dzdHIgIlJldmlzaW9uZSByaWZpdXRhdGEgZGFsIHByZS1jb21taXQgaG9vay4iCisKKyM6IGxpYi9jb21taXQudGNsOjI3MgorbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICJBdnZpbyBjb21taXQtbXNnIGhvb2suLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI4NworbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgorbXNnc3RyICJSZXZpc2lvbmUgcmlmaXV0YXRhIGRhbCBjb21taXQtbXNnIGhvb2suIgorCisjOiBsaWIvY29tbWl0LnRjbDozMDAKK21zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCittc2dzdHIgIkFyY2hpdmlhemlvbmUgbW9kaWZpY2hlLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMTYKK21zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCittc2dzdHIgIndyaXRlLXRyZWUgbm9uIHJpdXNjaXRvOiIKKworIzogbGliL2NvbW1pdC50Y2w6MzE3IGxpYi9jb21taXQudGNsOjM2MSBsaWIvY29tbWl0LnRjbDozODIKK21zZ2lkICJDb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUuIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgorbXNnc3RyICJMYSByZXZpc2lvbmUgJXMgc2VtYnJhIGVzc2VyZSBkYW5uZWdnaWF0YSIKKworIzogbGliL2NvbW1pdC50Y2w6MzM5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiTmVzc3VuYSBtb2RpZmljYSBwZXIgbGEgbnVvdmEgcmV2aXNpb25lLlxuIgorIlxuIgorIlF1ZXN0YSByZXZpc2lvbmUgbm9uIG1vZGlmaWNhIGFsY3VuIGZpbGUgZSBub24gZWZmZXR0dWEgYWxjdW5hIGZ1c2lvbmUuXG4iCisiXG4iCisiU2kgcHJvY2VkZXLDoCBzdWJpdG8gYWQgdW5hIG51b3ZhIGFuYWxpc2kuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjM0NgorbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKK21zZ3N0ciAiTmVzc3VuYSBtb2RpZmljYSBwZXIgbGEgbnVvdmEgcmV2aXNpb25lLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzYwCittc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAiY29tbWl0LXRyZWUgbm9uIHJpdXNjaXRvOiIKKworIzogbGliL2NvbW1pdC50Y2w6MzgxCittc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgorbXNnc3RyICJ1cGRhdGUtcmVmIG5vbiByaXVzY2l0bzoiCisKKyM6IGxpYi9jb21taXQudGNsOjQ2OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKK21zZ3N0ciAiQ3JlYXRhIHJldmlzaW9uZSAlczogJXMiCisKKyM6IGxpYi9jb25zb2xlLnRjbDo1OQorbXNnaWQgIldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIkVsYWJvcmF6aW9uZSBpbiBjb3Jzby4uLiBhdHRlbmRlcmUuLi4iCisKKyM6IGxpYi9jb25zb2xlLnRjbDoxODYKK21zZ2lkICJTdWNjZXNzIgorbXNnc3RyICJTdWNjZXNzbyIKKworIzogbGliL2NvbnNvbGUudGNsOjIwMAorbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKK21zZ3N0ciAiRXJyb3JlOiBjb21hbmRvIG5vbiByaXVzY2l0byIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0MworbXNnaWQgIk51bWJlciBvZiBsb29zZSBvYmplY3RzIgorbXNnc3RyICJOdW1lcm8gZGkgb2dnZXR0aSBzbGVnYXRpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ0Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCittc2dzdHIgIlNwYXppbyBzdSBkaXNjbyB1dGlsaXp6YXRvIGRhIG9nZ2V0dGkgc2xlZ2F0aSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NQorbXNnaWQgIk51bWJlciBvZiBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiTnVtZXJvIGRpIG9nZ2V0dGkgaW1wYWNjaGV0dGF0aSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NgorbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKK21zZ3N0ciAiTnVtZXJvIGRpIHBhY2NoZXR0aSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NworbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiU3BhemlvIHN1IGRpc2NvIHV0aWxpenphdG8gZGEgb2dnZXR0aSBpbXBhY2NoZXR0YXRpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ4Cittc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKK21zZ3N0ciAiT2dnZXR0aSBpbXBhY2NoZXR0YXRpIGNoZSBhdHRlbmRvbm8gbGEgcG90YXR1cmEiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDkKK21zZ2lkICJHYXJiYWdlIGZpbGVzIgorbXNnc3RyICJGaWxlIGludXRpbGkiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKK21zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJDb21wcmVzc2lvbmUgZGVsbCdhcmNoaXZpbyBpbiBjb3JzbyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo4MworbXNnaWQgIlZlcmlmeWluZyB0aGUgb2JqZWN0IGRhdGFiYXNlIHdpdGggZnNjay1vYmplY3RzIgorbXNnc3RyICJWZXJpZmljYSBkZWxsJ2FyY2hpdmlvIGNvbiBmc2NrLW9iamVjdHMgaW4gY29yc28iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2UuXG4iCisiXG4iCisiQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCittc2dzdHIgIiIKKyJRdWVzdG8gYXJjaGl2aW8gYXR0dWFsbWVudGUgaGEgY2lyY2EgJWkgb2dnZXR0aSBzbGVnYXRpLlxuIgorIlxuIgorIlBlciBtYW50ZW5lcmUgYnVvbmUgcHJlc3Rhemlvbmkgc2kgcmFjY29tYW5kYSBkaSBjb21wcmltZXJlIGwnYXJjaGl2aW8uXG4iCisiXG4iCisiQ29tcHJpbWVyZSBsJ2FyY2hpdmlvIG9yYT8iCisKKyM6IGxpYi9kYXRlLnRjbDoyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZGF0ZSBmcm9tIEdpdDogJXMiCittc2dzdHIgIkdpdCBoYSByZXN0aXR1aXRvIHVuYSBkYXRhIG5vbiB2YWxpZGE6ICVzIgorCisjOiBsaWIvZGlmZi50Y2w6NjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiJXMgaGFzIG5vIGNoYW5nZXMuXG4iCisiXG4iCisiVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgorInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCisidGhlIHNhbWUgc3RhdGUuIgorbXNnc3RyICIiCisiTm9uIHNvbm8gc3RhdGUgdHJvdmF0ZSBkaWZmZXJlbnplLlxuIgorIlxuIgorIiVzIG5vbiBoYSBtb2RpZmljaGUuXG4iCisiXG4iCisiTGEgZGF0YSBkaSBtb2RpZmljYSBkaSBxdWVzdG8gZmlsZSDDqCBzdGF0YSBjYW1iaWF0YSBkYSB1bidhbHRyYSAiCisiYXBwbGljYXppb25lLCBtYSBpbCBjb250ZW51dG8gZGVsIGZpbGUgw6ggcmltYXN0byBpbnZhcmlhdG8uXG4iCisiXG4iCisiU2kgcHJvY2VkZXLDoCBhdXRvbWF0aWNhbWVudGUgYWQgdW5hIG51b3ZhIGFuYWxpc2kgcGVyIHRyb3ZhcmUgYWx0cmkgZmlsZSBjaGUgIgorInBvdHJlYmJlcm8gYXZlcmUgbG8gc3Rlc3NvIHN0YXRvLiIKKworIzogbGliL2RpZmYudGNsOjEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAiQ2FyaWNhbWVudG8gZGVsbGUgZGlmZmVyZW56ZSBkaSAlcy4uLiIKKworIzogbGliL2RpZmYudGNsOjEyNQorbXNnaWQgIiIKKyJMT0NBTDogZGVsZXRlZFxuIgorIlJFTU9URTpcbiIKK21zZ3N0ciAiIgorIkxPQ0FMRTogY2FuY2VsbGF0b1xuIgorIlJFTU9UTzpcbiIKKworIzogbGliL2RpZmYudGNsOjEzMAorbXNnaWQgIiIKKyJSRU1PVEU6IGRlbGV0ZWRcbiIKKyJMT0NBTDpcbiIKK21zZ3N0ciAiIgorIlJFTU9UTzogY2FuY2VsbGF0b1xuIgorIkxPQ0FMRTpcbiIKKworIzogbGliL2RpZmYudGNsOjEzNworbXNnaWQgIkxPQ0FMOlxuIgorbXNnc3RyICJMT0NBTEU6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxNDAKK21zZ2lkICJSRU1PVEU6XG4iCittc2dzdHIgIlJFTU9UTzpcbiIKKworIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCittc2dzdHIgIkltcG9zc2liaWxlIHZpc3VhbGl6emFyZSAlcyIKKworIzogbGliL2RpZmYudGNsOjIwMworbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCittc2dzdHIgIkVycm9yZSBuZWwgY2FyaWNhbWVudG8gZGVsIGZpbGU6IgorCisjOiBsaWIvZGlmZi50Y2w6MjEwCittc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgorbXNnc3RyICJBcmNoaXZpbyBHaXQgKHNvdHRvcHJvZ2V0dG8pIgorCisjOiBsaWIvZGlmZi50Y2w6MjIyCittc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgorbXNnc3RyICIqIEZpbGUgYmluYXJpbyAoaWwgY29udGVudXRvIG5vbiBzYXLDoCBtb3N0cmF0bykuIgorCisjOiBsaWIvZGlmZi50Y2w6MjI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCisiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCittc2dzdHIgIiIKKyIqIElsIGZpbGUgbm9uIHRyYWNjaWF0byDDqCBkaSAlZCBieXRlLlxuIgorIiogU2FyYW5ubyB2aXN1YWxpenphdGkgc29sbyBpIHByaW1pICVkIGJ5dGUuXG4iCisKKyM6IGxpYi9kaWZmLnRjbDoyMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCisiKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgorbXNnc3RyICIiCisiXG4iCisiKiAlcyBub24gdmlzdWFsaXp6YSBjb21wbGV0YW1lbnRlIHF1ZXN0byBmaWxlIG5vbiB0cmFjY2lhdG8uXG4iCisiKiBQZXIgdmlzdWFsaXp6YXJlIGlsIGZpbGUgY29tcGxldG8sIHVzYXJlIHVuIHByb2dyYW1tYSBlc3Rlcm5vLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6NDgyCittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkltcG9zc2liaWxlIHJpbXVvdmVyZSBsYSBzZXppb25lIHNjZWx0YSBkYWxsYSBudW92YSByZXZpc2lvbmUuIgorCisjOiBsaWIvZGlmZi50Y2w6NDg5Cittc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBwcmVwYXJhcmUgbGEgc2V6aW9uZSBzY2VsdGEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUuIgorCisjOiBsaWIvZGlmZi50Y2w6NTY4Cittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIkltcG9zc2liaWxlIHJpbXVvdmVyZSBsYSByaWdhIHNjZWx0YSBkYWxsYSBudW92YSByZXZpc2lvbmUuIgorCisjOiBsaWIvZGlmZi50Y2w6NTc2Cittc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICJJbXBvc3NpYmlsZSBwcmVwYXJhcmUgbGEgcmlnYSBzY2VsdGEgcGVyIHVuYSBudW92YSByZXZpc2lvbmUuIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0MworbXNnaWQgIkRlZmF1bHQiCittc2dzdHIgIlByZWRlZmluaXRvIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN5c3RlbSAoJXMpIgorbXNnc3RyICJDb2RpZmljYSBkaSBzaXN0ZW1hICglcykiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Cittc2dpZCAiT3RoZXIiCittc2dzdHIgIkFsdHJvIgorCisjOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE0Cittc2dpZCAiZXJyb3IiCittc2dzdHIgImVycm9yZSIKKworIzogbGliL2Vycm9yLnRjbDozNgorbXNnaWQgIndhcm5pbmciCittc2dzdHIgImF0dGVuemlvbmUiCisKKyM6IGxpYi9lcnJvci50Y2w6OTQKK21zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgorbXNnc3RyICIiCisiQmlzb2duYSBjb3JyZWdnZXJlIGdsaSBlcnJvcmkgc3VkZGV0dGkgcHJpbWEgZGkgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUuIgorCisjOiBsaWIvaW5kZXgudGNsOjYKK21zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCittc2dzdHIgIkltcG9zc2liaWxlIHNibG9jY2FyZSBsJ2FjY2Vzc28gYWxsJ2luZGljZSIKKworIzogbGliL2luZGV4LnRjbDoxNQorbXNnaWQgIkluZGV4IEVycm9yIgorbXNnc3RyICJFcnJvcmUgbmVsbCdpbmRpY2UiCisKKyM6IGxpYi9pbmRleC50Y2w6MTcKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCisicmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGFnZ2lvcm5hcmUgbCdpbmRpY2UuIE9yYSBzYXLDoCBhdnZpYXRhIHVuYSBudW92YSBhbmFsaXNpIGNoZSAiCisiYWdnaW9ybmVyw6AgZ2l0LWd1aS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MjgKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiQ29udGludWEiCisKKyM6IGxpYi9pbmRleC50Y2w6MzEKK21zZ2lkICJVbmxvY2sgSW5kZXgiCittc2dzdHIgIlNibG9jY2EgbCdhY2Nlc3NvIGFsbCdpbmRpY2UiCisKKyM6IGxpYi9pbmRleC50Y2w6Mjg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgorbXNnc3RyICIlcyBub24gZmFyw6AgcGFydGUgZGVsbGEgcHJvc3NpbWEgcmV2aXNpb25lIgorCisjOiBsaWIvaW5kZXgudGNsOjMyOAorbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCittc2dzdHIgIlByb250byBwZXIgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUuIgorCisjOiBsaWIvaW5kZXgudGNsOjM0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiQWdnaXVudGEgZGkgJXMgaW4gY29yc28iCisKKyM6IGxpYi9pbmRleC50Y2w6Mzk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgIkFubnVsbGFyZSBsZSBtb2RpZmljaGUgbmVsIGZpbGUgJXM/IgorCisjOiBsaWIvaW5kZXgudGNsOjQwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKK21zZ3N0ciAiQW5udWxsYXJlIGxlIG1vZGlmaWNoZSBpbiBxdWVzdGkgJWkgZmlsZT8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDA4Cittc2dpZCAiQW55IHVuc3RhZ2VkIGNoYW5nZXMgd2lsbCBiZSBwZXJtYW5lbnRseSBsb3N0IGJ5IHRoZSByZXZlcnQuIgorbXNnc3RyICIiCisiVHV0dGUgbGUgbW9kaWZpY2hlIG5vbiBwcmVwYXJhdGUgcGVyIHVuYSBudW92YSByZXZpc2lvbmUgc2FyYW5ubyBwZXJzZSBwZXIgIgorInNlbXByZS4iCisKKyM6IGxpYi9pbmRleC50Y2w6NDExCittc2dpZCAiRG8gTm90aGluZyIKK21zZ3N0ciAiTm9uIGZhcmUgbmllbnRlIgorCisjOiBsaWIvaW5kZXgudGNsOjQyOQorbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKK21zZ3N0ciAiQW5udWxsbyBsZSBtb2RpZmljaGUgbmVpIGZpbGUgc2VsZXppb25hdGkiCisKKyM6IGxpYi9pbmRleC50Y2w6NDMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nICVzIgorbXNnc3RyICJBbm51bGxvIGxlIG1vZGlmaWNoZSBpbiAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMworbXNnaWQgIiIKKyJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIk5vbiBwb3NzbyBlZmZldHR1YXJlIGZ1c2lvbmkgZHVyYW50ZSB1bmEgY29ycmV6aW9uZS5cbiIKKyJcbiIKKyJCaXNvZ25hIGZpbmlyZSBkaSBjb3JyZWdnZXJlIHF1ZXN0YSByZXZpc2lvbmUgcHJpbWEgZGkgaW5pemlhcmUgdW5hICIKKyJxdWFsdW5xdWUgZnVzaW9uZS5cbiIKKworIzogbGliL21lcmdlLnRjbDoyNworbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiTCd1bHRpbW8gc3RhdG8gYW5hbGl6emF0byBub24gY29ycmlzcG9uZGUgYWxsbyBzdGF0byBkZWxsJ2FyY2hpdmlvLlxuIgorIlxuIgorIlVuIGFsdHJvIHByb2dyYW1tYSBHaXQgaGEgbW9kaWZpY2F0byBxdWVzdG8gYXJjaGl2aW8gZGFsbCd1bHRpbWEgYW5hbGlzaS4iCisiQmlzb2duYSBlZmZldHR1YXJlIHVuYSBudW92YSBhbmFsaXNpIHByaW1hIGRpIHBvdGVyIGVmZmV0dHVhcmUgdW5hIGZ1c2lvbmUuXG4iCisiXG4iCisiTGEgbnVvdmEgYW5hbGlzaSBjb21pbmNlcsOgIG9yYS5cbiIKKworIzogbGliL21lcmdlLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy5cbiIKKyJcbiIKKyJZb3UgbXVzdCByZXNvbHZlIHRoZW0sIHN0YWdlIHRoZSBmaWxlLCBhbmQgY29tbWl0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50ICIKKyJtZXJnZS4gIE9ubHkgdGhlbiBjYW4geW91IGJlZ2luIGFub3RoZXIgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJTZWkgbmVsIG1lenpvIGRpIHVuYSBmdXNpb25lIGNvbiBjb25mbGl0dGkuXG4iCisiXG4iCisiSWwgZmlsZSAlcyBoYSBkZWkgY29uZmxpdHRpLlxuIgorIlxuIgorIkJpc29nbmEgcmlzb2x2ZXJlIGkgY29uZmxpdHRpLCBwcmVwYXJhcmUgaWwgZmlsZSBwZXIgdW5hIG51b3ZhIHJldmlzaW9uZSBlZCAiCisiaW5maW5lIGNyZWFybGEgcGVyIGNvbXBsZXRhcmUgbGEgZnVzaW9uZSBhdHR1YWxlLiBTb2xvIGEgcXVlc3RvIHB1bnRvIHBvdHJhaSAiCisiaW5pemlhcmUgdW4nYWx0cmEgZnVzaW9uZS5cbiIKKworIzogbGliL21lcmdlLnRjbDo1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKKyJcbiIKKyJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKKyJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCittc2dzdHIgIiIKKyJTZWkgbmVsIG1lenpvIGRpIHVuYSBtb2RpZmljYS5cbiIKKyJcbiIKKyJJbCBmaWxlICVzIMOoIHN0YXRvIG1vZGlmaWNhdG8uXG4iCisiXG4iCisiQmlzb2duYSBjb21wbGV0YXJlIGxhIGNyZWF6aW9uZSBkZWxsYSByZXZpc2lvbmUgYXR0dWFsZSBwcmltYSBkaSBpbml6aWFyZSAiCisidW5hIGZ1c2lvbmUuIEluIHF1ZXN0byBtb2RvIHNhcsOgIHBpw7kgZmFjaWxlIGludGVycm9tcGVyZSB1bmEgZnVzaW9uZSBub24gIgorInJpdXNjaXRhLCBuZWwgY2FzbyBjZSBuZSBmb3NzZSBiaXNvZ25vLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIG9mICVzIgorbXNnc3RyICIlcyBkaSAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKK21zZ3N0ciAiRnVzaW9uZSBkaSAlcyBlICVzIGluIGNvcnNvLi4uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMQorbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgorbXNnc3RyICJGdXNpb25lIGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvLiIKKworIzogbGliL21lcmdlLnRjbDoxMzMKK21zZ2lkICJNZXJnZSBmYWlsZWQuICBDb25mbGljdCByZXNvbHV0aW9uIGlzIHJlcXVpcmVkLiIKK21zZ3N0ciAiRnVzaW9uZSBub24gcml1c2NpdGEuIEJpc29nbmEgcmlzb2x2ZXJlIGkgY29uZmxpdHRpLiIKKworIzogbGliL21lcmdlLnRjbDoxNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBJbnRvICVzIgorbXNnc3RyICJGdXNpb25lIGluICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjE3NworbXNnaWQgIlJldmlzaW9uIFRvIE1lcmdlIgorbXNnc3RyICJSZXZpc2lvbmUgZGEgZm9uZGVyZSIKKworIzogbGliL21lcmdlLnRjbDoyMTIKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkludGVycnV6aW9uZSBpbXBvc3NpYmlsZSBkdXJhbnRlIHVuYSBjb3JyZXppb25lLlxuIgorIlxuIgorIkJpc29nbmEgZmluaXJlIGRpIGNvcnJlZ2dlcmUgcXVlc3RhIHJldmlzaW9uZS5cbiIKKworIzogbGliL21lcmdlLnRjbDoyMjIKK21zZ2lkICIiCisiQWJvcnQgbWVyZ2U/XG4iCisiXG4iCisiQWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2Ugd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCBhYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZT8iCittc2dzdHIgIiIKKyJJbnRlcnJvbXBlcmUgZnVzaW9uZT9cbiIKKyJcbiIKKyJMJ2ludGVycnV6aW9uZSBkZWxsYSBmdXNpb25lIGF0dHVhbGUgY2F1c2Vyw6AgbGEgcGVyZGl0YSBkaSAqVFVUVEUqIGxlICIKKyJtb2RpZmljaGUgbm9uIGFuY29yYSBwcmVzZW50aSBuZWxsJ2FyY2hpdmlvLlxuIgorIlxuIgorIkNvbnRpbnVhcmUgY29uIGwnaW50ZXJydXppb25lIGRlbGxhIGZ1c2lvbmUgYXR0dWFsZT8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjI4Cittc2dpZCAiIgorIlJlc2V0IGNoYW5nZXM/XG4iCisiXG4iCisiUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorbXNnc3RyICIiCisiUmlwcmlzdGluYXJlIGxhIHJldmlzaW9uZSBhdHR1YWxlIGUgYW5udWxsYXJlIGxlIG1vZGlmaWNoZT9cbiIKKyJcbiIKKyJMJ2FubnVsbGFtZW50byBkZWxsZSBtb2RpZmljaGUgY2F1c2Vyw6AgbGEgcGVyZGl0YSBkaSAqVFVUVEUqIGxlIG1vZGlmaWNoZSAiCisibm9uIGFuY29yYSBwcmVzZW50aSBuZWxsJ2FyY2hpdmlvLlxuIgorIlxuIgorIkNvbnRpbnVhcmUgY29uIGwnYW5udWxsYW1lbnRvIGRlbGxlIG1vZGlmaWNoZSBhdHR1YWxpPyIKKworIzogbGliL21lcmdlLnRjbDoyMzkKK21zZ2lkICJBYm9ydGluZyIKK21zZ3N0ciAiSW50ZXJydXppb25lIgorCisjOiBsaWIvbWVyZ2UudGNsOjIzOQorbXNnaWQgImZpbGVzIHJlc2V0IgorbXNnc3RyICJyaXByaXN0aW5vIGZpbGUiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY3Cittc2dpZCAiQWJvcnQgZmFpbGVkLiIKK21zZ3N0ciAiSW50ZXJydXppb25lIG5vbiByaXVzY2l0YS4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY5Cittc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgorbXNnc3RyICJJbnRlcnJ1emlvbmUgY29tcGxldGF0YS4gUHJvbnRvLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6OAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIGJhc2UgdmVyc2lvbj8iCittc2dzdHIgIkltcG9ycmUgbGEgcmlzb2x1emlvbmUgYWxsYSByZXZpc2lvbmUgY29tdW5lPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6OQorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhpcyBicmFuY2g/IgorbXNnc3RyICJJbXBvcnJlIGxhIHJpc29sdXppb25lIGFsIHJhbW8gYXR0dWFsZT8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKK21zZ3N0ciAiSW1wb3JyZSBsYSByaXNvbHV6aW9uZSBhbGwnYWx0cm8gcmFtbz8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vdGUgdGhhdCB0aGUgZGlmZiBzaG93cyBvbmx5IGNvbmZsaWN0aW5nIGNoYW5nZXMuXG4iCisiXG4iCisiJXMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiIKKyJcbiIKKyJUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdW5kb25lIG9ubHkgYnkgcmVzdGFydGluZyB0aGUgbWVyZ2UuIgorbXNnc3RyICIiCisiU2kgc3Rhbm5vIG1vc3RyYW5kbyBzb2xvIGxlIG1vZGlmaWNoZSBjb24gY29uZmxpdHRpLlxuIgorIlxuIgorIiVzIHNhcsOgIHNvdnJhc2NyaXR0by5cbiIKKyJcbiIKKyJRdWVzdGEgb3BlcmF6aW9uZSBwdcOyIGVzc2VyZSBtb2RpZmljYXRhIHNvbG8gcmljb21pbmNpYW5kbyBsYSBmdXNpb25lLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKK21zZ3N0ciAiIgorIklsIGZpbGUgJXMgc2VtYnJhIGNvbnRlbmVyZSBjb25mbGl0dGkgbm9uIHJpc29sdGksIHByZXBhcmFyZSBwZXIgbGEgcHJvc3NpbWEgIgorInJldmlzaW9uZT8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgorbXNnc3RyICIiCisiTGEgcmlzb2x1emlvbmUgZGVpIGNvbmZsaXR0aSBwZXIgJXMgw6ggcHJlcGFyYXRhIHBlciBsYSBwcm9zc2ltYSByZXZpc2lvbmUiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQorbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKK21zZ3N0ciAiIgorIk5vbiDDqCBwb3NzaWJpbGUgcmlzb2x2ZXJlIGkgY29uZmxpdHRpIHBlciBjYW5jZWxsYXppb25pIG8gbGluayBjb24gdW4gIgorInByb2dyYW1tYSBlc3Rlcm5vIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKK21zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJOb24gZXNpc3RlIHVuIGZpbGUgY29uIGNvbmZsaXR0aS4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdVSSBtZXJnZSB0b29sOiAnJXMnIgorbXNnc3RyICInJXMnIG5vbiDDqCB1bmEgR1VJIHBlciBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICJJbCBwcm9ncmFtbWEgJyVzJyBub24gw6ggc3VwcG9ydGF0byIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzAzCittc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCittc2dzdHIgIkxhIHJpc29sdXppb25lIGRlaSBjb25mbGl0dGkgw6ggZ2nDoCBhdnZpYXRhLCB0ZXJtaW5hcmxhPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJFcnJvcmU6IHJldmlzaW9uZSBub24gdHJvdmF0YTpcbiIKKyIlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCB0aGUgbWVyZ2UgdG9vbDpcbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGF2dmlhcmUgbGEgcmlzb2x1emlvbmUgZGVpIGNvbmZsaXR0aTpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzQ3Cittc2dpZCAiUnVubmluZyBtZXJnZSB0b29sLi4uIgorbXNnc3RyICJBdnZpbyBkZWwgcHJvZ3JhbW1hIHBlciBsYSByaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIGluIGNvcnNvLi4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNzUgbGliL21lcmdldG9vbC50Y2w6MzgzCittc2dpZCAiTWVyZ2UgdG9vbCBmYWlsZWQuIgorbXNnc3RyICJSaXNvbHV6aW9uZSBkZWkgY29uZmxpdHRpIG5vbiByaXVzY2l0YS4iCisKKyM6IGxpYi9vcHRpb24udGNsOjExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiIgorIkxhIGNvZGlmaWNhIGRlaSBjYXJhdHRlcmkgJyVzJyBzcGVjaWZpY2F0YSBwZXIgdHV0dGkgZ2xpIGFyY2hpdmkgbm9uIMOoIHZhbGlkYSIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiIgorIkxhIGNvZGlmaWNhIGRlaSBjYXJhdHRlcmkgJyVzJyBzcGVjaWZpY2F0YSBwZXIgbCdhcmNoaXZpbyBhdHR1YWxlICBub24gw6ggIgorInZhbGlkYSIKKworIzogbGliL29wdGlvbi50Y2w6MTE3Cittc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKK21zZ3N0ciAiUmlwcmlzdGluYSB2YWxvcmkgcHJlZGVmaW5pdGkiCisKKyM6IGxpYi9vcHRpb24udGNsOjEyMQorbXNnaWQgIlNhdmUiCittc2dzdHIgIlNhbHZhIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBSZXBvc2l0b3J5IgorbXNnc3RyICJBcmNoaXZpbyBkaSAlcyIKKworIzogbGliL29wdGlvbi50Y2w6MTMyCittc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKK21zZ3N0ciAiVHV0dGkgZ2xpIGFyY2hpdmkiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzOAorbXNnaWQgIlVzZXIgTmFtZSIKK21zZ3N0ciAiTm9tZSB1dGVudGUiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzOQorbXNnaWQgIkVtYWlsIEFkZHJlc3MiCittc2dzdHIgIkluZGlyaXp6byBFbWFpbCIKKworIzogbGliL29wdGlvbi50Y2w6MTQxCittc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCittc2dzdHIgIlJpZXBpbG9nbyBuZWxsZSByZXZpc2lvbmkgZGkgZnVzaW9uZSIKKworIzogbGliL29wdGlvbi50Y2w6MTQyCittc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgorbXNnc3RyICJQcm9saXNzaXTDoCBkZWxsYSBmdXNpb25lIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDMKK21zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgorbXNnc3RyICJNb3N0cmEgc3RhdGlzdGljaGUgZGVsbGUgZGlmZmVyZW56ZSBkb3BvIGxhIGZ1c2lvbmUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NAorbXNnaWQgIlVzZSBNZXJnZSBUb29sIgorbXNnc3RyICJQcm9ncmFtbWEgZGEgdXRpbGl6emFyZSBwZXIgbGEgcmlzb2x1emlvbmUgZGVpIGNvbmZsaXR0aSIKKworIzogbGliL29wdGlvbi50Y2w6MTQ2Cittc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKK21zZ3N0ciAiRmlkYXRpIGRlbGxlIGRhdGUgZGkgbW9kaWZpY2EgZGVpIGZpbGUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NworbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKK21zZ3N0ciAiIgorIkVmZmV0dHVhIHBvdGF0dXJhIGRlaSBkdXBsaWNhdGkgbG9jYWxpIGRpIHJhbWkgcmVtb3RpIGR1cmFudGUgaWwgcmVjdXBlcm8iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgorbXNnc3RyICJBcHBhaWEgZHVwbGljYXRpIGxvY2FsaSBkaSByYW1pIHJlbW90aSIKKworIzogbGliL29wdGlvbi50Y2w6MTQ5Cittc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCittc2dzdHIgIlJpY2VyY2EgY29waWUgc29sbyBuZWkgZmlsZSBtb2RpZmljYXRpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAiTnVtZXJvIG1pbmltbyBkaSBsZXR0ZXJlIGNoZSBhdHRpdmFubyBsYSByaWNlcmNhIGRlbGxlIGNvcGllIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTEKK21zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKK21zZ3N0ciAiR2lvcm5pIGRpIGNvbnRlc3RvIG5lbGxhIGNyb25vbG9naWEgZGVsbGUgYW5ub3RhemlvbmkiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MgorbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCittc2dzdHIgIk51bWVybyBkaSBsaW5lZSBkaSBjb250ZXN0byBuZWxsZSBkaWZmZXJlbnplIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTMKK21zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgorbXNnc3RyICJMYXJnaGV6emEgZGVsIG1lc3NhZ2dpbyBkaSByZXZpc2lvbmUiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NAorbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKK21zZ3N0ciAiTW9kZWxsbyBwZXIgaWwgbm9tZSBkaSB1biBudW92byByYW1vIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTUKK21zZ2lkICJEZWZhdWx0IEZpbGUgQ29udGVudHMgRW5jb2RpbmciCittc2dzdHIgIkNvZGlmaWNhIHByZWRlZmluaXRhIHBlciBpbCBjb250ZW51dG8gZGVpIGZpbGUiCisKKyM6IGxpYi9vcHRpb24udGNsOjIwMworbXNnaWQgIkNoYW5nZSIKK21zZ3N0ciAiQ2FtYmlhIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMzAKK21zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKK21zZ3N0ciAiTGluZ3VhIGRpemlvbmFyaW86IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTQKK21zZ2lkICJDaGFuZ2UgRm9udCIKK21zZ3N0ciAiQ2FtYmlhIGNhcmF0dGVyaSIKKworIzogbGliL29wdGlvbi50Y2w6MjU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hvb3NlICVzIgorbXNnc3RyICJTY2VnbGkgJXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjI2NAorbXNnaWQgInB0LiIKK21zZ3N0ciAicHQuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNzgKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyZW56ZSIKKworIzogbGliL29wdGlvbi50Y2w6MzE0Cittc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2FsdmFyZSBjb21wbGV0YW1lbnRlIGxlIG9wemlvbmk6IgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjMKK21zZ2lkICJSZW1vdmUgUmVtb3RlIgorbXNnc3RyICJSaW11b3ZpIGFyY2hpdmlvIHJlbW90byIKKworIzogbGliL3JlbW90ZS50Y2w6MTY4Cittc2dpZCAiUHJ1bmUgZnJvbSIKK21zZ3N0ciAiRWZmZXR0dWEgcG90YXR1cmEgZGEiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE3MworbXNnaWQgIkZldGNoIGZyb20iCittc2dzdHIgIlJlY3VwZXJhIGRhIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMTUKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICJQcm9wYWdhIHZlcnNvIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTkKK21zZ2lkICJBZGQgUmVtb3RlIgorbXNnc3RyICJBZ2dpdW5naSBhcmNoaXZpbyByZW1vdG8iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNAorbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgorbXNnc3RyICJBZ2dpdW5naSBudW92byBhcmNoaXZpbyByZW1vdG8iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyOCBsaWIvdG9vbHNfZGxnLnRjbDozNgorbXNnaWQgIkFkZCIKK21zZ3N0ciAiQWdnaXVuZ2kiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozNworbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgorbXNnc3RyICJEZXR0YWdsaSBzdWxsJ2FyY2hpdmlvIHJlbW90byIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCittc2dpZCAiTG9jYXRpb246IgorbXNnc3RyICJQb3NpemlvbmU6IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjIKK21zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKK21zZ3N0ciAiQWx0cmEgYXppb25lIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiUmVjdXBlcmEgc3ViaXRvIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzEKK21zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgorbXNnc3RyICJJbml6aWFsaXp6YSBsJ2FyY2hpdmlvIHJlbW90byBlIHByb3BhZ2EiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3NworbXNnaWQgIkRvIE5vdGhpbmcgRWxzZSBOb3ciCittc2dzdHIgIk5vbiBmYXJlIGFsdHJvIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTAxCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiSW5zZXJpcmUgdW4gbm9tZSBwZXIgbCdhcmNoaXZpbyByZW1vdG8uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCittc2dzdHIgIiclcycgbm9uIMOoIHV0aWxpenphYmlsZSBjb21lIG5vbWUgZGkgYXJjaGl2aW8gcmVtb3RvLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCittc2dzdHIgIkltcG9zc2liaWxlIGFnZ2l1bmdlcmUgbCdhcmNoaXZpbyByZW1vdG8gJyVzJyBwb3N0byBpbiAnJXMnLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMyBsaWIvdHJhbnNwb3J0LnRjbDo2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmV0Y2ggJXMiCittc2dzdHIgInJlY3VwZXJhIGRhICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgorbXNnc3RyICJSZWN1cGVybyAlcyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE1NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkRvIG5vdCBrbm93IGhvdyB0byBpbml0aWFsaXplIHJlcG9zaXRvcnkgYXQgbG9jYXRpb24gJyVzJy4iCittc2dzdHIgIkltcG9zc2liaWxlIGluaXppYWxpenphcmUgbCdhcmNoaXZpbyBwb3N0byBpbiAnJXMnLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MyBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo2MworIzogbGliL3RyYW5zcG9ydC50Y2w6ODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJwdXNoICVzIgorbXNnc3RyICJwcm9wYWdhIHZlcnNvICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKK21zZ3N0ciAiSW1wb3N0byAlcyAoaW4gJXMpIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICJFbGltaW5hIHJhbW8gcmVtb3RvIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ3Cittc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgorbXNnc3RyICJEYSBhcmNoaXZpbyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKK21zZ2lkICJSZW1vdGU6IgorbXNnc3RyICJSZW1vdG86IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQorbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCittc2dzdHIgIlBvc2l6aW9uZSBzcGVjaWZpY2E6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg0Cittc2dpZCAiQnJhbmNoZXMiCittc2dzdHIgIlJhbWkiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTA5Cittc2dpZCAiRGVsZXRlIE9ubHkgSWYiCittc2dzdHIgIkVsaW1pbmEgc29sbyBzZSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTEKK21zZ2lkICJNZXJnZWQgSW50bzoiCittc2dzdHIgIkZ1c28gaW46IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgorbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKK21zZ3N0ciAiU2kgcmljaGllZGUgdW4gcmFtbyBwZXIgJ0Z1c28gaW4nLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCisiXG4iCisiIC0gJXMiCittc2dzdHIgIiIKKyJJIHJhbWkgc2VndWVudGkgbm9uIHNvbm8gc3RhdGkgZnVzaSBjb21wbGV0YW1lbnRlIGluICVzOlxuIgorIlxuIgorIiAtICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKKyJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIHZlcmlmaWNhcmUgdW5hIG8gcGnDuSBmdXNpb25pOiBtYW5jYW5vIGxlIHJldmlzaW9uaSBuZWNlc3NhcmllLiAiCisiUHJvdmEgcHJpbWEgYSByZWN1cGVyYXJsZSBkYSAlcy4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA3Cittc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgorbXNnc3RyICJTY2VnbGllcmUgdW5vIG8gcGnDuSByYW1pIGRhIGNhbmNlbGxhcmUuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCittc2dzdHIgIkNhbmNlbGxhemlvbmUgcmFtaSBkYSAlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTIKK21zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKK21zZ3N0ciAiTmVzc3VuIGFyY2hpdmlvIHNlbGV6aW9uYXRvLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAiQW5hbGlzaSBpbiBjb3JzbyAlcy4uLiIKKworIzogbGliL3NlYXJjaC50Y2w6MjEKK21zZ2lkICJGaW5kOiIKK21zZ3N0ciAiVHJvdmE6IgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMworbXNnaWQgIk5leHQiCittc2dzdHIgIlN1Y2MiCisKKyM6IGxpYi9zZWFyY2gudGNsOjI0Cittc2dpZCAiUHJldiIKK21zZ3N0ciAiUHJlYyIKKworIzogbGliL3NlYXJjaC50Y2w6MjUKK21zZ2lkICJDYXNlLVNlbnNpdGl2ZSIKK21zZ3N0ciAiRGlzdGluZ3VpIG1haXVzY29sZSIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2NyaXZlcmUgc2hvcnRjdXQ6IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjEzNworbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2NyaXZlcmUgaWNvbmE6IgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKK21zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJDb3JyZXR0b3JlIG9ydG9ncmFmaWNvIG5vbiBzdXBwb3J0YXRvIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NjUKK21zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKK21zZ3N0ciAiQ29ycmV6aW9uZSBvcnRvZ3JhZmljYSBpbmRpc3BvbmliaWxlIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKK21zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIkxhIGNvbmZpZ3VyYXppb25lIGRlbCBjb3JyZXR0b3JlIG9ydG9ncmFmaWNvIG5vbiDDqCB2YWxpZGEiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKK21zZ3N0ciAiSWwgZGl6aW9uYXJpbyDDqCBzdGF0byByZWltcG9zdGF0byBzdSAlcy4iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MworbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCittc2dzdHIgIklsIGNvcnJldHRvcmUgb3J0b2dyYWZpY28gaGEgcmlwb3J0YXRvIHVuIGVycm9yZSBhbGwnYXZ2aW8iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAorbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJDb3JyZXR0b3JlIG9ydG9ncmFmaWNvIG5vbiByaWNvbm9zY2l1dG8iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKK21zZ2lkICJObyBTdWdnZXN0aW9ucyIKK21zZ3N0ciAiTmVzc3VuIHN1Z2dlcmltZW50byIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAorbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiSWwgY29ycmV0dG9yZSBvcnRvZ3JhZmljbyBoYSBtYW5kYXRvIHVuIEVPRiBpbmFzcGV0dGF0byIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM5MgorbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgorbXNnc3RyICJFcnJvcmUgbmVsIGNvcnJldHRvcmUgb3J0b2dyYWZpY28iCisKKyM6IGxpYi9zc2hrZXkudGNsOjMxCittc2dpZCAiTm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIkNoaWF2aSBub24gdHJvdmF0ZS4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRm91bmQgYSBwdWJsaWMga2V5IGluOiAlcyIKK21zZ3N0ciAiQ2hpYXZlIHB1YmJsaWNhIHRyb3ZhdGEgaW46ICVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDo0MAorbXNnaWQgIkdlbmVyYXRlIEtleSIKK21zZ3N0ciAiQ3JlYSBjaGlhdmUiCisKKyM6IGxpYi9zc2hrZXkudGNsOjU2Cittc2dpZCAiQ29weSBUbyBDbGlwYm9hcmQiCittc2dzdHIgIkNvcGlhIG5lZ2xpIGFwcHVudGkiCisKKyM6IGxpYi9zc2hrZXkudGNsOjcwCittc2dpZCAiWW91ciBPcGVuU1NIIFB1YmxpYyBLZXkiCittc2dzdHIgIkxhIHR1YSBjaGlhdmUgcHViYmxpY2EgT3BlblNTSCIKKworIzogbGliL3NzaGtleS50Y2w6NzgKK21zZ2lkICJHZW5lcmF0aW5nLi4uIgorbXNnc3RyICJDcmVhemlvbmUgY2hpYXZlIGluIGNvcnNvLi4uIgorCisjOiBsaWIvc3Noa2V5LnRjbDo4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGF2dmlhcmUgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3NzaGtleS50Y2w6MTExCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsYSBjcmVhemlvbmUgZGVsbGEgY2hpYXZlLiIKKworIzogbGliL3NzaGtleS50Y2w6MTE4Cittc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAiTGEgY2hpYXZlIMOoIHN0YXRhIGNyZWF0YSBjb24gc3VjY2Vzc28sIG1hIG5vbiDDqCBzdGF0YSB0cm92YXRhLiIKKworIzogbGliL3NzaGtleS50Y2w6MTIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgorbXNnc3RyICJMYSBjaGlhdmUgw6ggaW46ICVzIgorCisjOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgorbXNnc3RyICIlMSRzIC4uLiAlNiRzOiAlMiQqaSBkaSAlNCQqaSAoJTckM2klJSkiCisKKyM6IGxpYi90b29scy50Y2w6NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgIkJpc29nbmEgc2VsZXppb25hcmUgdW4gZmlsZSBwcmltYSBkaSBlc2VndWlyZSAlcy4iCisKKyM6IGxpYi90b29scy50Y2w6OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKK21zZ3N0ciAiVnVvaSBkYXZ2ZXJvIGVzZWd1aXJlICVzPyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sOiAlcyIKK21zZ3N0ciAiQWNjZXNzb3JpbzogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVubmluZzogJXMiCittc2dzdHIgIkVzZWd1bzogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKK21zZ3N0ciAiSWwgcHJvZ3JhbW1hIGVzdGVybm8gw6ggdGVybWluYXRvIGNvbiBzdWNjZXNzbzogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTUxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBmYWlsZWQ6ICVzIgorbXNnc3RyICJJbCBwcm9ncmFtbWEgZXN0ZXJubyBoYSByaXBvcnRhdG8gdW4gZXJyb3JlOiAlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKK21zZ2lkICJBZGQgVG9vbCIKK21zZ3N0ciAiQWdnaXVuZ2kgYWNjZXNzb3JpbyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKK21zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKK21zZ3N0ciAiQWdnaXVuZ2kgdW4gbnVvdm8gY29tYW5kbyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzMKK21zZ2lkICJBZGQgZ2xvYmFsbHkiCittc2dzdHIgIkFnZ2l1bmdpIHBlciB0dXR0aSBnbGkgYXJjaGl2aSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDUKK21zZ2lkICJUb29sIERldGFpbHMiCittc2dzdHIgIkRldHRhZ2xpIHN1bGwnYWNjZXNzb3JpbyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDgKK21zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKK21zZ3N0ciAiVXRpbGl6emEgaWwgc2VwYXJhdG9yZSAnLycgcGVyIGNyZWFyZSB1biBhbGJlcm8gZGkgc290dG9tZW51OiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NjEKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiQ29tYW5kbzoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjc0Cittc2dpZCAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyIKK21zZ3N0ciAiTW9zdHJhIHVuYSBmaW5lc3RyYSBkaSBkaWFsb2dvIHByaW1hIGRlbGwnYXZ2aW8iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjgwCittc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCittc2dzdHIgIkNoaWVkaSBhbGwndXRlbnRlIGRpIHNjZWdsaWVyZSB1bmEgcmV2aXNpb25lIChpbXBvc3RhICRSRVZJU0lPTikiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjg1Cittc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCittc2dzdHIgIkNoaWVkaSBhbGwndXRlbnRlIGRpIGZvcm5pcmUgYXJnb21lbnRpIGFnZ2l1bnRpdmkgKGltcG9zdGEgJEFSR1MpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo5MgorbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKK21zZ3N0ciAiTm9uIG1vc3RyYXJlIGxhIGZpbmVzdHJhIGRpIGNvbWFuZG8iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjk3Cittc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKK21zZ3N0ciAiQXZ2aWEgc29sbyBzZSDDqCBzZWxlemlvbmF0YSB1bmEgZGlmZmVyZW56YSAoJEZJTEVOQU1FIG5vbiDDqCB2dW90bykiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjEyMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCittc2dzdHIgIkJpc29nbmEgZGFyZSB1biBub21lIGFsbCdhY2Nlc3NvcmlvLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiTCdhY2Nlc3NvcmlvICclcycgZXNpc3RlIGdpw6AuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFkZCB0b29sOlxuIgorIiVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgYWdnaXVuZ2VyZSBsJ2FjY2Vzc29yaW86XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MAorbXNnaWQgIlJlbW92ZSBUb29sIgorbXNnc3RyICJSaW11b3ZpIGFjY2Vzc29yaW8iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5NgorbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgorbXNnc3RyICJSaW11b3ZpIGkgY29tYW5kaSBhY2Nlc3NvcmkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIwMAorbXNnaWQgIlJlbW92ZSIKK21zZ3N0ciAiUmltdW92aSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjM2Cittc2dpZCAiKEJsdWUgZGVub3RlcyByZXBvc2l0b3J5LWxvY2FsIHRvb2xzKSIKK21zZ3N0ciAiKElsIGNvbG9yZSBibHUgaW5kaWNhIGFjY2Vzc29yaSBwZXIgbCdhcmNoaXZpbyBsb2NhbGUpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW4gQ29tbWFuZDogJXMiCittc2dzdHIgIkF2dmlhIGlsIGNvbWFuZG86ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMTEKK21zZ2lkICJBcmd1bWVudHMiCittc2dzdHIgIkFyZ29tZW50aSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQ4Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKK21zZ3N0ciAiUmVjdXBlcm8gbnVvdmUgbW9kaWZpY2hlIGRhICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAorIywgdGNsLWZvcm1hdAorbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKK21zZ3N0ciAicG90YXR1cmEgcmVtb3RhIGRpICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgorbXNnc3RyICJFZmZldHR1YSBwb3RhdHVyYSBkZWkgZHVwbGljYXRpIGxvY2FsaSBkaSByYW1pIHJlbW90aSBjYW5jZWxsYXRpIGRhICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAiUHJvcGFnYXppb25lIG1vZGlmaWNoZSBhICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKK21zZ3N0ciAiTWlycm9yaW5nIHZlcnNvICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCittc2dzdHIgIlByb3BhZ2F6aW9uZSAlcyAlcyBhICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDAKK21zZ2lkICJQdXNoIEJyYW5jaGVzIgorbXNnc3RyICJQcm9wYWdhIHJhbWkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjExNAorbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKK21zZ3N0ciAiUmFtaSBkaSBvcmlnaW5lIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzEKK21zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgorbXNnc3RyICJBcmNoaXZpbyBkaSBkZXN0aW5hemlvbmUiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2OQorbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCittc2dzdHIgIk9wemlvbmkgZGkgdHJhc2ZlcmltZW50byIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTcxCittc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCittc2dzdHIgIlNvdnJhc2NyaXZpIHJhbW8gZXNpc3RlbnRlIChhbGN1bmUgbW9kaWZpY2hlIHBvdHJlYmJlcm8gZXNzZXJlIHBlcnNlKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTc1Cittc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCittc2dzdHIgIlV0aWxpenphICd0aGluIHBhY2snIChwZXIgY29ubmVzc2lvbmkgbGVudGUpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzkKK21zZ2lkICJJbmNsdWRlIHRhZ3MiCittc2dzdHIgIkluY2x1ZGkgZXRpY2hldHRlIgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9qYS5wbyBiL2dpdC1ndWkvcG8vamEucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmZjI0OQotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vamEucG8KQEAgLTAsMCArMSwyNTU1IEBACisjIFRyYW5zbGF0aW9uIG9mIGdpdC1ndWkgdG8gSmFwYW5lc2UKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgorIyDjgZfjgonjgYTjgZcg44Gq44Gq44GTIDxuYW5ha28zQGJsdWVib3R0bGUuY29tPiwgMjAwNy4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWlcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDEtMjYgMTU6NDctMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDItMDIgMTk6MDMrMDkwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjog44GX44KJ44GE44GXIOOBquOBquOBkyA8bmFuYWtvM0BsYXZhYml0LmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBKYXBhbmVzZVxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCisjOiBnaXQtZ3VpLnNoOjQxIGdpdC1ndWkuc2g6NzkzIGdpdC1ndWkuc2g6ODA3IGdpdC1ndWkuc2g6ODIwIGdpdC1ndWkuc2g6OTAzCisjOiBnaXQtZ3VpLnNoOjkyMgorbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgorbXNnc3RyICJnaXQtZ3VpOiDoh7Tlkb3nmoTjgarjgqjjg6njg7wiCisKKyM6IGdpdC1ndWkuc2g6NzQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgIiVzIOOBq+eEoeWKueOBquODleOCqeODs+ODiOOBjOaMh+WumuOBleOCjOOBpuOBhOOBvuOBmToiCisKKyM6IGdpdC1ndWkuc2g6Nzc5Cittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICLkuLvjg5Xjgqnjg7Pjg4giCisKKyM6IGdpdC1ndWkuc2g6NzgwCittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgImRpZmYv44Kz44Oz44K944O844Or44O744OV44Kp44Oz44OIIgorCisjOiBnaXQtZ3VpLnNoOjc5NAorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAiUEFUSCDkuK3jgasgZ2l0IOOBjOimi+OBpOOBi+OCiuOBvuOBm+OCkyIKKworIzogZ2l0LWd1aS5zaDo4MjEKK21zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKK21zZ3N0ciAiR2l0IOODkOODvOOCuOODp+ODs+WQjeOBjOeQhuino+OBp+OBjeOBvuOBm+OCkzoiCisKKyM6IGdpdC1ndWkuc2g6ODM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIlxuIgorIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCisiXG4iCisiJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgorIlxuIgorIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCittc2dzdHIgIiIKKyJHaXQg44Gu44OQ44O844K444On44Oz44GM56K66KqN44Gn44GN44G+44Gb44KT44CCXG4iCisiXG4iCisiJXMg44Gv44OQ44O844K444On44OzICclcycg44Go44Gu44GT44Go44Gn44GZ44CCXG4iCisiXG4iCisiJXMg44Gv5pyA5L2O44Gn44KCIDEuNS4wIOOBi+OBneOCjOS7pemZjeOBriBHaXQg44GM5b+F6KaB44Gn44GZXG4iCisiXG4iCisiJyVzJyDjga/jg5Djg7zjgrjjg6fjg7MgMS41LjAg44Go5oCd44Gj44Gm6Imv44GE44Gn44GZ44GL77yfXG4iCisKKyM6IGdpdC1ndWkuc2g6MTEyOAorbXNnaWQgIkdpdCBkaXJlY3Rvcnkgbm90IGZvdW5kOiIKK21zZ3N0ciAiR2l0IOODh+OCo+ODrOOCr+ODiOODquOBjOimi+OBpOOBi+OCiuOBvuOBm+OCkzoiCisKKyM6IGdpdC1ndWkuc2g6MTE0NgorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIuS9nOalreODh+OCo+ODrOOCr+ODiOODquOBruacgOS4iuS9jeOBq+enu+WLleOBp+OBjeOBvuOBm+OCkyIKKworIzogZ2l0LWd1aS5zaDoxMTU0Cittc2dpZCAiQ2Fubm90IHVzZSBiYXJlIHJlcG9zaXRvcnk6IgorbXNnc3RyICLoo7jjga7jg6rjg53jgrjjg4jjg6rjga/kvb/jgYjjgb7jgZvjgpM6IgorCisjOiBnaXQtZ3VpLnNoOjExNjIKK21zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi5L2c5qWt44OH44Kj44Os44Kv44OI44Oq44GM44GC44KK44G+44Gb44KTIgorCisjOiBnaXQtZ3VpLnNoOjEzMzQgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKK21zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgorbXNnc3RyICLjg5XjgqHjgqTjg6vnirbmhYvjgpLmm7TmlrDjgZfjgabjgYTjgb7jgZnigKYiCisKKyM6IGdpdC1ndWkuc2g6MTM5MAorbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgIuWkieabtOOBleOCjOOBn+ODleOCoeOCpOODq+OCkuOCueOCreODo+ODs+OBl+OBpuOBhOOBvuOBmeKApiIKKworIzogZ2l0LWd1aS5zaDoxNDU0Cittc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAicHJlcGFyZS1jb21taXQtbXNnIOODleODg+OCr+OCkuWun+ihjOS4reODu+ODu+ODuyIKKworIzogZ2l0LWd1aS5zaDoxNDcxCittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAicHJlcGFyZS1jb21taXQtbXNnIOODleODg+OCr+OBjOOCs+ODn+ODg+ODiOOCkuaLkuWQpuOBl+OBvuOBl+OBnyIKKworIzogZ2l0LWd1aS5zaDoxNjI5IGxpYi9icm93c2VyLnRjbDoyNDYKK21zZ2lkICJSZWFkeS4iCittc2dzdHIgIua6luWCmeWujOS6hiIKKworIzogZ2l0LWd1aS5zaDoxNzg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKK21zZ3N0ciAi5YWo5L2T44GnJXPlgIvjga7lhoXjga4lc+ODleOCoeOCpOODq+OBoOOBkeihqOekuuOBl+OBpuOBhOOBvuOBmSIKKworIzogZ2l0LWd1aS5zaDoxOTEzCittc2dpZCAiVW5tb2RpZmllZCIKK21zZ3N0ciAi5aSJ5pu054Sh44GXIgorCisjOiBnaXQtZ3VpLnNoOjE5MTUKK21zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAi5aSJ5pu044GC44KK44CB44Kz44Of44OD44OI5pyq5LqI5a6aIgorCisjOiBnaXQtZ3VpLnNoOjE5MTYgZ2l0LWd1aS5zaDoxOTI0Cittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIuOCs+ODn+ODg+ODiOS6iOWumua4iCIKKworIzogZ2l0LWd1aS5zaDoxOTE3IGdpdC1ndWkuc2g6MTkyNQorbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICLpg6jliIbnmoTjgavjgrPjg5/jg4Pjg4jkuojlrprmuIgiCisKKyM6IGdpdC1ndWkuc2g6MTkxOCBnaXQtZ3VpLnNoOjE5MjYKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKK21zZ3N0ciAi44Kz44Of44OD44OI5LqI5a6a5riI44CB44OV44Kh44Kk44Or54Sh44GXIgorCisjOiBnaXQtZ3VpLnNoOjE5MjAKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAi44OV44Kh44Kk44Or5Z6L5aSJ5pu044CB44Kz44Of44OD44OI5pyq5LqI5a6aIgorCisjOiBnaXQtZ3VpLnNoOjE5MjEKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgorbXNnc3RyICLjg5XjgqHjgqTjg6vlnovlpInmm7TjgIHjgrPjg5/jg4Pjg4jkuojlrprmuIgiCisKKyM6IGdpdC1ndWkuc2g6MTkyMworbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAi566h55CG5aSW44CB44Kz44Of44OD44OI5pyq5LqI5a6aIgorCisjOiBnaXQtZ3VpLnNoOjE5MjgKK21zZ2lkICJNaXNzaW5nIgorbXNnc3RyICLjg5XjgqHjgqTjg6vnhKHjgZciCisKKyM6IGdpdC1ndWkuc2g6MTkyOQorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAi5YmK6Zmk5LqI5a6a5riIIgorCisjOiBnaXQtZ3VpLnNoOjE5MzAKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIuWJiumZpOS6iOWumua4iOOAgeODleOCoeOCpOODq+acquWJiumZpCIKKworIzogZ2l0LWd1aS5zaDoxOTMyIGdpdC1ndWkuc2g6MTkzMyBnaXQtZ3VpLnNoOjE5MzQgZ2l0LWd1aS5zaDoxOTM1CisjOiBnaXQtZ3VpLnNoOjE5MzYgZ2l0LWd1aS5zaDoxOTM3Cittc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAi6KaB44Oe44O844K46Kej5rG6IgorCisjOiBnaXQtZ3VpLnNoOjE5NzIKK21zZ2lkICJTdGFydGluZyBnaXRrLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICJnaXRrIOOCkui1t+WLleS4reKApuOBiuW+heOBoeS4i+OBleOBhOKApiIKKworIzogZ2l0LWd1aS5zaDoxOTg0Cittc2dpZCAiQ291bGRuJ3QgZmluZCBnaXRrIGluIFBBVEgiCittc2dzdHIgIlBBVEgg5Lit44GrIGdpdGsg44GM6KaL44Gk44GL44KK44G+44Gb44KTIgorCisjOiBnaXQtZ3VpLnNoOjIwNDMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiUEFUSCDkuK3jgasgZ2l0IGd1aSDjgYzopovjgaTjgYvjgorjgb7jgZvjgpMiCisKKyM6IGdpdC1ndWkuc2g6MjQ1NSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2Cittc2dpZCAiUmVwb3NpdG9yeSIKK21zZ3N0ciAi44Oq44Od44K444OI44OqIgorCisjOiBnaXQtZ3VpLnNoOjI0NTYKK21zZ2lkICJFZGl0IgorbXNnc3RyICLnt6jpm4YiCisKKyM6IGdpdC1ndWkuc2g6MjQ1OCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCittc2dpZCAiQnJhbmNoIgorbXNnc3RyICLjg5bjg6njg7Pjg4EiCisKKyM6IGdpdC1ndWkuc2g6MjQ2MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4Cittc2dpZCAiQ29tbWl0QEBub3VuIgorbXNnc3RyICLjgrPjg5/jg4Pjg4giCisKKyM6IGdpdC1ndWkuc2g6MjQ2NCBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAorbXNnaWQgIk1lcmdlIgorbXNnc3RyICLjg57jg7zjgrgiCisKKyM6IGdpdC1ndWkuc2g6MjQ2NSBsaWIvY2hvb3NlX3Jldi50Y2w6NTU3Cittc2dpZCAiUmVtb3RlIgorbXNnc3RyICLjg6rjg6Ljg7zjg4giCisKKyM6IGdpdC1ndWkuc2g6MjQ2OAorbXNnaWQgIlRvb2xzIgorbXNnc3RyICLjg4Tjg7zjg6siCisKKyM6IGdpdC1ndWkuc2g6MjQ3NworbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgorbXNnc3RyICLjg6/jg7zjgq3jg7PjgrDjgrPjg5Tjg7zjgpLjg5bjg6njgqbjgroiCisKKyM6IGdpdC1ndWkuc2g6MjQ4MworbXNnaWQgIkJyb3dzZSBDdXJyZW50IEJyYW5jaCdzIEZpbGVzIgorbXNnc3RyICLnj77lnKjjga7jg5bjg6njg7Pjg4Hjga7jg5XjgqHjgqTjg6vjgpLopovjgosiCisKKyM6IGdpdC1ndWkuc2g6MjQ4NworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCittc2dzdHIgIuODluODqeODs+ODgeOBruODleOCoeOCpOODq+OCkuimi+OCi+KApiIKKworIzogZ2l0LWd1aS5zaDoyNDkyCittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKK21zZ3N0ciAi54++5Zyo44Gu44OW44Op44Oz44OB44Gu5bGl5q2044KS6KaL44KLIgorCisjOiBnaXQtZ3VpLnNoOjI0OTYKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IgorbXNnc3RyICLlhajjgabjga7jg5bjg6njg7Pjg4Hjga7lsaXmrbTjgpLopovjgosiCisKKyM6IGdpdC1ndWkuc2g6MjUwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgorbXNnc3RyICLjg5bjg6njg7Pjg4EgJXMg44Gu44OV44Kh44Kk44Or44KS6KaL44KLIgorCisjOiBnaXQtZ3VpLnNoOjI1MDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgorbXNnc3RyICLjg5bjg6njg7Pjg4EgJXMg44Gu5bGl5q2044KS6KaL44KLIgorCisjOiBnaXQtZ3VpLnNoOjI1MTAgbGliL2RhdGFiYXNlLnRjbDoyNyBsaWIvZGF0YWJhc2UudGNsOjY3Cittc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKK21zZ3N0ciAi44OH44O844K/44OZ44O844K557Wx6KiIIgorCisjOiBnaXQtZ3VpLnNoOjI1MTMgbGliL2RhdGFiYXNlLnRjbDozNAorbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICLjg4fjg7zjgr/jg5njg7zjgrnlnKfnuK4iCisKKyM6IGdpdC1ndWkuc2g6MjUxNgorbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKK21zZ3N0ciAi44OH44O844K/44OZ44O844K55qSc6Ki8IgorCisjOiBnaXQtZ3VpLnNoOjI1MjMgZ2l0LWd1aS5zaDoyNTI3IGdpdC1ndWkuc2g6MjUzMSBsaWIvc2hvcnRjdXQudGNsOjgKKyM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgorbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCittc2dzdHIgIuODh+OCueOCr+ODiOODg+ODl+ODu+OCouOCpOOCs+ODs+OCkuS9nOOCiyIKKworIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCittc2dpZCAiUXVpdCIKK21zZ3N0ciAi57WC5LqGIgorCisjOiBnaXQtZ3VpLnNoOjI1NDcKK21zZ2lkICJVbmRvIgorbXNnc3RyICLlhYPjgavmiLvjgZkiCisKKyM6IGdpdC1ndWkuc2g6MjU1MAorbXNnaWQgIlJlZG8iCittc2dzdHIgIuOChOOCiuebtOOBlyIKKworIzogZ2l0LWd1aS5zaDoyNTU0IGdpdC1ndWkuc2g6MzEwOQorbXNnaWQgIkN1dCIKK21zZ3N0ciAi5YiH44KK5Y+W44KKIgorCisjOiBnaXQtZ3VpLnNoOjI1NTcgZ2l0LWd1aS5zaDozMTEyIGdpdC1ndWkuc2g6MzE4NiBnaXQtZ3VpLnNoOjMyNTkKKyM6IGxpYi9jb25zb2xlLnRjbDo2OQorbXNnaWQgIkNvcHkiCittc2dzdHIgIuOCs+ODlOODvCIKKworIzogZ2l0LWd1aS5zaDoyNTYwIGdpdC1ndWkuc2g6MzExNQorbXNnaWQgIlBhc3RlIgorbXNnc3RyICLosrzjgorku5jjgZEiCisKKyM6IGdpdC1ndWkuc2g6MjU2MyBnaXQtZ3VpLnNoOjMxMTggbGliL2JyYW5jaF9kZWxldGUudGNsOjI2CisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM4Cittc2dpZCAiRGVsZXRlIgorbXNnc3RyICLliYrpmaQiCisKKyM6IGdpdC1ndWkuc2g6MjU2NyBnaXQtZ3VpLnNoOjMxMjIgZ2l0LWd1aS5zaDozMjYzIGxpYi9jb25zb2xlLnRjbDo3MQorbXNnaWQgIlNlbGVjdCBBbGwiCittc2dzdHIgIuWFqOOBpumBuOaKniIKKworIzogZ2l0LWd1aS5zaDoyNTc2Cittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICLkvZzmiJDigKYiCisKKyM6IGdpdC1ndWkuc2g6MjU4MgorbXNnaWQgIkNoZWNrb3V0Li4uIgorbXNnc3RyICLjg4Hjgqfjg4Pjgq/jgqLjgqbjg4giCisKKyM6IGdpdC1ndWkuc2g6MjU4OAorbXNnaWQgIlJlbmFtZS4uLiIKK21zZ3N0ciAi5ZCN5YmN5aSJ5pu04oCmIgorCisjOiBnaXQtZ3VpLnNoOjI1OTMKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIuWJiumZpOKApiIKKworIzogZ2l0LWd1aS5zaDoyNTk4Cittc2dpZCAiUmVzZXQuLi4iCittc2dzdHIgIuODquOCu+ODg+ODiOKApiIKKworIzogZ2l0LWd1aS5zaDoyNjA4Cittc2dpZCAiRG9uZSIKK21zZ3N0ciAi5a6M5LqGIgorCisjOiBnaXQtZ3VpLnNoOjI2MTAKK21zZ2lkICJDb21taXRAQHZlcmIiCittc2dzdHIgIuOCs+ODn+ODg+ODiCIKKworIzogZ2l0LWd1aS5zaDoyNjE5IGdpdC1ndWkuc2g6MzA1MAorbXNnaWQgIk5ldyBDb21taXQiCittc2dzdHIgIuaWsOimj+OCs+ODn+ODg+ODiCIKKworIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NworbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICLmnIDmlrDjgrPjg5/jg4Pjg4jjgpLoqILmraMiCisKKyM6IGdpdC1ndWkuc2g6MjYzNyBnaXQtZ3VpLnNoOjMwMTEgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQorbXNnaWQgIlJlc2NhbiIKK21zZ3N0ciAi5YaN44K544Kt44Oj44OzIgorCisjOiBnaXQtZ3VpLnNoOjI2NDMKK21zZ2lkICJTdGFnZSBUbyBDb21taXQiCittc2dzdHIgIuOCs+ODn+ODg+ODiOS6iOWumuOBmeOCiyIKKworIzogZ2l0LWd1aS5zaDoyNjQ5Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCittc2dzdHIgIuWkieabtOOBleOCjOOBn+ODleOCoeOCpOODq+OCkuOCs+ODn+ODg+ODiOS6iOWumiIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAi44Kz44Of44OD44OI44GL44KJ6ZmN44KN44GZIgorCisjOiBnaXQtZ3VpLnNoOjI2NjEgbGliL2luZGV4LnRjbDo0MTIKK21zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKK21zZ3N0ciAi5aSJ5pu044KS5YWD44Gr5oi744GZIgorCisjOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQorbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgorbXNnc3RyICLmlofohIjjgpLlsJHjgarjgY8iCisKKyM6IGdpdC1ndWkuc2g6MjY3MyBnaXQtZ3VpLnNoOjMzMTQgZ2l0LWd1aS5zaDozMzQ1Cittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgIuaWh+iEiOOCkuWkmuOBjyIKKworIzogZ2l0LWd1aS5zaDoyNjgwIGdpdC1ndWkuc2g6MzAyNCBnaXQtZ3VpLnNoOjMxMzMKK21zZ2lkICJTaWduIE9mZiIKK21zZ3N0ciAi572y5ZCNIgorCisjOiBnaXQtZ3VpLnNoOjI2OTYKK21zZ2lkICJMb2NhbCBNZXJnZS4uLiIKK21zZ3N0ciAi44Ot44O844Kr44Or44O744Oe44O844K44oCmIgorCisjOiBnaXQtZ3VpLnNoOjI3MDEKK21zZ2lkICJBYm9ydCBNZXJnZS4uLiIKK21zZ3N0ciAi44Oe44O844K45Lit5q2i4oCmIgorCisjOiBnaXQtZ3VpLnNoOjI3MTMgZ2l0LWd1aS5zaDoyNzQxCittc2dpZCAiQWRkLi4uIgorbXNnc3RyICLov73liqAiCisKKyM6IGdpdC1ndWkuc2g6MjcxNworbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIuODl+ODg+OCt+ODpeKApiIKKworIzogZ2l0LWd1aS5zaDoyNzIxCittc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKK21zZ3N0ciAi44OW44Op44Oz44OB5YmK6ZmkLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MzEgZ2l0LWd1aS5zaDozMjkyCittc2dpZCAiT3B0aW9ucy4uLiIKK21zZ3N0ciAi44Kq44OX44K344On44Oz4oCmIgorCisjOiBnaXQtZ3VpLnNoOjI3NDIKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgIuWJiumZpC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzUxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAKK21zZ2lkICJIZWxwIgorbXNnc3RyICLjg5jjg6vjg5ciCisKKyM6IGdpdC1ndWkuc2g6Mjc1NSBnaXQtZ3VpLnNoOjI3NTkgbGliL2Fib3V0LnRjbDoxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvdXQgJXMiCittc2dzdHIgIiVzIOOBq+OBpOOBhOOBpiIKKworIzogZ2l0LWd1aS5zaDoyNzgzCittc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCittc2dzdHIgIuOCquODs+ODqeOCpOODs+ODu+ODieOCreODpeODoeODs+ODiCIKKworIzogZ2l0LWd1aS5zaDoyNzg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NgorbXNnaWQgIlNob3cgU1NIIEtleSIKK21zZ3N0ciAiU1NIIOOCreODvOOCkuihqOekuiIKKworIzogZ2l0LWd1aS5zaDoyODkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyLoh7Tlkb3nmoQ6IOODkeOCuSAlcyDjgYwgc3RhdCDjgafjgY3jgb7jgZvjgpPjgILjgZ3jga7jgojjgYbjgarjg5XjgqHjgqTjg6vjgoTjg4fjgqPjg6zjgq/jg4jjg6rjga/jgYLjgorjgb4iCisi44Gb44KTIgorCisjOiBnaXQtZ3VpLnNoOjI5MjYKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgIuePvuWcqOOBruODluODqeODs+ODgSIKKworIzogZ2l0LWd1aS5zaDoyOTQ3Cittc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKK21zZ3N0ciAi44K544OG44O844K444Oz44Kw44GV44KM44Gf77yI44Kz44Of44OD44OI5LqI5a6a5riI44Gu77yJ5aSJ5pu0IgorCisjOiBnaXQtZ3VpLnNoOjI5NjcKK21zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jkuojlrprjgavlhaXjgaPjgabjgYTjgarjgYTlpInmm7QiCisKKyM6IGdpdC1ndWkuc2g6MzAxNworbXNnaWQgIlN0YWdlIENoYW5nZWQiCittc2dzdHIgIuWkieabtOOCkuOCs+ODn+ODg+ODiOS6iOWumuOBq+WFpeOCjOOCiyIKKworIzogZ2l0LWd1aS5zaDozMDM2IGxpYi90cmFuc3BvcnQudGNsOjEwNCBsaWIvdHJhbnNwb3J0LnRjbDoxOTMKK21zZ2lkICJQdXNoIgorbXNnc3RyICLjg5fjg4Pjgrfjg6UiCisKKyM6IGdpdC1ndWkuc2g6MzA3MQorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLmnIDliJ3jga7jgrPjg5/jg4Pjg4jjg6Hjg4Pjgrvjg7zjgrg6IgorCisjOiBnaXQtZ3VpLnNoOjMwNzIKK21zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi6KiC5q2j44GX44Gf44Kz44Of44OD44OI44Oh44OD44K744O844K4OiIKKworIzogZ2l0LWd1aS5zaDozMDczCittc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi6KiC5q2j44GX44Gf5pyA5Yid44Gu44Kz44Of44OD44OI44Oh44OD44K744O844K4OiIKKworIzogZ2l0LWd1aS5zaDozMDc0Cittc2dpZCAiQW1lbmRlZCBNZXJnZSBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIuioguato+OBl+OBn+ODnuODvOOCuOOCs+ODn+ODg+ODiOODoeODg+OCu+ODvOOCuDoiCisKKyM6IGdpdC1ndWkuc2g6MzA3NQorbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi44Oe44O844K444Kz44Of44OD44OI44Oh44OD44K744O844K4OiIKKworIzogZ2l0LWd1aS5zaDozMDc2Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLjgrPjg5/jg4Pjg4jjg6Hjg4Pjgrvjg7zjgrg6IgorCisjOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MworbXNnaWQgIkNvcHkgQWxsIgorbXNnc3RyICLlhajjgabjgrPjg5Tjg7wiCisKKyM6IGdpdC1ndWkuc2g6MzE0OSBsaWIvYmxhbWUudGNsOjEwNAorbXNnaWQgIkZpbGU6IgorbXNnc3RyICLjg5XjgqHjgqTjg6s6IgorCisjOiBnaXQtZ3VpLnNoOjMyNTUKK21zZ2lkICJSZWZyZXNoIgorbXNnc3RyICLlho3oqq3jgb/ovrzjgb8iCisKKyM6IGdpdC1ndWkuc2g6MzI3NgorbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAi44OV44Kp44Oz44OI44KS5bCP44GV44GPIgorCisjOiBnaXQtZ3VpLnNoOjMyODAKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIuODleOCqeODs+ODiOOCkuWkp+OBjeOBjyIKKworIzogZ2l0LWd1aS5zaDozMjg4IGxpYi9ibGFtZS50Y2w6MjgxCittc2dpZCAiRW5jb2RpbmciCittc2dzdHIgIuOCqOODs+OCs+ODvOODh+OCo+ODs+OCsCIKKworIzogZ2l0LWd1aS5zaDozMjk5Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgorbXNnc3RyICLjg5Hjg4Pjg4HjgpLpgannlKgv5Y+W44KK5raI44GZIgorCisjOiBnaXQtZ3VpLnNoOjMzMDQKK21zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCittc2dzdHIgIuODkeODg+ODgeihjOOCkumBqeeUqC/lj5bjgormtojjgZkiCisKKyM6IGdpdC1ndWkuc2g6MzMyMworbXNnaWQgIlJ1biBNZXJnZSBUb29sIgorbXNnc3RyICLjg57jg7zjgrjjg4Tjg7zjg6vjgpLotbfli5UiCisKKyM6IGdpdC1ndWkuc2g6MzMyOAorbXNnaWQgIlVzZSBSZW1vdGUgVmVyc2lvbiIKK21zZ3N0ciAi44Oq44Oi44O844OI44Gu5pa544KS5o6h55SoIgorCisjOiBnaXQtZ3VpLnNoOjMzMzIKK21zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKK21zZ3N0ciAi44Ot44O844Kr44Or44Gu5pa544KS5o6h55SoIgorCisjOiBnaXQtZ3VpLnNoOjMzMzYKK21zZ2lkICJSZXZlcnQgVG8gQmFzZSIKK21zZ3N0ciAi44OZ44O844K554mI44KS5o6h55SoIgorCisjOiBnaXQtZ3VpLnNoOjMzNTQKK21zZ2lkICJWaXN1YWxpemUgVGhlc2UgQ2hhbmdlcyBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICLjgrXjg5bjg6Ljgrjjg6Xjg7zjg6vlhoXjga7jgZPjgozjgonjga7lpInmm7TjgpLopovjgosiCisKKyM6IGdpdC1ndWkuc2g6MzM1OAorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIuOCteODluODouOCuOODpeODvOODq+WGheOBp+ePvuWcqOOBruODluODqeODs+ODgeOBruWxpeattOOCkuimi+OCiyIKKworIzogZ2l0LWd1aS5zaDozMzYyCittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICLjgrXjg5bjg6Ljgrjjg6Xjg7zjg6vlhoXjgaflhajjgabjga7jg5bjg6njg7Pjg4Hjga7lsaXmrbTjgpLopovjgosiCisKKyM6IGdpdC1ndWkuc2g6MzM2NworbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAi44K144OW44Oi44K444Ol44O844Or5YaF44GnZ2l0IGd1aeOCkui1t+WLleOBmeOCiyIKKworIzogZ2l0LWd1aS5zaDozMzg5Cittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICLjg5Hjg4Pjg4HjgpLjgrPjg5/jg4Pjg4jkuojlrprjgYvjgonlpJbjgZkiCisKKyM6IGdpdC1ndWkuc2g6MzM5MQorbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCittc2dzdHIgIuOCs+ODn+ODg+ODiOS6iOWumuOBi+OCieihjOOCkuWkluOBmSIKKworIzogZ2l0LWd1aS5zaDozMzkzCittc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgorbXNnc3RyICLjgrPjg5/jg4Pjg4jkuojlrprjgYvjgonooYzjgpLlpJbjgZkiCisKKyM6IGdpdC1ndWkuc2g6MzM5NgorbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKK21zZ3N0ciAi44OR44OD44OB44KS44Kz44Of44OD44OI5LqI5a6a44Gr5Yqg44GI44KLIgorCisjOiBnaXQtZ3VpLnNoOjMzOTgKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICLjg5Hjg4Pjg4HooYzjgpLjgrPjg5/jg4Pjg4jkuojlrprjgavliqDjgYjjgosiCisKKyM6IGdpdC1ndWkuc2g6MzQwMAorbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKK21zZ3N0ciAi44OR44OD44OB6KGM44KS44Kz44Of44OD44OI5LqI5a6a44Gr5Yqg44GI44KLIgorCisjOiBnaXQtZ3VpLnNoOjM0MjQKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIuWIneacn+WMluOBl+OBpuOBhOOBvuOBmeKApiIKKworIzogZ2l0LWd1aS5zaDozNTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKKyJcbiIKKyJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKKyJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKKyJieSAlczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIueSsOWig+OBq+WVj+mhjOOBjOOBguOCi+WPr+iDveaAp+OBjOOBguOCiuOBvuOBmVxuIgorIlxuIgorIuS7peS4i+OBrueSsOWig+WkieaVsOOBryAlcyDjgYzotbfli5XjgZnjgosgR2l0IOOCteODluODl+ODreOCu+OCueOBq+OCiOOBo+OBpueEoeimluOBleOCjOOCi+OBp+OBl+OCh+OBhjpcbiIKKyJcbiIKKworIzogZ2l0LWd1aS5zaDozNTcwCittc2dpZCAiIgorIlxuIgorIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKKyJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCittc2dzdHIgIiIKKyJcbiIKKyLjgZPjgozjga8gQ3lnd2luIOOBp+mFjeW4g+OBleOCjOOBpuOBhOOCiyBUY2wg44OQ44Kk44OK44Oq44GrXG4iCisi6Zai44GX44Gm44Gu5pei55+l44Gu5ZWP6aGM44Gr44KI44KK44G+44GZIgorCisjOiBnaXQtZ3VpLnNoOjM1NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgorImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgorInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCisifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyLlgIvkurrnmoTjgaogfi8uZ2l0Y29uZmlnIOODleOCoeOCpOODq+WGheOBpyB1c2VyLm5hbWUg44GoIHVzZXIuZW1haWwg44Gu5YCk44KS6Kit5a6aXG4iCisi44GZ44KL44Gu44GM44CBJXMg44Gu6Imv44GE5Luj55So44Go44Gq44KK44G+44GZXG4iCisKKyM6IGxpYi9hYm91dC50Y2w6MjYKK21zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCittc2dzdHIgIkdpdCDjga7jgrDjg6njg5XjgqPjgqvjg6tVSSBnaXQtZ3VpIgorCisjOiBsaWIvYmxhbWUudGNsOjcyCittc2dpZCAiRmlsZSBWaWV3ZXIiCittc2dzdHIgIuODleOCoeOCpOODq+ODlOODpeODvOODryIKKworIzogbGliL2JsYW1lLnRjbDo3OAorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIuOCs+ODn+ODg+ODiDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjcxCittc2dpZCAiQ29weSBDb21taXQiCittc2dzdHIgIuOCs+ODn+ODg+ODiOOCkuOCs+ODlOODvCIKKworIzogbGliL2JsYW1lLnRjbDoyNzUKK21zZ2lkICJGaW5kIFRleHQuLi4iCittc2dzdHIgIuODhuOCreOCueODiOOCkuaknOe0oiIKKworIzogbGliL2JsYW1lLnRjbDoyODQKK21zZ2lkICJEbyBGdWxsIENvcHkgRGV0ZWN0aW9uIgorbXNnc3RyICLjgrPjg5Tjg7zmpJznn6UiCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjg4Cittc2dpZCAiU2hvdyBIaXN0b3J5IENvbnRleHQiCittc2dzdHIgIuaWh+iEiOOCkuimi+OBm+OCiyIKKworIzogbGliL2JsYW1lLnRjbDoyOTEKK21zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgorbXNnc3RyICLopqrjgrPjg5/jg4Pjg4jjgpLoqLvph4giCisKKyM6IGxpYi9ibGFtZS50Y2w6NDUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVhZGluZyAlcy4uLiIKK21zZ3N0ciAiJXMg44KS6Kqt44KT44Gn44GE44G+44GZ4oCmIgorCisjOiBsaWIvYmxhbWUudGNsOjU1NworbXNnaWQgIkxvYWRpbmcgY29weS9tb3ZlIHRyYWNraW5nIGFubm90YXRpb25zLi4uIgorbXNnc3RyICLjgrPjg5Tjg7zjg7vnp7vli5Xov73ot6Hjg4fjg7zjgr/jgpLoqq3jgpPjgafjgYTjgb7jgZnigKYiCisKKyM6IGxpYi9ibGFtZS50Y2w6NTc3Cittc2dpZCAibGluZXMgYW5ub3RhdGVkIgorbXNnc3RyICLooYzjgpLms6jph4jjgZfjgb7jgZfjgZ8iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzY5Cittc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAi5YWD5L2N572u6KGM44Gu5rOo6YeI44OH44O844K/44KS6Kqt44KT44Gn44GE44G+44GZ4oCmIgorCisjOiBsaWIvYmxhbWUudGNsOjc3MgorbXNnaWQgIkFubm90YXRpb24gY29tcGxldGUuIgorbXNnc3RyICLms6jph4jlrozkuobjgZfjgb7jgZfjgZ8iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAyCittc2dpZCAiQnVzeSIKK21zZ3N0ciAi5a6f6KGM5LitIgorCisjOiBsaWIvYmxhbWUudGNsOjgwMworbXNnaWQgIkFubm90YXRpb24gcHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcuIgorbXNnc3RyICLjgZnjgafjgasgYmxhbWUg44OX44Ot44K744K544KS5a6f6KGM5Lit44Gn44GZ44CCIgorCisjOiBsaWIvYmxhbWUudGNsOjg0MgorbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCittc2dzdHIgIuOCs+ODlOODvOaknOefpeOCkuWun+ihjOS4reKApiIKKworIzogbGliL2JsYW1lLnRjbDo5MTAKK21zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCittc2dzdHIgIuazqOmHiOOCkuiqreOBv+i+vOOCk+OBp+OBhOOBvuOBmeKApiIKKworIzogbGliL2JsYW1lLnRjbDo5NjMKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICLkvZzogIU6IgorCisjOiBsaWIvYmxhbWUudGNsOjk2NworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIuOCs+ODn+ODg+ODiOiAhToiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTcyCittc2dpZCAiT3JpZ2luYWwgRmlsZToiCittc2dzdHIgIuWFg+ODleOCoeOCpOODqyIKKworIzogbGliL2JsYW1lLnRjbDoxMDIwCittc2dpZCAiQ2Fubm90IGZpbmQgSEVBRCBjb21taXQ6IgorbXNnc3RyICJIRUFEIOOCs+ODn+ODg+ODiOOBjOimi+OBpOOBi+OCiuOBvuOBm+OCkyIKKworIzogbGliL2JsYW1lLnRjbDoxMDc1Cittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgIuimquOCs+ODn+ODg+ODiOOBjOimi+OBpOOBi+OCiuOBvuOBm+OCkzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA5MAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAi6Kaq44KS6KGo56S644Gn44GN44G+44Gb44KTIgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjMyMAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgImRpZmYg44KS6Kqt44KA6Zqb44Gu44Ko44Op44O844Gn44GZOiIKKworIzogbGliL2JsYW1lLnRjbDoxMjMxCittc2dpZCAiT3JpZ2luYWxseSBCeToiCittc2dzdHIgIuWOn+S9nOiAhToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTIzNworbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICLjg5XjgqHjgqTjg6s6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyNDIKK21zZ2lkICJDb3BpZWQgT3IgTW92ZWQgSGVyZSBCeToiCittc2dzdHIgIuikh+WGmeODu+enu+WLleiAhToiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE0IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE5Cittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICLjg5bjg6njg7Pjg4HjgpLjg4Hjgqfjg4Pjgq/jgqLjgqbjg4giCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIzCittc2dpZCAiQ2hlY2tvdXQiCittc2dzdHIgIuODgeOCp+ODg+OCr+OCouOCpuODiCIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjcgbGliL2JyYW5jaF9jcmVhdGUudGNsOjM1CisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjMwIGxpYi9icm93c2VyLnRjbDoyODIKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi9jaG9vc2VfZm9udC50Y2w6NDMgbGliL21lcmdlLnRjbDoxNzIKKyM6IGxpYi9vcHRpb24udGNsOjEyNSBsaWIvcmVtb3RlX2FkZC50Y2w6MzIgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MgorIzogbGliL3Rvb2xzX2RsZy50Y2w6NDAgbGliL3Rvb2xzX2RsZy50Y2w6MjA0IGxpYi90b29sc19kbGcudGNsOjM1MgorIzogbGliL3RyYW5zcG9ydC50Y2w6MTA4Cittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICLkuK3mraIiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcgbGliL3Rvb2xzX2RsZy50Y2w6MzI4Cittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIuODquODk+OCuOODp+ODsyIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI4MAorbXNnaWQgIk9wdGlvbnMiCittc2dzdHIgIuOCquODl+OCt+ODp+ODsyIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzkgbGliL2JyYW5jaF9jcmVhdGUudGNsOjkyCittc2dpZCAiRmV0Y2ggVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICLjg4jjg6njg4Pjgq3jg7PjgrDjg7vjg5bjg6njg7Pjg4HjgpLjg5Xjgqfjg4Pjg4EiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Cittc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgorbXNnc3RyICLjg63jg7zjgqvjg6vjg7vjg5bjg6njg7Pjg4HjgYvjgonliYrpmaQiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgorbXNnaWQgIkNyZWF0ZSBCcmFuY2giCittc2dzdHIgIuODluODqeODs+ODgeOCkuS9nOaIkCIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI3Cittc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCittc2dzdHIgIuODluODqeODs+ODgeOCkuaWsOimj+S9nOaIkCIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgxCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICLkvZzmiJAiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MAorbXNnaWQgIkJyYW5jaCBOYW1lIgorbXNnc3RyICLjg5bjg6njg7Pjg4HlkI0iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MyBsaWIvcmVtb3RlX2FkZC50Y2w6MzkgbGliL3Rvb2xzX2RsZy50Y2w6NTAKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAi5ZCN5YmNOiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjU4Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoIE5hbWUiCittc2dzdHIgIuODiOODqeODg+OCreODs+OCsOODu+ODluODqeODs+ODgeWQjeOCkuWQiOOCj+OBm+OCiyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Cittc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCittc2dzdHIgIuWIneacn+ODquODk+OCuOODp+ODsyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCittc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCittc2dzdHIgIuaXouWtmOOBruODluODqeODs+ODgeOCkuabtOaWsDoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorbXNnaWQgIk5vIgorbXNnc3RyICLjgYTjgYTjgYgiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAorbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgorbXNnc3RyICLml6npgIHjgorjga7jgb8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQorbXNnaWQgIlJlc2V0IgorbXNnc3RyICLjg6rjgrvjg4Pjg4giCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NworbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgorbXNnc3RyICLkvZzmiJDjgZfjgabjgZnjgZDjg4Hjgqfjg4Pjgq/jgqLjgqbjg4giCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzEKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKK21zZ3N0ciAi44OI44Op44OD44Kt44Oz44Kw44O744OW44Op44Oz44OB44KS6YG45oqe44GX44Gm5LiL44GV44GE44CCIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgorbXNnc3RyICLjg4jjg6njg4Pjgq3jg7PjgrDjg7vjg5bjg6njg7Pjg4EgJXMg44Gv6YGg6ZqU44Oq44Od44K444OI44Oq44Gu44OW44Op44Oz44OB44Gn44Gv44GC44KK44G+44Gb44KT44CCIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTUzIGxpYi9icmFuY2hfcmVuYW1lLnRjbDo4NgorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iCittc2dzdHIgIuODluODqeODs+ODgeWQjeOCkuaMh+WumuOBl+OBpuS4i+OBleOBhOOAgiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycg44Gv44OW44Op44Oz44OB5ZCN44Gr5L2/44GI44G+44Gb44KT44CCIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTUKK21zZ2lkICJEZWxldGUgQnJhbmNoIgorbXNnc3RyICLjg5bjg6njg7Pjg4HliYrpmaQiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgIuODreODvOOCq+ODq+ODu+ODluODqeODs+ODgeOCkuWJiumZpCIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM3Cittc2dpZCAiTG9jYWwgQnJhbmNoZXMiCittc2dzdHIgIuODreODvOOCq+ODq+ODu+ODluODqeODs+ODgSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUyCittc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCittc2dzdHIgIuODnuODvOOCuOa4iOOBv+OBruaZguOBruOBv+WJiumZpCIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICLnhKHmnaHku7bvvIjjg57jg7zjgrjmpJzmn7vjgpLjgZfjgarjgYTvvIkiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCittc2dzdHIgIuS7peS4i+OBruODluODqeODs+ODgeOBryAlcyDjgavlrozlhajjgavjg57jg7zjgrjjgZXjgozjgabjgYTjgb7jgZvjgpM6IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE3Cittc2dpZCAiIgorIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiXG4iCisiRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKyLliYrpmaTjgZfjgZ/jg5bjg6njg7Pjg4HjgpLlm57lvqnjgZnjgovjga7jga/lm7Dpm6PjgafjgZnjgIJcbiIKKyJcbiIKKyLpgbjmip7jgZfjgZ/jg5bjg6njg7Pjg4HjgpLliYrpmaTjgZfjgaboia/jgYTjgafjgZnjgYvvvJ8iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuS7peS4i+OBruODluODqeODs+ODgeOCkuWJiumZpOOBp+OBjeOBvuOBm+OCkzpcbiIKKyIlcyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMgorbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIuODluODqeODs+ODgeOBruWQjeWJjeWkieabtCIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjI2Cittc2dpZCAiUmVuYW1lIgorbXNnc3RyICLlkI3liY3lpInmm7QiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozNgorbXNnaWQgIkJyYW5jaDoiCittc2dzdHIgIuODluODqeODs+ODgToiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOQorbXNnaWQgIk5ldyBOYW1lOiIKK21zZ3N0ciAi5paw44GX44GE5ZCN5YmNOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjc1Cittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgorbXNnc3RyICLlkI3liY3jgpLlpInmm7TjgZnjgovjg5bjg6njg7Pjg4HjgpLpgbjjgpPjgafkuIvjgZXjgYTjgIIiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5NiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiJyVzJ+OBqOOBhOOBhuODluODqeODs+ODgeOBr+aXouOBq+WtmOWcqOOBl+OBvuOBmeOAgiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCittc2dzdHIgIiclcyfjga7lkI3liY3lpInmm7TjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgIIiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICLotbfli5XkuK3igKYiCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNgorbXNnaWQgIkZpbGUgQnJvd3NlciIKK21zZ3N0ciAi44OV44Kh44Kk44Or44O744OW44Op44Km44K2IgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTI2IGxpYi9icm93c2VyLnRjbDoxNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nICVzLi4uIgorbXNnc3RyICIlcyDjgpLjg63jg7zjg4nkuK3igKYiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxODcKK21zZ2lkICJbVXAgVG8gUGFyZW50XSIKK21zZ3N0ciAiW+S4iuS9jeODleOCqeODq+ODgOOBuF0iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNjcgbGliL2Jyb3dzZXIudGNsOjI3MworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCittc2dzdHIgIuePvuWcqOOBruODluODqeODs+ODgeOBruODleOCoeOCpOODq+OCkuimi+OCiyIKKworIzogbGliL2Jyb3dzZXIudGNsOjI3OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM5OAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyOAorbXNnaWQgIkJyb3dzZSIKK21zZ3N0ciAi44OW44Op44Km44K6IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAiJXMg44GL44KJICVzIOOCkuODleOCp+ODg+ODgeOBl+OBpuOBhOOBvuOBmSIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCittc2dzdHIgIuiHtOWRveeahOOCqOODqeODvDogJXMg44KS6Kej5rG644Gn44GN44G+44Gb44KTIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQorIzogbGliL3NzaGtleS50Y2w6NTMKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAi6ZaJ44GY44KLIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAi44OW44Op44Oz44OBJyVzJ+OBr+WtmOWcqOOBl+OBvuOBm+OCk+OAgiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgorbXNnc3RyICInJXMnIOOBq+ewoeaYkyBnaXQtcHVsbCDjgpLoqK3lrprjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ8iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKyLjg5bjg6njg7Pjg4EgJyVzJyDjga/ml6LjgavlrZjlnKjjgZfjgb7jgZnjgIJcbiIKKyJcbiIKKyIlcyDjgavml6npgIHjgorjgafjgY3jgb7jgZvjgpPjgIJcbiIKKyLjg57jg7zjgrjjgYzlv4XopoHjgafjgZnjgIIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiJyVzJyDjg57jg7zjgrjmiKbnlaXjga/jgrXjg53jg7zjg4jjgZXjgozjgabjgYTjgb7jgZvjgpPjgIIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKK21zZ3N0ciAiJyVzJyDjga7mm7TmlrDjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgIIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Cittc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgorbXNnc3RyICLjgqTjg7Pjg4fjg4Pjgq/jgrnjga/ml6Ljgavjg63jg4Pjgq/jgZXjgozjgabjgYTjgb7jgZnjgIIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLmnIDlvozjgavjgrnjgq3jg6Pjg7PjgZfjgZ/nirbmhYvjga/jg6rjg53jgrjjg4jjg6rjga7nirbmhYvjgajlkIjoh7TjgZfjgb7jgZvjgpPjgIJcbiIKKyJcbiIKKyLmnIDlvozjgavjgrnjgq3jg6Pjg7PjgZfjgabku6XlvozjgIHliKXjga4gR2l0IOODl+ODreOCsOODqeODoOOBjOODquODneOCuOODiOODquOCkuWkieabtOOBl+OBpuOBhOOBvuOBmeOAguePvuWcqCIKKyLjga7jg5bjg6njg7Pjg4HjgpLlpInmm7TjgZnjgovliY3jgavjgIHlho3jgrnjgq3jg6Pjg7PjgYzlv4XopoHjgafjgZnjgIJcbiIKKyJcbiIKKyLoh6rli5XnmoTjgavlho3jgrnjgq3jg6Pjg7PjgpLplovlp4vjgZfjgb7jgZnjgIJcbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgorbXNnc3RyICLkvZzmpa3jg4fjgqPjg6zjgq/jg4jjg6rjgpIgJyVzJyDjgavmm7TmlrDjgZfjgabjgYTjgb7jgZnigKYiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Cittc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCittc2dzdHIgIuODgeOCp+ODg+OCr+OCouOCpuODiOOBleOCjOOBn+ODleOCoeOCpOODqyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICInJXMnIOOBruODgeOCp+ODg+OCr+OCouOCpuODiOOCkuS4reatouOBl+OBvuOBl+OBn++8iOODleOCoeOCpOODq+avjuOBruODnuODvOOCuOOBjOW/heimgeOBp+OBme+8ieOAgiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKK21zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKK21zZ3N0ciAi44OV44Kh44Kk44Or5q+O44Gu44Oe44O844K444GM5b+F6KaB44Gn44GZ44CCIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgorbXNnc3RyICLjg5bjg6njg7Pjg4EgJyVzJyDjgavmu57jgb7jgorjgb7jgZnjgIIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NDUyCittc2dpZCAiIgorIllvdSBhcmUgbm8gbG9uZ2VyIG9uIGEgbG9jYWwgYnJhbmNoLlxuIgorIlxuIgorIklmIHlvdSB3YW50ZWQgdG8gYmUgb24gYSBicmFuY2gsIGNyZWF0ZSBvbmUgbm93IHN0YXJ0aW5nIGZyb20gJ1RoaXMgRGV0YWNoZWQgIgorIkNoZWNrb3V0Jy4iCittc2dzdHIgIiIKKyLjg63jg7zjgqvjg6vjg7vjg5bjg6njg7Pjg4HjgYvjgonpm6Ljgozjgb7jgZnjgIJcbiIKKyJcbiIKKyLjg5bjg6njg7Pjg4HkuIrjgavmu57jgb7jgorjgZ/jgYTjgajjgY3jga/jgIHjgZPjga7jgIzliIbpm6LjgZXjgozjgZ/jg4Hjgqfjg4Pjgq/jgqLjgqbjg4jjgI3jgYvjgonmlrDopo/jg5bjg6njg7MiCisi44OB44KS6ZaL5aeL44GX44Gm44GP44Gg44GV44GE44CCIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMyBsaWIvY2hlY2tvdXRfb3AudGNsOjUwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgorbXNnc3RyICInJXMnIOOCkuODgeOCp+ODg+OCr+OCouOCpuODiOOBl+OBvuOBl+OBnyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorbXNnc3RyICInJXMnIOOCkiAnJXMnIOOBq+ODquOCu+ODg+ODiOOBmeOCi+OBqOOAgeS7peS4i+OBruOCs+ODn+ODg+ODiOOBjOWkseOBquOCj+OCjOOBvuOBmToiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Cittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAi5aSx44Gq44KP44KM44Gf44Kz44Of44OD44OI44KS5Zue5b6p44GZ44KL44Gu44Gv57Ch5Y2Y44Gn44Gv44GC44KK44G+44Gb44KT44CCIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICclcyc/IgorbXNnc3RyICInJXMnIOOCkuODquOCu+ODg+ODiOOBl+OBvuOBmeOBi++8nyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjcgbGliL21lcmdlLnRjbDoxNjQgbGliL3Rvb2xzX2RsZy50Y2w6MzQzCittc2dpZCAiVmlzdWFsaXplIgorbXNnc3RyICLlj6/oppbljJYiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKKyJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAiIgorIuePvuWcqOOBruODluODqeODs+ODgeOCkuioreWumuOBp+OBjeOBvuOBm+OCk+OAglxuIgorIlxuIgorIuS9nOalreODh+OCo+ODrOOCr+ODiOODquOBr+mDqOWIhueahOOBq+OBl+OBi+WIh+OCiuabv+OCj+OBo+OBpuOBhOOBvuOBm+OCk+OAguODleOCoeOCpOODq+OBruabtOaWsOOBq+OBr+aIkOWKn+OBlyIKKyLjgb7jgZfjgZ/jgYzjgIEgR2l0IOOBruWGhemDqOODh+ODvOOCv+OCkuabtOaWsOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn+OAglxuIgorIui1t+OBk+OCi+OBr+OBmuOBruOBquOBhOOCqOODqeODvOOBp+OBmeOAguOBguOBjeOCieOCgeOBpiAlcyDjgpLntYLkuobjgZfjgb7jgZnjgIIiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MzkKK21zZ2lkICJTZWxlY3QiCittc2dzdHIgIumBuOaKniIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo1MworbXNnaWQgIkZvbnQgRmFtaWx5IgorbXNnc3RyICLjg5Xjgqnjg7Pjg4jjg7vjg5XjgqHjg5/jg6rjg7wiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzQKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIuODleOCqeODs+ODiOOBruWkp+OBjeOBlSIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo5MQorbXNnaWQgIkZvbnQgRXhhbXBsZSIKK21zZ3N0ciAi44OV44Kp44Oz44OI44O744K144Oz44OX44OrIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworbXNnaWQgIiIKKyJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKKyJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorbXNnc3RyICIiCisi44GT44KM44Gv44K144Oz44OX44Or5paH44Gn44GZ44CCXG4iCisi44GT44Gu44OV44Kp44Oz44OI44GM5rCX44Gr5YWl44KM44Gw44GK5L2/44GE44Gr44Gq44KM44G+44GZ44CCIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI4Cittc2dpZCAiR2l0IEd1aSIKK21zZ3N0ciAiR2l0IEdVSSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4NgorbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKK21zZ3N0ciAi5paw44GX44GE44Oq44Od44K444OI44Oq44KS5L2c44KLIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzCittc2dpZCAiTmV3Li4uIgorbXNnc3RyICLmlrDopo/igKYiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCittc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAi5pei5a2Y44Oq44Od44K444OI44Oq44KS6KSH6KO944GZ44KLIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNgorbXNnaWQgIkNsb25lLi4uIgorbXNnc3RyICLopIfoo73igKYiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNgorbXNnaWQgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAi5pei5a2Y44Oq44Od44K444OI44Oq44KS6ZaL44GPIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExOQorbXNnaWQgIk9wZW4uLi4iCittc2dzdHIgIumWi+OBj+KApiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKK21zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgorbXNnc3RyICLmnIDov5Hkvb/jgaPjgZ/jg6rjg53jgrjjg4jjg6oiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTM4Cittc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCittc2dzdHIgIuacgOi/keS9v+OBo+OBn+ODquODneOCuOODiOODquOCkumWi+OBjyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAi44Oq44Od44K444OI44OqICVzIOOCkuS9nOijveOBp+OBjeOBvuOBm+OCkzoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzkxCittc2dpZCAiRGlyZWN0b3J5OiIKK21zZ3N0ciAi44OH44Kj44Os44Kv44OI44OqOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NTAKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1MgorbXNnaWQgIkdpdCBSZXBvc2l0b3J5IgorbXNnc3RyICJHSVQg44Oq44Od44K444OI44OqIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIuODh+OCo+ODrOOCr+ODiOODqiAnJXMnIOOBr+aXouOBq+WtmOWcqOOBl+OBvuOBmeOAgiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi44OV44Kh44Kk44OrICclcycg44Gv5pei44Gr5a2Y5Zyo44GX44G+44GZ44CCIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NgorbXNnaWQgIkNsb25lIgorbXNnc3RyICLopIfoo70iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc5Cittc2dpZCAiU291cmNlIExvY2F0aW9uOiIKK21zZ3N0ciAi44K944O844K544Gu5L2N572uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MAorbXNnaWQgIlRhcmdldCBEaXJlY3Rvcnk6IgorbXNnc3RyICLlhYjjg4fjgqPjg6zjgq/jg4jjg6o6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgorbXNnaWQgIkNsb25lIFR5cGU6IgorbXNnc3RyICLopIfoo73mlrnlvI86IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOAorbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKK21zZ3N0ciAi5qiZ5rqWKOmrmOmAn+ODu+S4reWGl+mVt+W6puODu+ODj+ODvOODieODquODs+OCrykiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0Cittc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgorbXNnc3RyICLlhajopIflhpko5L2O6YCf44O75YaX6ZW344OQ44OD44Kv44Ki44OD44OXKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjAKK21zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKK21zZ3N0ciAi5YWx5pyJKOacgOmrmOmAn+ODu+mdnuaOqOWlqOODu+ODkOODg+OCr+OCouODg+ODl+eEoeOBlykiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTU2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjAzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDU4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiR2l0IOODquODneOCuOODiOODquOBp+OBr+OBguOCiuOBvuOBm+OCkzogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCittc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICLmqJnmupbmlrnlvI/jga/lkIzkuIDoqIjnrpfmqZ/kuIrjga7jg6rjg53jgrjjg4jjg6rjgavjga7jgb/kvb/jgYjjgb7jgZnjgIIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk2Cittc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAi5YWx5pyJ5pa55byP44Gv5ZCM5LiA6KiI566X5qmf5LiK44Gu44Oq44Od44K444OI44Oq44Gr44Gu44G/5L2/44GI44G+44GZ44CCIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiJyVzJyDjga/ml6LjgavlrZjlnKjjgZfjgb7jgZnjgIIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4Cittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCittc2dzdHIgIm9yaWdpbiDjgpLoqK3lrprjgafjgY3jgb7jgZvjgpPjgafjgZfjgZ8iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi44Kq44OW44K444Kn44Kv44OI44KS5pWw44GI44Gm44GE44G+44GZIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MQorbXNnaWQgImJ1Y2tldHMiCittc2dzdHIgIuODkOOCseODhCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCittc2dzdHIgIm9iamVjdHMvaW5mby9hbHRlcm5hdGVzIOOCkuikh+WGmeOBp+OBjeOBvuOBm+OCkzogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKK21zZ3N0ciAiJXMg44GL44KJ6KSH6KO944GZ44KL5YaF5a6544Gv44GC44KK44G+44Gb44KTIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjkKK21zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCittc2dzdHIgIidtYXN0ZXInIOODluODqeODs+ODgeOBjOWIneacn+WMluOBleOCjOOBpuOBhOOBvuOBm+OCkyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTYKK21zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgorbXNnc3RyICLjg4/jg7zjg4njg6rjg7Pjgq/jgYzkvZzjgozjgarjgYTjga7jgafjgIHjgrPjg5Tjg7zjgZfjgb7jgZkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBmcm9tICVzIgorbXNnc3RyICIlcyDjgYvjgonopIfoo73jgZfjgabjgYTjgb7jgZkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU5Cittc2dpZCAiQ29weWluZyBvYmplY3RzIgorbXNnc3RyICLjgqrjg5bjgrjjgqfjgq/jg4jjgpLopIflhpnjgZfjgabjgYTjgb7jgZkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzYwCittc2dpZCAiS2lCIgorbXNnc3RyICJLaUIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKK21zZ3N0ciAi44Kq44OW44K444Kn44Kv44OI44KS6KSH5YaZ44Gn44GN44G+44Gb44KTOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIuOCquODluOCuOOCp+OCr+ODiOOCkumAo+e1kOOBl+OBpuOBhOOBvuOBmSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTUKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICLjgqrjg5bjgrjjgqfjgq/jg4giCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGhhcmRsaW5rIG9iamVjdDogJXMiCittc2dzdHIgIuOCquODluOCuOOCp+OCr+ODiOOCkuODj+ODvOODieODquODs+OCr+OBp+OBjeOBvuOBm+OCkzogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4Cittc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi44OW44Op44Oz44OB44KE44Kq44OW44K444Kn44Kv44OI44KS5Y+W5b6X44Gn44GN44G+44Gb44KT44CC44Kz44Oz44K944O844Or5Ye65Yqb44KS6KaL44Gm5LiL44GV44GEIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2OQorbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi44K/44Kw44KS5Y+W5b6X44Gn44GN44G+44Gb44KT44CC44Kz44Oz44K944O844Or5Ye65Yqb44KS6KaL44Gm5LiL44GV44GEIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5MworbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIkhFQUQg44KS56K65a6a44Gn44GN44G+44Gb44KT44CC44Kz44Oz44K944O844Or5Ye65Yqb44KS6KaL44Gm5LiL44GV44GEIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICIlcyDjgpLmjoPpmaTjgafjgY3jgb7jgZvjgpMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA4Cittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAi6KSH5YaZ44Gr5aSx5pWX44GX44G+44GX44Gf44CCIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAi44OH44OV44Kp44O844Or44OI44O744OW44Op44Oz44OB44GM5Y+W5b6X44GV44KM44G+44Gb44KT44Gn44GX44GfIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKK21zZ3N0ciAiJXMg44KS44Kz44Of44OD44OI44Go44GX44Gm6Kej6YeI44Gn44GN44G+44Gb44KTIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLkvZzmpa3jg4fjgqPjg6zjgq/jg4jjg6rjgpLkvZzmiJDjgZfjgabjgYTjgb7jgZkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKKyM6IGxpYi9pbmRleC50Y2w6MTk4Cittc2dpZCAiZmlsZXMiCittc2dzdHIgIuODleOCoeOCpOODqyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjgKK21zZ2lkICJJbml0aWFsIGZpbGUgY2hlY2tvdXQgZmFpbGVkLiIKK21zZ3N0ciAi5Yid5pyf44OB44Kn44OD44Kv44Ki44Km44OI44Gr5aSx5pWX44GX44G+44GX44GfIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKK21zZ2lkICJPcGVuIgorbXNnc3RyICLplovjgY8iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMQorbXNnaWQgIlJlcG9zaXRvcnk6IgorbXNnc3RyICLjg6rjg53jgrjjg4jjg6o6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAi44Oq44Od44K444OI44OqICVzIOOCkumWi+OBkeOBvuOBm+OCkzoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MworbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCittc2dzdHIgIuWIhumbouOBleOCjOOBn+ODgeOCp+ODg+OCr+OCouOCpuODiCIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjYwCittc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCittc2dzdHIgIuODquODk+OCuOODp+ODs+W8jzoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NAorbXNnaWQgIkxvY2FsIEJyYW5jaCIKK21zZ3N0ciAi44Ot44O844Kr44Or44O744OW44Op44Oz44OBIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzkKK21zZ2lkICJUcmFja2luZyBCcmFuY2giCittc2dzdHIgIuODiOODqeODg+OCreODs+OCsOODu+ODluODqeODs+ODgSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjg0IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzgKK21zZ2lkICJUYWciCittc2dzdHIgIuOCv+OCsCIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmV2aXNpb246ICVzIgorbXNnc3RyICLnhKHlirnjgarjg6rjg5Pjgrjjg6fjg7M6ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Cittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICLjg6rjg5Pjgrjjg6fjg7PjgYzmnKrpgbjmip7jgafjgZnjgIIiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDYKK21zZ2lkICJSZXZpc2lvbiBleHByZXNzaW9uIGlzIGVtcHR5LiIKK21zZ3N0ciAi44Oq44OT44K444On44Oz5byP44GM56m644Gn44GZ44CCIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMxCittc2dpZCAiVXBkYXRlZCIKK21zZ3N0ciAi5pu05paw44GX44G+44GX44GfIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Cittc2dpZCAiVVJMIgorbXNnc3RyICJVUkwiCisKKyM6IGxpYi9jb21taXQudGNsOjkKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJcbiIKKyJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgorInRvIGFtZW5kLlxuIgorbXNnc3RyICIiCisi6KiC5q2j44GZ44KL44Kz44Of44OD44OI44GM44Gd44KC44Gd44KC44GC44KK44G+44Gb44KT44CCXG4iCisiXG4iCisi44GT44KM44GL44KJ5L2c44KL44Gu44Gv5pyA5Yid44Gu44Kz44Of44OD44OI44Gn44GZ44CC44Gd44Gu5YmN44Gr44Gv44G+44Gg6KiC5q2j44GZ44KL44KI44GG44Gq44Kz44Of44OD44OI44Gv44GCIgorIuOCiuOBvuOBm+OCk+OAglxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxOAorbXNnaWQgIiIKKyJDYW5ub3QgYW1lbmQgd2hpbGUgbWVyZ2luZy5cbiIKKyJcbiIKKyJZb3UgYXJlIGN1cnJlbnRseSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgdGhhdCBoYXMgbm90IGJlZW4gZnVsbHkgIgorImNvbXBsZXRlZC4gIFlvdSBjYW5ub3QgYW1lbmQgdGhlIHByaW9yIGNvbW1pdCB1bmxlc3MgeW91IGZpcnN0IGFib3J0IHRoZSAiCisiY3VycmVudCBtZXJnZSBhY3Rpdml0eS5cbiIKK21zZ3N0ciAiIgorIuODnuODvOOCuOS4reOBq+OCs+ODn+ODg+ODiOOBruioguato+OBr+OBp+OBjeOBvuOBm+OCk+OAglxuIgorIlxuIgorIuePvuWcqOOBr+OBvuOBoOODnuODvOOCuOOBrumAlOS4reOBp+OBmeOAguWFiOOBq+OBk+OBruODnuODvOOCuOOCkuS4reatouOBl+OBquOBhOOBqOOAgeWJjeOBruOCs+ODn+ODg+ODiOOBruioguatoyIKKyLjga/jgafjgY3jgb7jgZvjgpNcbiIKKworIzogbGliL2NvbW1pdC50Y2w6NDgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCittc2dzdHIgIuioguato+OBmeOCi+OCs+ODn+ODg+ODiOOBruODh+ODvOOCv+OCkuiqreOCgeOBvuOBm+OCkzoiCisKKyM6IGxpYi9jb21taXQudGNsOjc1Cittc2dpZCAiVW5hYmxlIHRvIG9idGFpbiB5b3VyIGlkZW50aXR5OiIKK21zZ3N0ciAi44Om44O844K244Gu5q2j5L2T44KS56K66KqN44Gn44GN44G+44Gb44KTOiIKKworIzogbGliL2NvbW1pdC50Y2w6ODAKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICJHSVRfQ09NTUlUVEVSX0lERU5UIOOBjOeEoeWKueOBp+OBmToiCisKKyM6IGxpYi9jb21taXQudGNsOjEyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgorbXNnc3RyICLorablkYo6IFRjbCDjga/jgqjjg7PjgrPjg7zjg4fjgqPjg7PjgrAgJyVzJyDjgpLjgrXjg53jg7zjg4jjgZfjgabjgYTjgb7jgZvjgpMiCisKKyM6IGxpYi9jb21taXQudGNsOjE0OQorbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLmnIDlvozjgavjgrnjgq3jg6Pjg7PjgZfjgZ/nirbmhYvjga/jg6rjg53jgrjjg4jjg6rjga7nirbmhYvjgajlkIjoh7TjgZfjgb7jgZvjgpPjgIJcbiIKKyJcbiIKKyLmnIDlvozjgavjgrnjgq3jg6Pjg7PjgZfjgabku6XlvozjgIHliKXjga4gR2l0IOODl+ODreOCsOODqeODoOOBjOODquODneOCuOODiOODquOCkuWkieabtOOBl+OBpuOBhOOBvuOBmeOAguaWsOOBlyIKKyLjgY/jgrPjg5/jg4Pjg4jjgZnjgovliY3jgavjgIHlho3jgrnjgq3jg6Pjg7PjgYzlv4XopoHjgafjgZnjgIJcbiIKKyJcbiIKKyLoh6rli5XnmoTjgavlho3jgrnjgq3jg6Pjg7PjgpLplovlp4vjgZfjgb7jgZnjgIJcbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKyLjg57jg7zjgrjjgZfjgabjgYTjgarjgYTjg5XjgqHjgqTjg6vjga/jgrPjg5/jg4Pjg4jjgafjgY3jgb7jgZvjgpPjgIJcbiIKKyJcbiIKKyLjg5XjgqHjgqTjg6sgJXMg44Gr44Gv44Oe44O844K46KGd56qB44GM5q6L44Gj44Gm44GE44G+44GZ44CC44G+44Ga6Kej5rG644GX44Gm44Kz44Of44OD44OI5LqI5a6a44Gr5Yqg44GI44KL5b+FIgorIuimgeOBjOOBguOCiuOBvuOBmeOAglxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgorIlxuIgorIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCittc2dzdHIgIiIKKyLkuI3mmI7jgarjg5XjgqHjgqTjg6vnirbmhYsgJXMg44Gn44GZ44CCXG4iCisiXG4iCisi44OV44Kh44Kk44OrICVzIOOBr+acrOODl+ODreOCsOODqeODoOOBp+OBr+OCs+ODn+ODg+ODiOOBp+OBjeOBvuOBm+OCk+OAglxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODgKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuOCs+ODn+ODg+ODiOOBmeOCi+WkieabtOOBjOOBguOCiuOBvuOBm+OCk+OAglxuIgorIlxuIgorIuacgOS9juS4gOOBpOOBruWkieabtOOCkuOCs+ODn+ODg+ODiOS6iOWumuOBq+WKoOOBiOOBpuOBi+OCieOCs+ODn+ODg+ODiOOBl+OBpuS4i+OBleOBhOOAglxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMDMKK21zZ2lkICIiCisiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiXG4iCisiLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgorIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCisiLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorbXNnc3RyICIiCisi44Kz44Of44OD44OI44O744Oh44OD44K744O844K444KS5YWl5Yqb44GX44Gm5LiL44GV44GE44CCXG4iCisiXG4iCisi5q2j44GX44GE44Kz44Of44OD44OI44O744Oh44OD44K744O844K444GvOlxuIgorIlxuIgorIi0g56ys77yR6KGMOiDkvZXjgpLjgZfjgZ/jgYvjgIHjgpLvvJHooYzjgafopoHntITjgIJcbiIKKyItIOesrO+8kuihjDog56m655m9XG4iCisiLSDmrovjgorjga7ooYw6IOOBquOBnOOAgeOBk+OBruWkieabtOOBjOiJr+OBhOWkieabtOOBi+OAgeOBruiqrOaYjuOAglxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzQKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAi44Kz44Of44OD44OI5YmN44OV44OD44Kv44KS5a6f6KGM5Lit44O744O744O7IgorCisjOiBsaWIvY29tbWl0LnRjbDoyNDkKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKK21zZ3N0ciAi44Kz44Of44OD44OI5YmN44OV44OD44Kv44GM44Kz44Of44OD44OI44KS5ouS5ZCm44GX44G+44GX44GfIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNzIKK21zZ2lkICJDYWxsaW5nIGNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAi44Kz44Of44OD44OI44O744Oh44OD44K744O844K444O744OV44OD44Kv44KS5a6f6KGM5Lit44O744O744O7IgorCisjOiBsaWIvY29tbWl0LnRjbDoyODcKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAi44Kz44Of44OD44OI44O744Oh44OD44K744O844K444O744OV44OD44Kv44GM44Kz44Of44OD44OI44KS5ouS5ZCm44GX44G+44GX44GfIgorCisjOiBsaWIvY29tbWl0LnRjbDozMDAKK21zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCittc2dzdHIgIuWkieabtOeCueOCkuOCs+ODn+ODg+ODiOS4reODu+ODu+ODuyIKKworIzogbGliL2NvbW1pdC50Y2w6MzE2Cittc2dpZCAid3JpdGUtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICJ3cml0ZS10cmVlIOOBjOWkseaVl+OBl+OBvuOBl+OBnzoiCisKKyM6IGxpYi9jb21taXQudGNsOjMxNyBsaWIvY29tbWl0LnRjbDozNjEgbGliL2NvbW1pdC50Y2w6MzgyCittc2dpZCAiQ29tbWl0IGZhaWxlZC4iCittc2dzdHIgIuOCs+ODn+ODg+ODiOOBq+WkseaVl+OBl+OBvuOBl+OBn+OAgiIKKworIzogbGliL2NvbW1pdC50Y2w6MzM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIKK21zZ3N0ciAi44Kz44Of44OD44OIICVzIOOBr+WjiuOCjOOBpuOBhOOBvuOBmSIKKworIzogbGliL2NvbW1pdC50Y2w6MzM5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisi44Kz44Of44OD44OI44GZ44KL5aSJ5pu044GM44GC44KK44G+44Gb44KT44CCXG4iCisiXG4iCisi44Oe44O844K444Gn44Gq44GP44CB44G+44Gf44CB5LiA44Gk44KC5aSJ5pu054K544GM44GC44KK44G+44Gb44KT44CCXG4iCisiXG4iCisi6Ieq5YuV55qE44Gr5YaN44K544Kt44Oj44Oz44KS6ZaL5aeL44GX44G+44GZ44CCXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjM0NgorbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKK21zZ3N0ciAi44Kz44Of44OD44OI44GZ44KL5aSJ5pu044GM44GC44KK44G+44Gb44KT44CCIgorCisjOiBsaWIvY29tbWl0LnRjbDozNjAKK21zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICJjb21taXQtdHJlZSDjgYzlpLHmlZfjgZfjgb7jgZfjgZ86IgorCisjOiBsaWIvY29tbWl0LnRjbDozODEKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgInVwZGF0ZS1yZWYg44GM5aSx5pWX44GX44G+44GX44GfOiIKKworIzogbGliL2NvbW1pdC50Y2w6NDY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgorbXNnc3RyICLjgrPjg5/jg4Pjg4ggJXMg44KS5L2c5oiQ44GX44G+44GX44GfOiAlcyIKKworIzogbGliL2NvbnNvbGUudGNsOjU5Cittc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAi5a6f6KGM5Lit4oCm44GK5b6F44Gh5LiL44GV44GE4oCmIgorCisjOiBsaWIvY29uc29sZS50Y2w6MTg2Cittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAi5oiQ5YqfIgorCisjOiBsaWIvY29uc29sZS50Y2w6MjAwCittc2dpZCAiRXJyb3I6IENvbW1hbmQgRmFpbGVkIgorbXNnc3RyICLjgqjjg6njg7w6IOOCs+ODnuODs+ODieOBjOWkseaVl+OBl+OBvuOBl+OBnyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0MworbXNnaWQgIk51bWJlciBvZiBsb29zZSBvYmplY3RzIgorbXNnc3RyICLjgbDjgonjgbDjgonjgarjgqrjg5bjgrjjgqfjgq/jg4jjga7mlbAiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAi44Gw44KJ44Gw44KJ44Gq44Kq44OW44K444Kn44Kv44OI44Gu5L2/55So44GZ44KL44OH44Kj44K544Kv6YePIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ1Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLjg5Hjg4Pjgq/jgZXjgozjgZ/jgqrjg5bjgrjjgqfjgq/jg4jjga7mlbAiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKK21zZ2lkICJOdW1iZXIgb2YgcGFja3MiCittc2dzdHIgIuODkeODg+OCr+OBruaVsCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NworbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAi44OR44OD44Kv44GV44KM44Gf44Kq44OW44K444Kn44Kv44OI44Gu5L2/55So44GZ44KL44OH44Kj44K544Kv6YePIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ4Cittc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKK21zZ3N0ciAi44OR44OD44Kv44Gr5a2Y5Zyo44GZ44KL44Gu44Gn5o2o44Gm44Gm6Imv44GE44Kq44OW44K444Kn44Kv44OI44Gu5pWwIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ5Cittc2dpZCAiR2FyYmFnZSBmaWxlcyIKK21zZ3N0ciAi44K044Of44OV44Kh44Kk44OrIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjcyCittc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi44OH44O844K/44OZ44O844K55Zyn57iuIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjgzCittc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCittc2dzdHIgImZzY2stb2JqZWN0cyDjgafjgqrjg5bjgrjjgqfjgq/jg4jjg7vjg4fjg7zjgr/jg5njg7zjgrnjgpLmpJzoqLzjgZfjgabjgYTjgb7jgZkiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2UuXG4iCisiXG4iCisiQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCittc2dzdHIgIiIKKyLjgZPjga7jg6rjg53jgrjjg4jjg6rjgavjga/jgYrjgYrjgojjgZ0gJWkg5YCL44Gu5YCL5Yil44Kq44OW44K444Kn44Kv44OI44GM44GC44KK44G+44GZXG4iCisiXG4iCisi5pyA6YGp44Gq5oCn6IO944KS5L+d44Gk44Gf44KB44Gr44CB44OH44O844K/44OZ44O844K544KS5Zyn57iu44GZ44KL44GT44Go44KS5o6o5aWo44GX44G+44GZXG4iCisiXG4iCisi44OH44O844K/44OZ44O844K544KS5Zyn57iu44GX44G+44GZ44GL77yfIgorCisjOiBsaWIvZGF0ZS50Y2w6MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgorbXNnc3RyICJHaXQg44GL44KJ5Ye644Gf54Sh5Yq544Gq5pel5LuYOiAlcyIKKworIzogbGliL2RpZmYudGNsOjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgorIlxuIgorIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgorIlxuIgorIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKKyJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgorInRoZSBzYW1lIHN0YXRlLiIKK21zZ3N0ciAiIgorIuWkieabtOOBjOOBguOCiuOBvuOBm+OCk+OAglxuIgorIlxuIgorIiVzIOOBq+OBr+WkieabtOOBjOOBguOCiuOBvuOBm+OCk+OAglxuIgorIlxuIgorIuOBk+OBruODleOCoeOCpOODq+OBruWkieabtOaZguWIu+OBr+S7luOBruOCouODl+ODquOCseODvOOCt+ODp+ODs+OBq+OCiOOBo+OBpuabtOaWsOOBleOCjOOBpuOBhOOBvuOBmeOBjOODleOCoeOCpCIKKyLjg6vlhoXlrrnjgavjga/lpInmm7TjgYzjgYLjgorjgb7jgZvjgpPjgIJcbiIKKyJcbiIKKyLlkIzmp5jjgarnirbmhYvjga7jg5XjgqHjgqTjg6vjgpLmjqLjgZnjgZ/jgoHjgavjgIHoh6rli5XnmoTjgavlho3jgrnjgq3jg6Pjg7PjgpLplovlp4vjgZfjgb7jgZnjgIIiCisKKyM6IGxpYi9kaWZmLnRjbDoxMDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iCittc2dzdHIgIiVzIOOBruWkieabtOeCueOCkuODreODvOODieS4reKApiIKKworIzogbGliL2RpZmYudGNsOjEyNQorbXNnaWQgIiIKKyJMT0NBTDogZGVsZXRlZFxuIgorIlJFTU9URTpcbiIKK21zZ3N0ciAiIgorIkxPQ0FMOiDliYrpmaRcbiIKKyJSZW1vdGU6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzAKK21zZ2lkICIiCisiUkVNT1RFOiBkZWxldGVkXG4iCisiTE9DQUw6XG4iCittc2dzdHIgIiIKKyJSRU1PVEU6IOWJiumZpFxuIgorIkxPQ0FMOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTM3Cittc2dpZCAiTE9DQUw6XG4iCittc2dzdHIgIkxPQ0FMOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTQwCittc2dpZCAiUkVNT1RFOlxuIgorbXNnc3RyICJSRU1PVEVcbiIKKworIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCittc2dzdHIgIiVzIOOCkuihqOekuuOBp+OBjeOBvuOBm+OCkyIKKworIzogbGliL2RpZmYudGNsOjIwMworbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCittc2dzdHIgIuODleOCoeOCpOODq+OCkuiqreOCgOmam+OBruOCqOODqeODvOOBp+OBmToiCisKKyM6IGxpYi9kaWZmLnRjbDoyMTAKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCittc2dzdHIgIkdpdCDjg6rjg53jgrjjg4jjg6oo44K144OW44OX44Ot44K444Kn44Kv44OIKSIKKworIzogbGliL2RpZmYudGNsOjIyMgorbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKK21zZ3N0ciAiKiDjg5DjgqTjg4rjg6rjg5XjgqHjgqTjg6so5YaF5a6544Gv6KGo56S644GX44G+44Gb44KTKSIKKworIzogbGliL2RpZmYudGNsOjIyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgorIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgorbXNnc3RyICIiCisiKiDnrqHnkIblpJbjga7jg5XjgqHjgqTjg6vjga7lpKfjgY3jgZXjga8gJWQg44OQ44Kk44OI44Gn44GZ44CCXG4iCisiKiDmnIDliJ3jga4gJWQg44OQ44Kk44OI44Gg44GR6KGo56S644GX44Gm44GE44G+44GZ44CCXG4iCisKKyM6IGxpYi9kaWZmLnRjbDoyMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiKiBVbnRyYWNrZWQgZmlsZSBjbGlwcGVkIGhlcmUgYnkgJXMuXG4iCisiKiBUbyBzZWUgdGhlIGVudGlyZSBmaWxlLCB1c2UgYW4gZXh0ZXJuYWwgZWRpdG9yLlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiKiAlcyDjga/nrqHnkIblpJbjga7jg5XjgqHjgqTjg6vjgpLjgZPjgZPjgafliIfjgorjgYrjgajjgZfjgb7jgZfjgZ/jgIJcbiIKKyIqIOWFqOS9k+OCkuimi+OCi+OBq+OBr+WklumDqOOCqOODh+OCo+OCv+OCkuS9v+OBo+OBpuOBj+OBoOOBleOBhOOAglxuIgorCisjOiBsaWIvZGlmZi50Y2w6NDgyCittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIumBuOaKnuOBleOCjOOBn+ODkeODg+ODgeOCkuOCs+ODn+ODg+ODiOS6iOWumuOBi+OCieWkluOBm+OBvuOBm+OCk+OAgiIKKworIzogbGliL2RpZmYudGNsOjQ4OQorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAi6YG45oqe44GV44KM44Gf44OR44OD44OB44KS44Kz44Of44OD44OI5LqI5a6a44Gr5Yqg44GI44KJ44KM44G+44Gb44KT44CCIgorCisjOiBsaWIvZGlmZi50Y2w6NTY4Cittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIumBuOaKnuOBleOCjOOBn+ODkeODg+ODgeihjOOCkuOCs+ODn+ODg+ODiOS6iOWumuOBi+OCieWkluOBm+OBvuOBm+OCk+OAgiIKKworIzogbGliL2RpZmYudGNsOjU3NgorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAi6YG45oqe44GV44KM44Gf44OR44OD44OB6KGM44KS44Kz44Of44OD44OI5LqI5a6a44Gr5Yqg44GI44KJ44KM44G+44Gb44KT44CCIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0MworbXNnaWQgIkRlZmF1bHQiCittc2dzdHIgIuODh+ODleOCqeODvOODq+ODiCIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gKCVzKSIKK21zZ3N0ciAi44K344K544OG44OgICglcykiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Cittc2dpZCAiT3RoZXIiCittc2dzdHIgIuOBneOBruS7liIKKworIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNAorbXNnaWQgImVycm9yIgorbXNnc3RyICLjgqjjg6njg7wiCisKKyM6IGxpYi9lcnJvci50Y2w6MzYKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICLorablkYoiCisKKyM6IGxpYi9lcnJvci50Y2w6OTQKK21zZ2lkICJZb3UgbXVzdCBjb3JyZWN0IHRoZSBhYm92ZSBlcnJvcnMgYmVmb3JlIGNvbW1pdHRpbmcuIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jjgZnjgovliY3jgavjgIHku6XkuIrjga7jgqjjg6njg7zjgpLkv67mraPjgZfjgabkuIvjgZXjgYQiCisKKyM6IGxpYi9pbmRleC50Y2w6NgorbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKK21zZ3N0ciAi44Kk44Oz44OH44OD44Kv44K544KS44Ot44OD44Kv44Gn44GN44G+44Gb44KTIgorCisjOiBsaWIvaW5kZXgudGNsOjE1Cittc2dpZCAiSW5kZXggRXJyb3IiCittc2dzdHIgIue0ouW8leOCqOODqeODvCIKKworIzogbGliL2luZGV4LnRjbDoxNworbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvICIKKyJyZXN5bmNocm9uaXplIGdpdC1ndWkuIgorbXNnc3RyICIiCisiR0lUIOOCpOODs+ODh+ODg+OCr+OCueOBruabtOaWsOOBjOWkseaVl+OBl+OBvuOBl+OBn+OAgmdpdC1ndWkg44Go5ZCM5pyf44KS44Go44KL44Gf44KB44Gr5YaN44K544Kt44Oj44Oz44GXIgorIuOBvuOBmeOAgiIKKworIzogbGliL2luZGV4LnRjbDoyOAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICLntprooYwiCisKKyM6IGxpYi9pbmRleC50Y2w6MzEKK21zZ2lkICJVbmxvY2sgSW5kZXgiCittc2dzdHIgIuOCpOODs+ODh+ODg+OCr+OCueOBruODreODg+OCr+ino+mZpCIKKworIzogbGliL2luZGV4LnRjbDoyODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgIuOCs+ODn+ODg+ODiOOBi+OCiSAnJXMnIOOCkumZjeOCjeOBmSIKKworIzogbGliL2luZGV4LnRjbDozMjgKK21zZ2lkICJSZWFkeSB0byBjb21taXQuIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jmupblgpnlrozkuoYiCisKKyM6IGxpYi9pbmRleC50Y2w6MzQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICLjgrPjg5/jg4Pjg4jjgasgJXMg44KS5Yqg44GI44Gm44GE44G+44GZIgorCisjOiBsaWIvaW5kZXgudGNsOjM5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgorbXNnc3RyICLjg5XjgqHjgqTjg6sgJXMg44Gr44GX44Gf5aSJ5pu044KS5YWD44Gr5oi744GX44G+44GZ44GL77yfIgorCisjOiBsaWIvaW5kZXgudGNsOjQwMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKK21zZ3N0ciAi44GT44KM44KJICVpIOWAi+OBruODleOCoeOCpOODq+OBq+OBl+OBn+WkieabtOOCkuWFg+OBq+aIu+OBl+OBvuOBmeOBi++8nyIKKworIzogbGliL2luZGV4LnRjbDo0MDgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIuWkieabtOOCkuWFg+OBq+aIu+OBmeOBqOOCs+ODn+ODg+ODiOS6iOWumuOBl+OBpuOBhOOBquOBhOWkieabtOOBr+WFqOOBpuWkseOCj+OCjOOBvuOBmeOAgiIKKworIzogbGliL2luZGV4LnRjbDo0MTEKK21zZ2lkICJEbyBOb3RoaW5nIgorbXNnc3RyICLkvZXjgoLjgZfjgarjgYQiCisKKyM6IGxpYi9pbmRleC50Y2w6NDI5Cittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICLpgbjmip7jgZXjgozjgZ/jg5XjgqHjgqTjg6vjgavjgZfjgZ/lpInmm7TjgpLlhYPjgavmiLvjgZfjgb7jgZkiCisKKyM6IGxpYi9pbmRleC50Y2w6NDMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nICVzIgorbXNnc3RyICIlcyDjgavjgZfjgZ/lpInmm7TjgpLlhYPjgavmiLvjgZfjgb7jgZkiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMKK21zZ2lkICIiCisiQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyLoqILmraPkuK3jgavjga/jg57jg7zjgrjjgafjgY3jgb7jgZvjgpPjgIJcbiIKKyJcbiIKKyLoqILmraPlh6bnkIbjgpLlrozkuobjgZnjgovjgb7jgafjga/mlrDjgZ/jgavjg57jg7zjgrjjgpLplovlp4vjgafjgY3jgb7jgZvjgpPjgIJcbiIKKworIzogbGliL21lcmdlLnRjbDoyNworbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisi5pyA5b6M44Gr44K544Kt44Oj44Oz44GX44Gf54q25oWL44Gv44Oq44Od44K444OI44Oq44Gu54q25oWL44Go5ZCI6Ie044GX44G+44Gb44KT44CCXG4iCisiXG4iCisi5pyA5b6M44Gr44K544Kt44Oj44Oz44GX44Gm5Lul5b6M44CB5Yil44GuIEdpdCDjg5fjg63jgrDjg6njg6DjgYzjg6rjg53jgrjjg4jjg6rjgpLlpInmm7TjgZfjgabjgYTjgb7jgZnjgILjg57jg7wiCisi44K444KS6ZaL5aeL44GZ44KL5YmN44Gr44CB5YaN44K544Kt44Oj44Oz44GM5b+F6KaB44Gn44GZ44CCXG4iCisiXG4iCisi6Ieq5YuV55qE44Gr5YaN44K544Kt44Oj44Oz44KS6ZaL5aeL44GX44G+44GZ44CCXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCisiXG4iCisiWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCisibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorbXNnc3RyICIiCisi6KGd56qB44Gu44GC44Gj44Gf44Oe44O844K444Gu6YCU5Lit44Gn44GZ44CCXG4iCisiXG4iCisi44OV44Kh44Kk44OrICVzIOOBq+OBr+ODnuODvOOCuOS4reOBruihneeqgeOBjOaui+OBo+OBpuOBhOOBvuOBmeOAglxuIgorIlxuIgorIuOBk+OBruODleOCoeOCpOODq+OBruihneeqgeOCkuino+axuuOBl+OAgeOCs+ODn+ODg+ODiOS6iOWumuOBq+WKoOOBiOOBpuOAgeOCs+ODn+ODg+ODiOOBmeOCi+OBk+OBqOOBp+ODnuODvOOCuOOCkiIKKyLlrozkuobjgZfjgb7jgZnjgILjgZ3jgYbjgoTjgaPjgablp4vjgoHjgabjgIHmlrDjgZ/jgarjg57jg7zjgrjjgpLplovlp4vjgafjgY3jgovjgojjgYbjgavjgarjgorjgb7jgZnjgIJcbiIKKworIzogbGliL21lcmdlLnRjbDo1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKKyJcbiIKKyJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKKyJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCittc2dzdHIgIiIKKyLlpInmm7Tjga7pgJTkuK3jgafjgZnjgIJcbiIKKyJcbiIKKyLjg5XjgqHjgqTjg6sgJXMg44Gv5aSJ5pu05Lit44Gn44GZ44CCXG4iCisiXG4iCisi54++5Zyo44Gu44Kz44Of44OD44OI44KS5a6M5LqG44GX44Gm44GL44KJ44Oe44O844K444KS6ZaL5aeL44GX44Gm5LiL44GV44GE44CC44Gd44GG44GZ44KL5pa544GM44Oe44O844K444Gr5aSx5pWXIgorIuOBl+OBn+OBqOOBjeOBruWbnuW+qeOBjOalveOBp+OBmeOAglxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIG9mICVzIgorbXNnc3RyICIlcyDjga4gJXMg44OW44Op44Oz44OBIgorCisjOiBsaWIvbWVyZ2UudGNsOjEyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgorbXNnc3RyICIlcyDjgaggJXMg44KS44Oe44O844K45Lit44O744O744O7IgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMQorbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgorbXNnc3RyICLjg57jg7zjgrjjgYzlrozkuobjgZfjgb7jgZfjgZ8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMzCittc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCittc2dzdHIgIuODnuODvOOCuOOBjOWkseaVl+OBl+OBvuOBl+OBn+OAguihneeqgeOBruino+axuuOBjOW/heimgeOBp+OBmeOAgiIKKworIzogbGliL21lcmdlLnRjbDoxNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBJbnRvICVzIgorbXNnc3RyICIlcyDjgavjg57jg7zjgrgiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTc3Cittc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCittc2dzdHIgIuODnuODvOOCuOOBmeOCi+ODquODk+OCuOODp+ODsyIKKworIzogbGliL21lcmdlLnRjbDoyMTIKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuioguato+S4reOBq+OBr+S4reatouOBp+OBjeOBvuOBm+OCk+OAglxuIgorIlxuIgorIuOBvuOBmuS7iuOBruOCs+ODn+ODg+ODiOioguato+OCkuWujOS6huOBleOBm+OBpuS4i+OBleOBhOOAglxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyMgorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorIuODnuODvOOCuOOCkuS4reaWreOBl+OBvuOBmeOBi++8n1xuIgorIlxuIgorIuePvuWcqOOBruODnuODvOOCuOOCkuS4reaWreOBmeOCi+OBqOOAgeOCs+ODn+ODg+ODiOOBl+OBpuOBhOOBquOBhOWFqOOBpuOBruWkieabtOOBjOWkseOCj+OCjOOBvuOBmeOAglxuIgorIlxuIgorIuODnuODvOOCuOOCkuS4reaWreOBl+OBpuOCiOOCjeOBl+OBhOOBp+OBmeOBi++8nyIKKworIzogbGliL21lcmdlLnRjbDoyMjgKK21zZ2lkICIiCisiUmVzZXQgY2hhbmdlcz9cbiIKKyJcbiIKKyJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCittc2dzdHIgIiIKKyLlpInmm7TngrnjgpLjg6rjgrvjg4Pjg4jjgZfjgb7jgZnjgYvvvJ9cbiIKKyJcbiIKKyLlpInmm7TngrnjgpLjg6rjgrvjg4Pjg4jjgZnjgovjgajjgIHjgrPjg5/jg4Pjg4jjgZfjgabjgYTjgarjgYTlhajjgabjga7lpInmm7TjgYzlpLHjgo/jgozjgb7jgZnjgIJcbiIKKyJcbiIKKyLjg6rjgrvjg4Pjg4jjgZfjgabjgojjgo3jgZfjgYTjgafjgZnjgYvvvJ8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiQWJvcnRpbmciCittc2dzdHIgIuS4reaWreOBl+OBpuOBhOOBvuOBmSIKKworIzogbGliL21lcmdlLnRjbDoyMzkKK21zZ2lkICJmaWxlcyByZXNldCIKK21zZ3N0ciAi44Oq44K744OD44OI44GX44Gf44OV44Kh44Kk44OrIgorCisjOiBsaWIvbWVyZ2UudGNsOjI2NworbXNnaWQgIkFib3J0IGZhaWxlZC4iCittc2dzdHIgIuS4reaWreOBq+WkseaVl+OBl+OBvuOBl+OBn+OAgiIKKworIzogbGliL21lcmdlLnRjbDoyNjkKK21zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCittc2dzdHIgIuS4reaWreWujOS6huOAgiIKKworIzogbGliL21lcmdldG9vbC50Y2w6OAorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhlIGJhc2UgdmVyc2lvbj8iCittc2dzdHIgIuWFsemAmuOBrueJiOOCkuS9v+OBhOOBvuOBmeOBiz8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjkKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKK21zZ3N0ciAi6Ieq5YiG44Gu5YG044Gu54mI44KS5L2/44GE44G+44GZ44GLPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTAKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBvdGhlciBicmFuY2g/IgorbXNnc3RyICLnm7jmiYvliLbjga7niYjjgpLkvb/jgYTjgb7jgZnjgYs/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlIHRoYXQgdGhlIGRpZmYgc2hvd3Mgb25seSBjb25mbGljdGluZyBjaGFuZ2VzLlxuIgorIlxuIgorIiVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4iCisiXG4iCisiVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVuZG9uZSBvbmx5IGJ5IHJlc3RhcnRpbmcgdGhlIG1lcmdlLiIKK21zZ3N0ciAiIgorIuertuWQiOOBmeOCi+WkieabtOeCueOBoOOBkeOBjOihqOekuuOBleOCjOOBpuOBhOOCi+OBk+OBqOOBq+azqOaEj+OBl+OBpuOBj+OBoOOBleOBhOOAglxuIgorIlxuIgorIiVzIOOBr+S4iuabuOOBjeOBleOCjOOBvuOBmeOAglxuIgorIlxuIgorIuOChOOCiuebtOOBmeOBq+OBr+ODnuODvOOCuOWFqOS9k+OCkuOChOOCiuebtOOBl+OBpuOBj+OBoOOBleOBhOOAgiIKKworIzogbGliL21lcmdldG9vbC50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIHNlZW1zIHRvIGhhdmUgdW5yZXNvbHZlZCBjb25mbGljdHMsIHN0aWxsIHN0YWdlPyIKK21zZ3N0ciAiIgorIuODleOCoeOCpOODqyAlcyDjgavjga/op6PmsbrjgZfjgabjgYTjgarjgYTnq7blkIjpg6jliIbjgYzjgb7jgaDjgYLjgovjgojjgYbjgafjgZnjgYzjgIHjgYTjgYTjgafjgZnjgYs/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKK21zZ3N0ciAiJXMg44G444Gu6Kej5rG644KS44K544OG44O844K444GX44G+44GZIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDEKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSBkZWxldGlvbiBvciBsaW5rIGNvbmZsaWN0cyB1c2luZyBhIHRvb2wiCittc2dzdHIgIuODhOODvOODq+OBp+OBr+WJiumZpOOChOODquODs+OCr+ertuWQiOOBr+aJseOBiOOBvuOBm+OCkyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Cittc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi56u25ZCI44OV44Kh44Kk44Or44Gv5a2Y5Zyo44GX44G+44Gb44KT44CCIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKK21zZ3N0ciAiR1VJIOODnuODvOOCuOODhOODvOODq+OBp+OBr+OBguOCiuOBvuOBm+OCkzogJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI2OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIG1lcmdlIHRvb2wgJyVzJyIKK21zZ3N0ciAi44Oe44O844K444OE44O844OrICclcycg44Gv44K144Od44O844OI44GX44Gm44GE44G+44Gb44KTIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMDMKK21zZ2lkICJNZXJnZSB0b29sIGlzIGFscmVhZHkgcnVubmluZywgdGVybWluYXRlIGl0PyIKK21zZ3N0ciAi44Oe44O844K444OE44O844Or44Gv44GZ44Gn44Gr6LW35YuV44GX44Gm44GE44G+44GZ44CC57WC5LqG44GX44G+44GZ44GLPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCisiJXMiCittc2dzdHIgIiIKKyLniYjjga7lj5bjgorlh7rjgZfmmYLjgavjgqjjg6njg7zjgYzlh7rjgb7jgZfjgZ86XG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyLjg57jg7zjgrjjg4Tjg7zjg6vjgYzotbfli5XjgafjgY3jgb7jgZvjgpM6XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0NworbXNnaWQgIlJ1bm5pbmcgbWVyZ2UgdG9vbC4uLiIKK21zZ3N0ciAi44Oe44O844K444OE44O844Or44KS5a6f6KGM44GX44Gm44GE44G+44GZLi4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNzUgbGliL21lcmdldG9vbC50Y2w6MzgzCittc2dpZCAiTWVyZ2UgdG9vbCBmYWlsZWQuIgorbXNnc3RyICLjg57jg7zjgrjjg4Tjg7zjg6vjgYzlpLHmlZfjgZfjgb7jgZfjgZ/jgIIiCisKKyM6IGxpYi9vcHRpb24udGNsOjExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAi5YWo5L2T44Ko44Oz44Kz44O844OH44Kj44Oz44Kw44GrIOeEoeWKueOBqiAlcyDjgYzmjIflrprjgZXjgozjgabjgYTjgb7jgZkiCisKKyM6IGxpYi9vcHRpb24udGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXBvIGVuY29kaW5nICclcyciCittc2dzdHIgIuODquODneOCuOODiOODquOCqOODs+OCs+ODvOODh+OCo+ODs+OCsOOBqyDnhKHlirnjgaogJXMg44GM5oyH5a6a44GV44KM44Gm44GE44G+44GZIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTcKK21zZ2lkICJSZXN0b3JlIERlZmF1bHRzIgorbXNnc3RyICLml6LlrprlgKTjgavmiLvjgZkiCisKKyM6IGxpYi9vcHRpb24udGNsOjEyMQorbXNnaWQgIlNhdmUiCittc2dzdHIgIuS/neWtmCIKKworIzogbGliL29wdGlvbi50Y2w6MTMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgUmVwb3NpdG9yeSIKK21zZ3N0ciAiJXMg44Oq44Od44K444OI44OqIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzIKK21zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgorbXNnc3RyICLlpKfln5/vvIjlhajjgabjga7jg6rjg53jgrjjg4jjg6rvvIkiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzOAorbXNnaWQgIlVzZXIgTmFtZSIKK21zZ3N0ciAi44Om44O844K25ZCNIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzkKK21zZ2lkICJFbWFpbCBBZGRyZXNzIgorbXNnc3RyICLpm7vlrZDjg6Hjg7zjg6vjgqLjg4njg6zjgrkiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MQorbXNnaWQgIlN1bW1hcml6ZSBNZXJnZSBDb21taXRzIgorbXNnc3RyICLjg57jg7zjgrjjgrPjg5/jg4Pjg4jjga7opoHntIQiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MgorbXNnaWQgIk1lcmdlIFZlcmJvc2l0eSIKK21zZ3N0ciAi44Oe44O844K444Gu5YaX6ZW35bqmIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDMKK21zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgorbXNnc3RyICLjg57jg7zjgrjlvozjgasgZGlmZnN0YXQg44KS6KGo56S6IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDQKK21zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKK21zZ3N0ciAi44Oe44O844K444OE44O844Or44KS5L2/55SoIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDYKK21zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgorbXNnc3RyICLjg5XjgqHjgqTjg6vlpInmm7TmmYLliLvjgpLkv6HpoLzjgZnjgosiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NworbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKK21zZ3N0ciAi44OV44Kn44OD44OB5Lit44Gr44OI44Op44OD44Kt44Oz44Kw44OW44Op44Oz44OB44KS5YiI44KLIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDgKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKK21zZ3N0ciAi44OI44Op44OD44Kt44Oz44Kw44OW44Op44Oz44OB44KS5ZCI44KP44Gb44KLIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDkKK21zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKK21zZ3N0ciAi5aSJ5pu044GV44KM44Gf44OV44Kh44Kk44Or44Gu44G/44Kz44OU44O85qSc55+l44KS6KGM44Gq44GGIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAi44Kz44OU44O844KS5qSc55+l44GZ44KL5pyA5bCR5paH5a2X5pWwIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTEKK21zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKK21zZ3N0ciAi6Ki76YeI44GZ44KL5bGl5q205Y2K5b6E77yI5pel5pWw77yJIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTIKK21zZ2lkICJOdW1iZXIgb2YgRGlmZiBDb250ZXh0IExpbmVzIgorbXNnc3RyICJkaWZmIOOBruaWh+iEiOihjOaVsCIKKworIzogbGliL29wdGlvbi50Y2w6MTUzCittc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKK21zZ3N0ciAi44Kz44Of44OD44OI44Oh44OD44K744O844K444Gu44OG44Kt44K544OI5bmFIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTQKK21zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCittc2dzdHIgIuaWsOOBl+OBhOODluODqeODs+ODgeWQjeOBruODhuODs+ODl+ODrOODvOODiCIKKworIzogbGliL29wdGlvbi50Y2w6MTU1Cittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICLjg5XjgqHjgqTjg6vlhoXlrrnjga7jg4fjg5Xjgqnjg7zjg6vjg4jjgqjjg7PjgrPjg7zjg4fjgqPjg7PjgrAiCisKKyM6IGxpYi9vcHRpb24udGNsOjIwMworbXNnaWQgIkNoYW5nZSIKK21zZ3N0ciAi5aSJ5pu0IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMzAKK21zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKK21zZ3N0ciAi44K544Oa44Or44OB44Kn44OD44Kv6L6e5pu4IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTQKK21zZ2lkICJDaGFuZ2UgRm9udCIKK21zZ3N0ciAi44OV44Kp44Oz44OI44KS5aSJ5pu0IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgIiVzIOOCkumBuOaKniIKKworIzogbGliL29wdGlvbi50Y2w6MjY0Cittc2dpZCAicHQuIgorbXNnc3RyICLjg53jgqTjg7Pjg4giCisKKyM6IGxpYi9vcHRpb24udGNsOjI3OAorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICLoqK3lrpoiCisKKyM6IGxpYi9vcHRpb24udGNsOjMxNAorbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCittc2dzdHIgIuWujOWFqOOBq+OCquODl+OCt+ODp+ODs+OCkuS/neWtmOOBp+OBjeOBvuOBm+OCkzoiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2MworbXNnaWQgIlJlbW92ZSBSZW1vdGUiCittc2dzdHIgIuODquODouODvOODiOOCkuWJiumZpCIKKworIzogbGliL3JlbW90ZS50Y2w6MTY4Cittc2dpZCAiUHJ1bmUgZnJvbSIKK21zZ3N0ciAi44GL44KJ5YiI6L6844KA4oCmIgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNzMKK21zZ2lkICJGZXRjaCBmcm9tIgorbXNnc3RyICLlj5blvpflhYMiCisKKyM6IGxpYi9yZW1vdGUudGNsOjIxNQorbXNnaWQgIlB1c2ggdG8iCittc2dzdHIgIuODl+ODg+OCt+ODpeWFiCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE5Cittc2dpZCAiQWRkIFJlbW90ZSIKK21zZ3N0ciAi44Oq44Oi44O844OI44KS6L+95YqgIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjQKK21zZ2lkICJBZGQgTmV3IFJlbW90ZSIKK21zZ3N0ciAi44Oq44Oi44O844OI44KS5paw6KaP44Gr6L+95YqgIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjggbGliL3Rvb2xzX2RsZy50Y2w6MzYKK21zZ2lkICJBZGQiCittc2dzdHIgIui/veWKoCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjM3Cittc2dpZCAiUmVtb3RlIERldGFpbHMiCittc2dzdHIgIuODquODouODvOODiOOBruips+e0sCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCittc2dpZCAiTG9jYXRpb246IgorbXNnc3RyICLloLTmiYA6IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjIKK21zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKK21zZ3N0ciAi44Gd44Gu5LuW44Gu5YuV5L2cIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAi5Y2z5bqn44Gr5Y+W5b6XIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzEKK21zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgorbXNnc3RyICLjg6rjg6Ljg7zjg4jjg6zjg53jgrjjg4jjg6rjgpLliJ3mnJ/ljJbjgZfjgabjg5fjg4Pjgrfjg6UiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3NworbXNnaWQgIkRvIE5vdGhpbmcgRWxzZSBOb3ciCittc2dzdHIgIuS9leOCguOBl+OBquOBhCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCittc2dzdHIgIuODquODouODvOODiOWQjeOCkuaMh+WumuOBl+OBpuS4i+OBleOBhOOAgiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjExNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgcmVtb3RlIG5hbWUuIgorbXNnc3RyICInJXMnIOOBr+ODquODouODvOODiOWQjeOBq+S9v+OBiOOBvuOBm+OCk+OAgiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgcmVtb3RlICclcycgb2YgbG9jYXRpb24gJyVzJy4iCittc2dzdHIgIuWgtOaJgCAnJTIkcycg44Gu44Oq44Oi44O844OIICclMSRzJ+OBruWQjeWJjeWkieabtOOBq+WkseaVl+OBl+OBvuOBl+OBn+OAgiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMyBsaWIvdHJhbnNwb3J0LnRjbDo2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmV0Y2ggJXMiCittc2dzdHIgIiVzIOOCkuWPluW+lyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHRoZSAlcyIKK21zZ3N0ciAiJXMg44GL44KJ44OV44Kn44OD44OB44GX44Gm44GE44G+44GZIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAi44Oq44Od44K444OI44OqICclcycg44KS5Yid5pyf5YyW44Gn44GN44G+44Gb44KT44CCIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzIGxpYi90cmFuc3BvcnQudGNsOjI1IGxpYi90cmFuc3BvcnQudGNsOjYzCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgInB1c2ggJXMiCittc2dzdHIgIiVzIOOCkuODl+ODg+OCt+ODpSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCittc2dzdHIgIiUyJHMg44Gr44GC44KLICUxJHMg44KS44K744OD44OI44Ki44OD44OX44GX44G+44GZIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICLpgaDpmpTjgafjg5bjg6njg7Pjg4HliYrpmaQiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDcKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgIuWFg+OBruODquODneOCuOODiOODqiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MCBsaWIvdHJhbnNwb3J0LnRjbDoxMzQKK21zZ2lkICJSZW1vdGU6IgorbXNnc3RyICLjg6rjg6Ljg7zjg4g6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjE0OQorbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCittc2dzdHIgIuS7u+aEj+OBruS9jee9rjoiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6ODQKK21zZ2lkICJCcmFuY2hlcyIKK21zZ3N0ciAi44OW44Op44Oz44OBIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEwOQorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIgorbXNnc3RyICLmnaHku7bku5jjgafliYrpmaQiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTExCittc2dpZCAiTWVyZ2VkIEludG86IgorbXNnc3RyICLjg57jg7zjgrjlhYg6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgorbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKK21zZ3N0ciAiJ+ODnuODvOOCuOWFiCcg44Gr44Gv44OW44Op44Oz44OB44GM5b+F6KaB44Gn44GZ44CCIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKKyJcbiIKKyIgLSAlcyIKK21zZ3N0ciAiIgorIuS7peS4i+OBruODluODqeODs+ODgeOBryAlcyDjgavlrozlhajjgavjg57jg7zjgrjjgZXjgozjgabjgYTjgb7jgZvjgpM6XG4iCisiXG4iCisiIC0gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisi5b+F6KaB44Gq44Kz44Of44OD44OI44GM5LiN6Laz44GX44Gm44GE44KL44Gf44KB44Gr44CB44Oe44O844K45qSc5p+744GM5aSx5pWX44GX44G+44GX44Gf44CC44G+44GaICVzIOOBi+OCiSIKKyLjg5Xjgqfjg4Pjg4HjgZfjgabkuIvjgZXjgYTjgIIiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA3Cittc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgorbXNnc3RyICLliYrpmaTjgZnjgovjg5bjg6njg7Pjg4HjgpLpgbjmip7jgZfjgabkuIvjgZXjgYTjgIIiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAiJXMg44GL44KJ44OW44Op44Oz44OB44KS5YmK6Zmk44GX44Gm44GE44G+44GZ44CCIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgorbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgorbXNnc3RyICLjg6rjg53jgrjjg4jjg6rjgYzpgbjmip7jgZXjgozjgabjgYTjgb7jgZvjgpPjgIIiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCittc2dzdHIgIiVzIOOCkuOCueOCreODo+ODs+OBl+OBpuOBhOOBvuOBmeKApiIKKworIzogbGliL3NlYXJjaC50Y2w6MjEKK21zZ2lkICJGaW5kOiIKK21zZ3N0ciAi5qSc57SiOiIKKworIzogbGliL3NlYXJjaC50Y2w6MjMKK21zZ2lkICJOZXh0IgorbXNnc3RyICLmrKEiCisKKyM6IGxpYi9zZWFyY2gudGNsOjI0Cittc2dpZCAiUHJldiIKK21zZ3N0ciAi5YmNIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyNQorbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgorbXNnc3RyICLlpKfmloflrZflsI/mloflrZfjgpLljLrliKUiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MjEgbGliL3Nob3J0Y3V0LnRjbDo2MgorbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCittc2dzdHIgIuOCt+ODp+ODvOODiOOCq+ODg+ODiOOBjOabuOOBkeOBvuOBm+OCkzoiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3Cittc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgorbXNnc3RyICLjgqLjgqTjgrPjg7PjgYzmm7jjgZHjgb7jgZvjgpM6IgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKK21zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICLjgrXjg53jg7zjg4jjgZXjgozjgabjgYTjgarjgYTjgrnjg5rjg6vjg4Hjgqfjg4Pjgqvjg7zjgafjgZkiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICLjgrnjg5rjg6vjg4Hjgqfjg4Pjgq/mqZ/og73jga/kvb/jgYjjgb7jgZvjgpMiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAi44K544Oa44Or44OB44Kn44OD44Kv44Gu6Kit5a6a44GM5LiN5q2j44Gn44GZIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCittc2dzdHIgIui+nuabuOOCkiAlcyDjgavlt7vjgY3miLvjgZfjgb7jgZkiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MworbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCittc2dzdHIgIuOCueODmuODq+ODgeOCp+ODg+OCq+ODvOOBrui1t+WLleOBq+WkseaVl+OBl+OBvuOBl+OBnyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIuOCueODmuODq+ODgeOCp+ODg+OCq+ODvOOBjOWIpOWIpeOBp+OBjeOBvuOBm+OCkyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjE4NgorbXNnaWQgIk5vIFN1Z2dlc3Rpb25zIgorbXNnc3RyICLmj5DmoYjjgarjgZciCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKK21zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIuOCueODmuODq+ODgeOCp+ODg+OCq+ODvOOBjOS6iOaDs+WkluOBriBFT0Yg44KS6L+U44GX44G+44GX44GfIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCittc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCittc2dzdHIgIuOCueODmuODq+ODgeOCp+ODg+OCr+WkseaVlyIKKworIzogbGliL3NzaGtleS50Y2w6MzEKK21zZ2lkICJObyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAi44Kt44O844GM44GC44KK44G+44Gb44KT44CCIgorCisjOiBsaWIvc3Noa2V5LnRjbDozNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCittc2dzdHIgIuWFrOmWi+mNteOBjOOBguOCiuOBvuOBl+OBnzogJXMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjQwCittc2dpZCAiR2VuZXJhdGUgS2V5IgorbXNnc3RyICLpjbXjgpLnlJ/miJAiCisKKyM6IGxpYi9zc2hrZXkudGNsOjU2Cittc2dpZCAiQ29weSBUbyBDbGlwYm9hcmQiCittc2dzdHIgIuOCr+ODquODg+ODl+ODnOODvOODieOBq+OCs+ODlOODvCIKKworIzogbGliL3NzaGtleS50Y2w6NzAKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAi44GC44Gq44Gf44GuIE9wZW5TU0gg5YWs6ZaL6Y21IgorCisjOiBsaWIvc3Noa2V5LnRjbDo3OAorbXNnaWQgIkdlbmVyYXRpbmcuLi4iCittc2dzdHIgIueUn+aIkOS4rS4uLiIKKworIzogbGliL3NzaGtleS50Y2w6ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJzc2gta2V5Z2VuIOOCkui1t+WLleOBp+OBjeOBvuOBm+OCkzpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3NzaGtleS50Y2w6MTExCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICLnlJ/miJDjgavlpLHmlZfjgZfjgb7jgZfjgZ/jgIIiCisKKyM6IGxpYi9zc2hrZXkudGNsOjExOAorbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIueUn+aIkOOBq+OBr+aIkOWKn+OBl+OBvuOBl+OBn+OBjOOAgemNteOBjOimi+OBpOOBi+OCiuOBvuOBm+OCk+OAgiIKKworIzogbGliL3NzaGtleS50Y2w6MTIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgorbXNnc3RyICLjgYLjgarjgZ/jga7pjbXjga8gJXMg44Gr44GC44KK44G+44GZIgorCisjOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgorbXNnc3RyICIlMSRzIC4uLiAlNCQqaSAlNiRzIOS4reOBriAlMiQqaSAoJTckM2klJSkiCisKKyM6IGxpYi90b29scy50Y2w6NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgIuODleOCoeOCpOODq+OCkumBuOaKnuOBl+OBpuOBi+OCiSAlcyDjgpLotbfli5XjgZfjgabjgY/jgaDjgZXjgYTjgIIiCisKKyM6IGxpYi90b29scy50Y2w6OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKK21zZ3N0ciAi5pys5b2T44GrICVzIOOCkui1t+WLleOBl+OBvuOBmeOBiz8iCisKKyM6IGxpYi90b29scy50Y2w6MTEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbDogJXMiCittc2dzdHIgIuODhOODvOODqzogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVubmluZzogJXMiCittc2dzdHIgIuWun+ihjOS4rTogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKK21zZ3N0ciAi44OE44O844Or44GM5a6M5LqG44GX44G+44GX44GfOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGZhaWxlZDogJXMiCittc2dzdHIgIuODhOODvOODq+OBjOWkseaVl+OBl+OBvuOBl+OBnzogJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIyCittc2dpZCAiQWRkIFRvb2wiCittc2dzdHIgIuODhOODvOODq+OBrui/veWKoCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKK21zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKK21zZ3N0ciAi5paw6KaP44OE44O844Or44Kz44Oe44Oz44OJ44Gu6L+95YqgIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMworbXNnaWQgIkFkZCBnbG9iYWxseSIKK21zZ3N0ciAi5YWo5L2T44Gr6L+95YqgIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NQorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAi44OE44O844Or44Gu6Kmz57SwIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0OAorbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgorbXNnc3RyICInLycg44Gn44K144OW44Oh44OL44Ol44O844KS5Yy65YiH44KK44G+44GZOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NjEKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAi44Kz44Oe44Oz44OJOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzQKK21zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgorbXNnc3RyICLotbfli5XjgZnjgovliY3jgavjg4DjgqTjgqLjg63jgrDjgpLooajnpLoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjgwCittc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCittc2dzdHIgIuODpuODvOOCtuOBq+OCs+ODn+ODg+ODiOOCkuS4gOOBpOmBuOOBsOOBm+OCiyAoJFJFVklTSU9OIOOBq+OCu+ODg+ODiOOBl+OBvuOBmSkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjg1Cittc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCittc2dzdHIgIuODpuODvOOCtuOBq+S7luOBruW8leaVsOOCkui/veWKoOOBleOBm+OCiyAoJEFSR1Mg44Gr44K744OD44OI44GX44G+44GZKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTIKK21zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCittc2dzdHIgIuOCs+ODnuODs+ODieOBi+OCieOBruWHuuWKm+OCpuOCo+ODs+ODieOCpuOCkuimi+OBm+OBquOBhCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTcKK21zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgorbXNnc3RyICLjg5Hjg4Pjg4HjgYzpgbjjgbDjgozjgabjgYTjgovjgajjgY3jgaDjgZHli5XjgYvjgZkoJEZJTEVOQU1FIOOBjOepuuOBp+OBquOBhCkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjEyMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCittc2dzdHIgIuODhOODvOODq+WQjeOCkuaMh+WumuOBl+OBpuS4i+OBleOBhOOAgiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi44OE44O844OrICclcycg44Gv5pei44Gr5a2Y5Zyo44GX44G+44GZ44CCIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFkZCB0b29sOlxuIgorIiVzIgorbXNnc3RyICIiCisi44OE44O844Or44KS6L+95Yqg44Gn44GN44G+44Gb44KTOlxuIgorIiVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTAKK21zZ2lkICJSZW1vdmUgVG9vbCIKK21zZ3N0ciAi44OE44O844Or44Gu5YmK6ZmkIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTYKK21zZ2lkICJSZW1vdmUgVG9vbCBDb21tYW5kcyIKK21zZ3N0ciAi44OE44O844Or44Kz44Oe44Oz44OJ44Gu5YmK6ZmkIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDAKK21zZ2lkICJSZW1vdmUiCittc2dzdHIgIuWJiumZpCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjM2Cittc2dpZCAiKEJsdWUgZGVub3RlcyByZXBvc2l0b3J5LWxvY2FsIHRvb2xzKSIKK21zZ3N0ciAiKOmdkuiJsuOBr+ODreODvOOCq+ODq+ODrOODneOCuOODiOODquOBruODhOODvOODq+OBp+OBmSkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKK21zZ3N0ciAi44Kz44Oe44Oz44OJ44KS6LW35YuVOiAlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzExCittc2dpZCAiQXJndW1lbnRzIgorbXNnc3RyICLlvJXmlbAiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjM0OAorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCittc2dzdHIgIiVzIOOBi+OCieaWsOOBl+OBhOWkieabtOOCkuODleOCp+ODg+ODgeOBl+OBpuOBhOOBvuOBmSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCittc2dzdHIgIumBoOmalOWIiOi+vCAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKK21zZ3N0ciAiJXMg44GL44KJ5YmK6Zmk44GV44KM44Gf44OI44Op44OD44Kt44Oz44Kw44O744OW44Op44Oz44OB44KS5YiI44Gj44Gm44GE44G+44GZIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAiJXMg44G45aSJ5pu044KS44OX44OD44K344Ol44GX44Gm44GE44G+44GZIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKK21zZ3N0ciAiJXMg44G444Of44Op44O844GX44Gm44GE44G+44GZIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgJXMgJXMgdG8gJXMiCittc2dzdHIgIiUzJHMg44G4ICUxJHMgJTIkcyDjgpLjg5fjg4Pjgrfjg6XjgZfjgabjgYTjgb7jgZkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwMAorbXNnaWQgIlB1c2ggQnJhbmNoZXMiCittc2dzdHIgIuODluODqeODs+ODgeOCkuODl+ODg+OCt+ODpSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTE0Cittc2dpZCAiU291cmNlIEJyYW5jaGVzIgorbXNnc3RyICLlhYPjga7jg5bjg6njg7Pjg4EiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEzMQorbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCittc2dzdHIgIumAgeOCiuWFiOODquODneOCuOODiOODqiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTY5Cittc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKK21zZ3N0ciAi6YCa5L+h44Kq44OX44K344On44OzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzEKK21zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKK21zZ3N0ciAi5pei5a2Y44OW44Op44Oz44OB44KS5LiK5pu444GNKOWkieabtOOCkuegtOajhOOBmeOCi+WPr+iDveaAp+OBjOOBguOCiuOBvuOBmSkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3NQorbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgorbXNnc3RyICJUaGluIFBhY2sg44KS5L2/44GG77yI6YGF44GE44ON44OD44OI44Ov44O844Kv5o6l57aa77yJIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzkKK21zZ2lkICJJbmNsdWRlIHRhZ3MiCittc2dzdHIgIuOCv+OCsOOCkuWQq+OCgeOCiyIKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vbmIucG8gYi9naXQtZ3VpL3BvL25iLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NmFhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL25iLnBvCkBAIC0wLDAgKzEsMjQ3NCBAQAorIyBOb3J3ZWdpYW4gKEJva23DpWwpIHRyYW5zbGF0aW9uIG9mIGdpdC1ndWkuCisjIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFNoYXduIFBlYXJjZSwgZXQgYWwuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtZ3VpIHBhY2thZ2UuCisjCisjIEZyZWRyaWsgU2tvbG1saSA8ZnJlZHJpa0BmcnNrLm5ldD4sIDIwMDguCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBuYlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAwOC0xMS0xNiAxMzo1Ni0wODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0xMi0wMyAxNjowNSswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBGcmVkcmlrIFNrb2xtbGkgPGZyZWRyaWtAZnJzay5uZXQ+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTm9yd2VnaWFuIEJva23DpWxcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjczNyBnaXQtZ3VpLnNoOjc1MSBnaXQtZ3VpLnNoOjc2NCBnaXQtZ3VpLnNoOjg0NworIzogZ2l0LWd1aS5zaDo4NjYKK21zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKK21zZ3N0ciAiZ2l0LWd1aTogS3JpdGlzayBmZWlsIgorCisjOiBnaXQtZ3VpLnNoOjY4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgorbXNnc3RyICJVZ3lsZGlnIGZvbnQgc3Blc2lmaXNlcnQgaSAlczoiCisKKyM6IGdpdC1ndWkuc2g6NzIzCittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICJIb3ZlZHNrcmlmdHR5cGUiCisKKyM6IGdpdC1ndWkuc2g6NzI0Cittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgIkRpZmYtL0tvbnNvbGxza3JpZnR0eXBlIgorCisjOiBnaXQtZ3VpLnNoOjczOAorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAiS2FuIGlra2UgZmlubmUgZ2l0IGkgUEFUSCIKKworIzogZ2l0LWd1aS5zaDo3NjUKK21zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKK21zZ3N0ciAiS2FuIGlra2UgdHlkZSBHaXQncyBvcHBnaXR0ZSB2ZXJzam9uOiIKKworIzogZ2l0LWd1aS5zaDo3ODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiR2l0IHZlcnNpb24gY2Fubm90IGJlIGRldGVybWluZWQuXG4iCisiXG4iCisiJXMgY2xhaW1zIGl0IGlzIHZlcnNpb24gJyVzJy5cbiIKKyJcbiIKKyIlcyByZXF1aXJlcyBhdCBsZWFzdCBHaXQgMS41LjAgb3IgbGF0ZXIuXG4iCisiXG4iCisiQXNzdW1lICclcycgaXMgdmVyc2lvbiAxLjUuMD9cbiIKK21zZ3N0ciAiIgorIkthbiBpa2tlIGF2Z2rDuHJlIGh2aWxrZW4gR2l0LXZlcnNqb24gZHUgaGFyLlxuIgorIlxuIgorIiVzIHNpZXIgdmVyc2pvbmVuIGVyICclcycuXG4iCisiXG4iCisiJXMga3JldmVyIEdpdCB2ZXJzam9uIDEuNS4wIGVsbGVyIG55ZXJlLlxuIgorIlxuIgorIkFudGEgYXQgJyVzJyBlciB2ZXJzam9uIDEuNS4wP1xuIgorCisjOiBnaXQtZ3VpLnNoOjEwNjIKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgIkdpdC1rYXRhbG9nIGlra2UgZnVubmV0OiIKKworIzogZ2l0LWd1aS5zaDoxMDY5Cittc2dpZCAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiIKK21zZ3N0ciAiS2FuIGlra2UgZ8OlIHRpbCB0b3BwZW4gYXYgYXJiZWlkc2thdGFsb2dlbjoiCisKKyM6IGdpdC1ndWkuc2g6MTA3NgorbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTA4MQorbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJJbmdlbiBhcmJlaWRza2F0YWxvZyIKKworIzogZ2l0LWd1aS5zaDoxMjQ3IGxpYi9jaGVja291dF9vcC50Y2w6MzA1Cittc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKK21zZ3N0ciAiT3BwZGF0ZXJlciBmaWxzdGF0dXMuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTMwMworbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgIlPDuGtlciBldHRlciBlbmRyZWRlIGZpbGVyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjEzNjcKK21zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MTM4NAorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDoxNTQyIGxpYi9icm93c2VyLnRjbDoyNDYKK21zZ2lkICJSZWFkeS4iCittc2dzdHIgIktsYXIuIgorCisjOiBnaXQtZ3VpLnNoOjE4MTkKK21zZ2lkICJVbm1vZGlmaWVkIgorbXNnc3RyICJVZW5kcmV0IgorCisjOiBnaXQtZ3VpLnNoOjE4MjEKK21zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiRW5kcmV0LCBpa2tlIGvDuGV0IgorCisjOiBnaXQtZ3VpLnNoOjE4MjIgZ2l0LWd1aS5zaDoxODMwCittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIkvDuGV0IGZvciBpbm5zamVra2luZyIKKworIzogZ2l0LWd1aS5zaDoxODIzIGdpdC1ndWkuc2g6MTgzMQorbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJEZWx2aXMga8O4ZXQgZm9yIGlubnNqZWtraW5nIgorCisjOiBnaXQtZ3VpLnNoOjE4MjQgZ2l0LWd1aS5zaDoxODMyCittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQsIG1pc3NpbmciCittc2dzdHIgIktsYXIgZm9yIGlubnNqZWtraW5nLCBmcmF2w6ZyZW5kZSIKKworIzogZ2l0LWd1aS5zaDoxODI2Cittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIkZpbHR5cGUgZW5kcmV0LCBpa2tlIGvDuGV0IgorCisjOiBnaXQtZ3VpLnNoOjE4MjcKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgorbXNnc3RyICJGaWx0eXBlIGVuZHJldCwga8O4ZXQiCisKKyM6IGdpdC1ndWkuc2g6MTgyOQorbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiVXNwb3JldCwgaWtrZSBrw7hldCIKKworIzogZ2l0LWd1aS5zaDoxODM0Cittc2dpZCAiTWlzc2luZyIKK21zZ3N0ciAiRnJhdsOmcmVuZGUiCisKKyM6IGdpdC1ndWkuc2g6MTgzNQorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAiS8O4ZXQgZm9yIGZqZXJuaW5nIgorCisjOiBnaXQtZ3VpLnNoOjE4MzYKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwsIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIkvDuGV0IGZvciBmamVybmluZywgZm9ydHNhdHQgdGlsc3RlZGUiCisKKyM6IGdpdC1ndWkuc2g6MTgzOCBnaXQtZ3VpLnNoOjE4MzkgZ2l0LWd1aS5zaDoxODQwIGdpdC1ndWkuc2g6MTg0MQorIzogZ2l0LWd1aS5zaDoxODQyIGdpdC1ndWkuc2g6MTg0MworbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIlNhbW1lbnNsw6VpbmdlbiBrcmV2ZXIga29uZmxpa3Row6VuZHRlcmluZyIKKworIzogZ2l0LWd1aS5zaDoxODc4Cittc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAiU3RhcnRlciBnaXRrLi4uIFZlbm5saWdzdCB2ZW50Li4uIgorCisjOiBnaXQtZ3VpLnNoOjE4ODcKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdGsgaW4gUEFUSCIKK21zZ3N0ciAiS3VubmUgaWtrZSBmaW5uZSBnaXRrIGkgUEFUSCIKKworIzogZ2l0LWd1aS5zaDoyMjgwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICJBcmtpdiIKKworIzogZ2l0LWd1aS5zaDoyMjgxCittc2dpZCAiRWRpdCIKK21zZ3N0ciAiUmVkaWdlcmUiCisKKyM6IGdpdC1ndWkuc2g6MjI4MyBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJHcmVuIgorCisjOiBnaXQtZ3VpLnNoOjIyODYgbGliL2Nob29zZV9yZXYudGNsOjU0OAorbXNnaWQgIkNvbW1pdEBAbm91biIKK21zZ3N0ciAiSW5uc2pla2tpbmciCisKKyM6IGdpdC1ndWkuc2g6MjI4OSBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAorbXNnaWQgIk1lcmdlIgorbXNnc3RyICJTYW1tZW5zbMOlaW5nIgorCisjOiBnaXQtZ3VpLnNoOjIyOTAgbGliL2Nob29zZV9yZXYudGNsOjU1NworbXNnaWQgIlJlbW90ZSIKK21zZ3N0ciAiRmplcm5hcmtpdiIKKworIzogZ2l0LWd1aS5zaDoyMjkzCittc2dpZCAiVG9vbHMiCittc2dzdHIgIlZlcmt0w7h5IgorCisjOiBnaXQtZ3VpLnNoOjIzMDIKK21zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKK21zZ3N0ciAiVXRmb3JzayBhcmJlaWRza29waWVuIgorCisjOiBnaXQtZ3VpLnNoOjIzMDcKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAiVXRmb3JzayBkZW5uZSBncmVucyBmaWxlciIKKworIzogZ2l0LWd1aS5zaDoyMzExCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKK21zZ3N0ciAiQmxhIGlnamVubm9tIGZpbGVyIHDDpSBncmVuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjIzMTYKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpc2VyIGRlbm5lIGdyZW5zIGhpc3RvcmlrayIKKworIzogZ2l0LWd1aS5zaDoyMzIwCittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKK21zZ3N0ciAiVmlzdWFsaXNlciBhbGxlIGdyZW5lcnMgaGlzdG9yaWtrIgorCisjOiBnaXQtZ3VpLnNoOjIzMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKK21zZ3N0ciAiQmxhIGkgZmlsZW5lIHRpbCAlcyIKKworIzogZ2l0LWd1aS5zaDoyMzI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKK21zZ3N0ciAiVmlzdWFsaXNlciBoaXN0b3JpZW4gdGlsICVzIgorCisjOiBnaXQtZ3VpLnNoOjIzMzQgbGliL2RhdGFiYXNlLnRjbDoyNyBsaWIvZGF0YWJhc2UudGNsOjY3Cittc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKK21zZ3N0ciAiRGF0YWJhc2VzdGF0aXN0aWtrIgorCisjOiBnaXQtZ3VpLnNoOjIzMzcgbGliL2RhdGFiYXNlLnRjbDozNAorbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICJLb21wcmVzcyBkYXRhYmFzZW4iCisKKyM6IGdpdC1ndWkuc2g6MjM0MAorbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKK21zZ3N0ciAiVmVyaWZpc2VyIGRhdGFiYXNlbiIKKworIzogZ2l0LWd1aS5zaDoyMzQ3IGdpdC1ndWkuc2g6MjM1MSBnaXQtZ3VpLnNoOjIzNTUgbGliL3Nob3J0Y3V0LnRjbDo3CisjOiBsaWIvc2hvcnRjdXQudGNsOjM5IGxpYi9zaG9ydGN1dC50Y2w6NzEKK21zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgorbXNnc3RyICJMYWcgc2tyaXZlYm9yZHNpa29uIgorCisjOiBnaXQtZ3VpLnNoOjIzNjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxODMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTEKK21zZ2lkICJRdWl0IgorbXNnc3RyICJBdnNsdXR0IgorCisjOiBnaXQtZ3VpLnNoOjIzNzEKK21zZ2lkICJVbmRvIgorbXNnc3RyICJBbmdyZSIKKworIzogZ2l0LWd1aS5zaDoyMzc0Cittc2dpZCAiUmVkbyIKK21zZ3N0ciAiR2rDuHIgb20iCisKKyM6IGdpdC1ndWkuc2g6MjM3OCBnaXQtZ3VpLnNoOjI5MjMKK21zZ2lkICJDdXQiCittc2dzdHIgIktsaXBwIHV0IgorCisjOiBnaXQtZ3VpLnNoOjIzODEgZ2l0LWd1aS5zaDoyOTI2IGdpdC1ndWkuc2g6MzAwMCBnaXQtZ3VpLnNoOjMwODIKKyM6IGxpYi9jb25zb2xlLnRjbDo2OQorbXNnaWQgIkNvcHkiCittc2dzdHIgIktvcGllciIKKworIzogZ2l0LWd1aS5zaDoyMzg0IGdpdC1ndWkuc2g6MjkyOQorbXNnaWQgIlBhc3RlIgorbXNnc3RyICJMaW0gaW5uIgorCisjOiBnaXQtZ3VpLnNoOjIzODcgZ2l0LWd1aS5zaDoyOTMyIGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAorbXNnaWQgIkRlbGV0ZSIKK21zZ3N0ciAiU2xldHQiCisKKyM6IGdpdC1ndWkuc2g6MjM5MSBnaXQtZ3VpLnNoOjI5MzYgZ2l0LWd1aS5zaDozMDg2IGxpYi9jb25zb2xlLnRjbDo3MQorbXNnaWQgIlNlbGVjdCBBbGwiCittc2dzdHIgIlZlbGcgYWxsZSIKKworIzogZ2l0LWd1aS5zaDoyNDAwCittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICJPcHByZXR0Li4uIgorCisjOiBnaXQtZ3VpLnNoOjI0MDYKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAiU2pla2sgdXQuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjQxMgorbXNnaWQgIlJlbmFtZS4uLiIKK21zZ3N0ciAiRW5kcmUgbmF2bi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNDE3Cittc2dpZCAiRGVsZXRlLi4uIgorbXNnc3RyICJTbGV0dC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNDIyCittc2dpZCAiUmVzZXQuLi4iCittc2dzdHIgIlRpbGJha2VzdGlsbC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNDMyCittc2dpZCAiRG9uZSIKK21zZ3N0ciAiRmVyZGlnIgorCisjOiBnaXQtZ3VpLnNoOjI0MzQKK21zZ2lkICJDb21taXRAQHZlcmIiCittc2dzdHIgIlNqZWtrIGlubiIKKworIzogZ2l0LWd1aS5zaDoyNDQzIGdpdC1ndWkuc2g6Mjg2NAorbXNnaWQgIk5ldyBDb21taXQiCittc2dzdHIgIk55IGlubnNqZWtraW5nIgorCisjOiBnaXQtZ3VpLnNoOjI0NTEgZ2l0LWd1aS5zaDoyODcxCittc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCittc2dzdHIgIkxlZ2cgdGlsIGZvcnJpZ2UgaW5uc2pla2tpbmciCisKKyM6IGdpdC1ndWkuc2g6MjQ2MSBnaXQtZ3VpLnNoOjI4MjUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo5OQorbXNnaWQgIlJlc2NhbiIKK21zZ3N0ciAiU8O4ayBww6UgbnkiCisKKyM6IGdpdC1ndWkuc2g6MjQ2NworbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKK21zZ3N0ciAiTGVnZyB0aWwgaSBpbm5zamVra2luZ3Nrw7hlbiIKKworIzogZ2l0LWd1aS5zaDoyNDczCittc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCittc2dzdHIgIkxlZ2cgdGlsIGVuZHJlZGUgZmlsZXIgaSBpbm5zamVra2luZ3Nrw7hlbiIKKworIzogZ2l0LWd1aS5zaDoyNDc5Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAiRmplcm4gZnJhIGlubnNqZWtraW5nc2vDuGVuIgorCisjOiBnaXQtZ3VpLnNoOjI0ODQgbGliL2luZGV4LnRjbDo0MTAKK21zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKK21zZ3N0ciAiVGlsYmFrZXN0aWxsIGVuZHJpbmdlciIKKworIzogZ2l0LWd1aS5zaDoyNDkxIGdpdC1ndWkuc2g6MzA2OQorbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgorbXNnc3RyICJWaXMgbWluZHJlIGlubmhvbGQiCisKKyM6IGdpdC1ndWkuc2g6MjQ5NSBnaXQtZ3VpLnNoOjMwNzMKK21zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKK21zZ3N0ciAiVmlzIG1lciBpbm5ob2xkIgorCisjOiBnaXQtZ3VpLnNoOjI1MDIgZ2l0LWd1aS5zaDoyODM4IGdpdC1ndWkuc2g6Mjk0NworbXNnaWQgIlNpZ24gT2ZmIgorbXNnc3RyICJTaWduw6lyIgorCisjOiBnaXQtZ3VpLnNoOjI1MTgKK21zZ2lkICJMb2NhbCBNZXJnZS4uLiIKK21zZ3N0ciAiTG9rYWwgc2FtbWVuc2zDpWluZy4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTIzCittc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCittc2dzdHIgIkF2YnJ5dCBzYW1tZW5zbMOlaW5nLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1MzUgZ2l0LWd1aS5zaDoyNTc1Cittc2dpZCAiQWRkLi4uIgorbXNnc3RyICJMZWdnIHRpbC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTM5Cittc2dpZCAiUHVzaC4uLiIKK21zZ3N0ciAiU2VuZC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTQzCittc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKK21zZ3N0ciAiRmplcm4gZ3Jlbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTUzIGdpdC1ndWkuc2g6MjU4OSBsaWIvYWJvdXQudGNsOjE0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm91dCAlcyIKK21zZ3N0ciAiT20gJXMiCisKKyM6IGdpdC1ndWkuc2g6MjU1NworbXNnaWQgIlByZWZlcmVuY2VzLi4uIgorbXNnc3RyICJJbm5zdGlsbGluZ2VyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1NjUgZ2l0LWd1aS5zaDozMTE1Cittc2dpZCAiT3B0aW9ucy4uLiIKK21zZ3N0ciAiQWx0ZXJuYXRpdmVyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1NzYKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgIkZqZXJuLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1ODUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MAorbXNnaWQgIkhlbHAiCittc2dzdHIgIkhqZWxwIgorCisjOiBnaXQtZ3VpLnNoOjI2MTEKK21zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKK21zZ3N0ciAiT25saW5lIGRva3VtZW50YXNqb24iCisKKyM6IGdpdC1ndWkuc2g6MjYxNCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYKK21zZ2lkICJTaG93IFNTSCBLZXkiCittc2dzdHIgIlZpcyBTU0gtbsO4a2tlbCIKKworIzogZ2l0LWd1aS5zaDoyNzA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJrcml0aXNrOiBrdW5uZSBpa2tlIGZpbm5lIHN0YXR1cyBmb3Igc3RpICVzOiBJbmdlbiBzbGlrIGZpbCBlbGxlciBrYXRhbG9nIgorCisjOiBnaXQtZ3VpLnNoOjI3NDAKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgIk7DpXbDpnJlbmRlIGdyZW46IgorCisjOiBnaXQtZ3VpLnNoOjI3NjEKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICJLw7hlZGUgZW5kcmluZ2VyICh0aWwgaW5uc2pla2tpbmcpIgorCisjOiBnaXQtZ3VpLnNoOjI3ODEKK21zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgorbXNnc3RyICJVa8O4ZWRlIGVuZHJpbmdlciIKKworIzogZ2l0LWd1aS5zaDoyODMxCittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAiS8O4IGVuZHJldCIKKworIzogZ2l0LWd1aS5zaDoyODUwIGxpYi90cmFuc3BvcnQudGNsOjkzIGxpYi90cmFuc3BvcnQudGNsOjE4MgorbXNnaWQgIlB1c2giCittc2dzdHIgIlNlbmQiCisKKyM6IGdpdC1ndWkuc2g6Mjg4NQorbXNnaWQgIkluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJJbm5sZWRlbmRlIGlubnNqZWtraW5nc21lbGRpbmc6IgorCisjOiBnaXQtZ3VpLnNoOjI4ODYKK21zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiVXRkeXB0IGlubnNqZWtraW5nc21lbGRpbmciCisKKyM6IGdpdC1ndWkuc2g6Mjg4NworbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlV0ZHlwdCBpbm5sZWRlbmRlIGlubnNqZWtraW5nc21lbGRpbmc6IgorCisjOiBnaXQtZ3VpLnNoOjI4ODgKK21zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiVXRkeXB0IGlubnNqZWtraW5nc21lbGRpbmcgZm9yIHNhbW1lbnNsw6Vpbmc6IgorCisjOiBnaXQtZ3VpLnNoOjI4ODkKK21zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlJldmlzam9uc21lbGRpbmcgZm9yIHNhbW1lbnNsw6Vpbmc6IgorCisjOiBnaXQtZ3VpLnNoOjI4OTAKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlJldmlzam9uc21lbGRpbmc6IgorCisjOiBnaXQtZ3VpLnNoOjI5MzkgZ2l0LWd1aS5zaDozMDkwIGxpYi9jb25zb2xlLnRjbDo3MworbXNnaWQgIkNvcHkgQWxsIgorbXNnc3RyICJLb3BpZXIgYWxsZSIKKworIzogZ2l0LWd1aS5zaDoyOTYzIGxpYi9ibGFtZS50Y2w6MTA0Cittc2dpZCAiRmlsZToiCittc2dzdHIgIkZpbDoiCisKKyM6IGdpdC1ndWkuc2g6MzA3OAorbXNnaWQgIlJlZnJlc2giCittc2dzdHIgIk9wcGRhdGVyIgorCisjOiBnaXQtZ3VpLnNoOjMwOTkKK21zZ2lkICJEZWNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIkdqw7hyIHRla3N0ZW4gbWluZHJlIgorCisjOiBnaXQtZ3VpLnNoOjMxMDMKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIkdqw7hyIHRla3N0ZW4gc3TDuHJyZSIKKworIzogZ2l0LWd1aS5zaDozMTExIGxpYi9ibGFtZS50Y2w6MjgxCittc2dpZCAiRW5jb2RpbmciCittc2dzdHIgIlRla3N0a29kaW5nIgorCisjOiBnaXQtZ3VpLnNoOjMxMjIKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgIkJydWsvdGlsYmFrZXN0aWxsIGRlbCIKKworIzogZ2l0LWd1aS5zaDozMTI3Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgorbXNnc3RyICJCcnVrL3RpbGJha2VzdGlsbCBsaW5qZSIKKworIzogZ2l0LWd1aS5zaDozMTM3Cittc2dpZCAiUnVuIE1lcmdlIFRvb2wiCittc2dzdHIgIlN0YXJ0IHNhbW1lbnNsw6VpbmdzcHJvc2VzcyIKKworIzogZ2l0LWd1aS5zaDozMTQyCittc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgorbXNnc3RyICJCcnVrIHZlcnNqb24gZnJhIGZqZXJuYXJraXYiCisKKyM6IGdpdC1ndWkuc2g6MzE0NgorbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICJCcnVrIGxva2FsIHZlcnNqb24iCisKKyM6IGdpdC1ndWkuc2g6MzE1MAorbXNnaWQgIlJldmVydCBUbyBCYXNlIgorbXNnc3RyICJUaWxiYWtlc3RpbGwgdGlsIGJhc2V2ZXJzam9uZW4iCisKKyM6IGdpdC1ndWkuc2g6MzE2OQorbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKK21zZ3N0ciAiRmplcm4gZGVsZW4gZnJhIGlubnNqZWtraW5nc2vDuGVuIgorCisjOiBnaXQtZ3VpLnNoOjMxNzAKK21zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCittc2dzdHIgIkZqZXJuIGxpbmplbiBmcmEgaW5uc2pla2tpbmdza8O4ZW4iCisKKyM6IGdpdC1ndWkuc2g6MzE3MgorbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKK21zZ3N0ciAiTGVnZyBkZWwgaSBpbm5zamVra2luZ3Nrw7hlbiIKKworIzogZ2l0LWd1aS5zaDozMTczCittc2dpZCAiU3RhZ2UgTGluZSBGb3IgQ29tbWl0IgorbXNnc3RyICJMZWdnIHRpbCBsaW5qZSBpIGlubnNqZWtraW5nc2vDuGVuIgorCisjOiBnaXQtZ3VpLnNoOjMxOTYKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIkluaXRzaWFsaXNlcmVyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjMzMDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzMzMQorbXNnaWQgIiIKKyJcbiIKKyJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCisiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1ndWkuc2g6MzMzNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCisiaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCisidXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKKyJ+Ly5naXRjb25maWcgZmlsZS5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYWJvdXQudGNsOjI2Cittc2dpZCAiZ2l0LWd1aSAtIGEgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIGZvciBHaXQuIgorbXNnc3RyICJnaXQtZ3VpIC0gRXQgZ3JhZmlzayBicnVrZXJncmVuc2Vzbml0dCBmb3IgR2l0LiIKKworIzogbGliL2JsYW1lLnRjbDo3MgorbXNnaWQgIkZpbGUgVmlld2VyIgorbXNnc3RyICJGaWx2aXNlciIKKworIzogbGliL2JsYW1lLnRjbDo3OAorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIklubnNqZWtraW5nOiIKKworIzogbGliL2JsYW1lLnRjbDoyNzEKK21zZ2lkICJDb3B5IENvbW1pdCIKK21zZ3N0ciAiS29waWVyIGlubnNqZWtraW5nIgorCisjOiBsaWIvYmxhbWUudGNsOjI3NQorbXNnaWQgIkZpbmQgVGV4dC4uLiIKK21zZ3N0ciAiU8O4ayBldHRlciB0ZWtzdC4uLiIKKworIzogbGliL2JsYW1lLnRjbDoyODQKK21zZ2lkICJEbyBGdWxsIENvcHkgRGV0ZWN0aW9uIgorbXNnc3RyICJHamVubm9tZsO4ciBmdWxsIGRldGVrc2pvbiBhdiBrb3BpZXJpbmdlciIKKworIzogbGliL2JsYW1lLnRjbDoyODgKK21zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKK21zZ3N0ciAiVmlzIGhpc3Rvcmlra2VucyBpbm5ob2xkIgorCisjOiBsaWIvYmxhbWUudGNsOjI5MQorbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCittc2dzdHIgIiIKKworIzogbGliL2JsYW1lLnRjbDo0NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZWFkaW5nICVzLi4uIgorbXNnc3RyICJMZXNlciAlcy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1NTcKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjU3NworbXNnaWQgImxpbmVzIGFubm90YXRlZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjc2OQorbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIiIKKworIzogbGliL2JsYW1lLnRjbDo3NzIKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvYmxhbWUudGNsOjgwMgorbXNnaWQgIkJ1c3kiCittc2dzdHIgIk9wcHRhdHQiCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAzCittc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCittc2dzdHIgIiIKKworIzogbGliL2JsYW1lLnRjbDo4NDIKK21zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgorbXNnc3RyICJLasO4cmVyIGtvcGlkZXRla3RlcmluZy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo5MTAKK21zZ2lkICJMb2FkaW5nIGFubm90YXRpb24uLi4iCittc2dzdHIgIiIKKworIzogbGliL2JsYW1lLnRjbDo5NjQKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJGb3JmYXR0ZXI6IgorCisjOiBsaWIvYmxhbWUudGNsOjk2OAorbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIklubnNqZWtrZXI6IgorCisjOiBsaWIvYmxhbWUudGNsOjk3MworbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgorbXNnc3RyICJPcHByaW5uZWxpZyBmaWw6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwMjEKK21zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCittc2dzdHIgIkZpbm5lciBpa2tlIEhFQUQncyBpbm5zamVra2luZzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA3NgorbXNnaWQgIkNhbm5vdCBmaW5kIHBhcmVudCBjb21taXQ6IgorbXNnc3RyICJLYW4gaWtrZSBmaW5uZSBpbm5zamVra2luZ2VucyBmb3JlbGRlcjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA5MQorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAiS2FuIGlra2UgdmlzZSBmb3JlbGRlciIKKworIzogbGliL2JsYW1lLnRjbDoxMDkyIGxpYi9kaWZmLnRjbDoyOTcKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICJGZWlsIHZlZCBpbm5sYXN0aW5nIGF2IGZvcnNramVsbDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTIzMgorbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgorbXNnc3RyICJPcHByaW5uZWxpZyBhdjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTIzOAorbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICJJIGZpbDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI0MworbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAiS29waWVydCBlbGxlciBmbHl0dGV0IGhpdCBhdjoiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE0IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE5Cittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICJTamVrayB1dCBncmVuIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyMworbXNnaWQgIkNoZWNrb3V0IgorbXNnc3RyICJVdHNqZWtraW5nIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NDQgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgorIzogbGliL29wdGlvbi50Y2w6MTI1IGxpYi9yZW1vdGVfYWRkLnRjbDozMiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0MCBsaWIvdG9vbHNfZGxnLnRjbDoyMDQgbGliL3Rvb2xzX2RsZy50Y2w6MzUyCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo5NworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQXZicnl0IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6Mjg3IGxpYi90b29sc19kbGcudGNsOjMyOAorbXNnaWQgIlJldmlzaW9uIgorbXNnc3RyICJSZXZpc2pvbiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI4MAorbXNnaWQgIk9wdGlvbnMiCittc2dzdHIgIlZhbGciCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiSGVudCBzcG9yZXQgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDQKK21zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCittc2dzdHIgIktvYmxlIGJvcnQgbG9rYWwgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIyCittc2dpZCAiQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAiT3BwcmV0dCBncmVuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjcKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAiT3BwcmV0dCBueSBncmVuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNzcKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIk9wcHJldHQiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MAorbXNnaWQgIkJyYW5jaCBOYW1lIgorbXNnc3RyICJOYXZuIHDDpSBncmVuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMgbGliL3JlbW90ZV9hZGQudGNsOjM5IGxpYi90b29sc19kbGcudGNsOjUwCittc2dpZCAiTmFtZToiCittc2dzdHIgIk5hdm46IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTgKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKK21zZ3N0ciAiQnJ1ayBuYXZuIHDDpSBzcG9yZXQgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Cittc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCittc2dzdHIgIlN0YXJ0ZXIgcmV2aXNqb24iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgorbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgorbXNnc3RyICJPcHBkYXRlciBla3Npc3RlcmVuZGUgZ3JlbjoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorbXNnaWQgIk5vIgorbXNnc3RyICJOZWkiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAorbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgorbXNnc3RyICJLdW4gaHVydGlnZnJlbXNwb2xpbmciCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjUzNgorbXNnaWQgIlJlc2V0IgorbXNnc3RyICJUaWxiYWtlc3RpbGwiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NworbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgorbXNnc3RyICJTamVrayB1dCBldHRlciBvcHByZXR0aW5nIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMxCittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCittc2dzdHIgIlZlbGcgZW4gZ3JlbiBzb20gc2thbCBmw7hsZ2VzLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE0MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiRGVuIGZ1bGd0ZSBncmVuZW4gJXMgZXIgaWtrZSBlbiBncmVuIGkgZmplcm5hcmtpdmV0LiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1MyBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODYKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgorbXNnc3RyICJBbmdpIGV0IG5hdm4gZm9yIGdyZW5lbi4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgYnJhbmNoIG5hbWUuIgorbXNnc3RyICInJXMnIGthbiBpa2tlIGJydWtlcyBzb20gbmF2biBww6UgZW4gZ3Jlbi4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNQorbXNnaWQgIkRlbGV0ZSBCcmFuY2giCittc2dzdHIgIkZqZXJuIGdyZW4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgIkZqZXJuIGxva2FsIGdyZW4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNworbXNnaWQgIkxvY2FsIEJyYW5jaGVzIgorbXNnc3RyICJMb2thbGUgZ3JlbmVyIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTIKK21zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKK21zZ3N0ciAiRmplcm4ga3VuIHZlZCBzYW1tZW5zbMOlaW5nIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTQKK21zZ2lkICJBbHdheXMgKERvIG5vdCBwZXJmb3JtIG1lcmdlIHRlc3QuKSIKK21zZ3N0ciAiQWxsdGlkIChJa2tlIHV0ZsO4ciBzYW1tZW5zbMOlaW5nc3Rlc3QuKSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjEwMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOiIKK21zZ3N0ciAiRsO4bGdlbmRlIGdyZW5lciBlciBpa2tlIGZ1bGxzdGVuZGlnIHNsw6V0dCBzYW1tZW4gbWVkICVzOiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisiS3VubmUgaWtrZSBmamVybmUgZ3JlbmVyOlxuIgorIiVzIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIyCittc2dpZCAiUmVuYW1lIEJyYW5jaCIKK21zZ3N0ciAiR2kgZ3JlbiBueXR0IG5hdm4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgorbXNnaWQgIlJlbmFtZSIKK21zZ3N0ciAiRW5kcmUgbmF2biIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM2Cittc2dpZCAiQnJhbmNoOiIKK21zZ3N0ciAiR3JlbjoiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozOQorbXNnaWQgIk5ldyBOYW1lOiIKK21zZ3N0ciAiTnl0dCBuYXZuOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjc1Cittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgorbXNnc3RyICJWZW5ubGlnc3QgdmVsZyBncmVuZW4gZHUgdmlsIGVuZHJlIG5hdm4gcMOlLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MjAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJHcmVuZW4gJyVzJyBla3Npc3RlcmVyIGFsbGVyZWRlLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCittc2dzdHIgIkt1bm5lIGlra2UgZW5kcmUgbmF2bmV0ICclcycuIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTcKK21zZ2lkICJTdGFydGluZy4uLiIKK21zZ3N0ciAiU3RhcnRlci4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjI2Cittc2dpZCAiRmlsZSBCcm93c2VyIgorbXNnc3RyICJVdGZvcnNrZXIiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxMjYgbGliL2Jyb3dzZXIudGNsOjE0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgJXMuLi4iCittc2dzdHIgIkxhc3RlciAlcy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE4NworbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJbT3BwIHRpbCBmb3JlbGRlcl0iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNjcgbGliL2Jyb3dzZXIudGNsOjI3MworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMiCittc2dzdHIgIkJsYSBpZ2plbm5vbSBncmVuZW5zIGZpbGVyIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5MQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OTUKK21zZ2lkICJCcm93c2UiCittc2dzdHIgIkJsYSBpZ2plbm5vbSIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCittc2dzdHIgIkhlbnRlciAlcyBmcmEgJXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICJrcml0aXNrOiBLYW4gaWtrZSDDpXBuZSAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDUgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKKyM6IGxpYi9zc2hrZXkudGNsOjUzCittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkx1a2siCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJHcmVuZW4gJyVzJyBla3Npc3RlcmVyIGlra2UuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCittc2dzdHIgIkt1bm5lIGlra2Uga29uZmlndXJlcmUgZm9yZW5rbGV0IGdpdC1wdWxsIGZvciAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCisiXG4iCisiSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKKyJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKK21zZ3N0ciAiIgorIkdyZW5lbiAnJXMnIGVrc2lzdGVyZXIgYWxsZXJlZGUuXG4iCisiXG4iCisiRGVuIGthbiBpa2tlIGh1cnRpZ2ZyZW1zcG9sZXMgdGlsICVzLlxuIgorIkVuIHNhbW1lbnNsw6VpbmcgZXIgcMOla3JldmQuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI0MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIlNhbW1lbnNsw6Vpbmdzc3RyYXRlZ2llbiAnJXMnIGVyIGlra2Ugc3TDuHR0ZXQuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCittc2dzdHIgIkt1bm5lIGlra2Ugb3BwZGF0ZXJlICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3MworbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKK21zZ3N0ciAiS8O4b21yw6VkZXQgKGluZGV4KSBlciBhbGxlcmVkZSBsw6VzdC4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg4Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyB3b3JraW5nIGRpcmVjdG9yeSB0byAnJXMnLi4uIgorbXNnc3RyICJPcHBkYXRlcmVyIGFyYmVpZHNrYXRhbG9nZW4gdGlsICclcycuLi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1Cittc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCittc2dzdHIgImZpbGVyIHNqZWtrZXQgdXQiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKK21zZ3N0ciAiQXZicsO4dCB1dHNqZWtraW5nZW4gYXYgJyVzJyAoc2FtbWVuc2zDpWluZyBww6UgZmlsbml2w6Uga3JldmVzKS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2Cittc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCittc2dzdHIgIlNhbW1lbnNsw6VpbmcgcMOlIGZpbG5pdsOlIGtyZXZlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiQmxpciBzdMOlZW5kZSBww6UgZ3JlbmVuICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MQorbXNnaWQgIiIKKyJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIGJlIG9uIGEgYnJhbmNoLCBjcmVhdGUgb25lIG5vdyBzdGFydGluZyBmcm9tICdUaGlzIERldGFjaGVkICIKKyJDaGVja291dCcuIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NDY4IGxpYi9jaGVja291dF9vcC50Y2w6NDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIlNqZWtrZXQgdXQgJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAiIgorIlRpbGJha2VzdGlsbGluZyBhdiAnJXMnIHRpbCAnJXMnIHZpbCBtZWRmw7hyZSB0YXAgYXYgZsO4bGdlbmRlIGlubnNqZWtraW5nZXI6IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUyMgorbXNnaWQgIlJlY292ZXJpbmcgbG9zdCBjb21taXRzIG1heSBub3QgYmUgZWFzeS4iCittc2dzdHIgIiIKKyJEZXQgdmlsIGthbnNramUgaWtrZSB2w6ZyZSBzw6UgZW5rZWx0IMOlIGdqZW5vcHByZXR0ZSBlbiB0YXB0IGlubnNqZWtraW5nLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAnJXMnPyIKK21zZ3N0ciAiVGlsYmFrZXN0aWxsICclcyc/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUzMiBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIlZpc3VhbGlzZXIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKKyJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Cittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJWZWxnIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCittc2dpZCAiRm9udCBGYW1pbHkiCittc2dzdHIgIlNrcmlmdHR5cGUtZmFtaWxpZSIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo3NAorbXNnaWQgIkZvbnQgU2l6ZSIKK21zZ3N0ciAiU2tyaWZ0c3TDuHJyZWxzZSIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo5MQorbXNnaWQgIkZvbnQgRXhhbXBsZSIKK21zZ3N0ciAiU2tyaWZ0ZWtzZW1wZWwiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTAzCittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyJEZXR0ZSBlciBlbiBla3NlbXBlbHRla3N0LlxuIgorIkh2aXMgZHUgbGlrZXIgaHZvcmRhbiB0ZWtzdGVuIHNlciB1dCwga2FuIGR1IHZlbGdlIGRldHRlIHNvbSBkaW4gc2tyaWZ0dHlwZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKK21zZ2lkICJHaXQgR3VpIgorbXNnc3RyICJHaXQgR3VpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzgyCittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICJPcHByZXR0IG55dHQgYXJraXYiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMKK21zZ2lkICJOZXcuLi4iCittc2dzdHIgIk55Li4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ2NQorbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIktsb24gZWtzaXN0ZXJlcmVuZGUgYXJraXYiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2Cittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgIktsb24uLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgzCittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICLDhXBuZSBla3Npc3RlcmVyZW5kZSBhcmtpdiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTkKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICLDhXBuZS4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKK21zZ2lkICJSZWNlbnQgUmVwb3NpdG9yaWVzIgorbXNnc3RyICJOeWxpZyBicnVrdGUgYXJraXYiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTM4Cittc2dpZCAiT3BlbiBSZWNlbnQgUmVwb3NpdG9yeToiCittc2dzdHIgIsOFcG5lIG55bGlnIGJydWt0IGFya2l2OiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAiS3VubmUgaWtrZSBvcHByZXR0ZSBhcmtpdmV0ICVzOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODcKK21zZ2lkICJEaXJlY3Rvcnk6IgorbXNnc3RyICJNYXBwZToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDE3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQ0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTcKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAiR2l0IGFya2l2IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIk1hcHBlbiAlcyBla3Npc3RlcmVyIGFsbGVyZWRlLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiRmlsZW4gJXMgZWtzaXN0ZXJlciBhbGxlcmVkZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDYwCittc2dpZCAiQ2xvbmUiCittc2dzdHIgIktsb24iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDczCittc2dpZCAiU291cmNlIExvY2F0aW9uOiIKK21zZ3N0ciAiS2lsZGVwbGFzc2VyaW5nOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0ODQKK21zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKK21zZ3N0ciAiRGVzdGluYXNqb25zbWFwcGU6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NgorbXNnaWQgIkNsb25lIFR5cGU6IgorbXNnc3RyICJLbG9udHlwZToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCittc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorbXNnc3RyICJTdGFuZGFyZCAocmFzaywgZGVsdmlzIHJlZHVuZGFudCwgaGFyZGxpbmtlcikiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA4Cittc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgorbXNnc3RyICJGdWxsIGtvcGkgKHRyZWdlcmUsIHJlZHVuZGFudCBzaWtrZXJoZXRza29waSkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0Cittc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCittc2dzdHIgIkRlbHQgKHJhc2tlc3QsIGlra2UgYW5iZWZhbHQsIGluZ2VuIHNpa2tlcmhldHNrb3BpZXJpbmcpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIklra2UgZXQgR2l0LWFya2l2OiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1ODYKK21zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIlN0YW5kYXJkIGVyIGt1biB0aWxnamVuZ2VsaWcgZm9yIGxva2FsdCBhcmtpdi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkwCittc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiRGVsdCBlciBrdW4gdGlsZ2plbmdlbGlnIGZvciBsb2thbHQgYXJraXYuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiU3RlZGV0ICVzIGVrc2lzdGVyZXIgYWxsZXJlZGUuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyMgorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgorbXNnc3RyICJLdW5uZSBpa2tlIGtvbmZpZ3VyZXJlIGtpbGRlb3BwZsO4cmluZyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MzQKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJUZWxsZXIgb2JqZWt0ZXIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjM1Cittc2dpZCAiYnVja2V0cyIKK21zZ3N0ciAiYsO4dHRlciIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCittc2dzdHIgIkt1bm5lIGlra2Uga29waWVyZSBvYmpla3Rlci9pbmZvcm1hc2pvbi9hbHRlcm5hdGl2dDogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Njk1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKK21zZ3N0ciAiSW5nZW50aW5nIMOlIGtsb25lIGZyYSAlcy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Njk3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTExCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyMworbXNnaWQgIlRoZSAnbWFzdGVyJyBicmFuY2ggaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiIKK21zZ3N0ciAiR3JlbmVuICdtYXN0ZXInIGhhciBpa2tlIGJsaXR0IGluaXRzaWFsaXNlcnQuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxMAorbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCittc2dzdHIgIkhhcmRlIGxpbmtlciBlciB1dGlsZ2plbmdlbGlnLiBHw6VyIHRpbGJha2UgdGlsIGtvcGllcmluZy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBmcm9tICVzIgorbXNnc3RyICJLbG9uZXIgZnJhICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1MworbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKK21zZ3N0ciAiS29waWVyZXIgb2JqZWt0ZXIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzU0Cittc2dpZCAiS2lCIgorbXNnc3RyICJrQiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgorbXNnc3RyICJLdW5uZSBpa2tlIGtvcGllcmUgb2JqZWt0OiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODgKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIkxlbmtlciBvYmpla3RlciIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODkKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICJvYmpla3RlciIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKK21zZ3N0ciAiS3VubmUgaWtrZSBvcHByZXR0ZSBoYXJkbGluayBtZWQgb2JqZWt0ZXQ6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg1MgorbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIkt1bm5lIGlra2UgaGVudGUgZ3JlbmVyIG9nIG9iamVrdGVyLiBTZSB1dGRhdGEgaSBrb25zb2xsIGZvciBkZXRhbGplci4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODYzCittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICJLdW5uZSBpa2tlIGhlbnRlIHRhZ2dlci4gU2UgdXRkYXRhIGkga29uc29sbCBmb3IgZGV0YWxqZXIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4NworbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIkthbiBpa2tlIGJlc3RlbW1lIEhFQUQuIFNlIHV0ZGF0YSBpIGtvbnNvbGwgZm9yIGRldGFsamVyLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2xlYW51cCAlcyIKK21zZ3N0ciAiS3VubmUgaWtrZSByeWRkZSBvcHAgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTAyCittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAiS2xvbmluZyBmZWlsZXQuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOQorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAiSW5nZW4gc3RhbmRhcmRncmVuIGhlbnRldC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgorbXNnc3RyICJLYW4gaWtrZSBmaW5uZSAlcyBzb20gZW4gaW5uc2pla2tpbmcuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzMgorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJPcHByZXR0ZXIgYXJiZWlkc2thdGFsb2ciCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMzIGxpYi9pbmRleC50Y2w6NjUgbGliL2luZGV4LnRjbDoxMjgKKyM6IGxpYi9pbmRleC50Y2w6MTk2Cittc2dpZCAiZmlsZXMiCittc2dzdHIgImZpbGVyIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2MgorbXNnaWQgIkluaXRpYWwgZmlsZSBjaGVja291dCBmYWlsZWQuIgorbXNnc3RyICJJbml0c2lhbGlzZXJlbmRlIHV0c2pla2tpbmcgZmVpbGV0LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NzgKK21zZ2lkICJPcGVuIgorbXNnc3RyICLDhXBuZSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5ODgKK21zZ2lkICJSZXBvc2l0b3J5OiIKK21zZ3N0ciAiQXJraXY6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gb3BlbiByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAiS3VubmUgaWtrZSDDpXBuZSBhcmtpdmV0ICVzOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzCittc2dpZCAiVGhpcyBEZXRhY2hlZCBDaGVja291dCIKK21zZ3N0ciAiRGVubmUgZnJha29ibGVkZSB1dHNqZWtraW5nZW4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo2MAorbXNnaWQgIlJldmlzaW9uIEV4cHJlc3Npb246IgorbXNnc3RyICJSZXZpc2pvbnN1dHRyeWtrOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc0Cittc2dpZCAiTG9jYWwgQnJhbmNoIgorbXNnc3RyICJMb2thbCBncmVuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzkKK21zZ2lkICJUcmFja2luZyBCcmFuY2giCittc2dzdHIgIlNwb3JldCBncmVuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODQgbGliL2Nob29zZV9yZXYudGNsOjUzOAorbXNnaWQgIlRhZyIKK21zZ3N0ciAiVGFnIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCittc2dzdHIgIlVneWxkaWcgcmV2aXNqb246ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Cittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICJJbmdlbiByZXZpc2pvbmVyIHZhbGd0LiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjM0NgorbXNnaWQgIlJldmlzaW9uIGV4cHJlc3Npb24gaXMgZW1wdHkuIgorbXNnc3RyICJSZXZpc2pvbnN1dHRyeWtrIGVyIHRvbXQuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMxCittc2dpZCAiVXBkYXRlZCIKK21zZ3N0ciAiT3BwZGF0ZXJ0IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Cittc2dpZCAiVVJMIgorbXNnc3RyICJVUkwiCisKKyM6IGxpYi9jb21taXQudGNsOjkKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJcbiIKKyJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgorInRvIGFtZW5kLlxuIgorbXNnc3RyICIiCisiRGV0IGVyIGluZ2VudGluZyDDpSBsZWdnZSB0aWwuXG4iCisiXG4iCisiRHUgZXIgaSBmZXJkIG1lZCDDpSBsYWdlIGRlbiBpbml0c2lhbGlzZXJlbmRlIHJldmlzam9uZW4uIERldCBlciBpbmdlbiAiCisidGlkbGlnZXJlIHJldmlzam9uZXIgw6UgdGlsZsO4eWUuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisiS2FuIGlra2UgdGlsZsO4eWUgdW5kZXIgc2FtbWVuc2zDpWluZy5cbiIKKyJcbiIKKyJEdSBlciBmb3Igw7h5ZWJsaWtrZXQgdW5kZXIgZW4gcMOlZ8OlZW5kZSBzYW1tZW5zbMOlaW5nIHNvbSBpa2tlIGVyIGZ1bGxmw7hydC4gRHUgIgorImthbiBpa2tlIHRpbGbDuHllIGVuIHRpZGxpZ2VyZSByZXZpc2pvbiBtZWQgbWluZHJlIGR1IGbDuHJzdCBhdmJyeXRlciBkZW5uZSAiCisic2FtbWVuc2zDpWluZ2VuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDo0OQorbXNnaWQgIkVycm9yIGxvYWRpbmcgY29tbWl0IGRhdGEgZm9yIGFtZW5kOiIKK21zZ3N0ciAiRmVpbCB2ZWQgaW5uaGVudGluZyBhdiByZXZpc2pvbnNkYXRhIGZvciB0aWxmw7h5aW5nOiIKKworIzogbGliL2NvbW1pdC50Y2w6NzYKK21zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgorbXNnc3RyICJLdW5uZSBpa2tlIGF2Z2rDuHJlIGRpbiBpZGVudGl0ZXQ6IgorCisjOiBsaWIvY29tbWl0LnRjbDo4MQorbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCittc2dzdHIgIlVneWxkaWcgR0lUX0NPTU1JVFRFUl9JREVOVDoiCisKKyM6IGxpYi9jb21taXQudGNsOjEzMworbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MTU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MTY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorbXNnc3RyICIiCisiVWtqZW50IGZpbHN0YXR1cyAlcyBlciBmdW5uZXQuXG4iCisiXG4iCisiRmlsZW4gJXMga2FuIGlra2Ugc2pla2tlcyBpbm4gYXYgZGV0dGUgcHJvZ3JhbW1ldC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTcyCittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCittc2dzdHIgIiIKKyJJbmdlbiBlbmRyaW5nZXIgw6Ugc2pla2tlIGlubi5cbiIKKyJcbiIKKyJEdSBtw6Uga8O4ZSBtaW5zdCBlbiBmaWwgZsO4ciBkdSBrYW4gc2pla2tlIGlubiBub2UuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4NworbXNnaWQgIiIKKyJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKKyJcbiIKKyItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCisiLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKKyItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCittc2dzdHIgIiIKKyJWZW5ubGlnc3QgYW5naSBlbiByZXZpc2pvbnNtZWxkaW5nLlxuIgorIlxuIgorIkVuIGdvZCBtZWxkaW5nIGhhciBmw7hsZ2VuZGUgZm9ybWF0OlxuIgorIlxuIgorIi0gRsO4cnN0ZSBsaW5qZTogRW4gYmVza3JpdmVsc2UgYXYgaHZhIGR1IGhhciBnam9ydCBpIMOpbiBzZXRuaW5nLlxuIgorIi0gQW5kcmUgbGluamU6IEJsYW5rXG4iCisiLSBSZXN0ZXJlbmRlIGxpbmplcjogRm9ya2xhciBodm9yZm9yIGRlbm5lIGVuZHJpbmdlbiBlciBicmEuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjIxMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgorbXNnc3RyICJhZHZhcnNlbDogVGNsIHN0w7h0dGVyIGlra2UgZGVubmUgdGVnbmtvZGluZ2VuICclcycuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMjcKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNDIKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlLWNvbW1pdCBob29rLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNjUKK21zZ2lkICJDYWxsaW5nIGNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29tbWl0LnRjbDoyODAKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiIgorCisjOiBsaWIvY29tbWl0LnRjbDoyOTMKK21zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCittc2dzdHIgIlNqZWtrZXIgaW5uIGVuZHJpbmdlci4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzA5Cittc2dpZCAid3JpdGUtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICJTa3JpdmluZyB0aWwgdHJlIGZlaWxldDoiCisKKyM6IGxpYi9jb21taXQudGNsOjMxMCBsaWIvY29tbWl0LnRjbDozNTQgbGliL2NvbW1pdC50Y2w6Mzc0Cittc2dpZCAiQ29tbWl0IGZhaWxlZC4iCittc2dzdHIgIklubnNqZWtraW5nIGZlaWxldC4iCisKKyM6IGxpYi9jb21taXQudGNsOjMyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQiCittc2dzdHIgIlJldmlzam9uICVzIHNlciB1dCB0aWwgw6UgdsOmcmUga29ycnVwdCIKKworIzogbGliL2NvbW1pdC50Y2w6MzMyCittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiSW5nZW4gZW5kcmluZ2VyIHRpbCBpbm5zamVra2luZy5cbiIKKyJcbiIKKyJJbmdlbiBmaWxlciBibGUgZW5kcmV0IGF2IGRlbm5lIHJldmlzam9uZW4sIG9nIGRldCB2YXIgaWtrZSBlbiByZXZpc2pvbiBmcmEgIgorImVuIHNhbW1lbnNsw6VpbmcuXG4iCisiXG4iCisiRXQgbnl0dCBzw7hrIHZpbCBibGkgc3RhcnRldCBhdXRvbWF0aXNrLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzkKK21zZ2lkICJObyBjaGFuZ2VzIHRvIGNvbW1pdC4iCittc2dzdHIgIkluZ2VuIGVuZHJpbmdlciB0aWwgaW5uc2Vra2luZy4iCisKKyM6IGxpYi9jb21taXQudGNsOjM1MworbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCittc2dzdHIgImNvbW1pdC10cmVlIGZlaWxldDoiCisKKyM6IGxpYi9jb21taXQudGNsOjM3MworbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKK21zZ3N0ciAidXBkYXRlLXJlZiBmZWlsZXQ6IgorCisjOiBsaWIvY29tbWl0LnRjbDo0NjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCittc2dzdHIgIk9wcHJldHRldCBpbm5zamVra2luZyAlczogJXMiCisKKyM6IGxpYi9jb25zb2xlLnRjbDo1OQorbXNnaWQgIldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIkpvYmJlci4uLiBWZW5ubGlnc3QgdmVudC4uLiIKKworIzogbGliL2NvbnNvbGUudGNsOjE4NgorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIlN1a3Nlc3MiCisKKyM6IGxpYi9jb25zb2xlLnRjbDoyMDAKK21zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCittc2dzdHIgIkZlaWw6IEtvbW1hbmRvZW4gZmVpbGV0IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkFudGFsbCBsw7hzZSBvYmpla3RlciIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NAorbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgorbXNnc3RyICJEaXNrcGxhc3MgYnJ1a3QgYXYgbMO4c2Ugb2JqZWt0ZXIiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKK21zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIkFudGFsbCBwYWtrZWRlIG9iamVrdGVyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgorbXNnc3RyICJBbnRhbGwgcGFra2VyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ3Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJEaXNrcGxhc3MgYnJ1a3QgYXYgcGFra2VkZSBvYmpla3RlciIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OAorbXNnaWQgIlBhY2tlZCBvYmplY3RzIHdhaXRpbmcgZm9yIHBydW5pbmciCittc2dzdHIgIlBha2tlZGUgb2JqZWt0ZXIgc29tIGF2dmVudGVyIGZqZXJuaW5nIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ5Cittc2dpZCAiR2FyYmFnZSBmaWxlcyIKK21zZ3N0ciAiQXZmYWxsc2ZpbGVyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjcyCittc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiS29tcHJpbWVyZXIgb2JqZWt0ZGF0YWJhc2VuIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjgzCittc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCittc2dzdHIgIlZlcmlmaXNlcmVyIG9iamVrdGRhdGFiYXNlbiBtZWQgZnNjay1vYmplY3RzIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjEwOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCisiXG4iCisiVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCisidGhlIGRhdGFiYXNlIHdoZW4gbW9yZSB0aGFuICVpIGxvb3NlIG9iamVjdHMgZXhpc3QuXG4iCisiXG4iCisiQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCittc2dzdHIgIiIKKyJEZXR0ZSBhcmtpdmV0IGlubmVob2xkZXIgb210cmVudCAlaSAnbMO4c2UnIG9iamVrdGVyLlxuIgorIlxuIgorIkZvciDDpSBzaWtyZSBlbiBvcHRpbWFsIHl0ZWxzZSBlciBkZXQgc3Rlcmt0IGFuYmVmYWx0IGF0IGR1IGtvbXByaW1lcmVyICIKKyJkYXRhYmFzZW4gbsOlciBkZXQgZXIgZmxlcmUgZW5uICVpICdsw7hzZScgb2JqZWt0ZXIgaSBkZW4uXG4iCisiXG4iCisiS29tcHJpbWVyZSBkYXRhYmFzZW4gbsOlPyIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAiVWd5bGRpZyBkYXRvIGZyYSBHaXQ6ICVzIgorCisjOiBsaWIvZGlmZi50Y2w6NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiJXMgaGFzIG5vIGNoYW5nZXMuXG4iCisiXG4iCisiVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgorInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCisidGhlIHNhbWUgc3RhdGUuIgorbXNnc3RyICIiCisiSW5nZW4gZm9yYW5kcmluZ2VyIGZ1bm5ldC5cbiIKKyJcbiIKKyIlcyBoYXIgaW5nZW4gZW5kcmluZ2VyLlxuIgorIlxuIgorIlRpZHNzdGVtcGVsZXQgZm9yIGVuZHJpbmcgcMOlIGRlbm5lIGZpbGVuIGJsZSBvcHBkYXRlcnQgYXYgZW4gYW5uZW4gIgorIiBhcHBsaWthc2pvbiwgbWVuIGlubmhvbGRldCBlciB1ZW5kcmV0LlxuIgorIlxuIgorIkVuIGdqZW5ub21zw7hraW5nIHZpbCBuw6Ugc3RhcnRlIGF1dG9tYXRpc2sgZm9yIMOlIHNlIG9tIGFuZHJlIGZpbGVyIGhhciAiCisic3RhdHVzLiIKKworIzogbGliL2RpZmYudGNsOjk5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgorbXNnc3RyICJMYXN0ZXIgaW5uIGZvcnNramVsbGVuZSBhdiAlcy4uLiIKKworIzogbGliL2RpZmYudGNsOjEyMAorbXNnaWQgIiIKKyJMT0NBTDogZGVsZXRlZFxuIgorIlJFTU9URTpcbiIKK21zZ3N0ciAiTE9LQUw6IHNsZXR0ZXRcbiIKKyJGSkVSTjpcbiIKKworIzogbGliL2RpZmYudGNsOjEyNQorbXNnaWQgIiIKKyJSRU1PVEU6IGRlbGV0ZWRcbiIKKyJMT0NBTDpcbiIKK21zZ3N0ciAiRkpFUk46IHNsZXR0ZXRcbiIKKyJMT0tBTDpcbiIKKworIzogbGliL2RpZmYudGNsOjEzMgorbXNnaWQgIkxPQ0FMOlxuIgorbXNnc3RyICJMT0tBTDpcbiIKKworIzogbGliL2RpZmYudGNsOjEzNQorbXNnaWQgIlJFTU9URTpcbiIKK21zZ3N0ciAiRkpFUk46XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxOTcgbGliL2RpZmYudGNsOjI5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgorbXNnc3RyICJLYW4gaWtrZSB2aXNlICVzIgorCisjOiBsaWIvZGlmZi50Y2w6MTk4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKK21zZ3N0ciAiRmVpbCB2ZWQgbGVzaW5nIGF2IGZpbDogJXMiCisKKyM6IGxpYi9kaWZmLnRjbDoyMDUKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCittc2dzdHIgIkdpdC1hcmtpdiAodW5kZXJwcm9zamVrdCkiCisKKyM6IGxpYi9kaWZmLnRjbDoyMTcKK21zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCittc2dzdHIgIiogQmluw6ZyZmlsICh2aXNlciBpa2tlIGlubmhvbGQpIgorCisjOiBsaWIvZGlmZi50Y2w6MjIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCisiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCittc2dzdHIgIiIKKyIqIFVzcG9yZXQgZmlsIGVyICVkIGJ5dGVzLlxuIgorIiogVmlzZXIgYmFyZSAlZCBmw7hyc3RlIGJ5dGVzLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgorIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKK21zZ3N0ciAiIgorIlxuIgorIiogVXNwb3JlZGUgZmlsZXIga2xpcHBldCBoZXIgYXYgJXMuXG4iCisiKiBGb3Igw6Ugc2UgaGVsZSBmaWxlbiwgYnJ1ayBldCBla3N0ZXJudCByZWRpZ2VyaW5nc3Zlcmt0w7h5LlxuIgorCisjOiBsaWIvZGlmZi50Y2w6NDM2Cittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkt1bm5lIGlra2UgZmplcm5lIGRlbiB2YWxndGUgZGVsZW4gZnJhIGlubnNqZWtraW5nc2vDuGVuLiIKKworIzogbGliL2RpZmYudGNsOjQ0MworbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAiS3VubmUgaWtrZSBsZWdnZSB0aWwgZGVuIHZhbGd0ZSBkZWxlbiBpIGlubnNqZWtraW5nc2vDuGVuLiIKKworIzogbGliL2RpZmYudGNsOjUwOQorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICJLdW5uZSBpa2tlIGZqZXJuZSBkZW4gdmFsZ3RlIGxpbmplbiBmcmEgaW5uc2pla2tpbmdza8O4ZW4uIgorCisjOiBsaWIvZGlmZi50Y2w6NTE3Cittc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICJLdW5uZSBpa2tlIGxlZ2dlIHRpbCBkZW4gdmFsZ3RlIGxpbmplbiBpIGlubnNqZWtraW5nc2vDuGVuLiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDMKK21zZ2lkICJEZWZhdWx0IgorbXNnc3RyICJTdGFuZGFyZCIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gKCVzKSIKK21zZ3N0ciAiU3lzdGVtZXRzICglcykiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Cittc2dpZCAiT3RoZXIiCittc2dzdHIgIkFuZHJlIgorCisjOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE0Cittc2dpZCAiZXJyb3IiCittc2dzdHIgImZlaWwiCisKKyM6IGxpYi9lcnJvci50Y2w6MzYKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICJhZHZhcnNlbCIKKworIzogbGliL2Vycm9yLnRjbDo5NAorbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCittc2dzdHIgIkR1IG3DpSByZXR0ZSBkZSBvdmVuc3TDpWVuZGUgZmVpbGVuZSBmw7hyIGlubnNqZWtraW5nLiIKKworIzogbGliL2luZGV4LnRjbDo2Cittc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgorbXNnc3RyICJLdW5uZSBpa2tlIGzDpXNlIG9wcCBpbmRleGVuLiIKKworIzogbGliL2luZGV4LnRjbDoxNQorbXNnaWQgIkluZGV4IEVycm9yIgorbXNnc3RyICJGZWlsIHDDpSBpbmRleCIKKworIzogbGliL2luZGV4LnRjbDoyMQorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvICIKKyJyZXN5bmNocm9uaXplIGdpdC1ndWkuIgorbXNnc3RyICIiCisiT3BwZGF0ZXJpbmcgYXYgR2l0J3MgaW5kZXggbWlzbHlrdGVzLiBFdCBueXR0IHPDuGsgdmlsIGJsaSBzdGFydGV0IGZvciDDpSAiCisicmVzeW5rcm9uaXNlcmUgZ2l0LWd1aS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MjcKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiRm9ydHNldHQiCisKKyM6IGxpYi9pbmRleC50Y2w6MzEKK21zZ2lkICJVbmxvY2sgSW5kZXgiCittc2dzdHIgIkzDpXMgb3BwIGluZGV4IgorCisjOiBsaWIvaW5kZXgudGNsOjI4NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKK21zZ3N0ciAiRmplcm5lciAlcyBmcmEgaW5uc2pla2tpbmdza8O4ZW4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzI2Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAiS2xhciB0aWwgaW5uc2pla2tpbmcuIgorCisjOiBsaWIvaW5kZXgudGNsOjMzOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiTGVnZ2VyIHRpbCAlcyIKKworIzogbGliL2luZGV4LnRjbDozOTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKK21zZ3N0ciAiUmV2ZXJ0ZXIgZW5kcmluZ2VuZSBpIGZpbGVuICVzPyIKKworIzogbGliL2luZGV4LnRjbDozOTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCittc2dzdHIgIlJldmVydGVyIGVuZHJpbmdlbmUgaSBkaXNzZSAlaSBmaWxlbmU/IgorCisjOiBsaWIvaW5kZXgudGNsOjQwNgorbXNnaWQgIkFueSB1bnN0YWdlZCBjaGFuZ2VzIHdpbGwgYmUgcGVybWFuZW50bHkgbG9zdCBieSB0aGUgcmV2ZXJ0LiIKK21zZ3N0ciAiRW5kcmluZ2VyIHNvbSBpa2tlIGxpZ2dlciBpIGlubnNqZWtraW5nc2vDuGVuIHZpbCBibGkgdGFwdCBhdiBkZW5uZSAiCisicmV2ZXJ0ZXJpbmdlbiIKKworIzogbGliL2luZGV4LnRjbDo0MDkKK21zZ2lkICJEbyBOb3RoaW5nIgorbXNnc3RyICJJa2tlIGdqw7hyIG5vZSIKKworIzogbGliL2luZGV4LnRjbDo0MjcKK21zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCittc2dzdHIgIlJldmVydGVyZXIgdmFsZ3RlIGZpbGVyIgorCisjOiBsaWIvaW5kZXgudGNsOjQzMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyAlcyIKK21zZ3N0ciAiUmV2ZXJ0ZXJlciAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMworbXNnaWQgIiIKKyJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIkt1bm5lIGlra2Ugc2zDpSBzYW1tZW4gdW5kZXIgdXR2aWRlbHNlLlxuIgorIlxuIgorIkR1IG3DpSBmw7hyc3QgZnVsbGbDuHJlIHV0dmlkZWxzZW4gYXYgZGVubmUgcmV2aXNqb25lbiBmw7hyIGR1IGthbiBzdGFydGUgZW4gIgorInNhbW1lbnNsw6VpbmcuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjcKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2UudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgorIlxuIgorIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgorIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2UudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKKyJcbiIKKyJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgorIlxuIgorIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgorIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvbWVyZ2UudGNsOjEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIG9mICVzIgorbXNnc3RyICIlcyBhdiAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKK21zZ3N0ciAiU2zDpXIgc2FtbWVuICVzIG9nICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMQorbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgorbXNnc3RyICJWZWxseWtrZXQgc2FtbWVuc2zDpWluZyBmdWxsZsO4cnQuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMworbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICJTYW1tZW5zbMOlaW5nIGZlaWxldC4gSMOlbmR0ZXJpbmcgYXYga29uZmxpa3RlbiBrcmV2ZXMuIgorCisjOiBsaWIvbWVyZ2UudGNsOjE1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIEludG8gJXMiCittc2dzdHIgIlNsw6Ugc2FtbWVuIGlubiBpICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjE3NworbXNnaWQgIlJldmlzaW9uIFRvIE1lcmdlIgorbXNnc3RyICJSZXZpc2pvbiB0aWwgc2FtbWVuc2zDpWluZyIKKworIzogbGliL21lcmdlLnRjbDoyMTIKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkthbiBpa2tlIGF2YnJ5dGUgdW5kZXIgdXR2aWRlbHNlIGF2IHJldmlzam9uLlxuIgorIlxuIgorIkR1IG3DpSBmdWxsZsO4cmUgdXR2aWRlbHNlbiBhdiBkZW5uZSByZXZpc2pvbmVuLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyMgorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorIkF2YnJ5dCBzYW1tZW5zbMOlaW5nP1xuIgorIlxuIgorIkF2YnJ5dGluZyBhdiBww6Vnw6VlbmRlIHNhbW1lbnNsw6VpbmcgdmlsIGbDuHJlIHRpbCBhdCAqYWxsZSogZW5kcmluZ2VyIHNvbSBpa2tlICIKKyIgZXIgc2pla2tldCBpbm4sIHZpbCBnw6UgdGFwdC5cbiIKKyJcbiIKKyJGb3J0c2V0dGUgbWVkIMOlIGF2YnJ5dGUgZGVuIHDDpWfDpWVuZGUgc2FtbWVuc2zDpWluZ2VuPyIKKworIzogbGliL21lcmdlLnRjbDoyMjgKK21zZ2lkICIiCisiUmVzZXQgY2hhbmdlcz9cbiIKKyJcbiIKKyJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCittc2dzdHIgIiIKKyJOdWxsc3RpbGwgZW5kcmluZ2VyP1xuIgorIlxuIgorIk51bGxzdGlsbGluZyBhdiBlbmRyaW5nZXIgdmlsIGbDuHJlIHRpbCBhdCAqYWxsZSogZW5kcmluZ2VyIHNvbSBpa2tlIGVyICIKKyJzamVra2V0IGlubiBnw6VyIHRhcHQuXG4iCisiXG4iCisiRm9ydHNldHRlIG1lZCBudWxsc3RpbGxpbmcgYXYgZW5kcmluZ2VyPyIKKworIzogbGliL21lcmdlLnRjbDoyMzkKK21zZ2lkICJBYm9ydGluZyIKK21zZ3N0ciAiQXZicnl0ZXIiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiZmlsZXMgcmVzZXQiCittc2dzdHIgImZpbGVyIHRpbGJha2VzdGlsdCIKKworIzogbGliL21lcmdlLnRjbDoyNjcKK21zZ2lkICJBYm9ydCBmYWlsZWQuIgorbXNnc3RyICJBdmJyeXRpbmcgZmVpbGV0LiIKKworIzogbGliL21lcmdlLnRjbDoyNjkKK21zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCittc2dzdHIgIkF2YnJ5dGluZyBmdWxsZsO4cnQuIEtsYXIuIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKK21zZ3N0ciAiVHZpbmcgaMOlbmR0ZXJpbmcgdGlsIG9wcHJpbm5lbGlnIHZlcnNqb24/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo5Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCittc2dzdHIgIlR2aW5nIGjDpW5kdGVyaW5nIGkgZGVubmUgZ3JlbmVuPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTAKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBvdGhlciBicmFuY2g/IgorbXNnc3RyICJUdmluZyBow6VuZHRlcmluZyBpIGRlbiBhbmRyZSBncmVuZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlIHRoYXQgdGhlIGRpZmYgc2hvd3Mgb25seSBjb25mbGljdGluZyBjaGFuZ2VzLlxuIgorIlxuIgorIiVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4iCisiXG4iCisiVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVuZG9uZSBvbmx5IGJ5IHJlc3RhcnRpbmcgdGhlIG1lcmdlLiIKK21zZ3N0ciAiIgorIk1lcmsgZGVnIGF0IGVuZHJpbmdzdmlzbmluZ2VuIGt1biB2aXNlciBtb3RzdHJpZGVuZGUgZW5kcmluZ2VyLlxuIgorIlxuIgorIiVzIHZpbCBibGkgb3ZlcnNrcmV2ZXQuXG4iCisiXG4iCisiRGVubmUgb3BlcmFzam9uZW4ga2FuIGt1biBibGkgYW5ncmV0IHZlZCDDpSBzdGFydGUgc2FtbWVuc2zDpWluZ2VuIHDDpSBueS4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCittc2dzdHIgIkZpbGVuICVzIHNlciB1dCB0aWwgw6UgaGEgdWzDuHN0ZSBrb25mbGlrdGVyLCBza2FsIGZpbGVuIGxpa2V2ZWwga8O4ZXM/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKK21zZ3N0ciAiTGVnZ2VyIHRpbCBsw7hzbmluZ2UgcMOlIGtvbmZsaWt0IGZvciAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQxCittc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgorbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIktvbmZsaWt0ZmlsIGVrc2lzdGVyZXIgaWtrZSIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90IGEgR1VJIG1lcmdlIHRvb2w6ICclcyciCittc2dzdHIgIiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMwMworbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgorIiVzIgorbXNnc3RyICIiCisiS3VubmUgaWtrZSBoZW50ZSB2ZXJzam9uZXI6XG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzQ3Cittc2dpZCAiUnVubmluZyBtZXJnZSB0b29sLi4uIgorbXNnc3RyICIiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKK21zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogbGliL29wdGlvbi50Y2w6MTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGdsb2JhbCBlbmNvZGluZyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXBvIGVuY29kaW5nICclcyciCittc2dzdHIgIiIKKworIzogbGliL29wdGlvbi50Y2w6MTE3Cittc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKK21zZ3N0ciAiR2plbm5vcHByZXR0IHN0YW5kYXJkdmVyZGllciIKKworIzogbGliL29wdGlvbi50Y2w6MTIxCittc2dpZCAiU2F2ZSIKK21zZ3N0ciAiTGFncmUiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIFJlcG9zaXRvcnkiCittc2dzdHIgIiVzIGFya2l2IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzIKK21zZ2lkICJHbG9iYWwgKEFsbCBSZXBvc2l0b3JpZXMpIgorbXNnc3RyICJHbG9iYWx0IChhbGxlIGFya2l2KSIKKworIzogbGliL29wdGlvbi50Y2w6MTM4Cittc2dpZCAiVXNlciBOYW1lIgorbXNnc3RyICJOYXZuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzkKK21zZ2lkICJFbWFpbCBBZGRyZXNzIgorbXNnc3RyICJFcG9zdC1hZHJlc3NlIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDEKK21zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKK21zZ3N0ciAiT3Bwc3VtbWVyIGlubnNqZWtraW5nZXIgZnJhIHNhbW1lbnNsw6VpbmdlciIKKworIzogbGliL29wdGlvbi50Y2w6MTQyCittc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgorbXNnc3RyICJEZXRhbGplbml2w6UgcMOlIHNhbW1lbnNsw6VpbmciCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MworbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCittc2dzdHIgIlZpcyBlbmRyaW5nc3N0YXRpc3Rpa2sgZXR0ZXIgc2FtbWVuc2zDpWluZyIKKworIzogbGliL29wdGlvbi50Y2w6MTQ0Cittc2dpZCAiVXNlIE1lcmdlIFRvb2wiCittc2dzdHIgIkJydWsgc2FtbWVuc2zDpWluZ3N2ZXJrdMO4eSIKKworIzogbGliL29wdGlvbi50Y2w6MTQ2Cittc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKK21zZ3N0ciAiU3RvbCBww6UgZmlsZXJzIHRpZCBmb3IgZW5kcmluZyIKKworIzogbGliL29wdGlvbi50Y2w6MTQ3Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OQorbXNnaWQgIkJsYW1lIENvcHkgT25seSBPbiBDaGFuZ2VkIEZpbGVzIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MAorbXNnaWQgIk1pbmltdW0gTGV0dGVycyBUbyBCbGFtZSBDb3B5IE9uIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MQorbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgorbXNnc3RyICIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MgorbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCittc2dzdHIgIkFudGFsbCBsaW5qZXIgc2FtbWVuaGVuZ2VuZGUgZW5kcmluZ2VyIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTMKK21zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgorbXNnc3RyICJUZWtzdGJyZWRkZSBmb3IgdmluZHUgdGlsIGlubnNqZWtraW5nc21lbGRpbmdlciIKKworIzogbGliL29wdGlvbi50Y2w6MTU0Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJNYWwgZm9yIG5hdm4gcMOlIG55ZSBncmVuZXIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NQorbXNnaWQgIkRlZmF1bHQgRmlsZSBDb250ZW50cyBFbmNvZGluZyIKK21zZ3N0ciAiU3RhbmRhcmQgdGVrc3RlbmtvZGluZyBmb3IgaW5uaG9sZCBpIGZpbGVyIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMDMKK21zZ2lkICJDaGFuZ2UiCittc2dzdHIgIkVuZHJlIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMzAKK21zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKK21zZ3N0ciAiU3RhdmVib2tvcmRsaXN0ZXI6IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTQKK21zZ2lkICJDaGFuZ2UgRm9udCIKK21zZ3N0ciAiRW5kcmUgc2tyaWZ0dHlwZSIKKworIzogbGliL29wdGlvbi50Y2w6MjU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hvb3NlICVzIgorbXNnc3RyICJWZWxnICVzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNjQKK21zZ2lkICJwdC4iCittc2dzdHIgInB0LiIKKworIzogbGliL29wdGlvbi50Y2w6Mjc4Cittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIkVnZW5za2FwZXIiCisKKyM6IGxpYi9vcHRpb24udGNsOjMxNAorbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCittc2dzdHIgIkt1bm5lIGlra2UgbGFncmUgYWx0ZXJuYXRpdjoiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2MworbXNnaWQgIlJlbW92ZSBSZW1vdGUiCittc2dzdHIgIkZqZXJuIGZqZXJuYXJraXYiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2OAorbXNnaWQgIlBydW5lIGZyb20iCittc2dzdHIgIkZqZXJuIGZyYSIKKworIzogbGliL3JlbW90ZS50Y2w6MTczCittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAiSGVudCBmcmEiCisKKyM6IGxpYi9yZW1vdGUudGNsOjIxNQorbXNnaWQgIlB1c2ggdG8iCittc2dzdHIgIlNlbmQgdGlsIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTkKK21zZ2lkICJBZGQgUmVtb3RlIgorbXNnc3RyICJMZWdnIHRpbCBmamVybmFya2l2IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjQKK21zZ2lkICJBZGQgTmV3IFJlbW90ZSIKK21zZ3N0ciAiTGVnZyB0aWwgbnl0dCBmamVybmFya2l2IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjggbGliL3Rvb2xzX2RsZy50Y2w6MzYKK21zZ2lkICJBZGQiCittc2dzdHIgIkxlZ2cgdGlsIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzcKK21zZ2lkICJSZW1vdGUgRGV0YWlscyIKK21zZ3N0ciAiRGV0YWxqZXIgZm9yIGZqZXJuYXJraXYiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo1MAorbXNnaWQgIkxvY2F0aW9uOiIKK21zZ3N0ciAiTG9rYXNqb246IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjIKK21zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKK21zZ3N0ciAiVmlkZXJlIGhhbmRsaW5nIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiSGVudCB1bWlkZGVsYmFydCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjcxCittc2dpZCAiSW5pdGlhbGl6ZSBSZW1vdGUgUmVwb3NpdG9yeSBhbmQgUHVzaCIKK21zZ3N0ciAiSW5pdHNpYWxpc2VyIG9nIHNlbmQgdGlsIGZqZXJuYXJraXYiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo3NworbXNnaWQgIkRvIE5vdGhpbmcgRWxzZSBOb3ciCittc2dzdHIgIklra2UgZ2rDuHIgbWVyIG7DpSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCittc2dzdHIgIlZlbm5saWdzdCBhbmdpIGV0IG5hdm4gZm9yIGZqZXJuYXJraXZldC4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiJyVzJyBlciBpa2tlIGV0IHRpbGxhdHQgbmF2biBmb3IgZXQgZmplcm5hcmtpdi4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHJlbW90ZSAnJXMnIG9mIGxvY2F0aW9uICclcycuIgorbXNnc3RyICJLdW5uZSBpa2tlIGxlZ2dlIHRpbCBmamVybmFya2l2ZXQgJyVzJyBww6UgJyVzJy4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMgbGliL3RyYW5zcG9ydC50Y2w6NgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZldGNoICVzIgorbXNnc3RyICJoZW50ICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgorbXNnc3RyICJIZW50ZXIgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorbXNnc3RyICJWZXQgaWtrZSBodm9yZGFuIGFya2l2IHDDpSAnJXMnIHNrYWwgb3BwcmV0dGVzLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MyBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgInB1c2ggJXMiCittc2dzdHIgInNlbmQgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgorbXNnc3RyICJJbml0c2lhbGlzZXJlciAlcyAocMOlICVzKSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Cittc2dpZCAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKK21zZ3N0ciAiRmplcm4gZ3JlbiBmcmEgZmplcm5hcmtpdiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0NworbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKK21zZ3N0ciAiRnJhIGFya2l2IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjUwIGxpYi90cmFuc3BvcnQudGNsOjEyMworbXNnaWQgIlJlbW90ZToiCittc2dzdHIgIkZqZXJuYXJraXY6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjY2IGxpYi90cmFuc3BvcnQudGNsOjEzOAorbXNnaWQgIkFyYml0cmFyeSBMb2NhdGlvbjoiCittc2dzdHIgIlZpbGvDpXJsaWcgbG9rYXNqb246IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg0Cittc2dpZCAiQnJhbmNoZXMiCittc2dzdHIgIkdyZW5lciIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDkKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAiU2xldHQga3VuIGh2aXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTExCittc2dpZCAiTWVyZ2VkIEludG86IgorbXNnc3RyICJTbMOldHQgc2FtbWVuIGk6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExOQorbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKK21zZ3N0ciAiQWxsdGlkIChJa2tlIHV0ZsO4ciBzYW1tZW5zbMOlaW5nc2tvbnRyb2xsKSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTIKK21zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCittc2dzdHIgIkVuIGdyZW4ga3JldmVzIGZvciAnc2FtbWVuc2zDpWluZyBpJy4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgorIlxuIgorIiAtICVzIgorbXNnc3RyICIiCisiRsO4bGdlbmRlIGdyZW5lciBlciBpa2tlIGZ1bGxlc3RlbmRpZyBzYW1tZW5zbMOldHQgbWVkICVzOlxuIgorIlxuIgorIiAtICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKKyJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKK21zZ3N0ciAiIgorIkVuIGVsbGVyIGZsZXJlIGF2IHRlc3RlbmUgc29tIGJsaXIga2rDuHJ0IHVuZGVyIHNhbW1lbnNsw6VpbmcgZmVpbGV0IGZvcmRpIGR1IgorImlra2UgaGFyIGhlbnRldCBpbm4gZGUgbsO4ZHZlbmRpZ2UgaW5uc2pla2tpbmdlbmUuIFByw7h2IMOlIGhlbnQgZGlzc2UgZnJhICVzIgorImbDuHJzdCIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDcKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgIlZlbGcgZW4gZWxsZXIgZmxlcmUgZ3JlbmVyIHNvbSBza2FsIGZqZXJuZXMuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNgorbXNnaWQgIiIKKyJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgorIlxuIgorIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisiR2plbm9wcHJldHRpbmcgYXYgZmplcm5lZGUgZ3JlbmVyIGVyIHZhbnNrZWxpZy5cbiIKKyJcbiIKKyJGamVybiBkZW4gbWVya2VkZSBncmVuZW4/IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRlbGV0aW5nIGJyYW5jaGVzIGZyb20gJXMiCittc2dzdHIgIkZqZXJuZXIgZ3JlbmVuZSBmcmEgJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjg2Cittc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCittc2dzdHIgIkluZ2VuIGFya2l2IHZhbGd0LiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAiU8O4a2VyICVzLi4uIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMQorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICJGaW5uOiIKKworIzogbGliL3NlYXJjaC50Y2w6MjMKK21zZ2lkICJOZXh0IgorbXNnc3RyICJOZXN0ZSIKKworIzogbGliL3NlYXJjaC50Y2w6MjQKK21zZ2lkICJQcmV2IgorbXNnc3RyICJGb3JyaWdlIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyNQorbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgorbXNnc3RyICJTa2lsbGVyIHDDpSBzdG9yZSBvZyBzbcOlIGJva3N0YXZlciIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyMCBsaWIvc2hvcnRjdXQudGNsOjYxCittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAiS2FuIGlra2Ugb3BwcmV0dGUgc25hcnZlaToiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM2Cittc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgorbXNnc3RyICJLYW4gaWtrZSBvcHByZXR0ZSBpa29uOiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Cittc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiU3RhdmVrb250cm9sbGVyZW4gZXIgaWtrZSBzdMO4dHRldCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Cittc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCittc2dzdHIgIlN0YXZla29udHJvbGwgZXIgaWtrZSB0aWxnamVuZ2VsaWciCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiVWd5bGRpZyBzdGF2ZWtvbnRyb2xsLWtvbmZpZ3VyYXNqb24iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKK21zZ3N0ciAiUmV2ZXJ0ZXJlciBvcmRib2sgdGlsICVzLiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjczCittc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKK21zZ3N0ciAiU3RhdmVrb250cm9sbGVuIGZlaWxldCBzdGlsbGUgdW5kZXIgb3Bwc3RhcnQiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo4MAorbXNnaWQgIlVucmVjb2duaXplZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJTdGF2ZWtvbnRyb2xsZXJlbiBlciB1a2plbnQiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDoxODYKK21zZ2lkICJObyBTdWdnZXN0aW9ucyIKK21zZ3N0ciAiSW5nZW4gZm9yc2xhZyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAorbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiVXZlbnRldCBzbHV0dCBww6UgZmlsZW4gZnJhIHN0YXZla29udHJvbGxlbiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM5MgorbXNnaWQgIlNwZWxsIENoZWNrZXIgRmFpbGVkIgorbXNnc3RyICJTdGF2ZWtvbnRyb2xsIG1pc2x5a3RlcyIKKworIzogbGliL3NzaGtleS50Y2w6MzEKK21zZ2lkICJObyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAiSW5nZW4gbsO4a2xlciBmdW5uZXQuIgorCisjOiBsaWIvc3Noa2V5LnRjbDozNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCittc2dzdHIgIkZ1bm5ldCBlbiBvZmZlbnRsaWcgbsO4a2tlbCBpOiAlcyIKKworIzogbGliL3NzaGtleS50Y2w6NDAKK21zZ2lkICJHZW5lcmF0ZSBLZXkiCittc2dzdHIgIkdlbmVyZXIgbsO4a2tlbCIKKworIzogbGliL3NzaGtleS50Y2w6NTYKK21zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKK21zZ3N0ciAiS29waWVyIHRpbCB1dGtsaXBwc3RhdmxlbiIKKworIzogbGliL3NzaGtleS50Y2w6NzAKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAiRGluIG9mZmVudGxpZ2UgT3BlblNTSC1uw7hra2VsIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3OAorbXNnaWQgIkdlbmVyYXRpbmcuLi4iCittc2dzdHIgIkdlbmVyZXJlci4uLiIKKworIzogbGliL3NzaGtleS50Y2w6ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJLdW5uZSBpa2tlIHN0YXJ0ZSBzc2gta2V5Z2VuOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMTEKK21zZ2lkICJHZW5lcmF0aW9uIGZhaWxlZC4iCittc2dzdHIgIkdlbmVyZXJpbmcgZmVpbGV0LiIKKworIzogbGliL3NzaGtleS50Y2w6MTE4Cittc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAiR2VuZXJlcmluZyB2ZWxseWtrZXQsIG1lbiBpbmdlbiBuw7hrbGVyIGVyIGZ1bm5ldC4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjEyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKK21zZ3N0ciAiTsO4a2tlbGVuIGRpbiBsaWdnZXIgaTogJXMiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiVzIC4uLiAlKmkgYXYgJSppICVzICglM2klJSkiCisKKyM6IGxpYi90b29scy50Y2w6NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgIsOFIGtqw7hyZSAlcyBrcmV2ZXIgYXQgZW4gZmlsIGVyIHZhbGd0IgorCisjOiBsaWIvdG9vbHMudGNsOjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCittc2dzdHIgIkVyIGR1IHNpa2tlciBww6UgYXQgZHUgdmlsIGtqw7hyZSAlcz8iCisKKyM6IGxpYi90b29scy50Y2w6MTEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbDogJXMiCittc2dzdHIgIlZlcmt0w7h5OiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAiS2rDuHJlcjogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKK21zZ3N0ciAiVmVya3TDuHlldCBibGUgZnVsbGbDuHJ0IG1lZCBzdWtzZXNzOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGZhaWxlZDogJXMiCittc2dzdHIgIlZlcmt0w7h5IGZlaWxldDogJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIyCittc2dpZCAiQWRkIFRvb2wiCittc2dzdHIgIkxlZ2cgdGlsIHZlcmt0w7h5IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAorbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgorbXNnc3RyICJMZWdnIHRpbCBueSB2ZXJrdMO4eWtvbW1hbmRvIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMworbXNnaWQgIkFkZCBnbG9iYWxseSIKK21zZ3N0ciAiTGVnZyB0aWwgZ2xvYmFsdCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDUKK21zZ2lkICJUb29sIERldGFpbHMiCittc2dzdHIgIlZlcmt0w7h5ZGV0YWxqZXIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjQ4Cittc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCittc2dzdHIgIkJydWsgJy8nLXNlcGFyYXRvciBmb3Igw6UgbGFnZSB1bmRlcm1lbnllcjoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjYxCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIktvbW1hbmRvOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzQKK21zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgorbXNnc3RyICJWaXMgZW4gZGlhbG9nIGbDuHIgc3RhcnQiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjgwCittc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCittc2dzdHIgIlNww7hyIGJydWtlcmVuIG9tIMOlIHZlbGdlIGVuIHJldmlzam9uIChzZXR0ZXIgJFJFVklTSU9OKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODUKK21zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKK21zZ3N0ciAiU3DDuHIgYnJ1a2VyZW4gZm9yIHl0dGVybGlnZXJlIHBhcmFtdGVyZSAoc2V0dGVyICRBUkdTKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTIKK21zZ2lkICJEb24ndCBzaG93IHRoZSBjb21tYW5kIG91dHB1dCB3aW5kb3ciCittc2dzdHIgIklra2UgdmlzIGtvbW1hbmRvZW5zIHV0ZGF0YSBpIHZpbmR1ZXQiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjk3Cittc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKK21zZ3N0ciAiS2rDuHIga3VuIG9tIGZvcnNramVsbGVuZSBlciBtYXJrZXJ0ICgkRklMRU5BTUUgZXIgaWtrZSB0b20pIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjEKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgbmFtZSBmb3IgdGhlIHRvb2wuIgorbXNnc3RyICJWZW5ubGlnc3QgYW5naSBldCBuYXZuIGZvciBkZXR0ZSB2ZXJrdMO4eWV0LiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiVmVya3TDuHlldCAnJXMnIGVrc2lzdGVyZXIgYWxsZXJlZGUuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFkZCB0b29sOlxuIgorIiVzIgorbXNnc3RyICIiCisiS3VubmUgaWtrZSBsZWdnZSB0aWwgdmVya3TDuHlldDpcbiIKKyIlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTkwCittc2dpZCAiUmVtb3ZlIFRvb2wiCittc2dzdHIgIkZqZXJuIHZlcmt0w7h5ZXQiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5NgorbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgorbXNnc3RyICJGamVybiB2ZXJrdMO4eXNrb21tYW5kb2VuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDAKK21zZ2lkICJSZW1vdmUiCittc2dzdHIgIkZqZXJuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoQmx1ZSBhbmdpciBsb2thbGUgdmVya3TDuHkgdGlsIGFya2l2ZXQpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW4gQ29tbWFuZDogJXMiCittc2dzdHIgIktqw7hyIGtvbW1hbmRvOiAlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzExCittc2dpZCAiQXJndW1lbnRzIgorbXNnc3RyICJBcmd1bWVudGVyIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDgKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgorbXNnc3RyICJIZW50ZXIgbnllIGVuZHJpbmdlciBmcmEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicmVtb3RlIHBydW5lICVzIgorbXNnc3RyICJzbGV0dCBmamVybmFya2l2ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgorbXNnc3RyICJGanJuZXIgc3BvcmluZyBhdiBncmVuZXIgc2xldHRldCBmcmEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgorbXNnc3RyICJTZW5kZXIgZW5kcmluZ2VyIHRpbCAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgorbXNnc3RyICJTZW5kZXIgJXMgJXMgdGlsICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4OQorbXNnaWQgIlB1c2ggQnJhbmNoZXMiCittc2dzdHIgIlNlbmQgZ3JlbmVyIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDMKK21zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCittc2dzdHIgIktpbGRlZ3JlbmVyIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMjAKK21zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgorbXNnc3RyICJEZXN0aW5hc2pvbnNhcmtpdiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTU4Cittc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKK21zZ3N0ciAiT3ZlcmbDuHJpbmdzYWx0ZXJuYXRpdmVyIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjAKK21zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKK21zZ3N0ciAiVHZpbmcgb3ZlcnNrcml2bmluZyBhdiBla3Npc3RlcmVuZGUgZ3JlbiAoa2FuIGZvcmthc3RlIGVuZHJpbmdlcikiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2NAorbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgorbXNnc3RyICJCcnVrIHR5bm5lIHBha2tlciAoZm9yIHRyZWdlcmUgbmV0dHZlcmtzdGlsa29ibGluZ2VyKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTY4Cittc2dpZCAiSW5jbHVkZSB0YWdzIgorbXNnc3RyICJJbmtsdWRlciB0YWdnZXIiCmRpZmYgLS1naXQgYS9naXQtZ3VpL3BvL3BvMm1zZy5zaCBiL2dpdC1ndWkvcG8vcG8ybXNnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlOWY5OTIKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL3BvMm1zZy5zaApAQCAtMCwwICsxLDE1MiBAQAorIyEvYmluL3NoCisjIFRjbCBpZ25vcmVzIHRoZSBuZXh0IGxpbmUgLSotIHRjbCAtKi0gXAorZXhlYyB0Y2xzaCAiJDAiIC0tICIkQCIKKworIyBUaGlzIGlzIGEgcmVhbGx5IHN0dXBpZCBwcm9ncmFtLCB3aGljaCBzZXJ2ZXMgYXMgYW4gYWx0ZXJuYXRpdmUgdG8KKyMgbXNnZm10LiAgSXQgX29ubHlfIHRyYW5zbGF0ZXMgdG8gVGNsIG1vZGUsIGRvZXMgX25vdF8gdmFsaWRhdGUgdGhlCisjIGlucHV0LCBhbmQgZG9lcyBfbm90XyBvdXRwdXQgYW55IHN0YXRpc3RpY3MuCisKK3Byb2MgdTJhIHtzfSB7CisJc2V0IHJlcyAiIgorCWZvcmVhY2ggaSBbc3BsaXQgJHMgIiJdIHsKKwkJc2NhbiAkaSAlYyBjCisJCWlmIHskYzwxMjh9IHsKKwkJCSMgZXNjYXBlICdbJywgJ1wnLCAnJCcgYW5kICddJworCQkJaWYgeyRjID09IDB4NWIgfHwgJGMgPT0gMHg1ZCB8fCAkYyA9PSAweDI0fSB7CisJCQkJYXBwZW5kIHJlcyAiXFwiCisJCQl9CisJCQlhcHBlbmQgcmVzICRpCisJCX0gZWxzZSB7CisJCQlhcHBlbmQgcmVzIFxcdVtmb3JtYXQgJTA0LjR4ICRjXQorCQl9CisJfQorCXJldHVybiAkcmVzCit9CisKK3NldCBvdXRwdXRfZGlyZWN0b3J5ICIuIgorc2V0IGxhbmcgImR1bW15Igorc2V0IGZpbGVzIFtsaXN0XQorc2V0IHNob3dfc3RhdGlzdGljcyAwCisKKyMgcGFyc2Ugb3B0aW9ucworZm9yIHtzZXQgaSAwfSB7JGkgPCAkYXJnY30ge2luY3IgaX0geworCXNldCBhcmcgW2xpbmRleCAkYXJndiAkaV0KKwlpZiB7JGFyZyA9PSAiLS1zdGF0aXN0aWNzIn0geworCQlpbmNyIHNob3dfc3RhdGlzdGljcworCQljb250aW51ZQorCX0KKwlpZiB7JGFyZyA9PSAiLS10Y2wifSB7CisJCSMgd2Uga25vdworCQljb250aW51ZQorCX0KKwlpZiB7JGFyZyA9PSAiLWwifSB7CisJCWluY3IgaQorCQlzZXQgbGFuZyBbbGluZGV4ICRhcmd2ICRpXQorCQljb250aW51ZQorCX0KKwlpZiB7JGFyZyA9PSAiLWQifSB7CisJCWluY3IgaQorCQlzZXQgdG1wIFtsaW5kZXggJGFyZ3YgJGldCisJCXJlZ3N1YiAiXFteL1xdJCIgJHRtcCAiJi8iIG91dHB1dF9kaXJlY3RvcnkKKwkJY29udGludWUKKwl9CisJbGFwcGVuZCBmaWxlcyAkYXJnCit9CisKK3Byb2MgZmx1c2hfbXNnIHt9IHsKKwlnbG9iYWwgbXNnaWQgbXNnc3RyIG1vZGUgbGFuZyBvdXQgZnV6enkKKwlnbG9iYWwgdHJhbnNsYXRlZF9jb3VudCBmdXp6eV9jb3VudCBub3RfdHJhbnNsYXRlZF9jb3VudAorCisJaWYgeyFbaW5mbyBleGlzdHMgbXNnaWRdIHx8ICRtb2RlID09ICIifSB7CisJCXJldHVybgorCX0KKwlzZXQgbW9kZSAiIgorCWlmIHskZnV6enkgPT0gMX0geworCQlpbmNyIGZ1enp5X2NvdW50CisJCXNldCBmdXp6eSAwCisJCXJldHVybgorCX0KKworCWlmIHskbXNnaWQgPT0gIiJ9IHsKKwkJc2V0IHByZWZpeCAic2V0IDo6bXNnY2F0OjpoZWFkZXIiCisJfSBlbHNlIHsKKwkJaWYgeyRtc2dzdHIgPT0gIiJ9IHsKKwkJCWluY3Igbm90X3RyYW5zbGF0ZWRfY291bnQKKwkJCXJldHVybgorCQl9CisJCXNldCBwcmVmaXggIjo6bXNnY2F0OjptY3NldCAkbGFuZyBcIlt1MmEgJG1zZ2lkXVwiIgorCQlpbmNyIHRyYW5zbGF0ZWRfY291bnQKKwl9CisKKwlwdXRzICRvdXQgIiRwcmVmaXggXCJbdTJhICRtc2dzdHJdXCIiCit9CisKK3NldCBmdXp6eSAwCitzZXQgdHJhbnNsYXRlZF9jb3VudCAwCitzZXQgZnV6enlfY291bnQgMAorc2V0IG5vdF90cmFuc2xhdGVkX2NvdW50IDAKK2ZvcmVhY2ggZmlsZSAkZmlsZXMgeworCXJlZ3N1YiAiXi4qL1woXFteL1xdKlwpXC5wbyQiICRmaWxlICIkb3V0cHV0X2RpcmVjdG9yeVxcMS5tc2ciIG91dGZpbGUKKwlzZXQgaW4gW29wZW4gJGZpbGUgInIiXQorCWZjb25maWd1cmUgJGluIC1lbmNvZGluZyB1dGYtOAorCXNldCBvdXQgW29wZW4gJG91dGZpbGUgInciXQorCisJc2V0IG1vZGUgIiIKKwl3aGlsZSB7W2dldHMgJGluIGxpbmVdID49IDB9IHsKKwkJaWYge1tyZWdleHAgIl4jIiAkbGluZV19IHsKKwkJCWlmIHtbcmVnZXhwICIsIGZ1enp5IiAkbGluZV19IHsKKwkJCQlzZXQgZnV6enkgMQorCQkJfSBlbHNlIHsKKwkJCQlmbHVzaF9tc2cKKwkJCX0KKwkJCWNvbnRpbnVlCisJCX0gZWxzZWlmIHtbcmVnZXhwICJebXNnaWQgXCIoLiopXCIkIiAkbGluZSBkdW1teSBtYXRjaF19IHsKKwkJCWZsdXNoX21zZworCQkJc2V0IG1zZ2lkICRtYXRjaAorCQkJc2V0IG1vZGUgIm1zZ2lkIgorCQl9IGVsc2VpZiB7W3JlZ2V4cCAiXm1zZ3N0ciBcIiguKilcIiQiICRsaW5lIGR1bW15IG1hdGNoXX0geworCQkJc2V0IG1zZ3N0ciAkbWF0Y2gKKwkJCXNldCBtb2RlICJtc2dzdHIiCisJCX0gZWxzZWlmIHskbGluZSA9PSAiIn0geworCQkJZmx1c2hfbXNnCisJCX0gZWxzZWlmIHtbcmVnZXhwICJeXCIoLiopXCIkIiAkbGluZSBkdW1teSBtYXRjaF19IHsKKwkJCWlmIHskbW9kZSA9PSAibXNnaWQifSB7CisJCQkJYXBwZW5kIG1zZ2lkICRtYXRjaAorCQkJfSBlbHNlaWYgeyRtb2RlID09ICJtc2dzdHIifSB7CisJCQkJYXBwZW5kIG1zZ3N0ciAkbWF0Y2gKKwkJCX0gZWxzZSB7CisJCQkJcHV0cyBzdGRlcnIgIkkgZG8gbm90IGtub3cgd2hhdCB0byBkbzogJG1hdGNoIgorCQkJfQorCQl9IGVsc2UgeworCQkJcHV0cyBzdGRlcnIgIkNhbm5vdCBoYW5kbGUgJGxpbmUiCisJCX0KKwl9CisJZmx1c2hfbXNnCisJY2xvc2UgJGluCisJY2xvc2UgJG91dAorfQorCitpZiB7JHNob3dfc3RhdGlzdGljc30geworCXNldCBzdHIgIiIKKworCWFwcGVuZCBzdHIgICIkdHJhbnNsYXRlZF9jb3VudCB0cmFuc2xhdGVkIG1lc3NhZ2UiCisJaWYgeyR0cmFuc2xhdGVkX2NvdW50ICE9IDF9IHsKKwkJYXBwZW5kIHN0ciBzCisJfQorCisJaWYgeyRmdXp6eV9jb3VudCA+IDF9IHsKKwkJYXBwZW5kIHN0ciAgIiwgJGZ1enp5X2NvdW50IGZ1enp5IHRyYW5zbGF0aW9uIgorCQlpZiB7JGZ1enp5X2NvdW50ICE9IDF9IHsKKwkJCWFwcGVuZCBzdHIgcworCQl9CisJfQorCWlmIHskbm90X3RyYW5zbGF0ZWRfY291bnQgPiAwfSB7CisJCWFwcGVuZCBzdHIgICIsICRub3RfdHJhbnNsYXRlZF9jb3VudCB1bnRyYW5zbGF0ZWQgbWVzc2FnZSIKKwkJaWYgeyRub3RfdHJhbnNsYXRlZF9jb3VudCAhPSAxfSB7CisJCQlhcHBlbmQgc3RyIHMKKwkJfQorCX0KKworCWFwcGVuZCBzdHIgIC4KKwlwdXRzICRzdHIKK30KZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vcHRfYnIucG8gYi9naXQtZ3VpL3BvL3B0X2JyLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZDExNmMKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL3B0X2JyLnBvCkBAIC0wLDAgKzEsMjU2OCBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHRvIEJyYXppbGlhbiBQb3J0dWd1ZXNlCisjIENvcHlyaWdodCAoQykgMjAwNyBTaGF3biBQZWFyY2UsIGV0IGFsLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgorIworIyBBbGV4YW5kcmUgRXJ3aW4gSXR0bmVyIDxhbGV4YW5kcmVAaXR0bmVyLmNvbS5icj4sIDIwMTAuCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEwLTAxLTI2IDE1OjQ3LTA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTA5LTE4IDExOjA5LTAzMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFsZXhhbmRyZSBFcndpbiBJdHRuZXIgPGFsZXhhbmRyZUBpdHRuZXIuY29tLmJyPlxuIgorIkxhbmd1YWdlLVRlYW06IEJyYXppbGlhbiBQb3J0dWd1ZXNlIDw+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3OTMgZ2l0LWd1aS5zaDo4MDcgZ2l0LWd1aS5zaDo4MjAgZ2l0LWd1aS5zaDo5MDMKKyM6IGdpdC1ndWkuc2g6OTIyCittc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCittc2dzdHIgImdpdC1ndWk6IGVycm8gZmF0YWwiCisKKyM6IGdpdC1ndWkuc2g6NzQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgIkZvbnRlIGludsOhbGlkYSBpbmRpY2FkYSBlbSAlczoiCisKKyM6IGdpdC1ndWkuc2g6Nzc5Cittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICJGb250ZSBwcmluY2lwYWwiCisKKyM6IGdpdC1ndWkuc2g6NzgwCittc2dpZCAiRGlmZi9Db25zb2xlIEZvbnQiCittc2dzdHIgIkZvbnRlIHBhcmEgbyBkaWZmL2NvbnNvbGUiCisKKyM6IGdpdC1ndWkuc2g6Nzk0Cittc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgorbXNnc3RyICJJbXBvc3PDrXZlbCBlbmNvbnRyYXIgbyBnaXQgbm8gXCJQQVRIXCIiCisKKyM6IGdpdC1ndWkuc2g6ODIxCittc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCittc2dzdHIgIkltcG9zc8OtdmVsIGludGVycHJldGFyIGEgdmVyc8OjbyBkbyBnaXQ6IgorCisjOiBnaXQtZ3VpLnNoOjgzOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKKyJcbiIKKyIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgorIlxuIgorIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKKyJcbiIKKyJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIGRldGVybWluYXIgYSB2ZXJzw6NvIGRvIGdpdDpcbiIKKyJcbiIKKyIlcyBhZmlybWFyIHF1ZSBzdWEgdmVyc8OjbyDDqSBcIiVzXCIuXG4iCisiXG4iCisiJXMgZXhpZ2UgbyBHaXQgMS41LjAgb3UgcG9zdGVyaW9yLlxuIgorIlxuIgorIkFzc3VtaXIgcXVlICclcycgw6kgYSB2ZXJzw6NvIDEuNS4wP1xuIgorCisjOiBnaXQtZ3VpLnNoOjExMjgKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgIkRpcmV0w7NyaW8gZG8gR2l0IG7Do28gZW5jb250cmFkbzoiCisKKyM6IGdpdC1ndWkuc2g6MTE0NgorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIkltcG9zc8OtdmVsIG1vdmVyIHBhcmEgbyBpbsOtY2lvIGRvIGRpcmV0w7NyaW8gZGUgdHJhYmFsaG86IgorCisjOiBnaXQtZ3VpLnNoOjExNTQKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgIkltcG9zc8OtdmVsIHVzYXIgcmVwb3NpdMOzcmlvIHB1cm86IgorCisjOiBnaXQtZ3VpLnNoOjExNjIKK21zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiU2VtIGRpcmV0w7NyaW8gZGUgdHJhYmFsaG8iCisKKyM6IGdpdC1ndWkuc2g6MTMzNCBsaWIvY2hlY2tvdXRfb3AudGNsOjMwNgorbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCittc2dzdHIgIkF0dWFsaXphbmRvIGVzdGFkbyBkb3MgYXJxdWl2b3MuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTM5MAorbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgIlByb2N1cmFuZG8gcG9yIGFycXVpdm9zIG1vZGlmaWNhZG9zIC4uLiIKKworIzogZ2l0LWd1aS5zaDoxNDU0Cittc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAiRXhlY3V0YW5kbyBob29rIFwicHJlcGFyZS1jb21taXQtbXNnXCIuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTQ3MQorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIk8gc2NyaXB0IFwicHJlcGFyZS1jb21taXQtbXNnXCIgbmVnb3UgYSBjcmlhw6fDo28gZGUgdW1hIG5vdmEgcmV2aXPDo28iCisKKyM6IGdpdC1ndWkuc2g6MTYyOSBsaWIvYnJvd3Nlci50Y2w6MjQ2Cittc2dpZCAiUmVhZHkuIgorbXNnc3RyICJQcm9udG8uIgorCisjOiBnaXQtZ3VpLnNoOjE3ODcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXNwbGF5aW5nIG9ubHkgJXMgb2YgJXMgZmlsZXMuIgorbXNnc3RyICJFeGliaW5kbyBhcGVuYXMgJXMgZGUgJXMgYXJxdWl2b3MuIgorCisjOiBnaXQtZ3VpLnNoOjE5MTMKK21zZ2lkICJVbm1vZGlmaWVkIgorbXNnc3RyICJOw6NvIG1vZGlmaWNhZG8iCisKKyM6IGdpdC1ndWkuc2g6MTkxNQorbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJNb2RpZmljYWRvLCBuw6NvIG1hcmNhZG8iCisKKyM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAiTWFyY2FkbyBwYXJhIHVtYSBub3ZhIHJldmlzw6NvIgorCisjOiBnaXQtZ3VpLnNoOjE5MTcgZ2l0LWd1aS5zaDoxOTI1Cittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIlRyZWNob3MgbWFyY2Fkb3MgcGFyYSByZXZpc8OjbyIKKworIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICJNYXJjYWRvIHBhcmEgcmV2aXPDo28sIGZhbHRhbmRvIgorCisjOiBnaXQtZ3VpLnNoOjE5MjAKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiVGlwbyBkbyBhcnF1aXZvIG1vZGlmaWNhZG8sIG7Do28gbWFyY2FkbyIKKworIzogZ2l0LWd1aS5zaDoxOTIxCittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIHN0YWdlZCIKK21zZ3N0ciAiVGlwbyBkbyBhcnF1aXZvIG1vZGlmaWNhZG8sIG1hcmNhZG8iCisKKyM6IGdpdC1ndWkuc2g6MTkyMworbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiTsOjbyBtb25pdG9yYWRvLCBuw6NvIG1hcmNhZG8iCisKKyM6IGdpdC1ndWkuc2g6MTkyOAorbXNnaWQgIk1pc3NpbmciCittc2dzdHIgIkZhbHRhbmRvIgorCisjOiBnaXQtZ3VpLnNoOjE5MjkKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCittc2dzdHIgIk1hcmNhZG8gcGFyYSByZW1vw6fDo28iCisKKyM6IGdpdC1ndWkuc2g6MTkzMAorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiTWFyY2FkbyBwYXJhIHJlbW/Dp8OjbywgYWluZGEgcHJlc2VudGUiCisKKyM6IGdpdC1ndWkuc2g6MTkzMiBnaXQtZ3VpLnNoOjE5MzMgZ2l0LWd1aS5zaDoxOTM0IGdpdC1ndWkuc2g6MTkzNQorIzogZ2l0LWd1aS5zaDoxOTM2IGdpdC1ndWkuc2g6MTkzNworbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIlJlcXVlciByZXNvbHXDp8OjbyBkZSBjb25mbGl0b3MiCisKKyM6IGdpdC1ndWkuc2g6MTk3MgorbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIkluaWNpYW5kbyBnaXRrLi4uIEFndWFyZGUuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTk4NAorbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgorbXNnc3RyICJJbXBvc3PDrXZlbCBlbmNvbnRyYXIgbyBnaXRrIG5vIFBBVEgiCisKKyM6IGdpdC1ndWkuc2g6MjA0MworbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0IGd1aSBpbiBQQVRIIgorbXNnc3RyICJJbXBvc3PDrXZlbCBlbmNvbnRyYXIgbyBcImdpdCBndWlcIiBubyBQQVRIIgorCisjOiBnaXQtZ3VpLnNoOjI0NTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNgorbXNnaWQgIlJlcG9zaXRvcnkiCittc2dzdHIgIlJlcG9zaXTDs3JpbyIKKworIzogZ2l0LWd1aS5zaDoyNDU2Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAiRWRpdGFyIgorCisjOiBnaXQtZ3VpLnNoOjI0NTggbGliL2Nob29zZV9yZXYudGNsOjU2MQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiUmFtbyIKKworIzogZ2l0LWd1aS5zaDoyNDYxIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDgKK21zZ2lkICJDb21taXRAQG5vdW4iCittc2dzdHIgIlJldmlzw6NvIgorCisjOiBnaXQtZ3VpLnNoOjI0NjQgbGliL21lcmdlLnRjbDoxMjEgbGliL21lcmdlLnRjbDoxNTAgbGliL21lcmdlLnRjbDoxNjgKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAiTWVzY2xhciIKKworIzogZ2l0LWd1aS5zaDoyNDY1IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKK21zZ2lkICJSZW1vdGUiCittc2dzdHIgIlJlbW90byIKKworIzogZ2l0LWd1aS5zaDoyNDY4Cittc2dpZCAiVG9vbHMiCittc2dzdHIgIkZlcnJhbWVudGFzIgorCisjOiBnaXQtZ3VpLnNoOjI0NzcKK21zZ2lkICJFeHBsb3JlIFdvcmtpbmcgQ29weSIKK21zZ3N0ciAiRXhwbG9yYXIgY8OzcGlhIGRlIHRyYWJhbGhvIgorCisjOiBnaXQtZ3VpLnNoOjI0ODMKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAiRXhwbG9yYXIgYXJxdWl2b3MgZG8gcmFtbyBhdHVhbCIKKworIzogZ2l0LWd1aS5zaDoyNDg3Cittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcy4uLiIKK21zZ3N0ciAiRXhwbG9yYXIgYXJxdWl2b3MgZG8gcmFtby4uLiIKKworIzogZ2l0LWd1aS5zaDoyNDkyCittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKK21zZ3N0ciAiVmlzdWFsaXphciBoaXN0w7NyaWNvIGRvIHJhbW8gYXR1YWwiCisKKyM6IGdpdC1ndWkuc2g6MjQ5NgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCittc2dzdHIgIlZpc3VhbGl6YXIgaGlzdMOzcmljbyBkZSB0b2RvcyBvcyByYW1vcyIKKworIzogZ2l0LWd1aS5zaDoyNTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJvd3NlICVzJ3MgRmlsZXMiCittc2dzdHIgIkV4cGxvcmFyIGFycXVpdm9zIGRlICVzIgorCisjOiBnaXQtZ3VpLnNoOjI1MDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpemFyIGhpc3TDs3JpY28gZGUgJXMiCisKKyM6IGdpdC1ndWkuc2g6MjUxMCBsaWIvZGF0YWJhc2UudGNsOjI3IGxpYi9kYXRhYmFzZS50Y2w6NjcKK21zZ2lkICJEYXRhYmFzZSBTdGF0aXN0aWNzIgorbXNnc3RyICJFc3RhdMOtc3RpY2FzIGRvIGJhbmNvIGRlIGRhZG9zIgorCisjOiBnaXQtZ3VpLnNoOjI1MTMgbGliL2RhdGFiYXNlLnRjbDozNAorbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICJDb21wYWN0YXIgYmFuY28gZGUgZGFkb3MiCisKKyM6IGdpdC1ndWkuc2g6MjUxNgorbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKK21zZ3N0ciAiVmVyaWZpY2FyIGJhbmNvIGRlIGRhZG9zIgorCisjOiBnaXQtZ3VpLnNoOjI1MjMgZ2l0LWd1aS5zaDoyNTI3IGdpdC1ndWkuc2g6MjUzMSBsaWIvc2hvcnRjdXQudGNsOjgKKyM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgorbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCittc2dzdHIgIkNyaWFyIMOtY29uZSBuYSDDoXJlYSBkZSB0cmFiYWxobyIKKworIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCittc2dpZCAiUXVpdCIKK21zZ3N0ciAiU2FpciIKKworIzogZ2l0LWd1aS5zaDoyNTQ3Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAiRGVzZmF6ZXIiCisKKyM6IGdpdC1ndWkuc2g6MjU1MAorbXNnaWQgIlJlZG8iCittc2dzdHIgIlJlZmF6ZXIiCisKKyM6IGdpdC1ndWkuc2g6MjU1NCBnaXQtZ3VpLnNoOjMxMDkKK21zZ2lkICJDdXQiCittc2dzdHIgIlJlY29ydGFyIgorCisjOiBnaXQtZ3VpLnNoOjI1NTcgZ2l0LWd1aS5zaDozMTEyIGdpdC1ndWkuc2g6MzE4NiBnaXQtZ3VpLnNoOjMyNTkKKyM6IGxpYi9jb25zb2xlLnRjbDo2OQorbXNnaWQgIkNvcHkiCittc2dzdHIgIkNvcGlhciIKKworIzogZ2l0LWd1aS5zaDoyNTYwIGdpdC1ndWkuc2g6MzExNQorbXNnaWQgIlBhc3RlIgorbXNnc3RyICJDb2xhciIKKworIzogZ2l0LWd1aS5zaDoyNTYzIGdpdC1ndWkuc2g6MzExOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjYKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzgKK21zZ2lkICJEZWxldGUiCittc2dzdHIgIkFwYWdhciIKKworIzogZ2l0LWd1aS5zaDoyNTY3IGdpdC1ndWkuc2g6MzEyMiBnaXQtZ3VpLnNoOjMyNjMgbGliL2NvbnNvbGUudGNsOjcxCittc2dpZCAiU2VsZWN0IEFsbCIKK21zZ3N0ciAiU2VsZWNpb25hciB0dWRvIgorCisjOiBnaXQtZ3VpLnNoOjI1NzYKK21zZ2lkICJDcmVhdGUuLi4iCittc2dzdHIgIkNyaWFyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1ODIKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAiQ2hlY2tvdXQuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU4OAorbXNnaWQgIlJlbmFtZS4uLiIKK21zZ3N0ciAiUmVub21lYXIuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU5MworbXNnaWQgIkRlbGV0ZS4uLiIKK21zZ3N0ciAiQXBhZ2FyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI1OTgKK21zZ2lkICJSZXNldC4uLiIKK21zZ3N0ciAiUmVkZWZpbmlyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI2MDgKK21zZ2lkICJEb25lIgorbXNnc3RyICJQcm9udG8iCisKKyM6IGdpdC1ndWkuc2g6MjYxMAorbXNnaWQgIkNvbW1pdEBAdmVyYiIKK21zZ3N0ciAiU2FsdmFyIHJldmlzw6NvIgorCisjOiBnaXQtZ3VpLnNoOjI2MTkgZ2l0LWd1aS5zaDozMDUwCittc2dpZCAiTmV3IENvbW1pdCIKK21zZ3N0ciAiTm92YSByZXZpc8OjbyIKKworIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NworbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICJDb3JyaWdpciDDumx0aW1hIHJldmlzw6NvIgorCisjOiBnaXQtZ3VpLnNoOjI2MzcgZ2l0LWd1aS5zaDozMDExIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6OTkKK21zZ2lkICJSZXNjYW4iCittc2dzdHIgIkF0dWFsaXphciIKKworIzogZ2l0LWd1aS5zaDoyNjQzCittc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgorbXNnc3RyICJNYXJjYXIgcGFyYSByZXZpc8OjbyIKKworIzogZ2l0LWd1aS5zaDoyNjQ5Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCittc2dzdHIgIk1hcmNhciBhcnF1aXZvcyBtb2RpZmljYWRvcyIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiVW5zdGFnZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAiRGVzbWFyY2FyIgorCisjOiBnaXQtZ3VpLnNoOjI2NjEgbGliL2luZGV4LnRjbDo0MTIKK21zZ2lkICJSZXZlcnQgQ2hhbmdlcyIKK21zZ3N0ciAiUmV2ZXJ0ZXIgbXVkYW7Dp2FzIgorCisjOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQorbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgorbXNnc3RyICJNb3N0cmFyIG1lbm9zIGNvbnRleHRvIgorCisjOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQorbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgorbXNnc3RyICJNb3N0cmFyIG1haXMgY29udGV4dG8iCisKKyM6IGdpdC1ndWkuc2g6MjY4MCBnaXQtZ3VpLnNoOjMwMjQgZ2l0LWd1aS5zaDozMTMzCittc2dpZCAiU2lnbiBPZmYiCittc2dzdHIgIkFzc2luYXIgZW1iYWl4byIKKworIzogZ2l0LWd1aS5zaDoyNjk2Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgIk1lc2NsYXIgbG9jYWxtZW50ZS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzAxCittc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCittc2dzdHIgIkFib3J0YXIgbWVzY2xhZ2VtLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MTMgZ2l0LWd1aS5zaDoyNzQxCittc2dpZCAiQWRkLi4uIgorbXNnc3RyICJBZGljaW9uYXIuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjcxNworbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIkVudmlhci4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzIxCittc2dpZCAiRGVsZXRlIEJyYW5jaC4uLiIKK21zZ3N0ciAiQXBhZ2FyIHJhbW8uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjczMSBnaXQtZ3VpLnNoOjMyOTIKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICJPcMOnw7Vlcy4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzQyCittc2dpZCAiUmVtb3ZlLi4uIgorbXNnc3RyICJSZW1vdmVyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MAorbXNnaWQgIkhlbHAiCittc2dzdHIgIkFqdWRhIgorCisjOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3V0ICVzIgorbXNnc3RyICJTb2JyZSBvICVzIgorCisjOiBnaXQtZ3VpLnNoOjI3ODMKK21zZ2lkICJPbmxpbmUgRG9jdW1lbnRhdGlvbiIKK21zZ3N0ciAiQWp1ZGEgb25saW5lIgorCisjOiBnaXQtZ3VpLnNoOjI3ODYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU2Cittc2dpZCAiU2hvdyBTU0ggS2V5IgorbXNnc3RyICJNb3N0cmFyIGNoYXZlIFNTSCIKKworIzogZ2l0LWd1aS5zaDoyODkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IGNhbm5vdCBzdGF0IHBhdGggJXM6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJlcnJvIGZhdGFsOiBpbXBvc3PDrXZlbCBleGVjdXRhciBcInN0YXRcIiBlbSAgJXM6IEFycXVpdm8gb3UgZGlyZXTDs3JpbyBuw6NvICIKKyJlbmNvbnRyYWRvIgorCisjOiBnaXQtZ3VpLnNoOjI5MjYKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgIlJhbW8gYXR1YWw6IgorCisjOiBnaXQtZ3VpLnNoOjI5NDcKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICJNdWRhbsOnYXMgbWFyY2FkYXMiCisKKyM6IGdpdC1ndWkuc2g6Mjk2NworbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCittc2dzdHIgIk11ZGFuw6dhcyBuw6NvIG1hcmNhZGFzIgorCisjOiBnaXQtZ3VpLnNoOjMwMTcKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIgorbXNnc3RyICJNYXJjYXIgYWx0ZXJhZG9zIgorCisjOiBnaXQtZ3VpLnNoOjMwMzYgbGliL3RyYW5zcG9ydC50Y2w6MTA0IGxpYi90cmFuc3BvcnQudGNsOjE5MworbXNnaWQgIlB1c2giCittc2dzdHIgIkVudmlhciIKKworIzogZ2l0LWd1aS5zaDozMDcxCittc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkRlc2NyacOnw6NvIGRhIHJldmlzw6NvIGluaWNpYWw6IgorCisjOiBnaXQtZ3VpLnNoOjMwNzIKK21zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiRGVzY3Jpw6fDo28gZGEgcmV2aXPDo28gY29ycmlnaWRhOiIKKworIzogZ2l0LWd1aS5zaDozMDczCittc2dpZCAiQW1lbmRlZCBJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiRGVzY3Jpw6fDo28gZGEgcmV2aXPDo28gaW5pY2lhbCBjb3JyaWdpZGE6IgorCisjOiBnaXQtZ3VpLnNoOjMwNzQKK21zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiRGVzY3Jpw6fDo28gZGEgcmV2aXPDo28gZGUgbWVzY2xhIGNvcnJpZ2lkYToiCisKKyM6IGdpdC1ndWkuc2g6MzA3NQorbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiRGVzY3Jpw6fDo28gZGEgcmV2aXPDo28gZGUgbWVzY2xhOiIKKworIzogZ2l0LWd1aS5zaDozMDc2Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJEZXNjcmnDp8OjbyBkYSByZXZpc8OjbzoiCisKKyM6IGdpdC1ndWkuc2g6MzEyNSBnaXQtZ3VpLnNoOjMyNjcgbGliL2NvbnNvbGUudGNsOjczCittc2dpZCAiQ29weSBBbGwiCittc2dzdHIgIkNvcGlhciB0b2RvcyIKKworIzogZ2l0LWd1aS5zaDozMTQ5IGxpYi9ibGFtZS50Y2w6MTA0Cittc2dpZCAiRmlsZToiCittc2dzdHIgIkFycXVpdm86IgorCisjOiBnaXQtZ3VpLnNoOjMyNTUKK21zZ2lkICJSZWZyZXNoIgorbXNnc3RyICJBdHVhbGl6YXIiCisKKyM6IGdpdC1ndWkuc2g6MzI3NgorbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAiUmVkdXppciB0YW1hbmhvIGRhIGZvbnRlIgorCisjOiBnaXQtZ3VpLnNoOjMyODAKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIkF1bWVudGFyIHRhbWFuaG8gZGEgZm9udGUiCisKKyM6IGdpdC1ndWkuc2g6MzI4OCBsaWIvYmxhbWUudGNsOjI4MQorbXNnaWQgIkVuY29kaW5nIgorbXNnc3RyICJDb2RpZmljYcOnw6NvIgorCisjOiBnaXQtZ3VpLnNoOjMyOTkKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgIkFwbGljYXIvcmV2ZXJ0ZXIgdHJlY2hvIgorCisjOiBnaXQtZ3VpLnNoOjMzMDQKK21zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCittc2dzdHIgIkFwbGljYXIvcmV2ZXJ0ZXIgbGluaGEiCisKKyM6IGdpdC1ndWkuc2g6MzMyMworbXNnaWQgIlJ1biBNZXJnZSBUb29sIgorbXNnc3RyICJFeGVjdXRhciBmZXJyYW1lbnRhIGRlIG1lc2NsYSIKKworIzogZ2l0LWd1aS5zaDozMzI4Cittc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgorbXNnc3RyICJVc2FyIHZlcnPDo28gcmVtb3RhIgorCisjOiBnaXQtZ3VpLnNoOjMzMzIKK21zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKK21zZ3N0ciAiVXNhciB2ZXJzw6NvIGxvY2FsIgorCisjOiBnaXQtZ3VpLnNoOjMzMzYKK21zZ2lkICJSZXZlcnQgVG8gQmFzZSIKK21zZ3N0ciAiUmV2ZXJ0ZXIgcGFyYSBhIHZlcnPDo28tYmFzZSIKKworIzogZ2l0LWd1aS5zaDozMzU0Cittc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiVmlzdWFsaXphciBlc3RhcyBtdWRhbsOnYXMgbm8gc3ViLW3Ds2R1bG8iCisKKyM6IGdpdC1ndWkuc2g6MzM1OAorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZpc3VhbGl6YXIgaGlzdMOzcmljbyBkbyByYW1vIGF0dWFsIG5vIHN1Yi1tw7NkdWxvIgorCisjOiBnaXQtZ3VpLnNoOjMzNjIKK21zZ2lkICJWaXN1YWxpemUgQWxsIEJyYW5jaCBIaXN0b3J5IEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZpc3VhbGl6YXIgaGlzdMOzcmljbyBkZSB0b2RvcyBvcyBjYW1vcyBubyBzdWItbcOzZHVsbyIKKworIzogZ2l0LWd1aS5zaDozMzY3Cittc2dpZCAiU3RhcnQgZ2l0IGd1aSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJJbmljaWFyIFwiZ2l0IGd1aVwiIG5vIHN1Yi1tw7NkdWxvIgorCisjOiBnaXQtZ3VpLnNoOjMzODkKK21zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCittc2dzdHIgIkRlc21hcmNhciB0cmVjaG8gcGFyYSByZXZpc8OjbyIKKworIzogZ2l0LWd1aS5zaDozMzkxCittc2dpZCAiVW5zdGFnZSBMaW5lcyBGcm9tIENvbW1pdCIKK21zZ3N0ciAiRGVzbWFyY2FyIGxpbmhhcyBwYXJhIHJldmlzw6NvIgorCisjOiBnaXQtZ3VpLnNoOjMzOTMKK21zZ2lkICJVbnN0YWdlIExpbmUgRnJvbSBDb21taXQiCittc2dzdHIgIkRlc21hcmNhciBsaW5oYSBwYXJhIHJldmlzw6NvIgorCisjOiBnaXQtZ3VpLnNoOjMzOTYKK21zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCittc2dzdHIgIk1hcmNhciB0cmVjaG8gcGFyYSByZXZpc8OjbyIKKworIzogZ2l0LWd1aS5zaDozMzk4Cittc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKK21zZ3N0ciAiTWFyY2FyIGxpbmhhcyBwYXJhIHJldmlzw6NvIgorCisjOiBnaXQtZ3VpLnNoOjM0MDAKK21zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCittc2dzdHIgIk1hcmNhciBsaW5oYSBwYXJhIHJldmlzw6NvIgorCisjOiBnaXQtZ3VpLnNoOjM0MjQKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIkluaWNpYW5kby4uLiIKKworIzogZ2l0LWd1aS5zaDozNTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKKyJcbiIKKyJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKKyJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKKyJieSAlczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIlBvc3PDrXZlaXMgcHJvYmxlbWFzIGNvbSBhcyB2YXJpw6F2ZWlzIGRlIGFtYmllbnRlLlxuIgorIlxuIgorIkFzIHNlZ3VpbnRlcyB2YXJpw6F2ZWlzIGRlIGFtYmllbnRlIHByb3ZhdmVsbWVudGUgc2Vyw6NvXG4iCisiaWdub3JhZGFzIHBvciBxdWFscXVlciBzdWItcHJvY2Vzc28gZG8gR2l0IGV4ZWN1dGFkbyBwb3JcbiIKKyIlczpcbiIKKworIzogZ2l0LWd1aS5zaDozNTcwCittc2dpZCAiIgorIlxuIgorIlRoaXMgaXMgZHVlIHRvIGEga25vd24gaXNzdWUgd2l0aCB0aGVcbiIKKyJUY2wgYmluYXJ5IGRpc3RyaWJ1dGVkIGJ5IEN5Z3dpbi4iCittc2dzdHIgIiIKKyJcbiIKKyJJc3RvIHNlIGRldmUgYSB1bSBwcm9ibGVtYSBjb25oZWNpZG8gY29tIG9zIGJpbsOhcmlvcyBkYSBUY2wgXG4iCisiZGlzdHJpYnXDrWRvcyBjb20gbyBDeWd3aW4iCisKKyM6IGdpdC1ndWkuc2g6MzU3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCisiaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCisidXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKKyJ+Ly5naXRjb25maWcgZmlsZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIlVtYSBib2EgYWx0ZXJuYXRpdmEgcGFyYSAlc1xuIgorIsOpIGNvbG9jYXIgb3MgdmFsb3JlcyBwYXJhIG8gbm9tZSBkZSB1c3XDoXJpbyBlIGUtbWFpbFxuIgorIm5vIHNldSBhcnF1aXZvIFwifi8uZ2l0Y29uZmlnXCJcbiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtIHVtYSBpbnRlcmZhY2UgZ3LDoWZpY2EgcGFyYSBvIEdpdCIKKworIzogbGliL2JsYW1lLnRjbDo3MgorbXNnaWQgIkZpbGUgVmlld2VyIgorbXNnc3RyICJWaXN1YWxpemFkb3IgZGUgYXJxdWl2b3MiCisKKyM6IGxpYi9ibGFtZS50Y2w6NzgKK21zZ2lkICJDb21taXQ6IgorbXNnc3RyICJSZXZpc8OjbzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MjcxCittc2dpZCAiQ29weSBDb21taXQiCittc2dzdHIgIkNvcGlhciByZXZpc8OjbyIKKworIzogbGliL2JsYW1lLnRjbDoyNzUKK21zZ2lkICJGaW5kIFRleHQuLi4iCittc2dzdHIgIlByb2N1cmFyIHRleHRvLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjI4NAorbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCittc2dzdHIgIkV4ZWN1dGFyIGRldGVjw6fDo28gY29tcGxldGEgZGUgY8OzcGlhcyIKKworIzogbGliL2JsYW1lLnRjbDoyODgKK21zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKK21zZ3N0ciAiTW9zdHJhciBjb250ZXh0byBkbyBoaXN0w7NyaWNvIgorCisjOiBsaWIvYmxhbWUudGNsOjI5MQorbXNnaWQgIkJsYW1lIFBhcmVudCBDb21taXQiCittc2dzdHIgIkFub3RhciByZXZpc8OjbyBhbnRlcmlvciIKKworIzogbGliL2JsYW1lLnRjbDo0NTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZWFkaW5nICVzLi4uIgorbXNnc3RyICJMZW5kbyAlcy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1NTcKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAiQ2FycmVnYW5kbyBhbm90YcOnw7VlcyBkZSBjw7NwaWEvbW92aW1lbnRhw6fDo28uLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NTc3Cittc2dpZCAibGluZXMgYW5ub3RhdGVkIgorbXNnc3RyICJsaW5oYXMgYW5vdGFkYXMiCisKKyM6IGxpYi9ibGFtZS50Y2w6NzY5Cittc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAiQ2FycmVnYW5kbyBhbm90YcOnw7VlcyBvcmlnaW5haXMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzcyCittc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCittc2dzdHIgIkFub3Rhw6fDo28gY29tcGxldGEuIgorCisjOiBsaWIvYmxhbWUudGNsOjgwMgorbXNnaWQgIkJ1c3kiCittc2dzdHIgIk9jdXBhZG8iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAzCittc2dpZCAiQW5ub3RhdGlvbiBwcm9jZXNzIGlzIGFscmVhZHkgcnVubmluZy4iCittc2dzdHIgIk8gcHJvY2Vzc28gZGUgYW5vdGHDp8OjbyBqw6EgZXN0w6EgZW0gZXhlY3XDp8OjbyIKKworIzogbGliL2JsYW1lLnRjbDo4NDIKK21zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgorbXNnc3RyICJFeGVjdXRhbmRvIGRldGVjw6fDo28gZGUgY8OzcGlhLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjkxMAorbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKK21zZ3N0ciAiQ2FycmVnYW5kbyBhbm90YcOnw7Vlcy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo5NjMKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvcjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTY3Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiUmV2aXNvcjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTcyCittc2dpZCAiT3JpZ2luYWwgRmlsZToiCittc2dzdHIgIkFycXVpdm8gb3JpZ2luYWw6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwMjAKK21zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCittc2dzdHIgIkltcG9zc8OtdmVsIGVuY29udHJhciByZXZpc8OjbyBIRUFEOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDc1Cittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgIkltcG9zc8OtdmVsIGVuY29udHJhciByZXZpc8OjbyBhbnRlcmlvcjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA5MAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAiSW1wb3Nzw612ZWwgZXhpYmlyIHJldmlzw6NvIGFudGVyaW9yIgorCisjOiBsaWIvYmxhbWUudGNsOjEwOTEgbGliL2RpZmYudGNsOjMyMAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgIkVycm8gYW8gY2FycmVnYXIgYXMgZGlmZXJlbsOnYXM6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzEKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAiT3JpZ2luYWxtZW50ZSBwb3I6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzcKK21zZ2lkICJJbiBGaWxlOiIKK21zZ3N0ciAiTm8gYXJxdWl2bzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI0MgorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAiQ29waWFkbyBvdSBtb3ZpZG8gcGFyYSBjw6EgcG9yOiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTkKK21zZ2lkICJDaGVja291dCBCcmFuY2giCittc2dzdHIgIkVmZXR1YXIgY2hlY2tvdXQgZG8gcmFtbyIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiQ2hlY2tvdXQiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcyCisjOiBsaWIvb3B0aW9uLnRjbDoxMjUgbGliL3JlbW90ZV9hZGQudGNsOjMyIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDIKKyM6IGxpYi90b29sc19kbGcudGNsOjQwIGxpYi90b29sc19kbGcudGNsOjIwNCBsaWIvdG9vbHNfZGxnLnRjbDozNTIKKyM6IGxpYi90cmFuc3BvcnQudGNsOjEwOAorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQ2FuY2VsYXIiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMyIGxpYi9icm93c2VyLnRjbDoyODcgbGliL3Rvb2xzX2RsZy50Y2w6MzI4Cittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIlJldmlzw6NvIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MjgwCittc2dpZCAiT3B0aW9ucyIKK21zZ3N0ciAiT3DDp8O1ZXMiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM5IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiT2J0ZXIgcmFtbyBkZSByYXN0cmVhbWVudG8iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Cittc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgorbXNnc3RyICJTZXBhcmFyIGRvIHJhbW8gbG9jYWwiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgorbXNnaWQgIkNyZWF0ZSBCcmFuY2giCittc2dzdHIgIkNyaWFyIHJhbW8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyNworbXNnaWQgIkNyZWF0ZSBOZXcgQnJhbmNoIgorbXNnc3RyICJDcmlhciBub3ZvIHJhbW8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MQorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiQ3JpYXIiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MAorbXNnaWQgIkJyYW5jaCBOYW1lIgorbXNnc3RyICJOb21lIGRvIHJhbW8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MyBsaWIvcmVtb3RlX2FkZC50Y2w6MzkgbGliL3Rvb2xzX2RsZy50Y2w6NTAKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiTm9tZToiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgorbXNnc3RyICJDb2luY2lkaXIgbm9tZSBkbyByYW1vIGRlIHJhc3RyZWFtZW50byIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Cittc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCittc2dzdHIgIlJldmlzw6NvIGluaWNpYWwiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgorbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgorbXNnc3RyICJBdHVhbGl6YXIgcmFtbyBleGlzdGVudGU6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKK21zZ2lkICJObyIKK21zZ3N0ciAiTsOjbyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjgwCittc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCittc2dzdHIgIlNvbWVudGUgc2UgZm9yIHVtIGF2YW7Dp28gcsOhcGlkbyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTcxCittc2dpZCAiUmVzZXQiCittc2dzdHIgIlJlZGVmaW5pciIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgIkVmZXR1YXIgY2hlY2tvdXQgYXDDs3MgYSBjcmlhw6fDo28iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzEKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKK21zZ3N0ciAiU2VsZWNpb25lIHVtIHJhbW8gZGUgcmFzdHJlYW1lbnRvLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE0MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiTyByYW1vIGRlIHJhc3RyZWFtZW50byAlcyBuw6NvIMOpIHVtIHJhbW8gZG8gcmVwb3NpdMOzcmlvIHJlbW90by4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTMgbGliL2JyYW5jaF9yZW5hbWUudGNsOjg2Cittc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiSW5kaXF1ZSB1bSBub21lIHBhcmEgbyByYW1vLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCittc2dzdHIgIlwiJXNcIiBuw6NvIMOpIHVtIG5vbWUgZGUgcmFtbyB2w6FsaWRvIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTUKK21zZ2lkICJEZWxldGUgQnJhbmNoIgorbXNnc3RyICJBcGFnYXIgcmFtbyIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIwCittc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiQXBhZ2FyIHJhbW8gbG9jYWwiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNworbXNnaWQgIkxvY2FsIEJyYW5jaGVzIgorbXNnc3RyICJSYW1vcyBsb2NhaXMiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MgorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgorbXNnc3RyICJBcGFnYXIgc29tZW50ZSBzZSBtZXNjbGFkbyBlbSIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICJGb3LDp2FyIGV4Y2x1c8OjbyAobsOjbyB2ZXJpZmljYXIgc2UgbyByYW1vIGZvaSBtZXNjbGFkbykiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCittc2dzdHIgIk9zIHJhbW9zIHNlZ3VpbnRlcyBuw6NvIGZvcmFtIGNvbXBsZXRhbWVudGUgbWVzY2xhZG9zIGVtICVzOiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjExNSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNworbXNnaWQgIiIKKyJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgorIlxuIgorIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisiUmVjdXBlcmFyIHJhbW9zIGFwYWdhZG9zIMOpIGRpZsOtY2lsLlxuIgorIlxuIgorIkFwYWdhciBvcyByYW1vcyBzZWxlY2lvbmFkb3M/IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJFcnJvIGFvIGFwYWdhciByYW1vczpcbiIKKyIlcyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMgorbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIlJlbm9tZWFyIHJhbW8iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgorbXNnaWQgIlJlbmFtZSIKK21zZ3N0ciAiUmVub21lYXIiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozNgorbXNnaWQgIkJyYW5jaDoiCittc2dzdHIgIlJhbW86IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzkKK21zZ2lkICJOZXcgTmFtZToiCittc2dzdHIgIk5vdm8gbm9tZToiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo3NQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKK21zZ3N0ciAiU2VsZWNpb25lIHVtIHJhbW8gcGFyYSByZW5vbWVhci4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo5NiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiTyByYW1vIFwiJXNcIiBqw6EgZXhpc3RlLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjExNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCittc2dzdHIgIkVycm8gYW8gcmVub21lYXIgXCIlc1wiLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE3Cittc2dpZCAiU3RhcnRpbmcuLi4iCittc2dzdHIgIkluY2lhbmRvLi4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjYKK21zZ2lkICJGaWxlIEJyb3dzZXIiCittc2dzdHIgIk5hdmVnYWRvciBkZSBhcnF1aXZvcyIKKworIzogbGliL2Jyb3dzZXIudGNsOjEyNiBsaWIvYnJvd3Nlci50Y2w6MTQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyAlcy4uLiIKK21zZ3N0ciAiQ2FycmVnYW5kbyAlcy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE4NworbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJbU3ViaXJdIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjY3IGxpYi9icm93c2VyLnRjbDoyNzMKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgorbXNnc3RyICJFeHBsb3JhciBhcnF1aXZvcyBkbyByYW1vIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk4CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDI4Cittc2dpZCAiQnJvd3NlIgorbXNnc3RyICJFeHBsb3JhciIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo4NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzIGZyb20gJXMiCittc2dzdHIgIk9idGVuZG8gJXMgZGUgJXMiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICJFcnJvIGZhdGFsOiBpbXBvc3PDrXZlbCByZXNvbHZlciAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL2NvbnNvbGUudGNsOjgxIGxpYi9kYXRhYmFzZS50Y2w6MzEKKyM6IGxpYi9zc2hrZXkudGNsOjUzCittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkZlY2hhciIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxNzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdC4iCittc2dzdHIgIk8gcmFtbyBcIiVzXCIgbsOjbyBleGlzdGUuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCittc2dzdHIgIkVycm8gYW8gY29uZmlndXJhciBnaXQtcHVsbCBzaW1wbGlmaWNhZG8gcGFyYSBcIiVzXCIuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKKyJcbiIKKyJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgorIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgorbXNnc3RyICIiCisiTyByYW1vIFwiJXNcIiBqw6EgZXhpc3RlLlxuIgorIlxuIgorIk7Do28gw6kgcG9zc8OtdmVsIGF2YW7Dp8OhLWxvIHBhcmEgJXMuXG4iCisiw4kgcHJlY2lzbyBtZXNjbGFyLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJFc3RyYXTDqWdpYSBkZSBtZXNjbGFnZW0gXCIlc1wiIG7Do28gc3Vwb3J0YWRhLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlICclcycuIgorbXNnc3RyICJFcnJvIGFvIGF0dWFsaXphciBcIiVzXCIuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI3NAorbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKK21zZ3N0ciAiQSDDoXJlYSBkZSBtYXJjYcOnw6NvIChzdGFnaW5nIGFyZWEsIGluZGV4KSBqw6EgZXN0w6EgYmxvcXVlYWRhLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIk8gw7psdGltbyBlc3RhZG8gbGlkbyBuw6NvIGNvbmZlcmUgY29tIG8gZXN0YWRvIGF0dWFsLlxuIgorIlxuIgorIk91dHJvIHByb2dyYW1hIGRvIEdpdCBtb2RpZmljb3UgbyByZXBvc2l0w7NyaW8gZGVzZGUgYSDDumx0aW1hIGxlaXR1cmEuIFVtYSAiCisiYXR1YWxpemHDp8OjbyBkZXZlIHNlciBleGVjdXRhZGEgYW50ZXMgZGUgYWx0ZXJhciBvIHJhbW8gYXR1YWwuXG4iCisiXG4iCisiQSBhdHVhbGl6YcOnw6NvIGNvbWXDp2Fyw6EgYXV0b21hdGljYW1lbnRlIGFnb3JhLlxuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCittc2dzdHIgIkF0dWFsaXphbmRvIGRpcmV0w7NyaW8gZGUgdHJhYmFsaG8gcGFyYSBcIiVzXCIuLi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Cittc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCittc2dzdHIgImFycXVpdm9zIHJldGlyYWRvcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICJDaGVja291dCBkZSBcIiVzXCIgYWJvcnRhZG8gKMOpIHByZWNpc28gbWVzY2xhciBhbGd1bnMgYXJxdWl2b3MpIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NworbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgorbXNnc3RyICJNZXNjbGFnZW0gZGUgYXJxdWl2b3MgbmVjZXNzw6FyaWEuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgorbXNnc3RyICJQZXJtYW5lY2VuZG8gbm8gcmFtbyBcIiVzXCIuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgorbXNnaWQgIiIKKyJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIGJlIG9uIGEgYnJhbmNoLCBjcmVhdGUgb25lIG5vdyBzdGFydGluZyBmcm9tICdUaGlzIERldGFjaGVkICIKKyJDaGVja291dCcuIgorbXNnc3RyICIiCisiVm9jw6ogbsOjbyBlc3TDoSBtYWlzIGVtIHVtIHJhbW8gbG9jYWxcbiIKKyJcbiIKKyJTZSB2b2PDqiBkZXNlamEgdW0gcmFtbywgY3JpZSB1bSBhZ29yYSBhIHBhcnRpciBkZXN0ZSBjaGVja291dC4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIkNoZWNrb3V0IGRlIFwiJXNcIiBjb25jbHXDrWRvLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorbXNnc3RyICJSZWRlZmluaXIgXCIlc1wiIHBhcmEgXCIlc1wiIHByb3ZvY2Fyw6EgYSBwZXJkYSBkYXMgc2VndWludGVzIHJldmlzw7VlczoiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Cittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAiUmVjdXBlcmFyIHJldmlzw7VlcyBwZXJkaWRhcyBwb2RlIG7Do28gc2VyIGbDoWNpbC4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJyVzJz8iCittc2dzdHIgIlJlZGVmaW5pciBcIiVzXCI/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIlZpc3VhbGl6YXIiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKKyJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAiIgorIkVycm8gYW8gZGVmaW5pciBvIHJhbW8gYXR1YWwuXG4iCisiXG4iCisiRXN0ZSBkaXJldMOzcmlvIGRlIHRyYWJhbGhvIGVzdMOhIGluY29tcGxldG8uIEZvaSBwb3Nzw612ZWwgYXR1YWxpemFyIHNldXMgIgorImFycXVpdm9zLCBtYXMgaG91dmUgdW1hIGZhbGhhIGFvIGF0dWFsaXphciBvcyBhcnF1aXZvcyBpbnRlcm5vcyBkbyBHaXQuXG4iCisiXG4iCisiSXN0byBuw6NvIGRldmVyaWEgdGVyIGFjb250ZWNpZG8sICVzIHRlcm1pbmFyw6EgYWdvcmEuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjM5Cittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJTZWxlY2lvbmFyIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCittc2dpZCAiRm9udCBGYW1pbHkiCittc2dzdHIgIlRpcG8gZGEgZm9udGUiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzQKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIlRhbWFuaG8gZGEgZm9udGUiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTEKK21zZ2lkICJGb250IEV4YW1wbGUiCittc2dzdHIgIkV4ZW1wbG8iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTAzCittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyJFc3RlIMOpIHVtIHRleHRvIGRlIGV4ZW1wbG8uXG4iCisiU2Ugdm9jw6ogZ29zdGFyIGRlc3RlIHRleHRvLCBlc3RhIHBvZGUgc2VyIHN1YSBmb250ZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKK21zZ2lkICJHaXQgR3VpIgorbXNnc3RyICJHaXQgR3VpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg2Cittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICJDcmlhciBub3ZvIHJlcG9zaXTDs3JpbyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MworbXNnaWQgIk5ldy4uLiIKK21zZ3N0ciAiTm92by4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDAgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NzEKK21zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICJDbG9uYXIgcmVwb3NpdMOzcmlvIGV4aXN0ZW50ZSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDYKK21zZ2lkICJDbG9uZS4uLiIKK21zZ3N0ciAiQ2xvbmFyLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTYKK21zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIkFicmlyIHJlcG9zaXTDs3JpbyBleGlzdGVudGUiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE5Cittc2dpZCAiT3Blbi4uLiIKK21zZ3N0ciAiQWJyaXIuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCittc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiUmVwb3NpdMOzcmlvcyByZWNlbnRlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzgKK21zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKK21zZ3N0ciAiQWJyaXIgcmVwb3NpdMOzcmlvIHJlY2VudGU6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJFcnJvIGFvIGNyaWFyIHJlcG9zaXTDs3JpbyAlczoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzkxCittc2dpZCAiRGlyZWN0b3J5OiIKK21zZ3N0ciAiRGlyZXTDs3JpbzoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVwb3NpdMOzcmlvIEdpdCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJPIGRpcmV0w7NyaW8gJXMgasOhIGV4aXN0ZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIk8gYXJxdWl2byAlcyBqw6EgZXhpc3RlLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjYKK21zZ2lkICJDbG9uZSIKK21zZ3N0ciAiQ2xvbmFyIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OQorbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCittc2dzdHIgIk9yaWdlbToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkwCittc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCittc2dzdHIgIkRpcmV0w7NyaW8gZGUgZGVzdGlubzoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTAyCittc2dpZCAiQ2xvbmUgVHlwZToiCittc2dzdHIgIlRpcG8gZGUgY2xvbmFnZW06IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwOAorbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKK21zZ3N0ciAiUGFkcsOjbyAocsOhcGlkYSwgc2VtaS1yZWR1bmRhbnRlLCBjb20gaGFyZGxpbmtzKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTQKK21zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCittc2dzdHIgIkPDs3BpYSBjb21wbGV0YSAobWFpcyBsZW50YSwgYmFja3VwIHJlZHVuZGFudGUpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyMAorbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgorbXNnc3RyICJDb21wYXJ0aWxoYWRhIChBIG1haXMgcsOhcGlkYSwgbsOjbyByZWNvbWVuZGFkYSwgc2VtIGJhY2t1cCkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTU2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjAzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDU4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiRXN0ZSBuw6NvIMOpIHVtIHJlcG9zaXTDs3JpbyBkbyBHaXQ6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5MgorbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiQ2xvbmFnZW5zIHBhZHLDtWVzIHPDsyBzw6NvIHBvc3PDrXZlaXMgZW0gcmVwb3NpdMOzcmlvcyBsb2NhaXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NgorbXNnaWQgIlNoYXJlZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIkNsb25hZ2VucyBwYXJjaWFpcyBzw7Mgc8OjbyBwb3Nzw612ZWlzIGVtIHJlcG9zaXTDs3Jpb3MgbG9jYWlzLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIk8gbG9jYWwgJXMgasOhIGV4aXN0ZS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI4Cittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCittc2dzdHIgIkVycm8gYW8gY29uZmlndXJhciBvcmlnZW0iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQwCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ29udGFuZG8gb2JqZXRvcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDEKK21zZ2lkICJidWNrZXRzIgorbXNnc3RyICJidWNrZXRzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKK21zZ3N0ciAiRXJybyBhbyBjb3BpYXIgb2JqZXRvcyBvdSBpbmZvcm1hw6fDtWVzIGFkaWNpb25haXM6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCittc2dzdHIgIk7Do28gaMOhIG5hZGEgcGFyYSBjbG9uYXIgZW0gJXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjkKK21zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCittc2dzdHIgIk8gcmFtbyBcIm1hc3RlclwiIG7Do28gZm9pIGluaWNpYWxpemFkby4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE2Cittc2dpZCAiSGFyZGxpbmtzIGFyZSB1bmF2YWlsYWJsZS4gIEZhbGxpbmcgYmFjayB0byBjb3B5aW5nLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGNyaWFyIGhhcmRsaW5rcywgdXNhbmRvIGPDs3BpYXMgY29udmVuY2lvbmFpcy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBmcm9tICVzIgorbXNnc3RyICJDbG9uYW5kbyBkZSAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTkKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgIkNvcGlhbmRvIG9iamV0b3MiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzYwCittc2dpZCAiS2lCIgorbXNnc3RyICJLaUIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGNvcGlhciBvIG9iamV0bzogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk0Cittc2dpZCAiTGlua2luZyBvYmplY3RzIgorbXNnc3RyICJMaWdhbmRvIG9iamV0b3MiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk1Cittc2dpZCAib2JqZWN0cyIKK21zZ3N0ciAib2JqZXRvcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGxpZ2FyIG8gb2JqZXRvOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NTgKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIHJlY2ViZXIgcmFtb3Mgb3Ugb2JqZXRvcy4gVmVqYSBhIHNhw61kYSBkbyBjb25zb2xlIHBhcmEgIgorImRldGFsaGVzLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NjkKK21zZ2lkICJDYW5ub3QgZmV0Y2ggdGFncy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJOw6NvIGZvaSBwb3Nzw612ZWwgcmVjZWJlciBhcyBldGlxdWV0YXMuIFZlamEgYSBzYcOtZGEgZG8gY29uc29sZSBwYXJhIGRldGFsaGVzLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTMKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIEhFQUQuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIGRldGVybWluYXIgYSBldGlxdWV0YSBIRUFELiBWZWphIGEgc2HDrWRhIGRvIGNvbnNvbGUgcGFyYSAiCisiZGV0YWxoZXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgbGltcGFyICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwOAorbXNnaWQgIkNsb25lIGZhaWxlZC4iCittc2dzdHIgIkEgY2xvbmFnZW0gZmFsaG91LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTUKK21zZ2lkICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iCittc2dzdHIgIk8gcmFtbyBwYWRyw6NvIG7Do28gZm9pIHJlY2ViaWRvLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCByZXNvbHZlciAlcyBjb21vIHVtYSByZXZpc8Ojby4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM4Cittc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIkNyaWFuZG8gZGlyZXTDs3JpbyBkZSB0cmFiYWxoby4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTM5IGxpYi9pbmRleC50Y2w6NjcgbGliL2luZGV4LnRjbDoxMzAKKyM6IGxpYi9pbmRleC50Y2w6MTk4Cittc2dpZCAiZmlsZXMiCittc2dzdHIgImFycXVpdm9zIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2OAorbXNnaWQgIkluaXRpYWwgZmlsZSBjaGVja291dCBmYWlsZWQuIgorbXNnc3RyICJFcnJvIGFvIGVmZXR1YXIgY2hlY2tvdXQgaW5pY2lhbC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxMQorbXNnaWQgIk9wZW4iCittc2dzdHIgIkFicmlyIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjEKK21zZ2lkICJSZXBvc2l0b3J5OiIKK21zZ3N0ciAiUmVwb3NpdMOzcmlvOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIkVycm8gYW8gYWJyaXIgbyByZXBvc2l0w7NyaW8gJXM6IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTMKK21zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgorbXNnc3RyICJFc3RlIGNoZWNrb3V0IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAiRXhwcmVzc8OjbyBkZSByZXZpc8OjbzoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3NAorbXNnaWQgIkxvY2FsIEJyYW5jaCIKK21zZ3N0ciAiUmFtbyBsb2NhbCIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc5Cittc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICJSYW1vIGRlIHJhc3RyZWFtZW50byIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjg0IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzgKK21zZ2lkICJUYWciCittc2dzdHIgIkV0aXF1ZXRhIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCittc2dzdHIgIlJldmlzw6NvIGludsOhbGlkYTogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMzgKK21zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCittc2dzdHIgIk5lbmh1bWEgcmV2aXPDo28gc2VsZWNpb25hZGEuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQ2Cittc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCittc2dzdHIgIkEgZXhwcmVzc8OjbyBkZSByZXZpc8OjbyBlc3TDoSB2YXppYS4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzEKK21zZ2lkICJVcGRhdGVkIgorbXNnc3RyICJBdHVhbGl6YWRvIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTU5Cittc2dpZCAiVVJMIgorbXNnc3RyICJVUkwiCisKKyM6IGxpYi9jb21taXQudGNsOjkKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBhbWVuZC5cbiIKKyJcbiIKKyJZb3UgYXJlIGFib3V0IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbCBjb21taXQuICBUaGVyZSBpcyBubyBjb21taXQgYmVmb3JlIHRoaXMgIgorInRvIGFtZW5kLlxuIgorbXNnc3RyICIiCisiTsOjbyBow6EgbmFkYSBwYXJhIGNvcnJpZ2lyLlxuIgorIlxuIgorIlZvY8OqIGVzdMOhIHByZXN0ZXMgYSBjcmlhciB1bWEgcmV2aXPDo28gaW5pY2lhbC4gTsOjbyBow6EgcmV2aXPDo28gYW50ZXJpb3IgcGFyYSAiCisiY29ycmlnaXIuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisiTsOjbyDDqSBwb3Nzw612ZWwgY29ycmlnaXIgZHVyYW50ZSB1bWEgbWVzY2xhZ2VtLlxuIgorIlxuIgorIlZvY8OqIGVzdMOhIGVtIG1laW8gYSB1bWEgb3BlcmHDp8OjbyBkZSBtZXNjbGFnZW0gcXVlIG7Do28gZm9pIGNvbXBsZXRhZGEuIE7Do28gw6kgIgorInBvc3PDrXZlbCBjb3JyaWdpciBhIHJldmlzw6NvIGFudGVyaW9yIGEgbWVub3MgcXVlIHZvY8OqIGFib3J0ZSBhIG1lc2NsYSBhdHVhbCAiCisiYW50ZXMuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjQ4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgorbXNnc3RyICJFcnJvIGFvIGNhcnJlZ2FyIGRhZG9zIGRhIHJldmlzw6NvIHBhcmEgY29ycmlnaXI6IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBvYnRlciBhIHN1YSBpZGVudGlkYWRlOiIKKworIzogbGliL2NvbW1pdC50Y2w6ODAKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICJWYXJpw6F2ZWwgXCJHSVRfQ09NTUlUVEVSX0lERU5UXCIgaW52w6FsaWRhOiIKKworIzogbGliL2NvbW1pdC50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgImF2aXNvOiBPIFRjbCBuw6NvIHN1cG9ydGEgYSBjb2RpZmljYcOnw6NvIFwiJXNcIi4iCisKKyM6IGxpYi9jb21taXQudGNsOjE0OQorbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJPIMO6bHRpbW8gZXN0YWRvIGxpZG8gbsOjbyBjb25mZXJlIGNvbSBvIGVzdGFkbyBhdHVhbC5cbiIKKyJcbiIKKyJPdXRybyBwcm9ncmFtYSBkbyBHaXQgbW9kaWZpY291IG8gcmVwb3NpdMOzcmlvIGRlc2RlIGEgw7psdGltYSBsZWl0dXJhLiBVbWEgIgorImF0dWFsaXphw6fDo28gZGV2ZSBzZXIgZXhlY3V0YWRhIGFudGVzIGRlIGNyaWFyIG91dHJhIHJldmlzw6NvLlxuIgorIlxuIgorIkEgYXR1YWxpemHDp8OjbyBjb21lw6dhcsOhIGF1dG9tYXRpY2FtZW50ZSBhZ29yYS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBzYWx2YXIgcmV2aXPDtWVzIHBhcmEgYXJxdWl2b3MgbsOjbyBtZXNjbGFkb3MuXG4iCisiXG4iCisiTyBhcnF1aXZvICVzIHBvc3N1aSBjb25mbGl0b3MgZGUgbWVzY2xhZ2VtLiBWb2PDqiBkZXZlIHJlc29sdsOqLWxvcyBlIG1hcmNhciBvICIKKyJhcnF1aXZvIGFudGVzIGRlIHNhbHZhciBhIHJldmlzw6NvLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgorIlxuIgorIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCittc2dzdHIgIiIKKyJFc3RhZG8gZGVzY29uaGVjaWRvIGRldGVjdGFkbyBwYXJhIG8gYXJxdWl2byAlcy5cbiIKKyJcbiIKKyJFc3RlIHByb2dyYW1hIG7Do28gcG9kZSBzYWx2YXIgdW1hIHJldmlzw6NvIHBhcmEgbyBhcnF1aXZvICVzLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODgKK21zZ2lkICIiCisiTm8gY2hhbmdlcyB0byBjb21taXQuXG4iCisiXG4iCisiWW91IG11c3Qgc3RhZ2UgYXQgbGVhc3QgMSBmaWxlIGJlZm9yZSB5b3UgY2FuIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIk7Do28gaMOhIG11ZGFuw6dhcyBwYXJhIHNhbHZhci5cbiIKKyJcbiIKKyJWb2PDqiBkZXZlIG1hcmNhciBhbyBtZW5vcyB1bSBhcnF1aXZvIGFudGVzIGRlIHNhbHZhciBhIHJldmlzw6NvLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMDMKK21zZ2lkICIiCisiUGxlYXNlIHN1cHBseSBhIGNvbW1pdCBtZXNzYWdlLlxuIgorIlxuIgorIkEgZ29vZCBjb21taXQgbWVzc2FnZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4iCisiXG4iCisiLSBGaXJzdCBsaW5lOiBEZXNjcmliZSBpbiBvbmUgc2VudGVuY2Ugd2hhdCB5b3UgZGlkLlxuIgorIi0gU2Vjb25kIGxpbmU6IEJsYW5rXG4iCisiLSBSZW1haW5pbmcgbGluZXM6IERlc2NyaWJlIHdoeSB0aGlzIGNoYW5nZSBpcyBnb29kLlxuIgorbXNnc3RyICIiCisiUG9yIGZhdm9yLCBpbmRpcXVlIHVtYSBkZXNjcmnDp8OjbyBwYXJhIGEgcmV2aXPDo28uXG4iCisiXG4iCisiVW1hIGJvYSBkZXNjcmnDp8OjbyB0ZW0gbyBzZWd1aW50ZSBmb3JtYXRvOlxuIgorIlxuIgorIi0gUHJpbWVpcmEgbGluaGE6IGRlc2NyZXZlLCBlbSB1bWEgw7puaWNhIGZyYXNlLCBvIHF1ZSB2b2PDqiBmZXouXG4iCisiLSBTZWd1bmRhIGxpbmhhOiBlbSBicmFuY28uXG4iCisiLSBEZW1haXMgbGluaGFzOiBEZXNjcmV2ZSBkZXRhbGhhZGFtZW50ZSBhIHJldmlzw6NvLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzQKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAiRXhlY3V0YW5kbyBzY3JpcHQgXCJwcmUtY29tbWl0XCIuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI0OQorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgorbXNnc3RyICJBIHJldmlzw6NvIGZvaSBibG9xdWVhZGEgcGVsbyBzY3JpcHQgXCJwcmUtY29tbWl0XCIuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyNzIKK21zZ2lkICJDYWxsaW5nIGNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAiRXhlY3V0YW5kbyBzY3JpcHQgXCJjb21taXQtbXNnXCIuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI4NworbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgorbXNnc3RyICJSZXZpc8OjbyBibG9xdWVhZGEgcGVsbyBzY3JpcHQgXCJjb21taXQtbXNnXCIuIgorCisjOiBsaWIvY29tbWl0LnRjbDozMDAKK21zZ2lkICJDb21taXR0aW5nIGNoYW5nZXMuLi4iCittc2dzdHIgIlNhbHZhbmRvIHJldmlzw6NvLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMTYKK21zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCittc2dzdHIgIndyaXRlLXRyZWUgZmFsaG91OiIKKworIzogbGliL2NvbW1pdC50Y2w6MzE3IGxpYi9jb21taXQudGNsOjM2MSBsaWIvY29tbWl0LnRjbDozODIKK21zZ2lkICJDb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiQSByZXZpc8OjbyBmYWxob3UuIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgorbXNnc3RyICJBIHJldmlzw6NvICVzIHBhcmVjZSBlc3RhciBjb3Jyb21waWRhLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzM5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiTsOjbyBow6EgYWx0ZXJhw6fDtWVzIHBhcmEgc2FsdmFyLlxuIgorIlxuIgorIk5lbmh1bSBhcnF1aXZvIGZvaSBtb2RpZmljYWRvIGUgZXN0YSBuw6NvIMOpIHVtYSByZXZpc8OjbyBkZSBtZXNjbGFnZW0uXG4iCisiXG4iCisiVW1hIGF0dWFsaXphw6fDo28gc2Vyw6EgZXhlY3V0YWRhIGF1dG9tYXRpY2FtZW50ZSBhZ29yYS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzQ2Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICJOw6NvIGjDoSBhbHRlcmHDp8O1ZXMgcGFyYSBzYWx2YXIuIgorCisjOiBsaWIvY29tbWl0LnRjbDozNjAKK21zZ2lkICJjb21taXQtdHJlZSBmYWlsZWQ6IgorbXNnc3RyICJjb21taXQtdHJlZSBmYWxob3U6IgorCisjOiBsaWIvY29tbWl0LnRjbDozODEKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgInVwZGF0ZS1yZWYgZmFsaG91OiIKKworIzogbGliL2NvbW1pdC50Y2w6NDY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBjb21taXQgJXM6ICVzIgorbXNnc3RyICJSZXZpc8OjbyAlcyBjcmlhZGE6ICVzIgorCisjOiBsaWIvY29uc29sZS50Y2w6NTkKK21zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICJUcmFiYWxoYW5kby4uLiBhZ3VhcmRlLi4uIgorCisjOiBsaWIvY29uc29sZS50Y2w6MTg2Cittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiU3VjZXNzbyIKKworIzogbGliL2NvbnNvbGUudGNsOjIwMAorbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKK21zZ3N0ciAiRXJybzogbyBjb21hbmRvIGZhbGhvdSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0MworbXNnaWQgIk51bWJlciBvZiBsb29zZSBvYmplY3RzIgorbXNnc3RyICJOw7ptZXJvIGRlIG9iamV0b3Mgc29sdG9zIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ0Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkVzcGHDp28gb2N1cGFkbyBwZWxvcyBvYmpldG9zIHNvbHRvcyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NQorbXNnaWQgIk51bWJlciBvZiBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiTsO6bWVybyBkZSBvYmpldG9zIGNvbXBhY3RhZG9zIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tzIgorbXNnc3RyICJOw7ptZXJvIGRlIHBhY290ZXMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIkVzcGHDp28gb2N1cGFkbyBwZWxvcyBvYmpldG9zIGNvbXBhY3RhZG9zIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ4Cittc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKK21zZ3N0ciAiT2JqZXRvcyBjb21wYWN0YWRvcyBhZ3VhcmRhbmRvIGVsaW1pbmHDp8OjbyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OQorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIkFycXVpdm9zIGRlIGxpeG8iCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKK21zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICJDb21wYWN0YW5kbyBiYW5jbyBkZSBkYWRvcyBkZSBvYmpldG9zIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjgzCittc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCittc2dzdHIgIlZlcmlmaWNhbmRvIGJhbmNvIGRlIGRhZG9zIGRlIG9iamV0b3MgY29tIGZzY2stb2JqZWN0cyIKKworIzogbGliL2RhdGFiYXNlLnRjbDoxMDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhpcyByZXBvc2l0b3J5IGN1cnJlbnRseSBoYXMgYXBwcm94aW1hdGVseSAlaSBsb29zZSBvYmplY3RzLlxuIgorIlxuIgorIlRvIG1haW50YWluIG9wdGltYWwgcGVyZm9ybWFuY2UgaXQgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgY29tcHJlc3MgIgorInRoZSBkYXRhYmFzZS5cbiIKKyJcbiIKKyJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKK21zZ3N0ciAiIgorIkVzdGUgcmVwb3NpdMOzcmlvIHBvc3N1aSBhcHJveGltYWRhbWVudGUgJWkgb2JqZXRvcyBzb2x0b3MuXG4iCisiXG4iCisiUGFyYSBtYW50ZXIgbyBkZXNlbXBlbmhvIMOzdGltbyDDqSBhbHRhbWVudGUgcmVjb21lbmRhZG8gcXVlIHZvY8OqIGNvbXBhY3RlIG8gIgorImJhbmNvIGRlIGRhZG9zLlxuIgorIlxuIgorIkNvbXBhY3RhciBvIGJhbmNvIGRlIGRhZG9zIGFnb3JhPyIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAiRGF0YSBpbnbDoWxpZGEgcmVjZWJpZGEgZG8gR2l0OiAlcyIKKworIzogbGliL2RpZmYudGNsOjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgorIlxuIgorIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgorIlxuIgorIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKKyJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgorInRoZSBzYW1lIHN0YXRlLiIKK21zZ3N0ciAiIgorIk5lbmh1bWEgZGlmZXJlbsOnYSBmb2kgZGV0ZWN0YWRhLlxuIgorIlxuIgorIiVzIG7Do28gcG9zc3VpIG11ZGFuw6dhcy5cbiIKKyJcbiIKKyJBIGRhdGEgZGUgbW9kaWZpY2HDp8OjbyBkZXN0ZSBhcnF1aXZvIGZvaSBhdHVhbGl6YWRhIHBvciBvdXRybyBhcGxpY2F0aXZvLCBtYXMgIgorIm8gY29udGXDumRvIGRvIGFycXVpdm8gbsOjbyBmb2kgYWx0ZXJhZG8uXG4iCisiXG4iCisiVW1hIGF0dWFsaXphw6fDo28gc2VyIGV4ZWN1dGFkYSBwYXJhIGVuY29udHJhciBvdXRyb3MgYXJxdWl2b3MgcXVlIHBvc3NhbSB0ZXIgIgorIm8gbWVzbW8gZXN0YWRvLiIKKworIzogbGliL2RpZmYudGNsOjEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAiQ2FycmVnYW5kbyBkaWZlcmVuw6dhcyBkZSAlcy4uLiIKKworIzogbGliL2RpZmYudGNsOjEyNQorbXNnaWQgIiIKKyJMT0NBTDogZGVsZXRlZFxuIgorIlJFTU9URTpcbiIKK21zZ3N0ciAiIgorIkxvY2FsOiBhcGFnYWRvXG4iCisiUmVtb3RvOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTMwCittc2dpZCAiIgorIlJFTU9URTogZGVsZXRlZFxuIgorIkxPQ0FMOlxuIgorbXNnc3RyICIiCisiUmVtb3RvOiBhcGFnYWRvXG4iCisiTG9jYWw6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzcKK21zZ2lkICJMT0NBTDpcbiIKK21zZ3N0ciAiTG9jYWw6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxNDAKK21zZ2lkICJSRU1PVEU6XG4iCittc2dzdHIgIlJlbW90bzpcbiIKKworIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCittc2dzdHIgIkltcG9zc8OtdmVsIGV4aWJpciAlcyIKKworIzogbGliL2RpZmYudGNsOjIwMworbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCittc2dzdHIgIkVycm8gYW8gY2FycmVnYXIgbyBhcnF1aXZvOiIKKworIzogbGliL2RpZmYudGNsOjIxMAorbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKK21zZ3N0ciAiUmVwb3NpdMOzcmlvIEdpdCAoc3ViLXByb2pldG8pIgorCisjOiBsaWIvZGlmZi50Y2w6MjIyCittc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgorbXNnc3RyICIqIEFycXVpdm8gYmluw6FyaW8gKGNvbnRlw7pkbyBuw6NvIGV4aWJpZG8pLiIKKworIzogbGliL2RpZmYudGNsOjIyNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyIqIFVudHJhY2tlZCBmaWxlIGlzICVkIGJ5dGVzLlxuIgorIiogU2hvd2luZyBvbmx5IGZpcnN0ICVkIGJ5dGVzLlxuIgorbXNnc3RyICIiCisiKiBPIGFycXVpdm8gbsOjbyByYXN0cmVhZG8gcG9zc3VpICVkIGJ5dGVzLlxuIgorIiogRXhpYmluZG8gYXBlbmFzIG9zIHByaW1laXJvcyAlZCBieXRlcy5cbiIKKworIzogbGliL2RpZmYudGNsOjIzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy5cbiIKKyIqIFRvIHNlZSB0aGUgZW50aXJlIGZpbGUsIHVzZSBhbiBleHRlcm5hbCBlZGl0b3IuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqIE8gYXJxdWl2byBuw6NvIHJhc3RyZWFkbyBmb2kgY29ydGFkbyBhcXVpIHBvciAlcy5cbiIKKyIqIFBhcmEgdmVyIG8gYXJxdWl2byBjb21wbGV0bywgdXNlIHVtIGVkaXRvciBleHRlcm5vLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6NDgyCittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkVycm8gYW8gZGVzbWFyY2FyIG8gdHJlY2hvIHNlbGVjaW9uYWRvLiIKKworIzogbGliL2RpZmYudGNsOjQ4OQorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBodW5rLiIKK21zZ3N0ciAiRXJybyBhbyBtYXJjYXIgbyB0cmVjaG8gc2VsZWNpb25hZG8uIgorCisjOiBsaWIvZGlmZi50Y2w6NTY4Cittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIkVycm8gYW8gZGVzbWFyY2FyIGEgbGluaGEgc2VsZWNpb25hZGEuIgorCisjOiBsaWIvZGlmZi50Y2w6NTc2Cittc2dpZCAiRmFpbGVkIHRvIHN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICJFcnJvIGFvIG1hcmNhciBhIGxpbmhhIHNlbGVjaW9uYWRhLiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDMKK21zZ2lkICJEZWZhdWx0IgorbXNnc3RyICJQYWRyw6NvIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN5c3RlbSAoJXMpIgorbXNnc3RyICJTaXN0ZW1hICglcykiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Cittc2dpZCAiT3RoZXIiCittc2dzdHIgIk91dHJvIgorCisjOiBsaWIvZXJyb3IudGNsOjIwIGxpYi9lcnJvci50Y2w6MTE0Cittc2dpZCAiZXJyb3IiCittc2dzdHIgIkVycm8iCisKKyM6IGxpYi9lcnJvci50Y2w6MzYKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICJhdmlzbyIKKworIzogbGliL2Vycm9yLnRjbDo5NAorbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCittc2dzdHIgIlZvY8OqIHByZWNpc2EgY29ycmlnaXIgb3MgZXJyb3MgYWNpbWEgYW50ZXMgZGUgc2FsdmFyIGEgcmV2aXPDo28uIgorCisjOiBsaWIvaW5kZXgudGNsOjYKK21zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCittc2dzdHIgIkltcG9zc8OtdmVsIGRlc2Jsb3F1ZWFyIG8gw61uZGljZS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MTUKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAiRXJybyBubyDDrW5kaWNlIgorCisjOiBsaWIvaW5kZXgudGNsOjE3Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIiIKKyJBIGF0dWFsaXphw6fDo28gZG8gw61uZGljZSBkbyBHaXQgZmFsaG91LiBVbWEgYXR1YWxpemHDp8OjbyBzZXLDoSBleGVjdXRhZGEgIgorImF1dG9tYXRpY2FtZW50ZSBwYXJhIHJlc3NpbmNyb25pemFyIG8gR2l0IEdVSSIKKworIzogbGliL2luZGV4LnRjbDoyOAorbXNnaWQgIkNvbnRpbnVlIgorbXNnc3RyICJDb250aW51YXIiCisKKyM6IGxpYi9pbmRleC50Y2w6MzEKK21zZ2lkICJVbmxvY2sgSW5kZXgiCittc2dzdHIgIkRlc2Jsb3F1ZWFyIMOtbmRpY2UiCisKKyM6IGxpYi9pbmRleC50Y2w6Mjg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgorbXNnc3RyICJEZXNtYXJjYW5kbyAlcyBwYXJhIHJldmlzw6NvIgorCisjOiBsaWIvaW5kZXgudGNsOjMyOAorbXNnaWQgIlJlYWR5IHRvIGNvbW1pdC4iCittc2dzdHIgIlByb250byBwYXJhIHNhbHZhciBhIHJldmlzw6NvLiIKKworIzogbGliL2luZGV4LnRjbDozNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIkFkaWNpb25hbmRvICVzIgorCisjOiBsaWIvaW5kZXgudGNsOjM5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgorbXNnc3RyICJSZXZlcnRlciBhcyBhbHRlcmHDp8O1ZXMgbm8gYXJxdWl2byAlcz8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDAwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgorbXNnc3RyICJSZXZlcnRlciBhcyBhbHRlcmHDp8O1ZXMgbmVzdGVzICVpIGFycXVpdm9zPyIKKworIzogbGliL2luZGV4LnRjbDo0MDgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyJRdWFscXVlciBhbHRlcmHDp8OjbyBuw6NvIG1hcmNhZGEgc2Vyw6EgcGVybWFuZW50ZW1lbnRlIHBlcmRpZGEgbmEgcmV2ZXJzw6NvLiIKKworIzogbGliL2luZGV4LnRjbDo0MTEKK21zZ2lkICJEbyBOb3RoaW5nIgorbXNnc3RyICJOw6NvIGZhemVyIG5hZGEiCisKKyM6IGxpYi9pbmRleC50Y2w6NDI5Cittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICJSZXZlcnRlbmRvIG9zIGFycXVpdm9zIHNlbGVjaW9uYWRvcyIKKworIzogbGliL2luZGV4LnRjbDo0MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgJXMiCittc2dzdHIgIlJldmVydGVuZG8gJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMKK21zZ2lkICIiCisiQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBtZXNjbGFyIGR1cmFudGUgdW1hIGNvcnJlw6fDo28uXG4iCisiXG4iCisiVm9jw6ogZGV2ZSBjb25jbHVpciBhIGNvcnJlw6fDo28gYW50ZXMgZGUgY29tZcOnYXIgcXVhbHF1ZXIgbWVzY2xhZ2VtLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJPIMO6bHRpbW8gZXN0YWRvIGxpZG8gbsOjbyBjb25mZXJlIGNvbSBvIGVzdGFkbyBhdHVhbC5cbiIKKyJcbiIKKyJPdXRybyBwcm9ncmFtYSBkbyBHaXQgbW9kaWZpY291IG8gcmVwb3NpdMOzcmlvIGRlc2RlIGEgw7psdGltYSBsZWl0dXJhLiBVbWEgIgorImF0dWFsaXphw6fDo28gZGV2ZSBzZXIgZXhlY3V0YWRhIGFudGVzIGRlIGVmZXR1YXIgdW1hIG1lc2NsYWdlbS5cbiIKKyJcbiIKKyJBIGF0dWFsaXphw6fDo28gY29tZcOnYXLDoSBhdXRvbWF0aWNhbWVudGUgYWdvcmEuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCisiXG4iCisiWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCisibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorbXNnc3RyICIiCisiSMOhIHVtYSBtZXNjbGFnZW0gY29tIGNvbmZsaXRvcyBlbSBwcm9ncmVzc28uXG4iCisiXG4iCisiTyBhcnF1aXZvICVzIHBvc3N1aSBjb25mbGl0b3MgZGUgbWVzY2xhZ2VtLlxuIgorIlxuIgorIlZvY8OqIGRldmUgcmVzb2x2w6otbG9zLCBtYXJjYXIgbyBhcnF1aXZvIGUgc2FsdmFyIGEgcmV2aXPDo28gcGFyYSBjb21wbGV0YXIgYSAiCisibWVzY2xhZ2VtIGF0dWFsLiBTw7MgZW50w6NvIHZvY8OqIHBvZGVyw6EgY29tZcOnYXIgb3V0cmEuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhbmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaXMgbW9kaWZpZWQuXG4iCisiXG4iCisiWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyAiCisid2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgorbXNnc3RyICIiCisiVm9jw6ogZXN0w6EgZW0gbWVpbyBhIHVtYSBtdWRhbsOnYS5cbiIKKyJcbiIKKyJPIGFycXVpdm8gJXMgZm9pIG1vZGlmaWNhZG8uXG4iCisiXG4iCisiVm9jw6ogZGV2ZSBjb21wbGV0YXIgZSBzYWx2YXIgYSByZXZpc8OjbyBhdHVhbCBhbnRlcyBkZSBjb21lw6dhciB1bWEgbWVzY2xhZ2VtLiAiCisiQW8gZmF6w6otbG8sIHZvY8OqIHBvZGVyw6EgYWJvcnRhciBhIG1lc2NsYWdlbSBjYXNvIGhhamEgYWxndW0gZXJyby5cbiIKKworIzogbGliL21lcmdlLnRjbDoxMDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBvZiAlcyIKK21zZ3N0ciAiJXMgZGUgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCittc2dzdHIgIk1lc2NsYW5kbyAlcyBlICVzLi4uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMQorbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgorbXNnc3RyICJNZXNjbGFnZW0gY29tcGxldGFkYSBjb20gc3VjZXNzby4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMzCittc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCittc2dzdHIgIkEgbWVzY2xhZ2VtIGZhbGhvdS4gw4kgbmVjZXNzw6FyaW8gcmVzb2x2ZXIgY29uZmxpdG9zLiIKKworIzogbGliL21lcmdlLnRjbDoxNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBJbnRvICVzIgorbXNnc3RyICJNZXNjbGFyIGVtICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjE3NworbXNnaWQgIlJldmlzaW9uIFRvIE1lcmdlIgorbXNnc3RyICJSZXZpc8OjbyBwYXJhIG1lc2NsYXIiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjEyCittc2dpZCAiIgorIkNhbm5vdCBhYm9ydCB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQuXG4iCittc2dzdHIgIiIKKyJOw6NvIMOpIHBvc3PDrXZlbCBhYm9ydGFyIGR1cmFudGUgdW1hIGNvcnJlw6fDo28uXG4iCisiXG4iCisiVm9jw6ogcHJlY2lzYSBmaW5hbGl6YXIgYSBjb3JyZcOnw6NvIGRlc3RhIHJldmlzw6NvLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyMgorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorIkFib3J0YXIgbWVzY2xhZ2VtP1xuIgorIlxuIgorIkFib3J0YXIgYSBtZXNjbGFnZW0gYXR1YWwgaW1wbGljYXLDoSBuYSBwZXJkYSBkZSAqVE9EQVMqIGFzIG11ZGFuw6dhcyBuw6NvICIKKyJzYWx2YXMuXG4iCisiXG4iCisiQWJvcnRhciBhIG1lc2NsYWdlbSBhdHVhbD8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjI4Cittc2dpZCAiIgorIlJlc2V0IGNoYW5nZXM/XG4iCisiXG4iCisiUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorbXNnc3RyICIiCisiRGVzY2FydGFyIGFzIG11ZGFuw6dhcz9cbiIKKyJcbiIKKyJBbyBmYXrDqi1sbywgKlRPREFTKiBhcyBhbHRlcmHDp8O1ZXMgbsOjbyBzYWx2YXMgc2Vyw6NvIHBlcmRpZGFzLlxuIgorIlxuIgorIkNvbnRpbnVhciBlIGRlc2NhcnRhciBhcyBtdWRhbsOnYXMgYXR1YWlzPyIKKworIzogbGliL21lcmdlLnRjbDoyMzkKK21zZ2lkICJBYm9ydGluZyIKK21zZ3N0ciAiQWJvcnRhbmRvIgorCisjOiBsaWIvbWVyZ2UudGNsOjIzOQorbXNnaWQgImZpbGVzIHJlc2V0IgorbXNnc3RyICJhcnF1aXZvcyByZWRlZmluZG9zIgorCisjOiBsaWIvbWVyZ2UudGNsOjI2NworbXNnaWQgIkFib3J0IGZhaWxlZC4iCittc2dzdHIgIkEgdGVudGF0aXZhIGRlIGFib3J0YXIgYSBvcGVyYcOnw6NvIGZhbGhvdSIKKworIzogbGliL21lcmdlLnRjbDoyNjkKK21zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCittc2dzdHIgIk9wZXJhw6fDo28gYWJvcnRhZGEgY29tIHN1Y2Vzc28uIFByb250by4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjgKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgorbXNnc3RyICJGb3LDp2FyIGEgcmVzb2x1w6fDo28gcGFyYSBhIHZlcnPDo28gYmFzZT8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjkKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoaXMgYnJhbmNoPyIKK21zZ3N0ciAiRm9yw6dhciByZXNvbHXDp8OjbyBwYXJhIGVzdGUgcmFtbz8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKK21zZ3N0ciAiRm9yw6dhciByZXNvbHXDp8OjbyBwYXJhIG8gb3V0cm8gcmFtbz8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vdGUgdGhhdCB0aGUgZGlmZiBzaG93cyBvbmx5IGNvbmZsaWN0aW5nIGNoYW5nZXMuXG4iCisiXG4iCisiJXMgd2lsbCBiZSBvdmVyd3JpdHRlbi5cbiIKKyJcbiIKKyJUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdW5kb25lIG9ubHkgYnkgcmVzdGFydGluZyB0aGUgbWVyZ2UuIgorbXNnc3RyICIiCisiTm90ZSBxdWUgbyBkaWZmIG1vc3RyYSBhcGVuYXMgYXMgbXVkYW7Dp2FzIGNvbmZsaXRhbnRlcy5cbiIKKyJcbiIKKyIlcyBzZXLDoSBzb2JyZXNjcml0by5cbiIKKyJcbiIKKyJDYXNvIG5lY2Vzc8OhcmlvLCBzZXLDoSBwcmVjaXNvIHJlaW5pY2lhciBhIG1lc2NsYWdlbSBwYXJhIGRlc2ZhemVyIGVzdGEgIgorIm9wZXJhw6fDo28uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorbXNnc3RyICJPIGFycXVpdm8gJXMgcGFyZWNlIHRlciBjb25mbGl0b3MgbsOjbyByZXNvbHZpZG9zLiBNYXJjYXIgbWVzbW8gYXNzaW0/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFkZGluZyByZXNvbHV0aW9uIGZvciAlcyIKK21zZ3N0ciAiQWRpY2lvbmFuZG8gcmVzb2x1w6fDo28gcGFyYSAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQxCittc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorbXNnc3RyICIiCisiSW1wb3Nzw612ZWwgcmVzb2x2ZXIgY29uZmxpdG9zIGVudm9sdmVuZG8gZXhjbHVzw6NvIG91IGxpbmtzIGRlIGFycXVpdm9zIGNvbSAiCisiZXN0YSBmZXJyYW1lbnRhLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQ2Cittc2dpZCAiQ29uZmxpY3QgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiTyBhcnF1aXZvIGNvbmZsaXRhbnRlIG7Do28gZXhpc3RlIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKK21zZ3N0ciAiTsOjbyDDqSB1bWEgZmVycmFtZW50YSBkZSBtZXNjbGFnZW0gZ3LDoWZpY2E6IFwiJXNcIiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MjY4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICJGZXJyYW1lbnRhIGRlIG1lc2NsYWdlbSBuw6NvIHN1cG9ydGFkYSBcIiVzXCIiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMwMworbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgorbXNnc3RyICJBIGZlcnJhbWVudGEgZGUgbWVzY2xhZ2VtIGrDoSBlc3TDoSBlbSBleGVjdcOnw6NvLiBGaW5hbGl6YXI/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3IgcmV0cmlldmluZyB2ZXJzaW9uczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkVycm8gYW8gb2J0ZXIgYXMgdmVyc8O1ZXM6XG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJOw6NvIGZvaSBwb3Nzw612ZWwgaW5pY2lhciBhIGZlcnJhbWVudGEgZGUgbWVzY2xhZ2VtOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgIkV4ZWN1dGFuZG8gZmVycmFtZW50YSBkZSBtZXNjbGFnZW0uLi4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKK21zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCittc2dzdHIgIkZlcnJhbWVudGEgZGUgbWVzY2xhZ2VtIGZhbGhvdS4iCisKKyM6IGxpYi9vcHRpb24udGNsOjExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiQ29kaWZpY2HDp8OjbyBnbG9iYWwgaW52w6FsaWRhIFwiJXNcIiIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiQ29kaWZpY2HDp8OjbyBkbyByZXBvc2l0w7NyaW8gaW52w6FsaWRhIFwiJXNcIiIKKworIzogbGliL29wdGlvbi50Y2w6MTE3Cittc2dpZCAiUmVzdG9yZSBEZWZhdWx0cyIKK21zZ3N0ciAiUmVzdGF1cmFyIHBhZHLDtWVzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjEKK21zZ2lkICJTYXZlIgorbXNnc3RyICJTYWx2YXIiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIFJlcG9zaXRvcnkiCittc2dzdHIgIlJlcG9zaXTDs3JpbyAlcyIKKworIzogbGliL29wdGlvbi50Y2w6MTMyCittc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKK21zZ3N0ciAiR2xvYmFsICh0b2RvcyBvcyByZXBvc2l0w7NyaW9zKSIKKworIzogbGliL29wdGlvbi50Y2w6MTM4Cittc2dpZCAiVXNlciBOYW1lIgorbXNnc3RyICJOb21lIGRvIHVzdcOhcmlvIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzkKK21zZ2lkICJFbWFpbCBBZGRyZXNzIgorbXNnc3RyICJFbmRlcmXDp28gZGUgZS1tYWlsIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDEKK21zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKK21zZ3N0ciAiRXhpYmlyIHN1bcOhcmlvIGRhcyByZXZpc8O1ZXMgZGUgbWVzY2xhZ2VtIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDIKK21zZ2lkICJNZXJnZSBWZXJib3NpdHkiCittc2dzdHIgIk7DrXZlbCBkZSBkZXRhbGhhbWVudG8gZGEgbWVzY2xhZ2VtIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDMKK21zZ2lkICJTaG93IERpZmZzdGF0IEFmdGVyIE1lcmdlIgorbXNnc3RyICJFeGliaXIgZXN0YXTDrXN0aWNhcyBhcMOzcyBtZXNjbGFnZW5zIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDQKK21zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKK21zZ3N0ciAiVXNhciBmZXJyYW1lbnRhIGRlIG1lc2NsYWdlbSIKKworIzogbGliL29wdGlvbi50Y2w6MTQ2Cittc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKK21zZ3N0ciAiQ29uZmlhciBuYXMgZGF0YXMgZGUgbW9kaWZpY2HDp8OjbyBkb3MgYXJxdWl2b3MiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NworbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKK21zZ3N0ciAiRWxpbWluYXIgcmFtb3MgZGUgcmFzdHJlYW1lbnRvIGFvIHJlY2ViZXIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgorbXNnc3RyICJDb2luY2lkaXIgcmFtb3MgZGUgcmFzdHJlYW1lbnRvIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDkKK21zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKK21zZ3N0ciAiRGV0ZWN0YXIgY8OzcGlhcyBzb21lbnRlIGVtIGFycXVpdm9zIG1vZGlmaWNhZG9zIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAiTsO6bWVybyBtw61uaW1vIGRlIGxldHJhcyBwYXJhIGRldGVjdGFyIGPDs3BpYXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MQorbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgorbXNnc3RyICJFeHRlbnPDo28gZG8gY29udGV4dG8gZGUgZGV0ZWPDp8OjbyAoZW0gZGlhcykiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MgorbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCittc2dzdHIgIk7Dum1lcm8gZGUgbGluaGFzIHBhcmEgbyBkaWZmIGNvbnRleHR1YWwiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MworbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCittc2dzdHIgIkxhcmd1cmEgZG8gdGV4dG8gZGEgZGVzY3Jpw6fDo28gZGEgcmV2aXPDo28iCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NAorbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKK21zZ3N0ciAiTW9kZWxvIGRlIG5vbWUgcGFyYSBub3ZvcyByYW1vcyIKKworIzogbGliL29wdGlvbi50Y2w6MTU1Cittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICJDb2RpZmljYcOnw6NvIHBhZHLDo28gZG9zIGFycXVpdm9zIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMDMKK21zZ2lkICJDaGFuZ2UiCittc2dzdHIgIkFsdGVyYXIiCisKKyM6IGxpYi9vcHRpb24udGNsOjIzMAorbXNnaWQgIlNwZWxsaW5nIERpY3Rpb25hcnk6IgorbXNnc3RyICJEaWNpb27DoXJpbyBwYXJhIG8gdmVyaWZpY2Fkb3Igb3J0b2dyw6FmaWNvOiIKKworIzogbGliL29wdGlvbi50Y2w6MjU0Cittc2dpZCAiQ2hhbmdlIEZvbnQiCittc2dzdHIgIk11ZGFyIGZvbnRlIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgIkVzY29saGVyICVzIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNjQKK21zZ2lkICJwdC4iCittc2dzdHIgInB0LiIKKworIzogbGliL29wdGlvbi50Y2w6Mjc4Cittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIlByZWZlcsOqbmNpYXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjMxNAorbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCittc2dzdHIgIkhvdXZlIHVtIGVycm8gYW8gc2FsdmFyIGFzIG9ww6fDtWVzOiIKKworIzogbGliL3JlbW90ZS50Y2w6MTYzCittc2dpZCAiUmVtb3ZlIFJlbW90ZSIKK21zZ3N0ciAiRXhjbHVpciIKKworIzogbGliL3JlbW90ZS50Y2w6MTY4Cittc2dpZCAiUHJ1bmUgZnJvbSIKK21zZ3N0ciAiTGltcGFyIGRlIgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNzMKK21zZ2lkICJGZXRjaCBmcm9tIgorbXNnc3RyICJSZWNlYmVyIGRlIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMTUKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICJFbnZpYXIgcGFyYSIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE5Cittc2dpZCAiQWRkIFJlbW90ZSIKK21zZ3N0ciAiQWRpY2lvbmFyIHJlcG9zaXTDs3JpbyByZW1vdG8iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNAorbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgorbXNnc3RyICJBZGljaW9uYXIgbm92byByZXBvc2l0w7NyaW8gcmVtb3RvIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjggbGliL3Rvb2xzX2RsZy50Y2w6MzYKK21zZ2lkICJBZGQiCittc2dzdHIgIkFkaWNpb25hciIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjM3Cittc2dpZCAiUmVtb3RlIERldGFpbHMiCittc2dzdHIgIkRldGFsaGVzIGRvIHJlcG9zaXTDs3JpbyByZW1vdG8iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo1MAorbXNnaWQgIkxvY2F0aW9uOiIKK21zZ3N0ciAiTG9jYWw6IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjIKK21zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKK21zZ3N0ciAiQcOnw7VlcyBhZGljaW9uYWlzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjUKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiUmVjZWJlciBpbWVkaWF0YW1lbnRlIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzEKK21zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgorbXNnc3RyICJJbmljaWFsaXphciByZXBvc2l0w7NyaW8gcmVtb3RvIGUgZW52aWFyIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzcKK21zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgorbXNnc3RyICJOw6NvIGZhemVyIG5hZGEgYWdvcmEiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDEKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgorbXNnc3RyICJQb3IgZmF2b3IsIGluZGlxdWUgdW0gbm9tZSBwYXJhIG8gcmVwb3NpdMOzcmlvIHJlbW90by4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiXCIlc1wiIG7Do28gw6kgdW0gbm9tZSB2w6FsaWRvIHBhcmEgdW0gcmVwb3NpdMOzcmlvIHJlbW90by4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHJlbW90ZSAnJXMnIG9mIGxvY2F0aW9uICclcycuIgorbXNnc3RyICJFcnJvIGFvIGFkaWNpb25hciByZXBvc2l0w7NyaW8gcmVtb3RvIFwiJXNcIiBkbyBsb2NhbCBcIiVzXCI6IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzIGxpYi90cmFuc3BvcnQudGNsOjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmZXRjaCAlcyIKK21zZ3N0ciAicmVjZWJlciAlcyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHRoZSAlcyIKK21zZ3N0ciAiUmVjZWJlbmRvIG8gJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorbXNnc3RyICJOw6NvIHNhYmUgY29tbyBpbmljaWFsaXphciBvIHJlcG9zaXTDs3JpbyByZW1vdG8gZW0gXCIlc1wiLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MyBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo2MworIzogbGliL3RyYW5zcG9ydC50Y2w6ODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJwdXNoICVzIgorbXNnc3RyICJlbnZpYXIgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgorbXNnc3RyICJDb25maWd1cmFuZG8gJXMgKGVtICVzKSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Cittc2dpZCAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKK21zZ3N0ciAiQXBhZ2FyIHJhbW8gcmVtb3RvIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ3Cittc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgorbXNnc3RyICJEbyByZXBvc2l0w7NyaW8iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTAgbGliL3RyYW5zcG9ydC50Y2w6MTM0Cittc2dpZCAiUmVtb3RlOiIKK21zZ3N0ciAiUmVtb3RvOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo2NiBsaWIvdHJhbnNwb3J0LnRjbDoxNDkKK21zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgorbXNnc3RyICJPdXRybyBsb2NhbDoiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6ODQKK21zZ2lkICJCcmFuY2hlcyIKK21zZ3N0ciAiUmFtb3MiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTA5Cittc2dpZCAiRGVsZXRlIE9ubHkgSWYiCittc2dzdHIgIkFwYWdhciBzb21lbnRlIHNlIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExMQorbXNnaWQgIk1lcmdlZCBJbnRvOiIKK21zZ3N0ciAiTWVzY2xhZG8gZW06IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE1MgorbXNnaWQgIkEgYnJhbmNoIGlzIHJlcXVpcmVkIGZvciAnTWVyZ2VkIEludG8nLiIKK21zZ3N0ciAiw4kgcHJlY2lzbyBpbmRpY2FyIHVtIHJhbW8gcGFyYSBcIk1lc2NsYWRvIGVtXCIuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKKyJcbiIKKyIgLSAlcyIKK21zZ3N0ciAiIgorIk9zIHNlZ3VpbnRlcyByYW1vcyBuw6NvIGVzdMOjbyBpbnRlaXJhbWVudGUgbWVzY2xhZG9zIGVtICVzOlxuIgorIlxuIgorIiAtICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKKyJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKK21zZ3N0ciAiIgorIlVtIG91IG1haXMgdGVzdGVzIGRlIG1lc2NsYWdlbSBmYWxoYXJhbSBwb3JxdWUgdm9jw6ogbsOjbyBwb3NzdWkgYXMgcmV2aXPDtWVzICIKKyJuZWNlc3PDoXJpYXMuIFRlbnRlIHJlY2ViZXIgcmV2aXPDtWVzIGRlICVzIHByaW1laXJvLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDcKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgIlBvciBmYXZvciBzZWxlY2lvbmUgdW0gb3UgbWFpcyByYW1vcyBwYXJhIGFwYWdhci4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAiQXBhZ2FyIHJhbW9zIGRlICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgorbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgorbXNnc3RyICJOZW5odW0gcmVwb3NpdMOzcmlvIGZvaSBzZWxlY2lvbmFkby4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6Mjk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2Nhbm5pbmcgJXMuLi4iCittc2dzdHIgIkF0dWFsaXphbmRvICVzLi4uIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMQorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICJFbmNvbnRyYXI6IgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMworbXNnaWQgIk5leHQiCittc2dzdHIgIlByw7N4aW1vIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyNAorbXNnaWQgIlByZXYiCittc2dzdHIgIkFudGVyaW9yIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyNQorbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgorbXNnc3RyICJTZW5zw612ZWwgYSBtYWnDunNjdWxhcy9taW7DunNjdWxhcyIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGdyYXZhciBvIGF0YWxobzoiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3Cittc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZ3JhdmFyIG8gw61jb25lOiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjU3Cittc2dpZCAiVW5zdXBwb3J0ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiVmVyaWZpY2Fkb3Igb3J0b2dyw6FmaWNvIG7Do28gc3Vwb3J0YWRvIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NjUKK21zZ2lkICJTcGVsbCBjaGVja2luZyBpcyB1bmF2YWlsYWJsZSIKK21zZ3N0ciAiVmVyaWZpY2HDp8OjbyBvcnRvZ3LDoWZpY2EgaW5kaXNwb27DrXZlbCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Cittc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgorbXNnc3RyICJDb25maWd1cmHDp8OjbyBkbyB2ZXJpZmljYWRvciBvcnRvZ3LDoWZpY28gaW52w6FsaWRhIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCittc2dzdHIgIlJldmVydGVuZG8gZGljaW9uw6FyaW8gcGFyYSAlcy4iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MworbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCittc2dzdHIgIk8gdmVyaWZpY2Fkb3Igb3J0b2dyw6FmaWNvIGZhbGhvdSBzZW0gcmVsYXRhciBuZW5odW0gZXJybyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIlZlcmlmaWNhZG9yIG9ydG9ncsOhZmljbyBuw6NvIHJlY29uaGVjaWRvIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Cittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgIlNlbSBzdWdlc3TDtWVzIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg4Cittc2dpZCAiVW5leHBlY3RlZCBFT0YgZnJvbSBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJGaW5hbCBkZSBhcnF1aXZvIGluZXNwZXJhZG8gcmVjZWJpZG8gZG8gdmVyaWZpY2Fkb3Igb3J0b2dyw6FmaWNvIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCittc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCittc2dzdHIgIkEgdmVyaWZpY2HDp8OjbyBvcnRvZ3LDoWZpY2EgZmFsaG91IgorCisjOiBsaWIvc3Noa2V5LnRjbDozMQorbXNnaWQgIk5vIGtleXMgZm91bmQuIgorbXNnc3RyICJOZW5odW1hIGNoYXZlIGVuY29udHJhZGEiCisKKyM6IGxpYi9zc2hrZXkudGNsOjM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRm91bmQgYSBwdWJsaWMga2V5IGluOiAlcyIKK21zZ3N0ciAiQ2hhdmUgcMO6YmxpY2EgZW5jb250cmFkYSBlbTogJXMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjQwCittc2dpZCAiR2VuZXJhdGUgS2V5IgorbXNnc3RyICJHZXJhciBjaGF2ZSIKKworIzogbGliL3NzaGtleS50Y2w6NTYKK21zZ2lkICJDb3B5IFRvIENsaXBib2FyZCIKK21zZ3N0ciAiQ29waWFyIHBhcmEgYSDDoXJlYSBkZSB0cmFuc2ZlcsOqbmNpYSIKKworIzogbGliL3NzaGtleS50Y2w6NzAKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAiU3VhIGNoYXZlIHDDumJsaWNhIE9wZW5TU0giCisKKyM6IGxpYi9zc2hrZXkudGNsOjc4Cittc2dpZCAiR2VuZXJhdGluZy4uLiIKK21zZ3N0ciAiR2VyYW5kby4uLiIKKworIzogbGliL3NzaGtleS50Y2w6ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJJbXBvc3PDrXZlbCBpbmljaWFyIHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCisKKyM6IGxpYi9zc2hrZXkudGNsOjExMQorbXNnaWQgIkdlbmVyYXRpb24gZmFpbGVkLiIKK21zZ3N0ciAiQSBnZXJhw6fDo28gZGEgY2hhdmUgZmFsaG91LiIKKworIzogbGliL3NzaGtleS50Y2w6MTE4Cittc2dpZCAiR2VuZXJhdGlvbiBzdWNjZWVkZWQsIGJ1dCBubyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAiQSBnZXJhw6fDo28gZGEgY2hhdmUgZm9pIGJlbS1zdWNlZGlkYSwgbWFzIG5lbmh1bWEgY2hhdmUgZm9pIGVuY29udHJhZGEuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCittc2dzdHIgIlN1YSBjaGF2ZSBlbTogJXMiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiVzIC4uLiAlKmkgZGUgJSppICVzICglM2klJSkiCisKKyM6IGxpYi90b29scy50Y2w6NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgIsOJIHByZWNpc28gc2VsZWNpb25hciB1bSBhcnF1aXZvIHBhcmEgZXhlY3V0YXIgJXMuIgorCisjOiBsaWIvdG9vbHMudGNsOjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCittc2dzdHIgIlZvY8OqIHRlbSBjZXJ0ZXphIHF1ZSBkZXNlamEgZXhlY3V0YXIgJXM/IgorCisjOiBsaWIvdG9vbHMudGNsOjExMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2w6ICVzIgorbXNnc3RyICJGZXJyYW1lbnRhOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAiRXhlY3V0YW5kbzogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKK21zZ3N0ciAiRXhlY3XDp8OjbyBjb21wbGV0YWRhIGNvbSBzdWNlc3NvOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGZhaWxlZDogJXMiCittc2dzdHIgIkZlcnJhbWVudGEgZmFsaG91OiAlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKK21zZ2lkICJBZGQgVG9vbCIKK21zZ3N0ciAiQWRpY2lvbmFyIGZlcnJhbWVudGEiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI4Cittc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCittc2dzdHIgIkFkaWNpb25hciBub3ZvIGNvbWFuZG8gZGUgZmVycmFtZW50YSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzMKK21zZ2lkICJBZGQgZ2xvYmFsbHkiCittc2dzdHIgIkFkaWNpb25hciBnbG9iYWxtZW50ZSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDUKK21zZ2lkICJUb29sIERldGFpbHMiCittc2dzdHIgIkRldGFsaGVzIGRhIGZlcnJhbWVudGEiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjQ4Cittc2dpZCAiVXNlICcvJyBzZXBhcmF0b3JzIHRvIGNyZWF0ZSBhIHN1Ym1lbnUgdHJlZToiCittc2dzdHIgIlVzZSBvIHNlcGFyYWRvciBcIi9cIiBwYXJhIGNyaWFyIHVtYSDDoXJ2b3JlIGRlIHN1Yi1tZW51czoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjYxCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIkNvbWFuZG86IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo3NAorbXNnaWQgIlNob3cgYSBkaWFsb2cgYmVmb3JlIHJ1bm5pbmciCittc2dzdHIgIkV4aWJpciB1bWEgY2FpeGEgZGUgZGnDoWxvZ28gYW50ZXMgZGUgZXhlY3V0YXIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjgwCittc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCittc2dzdHIgIlNvbGljaXRhciBhIHNlbGXDp8OjbyBkZSB1bWEgcmV2aXPDo28gKGEgdmFyacOhdmVsICRSRVZJU0lPTikiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjg1Cittc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCittc2dzdHIgIlNvbGljaXRhciBhcmd1bWVudG9zIGFkaWNpb25haXMgKGRlZmluZSBhIHZhcmnDoXZlbCAkQVJHUykiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjkyCittc2dpZCAiRG9uJ3Qgc2hvdyB0aGUgY29tbWFuZCBvdXRwdXQgd2luZG93IgorbXNnc3RyICJOw6NvIGV4aWJpciBhIGphbmVsYSBkZSBzYcOtZGEgZG8gY29tYW5kbyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTcKK21zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgorbXNnc3RyICJFeGVjdXRhciBhcGVuYXMgc2UgaG91dmVyIHVtIGRpZmYgc2VsZWNpb25hZG8gKCRGSUxFTkFNRSBuw6NvLXZhemlvKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTIxCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKK21zZ3N0ciAiUG9yIGZhdm9yLCBpbmRpcXVlIHVtIG5vbWUgcGFyYSBhIGZlcnJhbWVudGEuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJBIGZlcnJhbWVudGEgXCIlc1wiIGrDoSBleGlzdGUuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGFkZCB0b29sOlxuIgorIiVzIgorbXNnc3RyICIiCisiTsOjbyBmb2kgcG9zc8OtdmVsIGFkaWNpb25hciBhIGZlcnJhbWVudGE6XG4iCisiJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MAorbXNnaWQgIlJlbW92ZSBUb29sIgorbXNnc3RyICJFeGNsdWlyIGZlcnJhbWVudGEiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5NgorbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgorbXNnc3RyICJFeGNsdWlyIGNvbWFuZG8gZGUgZmVycmFtZW50YSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjAwCittc2dpZCAiUmVtb3ZlIgorbXNnc3RyICJFeGNsdWlyIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzYKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoQXp1bCBpbmRpY2EgZmVycmFtZW50YXMgZG8gcmVwb3NpdMOzcmlvIGxvY2FsKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6Mjk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgorbXNnc3RyICJFeGVjdXRhciBjb21hbmRvOiAlcyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzExCittc2dpZCAiQXJndW1lbnRzIgorbXNnc3RyICJBcmd1bWVudG9zIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDgKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgorbXNnc3RyICJSZWNlYmVuZG8gbm92YXMgbXVkYW7Dp2FzIGRlICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOAorIywgdGNsLWZvcm1hdAorbXNnaWQgInJlbW90ZSBwcnVuZSAlcyIKK21zZ3N0ciAiTGltcGFyICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgorbXNnc3RyICJMaW1wYW5kbyByYW1vcyBleGNsdcOtZG9zIGRlICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAiRW52aWFuZG8gbXVkYW7Dp2FzIHBhcmEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWlycm9yaW5nIHRvICVzIgorbXNnc3RyICJEdXBsaWNhbmRvIHBhcmEgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAiRW52aWFuZG8gJXMgJXMgcGFyYSAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTAwCittc2dpZCAiUHVzaCBCcmFuY2hlcyIKK21zZ3N0ciAiRW52aWFyIHJhbW9zIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTQKK21zZ2lkICJTb3VyY2UgQnJhbmNoZXMiCittc2dzdHIgIlJhbW9zIGRlIG9yaWdlbSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTMxCittc2dpZCAiRGVzdGluYXRpb24gUmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVwb3NpdMOzcmlvIGRlIGRlc3Rpbm8iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2OQorbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCittc2dzdHIgIk9ww6fDtWVzIGRlIHRyYW5zZmVyw6puY2lhIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNzEKK21zZ2lkICJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgYnJhbmNoIChtYXkgZGlzY2FyZCBjaGFuZ2VzKSIKK21zZ3N0ciAiU29icmVzY3JldmVyIHJhbW9zIGV4aXN0ZW50ZXMgKHBvZGUgZGVzY2FydGFyIG11ZGFuw6dhcykiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3NQorbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgorbXNnc3RyICJVc2FyIGNvbXBhY3Rhw6fDo28gbWluaW1hbGlzdGEgKHBhcmEgcmVkZXMgbGVudGFzKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTc5Cittc2dpZCAiSW5jbHVkZSB0YWdzIgorbXNnc3RyICJJbmNsdWlyIGV0aXF1ZXRhcyIKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vcnUucG8gYi9naXQtZ3VpL3BvL3J1LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNDM0M2IKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL3J1LnBvCkBAIC0wLDAgKzEsMjU2NCBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHRvIHJ1c3NpYW4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgorIyBJcmluYSBSaWVzZW4gPGlyaW5hLnJpZXNlbkBnbWFpbC5jb20+LCAyMDA3LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0LWd1aVxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMC0wMS0yNiAxNTo0Ny0wODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwNy0xMC0yMiAyMjozMC0wMjAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBBbGV4IFJpZXNlbiA8cmFhLmxrbWxAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFJ1c3NpYW4gVHJhbnNsYXRpb24gPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdC1ndWkuc2g6NDEgZ2l0LWd1aS5zaDo3OTMgZ2l0LWd1aS5zaDo4MDcgZ2l0LWd1aS5zaDo4MjAgZ2l0LWd1aS5zaDo5MDMKKyM6IGdpdC1ndWkuc2g6OTIyCittc2dpZCAiZ2l0LWd1aTogZmF0YWwgZXJyb3IiCittc2dzdHIgImdpdC1ndWk6INC60YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwIgorCisjOiBnaXQtZ3VpLnNoOjc0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgorbXNnc3RyICLQkiAlcyDRg9GB0YLQsNC90L7QstC70LXQvSDQvdC10LLQtdGA0L3Ri9C5INGI0YDQuNGE0YI6IgorCisjOiBnaXQtZ3VpLnNoOjc3OQorbXNnaWQgIk1haW4gRm9udCIKK21zZ3N0ciAi0KjRgNC40YTRgiDQuNC90YLQtdGA0YTQtdC50YHQsCIKKworIzogZ2l0LWd1aS5zaDo3ODAKK21zZ2lkICJEaWZmL0NvbnNvbGUgRm9udCIKK21zZ3N0ciAi0KjRgNC40YTRgiDQutC+0L3RgdC+0LvQuCDQuCDQuNC30LzQtdC90LXQvdC40LkgKGRpZmYpIgorCisjOiBnaXQtZ3VpLnNoOjc5NAorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAiZ2l0INC90LUg0L3QsNC50LTQtdC9INCyIFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjgyMQorbXNnaWQgIkNhbm5vdCBwYXJzZSBHaXQgdmVyc2lvbiBzdHJpbmc6IgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDRgNCw0YHQv9C+0LfQvdCw0YLRjCDRgdGC0YDQvtC60YMg0LLQtdGA0YHQuNC4IEdpdDogIgorCisjOiBnaXQtZ3VpLnNoOjgzOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKKyJcbiIKKyIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgorIlxuIgorIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKKyJcbiIKKyJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgorbXNnc3RyICIiCisi0J3QtdCy0L7Qt9C80L7QttC90L4g0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LLQtdGA0YHQuNGOIEdpdFxuIgorIlxuIgorIiVzINGD0LrQsNC30YvQstCw0LXRgiDQvdCwINCy0LXRgNGB0LjRjiAnJXMnLlxuIgorIlxuIgorItC00LvRjyAlcyDRgtGA0LXQsdGD0LXRgtGB0Y8g0LLQtdGA0YHQuNGPIEdpdCwg0L3QsNGH0LjQvdCw0Y8g0YEgMS41LjBcbiIKKyJcbiIKKyLQn9GA0LjQvdGP0YLRjCAnJXMnINC60LDQuiDQstC10YDRgdC40Y4gMS41LjA/XG4iCisKKyM6IGdpdC1ndWkuc2g6MTEyOAorbXNnaWQgIkdpdCBkaXJlY3Rvcnkgbm90IGZvdW5kOiIKK21zZ3N0ciAi0JrQsNGC0LDQu9C+0LMgR2l0INC90LUg0L3QsNC50LTQtdC9OiIKKworIzogZ2l0LWd1aS5zaDoxMTQ2Cittc2dpZCAiQ2Fubm90IG1vdmUgdG8gdG9wIG9mIHdvcmtpbmcgZGlyZWN0b3J5OiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0L/QtdGA0LXQudGC0Lgg0Log0LrQvtGA0L3RjiDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjzogIgorCisjOiBnaXQtZ3VpLnNoOjExNTQKK21zZ2lkICJDYW5ub3QgdXNlIGJhcmUgcmVwb3NpdG9yeToiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0LHQtdC3INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsDoiCisKKyM6IGdpdC1ndWkuc2g6MTE2MgorbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLQntGC0YHRg9GC0YHRgtCy0YPQtdGCINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgorCisjOiBnaXQtZ3VpLnNoOjEzMzQgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKK21zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjQtSDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDRgdC+0YHRgtC+0Y/QvdC40Lgg0YTQsNC50LvQvtCyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjEzOTAKK21zZ2lkICJTY2FubmluZyBmb3IgbW9kaWZpZWQgZmlsZXMgLi4uIgorbXNnc3RyICLQn9C+0LjRgdC6INC40LfQvNC10L3QtdC90L3Ri9GFINGE0LDQudC70L7Qsi4uLiIKKworIzogZ2l0LWd1aS5zaDoxNDU0Cittc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAi0JLRi9C30L7QsiDQv9GA0L7Qs9GA0LDQvNC80Ysg0L/QvtC00LTQtdGA0LbQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gcHJlcGFyZS1jb21taXQtbXNnLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE0NzEKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgcHJlcGFyZS1jb21taXQtbXNnIGhvb2suIgorbXNnc3RyICIiCisi0KHQvtGF0YDQsNC90LXQvdC40LUg0L/RgNC10YDQstCw0L3QviDQv9GA0L7Qs9GA0LDQvNC80L7QuSDQv9C+0LTQtNC10YDQttC60Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyBwcmVwYXJlLWNvbW1pdC1tc2ciCisKKyM6IGdpdC1ndWkuc2g6MTYyOSBsaWIvYnJvd3Nlci50Y2w6MjQ2Cittc2dpZCAiUmVhZHkuIgorbXNnc3RyICLQk9C+0YLQvtCy0L4uIgorCisjOiBnaXQtZ3VpLnNoOjE3ODcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXNwbGF5aW5nIG9ubHkgJXMgb2YgJXMgZmlsZXMuIgorbXNnc3RyICLQn9C+0LrQsNC30LDQvdC+ICVzINC40LcgJXMg0YTQsNC50LvQvtCyLiIKKworIzogZ2l0LWd1aS5zaDoxOTEzCittc2dpZCAiVW5tb2RpZmllZCIKK21zZ3N0ciAi0J3QtSDQuNC30LzQtdC90LXQvdC+IgorCisjOiBnaXQtZ3VpLnNoOjE5MTUKK21zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3Qviwg0L3QtSDQv9C+0LTQs9C+0YLQvtCy0LvQtdC90L4iCisKKyM6IGdpdC1ndWkuc2g6MTkxNiBnaXQtZ3VpLnNoOjE5MjQKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCIKK21zZ3N0ciAi0J/QvtC00LPQvtGC0L7QstC70LXQvdC+INC00LvRjyDRgdC+0YXRgNCw0L3QtdC90LjRjyIKKworIzogZ2l0LWd1aS5zaDoxOTE3IGdpdC1ndWkuc2g6MTkyNQorbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICLQp9Cw0YHRgtC4LCDQv9C+0LTQs9C+0YLQvtCy0LvQtdC90L3Ri9C1INC00LvRjyDRgdC+0YXRgNCw0L3QtdC90LjRjyIKKworIzogZ2l0LWd1aS5zaDoxOTE4IGdpdC1ndWkuc2g6MTkyNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LvQtdC90L4g0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPLCDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCIgorCisjOiBnaXQtZ3VpLnNoOjE5MjAKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAi0KLQuNC/INGE0LDQudC70LAg0LjQt9C80LXQvdGR0L0sINC90LUg0L/QvtC00LPQvtGC0L7QstC70LXQvdC+IgorCisjOiBnaXQtZ3VpLnNoOjE5MjEKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgorbXNnc3RyICLQotC40L8g0YTQsNC50LvQsCDQuNC30LzQtdC90ZHQvSwg0L/QvtC00LPQvtGC0L7QstC70LXQvdC+IgorCisjOiBnaXQtZ3VpLnNoOjE5MjMKK21zZ2lkICJVbnRyYWNrZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgItCd0LUg0L7RgtGB0LvQtdC20LjQstCw0LXRgtGB0Y8sINC90LUg0L/QvtC00LPQvtGC0L7QstC70LXQvdC+IgorCisjOiBnaXQtZ3VpLnNoOjE5MjgKK21zZ2lkICJNaXNzaW5nIgorbXNnc3RyICLQntGC0YHRg9GC0YHRgtCy0YPQtdGCIgorCisjOiBnaXQtZ3VpLnNoOjE5MjkKK21zZ2lkICJTdGFnZWQgZm9yIHJlbW92YWwiCittc2dzdHIgItCf0L7QtNCz0L7RgtC+0LLQu9C10L3QviDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjyIKKworIzogZ2l0LWd1aS5zaDoxOTMwCittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgorbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LvQtdC90L4g0LTQu9GPINGD0LTQsNC70LXQvdC40Y8sINC10YnQtSDQvdC1INGD0LTQsNC70LXQvdC+IgorCisjOiBnaXQtZ3VpLnNoOjE5MzIgZ2l0LWd1aS5zaDoxOTMzIGdpdC1ndWkuc2g6MTkzNCBnaXQtZ3VpLnNoOjE5MzUKKyM6IGdpdC1ndWkuc2g6MTkzNiBnaXQtZ3VpLnNoOjE5MzcKK21zZ2lkICJSZXF1aXJlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICLQotGA0LXQsdGD0LXRgtGB0Y8g0YDQsNC30YDQtdGI0LXQvdC40LUg0LrQvtC90YTQu9C40LrRgtCwINC/0YDQuCDRgdC70LjRj9C90LjQuCIKKworIzogZ2l0LWd1aS5zaDoxOTcyCittc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAi0JfQsNC/0YPRgdC60LDQtdGC0YHRjyBnaXRrLi4uINCf0L7QtNC+0LbQtNC40YLQtSwg0L/QvtC20LDQu9GD0LnRgdGC0LAuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTk4NAorbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgorbXNnc3RyICJnaXRrINC90LUg0L3QsNC50LTQtdC9INCyIFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjIwNDMKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiZ2l0IGd1aSDQvdC1INC90LDQudC00LXQvSDQsiBQQVRILiIKKworIzogZ2l0LWd1aS5zaDoyNDU1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzYKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBnaXQtZ3VpLnNoOjI0NTYKK21zZ2lkICJFZGl0IgorbXNnc3RyICLQoNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCIKKworIzogZ2l0LWd1aS5zaDoyNDU4IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjEKK21zZ2lkICJCcmFuY2giCittc2dzdHIgItCS0LXRgtCy0YwiCisKKyM6IGdpdC1ndWkuc2g6MjQ2MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTQ4Cittc2dpZCAiQ29tbWl0QEBub3VuIgorbXNnc3RyICLQodC+0YHRgtC+0Y/QvdC40LUiCisKKyM6IGdpdC1ndWkuc2g6MjQ2NCBsaWIvbWVyZ2UudGNsOjEyMSBsaWIvbWVyZ2UudGNsOjE1MCBsaWIvbWVyZ2UudGNsOjE2OAorbXNnaWQgIk1lcmdlIgorbXNnc3RyICLQodC70LjRj9C90LjQtSIKKworIzogZ2l0LWd1aS5zaDoyNDY1IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKK21zZ2lkICJSZW1vdGUiCittc2dzdHIgItCS0L3QtdGI0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40LgiCisKKyM6IGdpdC1ndWkuc2g6MjQ2OAorbXNnaWQgIlRvb2xzIgorbXNnc3RyICLQktGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdGL0LUg0L7Qv9C10YDQsNGG0LjQuCIKKworIzogZ2l0LWd1aS5zaDoyNDc3Cittc2dpZCAiRXhwbG9yZSBXb3JraW5nIENvcHkiCittc2dzdHIgItCf0YDQvtGB0LzQvtGC0YAg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwIgorCisjOiBnaXQtZ3VpLnNoOjI0ODMKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAi0J/RgNC+0YHQvNC+0YLRgNC10YLRjCDRhNCw0LnQu9GLINGC0LXQutGD0YnQtdC5INCy0LXRgtCy0LgiCisKKyM6IGdpdC1ndWkuc2g6MjQ4NworbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0YTQsNC50LvRiyDQstC10YLQstC4Li4uIgorCisjOiBnaXQtZ3VpLnNoOjI0OTIKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGOINGC0LXQutGD0YnQtdC5INCy0LXRgtCy0LgiCisKKyM6IGdpdC1ndWkuc2g6MjQ5NgorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LjRgdGC0L7RgNC40Y4g0LLRgdC10YUg0LLQtdGC0LLQtdC5IgorCisjOiBnaXQtZ3VpLnNoOjI1MDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDRhNCw0LnQu9GLINCy0LXRgtCy0LggJXMiCisKKyM6IGdpdC1ndWkuc2g6MjUwNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlZpc3VhbGl6ZSAlcydzIEhpc3RvcnkiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LjRgdGC0L7RgNC40Y4g0LLQtdGC0LLQuCAlcyIKKworIzogZ2l0LWd1aS5zaDoyNTEwIGxpYi9kYXRhYmFzZS50Y2w6MjcgbGliL2RhdGFiYXNlLnRjbDo2NworbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCittc2dzdHIgItCh0YLQsNGC0LjRgdGC0LjQutCwINCx0LDQt9GLINC00LDQvdC90YvRhSIKKworIzogZ2l0LWd1aS5zaDoyNTEzIGxpYi9kYXRhYmFzZS50Y2w6MzQKK21zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKK21zZ3N0ciAi0KHQttCw0YLRjCDQsdCw0LfRgyDQtNCw0L3QvdGL0YUiCisKKyM6IGdpdC1ndWkuc2g6MjUxNgorbXNnaWQgIlZlcmlmeSBEYXRhYmFzZSIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LjRgtGMINCx0LDQt9GDINC00LDQvdC90YvRhSIKKworIzogZ2l0LWd1aS5zaDoyNTIzIGdpdC1ndWkuc2g6MjUyNyBnaXQtZ3VpLnNoOjI1MzEgbGliL3Nob3J0Y3V0LnRjbDo4CisjOiBsaWIvc2hvcnRjdXQudGNsOjQwIGxpYi9zaG9ydGN1dC50Y2w6NzIKK21zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCDRj9GA0LvRi9C6INC90LAg0YDQsNCx0L7Rh9C10Lwg0YHRgtC+0LvQtSIKKworIzogZ2l0LWd1aS5zaDoyNTM5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTgzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTkxCittc2dpZCAiUXVpdCIKK21zZ3N0ciAi0JLRi9GF0L7QtCIKKworIzogZ2l0LWd1aS5zaDoyNTQ3Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAi0J7RgtC80LXQvdC40YLRjCIKKworIzogZ2l0LWd1aS5zaDoyNTUwCittc2dpZCAiUmVkbyIKK21zZ3N0ciAi0J/QvtCy0YLQvtGA0LjRgtGMIgorCisjOiBnaXQtZ3VpLnNoOjI1NTQgZ2l0LWd1aS5zaDozMTA5Cittc2dpZCAiQ3V0IgorbXNnc3RyICLQktGL0YDQtdC30LDRgtGMIgorCisjOiBnaXQtZ3VpLnNoOjI1NTcgZ2l0LWd1aS5zaDozMTEyIGdpdC1ndWkuc2g6MzE4NiBnaXQtZ3VpLnNoOjMyNTkKKyM6IGxpYi9jb25zb2xlLnRjbDo2OQorbXNnaWQgIkNvcHkiCittc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDRgtGMIgorCisjOiBnaXQtZ3VpLnNoOjI1NjAgZ2l0LWd1aS5zaDozMTE1Cittc2dpZCAiUGFzdGUiCittc2dzdHIgItCS0YHRgtCw0LLQuNGC0YwiCisKKyM6IGdpdC1ndWkuc2g6MjU2MyBnaXQtZ3VpLnNoOjMxMTggbGliL2JyYW5jaF9kZWxldGUudGNsOjI2CisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM4Cittc2dpZCAiRGVsZXRlIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCIKKworIzogZ2l0LWd1aS5zaDoyNTY3IGdpdC1ndWkuc2g6MzEyMiBnaXQtZ3VpLnNoOjMyNjMgbGliL2NvbnNvbGUudGNsOjcxCittc2dpZCAiU2VsZWN0IEFsbCIKK21zZ3N0ciAi0JLRi9C00LXQu9C40YLRjCDQstGB0LUiCisKKyM6IGdpdC1ndWkuc2g6MjU3NgorbXNnaWQgIkNyZWF0ZS4uLiIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0YwuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjU4MgorbXNnaWQgIkNoZWNrb3V0Li4uIgorbXNnc3RyICLQn9C10YDQtdC50YLQuC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTg4Cittc2dpZCAiUmVuYW1lLi4uIgorbXNnc3RyICLQn9C10YDQtdC40LzQtdC90L7QstCw0YLRjC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTkzCittc2dpZCAiRGVsZXRlLi4uIgorbXNnc3RyICLQo9C00LDQu9C40YLRjC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNTk4Cittc2dpZCAiUmVzZXQuLi4iCittc2dzdHIgItCh0LHRgNC+0YHQuNGC0YwuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjYwOAorbXNnaWQgIkRvbmUiCittc2dzdHIgItCX0LDQstC10YDRiNC10L3QviIKKworIzogZ2l0LWd1aS5zaDoyNjEwCittc2dpZCAiQ29tbWl0QEB2ZXJiIgorbXNnc3RyICLQodC+0YXRgNCw0L3QuNGC0YwiCisKKyM6IGdpdC1ndWkuc2g6MjYxOSBnaXQtZ3VpLnNoOjMwNTAKK21zZ2lkICJOZXcgQ29tbWl0IgorbXNnc3RyICLQndC+0LLQvtC1INGB0L7RgdGC0L7Rj9C90LjQtSIKKworIzogZ2l0LWd1aS5zaDoyNjI3IGdpdC1ndWkuc2g6MzA1NworbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICLQmNGB0L/RgNCw0LLQuNGC0Ywg0L/QvtGB0LvQtdC00L3QtdC1INGB0L7RgdGC0L7Rj9C90LjQtSIKKworIzogZ2l0LWd1aS5zaDoyNjM3IGdpdC1ndWkuc2g6MzAxMSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjk5Cittc2dpZCAiUmVzY2FuIgorbXNnc3RyICLQn9C10YDQtdGH0LjRgtCw0YLRjCIKKworIzogZ2l0LWd1aS5zaDoyNjQzCittc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgorbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LjRgtGMINC00LvRjyDRgdC+0YXRgNCw0L3QtdC90LjRjyIKKworIzogZ2l0LWd1aS5zaDoyNjQ5Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCBGaWxlcyBUbyBDb21taXQiCittc2dzdHIgItCf0L7QtNCz0L7RgtC+0LLQuNGC0Ywg0LjQt9C80LXQvdC10L3QvdGL0LUg0YTQsNC50LvRiyDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y8iCisKKyM6IGdpdC1ndWkuc2g6MjY1NQorbXNnaWQgIlVuc3RhZ2UgRnJvbSBDb21taXQiCittc2dzdHIgItCj0LHRgNCw0YLRjCDQuNC3INC/0L7QtNCz0L7RgtC+0LLQu9C10L3QvdC+0LPQviIKKworIzogZ2l0LWd1aS5zaDoyNjYxIGxpYi9pbmRleC50Y2w6NDEyCittc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCittc2dzdHIgItCe0YLQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBnaXQtZ3VpLnNoOjI2NjkgZ2l0LWd1aS5zaDozMzEwIGdpdC1ndWkuc2g6MzM0MQorbXNnaWQgIlNob3cgTGVzcyBDb250ZXh0IgorbXNnc3RyICLQnNC10L3RjNGI0LUg0LrQvtC90YLQtdC60YHRgtCwIgorCisjOiBnaXQtZ3VpLnNoOjI2NzMgZ2l0LWd1aS5zaDozMzE0IGdpdC1ndWkuc2g6MzM0NQorbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgorbXNnc3RyICLQkdC+0LvRjNGI0LUg0LrQvtC90YLQtdC60YHRgtCwIgorCisjOiBnaXQtZ3VpLnNoOjI2ODAgZ2l0LWd1aS5zaDozMDI0IGdpdC1ndWkuc2g6MzEzMworbXNnaWQgIlNpZ24gT2ZmIgorbXNnc3RyICLQktGB0YLQsNCy0LjRgtGMIFNpZ25lZC1vZmYtYnkiCisKKyM6IGdpdC1ndWkuc2g6MjY5NgorbXNnaWQgIkxvY2FsIE1lcmdlLi4uIgorbXNnc3RyICLQm9C+0LrQsNC70YzQvdC+0LUg0YHQu9C40Y/QvdC40LUuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjcwMQorbXNnaWQgIkFib3J0IE1lcmdlLi4uIgorbXNnc3RyICLQn9GA0LXRgNCy0LDRgtGMINGB0LvQuNGP0L3QuNC1Li4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MTMgZ2l0LWd1aS5zaDoyNzQxCittc2dpZCAiQWRkLi4uIgorbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3MTcKK21zZ2lkICJQdXNoLi4uIgorbXNnc3RyICLQntGC0L/RgNCw0LLQuNGC0YwuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjcyMQorbXNnaWQgIkRlbGV0ZSBCcmFuY2guLi4iCittc2dzdHIgItCj0LTQsNC70LjRgtGMINCy0LXRgtCy0YwuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjczMSBnaXQtZ3VpLnNoOjMyOTIKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LguLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc0MgorbXNnaWQgIlJlbW92ZS4uLiIKK21zZ3N0ciAi0KPQtNCw0LvQuNGC0YwuLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjc1MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCittc2dpZCAiSGVscCIKK21zZ3N0ciAi0J/QvtC80L7RidGMIgorCisjOiBnaXQtZ3VpLnNoOjI3NTUgZ2l0LWd1aS5zaDoyNzU5IGxpYi9hYm91dC50Y2w6MTQKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDQgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3V0ICVzIgorbXNnc3RyICLQniAlcyIKKworIzogZ2l0LWd1aS5zaDoyNzgzCittc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCittc2dzdHIgItCU0L7QutGD0LzQtdC90YLQsNGG0LjRjyDQsiDQuNC90YLQtdGA0L3QtdGC0LUiCisKKyM6IGdpdC1ndWkuc2g6Mjc4NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTYKK21zZ2lkICJTaG93IFNTSCBLZXkiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LrQu9GO0YcgU1NIIgorCisjOiBnaXQtZ3VpLnNoOjI4OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAi0LrRgNC40YLQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LA6ICVzOiDQvdC10YIg0YLQsNC60L7Qs9C+INGE0LDQudC70LAg0LjQu9C4INC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGdpdC1ndWkuc2g6MjkyNgorbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKK21zZ3N0ciAi0KLQtdC60YPRidCw0Y8g0LLQtdGC0LLRjDoiCisKKyM6IGdpdC1ndWkuc2g6Mjk0NworbXNnaWQgIlN0YWdlZCBDaGFuZ2VzIChXaWxsIENvbW1pdCkiCittc2dzdHIgItCf0L7QtNCz0L7RgtC+0LLQu9C10L3QviAo0LHRg9C00LXRgiDRgdC+0YXRgNCw0L3QtdC90L4pIgorCisjOiBnaXQtZ3VpLnNoOjI5NjcKK21zZ2lkICJVbnN0YWdlZCBDaGFuZ2VzIgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC+ICjQvdC1INCx0YPQtNC10YIg0YHQvtGF0YDQsNC90LXQvdC+KSIKKworIzogZ2l0LWd1aS5zaDozMDE3Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAi0J/QvtC00LPQvtGC0L7QstC40YLRjCDQstGB0LUiCisKKyM6IGdpdC1ndWkuc2g6MzAzNiBsaWIvdHJhbnNwb3J0LnRjbDoxMDQgbGliL3RyYW5zcG9ydC50Y2w6MTkzCittc2dpZCAiUHVzaCIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LjRgtGMIgorCisjOiBnaXQtZ3VpLnNoOjMwNzEKK21zZ2lkICJJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0JrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDQv9C10YDQstC+0LzRgyDRgdC+0YHRgtC+0Y/QvdC40Y46IgorCisjOiBnaXQtZ3VpLnNoOjMwNzIKK21zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0JrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDQuNGB0L/RgNCw0LLQu9C10L3QvdC+0LzRgyDRgdC+0YHRgtC+0Y/QvdC40Y46IgorCisjOiBnaXQtZ3VpLnNoOjMwNzMKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLQmtC+0LzQvNC10L3RgtCw0YDQuNC5INC6INC40YHQv9GA0LDQstC70LXQvdC90L7QvNGDINC/0LXRgNCy0L7QvdCw0YfQsNC70YzQvdC+0LzRgyDRgdC+0YHRgtC+0Y/QvdC40Y46IgorCisjOiBnaXQtZ3VpLnNoOjMwNzQKK21zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0JrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDQuNGB0L/RgNCw0LLQu9C10L3QvdC+0LzRgyDRgdC70LjRj9C90LjRjjoiCisKKyM6IGdpdC1ndWkuc2g6MzA3NQorbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0JrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDRgdC70LjRj9C90LjRjjoiCisKKyM6IGdpdC1ndWkuc2g6MzA3NgorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0JrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDRgdC+0YHRgtC+0Y/QvdC40Y46IgorCisjOiBnaXQtZ3VpLnNoOjMxMjUgZ2l0LWd1aS5zaDozMjY3IGxpYi9jb25zb2xlLnRjbDo3MworbXNnaWQgIkNvcHkgQWxsIgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0YLRjCDQstGB0LUiCisKKyM6IGdpdC1ndWkuc2g6MzE0OSBsaWIvYmxhbWUudGNsOjEwNAorbXNnaWQgIkZpbGU6IgorbXNnc3RyICLQpNCw0LnQuzoiCisKKyM6IGdpdC1ndWkuc2g6MzI1NQorbXNnaWQgIlJlZnJlc2giCittc2dzdHIgItCe0LHQvdC+0LLQuNGC0YwiCisKKyM6IGdpdC1ndWkuc2g6MzI3NgorbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAi0KPQvNC10L3RjNGI0LjRgtGMINGA0LDQt9C80LXRgCDRiNGA0LjRhNGC0LAiCisKKyM6IGdpdC1ndWkuc2g6MzI4MAorbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAi0KPQstC10LvQuNGH0LjRgtGMINGA0LDQt9C80LXRgCDRiNGA0LjRhNGC0LAiCisKKyM6IGdpdC1ndWkuc2g6MzI4OCBsaWIvYmxhbWUudGNsOjI4MQorbXNnaWQgIkVuY29kaW5nIgorbXNnc3RyICLQmtC+0LTQuNGA0L7QstC60LAiCisKKyM6IGdpdC1ndWkuc2g6MzI5OQorbXNnaWQgIkFwcGx5L1JldmVyc2UgSHVuayIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGML9Cj0LHRgNCw0YLRjCDQuNC30LzQtdC90LXQvdC40LUiCisKKyM6IGdpdC1ndWkuc2g6MzMwNAorbXNnaWQgIkFwcGx5L1JldmVyc2UgTGluZSIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGML9Cj0LHRgNCw0YLRjCDRgdGC0YDQvtC60YMiCisKKyM6IGdpdC1ndWkuc2g6MzMyMworbXNnaWQgIlJ1biBNZXJnZSBUb29sIgorbXNnc3RyICLQl9Cw0L/Rg9GB0YLQuNGC0Ywg0L/RgNC+0LPRgNCw0LzQvNGDINGB0LvQuNGP0L3QuNGPIgorCisjOiBnaXQtZ3VpLnNoOjMzMjgKK21zZ2lkICJVc2UgUmVtb3RlIFZlcnNpb24iCittc2dzdHIgItCS0LfRj9GC0Ywg0LLQvdC10YjQvdGO0Y4g0LLQtdGA0YHQuNGOIgorCisjOiBnaXQtZ3VpLnNoOjMzMzIKK21zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKK21zZ3N0ciAi0JLQt9GP0YLRjCDQu9C+0LrQsNC70YzQvdGD0Y4g0LLQtdGA0YHQuNGOIgorCisjOiBnaXQtZ3VpLnNoOjMzMzYKK21zZ2lkICJSZXZlcnQgVG8gQmFzZSIKK21zZ3N0ciAi0J7RgtC80LXQvdC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IGdpdC1ndWkuc2g6MzM1NAorbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIiIKKworIzogZ2l0LWd1aS5zaDozMzU4Cittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQuNGB0YLQvtGA0LjRjiDRgtC10LrRg9GJ0LXQuSDQstC10YLQstC4INC/0L7QtNC80L7QtNGD0LvRjyIKKworIzogZ2l0LWd1aS5zaDozMzYyCittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YDQuNGOINCy0YHQtdGFINCy0LXRgtCy0LXQuSDQv9C+0LTQvNC+0LTRg9C70Y8iCisKKyM6IGdpdC1ndWkuc2g6MzM2NworbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtZ3VpLnNoOjMzODkKK21zZ2lkICJVbnN0YWdlIEh1bmsgRnJvbSBDb21taXQiCittc2dzdHIgItCd0LUg0YHQvtGF0YDQsNC90Y/RgtGMINGH0LDRgdGC0YwiCisKKyM6IGdpdC1ndWkuc2g6MzM5MQorbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCittc2dzdHIgItCj0LHRgNCw0YLRjCDRgdGC0YDQvtC60Lgg0LjQtyDQv9C+0LTQs9C+0YLQvtCy0LvQtdC90L3QvtCz0L4iCisKKyM6IGdpdC1ndWkuc2g6MzM5MworbXNnaWQgIlVuc3RhZ2UgTGluZSBGcm9tIENvbW1pdCIKK21zZ3N0ciAi0KPQsdGA0LDRgtGMINGB0YLRgNC+0LrRgyDQuNC3INC/0L7QtNCz0L7RgtC+0LLQu9C10L3QvdC+0LPQviIKKworIzogZ2l0LWd1aS5zaDozMzk2Cittc2dpZCAiU3RhZ2UgSHVuayBGb3IgQ29tbWl0IgorbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LjRgtGMINGH0LDRgdGC0Ywg0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPIgorCisjOiBnaXQtZ3VpLnNoOjMzOTgKK21zZ2lkICJTdGFnZSBMaW5lcyBGb3IgQ29tbWl0IgorbXNnc3RyICLQn9C+0LTQs9C+0YLQvtCy0LjRgtGMINGB0YLRgNC+0LrQuCDQtNC70Y8g0YHQvtGF0YDQsNC90LXQvdC40Y8iCisKKyM6IGdpdC1ndWkuc2g6MzQwMAorbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKK21zZ3N0ciAi0J/QvtC00LPQvtGC0L7QstC40YLRjCDRgdGC0YDQvtC60YMg0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPIgorCisjOiBnaXQtZ3VpLnNoOjM0MjQKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgItCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPLi4uIgorCisjOiBnaXQtZ3VpLnNoOjM1NDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisi0JLQvtC30LzQvtC20L3RiyDQvtGI0LjQsdC60Lgg0LIg0L/QtdGA0LXQvNC10L3QvdGL0YUg0L7QutGA0YPQttC10L3QuNGPLlxuIgorIlxuIgorItCf0LXRgNC10LzQtdC90L3Ri9C1INC+0LrRgNGD0LbQtdC90LjRjywg0LrQvtGC0L7RgNGL0LUg0LLQvtC30LzQvtC20L3QvlxuIgorItCx0YPQtNGD0YIg0L/RgNC+0LjQs9C90L7RgNC40YDQvtCy0LDQvdGLINC60L7QvNCw0L3QtNCw0LzQuCBHaXQsXG4iCisi0LfQsNC/0YPRidC10L3QvdGL0LzQuCDQuNC3ICVzXG4iCisiXG4iCisKKyM6IGdpdC1ndWkuc2g6MzU3MAorbXNnaWQgIiIKKyJcbiIKKyJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCisiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorbXNnc3RyICIiCisiXG4iCisi0K3RgtC+INC40LfQstC10YHRgtC90LDRjyDQv9GA0L7QsdC70LXQvNCwINGBIFRjbCxcbiIKKyLRgNCw0YHQv9GA0L7RgdGC0YDQsNC90Y/QtdC80YvQvCBDeWd3aW4uIgorCisjOiBnaXQtZ3VpLnNoOjM1NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgorImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgorInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCisifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyLQktC80LXRgdGC0L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8gJXMg0LzQvtC20L3QvlxuIgorItGB0L7RhdGA0LDQvdC40YLRjCDQt9C90LDRh9C10L3QuNGPIHVzZXIubmFtZSDQuFxuIgorInVzZXIuZW1haWwg0LIg0JLQsNGI0LXQvCDQv9C10YDRgdC+0L3QsNC70YzQvdC+0LxcbiIKKyLRhNCw0LnQu9C1IH4vLmdpdGNvbmZpZy5cbiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtINCz0YDQsNGE0LjRh9C10YHQutC40Lkg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0YHQutC40Lkg0LjQvdGC0LXRgNGE0LXQudGBINC6IEdpdC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzIKK21zZ2lkICJGaWxlIFZpZXdlciIKK21zZ3N0ciAi0J/RgNC+0YHQvNC+0YLRgCDRhNCw0LnQu9CwIgorCisjOiBsaWIvYmxhbWUudGNsOjc4Cittc2dpZCAiQ29tbWl0OiIKK21zZ3N0ciAi0KHQvtGF0YDQsNC90LXQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LU6IgorCisjOiBsaWIvYmxhbWUudGNsOjI3MQorbXNnaWQgIkNvcHkgQ29tbWl0IgorbXNnc3RyICLQodC60L7Qv9C40YDQvtCy0LDRgtGMIFNIQS0xIgorCisjOiBsaWIvYmxhbWUudGNsOjI3NQorbXNnaWQgIkZpbmQgVGV4dC4uLiIKK21zZ3N0ciAi0J3QsNC50YLQuCDRgtC10LrRgdGCLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjI4NAorbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCittc2dzdHIgItCf0YDQvtCy0LXRgdGC0Lgg0L/QvtC70L3Ri9C5INC/0L7QuNGB0Log0LrQvtC/0LjQuSIKKworIzogbGliL2JsYW1lLnRjbDoyODgKK21zZ2lkICJTaG93IEhpc3RvcnkgQ29udGV4dCIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQuNGB0YLQvtGA0LjRh9C10YHQutC40Lkg0LrQvtC90YLQtdC60YHRgiIKKworIzogbGliL2JsYW1lLnRjbDoyOTEKK21zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgorbXNnc3RyICLQoNCw0YHRgdC80L7RgtGA0LXRgtGMINGB0L7RgdGC0L7Rj9C90LjQtSDQv9GA0LXQtNC60LAiCisKKyM6IGxpYi9ibGFtZS50Y2w6NDUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVhZGluZyAlcy4uLiIKK21zZ3N0ciAi0KfRgtC10L3QuNC1ICVzLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjU1NworbXNnaWQgIkxvYWRpbmcgY29weS9tb3ZlIHRyYWNraW5nIGFubm90YXRpb25zLi4uIgorbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwINCw0L3QvdC+0YLQsNGG0LjQuCDQutC+0L/QuNGA0L7QstCw0L3QuNC5L9C/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40LkuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NTc3Cittc2dpZCAibGluZXMgYW5ub3RhdGVkIgorbXNnc3RyICLRgdGC0YDQvtC6INC/0YDQvtC60L7QvNC80LXQvdGC0LjRgNC+0LLQsNC90L4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzY5Cittc2dpZCAiTG9hZGluZyBvcmlnaW5hbCBsb2NhdGlvbiBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAi0JfQsNCz0YDRg9C30LrQsCDQsNC90L3QvtGC0LDRhtC40Lkg0L/QtdGA0LLQvtC90LDRh9Cw0LvRjNC90L7Qs9C+INC/0L7Qu9C+0LbQtdC90LjRjyDQvtCx0YrQtdC60YLQsC4uLiIKKworIzogbGliL2JsYW1lLnRjbDo3NzIKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAi0JDQvdC90L7RgtCw0YbQuNGPINC30LDQstC10YDRiNC10L3QsC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAyCittc2dpZCAiQnVzeSIKK21zZ3N0ciAi0JfQsNC90Y/RgiIKKworIzogbGliL2JsYW1lLnRjbDo4MDMKK21zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKK21zZ3N0ciAi0JDQvdC90L7RgtCw0YbQuNGPINGD0LbQtSDQt9Cw0L/Rg9GJ0LXQvdCwIgorCisjOiBsaWIvYmxhbWUudGNsOjg0MgorbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCittc2dzdHIgItCS0YvQv9C+0LvQvdC10L3QuNC1INC/0L7Qu9C90L7Qs9C+INC/0L7QuNGB0LrQsCDQutC+0L/QuNC5Li4uIgorCisjOiBsaWIvYmxhbWUudGNsOjkxMAorbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKK21zZ3N0ciAi0JfQsNCz0YDRg9C30LrQsCDQsNC90L3QvtGC0LDRhtC40LguLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6OTYzCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAi0JDQstGC0L7RgDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTY3Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAi0KHQvtGF0YDQsNC90LjQuzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6OTcyCittc2dpZCAiT3JpZ2luYWwgRmlsZToiCittc2dzdHIgItCY0YHRhdC+0LTQvdGL0Lkg0YTQsNC50Ls6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwMjAKK21zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC90LDQudGC0Lgg0YLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1OiIKKworIzogbGliL2JsYW1lLnRjbDoxMDc1Cittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC90LDQudGC0Lgg0YHQvtGB0YLQvtGP0L3QuNC1INC/0YDQtdC00LrQsDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA5MAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQv9C+0LrQsNC30LDRgtGMINC/0YDQtdC00LrQsCIKKworIzogbGliL2JsYW1lLnRjbDoxMDkxIGxpYi9kaWZmLnRjbDozMjAKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNCz0YDRg9C30LrQuCDQuNC30LzQtdC90LXQvdC40Lk6IgorCisjOiBsaWIvYmxhbWUudGNsOjEyMzEKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAi0JjRgdGC0L7Rh9C90LjQujoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTIzNworbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICLQpNCw0LnQuzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI0MgorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAi0KHQutC+0L/QuNGA0L7QstCw0L3Qvi/Qv9C10YDQtdC80LXRidC10L3QviDQsjoiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE0IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE5Cittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICLQn9C10YDQtdC50YLQuCDQvdCwINCy0LXRgtCy0YwiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIzCittc2dpZCAiQ2hlY2tvdXQiCittc2dzdHIgItCf0LXRgNC10LnRgtC4IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDoyNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzUKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozMiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzAgbGliL2Jyb3dzZXIudGNsOjI4MgorIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzkgbGliL2Nob29zZV9mb250LnRjbDo0MyBsaWIvbWVyZ2UudGNsOjE3MgorIzogbGliL29wdGlvbi50Y2w6MTI1IGxpYi9yZW1vdGVfYWRkLnRjbDozMiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQyCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0MCBsaWIvdG9vbHNfZGxnLnRjbDoyMDQgbGliL3Rvb2xzX2RsZy50Y2w6MzUyCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMDgKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgItCe0YLQvNC10L3QsCIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzIgbGliL2Jyb3dzZXIudGNsOjI4NyBsaWIvdG9vbHNfZGxnLnRjbDozMjgKK21zZ2lkICJSZXZpc2lvbiIKK21zZ3N0ciAi0JLQtdGA0YHQuNGPIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozNiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MjgwCittc2dpZCAiT3B0aW9ucyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6OTIKK21zZ2lkICJGZXRjaCBUcmFja2luZyBCcmFuY2giCittc2dzdHIgItCf0L7Qu9GD0YfQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINC40Lcg0LLQvdC10YjQvdC10Lkg0LLQtdGC0LLQuCIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDQKK21zZ2lkICJEZXRhY2ggRnJvbSBMb2NhbCBCcmFuY2giCittc2dzdHIgItCe0YLRgdC+0LXQtNC40L3QuNGC0Ywg0L7RgiDQu9C+0LrQsNC70YzQvdC+0Lkg0LLQtdGC0LLQuCIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIyCittc2dpZCAiQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSDQstC10YLQstC4IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjcKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0L3QvtCy0YPRjiDQstC10YLQstGMIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODEKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgItCh0L7Qt9C00LDRgtGMIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDAKK21zZ2lkICJCcmFuY2ggTmFtZSIKK21zZ3N0ciAi0J3QsNC30LLQsNC90LjQtSDQstC10YLQstC4IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDMgbGliL3JlbW90ZV9hZGQudGNsOjM5IGxpYi90b29sc19kbGcudGNsOjUwCittc2dpZCAiTmFtZToiCittc2dzdHIgItCd0LDQt9Cy0LDQvdC40LU6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTgKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKK21zZ3N0ciAi0JLQt9GP0YLRjCDQuNC3INC40LzQtdC9INCy0LXRgtCy0LXQuSDRgdC70LXQttC10L3QuNGPIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKK21zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKK21zZ3N0ciAi0J3QsNGH0LDQu9GM0L3QsNGPINCy0LXRgNGB0LjRjyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCittc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCittc2dzdHIgItCe0LHQvdC+0LLQuNGC0Ywg0LjQvNC10Y7RidGD0Y7RgdGPINCy0LXRgtCy0Yw6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzUKK21zZ2lkICJObyIKK21zZ3N0ciAi0J3QtdGCIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODAKK21zZ2lkICJGYXN0IEZvcndhcmQgT25seSIKK21zZ3N0ciAi0KLQvtC70YzQutC+IEZhc3QgRm9yd2FyZCIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTcxCittc2dpZCAiUmVzZXQiCittc2dzdHIgItCh0LHRgNC+0YEiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NworbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgorbXNnc3RyICLQn9C+0YHQu9C1INGB0L7Qt9C00LDQvdC40Y8g0YHQtNC10LvQsNGC0Ywg0YLQtdC60YPRidC10LkiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxMzEKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgdHJhY2tpbmcgYnJhbmNoLiIKK21zZ3N0ciAi0KPQutCw0LbQuNGC0LUg0LLQtdGC0LLRjCDRgdC70LXQttC10L3QuNGPLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE0MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRyYWNraW5nIGJyYW5jaCAlcyBpcyBub3QgYSBicmFuY2ggaW4gdGhlIHJlbW90ZSByZXBvc2l0b3J5LiIKK21zZ3N0ciAi0JLQtdGC0LLRjCDRgdC70LXQttC10L3QuNGPICVzINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQstC10YLQstGM0Y4g0LLQviDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4LiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1MyBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODYKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgYnJhbmNoIG5hbWUuIgorbXNnc3RyICLQo9C60LDQttC40YLQtSDQvdCw0LfQstCw0L3QuNC1INCy0LXRgtCy0LguIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTY0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAi0J3QtdC00L7Qv9GD0YHRgtC40LzQvtC1INC90LDQt9Cy0LDQvdC40LUg0LLQtdGC0LLQuCAnJXMnLiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE1Cittc2dpZCAiRGVsZXRlIEJyYW5jaCIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDQstC10YLQstC4IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjAKK21zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDQu9C+0LrQsNC70YzQvdGD0Y4g0LLQtdGC0LLRjCIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM3Cittc2dpZCAiTG9jYWwgQnJhbmNoZXMiCittc2dzdHIgItCb0L7QutCw0LvRjNC90YvQtSDQstC10YLQstC4IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6NTIKK21zZ2lkICJEZWxldGUgT25seSBJZiBNZXJnZWQgSW50byIKK21zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0YLQvtC70YzQutC+INCyINGB0LvRg9GH0LDQtSwg0LXRgdC70Lgg0LHRi9C70L4g0YHQu9C40Y/QvdC40LUg0YEiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1NCBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjExOQorbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKK21zZ3N0ciAi0JLRgdC10LPQtNCwICjQvdC1INCy0YvQv9C+0LvQvdGP0YLRjCDQv9GA0L7QstC10YDQutGDINC90LAg0YHQu9C40Y/QvdC40LUpIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgorbXNnc3RyICLQktC10YLQstC4LCDQutC+0YLQvtGA0YvQtSDQvdC1INC/0L7Qu9C90L7RgdGC0YzRjiDRgdC70LjQstCw0Y7RgtGB0Y8g0YEgJXM6IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjE3Cittc2dpZCAiIgorIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiXG4iCisiRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKyLQktC+0YHRgdGC0LDQvdC+0LLQuNGC0Ywg0YPQtNCw0LvQtdC90L3Ri9C1INCy0LXRgtCy0Lgg0YHQu9C+0LbQvdC+LlxuIgorIlxuIgorItCf0YDQvtC00L7Qu9C20LjRgtGMPyIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjE0MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gZGVsZXRlIGJyYW5jaGVzOlxuIgorIiVzIgorbXNnc3RyICIiCisi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCDQstC10YLQstC4OlxuIgorIiVzIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjIyCittc2dpZCAiUmVuYW1lIEJyYW5jaCIKK21zZ3N0ciAi0J/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDQstC10YLQstC4IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjYKK21zZ2lkICJSZW5hbWUiCittc2dzdHIgItCf0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKK21zZ2lkICJCcmFuY2g6IgorbXNnc3RyICLQktC10YLQstGMOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM5Cittc2dpZCAiTmV3IE5hbWU6IgorbXNnc3RyICLQndC+0LLQvtC1INC90LDQt9Cy0LDQvdC40LU6IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6NzUKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCittc2dzdHIgItCj0LrQsNC20LjRgtC1INCy0LXRgtCy0Ywg0LTQu9GPINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTYgbGliL2NoZWNrb3V0X29wLnRjbDoyMDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCS0LXRgtCy0YwgJyVzJyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC40LzQtdC90L7QstCw0YLRjCAnJXMnLiAiCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICLQl9Cw0L/Rg9GB0LouLi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNgorbXNnaWQgIkZpbGUgQnJvd3NlciIKK21zZ3N0ciAi0J/RgNC+0YHQvNC+0YLRgCDRgdC/0LjRgdC60LAg0YTQsNC50LvQvtCyIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTI2IGxpYi9icm93c2VyLnRjbDoxNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nICVzLi4uIgorbXNnc3RyICLQl9Cw0LPRgNGD0LfQutCwICVzLi4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTg3Cittc2dpZCAiW1VwIFRvIFBhcmVudF0iCittc2dzdHIgIlvQndCwINGD0YDQvtCy0LXQvdGMINCy0YvRiNC1XSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI2NyBsaWIvYnJvd3Nlci50Y2w6MjczCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDRhNCw0LnQu9GLINCy0LXRgtCy0LgiCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDk3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjgKK21zZ2lkICJCcm93c2UiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0YwiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6ODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlcyBmcm9tICVzIgorbXNnc3RyICLQn9C+0LvRg9GH0LXQvdC40LUgJXMg0LjQtyAlcyAiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmF0YWw6IENhbm5vdCByZXNvbHZlICVzIgorbXNnc3RyICLQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsDog0L3QtdCy0L7Qt9C80L7QttC90L4g0YDQsNC30YDQtdGI0LjRgtGMICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQorIzogbGliL3NzaGtleS50Y2w6NTMKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAi0JfQsNC60YDRi9GC0YwiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICLQktC10YLQstGMICclcycg0L3QtSDRgdGD0YnQtdGB0YLQstGD0LXRgiAiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTk0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBzaW1wbGlmaWVkIGdpdC1wdWxsIGZvciAnJXMnLiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGB0L7Qt9C00LDQvdC40Y8g0YPQv9GA0L7RidGR0L3QvdC+0Lkg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IGdpdCBwdWxsINC00LvRjyAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuXG4iCisiXG4iCisiSXQgY2Fubm90IGZhc3QtZm9yd2FyZCB0byAlcy5cbiIKKyJBIG1lcmdlIGlzIHJlcXVpcmVkLiIKK21zZ3N0ciAiIgorItCS0LXRgtCy0YwgJyVzJyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuXG4iCisiXG4iCisi0J7QvdCwINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDQv9GA0L7QutGA0YPRh9C10L3QsChmYXN0LWZvcndhcmQpINC6ICVzLlxuIgorItCi0YDQtdCx0YPQtdGC0YHRjyDRgdC70LjRj9C90LjQtS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90LDRjyDRgdGC0YDQsNGC0LXQs9C40Y8g0YHQu9C40Y/QvdC40Y86ICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgJyVzJy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKK21zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCittc2dzdHIgItCg0LDQsdC+0YfQsNGPINC+0LHQu9Cw0YHRgtGMINC30LDQsdC70L7QutC40YDQvtCy0LDQvdCwINC00YDRg9Cz0LjQvCDQv9GA0L7RhtC10YHRgdC+0LwuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI4OQorbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhlIGN1cnJlbnQgYnJhbmNoIGNhbiBiZSBjaGFuZ2VkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisi0J/QvtGB0LvQtdC00L3QtdC1INC/0YDQvtGH0LjRgtCw0L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgtC10LrRg9GJ0LXQvNGDLlxuIgorIlxuIgorItChINC80L7QvNC10L3RgtCwINC/0L7RgdC70LXQtNC90LXQuSDQv9GA0L7QstC10YDQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LHRi9C7INC40LfQvNC10L3QtdC9INC00YDRg9Cz0L7QuSDQv9GA0L7Qs9GA0LDQvNC80L7QuSBHaXQuICIKKyLQndC10L7QsdGF0L7QtNC40LzQviDQv9C10YDQtdGH0LjRgtCw0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5LCDQv9GA0LXQttC00LUg0YfQtdC8INC40LfQvNC10L3Rj9GC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LLRjC5cbiIKKyJcbiIKKyLQrdGC0L4g0LHRg9C00LXRgiDRgdC00LXQu9Cw0L3QviDRgdC10LnRh9Cw0YEg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LguXG4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC40LUg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwINC40LcgJyVzJy4uLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNDYKK21zZ2lkICJmaWxlcyBjaGVja2VkIG91dCIKK21zZ3N0ciAi0YTQsNC50LvRiyDQuNC30LLQu9C10YfQtdC90YsiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKK21zZ3N0ciAi0J/RgNC10YDQstCw0L0g0L/QtdGA0LXRhdC+0LQg0L3QsCAnJXMnICjRgtGA0LXQsdGD0LXRgtGB0Y8g0YHQu9C40Y/QvdC40LUg0YHQvtC00LXRgNC20LDQvdC40Y8g0YTQsNC50LvQvtCyKSIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzcKK21zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKK21zZ3N0ciAi0KLRgNC10LHRg9C10YLRgdGPINGB0LvQuNGP0L3QuNC1INGB0L7QtNC10YDQttCw0L3QuNGPINGE0LDQudC70L7Qsi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3RheWluZyBvbiBicmFuY2ggJyVzJy4iCittc2dzdHIgItCS0LXRgtCy0YwgJyVzJyDQvtGB0YLQsNC10YLRgdGPINGC0LXQutGD0YnQtdC5LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorItCS0Ysg0L3QsNGF0L7QtNC40YLQtdGB0Ywg0L3QtSDQsiDQu9C+0LrQsNC70YzQvdC+0Lkg0LLQtdGC0LLQuC5cbiIKKyJcbiIKKyLQldGB0LvQuCDQstGLINGF0L7RgtC40YLQtSDRgdC90L7QstCwINCy0LXRgNC90YPRgtGM0YHRjyDQuiDQutCw0LrQvtC5LdC90LjQsdGD0LTRjCDQstC10YLQstC4LCDRgdC+0LfQtNCw0LnRgtC1INC10LUg0YHQtdC50YfQsNGBLCAiCisi0L3QsNGH0LjQvdCw0Y8g0YEgJ9Ci0LXQutGD0YnQtdCz0L4g0L7RgtGB0L7QtdC00LjQvdC10L3QvdC+0LPQviDRgdC+0YHRgtC+0Y/QvdC40Y8nLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MDMgbGliL2NoZWNrb3V0X29wLnRjbDo1MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaGVja2VkIG91dCAnJXMnLiIKK21zZ3N0ciAi0JLQtdGC0LLRjCAnJXMnINGB0LTQtdC70LDQvdCwINGC0LXQutGD0YnQtdC5LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorbXNnc3RyICLQodCx0YDQvtGBICclcycg0LIgJyVzJyDQv9GA0LjQstC10LTQtdGCINC6INC/0L7RgtC10YDQtSDRgdC70LXQtNGD0Y7RidC40YUg0YHQvtGF0YDQsNC90LXQvdC90YvRhSDRgdC+0YHRgtC+0Y/QvdC40Lk6ICIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NTcKK21zZ2lkICJSZWNvdmVyaW5nIGxvc3QgY29tbWl0cyBtYXkgbm90IGJlIGVhc3kuIgorbXNnc3RyICLQktC+0YHRgdGC0LDQvdC+0LLQuNGC0Ywg0L/QvtGC0LXRgNGP0L3QvdGL0LUg0YHQvtGF0YDQsNC90LXQvdC90YvQtSDRgdC+0YHRgtC+0Y/QvdC40Y8g0LHRg9C00LXRgiDRgdC70L7QttC90L4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICclcyc/IgorbXNnc3RyICLQodCx0YDQvtGB0LjRgtGMICclcyc/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NCBsaWIvdG9vbHNfZGxnLnRjbDozNDMKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgItCd0LDQs9C70Y/QtNC90L4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NjM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBzZXQgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiVGhpcyB3b3JraW5nIGRpcmVjdG9yeSBpcyBvbmx5IHBhcnRpYWxseSBzd2l0Y2hlZC4gIFdlIHN1Y2Nlc3NmdWxseSB1cGRhdGVkICIKKyJ5b3VyIGZpbGVzLCBidXQgZmFpbGVkIHRvIHVwZGF0ZSBhbiBpbnRlcm5hbCBHaXQgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIHNob3VsZCBub3QgaGF2ZSBvY2N1cnJlZC4gICVzIHdpbGwgbm93IGNsb3NlIGFuZCBnaXZlIHVwLiIKK21zZ3N0ciAiIgorItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LLRjC5cbiIKKyJcbiIKKyLQktCw0Ygg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0L7QsdC90L7QstC70LXQvSDRgtC+0LvRjNC60L4g0YfQsNGB0YLQuNGH0L3Qvi4g0JHRi9C70Lgg0L7QsdC90L7QstC70LXQvdGLINCy0YHQtSDRhNCw0LnQu9GLINC60YDQvtC80LUgIgorItGB0LvRg9C20LXQsdC90YvRhSDRhNCw0LnQu9C+0LIgR2l0LiBcbiIKKyJcbiIKKyLQrdGC0L7Qs9C+INC90LUg0LTQvtC70LbQvdC+INCx0YvQu9C+INC/0YDQvtC40LfQvtC50YLQuC4gJXMg0LfQsNCy0LXRgNGI0LDQtdGC0YHRjy4iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MzkKK21zZ2lkICJTZWxlY3QiCittc2dzdHIgItCS0YvQsdGA0LDRgtGMIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjUzCittc2dpZCAiRm9udCBGYW1pbHkiCittc2dzdHIgItCo0YDQuNGE0YIiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzQKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgItCg0LDQt9C80LXRgCDRiNGA0LjRhNGC0LAiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTEKK21zZ2lkICJGb250IEV4YW1wbGUiCittc2dzdHIgItCf0YDQuNC80LXRgCDRgtC10LrRgdGC0LAiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTAzCittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyLQrdGC0L4g0L/RgNC40LzQtdGAINGC0LXQutGB0YLQsC5cbiIKKyLQldGB0LvQuCDQktCw0Lwg0L3RgNCw0LLQuNGC0YHRjyDRjdGC0L7RgiDRgtC10LrRgdGCLCDRjdGC0L4g0LzQvtC20LXRgiDQsdGL0YLRjCDQktCw0Ygg0YjRgNC40YTRgi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MjgKK21zZ2lkICJHaXQgR3VpIgorbXNnc3RyICJHaXQgR3VpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzg2Cittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQvdC+0LLRi9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMKK21zZ2lkICJOZXcuLi4iCittc2dzdHIgItCd0L7QstGL0LkuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAwIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcxCittc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAi0KHQutC70L7QvdC40YDQvtCy0LDRgtGMINGB0YPRidC10YHRgtCy0YPRjtGJ0LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNgorbXNnaWQgIkNsb25lLi4uIgorbXNnc3RyICLQodC60LvQvtC90LjRgNC+0LLQsNGC0YwuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNgorbXNnaWQgIk9wZW4gRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAi0JLRi9Cx0YDQsNGC0Ywg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE5Cittc2dpZCAiT3Blbi4uLiIKK21zZ3N0ciAi0J7RgtC60YDRi9GC0YwuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTMyCittc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKK21zZ3N0ciAi0J3QtdC00LDQstC90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEzOAorbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgorbXNnc3RyICLQntGC0LrRgNGL0YLRjCDQv9C+0YHQu9C10LTQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMDYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTMKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSByZXBvc2l0b3J5ICVzOiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5ICVzOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTEKK21zZ2lkICJEaXJlY3Rvcnk6IgorbXNnc3RyICLQmtCw0YLQsNC70L7QszoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDIzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTUwCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTIKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAi0KDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLQmtCw0YLQsNC70L7QsyAnJXMnINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCk0LDQudC7ICclcycg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjYKK21zZ2lkICJDbG9uZSIKK21zZ3N0ciAi0KHQutC70L7QvdC40YDQvtCy0LDRgtGMIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OQorbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCittc2dzdHIgItCY0YHRhdC+0LTQvdC+0LUg0L/QvtC70L7QttC10L3QuNC1OiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTAKK21zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKK21zZ3N0ciAi0JrQsNGC0LDQu9C+0LMg0L3QsNC30L3QsNGH0LXQvdC40Y86IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwMgorbXNnaWQgIkNsb25lIFR5cGU6IgorbXNnc3RyICLQotC40L8g0LrQu9C+0L3QsDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA4Cittc2dpZCAiU3RhbmRhcmQgKEZhc3QsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorbXNnc3RyICLQodGC0LDQvdC00LDRgNGC0L3Ri9C5ICjQkdGL0YHRgtGA0YvQuSwg0L/QvtC70YPQuNC30LHRi9GC0L7Rh9C90YvQuSwgXCLQttC10YHRgtC60LjQtVwiINGB0YHRi9C70LrQuCkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTE0Cittc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgorbXNnc3RyICLQn9C+0LvQvdCw0Y8g0LrQvtC/0LjRjyAo0JzQtdC00LvQtdC90L3Ri9C5LCDRgdC+0LfQtNCw0LXRgiDRgNC10LfQtdGA0LLQvdGD0Y4g0LrQvtC/0LjRjikiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTIwCittc2dpZCAiU2hhcmVkIChGYXN0ZXN0LCBOb3QgUmVjb21tZW5kZWQsIE5vIEJhY2t1cCkiCittc2dzdHIgItCe0LHRidC40LkgKNCh0LDQvNGL0Lkg0LHRi9GB0YLRgNGL0LksINC90LUg0YDQtdC60L7QvNC10L3QtNGD0LXRgtGB0Y8sINCx0LXQtyDRgNC10LfQtdGA0LLQvdC+0Lkg0LrQvtC/0LjQuCkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTU2IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjAzCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDU4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAi0JrQsNGC0LDQu9C+0LMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvDogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTkyCittc2dpZCAiU3RhbmRhcmQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICLQodGC0LDQvdC00LDRgNGC0L3Ri9C5INC60LvQvtC9INCy0L7Qt9C80L7QttC10L0g0YLQvtC70YzQutC+INC00LvRjyDQu9C+0LrQsNC70YzQvdC+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1OTYKK21zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICLQntCx0YnQuNC5INC60LvQvtC9INCy0L7Qt9C80L7QttC10L0g0YLQvtC70YzQutC+INC00LvRjyDQu9C+0LrQsNC70YzQvdC+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCf0YPRgtGMICclcycg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIG9yaWdpbiIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyDRgdC60L7QvdGE0LjQs9GD0YDQuNGA0L7QstCw0YLRjCDQuNGB0YXQvtC00L3Ri9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgItCh0YfQuNGC0LDRjiDQvtCx0YrQtdC60YLRiyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDEKK21zZ2lkICJidWNrZXRzIgorbXNnc3RyICIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgorbXNnc3RyICLQndC1INC80L7Qs9GDINGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcwMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCittc2dzdHIgItCd0LXRh9C10LPQviDQutC70L7QvdC40YDQvtCy0LDRgtGMINGBICVzLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI5Cittc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgorbXNnc3RyICLQndC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDQvdCwINCy0LXRgtCy0YwgJ21hc3RlcicuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcxNgorbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCittc2dzdHIgIlwi0JbQtdGB0YLQutC40LUg0YHRgdGL0LvQutC4XCIg0L3QtdC00L7RgdGC0YPQv9C90YsuINCR0YPQtNC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC+INC60L7Qv9C40YDQvtCy0LDQvdC40LUuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0L7QstCw0L3QuNC1ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc1OQorbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNC90LjQtSBvYmplY3RzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MAorbXNnaWQgIktpQiIKK21zZ3N0ciAi0JrQkSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgorbXNnc3RyICLQndC1INC80L7Qs9GDINGB0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0L7QsdGK0LXQutGCOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTQKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgItCh0L7Qt9C00LDQvdC40LUg0YHRgdGL0LvQvtC6INC90LAgb2JqZWN0cyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3OTUKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICLQvtCx0YrQtdC60YLRiyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyBcItC20LXRgdGC0LrQviDRgdCy0Y/Qt9Cw0YLRjFwiINC+0LHRitC10LrRgjogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU4Cittc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorItCd0LUg0LzQvtCz0YMg0L/QvtC70YPRh9C40YLRjCDQstC10YLQstC4INC4INC+0LHRitC10LrRgtGLLiDQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPINC90LAg0LrQvtC90YHQvtC70LguIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg2OQorbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQv9C+0LvRg9GH0LjRgtGMINC80LXRgtC60LguINCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdCw0Y8g0LjQvdGE0L7RgNC80LDRhtC40Y8g0L3QsCDQutC+0L3RgdC+0LvQuC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkzCittc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQvtC/0YDQtdC00LXQu9C40YLRjCBIRUFELiDQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPINC90LAg0LrQvtC90YHQvtC70LguIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICLQndC1INC80L7Qs9GDINC+0YfQuNGB0YLQuNGC0YwgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA4Cittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0L7QstCw0L3QuNC1INC90LUg0YPQtNCw0LvQvtGB0YwuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxNQorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAi0J3QtSDQsdGL0LvQviDQv9C+0LvRg9GH0LXQvdC+INCy0LXRgtCy0Lgg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyDRgNCw0YHQv9C+0LfQvdCw0YLRjCAlcyDQutCw0Log0YHQvtGB0YLQvtGP0L3QuNC1LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MzgKK21zZ2lkICJDcmVhdGluZyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi0KHQvtC30LTQsNGOINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOSBsaWIvaW5kZXgudGNsOjY3IGxpYi9pbmRleC50Y2w6MTMwCisjOiBsaWIvaW5kZXgudGNsOjE5OAorbXNnaWQgImZpbGVzIgorbXNnc3RyICLRhNCw0LnQu9C+0LIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTY4Cittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQvdCw0YfQsNC70YzQvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1INGE0LDQudC70L7QsiDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDExCittc2dpZCAiT3BlbiIKK21zZ3N0ciAi0J7RgtC60YDRi9GC0YwiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyMQorbXNnaWQgIlJlcG9zaXRvcnk6IgorbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5OiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSAlczoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MworbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCittc2dzdHIgItCi0LXQutGD0YnQtdC1INC+0YLRgdC+0LXQtNC40L3QtdC90L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjYwCittc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCittc2dzdHIgItCS0YvRgNCw0LbQtdC90LjQtSDQtNC70Y8g0L7Qv9GA0LXQtNC10LvQtdC90LjRjyDQstC10YDRgdC40Lg6IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NzQKK21zZ2lkICJMb2NhbCBCcmFuY2giCittc2dzdHIgItCb0L7QutCw0LvRjNC90LDRjyDQstC10YLQstGMOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc5Cittc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICLQktC10YLQstGMINGB0LvQtdC20LXQvdC40Y8iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo4NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTM4Cittc2dpZCAiVGFnIgorbXNnc3RyICLQnNC10YLQutCwIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXZpc2lvbjogJXMiCittc2dzdHIgItCd0LXQstC10YDQvdCw0Y8g0LLQtdGA0YHQuNGPOiAlcyIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMzOAorbXNnaWQgIk5vIHJldmlzaW9uIHNlbGVjdGVkLiIKK21zZ3N0ciAi0JLQtdGA0YHQuNGPINC90LUg0YPQutCw0LfQsNC90LAuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQ2Cittc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCittc2dzdHIgItCf0YPRgdGC0L7QtSDQstGL0YDQsNC20LXQvdC40LUg0LTQu9GPINC+0L/RgNC10LTQtdC70LXQvdC40Y8g0LLQtdGA0YHQuNC4LiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjUzMQorbXNnaWQgIlVwZGF0ZWQiCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QviIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjU1OQorbXNnaWQgIlVSTCIKK21zZ3N0ciAi0KHRgdGL0LvQutCwIgorCisjOiBsaWIvY29tbWl0LnRjbDo5Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCisiXG4iCisiWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKKyJ0byBhbWVuZC5cbiIKK21zZ3N0ciAiIgorItCe0YLRgdGD0YLRgdGC0LLRg9C10YIg0YHQvtGB0YLQvtGP0L3QuNC1INC00LvRjyDQuNGB0L/RgNCw0LLQu9C10L3QuNGPLlxuIgorIlxuIgorItCS0Ysg0YHQvtC30LTQsNC10YLQtSDQv9C10YDQstC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1INCyINGA0LXQv9C+0LfQuNGC0L7RgNC40LgsINC30LTQtdGB0Ywg0LXRidC1INC90LXRh9C10LPQviDQuNGB0L/RgNCw0LLQu9GP0YLRjC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgKK21zZ2lkICIiCisiQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCisiXG4iCisiWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKKyJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgorImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCittc2dzdHIgIiIKKyLQndC10LLQvtC30LzQvtC20L3QviDQuNGB0L/RgNCw0LLQuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INCy0L4g0LLRgNC10LzRjyDQvtC/0LXRgNCw0YbQuNC4INGB0LvQuNGP0L3QuNGPLlxuIgorIlxuIgorItCi0LXQutGD0YnQtdC1INGB0LvQuNGP0L3QuNC1INC90LUg0LfQsNCy0LXRgNGI0LXQvdC+LiDQndC10LLQvtC30LzQvtC20L3QviDQuNGB0L/RgNCw0LLQuNGC0Ywg0L/RgNC10LTRi9C00YPRidC10LUg0YHQvtGF0YDQsNC90LXQvdC90L7QtSAiCisi0YHQvtGB0YLQvtGP0L3QuNC1LCDQvdC1INC/0YDQtdGA0YvQstCw0Y8g0Y3RgtGDINC+0L/QtdGA0LDRhtC40Y4uXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjQ4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0L/RgNC4INC30LDQs9GA0YPQt9C60LUg0LTQsNC90L3Ri9GFINC00LvRjyDQuNGB0L/RgNCw0LLQu9C10L3QuNGPINGB0L7RhdGA0LDQvdC10L3QvdC+0LPQviDRgdC+0YHRgtC+0Y/QvdC40Y86IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0L7Qu9GD0YfQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDQsNCy0YLQvtGA0YHRgtCy0LU6IgorCisjOiBsaWIvY29tbWl0LnRjbDo4MAorbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCittc2dzdHIgItCd0LXQstC10YDQvdGL0LkgR0lUX0NPTU1JVFRFUl9JREVOVDoiCisKKyM6IGxpYi9jb21taXQudGNsOjEyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIndhcm5pbmc6IFRjbCBkb2VzIG5vdCBzdXBwb3J0IGVuY29kaW5nICclcycuIgorbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiBUY2wg0L3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LrQvtC00LjRgNC+0LLQutGDICclcycuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNDkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisi0J/QvtGB0LvQtdC00L3QtdC1INC/0YDQvtGH0LjRgtCw0L3QvdC+0LUg0YHQvtGB0YLQvtGP0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgtC10LrRg9GJ0LXQvNGDLlxuIgorIlxuIgorItChINC80L7QvNC10L3RgtCwINC/0L7RgdC70LXQtNC90LXQuSDQv9GA0L7QstC10YDQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LHRi9C7INC40LfQvNC10L3QtdC9INC00YDRg9Cz0L7QuSDQv9GA0L7Qs9GA0LDQvNC80L7QuSBHaXQuICIKKyLQndC10L7QsdGF0L7QtNC40LzQviDQv9C10YDQtdGH0LjRgtCw0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5LCDQv9GA0LXQttC00LUg0YfQtdC8INC40LfQvNC10L3Rj9GC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LLRjC4gXG4iCisiXG4iCisi0K3RgtC+INCx0YPQtNC10YIg0YHQtNC10LvQsNC90L4g0YHQtdC50YfQsNGBINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4LlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKKyJiZWZvcmUgY29tbWl0dGluZy5cbiIKK21zZ3N0ciAiIgorItCd0LXQu9GM0LfRjyDRgdC+0YXRgNCw0L3QuNGC0Ywg0YTQsNC50LvRiyDRgSDQvdC10LfQsNCy0LXRgNGI0ZHQvdC90L7QuSDQvtC/0LXRgNCw0YbQuNC10Lkg0YHQu9C40Y/QvdC40Y8uXG4iCisiXG4iCisi0JTQu9GPINGE0LDQudC70LAgJXMg0LLQvtC30L3QuNC6INC60L7QvdGE0LvQuNC60YIg0YHQu9C40Y/QvdC40Y8uINCg0LDQt9GA0LXRiNC40YLQtSDQutC+0L3RhNC70LjQutGCINC4INC00L7QsdCw0LLRjNGC0LUg0LogIgorItC/0L7QtNCz0L7RgtC+0LLQu9C10L3QvdGL0Lwg0YTQsNC50LvQsNC8INC/0LXRgNC10LQg0YHQvtGF0YDQsNC90LXQvdC40LXQvC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorbXNnc3RyICIiCisi0J7QsdC90LDRgNGD0LbQtdC90L4g0L3QtdC40LfQstC10YHRgtC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUg0YTQsNC50LvQsCAlcy5cbiIKKyJcbiIKKyLQpNCw0LnQuyAlcyDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YHQvtGF0YDQsNC90LXQvSDQtNCw0L3QvdC+0Lkg0L/RgNC+0LPRgNCw0LzQvNC+0LkuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4OAorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorbXNnc3RyICIiCisi0J7RgtGB0YPRgtGB0YLQstGD0Y7RgiDQuNC30LzQtdC90LXQvdC40Y8g0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPLlxuIgorIlxuIgorItCf0L7QtNCz0L7RgtC+0LLRjNGC0LUg0YXQvtGC0Y8g0LHRiyDQvtC00LjQvSDRhNCw0LnQuyDQtNC+INGB0L7Qt9C00LDQvdC40Y8g0YHQvtGF0YDQsNC90LXQvdC90L7Qs9C+INGB0L7RgdGC0L7Rj9C90LjRjy5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjAzCittc2dpZCAiIgorIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgorIlxuIgorIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKKyItIFNlY29uZCBsaW5lOiBCbGFua1xuIgorIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKK21zZ3N0ciAiIgorItCd0LDQv9C40YjQuNGC0LUg0LrQvtC80LzQtdC90YLQsNGA0LjQuSDQuiDRgdC+0YXRgNCw0L3QtdC90L3QvtC80YMg0YHQvtGB0YLQvtGP0L3QuNGOLlxuIgorIlxuIgorItCg0LXQutC+0LzQtdC90LTRg9C10YLRgdGPINGB0LvQtdC00YPRjtGJ0LjQuSDRhNC+0YDQvNCw0YIg0LrQvtC80LzQtdC90YLQsNGA0LjRjzpcbiIKKyJcbiIKKyItINC/0LXRgNCy0LDRjyDRgdGC0YDQvtC60LA6INC60YDQsNGC0LrQvtC1INC+0L/QuNGB0LDQvdC40LUg0YHQtNC10LvQsNC90L3Ri9GFINC40LfQvNC10L3QtdC90LjQuS5cbiIKKyItINCy0YLQvtGA0LDRjyDRgdGC0YDQvtC60LAg0L/Rg9GB0YLQsNGPXG4iCisiLSDQvtGB0YLQsNCy0YjQuNC10YHRjyDRgdGC0YDQvtC60Lg6INC+0L/QuNGI0LjRgtC1LCDRh9GC0L4g0LTQsNGO0YIg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzQKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAi0JLRi9C30L7QsiDQv9GA0L7Qs9GA0LDQvNC80Ysg0L/QvtC00LTQtdGA0LbQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gcHJlLWNvbW1pdC4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjQ5Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCittc2dzdHIgItCh0L7RhdGA0LDQvdC10L3QuNC1INC/0YDQtdGA0LLQsNC90L4g0L/RgNC+0LPRgNCw0LzQvNC+0Lkg0L/QvtC00LTQtdGA0LbQutC4INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gcHJlLWNvbW1pdCIKKworIzogbGliL2NvbW1pdC50Y2w6MjcyCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgItCS0YvQt9C+0LIg0L/RgNC+0LPRgNCw0LzQvNGLINC/0L7QtNC00LXRgNC20LrQuCDRgNC10L/QvtC30LjRgtC+0YDQuNGPIGNvbW1pdC1tc2cuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI4NworbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBjb21taXQtbXNnIGhvb2suIgorbXNnc3RyICLQodC+0YXRgNCw0L3QtdC90LjQtSDQv9GA0LXRgNCy0LDQvdC+INC/0YDQvtCz0YDQsNC80LzQvtC5INC/0L7QtNC00LXRgNC20LrQuCDRgNC10L/QvtC30LjRgtC+0YDQuNGPIGNvbW1pdC1tc2ciCisKKyM6IGxpYi9jb21taXQudGNsOjMwMAorbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKK21zZ3N0ciAi0KHQvtGF0YDQsNC90LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5Li4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMTYKK21zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCB3cml0ZS10cmVlINC30LDQstC10YDRiNC40LvQsNGB0Ywg0YEg0L7RiNC40LHQutC+0Lk6IgorCisjOiBsaWIvY29tbWl0LnRjbDozMTcgbGliL2NvbW1pdC50Y2w6MzYxIGxpYi9jb21taXQudGNsOjM4MgorbXNnaWQgIkNvbW1pdCBmYWlsZWQuIgorbXNnc3RyICLQodC+0YXRgNCw0L3QuNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INC90LUg0YPQtNCw0LvQvtGB0YwuIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgorbXNnc3RyICLQodC+0YHRgtC+0Y/QvdC40LUgJXMg0LLRi9Cz0LvRj9C00LjRgiDQv9C+0LLRgNC10LbQtNC10L3QvdGL0LwiCisKKyM6IGxpYi9jb21taXQudGNsOjMzOQorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJObyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGJ5IHRoaXMgY29tbWl0IGFuZCBpdCB3YXMgbm90IGEgbWVyZ2UgY29tbWl0LlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorItCe0YLRgdGD0YLRgdGC0LLRg9GO0YIg0LjQt9C80LXQvdC10L3QuNGPINC00LvRjyDRgdC+0YXRgNCw0L3QtdC90LjRjy5cbiIKKyJcbiIKKyLQndC4INC+0LTQuNC9INGE0LDQudC7INC90LUg0LHRi9C7INC40LfQvNC10L3QtdC9INC4INC90LUg0LHRi9C70L4g0YHQu9C40Y/QvdC40Y8uXG4iCisiXG4iCisi0KHQtdC50YfQsNGBINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INC30LDQv9GD0YHRgtC40YLRgdGPINC/0LXRgNC10YfQuNGC0YvQstCw0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8uXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjM0NgorbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKK21zZ3N0ciAi0J7RgtGB0YPRgtGB0YLQstGD0Y7RgiDQuNC30LzQtdC90LXQvdC40Y8g0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzYwCittc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwIGNvbW1pdC10cmVlINC30LDQstC10YDRiNC40LvQsNGB0Ywg0YEg0L7RiNC40LHQutC+0Lk6IgorCisjOiBsaWIvY29tbWl0LnRjbDozODEKK21zZ2lkICJ1cGRhdGUtcmVmIGZhaWxlZDoiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCB1cGRhdGUtcmVmINC30LDQstC10YDRiNC40LvQsNGB0Ywg0YEg0L7RiNC40LHQutC+0Lk6IgorCisjOiBsaWIvY29tbWl0LnRjbDo0NjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCittc2dzdHIgItCh0L7Qt9C00LDQvdC+INGB0L7RgdGC0L7Rj9C90LjQtSAlczogJXMgIgorCisjOiBsaWIvY29uc29sZS50Y2w6NTkKK21zZ2lkICJXb3JraW5nLi4uIHBsZWFzZSB3YWl0Li4uIgorbXNnc3RyICLQkiDQv9GA0L7RhtC10YHRgdC1Li4uINC/0L7QttCw0LvRg9C50YHRgtCwLCDQttC00LjRgtC1Li4uIgorCisjOiBsaWIvY29uc29sZS50Y2w6MTg2Cittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAi0J/RgNC+0YbQtdGB0YEg0YPRgdC/0LXRiNC90L4g0LfQsNCy0LXRgNGI0LXQvSIKKworIzogbGliL2NvbnNvbGUudGNsOjIwMAorbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKK21zZ3N0ciAi0J7RiNC40LHQutCwOiDQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDQutC+0LzQsNC90LTRgyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0MworbXNnaWQgIk51bWJlciBvZiBsb29zZSBvYmplY3RzIgorbXNnc3RyICLQmtC+0LvQuNGH0LXRgdGC0LLQviDQvdC10YHQstGP0LfQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDQKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAi0J7QsdGK0LXQvCDQtNC40YHQutC+0LLQvtCz0L4g0L/RgNC+0YHRgtGA0LDQvdGB0YLQstCwLCDQt9Cw0L3Rj9GC0YvQuSDQvdC10YHQstGP0LfQsNC90L3Ri9C80Lgg0L7QsdGK0LXQutGC0LDQvNC4IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ1Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLQmtC+0LvQuNGH0LXRgdGC0LLQviDRg9C/0LDQutC+0LLQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDYKK21zZ2lkICJOdW1iZXIgb2YgcGFja3MiCittc2dzdHIgItCa0L7Qu9C40YfQtdGB0YLQstC+IHBhY2st0YTQsNC50LvQvtCyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ3Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLQntCx0YrQtdC8INC00LjRgdC60L7QstC+0LPQviDQv9GA0L7RgdGC0YDQsNC90YHRgtCy0LAsINC30LDQvdGP0YLRi9C5INGD0L/QsNC60L7QstCw0L3QvdGL0LzQuCDQvtCx0YrQtdC60YLQsNC80LgiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICLQndC10YHQstGP0LfQsNC90L3Ri9C1INC+0LHRitC10LrRgtGLLCDQutC+0YLQvtGA0YvQtSDQvNC+0LbQvdC+INGD0LTQsNC70LjRgtGMIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ5Cittc2dpZCAiR2FyYmFnZSBmaWxlcyIKK21zZ3N0ciAi0JzRg9GB0L7RgCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo3MgorbXNnaWQgIkNvbXByZXNzaW5nIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgItCh0LbQsNGC0LjQtSDQsdCw0LfRiyDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjgzCittc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0LHQsNC30Ysg0L7QsdGK0LXQutGC0L7QsiDQv9GA0Lgg0L/QvtC80L7RidC4IGZzY2siCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2UuXG4iCisiXG4iCisiQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCittc2dzdHIgIiIKKyLQrdGC0L7RgiDRgNC10L/QvtC30LjRgtC+0YDQuNC5INGB0LXQudGH0LDRgSDRgdC+0LTQtdGA0LbQuNGCINC/0YDQuNC80LXRgNC90L4gJWkg0YHQstC+0LHQvtC00L3Ri9GFINC+0LHRitC10LrRgtC+0LJcbiIKKyJcbiIKKyLQlNC70Y8g0LvRg9GH0YjQtdC5INC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuCDRgNC10LrQvtC80LXQvdC00YPQtdGC0YHRjyDRgdC20LDRgtGMINCx0LDQt9GDINC00LDQvdC90YvRhS5cbiIKKyJcbiIKKyLQodC20LDRgtGMINCx0LDQt9GDINC00LDQvdC90YvRhSDRgdC10LnRh9Cw0YE/IgorCisjOiBsaWIvZGF0ZS50Y2w6MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0LTQsNGC0LAg0LIg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuDogJXMiCisKKyM6IGxpYi9kaWZmLnRjbDo2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKKyJcbiIKKyJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCisidGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKKyJ0aGUgc2FtZSBzdGF0ZS4iCittc2dzdHIgIiIKKyLQmNC30LzQtdC90LXQvdC40Lkg0L3QtSDQvtCx0L3QsNGA0YPQttC10L3Qvi5cbiIKKyJcbiIKKyLQsiAlcyDQvtGC0YHRg9GC0YHRgtCy0YPRjtGCINC40LfQvNC10L3QtdC90LjRjy5cbiIKKyJcbiIKKyLQlNCw0YLQsCDQuNC30LzQtdC90LXQvdC40Y8g0YTQsNC50LvQsCDQsdGL0LvQsCDQvtCx0L3QvtCy0LvQtdC90LAg0LTRgNGD0LPQvtC5INC/0YDQvtCz0YDQsNC80LzQvtC5LCDQvdC+INGB0L7QtNC10YDQttC40LzQvtC1INGE0LDQudC70LAgIgorItC+0YHRgtCw0LvQvtGB0Ywg0L/RgNC10LbQvdC40LwuXG4iCisiXG4iCisi0KHQtdC50YfQsNGBINCx0YPQtNC10YIg0LfQsNC/0YPRidC10L3QviDQv9C10YDQtdGH0LjRgtGL0LLQsNC90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPLCDRh9GC0L7QsdGLINC90LDQudGC0Lgg0L/QvtC00L7QsdC90YvQtSDRhNCw0LnQu9GLLiIKKworIzogbGliL2RpZmYudGNsOjEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAi0JfQsNCz0YDRg9C30LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0LIgJXMuLi4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMjUKK21zZ2lkICIiCisiTE9DQUw6IGRlbGV0ZWRcbiIKKyJSRU1PVEU6XG4iCittc2dzdHIgIiIKKyLQm9Ce0JrQkNCb0KzQndCeOiDRg9C00LDQu9GR0L1cbiIKKyLQktCd0JXQqNCd0JjQmTpcbiIKKworIzogbGliL2RpZmYudGNsOjEzMAorbXNnaWQgIiIKKyJSRU1PVEU6IGRlbGV0ZWRcbiIKKyJMT0NBTDpcbiIKK21zZ3N0ciAiIgorItCS0J3QldCo0J3QmNCZOiDRg9C00LDQu9GR0L1cbiIKKyLQm9Ce0JrQkNCb0KzQndCeOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTM3Cittc2dpZCAiTE9DQUw6XG4iCittc2dzdHIgItCb0J7QmtCQ0JvQrNCd0J46XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxNDAKK21zZ2lkICJSRU1PVEU6XG4iCittc2dzdHIgItCS0J3QldCo0J3QmNCZOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjAyIGxpYi9kaWZmLnRjbDozMTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSAlcyIKK21zZ3N0ciAi0J3QtSDQvNC+0LPRgyDQv9C+0LrQsNC30LDRgtGMICVzIgorCisjOiBsaWIvZGlmZi50Y2w6MjAzCittc2dpZCAiRXJyb3IgbG9hZGluZyBmaWxlOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQs9GA0YPQt9C60Lgg0YTQsNC50LvQsDoiCisKKyM6IGxpYi9kaWZmLnRjbDoyMTAKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSAoc3VicHJvamVjdCkiCittc2dzdHIgItCg0LXQv9C+0LfQuNGC0L7RgNC40LkgR2l0ICjQv9C+0LTQv9GA0L7QtdC60YIpIgorCisjOiBsaWIvZGlmZi50Y2w6MjIyCittc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgorbXNnc3RyICIqINCU0LLQvtC40YfQvdGL0Lkg0YTQsNC50LsgKNGB0L7QtNC10YDQttC40LzQvtC1INC90LUg0L/QvtC60LDQt9Cw0L3QvikiCisKKyM6IGxpYi9kaWZmLnRjbDoyMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiKiBVbnRyYWNrZWQgZmlsZSBpcyAlZCBieXRlcy5cbiIKKyIqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy5cbiIKK21zZ3N0ciAiIgorIiog0KDQsNC30LzQtdGAINC90LXQv9C+0LTQs9C+0YLQvtCy0LvQtdC90L3QvtCz0L4g0YTQsNC50LvQsCAlZCDQsdCw0LnRgi5cbiIKKyIqINCf0L7QutCw0LfQsNC90L4g0L/QtdGA0LLRi9GFICVkINCx0LDQudGCLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgorIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKK21zZ3N0ciAiIgorIlxuIgorIiog0J3QtdC/0L7QtNCz0L7RgtC+0LLQu9C10L3QvdGL0Lkg0YTQsNC50Lsg0L7QsdGA0LXQt9Cw0L06ICVzLlxuIgorIiog0KfRgtC+0LHRiyDRg9Cy0LjQtNC10YLRjCDQstC10YHRjCDRhNCw0LnQuywg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQv9GA0L7Qs9GA0LDQvNC80YMt0YDQtdC00LDQutGC0L7RgC5cbiIKKworIzogbGliL2RpZmYudGNsOjQ4MgorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGh1bmsuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC40YHQutC70Y7Rh9C40YLRjCDQstGL0LHRgNCw0L3QvdGD0Y4g0YfQsNGB0YLRjC4iCisKKyM6IGxpYi9kaWZmLnRjbDo0ODkKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC00LPQvtGC0L7QstC40YLRjCDQuiDRgdC+0YXRgNCw0L3QtdC90LjRjiDQstGL0LHRgNCw0L3QvdGD0Y4g0YfQsNGB0YLRjC4iCisKKyM6IGxpYi9kaWZmLnRjbDo1NjgKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNGB0LrQu9GO0YfQuNGC0Ywg0LLRi9Cx0YDQsNC90L3Rg9GOINGB0YLRgNC+0LrRgy4iCisKKyM6IGxpYi9kaWZmLnRjbDo1NzYKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC00LPQvtGC0L7QstC40YLRjCDQuiDRgdC+0YXRgNCw0L3QtdC90LjRjiDQstGL0LHRgNCw0L3QvdGD0Y4g0YHRgtGA0L7QutGDLiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDMKK21zZ2lkICJEZWZhdWx0IgorbXNnc3RyICLQn9C+INGD0LzQvtC70YfQsNC90LjRjiIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gKCVzKSIKK21zZ3N0ciAi0KHQuNGB0YLQtdC80L3QsNGPICglcykiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Cittc2dpZCAiT3RoZXIiCittc2dzdHIgItCU0YDRg9Cz0LDRjyIKKworIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNAorbXNnaWQgImVycm9yIgorbXNnc3RyICLQvtGI0LjQsdC60LAiCisKKyM6IGxpYi9lcnJvci50Y2w6MzYKK21zZ2lkICJ3YXJuaW5nIgorbXNnc3RyICLQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1IgorCisjOiBsaWIvZXJyb3IudGNsOjk0Cittc2dpZCAiWW91IG11c3QgY29ycmVjdCB0aGUgYWJvdmUgZXJyb3JzIGJlZm9yZSBjb21taXR0aW5nLiIKK21zZ3N0ciAi0J/RgNC10LbQtNC1INGH0LXQvCDRgdC+0YXRgNCw0L3QuNGC0YwsINC40YHQv9GA0LDQstGM0YLQtSDQstGL0YjQtdGD0LrQsNC30LDQvdC90YvQtSDQvtGI0LjQsdC60LguIgorCisjOiBsaWIvaW5kZXgudGNsOjYKK21zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30LHQu9C+0LrQuNGA0L7QstCw0YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGxpYi9pbmRleC50Y2w6MTUKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCyINC40L3QtNC10LrRgdC1IgorCisjOiBsaWIvaW5kZXgudGNsOjE3Cittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIiIKKyLQndC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0LjQvdC00LXQutGBIEdpdC4g0KHQvtGB0YLQvtGP0L3QuNC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0LHRg9C00LXRgiDQv9C10YDQtdGH0LjRgtCw0L3QviAiCisi0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LguIgorCisjOiBsaWIvaW5kZXgudGNsOjI4Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgItCf0YDQvtC00L7Qu9C20LjRgtGMIgorCisjOiBsaWIvaW5kZXgudGNsOjMxCittc2dpZCAiVW5sb2NrIEluZGV4IgorbXNnc3RyICLQoNCw0LfQsdC70L7QutC40YDQvtCy0LDRgtGMINC40L3QtNC10LrRgSIKKworIzogbGliL2luZGV4LnRjbDoyODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbnN0YWdpbmcgJXMgZnJvbSBjb21taXQiCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUgJXMg0LjQtyDQv9C+0LTQs9C+0YLQvtCy0LvQtdC90L3QvtCz0L4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzI4Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAi0J/QvtC00LPQvtGC0L7QstC70LXQvdC+INC00LvRjyDRgdC+0YXRgNCw0L3QtdC90LjRjyIKKworIzogbGliL2luZGV4LnRjbDozNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgItCU0L7QsdCw0LLQu9C10L3QuNC1ICVzLi4uIgorCisjOiBsaWIvaW5kZXgudGNsOjM5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIGZpbGUgJXM/IgorbXNnc3RyICLQntGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiDRhNCw0LnQu9C1ICVzPyIKKworIzogbGliL2luZGV4LnRjbDo0MDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCittc2dzdHIgItCe0YLQvNC10L3QuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyICVpINGE0LDQudC70LUoLdCw0YUpPyIKKworIzogbGliL2luZGV4LnRjbDo0MDgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyLQm9GO0LHRi9C1INC40LfQvNC10L3QtdC90LjRjywg0L3QtSDQv9C+0LTQs9C+0YLQvtCy0LvQtdC90L3Ri9C1INC6INGB0L7RhdGA0LDQvdC10L3QuNGOLCDQsdGD0LTRg9GCINC/0L7RgtC10YDRj9C90Ysg0L/RgNC4INC00LDQvdC90L7QuSAiCisi0L7Qv9C10YDQsNGG0LjQuC4iCisKKyM6IGxpYi9pbmRleC50Y2w6NDExCittc2dpZCAiRG8gTm90aGluZyIKK21zZ3N0ciAi0J3QuNGH0LXQs9C+INC90LUg0LTQtdC70LDRgtGMIgorCisjOiBsaWIvaW5kZXgudGNsOjQyOQorbXNnaWQgIlJldmVydGluZyBzZWxlY3RlZCBmaWxlcyIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40Lkg0LIg0LLRi9Cx0YDQsNC90L3Ri9GFINGE0LDQudC70LDRhSIKKworIzogbGliL2luZGV4LnRjbDo0MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgJXMiCittc2dzdHIgItCe0YLQvNC10L3QsCDQuNC30LzQtdC90LXQvdC40Lkg0LIgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMKK21zZ2lkICIiCisiQ2Fubm90IG1lcmdlIHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYW55IHR5cGUgb2YgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyLQndC10LLQvtC30LzQvtC20L3QviDQstGL0L/QvtC70L3QuNGC0Ywg0YHQu9C40Y/QvdC40LUg0LLQviDQstGA0LXQvNGPINC40YHQv9GA0LDQstC70LXQvdC40Y8uXG4iCisiXG4iCisi0JfQsNCy0LXRgNGI0LjRgtC1INC40YHQv9GA0LDQstC70LXQvdC40LUg0LTQsNC90L3QvtCz0L4g0YHQvtGB0YLQvtGP0L3QuNGPINC/0LXRgNC10LQg0LLRi9C/0L7Qu9C90LXQvdC40LXQvCDQvtC/0LXRgNCw0YbQuNC4INGB0LvQuNGP0L3QuNGPLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyLQn9C+0YHQu9C10LTQvdC10LUg0L/RgNC+0YfQuNGC0LDQvdC90L7QtSDRgdC+0YHRgtC+0Y/QvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCINGC0LXQutGD0YnQtdC80YMuXG4iCisiXG4iCisi0KEg0LzQvtC80LXQvdGC0LAg0L/QvtGB0LvQtdC00L3QtdC5INC/0YDQvtCy0LXRgNC60Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQsdGL0Lsg0LjQt9C80LXQvdC10L0g0LTRgNGD0LPQvtC5INC/0YDQvtCz0YDQsNC80LzQvtC5IEdpdC4gIgorItCd0LXQvtCx0YXQvtC00LjQvNC+INC/0LXRgNC10YfQuNGC0LDRgtGMINGA0LXQv9C+0LfQuNGC0L7RgNC40LksINC/0YDQtdC20LTQtSDRh9C10Lwg0LjQt9C80LXQvdGP0YLRjCDRgtC10LrRg9GJ0YPRjiDQstC10YLQstGMLlxuIgorIlxuIgorItCt0YLQviDQsdGD0LTQtdGCINGB0LTQtdC70LDQvdC+INGB0LXQudGH0LDRgSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuC5cbiIKKworIzogbGliL21lcmdlLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy5cbiIKKyJcbiIKKyJZb3UgbXVzdCByZXNvbHZlIHRoZW0sIHN0YWdlIHRoZSBmaWxlLCBhbmQgY29tbWl0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50ICIKKyJtZXJnZS4gIE9ubHkgdGhlbiBjYW4geW91IGJlZ2luIGFub3RoZXIgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyLQn9GA0LXQtNGL0LTRg9GJ0LXQtSDRgdC70LjRj9C90LjQtSDQvdC1INC30LDQstC10YDRiNC10L3QviDQuNC3LdC30LAg0LrQvtC90YTQu9C40LrRgtCwLlxuIgorIlxuIgorItCU0LvRjyDRhNCw0LnQu9CwICVzINCy0L7Qt9C90LjQuiDQutC+0L3RhNC70LjQutGCINGB0LvQuNGP0L3QuNGPLlxuIgorIlxuIgorItCg0LDQt9GA0LXRiNC40YLQtSDQutC+0L3RhNC70LjQutGCLCDQv9C+0LTQs9C+0YLQvtCy0YzRgtC1INGE0LDQudC7INC4INGB0L7RhdGA0LDQvdC40YLQtS4g0KLQvtC70YzQutC+INC/0L7RgdC70LUg0Y3RgtC+0LPQviDQvNC+0LbQvdC+ICIKKyLQvdCw0YfQsNGC0Ywg0YHQu9C10LTRg9GO0YnQtdC1INGB0LvQuNGP0L3QuNC1LlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoYW5nZS5cbiIKKyJcbiIKKyJGaWxlICVzIGlzIG1vZGlmaWVkLlxuIgorIlxuIgorIllvdSBzaG91bGQgY29tcGxldGUgdGhlIGN1cnJlbnQgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhIG1lcmdlLiAgRG9pbmcgc28gIgorIndpbGwgaGVscCB5b3UgYWJvcnQgYSBmYWlsZWQgbWVyZ2UsIHNob3VsZCB0aGUgbmVlZCBhcmlzZS5cbiIKK21zZ3N0ciAiIgorItCY0LfQvNC10L3QtdC90LjRjyDQvdC1INGB0L7RhdGA0LDQvdC10L3Riy5cbiIKKyJcbiIKKyLQpNCw0LnQuyAlcyDQuNC30LzQtdC90LXQvS5cbiIKKyJcbiIKKyLQn9C+0LTQs9C+0YLQvtCy0YzRgtC1INC4INGB0L7RhdGA0LDQvdC40YLQtSDQuNC30LzQtdC90LXQvdC40Y8g0L/QtdGA0LXQtCDQvdCw0YfQsNC70L7QvCDRgdC70LjRj9C90LjRjy4g0JIg0YHQu9GD0YfQsNC1ICIKKyLQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLQuCDRjdGC0L4g0L/QvtC30LLQvtC70LjRgiDQv9GA0LXRgNCy0LDRgtGMINC+0L/QtdGA0LDRhtC40Y4g0YHQu9C40Y/QvdC40Y8uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzINC40LcgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCittc2dzdHIgItCh0LvQuNGP0L3QuNC1ICVzINC4ICVzLi4uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMQorbXNnaWQgIk1lcmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIgorbXNnc3RyICLQodC70LjRj9C90LjQtSDRg9GB0L/QtdGI0L3QviDQt9Cw0LLQtdGA0YjQtdC90L4uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzMworbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQstC10YDRiNC40YLRjCDRgdC70LjRj9C90LjQtS4g0KLRgNC10LHRg9C10YLRgdGPINGA0LDQt9GA0LXRiNC10L3QuNC1INC60L7QvdGE0LvQuNC60YLQsC4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTU4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2UgSW50byAlcyIKK21zZ3N0ciAi0KHQu9C40Y/QvdC40LUg0YEgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTc3Cittc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCittc2dzdHIgItCS0LXRgNGB0LjRjywg0YEg0LrQvtGC0L7RgNC+0Lkg0L/RgNC+0LLQtdGB0YLQuCDRgdC70LjRj9C90LjQtSIKKworIzogbGliL21lcmdlLnRjbDoyMTIKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0YDQtdGA0LLQsNGC0Ywg0LjRgdC/0YDQsNCy0LvQtdC90LjQtS5cbiIKKyJcbiIKKyLQl9Cw0LLQtdGA0YjQuNGC0LUg0YLQtdC60YPRidC10LUg0LjRgdC/0YDQsNCy0LvQtdC90LjQtSDRgdC+0YXRgNCw0L3QtdC90L3QvtCz0L4g0YHQvtGB0YLQvtGP0L3QuNGPLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyMgorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorItCf0YDQtdGA0LLQsNGC0Ywg0L7Qv9C10YDQsNGG0LjRjiDRgdC70LjRj9C90LjRjz9cbiIKKyJcbiIKKyLQn9GA0LXRgNGL0LLQsNC90LjQtSDRjdGC0L7QuSDQvtC/0LXRgNCw0YbQuNC4INC/0YDQuNCy0LXQtNC10YIg0Log0L/QvtGC0LXRgNC1ICrQktCh0JXQpSog0L3QtdGB0L7RhdGA0LDQvdC10L3QvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5LlxuIgorIlxuIgorItCf0YDQvtC00L7Qu9C20LjRgtGMPyIKKworIzogbGliL21lcmdlLnRjbDoyMjgKK21zZ2lkICIiCisiUmVzZXQgY2hhbmdlcz9cbiIKKyJcbiIKKyJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCittc2dzdHIgIiIKKyLQn9GA0LXRgNCy0LDRgtGMINC+0L/QtdGA0LDRhtC40Y4g0YHQu9C40Y/QvdC40Y8/XG4iCisiXG4iCisi0J/RgNC10YDRi9Cy0LDQvdC40LUg0Y3RgtC+0Lkg0L7Qv9C10YDQsNGG0LjQuCDQv9GA0LjQstC10LTQtdGCINC6INC/0L7RgtC10YDQtSAq0JLQodCV0KUqINC90LXRgdC+0YXRgNCw0L3QtdC90L3Ri9GFINC40LfQvNC10L3QtdC90LjQuS5cbiIKKyJcbiIKKyLQn9GA0L7QtNC+0LvQttC40YLRjD8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiQWJvcnRpbmciCittc2dzdHIgItCf0YDQtdGA0YvQstCw0Y4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM5Cittc2dpZCAiZmlsZXMgcmVzZXQiCittc2dzdHIgItC40LfQvNC10L3QtdC90LjRjyDQsiDRhNCw0LnQu9Cw0YUg0L7RgtC80LXQvdC10L3RiyIKKworIzogbGliL21lcmdlLnRjbDoyNjcKK21zZ2lkICJBYm9ydCBmYWlsZWQuIgorbXNnc3RyICLQn9GA0LXRgNCy0LDRgtGMINC90LUg0YPQtNCw0LvQvtGB0YwuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI2OQorbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKK21zZ3N0ciAi0J/RgNC10YDQstCw0L3Qvi4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjgKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBiYXNlIHZlcnNpb24/IgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LHQsNC30L7QstGD0Y4g0LLQtdGA0YHQuNGOINC00LvRjyDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0LA/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo5Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDQstC10YDRgdC40Y4g0Y3RgtC+0Lkg0LLQtdGC0LLQuCDQtNC70Y8g0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtCwPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTAKK21zZ2lkICJGb3JjZSByZXNvbHV0aW9uIHRvIHRoZSBvdGhlciBicmFuY2g/IgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LLQtdGA0YHQuNGOINC00YDRg9Cz0L7QuSDQstC10YLQstC4INC00LvRjyDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0LA/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlIHRoYXQgdGhlIGRpZmYgc2hvd3Mgb25seSBjb25mbGljdGluZyBjaGFuZ2VzLlxuIgorIlxuIgorIiVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG4iCisiXG4iCisiVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVuZG9uZSBvbmx5IGJ5IHJlc3RhcnRpbmcgdGhlIG1lcmdlLiIKK21zZ3N0ciAiIgorItCS0L3QuNC80LDQvdC40LUhINCh0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L/QvtC60LDQt9GL0LLQsNC10YIg0YLQvtC70YzQutC+INC60L7QvdGE0LvQuNC60YLRg9GO0YnQuNC1INC+0YLQu9C40YfQuNGPLlxuIgorIlxuIgorIiVzINCx0YPQtNC10YIg0L/QtdGA0LXQv9C40YHQsNC9LlxuIgorIlxuIgorItCt0YLQviDQtNC10LnRgdGC0LLQuNC1INC80L7QttC90L4g0L7RgtC80LXQvdC40YLRjCDRgtC+0LvRjNC60L4g0L/QtdGA0LXQt9Cw0L/Rg9GB0LrQvtC8INC+0L/QtdGA0LDRhtC40Lgg0YHQu9C40Y/QvdC40Y8uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorbXNnc3RyICIiCisi0KTQsNC50LsgJXMsINC/0L7RhdC+0LbQtSwg0YHQvtC00LXRgNC20LjRgiDQvdC10L7QsdGA0LDQsdC+0YLQsNC90L3Ri9C1INC60L7QvdGE0LvQuNC60YLRiy4g0J/RgNC+0LTQvtC70LbQuNGC0Ywg0L/QvtC00LPQvtGC0L7QstC60YMg0LogIgorItGB0L7RhdGA0LDQvdC10L3QuNGOPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6NjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgcmVzb2x1dGlvbiBmb3IgJXMiCittc2dzdHIgItCU0L7QsdCw0LLQu9GP0Y4g0YDQtdC30YPQu9GM0YLQsNGCINGA0LDQt9GA0LXRiNC10L3QuNGPINC00LvRjyAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQxCittc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorbXNnc3RyICIiCisi0J/RgNC+0LPRgNCw0LzQvNCwINGB0LvQuNGP0L3QuNGPINC90LUg0L7QsdGA0LDQsdCw0YLRi9Cy0LDQtdGCINC60L7QvdGE0LvQuNC60YLRiyDRgSDRg9C00LDQu9C10L3QuNC10Lwg0LjQu9C4INGD0YfQsNGB0YLQuNC10Lwg0YHRgdGL0LvQvtC6IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKK21zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQmtC+0L3RhNC70LjQutGC0YPRjtGJ0LjQuSDRhNCw0LnQuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKK21zZ3N0ciAiJyVzJyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0L/RgNC+0LPRgNCw0LzQvNC+0Lkg0YHQu9C40Y/QvdC40Y8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI2OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIG1lcmdlIHRvb2wgJyVzJyIKK21zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90LDRjyDQv9GA0L7Qs9GA0LDQvNC80LAg0YHQu9C40Y/QvdC40Y8gJyVzJyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzAzCittc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCDRgdC70LjRj9C90LjRjyDRg9C20LUg0YDQsNCx0L7RgtCw0LXRgi4g0J/RgNC10YDQstCw0YLRjD8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgorIiVzIgorbXNnc3RyICIiCisi0J7RiNC40LHQutCwINC/0L7Qu9GD0YfQtdC90LjRjyDQstC10YDRgdC40Lk6XG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM0MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyLQntGI0LjQsdC60LAg0LfQsNC/0YPRgdC60LAg0L/RgNC+0LPRgNCw0LzQvNGLINGB0LvQuNGP0L3QuNGPOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNDcKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgItCX0LDQv9GD0YHQuiDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHQu9C40Y/QvdC40Y8uLi4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM3NSBsaWIvbWVyZ2V0b29sLnRjbDozODMKK21zZ2lkICJNZXJnZSB0b29sIGZhaWxlZC4iCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHQu9C40Y/QvdC40Y8uIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciCittc2dzdHIgItCe0YjQuNCx0LrQsCDQsiDQs9C70L7QsdCw0LvRjNC90L7QuSDRg9GB0YLQsNC90L7QstC60LUg0LrQvtC00LjRgNC+0LLQutC4ICclcyciCisKKyM6IGxpYi9vcHRpb24udGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCByZXBvIGVuY29kaW5nICclcyciCittc2dzdHIgItCd0LXQstC10YDQvdCw0Y8g0LrQvtC00LjRgNC+0LLQutCwINGA0LXQv9C+0LfQuNGC0L7RgNC40Y86ICclcyciCisKKyM6IGxpYi9vcHRpb24udGNsOjExNworbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgItCS0L7RgdGB0YLQsNC90L7QstC40YLRjCDQvdCw0YHRgtGA0L7QudC60Lgg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4iCisKKyM6IGxpYi9vcHRpb24udGNsOjEyMQorbXNnaWQgIlNhdmUiCittc2dzdHIgItCh0L7RhdGA0LDQvdC40YLRjCIKKworIzogbGliL29wdGlvbi50Y2w6MTMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgUmVwb3NpdG9yeSIKK21zZ3N0ciAi0JTQu9GPINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gJXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMgorbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCittc2dzdHIgItCe0LHRidC40LUgKNC00LvRjyDQstGB0LXRhSDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzgKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgItCY0LzRjyDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8iCisKKyM6IGxpYi9vcHRpb24udGNsOjEzOQorbXNnaWQgIkVtYWlsIEFkZHJlc3MiCittc2dzdHIgItCQ0LTRgNC10YEg0Y3Qu9C10LrRgtGA0L7QvdC90L7QuSDQv9C+0YfRgtGLIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDEKK21zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKK21zZ3N0ciAi0KHRg9C80LzQsNGA0L3Ri9C5INC60L7QvNC80LXQvdGC0LDRgNC40Lkg0L/RgNC4INGB0LvQuNGP0L3QuNC4IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDIKK21zZ2lkICJNZXJnZSBWZXJib3NpdHkiCittc2dzdHIgItCj0YDQvtCy0LXQvdGMINC00LXRgtCw0LvRjNC90L7RgdGC0Lgg0YHQvtC+0LHRidC10L3QuNC5INC/0YDQuCDRgdC70LjRj9C90LjQuCIKKworIzogbGliL29wdGlvbi50Y2w6MTQzCittc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQvtGC0YfQtdGCINC+0LEg0LjQt9C80LXQvdC10L3QuNGP0YUg0L/QvtGB0LvQtSDRgdC70LjRj9C90LjRjyIKKworIzogbGliL29wdGlvbi50Y2w6MTQ0Cittc2dpZCAiVXNlIE1lcmdlIFRvb2wiCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDQtNC70Y8g0YHQu9C40Y/QvdC40Y8g0L/RgNC+0LPRgNCw0LzQvNGDIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDYKK21zZ2lkICJUcnVzdCBGaWxlIE1vZGlmaWNhdGlvbiBUaW1lc3RhbXBzIgorbXNnc3RyICLQlNC+0LLQtdGA0Y/RgtGMINCy0YDQtdC80LXQvdC4INC80L7QtNC40YTQuNC60LDRhtC40Lgg0YTQsNC50LvQsCIKKworIzogbGliL29wdGlvbi50Y2w6MTQ3Cittc2dpZCAiUHJ1bmUgVHJhY2tpbmcgQnJhbmNoZXMgRHVyaW5nIEZldGNoIgorbXNnc3RyICLQp9C40YHRgtC60LAg0LLQtdGC0LLQtdC5INGB0LvQtdC20LXQvdC40Y8g0L/RgNC4INC/0L7Qu9GD0YfQtdC90LjQuCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgorbXNnc3RyICLQmNC80Y8g0L3QvtCy0L7QuSDQstC10YLQstC4INCy0LfRj9GC0Ywg0LjQtyDQuNC80LXQvSDQstC10YLQstC10Lkg0YHQu9C10LbQtdC90LjRjyIKKworIzogbGliL29wdGlvbi50Y2w6MTQ5Cittc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCittc2dzdHIgItCf0L7QuNGB0Log0LrQvtC/0LjQuSDRgtC+0LvRjNC60L4g0LIg0LjQt9C80LXQvdGR0L3QvdGL0YUg0YTQsNC50LvQsNGFIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAi0JzQuNC90LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgdC40LzQstC+0LvQvtCyINC00LvRjyDQv9C+0LjRgdC60LAg0LrQvtC/0LjQuSIKKworIzogbGliL29wdGlvbi50Y2w6MTUxCittc2dpZCAiQmxhbWUgSGlzdG9yeSBDb250ZXh0IFJhZGl1cyAoZGF5cykiCittc2dzdHIgItCg0LDQtNC40YPRgSDQuNGB0YLQvtGA0LjRh9C10YHQutC+0LPQviDQutC+0L3RgtC10LrRgdGC0LAgKNCyINC00L3Rj9GFKSIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAi0KfQuNGB0LvQviDRgdGC0YDQvtC6INCyINC60L7QvdGC0LXQutGB0YLQtSBkaWZmIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTMKK21zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgorbXNnc3RyICLQqNC40YDQuNC90LAg0YLQtdC60YHRgtCwINC60L7QvNC80LXQvdGC0LDRgNC40Y8iCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NAorbXNnaWQgIk5ldyBCcmFuY2ggTmFtZSBUZW1wbGF0ZSIKK21zZ3N0ciAi0KjQsNCx0LvQvtC9INC00LvRjyDQuNC80LXQvdC4INC90L7QstC+0Lkg0LLQtdGC0LLQuCIKKworIzogbGliL29wdGlvbi50Y2w6MTU1Cittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICLQmtC+0LTQuNGA0L7QstC60LAg0YHQvtC00LXRgNC20LDQvdC40Y8g0YTQsNC50LvQsCDQv9C+INGD0LzQvtC70YfQsNC90LjRjiIKKworIzogbGliL29wdGlvbi50Y2w6MjAzCittc2dpZCAiQ2hhbmdlIgorbXNnc3RyICLQmNC30LzQtdC90LjRgtGMIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMzAKK21zZ2lkICJTcGVsbGluZyBEaWN0aW9uYXJ5OiIKK21zZ3N0ciAi0KHQu9C+0LLQsNGA0Ywg0LTQu9GPINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPOiIKKworIzogbGliL29wdGlvbi50Y2w6MjU0Cittc2dpZCAiQ2hhbmdlIEZvbnQiCittc2dzdHIgItCY0LfQvNC10L3QuNGC0YwiCisKKyM6IGxpYi9vcHRpb24udGNsOjI1OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNob29zZSAlcyIKK21zZ3N0ciAi0JLRi9Cx0LXRgNC40YLQtSAlcyIKKworIyBjYXJib24gY29weQorIzogbGliL29wdGlvbi50Y2w6MjY0Cittc2dpZCAicHQuIgorbXNnc3RyICJwdC4iCisKKyM6IGxpYi9vcHRpb24udGNsOjI3OAorbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LgiCisKKyM6IGxpYi9vcHRpb24udGNsOjMxNAorbXNnaWQgIkZhaWxlZCB0byBjb21wbGV0ZWx5IHNhdmUgb3B0aW9uczoiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70L3QvtGB0YLRjNGOINGB0L7RhdGA0LDQvdC40YLRjCDQvdCw0YHRgtGA0L7QudC60Lg6IgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjMKK21zZ2lkICJSZW1vdmUgUmVtb3RlIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDRgdGB0YvQu9C60YMg0L3QsCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBsaWIvcmVtb3RlLnRjbDoxNjgKK21zZ2lkICJQcnVuZSBmcm9tIgorbXNnc3RyICLQp9C40YHRgtC60LAiCisKKyM6IGxpYi9yZW1vdGUudGNsOjE3MworbXNnaWQgIkZldGNoIGZyb20iCittc2dzdHIgItCf0L7Qu9GD0YfQtdC90LjQtSDQuNC3IgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMTUKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICLQntGC0L/RgNCw0LLQuNGC0YwiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxOQorbXNnaWQgIkFkZCBSZW1vdGUiCittc2dzdHIgItCX0LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDRgtGMINCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyNAorbXNnaWQgIkFkZCBOZXcgUmVtb3RlIgorbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoyOCBsaWIvdG9vbHNfZGxnLnRjbDozNgorbXNnaWQgIkFkZCIKK21zZ3N0ciAiIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzcKK21zZ2lkICJSZW1vdGUgRGV0YWlscyIKK21zZ3N0ciAi0JjQvdGE0L7RgNC80LDRhtC40Y8g0L4g0LLQvdC10YjQvdC10Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjUwCittc2dpZCAiTG9jYXRpb246IgorbXNnc3RyICLQn9C+0LvQvtC20LXQvdC40LU6IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjIKK21zZ2lkICJGdXJ0aGVyIEFjdGlvbiIKK21zZ3N0ciAi0KHQu9C10LTRg9GO0YnQsNGPINC+0L/QtdGA0LDRhtC40Y8iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2NQorbXNnaWQgIkZldGNoIEltbWVkaWF0ZWx5IgorbXNnc3RyICLQodC60LDRh9Cw0YLRjCDRgdGA0LDQt9GDIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzEKK21zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0L7QstCw0YLRjCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC4INC+0YLQv9GA0LDQstC40YLRjCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjc3Cittc2dpZCAiRG8gTm90aGluZyBFbHNlIE5vdyIKK21zZ3N0ciAi0JHQvtC70YzRiNC1INC90LjRh9C10LPQviDQvdC1INC00LXQu9Cw0YLRjCIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCittc2dzdHIgItCj0LrQsNC20LjRgtC1INC90LDQt9Cy0LDQvdC40LUg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjExNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGFuIGFjY2VwdGFibGUgcmVtb3RlIG5hbWUuIgorbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0L3QsNC30LLQsNC90LjQtSDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gJyVzJy4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHJlbW90ZSAnJXMnIG9mIGxvY2F0aW9uICclcycuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC00L7QsdCw0LLQuNGC0YwgJyVzJyDQuNC3ICclcycuICIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzMyBsaWIvdHJhbnNwb3J0LnRjbDo2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmV0Y2ggJXMiCittc2dzdHIgItC/0L7Qu9GD0YfQtdC90LjQtSAlcyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEzNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIHRoZSAlcyIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L3QuNC1ICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNGC0Ywg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQsiAnJXMnLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MyBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo2MworIzogbGliL3RyYW5zcG9ydC50Y2w6ODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJwdXNoICVzIgorbXNnc3RyICLQvtGC0L/RgNCw0LLQuNGC0YwgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIHVwIHRoZSAlcyAoYXQgJXMpIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LAgJXMgKNCyICVzKSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOSBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM0Cittc2dpZCAiRGVsZXRlIEJyYW5jaCBSZW1vdGVseSIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDQstC10YLQstC4INCy0L4g0LLQvdC10YjQvdC10Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0NworbXNnaWQgIkZyb20gUmVwb3NpdG9yeSIKK21zZ3N0ciAi0JjQtyDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjUwIGxpYi90cmFuc3BvcnQudGNsOjEzNAorbXNnaWQgIlJlbW90ZToiCittc2dzdHIgItCy0L3QtdGI0L3QuNC5OiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo2NiBsaWIvdHJhbnNwb3J0LnRjbDoxNDkKK21zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgorbXNnc3RyICLQo9C60LDQt9Cw0L3QvdC+0LUg0L/QvtC70L7QttC10L3QuNC1OiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4NAorbXNnaWQgIkJyYW5jaGVzIgorbXNnc3RyICLQktC10YLQstC4IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEwOQorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDRgtC+0LvRjNC60L4g0LIg0YHQu9GD0YfQsNC1LCDQtdGB0LvQuCIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTEKK21zZ2lkICJNZXJnZWQgSW50bzoiCittc2dzdHIgItCh0LvQuNGP0L3QuNC1INGBOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTIKK21zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCittc2dzdHIgItCU0LvRjyDQvtC/0YbQuNC4ICfQodC70LjRj9C90LjQtSDRgScg0YLRgNC10LHRg9C10YLRgdGPINGD0LrQsNC30LDRgtGMINCy0LXRgtCy0YwuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczpcbiIKKyJcbiIKKyIgLSAlcyIKK21zZ3N0ciAiIgorItCh0LvQtdC00YPRjtGJ0LjQtSDQstC10YLQstC4INC80L7Qs9GD0YIg0LHRi9GC0Ywg0L7QsdGK0LXQtNC40L3QtdC90Ysg0YEgJXMg0L/RgNC4INC/0L7QvNC+0YnQuCDQvtC/0LXRgNCw0YbQuNC4INGB0LvQuNGP0L3QuNGPOlxuIgorIlxuIgorIiAtICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjE4OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJPbmUgb3IgbW9yZSBvZiB0aGUgbWVyZ2UgdGVzdHMgZmFpbGVkIGJlY2F1c2UgeW91IGhhdmUgbm90IGZldGNoZWQgdGhlICIKKyJuZWNlc3NhcnkgY29tbWl0cy4gIFRyeSBmZXRjaGluZyBmcm9tICVzIGZpcnN0LiIKK21zZ3N0ciAiIgorItCd0LXQutC+0YLQvtGA0YvQtSDRgtC10YHRgtGLINC90LAg0YHQu9C40Y/QvdC40LUg0L3QtSDQv9GA0L7RiNC70LgsINC/0L7RgtC+0LzRgyDRh9GC0L4g0JLRiyDQvdC1INC/0L7Qu9GD0YfQuNC70Lgg0L3QtdC+0LHRhdC+0LTQuNC80YvQtSAiCisi0YHQvtGB0YLQvtGP0L3QuNGPLiDQn9C+0L/Ri9GC0LDQudGC0LXRgdGMINC/0L7Qu9GD0YfQuNGC0Ywg0LjRhSDQuNC3ICVzLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDcKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgItCj0LrQsNC20LjRgtC1INC+0LTQvdGDINC40LvQuCDQvdC10YHQutC+0LvRjNC60L4g0LLQtdGC0LLQtdC5INC00LvRjyDRg9C00LDQu9C10L3QuNGPLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INCy0LXRgtCy0LXQuSDQuNC3ICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MgorbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgorbXNnc3RyICLQndC1INGD0LrQsNC30LDQvSDRgNC10L/QvtC30LjRgtC+0YDQuNC5LiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyOTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAi0J/QtdGA0LXRh9C40YLRi9Cy0LDQvdC40LUgJXMuLi4gIgorCisjOiBsaWIvc2VhcmNoLnRjbDoyMQorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICLQn9C+0LjRgdC6OiIKKworIzogbGliL3NlYXJjaC50Y2w6MjMKK21zZ2lkICJOZXh0IgorbXNnc3RyICLQlNCw0LvRjNGI0LUiCisKKyM6IGxpYi9zZWFyY2gudGNsOjI0Cittc2dpZCAiUHJldiIKK21zZ3N0ciAi0J7QsdGA0LDRgtC90L4iCisKKyM6IGxpYi9zZWFyY2gudGNsOjI1Cittc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCittc2dzdHIgItCY0LPQvS4g0LHQvtC70YzRiNC40LUv0LzQsNC70LXQvdGM0LrQuNC1IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjIxIGxpYi9zaG9ydGN1dC50Y2w6NjIKK21zZ2lkICJDYW5ub3Qgd3JpdGUgc2hvcnRjdXQ6IgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQt9Cw0L/QuNGB0LDRgtGMINGB0YHRi9C70LrRgzoiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3Cittc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQt9Cw0L/QuNGB0LDRgtGMINC30L3QsNGH0L7QujoiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NworbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgItCd0LXQv9C+0LTQtNC10YDQttC40LLQsNC10LzQsNGPINC/0YDQvtCz0YDQsNC80LzQsCDQv9GA0L7QstC10YDQutC4INC/0YDQsNCy0L7Qv9C40YHQsNC90LjRjyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY1Cittc2dpZCAiU3BlbGwgY2hlY2tpbmcgaXMgdW5hdmFpbGFibGUiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPINC90LUg0LTQvtGB0YLRg9C/0L3QsCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Cittc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdCw0Y8g0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGPINC/0YDQvtCz0YDQsNC80LzRiyDQv9GA0L7QstC10YDQutC4INC/0YDQsNCy0L7Qv9C40YHQsNC90LjRjyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjcwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nIGRpY3Rpb25hcnkgdG8gJXMuIgorbXNnc3RyICLQodC70L7QstCw0YDRjCDQstC10YDQvdGD0YIg0LogJXMuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzMKK21zZ2lkICJTcGVsbCBjaGVja2VyIHNpbGVudGx5IGZhaWxlZCBvbiBzdGFydHVwIgorbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAg0L/RgNC+0LLQtdGA0LrQuCDQv9GA0LDQstC+0L/QuNGB0LDQvdC40Y8g0L3QtSDRgdC80L7Qs9C70LAg0LfQsNC/0YPRgdGC0LjRgtGM0YHRjyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgItCd0LXRgNCw0YHQv9C+0LfQvdCw0L3QvdCw0Y8g0L/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Cittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgItCY0YHQv9GA0LDQstC70LXQvdC40Lkg0L3QtSDQvdCw0LnQtNC10L3QviIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM4OAorbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPINC/0YDQtdGA0LLQsNC70LAg0L/QtdGA0LXQtNCw0YfRgyDQtNCw0L3QvdGL0YUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKK21zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQvtCy0LXRgNC60Lgg0L/RgNCw0LLQvtC/0LjRgdCw0L3QuNGPIgorCisjOiBsaWIvc3Noa2V5LnRjbDozMQorbXNnaWQgIk5vIGtleXMgZm91bmQuIgorbXNnc3RyICLQmtC70Y7RhyDQvdC1INC90LDQudC00LXQvSIKKworIzogbGliL3NzaGtleS50Y2w6MzQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGb3VuZCBhIHB1YmxpYyBrZXkgaW46ICVzIgorbXNnc3RyICLQn9GD0LHQu9C40YfQvdGL0Lkg0LrQu9GO0Ycg0LjQtyAlcyIKKworIzogbGliL3NzaGtleS50Y2w6NDAKK21zZ2lkICJHZW5lcmF0ZSBLZXkiCittc2dzdHIgItCh0L7Qt9C00LDRgtGMINC60LvRjtGHIgorCisjOiBsaWIvc3Noa2V5LnRjbDo1NgorbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgorbXNnc3RyICLQodC60L7Qv9C40YDQvtCy0LDRgtGMINCyINCx0YPRhNC10YAg0L7QsdC80LXQvdCwIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3MAorbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgorbXNnc3RyICLQktCw0Ygg0L/Rg9Cx0LvQuNGH0L3Ri9C5INC60LvRjtGHIE9wZW5TU0giCisKKyM6IGxpYi9zc2hrZXkudGNsOjc4Cittc2dpZCAiR2VuZXJhdGluZy4uLiIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtS4uLiIKKworIzogbGliL3NzaGtleS50Y2w6ODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHNzaC1rZXlnZW46XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyLQntGI0LjQsdC60LAg0LfQsNC/0YPRgdC60LAgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3NzaGtleS50Y2w6MTExCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICLQmtC70Y7RhyDQvdC1INGB0L7Qt9C00LDQvS4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjExOAorbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCittc2dzdHIgItCh0L7Qt9C00LDQvdC40LUg0LrQu9GO0YfQsCDQt9Cw0LLQtdGA0YjQuNC70L7RgdGMLCDQvdC+INGA0LXQt9GD0LvRjNGC0LDRgiDQvdC1INCx0YvQuyDQvdCw0LnQtNC10L0iCisKKyM6IGxpYi9zc2hrZXkudGNsOjEyMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIllvdXIga2V5IGlzIGluOiAlcyIKK21zZ3N0ciAi0JLQsNGIINC60LvRjtGHINC90LDRhdC+0LTQuNGC0YHRjyDQsjogJXMiCisKKyM6IGxpYi9zdGF0dXNfYmFyLnRjbDo4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIC4uLiAlKmkgb2YgJSppICVzICglM2klJSkiCittc2dzdHIgIiVzIC4uLiAlKmkg0LjQtyAlKmkgJXMgKCUzaSUlKSIKKworIzogbGliL3Rvb2xzLnRjbDo3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKK21zZ3N0ciAi0JfQsNC/0YPRgdC6ICVzINGC0YDQtdCx0YPQtdGCINCy0YvQsdGA0LDQvdC90L7Qs9C+INGE0LDQudC70LAuIgorCisjOiBsaWIvdG9vbHMudGNsOjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlcz8iCittc2dzdHIgItCU0LXQudGB0YLQstC40YLQtdC70YzQvdC+INC30LDQv9GD0YHRgtC40YLRjCAlcz8iCisKKyM6IGxpYi90b29scy50Y2w6MTEwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbDogJXMiCittc2dzdHIgItCS0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90LDRjyDQvtC/0LXRgNCw0YbQuNGPOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAi0JLRi9C/0L7Qu9C90LXQvdC40LU6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgY29tcGxldGVkIHN1Y2Nlc3NmdWxseTogJXMiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCAlcyDQt9Cw0LLQtdGA0YjQuNC70LDRgdGMINGD0YHQv9C10YjQvdC+LiIKKworIzogbGliL3Rvb2xzLnRjbDoxNTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGZhaWxlZDogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ys6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorbXNnaWQgIkFkZCBUb29sIgorbXNnc3RyICLQlNC+0LHQsNCy0LjRgtGMINCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90YPRjiDQvtC/0LXRgNCw0YbQuNGOIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOAorbXNnaWQgIkFkZCBOZXcgVG9vbCBDb21tYW5kIgorbXNnc3RyICLQndC+0LLQsNGPINCy0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90LDRjyDQvtC/0LXRgNCw0YbQuNGPIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMworbXNnaWQgIkFkZCBnbG9iYWxseSIKK21zZ3N0ciAi0JTQvtCx0LDQstC40YLRjCDQtNC70Y8g0LLRgdC10YUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NQorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAi0J7Qv9C40YHQsNC90LjQtSDQstGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDgKK21zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSAnLycg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0L/QvtC00LzQtdC90Y4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjYxCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgItCa0L7QvNCw0L3QtNCwOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzQKK21zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC00LjQsNC70L7QsyDQv9C10YDQtdC0INC30LDQv9GD0YHQutC+0LwiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjgwCittc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCittc2dzdHIgItCX0LDQv9GA0L7RgSDQvdCwINCy0YvQsdC+0YAg0LLQtdGA0YHQuNC4ICjRg9GB0YLQsNC90LDQstC70LjQstCw0LXRgiAkUkVWSVNJT04pIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4NQorbXNnaWQgIkFzayB0aGUgdXNlciBmb3IgYWRkaXRpb25hbCBhcmd1bWVudHMgKHNldHMgJEFSR1MpIgorbXNnc3RyICLQl9Cw0L/RgNC+0YEg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvRhSDQsNGA0LPRg9C80LXQvdGC0L7QsiAo0YPRgdGC0LDQvdCw0LLQu9C40LLQsNC10YIgJEFSR1MpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo5MgorbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKK21zZ3N0ciAi0J3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCDQvtC60L3QviDQstGL0LLQvtC00LAg0LrQvtC80LDQvdC00YsiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjk3Cittc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKK21zZ3N0ciAi0JfQsNC/0YPRgdC6INGC0L7Qu9GM0LrQviDQtdGB0LvQuCDQv9C+0LrQsNC30LDQvSDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5ICgkRklMRU5BTUUg0L3QtSDQv9GD0YHRgtC+KSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTIxCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIG5hbWUgZm9yIHRoZSB0b29sLiIKK21zZ3N0ciAi0KPQutCw0LbQuNGC0LUg0L3QsNC30LLQsNC90LjQtSDQstGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuC4iCisKKyM6IGxpYi90b29sc19kbGcudGNsOjEyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCS0YHQv9C+0LzQvtCz0LDRgtC10LvRjNC90LDRjyDQvtC/0LXRgNCw0YbQuNGPICclcycg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTUxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKKyIlcyIKK21zZ3N0ciAiIgorItCe0YjQuNCx0LrQsCDQtNC+0LHQsNCy0LvQtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ys6XG4iCisiJXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MAorbXNnaWQgIlJlbW92ZSBUb29sIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDQv9GA0L7Qs9GA0LDQvNC80YMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5NgorbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDQutC+0LzQsNC90LTRiyDQv9GA0L7Qs9GA0LDQvNC80YsiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIwMAorbXNnaWQgIlJlbW92ZSIKK21zZ3N0ciAi0KPQtNCw0LvQuNGC0YwiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjIzNgorbXNnaWQgIihCbHVlIGRlbm90ZXMgcmVwb3NpdG9yeS1sb2NhbCB0b29scykiCittc2dzdHIgIijQodC40L3QuNC8INCy0YvQtNC10LvQtdC90Ysg0L/RgNC+0LPRgNCw0LzQvNGLINC70L7QutCw0LvRjNC90YvQtSDRgNC10L/QvtC30LjRgtC+0YDQuNGOKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6Mjk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVuIENvbW1hbmQ6ICVzIgorbXNnc3RyICLQl9Cw0L/Rg9GB0Log0LrQvtC80LDQvdC00Ys6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMTEKK21zZ2lkICJBcmd1bWVudHMiCittc2dzdHIgItCQ0YDQs9GD0LzQtdC90YLRiyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MzQ4Cittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQuNC3ICVzICIKKworIyBjYXJib24gY29weQorIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCittc2dzdHIgItGH0LjRgdGC0LrQsCDQstC90LXRiNC90LXQs9C+ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgdHJhY2tpbmcgYnJhbmNoZXMgZGVsZXRlZCBmcm9tICVzIgorbXNnc3RyICLQp9C40YHRgtC60LAg0LLQtdGC0LLQtdC5INGB0LvQtdC20LXQvdC40Y8sINGD0LTQsNC70LXQvdC90YvRhSDQuNC3ICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgY2hhbmdlcyB0byAlcyIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCDQuNC30LzQtdC90LXQvdC40Lkg0LIgJXMgIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKK21zZ3N0ciAi0KLQvtGH0L3QvtC1INC60L7Qv9C40YDQvtCy0LDQvdC40LUg0LIgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LrQsCAlcyAlcyDQsiAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTAwCittc2dpZCAiUHVzaCBCcmFuY2hlcyIKK21zZ3N0ciAi0J7RgtC/0YDQsNCy0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiDQstC10YLQstGP0YUiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjExNAorbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKK21zZ3N0ciAi0JjRgdGF0L7QtNC90YvQtSDQstC10YLQstC4IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzEKK21zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgorbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5INC90LDQt9C90LDRh9C10L3QuNGPIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjkKK21zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L7RgtC/0YDQsNCy0LrQuCIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTcxCittc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCittc2dzdHIgItCd0LDQvNC10YDQtdC90L3QviDQv9C10YDQtdC/0LjRgdCw0YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidGD0Y4g0LLQtdGC0LLRjCAo0LLQvtC30LzQvtC20L3QsCDQv9C+0YLQtdGA0Y8g0LjQt9C80LXQvdC10L3QuNC5KSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTc1Cittc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCB0aGluIHBhY2sgKNC00LvRjyDQvNC10LTQu9C10L3QvdGL0YUg0YHQtdGC0LXQstGL0YUg0L/QvtC00LrQu9GO0YfQtdC90LjQuSkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE3OQorbXNnaWQgIkluY2x1ZGUgdGFncyIKK21zZ3N0ciAi0J/QtdGA0LXQtNCw0YLRjCDQvNC10YLQutC4IgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS9wby9zdi5wbyBiL2dpdC1ndWkvcG8vc3YucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI0YWQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1ndWkvcG8vc3YucG8KQEAgLTAsMCArMSwyNzM2IEBACisjIFN3ZWRpc2ggdHJhbnNsYXRpb24gb2YgZ2l0LWd1aS4KKyMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggU2hhd24gUGVhcmNlLCBldCBhbC4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdC1ndWkgcGFja2FnZS4KKyMKKyMgTWlrYWVsIE1hZ251c3NvbiA8bWlrYWNodUBnbWFpbC5jb20+LCAyMDA4LgorIyBQZXRlciBLcmVmdGluZyA8cGV0ZXJAc29mdHdvbHZlcy5wcC5zZT4sIDIwMDctMjAwOCwgMjAxNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IHN2XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTAzLTI3IDEwOjE1KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTAzLTI3IDEwOjI0KzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPlxuIgorIkxhbmd1YWdlLVRlYW06IFN3ZWRpc2ggPHRwLXN2QGxpc3Rvci50cC1zdi5zZT5cbiIKKyJMYW5ndWFnZTogc3ZcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogR3RyYW5zbGF0b3IgMi45MS42XG4iCisKKyM6IGdpdC1ndWkuc2g6ODYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgIk9naWx0aWd0IHRlY2tlbnNuaXR0IGFuZ2l2ZXQgaSAlczoiCisKKyM6IGdpdC1ndWkuc2g6OTE1Cittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICJIdXZ1ZHRlY2tlbnNuaXR0IgorCisjOiBnaXQtZ3VpLnNoOjkxNgorbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgorbXNnc3RyICJEaWZmL2tvbnNvbHRlY2tlbnNuaXR0IgorCisjOiBnaXQtZ3VpLnNoOjkzMSBnaXQtZ3VpLnNoOjk0NSBnaXQtZ3VpLnNoOjk1OCBnaXQtZ3VpLnNoOjEwNDgKKyM6IGdpdC1ndWkuc2g6MTA2NyBnaXQtZ3VpLnNoOjMxMjUKK21zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKK21zZ3N0ciAiZ2l0LWd1aTogw7ZkZXNkaWdlcnQgZmVsIgorCisjOiBnaXQtZ3VpLnNoOjkzMgorbXNnaWQgIkNhbm5vdCBmaW5kIGdpdCBpbiBQQVRILiIKK21zZ3N0ciAiSGl0dGFyIGludGUgZ2l0IGkgUEFUSC4iCisKKyM6IGdpdC1ndWkuc2g6OTU5Cittc2dpZCAiQ2Fubm90IHBhcnNlIEdpdCB2ZXJzaW9uIHN0cmluZzoiCittc2dzdHIgIkthbiBpbnRlIHRvbGthIHZlcnNpb25zc3Ryw6RuZyBmcsOlbiBHaXQ6IgorCisjOiBnaXQtZ3VpLnNoOjk4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKKyJcbiIKKyIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgorIlxuIgorIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKKyJcbiIKKyJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgorbXNnc3RyICIiCisiS2FuIGludGUgYXZnw7ZyYSBHaXRzIHZlcnNpb24uXG4iCisiXG4iCisiJXMgc8OkZ2VyIGF0dCBkZXNzIHZlcnNpb24gw6RyIFwiJXNcIi5cbiIKKyJcbiIKKyIlcyBrcsOkdmVyIG1pbnN0IEdpdCAxLjUuMCBlbGxlciBzZW5hcmUuXG4iCisiXG4iCisiQW50YSBhdHQgXCIlc1wiIMOkciB2ZXJzaW9uIDEuNS4wP1xuIgorCisjOiBnaXQtZ3VpLnNoOjEyODEKK21zZ2lkICJHaXQgZGlyZWN0b3J5IG5vdCBmb3VuZDoiCittc2dzdHIgIkdpdC1rYXRhbG9nZW4gaGl0dGFkZXMgaW50ZToiCisKKyM6IGdpdC1ndWkuc2g6MTMxNQorbXNnaWQgIkNhbm5vdCBtb3ZlIHRvIHRvcCBvZiB3b3JraW5nIGRpcmVjdG9yeToiCittc2dzdHIgIkthbiBpbnRlIGfDpSB0aWxsIGLDtnJqYW4gcMOlIGFyYmV0c2thdGFsb2dlbjoiCisKKyM6IGdpdC1ndWkuc2g6MTMyMworbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKK21zZ3N0ciAiS2FuIGludGUgYW52w6RuZGEgbmFrZXQgYXJraXY6IgorCisjOiBnaXQtZ3VpLnNoOjEzMzEKK21zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiSW5nZW4gYXJiZXRza2F0YWxvZyIKKworIzogZ2l0LWd1aS5zaDoxNTAzIGxpYi9jaGVja291dF9vcC50Y2w6MzA2Cittc2dpZCAiUmVmcmVzaGluZyBmaWxlIHN0YXR1cy4uLiIKK21zZ3N0ciAiVXBwZGF0ZXJhciBmaWxzdGF0dXMuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTU2MworbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgIlPDtmtlciBlZnRlciDDpG5kcmFkZSBmaWxlci4uLiIKKworIzogZ2l0LWd1aS5zaDoxNjM5Cittc2dpZCAiQ2FsbGluZyBwcmVwYXJlLWNvbW1pdC1tc2cgaG9vay4uLiIKK21zZ3N0ciAiIgorIkFucm9wYXIga3Jva2VuIGbDtnIgZsO2cmJlcmVkZWxzZSBhdiBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIChwcmVwYXJlLWNvbW1pdC0iCisibXNnKS4uLiIKKworIzogZ2l0LWd1aS5zaDoxNjU2Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiIgorIkluY2hlY2tuaW5nZW4gYXZ2aXNhZGVzIGF2IGtyb2tlbiBmw7ZyIGbDtnJiZXJlZGVsc2UgYXYgaW5jaGVja25pbmdzbWVkZGVsYW5kZSAiCisiKHByZXBhcmUtY29tbWl0LW1zZykuIgorCisjOiBnaXQtZ3VpLnNoOjE4MTQgbGliL2Jyb3dzZXIudGNsOjI1MgorbXNnaWQgIlJlYWR5LiIKK21zZ3N0ciAiS2xhci4iCisKKyM6IGdpdC1ndWkuc2g6MTk3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJEaXNwbGF5IGxpbWl0IChndWkubWF4ZmlsZXNkaXNwbGF5ZWQgPSAlcykgcmVhY2hlZCwgbm90IHNob3dpbmcgYWxsICVzIGZpbGVzLiIKK21zZ3N0ciAiIgorIlZpc25pbmdzZ3LDpG5zIChndWkubWF4ZmlsZXNkaXNwbGF5ZWQgPSAlcykgbsOlZGQsIHZpc2FyZSBpbnRlIHNhbXRsaWdhICVzICIKKyJmaWxlci4iCisKKyM6IGdpdC1ndWkuc2g6MjEwMQorbXNnaWQgIlVubW9kaWZpZWQiCittc2dzdHIgIk9mw7Zyw6RuZHJhZGUiCisKKyM6IGdpdC1ndWkuc2g6MjEwMworbXNnaWQgIk1vZGlmaWVkLCBub3Qgc3RhZ2VkIgorbXNnc3RyICJGw7Zyw6RuZHJhZGUsIGVqIGvDtmFkZSIKKworIzogZ2l0LWd1aS5zaDoyMTA0IGdpdC1ndWkuc2g6MjExNgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJLw7ZhZGUgZsO2ciBpbmNoZWNrbmluZyIKKworIzogZ2l0LWd1aS5zaDoyMTA1IGdpdC1ndWkuc2g6MjExNworbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICJEZWxhciBrw7ZhZGUgZsO2ciBpbmNoZWNrbmluZyIKKworIzogZ2l0LWd1aS5zaDoyMTA2IGdpdC1ndWkuc2g6MjExOAorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICJLw7ZhZGUgZsO2ciBpbmNoZWNrbmluZywgc2FrbmFkZSIKKworIzogZ2l0LWd1aS5zaDoyMTA4Cittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIkZpbHR5cCDDpG5kcmFkLCBlaiBrw7ZhZGUiCisKKyM6IGdpdC1ndWkuc2g6MjEwOSBnaXQtZ3VpLnNoOjIxMTAKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgb2xkIHR5cGUgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIkZpbHR5cCDDpG5kcmFkLCBnYW1tYWwgdHlwIGvDtmFkZSBmw7ZyIGluY2hlY2tuaW5nIgorCisjOiBnaXQtZ3VpLnNoOjIxMTEKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlZCwgc3RhZ2VkIgorbXNnc3RyICJGaWx0eXAgw6RuZHJhZCwga8O2YWRlIgorCisjOiBnaXQtZ3VpLnNoOjIxMTIKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgbW9kaWZpY2F0aW9uIG5vdCBzdGFnZWQiCittc2dzdHIgIkZpbHR5cHPDpG5kcmluZ2FyIGvDtmFkZSwgaW5uZWjDpWxsc8OkbmRyaW5nYXIgZWoga8O2YWRlIgorCisjOiBnaXQtZ3VpLnNoOjIxMTMKK21zZ2lkICJGaWxlIHR5cGUgY2hhbmdlIHN0YWdlZCwgZmlsZSBtaXNzaW5nIgorbXNnc3RyICJGaWx0eXBzw6RuZHJpbmdhciBrw7ZhZGUsIGZpbCBzYWtuYXMiCisKKyM6IGdpdC1ndWkuc2g6MjExNQorbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiRWogc3DDpXJhZGUsIGVqIGvDtmFkZSIKKworIzogZ2l0LWd1aS5zaDoyMTIwCittc2dpZCAiTWlzc2luZyIKK21zZ3N0ciAiU2FrbmFkZSIKKworIzogZ2l0LWd1aS5zaDoyMTIxCittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgorbXNnc3RyICJLw7ZhZGUgZsO2ciBib3J0dGFnbmluZyIKKworIzogZ2l0LWd1aS5zaDoyMTIyCittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgorbXNnc3RyICJLw7ZhZGUgZsO2ciBib3J0dGFnbmluZywgZm9ydGZhcmFuZGUgbsOkcnZhcmFuZGUiCisKKyM6IGdpdC1ndWkuc2g6MjEyNCBnaXQtZ3VpLnNoOjIxMjUgZ2l0LWd1aS5zaDoyMTI2IGdpdC1ndWkuc2g6MjEyNworIzogZ2l0LWd1aS5zaDoyMTI4IGdpdC1ndWkuc2g6MjEyOQorbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIktyw6R2ZXIga29uZmxpa3RoYW50ZXJpbmcgZWZ0ZXIgc2FtbWFuc2xhZ25pbmciCisKKyM6IGdpdC1ndWkuc2g6MjE2NAorbXNnaWQgIlN0YXJ0aW5nIGdpdGsuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIlN0YXJ0YXIgZ2l0ay4uLiB2w6RudGEuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjE3NgorbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgorbXNnc3RyICJIaXR0YWRlIGludGUgZ2l0ayBpIFBBVEguIgorCisjOiBnaXQtZ3VpLnNoOjIyMzUKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiSGl0dGFkZSBpbnRlIGdpdCBndWkgaSBQQVRILiIKKworIzogZ2l0LWd1aS5zaDoyNjU0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDEKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICJBcmtpdiIKKworIzogZ2l0LWd1aS5zaDoyNjU1Cittc2dpZCAiRWRpdCIKK21zZ3N0ciAiUmVkaWdlcmEiCisKKyM6IGdpdC1ndWkuc2g6MjY1NyBsaWIvY2hvb3NlX3Jldi50Y2w6NTY3Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJHcmVuIgorCisjOiBnaXQtZ3VpLnNoOjI2NjAgbGliL2Nob29zZV9yZXYudGNsOjU1NAorbXNnaWQgIkNvbW1pdEBAbm91biIKK21zZ3N0ciAiSW5jaGVja25pbmciCisKKyM6IGdpdC1ndWkuc2g6MjY2MyBsaWIvbWVyZ2UudGNsOjEyMyBsaWIvbWVyZ2UudGNsOjE1MiBsaWIvbWVyZ2UudGNsOjE3MAorbXNnaWQgIk1lcmdlIgorbXNnc3RyICJTbMOlIGlob3AiCisKKyM6IGdpdC1ndWkuc2g6MjY2NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTYzCittc2dpZCAiUmVtb3RlIgorbXNnc3RyICJGasOkcnJhcmtpdiIKKworIzogZ2l0LWd1aS5zaDoyNjY3Cittc2dpZCAiVG9vbHMiCittc2dzdHIgIlZlcmt0eWciCisKKyM6IGdpdC1ndWkuc2g6MjY3NgorbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgorbXNnc3RyICJVdGZvcnNrYSBhcmJldHNrb3BpYSIKKworIzogZ2l0LWd1aS5zaDoyNjgyCittc2dpZCAiR2l0IEJhc2giCittc2dzdHIgIkdpdCBCYXNoIgorCisjOiBnaXQtZ3VpLnNoOjI2OTIKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAiQmzDpGRkcmEgaSBncmVuZW5zIGZpbGVyIgorCisjOiBnaXQtZ3VpLnNoOjI2OTYKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgorbXNnc3RyICJCbMOkZGRyYSBmaWxlciBww6UgZ3Jlbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzAxCittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoJ3MgSGlzdG9yeSIKK21zZ3N0ciAiVmlzdWFsaXNlcmEgZ3JlbmVucyBoaXN0b3JpayIKKworIzogZ2l0LWd1aS5zaDoyNzA1Cittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKK21zZ3N0ciAiVmlzdWFsaXNlcmEgYWxsYSBncmVuYXJzIGhpc3RvcmlrIgorCisjOiBnaXQtZ3VpLnNoOjI3MTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKK21zZ3N0ciAiQmzDpGRkcmEgaSBmaWxlciBmw7ZyICVzIgorCisjOiBnaXQtZ3VpLnNoOjI3MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJWaXN1YWxpemUgJXMncyBIaXN0b3J5IgorbXNnc3RyICJWaXN1YWxpc2VyYSBoaXN0b3JpayBmw7ZyICVzIgorCisjOiBnaXQtZ3VpLnNoOjI3MTkgbGliL2RhdGFiYXNlLnRjbDo0MCBsaWIvZGF0YWJhc2UudGNsOjY2Cittc2dpZCAiRGF0YWJhc2UgU3RhdGlzdGljcyIKK21zZ3N0ciAiRGF0YWJhc3N0YXRpc3RpayIKKworIzogZ2l0LWd1aS5zaDoyNzIyIGxpYi9kYXRhYmFzZS50Y2w6MzMKK21zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKK21zZ3N0ciAiS29tcHJpbWVyYSBkYXRhYmFzIgorCisjOiBnaXQtZ3VpLnNoOjI3MjUKK21zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCittc2dzdHIgIlZlcmlmaWVyYSBkYXRhYmFzIgorCisjOiBnaXQtZ3VpLnNoOjI3MzIgZ2l0LWd1aS5zaDoyNzM2IGdpdC1ndWkuc2g6Mjc0MCBsaWIvc2hvcnRjdXQudGNsOjgKKyM6IGxpYi9zaG9ydGN1dC50Y2w6NDAgbGliL3Nob3J0Y3V0LnRjbDo3MgorbXNnaWQgIkNyZWF0ZSBEZXNrdG9wIEljb24iCittc2dzdHIgIlNrYXBhIHNrcml2Ym9yZHNpa29uIgorCisjOiBnaXQtZ3VpLnNoOjI3NDggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxOTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyMDEKK21zZ2lkICJRdWl0IgorbXNnc3RyICJBdnNsdXRhIgorCisjOiBnaXQtZ3VpLnNoOjI3NTYKK21zZ2lkICJVbmRvIgorbXNnc3RyICLDhW5ncmEiCisKKyM6IGdpdC1ndWkuc2g6Mjc1OQorbXNnaWQgIlJlZG8iCittc2dzdHIgIkfDtnIgb20iCisKKyM6IGdpdC1ndWkuc2g6Mjc2MyBnaXQtZ3VpLnNoOjMzNjgKK21zZ2lkICJDdXQiCittc2dzdHIgIktsaXBwIHV0IgorCisjOiBnaXQtZ3VpLnNoOjI3NjYgZ2l0LWd1aS5zaDozMzcxIGdpdC1ndWkuc2g6MzQ0NSBnaXQtZ3VpLnNoOjM1MzAKKyM6IGxpYi9jb25zb2xlLnRjbDo2OQorbXNnaWQgIkNvcHkiCittc2dzdHIgIktvcGllcmEiCisKKyM6IGdpdC1ndWkuc2g6Mjc2OSBnaXQtZ3VpLnNoOjMzNzQKK21zZ2lkICJQYXN0ZSIKK21zZ3N0ciAiS2xpc3RyYSBpbiIKKworIzogZ2l0LWd1aS5zaDoyNzcyIGdpdC1ndWkuc2g6MzM3NyBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjM5CisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjgKK21zZ2lkICJEZWxldGUiCittc2dzdHIgIlRhIGJvcnQiCisKKyM6IGdpdC1ndWkuc2g6Mjc3NiBnaXQtZ3VpLnNoOjMzODEgZ2l0LWd1aS5zaDozNTM0IGxpYi9jb25zb2xlLnRjbDo3MQorbXNnaWQgIlNlbGVjdCBBbGwiCittc2dzdHIgIk1hcmtlcmEgYWxsYSIKKworIzogZ2l0LWd1aS5zaDoyNzg1Cittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICJTa2FwYS4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzkxCittc2dpZCAiQ2hlY2tvdXQuLi4iCittc2dzdHIgIkNoZWNrYSB1dC4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzk3Cittc2dpZCAiUmVuYW1lLi4uIgorbXNnc3RyICJCeXQgbmFtbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyODAyCittc2dpZCAiRGVsZXRlLi4uIgorbXNnc3RyICJUYSBib3J0Li4uIgorCisjOiBnaXQtZ3VpLnNoOjI4MDcKK21zZ2lkICJSZXNldC4uLiIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjgxNworbXNnaWQgIkRvbmUiCittc2dzdHIgIkbDpHJkaWciCisKKyM6IGdpdC1ndWkuc2g6MjgxOQorbXNnaWQgIkNvbW1pdEBAdmVyYiIKK21zZ3N0ciAiQ2hlY2thIGluIgorCisjOiBnaXQtZ3VpLnNoOjI4MjggZ2l0LWd1aS5zaDozMzA5Cittc2dpZCAiTmV3IENvbW1pdCIKK21zZ3N0ciAiTnkgaW5jaGVja25pbmciCisKKyM6IGdpdC1ndWkuc2g6MjgzNiBnaXQtZ3VpLnNoOjMzMTYKK21zZ2lkICJBbWVuZCBMYXN0IENvbW1pdCIKK21zZ3N0ciAiTMOkZ2cgdGlsbCBmw7ZyZWfDpWVuZGUgaW5jaGVja25pbmciCisKKyM6IGdpdC1ndWkuc2g6Mjg0NiBnaXQtZ3VpLnNoOjMyNzAgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMDEKK21zZ2lkICJSZXNjYW4iCittc2dzdHIgIlPDtmsgcMOlIG55dHQiCisKKyM6IGdpdC1ndWkuc2g6Mjg1MgorbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKK21zZ3N0ciAiS8O2YSBmw7ZyIGluY2hlY2tuaW5nIgorCisjOiBnaXQtZ3VpLnNoOjI4NTgKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAiS8O2YSDDpG5kcmFkZSBmaWxlciBmw7ZyIGluY2hlY2tuaW5nIgorCisjOiBnaXQtZ3VpLnNoOjI4NjQKK21zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgorbXNnc3RyICJUYSBib3J0IGZyw6VuIGluY2hlY2tuaW5nc2vDtiIKKworIzogZ2l0LWd1aS5zaDoyODcwIGxpYi9pbmRleC50Y2w6NDQyCittc2dpZCAiUmV2ZXJ0IENoYW5nZXMiCittc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXIiCisKKyM6IGdpdC1ndWkuc2g6Mjg3OCBnaXQtZ3VpLnNoOjM1ODEgZ2l0LWd1aS5zaDozNjEyCittc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCittc2dzdHIgIlZpc2EgbWluZHJlIHNhbW1hbmhhbmciCisKKyM6IGdpdC1ndWkuc2g6Mjg4MiBnaXQtZ3VpLnNoOjM1ODUgZ2l0LWd1aS5zaDozNjE2Cittc2dpZCAiU2hvdyBNb3JlIENvbnRleHQiCittc2dzdHIgIlZpc2EgbWVyIHNhbW1hbmhhbmciCisKKyM6IGdpdC1ndWkuc2g6Mjg4OSBnaXQtZ3VpLnNoOjMyODMgZ2l0LWd1aS5zaDozMzkyCittc2dpZCAiU2lnbiBPZmYiCittc2dzdHIgIlNrcml2IHVuZGVyIgorCisjOiBnaXQtZ3VpLnNoOjI5MDUKK21zZ2lkICJMb2NhbCBNZXJnZS4uLiIKK21zZ3N0ciAiTG9rYWwgc2FtbWFuc2xhZ25pbmcuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjkxMAorbXNnaWQgIkFib3J0IE1lcmdlLi4uIgorbXNnc3RyICJBdmJyeXQgc2FtbWFuc2xhZ25pbmcuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjkyMiBnaXQtZ3VpLnNoOjI5NTAKK21zZ2lkICJBZGQuLi4iCittc2dzdHIgIkzDpGdnIHRpbGwuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjkyNgorbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIlPDpG5kLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI5MzAKK21zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgorbXNnc3RyICJUYSBib3J0IGdyZW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjk0MCBnaXQtZ3VpLnNoOjM1NjMKK21zZ2lkICJPcHRpb25zLi4uIgorbXNnc3RyICJBbHRlcm5hdGl2Li4uIgorCisjOiBnaXQtZ3VpLnNoOjI5NTEKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgIlRhIGJvcnQuLi4iCisKKyM6IGdpdC1ndWkuc2g6Mjk2MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1Cittc2dpZCAiSGVscCIKK21zZ3N0ciAiSGrDpGxwIgorCisjOiBnaXQtZ3VpLnNoOjI5NjQgZ2l0LWd1aS5zaDoyOTY4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTggbGliL2Fib3V0LnRjbDoxNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFib3V0ICVzIgorbXNnc3RyICJPbSAlcyIKKworIzogZ2l0LWd1aS5zaDoyOTkyCittc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCittc2dzdHIgIldlYmJkb2t1bWVudGF0aW9uIgorCisjOiBnaXQtZ3VpLnNoOjI5OTUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxCittc2dpZCAiU2hvdyBTU0ggS2V5IgorbXNnc3RyICJWaXNhIFNTSC1ueWNrZWwiCisKKyM6IGdpdC1ndWkuc2g6MzAxNCBnaXQtZ3VpLnNoOjMxNDYKK21zZ2lkICJVc2FnZSIKK21zZ3N0ciAiQW52w6RuZG5pbmciCisKKyM6IGdpdC1ndWkuc2g6MzA5NSBsaWIvYmxhbWUudGNsOjU3MworbXNnaWQgIkVycm9yIgorbXNnc3RyICJGZWwiCisKKyM6IGdpdC1ndWkuc2g6MzEyNgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiw7ZkZXNkaWdlcnQ6IGt1bmRlIGludGUgdGEgc3RhdHVzIHDDpSBzw7ZrdsOkZ2VuICVzOiBGaWwgZWxsZXIga2F0YWxvZyBzYWtuYXMiCisKKyM6IGdpdC1ndWkuc2g6MzE1OQorbXNnaWQgIkN1cnJlbnQgQnJhbmNoOiIKK21zZ3N0ciAiQWt0dWVsbCBncmVuOiIKKworIzogZ2l0LWd1aS5zaDozMTg1Cittc2dpZCAiU3RhZ2VkIENoYW5nZXMgKFdpbGwgQ29tbWl0KSIKK21zZ3N0ciAiS8O2YWRlIMOkbmRyaW5nYXIgKGtvbW1lciBhdHQgY2hlY2thcyBpbikiCisKKyM6IGdpdC1ndWkuc2g6MzIwNQorbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCittc2dzdHIgIk9rw7ZhZGUgw6RuZHJpbmdhciIKKworIzogZ2l0LWd1aS5zaDozMjc2Cittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAiS8O2YSDDpG5kcmFkZSIKKworIzogZ2l0LWd1aS5zaDozMjk1IGxpYi90cmFuc3BvcnQudGNsOjEzNyBsaWIvdHJhbnNwb3J0LnRjbDoyMjkKK21zZ2lkICJQdXNoIgorbXNnc3RyICJTw6RuZCIKKworIzogZ2l0LWd1aS5zaDozMzMwCittc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIklubGVkYW5kZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKKworIzogZ2l0LWd1aS5zaDozMzMxCittc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlV0w7ZrYXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZToiCisKKyM6IGdpdC1ndWkuc2g6MzMzMgorbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlV0w7ZrYXQgaW5sZWRhbmRlIGluY2hlY2tuaW5nc21lZGRlbGFuZGU6IgorCisjOiBnaXQtZ3VpLnNoOjMzMzMKK21zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiVXTDtmthdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGbDtnIgc2FtbWFuc2xhZ25pbmc6IgorCisjOiBnaXQtZ3VpLnNoOjMzMzQKK21zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciBzYW1tYW5zbGFnbmluZzoiCisKKyM6IGdpdC1ndWkuc2g6MzMzNQorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiSW5jaGVja25pbmdzbWVkZGVsYW5kZToiCisKKyM6IGdpdC1ndWkuc2g6MzM4NCBnaXQtZ3VpLnNoOjM1MzggbGliL2NvbnNvbGUudGNsOjczCittc2dpZCAiQ29weSBBbGwiCittc2dzdHIgIktvcGllcmEgYWxsYSIKKworIzogZ2l0LWd1aS5zaDozNDA4IGxpYi9ibGFtZS50Y2w6MTA1Cittc2dpZCAiRmlsZToiCittc2dzdHIgIkZpbDoiCisKKyM6IGdpdC1ndWkuc2g6MzUyNgorbXNnaWQgIlJlZnJlc2giCittc2dzdHIgIlVwcGRhdGVyYSIKKworIzogZ2l0LWd1aS5zaDozNTQ3Cittc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICJNaW5za2EgdGVja2Vuc25pdHRzc3RvcmxlayIKKworIzogZ2l0LWd1aS5zaDozNTUxCittc2dpZCAiSW5jcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICLDlmthIHRlY2tlbnNuaXR0c3N0b3JsZWsiCisKKyM6IGdpdC1ndWkuc2g6MzU1OSBsaWIvYmxhbWUudGNsOjI5NAorbXNnaWQgIkVuY29kaW5nIgorbXNnc3RyICJUZWNrZW5rb2RuaW5nIgorCisjOiBnaXQtZ3VpLnNoOjM1NzAKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgIkFudsOkbmQvw6V0ZXJzdMOkbGwgZGVsIgorCisjOiBnaXQtZ3VpLnNoOjM1NzUKK21zZ2lkICJBcHBseS9SZXZlcnNlIExpbmUiCittc2dzdHIgIkFudsOkbmQvw6V0ZXJzdMOkbGwgcmFkIgorCisjOiBnaXQtZ3VpLnNoOjM1OTQKK21zZ2lkICJSdW4gTWVyZ2UgVG9vbCIKK21zZ3N0ciAiU3RhcnRhIHZlcmt0eWcgZsO2ciBzYW1tYW5zbGFnbmluZyIKKworIzogZ2l0LWd1aS5zaDozNTk5Cittc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgorbXNnc3RyICJBbnbDpG5kIHZlcnNpb25lbiBmcsOlbiBmasOkcnJhcmtpdmV0IgorCisjOiBnaXQtZ3VpLnNoOjM2MDMKK21zZ2lkICJVc2UgTG9jYWwgVmVyc2lvbiIKK21zZ3N0ciAiQW52w6RuZCBsb2thbGEgdmVyc2lvbmVuIgorCisjOiBnaXQtZ3VpLnNoOjM2MDcKK21zZ2lkICJSZXZlcnQgVG8gQmFzZSIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwgdGlsbCBiYXN2ZXJzaW9uZW4iCisKKyM6IGdpdC1ndWkuc2g6MzYyNQorbXNnaWQgIlZpc3VhbGl6ZSBUaGVzZSBDaGFuZ2VzIEluIFRoZSBTdWJtb2R1bGUiCittc2dzdHIgIlZpc3VhbGlzZXJhIMOkbmRyaW5nYXJuYSBpIHVuZGVybW9kdWxlbiIKKworIzogZ2l0LWd1aS5zaDozNjI5Cittc2dpZCAiVmlzdWFsaXplIEN1cnJlbnQgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiVmlzdWFsaXNlcmEgZ3JlbmVucyBoaXN0b3JpayBpIHVuZGVybW9kdWxlbiIKKworIzogZ2l0LWd1aS5zaDozNjMzCittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJWaXN1YWxpc2VyYSBhbGxhIGdyZW5hcnMgaGlzdG9yaWsgaSB1bmRlcm1vZHVsZW4iCisKKyM6IGdpdC1ndWkuc2g6MzYzOAorbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiU3RhcnRhIGdpdCBndWkgaSB1bmRlcm1vZHVsZW4iCisKKyM6IGdpdC1ndWkuc2g6MzY3MworbXNnaWQgIlVuc3RhZ2UgSHVuayBGcm9tIENvbW1pdCIKK21zZ3N0ciAiVGEgYm9ydCBkZWwgdXIgaW5jaGVja25pbmdza8O2IgorCisjOiBnaXQtZ3VpLnNoOjM2NzUKK21zZ2lkICJVbnN0YWdlIExpbmVzIEZyb20gQ29tbWl0IgorbXNnc3RyICJUYSBib3J0IHJhZGVyIHVyIGluY2hlY2tuaW5nc2vDtiIKKworIzogZ2l0LWd1aS5zaDozNjc3Cittc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgorbXNnc3RyICJUYSBib3J0IHJhZCB1ciBpbmNoZWNrbmluZ3Nrw7YiCisKKyM6IGdpdC1ndWkuc2g6MzY4MAorbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKK21zZ3N0ciAiU3TDpGxsIGRlbCBpIGluY2hlY2tuaW5nc2vDtiIKKworIzogZ2l0LWd1aS5zaDozNjgyCittc2dpZCAiU3RhZ2UgTGluZXMgRm9yIENvbW1pdCIKK21zZ3N0ciAiU3TDpGxsIHJhZGVyIGkgaW5jaGVja25pbmdza8O2IgorCisjOiBnaXQtZ3VpLnNoOjM2ODQKK21zZ2lkICJTdGFnZSBMaW5lIEZvciBDb21taXQiCittc2dzdHIgIlN0w6RsbCByYWQgaSBpbmNoZWNrbmluZ3Nrw7YiCisKKyM6IGdpdC1ndWkuc2g6MzcwOQorbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAiSW5pdGllcmFyLi4uIgorCisjOiBnaXQtZ3VpLnNoOjM4NTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisiRGV0IGZpbm5zIG3DtmpsaWdhIHByb2JsZW0gbWVkIG1pbGrDtnZhcmlhYmxlci5cbiIKKyJcbiIKKyJGw7ZsamFuZGUgbWlsasO2dmFyaWFibGVyIGtvbW1lciB0cm9saWdlbiBhdHRcbiIKKyJpZ25vcmVyYXMgYXYgYWxsYSBHaXQtdW5kZXJwcm9jZXNzZXIgc29tIGvDtnJzXG4iCisiYXYgJXM6XG4iCisiXG4iCisKKyM6IGdpdC1ndWkuc2g6Mzg4MQorbXNnaWQgIiIKKyJcbiIKKyJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCisiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorbXNnc3RyICIiCisiXG4iCisiRGV0dGEgYmVyb3IgcMOlIGV0dCBrw6RudCBwcm9ibGVtIG1lZFxuIgorIlRjbC1iaW7DpHJlbiBzb20gZsO2bGplciBtZWQgQ3lnd2luLiIKKworIzogZ2l0LWd1aS5zaDozODg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlxuIgorIkEgZ29vZCByZXBsYWNlbWVudCBmb3IgJXNcbiIKKyJpcyBwbGFjaW5nIHZhbHVlcyBmb3IgdGhlIHVzZXIubmFtZSBhbmRcbiIKKyJ1c2VyLmVtYWlsIHNldHRpbmdzIGludG8geW91ciBwZXJzb25hbFxuIgorIn4vLmdpdGNvbmZpZyBmaWxlLlxuIgorbXNnc3RyICIiCisiXG4iCisiXG4iCisiRHUga2FuIGVyc8OkdHRhICVzXG4iCisibWVkIGF0dCBsw6RnZ2EgaW4gdsOkcmRlbiBmw7ZyIGluc3TDpGxsbmluZ2FybmFcbiIKKyJ1c2VyLm5hbWUgb2NoIHVzZXIuZW1haWwgaSBkaW4gcGVyc29ubGlnYVxuIgorIn4vLmdpdGNvbmZpZy1maWwuXG4iCisKKyM6IGxpYi9saW5lLnRjbDoxNworbXNnaWQgIkdvdG8gTGluZToiCittc2dzdHIgIkfDpSB0aWxsIHJhZDoiCisKKyM6IGxpYi9saW5lLnRjbDoyMworbXNnaWQgIkdvIgorbXNnc3RyICJHw6UiCisKKyM6IGxpYi9jb25zb2xlLnRjbDo1OQorbXNnaWQgIldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIkFyYmV0YXIuLi4gdsOkbnRhLi4uIgorCisjOiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2NoZWNrb3V0X29wLnRjbDoxNDYgbGliL3NzaGtleS50Y2w6NTUKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MzAKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAiU3TDpG5nIgorCisjOiBsaWIvY29uc29sZS50Y2w6MTg2Cittc2dpZCAiU3VjY2VzcyIKK21zZ3N0ciAiTHlja2FkZXMiCisKKyM6IGxpYi9jb25zb2xlLnRjbDoyMDAKK21zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCittc2dzdHIgIkZlbDogS29tbWFuZG8gbWlzc2x5Y2thZGVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAiSMOkbXRhciAlcyBmcsOlbiAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCittc2dzdHIgIsO2ZGVzZGlnZXJ0OiBLdW5kZSBpbnRlIHNsw6UgdXBwICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyBpbnRlLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxOTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29uZmlndXJlIHNpbXBsaWZpZWQgZ2l0LXB1bGwgZm9yICclcycuIgorbXNnc3RyICJLdW5kZSBpbnRlIGtvbmZpZ3VyZXJhIGbDtnJlbmtsYWQgZ2l0LXB1bGwgZsO2ciAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyMDIgbGliL2JyYW5jaF9yZW5hbWUudGNsOjEwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyByZWRhbi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLlxuIgorIlxuIgorIkl0IGNhbm5vdCBmYXN0LWZvcndhcmQgdG8gJXMuXG4iCisiQSBtZXJnZSBpcyByZXF1aXJlZC4iCittc2dzdHIgIiIKKyJHcmVuZW4gXCIlc1wiIGZpbm5zIHJlZGFuLlxuIgorIlxuIgorIkRlbiBrYW4gaW50ZSBzbmFiYnNwb2xhcyB0aWxsICVzLlxuIgorIkVuIHNhbW1hbnNsYWduaW5nIGtyw6R2cy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugc3RyYXRlZ3kgJyVzJyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAiU2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2luIFwiJXNcIiBzdMO2ZHMgaW50ZS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIG1lZCBhdHQgdXBwZGF0ZXJhIFwiJXNcIi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjc0Cittc2dpZCAiU3RhZ2luZyBhcmVhIChpbmRleCkgaXMgYWxyZWFkeSBsb2NrZWQuIgorbXNnc3RyICJLw7ZvbXLDpWRldCAoaW5kZXgpIMOkciByZWRhbiBsw6VzdC4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mjg5Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY3VycmVudCBicmFuY2ggY2FuIGJlIGNoYW5nZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJEZXQgc2VuYXN0ZSBpbmzDpHN0YSB0aWxsc3TDpW5kZXQgbW90c3ZhcmFyIGludGUgdGlsbHN0w6VuZGV0IGkgYXJraXZldC5cbiIKKyJcbiIKKyJFdHQgYW5uYXQgR2l0LXByb2dyYW0gaGFyIMOkbmRyYXQgYXJraXZldCBzZWRhbiBzZW5hc3RlIGF2c8O2a25pbmdlbi4gRHUgbcOlc3RlICIKKyJ1dGbDtnJhIGVuIG55IHPDtmtuaW5nIGlubmFuIGRlbiBha3R1ZWxsYSBncmVuZW4ga2FuIMOkbmRyYXMuXG4iCisiXG4iCisiU8O2a25pbmdlbiBrb21tZXIgYXR0IHN0YXJ0YXMgYXV0b21hdGlza3QgbnUuXG4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAiVXBwZGF0ZXJhciBhcmJldHNrYXRhbG9nZW4gdGlsbCBcIiVzXCIuLi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzQ2Cittc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCittc2dzdHIgImZpbGVyIHV0Y2hlY2thZGUiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvcnRlZCBjaGVja291dCBvZiAnJXMnIChmaWxlIGxldmVsIG1lcmdpbmcgaXMgcmVxdWlyZWQpLiIKK21zZ3N0ciAiQXZicnl0ZXIgdXRjaGVja25pbmcgYXYgXCIlc1wiIChzYW1tYW5zbGFnbmluZyBww6UgZmlsbml2w6Uga3LDpHZzKS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6Mzc3Cittc2dpZCAiRmlsZSBsZXZlbCBtZXJnZSByZXF1aXJlZC4iCittc2dzdHIgIlNhbW1hbnNsYWduaW5nIHDDpSBmaWxuaXbDpSBrcsOkdnMuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgorbXNnc3RyICJTdGFubmFyIHDDpSBncmVuZW4gXCIlc1wiLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NTIKK21zZ2lkICIiCisiWW91IGFyZSBubyBsb25nZXIgb24gYSBsb2NhbCBicmFuY2guXG4iCisiXG4iCisiSWYgeW91IHdhbnRlZCB0byBiZSBvbiBhIGJyYW5jaCwgY3JlYXRlIG9uZSBub3cgc3RhcnRpbmcgZnJvbSAnVGhpcyBEZXRhY2hlZCAiCisiQ2hlY2tvdXQnLiIKK21zZ3N0ciAiIgorIkR1IMOkciBpbnRlIGzDpG5ncmUgcMOlIGVuIGxva2FsIGdyZW4uXG4iCisiXG4iCisiT20gZHUgdmlsbGUgdmFyYSBww6UgZW4gZ3JlbiBza2FwYXIgZHUgZW4gbnUsIGJhc2VyYWQgcMOlIFwiRGVubmEgZnLDpW5rb3BwbGFkZSAiCisidXRjaGVja25pbmdcIi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIkNoZWNrYWRlIHV0IFwiJXNcIi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAiIgorIk9tIGR1IMOldGVyc3TDpGxsZXIgXCIlc1wiIHRpbGwgXCIlc1wiIGfDpXIgZsO2bGphbmRlIGluY2hlY2tuaW5nYXIgZsO2cmxvcmFkZToiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTU3Cittc2dpZCAiUmVjb3ZlcmluZyBsb3N0IGNvbW1pdHMgbWF5IG5vdCBiZSBlYXN5LiIKK21zZ3N0ciAiRGV0IGthbnNrZSBpbnRlIMOkciBzw6UgZW5rZWx0IGF0dCDDpXRlcnNrYXBhIGbDtnJsb3JhZGUgaW5jaGVja25pbmdhci4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJyVzJz8iCittc2dzdHIgIsOFdGVyc3TDpGxsYSBcIiVzXCI/IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU2NyBsaWIvbWVyZ2UudGNsOjE2NiBsaWIvdG9vbHNfZGxnLnRjbDozMzYKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIlZpc3VhbGlzZXJhIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6ODUKK21zZ2lkICJSZXNldCIKK21zZ3N0ciAiw4V0ZXJzdMOkbGwiCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTc5IGxpYi90cmFuc3BvcnQudGNsOjE0MSBsaWIvcmVtb3RlX2FkZC50Y2w6MzQKKyM6IGxpYi9icm93c2VyLnRjbDoyOTIgbGliL21lcmdlLnRjbDoxNzQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzAKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NDUgbGliL29wdGlvbi50Y2w6MTI3IGxpYi90b29sc19kbGcudGNsOjQxCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMDIgbGliL3Rvb2xzX2RsZy50Y2w6MzQ1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzcKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDozNAorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQXZicnl0IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjYzNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gc2V0IGN1cnJlbnQgYnJhbmNoLlxuIgorIlxuIgorIlRoaXMgd29ya2luZyBkaXJlY3RvcnkgaXMgb25seSBwYXJ0aWFsbHkgc3dpdGNoZWQuICBXZSBzdWNjZXNzZnVsbHkgdXBkYXRlZCAiCisieW91ciBmaWxlcywgYnV0IGZhaWxlZCB0byB1cGRhdGUgYW4gaW50ZXJuYWwgR2l0IGZpbGUuXG4iCisiXG4iCisiVGhpcyBzaG91bGQgbm90IGhhdmUgb2NjdXJyZWQuICAlcyB3aWxsIG5vdyBjbG9zZSBhbmQgZ2l2ZSB1cC4iCittc2dzdHIgIiIKKyJLdW5kZSBpbnRlIHN0w6RsbGEgaW4gYWt0dWVsbCBncmVuLlxuIgorIlxuIgorIkFyYmV0c2thdGFsb2dlbiBoYXIgYmFyYSB2w6R4bGF0cyBkZWx2aXMuIFZpIHVwcGRhdGVyYWRlIGZpbGVybmEgdXRhbiAiCisicHJvYmxlbSwgbWVuIGt1bmRlIGludGUgdXBwZGF0ZXJhIGVuIGludGVybiBmaWwgaSBHaXQuXG4iCisiXG4iCisiRGV0dGEgc2t1bGxlIGludGUgaGEgaMOkbnQuICVzIGtvbW1lciBudSBzdMOkbmdhcyBvY2ggZ2UgdXBwLiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiZmV0Y2ggJXMiCittc2dzdHIgImjDpG10YSAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gJXMiCittc2dzdHIgIkjDpG10YXIgbnlhIMOkbmRyaW5nYXIgZnLDpW4gJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicmVtb3RlIHBydW5lICVzIgorbXNnc3RyICJmasOkcnJib3J0dGFnbmluZyAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKK21zZ3N0ciAiVGFyIGJvcnQgc3DDpXJhbmRlIGdyZW5hciBzb20gdGFnaXRzIGJvcnQgZnLDpW4gJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjI1Cittc2dpZCAiZmV0Y2ggYWxsIHJlbW90ZXMiCittc2dzdHIgImjDpG10YSBhbGxhIGZqw6RycmFya2l2IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNgorbXNnaWQgIkZldGNoaW5nIG5ldyBjaGFuZ2VzIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIkjDpG10YXIgbnlhIMOkbmRyaW5nYXIgZnLDpW4gYWxsYSBmasOkcnJhcmtpdiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NDAKK21zZ2lkICJyZW1vdGUgcHJ1bmUgYWxsIHJlbW90ZXMiCittc2dzdHIgInJlbnNhIGFsbGEgZmrDpHJyYXJraXYiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjQxCittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIlJlbnNhciBzcMOlcmFuZGUgZ3JlbmFyIHNvbSB0YWdpdHMgYm9ydCwgZnLDpW4gYWxsYSBmasOkcnJhcmtpdiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NTQgbGliL3RyYW5zcG9ydC50Y2w6OTIgbGliL3RyYW5zcG9ydC50Y2w6MTEwCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicHVzaCAlcyIKK21zZ3N0ciAic8OkbmQgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyBjaGFuZ2VzIHRvICVzIgorbXNnc3RyICJTw6RuZGVyIMOkbmRyaW5nYXIgdGlsbCAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNaXJyb3JpbmcgdG8gJXMiCittc2dzdHIgIlNwZWdsYXIgdGlsbCAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAiU8OkbmRlciAlcyAlcyB0aWxsICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMzIKK21zZ2lkICJQdXNoIEJyYW5jaGVzIgorbXNnc3RyICJTw6RuZCBncmVuYXIiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE0NworbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKK21zZ3N0ciAiS8OkbGxncmVuYXIiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2MgorbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCittc2dzdHIgIkRlc3RpbmF0aW9uc2Fya2l2IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxNjUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MQorbXNnaWQgIlJlbW90ZToiCittc2dzdHIgIkZqw6RycmFya2l2OiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTg3IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NzIKK21zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgorbXNnc3RyICJHb2R0eWNrbGlnIHBsYXRzOiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjA1Cittc2dpZCAiVHJhbnNmZXIgT3B0aW9ucyIKK21zZ3N0ciAiw5Z2ZXJmw7ZyaW5nc2FsdGVybmF0aXYiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjIwNworbXNnaWQgIkZvcmNlIG92ZXJ3cml0ZSBleGlzdGluZyBicmFuY2ggKG1heSBkaXNjYXJkIGNoYW5nZXMpIgorbXNnc3RyICJUdmluZ2Egw7Z2ZXJza3Jpdm5pbmcgYXYgYmVmaW50bGlnIGdyZW4gKGthbiBrYXN0YSBib3J0IMOkbmRyaW5nYXIpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyMTEKK21zZ2lkICJVc2UgdGhpbiBwYWNrIChmb3Igc2xvdyBuZXR3b3JrIGNvbm5lY3Rpb25zKSIKK21zZ3N0ciAiQW52w6RuZCB0dW50IHBha2V0IChmw7ZyIGzDpW5nc2FtbWEgbsOkdHZlcmtzYW5zbHV0bmluZ2FyKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjE1Cittc2dpZCAiSW5jbHVkZSB0YWdzIgorbXNnc3RyICJUYSBtZWQgdGFnZ2FyIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjAKK21zZ2lkICJBZGQgUmVtb3RlIgorbXNnc3RyICJMw6RnZyB0aWxsIGZqw6RycmFya2l2IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MjUKK21zZ2lkICJBZGQgTmV3IFJlbW90ZSIKK21zZ3N0ciAiTMOkZ2cgdGlsbCBueXR0IGZqw6RycmFya2l2IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MzAgbGliL3Rvb2xzX2RsZy50Y2w6MzcKK21zZ2lkICJBZGQiCittc2dzdHIgIkzDpGdnIHRpbGwiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozOQorbXNnaWQgIlJlbW90ZSBEZXRhaWxzIgorbXNnc3RyICJEZXRhbGplciBmw7ZyIGZqw6RycmFya2l2IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NDEgbGliL3Rvb2xzX2RsZy50Y2w6NTEgbGliL2JyYW5jaF9jcmVhdGUudGNsOjQ0Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5hbW46IgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgIlBsYXRzOiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjYwCittc2dpZCAiRnVydGhlciBBY3Rpb24iCittc2dzdHIgIll0dGVybGlnYXJlIMOldGfDpHJkIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjMKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiSMOkbXRhIG9tZWRlbGJhcnQiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2OQorbXNnaWQgIkluaXRpYWxpemUgUmVtb3RlIFJlcG9zaXRvcnkgYW5kIFB1c2giCittc2dzdHIgIkluaXRpZXJhIGZqw6RycmFya2l2IG9jaCBzw6RuZCB0aWxsIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzUKK21zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgorbXNnc3RyICJHw7ZyIGluZ2VudCBtZXIgbnUiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMDAKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IGEgcmVtb3RlIG5hbWUuIgorbXNnc3RyICJBbmdlIGV0dCBuYW1uIGbDtnIgZmrDpHJyYXJraXZldC4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIHJlbW90ZSBuYW1lLiIKK21zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyBzb20gbmFtbiBww6UgZmrDpHJyYXJraXZldC4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHJlbW90ZSAnJXMnIG9mIGxvY2F0aW9uICclcycuIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIGZqw6RycmFya2l2ZXQgXCIlc1wiIHDDpSBwbGF0c2VuIFwiJXNcIi4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyB0aGUgJXMiCittc2dzdHIgIkjDpG10YXIgJXMiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEbyBub3Qga25vdyBob3cgdG8gaW5pdGlhbGl6ZSByZXBvc2l0b3J5IGF0IGxvY2F0aW9uICclcycuIgorbXNnc3RyICJWZXQgaW50ZSBodXIgYXJraXZldCBww6UgcGxhdHNlbiBcIiVzXCIgc2thbGwgaW5pdGllcmFzLiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjE2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgdXAgdGhlICVzIChhdCAlcykiCittc2dzdHIgIktvbmZpZ3VyZXJhciAlcyAocMOlICVzKSIKKworIzogbGliL2Jyb3dzZXIudGNsOjE3Cittc2dpZCAiU3RhcnRpbmcuLi4iCittc2dzdHIgIlN0YXJ0YXIuLi4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNworbXNnaWQgIkZpbGUgQnJvd3NlciIKK21zZ3N0ciAiRmlsYmzDpGRkcmFyZSIKKworIzogbGliL2Jyb3dzZXIudGNsOjEzMiBsaWIvYnJvd3Nlci50Y2w6MTQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyAlcy4uLiIKK21zZ3N0ciAiTMOkc2VyICVzLi4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTkzCittc2dpZCAiW1VwIFRvIFBhcmVudF0iCittc2dzdHIgIltVcHAgdGlsbCBmw7Zyw6RsZGVyXSIKKworIzogbGliL2Jyb3dzZXIudGNsOjI3NSBsaWIvYnJvd3Nlci50Y2w6MjgyCittc2dpZCAiQnJvd3NlIEJyYW5jaCBGaWxlcyIKK21zZ3N0ciAiQmzDpGRkcmEgZmlsZXIgcMOlIGdyZW5lbiIKKworIzogbGliL2Jyb3dzZXIudGNsOjI4OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQyMgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDkgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MTgKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3NAorbXNnaWQgIkJyb3dzZSIKK21zZ3N0ciAiQmzDpGRkcmEiCisKKyM6IGxpYi9icm93c2VyLnRjbDoyOTcgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzUgbGliL3Rvb2xzX2RsZy50Y2w6MzIxCittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIlJldmlzaW9uIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzCittc2dpZCAiIgorIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgorbXNnc3RyICIiCisiS2FuIGludGUgc2zDpSBpaG9wIHZpZCB1dMO2a25pbmcuXG4iCisiXG4iCisiRHUgbcOlc3RlIGfDtnJhIGbDpHJkaWcgdXTDtmtuaW5nZW4gYXYgaW5jaGVja25pbmdlbiBpbm5hbiBkdSBww6Viw7ZyamFyIG7DpWdvbiAiCisic2xhZ3Mgc2FtbWFuc2xhZ25pbmcuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjcKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGEgbWVyZ2UgY2FuIGJlIHBlcmZvcm1lZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIkRldCBzZW5hc3RlIGlubMOkc3RhIHRpbGxzdMOlbmRldCBtb3RzdmFyYXIgaW50ZSB0aWxsc3TDpW5kZXQgaSBhcmtpdmV0LlxuIgorIlxuIgorIkV0dCBhbm5hdCBHaXQtcHJvZ3JhbSBoYXIgw6RuZHJhdCBhcmtpdmV0IHNlZGFuIHNlbmFzdGUgYXZzw7ZrbmluZ2VuLiBEdSBtw6VzdGUgIgorInV0ZsO2cmEgZW4gbnkgc8O2a25pbmcgaW5uYW4gZHUga2FuIHV0ZsO2cmEgZW4gc2FtbWFuc2xhZ25pbmcuXG4iCisiXG4iCisiU8O2a25pbmdlbiBrb21tZXIgYXR0IHN0YXJ0YXMgYXV0b21hdGlza3QgbnUuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY29uZmxpY3RlZCBtZXJnZS5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuXG4iCisiXG4iCisiWW91IG11c3QgcmVzb2x2ZSB0aGVtLCBzdGFnZSB0aGUgZmlsZSwgYW5kIGNvbW1pdCB0byBjb21wbGV0ZSB0aGUgY3VycmVudCAiCisibWVyZ2UuICBPbmx5IHRoZW4gY2FuIHlvdSBiZWdpbiBhbm90aGVyIG1lcmdlLlxuIgorbXNnc3RyICIiCisiRHUgw6RyIG1pdHQgaSBlbiBzYW1tYW5zbGFnbmluZyBtZWQga29uZmxpa3Rlci5cbiIKKyJcbiIKKyJGaWxlbiAlcyBoYXIgc2FtbWFuc2xhZ25pbmdza29uZmxpa3Rlci5cbiIKKyJcbiIKKyJEdSBtw6VzdGUgbMO2c2EgZGVtLCBrw7ZhIGZpbGVuIG9jaCBjaGVja2EgaW4gZsO2ciBhdHQgZnVsbGJvcmRhIGRlbiBha3R1ZWxsYSAiCisic2FtbWFuc2xhZ25pbmdlbi4gTsOkciBkdSBnam9ydCBkZXQga2FuIGR1IHDDpWLDtnJqYSBlbiBueSBzYW1tYW5zbGFnbmluZy5cbiIKKworIzogbGliL21lcmdlLnRjbDo1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFuZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBpcyBtb2RpZmllZC5cbiIKKyJcbiIKKyJZb3Ugc2hvdWxkIGNvbXBsZXRlIHRoZSBjdXJyZW50IGNvbW1pdCBiZWZvcmUgc3RhcnRpbmcgYSBtZXJnZS4gIERvaW5nIHNvICIKKyJ3aWxsIGhlbHAgeW91IGFib3J0IGEgZmFpbGVkIG1lcmdlLCBzaG91bGQgdGhlIG5lZWQgYXJpc2UuXG4iCittc2dzdHIgIiIKKyJEdSDDpHIgbWl0dCBpIGVuIMOkbmRyaW5nLlxuIgorIlxuIgorIkZpbGVuICVzIGhhciDDpG5kcmluZ2FyLlxuIgorIlxuIgorIkR1IGLDtnIgZnVsbGJvcmRhIGRlbiBha3R1ZWxsYSBpbmNoZWNrbmluZ2VuIGlubmFuIGR1IHDDpWLDtnJqYXIgZW4gIgorInNhbW1hbnNsYWduaW5nLiBPbSBkdSBnw7ZyIGRldCBibGlyIGRldCBlbmtsYXJlIGF0dCBhdmJyeXRhIGVuIG1pc3NseWNrYWQgIgorInNhbW1hbnNsYWduaW5nLCBvbSBkZXQgc2t1bGxlIHZhcmEgbsO2ZHbDpG5kaWd0LlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEwOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIG9mICVzIgorbXNnc3RyICIlcyBhdiAlcyIKKworIzogbGliL21lcmdlLnRjbDoxMjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnaW5nICVzIGFuZCAlcy4uLiIKK21zZ3N0ciAiU2zDpXIgaWhvcCAlcyBvY2ggJXMuLi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMzCittc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCittc2dzdHIgIlNhbW1hbnNsYWduaW5nZW4gYXZzbHV0YWRlcyBmcmFtZ8OlbmdzcmlrdC4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTM1Cittc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCittc2dzdHIgIlNhbW1hbnNsYWduaW5nZW4gbWlzc2x5Y2thZGVzLiBEdSBtw6VzdGUgbMO2c2Ega29uZmxpa3Rlcm5hLiIKKworIzogbGliL21lcmdlLnRjbDoxNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBJbnRvICVzIgorbXNnc3RyICJTbMOlIGlob3AgaSAlcyIKKworIzogbGliL21lcmdlLnRjbDoxNzkKK21zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKK21zZ3N0ciAiUmV2aXNpb25lciBhdHQgc2zDpSBpaG9wIgorCisjOiBsaWIvbWVyZ2UudGNsOjIxNAorbXNnaWQgIiIKKyJDYW5ub3QgYWJvcnQgd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0LlxuIgorbXNnc3RyICIiCisiS2FuIGludGUgYXZicnl0YSB2aWQgdXTDtmtuaW5nLlxuIgorIlxuIgorIkR1IG3DpXN0ZSBnw7ZyYSBkaWcgZsOkcmRpZyBtZWQgYXR0IHV0w7ZrYSBpbmNoZWNrbmluZ2VuLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjIyNAorbXNnaWQgIiIKKyJBYm9ydCBtZXJnZT9cbiIKKyJcbiIKKyJBYm9ydGluZyB0aGUgY3VycmVudCBtZXJnZSB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIGFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlPyIKK21zZ3N0ciAiIgorIkF2YnJ5dCBzYW1tYW5zbGFnbmluZz9cbiIKKyJcbiIKKyJPbSBkdSBhdmJyeXRlciBzYW1tYW5zbGFnbmluZ2VuIGtvbW1lciAqQUxMQSogZWogaW5jaGVja2FkZSDDpG5kcmluZ2FyIGF0dCBnw6UgIgorImbDtnJsb3JhZGUuXG4iCisiXG4iCisiR8OlIHZpZGFyZSBtZWQgYXR0IGF2YnJ5dGEgZGVuIGFrdHVlbGxhIHNhbW1hbnNsYWduaW5nZW4/IgorCisjOiBsaWIvbWVyZ2UudGNsOjIzMAorbXNnaWQgIiIKKyJSZXNldCBjaGFuZ2VzP1xuIgorIlxuIgorIlJlc2V0dGluZyB0aGUgY2hhbmdlcyB3aWxsIGNhdXNlICpBTEwqIHVuY29tbWl0dGVkIGNoYW5nZXMgdG8gYmUgbG9zdC5cbiIKKyJcbiIKKyJDb250aW51ZSB3aXRoIHJlc2V0dGluZyB0aGUgY3VycmVudCBjaGFuZ2VzPyIKK21zZ3N0ciAiIgorIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXI/XG4iCisiXG4iCisiT20gZHUgw6V0ZXJzdMOkbGxlciDDpG5kcmluZ2FybmEga29tbWVyICpBTExBKiBlaiBpbmNoZWNrYWRlIMOkbmRyaW5nYXIgYXR0IGfDpSAiCisiZsO2cmxvcmFkZS5cbiIKKyJcbiIKKyJHw6UgdmlkYXJlIG1lZCBhdHQgw6V0ZXJzdMOkbGxhIGRlIGFrdHVlbGxhIMOkbmRyaW5nYXJuYT8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjQxCittc2dpZCAiQWJvcnRpbmciCittc2dzdHIgIkF2YnJ5dGVyIgorCisjOiBsaWIvbWVyZ2UudGNsOjI0MQorbXNnaWQgImZpbGVzIHJlc2V0IgorbXNnc3RyICJmaWxlciDDpXRlcnN0w6RsbGRhIgorCisjOiBsaWIvbWVyZ2UudGNsOjI2OQorbXNnaWQgIkFib3J0IGZhaWxlZC4iCittc2dzdHIgIk1pc3NseWNrYWRlcyBhdmJyeXRhLiIKKworIzogbGliL21lcmdlLnRjbDoyNzEKK21zZ2lkICJBYm9ydCBjb21wbGV0ZWQuICBSZWFkeS4iCittc2dzdHIgIkF2YnJ5dG5pbmcgZnVsbGJvcmRhZC4gUmVkby4iCisKKyM6IGxpYi90b29scy50Y2w6NzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nICVzIHJlcXVpcmVzIGEgc2VsZWN0ZWQgZmlsZS4iCittc2dzdHIgIkbDtnIgYXR0IHN0YXJ0YSAlcyBtw6VzdGUgZHUgdsOkbGphIGVuIGZpbC4iCisKKyM6IGxpYi90b29scy50Y2w6OTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICUxJHMgb24gZmlsZSBcIiUyJHNcIj8iCittc2dzdHIgIsOEciBkdSBzw6RrZXIgcMOlIGF0dCBkdSB2aWxsIHN0YXJ0YSAlMSRzIG1lZCBmaWxlbiBcIiUyJHNcIj8iCisKKyM6IGxpYi90b29scy50Y2w6OTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKK21zZ3N0ciAiw4RyIGR1IHPDpGtlciBww6UgYXR0IGR1IHZpbGwgc3RhcnRhICVzPyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sOiAlcyIKK21zZ3N0ciAiVmVya3R5ZzogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUnVubmluZzogJXMiCittc2dzdHIgIkV4ZWt2ZXJhcjogJXMiCisKKyM6IGxpYi90b29scy50Y2w6MTU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAlcyIKK21zZ3N0ciAiVmVya3R5Z2V0IGF2c2x1dGFkZXMgZnJhbWfDpW5nc3Jpa3Q6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE1NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKK21zZ3N0ciAiVmVya3R5Z2V0IG1pc3NseWNrYWRlczogJXMiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjE2IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjIxCittc2dpZCAiQ2hlY2tvdXQgQnJhbmNoIgorbXNnc3RyICJDaGVja2EgdXQgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjYKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiQ2hlY2thIHV0IgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvb3B0aW9uLnRjbDozMTAgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5Cittc2dpZCAiT3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6NDIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjkyCittc2dpZCAiRmV0Y2ggVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICJIw6RtdGEgc3DDpXJhbmRlIGdyZW4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ3Cittc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgorbXNnc3RyICJLb3BwbGEgYm9ydCBmcsOlbiBsb2thbCBncmVuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKK21zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbHByb2dyYW1tZXQgc3TDtmRzIGludGUiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJTdGF2bmluZ3Nrb250cm9sbCDDpHIgZWogdGlsbGfDpG5nbGlnIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NjgKK21zZ2lkICJJbnZhbGlkIHNwZWxsIGNoZWNraW5nIGNvbmZpZ3VyYXRpb24iCittc2dzdHIgIk9naWx0aWcgaW5zdMOkbGxuaW5nIGbDtnIgc3Rhdm5pbmdza29udHJvbGwiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyBkaWN0aW9uYXJ5IHRvICVzLiIKK21zZ3N0ciAiw4V0ZXJzdMOkbGxlciBvcmRsaXN0YW4gdGlsbCAlcy4iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MworbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCittc2dzdHIgIlN0YXZuaW5nc2tvbnRyb2xsIG1pc3NseWNrYWRlcyB0eXN0IHZpZCBzdGFydCIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjgwCittc2dpZCAiVW5yZWNvZ25pemVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIlN0YXZuaW5nc2tvbnRyb2xscHJvZ3JhbW1ldCBrw6RubnMgaW50ZSBpZ2VuIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Cittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgIkluZ2EgZsO2cnNsYWciCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKK21zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIk92w6RudGF0IGZpbHNsdXQgZnLDpW4gc3Rhdm5pbmdza29udHJvbGwiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozOTIKK21zZ2lkICJTcGVsbCBDaGVja2VyIEZhaWxlZCIKK21zZ3N0ciAiU3Rhdm5pbmdza29udHJvbGwgbWlzc2x5Y2thZGVzIgorCisjOiBsaWIvc3RhdHVzX2Jhci50Y2w6ODcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyAuLi4gJSppIG9mICUqaSAlcyAoJTNpJSUpIgorbXNnc3RyICIlcy4uLiAlKmkgYXYgJSppICVzICglM2klJSkiCisKKyM6IGxpYi9kaWZmLnRjbDo3NworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJObyBkaWZmZXJlbmNlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyIlcyBoYXMgbm8gY2hhbmdlcy5cbiIKKyJcbiIKKyJUaGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhpcyBmaWxlIHdhcyB1cGRhdGVkIGJ5IGFub3RoZXIgYXBwbGljYXRpb24sIGJ1dCAiCisidGhlIGNvbnRlbnQgd2l0aGluIHRoZSBmaWxlIHdhcyBub3QgY2hhbmdlZC5cbiIKKyJcbiIKKyJBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byBmaW5kIG90aGVyIGZpbGVzIHdoaWNoIG1heSBoYXZlICIKKyJ0aGUgc2FtZSBzdGF0ZS4iCittc2dzdHIgIiIKKyJIaXR0YWRlIGluZ2Egc2tpbGxuYWRlci5cbiIKKyJcbiIKKyIlcyBpbm5laMOlbGxlciBpbmdhIMOkbmRyaW5nYXIuXG4iCisiXG4iCisiTW9kaWZpZXJpbmdzZGF0dW0gZsO2ciBmaWxlbiB1cHBkYXRlcmFkZXMgYXYgZXR0IGFubmF0IHByb2dyYW0sIG1lbiAiCisiaW5uZWjDpWxsZXQgaSBmaWxlbiBoYXIgaW50ZSDDpG5kcmF0cy5cbiIKKyJcbiIKKyJFbiBzw7ZrbmluZyBrb21tZXIgYXV0b21hdGlza3QgYXR0IHN0YXJ0YXMgZsO2ciBhdHQgaGl0dGEgYW5kcmEgZmlsZXIgc29tIGthbiAiCisidmFyYSBpIHNhbW1hIHRpbGxzdMOlbmQuIgorCisjOiBsaWIvZGlmZi50Y2w6MTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyBkaWZmIG9mICVzLi4uIgorbXNnc3RyICJMw6RzZXIgZGlmZmVyZW5zIGbDtnIgJXMuLi4iCisKKyM6IGxpYi9kaWZmLnRjbDoxNDAKK21zZ2lkICIiCisiTE9DQUw6IGRlbGV0ZWRcbiIKKyJSRU1PVEU6XG4iCittc2dzdHIgIiIKKyJMT0tBTDogYm9ydHRhZ2VuXG4iCisiRkrDhFJSOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTQ1Cittc2dpZCAiIgorIlJFTU9URTogZGVsZXRlZFxuIgorIkxPQ0FMOlxuIgorbXNnc3RyICIiCisiRkrDhFJSOiBib3J0dGFnZW5cbiIKKyJMT0tBTDpcbiIKKworIzogbGliL2RpZmYudGNsOjE1MgorbXNnaWQgIkxPQ0FMOlxuIgorbXNnc3RyICJMT0tBTDpcbiIKKworIzogbGliL2RpZmYudGNsOjE1NQorbXNnaWQgIlJFTU9URTpcbiIKK21zZ3N0ciAiRkrDhFJSOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjE3IGxpYi9kaWZmLnRjbDozNTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZGlzcGxheSAlcyIKK21zZ3N0ciAiS2FuIGludGUgdmlzYSAlcyIKKworIzogbGliL2RpZmYudGNsOjIxOAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZmlsZToiCittc2dzdHIgIkZlbCB2aWQgbMOkc25pbmcgYXYgZmlsOiIKKworIzogbGliL2RpZmYudGNsOjIyNQorbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKK21zZ3N0ciAiR2l0YXJraXYgKHVuZGVycHJvamVrdCkiCisKKyM6IGxpYi9kaWZmLnRjbDoyMzcKK21zZ2lkICIqIEJpbmFyeSBmaWxlIChub3Qgc2hvd2luZyBjb250ZW50KS4iCittc2dzdHIgIiogQmluw6RyZmlsICh2aXNhciBpbnRlIGlubmVow6VsbGV0KS4iCisKKyM6IGxpYi9kaWZmLnRjbDoyNDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiKiBVbnRyYWNrZWQgZmlsZSBpcyAlZCBieXRlcy5cbiIKKyIqIFNob3dpbmcgb25seSBmaXJzdCAlZCBieXRlcy5cbiIKK21zZ3N0ciAiIgorIiogRGVuIG9zcMOlcmFkZSBmaWxlbiDDpHIgJWQgYnl0ZS5cbiIKKyIqIFZpc2FyIGVuZGFzdCBpbmxlZGFuZGUgJWQgYnl0ZS5cbiIKKworIzogbGliL2RpZmYudGNsOjI0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyIqIFVudHJhY2tlZCBmaWxlIGNsaXBwZWQgaGVyZSBieSAlcy5cbiIKKyIqIFRvIHNlZSB0aGUgZW50aXJlIGZpbGUsIHVzZSBhbiBleHRlcm5hbCBlZGl0b3IuXG4iCittc2dzdHIgIiIKKyJcbiIKKyIqIERlbiBvc3DDpXJhZGUgZmlsZW4ga2xpcHB0ZXMgaMOkciBhdiAlcy5cbiIKKyIqIEbDtnIgYXR0IHNlIGhlbGEgZmlsZW4sIGFudsOkbmQgZXR0IGV4dGVybnQgcmVkaWdlcmluZ3Nwcm9ncmFtLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MzU2IGxpYi9ibGFtZS50Y2w6MTEyOAorbXNnaWQgIkVycm9yIGxvYWRpbmcgZGlmZjoiCittc2dzdHIgIkZlbCB2aWQgaW5sw6RzbmluZyBhdiBkaWZmZXJlbnM6IgorCisjOiBsaWIvZGlmZi50Y2w6NTc4Cittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCBkZW4gdmFsZGEgZGVsZW4gZnLDpW4ga8O2bi4iCisKKyM6IGxpYi9kaWZmLnRjbDo1ODUKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgZGVuIHZhbGRhIGRlbGVuIHRpbGwga8O2bi4iCisKKyM6IGxpYi9kaWZmLnRjbDo2NjQKK21zZ2lkICJGYWlsZWQgdG8gdW5zdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IGRlbiB2YWxkYSByYWRlbiBmcsOlbiBrw7ZuLiIKKworIzogbGliL2RpZmYudGNsOjY3MgorbXNnaWQgIkZhaWxlZCB0byBzdGFnZSBzZWxlY3RlZCBsaW5lLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RnZ2EgdGlsbCBkZW4gdmFsZGEgcmFkZW4gdGlsbCBrw7ZuLiIKKworIzogbGliL3JlbW90ZS50Y2w6MjAwCittc2dpZCAiUHVzaCB0byIKK21zZ3N0ciAiU8OkbmQgdGlsbCIKKworIzogbGliL3JlbW90ZS50Y2w6MjE4Cittc2dpZCAiUmVtb3ZlIFJlbW90ZSIKK21zZ3N0ciAiVGEgYm9ydCBmasOkcnJhcmtpdiIKKworIzogbGliL3JlbW90ZS50Y2w6MjIzCittc2dpZCAiUHJ1bmUgZnJvbSIKK21zZ3N0ciAiVGEgYm9ydCBmcsOlbiIKKworIzogbGliL3JlbW90ZS50Y2w6MjI4Cittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAiSMOkbXRhIGZyw6VuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQxCittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJWw6RsaiIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo1NQorbXNnaWQgIkZvbnQgRmFtaWx5IgorbXNnc3RyICJUZWNrZW5zbml0dHNmYW1pbGoiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzYKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIlN0b3JsZWsiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6OTMKK21zZ2lkICJGb250IEV4YW1wbGUiCittc2dzdHIgIkV4ZW1wZWwiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTA1Cittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyJEZXR0YSDDpHIgZW4gZXhlbXBlbHRleHQuXG4iCisiT20gZHUgdHlja2VyIG9tIGRlbiBow6RyIHRleHRlbiBrYW4gZGVuIHZhcmEgZGl0dCB0ZWNrZW5zbml0dC4iCisKKyM6IGxpYi9vcHRpb24udGNsOjExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBnbG9iYWwgZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiRGVuIGdsb2JhbGEgdGVja2Vua29kbmluZ2VuIFwiJXNcIiDDpHIgb2dpbHRpZyIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiQXJraXZldHMgdGVja2Vua29kbmluZyBcIiVzXCIgw6RyIG9naWx0aWciCisKKyM6IGxpYi9vcHRpb24udGNsOjExOQorbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgIsOFdGVyc3TDpGxsIHN0YW5kYXJkdsOkcmRlbiIKKworIzogbGliL29wdGlvbi50Y2w6MTIzCittc2dpZCAiU2F2ZSIKK21zZ3N0ciAiU3BhcmEiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIFJlcG9zaXRvcnkiCittc2dzdHIgIkFya2l2ZXQgJXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjEzNAorbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCittc2dzdHIgIkdsb2JhbHQgKGFsbGEgYXJraXYpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDAKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgIkFudsOkbmRhcm5hbW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MQorbXNnaWQgIkVtYWlsIEFkZHJlc3MiCittc2dzdHIgIkUtcG9zdGFkcmVzcyIKKworIzogbGliL29wdGlvbi50Y2w6MTQzCittc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCittc2dzdHIgIlN1bW1lcmEgc2FtbWFuc2xhZ25pbmdzaW5jaGVja25pbmdhciIKKworIzogbGliL29wdGlvbi50Y2w6MTQ0Cittc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgorbXNnc3RyICJQcmF0c2FtaGV0IGbDtnIgc2FtbWFuc2xhZ25pbmdhciIKKworIzogbGliL29wdGlvbi50Y2w6MTQ1Cittc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKK21zZ3N0ciAiVmlzYSBkaWZmc3RhdGlzdGlrIGVmdGVyIHNhbW1hbnNsYWduaW5nIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDYKK21zZ2lkICJVc2UgTWVyZ2UgVG9vbCIKK21zZ3N0ciAiQW52w6RuZCB2ZXJrdHlnIGbDtnIgc2FtbWFuc2xhZ25pbmciCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OAorbXNnaWQgIlRydXN0IEZpbGUgTW9kaWZpY2F0aW9uIFRpbWVzdGFtcHMiCittc2dzdHIgIkxpdGEgcMOlIGZpbMOkbmRyaW5nc3RpZHNzdMOkbXBsYXIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OQorbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKK21zZ3N0ciAiU3TDpGRhIHNww6VyYWRlIGdyZW5hciB2aWQgaMOkbXRuaW5nIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTAKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2hlcyIKK21zZ3N0ciAiTWF0Y2hhIHNww6VyYWRlIGdyZW5hciIKKworIzogbGliL29wdGlvbi50Y2w6MTUxCittc2dpZCAiVXNlIFRleHRjb252IEZvciBEaWZmcyBhbmQgQmxhbWVzIgorbXNnc3RyICJBbnbDpG5kIFRleHRjb252IGbDtnIgZGlmZiBvY2gga2xhbmRyaW5nIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTIKK21zZ2lkICJCbGFtZSBDb3B5IE9ubHkgT24gQ2hhbmdlZCBGaWxlcyIKK21zZ3N0ciAiS2xhbmRyYSBrb3BpZXJpbmcgYmFyYSBpIMOkbmRyYWRlIGZpbGVyIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTMKK21zZ2lkICJNYXhpbXVtIExlbmd0aCBvZiBSZWNlbnQgUmVwb3NpdG9yaWVzIExpc3QiCittc2dzdHIgIk1heCBsw6RuZ2QgZsO2ciBsaXN0YSDDtnZlciB0aWRpZ2FyZSBhcmtpdiIKKworIzogbGliL29wdGlvbi50Y2w6MTU0Cittc2dpZCAiTWluaW11bSBMZXR0ZXJzIFRvIEJsYW1lIENvcHkgT24iCittc2dzdHIgIk1pbnN0YSBhbnRhbCB0ZWNrZW4gYXR0IGtsYW5kcmEga29waWVyaW5nIGbDtnIiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NQorbXNnaWQgIkJsYW1lIEhpc3RvcnkgQ29udGV4dCBSYWRpdXMgKGRheXMpIgorbXNnc3RyICJIaXN0b3Jpa3JhZGllIGbDtnIga2xhbmRyaW5nIChkYWdhcikiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NgorbXNnaWQgIk51bWJlciBvZiBEaWZmIENvbnRleHQgTGluZXMiCittc2dzdHIgIkFudGFsIHJhZGVyIHNhbW1hbmhhbmcgaSBkaWZmZXJlbnNlciIKKworIzogbGliL29wdGlvbi50Y2w6MTU3Cittc2dpZCAiQWRkaXRpb25hbCBEaWZmIFBhcmFtZXRlcnMiCittc2dzdHIgIll0dGVybGlnYXJlIGRpZmYtcGFyYW1ldHJhciIKKworIzogbGliL29wdGlvbi50Y2w6MTU4Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2UgVGV4dCBXaWR0aCIKK21zZ3N0ciAiVGV4dGJyZWRkIGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZSIKKworIzogbGliL29wdGlvbi50Y2w6MTU5Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJNYWxsIGbDtnIgbmFtbiBww6UgbnlhIGdyZW5hciIKKworIzogbGliL29wdGlvbi50Y2w6MTYwCittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICJTdGFuZGFyZHRlY2tlbmtvZG5pbmcgZsO2ciBmaWxpbm5laMOlbGwiCisKKyM6IGxpYi9vcHRpb24udGNsOjE2MQorbXNnaWQgIldhcm4gYmVmb3JlIGNvbW1pdHRpbmcgdG8gYSBkZXRhY2hlZCBoZWFkIgorbXNnc3RyICJWYXJuYSBmw7ZyIGluY2hlY2tuaW5nIHDDpSBmcsOlbmtvcHBsYXQgaHV2dWQiCisKKyM6IGxpYi9vcHRpb24udGNsOjE2MgorbXNnaWQgIlN0YWdpbmcgb2YgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJLw7ZhIG9zcMOlcmFkZSBmaWxlciIKKworIzogbGliL29wdGlvbi50Y2w6MTYzCittc2dpZCAiU2hvdyB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIlZpc2Egb3Nww6VyYWRlIGZpbGVyIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNjQKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAiQmxhbmtzdGVnIGbDtnIgdGFidWxhdG9ydGVja2VuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyMTAKK21zZ2lkICJDaGFuZ2UiCittc2dzdHIgIsOEbmRyYSIKKworIzogbGliL29wdGlvbi50Y2w6MjU0Cittc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCittc2dzdHIgIlN0YXZuaW5nc29yZGxpc3RhOiIKKworIzogbGliL29wdGlvbi50Y2w6Mjg0Cittc2dpZCAiQ2hhbmdlIEZvbnQiCittc2dzdHIgIkJ5dCB0ZWNrZW5zbml0dCIKKworIzogbGliL29wdGlvbi50Y2w6Mjg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hvb3NlICVzIgorbXNnc3RyICJWw6RsaiAlcyIKKworIzogbGliL29wdGlvbi50Y2w6Mjk0Cittc2dpZCAicHQuIgorbXNnc3RyICJwLiIKKworIzogbGliL29wdGlvbi50Y2w6MzA4Cittc2dpZCAiUHJlZmVyZW5jZXMiCittc2dzdHIgIkluc3TDpGxsbmluZ2FyIgorCisjOiBsaWIvb3B0aW9uLnRjbDozNDUKK21zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgorbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBoZWx0IHNwYXJhIGFsdGVybmF0aXY6IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKK21zZ3N0ciAiVHZpbmdhIGzDtnNuaW5nIGF0dCBhbnbDpG5kYSBiYXN2ZXJzaW9uZW4/IgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo5Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGlzIGJyYW5jaD8iCittc2dzdHIgIlR2aW5nYSBsw7ZzbmluZyBhdHQgYW52w6RuZGEgZGVuIGFrdHVlbGxhIGdyZW5lbj8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKK21zZ3N0ciAiVHZpbmdhIGzDtnNuaW5nIGF0dCBhbnbDpG5kYSBkZW4gYW5kcmEgZ3JlbmVuPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKyJPYnNlcnZlcmEgYXR0IGRpZmZlbiBlbmRhc3QgdmlzYXIgZGUgw6RuZHJpbmdhciBzb20gc3TDpXIgaSBrb25mbGlrdC5cbiIKKyJcbiIKKyIlcyBrb21tZXIgYXR0IHNrcml2YXMgw7Z2ZXIuXG4iCisiXG4iCisiRHUgbcOlc3RlIHN0YXJ0YSBvbSBzYW1tYW5zbGFnbmluZ2VuIGbDtnIgYXR0IGfDtnJhIGRlbiBow6RyIG9wZXJhdGlvbmVuIG9nam9yZC4iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBzZWVtcyB0byBoYXZlIHVucmVzb2x2ZWQgY29uZmxpY3RzLCBzdGlsbCBzdGFnZT8iCittc2dzdHIgIkZpbGVuICVzIHZlcmthciBpbm5laMOlbGxhIG9sw7ZzdGEga29uZmxpa3Rlci4gVmlsbCBkdSBrw7ZhIMOkbmTDpT8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nIHJlc29sdXRpb24gZm9yICVzIgorbXNnc3RyICJMw6RnZ2VyIHRpbGwgbMO2c25pbmcgZsO2ciAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQxCittc2dpZCAiQ2Fubm90IHJlc29sdmUgZGVsZXRpb24gb3IgbGluayBjb25mbGljdHMgdXNpbmcgYSB0b29sIgorbXNnc3RyICJLYW4gaW50ZSBsw7ZzYSBib3J0dGFnbmluZ3MtIGVsbGVyIGzDpG5ra29uZmxpa3RlciBtZWQgZXR0IHZlcmt0eWciCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0NgorbXNnaWQgIkNvbmZsaWN0IGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIktvbmZsaWt0ZmlsIGV4aXN0ZXJhciBpbnRlIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKK21zZ3N0ciAiSW50ZSBldHQgZ3JhZmlza3QgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nOiAlcyIKKworIzogbGliL21lcmdldG9vbC50Y2w6Mjc1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdXBwb3J0ZWQgbWVyZ2UgdG9vbCAnJXMnIgorbXNnc3RyICJWZXJrdHlnZXQgXCIlc1wiIGbDtnIgc2FtbWFuc2xhZ25pbmcgc3TDtmRzIGludGUiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMxMAorbXNnaWQgIk1lcmdlIHRvb2wgaXMgYWxyZWFkeSBydW5uaW5nLCB0ZXJtaW5hdGUgaXQ/IgorbXNnc3RyICJWZXJrdHlnZXQgZsO2ciBzYW1tYW5zbGFnbmluZyBrw7ZycyByZWRhbi4gVmlsbCBkdSBhdnNsdXRhIGRldD8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjMzMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciByZXRyaWV2aW5nIHZlcnNpb25zOlxuIgorIiVzIgorbXNnc3RyICIiCisiRmVsIHZpZCBow6RtdG5pbmcgYXYgdmVyc2lvbmVyOlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IHN0YXJ0IHRoZSBtZXJnZSB0b29sOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSBzdGFydGEgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNTQKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgIkvDtnIgdmVya3R5ZyBmw7ZyIHNhbW1hbnNsYWduaW5nLi4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozODIgbGliL21lcmdldG9vbC50Y2w6MzkwCittc2dpZCAiTWVyZ2UgdG9vbCBmYWlsZWQuIgorbXNnc3RyICJWZXJrdHlnZXQgZsO2ciBzYW1tYW5zbGFnbmluZyBtaXNzbHlja2FkZXMuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMgorbXNnaWQgIkFkZCBUb29sIgorbXNnc3RyICJMw6RnZyB0aWxsIHZlcmt0eWciCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI4Cittc2dpZCAiQWRkIE5ldyBUb29sIENvbW1hbmQiCittc2dzdHIgIkzDpGdnIHRpbGwgbnl0dCB2ZXJrdHlnc2tvbW1hbmRvIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNAorbXNnaWQgIkFkZCBnbG9iYWxseSIKK21zZ3N0ciAiTMOkZ2cgdGlsbCBnbG9iYWx0IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0NgorbXNnaWQgIlRvb2wgRGV0YWlscyIKK21zZ3N0ciAiRGV0YWxqZXIgZsO2ciB2ZXJrdHlnIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo0OQorbXNnaWQgIlVzZSAnLycgc2VwYXJhdG9ycyB0byBjcmVhdGUgYSBzdWJtZW51IHRyZWU6IgorbXNnc3RyICJBbnbDpG5kIFwiL1wiLWF2ZGVsYXJlIGbDtnIgYXR0IHNrYXBhIGV0dCB1bmRlcm1lbnl0csOkZDoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjYwCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIktvbW1hbmRvOiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzEKK21zZ2lkICJTaG93IGEgZGlhbG9nIGJlZm9yZSBydW5uaW5nIgorbXNnc3RyICJWaXNhIGRpYWxvZyBpbm5hbiBwcm9ncmFtbWV0IHN0YXJ0YXMiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjc3Cittc2dpZCAiQXNrIHRoZSB1c2VyIHRvIHNlbGVjdCBhIHJldmlzaW9uIChzZXRzICRSRVZJU0lPTikiCittc2dzdHIgIkJlIGFudsOkbmRhcmVuIHbDpGxqYSBlbiB2ZXJzaW9uIChzw6R0dGVyICRSRVZJU0lPTikiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjgyCittc2dpZCAiQXNrIHRoZSB1c2VyIGZvciBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoc2V0cyAkQVJHUykiCittc2dzdHIgIkJlIGFudsOkbmRhcmVuIG9tIHl0dGVybGlnYXJlIHBhcmFtZXRyYXIgKHPDpHR0ZXIgJEFSR1MpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4OQorbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKK21zZ3N0ciAiVmlzYSBpbnRlIGtvbW1hbmRvdHMgdXRkYXRhZsO2bnN0ZXIiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjk0Cittc2dpZCAiUnVuIG9ubHkgaWYgYSBkaWZmIGlzIHNlbGVjdGVkICgkRklMRU5BTUUgbm90IGVtcHR5KSIKK21zZ3N0ciAiS8O2ciBlbmRhc3Qgb20gZW4gZGlmZiBoYXIgbWFya2VyYXRzICgkRklMRU5BTUUgw6RyIGludGUgdG9tdCkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjExOAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCittc2dzdHIgIkFuZ2UgZXR0IG5hbW4gZsO2ciB2ZXJrdHlnZXQuIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxMjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJWZXJrdHlnZXQgXCIlc1wiIGZpbm5zIHJlZGFuLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgdmVya3R5Z2V0OlxuIgorIiVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxODcKK21zZ2lkICJSZW1vdmUgVG9vbCIKK21zZ3N0ciAiVGEgYm9ydCB2ZXJrdHlnIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxOTMKK21zZ2lkICJSZW1vdmUgVG9vbCBDb21tYW5kcyIKK21zZ3N0ciAiVGEgYm9ydCB2ZXJrdHlnc2tvbW1hbmRvbiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTk4Cittc2dpZCAiUmVtb3ZlIgorbXNnc3RyICJUYSBib3J0IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzEKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoQmzDpXR0IGFuZ2VyIHZlcmt0eWcgbG9rYWxhIGbDtnIgYXJraXZldCkiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjI5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1biBDb21tYW5kOiAlcyIKK21zZ3N0ciAiS8O2ciBrb21tYW5kb3Q6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMDYKK21zZ2lkICJBcmd1bWVudHMiCittc2dzdHIgIkFyZ3VtZW50IgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDEKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGxpYi9zZWFyY2gudGNsOjQ4Cittc2dpZCAiRmluZDoiCittc2dzdHIgIlPDtms6IgorCisjOiBsaWIvc2VhcmNoLnRjbDo1MAorbXNnaWQgIk5leHQiCittc2dzdHIgIk7DpHN0YSIKKworIzogbGliL3NlYXJjaC50Y2w6NTEKK21zZ2lkICJQcmV2IgorbXNnc3RyICJGw7ZyZWciCisKKyM6IGxpYi9zZWFyY2gudGNsOjUyCittc2dpZCAiUmVnRXhwIgorbXNnc3RyICJSZWcudXR0ci4iCisKKyM6IGxpYi9zZWFyY2gudGNsOjU0Cittc2dpZCAiQ2FzZSIKK21zZ3N0ciAiU2tpZnRsw6RnZSIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMworbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIkJ5dCBuYW1uIHDDpSBncmVuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MjgKK21zZ2lkICJSZW5hbWUiCittc2dzdHIgIkJ5dCBuYW1uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzgKK21zZ2lkICJCcmFuY2g6IgorbXNnc3RyICJHcmVuOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjQ2Cittc2dpZCAiTmV3IE5hbWU6IgorbXNnc3RyICJOeXR0IG5hbW46IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6ODEKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IGEgYnJhbmNoIHRvIHJlbmFtZS4iCittc2dzdHIgIlbDpGxqIGVuIGdyZW4gYXR0IGJ5dGEgbmFtbiBww6UuIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6OTIgbGliL2JyYW5jaF9jcmVhdGUudGNsOjE1NAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBicmFuY2ggbmFtZS4iCittc2dzdHIgIkFuZ2UgZXR0IG5hbW4gZsO2ciBncmVuZW4uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTEyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyBzb20gbmFtbiBww6UgZ3JlbmVuLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjEyMworIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZW5hbWUgJyVzJy4iCittc2dzdHIgIkt1bmRlIGludGUgYnl0YSBuYW1uIHDDpSBcIiVzXCIuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICJUYSBib3J0IGdyZW4gZnLDpW4gZmrDpHJyYXJraXYiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDgKK21zZ2lkICJGcm9tIFJlcG9zaXRvcnkiCittc2dzdHIgIkZyw6VuIGFya2l2IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjg4Cittc2dpZCAiQnJhbmNoZXMiCittc2dzdHIgIkdyZW5hciIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxMTAKK21zZ2lkICJEZWxldGUgT25seSBJZiIKK21zZ3N0ciAiVGEgZW5kYXN0IGJvcnQgb20iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEyCittc2dpZCAiTWVyZ2VkIEludG86IgorbXNnc3RyICJTYW1tYW5zbGFnZW4gaToiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTIwIGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MworbXNnaWQgIkFsd2F5cyAoRG8gbm90IHBlcmZvcm0gbWVyZ2UgY2hlY2tzKSIKK21zZ3N0ciAiQWxsdGlkICh1dGbDtnIgaW50ZSBzYW1tYW5zbGFnbmluZ3N0ZXN0KSIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTMKK21zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCittc2dzdHIgIkVuIGdyZW4ga3LDpHZzIGbDtnIgXCJTYW1tYW5zbGFnZW4gaVwiLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCisiXG4iCisiIC0gJXMiCittc2dzdHIgIiIKKyJGw7ZsamFuZGUgZ3JlbmFyIGhhciBpbnRlIGhlbHQgc2xhZ2l0cyBzYW1tYW4gaSAlczpcbiIKKyJcbiIKKyIgLSAlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxOTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCisibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCittc2dzdHIgIiIKKyJFbiBlbGxlciBmbGVyYSBhdiBzYW1tYW5zbGFnbmluZ3N0ZXN0ZXJuYSBtaXNzbHlja2FkZXMgZWZ0ZXJzb20gZHUgaW50ZSBoYXIgIgorImjDpG10YXQgZGUgbsO2ZHbDpG5kaWdhIGluY2hlY2tuaW5nYXJuYS4gRsO2cnPDtmsgaMOkbXRhIGZyw6VuICVzIGbDtnJzdC4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjA4Cittc2dpZCAiUGxlYXNlIHNlbGVjdCBvbmUgb3IgbW9yZSBicmFuY2hlcyB0byBkZWxldGUuIgorbXNnc3RyICJWw6RsaiBlbiBlbGxlciBmbGVyYSBncmVuYXIgYXR0IHRhIGJvcnQuIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxOCBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTE1Cittc2dpZCAiIgorIlJlY292ZXJpbmcgZGVsZXRlZCBicmFuY2hlcyBpcyBkaWZmaWN1bHQuXG4iCisiXG4iCisiRGVsZXRlIHRoZSBzZWxlY3RlZCBicmFuY2hlcz8iCittc2dzdHIgIiIKKyJEZXQga2FuIHZhcmEgc3bDpXJ0IGF0dCDDpXRlcnN0w6RsbGEgYm9ydHRhZ25hIGdyZW5hci5cbiIKKyJcbiIKKyJUYSBib3J0IGRlIHZhbGRhIGdyZW5hcm5hPyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEZWxldGluZyBicmFuY2hlcyBmcm9tICVzIgorbXNnc3RyICJUYXIgYm9ydCBncmVuYXIgZnLDpW4gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzAwCittc2dpZCAiTm8gcmVwb3NpdG9yeSBzZWxlY3RlZC4iCittc2dzdHIgIkluZ2V0IGFya2l2IG1hcmtlcmF0LiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAiU8O2a2VyICVzLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMzCittc2dpZCAiR2l0IEd1aSIKK21zZ3N0ciAiR2l0IEd1aSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxMgorbXNnaWQgIkNyZWF0ZSBOZXcgUmVwb3NpdG9yeSIKK21zZ3N0ciAiU2thcGEgbnl0dCBhcmtpdiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5OAorbXNnaWQgIk5ldy4uLiIKK21zZ3N0ciAiTnl0dC4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTYKK21zZ2lkICJDbG9uZSBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICJLbG9uYSBiZWZpbnRsaWd0IGFya2l2IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjExNgorbXNnaWQgIkNsb25lLi4uIgorbXNnc3RyICJLbG9uYS4uLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDY0Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICLDlnBwbmEgYmVmaW50bGlndCBhcmtpdiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjkKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICLDlnBwbmEuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTQyCittc2dpZCAiUmVjZW50IFJlcG9zaXRvcmllcyIKK21zZ3N0ciAiU2VuYXN0ZSBhcmtpdmVuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0OAorbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgorbXNnc3RyICLDlnBwbmEgdGlkaWdhcmUgYXJraXY6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMxNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIGFya2l2ZXQgJXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQwNyBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzMKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIlNrYXBhIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQxNworbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIkthdGFsb2c6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ0NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU3MworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDk4Cittc2dpZCAiR2l0IFJlcG9zaXRvcnkiCittc2dzdHIgIkdpdGFya2l2IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkthdGFsb2dlbiAlcyBmaW5ucyByZWRhbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkZpbGVuICVzIGZpbm5zIHJlZGFuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTEKK21zZ2lkICJDbG9uZSIKK21zZ3N0ciAiS2xvbmEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTA0Cittc2dpZCAiU291cmNlIExvY2F0aW9uOiIKK21zZ3N0ciAiUGxhdHMgZsO2ciBrw6RsbGtvZDoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTEzCittc2dpZCAiVGFyZ2V0IERpcmVjdG9yeToiCittc2dzdHIgIk3DpWxrYXRhbG9nOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjMKK21zZ2lkICJDbG9uZSBUeXBlOiIKK21zZ3N0ciAiVHlwIGF2IGtsb246IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUyOAorbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKK21zZ3N0ciAiU3RhbmRhcmQgKHNuYWJiLCBzZW1pcmVkdW5kYW50LCBow6VyZGEgbMOkbmthcikiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTMzCittc2dpZCAiRnVsbCBDb3B5IChTbG93ZXIsIFJlZHVuZGFudCBCYWNrdXApIgorbXNnc3RyICJGdWxsIGtvcGlhIChsw6VuZ3NhbW1hcmUsIHJlZHVuZGFudCBzw6RrZXJoZXRza29waWEpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUzOAorbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgorbXNnc3RyICJEZWxhZCAoc25hYmJhc3QsIHJla29tbWVuZGVyYXMgZWosIGluZ2VuIHPDpGtlcmhldHNrb3BpYSkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQ1Cittc2dpZCAiUmVjdXJzaXZlbHkgY2xvbmUgc3VibW9kdWxlcyB0b28iCittc2dzdHIgIktsb25hIMOkdmVuIHJla3Vyc2l2dCB1bmRlcm1vZHVsZXIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTc5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjI2CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc3MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg0MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMTA0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTExMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdCBhIEdpdCByZXBvc2l0b3J5OiAlcyIKK21zZ3N0ciAiSW50ZSBldHQgR2l0YXJraXY6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNQorbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiU3RhbmRhcmQgw6RyIGVuZGFzdCB0aWxsZ8OkbmdsaWd0IGbDtnIgbG9rYWxhIGFya2l2LiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MTkKK21zZ2lkICJTaGFyZWQgb25seSBhdmFpbGFibGUgZm9yIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICJEZWxhdCDDpHIgZW5kYXN0IHRpbGxnw6RuZ2xpZ3QgZsO2ciBsb2thbGEgYXJraXYuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY0MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiUGxhdHNlbiAlcyBmaW5ucyByZWRhbi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjUxCittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCittc2dzdHIgIkt1bmRlIGludGUga29uZmlndXJlcmEgdXJzcHJ1bmciCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjYzCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUsOka25hciBvYmpla3QiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjY0Cittc2dpZCAiYnVja2V0cyIKK21zZ3N0ciAiaGlua2FyIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBrb3BpZXJhIG9iamVrdC9pbmZvL2FsdGVybmF0aXY6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCittc2dzdHIgIkluZ2VudGluZyBhdHQga2xvbmEgZnLDpW4gJXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjcyNiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0MAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NTIKK21zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCittc2dzdHIgIkdyZW5lbiBcIm1hc3RlclwiIGhhciBpbnRlIGluaXRpZXJhdHMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjczOQorbXNnaWQgIkhhcmRsaW5rcyBhcmUgdW5hdmFpbGFibGUuICBGYWxsaW5nIGJhY2sgdG8gY29weWluZy4iCittc2dzdHIgIkjDpXJkYSBsw6Rua2FyIMOkciBpbnRlIHRpbGxnw6RuZ2xpZ2EuIEZhbGxlciB0aWxsYmFrYSBww6Uga29waWVyaW5nLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGZyb20gJXMiCittc2dzdHIgIktsb25hciBmcsOlbiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODIKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgIktvcGllcmFyIG9iamVrdCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODMKK21zZ2lkICJLaUIiCittc2dzdHIgIktpQiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY29weSBvYmplY3Q6ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIGtvcGllcmEgb2JqZWt0OiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MTcKK21zZ2lkICJMaW5raW5nIG9iamVjdHMiCittc2dzdHIgIkzDpG5rYXIgb2JqZWt0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgxOAorbXNnaWQgIm9iamVjdHMiCittc2dzdHIgIm9iamVrdCIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gaGFyZGxpbmsgb2JqZWN0OiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBow6VyZGzDpG5rYSBvYmpla3Q6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg4MQorbXNnaWQgIkNhbm5vdCBmZXRjaCBicmFuY2hlcyBhbmQgb2JqZWN0cy4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIkt1bmRlIGludGUgaMOkbXRhIGdyZW5hciBvY2ggb2JqZWt0LiBTZSBrb25zb2x1dGRhdGEgZsO2ciBkZXRhbGplci4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODkyCittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSB0YWdnYXIuIFNlIGtvbnNvbHV0ZGF0YSBmw7ZyIGRldGFsamVyLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTYKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIEhFQUQuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICJLdW5kZSBpbnRlIGF2Z8O2cmEgSEVBRC4gU2Uga29uc29sdXRkYXRhIGbDtnIgZGV0YWxqZXIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjbGVhbnVwICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHN0w6RkYSB1cHAgJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMxCittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAiS2xvbmluZyBtaXNzbHlja2FkZXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkzOAorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAiSMOkbXRhZGUgaW5nZW4gc3RhbmRhcmRncmVuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVzb2x2ZSAlcyBhcyBhIGNvbW1pdC4iCittc2dzdHIgIkt1bmRlIGludGUgc2zDpSB1cHAgJXMgdGlsbCBuw6Vnb24gaW5jaGVja25pbmcuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk2MQorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJTa2FwYXIgYXJiZXRza2F0YWxvZyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NjIgbGliL2luZGV4LnRjbDo3MCBsaWIvaW5kZXgudGNsOjEzNgorIzogbGliL2luZGV4LnRjbDoyMDcKK21zZ2lkICJmaWxlcyIKK21zZ3N0ciAiZmlsZXIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgxCittc2dpZCAiQ2Fubm90IGNsb25lIHN1Ym1vZHVsZXMuIgorbXNnc3RyICJLYW4gaW50ZSBrbG9uYSB1bmRlcm1vZHVsZXIuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk5MAorbXNnaWQgIkNsb25pbmcgc3VibW9kdWxlcyIKK21zZ3N0ciAiS2xvbmFyIHVuZGVybW9kdWxlciIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDE1Cittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIklubGVkYW5kZSBmaWx1dGNoZWNrbmluZyBtaXNzbHlja2FkZXMuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNTkKK21zZ2lkICJPcGVuIgorbXNnc3RyICLDlnBwbmEiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA2OQorbXNnaWQgIlJlcG9zaXRvcnk6IgorbXNnc3RyICJBcmtpdjoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTExOAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBvcGVuIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBhcmtpdmV0ICVzOiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtIGV0dCBncmFmaXNrdCBhbnbDpG5kYXJncsOkbnNzbml0dCBmw7ZyIEdpdC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzMKK21zZ2lkICJGaWxlIFZpZXdlciIKK21zZ3N0ciAiRmlsdmlzYXJlIgorCisjOiBsaWIvYmxhbWUudGNsOjc5Cittc2dpZCAiQ29tbWl0OiIKK21zZ3N0ciAiSW5jaGVja25pbmc6IgorCisjOiBsaWIvYmxhbWUudGNsOjI4MAorbXNnaWQgIkNvcHkgQ29tbWl0IgorbXNnc3RyICJLb3BpZXJhIGluY2hlY2tuaW5nIgorCisjOiBsaWIvYmxhbWUudGNsOjI4NAorbXNnaWQgIkZpbmQgVGV4dC4uLiIKK21zZ3N0ciAiU8O2ayB0ZXh0Li4uIgorCisjOiBsaWIvYmxhbWUudGNsOjI4OAorbXNnaWQgIkdvdG8gTGluZS4uLiIKK21zZ3N0ciAiR8OlIHRpbGwgcmFkLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjI5NworbXNnaWQgIkRvIEZ1bGwgQ29weSBEZXRlY3Rpb24iCittc2dzdHIgIkfDtnIgZnVsbCBrb3BpZXJpbmdzaWdlbmvDpG5uaW5nIgorCisjOiBsaWIvYmxhbWUudGNsOjMwMQorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICJWaXNhIGhpc3Rvcmlrc2FtbWFuaGFuZyIKKworIzogbGliL2JsYW1lLnRjbDozMDQKK21zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgorbXNnc3RyICJLbGFuZHJhIGbDtnLDpGxkcmFpbmNoZWNrbmluZyIKKworIzogbGliL2JsYW1lLnRjbDo0NjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZWFkaW5nICVzLi4uIgorbXNnc3RyICJMw6RzZXIgJXMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NTk0Cittc2dpZCAiTG9hZGluZyBjb3B5L21vdmUgdHJhY2tpbmcgYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIkzDpHNlciBhbm5vdGVyaW5nYXIgZsO2ciBrb3BpZXJpbmcvZmx5dHRuaW5nLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjYxNAorbXNnaWQgImxpbmVzIGFubm90YXRlZCIKK21zZ3N0ciAicmFkZXIgYW5ub3RlcmFkZSIKKworIzogbGliL2JsYW1lLnRjbDo4MDYKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICJMw6RzZXIgaW4gYW5ub3RlcmluZyBhdiBvcmlnaW5hbHBsYWNlcmluZy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo4MDkKK21zZ2lkICJBbm5vdGF0aW9uIGNvbXBsZXRlLiIKK21zZ3N0ciAiQW5ub3RlcmluZyBmdWxsYm9yZGFkLiIKKworIzogbGliL2JsYW1lLnRjbDo4MzkKK21zZ2lkICJCdXN5IgorbXNnc3RyICJVcHB0YWdlbiIKKworIzogbGliL2JsYW1lLnRjbDo4NDAKK21zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKK21zZ3N0ciAiQW5ub3RlcmluZ3Nwcm9jZXNzIGvDtnJzIHJlZGFuLiIKKworIzogbGliL2JsYW1lLnRjbDo4NzkKK21zZ2lkICJSdW5uaW5nIHRob3JvdWdoIGNvcHkgZGV0ZWN0aW9uLi4uIgorbXNnc3RyICJLw7ZyIGdydW5kbGlnIGtvcGllcmluZ3NpZ2Vua8Okbm5pbmcuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6OTQ3Cittc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgorbXNnc3RyICJMw6RzZXIgaW4gYW5ub3RlcmluZy4uLiIKKworIzogbGliL2JsYW1lLnRjbDoxMDAwCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiRsO2cmZhdHRhcmU6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwMDQKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJJbmNoZWNrYXJlOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDA5Cittc2dpZCAiT3JpZ2luYWwgRmlsZToiCittc2dzdHIgIlVyc3BydW5nbGlnIGZpbDoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTA1NworbXNnaWQgIkNhbm5vdCBmaW5kIEhFQUQgY29tbWl0OiIKK21zZ3N0ciAiSGl0dGFyIGludGUgaW5jaGVja25pbmcgZsO2ciBIRUFEOiIKKworIzogbGliL2JsYW1lLnRjbDoxMTEyCittc2dpZCAiQ2Fubm90IGZpbmQgcGFyZW50IGNvbW1pdDoiCittc2dzdHIgIkhpdHRhciBpbnRlIGbDtnLDpGxkcmFpbmNoZWNrbmluZzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTEyNworbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAiS2FuIGludGUgdmlzYSBmw7Zyw6RsZGVyIgorCisjOiBsaWIvYmxhbWUudGNsOjEyNjkKK21zZ2lkICJPcmlnaW5hbGx5IEJ5OiIKK21zZ3N0ciAiVXJzcHJ1bmdsaWdlbiBhdjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI3NQorbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICJJIGZpbGVuOiIKKworIzogbGliL2JsYW1lLnRjbDoxMjgwCittc2dpZCAiQ29waWVkIE9yIE1vdmVkIEhlcmUgQnk6IgorbXNnc3RyICJLb3BpZXJhZCBlbGxlciBmbHl0dGFkIGhpdCBhdjoiCisKKyM6IGxpYi9zc2hrZXkudGNsOjMxCittc2dpZCAiTm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIkluZ2Egbnlja2xhciBoaXR0YWRlcy4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjM0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRm91bmQgYSBwdWJsaWMga2V5IGluOiAlcyIKK21zZ3N0ciAiSGl0dGFkZSDDtnBwZW4gbnlja2VsIGk6ICVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDo0MAorbXNnaWQgIkdlbmVyYXRlIEtleSIKK21zZ3N0ciAiU2thcGEgbnlja2VsIgorCisjOiBsaWIvc3Noa2V5LnRjbDo1OAorbXNnaWQgIkNvcHkgVG8gQ2xpcGJvYXJkIgorbXNnc3RyICJLb3BpZXJhIHRpbGwgVXJrbGlwcCIKKworIzogbGliL3NzaGtleS50Y2w6NzIKK21zZ2lkICJZb3VyIE9wZW5TU0ggUHVibGljIEtleSIKK21zZ3N0ciAiRGluIMO2cHBuYSBPcGVuU1NILW55Y2tlbCIKKworIzogbGliL3NzaGtleS50Y2w6ODAKK21zZ2lkICJHZW5lcmF0aW5nLi4uIgorbXNnc3RyICJTa2FwYXIuLi4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjg2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBzdGFydCBzc2gta2V5Z2VuOlxuIgorIlxuIgorIiVzIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSBzdGFydGEgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3NzaGtleS50Y2w6MTEzCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgbWVkIGF0dCBza2FwYS4iCisKKyM6IGxpYi9zc2hrZXkudGNsOjEyMAorbXNnaWQgIkdlbmVyYXRpb24gc3VjY2VlZGVkLCBidXQgbm8ga2V5cyBmb3VuZC4iCittc2dzdHIgIkx5Y2thZGVzIHNrYXBhIG55Y2tlbG4sIG1lbiBoaXR0YXIgaW50ZSBuw6Vnb24gbnlja2VsLiIKKworIzogbGliL3NzaGtleS50Y2w6MTIzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiWW91ciBrZXkgaXMgaW46ICVzIgorbXNnc3RyICJEaW4gbnlja2VsIGZpbm5zIGk6ICVzIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjMKK21zZ2lkICJDcmVhdGUgQnJhbmNoIgorbXNnc3RyICJTa2FwYSBncmVuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjgKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAiU2thcGEgbnkgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjQyCittc2dpZCAiQnJhbmNoIE5hbWUiCittc2dzdHIgIk5hbW4gcMOlIGdyZW4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1NworbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgorbXNnc3RyICJBbnbDpG5kIG5hbW4gcMOlIHNww6VyYWQgZ3JlbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjY2Cittc2dpZCAiU3RhcnRpbmcgUmV2aXNpb24iCittc2dzdHIgIklubGVkYW5kZSByZXZpc2lvbiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjcyCittc2dpZCAiVXBkYXRlIEV4aXN0aW5nIEJyYW5jaDoiCittc2dzdHIgIlVwcGRhdGVyYSBiZWZpbnRsaWcgZ3JlbjoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorbXNnaWQgIk5vIgorbXNnc3RyICJOZWoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAorbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgorbXNnc3RyICJFbmRhc3Qgc25hYmJzcG9sbmluZyIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgIkNoZWNrYSB1dCBuw6RyIHNrYXBhZCIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjEzMgorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSB0cmFja2luZyBicmFuY2guIgorbXNnc3RyICJWw6RsaiBlbiBncmVuIGF0dCBzcMOlcmEuIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVHJhY2tpbmcgYnJhbmNoICVzIGlzIG5vdCBhIGJyYW5jaCBpbiB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuIgorbXNnc3RyICJEZW4gc3DDpXJhZGUgZ3JlbmVuICVzIMOkciBpbnRlIGVuIGdyZW4gaSBmasOkcnJhcmtpdmV0LiIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGdlbnbDpGc6IgorCisjOiBsaWIvc2hvcnRjdXQudGNsOjEzNworbXNnaWQgIkNhbm5vdCB3cml0ZSBpY29uOiIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIGlrb246IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTIKK21zZ2lkICJUaGlzIERldGFjaGVkIENoZWNrb3V0IgorbXNnc3RyICJEZW5uYSBmcsOlbmtvcHBsYWRlIHV0Y2hlY2tuaW5nIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAiUmV2aXNpb25zdXR0cnljazoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3MgorbXNnaWQgIkxvY2FsIEJyYW5jaCIKK21zZ3N0ciAiTG9rYWwgZ3JlbiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc3Cittc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICJTcMOlcmFuZGUgZ3JlbiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjgyIGxpYi9jaG9vc2VfcmV2LnRjbDo1NDQKK21zZ2lkICJUYWciCittc2dzdHIgIlRhZ2ciCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAiT2dpbHRpZyByZXZpc2lvbjogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozNDIKK21zZ2lkICJObyByZXZpc2lvbiBzZWxlY3RlZC4iCittc2dzdHIgIkluZ2VuIHJldmlzaW9uIHZhbGQuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzUwCittc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCittc2dzdHIgIlJldmlzaW9uc3V0dHJ5Y2tldCDDpHIgdG9tdC4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzcKK21zZ2lkICJVcGRhdGVkIgorbXNnc3RyICJVcHBkYXRlcmFkIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTY1Cittc2dpZCAiVVJMIgorbXNnc3RyICJXZWJiYWRyZXNzIgorCisjOiBsaWIvY29tbWl0LnRjbDo5Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gYW1lbmQuXG4iCisiXG4iCisiWW91IGFyZSBhYm91dCB0byBjcmVhdGUgdGhlIGluaXRpYWwgY29tbWl0LiAgVGhlcmUgaXMgbm8gY29tbWl0IGJlZm9yZSB0aGlzICIKKyJ0byBhbWVuZC5cbiIKK21zZ3N0ciAiIgorIkRldCBmaW5ucyBpbmdlbnRpbmcgYXR0IHV0w7ZrYS5cbiIKKyJcbiIKKyJEdSBow6VsbGVyIHDDpSBhdHQgc2thcGEgZGVuIGlubGVkYW5kZSBpbmNoZWNrbmluZ2VuLiBEZXQgZmlubnMgaW5nZW4gdGlkaWdhcmUgIgorImluY2hlY2tuaW5nIGF0dCB1dMO2a2EuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisiS2FuIGludGUgdXTDtmthIHZpZCBzYW1tYW5zbGFnbmluZy5cbiIKKyJcbiIKKyJEdSDDpHIgaSBtaXR0ZW4gYXYgZW4gc2FtbWFuc2xhZ25pbmcgc29tIGludGUgw6RyIGZ1bGxib3JkYWQuIER1IGthbiBpbnRlICIKKyJ1dMO2a2EgdGlkaWdhcmUgaW5jaGVja25pbmdhciBvbSBkdSBpbnRlIGbDtnJzdCBhdmJyeXRlciBkZW4gcMOlZ8OlZW5kZSAiCisic2FtbWFuc2xhZ25pbmdlbi5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6NDgKK21zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCittc2dzdHIgIkZlbCB2aWQgaW5sw6RzbmluZyBhdiBpbmNoZWNrbmluZ3NkYXRhIGbDtnIgdXTDtmtuaW5nOiIKKworIzogbGliL2NvbW1pdC50Y2w6NzUKK21zZ2lkICJVbmFibGUgdG8gb2J0YWluIHlvdXIgaWRlbnRpdHk6IgorbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSBkaW4gaWRlbnRpdGV0OiIKKworIzogbGliL2NvbW1pdC50Y2w6ODAKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICJGZWxha3RpZyBHSVRfQ09NTUlUVEVSX0lERU5UOiIKKworIzogbGliL2NvbW1pdC50Y2w6MTI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgInZhcm5pbmc6IFRjbCBzdMO2ZGVyIGludGUgdGVja2Vua29kbmluZ2VuIFwiJXNcIi4iCisKKyM6IGxpYi9jb21taXQudGNsOjE0OQorbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYW5vdGhlciBjb21taXQgY2FuIGJlIGNyZWF0ZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJEZXQgc2VuYXN0ZSBpbmzDpHN0YSB0aWxsc3TDpW5kZXQgbW90c3ZhcmFyIGludGUgdGlsbHN0w6VuZGV0IGkgYXJraXZldC5cbiIKKyJcbiIKKyJFdHQgYW5uYXQgR2l0LXByb2dyYW0gaGFyIMOkbmRyYXQgYXJraXZldCBzZWRhbiBzZW5hc3RlIGF2c8O2a25pbmdlbi4gRHUgbcOlc3RlICIKKyJ1dGbDtnJhIGVuIG55IHPDtmtuaW5nIGlubmFuIGR1IGthbiBnw7ZyYSBlbiBueSBpbmNoZWNrbmluZy5cbiIKKyJcbiIKKyJTw7ZrbmluZ2VuIGtvbW1lciBhdHQgc3RhcnRhcyBhdXRvbWF0aXNrdCBudS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVubWVyZ2VkIGZpbGVzIGNhbm5vdCBiZSBjb21taXR0ZWQuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLiAgWW91IG11c3QgcmVzb2x2ZSB0aGVtIGFuZCBzdGFnZSB0aGUgZmlsZSAiCisiYmVmb3JlIGNvbW1pdHRpbmcuXG4iCittc2dzdHIgIiIKKyJPc2FtbWFuc2xhZ25hIGZpbGVyIGthbiBpbnRlIGNoZWNrYXMgaW4uXG4iCisiXG4iCisiRmlsZW4gJXMgaGFyIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0ZXIuIER1IG3DpXN0ZSBsw7ZzYSBkZW0gb2NoIGvDtmEgZmlsZW4gIgorImlubmFuIGR1IGNoZWNrYXIgaW4gZGVuLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgorIlxuIgorIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCittc2dzdHIgIiIKKyJPa8OkbmQgZmlsc3RhdHVzICVzIHVwcHTDpGNrdC5cbiIKKyJcbiIKKyJGaWxlbiAlcyBrYW4gaW50ZSBjaGVja2FzIGluIGF2IHByb2dyYW1tZXQuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4OQorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorbXNnc3RyICIiCisiSW5nYSDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW4uXG4iCisiXG4iCisiRHUgbcOlc3RlIGvDtmEgw6V0bWluc3RvbmUgZW4gZmlsIGlubmFuIGR1IGthbiBjaGVja2EgaW4uXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjIwNAorbXNnaWQgIiIKKyJQbGVhc2Ugc3VwcGx5IGEgY29tbWl0IG1lc3NhZ2UuXG4iCisiXG4iCisiQSBnb29kIGNvbW1pdCBtZXNzYWdlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiIKKyJcbiIKKyItIEZpcnN0IGxpbmU6IERlc2NyaWJlIGluIG9uZSBzZW50ZW5jZSB3aGF0IHlvdSBkaWQuXG4iCisiLSBTZWNvbmQgbGluZTogQmxhbmtcbiIKKyItIFJlbWFpbmluZyBsaW5lczogRGVzY3JpYmUgd2h5IHRoaXMgY2hhbmdlIGlzIGdvb2QuXG4iCittc2dzdHIgIiIKKyJBbmdlIGV0dCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlLlxuIgorIlxuIgorIkV0dCBicmEgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBoYXIgZsO2bGphbmRlIGZvcm1hdDpcbiIKKyJcbiIKKyItIEbDtnJzdGEgcmFkZW46IEJlc2tyaXYgaSBlbiBtZW5pbmcgdmFkIGR1IGdqb3JkZS5cbiIKKyItIEFuZHJhIHJhZGVuOiBUb21cbiIKKyItIEbDtmxqYW5kZSByYWRlcjogQmVza3JpdiB2YXJmw7ZyIGRldCBow6RyIMOkciBlbiBicmEgw6RuZHJpbmcuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjIzNQorbXNnaWQgIkNhbGxpbmcgcHJlLWNvbW1pdCBob29rLi4uIgorbXNnc3RyICJBbnJvcGFyIGtyb2tlbiBmw7ZyZSBpbmNoZWNrbmluZyAocHJlLWNvbW1pdCkuLi4iCisKKyM6IGxpYi9jb21taXQudGNsOjI1MAorbXNnaWQgIkNvbW1pdCBkZWNsaW5lZCBieSBwcmUtY29tbWl0IGhvb2suIgorbXNnc3RyICJJbmNoZWNrbmluZ2VuIGF2dmlzYWRlcyBhdiBrcm9rZW4gZsO2cmUgaW5jaGVja25pbmcgKHByZS1jb21taXQpLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjY5Cittc2dpZCAiIgorIllvdSBhcmUgYWJvdXQgdG8gY29tbWl0IG9uIGEgZGV0YWNoZWQgaGVhZC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IGRhbmdlcm91cyAiCisidGhpbmcgdG8gZG8gYmVjYXVzZSBpZiB5b3Ugc3dpdGNoIHRvIGFub3RoZXIgYnJhbmNoIHlvdSB3aWxsIGxvc2UgeW91ciAiCisiY2hhbmdlcyBhbmQgaXQgY2FuIGJlIGRpZmZpY3VsdCB0byByZXRyaWV2ZSB0aGVtIGxhdGVyIGZyb20gdGhlIHJlZmxvZy4gWW91ICIKKyJzaG91bGQgcHJvYmFibHkgY2FuY2VsIHRoaXMgY29tbWl0IGFuZCBjcmVhdGUgYSBuZXcgYnJhbmNoIHRvIGNvbnRpbnVlLlxuIgorIiBcbiIKKyIgRG8geW91IHJlYWxseSB3YW50IHRvIHByb2NlZWQgd2l0aCB5b3VyIENvbW1pdD8iCittc2dzdHIgIiIKKyJEdSDDpHIgcMOlIHbDpGcgYXR0IGNoZWNrYSBpbiBww6UgZXR0IGZyw6Vua29wcGxhdCBodXZ1ZC4gRGV0IGthbiBwb3RlbnRpZWxsdCAiCisidmFyYSBmYXJsaWd0LCBlZnRlcnNvbSBkdSBrb21tZXIgZsO2cmxvcmEgZGluYSDDpG5kcmluZ2FyIG9tIGR1IHbDpHhsYXIgdGlsbCBlbiAiCisiYW5uYW4gZ3JlbiBvY2ggZGV0IGthbiB2YXJhIHN2w6VydCBhdHQgaMOkbXRhIGRlbSBzZW5hcmUgZnLDpW4gcmVmLWxvZ2dlbi4gRHUgIgorImLDtnIgdHJvbGlnZW4gYXZicnl0YSBpbmNoZWNrbmluZ2VuIG9jaCBza2FwYSBlbiBueSBncmVuIGbDtnIgYXR0IGZvcnRzw6R0dGEuXG4iCisiIFxuIgorIiBWaWxsIGR1IHZlcmtsaWdlbiBmb3J0c8OkdHRhIGNoZWNrYSBpbj8iCisKKyM6IGxpYi9jb21taXQudGNsOjI5MAorbXNnaWQgIkNhbGxpbmcgY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICJBbnJvcGFyIGtyb2tlbiBmw7ZyIGluY2hlY2tuaW5nc21lZGRlbGFuZGUgKGNvbW1pdC1tc2cpLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMDUKK21zZ2lkICJDb21taXQgZGVjbGluZWQgYnkgY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiSW5jaGVja25pbmcgYXZ2aXNhZCBhdiBrcm9rZW4gZsO2ciBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIChjb21taXQtbXNnKS4iCisKKyM6IGxpYi9jb21taXQudGNsOjMxOAorbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKK21zZ3N0ciAiQ2hlY2thciBpbiDDpG5kcmluZ2FyLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzQKK21zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCittc2dzdHIgIndyaXRlLXRyZWUgbWlzc2x5Y2thZGVzOiIKKworIzogbGliL2NvbW1pdC50Y2w6MzM1IGxpYi9jb21taXQudGNsOjM3OSBsaWIvY29tbWl0LnRjbDo0MDAKK21zZ2lkICJDb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiSW5jaGVja25pbmdlbiBtaXNzbHlja2FkZXMuIgorCisjOiBsaWIvY29tbWl0LnRjbDozNTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgorbXNnc3RyICJJbmNoZWNrbmluZ2VuICVzIHZlcmthciB2YXJhIHRyYXNpZyIKKworIzogbGliL2NvbW1pdC50Y2w6MzU3Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiSW5nYSDDpG5kcmluZ2FyIGF0dCBjaGVja2EgaW4uXG4iCisiXG4iCisiSW5nYSBmaWxlciDDpG5kcmFkZXMgYXYgaW5jaGVja25pbmdlbiBvY2ggZGV0IHZhciBpbnRlIGVuIHNhbW1hbnNsYWduaW5nLlxuIgorIlxuIgorIkVuIHPDtmtuaW5nIGtvbW1lciBhdHQgc3RhcnRhcyBhdXRvbWF0aXNrdCBudS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzY0Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpbi4iCisKKyM6IGxpYi9jb21taXQudGNsOjM3OAorbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCittc2dzdHIgImNvbW1pdC10cmVlIG1pc3NseWNrYWRlczoiCisKKyM6IGxpYi9jb21taXQudGNsOjM5OQorbXNnaWQgInVwZGF0ZS1yZWYgZmFpbGVkOiIKK21zZ3N0ciAidXBkYXRlLXJlZiBtaXNzbHlja2FkZXM6IgorCisjOiBsaWIvY29tbWl0LnRjbDo0OTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGNvbW1pdCAlczogJXMiCittc2dzdHIgIlNrYXBhZGUgaW5jaGVja25pbmdlbiAlczogJXMiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNgorbXNnaWQgIkRlbGV0ZSBCcmFuY2giCittc2dzdHIgIlRhIGJvcnQgZ3JlbiIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjIxCittc2dpZCAiRGVsZXRlIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiVGEgYm9ydCBsb2thbCBncmVuIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzkKK21zZ2lkICJMb2NhbCBCcmFuY2hlcyIKK21zZ3N0ciAiTG9rYWxhIGdyZW5hciIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUxCittc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCittc2dzdHIgIlRhIGJhcmEgYm9ydCBvbSBzYW1tYW5zbGFnZW4gbWVkIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6IgorbXNnc3RyICJGw7ZsamFuZGUgZ3JlbmFyIMOkciBpbnRlIHRpbGwgZnVsbG8gc2FtbWFuc2xhZ25hIG1lZCAlczoiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgdGEgYm9ydCBncmVuYXI6XG4iCisiJXMiCisKKyM6IGxpYi9pbmRleC50Y2w6NgorbXNnaWQgIlVuYWJsZSB0byB1bmxvY2sgdGhlIGluZGV4LiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6VzYSB1cHAgaW5kZXhldC4iCisKKyM6IGxpYi9pbmRleC50Y2w6MTcKK21zZ2lkICJJbmRleCBFcnJvciIKK21zZ3N0ciAiSW5kZXhmZWwiCisKKyM6IGxpYi9pbmRleC50Y2w6MTkKK21zZ2lkICIiCisiVXBkYXRpbmcgdGhlIEdpdCBpbmRleCBmYWlsZWQuICBBIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCB0byAiCisicmVzeW5jaHJvbml6ZSBnaXQtZ3VpLiIKK21zZ3N0ciAiIgorIk1pc3NseWNrYWRlcyBtZWQgYXR0IHVwcGRhdGVyYSBHaXRpbmRleGV0LiBFbiBvbXPDtmtuaW5nIGtvbW1lciBhdHQgc3RhcnRhcyAiCisiYXV0b21hdGlza3QgZsO2ciBhdHQgc3lua3JvbmlzZXJhIG9tIGdpdC1ndWkuIgorCisjOiBsaWIvaW5kZXgudGNsOjMwCittc2dpZCAiQ29udGludWUiCittc2dzdHIgIkZvcnRzw6R0dCIKKworIzogbGliL2luZGV4LnRjbDozMworbXNnaWQgIlVubG9jayBJbmRleCIKK21zZ3N0ciAiTMOlcyB1cHAgaW5kZXgiCisKKyM6IGxpYi9pbmRleC50Y2w6Mjk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5zdGFnaW5nICVzIGZyb20gY29tbWl0IgorbXNnc3RyICJUYXIgYm9ydCAlcyBmw7ZyIGluY2hlY2tuaW5nc2vDtm4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzM3Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAiUmVkbyBhdHQgY2hlY2thIGluLiIKKworIzogbGliL2luZGV4LnRjbDozNTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIkzDpGdnZXIgdGlsbCAlcyIKKworIzogbGliL2luZGV4LnRjbDozODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGFnZSAlZCB1bnRyYWNrZWQgZmlsZXM/IgorbXNnc3RyICJLw7ZhICVkIG9zcMOlcmFkZSBmaWxlcj8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXJuYSBpIGZpbGVuICVzPyIKKworIzogbGliL2luZGV4LnRjbDo0MzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiB0aGVzZSAlaSBmaWxlcz8iCittc2dzdHIgIsOFdGVyc3TDpGxsIMOkbmRyaW5nYXJuYSBpIGRlc3NhICVpIGZpbGVyPyIKKworIzogbGliL2luZGV4LnRjbDo0MzgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyJBbGxhIG9rw7ZhZGUgw6RuZHJpbmdhciBrb21tZXIgcGVybWFuZW50IGfDpSBmw7ZybG9yYWRlIHZpZCDDpXRlcnN0w6RsbG5pbmdlbi4iCisKKyM6IGxpYi9pbmRleC50Y2w6NDQxCittc2dpZCAiRG8gTm90aGluZyIKK21zZ3N0ciAiR8O2ciBpbmdlbnRpbmciCisKKyM6IGxpYi9pbmRleC50Y2w6NDU5Cittc2dpZCAiUmV2ZXJ0aW5nIHNlbGVjdGVkIGZpbGVzIgorbXNnc3RyICLDhXRlcnN0w6RsbGVyIHZhbGRhIGZpbGVyIgorCisjOiBsaWIvaW5kZXgudGNsOjQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydGluZyAlcyIKK21zZ3N0ciAiw4V0ZXJzdMOkbGxlciAlcyIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDMKK21zZ2lkICJEZWZhdWx0IgorbXNnc3RyICJTdGFuZGFyZCIKKworIzogbGliL2VuY29kaW5nLnRjbDo0NDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gKCVzKSIKK21zZ3N0ciAiU3lzdGVtZXRzICglcykiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDU5IGxpYi9lbmNvZGluZy50Y2w6NDY1Cittc2dpZCAiT3RoZXIiCittc2dzdHIgIkFubmFuIgorCisjOiBsaWIvZGF0ZS50Y2w6MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgorbXNnc3RyICJPZ2lsdGlndCBkYXR1bSBmcsOlbiBHaXQ6ICVzIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQyCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIkFudGFsIGzDtnNhIG9iamVrdCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0MworbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgorbXNnc3RyICJEaXNrdXRyeW1tZSBhbnbDpG50IGF2IGzDtnNhIG9iamVrdCIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NAorbXNnaWQgIk51bWJlciBvZiBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiQW50YWwgcGFja2FkZSBvYmpla3QiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKK21zZ2lkICJOdW1iZXIgb2YgcGFja3MiCittc2dzdHIgIkFudGFsIHBha2V0IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJEaXNrdXRyeW1tZSBhbnbDpG50IGF2IHBhY2thZGUgb2JqZWt0IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ3Cittc2dpZCAiUGFja2VkIG9iamVjdHMgd2FpdGluZyBmb3IgcHJ1bmluZyIKK21zZ3N0ciAiUGFja2FkZSBvYmpla3Qgc29tIHbDpG50YXIgcMOlIHN0w6RkbmluZyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0OAorbXNnaWQgIkdhcmJhZ2UgZmlsZXMiCittc2dzdHIgIlNrcsOkcGZpbGVyIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjcyCittc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiS29tcHJpbWVyYXIgb2JqZWt0ZGF0YWJhc2VuIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjgzCittc2dpZCAiVmVyaWZ5aW5nIHRoZSBvYmplY3QgZGF0YWJhc2Ugd2l0aCBmc2NrLW9iamVjdHMiCittc2dzdHIgIlZlcmlmaWVyYXIgb2JqZWt0ZGF0YWJhc2VuIG1lZCBmc2NrLW9iamVjdHMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2UuXG4iCisiXG4iCisiQ29tcHJlc3MgdGhlIGRhdGFiYXNlIG5vdz8iCittc2dzdHIgIiIKKyJBcmtpdmV0IGhhciBmw7ZyIG7DpHJ2YXJhbmRlIG9ta3JpbmcgJWkgbMO2c2Egb2JqZWt0LlxuIgorIlxuIgorIkbDtnIgYXR0IGJpYmVow6VsbGEgb3B0aW1hbCBwcmVzdGFuZGEgcmVrb21tZW5kZXJhcyBkZXQgw6UgZGV0IGJlc3TDpG1kYXN0ZSBhdHQgIgorImR1IGtvbXByaW1lcmFyIGRhdGFiYXNlbi5cbiIKKyJcbiIKKyJLb21wcmltZXJhIGRhdGFiYXNlbiBudT8iCisKKyM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTYKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAiZmVsIgorCisjOiBsaWIvZXJyb3IudGNsOjM2Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAidmFybmluZyIKKworIzogbGliL2Vycm9yLnRjbDo5NgorbXNnaWQgIllvdSBtdXN0IGNvcnJlY3QgdGhlIGFib3ZlIGVycm9ycyBiZWZvcmUgY29tbWl0dGluZy4iCittc2dzdHIgIkR1IG3DpXN0ZSByw6R0dGEgdGlsbCBmZWxlbiBvdmFuIGlubmFuIGR1IGNoZWNrYXIgaW4uIgorCisjfiBtc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKKyN+IG1zZ3N0ciAiVmlzYXIgZW5kYXN0ICVzIGF2ICVzIGZpbGVyLiIKKworI34gbXNnaWQgIkNhc2UtU2Vuc2l0aXZlIgorI34gbXNnc3RyICJTa2lsaiBww6UgVkVSU0FMRVIvZ2VtZW5lciIKKworI34gbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgorI34gbXNnc3RyICJLYW4gaW50ZSBhbnbDpG5kYSB1bmRlcmxpZyAuZ2l0LWthdGFsb2c6IgorCisjfiBtc2dpZCAiUHJlZmVyZW5jZXMuLi4iCisjfiBtc2dzdHIgIkluc3TDpGxsbmluZ2FyLi4uIgorCisjfiBtc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSB0ZXN0LikiCisjfiBtc2dzdHIgIkFsbHRpZCAodXRmw7ZyIGludGUgc2FtbWFuc2xhZ25pbmdzdGVzdCkuIgorCisjfiBtc2dpZCAiVVJMOiIKKyN+IG1zZ3N0ciAiV2ViYmFkcmVzczoiCisKKyN+IG1zZ2lkICJEZWxldGUgUmVtb3RlIEJyYW5jaCIKKyN+IG1zZ3N0ciAiVGEgYm9ydCBmasOkcnJncmVuIgorCisjfiBtc2dpZCAiIgorI34gIlVuYWJsZSB0byBzdGFydCBnaXRrOlxuIgorI34gIlxuIgorI34gIiVzIGRvZXMgbm90IGV4aXN0IgorI34gbXNnc3RyICIiCisjfiAiS2FuIGludGUgc3RhcnRhIGdpdGs6XG4iCisjfiAiXG4iCisjfiAiJXMgZmlubnMgaW50ZSIKKworI34gbXNnaWQgIkFwcGxlIgorI34gbXNnc3RyICLDhHBwbGUiCisKKyN+IG1zZ2lkICJOb3QgY29ubmVjdGVkIHRvIGFzcGVsbCIKKyN+IG1zZ3N0ciAiSW50ZSBhbnNsdXRlbiB0aWxsIGFzcGVsbCIKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vdmkucG8gYi9naXQtZ3VpL3BvL3ZpLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NTZiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL3ZpLnBvCkBAIC0wLDAgKzEsMjY5MCBAQAorIyBWaWV0bmFtZXNlIHRyYW5zbGF0aW9uIGZvciBHSVQtR1VJCisjIELhuqNuIGThu4tjaCBUaeG6v25nIFZp4buHdCBkw6BuaCBjaG8gZ8OzaSBHaXQtZ3VpLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWNvcmUgcGFja2FnZS4KKyMgRmlyc3QgdHJhbnNsYXRlZCBieSBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPiwgMjAxNC4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdC1ndWkgMC4xOS4wXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE0LTA2LTI2IDEzOjQyKzA3MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE0LTA2LTI3IDA3OjQ4KzA3MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFRy4bqnbiBOZ+G7jWMgUXXDom4gPHZud2lsZG1hbkBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogVmlldG5hbWVzZSA8dHJhbnNsYXRpb24tdGVhbS12aUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IHZpXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKyJYLVBvZWRpdC1MYW5ndWFnZTogVmlldG5hbWVzZVxuIgorIlgtUG9lZGl0LUNvdW50cnk6IFZJRVQgTkFNXG4iCisiWC1Qb2VkaXQtU291cmNlQ2hhcnNldDogdXRmLThcbiIKKyJYLVBvZWRpdC1CYXNlcGF0aDogLi4vXG4iCisKKyM6IGdpdC1ndWkuc2g6ODU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBmb250IHNwZWNpZmllZCBpbiAlczoiCittc2dzdHIgIlBow7RuZyBjaOG7ryBraMO0bmcgaOG7o3AgbOG7hyDEkcaw4bujYyDEkeG6t2MgdOG6oyB0cm9uZyAlczoiCisKKyM6IGdpdC1ndWkuc2g6OTEyCittc2dpZCAiTWFpbiBGb250IgorbXNnc3RyICJQaMO0bmcgY2jhu68gY2jDrW5oIgorCisjOiBnaXQtZ3VpLnNoOjkxMworbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgorbXNnc3RyICJQaMO0bmcgY2jhu68gY2hvIELhuqNuZyDEkWnhu4F1IGtoaeG7g24gaGF5IERpZmYiCisKKyM6IGdpdC1ndWkuc2g6OTI4IGdpdC1ndWkuc2g6OTQyIGdpdC1ndWkuc2g6OTU1IGdpdC1ndWkuc2g6MTA0NQorIzogZ2l0LWd1aS5zaDoxMDY0IGdpdC1ndWkuc2g6MzExOQorbXNnaWQgImdpdC1ndWk6IGZhdGFsIGVycm9yIgorbXNnc3RyICJnaXQtZ3VpOiBs4buXaSBuZ2hpw6ptIHRy4buNbmciCisKKyM6IGdpdC1ndWkuc2g6OTI5Cittc2dpZCAiQ2Fubm90IGZpbmQgZ2l0IGluIFBBVEguIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgZ2l0IHRyb25nIGJp4bq/biBQQVRILiIKKworIzogZ2l0LWd1aS5zaDo5NTYKK21zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGNodeG7l2kgcGhpw6puIGLhuqNuIEdpdDoiCisKKyM6IGdpdC1ndWkuc2g6OTgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkdpdCB2ZXJzaW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuIgorIlxuIgorIiVzIGNsYWltcyBpdCBpcyB2ZXJzaW9uICclcycuXG4iCisiXG4iCisiJXMgcmVxdWlyZXMgYXQgbGVhc3QgR2l0IDEuNS4wIG9yIGxhdGVyLlxuIgorIlxuIgorIkFzc3VtZSAnJXMnIGlzIHZlcnNpb24gMS41LjA/XG4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4Mgbmjhuq1uIHJhIHBoacOqbiBi4bqjbiBj4bunYSBHaXQuXG4iCisiXG4iCisiJXMgbsOzaSDEkcOieSBsw6AgcGhpw6puIGLhuqNuICclcycuXG4iCisiXG4iCisiJXMgecOqdSBj4bqndSBHaXQgcGhpw6puIGLhuqNuIHThu6sgMS41LjAgaGF5IG3hu5tpIGjGoW4uXG4iCisiXG4iCisiQ+G7jWkgJyVzJyBjw7MgcGhpw6puIGLhuqNuIGzDoCAxLjUuMD9cbiIKKworIzogZ2l0LWd1aS5zaDoxMjc4Cittc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgdGjGsCBt4bulYyBnaXQ6IgorCisjOiBnaXQtZ3VpLnNoOjEzMTIKK21zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gxJHhur9uIMSR4buJbmggY+G7p2EgdGjGsCBt4bulYyBsw6BtIHZp4buHYzoiCisKKyM6IGdpdC1ndWkuc2g6MTMyMAorbXNnaWQgIkNhbm5vdCB1c2UgYmFyZSByZXBvc2l0b3J5OiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGTDuW5nIGtobyB0cuG6p246IgorCisjOiBnaXQtZ3VpLnNoOjEzMjgKK21zZ2lkICJObyB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgorCisjOiBnaXQtZ3VpLnNoOjE1MDAgbGliL2NoZWNrb3V0X29wLnRjbDozMDYKK21zZ2lkICJSZWZyZXNoaW5nIGZpbGUgc3RhdHVzLi4uIgorbXNnc3RyICJD4bqtcCBuaOG6rXQgbOG6oWkgdHLhuqFuZyB0aMOhaSB04bqtcCB0aW4uLi4iCisKKyM6IGdpdC1ndWkuc2g6MTU2MAorbXNnaWQgIlNjYW5uaW5nIGZvciBtb2RpZmllZCBmaWxlcyAuLi4iCittc2dzdHIgIsSQYW5nIHF1w6l0IMSRxKlhIHTDrG0gdOG6rXAgdGluIHRoYXkgxJHhu5VpLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE2MzYKK21zZ2lkICJDYWxsaW5nIHByZXBhcmUtY29tbWl0LW1zZyBob29rLi4uIgorbXNnc3RyICLEkGFuZyBn4buNaSBtw7NjIHByZXBhcmUtY29tbWl0LW1zZy4uLiIKKworIzogZ2l0LWd1aS5zaDoxNjUzCittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZXBhcmUtY29tbWl0LW1zZyBob29rLiIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBi4buLIGNo4buRaSB04burIGRvIG3Ds2MgcHJlcGFyZS1jb21taXQtbXNnLiIKKworIzogZ2l0LWd1aS5zaDoxODExIGxpYi9icm93c2VyLnRjbDoyNTIKK21zZ2lkICJSZWFkeS4iCittc2dzdHIgIlPhurVuIHPDoG5nLiIKKworIzogZ2l0LWd1aS5zaDoxOTY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlzcGxheWluZyBvbmx5ICVzIG9mICVzIGZpbGVzLiIKK21zZ3N0ciAiQ2jhu4kgaGnhu4NuIHRo4buLICVzIHRyb25nIHPhu5EgJXMgdOG6rXAgdGluLiIKKworIzogZ2l0LWd1aS5zaDoyMDk1Cittc2dpZCAiVW5tb2RpZmllZCIKK21zZ3N0ciAiS2jDtG5nIHRoYXkgxJHhu5VpIGfDrCIKKworIzogZ2l0LWd1aS5zaDoyMDk3Cittc2dpZCAiTW9kaWZpZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIsSQw6Mgc+G7rWEgbmjGsG5nIGNoxrBhIMSRw6FuaCBk4bqldSDEkeG7gyBjaHV54buDbiBnaWFvIgorCisjOiBnaXQtZ3VpLnNoOjIwOTggZ2l0LWd1aS5zaDoyMTEwCittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIsSQw6FuaCBk4bqldSDEkeG7gyBjaHV54buDbiBnaWFvIgorCisjOiBnaXQtZ3VpLnNoOjIwOTkgZ2l0LWd1aS5zaDoyMTExCittc2dpZCAiUG9ydGlvbnMgc3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIkPDoWMgcGjhuqduIMSRxrDhu6NjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0LWd1aS5zaDoyMTAwIGdpdC1ndWkuc2g6MjExMgorbXNnaWQgIlN0YWdlZCBmb3IgY29tbWl0LCBtaXNzaW5nIgorbXNnc3RyICLEkMOjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gY2h1eeG7g24gZ2lhbywgdGhp4bq/dSIKKworIzogZ2l0LWd1aS5zaDoyMTAyCittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG5vdCBzdGFnZWQiCittc2dzdHIgIsSQw6MgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4gbmjGsG5nIGNoxrBhIMSRxrDhu6NjIMSRw6FuaCBk4bqldSBj4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXQtZ3VpLnNoOjIxMDMgZ2l0LWd1aS5zaDoyMTA0Cittc2dpZCAiRmlsZSB0eXBlIGNoYW5nZWQsIG9sZCB0eXBlIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICLEkMOjIMSR4buVaSBraeG7g3UgdOG6rXAgdGluLCBraeG7g3UgY8WpIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MjEwNQorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2VkLCBzdGFnZWQiCittc2dzdHIgIsSQw6MgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4sIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MjEwNgorbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBtb2RpZmljYXRpb24gbm90IHN0YWdlZCIKK21zZ3N0ciAiIgorIlRoYXkgxJHhu5VpIGtp4buDdSB04bqtcCB0aW4gxJHDoyDEkcaw4bujYyDEkcOhbmggZOG6pXUgY+G6p24gY2h1eeG7g24gZ2lhbywgbmjGsG5nIGPDoWMgdGhheSDEkeG7lWkgIgorInRow6wgY2jGsGEiCisKKyM6IGdpdC1ndWkuc2g6MjEwNworbXNnaWQgIkZpbGUgdHlwZSBjaGFuZ2Ugc3RhZ2VkLCBmaWxlIG1pc3NpbmciCittc2dzdHIgIiIKKyJUaGF5IMSR4buVaSBraeG7g3UgdOG6rXAgdGluIMSRw6MgxJHGsOG7o2MgxJHDoW5oIGThuqV1IGPhuqduIGNodXnhu4NuIGdpYW8sIHThuq1wIHRpbiBi4buLIHRoaeG6v3UiCisKKyM6IGdpdC1ndWkuc2g6MjEwOQorbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAiQ2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpLCBjaMawYSDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MjExNAorbXNnaWQgIk1pc3NpbmciCittc2dzdHIgIlRoaeG6v3UiCisKKyM6IGdpdC1ndWkuc2g6MjExNQorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCIKK21zZ3N0ciAixJDDoyDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGfhu6EgYuG7jyIKKworIzogZ2l0LWd1aS5zaDoyMTE2Cittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsLCBzdGlsbCBwcmVzZW50IgorbXNnc3RyICLEkMOjIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gZ+G7oSBi4buPLCBuaMawbmcgduG6q24gaGnhu4duIGRp4buHbiIKKworIzogZ2l0LWd1aS5zaDoyMTE4IGdpdC1ndWkuc2g6MjExOSBnaXQtZ3VpLnNoOjIxMjAgZ2l0LWd1aS5zaDoyMTIxCisjOiBnaXQtZ3VpLnNoOjIxMjIgZ2l0LWd1aS5zaDoyMTIzCittc2dpZCAiUmVxdWlyZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiQ8OhYyB5w6p1IGPhuqd1IHBow6JuIGdp4bqjaSBow7JhIHRy4buZbiIKKworIzogZ2l0LWd1aS5zaDoyMTU4Cittc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAixJBhbmcga2jhu59pIMSR4buZbmcgZ2l0ay4uLiB2dWkgbMOybmcgY2jhu50uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjE3MAorbXNnaWQgIkNvdWxkbid0IGZpbmQgZ2l0ayBpbiBQQVRIIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkgZ2l0ayB0cm9uZyBQQVRIIgorCisjOiBnaXQtZ3VpLnNoOjIyMjkKK21zZ2lkICJDb3VsZG4ndCBmaW5kIGdpdCBndWkgaW4gUEFUSCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGdpdCBndWkgdHJvbmcgUEFUSCIKKworIzogZ2l0LWd1aS5zaDoyNjQ4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDAKK21zZ2lkICJSZXBvc2l0b3J5IgorbXNnc3RyICJLaG8iCisKKyM6IGdpdC1ndWkuc2g6MjY0OQorbXNnaWQgIkVkaXQiCittc2dzdHIgIkNo4buJbmggc+G7rWEiCisKKyM6IGdpdC1ndWkuc2g6MjY1MSBsaWIvY2hvb3NlX3Jldi50Y2w6NTY3Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJOaMOhbmgiCisKKyM6IGdpdC1ndWkuc2g6MjY1NCBsaWIvY2hvb3NlX3Jldi50Y2w6NTU0Cittc2dpZCAiQ29tbWl0QEBub3VuIgorbXNnc3RyICJDaHV54buDbiBnaWFvQEBub3VuIgorCisjOiBnaXQtZ3VpLnNoOjI2NTcgbGliL21lcmdlLnRjbDoxMjMgbGliL21lcmdlLnRjbDoxNTIgbGliL21lcmdlLnRjbDoxNzAKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAiVHLhu5luIgorCisjOiBnaXQtZ3VpLnNoOjI2NTggbGliL2Nob29zZV9yZXYudGNsOjU2MworbXNnaWQgIlJlbW90ZSIKK21zZ3N0ciAiTcOheSBjaOG7pyIKKworIzogZ2l0LWd1aS5zaDoyNjYxCittc2dpZCAiVG9vbHMiCittc2dzdHIgIkPDtG5nIGPhu6UiCisKKyM6IGdpdC1ndWkuc2g6MjY3MAorbXNnaWQgIkV4cGxvcmUgV29ya2luZyBDb3B5IgorbXNnc3RyICJRdcOpdCBkw7IgdGjGsCBt4bulYyBsw6BtIHZp4buHYyIKKworIzogZ2l0LWd1aS5zaDoyNjc2Cittc2dpZCAiR2l0IEJhc2giCittc2dzdHIgIkdpdCBCYXNoIgorCisjOiBnaXQtZ3VpLnNoOjI2ODYKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAiRHV54buHdCBjw6FjIFThuq1wIHRpbiDhu58gbmjDoW5oIGhp4buHbiBuYXkiCisKKyM6IGdpdC1ndWkuc2g6MjY5MAorbXNnaWQgIkJyb3dzZSBCcmFuY2ggRmlsZXMuLi4iCittc2dzdHIgIkR1eeG7h3QgY8OhYyB04bqtcCB0aW4gbmjDoW5oLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI2OTUKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2gncyBIaXN0b3J5IgorbXNnc3RyICJIaeG7g24gdGjhu4sgdHLhu7FjIHF1YW4gbOG7i2NoIHPhu60gbmjDoW5oIGhp4buHbiBuYXkiCisKKyM6IGdpdC1ndWkuc2g6MjY5OQorbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0cuG7sWMgcXVhbiBs4buLY2ggc+G7rSBt4buNaSBuaMOhbmgiCisKKyM6IGdpdC1ndWkuc2g6MjcwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyb3dzZSAlcydzIEZpbGVzIgorbXNnc3RyICJEdXnhu4d0IHThuq1wIHRpbiBj4bunYSAlcy4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKK21zZ3N0ciAiRHV54buHdCBs4buLY2ggc+G7rSBj4bunYSAlcyB0cuG7sWMgcXVhbiIKKworIzogZ2l0LWd1aS5zaDoyNzEzIGxpYi9kYXRhYmFzZS50Y2w6NDAgbGliL2RhdGFiYXNlLnRjbDo2NgorbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCittc2dzdHIgIlRo4buRbmcga8OqIGPGoSBz4bufIGThu68gbGnhu4d1IgorCisjOiBnaXQtZ3VpLnNoOjI3MTYgbGliL2RhdGFiYXNlLnRjbDozMworbXNnaWQgIkNvbXByZXNzIERhdGFiYXNlIgorbXNnc3RyICJOw6luIGPGoSBz4bufIGThu68gbGnhu4d1IgorCisjOiBnaXQtZ3VpLnNoOjI3MTkKK21zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCittc2dzdHIgIlRo4bqpbSB0cmEgY8ahIHPhu58gZOG7ryBsaeG7h3UiCisKKyM6IGdpdC1ndWkuc2g6MjcyNiBnaXQtZ3VpLnNoOjI3MzAgZ2l0LWd1aS5zaDoyNzM0IGxpYi9zaG9ydGN1dC50Y2w6OAorIzogbGliL3Nob3J0Y3V0LnRjbDo0MCBsaWIvc2hvcnRjdXQudGNsOjcyCittc2dpZCAiQ3JlYXRlIERlc2t0b3AgSWNvbiIKK21zZ3N0ciAiVOG6oW8gbOG7kWkgdOG6r3Qg4bufIG3DoG4gaMOsbmggbuG7gW4iCisKKyM6IGdpdC1ndWkuc2g6Mjc0MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE5MiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjIwMAorbXNnaWQgIlF1aXQiCittc2dzdHIgIlRob8OhdCIKKworIzogZ2l0LWd1aS5zaDoyNzUwCittc2dpZCAiVW5kbyIKK21zZ3N0ciAiSOG7p3kgbOG7h25oIHbhu6thIHLhu5NpIgorCisjOiBnaXQtZ3VpLnNoOjI3NTMKK21zZ2lkICJSZWRvIgorbXNnc3RyICJMw6BtIGzhuqFpIgorCisjOiBnaXQtZ3VpLnNoOjI3NTcgZ2l0LWd1aS5zaDozMzYyCittc2dpZCAiQ3V0IgorbXNnc3RyICJD4bqvdCIKKworIzogZ2l0LWd1aS5zaDoyNzYwIGdpdC1ndWkuc2g6MzM2NSBnaXQtZ3VpLnNoOjM0MzkgZ2l0LWd1aS5zaDozNTI0CisjOiBsaWIvY29uc29sZS50Y2w6NjkKK21zZ2lkICJDb3B5IgorbXNnc3RyICJDaMOpcCIKKworIzogZ2l0LWd1aS5zaDoyNzYzIGdpdC1ndWkuc2g6MzM2OAorbXNnaWQgIlBhc3RlIgorbXNnc3RyICJEw6FuIgorCisjOiBnaXQtZ3VpLnNoOjI3NjYgZ2l0LWd1aS5zaDozMzcxIGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyOAorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOQorbXNnaWQgIkRlbGV0ZSIKK21zZ3N0ciAiWMOzYSBi4buPIgorCisjOiBnaXQtZ3VpLnNoOjI3NzAgZ2l0LWd1aS5zaDozMzc1IGdpdC1ndWkuc2g6MzUyOCBsaWIvY29uc29sZS50Y2w6NzEKK21zZ2lkICJTZWxlY3QgQWxsIgorbXNnc3RyICJDaOG7jW4gdOG6pXQgY+G6oyIKKworIzogZ2l0LWd1aS5zaDoyNzc5Cittc2dpZCAiQ3JlYXRlLi4uIgorbXNnc3RyICJU4bqhby4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzg1Cittc2dpZCAiQ2hlY2tvdXQuLi4iCittc2dzdHIgIkzhuqV5IHJhLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3OTEKK21zZ2lkICJSZW5hbWUuLi4iCittc2dzdHIgIsSQ4buVaSB0w6puLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI3OTYKK21zZ2lkICJEZWxldGUuLi4iCittc2dzdHIgIljDs2EuLi4iCisKKyM6IGdpdC1ndWkuc2g6MjgwMQorbXNnaWQgIlJlc2V0Li4uIgorbXNnc3RyICLEkOG6t3QgbOG6oWkuLiIKKworIzogZ2l0LWd1aS5zaDoyODExCittc2dpZCAiRG9uZSIKK21zZ3N0ciAiWG9uZyIKKworIzogZ2l0LWd1aS5zaDoyODEzCittc2dpZCAiQ29tbWl0QEB2ZXJiIgorbXNnc3RyICJDaHV54buDbiBnaWFvQEB2ZXJiIgorCisjOiBnaXQtZ3VpLnNoOjI4MjIgZ2l0LWd1aS5zaDozMzAzCittc2dpZCAiTmV3IENvbW1pdCIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyBt4bubaSIKKworIzogZ2l0LWd1aS5zaDoyODMwIGdpdC1ndWkuc2g6MzMxMAorbXNnaWQgIkFtZW5kIExhc3QgQ29tbWl0IgorbXNnc3RyICJUdSBi4buVIGzhuqduIGNodXnhu4NuIGdpYW8gY3Xhu5FpIgorCisjOiBnaXQtZ3VpLnNoOjI4NDAgZ2l0LWd1aS5zaDozMjY0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTAxCittc2dpZCAiUmVzY2FuIgorbXNnc3RyICJRdcOpdCBs4bqhaSIKKworIzogZ2l0LWd1aS5zaDoyODQ2Cittc2dpZCAiU3RhZ2UgVG8gQ29tbWl0IgorbXNnc3RyICLEkMawYSBsw6puIGLhu4cgcGjDs25nIMSR4buDIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6Mjg1MgorbXNnaWQgIlN0YWdlIENoYW5nZWQgRmlsZXMgVG8gQ29tbWl0IgorbXNnc3RyICLEkMOhbmggZOG6pXUgY8OhYyB04bqtcCB0aW4gxJHDoyB0aGF5IMSR4buVaSBj4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXQtZ3VpLnNoOjI4NTgKK21zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgorbXNnc3RyICLEkMawYSByYSBraOG7j2kgYuG7hyBwaMOzbmcgxJHhu4Mga2jDtG5nIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6Mjg2NCBsaWIvaW5kZXgudGNsOjQ0MgorbXNnaWQgIlJldmVydCBDaGFuZ2VzIgorbXNnc3RyICJIb8OgbiBuZ3V5w6puIGPDoWMgdGhheSDEkeG7lWkiCisKKyM6IGdpdC1ndWkuc2g6Mjg3MiBnaXQtZ3VpLnNoOjM1NzUgZ2l0LWd1aS5zaDozNjA2Cittc2dpZCAiU2hvdyBMZXNzIENvbnRleHQiCittc2dzdHIgIkhp4buHbiDDrXQgbuG7mWkgZHVuZyBoxqFuIgorCisjOiBnaXQtZ3VpLnNoOjI4NzYgZ2l0LWd1aS5zaDozNTc5IGdpdC1ndWkuc2g6MzYxMAorbXNnaWQgIlNob3cgTW9yZSBDb250ZXh0IgorbXNnc3RyICJIaeG7h24gY2hpIHRp4bq/dCBoxqFuIgorCisjOiBnaXQtZ3VpLnNoOjI4ODMgZ2l0LWd1aS5zaDozMjc3IGdpdC1ndWkuc2g6MzM4NgorbXNnaWQgIlNpZ24gT2ZmIgorbXNnc3RyICJLw70gdMOqbiIKKworIzogZ2l0LWd1aS5zaDoyODk5Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgIlRy4buZbiBu4buZaSBi4buZLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI5MDQKK21zZ2lkICJBYm9ydCBNZXJnZS4uLiIKK21zZ3N0ciAiSOG7p3kgYuG7jyBow7JhIHRy4buZbi4uLiIKKworIzogZ2l0LWd1aS5zaDoyOTE2IGdpdC1ndWkuc2g6Mjk0NAorbXNnaWQgIkFkZC4uLiIKK21zZ3N0ciAiVGjDqm0uLi4iCisKKyM6IGdpdC1ndWkuc2g6MjkyMAorbXNnaWQgIlB1c2guLi4iCittc2dzdHIgIsSQ4bqpeSBsw6puLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI5MjQKK21zZ2lkICJEZWxldGUgQnJhbmNoLi4uIgorbXNnc3RyICJYb8OhIG5ow6FuaC4uLiIKKworIzogZ2l0LWd1aS5zaDoyOTM0IGdpdC1ndWkuc2g6MzU1NworbXNnaWQgIk9wdGlvbnMuLi4iCittc2dzdHIgIlTDuXkgY2jhu41uLi4uIgorCisjOiBnaXQtZ3VpLnNoOjI5NDUKK21zZ2lkICJSZW1vdmUuLi4iCittc2dzdHIgIkfhu6EgYuG7jy4uLiIKKworIzogZ2l0LWd1aS5zaDoyOTU0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTQKK21zZ2lkICJIZWxwIgorbXNnc3RyICJUcuG7oyBnacO6cCIKKworIzogZ2l0LWd1aS5zaDoyOTU4IGdpdC1ndWkuc2g6Mjk2MiBsaWIvYWJvdXQudGNsOjE0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm91dCAlcyIKK21zZ3N0ciAiR2nhu5tpIHRoaeG7h3UgduG7gSAlcyIKKworIzogZ2l0LWd1aS5zaDoyOTg2Cittc2dpZCAiT25saW5lIERvY3VtZW50YXRpb24iCittc2dzdHIgIsSQ4buNYyB0w6BpIGxp4buHdSB0cuG7sWMgdHV54bq/biIKKworIzogZ2l0LWd1aS5zaDoyOTg5IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MAorbXNnaWQgIlNob3cgU1NIIEtleSIKK21zZ3N0ciAiSGnhu4duIGtob8OhIFNTSCIKKworIzogZ2l0LWd1aS5zaDozMDA4IGdpdC1ndWkuc2g6MzE0MAorbXNnaWQgIlVzYWdlIgorbXNnc3RyICJDw6FjaCBkw7luZyIKKworIzogZ2l0LWd1aS5zaDozMDg5IGxpYi9ibGFtZS50Y2w6NTczCittc2dpZCAiRXJyb3IiCittc2dzdHIgIkzhu5dpIgorCisjOiBnaXQtZ3VpLnNoOjMxMjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogY2Fubm90IHN0YXQgcGF0aCAlczogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImzhu5dpIG5naGnDqm0gdHLhu41uZzoga2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gduG7gSDEkcaw4budbmcgZOG6q24gJXM6IEtow7RuZyBjw7MgdOG6rXAgdGluICIKKyJob+G6t2MgdGjGsCBt4bulYyBuaMawIHbhuq15IgorCisjOiBnaXQtZ3VpLnNoOjMxNTMKK21zZ2lkICJDdXJyZW50IEJyYW5jaDoiCittc2dzdHIgIk5ow6FuaCBoaeG7h24gaMOgbmg6IgorCisjOiBnaXQtZ3VpLnNoOjMxNzkKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICLEkMOhbmggZOG6pXUgY8OhYyB0aGF5IMSR4buVaSAoU+G6vSBjaHV54buDbiBnaWFvKSIKKworIzogZ2l0LWd1aS5zaDozMTk5Cittc2dpZCAiVW5zdGFnZWQgQ2hhbmdlcyIKK21zZ3N0ciAiQuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcgY8OhYyB0aGF5IMSR4buVaSIKKworIzogZ2l0LWd1aS5zaDozMjcwCittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAixJDhurd0IGzDqm4gYuG7hyBwaMOzbmcgY8OhYyB0aGF5IMSR4buVaSIKKworIzogZ2l0LWd1aS5zaDozMjg5IGxpYi90cmFuc3BvcnQudGNsOjEzNyBsaWIvdHJhbnNwb3J0LnRjbDoyMjkKK21zZ2lkICJQdXNoIgorbXNnc3RyICLEkOG6qXkgbMOqbiIKKworIzogZ2l0LWd1aS5zaDozMzI0Cittc2dpZCAiSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIlBo4bqnbiBjaMO6IHRow61jaCBjaG8gbOG6p24gY2h1eeG7g24gZ2lhbyBraOG7n2kgdOG6oW86IgorCisjOiBnaXQtZ3VpLnNoOjMzMjUKK21zZ2lkICJBbWVuZGVkIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiUGjhuqduIGNow7ogZ2nhuqNpIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHR1IGLhu5U6IgorCisjOiBnaXQtZ3VpLnNoOjMzMjYKK21zZ2lkICJBbWVuZGVkIEluaXRpYWwgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJQaOG6p24gY2jDuiBnaeG6o2kgY2hvIGzhuqduIGNodXnhu4NuIGdpYW8gdHUgYuG7lSBs4bqnbiBraOG7n2kgdOG6oW86IgorCisjOiBnaXQtZ3VpLnNoOjMzMjcKK21zZ2lkICJBbWVuZGVkIE1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiUGjhuqduIGNow7ogZ2nhuqNpIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIHR1IGLhu5UgbOG6p24gaMOyYSB0cuG7mW4iCisKKyM6IGdpdC1ndWkuc2g6MzMyOAorbXNnaWQgIk1lcmdlIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiR2hpIGNow7ogY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbjoiCisKKyM6IGdpdC1ndWkuc2g6MzMyOQorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiQ2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbzoiCisKKyM6IGdpdC1ndWkuc2g6MzM3OCBnaXQtZ3VpLnNoOjM1MzIgbGliL2NvbnNvbGUudGNsOjczCittc2dpZCAiQ29weSBBbGwiCittc2dzdHIgIkNow6lwIHThuqV0IGPhuqMiCisKKyM6IGdpdC1ndWkuc2g6MzQwMiBsaWIvYmxhbWUudGNsOjEwNQorbXNnaWQgIkZpbGU6IgorbXNnc3RyICJU4bqtcCB0aW46IgorCisjOiBnaXQtZ3VpLnNoOjM1MjAKK21zZ2lkICJSZWZyZXNoIgorbXNnc3RyICJMw6BtIHTGsMahaSBs4bqhaSIKKworIzogZ2l0LWd1aS5zaDozNTQxCittc2dpZCAiRGVjcmVhc2UgRm9udCBTaXplIgorbXNnc3RyICJHaeG6o20ga8OtY2ggY+G7oSBwaMO0bmciCisKKyM6IGdpdC1ndWkuc2g6MzU0NQorbXNnaWQgIkluY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAiVMSDbmcga8OtY2ggY+G7oSBwaMO0bmciCisKKyM6IGdpdC1ndWkuc2g6MzU1MyBsaWIvYmxhbWUudGNsOjI5NAorbXNnaWQgIkVuY29kaW5nIgorbXNnc3RyICJC4bqjbmcgbcOjIgorCisjOiBnaXQtZ3VpLnNoOjM1NjQKK21zZ2lkICJBcHBseS9SZXZlcnNlIEh1bmsiCittc2dzdHIgIsOBcCBk4bulbmcgaGF5IMSR4bqjbyBuZ8aw4bujYyBj4bqjIGto4buRaSIKKworIzogZ2l0LWd1aS5zaDozNTY5Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBMaW5lIgorbXNnc3RyICLDgXAgZOG7pW5nIGhheSDEkeG6o28gbmfGsOG7o2MgZMOybmciCisKKyM6IGdpdC1ndWkuc2g6MzU4OAorbXNnaWQgIlJ1biBNZXJnZSBUb29sIgorbXNnc3RyICJDaOG6oXkgY8O0bmcgY+G7pSBow7JhIHRy4buZbiIKKworIzogZ2l0LWd1aS5zaDozNTkzCittc2dpZCAiVXNlIFJlbW90ZSBWZXJzaW9uIgorbXNnc3RyICJEw7luZyBwaGnDqm4gYuG6o24g4bufIG3DoXkgY2jhu6ciCisKKyM6IGdpdC1ndWkuc2g6MzU5NworbXNnaWQgIlVzZSBMb2NhbCBWZXJzaW9uIgorbXNnc3RyICJEw7luZyBwaGnDqm4gYuG6o24g4bufIG3DoXkgbuG7mWkgYuG7mSIKKworIzogZ2l0LWd1aS5zaDozNjAxCittc2dpZCAiUmV2ZXJ0IFRvIEJhc2UiCittc2dzdHIgIlRy4bufIGzhuqFpIGPGoSBi4bqjbiIKKworIzogZ2l0LWd1aS5zaDozNjE5Cittc2dpZCAiVmlzdWFsaXplIFRoZXNlIENoYW5nZXMgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRy4buxYyBxdWFuIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgbcO0LcSRdW4gY29uIgorCisjOiBnaXQtZ3VpLnNoOjM2MjMKK21zZ2lkICJWaXN1YWxpemUgQ3VycmVudCBCcmFuY2ggSGlzdG9yeSBJbiBUaGUgU3VibW9kdWxlIgorbXNnc3RyICJIaeG7g24gdGjhu4sgdHLhu7FjIHF1YW4gbOG7i2NoIHPhu60gbmjDoW5oIGhp4buHbiB04bqhaSB0cm9uZyBtw7QtxJF1biBjb24iCisKKyM6IGdpdC1ndWkuc2g6MzYyNworbXNnaWQgIlZpc3VhbGl6ZSBBbGwgQnJhbmNoIEhpc3RvcnkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRy4buxYyBxdWFuIGzhu4tjaCBz4butIG3hu41pIG5ow6FuaCB0cm9uZyBtw7QtxJF1biBjb24iCisKKyM6IGdpdC1ndWkuc2g6MzYzMgorbXNnaWQgIlN0YXJ0IGdpdCBndWkgSW4gVGhlIFN1Ym1vZHVsZSIKK21zZ3N0ciAiS2jhu59pIGNo4bqheSBnaXQgZ3VpIHRyb25nIG3DtC3EkXVuLWNvbiIKKworIzogZ2l0LWd1aS5zaDozNjY3Cittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICJC4buPIMSRw6FuaCBk4bqldSDEkW/huqFuIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MzY2OQorbXNnaWQgIlVuc3RhZ2UgTGluZXMgRnJvbSBDb21taXQiCittc2dzdHIgIkLhu48gxJHDoW5oIGThuqV1IGPDoWMgZMOybmcgY+G6p24gY2h1eeG7g24gZ2lhbyIKKworIzogZ2l0LWd1aS5zaDozNjcxCittc2dpZCAiVW5zdGFnZSBMaW5lIEZyb20gQ29tbWl0IgorbXNnc3RyICJC4buPIMSRw6FuaCBk4bqldSBkw7JuZyBj4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXQtZ3VpLnNoOjM2NzQKK21zZ2lkICJTdGFnZSBIdW5rIEZvciBDb21taXQiCittc2dzdHIgIsSQw6FuaCBk4bqldSDEkW/huqFuIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MzY3NgorbXNnaWQgIlN0YWdlIExpbmVzIEZvciBDb21taXQiCittc2dzdHIgIsSQw6FuaCBk4bqldSBjw6FjIGTDsm5nIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MzY3OAorbXNnaWQgIlN0YWdlIExpbmUgRm9yIENvbW1pdCIKK21zZ3N0ciAixJDDoW5oIGThuqV1IGTDsm5nIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdC1ndWkuc2g6MzcwMworbXNnaWQgIkluaXRpYWxpemluZy4uLiIKK21zZ3N0ciAixJBhbmcga2jhu59pIHThuqFvLi4uIgorCisjOiBnaXQtZ3VpLnNoOjM4NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUG9zc2libGUgZW52aXJvbm1lbnQgaXNzdWVzIGV4aXN0LlxuIgorIlxuIgorIlRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBwcm9iYWJseVxuIgorImdvaW5nIHRvIGJlIGlnbm9yZWQgYnkgYW55IEdpdCBzdWJwcm9jZXNzIHJ1blxuIgorImJ5ICVzOlxuIgorIlxuIgorbXNnc3RyICIiCisiR+G6p24gbmjGsCBjaOG6r2MgY2jhuq9uIGzDoCBtw7RpIHRyxrDhu51uZyB04buTbiB04bqhaS5cbiIKKyJcbiIKKyJDw6FjIGJp4bq/biBtw7RpIHRyxrDhu51uZyBzYXUgxJHDonkgY8OzIGzhur0gc+G6vSBi4buLIGLhu48gcXVhIGLhu59pIGPDoWMgdGnhur9uIHRyw6xuaCBjb24gZ2l0XG4iCisiY2jhuqF5IGLhu59pICVzOlxuIgorIlxuIgorCisjOiBnaXQtZ3VpLnNoOjM4NzUKK21zZ2lkICIiCisiXG4iCisiVGhpcyBpcyBkdWUgdG8gYSBrbm93biBpc3N1ZSB3aXRoIHRoZVxuIgorIlRjbCBiaW5hcnkgZGlzdHJpYnV0ZWQgYnkgQ3lnd2luLiIKK21zZ3N0ciAiIgorIlxuIgorIkPDoWkgbsOgeSBjw7Mgbmd1ecOqbiBuaMOibiBi4bufaSBt4buZdCBs4buXaSBwaMOhdCByYSB04burXG4iCisiVGNsIHBow6JuIHBo4buRaSBi4bufaSBDeWd3aW4uIgorCisjOiBnaXQtZ3VpLnNoOjM4ODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiXG4iCisiQSBnb29kIHJlcGxhY2VtZW50IGZvciAlc1xuIgorImlzIHBsYWNpbmcgdmFsdWVzIGZvciB0aGUgdXNlci5uYW1lIGFuZFxuIgorInVzZXIuZW1haWwgc2V0dGluZ3MgaW50byB5b3VyIHBlcnNvbmFsXG4iCisifi8uZ2l0Y29uZmlnIGZpbGUuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJcbiIKKyJUaGF5IHRo4bq/IHThu5F0IGNobyAlc1xuIgorImzDoCB0aGF5IHRo4bq/IGPDoWMgZ2nDoSB0cuG7iyBjw6BpIMSR4bq3dCBjaG8gdXNlci5uYW1lIHbDoFxuIgorInVzZXIuZW1haWwgdGjDoG5oIHThuq1wIHRpbiBjw6EgbmjDom4gY+G7p2EgYuG6oW5cbiIKKyJ+Ly5naXRjb25maWcuXG4iCisKKyM6IGxpYi9hYm91dC50Y2w6MjYKK21zZ2lkICJnaXQtZ3VpIC0gYSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yIEdpdC4iCittc2dzdHIgImdpdC1ndWkgLSBjw7RuZyBj4bulIMSR4buTIGjhu41hIGTDoG5oIGNobyBHaXQuIgorCisjOiBsaWIvYmxhbWUudGNsOjczCittc2dpZCAiRmlsZSBWaWV3ZXIiCittc2dzdHIgIkLhu5kgWGVtIFThuq1wIFRpbiIKKworIzogbGliL2JsYW1lLnRjbDo3OQorbXNnaWQgIkNvbW1pdDoiCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW86IgorCisjOiBsaWIvYmxhbWUudGNsOjI4MAorbXNnaWQgIkNvcHkgQ29tbWl0IgorbXNnc3RyICJDaMOpcCBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBsaWIvYmxhbWUudGNsOjI4NAorbXNnaWQgIkZpbmQgVGV4dC4uLiIKK21zZ3N0ciAiVMOsbSBjaOG7ry4uLiIKKworIzogbGliL2JsYW1lLnRjbDoyODgKK21zZ2lkICJHb3RvIExpbmUuLi4iCittc2dzdHIgIk5o4bqjeSDEkeG6v24gZMOybmcuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6Mjk3Cittc2dpZCAiRG8gRnVsbCBDb3B5IERldGVjdGlvbiIKK21zZ3N0ciAiVGjhu7FjIGhp4buHbiBkw7IgdMOsbSBjaMOpcCB0b8OgbiBi4buZIgorCisjOiBsaWIvYmxhbWUudGNsOjMwMQorbXNnaWQgIlNob3cgSGlzdG9yeSBDb250ZXh0IgorbXNnc3RyICJIaeG7g24gdGjhu4sgbuG7mWkgZHVuZyBj4bunYSBs4buLY2ggc+G7rSIKKworIzogbGliL2JsYW1lLnRjbDozMDQKK21zZ2lkICJCbGFtZSBQYXJlbnQgQ29tbWl0IgorbXNnc3RyICJYZW0gY8O0bmcgdHLhuqFuZyBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIGNoYSBt4bq5IgorCisjOiBsaWIvYmxhbWUudGNsOjQ2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgJXMuLi4iCittc2dzdHIgIsSQYW5nIMSR4buNYyAlcy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1OTQKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAixJBhbmcgdOG6o2kgcGjhuqduIGNow7ogZ2nhuqNpIHRoZW8gZMO1aSBjaMOpcC9jaHV54buDbi4uLiIKKworIzogbGliL2JsYW1lLnRjbDo2MTQKK21zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCittc2dzdHIgImTDsm5nIGNow7ogZ2nhuqNpIgorCisjOiBsaWIvYmxhbWUudGNsOjgwNgorbXNnaWQgIkxvYWRpbmcgb3JpZ2luYWwgbG9jYXRpb24gYW5ub3RhdGlvbnMuLi4iCittc2dzdHIgIsSQYW5nIHThuqNpIGPDoWMgY2jDuiBnaeG6o2kgduG7iyB0csOtIG5ndXnDqm4gZ+G7kWMuLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODA5Cittc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCittc2dzdHIgIkNow7ogZ2nhuqNpIGhvw6BuIHThuqV0LiIKKworIzogbGliL2JsYW1lLnRjbDo4MzkKK21zZ2lkICJCdXN5IgorbXNnc3RyICJC4bqtbiIKKworIzogbGliL2JsYW1lLnRjbDo4NDAKK21zZ2lkICJBbm5vdGF0aW9uIHByb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nLiIKK21zZ3N0ciAiVGnhur9uIHRyw6xuaCBjaMO6IGdp4bqjaSDEkWFuZyBkaeG7hW4gcmEuIgorCisjOiBsaWIvYmxhbWUudGNsOjg3OQorbXNnaWQgIlJ1bm5pbmcgdGhvcm91Z2ggY29weSBkZXRlY3Rpb24uLi4iCittc2dzdHIgIsSQYW5nIGNo4bqheSBkw7IgdMOsbSBzYW8gY2jDqXAgdG/DoG4gZGnhu4duLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjk0NworbXNnaWQgIkxvYWRpbmcgYW5ub3RhdGlvbi4uLiIKK21zZ3N0ciAixJBhbmcgdOG6o2kgcGjhuqduIGNow7ogZ2nhuqNpLi4uIgorCisjOiBsaWIvYmxhbWUudGNsOjEwMDAKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJUw6FjIGdp4bqjOiIKKworIzogbGliL2JsYW1lLnRjbDoxMDA0Cittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAiTmfGsOG7nWkgY2h1eeG7g24gZ2lhbzoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTAwOQorbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgorbXNnc3RyICJU4bqtcCB0aW4gZ+G7kWM6IgorCisjOiBsaWIvYmxhbWUudGNsOjEwNTcKK21zZ2lkICJDYW5ub3QgZmluZCBIRUFEIGNvbW1pdDoiCittc2dzdHIgIktow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBIRUFEIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW86IgorCisjOiBsaWIvYmxhbWUudGNsOjExMTIKK21zZ2lkICJDYW5ub3QgZmluZCBwYXJlbnQgY29tbWl0OiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGzhuqduIGNodXnhu4NuIGdpYW8gbeG6uToiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTEyNworbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5IHBhcmVudCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGhp4buDbiB0aOG7iyBjaGEgbeG6uSIKKworIzogbGliL2JsYW1lLnRjbDoxMTI4IGxpYi9kaWZmLnRjbDozNDEKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6o2kgZGlmZjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI2OQorbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgorbXNnc3RyICJOZ3V5w6puIGfhu5FjIGLhu59pOiIKKworIzogbGliL2JsYW1lLnRjbDoxMjc1Cittc2dpZCAiSW4gRmlsZToiCittc2dzdHIgIlRyb25nIHThuq1wIHRpbjoiCisKKyM6IGxpYi9ibGFtZS50Y2w6MTI4MAorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAixJDDoyBjaMOpcCBob+G6t2MgRGkgY2h1eeG7g24gxJHhur9uIMSRw6J5IGLhu59pOiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTYgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjEKK21zZ2lkICJDaGVja291dCBCcmFuY2giCittc2dzdHIgIkzhuqV5IHJhIG5ow6FuaCIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjYKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiTOG6pXkgcmEiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjMwIGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6MjkyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU3OSBsaWIvY2hvb3NlX2ZvbnQudGNsOjQ1IGxpYi9tZXJnZS50Y2w6MTc0CisjOiBsaWIvb3B0aW9uLnRjbDoxMjcgbGliL3JlbW90ZV9hZGQudGNsOjM0IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NDMKKyM6IGxpYi90b29sc19kbGcudGNsOjQxIGxpYi90b29sc19kbGcudGNsOjIwMiBsaWIvdG9vbHNfZGxnLnRjbDozNDUKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE0MQorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiVGjDtGkiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjM1IGxpYi9icm93c2VyLnRjbDoyOTcgbGliL3Rvb2xzX2RsZy50Y2w6MzIxCittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIsSQaeG7g20gc+G7rWEgxJHhu5VpIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozOSBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjkgbGliL29wdGlvbi50Y2w6MzA5Cittc2dpZCAiT3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQyIGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5MgorbXNnaWQgIkZldGNoIFRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAiTOG6pXkgduG7gSBuaMOhbmggxJHGsOG7o2MgdGhlbyBkw7VpIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDo0NworbXNnaWQgIkRldGFjaCBGcm9tIExvY2FsIEJyYW5jaCIKK21zZ3N0ciAiVMOhY2ggcuG7nWkgdOG7qyBOaMOhbmggbuG7mWkgYuG7mSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjIzCittc2dpZCAiQ3JlYXRlIEJyYW5jaCIKK21zZ3N0ciAiVOG6oW8gbmjDoW5oIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MjgKK21zZ2lkICJDcmVhdGUgTmV3IEJyYW5jaCIKK21zZ3N0ciAiVOG6oW8gbmjDoW5oIG3hu5tpIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MzMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozOTEKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIlThuqFvIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NDIKK21zZ2lkICJCcmFuY2ggTmFtZSIKK21zZ3N0ciAiVMOqbiBuaMOhbmgiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0NCBsaWIvcmVtb3RlX2FkZC50Y2w6NDEgbGliL3Rvb2xzX2RsZy50Y2w6NTEKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAiVMOqbjoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo1NworbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaCBOYW1lIgorbXNnc3RyICJLaOG7m3AgduG7m2kgdMOqbiBuaMOhbmggxJHGsOG7o2MgdGhlbyBkw7VpIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKK21zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKK21zZ3N0ciAixJBp4buDbSDEkeG6p3UiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3MgorbXNnaWQgIlVwZGF0ZSBFeGlzdGluZyBCcmFuY2g6IgorbXNnc3RyICJD4bqtcCBuaOG6rXQgbmjDoW5oIHPhurVuIGPDszoiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo3NQorbXNnaWQgIk5vIgorbXNnc3RyICJLaMO0bmciCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4MAorbXNnaWQgIkZhc3QgRm9yd2FyZCBPbmx5IgorbXNnc3RyICJDaOG7iSBmYXN0LWZvcndhcmQiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo4NSBsaWIvY2hlY2tvdXRfb3AudGNsOjU3MQorbXNnaWQgIlJlc2V0IgorbXNnc3RyICLEkOG6t3QgbOG6oWkiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo5NworbXNnaWQgIkNoZWNrb3V0IEFmdGVyIENyZWF0aW9uIgorbXNnc3RyICJM4bqleSByYSBzYXUga2hpIHThuqFvIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMyCittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCittc2dzdHIgIlZ1aSBsw7JuZyBjaOG7jW4gbmjDoW5oIHRoZW8gZMO1aS4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCittc2dzdHIgIk5ow6FuaCB0aGVvIGTDtWkgJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgbmjDoW5oIHRyw6puIGtobyBjaOG7qWEgbcOheSBjaOG7py4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTQgbGliL2JyYW5jaF9yZW5hbWUudGNsOjkyCittc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiSMOjeSBjdW5nIGPhuqVwIHTDqm4gbmjDoW5oLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NSBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTEyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcycga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgdMOqbiBuaMOhbmggxJHGsOG7o2MgY2jhuqVwIG5o4bqtbi4iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNgorbXNnaWQgIkRlbGV0ZSBCcmFuY2giCittc2dzdHIgIlhvw6EgbmjDoW5oIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MjEKK21zZ2lkICJEZWxldGUgTG9jYWwgQnJhbmNoIgorbXNnc3RyICJYw7NhIG5ow6FuaCBu4buZaSBi4buZIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MzkKK21zZ2lkICJMb2NhbCBCcmFuY2hlcyIKK21zZ3N0ciAiTmjDoW5oIG7hu5lpIGLhu5kiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDo1MQorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIE1lcmdlZCBJbnRvIgorbXNnc3RyICJDaOG7iSB4w7NhIG7hur91IMSRw6MgaMOyYSB0cuG7mW4gdsOgbyIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUzIGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTIwCittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICJMdcO0biAoS2jDtG5nIHRo4buxYyBoaeG7h24ga2nhu4NtIHRyYSBow7JhIHRy4buZbikiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCittc2dzdHIgIkPDoWMgbmjDoW5oIHNhdSDEkcOieSBraMO0bmcgxJHGsOG7o2MgaMOyYSB0cuG7mW4gaG/DoG4gdG/DoG4gdsOgbyAlczoiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMTUgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMTgKK21zZ2lkICIiCisiUmVjb3ZlcmluZyBkZWxldGVkIGJyYW5jaGVzIGlzIGRpZmZpY3VsdC5cbiIKKyJcbiIKKyJEZWxldGUgdGhlIHNlbGVjdGVkIGJyYW5jaGVzPyIKK21zZ3N0ciAiIgorIktow7RpIHBo4bulYyBjw6FjIG5ow6FuaCDEkcOjIGLhu4sgeMOzYSBsw6Agdmnhu4djIGtow7Mga2jEg24uXG4iCisiXG4iCisiWMOzYSBuaMOhbmggxJHDoyBjaOG7jW4gY2jhu6k/IgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTQxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBkZWxldGUgYnJhbmNoZXM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJH4bq3cCBs4buXaSBraGkgeMOzYSBjw6FjIG5ow6FuaDpcbiIKKyIlcyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE1IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMworbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIsSQ4buVaSB0w6puIG5ow6FuaCIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjI4Cittc2dpZCAiUmVuYW1lIgorbXNnc3RyICLEkOG7lWkgdMOqbiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjM4Cittc2dpZCAiQnJhbmNoOiIKK21zZ3N0ciAiTmjDoW5oOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjQ2Cittc2dpZCAiTmV3IE5hbWU6IgorbXNnc3RyICJUw6puIG3hu5tpOiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjgxCittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIGJyYW5jaCB0byByZW5hbWUuIgorbXNnc3RyICJIw6N5IGNo4buNbiBuaMOhbmggY+G6p24gxJHhu5VpIHTDqm4uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTAyIGxpYi9jaGVja291dF9vcC50Y2w6MjAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJOaMOhbmggJyVzJyDEkcOjIGPDsyBy4buTaS4iCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoxMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVuYW1lICclcycuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu5VpIHTDqm4gJyVzJy4iCisKKyM6IGxpYi9icm93c2VyLnRjbDoxNworbXNnaWQgIlN0YXJ0aW5nLi4uIgorbXNnc3RyICLEkGFuZyBraOG7n2kgxJHhu5luZy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjI3Cittc2dpZCAiRmlsZSBCcm93c2VyIgorbXNnc3RyICJC4buZIGR1eeG7h3QgdOG6rXAgdGluIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTMyIGxpYi9icm93c2VyLnRjbDoxNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nICVzLi4uIgorbXNnc3RyICLEkGFuZyB04bqjaSAlcy4uLiIKKworIzogbGliL2Jyb3dzZXIudGNsOjE5MworbXNnaWQgIltVcCBUbyBQYXJlbnRdIgorbXNnc3RyICJbVOG7m2kgY2hhIG3hurldIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6Mjc1IGxpYi9icm93c2VyLnRjbDoyODIKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgorbXNnc3RyICJEdXnhu4d0IGPDoWMgdOG6rXAgdGluIG5ow6FuaCIKKworIzogbGliL2Jyb3dzZXIudGNsOjI4OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQwNgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTMgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDIKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAyOQorbXNnaWQgIkJyb3dzZSIKK21zZ3N0ciAiVMOsbSBkdXnhu4d0IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAixJBhbmcgbOG6pXkgduG7gSAlcyB04burICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjEzMworIywgdGNsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBDYW5ub3QgcmVzb2x2ZSAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgbmdoacOqbSB0cuG7jW5nOiBLaMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0NiBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMAorIzogbGliL3NzaGtleS50Y2w6NTUKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAixJDDs25nIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiQ2jGsGEgY8OzIG5ow6FuaCAnJXMnIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE5NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgc2ltcGxpZmllZCBnaXQtcHVsbCBmb3IgJyVzJy4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBj4bqldSBow6xuaCBnaXQtcHVsbCDEkcahbiBnaeG6o24gZMOgbmggY2hvICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKKyJcbiIKKyJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgorIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgorbXNnc3RyICIiCisiTmjDoW5oICclcycgxJHDoyBz4bq1biBjw7MuXG4iCisiXG4iCisiS2jDtG5nIHRo4buDIGZhc3QtZm9yd2FyZCB0aMOgbmggJXMuXG4iCisiQuG6oW4gY+G6p24gcGjhuqNpIGjDsmEgdHLhu5luLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBzdHJhdGVneSAnJXMnIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICJLaMO0bmcgaOG7lyB0cuG7oyBjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4gJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGPhuq1wIG5o4bqtdCAnJXMnLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNzQKK21zZ2lkICJTdGFnaW5nIGFyZWEgKGluZGV4KSBpcyBhbHJlYWR5IGxvY2tlZC4iCittc2dzdHIgIlbDuW5nIGLhu4cgcGjDs25nIChjaOG7iSBt4bulYykgxJHDoyBi4buLIGtow7NhIHLhu5NpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyODkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIlRy4bqhbmcgdGjDoWkgcXXDqXQga2jDtG5nIGto4bubcCB24bubaSB0cuG6oW5nIHRow6FpIGtoby5cbiIKKyJcbiIKKyJDw7MgR2l0IGtow6FjIMSRw6Mgc+G7rWEga2hvIG7DoHkga+G7gyB04burIGzhuqduIHF1w6l0IGN14buRaS4gQ+G6p24gcXXDqXQgbOG6oWkgdHLGsOG7m2Mga2hpIHRo4buxYyAiCisiaGnhu4duIHZp4buHYyBjaHV54buDbiBuaMOhbmguXG4iCisiXG4iCisiU+G6vSB0aOG7sWMgaGnhu4duIHZp4buHYyBxdcOpdCBs4bqhaSBuZ2F5IGLDonkgZ2nhu51pLlxuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IHRvICclcycuLi4iCittc2dzdHIgIkPhuq1wIG5o4bqtdCB0aMawIG3hu6VjIGzDoG0gdmnhu4djIHRow6BuaCAnJXMnLi4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM0NgorbXNnaWQgImZpbGVzIGNoZWNrZWQgb3V0IgorbXNnc3RyICJjw6FjIHThuq1wIHRpbiBj4bqnbiBs4bqleSByYSIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNzYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICJI4buneSBi4buPIGzhuqV5IHJhICclcycgKGPhuqduIGjDsmEgdHLhu5luIG3hu6ljIHThuq1wIHRpbikuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM3NworbXNnaWQgIkZpbGUgbGV2ZWwgbWVyZ2UgcmVxdWlyZWQuIgorbXNnc3RyICJD4bqnbiBt4bupYyBow7JhIHRy4buZbiB04bqtcCB0aW4uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjM4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YXlpbmcgb24gYnJhbmNoICclcycuIgorbXNnc3RyICLEkGFuZyDhu58gdHLDqm4gbmjDoW5oICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MgorbXNnaWQgIiIKKyJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIGJlIG9uIGEgYnJhbmNoLCBjcmVhdGUgb25lIG5vdyBzdGFydGluZyBmcm9tICdUaGlzIERldGFjaGVkICIKKyJDaGVja291dCcuIgorbXNnc3RyICIiCisiQuG6oW4gaGnhu4duIGtow7RuZyBjw7JuIOG7nyBuaMOhbmggbuG7mWkgYuG7mS5cbiIKKyJcbiIKKyJO4bq/dSBi4bqhbiBtdeG7kW4gdHLDqm4gbeG7mXQgbmjDoW5oLCBow6N5IHThuqFvIG3hu5l0IGPDoWkgdOG7qyAnxJDDonkgbMOgIGzhuqV5IHJhIHTDoWNoIHLhu51pJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTAzIGxpYi9jaGVja291dF9vcC50Y2w6NTA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hlY2tlZCBvdXQgJyVzJy4iCittc2dzdHIgIsSQw6MgbOG6pXkgcmEgJyVzJy4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTM1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXR0aW5nICclcycgdG8gJyVzJyB3aWxsIGxvc2UgdGhlIGZvbGxvd2luZyBjb21taXRzOiIKK21zZ3N0ciAixJDhurd0IGzhuqFpICclcycgdGjDoG5oICclcycgc+G6vSBsw6BtIG3huqV0IG5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyBzYXUgxJHDonk6IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjU1NworbXNnaWQgIlJlY292ZXJpbmcgbG9zdCBjb21taXRzIG1heSBub3QgYmUgZWFzeS4iCittc2dzdHIgIkzhuqV5IGzhuqFpIG5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIG3huqV0IGzDoCBraMO0bmcgZOG7hS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJyVzJz8iCittc2dzdHIgIsSQ4bq3dCBs4bqhaSAnJXMnPyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NjcgbGliL21lcmdlLnRjbDoxNjYgbGliL3Rvb2xzX2RsZy50Y2w6MzM2Cittc2dpZCAiVmlzdWFsaXplIgorbXNnc3RyICJUcuG7sWMgcXVhbiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo2MzUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgorInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgorIlxuIgorIlRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgJXMgd2lsbCBub3cgY2xvc2UgYW5kIGdpdmUgdXAuIgorbXNnc3RyICIiCisiR+G6t3AgbOG7l2kga2hpIMSR4bq3dCBuaMOhbmggaGnhu4duIGjDoG5oLlxuIgorIlxuIgorIlRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgY2jhu4kgY2h1eeG7g24ga2jDtG5nIGhvw6BuIHRvw6BuLiAgQ2jDum5nIHTDtGkgY+G6rXAgbmjhuq10IHRow6BuaCBjw7RuZyAiCisiY8OhYyB04bqtcCB0aW4gY+G7p2EgYuG6oW4sIG5oxrBuZyBs4bqhaSBn4bq3cCBs4buXaSBraGkgY+G6rXAgbmjhuq10IG3hu5l0IHThuq1wIHRpbiBj4bunYSBHaXQuXG4iCisiXG4iCisixJBp4buBdSBuw6B5IMSRw6FuZyBs4bq9IGtow7RuZyB0aOG7gyB44bqjeSByYS4gICVzIGdp4budIHPhur0gxJHDs25nIGzhuqFpIHbDoCDEkeG6p3UgaMOgbmcuIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQxCittc2dpZCAiU2VsZWN0IgorbXNnc3RyICJDaOG7jW4iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NTUKK21zZ2lkICJGb250IEZhbWlseSIKK21zZ3N0ciAiSOG7jSBwaMO0bmcgY2jhu68iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzYKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIkPhu6EgcGjDtG5nIGNo4buvIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjkzCittc2dpZCAiRm9udCBFeGFtcGxlIgorbXNnc3RyICJQaMO0bmcgY2jhu68gdsOtIGThu6UiCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MTA1Cittc2dpZCAiIgorIlRoaXMgaXMgZXhhbXBsZSB0ZXh0LlxuIgorIklmIHlvdSBsaWtlIHRoaXMgdGV4dCwgaXQgY2FuIGJlIHlvdXIgZm9udC4iCittc2dzdHIgIiIKKyLEkMOieSBsw6AgY2jhu68gbeG6q3UuXG4iCisiTuG6v3UgYuG6oW4gdGjDrWNoIGNo4buvIG5oxrAgdGjhur8gbsOgeSB0aMOsIGNo4buNbiBwaMO0bmcgY2jhu68gbsOgeS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIKK21zZ2lkICJHaXQgR3VpIgorbXNnc3RyICJHaXQgR3VpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Mzk2Cittc2dpZCAiQ3JlYXRlIE5ldyBSZXBvc2l0b3J5IgorbXNnc3RyICJU4bqhbyBraG8gbeG7m2kiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTcKK21zZ2lkICJOZXcuLi4iCittc2dzdHIgIk3hu5tpLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4MAorbXNnaWQgIkNsb25lIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIk5ow6JuIGLhuqNuIG3hu5l0IGtobyBz4bq1biBjw7MiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTE1Cittc2dpZCAiQ2xvbmUuLi4iCittc2dzdHIgIk5ow6JuIGLhuqNuLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyMiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTkKK21zZ2lkICJPcGVuIEV4aXN0aW5nIFJlcG9zaXRvcnkiCittc2dzdHIgIk3hu58gbeG7mXQga2hvIMSRw6MgY8OzLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMjgKK21zZ2lkICJPcGVuLi4uIgorbXNnc3RyICJN4bufLi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0MQorbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCittc2dzdHIgIkPDoWMga2hvIG3hu5tpIGTDuW5nIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE0NworbXNnaWQgIk9wZW4gUmVjZW50IFJlcG9zaXRvcnk6IgorbXNnc3RyICJN4bufIGtobyBt4bubaSBkw7luZzoiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzE1IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzIyCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB04bqhbyBraG8gJXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQwMQorbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIlRoxrAgbeG7pWM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQzMSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1MgorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDUzCittc2dpZCAiR2l0IFJlcG9zaXRvcnkiCittc2dzdHIgIktobyBHaXQiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiVGjGsCBt4bulYyAlcyDEkcOjIHPhurVuIGPDsy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmlsZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIlThuq1wIHRpbiAlcyDEkcOjIGPDsyBz4bq1bi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc1Cittc2dpZCAiQ2xvbmUiCittc2dzdHIgIk5ow6JuIGLhuqNuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4OAorbXNnaWQgIlNvdXJjZSBMb2NhdGlvbjoiCittc2dzdHIgIlbhu4sgdHLDrSBuZ3Xhu5NuOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0OTcKK21zZ2lkICJUYXJnZXQgRGlyZWN0b3J5OiIKK21zZ3N0ciAiVGjGsCBt4bulYyDEkcOtY2g6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwNworbXNnaWQgIkNsb25lIFR5cGU6IgorbXNnc3RyICJLaeG7g3UgbmjDom4gYuG6o246IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxMgorbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKK21zZ3N0ciAiVGnDqnUgY2h14bqpbiAoTmhhbmgsIFNlbWktUmVkdW5kYW50LCBIYXJkbGlua3MpIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUxNworbXNnaWQgIkZ1bGwgQ29weSAoU2xvd2VyLCBSZWR1bmRhbnQgQmFja3VwKSIKK21zZ3N0ciAiU2FvIGNow6lwIHRvw6BuIGLhu5kgKENo4bqtbSBoxqFuLCBSZWR1bmRhbnQgQmFja3VwKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MjIKK21zZ2lkICJTaGFyZWQgKEZhc3Rlc3QsIE5vdCBSZWNvbW1lbmRlZCwgTm8gQmFja3VwKSIKK21zZ3N0ciAiQ2hpYSBz4bq7IChOaGFuaCBuaOG6pXQsIEtow7RuZyBuw6puIGTDuW5nLCBObyBCYWNrdXApIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU1OCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYwNQorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NTEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MjEKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA1OSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwNjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIktow7RuZyBwaOG6o2kgbMOgIGtobyBnaXQ6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5NAorbXNnaWQgIlN0YW5kYXJkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiVGnDqnUgY2h14bqpbiBjaOG7iSBz4bq1biBzw6BuZyB24bubaSBraG8gbuG7mWkgYuG7mS4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTk4Cittc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAiJ0NoaWEgc+G6uycgY2jhu4kgc+G6tW4gc8OgbmcgduG7m2kga2hvIG7hu5lpIGLhu5kuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvY2F0aW9uICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiTWnhu4FuIMSR4buLYSBwaMawxqFuZyAlcyDEkcOjIHPhurVuIGPDsy4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjMwCittc2dpZCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBvcmlnaW4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBj4bqldSBow6xuaCBi4bqjbiBn4buRYyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2NDIKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLEkGFuZyDEkeG6v20gc+G7kSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjQzCittc2dpZCAiYnVja2V0cyIKK21zZ3N0ciAieMO0IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY2NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdHMvaW5mby9hbHRlcm5hdGVzOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHNhbyBjaMOpcCBvYmplY3RzL2luZm8vYWx0ZXJuYXRlczogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzAzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTm90aGluZyB0byBjbG9uZSBmcm9tICVzLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBnw6wgxJHhu4MgbmjDom4gYuG6o24gdOG7qyAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDUgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTkKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTMxCittc2dpZCAiVGhlICdtYXN0ZXInIGJyYW5jaCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIgorbXNnc3RyICJOaMOhbmggJ21hc3RlcicgY2jGsGEgxJHGsOG7o2Mga2jhu59pIHThuqFvLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MTgKK21zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgorbXNnc3RyICJMacOqbiBr4bq/dCBj4bupbmcga2jDtG5nIHPhurVuIHPDoG5nLiBUcuG7nyBs4bqhaSBjaOG6vyDEkeG7mSBzYW8gY2jDqXAuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjczMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgZnJvbSAlcyIKK21zZ3N0ciAixJBhbmcgbmjDom4gYuG6o24gdOG7qyAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3NjEKK21zZ2lkICJDb3B5aW5nIG9iamVjdHMiCittc2dzdHIgIsSQYW5nIGNow6lwIGPDoWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc2MgorbXNnaWQgIktpQiIKK21zZ3N0ciAiS2lCIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc4NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjb3B5IG9iamVjdDogJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBjaMOpcCDEkeG7kWkgdMaw4bujbmc6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5NgorbXNnaWQgIkxpbmtpbmcgb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcgbGnDqm4ga+G6v3QgY8OhYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6Nzk3Cittc2dpZCAib2JqZWN0cyIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjgwNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdOG6oW8gbGnDqm4ga+G6v3QgY+G7qW5nIMSR4buRaSB0xrDhu6NuZzogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODYwCittc2dpZCAiQ2Fubm90IGZldGNoIGJyYW5jaGVzIGFuZCBvYmplY3RzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBs4bqleSBjw6FjIG5ow6FuaCB2w6AgxJHhu5FpIHTGsOG7o25nLiBYZW0ga+G6v3QgeHXhuqV0IHThu6sgYuG6o25nIMSRaeG7gXUga2hp4buDbiDEkeG7gyBjw7MgIgorInRow6ptIHRow7RuZyB0aW4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg3MQorbXNnaWQgIkNhbm5vdCBmZXRjaCB0YWdzLiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBs4bqleSB24buBIGPDoWMgdGjhursuIEjDo3kgeGVtIGvhur90IHh14bqldCB04burIGLhuqNuZyDEkWnhu4F1IGtoaeG7g24gxJHhu4MgY8OzIHRow6ptICIKKyJ0aMO0bmcgdGluIGNoaSB0aeG6v3QuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjg5NQorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgSEVBRC4gIFNlZSBjb25zb2xlIG91dHB1dCBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgZMOyIHTDrG0gSEVBRC4gSMOjeSB4ZW0ga+G6v3QgeHXhuqV0IHThu6sgYuG6o25nIMSRaeG7gXUga2hp4buDbiDEkeG7gyBjw7MgdGjDqm0gdGjDtG5nICIKKyJ0aW4gY2hpIHRp4bq/dC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTA0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBk4buNbiBz4bqhY2ggJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTEwCittc2dpZCAiQ2xvbmUgZmFpbGVkLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIG5ow6JuIGLhuqNuLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTcKK21zZ2lkICJObyBkZWZhdWx0IGJyYW5jaCBvYnRhaW5lZC4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBuaMOhbmggbeG6t2MgxJHhu4tuaC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlc29sdmUgJXMgYXMgYSBjb21taXQuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gZ2nhuqNpICVzIG5oxrAgbMOgIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0MAorbXNnaWQgIkNyZWF0aW5nIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLEkGFuZyB04bqhbyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0MSBsaWIvaW5kZXgudGNsOjcwIGxpYi9pbmRleC50Y2w6MTM2CisjOiBsaWIvaW5kZXgudGNsOjIwNworbXNnaWQgImZpbGVzIgorbXNnc3RyICJ04bqtcCB0aW4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTcwCittc2dpZCAiSW5pdGlhbCBmaWxlIGNoZWNrb3V0IGZhaWxlZC4iCittc2dzdHIgIkzhuqV5IHJhIHThuq1wIHRpbiBraOG7n2kgdOG6oW8gZ+G6t3AgbOG7l2kuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTQKK21zZ2lkICJPcGVuIgorbXNnc3RyICJN4bufIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjQKK21zZ2lkICJSZXBvc2l0b3J5OiIKK21zZ3N0ciAiS2hvOiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBt4bufIGtobyAlczoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MgorbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCittc2dzdHIgIsSQw6J5IGzDoCB2aeG7h2MgbOG6pXkgcmEgYuG7iyB0w6FjaCBy4budaSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjYwCittc2dpZCAiUmV2aXNpb24gRXhwcmVzc2lvbjoiCittc2dzdHIgIkJp4buDdSB0aOG7qWMgxJFp4buDbSB4w6l0OiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjcyCittc2dpZCAiTG9jYWwgQnJhbmNoIgorbXNnc3RyICJOaMOhbmggbuG7mWkgYuG7mSIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc3Cittc2dpZCAiVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICJOaMOhbmggVGhlbyBkw7VpIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6ODIgbGliL2Nob29zZV9yZXYudGNsOjU0NAorbXNnaWQgIlRhZyIKK21zZ3N0ciAiVGjhursiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDozMjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJldmlzaW9uOiAlcyIKK21zZ3N0ciAixJBp4buDbSB4w6l0IGR1eeG7h3Qga2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQyCittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICJDaMawYSBjaOG7jW4gxJFp4buDbSB4w6l0IGR1eeG7h3QuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzUwCittc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCittc2dzdHIgIkJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSBy4buXbmcuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NTM3Cittc2dpZCAiVXBkYXRlZCIKK21zZ3N0ciAixJDDoyBj4bqtcCBuaOG6rXQiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NjUKK21zZ2lkICJVUkwiCittc2dzdHIgIlVSTCIKKworIzogbGliL2NvbW1pdC50Y2w6OQorbXNnaWQgIiIKKyJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgorIlxuIgorIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCisidG8gYW1lbmQuXG4iCittc2dzdHIgIiIKKyLhu54gxJHDonkgY2jhurNuZyBjw7MgZ8OsIMSR4buDIHR1IGLhu5UgY+G6oy5cbiIKKyJcbiIKKyJC4bqhbiDEkWFuZyB04bqhbyBs4bqnbiBjaHV54buDbiBnaWFvIGto4bufaSB04bqhby4g4bueIMSRw6J5IGtow7RuZyBjw7MgbOG6p24gY2h1eeG7g24gZ2lhbyB0csaw4bubYyAiCisibsOgbyDEkeG7gyBtw6AgdHUgYuG7lS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgKK21zZ2lkICIiCisiQ2Fubm90IGFtZW5kIHdoaWxlIG1lcmdpbmcuXG4iCisiXG4iCisiWW91IGFyZSBjdXJyZW50bHkgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIHRoYXQgaGFzIG5vdCBiZWVuIGZ1bGx5ICIKKyJjb21wbGV0ZWQuICBZb3UgY2Fubm90IGFtZW5kIHRoZSBwcmlvciBjb21taXQgdW5sZXNzIHlvdSBmaXJzdCBhYm9ydCB0aGUgIgorImN1cnJlbnQgbWVyZ2UgYWN0aXZpdHkuXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgdHUgYuG7lSB0cm9uZyBraGkgaMOyYSB0cuG7mW4uXG4iCisiXG4iCisiQuG6oW4gaGnhu4duIMSRYW5nIOG7nyBnaeG7r2EgcXXDoSB0csOsbmggaMOyYSB0csO0biwgbcOgIG7DsyBjaMawYSBob8OgbiB04bqldC4gQuG6oW4ga2jDtG5nIHRo4buDICIKKyJ0dSBi4buVICBs4bqnbiBjaHV54buDbiBnaWFvIHRp4buBbiBuaGnhu4dtIHRy4burIHBoaSBi4bqhbiBiw6NpIGLhu48gbOG6p24gaMOyYSB0cuG7mW4gaGnhu4duIMSRYW5nICIKKyJrw61jaCBob+G6oXQuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjQ4Cittc2dpZCAiRXJyb3IgbG9hZGluZyBjb21taXQgZGF0YSBmb3IgYW1lbmQ6IgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6o2kgZOG7ryBsaeG7h3UgY2h1eeG7g24gZ2lhbyBjaG8gbOG7h25oIHR1IGLhu5U6IgorCisjOiBsaWIvY29tbWl0LnRjbDo3NQorbXNnaWQgIlVuYWJsZSB0byBvYnRhaW4geW91ciBpZGVudGl0eToiCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSDEkcaw4bujYyDEkeG7i25oIGRhbmggY+G7p2EgYuG6oW46IgorCisjOiBsaWIvY29tbWl0LnRjbDo4MAorbXNnaWQgIkludmFsaWQgR0lUX0NPTU1JVFRFUl9JREVOVDoiCittc2dzdHIgIkdJVF9DT01NSVRURVJfSURFTlQga2jDtG5nIGjhu6NwIGzhu4c6IgorCisjOiBsaWIvY29tbWl0LnRjbDoxMjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJ3YXJuaW5nOiBUY2wgZG9lcyBub3Qgc3VwcG9ydCBlbmNvZGluZyAnJXMnLiIKK21zZ3N0ciAiY+G6o25oIGLDoW86IFRjbCBraMO0bmcgaOG7lyB0cuG7oyBi4bqjbmcgbcOjICclcycuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNDkKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIGFub3RoZXIgY29tbWl0IGNhbiBiZSBjcmVhdGVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiVHLhuqFuZyB0aMOhaSBxdcOpdCBraMO0bmcga2jhu5twIHbhu5tpIHRy4bqhbmcgdGjDoWkga2hvLlxuIgorIlxuIgorIkPDsyBHaXQga2jDoWMgxJHDoyBz4butYSBraG8gbsOgeSBr4buDIHThu6sgbOG6p24gcXXDqXQgY3Xhu5FpLiBD4bqnbiBxdcOpdCBs4bqhaSB0csaw4bubYyBraGkgdGjhu7FjICIKKyJoaeG7h24gdmnhu4djIGNodXnhu4NuIGdpYW8ga2jDoWMuXG4iCisiXG4iCisiU+G6vSB0aOG7sWMgaGnhu4duIHZp4buHYyBxdcOpdCBs4bqhaSBuZ2F5IGLDonkgZ2nhu51pLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5tZXJnZWQgZmlsZXMgY2Fubm90IGJlIGNvbW1pdHRlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGhhcyBtZXJnZSBjb25mbGljdHMuICBZb3UgbXVzdCByZXNvbHZlIHRoZW0gYW5kIHN0YWdlIHRoZSBmaWxlICIKKyJiZWZvcmUgY29tbWl0dGluZy5cbiIKK21zZ3N0ciAiIgorIkPDoWMgdOG6rXAgdGluIGNoxrBhIGjDsmEgdHLhu5luIGtow7RuZyB0aOG7gyDEkcaw4bujYyBjaHV54buDbiBnaWFvLlxuIgorIlxuIgorIlThuq1wIHRpbiAlcyBjw7MgeHVuZyDEkeG7mXQgaMOyYSB0cuG7mW4uIELhuqFuIHBo4bqjaSBnaeG6o2kgcXV54bq/dCBjaMO6bmcgdsOgIMSRxrBhIGzDqm4gYuG7hyAiCisicGjDs25nIHRyxrDhu5tjIGtoaSBjaHV54buDbiBnaWFvLlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoxODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5rbm93biBmaWxlIHN0YXRlICVzIGRldGVjdGVkLlxuIgorIlxuIgorIkZpbGUgJXMgY2Fubm90IGJlIGNvbW1pdHRlZCBieSB0aGlzIHByb2dyYW0uXG4iCittc2dzdHIgIiIKKyJUw6xtIHRo4bqleSB0cuG6oW5nIHRow6FpIHThuq1wIHRpbSBraMO0bmcgaGnhu4N1ICVzLlxuIgorIlxuIgorIlThuq1wIHRpbiAlcyBraMO0bmcgdGjhu4MgxJHGsOG7o2MgY2h1eeG7g24gZ2lhbyBi4bufaSBjaMawxqFuZyB0csOsbmggbsOgeS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTg5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIllvdSBtdXN0IHN0YWdlIGF0IGxlYXN0IDEgZmlsZSBiZWZvcmUgeW91IGNhbiBjb21taXQuXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gY+G6p24gY2h1eeG7g24gZ2lhby5cbiIKKyJcbiIKKyJC4bqhbiBwaOG6o2kgxJHGsGEgbMOqbiBi4buHIHBow7NuZyDDrXQgbmjhuqV0IGzDoCBt4buZdCB04bqtcCB0aW4gdHLGsOG7m2Mga2hpIGPDsyB0aOG7gyBjaHV54buDbiAiCisiZ2lhby5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjA0Cittc2dpZCAiIgorIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgorIlxuIgorIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKKyItIFNlY29uZCBsaW5lOiBCbGFua1xuIgorIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKK21zZ3N0ciAiIgorIkjDo3kgY3VuZyBj4bqlcCBs4budaSBjaMO6IGdp4bqjaSBjaG8gbOG6p24gY2h1eeG7g24gZ2lhby5cbiIKKyJcbiIKKyJM4budaSBjaMO6IGdp4bqjaSB04buRdCBuaOG6pXQgbsOqbiBjw7MgxJHhu4tuaCBk4bqhbmcgc2F1OlxuIgorIlxuIgorIi0gRMOybmcgxJHhuqd1IHRpw6puOiBNw7QgdOG6oyBuaOG7r25nIGfDrCBi4bqhbiDEkcOjIGzDoG0uXG4iCisiLSBEw7JuZyB0aOG7qSBoYWk6IMSQ4buDIHRy4buRbmdcbiIKKyItIEPDoWMgZMOybmcgY8OybiBs4bqhaTogTcO0IHThuqMgeGVtIHbDrCBzYW8gbmjhu69uZyB0aGF5IMSR4buVaSBuw6B5IGzDoCBj4bqnbiB0aGnhur90LlxuIgorCisjOiBsaWIvY29tbWl0LnRjbDoyMzUKK21zZ2lkICJDYWxsaW5nIHByZS1jb21taXQgaG9vay4uLiIKK21zZ3N0ciAixJBhbmcgZ+G7jWkgbcOzYyAoaG9vaykgcHJlLWNvbW1pdC4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjUwCittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gYuG7iyBraMaw4bubYyB04burIGRvIG3Ds2MgcHJlLWNvbW1pdC4iCisKKyM6IGxpYi9jb21taXQudGNsOjI2OQorbXNnaWQgIiIKKyJZb3UgYXJlIGFib3V0IHRvIGNvbW1pdCBvbiBhIGRldGFjaGVkIGhlYWQuIFRoaXMgaXMgYSBwb3RlbnRpYWxseSBkYW5nZXJvdXMgIgorInRoaW5nIHRvIGRvIGJlY2F1c2UgaWYgeW91IHN3aXRjaCB0byBhbm90aGVyIGJyYW5jaCB5b3Ugd2lsbCBsb3NlIHlvdXIgIgorImNoYW5nZXMgYW5kIGl0IGNhbiBiZSBkaWZmaWN1bHQgdG8gcmV0cmlldmUgdGhlbSBsYXRlciBmcm9tIHRoZSByZWZsb2cuIFlvdSAiCisic2hvdWxkIHByb2JhYmx5IGNhbmNlbCB0aGlzIGNvbW1pdCBhbmQgY3JlYXRlIGEgbmV3IGJyYW5jaCB0byBjb250aW51ZS5cbiIKKyIgXG4iCisiIERvIHlvdSByZWFsbHkgd2FudCB0byBwcm9jZWVkIHdpdGggeW91ciBDb21taXQ/IgorbXNnc3RyICIiCisiQuG6oW4gdGjhu7FjIGhp4buHbiBjaHV54buDbiBnaWFvIOG7nyBjaOG7lyDEkcOjIHTDoWNoIHLhu51pIGto4buPaSBjw6FjIMSR4bqndS4gxJBp4buBdSBuw6B5IGzDoCBuZ3V5ICIKKyJoaeG7g20gYuG7n2kgbuG6v3UgYuG6oW4gY2h1eeG7g24gc2FuZyBuaMOhbmgga2jDoWMgdGjDrCBi4bqhbiBz4bq9IG3huqV0IG5o4buvbmcgdGhheSDEkeG7lWkgbsOgeSB2w6AgIgorInZp4buHYyBs4bqleSBs4bqhaSBjaMO6bmcgdOG7qyByZWZsb2cgY8Wpbmcga2jDsyBraMSDbi4gQuG6oW4gZ+G6p24gbmjGsCBjaOG6r2MgY2jhuq9uIGzDoCBuw6puIGjhu6d5ICIKKyJi4buPIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSB2w6AgdOG6oW8gbeG7mXQgbmjDoW5oIG3hu5tpIHRyxrDhu5tjIGtoaSB0aeG6v3AgdOG7pWMuXG4iCisiIFxuIgorIiBC4bqhbiBjw7MgdGjhu7FjIHPhu7EgbXXhu5FuIHRp4bq/cCB04bulYyBjaHV54buDbiBnaWFvPyIKKworIzogbGliL2NvbW1pdC50Y2w6MjkwCittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIsSQYW5nIGfhu41pIG3Ds2MgY29tbWl0LW1zZy4uLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzA1Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gYuG7iyBraMaw4bubYyB04burIGRvIG3Ds2MgY29tbWl0LW1zZy4iCisKKyM6IGxpYi9jb21taXQudGNsOjMxOAorbXNnaWQgIkNvbW1pdHRpbmcgY2hhbmdlcy4uLiIKK21zZ3N0ciAiQ2h1eeG7g24gZ2lhbyBjw6FjIHRoYXkgxJHhu5VpLi4uIgorCisjOiBsaWIvY29tbWl0LnRjbDozMzQKK21zZ2lkICJ3cml0ZS10cmVlIGZhaWxlZDoiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB3cml0ZS10cmVlOiIKKworIzogbGliL2NvbW1pdC50Y2w6MzM1IGxpYi9jb21taXQudGNsOjM3OSBsaWIvY29tbWl0LnRjbDo0MDAKK21zZ2lkICJDb21taXQgZmFpbGVkLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGNodXnhu4NuIGdpYW8uIgorCisjOiBsaWIvY29tbWl0LnRjbDozNTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgYXBwZWFycyB0byBiZSBjb3JydXB0IgorbXNnc3RyICJM4bqnbiBjaHV54buDbiBnaWFvICVzIGPDsyB24bq7IMSRw6MgaMawIGjhu49uZyIKKworIzogbGliL2NvbW1pdC50Y2w6MzU3Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisiS2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIMSR4buDIGNodXnhu4NuIGdpYW8uXG4iCisiXG4iCisiS2jDtG5nIGPDsyB04bqtcCB0aW4gbsOgbyDEkcaw4bujYyBz4butYSBi4bufaSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoHkgdsOgIG7DsyBraMO0bmcgcGjhuqNpIGzDoCAiCisibOG6p24gY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbi5cbiIKKyJcbiIKKyJT4bq9IHRo4buxYyBoaeG7h24gdmnhu4djIHF1w6l0IGzhuqFpIG5nYXkgYsOieSBnaeG7nS5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MzY0Cittc2dpZCAiTm8gY2hhbmdlcyB0byBjb21taXQuIgorbXNnc3RyICJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gxJHhu4MgY2h1eeG7g24gZ2lhby4iCisKKyM6IGxpYi9jb21taXQudGNsOjM3OAorbXNnaWQgImNvbW1pdC10cmVlIGZhaWxlZDoiCittc2dzdHIgImNvbW1pdC10cmVlIGfhurdwIGzhu5dpOiIKKworIzogbGliL2NvbW1pdC50Y2w6Mzk5Cittc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgorbXNnc3RyICJj4bqtcCBuaOG6rXQgdGhhbSBjaGnhur91IHRo4bqldCBi4bqhaToiCisKKyM6IGxpYi9jb21taXQudGNsOjQ5MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIHThuqFvICVzOiAlcyIKKworIzogbGliL2NvbnNvbGUudGNsOjU5Cittc2dpZCAiV29ya2luZy4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAixJBhbmcgY2jhuqF5Li4gdnVpIGzDsm5nIMSR4bujaS4uLiIKKworIzogbGliL2NvbnNvbGUudGNsOjE4NgorbXNnaWQgIlN1Y2Nlc3MiCittc2dzdHIgIlRow6BuaCBjw7RuZyIKKworIzogbGliL2NvbnNvbGUudGNsOjIwMAorbXNnaWQgIkVycm9yOiBDb21tYW5kIEZhaWxlZCIKK21zZ3N0ciAiTOG7l2k6IEPDonUgbOG7h25oIGfhurdwIGzhu5dpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQyCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIlPhu5EgbMaw4bujbmcgxJHhu5FpIHTGsOG7o25nIGLhu4sgbeG6pXQiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDMKK21zZ2lkICJEaXNrIHNwYWNlIHVzZWQgYnkgbG9vc2Ugb2JqZWN0cyIKK21zZ3N0ciAiRHVuZyBsxrDhu6NuZyDEkcSpYSDEkcaw4bujYyBkw7luZyBi4bufaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBi4buLIG3huqV0IgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ0Cittc2dpZCAiTnVtYmVyIG9mIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJT4buRIGzGsOG7o25nIMSR4buRaSB0xrDhu6NuZyDEkcaw4bujYyDEkcOzbmcgZ8OzaSIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NQorbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKK21zZ3N0ciAiU+G7kSBsxrDhu6NuZyBnw7NpIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ2Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJEdW5nIGzGsOG7o25nIMSRxKlhIMSRxrDhu6NjIGTDuW5nIGLhu59pIGPDoWMgxJHhu5FpIHTGsOG7o25nIGfDs2kiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDcKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICJDw6FjIMSR4buRaSB0xrDhu6NuZyBnw7NpIGNo4budIHjDqW4gYuG7m3QiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKK21zZ2lkICJHYXJiYWdlIGZpbGVzIgorbXNnc3RyICJDw6FjIHThuq1wIHRpbiByw6FjIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjcyCittc2dpZCAiQ29tcHJlc3NpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiTsOpbiBjxqEgc+G7nyBk4buvIGxp4buHdSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKK21zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBjxqEgc+G7nyBk4buvIGxp4buHdSDEkeG7kWkgdMaw4bujbmcgYuG6sW5nIGzhu4duaCBmc2NrIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjEwNworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGlzIHJlcG9zaXRvcnkgY3VycmVudGx5IGhhcyBhcHByb3hpbWF0ZWx5ICVpIGxvb3NlIG9iamVjdHMuXG4iCisiXG4iCisiVG8gbWFpbnRhaW4gb3B0aW1hbCBwZXJmb3JtYW5jZSBpdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21wcmVzcyAiCisidGhlIGRhdGFiYXNlLlxuIgorIlxuIgorIkNvbXByZXNzIHRoZSBkYXRhYmFzZSBub3c/IgorbXNnc3RyICIiCisiSGnhu4duIGtobyBuw6B5IG3huqV0IMaw4bubYyBjaOG7q25nIGtob+G6o25nICVpIMSR4buRaSB0xrDhu6NuZy5cbiIKKyJcbiIKKyLEkOG7gyB04buRaSDGsHUgaMOzYSBoaeG7h3Ugc3XhuqV0LCBraHV54bq/biBuZ2jhu4sgYuG6oW4gbsOqbiBuw6luIGPGoSBz4bufIGThu68gbGnhu4d1IGPhu6dhIG3DrG5oICIKKyJs4bqhaS5cbiIKKyJcbiIKKyJOw6luIGPGoSBz4bufIGThu68gbGnhu4d1IGNo4bupPyIKKworIzogbGliL2RhdGUudGNsOjI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBkYXRlIGZyb20gR2l0OiAlcyIKK21zZ3N0ciAiTmfDoHkgdGjDoW5nIGtow7RuZyBo4bujcCBs4buHIHThu6sgR2l0OiAlcyIKKworIzogbGliL2RpZmYudGNsOjY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk5vIGRpZmZlcmVuY2VzIGRldGVjdGVkLlxuIgorIlxuIgorIiVzIGhhcyBubyBjaGFuZ2VzLlxuIgorIlxuIgorIlRoZSBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGlzIGZpbGUgd2FzIHVwZGF0ZWQgYnkgYW5vdGhlciBhcHBsaWNhdGlvbiwgYnV0ICIKKyJ0aGUgY29udGVudCB3aXRoaW4gdGhlIGZpbGUgd2FzIG5vdCBjaGFuZ2VkLlxuIgorIlxuIgorIkEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvIGZpbmQgb3RoZXIgZmlsZXMgd2hpY2ggbWF5IGhhdmUgIgorInRoZSBzYW1lIHN0YXRlLiIKK21zZ3N0ciAiIgorIktow7RuZyB0w6xtIHRo4bqleSBraMOhYyBiaeG7h3QgZ8OsLlxuIgorIlxuIgorIiVzIGtow7RuZyB0aGF5IMSR4buVaS5cbiIKKyJcbiIKKyJUaOG7nWkgZ2lhbiBz4butYSDEkeG7lWkgY+G7p2EgdOG6rXAgdGluIG7DoHkgxJHGsOG7o2MgY+G6rXAgbmjhuq10IGLhu59pIOG7qW5nIGThu6VuZyBraMOhYywgbmjGsG5nIG7hu5lpICIKKyJkdW5nIGLDqm4gdHJvbmcgdOG6rXAgdGluIHRow6wga2jDtG5nIHRoYXkgxJHhu5VpLlxuIgorIlxuIgorIlPhur0gdGjhu7FjIGhp4buHbiBxdcOpdCBs4bqhaSBt4buZdCBjw6FjaCB04buxIMSR4buZbmcgxJHhu4MgdMOsbSBjw6FjIHThuq1wIHRpbiBraMOhYyBjw6FpIG3DoCBjw7MgdGjhu4MgIgorImPDsyBjw7luZyB0w6xuaCB0cuG6oW5nLiIKKworIzogbGliL2RpZmYudGNsOjEwNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkxvYWRpbmcgZGlmZiBvZiAlcy4uLiIKK21zZ3N0ciAixJBhbmcgdOG6o2kgZGlmZiBj4bunYSAlcy4uLiIKKworIzogbGliL2RpZmYudGNsOjEyNQorbXNnaWQgIiIKKyJMT0NBTDogZGVsZXRlZFxuIgorIlJFTU9URTpcbiIKK21zZ3N0ciAiIgorIk7hu5hJQuG7mDogxJHDoyB4b8OhXG4iCisiTcOBWUNI4bumOlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MTMwCittc2dpZCAiIgorIlJFTU9URTogZGVsZXRlZFxuIgorIkxPQ0FMOlxuIgorbXNnc3RyICIiCisiTcOBWUNI4bumOiDEkcOjIHhvw6FcbiIKKyJO4buYSULhu5g6XG4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMzcKK21zZ2lkICJMT0NBTDpcbiIKK21zZ3N0ciAiTuG7mEktQuG7mDpcbiIKKworIzogbGliL2RpZmYudGNsOjE0MAorbXNnaWQgIlJFTU9URTpcbiIKK21zZ3N0ciAiTcOBWS1DSOG7pjpcbiIKKworIzogbGliL2RpZmYudGNsOjIwMiBsaWIvZGlmZi50Y2w6MzQwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGRpc3BsYXkgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBoaeG7g24gdGjhu4sgJXMiCisKKyM6IGxpYi9kaWZmLnRjbDoyMDMKK21zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgorbXNnc3RyICJM4buXaSBraGkgdOG6o2kgdOG6rXAgdGluOiIKKworIzogbGliL2RpZmYudGNsOjIxMAorbXNnaWQgIkdpdCBSZXBvc2l0b3J5IChzdWJwcm9qZWN0KSIKK21zZ3N0ciAiS2hvIEdpdCAoZOG7sSDDoW4gY29uKSIKKworIzogbGliL2RpZmYudGNsOjIyMgorbXNnaWQgIiogQmluYXJ5IGZpbGUgKG5vdCBzaG93aW5nIGNvbnRlbnQpLiIKK21zZ3N0ciAiKiBU4bqtcCB0aW4gbmjhu4sgcGjDom4gKGtow7RuZyBoaeG7g24gdGjhu4sgbuG7mWkgZHVuZykuIgorCisjOiBsaWIvZGlmZi50Y2w6MjI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIiogVW50cmFja2VkIGZpbGUgaXMgJWQgYnl0ZXMuXG4iCisiKiBTaG93aW5nIG9ubHkgZmlyc3QgJWQgYnl0ZXMuXG4iCittc2dzdHIgIiIKKyIqIFThuq1wIHRpbiBjaMawYSB0aGVvIGTDtWkgbMOgICVkIGJ5dGUuXG4iCisiKiBDaOG7iSBoaeG7g24gdGjhu4sgJWQgYnl0ZSDEkeG6p3UgLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6MjMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIiogVW50cmFja2VkIGZpbGUgY2xpcHBlZCBoZXJlIGJ5ICVzLlxuIgorIiogVG8gc2VlIHRoZSBlbnRpcmUgZmlsZSwgdXNlIGFuIGV4dGVybmFsIGVkaXRvci5cbiIKK21zZ3N0ciAiIgorIlxuIgorIiogVOG6rXAgdGluIGNoxrBhIHRoZW8gZMO1aSDEkcaw4bujYyBj4bqvdCB04bqhaSDEkcOieSBi4bufaSAlcy5cbiIKKyIqIMSQ4buDIHhlbSB0b8OgbiBi4buZIHThuq1wIHRpbiwgaMOjeSBkw7luZyDhu6luZyBk4bulbmcgYmnDqm4gc2/huqFuIGLDqm4gbmdvw6BpLlxuIgorCisjOiBsaWIvZGlmZi50Y2w6NTYwCittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBi4buPIHJhIGto4buPaSBi4buHIHBow7NuZyBraOG7kWkgxJHDoyBjaOG7jW4iCisKKyM6IGxpYi9kaWZmLnRjbDo1NjcKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkcawYSBsw6puIGLhu4cgcGjDs25nIGto4buRaSDEkcOjIGNo4buNbiIKKworIzogbGliL2RpZmYudGNsOjY0NgorbXNnaWQgIkZhaWxlZCB0byB1bnN0YWdlIHNlbGVjdGVkIGxpbmUuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgYuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcgZMOybmcgxJHDoyBjaOG7jW4iCisKKyM6IGxpYi9kaWZmLnRjbDo2NTQKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgbGluZS4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkcawYSBsw6puIGLhu4cgcGjDs25nIGTDsm5nIMSRw6MgY2jhu41uIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ0MworbXNnaWQgIkRlZmF1bHQiCittc2dzdHIgIk3hurdjIMSR4buLbmgiCisKKyM6IGxpYi9lbmNvZGluZy50Y2w6NDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU3lzdGVtICglcykiCittc2dzdHIgIkjhu4cgdGjhu5FuZyAoJXMpIgorCisjOiBsaWIvZW5jb2RpbmcudGNsOjQ1OSBsaWIvZW5jb2RpbmcudGNsOjQ2NQorbXNnaWQgIk90aGVyIgorbXNnc3RyICJLaMOhYyIKKworIzogbGliL2Vycm9yLnRjbDoyMCBsaWIvZXJyb3IudGNsOjExNgorbXNnaWQgImVycm9yIgorbXNnc3RyICJs4buXaSIKKworIzogbGliL2Vycm9yLnRjbDozNgorbXNnaWQgIndhcm5pbmciCittc2dzdHIgImPhuqNuaCBiw6FvIgorCisjOiBsaWIvZXJyb3IudGNsOjk2Cittc2dpZCAiWW91IG11c3QgY29ycmVjdCB0aGUgYWJvdmUgZXJyb3JzIGJlZm9yZSBjb21taXR0aW5nLiIKK21zZ3N0ciAiQuG6oW4gcGjhuqNpIHPhu61hIGPDoWMgbOG7l2kgdHLDqm4gdHLGsOG7m2Mga2hpIGNodXnhu4NuIGdpYW8uIgorCisjOiBsaWIvaW5kZXgudGNsOjYKK21zZ2lkICJVbmFibGUgdG8gdW5sb2NrIHRoZSBpbmRleC4iCittc2dzdHIgIktow7RuZyB0aOG7gyBi4buPIGtow7NhIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogbGliL2luZGV4LnRjbDoxNworbXNnaWQgIkluZGV4IEVycm9yIgorbXNnc3RyICJM4buXaSBt4bulYyBs4bulYyIKKworIzogbGliL2luZGV4LnRjbDoxOQorbXNnaWQgIiIKKyJVcGRhdGluZyB0aGUgR2l0IGluZGV4IGZhaWxlZC4gIEEgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIHRvICIKKyJyZXN5bmNocm9uaXplIGdpdC1ndWkuIgorbXNnc3RyICIiCisiQ+G6rXAgbmjhuq10IG3hu6VjIGzhu6VjIGNobyBHaXQgZ+G6t3AgbOG7l2kuIFZp4buHYyBxdcOpdCBs4bqhaSBz4bq9IHThu7EgxJHhu5luZyDEkcaw4bujYyBraOG7n2kgY2jhuqF5IMSR4buDICIKKyLEkeG7k25nIGjDs2EgbOG6oWkgduG7m2kgZ2l0LWd1aS4iCisKKyM6IGxpYi9pbmRleC50Y2w6MzAKK21zZ2lkICJDb250aW51ZSIKK21zZ3N0ciAiVGnhur9wIHThu6VjIgorCisjOiBsaWIvaW5kZXgudGNsOjMzCittc2dpZCAiVW5sb2NrIEluZGV4IgorbXNnc3RyICJC4buPIGtow7NhIG3hu6VjIGzhu6VjIgorCisjOiBsaWIvaW5kZXgudGNsOjI5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKK21zZ3N0ciAiQuG7jyAlcyByYSBraOG7j2kgdmnhu4djIGNodXnhu4NuIGdpYW8iCisKKyM6IGxpYi9pbmRleC50Y2w6MzM3Cittc2dpZCAiUmVhZHkgdG8gY29tbWl0LiIKK21zZ3N0ciAixJDDoyBjaHV54buDbiBnaWFvIHLhu5NpLiIKKworIzogbGliL2luZGV4LnRjbDozNTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIsSQYW5nIHRow6ptICVzIgorCisjOiBsaWIvaW5kZXgudGNsOjM4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlN0YWdlICVkIHVudHJhY2tlZCBmaWxlcz8iCittc2dzdHIgIsSQxrBhICVkIHThuq1wIHRpbiBjaMawYSB0aGVvIGTDtWkgbMOqbiBi4buHIHBow7NuZyDEkeG7gyBjaHV54buDbiBnaWFvPyIKKworIzogbGliL2luZGV4LnRjbDo0MjgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnQgY2hhbmdlcyBpbiBmaWxlICVzPyIKK21zZ3N0ciAiSG/DoG4gbmd1ecOqbiBjw6FjIHRoYXkgxJHhu5VpIHRyb25nIHThuq1wIHRpbiAlcz8iCisKKyM6IGxpYi9pbmRleC50Y2w6NDMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gdGhlc2UgJWkgZmlsZXM/IgorbXNnc3RyICJIb8OgbiBuZ3V5w6puIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgJWkgdOG6rXAgdGluPyIKKworIzogbGliL2luZGV4LnRjbDo0MzgKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIiIKKyJN4buNaSB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgcGjDs25nIHPhur0gbeG6pXQgdsSpbmggdmnhu4VuIGRvIGzhu4duaCByZXZlcnQuIgorCisjOiBsaWIvaW5kZXgudGNsOjQ0MQorbXNnaWQgIkRvIE5vdGhpbmciCittc2dzdHIgIktow7RuZyBsw6BtIGfDrCIKKworIzogbGliL2luZGV4LnRjbDo0NTkKK21zZ2lkICJSZXZlcnRpbmcgc2VsZWN0ZWQgZmlsZXMiCittc2dzdHIgIsSQYW5nIGhvw6BuIG5ndXnDqm4gY8OhYyB04bqtcCB0aW4gxJHDoyBjaOG7jW4iCisKKyM6IGxpYi9pbmRleC50Y2w6NDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0aW5nICVzIgorbXNnc3RyICLEkGFuZyBob8OgbiBuZ3V5w6puICVzIgorCisjOiBsaWIvbGluZS50Y2w6MTcKK21zZ2lkICJHb3RvIExpbmU6IgorbXNnc3RyICJOaOG6o3kgxJHhur9uIGTDsm5nOiIKKworIzogbGliL2xpbmUudGNsOjIzCittc2dpZCAiR28iCittc2dzdHIgIk5o4bqjeSIKKworIzogbGliL21lcmdlLnRjbDoxMworbXNnaWQgIiIKKyJDYW5ub3QgbWVyZ2Ugd2hpbGUgYW1lbmRpbmcuXG4iCisiXG4iCisiWW91IG11c3QgZmluaXNoIGFtZW5kaW5nIHRoaXMgY29tbWl0IGJlZm9yZSBzdGFydGluZyBhbnkgdHlwZSBvZiBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBow7JhIHRy4buZbiB0cm9uZyBraGkgdHUgYuG7lS5cbiIKKyJcbiIKKyJC4bqhbiBwaOG6o2kgaG/DoG4gdOG6pXQgdmnhu4djIHR1IGLhu5UgbOG6p24gY2h1eeG7g24gZ2lhbyB0csaw4bubYyBraGkgYuG6r3QgxJHhuqd1IGLhuqV0IGvhu7Mga2nhu4N1ICIKKyJow7JhIHRy4buZbiBuw6BvLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjI3Cittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhIG1lcmdlIGNhbiBiZSBwZXJmb3JtZWQuXG4iCisiXG4iCisiVGhlIHJlc2NhbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc3RhcnRlZCBub3cuXG4iCittc2dzdHIgIiIKKyJUcuG6oW5nIHRow6FpIHF1w6l0IGtow7RuZyBraOG7m3AgduG7m2kgdHLhuqFuZyB0aMOhaSBraG8uXG4iCisiXG4iCisiQ8OzIEdpdCBraMOhYyDEkcOjIHPhu61hIGtobyBuw6B5IGvhu4MgdOG7qyBs4bqnbiBxdcOpdCBjdeG7kWkuIEPhuqduIHF1w6l0IGzhuqFpIHRyxrDhu5tjIGtoaSB0aOG7sWMgIgorImhp4buHbiB2aeG7h2MgaMOyYSB0cuG7mW4uXG4iCisiXG4iCisiU+G6vSB0aOG7sWMgaGnhu4duIHZp4buHYyBxdcOpdCBs4bqhaSBuZ2F5IGLDonkgZ2nhu51pLlxuIgorCisjOiBsaWIvbWVyZ2UudGNsOjQ1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNvbmZsaWN0ZWQgbWVyZ2UuXG4iCisiXG4iCisiRmlsZSAlcyBoYXMgbWVyZ2UgY29uZmxpY3RzLlxuIgorIlxuIgorIllvdSBtdXN0IHJlc29sdmUgdGhlbSwgc3RhZ2UgdGhlIGZpbGUsIGFuZCBjb21taXQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgIgorIm1lcmdlLiAgT25seSB0aGVuIGNhbiB5b3UgYmVnaW4gYW5vdGhlciBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIkLhuqFuIMSRYW5nIOG7nyBnaeG7r2Egdmnhu4djIHRoYXkgxJHhu5VpLlxuIgorIlxuIgorIlThuq1wIHRpbiAlcyDEkcOjIGLhu4sgc+G7rWEgxJHhu5VpLlxuIgorIlxuIgorIkLhuqFuIG7Dqm4gaG/DoG4gdGhp4buHbiBs4bqnbiBjaHV54buDbiBnaWFvIGhp4buHbiBuYXkgdHLGsOG7m2Mga2hpIGjDsmEgdHLhu5luLiBDaOG7iSBjw7MgdGjhur8gIgorImLhuqFuIG3hu5tpIGPDsyB0aOG7gyBi4bqvdCDEkeG6p3UgaMOyYSB0cuG7mW4gY8OhaSAuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhbmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaXMgbW9kaWZpZWQuXG4iCisiXG4iCisiWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyAiCisid2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgorbXNnc3RyICIiCisiQuG6oW4gxJFhbmcg4bufIGdp4buvYSB2aeG7h2MgdGhheSDEkeG7lWkuXG4iCisiXG4iCisiVOG6rXAgdGluICVzIMSRw6MgYuG7iyBz4butYSDEkeG7lWkuXG4iCisiXG4iCisiQuG6oW4gbsOqbiBob8OgbiB0aGnhu4duIGzhuqduIGNodXnhu4NuIGdpYW8gaGnhu4duIG5heSB0csaw4bubYyBraGkgaMOyYSB0cuG7mW4uICBMw6BtIG5oxrAgduG6rXkgIgorImdpw7pwIGLhuqFuIGPDsyB0aOG7gyBsb+G6oWkgYuG7jyB2aeG7h2MgbOG7l2kgdHJvbmcgaMOyYSB0cuG7mW4uXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiVzIHRyw6puICVzIgorCisjOiBsaWIvbWVyZ2UudGNsOjEyMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdpbmcgJXMgYW5kICVzLi4uIgorbXNnc3RyICLEkGFuZyBow7JhIHRy4buZbiAlcyB2w6AgJXMuLi4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMzCittc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCittc2dzdHIgIkjDsmEgdHLhu5luIMSRw6MgdGjhu7FjIGhp4buHbiB0aMOgbmggY8O0bmcuIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzNQorbXNnaWQgIk1lcmdlIGZhaWxlZC4gIENvbmZsaWN0IHJlc29sdXRpb24gaXMgcmVxdWlyZWQuIgorbXNnc3RyICJIw7JhIHRy4buZbiBn4bq3cCBs4buXaS4gQ+G6p24gZ2nhuqNpIHF1eeG6v3QgY8OhYyB4dW5nIMSR4buZdCB0csaw4bubYy4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2UgSW50byAlcyIKK21zZ3N0ciAiSMOyYSB0cuG7mW4gdsOgbyAlcyIKKworIzogbGliL21lcmdlLnRjbDoxNzkKK21zZ2lkICJSZXZpc2lvbiBUbyBNZXJnZSIKK21zZ3N0ciAixJBp4buDbSBj4bqnbiBow7JhIHRy4buZbiIKKworIzogbGliL21lcmdlLnRjbDoyMTQKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBo4buneSBi4buPIHRyb25nIGtoaSDEkWFuZyB0dSBi4buVLlxuIgorIlxuIgorIkLhuqFuIGPhuqduIHBo4bqjaSBob8OgbiB04bqldCB2aeG7h2MgdHUgYuG7lSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoHkuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjI0Cittc2dpZCAiIgorIkFib3J0IG1lcmdlP1xuIgorIlxuIgorIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorbXNnc3RyICIiCisiQsOjaSBi4buPIGjDsmEgdHLhu5luP1xuIgorIlxuIgorIkLDo2kgYuG7jyBow7JhIHRy4buZbiBoaeG7h24gbmF5IHPhur0gbMOgbSAqVOG6pFQgQ+G6oiogY8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyBjaHV54buDbiBnaWFvICIKKyJi4buLIG3huqV0LlxuIgorIlxuIgorIlRp4bq/cCB04bulYyBiw6NpIGLhu48gdmnhu4djIGjDsmEgdHLhu5luIGhp4buHbiB04bqhaT8iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjMwCittc2dpZCAiIgorIlJlc2V0IGNoYW5nZXM/XG4iCisiXG4iCisiUmVzZXR0aW5nIHRoZSBjaGFuZ2VzIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggcmVzZXR0aW5nIHRoZSBjdXJyZW50IGNoYW5nZXM/IgorbXNnc3RyICIiCisixJDhurd0IGzhuqFpIG3hu41pIHRoYXkgxJHhu5VpP1xuIgorIlxuIgorIlZp4buHYyDEkeG6t3QgbOG6oWkgY8OhYyB0aGF5IMSR4buVaSBz4bq9IGzDoG0gKk3hu4xJKiB0aGF5IMSR4buVaSBjaMawYSBjaHV54buDbiBnaWFvIGJp4bq/biBt4bqldC5cbiIKKyJcbiIKKyJW4bqrbiB0aeG6v3AgdOG7pWMgxJHhurd0IGzhuqFpIGPDoWMgdGhheSDEkeG7lWkgaGnhu4duIHThuqFpPyIKKworIzogbGliL21lcmdlLnRjbDoyNDEKK21zZ2lkICJBYm9ydGluZyIKK21zZ3N0ciAiQsOjaSBi4buPIgorCisjOiBsaWIvbWVyZ2UudGNsOjI0MQorbXNnaWQgImZpbGVzIHJlc2V0IgorbXNnc3RyICLEkeG6t3QgbOG6oWkgY8OhYyB04bqtcCB0aW4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY5Cittc2dpZCAiQWJvcnQgZmFpbGVkLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGLDo2kgYuG7jy4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjcxCittc2dpZCAiQWJvcnQgY29tcGxldGVkLiAgUmVhZHkuIgorbXNnc3RyICLEkMOjIGLDo2kgYuG7jyB4b25nLiAgU+G6tW4gc8OgbmcuIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo4Cittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgYmFzZSB2ZXJzaW9uPyIKK21zZ3N0ciAiQnXhu5ljIHBow6JuIGdp4bqjaSB0aMOgbmggbmjDoW5oIGPGoSBz4bufPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6OQorbXNnaWQgIkZvcmNlIHJlc29sdXRpb24gdG8gdGhpcyBicmFuY2g/IgorbXNnc3RyICJCdeG7mWMgcGjDom4gZ2nhuqNpIHRow6BuaCBuaMOhbmggbsOgeT8iCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjEwCittc2dpZCAiRm9yY2UgcmVzb2x1dGlvbiB0byB0aGUgb3RoZXIgYnJhbmNoPyIKK21zZ3N0ciAiQnXhu5ljIHBow6JuIGdp4bqjaSB0aMOgbmggbmjDoW5oIGtow6FjPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm90ZSB0aGF0IHRoZSBkaWZmIHNob3dzIG9ubHkgY29uZmxpY3RpbmcgY2hhbmdlcy5cbiIKKyJcbiIKKyIlcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuIgorIlxuIgorIlRoaXMgb3BlcmF0aW9uIGNhbiBiZSB1bmRvbmUgb25seSBieSByZXN0YXJ0aW5nIHRoZSBtZXJnZS4iCittc2dzdHIgIiIKKyJDaMO6IMO9IGzDoCBkaWZmIGNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIHRoYXkgxJHhu5VpIHh1bmcgxJHhu5l0LlxuIgorIlxuIgorIiVzIHPhur0gYuG7iyBnaGkgxJHDqC5cbiIKKyJcbiIKKyJUaGFvIHTDoWMgbsOgeSBjaOG7iSBjw7MgdGjhu4MgYuG7jyBk4bufIGLhurFuZyBjw6FjaCBraOG7n2kgxJHhu5luZyBs4bqhaSB2aeG7h2MgaMOyYSB0cuG7mW4uIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDo0NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZpbGUgJXMgc2VlbXMgdG8gaGF2ZSB1bnJlc29sdmVkIGNvbmZsaWN0cywgc3RpbGwgc3RhZ2U/IgorbXNnc3RyICIiCisiVOG6rXAgdGluICVzIGPDsyB24bq7IGNoxrBhIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90IHh1bmcgxJHhu5l0LCB24bqrbiDEkcOhbmggZOG6pXUgbMOgIGPhuqduIGNodXnhu4NuICIKKyJnaWFvPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6NjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgcmVzb2x1dGlvbiBmb3IgJXMiCittc2dzdHIgIsSQYW5nIHBow6JuIGdp4bqjaSBjaG8gJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjE0MQorbXNnaWQgIkNhbm5vdCByZXNvbHZlIGRlbGV0aW9uIG9yIGxpbmsgY29uZmxpY3RzIHVzaW5nIGEgdG9vbCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSB4dW5nIMSR4buZdCB4w7NhIGhheSBsacOqbiBr4bq/dCBkw7luZyBt4buZdCBjw7RuZyBj4bulIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoxNDYKK21zZ2lkICJDb25mbGljdCBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJU4bqtcCB0aW4geHVuZyDEkeG7mXQga2jDtG5nIHThu5NuIHThuqFpIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDoyNDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHVUkgbWVyZ2UgdG9vbDogJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgY8O0bmcgY+G7pSBow7JhIHRy4buZbiBHVUk6ICclcyciCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjI3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3VwcG9ydGVkIG1lcmdlIHRvb2wgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIGjhu5cgdHLhu6MgY8O0bmcgY+G7pSB0cuG7mW4gJyVzJyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzEwCittc2dpZCAiTWVyZ2UgdG9vbCBpcyBhbHJlYWR5IHJ1bm5pbmcsIHRlcm1pbmF0ZSBpdD8iCittc2dzdHIgIkPDtG5nIGPhu6UgaMOyYSB0cuG7mW4gxJFhbmcgY2jhuqF5IHLhu5NpLCBjaOG6pW0gZOG7qXQgbsOzPyIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHJldHJpZXZpbmcgdmVyc2lvbnM6XG4iCisiJXMiCittc2dzdHIgIiIKKyJH4bq3cCBs4buXaSBraGkgdHJ1eSBs4bqhaSBwaGnDqm4gYuG6o246XG4iCisiJXMiCisKKyM6IGxpYi9tZXJnZXRvb2wudGNsOjM1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgdGhlIG1lcmdlIHRvb2w6XG4iCisiXG4iCisiJXMiCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4Mga2jhu59pIGNo4bqheSBjw7RuZyBj4bulIGjDsmEgdHLhu5luOlxuIgorIlxuIgorIiVzIgorCisjOiBsaWIvbWVyZ2V0b29sLnRjbDozNTQKK21zZ2lkICJSdW5uaW5nIG1lcmdlIHRvb2wuLi4iCittc2dzdHIgIsSQYW5nIGNo4bqheSBjw7RuZyBj4bulIHRy4buZbi4uLiIKKworIzogbGliL21lcmdldG9vbC50Y2w6MzgyIGxpYi9tZXJnZXRvb2wudGNsOjM5MAorbXNnaWQgIk1lcmdlIHRvb2wgZmFpbGVkLiIKK21zZ3N0ciAiQ8O0bmcgY+G7pSB0cuG7mW4gZ+G6t3AgbOG7l2kuIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZ2xvYmFsIGVuY29kaW5nICclcyciCittc2dzdHIgIkLhuqNuZyBtw6MgdG/DoG4gY+G7pWMga2jDtG5nIGjhu6NwIGzhu4cgJyVzJyIKKworIzogbGliL29wdGlvbi50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHJlcG8gZW5jb2RpbmcgJyVzJyIKK21zZ3N0ciAiQuG6o25nIG3DoyBraG8gY2jhu6lhIGtow7RuZyBo4bujcCBs4buHICclcyciCisKKyM6IGxpYi9vcHRpb24udGNsOjExOQorbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgIlBo4bulYyBo4buTaSB0aMOgbmggbeG6t2MgxJHhu4tuaCIKKworIzogbGliL29wdGlvbi50Y2w6MTIzCittc2dpZCAiU2F2ZSIKK21zZ3N0ciAiR2hpIGzhuqFpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIlcyBSZXBvc2l0b3J5IgorbXNnc3RyICIlcyBraG8iCisKKyM6IGxpYi9vcHRpb24udGNsOjEzNAorbXNnaWQgIkdsb2JhbCAoQWxsIFJlcG9zaXRvcmllcykiCittc2dzdHIgIlRvw6BuIGPhu6VjIChN4buNaSBraG8pIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNDAKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgIlTDqm4gbmfGsOG7nWkgZMO5bmciCisKKyM6IGxpYi9vcHRpb24udGNsOjE0MQorbXNnaWQgIkVtYWlsIEFkZHJlc3MiCittc2dzdHIgIsSQ4buLYSBjaOG7iSB0aMawIMSRaeG7h24gdOG7rSIKKworIzogbGliL29wdGlvbi50Y2w6MTQzCittc2dpZCAiU3VtbWFyaXplIE1lcmdlIENvbW1pdHMiCittc2dzdHIgIlThu5VuZyBo4bujcCB24buBIGjDsmEgdHLhu5luIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogbGliL29wdGlvbi50Y2w6MTQ0Cittc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgorbXNnc3RyICJDaGkgdGnhur90IHZp4buHYyBow7JhIHRy4buZbiIKKworIzogbGliL29wdGlvbi50Y2w6MTQ1Cittc2dpZCAiU2hvdyBEaWZmc3RhdCBBZnRlciBNZXJnZSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRo4buRbmcga8OqIGtow6FjIGJp4buHdCBzYXUgaMOyYSB0cuG7mW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0NgorbXNnaWQgIlVzZSBNZXJnZSBUb29sIgorbXNnc3RyICJEw7luZyBDw7RuZyBj4bulIHRy4buZbiIKKworIzogbGliL29wdGlvbi50Y2w6MTQ4Cittc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKK21zZ3N0ciAiVGluIGThuqV1IHbhur90IHRo4budaSBnaWFuIHPhu61hIMSR4buVaSB04bqtcCB0aW4iCisKKyM6IGxpYi9vcHRpb24udGNsOjE0OQorbXNnaWQgIlBydW5lIFRyYWNraW5nIEJyYW5jaGVzIER1cmluZyBGZXRjaCIKK21zZ3N0ciAiWMOpbiBjw6FjIG5ow6FuaCB0aGVvIGTDtWkgdHJvbmcga2hpIGzhuqV5IHbhu4EiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1MAorbXNnaWQgIk1hdGNoIFRyYWNraW5nIEJyYW5jaGVzIgorbXNnc3RyICJLaOG7m3AgbmjDoW5oIHRoZW8gZMO1aSIKKworIzogbGliL29wdGlvbi50Y2w6MTUxCittc2dpZCAiVXNlIFRleHRjb252IEZvciBEaWZmcyBhbmQgQmxhbWVzIgorbXNnc3RyICJEw7luZyBUZXh0Y29udiBDaG8gRGlmZnMgdsOgIEJsYW1lcyIKKworIzogbGliL29wdGlvbi50Y2w6MTUyCittc2dpZCAiQmxhbWUgQ29weSBPbmx5IE9uIENoYW5nZWQgRmlsZXMiCittc2dzdHIgIkNo4buJIGNow6lwIGJsYW1lIHRyw6puIGPDoWMgdOG6rXAgdGluIHRoYXkgxJHhu5VpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTMKK21zZ2lkICJNYXhpbXVtIExlbmd0aCBvZiBSZWNlbnQgUmVwb3NpdG9yaWVzIExpc3QiCittc2dzdHIgIlPhu5EgbMaw4bujbmcga2hvIG3hu5tpIGTDuW5nIHThu5FpIMSRYSDEkcaw4bujYyBsxrB1IHRy4buvIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTQKK21zZ2lkICJNaW5pbXVtIExldHRlcnMgVG8gQmxhbWUgQ29weSBPbiIKK21zZ3N0ciAiQ2jhu68gdOG7kWkgdGhp4buDdSDEkeG7gyBibGFtZSBjaMOpcCB2w6BvIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNTUKK21zZ2lkICJCbGFtZSBIaXN0b3J5IENvbnRleHQgUmFkaXVzIChkYXlzKSIKK21zZ3N0ciAiQsOhbiBrw61uaCBuZ+G7ryBj4bqjbmggbOG7i2NoIHPhu60gYmxhbWUgKG5nw6B5KSIKKworIzogbGliL29wdGlvbi50Y2w6MTU2Cittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAiU+G7kSBkw7JuZyBu4buZaSBkdW5nIERpZmYiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1NworbXNnaWQgIkFkZGl0aW9uYWwgRGlmZiBQYXJhbWV0ZXJzIgorbXNnc3RyICLEkOG7kWkgc+G7kSBi4buVIHh1bmcgY2hvIERpZmYiCisKKyM6IGxpYi9vcHRpb24udGNsOjE1OAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlIFRleHQgV2lkdGgiCittc2dzdHIgIkNoaeG7gXUgcuG7mW5nIGPhu6dhIHBo4bqnbiBjaMO6IHRow61jaCIKKworIzogbGliL29wdGlvbi50Y2w6MTU5Cittc2dpZCAiTmV3IEJyYW5jaCBOYW1lIFRlbXBsYXRlIgorbXNnc3RyICJN4bqrdSB0w6puIG5ow6FuaCBt4bubaSIKKworIzogbGliL29wdGlvbi50Y2w6MTYwCittc2dpZCAiRGVmYXVsdCBGaWxlIENvbnRlbnRzIEVuY29kaW5nIgorbXNnc3RyICJC4bqjbmcgbcOjIGTDoG5oIGNobyBu4buZaSBkdW5nIHThuq1wIHRpbiBt4bq3YyDEkeG7i25oIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNjEKK21zZ2lkICJXYXJuIGJlZm9yZSBjb21taXR0aW5nIHRvIGEgZGV0YWNoZWQgaGVhZCIKK21zZ3N0ciAiQ+G6o25oIGLDoW8gdHLGsOG7m2Mga2hpIGNodXnhu4NuIGdpYW8gbeG7mXQgxJHhuqd1IGLhu4sgdMOhY2ggcuG7nWkiCisKKyM6IGxpYi9vcHRpb24udGNsOjE2MgorbXNnaWQgIlN0YWdpbmcgb2YgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLEkMOhbmggZOG6pXUgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIGzDoCBj4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxNjMKK21zZ2lkICJTaG93IHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiSGnhu4duIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSIKKworIzogbGliL29wdGlvbi50Y2w6MjA5Cittc2dpZCAiQ2hhbmdlIgorbXNnc3RyICJUaGF5IMSR4buVaSIKKworIzogbGliL29wdGlvbi50Y2w6MjUzCittc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCittc2dzdHIgIlThu6sgxJFp4buDbiBjaMOtbmggdOG6ozoiCisKKyM6IGxpYi9vcHRpb24udGNsOjI4MworbXNnaWQgIkNoYW5nZSBGb250IgorbXNnc3RyICLEkOG7lWkgcGjDtG5nIGNo4buvIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyODcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDaG9vc2UgJXMiCittc2dzdHIgIkNo4buNbiAlcyIKKworIzogbGliL29wdGlvbi50Y2w6MjkzCittc2dpZCAicHQuIgorbXNnc3RyICJwdC4iCisKKyM6IGxpYi9vcHRpb24udGNsOjMwNworbXNnaWQgIlByZWZlcmVuY2VzIgorbXNnc3RyICJDw6EgbmjDom4gaMOzYSIKKworIzogbGliL29wdGlvbi50Y2w6MzQ0Cittc2dpZCAiRmFpbGVkIHRvIGNvbXBsZXRlbHkgc2F2ZSBvcHRpb25zOiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGhvw6BuIHThuqV0IGdoaSBs4bqhaSBjw6FjIHTDuXkgY2jhu41uOiIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjIwCittc2dpZCAiQWRkIFJlbW90ZSIKK21zZ3N0ciAiVGjDqm0gbcOheSBjaOG7pyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjI1Cittc2dpZCAiQWRkIE5ldyBSZW1vdGUiCittc2dzdHIgIlRow6ptIG3DoXkgY2jhu6cgbeG7m2kiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDozMCBsaWIvdG9vbHNfZGxnLnRjbDozNworbXNnaWQgIkFkZCIKK21zZ3N0ciAiVGjDqm0gdsOgbyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjM5Cittc2dpZCAiUmVtb3RlIERldGFpbHMiCittc2dzdHIgIkNoaSB0aeG6v3QgduG7gSBtw6F5IGNo4bunIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NTAKK21zZ2lkICJMb2NhdGlvbjoiCittc2dzdHIgIlbhu4sgdHLDrToiCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDo2MAorbXNnaWQgIkZ1cnRoZXIgQWN0aW9uIgorbXNnc3RyICJIw6BuaCDEkeG7mW5nIHRow6ptIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjMKK21zZ2lkICJGZXRjaCBJbW1lZGlhdGVseSIKK21zZ3N0ciAiTOG6pXkgduG7gSBuZ2F5IGzhuq1wIHThu6ljIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NjkKK21zZ2lkICJJbml0aWFsaXplIFJlbW90ZSBSZXBvc2l0b3J5IGFuZCBQdXNoIgorbXNnc3RyICJLaOG7n2kgdOG6oW8gS2hvIG3DoXkgY2jhu6cgdsOgIMSR4bqpeSBk4buvIGxp4buHdSBsw6puIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6NzUKK21zZ2lkICJEbyBOb3RoaW5nIEVsc2UgTm93IgorbXNnc3RyICJLaMO0bmcgbMOgbSBnw6wgY+G6oyIKKworIzogbGliL3JlbW90ZV9hZGQudGNsOjEwMAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSByZW1vdGUgbmFtZS4iCittc2dzdHIgIkjDo3kgY3VuZyBj4bqlcCB0w6puIG3DoXkgY2jhu6cuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTEzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSByZW1vdGUgbmFtZS4iCittc2dzdHIgIiclcycga2jDtG5nIHBo4bqjaSBsw6AgdMOqbiBtw6F5IGNo4bunIMSRxrDhu6NjIGNo4bqlcCBuaOG6rW4uIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTI0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCByZW1vdGUgJyVzJyBvZiBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRow6ptIG3DoXkgY2jhu6cgJyVzJyBj4bunYSB24buLIHRyw60gJyVzJy4iCisKKyM6IGxpYi9yZW1vdGVfYWRkLnRjbDoxMzIgbGliL3RyYW5zcG9ydC50Y2w6NgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZldGNoICVzIgorbXNnc3RyICJs4bqleSB24buBICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgdGhlICVzIgorbXNnc3RyICLEkGFuZyBs4bqleSB24buBICVzIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRG8gbm90IGtub3cgaG93IHRvIGluaXRpYWxpemUgcmVwb3NpdG9yeSBhdCBsb2NhdGlvbiAnJXMnLiIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSBsw6BtIHRo4bq/IG7DoG8gxJHhu4Mga2jhu59pIHThuqFvIGtobyBjaOG7qWEgdOG6oWkgduG7iyB0csOtICclcycuIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYyIGxpYi90cmFuc3BvcnQudGNsOjU0IGxpYi90cmFuc3BvcnQudGNsOjkyCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJwdXNoICVzIgorbXNnc3RyICLEkeG6qXkgJXMgbMOqbiBtw6F5IGNo4bunIgorCisjOiBsaWIvcmVtb3RlX2FkZC50Y2w6MTYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2V0dGluZyB1cCB0aGUgJXMgKGF0ICVzKSIKK21zZ3N0ciAiQ8OgaSDEkeG6t3QgJyVzJyAodOG6oWkgJXMpIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgQnJhbmNoIFJlbW90ZWx5IgorbXNnc3RyICJYw7NhIG5ow6FuaCB0csOqbiBtw6F5IGNo4bunIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ4Cittc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgorbXNnc3RyICJU4burIEtobyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo1MSBsaWIvdHJhbnNwb3J0LnRjbDoxNjUKK21zZ2lkICJSZW1vdGU6IgorbXNnc3RyICJNw6F5IGNo4bunOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo3MiBsaWIvdHJhbnNwb3J0LnRjbDoxODcKK21zZ2lkICJBcmJpdHJhcnkgTG9jYXRpb246IgorbXNnc3RyICLEkOG7i2EgxJFp4buDbSB0w7l5IMO9OiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo4OAorbXNnaWQgIkJyYW5jaGVzIgorbXNnc3RyICJOaMOhbmgiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEwCittc2dpZCAiRGVsZXRlIE9ubHkgSWYiCittc2dzdHIgIkNo4buJIHhvw6EgTuG6v3UiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTEyCittc2dpZCAiTWVyZ2VkIEludG86IgorbXNnc3RyICLEkMOjIHRy4buZbiB2w6BvOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxNTMKK21zZ2lkICJBIGJyYW5jaCBpcyByZXF1aXJlZCBmb3IgJ01lcmdlZCBJbnRvJy4iCittc2dzdHIgIkPhuqduIG3hu5l0IG5ow6FuaCBjaG8gJ0jDsmEgdHLhu5luIHbDoG8nLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBicmFuY2hlcyBhcmUgbm90IGNvbXBsZXRlbHkgbWVyZ2VkIGludG8gJXM6XG4iCisiXG4iCisiIC0gJXMiCittc2dzdHIgIiIKKyJDw6FjIG5ow6FuaCBzYXUgxJHDonkga2jDtG5nIMSRxrDhu6NjIGjDsmEgdHLhu5luIGhvw6BuIHRvw6BuIHbDoG8gJXM6XG4iCisiXG4iCisiIC0gJXMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIk9uZSBvciBtb3JlIG9mIHRoZSBtZXJnZSB0ZXN0cyBmYWlsZWQgYmVjYXVzZSB5b3UgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgIgorIm5lY2Vzc2FyeSBjb21taXRzLiAgVHJ5IGZldGNoaW5nIGZyb20gJXMgZmlyc3QuIgorbXNnc3RyICIiCisiTeG7mXQgaGF5IG5oaeG7gXUgaMahbiBraeG7g20gdHJhIGjDsmEgdHLhu5luIGtow7RuZyDEkeG6oXQgYuG7n2kgdsOsIGLhuqFuIMSRw6Mga2jDtG5nIGzhuqV5IHbhu4EgIgorIm5o4buvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyBj4bqnbiB0aGnhur90LiBIw6N5IGzhuqV5IHbhu4EgdOG7qyAlcyB0csaw4bubYyDEkcOjLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyMDgKK21zZ2lkICJQbGVhc2Ugc2VsZWN0IG9uZSBvciBtb3JlIGJyYW5jaGVzIHRvIGRlbGV0ZS4iCittc2dzdHIgIlhpbiBow6N5IGNo4buNbiBt4buZdCBoYXkgbmhp4buBdSBuaMOhbmggY+G6p24geMOzYS4iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAixJBhbmcgeG/DoSBjw6FjIG5ow6FuaCB04burICVzIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjMwMAorbXNnaWQgIk5vIHJlcG9zaXRvcnkgc2VsZWN0ZWQuIgorbXNnc3RyICJDaMawYSBjaOG7jW4ga2hvLiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozMDUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTY2FubmluZyAlcy4uLiIKK21zZ3N0ciAixJBhbmcgcXXDqXQ6ICVzLi4uIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMDAKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICLEkOG6qXkgbMOqbiIKKworIzogbGliL3JlbW90ZS50Y2w6MjE4Cittc2dpZCAiUmVtb3ZlIFJlbW90ZSIKK21zZ3N0ciAiR+G7oSBi4buPIE3DoXkgY2jhu6ciCisKKyM6IGxpYi9yZW1vdGUudGNsOjIyMworbXNnaWQgIlBydW5lIGZyb20iCittc2dzdHIgIljDqW4gdOG7qyIKKworIzogbGliL3JlbW90ZS50Y2w6MjI4Cittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAiTOG6pXkgduG7gSB04burIgorCisjOiBsaWIvc2VhcmNoLnRjbDo0OAorbXNnaWQgIkZpbmQ6IgorbXNnc3RyICJUw6xtOiIKKworIzogbGliL3NlYXJjaC50Y2w6NTAKK21zZ2lkICJOZXh0IgorbXNnc3RyICJUaeG6v3AiCisKKyM6IGxpYi9zZWFyY2gudGNsOjUxCittc2dpZCAiUHJldiIKK21zZ3N0ciAiVHLGsOG7m2MiCisKKyM6IGxpYi9zZWFyY2gudGNsOjUyCittc2dpZCAiUmVnRXhwIgorbXNnc3RyICJCVENRIgorCisjOiBsaWIvc2VhcmNoLnRjbDo1NAorbXNnaWQgIkNhc2UiCittc2dzdHIgIkhvYSIKKworIzogbGliL3Nob3J0Y3V0LnRjbDoyMSBsaWIvc2hvcnRjdXQudGNsOjYyCittc2dpZCAiQ2Fubm90IHdyaXRlIHNob3J0Y3V0OiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4buRaSB04bqvdDoiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM3Cittc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGJp4buDdSB0xrDhu6NuZzoiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo1NworbXNnaWQgIlVuc3VwcG9ydGVkIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIktow7RuZyBo4buXIHRy4bujIGtp4buDbSB0cmEgY2jDrW5oIHThuqMiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICJLaeG7g20gdHJhIGNow61uaCB04bqjIGtow7RuZyBz4bq1biBzw6BuZyIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjY4Cittc2dpZCAiSW52YWxpZCBzcGVsbCBjaGVja2luZyBjb25maWd1cmF0aW9uIgorbXNnc3RyICJD4bqldSBow6xuaCBi4buZIHNvw6F0IGNow61uaCB04bqjIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCittc2dzdHIgIsSQYW5nIGhvw6BuIG5ndXnDqm4gdOG7qyDEkWnhu4NuIHRow6BuaCAlcy4iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo3MworbXNnaWQgIlNwZWxsIGNoZWNrZXIgc2lsZW50bHkgZmFpbGVkIG9uIHN0YXJ0dXAiCittc2dzdHIgIlBo4bqnbiBraeG7g20gdHJhIGNow61uaCB04bqjIMSRw6MgZ+G6t3AgbOG7l2kga2hpIGto4bufaSDEkeG7mW5nIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6ODAKK21zZ2lkICJVbnJlY29nbml6ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiS2jDtG5nIGNo4bqlcCBuaOG6rW4gYuG7mSBraeG7g20gdHJhIGNow61uaCB04bqjIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTg2Cittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgIktow7RuZyBjw7MgZ+G7o2kgw70iCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDozODgKK21zZ2lkICJVbmV4cGVjdGVkIEVPRiBmcm9tIHNwZWxsIGNoZWNrZXIiCittc2dzdHIgIkfhurdwIGvhur90IHRow7pjIGLhuqV0IG5n4budIHThu6sgYuG7mSBraeG7g20gdHJhIGNow61uaCB04bqjIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MzkyCittc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCittc2dzdHIgIktp4buDbSB0cmEgY2jDrW5oIHThuqMga2jDtG5nIHRow6BuaCBjw7RuZyIKKworIzogbGliL3NzaGtleS50Y2w6MzEKK21zZ2lkICJObyBrZXlzIGZvdW5kLiIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IGtow7NhIG7DoG8uIgorCisjOiBsaWIvc3Noa2V5LnRjbDozNAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkZvdW5kIGEgcHVibGljIGtleSBpbjogJXMiCittc2dzdHIgIlTDrG0gdGjhuqV5IGtob8OhIGPDtG5nIGtoYWkgdHJvbmc6ICVzIgorCisjOiBsaWIvc3Noa2V5LnRjbDo0MAorbXNnaWQgIkdlbmVyYXRlIEtleSIKK21zZ3N0ciAiVOG6oW8ga2hvw6EiCisKKyM6IGxpYi9zc2hrZXkudGNsOjU4Cittc2dpZCAiQ29weSBUbyBDbGlwYm9hcmQiCittc2dzdHIgIkNow6lwIHbDoG8gY2xpcGJvYXJkIgorCisjOiBsaWIvc3Noa2V5LnRjbDo3MgorbXNnaWQgIllvdXIgT3BlblNTSCBQdWJsaWMgS2V5IgorbXNnc3RyICJLaMOzYSBjw7RuZyBPcGVuU1NIIGPhu6dhIGLhuqFuIgorCisjOiBsaWIvc3Noa2V5LnRjbDo4MAorbXNnaWQgIkdlbmVyYXRpbmcuLi4iCittc2dzdHIgIsSQYW5nIHThuqFvLi4uIgorCisjOiBsaWIvc3Noa2V5LnRjbDo4NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3Qgc3RhcnQgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBjaOG6oXkgc3NoLWtleWdlbjpcbiIKKyJcbiIKKyIlcyIKKworIzogbGliL3NzaGtleS50Y2w6MTEzCittc2dpZCAiR2VuZXJhdGlvbiBmYWlsZWQuIgorbXNnc3RyICJWaeG7h2MgdOG6oW8ga2hvw6EgxJHDoyB0aOG6pXQgYuG6oWkuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjAKK21zZ2lkICJHZW5lcmF0aW9uIHN1Y2NlZWRlZCwgYnV0IG5vIGtleXMgZm91bmQuIgorbXNnc3RyICJWaeG7h2MgdOG6oW8gdGjDoG5oIGPDtG5nIG5oxrBuZyBs4bqhaSBraMO0bmcgdMOsbSB0aOG6pXkga2jDs2EuIgorCisjOiBsaWIvc3Noa2V5LnRjbDoxMjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJZb3VyIGtleSBpcyBpbjogJXMiCittc2dzdHIgIktow7NhIGPhu6dhIGLhuqFuIHRyb25nOiAlcyIKKworIzogbGliL3N0YXR1c19iYXIudGNsOjg3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKK21zZ3N0ciAiJXMgLi4uICUqaSB0cm9uZyAlKmkgJXMgKCUzaSUlKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjIKK21zZ2lkICJBZGQgVG9vbCIKK21zZ3N0ciAiVGjDqm0gY8O0bmcgY+G7pSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MjgKK21zZ2lkICJBZGQgTmV3IFRvb2wgQ29tbWFuZCIKK21zZ3N0ciAiVGjDqm0gbOG7h25oIGPDtG5nIGPhu6UgbeG7m2kiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjM0Cittc2dpZCAiQWRkIGdsb2JhbGx5IgorbXNnc3RyICJUaMOqbSB0b8OgbiBj4bulYyIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDYKK21zZ2lkICJUb29sIERldGFpbHMiCittc2dzdHIgIkNoaSB0aeG6v3QgY8O0bmcgY+G7pSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NDkKK21zZ2lkICJVc2UgJy8nIHNlcGFyYXRvcnMgdG8gY3JlYXRlIGEgc3VibWVudSB0cmVlOiIKK21zZ3N0ciAiRMO5bmcgZOG6pXUgbmfEg24gY8OhY2ggJy8nIMSR4buDIHThuqFvIGPDonkgdHLDrG5oIMSRxqFuIGNvbjoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjYwCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgIkzhu4duaDoiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjcxCittc2dpZCAiU2hvdyBhIGRpYWxvZyBiZWZvcmUgcnVubmluZyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGjhu5lwIHRob+G6oWkgdHLGsOG7m2Mga2hpIGNo4bqheSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6NzcKK21zZ2lkICJBc2sgdGhlIHVzZXIgdG8gc2VsZWN0IGEgcmV2aXNpb24gKHNldHMgJFJFVklTSU9OKSIKK21zZ3N0ciAiSOG7j2kgbmfGsOG7nWkgZMO5bmcgY2jhu41uIMSRaeG7g20geGVtIHjDqXQgKMSR4bq3dCBiaeG6v24gJFJFVklTSU9OKSIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6ODIKK21zZ2lkICJBc2sgdGhlIHVzZXIgZm9yIGFkZGl0aW9uYWwgYXJndW1lbnRzIChzZXRzICRBUkdTKSIKK21zZ3N0ciAiSOG7j2kgbmfGsOG7nWkgZMO5bmcgY8OhYyDEkeG7kWkgc+G7kSBi4buVIHh1bmcgdGjDqm0gKMSR4bq3dCBiaeG6v24gJEFSR1MpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDo4OQorbXNnaWQgIkRvbid0IHNob3cgdGhlIGNvbW1hbmQgb3V0cHV0IHdpbmRvdyIKK21zZ3N0ciAiS2jDtG5nIGhp4buDbiB0aOG7iyBj4butYSBz4buVIGvhur90IHh14bqldCBjw6J1IGzhu4duaCIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6OTQKK21zZ2lkICJSdW4gb25seSBpZiBhIGRpZmYgaXMgc2VsZWN0ZWQgKCRGSUxFTkFNRSBub3QgZW1wdHkpIgorbXNnc3RyICJDaOG7iSBjaOG6oXkgbuG6v3UgZGlmZiDEkcaw4bujYyBjaOG7jW4gKGJp4bq/biAkRklMRU5BTUUga2jDtG5nIHLhu5duZykiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjExOAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgYSBuYW1lIGZvciB0aGUgdG9vbC4iCittc2dzdHIgIkjDo3kgY3VuZyBj4bqlcCB0w6puIGNobyBjw7RuZyBj4bulLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVG9vbCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiQ8O0bmcgY+G7pSAnJXMnIMSRw6Mgc+G6tW4gY8OzLiIKKworIzogbGliL3Rvb2xzX2RsZy50Y2w6MTQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBhZGQgdG9vbDpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyB0aMOqbSBjw7RuZyBj4bulOlxuIgorIiVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoxODcKK21zZ2lkICJSZW1vdmUgVG9vbCIKK21zZ3N0ciAiR+G7oSBi4buPIGPDtG5nIGPhu6UiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5MworbXNnaWQgIlJlbW92ZSBUb29sIENvbW1hbmRzIgorbXNnc3RyICJH4buhIGLhu48gY8O0bmcgY+G7pSBs4buHbmgiCisKKyM6IGxpYi90b29sc19kbGcudGNsOjE5OAorbXNnaWQgIlJlbW92ZSIKK21zZ3N0ciAiR+G7oSBi4buPIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyMzEKK21zZ2lkICIoQmx1ZSBkZW5vdGVzIHJlcG9zaXRvcnktbG9jYWwgdG9vbHMpIgorbXNnc3RyICIoQ8OhYyBjw7RuZyBj4bulIGNo4buJIHRo4buLIGtoby1u4buZaS1i4buZIHhhbmgpIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDoyOTIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW4gQ29tbWFuZDogJXMiCittc2dzdHIgIkNo4bqheSBs4buHbmg6ICVzIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozMDYKK21zZ2lkICJBcmd1bWVudHMiCittc2dzdHIgIsSQ4buRaSBz4buRIgorCisjOiBsaWIvdG9vbHNfZGxnLnRjbDozNDEKK21zZ2lkICJPSyIKK21zZ3N0ciAixJDhu5NuZyDDvSIKKworIzogbGliL3Rvb2xzLnRjbDo3NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJ1bm5pbmcgJXMgcmVxdWlyZXMgYSBzZWxlY3RlZCBmaWxlLiIKK21zZ3N0ciAiQ2jhuqF5ICVzIHnDqnUgY+G6p3UgY+G6p24gcGjhuqNpIGNo4buNbiBt4buZdCB04bqtcCB0aW4uIgorCisjOiBsaWIvdG9vbHMudGNsOjkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJ1biAlMSRzIG9uIGZpbGUgXCIlMiRzXCI/IgorbXNnc3RyICJC4bqhbiBjw7MgY2jhuq9jIGzDoCBtdeG7kW4gY2jhuqF5ICUxJHMgdHLDqm4gdOG6rXAgdGluIFwiJTIkc1wiIGtow7RuZz8iCisKKyM6IGxpYi90b29scy50Y2w6OTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcnVuICVzPyIKK21zZ3N0ciAiQuG6oW4gY8OzIGNo4bqvYyBsw6AgbXXhu5FuIGNo4bqheSAlcyBraMO0bmc/IgorCisjOiBsaWIvdG9vbHMudGNsOjExNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2w6ICVzIgorbXNnc3RyICJDw7RuZyBj4bulOiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxMTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSdW5uaW5nOiAlcyIKK21zZ3N0ciAixJBhbmcgY2jhuqF5OiAlcyIKKworIzogbGliL3Rvb2xzLnRjbDoxNTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUb29sIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHk6ICVzIgorbXNnc3RyICJDw7RuZyBj4bulIMSRxrDhu6NjIGJpw6puIGThu4tjaCB0aMOgbmggY8O0bmc6ICVzIgorCisjOiBsaWIvdG9vbHMudGNsOjE1NworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRvb2wgZmFpbGVkOiAlcyIKK21zZ3N0ciAiQ8O0bmcgY+G7pSBn4bq3cCBs4buXaTogJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyBuZXcgY2hhbmdlcyBmcm9tICVzIgorbXNnc3RyICJM4bqleSBjw6FjIHRoYXkgxJHhu5VpIG3hu5tpIHThu6sgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAicmVtb3RlIHBydW5lICVzIgorbXNnc3RyICJ4w6luIGLhu5t0IHRyw6puIG3DoXkgY2jhu6cgJXMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gJXMiCittc2dzdHIgIljDqW4gYuG7m3QgY8OhYyBuaMOhbmggdGhlbyBkw7VpIGLhu4sgeMOzYSB04burICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNQorbXNnaWQgImZldGNoIGFsbCByZW1vdGVzIgorbXNnc3RyICJs4bqleSB24buBIHThu6sgdOG6pXQgY+G6oyBjw6FjIG3DoXkgY2jhu6ciCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjI2Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAixJBhbmcgbOG6pXkgY8OhYyB0aGF5IMSR4buVaSBt4bubaSB04burIG3hu41pIG3DoXkgY2jhu6ciCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjQwCittc2dpZCAicmVtb3RlIHBydW5lIGFsbCByZW1vdGVzIgorbXNnc3RyICJ4w6luIGLhu5t0IG3hu41pIG3DoXkgY2jhu6ciCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjQxCittc2dpZCAiUHJ1bmluZyB0cmFja2luZyBicmFuY2hlcyBkZWxldGVkIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIljDqW4gdOG7iWEgY8OhYyBuaMOhbmggxJHDoyB0aGVvIGTDtWkgYuG7iyB4w7NhIHThu6sgbeG7jWkgbcOheSBjaOG7pyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCittc2dzdHIgIsSQYW5nIMSR4bqpeSBjw6FjIG5ow6FuaCBsw6puICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIk1pcnJvcmluZyB0byAlcyIKK21zZ3N0ciAiQuG6o24gc2FvIMSR4bq/biAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTExCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUHVzaGluZyAlcyAlcyB0byAlcyIKK21zZ3N0ciAixJBhbmcgKMSR4bqpeSkgJXMgJXMgbMOqbiAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTMyCittc2dpZCAiUHVzaCBCcmFuY2hlcyIKK21zZ3N0ciAixJDhuql5IGzDqm4gY8OhYyBuaMOhbmgiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE0NworbXNnaWQgIlNvdXJjZSBCcmFuY2hlcyIKK21zZ3N0ciAiTmjDoW5oIG5ndeG7k24iCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2MgorbXNnaWQgIkRlc3RpbmF0aW9uIFJlcG9zaXRvcnkiCittc2dzdHIgIktobyBjaOG7qWEgxJHDrWNoIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyMDUKK21zZ2lkICJUcmFuc2ZlciBPcHRpb25zIgorbXNnc3RyICJUw7l5IGNo4buNbiB0cnV54buBbiIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjA3Cittc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCittc2dzdHIgIsOJcCBideG7mWMgZ2hpIMSRw6ggbmjDoW5oIHPhurVuIGPDsyAoY8OzIHRo4buDIHPhur0gbG/huqFpIGLhu48gY8OhYyB0aGF5IMSR4buVaSkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjIxMQorbXNnaWQgIlVzZSB0aGluIHBhY2sgKGZvciBzbG93IG5ldHdvcmsgY29ubmVjdGlvbnMpIgorbXNnc3RyICJEw7luZyBnw7NpIG3hu49uZyAoZMOgbmggY2hvIGvhur90IG7hu5FpIG3huqFuZyBjaOG6rW0pIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyMTUKK21zZ2lkICJJbmNsdWRlIHRhZ3MiCittc2dzdHIgIkJhbyBn4buTbSBjw6FjIHRo4bq7IgorCisjfiBtc2dpZCAiQ2FzZS1TZW5zaXRpdmUiCisjfiBtc2dzdHIgIkPDsyBwaMOibiBiaeG7h3QgSE9BL3RoxrDhu51uZyIKZGlmZiAtLWdpdCBhL2dpdC1ndWkvcG8vemhfY24ucG8gYi9naXQtZ3VpL3BvL3poX2NuLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYzFiZTIKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtZ3VpL3BvL3poX2NuLnBvCkBAIC0wLDAgKzEsMTk2NyBAQAorIyBUcmFuc2xhdGlvbiBvZiBnaXQtZ3VpIHRvIENoaW5lc2UKKyMgQ29weXJpZ2h0IChDKSAyMDA3IFNoYXduIFBlYXJjZQorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0LWd1aSBwYWNrYWdlLgorIyBYdWRvbmcgR3VhbiA8eHVkb25nLmd1YW5AZ21haWwuY29tPiwgMjAwNy4KKyMKKyMgUGxlYXNlIHVzZSB0aGUgZm9sbG93aW5nIHRyYW5zbGF0aW9uIHRocm91Z2hvdXQgdGhlIGZpbGUgZm9yIGNvbnNpc3RlbmNlOgorIworIyAJcmVwb3NpdG9yeQnniYjmnKzlupMKKyMgCWNvbW1pdAkJ5o+Q5LqkCisjIAlyZXZpc2lvbgnniYjmnKwKKyMgCWJyYW5jaAkJ5YiG5pSvCisjIAl0YWcJCeagh+etvgorIyAJYW5ub3RhdGlvbgnmoIfms6gKKyMgCW1lcmdlCQnlkIjlubYKKyMgCWZhc3QgZm9yd2FyZAnlv6vpgJ/lkIjlubYoPz8pCisjIAlzdGFnZQkJ57yT5a2YICjor5Hoh6ogaW5kZXgvY2FjaGUpCisjIAlhbWVuZAkJ5L+u5q2jCisjIAlyZXNldAkJ5aSN5L2NCisjCisjIDIwMDgtMDEtMDYgRXJpYyBNaWFvIDxlcmljLnkubWlhb0BnbWFpbC5jb20+CisjIEZJWE1FOiBjaGVja291dCDnmoTmoIflh4bnv7vor5EKKyMKKyMsIGZ1enp5Cittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDA4LTAzLTE0IDA3OjE4KzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA3LTA3LTIxIDAxOjIzLTA3MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEVyaWMgTWlhbyA8ZXJpYy55Lm1pYW9AZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IENoaW5lc2VcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogZ2l0LWd1aS5zaDo0MSBnaXQtZ3VpLnNoOjYzNCBnaXQtZ3VpLnNoOjY0OCBnaXQtZ3VpLnNoOjY2MSBnaXQtZ3VpLnNoOjc0NAorIzogZ2l0LWd1aS5zaDo3NjMKK21zZ2lkICJnaXQtZ3VpOiBmYXRhbCBlcnJvciIKK21zZ3N0ciAiZ2l0LWd1aTog6Ie05ZG96ZSZ6K+vIgorCisjOiBnaXQtZ3VpLnNoOjU5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgZm9udCBzcGVjaWZpZWQgaW4gJXM6IgorbXNnc3RyICIlcyDkuK3mjIflrprnmoTlrZfkvZPml6DmlYg6IgorCisjOiBnaXQtZ3VpLnNoOjYyMAorbXNnaWQgIk1haW4gRm9udCIKK21zZ3N0ciAi5Li76KaB5a2X5L2TIgorCisjOiBnaXQtZ3VpLnNoOjYyMQorbXNnaWQgIkRpZmYvQ29uc29sZSBGb250IgorbXNnc3RyICJEaWZmL+aOp+WItue7iOerr+Wtl+S9kyIKKworIzogZ2l0LWd1aS5zaDo2MzUKK21zZ2lkICJDYW5ub3QgZmluZCBnaXQgaW4gUEFUSC4iCittc2dzdHIgIlBBVEgg5Lit5rKh5pyJ5om+5YiwIGdpdCIKKworIzogZ2l0LWd1aS5zaDo2NjIKK21zZ2lkICJDYW5ub3QgcGFyc2UgR2l0IHZlcnNpb24gc3RyaW5nOiIKK21zZ3N0ciAi5peg5rOV6Kej5p6QIEdpdCDnmoTniYjmnKzkv6Hmga86IgorCisjOiBnaXQtZ3VpLnNoOjY4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJHaXQgdmVyc2lvbiBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiIKKyJcbiIKKyIlcyBjbGFpbXMgaXQgaXMgdmVyc2lvbiAnJXMnLlxuIgorIlxuIgorIiVzIHJlcXVpcmVzIGF0IGxlYXN0IEdpdCAxLjUuMCBvciBsYXRlci5cbiIKKyJcbiIKKyJBc3N1bWUgJyVzJyBpcyB2ZXJzaW9uIDEuNS4wP1xuIgorbXNnc3RyICIiCisi5peg5rOV56Gu5a6aIEdpdCDnmoTniYjmnKwuXG4iCisiXG4iCisiJXMg5aOw5piO5YW254mI5pys5Li6ICclcycuXG4iCisiXG4iCisi6ICMICVzIOmcgOimgSAxLjUuMCDmiJbov5nku6XlkI7nmoQgR2l0IOeJiOacrC5cbiIKKyJcbiIKKyLmmK/lkKblgYflrpogJyVzJyDkuLrniYjmnKwgMS41LjA/XG4iCisKKyM6IGdpdC1ndWkuc2g6OTE4Cittc2dpZCAiR2l0IGRpcmVjdG9yeSBub3QgZm91bmQ6IgorbXNnc3RyICJHaXQg55uu5b2V5peg5rOV5om+5YiwOiIKKworIzogZ2l0LWd1aS5zaDo5MjUKK21zZ2lkICJDYW5ub3QgbW92ZSB0byB0b3Agb2Ygd29ya2luZyBkaXJlY3Rvcnk6IgorbXNnc3RyICLml6Dms5Xnp7vliqjliLDlt6XkvZzmoLnnm67lvZU6IgorCisjOiBnaXQtZ3VpLnNoOjkzMgorbXNnaWQgIkNhbm5vdCB1c2UgZnVubnkgLmdpdCBkaXJlY3Rvcnk6IgorbXNnc3RyICLml6Dms5Xkvb/nlKggLmdpdCDnm67lvZU6IgorCisjOiBnaXQtZ3VpLnNoOjkzNworbXNnaWQgIk5vIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLmsqHmnInlt6XkvZznm67lvZUiCisKKyM6IGdpdC1ndWkuc2g6MTA4NCBsaWIvY2hlY2tvdXRfb3AudGNsOjI4MworbXNnaWQgIlJlZnJlc2hpbmcgZmlsZSBzdGF0dXMuLi4iCittc2dzdHIgIuabtOaWsOaWh+S7tueKtuaAgS4uLiIKKworIzogZ2l0LWd1aS5zaDoxMTQ5Cittc2dpZCAiU2Nhbm5pbmcgZm9yIG1vZGlmaWVkIGZpbGVzIC4uLiIKK21zZ3N0ciAi5omr5o+P5L+u5pS56L+H55qE5paH5Lu2IC4uLiIKKworIzogZ2l0LWd1aS5zaDoxMzI0IGxpYi9icm93c2VyLnRjbDoyNDYKK21zZ2lkICJSZWFkeS4iCittc2dzdHIgIuWwsee7qiIKKworIzogZ2l0LWd1aS5zaDoxNTkwCittc2dpZCAiVW5tb2RpZmllZCIKK21zZ3N0ciAi5pyq5L+u5pS5IgorCisjOiBnaXQtZ3VpLnNoOjE1OTIKK21zZ2lkICJNb2RpZmllZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAi5L+u5pS55L2G5pyq57yT5a2YIgorCisjOiBnaXQtZ3VpLnNoOjE1OTMgZ2l0LWd1aS5zaDoxNTk4Cittc2dpZCAiU3RhZ2VkIGZvciBjb21taXQiCittc2dzdHIgIue8k+WtmOS4uuaPkOS6pCIKKworIzogZ2l0LWd1aS5zaDoxNTk0IGdpdC1ndWkuc2g6MTU5OQorbXNnaWQgIlBvcnRpb25zIHN0YWdlZCBmb3IgY29tbWl0IgorbXNnc3RyICLpg6jliIbnvJPlrZjkuLrmj5DkuqQiCisKKyM6IGdpdC1ndWkuc2g6MTU5NSBnaXQtZ3VpLnNoOjE2MDAKK21zZ2lkICJTdGFnZWQgZm9yIGNvbW1pdCwgbWlzc2luZyIKK21zZ3N0ciAi57yT5a2Y5Li65o+Q5LqkLCDkuI3lrZjlnKgiCisKKyM6IGdpdC1ndWkuc2g6MTU5NworbXNnaWQgIlVudHJhY2tlZCwgbm90IHN0YWdlZCIKK21zZ3N0ciAi5pyq6Lef6LiqLCDmnKrnvJPlrZgiCisKKyM6IGdpdC1ndWkuc2g6MTYwMgorbXNnaWQgIk1pc3NpbmciCittc2dzdHIgIuS4jeWtmOWcqCIKKworIzogZ2l0LWd1aS5zaDoxNjAzCittc2dpZCAiU3RhZ2VkIGZvciByZW1vdmFsIgorbXNnc3RyICLnvJPlrZjkuLrliKDpmaQiCisKKyM6IGdpdC1ndWkuc2g6MTYwNAorbXNnaWQgIlN0YWdlZCBmb3IgcmVtb3ZhbCwgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAi57yT5a2Y5Li65Yig6ZmkLCDkvYbku43lrZjlnKgiCisKKyM6IGdpdC1ndWkuc2g6MTYwNiBnaXQtZ3VpLnNoOjE2MDcgZ2l0LWd1aS5zaDoxNjA4IGdpdC1ndWkuc2g6MTYwOQorbXNnaWQgIlJlcXVpcmVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIumcgOimgeino+WGs+WQiOW5tuWGsueqgSIKKworIzogZ2l0LWd1aS5zaDoxNjQ0Cittc2dpZCAiU3RhcnRpbmcgZ2l0ay4uLiBwbGVhc2Ugd2FpdC4uLiIKK21zZ3N0ciAi5ZCv5YqoIGdpdGsuLi4g6K+3562J5b6FLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE2NTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVW5hYmxlIHRvIHN0YXJ0IGdpdGs6XG4iCisiXG4iCisiJXMgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKyLml6Dms5XlkK/liqggZ2l0azpcbiIKKyJcbiIKKyIlcyDkuI3lrZjlnKgiCisKKyM6IGdpdC1ndWkuc2g6MTg2MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM2Cittc2dpZCAiUmVwb3NpdG9yeSIKK21zZ3N0ciAi54mI5pys5bqTKHJlcG9zaXRvcnkpIgorCisjOiBnaXQtZ3VpLnNoOjE4NjEKK21zZ2lkICJFZGl0IgorbXNnc3RyICLnvJbovpEiCisKKyM6IGdpdC1ndWkuc2g6MTg2MyBsaWIvY2hvb3NlX3Jldi50Y2w6NTYxCittc2dpZCAiQnJhbmNoIgorbXNnc3RyICLliIbmlK8oYnJhbmNoKSIKKworIzogZ2l0LWd1aS5zaDoxODY2IGxpYi9jaG9vc2VfcmV2LnRjbDo1NDgKK21zZ2lkICJDb21taXRAQG5vdW4iCittc2dzdHIgIuaPkOS6pChjb21taXQpIgorCisjOiBnaXQtZ3VpLnNoOjE4NjkgbGliL21lcmdlLnRjbDoxMjAgbGliL21lcmdlLnRjbDoxNDkgbGliL21lcmdlLnRjbDoxNjcKK21zZ2lkICJNZXJnZSIKK21zZ3N0ciAi5ZCI5bm2KG1lcmdlKSIKKworIzogZ2l0LWd1aS5zaDoxODcwIGxpYi9jaG9vc2VfcmV2LnRjbDo1NTcKK21zZ2lkICJSZW1vdGUiCittc2dzdHIgIui/nOerryhyZW1vdGUpIgorCisjOiBnaXQtZ3VpLnNoOjE4NzkKK21zZ2lkICJCcm93c2UgQ3VycmVudCBCcmFuY2gncyBGaWxlcyIKK21zZ3N0ciAi5rWP6KeI5b2T5YmN5YiG5pSv5LiK55qE5paH5Lu2IgorCisjOiBnaXQtZ3VpLnNoOjE4ODMKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzLi4uIgorbXNnc3RyICLmtY/op4jliIbmlK/kuIrnmoTmlofku7YuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTg4OAorbXNnaWQgIlZpc3VhbGl6ZSBDdXJyZW50IEJyYW5jaCdzIEhpc3RvcnkiCittc2dzdHIgIuWbvuekuuW9k+WJjeWIhuaUr+eahOWOhuWPsiIKKworIzogZ2l0LWd1aS5zaDoxODkyCittc2dpZCAiVmlzdWFsaXplIEFsbCBCcmFuY2ggSGlzdG9yeSIKK21zZ3N0ciAi5Zu+56S65omA5pyJ5YiG5pSv55qE5Y6G5Y+yIgorCisjOiBnaXQtZ3VpLnNoOjE4OTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcm93c2UgJXMncyBGaWxlcyIKK21zZ3N0ciAi5rWP6KeIICVzIOS4iueahOaWh+S7tiIKKworIzogZ2l0LWd1aS5zaDoxOTAxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVmlzdWFsaXplICVzJ3MgSGlzdG9yeSIKK21zZ3N0ciAi5Zu+56S6ICVzIOWIhuaUr+eahOWOhuWPsiIKKworIzogZ2l0LWd1aS5zaDoxOTA2IGxpYi9kYXRhYmFzZS50Y2w6MjcgbGliL2RhdGFiYXNlLnRjbDo2NworbXNnaWQgIkRhdGFiYXNlIFN0YXRpc3RpY3MiCittc2dzdHIgIuaVsOaNruW6k+e7n+iuoeS/oeaBryIKKworIzogZ2l0LWd1aS5zaDoxOTA5IGxpYi9kYXRhYmFzZS50Y2w6MzQKK21zZ2lkICJDb21wcmVzcyBEYXRhYmFzZSIKK21zZ3N0ciAi5Y6L57yp5pWw5o2u5bqTIgorCisjOiBnaXQtZ3VpLnNoOjE5MTIKK21zZ2lkICJWZXJpZnkgRGF0YWJhc2UiCittc2dzdHIgIumqjOivgeaVsOaNruW6kyIKKworIzogZ2l0LWd1aS5zaDoxOTE5IGdpdC1ndWkuc2g6MTkyMyBnaXQtZ3VpLnNoOjE5MjcgbGliL3Nob3J0Y3V0LnRjbDo3CisjOiBsaWIvc2hvcnRjdXQudGNsOjM5IGxpYi9zaG9ydGN1dC50Y2w6NzEKK21zZ2lkICJDcmVhdGUgRGVza3RvcCBJY29uIgorbXNnc3RyICLliJvlu7rmoYzpnaLlm77moIciCisKKyM6IGdpdC1ndWkuc2g6MTkzMiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE3NyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjE4NQorbXNnaWQgIlF1aXQiCittc2dzdHIgIumAgOWHuiIKKworIzogZ2l0LWd1aS5zaDoxOTM5Cittc2dpZCAiVW5kbyIKK21zZ3N0ciAi5pKk6ZSAIgorCisjOiBnaXQtZ3VpLnNoOjE5NDIKK21zZ2lkICJSZWRvIgorbXNnc3RyICLph43lgZoiCisKKyM6IGdpdC1ndWkuc2g6MTk0NiBnaXQtZ3VpLnNoOjI0NDMKK21zZ2lkICJDdXQiCittc2dzdHIgIuWJquWIhyIKKworIzogZ2l0LWd1aS5zaDoxOTQ5IGdpdC1ndWkuc2g6MjQ0NiBnaXQtZ3VpLnNoOjI1MjAgZ2l0LWd1aS5zaDoyNjE0CisjOiBsaWIvY29uc29sZS50Y2w6NjkKK21zZ2lkICJDb3B5IgorbXNnc3RyICLlpI3liLYiCisKKyM6IGdpdC1ndWkuc2g6MTk1MiBnaXQtZ3VpLnNoOjI0NDkKK21zZ2lkICJQYXN0ZSIKK21zZ3N0ciAi57KY6LS0IgorCisjOiBnaXQtZ3VpLnNoOjE5NTUgZ2l0LWd1aS5zaDoyNDUyIGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyNgorIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDozOAorbXNnaWQgIkRlbGV0ZSIKK21zZ3N0ciAi5Yig6ZmkIgorCisjOiBnaXQtZ3VpLnNoOjE5NTkgZ2l0LWd1aS5zaDoyNDU2IGdpdC1ndWkuc2g6MjYxOCBsaWIvY29uc29sZS50Y2w6NzEKK21zZ2lkICJTZWxlY3QgQWxsIgorbXNnc3RyICLlhajpgIkiCisKKyM6IGdpdC1ndWkuc2g6MTk2OAorbXNnaWQgIkNyZWF0ZS4uLiIKK21zZ3N0ciAi5paw5bu6Li4uIgorCisjOiBnaXQtZ3VpLnNoOjE5NzQKK21zZ2lkICJDaGVja291dC4uLiIKK21zZ3N0ciAiQ2hlY2tvdXQuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTk4MAorbXNnaWQgIlJlbmFtZS4uLiIKK21zZ3N0ciAi5pu05ZCNLi4uIgorCisjOiBnaXQtZ3VpLnNoOjE5ODUgZ2l0LWd1aS5zaDoyMDg1Cittc2dpZCAiRGVsZXRlLi4uIgorbXNnc3RyICLliKDpmaQuLi4iCisKKyM6IGdpdC1ndWkuc2g6MTk5MAorbXNnaWQgIlJlc2V0Li4uIgorbXNnc3RyICLlpI3kvY0oUmVzZXQpLi4uIgorCisjOiBnaXQtZ3VpLnNoOjIwMDIgZ2l0LWd1aS5zaDoyMzg5Cittc2dpZCAiTmV3IENvbW1pdCIKK21zZ3N0ciAi5paw5bu65o+Q5LqkIgorCisjOiBnaXQtZ3VpLnNoOjIwMTAgZ2l0LWd1aS5zaDoyMzk2Cittc2dpZCAiQW1lbmQgTGFzdCBDb21taXQiCittc2dzdHIgIuS/ruato+S4iuasoeaPkOS6pCIKKworIzogZ2l0LWd1aS5zaDoyMDE5IGdpdC1ndWkuc2g6MjM1NiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjk5Cittc2dpZCAiUmVzY2FuIgorbXNnc3RyICLph43mlrDmiavmj48iCisKKyM6IGdpdC1ndWkuc2g6MjAyNQorbXNnaWQgIlN0YWdlIFRvIENvbW1pdCIKK21zZ3N0ciAi57yT5a2Y5Li65o+Q5LqkIgorCisjOiBnaXQtZ3VpLnNoOjIwMzEKK21zZ2lkICJTdGFnZSBDaGFuZ2VkIEZpbGVzIFRvIENvbW1pdCIKK21zZ3N0ciAi57yT5a2Y5L+u5pS555qE5paH5Lu25Li65o+Q5LqkIgorCisjOiBnaXQtZ3VpLnNoOjIwMzcKK21zZ2lkICJVbnN0YWdlIEZyb20gQ29tbWl0IgorbXNnc3RyICLku47mnKzmrKHmj5DkuqTmkqTpmaQiCisKKyM6IGdpdC1ndWkuc2g6MjA0MiBsaWIvaW5kZXgudGNsOjM5NQorbXNnaWQgIlJldmVydCBDaGFuZ2VzIgorbXNnc3RyICLmkqTplIDkv67mlLkiCisKKyM6IGdpdC1ndWkuc2g6MjA0OSBnaXQtZ3VpLnNoOjIzNjggZ2l0LWd1aS5zaDoyNDY3Cittc2dpZCAiU2lnbiBPZmYiCittc2dzdHIgIuetvuWQjShTaWduIE9mZikiCisKKyM6IGdpdC1ndWkuc2g6MjA1MyBnaXQtZ3VpLnNoOjIzNzIKK21zZ2lkICJDb21taXRAQHZlcmIiCittc2dzdHIgIuaPkOS6pCIKKworIzogZ2l0LWd1aS5zaDoyMDY0Cittc2dpZCAiTG9jYWwgTWVyZ2UuLi4iCittc2dzdHIgIuacrOWcsOWQiOW5ti4uLiIKKworIzogZ2l0LWd1aS5zaDoyMDY5Cittc2dpZCAiQWJvcnQgTWVyZ2UuLi4iCittc2dzdHIgIuS4reatouWQiOW5ti4uLiIKKworIzogZ2l0LWd1aS5zaDoyMDgxCittc2dpZCAiUHVzaC4uLiIKK21zZ3N0ciAi5LiK5LygLi4uIgorCisjOiBnaXQtZ3VpLnNoOjIwOTIgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MQorbXNnaWQgIkFwcGxlIgorbXNnc3RyICLoi7nmnpwiCisKKyM6IGdpdC1ndWkuc2g6MjA5NSBnaXQtZ3VpLnNoOjIxMTcgbGliL2Fib3V0LnRjbDoxNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWJvdXQgJXMiCittc2dzdHIgIuWFs+S6jiAlcyIKKworIzogZ2l0LWd1aS5zaDoyMDk5Cittc2dpZCAiUHJlZmVyZW5jZXMuLi4iCittc2dzdHIgIummlumAiemhuS4uLiIKKworIzogZ2l0LWd1aS5zaDoyMTA3IGdpdC1ndWkuc2g6MjYzOQorbXNnaWQgIk9wdGlvbnMuLi4iCittc2dzdHIgIumAiemhuS4uLiIKKworIzogZ2l0LWd1aS5zaDoyMTEzIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDcKK21zZ2lkICJIZWxwIgorbXNnc3RyICLluK7liqkiCisKKyM6IGdpdC1ndWkuc2g6MjE1NAorbXNnaWQgIk9ubGluZSBEb2N1bWVudGF0aW9uIgorbXNnc3RyICLlnKjnur/mlofmoaMiCisKKyM6IGdpdC1ndWkuc2g6MjIzOAorIywgdGNsLWZvcm1hdAorbXNnaWQgImZhdGFsOiBjYW5ub3Qgc3RhdCBwYXRoICVzOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorbXNnc3RyICLoh7Tlkb3plJnor686IOaXoOazleiOt+WPlui3r+W+hCAlcyDnmoTkv6Hmga86IOivpeaWh+S7tuaIluebruW9leS4jeWtmOWcqCIKKworIzogZ2l0LWd1aS5zaDoyMjcxCittc2dpZCAiQ3VycmVudCBCcmFuY2g6IgorbXNnc3RyICLlvZPliY3liIbmlK86IgorCisjOiBnaXQtZ3VpLnNoOjIyOTIKK21zZ2lkICJTdGFnZWQgQ2hhbmdlcyAoV2lsbCBDb21taXQpIgorbXNnc3RyICLlt7LnvJPlrZjnmoTmlLnliqggKOWwhuiiq+aPkOS6pCkiCisKKyM6IGdpdC1ndWkuc2g6MjMxMgorbXNnaWQgIlVuc3RhZ2VkIENoYW5nZXMiCittc2dzdHIgIuacque8k+WtmOeahOaUueWKqCIKKworIzogZ2l0LWd1aS5zaDoyMzYyCittc2dpZCAiU3RhZ2UgQ2hhbmdlZCIKK21zZ3N0ciAi57yT5a2Y5pS55YqoIgorCisjOiBnaXQtZ3VpLnNoOjIzNzggbGliL3RyYW5zcG9ydC50Y2w6OTMgbGliL3RyYW5zcG9ydC50Y2w6MTgyCittc2dpZCAiUHVzaCIKK21zZ3N0ciAi5LiK5LygIgorCisjOiBnaXQtZ3VpLnNoOjI0MDgKK21zZ2lkICJJbml0aWFsIENvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi5Yid5aeL55qE5o+Q5Lqk5o+P6L+wOiIKKworIzogZ2l0LWd1aS5zaDoyNDA5Cittc2dpZCAiQW1lbmRlZCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIuS/ruato+eahOaPkOS6pOaPj+i/sDoiCisKKyM6IGdpdC1ndWkuc2g6MjQxMAorbXNnaWQgIkFtZW5kZWQgSW5pdGlhbCBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIuS/ruato+eahOWIneWni+aPkOS6pOaPj+i/sDoiCisKKyM6IGdpdC1ndWkuc2g6MjQxMQorbXNnaWQgIkFtZW5kZWQgTWVyZ2UgQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICLkv67mraPnmoTlkIjlubbmj5DkuqTmj4/ov7A6IgorCisjOiBnaXQtZ3VpLnNoOjI0MTIKK21zZ2lkICJNZXJnZSBDb21taXQgTWVzc2FnZToiCittc2dzdHIgIuWQiOW5tuaPkOS6pOaPj+i/sDoiCisKKyM6IGdpdC1ndWkuc2g6MjQxMworbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi5o+Q5Lqk5o+P6L+wOiIKKworIzogZ2l0LWd1aS5zaDoyNDU5IGdpdC1ndWkuc2g6MjYyMiBsaWIvY29uc29sZS50Y2w6NzMKK21zZ2lkICJDb3B5IEFsbCIKK21zZ3N0ciAi5YWo6YOo5aSN5Yi2IgorCisjOiBnaXQtZ3VpLnNoOjI0ODMgbGliL2JsYW1lLnRjbDoxMDcKK21zZ2lkICJGaWxlOiIKK21zZ3N0ciAi5paH5Lu2OiIKKworIzogZ2l0LWd1aS5zaDoyNTg5Cittc2dpZCAiQXBwbHkvUmV2ZXJzZSBIdW5rIgorbXNnc3RyICLlupTnlKgv5pKk5raI5q2k5L+u5pS55Z2XIgorCisjOiBnaXQtZ3VpLnNoOjI1OTUKK21zZ2lkICJTaG93IExlc3MgQ29udGV4dCIKK21zZ3N0ciAi5pi+56S65pu05bCR5LiK5LiL5paHIgorCisjOiBnaXQtZ3VpLnNoOjI2MDIKK21zZ2lkICJTaG93IE1vcmUgQ29udGV4dCIKK21zZ3N0ciAi5pi+56S65pu05aSa5LiK5LiL5paHIgorCisjOiBnaXQtZ3VpLnNoOjI2MTAKK21zZ2lkICJSZWZyZXNoIgorbXNnc3RyICLliLfmlrAiCisKKyM6IGdpdC1ndWkuc2g6MjYzMQorbXNnaWQgIkRlY3JlYXNlIEZvbnQgU2l6ZSIKK21zZ3N0ciAi57yp5bCP5a2X5L2TIgorCisjOiBnaXQtZ3VpLnNoOjI2MzUKK21zZ2lkICJJbmNyZWFzZSBGb250IFNpemUiCittc2dzdHIgIuaUvuWkp+Wtl+S9kyIKKworIzogZ2l0LWd1aS5zaDoyNjQ2Cittc2dpZCAiVW5zdGFnZSBIdW5rIEZyb20gQ29tbWl0IgorbXNnc3RyICLku47mj5DkuqTkuK3mkqTpmaTkv67mlLnlnZciCisKKyM6IGdpdC1ndWkuc2g6MjY0OAorbXNnaWQgIlN0YWdlIEh1bmsgRm9yIENvbW1pdCIKK21zZ3N0ciAi57yT5a2Y5L+u5pS55Z2X5Li65o+Q5LqkIgorCisjOiBnaXQtZ3VpLnNoOjI2NjcKK21zZ2lkICJJbml0aWFsaXppbmcuLi4iCittc2dzdHIgIuWIneWni+WMli4uLiIKKworIzogZ2l0LWd1aS5zaDoyNzYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlBvc3NpYmxlIGVudmlyb25tZW50IGlzc3VlcyBleGlzdC5cbiIKKyJcbiIKKyJUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcHJvYmFibHlcbiIKKyJnb2luZyB0byBiZSBpZ25vcmVkIGJ5IGFueSBHaXQgc3VicHJvY2VzcyBydW5cbiIKKyJieSAlczpcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuWPr+iDveWtmOWcqOeOr+Wig+WPmOmHj+eahOmXrumimC5cbiIKKyJcbiIKKyLnlLEgJXMg5omn6KGM55qEIEdpdCDlrZDov5vnqIvlj6/og73lv73nlaXkuIvliJfnjq/looPlj5jph486XG4iCisiXG4iCisKKyM6IGdpdC1ndWkuc2g6Mjc5MgorbXNnaWQgIiIKKyJcbiIKKyJUaGlzIGlzIGR1ZSB0byBhIGtub3duIGlzc3VlIHdpdGggdGhlXG4iCisiVGNsIGJpbmFyeSBkaXN0cmlidXRlZCBieSBDeWd3aW4uIgorbXNnc3RyICIiCisiXG4iCisi6L+Z5piv55SxIEN5Z3dpbiDlj5HluIPnmoQgVGNsIOS7o+eggeS4reS4gOS4qlxuIgorIuW3suefpemXrumimOaJgOW8lei1ty4iCisKKyM6IGdpdC1ndWkuc2g6Mjc5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJcbiIKKyJBIGdvb2QgcmVwbGFjZW1lbnQgZm9yICVzXG4iCisiaXMgcGxhY2luZyB2YWx1ZXMgZm9yIHRoZSB1c2VyLm5hbWUgYW5kXG4iCisidXNlci5lbWFpbCBzZXR0aW5ncyBpbnRvIHlvdXIgcGVyc29uYWxcbiIKKyJ+Ly5naXRjb25maWcgZmlsZS5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlxuIgorIiVzIOeahOS4gOS4quW+iOWlveeahOabv+S7o+aWueahiOaYr+WwhiB1c2VyLm5hbWUg5Lul5Y+KXG4iCisidXNlci5lbWFpbCDorr7nva7mlL7lnKjkvaDnmoTkuKrkurogfi8uZ2l0Y29uZmlnIOaWh+S7tuS4rS5cbiIKKworIzogbGliL2Fib3V0LnRjbDoyNgorbXNnaWQgImdpdC1ndWkgLSBhIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSBmb3IgR2l0LiIKK21zZ3N0ciAiZ2l0LWd1aSAtIEdpdCDnmoTlm77lvaLljJbnlKjmiLfnlYzpnaIiCisKKyM6IGxpYi9ibGFtZS50Y2w6NzcKK21zZ2lkICJGaWxlIFZpZXdlciIKK21zZ3N0ciAi5paH5Lu25p+l55yL5ZmoIgorCisjOiBsaWIvYmxhbWUudGNsOjgxCittc2dpZCAiQ29tbWl0OiIKK21zZ3N0ciAi5o+Q5LqkOiIKKworIzogbGliL2JsYW1lLnRjbDoyNjQKK21zZ2lkICJDb3B5IENvbW1pdCIKK21zZ3N0ciAi5aSN5Yi25o+Q5LqkIgorCisjOiBsaWIvYmxhbWUudGNsOjM4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlYWRpbmcgJXMuLi4iCittc2dzdHIgIuivu+WPliAlcy4uLiIKKworIzogbGliL2JsYW1lLnRjbDo0ODgKK21zZ2lkICJMb2FkaW5nIGNvcHkvbW92ZSB0cmFja2luZyBhbm5vdGF0aW9ucy4uLiIKK21zZ3N0ciAi6KOF6L295aSN5Yi2L+enu+WKqOi3n+i4quagh+azqC4uLiIKKworIzogbGliL2JsYW1lLnRjbDo1MDgKK21zZ2lkICJsaW5lcyBhbm5vdGF0ZWQiCittc2dzdHIgIuagh+azqOihjCIKKworIzogbGliL2JsYW1lLnRjbDo2ODkKK21zZ2lkICJMb2FkaW5nIG9yaWdpbmFsIGxvY2F0aW9uIGFubm90YXRpb25zLi4uIgorbXNnc3RyICLoo4Xovb3ljp/lp4vkvY3nva7moIfms6guLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NjkyCittc2dpZCAiQW5ub3RhdGlvbiBjb21wbGV0ZS4iCittc2dzdHIgIuagh+azqOWujOaIkC4iCisKKyM6IGxpYi9ibGFtZS50Y2w6NzQ2Cittc2dpZCAiTG9hZGluZyBhbm5vdGF0aW9uLi4uIgorbXNnc3RyICLoo53ovInmoIfms6guLi4iCisKKyM6IGxpYi9ibGFtZS50Y2w6ODAyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAi5L2c6ICFOiIKKworIzogbGliL2JsYW1lLnRjbDo4MDYKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICLmj5DkuqTogIU6IgorCisjOiBsaWIvYmxhbWUudGNsOjgxMQorbXNnaWQgIk9yaWdpbmFsIEZpbGU6IgorbXNnc3RyICLljp/lp4vmlofku7Y6IgorCisjOiBsaWIvYmxhbWUudGNsOjkyNQorbXNnaWQgIk9yaWdpbmFsbHkgQnk6IgorbXNnc3RyICLmnIDliJ3nlLE6IgorCisjOiBsaWIvYmxhbWUudGNsOjkzMQorbXNnaWQgIkluIEZpbGU6IgorbXNnc3RyICLlnKjmlofku7Y6IgorCisjOiBsaWIvYmxhbWUudGNsOjkzNgorbXNnaWQgIkNvcGllZCBPciBNb3ZlZCBIZXJlIEJ5OiIKK21zZ3N0ciAi55Sx5aSN5Yi25oiW56e75Yqo6Iez5q2kOiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTQgbGliL2JyYW5jaF9jaGVja291dC50Y2w6MTkKK21zZ2lkICJDaGVja291dCBCcmFuY2giCittc2dzdHIgIkNoZWNrb3V0IOWIhuaUryIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MjMKK21zZ2lkICJDaGVja291dCIKK21zZ3N0ciAiQ2hlY2tvdXQiCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjI3IGxpYi9icmFuY2hfY3JlYXRlLnRjbDozNQorIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjMyIGxpYi9icmFuY2hfcmVuYW1lLnRjbDozMCBsaWIvYnJvd3Nlci50Y2w6MjgyCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUyMiBsaWIvY2hvb3NlX2ZvbnQudGNsOjQzIGxpYi9tZXJnZS50Y2w6MTcxCisjOiBsaWIvb3B0aW9uLnRjbDoxMDMgbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo0MiBsaWIvdHJhbnNwb3J0LnRjbDo5NworbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi5Y+W5raIIgorCisjOiBsaWIvYnJhbmNoX2NoZWNrb3V0LnRjbDozMiBsaWIvYnJvd3Nlci50Y2w6Mjg3Cittc2dpZCAiUmV2aXNpb24iCittc2dzdHIgIueJiOacrCIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzYgbGliL2JyYW5jaF9jcmVhdGUudGNsOjY5IGxpYi9vcHRpb24udGNsOjI0MgorbXNnaWQgIk9wdGlvbnMiCittc2dzdHIgIumAiemhuS4uLiIKKworIzogbGliL2JyYW5jaF9jaGVja291dC50Y2w6MzkgbGliL2JyYW5jaF9jcmVhdGUudGNsOjkyCittc2dpZCAiRmV0Y2ggVHJhY2tpbmcgQnJhbmNoIgorbXNnc3RyICLojrflj5bot5/ouKrliIbmlK8iCisKKyM6IGxpYi9icmFuY2hfY2hlY2tvdXQudGNsOjQ0Cittc2dpZCAiRGV0YWNoIEZyb20gTG9jYWwgQnJhbmNoIgorbXNnc3RyICLku47mnKzlnLDliIbmlK/ohLHnprsiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoyMgorbXNnaWQgIkNyZWF0ZSBCcmFuY2giCittc2dzdHIgIuWIm+W7uuWIhuaUryIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjI3Cittc2dpZCAiQ3JlYXRlIE5ldyBCcmFuY2giCittc2dzdHIgIuaWsOW7uuWIhuaUryIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjMxIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MzcxCittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICLmlrDlu7oiCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MAorbXNnaWQgIkJyYW5jaCBOYW1lIgorbXNnc3RyICLliIbmlK/lkI0iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDo0MworbXNnaWQgIk5hbWU6IgorbXNnc3RyICLlkI3lrZc6IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NTgKK21zZ2lkICJNYXRjaCBUcmFja2luZyBCcmFuY2ggTmFtZSIKK21zZ3N0ciAi5Yy56YWN6Lef6Liq5YiG5pSv5ZCN5a2XIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NjYKK21zZ2lkICJTdGFydGluZyBSZXZpc2lvbiIKK21zZ3N0ciAi6LW35aeL54mI5pysIgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6NzIKK21zZ2lkICJVcGRhdGUgRXhpc3RpbmcgQnJhbmNoOiIKK21zZ3N0ciAi5pu05paw5bey5pyJ5YiG5pSvOiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjc1Cittc2dpZCAiTm8iCittc2dzdHIgIuWPt+eggSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjgwCittc2dpZCAiRmFzdCBGb3J3YXJkIE9ubHkiCittc2dzdHIgIuS7heW/q+mAn+WQiOW5tiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjg1IGxpYi9jaGVja291dF9vcC50Y2w6NTE0Cittc2dpZCAiUmVzZXQiCittc2dzdHIgIuWkjeS9jSIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjk3Cittc2dpZCAiQ2hlY2tvdXQgQWZ0ZXIgQ3JlYXRpb24iCittc2dzdHIgIuWcqOWIm+W7uuWQjkNoZWNrb3V0IgorCisjOiBsaWIvYnJhbmNoX2NyZWF0ZS50Y2w6MTMxCittc2dpZCAiUGxlYXNlIHNlbGVjdCBhIHRyYWNraW5nIGJyYW5jaC4iCittc2dzdHIgIuivt+mAieaLqeafkOS4qui3n+i4quWIhuaUry4iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNDAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUcmFja2luZyBicmFuY2ggJXMgaXMgbm90IGEgYnJhbmNoIGluIHRoZSByZW1vdGUgcmVwb3NpdG9yeS4iCittc2dzdHIgIui3n+i4quWIhuaUryAlcyDlubbkuI3mmK/ov5znq6/niYjmnKzlupPkuK3nmoTkuIDkuKrliIbmlK8iCisKKyM6IGxpYi9icmFuY2hfY3JlYXRlLnRjbDoxNTMgbGliL2JyYW5jaF9yZW5hbWUudGNsOjg2Cittc2dpZCAiUGxlYXNlIHN1cHBseSBhIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAi6K+35o+Q5L6b5YiG5pSv5ZCN5a2XLiIKKworIzogbGliL2JyYW5jaF9jcmVhdGUudGNsOjE2NCBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBicmFuY2ggbmFtZS4iCittc2dzdHIgIiclcyfkuI3mmK/kuIDkuKrlj6/mjqXlj5fnmoTliIbmlK/lkI0uIgorCisjOiBsaWIvYnJhbmNoX2RlbGV0ZS50Y2w6MTUKK21zZ2lkICJEZWxldGUgQnJhbmNoIgorbXNnc3RyICLliKDpmaTliIbmlK8iCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoyMAorbXNnaWQgIkRlbGV0ZSBMb2NhbCBCcmFuY2giCittc2dzdHIgIuWIoOmZpOacrOWcsOWIhuaUryIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjM3Cittc2dpZCAiTG9jYWwgQnJhbmNoZXMiCittc2dzdHIgIuacrOWcsOWIhuaUryIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjUyCittc2dpZCAiRGVsZXRlIE9ubHkgSWYgTWVyZ2VkIEludG8iCittc2dzdHIgIuS7heWcqOWQiOW5tuWQjuWIoOmZpCIKKworIzogbGliL2JyYW5jaF9kZWxldGUudGNsOjU0Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSB0ZXN0LikiCittc2dzdHIgIuaAu+aYr+WQiOW5tiAo5LiN5L2c5ZCI5bm25rWL6K+VLikiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxMDMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGUgZm9sbG93aW5nIGJyYW5jaGVzIGFyZSBub3QgY29tcGxldGVseSBtZXJnZWQgaW50byAlczoiCittc2dzdHIgIuS4i+WIl+WIhuaUr+ayoeacieWujOWFqOiiq+WQiOW5tuWIsCAlczoiCisKKyM6IGxpYi9icmFuY2hfZGVsZXRlLnRjbDoxNDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIGRlbGV0ZSBicmFuY2hlczpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIuaXoOazleWIoOmZpOWIhuaUrzpcbiIKKyIlcyIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjE0IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyMgorbXNnaWQgIlJlbmFtZSBCcmFuY2giCittc2dzdHIgIuabtOaUueWIhuaUr+WQjToiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDoyNgorbXNnaWQgIlJlbmFtZSIKK21zZ3N0ciAi5pu05ZCNLi4uIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzYKK21zZ2lkICJCcmFuY2g6IgorbXNnc3RyICLliIbmlK86IgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MzkKK21zZ2lkICJOZXcgTmFtZToiCittc2dzdHIgIuaWsOWQjeWtlzoiCisKKyM6IGxpYi9icmFuY2hfcmVuYW1lLnRjbDo3NQorbXNnaWQgIlBsZWFzZSBzZWxlY3QgYSBicmFuY2ggdG8gcmVuYW1lLiIKK21zZ3N0ciAi6K+36YCJ5oup5YiG5pSv5pu05ZCNLiIKKworIzogbGliL2JyYW5jaF9yZW5hbWUudGNsOjk2IGxpYi9jaGVja291dF9vcC50Y2w6MTc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLliIbmlK8gJyVzJyDlt7Lnu4/lrZjlnKguIgorCisjOiBsaWIvYnJhbmNoX3JlbmFtZS50Y2w6MTE3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlbmFtZSAnJXMnLiIKK21zZ3N0ciAi5peg5rOV5pu05ZCNICclcycuIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTcKK21zZ2lkICJTdGFydGluZy4uLiIKK21zZ3N0ciAi5byA5aeLLi4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjYKK21zZ2lkICJGaWxlIEJyb3dzZXIiCittc2dzdHIgIuaWh+S7tua1j+iniOWZqCIKKworIzogbGliL2Jyb3dzZXIudGNsOjEyNiBsaWIvYnJvd3Nlci50Y2w6MTQzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiTG9hZGluZyAlcy4uLiIKK21zZ3N0ciAi6KOF6L29ICVzLi4uIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MTg3Cittc2dpZCAiW1VwIFRvIFBhcmVudF0iCittc2dzdHIgIlvkuIrlsYLnm67lvZVdIgorCisjOiBsaWIvYnJvd3Nlci50Y2w6MjY3IGxpYi9icm93c2VyLnRjbDoyNzMKK21zZ2lkICJCcm93c2UgQnJhbmNoIEZpbGVzIgorbXNnc3RyICLmtY/op4jliIbmlK/mlofku7YiCisKKyM6IGxpYi9icm93c2VyLnRjbDoyNzggbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozODcKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDc0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDg0CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk4NworbXNnaWQgIkJyb3dzZSIKK21zZ3N0ciAi5rWP6KeIIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXMgZnJvbSAlcyIKK21zZ3N0ciAi6I635Y+WICVzIOiHqiAlcyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoxMjcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJmYXRhbDogQ2Fubm90IHJlc29sdmUgJXMiCittc2dzdHIgIuiHtOWRvemUmeivrzog5peg5rOV6Kej5YazICVzIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjE0MCBsaWIvY29uc29sZS50Y2w6ODEgbGliL2RhdGFiYXNlLnRjbDozMQorbXNnaWQgIkNsb3NlIgorbXNnc3RyICLlhbPpl60iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MTY5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICLliIbmlK8gJyVzJyDlubbkuI3lrZjlnKguIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy5cbiIKKyJcbiIKKyJJdCBjYW5ub3QgZmFzdC1mb3J3YXJkIHRvICVzLlxuIgorIkEgbWVyZ2UgaXMgcmVxdWlyZWQuIgorbXNnc3RyICIiCisi5YiG5pSvICclcycg5bey57uP5a2Y5ZyoLlxuIgorIlxuIgorIuaXoOazleW/q+mAn+WQiOW5tuWIsCAlcy5cbiIKKyLpnIDopoHmma7pgJrlkIjlubYuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjIyMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk1lcmdlIHN0cmF0ZWd5ICclcycgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIuWQiOW5tuetlueVpSAnJXMnIOS4jeaUr+aMgS4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MjM5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSAnJXMnLiIKK21zZ3N0ciAi5peg5rOV5pu05pawICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjI1MQorbXNnaWQgIlN0YWdpbmcgYXJlYSAoaW5kZXgpIGlzIGFscmVhZHkgbG9ja2VkLiIKK21zZ3N0ciAi57yT5a2Y5Yy65Z+fIChpbmRleCkg5bey6KKr6ZSB5a6aLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDoyNjYKK21zZ2lkICIiCisiTGFzdCBzY2FubmVkIHN0YXRlIGRvZXMgbm90IG1hdGNoIHJlcG9zaXRvcnkgc3RhdGUuXG4iCisiXG4iCisiQW5vdGhlciBHaXQgcHJvZ3JhbSBoYXMgbW9kaWZpZWQgdGhpcyByZXBvc2l0b3J5IHNpbmNlIHRoZSBsYXN0IHNjYW4uICBBICIKKyJyZXNjYW4gbXVzdCBiZSBwZXJmb3JtZWQgYmVmb3JlIHRoZSBjdXJyZW50IGJyYW5jaCBjYW4gYmUgY2hhbmdlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIuacgOWQjuS4gOasoeaJq+aPj+eahOeKtuaAgeWSjOW9k+WJjeeJiOacrOW6k+eKtuaAgeS4jeespi5cbiIKKyJcbiIKKyLlj6bkuIAgR2l0IOeoi+W6j+iHquS4iuasoeaJq+aPj+WQjuS/ruaUueS6huacrOeJiOacrOW6ky4g5Zyo5L+u5pS55b2T5YmN5YiG5pSv5LmL5YmN6ZyA6KaB6YeN5paw5YGa5LiA5qyh5omrIgorIuaPjy5cbiIKKyJcbiIKKyLph43mlrDmiavmj4/lsIboh6rliqjlvIDlp4suXG4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzIyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgd29ya2luZyBkaXJlY3RvcnkgdG8gJyVzJy4uLiIKK21zZ3N0ciAi5pu05paw5bel5L2c55uu5b2V5YiwICclcycuLi4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6MzIzCittc2dpZCAiZmlsZXMgY2hlY2tlZCBvdXQiCittc2dzdHIgIiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBYm9ydGVkIGNoZWNrb3V0IG9mICclcycgKGZpbGUgbGV2ZWwgbWVyZ2luZyBpcyByZXF1aXJlZCkuIgorbXNnc3RyICLkuK3mraIgJyVzJyDnmoQgY2hlY2tvdXQg5pON5L2cICjpnIDopoHlgZrmlofku7bnuqflkIjlubYpLiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNTQKK21zZ2lkICJGaWxlIGxldmVsIG1lcmdlIHJlcXVpcmVkLiIKK21zZ3N0ciAi6ZyA6KaB5paH5Lu257qn5ZCI5bm2LiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDozNTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTdGF5aW5nIG9uIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi5YGc55WZ5Zyo5YiG5pSvICclcycuIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQyOQorbXNnaWQgIiIKKyJZb3UgYXJlIG5vIGxvbmdlciBvbiBhIGxvY2FsIGJyYW5jaC5cbiIKKyJcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIGJlIG9uIGEgYnJhbmNoLCBjcmVhdGUgb25lIG5vdyBzdGFydGluZyBmcm9tICdUaGlzIERldGFjaGVkICIKKyJDaGVja291dCcuIgorbXNnc3RyICIiCisi5L2g5LiN5Zyo5p+Q5Liq5pys5Zyw5YiG5pSv5LiKLlxuIgorIlxuIgorIuWmguaenOS9oOaDs+S9jeS6juafkOWIhuaUr+S4iiwg5LuO5b2T5YmN6ISx6IqC55qEQ2hlY2tvdXTkuK3liJvlu7rkuIDkuKrmlrDliIbmlK8uIgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ0NiBsaWIvY2hlY2tvdXRfb3AudGNsOjQ1MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNoZWNrZWQgb3V0ICclcycuIgorbXNnc3RyICInJXMnIOW3suiiqyBjaGVja291dCIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo0NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldHRpbmcgJyVzJyB0byAnJXMnIHdpbGwgbG9zZSB0aGUgZm9sbG93aW5nIGNvbW1pdHM6IgorbXNnc3RyICLlpI3kvY0gJyVzJyDliLAgJyVzJyDlsIblr7zoh7TkuIvliJfmj5DkuqTnmoTkuKLlpLE6IgorCisjOiBsaWIvY2hlY2tvdXRfb3AudGNsOjUwMAorbXNnaWQgIlJlY292ZXJpbmcgbG9zdCBjb21taXRzIG1heSBub3QgYmUgZWFzeS4iCittc2dzdHIgIuaBouWkjeS4ouWkseeahOaPkOS6pOaYr+avlOi+g+WbsOmavueahC4iCisKKyM6IGxpYi9jaGVja291dF9vcC50Y2w6NTA1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJyVzJz8iCittc2dzdHIgIuWkjeS9jSAnJXMnPyIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1MTAgbGliL21lcmdlLnRjbDoxNjMKK21zZ2lkICJWaXN1YWxpemUiCittc2dzdHIgIuWbvuekuiIKKworIzogbGliL2NoZWNrb3V0X29wLnRjbDo1NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHNldCBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJUaGlzIHdvcmtpbmcgZGlyZWN0b3J5IGlzIG9ubHkgcGFydGlhbGx5IHN3aXRjaGVkLiAgV2Ugc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQgIgorInlvdXIgZmlsZXMsIGJ1dCBmYWlsZWQgdG8gdXBkYXRlIGFuIGludGVybmFsIEdpdCBmaWxlLlxuIgorIlxuIgorIlRoaXMgc2hvdWxkIG5vdCBoYXZlIG9jY3VycmVkLiAgJXMgd2lsbCBub3cgY2xvc2UgYW5kIGdpdmUgdXAuIgorbXNnc3RyICIiCisi5peg5rOV6K6+5a6a5b2T5YmN5YiG5pSvLlxuIgorIlxuIgorIuW9k+WJjeW3peS9nOebruW9leS7heaciemDqOWIhuiiq+WIh+aNouWHuiwg5oiR5Lus5bey5oiQ5Yqf55qE5pu05paw5LqG5oKo55qE5paH5Lu25L2G5piv5peg5rOV5pu05paw5p+Q5Liq5YaF6YOoIgorIueahEdpdOaWh+S7ti5cbiIKKyJcbiIKKyLov5nmnKzkuI3or6Xlj5HnlJ8sICVzIOWwhuWFs+mXreW5tuaUvuW8gy4iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6MzkKK21zZ2lkICJTZWxlY3QiCittc2dzdHIgIumAieaLqSIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo1MworbXNnaWQgIkZvbnQgRmFtaWx5IgorbXNnc3RyICLlrZfkvZPml48iCisKKyM6IGxpYi9jaG9vc2VfZm9udC50Y2w6NzQKK21zZ2lkICJGb250IFNpemUiCittc2dzdHIgIuWtl+S9k+Wkp+WwjyIKKworIzogbGliL2Nob29zZV9mb250LnRjbDo5MQorbXNnaWQgIkZvbnQgRXhhbXBsZSIKK21zZ3N0ciAi5a2X5L2T5qC35L6LIgorCisjOiBsaWIvY2hvb3NlX2ZvbnQudGNsOjEwMworbXNnaWQgIiIKKyJUaGlzIGlzIGV4YW1wbGUgdGV4dC5cbiIKKyJJZiB5b3UgbGlrZSB0aGlzIHRleHQsIGl0IGNhbiBiZSB5b3VyIGZvbnQuIgorbXNnc3RyICIiCisi6L+Z5piv5qC35L6L5paH5pysLlxuIgorIuWmguaenOS9oOWWnOasoiwg5L2g5Y+v5Lul6K6+572u6K+l5a2X5L2TLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoyOAorbXNnaWQgIkdpdCBHdWkiCittc2dzdHIgIkdpdCBHdWkiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODEgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozNzYKK21zZ2lkICJDcmVhdGUgTmV3IFJlcG9zaXRvcnkiCittc2dzdHIgIuWIm+W7uuaWsOeahOeJiOacrOW6kyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NworbXNnaWQgIk5ldy4uLiIKK21zZ3N0ciAi5paw5bu6Li4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk0IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDYwCittc2dpZCAiQ2xvbmUgRXhpc3RpbmcgUmVwb3NpdG9yeSIKK21zZ3N0ciAi5YWL6ZqG5bey5pyJ54mI5pys5bqTIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMAorbXNnaWQgIkNsb25lLi4uIgorbXNnc3RyICLlhYvpmoYuLi4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTA3IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTc2Cittc2dpZCAiT3BlbiBFeGlzdGluZyBSZXBvc2l0b3J5IgorbXNnc3RyICLmiZPlvIDlt7LmnInniYjmnKzlupMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTEzCittc2dpZCAiT3Blbi4uLiIKK21zZ3N0ciAi5omT5byALi4uIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEyNgorbXNnaWQgIlJlY2VudCBSZXBvc2l0b3JpZXMiCittc2dzdHIgIuacgOi/keeJiOacrOW6kyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMzIKK21zZ2lkICJPcGVuIFJlY2VudCBSZXBvc2l0b3J5OiIKK21zZ3N0ciAi5omT5byA5pyA6L+R54mI5pys5bqTIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjI5NiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjMwMworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDozMTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIHJlcG9zaXRvcnkgJXM6IgorbXNnc3RyICLml6Dms5XliJvlu7rniYjmnKzlupMgJXM6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjM4MSBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ3OAorbXNnaWQgIkRpcmVjdG9yeToiCittc2dzdHIgIuebruW9lToiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDEyIGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTM3CisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMTEKK21zZ2lkICJHaXQgUmVwb3NpdG9yeSIKK21zZ3N0ciAiR2l0IOeJiOacrOW6kyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0MzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLnm67lvZUgJXMg5bey57uP5a2Y5ZyoLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NDEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJGaWxlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi5paH5Lu2ICVzIOW3sue7j+WtmOWcqC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NDU1Cittc2dpZCAiQ2xvbmUiCittc2dzdHIgIuWFi+mahiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo0NjgKK21zZ2lkICJVUkw6IgorbXNnc3RyICJVUkw6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ4OQorbXNnaWQgIkNsb25lIFR5cGU6IgorbXNnc3RyICLlhYvpmobnsbvlnos6IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjQ5NQorbXNnaWQgIlN0YW5kYXJkIChGYXN0LCBTZW1pLVJlZHVuZGFudCwgSGFyZGxpbmtzKSIKK21zZ3N0ciAi5qCH5YeG5pa55byPICjlv6vpgJ8sIOmDqOWIhuWkh+S7vSwg5L2c56Gs6L+e5o6lKSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1MDEKK21zZ2lkICJGdWxsIENvcHkgKFNsb3dlciwgUmVkdW5kYW50IEJhY2t1cCkiCittc2dzdHIgIuWFqOmDqOWkjeWItiAo6L6D5oWiLCDlgZrlpIfku70pIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjUwNworbXNnaWQgIlNoYXJlZCAoRmFzdGVzdCwgTm90IFJlY29tbWVuZGVkLCBObyBCYWNrdXApIgorbXNnc3RyICLlhbHkuqvmlrnlvI8gKOacgOW/qywg5LiN5o6o6I2QLCDkuI3lgZrlpIfku70pIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU0MyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjU5MAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MzYgbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4MDYKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6MTAxNyBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjEwMjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJOb3QgYSBHaXQgcmVwb3NpdG9yeTogJXMiCittc2dzdHIgIuS4jeaYr+S4gOS4qiBHaXQg54mI5pys5bqTOiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo1NzkKK21zZ2lkICJTdGFuZGFyZCBvbmx5IGF2YWlsYWJsZSBmb3IgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIuagh+WHhuaWueW8j+S7heW9k+aYr+acrOWcsOeJiOacrOW6k+aXtuacieaViC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NTgzCittc2dpZCAiU2hhcmVkIG9ubHkgYXZhaWxhYmxlIGZvciBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAi5YWx5Lqr5pa55byP5LuF5b2T5piv5pys5Zyw54mI5pys5bqT5pe25pyJ5pWILiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJMb2NhdGlvbiAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIuS9jee9riAlcyDlt7Lnu4/lrZjlnKguIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYxNQorbXNnaWQgIkZhaWxlZCB0byBjb25maWd1cmUgb3JpZ2luIgorbXNnc3RyICLml6Dms5XphY3nva4gb3JpZ2luIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjYyNworbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIua4heeCueWvueixoSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo2MjgKKyMsIGZ1enp5Cittc2dpZCAiYnVja2V0cyIKK21zZ3N0ciAi5rC05qG2Pz8iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NjUyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgorbXNnc3RyICLml6Dms5XlpI3liLYgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXM6ICVzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgdG8gY2xvbmUgZnJvbSAlcy4iCittc2dzdHIgIuayoeacieS4nOilv+WPr+S7jiAlcyDlhYvpmoYuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjY5MCBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwNAorIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MTYKK21zZ2lkICJUaGUgJ21hc3RlcicgYnJhbmNoIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4iCittc2dzdHIgIidtYXN0ZXIn5YiG5pSv5bCa5pyq5Yid5aeL5YyWLiIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3MDMKK21zZ2lkICJIYXJkbGlua3MgYXJlIHVuYXZhaWxhYmxlLiAgRmFsbGluZyBiYWNrIHRvIGNvcHlpbmcuIgorbXNnc3RyICLnoazov57mjqXkuI3lj6/nlKguIOS9v+eUqOWkjeWIti4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzE1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBmcm9tICVzIgorbXNnc3RyICLku44gJXMg5YWL6ZqGIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc0NgorbXNnaWQgIkNvcHlpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5aSN5Yi2IG9iamVjdHMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzQ3Cittc2dpZCAiS2lCIgorbXNnc3RyICJLaUIiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNvcHkgb2JqZWN0OiAlcyIKK21zZ3N0ciAi5peg5rOV5aSN5Yi2IG9iamVjdDogJXMiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6NzgxCittc2dpZCAiTGlua2luZyBvYmplY3RzIgorbXNnc3RyICLpk77mjqUgb2JqZWN0cyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo3ODIKK21zZ2lkICJvYmplY3RzIgorbXNnc3RyICJvYmplY3RzIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjc5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBoYXJkbGluayBvYmplY3Q6ICVzIgorbXNnc3RyICLml6Dms5Xnoazpk77mjqUgb2JqZWN0OiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4NDUKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYnJhbmNoZXMgYW5kIG9iamVjdHMuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICLml6Dms5Xojrflj5bliIbmlK/lkozlr7nosaEuIOivt+afpeeci+aOp+WItue7iOerr+eahOi+k+WHui4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODU2Cittc2dpZCAiQ2Fubm90IGZldGNoIHRhZ3MuICBTZWUgY29uc29sZSBvdXRwdXQgZm9yIGRldGFpbHMuIgorbXNnc3RyICLml6Dms5Xojrflj5bmoIfnrb4uIOivt+afpeeci+aOp+WItue7iOerr+eahOi+k+WHui4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODgwCittc2dpZCAiQ2Fubm90IGRldGVybWluZSBIRUFELiAgU2VlIGNvbnNvbGUgb3V0cHV0IGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi5peg5rOV56Gu5a6aIEhFQUQuIOivt+afpeeci+aOp+WItue7iOerr+eahOi+k+WHui4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6ODg5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNsZWFudXAgJXMiCittc2dzdHIgIuaXoOazlea4heeQhiAlcyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo4OTUKK21zZ2lkICJDbG9uZSBmYWlsZWQuIgorbXNnc3RyICLlhYvpmoblpLHotKUuIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkwMgorbXNnaWQgIk5vIGRlZmF1bHQgYnJhbmNoIG9idGFpbmVkLiIKK21zZ3N0ciAi5rKh5pyJ6I635Y+W57y655yB5YiG5pSvIgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjkxMworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZXNvbHZlICVzIGFzIGEgY29tbWl0LiIKK21zZ3N0ciAi5peg5rOV6Kej5p6QICVzIOS4uuaPkOS6pC4iCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTI1Cittc2dpZCAiQ3JlYXRpbmcgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIuWIm+W7uuW3peS9nOebruW9lSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5MjYgbGliL2luZGV4LnRjbDo2NSBsaWIvaW5kZXgudGNsOjEyNworIzogbGliL2luZGV4LnRjbDoxOTMKK21zZ2lkICJmaWxlcyIKK21zZ3N0ciAi5paH5Lu2IgorCisjOiBsaWIvY2hvb3NlX3JlcG9zaXRvcnkudGNsOjk1NQorbXNnaWQgIkluaXRpYWwgZmlsZSBjaGVja291dCBmYWlsZWQuIgorbXNnc3RyICLliJ3lp4vnmoTmlofku7ZjaGVja291dOWksei0pSIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDo5NzEKK21zZ2lkICJPcGVuIgorbXNnc3RyICLmiZPlvIAiCisKKyM6IGxpYi9jaG9vc2VfcmVwb3NpdG9yeS50Y2w6OTgxCittc2dpZCAiUmVwb3NpdG9yeToiCittc2dzdHIgIueJiOacrOW6kyIKKworIzogbGliL2Nob29zZV9yZXBvc2l0b3J5LnRjbDoxMDMxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIG9wZW4gcmVwb3NpdG9yeSAlczoiCittc2dzdHIgIuaXoOazleaJk+W8gOeJiOacrOW6kyAlczoiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MworbXNnaWQgIlRoaXMgRGV0YWNoZWQgQ2hlY2tvdXQiCittc2dzdHIgIuivpeiEseiKgueahENoZWNrb3V0IgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6NjAKK21zZ2lkICJSZXZpc2lvbiBFeHByZXNzaW9uOiIKK21zZ3N0ciAi54mI5pys6KGo6L6+5byPOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjc0Cittc2dpZCAiTG9jYWwgQnJhbmNoIgorbXNnc3RyICLmnKzlnLDliIbmlK8iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo3OQorbXNnaWQgIlRyYWNraW5nIEJyYW5jaCIKK21zZ3N0ciAi6Lef6Liq5YiG5pSvOiIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjg0IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzgKK21zZ2lkICJUYWciCittc2dzdHIgIuagh+etviIKKworIzogbGliL2Nob29zZV9yZXYudGNsOjMxNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcmV2aXNpb246ICVzIgorbXNnc3RyICLml6DmlYjniYjmnKw6ICVzIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzM4Cittc2dpZCAiTm8gcmV2aXNpb24gc2VsZWN0ZWQuIgorbXNnc3RyICLmsqHmnInpgInmi6nniYjmnKwuIgorCisjOiBsaWIvY2hvb3NlX3Jldi50Y2w6MzQ2Cittc2dpZCAiUmV2aXNpb24gZXhwcmVzc2lvbiBpcyBlbXB0eS4iCittc2dzdHIgIueJiOacrOihqOi+vuW8j+S4uuepui4iCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1MzEKK21zZ2lkICJVcGRhdGVkIgorbXNnc3RyICLlt7Lmm7TmlrAiCisKKyM6IGxpYi9jaG9vc2VfcmV2LnRjbDo1NTkKK21zZ2lkICJVUkwiCittc2dzdHIgIlVSTCIKKworIzogbGliL2NvbW1pdC50Y2w6OQorbXNnaWQgIiIKKyJUaGVyZSBpcyBub3RoaW5nIHRvIGFtZW5kLlxuIgorIlxuIgorIllvdSBhcmUgYWJvdXQgdG8gY3JlYXRlIHRoZSBpbml0aWFsIGNvbW1pdC4gIFRoZXJlIGlzIG5vIGNvbW1pdCBiZWZvcmUgdGhpcyAiCisidG8gYW1lbmQuXG4iCittc2dzdHIgIiIKKyLmsqHmnInmlLnliqjpnIDopoHkv67mraMuXG4iCisiXG4iCisi5L2g5q2j5Zyo5Yib5bu65pyA5Yid55qE5o+Q5LqkLiDlnKjmraTkuYvliY3msqHmnInmj5DkuqTlj6/ku6Xkv67mraMuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE4Cittc2dpZCAiIgorIkNhbm5vdCBhbWVuZCB3aGlsZSBtZXJnaW5nLlxuIgorIlxuIgorIllvdSBhcmUgY3VycmVudGx5IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSB0aGF0IGhhcyBub3QgYmVlbiBmdWxseSAiCisiY29tcGxldGVkLiAgWW91IGNhbm5vdCBhbWVuZCB0aGUgcHJpb3IgY29tbWl0IHVubGVzcyB5b3UgZmlyc3QgYWJvcnQgdGhlICIKKyJjdXJyZW50IG1lcmdlIGFjdGl2aXR5LlxuIgorbXNnc3RyICIiCisi5Zyo5ZCI5bm25pe25peg5rOV5L+u5q2jLlxuIgorIlxuIgorIuS9oOW9k+WJjeato+WcqOS4gOasoeWwmuacquWujOaIkOeahOWQiOW5tuaTjeS9nOi/h+eoi+S4rS4g6Zmk6Z2e5Lit5q2i5b2T5YmN5ZCI5bm25rS75YqoLFxuIgorIuWQpuWImeaXoOazleS/ruato+S5i+WJjeeahOaPkOS6pC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6NDkKK21zZ2lkICJFcnJvciBsb2FkaW5nIGNvbW1pdCBkYXRhIGZvciBhbWVuZDoiCittc2dzdHIgIuS4uuS/ruato+ijhei9veaPkOS6pOaVsOaNruWHuumUmToiCisKKyM6IGxpYi9jb21taXQudGNsOjc2Cittc2dpZCAiVW5hYmxlIHRvIG9idGFpbiB5b3VyIGlkZW50aXR5OiIKK21zZ3N0ciAi5peg5rOV6I6355+l5L2g55qE6Lqr5Lu9OiIKKworIzogbGliL2NvbW1pdC50Y2w6ODEKK21zZ2lkICJJbnZhbGlkIEdJVF9DT01NSVRURVJfSURFTlQ6IgorbXNnc3RyICLml6DmlYjnmoQgR0lUX0NPTU1JVFRFUl9JREVOVCIKKworIzogbGliL2NvbW1pdC50Y2w6MTMzCittc2dpZCAiIgorIkxhc3Qgc2Nhbm5lZCBzdGF0ZSBkb2VzIG5vdCBtYXRjaCByZXBvc2l0b3J5IHN0YXRlLlxuIgorIlxuIgorIkFub3RoZXIgR2l0IHByb2dyYW0gaGFzIG1vZGlmaWVkIHRoaXMgcmVwb3NpdG9yeSBzaW5jZSB0aGUgbGFzdCBzY2FuLiAgQSAiCisicmVzY2FuIG11c3QgYmUgcGVyZm9ybWVkIGJlZm9yZSBhbm90aGVyIGNvbW1pdCBjYW4gYmUgY3JlYXRlZC5cbiIKKyJcbiIKKyJUaGUgcmVzY2FuIHdpbGwgYmUgYXV0b21hdGljYWxseSBzdGFydGVkIG5vdy5cbiIKK21zZ3N0ciAiIgorIuacgOWQjuS4gOasoeaJq+aPj+eahOeKtuaAgeWSjOW9k+WJjeeJiOacrOW6k+eKtuaAgeS4jeespi5cbiIKKyJcbiIKKyLlj6bkuIAgR2l0IOeoi+W6j+iHquS4iuasoeaJq+aPj+WQjuS/ruaUueS6huacrOeJiOacrOW6ky4g5Zyo5L+u5pS55b2T5YmN5YiG5pSv5LmL5YmN6ZyA6KaB6YeN5paw5YGa5LiA5qyh5omrIgorIuaPjy5cbiIKKyJcbiIKKyLph43mlrDmiavmj4/lsIboh6rliqjlvIDlp4suXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE1NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJVbm1lcmdlZCBmaWxlcyBjYW5ub3QgYmUgY29tbWl0dGVkLlxuIgorIlxuIgorIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy4gIFlvdSBtdXN0IHJlc29sdmUgdGhlbSBhbmQgc3RhZ2UgdGhlIGZpbGUgIgorImJlZm9yZSBjb21taXR0aW5nLlxuIgorbXNnc3RyICIiCisi5bCa5pyq5ZCI5bm255qE5paH5Lu25rKh5pyJ5Yqe5rOV5o+Q5LqkLlxuIgorIlxuIgorIuaWh+S7tiAlcyDmnInlkIjlubblhrLnqoEsIOS9oOW/hemhu+ino+WGs+i/meS6m+WGsueqgeW5tue8k+WtmOivpeaWh+S7tuS9nOaPkOS6pC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlVua25vd24gZmlsZSBzdGF0ZSAlcyBkZXRlY3RlZC5cbiIKKyJcbiIKKyJGaWxlICVzIGNhbm5vdCBiZSBjb21taXR0ZWQgYnkgdGhpcyBwcm9ncmFtLlxuIgorbXNnc3RyICIiCisi5qOA5rWL5Yiw5pyq55+l5paH5Lu254q25oCBICVzLlxuIgorIlxuIgorIuaWh+S7tiAlcyDml6Dms5XnlLHor6XnqIvluo/mj5DkuqQuXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjE3MAorbXNnaWQgIiIKKyJObyBjaGFuZ2VzIHRvIGNvbW1pdC5cbiIKKyJcbiIKKyJZb3UgbXVzdCBzdGFnZSBhdCBsZWFzdCAxIGZpbGUgYmVmb3JlIHlvdSBjYW4gY29tbWl0LlxuIgorbXNnc3RyICIiCisi5rKh5pyJ6ZyA6KaB5o+Q5Lqk55qE5Y+Y5YqoLlxuIgorIlxuIgorIuaPkOS6pOWJjeS9oOW/hemhu+mmluWFiOe8k+WtmOiHs+WwkeS4gOS4quaWh+S7ti5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MTgzCittc2dpZCAiIgorIlBsZWFzZSBzdXBwbHkgYSBjb21taXQgbWVzc2FnZS5cbiIKKyJcbiIKKyJBIGdvb2QgY29tbWl0IG1lc3NhZ2UgaGFzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OlxuIgorIlxuIgorIi0gRmlyc3QgbGluZTogRGVzY3JpYmUgaW4gb25lIHNlbnRlbmNlIHdoYXQgeW91IGRpZC5cbiIKKyItIFNlY29uZCBsaW5lOiBCbGFua1xuIgorIi0gUmVtYWluaW5nIGxpbmVzOiBEZXNjcmliZSB3aHkgdGhpcyBjaGFuZ2UgaXMgZ29vZC5cbiIKK21zZ3N0ciAiIgorIuivt+aPkOS+m+S4gOadoeaPkOS6pOS/oeaBry5cbiIKKyJcbiIKKyLkuIDmnaHlpb3nmoTmj5DkuqTkv6Hmga/mnInkuIvliJfmoLzlvI86XG4iCisiXG4iCisiLSDnrKzkuIDooYw6IOS4gOWPpeivneamguaLrOS9oOWBmueahOS/ruaUuS5cbiIKKyItIOesrOS6jOihjDog56m66KGMXG4iCisiLSDliankvZnooYw6IOivt+aPj+i/sOS4uuS7gOS5iOS9oOWBmueahOi/meS6m+aUueWKqOaYr+WlveeahC5cbiIKKworIzogbGliL2NvbW1pdC50Y2w6MjA3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAid2FybmluZzogVGNsIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJyVzJy4iCittc2dzdHIgIuitpuWRijogVGNsIOS4jeaUr+aMgee8lueggeaWueW8jyAnJXMnLiIKKworIzogbGliL2NvbW1pdC50Y2w6MjIxCittc2dpZCAiQ2FsbGluZyBwcmUtY29tbWl0IGhvb2suLi4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MjM2Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IHByZS1jb21taXQgaG9vay4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6MjU5Cittc2dpZCAiQ2FsbGluZyBjb21taXQtbXNnIGhvb2suLi4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6Mjc0Cittc2dpZCAiQ29tbWl0IGRlY2xpbmVkIGJ5IGNvbW1pdC1tc2cgaG9vay4iCittc2dzdHIgIiIKKworIzogbGliL2NvbW1pdC50Y2w6Mjg3Cittc2dpZCAiQ29tbWl0dGluZyBjaGFuZ2VzLi4uIgorbXNnc3RyICIiCisKKyM6IGxpYi9jb21taXQudGNsOjMwMworbXNnaWQgIndyaXRlLXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAid3JpdGUtdHJlZSDlpLHotKU6IgorCisjOiBsaWIvY29tbWl0LnRjbDozMDQgbGliL2NvbW1pdC50Y2w6MzQ4IGxpYi9jb21taXQudGNsOjM2OAorIywgZnV6enkKK21zZ2lkICJDb21taXQgZmFpbGVkLiIKK21zZ3N0ciAi5YWL6ZqG5aSx6LSlLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzIxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGFwcGVhcnMgdG8gYmUgY29ycnVwdCIKK21zZ3N0ciAi5o+Q5LqkICVzIOS8vOS5juW3suaNn+WdjyIKKworIzogbGliL2NvbW1pdC50Y2w6MzI2Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgdG8gY29tbWl0LlxuIgorIlxuIgorIk5vIGZpbGVzIHdlcmUgbW9kaWZpZWQgYnkgdGhpcyBjb21taXQgYW5kIGl0IHdhcyBub3QgYSBtZXJnZSBjb21taXQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisi5rKh5pyJ5pS55Yqo5o+Q5LqkLlxuIgorIlxuIgorIuivpeaPkOS6pOayoeacieaUueWKqOS7u+S9leaWh+S7tuS5n+S4jeaYr+S4gOS4quWQiOW5tuaPkOS6pC5cbiIKKyJcbiIKKyLph43mlrDmiavmj4/lsIboh6rliqjlvIDlp4suXG4iCisKKyM6IGxpYi9jb21taXQudGNsOjMzMworbXNnaWQgIk5vIGNoYW5nZXMgdG8gY29tbWl0LiIKK21zZ3N0ciAi5rKh5pyJ5pS55Yqo6KaB5o+Q5LqkLiIKKworIzogbGliL2NvbW1pdC50Y2w6MzQ3Cittc2dpZCAiY29tbWl0LXRyZWUgZmFpbGVkOiIKK21zZ3N0ciAiY29tbWl0LXRyZWUg5aSx6LSlOiIKKworIzogbGliL2NvbW1pdC50Y2w6MzY3Cittc2dpZCAidXBkYXRlLXJlZiBmYWlsZWQ6IgorbXNnc3RyICJ1cGRhdGUtcmVmIOWksei0pToiCisKKyM6IGxpYi9jb21taXQudGNsOjQ1NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgY29tbWl0ICVzOiAlcyIKK21zZ3N0ciAi5Yib5bu65LqGIGNvbW1pdCAlczogJXMiCisKKyM6IGxpYi9jb25zb2xlLnRjbDo1OQorbXNnaWQgIldvcmtpbmcuLi4gcGxlYXNlIHdhaXQuLi4iCittc2dzdHIgIuW3peS9nOS4rS4uLiDor7fnrYnlvoUuLi4iCisKKyM6IGxpYi9jb25zb2xlLnRjbDoxODYKK21zZ2lkICJTdWNjZXNzIgorbXNnc3RyICLmiJDlip8iCisKKyM6IGxpYi9jb25zb2xlLnRjbDoyMDAKK21zZ2lkICJFcnJvcjogQ29tbWFuZCBGYWlsZWQiCittc2dzdHIgIumUmeivrzog5ZG95Luk5aSx6LSlIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQzCittc2dpZCAiTnVtYmVyIG9mIGxvb3NlIG9iamVjdHMiCittc2dzdHIgIuadvuaVo+WvueixoeeahOaVsOmHjyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NAorbXNnaWQgIkRpc2sgc3BhY2UgdXNlZCBieSBsb29zZSBvYmplY3RzIgorbXNnc3RyICLmnb7mlaPlr7nosaHmiYDkvb/nlKjnmoTno4Hnm5jnqbrpl7QiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDUKK21zZ2lkICJOdW1iZXIgb2YgcGFja2VkIG9iamVjdHMiCittc2dzdHIgIuWOi+e8qeWvueixoeaVsOmHjyIKKworIzogbGliL2RhdGFiYXNlLnRjbDo0NgorbXNnaWQgIk51bWJlciBvZiBwYWNrcyIKK21zZ3N0ciAi5Y6L57yp5YyF5pWw6YePIgorCisjOiBsaWIvZGF0YWJhc2UudGNsOjQ3Cittc2dpZCAiRGlzayBzcGFjZSB1c2VkIGJ5IHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLljovnvKnlr7nosaHmiYDkvb/nlKjnmoTno4Hnm5jnqbrpl7QiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDgKK21zZ2lkICJQYWNrZWQgb2JqZWN0cyB3YWl0aW5nIGZvciBwcnVuaW5nIgorbXNnc3RyICLljovnvKnlr7nosaHnrYnlvoXmuIXnkIYiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NDkKK21zZ2lkICJHYXJiYWdlIGZpbGVzIgorbXNnc3RyICLlnoPlnL7mlofku7YiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6NzIKK21zZ2lkICJDb21wcmVzc2luZyB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLljovnvKnlr7nosaHmlbDmja7lupMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6ODMKK21zZ2lkICJWZXJpZnlpbmcgdGhlIG9iamVjdCBkYXRhYmFzZSB3aXRoIGZzY2stb2JqZWN0cyIKK21zZ3N0ciAi5L2/55SoIGZzY2stb2JqZWN0cyDpqozor4Hlr7nosaHmlbDmja7lupMiCisKKyM6IGxpYi9kYXRhYmFzZS50Y2w6MTA4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoaXMgcmVwb3NpdG9yeSBjdXJyZW50bHkgaGFzIGFwcHJveGltYXRlbHkgJWkgbG9vc2Ugb2JqZWN0cy5cbiIKKyJcbiIKKyJUbyBtYWludGFpbiBvcHRpbWFsIHBlcmZvcm1hbmNlIGl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbXByZXNzICIKKyJ0aGUgZGF0YWJhc2Ugd2hlbiBtb3JlIHRoYW4gJWkgbG9vc2Ugb2JqZWN0cyBleGlzdC5cbiIKKyJcbiIKKyJDb21wcmVzcyB0aGUgZGF0YWJhc2Ugbm93PyIKK21zZ3N0ciAiIgorIuivpeeJiOacrOW6k+W9k+WJjee6puaciSAlaSDkuKrmnb7mlaPlr7nosaEuXG4iCisiXG4iCisi5Li66L6+5Yiw6L6D5LyY55qE5oCn6IO977yM5by654OI5bu66K6u5L2g5Zyo5p2+5pWj5a+56LGh5aSa5LqOICVpIOaXtuWOi+e8qeaVsOaNruW6ky5cbiIKKyJcbiIKKyLnjrDlnKjlsLHljovnvKnmlbDmja7lupPkuYg/IgorCisjOiBsaWIvZGF0ZS50Y2w6MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGRhdGUgZnJvbSBHaXQ6ICVzIgorbXNnc3RyICLml6DmlYjnmoTml6XmnJ86ICVzIgorCisjOiBsaWIvZGlmZi50Y2w6NDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiTm8gZGlmZmVyZW5jZXMgZGV0ZWN0ZWQuXG4iCisiXG4iCisiJXMgaGFzIG5vIGNoYW5nZXMuXG4iCisiXG4iCisiVGhlIG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoaXMgZmlsZSB3YXMgdXBkYXRlZCBieSBhbm90aGVyIGFwcGxpY2F0aW9uLCBidXQgIgorInRoZSBjb250ZW50IHdpdGhpbiB0aGUgZmlsZSB3YXMgbm90IGNoYW5nZWQuXG4iCisiXG4iCisiQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gZmluZCBvdGhlciBmaWxlcyB3aGljaCBtYXkgaGF2ZSAiCisidGhlIHNhbWUgc3RhdGUuIgorbXNnc3RyICIiCisi5pyq5qOA5rWL5Yiw5pS55YqoLlxuIgorIlxuIgorIuivpeaWh+S7tueahOS/ruaUueaXpeacn+iiq+WPpuS4gOS4queoi+W6j+aJgOabtOaWsCwg5L2G5YW25YaF5a655bm25rKh5pyJ5Y+Y5YyWLlxuIgorIlxuIgorIuWvueS6juexu+S8vOaDheWGteeahOWFtuS7luaWh+S7tueahOmHjeaWsOaJq+aPj+WwhuiHquWKqOW8gOWniy4iCisKKyM6IGxpYi9kaWZmLnRjbDo4MQorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJMb2FkaW5nIGRpZmYgb2YgJXMuLi4iCittc2dzdHIgIuijhei9vSAlcyDnmoQgZGlmZiAuLi4iCisKKyM6IGxpYi9kaWZmLnRjbDoxMTQgbGliL2RpZmYudGNsOjE4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBkaXNwbGF5ICVzIgorbXNnc3RyICLml6Dms5XmmL7npLogJXMiCisKKyM6IGxpYi9kaWZmLnRjbDoxMTUKK21zZ2lkICJFcnJvciBsb2FkaW5nIGZpbGU6IgorbXNnc3RyICLoo4Xovb3mlofku7blh7rplJk6IgorCisjOiBsaWIvZGlmZi50Y2w6MTIyCittc2dpZCAiR2l0IFJlcG9zaXRvcnkgKHN1YnByb2plY3QpIgorbXNnc3RyICJHaXQg54mI5pys5bqTICjlrZDpobnnm64pIgorCisjOiBsaWIvZGlmZi50Y2w6MTM0Cittc2dpZCAiKiBCaW5hcnkgZmlsZSAobm90IHNob3dpbmcgY29udGVudCkuIgorbXNnc3RyICIqIOS6jOi/m+WItuaWh+S7tiAo5LiN5pi+56S65YaF5a65KS4iCisKKyM6IGxpYi9kaWZmLnRjbDoxODUKK21zZ2lkICJFcnJvciBsb2FkaW5nIGRpZmY6IgorbXNnc3RyICLoo4Xovb0gZGlmZiDplJnor686IgorCisjOiBsaWIvZGlmZi50Y2w6MzAzCittc2dpZCAiRmFpbGVkIHRvIHVuc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIuaXoOazleWwhumAieaLqeeahOS7o+eggeauteS7jue8k+WtmOS4reWIoOmZpC4iCisKKyM6IGxpYi9kaWZmLnRjbDozMTAKK21zZ2lkICJGYWlsZWQgdG8gc3RhZ2Ugc2VsZWN0ZWQgaHVuay4iCittc2dzdHIgIuaXoOazlee8k+WtmOaJgOmAieS7o+eggeautS4iCisKKyM6IGxpYi9lcnJvci50Y2w6MjAgbGliL2Vycm9yLnRjbDoxMTQKK21zZ2lkICJlcnJvciIKK21zZ3N0ciAi6ZSZ6K+vIgorCisjOiBsaWIvZXJyb3IudGNsOjM2Cittc2dpZCAid2FybmluZyIKK21zZ3N0ciAi6K2m5ZGKIgorCisjOiBsaWIvZXJyb3IudGNsOjk0Cittc2dpZCAiWW91IG11c3QgY29ycmVjdCB0aGUgYWJvdmUgZXJyb3JzIGJlZm9yZSBjb21taXR0aW5nLiIKK21zZ3N0ciAi5L2g5b+F6aG75Zyo5o+Q5Lqk5YmN5L+u5q2j5LiK6L+w6ZSZ6K+vLiIKKworIzogbGliL2luZGV4LnRjbDo2Cittc2dpZCAiVW5hYmxlIHRvIHVubG9jayB0aGUgaW5kZXguIgorbXNnc3RyICLml6Dms5Xop6PplIHnvJPlrZggKGluZGV4KSIKKworIzogbGliL2luZGV4LnRjbDoxNQorbXNnaWQgIkluZGV4IEVycm9yIgorbXNnc3RyICLnvJPlrZgoSW5kZXgp6ZSZ6K+vIgorCisjOiBsaWIvaW5kZXgudGNsOjIxCittc2dpZCAiIgorIlVwZGF0aW5nIHRoZSBHaXQgaW5kZXggZmFpbGVkLiAgQSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgdG8gIgorInJlc3luY2hyb25pemUgZ2l0LWd1aS4iCittc2dzdHIgIuabtOaWsCBHaXQg57yT5a2YKEluZGV4KeWksei0pSwg6YeN5paw5omr5o+P5bCG6Ieq5Yqo5byA5aeL5Lul6YeN5paw5ZCM5q2lIGdpdC1ndWkuIgorCisjOiBsaWIvaW5kZXgudGNsOjI3Cittc2dpZCAiQ29udGludWUiCittc2dzdHIgIue7p+e7rSIKKworIzogbGliL2luZGV4LnRjbDozMQorbXNnaWQgIlVubG9jayBJbmRleCIKK21zZ3N0ciAi6Kej6ZSBIEluZGV4IgorCisjOiBsaWIvaW5kZXgudGNsOjI4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlVuc3RhZ2luZyAlcyBmcm9tIGNvbW1pdCIKK21zZ3N0ciAi5LuO5o+Q5Lqk57yT5a2Y5Lit5Yig6ZmkICVzIgorCisjOiBsaWIvaW5kZXgudGNsOjMxMworIywgZnV6enkKK21zZ2lkICJSZWFkeSB0byBjb21taXQuIgorbXNnc3RyICLnvJPlrZjkuLrmj5DkuqQiCisKKyM6IGxpYi9pbmRleC50Y2w6MzI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICLmt7vliqAgJXMiCisKKyM6IGxpYi9pbmRleC50Y2w6MzgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2ZXJ0IGNoYW5nZXMgaW4gZmlsZSAlcz8iCittc2dzdHIgIuaSpOmUgOaWh+S7tiAlcyDkuK3nmoTmlLnliqg/IgorCisjOiBsaWIvaW5kZXgudGNsOjM4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmVydCBjaGFuZ2VzIGluIHRoZXNlICVpIGZpbGVzPyIKK21zZ3N0ciAi5pKk6ZSA6L+Z5LqbICglaeS4qikg5paH5Lu255qE5pS55YqoPyIKKworIzogbGliL2luZGV4LnRjbDozOTEKK21zZ2lkICJBbnkgdW5zdGFnZWQgY2hhbmdlcyB3aWxsIGJlIHBlcm1hbmVudGx5IGxvc3QgYnkgdGhlIHJldmVydC4iCittc2dzdHIgIuS7u+S9leacque8k+WtmOeahOaUueWKqOWwhuWcqOi/measoeaSpOmUgOS4reawuOS5heS4ouWksS4iCisKKyM6IGxpYi9pbmRleC50Y2w6Mzk0Cittc2dpZCAiRG8gTm90aGluZyIKK21zZ3N0ciAi5LiN5YGa5pON5L2cIgorCisjOiBsaWIvbWVyZ2UudGNsOjEzCittc2dpZCAiIgorIkNhbm5vdCBtZXJnZSB3aGlsZSBhbWVuZGluZy5cbiIKKyJcbiIKKyJZb3UgbXVzdCBmaW5pc2ggYW1lbmRpbmcgdGhpcyBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGFueSB0eXBlIG9mIG1lcmdlLlxuIgorbXNnc3RyICIiCisi5L+u5q2j5pe25peg5rOV5YGa5ZCI5bm2LlxuIgorIlxuIgorIuS9oOW/hemhu+WujOaIkOWvueivpeaPkOS6pOeahOS/ruato+aJjeiDvee7p+e7reS7u+S9leexu+Wei+eahOWQiOW5tuaTjeS9nC5cbiIKKworIzogbGliL21lcmdlLnRjbDoyNworbXNnaWQgIiIKKyJMYXN0IHNjYW5uZWQgc3RhdGUgZG9lcyBub3QgbWF0Y2ggcmVwb3NpdG9yeSBzdGF0ZS5cbiIKKyJcbiIKKyJBbm90aGVyIEdpdCBwcm9ncmFtIGhhcyBtb2RpZmllZCB0aGlzIHJlcG9zaXRvcnkgc2luY2UgdGhlIGxhc3Qgc2Nhbi4gIEEgIgorInJlc2NhbiBtdXN0IGJlIHBlcmZvcm1lZCBiZWZvcmUgYSBtZXJnZSBjYW4gYmUgcGVyZm9ybWVkLlxuIgorIlxuIgorIlRoZSByZXNjYW4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN0YXJ0ZWQgbm93LlxuIgorbXNnc3RyICIiCisi5pyA5ZCO5LiA5qyh5omr5o+P55qE54q25oCB5ZKM5b2T5YmN54mI5pys5bqT54q25oCB5LiN56ymLlxuIgorIlxuIgorIuWPpuS4gCBHaXQg56iL5bqP6Ieq5LiK5qyh5omr5o+P5ZCO5L+u5pS55LqG5pys54mI5pys5bqTLiDlnKjkv67mlLnlvZPliY3liIbmlK/kuYvliY3pnIDopoHph43mlrDlgZrkuIDmrKHmiasiCisi5o+PLlxuIgorIlxuIgorIumHjeaWsOaJq+aPj+WwhuiHquWKqOW8gOWniy5cbiIKKworIzogbGliL21lcmdlLnRjbDo0NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjb25mbGljdGVkIG1lcmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaGFzIG1lcmdlIGNvbmZsaWN0cy5cbiIKKyJcbiIKKyJZb3UgbXVzdCByZXNvbHZlIHRoZW0sIHN0YWdlIHRoZSBmaWxlLCBhbmQgY29tbWl0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50ICIKKyJtZXJnZS4gIE9ubHkgdGhlbiBjYW4geW91IGJlZ2luIGFub3RoZXIgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyLkvaDmraPlpITlnKjkuIDkuKrmnInlhrLnqoHnmoTlkIjlubbmk43kvZzkuK0uXG4iCisiXG4iCisi5paH5Lu2ICVzIOacieWQiOW5tuWGsueqgS5cbiIKKyJcbiIKKyLkvaDlv4Xpobvop6PlhrPov5nkupvlhrLnqoEsIOe8k+WtmOivpeaWh+S7tiwg5bm25o+Q5Lqk5p2l5a6M5oiQ5b2T5YmN55qE5ZCI5bm2LuS7heW9k+i/meagt+WQjuaJjeiDveW8gOWni+S4i+S4gCIKKyLkuKrlkIjlubbmk43kvZwuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6NTQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhbmdlLlxuIgorIlxuIgorIkZpbGUgJXMgaXMgbW9kaWZpZWQuXG4iCisiXG4iCisiWW91IHNob3VsZCBjb21wbGV0ZSB0aGUgY3VycmVudCBjb21taXQgYmVmb3JlIHN0YXJ0aW5nIGEgbWVyZ2UuICBEb2luZyBzbyAiCisid2lsbCBoZWxwIHlvdSBhYm9ydCBhIGZhaWxlZCBtZXJnZSwgc2hvdWxkIHRoZSBuZWVkIGFyaXNlLlxuIgorbXNnc3RyICIiCisi5L2g5q2j5aSE5Zyo5LiA5Liq5pS55Yqo5b2T5LitLlxuIgorIlxuIgorIuaWh+S7tiAlcyDlt7Looqvkv67mlLkuXG4iCisiXG4iCisi5L2g5b+F6aG75a6M5oiQ5b2T5YmN55qE5o+Q5Lqk5ZCO5omN6IO95byA5aeL5ZCI5bm2LiDlpoLmnpzpnIDopoEsIOi/meS5iOWBmuWwhuacieWKqeS6juS4reatouS4gOasoeWksei0peeahOWQiCIKKyLlubYuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgb2YgJXMiCittc2dzdHIgIiIKKworIzogbGliL21lcmdlLnRjbDoxMTkKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiTWVyZ2luZyAlcyBhbmQgJXMuLi4iCittc2dzdHIgIuWQiOW5tiAlcyDlkowgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMwCittc2dpZCAiTWVyZ2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4iCittc2dzdHIgIuWQiOW5tuaIkOWKn+WujOaIkC4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MTMyCittc2dpZCAiTWVyZ2UgZmFpbGVkLiAgQ29uZmxpY3QgcmVzb2x1dGlvbiBpcyByZXF1aXJlZC4iCittc2dzdHIgIuWQiOW5tuWksei0pS4g6ZyA6KaB6Kej5Yaz5Yay56qBLiIKKworIzogbGliL21lcmdlLnRjbDoxNTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJNZXJnZSBJbnRvICVzIgorbXNnc3RyICLlkIjlubbliLAgJXMiCisKKyM6IGxpYi9tZXJnZS50Y2w6MTc2Cittc2dpZCAiUmV2aXNpb24gVG8gTWVyZ2UiCittc2dzdHIgIuimgeWQiOW5tueahOeJiOacrCIKKworIzogbGliL21lcmdlLnRjbDoyMTEKK21zZ2lkICIiCisiQ2Fubm90IGFib3J0IHdoaWxlIGFtZW5kaW5nLlxuIgorIlxuIgorIllvdSBtdXN0IGZpbmlzaCBhbWVuZGluZyB0aGlzIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuS/ruato+aTjeS9nOS4reaXoOazleS4reatoi5cbiIKKyJcbiIKKyLkvaDlv4XpobvlhYjlrozmiJDmnKzmrKHkv67mraPmk43kvZwuXG4iCisKKyM6IGxpYi9tZXJnZS50Y2w6MjIxCittc2dpZCAiIgorIkFib3J0IG1lcmdlP1xuIgorIlxuIgorIkFib3J0aW5nIHRoZSBjdXJyZW50IG1lcmdlIHdpbGwgY2F1c2UgKkFMTCogdW5jb21taXR0ZWQgY2hhbmdlcyB0byBiZSBsb3N0LlxuIgorIlxuIgorIkNvbnRpbnVlIHdpdGggYWJvcnRpbmcgdGhlIGN1cnJlbnQgbWVyZ2U/IgorbXNnc3RyICIiCisi5Lit5q2i5ZCI5bm2P1xuIgorIlxuIgorIuS4reatouW9k+WJjeeahOWQiOW5tuaTjeS9nOWwhuWvvOiHtCAq5omA5pyJKiDlsJrmnKrmj5DkuqTnmoTmlLnliqjkuKLlpLEuXG4iCisiXG4iCisi5piv5ZCm6KaB57un57ut5Lit5q2i5b2T5YmN55qE5ZCI5bm25pON5L2cPyIKKworIzogbGliL21lcmdlLnRjbDoyMjcKK21zZ2lkICIiCisiUmVzZXQgY2hhbmdlcz9cbiIKKyJcbiIKKyJSZXNldHRpbmcgdGhlIGNoYW5nZXMgd2lsbCBjYXVzZSAqQUxMKiB1bmNvbW1pdHRlZCBjaGFuZ2VzIHRvIGJlIGxvc3QuXG4iCisiXG4iCisiQ29udGludWUgd2l0aCByZXNldHRpbmcgdGhlIGN1cnJlbnQgY2hhbmdlcz8iCittc2dzdHIgIiIKKyLmmK/lkKblpI3kvY3lvZPliY3mlLnliqg/XG4iCisiXG4iCisi5aSN5L2N5b2T5YmN55qE5pS55Yqo5bCG5a+86Ie0ICrmiYDmnIkqIOacquaPkOS6pOeahOaUueWKqOS4ouWksS5cbiIKKyJcbiIKKyLmmK/lkKbopoHnu6fnu63lpI3kvY3lvZPliY3nmoTmlLnliqg/IgorCisjOiBsaWIvbWVyZ2UudGNsOjIzOAorbXNnaWQgIkFib3J0aW5nIgorbXNnc3RyICLkuK3mraIiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjM4CisjLCBmdXp6eQorbXNnaWQgImZpbGVzIHJlc2V0IgorbXNnc3RyICLmlofku7YiCisKKyM6IGxpYi9tZXJnZS50Y2w6MjY1Cittc2dpZCAiQWJvcnQgZmFpbGVkLiIKK21zZ3N0ciAi5Lit5q2i5aSx6LSlIgorCisjOiBsaWIvbWVyZ2UudGNsOjI2NworbXNnaWQgIkFib3J0IGNvbXBsZXRlZC4gIFJlYWR5LiIKK21zZ3N0ciAi5Lit5q2i5a6M5oiQLiDlsLHnu6ouIgorCisjOiBsaWIvb3B0aW9uLnRjbDo5NQorbXNnaWQgIlJlc3RvcmUgRGVmYXVsdHMiCittc2dzdHIgIuaBouWkjem7mOiupOWAvCIKKworIzogbGliL29wdGlvbi50Y2w6OTkKK21zZ2lkICJTYXZlIgorbXNnc3RyICLkv53lrZgiCisKKyM6IGxpYi9vcHRpb24udGNsOjEwOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIiVzIFJlcG9zaXRvcnkiCittc2dzdHIgIiVzIOeJiOacrOW6kyIKKworIzogbGliL29wdGlvbi50Y2w6MTEwCittc2dpZCAiR2xvYmFsIChBbGwgUmVwb3NpdG9yaWVzKSIKK21zZ3N0ciAi5YWo5bGAICjmiYDmnInniYjmnKzlupMpIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTYKK21zZ2lkICJVc2VyIE5hbWUiCittc2dzdHIgIueUqOaIt+WQjSIKKworIzogbGliL29wdGlvbi50Y2w6MTE3Cittc2dpZCAiRW1haWwgQWRkcmVzcyIKK21zZ3N0ciAiRW1haWwg5Zyw5Z2AIgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMTkKK21zZ2lkICJTdW1tYXJpemUgTWVyZ2UgQ29tbWl0cyIKK21zZ3N0ciAi5qaC6L+w5ZCI5bm25o+Q5LqkOiIKKworIzogbGliL29wdGlvbi50Y2w6MTIwCittc2dpZCAiTWVyZ2UgVmVyYm9zaXR5IgorbXNnc3RyICLlkIjlubblhpfkvZnluqYiCisKKyM6IGxpYi9vcHRpb24udGNsOjEyMQorbXNnaWQgIlNob3cgRGlmZnN0YXQgQWZ0ZXIgTWVyZ2UiCittc2dzdHIgIuWcqOWQiOW5tuWQjuaYvuekuiBEaWZmc3RhdCIKKworIzogbGliL29wdGlvbi50Y2w6MTIzCittc2dpZCAiVHJ1c3QgRmlsZSBNb2RpZmljYXRpb24gVGltZXN0YW1wcyIKK21zZ3N0ciAi55u45L+h5paH5Lu255qE5pS55Yqo5pe26Ze0IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjQKK21zZ2lkICJQcnVuZSBUcmFja2luZyBCcmFuY2hlcyBEdXJpbmcgRmV0Y2giCittc2dzdHIgIuiOt+WPluaXtua4hemZpOi3n+i4quWIhuaUryIKKworIzogbGliL29wdGlvbi50Y2w6MTI1Cittc2dpZCAiTWF0Y2ggVHJhY2tpbmcgQnJhbmNoZXMiCittc2dzdHIgIuWMuemFjei3n+i4quWIhuaUryIKKworIzogbGliL29wdGlvbi50Y2w6MTI2Cittc2dpZCAiTnVtYmVyIG9mIERpZmYgQ29udGV4dCBMaW5lcyIKK21zZ3N0ciAiRGlmZiDkuIrkuIvmlofooYzmlbAiCisKKyM6IGxpYi9vcHRpb24udGNsOjEyNworIywgZnV6enkKK21zZ2lkICJDb21taXQgTWVzc2FnZSBUZXh0IFdpZHRoIgorbXNnc3RyICLmj5DkuqTmj4/ov7A6IgorCisjOiBsaWIvb3B0aW9uLnRjbDoxMjgKK21zZ2lkICJOZXcgQnJhbmNoIE5hbWUgVGVtcGxhdGUiCittc2dzdHIgIuaWsOW7uuWIhuaUr+WRveWQjeaooeadvyIKKworIzogbGliL29wdGlvbi50Y2w6MTkyCittc2dpZCAiU3BlbGxpbmcgRGljdGlvbmFyeToiCittc2dzdHIgIiIKKworIzogbGliL29wdGlvbi50Y2w6MjE2Cittc2dpZCAiQ2hhbmdlIEZvbnQiCittc2dzdHIgIuabtOaUueWtl+S9kyIKKworIzogbGliL29wdGlvbi50Y2w6MjIwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ2hvb3NlICVzIgorbXNnc3RyICLpgInmi6kgJXMiCisKKyM6IGxpYi9vcHRpb24udGNsOjIyNgorbXNnaWQgInB0LiIKK21zZ3N0ciAi56OFIgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNDAKK21zZ2lkICJQcmVmZXJlbmNlcyIKK21zZ3N0ciAi6aaW6YCJ6aG5IgorCisjOiBsaWIvb3B0aW9uLnRjbDoyNzUKK21zZ2lkICJGYWlsZWQgdG8gY29tcGxldGVseSBzYXZlIG9wdGlvbnM6IgorbXNnc3RyICLml6Dms5Xlrozlhajkv53lrZjpgInpobk6IgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MzQKK21zZ2lkICJEZWxldGUgUmVtb3RlIEJyYW5jaCIKK21zZ3N0ciAi5Yig6Zmk6L+c56uv5YiG5pSvIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjQ3Cittc2dpZCAiRnJvbSBSZXBvc2l0b3J5IgorbXNnc3RyICLku47niYjmnKzlupMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6NTAgbGliL3RyYW5zcG9ydC50Y2w6MTIzCittc2dpZCAiUmVtb3RlOiIKK21zZ3N0ciAiUmVtb3RlOiIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDo2NiBsaWIvdHJhbnNwb3J0LnRjbDoxMzgKK21zZ2lkICJBcmJpdHJhcnkgVVJMOiIKK21zZ3N0ciAi5Lu75oSPIFVSTDoiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6ODQKK21zZ2lkICJCcmFuY2hlcyIKK21zZ3N0ciAi5YiG5pSvIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjEwOQorbXNnaWQgIkRlbGV0ZSBPbmx5IElmIgorbXNnc3RyICLliKDpmaTku4XlvZMiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTExCittc2dpZCAiTWVyZ2VkIEludG86IgorbXNnc3RyICLlkIjlubbliLAiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTE5Cittc2dpZCAiQWx3YXlzIChEbyBub3QgcGVyZm9ybSBtZXJnZSBjaGVja3MpIgorbXNnc3RyICLmgLvmmK/lkIjlubYgKOS4jeS9nOWQiOW5tuajgOafpSkiCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTUyCittc2dpZCAiQSBicmFuY2ggaXMgcmVxdWlyZWQgZm9yICdNZXJnZWQgSW50bycuIgorbXNnc3RyICIn5ZCI5bm25YiwJyDpnIDopoHmjIflrprmn5DkuKrliIbmlK8iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MTg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgYnJhbmNoZXMgYXJlIG5vdCBjb21wbGV0ZWx5IG1lcmdlZCBpbnRvICVzOlxuIgorIlxuIgorIiAtICVzIgorbXNnc3RyICIiCisi5LiL5YiX5YiG5pSv5rKh5pyJ6KKr5YWo6YOo5ZCI5bm25YiwICVzIOS4rTpcbiIKKyJcbiIKKyIgLSAlcyIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoxODkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiT25lIG9yIG1vcmUgb2YgdGhlIG1lcmdlIHRlc3RzIGZhaWxlZCBiZWNhdXNlIHlvdSBoYXZlIG5vdCBmZXRjaGVkIHRoZSAiCisibmVjZXNzYXJ5IGNvbW1pdHMuICBUcnkgZmV0Y2hpbmcgZnJvbSAlcyBmaXJzdC4iCittc2dzdHIgIiIKKyLnlLHkuo7msqHmnInojrflj5bliLDlv4XopoHnmoTmj5DkuqTvvIzkuIDkuKrmiJblpJrkuKrlkIjlubbmtYvor5XlpLHotKXjgILor7flsJ3or5Xku44gJXMg5aSE5YWI6I635Y+W44CCIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIwNworbXNnaWQgIlBsZWFzZSBzZWxlY3Qgb25lIG9yIG1vcmUgYnJhbmNoZXMgdG8gZGVsZXRlLiIKK21zZ3N0ciAi6K+36YCJ5oup5p+Q5Liq5oiW5aSa5Liq5YiG5pSv5p2l5Yig6ZmkIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjIxNgorbXNnaWQgIiIKKyJSZWNvdmVyaW5nIGRlbGV0ZWQgYnJhbmNoZXMgaXMgZGlmZmljdWx0LlxuIgorIlxuIgorIkRlbGV0ZSB0aGUgc2VsZWN0ZWQgYnJhbmNoZXM/IgorbXNnc3RyICIiCisi5oGi5aSN6KKr5Yig6Zmk55qE5YiG5pSv6Z2e5bi45Zuw6Zq+LlxuIgorIlxuIgorIuaYr+WQpuimgeWIoOmZpOaJgOmAieWIhuaUrz8iCisKKyM6IGxpYi9yZW1vdGVfYnJhbmNoX2RlbGV0ZS50Y2w6MjI2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRGVsZXRpbmcgYnJhbmNoZXMgZnJvbSAlcyIKK21zZ3N0ciAi5LuOICVzIOS4reWIoOmZpOWIhuaUryIKKworIzogbGliL3JlbW90ZV9icmFuY2hfZGVsZXRlLnRjbDoyODYKK21zZ2lkICJObyByZXBvc2l0b3J5IHNlbGVjdGVkLiIKK21zZ3N0ciAi5rKh5pyJ6YCJ5oup54mI5pys5bqTIgorCisjOiBsaWIvcmVtb3RlX2JyYW5jaF9kZWxldGUudGNsOjI5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNjYW5uaW5nICVzLi4uIgorbXNnc3RyICLmraPlnKjmiavmj48gJXMuLi4iCisKKyM6IGxpYi9yZW1vdGUudGNsOjE2NQorbXNnaWQgIlBydW5lIGZyb20iCittc2dzdHIgIuS7ji4u5riF6ZmkKHBydW5lKSIKKworIzogbGliL3JlbW90ZS50Y2w6MTcwCittc2dpZCAiRmV0Y2ggZnJvbSIKK21zZ3N0ciAi5LuOLi7ojrflj5YoZmV0Y2gpIgorCisjOiBsaWIvcmVtb3RlLnRjbDoyMTMKK21zZ2lkICJQdXNoIHRvIgorbXNnc3RyICLkuIrkvKDliLAocHVzaCkiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MjAgbGliL3Nob3J0Y3V0LnRjbDo2MQorbXNnaWQgIkNhbm5vdCB3cml0ZSBzaG9ydGN1dDoiCittc2dzdHIgIuaXoOazleS/ruaUueW/q+aNt+aWueW8jzoiCisKKyM6IGxpYi9zaG9ydGN1dC50Y2w6MTM2Cittc2dpZCAiQ2Fubm90IHdyaXRlIGljb246IgorbXNnc3RyICLml6Dms5Xkv67mlLnlm77moIc6IgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NTcKK21zZ2lkICJVbnN1cHBvcnRlZCBzcGVsbCBjaGVja2VyIgorbXNnc3RyICIiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2NQorbXNnaWQgIlNwZWxsIGNoZWNraW5nIGlzIHVuYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IGxpYi9zcGVsbGNoZWNrLnRjbDo2OAorbXNnaWQgIkludmFsaWQgc3BlbGwgY2hlY2tpbmcgY29uZmlndXJhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6NzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZlcnRpbmcgZGljdGlvbmFyeSB0byAlcy4iCittc2dzdHIgIiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjczCittc2dpZCAiU3BlbGwgY2hlY2tlciBzaWxlbnRseSBmYWlsZWQgb24gc3RhcnR1cCIKK21zZ3N0ciAiIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6ODAKK21zZ2lkICJVbnJlY29nbml6ZWQgc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6MTgwCittc2dpZCAiTm8gU3VnZ2VzdGlvbnMiCittc2dzdHIgIiIKKworIzogbGliL3NwZWxsY2hlY2sudGNsOjM4MQorbXNnaWQgIlVuZXhwZWN0ZWQgRU9GIGZyb20gc3BlbGwgY2hlY2tlciIKK21zZ3N0ciAiIgorCisjOiBsaWIvc3BlbGxjaGVjay50Y2w6Mzg1Cittc2dpZCAiU3BlbGwgQ2hlY2tlciBGYWlsZWQiCittc2dzdHIgIiIKKworIzogbGliL3N0YXR1c19iYXIudGNsOjgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKK21zZ3N0ciAiJXMgLi4uICUqaSBvZiAlKmkgJXMgKCUzaSUlKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NgorIywgdGNsLWZvcm1hdAorbXNnaWQgImZldGNoICVzIgorbXNnc3RyICLojrflj5YoZmV0Y2gpIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgbmV3IGNoYW5nZXMgZnJvbSAlcyIKK21zZ3N0ciAi5LuOICVzIOWkhOiOt+WPluaWsOeahOaUueWKqCIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJyZW1vdGUgcHJ1bmUgJXMiCittc2dzdHIgIua4hemZpOi/nOerryAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQcnVuaW5nIHRyYWNraW5nIGJyYW5jaGVzIGRlbGV0ZWQgZnJvbSAlcyIKK21zZ3N0ciAi5riF6ZmkIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoyNSBsaWIvdHJhbnNwb3J0LnRjbDo3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgInB1c2ggJXMiCittc2dzdHIgIuS4iuS8oCAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIGNoYW5nZXMgdG8gJXMiCittc2dzdHIgIuS4iuS8oOaUueWKqOWIsCAlcyIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJQdXNoaW5nICVzICVzIHRvICVzIgorbXNnc3RyICLkuIrkvKAgJXMgJXMg5YiwICVzIgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDo4OQorbXNnaWQgIlB1c2ggQnJhbmNoZXMiCittc2dzdHIgIuS4iuS8oOWIhuaUryIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTAzCittc2dpZCAiU291cmNlIEJyYW5jaGVzIgorbXNnc3RyICLmupDnq6/liIbmlK86IgorCisjOiBsaWIvdHJhbnNwb3J0LnRjbDoxMjAKK21zZ2lkICJEZXN0aW5hdGlvbiBSZXBvc2l0b3J5IgorbXNnc3RyICLnm67moIfniYjmnKzlupMiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE1OAorbXNnaWQgIlRyYW5zZmVyIE9wdGlvbnMiCittc2dzdHIgIuS8oOi+k+mAiemhuSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTYwCittc2dpZCAiRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGJyYW5jaCAobWF5IGRpc2NhcmQgY2hhbmdlcykiCittc2dzdHIgIuW8uuWItuimhuebluW3suacieeahOWIhuaUryAo5Y+v6IO95Lya5Lii5aSx5pS55YqoKSIKKworIzogbGliL3RyYW5zcG9ydC50Y2w6MTY0Cittc2dpZCAiVXNlIHRoaW4gcGFjayAoZm9yIHNsb3cgbmV0d29yayBjb25uZWN0aW9ucykiCittc2dzdHIgIuS9v+eUqCB0aGluIHBhY2sgKOmAgueUqOS6juS9jumAn+e9kee7nOi/nuaOpSkiCisKKyM6IGxpYi90cmFuc3BvcnQudGNsOjE2OAorbXNnaWQgIkluY2x1ZGUgdGFncyIKK21zZ3N0ciAi5YyF5ZCr5qCH562+IgpkaWZmIC0tZ2l0IGEvZ2l0LWd1aS93aW5kb3dzL2dpdC1ndWkuc2ggYi9naXQtZ3VpL3dpbmRvd3MvZ2l0LWd1aS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTg0NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWd1aS93aW5kb3dzL2dpdC1ndWkuc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisjIFRjbCBpZ25vcmVzIHRoZSBuZXh0IGxpbmUgLSotIHRjbCAtKi0gXAorZXhlYyB3aXNoICIkMCIgLS0gIiRAIgorCitpZiB7ICRhcmdjID49MiAmJiBbbGluZGV4ICRhcmd2IDBdID09ICItLXdvcmtpbmctZGlyIiB9IHsKKwlzZXQgd29ya2RpciBbbGluZGV4ICRhcmd2IDFdCisJY2QgJHdvcmtkaXIKKwlpZiB7W2xpbmRleCBbZmlsZSBzcGxpdCAkd29ya2Rpcl0gZW5kXSBlcSB7LmdpdH19IHsKKwkJIyBXb3JrYXJvdW5kIGZvciBFeHBsb3JlciByaWdodCBjbGljayAiR2l0IEdVSSBIZXJlIiBvbiAuZ2l0LworCQljZCAuLgorCX0KKwlzZXQgYXJndiBbbHJhbmdlICRhcmd2IDIgZW5kXQorCWluY3IgYXJnYyAtMgorfQorCitzZXQgYmFzZWRpciBbZmlsZSBkaXJuYW1lIFwKKyAgICAgICAgICAgIFtmaWxlIGRpcm5hbWUgXAorICAgICAgICAgICAgIFtmaWxlIGRpcm5hbWUgW2luZm8gc2NyaXB0XV1dXQorc2V0IGJpbmRpciBbZmlsZSBqb2luICRiYXNlZGlyIGJpbl0KK3NldCBiaW5kaXIgIiRiaW5kaXI7W2ZpbGUgam9pbiAkYmFzZWRpciBtaW5ndyBiaW5dIgorcmVnc3ViIC1hbGwgIjsiICRiaW5kaXIgIlxcOyIgYmluZGlyCitzZXQgZW52KFBBVEgpICIkYmluZGlyOyRlbnYoUEFUSCkiCit1bnNldCBiaW5kaXIKKworc291cmNlIFtmaWxlIGpvaW4gW2ZpbGUgZGlybmFtZSBbaW5mbyBzY3JpcHRdXSBnaXQtZ3VpLnRjbF0KZGlmZiAtLWdpdCBhL2dpdC1pbnN0YXdlYi5zaCBiL2dpdC1pbnN0YXdlYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40N2UzOGYzCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LWluc3Rhd2ViLnNoCkBAIC0wLDAgKzEsNjYwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEVyaWMgV29uZworIworCitQRVJMPSdAQFBFUkxAQCcKK09QVElPTlNfS0VFUERBU0hEQVNIPQorT1BUSU9OU19TVFVDS0xPTkc9CitPUFRJT05TX1NQRUM9IlwKK2dpdCBpbnN0YXdlYiBbb3B0aW9uc10gKC0tc3RhcnQgfCAtLXN0b3AgfCAtLXJlc3RhcnQpCistLQorbCxsb2NhbCAgICAgICAgb25seSBiaW5kIG9uIDEyNy4wLjAuMQorcCxwb3J0PSAgICAgICAgdGhlIHBvcnQgdG8gYmluZCB0bworZCxodHRwZD0gICAgICAgdGhlIGNvbW1hbmQgdG8gbGF1bmNoCitiLGJyb3dzZXI9ICAgICB0aGUgYnJvd3NlciB0byBsYXVuY2gKK20sbW9kdWxlLXBhdGg9IHRoZSBtb2R1bGUgcGF0aCAob25seSBuZWVkZWQgZm9yIGFwYWNoZTIpCisgQWN0aW9uCitzdG9wICAgICAgICAgICBzdG9wIHRoZSB3ZWIgc2VydmVyCitzdGFydCAgICAgICAgICBzdGFydCB0aGUgd2ViIHNlcnZlcgorcmVzdGFydCAgICAgICAgcmVzdGFydCB0aGUgd2ViIHNlcnZlcgorIgorCitTVUJESVJFQ1RPUllfT0s9WWVzCisuIGdpdC1zaC1zZXR1cAorCitmcWdpdGRpcj0iJEdJVF9ESVIiCitsb2NhbD0iJChnaXQgY29uZmlnIC0tYm9vbCAtLWdldCBpbnN0YXdlYi5sb2NhbCkiCitodHRwZD0iJChnaXQgY29uZmlnIC0tZ2V0IGluc3Rhd2ViLmh0dHBkKSIKK3Jvb3Q9IiQoZ2l0IGNvbmZpZyAtLWdldCBpbnN0YXdlYi5naXR3ZWJkaXIpIgorcG9ydD0kKGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIucG9ydCkKK21vZHVsZV9wYXRoPSIkKGdpdCBjb25maWcgLS1nZXQgaW5zdGF3ZWIubW9kdWxlcGF0aCkiCithY3Rpb249ImJyb3dzZSIKKworY29uZj0iJEdJVF9ESVIvZ2l0d2ViL2h0dHBkLmNvbmYiCisKKyMgRGVmYXVsdHM6CisKKyMgaWYgaW5zdGFsbGVkLCBpdCBkb2Vzbid0IG5lZWQgZnVydGhlciBjb25maWd1cmF0aW9uIChtb2R1bGVfcGF0aCkKK3Rlc3QgLXogIiRodHRwZCIgJiYgaHR0cGQ9J2xpZ2h0dHBkIC1mJworCisjIERlZmF1bHQgaXMgQEBHSVRXRUJESVJAQAordGVzdCAteiAiJHJvb3QiICYmIHJvb3Q9J0BAR0lUV0VCRElSQEAnCisKKyMgYW55IHVudGFrZW4gbG9jYWwgcG9ydCB3aWxsIGRvLi4uCit0ZXN0IC16ICIkcG9ydCIgJiYgcG9ydD0xMjM0CisKK3Jlc29sdmVfZnVsbF9odHRwZCAoKSB7CisJY2FzZSAiJGh0dHBkIiBpbgorCSphcGFjaGUyKnwqbGlnaHR0cGQqfCpodHRwZCopCisJCSMgeWVzLCAqaHR0cGQqIGNvdmVycyAqbGlnaHR0cGQqIGFib3ZlLCBidXQgaXQgaXMgdGhlcmUgZm9yIGNsYXJpdHkKKwkJIyBlbnN1cmUgdGhhdCB0aGUgYXBhY2hlMi9saWdodHRwZCBjb21tYW5kIGVuZHMgd2l0aCAiLWYiCisJCWlmICEgZWNobyAiJGh0dHBkIiB8IHNhbmVfZ3JlcCAtLSAnLWYgKiQnID4vZGV2L251bGwgMj4mMQorCQl0aGVuCisJCQlodHRwZD0iJGh0dHBkIC1mIgorCQlmaQorCQk7OworCSpwbGFja3VwKikKKwkJIyBzZXJ2ZXIgaXMgc3RhcnRlZCBieSBydW5uaW5nIHZpYSBnZW5lcmF0ZWQgZ2l0d2ViLnBzZ2kgaW4gJGZxZ2l0ZGlyL2dpdHdlYgorCQlmdWxsX2h0dHBkPSIkZnFnaXRkaXIvZ2l0d2ViL2dpdHdlYi5wc2dpIgorCQlodHRwZF9vbmx5PSIke2h0dHBkJSUgKn0iICMgY3V0IG9uIGZpcnN0IHNwYWNlCisJCXJldHVybgorCQk7OworCSp3ZWJyaWNrKikKKwkJIyBzZXJ2ZXIgaXMgc3RhcnRlZCBieSBydW5uaW5nIHZpYSBnZW5lcmF0ZWQgd2Vicmljay5yYiBpbgorCQkjICRmcWdpdGRpci9naXR3ZWIKKwkJZnVsbF9odHRwZD0iJGZxZ2l0ZGlyL2dpdHdlYi93ZWJyaWNrLnJiIgorCQlodHRwZF9vbmx5PSIke2h0dHBkJSUgKn0iICMgY3V0IG9uIGZpcnN0IHNwYWNlCisJCXJldHVybgorCQk7OworCWVzYWMKKworCWh0dHBkX29ubHk9IiQoZWNobyAkaHR0cGQgfCBjdXQgLWYxIC1kJyAnKSIKKwlpZiBjYXNlICIkaHR0cGRfb25seSIgaW4gLyopIDogOzsgKikgd2hpY2ggJGh0dHBkX29ubHkgPi9kZXYvbnVsbCAyPiYxOzsgZXNhYworCXRoZW4KKwkJZnVsbF9odHRwZD0kaHR0cGQKKwllbHNlCisJCSMgbWFueSBodHRwZHMgYXJlIGluc3RhbGxlZCBpbiAvdXNyL3NiaW4gb3IgL3Vzci9sb2NhbC9zYmluCisJCSMgdGhlc2UgZGF5cyBhbmQgdGhvc2UgYXJlIG5vdCBpbiBtb3N0IHVzZXJzICRQQVRIcworCQkjIGluIGFkZGl0aW9uLCB3ZSBtYXkgaGF2ZSBnZW5lcmF0ZWQgYSBzZXJ2ZXIgc2NyaXB0CisJCSMgaW4gJGZxZ2l0ZGlyL2dpdHdlYi4KKwkJZm9yIGkgaW4gL3Vzci9sb2NhbC9zYmluIC91c3Ivc2JpbiAiJHJvb3QiICIkZnFnaXRkaXIvZ2l0d2ViIgorCQlkbworCQkJaWYgdGVzdCAteCAiJGkvJGh0dHBkX29ubHkiCisJCQl0aGVuCisJCQkJZnVsbF9odHRwZD0kaS8kaHR0cGQKKwkJCQlyZXR1cm4KKwkJCWZpCisJCWRvbmUKKworCQllY2hvID4mMiAiJGh0dHBkX29ubHkgbm90IGZvdW5kLiBJbnN0YWxsICRodHRwZF9vbmx5IG9yIHVzZSIgXAorCQkgICAgICItLWh0dHBkIHRvIHNwZWNpZnkgYW5vdGhlciBodHRwZCBkYWVtb24uIgorCQlleGl0IDEKKwlmaQorfQorCitzdGFydF9odHRwZCAoKSB7CisJaWYgdGVzdCAtZiAiJGZxZ2l0ZGlyL3BpZCI7IHRoZW4KKwkJc2F5ICJJbnN0YW5jZSBhbHJlYWR5IHJ1bm5pbmcuIFJlc3RhcnRpbmcuLi4iCisJCXN0b3BfaHR0cGQKKwlmaQorCisJIyBoZXJlICRodHRwZCBzaG91bGQgaGF2ZSBhIG1lYW5pbmdmdWwgdmFsdWUKKwlyZXNvbHZlX2Z1bGxfaHR0cGQKKwlta2RpciAtcCAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seSIKKwljb25mPSIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5LmNvbmYiCisKKwkjIGdlbmVyYXRlIGNvcnJlY3QgY29uZmlnIGZpbGUgaWYgaXQgZG9lc24ndCBleGlzdAorCXRlc3QgLWYgIiRjb25mIiB8fCBjb25maWd1cmVfaHR0cGQKKwl0ZXN0IC1mICIkZnFnaXRkaXIvZ2l0d2ViL2dpdHdlYl9jb25maWcucGVybCIgfHwgZ2l0d2ViX2NvbmYKKworCSMgZG9uJ3QgcXVvdGUgJGZ1bGxfaHR0cGQsIHRoZXJlIGNhbiBiZSBhcmd1bWVudHMgdG8gaXQgKC1mKQorCWNhc2UgIiRodHRwZCIgaW4KKwkqbW9uZ29vc2UqfCpwbGFja3VwKikKKwkJI1RoZXNlIHNlcnZlcnMgZG9uJ3QgaGF2ZSBhIGRhZW1vbiBtb2RlIHNvIHdlJ2xsIGhhdmUgdG8gZm9yayBpdAorCQkkZnVsbF9odHRwZCAiJGNvbmYiICYKKwkJI1NhdmUgdGhlIHBpZCBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSAod2UnbGwgcHJpbnQgaXQgbGF0ZXIpCisJCXBpZD0kIQorCisJCWlmIHRlc3QgJD8gIT0gMDsgdGhlbgorCQkJZWNobyAiQ291bGQgbm90IGV4ZWN1dGUgaHR0cCBkYWVtb24gJGh0dHBkLiIKKwkJCWV4aXQgMQorCQlmaQorCisJCWNhdCA+ICIkZnFnaXRkaXIvcGlkIiA8PEVPRgorJHBpZAorRU9GCisJCTs7CisJKikKKwkJJGZ1bGxfaHR0cGQgIiRjb25mIgorCQlpZiB0ZXN0ICQ/ICE9IDA7IHRoZW4KKwkJCWVjaG8gIkNvdWxkIG5vdCBleGVjdXRlIGh0dHAgZGFlbW9uICRodHRwZC4iCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwllc2FjCit9CisKK3N0b3BfaHR0cGQgKCkgeworCXRlc3QgLWYgIiRmcWdpdGRpci9waWQiICYmIGtpbGwgJChjYXQgIiRmcWdpdGRpci9waWQiKQorCXJtIC1mICIkZnFnaXRkaXIvcGlkIgorfQorCitodHRwZF9pc19yZWFkeSAoKSB7CisJIiRQRVJMIiAtTUlPOjpTb2NrZXQ6OklORVQgLWUgIgorbG9jYWwgXCR8ID0gMTsgIyB0dXJuIG9uIGF1dG9mbHVzaAorZXhpdCBpZiAoSU86OlNvY2tldDo6SU5FVC0+bmV3KCcxMjcuMC4wLjE6JHBvcnQnKSk7CitwcmludCAnV2FpdGluZyBmb3IgXCckaHR0cGRcJyB0byBzdGFydCAuLic7CitkbyB7CisJcHJpbnQgJy4nOworCXNsZWVwKDEpOworfSB1bnRpbCAoSU86OlNvY2tldDo6SU5FVC0+bmV3KCcxMjcuMC4wLjE6JHBvcnQnKSk7CitwcmludCBxcSEgKGRvbmUpXG4hOworIgorfQorCit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLS1zdG9wfHN0b3ApCisJCWFjdGlvbj0ic3RvcCIKKwkJOzsKKwktLXN0YXJ0fHN0YXJ0KQorCQlhY3Rpb249InN0YXJ0IgorCQk7OworCS0tcmVzdGFydHxyZXN0YXJ0KQorCQlhY3Rpb249InJlc3RhcnQiCisJCTs7CisJLWx8LS1sb2NhbCkKKwkJbG9jYWw9dHJ1ZQorCQk7OworCS1kfC0taHR0cGQpCisJCXNoaWZ0CisJCWh0dHBkPSIkMSIKKwkJOzsKKwktYnwtLWJyb3dzZXIpCisJCXNoaWZ0CisJCWJyb3dzZXI9IiQxIgorCQk7OworCS1wfC0tcG9ydCkKKwkJc2hpZnQKKwkJcG9ydD0iJDEiCisJCTs7CisJLW18LS1tb2R1bGUtcGF0aCkKKwkJc2hpZnQKKwkJbW9kdWxlX3BhdGg9IiQxIgorCQk7OworCS0tKQorCQk7OworCSopCisJCXVzYWdlCisJCTs7CisJZXNhYworCXNoaWZ0Citkb25lCisKK21rZGlyIC1wICIkR0lUX0RJUi9naXR3ZWIvdG1wIgorR0lUX0VYRUNfUEFUSD0iJChnaXQgLS1leGVjLXBhdGgpIgorR0lUX0RJUj0iJGZxZ2l0ZGlyIgorR0lUV0VCX0NPTkZJRz0iJGZxZ2l0ZGlyL2dpdHdlYi9naXR3ZWJfY29uZmlnLnBlcmwiCitleHBvcnQgR0lUX0VYRUNfUEFUSCBHSVRfRElSIEdJVFdFQl9DT05GSUcKKword2Vicmlja19jb25mICgpIHsKKwkjIHdlYnJpY2sgc2VlbXMgdG8gaGF2ZSBubyB3YXkgb2YgcGFzc2luZyBhcmJpdHJhcnkgZW52aXJvbm1lbnQKKwkjIHZhcmlhYmxlcyB0byB0aGUgdW5kZXJseWluZyBDR0kgZXhlY3V0YWJsZSwgc28gd2Ugd3JhcCB0aGUKKwkjIGFjdHVhbCBnaXR3ZWIuY2dpIHVzaW5nIGEgc2hlbGwgc2NyaXB0IHRvIGZvcmNlIGl0CisgIHdyYXBwZXI9IiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkL3dyYXBwZXIuc2giCisJY2F0ID4gIiR3cmFwcGVyIiA8PEVPRgorIyFAU0hFTExfUEFUSEAKKyMgd2UgdXNlIHRoaXMgc2hlbGwgc2NyaXB0IHdyYXBwZXIgYXJvdW5kIHRoZSByZWFsIGdpdHdlYi5jZ2kgc2luY2UKKyMgdGhlcmUgYXBwZWFycyB0byBiZSBubyBvdGhlciB3YXkgdG8gcGFzcyBhcmJpdHJhcnkgZW52aXJvbm1lbnQgdmFyaWFibGVzCisjIGludG8gdGhlIENHSSBwcm9jZXNzCitHSVRfRVhFQ19QQVRIPSRHSVRfRVhFQ19QQVRIIEdJVF9ESVI9JEdJVF9ESVIgR0lUV0VCX0NPTkZJRz0kR0lUV0VCX0NPTkZJRworZXhwb3J0IEdJVF9FWEVDX1BBVEggR0lUX0RJUiBHSVRXRUJfQ09ORklHCitleGVjICRyb290L2dpdHdlYi5jZ2kKK0VPRgorCWNobW9kICt4ICIkd3JhcHBlciIKKworCSMgVGhpcyBhc3N1bWVzIF9ydWJ5XyBpcyBpbiB0aGUgdXNlcidzICRQQVRILiB0aGF0J3MgX29uZV8KKwkjIHBvcnRhYmxlIHdheSB0byBydW4gcnVieSwgd2hpY2ggY291bGQgYmUgaW5zdGFsbGVkIGFueXdoZXJlLCByZWFsbHkuCisJIyBnZW5lcmF0ZSBhIHN0YW5kYWxvbmUgc2VydmVyIHNjcmlwdCBpbiAkZnFnaXRkaXIvZ2l0d2ViLgorCWNhdCA+IiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkLnJiIiA8PEVPRgorIyEvdXNyL2Jpbi9lbnYgcnVieQorcmVxdWlyZSAnd2VicmljaycKK3JlcXVpcmUgJ2xvZ2dlcicKK29wdGlvbnMgPSB7CisgIDpQb3J0ID0+ICRwb3J0LAorICA6RG9jdW1lbnRSb290ID0+ICIkcm9vdCIsCisgIDpMb2dnZXIgPT4gTG9nZ2VyLm5ldygnJGZxZ2l0ZGlyL2dpdHdlYi9lcnJvci5sb2cnKSwKKyAgOkFjY2Vzc0xvZyA9PiBbCisgICAgWyBMb2dnZXIubmV3KCckZnFnaXRkaXIvZ2l0d2ViL2FjY2Vzcy5sb2cnKSwKKyAgICAgIFdFQnJpY2s6OkFjY2Vzc0xvZzo6Q09NQklORURfTE9HX0ZPUk1BVCBdCisgIF0sCisgIDpEaXJlY3RvcnlJbmRleCA9PiBbImdpdHdlYi5jZ2kiXSwKKyAgOkNHSUludGVycHJldGVyID0+ICIkd3JhcHBlciIsCisgIDpTdGFydENhbGxiYWNrID0+IGxhbWJkYSBkbworICAgIEZpbGUub3BlbigiJGZxZ2l0ZGlyL3BpZCIsICJ3IikgeyB8ZnwgZi5wdXRzIFByb2Nlc3MucGlkIH0KKyAgZW5kLAorICA6U2VydmVyVHlwZSA9PiBXRUJyaWNrOjpEYWVtb24sCit9CitvcHRpb25zWzpCaW5kQWRkcmVzc10gPSAnMTI3LjAuMC4xJyBpZiAiJGxvY2FsIiA9PSAidHJ1ZSIKK3NlcnZlciA9IFdFQnJpY2s6OkhUVFBTZXJ2ZXIubmV3KG9wdGlvbnMpCitbJ0lOVCcsICdURVJNJ10uZWFjaCBkbyB8c2lnbmFsfAorICB0cmFwKHNpZ25hbCkge3NlcnZlci5zaHV0ZG93bn0KK2VuZAorc2VydmVyLnN0YXJ0CitFT0YKKwljaG1vZCAreCAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGQucmIiCisJIyBjb25maWd1cmF0aW9uIGlzIGVtYmVkZGVkIGluIHNlcnZlciBzY3JpcHQgZmlsZSwgd2Vicmljay5yYgorCXJtIC1mICIkY29uZiIKK30KKworbGlnaHR0cGRfY29uZiAoKSB7CisJY2F0ID4gIiRjb25mIiA8PEVPRgorc2VydmVyLmRvY3VtZW50LXJvb3QgPSAiJHJvb3QiCitzZXJ2ZXIucG9ydCA9ICRwb3J0CitzZXJ2ZXIubW9kdWxlcyA9ICggIm1vZF9zZXRlbnYiLCAibW9kX2NnaSIgKQorc2VydmVyLmluZGV4ZmlsZXMgPSAoICJnaXR3ZWIuY2dpIiApCitzZXJ2ZXIucGlkLWZpbGUgPSAiJGZxZ2l0ZGlyL3BpZCIKK3NlcnZlci5lcnJvcmxvZyA9ICIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5L2Vycm9yLmxvZyIKKworIyB0byBlbmFibGUsIGFkZCAibW9kX2FjY2VzcyIsICJtb2RfYWNjZXNzbG9nIiB0byBzZXJ2ZXIubW9kdWxlcworIyB2YXJpYWJsZSBhYm92ZSBhbmQgdW5jb21tZW50IHRoaXMKKyNhY2Nlc3Nsb2cuZmlsZW5hbWUgPSAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seS9hY2Nlc3MubG9nIgorCitzZXRlbnYuYWRkLWVudmlyb25tZW50ID0gKCAiUEFUSCIgPT4gZW52LlBBVEgsICJHSVRXRUJfQ09ORklHIiA9PiBlbnYuR0lUV0VCX0NPTkZJRyApCisKK2NnaS5hc3NpZ24gPSAoICIuY2dpIiA9PiAiIiApCisKKyMgbWltZXR5cGUgbWFwcGluZworbWltZXR5cGUuYXNzaWduICAgICAgICAgICAgID0gKAorICAiLnBkZiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vcGRmIiwKKyAgIi5zaWciICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmUiLAorICAiLnNwbCIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vZnV0dXJlc3BsYXNoIiwKKyAgIi5jbGFzcyIgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIsCisgICIucHMiICAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0IiwKKyAgIi50b3JyZW50IiAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYml0dG9ycmVudCIsCisgICIuZHZpIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWR2aSIsCisgICIuZ3oiICAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWd6aXAiLAorICAiLnBhYyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1ucy1wcm94eS1hdXRvY29uZmlnIiwKKyAgIi5zd2YiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIiwKKyAgIi50YXIuZ3oiICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGd6IiwKKyAgIi50Z3oiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGd6IiwKKyAgIi50YXIiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGFyIiwKKyAgIi56aXAiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3ppcCIsCisgICIubXAzIiAgICAgICAgICA9PiAgICAgICJhdWRpby9tcGVnIiwKKyAgIi5tM3UiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXBlZ3VybCIsCisgICIud21hIiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1zLXdtYSIsCisgICIud2F4IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1zLXdheCIsCisgICIub2dnIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9vZ2ciLAorICAiLndhdiIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC13YXYiLAorICAiLmdpZiIgICAgICAgICAgPT4gICAgICAiaW1hZ2UvZ2lmIiwKKyAgIi5qcGciICAgICAgICAgID0+ICAgICAgImltYWdlL2pwZWciLAorICAiLmpwZWciICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisgICIucG5nIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9wbmciLAorICAiLnhibSIgICAgICAgICAgPT4gICAgICAiaW1hZ2UveC14Yml0bWFwIiwKKyAgIi54cG0iICAgICAgICAgID0+ICAgICAgImltYWdlL3gteHBpeG1hcCIsCisgICIueHdkIiAgICAgICAgICA9PiAgICAgICJpbWFnZS94LXh3aW5kb3dkdW1wIiwKKyAgIi5jc3MiICAgICAgICAgID0+ICAgICAgInRleHQvY3NzIiwKKyAgIi5odG1sIiAgICAgICAgID0+ICAgICAgInRleHQvaHRtbCIsCisgICIuaHRtIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2h0bWwiLAorICAiLmpzIiAgICAgICAgICAgPT4gICAgICAidGV4dC9qYXZhc2NyaXB0IiwKKyAgIi5hc2MiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmMiICAgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIuY3BwIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi5sb2ciICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmNvbmYiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisgICIudGV4dCIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKyAgIi50eHQiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorICAiLmR0ZCIgICAgICAgICAgPT4gICAgICAidGV4dC94bWwiLAorICAiLnhtbCIgICAgICAgICAgPT4gICAgICAidGV4dC94bWwiLAorICAiLm1wZWciICAgICAgICAgPT4gICAgICAidmlkZW8vbXBlZyIsCisgICIubXBnIiAgICAgICAgICA9PiAgICAgICJ2aWRlby9tcGVnIiwKKyAgIi5tb3YiICAgICAgICAgID0+ICAgICAgInZpZGVvL3F1aWNrdGltZSIsCisgICIucXQiICAgICAgICAgICA9PiAgICAgICJ2aWRlby9xdWlja3RpbWUiLAorICAiLmF2aSIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tc3ZpZGVvIiwKKyAgIi5hc2YiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtYXNmIiwKKyAgIi5hc3giICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtYXNmIiwKKyAgIi53bXYiICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtd212IiwKKyAgIi5iejIiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtYnppcCIsCisgICIudGJ6IiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiLAorICAiLnRhci5iejIiICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iemlwLWNvbXByZXNzZWQtdGFyIiwKKyAgIiIgICAgICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iCisgKQorRU9GCisJdGVzdCB4IiRsb2NhbCIgPSB4dHJ1ZSAmJiBlY2hvICdzZXJ2ZXIuYmluZCA9ICIxMjcuMC4wLjEiJyA+PiAiJGNvbmYiCit9CisKK2FwYWNoZTJfY29uZiAoKSB7CisJaWYgdGVzdCAteiAiJG1vZHVsZV9wYXRoIgorCXRoZW4KKwkJdGVzdCAtZCAiL3Vzci9saWIvaHR0cGQvbW9kdWxlcyIgJiYKKwkJCW1vZHVsZV9wYXRoPSIvdXNyL2xpYi9odHRwZC9tb2R1bGVzIgorCQl0ZXN0IC1kICIvdXNyL2xpYi9hcGFjaGUyL21vZHVsZXMiICYmCisJCQltb2R1bGVfcGF0aD0iL3Vzci9saWIvYXBhY2hlMi9tb2R1bGVzIgorCWZpCisJYmluZD0KKwl0ZXN0IHgiJGxvY2FsIiA9IHh0cnVlICYmIGJpbmQ9JzEyNy4wLjAuMTonCisJZWNobyAndGV4dC9jc3MgY3NzJyA+ICIkZnFnaXRkaXIvbWltZS50eXBlcyIKKwljYXQgPiAiJGNvbmYiIDw8RU9GCitTZXJ2ZXJOYW1lICJnaXQtaW5zdGF3ZWIiCitTZXJ2ZXJSb290ICIkcm9vdCIKK0RvY3VtZW50Um9vdCAiJHJvb3QiCitFcnJvckxvZyAiJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seS9lcnJvci5sb2ciCitDdXN0b21Mb2cgIiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkvYWNjZXNzLmxvZyIgY29tYmluZWQKK1BpZEZpbGUgIiRmcWdpdGRpci9waWQiCitMaXN0ZW4gJGJpbmQkcG9ydAorRU9GCisKKwlmb3IgbW9kIGluIG1wbV9ldmVudCBtcG1fcHJlZm9yayBtcG1fd29ya2VyCisJZG8KKwkJaWYgdGVzdCAtZSAkbW9kdWxlX3BhdGgvbW9kXyR7bW9kfS5zbworCQl0aGVuCisJCQllY2hvICJMb2FkTW9kdWxlICR7bW9kfV9tb2R1bGUgIiBcCisJCQkgICAgICIkbW9kdWxlX3BhdGgvbW9kXyR7bW9kfS5zbyIgPj4gIiRjb25mIgorCQkJIyBvbmx5IG9uZSBtcG0gbW9kdWxlIHBlcm1pdHRlZAorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJZm9yIG1vZCBpbiBtaW1lIGRpciBlbnYgbG9nX2NvbmZpZyBhdXRoel9jb3JlCisJZG8KKwkJaWYgdGVzdCAtZSAkbW9kdWxlX3BhdGgvbW9kXyR7bW9kfS5zbworCQl0aGVuCisJCQllY2hvICJMb2FkTW9kdWxlICR7bW9kfV9tb2R1bGUgIiBcCisJCQkgICAgICIkbW9kdWxlX3BhdGgvbW9kXyR7bW9kfS5zbyIgPj4gIiRjb25mIgorCQlmaQorCWRvbmUKKwljYXQgPj4gIiRjb25mIiA8PEVPRgorVHlwZXNDb25maWcgIiRmcWdpdGRpci9taW1lLnR5cGVzIgorRGlyZWN0b3J5SW5kZXggZ2l0d2ViLmNnaQorRU9GCisKKwkjIGNoZWNrIHRvIHNlZSBpZiBEZW5uaXMgU3Rvc2JlcmcncyBtb2RfcGVybCBjb21wYXRpYmlsaXR5IHBhdGNoCisJIyAoPDIwMDYwNjIxMTMwNzA4LkdjYmM2ZTVjQGxlb25vdi5zdG9zYmVyZy5uZXQ+KSBoYXMgYmVlbiBhcHBsaWVkCisJaWYgdGVzdCAtZiAiJG1vZHVsZV9wYXRoL21vZF9wZXJsLnNvIiAmJgorCSAgIHNhbmVfZ3JlcCAnTU9EX1BFUkwnICIkcm9vdC9naXR3ZWIuY2dpIiA+L2Rldi9udWxsCisJdGhlbgorCQkjIGZhdm9yIG1vZF9wZXJsIGlmIGF2YWlsYWJsZQorCQljYXQgPj4gIiRjb25mIiA8PEVPRgorTG9hZE1vZHVsZSBwZXJsX21vZHVsZSAkbW9kdWxlX3BhdGgvbW9kX3Blcmwuc28KK1BlcmxQYXNzRW52IEdJVF9ESVIKK1BlcmxQYXNzRW52IEdJVF9FWEVDX1BBVEgKK1BlcmxQYXNzRW52IEdJVFdFQl9DT05GSUcKKzxMb2NhdGlvbiAvZ2l0d2ViLmNnaT4KKwlTZXRIYW5kbGVyIHBlcmwtc2NyaXB0CisJUGVybFJlc3BvbnNlSGFuZGxlciBNb2RQZXJsOjpSZWdpc3RyeQorCVBlcmxPcHRpb25zICtQYXJzZUhlYWRlcnMKKwlPcHRpb25zICtFeGVjQ0dJCis8L0xvY2F0aW9uPgorRU9GCisJZWxzZQorCQkjIHBsYWluLW9sZCBDR0kKKwkJcmVzb2x2ZV9mdWxsX2h0dHBkCisJCWxpc3RfbW9kcz0kKGVjaG8gIiRmdWxsX2h0dHBkIiB8IHNlZCAncy8tZiQvLWwvJykKKwkJJGxpc3RfbW9kcyB8IHNhbmVfZ3JlcCAnbW9kX2NnaVwuYycgPi9kZXYvbnVsbCAyPiYxIHx8IFwKKwkJaWYgdGVzdCAtZiAiJG1vZHVsZV9wYXRoL21vZF9jZ2kuc28iCisJCXRoZW4KKwkJCWVjaG8gIkxvYWRNb2R1bGUgY2dpX21vZHVsZSAkbW9kdWxlX3BhdGgvbW9kX2NnaS5zbyIgPj4gIiRjb25mIgorCQllbHNlCisJCQkkbGlzdF9tb2RzIHwgZ3JlcCAnbW9kX2NnaWRcLmMnID4vZGV2L251bGwgMj4mMSB8fCBcCisJCQlpZiB0ZXN0IC1mICIkbW9kdWxlX3BhdGgvbW9kX2NnaWQuc28iCisJCQl0aGVuCisJCQkJZWNobyAiTG9hZE1vZHVsZSBjZ2lkX21vZHVsZSAkbW9kdWxlX3BhdGgvbW9kX2NnaWQuc28iIFwKKwkJCQkJPj4gIiRjb25mIgorCQkJZWxzZQorCQkJCWVjaG8gIllvdSBoYXZlIG5vIENHSSBzdXBwb3J0ISIKKwkJCQlleGl0IDIKKwkJCWZpCisJCQllY2hvICJTY3JpcHRTb2NrIGxvZ3MvZ2l0d2ViLnNvY2siID4+ICIkY29uZiIKKwkJZmkKKwkJY2F0ID4+ICIkY29uZiIgPDxFT0YKK1Bhc3NFbnYgR0lUX0RJUgorUGFzc0VudiBHSVRfRVhFQ19QQVRICitQYXNzRW52IEdJVFdFQl9DT05GSUcKK0FkZEhhbmRsZXIgY2dpLXNjcmlwdCAuY2dpCis8TG9jYXRpb24gL2dpdHdlYi5jZ2k+CisJT3B0aW9ucyArRXhlY0NHSQorPC9Mb2NhdGlvbj4KK0VPRgorCWZpCit9CisKK21vbmdvb3NlX2NvbmYoKSB7CisJY2F0ID4gIiRjb25mIiA8PEVPRgorIyBNb25nb29zZSB3ZWIgc2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyMgTGluZXMgc3RhcnRpbmcgd2l0aCAnIycgYW5kIGVtcHR5IGxpbmVzIGFyZSBpZ25vcmVkLgorIyBGb3IgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgZXZlcnkgb3B0aW9uLCB2aXNpdAorIyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvbW9uZ29vc2Uvd2lraS9Nb25nb29zZU1hbnVhbAorCityb290CQkkcm9vdAorcG9ydHMJCSRwb3J0CitpbmRleF9maWxlcwlnaXR3ZWIuY2dpCisjc3NsX2NlcnQJJGZxZ2l0ZGlyL2dpdHdlYi9zc2xfY2VydC5wZW0KK2Vycm9yX2xvZwkkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5L2Vycm9yLmxvZworYWNjZXNzX2xvZwkkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5L2FjY2Vzcy5sb2cKKworI2NnaSBzZXR1cAorY2dpX2VudgkJUEFUSD0kUEFUSCxHSVRfRElSPSRHSVRfRElSLEdJVF9FWEVDX1BBVEg9JEdJVF9FWEVDX1BBVEgsR0lUV0VCX0NPTkZJRz0kR0lUV0VCX0NPTkZJRworY2dpX2ludGVycAkkUEVSTAorY2dpX2V4dAkJY2dpLHBsCisKKyMgbWltZXR5cGUgbWFwcGluZworbWltZV90eXBlcwkuZ3o9YXBwbGljYXRpb24veC1nemlwLC50YXIuZ3o9YXBwbGljYXRpb24veC10Z3osLnRnej1hcHBsaWNhdGlvbi94LXRneiwudGFyPWFwcGxpY2F0aW9uL3gtdGFyLC56aXA9YXBwbGljYXRpb24vemlwLC5naWY9aW1hZ2UvZ2lmLC5qcGc9aW1hZ2UvanBlZywuanBlZz1pbWFnZS9qcGVnLC5wbmc9aW1hZ2UvcG5nLC5jc3M9dGV4dC9jc3MsLmh0bWw9dGV4dC9odG1sLC5odG09dGV4dC9odG1sLC5qcz10ZXh0L2phdmFzY3JpcHQsLmM9dGV4dC9wbGFpbiwuY3BwPXRleHQvcGxhaW4sLmxvZz10ZXh0L3BsYWluLC5jb25mPXRleHQvcGxhaW4sLnRleHQ9dGV4dC9wbGFpbiwudHh0PXRleHQvcGxhaW4sLmR0ZD10ZXh0L3htbCwuYnoyPWFwcGxpY2F0aW9uL3gtYnppcCwudGJ6PWFwcGxpY2F0aW9uL3gtYnppcC1jb21wcmVzc2VkLXRhciwudGFyLmJ6Mj1hcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIKK0VPRgorfQorCitwbGFja3VwX2NvbmYgKCkgeworCSMgZ2VuZXJhdGUgYSBzdGFuZGFsb25lICdwbGFja3VwJyBzZXJ2ZXIgc2NyaXB0IGluICRmcWdpdGRpci9naXR3ZWIKKwkjIHdpdGggZW1iZWRkZWQgY29uZmlndXJhdGlvbjsgaXQgZG9lcyBub3QgdXNlICIkY29uZiIgZmlsZQorCWNhdCA+ICIkZnFnaXRkaXIvZ2l0d2ViL2dpdHdlYi5wc2dpIiA8PEVPRgorIyEkUEVSTAorCisjIGdpdHdlYiAtIHNpbXBsZSB3ZWIgaW50ZXJmYWNlIHRvIHRyYWNrIGNoYW5nZXMgaW4gZ2l0IHJlcG9zaXRvcmllcworIyAgICAgICAgICBQU0dJIHdyYXBwZXIgYW5kIHNlcnZlciBzdGFydGVyIChzZWUgaHR0cDovL3BsYWNrcGVybC5vcmcpCisKK3VzZSBzdHJpY3Q7CisKK3VzZSBJTzo6SGFuZGxlOwordXNlIFBsYWNrOjpNSU1FOwordXNlIFBsYWNrOjpCdWlsZGVyOwordXNlIFBsYWNrOjpBcHA6OldyYXBDR0k7Cit1c2UgQ0dJOjpFbXVsYXRlOjpQU0dJIDAuMDc7ICMgbWluaW11bSB2ZXJzaW9uIHJlcXVpcmVkIHRvIHdvcmsgd2l0aCBnaXR3ZWIKKworIyBtaW1ldHlwZSBtYXBwaW5nIChmcm9tIGxpZ2h0dHBkX2NvbmYpCitQbGFjazo6TUlNRS0+YWRkX3R5cGUoCisJIi5wZGYiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3BkZiIsCisJIi5zaWciICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmUiLAorCSIuc3BsIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9mdXR1cmVzcGxhc2giLAorCSIuY2xhc3MiICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iLAorCSIucHMiICAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi9wb3N0c2NyaXB0IiwKKwkiLnRvcnJlbnQiICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1iaXR0b3JyZW50IiwKKwkiLmR2aSIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC1kdmkiLAorCSIuZ3oiICAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWd6aXAiLAorCSIucGFjIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LW5zLXByb3h5LWF1dG9jb25maWciLAorCSIuc3dmIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCIsCisJIi50YXIuZ3oiICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3gtdGd6IiwKKwkiLnRneiIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24veC10Z3oiLAorCSIudGFyIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LXRhciIsCisJIi56aXAiICAgICAgICAgID0+ICAgICAgImFwcGxpY2F0aW9uL3ppcCIsCisJIi5tcDMiICAgICAgICAgID0+ICAgICAgImF1ZGlvL21wZWciLAorCSIubTN1IiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1wZWd1cmwiLAorCSIud21hIiAgICAgICAgICA9PiAgICAgICJhdWRpby94LW1zLXdtYSIsCisJIi53YXgiICAgICAgICAgID0+ICAgICAgImF1ZGlvL3gtbXMtd2F4IiwKKwkiLm9nZyIgICAgICAgICAgPT4gICAgICAiYXBwbGljYXRpb24vb2dnIiwKKwkiLndhdiIgICAgICAgICAgPT4gICAgICAiYXVkaW8veC13YXYiLAorCSIuZ2lmIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9naWYiLAorCSIuanBnIiAgICAgICAgICA9PiAgICAgICJpbWFnZS9qcGVnIiwKKwkiLmpwZWciICAgICAgICAgPT4gICAgICAiaW1hZ2UvanBlZyIsCisJIi5wbmciICAgICAgICAgID0+ICAgICAgImltYWdlL3BuZyIsCisJIi54Ym0iICAgICAgICAgID0+ICAgICAgImltYWdlL3gteGJpdG1hcCIsCisJIi54cG0iICAgICAgICAgID0+ICAgICAgImltYWdlL3gteHBpeG1hcCIsCisJIi54d2QiICAgICAgICAgID0+ICAgICAgImltYWdlL3gteHdpbmRvd2R1bXAiLAorCSIuY3NzIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L2NzcyIsCisJIi5odG1sIiAgICAgICAgID0+ICAgICAgInRleHQvaHRtbCIsCisJIi5odG0iICAgICAgICAgID0+ICAgICAgInRleHQvaHRtbCIsCisJIi5qcyIgICAgICAgICAgID0+ICAgICAgInRleHQvamF2YXNjcmlwdCIsCisJIi5hc2MiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorCSIuYyIgICAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKwkiLmNwcCIgICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisJIi5sb2ciICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorCSIuY29uZiIgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIiwKKwkiLnRleHQiICAgICAgICAgPT4gICAgICAidGV4dC9wbGFpbiIsCisJIi50eHQiICAgICAgICAgID0+ICAgICAgInRleHQvcGxhaW4iLAorCSIuZHRkIiAgICAgICAgICA9PiAgICAgICJ0ZXh0L3htbCIsCisJIi54bWwiICAgICAgICAgID0+ICAgICAgInRleHQveG1sIiwKKwkiLm1wZWciICAgICAgICAgPT4gICAgICAidmlkZW8vbXBlZyIsCisJIi5tcGciICAgICAgICAgID0+ICAgICAgInZpZGVvL21wZWciLAorCSIubW92IiAgICAgICAgICA9PiAgICAgICJ2aWRlby9xdWlja3RpbWUiLAorCSIucXQiICAgICAgICAgICA9PiAgICAgICJ2aWRlby9xdWlja3RpbWUiLAorCSIuYXZpIiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zdmlkZW8iLAorCSIuYXNmIiAgICAgICAgICA9PiAgICAgICJ2aWRlby94LW1zLWFzZiIsCisJIi5hc3giICAgICAgICAgID0+ICAgICAgInZpZGVvL3gtbXMtYXNmIiwKKwkiLndtdiIgICAgICAgICAgPT4gICAgICAidmlkZW8veC1tcy13bXYiLAorCSIuYnoyIiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAiLAorCSIudGJ6IiAgICAgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiLAorCSIudGFyLmJ6MiIgICAgICA9PiAgICAgICJhcHBsaWNhdGlvbi94LWJ6aXAtY29tcHJlc3NlZC10YXIiLAorCSIiICAgICAgICAgICAgICA9PiAgICAgICJ0ZXh0L3BsYWluIgorKTsKKworbXkgXCRhcHAgPSBidWlsZGVyIHsKKwkjIHRvIGJlIGFibGUgdG8gb3ZlcnJpZGUgXCRTSUd7X19XQVJOX199IHRvIGxvZyBidWlsZCB0aW1lIHdhcm5pbmdzCisJdXNlIENHSTo6Q2FycDsgIyBpdCBzZXRzIFwkU0lHe19fV0FSTl9ffSBpdHNlbGYKKworCW15IFwkbG9nZGlyID0gIiRmcWdpdGRpci9naXR3ZWIvJGh0dHBkX29ubHkiOworCW9wZW4gbXkgXCRhY2Nlc3NfbG9nX2ZoLCAnPj4nLCAiXCRsb2dkaXIvYWNjZXNzLmxvZyIKKwkJb3IgZGllICJDb3VsZG4ndCBvcGVuIGFjY2VzcyBsb2cgJ1wkbG9nZGlyL2FjY2Vzcy5sb2cnOiBcJCEiOworCW9wZW4gbXkgXCRlcnJvcl9sb2dfZmgsICAnPj4nLCAiXCRsb2dkaXIvZXJyb3IubG9nIgorCQlvciBkaWUgIkNvdWxkbid0IG9wZW4gZXJyb3IgbG9nICdcJGxvZ2Rpci9lcnJvci5sb2cnOiBcJCEiOworCisJXCRhY2Nlc3NfbG9nX2ZoLT5hdXRvZmx1c2goMSk7CisJXCRlcnJvcl9sb2dfZmgtPmF1dG9mbHVzaCgxKTsKKworCSMgcmVkaXJlY3QgYnVpbGQgdGltZSB3YXJuaW5ncyB0byBlcnJvci5sb2cKKwlcJFNJR3snX19XQVJOX18nfSA9IHN1YiB7CisJCW15IFwkbXNnID0gc2hpZnQ7CisJCSMgdGltZXN0YW1wIHdhcm5pbmcgbGlrZSBpbiBDR0k6OkNhcnA6Ondhcm4KKwkJbXkgXCRzdGFtcCA9IENHSTo6Q2FycDo6c3RhbXAoKTsKKwkJXCRtc2cgPX4gcy9eL1wkc3RhbXAvZ207CisJCXByaW50IFwkZXJyb3JfbG9nX2ZoIFwkbXNnOworCX07CisKKwkjIHdyaXRlIGVycm9ycyB0byBlcnJvci5sb2csIGFjY2VzcyB0byBhY2Nlc3MubG9nCisJZW5hYmxlICdBY2Nlc3NMb2cnLAorCQlmb3JtYXQgPT4gImNvbWJpbmVkIiwKKwkJbG9nZ2VyID0+IHN1YiB7IHByaW50IFwkYWNjZXNzX2xvZ19maCBAXzsgfTsKKwllbmFibGUgc3ViIHsKKwkJbXkgXCRhcHAgPSBzaGlmdDsKKwkJc3ViIHsKKwkJCW15IFwkZW52ID0gc2hpZnQ7CisJCQlcJGVudi0+eydwc2dpLmVycm9ycyd9ID0gXCRlcnJvcl9sb2dfZmg7CisJCQlcJGFwcC0+KFwkZW52KTsKKwkJfQorCX07CisJIyBnaXR3ZWIgY3VycmVudGx5IGRvZXNuJ3Qgd29yayB3aXRoICRTSUd7Q0hMRH0gc2V0IHRvICdJR05PUkUnLAorCSMgYmVjYXVzZSBpdCB1c2VzICdjbG9zZSAkZmQgb3IgZGllLi4uJyBvbiBwaXBlZCBmaWxlaGFuZGxlICRmaAorCSMgKHdoaWNoIGNhdXNlcyB0aGUgcGFyZW50IHByb2Nlc3MgdG8gd2FpdCBmb3IgY2hpbGQgdG8gZmluaXNoKS4KKwllbmFibGVfaWYgeyBcJFNJR3snQ0hMRCd9IGVxICdJR05PUkUnIH0gc3ViIHsKKwkJbXkgXCRhcHAgPSBzaGlmdDsKKwkJc3ViIHsKKwkJCW15IFwkZW52ID0gc2hpZnQ7CisJCQlsb2NhbCBcJFNJR3snQ0hMRCd9ID0gJ0RFRkFVTFQnOworCQkJbG9jYWwgXCRTSUd7J0NMRCd9ICA9ICdERUZBVUxUJzsKKwkJCVwkYXBwLT4oXCRlbnYpOworCQl9CisJfTsKKwkjIHNlcnZlIHN0YXRpYyBmaWxlcywgaS5lLiBzdHlsZXNoZWV0LCBpbWFnZXMsIHNjcmlwdAorCWVuYWJsZSAnU3RhdGljJywKKwkJcGF0aCA9PiBzdWIgeyBtIVwuKGpzfGNzc3xwbmcpXCQhICYmIHMhXi9naXR3ZWIvISEgfSwKKwkJcm9vdCA9PiAiJHJvb3QvIiwKKwkJZW5jb2RpbmcgPT4gJ3V0Zi04JzsgIyBlbmNvZGluZyBmb3IgJ3RleHQvcGxhaW4nIGZpbGVzCisJIyBjb252ZXJ0IENHSSBhcHBsaWNhdGlvbiB0byBQU0dJIGFwcAorCVBsYWNrOjpBcHA6OldyYXBDR0ktPm5ldyhzY3JpcHQgPT4gIiRyb290L2dpdHdlYi5jZ2kiKS0+dG9fYXBwOworfTsKKworIyBtYWtlIGl0IHJ1bm5hYmxlIGFzIHN0YW5kYWxvbmUgYXBwLAorIyBsaWtlIGl0IHdvdWxkIGJlIHJ1biB2aWEgJ3BsYWNrdXAnIHV0aWxpdHkKK2lmIChjYWxsZXIpIHsKKwlyZXR1cm4gXCRhcHA7Cit9IGVsc2UgeworCXJlcXVpcmUgUGxhY2s6OlJ1bm5lcjsKKworCW15IFwkcnVubmVyID0gUGxhY2s6OlJ1bm5lci0+bmV3KCk7CisJXCRydW5uZXItPnBhcnNlX29wdGlvbnMocXcoLS1lbnYgZGVwbG95bWVudCAtLXBvcnQgJHBvcnQpLAorCQkJCSIkbG9jYWwiID8gcXcoLS1ob3N0IDEyNy4wLjAuMSkgOiAoKSk7CisJXCRydW5uZXItPnJ1bihcJGFwcCk7Cit9CitfX0VORF9fCitFT0YKKworCWNobW9kIGEreCAiJGZxZ2l0ZGlyL2dpdHdlYi9naXR3ZWIucHNnaSIKKwkjIGNvbmZpZ3VyYXRpb24gaXMgZW1iZWRkZWQgaW4gc2VydmVyIHNjcmlwdCBmaWxlLCBnaXR3ZWIucHNnaQorCXJtIC1mICIkY29uZiIKK30KKworZ2l0d2ViX2NvbmYoKSB7CisJY2F0ID4gIiRmcWdpdGRpci9naXR3ZWIvZ2l0d2ViX2NvbmZpZy5wZXJsIiA8PEVPRgorIyFAQFBFUkxAQAorb3VyIFwkcHJvamVjdHJvb3QgPSAiJChkaXJuYW1lICIkZnFnaXRkaXIiKSI7CitvdXIgXCRnaXRfdGVtcCA9ICIkZnFnaXRkaXIvZ2l0d2ViL3RtcCI7CitvdXIgXCRwcm9qZWN0c19saXN0ID0gXCRwcm9qZWN0cm9vdDsKKworXCRmZWF0dXJleydyZW1vdGVfaGVhZHMnfXsnZGVmYXVsdCd9ID0gWzFdOworRU9GCit9CisKK2NvbmZpZ3VyZV9odHRwZCgpIHsKKwljYXNlICIkaHR0cGQiIGluCisJKmxpZ2h0dHBkKikKKwkJbGlnaHR0cGRfY29uZgorCQk7OworCSphcGFjaGUyKnwqaHR0cGQqKQorCQlhcGFjaGUyX2NvbmYKKwkJOzsKKwl3ZWJyaWNrKQorCQl3ZWJyaWNrX2NvbmYKKwkJOzsKKwkqbW9uZ29vc2UqKQorCQltb25nb29zZV9jb25mCisJCTs7CisJKnBsYWNrdXAqKQorCQlwbGFja3VwX2NvbmYKKwkJOzsKKwkqKQorCQllY2hvICJVbmtub3duIGh0dHBkIHNwZWNpZmllZDogJGh0dHBkIgorCQlleGl0IDEKKwkJOzsKKwllc2FjCit9CisKK2Nhc2UgIiRhY3Rpb24iIGluCitzdG9wKQorCXN0b3BfaHR0cGQKKwlleGl0IDAKKwk7Oworc3RhcnQpCisJc3RhcnRfaHR0cGQKKwlleGl0IDAKKwk7OworcmVzdGFydCkKKwlzdG9wX2h0dHBkCisJc3RhcnRfaHR0cGQKKwlleGl0IDAKKwk7OworZXNhYworCitnaXR3ZWJfY29uZgorCityZXNvbHZlX2Z1bGxfaHR0cGQKK21rZGlyIC1wICIkZnFnaXRkaXIvZ2l0d2ViLyRodHRwZF9vbmx5IgorY29uZj0iJGZxZ2l0ZGlyL2dpdHdlYi8kaHR0cGRfb25seS5jb25mIgorCitjb25maWd1cmVfaHR0cGQKKworc3RhcnRfaHR0cGQKK3VybD1odHRwOi8vMTI3LjAuMC4xOiRwb3J0CisKK2lmIHRlc3QgLW4gIiRicm93c2VyIjsgdGhlbgorCWh0dHBkX2lzX3JlYWR5ICYmIGdpdCB3ZWItLWJyb3dzZSAtYiAiJGJyb3dzZXIiICR1cmwgfHwgZWNobyAkdXJsCitlbHNlCisJaHR0cGRfaXNfcmVhZHkgJiYgZ2l0IHdlYi0tYnJvd3NlIC1jICJpbnN0YXdlYi5icm93c2VyIiAkdXJsIHx8IGVjaG8gJHVybAorZmkKZGlmZiAtLWdpdCBhL2dpdC1tZXJnZS1vY3RvcHVzLnNoIGIvZ2l0LW1lcmdlLW9jdG9wdXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODY0M2Y3NAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1tZXJnZS1vY3RvcHVzLnNoCkBAIC0wLDAgKzEsMTA5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisjIFJlc29sdmUgdHdvIG9yIG1vcmUgdHJlZXMuCisjCisKK0xGPScKKycKKworZGllICgpIHsKKyAgICBlY2hvID4mMiAiJCoiCisgICAgZXhpdCAxCit9CisKKyMgVGhlIGZpcnN0IHBhcmFtZXRlcnMgdXAgdG8gLS0gYXJlIG1lcmdlIGJhc2VzOyB0aGUgcmVzdCBhcmUgaGVhZHMuCitiYXNlcz0gaGVhZD0gcmVtb3Rlcz0gc2VwX3NlZW49Citmb3IgYXJnCitkbworCWNhc2UgIiwkc2VwX3NlZW4sJGhlYWQsJGFyZywiIGluCisJKiwtLSwpCisJCXNlcF9zZWVuPXllcworCQk7OworCSx5ZXMsLCopCisJCWhlYWQ9JGFyZworCQk7OworCSx5ZXMsKikKKwkJcmVtb3Rlcz0iJHJlbW90ZXMkYXJnICIKKwkJOzsKKwkqKQorCQliYXNlcz0iJGJhc2VzJGFyZyAiCisJCTs7CisJZXNhYworZG9uZQorCisjIFJlamVjdCBpZiB0aGlzIGlzIG5vdCBhbiBPY3RvcHVzIC0tIHJlc29sdmUgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4KK2Nhc2UgIiRyZW1vdGVzIiBpbgorPyonICc/KikKKwk7OworKikKKwlleGl0IDIgOzsKK2VzYWMKKworIyBNUkMgaXMgdGhlIGN1cnJlbnQgIm1lcmdlIHJlZmVyZW5jZSBjb21taXQiCisjIE1SVCBpcyB0aGUgY3VycmVudCAibWVyZ2UgcmVzdWx0IHRyZWUiCisKK01SQz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGhlYWQpCitNUlQ9JChnaXQgd3JpdGUtdHJlZSkKK05PTl9GRl9NRVJHRT0wCitPQ1RPUFVTX0ZBSUxVUkU9MAorZm9yIFNIQTEgaW4gJHJlbW90ZXMKK2RvCisJY2FzZSAiJE9DVE9QVVNfRkFJTFVSRSIgaW4KKwkxKQorCQkjIFdlIGFsbG93IG9ubHkgbGFzdCBvbmUgdG8gaGF2ZSBhIGhhbmQtcmVzb2x2YWJsZQorCQkjIGNvbmZsaWN0cy4gIExhc3Qgcm91bmQgZmFpbGVkIGFuZCB3ZSBzdGlsbCBoYWQKKwkJIyBhIGhlYWQgdG8gbWVyZ2UuCisJCWVjaG8gIkF1dG9tYXRlZCBtZXJnZSBkaWQgbm90IHdvcmsuIgorCQllY2hvICJTaG91bGQgbm90IGJlIGRvaW5nIGFuIE9jdG9wdXMuIgorCQlleGl0IDIKKwllc2FjCisKKwlldmFsIHByZXR0eV9uYW1lPVwke0dJVEhFQURfJFNIQTE6LSRTSEExfQorCWlmIHRlc3QgIiRTSEExIiA9ICIkcHJldHR5X25hbWUiCisJdGhlbgorCQlTSEExX1VQPSIkKGVjaG8gIiRTSEExIiB8IHRyIGEteiBBLVopIgorCQlldmFsIHByZXR0eV9uYW1lPVwke0dJVEhFQURfJFNIQTFfVVA6LSRwcmV0dHlfbmFtZX0KKwlmaQorCWNvbW1vbj0kKGdpdCBtZXJnZS1iYXNlIC0tYWxsICRTSEExICRNUkMpIHx8CisJCWRpZSAiVW5hYmxlIHRvIGZpbmQgY29tbW9uIGNvbW1pdCB3aXRoICRwcmV0dHlfbmFtZSIKKworCWNhc2UgIiRMRiRjb21tb24kTEYiIGluCisJKiIkTEYkU0hBMSRMRiIqKQorCQllY2hvICJBbHJlYWR5IHVwLXRvLWRhdGUgd2l0aCAkcHJldHR5X25hbWUiCisJCWNvbnRpbnVlCisJCTs7CisJZXNhYworCisJaWYgdGVzdCAiJGNvbW1vbiwkTk9OX0ZGX01FUkdFIiA9ICIkTVJDLDAiCisJdGhlbgorCQkjIFRoZSBmaXJzdCBoZWFkIGJlaW5nIG1lcmdlZCB3YXMgYSBmYXN0LWZvcndhcmQuCisJCSMgQWR2YW5jZSBNUkMgdG8gdGhlIGhlYWQgYmVpbmcgbWVyZ2VkLCBhbmQgdXNlIHRoYXQKKwkJIyB0cmVlIGFzIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0IG9mIHRoZSBtZXJnZS4KKwkJIyBXZSBzdGlsbCBuZWVkIHRvIGNvdW50IHRoaXMgYXMgcGFydCBvZiB0aGUgcGFyZW50IHNldC4KKworCQllY2hvICJGYXN0LWZvcndhcmRpbmcgdG86ICRwcmV0dHlfbmFtZSIKKwkJZ2l0IHJlYWQtdHJlZSAtdSAtbSAkaGVhZCAkU0hBMSB8fCBleGl0CisJCU1SQz0kU0hBMSBNUlQ9JChnaXQgd3JpdGUtdHJlZSkKKwkJY29udGludWUKKwlmaQorCisJTk9OX0ZGX01FUkdFPTEKKworCWVjaG8gIlRyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCAkcHJldHR5X25hbWUiCisJZ2l0IHJlYWQtdHJlZSAtdSAtbSAtLWFnZ3Jlc3NpdmUgICRjb21tb24gJE1SVCAkU0hBMSB8fCBleGl0IDIKKwluZXh0PSQoZ2l0IHdyaXRlLXRyZWUgMj4vZGV2L251bGwpCisJaWYgdGVzdCAkPyAtbmUgMAorCXRoZW4KKwkJZWNobyAiU2ltcGxlIG1lcmdlIGRpZCBub3Qgd29yaywgdHJ5aW5nIGF1dG9tYXRpYyBtZXJnZS4iCisJCWdpdC1tZXJnZS1pbmRleCAtbyBnaXQtbWVyZ2Utb25lLWZpbGUgLWEgfHwKKwkJT0NUT1BVU19GQUlMVVJFPTEKKwkJbmV4dD0kKGdpdCB3cml0ZS10cmVlIDI+L2Rldi9udWxsKQorCWZpCisKKwlNUkM9IiRNUkMgJFNIQTEiCisJTVJUPSRuZXh0Citkb25lCisKK2V4aXQgIiRPQ1RPUFVTX0ZBSUxVUkUiCmRpZmYgLS1naXQgYS9naXQtbWVyZ2Utb25lLWZpbGUuc2ggYi9naXQtbWVyZ2Utb25lLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDdkZmViOAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1tZXJnZS1vbmUtZmlsZS5zaApAQCAtMCwwICsxLDE2MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyMKKyMgVGhpcyBpcyB0aGUgZ2l0IHBlci1maWxlIG1lcmdlIHNjcmlwdCwgY2FsbGVkIHdpdGgKKyMKKyMgICAkMSAtIG9yaWdpbmFsIGZpbGUgU0hBMSAob3IgZW1wdHkpCisjICAgJDIgLSBmaWxlIGluIGJyYW5jaDEgU0hBMSAob3IgZW1wdHkpCisjICAgJDMgLSBmaWxlIGluIGJyYW5jaDIgU0hBMSAob3IgZW1wdHkpCisjICAgJDQgLSBwYXRobmFtZSBpbiByZXBvc2l0b3J5CisjICAgJDUgLSBvcmlnaW5hbCBmaWxlIG1vZGUgKG9yIGVtcHR5KQorIyAgICQ2IC0gZmlsZSBpbiBicmFuY2gxIG1vZGUgKG9yIGVtcHR5KQorIyAgICQ3IC0gZmlsZSBpbiBicmFuY2gyIG1vZGUgKG9yIGVtcHR5KQorIworIyBIYW5kbGUgc29tZSB0cml2aWFsIGNhc2VzLi4gVGhlIF9yZWFsbHlfIHRyaXZpYWwgY2FzZXMgaGF2ZQorIyBiZWVuIGhhbmRsZWQgYWxyZWFkeSBieSBnaXQgcmVhZC10cmVlLCBidXQgdGhhdCBvbmUgZG9lc24ndAorIyBkbyBhbnkgbWVyZ2VzIHRoYXQgbWlnaHQgY2hhbmdlIHRoZSB0cmVlIGxheW91dC4KKworVVNBR0U9JzxvcmlnIGJsb2I+IDxvdXIgYmxvYj4gPHRoZWlyIGJsb2I+IDxwYXRoPicKK1VTQUdFPSIkVVNBR0UgPG9yaWcgbW9kZT4gPG91ciBtb2RlPiA8dGhlaXIgbW9kZT4iCitMT05HX1VTQUdFPSJ1c2FnZTogZ2l0IG1lcmdlLW9uZS1maWxlICRVU0FHRQorCitCbG9iIGlkcyBhbmQgbW9kZXMgc2hvdWxkIGJlIGVtcHR5IGZvciBtaXNzaW5nIGZpbGVzLiIKKworU1VCRElSRUNUT1JZX09LPVllcworLiBnaXQtc2gtc2V0dXAKK2NkX3RvX3RvcGxldmVsCityZXF1aXJlX3dvcmtfdHJlZQorCitpZiB0ZXN0ICQjICE9IDcKK3RoZW4KKwllY2hvICIkTE9OR19VU0FHRSIKKwlleGl0IDEKK2ZpCisKK2Nhc2UgIiR7MTotLn0kezI6LS59JHszOi0ufSIgaW4KKyMKKyMgRGVsZXRlZCBpbiBib3RoIG9yIGRlbGV0ZWQgaW4gb25lIGFuZCB1bmNoYW5nZWQgaW4gdGhlIG90aGVyCisjCisiJDEuLiIgfCAiJDEuJDEiIHwgIiQxJDEuIikKKwlpZiB0ZXN0IC1uICIkMiIKKwl0aGVuCisJCWVjaG8gIlJlbW92aW5nICQ0IgorCWVsc2UKKwkJIyByZWFkLXRyZWUgY2hlY2tlZCB0aGF0IGluZGV4IG1hdGNoZXMgSEVBRCBhbHJlYWR5LAorCQkjIHNvIHdlIGtub3cgd2UgZG8gbm90IGhhdmUgdGhpcyBwYXRoIHRyYWNrZWQuCisJCSMgdGhlcmUgbWF5IGJlIGFuIHVucmVsYXRlZCB3b3JraW5nIHRyZWUgZmlsZSBoZXJlLAorCQkjIHdoaWNoIHdlIHNob3VsZCBqdXN0IGxlYXZlIHVubW9sZXN0ZWQuICBNYWtlIHN1cmUKKwkJIyB3ZSBkbyBub3QgaGF2ZSBpdCBpbiB0aGUgaW5kZXgsIHRob3VnaC4KKwkJZXhlYyBnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tICIkNCIKKwlmaQorCWlmIHRlc3QgLWYgIiQ0IgorCXRoZW4KKwkJcm0gLWYgLS0gIiQ0IiAmJgorCQlybWRpciAtcCAiJChleHByICJ6JDQiIDogJ3pcKC4qXCkvJykiIDI+L2Rldi9udWxsIHx8IDoKKwlmaSAmJgorCQlleGVjIGdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS0gIiQ0IgorCTs7CisKKyMKKyMgQWRkZWQgaW4gb25lLgorIworIi4kMi4iKQorCSMgdGhlIG90aGVyIHNpZGUgZGlkIG5vdCBhZGQgYW5kIHdlIGFkZGVkIHNvIHRoZXJlIGlzIG5vdGhpbmcKKwkjIHRvIGJlIGRvbmUsIGV4Y2VwdCBtYWtpbmcgdGhlIHBhdGggbWVyZ2VkLgorCWV4ZWMgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAiJDYiICIkMiIgIiQ0IgorCTs7CisiLi4kMyIpCisJZWNobyAiQWRkaW5nICQ0IgorCWlmIHRlc3QgLWYgIiQ0IgorCXRoZW4KKwkJZWNobyAiRVJST1I6IHVudHJhY2tlZCAkNCBpcyBvdmVyd3JpdHRlbiBieSB0aGUgbWVyZ2UuIiA+JjIKKwkJZXhpdCAxCisJZmkKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvICIkNyIgIiQzIiAiJDQiICYmCisJCWV4ZWMgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC0tICIkNCIKKwk7OworCisjCisjIEFkZGVkIGluIGJvdGgsIGlkZW50aWNhbGx5IChjaGVjayBmb3Igc2FtZSBwZXJtaXNzaW9ucykuCisjCisiLiQzJDIiKQorCWlmIHRlc3QgIiQ2IiAhPSAiJDciCisJdGhlbgorCQllY2hvICJFUlJPUjogRmlsZSAkNCBhZGRlZCBpZGVudGljYWxseSBpbiBib3RoIGJyYW5jaGVzLCIgPiYyCisJCWVjaG8gIkVSUk9SOiBidXQgcGVybWlzc2lvbnMgY29uZmxpY3QgJDYtPiQ3LiIgPiYyCisJCWV4aXQgMQorCWZpCisJZWNobyAiQWRkaW5nICQ0IgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gIiQ2IiAiJDIiICIkNCIgJiYKKwkJZXhlYyBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLS0gIiQ0IgorCTs7CisKKyMKKyMgTW9kaWZpZWQgaW4gYm90aCwgYnV0IGRpZmZlcmVudGx5LgorIworIiQxJDIkMyIgfCAiLiQyJDMiKQorCisJY2FzZSAiLCQ2LCQ3LCIgaW4KKwkqLDEyMDAwMCwqKQorCQllY2hvICJFUlJPUjogJDQ6IE5vdCBtZXJnaW5nIHN5bWJvbGljIGxpbmsgY2hhbmdlcy4iID4mMgorCQlleGl0IDEKKwkJOzsKKwkqLDE2MDAwMCwqKQorCQllY2hvICJFUlJPUjogJDQ6IE5vdCBtZXJnaW5nIGNvbmZsaWN0aW5nIHN1Ym1vZHVsZSBjaGFuZ2VzLiIgPiYyCisJCWV4aXQgMQorCQk7OworCWVzYWMKKworCXNyYzE9JChnaXQtdW5wYWNrLWZpbGUgJDIpCisJc3JjMj0kKGdpdC11bnBhY2stZmlsZSAkMykKKwljYXNlICIkMSIgaW4KKwknJykKKwkJZWNobyAiQWRkZWQgJDQgaW4gYm90aCwgYnV0IGRpZmZlcmVudGx5LiIKKwkJb3JpZz0kKGdpdC11bnBhY2stZmlsZSAkMikKKwkJY3JlYXRlX3ZpcnR1YWxfYmFzZSAiJG9yaWciICIkc3JjMiIKKwkJOzsKKwkqKQorCQllY2hvICJBdXRvLW1lcmdpbmcgJDQiCisJCW9yaWc9JChnaXQtdW5wYWNrLWZpbGUgJDEpCisJCTs7CisJZXNhYworCisJZ2l0IG1lcmdlLWZpbGUgIiRzcmMxIiAiJG9yaWciICIkc3JjMiIKKwlyZXQ9JD8KKwltc2c9CisJaWYgdGVzdCAkcmV0ICE9IDAgfHwgdGVzdCAteiAiJDEiCisJdGhlbgorCQltc2c9J2NvbnRlbnQgY29uZmxpY3QnCisJCXJldD0xCisJZmkKKworCSMgQ3JlYXRlIHRoZSB3b3JraW5nIHRyZWUgZmlsZSwgdXNpbmcgIm91ciB0cmVlIiB2ZXJzaW9uIGZyb20gdGhlCisJIyBpbmRleCwgYW5kIHRoZW4gc3RvcmUgdGhlIHJlc3VsdCBvZiB0aGUgbWVyZ2UuCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tc3RhZ2U9MiAtLSAiJDQiICYmIGNhdCAiJHNyYzEiID4iJDQiIHx8IGV4aXQgMQorCXJtIC1mIC0tICIkb3JpZyIgIiRzcmMxIiAiJHNyYzIiCisKKwlpZiB0ZXN0ICIkNiIgIT0gIiQ3IgorCXRoZW4KKwkJaWYgdGVzdCAtbiAiJG1zZyIKKwkJdGhlbgorCQkJbXNnPSIkbXNnLCAiCisJCWZpCisJCW1zZz0iJHttc2d9cGVybWlzc2lvbnMgY29uZmxpY3Q6ICQ1LT4kNiwkNyIKKwkJcmV0PTEKKwlmaQorCisJaWYgdGVzdCAkcmV0ICE9IDAKKwl0aGVuCisJCWVjaG8gIkVSUk9SOiAkbXNnIGluICQ0IiA+JjIKKwkJZXhpdCAxCisJZmkKKwlleGVjIGdpdCB1cGRhdGUtaW5kZXggLS0gIiQ0IgorCTs7CisKKyopCisJZWNobyAiRVJST1I6ICQ0OiBOb3QgaGFuZGxpbmcgY2FzZSAkMSAtPiAkMiAtPiAkMyIgPiYyCisJOzsKK2VzYWMKK2V4aXQgMQpkaWZmIC0tZ2l0IGEvZ2l0LW1lcmdlLXJlc29sdmUuc2ggYi9naXQtbWVyZ2UtcmVzb2x2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jOWRhNzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LW1lcmdlLXJlc29sdmUuc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBMaW51cyBUb3J2YWxkcworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKyMgUmVzb2x2ZSB0d28gdHJlZXMsIHVzaW5nIGVuaGFuY2VkIG11bHRpLWJhc2UgcmVhZC10cmVlLgorCisjIFRoZSBmaXJzdCBwYXJhbWV0ZXJzIHVwIHRvIC0tIGFyZSBtZXJnZSBiYXNlczsgdGhlIHJlc3QgYXJlIGhlYWRzLgorYmFzZXM9IGhlYWQ9IHJlbW90ZXM9IHNlcF9zZWVuPQorZm9yIGFyZworZG8KKwljYXNlICIsJHNlcF9zZWVuLCRoZWFkLCRhcmcsIiBpbgorCSosLS0sKQorCQlzZXBfc2Vlbj15ZXMKKwkJOzsKKwkseWVzLCwqKQorCQloZWFkPSRhcmcKKwkJOzsKKwkseWVzLCopCisJCXJlbW90ZXM9IiRyZW1vdGVzJGFyZyAiCisJCTs7CisJKikKKwkJYmFzZXM9IiRiYXNlcyRhcmcgIgorCQk7OworCWVzYWMKK2RvbmUKKworIyBHaXZlIHVwIGlmIHdlIGFyZSBnaXZlbiB0d28gb3IgbW9yZSByZW1vdGVzIC0tIG5vdCBoYW5kbGluZyBvY3RvcHVzLgorY2FzZSAiJHJlbW90ZXMiIGluCis/KicgJz8qKQorCWV4aXQgMiA7OworZXNhYworCisjIEdpdmUgdXAgaWYgdGhpcyBpcyBhIGJhc2VsZXNzIG1lcmdlLgoraWYgdGVzdCAnJyA9ICIkYmFzZXMiCit0aGVuCisJZXhpdCAyCitmaQorCitnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAorZ2l0IHJlYWQtdHJlZSAtdSAtbSAtLWFnZ3Jlc3NpdmUgJGJhc2VzICRoZWFkICRyZW1vdGVzIHx8IGV4aXQgMgorZWNobyAiVHJ5aW5nIHNpbXBsZSBtZXJnZS4iCitpZiByZXN1bHRfdHJlZT0kKGdpdCB3cml0ZS10cmVlIDI+L2Rldi9udWxsKQordGhlbgorCWV4aXQgMAorZWxzZQorCWVjaG8gIlNpbXBsZSBtZXJnZSBmYWlsZWQsIHRyeWluZyBBdXRvbWF0aWMgbWVyZ2UuIgorCWlmIGdpdC1tZXJnZS1pbmRleCAtbyBnaXQtbWVyZ2Utb25lLWZpbGUgLWEKKwl0aGVuCisJCWV4aXQgMAorCWVsc2UKKwkJZXhpdCAxCisJZmkKK2ZpCmRpZmYgLS1naXQgYS9naXQtbWVyZ2V0b29sLS1saWIuc2ggYi9naXQtbWVyZ2V0b29sLS1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhYzhlNAotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1tZXJnZXRvb2wtLWxpYi5zaApAQCAtMCwwICsxLDM3NCBAQAorIyBnaXQtbWVyZ2V0b29sLS1saWIgaXMgYSBzaGVsbCBsaWJyYXJ5IGZvciBjb21tb24gbWVyZ2UgdG9vbCBmdW5jdGlvbnMKKworOiAke01FUkdFX1RPT0xTX0RJUj0kKGdpdCAtLWV4ZWMtcGF0aCkvbWVyZ2V0b29sc30KKworSUZTPScKKycKKworbW9kZV9vayAoKSB7CisJaWYgZGlmZl9tb2RlCisJdGhlbgorCQljYW5fZGlmZgorCWVsaWYgbWVyZ2VfbW9kZQorCXRoZW4KKwkJY2FuX21lcmdlCisJZWxzZQorCQlmYWxzZQorCWZpCit9CisKK2lzX2F2YWlsYWJsZSAoKSB7CisJbWVyZ2VfdG9vbF9wYXRoPSQodHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCAiJDEiKSAmJgorCXR5cGUgIiRtZXJnZV90b29sX3BhdGgiID4vZGV2L251bGwgMj4mMQorfQorCitsaXN0X2NvbmZpZ190b29scyAoKSB7CisJc2VjdGlvbj0kMQorCWxpbmVfcHJlZml4PSR7MjotfQorCisJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgJHNlY3Rpb24nXC4uKlwuY21kJyB8CisJd2hpbGUgcmVhZCAtciBrZXkgdmFsdWUKKwlkbworCQl0b29sbmFtZT0ke2tleSMkc2VjdGlvbi59CisJCXRvb2xuYW1lPSR7dG9vbG5hbWUlLmNtZH0KKworCQlwcmludGYgIiVzJXNcbiIgIiRsaW5lX3ByZWZpeCIgIiR0b29sbmFtZSIKKwlkb25lCit9CisKK3Nob3dfdG9vbF9uYW1lcyAoKSB7CisJY29uZGl0aW9uPSR7MTotdHJ1ZX0gcGVyX2xpbmVfcHJlZml4PSR7MjotfSBwcmVhbWJsZT0kezM6LX0KKwlub3RfZm91bmRfbXNnPSR7NDotfQorCWV4dHJhX2NvbnRlbnQ9JHs1Oi19CisKKwlzaG93bl9hbnk9CisJKCBjZCAiJE1FUkdFX1RPT0xTX0RJUiIgJiYgbHMgKSB8IHsKKwkJd2hpbGUgcmVhZCB0b29sbmFtZQorCQlkbworCQkJaWYgc2V0dXBfdG9vbCAiJHRvb2xuYW1lIiAyPi9kZXYvbnVsbCAmJgorCQkJCShldmFsICIkY29uZGl0aW9uIiAiJHRvb2xuYW1lIikKKwkJCXRoZW4KKwkJCQlpZiB0ZXN0IC1uICIkcHJlYW1ibGUiCisJCQkJdGhlbgorCQkJCQlwcmludGYgIiVzXG4iICIkcHJlYW1ibGUiCisJCQkJCXByZWFtYmxlPQorCQkJCWZpCisJCQkJc2hvd25fYW55PXllcworCQkJCXByaW50ZiAiJXMlc1xuIiAiJHBlcl9saW5lX3ByZWZpeCIgIiR0b29sbmFtZSIKKwkJCWZpCisJCWRvbmUKKworCQlpZiB0ZXN0IC1uICIkZXh0cmFfY29udGVudCIKKwkJdGhlbgorCQkJaWYgdGVzdCAtbiAiJHByZWFtYmxlIgorCQkJdGhlbgorCQkJCSMgTm90ZTogbm8gJ1xuJyBoZXJlIHNpbmNlIHdlIGRvbid0IHdhbnQgYQorCQkJCSMgYmxhbmsgbGluZSBpZiB0aGVyZSBpcyBubyBpbml0aWFsIGNvbnRlbnQuCisJCQkJcHJpbnRmICIlcyIgIiRwcmVhbWJsZSIKKwkJCQlwcmVhbWJsZT0KKwkJCWZpCisJCQlzaG93bl9hbnk9eWVzCisJCQlwcmludGYgIlxuJXNcbiIgIiRleHRyYV9jb250ZW50IgorCQlmaQorCisJCWlmIHRlc3QgLW4gIiRwcmVhbWJsZSIgJiYgdGVzdCAtbiAiJG5vdF9mb3VuZF9tc2ciCisJCXRoZW4KKwkJCXByaW50ZiAiJXNcbiIgIiRub3RfZm91bmRfbXNnIgorCQlmaQorCisJCXRlc3QgLW4gIiRzaG93bl9hbnkiCisJfQorfQorCitkaWZmX21vZGUoKSB7CisJdGVzdCAiJFRPT0xfTU9ERSIgPSBkaWZmCit9CisKK21lcmdlX21vZGUoKSB7CisJdGVzdCAiJFRPT0xfTU9ERSIgPSBtZXJnZQorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoICgpIHsKKwllY2hvICIkMSIKK30KKworY2hlY2tfdW5jaGFuZ2VkICgpIHsKKwlpZiB0ZXN0ICIkTUVSR0VEIiAtbnQgIiRCQUNLVVAiCisJdGhlbgorCQlyZXR1cm4gMAorCWVsc2UKKwkJd2hpbGUgdHJ1ZQorCQlkbworCQkJZWNobyAiJE1FUkdFRCBzZWVtcyB1bmNoYW5nZWQuIgorCQkJcHJpbnRmICJXYXMgdGhlIG1lcmdlIHN1Y2Nlc3NmdWw/IFt5L25dICIKKwkJCXJlYWQgYW5zd2VyIHx8IHJldHVybiAxCisJCQljYXNlICIkYW5zd2VyIiBpbgorCQkJeSp8WSopIHJldHVybiAwIDs7CisJCQluKnxOKikgcmV0dXJuIDEgOzsKKwkJCWVzYWMKKwkJZG9uZQorCWZpCit9CisKK3ZhbGlkX3Rvb2wgKCkgeworCXNldHVwX3Rvb2wgIiQxIiAmJiByZXR1cm4gMAorCWNtZD0kKGdldF9tZXJnZV90b29sX2NtZCAiJDEiKQorCXRlc3QgLW4gIiRjbWQiCit9CisKK3NldHVwX3VzZXJfdG9vbCAoKSB7CisJbWVyZ2VfdG9vbF9jbWQ9JChnZXRfbWVyZ2VfdG9vbF9jbWQgIiR0b29sIikKKwl0ZXN0IC1uICIkbWVyZ2VfdG9vbF9jbWQiIHx8IHJldHVybiAxCisKKwlkaWZmX2NtZCAoKSB7CisJCSggZXZhbCAkbWVyZ2VfdG9vbF9jbWQgKQorCX0KKworCW1lcmdlX2NtZCAoKSB7CisJCXRydXN0X2V4aXRfY29kZT0kKGdpdCBjb25maWcgLS1ib29sIFwKKwkJCSJtZXJnZXRvb2wuJDEudHJ1c3RFeGl0Q29kZSIgfHwgZWNobyBmYWxzZSkKKwkJaWYgdGVzdCAiJHRydXN0X2V4aXRfY29kZSIgPSAiZmFsc2UiCisJCXRoZW4KKwkJCXRvdWNoICIkQkFDS1VQIgorCQkJKCBldmFsICRtZXJnZV90b29sX2NtZCApCisJCQljaGVja191bmNoYW5nZWQKKwkJZWxzZQorCQkJKCBldmFsICRtZXJnZV90b29sX2NtZCApCisJCWZpCisJfQorfQorCitzZXR1cF90b29sICgpIHsKKwl0b29sPSIkMSIKKworCSMgRmFsbGJhY2sgZGVmaW5pdGlvbnMsIHRvIGJlIG92ZXJyaWRkZW4gYnkgdG9vbHMuCisJY2FuX21lcmdlICgpIHsKKwkJcmV0dXJuIDAKKwl9CisKKwljYW5fZGlmZiAoKSB7CisJCXJldHVybiAwCisJfQorCisJZGlmZl9jbWQgKCkgeworCQlyZXR1cm4gMQorCX0KKworCW1lcmdlX2NtZCAoKSB7CisJCXJldHVybiAxCisJfQorCisJdHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCAoKSB7CisJCWVjaG8gIiQxIgorCX0KKworCWlmICEgdGVzdCAtZiAiJE1FUkdFX1RPT0xTX0RJUi8kdG9vbCIKKwl0aGVuCisJCXNldHVwX3VzZXJfdG9vbAorCQlyZXR1cm4gJD8KKwlmaQorCisJIyBMb2FkIHRoZSByZWRlZmluZWQgZnVuY3Rpb25zCisJLiAiJE1FUkdFX1RPT0xTX0RJUi8kdG9vbCIKKwkjIE5vdyBsZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tbWFuZCBmb3IgdGhlIHRvb2wuICBJZgorCSMgdGhleSBoYXZlIG5vdCBkb25lIHNvIHRoZW4gdGhpcyB3aWxsIHJldHVybiAxIHdoaWNoIHdlIGlnbm9yZS4KKwlzZXR1cF91c2VyX3Rvb2wKKworCWlmIG1lcmdlX21vZGUgJiYgISBjYW5fbWVyZ2UKKwl0aGVuCisJCWVjaG8gImVycm9yOiAnJHRvb2wnIGNhbiBub3QgYmUgdXNlZCB0byByZXNvbHZlIG1lcmdlcyIgPiYyCisJCXJldHVybiAxCisJZWxpZiBkaWZmX21vZGUgJiYgISBjYW5fZGlmZgorCXRoZW4KKwkJZWNobyAiZXJyb3I6ICckdG9vbCcgY2FuIG9ubHkgYmUgdXNlZCB0byByZXNvbHZlIG1lcmdlcyIgPiYyCisJCXJldHVybiAxCisJZmkKKwlyZXR1cm4gMAorfQorCitnZXRfbWVyZ2VfdG9vbF9jbWQgKCkgeworCW1lcmdlX3Rvb2w9IiQxIgorCWlmIGRpZmZfbW9kZQorCXRoZW4KKwkJZ2l0IGNvbmZpZyAiZGlmZnRvb2wuJG1lcmdlX3Rvb2wuY21kIiB8fAorCQlnaXQgY29uZmlnICJtZXJnZXRvb2wuJG1lcmdlX3Rvb2wuY21kIgorCWVsc2UKKwkJZ2l0IGNvbmZpZyAibWVyZ2V0b29sLiRtZXJnZV90b29sLmNtZCIKKwlmaQorfQorCisjIEVudHJ5IHBvaW50IGZvciBydW5uaW5nIHRvb2xzCitydW5fbWVyZ2VfdG9vbCAoKSB7CisJIyBJZiBHSVRfUFJFRklYIGlzIGVtcHR5IHRoZW4gd2UgY2Fubm90IHVzZSBpdCBpbiB0b29scworCSMgdGhhdCBleHBlY3QgdG8gYmUgYWJsZSB0byBjaGRpcigpIHRvIGl0cyB2YWx1ZS4KKwlHSVRfUFJFRklYPSR7R0lUX1BSRUZJWDotLn0KKwlleHBvcnQgR0lUX1BSRUZJWAorCisJbWVyZ2VfdG9vbF9wYXRoPSQoZ2V0X21lcmdlX3Rvb2xfcGF0aCAiJDEiKSB8fCBleGl0CisJYmFzZV9wcmVzZW50PSIkMiIKKworCSMgQnJpbmcgdG9vbC1zcGVjaWZpYyBmdW5jdGlvbnMgaW50byBzY29wZQorCXNldHVwX3Rvb2wgIiQxIiB8fCByZXR1cm4gMQorCisJaWYgbWVyZ2VfbW9kZQorCXRoZW4KKwkJcnVuX21lcmdlX2NtZCAiJDEiCisJZWxzZQorCQlydW5fZGlmZl9jbWQgIiQxIgorCWZpCit9CisKKyMgUnVuIGEgZWl0aGVyIGEgY29uZmlndXJlZCBvciBidWlsdC1pbiBkaWZmIHRvb2wKK3J1bl9kaWZmX2NtZCAoKSB7CisJZGlmZl9jbWQgIiQxIgorfQorCisjIFJ1biBhIGVpdGhlciBhIGNvbmZpZ3VyZWQgb3IgYnVpbHQtaW4gbWVyZ2UgdG9vbAorcnVuX21lcmdlX2NtZCAoKSB7CisJbWVyZ2VfY21kICIkMSIKK30KKworbGlzdF9tZXJnZV90b29sX2NhbmRpZGF0ZXMgKCkgeworCWlmIG1lcmdlX21vZGUKKwl0aGVuCisJCXRvb2xzPSJ0b3J0b2lzZW1lcmdlIgorCWVsc2UKKwkJdG9vbHM9ImtvbXBhcmUiCisJZmkKKwlpZiB0ZXN0IC1uICIkRElTUExBWSIKKwl0aGVuCisJCWlmIHRlc3QgLW4gIiRHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiCisJCXRoZW4KKwkJCXRvb2xzPSJtZWxkIG9wZW5kaWZmIGtkaWZmMyB0a2RpZmYgeHhkaWZmICR0b29scyIKKwkJZWxzZQorCQkJdG9vbHM9Im9wZW5kaWZmIGtkaWZmMyB0a2RpZmYgeHhkaWZmIG1lbGQgJHRvb2xzIgorCQlmaQorCQl0b29scz0iJHRvb2xzIGd2aW1kaWZmIGRpZmZ1c2UgZGlmZm1lcmdlIGVjbWVyZ2UiCisJCXRvb2xzPSIkdG9vbHMgcDRtZXJnZSBhcmF4aXMgYmMgY29kZWNvbXBhcmUiCisJZmkKKwljYXNlICIke1ZJU1VBTDotJEVESVRPUn0iIGluCisJKnZpbSopCisJCXRvb2xzPSIkdG9vbHMgdmltZGlmZiBlbWVyZ2UiCisJCTs7CisJKikKKwkJdG9vbHM9IiR0b29scyBlbWVyZ2UgdmltZGlmZiIKKwkJOzsKKwllc2FjCit9CisKK3Nob3dfdG9vbF9oZWxwICgpIHsKKwl0b29sX29wdD0iJ2dpdCAke1RPT0xfTU9ERX10b29sIC0tdG9vbD08dG9vbD4nIgorCisJdGFiPScJJworCUxGPScKKycKKwlhbnlfc2hvd249bm8KKworCWNtZF9uYW1lPSR7VE9PTF9NT0RFfXRvb2wKKwljb25maWdfdG9vbHM9JCh7CisJCWRpZmZfbW9kZSAmJiBsaXN0X2NvbmZpZ190b29scyBkaWZmdG9vbCAiJHRhYiR0YWIiCisJCWxpc3RfY29uZmlnX3Rvb2xzIG1lcmdldG9vbCAiJHRhYiR0YWIiCisJfSB8IHNvcnQpCisJZXh0cmFfY29udGVudD0KKwlpZiB0ZXN0IC1uICIkY29uZmlnX3Rvb2xzIgorCXRoZW4KKwkJZXh0cmFfY29udGVudD0iJHt0YWJ9dXNlci1kZWZpbmVkOiR7TEZ9JGNvbmZpZ190b29scyIKKwlmaQorCisJc2hvd190b29sX25hbWVzICdtb2RlX29rICYmIGlzX2F2YWlsYWJsZScgIiR0YWIkdGFiIiBcCisJCSIkdG9vbF9vcHQgbWF5IGJlIHNldCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZzoiIFwKKwkJIk5vIHN1aXRhYmxlIHRvb2wgZm9yICdnaXQgJGNtZF9uYW1lIC0tdG9vbD08dG9vbD4nIGZvdW5kLiIgXAorCQkiJGV4dHJhX2NvbnRlbnQiICYmCisJCWFueV9zaG93bj15ZXMKKworCXNob3dfdG9vbF9uYW1lcyAnbW9kZV9vayAmJiAhIGlzX2F2YWlsYWJsZScgIiR0YWIkdGFiIiBcCisJCSIke0xGfVRoZSBmb2xsb3dpbmcgdG9vbHMgYXJlIHZhbGlkLCBidXQgbm90IGN1cnJlbnRseSBhdmFpbGFibGU6IiAmJgorCQlhbnlfc2hvd249eWVzCisKKwlpZiB0ZXN0ICIkYW55X3Nob3duIiA9IHllcworCXRoZW4KKwkJZWNobworCQllY2hvICJTb21lIG9mIHRoZSB0b29scyBsaXN0ZWQgYWJvdmUgb25seSB3b3JrIGluIGEgd2luZG93ZWQiCisJCWVjaG8gImVudmlyb25tZW50LiBJZiBydW4gaW4gYSB0ZXJtaW5hbC1vbmx5IHNlc3Npb24sIHRoZXkgd2lsbCBmYWlsLiIKKwlmaQorCWV4aXQgMAorfQorCitndWVzc19tZXJnZV90b29sICgpIHsKKwlsaXN0X21lcmdlX3Rvb2xfY2FuZGlkYXRlcworCWNhdCA+JjIgPDwtRU9GCisKKwlUaGlzIG1lc3NhZ2UgaXMgZGlzcGxheWVkIGJlY2F1c2UgJyRUT09MX01PREUudG9vbCcgaXMgbm90IGNvbmZpZ3VyZWQuCisJU2VlICdnaXQgJHtUT09MX01PREV9dG9vbCAtLXRvb2wtaGVscCcgb3IgJ2dpdCBoZWxwIGNvbmZpZycgZm9yIG1vcmUgZGV0YWlscy4KKwknZ2l0ICR7VE9PTF9NT0RFfXRvb2wnIHdpbGwgbm93IGF0dGVtcHQgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRvb2xzOgorCSR0b29scworCUVPRgorCisJIyBMb29wIG92ZXIgZWFjaCBjYW5kaWRhdGUgYW5kIHN0b3Agd2hlbiBhIHZhbGlkIG1lcmdlIHRvb2wgaXMgZm91bmQuCisJSUZTPScgJworCWZvciB0b29sIGluICR0b29scworCWRvCisJCWlzX2F2YWlsYWJsZSAiJHRvb2wiICYmIGVjaG8gIiR0b29sIiAmJiByZXR1cm4gMAorCWRvbmUKKworCWVjaG8gPiYyICJObyBrbm93biAke1RPT0xfTU9ERX0gdG9vbCBpcyBhdmFpbGFibGUuIgorCXJldHVybiAxCit9CisKK2dldF9jb25maWd1cmVkX21lcmdlX3Rvb2wgKCkgeworCSMgRGlmZiBtb2RlIGZpcnN0IHRyaWVzIGRpZmYudG9vbCBhbmQgZmFsbHMgYmFjayB0byBtZXJnZS50b29sLgorCSMgTWVyZ2UgbW9kZSBvbmx5IGNoZWNrcyBtZXJnZS50b29sCisJaWYgZGlmZl9tb2RlCisJdGhlbgorCQltZXJnZV90b29sPSQoZ2l0IGNvbmZpZyBkaWZmLnRvb2wgfHwgZ2l0IGNvbmZpZyBtZXJnZS50b29sKQorCWVsc2UKKwkJbWVyZ2VfdG9vbD0kKGdpdCBjb25maWcgbWVyZ2UudG9vbCkKKwlmaQorCWlmIHRlc3QgLW4gIiRtZXJnZV90b29sIiAmJiAhIHZhbGlkX3Rvb2wgIiRtZXJnZV90b29sIgorCXRoZW4KKwkJZWNobyA+JjIgImdpdCBjb25maWcgb3B0aW9uICRUT09MX01PREUudG9vbCBzZXQgdG8gdW5rbm93biB0b29sOiAkbWVyZ2VfdG9vbCIKKwkJZWNobyA+JjIgIlJlc2V0dGluZyB0byBkZWZhdWx0Li4uIgorCQlyZXR1cm4gMQorCWZpCisJZWNobyAiJG1lcmdlX3Rvb2wiCit9CisKK2dldF9tZXJnZV90b29sX3BhdGggKCkgeworCSMgQSBtZXJnZSB0b29sIGhhcyBiZWVuIHNldCwgc28gdmVyaWZ5IHRoYXQgaXQncyB2YWxpZC4KKwltZXJnZV90b29sPSIkMSIKKwlpZiAhIHZhbGlkX3Rvb2wgIiRtZXJnZV90b29sIgorCXRoZW4KKwkJZWNobyA+JjIgIlVua25vd24gbWVyZ2UgdG9vbCAkbWVyZ2VfdG9vbCIKKwkJZXhpdCAxCisJZmkKKwlpZiBkaWZmX21vZGUKKwl0aGVuCisJCW1lcmdlX3Rvb2xfcGF0aD0kKGdpdCBjb25maWcgZGlmZnRvb2wuIiRtZXJnZV90b29sIi5wYXRoIHx8CisJCQkJICBnaXQgY29uZmlnIG1lcmdldG9vbC4iJG1lcmdlX3Rvb2wiLnBhdGgpCisJZWxzZQorCQltZXJnZV90b29sX3BhdGg9JChnaXQgY29uZmlnIG1lcmdldG9vbC4iJG1lcmdlX3Rvb2wiLnBhdGgpCisJZmkKKwlpZiB0ZXN0IC16ICIkbWVyZ2VfdG9vbF9wYXRoIgorCXRoZW4KKwkJbWVyZ2VfdG9vbF9wYXRoPSQodHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCAiJG1lcmdlX3Rvb2wiKQorCWZpCisJaWYgdGVzdCAteiAiJChnZXRfbWVyZ2VfdG9vbF9jbWQgIiRtZXJnZV90b29sIikiICYmCisJCSEgdHlwZSAiJG1lcmdlX3Rvb2xfcGF0aCIgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvID4mMiAiVGhlICRUT09MX01PREUgdG9vbCAkbWVyZ2VfdG9vbCBpcyBub3QgYXZhaWxhYmxlIGFzIlwKKwkJCSAiJyRtZXJnZV90b29sX3BhdGgnIgorCQlleGl0IDEKKwlmaQorCWVjaG8gIiRtZXJnZV90b29sX3BhdGgiCit9CisKK2dldF9tZXJnZV90b29sICgpIHsKKwkjIENoZWNrIGlmIGEgbWVyZ2UgdG9vbCBoYXMgYmVlbiBjb25maWd1cmVkCisJbWVyZ2VfdG9vbD0kKGdldF9jb25maWd1cmVkX21lcmdlX3Rvb2wpCisJIyBUcnkgdG8gZ3Vlc3MgYW4gYXBwcm9wcmlhdGUgbWVyZ2UgdG9vbCBpZiBubyB0b29sIGhhcyBiZWVuIHNldC4KKwlpZiB0ZXN0IC16ICIkbWVyZ2VfdG9vbCIKKwl0aGVuCisJCW1lcmdlX3Rvb2w9JChndWVzc19tZXJnZV90b29sKSB8fCBleGl0CisJZmkKKwllY2hvICIkbWVyZ2VfdG9vbCIKK30KZGlmZiAtLWdpdCBhL2dpdC1tZXJnZXRvb2wuc2ggYi9naXQtbWVyZ2V0b29sLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlmNzdlM2EKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtbWVyZ2V0b29sLnNoCkBAIC0wLDAgKzEsNDY1IEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBwcm9ncmFtIHJlc29sdmVzIG1lcmdlIGNvbmZsaWN0cyBpbiBnaXQKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFRoZW9kb3JlIFkuIFRzJ28KKyMKKyMgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIsIG9yIGEgbGF0ZXIgdmVyc2lvbgorIyBhdCB0aGUgZGlzY3JldGlvbiBvZiBKdW5pbyBDIEhhbWFuby4KKyMKKworVVNBR0U9J1stLXRvb2w9dG9vbF0gWy0tdG9vbC1oZWxwXSBbLXl8LS1uby1wcm9tcHR8LS1wcm9tcHRdIFtmaWxlIHRvIG1lcmdlXSAuLi4nCitTVUJESVJFQ1RPUllfT0s9WWVzCitOT05HSVRfT0s9WWVzCitPUFRJT05TX1NQRUM9CitUT09MX01PREU9bWVyZ2UKKy4gZ2l0LXNoLXNldHVwCisuIGdpdC1tZXJnZXRvb2wtLWxpYgorCisjIFJldHVybnMgdHJ1ZSBpZiB0aGUgbW9kZSByZWZsZWN0cyBhIHN5bWxpbmsKK2lzX3N5bWxpbmsgKCkgeworCXRlc3QgIiQxIiA9IDEyMDAwMAorfQorCitpc19zdWJtb2R1bGUgKCkgeworCXRlc3QgIiQxIiA9IDE2MDAwMAorfQorCitsb2NhbF9wcmVzZW50ICgpIHsKKwl0ZXN0IC1uICIkbG9jYWxfbW9kZSIKK30KKworcmVtb3RlX3ByZXNlbnQgKCkgeworCXRlc3QgLW4gIiRyZW1vdGVfbW9kZSIKK30KKworYmFzZV9wcmVzZW50ICgpIHsKKwl0ZXN0IC1uICIkYmFzZV9tb2RlIgorfQorCittZXJnZXRvb2xfdG1wZGlyX2luaXQgKCkgeworCWlmIHRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgbWVyZ2V0b29sLndyaXRlVG9UZW1wKSIgIT0gdHJ1ZQorCXRoZW4KKwkJTUVSR0VUT09MX1RNUERJUj0uCisJCXJldHVybiAwCisJZmkKKwlpZiBNRVJHRVRPT0xfVE1QRElSPSQobWt0ZW1wIC1kIC10ICJnaXQtbWVyZ2V0b29sLVhYWFhYWCIgMj4vZGV2L251bGwpCisJdGhlbgorCQlyZXR1cm4gMAorCWZpCisJZGllICJlcnJvcjogbWt0ZW1wIGlzIG5lZWRlZCB3aGVuICdtZXJnZXRvb2wud3JpdGVUb1RlbXAnIGlzIHRydWUiCit9CisKK2NsZWFudXBfdGVtcF9maWxlcyAoKSB7CisJaWYgdGVzdCAiJDEiID0gLS1zYXZlLWJhY2t1cAorCXRoZW4KKwkJcm0gLXJmIC0tICIkTUVSR0VELm9yaWciCisJCXRlc3QgLWUgIiRCQUNLVVAiICYmIG12IC0tICIkQkFDS1VQIiAiJE1FUkdFRC5vcmlnIgorCQlybSAtZiAtLSAiJExPQ0FMIiAiJFJFTU9URSIgIiRCQVNFIgorCWVsc2UKKwkJcm0gLWYgLS0gIiRMT0NBTCIgIiRSRU1PVEUiICIkQkFTRSIgIiRCQUNLVVAiCisJZmkKKwlpZiB0ZXN0ICIkTUVSR0VUT09MX1RNUERJUiIgIT0gIi4iCisJdGhlbgorCQlybWRpciAiJE1FUkdFVE9PTF9UTVBESVIiCisJZmkKK30KKworZGVzY3JpYmVfZmlsZSAoKSB7CisJbW9kZT0iJDEiCisJYnJhbmNoPSIkMiIKKwlmaWxlPSIkMyIKKworCXByaW50ZiAiICB7JXN9OiAiICIkYnJhbmNoIgorCWlmIHRlc3QgLXogIiRtb2RlIgorCXRoZW4KKwkJZWNobyAiZGVsZXRlZCIKKwllbGlmIGlzX3N5bWxpbmsgIiRtb2RlIgorCXRoZW4KKwkJZWNobyAiYSBzeW1ib2xpYyBsaW5rIC0+ICckKGNhdCAiJGZpbGUiKSciCisJZWxpZiBpc19zdWJtb2R1bGUgIiRtb2RlIgorCXRoZW4KKwkJZWNobyAic3VibW9kdWxlIGNvbW1pdCAkZmlsZSIKKwllbGlmIGJhc2VfcHJlc2VudAorCXRoZW4KKwkJZWNobyAibW9kaWZpZWQgZmlsZSIKKwllbHNlCisJCWVjaG8gImNyZWF0ZWQgZmlsZSIKKwlmaQorfQorCityZXNvbHZlX3N5bWxpbmtfbWVyZ2UgKCkgeworCXdoaWxlIHRydWUKKwlkbworCQlwcmludGYgIlVzZSAobClvY2FsIG9yIChyKWVtb3RlLCBvciAoYSlib3J0PyAiCisJCXJlYWQgYW5zIHx8IHJldHVybiAxCisJCWNhc2UgIiRhbnMiIGluCisJCVtsTF0qKQorCQkJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tc3RhZ2U9MiAtLSAiJE1FUkdFRCIKKwkJCWdpdCBhZGQgLS0gIiRNRVJHRUQiCisJCQljbGVhbnVwX3RlbXBfZmlsZXMgLS1zYXZlLWJhY2t1cAorCQkJcmV0dXJuIDAKKwkJCTs7CisJCVtyUl0qKQorCQkJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tc3RhZ2U9MyAtLSAiJE1FUkdFRCIKKwkJCWdpdCBhZGQgLS0gIiRNRVJHRUQiCisJCQljbGVhbnVwX3RlbXBfZmlsZXMgLS1zYXZlLWJhY2t1cAorCQkJcmV0dXJuIDAKKwkJCTs7CisJCVthQV0qKQorCQkJcmV0dXJuIDEKKwkJCTs7CisJCWVzYWMKKwlkb25lCit9CisKK3Jlc29sdmVfZGVsZXRlZF9tZXJnZSAoKSB7CisJd2hpbGUgdHJ1ZQorCWRvCisJCWlmIGJhc2VfcHJlc2VudAorCQl0aGVuCisJCQlwcmludGYgIlVzZSAobSlvZGlmaWVkIG9yIChkKWVsZXRlZCBmaWxlLCBvciAoYSlib3J0PyAiCisJCWVsc2UKKwkJCXByaW50ZiAiVXNlIChjKXJlYXRlZCBvciAoZCllbGV0ZWQgZmlsZSwgb3IgKGEpYm9ydD8gIgorCQlmaQorCQlyZWFkIGFucyB8fCByZXR1cm4gMQorCQljYXNlICIkYW5zIiBpbgorCQlbbU1jQ10qKQorCQkJZ2l0IGFkZCAtLSAiJE1FUkdFRCIKKwkJCWNsZWFudXBfdGVtcF9maWxlcyAtLXNhdmUtYmFja3VwCisJCQlyZXR1cm4gMAorCQkJOzsKKwkJW2REXSopCisJCQlnaXQgcm0gLS0gIiRNRVJHRUQiID4gL2Rldi9udWxsCisJCQljbGVhbnVwX3RlbXBfZmlsZXMKKwkJCXJldHVybiAwCisJCQk7OworCQlbYUFdKikKKwkJCXJldHVybiAxCisJCQk7OworCQllc2FjCisJZG9uZQorfQorCityZXNvbHZlX3N1Ym1vZHVsZV9tZXJnZSAoKSB7CisJd2hpbGUgdHJ1ZQorCWRvCisJCXByaW50ZiAiVXNlIChsKW9jYWwgb3IgKHIpZW1vdGUsIG9yIChhKWJvcnQ/ICIKKwkJcmVhZCBhbnMgfHwgcmV0dXJuIDEKKwkJY2FzZSAiJGFucyIgaW4KKwkJW2xMXSopCisJCQlpZiAhIGxvY2FsX3ByZXNlbnQKKwkJCXRoZW4KKwkJCQlpZiB0ZXN0IC1uICIkKGdpdCBscy10cmVlIEhFQUQgLS0gIiRNRVJHRUQiKSIKKwkJCQl0aGVuCisJCQkJCSMgTG9jYWwgaXNuJ3QgcHJlc2VudCwgYnV0IGl0J3MgYSBzdWJkaXJlY3RvcnkKKwkJCQkJZ2l0IGxzLXRyZWUgLS1mdWxsLW5hbWUgLXIgSEVBRCAtLSAiJE1FUkdFRCIgfAorCQkJCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyB8fCBleGl0ICQ/CisJCQkJZWxzZQorCQkJCQl0ZXN0IC1lICIkTUVSR0VEIiAmJiBtdiAtLSAiJE1FUkdFRCIgIiRCQUNLVVAiCisJCQkJCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgIiRNRVJHRUQiCisJCQkJCWNsZWFudXBfdGVtcF9maWxlcyAtLXNhdmUtYmFja3VwCisJCQkJZmkKKwkJCWVsaWYgaXNfc3VibW9kdWxlICIkbG9jYWxfbW9kZSIKKwkJCXRoZW4KKwkJCQlzdGFnZV9zdWJtb2R1bGUgIiRNRVJHRUQiICIkbG9jYWxfc2hhMSIKKwkJCWVsc2UKKwkJCQlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLS1zdGFnZT0yIC0tICIkTUVSR0VEIgorCQkJCWdpdCBhZGQgLS0gIiRNRVJHRUQiCisJCQlmaQorCQkJcmV0dXJuIDAKKwkJCTs7CisJCVtyUl0qKQorCQkJaWYgISByZW1vdGVfcHJlc2VudAorCQkJdGhlbgorCQkJCWlmIHRlc3QgLW4gIiQoZ2l0IGxzLXRyZWUgTUVSR0VfSEVBRCAtLSAiJE1FUkdFRCIpIgorCQkJCXRoZW4KKwkJCQkJIyBSZW1vdGUgaXNuJ3QgcHJlc2VudCwgYnV0IGl0J3MgYSBzdWJkaXJlY3RvcnkKKwkJCQkJZ2l0IGxzLXRyZWUgLS1mdWxsLW5hbWUgLXIgTUVSR0VfSEVBRCAtLSAiJE1FUkdFRCIgfAorCQkJCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyB8fCBleGl0ICQ/CisJCQkJZWxzZQorCQkJCQl0ZXN0IC1lICIkTUVSR0VEIiAmJiBtdiAtLSAiJE1FUkdFRCIgIiRCQUNLVVAiCisJCQkJCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgIiRNRVJHRUQiCisJCQkJZmkKKwkJCWVsaWYgaXNfc3VibW9kdWxlICIkcmVtb3RlX21vZGUiCisJCQl0aGVuCisJCQkJISBpc19zdWJtb2R1bGUgIiRsb2NhbF9tb2RlIiAmJgorCQkJCXRlc3QgLWUgIiRNRVJHRUQiICYmCisJCQkJbXYgLS0gIiRNRVJHRUQiICIkQkFDS1VQIgorCQkJCXN0YWdlX3N1Ym1vZHVsZSAiJE1FUkdFRCIgIiRyZW1vdGVfc2hhMSIKKwkJCWVsc2UKKwkJCQl0ZXN0IC1lICIkTUVSR0VEIiAmJiBtdiAtLSAiJE1FUkdFRCIgIiRCQUNLVVAiCisJCQkJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC0tc3RhZ2U9MyAtLSAiJE1FUkdFRCIKKwkJCQlnaXQgYWRkIC0tICIkTUVSR0VEIgorCQkJZmkKKwkJCWNsZWFudXBfdGVtcF9maWxlcyAtLXNhdmUtYmFja3VwCisJCQlyZXR1cm4gMAorCQkJOzsKKwkJW2FBXSopCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworc3RhZ2Vfc3VibW9kdWxlICgpIHsKKwlwYXRoPSIkMSIKKwlzdWJtb2R1bGVfc2hhMT0iJDIiCisJbWtkaXIgLXAgIiRwYXRoIiB8fAorCWRpZSAiZmF0YWw6IHVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciBtb2R1bGUgYXQgJHBhdGgiCisJIyBGaW5kICRwYXRoIHJlbGF0aXZlIHRvIHdvcmsgdHJlZQorCXdvcmtfdHJlZV9yb290PSQoY2RfdG9fdG9wbGV2ZWwgJiYgcHdkKQorCXdvcmtfcmVsX3BhdGg9JChjZCAiJHBhdGgiICYmCisJCUdJVF9XT1JLX1RSRUU9IiR7d29ya190cmVlX3Jvb3R9IiBnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgKKwkpCisJdGVzdCAtbiAiJHdvcmtfcmVsX3BhdGgiIHx8CisJZGllICJmYXRhbDogdW5hYmxlIHRvIGdldCBwYXRoIG9mIG1vZHVsZSAkcGF0aCByZWxhdGl2ZSB0byB3b3JrIHRyZWUiCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlcGxhY2UgLS1jYWNoZWluZm8gMTYwMDAwICIkc3VibW9kdWxlX3NoYTEiICIke3dvcmtfcmVsX3BhdGglL30iIHx8IGRpZQorfQorCitjaGVja291dF9zdGFnZWRfZmlsZSAoKSB7CisJdG1wZmlsZT0kKGV4cHIgXAorCQkiJChnaXQgY2hlY2tvdXQtaW5kZXggLS10ZW1wIC0tc3RhZ2U9IiQxIiAiJDIiIDI+L2Rldi9udWxsKSIgXAorCQk6ICdcKFteCV0qXCkJJykKKworCWlmIHRlc3QgJD8gLWVxIDAgJiYgdGVzdCAtbiAiJHRtcGZpbGUiCisJdGhlbgorCQltdiAtLSAiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwKSR0bXBmaWxlIiAiJDMiCisJZWxzZQorCQk+IiQzIgorCWZpCit9CisKK21lcmdlX2ZpbGUgKCkgeworCU1FUkdFRD0iJDEiCisKKwlmPSQoZ2l0IGxzLWZpbGVzIC11IC0tICIkTUVSR0VEIikKKwlpZiB0ZXN0IC16ICIkZiIKKwl0aGVuCisJCWlmIHRlc3QgISAtZiAiJE1FUkdFRCIKKwkJdGhlbgorCQkJZWNobyAiJE1FUkdFRDogZmlsZSBub3QgZm91bmQiCisJCWVsc2UKKwkJCWVjaG8gIiRNRVJHRUQ6IGZpbGUgZG9lcyBub3QgbmVlZCBtZXJnaW5nIgorCQlmaQorCQlyZXR1cm4gMQorCWZpCisKKwlpZiBCQVNFPSQoZXhwciAiJE1FUkdFRCIgOiAnXCguKlwpXC5bXi9dKiQnKQorCXRoZW4KKwkJZXh0PSQoZXhwciAiJE1FUkdFRCIgOiAnLipcKFwuW14vXSpcKSQnKQorCWVsc2UKKwkJQkFTRT0kTUVSR0VECisJCWV4dD0KKwlmaQorCisJbWVyZ2V0b29sX3RtcGRpcl9pbml0CisKKwlpZiB0ZXN0ICIkTUVSR0VUT09MX1RNUERJUiIgIT0gIi4iCisJdGhlbgorCQkjIElmIHdlJ3JlIHVzaW5nIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGVuIHdyaXRlIHRvIHRoZQorCQkjIHRvcC1sZXZlbCBvZiB0aGF0IGRpcmVjdG9yeS4KKwkJQkFTRT0ke0JBU0UjIyovfQorCWZpCisKKwlCQUNLVVA9IiRNRVJHRVRPT0xfVE1QRElSLyR7QkFTRX1fQkFDS1VQXyQkJGV4dCIKKwlMT0NBTD0iJE1FUkdFVE9PTF9UTVBESVIvJHtCQVNFfV9MT0NBTF8kJCRleHQiCisJUkVNT1RFPSIkTUVSR0VUT09MX1RNUERJUi8ke0JBU0V9X1JFTU9URV8kJCRleHQiCisJQkFTRT0iJE1FUkdFVE9PTF9UTVBESVIvJHtCQVNFfV9CQVNFXyQkJGV4dCIKKworCWJhc2VfbW9kZT0kKGdpdCBscy1maWxlcyAtdSAtLSAiJE1FUkdFRCIgfCBhd2sgJ3tpZiAoJDM9PTEpIHByaW50ICQxO30nKQorCWxvY2FsX21vZGU9JChnaXQgbHMtZmlsZXMgLXUgLS0gIiRNRVJHRUQiIHwgYXdrICd7aWYgKCQzPT0yKSBwcmludCAkMTt9JykKKwlyZW1vdGVfbW9kZT0kKGdpdCBscy1maWxlcyAtdSAtLSAiJE1FUkdFRCIgfCBhd2sgJ3tpZiAoJDM9PTMpIHByaW50ICQxO30nKQorCisJaWYgaXNfc3VibW9kdWxlICIkbG9jYWxfbW9kZSIgfHwgaXNfc3VibW9kdWxlICIkcmVtb3RlX21vZGUiCisJdGhlbgorCQllY2hvICJTdWJtb2R1bGUgbWVyZ2UgY29uZmxpY3QgZm9yICckTUVSR0VEJzoiCisJCWxvY2FsX3NoYTE9JChnaXQgbHMtZmlsZXMgLXUgLS0gIiRNRVJHRUQiIHwgYXdrICd7aWYgKCQzPT0yKSBwcmludCAkMjt9JykKKwkJcmVtb3RlX3NoYTE9JChnaXQgbHMtZmlsZXMgLXUgLS0gIiRNRVJHRUQiIHwgYXdrICd7aWYgKCQzPT0zKSBwcmludCAkMjt9JykKKwkJZGVzY3JpYmVfZmlsZSAiJGxvY2FsX21vZGUiICJsb2NhbCIgIiRsb2NhbF9zaGExIgorCQlkZXNjcmliZV9maWxlICIkcmVtb3RlX21vZGUiICJyZW1vdGUiICIkcmVtb3RlX3NoYTEiCisJCXJlc29sdmVfc3VibW9kdWxlX21lcmdlCisJCXJldHVybgorCWZpCisKKwltdiAtLSAiJE1FUkdFRCIgIiRCQUNLVVAiCisJY3AgLS0gIiRCQUNLVVAiICIkTUVSR0VEIgorCisJY2hlY2tvdXRfc3RhZ2VkX2ZpbGUgMSAiJE1FUkdFRCIgIiRCQVNFIgorCWNoZWNrb3V0X3N0YWdlZF9maWxlIDIgIiRNRVJHRUQiICIkTE9DQUwiCisJY2hlY2tvdXRfc3RhZ2VkX2ZpbGUgMyAiJE1FUkdFRCIgIiRSRU1PVEUiCisKKwlpZiB0ZXN0IC16ICIkbG9jYWxfbW9kZSIgfHwgdGVzdCAteiAiJHJlbW90ZV9tb2RlIgorCXRoZW4KKwkJZWNobyAiRGVsZXRlZCBtZXJnZSBjb25mbGljdCBmb3IgJyRNRVJHRUQnOiIKKwkJZGVzY3JpYmVfZmlsZSAiJGxvY2FsX21vZGUiICJsb2NhbCIgIiRMT0NBTCIKKwkJZGVzY3JpYmVfZmlsZSAiJHJlbW90ZV9tb2RlIiAicmVtb3RlIiAiJFJFTU9URSIKKwkJcmVzb2x2ZV9kZWxldGVkX21lcmdlCisJCXJldHVybgorCWZpCisKKwlpZiBpc19zeW1saW5rICIkbG9jYWxfbW9kZSIgfHwgaXNfc3ltbGluayAiJHJlbW90ZV9tb2RlIgorCXRoZW4KKwkJZWNobyAiU3ltYm9saWMgbGluayBtZXJnZSBjb25mbGljdCBmb3IgJyRNRVJHRUQnOiIKKwkJZGVzY3JpYmVfZmlsZSAiJGxvY2FsX21vZGUiICJsb2NhbCIgIiRMT0NBTCIKKwkJZGVzY3JpYmVfZmlsZSAiJHJlbW90ZV9tb2RlIiAicmVtb3RlIiAiJFJFTU9URSIKKwkJcmVzb2x2ZV9zeW1saW5rX21lcmdlCisJCXJldHVybgorCWZpCisKKwllY2hvICJOb3JtYWwgbWVyZ2UgY29uZmxpY3QgZm9yICckTUVSR0VEJzoiCisJZGVzY3JpYmVfZmlsZSAiJGxvY2FsX21vZGUiICJsb2NhbCIgIiRMT0NBTCIKKwlkZXNjcmliZV9maWxlICIkcmVtb3RlX21vZGUiICJyZW1vdGUiICIkUkVNT1RFIgorCWlmIHRlc3QgIiRndWVzc2VkX21lcmdlX3Rvb2wiID0gdHJ1ZSB8fCB0ZXN0ICIkcHJvbXB0IiA9IHRydWUKKwl0aGVuCisJCXByaW50ZiAiSGl0IHJldHVybiB0byBzdGFydCBtZXJnZSByZXNvbHV0aW9uIHRvb2wgKCVzKTogIiAiJG1lcmdlX3Rvb2wiCisJCXJlYWQgYW5zIHx8IHJldHVybiAxCisJZmkKKworCWlmIGJhc2VfcHJlc2VudAorCXRoZW4KKwkJcHJlc2VudD10cnVlCisJZWxzZQorCQlwcmVzZW50PWZhbHNlCisJZmkKKworCWlmICEgcnVuX21lcmdlX3Rvb2wgIiRtZXJnZV90b29sIiAiJHByZXNlbnQiCisJdGhlbgorCQllY2hvICJtZXJnZSBvZiAkTUVSR0VEIGZhaWxlZCIgMT4mMgorCQltdiAtLSAiJEJBQ0tVUCIgIiRNRVJHRUQiCisKKwkJaWYgdGVzdCAiJG1lcmdlX2tlZXBfdGVtcG9yYXJpZXMiID0gImZhbHNlIgorCQl0aGVuCisJCQljbGVhbnVwX3RlbXBfZmlsZXMKKwkJZmkKKworCQlyZXR1cm4gMQorCWZpCisKKwlpZiB0ZXN0ICIkbWVyZ2Vfa2VlcF9iYWNrdXAiID0gInRydWUiCisJdGhlbgorCQltdiAtLSAiJEJBQ0tVUCIgIiRNRVJHRUQub3JpZyIKKwllbHNlCisJCXJtIC0tICIkQkFDS1VQIgorCWZpCisKKwlnaXQgYWRkIC0tICIkTUVSR0VEIgorCWNsZWFudXBfdGVtcF9maWxlcworCXJldHVybiAwCit9CisKK3Byb21wdD0kKGdpdCBjb25maWcgLS1ib29sIG1lcmdldG9vbC5wcm9tcHQpCitndWVzc2VkX21lcmdlX3Rvb2w9ZmFsc2UKKword2hpbGUgdGVzdCAkIyAhPSAwCitkbworCWNhc2UgIiQxIiBpbgorCS0tdG9vbC1oZWxwPSopCisJCVRPT0xfTU9ERT0kezEjLS10b29sLWhlbHA9fQorCQlzaG93X3Rvb2xfaGVscAorCQk7OworCS0tdG9vbC1oZWxwKQorCQlzaG93X3Rvb2xfaGVscAorCQk7OworCS10fC0tdG9vbCopCisJCWNhc2UgIiQjLCQxIiBpbgorCQkqLCo9KikKKwkJCW1lcmdlX3Rvb2w9JChleHByICJ6JDEiIDogJ3otW149XSo9XCguKlwpJykKKwkJCTs7CisJCTEsKikKKwkJCXVzYWdlIDs7CisJCSopCisJCQltZXJnZV90b29sPSIkMiIKKwkJCXNoaWZ0IDs7CisJCWVzYWMKKwkJOzsKKwkteXwtLW5vLXByb21wdCkKKwkJcHJvbXB0PWZhbHNlCisJCTs7CisJLS1wcm9tcHQpCisJCXByb21wdD10cnVlCisJCTs7CisJLS0pCisJCXNoaWZ0CisJCWJyZWFrCisJCTs7CisJLSopCisJCXVzYWdlCisJCTs7CisJKikKKwkJYnJlYWsKKwkJOzsKKwllc2FjCisJc2hpZnQKK2RvbmUKKworcHJvbXB0X2FmdGVyX2ZhaWxlZF9tZXJnZSAoKSB7CisJd2hpbGUgdHJ1ZQorCWRvCisJCXByaW50ZiAiQ29udGludWUgbWVyZ2luZyBvdGhlciB1bnJlc29sdmVkIHBhdGhzICh5L24pID8gIgorCQlyZWFkIGFucyB8fCByZXR1cm4gMQorCQljYXNlICIkYW5zIiBpbgorCQlbeVldKikKKwkJCXJldHVybiAwCisJCQk7OworCQlbbk5dKikKKwkJCXJldHVybiAxCisJCQk7OworCQllc2FjCisJZG9uZQorfQorCitnaXRfZGlyX2luaXQKK3JlcXVpcmVfd29ya190cmVlCisKK2lmIHRlc3QgLXogIiRtZXJnZV90b29sIgordGhlbgorCSMgQ2hlY2sgaWYgYSBtZXJnZSB0b29sIGhhcyBiZWVuIGNvbmZpZ3VyZWQKKwltZXJnZV90b29sPSQoZ2V0X2NvbmZpZ3VyZWRfbWVyZ2VfdG9vbCkKKwkjIFRyeSB0byBndWVzcyBhbiBhcHByb3ByaWF0ZSBtZXJnZSB0b29sIGlmIG5vIHRvb2wgaGFzIGJlZW4gc2V0LgorCWlmIHRlc3QgLXogIiRtZXJnZV90b29sIgorCXRoZW4KKwkJbWVyZ2VfdG9vbD0kKGd1ZXNzX21lcmdlX3Rvb2wpIHx8IGV4aXQKKwkJZ3Vlc3NlZF9tZXJnZV90b29sPXRydWUKKwlmaQorZmkKK21lcmdlX2tlZXBfYmFja3VwPSIkKGdpdCBjb25maWcgLS1ib29sIG1lcmdldG9vbC5rZWVwQmFja3VwIHx8IGVjaG8gdHJ1ZSkiCittZXJnZV9rZWVwX3RlbXBvcmFyaWVzPSIkKGdpdCBjb25maWcgLS1ib29sIG1lcmdldG9vbC5rZWVwVGVtcG9yYXJpZXMgfHwgZWNobyBmYWxzZSkiCisKK2ZpbGVzPQorCitpZiB0ZXN0ICQjIC1lcSAwCit0aGVuCisJY2RfdG9fdG9wbGV2ZWwKKworCWlmIHRlc3QgLWUgIiRHSVRfRElSL01FUkdFX1JSIgorCXRoZW4KKwkJZmlsZXM9JChnaXQgcmVyZXJlIHJlbWFpbmluZykKKwllbHNlCisJCWZpbGVzPSQoZ2l0IGxzLWZpbGVzIC11IHwgc2VkIC1lICdzL15bXgldKgkvLycgfCBzb3J0IC11KQorCWZpCitlbHNlCisJZmlsZXM9JChnaXQgbHMtZmlsZXMgLXUgLS0gIiRAIiB8IHNlZCAtZSAncy9eW14JXSoJLy8nIHwgc29ydCAtdSkKK2ZpCisKK2lmIHRlc3QgLXogIiRmaWxlcyIKK3RoZW4KKwllY2hvICJObyBmaWxlcyBuZWVkIG1lcmdpbmciCisJZXhpdCAwCitmaQorCitwcmludGYgIk1lcmdpbmc6XG4iCitwcmludGYgIiVzXG4iICIkZmlsZXMiCisKK3JjPTAKK2ZvciBpIGluICRmaWxlcworZG8KKwlwcmludGYgIlxuIgorCWlmICEgbWVyZ2VfZmlsZSAiJGkiCisJdGhlbgorCQlyYz0xCisJCXByb21wdF9hZnRlcl9mYWlsZWRfbWVyZ2UgfHwgZXhpdCAxCisJZmkKK2RvbmUKKworZXhpdCAkcmMKZGlmZiAtLWdpdCBhL2dpdC1wNC5weSBiL2dpdC1wNC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMTJlZjJiCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXA0LnB5CkBAIC0wLDAgKzEsMzY0MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIGdpdC1wNC5weSAtLSBBIHRvb2wgZm9yIGJpZGlyZWN0aW9uYWwgb3BlcmF0aW9uIGJldHdlZW4gYSBQZXJmb3JjZSBkZXBvdCBhbmQgZ2l0LgorIworIyBBdXRob3I6IFNpbW9uIEhhdXNtYW5uIDxzaW1vbkBsc3QuZGU+CisjIENvcHlyaWdodDogMjAwNyBTaW1vbiBIYXVzbWFubiA8c2ltb25AbHN0LmRlPgorIyAgICAgICAgICAgIDIwMDcgVHJvbGx0ZWNoIEFTQQorIyBMaWNlbnNlOiBNSVQgPGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwPgorIworaW1wb3J0IHN5cworaWYgc3lzLmhleHZlcnNpb24gPCAweDAyMDQwMDAwOgorICAgICMgVGhlIGxpbWl0ZXIgaXMgdGhlIHN1YnByb2Nlc3MgbW9kdWxlCisgICAgc3lzLnN0ZGVyci53cml0ZSgiZ2l0LXA0OiByZXF1aXJlcyBQeXRob24gMi40IG9yIGxhdGVyLlxuIikKKyAgICBzeXMuZXhpdCgxKQoraW1wb3J0IG9zCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGltZQoraW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgcmUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdGF0CitpbXBvcnQgemlwZmlsZQoraW1wb3J0IHpsaWIKK2ltcG9ydCBjdHlwZXMKKwordHJ5OgorICAgIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgQ2FsbGVkUHJvY2Vzc0Vycm9yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgIyBmcm9tIHB5dGhvbjIuNzpzdWJwcm9jZXNzLnB5CisgICAgIyBFeGNlcHRpb24gY2xhc3NlcyB1c2VkIGJ5IHRoaXMgbW9kdWxlLgorICAgIGNsYXNzIENhbGxlZFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgorICAgICAgICAiIiJUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBhIHByb2Nlc3MgcnVuIGJ5IGNoZWNrX2NhbGwoKSByZXR1cm5zCisgICAgICAgIGEgbm9uLXplcm8gZXhpdCBzdGF0dXMuICBUaGUgZXhpdCBzdGF0dXMgd2lsbCBiZSBzdG9yZWQgaW4gdGhlCisgICAgICAgIHJldHVybmNvZGUgYXR0cmlidXRlLiIiIgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmV0dXJuY29kZSwgY21kKToKKyAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IHJldHVybmNvZGUKKyAgICAgICAgICAgIHNlbGYuY21kID0gY21kCisgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICJDb21tYW5kICclcycgcmV0dXJuZWQgbm9uLXplcm8gZXhpdCBzdGF0dXMgJWQiICUgKHNlbGYuY21kLCBzZWxmLnJldHVybmNvZGUpCisKK3ZlcmJvc2UgPSBGYWxzZQorCisjIE9ubHkgbGFiZWxzL3RhZ3MgbWF0Y2hpbmcgdGhpcyB3aWxsIGJlIGltcG9ydGVkL2V4cG9ydGVkCitkZWZhdWx0TGFiZWxSZWdleHAgPSByJ1thLXpBLVowLTlfXC0uXSskJworCisjIEdyYWIgY2hhbmdlcyBpbiBibG9ja3Mgb2YgdGhpcyBtYW55IHJldmlzaW9ucywgdW5sZXNzIG90aGVyd2lzZSByZXF1ZXN0ZWQKK2RlZmF1bHRCbG9ja1NpemUgPSA1MTIKKworZGVmIHA0X2J1aWxkX2NtZChjbWQpOgorICAgICIiIkJ1aWxkIGEgc3VpdGFibGUgcDQgY29tbWFuZCBsaW5lLgorCisgICAgVGhpcyBjb25zb2xpZGF0ZXMgYnVpbGRpbmcgYW5kIHJldHVybmluZyBhIHA0IGNvbW1hbmQgbGluZSBpbnRvIG9uZQorICAgIGxvY2F0aW9uLiBJdCBtZWFucyB0aGF0IGhvb2tpbmcgaW50byB0aGUgZW52aXJvbm1lbnQsIG9yIG90aGVyIGNvbmZpZ3VyYXRpb24KKyAgICBjYW4gYmUgZG9uZSBtb3JlIGVhc2lseS4KKyAgICAiIiIKKyAgICByZWFsX2NtZCA9IFsicDQiXQorCisgICAgdXNlciA9IGdpdENvbmZpZygiZ2l0LXA0LnVzZXIiKQorICAgIGlmIGxlbih1c2VyKSA+IDA6CisgICAgICAgIHJlYWxfY21kICs9IFsiLXUiLHVzZXJdCisKKyAgICBwYXNzd29yZCA9IGdpdENvbmZpZygiZ2l0LXA0LnBhc3N3b3JkIikKKyAgICBpZiBsZW4ocGFzc3dvcmQpID4gMDoKKyAgICAgICAgcmVhbF9jbWQgKz0gWyItUCIsIHBhc3N3b3JkXQorCisgICAgcG9ydCA9IGdpdENvbmZpZygiZ2l0LXA0LnBvcnQiKQorICAgIGlmIGxlbihwb3J0KSA+IDA6CisgICAgICAgIHJlYWxfY21kICs9IFsiLXAiLCBwb3J0XQorCisgICAgaG9zdCA9IGdpdENvbmZpZygiZ2l0LXA0Lmhvc3QiKQorICAgIGlmIGxlbihob3N0KSA+IDA6CisgICAgICAgIHJlYWxfY21kICs9IFsiLUgiLCBob3N0XQorCisgICAgY2xpZW50ID0gZ2l0Q29uZmlnKCJnaXQtcDQuY2xpZW50IikKKyAgICBpZiBsZW4oY2xpZW50KSA+IDA6CisgICAgICAgIHJlYWxfY21kICs9IFsiLWMiLCBjbGllbnRdCisKKworICAgIGlmIGlzaW5zdGFuY2UoY21kLGJhc2VzdHJpbmcpOgorICAgICAgICByZWFsX2NtZCA9ICcgJy5qb2luKHJlYWxfY21kKSArICcgJyArIGNtZAorICAgIGVsc2U6CisgICAgICAgIHJlYWxfY21kICs9IGNtZAorICAgIHJldHVybiByZWFsX2NtZAorCitkZWYgY2hkaXIocGF0aCwgaXNfY2xpZW50X3BhdGg9RmFsc2UpOgorICAgICIiIkRvIGNoZGlyIHRvIHRoZSBnaXZlbiBwYXRoLCBhbmQgc2V0IHRoZSBQV0QgZW52aXJvbm1lbnQKKyAgICAgICB2YXJpYWJsZSBmb3IgdXNlIGJ5IFA0LiAgSXQgZG9lcyBub3QgbG9vayBhdCBnZXRjd2QoKSBvdXRwdXQuCisgICAgICAgU2luY2Ugd2UncmUgbm90IHVzaW5nIHRoZSBzaGVsbCwgaXQgaXMgbmVjZXNzYXJ5IHRvIHNldCB0aGUKKyAgICAgICBQV0QgZW52aXJvbm1lbnQgdmFyaWFibGUgZXhwbGljaXRseS4KKworICAgICAgIE5vcm1hbGx5LCBleHBhbmQgdGhlIHBhdGggdG8gZm9yY2UgaXQgdG8gYmUgYWJzb2x1dGUuICBUaGlzCisgICAgICAgYWRkcmVzc2VzIHRoZSB1c2Ugb2YgcmVsYXRpdmUgcGF0aCBuYW1lcyBpbnNpZGUgUDQgc2V0dGluZ3MsCisgICAgICAgZS5nLiBQNENPTkZJRz0ucDRjb25maWcuICBQNCBkb2VzIG5vdCBzaW1wbHkgb3BlbiB0aGUgZmlsZW5hbWUKKyAgICAgICBhcyBnaXZlbjsgaXQgbG9va3MgZm9yIC5wNGNvbmZpZyB1c2luZyBQV0QuCisKKyAgICAgICBJZiBpc19jbGllbnRfcGF0aCwgdGhlIHBhdGggd2FzIGhhbmRlZCB0byB1cyBkaXJlY3RseSBieSBwNCwKKyAgICAgICBhbmQgbWF5IGJlIGEgc3ltYm9saWMgbGluay4gIERvIG5vdCBjYWxsIG9zLmdldGN3ZCgpIGluIHRoaXMKKyAgICAgICBjYXNlLCBiZWNhdXNlIGl0IHdpbGwgY2F1c2UgcDQgdG8gdGhpbmsgdGhhdCBQV0QgaXMgbm90IGluc2lkZQorICAgICAgIHRoZSBjbGllbnQgcGF0aC4KKyAgICAgICAiIiIKKworICAgIG9zLmNoZGlyKHBhdGgpCisgICAgaWYgbm90IGlzX2NsaWVudF9wYXRoOgorICAgICAgICBwYXRoID0gb3MuZ2V0Y3dkKCkKKyAgICBvcy5lbnZpcm9uWydQV0QnXSA9IHBhdGgKKworZGVmIGNhbGNEaXNrRnJlZSgpOgorICAgICIiIlJldHVybiBmcmVlIHNwYWNlIGluIGJ5dGVzIG9uIHRoZSBkaXNrIG9mIHRoZSBnaXZlbiBkaXJuYW1lLiIiIgorICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09ICdXaW5kb3dzJzoKKyAgICAgICAgZnJlZV9ieXRlcyA9IGN0eXBlcy5jX3Vsb25nbG9uZygwKQorICAgICAgICBjdHlwZXMud2luZGxsLmtlcm5lbDMyLkdldERpc2tGcmVlU3BhY2VFeFcoY3R5cGVzLmNfd2NoYXJfcChvcy5nZXRjd2QoKSksIE5vbmUsIE5vbmUsIGN0eXBlcy5wb2ludGVyKGZyZWVfYnl0ZXMpKQorICAgICAgICByZXR1cm4gZnJlZV9ieXRlcy52YWx1ZQorICAgIGVsc2U6CisgICAgICAgIHN0ID0gb3Muc3RhdHZmcyhvcy5nZXRjd2QoKSkKKyAgICAgICAgcmV0dXJuIHN0LmZfYmF2YWlsICogc3QuZl9mcnNpemUKKworZGVmIGRpZShtc2cpOgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihtc2cpCisgICAgZWxzZToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZShtc2cgKyAiXG4iKQorICAgICAgICBzeXMuZXhpdCgxKQorCitkZWYgd3JpdGVfcGlwZShjLCBzdGRpbik6CisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnV3JpdGluZyBwaXBlOiAlc1xuJyAlIHN0cihjKSkKKworICAgIGV4cGFuZCA9IGlzaW5zdGFuY2UoYyxiYXNlc3RyaW5nKQorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGMsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9ZXhwYW5kKQorICAgIHBpcGUgPSBwLnN0ZGluCisgICAgdmFsID0gcGlwZS53cml0ZShzdGRpbikKKyAgICBwaXBlLmNsb3NlKCkKKyAgICBpZiBwLndhaXQoKToKKyAgICAgICAgZGllKCdDb21tYW5kIGZhaWxlZDogJXMnICUgc3RyKGMpKQorCisgICAgcmV0dXJuIHZhbAorCitkZWYgcDRfd3JpdGVfcGlwZShjLCBzdGRpbik6CisgICAgcmVhbF9jbWQgPSBwNF9idWlsZF9jbWQoYykKKyAgICByZXR1cm4gd3JpdGVfcGlwZShyZWFsX2NtZCwgc3RkaW4pCisKK2RlZiByZWFkX3BpcGUoYywgaWdub3JlX2Vycm9yPUZhbHNlKToKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdSZWFkaW5nIHBpcGU6ICVzXG4nICUgc3RyKGMpKQorCisgICAgZXhwYW5kID0gaXNpbnN0YW5jZShjLGJhc2VzdHJpbmcpCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9ZXhwYW5kKQorICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICBpZiBwLnJldHVybmNvZGUgIT0gMCBhbmQgbm90IGlnbm9yZV9lcnJvcjoKKyAgICAgICAgZGllKCdDb21tYW5kIGZhaWxlZDogJXNcbkVycm9yOiAlcycgJSAoc3RyKGMpLCBlcnIpKQorICAgIHJldHVybiBvdXQKKworZGVmIHA0X3JlYWRfcGlwZShjLCBpZ25vcmVfZXJyb3I9RmFsc2UpOgorICAgIHJlYWxfY21kID0gcDRfYnVpbGRfY21kKGMpCisgICAgcmV0dXJuIHJlYWRfcGlwZShyZWFsX2NtZCwgaWdub3JlX2Vycm9yKQorCitkZWYgcmVhZF9waXBlX2xpbmVzKGMpOgorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1JlYWRpbmcgcGlwZTogJXNcbicgJSBzdHIoYykpCisKKyAgICBleHBhbmQgPSBpc2luc3RhbmNlKGMsIGJhc2VzdHJpbmcpCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYywgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc2hlbGw9ZXhwYW5kKQorICAgIHBpcGUgPSBwLnN0ZG91dAorICAgIHZhbCA9IHBpcGUucmVhZGxpbmVzKCkKKyAgICBpZiBwaXBlLmNsb3NlKCkgb3IgcC53YWl0KCk6CisgICAgICAgIGRpZSgnQ29tbWFuZCBmYWlsZWQ6ICVzJyAlIHN0cihjKSkKKworICAgIHJldHVybiB2YWwKKworZGVmIHA0X3JlYWRfcGlwZV9saW5lcyhjKToKKyAgICAiIiJTcGVjaWZpY2FsbHkgaW52b2tlIHA0IG9uIHRoZSBjb21tYW5kIHN1cHBsaWVkLiAiIiIKKyAgICByZWFsX2NtZCA9IHA0X2J1aWxkX2NtZChjKQorICAgIHJldHVybiByZWFkX3BpcGVfbGluZXMocmVhbF9jbWQpCisKK2RlZiBwNF9oYXNfY29tbWFuZChjbWQpOgorICAgICIiIkFzayBwNCBmb3IgaGVscCBvbiB0aGlzIGNvbW1hbmQuICBJZiBpdCByZXR1cm5zIGFuIGVycm9yLCB0aGUKKyAgICAgICBjb21tYW5kIGRvZXMgbm90IGV4aXN0IGluIHRoaXMgdmVyc2lvbiBvZiBwNC4iIiIKKyAgICByZWFsX2NtZCA9IHA0X2J1aWxkX2NtZChbImhlbHAiLCBjbWRdKQorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKHJlYWxfY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgIHAuY29tbXVuaWNhdGUoKQorICAgIHJldHVybiBwLnJldHVybmNvZGUgPT0gMAorCitkZWYgcDRfaGFzX21vdmVfY29tbWFuZCgpOgorICAgICIiIlNlZSBpZiB0aGUgbW92ZSBjb21tYW5kIGV4aXN0cywgdGhhdCBpdCBzdXBwb3J0cyAtaywgYW5kIHRoYXQKKyAgICAgICBpdCBoYXMgbm90IGJlZW4gYWRtaW5pc3RyYXRpdmVseSBkaXNhYmxlZC4gIFRoZSBhcmd1bWVudHMKKyAgICAgICBtdXN0IGJlIGNvcnJlY3QsIGJ1dCB0aGUgZmlsZW5hbWVzIGRvIG5vdCBoYXZlIHRvIGV4aXN0LiAgVXNlCisgICAgICAgb25lcyB3aXRoIHdpbGRjYXJkcyBzbyBldmVuIGlmIHRoZXkgZXhpc3QsIGl0IHdpbGwgZmFpbC4iIiIKKworICAgIGlmIG5vdCBwNF9oYXNfY29tbWFuZCgibW92ZSIpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBjbWQgPSBwNF9idWlsZF9jbWQoWyJtb3ZlIiwgIi1rIiwgIkBmcm9tIiwgIkB0byJdKQorICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAob3V0LCBlcnIpID0gcC5jb21tdW5pY2F0ZSgpCisgICAgIyByZXR1cm4gY29kZSB3aWxsIGJlIDEgaW4gZWl0aGVyIGNhc2UKKyAgICBpZiBlcnIuZmluZCgiSW52YWxpZCBvcHRpb24iKSA+PSAwOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiBlcnIuZmluZCgiZGlzYWJsZWQiKSA+PSAwOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAjIGFzc3VtZSBpdCBmYWlsZWQgYmVjYXVzZSBALi4uIHdhcyBpbnZhbGlkIGNoYW5nZWxpc3QKKyAgICByZXR1cm4gVHJ1ZQorCitkZWYgc3lzdGVtKGNtZCk6CisgICAgZXhwYW5kID0gaXNpbnN0YW5jZShjbWQsYmFzZXN0cmluZykKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJleGVjdXRpbmcgJXNcbiIgJSBzdHIoY21kKSkKKyAgICByZXRjb2RlID0gc3VicHJvY2Vzcy5jYWxsKGNtZCwgc2hlbGw9ZXhwYW5kKQorICAgIGlmIHJldGNvZGU6CisgICAgICAgIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvcihyZXRjb2RlLCBjbWQpCisKK2RlZiBwNF9zeXN0ZW0oY21kKToKKyAgICAiIiJTcGVjaWZpY2FsbHkgaW52b2tlIHA0IGFzIHRoZSBzeXN0ZW0gY29tbWFuZC4gIiIiCisgICAgcmVhbF9jbWQgPSBwNF9idWlsZF9jbWQoY21kKQorICAgIGV4cGFuZCA9IGlzaW5zdGFuY2UocmVhbF9jbWQsIGJhc2VzdHJpbmcpCisgICAgcmV0Y29kZSA9IHN1YnByb2Nlc3MuY2FsbChyZWFsX2NtZCwgc2hlbGw9ZXhwYW5kKQorICAgIGlmIHJldGNvZGU6CisgICAgICAgIHJhaXNlIENhbGxlZFByb2Nlc3NFcnJvcihyZXRjb2RlLCByZWFsX2NtZCkKKworX3A0X3ZlcnNpb25fc3RyaW5nID0gTm9uZQorZGVmIHA0X3ZlcnNpb25fc3RyaW5nKCk6CisgICAgIiIiUmVhZCB0aGUgdmVyc2lvbiBzdHJpbmcsIHNob3dpbmcganVzdCB0aGUgbGFzdCBsaW5lLCB3aGljaAorICAgICAgIGhvcGVmdWxseSBpcyB0aGUgaW50ZXJlc3RpbmcgdmVyc2lvbiBiaXQuCisKKyAgICAgICAkIHA0IC1WCisgICAgICAgUGVyZm9yY2UgLSBUaGUgRmFzdCBTb2Z0d2FyZSBDb25maWd1cmF0aW9uIE1hbmFnZW1lbnQgU3lzdGVtLgorICAgICAgIENvcHlyaWdodCAxOTk1LTIwMTEgUGVyZm9yY2UgU29mdHdhcmUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgICAgIFJldi4gUDQvTlRYODYvMjAxMS4xLzM5Mzk3NSAoMjAxMS8xMi8xNikuCisgICAgIiIiCisgICAgZ2xvYmFsIF9wNF92ZXJzaW9uX3N0cmluZworICAgIGlmIG5vdCBfcDRfdmVyc2lvbl9zdHJpbmc6CisgICAgICAgIGEgPSBwNF9yZWFkX3BpcGVfbGluZXMoWyItViJdKQorICAgICAgICBfcDRfdmVyc2lvbl9zdHJpbmcgPSBhWy0xXS5yc3RyaXAoKQorICAgIHJldHVybiBfcDRfdmVyc2lvbl9zdHJpbmcKKworZGVmIHA0X2ludGVncmF0ZShzcmMsIGRlc3QpOgorICAgIHA0X3N5c3RlbShbImludGVncmF0ZSIsICItRHQiLCB3aWxkY2FyZF9lbmNvZGUoc3JjKSwgd2lsZGNhcmRfZW5jb2RlKGRlc3QpXSkKKworZGVmIHA0X3N5bmMoZiwgKm9wdGlvbnMpOgorICAgIHA0X3N5c3RlbShbInN5bmMiXSArIGxpc3Qob3B0aW9ucykgKyBbd2lsZGNhcmRfZW5jb2RlKGYpXSkKKworZGVmIHA0X2FkZChmKToKKyAgICAjIGZvcmNpYmx5IGFkZCBmaWxlIG5hbWVzIHdpdGggd2lsZGNhcmRzCisgICAgaWYgd2lsZGNhcmRfcHJlc2VudChmKToKKyAgICAgICAgcDRfc3lzdGVtKFsiYWRkIiwgIi1mIiwgZl0pCisgICAgZWxzZToKKyAgICAgICAgcDRfc3lzdGVtKFsiYWRkIiwgZl0pCisKK2RlZiBwNF9kZWxldGUoZik6CisgICAgcDRfc3lzdGVtKFsiZGVsZXRlIiwgd2lsZGNhcmRfZW5jb2RlKGYpXSkKKworZGVmIHA0X2VkaXQoZik6CisgICAgcDRfc3lzdGVtKFsiZWRpdCIsIHdpbGRjYXJkX2VuY29kZShmKV0pCisKK2RlZiBwNF9yZXZlcnQoZik6CisgICAgcDRfc3lzdGVtKFsicmV2ZXJ0Iiwgd2lsZGNhcmRfZW5jb2RlKGYpXSkKKworZGVmIHA0X3Jlb3Blbih0eXBlLCBmKToKKyAgICBwNF9zeXN0ZW0oWyJyZW9wZW4iLCAiLXQiLCB0eXBlLCB3aWxkY2FyZF9lbmNvZGUoZildKQorCitkZWYgcDRfbW92ZShzcmMsIGRlc3QpOgorICAgIHA0X3N5c3RlbShbIm1vdmUiLCAiLWsiLCB3aWxkY2FyZF9lbmNvZGUoc3JjKSwgd2lsZGNhcmRfZW5jb2RlKGRlc3QpXSkKKworZGVmIHA0X2xhc3RfY2hhbmdlKCk6CisgICAgcmVzdWx0cyA9IHA0Q21kTGlzdChbImNoYW5nZXMiLCAiLW0iLCAiMSJdKQorICAgIHJldHVybiBpbnQocmVzdWx0c1swXVsnY2hhbmdlJ10pCisKK2RlZiBwNF9kZXNjcmliZShjaGFuZ2UpOgorICAgICIiIk1ha2Ugc3VyZSBpdCByZXR1cm5zIGEgdmFsaWQgcmVzdWx0IGJ5IGNoZWNraW5nIGZvcgorICAgICAgIHRoZSBwcmVzZW5jZSBvZiBmaWVsZCAidGltZSIuICBSZXR1cm4gYSBkaWN0IG9mIHRoZQorICAgICAgIHJlc3VsdHMuIiIiCisKKyAgICBkcyA9IHA0Q21kTGlzdChbImRlc2NyaWJlIiwgIi1zIiwgc3RyKGNoYW5nZSldKQorICAgIGlmIGxlbihkcykgIT0gMToKKyAgICAgICAgZGllKCJwNCBkZXNjcmliZSAtcyAlZCBkaWQgbm90IHJldHVybiAxIHJlc3VsdDogJXMiICUgKGNoYW5nZSwgc3RyKGRzKSkpCisKKyAgICBkID0gZHNbMF0KKworICAgIGlmICJwNEV4aXRDb2RlIiBpbiBkOgorICAgICAgICBkaWUoInA0IGRlc2NyaWJlIC1zICVkIGV4aXRlZCB3aXRoICVkOiAlcyIgJSAoY2hhbmdlLCBkWyJwNEV4aXRDb2RlIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoZCkpKQorICAgIGlmICJjb2RlIiBpbiBkOgorICAgICAgICBpZiBkWyJjb2RlIl0gPT0gImVycm9yIjoKKyAgICAgICAgICAgIGRpZSgicDQgZGVzY3JpYmUgLXMgJWQgcmV0dXJuZWQgZXJyb3IgY29kZTogJXMiICUgKGNoYW5nZSwgc3RyKGQpKSkKKworICAgIGlmICJ0aW1lIiBub3QgaW4gZDoKKyAgICAgICAgZGllKCJwNCBkZXNjcmliZSAtcyAlZCByZXR1cm5lZCBubyBcInRpbWVcIjogJXMiICUgKGNoYW5nZSwgc3RyKGQpKSkKKworICAgIHJldHVybiBkCisKKyMKKyMgQ2Fub25pY2FsaXplIHRoZSBwNCB0eXBlIGFuZCByZXR1cm4gYSB0dXBsZSBvZiB0aGUKKyMgYmFzZSB0eXBlLCBwbHVzIGFueSBtb2RpZmllcnMuICBTZWUgInA0IGhlbHAgZmlsZXR5cGVzIgorIyBmb3IgYSBsaXN0IGFuZCBleHBsYW5hdGlvbi4KKyMKK2RlZiBzcGxpdF9wNF90eXBlKHA0dHlwZSk6CisKKyAgICBwNF9maWxldHlwZXNfaGlzdG9yaWNhbCA9IHsKKyAgICAgICAgImN0ZW1wb2JqIjogImJpbmFyeStTdyIsCisgICAgICAgICJjdGV4dCI6ICJ0ZXh0K0MiLAorICAgICAgICAiY3h0ZXh0IjogInRleHQrQ3giLAorICAgICAgICAia3RleHQiOiAidGV4dCtrIiwKKyAgICAgICAgImt4dGV4dCI6ICJ0ZXh0K2t4IiwKKyAgICAgICAgImx0ZXh0IjogInRleHQrRiIsCisgICAgICAgICJ0ZW1wb2JqIjogImJpbmFyeStGU3ciLAorICAgICAgICAidWJpbmFyeSI6ICJiaW5hcnkrRiIsCisgICAgICAgICJ1cmVzb3VyY2UiOiAicmVzb3VyY2UrRiIsCisgICAgICAgICJ1eGJpbmFyeSI6ICJiaW5hcnkrRngiLAorICAgICAgICAieGJpbmFyeSI6ICJiaW5hcnkreCIsCisgICAgICAgICJ4bHRleHQiOiAidGV4dCtGeCIsCisgICAgICAgICJ4dGVtcG9iaiI6ICJiaW5hcnkrU3d4IiwKKyAgICAgICAgInh0ZXh0IjogInRleHQreCIsCisgICAgICAgICJ4dW5pY29kZSI6ICJ1bmljb2RlK3giLAorICAgICAgICAieHV0ZjE2IjogInV0ZjE2K3giLAorICAgIH0KKyAgICBpZiBwNHR5cGUgaW4gcDRfZmlsZXR5cGVzX2hpc3RvcmljYWw6CisgICAgICAgIHA0dHlwZSA9IHA0X2ZpbGV0eXBlc19oaXN0b3JpY2FsW3A0dHlwZV0KKyAgICBtb2RzID0gIiIKKyAgICBzID0gcDR0eXBlLnNwbGl0KCIrIikKKyAgICBiYXNlID0gc1swXQorICAgIG1vZHMgPSAiIgorICAgIGlmIGxlbihzKSA+IDE6CisgICAgICAgIG1vZHMgPSBzWzFdCisgICAgcmV0dXJuIChiYXNlLCBtb2RzKQorCisjCisjIHJldHVybiB0aGUgcmF3IHA0IHR5cGUgb2YgYSBmaWxlICh0ZXh0LCB0ZXh0K2tvLCBldGMpCisjCitkZWYgcDRfdHlwZShmKToKKyAgICByZXN1bHRzID0gcDRDbWRMaXN0KFsiZnN0YXQiLCAiLVQiLCAiaGVhZFR5cGUiLCB3aWxkY2FyZF9lbmNvZGUoZildKQorICAgIHJldHVybiByZXN1bHRzWzBdWydoZWFkVHlwZSddCisKKyMKKyMgR2l2ZW4gYSB0eXBlIGJhc2UgYW5kIG1vZGlmaWVyLCByZXR1cm4gYSByZWdleHAgbWF0Y2hpbmcKKyMgdGhlIGtleXdvcmRzIHRoYXQgY2FuIGJlIGV4cGFuZGVkIGluIHRoZSBmaWxlCisjCitkZWYgcDRfa2V5d29yZHNfcmVnZXhwX2Zvcl90eXBlKGJhc2UsIHR5cGVfbW9kcyk6CisgICAgaWYgYmFzZSBpbiAoInRleHQiLCAidW5pY29kZSIsICJiaW5hcnkiKToKKyAgICAgICAga3dvcmRzID0gTm9uZQorICAgICAgICBpZiAia28iIGluIHR5cGVfbW9kczoKKyAgICAgICAgICAgIGt3b3JkcyA9ICdJZHxIZWFkZXInCisgICAgICAgIGVsaWYgImsiIGluIHR5cGVfbW9kczoKKyAgICAgICAgICAgIGt3b3JkcyA9ICdJZHxIZWFkZXJ8QXV0aG9yfERhdGV8RGF0ZVRpbWV8Q2hhbmdlfEZpbGV8UmV2aXNpb24nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBwYXR0ZXJuID0gciIiIgorICAgICAgICAgICAgXCQgICAgICAgICAgICAgICMgU3RhcnRzIHdpdGggYSBkb2xsYXIsIGZvbGxvd2VkIGJ5Li4uCisgICAgICAgICAgICAoJXMpICAgICAgICAgICAgIyBvbmUgb2YgdGhlIGtleXdvcmRzLCBmb2xsb3dlZCBieS4uLgorICAgICAgICAgICAgKDpbXiRcbl0rKT8gICAgICMgcG9zc2libHkgYW4gb2xkIGV4cGFuc2lvbiwgZm9sbG93ZWQgYnkuLi4KKyAgICAgICAgICAgIFwkICAgICAgICAgICAgICAjIGFub3RoZXIgZG9sbGFyCisgICAgICAgICAgICAiIiIgJSBrd29yZHMKKyAgICAgICAgcmV0dXJuIHBhdHRlcm4KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCisjCisjIEdpdmVuIGEgZmlsZSwgcmV0dXJuIGEgcmVnZXhwIG1hdGNoaW5nIHRoZSBwb3NzaWJsZQorIyBSQ1Mga2V5d29yZHMgdGhhdCB3aWxsIGJlIGV4cGFuZGVkLCBvciBOb25lIGZvciBmaWxlcworIyB3aXRoIGt3IGV4cGFuc2lvbiB0dXJuZWQgb2ZmLgorIworZGVmIHA0X2tleXdvcmRzX3JlZ2V4cF9mb3JfZmlsZShmaWxlKToKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZSk6CisgICAgICAgIHJldHVybiBOb25lCisgICAgZWxzZToKKyAgICAgICAgKHR5cGVfYmFzZSwgdHlwZV9tb2RzKSA9IHNwbGl0X3A0X3R5cGUocDRfdHlwZShmaWxlKSkKKyAgICAgICAgcmV0dXJuIHA0X2tleXdvcmRzX3JlZ2V4cF9mb3JfdHlwZSh0eXBlX2Jhc2UsIHR5cGVfbW9kcykKKworZGVmIHNldFA0RXhlY0JpdChmaWxlLCBtb2RlKToKKyAgICAjIFJlb3BlbnMgYW4gYWxyZWFkeSBvcGVuIGZpbGUgYW5kIGNoYW5nZXMgdGhlIGV4ZWN1dGUgYml0IHRvIG1hdGNoCisgICAgIyB0aGUgZXhlY3V0ZSBiaXQgc2V0dGluZyBpbiB0aGUgcGFzc2VkIGluIG1vZGUuCisKKyAgICBwNFR5cGUgPSAiK3giCisKKyAgICBpZiBub3QgaXNNb2RlRXhlYyhtb2RlKToKKyAgICAgICAgcDRUeXBlID0gZ2V0UDRPcGVuZWRUeXBlKGZpbGUpCisgICAgICAgIHA0VHlwZSA9IHJlLnN1YignXihbY2t1XT8peCguKiknLCAnXFwxXFwyJywgcDRUeXBlKQorICAgICAgICBwNFR5cGUgPSByZS5zdWIoJyguKj9cKy4qPyl4KC4qPyknLCAnXFwxXFwyJywgcDRUeXBlKQorICAgICAgICBpZiBwNFR5cGVbLTFdID09ICIrIjoKKyAgICAgICAgICAgIHA0VHlwZSA9IHA0VHlwZVswOi0xXQorCisgICAgcDRfcmVvcGVuKHA0VHlwZSwgZmlsZSkKKworZGVmIGdldFA0T3BlbmVkVHlwZShmaWxlKToKKyAgICAjIFJldHVybnMgdGhlIHBlcmZvcmNlIGZpbGUgdHlwZSBmb3IgdGhlIGdpdmVuIGZpbGUuCisKKyAgICByZXN1bHQgPSBwNF9yZWFkX3BpcGUoWyJvcGVuZWQiLCB3aWxkY2FyZF9lbmNvZGUoZmlsZSldKQorICAgIG1hdGNoID0gcmUubWF0Y2goIi4qXCgoLispXCkoIFwqZXhjbHVzaXZlXCopP1xyPyQiLCByZXN1bHQpCisgICAgaWYgbWF0Y2g6CisgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKQorICAgIGVsc2U6CisgICAgICAgIGRpZSgiQ291bGQgbm90IGRldGVybWluZSBmaWxlIHR5cGUgZm9yICVzIChyZXN1bHQ6ICclcycpIiAlIChmaWxlLCByZXN1bHQpKQorCisjIFJldHVybiB0aGUgc2V0IG9mIGFsbCBwNCBsYWJlbHMKK2RlZiBnZXRQNExhYmVscyhkZXBvdFBhdGhzKToKKyAgICBsYWJlbHMgPSBzZXQoKQorICAgIGlmIGlzaW5zdGFuY2UoZGVwb3RQYXRocyxiYXNlc3RyaW5nKToKKyAgICAgICAgZGVwb3RQYXRocyA9IFtkZXBvdFBhdGhzXQorCisgICAgZm9yIGwgaW4gcDRDbWRMaXN0KFsibGFiZWxzIl0gKyBbIiVzLi4uIiAlIHAgZm9yIHAgaW4gZGVwb3RQYXRoc10pOgorICAgICAgICBsYWJlbCA9IGxbJ2xhYmVsJ10KKyAgICAgICAgbGFiZWxzLmFkZChsYWJlbCkKKworICAgIHJldHVybiBsYWJlbHMKKworIyBSZXR1cm4gdGhlIHNldCBvZiBhbGwgZ2l0IHRhZ3MKK2RlZiBnZXRHaXRUYWdzKCk6CisgICAgZ2l0VGFncyA9IHNldCgpCisgICAgZm9yIGxpbmUgaW4gcmVhZF9waXBlX2xpbmVzKFsiZ2l0IiwgInRhZyJdKToKKyAgICAgICAgdGFnID0gbGluZS5zdHJpcCgpCisgICAgICAgIGdpdFRhZ3MuYWRkKHRhZykKKyAgICByZXR1cm4gZ2l0VGFncworCitkZWYgZGlmZlRyZWVQYXR0ZXJuKCk6CisgICAgIyBUaGlzIGlzIGEgc2ltcGxlIGdlbmVyYXRvciBmb3IgdGhlIGRpZmYgdHJlZSByZWdleCBwYXR0ZXJuLiBUaGlzIGNvdWxkIGJlCisgICAgIyBhIGNsYXNzIHZhcmlhYmxlIGlmIHRoaXMgYW5kIHBhcnNlRGlmZlRyZWVFbnRyeSB3ZXJlIGEgcGFydCBvZiBhIGNsYXNzLgorICAgIHBhdHRlcm4gPSByZS5jb21waWxlKCc6KFxkKykgKFxkKykgKFx3KykgKFx3KykgKFtBLVpdKShcZCspP1x0KC4qPykoKFx0KC4qKSl8JCknKQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHlpZWxkIHBhdHRlcm4KKworZGVmIHBhcnNlRGlmZlRyZWVFbnRyeShlbnRyeSk6CisgICAgIiIiUGFyc2VzIGEgc2luZ2xlIGRpZmYgdHJlZSBlbnRyeSBpbnRvIGl0cyBjb21wb25lbnQgZWxlbWVudHMuCisKKyAgICBTZWUgZ2l0LWRpZmYtdHJlZSgxKSBtYW5wYWdlIGZvciBkZXRhaWxzIGFib3V0IHRoZSBmb3JtYXQgb2YgdGhlIGRpZmYKKyAgICBvdXRwdXQuIFRoaXMgbWV0aG9kIHJldHVybnMgYSBkaWN0aW9uYXJ5IHdpdGggdGhlIGZvbGxvd2luZyBlbGVtZW50czoKKworICAgIHNyY19tb2RlIC0gVGhlIG1vZGUgb2YgdGhlIHNvdXJjZSBmaWxlCisgICAgZHN0X21vZGUgLSBUaGUgbW9kZSBvZiB0aGUgZGVzdGluYXRpb24gZmlsZQorICAgIHNyY19zaGExIC0gVGhlIHNoYTEgZm9yIHRoZSBzb3VyY2UgZmlsZQorICAgIGRzdF9zaGExIC0gVGhlIHNoYTEgZnIgdGhlIGRlc3RpbmF0aW9uIGZpbGUKKyAgICBzdGF0dXMgLSBUaGUgb25lIGxldHRlciBzdGF0dXMgb2YgdGhlIGRpZmYgKGkuZS4gJ0EnLCAnTScsICdEJywgZXRjKQorICAgIHN0YXR1c19zY29yZSAtIFRoZSBzY29yZSBmb3IgdGhlIHN0YXR1cyAoYXBwbGljYWJsZSBmb3IgJ0MnIGFuZCAnUicKKyAgICAgICAgICAgICAgICAgICBzdGF0dXNlcykuIFRoaXMgaXMgTm9uZSBpZiB0aGVyZSBpcyBubyBzY29yZS4KKyAgICBzcmMgLSBUaGUgcGF0aCBmb3IgdGhlIHNvdXJjZSBmaWxlLgorICAgIGRzdCAtIFRoZSBwYXRoIGZvciB0aGUgZGVzdGluYXRpb24gZmlsZS4gVGhpcyBpcyBvbmx5IHByZXNlbnQgZm9yCisgICAgICAgICAgY29weSBvciByZW5hbWVzLiBJZiBpdCBpcyBub3QgcHJlc2VudCwgdGhpcyBpcyBOb25lLgorCisgICAgSWYgdGhlIHBhdHRlcm4gaXMgbm90IG1hdGNoZWQsIE5vbmUgaXMgcmV0dXJuZWQuIiIiCisKKyAgICBtYXRjaCA9IGRpZmZUcmVlUGF0dGVybigpLm5leHQoKS5tYXRjaChlbnRyeSkKKyAgICBpZiBtYXRjaDoKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICdzcmNfbW9kZSc6IG1hdGNoLmdyb3VwKDEpLAorICAgICAgICAgICAgJ2RzdF9tb2RlJzogbWF0Y2guZ3JvdXAoMiksCisgICAgICAgICAgICAnc3JjX3NoYTEnOiBtYXRjaC5ncm91cCgzKSwKKyAgICAgICAgICAgICdkc3Rfc2hhMSc6IG1hdGNoLmdyb3VwKDQpLAorICAgICAgICAgICAgJ3N0YXR1cyc6IG1hdGNoLmdyb3VwKDUpLAorICAgICAgICAgICAgJ3N0YXR1c19zY29yZSc6IG1hdGNoLmdyb3VwKDYpLAorICAgICAgICAgICAgJ3NyYyc6IG1hdGNoLmdyb3VwKDcpLAorICAgICAgICAgICAgJ2RzdCc6IG1hdGNoLmdyb3VwKDEwKQorICAgICAgICB9CisgICAgcmV0dXJuIE5vbmUKKworZGVmIGlzTW9kZUV4ZWMobW9kZSk6CisgICAgIyBSZXR1cm5zIFRydWUgaWYgdGhlIGdpdmVuIGdpdCBtb2RlIHJlcHJlc2VudHMgYW4gZXhlY3V0YWJsZSBmaWxlLAorICAgICMgb3RoZXJ3aXNlIEZhbHNlLgorICAgIHJldHVybiBtb2RlWy0zOl0gPT0gIjc1NSIKKworZGVmIGlzTW9kZUV4ZWNDaGFuZ2VkKHNyY19tb2RlLCBkc3RfbW9kZSk6CisgICAgcmV0dXJuIGlzTW9kZUV4ZWMoc3JjX21vZGUpICE9IGlzTW9kZUV4ZWMoZHN0X21vZGUpCisKK2RlZiBwNENtZExpc3QoY21kLCBzdGRpbj1Ob25lLCBzdGRpbl9tb2RlPSd3K2InLCBjYj1Ob25lKToKKworICAgIGlmIGlzaW5zdGFuY2UoY21kLGJhc2VzdHJpbmcpOgorICAgICAgICBjbWQgPSAiLUcgIiArIGNtZAorICAgICAgICBleHBhbmQgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgY21kID0gWyItRyJdICsgY21kCisgICAgICAgIGV4cGFuZCA9IEZhbHNlCisKKyAgICBjbWQgPSBwNF9idWlsZF9jbWQoY21kKQorICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIk9wZW5pbmcgcGlwZTogJXNcbiIgJSBzdHIoY21kKSkKKworICAgICMgVXNlIGEgdGVtcG9yYXJ5IGZpbGUgdG8gYXZvaWQgZGVhZGxvY2tzIHdpdGhvdXQKKyAgICAjIHN1YnByb2Nlc3MuY29tbXVuaWNhdGUoKSwgd2hpY2ggd291bGQgcHV0IGFub3RoZXIgY29weQorICAgICMgb2Ygc3Rkb3V0IGludG8gbWVtb3J5LgorICAgIHN0ZGluX2ZpbGUgPSBOb25lCisgICAgaWYgc3RkaW4gaXMgbm90IE5vbmU6CisgICAgICAgIHN0ZGluX2ZpbGUgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKHByZWZpeD0ncDQtc3RkaW4nLCBtb2RlPXN0ZGluX21vZGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3RkaW4sYmFzZXN0cmluZyk6CisgICAgICAgICAgICBzdGRpbl9maWxlLndyaXRlKHN0ZGluKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIGkgaW4gc3RkaW46CisgICAgICAgICAgICAgICAgc3RkaW5fZmlsZS53cml0ZShpICsgJ1xuJykKKyAgICAgICAgc3RkaW5fZmlsZS5mbHVzaCgpCisgICAgICAgIHN0ZGluX2ZpbGUuc2VlaygwKQorCisgICAgcDQgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9ZXhwYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbl9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorCisgICAgcmVzdWx0ID0gW10KKyAgICB0cnk6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBlbnRyeSA9IG1hcnNoYWwubG9hZChwNC5zdGRvdXQpCisgICAgICAgICAgICBpZiBjYiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjYihlbnRyeSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChlbnRyeSkKKyAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBleGl0Q29kZSA9IHA0LndhaXQoKQorICAgIGlmIGV4aXRDb2RlICE9IDA6CisgICAgICAgIGVudHJ5ID0ge30KKyAgICAgICAgZW50cnlbInA0RXhpdENvZGUiXSA9IGV4aXRDb2RlCisgICAgICAgIHJlc3VsdC5hcHBlbmQoZW50cnkpCisKKyAgICByZXR1cm4gcmVzdWx0CisKK2RlZiBwNENtZChjbWQpOgorICAgIGxpc3QgPSBwNENtZExpc3QoY21kKQorICAgIHJlc3VsdCA9IHt9CisgICAgZm9yIGVudHJ5IGluIGxpc3Q6CisgICAgICAgIHJlc3VsdC51cGRhdGUoZW50cnkpCisgICAgcmV0dXJuIHJlc3VsdDsKKworZGVmIHA0V2hlcmUoZGVwb3RQYXRoKToKKyAgICBpZiBub3QgZGVwb3RQYXRoLmVuZHN3aXRoKCIvIik6CisgICAgICAgIGRlcG90UGF0aCArPSAiLyIKKyAgICBkZXBvdFBhdGhMb25nID0gZGVwb3RQYXRoICsgIi4uLiIKKyAgICBvdXRwdXRMaXN0ID0gcDRDbWRMaXN0KFsid2hlcmUiLCBkZXBvdFBhdGhMb25nXSkKKyAgICBvdXRwdXQgPSBOb25lCisgICAgZm9yIGVudHJ5IGluIG91dHB1dExpc3Q6CisgICAgICAgIGlmICJkZXBvdEZpbGUiIGluIGVudHJ5OgorICAgICAgICAgICAgIyBTZWFyY2ggZm9yIHRoZSBiYXNlIGNsaWVudCBzaWRlIGRlcG90IHBhdGgsIGFzIGxvbmcgYXMgaXQgc3RhcnRzIHdpdGggdGhlIGJyYW5jaCdzIFA0IHBhdGguCisgICAgICAgICAgICAjIFRoZSBiYXNlIHBhdGggYWx3YXlzIGVuZHMgd2l0aCAiLy4uLiIuCisgICAgICAgICAgICBpZiBlbnRyeVsiZGVwb3RGaWxlIl0uZmluZChkZXBvdFBhdGgpID09IDAgYW5kIGVudHJ5WyJkZXBvdEZpbGUiXVstNDpdID09ICIvLi4uIjoKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBlbnRyeQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsaWYgImRhdGEiIGluIGVudHJ5OgorICAgICAgICAgICAgZGF0YSA9IGVudHJ5LmdldCgiZGF0YSIpCisgICAgICAgICAgICBzcGFjZSA9IGRhdGEuZmluZCgiICIpCisgICAgICAgICAgICBpZiBkYXRhWzpzcGFjZV0gPT0gZGVwb3RQYXRoOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGVudHJ5CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICBpZiBvdXRwdXQgPT0gTm9uZToKKyAgICAgICAgcmV0dXJuICIiCisgICAgaWYgb3V0cHV0WyJjb2RlIl0gPT0gImVycm9yIjoKKyAgICAgICAgcmV0dXJuICIiCisgICAgY2xpZW50UGF0aCA9ICIiCisgICAgaWYgInBhdGgiIGluIG91dHB1dDoKKyAgICAgICAgY2xpZW50UGF0aCA9IG91dHB1dC5nZXQoInBhdGgiKQorICAgIGVsaWYgImRhdGEiIGluIG91dHB1dDoKKyAgICAgICAgZGF0YSA9IG91dHB1dC5nZXQoImRhdGEiKQorICAgICAgICBsYXN0U3BhY2UgPSBkYXRhLnJmaW5kKCIgIikKKyAgICAgICAgY2xpZW50UGF0aCA9IGRhdGFbbGFzdFNwYWNlICsgMTpdCisKKyAgICBpZiBjbGllbnRQYXRoLmVuZHN3aXRoKCIuLi4iKToKKyAgICAgICAgY2xpZW50UGF0aCA9IGNsaWVudFBhdGhbOi0zXQorICAgIHJldHVybiBjbGllbnRQYXRoCisKK2RlZiBjdXJyZW50R2l0QnJhbmNoKCk6CisgICAgcmV0dXJuIHJlYWRfcGlwZSgiZ2l0IG5hbWUtcmV2IEhFQUQiKS5zcGxpdCgiICIpWzFdLnN0cmlwKCkKKworZGVmIGlzVmFsaWRHaXREaXIocGF0aCk6CisgICAgaWYgKG9zLnBhdGguZXhpc3RzKHBhdGggKyAiL0hFQUQiKQorICAgICAgICBhbmQgb3MucGF0aC5leGlzdHMocGF0aCArICIvcmVmcyIpIGFuZCBvcy5wYXRoLmV4aXN0cyhwYXRoICsgIi9vYmplY3RzIikpOgorICAgICAgICByZXR1cm4gVHJ1ZTsKKyAgICByZXR1cm4gRmFsc2UKKworZGVmIHBhcnNlUmV2aXNpb24ocmVmKToKKyAgICByZXR1cm4gcmVhZF9waXBlKCJnaXQgcmV2LXBhcnNlICVzIiAlIHJlZikuc3RyaXAoKQorCitkZWYgYnJhbmNoRXhpc3RzKHJlZik6CisgICAgcmV2ID0gcmVhZF9waXBlKFsiZ2l0IiwgInJldi1wYXJzZSIsICItcSIsICItLXZlcmlmeSIsIHJlZl0sCisgICAgICAgICAgICAgICAgICAgICBpZ25vcmVfZXJyb3I9VHJ1ZSkKKyAgICByZXR1cm4gbGVuKHJldikgPiAwCisKK2RlZiBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQoY29tbWl0KToKKyAgICBsb2dNZXNzYWdlID0gIiIKKworICAgICMjIGZpeG1lOiB0aXRsZSBpcyBmaXJzdCBsaW5lIG9mIGNvbW1pdCwgbm90IDFzdCBwYXJhZ3JhcGguCisgICAgZm91bmRUaXRsZSA9IEZhbHNlCisgICAgZm9yIGxvZyBpbiByZWFkX3BpcGVfbGluZXMoImdpdCBjYXQtZmlsZSBjb21taXQgJXMiICUgY29tbWl0KToKKyAgICAgICBpZiBub3QgZm91bmRUaXRsZToKKyAgICAgICAgICAgaWYgbGVuKGxvZykgPT0gMToKKyAgICAgICAgICAgICAgIGZvdW5kVGl0bGUgPSBUcnVlCisgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICBsb2dNZXNzYWdlICs9IGxvZworICAgIHJldHVybiBsb2dNZXNzYWdlCisKK2RlZiBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nKToKKyAgICB2YWx1ZXMgPSB7fQorICAgIGZvciBsaW5lIGluIGxvZy5zcGxpdCgiXG4iKToKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBtID0gcmUuc2VhcmNoIChyIl4gKlxbZ2l0LXA0OiAoLiopXF0kIiwgbGluZSkKKyAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGFzc2lnbm1lbnRzID0gbS5ncm91cCgxKS5zcGxpdCAoJzonKQorICAgICAgICBmb3IgYSBpbiBhc3NpZ25tZW50czoKKyAgICAgICAgICAgIHZhbHMgPSBhLnNwbGl0ICgnPScpCisgICAgICAgICAgICBrZXkgPSB2YWxzWzBdLnN0cmlwKCkKKyAgICAgICAgICAgIHZhbCA9ICgnPScuam9pbiAodmFsc1sxOl0pKS5zdHJpcCgpCisgICAgICAgICAgICBpZiB2YWwuZW5kc3dpdGggKCdcIicpIGFuZCB2YWwuc3RhcnRzd2l0aCgnIicpOgorICAgICAgICAgICAgICAgIHZhbCA9IHZhbFsxOi0xXQorCisgICAgICAgICAgICB2YWx1ZXNba2V5XSA9IHZhbAorCisgICAgcGF0aHMgPSB2YWx1ZXMuZ2V0KCJkZXBvdC1wYXRocyIpCisgICAgaWYgbm90IHBhdGhzOgorICAgICAgICBwYXRocyA9IHZhbHVlcy5nZXQoImRlcG90LXBhdGgiKQorICAgIGlmIHBhdGhzOgorICAgICAgICB2YWx1ZXNbJ2RlcG90LXBhdGhzJ10gPSBwYXRocy5zcGxpdCgnLCcpCisgICAgcmV0dXJuIHZhbHVlcworCitkZWYgZ2l0QnJhbmNoRXhpc3RzKGJyYW5jaCk6CisgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oWyJnaXQiLCAicmV2LXBhcnNlIiwgYnJhbmNoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKTsKKyAgICByZXR1cm4gcHJvYy53YWl0KCkgPT0gMDsKKworX2dpdENvbmZpZyA9IHt9CisKK2RlZiBnaXRDb25maWcoa2V5LCB0eXBlU3BlY2lmaWVyPU5vbmUpOgorICAgIGlmIG5vdCBfZ2l0Q29uZmlnLmhhc19rZXkoa2V5KToKKyAgICAgICAgY21kID0gWyAiZ2l0IiwgImNvbmZpZyIgXQorICAgICAgICBpZiB0eXBlU3BlY2lmaWVyOgorICAgICAgICAgICAgY21kICs9IFsgdHlwZVNwZWNpZmllciBdCisgICAgICAgIGNtZCArPSBbIGtleSBdCisgICAgICAgIHMgPSByZWFkX3BpcGUoY21kLCBpZ25vcmVfZXJyb3I9VHJ1ZSkKKyAgICAgICAgX2dpdENvbmZpZ1trZXldID0gcy5zdHJpcCgpCisgICAgcmV0dXJuIF9naXRDb25maWdba2V5XQorCitkZWYgZ2l0Q29uZmlnQm9vbChrZXkpOgorICAgICIiIlJldHVybiBhIGJvb2wsIHVzaW5nIGdpdCBjb25maWcgLS1ib29sLiAgSXQgaXMgVHJ1ZSBvbmx5IGlmIHRoZQorICAgICAgIHZhcmlhYmxlIGlzIHNldCB0byB0cnVlLCBhbmQgRmFsc2UgaWYgc2V0IHRvIGZhbHNlIG9yIG5vdCBwcmVzZW50CisgICAgICAgaW4gdGhlIGNvbmZpZy4iIiIKKworICAgIGlmIG5vdCBfZ2l0Q29uZmlnLmhhc19rZXkoa2V5KToKKyAgICAgICAgX2dpdENvbmZpZ1trZXldID0gZ2l0Q29uZmlnKGtleSwgJy0tYm9vbCcpID09ICJ0cnVlIgorICAgIHJldHVybiBfZ2l0Q29uZmlnW2tleV0KKworZGVmIGdpdENvbmZpZ0ludChrZXkpOgorICAgIGlmIG5vdCBfZ2l0Q29uZmlnLmhhc19rZXkoa2V5KToKKyAgICAgICAgY21kID0gWyAiZ2l0IiwgImNvbmZpZyIsICItLWludCIsIGtleSBdCisgICAgICAgIHMgPSByZWFkX3BpcGUoY21kLCBpZ25vcmVfZXJyb3I9VHJ1ZSkKKyAgICAgICAgdiA9IHMuc3RyaXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfZ2l0Q29uZmlnW2tleV0gPSBpbnQoZ2l0Q29uZmlnKGtleSwgJy0taW50JykpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgX2dpdENvbmZpZ1trZXldID0gTm9uZQorICAgIHJldHVybiBfZ2l0Q29uZmlnW2tleV0KKworZGVmIGdpdENvbmZpZ0xpc3Qoa2V5KToKKyAgICBpZiBub3QgX2dpdENvbmZpZy5oYXNfa2V5KGtleSk6CisgICAgICAgIHMgPSByZWFkX3BpcGUoWyJnaXQiLCAiY29uZmlnIiwgIi0tZ2V0LWFsbCIsIGtleV0sIGlnbm9yZV9lcnJvcj1UcnVlKQorICAgICAgICBfZ2l0Q29uZmlnW2tleV0gPSBzLnN0cmlwKCkuc3BsaXQob3MubGluZXNlcCkKKyAgICAgICAgaWYgX2dpdENvbmZpZ1trZXldID09IFsnJ106CisgICAgICAgICAgICBfZ2l0Q29uZmlnW2tleV0gPSBbXQorICAgIHJldHVybiBfZ2l0Q29uZmlnW2tleV0KKworZGVmIHA0QnJhbmNoZXNJbkdpdChicmFuY2hlc0FyZUluUmVtb3Rlcz1UcnVlKToKKyAgICAiIiJGaW5kIGFsbCB0aGUgYnJhbmNoZXMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAicDQvIiwgbG9va2luZworICAgICAgIGluIHJlbW90ZXMgb3IgaGVhZHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBhcmd1bWVudC4gIFJldHVybgorICAgICAgIGEgZGljdGlvbmFyeSBvZiB7IGJyYW5jaDogcmV2aXNpb24gfSBmb3IgZWFjaCBvbmUgZm91bmQuCisgICAgICAgVGhlIGJyYW5jaCBuYW1lcyBhcmUgdGhlIHNob3J0IG5hbWVzLCB3aXRob3V0IGFueQorICAgICAgICJwNC8iIHByZWZpeC4iIiIKKworICAgIGJyYW5jaGVzID0ge30KKworICAgIGNtZGxpbmUgPSAiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljICIKKyAgICBpZiBicmFuY2hlc0FyZUluUmVtb3RlczoKKyAgICAgICAgY21kbGluZSArPSAiLS1yZW1vdGVzIgorICAgIGVsc2U6CisgICAgICAgIGNtZGxpbmUgKz0gIi0tYnJhbmNoZXMiCisKKyAgICBmb3IgbGluZSBpbiByZWFkX3BpcGVfbGluZXMoY21kbGluZSk6CisgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKworICAgICAgICAjIG9ubHkgaW1wb3J0IHRvIHA0LworICAgICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKCdwNC8nKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgc3BlY2lhbCBzeW1ib2xpYyByZWYgdG8gcDQvbWFzdGVyCisgICAgICAgIGlmIGxpbmUgPT0gInA0L0hFQUQiOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAjIHN0cmlwIG9mZiBwNC8gcHJlZml4CisgICAgICAgIGJyYW5jaCA9IGxpbmVbbGVuKCJwNC8iKTpdCisKKyAgICAgICAgYnJhbmNoZXNbYnJhbmNoXSA9IHBhcnNlUmV2aXNpb24obGluZSkKKworICAgIHJldHVybiBicmFuY2hlcworCitkZWYgYnJhbmNoX2V4aXN0cyhicmFuY2gpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRoZSBnaXZlbiByZWYgbmFtZSByZWFsbHkgZXhpc3RzLiIiIgorCisgICAgY21kID0gWyAiZ2l0IiwgInJldi1wYXJzZSIsICItLXN5bWJvbGljIiwgIi0tdmVyaWZ5IiwgYnJhbmNoIF0KKyAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgb3V0LCBfID0gcC5jb21tdW5pY2F0ZSgpCisgICAgaWYgcC5yZXR1cm5jb2RlOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAjIGV4cGVjdCBleGFjdGx5IG9uZSBsaW5lIG9mIG91dHB1dDogdGhlIGJyYW5jaCBuYW1lCisgICAgcmV0dXJuIG91dC5yc3RyaXAoKSA9PSBicmFuY2gKKworZGVmIGZpbmRVcHN0cmVhbUJyYW5jaFBvaW50KGhlYWQgPSAiSEVBRCIpOgorICAgIGJyYW5jaGVzID0gcDRCcmFuY2hlc0luR2l0KCkKKyAgICAjIG1hcCBmcm9tIGRlcG90LXBhdGggdG8gYnJhbmNoIG5hbWUKKyAgICBicmFuY2hCeURlcG90UGF0aCA9IHt9CisgICAgZm9yIGJyYW5jaCBpbiBicmFuY2hlcy5rZXlzKCk6CisgICAgICAgIHRpcCA9IGJyYW5jaGVzW2JyYW5jaF0KKyAgICAgICAgbG9nID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KHRpcCkKKyAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nKQorICAgICAgICBpZiBzZXR0aW5ncy5oYXNfa2V5KCJkZXBvdC1wYXRocyIpOgorICAgICAgICAgICAgcGF0aHMgPSAiLCIuam9pbihzZXR0aW5nc1siZGVwb3QtcGF0aHMiXSkKKyAgICAgICAgICAgIGJyYW5jaEJ5RGVwb3RQYXRoW3BhdGhzXSA9ICJyZW1vdGVzL3A0LyIgKyBicmFuY2gKKworICAgIHNldHRpbmdzID0gTm9uZQorICAgIHBhcmVudCA9IDAKKyAgICB3aGlsZSBwYXJlbnQgPCA2NTUzNToKKyAgICAgICAgY29tbWl0ID0gaGVhZCArICJ+JXMiICUgcGFyZW50CisgICAgICAgIGxvZyA9IGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChjb21taXQpCisgICAgICAgIHNldHRpbmdzID0gZXh0cmFjdFNldHRpbmdzR2l0TG9nKGxvZykKKyAgICAgICAgaWYgc2V0dGluZ3MuaGFzX2tleSgiZGVwb3QtcGF0aHMiKToKKyAgICAgICAgICAgIHBhdGhzID0gIiwiLmpvaW4oc2V0dGluZ3NbImRlcG90LXBhdGhzIl0pCisgICAgICAgICAgICBpZiBicmFuY2hCeURlcG90UGF0aC5oYXNfa2V5KHBhdGhzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gW2JyYW5jaEJ5RGVwb3RQYXRoW3BhdGhzXSwgc2V0dGluZ3NdCisKKyAgICAgICAgcGFyZW50ID0gcGFyZW50ICsgMQorCisgICAgcmV0dXJuIFsiIiwgc2V0dGluZ3NdCisKK2RlZiBjcmVhdGVPclVwZGF0ZUJyYW5jaGVzRnJvbU9yaWdpbihsb2NhbFJlZlByZWZpeCA9ICJyZWZzL3JlbW90ZXMvcDQvIiwgc2lsZW50PVRydWUpOgorICAgIGlmIG5vdCBzaWxlbnQ6CisgICAgICAgIHByaW50ICgiQ3JlYXRpbmcvdXBkYXRpbmcgYnJhbmNoKGVzKSBpbiAlcyBiYXNlZCBvbiBvcmlnaW4gYnJhbmNoKGVzKSIKKyAgICAgICAgICAgICAgICUgbG9jYWxSZWZQcmVmaXgpCisKKyAgICBvcmlnaW5QcmVmaXggPSAib3JpZ2luL3A0LyIKKworICAgIGZvciBsaW5lIGluIHJlYWRfcGlwZV9saW5lcygiZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIC0tcmVtb3RlcyIpOgorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIChub3QgbGluZS5zdGFydHN3aXRoKG9yaWdpblByZWZpeCkpIG9yIGxpbmUuZW5kc3dpdGgoIkhFQUQiKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaGVhZE5hbWUgPSBsaW5lW2xlbihvcmlnaW5QcmVmaXgpOl0KKyAgICAgICAgcmVtb3RlSGVhZCA9IGxvY2FsUmVmUHJlZml4ICsgaGVhZE5hbWUKKyAgICAgICAgb3JpZ2luSGVhZCA9IGxpbmUKKworICAgICAgICBvcmlnaW5hbCA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQob3JpZ2luSGVhZCkpCisgICAgICAgIGlmIChub3Qgb3JpZ2luYWwuaGFzX2tleSgnZGVwb3QtcGF0aHMnKQorICAgICAgICAgICAgb3Igbm90IG9yaWdpbmFsLmhhc19rZXkoJ2NoYW5nZScpKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgdXBkYXRlID0gRmFsc2UKKyAgICAgICAgaWYgbm90IGdpdEJyYW5jaEV4aXN0cyhyZW1vdGVIZWFkKToKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgImNyZWF0aW5nICVzIiAlIHJlbW90ZUhlYWQKKyAgICAgICAgICAgIHVwZGF0ZSA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNldHRpbmdzID0gZXh0cmFjdFNldHRpbmdzR2l0TG9nKGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChyZW1vdGVIZWFkKSkKKyAgICAgICAgICAgIGlmIHNldHRpbmdzLmhhc19rZXkoJ2NoYW5nZScpID4gMDoKKyAgICAgICAgICAgICAgICBpZiBzZXR0aW5nc1snZGVwb3QtcGF0aHMnXSA9PSBvcmlnaW5hbFsnZGVwb3QtcGF0aHMnXToKKyAgICAgICAgICAgICAgICAgICAgb3JpZ2luUDRDaGFuZ2UgPSBpbnQob3JpZ2luYWxbJ2NoYW5nZSddKQorICAgICAgICAgICAgICAgICAgICBwNENoYW5nZSA9IGludChzZXR0aW5nc1snY2hhbmdlJ10pCisgICAgICAgICAgICAgICAgICAgIGlmIG9yaWdpblA0Q2hhbmdlID4gcDRDaGFuZ2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAoIiVzICglcykgaXMgbmV3ZXIgdGhhbiAlcyAoJXMpLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVwZGF0aW5nIHA0IGJyYW5jaCBmcm9tIG9yaWdpbi4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAob3JpZ2luSGVhZCwgb3JpZ2luUDRDaGFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlSGVhZCwgcDRDaGFuZ2UpKQorICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICgiSWdub3Jpbmc6ICVzIHdhcyBpbXBvcnRlZCBmcm9tICVzIHdoaWxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyB3YXMgaW1wb3J0ZWQgZnJvbSAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG9yaWdpbkhlYWQsICcsJy5qb2luKG9yaWdpbmFsWydkZXBvdC1wYXRocyddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZUhlYWQsICcsJy5qb2luKHNldHRpbmdzWydkZXBvdC1wYXRocyddKSkpCisKKyAgICAgICAgaWYgdXBkYXRlOgorICAgICAgICAgICAgc3lzdGVtKCJnaXQgdXBkYXRlLXJlZiAlcyAlcyIgJSAocmVtb3RlSGVhZCwgb3JpZ2luSGVhZCkpCisKK2RlZiBvcmlnaW5QNEJyYW5jaGVzRXhpc3QoKToKKyAgICAgICAgcmV0dXJuIGdpdEJyYW5jaEV4aXN0cygib3JpZ2luIikgb3IgZ2l0QnJhbmNoRXhpc3RzKCJvcmlnaW4vcDQiKSBvciBnaXRCcmFuY2hFeGlzdHMoIm9yaWdpbi9wNC9tYXN0ZXIiKQorCisKK2RlZiBwNFBhcnNlTnVtZXJpY0NoYW5nZVJhbmdlKHBhcnRzKToKKyAgICBjaGFuZ2VTdGFydCA9IGludChwYXJ0c1swXVsxOl0pCisgICAgaWYgcGFydHNbMV0gPT0gJyNoZWFkJzoKKyAgICAgICAgY2hhbmdlRW5kID0gcDRfbGFzdF9jaGFuZ2UoKQorICAgIGVsc2U6CisgICAgICAgIGNoYW5nZUVuZCA9IGludChwYXJ0c1sxXSkKKworICAgIHJldHVybiAoY2hhbmdlU3RhcnQsIGNoYW5nZUVuZCkKKworZGVmIGNob29zZUJsb2NrU2l6ZShibG9ja1NpemUpOgorICAgIGlmIGJsb2NrU2l6ZToKKyAgICAgICAgcmV0dXJuIGJsb2NrU2l6ZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBkZWZhdWx0QmxvY2tTaXplCisKK2RlZiBwNENoYW5nZXNGb3JQYXRocyhkZXBvdFBhdGhzLCBjaGFuZ2VSYW5nZSwgcmVxdWVzdGVkQmxvY2tTaXplKToKKyAgICBhc3NlcnQgZGVwb3RQYXRocworCisgICAgIyBQYXJzZSB0aGUgY2hhbmdlIHJhbmdlIGludG8gc3RhcnQgYW5kIGVuZC4gVHJ5IHRvIGZpbmQgaW50ZWdlcgorICAgICMgcmV2aXNpb24gcmFuZ2VzIGFzIHRoZXNlIGNhbiBiZSBicm9rZW4gdXAgaW50byBibG9ja3MgdG8gYXZvaWQKKyAgICAjIGhpdHRpbmcgc2VydmVyLXNpZGUgbGltaXRzIChtYXhyb3dzLCBtYXhzY2FucmVzdWx0cykuIEJ1dCBpZgorICAgICMgdGhhdCBkb2Vzbid0IHdvcmssIGZhbGwgYmFjayB0byB1c2luZyB0aGUgcmF3IHJldmlzaW9uIHNwZWNpZmllcgorICAgICMgc3RyaW5ncywgd2l0aG91dCB1c2luZyBibG9jayBtb2RlLgorCisgICAgaWYgY2hhbmdlUmFuZ2UgaXMgTm9uZSBvciBjaGFuZ2VSYW5nZSA9PSAnJzoKKyAgICAgICAgY2hhbmdlU3RhcnQgPSAxCisgICAgICAgIGNoYW5nZUVuZCA9IHA0X2xhc3RfY2hhbmdlKCkKKyAgICAgICAgYmxvY2tfc2l6ZSA9IGNob29zZUJsb2NrU2l6ZShyZXF1ZXN0ZWRCbG9ja1NpemUpCisgICAgZWxzZToKKyAgICAgICAgcGFydHMgPSBjaGFuZ2VSYW5nZS5zcGxpdCgnLCcpCisgICAgICAgIGFzc2VydCBsZW4ocGFydHMpID09IDIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgKGNoYW5nZVN0YXJ0LCBjaGFuZ2VFbmQpID0gcDRQYXJzZU51bWVyaWNDaGFuZ2VSYW5nZShwYXJ0cykKKyAgICAgICAgICAgIGJsb2NrX3NpemUgPSBjaG9vc2VCbG9ja1NpemUocmVxdWVzdGVkQmxvY2tTaXplKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBjaGFuZ2VTdGFydCA9IHBhcnRzWzBdWzE6XQorICAgICAgICAgICAgY2hhbmdlRW5kID0gcGFydHNbMV0KKyAgICAgICAgICAgIGlmIHJlcXVlc3RlZEJsb2NrU2l6ZToKKyAgICAgICAgICAgICAgICBkaWUoImNhbm5vdCB1c2UgLS1jaGFuZ2VzLWJsb2NrLXNpemUgd2l0aCBub24tbnVtZXJpYyByZXZpc2lvbnMiKQorICAgICAgICAgICAgYmxvY2tfc2l6ZSA9IE5vbmUKKworICAgICMgQWNjdW11bGF0ZSBjaGFuZ2UgbnVtYmVycyBpbiBhIGRpY3Rpb25hcnkgdG8gYXZvaWQgZHVwbGljYXRlcworICAgIGNoYW5nZXMgPSB7fQorCisgICAgZm9yIHAgaW4gZGVwb3RQYXRoczoKKyAgICAgICAgIyBSZXRyaWV2ZSBjaGFuZ2VzIGEgYmxvY2sgYXQgYSB0aW1lLCB0byBwcmV2ZW50IHJ1bm5pbmcKKyAgICAgICAgIyBpbnRvIGEgTWF4UmVzdWx0cy9NYXhTY2FuUm93cyBlcnJvciBmcm9tIHRoZSBzZXJ2ZXIuCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGNtZCA9IFsnY2hhbmdlcyddCisKKyAgICAgICAgICAgIGlmIGJsb2NrX3NpemU6CisgICAgICAgICAgICAgICAgZW5kID0gbWluKGNoYW5nZUVuZCwgY2hhbmdlU3RhcnQgKyBibG9ja19zaXplKQorICAgICAgICAgICAgICAgIHJldmlzaW9uUmFuZ2UgPSAiJWQsJWQiICUgKGNoYW5nZVN0YXJ0LCBlbmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldmlzaW9uUmFuZ2UgPSAiJXMsJXMiICUgKGNoYW5nZVN0YXJ0LCBjaGFuZ2VFbmQpCisKKyAgICAgICAgICAgIGNtZCArPSBbIiVzLi4uQCVzIiAlIChwLCByZXZpc2lvblJhbmdlKV0KKworICAgICAgICAgICAgZm9yIGxpbmUgaW4gcDRfcmVhZF9waXBlX2xpbmVzKGNtZCk6CisgICAgICAgICAgICAgICAgY2hhbmdlTnVtID0gaW50KGxpbmUuc3BsaXQoIiAiKVsxXSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VzW2NoYW5nZU51bV0gPSBUcnVlCisKKyAgICAgICAgICAgIGlmIG5vdCBibG9ja19zaXplOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIGVuZCA+PSBjaGFuZ2VFbmQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgY2hhbmdlU3RhcnQgPSBlbmQgKyAxCisKKyAgICBjaGFuZ2VsaXN0ID0gY2hhbmdlcy5rZXlzKCkKKyAgICBjaGFuZ2VsaXN0LnNvcnQoKQorICAgIHJldHVybiBjaGFuZ2VsaXN0CisKK2RlZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIHByZWZpeCk6CisgICAgIyBUaGlzIG1ldGhvZCB0cmllcyB0byByZW1lZHkgYSBwb3RlbnRpYWwgbWl4ZWQtY2FzZSBpc3N1ZToKKyAgICAjCisgICAgIyBJZiBVc2VyQSBhZGRzICAvL2RlcG90L0RpckEvZmlsZTEKKyAgICAjIGFuZCBVc2VyQiBhZGRzIC8vZGVwb3QvZGlyYS9maWxlMgorICAgICMKKyAgICAjIHdlIG1heSBvciBtYXkgbm90IGhhdmUgYSBwcm9ibGVtLiBJZiB5b3UgaGF2ZSBjb3JlLmlnbm9yZWNhc2U9dHJ1ZSwKKyAgICAjIHdlIHRyZWF0IERpckEgYW5kIGRpcmEgYXMgdGhlIHNhbWUgZGlyZWN0b3J5CisgICAgaWYgZ2l0Q29uZmlnQm9vbCgiY29yZS5pZ25vcmVjYXNlIik6CisgICAgICAgIHJldHVybiBwYXRoLmxvd2VyKCkuc3RhcnRzd2l0aChwcmVmaXgubG93ZXIoKSkKKyAgICByZXR1cm4gcGF0aC5zdGFydHN3aXRoKHByZWZpeCkKKworZGVmIGdldENsaWVudFNwZWMoKToKKyAgICAiIiJMb29rIGF0IHRoZSBwNCBjbGllbnQgc3BlYywgY3JlYXRlIGEgVmlldygpIG9iamVjdCB0aGF0IGNvbnRhaW5zCisgICAgICAgYWxsIHRoZSBtYXBwaW5ncywgYW5kIHJldHVybiBpdC4iIiIKKworICAgIHNwZWNMaXN0ID0gcDRDbWRMaXN0KCJjbGllbnQgLW8iKQorICAgIGlmIGxlbihzcGVjTGlzdCkgIT0gMToKKyAgICAgICAgZGllKCdPdXRwdXQgZnJvbSAiY2xpZW50IC1vIiBpcyAlZCBsaW5lcywgZXhwZWN0aW5nIDEnICUKKyAgICAgICAgICAgIGxlbihzcGVjTGlzdCkpCisKKyAgICAjIGRpY3Rpb25hcnkgb2YgYWxsIGNsaWVudCBwYXJhbWV0ZXJzCisgICAgZW50cnkgPSBzcGVjTGlzdFswXQorCisgICAgIyB0aGUgLy9jbGllbnQvIG5hbWUKKyAgICBjbGllbnRfbmFtZSA9IGVudHJ5WyJDbGllbnQiXQorCisgICAgIyBqdXN0IHRoZSBrZXlzIHRoYXQgc3RhcnQgd2l0aCAiVmlldyIKKyAgICB2aWV3X2tleXMgPSBbIGsgZm9yIGsgaW4gZW50cnkua2V5cygpIGlmIGsuc3RhcnRzd2l0aCgiVmlldyIpIF0KKworICAgICMgaG9sZCB0aGlzIG5ldyBWaWV3CisgICAgdmlldyA9IFZpZXcoY2xpZW50X25hbWUpCisKKyAgICAjIGFwcGVuZCB0aGUgbGluZXMsIGluIG9yZGVyLCB0byB0aGUgdmlldworICAgIGZvciB2aWV3X251bSBpbiByYW5nZShsZW4odmlld19rZXlzKSk6CisgICAgICAgIGsgPSAiVmlldyVkIiAlIHZpZXdfbnVtCisgICAgICAgIGlmIGsgbm90IGluIHZpZXdfa2V5czoKKyAgICAgICAgICAgIGRpZSgiRXhwZWN0ZWQgdmlldyBrZXkgJXMgbWlzc2luZyIgJSBrKQorICAgICAgICB2aWV3LmFwcGVuZChlbnRyeVtrXSkKKworICAgIHJldHVybiB2aWV3CisKK2RlZiBnZXRDbGllbnRSb290KCk6CisgICAgIiIiR3JhYiB0aGUgY2xpZW50IGRpcmVjdG9yeS4iIiIKKworICAgIG91dHB1dCA9IHA0Q21kTGlzdCgiY2xpZW50IC1vIikKKyAgICBpZiBsZW4ob3V0cHV0KSAhPSAxOgorICAgICAgICBkaWUoJ091dHB1dCBmcm9tICJjbGllbnQgLW8iIGlzICVkIGxpbmVzLCBleHBlY3RpbmcgMScgJSBsZW4ob3V0cHV0KSkKKworICAgIGVudHJ5ID0gb3V0cHV0WzBdCisgICAgaWYgIlJvb3QiIG5vdCBpbiBlbnRyeToKKyAgICAgICAgZGllKCdDbGllbnQgaGFzIG5vICJSb290IicpCisKKyAgICByZXR1cm4gZW50cnlbIlJvb3QiXQorCisjCisjIFA0IHdpbGRjYXJkcyBhcmUgbm90IGFsbG93ZWQgaW4gZmlsZW5hbWVzLiAgUDQgY29tcGxhaW5zCisjIGlmIHlvdSBzaW1wbHkgYWRkIHRoZW0sIGJ1dCB5b3UgY2FuIGZvcmNlIGl0IHdpdGggIi1mIiwgaW4KKyMgd2hpY2ggY2FzZSBpdCB0cmFuc2xhdGVzIHRoZW0gaW50byAleHggZW5jb2RpbmcgaW50ZXJuYWxseS4KKyMKK2RlZiB3aWxkY2FyZF9kZWNvZGUocGF0aCk6CisgICAgIyBTZWFyY2ggZm9yIGFuZCBmaXgganVzdCB0aGVzZSBmb3VyIGNoYXJhY3RlcnMuICBEbyAlIGxhc3Qgc28KKyAgICAjIHRoYXQgZml4aW5nIGl0IGRvZXMgbm90IGluYWR2ZXJ0ZW50bHkgY3JlYXRlIG5ldyAlLWVzY2FwZXMuCisgICAgIyBDYW5ub3QgaGF2ZSAqIGluIGEgZmlsZW5hbWUgaW4gd2luZG93czsgdW50ZXN0ZWQgYXMgdG8KKyAgICAjIHdoYXQgcDQgd291bGQgZG8gaW4gc3VjaCBhIGNhc2UuCisgICAgaWYgbm90IHBsYXRmb3JtLnN5c3RlbSgpID09ICJXaW5kb3dzIjoKKyAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgiJTJBIiwgIioiKQorICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoIiUyMyIsICIjIikgXAorICAgICAgICAgICAgICAgLnJlcGxhY2UoIiU0MCIsICJAIikgXAorICAgICAgICAgICAgICAgLnJlcGxhY2UoIiUyNSIsICIlIikKKyAgICByZXR1cm4gcGF0aAorCitkZWYgd2lsZGNhcmRfZW5jb2RlKHBhdGgpOgorICAgICMgZG8gJSBmaXJzdCB0byBhdm9pZCBkb3VibGUtZW5jb2RpbmcgdGhlICVzIGludHJvZHVjZWQgaGVyZQorICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoIiUiLCAiJTI1IikgXAorICAgICAgICAgICAgICAgLnJlcGxhY2UoIioiLCAiJTJBIikgXAorICAgICAgICAgICAgICAgLnJlcGxhY2UoIiMiLCAiJTIzIikgXAorICAgICAgICAgICAgICAgLnJlcGxhY2UoIkAiLCAiJTQwIikKKyAgICByZXR1cm4gcGF0aAorCitkZWYgd2lsZGNhcmRfcHJlc2VudChwYXRoKToKKyAgICBtID0gcmUuc2VhcmNoKCJbKiNAJV0iLCBwYXRoKQorICAgIHJldHVybiBtIGlzIG5vdCBOb25lCisKK2NsYXNzIExhcmdlRmlsZVN5c3RlbShvYmplY3QpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGxhcmdlIGZpbGUgc3lzdGVtIHN1cHBvcnQuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd3JpdGVUb0dpdFN0cmVhbSk6CisgICAgICAgIHNlbGYubGFyZ2VGaWxlcyA9IHNldCgpCisgICAgICAgIHNlbGYud3JpdGVUb0dpdFN0cmVhbSA9IHdyaXRlVG9HaXRTdHJlYW0KKworICAgIGRlZiBnZW5lcmF0ZVBvaW50ZXIoc2VsZiwgY2xvbmVEZXN0aW5hdGlvbiwgY29udGVudEZpbGUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbnRlbnQgb2YgYSBwb2ludGVyIGZpbGUgdGhhdCBpcyBzdG9yZWQgaW4gR2l0IGluc3RlYWQgb2YKKyAgICAgICAgICAgdGhlIGFjdHVhbCBjb250ZW50LiIiIgorICAgICAgICBhc3NlcnQgRmFsc2UsICJNZXRob2QgJ2dlbmVyYXRlUG9pbnRlcicgcmVxdWlyZWQgaW4gIiArIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICBkZWYgcHVzaEZpbGUoc2VsZiwgbG9jYWxMYXJnZUZpbGUpOgorICAgICAgICAiIiJQdXNoIHRoZSBhY3R1YWwgY29udGVudCB3aGljaCBpcyBub3Qgc3RvcmVkIGluIHRoZSBHaXQgcmVwb3NpdG9yeSB0bworICAgICAgICAgICBhIHNlcnZlci4iIiIKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAiTWV0aG9kICdwdXNoRmlsZScgcmVxdWlyZWQgaW4gIiArIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKKyAgICBkZWYgaGFzTGFyZ2VGaWxlRXh0ZW5zaW9uKHNlbGYsIHJlbFBhdGgpOgorICAgICAgICByZXR1cm4gcmVkdWNlKAorICAgICAgICAgICAgbGFtYmRhIGEsIGI6IGEgb3IgYiwKKyAgICAgICAgICAgIFtyZWxQYXRoLmVuZHN3aXRoKCcuJyArIGUpIGZvciBlIGluIGdpdENvbmZpZ0xpc3QoJ2dpdC1wNC5sYXJnZUZpbGVFeHRlbnNpb25zJyldLAorICAgICAgICAgICAgRmFsc2UKKyAgICAgICAgKQorCisgICAgZGVmIGdlbmVyYXRlVGVtcEZpbGUoc2VsZiwgY29udGVudHMpOgorICAgICAgICBjb250ZW50RmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShwcmVmaXg9J2dpdC1wNC1sYXJnZS1maWxlJywgZGVsZXRlPUZhbHNlKQorICAgICAgICBmb3IgZCBpbiBjb250ZW50czoKKyAgICAgICAgICAgIGNvbnRlbnRGaWxlLndyaXRlKGQpCisgICAgICAgIGNvbnRlbnRGaWxlLmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIGNvbnRlbnRGaWxlLm5hbWUKKworICAgIGRlZiBleGNlZWRzTGFyZ2VGaWxlVGhyZXNob2xkKHNlbGYsIHJlbFBhdGgsIGNvbnRlbnRzKToKKyAgICAgICAgaWYgZ2l0Q29uZmlnSW50KCdnaXQtcDQubGFyZ2VGaWxlVGhyZXNob2xkJyk6CisgICAgICAgICAgICBjb250ZW50c1NpemUgPSBzdW0obGVuKGQpIGZvciBkIGluIGNvbnRlbnRzKQorICAgICAgICAgICAgaWYgY29udGVudHNTaXplID4gZ2l0Q29uZmlnSW50KCdnaXQtcDQubGFyZ2VGaWxlVGhyZXNob2xkJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgZ2l0Q29uZmlnSW50KCdnaXQtcDQubGFyZ2VGaWxlQ29tcHJlc3NlZFRocmVzaG9sZCcpOgorICAgICAgICAgICAgY29udGVudHNTaXplID0gc3VtKGxlbihkKSBmb3IgZCBpbiBjb250ZW50cykKKyAgICAgICAgICAgIGlmIGNvbnRlbnRzU2l6ZSA8PSBnaXRDb25maWdJbnQoJ2dpdC1wNC5sYXJnZUZpbGVDb21wcmVzc2VkVGhyZXNob2xkJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBjb250ZW50VGVtcEZpbGUgPSBzZWxmLmdlbmVyYXRlVGVtcEZpbGUoY29udGVudHMpCisgICAgICAgICAgICBjb21wcmVzc2VkQ29udGVudEZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUocHJlZml4PSdnaXQtcDQtbGFyZ2UtZmlsZScsIGRlbGV0ZT1GYWxzZSkKKyAgICAgICAgICAgIHpmID0gemlwZmlsZS5aaXBGaWxlKGNvbXByZXNzZWRDb250ZW50RmlsZS5uYW1lLCBtb2RlPSd3JykKKyAgICAgICAgICAgIHpmLndyaXRlKGNvbnRlbnRUZW1wRmlsZSwgY29tcHJlc3NfdHlwZT16aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICAgICAgICAgIHpmLmNsb3NlKCkKKyAgICAgICAgICAgIGNvbXByZXNzZWRDb250ZW50c1NpemUgPSB6Zi5pbmZvbGlzdCgpWzBdLmNvbXByZXNzX3NpemUKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb250ZW50VGVtcEZpbGUpCisgICAgICAgICAgICBvcy5yZW1vdmUoY29tcHJlc3NlZENvbnRlbnRGaWxlLm5hbWUpCisgICAgICAgICAgICBpZiBjb21wcmVzc2VkQ29udGVudHNTaXplID4gZ2l0Q29uZmlnSW50KCdnaXQtcDQubGFyZ2VGaWxlQ29tcHJlc3NlZFRocmVzaG9sZCcpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFkZExhcmdlRmlsZShzZWxmLCByZWxQYXRoKToKKyAgICAgICAgc2VsZi5sYXJnZUZpbGVzLmFkZChyZWxQYXRoKQorCisgICAgZGVmIHJlbW92ZUxhcmdlRmlsZShzZWxmLCByZWxQYXRoKToKKyAgICAgICAgc2VsZi5sYXJnZUZpbGVzLnJlbW92ZShyZWxQYXRoKQorCisgICAgZGVmIGlzTGFyZ2VGaWxlKHNlbGYsIHJlbFBhdGgpOgorICAgICAgICByZXR1cm4gcmVsUGF0aCBpbiBzZWxmLmxhcmdlRmlsZXMKKworICAgIGRlZiBwcm9jZXNzQ29udGVudChzZWxmLCBnaXRfbW9kZSwgcmVsUGF0aCwgY29udGVudHMpOgorICAgICAgICAiIiJQcm9jZXNzZXMgdGhlIGNvbnRlbnQgb2YgZ2l0IGZhc3QgaW1wb3J0LiBUaGlzIG1ldGhvZCBkZWNpZGVzIGlmIGEKKyAgICAgICAgICAgZmlsZSBpcyBzdG9yZWQgaW4gdGhlIGxhcmdlIGZpbGUgc3lzdGVtIGFuZCBoYW5kbGVzIGFsbCBuZWNlc3NhcnkKKyAgICAgICAgICAgc3RlcHMuIiIiCisgICAgICAgIGlmIHNlbGYuZXhjZWVkc0xhcmdlRmlsZVRocmVzaG9sZChyZWxQYXRoLCBjb250ZW50cykgb3Igc2VsZi5oYXNMYXJnZUZpbGVFeHRlbnNpb24ocmVsUGF0aCk6CisgICAgICAgICAgICBjb250ZW50VGVtcEZpbGUgPSBzZWxmLmdlbmVyYXRlVGVtcEZpbGUoY29udGVudHMpCisgICAgICAgICAgICAoZ2l0X21vZGUsIGNvbnRlbnRzLCBsb2NhbExhcmdlRmlsZSkgPSBzZWxmLmdlbmVyYXRlUG9pbnRlcihjb250ZW50VGVtcEZpbGUpCisKKyAgICAgICAgICAgICMgTW92ZSB0ZW1wIGZpbGUgdG8gZmluYWwgbG9jYXRpb24gaW4gbGFyZ2UgZmlsZSBzeXN0ZW0KKyAgICAgICAgICAgIGxhcmdlRmlsZURpciA9IG9zLnBhdGguZGlybmFtZShsb2NhbExhcmdlRmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGxhcmdlRmlsZURpcik6CisgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMobGFyZ2VGaWxlRGlyKQorICAgICAgICAgICAgc2h1dGlsLm1vdmUoY29udGVudFRlbXBGaWxlLCBsb2NhbExhcmdlRmlsZSkKKyAgICAgICAgICAgIHNlbGYuYWRkTGFyZ2VGaWxlKHJlbFBhdGgpCisgICAgICAgICAgICBpZiBnaXRDb25maWdCb29sKCdnaXQtcDQubGFyZ2VGaWxlUHVzaCcpOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaEZpbGUobG9jYWxMYXJnZUZpbGUpCisgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzIG1vdmVkIHRvIGxhcmdlIGZpbGUgc3lzdGVtICglcylcbiIgJSAocmVsUGF0aCwgbG9jYWxMYXJnZUZpbGUpKQorICAgICAgICByZXR1cm4gKGdpdF9tb2RlLCBjb250ZW50cykKKworY2xhc3MgTW9ja0xGUyhMYXJnZUZpbGVTeXN0ZW0pOgorICAgICIiIk1vY2sgbGFyZ2UgZmlsZSBzeXN0ZW0gZm9yIHRlc3RpbmcuIiIiCisKKyAgICBkZWYgZ2VuZXJhdGVQb2ludGVyKHNlbGYsIGNvbnRlbnRGaWxlKToKKyAgICAgICAgIiIiVGhlIHBvaW50ZXIgY29udGVudCBpcyB0aGUgb3JpZ2luYWwgY29udGVudCBwcmVmaXhlZCB3aXRoICJwb2ludGVyLSIuCisgICAgICAgICAgIFRoZSBsb2NhbCBmaWxlbmFtZSBvZiB0aGUgbGFyZ2UgZmlsZSBzdG9yYWdlIGlzIGRlcml2ZWQgZnJvbSB0aGUgZmlsZSBjb250ZW50LgorICAgICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBvcGVuKGNvbnRlbnRGaWxlLCAncicpIGFzIGY6CisgICAgICAgICAgICBjb250ZW50ID0gbmV4dChmKQorICAgICAgICAgICAgZ2l0TW9kZSA9ICcxMDA2NDQnCisgICAgICAgICAgICBwb2ludGVyQ29udGVudHMgPSAncG9pbnRlci0nICsgY29udGVudAorICAgICAgICAgICAgbG9jYWxMYXJnZUZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICcuZ2l0JywgJ21vY2stc3RvcmFnZScsICdsb2NhbCcsIGNvbnRlbnRbOi0xXSkKKyAgICAgICAgICAgIHJldHVybiAoZ2l0TW9kZSwgcG9pbnRlckNvbnRlbnRzLCBsb2NhbExhcmdlRmlsZSkKKworICAgIGRlZiBwdXNoRmlsZShzZWxmLCBsb2NhbExhcmdlRmlsZSk6CisgICAgICAgICIiIlRoZSByZW1vdGUgZmlsZW5hbWUgb2YgdGhlIGxhcmdlIGZpbGUgc3RvcmFnZSBpcyB0aGUgc2FtZSBhcyB0aGUgbG9jYWwKKyAgICAgICAgICAgb25lIGJ1dCBpbiBhIGRpZmZlcmVudCBkaXJlY3RvcnkuCisgICAgICAgICAgICIiIgorICAgICAgICByZW1vdGVQYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShsb2NhbExhcmdlRmlsZSksICcuLicsICdyZW1vdGUnKQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocmVtb3RlUGF0aCk6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhyZW1vdGVQYXRoKQorICAgICAgICBzaHV0aWwuY29weWZpbGUobG9jYWxMYXJnZUZpbGUsIG9zLnBhdGguam9pbihyZW1vdGVQYXRoLCBvcy5wYXRoLmJhc2VuYW1lKGxvY2FsTGFyZ2VGaWxlKSkpCisKK2NsYXNzIEdpdExGUyhMYXJnZUZpbGVTeXN0ZW0pOgorICAgICIiIkdpdCBMRlMgYXMgYmFja2VuZCBmb3IgdGhlIGdpdC1wNCBsYXJnZSBmaWxlIHN5c3RlbS4KKyAgICAgICBTZWUgaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vIGZvciBkZXRhaWxzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgTGFyZ2VGaWxlU3lzdGVtLl9faW5pdF9fKHNlbGYsICphcmdzKQorICAgICAgICBzZWxmLmJhc2VHaXRBdHRyaWJ1dGVzID0gW10KKworICAgIGRlZiBnZW5lcmF0ZVBvaW50ZXIoc2VsZiwgY29udGVudEZpbGUpOgorICAgICAgICAiIiJHZW5lcmF0ZSBhIEdpdCBMRlMgcG9pbnRlciBmb3IgdGhlIGNvbnRlbnQuIFJldHVybiBMRlMgUG9pbnRlciBmaWxlCisgICAgICAgICAgIG1vZGUgYW5kIGNvbnRlbnQgd2hpY2ggaXMgc3RvcmVkIGluIHRoZSBHaXQgcmVwb3NpdG9yeSBpbnN0ZWFkIG9mCisgICAgICAgICAgIHRoZSBhY3R1YWwgY29udGVudC4gUmV0dXJuIGFsc28gdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUgYWN0dWFsCisgICAgICAgICAgIGNvbnRlbnQuCisgICAgICAgICAgICIiIgorICAgICAgICBwb2ludGVyUHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICAgICBbJ2dpdCcsICdsZnMnLCAncG9pbnRlcicsICctLWZpbGU9JyArIGNvbnRlbnRGaWxlXSwKKyAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgKQorICAgICAgICBwb2ludGVyRmlsZSA9IHBvaW50ZXJQcm9jZXNzLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgaWYgcG9pbnRlclByb2Nlc3Mud2FpdCgpOgorICAgICAgICAgICAgb3MucmVtb3ZlKGNvbnRlbnRGaWxlKQorICAgICAgICAgICAgZGllKCdnaXQtbGZzIHBvaW50ZXIgY29tbWFuZCBmYWlsZWQuIERpZCB5b3UgaW5zdGFsbCB0aGUgZXh0ZW5zaW9uPycpCisgICAgICAgIHBvaW50ZXJDb250ZW50cyA9IFtpKydcbicgZm9yIGkgaW4gcG9pbnRlckZpbGUuc3BsaXQoJ1xuJylbMjpdWzotMV1dCisgICAgICAgIG9pZCA9IHBvaW50ZXJDb250ZW50c1sxXS5zcGxpdCgnICcpWzFdLnNwbGl0KCc6JylbMV1bOi0xXQorICAgICAgICBsb2NhbExhcmdlRmlsZSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgIG9zLmdldGN3ZCgpLAorICAgICAgICAgICAgJy5naXQnLCAnbGZzJywgJ29iamVjdHMnLCBvaWRbOjJdLCBvaWRbMjo0XSwKKyAgICAgICAgICAgIG9pZCwKKyAgICAgICAgKQorICAgICAgICAjIExGUyBTcGVjIHN0YXRlcyB0aGF0IHBvaW50ZXIgZmlsZXMgc2hvdWxkIG5vdCBoYXZlIHRoZSBleGVjdXRhYmxlIGJpdCBzZXQuCisgICAgICAgIGdpdE1vZGUgPSAnMTAwNjQ0JworICAgICAgICByZXR1cm4gKGdpdE1vZGUsIHBvaW50ZXJDb250ZW50cywgbG9jYWxMYXJnZUZpbGUpCisKKyAgICBkZWYgcHVzaEZpbGUoc2VsZiwgbG9jYWxMYXJnZUZpbGUpOgorICAgICAgICB1cGxvYWRQcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIFsnZ2l0JywgJ2xmcycsICdwdXNoJywgJy0tb2JqZWN0LWlkJywgJ29yaWdpbicsIG9zLnBhdGguYmFzZW5hbWUobG9jYWxMYXJnZUZpbGUpXQorICAgICAgICApCisgICAgICAgIGlmIHVwbG9hZFByb2Nlc3Mud2FpdCgpOgorICAgICAgICAgICAgZGllKCdnaXQtbGZzIHB1c2ggY29tbWFuZCBmYWlsZWQuIERpZCB5b3UgZGVmaW5lIGEgcmVtb3RlPycpCisKKyAgICBkZWYgZ2VuZXJhdGVHaXRBdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gKAorICAgICAgICAgICAgc2VsZi5iYXNlR2l0QXR0cmlidXRlcyArCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgJ1xuJywKKyAgICAgICAgICAgICAgICAnI1xuJywKKyAgICAgICAgICAgICAgICAnIyBHaXQgTEZTIChzZWUgaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vKVxuJywKKyAgICAgICAgICAgICAgICAnI1xuJywKKyAgICAgICAgICAgIF0gKworICAgICAgICAgICAgWycqLicgKyBmLnJlcGxhY2UoJyAnLCAnW1s6c3BhY2U6XV0nKSArICcgZmlsdGVyPWxmcyAtdGV4dFxuJworICAgICAgICAgICAgICAgIGZvciBmIGluIHNvcnRlZChnaXRDb25maWdMaXN0KCdnaXQtcDQubGFyZ2VGaWxlRXh0ZW5zaW9ucycpKQorICAgICAgICAgICAgXSArCisgICAgICAgICAgICBbJy8nICsgZi5yZXBsYWNlKCcgJywgJ1tbOnNwYWNlOl1dJykgKyAnIGZpbHRlcj1sZnMgLXRleHRcbicKKyAgICAgICAgICAgICAgICBmb3IgZiBpbiBzb3J0ZWQoc2VsZi5sYXJnZUZpbGVzKSBpZiBub3Qgc2VsZi5oYXNMYXJnZUZpbGVFeHRlbnNpb24oZikKKyAgICAgICAgICAgIF0KKyAgICAgICAgKQorCisgICAgZGVmIGFkZExhcmdlRmlsZShzZWxmLCByZWxQYXRoKToKKyAgICAgICAgTGFyZ2VGaWxlU3lzdGVtLmFkZExhcmdlRmlsZShzZWxmLCByZWxQYXRoKQorICAgICAgICBzZWxmLndyaXRlVG9HaXRTdHJlYW0oJzEwMDY0NCcsICcuZ2l0YXR0cmlidXRlcycsIHNlbGYuZ2VuZXJhdGVHaXRBdHRyaWJ1dGVzKCkpCisKKyAgICBkZWYgcmVtb3ZlTGFyZ2VGaWxlKHNlbGYsIHJlbFBhdGgpOgorICAgICAgICBMYXJnZUZpbGVTeXN0ZW0ucmVtb3ZlTGFyZ2VGaWxlKHNlbGYsIHJlbFBhdGgpCisgICAgICAgIHNlbGYud3JpdGVUb0dpdFN0cmVhbSgnMTAwNjQ0JywgJy5naXRhdHRyaWJ1dGVzJywgc2VsZi5nZW5lcmF0ZUdpdEF0dHJpYnV0ZXMoKSkKKworICAgIGRlZiBwcm9jZXNzQ29udGVudChzZWxmLCBnaXRfbW9kZSwgcmVsUGF0aCwgY29udGVudHMpOgorICAgICAgICBpZiByZWxQYXRoID09ICcuZ2l0YXR0cmlidXRlcyc6CisgICAgICAgICAgICBzZWxmLmJhc2VHaXRBdHRyaWJ1dGVzID0gY29udGVudHMKKyAgICAgICAgICAgIHJldHVybiAoZ2l0X21vZGUsIHNlbGYuZ2VuZXJhdGVHaXRBdHRyaWJ1dGVzKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTGFyZ2VGaWxlU3lzdGVtLnByb2Nlc3NDb250ZW50KHNlbGYsIGdpdF9tb2RlLCByZWxQYXRoLCBjb250ZW50cykKKworY2xhc3MgQ29tbWFuZDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudXNhZ2UgPSAidXNhZ2U6ICVwcm9nIFtvcHRpb25zXSIKKyAgICAgICAgc2VsZi5uZWVkc0dpdCA9IFRydWUKKyAgICAgICAgc2VsZi52ZXJib3NlID0gRmFsc2UKKworY2xhc3MgUDRVc2VyTWFwOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi51c2VyTWFwRnJvbVBlcmZvcmNlU2VydmVyID0gRmFsc2UKKyAgICAgICAgc2VsZi5teVA0VXNlcklkID0gTm9uZQorCisgICAgZGVmIHA0VXNlcklkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLm15UDRVc2VySWQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5teVA0VXNlcklkCisKKyAgICAgICAgcmVzdWx0cyA9IHA0Q21kTGlzdCgidXNlciAtbyIpCisgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICBpZiByLmhhc19rZXkoJ1VzZXInKToKKyAgICAgICAgICAgICAgICBzZWxmLm15UDRVc2VySWQgPSByWydVc2VyJ10KKyAgICAgICAgICAgICAgICByZXR1cm4gclsnVXNlciddCisgICAgICAgIGRpZSgiQ291bGQgbm90IGZpbmQgeW91ciBwNCB1c2VyIGlkIikKKworICAgIGRlZiBwNFVzZXJJc01lKHNlbGYsIHA0VXNlcik6CisgICAgICAgICMgcmV0dXJuIFRydWUgaWYgdGhlIGdpdmVuIHA0IHVzZXIgaXMgYWN0dWFsbHkgbWUKKyAgICAgICAgbWUgPSBzZWxmLnA0VXNlcklkKCkKKyAgICAgICAgaWYgbm90IHA0VXNlciBvciBwNFVzZXIgIT0gbWU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0VXNlckNhY2hlRmlsZW5hbWUoc2VsZik6CisgICAgICAgIGhvbWUgPSBvcy5lbnZpcm9uLmdldCgiSE9NRSIsIG9zLmVudmlyb24uZ2V0KCJVU0VSUFJPRklMRSIpKQorICAgICAgICByZXR1cm4gaG9tZSArICIvLmdpdHA0LXVzZXJjYWNoZS50eHQiCisKKyAgICBkZWYgZ2V0VXNlck1hcEZyb21QZXJmb3JjZVNlcnZlcihzZWxmKToKKyAgICAgICAgaWYgc2VsZi51c2VyTWFwRnJvbVBlcmZvcmNlU2VydmVyOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYudXNlcnMgPSB7fQorICAgICAgICBzZWxmLmVtYWlscyA9IHt9CisKKyAgICAgICAgZm9yIG91dHB1dCBpbiBwNENtZExpc3QoInVzZXJzIik6CisgICAgICAgICAgICBpZiBub3Qgb3V0cHV0Lmhhc19rZXkoIlVzZXIiKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi51c2Vyc1tvdXRwdXRbIlVzZXIiXV0gPSBvdXRwdXRbIkZ1bGxOYW1lIl0gKyAiIDwiICsgb3V0cHV0WyJFbWFpbCJdICsgIj4iCisgICAgICAgICAgICBzZWxmLmVtYWlsc1tvdXRwdXRbIkVtYWlsIl1dID0gb3V0cHV0WyJVc2VyIl0KKworCisgICAgICAgIHMgPSAnJworICAgICAgICBmb3IgKGtleSwgdmFsKSBpbiBzZWxmLnVzZXJzLml0ZW1zKCk6CisgICAgICAgICAgICBzICs9ICIlc1x0JXNcbiIgJSAoa2V5LmV4cGFuZHRhYnMoMSksIHZhbC5leHBhbmR0YWJzKDEpKQorCisgICAgICAgIG9wZW4oc2VsZi5nZXRVc2VyQ2FjaGVGaWxlbmFtZSgpLCAid2IiKS53cml0ZShzKQorICAgICAgICBzZWxmLnVzZXJNYXBGcm9tUGVyZm9yY2VTZXJ2ZXIgPSBUcnVlCisKKyAgICBkZWYgbG9hZFVzZXJNYXBGcm9tQ2FjaGUoc2VsZik6CisgICAgICAgIHNlbGYudXNlcnMgPSB7fQorICAgICAgICBzZWxmLnVzZXJNYXBGcm9tUGVyZm9yY2VTZXJ2ZXIgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWNoZSA9IG9wZW4oc2VsZi5nZXRVc2VyQ2FjaGVGaWxlbmFtZSgpLCAicmIiKQorICAgICAgICAgICAgbGluZXMgPSBjYWNoZS5yZWFkbGluZXMoKQorICAgICAgICAgICAgY2FjaGUuY2xvc2UoKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICAgICAgZW50cnkgPSBsaW5lLnN0cmlwKCkuc3BsaXQoIlx0IikKKyAgICAgICAgICAgICAgICBzZWxmLnVzZXJzW2VudHJ5WzBdXSA9IGVudHJ5WzFdCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgc2VsZi5nZXRVc2VyTWFwRnJvbVBlcmZvcmNlU2VydmVyKCkKKworY2xhc3MgUDREZWJ1ZyhDb21tYW5kKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gW10KKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICJBIHRvb2wgdG8gZGVidWcgdGhlIG91dHB1dCBvZiBwNCAtRy4iCisgICAgICAgIHNlbGYubmVlZHNHaXQgPSBGYWxzZQorCisgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKKyAgICAgICAgaiA9IDAKKyAgICAgICAgZm9yIG91dHB1dCBpbiBwNENtZExpc3QoYXJncyk6CisgICAgICAgICAgICBwcmludCAnRWxlbWVudDogJWQnICUgagorICAgICAgICAgICAgaiArPSAxCisgICAgICAgICAgICBwcmludCBvdXRwdXQKKyAgICAgICAgcmV0dXJuIFRydWUKKworY2xhc3MgUDRSb2xsQmFjayhDb21tYW5kKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIENvbW1hbmQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbG9jYWwiLCBkZXN0PSJyb2xsYmFja0xvY2FsQnJhbmNoZXMiLCBhY3Rpb249InN0b3JlX3RydWUiKQorICAgICAgICBdCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAiQSB0b29sIHRvIGRlYnVnIHRoZSBtdWx0aS1icmFuY2ggaW1wb3J0LiBEb24ndCB1c2UgOikiCisgICAgICAgIHNlbGYucm9sbGJhY2tMb2NhbEJyYW5jaGVzID0gRmFsc2UKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSAhPSAxOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIG1heENoYW5nZSA9IGludChhcmdzWzBdKQorCisgICAgICAgIGlmICJwNEV4aXRDb2RlIiBpbiBwNENtZCgiY2hhbmdlcyAtbSAxIik6CisgICAgICAgICAgICBkaWUoIlByb2JsZW1zIGV4ZWN1dGluZyBwNCIpOworCisgICAgICAgIGlmIHNlbGYucm9sbGJhY2tMb2NhbEJyYW5jaGVzOgorICAgICAgICAgICAgcmVmUHJlZml4ID0gInJlZnMvaGVhZHMvIgorICAgICAgICAgICAgbGluZXMgPSByZWFkX3BpcGVfbGluZXMoImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyAtLWJyYW5jaGVzIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlZlByZWZpeCA9ICJyZWZzL3JlbW90ZXMvIgorICAgICAgICAgICAgbGluZXMgPSByZWFkX3BpcGVfbGluZXMoImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyAtLXJlbW90ZXMiKQorCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgaWYgc2VsZi5yb2xsYmFja0xvY2FsQnJhbmNoZXMgb3IgKGxpbmUuc3RhcnRzd2l0aCgicDQvIikgYW5kIGxpbmUgIT0gInA0L0hFQURcbiIpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgICAgICByZWYgPSByZWZQcmVmaXggKyBsaW5lCisgICAgICAgICAgICAgICAgbG9nID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KHJlZikKKyAgICAgICAgICAgICAgICBzZXR0aW5ncyA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2cpCisKKyAgICAgICAgICAgICAgICBkZXBvdFBhdGhzID0gc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10KKyAgICAgICAgICAgICAgICBjaGFuZ2UgPSBzZXR0aW5nc1snY2hhbmdlJ10KKworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBGYWxzZQorCisgICAgICAgICAgICAgICAgaWYgbGVuKHA0Q21kKCJjaGFuZ2VzIC1tIDEgIiAgKyAnICcuam9pbiAoWyclcy4uLkAlcycgJSAocCwgbWF4Q2hhbmdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBkZXBvdFBhdGhzXSkpKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiQnJhbmNoICVzIGRpZCBub3QgZXhpc3QgYXQgY2hhbmdlICVzLCBkZWxldGluZy4iICUgKHJlZiwgbWF4Q2hhbmdlKQorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0oImdpdCB1cGRhdGUtcmVmIC1kICVzIGBnaXQgcmV2LXBhcnNlICVzYCIgJSAocmVmLCByZWYpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgd2hpbGUgY2hhbmdlIGFuZCBpbnQoY2hhbmdlKSA+IG1heENoYW5nZToKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVzIGlzIGF0ICVzIDsgcmV3aW5kaW5nIHRvd2FyZHMgJXMiICUgKHJlZiwgY2hhbmdlLCBtYXhDaGFuZ2UpCisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSgiZ2l0IHVwZGF0ZS1yZWYgJXMgXCIlc15cIiIgJSAocmVmLCByZWYpKQorICAgICAgICAgICAgICAgICAgICBsb2cgPSBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQocmVmKQorICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncyA9ICBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nKQorCisKKyAgICAgICAgICAgICAgICAgICAgZGVwb3RQYXRocyA9IHNldHRpbmdzWydkZXBvdC1wYXRocyddCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IHNldHRpbmdzWydjaGFuZ2UnXQorCisgICAgICAgICAgICAgICAgaWYgY2hhbmdlZDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgIiVzIHJld291bmQgdG8gJXMiICUgKHJlZiwgY2hhbmdlKQorCisgICAgICAgIHJldHVybiBUcnVlCisKK2NsYXNzIFA0U3VibWl0KENvbW1hbmQsIFA0VXNlck1hcCk6CisKKyAgICBjb25mbGljdF9iZWhhdmlvcl9jaG9pY2VzID0gKCJhc2siLCAic2tpcCIsICJxdWl0IikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBQNFVzZXJNYXAuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gWworICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLW9yaWdpbiIsIGRlc3Q9Im9yaWdpbiIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItTSIsIGRlc3Q9ImRldGVjdFJlbmFtZXMiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICAjIHByZXNlcnZlIHRoZSB1c2VyLCByZXF1aXJlcyByZWxldmFudCBwNCBwZXJtaXNzaW9ucworICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXByZXNlcnZlLXVzZXIiLCBkZXN0PSJwcmVzZXJ2ZVVzZXIiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1leHBvcnQtbGFiZWxzIiwgZGVzdD0iZXhwb3J0TGFiZWxzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZHJ5LXJ1biIsICItbiIsIGRlc3Q9ImRyeV9ydW4iLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1wcmVwYXJlLXA0LW9ubHkiLCBkZXN0PSJwcmVwYXJlX3A0X29ubHkiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1jb25mbGljdCIsIGRlc3Q9ImNvbmZsaWN0X2JlaGF2aW9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPXNlbGYuY29uZmxpY3RfYmVoYXZpb3JfY2hvaWNlcyksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tYnJhbmNoIiwgZGVzdD0iYnJhbmNoIiksCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICJTdWJtaXQgY2hhbmdlcyBmcm9tIGdpdCB0byB0aGUgcGVyZm9yY2UgZGVwb3QuIgorICAgICAgICBzZWxmLnVzYWdlICs9ICIgW25hbWUgb2YgZ2l0IGJyYW5jaCB0byBzdWJtaXQgaW50byBwZXJmb3JjZSBkZXBvdF0iCisgICAgICAgIHNlbGYub3JpZ2luID0gIiIKKyAgICAgICAgc2VsZi5kZXRlY3RSZW5hbWVzID0gRmFsc2UKKyAgICAgICAgc2VsZi5wcmVzZXJ2ZVVzZXIgPSBnaXRDb25maWdCb29sKCJnaXQtcDQucHJlc2VydmVVc2VyIikKKyAgICAgICAgc2VsZi5kcnlfcnVuID0gRmFsc2UKKyAgICAgICAgc2VsZi5wcmVwYXJlX3A0X29ubHkgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbmZsaWN0X2JlaGF2aW9yID0gTm9uZQorICAgICAgICBzZWxmLmlzV2luZG93cyA9IChwbGF0Zm9ybS5zeXN0ZW0oKSA9PSAiV2luZG93cyIpCisgICAgICAgIHNlbGYuZXhwb3J0TGFiZWxzID0gRmFsc2UKKyAgICAgICAgc2VsZi5wNEhhc01vdmVDb21tYW5kID0gcDRfaGFzX21vdmVfY29tbWFuZCgpCisgICAgICAgIHNlbGYuYnJhbmNoID0gTm9uZQorCisgICAgICAgIGlmIGdpdENvbmZpZygnZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbScpOgorICAgICAgICAgICAgZGllKCJMYXJnZSBmaWxlIHN5c3RlbSBub3Qgc3VwcG9ydGVkIGZvciBnaXQtcDQgc3VibWl0IGNvbW1hbmQuIFBsZWFzZSByZW1vdmUgaXQgZnJvbSBjb25maWcuIikKKworICAgIGRlZiBjaGVjayhzZWxmKToKKyAgICAgICAgaWYgbGVuKHA0Q21kTGlzdCgib3BlbmVkIC4uLiIpKSA+IDA6CisgICAgICAgICAgICBkaWUoIllvdSBoYXZlIGZpbGVzIG9wZW5lZCB3aXRoIHBlcmZvcmNlISBDbG9zZSB0aGVtIGJlZm9yZSBzdGFydGluZyB0aGUgc3luYy4iKQorCisgICAgZGVmIHNlcGFyYXRlX2pvYnNfZnJvbV9kZXNjcmlwdGlvbihzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgIiIiRXh0cmFjdCBhbmQgcmV0dXJuIGEgcG9zc2libGUgSm9icyBmaWVsZCBpbiB0aGUgY29tbWl0CisgICAgICAgICAgIG1lc3NhZ2UuICBJdCBnb2VzIGludG8gYSBzZXBhcmF0ZSBzZWN0aW9uIGluIHRoZSBwNCBjaGFuZ2UKKyAgICAgICAgICAgc3BlY2lmaWNhdGlvbi4KKworICAgICAgICAgICBBIGpvYnMgbGluZSBzdGFydHMgd2l0aCAiSm9iczoiIGFuZCBsb29rcyBsaWtlIGEgbmV3IGZpZWxkCisgICAgICAgICAgIGluIGEgZm9ybS4gIFZhbHVlcyBhcmUgd2hpdGUtc3BhY2Ugc2VwYXJhdGVkIG9uIHRoZSBzYW1lCisgICAgICAgICAgIGxpbmUgb3Igb24gZm9sbG93aW5nIGxpbmVzIHRoYXQgc3RhcnQgd2l0aCBhIHRhYi4KKworICAgICAgICAgICBUaGlzIGRvZXMgbm90IHBhcnNlIGFuZCBleHRyYWN0IHRoZSBmdWxsIGdpdCBjb21taXQgbWVzc2FnZQorICAgICAgICAgICBsaWtlIGEgcDQgZm9ybS4gIEl0IGp1c3Qgc2VlcyB0aGUgSm9iczogbGluZSBhcyBhIG1hcmtlcgorICAgICAgICAgICB0byBwYXNzIGV2ZXJ5dGhpbmcgZnJvbSB0aGVuIG9uIGRpcmVjdGx5IGludG8gdGhlIHA0IGZvcm0sCisgICAgICAgICAgIGJ1dCBvdXRzaWRlIHRoZSBkZXNjcmlwdGlvbiBzZWN0aW9uLgorCisgICAgICAgICAgIFJldHVybiBhIHR1cGxlIChzdHJpcHBlZCBsb2cgbWVzc2FnZSwgam9icyBzdHJpbmcpLiIiIgorCisgICAgICAgIG0gPSByZS5zZWFyY2gocideSm9iczonLCBtZXNzYWdlLCByZS5NVUxUSUxJTkUpCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAobWVzc2FnZSwgTm9uZSkKKworICAgICAgICBqb2J0ZXh0ID0gbWVzc2FnZVttLnN0YXJ0KCk6XQorICAgICAgICBzdHJpcHBlZF9tZXNzYWdlID0gbWVzc2FnZVs6bS5zdGFydCgpXS5yc3RyaXAoKQorICAgICAgICByZXR1cm4gKHN0cmlwcGVkX21lc3NhZ2UsIGpvYnRleHQpCisKKyAgICBkZWYgcHJlcGFyZUxvZ01lc3NhZ2Uoc2VsZiwgdGVtcGxhdGUsIG1lc3NhZ2UsIGpvYnMpOgorICAgICAgICAiIiJFZGl0cyB0aGUgdGVtcGxhdGUgcmV0dXJuZWQgZnJvbSAicDQgY2hhbmdlIC1vIiB0byBpbnNlcnQKKyAgICAgICAgICAgdGhlIG1lc3NhZ2UgaW4gdGhlIERlc2NyaXB0aW9uIGZpZWxkLCBhbmQgdGhlIGpvYnMgdGV4dCBpbgorICAgICAgICAgICB0aGUgSm9icyBmaWVsZC4iIiIKKyAgICAgICAgcmVzdWx0ID0gIiIKKworICAgICAgICBpbkRlc2NyaXB0aW9uU2VjdGlvbiA9IEZhbHNlCisKKyAgICAgICAgZm9yIGxpbmUgaW4gdGVtcGxhdGUuc3BsaXQoIlxuIik6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiMiKToKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gbGluZSArICJcbiIKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBpbkRlc2NyaXB0aW9uU2VjdGlvbjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkZpbGVzOiIpIG9yIGxpbmUuc3RhcnRzd2l0aCgiSm9iczoiKToKKyAgICAgICAgICAgICAgICAgICAgaW5EZXNjcmlwdGlvblNlY3Rpb24gPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAjIGluc2VydCBKb2JzIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgam9iczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBqb2JzICsgIlxuIgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiRGVzY3JpcHRpb246Iik6CisgICAgICAgICAgICAgICAgICAgIGluRGVzY3JpcHRpb25TZWN0aW9uID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBsaW5lICs9ICJcbiIKKyAgICAgICAgICAgICAgICAgICAgZm9yIG1lc3NhZ2VMaW5lIGluIG1lc3NhZ2Uuc3BsaXQoIlxuIik6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lICs9ICJcdCIgKyBtZXNzYWdlTGluZSArICJcbiIKKworICAgICAgICAgICAgcmVzdWx0ICs9IGxpbmUgKyAiXG4iCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHBhdGNoUkNTS2V5d29yZHMoc2VsZiwgZmlsZSwgcGF0dGVybik6CisgICAgICAgICMgQXR0ZW1wdCB0byB6YXAgdGhlIFJDUyBrZXl3b3JkcyBpbiBhIHA0IGNvbnRyb2xsZWQgZmlsZSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0dGVybgorICAgICAgICAoaGFuZGxlLCBvdXRGaWxlTmFtZSkgPSB0ZW1wZmlsZS5ta3N0ZW1wKGRpcj0nLicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dEZpbGUgPSBvcy5mZG9wZW4oaGFuZGxlLCAidysiKQorICAgICAgICAgICAgaW5GaWxlID0gb3BlbihmaWxlLCAiciIpCisgICAgICAgICAgICByZWdleHAgPSByZS5jb21waWxlKHBhdHRlcm4sIHJlLlZFUkJPU0UpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBpbkZpbGUucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgbGluZSA9IHJlZ2V4cC5zdWIocickXDEkJywgbGluZSkKKyAgICAgICAgICAgICAgICBvdXRGaWxlLndyaXRlKGxpbmUpCisgICAgICAgICAgICBpbkZpbGUuY2xvc2UoKQorICAgICAgICAgICAgb3V0RmlsZS5jbG9zZSgpCisgICAgICAgICAgICAjIEZvcmNpYmx5IG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwgZmlsZQorICAgICAgICAgICAgb3MudW5saW5rKGZpbGUpCisgICAgICAgICAgICBzaHV0aWwubW92ZShvdXRGaWxlTmFtZSwgZmlsZSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBjbGVhbnVwIG91ciB0ZW1wb3JhcnkgZmlsZQorICAgICAgICAgICAgb3MudW5saW5rKG91dEZpbGVOYW1lKQorICAgICAgICAgICAgcHJpbnQgIkZhaWxlZCB0byBzdHJpcCBSQ1Mga2V5d29yZHMgaW4gJXMiICUgZmlsZQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBwcmludCAiUGF0Y2hlZCB1cCBSQ1Mga2V5d29yZHMgaW4gJXMiICUgZmlsZQorCisgICAgZGVmIHA0VXNlckZvckNvbW1pdChzZWxmLGlkKToKKyAgICAgICAgIyBSZXR1cm4gdGhlIHR1cGxlIChwZXJmb3JjZSB1c2VyLGdpdCBlbWFpbCkgZm9yIGEgZ2l2ZW4gZ2l0IGNvbW1pdCBpZAorICAgICAgICBzZWxmLmdldFVzZXJNYXBGcm9tUGVyZm9yY2VTZXJ2ZXIoKQorICAgICAgICBnaXRFbWFpbCA9IHJlYWRfcGlwZShbImdpdCIsICJsb2ciLCAiLS1tYXgtY291bnQ9MSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3JtYXQ9JWFlIiwgaWRdKQorICAgICAgICBnaXRFbWFpbCA9IGdpdEVtYWlsLnN0cmlwKCkKKyAgICAgICAgaWYgbm90IHNlbGYuZW1haWxzLmhhc19rZXkoZ2l0RW1haWwpOgorICAgICAgICAgICAgcmV0dXJuIChOb25lLGdpdEVtYWlsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLmVtYWlsc1tnaXRFbWFpbF0sZ2l0RW1haWwpCisKKyAgICBkZWYgY2hlY2tWYWxpZFA0VXNlcnMoc2VsZixjb21taXRzKToKKyAgICAgICAgIyBjaGVjayBpZiBhbnkgZ2l0IGF1dGhvcnMgY2Fubm90IGJlIG1hcHBlZCB0byBwNCB1c2VycworICAgICAgICBmb3IgaWQgaW4gY29tbWl0czoKKyAgICAgICAgICAgICh1c2VyLGVtYWlsKSA9IHNlbGYucDRVc2VyRm9yQ29tbWl0KGlkKQorICAgICAgICAgICAgaWYgbm90IHVzZXI6CisgICAgICAgICAgICAgICAgbXNnID0gIkNhbm5vdCBmaW5kIHA0IHVzZXIgZm9yIGVtYWlsICVzIGluIGNvbW1pdCAlcy4iICUgKGVtYWlsLCBpZCkKKyAgICAgICAgICAgICAgICBpZiBnaXRDb25maWdCb29sKCJnaXQtcDQuYWxsb3dNaXNzaW5nUDRVc2VycyIpOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiJXMiICUgbXNnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGllKCJFcnJvcjogJXNcblNldCBnaXQtcDQuYWxsb3dNaXNzaW5nUDRVc2VycyB0byB0cnVlIHRvIGFsbG93IHRoaXMuIiAlIG1zZykKKworICAgIGRlZiBsYXN0UDRDaGFuZ2VsaXN0KHNlbGYpOgorICAgICAgICAjIEdldCBiYWNrIHRoZSBsYXN0IGNoYW5nZWxpc3QgbnVtYmVyIHN1Ym1pdHRlZCBpbiB0aGlzIGNsaWVudCBzcGVjLiBUaGlzCisgICAgICAgICMgdGhlbiBnZXRzIHVzZWQgdG8gcGF0Y2ggdXAgdGhlIHVzZXJuYW1lIGluIHRoZSBjaGFuZ2UuIElmIHRoZSBzYW1lCisgICAgICAgICMgY2xpZW50IHNwZWMgaXMgYmVpbmcgdXNlZCBieSBtdWx0aXBsZSBwcm9jZXNzZXMgdGhlbiB0aGlzIG1pZ2h0IGdvCisgICAgICAgICMgd3JvbmcuCisgICAgICAgIHJlc3VsdHMgPSBwNENtZExpc3QoImNsaWVudCAtbyIpICAgICAgICAjIGZpbmQgdGhlIGN1cnJlbnQgY2xpZW50CisgICAgICAgIGNsaWVudCA9IE5vbmUKKyAgICAgICAgZm9yIHIgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIGlmIHIuaGFzX2tleSgnQ2xpZW50Jyk6CisgICAgICAgICAgICAgICAgY2xpZW50ID0gclsnQ2xpZW50J10KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBub3QgY2xpZW50OgorICAgICAgICAgICAgZGllKCJjb3VsZCBub3QgZ2V0IGNsaWVudCBzcGVjIikKKyAgICAgICAgcmVzdWx0cyA9IHA0Q21kTGlzdChbImNoYW5nZXMiLCAiLWMiLCBjbGllbnQsICItbSIsICIxIl0pCisgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICBpZiByLmhhc19rZXkoJ2NoYW5nZScpOgorICAgICAgICAgICAgICAgIHJldHVybiByWydjaGFuZ2UnXQorICAgICAgICBkaWUoIkNvdWxkIG5vdCBnZXQgY2hhbmdlbGlzdCBudW1iZXIgZm9yIGxhc3Qgc3VibWl0IC0gY2Fubm90IHBhdGNoIHVwIHVzZXIgZGV0YWlscyIpCisKKyAgICBkZWYgbW9kaWZ5Q2hhbmdlbGlzdFVzZXIoc2VsZiwgY2hhbmdlbGlzdCwgbmV3VXNlcik6CisgICAgICAgICMgZml4dXAgdGhlIHVzZXIgZmllbGQgb2YgYSBjaGFuZ2VsaXN0IGFmdGVyIGl0IGhhcyBiZWVuIHN1Ym1pdHRlZC4KKyAgICAgICAgY2hhbmdlcyA9IHA0Q21kTGlzdCgiY2hhbmdlIC1vICVzIiAlIGNoYW5nZWxpc3QpCisgICAgICAgIGlmIGxlbihjaGFuZ2VzKSAhPSAxOgorICAgICAgICAgICAgZGllKCJCYWQgb3V0cHV0IGZyb20gcDQgY2hhbmdlIG1vZGlmeWluZyAlcyB0byB1c2VyICVzIiAlCisgICAgICAgICAgICAgICAgKGNoYW5nZWxpc3QsIG5ld1VzZXIpKQorCisgICAgICAgIGMgPSBjaGFuZ2VzWzBdCisgICAgICAgIGlmIGNbJ1VzZXInXSA9PSBuZXdVc2VyOiByZXR1cm4gICAjIG5vdGhpbmcgdG8gZG8KKyAgICAgICAgY1snVXNlciddID0gbmV3VXNlcgorICAgICAgICBpbnB1dCA9IG1hcnNoYWwuZHVtcHMoYykKKworICAgICAgICByZXN1bHQgPSBwNENtZExpc3QoImNoYW5nZSAtZiAtaSIsIHN0ZGluPWlucHV0KQorICAgICAgICBmb3IgciBpbiByZXN1bHQ6CisgICAgICAgICAgICBpZiByLmhhc19rZXkoJ2NvZGUnKToKKyAgICAgICAgICAgICAgICBpZiByWydjb2RlJ10gPT0gJ2Vycm9yJzoKKyAgICAgICAgICAgICAgICAgICAgZGllKCJDb3VsZCBub3QgbW9kaWZ5IHVzZXIgZmllbGQgb2YgY2hhbmdlbGlzdCAlcyB0byAlczolcyIgJSAoY2hhbmdlbGlzdCwgbmV3VXNlciwgclsnZGF0YSddKSkKKyAgICAgICAgICAgIGlmIHIuaGFzX2tleSgnZGF0YScpOgorICAgICAgICAgICAgICAgIHByaW50KCJVcGRhdGVkIHVzZXIgZmllbGQgZm9yIGNoYW5nZWxpc3QgJXMgdG8gJXMiICUgKGNoYW5nZWxpc3QsIG5ld1VzZXIpKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBkaWUoIkNvdWxkIG5vdCBtb2RpZnkgdXNlciBmaWVsZCBvZiBjaGFuZ2VsaXN0ICVzIHRvICVzIiAlIChjaGFuZ2VsaXN0LCBuZXdVc2VyKSkKKworICAgIGRlZiBjYW5DaGFuZ2VDaGFuZ2VsaXN0cyhzZWxmKToKKyAgICAgICAgIyBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBwNCBhZG1pbiBvciBzdXBlci11c2VyIHBlcm1pc3Npb25zLCBlaXRoZXIgb2YKKyAgICAgICAgIyB3aGljaCBhcmUgcmVxdWlyZWQgdG8gbW9kaWZ5IGNoYW5nZWxpc3RzLgorICAgICAgICByZXN1bHRzID0gcDRDbWRMaXN0KFsicHJvdGVjdHMiLCBzZWxmLmRlcG90UGF0aF0pCisgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICBpZiByLmhhc19rZXkoJ3Blcm0nKToKKyAgICAgICAgICAgICAgICBpZiByWydwZXJtJ10gPT0gJ2FkbWluJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICBpZiByWydwZXJtJ10gPT0gJ3N1cGVyJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBwcmVwYXJlU3VibWl0VGVtcGxhdGUoc2VsZik6CisgICAgICAgICIiIlJ1biAicDQgY2hhbmdlIC1vIiB0byBncmFiIGEgY2hhbmdlIHNwZWNpZmljYXRpb24gdGVtcGxhdGUuCisgICAgICAgICAgIFRoaXMgZG9lcyBub3QgdXNlICJwNCAtRyIsIGFzIGl0IGlzIG5pY2UgdG8ga2VlcCB0aGUgc3VibWlzc2lvbgorICAgICAgICAgICB0ZW1wbGF0ZSBpbiBvcmlnaW5hbCBvcmRlciwgc2luY2UgYSBodW1hbiBtaWdodCBlZGl0IGl0LgorCisgICAgICAgICAgIFJlbW92ZSBsaW5lcyBpbiB0aGUgRmlsZXMgc2VjdGlvbiB0aGF0IHNob3cgY2hhbmdlcyB0byBmaWxlcworICAgICAgICAgICBvdXRzaWRlIHRoZSBkZXBvdCBwYXRoIHdlJ3JlIGNvbW1pdHRpbmcgaW50by4iIiIKKworICAgICAgICB0ZW1wbGF0ZSA9ICIiCisgICAgICAgIGluRmlsZXNTZWN0aW9uID0gRmFsc2UKKyAgICAgICAgZm9yIGxpbmUgaW4gcDRfcmVhZF9waXBlX2xpbmVzKFsnY2hhbmdlJywgJy1vJ10pOgorICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aCgiXHJcbiIpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0gKyAiXG4iCisgICAgICAgICAgICBpZiBpbkZpbGVzU2VjdGlvbjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlx0Iik6CisgICAgICAgICAgICAgICAgICAgICMgcGF0aCBzdGFydHMgYW5kIGVuZHMgd2l0aCBhIHRhYgorICAgICAgICAgICAgICAgICAgICBwYXRoID0gbGluZVsxOl0KKyAgICAgICAgICAgICAgICAgICAgbGFzdFRhYiA9IHBhdGgucmZpbmQoIlx0IikKKyAgICAgICAgICAgICAgICAgICAgaWYgbGFzdFRhYiAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoWzpsYXN0VGFiXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgc2VsZi5kZXBvdFBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaW5GaWxlc1NlY3Rpb24gPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIkZpbGVzOiIpOgorICAgICAgICAgICAgICAgICAgICBpbkZpbGVzU2VjdGlvbiA9IFRydWUKKworICAgICAgICAgICAgdGVtcGxhdGUgKz0gbGluZQorCisgICAgICAgIHJldHVybiB0ZW1wbGF0ZQorCisgICAgZGVmIGVkaXRfdGVtcGxhdGUoc2VsZiwgdGVtcGxhdGVfZmlsZSk6CisgICAgICAgICIiIkludm9rZSB0aGUgZWRpdG9yIHRvIGxldCB0aGUgdXNlciBjaGFuZ2UgdGhlIHN1Ym1pc3Npb24KKyAgICAgICAgICAgbWVzc2FnZS4gIFJldHVybiB0cnVlIGlmIG9rYXkgdG8gY29udGludWUgd2l0aCB0aGUgc3VibWl0LiIiIgorCisgICAgICAgICMgaWYgY29uZmlndXJlZCB0byBza2lwIHRoZSBlZGl0aW5nIHBhcnQsIGp1c3Qgc3VibWl0CisgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woImdpdC1wNC5za2lwU3VibWl0RWRpdCIpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjIGxvb2sgYXQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lLCB0byBjaGVjayBsYXRlciBpZiB0aGUgdXNlciBzYXZlZAorICAgICAgICAjIHRoZSBmaWxlCisgICAgICAgIG10aW1lID0gb3Muc3RhdCh0ZW1wbGF0ZV9maWxlKS5zdF9tdGltZQorCisgICAgICAgICMgaW52b2tlIHRoZSBlZGl0b3IKKyAgICAgICAgaWYgb3MuZW52aXJvbi5oYXNfa2V5KCJQNEVESVRPUiIpIGFuZCAob3MuZW52aXJvbi5nZXQoIlA0RURJVE9SIikgIT0gIiIpOgorICAgICAgICAgICAgZWRpdG9yID0gb3MuZW52aXJvbi5nZXQoIlA0RURJVE9SIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVkaXRvciA9IHJlYWRfcGlwZSgiZ2l0IHZhciBHSVRfRURJVE9SIikuc3RyaXAoKQorICAgICAgICBzeXN0ZW0oWyJzaCIsICItYyIsICgnJXMgIiRAIicgJSBlZGl0b3IpLCBlZGl0b3IsIHRlbXBsYXRlX2ZpbGVdKQorCisgICAgICAgICMgSWYgdGhlIGZpbGUgd2FzIG5vdCBzYXZlZCwgcHJvbXB0IHRvIHNlZSBpZiB0aGlzIHBhdGNoIHNob3VsZAorICAgICAgICAjIGJlIHNraXBwZWQuICBCdXQgc2tpcCB0aGlzIHZlcmlmaWNhdGlvbiBzdGVwIGlmIGNvbmZpZ3VyZWQgc28uCisgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woImdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgbW9kaWZpY2F0aW9uIHRpbWUgdXBkYXRlZCBtZWFucyB1c2VyIHNhdmVkIHRoZSBmaWxlCisgICAgICAgIGlmIG9zLnN0YXQodGVtcGxhdGVfZmlsZSkuc3RfbXRpbWUgPiBtdGltZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHJlc3BvbnNlID0gcmF3X2lucHV0KCJTdWJtaXQgdGVtcGxhdGUgdW5jaGFuZ2VkLiBTdWJtaXQgYW55d2F5PyBbeV1lcywgW25dbyAoc2tpcCB0aGlzIHBhdGNoKSAiKQorICAgICAgICAgICAgaWYgcmVzcG9uc2UgPT0gJ3knOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBpZiByZXNwb25zZSA9PSAnbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZ2V0X2RpZmZfZGVzY3JpcHRpb24oc2VsZiwgZWRpdGVkRmlsZXMsIGZpbGVzVG9BZGQpOgorICAgICAgICAjIGRpZmYKKyAgICAgICAgaWYgb3MuZW52aXJvbi5oYXNfa2V5KCJQNERJRkYiKToKKyAgICAgICAgICAgIGRlbChvcy5lbnZpcm9uWyJQNERJRkYiXSkKKyAgICAgICAgZGlmZiA9ICIiCisgICAgICAgIGZvciBlZGl0ZWRGaWxlIGluIGVkaXRlZEZpbGVzOgorICAgICAgICAgICAgZGlmZiArPSBwNF9yZWFkX3BpcGUoWydkaWZmJywgJy1kdScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsZGNhcmRfZW5jb2RlKGVkaXRlZEZpbGUpXSkKKworICAgICAgICAjIG5ldyBmaWxlIGRpZmYKKyAgICAgICAgbmV3ZGlmZiA9ICIiCisgICAgICAgIGZvciBuZXdGaWxlIGluIGZpbGVzVG9BZGQ6CisgICAgICAgICAgICBuZXdkaWZmICs9ICI9PT09IG5ldyBmaWxlID09PT1cbiIKKyAgICAgICAgICAgIG5ld2RpZmYgKz0gIi0tLSAvZGV2L251bGxcbiIKKyAgICAgICAgICAgIG5ld2RpZmYgKz0gIisrKyAlc1xuIiAlIG5ld0ZpbGUKKyAgICAgICAgICAgIGYgPSBvcGVuKG5ld0ZpbGUsICJyIikKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgbmV3ZGlmZiArPSAiKyIgKyBsaW5lCisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICByZXR1cm4gKGRpZmYgKyBuZXdkaWZmKS5yZXBsYWNlKCdcclxuJywgJ1xuJykKKworICAgIGRlZiBhcHBseUNvbW1pdChzZWxmLCBpZCk6CisgICAgICAgICIiIkFwcGx5IG9uZSBjb21taXQsIHJldHVybiBUcnVlIGlmIGl0IHN1Y2NlZWRlZC4iIiIKKworICAgICAgICBwcmludCAiQXBwbHlpbmciLCByZWFkX3BpcGUoWyJnaXQiLCAic2hvdyIsICItcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tZm9ybWF0PWZvcm1hdDolaCAlcyIsIGlkXSkKKworICAgICAgICAocDRVc2VyLCBnaXRFbWFpbCkgPSBzZWxmLnA0VXNlckZvckNvbW1pdChpZCkKKworICAgICAgICBkaWZmID0gcmVhZF9waXBlX2xpbmVzKCJnaXQgZGlmZi10cmVlIC1yICVzIFwiJXNeXCIgXCIlc1wiIiAlIChzZWxmLmRpZmZPcHRzLCBpZCwgaWQpKQorICAgICAgICBmaWxlc1RvQWRkID0gc2V0KCkKKyAgICAgICAgZmlsZXNUb0RlbGV0ZSA9IHNldCgpCisgICAgICAgIGVkaXRlZEZpbGVzID0gc2V0KCkKKyAgICAgICAgcHVyZVJlbmFtZUNvcHkgPSBzZXQoKQorICAgICAgICBmaWxlc1RvQ2hhbmdlRXhlY0JpdCA9IHt9CisKKyAgICAgICAgZm9yIGxpbmUgaW4gZGlmZjoKKyAgICAgICAgICAgIGRpZmYgPSBwYXJzZURpZmZUcmVlRW50cnkobGluZSkKKyAgICAgICAgICAgIG1vZGlmaWVyID0gZGlmZlsnc3RhdHVzJ10KKyAgICAgICAgICAgIHBhdGggPSBkaWZmWydzcmMnXQorICAgICAgICAgICAgaWYgbW9kaWZpZXIgPT0gIk0iOgorICAgICAgICAgICAgICAgIHA0X2VkaXQocGF0aCkKKyAgICAgICAgICAgICAgICBpZiBpc01vZGVFeGVjQ2hhbmdlZChkaWZmWydzcmNfbW9kZSddLCBkaWZmWydkc3RfbW9kZSddKToKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNUb0NoYW5nZUV4ZWNCaXRbcGF0aF0gPSBkaWZmWydkc3RfbW9kZSddCisgICAgICAgICAgICAgICAgZWRpdGVkRmlsZXMuYWRkKHBhdGgpCisgICAgICAgICAgICBlbGlmIG1vZGlmaWVyID09ICJBIjoKKyAgICAgICAgICAgICAgICBmaWxlc1RvQWRkLmFkZChwYXRoKQorICAgICAgICAgICAgICAgIGZpbGVzVG9DaGFuZ2VFeGVjQml0W3BhdGhdID0gZGlmZlsnZHN0X21vZGUnXQorICAgICAgICAgICAgICAgIGlmIHBhdGggaW4gZmlsZXNUb0RlbGV0ZToKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNUb0RlbGV0ZS5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgIGVsaWYgbW9kaWZpZXIgPT0gIkQiOgorICAgICAgICAgICAgICAgIGZpbGVzVG9EZWxldGUuYWRkKHBhdGgpCisgICAgICAgICAgICAgICAgaWYgcGF0aCBpbiBmaWxlc1RvQWRkOgorICAgICAgICAgICAgICAgICAgICBmaWxlc1RvQWRkLnJlbW92ZShwYXRoKQorICAgICAgICAgICAgZWxpZiBtb2RpZmllciA9PSAiQyI6CisgICAgICAgICAgICAgICAgc3JjLCBkZXN0ID0gZGlmZlsnc3JjJ10sIGRpZmZbJ2RzdCddCisgICAgICAgICAgICAgICAgcDRfaW50ZWdyYXRlKHNyYywgZGVzdCkKKyAgICAgICAgICAgICAgICBwdXJlUmVuYW1lQ29weS5hZGQoZGVzdCkKKyAgICAgICAgICAgICAgICBpZiBkaWZmWydzcmNfc2hhMSddICE9IGRpZmZbJ2RzdF9zaGExJ106CisgICAgICAgICAgICAgICAgICAgIHA0X2VkaXQoZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgcHVyZVJlbmFtZUNvcHkuZGlzY2FyZChkZXN0KQorICAgICAgICAgICAgICAgIGlmIGlzTW9kZUV4ZWNDaGFuZ2VkKGRpZmZbJ3NyY19tb2RlJ10sIGRpZmZbJ2RzdF9tb2RlJ10pOgorICAgICAgICAgICAgICAgICAgICBwNF9lZGl0KGRlc3QpCisgICAgICAgICAgICAgICAgICAgIHB1cmVSZW5hbWVDb3B5LmRpc2NhcmQoZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNUb0NoYW5nZUV4ZWNCaXRbZGVzdF0gPSBkaWZmWydkc3RfbW9kZSddCisgICAgICAgICAgICAgICAgaWYgc2VsZi5pc1dpbmRvd3M6CisgICAgICAgICAgICAgICAgICAgICMgdHVybiBvZmYgcmVhZC1vbmx5IGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgICAgICBvcy5jaG1vZChkZXN0LCBzdGF0LlNfSVdSSVRFKQorICAgICAgICAgICAgICAgIG9zLnVubGluayhkZXN0KQorICAgICAgICAgICAgICAgIGVkaXRlZEZpbGVzLmFkZChkZXN0KQorICAgICAgICAgICAgZWxpZiBtb2RpZmllciA9PSAiUiI6CisgICAgICAgICAgICAgICAgc3JjLCBkZXN0ID0gZGlmZlsnc3JjJ10sIGRpZmZbJ2RzdCddCisgICAgICAgICAgICAgICAgaWYgc2VsZi5wNEhhc01vdmVDb21tYW5kOgorICAgICAgICAgICAgICAgICAgICBwNF9lZGl0KHNyYykgICAgICAgICMgc3JjIG11c3QgYmUgb3BlbiBiZWZvcmUgbW92ZQorICAgICAgICAgICAgICAgICAgICBwNF9tb3ZlKHNyYywgZGVzdCkgICMgb3BlbnMgZm9yIChtb3ZlL2RlbGV0ZSwgbW92ZS9hZGQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcDRfaW50ZWdyYXRlKHNyYywgZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgZGlmZlsnc3JjX3NoYTEnXSAhPSBkaWZmWydkc3Rfc2hhMSddOgorICAgICAgICAgICAgICAgICAgICAgICAgcDRfZWRpdChkZXN0KQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHVyZVJlbmFtZUNvcHkuYWRkKGRlc3QpCisgICAgICAgICAgICAgICAgaWYgaXNNb2RlRXhlY0NoYW5nZWQoZGlmZlsnc3JjX21vZGUnXSwgZGlmZlsnZHN0X21vZGUnXSk6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnA0SGFzTW92ZUNvbW1hbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwNF9lZGl0KGRlc3QpICAgIyB3aXRoIG1vdmU6IGFscmVhZHkgb3Blbiwgd3JpdGFibGUKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNUb0NoYW5nZUV4ZWNCaXRbZGVzdF0gPSBkaWZmWydkc3RfbW9kZSddCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucDRIYXNNb3ZlQ29tbWFuZDoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5pc1dpbmRvd3M6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5jaG1vZChkZXN0LCBzdGF0LlNfSVdSSVRFKQorICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZGVzdCkKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNUb0RlbGV0ZS5hZGQoc3JjKQorICAgICAgICAgICAgICAgIGVkaXRlZEZpbGVzLmFkZChkZXN0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkaWUoInVua25vd24gbW9kaWZpZXIgJXMgZm9yICVzIiAlIChtb2RpZmllciwgcGF0aCkpCisKKyAgICAgICAgZGlmZmNtZCA9ICJnaXQgZGlmZi10cmVlIC0tZnVsbC1pbmRleCAtcCBcIiVzXCIiICUgKGlkKQorICAgICAgICBwYXRjaGNtZCA9IGRpZmZjbWQgKyAiIHwgZ2l0IGFwcGx5ICIKKyAgICAgICAgdHJ5UGF0Y2hDbWQgPSBwYXRjaGNtZCArICItLWNoZWNrIC0iCisgICAgICAgIGFwcGx5UGF0Y2hDbWQgPSBwYXRjaGNtZCArICItLWNoZWNrIC0tYXBwbHkgLSIKKyAgICAgICAgcGF0Y2hfc3VjY2VlZGVkID0gVHJ1ZQorCisgICAgICAgIGlmIG9zLnN5c3RlbSh0cnlQYXRjaENtZCkgIT0gMDoKKyAgICAgICAgICAgIGZpeGVkX3Jjc19rZXl3b3JkcyA9IEZhbHNlCisgICAgICAgICAgICBwYXRjaF9zdWNjZWVkZWQgPSBGYWxzZQorICAgICAgICAgICAgcHJpbnQgIlVuZm9ydHVuYXRlbHkgYXBwbHlpbmcgdGhlIGNoYW5nZSBmYWlsZWQhIgorCisgICAgICAgICAgICAjIFBhdGNoIGZhaWxlZCwgbWF5YmUgaXQncyBqdXN0IFJDUyBrZXl3b3JkIHdvZXMuIExvb2sgdGhyb3VnaAorICAgICAgICAgICAgIyB0aGUgcGF0Y2ggdG8gc2VlIGlmIHRoYXQncyBwb3NzaWJsZS4KKyAgICAgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woImdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCIpOgorICAgICAgICAgICAgICAgIGZpbGUgPSBOb25lCisgICAgICAgICAgICAgICAgcGF0dGVybiA9IE5vbmUKKyAgICAgICAgICAgICAgICBrd2ZpbGVzID0ge30KKyAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBlZGl0ZWRGaWxlcyB8IGZpbGVzVG9EZWxldGU6CisgICAgICAgICAgICAgICAgICAgICMgZGlkIHRoaXMgZmlsZSdzIGRlbHRhIGNvbnRhaW4gUkNTIGtleXdvcmRzPworICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gcDRfa2V5d29yZHNfcmVnZXhwX2Zvcl9maWxlKGZpbGUpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgcGF0dGVybjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBmaWxlIGlzIGEgcG9zc2liaWxpdHkuLi5sb29rIGZvciBSQ1Mga2V5d29yZHMuCisgICAgICAgICAgICAgICAgICAgICAgICByZWdleHAgPSByZS5jb21waWxlKHBhdHRlcm4sIHJlLlZFUkJPU0UpCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiByZWFkX3BpcGVfbGluZXMoWyJnaXQiLCAiZGlmZiIsICIlc14uLiVzIiAlIChpZCwgaWQpLCBmaWxlXSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVnZXhwLnNlYXJjaChsaW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJnb3Qga2V5d29yZCBtYXRjaCBvbiAlcyBpbiAlcyBpbiAlcyIgJSAocGF0dGVybiwgbGluZSwgZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dmaWxlc1tmaWxlXSA9IHBhdHRlcm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIGt3ZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiemFwcGluZyAlcyB3aXRoICVzIiAlIChsaW5lLHBhdHRlcm4pCisgICAgICAgICAgICAgICAgICAgICMgRmlsZSBpcyBiZWluZyBkZWxldGVkLCBzbyBub3Qgb3BlbiBpbiBwNC4gIE11c3QKKyAgICAgICAgICAgICAgICAgICAgIyBkaXNhYmxlIHRoZSByZWFkLW9ubHkgYml0IG9uIHdpbmRvd3MuCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaXNXaW5kb3dzIGFuZCBmaWxlIG5vdCBpbiBlZGl0ZWRGaWxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNobW9kKGZpbGUsIHN0YXQuU19JV1JJVEUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0Y2hSQ1NLZXl3b3JkcyhmaWxlLCBrd2ZpbGVzW2ZpbGVdKQorICAgICAgICAgICAgICAgICAgICBmaXhlZF9yY3Nfa2V5d29yZHMgPSBUcnVlCisKKyAgICAgICAgICAgIGlmIGZpeGVkX3Jjc19rZXl3b3JkczoKKyAgICAgICAgICAgICAgICBwcmludCAiUmV0cnlpbmcgdGhlIHBhdGNoIHdpdGggUkNTIGtleXdvcmRzIGNsZWFuZWQgdXAiCisgICAgICAgICAgICAgICAgaWYgb3Muc3lzdGVtKHRyeVBhdGNoQ21kKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBwYXRjaF9zdWNjZWVkZWQgPSBUcnVlCisKKyAgICAgICAgaWYgbm90IHBhdGNoX3N1Y2NlZWRlZDoKKyAgICAgICAgICAgIGZvciBmIGluIGVkaXRlZEZpbGVzOgorICAgICAgICAgICAgICAgIHA0X3JldmVydChmKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgIworICAgICAgICAjIEFwcGx5IHRoZSBwYXRjaCBmb3IgcmVhbCwgYW5kIGRvIGFkZC9kZWxldGUvK3ggaGFuZGxpbmcuCisgICAgICAgICMKKyAgICAgICAgc3lzdGVtKGFwcGx5UGF0Y2hDbWQpCisKKyAgICAgICAgZm9yIGYgaW4gZmlsZXNUb0FkZDoKKyAgICAgICAgICAgIHA0X2FkZChmKQorICAgICAgICBmb3IgZiBpbiBmaWxlc1RvRGVsZXRlOgorICAgICAgICAgICAgcDRfcmV2ZXJ0KGYpCisgICAgICAgICAgICBwNF9kZWxldGUoZikKKworICAgICAgICAjIFNldC9jbGVhciBleGVjdXRhYmxlIGJpdHMKKyAgICAgICAgZm9yIGYgaW4gZmlsZXNUb0NoYW5nZUV4ZWNCaXQua2V5cygpOgorICAgICAgICAgICAgbW9kZSA9IGZpbGVzVG9DaGFuZ2VFeGVjQml0W2ZdCisgICAgICAgICAgICBzZXRQNEV4ZWNCaXQoZiwgbW9kZSkKKworICAgICAgICAjCisgICAgICAgICMgQnVpbGQgcDQgY2hhbmdlIGRlc2NyaXB0aW9uLCBzdGFydGluZyB3aXRoIHRoZSBjb250ZW50cworICAgICAgICAjIG9mIHRoZSBnaXQgY29tbWl0IG1lc3NhZ2UuCisgICAgICAgICMKKyAgICAgICAgbG9nTWVzc2FnZSA9IGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChpZCkKKyAgICAgICAgbG9nTWVzc2FnZSA9IGxvZ01lc3NhZ2Uuc3RyaXAoKQorICAgICAgICAobG9nTWVzc2FnZSwgam9icykgPSBzZWxmLnNlcGFyYXRlX2pvYnNfZnJvbV9kZXNjcmlwdGlvbihsb2dNZXNzYWdlKQorCisgICAgICAgIHRlbXBsYXRlID0gc2VsZi5wcmVwYXJlU3VibWl0VGVtcGxhdGUoKQorICAgICAgICBzdWJtaXRUZW1wbGF0ZSA9IHNlbGYucHJlcGFyZUxvZ01lc3NhZ2UodGVtcGxhdGUsIGxvZ01lc3NhZ2UsIGpvYnMpCisKKyAgICAgICAgaWYgc2VsZi5wcmVzZXJ2ZVVzZXI6CisgICAgICAgICAgIHN1Ym1pdFRlbXBsYXRlICs9ICJcbiMjIyMjIyMjIEFjdHVhbCB1c2VyICVzLCBtb2RpZmllZCBhZnRlciBjb21taXRcbiIgJSBwNFVzZXIKKworICAgICAgICBpZiBzZWxmLmNoZWNrQXV0aG9yc2hpcCBhbmQgbm90IHNlbGYucDRVc2VySXNNZShwNFVzZXIpOgorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgKz0gIiMjIyMjIyMjIGdpdCBhdXRob3IgJXMgZG9lcyBub3QgbWF0Y2ggeW91ciBwNCBhY2NvdW50LlxuIiAlIGdpdEVtYWlsCisgICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSArPSAiIyMjIyMjIyMgVXNlIG9wdGlvbiAtLXByZXNlcnZlLXVzZXIgdG8gbW9kaWZ5IGF1dGhvcnNoaXAuXG4iCisgICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSArPSAiIyMjIyMjIyMgVmFyaWFibGUgZ2l0LXA0LnNraXBVc2VyTmFtZUNoZWNrIGhpZGVzIHRoaXMgbWVzc2FnZS5cbiIKKworICAgICAgICBzZXBhcmF0b3JMaW5lID0gIiMjIyMjIyMjIGV2ZXJ5dGhpbmcgYmVsb3cgdGhpcyBsaW5lIGlzIGp1c3QgdGhlIGRpZmYgIyMjIyMjI1xuIgorICAgICAgICBpZiBub3Qgc2VsZi5wcmVwYXJlX3A0X29ubHk6CisgICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSArPSBzZXBhcmF0b3JMaW5lCisgICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSArPSBzZWxmLmdldF9kaWZmX2Rlc2NyaXB0aW9uKGVkaXRlZEZpbGVzLCBmaWxlc1RvQWRkKQorCisgICAgICAgIChoYW5kbGUsIGZpbGVOYW1lKSA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB0bXBGaWxlID0gb3MuZmRvcGVuKGhhbmRsZSwgIncrYiIpCisgICAgICAgIGlmIHNlbGYuaXNXaW5kb3dzOgorICAgICAgICAgICAgc3VibWl0VGVtcGxhdGUgPSBzdWJtaXRUZW1wbGF0ZS5yZXBsYWNlKCJcbiIsICJcclxuIikKKyAgICAgICAgdG1wRmlsZS53cml0ZShzdWJtaXRUZW1wbGF0ZSkKKyAgICAgICAgdG1wRmlsZS5jbG9zZSgpCisKKyAgICAgICAgaWYgc2VsZi5wcmVwYXJlX3A0X29ubHk6CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIExlYXZlIHRoZSBwNCB0cmVlIHByZXBhcmVkLCBhbmQgdGhlIHN1Ym1pdCB0ZW1wbGF0ZSBhcm91bmQKKyAgICAgICAgICAgICMgYW5kIGxldCB0aGUgdXNlciBkZWNpZGUgd2hhdCB0byBkbyBuZXh0CisgICAgICAgICAgICAjCisgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgcHJpbnQgIlA0IHdvcmtzcGFjZSBwcmVwYXJlZCBmb3Igc3VibWlzc2lvbi4iCisgICAgICAgICAgICBwcmludCAiVG8gc3VibWl0IG9yIHJldmVydCwgZ28gdG8gY2xpZW50IHdvcmtzcGFjZSIKKyAgICAgICAgICAgIHByaW50ICIgICIgKyBzZWxmLmNsaWVudFBhdGgKKyAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICBwcmludCAiVG8gc3VibWl0LCB1c2UgXCJwNCBzdWJtaXRcIiB0byB3cml0ZSBhIG5ldyBkZXNjcmlwdGlvbiwiCisgICAgICAgICAgICBwcmludCAib3IgXCJwNCBzdWJtaXQgLWkgPCVzXCIgdG8gdXNlIHRoZSBvbmUgcHJlcGFyZWQgYnkiIFwKKyAgICAgICAgICAgICAgICAgICIgXCJnaXQgcDRcIi4iICUgZmlsZU5hbWUKKyAgICAgICAgICAgIHByaW50ICJZb3UgY2FuIGRlbGV0ZSB0aGUgZmlsZSBcIiVzXCIgd2hlbiBmaW5pc2hlZC4iICUgZmlsZU5hbWUKKworICAgICAgICAgICAgaWYgc2VsZi5wcmVzZXJ2ZVVzZXIgYW5kIHA0VXNlciBhbmQgbm90IHNlbGYucDRVc2VySXNNZShwNFVzZXIpOgorICAgICAgICAgICAgICAgIHByaW50ICJUbyBwcmVzZXJ2ZSBjaGFuZ2Ugb3duZXJzaGlwIGJ5IHVzZXIgJXMsIHlvdSBtdXN0XG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAiZG8gXCJwNCBjaGFuZ2UgLWYgPGNoYW5nZT5cIiBhZnRlciBzdWJtaXR0aW5nIGFuZFxuIiBcCisgICAgICAgICAgICAgICAgICAgICAgImVkaXQgdGhlIFVzZXIgZmllbGQuIgorICAgICAgICAgICAgaWYgcHVyZVJlbmFtZUNvcHk6CisgICAgICAgICAgICAgICAgcHJpbnQgIkFmdGVyIHN1Ym1pdHRpbmcsIHJlbmFtZWQgZmlsZXMgbXVzdCBiZSByZS1zeW5jZWQuIgorICAgICAgICAgICAgICAgIHByaW50ICJJbnZva2UgXCJwNCBzeW5jIC1mXCIgb24gZWFjaCBvZiB0aGVzZSBmaWxlczoiCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gcHVyZVJlbmFtZUNvcHk6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIgICIgKyBmCisKKyAgICAgICAgICAgIHByaW50CisgICAgICAgICAgICBwcmludCAiVG8gcmV2ZXJ0IHRoZSBjaGFuZ2VzLCB1c2UgXCJwNCByZXZlcnQgLi4uXCIsIGFuZCBkZWxldGUiCisgICAgICAgICAgICBwcmludCAidGhlIHN1Ym1pdCB0ZW1wbGF0ZSBmaWxlIFwiJXNcIiIgJSBmaWxlTmFtZQorICAgICAgICAgICAgaWYgZmlsZXNUb0FkZDoKKyAgICAgICAgICAgICAgICBwcmludCAiU2luY2UgdGhlIGNvbW1pdCBhZGRzIG5ldyBmaWxlcywgdGhleSBtdXN0IGJlIGRlbGV0ZWQ6IgorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzVG9BZGQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIgICIgKyBmCisgICAgICAgICAgICBwcmludAorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjCisgICAgICAgICMgTGV0IHRoZSB1c2VyIGVkaXQgdGhlIGNoYW5nZSBkZXNjcmlwdGlvbiwgdGhlbiBzdWJtaXQgaXQuCisgICAgICAgICMKKyAgICAgICAgaWYgc2VsZi5lZGl0X3RlbXBsYXRlKGZpbGVOYW1lKToKKyAgICAgICAgICAgICMgcmVhZCB0aGUgZWRpdGVkIG1lc3NhZ2UgYW5kIHN1Ym1pdAorICAgICAgICAgICAgcmV0ID0gVHJ1ZQorICAgICAgICAgICAgdG1wRmlsZSA9IG9wZW4oZmlsZU5hbWUsICJyYiIpCisgICAgICAgICAgICBtZXNzYWdlID0gdG1wRmlsZS5yZWFkKCkKKyAgICAgICAgICAgIHRtcEZpbGUuY2xvc2UoKQorICAgICAgICAgICAgaWYgc2VsZi5pc1dpbmRvd3M6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgiXHJcbiIsICJcbiIpCisgICAgICAgICAgICBzdWJtaXRUZW1wbGF0ZSA9IG1lc3NhZ2VbOm1lc3NhZ2UuaW5kZXgoc2VwYXJhdG9yTGluZSldCisgICAgICAgICAgICBwNF93cml0ZV9waXBlKFsnc3VibWl0JywgJy1pJ10sIHN1Ym1pdFRlbXBsYXRlKQorCisgICAgICAgICAgICBpZiBzZWxmLnByZXNlcnZlVXNlcjoKKyAgICAgICAgICAgICAgICBpZiBwNFVzZXI6CisgICAgICAgICAgICAgICAgICAgICMgR2V0IGxhc3QgY2hhbmdlbGlzdCBudW1iZXIuIENhbm5vdCBlYXNpbHkgZ2V0IGl0IGZyb20KKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgc3VibWl0IGNvbW1hbmQgb3V0cHV0IGFzIHRoZSBvdXRwdXQgaXMKKyAgICAgICAgICAgICAgICAgICAgIyB1bm1hcnNoYWxsZWQuCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWxpc3QgPSBzZWxmLmxhc3RQNENoYW5nZWxpc3QoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGlmeUNoYW5nZWxpc3RVc2VyKGNoYW5nZWxpc3QsIHA0VXNlcikKKworICAgICAgICAgICAgIyBUaGUgcmVuYW1lL2NvcHkgaGFwcGVuZWQgYnkgYXBwbHlpbmcgYSBwYXRjaCB0aGF0IGNyZWF0ZWQgYQorICAgICAgICAgICAgIyBuZXcgZmlsZS4gIFRoaXMgbGVhdmVzIGl0IHdyaXRhYmxlLCB3aGljaCBjb25mdXNlcyBwNC4KKyAgICAgICAgICAgIGZvciBmIGluIHB1cmVSZW5hbWVDb3B5OgorICAgICAgICAgICAgICAgIHA0X3N5bmMoZiwgIi1mIikKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBza2lwIHRoaXMgcGF0Y2gKKyAgICAgICAgICAgIHJldCA9IEZhbHNlCisgICAgICAgICAgICBwcmludCAiU3VibWlzc2lvbiBjYW5jZWxsZWQsIHVuZG9pbmcgcDQgY2hhbmdlcy4iCisgICAgICAgICAgICBmb3IgZiBpbiBlZGl0ZWRGaWxlczoKKyAgICAgICAgICAgICAgICBwNF9yZXZlcnQoZikKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzVG9BZGQ6CisgICAgICAgICAgICAgICAgcDRfcmV2ZXJ0KGYpCisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGYpCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlc1RvRGVsZXRlOgorICAgICAgICAgICAgICAgIHA0X3JldmVydChmKQorCisgICAgICAgIG9zLnJlbW92ZShmaWxlTmFtZSkKKyAgICAgICAgcmV0dXJuIHJldAorCisgICAgIyBFeHBvcnQgZ2l0IHRhZ3MgYXMgcDQgbGFiZWxzLiBDcmVhdGUgYSBwNCBsYWJlbCBhbmQgdGhlbiB0YWcKKyAgICAjIHdpdGggdGhhdC4KKyAgICBkZWYgZXhwb3J0R2l0VGFncyhzZWxmLCBnaXRUYWdzKToKKyAgICAgICAgdmFsaWRMYWJlbFJlZ2V4cCA9IGdpdENvbmZpZygiZ2l0LXA0LmxhYmVsRXhwb3J0UmVnZXhwIikKKyAgICAgICAgaWYgbGVuKHZhbGlkTGFiZWxSZWdleHApID09IDA6CisgICAgICAgICAgICB2YWxpZExhYmVsUmVnZXhwID0gZGVmYXVsdExhYmVsUmVnZXhwCisgICAgICAgIG0gPSByZS5jb21waWxlKHZhbGlkTGFiZWxSZWdleHApCisKKyAgICAgICAgZm9yIG5hbWUgaW4gZ2l0VGFnczoKKworICAgICAgICAgICAgaWYgbm90IG0ubWF0Y2gobmFtZSk6CisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgInRhZyAlcyBkb2VzIG5vdCBtYXRjaCByZWdleHAgJXMiICUgKG5hbWUsIHZhbGlkTGFiZWxSZWdleHApCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBHZXQgdGhlIHA0IGNvbW1pdCB0aGlzIGNvcnJlc3BvbmRzIHRvCisgICAgICAgICAgICBsb2dNZXNzYWdlID0gZXh0cmFjdExvZ01lc3NhZ2VGcm9tR2l0Q29tbWl0KG5hbWUpCisgICAgICAgICAgICB2YWx1ZXMgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nTWVzc2FnZSkKKworICAgICAgICAgICAgaWYgbm90IHZhbHVlcy5oYXNfa2V5KCdjaGFuZ2UnKToKKyAgICAgICAgICAgICAgICAjIGEgdGFnIHBvaW50aW5nIHRvIHNvbWV0aGluZyBub3Qgc2VudCB0byBwNDsgaWdub3JlCisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgImdpdCB0YWcgJXMgZG9lcyBub3QgZ2l2ZSBhIHA0IGNvbW1pdCIgJSBuYW1lCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY2hhbmdlbGlzdCA9IHZhbHVlc1snY2hhbmdlJ10KKworICAgICAgICAgICAgIyBHZXQgdGhlIHRhZyBkZXRhaWxzLgorICAgICAgICAgICAgaW5IZWFkZXIgPSBUcnVlCisgICAgICAgICAgICBpc0Fubm90YXRlZCA9IEZhbHNlCisgICAgICAgICAgICBib2R5ID0gW10KKyAgICAgICAgICAgIGZvciBsIGluIHJlYWRfcGlwZV9saW5lcyhbImdpdCIsICJjYXQtZmlsZSIsICItcCIsIG5hbWVdKToKKyAgICAgICAgICAgICAgICBsID0gbC5zdHJpcCgpCisgICAgICAgICAgICAgICAgaWYgaW5IZWFkZXI6CisgICAgICAgICAgICAgICAgICAgIGlmIHJlLm1hdGNoKHIndGFnXHMrJywgbCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpc0Fubm90YXRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZWxpZiByZS5tYXRjaChyJ1xzKiQnLCBsKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluSGVhZGVyID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYm9keS5hcHBlbmQobCkKKworICAgICAgICAgICAgaWYgbm90IGlzQW5ub3RhdGVkOgorICAgICAgICAgICAgICAgIGJvZHkgPSBbImxpZ2h0d2VpZ2h0IHRhZyBpbXBvcnRlZCBieSBnaXQgcDRcbiJdCisKKyAgICAgICAgICAgICMgQ3JlYXRlIHRoZSBsYWJlbCAtIHVzZSB0aGUgc2FtZSB2aWV3IGFzIHRoZSBjbGllbnQgc3BlYyB3ZSBhcmUgdXNpbmcKKyAgICAgICAgICAgIGNsaWVudFNwZWMgPSBnZXRDbGllbnRTcGVjKCkKKworICAgICAgICAgICAgbGFiZWxUZW1wbGF0ZSAgPSAiTGFiZWw6ICVzXG4iICUgbmFtZQorICAgICAgICAgICAgbGFiZWxUZW1wbGF0ZSArPSAiRGVzY3JpcHRpb246XG4iCisgICAgICAgICAgICBmb3IgYiBpbiBib2R5OgorICAgICAgICAgICAgICAgIGxhYmVsVGVtcGxhdGUgKz0gIlx0IiArIGIgKyAiXG4iCisgICAgICAgICAgICBsYWJlbFRlbXBsYXRlICs9ICJWaWV3OlxuIgorICAgICAgICAgICAgZm9yIGRlcG90X3NpZGUgaW4gY2xpZW50U3BlYy5tYXBwaW5nczoKKyAgICAgICAgICAgICAgICBsYWJlbFRlbXBsYXRlICs9ICJcdCVzXG4iICUgZGVwb3Rfc2lkZQorCisgICAgICAgICAgICBpZiBzZWxmLmRyeV9ydW46CisgICAgICAgICAgICAgICAgcHJpbnQgIldvdWxkIGNyZWF0ZSBwNCBsYWJlbCAlcyBmb3IgdGFnIiAlIG5hbWUKKyAgICAgICAgICAgIGVsaWYgc2VsZi5wcmVwYXJlX3A0X29ubHk6CisgICAgICAgICAgICAgICAgcHJpbnQgIk5vdCBjcmVhdGluZyBwNCBsYWJlbCAlcyBmb3IgdGFnIGR1ZSB0byBvcHRpb24iIFwKKyAgICAgICAgICAgICAgICAgICAgICAiIC0tcHJlcGFyZS1wNC1vbmx5IiAlIG5hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcDRfd3JpdGVfcGlwZShbImxhYmVsIiwgIi1pIl0sIGxhYmVsVGVtcGxhdGUpCisKKyAgICAgICAgICAgICAgICAjIFVzZSB0aGUgbGFiZWwKKyAgICAgICAgICAgICAgICBwNF9zeXN0ZW0oWyJ0YWciLCAiLWwiLCBuYW1lXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsiJXNAJXMiICUgKGRlcG90X3NpZGUsIGNoYW5nZWxpc3QpIGZvciBkZXBvdF9zaWRlIGluIGNsaWVudFNwZWMubWFwcGluZ3NdKQorCisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgImNyZWF0ZWQgcDQgbGFiZWwgZm9yIHRhZyAlcyIgJSBuYW1lCisKKyAgICBkZWYgcnVuKHNlbGYsIGFyZ3MpOgorICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgIHNlbGYubWFzdGVyID0gY3VycmVudEdpdEJyYW5jaCgpCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5tYXN0ZXIpID09IDAgb3Igbm90IGdpdEJyYW5jaEV4aXN0cygicmVmcy9oZWFkcy8lcyIgJSBzZWxmLm1hc3Rlcik6CisgICAgICAgICAgICAgICAgZGllKCJEZXRlY3RpbmcgY3VycmVudCBnaXQgYnJhbmNoIGZhaWxlZCEiKQorICAgICAgICBlbGlmIGxlbihhcmdzKSA9PSAxOgorICAgICAgICAgICAgc2VsZi5tYXN0ZXIgPSBhcmdzWzBdCisgICAgICAgICAgICBpZiBub3QgYnJhbmNoRXhpc3RzKHNlbGYubWFzdGVyKToKKyAgICAgICAgICAgICAgICBkaWUoIkJyYW5jaCAlcyBkb2VzIG5vdCBleGlzdCIgJSBzZWxmLm1hc3RlcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGFsbG93U3VibWl0ID0gZ2l0Q29uZmlnKCJnaXQtcDQuYWxsb3dTdWJtaXQiKQorICAgICAgICBpZiBsZW4oYWxsb3dTdWJtaXQpID4gMCBhbmQgbm90IHNlbGYubWFzdGVyIGluIGFsbG93U3VibWl0LnNwbGl0KCIsIik6CisgICAgICAgICAgICBkaWUoIiVzIGlzIG5vdCBpbiBnaXQtcDQuYWxsb3dTdWJtaXQiICUgc2VsZi5tYXN0ZXIpCisKKyAgICAgICAgW3Vwc3RyZWFtLCBzZXR0aW5nc10gPSBmaW5kVXBzdHJlYW1CcmFuY2hQb2ludCgpCisgICAgICAgIHNlbGYuZGVwb3RQYXRoID0gc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ11bMF0KKyAgICAgICAgaWYgbGVuKHNlbGYub3JpZ2luKSA9PSAwOgorICAgICAgICAgICAgc2VsZi5vcmlnaW4gPSB1cHN0cmVhbQorCisgICAgICAgIGlmIHNlbGYucHJlc2VydmVVc2VyOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuY2FuQ2hhbmdlQ2hhbmdlbGlzdHMoKToKKyAgICAgICAgICAgICAgICBkaWUoIkNhbm5vdCBwcmVzZXJ2ZSB1c2VyIG5hbWVzIHdpdGhvdXQgcDQgc3VwZXItdXNlciBvciBhZG1pbiBwZXJtaXNzaW9ucyIpCisKKyAgICAgICAgIyBpZiBub3Qgc2V0IGZyb20gdGhlIGNvbW1hbmQgbGluZSwgdHJ5IHRoZSBjb25maWcgZmlsZQorICAgICAgICBpZiBzZWxmLmNvbmZsaWN0X2JlaGF2aW9yIGlzIE5vbmU6CisgICAgICAgICAgICB2YWwgPSBnaXRDb25maWcoImdpdC1wNC5jb25mbGljdCIpCisgICAgICAgICAgICBpZiB2YWw6CisgICAgICAgICAgICAgICAgaWYgdmFsIG5vdCBpbiBzZWxmLmNvbmZsaWN0X2JlaGF2aW9yX2Nob2ljZXM6CisgICAgICAgICAgICAgICAgICAgIGRpZSgiSW52YWxpZCB2YWx1ZSAnJXMnIGZvciBjb25maWcgZ2l0LXA0LmNvbmZsaWN0IiAlIHZhbCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsID0gImFzayIKKyAgICAgICAgICAgIHNlbGYuY29uZmxpY3RfYmVoYXZpb3IgPSB2YWwKKworICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiT3JpZ2luIGJyYW5jaCBpcyAiICsgc2VsZi5vcmlnaW4KKworICAgICAgICBpZiBsZW4oc2VsZi5kZXBvdFBhdGgpID09IDA6CisgICAgICAgICAgICBwcmludCAiSW50ZXJuYWwgZXJyb3I6IGNhbm5vdCBsb2NhdGUgcGVyZm9yY2UgZGVwb3QgcGF0aCBmcm9tIGV4aXN0aW5nIGJyYW5jaGVzIgorICAgICAgICAgICAgc3lzLmV4aXQoMTI4KQorCisgICAgICAgIHNlbGYudXNlQ2xpZW50U3BlYyA9IEZhbHNlCisgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woImdpdC1wNC51c2VjbGllbnRzcGVjIik6CisgICAgICAgICAgICBzZWxmLnVzZUNsaWVudFNwZWMgPSBUcnVlCisgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYzoKKyAgICAgICAgICAgIHNlbGYuY2xpZW50U3BlY0RpcnMgPSBnZXRDbGllbnRTcGVjKCkKKworICAgICAgICAjIENoZWNrIGZvciB0aGUgZXhpc3RhbmNlIG9mIFA0IGJyYW5jaGVzCisgICAgICAgIGJyYW5jaGVzRGV0ZWN0ZWQgPSAobGVuKHA0QnJhbmNoZXNJbkdpdCgpLmtleXMoKSkgPiAxKQorCisgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYyBhbmQgbm90IGJyYW5jaGVzRGV0ZWN0ZWQ6CisgICAgICAgICAgICAjIGFsbCBmaWxlcyBhcmUgcmVsYXRpdmUgdG8gdGhlIGNsaWVudCBzcGVjCisgICAgICAgICAgICBzZWxmLmNsaWVudFBhdGggPSBnZXRDbGllbnRSb290KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2xpZW50UGF0aCA9IHA0V2hlcmUoc2VsZi5kZXBvdFBhdGgpCisKKyAgICAgICAgaWYgc2VsZi5jbGllbnRQYXRoID09ICIiOgorICAgICAgICAgICAgZGllKCJFcnJvcjogQ2Fubm90IGxvY2F0ZSBwZXJmb3JjZSBjaGVja291dCBvZiAlcyBpbiBjbGllbnQgdmlldyIgJSBzZWxmLmRlcG90UGF0aCkKKworICAgICAgICBwcmludCAiUGVyZm9yY2UgY2hlY2tvdXQgZm9yIGRlcG90IHBhdGggJXMgbG9jYXRlZCBhdCAlcyIgJSAoc2VsZi5kZXBvdFBhdGgsIHNlbGYuY2xpZW50UGF0aCkKKyAgICAgICAgc2VsZi5vbGRXb3JraW5nRGlyZWN0b3J5ID0gb3MuZ2V0Y3dkKCkKKworICAgICAgICAjIGVuc3VyZSB0aGUgY2xpZW50UGF0aCBleGlzdHMKKyAgICAgICAgbmV3X2NsaWVudF9kaXIgPSBGYWxzZQorICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5jbGllbnRQYXRoKToKKyAgICAgICAgICAgIG5ld19jbGllbnRfZGlyID0gVHJ1ZQorICAgICAgICAgICAgb3MubWFrZWRpcnMoc2VsZi5jbGllbnRQYXRoKQorCisgICAgICAgIGNoZGlyKHNlbGYuY2xpZW50UGF0aCwgaXNfY2xpZW50X3BhdGg9VHJ1ZSkKKyAgICAgICAgaWYgc2VsZi5kcnlfcnVuOgorICAgICAgICAgICAgcHJpbnQgIldvdWxkIHN5bmNocm9uaXplIHA0IGNoZWNrb3V0IGluICVzIiAlIHNlbGYuY2xpZW50UGF0aAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIlN5bmNocm9uaXppbmcgcDQgY2hlY2tvdXQuLi4iCisgICAgICAgICAgICBpZiBuZXdfY2xpZW50X2RpcjoKKyAgICAgICAgICAgICAgICAjIG9sZCBvbmUgd2FzIGRlc3Ryb3llZCwgYW5kIG1heWJlIG5vYm9keSB0b2xkIHA0CisgICAgICAgICAgICAgICAgcDRfc3luYygiLi4uIiwgIi1mIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcDRfc3luYygiLi4uIikKKyAgICAgICAgc2VsZi5jaGVjaygpCisKKyAgICAgICAgY29tbWl0cyA9IFtdCisgICAgICAgIGZvciBsaW5lIGluIHJlYWRfcGlwZV9saW5lcyhbImdpdCIsICJyZXYtbGlzdCIsICItLW5vLW1lcmdlcyIsICIlcy4uJXMiICUgKHNlbGYub3JpZ2luLCBzZWxmLm1hc3RlcildKToKKyAgICAgICAgICAgIGNvbW1pdHMuYXBwZW5kKGxpbmUuc3RyaXAoKSkKKyAgICAgICAgY29tbWl0cy5yZXZlcnNlKCkKKworICAgICAgICBpZiBzZWxmLnByZXNlcnZlVXNlciBvciBnaXRDb25maWdCb29sKCJnaXQtcDQuc2tpcFVzZXJOYW1lQ2hlY2siKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tBdXRob3JzaGlwID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tBdXRob3JzaGlwID0gVHJ1ZQorCisgICAgICAgIGlmIHNlbGYucHJlc2VydmVVc2VyOgorICAgICAgICAgICAgc2VsZi5jaGVja1ZhbGlkUDRVc2Vycyhjb21taXRzKQorCisgICAgICAgICMKKyAgICAgICAgIyBCdWlsZCB1cCBhIHNldCBvZiBvcHRpb25zIHRvIGJlIHBhc3NlZCB0byBkaWZmIHdoZW4KKyAgICAgICAgIyBzdWJtaXR0aW5nIGVhY2ggY29tbWl0IHRvIHA0LgorICAgICAgICAjCisgICAgICAgIGlmIHNlbGYuZGV0ZWN0UmVuYW1lczoKKyAgICAgICAgICAgICMgY29tbWFuZC1saW5lIC1NIGFyZworICAgICAgICAgICAgc2VsZi5kaWZmT3B0cyA9ICItTSIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSWYgbm90IGV4cGxpY2l0bHkgc2V0IGNoZWNrIHRoZSBjb25maWcgdmFyaWFibGUKKyAgICAgICAgICAgIGRldGVjdFJlbmFtZXMgPSBnaXRDb25maWcoImdpdC1wNC5kZXRlY3RSZW5hbWVzIikKKworICAgICAgICAgICAgaWYgZGV0ZWN0UmVuYW1lcy5sb3dlcigpID09ICJmYWxzZSIgb3IgZGV0ZWN0UmVuYW1lcyA9PSAiIjoKKyAgICAgICAgICAgICAgICBzZWxmLmRpZmZPcHRzID0gIiIKKyAgICAgICAgICAgIGVsaWYgZGV0ZWN0UmVuYW1lcy5sb3dlcigpID09ICJ0cnVlIjoKKyAgICAgICAgICAgICAgICBzZWxmLmRpZmZPcHRzID0gIi1NIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmRpZmZPcHRzID0gIi1NJXMiICUgZGV0ZWN0UmVuYW1lcworCisgICAgICAgICMgbm8gY29tbWFuZC1saW5lIGFyZyBmb3IgLUMgb3IgLS1maW5kLWNvcGllcy1oYXJkZXIsIGp1c3QKKyAgICAgICAgIyBjb25maWcgdmFyaWFibGVzCisgICAgICAgIGRldGVjdENvcGllcyA9IGdpdENvbmZpZygiZ2l0LXA0LmRldGVjdENvcGllcyIpCisgICAgICAgIGlmIGRldGVjdENvcGllcy5sb3dlcigpID09ICJmYWxzZSIgb3IgZGV0ZWN0Q29waWVzID09ICIiOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbGlmIGRldGVjdENvcGllcy5sb3dlcigpID09ICJ0cnVlIjoKKyAgICAgICAgICAgIHNlbGYuZGlmZk9wdHMgKz0gIiAtQyIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZGlmZk9wdHMgKz0gIiAtQyVzIiAlIGRldGVjdENvcGllcworCisgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woImdpdC1wNC5kZXRlY3RDb3BpZXNIYXJkZXIiKToKKyAgICAgICAgICAgIHNlbGYuZGlmZk9wdHMgKz0gIiAtLWZpbmQtY29waWVzLWhhcmRlciIKKworICAgICAgICAjCisgICAgICAgICMgQXBwbHkgdGhlIGNvbW1pdHMsIG9uZSBhdCBhIHRpbWUuICBPbiBmYWlsdXJlLCBhc2sgaWYgc2hvdWxkCisgICAgICAgICMgY29udGludWUgdG8gdHJ5IHRoZSByZXN0IG9mIHRoZSBwYXRjaGVzLCBvciBxdWl0LgorICAgICAgICAjCisgICAgICAgIGlmIHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgIHByaW50ICJXb3VsZCBhcHBseSIKKyAgICAgICAgYXBwbGllZCA9IFtdCisgICAgICAgIGxhc3QgPSBsZW4oY29tbWl0cykgLSAxCisgICAgICAgIGZvciBpLCBjb21taXQgaW4gZW51bWVyYXRlKGNvbW1pdHMpOgorICAgICAgICAgICAgaWYgc2VsZi5kcnlfcnVuOgorICAgICAgICAgICAgICAgIHByaW50ICIgIiwgcmVhZF9waXBlKFsiZ2l0IiwgInNob3ciLCAiLXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3JtYXQ9Zm9ybWF0OiVoICVzIiwgY29tbWl0XSkKKyAgICAgICAgICAgICAgICBvayA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb2sgPSBzZWxmLmFwcGx5Q29tbWl0KGNvbW1pdCkKKyAgICAgICAgICAgIGlmIG9rOgorICAgICAgICAgICAgICAgIGFwcGxpZWQuYXBwZW5kKGNvbW1pdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5wcmVwYXJlX3A0X29ubHkgYW5kIGkgPCBsYXN0OgorICAgICAgICAgICAgICAgICAgICBwcmludCAiUHJvY2Vzc2luZyBvbmx5IHRoZSBmaXJzdCBjb21taXQgZHVlIHRvIG9wdGlvbiIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiIC0tcHJlcGFyZS1wNC1vbmx5IgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGkgPCBsYXN0OgorICAgICAgICAgICAgICAgICAgICBxdWl0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgcHJvbXB0IGZvciB3aGF0IHRvIGRvLCBvciB1c2UgdGhlIG9wdGlvbi92YXJpYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb25mbGljdF9iZWhhdmlvciA9PSAiYXNrIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiV2hhdCBkbyB5b3Ugd2FudCB0byBkbz8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSByYXdfaW5wdXQoIltzXWtpcCB0aGlzIGNvbW1pdCBidXQgYXBwbHkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0aGUgcmVzdCwgb3IgW3FddWl0PyAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZXNwb25zZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5jb25mbGljdF9iZWhhdmlvciA9PSAic2tpcCI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAicyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5jb25mbGljdF9iZWhhdmlvciA9PSAicXVpdCI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSAicSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllKCJVbmtub3duIGNvbmZsaWN0X2JlaGF2aW9yICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25mbGljdF9iZWhhdmlvcikKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVzcG9uc2VbMF0gPT0gInMiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJTa2lwcGluZyB0aGlzIGNvbW1pdCwgYnV0IGFwcGx5aW5nIHRoZSByZXN0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXNwb25zZVswXSA9PSAicSI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIlF1aXR0aW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aXQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgcXVpdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgY2hkaXIoc2VsZi5vbGRXb3JraW5nRGlyZWN0b3J5KQorCisgICAgICAgIGlmIHNlbGYuZHJ5X3J1bjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBzZWxmLnByZXBhcmVfcDRfb25seToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBsZW4oY29tbWl0cykgPT0gbGVuKGFwcGxpZWQpOgorICAgICAgICAgICAgcHJpbnQgIkFsbCBjb21taXRzIGFwcGxpZWQhIgorCisgICAgICAgICAgICBzeW5jID0gUDRTeW5jKCkKKyAgICAgICAgICAgIGlmIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgICAgIHN5bmMuYnJhbmNoID0gc2VsZi5icmFuY2gKKyAgICAgICAgICAgIHN5bmMucnVuKFtdKQorCisgICAgICAgICAgICByZWJhc2UgPSBQNFJlYmFzZSgpCisgICAgICAgICAgICByZWJhc2UucmViYXNlKCkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbGVuKGFwcGxpZWQpID09IDA6CisgICAgICAgICAgICAgICAgcHJpbnQgIk5vIGNvbW1pdHMgYXBwbGllZC4iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICJBcHBsaWVkIG9ubHkgdGhlIGNvbW1pdHMgbWFya2VkIHdpdGggJyonOiIKKyAgICAgICAgICAgICAgICBmb3IgYyBpbiBjb21taXRzOgorICAgICAgICAgICAgICAgICAgICBpZiBjIGluIGFwcGxpZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFyID0gIioiCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFyID0gIiAiCisgICAgICAgICAgICAgICAgICAgIHByaW50IHN0YXIsIHJlYWRfcGlwZShbImdpdCIsICJzaG93IiwgIi1zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1mb3JtYXQ9Zm9ybWF0OiVoICVzIiwgIGNdKQorICAgICAgICAgICAgICAgIHByaW50ICJZb3Ugd2lsbCBoYXZlIHRvIGRvICdnaXQgcDQgc3luYycgYW5kIHJlYmFzZS4iCisKKyAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiZ2l0LXA0LmV4cG9ydExhYmVscyIpOgorICAgICAgICAgICAgc2VsZi5leHBvcnRMYWJlbHMgPSBUcnVlCisKKyAgICAgICAgaWYgc2VsZi5leHBvcnRMYWJlbHM6CisgICAgICAgICAgICBwNExhYmVscyA9IGdldFA0TGFiZWxzKHNlbGYuZGVwb3RQYXRoKQorICAgICAgICAgICAgZ2l0VGFncyA9IGdldEdpdFRhZ3MoKQorCisgICAgICAgICAgICBtaXNzaW5nR2l0VGFncyA9IGdpdFRhZ3MgLSBwNExhYmVscworICAgICAgICAgICAgc2VsZi5leHBvcnRHaXRUYWdzKG1pc3NpbmdHaXRUYWdzKQorCisgICAgICAgICMgZXhpdCB3aXRoIGVycm9yIHVubGVzcyBldmVyeXRoaW5nIGFwcGxpZWQgcGVyZmVjdGx5CisgICAgICAgIGlmIGxlbihjb21taXRzKSAhPSBsZW4oYXBwbGllZCk6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBWaWV3KG9iamVjdCk6CisgICAgIiIiUmVwcmVzZW50IGEgcDQgdmlldyAoInA0IGhlbHAgdmlld3MiKSwgYW5kIG1hcCBmaWxlcyBpbiBhCisgICAgICAgcmVwbyBhY2NvcmRpbmcgdG8gdGhlIHZpZXcuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpZW50X25hbWUpOgorICAgICAgICBzZWxmLm1hcHBpbmdzID0gW10KKyAgICAgICAgc2VsZi5jbGllbnRfcHJlZml4ID0gIi8vJXMvIiAlIGNsaWVudF9uYW1lCisgICAgICAgICMgY2FjaGUgcmVzdWx0cyBvZiAicDQgd2hlcmUiIHRvIGxvb2t1cCBjbGllbnQgZmlsZSBsb2NhdGlvbnMKKyAgICAgICAgc2VsZi5jbGllbnRfc3BlY19wYXRoX2NhY2hlID0ge30KKworICAgIGRlZiBhcHBlbmQoc2VsZiwgdmlld19saW5lKToKKyAgICAgICAgIiIiUGFyc2UgYSB2aWV3IGxpbmUsIHNwbGl0dGluZyBpdCBpbnRvIGRlcG90IGFuZCBjbGllbnQKKyAgICAgICAgICAgc2lkZXMuICBBcHBlbmQgdG8gc2VsZi5tYXBwaW5ncywgcHJlc2VydmluZyBvcmRlci4gIFRoaXMKKyAgICAgICAgICAgaXMgb25seSBuZWVkZWQgZm9yIHRhZyBjcmVhdGlvbi4iIiIKKworICAgICAgICAjIFNwbGl0IHRoZSB2aWV3IGxpbmUgaW50byBleGFjdGx5IHR3byB3b3Jkcy4gIFA0IGVuZm9yY2VzCisgICAgICAgICMgc3RydWN0dXJlIG9uIHRoZXNlIGxpbmVzIHRoYXQgc2ltcGxpZmllcyB0aGlzIHF1aXRlIGEgYml0LgorICAgICAgICAjCisgICAgICAgICMgRWl0aGVyIG9yIGJvdGggd29yZHMgbWF5IGJlIGRvdWJsZS1xdW90ZWQuCisgICAgICAgICMgU2luZ2xlIHF1b3RlcyBkbyBub3QgbWF0dGVyLgorICAgICAgICAjIERvdWJsZS1xdW90ZSBtYXJrcyBjYW5ub3Qgb2NjdXIgaW5zaWRlIHRoZSB3b3Jkcy4KKyAgICAgICAgIyBBICsgb3IgLSBwcmVmaXggaXMgYWxzbyBpbnNpZGUgdGhlIHF1b3Rlcy4KKyAgICAgICAgIyBUaGVyZSBhcmUgbm8gcXVvdGVzIHVubGVzcyB0aGV5IGNvbnRhaW4gYSBzcGFjZS4KKyAgICAgICAgIyBUaGUgbGluZSBpcyBhbHJlYWR5IHdoaXRlLXNwYWNlIHN0cmlwcGVkLgorICAgICAgICAjIFRoZSB0d28gd29yZHMgYXJlIHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzcGFjZS4KKyAgICAgICAgIworICAgICAgICBpZiB2aWV3X2xpbmVbMF0gPT0gJyInOgorICAgICAgICAgICAgIyBGaXJzdCB3b3JkIGlzIGRvdWJsZSBxdW90ZWQuICBGaW5kIGl0cyBlbmQuCisgICAgICAgICAgICBjbG9zZV9xdW90ZV9pbmRleCA9IHZpZXdfbGluZS5maW5kKCciJywgMSkKKyAgICAgICAgICAgIGlmIGNsb3NlX3F1b3RlX2luZGV4IDw9IDA6CisgICAgICAgICAgICAgICAgZGllKCJObyBmaXJzdC13b3JkIGNsb3NpbmcgcXVvdGUgZm91bmQ6ICVzIiAlIHZpZXdfbGluZSkKKyAgICAgICAgICAgIGRlcG90X3NpZGUgPSB2aWV3X2xpbmVbMTpjbG9zZV9xdW90ZV9pbmRleF0KKyAgICAgICAgICAgICMgc2tpcCBjbG9zaW5nIHF1b3RlIGFuZCBzcGFjZQorICAgICAgICAgICAgcmhzX2luZGV4ID0gY2xvc2VfcXVvdGVfaW5kZXggKyAxICsgMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3BhY2VfaW5kZXggPSB2aWV3X2xpbmUuZmluZCgiICIpCisgICAgICAgICAgICBpZiBzcGFjZV9pbmRleCA8PSAwOgorICAgICAgICAgICAgICAgIGRpZSgiTm8gd29yZC1zcGxpdHRpbmcgc3BhY2UgZm91bmQ6ICVzIiAlIHZpZXdfbGluZSkKKyAgICAgICAgICAgIGRlcG90X3NpZGUgPSB2aWV3X2xpbmVbMDpzcGFjZV9pbmRleF0KKyAgICAgICAgICAgIHJoc19pbmRleCA9IHNwYWNlX2luZGV4ICsgMQorCisgICAgICAgICMgcHJlZml4ICsgbWVhbnMgb3ZlcmxheSBvbiBwcmV2aW91cyBtYXBwaW5nCisgICAgICAgIGlmIGRlcG90X3NpZGUuc3RhcnRzd2l0aCgiKyIpOgorICAgICAgICAgICAgZGVwb3Rfc2lkZSA9IGRlcG90X3NpZGVbMTpdCisKKyAgICAgICAgIyBwcmVmaXggLSBtZWFucyBleGNsdWRlIHRoaXMgcGF0aCwgbGVhdmUgb3V0IG9mIG1hcHBpbmdzCisgICAgICAgIGV4Y2x1ZGUgPSBGYWxzZQorICAgICAgICBpZiBkZXBvdF9zaWRlLnN0YXJ0c3dpdGgoIi0iKToKKyAgICAgICAgICAgIGV4Y2x1ZGUgPSBUcnVlCisgICAgICAgICAgICBkZXBvdF9zaWRlID0gZGVwb3Rfc2lkZVsxOl0KKworICAgICAgICBpZiBub3QgZXhjbHVkZToKKyAgICAgICAgICAgIHNlbGYubWFwcGluZ3MuYXBwZW5kKGRlcG90X3NpZGUpCisKKyAgICBkZWYgY29udmVydF9jbGllbnRfcGF0aChzZWxmLCBjbGllbnRGaWxlKToKKyAgICAgICAgIyBjaG9wIG9mZiAvL2NsaWVudC8gcGFydCB0byBtYWtlIGl0IHJlbGF0aXZlCisgICAgICAgIGlmIG5vdCBjbGllbnRGaWxlLnN0YXJ0c3dpdGgoc2VsZi5jbGllbnRfcHJlZml4KToKKyAgICAgICAgICAgIGRpZSgiTm8gcHJlZml4ICclcycgb24gY2xpZW50RmlsZSAnJXMnIiAlCisgICAgICAgICAgICAgICAgKHNlbGYuY2xpZW50X3ByZWZpeCwgY2xpZW50RmlsZSkpCisgICAgICAgIHJldHVybiBjbGllbnRGaWxlW2xlbihzZWxmLmNsaWVudF9wcmVmaXgpOl0KKworICAgIGRlZiB1cGRhdGVfY2xpZW50X3NwZWNfcGF0aF9jYWNoZShzZWxmLCBmaWxlcyk6CisgICAgICAgICIiIiBDYWNoaW5nIGZpbGUgcGF0aHMgYnkgInA0IHdoZXJlIiBiYXRjaCBxdWVyeSAiIiIKKworICAgICAgICAjIExpc3QgZGVwb3QgZmlsZSBwYXRocyBleGNsdWRlIHRoYXQgYWxyZWFkeSBjYWNoZWQKKyAgICAgICAgZmlsZUFyZ3MgPSBbZlsncGF0aCddIGZvciBmIGluIGZpbGVzIGlmIGZbJ3BhdGgnXSBub3QgaW4gc2VsZi5jbGllbnRfc3BlY19wYXRoX2NhY2hlXQorCisgICAgICAgIGlmIGxlbihmaWxlQXJncykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAgIyBBbGwgZmlsZXMgaW4gY2FjaGUKKworICAgICAgICB3aGVyZV9yZXN1bHQgPSBwNENtZExpc3QoWyIteCIsICItIiwgIndoZXJlIl0sIHN0ZGluPWZpbGVBcmdzKQorICAgICAgICBmb3IgcmVzIGluIHdoZXJlX3Jlc3VsdDoKKyAgICAgICAgICAgIGlmICJjb2RlIiBpbiByZXMgYW5kIHJlc1siY29kZSJdID09ICJlcnJvciI6CisgICAgICAgICAgICAgICAgIyBhc3N1bWUgZXJyb3IgaXMgIi4uLiBmaWxlKHMpIG5vdCBpbiBjbGllbnQgdmlldyIKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgImNsaWVudEZpbGUiIG5vdCBpbiByZXM6CisgICAgICAgICAgICAgICAgZGllKCJObyBjbGllbnRGaWxlIGluICdwNCB3aGVyZScgb3V0cHV0IikKKyAgICAgICAgICAgIGlmICJ1bm1hcCIgaW4gcmVzOgorICAgICAgICAgICAgICAgICMgaXQgd2lsbCBsaXN0IGFsbCBvZiB0aGVtLCBidXQgb25seSBvbmUgbm90IHVubWFwLXBlZAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBnaXRDb25maWdCb29sKCJjb3JlLmlnbm9yZWNhc2UiKToKKyAgICAgICAgICAgICAgICByZXNbJ2RlcG90RmlsZSddID0gcmVzWydkZXBvdEZpbGUnXS5sb3dlcigpCisgICAgICAgICAgICBzZWxmLmNsaWVudF9zcGVjX3BhdGhfY2FjaGVbcmVzWydkZXBvdEZpbGUnXV0gPSBzZWxmLmNvbnZlcnRfY2xpZW50X3BhdGgocmVzWyJjbGllbnRGaWxlIl0pCisKKyAgICAgICAgIyBub3QgZm91bmQgZmlsZXMgb3IgdW5tYXAgZmlsZXMgc2V0IHRvICIiCisgICAgICAgIGZvciBkZXBvdEZpbGUgaW4gZmlsZUFyZ3M6CisgICAgICAgICAgICBpZiBnaXRDb25maWdCb29sKCJjb3JlLmlnbm9yZWNhc2UiKToKKyAgICAgICAgICAgICAgICBkZXBvdEZpbGUgPSBkZXBvdEZpbGUubG93ZXIoKQorICAgICAgICAgICAgaWYgZGVwb3RGaWxlIG5vdCBpbiBzZWxmLmNsaWVudF9zcGVjX3BhdGhfY2FjaGU6CisgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRfc3BlY19wYXRoX2NhY2hlW2RlcG90RmlsZV0gPSAiIgorCisgICAgZGVmIG1hcF9pbl9jbGllbnQoc2VsZiwgZGVwb3RfcGF0aCk6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVsYXRpdmUgbG9jYXRpb24gaW4gdGhlIGNsaWVudCB3aGVyZSB0aGlzCisgICAgICAgICAgIGRlcG90IGZpbGUgc2hvdWxkIGxpdmUuICBSZXR1cm5zICIiIGlmIHRoZSBmaWxlIHNob3VsZAorICAgICAgICAgICBub3QgYmUgbWFwcGVkIGluIHRoZSBjbGllbnQuIiIiCisKKyAgICAgICAgaWYgZ2l0Q29uZmlnQm9vbCgiY29yZS5pZ25vcmVjYXNlIik6CisgICAgICAgICAgICBkZXBvdF9wYXRoID0gZGVwb3RfcGF0aC5sb3dlcigpCisKKyAgICAgICAgaWYgZGVwb3RfcGF0aCBpbiBzZWxmLmNsaWVudF9zcGVjX3BhdGhfY2FjaGU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jbGllbnRfc3BlY19wYXRoX2NhY2hlW2RlcG90X3BhdGhdCisKKyAgICAgICAgZGllKCAiRXJyb3I6ICVzIGlzIG5vdCBmb3VuZCBpbiBjbGllbnQgc3BlYyBwYXRoIiAlIGRlcG90X3BhdGggKQorICAgICAgICByZXR1cm4gIiIKKworY2xhc3MgUDRTeW5jKENvbW1hbmQsIFA0VXNlck1hcCk6CisgICAgZGVsZXRlX2FjdGlvbnMgPSAoICJkZWxldGUiLCAibW92ZS9kZWxldGUiLCAicHVyZ2UiICkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBQNFVzZXJNYXAuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5vcHRpb25zID0gWworICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWJyYW5jaCIsIGRlc3Q9ImJyYW5jaCIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWRldGVjdC1icmFuY2hlcyIsIGRlc3Q9ImRldGVjdEJyYW5jaGVzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tY2hhbmdlc2ZpbGUiLCBkZXN0PSJjaGFuZ2VzRmlsZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNpbGVudCIsIGRlc3Q9InNpbGVudCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWRldGVjdC1sYWJlbHMiLCBkZXN0PSJkZXRlY3RMYWJlbHMiLCBhY3Rpb249InN0b3JlX3RydWUiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1pbXBvcnQtbGFiZWxzIiwgZGVzdD0iaW1wb3J0TGFiZWxzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0taW1wb3J0LWxvY2FsIiwgZGVzdD0iaW1wb3J0SW50b1JlbW90ZXMiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJJbXBvcnQgaW50byByZWZzL2hlYWRzLyAsIG5vdCByZWZzL3JlbW90ZXMiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1tYXgtY2hhbmdlcyIsIGRlc3Q9Im1heENoYW5nZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Ik1heGltdW0gbnVtYmVyIG9mIGNoYW5nZXMgdG8gaW1wb3J0IiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tY2hhbmdlcy1ibG9jay1zaXplIiwgZGVzdD0iY2hhbmdlc19ibG9ja19zaXplIiwgdHlwZT0iaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJJbnRlcm5hbCBibG9jayBzaXplIHRvIHVzZSB3aGVuIGl0ZXJhdGl2ZWx5IGNhbGxpbmcgcDQgY2hhbmdlcyIpLAorICAgICAgICAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWtlZXAtcGF0aCIsIGRlc3Q9ImtlZXBSZXBvUGF0aCIsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iS2VlcCBlbnRpcmUgQlJBTkNIL0RJUi9TVUJESVIgcHJlZml4IGR1cmluZyBpbXBvcnQiKSwKKyAgICAgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS11c2UtY2xpZW50LXNwZWMiLCBkZXN0PSJ1c2VDbGllbnRTcGVjIiwgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJPbmx5IHN5bmMgZmlsZXMgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIFBlcmZvcmNlIENsaWVudCBTcGVjIiksCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0vIiwgZGVzdD0iY2xvbmVFeGNsdWRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249ImFwcGVuZCIsIHR5cGU9InN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iZXhjbHVkZSBkZXBvdCBwYXRoIiksCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICIiIkltcG9ydHMgZnJvbSBQZXJmb3JjZSBpbnRvIGEgZ2l0IHJlcG9zaXRvcnkuXG4KKyAgICBleGFtcGxlOgorICAgIC8vZGVwb3QvbXkvcHJvamVjdC8gLS0gdG8gaW1wb3J0IHRoZSBjdXJyZW50IGhlYWQKKyAgICAvL2RlcG90L215L3Byb2plY3QvQGFsbCAtLSB0byBpbXBvcnQgZXZlcnl0aGluZworICAgIC8vZGVwb3QvbXkvcHJvamVjdC9AMSw2IC0tIHRvIGltcG9ydCBvbmx5IGZyb20gcmV2aXNpb24gMSB0byA2CisKKyAgICAoYSAuLi4gaXMgbm90IG5lZWRlZCBpbiB0aGUgcGF0aCBwNCBzcGVjaWZpY2F0aW9uLCBpdCdzIGFkZGVkIGltcGxpY2l0bHkpIiIiCisKKyAgICAgICAgc2VsZi51c2FnZSArPSAiIC8vZGVwb3QvcGF0aFtAcmV2UmFuZ2VdIgorICAgICAgICBzZWxmLnNpbGVudCA9IEZhbHNlCisgICAgICAgIHNlbGYuY3JlYXRlZEJyYW5jaGVzID0gc2V0KCkKKyAgICAgICAgc2VsZi5jb21taXR0ZWRDaGFuZ2VzID0gc2V0KCkKKyAgICAgICAgc2VsZi5icmFuY2ggPSAiIgorICAgICAgICBzZWxmLmRldGVjdEJyYW5jaGVzID0gRmFsc2UKKyAgICAgICAgc2VsZi5kZXRlY3RMYWJlbHMgPSBGYWxzZQorICAgICAgICBzZWxmLmltcG9ydExhYmVscyA9IEZhbHNlCisgICAgICAgIHNlbGYuY2hhbmdlc0ZpbGUgPSAiIgorICAgICAgICBzZWxmLnN5bmNXaXRoT3JpZ2luID0gVHJ1ZQorICAgICAgICBzZWxmLmltcG9ydEludG9SZW1vdGVzID0gVHJ1ZQorICAgICAgICBzZWxmLm1heENoYW5nZXMgPSAiIgorICAgICAgICBzZWxmLmNoYW5nZXNfYmxvY2tfc2l6ZSA9IE5vbmUKKyAgICAgICAgc2VsZi5rZWVwUmVwb1BhdGggPSBGYWxzZQorICAgICAgICBzZWxmLmRlcG90UGF0aHMgPSBOb25lCisgICAgICAgIHNlbGYucDRCcmFuY2hlc0luR2l0ID0gW10KKyAgICAgICAgc2VsZi5jbG9uZUV4Y2x1ZGUgPSBbXQorICAgICAgICBzZWxmLnVzZUNsaWVudFNwZWMgPSBGYWxzZQorICAgICAgICBzZWxmLnVzZUNsaWVudFNwZWNfZnJvbV9vcHRpb25zID0gRmFsc2UKKyAgICAgICAgc2VsZi5jbGllbnRTcGVjRGlycyA9IE5vbmUKKyAgICAgICAgc2VsZi50ZW1wQnJhbmNoZXMgPSBbXQorICAgICAgICBzZWxmLnRlbXBCcmFuY2hMb2NhdGlvbiA9ICJnaXQtcDQtdG1wIgorICAgICAgICBzZWxmLmxhcmdlRmlsZVN5c3RlbSA9IE5vbmUKKworICAgICAgICBpZiBnaXRDb25maWcoJ2dpdC1wNC5sYXJnZUZpbGVTeXN0ZW0nKToKKyAgICAgICAgICAgIGxhcmdlRmlsZVN5c3RlbUNvbnN0cnVjdG9yID0gZ2xvYmFscygpW2dpdENvbmZpZygnZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbScpXQorICAgICAgICAgICAgc2VsZi5sYXJnZUZpbGVTeXN0ZW0gPSBsYXJnZUZpbGVTeXN0ZW1Db25zdHJ1Y3RvcigKKyAgICAgICAgICAgICAgICBsYW1iZGEgZ2l0X21vZGUsIHJlbFBhdGgsIGNvbnRlbnRzOiBzZWxmLndyaXRlVG9HaXRTdHJlYW0oZ2l0X21vZGUsIHJlbFBhdGgsIGNvbnRlbnRzKQorICAgICAgICAgICAgKQorCisgICAgICAgIGlmIGdpdENvbmZpZygiZ2l0LXA0LnN5bmNGcm9tT3JpZ2luIikgPT0gImZhbHNlIjoKKyAgICAgICAgICAgIHNlbGYuc3luY1dpdGhPcmlnaW4gPSBGYWxzZQorCisgICAgIyBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgImFwcGVuZCIgY2xvbmVFeGNsdWRlIGFjdGlvbgorICAgIGRlZiBlbnN1cmVfdmFsdWUoc2VsZiwgYXR0ciwgdmFsdWUpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCBhdHRyKSBvciBnZXRhdHRyKHNlbGYsIGF0dHIpIGlzIE5vbmU6CisgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGF0dHIsIHZhbHVlKQorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBhdHRyKQorCisgICAgIyBGb3JjZSBhIGNoZWNrcG9pbnQgaW4gZmFzdC1pbXBvcnQgYW5kIHdhaXQgZm9yIGl0IHRvIGZpbmlzaAorICAgIGRlZiBjaGVja3BvaW50KHNlbGYpOgorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiY2hlY2twb2ludFxuXG4iKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgicHJvZ3Jlc3MgY2hlY2twb2ludFxuXG4iKQorICAgICAgICBvdXQgPSBzZWxmLmdpdE91dHB1dC5yZWFkbGluZSgpCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJjaGVja3BvaW50IGZpbmlzaGVkOiAiICsgb3V0CisKKyAgICBkZWYgZXh0cmFjdEZpbGVzRnJvbUNvbW1pdChzZWxmLCBjb21taXQpOgorICAgICAgICBzZWxmLmNsb25lRXhjbHVkZSA9IFtyZS5zdWIociJcLlwuXC4kIiwgIiIsIHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwYXRoIGluIHNlbGYuY2xvbmVFeGNsdWRlXQorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIGZudW0gPSAwCisgICAgICAgIHdoaWxlIGNvbW1pdC5oYXNfa2V5KCJkZXBvdEZpbGUlcyIgJSBmbnVtKToKKyAgICAgICAgICAgIHBhdGggPSAgY29tbWl0WyJkZXBvdEZpbGUlcyIgJSBmbnVtXQorCisgICAgICAgICAgICBpZiBbcCBmb3IgcCBpbiBzZWxmLmNsb25lRXhjbHVkZQorICAgICAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgcCldOgorICAgICAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm91bmQgPSBbcCBmb3IgcCBpbiBzZWxmLmRlcG90UGF0aHMKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIHApXQorICAgICAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgICAgIGZudW0gPSBmbnVtICsgMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZpbGUgPSB7fQorICAgICAgICAgICAgZmlsZVsicGF0aCJdID0gcGF0aAorICAgICAgICAgICAgZmlsZVsicmV2Il0gPSBjb21taXRbInJldiVzIiAlIGZudW1dCisgICAgICAgICAgICBmaWxlWyJhY3Rpb24iXSA9IGNvbW1pdFsiYWN0aW9uJXMiICUgZm51bV0KKyAgICAgICAgICAgIGZpbGVbInR5cGUiXSA9IGNvbW1pdFsidHlwZSVzIiAlIGZudW1dCisgICAgICAgICAgICBmaWxlcy5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgIGZudW0gPSBmbnVtICsgMQorICAgICAgICByZXR1cm4gZmlsZXMKKworICAgIGRlZiBzdHJpcFJlcG9QYXRoKHNlbGYsIHBhdGgsIHByZWZpeGVzKToKKyAgICAgICAgIiIiV2hlbiBzdHJlYW1pbmcgZmlsZXMsIHRoaXMgaXMgY2FsbGVkIHRvIG1hcCBhIHA0IGRlcG90IHBhdGgKKyAgICAgICAgICAgdG8gd2hlcmUgaXQgc2hvdWxkIGdvIGluIGdpdC4gIFRoZSBwcmVmaXhlcyBhcmUgZWl0aGVyCisgICAgICAgICAgIHNlbGYuZGVwb3RQYXRocywgb3Igc2VsZi5icmFuY2hQcmVmaXhlcyBpbiB0aGUgY2FzZSBvZgorICAgICAgICAgICBicmFuY2ggZGV0ZWN0aW9uLiIiIgorCisgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlYzoKKyAgICAgICAgICAgICMgYnJhbmNoIGRldGVjdGlvbiBtb3ZlcyBmaWxlcyB1cCBhIGxldmVsICh0aGUgYnJhbmNoIG5hbWUpCisgICAgICAgICAgICAjIGZyb20gd2hhdCBjbGllbnQgc3BlYyBpbnRlcnByZXRhdGlvbiBnaXZlcworICAgICAgICAgICAgcGF0aCA9IHNlbGYuY2xpZW50U3BlY0RpcnMubWFwX2luX2NsaWVudChwYXRoKQorICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3RCcmFuY2hlczoKKyAgICAgICAgICAgICAgICBmb3IgYiBpbiBzZWxmLmtub3duQnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aChiICsgIi8iKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoW2xlbihiKSsxOl0KKworICAgICAgICBlbGlmIHNlbGYua2VlcFJlcG9QYXRoOgorICAgICAgICAgICAgIyBQcmVzZXJ2ZSBldmVyeXRoaW5nIGluIHJlbGF0aXZlIHBhdGggbmFtZSBleGNlcHQgbGVhZGluZworICAgICAgICAgICAgIyAvL2RlcG90LzsganVzdCBsb29rIGF0IGZpcnN0IHByZWZpeCBhcyB0aGV5IGFsbCBzaG91bGQKKyAgICAgICAgICAgICMgYmUgaW4gdGhlIHNhbWUgZGVwb3QuCisgICAgICAgICAgICBkZXBvdCA9IHJlLnN1YigiXigvL1teL10rLykuKiIsIHInXDEnLCBwcmVmaXhlc1swXSkKKyAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgocGF0aCwgZGVwb3QpOgorICAgICAgICAgICAgICAgIHBhdGggPSBwYXRoW2xlbihkZXBvdCk6XQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgcCBpbiBwcmVmaXhlczoKKyAgICAgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIHApOgorICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aFtsZW4ocCk6XQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIHBhdGggPSB3aWxkY2FyZF9kZWNvZGUocGF0aCkKKyAgICAgICAgcmV0dXJuIHBhdGgKKworICAgIGRlZiBzcGxpdEZpbGVzSW50b0JyYW5jaGVzKHNlbGYsIGNvbW1pdCk6CisgICAgICAgICIiIkxvb2sgYXQgZWFjaCBkZXBvdEZpbGUgaW4gdGhlIGNvbW1pdCB0byBmaWd1cmUgb3V0IHRvIHdoYXQKKyAgICAgICAgICAgYnJhbmNoIGl0IGJlbG9uZ3MuIiIiCisKKyAgICAgICAgaWYgc2VsZi5jbGllbnRTcGVjRGlyczoKKyAgICAgICAgICAgIGZpbGVzID0gc2VsZi5leHRyYWN0RmlsZXNGcm9tQ29tbWl0KGNvbW1pdCkKKyAgICAgICAgICAgIHNlbGYuY2xpZW50U3BlY0RpcnMudXBkYXRlX2NsaWVudF9zcGVjX3BhdGhfY2FjaGUoZmlsZXMpCisKKyAgICAgICAgYnJhbmNoZXMgPSB7fQorICAgICAgICBmbnVtID0gMAorICAgICAgICB3aGlsZSBjb21taXQuaGFzX2tleSgiZGVwb3RGaWxlJXMiICUgZm51bSk6CisgICAgICAgICAgICBwYXRoID0gIGNvbW1pdFsiZGVwb3RGaWxlJXMiICUgZm51bV0KKyAgICAgICAgICAgIGZvdW5kID0gW3AgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzCisgICAgICAgICAgICAgICAgICAgICBpZiBwNFBhdGhTdGFydHNXaXRoKHBhdGgsIHApXQorICAgICAgICAgICAgaWYgbm90IGZvdW5kOgorICAgICAgICAgICAgICAgIGZudW0gPSBmbnVtICsgMQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZpbGUgPSB7fQorICAgICAgICAgICAgZmlsZVsicGF0aCJdID0gcGF0aAorICAgICAgICAgICAgZmlsZVsicmV2Il0gPSBjb21taXRbInJldiVzIiAlIGZudW1dCisgICAgICAgICAgICBmaWxlWyJhY3Rpb24iXSA9IGNvbW1pdFsiYWN0aW9uJXMiICUgZm51bV0KKyAgICAgICAgICAgIGZpbGVbInR5cGUiXSA9IGNvbW1pdFsidHlwZSVzIiAlIGZudW1dCisgICAgICAgICAgICBmbnVtID0gZm51bSArIDEKKworICAgICAgICAgICAgIyBzdGFydCB3aXRoIHRoZSBmdWxsIHJlbGF0aXZlIHBhdGggd2hlcmUgdGhpcyBmaWxlIHdvdWxkCisgICAgICAgICAgICAjIGdvIGluIGEgcDQgY2xpZW50CisgICAgICAgICAgICBpZiBzZWxmLnVzZUNsaWVudFNwZWM6CisgICAgICAgICAgICAgICAgcmVsUGF0aCA9IHNlbGYuY2xpZW50U3BlY0RpcnMubWFwX2luX2NsaWVudChwYXRoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWxQYXRoID0gc2VsZi5zdHJpcFJlcG9QYXRoKHBhdGgsIHNlbGYuZGVwb3RQYXRocykKKworICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLmtub3duQnJhbmNoZXMua2V5cygpOgorICAgICAgICAgICAgICAgICMgYWRkIGEgdHJhaWxpbmcgc2xhc2ggc28gdGhhdCBhIGNvbW1pdCBpbnRvIHF0LzQuMmZvbworICAgICAgICAgICAgICAgICMgZG9lc24ndCBlbmQgdXAgaW4gcXQvNC4yLCBlLmcuCisgICAgICAgICAgICAgICAgaWYgcmVsUGF0aC5zdGFydHN3aXRoKGJyYW5jaCArICIvIik6CisgICAgICAgICAgICAgICAgICAgIGlmIGJyYW5jaCBub3QgaW4gYnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2hlc1ticmFuY2hdID0gW10KKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXNbYnJhbmNoXS5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICByZXR1cm4gYnJhbmNoZXMKKworICAgIGRlZiB3cml0ZVRvR2l0U3RyZWFtKHNlbGYsIGdpdE1vZGUsIHJlbFBhdGgsIGNvbnRlbnRzKToKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoJ00gJXMgaW5saW5lICVzXG4nICUgKGdpdE1vZGUsIHJlbFBhdGgpKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgnZGF0YSAlZFxuJyAlIHN1bShsZW4oZCkgZm9yIGQgaW4gY29udGVudHMpKQorICAgICAgICBmb3IgZCBpbiBjb250ZW50czoKKyAgICAgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKGQpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCdcbicpCisKKyAgICAjIG91dHB1dCBvbmUgZmlsZSBmcm9tIHRoZSBQNCBzdHJlYW0KKyAgICAjIC0gaGVscGVyIGZvciBzdHJlYW1QNEZpbGVzCisKKyAgICBkZWYgc3RyZWFtT25lUDRGaWxlKHNlbGYsIGZpbGUsIGNvbnRlbnRzKToKKyAgICAgICAgcmVsUGF0aCA9IHNlbGYuc3RyaXBSZXBvUGF0aChmaWxlWydkZXBvdEZpbGUnXSwgc2VsZi5icmFuY2hQcmVmaXhlcykKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHNpemUgPSBpbnQoc2VsZi5zdHJlYW1fZmlsZVsnZmlsZVNpemUnXSkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xyJXMgLS0+ICVzICglaSBNQilcbicgJSAoZmlsZVsnZGVwb3RGaWxlJ10sIHJlbFBhdGgsIHNpemUvMTAyNC8xMDI0KSkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorCisgICAgICAgICh0eXBlX2Jhc2UsIHR5cGVfbW9kcykgPSBzcGxpdF9wNF90eXBlKGZpbGVbInR5cGUiXSkKKworICAgICAgICBnaXRfbW9kZSA9ICIxMDA2NDQiCisgICAgICAgIGlmICJ4IiBpbiB0eXBlX21vZHM6CisgICAgICAgICAgICBnaXRfbW9kZSA9ICIxMDA3NTUiCisgICAgICAgIGlmIHR5cGVfYmFzZSA9PSAic3ltbGluayI6CisgICAgICAgICAgICBnaXRfbW9kZSA9ICIxMjAwMDAiCisgICAgICAgICAgICAjIHA0IHByaW50IG9uIGEgc3ltbGluayBzb21ldGltZXMgY29udGFpbnMgInRhcmdldFxuIjsKKyAgICAgICAgICAgICMgaWYgaXQgZG9lcywgcmVtb3ZlIHRoZSBuZXdsaW5lCisgICAgICAgICAgICBkYXRhID0gJycuam9pbihjb250ZW50cykKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICMgU29tZSB2ZXJzaW9uIG9mIHA0IGFsbG93ZWQgY3JlYXRpbmcgYSBzeW1saW5rIHRoYXQgcG9pbnRlZAorICAgICAgICAgICAgICAgICMgdG8gbm90aGluZy4gIFRoaXMgY2F1c2VzIHA0IGVycm9ycyB3aGVuIGNoZWNraW5nIG91dCBzdWNoCisgICAgICAgICAgICAgICAgIyBhIGNoYW5nZSwgYW5kIGVycm9ycyBoZXJlIHRvby4gIFdvcmsgYXJvdW5kIGl0IGJ5IGlnbm9yaW5nCisgICAgICAgICAgICAgICAgIyB0aGUgYmFkIHN5bWxpbms7IGhvcGVmdWxseSBhIGZ1dHVyZSBjaGFuZ2UgZml4ZXMgaXQuCisgICAgICAgICAgICAgICAgcHJpbnQgIlxuSWdub3JpbmcgZW1wdHkgc3ltbGluayBpbiAlcyIgJSBmaWxlWydkZXBvdEZpbGUnXQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxpZiBkYXRhWy0xXSA9PSAnXG4nOgorICAgICAgICAgICAgICAgIGNvbnRlbnRzID0gW2RhdGFbOi0xXV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29udGVudHMgPSBbZGF0YV0KKworICAgICAgICBpZiB0eXBlX2Jhc2UgPT0gInV0ZjE2IjoKKyAgICAgICAgICAgICMgcDQgZGVsaXZlcnMgZGlmZmVyZW50IHRleHQgaW4gdGhlIHB5dGhvbiBvdXRwdXQgdG8gLUcKKyAgICAgICAgICAgICMgdGhhbiBpdCBkb2VzIHdoZW4gdXNpbmcgInByaW50IC1vIiwgb3Igbm9ybWFsIHA0IGNsaWVudAorICAgICAgICAgICAgIyBvcGVyYXRpb25zLiAgdXRmMTYgaXMgY29udmVydGVkIHRvIGFzY2lpIG9yIHV0ZjgsIHBlcmhhcHMuCisgICAgICAgICAgICAjIEJ1dCBhc2NpaSB0ZXh0IHNhdmVkIGFzIC10IHV0ZjE2IGlzIGNvbXBsZXRlbHkgbWFuZ2xlZC4KKyAgICAgICAgICAgICMgSW52b2tlIHByaW50IC1vIHRvIGdldCB0aGUgcmVhbCBjb250ZW50cy4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgT24gd2luZG93cywgdGhlIG5ld2xpbmVzIHdpbGwgYWx3YXlzIGJlIG1hbmdsZWQgYnkgcHJpbnQsIHNvIHB1dAorICAgICAgICAgICAgIyB0aGVtIGJhY2sgdG9vLiAgVGhpcyBpcyBub3QgbmVlZGVkIHRvIHRoZSBjeWd3aW4gd2luZG93cyB2ZXJzaW9uLAorICAgICAgICAgICAgIyBqdXN0IHRoZSBuYXRpdmUgIk5UIiB0eXBlLgorICAgICAgICAgICAgIworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRleHQgPSBwNF9yZWFkX3BpcGUoWydwcmludCcsICctcScsICctbycsICctJywgJyVzQCVzJyAlIChmaWxlWydkZXBvdEZpbGUnXSwgZmlsZVsnY2hhbmdlJ10pXSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBpZiAnVHJhbnNsYXRpb24gb2YgZmlsZSBjb250ZW50IGZhaWxlZCcgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2Jhc2UgPSAnYmluYXJ5JworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcDRfdmVyc2lvbl9zdHJpbmcoKS5maW5kKCcvTlQnKSA+PSAwOgorICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdcclxuJywgJ1xuJykKKyAgICAgICAgICAgICAgICBjb250ZW50cyA9IFsgdGV4dCBdCisKKyAgICAgICAgaWYgdHlwZV9iYXNlID09ICJhcHBsZSI6CisgICAgICAgICAgICAjIEFwcGxlIGZpbGV0eXBlIGZpbGVzIHdpbGwgYmUgc3RyZWFtZWQgYXMgYSBjb25jYXRlbmF0aW9uIG9mCisgICAgICAgICAgICAjIGl0cyBhcHBsZWRvdWJsZSBoZWFkZXIgYW5kIHRoZSBjb250ZW50cy4gIFRoaXMgaXMgdXNlbGVzcworICAgICAgICAgICAgIyBvbiBib3RoIG1hY3MgYW5kIG5vbi1tYWNzLiAgSWYgdXNpbmcgInByaW50IC1xIC1vIHh4IiwgaXQKKyAgICAgICAgICAgICMgd2lsbCBjcmVhdGUgInh4IiB3aXRoIHRoZSBkYXRhLCBhbmQgIiV4eCIgd2l0aCB0aGUgaGVhZGVyLgorICAgICAgICAgICAgIyBUaGlzIGlzIGFsc28gbm90IHZlcnkgdXNlZnVsLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJZGVhbGx5LCBzb21lZGF5LCB0aGlzIHNjcmlwdCBjYW4gbGVhcm4gaG93IHRvIGdlbmVyYXRlCisgICAgICAgICAgICAjIGFwcGxlZG91YmxlIGZpbGVzIGRpcmVjdGx5IGFuZCBpbXBvcnQgdGhvc2UgdG8gZ2l0LCBidXQKKyAgICAgICAgICAgICMgbm9uLW1hYyBtYWNoaW5lcyBjYW4gbmV2ZXIgZmluZCBhIHVzZSBmb3IgYXBwbGUgZmlsZXR5cGUuCisgICAgICAgICAgICBwcmludCAiXG5JZ25vcmluZyBhcHBsZSBmaWxldHlwZSBmaWxlICVzIiAlIGZpbGVbJ2RlcG90RmlsZSddCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkbyBub3QgdHJ5IHRvIGRlLW1hbmdsZSBrZXl3b3JkcyBvbiB1dGYxNiBmaWxlcywKKyAgICAgICAgIyBldmVuIHRob3VnaCBpbiB0aGVvcnkgc29tZWJvZHkgbWF5IHdhbnQgdGhhdC4KKyAgICAgICAgcGF0dGVybiA9IHA0X2tleXdvcmRzX3JlZ2V4cF9mb3JfdHlwZSh0eXBlX2Jhc2UsIHR5cGVfbW9kcykKKyAgICAgICAgaWYgcGF0dGVybjoKKyAgICAgICAgICAgIHJlZ2V4cCA9IHJlLmNvbXBpbGUocGF0dGVybiwgcmUuVkVSQk9TRSkKKyAgICAgICAgICAgIHRleHQgPSAnJy5qb2luKGNvbnRlbnRzKQorICAgICAgICAgICAgdGV4dCA9IHJlZ2V4cC5zdWIocickXDEkJywgdGV4dCkKKyAgICAgICAgICAgIGNvbnRlbnRzID0gWyB0ZXh0IF0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZWxQYXRoLmRlY29kZSgnYXNjaWknKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBlbmNvZGluZyA9ICd1dGY4JworICAgICAgICAgICAgaWYgZ2l0Q29uZmlnKCdnaXQtcDQucGF0aEVuY29kaW5nJyk6CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBnaXRDb25maWcoJ2dpdC1wNC5wYXRoRW5jb2RpbmcnKQorICAgICAgICAgICAgcmVsUGF0aCA9IHJlbFBhdGguZGVjb2RlKGVuY29kaW5nLCAncmVwbGFjZScpLmVuY29kZSgndXRmOCcsICdyZXBsYWNlJykKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCAnUGF0aCB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGRldGVjdGVkLiBVc2VkICVzIHRvIGVuY29kZTogJXMgJyAlIChlbmNvZGluZywgcmVsUGF0aCkKKworICAgICAgICBpZiBzZWxmLmxhcmdlRmlsZVN5c3RlbToKKyAgICAgICAgICAgIChnaXRfbW9kZSwgY29udGVudHMpID0gc2VsZi5sYXJnZUZpbGVTeXN0ZW0ucHJvY2Vzc0NvbnRlbnQoZ2l0X21vZGUsIHJlbFBhdGgsIGNvbnRlbnRzKQorCisgICAgICAgIHNlbGYud3JpdGVUb0dpdFN0cmVhbShnaXRfbW9kZSwgcmVsUGF0aCwgY29udGVudHMpCisKKyAgICBkZWYgc3RyZWFtT25lUDREZWxldGlvbihzZWxmLCBmaWxlKToKKyAgICAgICAgcmVsUGF0aCA9IHNlbGYuc3RyaXBSZXBvUGF0aChmaWxlWydwYXRoJ10sIHNlbGYuYnJhbmNoUHJlZml4ZXMpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJkZWxldGUgJXNcbiIgJSByZWxQYXRoKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJEICVzXG4iICUgcmVsUGF0aCkKKworICAgICAgICBpZiBzZWxmLmxhcmdlRmlsZVN5c3RlbSBhbmQgc2VsZi5sYXJnZUZpbGVTeXN0ZW0uaXNMYXJnZUZpbGUocmVsUGF0aCk6CisgICAgICAgICAgICBzZWxmLmxhcmdlRmlsZVN5c3RlbS5yZW1vdmVMYXJnZUZpbGUocmVsUGF0aCkKKworICAgICMgaGFuZGxlIGFub3RoZXIgY2h1bmsgb2Ygc3RyZWFtaW5nIGRhdGEKKyAgICBkZWYgc3RyZWFtUDRGaWxlc0NiKHNlbGYsIG1hcnNoYWxsZWQpOgorCisgICAgICAgICMgY2F0Y2ggcDQgZXJyb3JzIGFuZCBjb21wbGFpbgorICAgICAgICBlcnIgPSBOb25lCisgICAgICAgIGlmICJjb2RlIiBpbiBtYXJzaGFsbGVkOgorICAgICAgICAgICAgaWYgbWFyc2hhbGxlZFsiY29kZSJdID09ICJlcnJvciI6CisgICAgICAgICAgICAgICAgaWYgImRhdGEiIGluIG1hcnNoYWxsZWQ6CisgICAgICAgICAgICAgICAgICAgIGVyciA9IG1hcnNoYWxsZWRbImRhdGEiXS5yc3RyaXAoKQorCisgICAgICAgIGlmIG5vdCBlcnIgYW5kICdmaWxlU2l6ZScgaW4gc2VsZi5zdHJlYW1fZmlsZToKKyAgICAgICAgICAgIHJlcXVpcmVkX2J5dGVzID0gaW50KCg0ICogaW50KHNlbGYuc3RyZWFtX2ZpbGVbImZpbGVTaXplIl0pKSAtIGNhbGNEaXNrRnJlZSgpKQorICAgICAgICAgICAgaWYgcmVxdWlyZWRfYnl0ZXMgPiAwOgorICAgICAgICAgICAgICAgIGVyciA9ICdOb3QgZW5vdWdoIHNwYWNlIGxlZnQgb24gJXMhIEZyZWUgYXQgbGVhc3QgJWkgTUIuJyAlICgKKyAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCksIHJlcXVpcmVkX2J5dGVzLzEwMjQvMTAyNAorICAgICAgICAgICAgICAgICkKKworICAgICAgICBpZiBlcnI6CisgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgaWYgc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm86CisgICAgICAgICAgICAgICAgaWYgImRlcG90RmlsZSIgaW4gc2VsZi5zdHJlYW1fZmlsZToKKyAgICAgICAgICAgICAgICAgICAgZiA9IHNlbGYuc3RyZWFtX2ZpbGVbImRlcG90RmlsZSJdCisgICAgICAgICAgICAjIGZvcmNlIGEgZmFpbHVyZSBpbiBmYXN0LWltcG9ydCwgZWxzZSBhbiBlbXB0eQorICAgICAgICAgICAgIyBjb21taXQgd2lsbCBiZSBtYWRlCisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiXG4iKQorICAgICAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoImRpZS1ub3dcbiIpCisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS5jbG9zZSgpCisgICAgICAgICAgICAjIGlnbm9yZSBlcnJvcnMsIGJ1dCBtYWtlIHN1cmUgaXQgZXhpdHMgZmlyc3QKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0UHJvY2Vzcy53YWl0KCkKKyAgICAgICAgICAgIGlmIGY6CisgICAgICAgICAgICAgICAgZGllKCJFcnJvciBmcm9tIHA0IHByaW50IGZvciAlczogJXMiICUgKGYsIGVycikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRpZSgiRXJyb3IgZnJvbSBwNCBwcmludDogJXMiICUgZXJyKQorCisgICAgICAgIGlmIG1hcnNoYWxsZWQuaGFzX2tleSgnZGVwb3RGaWxlJykgYW5kIHNlbGYuc3RyZWFtX2hhdmVfZmlsZV9pbmZvOgorICAgICAgICAgICAgIyBzdGFydCBvZiBhIG5ldyBmaWxlIC0gb3V0cHV0IHRoZSBvbGQgb25lIGZpcnN0CisgICAgICAgICAgICBzZWxmLnN0cmVhbU9uZVA0RmlsZShzZWxmLnN0cmVhbV9maWxlLCBzZWxmLnN0cmVhbV9jb250ZW50cykKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtX2ZpbGUgPSB7fQorICAgICAgICAgICAgc2VsZi5zdHJlYW1fY29udGVudHMgPSBbXQorICAgICAgICAgICAgc2VsZi5zdHJlYW1faGF2ZV9maWxlX2luZm8gPSBGYWxzZQorCisgICAgICAgICMgcGljayB1cCB0aGUgbmV3IGZpbGUgaW5mb3JtYXRpb24uLi4gZm9yIHRoZQorICAgICAgICAjICdkYXRhJyBmaWVsZCB3ZSBuZWVkIHRvIGFwcGVuZCB0byBvdXIgYXJyYXkKKyAgICAgICAgZm9yIGsgaW4gbWFyc2hhbGxlZC5rZXlzKCk6CisgICAgICAgICAgICBpZiBrID09ICdkYXRhJzoKKyAgICAgICAgICAgICAgICBpZiAnc3RyZWFtQ29udGVudFNpemUnIG5vdCBpbiBzZWxmLnN0cmVhbV9maWxlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9maWxlWydzdHJlYW1Db250ZW50U2l6ZSddID0gMAorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtX2ZpbGVbJ3N0cmVhbUNvbnRlbnRTaXplJ10gKz0gbGVuKG1hcnNoYWxsZWRbJ2RhdGEnXSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9jb250ZW50cy5hcHBlbmQobWFyc2hhbGxlZFsnZGF0YSddKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbV9maWxlW2tdID0gbWFyc2hhbGxlZFtrXQorCisgICAgICAgIGlmICh2ZXJib3NlIGFuZAorICAgICAgICAgICAgJ3N0cmVhbUNvbnRlbnRTaXplJyBpbiBzZWxmLnN0cmVhbV9maWxlIGFuZAorICAgICAgICAgICAgJ2ZpbGVTaXplJyBpbiBzZWxmLnN0cmVhbV9maWxlIGFuZAorICAgICAgICAgICAgJ2RlcG90RmlsZScgaW4gc2VsZi5zdHJlYW1fZmlsZSk6CisgICAgICAgICAgICBzaXplID0gaW50KHNlbGYuc3RyZWFtX2ZpbGVbImZpbGVTaXplIl0pCisgICAgICAgICAgICBpZiBzaXplID4gMDoKKyAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDEwMCpzZWxmLnN0cmVhbV9maWxlWydzdHJlYW1Db250ZW50U2l6ZSddL3NpemUKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcciVzICVkJSUgKCVpIE1CKScgJSAoc2VsZi5zdHJlYW1fZmlsZVsnZGVwb3RGaWxlJ10sIHByb2dyZXNzLCBpbnQoc2l6ZS8xMDI0LzEwMjQpKSkKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKworICAgICAgICBzZWxmLnN0cmVhbV9oYXZlX2ZpbGVfaW5mbyA9IFRydWUKKworICAgICMgU3RyZWFtIGRpcmVjdGx5IGZyb20gInA0IGZpbGVzIiBpbnRvICJnaXQgZmFzdC1pbXBvcnQiCisgICAgZGVmIHN0cmVhbVA0RmlsZXMoc2VsZiwgZmlsZXMpOgorICAgICAgICBmaWxlc0ZvckNvbW1pdCA9IFtdCisgICAgICAgIGZpbGVzVG9SZWFkID0gW10KKyAgICAgICAgZmlsZXNUb0RlbGV0ZSA9IFtdCisKKyAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAjIGlmIHVzaW5nIGEgY2xpZW50IHNwZWMsIG9ubHkgYWRkIHRoZSBmaWxlcyB0aGF0IGhhdmUKKyAgICAgICAgICAgICMgYSBwYXRoIGluIHRoZSBjbGllbnQKKyAgICAgICAgICAgIGlmIHNlbGYuY2xpZW50U3BlY0RpcnM6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jbGllbnRTcGVjRGlycy5tYXBfaW5fY2xpZW50KGZbJ3BhdGgnXSkgPT0gIiI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZpbGVzRm9yQ29tbWl0LmFwcGVuZChmKQorICAgICAgICAgICAgaWYgZlsnYWN0aW9uJ10gaW4gc2VsZi5kZWxldGVfYWN0aW9uczoKKyAgICAgICAgICAgICAgICBmaWxlc1RvRGVsZXRlLmFwcGVuZChmKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlc1RvUmVhZC5hcHBlbmQoZikKKworICAgICAgICAjIGRlbGV0ZWQgZmlsZXMuLi4KKyAgICAgICAgZm9yIGYgaW4gZmlsZXNUb0RlbGV0ZToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtT25lUDREZWxldGlvbihmKQorCisgICAgICAgIGlmIGxlbihmaWxlc1RvUmVhZCkgPiAwOgorICAgICAgICAgICAgc2VsZi5zdHJlYW1fZmlsZSA9IHt9CisgICAgICAgICAgICBzZWxmLnN0cmVhbV9jb250ZW50cyA9IFtdCisgICAgICAgICAgICBzZWxmLnN0cmVhbV9oYXZlX2ZpbGVfaW5mbyA9IEZhbHNlCisKKyAgICAgICAgICAgICMgY3Vycnkgc2VsZiBhcmd1bWVudAorICAgICAgICAgICAgZGVmIHN0cmVhbVA0RmlsZXNDYlNlbGYoZW50cnkpOgorICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtUDRGaWxlc0NiKGVudHJ5KQorCisgICAgICAgICAgICBmaWxlQXJncyA9IFsnJXMjJXMnICUgKGZbJ3BhdGgnXSwgZlsncmV2J10pIGZvciBmIGluIGZpbGVzVG9SZWFkXQorCisgICAgICAgICAgICBwNENtZExpc3QoWyIteCIsICItIiwgInByaW50Il0sCisgICAgICAgICAgICAgICAgICAgICAgc3RkaW49ZmlsZUFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgY2I9c3RyZWFtUDRGaWxlc0NiU2VsZikKKworICAgICAgICAgICAgIyBkbyB0aGUgbGFzdCBjaHVuaworICAgICAgICAgICAgaWYgc2VsZi5zdHJlYW1fZmlsZS5oYXNfa2V5KCdkZXBvdEZpbGUnKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbU9uZVA0RmlsZShzZWxmLnN0cmVhbV9maWxlLCBzZWxmLnN0cmVhbV9jb250ZW50cykKKworICAgIGRlZiBtYWtlX2VtYWlsKHNlbGYsIHVzZXJpZCk6CisgICAgICAgIGlmIHVzZXJpZCBpbiBzZWxmLnVzZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudXNlcnNbdXNlcmlkXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIlcyA8YUBiPiIgJSB1c2VyaWQKKworICAgIGRlZiBzdHJlYW1UYWcoc2VsZiwgZ2l0U3RyZWFtLCBsYWJlbE5hbWUsIGxhYmVsRGV0YWlscywgY29tbWl0LCBlcG9jaCk6CisgICAgICAgICIiIiBTdHJlYW0gYSBwNCB0YWcuCisgICAgICAgIGNvbW1pdCBpcyBlaXRoZXIgYSBnaXQgY29tbWl0LCBvciBhIGZhc3QtaW1wb3J0IG1hcmssICI6PHA0Y29tbWl0PiIKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJ3cml0aW5nIHRhZyAlcyBmb3IgY29tbWl0ICVzIiAlIChsYWJlbE5hbWUsIGNvbW1pdCkKKyAgICAgICAgZ2l0U3RyZWFtLndyaXRlKCJ0YWcgJXNcbiIgJSBsYWJlbE5hbWUpCisgICAgICAgIGdpdFN0cmVhbS53cml0ZSgiZnJvbSAlc1xuIiAlIGNvbW1pdCkKKworICAgICAgICBpZiBsYWJlbERldGFpbHMuaGFzX2tleSgnT3duZXInKToKKyAgICAgICAgICAgIG93bmVyID0gbGFiZWxEZXRhaWxzWyJPd25lciJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvd25lciA9IE5vbmUKKworICAgICAgICAjIFRyeSB0byB1c2UgdGhlIG93bmVyIG9mIHRoZSBwNCBsYWJlbCwgb3IgZmFpbGluZyB0aGF0LAorICAgICAgICAjIHRoZSBjdXJyZW50IHA0IHVzZXIgaWQuCisgICAgICAgIGlmIG93bmVyOgorICAgICAgICAgICAgZW1haWwgPSBzZWxmLm1ha2VfZW1haWwob3duZXIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbWFpbCA9IHNlbGYubWFrZV9lbWFpbChzZWxmLnA0VXNlcklkKCkpCisgICAgICAgIHRhZ2dlciA9ICIlcyAlcyAlcyIgJSAoZW1haWwsIGVwb2NoLCBzZWxmLnR6KQorCisgICAgICAgIGdpdFN0cmVhbS53cml0ZSgidGFnZ2VyICVzXG4iICUgdGFnZ2VyKQorCisgICAgICAgIHByaW50ICJsYWJlbERldGFpbHM9IixsYWJlbERldGFpbHMKKyAgICAgICAgaWYgbGFiZWxEZXRhaWxzLmhhc19rZXkoJ0Rlc2NyaXB0aW9uJyk6CisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IGxhYmVsRGV0YWlsc1snRGVzY3JpcHRpb24nXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAnTGFiZWwgZnJvbSBnaXQgcDQnCisKKyAgICAgICAgZ2l0U3RyZWFtLndyaXRlKCJkYXRhICVkXG4iICUgbGVuKGRlc2NyaXB0aW9uKSkKKyAgICAgICAgZ2l0U3RyZWFtLndyaXRlKGRlc2NyaXB0aW9uKQorICAgICAgICBnaXRTdHJlYW0ud3JpdGUoIlxuIikKKworICAgIGRlZiBjb21taXQoc2VsZiwgZGV0YWlscywgZmlsZXMsIGJyYW5jaCwgcGFyZW50ID0gIiIpOgorICAgICAgICBlcG9jaCA9IGRldGFpbHNbInRpbWUiXQorICAgICAgICBhdXRob3IgPSBkZXRhaWxzWyJ1c2VyIl0KKworICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCAiY29tbWl0IGludG8gJXMiICUgYnJhbmNoCisKKyAgICAgICAgIyBzdGFydCB3aXRoIHJlYWRpbmcgZmlsZXM7IGlmIHRoYXQgZmFpbHMsIHdlIHNob3VsZCBub3QKKyAgICAgICAgIyBjcmVhdGUgYSBjb21taXQuCisgICAgICAgIG5ld19maWxlcyA9IFtdCisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgW3AgZm9yIHAgaW4gc2VsZi5icmFuY2hQcmVmaXhlcyBpZiBwNFBhdGhTdGFydHNXaXRoKGZbJ3BhdGgnXSwgcCldOgorICAgICAgICAgICAgICAgIG5ld19maWxlcy5hcHBlbmQgKGYpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIklnbm9yaW5nIGZpbGUgb3V0c2lkZSBvZiBwcmVmaXg6ICVzXG4iICUgZlsncGF0aCddKQorCisgICAgICAgIGlmIHNlbGYuY2xpZW50U3BlY0RpcnM6CisgICAgICAgICAgICBzZWxmLmNsaWVudFNwZWNEaXJzLnVwZGF0ZV9jbGllbnRfc3BlY19wYXRoX2NhY2hlKGZpbGVzKQorCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJjb21taXQgJXNcbiIgJSBicmFuY2gpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJtYXJrIDolc1xuIiAlIGRldGFpbHNbImNoYW5nZSJdKQorICAgICAgICBzZWxmLmNvbW1pdHRlZENoYW5nZXMuYWRkKGludChkZXRhaWxzWyJjaGFuZ2UiXSkpCisgICAgICAgIGNvbW1pdHRlciA9ICIiCisgICAgICAgIGlmIGF1dGhvciBub3QgaW4gc2VsZi51c2VyczoKKyAgICAgICAgICAgIHNlbGYuZ2V0VXNlck1hcEZyb21QZXJmb3JjZVNlcnZlcigpCisgICAgICAgIGNvbW1pdHRlciA9ICIlcyAlcyAlcyIgJSAoc2VsZi5tYWtlX2VtYWlsKGF1dGhvciksIGVwb2NoLCBzZWxmLnR6KQorCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKCJjb21taXR0ZXIgJXNcbiIgJSBjb21taXR0ZXIpCisKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoImRhdGEgPDxFT1RcbiIpCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLndyaXRlKGRldGFpbHNbImRlc2MiXSkKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoIlxuW2dpdC1wNDogZGVwb3QtcGF0aHMgPSBcIiVzXCI6IGNoYW5nZSA9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLCcuam9pbihzZWxmLmJyYW5jaFByZWZpeGVzKSwgZGV0YWlsc1siY2hhbmdlIl0pKQorICAgICAgICBpZiBsZW4oZGV0YWlsc1snb3B0aW9ucyddKSA+IDA6CisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiOiBvcHRpb25zID0gJXMiICUgZGV0YWlsc1snb3B0aW9ucyddKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiXVxuRU9UXG5cbiIpCisKKyAgICAgICAgaWYgbGVuKHBhcmVudCkgPiAwOgorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJwYXJlbnQgJXMiICUgcGFyZW50CisgICAgICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiZnJvbSAlc1xuIiAlIHBhcmVudCkKKworICAgICAgICBzZWxmLnN0cmVhbVA0RmlsZXMobmV3X2ZpbGVzKQorICAgICAgICBzZWxmLmdpdFN0cmVhbS53cml0ZSgiXG4iKQorCisgICAgICAgIGNoYW5nZSA9IGludChkZXRhaWxzWyJjaGFuZ2UiXSkKKworICAgICAgICBpZiBzZWxmLmxhYmVscy5oYXNfa2V5KGNoYW5nZSk6CisgICAgICAgICAgICBsYWJlbCA9IHNlbGYubGFiZWxzW2NoYW5nZV0KKyAgICAgICAgICAgIGxhYmVsRGV0YWlscyA9IGxhYmVsWzBdCisgICAgICAgICAgICBsYWJlbFJldmlzaW9ucyA9IGxhYmVsWzFdCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIkNoYW5nZSAlcyBpcyBsYWJlbGxlZCAlcyIgJSAoY2hhbmdlLCBsYWJlbERldGFpbHMpCisKKyAgICAgICAgICAgIGZpbGVzID0gcDRDbWRMaXN0KFsiZmlsZXMiXSArIFsiJXMuLi5AJXMiICUgKHAsIGNoYW5nZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuYnJhbmNoUHJlZml4ZXNdKQorCisgICAgICAgICAgICBpZiBsZW4oZmlsZXMpID09IGxlbihsYWJlbFJldmlzaW9ucyk6CisKKyAgICAgICAgICAgICAgICBjbGVhbmVkRmlsZXMgPSB7fQorICAgICAgICAgICAgICAgIGZvciBpbmZvIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBpbmZvWyJhY3Rpb24iXSBpbiBzZWxmLmRlbGV0ZV9hY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgY2xlYW5lZEZpbGVzW2luZm9bImRlcG90RmlsZSJdXSA9IGluZm9bInJldiJdCisKKyAgICAgICAgICAgICAgICBpZiBjbGVhbmVkRmlsZXMgPT0gbGFiZWxSZXZpc2lvbnM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtVGFnKHNlbGYuZ2l0U3RyZWFtLCAndGFnXyVzJyAlIGxhYmVsRGV0YWlsc1snbGFiZWwnXSwgbGFiZWxEZXRhaWxzLCBicmFuY2gsIGVwb2NoKQorCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCJUYWcgJXMgZG9lcyBub3QgbWF0Y2ggd2l0aCBjaGFuZ2UgJXM6IGZpbGVzIGRvIG5vdCBtYXRjaC4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobGFiZWxEZXRhaWxzWyJsYWJlbCJdLCBjaGFuZ2UpKQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQgKCJUYWcgJXMgZG9lcyBub3QgbWF0Y2ggd2l0aCBjaGFuZ2UgJXM6IGZpbGUgY291bnQgaXMgZGlmZmVyZW50LiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGxhYmVsRGV0YWlsc1sibGFiZWwiXSwgY2hhbmdlKSkKKworICAgICMgQnVpbGQgYSBkaWN0aW9uYXJ5IG9mIGNoYW5nZWxpc3RzIGFuZCBsYWJlbHMsIGZvciAiZGV0ZWN0LWxhYmVscyIgb3B0aW9uLgorICAgIGRlZiBnZXRMYWJlbHMoc2VsZik6CisgICAgICAgIHNlbGYubGFiZWxzID0ge30KKworICAgICAgICBsID0gcDRDbWRMaXN0KFsibGFiZWxzIl0gKyBbIiVzLi4uIiAlIHAgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzXSkKKyAgICAgICAgaWYgbGVuKGwpID4gMCBhbmQgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgcHJpbnQgIkZpbmRpbmcgZmlsZXMgYmVsb25naW5nIHRvIGxhYmVscyBpbiAlcyIgJSBgc2VsZi5kZXBvdFBhdGhzYAorCisgICAgICAgIGZvciBvdXRwdXQgaW4gbDoKKyAgICAgICAgICAgIGxhYmVsID0gb3V0cHV0WyJsYWJlbCJdCisgICAgICAgICAgICByZXZpc2lvbnMgPSB7fQorICAgICAgICAgICAgbmV3ZXN0Q2hhbmdlID0gMAorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJRdWVyeWluZyBmaWxlcyBmb3IgbGFiZWwgJXMiICUgbGFiZWwKKyAgICAgICAgICAgIGZvciBmaWxlIGluIHA0Q21kTGlzdChbImZpbGVzIl0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIiVzLi4uQCVzIiAlIChwLCBsYWJlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuZGVwb3RQYXRoc10pOgorICAgICAgICAgICAgICAgIHJldmlzaW9uc1tmaWxlWyJkZXBvdEZpbGUiXV0gPSBmaWxlWyJyZXYiXQorICAgICAgICAgICAgICAgIGNoYW5nZSA9IGludChmaWxlWyJjaGFuZ2UiXSkKKyAgICAgICAgICAgICAgICBpZiBjaGFuZ2UgPiBuZXdlc3RDaGFuZ2U6CisgICAgICAgICAgICAgICAgICAgIG5ld2VzdENoYW5nZSA9IGNoYW5nZQorCisgICAgICAgICAgICBzZWxmLmxhYmVsc1tuZXdlc3RDaGFuZ2VdID0gW291dHB1dCwgcmV2aXNpb25zXQorCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJMYWJlbCBjaGFuZ2VzOiAlcyIgJSBzZWxmLmxhYmVscy5rZXlzKCkKKworICAgICMgSW1wb3J0IHA0IGxhYmVscyBhcyBnaXQgdGFncy4gQSBkaXJlY3QgbWFwcGluZyBkb2VzIG5vdAorICAgICMgZXhpc3QsIHNvIGFzc3VtZSB0aGF0IGlmIGFsbCB0aGUgZmlsZXMgYXJlIGF0IHRoZSBzYW1lIHJldmlzaW9uCisgICAgIyB0aGVuIHdlIGNhbiB1c2UgdGhhdCwgb3IgaXQncyBzb21ldGhpbmcgbW9yZSBjb21wbGljYXRlZCB3ZSBzaG91bGQKKyAgICAjIGp1c3QgaWdub3JlLgorICAgIGRlZiBpbXBvcnRQNExhYmVscyhzZWxmLCBzdHJlYW0sIHA0TGFiZWxzKToKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJpbXBvcnQgcDQgbGFiZWxzOiAiICsgJyAnLmpvaW4ocDRMYWJlbHMpCisKKyAgICAgICAgaWdub3JlZFA0TGFiZWxzID0gZ2l0Q29uZmlnTGlzdCgiZ2l0LXA0Lmlnbm9yZWRQNExhYmVscyIpCisgICAgICAgIHZhbGlkTGFiZWxSZWdleHAgPSBnaXRDb25maWcoImdpdC1wNC5sYWJlbEltcG9ydFJlZ2V4cCIpCisgICAgICAgIGlmIGxlbih2YWxpZExhYmVsUmVnZXhwKSA9PSAwOgorICAgICAgICAgICAgdmFsaWRMYWJlbFJlZ2V4cCA9IGRlZmF1bHRMYWJlbFJlZ2V4cAorICAgICAgICBtID0gcmUuY29tcGlsZSh2YWxpZExhYmVsUmVnZXhwKQorCisgICAgICAgIGZvciBuYW1lIGluIHA0TGFiZWxzOgorICAgICAgICAgICAgY29tbWl0Rm91bmQgPSBGYWxzZQorCisgICAgICAgICAgICBpZiBub3QgbS5tYXRjaChuYW1lKToKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAibGFiZWwgJXMgZG9lcyBub3QgbWF0Y2ggcmVnZXhwICVzIiAlIChuYW1lLHZhbGlkTGFiZWxSZWdleHApCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbmFtZSBpbiBpZ25vcmVkUDRMYWJlbHM6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbGFiZWxEZXRhaWxzID0gcDRDbWRMaXN0KFsnbGFiZWwnLCAiLW8iLCBuYW1lXSlbMF0KKworICAgICAgICAgICAgIyBnZXQgdGhlIG1vc3QgcmVjZW50IGNoYW5nZWxpc3QgZm9yIGVhY2ggZmlsZSBpbiB0aGlzIGxhYmVsCisgICAgICAgICAgICBjaGFuZ2UgPSBwNENtZChbImNoYW5nZXMiLCAiLW0iLCAiMSJdICsgWyIlcy4uLkAlcyIgJSAocCwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzXSkKKworICAgICAgICAgICAgaWYgY2hhbmdlLmhhc19rZXkoJ2NoYW5nZScpOgorICAgICAgICAgICAgICAgICMgZmluZCB0aGUgY29ycmVzcG9uZGluZyBnaXQgY29tbWl0OyB0YWtlIHRoZSBvbGRlc3QgY29tbWl0CisgICAgICAgICAgICAgICAgY2hhbmdlbGlzdCA9IGludChjaGFuZ2VbJ2NoYW5nZSddKQorICAgICAgICAgICAgICAgIGlmIGNoYW5nZWxpc3QgaW4gc2VsZi5jb21taXR0ZWRDaGFuZ2VzOgorICAgICAgICAgICAgICAgICAgICBnaXRDb21taXQgPSAiOiVkIiAlIGNoYW5nZWxpc3QgICAgICAgIyB1c2UgYSBmYXN0LWltcG9ydCBtYXJrCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdEZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGdpdENvbW1pdCA9IHJlYWRfcGlwZShbImdpdCIsICJyZXYtbGlzdCIsICItLW1heC1jb3VudD0xIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICItLXJldmVyc2UiLCAiOi9cW2dpdC1wNDouKmNoYW5nZSA9ICVkXF0iICUgY2hhbmdlbGlzdF0sIGlnbm9yZV9lcnJvcj1UcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZ2l0Q29tbWl0KSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImltcG9ydGluZyBsYWJlbCAlczogY291bGQgbm90IGZpbmQgZ2l0IGNvbW1pdCBmb3IgY2hhbmdlbGlzdCAlZCIgJSAobmFtZSwgY2hhbmdlbGlzdCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgZ2l0Q29tbWl0ID0gZ2l0Q29tbWl0LnN0cmlwKCkKKworICAgICAgICAgICAgICAgIGlmIGNvbW1pdEZvdW5kOgorICAgICAgICAgICAgICAgICAgICAjIENvbnZlcnQgZnJvbSBwNCB0aW1lIGZvcm1hdAorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB0bXdoZW4gPSB0aW1lLnN0cnB0aW1lKGxhYmVsRGV0YWlsc1snVXBkYXRlJ10sICIlWS8lbS8lZCAlSDolTTolUyIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgIkNvdWxkIG5vdCBjb252ZXJ0IGxhYmVsIHRpbWUgJXMiICUgbGFiZWxEZXRhaWxzWydVcGRhdGUnXQorICAgICAgICAgICAgICAgICAgICAgICAgdG13aGVuID0gMQorCisgICAgICAgICAgICAgICAgICAgIHdoZW4gPSBpbnQodGltZS5ta3RpbWUodG13aGVuKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW1UYWcoc3RyZWFtLCBuYW1lLCBsYWJlbERldGFpbHMsIGdpdENvbW1pdCwgd2hlbikKKyAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJwNCBsYWJlbCAlcyBtYXBwZWQgdG8gZ2l0IGNvbW1pdCAlcyIgJSAobmFtZSwgZ2l0Q29tbWl0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiTGFiZWwgJXMgaGFzIG5vIGNoYW5nZWxpc3RzIC0gcG9zc2libHkgZGVsZXRlZD8iICUgbmFtZQorCisgICAgICAgICAgICBpZiBub3QgY29tbWl0Rm91bmQ6CisgICAgICAgICAgICAgICAgIyBXZSBjYW4ndCBpbXBvcnQgdGhpcyBsYWJlbDsgZG9uJ3QgdHJ5IGFnYWluIGFzIGl0IHdpbGwgZ2V0IHZlcnkKKyAgICAgICAgICAgICAgICAjIGV4cGVuc2l2ZSByZXBlYXRlZGx5IGZldGNoaW5nIGFsbCB0aGUgZmlsZXMgZm9yIGxhYmVscyB0aGF0IHdpbGwKKyAgICAgICAgICAgICAgICAjIG5ldmVyIGJlIGltcG9ydGVkLiBJZiB0aGUgbGFiZWwgaXMgbW92ZWQgaW4gdGhlIGZ1dHVyZSwgdGhlCisgICAgICAgICAgICAgICAgIyBpZ25vcmUgd2lsbCBuZWVkIHRvIGJlIHJlbW92ZWQgbWFudWFsbHkuCisgICAgICAgICAgICAgICAgc3lzdGVtKFsiZ2l0IiwgImNvbmZpZyIsICItLWFkZCIsICJnaXQtcDQuaWdub3JlZFA0TGFiZWxzIiwgbmFtZV0pCisKKyAgICBkZWYgZ3Vlc3NQcm9qZWN0TmFtZShzZWxmKToKKyAgICAgICAgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzOgorICAgICAgICAgICAgaWYgcC5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgIHAgPSBwWzotMV0KKyAgICAgICAgICAgIHAgPSBwW3Auc3RyaXAoKS5yZmluZCgiLyIpICsgMTpdCisgICAgICAgICAgICBpZiBub3QgcC5lbmRzd2l0aCgiLyIpOgorICAgICAgICAgICAgICAgcCArPSAiLyIKKyAgICAgICAgICAgIHJldHVybiBwCisKKyAgICBkZWYgZ2V0QnJhbmNoTWFwcGluZyhzZWxmKToKKyAgICAgICAgbG9zdEFuZEZvdW5kQnJhbmNoZXMgPSBzZXQoKQorCisgICAgICAgIHVzZXIgPSBnaXRDb25maWcoImdpdC1wNC5icmFuY2hVc2VyIikKKyAgICAgICAgaWYgbGVuKHVzZXIpID4gMDoKKyAgICAgICAgICAgIGNvbW1hbmQgPSAiYnJhbmNoZXMgLXUgJXMiICUgdXNlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tbWFuZCA9ICJicmFuY2hlcyIKKworICAgICAgICBmb3IgaW5mbyBpbiBwNENtZExpc3QoY29tbWFuZCk6CisgICAgICAgICAgICBkZXRhaWxzID0gcDRDbWQoWyJicmFuY2giLCAiLW8iLCBpbmZvWyJicmFuY2giXV0pCisgICAgICAgICAgICB2aWV3SWR4ID0gMAorICAgICAgICAgICAgd2hpbGUgZGV0YWlscy5oYXNfa2V5KCJWaWV3JXMiICUgdmlld0lkeCk6CisgICAgICAgICAgICAgICAgcGF0aHMgPSBkZXRhaWxzWyJWaWV3JXMiICUgdmlld0lkeF0uc3BsaXQoIiAiKQorICAgICAgICAgICAgICAgIHZpZXdJZHggPSB2aWV3SWR4ICsgMQorICAgICAgICAgICAgICAgICMgcmVxdWlyZSBzdGFuZGFyZCAvL2RlcG90L2Zvby8uLi4gLy9kZXBvdC9iYXIvLi4uIG1hcHBpbmcKKyAgICAgICAgICAgICAgICBpZiBsZW4ocGF0aHMpICE9IDIgb3Igbm90IHBhdGhzWzBdLmVuZHN3aXRoKCIvLi4uIikgb3Igbm90IHBhdGhzWzFdLmVuZHN3aXRoKCIvLi4uIik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc291cmNlID0gcGF0aHNbMF0KKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHBhdGhzWzFdCisgICAgICAgICAgICAgICAgIyMgSEFDSworICAgICAgICAgICAgICAgIGlmIHA0UGF0aFN0YXJ0c1dpdGgoc291cmNlLCBzZWxmLmRlcG90UGF0aHNbMF0pIGFuZCBwNFBhdGhTdGFydHNXaXRoKGRlc3RpbmF0aW9uLCBzZWxmLmRlcG90UGF0aHNbMF0pOgorICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2VbbGVuKHNlbGYuZGVwb3RQYXRoc1swXSk6LTRdCisgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25bbGVuKHNlbGYuZGVwb3RQYXRoc1swXSk6LTRdCisKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVzdGluYXRpb24gaW4gc2VsZi5rbm93bkJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJwNCBicmFuY2ggJXMgZGVmaW5lcyBhIG1hcHBpbmcgZnJvbSAlcyB0byAlcyIgJSAoaW5mb1siYnJhbmNoIl0sIHNvdXJjZSwgZGVzdGluYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgImJ1dCB0aGVyZSBleGlzdHMgYW5vdGhlciBtYXBwaW5nIGZyb20gJXMgdG8gJXMgYWxyZWFkeSEiICUgKHNlbGYua25vd25CcmFuY2hlc1tkZXN0aW5hdGlvbl0sIGRlc3RpbmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgICAgICBzZWxmLmtub3duQnJhbmNoZXNbZGVzdGluYXRpb25dID0gc291cmNlCisKKyAgICAgICAgICAgICAgICAgICAgbG9zdEFuZEZvdW5kQnJhbmNoZXMuZGlzY2FyZChkZXN0aW5hdGlvbikKKworICAgICAgICAgICAgICAgICAgICBpZiBzb3VyY2Ugbm90IGluIHNlbGYua25vd25CcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvc3RBbmRGb3VuZEJyYW5jaGVzLmFkZChzb3VyY2UpCisKKyAgICAgICAgIyBQZXJmb3JjZSBkb2VzIG5vdCBzdHJpY3RseSByZXF1aXJlIGJyYW5jaGVzIHRvIGJlIGRlZmluZWQsIHNvIHdlIGFsc28KKyAgICAgICAgIyBjaGVjayBnaXQgY29uZmlnIGZvciBhIGJyYW5jaCBsaXN0LgorICAgICAgICAjCisgICAgICAgICMgRXhhbXBsZSBvZiBicmFuY2ggZGVmaW5pdGlvbiBpbiBnaXQgY29uZmlnIGZpbGU6CisgICAgICAgICMgW2dpdC1wNF0KKyAgICAgICAgIyAgIGJyYW5jaExpc3Q9bWFpbjpicmFuY2hBCisgICAgICAgICMgICBicmFuY2hMaXN0PW1haW46YnJhbmNoQgorICAgICAgICAjICAgYnJhbmNoTGlzdD1icmFuY2hBOmJyYW5jaEMKKyAgICAgICAgY29uZmlnQnJhbmNoZXMgPSBnaXRDb25maWdMaXN0KCJnaXQtcDQuYnJhbmNoTGlzdCIpCisgICAgICAgIGZvciBicmFuY2ggaW4gY29uZmlnQnJhbmNoZXM6CisgICAgICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICAgICAgKHNvdXJjZSwgZGVzdGluYXRpb24pID0gYnJhbmNoLnNwbGl0KCI6IikKKyAgICAgICAgICAgICAgICBzZWxmLmtub3duQnJhbmNoZXNbZGVzdGluYXRpb25dID0gc291cmNlCisKKyAgICAgICAgICAgICAgICBsb3N0QW5kRm91bmRCcmFuY2hlcy5kaXNjYXJkKGRlc3RpbmF0aW9uKQorCisgICAgICAgICAgICAgICAgaWYgc291cmNlIG5vdCBpbiBzZWxmLmtub3duQnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgIGxvc3RBbmRGb3VuZEJyYW5jaGVzLmFkZChzb3VyY2UpCisKKworICAgICAgICBmb3IgYnJhbmNoIGluIGxvc3RBbmRGb3VuZEJyYW5jaGVzOgorICAgICAgICAgICAgc2VsZi5rbm93bkJyYW5jaGVzW2JyYW5jaF0gPSBicmFuY2gKKworICAgIGRlZiBnZXRCcmFuY2hNYXBwaW5nRnJvbUdpdEJyYW5jaGVzKHNlbGYpOgorICAgICAgICBicmFuY2hlcyA9IHA0QnJhbmNoZXNJbkdpdChzZWxmLmltcG9ydEludG9SZW1vdGVzKQorICAgICAgICBmb3IgYnJhbmNoIGluIGJyYW5jaGVzLmtleXMoKToKKyAgICAgICAgICAgIGlmIGJyYW5jaCA9PSAibWFzdGVyIjoKKyAgICAgICAgICAgICAgICBicmFuY2ggPSAibWFpbiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJhbmNoID0gYnJhbmNoW2xlbihzZWxmLnByb2plY3ROYW1lKTpdCisgICAgICAgICAgICBzZWxmLmtub3duQnJhbmNoZXNbYnJhbmNoXSA9IGJyYW5jaAorCisgICAgZGVmIHVwZGF0ZU9wdGlvbkRpY3Qoc2VsZiwgZCk6CisgICAgICAgIG9wdGlvbl9rZXlzID0ge30KKyAgICAgICAgaWYgc2VsZi5rZWVwUmVwb1BhdGg6CisgICAgICAgICAgICBvcHRpb25fa2V5c1sna2VlcFJlcG9QYXRoJ10gPSAxCisKKyAgICAgICAgZFsib3B0aW9ucyJdID0gJyAnLmpvaW4oc29ydGVkKG9wdGlvbl9rZXlzLmtleXMoKSkpCisKKyAgICBkZWYgcmVhZE9wdGlvbnMoc2VsZiwgZCk6CisgICAgICAgIHNlbGYua2VlcFJlcG9QYXRoID0gKGQuaGFzX2tleSgnb3B0aW9ucycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAoJ2tlZXBSZXBvUGF0aCcgaW4gZFsnb3B0aW9ucyddKSkKKworICAgIGRlZiBnaXRSZWZGb3JCcmFuY2goc2VsZiwgYnJhbmNoKToKKyAgICAgICAgaWYgYnJhbmNoID09ICJtYWluIjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJlZlByZWZpeCArICJtYXN0ZXIiCisKKyAgICAgICAgaWYgbGVuKGJyYW5jaCkgPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBicmFuY2gKKworICAgICAgICByZXR1cm4gc2VsZi5yZWZQcmVmaXggKyBzZWxmLnByb2plY3ROYW1lICsgYnJhbmNoCisKKyAgICBkZWYgZ2l0Q29tbWl0QnlQNENoYW5nZShzZWxmLCByZWYsIGNoYW5nZSk6CisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICJsb29raW5nIGluIHJlZiAiICsgcmVmICsgIiBmb3IgY2hhbmdlICVzIHVzaW5nIGJpc2VjdC4uLiIgJSBjaGFuZ2UKKworICAgICAgICBlYXJsaWVzdENvbW1pdCA9ICIiCisgICAgICAgIGxhdGVzdENvbW1pdCA9IHBhcnNlUmV2aXNpb24ocmVmKQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgInRyeWluZzogZWFybGllc3QgJXMgbGF0ZXN0ICVzIiAlIChlYXJsaWVzdENvbW1pdCwgbGF0ZXN0Q29tbWl0KQorICAgICAgICAgICAgbmV4dCA9IHJlYWRfcGlwZSgiZ2l0IHJldi1saXN0IC0tYmlzZWN0ICVzICVzIiAlIChsYXRlc3RDb21taXQsIGVhcmxpZXN0Q29tbWl0KSkuc3RyaXAoKQorICAgICAgICAgICAgaWYgbGVuKG5leHQpID09IDA6CisgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiYXJnaCIKKyAgICAgICAgICAgICAgICByZXR1cm4gIiIKKyAgICAgICAgICAgIGxvZyA9IGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChuZXh0KQorICAgICAgICAgICAgc2V0dGluZ3MgPSBleHRyYWN0U2V0dGluZ3NHaXRMb2cobG9nKQorICAgICAgICAgICAgY3VycmVudENoYW5nZSA9IGludChzZXR0aW5nc1snY2hhbmdlJ10pCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgImN1cnJlbnQgY2hhbmdlICVzIiAlIGN1cnJlbnRDaGFuZ2UKKworICAgICAgICAgICAgaWYgY3VycmVudENoYW5nZSA9PSBjaGFuZ2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiZm91bmQgJXMiICUgbmV4dAorICAgICAgICAgICAgICAgIHJldHVybiBuZXh0CisKKyAgICAgICAgICAgIGlmIGN1cnJlbnRDaGFuZ2UgPCBjaGFuZ2U6CisgICAgICAgICAgICAgICAgZWFybGllc3RDb21taXQgPSAiXiVzIiAlIG5leHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGF0ZXN0Q29tbWl0ID0gIiVzIiAlIG5leHQKKworICAgICAgICByZXR1cm4gIiIKKworICAgIGRlZiBpbXBvcnROZXdCcmFuY2goc2VsZiwgYnJhbmNoLCBtYXhDaGFuZ2UpOgorICAgICAgICAjIG1ha2UgZmFzdC1pbXBvcnQgZmx1c2ggYWxsIGNoYW5nZXMgdG8gZGlzayBhbmQgdXBkYXRlIHRoZSByZWZzIHVzaW5nIHRoZSBjaGVja3BvaW50CisgICAgICAgICMgY29tbWFuZCBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCB0aGUgYnJhbmNoIHBhcmVudCBpbiB0aGUgZ2l0IGhpc3RvcnkKKyAgICAgICAgc2VsZi5naXRTdHJlYW0ud3JpdGUoImNoZWNrcG9pbnRcblxuIik7CisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLmZsdXNoKCk7CisgICAgICAgIGJyYW5jaFByZWZpeCA9IHNlbGYuZGVwb3RQYXRoc1swXSArIGJyYW5jaCArICIvIgorICAgICAgICByYW5nZSA9ICJAMSwlcyIgJSBtYXhDaGFuZ2UKKyAgICAgICAgI3ByaW50ICJwcmVmaXgiICsgYnJhbmNoUHJlZml4CisgICAgICAgIGNoYW5nZXMgPSBwNENoYW5nZXNGb3JQYXRocyhbYnJhbmNoUHJlZml4XSwgcmFuZ2UsIHNlbGYuY2hhbmdlc19ibG9ja19zaXplKQorICAgICAgICBpZiBsZW4oY2hhbmdlcykgPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmaXJzdENoYW5nZSA9IGNoYW5nZXNbMF0KKyAgICAgICAgI3ByaW50ICJmaXJzdCBjaGFuZ2UgaW4gYnJhbmNoOiAlcyIgJSBmaXJzdENoYW5nZQorICAgICAgICBzb3VyY2VCcmFuY2ggPSBzZWxmLmtub3duQnJhbmNoZXNbYnJhbmNoXQorICAgICAgICBzb3VyY2VEZXBvdFBhdGggPSBzZWxmLmRlcG90UGF0aHNbMF0gKyBzb3VyY2VCcmFuY2gKKyAgICAgICAgc291cmNlUmVmID0gc2VsZi5naXRSZWZGb3JCcmFuY2goc291cmNlQnJhbmNoKQorICAgICAgICAjcHJpbnQgInNvdXJjZSAiICsgc291cmNlQnJhbmNoCisKKyAgICAgICAgYnJhbmNoUGFyZW50Q2hhbmdlID0gaW50KHA0Q21kKFsiY2hhbmdlcyIsICItbSIsICIxIiwgIiVzLi4uQDEsJXMiICUgKHNvdXJjZURlcG90UGF0aCwgZmlyc3RDaGFuZ2UpXSlbImNoYW5nZSJdKQorICAgICAgICAjcHJpbnQgImJyYW5jaCBwYXJlbnQ6ICVzIiAlIGJyYW5jaFBhcmVudENoYW5nZQorICAgICAgICBnaXRQYXJlbnQgPSBzZWxmLmdpdENvbW1pdEJ5UDRDaGFuZ2Uoc291cmNlUmVmLCBicmFuY2hQYXJlbnRDaGFuZ2UpCisgICAgICAgIGlmIGxlbihnaXRQYXJlbnQpID4gMDoKKyAgICAgICAgICAgIHNlbGYuaW5pdGlhbFBhcmVudHNbc2VsZi5naXRSZWZGb3JCcmFuY2goYnJhbmNoKV0gPSBnaXRQYXJlbnQKKyAgICAgICAgICAgICNwcmludCAicGFyZW50IGdpdCBjb21taXQ6ICVzIiAlIGdpdFBhcmVudAorCisgICAgICAgIHNlbGYuaW1wb3J0Q2hhbmdlcyhjaGFuZ2VzKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHNlYXJjaFBhcmVudChzZWxmLCBwYXJlbnQsIGJyYW5jaCwgdGFyZ2V0KToKKyAgICAgICAgcGFyZW50Rm91bmQgPSBGYWxzZQorICAgICAgICBmb3IgYmxvYiBpbiByZWFkX3BpcGVfbGluZXMoWyJnaXQiLCAicmV2LWxpc3QiLCAiLS1yZXZlcnNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1uby1tZXJnZXMiLCBwYXJlbnRdKToKKyAgICAgICAgICAgIGJsb2IgPSBibG9iLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGxlbihyZWFkX3BpcGUoWyJnaXQiLCAiZGlmZi10cmVlIiwgYmxvYiwgdGFyZ2V0XSkpID09IDA6CisgICAgICAgICAgICAgICAgcGFyZW50Rm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludCAiRm91bmQgcGFyZW50IG9mICVzIGluIGNvbW1pdCAlcyIgJSAoYnJhbmNoLCBibG9iKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHBhcmVudEZvdW5kOgorICAgICAgICAgICAgcmV0dXJuIGJsb2IKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgaW1wb3J0Q2hhbmdlcyhzZWxmLCBjaGFuZ2VzKToKKyAgICAgICAgY250ID0gMQorICAgICAgICBmb3IgY2hhbmdlIGluIGNoYW5nZXM6CisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IHA0X2Rlc2NyaWJlKGNoYW5nZSkKKyAgICAgICAgICAgIHNlbGYudXBkYXRlT3B0aW9uRGljdChkZXNjcmlwdGlvbikKKworICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxySW1wb3J0aW5nIHJldmlzaW9uICVzICglcyUlKSIgJSAoY2hhbmdlLCBjbnQgKiAxMDAgLyBsZW4oY2hhbmdlcykpKQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgY250ID0gY250ICsgMQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3RCcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXMgPSBzZWxmLnNwbGl0RmlsZXNJbnRvQnJhbmNoZXMoZGVzY3JpcHRpb24pCisgICAgICAgICAgICAgICAgICAgIGZvciBicmFuY2ggaW4gYnJhbmNoZXMua2V5cygpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyMgSEFDSyAgLS1od24KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaFByZWZpeCA9IHNlbGYuZGVwb3RQYXRoc1swXSArIGJyYW5jaCArICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5icmFuY2hQcmVmaXhlcyA9IFsgYnJhbmNoUHJlZml4IF0KKworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gIiIKKworICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNGb3JDb21taXQgPSBicmFuY2hlc1ticmFuY2hdCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiYnJhbmNoIGlzICVzIiAlIGJyYW5jaAorCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZWRCcmFuY2hlcy5hZGQoYnJhbmNoKQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBicmFuY2ggbm90IGluIHNlbGYuY3JlYXRlZEJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlZEJyYW5jaGVzLmFkZChicmFuY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZi5rbm93bkJyYW5jaGVzW2JyYW5jaF0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXJlbnQgPT0gYnJhbmNoOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxCcmFuY2ggPSBzZWxmLnByb2plY3ROYW1lICsgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZ1bGxCcmFuY2ggbm90IGluIHNlbGYucDRCcmFuY2hlc0luR2l0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJcbiAgICBJbXBvcnRpbmcgbmV3IGJyYW5jaCAlcyIgJSBmdWxsQnJhbmNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaW1wb3J0TmV3QnJhbmNoKGJyYW5jaCwgY2hhbmdlIC0gMSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnA0QnJhbmNoZXNJbkdpdC5hcHBlbmQoZnVsbEJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiXG4gICAgUmVzdW1pbmcgd2l0aCBjaGFuZ2UgJXMiICUgY2hhbmdlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAicGFyZW50IGRldGVybWluZWQgdGhyb3VnaCBrbm93biBicmFuY2hlczogJXMiICUgcGFyZW50CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYuZ2l0UmVmRm9yQnJhbmNoKGJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYuZ2l0UmVmRm9yQnJhbmNoKHBhcmVudCkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJsb29raW5nIGZvciBpbml0aWFsIHBhcmVudCBmb3IgJXM7IGN1cnJlbnQgcGFyZW50IGlzICVzIiAlIChicmFuY2gsIHBhcmVudCkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHBhcmVudCkgPT0gMCBhbmQgYnJhbmNoIGluIHNlbGYuaW5pdGlhbFBhcmVudHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gc2VsZi5pbml0aWFsUGFyZW50c1ticmFuY2hdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuaW5pdGlhbFBhcmVudHNbYnJhbmNoXQorCisgICAgICAgICAgICAgICAgICAgICAgICBibG9iID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHBhcmVudCkgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBCcmFuY2ggPSAiJXMvJWQiICUgKHNlbGYudGVtcEJyYW5jaExvY2F0aW9uLCBjaGFuZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiQ3JlYXRpbmcgdGVtcG9yYXJ5IGJyYW5jaDogIiArIHRlbXBCcmFuY2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdChkZXNjcmlwdGlvbiwgZmlsZXNGb3JDb21taXQsIHRlbXBCcmFuY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZW1wQnJhbmNoZXMuYXBwZW5kKHRlbXBCcmFuY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja3BvaW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9iID0gc2VsZi5zZWFyY2hQYXJlbnQocGFyZW50LCBicmFuY2gsIHRlbXBCcmFuY2gpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBibG9iOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0KGRlc2NyaXB0aW9uLCBmaWxlc0ZvckNvbW1pdCwgYnJhbmNoLCBibG9iKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJQYXJlbnQgb2YgJXMgbm90IGZvdW5kLiBDb21taXR0aW5nIGludG8gaGVhZCBvZiAlcyIgJSAoYnJhbmNoLCBwYXJlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXQoZGVzY3JpcHRpb24sIGZpbGVzRm9yQ29tbWl0LCBicmFuY2gsIHBhcmVudCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmaWxlcyA9IHNlbGYuZXh0cmFjdEZpbGVzRnJvbUNvbW1pdChkZXNjcmlwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21taXQoZGVzY3JpcHRpb24sIGZpbGVzLCBzZWxmLmJyYW5jaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsUGFyZW50KQorICAgICAgICAgICAgICAgICAgICAjIG9ubHkgbmVlZGVkIG9uY2UsIHRvIGNvbm5lY3QgdG8gdGhlIHByZXZpb3VzIGNvbW1pdAorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnQgPSAiIgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgcHJpbnQgc2VsZi5naXRFcnJvci5yZWFkKCkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZGVmIGltcG9ydEhlYWRSZXZpc2lvbihzZWxmLCByZXZpc2lvbik6CisgICAgICAgIHByaW50ICJEb2luZyBpbml0aWFsIGltcG9ydCBvZiAlcyBmcm9tIHJldmlzaW9uICVzIGludG8gJXMiICUgKCcgJy5qb2luKHNlbGYuZGVwb3RQYXRocyksIHJldmlzaW9uLCBzZWxmLmJyYW5jaCkKKworICAgICAgICBkZXRhaWxzID0ge30KKyAgICAgICAgZGV0YWlsc1sidXNlciJdID0gImdpdCBwZXJmb3JjZSBpbXBvcnQgdXNlciIKKyAgICAgICAgZGV0YWlsc1siZGVzYyJdID0gKCJJbml0aWFsIGltcG9ydCBvZiAlcyBmcm9tIHRoZSBzdGF0ZSBhdCByZXZpc2lvbiAlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoJyAnLmpvaW4oc2VsZi5kZXBvdFBhdGhzKSwgcmV2aXNpb24pKQorICAgICAgICBkZXRhaWxzWyJjaGFuZ2UiXSA9IHJldmlzaW9uCisgICAgICAgIG5ld2VzdFJldmlzaW9uID0gMAorCisgICAgICAgIGZpbGVDbnQgPSAwCisgICAgICAgIGZpbGVBcmdzID0gWyIlcy4uLiVzIiAlIChwLHJldmlzaW9uKSBmb3IgcCBpbiBzZWxmLmRlcG90UGF0aHNdCisKKyAgICAgICAgZm9yIGluZm8gaW4gcDRDbWRMaXN0KFsiZmlsZXMiXSArIGZpbGVBcmdzKToKKworICAgICAgICAgICAgaWYgJ2NvZGUnIGluIGluZm8gYW5kIGluZm9bJ2NvZGUnXSA9PSAnZXJyb3InOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInA0IHJldHVybmVkIGFuIGVycm9yOiAlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbmZvWydkYXRhJ10pCisgICAgICAgICAgICAgICAgaWYgaW5mb1snZGF0YSddLmZpbmQoIm11c3QgcmVmZXIgdG8gY2xpZW50IikgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiVGhpcyBwYXJ0aWN1bGFyIHA0IGVycm9yIGlzIG1pc2xlYWRpbmcuXG4iKQorICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJQZXJoYXBzIHRoZSBkZXBvdCBwYXRoIHdhcyBtaXNzcGVsbGVkLlxuIik7CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkRlcG90IHBhdGg6ICAlc1xuIiAlICIgIi5qb2luKHNlbGYuZGVwb3RQYXRocykpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgIGlmICdwNEV4aXRDb2RlJyBpbiBpbmZvOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInA0IGV4aXRjb2RlOiAlc1xuIiAlIGluZm9bJ3A0RXhpdENvZGUnXSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisKKyAgICAgICAgICAgIGNoYW5nZSA9IGludChpbmZvWyJjaGFuZ2UiXSkKKyAgICAgICAgICAgIGlmIGNoYW5nZSA+IG5ld2VzdFJldmlzaW9uOgorICAgICAgICAgICAgICAgIG5ld2VzdFJldmlzaW9uID0gY2hhbmdlCisKKyAgICAgICAgICAgIGlmIGluZm9bImFjdGlvbiJdIGluIHNlbGYuZGVsZXRlX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgIyBkb24ndCBpbmNyZWFzZSB0aGUgZmlsZSBjbnQsIG90aGVyd2lzZSBkZXRhaWxzWyJkZXBvdEZpbGUxMjMiXSB3aWxsIGhhdmUgZ2FwcyEKKyAgICAgICAgICAgICAgICAjZmlsZUNudCA9IGZpbGVDbnQgKyAxCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZm9yIHByb3AgaW4gWyJkZXBvdEZpbGUiLCAicmV2IiwgImFjdGlvbiIsICJ0eXBlIiBdOgorICAgICAgICAgICAgICAgIGRldGFpbHNbIiVzJXMiICUgKHByb3AsIGZpbGVDbnQpXSA9IGluZm9bcHJvcF0KKworICAgICAgICAgICAgZmlsZUNudCA9IGZpbGVDbnQgKyAxCisKKyAgICAgICAgZGV0YWlsc1siY2hhbmdlIl0gPSBuZXdlc3RSZXZpc2lvbgorCisgICAgICAgICMgVXNlIHRpbWUgZnJvbSB0b3AtbW9zdCBjaGFuZ2Ugc28gdGhhdCBhbGwgZ2l0IHA0IGNsb25lcyBvZgorICAgICAgICAjIHRoZSBzYW1lIHA0IHJlcG8gaGF2ZSB0aGUgc2FtZSBjb21taXQgU0hBMXMuCisgICAgICAgIHJlcyA9IHA0X2Rlc2NyaWJlKG5ld2VzdFJldmlzaW9uKQorICAgICAgICBkZXRhaWxzWyJ0aW1lIl0gPSByZXNbInRpbWUiXQorCisgICAgICAgIHNlbGYudXBkYXRlT3B0aW9uRGljdChkZXRhaWxzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmNvbW1pdChkZXRhaWxzLCBzZWxmLmV4dHJhY3RGaWxlc0Zyb21Db21taXQoZGV0YWlscyksIHNlbGYuYnJhbmNoKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHByaW50ICJJTyBlcnJvciB3aXRoIGdpdCBmYXN0LWltcG9ydC4gSXMgeW91ciBnaXQgdmVyc2lvbiByZWNlbnQgZW5vdWdoPyIKKyAgICAgICAgICAgIHByaW50IHNlbGYuZ2l0RXJyb3IucmVhZCgpCisKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6CisgICAgICAgIHNlbGYuZGVwb3RQYXRocyA9IFtdCisgICAgICAgIHNlbGYuY2hhbmdlUmFuZ2UgPSAiIgorICAgICAgICBzZWxmLnByZXZpb3VzRGVwb3RQYXRocyA9IFtdCisgICAgICAgIHNlbGYuaGFzT3JpZ2luID0gRmFsc2UKKworICAgICAgICAjIG1hcCBmcm9tIGJyYW5jaCBkZXBvdCBwYXRoIHRvIHBhcmVudCBicmFuY2gKKyAgICAgICAgc2VsZi5rbm93bkJyYW5jaGVzID0ge30KKyAgICAgICAgc2VsZi5pbml0aWFsUGFyZW50cyA9IHt9CisKKyAgICAgICAgaWYgc2VsZi5pbXBvcnRJbnRvUmVtb3RlczoKKyAgICAgICAgICAgIHNlbGYucmVmUHJlZml4ID0gInJlZnMvcmVtb3Rlcy9wNC8iCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnJlZlByZWZpeCA9ICJyZWZzL2hlYWRzL3A0LyIKKworICAgICAgICBpZiBzZWxmLnN5bmNXaXRoT3JpZ2luOgorICAgICAgICAgICAgc2VsZi5oYXNPcmlnaW4gPSBvcmlnaW5QNEJyYW5jaGVzRXhpc3QoKQorICAgICAgICAgICAgaWYgc2VsZi5oYXNPcmlnaW46CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuc2lsZW50OgorICAgICAgICAgICAgICAgICAgICBwcmludCAnU3luY2luZyB3aXRoIG9yaWdpbiBmaXJzdCwgdXNpbmcgImdpdCBmZXRjaCBvcmlnaW4iJworICAgICAgICAgICAgICAgIHN5c3RlbSgiZ2l0IGZldGNoIG9yaWdpbiIpCisKKyAgICAgICAgYnJhbmNoX2FyZ19naXZlbiA9IGJvb2woc2VsZi5icmFuY2gpCisgICAgICAgIGlmIGxlbihzZWxmLmJyYW5jaCkgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuYnJhbmNoID0gc2VsZi5yZWZQcmVmaXggKyAibWFzdGVyIgorICAgICAgICAgICAgaWYgZ2l0QnJhbmNoRXhpc3RzKCJyZWZzL2hlYWRzL3A0IikgYW5kIHNlbGYuaW1wb3J0SW50b1JlbW90ZXM6CisgICAgICAgICAgICAgICAgc3lzdGVtKCJnaXQgdXBkYXRlLXJlZiAlcyByZWZzL2hlYWRzL3A0IiAlIHNlbGYuYnJhbmNoKQorICAgICAgICAgICAgICAgIHN5c3RlbSgiZ2l0IGJyYW5jaCAtRCBwNCIpCisKKyAgICAgICAgIyBhY2NlcHQgZWl0aGVyIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uLCBvciB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZQorICAgICAgICBpZiBzZWxmLnVzZUNsaWVudFNwZWM6CisgICAgICAgICAgICAjIHdpbGwgdXNlIHRoaXMgYWZ0ZXIgY2xvbmUgdG8gc2V0IHRoZSB2YXJpYWJsZQorICAgICAgICAgICAgc2VsZi51c2VDbGllbnRTcGVjX2Zyb21fb3B0aW9ucyA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woImdpdC1wNC51c2VjbGllbnRzcGVjIik6CisgICAgICAgICAgICAgICAgc2VsZi51c2VDbGllbnRTcGVjID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLnVzZUNsaWVudFNwZWM6CisgICAgICAgICAgICBzZWxmLmNsaWVudFNwZWNEaXJzID0gZ2V0Q2xpZW50U3BlYygpCisKKyAgICAgICAgIyBUT0RPOiBzaG91bGQgYWx3YXlzIGxvb2sgYXQgcHJldmlvdXMgY29tbWl0cywKKyAgICAgICAgIyBtZXJnZSB3aXRoIHByZXZpb3VzIGltcG9ydHMsIGlmIHBvc3NpYmxlLgorICAgICAgICBpZiBhcmdzID09IFtdOgorICAgICAgICAgICAgaWYgc2VsZi5oYXNPcmlnaW46CisgICAgICAgICAgICAgICAgY3JlYXRlT3JVcGRhdGVCcmFuY2hlc0Zyb21PcmlnaW4oc2VsZi5yZWZQcmVmaXgsIHNlbGYuc2lsZW50KQorCisgICAgICAgICAgICAjIGJyYW5jaGVzIGhvbGRzIG1hcHBpbmcgZnJvbSBicmFuY2ggbmFtZSB0byBzaGExCisgICAgICAgICAgICBicmFuY2hlcyA9IHA0QnJhbmNoZXNJbkdpdChzZWxmLmltcG9ydEludG9SZW1vdGVzKQorCisgICAgICAgICAgICAjIHJlc3RyaWN0IHRvIGp1c3QgdGhpcyBvbmUsIGRpc2FibGluZyBkZXRlY3QtYnJhbmNoZXMKKyAgICAgICAgICAgIGlmIGJyYW5jaF9hcmdfZ2l2ZW46CisgICAgICAgICAgICAgICAgc2hvcnQgPSBzZWxmLmJyYW5jaC5zcGxpdCgiLyIpWy0xXQorICAgICAgICAgICAgICAgIGlmIHNob3J0IGluIGJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnA0QnJhbmNoZXNJbkdpdCA9IFsgc2hvcnQgXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnA0QnJhbmNoZXNJbkdpdCA9IGJyYW5jaGVzLmtleXMoKQorCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5wNEJyYW5jaGVzSW5HaXQpID4gMToKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJJbXBvcnRpbmcgZnJvbS9pbnRvIG11bHRpcGxlIGJyYW5jaGVzIgorICAgICAgICAgICAgICAgIHNlbGYuZGV0ZWN0QnJhbmNoZXMgPSBUcnVlCisgICAgICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBicmFuY2hlcy5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbFBhcmVudHNbc2VsZi5yZWZQcmVmaXggKyBicmFuY2hdID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoZXNbYnJhbmNoXQorCisgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgImJyYW5jaGVzOiAlcyIgJSBzZWxmLnA0QnJhbmNoZXNJbkdpdAorCisgICAgICAgICAgICBwNENoYW5nZSA9IDAKKyAgICAgICAgICAgIGZvciBicmFuY2ggaW4gc2VsZi5wNEJyYW5jaGVzSW5HaXQ6CisgICAgICAgICAgICAgICAgbG9nTXNnID0gIGV4dHJhY3RMb2dNZXNzYWdlRnJvbUdpdENvbW1pdChzZWxmLnJlZlByZWZpeCArIGJyYW5jaCkKKworICAgICAgICAgICAgICAgIHNldHRpbmdzID0gZXh0cmFjdFNldHRpbmdzR2l0TG9nKGxvZ01zZykKKworICAgICAgICAgICAgICAgIHNlbGYucmVhZE9wdGlvbnMoc2V0dGluZ3MpCisgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLmhhc19rZXkoJ2RlcG90LXBhdGhzJykKKyAgICAgICAgICAgICAgICAgICAgYW5kIHNldHRpbmdzLmhhc19rZXkgKCdjaGFuZ2UnKSk6CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IGludChzZXR0aW5nc1snY2hhbmdlJ10pICsgMQorICAgICAgICAgICAgICAgICAgICBwNENoYW5nZSA9IG1heChwNENoYW5nZSwgY2hhbmdlKQorCisgICAgICAgICAgICAgICAgICAgIGRlcG90UGF0aHMgPSBzb3J0ZWQoc2V0dGluZ3NbJ2RlcG90LXBhdGhzJ10pCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucHJldmlvdXNEZXBvdFBhdGhzID09IFtdOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmV2aW91c0RlcG90UGF0aHMgPSBkZXBvdFBhdGhzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRocyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHByZXYsIGN1cikgaW4gemlwKHNlbGYucHJldmlvdXNEZXBvdFBhdGhzLCBkZXBvdFBhdGhzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X2xpc3QgPSBwcmV2LnNwbGl0KCIvIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGlzdCA9IGN1ci5zcGxpdCgiLyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbWluKGxlbihjdXJfbGlzdCksIGxlbihwcmV2X2xpc3QpKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cl9saXN0W2ldIDw+IHByZXZfbGlzdFtpXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzLmFwcGVuZCAoIi8iLmpvaW4oY3VyX2xpc3RbOmkgKyAxXSkpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJldmlvdXNEZXBvdFBhdGhzID0gcGF0aHMKKworICAgICAgICAgICAgaWYgcDRDaGFuZ2UgPiAwOgorICAgICAgICAgICAgICAgIHNlbGYuZGVwb3RQYXRocyA9IHNvcnRlZChzZWxmLnByZXZpb3VzRGVwb3RQYXRocykKKyAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVJhbmdlID0gIkAlcywjaGVhZCIgJSBwNENoYW5nZQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudCBhbmQgbm90IHNlbGYuZGV0ZWN0QnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJQZXJmb3JtaW5nIGluY3JlbWVudGFsIGltcG9ydCBpbnRvICVzIGdpdCBicmFuY2giICUgc2VsZi5icmFuY2gKKworICAgICAgICAjIGFjY2VwdCBtdWx0aXBsZSByZWYgbmFtZSBhYmJyZXZpYXRpb25zOgorICAgICAgICAjICAgIHJlZnMvZm9vL2Jhci9icmFuY2ggLT4gdXNlIGl0IGV4YWN0bHkKKyAgICAgICAgIyAgICBwNC9icmFuY2ggLT4gcHJlcGVuZCByZWZzL3JlbW90ZXMvIG9yIHJlZnMvaGVhZHMvCisgICAgICAgICMgICAgYnJhbmNoIC0+IHByZXBlbmQgcmVmcy9yZW1vdGVzL3A0LyBvciByZWZzL2hlYWRzL3A0LworICAgICAgICBpZiBub3Qgc2VsZi5icmFuY2guc3RhcnRzd2l0aCgicmVmcy8iKToKKyAgICAgICAgICAgIGlmIHNlbGYuaW1wb3J0SW50b1JlbW90ZXM6CisgICAgICAgICAgICAgICAgcHJlcGVuZCA9ICJyZWZzL3JlbW90ZXMvIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmVwZW5kID0gInJlZnMvaGVhZHMvIgorICAgICAgICAgICAgaWYgbm90IHNlbGYuYnJhbmNoLnN0YXJ0c3dpdGgoInA0LyIpOgorICAgICAgICAgICAgICAgIHByZXBlbmQgKz0gInA0LyIKKyAgICAgICAgICAgIHNlbGYuYnJhbmNoID0gcHJlcGVuZCArIHNlbGYuYnJhbmNoCisKKyAgICAgICAgaWYgbGVuKGFyZ3MpID09IDAgYW5kIHNlbGYuZGVwb3RQYXRoczoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudDoKKyAgICAgICAgICAgICAgICBwcmludCAiRGVwb3QgcGF0aHM6ICVzIiAlICcgJy5qb2luKHNlbGYuZGVwb3RQYXRocykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYuZGVwb3RQYXRocyBhbmQgc2VsZi5kZXBvdFBhdGhzICE9IGFyZ3M6CisgICAgICAgICAgICAgICAgcHJpbnQgKCJwcmV2aW91cyBpbXBvcnQgdXNlZCBkZXBvdCBwYXRoICVzIGFuZCBub3cgJXMgd2FzIHNwZWNpZmllZC4gIgorICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBkb2Vzbid0IHdvcmshIiAlICgnICcuam9pbiAoc2VsZi5kZXBvdFBhdGhzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnLmpvaW4gKGFyZ3MpKSkKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgICAgICAgICBzZWxmLmRlcG90UGF0aHMgPSBzb3J0ZWQoYXJncykKKworICAgICAgICByZXZpc2lvbiA9ICIiCisgICAgICAgIHNlbGYudXNlcnMgPSB7fQorCisgICAgICAgICMgTWFrZSBzdXJlIG5vIHJldmlzaW9uIHNwZWNpZmllcnMgYXJlIHVzZWQgd2hlbiAtLWNoYW5nZXNmaWxlCisgICAgICAgICMgaXMgc3BlY2lmaWVkLgorICAgICAgICBiYWRfY2hhbmdlc2ZpbGUgPSBGYWxzZQorICAgICAgICBpZiBsZW4oc2VsZi5jaGFuZ2VzRmlsZSkgPiAwOgorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzOgorICAgICAgICAgICAgICAgIGlmIHAuZmluZCgiQCIpID49IDAgb3IgcC5maW5kKCIjIikgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgYmFkX2NoYW5nZXNmaWxlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBiYWRfY2hhbmdlc2ZpbGU6CisgICAgICAgICAgICBkaWUoIk9wdGlvbiAtLWNoYW5nZXNmaWxlIGlzIGluY29tcGF0aWJsZSB3aXRoIHJldmlzaW9uIHNwZWNpZmllcnMiKQorCisgICAgICAgIG5ld1BhdGhzID0gW10KKyAgICAgICAgZm9yIHAgaW4gc2VsZi5kZXBvdFBhdGhzOgorICAgICAgICAgICAgaWYgcC5maW5kKCJAIikgIT0gLTE6CisgICAgICAgICAgICAgICAgYXRJZHggPSBwLmluZGV4KCJAIikKKyAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVJhbmdlID0gcFthdElkeDpdCisgICAgICAgICAgICAgICAgaWYgc2VsZi5jaGFuZ2VSYW5nZSA9PSAiQGFsbCI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlUmFuZ2UgPSAiIgorICAgICAgICAgICAgICAgIGVsaWYgJywnIG5vdCBpbiBzZWxmLmNoYW5nZVJhbmdlOgorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbiA9IHNlbGYuY2hhbmdlUmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VSYW5nZSA9ICIiCisgICAgICAgICAgICAgICAgcCA9IHBbOmF0SWR4XQorICAgICAgICAgICAgZWxpZiBwLmZpbmQoIiMiKSAhPSAtMToKKyAgICAgICAgICAgICAgICBoYXNoSWR4ID0gcC5pbmRleCgiIyIpCisgICAgICAgICAgICAgICAgcmV2aXNpb24gPSBwW2hhc2hJZHg6XQorICAgICAgICAgICAgICAgIHAgPSBwWzpoYXNoSWR4XQorICAgICAgICAgICAgZWxpZiBzZWxmLnByZXZpb3VzRGVwb3RQYXRocyA9PSBbXToKKyAgICAgICAgICAgICAgICAjIHBheSBhdHRlbnRpb24gdG8gY2hhbmdlc2ZpbGUsIGlmIGdpdmVuLCBlbHNlIGltcG9ydAorICAgICAgICAgICAgICAgICMgdGhlIGVudGlyZSBwNCB0cmVlIGF0IHRoZSBoZWFkIHJldmlzaW9uCisgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYuY2hhbmdlc0ZpbGUpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uID0gIiNoZWFkIgorCisgICAgICAgICAgICBwID0gcmUuc3ViICgiXC5cLlwuJCIsICIiLCBwKQorICAgICAgICAgICAgaWYgbm90IHAuZW5kc3dpdGgoIi8iKToKKyAgICAgICAgICAgICAgICBwICs9ICIvIgorCisgICAgICAgICAgICBuZXdQYXRocy5hcHBlbmQocCkKKworICAgICAgICBzZWxmLmRlcG90UGF0aHMgPSBuZXdQYXRocworCisgICAgICAgICMgLS1kZXRlY3QtYnJhbmNoZXMgbWF5IGNoYW5nZSB0aGlzIGZvciBlYWNoIGJyYW5jaAorICAgICAgICBzZWxmLmJyYW5jaFByZWZpeGVzID0gc2VsZi5kZXBvdFBhdGhzCisKKyAgICAgICAgc2VsZi5sb2FkVXNlck1hcEZyb21DYWNoZSgpCisgICAgICAgIHNlbGYubGFiZWxzID0ge30KKyAgICAgICAgaWYgc2VsZi5kZXRlY3RMYWJlbHM6CisgICAgICAgICAgICBzZWxmLmdldExhYmVscygpOworCisgICAgICAgIGlmIHNlbGYuZGV0ZWN0QnJhbmNoZXM6CisgICAgICAgICAgICAjIyBGSVhNRSAtIHdoYXQncyBhIFA0IHByb2plY3ROYW1lID8KKyAgICAgICAgICAgIHNlbGYucHJvamVjdE5hbWUgPSBzZWxmLmd1ZXNzUHJvamVjdE5hbWUoKQorCisgICAgICAgICAgICBpZiBzZWxmLmhhc09yaWdpbjoKKyAgICAgICAgICAgICAgICBzZWxmLmdldEJyYW5jaE1hcHBpbmdGcm9tR2l0QnJhbmNoZXMoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmdldEJyYW5jaE1hcHBpbmcoKQorICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50ICJwNC1naXQgYnJhbmNoZXM6ICVzIiAlIHNlbGYucDRCcmFuY2hlc0luR2l0CisgICAgICAgICAgICAgICAgcHJpbnQgImluaXRpYWwgcGFyZW50czogJXMiICUgc2VsZi5pbml0aWFsUGFyZW50cworICAgICAgICAgICAgZm9yIGIgaW4gc2VsZi5wNEJyYW5jaGVzSW5HaXQ6CisgICAgICAgICAgICAgICAgaWYgYiAhPSAibWFzdGVyIjoKKworICAgICAgICAgICAgICAgICAgICAjIyBGSVhNRQorICAgICAgICAgICAgICAgICAgICBiID0gYltsZW4oc2VsZi5wcm9qZWN0TmFtZSk6XQorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlZEJyYW5jaGVzLmFkZChiKQorCisgICAgICAgIHNlbGYudHogPSAiJSswM2QlMDJkIiAlICgtIHRpbWUudGltZXpvbmUgLyAzNjAwLCAoKC0gdGltZS50aW1lem9uZSAlIDM2MDApIC8gNjApKQorCisgICAgICAgIHNlbGYuaW1wb3J0UHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oWyJnaXQiLCAiZmFzdC1pbXBvcnQiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKTsKKyAgICAgICAgc2VsZi5naXRPdXRwdXQgPSBzZWxmLmltcG9ydFByb2Nlc3Muc3Rkb3V0CisgICAgICAgIHNlbGYuZ2l0U3RyZWFtID0gc2VsZi5pbXBvcnRQcm9jZXNzLnN0ZGluCisgICAgICAgIHNlbGYuZ2l0RXJyb3IgPSBzZWxmLmltcG9ydFByb2Nlc3Muc3RkZXJyCisKKyAgICAgICAgaWYgcmV2aXNpb246CisgICAgICAgICAgICBzZWxmLmltcG9ydEhlYWRSZXZpc2lvbihyZXZpc2lvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoYW5nZXMgPSBbXQorCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5jaGFuZ2VzRmlsZSkgPiAwOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IG9wZW4oc2VsZi5jaGFuZ2VzRmlsZSkucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICAgICBjaGFuZ2VTZXQgPSBzZXQoKQorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIG91dHB1dDoKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlU2V0LmFkZChpbnQobGluZSkpCisKKyAgICAgICAgICAgICAgICBmb3IgY2hhbmdlIGluIGNoYW5nZVNldDoKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoY2hhbmdlKQorCisgICAgICAgICAgICAgICAgY2hhbmdlcy5zb3J0KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBjYXRjaCAiZ2l0IHA0IHN5bmMiIHdpdGggbm8gbmV3IGJyYW5jaGVzLCBpbiBhIHJlcG8gdGhhdAorICAgICAgICAgICAgICAgICMgZG9lcyBub3QgaGF2ZSBhbnkgZXhpc3RpbmcgcDQgYnJhbmNoZXMKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucDRCcmFuY2hlc0luR2l0OgorICAgICAgICAgICAgICAgICAgICAgICAgZGllKCJObyByZW1vdGUgcDQgYnJhbmNoZXMuICBQZXJoYXBzIHlvdSBuZXZlciBkaWQgXCJnaXQgcDQgY2xvbmVcIiBpbiBoZXJlLiIpCisKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgZGVmYXVsdCBicmFuY2ggaXMgbWFzdGVyLCB1bmxlc3MgLS1icmFuY2ggaXMgdXNlZCB0bworICAgICAgICAgICAgICAgICAgICAjIHNwZWNpZnkgc29tZXRoaW5nIGVsc2UuICBNYWtlIHN1cmUgaXQgZXhpc3RzLCBvciBjb21wbGFpbgorICAgICAgICAgICAgICAgICAgICAjIG5pY2VseSBhYm91dCBob3cgdG8gdXNlIC0tYnJhbmNoLgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kZXRlY3RCcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBicmFuY2hfZXhpc3RzKHNlbGYuYnJhbmNoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBicmFuY2hfYXJnX2dpdmVuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWUoIkVycm9yOiBicmFuY2ggJXMgZG9lcyBub3QgZXhpc3QuIiAlIHNlbGYuYnJhbmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZSgiRXJyb3I6IG5vIGJyYW5jaCAlczsgcGVyaGFwcyBzcGVjaWZ5IG9uZSB3aXRoIC0tYnJhbmNoLiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5icmFuY2gpCisKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJHZXR0aW5nIHA0IGNoYW5nZXMgZm9yICVzLi4uJXMiICUgKCcsICcuam9pbihzZWxmLmRlcG90UGF0aHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZVJhbmdlKQorICAgICAgICAgICAgICAgIGNoYW5nZXMgPSBwNENoYW5nZXNGb3JQYXRocyhzZWxmLmRlcG90UGF0aHMsIHNlbGYuY2hhbmdlUmFuZ2UsIHNlbGYuY2hhbmdlc19ibG9ja19zaXplKQorCisgICAgICAgICAgICAgICAgaWYgbGVuKHNlbGYubWF4Q2hhbmdlcykgPiAwOgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzID0gY2hhbmdlc1s6bWluKGludChzZWxmLm1heENoYW5nZXMpLCBsZW4oY2hhbmdlcykpXQorCisgICAgICAgICAgICBpZiBsZW4oY2hhbmdlcykgPT0gMDoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJObyBjaGFuZ2VzIHRvIGltcG9ydCEiCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNpbGVudCBhbmQgbm90IHNlbGYuZGV0ZWN0QnJhbmNoZXM6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICJJbXBvcnQgZGVzdGluYXRpb246ICVzIiAlIHNlbGYuYnJhbmNoCisKKyAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZWRCcmFuY2hlcyA9IHNldCgpCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5kZXRlY3RCcmFuY2hlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgYXJnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc3RhcnQgYSBuZXcgYnJhbmNoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnQgPSAiIgorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBidWlsZCBvbiBhIHByZXZpb3VzIHJldmlzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxQYXJlbnQgPSBwYXJzZVJldmlzaW9uKHNlbGYuYnJhbmNoKQorCisgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRDaGFuZ2VzKGNoYW5nZXMpCisKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zaWxlbnQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50ICIiCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnVwZGF0ZWRCcmFuY2hlcykgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiVXBkYXRlZCBicmFuY2hlczogIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBiIGluIHNlbGYudXBkYXRlZEJyYW5jaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiVzICIgJSBiKQorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorCisgICAgICAgIGlmIGdpdENvbmZpZ0Jvb2woImdpdC1wNC5pbXBvcnRMYWJlbHMiKToKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0TGFiZWxzID0gVHJ1ZQorCisgICAgICAgIGlmIHNlbGYuaW1wb3J0TGFiZWxzOgorICAgICAgICAgICAgcDRMYWJlbHMgPSBnZXRQNExhYmVscyhzZWxmLmRlcG90UGF0aHMpCisgICAgICAgICAgICBnaXRUYWdzID0gZ2V0R2l0VGFncygpCisKKyAgICAgICAgICAgIG1pc3NpbmdQNExhYmVscyA9IHA0TGFiZWxzIC0gZ2l0VGFncworICAgICAgICAgICAgc2VsZi5pbXBvcnRQNExhYmVscyhzZWxmLmdpdFN0cmVhbSwgbWlzc2luZ1A0TGFiZWxzKQorCisgICAgICAgIHNlbGYuZ2l0U3RyZWFtLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5pbXBvcnRQcm9jZXNzLndhaXQoKSAhPSAwOgorICAgICAgICAgICAgZGllKCJmYXN0LWltcG9ydCBmYWlsZWQ6ICVzIiAlIHNlbGYuZ2l0RXJyb3IucmVhZCgpKQorICAgICAgICBzZWxmLmdpdE91dHB1dC5jbG9zZSgpCisgICAgICAgIHNlbGYuZ2l0RXJyb3IuY2xvc2UoKQorCisgICAgICAgICMgQ2xlYW51cCB0ZW1wb3JhcnkgYnJhbmNoZXMgY3JlYXRlZCBkdXJpbmcgaW1wb3J0CisgICAgICAgIGlmIHNlbGYudGVtcEJyYW5jaGVzICE9IFtdOgorICAgICAgICAgICAgZm9yIGJyYW5jaCBpbiBzZWxmLnRlbXBCcmFuY2hlczoKKyAgICAgICAgICAgICAgICByZWFkX3BpcGUoImdpdCB1cGRhdGUtcmVmIC1kICVzIiAlIGJyYW5jaCkKKyAgICAgICAgICAgIG9zLnJtZGlyKG9zLnBhdGguam9pbihvcy5lbnZpcm9uLmdldCgiR0lUX0RJUiIsICIuZ2l0IiksIHNlbGYudGVtcEJyYW5jaExvY2F0aW9uKSkKKworICAgICAgICAjIENyZWF0ZSBhIHN5bWJvbGljIHJlZiBwNC9IRUFEIHBvaW50aW5nIHRvIHA0LzxicmFuY2g+IHRvIGFsbG93CisgICAgICAgICMgYSBjb252ZW5pZW50IHNob3J0Y3V0IHJlZm5hbWUgInA0Ii4KKyAgICAgICAgaWYgc2VsZi5pbXBvcnRJbnRvUmVtb3RlczoKKyAgICAgICAgICAgIGhlYWRfcmVmID0gc2VsZi5yZWZQcmVmaXggKyAiSEVBRCIKKyAgICAgICAgICAgIGlmIG5vdCBnaXRCcmFuY2hFeGlzdHMoaGVhZF9yZWYpIGFuZCBnaXRCcmFuY2hFeGlzdHMoc2VsZi5icmFuY2gpOgorICAgICAgICAgICAgICAgIHN5c3RlbShbImdpdCIsICJzeW1ib2xpYy1yZWYiLCBoZWFkX3JlZiwgc2VsZi5icmFuY2hdKQorCisgICAgICAgIHJldHVybiBUcnVlCisKK2NsYXNzIFA0UmViYXNlKENvbW1hbmQpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgQ29tbWFuZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBbCisgICAgICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0taW1wb3J0LWxhYmVscyIsIGRlc3Q9ImltcG9ydExhYmVscyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpLAorICAgICAgICBdCisgICAgICAgIHNlbGYuaW1wb3J0TGFiZWxzID0gRmFsc2UKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICgiRmV0Y2hlcyB0aGUgbGF0ZXN0IHJldmlzaW9uIGZyb20gcGVyZm9yY2UgYW5kICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJyZWJhc2VzIHRoZSBjdXJyZW50IHdvcmsgKGJyYW5jaCkgYWdhaW5zdCBpdCIpCisKKyAgICBkZWYgcnVuKHNlbGYsIGFyZ3MpOgorICAgICAgICBzeW5jID0gUDRTeW5jKCkKKyAgICAgICAgc3luYy5pbXBvcnRMYWJlbHMgPSBzZWxmLmltcG9ydExhYmVscworICAgICAgICBzeW5jLnJ1bihbXSkKKworICAgICAgICByZXR1cm4gc2VsZi5yZWJhc2UoKQorCisgICAgZGVmIHJlYmFzZShzZWxmKToKKyAgICAgICAgaWYgb3Muc3lzdGVtKCJnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCIpICE9IDA6CisgICAgICAgICAgICBkaWUoIlNvbWUgZmlsZXMgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSBhcmUgbW9kaWZpZWQgYW5kIGRpZmZlcmVudCB0aGFuIHdoYXQgaXMgaW4geW91ciBpbmRleC4gWW91IGNhbiB1c2UgZ2l0IHVwZGF0ZS1pbmRleCA8ZmlsZW5hbWU+IHRvIGJyaW5nIHRoZSBpbmRleCB1cC10by1kYXRlIG9yIHN0YXNoIGF3YXkgYWxsIHlvdXIgY2hhbmdlcyB3aXRoIGdpdCBzdGFzaC4iKTsKKyAgICAgICAgaWYgbGVuKHJlYWRfcGlwZSgiZ2l0IGRpZmYtaW5kZXggSEVBRCAtLSIpKSA+IDA6CisgICAgICAgICAgICBkaWUoIllvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMuIFBsZWFzZSBjb21taXQgdGhlbSBiZWZvcmUgcmViYXNpbmcgb3Igc3Rhc2ggdGhlbSBhd2F5IHdpdGggZ2l0IHN0YXNoLiIpOworCisgICAgICAgIFt1cHN0cmVhbSwgc2V0dGluZ3NdID0gZmluZFVwc3RyZWFtQnJhbmNoUG9pbnQoKQorICAgICAgICBpZiBsZW4odXBzdHJlYW0pID09IDA6CisgICAgICAgICAgICBkaWUoIkNhbm5vdCBmaW5kIHVwc3RyZWFtIGJyYW5jaHBvaW50IGZvciByZWJhc2UiKQorCisgICAgICAgICMgdGhlIGJyYW5jaHBvaW50IG1heSBiZSBwNC9mb29+Mywgc28gc3RyaXAgb2ZmIHRoZSBwYXJlbnQKKyAgICAgICAgdXBzdHJlYW0gPSByZS5zdWIoIn5bMC05XSskIiwgIiIsIHVwc3RyZWFtKQorCisgICAgICAgIHByaW50ICJSZWJhc2luZyB0aGUgY3VycmVudCBicmFuY2ggb250byAlcyIgJSB1cHN0cmVhbQorICAgICAgICBvbGRIZWFkID0gcmVhZF9waXBlKCJnaXQgcmV2LXBhcnNlIEhFQUQiKS5zdHJpcCgpCisgICAgICAgIHN5c3RlbSgiZ2l0IHJlYmFzZSAlcyIgJSB1cHN0cmVhbSkKKyAgICAgICAgc3lzdGVtKCJnaXQgZGlmZi10cmVlIC0tc3RhdCAtLXN1bW1hcnkgLU0gJXMgSEVBRCAtLSIgJSBvbGRIZWFkKQorICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBQNENsb25lKFA0U3luYyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBQNFN5bmMuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9ICJDcmVhdGVzIGEgbmV3IGdpdCByZXBvc2l0b3J5IGFuZCBpbXBvcnRzIGZyb20gUGVyZm9yY2UgaW50byBpdCIKKyAgICAgICAgc2VsZi51c2FnZSA9ICJ1c2FnZTogJXByb2cgW29wdGlvbnNdIC8vZGVwb3QvcGF0aFtAcmV2UmFuZ2VdIgorICAgICAgICBzZWxmLm9wdGlvbnMgKz0gWworICAgICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tZGVzdGluYXRpb24iLCBkZXN0PSJjbG9uZURlc3RpbmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmUnLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJ3aGVyZSB0byBsZWF2ZSByZXN1bHQgb2YgdGhlIGNsb25lIiksCisgICAgICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1iYXJlIiwgZGVzdD0iY2xvbmVCYXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlZmF1bHQ9RmFsc2UpLAorICAgICAgICBdCisgICAgICAgIHNlbGYuY2xvbmVEZXN0aW5hdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5uZWVkc0dpdCA9IEZhbHNlCisgICAgICAgIHNlbGYuY2xvbmVCYXJlID0gRmFsc2UKKworICAgIGRlZiBkZWZhdWx0RGVzdGluYXRpb24oc2VsZiwgYXJncyk6CisgICAgICAgICMjIFRPRE86IHVzZSBjb21tb24gcHJlZml4IG9mIGFyZ3M/CisgICAgICAgIGRlcG90UGF0aCA9IGFyZ3NbMF0KKyAgICAgICAgZGVwb3REaXIgPSByZS5zdWIoIihAW15AXSopJCIsICIiLCBkZXBvdFBhdGgpCisgICAgICAgIGRlcG90RGlyID0gcmUuc3ViKCIoI1teI10qKSQiLCAiIiwgZGVwb3REaXIpCisgICAgICAgIGRlcG90RGlyID0gcmUuc3ViKHIiXC5cLlwuJCIsICIiLCBkZXBvdERpcikKKyAgICAgICAgZGVwb3REaXIgPSByZS5zdWIociIvJCIsICIiLCBkZXBvdERpcikKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXQoZGVwb3REaXIpWzFdCisKKyAgICBkZWYgcnVuKHNlbGYsIGFyZ3MpOgorICAgICAgICBpZiBsZW4oYXJncykgPCAxOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgaWYgc2VsZi5rZWVwUmVwb1BhdGggYW5kIG5vdCBzZWxmLmNsb25lRGVzdGluYXRpb246CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJNdXN0IHNwZWNpZnkgZGVzdGluYXRpb24gZm9yIC0ta2VlcC1wYXRoXG4iKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICBkZXBvdFBhdGhzID0gYXJncworCisgICAgICAgIGlmIG5vdCBzZWxmLmNsb25lRGVzdGluYXRpb24gYW5kIGxlbihkZXBvdFBhdGhzKSA+IDE6CisgICAgICAgICAgICBzZWxmLmNsb25lRGVzdGluYXRpb24gPSBkZXBvdFBhdGhzWy0xXQorICAgICAgICAgICAgZGVwb3RQYXRocyA9IGRlcG90UGF0aHNbOi0xXQorCisgICAgICAgIHNlbGYuY2xvbmVFeGNsdWRlID0gWyIvIitwIGZvciBwIGluIHNlbGYuY2xvbmVFeGNsdWRlXQorICAgICAgICBmb3IgcCBpbiBkZXBvdFBhdGhzOgorICAgICAgICAgICAgaWYgbm90IHAuc3RhcnRzd2l0aCgiLy8iKToKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdEZXBvdCBwYXRocyBtdXN0IHN0YXJ0IHdpdGggIi8vIjogJXNcbicgJSBwKQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIG5vdCBzZWxmLmNsb25lRGVzdGluYXRpb246CisgICAgICAgICAgICBzZWxmLmNsb25lRGVzdGluYXRpb24gPSBzZWxmLmRlZmF1bHREZXN0aW5hdGlvbihhcmdzKQorCisgICAgICAgIHByaW50ICJJbXBvcnRpbmcgZnJvbSAlcyBpbnRvICVzIiAlICgnLCAnLmpvaW4oZGVwb3RQYXRocyksIHNlbGYuY2xvbmVEZXN0aW5hdGlvbikKKworICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5jbG9uZURlc3RpbmF0aW9uKToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYuY2xvbmVEZXN0aW5hdGlvbikKKyAgICAgICAgY2hkaXIoc2VsZi5jbG9uZURlc3RpbmF0aW9uKQorCisgICAgICAgIGluaXRfY21kID0gWyAiZ2l0IiwgImluaXQiIF0KKyAgICAgICAgaWYgc2VsZi5jbG9uZUJhcmU6CisgICAgICAgICAgICBpbml0X2NtZC5hcHBlbmQoIi0tYmFyZSIpCisgICAgICAgIHJldGNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoaW5pdF9jbWQpCisgICAgICAgIGlmIHJldGNvZGU6CisgICAgICAgICAgICByYWlzZSBDYWxsZWRQcm9jZXNzRXJyb3IocmV0Y29kZSwgaW5pdF9jbWQpCisKKyAgICAgICAgaWYgbm90IFA0U3luYy5ydW4oc2VsZiwgZGVwb3RQYXRocyk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAjIGNyZWF0ZSBhIG1hc3RlciBicmFuY2ggYW5kIGNoZWNrIG91dCBhIHdvcmsgdHJlZQorICAgICAgICBpZiBnaXRCcmFuY2hFeGlzdHMoc2VsZi5icmFuY2gpOgorICAgICAgICAgICAgc3lzdGVtKFsgImdpdCIsICJicmFuY2giLCAibWFzdGVyIiwgc2VsZi5icmFuY2ggXSkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNsb25lQmFyZToKKyAgICAgICAgICAgICAgICBzeXN0ZW0oWyAiZ2l0IiwgImNoZWNrb3V0IiwgIi1mIiBdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgJ05vdCBjaGVja2luZyBvdXQgYW55IGJyYW5jaCwgdXNlICcgXAorICAgICAgICAgICAgICAgICAgJyJnaXQgY2hlY2tvdXQgLXEgLWIgbWFzdGVyIDxicmFuY2g+IicKKworICAgICAgICAjIGF1dG8tc2V0IHRoaXMgdmFyaWFibGUgaWYgaW52b2tlZCB3aXRoIC0tdXNlLWNsaWVudC1zcGVjCisgICAgICAgIGlmIHNlbGYudXNlQ2xpZW50U3BlY19mcm9tX29wdGlvbnM6CisgICAgICAgICAgICBzeXN0ZW0oImdpdCBjb25maWcgLS1ib29sIGdpdC1wNC51c2VjbGllbnRzcGVjIHRydWUiKQorCisgICAgICAgIHJldHVybiBUcnVlCisKK2NsYXNzIFA0QnJhbmNoZXMoQ29tbWFuZCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBDb21tYW5kLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYub3B0aW9ucyA9IFsgXQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gKCJTaG93cyB0aGUgZ2l0IGJyYW5jaGVzIHRoYXQgaG9sZCBpbXBvcnRzIGFuZCB0aGVpciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiY29ycmVzcG9uZGluZyBwZXJmb3JjZSBkZXBvdCBwYXRocyIpCisgICAgICAgIHNlbGYudmVyYm9zZSA9IEZhbHNlCisKKyAgICBkZWYgcnVuKHNlbGYsIGFyZ3MpOgorICAgICAgICBpZiBvcmlnaW5QNEJyYW5jaGVzRXhpc3QoKToKKyAgICAgICAgICAgIGNyZWF0ZU9yVXBkYXRlQnJhbmNoZXNGcm9tT3JpZ2luKCkKKworICAgICAgICBjbWRsaW5lID0gImdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYyAiCisgICAgICAgIGNtZGxpbmUgKz0gIiAtLXJlbW90ZXMiCisKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVhZF9waXBlX2xpbmVzKGNtZGxpbmUpOgorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorCisgICAgICAgICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKCdwNC8nKSBvciBsaW5lID09ICJwNC9IRUFEIjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYnJhbmNoID0gbGluZQorCisgICAgICAgICAgICBsb2cgPSBleHRyYWN0TG9nTWVzc2FnZUZyb21HaXRDb21taXQoInJlZnMvcmVtb3Rlcy8lcyIgJSBicmFuY2gpCisgICAgICAgICAgICBzZXR0aW5ncyA9IGV4dHJhY3RTZXR0aW5nc0dpdExvZyhsb2cpCisKKyAgICAgICAgICAgIHByaW50ICIlcyA8PSAlcyAoJXMpIiAlIChicmFuY2gsICIsIi5qb2luKHNldHRpbmdzWyJkZXBvdC1wYXRocyJdKSwgc2V0dGluZ3NbImNoYW5nZSJdKQorICAgICAgICByZXR1cm4gVHJ1ZQorCitjbGFzcyBIZWxwRm9ybWF0dGVyKG9wdHBhcnNlLkluZGVudGVkSGVscEZvcm1hdHRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBvcHRwYXJzZS5JbmRlbnRlZEhlbHBGb3JtYXR0ZXIuX19pbml0X18oc2VsZikKKworICAgIGRlZiBmb3JtYXRfZGVzY3JpcHRpb24oc2VsZiwgZGVzY3JpcHRpb24pOgorICAgICAgICBpZiBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbiArICJcbiIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiIgorCitkZWYgcHJpbnRVc2FnZShjb21tYW5kcyk6CisgICAgcHJpbnQgInVzYWdlOiAlcyA8Y29tbWFuZD4gW29wdGlvbnNdIiAlIHN5cy5hcmd2WzBdCisgICAgcHJpbnQgIiIKKyAgICBwcmludCAidmFsaWQgY29tbWFuZHM6ICVzIiAlICIsICIuam9pbihjb21tYW5kcykKKyAgICBwcmludCAiIgorICAgIHByaW50ICJUcnkgJXMgPGNvbW1hbmQ+IC0taGVscCBmb3IgY29tbWFuZCBzcGVjaWZpYyBoZWxwLiIgJSBzeXMuYXJndlswXQorICAgIHByaW50ICIiCisKK2NvbW1hbmRzID0geworICAgICJkZWJ1ZyIgOiBQNERlYnVnLAorICAgICJzdWJtaXQiIDogUDRTdWJtaXQsCisgICAgImNvbW1pdCIgOiBQNFN1Ym1pdCwKKyAgICAic3luYyIgOiBQNFN5bmMsCisgICAgInJlYmFzZSIgOiBQNFJlYmFzZSwKKyAgICAiY2xvbmUiIDogUDRDbG9uZSwKKyAgICAicm9sbGJhY2siIDogUDRSb2xsQmFjaywKKyAgICAiYnJhbmNoZXMiIDogUDRCcmFuY2hlcworfQorCisKK2RlZiBtYWluKCk6CisgICAgaWYgbGVuKHN5cy5hcmd2WzE6XSkgPT0gMDoKKyAgICAgICAgcHJpbnRVc2FnZShjb21tYW5kcy5rZXlzKCkpCisgICAgICAgIHN5cy5leGl0KDIpCisKKyAgICBjbWROYW1lID0gc3lzLmFyZ3ZbMV0KKyAgICB0cnk6CisgICAgICAgIGtsYXNzID0gY29tbWFuZHNbY21kTmFtZV0KKyAgICAgICAgY21kID0ga2xhc3MoKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcHJpbnQgInVua25vd24gY29tbWFuZCAlcyIgJSBjbWROYW1lCisgICAgICAgIHByaW50ICIiCisgICAgICAgIHByaW50VXNhZ2UoY29tbWFuZHMua2V5cygpKQorICAgICAgICBzeXMuZXhpdCgyKQorCisgICAgb3B0aW9ucyA9IGNtZC5vcHRpb25zCisgICAgY21kLmdpdGRpciA9IG9zLmVudmlyb24uZ2V0KCJHSVRfRElSIiwgTm9uZSkKKworICAgIGFyZ3MgPSBzeXMuYXJndlsyOl0KKworICAgIG9wdGlvbnMuYXBwZW5kKG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXZlcmJvc2UiLCAiLXYiLCBkZXN0PSJ2ZXJib3NlIiwgYWN0aW9uPSJzdG9yZV90cnVlIikpCisgICAgaWYgY21kLm5lZWRzR2l0OgorICAgICAgICBvcHRpb25zLmFwcGVuZChvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1naXQtZGlyIiwgZGVzdD0iZ2l0ZGlyIikpCisKKyAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoY21kLnVzYWdlLnJlcGxhY2UoIiVwcm9nIiwgIiVwcm9nICIgKyBjbWROYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gPSBjbWQuZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlciA9IEhlbHBGb3JtYXR0ZXIoKSkKKworICAgIChjbWQsIGFyZ3MpID0gcGFyc2VyLnBhcnNlX2FyZ3Moc3lzLmFyZ3ZbMjpdLCBjbWQpOworICAgIGdsb2JhbCB2ZXJib3NlCisgICAgdmVyYm9zZSA9IGNtZC52ZXJib3NlCisgICAgaWYgY21kLm5lZWRzR2l0OgorICAgICAgICBpZiBjbWQuZ2l0ZGlyID09IE5vbmU6CisgICAgICAgICAgICBjbWQuZ2l0ZGlyID0gb3MucGF0aC5hYnNwYXRoKCIuZ2l0IikKKyAgICAgICAgICAgIGlmIG5vdCBpc1ZhbGlkR2l0RGlyKGNtZC5naXRkaXIpOgorICAgICAgICAgICAgICAgIGNtZC5naXRkaXIgPSByZWFkX3BpcGUoImdpdCByZXYtcGFyc2UgLS1naXQtZGlyIikuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGNtZC5naXRkaXIpOgorICAgICAgICAgICAgICAgICAgICBjZHVwID0gcmVhZF9waXBlKCJnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwIikuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4oY2R1cCkgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgY2hkaXIoY2R1cCk7CisKKyAgICAgICAgaWYgbm90IGlzVmFsaWRHaXREaXIoY21kLmdpdGRpcik6CisgICAgICAgICAgICBpZiBpc1ZhbGlkR2l0RGlyKGNtZC5naXRkaXIgKyAiLy5naXQiKToKKyAgICAgICAgICAgICAgICBjbWQuZ2l0ZGlyICs9ICIvLmdpdCIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGllKCJmYXRhbDogY2Fubm90IGxvY2F0ZSBnaXQgcmVwb3NpdG9yeSBhdCAlcyIgJSBjbWQuZ2l0ZGlyKQorCisgICAgICAgIG9zLmVudmlyb25bIkdJVF9ESVIiXSA9IGNtZC5naXRkaXIKKworICAgIGlmIG5vdCBjbWQucnVuKGFyZ3MpOgorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHN5cy5leGl0KDIpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL2dpdC1wYXJzZS1yZW1vdGUuc2ggYi9naXQtcGFyc2UtcmVtb3RlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZmU4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcGFyc2UtcmVtb3RlLnNoCkBAIC0wLDAgKzEsODkgQEAKKyMgVGhpcyBpcyBhIHNoZWxsIGxpYnJhcnkgdG8gY2FsY3VsYXRlIHRoZSByZW1vdGUgcmVwb3NpdG9yeSBhbmQKKyMgdXBzdHJlYW0gYnJhbmNoIHRoYXQgc2hvdWxkIGJlIHB1bGxlZCBieSAiZ2l0IHB1bGwiIGZyb20gdGhlIGN1cnJlbnQKKyMgYnJhbmNoLgorCisjIGdpdC1scy1yZW1vdGUgY291bGQgYmUgY2FsbGVkIGZyb20gb3V0c2lkZSBhIGdpdCBtYW5hZ2VkIHJlcG9zaXRvcnk7CisjIHRoaXMgd291bGQgZmFpbCBpbiB0aGF0IGNhc2UgYW5kIHdvdWxkIGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UuCitHSVRfRElSPSQoZ2l0IHJldi1wYXJzZSAtcSAtLWdpdC1kaXIpIHx8IDo7CisKK2dldF9kZWZhdWx0X3JlbW90ZSAoKSB7CisJY3Vycl9icmFuY2g9JChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpCisJY3Vycl9icmFuY2g9IiR7Y3Vycl9icmFuY2gjcmVmcy9oZWFkcy99IgorCW9yaWdpbj0kKGdpdCBjb25maWcgLS1nZXQgImJyYW5jaC4kY3Vycl9icmFuY2gucmVtb3RlIikKKwllY2hvICR7b3JpZ2luOi1vcmlnaW59Cit9CisKK2dldF9yZW1vdGVfbWVyZ2VfYnJhbmNoICgpIHsKKwljYXNlICIkIyIgaW4KKwkwfDEpCisJICAgIG9yaWdpbj0iJDEiCisJICAgIGRlZmF1bHQ9JChnZXRfZGVmYXVsdF9yZW1vdGUpCisJICAgIHRlc3QgLXogIiRvcmlnaW4iICYmIG9yaWdpbj0kZGVmYXVsdAorCSAgICBjdXJyX2JyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkgJiYKKwkgICAgWyAiJG9yaWdpbiIgPSAiJGRlZmF1bHQiIF0gJiYKKwkgICAgZWNobyAkKGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUodXBzdHJlYW0pJyAkY3Vycl9icmFuY2gpCisJICAgIDs7CisJKikKKwkgICAgcmVwbz0kMQorCSAgICBzaGlmdAorCSAgICByZWY9JDEKKwkgICAgIyBGSVhNRTogSXQgc2hvdWxkIHJldHVybiB0aGUgdHJhY2tpbmcgYnJhbmNoCisJICAgICMgICAgICAgIEN1cnJlbnRseSBvbmx5IHdvcmtzIHdpdGggdGhlIGRlZmF1bHQgbWFwcGluZworCSAgICBjYXNlICIkcmVmIiBpbgorCSAgICArKikKKwkJcmVmPSQoZXhwciAieiRyZWYiIDogJ3orXCguKlwpJykKKwkJOzsKKwkgICAgZXNhYworCSAgICBleHByICJ6JHJlZiIgOiAnei4qOicgPi9kZXYvbnVsbCB8fCByZWY9IiR7cmVmfToiCisJICAgIHJlbW90ZT0kKGV4cHIgInokcmVmIiA6ICd6XChbXjpdKlwpOicpCisJICAgIGNhc2UgIiRyZW1vdGUiIGluCisJICAgICcnIHwgSEVBRCApIHJlbW90ZT1IRUFEIDs7CisJICAgIGhlYWRzLyopIHJlbW90ZT0ke3JlbW90ZSNoZWFkcy99IDs7CisJICAgIHJlZnMvaGVhZHMvKikgcmVtb3RlPSR7cmVtb3RlI3JlZnMvaGVhZHMvfSA7OworCSAgICByZWZzLyogfCB0YWdzLyogfCByZW1vdGVzLyogKSByZW1vdGU9CisJICAgIGVzYWMKKwkgICAgWyAtbiAiJHJlbW90ZSIgXSAmJiBjYXNlICIkcmVwbyIgaW4KKwkJLikKKwkJICAgIGVjaG8gInJlZnMvaGVhZHMvJHJlbW90ZSIKKwkJICAgIDs7CisJCSopCisJCSAgICBlY2hvICJyZWZzL3JlbW90ZXMvJHJlcG8vJHJlbW90ZSIKKwkJICAgIDs7CisJICAgIGVzYWMKKwllc2FjCit9CisKK2Vycm9yX29uX21pc3NpbmdfZGVmYXVsdF91cHN0cmVhbSAoKSB7CisJY21kPSIkMSIKKwlvcF90eXBlPSIkMiIKKwlvcF9wcmVwPSIkMyIKKwlleGFtcGxlPSIkNCIKKwlicmFuY2hfbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkKKwkjIElmIHRoZXJlJ3Mgb25seSBvbmUgcmVtb3RlLCB1c2UgdGhhdCBpbiB0aGUgc3VnZ2VzdGlvbgorCXJlbW90ZT0iPHJlbW90ZT4iCisJaWYgdGVzdCAkKGdpdCByZW1vdGUgfCB3YyAtbCkgPSAxCisJdGhlbgorCQlyZW1vdGU9JChnaXQgcmVtb3RlKQorCWZpCisKKwlpZiB0ZXN0IC16ICIkYnJhbmNoX25hbWUiCisJdGhlbgorCQllY2hvICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIFBsZWFzZSBzcGVjaWZ5IHdoaWNoCiticmFuY2ggeW91IHdhbnQgdG8gJG9wX3R5cGUgJG9wX3ByZXAuIFNlZSBnaXQtJHtjbWR9KDEpIGZvciBkZXRhaWxzLgorCisgICAgJGV4YW1wbGUKKyIKKwllbHNlCisJCWVjaG8gIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guCitQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gJG9wX3R5cGUgJG9wX3ByZXAuCitTZWUgZ2l0LSR7Y21kfSgxKSBmb3IgZGV0YWlscworCisgICAgJGV4YW1wbGUKKworSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6CisKKyAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSRyZW1vdGUvPGJyYW5jaD4gJHticmFuY2hfbmFtZSNyZWZzL2hlYWRzL30KKyIKKwlmaQorCWV4aXQgMQorfQpkaWZmIC0tZ2l0IGEvZ2l0LXF1aWx0aW1wb3J0LnNoIGIvZ2l0LXF1aWx0aW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZkM2E4OGQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcXVpbHRpbXBvcnQuc2gKQEAgLTAsMCArMSwxNTEgQEAKKyMhL2Jpbi9zaAorT1BUSU9OU19LRUVQREFTSERBU0g9CitPUFRJT05TX1NUVUNLTE9ORz0KK09QVElPTlNfU1BFQz0iXAorZ2l0IHF1aWx0aW1wb3J0IFtvcHRpb25zXQorLS0KK24sZHJ5LXJ1biAgICAgZHJ5IHJ1bgorYXV0aG9yPSAgICAgICBhdXRob3IgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyBmb3IgcGF0Y2hlcyB3aXRob3V0IGFueQorcGF0Y2hlcz0gICAgICBwYXRoIHRvIHRoZSBxdWlsdCBwYXRjaGVzCitzZXJpZXM9ICAgICAgIHBhdGggdG8gdGhlIHF1aWx0IHNlcmllcyBmaWxlCisiCitTVUJESVJFQ1RPUllfT049WWVzCisuIGdpdC1zaC1zZXR1cAorCitkcnlfcnVuPSIiCitxdWlsdF9hdXRob3I9IiIKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktLWF1dGhvcikKKwkJc2hpZnQKKwkJcXVpbHRfYXV0aG9yPSIkMSIKKwkJOzsKKwktbnwtLWRyeS1ydW4pCisJCWRyeV9ydW49MQorCQk7OworCS0tcGF0Y2hlcykKKwkJc2hpZnQKKwkJUVVJTFRfUEFUQ0hFUz0iJDEiCisJCTs7CisJLS1zZXJpZXMpCisJCXNoaWZ0CisJCVFVSUxUX1NFUklFUz0iJDEiCisJCTs7CisJLS0pCisJCXNoaWZ0CisJCWJyZWFrOzsKKwkqKQorCQl1c2FnZQorCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCisjIFF1aWx0IEF1dGhvcgoraWYgWyAtbiAiJHF1aWx0X2F1dGhvciIgXSA7IHRoZW4KKwlxdWlsdF9hdXRob3JfbmFtZT0kKGV4cHIgInokcXVpbHRfYXV0aG9yIiA6ICd6XCguKlteIF1cKSAqPC4qJykgJiYKKwlxdWlsdF9hdXRob3JfZW1haWw9JChleHByICJ6JHF1aWx0X2F1dGhvciIgOiAnLio8XChbXj5dKlwpJykgJiYKKwl0ZXN0ICcnICE9ICIkcXVpbHRfYXV0aG9yX25hbWUiICYmCisJdGVzdCAnJyAhPSAiJHF1aWx0X2F1dGhvcl9lbWFpbCIgfHwKKwlkaWUgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCitmaQorCisjIFF1aWx0IHBhdGNoIGRpcmVjdG9yeQorOiAke1FVSUxUX1BBVENIRVM6PXBhdGNoZXN9CitpZiAhIFsgLWQgIiRRVUlMVF9QQVRDSEVTIiBdIDsgdGhlbgorCWVjaG8gIlRoZSBcIiRRVUlMVF9QQVRDSEVTXCIgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0LiIKKwlleGl0IDEKK2ZpCisKKyMgUXVpbHQgc2VyaWVzIGZpbGUKKzogJHtRVUlMVF9TRVJJRVM6PSRRVUlMVF9QQVRDSEVTL3Nlcmllc30KK2lmICEgWyAtZSAiJFFVSUxUX1NFUklFUyIgXSA7IHRoZW4KKwllY2hvICJUaGUgXCIkUVVJTFRfU0VSSUVTXCIgZmlsZSBkb2VzIG5vdCBleGlzdC4iCisJZXhpdCAxCitmaQorCisjIFRlbXBvcmFyeSBkaXJlY3RvcmllcwordG1wX2Rpcj0iJEdJVF9ESVIiL3JlYmFzZS1hcHBseQordG1wX21zZz0iJHRtcF9kaXIvbXNnIgordG1wX3BhdGNoPSIkdG1wX2Rpci9wYXRjaCIKK3RtcF9pbmZvPSIkdG1wX2Rpci9pbmZvIgorCisKKyMgRmluZCB0aGUgaW5pdGlhbCBjb21taXQKK2NvbW1pdD0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKworbWtkaXIgJHRtcF9kaXIgfHwgZXhpdCAyCit3aGlsZSByZWFkIHBhdGNoX25hbWUgbGV2ZWwgZ2FyYmFnZSA8JjMKK2RvCisJY2FzZSAiJHBhdGNoX25hbWUiIGluICcnfCcjJyopIGNvbnRpbnVlOzsgZXNhYworCWNhc2UgIiRsZXZlbCIgaW4KKwktcCopCTs7CisJJyd8JyMnKikKKwkJbGV2ZWw9OzsKKwkqKQorCQllY2hvICJ1bmFibGUgdG8gcGFyc2UgcGF0Y2ggbGV2ZWwsIGlnbm9yaW5nIGl0LiIKKwkJbGV2ZWw9OzsKKwllc2FjCisJY2FzZSAiJGdhcmJhZ2UiIGluCisJJyd8JyMnKik7OworCSopCisJCWVjaG8gInRyYWlsaW5nIGdhcmJhZ2UgZm91bmQgaW4gc2VyaWVzIGZpbGU6ICRnYXJiYWdlIgorCQlleGl0IDE7OworCWVzYWMKKwlpZiAhIFsgLWYgIiRRVUlMVF9QQVRDSEVTLyRwYXRjaF9uYW1lIiBdIDsgdGhlbgorCQllY2hvICIkcGF0Y2hfbmFtZSBkb2Vzbid0IGV4aXN0LiBTa2lwcGluZy4iCisJCWNvbnRpbnVlCisJZmkKKwllY2hvICRwYXRjaF9uYW1lCisJZ2l0IG1haWxpbmZvICIkdG1wX21zZyIgIiR0bXBfcGF0Y2giIFwKKwkJPCIkUVVJTFRfUEFUQ0hFUy8kcGF0Y2hfbmFtZSIgPiIkdG1wX2luZm8iIHx8IGV4aXQgMworCXRlc3QgLXMgIiR0bXBfcGF0Y2giIHx8IHsKKwkJZWNobyAiUGF0Y2ggaXMgZW1wdHkuICBXYXMgaXQgc3BsaXQgd3Jvbmc/IgorCQlleGl0IDEKKwl9CisKKwkjIFBhcnNlIHRoZSBhdXRob3IgaW5mb3JtYXRpb24KKwlHSVRfQVVUSE9SX05BTUU9JChzZWQgLW5lICdzL0F1dGhvcjogLy9wJyAiJHRtcF9pbmZvIikKKwlHSVRfQVVUSE9SX0VNQUlMPSQoc2VkIC1uZSAncy9FbWFpbDogLy9wJyAiJHRtcF9pbmZvIikKKwlleHBvcnQgR0lUX0FVVEhPUl9OQU1FIEdJVF9BVVRIT1JfRU1BSUwKKwl3aGlsZSB0ZXN0IC16ICIkR0lUX0FVVEhPUl9FTUFJTCIgJiYgdGVzdCAteiAiJEdJVF9BVVRIT1JfTkFNRSIgOyBkbworCQlpZiBbIC1uICIkcXVpbHRfYXV0aG9yIiBdIDsgdGhlbgorCQkJR0lUX0FVVEhPUl9OQU1FPSIkcXVpbHRfYXV0aG9yX25hbWUiOworCQkJR0lUX0FVVEhPUl9FTUFJTD0iJHF1aWx0X2F1dGhvcl9lbWFpbCI7CisJCWVsaWYgWyAtbiAiJGRyeV9ydW4iIF07IHRoZW4KKwkJCWVjaG8gIk5vIGF1dGhvciBmb3VuZCBpbiAkcGF0Y2hfbmFtZSIgPiYyOworCQkJR0lUX0FVVEhPUl9OQU1FPSJkcnktcnVuLW5vdC1mb3VuZCI7CisJCQlHSVRfQVVUSE9SX0VNQUlMPSJkcnktcnVuLW5vdC1mb3VuZCI7CisJCWVsc2UKKwkJCWVjaG8gIk5vIGF1dGhvciBmb3VuZCBpbiAkcGF0Y2hfbmFtZSIgPiYyOworCQkJZWNobyAiLS0tIgorCQkJY2F0ICR0bXBfbXNnCisJCQlwcmludGYgIkF1dGhvcjogIjsKKwkJCXJlYWQgcGF0Y2hfYXV0aG9yCisKKwkJCWVjaG8gIiRwYXRjaF9hdXRob3IiCisKKwkJCXBhdGNoX2F1dGhvcl9uYW1lPSQoZXhwciAieiRwYXRjaF9hdXRob3IiIDogJ3pcKC4qW14gXVwpICo8LionKSAmJgorCQkJcGF0Y2hfYXV0aG9yX2VtYWlsPSQoZXhwciAieiRwYXRjaF9hdXRob3IiIDogJy4qPFwoW14+XSpcKScpICYmCisJCQl0ZXN0ICcnICE9ICIkcGF0Y2hfYXV0aG9yX25hbWUiICYmCisJCQl0ZXN0ICcnICE9ICIkcGF0Y2hfYXV0aG9yX2VtYWlsIiAmJgorCQkJR0lUX0FVVEhPUl9OQU1FPSIkcGF0Y2hfYXV0aG9yX25hbWUiICYmCisJCQlHSVRfQVVUSE9SX0VNQUlMPSIkcGF0Y2hfYXV0aG9yX2VtYWlsIgorCQlmaQorCWRvbmUKKwlHSVRfQVVUSE9SX0RBVEU9JChzZWQgLW5lICdzL0RhdGU6IC8vcCcgIiR0bXBfaW5mbyIpCisJU1VCSkVDVD0kKHNlZCAtbmUgJ3MvU3ViamVjdDogLy9wJyAiJHRtcF9pbmZvIikKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIFNVQkpFQ1QKKwlpZiBbIC16ICIkU1VCSkVDVCIgXSA7IHRoZW4KKwkJU1VCSkVDVD0kKGVjaG8gJHBhdGNoX25hbWUgfCBzZWQgLWUgJ3MvLnBhdGNoJC8vJykKKwlmaQorCisJaWYgWyAteiAiJGRyeV9ydW4iIF0gOyB0aGVuCisJCWdpdCBhcHBseSAtLWluZGV4IC1DMSAke2xldmVsOisiJGxldmVsIn0gIiR0bXBfcGF0Y2giICYmCisJCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJY29tbWl0PSQoIChlY2hvICIkU1VCSkVDVCI7IGVjaG87IGNhdCAiJHRtcF9tc2ciKSB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSAtcCAkY29tbWl0KSAmJgorCQlnaXQgdXBkYXRlLXJlZiAtbSAicXVpbHRpbXBvcnQ6ICRwYXRjaF9uYW1lIiBIRUFEICRjb21taXQgfHwgZXhpdCA0CisJZmkKK2RvbmUgMzwiJFFVSUxUX1NFUklFUyIKK3JtIC1yZiAkdG1wX2RpciB8fCBleGl0IDUKZGlmZiAtLWdpdCBhL2dpdC1yZWJhc2UtLWFtLnNoIGIvZ2l0LXJlYmFzZS0tYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlODk4YgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1yZWJhc2UtLWFtLnNoCkBAIC0wLDAgKzEsMTAxIEBACisjIFRoaXMgc2hlbGwgc2NyaXB0IGZyYWdtZW50IGlzIHNvdXJjZWQgYnkgZ2l0LXJlYmFzZSB0byBpbXBsZW1lbnQKKyMgaXRzIGRlZmF1bHQsIGZhc3QsIHBhdGNoLWJhc2VkLCBub24taW50ZXJhY3RpdmUgbW9kZS4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEp1bmlvIEMgSGFtYW5vLgorIworCisjIFRoZSB3aG9sZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgaXMgcnVuIGJ5IGRvdC1zb3VyY2luZyBpdCBmcm9tCisjIGluc2lkZSBhIHNoZWxsIGZ1bmN0aW9uLiAgSXQgdXNlZCB0byBiZSB0aGF0ICJyZXR1cm4icyB3ZSBzZWUKKyMgYmVsb3cgd2VyZSBub3QgaW5zaWRlIGFueSBmdW5jdGlvbiwgYW5kIGV4cGVjdGVkIHRvIHJldHVybgorIyB0byB0aGUgZnVuY3Rpb24gdGhhdCBkb3Qtc291cmNlZCB1cy4KKyMKKyMgSG93ZXZlciwgRnJlZUJTRCAvYmluL3NoIG1pc2JlaGF2ZXMgb24gc3VjaCBhIGNvbnN0cnVjdCBhbmQKKyMgY29udGludWVzIHRvIHJ1biB0aGUgc3RhdGVtZW50cyB0aGF0IGZvbGxvdyBzdWNoIGEgInJldHVybiIuCisjIEFzIGEgd29yay1hcm91bmQsIHdlIGludHJvZHVjZSBhbiBleHRyYSBsYXllciBvZiBhIGZ1bmN0aW9uCisjIGhlcmUsIGFuZCBpbW1lZGlhdGVseSBjYWxsIGl0IGFmdGVyIGRlZmluaW5nIGl0LgorZ2l0X3JlYmFzZV9fYW0gKCkgeworCitjYXNlICIkYWN0aW9uIiBpbgorY29udGludWUpCisJZ2l0IGFtIC0tcmVzb2x2ZWQgLS1yZXNvbHZlbXNnPSIkcmVzb2x2ZW1zZyIgXAorCQkke2dwZ19zaWduX29wdDorIiRncGdfc2lnbl9vcHQifSAmJgorCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCisJcmV0dXJuCisJOzsKK3NraXApCisJZ2l0IGFtIC0tc2tpcCAtLXJlc29sdmVtc2c9IiRyZXNvbHZlbXNnIiAmJgorCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCisJcmV0dXJuCisJOzsKK2VzYWMKKworaWYgdGVzdCAteiAiJHJlYmFzZV9yb290IgorCSMgdGhpcyBpcyBub3cgZXF1aXZhbGVudCB0byAhIC16ICIkdXBzdHJlYW0iCit0aGVuCisJcmV2aXNpb25zPSR1cHN0cmVhbS4uLiRvcmlnX2hlYWQKK2Vsc2UKKwlyZXZpc2lvbnM9JG9udG8uLi4kb3JpZ19oZWFkCitmaQorCityZXQ9MAoraWYgdGVzdCAtbiAiJGtlZXBfZW1wdHkiCit0aGVuCisJIyB3ZSBoYXZlIHRvIGRvIHRoaXMgdGhlIGhhcmQgd2F5LiAgZ2l0IGZvcm1hdC1wYXRjaCBjb21wbGV0ZWx5IHNxdWFzaGVzCisJIyBlbXB0eSBjb21taXRzIGFuZCBldmVuIGlmIGl0IGRpZG4ndCB0aGUgZm9ybWF0IGRvZXNuJ3QgcmVhbGx5IGxlbmQKKwkjIGl0c2VsZiB3ZWxsIHRvIHJlY29yZGluZyBlbXB0eSBwYXRjaGVzLiAgZm9ydHVuYXRlbHksIGNoZXJyeS1waWNrCisJIyBtYWtlcyB0aGlzIGVhc3kKKwlnaXQgY2hlcnJ5LXBpY2sgJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gLS1hbGxvdy1lbXB0eSBcCisJCS0tcmlnaHQtb25seSAiJHJldmlzaW9ucyIgXAorCQkke3Jlc3RyaWN0X3JldmlzaW9uK14kcmVzdHJpY3RfcmV2aXNpb259CisJcmV0PSQ/CitlbHNlCisJcm0gLWYgIiRHSVRfRElSL3JlYmFzZWQtcGF0Y2hlcyIKKworCWdpdCBmb3JtYXQtcGF0Y2ggLWsgLS1zdGRvdXQgLS1mdWxsLWluZGV4IC0tY2hlcnJ5LXBpY2sgLS1yaWdodC1vbmx5IFwKKwkJLS1zcmMtcHJlZml4PWEvIC0tZHN0LXByZWZpeD1iLyAtLW5vLXJlbmFtZXMgLS1uby1jb3Zlci1sZXR0ZXIgXAorCQkiJHJldmlzaW9ucyIgJHtyZXN0cmljdF9yZXZpc2lvbiteJHJlc3RyaWN0X3JldmlzaW9ufSBcCisJCT4iJEdJVF9ESVIvcmViYXNlZC1wYXRjaGVzIgorCXJldD0kPworCisJaWYgdGVzdCAwICE9ICRyZXQKKwl0aGVuCisJCXJtIC1mICIkR0lUX0RJUi9yZWJhc2VkLXBhdGNoZXMiCisJCWNhc2UgIiRoZWFkX25hbWUiIGluCisJCXJlZnMvaGVhZHMvKikKKwkJCWdpdCBjaGVja291dCAtcSAiJGhlYWRfbmFtZSIKKwkJCTs7CisJCSopCisJCQlnaXQgY2hlY2tvdXQgLXEgIiRvcmlnX2hlYWQiCisJCQk7OworCQllc2FjCisKKwkJY2F0ID4mMiA8PC1FT0YKKworCQlnaXQgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgcHJlcGFyaW5nIHRoZSBwYXRjaGVzIHRvIHJlcGxheQorCQl0aGVzZSByZXZpc2lvbnM6CisKKwkJICAgICRyZXZpc2lvbnMKKworCQlBcyBhIHJlc3VsdCwgZ2l0IGNhbm5vdCByZWJhc2UgdGhlbS4KKwkJRU9GCisJCXJldHVybiAkcmV0CisJZmkKKworCWdpdCBhbSAkZ2l0X2FtX29wdCAtLXJlYmFzaW5nIC0tcmVzb2x2ZW1zZz0iJHJlc29sdmVtc2ciIFwKKwkJJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gPCIkR0lUX0RJUi9yZWJhc2VkLXBhdGNoZXMiCisJcmV0PSQ/CisKKwlybSAtZiAiJEdJVF9ESVIvcmViYXNlZC1wYXRjaGVzIgorZmkKKworaWYgdGVzdCAwICE9ICRyZXQKK3RoZW4KKwl0ZXN0IC1kICIkc3RhdGVfZGlyIiAmJiB3cml0ZV9iYXNpY19zdGF0ZQorCXJldHVybiAkcmV0CitmaQorCittb3ZlX3RvX29yaWdpbmFsX2JyYW5jaAorCit9CisjIC4uLiBhbmQgdGhlbiB3ZSBjYWxsIHRoZSB3aG9sZSB0aGluZy4KK2dpdF9yZWJhc2VfX2FtCmRpZmYgLS1naXQgYS9naXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaCBiL2dpdC1yZWJhc2UtLWludGVyYWN0aXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NWMwNmUKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcmViYXNlLS1pbnRlcmFjdGl2ZS5zaApAQCAtMCwwICsxLDEyODggQEAKKyMgVGhpcyBzaGVsbCBzY3JpcHQgZnJhZ21lbnQgaXMgc291cmNlZCBieSBnaXQtcmViYXNlIHRvIGltcGxlbWVudAorIyBpdHMgaW50ZXJhY3RpdmUgbW9kZS4gICJnaXQgcmViYXNlIC0taW50ZXJhY3RpdmUiIG1ha2VzIGl0IGVhc3kKKyMgdG8gZml4IHVwIGNvbW1pdHMgaW4gdGhlIG1pZGRsZSBvZiBhIHNlcmllcyBhbmQgcmVhcnJhbmdlIGNvbW1pdHMuCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisjIFRoZSBvcmlnaW5hbCBpZGVhIGNvbWVzIGZyb20gRXJpYyBXLiBCaWVkZXJtYW4sIGluCisjIGh0dHA6Ly9hcnRpY2xlLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMjI0MDcKKyMKKyMgVGhlIGZpbGUgY29udGFpbmluZyByZWJhc2UgY29tbWFuZHMsIGNvbW1lbnRzLCBhbmQgZW1wdHkgbGluZXMuCisjIFRoaXMgZmlsZSBpcyBjcmVhdGVkIGJ5ICJnaXQgcmViYXNlIC1pIiB0aGVuIGVkaXRlZCBieSB0aGUgdXNlci4gIEFzCisjIHRoZSBsaW5lcyBhcmUgcHJvY2Vzc2VkLCB0aGV5IGFyZSByZW1vdmVkIGZyb20gdGhlIGZyb250IG9mIHRoaXMKKyMgZmlsZSBhbmQgd3JpdHRlbiB0byB0aGUgdGFpbCBvZiAkZG9uZS4KK3RvZG89IiRzdGF0ZV9kaXIiL2dpdC1yZWJhc2UtdG9kbworCisjIFRoZSByZWJhc2UgY29tbWFuZCBsaW5lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZC4gIEEgbGluZQorIyBpcyBtb3ZlZCBoZXJlIHdoZW4gaXQgaXMgZmlyc3QgaGFuZGxlZCwgYmVmb3JlIGFueSBhc3NvY2lhdGVkIHVzZXIKKyMgYWN0aW9ucy4KK2RvbmU9IiRzdGF0ZV9kaXIiL2RvbmUKKworIyBUaGUgY29tbWl0IG1lc3NhZ2UgdGhhdCBpcyBwbGFubmVkIHRvIGJlIHVzZWQgZm9yIGFueSBjaGFuZ2VzIHRoYXQKKyMgbmVlZCB0byBiZSBjb21taXR0ZWQgZm9sbG93aW5nIGEgdXNlciBpbnRlcmFjdGlvbi4KK21zZz0iJHN0YXRlX2RpciIvbWVzc2FnZQorCisjIFRoZSBmaWxlIGludG8gd2hpY2ggaXMgYWNjdW11bGF0ZWQgdGhlIHN1Z2dlc3RlZCBjb21taXQgbWVzc2FnZSBmb3IKKyMgc3F1YXNoL2ZpeHVwIGNvbW1hbmRzLiAgV2hlbiB0aGUgZmlyc3Qgb2YgYSBzZXJpZXMgb2Ygc3F1YXNoL2ZpeHVwcworIyBpcyBzZWVuLCB0aGUgZmlsZSBpcyBjcmVhdGVkIGFuZCB0aGUgY29tbWl0IG1lc3NhZ2UgZnJvbSB0aGUKKyMgcHJldmlvdXMgY29tbWl0IGFuZCBmcm9tIHRoZSBmaXJzdCBzcXVhc2gvZml4dXAgY29tbWl0IGFyZSB3cml0dGVuCisjIHRvIGl0LiAgVGhlIGNvbW1pdCBtZXNzYWdlIGZvciBlYWNoIHN1YnNlcXVlbnQgc3F1YXNoL2ZpeHVwIGNvbW1pdAorIyBpcyBhcHBlbmRlZCB0byB0aGUgZmlsZSBhcyBpdCBpcyBwcm9jZXNzZWQuCisjCisjIFRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmaWxlIGlzIG9mIHRoZSBmb3JtCisjICAgICAjIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4KKyMgd2hlcmUgJGNvdW50IGlzIHRoZSBudW1iZXIgb2YgY29tbWl0cyB3aG9zZSBtZXNzYWdlcyBoYXZlIGJlZW4KKyMgd3JpdHRlbiB0byB0aGUgZmlsZSBzbyBmYXIgKGluY2x1ZGluZyB0aGUgaW5pdGlhbCAicGljayIgY29tbWl0KS4KKyMgRWFjaCB0aW1lIHRoYXQgYSBjb21taXQgbWVzc2FnZSBpcyBwcm9jZXNzZWQsIHRoaXMgbGluZSBpcyByZWFkIGFuZAorIyB1cGRhdGVkLiAgSXQgaXMgZGVsZXRlZCBqdXN0IGJlZm9yZSB0aGUgY29tYmluZWQgY29tbWl0IGlzIG1hZGUuCitzcXVhc2hfbXNnPSIkc3RhdGVfZGlyIi9tZXNzYWdlLXNxdWFzaAorCisjIElmIHRoZSBjdXJyZW50IHNlcmllcyBvZiBzcXVhc2gvZml4dXBzIGhhcyBub3QgeWV0IGluY2x1ZGVkIGEgc3F1YXNoCisjIGNvbW1hbmQsIHRoZW4gdGhpcyBmaWxlIGV4aXN0cyBhbmQgaG9sZHMgdGhlIGNvbW1pdCBtZXNzYWdlIG9mIHRoZQorIyBvcmlnaW5hbCAicGljayIgY29tbWl0LiAgKElmIHRoZSBzZXJpZXMgZW5kcyB3aXRob3V0IGEgInNxdWFzaCIKKyMgY29tbWFuZCwgdGhlbiB0aGlzIGNhbiBiZSB1c2VkIGFzIHRoZSBjb21taXQgbWVzc2FnZSBvZiB0aGUgY29tYmluZWQKKyMgY29tbWl0IHdpdGhvdXQgb3BlbmluZyB0aGUgZWRpdG9yLikKK2ZpeHVwX21zZz0iJHN0YXRlX2RpciIvbWVzc2FnZS1maXh1cAorCisjICRyZXdyaXR0ZW4gaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkgY29udGFpbmluZyBmaWxlcyBmb3IgZWFjaAorIyBjb21taXQgdGhhdCBpcyByZWFjaGFibGUgYnkgYXQgbGVhc3Qgb25lIG1lcmdlIGJhc2Ugb2YgJGhlYWQgYW5kCisjICR1cHN0cmVhbS4gVGhleSBhcmUgbm90IG5lY2Vzc2FyaWx5IHJld3JpdHRlbiwgYnV0IHRoZWlyIGNoaWxkcmVuCisjIG1pZ2h0IGJlLiAgVGhpcyBlbnN1cmVzIHRoYXQgY29tbWl0cyBvbiBtZXJnZWQsIGJ1dCBvdGhlcndpc2UKKyMgdW5yZWxhdGVkIHNpZGUgYnJhbmNoZXMgYXJlIGxlZnQgYWxvbmUuIChUaGluayAiWCIgaW4gdGhlIG1hbiBwYWdlJ3MKKyMgZXhhbXBsZS4pCityZXdyaXR0ZW49IiRzdGF0ZV9kaXIiL3Jld3JpdHRlbgorCitkcm9wcGVkPSIkc3RhdGVfZGlyIi9kcm9wcGVkCisKK2VuZD0iJHN0YXRlX2RpciIvZW5kCittc2dudW09IiRzdGF0ZV9kaXIiL21zZ251bQorCisjIEEgc2NyaXB0IHRvIHNldCB0aGUgR0lUX0FVVEhPUl9OQU1FLCBHSVRfQVVUSE9SX0VNQUlMLCBhbmQKKyMgR0lUX0FVVEhPUl9EQVRFIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgY29tbWl0IHRoYXQgaXMgY3VycmVudGx5CisjIGJlaW5nIHJlYmFzZWQuCithdXRob3Jfc2NyaXB0PSIkc3RhdGVfZGlyIi9hdXRob3Itc2NyaXB0CisKKyMgV2hlbiBhbiAiZWRpdCIgcmViYXNlIGNvbW1hbmQgaXMgYmVpbmcgcHJvY2Vzc2VkLCB0aGUgU0hBMSBvZiB0aGUKKyMgY29tbWl0IHRvIGJlIGVkaXRlZCBpcyByZWNvcmRlZCBpbiB0aGlzIGZpbGUuICBXaGVuICJnaXQgcmViYXNlCisjIC0tY29udGludWUiIGlzIGV4ZWN1dGVkLCBpZiB0aGVyZSBhcmUgYW55IHN0YWdlZCBjaGFuZ2VzIHRoZW4gdGhleQorIyB3aWxsIGJlIGFtZW5kZWQgdG8gdGhlIEhFQUQgY29tbWl0LCBidXQgb25seSBwcm92aWRlZCB0aGUgSEVBRAorIyBjb21taXQgaXMgc3RpbGwgdGhlIGNvbW1pdCB0byBiZSBlZGl0ZWQuICBXaGVuIGFueSBvdGhlciByZWJhc2UKKyMgY29tbWFuZCBpcyBwcm9jZXNzZWQsIHRoaXMgZmlsZSBpcyBkZWxldGVkLgorYW1lbmQ9IiRzdGF0ZV9kaXIiL2FtZW5kCisKKyMgRm9yIHRoZSBwb3N0LXJld3JpdGUgaG9vaywgd2UgbWFrZSBhIGxpc3Qgb2YgcmV3cml0dGVuIGNvbW1pdHMgYW5kCisjIHRoZWlyIG5ldyBzaGExcy4gIFRoZSByZXdyaXR0ZW4tcGVuZGluZyBsaXN0IGtlZXBzIHRoZSBzaGExcyBvZgorIyBjb21taXRzIHRoYXQgaGF2ZSBiZWVuIHByb2Nlc3NlZCwgYnV0IG5vdCBjb21taXR0ZWQgeWV0LAorIyBlLmcuIGJlY2F1c2UgdGhleSBhcmUgd2FpdGluZyBmb3IgYSAnc3F1YXNoJyBjb21tYW5kLgorcmV3cml0dGVuX2xpc3Q9IiRzdGF0ZV9kaXIiL3Jld3JpdHRlbi1saXN0CityZXdyaXR0ZW5fcGVuZGluZz0iJHN0YXRlX2RpciIvcmV3cml0dGVuLXBlbmRpbmcKKworc3RyYXRlZ3lfYXJncz0KK2lmIHRlc3QgLW4gIiRkb19tZXJnZSIKK3RoZW4KKwlzdHJhdGVneV9hcmdzPSR7c3RyYXRlZ3k6Ky0tc3RyYXRlZ3k9JHN0cmF0ZWd5fQorCWV2YWwgJworCQlmb3Igc3RyYXRlZ3lfb3B0IGluICciJHN0cmF0ZWd5X29wdHMiJworCQlkbworCQkJc3RyYXRlZ3lfYXJncz0iJHN0cmF0ZWd5X2FyZ3MgLVgkKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJHtzdHJhdGVneV9vcHQjLS19IikiCisJCWRvbmUKKwknCitmaQorCitHSVRfQ0hFUlJZX1BJQ0tfSEVMUD0iJHJlc29sdmVtc2ciCitleHBvcnQgR0lUX0NIRVJSWV9QSUNLX0hFTFAKKworY29tbWVudF9jaGFyPSQoZ2l0IGNvbmZpZyAtLWdldCBjb3JlLmNvbW1lbnRjaGFyIDI+L2Rldi9udWxsIHwgY3V0IC1jMSkKKzogJHtjb21tZW50X2NoYXI6PSN9CisKK3dhcm4gKCkgeworCXByaW50ZiAnJXNcbicgIiQqIiA+JjIKK30KKworIyBPdXRwdXQgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB0aGUgc3BlY2lmaWVkIGNvbW1pdC4KK2NvbW1pdF9tZXNzYWdlICgpIHsKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICIkMSIgfCBzZWQgIjEsL14kL2QiCit9CisKK29yaWdfcmVmbG9nX2FjdGlvbj0iJEdJVF9SRUZMT0dfQUNUSU9OIgorCitjb21tZW50X2Zvcl9yZWZsb2cgKCkgeworCWNhc2UgIiRvcmlnX3JlZmxvZ19hY3Rpb24iIGluCisJJyd8cmViYXNlKikKKwkJR0lUX1JFRkxPR19BQ1RJT049InJlYmFzZSAtaSAoJDEpIgorCQlleHBvcnQgR0lUX1JFRkxPR19BQ1RJT04KKwkJOzsKKwllc2FjCit9CisKK2xhc3RfY291bnQ9CittYXJrX2FjdGlvbl9kb25lICgpIHsKKwlzZWQgLWUgMXEgPCAiJHRvZG8iID4+ICIkZG9uZSIKKwlzZWQgLWUgMWQgPCAiJHRvZG8iID4+ICIkdG9kbyIubmV3CisJbXYgLWYgIiR0b2RvIi5uZXcgIiR0b2RvIgorCW5ld19jb3VudD0kKGdpdCBzdHJpcHNwYWNlIC0tc3RyaXAtY29tbWVudHMgPCIkZG9uZSIgfCB3YyAtbCkKKwllY2hvICRuZXdfY291bnQgPiIkbXNnbnVtIgorCXRvdGFsPSQoKCRuZXdfY291bnQgKyAkKGdpdCBzdHJpcHNwYWNlIC0tc3RyaXAtY29tbWVudHMgPCIkdG9kbyIgfCB3YyAtbCkpKQorCWVjaG8gJHRvdGFsID4iJGVuZCIKKwlpZiB0ZXN0ICIkbGFzdF9jb3VudCIgIT0gIiRuZXdfY291bnQiCisJdGhlbgorCQlsYXN0X2NvdW50PSRuZXdfY291bnQKKwkJcHJpbnRmICJSZWJhc2luZyAoJWQvJWQpXHIiICRuZXdfY291bnQgJHRvdGFsCisJCXRlc3QgLXogIiR2ZXJib3NlIiB8fCBlY2hvCisJZmkKK30KKworIyBQdXQgdGhlIGxhc3QgYWN0aW9uIG1hcmtlZCBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRvZG8gbGlzdAorIyBhZ2Fpbi4gSWYgdGhlcmUgaGFzIG5vdCBiZWVuIGFuIGFjdGlvbiBtYXJrZWQgZG9uZSB5ZXQsIGxlYXZlIHRoZSBsaXN0IG9mCisjIGl0ZW1zIG9uIHRoZSB0b2RvIGxpc3QgdW5jaGFuZ2VkLgorcmVzY2hlZHVsZV9sYXN0X2FjdGlvbiAoKSB7CisJdGFpbCAtbiAxICIkZG9uZSIgfCBjYXQgLSAiJHRvZG8iID4iJHRvZG8iLm5ldworCXNlZCAtZSBcJGQgPCIkZG9uZSIgPiIkZG9uZSIubmV3CisJbXYgLWYgIiR0b2RvIi5uZXcgIiR0b2RvIgorCW12IC1mICIkZG9uZSIubmV3ICIkZG9uZSIKK30KKworYXBwZW5kX3RvZG9faGVscCAoKSB7CisJZ2l0IHN0cmlwc3BhY2UgLS1jb21tZW50LWxpbmVzID4+IiR0b2RvIiA8PFxFT0YKKworQ29tbWFuZHM6CisgcCwgcGljayA9IHVzZSBjb21taXQKKyByLCByZXdvcmQgPSB1c2UgY29tbWl0LCBidXQgZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UKKyBlLCBlZGl0ID0gdXNlIGNvbW1pdCwgYnV0IHN0b3AgZm9yIGFtZW5kaW5nCisgcywgc3F1YXNoID0gdXNlIGNvbW1pdCwgYnV0IG1lbGQgaW50byBwcmV2aW91cyBjb21taXQKKyBmLCBmaXh1cCA9IGxpa2UgInNxdWFzaCIsIGJ1dCBkaXNjYXJkIHRoaXMgY29tbWl0J3MgbG9nIG1lc3NhZ2UKKyB4LCBleGVjID0gcnVuIGNvbW1hbmQgKHRoZSByZXN0IG9mIHRoZSBsaW5lKSB1c2luZyBzaGVsbAorIGQsIGRyb3AgPSByZW1vdmUgY29tbWl0CisKK1RoZXNlIGxpbmVzIGNhbiBiZSByZS1vcmRlcmVkOyB0aGV5IGFyZSBleGVjdXRlZCBmcm9tIHRvcCB0byBib3R0b20uCisKK0VPRgorCWlmIHRlc3QgJChnZXRfbWlzc2luZ19jb21taXRfY2hlY2tfbGV2ZWwpID0gZXJyb3IKKwl0aGVuCisJCWdpdCBzdHJpcHNwYWNlIC0tY29tbWVudC1saW5lcyA+PiIkdG9kbyIgPDxcRU9GCitEbyBub3QgcmVtb3ZlIGFueSBsaW5lLiBVc2UgJ2Ryb3AnIGV4cGxpY2l0bHkgdG8gcmVtb3ZlIGEgY29tbWl0LgorRU9GCisJZWxzZQorCQlnaXQgc3RyaXBzcGFjZSAtLWNvbW1lbnQtbGluZXMgPj4iJHRvZG8iIDw8XEVPRgorSWYgeW91IHJlbW92ZSBhIGxpbmUgaGVyZSBUSEFUIENPTU1JVCBXSUxMIEJFIExPU1QuCitFT0YKKwlmaQorfQorCittYWtlX3BhdGNoICgpIHsKKwlzaGExX2FuZF9wYXJlbnRzPSIkKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLTEgIiQxIikiCisJY2FzZSAiJHNoYTFfYW5kX3BhcmVudHMiIGluCisJPyonICc/KicgJz8qKQorCQlnaXQgZGlmZiAtLWNjICRzaGExX2FuZF9wYXJlbnRzCisJCTs7CisJPyonICc/KikKKwkJZ2l0IGRpZmYtdHJlZSAtcCAiJDFeISIKKwkJOzsKKwkqKQorCQllY2hvICJSb290IGNvbW1pdCIKKwkJOzsKKwllc2FjID4gIiRzdGF0ZV9kaXIiL3BhdGNoCisJdGVzdCAtZiAiJG1zZyIgfHwKKwkJY29tbWl0X21lc3NhZ2UgIiQxIiA+ICIkbXNnIgorCXRlc3QgLWYgIiRhdXRob3Jfc2NyaXB0IiB8fAorCQlnZXRfYXV0aG9yX2lkZW50X2Zyb21fY29tbWl0ICIkMSIgPiAiJGF1dGhvcl9zY3JpcHQiCit9CisKK2RpZV93aXRoX3BhdGNoICgpIHsKKwllY2hvICIkMSIgPiAiJHN0YXRlX2RpciIvc3RvcHBlZC1zaGEKKwltYWtlX3BhdGNoICIkMSIKKwlnaXQgcmVyZXJlCisJZGllICIkMiIKK30KKworZXhpdF93aXRoX3BhdGNoICgpIHsKKwllY2hvICIkMSIgPiAiJHN0YXRlX2RpciIvc3RvcHBlZC1zaGEKKwltYWtlX3BhdGNoICQxCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4gIiRhbWVuZCIKKwlncGdfc2lnbl9vcHRfcXVvdGVkPSR7Z3BnX3NpZ25fb3B0OiskKGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSAiJGdwZ19zaWduX29wdCIpfQorCXdhcm4gIllvdSBjYW4gYW1lbmQgdGhlIGNvbW1pdCBub3csIHdpdGgiCisJd2FybgorCXdhcm4gIglnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWQiCisJd2FybgorCXdhcm4gIk9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMsIHJ1biIKKwl3YXJuCisJd2FybiAiCWdpdCByZWJhc2UgLS1jb250aW51ZSIKKwl3YXJuCisJZXhpdCAkMgorfQorCitkaWVfYWJvcnQgKCkgeworCXJtIC1yZiAiJHN0YXRlX2RpciIKKwlkaWUgIiQxIgorfQorCitoYXNfYWN0aW9uICgpIHsKKwl0ZXN0IC1uICIkKGdpdCBzdHJpcHNwYWNlIC0tc3RyaXAtY29tbWVudHMgPCIkMSIpIgorfQorCitpc19lbXB0eV9jb21taXQoKSB7CisJdHJlZT0kKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgIiQxIl57dHJlZX0gMj4vZGV2L251bGwgfHwKKwkJZGllICIkMTogbm90IGEgY29tbWl0IHRoYXQgY2FuIGJlIHBpY2tlZCIpCisJcHRyZWU9JChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICIkMSJeXnt0cmVlfSAyPi9kZXYvbnVsbCB8fAorCQlwdHJlZT00YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0KQorCXRlc3QgIiR0cmVlIiA9ICIkcHRyZWUiCit9CisKK2lzX21lcmdlX2NvbW1pdCgpCit7CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICIkMSJeMiA+L2Rldi9udWxsIDI+JjEKK30KKworIyBSdW4gY29tbWFuZCB3aXRoIEdJVF9BVVRIT1JfTkFNRSwgR0lUX0FVVEhPUl9FTUFJTCwgYW5kCisjIEdJVF9BVVRIT1JfREFURSBleHBvcnRlZCBmcm9tIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgorZG9fd2l0aF9hdXRob3IgKCkgeworCSgKKwkJZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMIEdJVF9BVVRIT1JfREFURQorCQkiJEAiCisJKQorfQorCitnaXRfc2VxdWVuY2VfZWRpdG9yICgpIHsKKwlpZiB0ZXN0IC16ICIkR0lUX1NFUVVFTkNFX0VESVRPUiIKKwl0aGVuCisJCUdJVF9TRVFVRU5DRV9FRElUT1I9IiQoZ2l0IGNvbmZpZyBzZXF1ZW5jZS5lZGl0b3IpIgorCQlpZiBbIC16ICIkR0lUX1NFUVVFTkNFX0VESVRPUiIgXQorCQl0aGVuCisJCQlHSVRfU0VRVUVOQ0VfRURJVE9SPSIkKGdpdCB2YXIgR0lUX0VESVRPUikiIHx8IHJldHVybiAkPworCQlmaQorCWZpCisKKwlldmFsICIkR0lUX1NFUVVFTkNFX0VESVRPUiIgJyIkQCInCit9CisKK3BpY2tfb25lICgpIHsKKwlmZj0tLWZmCisKKwljYXNlICIkMSIgaW4gLW4pIHNoYTE9JDI7IGZmPSA7OyAqKSBzaGExPSQxIDs7IGVzYWMKKwljYXNlICIkZm9yY2VfcmViYXNlIiBpbiAnJykgOzsgPyopIGZmPSA7OyBlc2FjCisJb3V0cHV0IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJHNoYTEgfHwgZGllICJJbnZhbGlkIGNvbW1pdCBuYW1lOiAkc2hhMSIKKworCWlmIGlzX2VtcHR5X2NvbW1pdCAiJHNoYTEiCisJdGhlbgorCQllbXB0eV9hcmdzPSItLWFsbG93LWVtcHR5IgorCWZpCisKKwl0ZXN0IC1kICIkcmV3cml0dGVuIiAmJgorCQlwaWNrX29uZV9wcmVzZXJ2aW5nX21lcmdlcyAiJEAiICYmIHJldHVybgorCW91dHB1dCBldmFsIGdpdCBjaGVycnktcGljayBcCisJCQkke2dwZ19zaWduX29wdDorJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRncGdfc2lnbl9vcHQiKX0gXAorCQkJIiRzdHJhdGVneV9hcmdzIiAkZW1wdHlfYXJncyAkZmYgIiRAIgorCisJIyBJZiBjaGVycnktcGljayBkaWVzIGl0IGxlYXZlcyB0aGUgdG8tYmUtcGlja2VkIGNvbW1pdCB1bnJlY29yZGVkLiBSZXNjaGVkdWxlCisJIyBwcmV2aW91cyB0YXNrIHNvIHRoaXMgY29tbWl0IGlzIG5vdCBsb3N0LgorCXJldD0kPworCWNhc2UgIiRyZXQiIGluIFswMV0pIDs7ICopIHJlc2NoZWR1bGVfbGFzdF9hY3Rpb24gOzsgZXNhYworCXJldHVybiAkcmV0Cit9CisKK3BpY2tfb25lX3ByZXNlcnZpbmdfbWVyZ2VzICgpIHsKKwlmYXN0X2ZvcndhcmQ9dAorCWNhc2UgIiQxIiBpbgorCS1uKQorCQlmYXN0X2ZvcndhcmQ9ZgorCQlzaGExPSQyCisJCTs7CisJKikKKwkJc2hhMT0kMQorCQk7OworCWVzYWMKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSAkc2hhMSkKKworCWlmIHRlc3QgLWYgIiRzdGF0ZV9kaXIiL2N1cnJlbnQtY29tbWl0CisJdGhlbgorCQlpZiB0ZXN0ICIkZmFzdF9mb3J3YXJkIiA9IHQKKwkJdGhlbgorCQkJd2hpbGUgcmVhZCBjdXJyZW50X2NvbW1pdAorCQkJZG8KKwkJCQlnaXQgcmV2LXBhcnNlIEhFQUQgPiAiJHJld3JpdHRlbiIvJGN1cnJlbnRfY29tbWl0CisJCQlkb25lIDwiJHN0YXRlX2RpciIvY3VycmVudC1jb21taXQKKwkJCXJtICIkc3RhdGVfZGlyIi9jdXJyZW50LWNvbW1pdCB8fAorCQkJZGllICJDYW5ub3Qgd3JpdGUgY3VycmVudCBjb21taXQncyByZXBsYWNlbWVudCBzaGExIgorCQlmaQorCWZpCisKKwllY2hvICRzaGExID4+ICIkc3RhdGVfZGlyIi9jdXJyZW50LWNvbW1pdAorCisJIyByZXdyaXRlIHBhcmVudHM7IGlmIG5vbmUgd2VyZSByZXdyaXR0ZW4sIHdlIGNhbiBmYXN0LWZvcndhcmQuCisJbmV3X3BhcmVudHM9CisJcGVuZD0iICQoZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtMSAkc2hhMSB8IGN1dCAtZCcgJyAtcyAtZjItKSIKKwlpZiB0ZXN0ICIkcGVuZCIgPSAiICIKKwl0aGVuCisJCXBlbmQ9IiByb290IgorCWZpCisJd2hpbGUgWyAiJHBlbmQiICE9ICIiIF0KKwlkbworCQlwPSQoZXhwciAiJHBlbmQiIDogJyBcKFteIF0qXCknKQorCQlwZW5kPSIke3BlbmQjICRwfSIKKworCQlpZiB0ZXN0IC1mICIkcmV3cml0dGVuIi8kcAorCQl0aGVuCisJCQluZXdfcD0kKGNhdCAiJHJld3JpdHRlbiIvJHApCisKKwkJCSMgSWYgdGhlIHRvZG8gcmVvcmRlcmVkIGNvbW1pdHMsIGFuZCBvdXIgcGFyZW50IGlzIG1hcmtlZCBmb3IKKwkJCSMgcmV3cml0aW5nLCBidXQgaGFzbid0IGJlZW4gZ290dGVuIHRvIHlldCwgYXNzdW1lIHRoZSB1c2VyIG1lYW50IHRvCisJCQkjIGRyb3AgaXQgb24gdG9wIG9mIHRoZSBjdXJyZW50IEhFQUQKKwkJCWlmIHRlc3QgLXogIiRuZXdfcCIKKwkJCXRoZW4KKwkJCQluZXdfcD0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkJCWZpCisKKwkJCXRlc3QgJHAgIT0gJG5ld19wICYmIGZhc3RfZm9yd2FyZD1mCisJCQljYXNlICIkbmV3X3BhcmVudHMiIGluCisJCQkqJG5ld19wKikKKwkJCQk7OyAjIGRvIG5vdGhpbmc7IHRoYXQgcGFyZW50IGlzIGFscmVhZHkgdGhlcmUKKwkJCSopCisJCQkJbmV3X3BhcmVudHM9IiRuZXdfcGFyZW50cyAkbmV3X3AiCisJCQkJOzsKKwkJCWVzYWMKKwkJZWxzZQorCQkJaWYgdGVzdCAtZiAiJGRyb3BwZWQiLyRwCisJCQl0aGVuCisJCQkJZmFzdF9mb3J3YXJkPWYKKwkJCQlyZXBsYWNlbWVudD0iJChjYXQgIiRkcm9wcGVkIi8kcCkiCisJCQkJdGVzdCAteiAiJHJlcGxhY2VtZW50IiAmJiByZXBsYWNlbWVudD1yb290CisJCQkJcGVuZD0iICRyZXBsYWNlbWVudCRwZW5kIgorCQkJZWxzZQorCQkJCW5ld19wYXJlbnRzPSIkbmV3X3BhcmVudHMgJHAiCisJCQlmaQorCQlmaQorCWRvbmUKKwljYXNlICRmYXN0X2ZvcndhcmQgaW4KKwl0KQorCQlvdXRwdXQgd2FybiAiRmFzdC1mb3J3YXJkIHRvICRzaGExIgorCQlvdXRwdXQgZ2l0IHJlc2V0IC0taGFyZCAkc2hhMSB8fAorCQkJZGllICJDYW5ub3QgZmFzdC1mb3J3YXJkIHRvICRzaGExIgorCQk7OworCWYpCisJCWZpcnN0X3BhcmVudD0kKGV4cHIgIiRuZXdfcGFyZW50cyIgOiAnIFwoW14gXSpcKScpCisKKwkJaWYgWyAiJDEiICE9ICItbiIgXQorCQl0aGVuCisJCQkjIGRldGFjaCBIRUFEIHRvIGN1cnJlbnQgcGFyZW50CisJCQlvdXRwdXQgZ2l0IGNoZWNrb3V0ICRmaXJzdF9wYXJlbnQgMj4gL2Rldi9udWxsIHx8CisJCQkJZGllICJDYW5ub3QgbW92ZSBIRUFEIHRvICRmaXJzdF9wYXJlbnQiCisJCWZpCisKKwkJY2FzZSAiJG5ld19wYXJlbnRzIiBpbgorCQknICcqJyAnKikKKwkJCXRlc3QgImEkMSIgPSBhLW4gJiYgZGllICJSZWZ1c2luZyB0byBzcXVhc2ggYSBtZXJnZTogJHNoYTEiCisKKwkJCSMgcmVkbyBtZXJnZQorCQkJYXV0aG9yX3NjcmlwdF9jb250ZW50PSQoZ2V0X2F1dGhvcl9pZGVudF9mcm9tX2NvbW1pdCAkc2hhMSkKKwkJCWV2YWwgIiRhdXRob3Jfc2NyaXB0X2NvbnRlbnQiCisJCQltc2dfY29udGVudD0iJChjb21taXRfbWVzc2FnZSAkc2hhMSkiCisJCQkjIE5vIHBvaW50IGluIG1lcmdpbmcgdGhlIGZpcnN0IHBhcmVudCwgdGhhdCdzIEhFQUQKKwkJCW5ld19wYXJlbnRzPSR7bmV3X3BhcmVudHMjICRmaXJzdF9wYXJlbnR9CisJCQltZXJnZV9hcmdzPSItLW5vLWxvZyAtLW5vLWZmIgorCQkJaWYgISBkb193aXRoX2F1dGhvciBvdXRwdXQgZXZhbCBcCisJCQknZ2l0IG1lcmdlICR7Z3BnX3NpZ25fb3B0OisiJGdwZ19zaWduX29wdCJ9IFwKKwkJCQkkbWVyZ2VfYXJncyAkc3RyYXRlZ3lfYXJncyAtbSAiJG1zZ19jb250ZW50IiAkbmV3X3BhcmVudHMnCisJCQl0aGVuCisJCQkJcHJpbnRmICIlc1xuIiAiJG1zZ19jb250ZW50IiA+ICIkR0lUX0RJUiIvTUVSR0VfTVNHCisJCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIkVycm9yIHJlZG9pbmcgbWVyZ2UgJHNoYTEiCisJCQlmaQorCQkJZWNobyAiJHNoYTEgJChnaXQgcmV2LXBhcnNlIEhFQUReMCkiID4+ICIkcmV3cml0dGVuX2xpc3QiCisJCQk7OworCQkqKQorCQkJb3V0cHV0IGV2YWwgZ2l0IGNoZXJyeS1waWNrIFwKKwkJCQkke2dwZ19zaWduX29wdDorJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRncGdfc2lnbl9vcHQiKX0gXAorCQkJCSIkc3RyYXRlZ3lfYXJncyIgIiRAIiB8fAorCQkJCWRpZV93aXRoX3BhdGNoICRzaGExICJDb3VsZCBub3QgcGljayAkc2hhMSIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwllc2FjCit9CisKK250aF9zdHJpbmcgKCkgeworCWNhc2UgIiQxIiBpbgorCSoxWzAtOV18KlswNC05XSkgZWNobyAiJDEidGg7OworCSoxKSBlY2hvICIkMSJzdDs7CisJKjIpIGVjaG8gIiQxIm5kOzsKKwkqMykgZWNobyAiJDEicmQ7OworCWVzYWMKK30KKwordXBkYXRlX3NxdWFzaF9tZXNzYWdlcyAoKSB7CisJaWYgdGVzdCAtZiAiJHNxdWFzaF9tc2ciOyB0aGVuCisJCW12ICIkc3F1YXNoX21zZyIgIiRzcXVhc2hfbXNnIi5iYWsgfHwgZXhpdAorCQljb3VudD0kKCgkKHNlZCAtbiBcCisJCQktZSAiMXMvXi4gVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIFwoLipcKSBjb21taXRzXC4vXDEvcCIgXAorCQkJLWUgInEiIDwgIiRzcXVhc2hfbXNnIi5iYWspKzEpKQorCQl7CisJCQlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAkY291bnQgY29tbWl0cy4iCisJCQlzZWQgLWUgMWQgLWUgJzIsL14uL3sKKwkJCQkvXiQvZAorCQkJfScgPCIkc3F1YXNoX21zZyIuYmFrCisJCX0gPiIkc3F1YXNoX21zZyIKKwllbHNlCisJCWNvbW1pdF9tZXNzYWdlIEhFQUQgPiAiJGZpeHVwX21zZyIgfHwgZGllICJDYW5ub3Qgd3JpdGUgJGZpeHVwX21zZyIKKwkJY291bnQ9MgorCQl7CisJCQlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyIFRoaXMgaXMgYSBjb21iaW5hdGlvbiBvZiAyIGNvbW1pdHMuIgorCQkJcHJpbnRmICclc1xuJyAiJGNvbW1lbnRfY2hhciBUaGUgZmlyc3QgY29tbWl0J3MgbWVzc2FnZSBpczoiCisJCQllY2hvCisJCQljYXQgIiRmaXh1cF9tc2ciCisJCX0gPiIkc3F1YXNoX21zZyIKKwlmaQorCWNhc2UgJDEgaW4KKwlzcXVhc2gpCisJCXJtIC1mICIkZml4dXBfbXNnIgorCQllY2hvCisJCXByaW50ZiAnJXNcbicgIiRjb21tZW50X2NoYXIgVGhpcyBpcyB0aGUgJChudGhfc3RyaW5nICRjb3VudCkgY29tbWl0IG1lc3NhZ2U6IgorCQllY2hvCisJCWNvbW1pdF9tZXNzYWdlICQyCisJCTs7CisJZml4dXApCisJCWVjaG8KKwkJcHJpbnRmICclc1xuJyAiJGNvbW1lbnRfY2hhciBUaGUgJChudGhfc3RyaW5nICRjb3VudCkgY29tbWl0IG1lc3NhZ2Ugd2lsbCBiZSBza2lwcGVkOiIKKwkJZWNobworCQkjIENoYW5nZSB0aGUgc3BhY2UgYWZ0ZXIgdGhlIGNvbW1lbnQgY2hhcmFjdGVyIHRvIFRBQjoKKwkJY29tbWl0X21lc3NhZ2UgJDIgfCBnaXQgc3RyaXBzcGFjZSAtLWNvbW1lbnQtbGluZXMgfCBzZWQgLWUgJ3MvIC8JLycKKwkJOzsKKwllc2FjID4+IiRzcXVhc2hfbXNnIgorfQorCitwZWVrX25leHRfY29tbWFuZCAoKSB7CisJZ2l0IHN0cmlwc3BhY2UgLS1zdHJpcC1jb21tZW50cyA8IiR0b2RvIiB8IHNlZCAtbiAtZSAncy8gLiovL3AnIC1lIHEKK30KKworIyBBIHNxdWFzaC9maXh1cCBoYXMgZmFpbGVkLiAgUHJlcGFyZSB0aGUgbG9uZyB2ZXJzaW9uIG9mIHRoZSBzcXVhc2gKKyMgY29tbWl0IG1lc3NhZ2UsIHRoZW4gZGllX3dpdGhfcGF0Y2guICBUaGlzIGNvZGUgcGF0aCByZXF1aXJlcyB0aGUKKyMgdXNlciB0byBlZGl0IHRoZSBjb21iaW5lZCBjb21taXQgbWVzc2FnZSBmb3IgYWxsIGNvbW1pdHMgdGhhdCBoYXZlCisjIGJlZW4gc3F1YXNoZWQvZml4ZWR1cCBzbyBmYXIuICBTbyBhbHNvIGVyYXNlIHRoZSBvbGQgc3F1YXNoCisjIG1lc3NhZ2VzLCBlZmZlY3RpdmVseSBjYXVzaW5nIHRoZSBjb21iaW5lZCBjb21taXQgdG8gYmUgdXNlZCBhcyB0aGUKKyMgbmV3IGJhc2lzIGZvciBhbnkgZnVydGhlciBzcXVhc2gvZml4dXBzLiAgQXJnczogc2hhMSByZXN0CitkaWVfZmFpbGVkX3NxdWFzaCgpIHsKKwltdiAiJHNxdWFzaF9tc2ciICIkbXNnIiB8fCBleGl0CisJcm0gLWYgIiRmaXh1cF9tc2ciCisJY3AgIiRtc2ciICIkR0lUX0RJUiIvTUVSR0VfTVNHIHx8IGV4aXQKKwl3YXJuCisJd2FybiAiQ291bGQgbm90IGFwcGx5ICQxLi4uICQyIgorCWRpZV93aXRoX3BhdGNoICQxICIiCit9CisKK2ZsdXNoX3Jld3JpdHRlbl9wZW5kaW5nKCkgeworCXRlc3QgLXMgIiRyZXdyaXR0ZW5fcGVuZGluZyIgfHwgcmV0dXJuCisJbmV3c2hhMT0iJChnaXQgcmV2LXBhcnNlIEhFQUReMCkiCisJc2VkICJzLyQvICRuZXdzaGExLyIgPCAiJHJld3JpdHRlbl9wZW5kaW5nIiA+PiAiJHJld3JpdHRlbl9saXN0IgorCXJtIC1mICIkcmV3cml0dGVuX3BlbmRpbmciCit9CisKK3JlY29yZF9pbl9yZXdyaXR0ZW4oKSB7CisJb2xkc2hhMT0iJChnaXQgcmV2LXBhcnNlICQxKSIKKwllY2hvICIkb2xkc2hhMSIgPj4gIiRyZXdyaXR0ZW5fcGVuZGluZyIKKworCWNhc2UgIiQocGVla19uZXh0X2NvbW1hbmQpIiBpbgorCXNxdWFzaHxzfGZpeHVwfGYpCisJCTs7CisJKikKKwkJZmx1c2hfcmV3cml0dGVuX3BlbmRpbmcKKwkJOzsKKwllc2FjCit9CisKK2RvX3BpY2sgKCkgeworCWlmIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJHNxdWFzaF9vbnRvIgorCXRoZW4KKwkJIyBTZXQgdGhlIGNvcnJlY3QgY29tbWl0IG1lc3NhZ2UgYW5kIGF1dGhvciBpbmZvIG9uIHRoZQorCQkjIHNlbnRpbmVsIHJvb3QgYmVmb3JlIGNoZXJyeS1waWNraW5nIHRoZSBvcmlnaW5hbCBjaGFuZ2VzCisJCSMgd2l0aG91dCBjb21taXR0aW5nICgtbikuICBGaW5hbGx5LCB1cGRhdGUgdGhlIHNlbnRpbmVsIGFnYWluCisJCSMgdG8gaW5jbHVkZSB0aGVzZSBjaGFuZ2VzLiAgSWYgdGhlIGNoZXJyeS1waWNrIHJlc3VsdHMgaW4gYQorCQkjIGNvbmZsaWN0LCB0aGlzIG1lYW5zIG91ciBiZWhhdmlvdXIgaXMgc2ltaWxhciB0byBhIHN0YW5kYXJkCisJCSMgZmFpbGVkIGNoZXJyeS1waWNrIGR1cmluZyByZWJhc2UsIHdpdGggYSBkaXJ0eSBpbmRleCB0bworCQkjIHJlc29sdmUgYmVmb3JlIG1hbnVhbGx5IHJ1bm5pbmcgZ2l0IGNvbW1pdCAtLWFtZW5kIHRoZW4gZ2l0CisJCSMgcmViYXNlIC0tY29udGludWUuCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLS1hbWVuZCBcCisJCQkgICAtLW5vLXBvc3QtcmV3cml0ZSAtbiAtcSAtQyAkMSAmJgorCQkJcGlja19vbmUgLW4gJDEgJiYKKwkJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgXAorCQkJCSAgIC0tYW1lbmQgLS1uby1wb3N0LXJld3JpdGUgLW4gLXEgLUMgJDEgXAorCQkJCSAgICR7Z3BnX3NpZ25fb3B0OisiJGdwZ19zaWduX29wdCJ9IHx8CisJCQlkaWVfd2l0aF9wYXRjaCAkMSAiQ291bGQgbm90IGFwcGx5ICQxLi4uICQyIgorCWVsc2UKKwkJcGlja19vbmUgJDEgfHwKKwkJCWRpZV93aXRoX3BhdGNoICQxICJDb3VsZCBub3QgYXBwbHkgJDEuLi4gJDIiCisJZmkKK30KKworZG9fbmV4dCAoKSB7CisJcm0gLWYgIiRtc2ciICIkYXV0aG9yX3NjcmlwdCIgIiRhbWVuZCIgIiRzdGF0ZV9kaXIiL3N0b3BwZWQtc2hhIHx8IGV4aXQKKwlyZWFkIC1yIGNvbW1hbmQgc2hhMSByZXN0IDwgIiR0b2RvIgorCWNhc2UgIiRjb21tYW5kIiBpbgorCSIkY29tbWVudF9jaGFyIip8Jyd8bm9vcHxkcm9wfGQpCisJCW1hcmtfYWN0aW9uX2RvbmUKKwkJOzsKKwlwaWNrfHApCisJCWNvbW1lbnRfZm9yX3JlZmxvZyBwaWNrCisKKwkJbWFya19hY3Rpb25fZG9uZQorCQlkb19waWNrICRzaGExICIkcmVzdCIKKwkJcmVjb3JkX2luX3Jld3JpdHRlbiAkc2hhMQorCQk7OworCXJld29yZHxyKQorCQljb21tZW50X2Zvcl9yZWZsb2cgcmV3b3JkCisKKwkJbWFya19hY3Rpb25fZG9uZQorCQlkb19waWNrICRzaGExICIkcmVzdCIKKwkJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tbm8tcG9zdC1yZXdyaXRlICR7Z3BnX3NpZ25fb3B0OisiJGdwZ19zaWduX29wdCJ9IHx8IHsKKwkJCXdhcm4gIkNvdWxkIG5vdCBhbWVuZCBjb21taXQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHBpY2tpbmcgJHNoYTEuLi4gJHJlc3QiCisJCQl3YXJuICJUaGlzIGlzIG1vc3QgbGlrZWx5IGR1ZSB0byBhbiBlbXB0eSBjb21taXQgbWVzc2FnZSwgb3IgdGhlIHByZS1jb21taXQgaG9vayIKKwkJCXdhcm4gImZhaWxlZC4gSWYgdGhlIHByZS1jb21taXQgaG9vayBmYWlsZWQsIHlvdSBtYXkgbmVlZCB0byByZXNvbHZlIHRoZSBpc3N1ZSBiZWZvcmUiCisJCQl3YXJuICJ5b3UgYXJlIGFibGUgdG8gcmV3b3JkIHRoZSBjb21taXQuIgorCQkJZXhpdF93aXRoX3BhdGNoICRzaGExIDEKKwkJfQorCQlyZWNvcmRfaW5fcmV3cml0dGVuICRzaGExCisJCTs7CisJZWRpdHxlKQorCQljb21tZW50X2Zvcl9yZWZsb2cgZWRpdAorCisJCW1hcmtfYWN0aW9uX2RvbmUKKwkJZG9fcGljayAkc2hhMSAiJHJlc3QiCisJCXdhcm4gIlN0b3BwZWQgYXQgJHNoYTEuLi4gJHJlc3QiCisJCWV4aXRfd2l0aF9wYXRjaCAkc2hhMSAwCisJCTs7CisJc3F1YXNofHN8Zml4dXB8ZikKKwkJY2FzZSAiJGNvbW1hbmQiIGluCisJCXNxdWFzaHxzKQorCQkJc3F1YXNoX3N0eWxlPXNxdWFzaAorCQkJOzsKKwkJZml4dXB8ZikKKwkJCXNxdWFzaF9zdHlsZT1maXh1cAorCQkJOzsKKwkJZXNhYworCQljb21tZW50X2Zvcl9yZWZsb2cgJHNxdWFzaF9zdHlsZQorCisJCXRlc3QgLWYgIiRkb25lIiAmJiBoYXNfYWN0aW9uICIkZG9uZSIgfHwKKwkJCWRpZSAiQ2Fubm90ICckc3F1YXNoX3N0eWxlJyB3aXRob3V0IGEgcHJldmlvdXMgY29tbWl0IgorCisJCW1hcmtfYWN0aW9uX2RvbmUKKwkJdXBkYXRlX3NxdWFzaF9tZXNzYWdlcyAkc3F1YXNoX3N0eWxlICRzaGExCisJCWF1dGhvcl9zY3JpcHRfY29udGVudD0kKGdldF9hdXRob3JfaWRlbnRfZnJvbV9jb21taXQgSEVBRCkKKwkJZWNobyAiJGF1dGhvcl9zY3JpcHRfY29udGVudCIgPiAiJGF1dGhvcl9zY3JpcHQiCisJCWV2YWwgIiRhdXRob3Jfc2NyaXB0X2NvbnRlbnQiCisJCWlmICEgcGlja19vbmUgLW4gJHNoYTEKKwkJdGhlbgorCQkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4iJGFtZW5kIgorCQkJZGllX2ZhaWxlZF9zcXVhc2ggJHNoYTEgIiRyZXN0IgorCQlmaQorCQljYXNlICIkKHBlZWtfbmV4dF9jb21tYW5kKSIgaW4KKwkJc3F1YXNofHN8Zml4dXB8ZikKKwkJCSMgVGhpcyBpcyBhbiBpbnRlcm1lZGlhdGUgY29tbWl0OyBpdHMgbWVzc2FnZSB3aWxsIG9ubHkgYmUKKwkJCSMgdXNlZCBpbiBjYXNlIG9mIHRyb3VibGUuICBTbyB1c2UgdGhlIGxvbmcgdmVyc2lvbjoKKwkJCWRvX3dpdGhfYXV0aG9yIG91dHB1dCBnaXQgY29tbWl0IC0tYW1lbmQgLS1uby12ZXJpZnkgLUYgIiRzcXVhc2hfbXNnIiBcCisJCQkJJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gfHwKKwkJCQlkaWVfZmFpbGVkX3NxdWFzaCAkc2hhMSAiJHJlc3QiCisJCQk7OworCQkqKQorCQkJIyBUaGlzIGlzIHRoZSBmaW5hbCBjb21tYW5kIG9mIHRoaXMgc3F1YXNoL2ZpeHVwIGdyb3VwCisJCQlpZiB0ZXN0IC1mICIkZml4dXBfbXNnIgorCQkJdGhlbgorCQkJCWRvX3dpdGhfYXV0aG9yIGdpdCBjb21taXQgLS1hbWVuZCAtLW5vLXZlcmlmeSAtRiAiJGZpeHVwX21zZyIgXAorCQkJCQkke2dwZ19zaWduX29wdDorIiRncGdfc2lnbl9vcHQifSB8fAorCQkJCQlkaWVfZmFpbGVkX3NxdWFzaCAkc2hhMSAiJHJlc3QiCisJCQllbHNlCisJCQkJY3AgIiRzcXVhc2hfbXNnIiAiJEdJVF9ESVIiL1NRVUFTSF9NU0cgfHwgZXhpdAorCQkJCXJtIC1mICIkR0lUX0RJUiIvTUVSR0VfTVNHCisJCQkJZG9fd2l0aF9hdXRob3IgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tbm8tdmVyaWZ5IC1GICIkR0lUX0RJUiIvU1FVQVNIX01TRyAtZSBcCisJCQkJCSR7Z3BnX3NpZ25fb3B0OisiJGdwZ19zaWduX29wdCJ9IHx8CisJCQkJCWRpZV9mYWlsZWRfc3F1YXNoICRzaGExICIkcmVzdCIKKwkJCWZpCisJCQlybSAtZiAiJHNxdWFzaF9tc2ciICIkZml4dXBfbXNnIgorCQkJOzsKKwkJZXNhYworCQlyZWNvcmRfaW5fcmV3cml0dGVuICRzaGExCisJCTs7CisJeHwiZXhlYyIpCisJCXJlYWQgLXIgY29tbWFuZCByZXN0IDwgIiR0b2RvIgorCQltYXJrX2FjdGlvbl9kb25lCisJCXByaW50ZiAnRXhlY3V0aW5nOiAlc1xuJyAiJHJlc3QiCisJCSR7U0hFTEw6LUBTSEVMTF9QQVRIQH0gLWMgIiRyZXN0IiAjIEFjdHVhbCBleGVjdXRpb24KKwkJc3RhdHVzPSQ/CisJCSMgUnVuIGluIHN1YnNoZWxsIGJlY2F1c2UgcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgY2FuIGRpZS4KKwkJZGlydHk9ZgorCQkocmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgInJlYmFzZSIgMj4vZGV2L251bGwpIHx8IGRpcnR5PXQKKwkJaWYgdGVzdCAiJHN0YXR1cyIgLW5lIDAKKwkJdGhlbgorCQkJd2FybiAiRXhlY3V0aW9uIGZhaWxlZDogJHJlc3QiCisJCQl0ZXN0ICIkZGlydHkiID0gZiB8fAorCQkJd2FybiAiYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgaW5kZXggYW5kL29yIHRoZSB3b3JraW5nIHRyZWUiCisKKwkJCXdhcm4gIllvdSBjYW4gZml4IHRoZSBwcm9ibGVtLCBhbmQgdGhlbiBydW4iCisJCQl3YXJuCisJCQl3YXJuICIJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIgorCQkJd2FybgorCQkJaWYgdGVzdCAkc3RhdHVzIC1lcSAxMjcJCSMgY29tbWFuZCBub3QgZm91bmQKKwkJCXRoZW4KKwkJCQlzdGF0dXM9MQorCQkJZmkKKwkJCWV4aXQgIiRzdGF0dXMiCisJCWVsaWYgdGVzdCAiJGRpcnR5IiA9IHQKKwkJdGhlbgorCQkJd2FybiAiRXhlY3V0aW9uIHN1Y2NlZWRlZDogJHJlc3QiCisJCQl3YXJuICJidXQgbGVmdCBjaGFuZ2VzIHRvIHRoZSBpbmRleCBhbmQvb3IgdGhlIHdvcmtpbmcgdHJlZSIKKwkJCXdhcm4gIkNvbW1pdCBvciBzdGFzaCB5b3VyIGNoYW5nZXMsIGFuZCB0aGVuIHJ1biIKKwkJCXdhcm4KKwkJCXdhcm4gIglnaXQgcmViYXNlIC0tY29udGludWUiCisJCQl3YXJuCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwkqKQorCQl3YXJuICJVbmtub3duIGNvbW1hbmQ6ICRjb21tYW5kICRzaGExICRyZXN0IgorCQlmaXh0b2RvPSJQbGVhc2UgZml4IHRoaXMgdXNpbmcgJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLiIKKwkJaWYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAiJHNoYTEiID4vZGV2L251bGwKKwkJdGhlbgorCQkJZGllX3dpdGhfcGF0Y2ggJHNoYTEgIiRmaXh0b2RvIgorCQllbHNlCisJCQlkaWUgIiRmaXh0b2RvIgorCQlmaQorCQk7OworCWVzYWMKKwl0ZXN0IC1zICIkdG9kbyIgJiYgcmV0dXJuCisKKwljb21tZW50X2Zvcl9yZWZsb2cgZmluaXNoICYmCisJbmV3aGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXNlICRoZWFkX25hbWUgaW4KKwlyZWZzLyopCisJCW1lc3NhZ2U9IiRHSVRfUkVGTE9HX0FDVElPTjogJGhlYWRfbmFtZSBvbnRvICRvbnRvIiAmJgorCQlnaXQgdXBkYXRlLXJlZiAtbSAiJG1lc3NhZ2UiICRoZWFkX25hbWUgJG5ld2hlYWQgJG9yaWdfaGVhZCAmJgorCQlnaXQgc3ltYm9saWMtcmVmIFwKKwkJICAtbSAiJEdJVF9SRUZMT0dfQUNUSU9OOiByZXR1cm5pbmcgdG8gJGhlYWRfbmFtZSIgXAorCQkgIEhFQUQgJGhlYWRfbmFtZQorCQk7OworCWVzYWMgJiYgeworCQl0ZXN0ICEgLWYgIiRzdGF0ZV9kaXIiL3ZlcmJvc2UgfHwKKwkJCWdpdCBkaWZmLXRyZWUgLS1zdGF0ICRvcmlnX2hlYWQuLkhFQUQKKwl9ICYmCisJeworCQl0ZXN0IC1zICIkcmV3cml0dGVuX2xpc3QiICYmCisJCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9cmViYXNlIDwgIiRyZXdyaXR0ZW5fbGlzdCIgfHwKKwkJdHJ1ZSAjIHdlIGRvbid0IGNhcmUgaWYgdGhpcyBjb3B5aW5nIGZhaWxlZAorCX0gJiYKKwlob29rPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBob29rcy9wb3N0LXJld3JpdGUpIgorCWlmIHRlc3QgLXggIiRob29rIiAmJiB0ZXN0IC1zICIkcmV3cml0dGVuX2xpc3QiOyB0aGVuCisJCSIkaG9vayIgcmViYXNlIDwgIiRyZXdyaXR0ZW5fbGlzdCIKKwkJdHJ1ZSAjIHdlIGRvbid0IGNhcmUgaWYgdGhpcyBob29rIGZhaWxlZAorCWZpICYmCisJd2FybiAiU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgJGhlYWRfbmFtZS4iCisKKwlyZXR1cm4gMSAjIG5vdCBmYWlsdXJlOyBqdXN0IHRvIGJyZWFrIHRoZSBkb19yZXN0IGxvb3AKK30KKworIyBjYW4gb25seSByZXR1cm4gMCwgd2hlbiB0aGUgaW5maW5pdGUgbG9vcCBicmVha3MKK2RvX3Jlc3QgKCkgeworCXdoaWxlIDoKKwlkbworCQlkb19uZXh0IHx8IGJyZWFrCisJZG9uZQorfQorCisjIHNraXAgcGlja2luZyBjb21taXRzIHdob3NlIHBhcmVudHMgYXJlIHVuY2hhbmdlZAorc2tpcF91bm5lY2Vzc2FyeV9waWNrcyAoKSB7CisJZmQ9MworCXdoaWxlIHJlYWQgLXIgY29tbWFuZCByZXN0CisJZG8KKwkJIyBmZD0zIG1lYW5zIHdlIHNraXAgdGhlIGNvbW1hbmQKKwkJY2FzZSAiJGZkLCRjb21tYW5kIiBpbgorCQkzLHBpY2t8MyxwKQorCQkJIyBwaWNrIGEgY29tbWl0IHdob3NlIHBhcmVudCBpcyBjdXJyZW50ICRvbnRvIC0+IHNraXAKKwkJCXNoYTE9JHtyZXN0JSUgKn0KKwkJCWNhc2UgIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICIkc2hhMSJeKSIgaW4KKwkJCSIkb250byIqKQorCQkJCW9udG89JHNoYTEKKwkJCQk7OworCQkJKikKKwkJCQlmZD0xCisJCQkJOzsKKwkJCWVzYWMKKwkJCTs7CisJCTMsIiRjb21tZW50X2NoYXIiKnwzLCkKKwkJCSMgY29weSBjb21tZW50cworCQkJOzsKKwkJKikKKwkJCWZkPTEKKwkJCTs7CisJCWVzYWMKKwkJcHJpbnRmICclc1xuJyAiJGNvbW1hbmQke3Jlc3Q6KyB9JHJlc3QiID4mJGZkCisJZG9uZSA8IiR0b2RvIiA+IiR0b2RvLm5ldyIgMz4+IiRkb25lIiAmJgorCW12IC1mICIkdG9kbyIubmV3ICIkdG9kbyIgJiYKKwljYXNlICIkKHBlZWtfbmV4dF9jb21tYW5kKSIgaW4KKwlzcXVhc2h8c3xmaXh1cHxmKQorCQlyZWNvcmRfaW5fcmV3cml0dGVuICIkb250byIKKwkJOzsKKwllc2FjIHx8CisJZGllICJDb3VsZCBub3Qgc2tpcCB1bm5lY2Vzc2FyeSBwaWNrIGNvbW1hbmRzIgorfQorCit0cmFuc2Zvcm1fdG9kb19pZHMgKCkgeworCXdoaWxlIHJlYWQgLXIgY29tbWFuZCByZXN0CisJZG8KKwkJY2FzZSAiJGNvbW1hbmQiIGluCisJCSIkY29tbWVudF9jaGFyIiogfCBleGVjKQorCQkJIyBCZSBjYXJlZnVsIGZvciBvZGRiYWxsIGNvbW1hbmRzIGxpa2UgJ2V4ZWMnCisJCQkjIHRoYXQgZG8gbm90IGhhdmUgYSBTSEEtMSBhdCB0aGUgYmVnaW5uaW5nIG9mICRyZXN0LgorCQkJOzsKKwkJKikKKwkJCXNoYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgIiRAIiAke3Jlc3QlJVsJIF0qfSkgJiYKKwkJCXJlc3Q9IiRzaGExICR7cmVzdCMqWwkgXX0iCisJCQk7OworCQllc2FjCisJCXByaW50ZiAnJXNcbicgIiRjb21tYW5kJHtyZXN0OisgfSRyZXN0IgorCWRvbmUgPCIkdG9kbyIgPiIkdG9kby5uZXciICYmCisJbXYgLWYgIiR0b2RvLm5ldyIgIiR0b2RvIgorfQorCitleHBhbmRfdG9kb19pZHMoKSB7CisJdHJhbnNmb3JtX3RvZG9faWRzCit9CisKK2NvbGxhcHNlX3RvZG9faWRzKCkgeworCXRyYW5zZm9ybV90b2RvX2lkcyAtLXNob3J0Cit9CisKKyMgUmVhcnJhbmdlIHRoZSB0b2RvIGxpc3QgdGhhdCBoYXMgYm90aCAicGljayBzaGExIG1zZyIgYW5kCisjICJwaWNrIHNoYTEgZml4dXAhL3NxdWFzaCEgbXNnIiBhcHBlYXJzIGluIGl0IHNvIHRoYXQgdGhlIGxhdHRlcgorIyBjb21lcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgZm9ybWVyLCBhbmQgY2hhbmdlICJwaWNrIiB0bworIyAiZml4dXAiLyJzcXVhc2giLgorIworIyBOb3RlIHRoYXQgaWYgdGhlIGNvbmZpZyBoYXMgc3BlY2lmaWVkIGEgY3VzdG9tIGluc3RydWN0aW9uIGZvcm1hdAorIyBlYWNoIGxvZyBtZXNzYWdlIHdpbGwgYmUgcmUtcmV0cmlldmVkIGluIG9yZGVyIHRvIG5vcm1hbGl6ZSB0aGUKKyMgYXV0b3NxdWFzaCBhcnJhbmdlbWVudAorcmVhcnJhbmdlX3NxdWFzaCAoKSB7CisJIyBleHRyYWN0IGZpeHVwIS9zcXVhc2ghIGxpbmVzIGFuZCByZXNvbHZlIGFueSByZWZlcmVuY2VkIHNoYTEncworCXdoaWxlIHJlYWQgLXIgcGljayBzaGExIG1lc3NhZ2UKKwlkbworCQl0ZXN0IC16ICIke2Zvcm1hdH0iIHx8IG1lc3NhZ2U9JChnaXQgbG9nIC1uIDEgLS1mb3JtYXQ9IiVzIiAke3NoYTF9KQorCQljYXNlICIkbWVzc2FnZSIgaW4KKwkJInNxdWFzaCEgIip8ImZpeHVwISAiKikKKwkJCWFjdGlvbj0iJHttZXNzYWdlJSUhKn0iCisJCQlyZXN0PSRtZXNzYWdlCisJCQlwcmVmaXg9CisJCQkjIHNraXAgYWxsIHNxdWFzaCEgb3IgZml4dXAhIChidXQgc2F2ZSBmb3IgbGF0ZXIpCisJCQl3aGlsZSA6CisJCQlkbworCQkJCWNhc2UgIiRyZXN0IiBpbgorCQkJCSJzcXVhc2ghICIqfCJmaXh1cCEgIiopCisJCQkJCXByZWZpeD0iJHByZWZpeCR7cmVzdCUlISp9LCIKKwkJCQkJcmVzdD0iJHtyZXN0IyohIH0iCisJCQkJCTs7CisJCQkJKikKKwkJCQkJYnJlYWsKKwkJCQkJOzsKKwkJCQllc2FjCisJCQlkb25lCisJCQlwcmludGYgJyVzICVzICVzICVzXG4nICIkc2hhMSIgIiRhY3Rpb24iICIkcHJlZml4IiAiJHJlc3QiCisJCQkjIGlmIGl0J3MgYSBzaW5nbGUgd29yZCwgdHJ5IHRvIHJlc29sdmUgdG8gYSBmdWxsIHNoYTEgYW5kCisJCQkjIGVtaXQgYSBzZWNvbmQgY29weS4gVGhpcyBhbGxvd3MgdXMgdG8gbWF0Y2ggb24gYm90aCBtZXNzYWdlCisJCQkjIGFuZCBvbiBzaGExIHByZWZpeAorCQkJaWYgdGVzdCAiJHtyZXN0IyogfSIgPSAiJHJlc3QiOyB0aGVuCisJCQkJZnVsbHNoYT0iJChnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICIkcmVzdCIgMj4vZGV2L251bGwpIgorCQkJCWlmIHRlc3QgLW4gIiRmdWxsc2hhIjsgdGhlbgorCQkJCQkjIHByZWZpeCB0aGUgYWN0aW9uIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgbGluZSBhcworCQkJCQkjIGludGVuZGVkIGZvciBmdWxsIHNoYTEgbWF0Y2gKKwkJCQkJZWNobyAiJHNoYTEgKyRhY3Rpb24gJHByZWZpeCAkZnVsbHNoYSIKKwkJCQlmaQorCQkJZmkKKwkJZXNhYworCWRvbmUgPiIkMS5zcSIgPCIkMSIKKwl0ZXN0IC1zICIkMS5zcSIgfHwgcmV0dXJuCisKKwl1c2VkPQorCXdoaWxlIHJlYWQgLXIgcGljayBzaGExIG1lc3NhZ2UKKwlkbworCQljYXNlICIgJHVzZWQiIGluCisJCSoiICRzaGExICIqKSBjb250aW51ZSA7OworCQllc2FjCisJCXByaW50ZiAnJXNcbicgIiRwaWNrICRzaGExICRtZXNzYWdlIgorCQl0ZXN0IC16ICIke2Zvcm1hdH0iIHx8IG1lc3NhZ2U9JChnaXQgbG9nIC1uIDEgLS1mb3JtYXQ9IiVzIiAke3NoYTF9KQorCQl1c2VkPSIkdXNlZCRzaGExICIKKwkJd2hpbGUgcmVhZCAtciBzcXVhc2ggYWN0aW9uIG1zZ19wcmVmaXggbXNnX2NvbnRlbnQKKwkJZG8KKwkJCWNhc2UgIiAkdXNlZCIgaW4KKwkJCSoiICRzcXVhc2ggIiopIGNvbnRpbnVlIDs7CisJCQllc2FjCisJCQllbWl0PTAKKwkJCWNhc2UgIiRhY3Rpb24iIGluCisJCQkrKikKKwkJCQlhY3Rpb249IiR7YWN0aW9uIyt9IgorCQkJCSMgZnVsbCBzaGExIHByZWZpeCB0ZXN0CisJCQkJY2FzZSAiJG1zZ19jb250ZW50IiBpbiAiJHNoYTEiKikgZW1pdD0xOzsgZXNhYyA7OworCQkJKikKKwkJCQkjIG1lc3NhZ2UgcHJlZml4IHRlc3QKKwkJCQljYXNlICIkbWVzc2FnZSIgaW4gIiRtc2dfY29udGVudCIqKSBlbWl0PTE7OyBlc2FjIDs7CisJCQllc2FjCisJCQlpZiB0ZXN0ICRlbWl0ID0gMTsgdGhlbgorCQkJCWlmIHRlc3QgLW4gIiR7Zm9ybWF0fSIKKwkJCQl0aGVuCisJCQkJCW1zZ19jb250ZW50PSQoZ2l0IGxvZyAtbiAxIC0tZm9ybWF0PSIke2Zvcm1hdH0iICR7c3F1YXNofSkKKwkJCQllbHNlCisJCQkJCW1zZ19jb250ZW50PSIkKGVjaG8gIiRtc2dfcHJlZml4IiB8IHNlZCAicy8sLyEgL2ciKSRtc2dfY29udGVudCIKKwkJCQlmaQorCQkJCXByaW50ZiAnJXNcbicgIiRhY3Rpb24gJHNxdWFzaCAkbXNnX2NvbnRlbnQiCisJCQkJdXNlZD0iJHVzZWQkc3F1YXNoICIKKwkJCWZpCisJCWRvbmUgPCIkMS5zcSIKKwlkb25lID4iJDEucmVhcnJhbmdlZCIgPCIkMSIKKwljYXQgIiQxLnJlYXJyYW5nZWQiID4iJDEiCisJcm0gLWYgIiQxLnNxIiAiJDEucmVhcnJhbmdlZCIKK30KKworIyBBZGQgY29tbWFuZHMgYWZ0ZXIgYSBwaWNrIG9yIGFmdGVyIGEgc3F1YXNoL2ZpeHVwIHNlcmllCisjIGluIHRoZSB0b2RvIGxpc3QuCithZGRfZXhlY19jb21tYW5kcyAoKSB7CisJeworCQlmaXJzdD10CisJCXdoaWxlIHJlYWQgLXIgaW5zbiByZXN0CisJCWRvCisJCQljYXNlICRpbnNuIGluCisJCQlwaWNrKQorCQkJCXRlc3QgLW4gIiRmaXJzdCIgfHwKKwkJCQlwcmludGYgIiVzIiAiJGNtZCIKKwkJCQk7OworCQkJZXNhYworCQkJcHJpbnRmICIlcyAlc1xuIiAiJGluc24iICIkcmVzdCIKKwkJCWZpcnN0PQorCQlkb25lCisJCXByaW50ZiAiJXMiICIkY21kIgorCX0gPCIkMSIgPiIkMS5uZXciICYmCisJbXYgIiQxLm5ldyIgIiQxIgorfQorCisjIENoZWNrIGlmIHRoZSBTSEEtMSBwYXNzZWQgYXMgYW4gYXJndW1lbnQgaXMgYQorIyBjb3JyZWN0IG9uZSwgaWYgbm90IHRoZW4gcHJpbnQgJDIgaW4gIiR0b2RvIi5iYWRzaGEKKyMgJDE6IHRoZSBTSEEtMSB0byB0ZXN0CisjICQyOiB0aGUgbGluZSBudW1iZXIgb2YgdGhlIGlucHV0CisjICQzOiB0aGUgaW5wdXQgZmlsZW5hbWUKK2NoZWNrX2NvbW1pdF9zaGEgKCkgeworCWJhZHNoYT0wCisJaWYgdGVzdCAteiAkMQorCXRoZW4KKwkJYmFkc2hhPTEKKwllbHNlCisJCXNoYTFfdmVyaWY9IiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICQxXntjb21taXR9KSIKKwkJaWYgdGVzdCAteiAkc2hhMV92ZXJpZgorCQl0aGVuCisJCQliYWRzaGE9MQorCQlmaQorCWZpCisKKwlpZiB0ZXN0ICRiYWRzaGEgLW5lIDAKKwl0aGVuCisJCWxpbmU9IiQoc2VkIC1uIC1lICIkezJ9cCIgIiQzIikiCisJCXdhcm4gIldhcm5pbmc6IHRoZSBTSEEtMSBpcyBtaXNzaW5nIG9yIGlzbid0IiBcCisJCQkiYSBjb21taXQgaW4gdGhlIGZvbGxvd2luZyBsaW5lOiIKKwkJd2FybiAiIC0gJGxpbmUiCisJCXdhcm4KKwlmaQorCisJcmV0dXJuICRiYWRzaGEKK30KKworIyBwcmludHMgdGhlIGJhZCBjb21taXRzIGFuZCBiYWQgY29tbWFuZHMKKyMgZnJvbSB0aGUgdG9kb2xpc3QgaW4gc3RkaW4KK2NoZWNrX2JhZF9jbWRfYW5kX3NoYSAoKSB7CisJcmV0dmFsPTAKKwlsaW5lbm89MAorCXdoaWxlIHJlYWQgLXIgY29tbWFuZCByZXN0CisJZG8KKwkJbGluZW5vPSQoKCAkbGluZW5vICsgMSApKQorCQljYXNlICRjb21tYW5kIGluCisJCSIkY29tbWVudF9jaGFyIip8Jyd8bm9vcHx4fGV4ZWMpCisJCQkjIERvZXNuJ3QgZXhwZWN0IGEgU0hBLTEKKwkJCTs7CisJCXBpY2t8cHxkcm9wfGR8cmV3b3JkfHJ8ZWRpdHxlfHNxdWFzaHxzfGZpeHVwfGYpCisJCQlpZiAhIGNoZWNrX2NvbW1pdF9zaGEgIiR7cmVzdCUlWyAJXSp9IiAiJGxpbmVubyIgIiQxIgorCQkJdGhlbgorCQkJCXJldHZhbD0xCisJCQlmaQorCQkJOzsKKwkJKikKKwkJCWxpbmU9IiQoc2VkIC1uIC1lICIke2xpbmVub31wIiAiJDEiKSIKKwkJCXdhcm4gIldhcm5pbmc6IHRoZSBjb21tYW5kIGlzbid0IHJlY29nbml6ZWQiIFwKKwkJCQkiaW4gdGhlIGZvbGxvd2luZyBsaW5lOiIKKwkJCXdhcm4gIiAtICRsaW5lIgorCQkJd2FybgorCQkJcmV0dmFsPTEKKwkJCTs7CisJCWVzYWMKKwlkb25lIDwiJDEiCisJcmV0dXJuICRyZXR2YWwKK30KKworIyBQcmludCB0aGUgbGlzdCBvZiB0aGUgU0hBLTEgb2YgdGhlIGNvbW1pdHMKKyMgZnJvbSBzdGRpbiB0byBzdGRvdXQKK3RvZG9fbGlzdF90b19zaGFfbGlzdCAoKSB7CisJZ2l0IHN0cmlwc3BhY2UgLS1zdHJpcC1jb21tZW50cyB8CisJd2hpbGUgcmVhZCAtciBjb21tYW5kIHNoYTEgcmVzdAorCWRvCisJCWNhc2UgJGNvbW1hbmQgaW4KKwkJIiRjb21tZW50X2NoYXIiKnwnJ3xub29wfHh8ImV4ZWMiKQorCQkJOzsKKwkJKikKKwkJCWxvbmdfc2hhPSQoZ2l0IHJldi1saXN0IC0tbm8td2FsayAiJHNoYTEiIDI+L2Rldi9udWxsKQorCQkJcHJpbnRmICIlc1xuIiAiJGxvbmdfc2hhIgorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworIyBVc2Ugd2FybiBmb3IgZWFjaCBsaW5lIGluIHN0ZGluCit3YXJuX2xpbmVzICgpIHsKKwl3aGlsZSByZWFkIC1yIGxpbmUKKwlkbworCQl3YXJuICIgLSAkbGluZSIKKwlkb25lCit9CisKKyMgU3dpdGNoIHRvIHRoZSBicmFuY2ggaW4gJGludG8gYW5kIG5vdGlmeSBpdCBpbiB0aGUgcmVmbG9nCitjaGVja291dF9vbnRvICgpIHsKKwlHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OOiBjaGVja291dCAkb250b19uYW1lIgorCW91dHB1dCBnaXQgY2hlY2tvdXQgJG9udG8gfHwgZGllX2Fib3J0ICJjb3VsZCBub3QgZGV0YWNoIEhFQUQiCisJZ2l0IHVwZGF0ZS1yZWYgT1JJR19IRUFEICRvcmlnX2hlYWQKK30KKworZ2V0X21pc3NpbmdfY29tbWl0X2NoZWNrX2xldmVsICgpIHsKKwljaGVja19sZXZlbD0kKGdpdCBjb25maWcgLS1nZXQgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2spCisJY2hlY2tfbGV2ZWw9JHtjaGVja19sZXZlbDotaWdub3JlfQorCSMgRG9uJ3QgYmUgY2FzZSBzZW5zaXRpdmUKKwlwcmludGYgJyVzJyAiJGNoZWNrX2xldmVsIiB8IHRyICdBLVonICdhLXonCit9CisKKyMgQ2hlY2sgaWYgdGhlIHVzZXIgZHJvcHBlZCBzb21lIGNvbW1pdHMgYnkgbWlzdGFrZQorIyBCZWhhdmlvdXIgZGV0ZXJtaW5lZCBieSByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjay4KKyMgQ2hlY2sgaWYgdGhlcmUgaXMgYW4gdW5yZWNvZ25pemVkIGNvbW1hbmQgb3IgYQorIyBiYWQgU0hBLTEgaW4gYSBjb21tYW5kLgorY2hlY2tfdG9kb19saXN0ICgpIHsKKwlyYWlzZV9lcnJvcj1mCisKKwljaGVja19sZXZlbD0kKGdldF9taXNzaW5nX2NvbW1pdF9jaGVja19sZXZlbCkKKworCWNhc2UgIiRjaGVja19sZXZlbCIgaW4KKwl3YXJufGVycm9yKQorCQkjIEdldCB0aGUgU0hBLTEgb2YgdGhlIGNvbW1pdHMKKwkJdG9kb19saXN0X3RvX3NoYV9saXN0IDwiJHRvZG8iLmJhY2t1cCA+IiR0b2RvIi5vbGRzaGExCisJCXRvZG9fbGlzdF90b19zaGFfbGlzdCA8IiR0b2RvIiA+IiR0b2RvIi5uZXdzaGExCisKKwkJIyBTb3J0IHRoZSBTSEEtMSBhbmQgY29tcGFyZSB0aGVtCisJCXNvcnQgLXUgIiR0b2RvIi5vbGRzaGExID4iJHRvZG8iLm9sZHNoYTErCisJCW12ICIkdG9kbyIub2xkc2hhMSsgIiR0b2RvIi5vbGRzaGExCisJCXNvcnQgLXUgIiR0b2RvIi5uZXdzaGExID4iJHRvZG8iLm5ld3NoYTErCisJCW12ICIkdG9kbyIubmV3c2hhMSsgIiR0b2RvIi5uZXdzaGExCisJCWNvbW0gLTIgLTMgIiR0b2RvIi5vbGRzaGExICIkdG9kbyIubmV3c2hhMSA+IiR0b2RvIi5taXNzCisKKwkJIyBXYXJuIGFib3V0IG1pc3NpbmcgY29tbWl0cworCQlpZiB0ZXN0IC1zICIkdG9kbyIubWlzcworCQl0aGVuCisJCQl0ZXN0ICIkY2hlY2tfbGV2ZWwiID0gZXJyb3IgJiYgcmFpc2VfZXJyb3I9dAorCisJCQl3YXJuICJXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIiBcCisJCQkJImFjY2lkZW50YWxseS4iCisJCQl3YXJuICJEcm9wcGVkIGNvbW1pdHMgKG5ld2VyIHRvIG9sZGVyKToiCisKKwkJCSMgTWFrZSB0aGUgbGlzdCB1c2VyLWZyaWVuZGx5IGFuZCBkaXNwbGF5CisJCQlvcHQ9Ii0tbm8td2Fsaz1zb3J0ZWQgLS1mb3JtYXQ9b25lbGluZSAtLWFiYnJldi1jb21taXQgLS1zdGRpbiIKKwkJCWdpdCByZXYtbGlzdCAkb3B0IDwiJHRvZG8iLm1pc3MgfCB3YXJuX2xpbmVzCisKKwkJCXdhcm4gIlRvIGF2b2lkIHRoaXMgbWVzc2FnZSwgdXNlIFwiZHJvcFwiIHRvIiBcCisJCQkJImV4cGxpY2l0bHkgcmVtb3ZlIGEgY29tbWl0LiIKKwkJCXdhcm4KKwkJCXdhcm4gIlVzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIiBcCisJCQkJInRoZSBsZXZlbCBvZiB3YXJuaW5ncy4iCisJCQl3YXJuICJUaGUgcG9zc2libGUgYmVoYXZpb3VycyBhcmU6IGlnbm9yZSwgd2FybiwgZXJyb3IuIgorCQkJd2FybgorCQlmaQorCQk7OworCWlnbm9yZSkKKwkJOzsKKwkqKQorCQl3YXJuICJVbnJlY29nbml6ZWQgc2V0dGluZyAkY2hlY2tfbGV2ZWwgZm9yIG9wdGlvbiIgXAorCQkJInJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrLiBJZ25vcmluZy4iCisJCTs7CisJZXNhYworCisJaWYgISBjaGVja19iYWRfY21kX2FuZF9zaGEgIiR0b2RvIgorCXRoZW4KKwkJcmFpc2VfZXJyb3I9dAorCWZpCisKKwlpZiB0ZXN0ICRyYWlzZV9lcnJvciA9IHQKKwl0aGVuCisJCSMgQ2hlY2tvdXQgYmVmb3JlIHRoZSBmaXJzdCBjb21taXQgb2YgdGhlCisJCSMgcmViYXNlOiB0aGlzIHdheSBnaXQgcmViYXNlIC0tY29udGludWUKKwkJIyB3aWxsIHdvcmsgY29ycmVjdGx5IGFzIGl0IGV4cGVjdHMgSEVBRCB0byBiZQorCQkjIHBsYWNlZCBiZWZvcmUgdGhlIGNvbW1pdCBvZiB0aGUgbmV4dCBhY3Rpb24KKwkJY2hlY2tvdXRfb250bworCisJCXdhcm4gIllvdSBjYW4gZml4IHRoaXMgd2l0aCAnZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbycuIgorCQlkaWUgIk9yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLiIKKwlmaQorfQorCisjIFRoZSB3aG9sZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgaXMgcnVuIGJ5IGRvdC1zb3VyY2luZyBpdCBmcm9tCisjIGluc2lkZSBhIHNoZWxsIGZ1bmN0aW9uLiAgSXQgdXNlZCB0byBiZSB0aGF0ICJyZXR1cm4icyB3ZSBzZWUKKyMgYmVsb3cgd2VyZSBub3QgaW5zaWRlIGFueSBmdW5jdGlvbiwgYW5kIGV4cGVjdGVkIHRvIHJldHVybgorIyB0byB0aGUgZnVuY3Rpb24gdGhhdCBkb3Qtc291cmNlZCB1cy4KKyMKKyMgSG93ZXZlciwgRnJlZUJTRCAvYmluL3NoIG1pc2JlaGF2ZXMgb24gc3VjaCBhIGNvbnN0cnVjdCBhbmQKKyMgY29udGludWVzIHRvIHJ1biB0aGUgc3RhdGVtZW50cyB0aGF0IGZvbGxvdyBzdWNoIGEgInJldHVybiIuCisjIEFzIGEgd29yay1hcm91bmQsIHdlIGludHJvZHVjZSBhbiBleHRyYSBsYXllciBvZiBhIGZ1bmN0aW9uCisjIGhlcmUsIGFuZCBpbW1lZGlhdGVseSBjYWxsIGl0IGFmdGVyIGRlZmluaW5nIGl0LgorZ2l0X3JlYmFzZV9faW50ZXJhY3RpdmUgKCkgeworCitjYXNlICIkYWN0aW9uIiBpbgorY29udGludWUpCisJIyBkbyB3ZSBoYXZlIGFueXRoaW5nIHRvIGNvbW1pdD8KKwlpZiBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLXF1aWV0IEhFQUQgLS0KKwl0aGVuCisJCSMgTm90aGluZyB0byBjb21taXQgLS0gc2tpcCB0aGlzIGNvbW1pdAorCisJCXRlc3QgISAtZiAiJEdJVF9ESVIiL0NIRVJSWV9QSUNLX0hFQUQgfHwKKwkJcm0gIiRHSVRfRElSIi9DSEVSUllfUElDS19IRUFEIHx8CisJCWRpZSAiQ291bGQgbm90IHJlbW92ZSBDSEVSUllfUElDS19IRUFEIgorCWVsc2UKKwkJaWYgISB0ZXN0IC1mICIkYXV0aG9yX3NjcmlwdCIKKwkJdGhlbgorCQkJZ3BnX3NpZ25fb3B0X3F1b3RlZD0ke2dwZ19zaWduX29wdDorJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRncGdfc2lnbl9vcHQiKX0KKwkJCWRpZSAiWW91IGhhdmUgc3RhZ2VkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIElmIHRoZXNlIGNoYW5nZXMgYXJlIG1lYW50IHRvIGJlCitzcXVhc2hlZCBpbnRvIHRoZSBwcmV2aW91cyBjb21taXQsIHJ1bjoKKworICBnaXQgY29tbWl0IC0tYW1lbmQgJGdwZ19zaWduX29wdF9xdW90ZWQKKworSWYgdGhleSBhcmUgbWVhbnQgdG8gZ28gaW50byBhIG5ldyBjb21taXQsIHJ1bjoKKworICBnaXQgY29tbWl0ICRncGdfc2lnbl9vcHRfcXVvdGVkCisKK0luIGJvdGggY2FzZSwgb25jZSB5b3UncmUgZG9uZSwgY29udGludWUgd2l0aDoKKworICBnaXQgcmViYXNlIC0tY29udGludWUKKyIKKwkJZmkKKwkJLiAiJGF1dGhvcl9zY3JpcHQiIHx8CisJCQlkaWUgIkVycm9yIHRyeWluZyB0byBmaW5kIHRoZSBhdXRob3IgaWRlbnRpdHkgdG8gYW1lbmQgY29tbWl0IgorCQlpZiB0ZXN0IC1mICIkYW1lbmQiCisJCXRoZW4KKwkJCWN1cnJlbnRfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKwkJCXRlc3QgIiRjdXJyZW50X2hlYWQiID0gJChjYXQgIiRhbWVuZCIpIHx8CisJCQlkaWUgIlwKK1lvdSBoYXZlIHVuY29tbWl0dGVkIGNoYW5nZXMgaW4geW91ciB3b3JraW5nIHRyZWUuIFBsZWFzZSwgY29tbWl0IHRoZW0KK2ZpcnN0IGFuZCB0aGVuIHJ1biAnZ2l0IHJlYmFzZSAtLWNvbnRpbnVlJyBhZ2Fpbi4iCisJCQlkb193aXRoX2F1dGhvciBnaXQgY29tbWl0IC0tYW1lbmQgLS1uby12ZXJpZnkgLUYgIiRtc2ciIC1lIFwKKwkJCQkke2dwZ19zaWduX29wdDorIiRncGdfc2lnbl9vcHQifSB8fAorCQkJCWRpZSAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCisJCWVsc2UKKwkJCWRvX3dpdGhfYXV0aG9yIGdpdCBjb21taXQgLS1uby12ZXJpZnkgLUYgIiRtc2ciIC1lIFwKKwkJCQkke2dwZ19zaWduX29wdDorIiRncGdfc2lnbl9vcHQifSB8fAorCQkJCWRpZSAiQ291bGQgbm90IGNvbW1pdCBzdGFnZWQgY2hhbmdlcy4iCisJCWZpCisJZmkKKworCWlmIHRlc3QgLXIgIiRzdGF0ZV9kaXIiL3N0b3BwZWQtc2hhCisJdGhlbgorCQlyZWNvcmRfaW5fcmV3cml0dGVuICIkKGNhdCAiJHN0YXRlX2RpciIvc3RvcHBlZC1zaGEpIgorCWZpCisKKwlyZXF1aXJlX2NsZWFuX3dvcmtfdHJlZSAicmViYXNlIgorCWRvX3Jlc3QKKwlyZXR1cm4gMAorCTs7Citza2lwKQorCWdpdCByZXJlcmUgY2xlYXIKKworCWRvX3Jlc3QKKwlyZXR1cm4gMAorCTs7CitlZGl0LXRvZG8pCisJZ2l0IHN0cmlwc3BhY2UgLS1zdHJpcC1jb21tZW50cyA8IiR0b2RvIiA+IiR0b2RvIi5uZXcKKwltdiAtZiAiJHRvZG8iLm5ldyAiJHRvZG8iCisJY29sbGFwc2VfdG9kb19pZHMKKwlhcHBlbmRfdG9kb19oZWxwCisJZ2l0IHN0cmlwc3BhY2UgLS1jb21tZW50LWxpbmVzID4+IiR0b2RvIiA8PFxFT0YKKworWW91IGFyZSBlZGl0aW5nIHRoZSB0b2RvIGZpbGUgb2YgYW4gb25nb2luZyBpbnRlcmFjdGl2ZSByZWJhc2UuCitUbyBjb250aW51ZSByZWJhc2UgYWZ0ZXIgZWRpdGluZywgcnVuOgorICAgIGdpdCByZWJhc2UgLS1jb250aW51ZQorCitFT0YKKworCWdpdF9zZXF1ZW5jZV9lZGl0b3IgIiR0b2RvIiB8fAorCQlkaWUgIkNvdWxkIG5vdCBleGVjdXRlIGVkaXRvciIKKwlleHBhbmRfdG9kb19pZHMKKworCWV4aXQKKwk7OworZXNhYworCitnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgPi9kZXYvbnVsbCB8fAorCWRpZSAiWW91IG5lZWQgdG8gc2V0IHlvdXIgY29tbWl0dGVyIGluZm8gZmlyc3QiCisKK2NvbW1lbnRfZm9yX3JlZmxvZyBzdGFydAorCitpZiB0ZXN0ICEgLXogIiRzd2l0Y2hfdG8iCit0aGVuCisJR0lUX1JFRkxPR19BQ1RJT049IiRHSVRfUkVGTE9HX0FDVElPTjogY2hlY2tvdXQgJHN3aXRjaF90byIKKwlvdXRwdXQgZ2l0IGNoZWNrb3V0ICIkc3dpdGNoX3RvIiAtLSB8fAorCWRpZSAiQ291bGQgbm90IGNoZWNrb3V0ICRzd2l0Y2hfdG8iCisKKwljb21tZW50X2Zvcl9yZWZsb2cgc3RhcnQKK2ZpCisKK29yaWdfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgfHwgZGllICJObyBIRUFEPyIKK21rZGlyIC1wICIkc3RhdGVfZGlyIiB8fCBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5ICRzdGF0ZV9kaXIiCisKKzogPiAiJHN0YXRlX2RpciIvaW50ZXJhY3RpdmUgfHwgZGllICJDb3VsZCBub3QgbWFyayBhcyBpbnRlcmFjdGl2ZSIKK3dyaXRlX2Jhc2ljX3N0YXRlCitpZiB0ZXN0IHQgPSAiJHByZXNlcnZlX21lcmdlcyIKK3RoZW4KKwlpZiB0ZXN0IC16ICIkcmViYXNlX3Jvb3QiCisJdGhlbgorCQlta2RpciAiJHJld3JpdHRlbiIgJiYKKwkJZm9yIGMgaW4gJChnaXQgbWVyZ2UtYmFzZSAtLWFsbCAkb3JpZ19oZWFkICR1cHN0cmVhbSkKKwkJZG8KKwkJCWVjaG8gJG9udG8gPiAiJHJld3JpdHRlbiIvJGMgfHwKKwkJCQlkaWUgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorCQlkb25lCisJZWxzZQorCQlta2RpciAiJHJld3JpdHRlbiIgJiYKKwkJZWNobyAkb250byA+ICIkcmV3cml0dGVuIi9yb290IHx8CisJCQlkaWUgIkNvdWxkIG5vdCBpbml0IHJld3JpdHRlbiBjb21taXRzIgorCWZpCisJIyBObyBjaGVycnktcGljayBiZWNhdXNlIG91ciBmaXJzdCBwYXNzIGlzIHRvIGRldGVybWluZQorCSMgcGFyZW50cyB0byByZXdyaXRlIGFuZCBza2lwcGluZyBkcm9wcGVkIGNvbW1pdHMgd291bGQKKwkjIHByZW1hdHVyZWx5IGVuZCBvdXIgcHJvYmUKKwltZXJnZXNfb3B0aW9uPQorZWxzZQorCW1lcmdlc19vcHRpb249Ii0tbm8tbWVyZ2VzIC0tY2hlcnJ5LXBpY2siCitmaQorCitzaG9ydGhlYWQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJG9yaWdfaGVhZCkKK3Nob3J0b250bz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCAkb250bykKK2lmIHRlc3QgLXogIiRyZWJhc2Vfcm9vdCIKKwkjIHRoaXMgaXMgbm93IGVxdWl2YWxlbnQgdG8gISAteiAiJHVwc3RyZWFtIgordGhlbgorCXNob3J0dXBzdHJlYW09JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJHVwc3RyZWFtKQorCXJldmlzaW9ucz0kdXBzdHJlYW0uLi4kb3JpZ19oZWFkCisJc2hvcnRyZXZpc2lvbnM9JHNob3J0dXBzdHJlYW0uLiRzaG9ydGhlYWQKK2Vsc2UKKwlyZXZpc2lvbnM9JG9udG8uLi4kb3JpZ19oZWFkCisJc2hvcnRyZXZpc2lvbnM9JHNob3J0aGVhZAorZmkKK2Zvcm1hdD0kKGdpdCBjb25maWcgLS1nZXQgcmViYXNlLmluc3RydWN0aW9uRm9ybWF0KQorIyB0aGUgJ3Jldi1saXN0IC4uIHwgc2VkJyByZXF1aXJlcyAlbSB0byBwYXJzZTsgdGhlIGluc3RydWN0aW9uIHJlcXVpcmVzICVIIHRvIHBhcnNlCitnaXQgcmV2LWxpc3QgJG1lcmdlc19vcHRpb24gLS1mb3JtYXQ9IiVtJUggJHtmb3JtYXQ6LSVzfSIgXAorCS0tcmV2ZXJzZSAtLWxlZnQtcmlnaHQgLS10b3BvLW9yZGVyIFwKKwkkcmV2aXNpb25zICR7cmVzdHJpY3RfcmV2aXNpb24rXiRyZXN0cmljdF9yZXZpc2lvbn0gfCBcCisJc2VkIC1uICJzL14+Ly9wIiB8Cit3aGlsZSByZWFkIC1yIHNoYTEgcmVzdAorZG8KKworCWlmIHRlc3QgLXogIiRrZWVwX2VtcHR5IiAmJiBpc19lbXB0eV9jb21taXQgJHNoYTEgJiYgISBpc19tZXJnZV9jb21taXQgJHNoYTEKKwl0aGVuCisJCWNvbW1lbnRfb3V0PSIkY29tbWVudF9jaGFyICIKKwllbHNlCisJCWNvbW1lbnRfb3V0PQorCWZpCisKKwlpZiB0ZXN0IHQgIT0gIiRwcmVzZXJ2ZV9tZXJnZXMiCisJdGhlbgorCQlwcmludGYgJyVzXG4nICIke2NvbW1lbnRfb3V0fXBpY2sgJHNoYTEgJHJlc3QiID4+IiR0b2RvIgorCWVsc2UKKwkJaWYgdGVzdCAteiAiJHJlYmFzZV9yb290IgorCQl0aGVuCisJCQlwcmVzZXJ2ZT10CisJCQlmb3IgcCBpbiAkKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLTEgJHNoYTEgfCBjdXQgLWQnICcgLXMgLWYyLSkKKwkJCWRvCisJCQkJaWYgdGVzdCAtZiAiJHJld3JpdHRlbiIvJHAKKwkJCQl0aGVuCisJCQkJCXByZXNlcnZlPWYKKwkJCQlmaQorCQkJZG9uZQorCQllbHNlCisJCQlwcmVzZXJ2ZT1mCisJCWZpCisJCWlmIHRlc3QgZiA9ICIkcHJlc2VydmUiCisJCXRoZW4KKwkJCXRvdWNoICIkcmV3cml0dGVuIi8kc2hhMQorCQkJcHJpbnRmICclc1xuJyAiJHtjb21tZW50X291dH1waWNrICRzaGExICRyZXN0IiA+PiIkdG9kbyIKKwkJZmkKKwlmaQorZG9uZQorCisjIFdhdGNoIGZvciBjb21taXRzIHRoYXQgYmVlbiBkcm9wcGVkIGJ5IC0tY2hlcnJ5LXBpY2sKK2lmIHRlc3QgdCA9ICIkcHJlc2VydmVfbWVyZ2VzIgordGhlbgorCW1rZGlyICIkZHJvcHBlZCIKKwkjIFNhdmUgYWxsIG5vbi1jaGVycnktcGlja2VkIGNoYW5nZXMKKwlnaXQgcmV2LWxpc3QgJHJldmlzaW9ucyAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayB8IFwKKwkJc2VkIC1uICJzL14+Ly9wIiA+ICIkc3RhdGVfZGlyIi9ub3QtY2hlcnJ5LXBpY2tzCisJIyBOb3cgYWxsIGNvbW1pdHMgYW5kIG5vdGUgd2hpY2ggb25lcyBhcmUgbWlzc2luZyBpbgorCSMgbm90LWNoZXJyeS1waWNrcyBhbmQgaGVuY2UgYmVpbmcgZHJvcHBlZAorCWdpdCByZXYtbGlzdCAkcmV2aXNpb25zIHwKKwl3aGlsZSByZWFkIHJldgorCWRvCisJCWlmIHRlc3QgLWYgIiRyZXdyaXR0ZW4iLyRyZXYgJiYgdGVzdCAiJChzYW5lX2dyZXAgIiRyZXYiICIkc3RhdGVfZGlyIi9ub3QtY2hlcnJ5LXBpY2tzKSIgPSAiIgorCQl0aGVuCisJCQkjIFVzZSAtZjIgYmVjYXVzZSBpZiByZXYtbGlzdCBpcyB0ZWxsaW5nIHVzIHRoaXMgY29tbWl0IGlzCisJCQkjIG5vdCB3b3J0aHdoaWxlLCB3ZSBkb24ndCB3YW50IHRvIHRyYWNrIGl0cyBtdWx0aXBsZSBoZWFkcywKKwkJCSMganVzdCB0aGUgaGlzdG9yeSBvZiBpdHMgZmlyc3QtcGFyZW50IGZvciBvdGhlcnMgdGhhdCB3aWxsCisJCQkjIGJlIHJlYmFzaW5nIG9uIHRvcCBvZiBpdAorCQkJZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtMSAkcmV2IHwgY3V0IC1kJyAnIC1zIC1mMiA+ICIkZHJvcHBlZCIvJHJldgorCQkJc2hhMT0kKGdpdCByZXYtbGlzdCAtMSAkcmV2KQorCQkJc2FuZV9ncmVwIC12ICJeW2Etel1bYS16XSogJHNoYTEiIDwiJHRvZG8iID4gIiR7dG9kb30yIiA7IG12ICIke3RvZG99MiIgIiR0b2RvIgorCQkJcm0gIiRyZXdyaXR0ZW4iLyRyZXYKKwkJZmkKKwlkb25lCitmaQorCit0ZXN0IC1zICIkdG9kbyIgfHwgZWNobyBub29wID4+ICIkdG9kbyIKK3Rlc3QgLW4gIiRhdXRvc3F1YXNoIiAmJiByZWFycmFuZ2Vfc3F1YXNoICIkdG9kbyIKK3Rlc3QgLW4gIiRjbWQiICYmIGFkZF9leGVjX2NvbW1hbmRzICIkdG9kbyIKKwordG9kb2NvdW50PSQoZ2l0IHN0cmlwc3BhY2UgLS1zdHJpcC1jb21tZW50cyA8IiR0b2RvIiB8IHdjIC1sKQordG9kb2NvdW50PSR7dG9kb2NvdW50IyMqIH0KKworY2F0ID4+IiR0b2RvIiA8PEVPRgorCiskY29tbWVudF9jaGFyIFJlYmFzZSAkc2hvcnRyZXZpc2lvbnMgb250byAkc2hvcnRvbnRvICgkdG9kb2NvdW50IGNvbW1hbmQocykpCitFT0YKK2FwcGVuZF90b2RvX2hlbHAKK2dpdCBzdHJpcHNwYWNlIC0tY29tbWVudC1saW5lcyA+PiIkdG9kbyIgPDxcRU9GCisKK0hvd2V2ZXIsIGlmIHlvdSByZW1vdmUgZXZlcnl0aGluZywgdGhlIHJlYmFzZSB3aWxsIGJlIGFib3J0ZWQuCisKK0VPRgorCitpZiB0ZXN0IC16ICIka2VlcF9lbXB0eSIKK3RoZW4KKwlwcmludGYgJyVzXG4nICIkY29tbWVudF9jaGFyIE5vdGUgdGhhdCBlbXB0eSBjb21taXRzIGFyZSBjb21tZW50ZWQgb3V0IiA+PiIkdG9kbyIKK2ZpCisKKworaGFzX2FjdGlvbiAiJHRvZG8iIHx8CisJcmV0dXJuIDIKKworY3AgIiR0b2RvIiAiJHRvZG8iLmJhY2t1cAorY29sbGFwc2VfdG9kb19pZHMKK2dpdF9zZXF1ZW5jZV9lZGl0b3IgIiR0b2RvIiB8fAorCWRpZV9hYm9ydCAiQ291bGQgbm90IGV4ZWN1dGUgZWRpdG9yIgorCitoYXNfYWN0aW9uICIkdG9kbyIgfHwKKwlyZXR1cm4gMgorCitjaGVja190b2RvX2xpc3QKKworZXhwYW5kX3RvZG9faWRzCisKK3Rlc3QgLWQgIiRyZXdyaXR0ZW4iIHx8IHRlc3QgLW4gIiRmb3JjZV9yZWJhc2UiIHx8IHNraXBfdW5uZWNlc3NhcnlfcGlja3MKKworY2hlY2tvdXRfb250bworZG9fcmVzdAorCit9CisjIC4uLiBhbmQgdGhlbiB3ZSBjYWxsIHRoZSB3aG9sZSB0aGluZy4KK2dpdF9yZWJhc2VfX2ludGVyYWN0aXZlCmRpZmYgLS1naXQgYS9naXQtcmViYXNlLS1tZXJnZS5zaCBiL2dpdC1yZWJhc2UtLW1lcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYzJhNmQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcmViYXNlLS1tZXJnZS5zaApAQCAtMCwwICsxLDE2NyBAQAorIyBUaGlzIHNoZWxsIHNjcmlwdCBmcmFnbWVudCBpcyBzb3VyY2VkIGJ5IGdpdC1yZWJhc2UgdG8gaW1wbGVtZW50CisjIGl0cyBtZXJnZS1iYXNlZCBub24taW50ZXJhY3RpdmUgbW9kZSB0aGF0IGNvcGVzIHdlbGwgd2l0aCByZW5hbWVkCisjIGZpbGVzLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgSnVuaW8gQyBIYW1hbm8uCisjCisKK3ByZWM9NAorCityZWFkX3N0YXRlICgpIHsKKwlvbnRvX25hbWU9JChjYXQgIiRzdGF0ZV9kaXIiL29udG9fbmFtZSkgJiYKKwllbmQ9JChjYXQgIiRzdGF0ZV9kaXIiL2VuZCkgJiYKKwltc2dudW09JChjYXQgIiRzdGF0ZV9kaXIiL21zZ251bSkKK30KKworY29udGludWVfbWVyZ2UgKCkgeworCXRlc3QgLWQgIiRzdGF0ZV9kaXIiIHx8IGRpZSAiJHN0YXRlX2RpciBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QiCisKKwl1bm1lcmdlZD0kKGdpdCBscy1maWxlcyAtdSkKKwlpZiB0ZXN0IC1uICIkdW5tZXJnZWQiCisJdGhlbgorCQllY2hvICJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4IgorCQllY2hvICJkaWQgeW91IGZvcmdldCB0byB1c2UgZ2l0IGFkZD8iCisJCWRpZSAiJHJlc29sdmVtc2ciCisJZmkKKworCWNtdD0kKGNhdCAiJHN0YXRlX2Rpci9jdXJyZW50IikKKwlpZiAhIGdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcyBIRUFEIC0tCisJdGhlbgorCQlpZiAhIGdpdCBjb21taXQgJHtncGdfc2lnbl9vcHQ6KyIkZ3BnX3NpZ25fb3B0In0gLS1uby12ZXJpZnkgLUMgIiRjbXQiCisJCXRoZW4KKwkJCWVjaG8gIkNvbW1pdCBmYWlsZWQsIHBsZWFzZSBkbyBub3QgY2FsbCBcImdpdCBjb21taXRcIiIKKwkJCWVjaG8gImRpcmVjdGx5LCBidXQgaW5zdGVhZCBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzogIgorCQkJZGllICIkcmVzb2x2ZW1zZyIKKwkJZmkKKwkJaWYgdGVzdCAteiAiJEdJVF9RVUlFVCIKKwkJdGhlbgorCQkJcHJpbnRmICJDb21taXR0ZWQ6ICUwJHtwcmVjfWQgIiAkbXNnbnVtCisJCWZpCisJCWVjaG8gIiRjbXQgJChnaXQgcmV2LXBhcnNlIEhFQUReMCkiID4+ICIkc3RhdGVfZGlyL3Jld3JpdHRlbiIKKwllbHNlCisJCWlmIHRlc3QgLXogIiRHSVRfUVVJRVQiCisJCXRoZW4KKwkJCXByaW50ZiAiQWxyZWFkeSBhcHBsaWVkOiAlMCR7cHJlY31kICIgJG1zZ251bQorCQlmaQorCWZpCisJdGVzdCAteiAiJEdJVF9RVUlFVCIgJiYKKwlHSVRfUEFHRVI9JycgZ2l0IGxvZyAtLWZvcm1hdD0lcyAtMSAiJGNtdCIKKworCSMgb250byB0aGUgbmV4dCBwYXRjaDoKKwltc2dudW09JCgoJG1zZ251bSArIDEpKQorCWVjaG8gIiRtc2dudW0iID4iJHN0YXRlX2Rpci9tc2dudW0iCit9CisKK2NhbGxfbWVyZ2UgKCkgeworCW1zZ251bT0iJDEiCisJZWNobyAiJG1zZ251bSIgPiIkc3RhdGVfZGlyL21zZ251bSIKKwljbXQ9IiQoY2F0ICIkc3RhdGVfZGlyL2NtdC4kbXNnbnVtIikiCisJZWNobyAiJGNtdCIgPiAiJHN0YXRlX2Rpci9jdXJyZW50IgorCWhkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorCWNtdF9uYW1lPSQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEIDI+IC9kZXYvbnVsbCB8fCBlY2hvIEhFQUQpCisJZXZhbCBHSVRIRUFEXyRjbXQ9JyIke2NtdF9uYW1lIyNyZWZzL2hlYWRzL31+JCgoJGVuZCAtICRtc2dudW0pKSInCisJZXZhbCBHSVRIRUFEXyRoZD0nJG9udG9fbmFtZScKKwlleHBvcnQgR0lUSEVBRF8kY210IEdJVEhFQURfJGhkCisJaWYgdGVzdCAtbiAiJEdJVF9RVUlFVCIKKwl0aGVuCisJCUdJVF9NRVJHRV9WRVJCT1NJVFk9MSAmJiBleHBvcnQgR0lUX01FUkdFX1ZFUkJPU0lUWQorCWZpCisJdGVzdCAteiAiJHN0cmF0ZWd5IiAmJiBzdHJhdGVneT1yZWN1cnNpdmUKKwlldmFsICdnaXQtbWVyZ2UtJHN0cmF0ZWd5JyAkc3RyYXRlZ3lfb3B0cyAnIiRjbXReIiAtLSAiJGhkIiAiJGNtdCInCisJcnY9JD8KKwljYXNlICIkcnYiIGluCisJMCkKKwkJdW5zZXQgR0lUSEVBRF8kY210IEdJVEhFQURfJGhkCisJCXJldHVybgorCQk7OworCTEpCisJCWdpdCByZXJlcmUgJGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlCisJCWRpZSAiJHJlc29sdmVtc2ciCisJCTs7CisJMikKKwkJZWNobyAiU3RyYXRlZ3k6ICRzdHJhdGVneSBmYWlsZWQsIHRyeSBhbm90aGVyIiAxPiYyCisJCWRpZSAiJHJlc29sdmVtc2ciCisJCTs7CisJKikKKwkJZGllICJVbmtub3duIGV4aXQgY29kZSAoJHJ2KSBmcm9tIGNvbW1hbmQ6IiBcCisJCQkiZ2l0LW1lcmdlLSRzdHJhdGVneSAkY210XiAtLSBIRUFEICRjbXQiCisJCTs7CisJZXNhYworfQorCitmaW5pc2hfcmJfbWVyZ2UgKCkgeworCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCisJaWYgdGVzdCAtcyAiJHN0YXRlX2RpciIvcmV3cml0dGVuCisJdGhlbgorCQlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPXJlYmFzZSA8IiRzdGF0ZV9kaXIiL3Jld3JpdHRlbgorCQlob29rPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBob29rcy9wb3N0LXJld3JpdGUpIgorCQl0ZXN0IC14ICIkaG9vayIgJiYgIiRob29rIiByZWJhc2UgPCIkc3RhdGVfZGlyIi9yZXdyaXR0ZW4KKwlmaQorCXNheSBBbGwgZG9uZS4KK30KKworIyBUaGUgd2hvbGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGlzIHJ1biBieSBkb3Qtc291cmNpbmcgaXQgZnJvbQorIyBpbnNpZGUgYSBzaGVsbCBmdW5jdGlvbi4gIEl0IHVzZWQgdG8gYmUgdGhhdCAicmV0dXJuInMgd2Ugc2VlCisjIGJlbG93IHdlcmUgbm90IGluc2lkZSBhbnkgZnVuY3Rpb24sIGFuZCBleHBlY3RlZCB0byByZXR1cm4KKyMgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgZG90LXNvdXJjZWQgdXMuCisjCisjIEhvd2V2ZXIsIEZyZWVCU0QgL2Jpbi9zaCBtaXNiZWhhdmVzIG9uIHN1Y2ggYSBjb25zdHJ1Y3QgYW5kCisjIGNvbnRpbnVlcyB0byBydW4gdGhlIHN0YXRlbWVudHMgdGhhdCBmb2xsb3cgc3VjaCBhICJyZXR1cm4iLgorIyBBcyBhIHdvcmstYXJvdW5kLCB3ZSBpbnRyb2R1Y2UgYW4gZXh0cmEgbGF5ZXIgb2YgYSBmdW5jdGlvbgorIyBoZXJlLCBhbmQgaW1tZWRpYXRlbHkgY2FsbCBpdCBhZnRlciBkZWZpbmluZyBpdC4KK2dpdF9yZWJhc2VfX21lcmdlICgpIHsKKworY2FzZSAiJGFjdGlvbiIgaW4KK2NvbnRpbnVlKQorCXJlYWRfc3RhdGUKKwljb250aW51ZV9tZXJnZQorCXdoaWxlIHRlc3QgIiRtc2dudW0iIC1sZSAiJGVuZCIKKwlkbworCQljYWxsX21lcmdlICIkbXNnbnVtIgorCQljb250aW51ZV9tZXJnZQorCWRvbmUKKwlmaW5pc2hfcmJfbWVyZ2UKKwlyZXR1cm4KKwk7Oworc2tpcCkKKwlyZWFkX3N0YXRlCisJZ2l0IHJlcmVyZSBjbGVhcgorCW1zZ251bT0kKCgkbXNnbnVtICsgMSkpCisJd2hpbGUgdGVzdCAiJG1zZ251bSIgLWxlICIkZW5kIgorCWRvCisJCWNhbGxfbWVyZ2UgIiRtc2dudW0iCisJCWNvbnRpbnVlX21lcmdlCisJZG9uZQorCWZpbmlzaF9yYl9tZXJnZQorCXJldHVybgorCTs7Citlc2FjCisKK21rZGlyIC1wICIkc3RhdGVfZGlyIgorZWNobyAiJG9udG9fbmFtZSIgPiAiJHN0YXRlX2Rpci9vbnRvX25hbWUiCit3cml0ZV9iYXNpY19zdGF0ZQorCittc2dudW09MAorZm9yIGNtdCBpbiAkKGdpdCByZXYtbGlzdCAtLXJldmVyc2UgLS1uby1tZXJnZXMgIiRyZXZpc2lvbnMiKQorZG8KKwltc2dudW09JCgoJG1zZ251bSArIDEpKQorCWVjaG8gIiRjbXQiID4gIiRzdGF0ZV9kaXIvY210LiRtc2dudW0iCitkb25lCisKK2VjaG8gMSA+IiRzdGF0ZV9kaXIvbXNnbnVtIgorZWNobyAkbXNnbnVtID4iJHN0YXRlX2Rpci9lbmQiCisKK2VuZD0kbXNnbnVtCittc2dudW09MQorCit3aGlsZSB0ZXN0ICIkbXNnbnVtIiAtbGUgIiRlbmQiCitkbworCWNhbGxfbWVyZ2UgIiRtc2dudW0iCisJY29udGludWVfbWVyZ2UKK2RvbmUKKworZmluaXNoX3JiX21lcmdlCisKK30KKyMgLi4uIGFuZCB0aGVuIHdlIGNhbGwgdGhlIHdob2xlIHRoaW5nLgorZ2l0X3JlYmFzZV9fbWVyZ2UKZGlmZiAtLWdpdCBhL2dpdC1yZWJhc2Uuc2ggYi9naXQtcmViYXNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmN2JhNWYKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcmViYXNlLnNoCkBAIC0wLDAgKzEsNjM2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vLgorIworCitTVUJESVJFQ1RPUllfT0s9WWVzCitPUFRJT05TX0tFRVBEQVNIREFTSD0KK09QVElPTlNfU1RVQ0tMT05HPXQKK09QVElPTlNfU1BFQz0iXAorZ2l0IHJlYmFzZSBbLWldIFtvcHRpb25zXSBbLS1leGVjIDxjbWQ+XSBbLS1vbnRvIDxuZXdiYXNlPl0gWzx1cHN0cmVhbT5dIFs8YnJhbmNoPl0KK2dpdCByZWJhc2UgWy1pXSBbb3B0aW9uc10gWy0tZXhlYyA8Y21kPl0gWy0tb250byA8bmV3YmFzZT5dIC0tcm9vdCBbPGJyYW5jaD5dCitnaXQtcmViYXNlIC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwIHwgLS1lZGl0LXRvZG8KKy0tCisgQXZhaWxhYmxlIG9wdGlvbnMgYXJlCit2LHZlcmJvc2UhICAgICAgICAgZGlzcGxheSBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbQorcSxxdWlldCEgICAgICAgICAgIGJlIHF1aWV0LiBpbXBsaWVzIC0tbm8tc3RhdAorYXV0b3N0YXNoICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc3Rhc2gvc3Rhc2ggcG9wIGJlZm9yZSBhbmQgYWZ0ZXIKK2ZvcmstcG9pbnQgICAgICAgICB1c2UgJ21lcmdlLWJhc2UgLS1mb3JrLXBvaW50JyB0byByZWZpbmUgdXBzdHJlYW0KK29udG89ISAgICAgICAgICAgICByZWJhc2Ugb250byBnaXZlbiBicmFuY2ggaW5zdGVhZCBvZiB1cHN0cmVhbQorcCxwcmVzZXJ2ZS1tZXJnZXMhIHRyeSB0byByZWNyZWF0ZSBtZXJnZXMgaW5zdGVhZCBvZiBpZ25vcmluZyB0aGVtCitzLHN0cmF0ZWd5PSEgICAgICAgdXNlIHRoZSBnaXZlbiBtZXJnZSBzdHJhdGVneQorbm8tZmYhICAgICAgICAgICAgIGNoZXJyeS1waWNrIGFsbCBjb21taXRzLCBldmVuIGlmIHVuY2hhbmdlZAorbSxtZXJnZSEgICAgICAgICAgIHVzZSBtZXJnaW5nIHN0cmF0ZWdpZXMgdG8gcmViYXNlCitpLGludGVyYWN0aXZlISAgICAgbGV0IHRoZSB1c2VyIGVkaXQgdGhlIGxpc3Qgb2YgY29tbWl0cyB0byByZWJhc2UKK3gsZXhlYz0hICAgICAgICAgICBhZGQgZXhlYyBsaW5lcyBhZnRlciBlYWNoIGNvbW1pdCBvZiB0aGUgZWRpdGFibGUgbGlzdAorayxrZWVwLWVtcHR5CSAgIHByZXNlcnZlIGVtcHR5IGNvbW1pdHMgZHVyaW5nIHJlYmFzZQorZixmb3JjZS1yZWJhc2UhICAgIGZvcmNlIHJlYmFzZSBldmVuIGlmIGJyYW5jaCBpcyB1cCB0byBkYXRlCitYLHN0cmF0ZWd5LW9wdGlvbj0hIHBhc3MgdGhlIGFyZ3VtZW50IHRocm91Z2ggdG8gdGhlIG1lcmdlIHN0cmF0ZWd5CitzdGF0ISAgICAgICAgICAgICAgZGlzcGxheSBhIGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbQorbixuby1zdGF0ISAgICAgICAgIGRvIG5vdCBzaG93IGRpZmZzdGF0IG9mIHdoYXQgY2hhbmdlZCB1cHN0cmVhbQordmVyaWZ5ICAgICAgICAgICAgIGFsbG93IHByZS1yZWJhc2UgaG9vayB0byBydW4KK3JlcmVyZS1hdXRvdXBkYXRlICBhbGxvdyByZXJlcmUgdG8gdXBkYXRlIGluZGV4IHdpdGggcmVzb2x2ZWQgY29uZmxpY3RzCityb290ISAgICAgICAgICAgICAgcmViYXNlIGFsbCByZWFjaGFibGUgY29tbWl0cyB1cCB0byB0aGUgcm9vdChzKQorYXV0b3NxdWFzaCAgICAgICAgIG1vdmUgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggc3F1YXNoIS9maXh1cCEgdW5kZXIgLWkKK2NvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlISBwYXNzZWQgdG8gJ2dpdCBhbScKK2lnbm9yZS1kYXRlISAgICAgICBwYXNzZWQgdG8gJ2dpdCBhbScKK3doaXRlc3BhY2U9ISAgICAgICBwYXNzZWQgdG8gJ2dpdCBhcHBseScKK2lnbm9yZS13aGl0ZXNwYWNlISBwYXNzZWQgdG8gJ2dpdCBhcHBseScKK0M9ISAgICAgICAgICAgICAgICBwYXNzZWQgdG8gJ2dpdCBhcHBseScKK1MsZ3BnLXNpZ24/ICAgICAgICBHUEctc2lnbiBjb21taXRzCisgQWN0aW9uczoKK2NvbnRpbnVlISAgICAgICAgICBjb250aW51ZQorYWJvcnQhICAgICAgICAgICAgIGFib3J0IGFuZCBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaAorc2tpcCEgICAgICAgICAgICAgIHNraXAgY3VycmVudCBwYXRjaCBhbmQgY29udGludWUKK2VkaXQtdG9kbyEgICAgICAgICBlZGl0IHRoZSB0b2RvIGxpc3QgZHVyaW5nIGFuIGludGVyYWN0aXZlIHJlYmFzZQorIgorLiBnaXQtc2gtc2V0dXAKKy4gZ2l0LXNoLWkxOG4KK3NldF9yZWZsb2dfYWN0aW9uIHJlYmFzZQorcmVxdWlyZV93b3JrX3RyZWVfZXhpc3RzCitjZF90b190b3BsZXZlbAorCitMRj0nCisnCitva190b19za2lwX3ByZV9yZWJhc2U9CityZXNvbHZlbXNnPSIKKyQoZ2V0dGV4dCAnV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIi4KK0lmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gImdpdCByZWJhc2UgLS1za2lwIiBpbnN0ZWFkLgorVG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcmViYXNpbmcsIHJ1biAiZ2l0IHJlYmFzZSAtLWFib3J0Ii4nKQorIgordW5zZXQgb250bwordW5zZXQgcmVzdHJpY3RfcmV2aXNpb24KK2NtZD0KK3N0cmF0ZWd5PQorc3RyYXRlZ3lfb3B0cz0KK2RvX21lcmdlPQorbWVyZ2VfZGlyPSIkR0lUX0RJUiIvcmViYXNlLW1lcmdlCithcHBseV9kaXI9IiRHSVRfRElSIi9yZWJhc2UtYXBwbHkKK3ZlcmJvc2U9CitkaWZmc3RhdD0KK3Rlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgcmViYXNlLnN0YXQpIiA9IHRydWUgJiYgZGlmZnN0YXQ9dAorYXV0b3N0YXNoPSIkKGdpdCBjb25maWcgLS1ib29sIHJlYmFzZS5hdXRvc3Rhc2ggfHwgZWNobyBmYWxzZSkiCitmb3JrX3BvaW50PWF1dG8KK2dpdF9hbV9vcHQ9CityZWJhc2Vfcm9vdD0KK2ZvcmNlX3JlYmFzZT0KK2FsbG93X3JlcmVyZV9hdXRvdXBkYXRlPQorIyBOb24tZW1wdHkgaWYgYSByZWJhc2Ugd2FzIGluIHByb2dyZXNzIHdoZW4gJ2dpdCByZWJhc2UnIHdhcyBpbnZva2VkCitpbl9wcm9ncmVzcz0KKyMgT25lIG9mIHthbSwgbWVyZ2UsIGludGVyYWN0aXZlfQordHlwZT0KKyMgT25lIG9mIHsiJEdJVF9ESVIiL3JlYmFzZS1hcHBseSwgIiRHSVRfRElSIi9yZWJhc2UtbWVyZ2V9CitzdGF0ZV9kaXI9CisjIE9uZSBvZiB7JycsIGNvbnRpbnVlLCBza2lwLCBhYm9ydH0sIGFzIHBhcnNlZCBmcm9tIGNvbW1hbmQgbGluZQorYWN0aW9uPQorcHJlc2VydmVfbWVyZ2VzPQorYXV0b3NxdWFzaD0KK2tlZXBfZW1wdHk9Cit0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIHJlYmFzZS5hdXRvc3F1YXNoKSIgPSAidHJ1ZSIgJiYgYXV0b3NxdWFzaD10CitncGdfc2lnbl9vcHQ9CisKK3JlYWRfYmFzaWNfc3RhdGUgKCkgeworCXRlc3QgLWYgIiRzdGF0ZV9kaXIvaGVhZC1uYW1lIiAmJgorCXRlc3QgLWYgIiRzdGF0ZV9kaXIvb250byIgJiYKKwloZWFkX25hbWU9JChjYXQgIiRzdGF0ZV9kaXIiL2hlYWQtbmFtZSkgJiYKKwlvbnRvPSQoY2F0ICIkc3RhdGVfZGlyIi9vbnRvKSAmJgorCSMgV2UgYWx3YXlzIHdyaXRlIHRvIG9yaWctaGVhZCwgYnV0IGludGVyYWN0aXZlIHJlYmFzZSB1c2VkIHRvIHdyaXRlIHRvCisJIyBoZWFkLiBGYWxsIGJhY2sgdG8gcmVhZGluZyBmcm9tIGhlYWQgdG8gY292ZXIgZm9yIHRoZSBjYXNlIHRoYXQgdGhlCisJIyB1c2VyIHVwZ3JhZGVkIGdpdCB3aXRoIGFuIG9uZ29pbmcgaW50ZXJhY3RpdmUgcmViYXNlLgorCWlmIHRlc3QgLWYgIiRzdGF0ZV9kaXIiL29yaWctaGVhZAorCXRoZW4KKwkJb3JpZ19oZWFkPSQoY2F0ICIkc3RhdGVfZGlyIi9vcmlnLWhlYWQpCisJZWxzZQorCQlvcmlnX2hlYWQ9JChjYXQgIiRzdGF0ZV9kaXIiL2hlYWQpCisJZmkgJiYKKwlHSVRfUVVJRVQ9JChjYXQgIiRzdGF0ZV9kaXIiL3F1aWV0KSAmJgorCXRlc3QgLWYgIiRzdGF0ZV9kaXIiL3ZlcmJvc2UgJiYgdmVyYm9zZT10CisJdGVzdCAtZiAiJHN0YXRlX2RpciIvc3RyYXRlZ3kgJiYgc3RyYXRlZ3k9IiQoY2F0ICIkc3RhdGVfZGlyIi9zdHJhdGVneSkiCisJdGVzdCAtZiAiJHN0YXRlX2RpciIvc3RyYXRlZ3lfb3B0cyAmJgorCQlzdHJhdGVneV9vcHRzPSIkKGNhdCAiJHN0YXRlX2RpciIvc3RyYXRlZ3lfb3B0cykiCisJdGVzdCAtZiAiJHN0YXRlX2RpciIvYWxsb3dfcmVyZXJlX2F1dG91cGRhdGUgJiYKKwkJYWxsb3dfcmVyZXJlX2F1dG91cGRhdGU9IiQoY2F0ICIkc3RhdGVfZGlyIi9hbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSkiCisJdGVzdCAtZiAiJHN0YXRlX2RpciIvZ3BnX3NpZ25fb3B0ICYmCisJCWdwZ19zaWduX29wdD0iJChjYXQgIiRzdGF0ZV9kaXIiL2dwZ19zaWduX29wdCkiCit9CisKK3dyaXRlX2Jhc2ljX3N0YXRlICgpIHsKKwllY2hvICIkaGVhZF9uYW1lIiA+ICIkc3RhdGVfZGlyIi9oZWFkLW5hbWUgJiYKKwllY2hvICIkb250byIgPiAiJHN0YXRlX2RpciIvb250byAmJgorCWVjaG8gIiRvcmlnX2hlYWQiID4gIiRzdGF0ZV9kaXIiL29yaWctaGVhZCAmJgorCWVjaG8gIiRHSVRfUVVJRVQiID4gIiRzdGF0ZV9kaXIiL3F1aWV0ICYmCisJdGVzdCB0ID0gIiR2ZXJib3NlIiAmJiA6ID4gIiRzdGF0ZV9kaXIiL3ZlcmJvc2UKKwl0ZXN0IC1uICIkc3RyYXRlZ3kiICYmIGVjaG8gIiRzdHJhdGVneSIgPiAiJHN0YXRlX2RpciIvc3RyYXRlZ3kKKwl0ZXN0IC1uICIkc3RyYXRlZ3lfb3B0cyIgJiYgZWNobyAiJHN0cmF0ZWd5X29wdHMiID4gXAorCQkiJHN0YXRlX2RpciIvc3RyYXRlZ3lfb3B0cworCXRlc3QgLW4gIiRhbGxvd19yZXJlcmVfYXV0b3VwZGF0ZSIgJiYgZWNobyAiJGFsbG93X3JlcmVyZV9hdXRvdXBkYXRlIiA+IFwKKwkJIiRzdGF0ZV9kaXIiL2FsbG93X3JlcmVyZV9hdXRvdXBkYXRlCisJdGVzdCAtbiAiJGdwZ19zaWduX29wdCIgJiYgZWNobyAiJGdwZ19zaWduX29wdCIgPiAiJHN0YXRlX2RpciIvZ3BnX3NpZ25fb3B0Cit9CisKK291dHB1dCAoKSB7CisJY2FzZSAiJHZlcmJvc2UiIGluCisJJycpCisJCW91dHB1dD0kKCIkQCIgMj4mMSApCisJCXN0YXR1cz0kPworCQl0ZXN0ICRzdGF0dXMgIT0gMCAmJiBwcmludGYgIiVzXG4iICIkb3V0cHV0IgorCQlyZXR1cm4gJHN0YXR1cworCQk7OworCSopCisJCSIkQCIKKwkJOzsKKwllc2FjCit9CisKK21vdmVfdG9fb3JpZ2luYWxfYnJhbmNoICgpIHsKKwljYXNlICIkaGVhZF9uYW1lIiBpbgorCXJlZnMvKikKKwkJbWVzc2FnZT0icmViYXNlIGZpbmlzaGVkOiAkaGVhZF9uYW1lIG9udG8gJG9udG8iCisJCWdpdCB1cGRhdGUtcmVmIC1tICIkbWVzc2FnZSIgXAorCQkJJGhlYWRfbmFtZSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJG9yaWdfaGVhZCAmJgorCQlnaXQgc3ltYm9saWMtcmVmIFwKKwkJCS1tICJyZWJhc2UgZmluaXNoZWQ6IHJldHVybmluZyB0byAkaGVhZF9uYW1lIiBcCisJCQlIRUFEICRoZWFkX25hbWUgfHwKKwkJZGllICIkKGdldHRleHQgIkNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJGhlYWRfbmFtZSIpIgorCQk7OworCWVzYWMKK30KKworYXBwbHlfYXV0b3N0YXNoICgpIHsKKwlpZiB0ZXN0IC1mICIkc3RhdGVfZGlyL2F1dG9zdGFzaCIKKwl0aGVuCisJCXN0YXNoX3NoYTE9JChjYXQgIiRzdGF0ZV9kaXIvYXV0b3N0YXNoIikKKwkJaWYgZ2l0IHN0YXNoIGFwcGx5ICRzdGFzaF9zaGExIDI+JjEgPi9kZXYvbnVsbAorCQl0aGVuCisJCQllY2hvICIkKGdldHRleHQgJ0FwcGxpZWQgYXV0b3N0YXNoLicpIgorCQllbHNlCisJCQlnaXQgc3Rhc2ggc3RvcmUgLW0gImF1dG9zdGFzaCIgLXEgJHN0YXNoX3NoYTEgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIkNhbm5vdCBzdG9yZSBcJHN0YXNoX3NoYTEiKSIKKwkJCWdldHRleHQgJ0FwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuCitZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLgorWW91IGNhbiBydW4gImdpdCBzdGFzaCBwb3AiIG9yICJnaXQgc3Rhc2ggZHJvcCIgYXQgYW55IHRpbWUuCisnCisJCWZpCisJZmkKK30KKworZmluaXNoX3JlYmFzZSAoKSB7CisJYXBwbHlfYXV0b3N0YXNoICYmCisJZ2l0IGdjIC0tYXV0byAmJgorCXJtIC1yZiAiJHN0YXRlX2RpciIKK30KKworcnVuX3NwZWNpZmljX3JlYmFzZSAoKSB7CisJaWYgWyAiJGludGVyYWN0aXZlX3JlYmFzZSIgPSBpbXBsaWVkIF07IHRoZW4KKwkJR0lUX0VESVRPUj06CisJCWV4cG9ydCBHSVRfRURJVE9SCisJCWF1dG9zcXVhc2g9CisJZmkKKwkuIGdpdC1yZWJhc2UtLSR0eXBlCisJcmV0PSQ/CisJaWYgdGVzdCAkcmV0IC1lcSAwCisJdGhlbgorCQlmaW5pc2hfcmViYXNlCisJZWxpZiB0ZXN0ICRyZXQgLWVxIDIgIyBzcGVjaWFsIGV4aXQgc3RhdHVzIGZvciByZWJhc2UgLWkKKwl0aGVuCisJCWFwcGx5X2F1dG9zdGFzaCAmJgorCQlybSAtcmYgIiRzdGF0ZV9kaXIiICYmCisJCWRpZSAiTm90aGluZyB0byBkbyIKKwlmaQorCWV4aXQgJHJldAorfQorCitydW5fcHJlX3JlYmFzZV9ob29rICgpIHsKKwlpZiB0ZXN0IC16ICIkb2tfdG9fc2tpcF9wcmVfcmViYXNlIiAmJgorCSAgIHRlc3QgLXggIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIGhvb2tzL3ByZS1yZWJhc2UpIgorCXRoZW4KKwkJIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIGhvb2tzL3ByZS1yZWJhc2UpIiAkezErIiRAIn0gfHwKKwkJZGllICIkKGdldHRleHQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIikiCisJZmkKK30KKwordGVzdCAtZiAiJGFwcGx5X2RpciIvYXBwbHlpbmcgJiYKKwlkaWUgIiQoZ2V0dGV4dCAiSXQgbG9va3MgbGlrZSBnaXQtYW0gaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIikiCisKK2lmIHRlc3QgLWQgIiRhcHBseV9kaXIiCit0aGVuCisJdHlwZT1hbQorCXN0YXRlX2Rpcj0iJGFwcGx5X2RpciIKK2VsaWYgdGVzdCAtZCAiJG1lcmdlX2RpciIKK3RoZW4KKwlpZiB0ZXN0IC1mICIkbWVyZ2VfZGlyIi9pbnRlcmFjdGl2ZQorCXRoZW4KKwkJdHlwZT1pbnRlcmFjdGl2ZQorCQlpbnRlcmFjdGl2ZV9yZWJhc2U9ZXhwbGljaXQKKwllbHNlCisJCXR5cGU9bWVyZ2UKKwlmaQorCXN0YXRlX2Rpcj0iJG1lcmdlX2RpciIKK2ZpCit0ZXN0IC1uICIkdHlwZSIgJiYgaW5fcHJvZ3Jlc3M9dAorCit0b3RhbF9hcmdjPSQjCit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisJY2FzZSAiJDEiIGluCisJLS1uby12ZXJpZnkpCisJCW9rX3RvX3NraXBfcHJlX3JlYmFzZT15ZXMKKwkJOzsKKwktLXZlcmlmeSkKKwkJb2tfdG9fc2tpcF9wcmVfcmViYXNlPQorCQk7OworCS0tY29udGludWV8LS1za2lwfC0tYWJvcnR8LS1lZGl0LXRvZG8pCisJCXRlc3QgJHRvdGFsX2FyZ2MgLWVxIDIgfHwgdXNhZ2UKKwkJYWN0aW9uPSR7MSMjLS19CisJCTs7CisJLS1vbnRvPSopCisJCW9udG89IiR7MSMtLW9udG89fSIKKwkJOzsKKwktLWV4ZWM9KikKKwkJY21kPSIke2NtZH1leGVjICR7MSMtLWV4ZWM9fSR7TEZ9IgorCQk7OworCS0taW50ZXJhY3RpdmUpCisJCWludGVyYWN0aXZlX3JlYmFzZT1leHBsaWNpdAorCQk7OworCS0ta2VlcC1lbXB0eSkKKwkJa2VlcF9lbXB0eT15ZXMKKwkJOzsKKwktLXByZXNlcnZlLW1lcmdlcykKKwkJcHJlc2VydmVfbWVyZ2VzPXQKKwkJdGVzdCAteiAiJGludGVyYWN0aXZlX3JlYmFzZSIgJiYgaW50ZXJhY3RpdmVfcmViYXNlPWltcGxpZWQKKwkJOzsKKwktLWF1dG9zcXVhc2gpCisJCWF1dG9zcXVhc2g9dAorCQk7OworCS0tbm8tYXV0b3NxdWFzaCkKKwkJYXV0b3NxdWFzaD0KKwkJOzsKKwktLWZvcmstcG9pbnQpCisJCWZvcmtfcG9pbnQ9dAorCQk7OworCS0tbm8tZm9yay1wb2ludCkKKwkJZm9ya19wb2ludD0KKwkJOzsKKwktLW1lcmdlKQorCQlkb19tZXJnZT10CisJCTs7CisJLS1zdHJhdGVneS1vcHRpb249KikKKwkJc3RyYXRlZ3lfb3B0cz0iJHN0cmF0ZWd5X29wdHMgJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIi0tJHsxIy0tc3RyYXRlZ3ktb3B0aW9uPX0iKSIKKwkJZG9fbWVyZ2U9dAorCQl0ZXN0IC16ICIkc3RyYXRlZ3kiICYmIHN0cmF0ZWd5PXJlY3Vyc2l2ZQorCQk7OworCS0tc3RyYXRlZ3k9KikKKwkJc3RyYXRlZ3k9IiR7MSMtLXN0cmF0ZWd5PX0iCisJCWRvX21lcmdlPXQKKwkJOzsKKwktLW5vLXN0YXQpCisJCWRpZmZzdGF0PQorCQk7OworCS0tc3RhdCkKKwkJZGlmZnN0YXQ9dAorCQk7OworCS0tYXV0b3N0YXNoKQorCQlhdXRvc3Rhc2g9dHJ1ZQorCQk7OworCS0tbm8tYXV0b3N0YXNoKQorCQlhdXRvc3Rhc2g9ZmFsc2UKKwkJOzsKKwktLXZlcmJvc2UpCisJCXZlcmJvc2U9dAorCQlkaWZmc3RhdD10CisJCUdJVF9RVUlFVD0KKwkJOzsKKwktLXF1aWV0KQorCQlHSVRfUVVJRVQ9dAorCQlnaXRfYW1fb3B0PSIkZ2l0X2FtX29wdCAtcSIKKwkJdmVyYm9zZT0KKwkJZGlmZnN0YXQ9CisJCTs7CisJLS13aGl0ZXNwYWNlPSopCisJCWdpdF9hbV9vcHQ9IiRnaXRfYW1fb3B0IC0td2hpdGVzcGFjZT0kezEjLS13aGl0ZXNwYWNlPX0iCisJCWNhc2UgIiR7MSMtLXdoaXRlc3BhY2U9fSIgaW4KKwkJZml4fHN0cmlwKQorCQkJZm9yY2VfcmViYXNlPXQKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwktLWlnbm9yZS13aGl0ZXNwYWNlKQorCQlnaXRfYW1fb3B0PSIkZ2l0X2FtX29wdCAkMSIKKwkJOzsKKwktLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlfC0taWdub3JlLWRhdGUpCisJCWdpdF9hbV9vcHQ9IiRnaXRfYW1fb3B0ICQxIgorCQlmb3JjZV9yZWJhc2U9dAorCQk7OworCS1DKikKKwkJZ2l0X2FtX29wdD0iJGdpdF9hbV9vcHQgJDEiCisJCTs7CisJLS1yb290KQorCQlyZWJhc2Vfcm9vdD10CisJCTs7CisJLS1mb3JjZS1yZWJhc2V8LS1uby1mZikKKwkJZm9yY2VfcmViYXNlPXQKKwkJOzsKKwktLXJlcmVyZS1hdXRvdXBkYXRlfC0tbm8tcmVyZXJlLWF1dG91cGRhdGUpCisJCWFsbG93X3JlcmVyZV9hdXRvdXBkYXRlPSIkMSIKKwkJOzsKKwktLWdwZy1zaWduKQorCQlncGdfc2lnbl9vcHQ9LVMKKwkJOzsKKwktLWdwZy1zaWduPSopCisJCWdwZ19zaWduX29wdD0iLVMkezEjLS1ncGctc2lnbj19IgorCQk7OworCS0tKQorCQlzaGlmdAorCQlicmVhaworCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQordGVzdCAkIyAtZ3QgMiAmJiB1c2FnZQorCitpZiB0ZXN0IC1uICIkY21kIiAmJgorICAgdGVzdCAiJGludGVyYWN0aXZlX3JlYmFzZSIgIT0gZXhwbGljaXQKK3RoZW4KKwlkaWUgIiQoZ2V0dGV4dCAiVGhlIC0tZXhlYyBvcHRpb24gbXVzdCBiZSB1c2VkIHdpdGggdGhlIC0taW50ZXJhY3RpdmUgb3B0aW9uIikiCitmaQorCitpZiB0ZXN0IC1uICIkYWN0aW9uIgordGhlbgorCXRlc3QgLXogIiRpbl9wcm9ncmVzcyIgJiYgZGllICIkKGdldHRleHQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iKSIKKwkjIE9ubHkgaW50ZXJhY3RpdmUgcmViYXNlIHVzZXMgZGV0YWlsZWQgcmVmbG9nIG1lc3NhZ2VzCisJaWYgdGVzdCAiJHR5cGUiID0gaW50ZXJhY3RpdmUgJiYgdGVzdCAiJEdJVF9SRUZMT0dfQUNUSU9OIiA9IHJlYmFzZQorCXRoZW4KKwkJR0lUX1JFRkxPR19BQ1RJT049InJlYmFzZSAtaSAoJGFjdGlvbikiCisJCWV4cG9ydCBHSVRfUkVGTE9HX0FDVElPTgorCWZpCitmaQorCitpZiB0ZXN0ICIkYWN0aW9uIiA9ICJlZGl0LXRvZG8iICYmIHRlc3QgIiR0eXBlIiAhPSAiaW50ZXJhY3RpdmUiCit0aGVuCisJZGllICIkKGdldHRleHQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIpIgorZmkKKworY2FzZSAiJGFjdGlvbiIgaW4KK2NvbnRpbnVlKQorCSMgU2FuaXR5IGNoZWNrCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4vZGV2L251bGwgfHwKKwkJZGllICIkKGdldHRleHQgIkNhbm5vdCByZWFkIEhFQUQiKSIKKwlnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLWlnbm9yZS1zdWJtb2R1bGVzIHx8IHsKKwkJZWNobyAiJChnZXR0ZXh0ICJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW4KK21hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIikiCisJCWV4aXQgMQorCX0KKwlyZWFkX2Jhc2ljX3N0YXRlCisJcnVuX3NwZWNpZmljX3JlYmFzZQorCTs7Citza2lwKQorCW91dHB1dCBnaXQgcmVzZXQgLS1oYXJkIEhFQUQgfHwgZXhpdCAkPworCXJlYWRfYmFzaWNfc3RhdGUKKwlydW5fc3BlY2lmaWNfcmViYXNlCisJOzsKK2Fib3J0KQorCWdpdCByZXJlcmUgY2xlYXIKKwlyZWFkX2Jhc2ljX3N0YXRlCisJY2FzZSAiJGhlYWRfbmFtZSIgaW4KKwlyZWZzLyopCisJCWdpdCBzeW1ib2xpYy1yZWYgLW0gInJlYmFzZTogYWJvcnRpbmciIEhFQUQgJGhlYWRfbmFtZSB8fAorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJDb3VsZCBub3QgbW92ZSBiYWNrIHRvIFwkaGVhZF9uYW1lIikiCisJCTs7CisJZXNhYworCW91dHB1dCBnaXQgcmVzZXQgLS1oYXJkICRvcmlnX2hlYWQKKwlmaW5pc2hfcmViYXNlCisJZXhpdAorCTs7CitlZGl0LXRvZG8pCisJcnVuX3NwZWNpZmljX3JlYmFzZQorCTs7Citlc2FjCisKKyMgTWFrZSBzdXJlIG5vIHJlYmFzZSBpcyBpbiBwcm9ncmVzcworaWYgdGVzdCAtbiAiJGluX3Byb2dyZXNzIgordGhlbgorCXN0YXRlX2Rpcl9iYXNlPSR7c3RhdGVfZGlyIyMqL30KKwljbWRfbGl2ZV9yZWJhc2U9ImdpdCByZWJhc2UgKC0tY29udGludWUgfCAtLWFib3J0IHwgLS1za2lwKSIKKwljbWRfY2xlYXJfc3RhbGVfcmViYXNlPSJybSAtZnIgXCIkc3RhdGVfZGlyXCIiCisJZGllICIKKyQoZXZhbF9nZXR0ZXh0ICdJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAkc3RhdGVfZGlyX2Jhc2UgZGlyZWN0b3J5LCBhbmQKK0kgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlCitjYXNlLCBwbGVhc2UgdHJ5CisJJGNtZF9saXZlX3JlYmFzZQorSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZQorCSRjbWRfY2xlYXJfc3RhbGVfcmViYXNlCithbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZwordmFsdWFibGUgdGhlcmUuJykiCitmaQorCitpZiB0ZXN0IC1uICIkcmViYXNlX3Jvb3QiICYmIHRlc3QgLXogIiRvbnRvIgordGhlbgorCXRlc3QgLXogIiRpbnRlcmFjdGl2ZV9yZWJhc2UiICYmIGludGVyYWN0aXZlX3JlYmFzZT1pbXBsaWVkCitmaQorCitpZiB0ZXN0IC1uICIkaW50ZXJhY3RpdmVfcmViYXNlIgordGhlbgorCXR5cGU9aW50ZXJhY3RpdmUKKwlzdGF0ZV9kaXI9IiRtZXJnZV9kaXIiCitlbGlmIHRlc3QgLW4gIiRkb19tZXJnZSIKK3RoZW4KKwl0eXBlPW1lcmdlCisJc3RhdGVfZGlyPSIkbWVyZ2VfZGlyIgorZWxzZQorCXR5cGU9YW0KKwlzdGF0ZV9kaXI9IiRhcHBseV9kaXIiCitmaQorCitpZiB0ZXN0IC16ICIkcmViYXNlX3Jvb3QiCit0aGVuCisJY2FzZSAiJCMiIGluCisJMCkKKwkJaWYgISB1cHN0cmVhbV9uYW1lPSQoZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBcCisJCQktLXZlcmlmeSAtcSBAe3Vwc3RyZWFtfSAyPi9kZXYvbnVsbCkKKwkJdGhlbgorCQkJLiBnaXQtcGFyc2UtcmVtb3RlCisJCQllcnJvcl9vbl9taXNzaW5nX2RlZmF1bHRfdXBzdHJlYW0gInJlYmFzZSIgInJlYmFzZSIgXAorCQkJCSJhZ2FpbnN0IiAiZ2l0IHJlYmFzZSA8YnJhbmNoPiIKKwkJZmkKKworCQl0ZXN0ICIkZm9ya19wb2ludCIgPSBhdXRvICYmIGZvcmtfcG9pbnQ9dAorCQk7OworCSopCXVwc3RyZWFtX25hbWU9IiQxIgorCQlpZiB0ZXN0ICIkdXBzdHJlYW1fbmFtZSIgPSAiLSIKKwkJdGhlbgorCQkJdXBzdHJlYW1fbmFtZT0iQHstMX0iCisJCWZpCisJCXNoaWZ0CisJCTs7CisJZXNhYworCXVwc3RyZWFtPSQocGVlbF9jb21taXR0aXNoICIke3Vwc3RyZWFtX25hbWV9IikgfHwKKwlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJpbnZhbGlkIHVwc3RyZWFtIFwkdXBzdHJlYW1fbmFtZSIpIgorCXVwc3RyZWFtX2FyZz0iJHVwc3RyZWFtX25hbWUiCitlbHNlCisJaWYgdGVzdCAteiAiJG9udG8iCisJdGhlbgorCQllbXB0eV90cmVlPSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRyZWUgL2Rldi9udWxsKQorCQlvbnRvPSQoZ2l0IGNvbW1pdC10cmVlICRlbXB0eV90cmVlIDwvZGV2L251bGwpCisJCXNxdWFzaF9vbnRvPSIkb250byIKKwlmaQorCXVuc2V0IHVwc3RyZWFtX25hbWUKKwl1bnNldCB1cHN0cmVhbQorCXRlc3QgJCMgLWd0IDEgJiYgdXNhZ2UKKwl1cHN0cmVhbV9hcmc9LS1yb290CitmaQorCisjIE1ha2Ugc3VyZSB0aGUgYnJhbmNoIHRvIHJlYmFzZSBvbnRvIGlzIHZhbGlkLgorb250b19uYW1lPSR7b250by0iJHVwc3RyZWFtX25hbWUifQorY2FzZSAiJG9udG9fbmFtZSIgaW4KKyouLi4qKQorCWlmCWxlZnQ9JHtvbnRvX25hbWUlLi4uKn0gcmlnaHQ9JHtvbnRvX25hbWUjKi4uLn0gJiYKKwkJb250bz0kKGdpdCBtZXJnZS1iYXNlIC0tYWxsICR7bGVmdDotSEVBRH0gJHtyaWdodDotSEVBRH0pCisJdGhlbgorCQljYXNlICIkb250byIgaW4KKwkJPyoiJExGIj8qKQorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiXCRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIikiCisJCQk7OworCQknJykKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlwkb250b19uYW1lOiB0aGVyZSBpcyBubyBtZXJnZSBiYXNlIikiCisJCQk7OworCQllc2FjCisJZWxzZQorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJcJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIpIgorCWZpCisJOzsKKyopCisJb250bz0kKHBlZWxfY29tbWl0dGlzaCAiJG9udG9fbmFtZSIpIHx8CisJZGllICIkKGV2YWxfZ2V0dGV4dCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6IFwkb250b19uYW1lIikiCisJOzsKK2VzYWMKKworIyBJZiB0aGUgYnJhbmNoIHRvIHJlYmFzZSBpcyBnaXZlbiwgdGhhdCBpcyB0aGUgYnJhbmNoIHdlIHdpbGwgcmViYXNlCisjICRicmFuY2hfbmFtZSAtLSBicmFuY2ggYmVpbmcgcmViYXNlZCwgb3IgSEVBRCAoYWxyZWFkeSBkZXRhY2hlZCkKKyMgJG9yaWdfaGVhZCAtLSBjb21taXQgb2JqZWN0IG5hbWUgb2YgdGlwIG9mIHRoZSBicmFuY2ggYmVmb3JlIHJlYmFzaW5nCisjICRoZWFkX25hbWUgLS0gcmVmcy9oZWFkcy88dGhhdC1icmFuY2g+IG9yICJkZXRhY2hlZCBIRUFEIgorc3dpdGNoX3RvPQorY2FzZSAiJCMiIGluCisxKQorCSMgSXMgaXQgInJlYmFzZSBvdGhlciAkYnJhbmNobmFtZSIgb3IgInJlYmFzZSBvdGhlciAkY29tbWl0Ij8KKwlicmFuY2hfbmFtZT0iJDEiCisJc3dpdGNoX3RvPSIkMSIKKworCWlmIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtLXF1aWV0IC0tICJyZWZzL2hlYWRzLyQxIiAmJgorCSAgIG9yaWdfaGVhZD0kKGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgInJlZnMvaGVhZHMvJDEiKQorCXRoZW4KKwkJaGVhZF9uYW1lPSJyZWZzL2hlYWRzLyQxIgorCWVsaWYgb3JpZ19oZWFkPSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAiJDEiKQorCXRoZW4KKwkJaGVhZF9uYW1lPSJkZXRhY2hlZCBIRUFEIgorCWVsc2UKKwkJZGllICIkKGV2YWxfZ2V0dGV4dCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoOiBcJGJyYW5jaF9uYW1lIikiCisJZmkKKwk7OworMCkKKwkjIERvIG5vdCBuZWVkIHRvIHN3aXRjaCBicmFuY2hlcywgd2UgYXJlIGFscmVhZHkgb24gaXQuCisJaWYgYnJhbmNoX25hbWU9JChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpCisJdGhlbgorCQloZWFkX25hbWU9JGJyYW5jaF9uYW1lCisJCWJyYW5jaF9uYW1lPSQoZXhwciAieiRicmFuY2hfbmFtZSIgOiAnenJlZnMvaGVhZHMvXCguKlwpJykKKwllbHNlCisJCWhlYWRfbmFtZT0iZGV0YWNoZWQgSEVBRCIKKwkJYnJhbmNoX25hbWU9SEVBRCA7IyBkZXRhY2hlZAorCWZpCisJb3JpZ19oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSB8fCBleGl0CisJOzsKKyopCisJZGllICJCVUc6IHVuZXhwZWN0ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBsZWZ0IHRvIHBhcnNlIgorCTs7Citlc2FjCisKK2lmIHRlc3QgIiRmb3JrX3BvaW50IiA9IHQKK3RoZW4KKwluZXdfdXBzdHJlYW09JChnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgIiR1cHN0cmVhbV9uYW1lIiBcCisJCQkiJHtzd2l0Y2hfdG86LUhFQUR9IikKKwlpZiB0ZXN0IC1uICIkbmV3X3Vwc3RyZWFtIgorCXRoZW4KKwkJcmVzdHJpY3RfcmV2aXNpb249JG5ld191cHN0cmVhbQorCWZpCitmaQorCitpZiB0ZXN0ICIkYXV0b3N0YXNoIiA9IHRydWUgJiYgISAocmVxdWlyZV9jbGVhbl93b3JrX3RyZWUpIDI+L2Rldi9udWxsCit0aGVuCisJc3Rhc2hfc2hhMT0kKGdpdCBzdGFzaCBjcmVhdGUgImF1dG9zdGFzaCIpIHx8CisJZGllICIkKGdldHRleHQgJ0Nhbm5vdCBhdXRvc3Rhc2gnKSIKKworCW1rZGlyIC1wICIkc3RhdGVfZGlyIiAmJgorCWVjaG8gJHN0YXNoX3NoYTEgPiIkc3RhdGVfZGlyL2F1dG9zdGFzaCIgJiYKKwlzdGFzaF9hYmJyZXY9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgJHN0YXNoX3NoYTEpICYmCisJZWNobyAiJChldmFsX2dldHRleHQgJ0NyZWF0ZWQgYXV0b3N0YXNoOiAkc3Rhc2hfYWJicmV2JykiICYmCisJZ2l0IHJlc2V0IC0taGFyZAorZmkKKworcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgInJlYmFzZSIgIiQoZ2V0dGV4dCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIpIgorCisjIE5vdyB3ZSBhcmUgcmViYXNpbmcgY29tbWl0cyAkdXBzdHJlYW0uLiRvcmlnX2hlYWQgKG9yIHdpdGggLS1yb290LAorIyBldmVyeXRoaW5nIGxlYWRpbmcgdXAgdG8gJG9yaWdfaGVhZCkgb24gdG9wIG9mICRvbnRvCisKKyMgQ2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgYmFzZWQgb24gJG9udG8gd2l0aCBsaW5lYXIgaGlzdG9yeSwKKyMgYnV0IHRoaXMgc2hvdWxkIGJlIGRvbmUgb25seSB3aGVuIHVwc3RyZWFtIGFuZCBvbnRvIGFyZSB0aGUgc2FtZQorIyBhbmQgaWYgdGhpcyBpcyBub3QgYW4gaW50ZXJhY3RpdmUgcmViYXNlLgorbWI9JChnaXQgbWVyZ2UtYmFzZSAiJG9udG8iICIkb3JpZ19oZWFkIikKK2lmIHRlc3QgIiR0eXBlIiAhPSBpbnRlcmFjdGl2ZSAmJiB0ZXN0ICIkdXBzdHJlYW0iID0gIiRvbnRvIiAmJgorCXRlc3QgIiRtYiIgPSAiJG9udG8iICYmIHRlc3QgLXogIiRyZXN0cmljdF9yZXZpc2lvbiIgJiYKKwkjIGxpbmVhciBoaXN0b3J5PworCSEgKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgIiRvbnRvIi4uIiRvcmlnX2hlYWQiIHwgc2FuZV9ncmVwICIgLiogIikgPiAvZGV2L251bGwKK3RoZW4KKwlpZiB0ZXN0IC16ICIkZm9yY2VfcmViYXNlIgorCXRoZW4KKwkJIyBMYXppbHkgc3dpdGNoIHRvIHRoZSB0YXJnZXQgYnJhbmNoIGlmIG5lZWRlZC4uLgorCQl0ZXN0IC16ICIkc3dpdGNoX3RvIiB8fAorCQlHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OOiBjaGVja291dCAkc3dpdGNoX3RvIiBcCisJCQlnaXQgY2hlY2tvdXQgLXEgIiRzd2l0Y2hfdG8iIC0tCisJCXNheSAiJChldmFsX2dldHRleHQgIkN1cnJlbnQgYnJhbmNoIFwkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iKSIKKwkJZmluaXNoX3JlYmFzZQorCQlleGl0IDAKKwllbHNlCisJCXNheSAiJChldmFsX2dldHRleHQgIkN1cnJlbnQgYnJhbmNoIFwkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iKSIKKwlmaQorZmkKKworIyBJZiBhIGhvb2sgZXhpc3RzLCBnaXZlIGl0IGEgY2hhbmNlIHRvIGludGVycnVwdAorcnVuX3ByZV9yZWJhc2VfaG9vayAiJHVwc3RyZWFtX2FyZyIgIiRAIgorCitpZiB0ZXN0IC1uICIkZGlmZnN0YXQiCit0aGVuCisJaWYgdGVzdCAtbiAiJHZlcmJvc2UiCisJdGhlbgorCQllY2hvICIkKGV2YWxfZ2V0dGV4dCAiQ2hhbmdlcyBmcm9tIFwkbWIgdG8gXCRvbnRvOiIpIgorCWZpCisJIyBXZSB3YW50IGNvbG9yIChpZiBzZXQpLCBidXQgbm8gcGFnZXIKKwlHSVRfUEFHRVI9JycgZ2l0IGRpZmYgLS1zdGF0IC0tc3VtbWFyeSAiJG1iIiAiJG9udG8iCitmaQorCit0ZXN0ICIkdHlwZSIgPSBpbnRlcmFjdGl2ZSAmJiBydW5fc3BlY2lmaWNfcmViYXNlCisKKyMgRGV0YWNoIEhFQUQgYW5kIHJlc2V0IHRoZSB0cmVlCitzYXkgIiQoZ2V0dGV4dCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uIikiCisKK0dJVF9SRUZMT0dfQUNUSU9OPSIkR0lUX1JFRkxPR19BQ1RJT046IGNoZWNrb3V0ICRvbnRvX25hbWUiIFwKKwlnaXQgY2hlY2tvdXQgLXEgIiRvbnRvXjAiIHx8IGRpZSAiY291bGQgbm90IGRldGFjaCBIRUFEIgorZ2l0IHVwZGF0ZS1yZWYgT1JJR19IRUFEICRvcmlnX2hlYWQKKworIyBJZiB0aGUgJG9udG8gaXMgYSBwcm9wZXIgZGVzY2VuZGFudCBvZiB0aGUgdGlwIG9mIHRoZSBicmFuY2gsIHRoZW4KKyMgd2UganVzdCBmYXN0LWZvcndhcmRlZC4KK2lmIHRlc3QgIiRtYiIgPSAiJG9yaWdfaGVhZCIKK3RoZW4KKwlzYXkgIiQoZXZhbF9nZXR0ZXh0ICJGYXN0LWZvcndhcmRlZCBcJGJyYW5jaF9uYW1lIHRvIFwkb250b19uYW1lLiIpIgorCW1vdmVfdG9fb3JpZ2luYWxfYnJhbmNoCisJZmluaXNoX3JlYmFzZQorCWV4aXQgMAorZmkKKworaWYgdGVzdCAtbiAiJHJlYmFzZV9yb290IgordGhlbgorCXJldmlzaW9ucz0iJG9udG8uLiRvcmlnX2hlYWQiCitlbHNlCisJcmV2aXNpb25zPSIke3Jlc3RyaWN0X3JldmlzaW9uLSR1cHN0cmVhbX0uLiRvcmlnX2hlYWQiCitmaQorCitydW5fc3BlY2lmaWNfcmViYXNlCmRpZmYgLS1naXQgYS9naXQtcmVsaW5rLnBlcmwgYi9naXQtcmVsaW5rLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjM2YTM1MgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1yZWxpbmsucGVybApAQCAtMCwwICsxLDE3MyBAQAorIyEvdXNyL2Jpbi9wZXJsCisjIENvcHlyaWdodCAyMDA1LCBSeWFuIEFuZGVyc29uIDxyeWFuQG1pY2hvbmxpbmUuY29tPgorIyBEaXN0cmlidXRpb24gcGVybWl0dGVkIHVuZGVyIHRoZSBHUEwgdjIsIGFzIGRpc3RyaWJ1dGVkCisjIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjIExhdGVyIHZlcnNpb25zIG9mIHRoZSBHUEwgYXQgdGhlIGRpc2NyZXRpb24gb2YgTGludXMgVG9ydmFsZHMKKyMKKyMgU2NhbiB0d28gZ2l0IG9iamVjdC10cmVlcywgYW5kIGhhcmRsaW5rIGFueSBjb21tb24gb2JqZWN0cyBiZXR3ZWVuIHRoZW0uCisKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgR2V0b3B0OjpMb25nOworCitzdWIgZ2V0X2Nhbm9uaWNhbF9mb3JtKCQpOworc3ViIGRvX3NjYW5fZGlyZWN0b3J5KCQkJCk7CitzdWIgY29tcGFyZV90d29fZmlsZXMoJCQpOworc3ViIHVzYWdlKCk7CitzdWIgbGlua190d29fZmlsZXMoJCQpOworCisjIHN0YXRzCitteSAkdG90YWxfbGlua2VkID0gMDsKK215ICR0b3RhbF9hbHJlYWR5ID0gMDsKK215ICgkbGlua2VkLCRhbHJlYWR5KTsKKworbXkgJGZhaWxfb25fZGlmZmVyZW50X3NpemVzID0gMDsKK215ICRoZWxwID0gMDsKK0dldE9wdGlvbnMoInNhZmUiID0+IFwkZmFpbF9vbl9kaWZmZXJlbnRfc2l6ZXMsCisJICAgImhlbHAiID0+IFwkaGVscCk7CisKK3VzYWdlKCkgaWYgJGhlbHA7CisKK215IChAZGlycykgPSBAQVJHVjsKKwordXNhZ2UoKSBpZiAoIWRlZmluZWQgJGRpcnNbMF0gfHwgIWRlZmluZWQgJGRpcnNbMV0pOworCiskXyA9IGdldF9jYW5vbmljYWxfZm9ybSgkXykgZm9yZWFjaCAoQGRpcnMpOworCitteSAkbWFzdGVyX2RpciA9IHBvcCBAZGlyczsKKworb3BlbmRpcihELCRtYXN0ZXJfZGlyIC4gIm9iamVjdHMvIikKKwlvciBkaWUgIkZhaWxlZCB0byBvcGVuICRtYXN0ZXJfZGlyL29iamVjdHMvIDogJCEiOworCitteSBAaGFzaGRpcnMgPSBncmVwIHsgKCRfIGVxICdwYWNrJykgfHwgL15bMC05YS1mXXsyfSQvIH0gcmVhZGRpcihEKTsKKworZm9yZWFjaCBteSAkcmVwbyAoQGRpcnMpIHsKKwkkbGlua2VkID0gMDsKKwkkYWxyZWFkeSA9IDA7CisJcHJpbnRmKCJTZWFyY2hpbmcgJyVzJyBhbmQgJyVzJyBmb3IgY29tbW9uIG9iamVjdHMgYW5kIGhhcmRsaW5raW5nIHRoZW0uLi5cbiIsCisJCSRtYXN0ZXJfZGlyLCRyZXBvKTsKKworCWZvcmVhY2ggbXkgJGhhc2hkaXIgKEBoYXNoZGlycykgeworCQlkb19zY2FuX2RpcmVjdG9yeSgkbWFzdGVyX2RpciwgJGhhc2hkaXIsICRyZXBvKTsKKwl9CisKKwlwcmludGYoIkxpbmtlZCAlZCBmaWxlcywgJWQgd2VyZSBhbHJlYWR5IGxpbmtlZC5cbiIsJGxpbmtlZCwgJGFscmVhZHkpOworCisJJHRvdGFsX2xpbmtlZCArPSAkbGlua2VkOworCSR0b3RhbF9hbHJlYWR5ICs9ICRhbHJlYWR5OworfQorCitwcmludGYoIlRvdGFsczogTGlua2VkICVkIGZpbGVzLCAlZCB3ZXJlIGFscmVhZHkgbGlua2VkLlxuIiwKKwkkdG90YWxfbGlua2VkLCAkdG90YWxfYWxyZWFkeSk7CisKKworc3ViIGRvX3NjYW5fZGlyZWN0b3J5KCQkJCkgeworCW15ICgkc3JjZGlyLCAkc3ViZGlyLCAkZHN0ZGlyKSA9IEBfOworCisJbXkgJHNmdWxsZGlyID0gc3ByaW50ZigiJXNvYmplY3RzLyVzLyIsJHNyY2Rpciwkc3ViZGlyKTsKKwlteSAkZGZ1bGxkaXIgPSBzcHJpbnRmKCIlc29iamVjdHMvJXMvIiwkZHN0ZGlyLCRzdWJkaXIpOworCisJb3BlbmRpcihTLCRzZnVsbGRpcikKKwkJb3IgZGllICJGYWlsZWQgdG8gb3BlbmRpciAkc2Z1bGxkaXI6ICQhIjsKKworCWZvcmVhY2ggbXkgJGZpbGUgKGdyZXAoIS9cLnsxLDJ9JC8sIHJlYWRkaXIoUykpKSB7CisJCW15ICRzZmlsZW5hbWUgPSAkc2Z1bGxkaXIgLiAkZmlsZTsKKwkJbXkgJGRmaWxlbmFtZSA9ICRkZnVsbGRpciAuICRmaWxlOworCisJCWNvbXBhcmVfdHdvX2ZpbGVzKCRzZmlsZW5hbWUsJGRmaWxlbmFtZSk7CisKKwl9CisJY2xvc2VkaXIoUyk7Cit9CisKK3N1YiBjb21wYXJlX3R3b19maWxlcygkJCkgeworCW15ICgkc2ZpbGVuYW1lLCAkZGZpbGVuYW1lKSA9IEBfOworCisJIyBQZXJsJ3Mgc3RhdCByZXR1cm5zIHJlbGV2YW50IGluZm9ybWF0aW9uIGFzIGZvbGxvd3M6CisJIyAwID0gZGV2IG51bWJlcgorCSMgMSA9IGlub2RlIG51bWJlcgorCSMgNyA9IHNpemUKKwlteSBAc3N0YXRpbmZvID0gc3RhdCgkc2ZpbGVuYW1lKTsKKwlteSBAZHN0YXRpbmZvID0gc3RhdCgkZGZpbGVuYW1lKTsKKworCWlmIChAc3N0YXRpbmZvID09IDAgJiYgQGRzdGF0aW5mbyA9PSAwKSB7CisJCWRpZSBzcHJpbnRmKCJTdGF0IG9mIGJvdGggJXMgYW5kICVzIGZhaWxlZDogJXNcbiIsJHNmaWxlbmFtZSwgJGRmaWxlbmFtZSwgJCEpOworCisJfSBlbHNpZiAoQGRzdGF0aW5mbyA9PSAwKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAoICgkc3N0YXRpbmZvWzBdID09ICRkc3RhdGluZm9bMF0pICYmCisJICAgICAoJHNzdGF0aW5mb1sxXSAhPSAkZHN0YXRpbmZvWzFdKSkgeworCQlpZiAoJHNzdGF0aW5mb1s3XSA9PSAkZHN0YXRpbmZvWzddKSB7CisJCQlsaW5rX3R3b19maWxlcygkc2ZpbGVuYW1lLCAkZGZpbGVuYW1lKTsKKworCQl9IGVsc2UgeworCQkJbXkgJGVyciA9IHNwcmludGYoIkVSUk9SOiBGaWxlIHNpemVzIGFyZSBub3QgdGhlIHNhbWUsIGNhbm5vdCByZWxpbmsgJXMgdG8gJXMuXG4iLAorCQkJCSRzZmlsZW5hbWUsICRkZmlsZW5hbWUpOworCQkJaWYgKCRmYWlsX29uX2RpZmZlcmVudF9zaXplcykgeworCQkJCWRpZSAkZXJyOworCQkJfSBlbHNlIHsKKwkJCQl3YXJuICRlcnI7CisJCQl9CisJCX0KKworCX0gZWxzaWYgKCAoJHNzdGF0aW5mb1swXSA9PSAkZHN0YXRpbmZvWzBdKSAmJgorCSAgICAgKCRzc3RhdGluZm9bMV0gPT0gJGRzdGF0aW5mb1sxXSkpIHsKKwkJJGFscmVhZHkrKzsKKwl9Cit9CisKK3N1YiBnZXRfY2Fub25pY2FsX2Zvcm0oJCkgeworCW15ICRkaXIgPSBzaGlmdDsKKwlteSAkb3JpZ2luYWwgPSAkZGlyOworCisJZGllICIkZGlyIGlzIG5vdCBhIGRpcmVjdG9yeS4iIHVubGVzcyAtZCAkZGlyOworCisJJGRpciAuPSAiLyIgdW5sZXNzICRkaXIgPX4gbSMvJCM7CisJJGRpciAuPSAiLmdpdC8iIHVubGVzcyAkZGlyID1+IG0jXC5naXQvJCM7CisKKwlkaWUgIiRvcmlnaW5hbCBkb2VzIG5vdCBoYXZlIGEgLmdpdC8gc3ViZGlyZWN0b3J5LlxuIiB1bmxlc3MgLWQgJGRpcjsKKworCXJldHVybiAkZGlyOworfQorCitzdWIgbGlua190d29fZmlsZXMoJCQpIHsKKwlteSAoJHNmaWxlbmFtZSwgJGRmaWxlbmFtZSkgPSBAXzsKKwlteSAkdG1wZG5hbWUgPSBzcHJpbnRmKCIlcy5vbGQiLCRkZmlsZW5hbWUpOworCXJlbmFtZSgkZGZpbGVuYW1lLCR0bXBkbmFtZSkKKwkJb3IgZGllIHNwcmludGYoIkZhaWx1cmUgcmVuYW1pbmcgJXMgdG8gJXM6ICVzIiwKKwkJCSRkZmlsZW5hbWUsICR0bXBkbmFtZSwgJCEpOworCisJaWYgKCEgbGluaygkc2ZpbGVuYW1lLCRkZmlsZW5hbWUpKSB7CisJCW15ICRmYWlsdHh0ID0gIiI7CisJCXVubGVzcyAocmVuYW1lKCR0bXBkbmFtZSwkZGZpbGVuYW1lKSkgeworCQkJJGZhaWx0eHQgPSBzcHJpbnRmKAorCQkJCSJHaXQgUmVwb3NpdG9yeSBjb250YWluaW5nICVzIGlzIHByb2JhYmx5IGNvcnJ1cHRlZCwgIiAuCisJCQkJInBsZWFzZSBjb3B5ICclcycgdG8gJyVzJyB0byBmaXguXG4iLAorCQkJCSR0bXBkbmFtZSwgJGRmaWxlbmFtZSk7CisJCX0KKworCQlkaWUgc3ByaW50ZigiRmFpbGVkIHRvIGxpbmsgJXMgdG8gJXM6ICVzXG4lcyIgLgorCQkJJHNmaWxlbmFtZSwgJGRmaWxlbmFtZSwKKwkJCSQhLCAkZGZpbGVuYW1lLCAkZmFpbHR4dCk7CisJfQorCisJdW5saW5rKCR0bXBkbmFtZSkKKwkJb3IgZGllIHNwcmludGYoIlVubGluayBvZiAlcyBmYWlsZWQ6ICVzXG4iLAorCQkJJGRmaWxlbmFtZSwgJCEpOworCisJJGxpbmtlZCsrOworfQorCisKK3N1YiB1c2FnZSgpIHsKKwlwcmludCgidXNhZ2U6IGdpdCByZWxpbmsgWy0tc2FmZV0gPGRpcj4uLi4gPG1hc3Rlcl9kaXI+IFxuIik7CisJcHJpbnQoIkFsbCBkaXJlY3RvcmllcyBzaG91bGQgY29udGFpbiBhIC5naXQvb2JqZWN0cy8gc3ViZGlyZWN0b3J5LlxuIik7CisJcHJpbnQoIk9wdGlvbnNcbiIpOworCXByaW50KCJcdC0tc2FmZVx0IiAuCisJCSJTdG9wcyBpZiB0d28gb2JqZWN0cyB3aXRoIHRoZSBzYW1lIGhhc2ggZXhpc3QgYnV0ICIgLgorCQkiaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuICBEZWZhdWx0IGlzIHRvIHdhcm4gYW5kIGNvbnRpbnVlLlxuIik7CisJZXhpdCgxKTsKK30KZGlmZiAtLWdpdCBhL2dpdC1yZW1vdGUtdGVzdGdpdC5zaCBiL2dpdC1yZW1vdGUtdGVzdGdpdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NTJjNzYzCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXJlbW90ZS10ZXN0Z2l0LnNoCkBAIC0wLDAgKzEsMTQ3IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDEyIEZlbGlwZSBDb250cmVyYXMKKworIyBUaGUgZmlyc3QgYXJndW1lbnQgY2FuIGJlIGEgdXJsIHdoZW4gdGhlIGZldGNoL3B1c2ggY29tbWFuZCB3YXMgYSB1cmwKKyMgaW5zdGVhZCBvZiBhIGNvbmZpZ3VyZWQgcmVtb3RlLiBJbiB0aGlzIGNhc2UsIHVzZSBhIGdlbmVyaWMgYWxpYXMuCitpZiB0ZXN0ICIkMSIgPSAidGVzdGdpdDo6JDIiOyB0aGVuCisJYWxpYXM9XworZWxzZQorCWFsaWFzPSQxCitmaQordXJsPSQyCisKK2Rpcj0iJEdJVF9ESVIvdGVzdGdpdC8kYWxpYXMiCitwcmVmaXg9InJlZnMvdGVzdGdpdC8kYWxpYXMiCisKK2RlZmF1bHRfcmVmc3BlYz0icmVmcy9oZWFkcy8qOiR7cHJlZml4fS9oZWFkcy8qIgorCityZWZzcGVjPSIke0dJVF9SRU1PVEVfVEVTVEdJVF9SRUZTUEVDLSRkZWZhdWx0X3JlZnNwZWN9IgorCit0ZXN0IC16ICIkcmVmc3BlYyIgJiYgcHJlZml4PSJyZWZzIgorCitHSVRfRElSPSIkdXJsLy5naXQiCitleHBvcnQgR0lUX0RJUgorCitmb3JjZT0KKworbWtkaXIgLXAgIiRkaXIiCisKK2lmIHRlc3QgLXogIiRHSVRfUkVNT1RFX1RFU1RHSVRfTk9fTUFSS1MiCit0aGVuCisJZ2l0bWFya3M9IiRkaXIvZ2l0Lm1hcmtzIgorCXRlc3RnaXRtYXJrcz0iJGRpci90ZXN0Z2l0Lm1hcmtzIgorCXRlc3QgLWUgIiRnaXRtYXJrcyIgfHwgPiIkZ2l0bWFya3MiCisJdGVzdCAtZSAiJHRlc3RnaXRtYXJrcyIgfHwgPiIkdGVzdGdpdG1hcmtzIgorZmkKKword2hpbGUgcmVhZCBsaW5lCitkbworCWNhc2UgJGxpbmUgaW4KKwljYXBhYmlsaXRpZXMpCisJCWVjaG8gJ2ltcG9ydCcKKwkJZWNobyAnZXhwb3J0JworCQl0ZXN0IC1uICIkcmVmc3BlYyIgJiYgZWNobyAicmVmc3BlYyAkcmVmc3BlYyIKKwkJaWYgdGVzdCAtbiAiJGdpdG1hcmtzIgorCQl0aGVuCisJCQllY2hvICIqaW1wb3J0LW1hcmtzICRnaXRtYXJrcyIKKwkJCWVjaG8gIipleHBvcnQtbWFya3MgJGdpdG1hcmtzIgorCQlmaQorCQl0ZXN0IC1uICIkR0lUX1JFTU9URV9URVNUR0lUX1NJR05FRF9UQUdTIiAmJiBlY2hvICJzaWduZWQtdGFncyIKKwkJdGVzdCAtbiAiJEdJVF9SRU1PVEVfVEVTVEdJVF9OT19QUklWQVRFX1VQREFURSIgJiYgZWNobyAibm8tcHJpdmF0ZS11cGRhdGUiCisJCWVjaG8gJ29wdGlvbicKKwkJZWNobworCQk7OworCWxpc3QpCisJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9Jz8gJShyZWZuYW1lKScgJ3JlZnMvaGVhZHMvJworCQloZWFkPSQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKQorCQllY2hvICJAJGhlYWQgSEVBRCIKKwkJZWNobworCQk7OworCWltcG9ydCopCisJCSMgcmVhZCBhbGwgaW1wb3J0IGxpbmVzCisJCXdoaWxlIHRydWUKKwkJZG8KKwkJCXJlZj0iJHtsaW5lIyogfSIKKwkJCXJlZnM9IiRyZWZzICRyZWYiCisJCQlyZWFkIGxpbmUKKwkJCXRlc3QgIiR7bGluZSUlICp9IiAhPSAiaW1wb3J0IiAmJiBicmVhaworCQlkb25lCisKKwkJaWYgdGVzdCAtbiAiJGdpdG1hcmtzIgorCQl0aGVuCisJCQllY2hvICJmZWF0dXJlIGltcG9ydC1tYXJrcz0kZ2l0bWFya3MiCisJCQllY2hvICJmZWF0dXJlIGV4cG9ydC1tYXJrcz0kZ2l0bWFya3MiCisJCWZpCisKKwkJaWYgdGVzdCAtbiAiJEdJVF9SRU1PVEVfVEVTVEdJVF9GQUlMVVJFIgorCQl0aGVuCisJCQllY2hvICJmZWF0dXJlIGRvbmUiCisJCQlleGl0IDEKKwkJZmkKKworCQllY2hvICJmZWF0dXJlIGRvbmUiCisJCWdpdCBmYXN0LWV4cG9ydCBcCisJCQkke3Rlc3RnaXRtYXJrczorIi0taW1wb3J0LW1hcmtzPSR0ZXN0Z2l0bWFya3MifSBcCisJCQkke3Rlc3RnaXRtYXJrczorIi0tZXhwb3J0LW1hcmtzPSR0ZXN0Z2l0bWFya3MifSBcCisJCQkkcmVmcyB8CisJCXNlZCAtZSAicyNyZWZzL2hlYWRzLyMke3ByZWZpeH0vaGVhZHMvI2ciCisJCWVjaG8gImRvbmUiCisJCTs7CisJZXhwb3J0KQorCQlpZiB0ZXN0IC1uICIkR0lUX1JFTU9URV9URVNUR0lUX0ZBSUxVUkUiCisJCXRoZW4KKwkJCSMgY29uc3VtZSBpbnB1dCBzbyBmYXN0LWV4cG9ydCBkb2Vzbid0IGdldCBTSUdQSVBFOworCQkJIyBnaXQgd291bGQgYWxzbyBub3RpY2UgdGhhdCBjYXNlLCBidXQgd2Ugd2FudAorCQkJIyB0byBtYWtlIHN1cmUgd2UgYXJlIGV4ZXJjaXNpbmcgdGhlIGxhdGVyCisJCQkjIGVycm9yIGNoZWNrcworCQkJd2hpbGUgcmVhZCBsaW5lOyBkbworCQkJCXRlc3QgImRvbmUiID0gIiRsaW5lIiAmJiBicmVhaworCQkJZG9uZQorCQkJZXhpdCAxCisJCWZpCisKKwkJYmVmb3JlPSQoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0nICUocmVmbmFtZSkgJShvYmplY3RuYW1lKSAnKQorCisJCWdpdCBmYXN0LWltcG9ydCBcCisJCQkke2ZvcmNlOistLWZvcmNlfSBcCisJCQkke3Rlc3RnaXRtYXJrczorIi0taW1wb3J0LW1hcmtzPSR0ZXN0Z2l0bWFya3MifSBcCisJCQkke3Rlc3RnaXRtYXJrczorIi0tZXhwb3J0LW1hcmtzPSR0ZXN0Z2l0bWFya3MifSBcCisJCQktLXF1aWV0CisKKwkJIyBmaWd1cmUgb3V0IHdoaWNoIHJlZnMgd2VyZSB1cGRhdGVkCisJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUocmVmbmFtZSkgJShvYmplY3RuYW1lKScgfAorCQl3aGlsZSByZWFkIHJlZiBhCisJCWRvCisJCQljYXNlICIkYmVmb3JlIiBpbgorCQkJKiIgJHJlZiAkYSAiKikKKwkJCQljb250aW51ZSA7OwkjIHVuY2hhbmdlZAorCQkJZXNhYworCQkJaWYgdGVzdCAteiAiJEdJVF9SRU1PVEVfVEVTVEdJVF9QVVNIX0VSUk9SIgorCQkJdGhlbgorCQkJCWVjaG8gIm9rICRyZWYiCisJCQllbHNlCisJCQkJZWNobyAiZXJyb3IgJHJlZiAkR0lUX1JFTU9URV9URVNUR0lUX1BVU0hfRVJST1IiCisJCQlmaQorCQlkb25lCisKKwkJZWNobworCQk7OworCW9wdGlvblwgKikKKwkJcmVhZCBjbWQgb3B0IHZhbCA8PC1FT0YKKwkJJGxpbmUKKwkJRU9GCisJCWNhc2UgJG9wdCBpbgorCQlmb3JjZSkKKwkJCXRlc3QgJHZhbCA9ICJ0cnVlIiAmJiBmb3JjZT0idHJ1ZSIgfHwgZm9yY2U9CisJCQllY2hvICJvayIKKwkJCTs7CisJCSopCisJCQllY2hvICJ1bnN1cHBvcnRlZCIKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwknJykKKwkJZXhpdAorCQk7OworCWVzYWMKK2RvbmUKZGlmZiAtLWdpdCBhL2dpdC1yZXF1ZXN0LXB1bGwuc2ggYi9naXQtcmVxdWVzdC1wdWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1NTAwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtcmVxdWVzdC1wdWxsLnNoCkBAIC0wLDAgKzEsMTYzIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IDIwMDUsIFJ5YW4gQW5kZXJzb24gPHJ5YW5AbWljaG9ubGluZS5jb20+CisjCisjIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KKyMgYXQgdGhlIGRpc2NyZXRpb24gb2YgTGludXMgVG9ydmFsZHMuCisKK1VTQUdFPSc8c3RhcnQ+IDx1cmw+IFs8ZW5kPl0nCitMT05HX1VTQUdFPSdTdW1tYXJpemVzIHRoZSBjaGFuZ2VzIGJldHdlZW4gdHdvIGNvbW1pdHMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCwKK2FuZCBpbmNsdWRlcyB0aGUgZ2l2ZW4gVVJMIGluIHRoZSBnZW5lcmF0ZWQgc3VtbWFyeS4nCitTVUJESVJFQ1RPUllfT0s9J1llcycKK09QVElPTlNfS0VFUERBU0hEQVNIPQorT1BUSU9OU19TVFVDS0xPTkc9CitPUFRJT05TX1NQRUM9J2dpdCByZXF1ZXN0LXB1bGwgW29wdGlvbnNdIHN0YXJ0IHVybCBbZW5kXQorLS0KK3AgICAgc2hvdyBwYXRjaCB0ZXh0IGFzIHdlbGwKKycKKworLiBnaXQtc2gtc2V0dXAKKworR0lUX1BBR0VSPQorZXhwb3J0IEdJVF9QQUdFUgorCitwYXRjaD0KK3doaWxlCWNhc2UgIiQjIiBpbiAwKSBicmVhayA7OyBlc2FjCitkbworCWNhc2UgIiQxIiBpbgorCS1wKQorCQlwYXRjaD0tcCA7OworCS0tKQorCQlzaGlmdDsgYnJlYWsgOzsKKwktKikKKwkJdXNhZ2UgOzsKKwkqKQorCQlicmVhayA7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCitiYXNlPSQxIHVybD0kMiBzdGF0dXM9MAorCit0ZXN0IC1uICIkYmFzZSIgJiYgdGVzdCAtbiAiJHVybCIgfHwgdXNhZ2UKKworYmFzZXJldj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAiJGJhc2UiXjApCitpZiB0ZXN0IC16ICIkYmFzZXJldiIKK3RoZW4KKyAgICBkaWUgImZhdGFsOiBOb3QgYSB2YWxpZCByZXZpc2lvbjogJGJhc2UiCitmaQorCisjCisjICQzIG11c3QgYmUgYSBzeW1ib2xpYyByZWYsIGEgdW5pcXVlIHJlZiwgb3IKKyMgYSBTSEEgb2JqZWN0IGV4cHJlc3Npb24uIEl0IGNhbiBhbHNvIGJlIG9mCisjIHRoZSBmb3JtYXQgJ2xvY2FsLW5hbWU6cmVtb3RlLW5hbWUnLgorIworbG9jYWw9JHszJToqfQorbG9jYWw9JHtsb2NhbDotSEVBRH0KK3JlbW90ZT0kezMjKjp9CitwcmV0dHlfcmVtb3RlPSR7cmVtb3RlI3JlZnMvfQorcHJldHR5X3JlbW90ZT0ke3ByZXR0eV9yZW1vdGUjaGVhZHMvfQoraGVhZD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgIiRsb2NhbCIpCitoZWFkPSR7aGVhZDotJChnaXQgc2hvdy1yZWYgLS1oZWFkcyAtLXRhZ3MgIiRsb2NhbCIgfCBjdXQgLWQnICcgLWYyKX0KK2hlYWQ9JHtoZWFkOi0kKGdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSAiJGxvY2FsIil9CisKKyMgTm9uZSBvZiB0aGUgYWJvdmU/IEJhZC4KK3Rlc3QgLXogIiRoZWFkIiAmJiBkaWUgImZhdGFsOiBOb3QgYSB2YWxpZCByZXZpc2lvbjogJGxvY2FsIgorCisjIFRoaXMgYWxzbyB2ZXJpZmllcyB0aGF0IHRoZSByZXN1bHRpbmcgaGVhZCBpcyB1bmlxdWU6CisjICJnaXQgc2hvdy1yZWYiIGNvdWxkIGhhdmUgc2hvd24gbXVsdGlwbGUgbWF0Y2hpbmcgcmVmcy4uCitoZWFkcmV2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICIkaGVhZCJeMCkKK3Rlc3QgLXogIiRoZWFkcmV2IiAmJiBkaWUgImZhdGFsOiBBbWJpZ3VvdXMgcmV2aXNpb246ICRsb2NhbCIKKworIyBXYXMgaXQgYSBicmFuY2ggd2l0aCBhIGRlc2NyaXB0aW9uPworYnJhbmNoX25hbWU9JHtoZWFkI3JlZnMvaGVhZHMvfQoraWYgdGVzdCAieiRicmFuY2hfbmFtZSIgPSAieiRoZWFkcmVmIiB8fAorCSEgZ2l0IGNvbmZpZyAiYnJhbmNoLiRicmFuY2hfbmFtZS5kZXNjcmlwdGlvbiIgPi9kZXYvbnVsbAordGhlbgorCWJyYW5jaF9uYW1lPQorZmkKKworbWVyZ2VfYmFzZT0kKGdpdCBtZXJnZS1iYXNlICRiYXNlcmV2ICRoZWFkcmV2KSB8fAorZGllICJmYXRhbDogTm8gY29tbWl0cyBpbiBjb21tb24gYmV0d2VlbiAkYmFzZSBhbmQgJGhlYWQiCisKKyMgJGhlYWQgaXMgdGhlIHJlZm5hbWUgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorIyBJZiBhIHJlZiB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgJGhlYWQgZXhpc3RzIGF0IHRoZSByZW1vdGUKKyMgYW5kIHRoZWlyIHZhbHVlcyBtYXRjaCwgdXNlIHRoYXQuCisjCisjIE90aGVyd2lzZSBmaW5kIGEgcmFuZG9tIHJlZiB0aGF0IG1hdGNoZXMgJGhlYWRyZXYuCitmaW5kX21hdGNoaW5nX3JlZj0nCisJbXkgKCRoZWFkLCRoZWFkcmV2KSA9IChAQVJHVik7CisJbXkgKCRmb3VuZCk7CisKKwl3aGlsZSAoPFNURElOPikgeworCQljaG9tcDsKKwkJbXkgKCRzaGExLCAkcmVmLCAkZGVyZWYpID0gL14oXFMrKVxzKyhbXl5dKykoXFMqKSQvOworCQlteSAoJHBhdHRlcm4pOworCQluZXh0IHVubGVzcyAoJHNoYTEgZXEgJGhlYWRyZXYpOworCisJCSRwYXR0ZXJuPSIvJGhlYWRcJCI7CisJCWlmICgkcmVmIGVxICRoZWFkKSB7CisJCQkkZm91bmQgPSAkcmVmOworCQl9CisJCWlmICgkcmVmID1+IC8kcGF0dGVybi8pIHsKKwkJCSRmb3VuZCA9ICRyZWY7CisJCX0KKwkJaWYgKCRzaGExIGVxICRoZWFkKSB7CisJCQkkZm91bmQgPSAkc2hhMTsKKwkJfQorCX0KKwlpZiAoJGZvdW5kKSB7CisJCXByaW50ICIkZm91bmRcbiI7CisJfQorJworCityZWY9JChnaXQgbHMtcmVtb3RlICIkdXJsIiB8IEBAUEVSTEBAIC1lICIkZmluZF9tYXRjaGluZ19yZWYiICIke3JlbW90ZTotSEVBRH0iICIkaGVhZHJldiIpCisKK2lmIHRlc3QgLXogIiRyZWYiCit0aGVuCisJZWNobyAid2FybjogTm8gbWF0Y2ggZm9yIGNvbW1pdCAkaGVhZHJldiBmb3VuZCBhdCAkdXJsIiA+JjIKKwllY2hvICJ3YXJuOiBBcmUgeW91IHN1cmUgeW91IHB1c2hlZCAnJHtyZW1vdGU6LUhFQUR9JyB0aGVyZT8iID4mMgorCXN0YXR1cz0xCitmaQorCisjIFNwZWNpYWwgY2FzZTogdHVybiAiZm9yX2xpbnVzIiB0byAidGFncy9mb3JfbGludXMiIHdoZW4gaXQgaXMgY29ycmVjdAoraWYgdGVzdCAiJHJlZiIgPSAicmVmcy90YWdzLyRwcmV0dHlfcmVtb3RlIgordGhlbgorCXByZXR0eV9yZW1vdGU9dGFncy8kcHJldHR5X3JlbW90ZQorZmkKKwordXJsPSQoZ2l0IGxzLXJlbW90ZSAtLWdldC11cmwgIiR1cmwiKQorCitnaXQgc2hvdyAtcyAtLWZvcm1hdD0nVGhlIGZvbGxvd2luZyBjaGFuZ2VzIHNpbmNlIGNvbW1pdCAlSDoKKworICAlcyAoJWNpKQorCithcmUgYXZhaWxhYmxlIGluIHRoZSBnaXQgcmVwb3NpdG9yeSBhdDoKKycgJG1lcmdlX2Jhc2UgJiYKK2VjaG8gIiAgJHVybCAkcHJldHR5X3JlbW90ZSIgJiYKK2dpdCBzaG93IC1zIC0tZm9ybWF0PScKK2ZvciB5b3UgdG8gZmV0Y2ggY2hhbmdlcyB1cCB0byAlSDoKKworICAlcyAoJWNpKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyAkaGVhZHJldiAmJgorCitpZiB0ZXN0ICQoZ2l0IGNhdC1maWxlIC10ICIkaGVhZCIpID0gdGFnCit0aGVuCisJZ2l0IGNhdC1maWxlIHRhZyAiJGhlYWQiIHwKKwlzZWQgLW4gLWUgJzEsL14kL2QnIC1lICcvXi0tLS0tQkVHSU4gUEdQIC9xJyAtZSBwCisJZWNobworCWVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCitmaSAmJgorCitpZiB0ZXN0IC1uICIkYnJhbmNoX25hbWUiCit0aGVuCisJZWNobyAiKGZyb20gdGhlIGJyYW5jaCBkZXNjcmlwdGlvbiBmb3IgJGJyYW5jaF9uYW1lIGxvY2FsIGJyYW5jaCkiCisJZWNobworCWdpdCBjb25maWcgImJyYW5jaC4kYnJhbmNoX25hbWUuZGVzY3JpcHRpb24iCisJZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKK2ZpICYmCisKK2dpdCBzaG9ydGxvZyBeJGJhc2VyZXYgJGhlYWRyZXYgJiYKK2dpdCBkaWZmIC1NIC0tc3RhdCAtLXN1bW1hcnkgJHBhdGNoICRtZXJnZV9iYXNlLi4kaGVhZHJldiB8fCBzdGF0dXM9MQorCitleGl0ICRzdGF0dXMKZGlmZiAtLWdpdCBhL2dpdC1zZW5kLWVtYWlsLnBlcmwgYi9naXQtc2VuZC1lbWFpbC5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU5MDdlMGVhCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXNlbmQtZW1haWwucGVybApAQCAtMCwwICsxLDE3MjUgQEAKKyMhL3Vzci9iaW4vcGVybAorIworIyBDb3B5cmlnaHQgMjAwMiwyMDA1IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisjIENvcHlyaWdodCAyMDA1IFJ5YW4gQW5kZXJzb24gPHJ5YW5AbWljaG9ubGluZS5jb20+CisjCisjIEdQTCB2MiAoU2VlIENPUFlJTkcpCisjCisjIFBvcnRlZCB0byBzdXBwb3J0IGdpdCAibWJveCIgZm9ybWF0IGZpbGVzIGJ5IFJ5YW4gQW5kZXJzb24gPHJ5YW5AbWljaG9ubGluZS5jb20+CisjCisjIFNlbmRzIGEgY29sbGVjdGlvbiBvZiBlbWFpbHMgdG8gdGhlIGdpdmVuIGVtYWlsIGFkZHJlc3NlcywgZGlzdHVyYmluZ2x5IGZhc3QuCisjCisjIFN1cHBvcnRzIHR3byBmb3JtYXRzOgorIyAxLiBtYm94IGZvcm1hdCBmaWxlcyAoaWdub3JpbmcgbW9zdCBoZWFkZXJzIGFuZCBNSU1FIGZvcm1hdHRpbmcgLSB0aGlzIGlzIGRlc2lnbmVkIGZvciBzZW5kaW5nIHBhdGNoZXMpCisjIDIuIFRoZSBvcmlnaW5hbCBmb3JtYXQgc3VwcG9ydCBieSBHcmVnJ3Mgc2NyaXB0OgorIyAgICBmaXJzdCBsaW5lIG9mIHRoZSBtZXNzYWdlIGlzIHdobyB0byBDQywKKyMgICAgYW5kIHNlY29uZCBsaW5lIGlzIHRoZSBzdWJqZWN0IG9mIHRoZSBtZXNzYWdlLgorIworCit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFRlcm06OlJlYWRMaW5lOwordXNlIEdldG9wdDo6TG9uZzsKK3VzZSBUZXh0OjpQYXJzZVdvcmRzOwordXNlIERhdGE6OkR1bXBlcjsKK3VzZSBUZXJtOjpBTlNJQ29sb3I7Cit1c2UgRmlsZTo6VGVtcCBxdy8gdGVtcGRpciB0ZW1wZmlsZSAvOwordXNlIEZpbGU6OlNwZWM6OkZ1bmN0aW9ucyBxdyhjYXRmaWxlKTsKK3VzZSBFcnJvciBxdyg6dHJ5KTsKK3VzZSBHaXQ7CisKK0dldG9wdDo6TG9uZzo6Q29uZmlndXJlIHF3LyBwYXNzX3Rocm91Z2ggLzsKKworcGFja2FnZSBGYWtlVGVybTsKK3N1YiBuZXcgeworCW15ICgkY2xhc3MsICRyZWFzb24pID0gQF87CisJcmV0dXJuIGJsZXNzIFwkcmVhc29uLCBzaGlmdDsKK30KK3N1YiByZWFkbGluZSB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlkaWUgIkNhbm5vdCB1c2UgcmVhZGxpbmUgb24gRmFrZVRlcm06ICQkc2VsZiI7Cit9CitwYWNrYWdlIG1haW47CisKKworc3ViIHVzYWdlIHsKKwlwcmludCA8PEVPVDsKK2dpdCBzZW5kLWVtYWlsIFtvcHRpb25zXSA8ZmlsZSB8IGRpcmVjdG9yeSB8IHJldi1saXN0IG9wdGlvbnMgPgorCisgIENvbXBvc2luZzoKKyAgICAtLWZyb20gICAgICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCBGcm9tOgorICAgIC0tW25vLV10byAgICAgICAgICAgICAgIDxzdHI+ICAqIEVtYWlsIFRvOgorICAgIC0tW25vLV1jYyAgICAgICAgICAgICAgIDxzdHI+ICAqIEVtYWlsIENjOgorICAgIC0tW25vLV1iY2MgICAgICAgICAgICAgIDxzdHI+ICAqIEVtYWlsIEJjYzoKKyAgICAtLXN1YmplY3QgICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCAiU3ViamVjdDoiCisgICAgLS1pbi1yZXBseS10byAgICAgICAgICAgPHN0cj4gICogRW1haWwgIkluLVJlcGx5LVRvOiIKKyAgICAtLVtuby1deG1haWxlciAgICAgICAgICAgICAgICAgKiBBZGQgIlgtTWFpbGVyOiIgaGVhZGVyIChkZWZhdWx0KS4KKyAgICAtLVtuby1dYW5ub3RhdGUgICAgICAgICAgICAgICAgKiBSZXZpZXcgZWFjaCBwYXRjaCB0aGF0IHdpbGwgYmUgc2VudCBpbiBhbiBlZGl0b3IuCisgICAgLS1jb21wb3NlICAgICAgICAgICAgICAgICAgICAgICogT3BlbiBhbiBlZGl0b3IgZm9yIGludHJvZHVjdGlvbi4KKyAgICAtLWNvbXBvc2UtZW5jb2RpbmcgICAgICA8c3RyPiAgKiBFbmNvZGluZyB0byBhc3N1bWUgZm9yIGludHJvZHVjdGlvbi4KKyAgICAtLThiaXQtZW5jb2RpbmcgICAgICAgICA8c3RyPiAgKiBFbmNvZGluZyB0byBhc3N1bWUgOGJpdCBtYWlscyBpZiB1bmRlY2xhcmVkCisgICAgLS10cmFuc2Zlci1lbmNvZGluZyAgICAgPHN0cj4gICogVHJhbnNmZXIgZW5jb2RpbmcgdG8gdXNlIChxdW90ZWQtcHJpbnRhYmxlLCA4Yml0LCBiYXNlNjQpCisKKyAgU2VuZGluZzoKKyAgICAtLWVudmVsb3BlLXNlbmRlciAgICAgICA8c3RyPiAgKiBFbWFpbCBlbnZlbG9wZSBzZW5kZXIuCisgICAgLS1zbXRwLXNlcnZlciAgICAgICA8c3RyOmludD4gICogT3V0Z29pbmcgU01UUCBzZXJ2ZXIgdG8gdXNlLiBUaGUgcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG9wdGlvbmFsLiBEZWZhdWx0ICdsb2NhbGhvc3QnLgorICAgIC0tc210cC1zZXJ2ZXItb3B0aW9uICAgIDxzdHI+ICAqIE91dGdvaW5nIFNNVFAgc2VydmVyIG9wdGlvbiB0byB1c2UuCisgICAgLS1zbXRwLXNlcnZlci1wb3J0ICAgICAgPGludD4gICogT3V0Z29pbmcgU01UUCBzZXJ2ZXIgcG9ydC4KKyAgICAtLXNtdHAtdXNlciAgICAgICAgICAgICA8c3RyPiAgKiBVc2VybmFtZSBmb3IgU01UUC1BVVRILgorICAgIC0tc210cC1wYXNzICAgICAgICAgICAgIDxzdHI+ICAqIFBhc3N3b3JkIGZvciBTTVRQLUFVVEg7IG5vdCBuZWNlc3NhcnkuCisgICAgLS1zbXRwLWVuY3J5cHRpb24gICAgICAgPHN0cj4gICogdGxzIG9yIHNzbDsgYW55dGhpbmcgZWxzZSBkaXNhYmxlcy4KKyAgICAtLXNtdHAtc3NsICAgICAgICAgICAgICAgICAgICAgKiBEZXByZWNhdGVkLiBVc2UgJy0tc210cC1lbmNyeXB0aW9uIHNzbCcuCisgICAgLS1zbXRwLXNzbC1jZXJ0LXBhdGggICAgPHN0cj4gICogUGF0aCB0byBjYS1jZXJ0aWZpY2F0ZXMgKGVpdGhlciBkaXJlY3Rvcnkgb3IgZmlsZSkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzcyBhbiBlbXB0eSBzdHJpbmcgdG8gZGlzYWJsZSBjZXJ0aWZpY2F0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbi4KKyAgICAtLXNtdHAtZG9tYWluICAgICAgICAgICA8c3RyPiAgKiBUaGUgZG9tYWluIG5hbWUgc2VudCB0byBIRUxPL0VITE8gaGFuZHNoYWtlCisgICAgLS1zbXRwLWF1dGggICAgICAgICAgICAgPHN0cj4gICogU3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgYWxsb3dlZCBBVVRIIG1lY2hhbmlzbXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzZXR0aW5nIGZvcmNlcyB0byB1c2Ugb25lIG9mIHRoZSBsaXN0ZWQgbWVjaGFuaXNtcy4KKyAgICAtLXNtdHAtZGVidWcgICAgICAgICAgICA8MHwxPiAgKiBEaXNhYmxlLCBlbmFibGUgTmV0OjpTTVRQIGRlYnVnLgorCisgIEF1dG9tYXRpbmc6CisgICAgLS1pZGVudGl0eSAgICAgICAgICAgICAgPHN0cj4gICogVXNlIHRoZSBzZW5kZW1haWwuPGlkPiBvcHRpb25zLgorICAgIC0tdG8tY21kICAgICAgICAgICAgICAgIDxzdHI+ICAqIEVtYWlsIFRvOiB2aWEgYDxzdHI+IFwkcGF0Y2hfcGF0aGAKKyAgICAtLWNjLWNtZCAgICAgICAgICAgICAgICA8c3RyPiAgKiBFbWFpbCBDYzogdmlhIGA8c3RyPiBcJHBhdGNoX3BhdGhgCisgICAgLS1zdXBwcmVzcy1jYyAgICAgICAgICAgPHN0cj4gICogYXV0aG9yLCBzZWxmLCBzb2IsIGNjLCBjY2NtZCwgYm9keSwgYm9keWNjLCBhbGwuCisgICAgLS1bbm8tXWNjLWNvdmVyICAgICAgICAgICAgICAgICogRW1haWwgQ2M6IGFkZHJlc3NlcyBpbiB0aGUgY292ZXIgbGV0dGVyLgorICAgIC0tW25vLV10by1jb3ZlciAgICAgICAgICAgICAgICAqIEVtYWlsIFRvOiBhZGRyZXNzZXMgaW4gdGhlIGNvdmVyIGxldHRlci4KKyAgICAtLVtuby1dc2lnbmVkLW9mZi1ieS1jYyAgICAgICAgKiBTZW5kIHRvIFNpZ25lZC1vZmYtYnk6IGFkZHJlc3Nlcy4gRGVmYXVsdCBvbi4KKyAgICAtLVtuby1dc3VwcHJlc3MtZnJvbSAgICAgICAgICAgKiBTZW5kIHRvIHNlbGYuIERlZmF1bHQgb2ZmLgorICAgIC0tW25vLV1jaGFpbi1yZXBseS10byAgICAgICAgICAqIENoYWluIEluLVJlcGx5LVRvOiBmaWVsZHMuIERlZmF1bHQgb2ZmLgorICAgIC0tW25vLV10aHJlYWQgICAgICAgICAgICAgICAgICAqIFVzZSBJbi1SZXBseS1UbzogZmllbGQuIERlZmF1bHQgb24uCisKKyAgQWRtaW5pc3RlcmluZzoKKyAgICAtLWNvbmZpcm0gICAgICAgICAgICAgICA8c3RyPiAgKiBDb25maXJtIHJlY2lwaWVudHMgYmVmb3JlIHNlbmRpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0bywgY2MsIGNvbXBvc2UsIGFsd2F5cywgb3IgbmV2ZXIuCisgICAgLS1xdWlldCAgICAgICAgICAgICAgICAgICAgICAgICogT3V0cHV0IG9uZSBsaW5lIG9mIGluZm8gcGVyIGVtYWlsLgorICAgIC0tZHJ5LXJ1biAgICAgICAgICAgICAgICAgICAgICAqIERvbid0IGFjdHVhbGx5IHNlbmQgdGhlIGVtYWlscy4KKyAgICAtLVtuby1ddmFsaWRhdGUgICAgICAgICAgICAgICAgKiBQZXJmb3JtIHBhdGNoIHNhbml0eSBjaGVja3MuIERlZmF1bHQgb24uCisgICAgLS1bbm8tXWZvcm1hdC1wYXRjaCAgICAgICAgICAgICogdW5kZXJzdGFuZCBhbnkgbm9uIG9wdGlvbmFsIGFyZ3VtZW50cyBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBnaXQgZm9ybWF0LXBhdGNoYCBvbmVzLgorICAgIC0tZm9yY2UgICAgICAgICAgICAgICAgICAgICAgICAqIFNlbmQgZXZlbiBpZiBzYWZldHkgY2hlY2tzIHdvdWxkIHByZXZlbnQgaXQuCisKK0VPVAorCWV4aXQoMSk7Cit9CisKKyMgbW9zdCBtYWlsIHNlcnZlcnMgZ2VuZXJhdGUgdGhlIERhdGU6IGhlYWRlciwgYnV0IG5vdCBhbGwuLi4KK3N1YiBmb3JtYXRfMjgyMl90aW1lIHsKKwlteSAoJHRpbWUpID0gQF87CisJbXkgQGxvY2FsdG0gPSBsb2NhbHRpbWUoJHRpbWUpOworCW15IEBnbXR0bSA9IGdtdGltZSgkdGltZSk7CisJbXkgJGxvY2FsbWluID0gJGxvY2FsdG1bMV0gKyAkbG9jYWx0bVsyXSAqIDYwOworCW15ICRnbXRtaW4gPSAkZ210dG1bMV0gKyAkZ210dG1bMl0gKiA2MDsKKwlpZiAoJGxvY2FsdG1bMF0gIT0gJGdtdHRtWzBdKSB7CisJCWRpZSAibG9jYWwgem9uZSBkaWZmZXJzIGZyb20gR01UIGJ5IGEgbm9uLW1pbnV0ZSBpbnRlcnZhbFxuIjsKKwl9CisJaWYgKCgoJGdtdHRtWzZdICsgMSkgJSA3KSA9PSAkbG9jYWx0bVs2XSkgeworCQkkbG9jYWxtaW4gKz0gMTQ0MDsKKwl9IGVsc2lmICgoKCRnbXR0bVs2XSAtIDEpICUgNykgPT0gJGxvY2FsdG1bNl0pIHsKKwkJJGxvY2FsbWluIC09IDE0NDA7CisJfSBlbHNpZiAoJGdtdHRtWzZdICE9ICRsb2NhbHRtWzZdKSB7CisJCWRpZSAibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iOworCX0KKwlteSAkb2Zmc2V0ID0gJGxvY2FsbWluIC0gJGdtdG1pbjsKKwlteSAkb2ZmaG91ciA9ICRvZmZzZXQgLyA2MDsKKwlteSAkb2ZmbWluID0gYWJzKCRvZmZzZXQgJSA2MCk7CisJaWYgKGFicygkb2ZmaG91cikgPj0gMjQpIHsKKwkJZGllICgibG9jYWwgdGltZSBvZmZzZXQgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDI0IGhvdXJzXG4iKTsKKwl9CisKKwlyZXR1cm4gc3ByaW50ZigiJXMsICUyZCAlcyAlZCAlMDJkOiUwMmQ6JTAyZCAlcyUwMmQlMDJkIiwKKwkJICAgICAgIHF3KFN1biBNb24gVHVlIFdlZCBUaHUgRnJpIFNhdClbJGxvY2FsdG1bNl1dLAorCQkgICAgICAgJGxvY2FsdG1bM10sCisJCSAgICAgICBxdyhKYW4gRmViIE1hciBBcHIgTWF5IEp1bgorCQkJICBKdWwgQXVnIFNlcCBPY3QgTm92IERlYylbJGxvY2FsdG1bNF1dLAorCQkgICAgICAgJGxvY2FsdG1bNV0rMTkwMCwKKwkJICAgICAgICRsb2NhbHRtWzJdLAorCQkgICAgICAgJGxvY2FsdG1bMV0sCisJCSAgICAgICAkbG9jYWx0bVswXSwKKwkJICAgICAgICgkb2Zmc2V0ID49IDApID8gJysnIDogJy0nLAorCQkgICAgICAgYWJzKCRvZmZob3VyKSwKKwkJICAgICAgICRvZmZtaW4sCisJCSAgICAgICApOworfQorCitteSAkaGF2ZV9lbWFpbF92YWxpZCA9IGV2YWwgeyByZXF1aXJlIEVtYWlsOjpWYWxpZDsgMSB9OworbXkgJGhhdmVfbWFpbF9hZGRyZXNzID0gZXZhbCB7IHJlcXVpcmUgTWFpbDo6QWRkcmVzczsgMSB9OworbXkgJHNtdHA7CitteSAkYXV0aDsKKworIyBSZWdleGVzIGZvciBSRkMgMjA0NyBwcm9kdWN0aW9ucy4KK215ICRyZV90b2tlbiA9IHFyL1teXVsoKTw+QCw7OlxcIlwvPy49IFwwMDAtXDAzN1wxNzctXDM3N10rLzsKK215ICRyZV9lbmNvZGVkX3RleHQgPSBxci9bXj8gXDAwMC1cMDM3XDE3Ny1cMzc3XSsvOworbXkgJHJlX2VuY29kZWRfd29yZCA9IHFyLz1cPygkcmVfdG9rZW4pXD8oJHJlX3Rva2VuKVw/KCRyZV9lbmNvZGVkX3RleHQpXD89LzsKKworIyBWYXJpYWJsZXMgd2UgZmlsbCBpbiBhdXRvbWF0aWNhbGx5LCBvciB2aWEgcHJvbXB0aW5nOgorbXkgKEB0bywkbm9fdG8sQGluaXRpYWxfdG8sQGNjLCRub19jYyxAaW5pdGlhbF9jYyxAYmNjbGlzdCwkbm9fYmNjLEB4aCwKKwkkaW5pdGlhbF9yZXBseV90bywkaW5pdGlhbF9zdWJqZWN0LEBmaWxlcywKKwkkYXV0aG9yLCRzZW5kZXIsJHNtdHBfYXV0aHBhc3MsJGFubm90YXRlLCR1c2VfeG1haWxlciwkY29tcG9zZSwkdGltZSk7CisKK215ICRlbnZlbG9wZV9zZW5kZXI7CisKKyMgRXhhbXBsZSByZXBseSB0bzoKKyMkaW5pdGlhbF9yZXBseV90byA9ICcnOyAjPDIwMDUwMjAzMTczMjA4LkdBMjM5NjRAZm9vYmFyLmNvbT4nOworCitteSAkcmVwbyA9IGV2YWwgeyBHaXQtPnJlcG9zaXRvcnkoKSB9OworbXkgQHJlcG8gPSAkcmVwbyA/ICgkcmVwbykgOiAoKTsKK215ICR0ZXJtID0gZXZhbCB7CisJJEVOVnsiR0lUX1NFTkRfRU1BSUxfTk9UVFkifQorCQk/IG5ldyBUZXJtOjpSZWFkTGluZSAnZ2l0LXNlbmQtZW1haWwnLCBcKlNURElOLCBcKlNURE9VVAorCQk6IG5ldyBUZXJtOjpSZWFkTGluZSAnZ2l0LXNlbmQtZW1haWwnOworfTsKK2lmICgkQCkgeworCSR0ZXJtID0gbmV3IEZha2VUZXJtICIkQDogZ29pbmcgbm9uLWludGVyYWN0aXZlIjsKK30KKworIyBCZWhhdmlvciBtb2RpZmljYXRpb24gdmFyaWFibGVzCitteSAoJHF1aWV0LCAkZHJ5X3J1bikgPSAoMCwgMCk7CitteSAkZm9ybWF0X3BhdGNoOworbXkgJGNvbXBvc2VfZmlsZW5hbWU7CitteSAkZm9yY2UgPSAwOworCisjIEhhbmRsZSBpbnRlcmFjdGl2ZSBlZGl0aW9uIG9mIGZpbGVzLgorbXkgJG11bHRpZWRpdDsKK215ICRlZGl0b3I7CisKK3N1YiBkb19lZGl0IHsKKwlpZiAoIWRlZmluZWQoJGVkaXRvcikpIHsKKwkJJGVkaXRvciA9IEdpdDo6Y29tbWFuZF9vbmVsaW5lKCd2YXInLCAnR0lUX0VESVRPUicpOworCX0KKwlpZiAoZGVmaW5lZCgkbXVsdGllZGl0KSAmJiAhJG11bHRpZWRpdCkgeworCQltYXAgeworCQkJc3lzdGVtKCdzaCcsICctYycsICRlZGl0b3IuJyAiJEAiJywgJGVkaXRvciwgJF8pOworCQkJaWYgKCgkPyAmIDEyNykgfHwgKCQ/ID4+IDgpKSB7CisJCQkJZGllKCJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciKTsKKwkJCX0KKwkJfSBAXzsKKwl9IGVsc2UgeworCQlzeXN0ZW0oJ3NoJywgJy1jJywgJGVkaXRvci4nICIkQCInLCAkZWRpdG9yLCBAXyk7CisJCWlmICgoJD8gJiAxMjcpIHx8ICgkPyA+PiA4KSkgeworCQkJZGllKCJ0aGUgZWRpdG9yIGV4aXRlZCB1bmNsZWFubHksIGFib3J0aW5nIGV2ZXJ5dGhpbmciKTsKKwkJfQorCX0KK30KKworIyBWYXJpYWJsZXMgd2l0aCBjb3JyZXNwb25kaW5nIGNvbmZpZyBzZXR0aW5ncworbXkgKCR0aHJlYWQsICRjaGFpbl9yZXBseV90bywgJHN1cHByZXNzX2Zyb20sICRzaWduZWRfb2ZmX2J5X2NjKTsKK215ICgkY292ZXJfY2MsICRjb3Zlcl90byk7CitteSAoJHRvX2NtZCwgJGNjX2NtZCk7CitteSAoJHNtdHBfc2VydmVyLCAkc210cF9zZXJ2ZXJfcG9ydCwgQHNtdHBfc2VydmVyX29wdGlvbnMpOworbXkgKCRzbXRwX2F1dGh1c2VyLCAkc210cF9lbmNyeXB0aW9uLCAkc210cF9zc2xfY2VydF9wYXRoKTsKK215ICgkaWRlbnRpdHksICRhbGlhc2ZpbGV0eXBlLCBAYWxpYXNfZmlsZXMsICRzbXRwX2RvbWFpbiwgJHNtdHBfYXV0aCk7CitteSAoJHZhbGlkYXRlLCAkY29uZmlybSk7CitteSAoQHN1cHByZXNzX2NjKTsKK215ICgkYXV0b184Yml0X2VuY29kaW5nKTsKK215ICgkY29tcG9zZV9lbmNvZGluZyk7CitteSAoJHRhcmdldF94ZmVyX2VuY29kaW5nKTsKKworbXkgKCRkZWJ1Z19uZXRfc210cCkgPSAwOwkJIyBOZXQ6OlNNVFAsIHNlZSBzZW5kX21lc3NhZ2UoKQorCitteSAlY29uZmlnX2Jvb2xfc2V0dGluZ3MgPSAoCisgICAgInRocmVhZCIgPT4gW1wkdGhyZWFkLCAxXSwKKyAgICAiY2hhaW5yZXBseXRvIiA9PiBbXCRjaGFpbl9yZXBseV90bywgMF0sCisgICAgInN1cHByZXNzZnJvbSIgPT4gW1wkc3VwcHJlc3NfZnJvbSwgdW5kZWZdLAorICAgICJzaWduZWRvZmZieWNjIiA9PiBbXCRzaWduZWRfb2ZmX2J5X2NjLCB1bmRlZl0sCisgICAgImNjY292ZXIiID0+IFtcJGNvdmVyX2NjLCB1bmRlZl0sCisgICAgInRvY292ZXIiID0+IFtcJGNvdmVyX3RvLCB1bmRlZl0sCisgICAgInNpZ25lZG9mZmNjIiA9PiBbXCRzaWduZWRfb2ZmX2J5X2NjLCB1bmRlZl0sICAgICAgIyBEZXByZWNhdGVkCisgICAgInZhbGlkYXRlIiA9PiBbXCR2YWxpZGF0ZSwgMV0sCisgICAgIm11bHRpZWRpdCIgPT4gW1wkbXVsdGllZGl0LCB1bmRlZl0sCisgICAgImFubm90YXRlIiA9PiBbXCRhbm5vdGF0ZSwgdW5kZWZdLAorICAgICJ4bWFpbGVyIiA9PiBbXCR1c2VfeG1haWxlciwgMV0KKyk7CisKK215ICVjb25maWdfc2V0dGluZ3MgPSAoCisgICAgInNtdHBzZXJ2ZXIiID0+IFwkc210cF9zZXJ2ZXIsCisgICAgInNtdHBzZXJ2ZXJwb3J0IiA9PiBcJHNtdHBfc2VydmVyX3BvcnQsCisgICAgInNtdHBzZXJ2ZXJvcHRpb24iID0+IFxAc210cF9zZXJ2ZXJfb3B0aW9ucywKKyAgICAic210cHVzZXIiID0+IFwkc210cF9hdXRodXNlciwKKyAgICAic210cHBhc3MiID0+IFwkc210cF9hdXRocGFzcywKKyAgICAic210cHNzbGNlcnRwYXRoIiA9PiBcJHNtdHBfc3NsX2NlcnRfcGF0aCwKKyAgICAic210cGRvbWFpbiIgPT4gXCRzbXRwX2RvbWFpbiwKKyAgICAic210cGF1dGgiID0+IFwkc210cF9hdXRoLAorICAgICJ0byIgPT4gXEBpbml0aWFsX3RvLAorICAgICJ0b2NtZCIgPT4gXCR0b19jbWQsCisgICAgImNjIiA9PiBcQGluaXRpYWxfY2MsCisgICAgImNjY21kIiA9PiBcJGNjX2NtZCwKKyAgICAiYWxpYXNmaWxldHlwZSIgPT4gXCRhbGlhc2ZpbGV0eXBlLAorICAgICJiY2MiID0+IFxAYmNjbGlzdCwKKyAgICAic3VwcHJlc3NjYyIgPT4gXEBzdXBwcmVzc19jYywKKyAgICAiZW52ZWxvcGVzZW5kZXIiID0+IFwkZW52ZWxvcGVfc2VuZGVyLAorICAgICJjb25maXJtIiAgID0+IFwkY29uZmlybSwKKyAgICAiZnJvbSIgPT4gXCRzZW5kZXIsCisgICAgImFzc3VtZThiaXRlbmNvZGluZyIgPT4gXCRhdXRvXzhiaXRfZW5jb2RpbmcsCisgICAgImNvbXBvc2VlbmNvZGluZyIgPT4gXCRjb21wb3NlX2VuY29kaW5nLAorICAgICJ0cmFuc2ZlcmVuY29kaW5nIiA9PiBcJHRhcmdldF94ZmVyX2VuY29kaW5nLAorKTsKKworbXkgJWNvbmZpZ19wYXRoX3NldHRpbmdzID0gKAorICAgICJhbGlhc2VzZmlsZSIgPT4gXEBhbGlhc19maWxlcywKKyk7CisKKyMgSGFuZGxlIFVuY291dGggVGVybWluYXRpb24KK3N1YiBzaWduYWxfaGFuZGxlciB7CisKKwkjIE1ha2UgdGV4dCBub3JtYWwKKwlwcmludCBjb2xvcigicmVzZXQiKSwgIlxuIjsKKworCSMgU01UUCBwYXNzd29yZCBtYXNrZWQKKwlzeXN0ZW0gInN0dHkgZWNobyI7CisKKwkjIHRtcCBmaWxlcyBmcm9tIC0tY29tcG9zZQorCWlmIChkZWZpbmVkICRjb21wb3NlX2ZpbGVuYW1lKSB7CisJCWlmICgtZSAkY29tcG9zZV9maWxlbmFtZSkgeworCQkJcHJpbnQgIickY29tcG9zZV9maWxlbmFtZScgY29udGFpbnMgYW4gaW50ZXJtZWRpYXRlIHZlcnNpb24gb2YgdGhlIGVtYWlsIHlvdSB3ZXJlIGNvbXBvc2luZy5cbiI7CisJCX0KKwkJaWYgKC1lICgkY29tcG9zZV9maWxlbmFtZSAuICIuZmluYWwiKSkgeworCQkJcHJpbnQgIickY29tcG9zZV9maWxlbmFtZS5maW5hbCcgY29udGFpbnMgdGhlIGNvbXBvc2VkIGVtYWlsLlxuIgorCQl9CisJfQorCisJZXhpdDsKK307CisKKyRTSUd7VEVSTX0gPSBcJnNpZ25hbF9oYW5kbGVyOworJFNJR3tJTlR9ICA9IFwmc2lnbmFsX2hhbmRsZXI7CisKKyMgQmVnaW4gYnkgYWNjdW11bGF0aW5nIGFsbCB0aGUgdmFyaWFibGVzIChkZWZpbmVkIGFib3ZlKSwgdGhhdCB3ZSB3aWxsIGVuZCB1cAorIyBuZWVkaW5nLCBmaXJzdCwgZnJvbSB0aGUgY29tbWFuZCBsaW5lOgorCitteSAkaGVscDsKK215ICRyYyA9IEdldE9wdGlvbnMoImgiID0+IFwkaGVscCwKKwkJICAgICJzZW5kZXJ8ZnJvbT1zIiA9PiBcJHNlbmRlciwKKyAgICAgICAgICAgICAgICAgICAgImluLXJlcGx5LXRvPXMiID0+IFwkaW5pdGlhbF9yZXBseV90bywKKwkJICAgICJzdWJqZWN0PXMiID0+IFwkaW5pdGlhbF9zdWJqZWN0LAorCQkgICAgInRvPXMiID0+IFxAaW5pdGlhbF90bywKKwkJICAgICJ0by1jbWQ9cyIgPT4gXCR0b19jbWQsCisJCSAgICAibm8tdG8iID0+IFwkbm9fdG8sCisJCSAgICAiY2M9cyIgPT4gXEBpbml0aWFsX2NjLAorCQkgICAgIm5vLWNjIiA9PiBcJG5vX2NjLAorCQkgICAgImJjYz1zIiA9PiBcQGJjY2xpc3QsCisJCSAgICAibm8tYmNjIiA9PiBcJG5vX2JjYywKKwkJICAgICJjaGFpbi1yZXBseS10byEiID0+IFwkY2hhaW5fcmVwbHlfdG8sCisJCSAgICAibm8tY2hhaW4tcmVwbHktdG8iID0+IHN1YiB7JGNoYWluX3JlcGx5X3RvID0gMH0sCisJCSAgICAic210cC1zZXJ2ZXI9cyIgPT4gXCRzbXRwX3NlcnZlciwKKwkJICAgICJzbXRwLXNlcnZlci1vcHRpb249cyIgPT4gXEBzbXRwX3NlcnZlcl9vcHRpb25zLAorCQkgICAgInNtdHAtc2VydmVyLXBvcnQ9cyIgPT4gXCRzbXRwX3NlcnZlcl9wb3J0LAorCQkgICAgInNtdHAtdXNlcj1zIiA9PiBcJHNtdHBfYXV0aHVzZXIsCisJCSAgICAic210cC1wYXNzOnMiID0+IFwkc210cF9hdXRocGFzcywKKwkJICAgICJzbXRwLXNzbCIgPT4gc3ViIHsgJHNtdHBfZW5jcnlwdGlvbiA9ICdzc2wnIH0sCisJCSAgICAic210cC1lbmNyeXB0aW9uPXMiID0+IFwkc210cF9lbmNyeXB0aW9uLAorCQkgICAgInNtdHAtc3NsLWNlcnQtcGF0aD1zIiA9PiBcJHNtdHBfc3NsX2NlcnRfcGF0aCwKKwkJICAgICJzbXRwLWRlYnVnOmkiID0+IFwkZGVidWdfbmV0X3NtdHAsCisJCSAgICAic210cC1kb21haW46cyIgPT4gXCRzbXRwX2RvbWFpbiwKKwkJICAgICJzbXRwLWF1dGg9cyIgPT4gXCRzbXRwX2F1dGgsCisJCSAgICAiaWRlbnRpdHk9cyIgPT4gXCRpZGVudGl0eSwKKwkJICAgICJhbm5vdGF0ZSEiID0+IFwkYW5ub3RhdGUsCisJCSAgICAibm8tYW5ub3RhdGUiID0+IHN1YiB7JGFubm90YXRlID0gMH0sCisJCSAgICAiY29tcG9zZSIgPT4gXCRjb21wb3NlLAorCQkgICAgInF1aWV0IiA9PiBcJHF1aWV0LAorCQkgICAgImNjLWNtZD1zIiA9PiBcJGNjX2NtZCwKKwkJICAgICJzdXBwcmVzcy1mcm9tISIgPT4gXCRzdXBwcmVzc19mcm9tLAorCQkgICAgIm5vLXN1cHByZXNzLWZyb20iID0+IHN1YiB7JHN1cHByZXNzX2Zyb20gPSAwfSwKKwkJICAgICJzdXBwcmVzcy1jYz1zIiA9PiBcQHN1cHByZXNzX2NjLAorCQkgICAgInNpZ25lZC1vZmYtY2N8c2lnbmVkLW9mZi1ieS1jYyEiID0+IFwkc2lnbmVkX29mZl9ieV9jYywKKwkJICAgICJuby1zaWduZWQtb2ZmLWNjfG5vLXNpZ25lZC1vZmYtYnktY2MiID0+IHN1YiB7JHNpZ25lZF9vZmZfYnlfY2MgPSAwfSwKKwkJICAgICJjYy1jb3ZlcnxjYy1jb3ZlciEiID0+IFwkY292ZXJfY2MsCisJCSAgICAibm8tY2MtY292ZXIiID0+IHN1YiB7JGNvdmVyX2NjID0gMH0sCisJCSAgICAidG8tY292ZXJ8dG8tY292ZXIhIiA9PiBcJGNvdmVyX3RvLAorCQkgICAgIm5vLXRvLWNvdmVyIiA9PiBzdWIgeyRjb3Zlcl90byA9IDB9LAorCQkgICAgImNvbmZpcm09cyIgPT4gXCRjb25maXJtLAorCQkgICAgImRyeS1ydW4iID0+IFwkZHJ5X3J1biwKKwkJICAgICJlbnZlbG9wZS1zZW5kZXI9cyIgPT4gXCRlbnZlbG9wZV9zZW5kZXIsCisJCSAgICAidGhyZWFkISIgPT4gXCR0aHJlYWQsCisJCSAgICAibm8tdGhyZWFkIiA9PiBzdWIgeyR0aHJlYWQgPSAwfSwKKwkJICAgICJ2YWxpZGF0ZSEiID0+IFwkdmFsaWRhdGUsCisJCSAgICAibm8tdmFsaWRhdGUiID0+IHN1YiB7JHZhbGlkYXRlID0gMH0sCisJCSAgICAidHJhbnNmZXItZW5jb2Rpbmc9cyIgPT4gXCR0YXJnZXRfeGZlcl9lbmNvZGluZywKKwkJICAgICJmb3JtYXQtcGF0Y2ghIiA9PiBcJGZvcm1hdF9wYXRjaCwKKwkJICAgICJuby1mb3JtYXQtcGF0Y2giID0+IHN1YiB7JGZvcm1hdF9wYXRjaCA9IDB9LAorCQkgICAgIjhiaXQtZW5jb2Rpbmc9cyIgPT4gXCRhdXRvXzhiaXRfZW5jb2RpbmcsCisJCSAgICAiY29tcG9zZS1lbmNvZGluZz1zIiA9PiBcJGNvbXBvc2VfZW5jb2RpbmcsCisJCSAgICAiZm9yY2UiID0+IFwkZm9yY2UsCisJCSAgICAieG1haWxlciEiID0+IFwkdXNlX3htYWlsZXIsCisJCSAgICAibm8teG1haWxlciIgPT4gc3ViIHskdXNlX3htYWlsZXIgPSAwfSwKKwkgKTsKKwordXNhZ2UoKSBpZiAkaGVscDsKK3VubGVzcyAoJHJjKSB7CisgICAgdXNhZ2UoKTsKK30KKworZGllICJDYW5ub3QgcnVuIGdpdCBmb3JtYXQtcGF0Y2ggZnJvbSBvdXRzaWRlIGEgcmVwb3NpdG9yeVxuIgorCWlmICRmb3JtYXRfcGF0Y2ggYW5kIG5vdCAkcmVwbzsKKworIyBOb3csIGxldCdzIGZpbGwgYW55IHRoYXQgYXJlbid0IHNldCBpbiB3aXRoIGRlZmF1bHRzOgorCitzdWIgcmVhZF9jb25maWcgeworCW15ICgkcHJlZml4KSA9IEBfOworCisJZm9yZWFjaCBteSAkc2V0dGluZyAoa2V5cyAlY29uZmlnX2Jvb2xfc2V0dGluZ3MpIHsKKwkJbXkgJHRhcmdldCA9ICRjb25maWdfYm9vbF9zZXR0aW5nc3skc2V0dGluZ30tPlswXTsKKwkJJCR0YXJnZXQgPSBHaXQ6OmNvbmZpZ19ib29sKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpIHVubGVzcyAoZGVmaW5lZCAkJHRhcmdldCk7CisJfQorCisJZm9yZWFjaCBteSAkc2V0dGluZyAoa2V5cyAlY29uZmlnX3BhdGhfc2V0dGluZ3MpIHsKKwkJbXkgJHRhcmdldCA9ICRjb25maWdfcGF0aF9zZXR0aW5nc3skc2V0dGluZ307CisJCWlmIChyZWYoJHRhcmdldCkgZXEgIkFSUkFZIikgeworCQkJdW5sZXNzIChAJHRhcmdldCkgeworCQkJCW15IEB2YWx1ZXMgPSBHaXQ6OmNvbmZpZ19wYXRoKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpOworCQkJCUAkdGFyZ2V0ID0gQHZhbHVlcyBpZiAoQHZhbHVlcyAmJiBkZWZpbmVkICR2YWx1ZXNbMF0pOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJJCR0YXJnZXQgPSBHaXQ6OmNvbmZpZ19wYXRoKEByZXBvLCAiJHByZWZpeC4kc2V0dGluZyIpIHVubGVzcyAoZGVmaW5lZCAkJHRhcmdldCk7CisJCX0KKwl9CisKKwlmb3JlYWNoIG15ICRzZXR0aW5nIChrZXlzICVjb25maWdfc2V0dGluZ3MpIHsKKwkJbXkgJHRhcmdldCA9ICRjb25maWdfc2V0dGluZ3N7JHNldHRpbmd9OworCQluZXh0IGlmICRzZXR0aW5nIGVxICJ0byIgYW5kIGRlZmluZWQgJG5vX3RvOworCQluZXh0IGlmICRzZXR0aW5nIGVxICJjYyIgYW5kIGRlZmluZWQgJG5vX2NjOworCQluZXh0IGlmICRzZXR0aW5nIGVxICJiY2MiIGFuZCBkZWZpbmVkICRub19iY2M7CisJCWlmIChyZWYoJHRhcmdldCkgZXEgIkFSUkFZIikgeworCQkJdW5sZXNzIChAJHRhcmdldCkgeworCQkJCW15IEB2YWx1ZXMgPSBHaXQ6OmNvbmZpZyhAcmVwbywgIiRwcmVmaXguJHNldHRpbmciKTsKKwkJCQlAJHRhcmdldCA9IEB2YWx1ZXMgaWYgKEB2YWx1ZXMgJiYgZGVmaW5lZCAkdmFsdWVzWzBdKTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCSQkdGFyZ2V0ID0gR2l0Ojpjb25maWcoQHJlcG8sICIkcHJlZml4LiRzZXR0aW5nIikgdW5sZXNzIChkZWZpbmVkICQkdGFyZ2V0KTsKKwkJfQorCX0KKworCWlmICghZGVmaW5lZCAkc210cF9lbmNyeXB0aW9uKSB7CisJCW15ICRlbmMgPSBHaXQ6OmNvbmZpZyhAcmVwbywgIiRwcmVmaXguc210cGVuY3J5cHRpb24iKTsKKwkJaWYgKGRlZmluZWQgJGVuYykgeworCQkJJHNtdHBfZW5jcnlwdGlvbiA9ICRlbmM7CisJCX0gZWxzaWYgKEdpdDo6Y29uZmlnX2Jvb2woQHJlcG8sICIkcHJlZml4LnNtdHBzc2wiKSkgeworCQkJJHNtdHBfZW5jcnlwdGlvbiA9ICdzc2wnOworCQl9CisJfQorfQorCisjIHJlYWQgY29uZmlndXJhdGlvbiBmcm9tIFtzZW5kZW1haWwgIiRpZGVudGl0eSJdLCBmYWxsIGJhY2sgb24gW3NlbmRlbWFpbF0KKyRpZGVudGl0eSA9IEdpdDo6Y29uZmlnKEByZXBvLCAic2VuZGVtYWlsLmlkZW50aXR5IikgdW5sZXNzIChkZWZpbmVkICRpZGVudGl0eSk7CityZWFkX2NvbmZpZygic2VuZGVtYWlsLiRpZGVudGl0eSIpIGlmIChkZWZpbmVkICRpZGVudGl0eSk7CityZWFkX2NvbmZpZygic2VuZGVtYWlsIik7CisKKyMgZmFsbCBiYWNrIG9uIGJ1aWx0aW4gYm9vbCBkZWZhdWx0cworZm9yZWFjaCBteSAkc2V0dGluZyAodmFsdWVzICVjb25maWdfYm9vbF9zZXR0aW5ncykgeworCSR7JHNldHRpbmctPlswXX0gPSAkc2V0dGluZy0+WzFdIHVubGVzcyAoZGVmaW5lZCAoJHskc2V0dGluZy0+WzBdfSkpOworfQorCisjICdkZWZhdWx0JyBlbmNyeXB0aW9uIGlzIG5vbmUgLS0gdGhpcyBvbmx5IHByZXZlbnRzIGEgd2FybmluZworJHNtdHBfZW5jcnlwdGlvbiA9ICcnIHVubGVzcyAoZGVmaW5lZCAkc210cF9lbmNyeXB0aW9uKTsKKworIyBTZXQgQ0Mgc3VwcHJlc3Npb25zCitteSglc3VwcHJlc3NfY2MpOworaWYgKEBzdXBwcmVzc19jYykgeworCWZvcmVhY2ggbXkgJGVudHJ5IChAc3VwcHJlc3NfY2MpIHsKKwkJZGllICJVbmtub3duIC0tc3VwcHJlc3MtY2MgZmllbGQ6ICckZW50cnknXG4iCisJCQl1bmxlc3MgJGVudHJ5ID1+IC9eKD86YWxsfGNjY21kfGNjfGF1dGhvcnxzZWxmfHNvYnxib2R5fGJvZHljYykkLzsKKwkJJHN1cHByZXNzX2NjeyRlbnRyeX0gPSAxOworCX0KK30KKworaWYgKCRzdXBwcmVzc19jY3snYWxsJ30pIHsKKwlmb3JlYWNoIG15ICRlbnRyeSAocXcgKGNjY21kIGNjIGF1dGhvciBzZWxmIHNvYiBib2R5IGJvZHljYykpIHsKKwkJJHN1cHByZXNzX2NjeyRlbnRyeX0gPSAxOworCX0KKwlkZWxldGUgJHN1cHByZXNzX2NjeydhbGwnfTsKK30KKworIyBJZiBleHBsaWNpdCBvbGQtc3R5bGUgb25lcyBhcmUgc3BlY2lmaWVkLCB0aGV5IHRydW1wIC0tc3VwcHJlc3MtY2MuCiskc3VwcHJlc3NfY2N7J3NlbGYnfSA9ICRzdXBwcmVzc19mcm9tIGlmIGRlZmluZWQgJHN1cHByZXNzX2Zyb207Ciskc3VwcHJlc3NfY2N7J3NvYid9ID0gISRzaWduZWRfb2ZmX2J5X2NjIGlmIGRlZmluZWQgJHNpZ25lZF9vZmZfYnlfY2M7CisKK2lmICgkc3VwcHJlc3NfY2N7J2JvZHknfSkgeworCWZvcmVhY2ggbXkgJGVudHJ5IChxdyAoc29iIGJvZHljYykpIHsKKwkJJHN1cHByZXNzX2NjeyRlbnRyeX0gPSAxOworCX0KKwlkZWxldGUgJHN1cHByZXNzX2Njeydib2R5J307Cit9CisKKyMgU2V0IGNvbmZpcm0ncyBkZWZhdWx0IHZhbHVlCitteSAkY29uZmlybV91bmNvbmZpZ3VyZWQgPSAhZGVmaW5lZCAkY29uZmlybTsKK2lmICgkY29uZmlybV91bmNvbmZpZ3VyZWQpIHsKKwkkY29uZmlybSA9IHNjYWxhciAlc3VwcHJlc3NfY2MgPyAnY29tcG9zZScgOiAnYXV0byc7Cit9OworZGllICJVbmtub3duIC0tY29uZmlybSBzZXR0aW5nOiAnJGNvbmZpcm0nXG4iCisJdW5sZXNzICRjb25maXJtID1+IC9eKD86YXV0b3xjY3xjb21wb3NlfGFsd2F5c3xuZXZlcikvOworCisjIERlYnVnZ2luZywgcHJpbnQgb3V0IHRoZSBzdXBwcmVzc2lvbnMuCitpZiAoMCkgeworCXByaW50ICJzdXBwcmVzc2lvbnM6XG4iOworCWZvcmVhY2ggbXkgJGVudHJ5IChrZXlzICVzdXBwcmVzc19jYykgeworCQlwcmludGYgIiAgJS01cyAtPiAkc3VwcHJlc3NfY2N7JGVudHJ5fVxuIiwgJGVudHJ5OworCX0KK30KKworbXkgKCRyZXBvYXV0aG9yLCAkcmVwb2NvbW1pdHRlcik7CisoJHJlcG9hdXRob3IpID0gR2l0OjppZGVudF9wZXJzb24oQHJlcG8sICdhdXRob3InKTsKKygkcmVwb2NvbW1pdHRlcikgPSBHaXQ6OmlkZW50X3BlcnNvbihAcmVwbywgJ2NvbW1pdHRlcicpOworCitzdWIgcGFyc2VfYWRkcmVzc19saW5lIHsKKwlpZiAoJGhhdmVfbWFpbF9hZGRyZXNzKSB7CisJCXJldHVybiBtYXAgeyAkXy0+Zm9ybWF0IH0gTWFpbDo6QWRkcmVzcy0+cGFyc2UoJF9bMF0pOworCX0gZWxzZSB7CisJCXJldHVybiBHaXQ6OnBhcnNlX21haWxib3hlcygkX1swXSk7CisJfQorfQorCitzdWIgc3BsaXRfYWRkcnMgeworCXJldHVybiBxdW90ZXdvcmRzKCdccyosXHMqJywgMSwgQF8pOworfQorCitteSAlYWxpYXNlczsKKworc3ViIHBhcnNlX3NlbmRtYWlsX2FsaWFzIHsKKwlsb2NhbCAkXyA9IHNoaWZ0OworCWlmICgvIi8pIHsKKwkJcHJpbnQgU1RERVJSICJ3YXJuaW5nOiBzZW5kbWFpbCBhbGlhcyB3aXRoIHF1b3RlcyBpcyBub3Qgc3VwcG9ydGVkOiAkX1xuIjsKKwl9IGVsc2lmICgvOmluY2x1ZGU6LykgeworCQlwcmludCBTVERFUlIgIndhcm5pbmc6IGA6aW5jbHVkZTpgIG5vdCBzdXBwb3J0ZWQ6ICRfXG4iOworCX0gZWxzaWYgKC9bXC98XS8pIHsKKwkJcHJpbnQgU1RERVJSICJ3YXJuaW5nOiBgL2ZpbGVgIG9yIGB8cGlwZWAgcmVkaXJlY3Rpb24gbm90IHN1cHBvcnRlZDogJF9cbiI7CisJfSBlbHNpZiAoL14oXFMrPylccyo6XHMqKC4rKSQvKSB7CisJCW15ICgkYWxpYXMsICRhZGRyKSA9ICgkMSwgJDIpOworCQkkYWxpYXNlc3skYWxpYXN9ID0gWyBzcGxpdF9hZGRycygkYWRkcikgXTsKKwl9IGVsc2UgeworCQlwcmludCBTVERFUlIgIndhcm5pbmc6IHNlbmRtYWlsIGxpbmUgaXMgbm90IHJlY29nbml6ZWQ6ICRfXG4iOworCX0KK30KKworc3ViIHBhcnNlX3NlbmRtYWlsX2FsaWFzZXMgeworCW15ICRmaCA9IHNoaWZ0OworCW15ICRzID0gJyc7CisJd2hpbGUgKDwkZmg+KSB7CisJCWNob21wOworCQluZXh0IGlmIC9eXHMqJC8gfHwgL15ccyojLzsKKwkJJHMgLj0gJF8sIG5leHQgaWYgJHMgPX4gcy9cXCQvLyB8fCBzL15ccysvLzsKKwkJcGFyc2Vfc2VuZG1haWxfYWxpYXMoJHMpIGlmICRzOworCQkkcyA9ICRfOworCX0KKwkkcyA9fiBzL1xcJC8vOyAjIHNpbGVudGx5IHRvbGVyYXRlIHN0cmF5ICdcJyBvbiBsYXN0IGxpbmUKKwlwYXJzZV9zZW5kbWFpbF9hbGlhcygkcykgaWYgJHM7Cit9CisKK215ICVwYXJzZV9hbGlhcyA9ICgKKwkjIG11bHRpbGluZSBmb3JtYXRzIGNhbiBiZSBzdXBwb3J0ZWQgaW4gdGhlIGZ1dHVyZQorCW11dHQgPT4gc3ViIHsgbXkgJGZoID0gc2hpZnQ7IHdoaWxlICg8JGZoPikgeworCQlpZiAoL15ccyphbGlhc1xzKyg/Oi1ncm91cFxzK1xTK1xzKykqKFxTKylccysoLiopJC8pIHsKKwkJCW15ICgkYWxpYXMsICRhZGRyKSA9ICgkMSwgJDIpOworCQkJJGFkZHIgPX4gcy8jLiokLy87ICMgbXV0dCBhbGxvd3MgIyBjb21tZW50cworCQkJICMgY29tbWFzIGRlbGltaXQgbXVsdGlwbGUgYWRkcmVzc2VzCisJCQkkYWxpYXNlc3skYWxpYXN9ID0gWyBzcGxpdF9hZGRycygkYWRkcikgXTsKKwkJfX19LAorCW1haWxyYyA9PiBzdWIgeyBteSAkZmggPSBzaGlmdDsgd2hpbGUgKDwkZmg+KSB7CisJCWlmICgvXmFsaWFzXHMrKFxTKylccysoLiopJC8pIHsKKwkJCSMgc3BhY2VzIGRlbGltaXQgbXVsdGlwbGUgYWRkcmVzc2VzCisJCQkkYWxpYXNlc3skMX0gPSBbIHF1b3Rld29yZHMoJ1xzKycsIDAsICQyKSBdOworCQl9fX0sCisJcGluZSA9PiBzdWIgeyBteSAkZmggPSBzaGlmdDsgbXkgJGY9J1x0W15cdF0qJzsKKwkgICAgICAgIGZvciAobXkgJHggPSAnJzsgZGVmaW5lZCgkeCk7ICR4ID0gJF8pIHsKKwkJCWNob21wICR4OworCQkgICAgICAgICR4IC49ICQxIHdoaWxlKGRlZmluZWQoJF8gPSA8JGZoPikgJiYgL14gKyguKikkLyk7CisJCQkkeCA9fiAvXihcUyspJGZcdFwoPyhbXlx0XSs/KVwpPyg6PyRmKXswLDJ9JC8gb3IgbmV4dDsKKwkJCSRhbGlhc2VzeyQxfSA9IFsgc3BsaXRfYWRkcnMoJDIpIF07CisJCX19LAorCWVsbSA9PiBzdWIgIHsgbXkgJGZoID0gc2hpZnQ7CisJCSAgICAgIHdoaWxlICg8JGZoPikgeworCQkJICBpZiAoL14oXFMrKVxzKz1ccytbXj1dKz1ccyhcUyspLykgeworCQkJICAgICAgbXkgKCRhbGlhcywgJGFkZHIpID0gKCQxLCAkMik7CisJCQkgICAgICAgJGFsaWFzZXN7JGFsaWFzfSA9IFsgc3BsaXRfYWRkcnMoJGFkZHIpIF07CisJCQkgIH0KKwkJICAgICAgfSB9LAorCXNlbmRtYWlsID0+IFwmcGFyc2Vfc2VuZG1haWxfYWxpYXNlcywKKwlnbnVzID0+IHN1YiB7IG15ICRmaCA9IHNoaWZ0OyB3aGlsZSAoPCRmaD4pIHsKKwkJaWYgKC9cKGRlZmluZS1tYWlsLWFsaWFzXHMrIihcUys/KSJccysiKFxTKz8pIlwpLykgeworCQkJJGFsaWFzZXN7JDF9ID0gWyAkMiBdOworCQl9fX0KKyk7CisKK2lmIChAYWxpYXNfZmlsZXMgYW5kICRhbGlhc2ZpbGV0eXBlIGFuZCBkZWZpbmVkICRwYXJzZV9hbGlhc3skYWxpYXNmaWxldHlwZX0pIHsKKwlmb3JlYWNoIG15ICRmaWxlIChAYWxpYXNfZmlsZXMpIHsKKwkJb3BlbiBteSAkZmgsICc8JywgJGZpbGUgb3IgZGllICJvcGVuaW5nICRmaWxlOiAkIVxuIjsKKwkJJHBhcnNlX2FsaWFzeyRhbGlhc2ZpbGV0eXBlfS0+KCRmaCk7CisJCWNsb3NlICRmaDsKKwl9Cit9CisKKyMgaXNfZm9ybWF0X3BhdGNoX2FyZygkZikgcmV0dXJucyAwIGlmICRmIG5hbWVzIGEgcGF0Y2gsIG9yIDEgaWYKKyMgJGYgaXMgYSByZXZpc2lvbiBsaXN0IHNwZWNpZmljYXRpb24gdG8gYmUgcGFzc2VkIHRvIGZvcm1hdC1wYXRjaC4KK3N1YiBpc19mb3JtYXRfcGF0Y2hfYXJnIHsKKwlyZXR1cm4gdW5sZXNzICRyZXBvOworCW15ICRmID0gc2hpZnQ7CisJdHJ5IHsKKwkJJHJlcG8tPmNvbW1hbmQoJ3Jldi1wYXJzZScsICctLXZlcmlmeScsICctLXF1aWV0JywgJGYpOworCQlpZiAoZGVmaW5lZCgkZm9ybWF0X3BhdGNoKSkgeworCQkJcmV0dXJuICRmb3JtYXRfcGF0Y2g7CisJCX0KKwkJZGllKDw8RU9GKTsKK0ZpbGUgJyRmJyBleGlzdHMgYnV0IGl0IGNvdWxkIGFsc28gYmUgdGhlIHJhbmdlIG9mIGNvbW1pdHMKK3RvIHByb2R1Y2UgcGF0Y2hlcyBmb3IuICBQbGVhc2UgZGlzYW1iaWd1YXRlIGJ5Li4uCisKKyAgICAqIFNheWluZyAiLi8kZiIgaWYgeW91IG1lYW4gYSBmaWxlOyBvcgorICAgICogR2l2aW5nIC0tZm9ybWF0LXBhdGNoIG9wdGlvbiBpZiB5b3UgbWVhbiBhIHJhbmdlLgorRU9GCisJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggeworCQkjIE5vdCBhIHZhbGlkIHJldmlzaW9uLiAgVHJlYXQgaXQgYXMgYSBmaWxlbmFtZS4KKwkJcmV0dXJuIDA7CisJfQorfQorCisjIE5vdyB0aGF0IGFsbCB0aGUgZGVmYXVsdHMgYXJlIHNldCwgcHJvY2VzcyB0aGUgcmVzdCBvZiB0aGUgY29tbWFuZCBsaW5lCisjIGFyZ3VtZW50cyBhbmQgY29sbGVjdCB1cCB0aGUgZmlsZXMgdGhhdCBuZWVkIHRvIGJlIHByb2Nlc3NlZC4KK215IEByZXZfbGlzdF9vcHRzOword2hpbGUgKGRlZmluZWQobXkgJGYgPSBzaGlmdCBAQVJHVikpIHsKKwlpZiAoJGYgZXEgIi0tIikgeworCQlwdXNoIEByZXZfbGlzdF9vcHRzLCAiLS0iLCBAQVJHVjsKKwkJQEFSR1YgPSAoKTsKKwl9IGVsc2lmICgtZCAkZiBhbmQgIWlzX2Zvcm1hdF9wYXRjaF9hcmcoJGYpKSB7CisJCW9wZW5kaXIgbXkgJGRoLCAkZgorCQkJb3IgZGllICJGYWlsZWQgdG8gb3BlbmRpciAkZjogJCEiOworCisJCXB1c2ggQGZpbGVzLCBncmVwIHsgLWYgJF8gfSBtYXAgeyBjYXRmaWxlKCRmLCAkXykgfQorCQkJCXNvcnQgcmVhZGRpciAkZGg7CisJCWNsb3NlZGlyICRkaDsKKwl9IGVsc2lmICgoLWYgJGYgb3IgLXAgJGYpIGFuZCAhaXNfZm9ybWF0X3BhdGNoX2FyZygkZikpIHsKKwkJcHVzaCBAZmlsZXMsICRmOworCX0gZWxzZSB7CisJCXB1c2ggQHJldl9saXN0X29wdHMsICRmOworCX0KK30KKworaWYgKEByZXZfbGlzdF9vcHRzKSB7CisJZGllICJDYW5ub3QgcnVuIGdpdCBmb3JtYXQtcGF0Y2ggZnJvbSBvdXRzaWRlIGEgcmVwb3NpdG9yeVxuIgorCQl1bmxlc3MgJHJlcG87CisJcHVzaCBAZmlsZXMsICRyZXBvLT5jb21tYW5kKCdmb3JtYXQtcGF0Y2gnLCAnLW8nLCB0ZW1wZGlyKENMRUFOVVAgPT4gMSksIEByZXZfbGlzdF9vcHRzKTsKK30KKworaWYgKCR2YWxpZGF0ZSkgeworCWZvcmVhY2ggbXkgJGYgKEBmaWxlcykgeworCQl1bmxlc3MgKC1wICRmKSB7CisJCQlteSAkZXJyb3IgPSB2YWxpZGF0ZV9wYXRjaCgkZik7CisJCQkkZXJyb3IgYW5kIGRpZSAiZmF0YWw6ICRmOiAkZXJyb3Jcbndhcm5pbmc6IG5vIHBhdGNoZXMgd2VyZSBzZW50XG4iOworCQl9CisJfQorfQorCitpZiAoQGZpbGVzKSB7CisJdW5sZXNzICgkcXVpZXQpIHsKKwkJcHJpbnQgJF8sIlxuIiBmb3IgKEBmaWxlcyk7CisJfQorfSBlbHNlIHsKKwlwcmludCBTVERFUlIgIlxuTm8gcGF0Y2ggZmlsZXMgc3BlY2lmaWVkIVxuXG4iOworCXVzYWdlKCk7Cit9CisKK3N1YiBnZXRfcGF0Y2hfc3ViamVjdCB7CisJbXkgJGZuID0gc2hpZnQ7CisJb3BlbiAobXkgJGZoLCAnPCcsICRmbik7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJbmV4dCB1bmxlc3MgKCRsaW5lID1+IC9eU3ViamVjdDogKC4qKSQvKTsKKwkJY2xvc2UgJGZoOworCQlyZXR1cm4gIkdJVDogJDFcbiI7CisJfQorCWNsb3NlICRmaDsKKwlkaWUgIk5vIHN1YmplY3QgbGluZSBpbiAkZm4gPyI7Cit9CisKK2lmICgkY29tcG9zZSkgeworCSMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSBzZWN1cmUsIGJ1dCB3ZSB3aWxsIG1ha2UgYSBzbWFsbAorCSMgZWZmb3J0IHRvIGhhdmUgaXQgYmUgdW5pcXVlCisJJGNvbXBvc2VfZmlsZW5hbWUgPSAoJHJlcG8gPworCQl0ZW1wZmlsZSgiLmdpdHNlbmRlbWFpbC5tc2cuWFhYWFhYIiwgRElSID0+ICRyZXBvLT5yZXBvX3BhdGgoKSkgOgorCQl0ZW1wZmlsZSgiLmdpdHNlbmRlbWFpbC5tc2cuWFhYWFhYIiwgRElSID0+ICIuIikpWzFdOworCW9wZW4gbXkgJGMsICI+IiwgJGNvbXBvc2VfZmlsZW5hbWUKKwkJb3IgZGllICJGYWlsZWQgdG8gb3BlbiBmb3Igd3JpdGluZyAkY29tcG9zZV9maWxlbmFtZTogJCEiOworCisKKwlteSAkdHBsX3NlbmRlciA9ICRzZW5kZXIgfHwgJHJlcG9hdXRob3IgfHwgJHJlcG9jb21taXR0ZXIgfHwgJyc7CisJbXkgJHRwbF9zdWJqZWN0ID0gJGluaXRpYWxfc3ViamVjdCB8fCAnJzsKKwlteSAkdHBsX3JlcGx5X3RvID0gJGluaXRpYWxfcmVwbHlfdG8gfHwgJyc7CisKKwlwcmludCAkYyA8PEVPVDsKK0Zyb20gJHRwbF9zZW5kZXIgIyBUaGlzIGxpbmUgaXMgaWdub3JlZC4KK0dJVDogTGluZXMgYmVnaW5uaW5nIGluICJHSVQ6IiB3aWxsIGJlIHJlbW92ZWQuCitHSVQ6IENvbnNpZGVyIGluY2x1ZGluZyBhbiBvdmVyYWxsIGRpZmZzdGF0IG9yIHRhYmxlIG9mIGNvbnRlbnRzCitHSVQ6IGZvciB0aGUgcGF0Y2ggeW91IGFyZSB3cml0aW5nLgorR0lUOgorR0lUOiBDbGVhciB0aGUgYm9keSBjb250ZW50IGlmIHlvdSBkb24ndCB3aXNoIHRvIHNlbmQgYSBzdW1tYXJ5LgorRnJvbTogJHRwbF9zZW5kZXIKK1N1YmplY3Q6ICR0cGxfc3ViamVjdAorSW4tUmVwbHktVG86ICR0cGxfcmVwbHlfdG8KKworRU9UCisJZm9yIG15ICRmIChAZmlsZXMpIHsKKwkJcHJpbnQgJGMgZ2V0X3BhdGNoX3N1YmplY3QoJGYpOworCX0KKwljbG9zZSAkYzsKKworCWlmICgkYW5ub3RhdGUpIHsKKwkJZG9fZWRpdCgkY29tcG9zZV9maWxlbmFtZSwgQGZpbGVzKTsKKwl9IGVsc2UgeworCQlkb19lZGl0KCRjb21wb3NlX2ZpbGVuYW1lKTsKKwl9CisKKwlvcGVuIG15ICRjMiwgIj4iLCAkY29tcG9zZV9maWxlbmFtZSAuICIuZmluYWwiCisJCW9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gJGNvbXBvc2VfZmlsZW5hbWUuZmluYWwgOiAiIC4gJCE7CisKKwlvcGVuICRjLCAiPCIsICRjb21wb3NlX2ZpbGVuYW1lCisJCW9yIGRpZSAiRmFpbGVkIHRvIG9wZW4gJGNvbXBvc2VfZmlsZW5hbWUgOiAiIC4gJCE7CisKKwlteSAkbmVlZF84Yml0X2N0ZSA9IGZpbGVfaGFzX25vbmFzY2lpKCRjb21wb3NlX2ZpbGVuYW1lKTsKKwlteSAkaW5fYm9keSA9IDA7CisJbXkgJHN1bW1hcnlfZW1wdHkgPSAxOworCWlmICghZGVmaW5lZCAkY29tcG9zZV9lbmNvZGluZykgeworCQkkY29tcG9zZV9lbmNvZGluZyA9ICJVVEYtOCI7CisJfQorCXdoaWxlKDwkYz4pIHsKKwkJbmV4dCBpZiBtL15HSVQ6LzsKKwkJaWYgKCRpbl9ib2R5KSB7CisJCQkkc3VtbWFyeV9lbXB0eSA9IDAgdW5sZXNzICgvXlxuJC8pOworCQl9IGVsc2lmICgvXlxuJC8pIHsKKwkJCSRpbl9ib2R5ID0gMTsKKwkJCWlmICgkbmVlZF84Yml0X2N0ZSkgeworCQkJCXByaW50ICRjMiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIsCisJCQkJCSAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyAiLAorCQkJCQkgICAiY2hhcnNldD0kY29tcG9zZV9lbmNvZGluZ1xuIiwKKwkJCQkJICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iOworCQkJfQorCQl9IGVsc2lmICgvXk1JTUUtVmVyc2lvbjovaSkgeworCQkJJG5lZWRfOGJpdF9jdGUgPSAwOworCQl9IGVsc2lmICgvXlN1YmplY3Q6XHMqKC4rKVxzKiQvaSkgeworCQkJJGluaXRpYWxfc3ViamVjdCA9ICQxOworCQkJbXkgJHN1YmplY3QgPSAkaW5pdGlhbF9zdWJqZWN0OworCQkJJF8gPSAiU3ViamVjdDogIiAuCisJCQkJcXVvdGVfc3ViamVjdCgkc3ViamVjdCwgJGNvbXBvc2VfZW5jb2RpbmcpIC4KKwkJCQkiXG4iOworCQl9IGVsc2lmICgvXkluLVJlcGx5LVRvOlxzKiguKylccyokL2kpIHsKKwkJCSRpbml0aWFsX3JlcGx5X3RvID0gJDE7CisJCQluZXh0OworCQl9IGVsc2lmICgvXkZyb206XHMqKC4rKVxzKiQvaSkgeworCQkJJHNlbmRlciA9ICQxOworCQkJbmV4dDsKKwkJfSBlbHNpZiAoL14oPzpUb3xDY3xCY2MpOi9pKSB7CisJCQlwcmludCAiVG8vQ2MvQmNjIGZpZWxkcyBhcmUgbm90IGludGVycHJldGVkIHlldCwgdGhleSBoYXZlIGJlZW4gaWdub3JlZFxuIjsKKwkJCW5leHQ7CisJCX0KKwkJcHJpbnQgJGMyICRfOworCX0KKwljbG9zZSAkYzsKKwljbG9zZSAkYzI7CisKKwlpZiAoJHN1bW1hcnlfZW1wdHkpIHsKKwkJcHJpbnQgIlN1bW1hcnkgZW1haWwgaXMgZW1wdHksIHNraXBwaW5nIGl0XG4iOworCQkkY29tcG9zZSA9IC0xOworCX0KK30gZWxzaWYgKCRhbm5vdGF0ZSkgeworCWRvX2VkaXQoQGZpbGVzKTsKK30KKworc3ViIGFzayB7CisJbXkgKCRwcm9tcHQsICVhcmcpID0gQF87CisJbXkgJHZhbGlkX3JlID0gJGFyZ3t2YWxpZF9yZX07CisJbXkgJGRlZmF1bHQgPSAkYXJne2RlZmF1bHR9OworCW15ICRjb25maXJtX29ubHkgPSAkYXJne2NvbmZpcm1fb25seX07CisJbXkgJHJlc3A7CisJbXkgJGkgPSAwOworCXJldHVybiBkZWZpbmVkICRkZWZhdWx0ID8gJGRlZmF1bHQgOiB1bmRlZgorCQl1bmxlc3MgZGVmaW5lZCAkdGVybS0+SU4gYW5kIGRlZmluZWQgZmlsZW5vKCR0ZXJtLT5JTikgYW5kCisJCSAgICAgICBkZWZpbmVkICR0ZXJtLT5PVVQgYW5kIGRlZmluZWQgZmlsZW5vKCR0ZXJtLT5PVVQpOworCXdoaWxlICgkaSsrIDwgMTApIHsKKwkJJHJlc3AgPSAkdGVybS0+cmVhZGxpbmUoJHByb21wdCk7CisJCWlmICghZGVmaW5lZCAkcmVzcCkgeyAjIEVPRgorCQkJcHJpbnQgIlxuIjsKKwkJCXJldHVybiBkZWZpbmVkICRkZWZhdWx0ID8gJGRlZmF1bHQgOiB1bmRlZjsKKwkJfQorCQlpZiAoJHJlc3AgZXEgJycgYW5kIGRlZmluZWQgJGRlZmF1bHQpIHsKKwkJCXJldHVybiAkZGVmYXVsdDsKKwkJfQorCQlpZiAoIWRlZmluZWQgJHZhbGlkX3JlIG9yICRyZXNwID1+IC8kdmFsaWRfcmUvKSB7CisJCQlyZXR1cm4gJHJlc3A7CisJCX0KKwkJaWYgKCRjb25maXJtX29ubHkpIHsKKwkJCW15ICR5ZXNubyA9ICR0ZXJtLT5yZWFkbGluZSgiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVzZSA8JHJlc3A+IFt5L05dPyAiKTsKKwkJCWlmIChkZWZpbmVkICR5ZXNubyAmJiAkeWVzbm8gPX4gL3kvaSkgeworCQkJCXJldHVybiAkcmVzcDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK215ICVicm9rZW5fZW5jb2Rpbmc7CisKK3N1YiBmaWxlX2RlY2xhcmVzXzhiaXRfY3RlIHsKKwlteSAkZm4gPSBzaGlmdDsKKwlvcGVuIChteSAkZmgsICc8JywgJGZuKTsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgeworCQlsYXN0IGlmICgkbGluZSA9fiAvXiQvKTsKKwkJcmV0dXJuIDEgaWYgKCRsaW5lID1+IC9eQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogLio4Yml0LiokLyk7CisJfQorCWNsb3NlICRmaDsKKwlyZXR1cm4gMDsKK30KKworZm9yZWFjaCBteSAkZiAoQGZpbGVzKSB7CisJbmV4dCB1bmxlc3MgKGJvZHlfb3Jfc3ViamVjdF9oYXNfbm9uYXNjaWkoJGYpCisJCSAgICAgJiYgIWZpbGVfZGVjbGFyZXNfOGJpdF9jdGUoJGYpKTsKKwkkYnJva2VuX2VuY29kaW5neyRmfSA9IDE7Cit9CisKK2lmICghZGVmaW5lZCAkYXV0b184Yml0X2VuY29kaW5nICYmIHNjYWxhciAlYnJva2VuX2VuY29kaW5nKSB7CisJcHJpbnQgIlRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIDhiaXQsIGJ1dCBkbyBub3QgZGVjbGFyZSAiIC4KKwkJImEgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZy5cbiI7CisJZm9yZWFjaCBteSAkZiAoc29ydCBrZXlzICVicm9rZW5fZW5jb2RpbmcpIHsKKwkJcHJpbnQgIiAgICAkZlxuIjsKKwl9CisJJGF1dG9fOGJpdF9lbmNvZGluZyA9IGFzaygiV2hpY2ggOGJpdCBlbmNvZGluZyBzaG91bGQgSSBkZWNsYXJlIFtVVEYtOF0/ICIsCisJCQkJICB2YWxpZF9yZSA9PiBxci8uezR9LywgY29uZmlybV9vbmx5ID0+IDEsCisJCQkJICBkZWZhdWx0ID0+ICJVVEYtOCIpOworfQorCitpZiAoISRmb3JjZSkgeworCWZvciBteSAkZiAoQGZpbGVzKSB7CisJCWlmIChnZXRfcGF0Y2hfc3ViamVjdCgkZikgPX4gL1xRKioqIFNVQkpFQ1QgSEVSRSAqKipcRS8pIHsKKwkJCWRpZSAiUmVmdXNpbmcgdG8gc2VuZCBiZWNhdXNlIHRoZSBwYXRjaFxuXHQkZlxuIgorCQkJCS4gImhhcyB0aGUgdGVtcGxhdGUgc3ViamVjdCAnKioqIFNVQkpFQ1QgSEVSRSAqKionLiAiCisJCQkJLiAiUGFzcyAtLWZvcmNlIGlmIHlvdSByZWFsbHkgd2FudCB0byBzZW5kLlxuIjsKKwkJfQorCX0KK30KKworaWYgKGRlZmluZWQgJHNlbmRlcikgeworCSRzZW5kZXIgPX4gcy9eXHMrfFxzKyQvL2c7CisJKCRzZW5kZXIpID0gZXhwYW5kX2FsaWFzZXMoJHNlbmRlcik7Cit9IGVsc2UgeworCSRzZW5kZXIgPSAkcmVwb2F1dGhvciB8fCAkcmVwb2NvbW1pdHRlciB8fCAnJzsKK30KKworIyAkc2VuZGVyIGNvdWxkIGJlIGFuIGFscmVhZHkgc2FuaXRpemVkIGFkZHJlc3MKKyMgKGUuZy4gc2VuZGVtYWlsLmZyb20gY291bGQgYmUgbWFudWFsbHkgc2FuaXRpemVkIGJ5IHVzZXIpLgorIyBCdXQgaXQncyBhIG5vLW9wIHRvIHJ1biBzYW5pdGl6ZV9hZGRyZXNzIG9uIGFuIGFscmVhZHkgc2FuaXRpemVkIGFkZHJlc3MuCiskc2VuZGVyID0gc2FuaXRpemVfYWRkcmVzcygkc2VuZGVyKTsKKworbXkgJHByb21wdGluZyA9IDA7CitpZiAoIUBpbml0aWFsX3RvICYmICFkZWZpbmVkICR0b19jbWQpIHsKKwlteSAkdG8gPSBhc2soIldobyBzaG91bGQgdGhlIGVtYWlscyBiZSBzZW50IHRvIChpZiBhbnkpPyAiLAorCQkgICAgIGRlZmF1bHQgPT4gIiIsCisJCSAgICAgdmFsaWRfcmUgPT4gcXIvXEAuKlwuLywgY29uZmlybV9vbmx5ID0+IDEpOworCXB1c2ggQGluaXRpYWxfdG8sIHBhcnNlX2FkZHJlc3NfbGluZSgkdG8pIGlmIGRlZmluZWQgJHRvOyAjIHNhbml0aXplZC92YWxpZGF0ZWQgbGF0ZXIKKwkkcHJvbXB0aW5nKys7Cit9CisKK3N1YiBleHBhbmRfYWxpYXNlcyB7CisJcmV0dXJuIG1hcCB7IGV4cGFuZF9vbmVfYWxpYXMoJF8pIH0gQF87Cit9CisKK215ICVFWFBBTkRFRF9BTElBU0VTOworc3ViIGV4cGFuZF9vbmVfYWxpYXMgeworCW15ICRhbGlhcyA9IHNoaWZ0OworCWlmICgkRVhQQU5ERURfQUxJQVNFU3skYWxpYXN9KSB7CisJCWRpZSAiZmF0YWw6IGFsaWFzICckYWxpYXMnIGV4cGFuZHMgdG8gaXRzZWxmXG4iOworCX0KKwlsb2NhbCAkRVhQQU5ERURfQUxJQVNFU3skYWxpYXN9ID0gMTsKKwlyZXR1cm4gJGFsaWFzZXN7JGFsaWFzfSA/IGV4cGFuZF9hbGlhc2VzKEB7JGFsaWFzZXN7JGFsaWFzfX0pIDogJGFsaWFzOworfQorCitAaW5pdGlhbF90byA9IHByb2Nlc3NfYWRkcmVzc19saXN0KEBpbml0aWFsX3RvKTsKK0Bpbml0aWFsX2NjID0gcHJvY2Vzc19hZGRyZXNzX2xpc3QoQGluaXRpYWxfY2MpOworQGJjY2xpc3QgPSBwcm9jZXNzX2FkZHJlc3NfbGlzdChAYmNjbGlzdCk7CisKK2lmICgkdGhyZWFkICYmICFkZWZpbmVkICRpbml0aWFsX3JlcGx5X3RvICYmICRwcm9tcHRpbmcpIHsKKwkkaW5pdGlhbF9yZXBseV90byA9IGFzaygKKwkJIk1lc3NhZ2UtSUQgdG8gYmUgdXNlZCBhcyBJbi1SZXBseS1UbyBmb3IgdGhlIGZpcnN0IGVtYWlsIChpZiBhbnkpPyAiLAorCQlkZWZhdWx0ID0+ICIiLAorCQl2YWxpZF9yZSA9PiBxci9cQC4qXC4vLCBjb25maXJtX29ubHkgPT4gMSk7Cit9CitpZiAoZGVmaW5lZCAkaW5pdGlhbF9yZXBseV90bykgeworCSRpbml0aWFsX3JlcGx5X3RvID1+IHMvXlxzKjw/Ly87CisJJGluaXRpYWxfcmVwbHlfdG8gPX4gcy8+P1xzKiQvLzsKKwkkaW5pdGlhbF9yZXBseV90byA9ICI8JGluaXRpYWxfcmVwbHlfdG8+IiBpZiAkaW5pdGlhbF9yZXBseV90byBuZSAnJzsKK30KKworaWYgKCFkZWZpbmVkICRzbXRwX3NlcnZlcikgeworCWZvcmVhY2ggKHF3KCAvdXNyL3NiaW4vc2VuZG1haWwgL3Vzci9saWIvc2VuZG1haWwgKSkgeworCQlpZiAoLXggJF8pIHsKKwkJCSRzbXRwX3NlcnZlciA9ICRfOworCQkJbGFzdDsKKwkJfQorCX0KKwkkc210cF9zZXJ2ZXIgfHw9ICdsb2NhbGhvc3QnOyAjIGNvdWxkIGJlIDEyNy4wLjAuMSwgdG9vLi4uICpzaHJ1ZyoKK30KKworaWYgKCRjb21wb3NlICYmICRjb21wb3NlID4gMCkgeworCUBmaWxlcyA9ICgkY29tcG9zZV9maWxlbmFtZSAuICIuZmluYWwiLCBAZmlsZXMpOworfQorCisjIFZhcmlhYmxlcyB3ZSBzZXQgYXMgcGFydCBvZiB0aGUgbG9vcCBvdmVyIGZpbGVzCitvdXIgKCRtZXNzYWdlX2lkLCAlbWFpbCwgJHN1YmplY3QsICRyZXBseV90bywgJHJlZmVyZW5jZXMsICRtZXNzYWdlLAorCSRuZWVkc19jb25maXJtLCAkbWVzc2FnZV9udW0sICRhc2tfZGVmYXVsdCk7CisKK3N1YiBleHRyYWN0X3ZhbGlkX2FkZHJlc3MgeworCW15ICRhZGRyZXNzID0gc2hpZnQ7CisJbXkgJGxvY2FsX3BhcnRfcmVnZXhwID0gcXIvW148PiJcc0BdKy87CisJbXkgJGRvbWFpbl9yZWdleHAgPSBxci9bXi48PiJcc0BdKyg/OlwuW14uPD4iXHNAXSspKy87CisKKwkjIGNoZWNrIGZvciBhIGxvY2FsIGFkZHJlc3M6CisJcmV0dXJuICRhZGRyZXNzIGlmICgkYWRkcmVzcyA9fiAvXigkbG9jYWxfcGFydF9yZWdleHApJC8pOworCisJJGFkZHJlc3MgPX4gcy9eXHMqPCguKik+XHMqJC8kMS87CisJaWYgKCRoYXZlX2VtYWlsX3ZhbGlkKSB7CisJCXJldHVybiBzY2FsYXIgRW1haWw6OlZhbGlkLT5hZGRyZXNzKCRhZGRyZXNzKTsKKwl9CisKKwkjIGxlc3Mgcm9idXN0L2NvcnJlY3QgdGhhbiB0aGUgbW9uc3RlciByZWdleHAgaW4gRW1haWw6OlZhbGlkLAorCSMgYnV0IHN0aWxsIGRvZXMgYSA5OSUgam9iLCBhbmQgb25lIGxlc3MgZGVwZW5kZW5jeQorCXJldHVybiAkMSBpZiAkYWRkcmVzcyA9fiAvKCRsb2NhbF9wYXJ0X3JlZ2V4cFxAJGRvbWFpbl9yZWdleHApLzsKKwlyZXR1cm47Cit9CisKK3N1YiBleHRyYWN0X3ZhbGlkX2FkZHJlc3Nfb3JfZGllIHsKKwlteSAkYWRkcmVzcyA9IHNoaWZ0OworCSRhZGRyZXNzID0gZXh0cmFjdF92YWxpZF9hZGRyZXNzKCRhZGRyZXNzKTsKKwlkaWUgImVycm9yOiB1bmFibGUgdG8gZXh0cmFjdCBhIHZhbGlkIGFkZHJlc3MgZnJvbTogJGFkZHJlc3NcbiIKKwkJaWYgISRhZGRyZXNzOworCXJldHVybiAkYWRkcmVzczsKK30KKworc3ViIHZhbGlkYXRlX2FkZHJlc3MgeworCW15ICRhZGRyZXNzID0gc2hpZnQ7CisJd2hpbGUgKCFleHRyYWN0X3ZhbGlkX2FkZHJlc3MoJGFkZHJlc3MpKSB7CisJCXByaW50IFNUREVSUiAiZXJyb3I6IHVuYWJsZSB0byBleHRyYWN0IGEgdmFsaWQgYWRkcmVzcyBmcm9tOiAkYWRkcmVzc1xuIjsKKwkJJF8gPSBhc2soIldoYXQgdG8gZG8gd2l0aCB0aGlzIGFkZHJlc3M/IChbcV11aXR8W2Rdcm9wfFtlXWRpdCk6ICIsCisJCQl2YWxpZF9yZSA9PiBxci9eKD86cXVpdHxxfGRyb3B8ZHxlZGl0fGUpL2ksCisJCQlkZWZhdWx0ID0+ICdxJyk7CisJCWlmICgvXmQvaSkgeworCQkJcmV0dXJuIHVuZGVmOworCQl9IGVsc2lmICgvXnEvaSkgeworCQkJY2xlYW51cF9jb21wb3NlX2ZpbGVzKCk7CisJCQlleGl0KDApOworCQl9CisJCSRhZGRyZXNzID0gYXNrKCJXaG8gc2hvdWxkIHRoZSBlbWFpbCBiZSBzZW50IHRvIChpZiBhbnkpPyAiLAorCQkJZGVmYXVsdCA9PiAiIiwKKwkJCXZhbGlkX3JlID0+IHFyL1xALipcLi8sIGNvbmZpcm1fb25seSA9PiAxKTsKKwl9CisJcmV0dXJuICRhZGRyZXNzOworfQorCitzdWIgdmFsaWRhdGVfYWRkcmVzc19saXN0IHsKKwlyZXR1cm4gKGdyZXAgeyBkZWZpbmVkICRfIH0KKwkJbWFwIHsgdmFsaWRhdGVfYWRkcmVzcygkXykgfSBAXyk7Cit9CisKKyMgVXN1YWxseSBkb24ndCBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBiZWxvdyBoZXJlLgorCisjIHdlIG1ha2UgYSAiZmFrZSIgbWVzc2FnZSBpZCBieSB0YWtpbmcgdGhlIGN1cnJlbnQgbnVtYmVyCisjIG9mIHNlY29uZHMgc2luY2UgdGhlIGJlZ2lubmluZyBvZiBVbml4IHRpbWUgYW5kIHRhY2tpbmcgb24KKyMgYSByYW5kb20gbnVtYmVyIHRvIHRoZSBlbmQsIGluIGNhc2Ugd2UgYXJlIGNhbGxlZCBxdWlja2VyIHRoYW4KKyMgMSBzZWNvbmQgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSB3ZXJlIGNhbGxlZC4KKworIyBXZSdsbCBzZXR1cCBhIHRlbXBsYXRlIGZvciB0aGUgbWVzc2FnZSBpZCwgdXNpbmcgdGhlICJmcm9tIiBhZGRyZXNzOgorCitteSAoJG1lc3NhZ2VfaWRfc3RhbXAsICRtZXNzYWdlX2lkX3NlcmlhbCk7CitzdWIgbWFrZV9tZXNzYWdlX2lkIHsKKwlteSAkdW5pcTsKKwlpZiAoIWRlZmluZWQgJG1lc3NhZ2VfaWRfc3RhbXApIHsKKwkJJG1lc3NhZ2VfaWRfc3RhbXAgPSBzcHJpbnRmKCIlcy0lcyIsIHRpbWUsICQkKTsKKwkJJG1lc3NhZ2VfaWRfc2VyaWFsID0gMDsKKwl9CisJJG1lc3NhZ2VfaWRfc2VyaWFsKys7CisJJHVuaXEgPSAiJG1lc3NhZ2VfaWRfc3RhbXAtJG1lc3NhZ2VfaWRfc2VyaWFsIjsKKworCW15ICRkdV9wYXJ0OworCWZvciAoJHNlbmRlciwgJHJlcG9jb21taXR0ZXIsICRyZXBvYXV0aG9yKSB7CisJCSRkdV9wYXJ0ID0gZXh0cmFjdF92YWxpZF9hZGRyZXNzKHNhbml0aXplX2FkZHJlc3MoJF8pKTsKKwkJbGFzdCBpZiAoZGVmaW5lZCAkZHVfcGFydCBhbmQgJGR1X3BhcnQgbmUgJycpOworCX0KKwlpZiAobm90IGRlZmluZWQgJGR1X3BhcnQgb3IgJGR1X3BhcnQgZXEgJycpIHsKKwkJcmVxdWlyZSBTeXM6Okhvc3RuYW1lOworCQkkZHVfcGFydCA9ICd1c2VyQCcgLiBTeXM6Okhvc3RuYW1lOjpob3N0bmFtZSgpOworCX0KKwlteSAkbWVzc2FnZV9pZF90ZW1wbGF0ZSA9ICI8JXMtZ2l0LXNlbmQtZW1haWwtJXM+IjsKKwkkbWVzc2FnZV9pZCA9IHNwcmludGYoJG1lc3NhZ2VfaWRfdGVtcGxhdGUsICR1bmlxLCAkZHVfcGFydCk7CisJI3ByaW50ICJuZXcgbWVzc2FnZSBpZCA9ICRtZXNzYWdlX2lkXG4iOyAjIFdhcyB1c2VmdWwgZm9yIGRlYnVnZ2luZworfQorCisKKworJHRpbWUgPSB0aW1lIC0gc2NhbGFyICQjZmlsZXM7CisKK3N1YiB1bnF1b3RlX3JmYzIwNDcgeworCWxvY2FsICgkXykgPSBAXzsKKwlteSAkY2hhcnNldDsKKwlteSAkc2VwID0gcXIvWyBcdF0rLzsKKwlzeyRyZV9lbmNvZGVkX3dvcmQoPzokc2VwJHJlX2VuY29kZWRfd29yZCkqfXsKKwkJbXkgQHdvcmRzID0gc3BsaXQgJHNlcCwgJCY7CisJCWZvcmVhY2ggKEB3b3JkcykgeworCQkJbS8kcmVfZW5jb2RlZF93b3JkLzsKKwkJCSRjaGFyc2V0ID0gJDE7CisJCQlteSAkZW5jb2RpbmcgPSAkMjsKKwkJCW15ICR0ZXh0ID0gJDM7CisJCQlpZiAoJGVuY29kaW5nIGVxICdxJyB8fCAkZW5jb2RpbmcgZXEgJ1EnKSB7CisJCQkJJF8gPSAkdGV4dDsKKwkJCQlzL18vIC9nOworCQkJCXMvPShbMC05QS1GXXsyfSkvY2hyKGhleCgkMSkpL2VnaTsKKwkJCX0gZWxzZSB7CisJCQkJIyBvdGhlciBlbmNvZGluZ3Mgbm90IHN1cHBvcnRlZCB5ZXQKKwkJCX0KKwkJfQorCQlqb2luICcnLCBAd29yZHM7CisJfWVnOworCXJldHVybiB3YW50YXJyYXkgPyAoJF8sICRjaGFyc2V0KSA6ICRfOworfQorCitzdWIgcXVvdGVfcmZjMjA0NyB7CisJbG9jYWwgJF8gPSBzaGlmdDsKKwlteSAkZW5jb2RpbmcgPSBzaGlmdCB8fCAnVVRGLTgnOworCXMvKFteLWEtekEtWjAtOSEqK1wvXSkvc3ByaW50ZigiPSUwMlgiLCBvcmQoJDEpKS9lZzsKKwlzLyguKikvPVw/JGVuY29kaW5nXD9xXD8kMVw/PS87CisJcmV0dXJuICRfOworfQorCitzdWIgaXNfcmZjMjA0N19xdW90ZWQgeworCW15ICRzID0gc2hpZnQ7CisJbGVuZ3RoKCRzKSA8PSA3NSAmJgorCSRzID1+IG0vXig/OiJbWzphc2NpaTpdXSoifCRyZV9lbmNvZGVkX3dvcmQpJC9vOworfQorCitzdWIgc3ViamVjdF9uZWVkc19yZmMyMDQ3X3F1b3RpbmcgeworCW15ICRzID0gc2hpZnQ7CisKKwlyZXR1cm4gKCRzID1+IC9bXls6YXNjaWk6XV0vKSB8fCAoJHMgPX4gLz1cPy8pOworfQorCitzdWIgcXVvdGVfc3ViamVjdCB7CisJbG9jYWwgJHN1YmplY3QgPSBzaGlmdDsKKwlteSAkZW5jb2RpbmcgPSBzaGlmdCB8fCAnVVRGLTgnOworCisJaWYgKHN1YmplY3RfbmVlZHNfcmZjMjA0N19xdW90aW5nKCRzdWJqZWN0KSkgeworCQlyZXR1cm4gcXVvdGVfcmZjMjA0Nygkc3ViamVjdCwgJGVuY29kaW5nKTsKKwl9CisJcmV0dXJuICRzdWJqZWN0OworfQorCisjIHVzZSB0aGUgc2ltcGxlc3QgcXVvdGluZyBiZWluZyBhYmxlIHRvIGhhbmRsZSB0aGUgcmVjaXBpZW50CitzdWIgc2FuaXRpemVfYWRkcmVzcyB7CisJbXkgKCRyZWNpcGllbnQpID0gQF87CisKKwkjIHJlbW92ZSBnYXJiYWdlIGFmdGVyIGVtYWlsIGFkZHJlc3MKKwkkcmVjaXBpZW50ID1+IHMvKC4qPikuKiQvJDEvOworCisJbXkgKCRyZWNpcGllbnRfbmFtZSwgJHJlY2lwaWVudF9hZGRyKSA9ICgkcmVjaXBpZW50ID1+IC9eKC4qPylccyooPC4qKS8pOworCisJaWYgKG5vdCAkcmVjaXBpZW50X25hbWUpIHsKKwkJcmV0dXJuICRyZWNpcGllbnQ7CisJfQorCisJIyBpZiByZWNpcGllbnRfbmFtZSBpcyBhbHJlYWR5IHF1b3RlZCwgZG8gbm90aGluZworCWlmIChpc19yZmMyMDQ3X3F1b3RlZCgkcmVjaXBpZW50X25hbWUpKSB7CisJCXJldHVybiAkcmVjaXBpZW50OworCX0KKworCSMgcmVtb3ZlIG5vbi1lc2NhcGVkIHF1b3RlcworCSRyZWNpcGllbnRfbmFtZSA9fiBzLyhefFteXFxdKSIvJDEvZzsKKworCSMgcmZjMjA0NyBpcyBuZWVkZWQgaWYgYSBub24tYXNjaWkgY2hhciBpcyBpbmNsdWRlZAorCWlmICgkcmVjaXBpZW50X25hbWUgPX4gL1teWzphc2NpaTpdXS8pIHsKKwkJJHJlY2lwaWVudF9uYW1lID0gcXVvdGVfcmZjMjA0NygkcmVjaXBpZW50X25hbWUpOworCX0KKworCSMgZG91YmxlIHF1b3RlcyBhcmUgbmVlZGVkIGlmIHNwZWNpYWxzIG9yIENUTHMgYXJlIGluY2x1ZGVkCisJZWxzaWYgKCRyZWNpcGllbnRfbmFtZSA9fiAvW11bKCk8PkAsOzpcXCIuXDAwMC1cMDM3XDE3N10vKSB7CisJCSRyZWNpcGllbnRfbmFtZSA9fiBzLyhbXFxccl0pL1xcJDEvZzsKKwkJJHJlY2lwaWVudF9uYW1lID0gcXFbIiRyZWNpcGllbnRfbmFtZSJdOworCX0KKworCXJldHVybiAiJHJlY2lwaWVudF9uYW1lICRyZWNpcGllbnRfYWRkciI7CisKK30KKworc3ViIHNhbml0aXplX2FkZHJlc3NfbGlzdCB7CisJcmV0dXJuIChtYXAgeyBzYW5pdGl6ZV9hZGRyZXNzKCRfKSB9IEBfKTsKK30KKworc3ViIHByb2Nlc3NfYWRkcmVzc19saXN0IHsKKwlteSBAYWRkcl9saXN0ID0gbWFwIHsgcGFyc2VfYWRkcmVzc19saW5lKCRfKSB9IEBfOworCUBhZGRyX2xpc3QgPSBleHBhbmRfYWxpYXNlcyhAYWRkcl9saXN0KTsKKwlAYWRkcl9saXN0ID0gc2FuaXRpemVfYWRkcmVzc19saXN0KEBhZGRyX2xpc3QpOworCUBhZGRyX2xpc3QgPSB2YWxpZGF0ZV9hZGRyZXNzX2xpc3QoQGFkZHJfbGlzdCk7CisJcmV0dXJuIEBhZGRyX2xpc3Q7Cit9CisKKyMgUmV0dXJucyB0aGUgbG9jYWwgRnVsbHkgUXVhbGlmaWVkIERvbWFpbiBOYW1lIChGUUROKSBpZiBhdmFpbGFibGUuCisjCisjIFRpZ2h0bHkgY29uZmlndXJlZCBNVEFhIHJlcXVpcmUgdGhhdCBhIGNhbGxlciBzZW5kcyBhIHJlYWwgRE5TCisjIGRvbWFpbiBuYW1lIHRoYXQgY29ycmVzcG9uZHMgdGhlIElQIGFkZHJlc3MgaW4gdGhlIEhFTE8vRUhMTworIyBoYW5kc2hha2UuIFRoaXMgaXMgdXNlZCB0byB2ZXJpZnkgdGhlIGNvbm5lY3Rpb24gYW5kIHByZXZlbnQKKyMgc3BhbW1lcnMgZnJvbSB0cnlpbmcgdG8gaGlkZSB0aGVpciBpZGVudGl0eS4gSWYgdGhlIEROUyBhbmQgSVAgZG9uJ3QKKyMgbWF0Y2gsIHRoZSByZWNlaXZlaW5nIE1UQSBtYXkgZGVueSB0aGUgY29ubmVjdGlvbi4KKyMKKyMgSGVyZSBpcyBhIGRlbnkgZXhhbXBsZSBvZiBOZXQ6OlNNVFAgd2l0aCB0aGUgZGVmYXVsdCAibG9jYWxob3N0LmxvY2FsZG9tYWluIgorIworIyBOZXQ6OlNNVFA9R0xPQigweDI2N2VjMjgpPj4+IEVITE8gbG9jYWxob3N0LmxvY2FsZG9tYWluCisjIE5ldDo6U01UUD1HTE9CKDB4MjY3ZWMyOCk8PDwgNTUwIEVITE8gYXJndW1lbnQgZG9lcyBub3QgbWF0Y2ggY2FsbGluZyBob3N0CisjCisjIFRoaXMgbWFpbGRvbWFpbiooKSBjb2RlIGlzIGJhc2VkIG9uIGlkZWFzIGluIFBlcmwgbGlicmFyeSBUZXN0OjpSZXBvcnRlcgorIyAvdXNyL3NoYXJlL3Blcmw1L1Rlc3QvUmVwb3J0ZXIvTWFpbC9VdGlsLnBtID09PiBzdWIgX21haWxkb21haW4gKCkKKworc3ViIHZhbGlkX2ZxZG4geworCW15ICRkb21haW4gPSBzaGlmdDsKKwlyZXR1cm4gZGVmaW5lZCAkZG9tYWluICYmICEoJF5PIGVxICdkYXJ3aW4nICYmICRkb21haW4gPX4gL1wubG9jYWwkLykgJiYgJGRvbWFpbiA9fiAvXC4vOworfQorCitzdWIgbWFpbGRvbWFpbl9uZXQgeworCW15ICRtYWlsZG9tYWluOworCisJaWYgKGV2YWwgeyByZXF1aXJlIE5ldDo6RG9tYWluOyAxIH0pIHsKKwkJbXkgJGRvbWFpbiA9IE5ldDo6RG9tYWluOjpkb21haW5uYW1lKCk7CisJCSRtYWlsZG9tYWluID0gJGRvbWFpbiBpZiB2YWxpZF9mcWRuKCRkb21haW4pOworCX0KKworCXJldHVybiAkbWFpbGRvbWFpbjsKK30KKworc3ViIG1haWxkb21haW5fbXRhIHsKKwlteSAkbWFpbGRvbWFpbjsKKworCWlmIChldmFsIHsgcmVxdWlyZSBOZXQ6OlNNVFA7IDEgfSkgeworCQlmb3IgbXkgJGhvc3QgKHF3KG1haWxob3N0IGxvY2FsaG9zdCkpIHsKKwkJCW15ICRzbXRwID0gTmV0OjpTTVRQLT5uZXcoJGhvc3QpOworCQkJaWYgKGRlZmluZWQgJHNtdHApIHsKKwkJCQlteSAkZG9tYWluID0gJHNtdHAtPmRvbWFpbjsKKwkJCQkkc210cC0+cXVpdDsKKworCQkJCSRtYWlsZG9tYWluID0gJGRvbWFpbiBpZiB2YWxpZF9mcWRuKCRkb21haW4pOworCisJCQkJbGFzdCBpZiAkbWFpbGRvbWFpbjsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAkbWFpbGRvbWFpbjsKK30KKworc3ViIG1haWxkb21haW4geworCXJldHVybiBtYWlsZG9tYWluX25ldCgpIHx8IG1haWxkb21haW5fbXRhKCkgfHwgJ2xvY2FsaG9zdC5sb2NhbGRvbWFpbic7Cit9CisKK3N1YiBzbXRwX2hvc3Rfc3RyaW5nIHsKKwlpZiAoZGVmaW5lZCAkc210cF9zZXJ2ZXJfcG9ydCkgeworCQlyZXR1cm4gIiRzbXRwX3NlcnZlcjokc210cF9zZXJ2ZXJfcG9ydCI7CisJfSBlbHNlIHsKKwkJcmV0dXJuICRzbXRwX3NlcnZlcjsKKwl9Cit9CisKKyMgUmV0dXJucyAxIGlmIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZCBvciB3YXMgbm90IG5lY2Vzc2FyeQorIyAoc210cF91c2VyIHdhcyBub3Qgc3BlY2lmaWVkKSwgYW5kIDAgb3RoZXJ3aXNlLgorCitzdWIgc210cF9hdXRoX21heWJlIHsKKwlpZiAoIWRlZmluZWQgJHNtdHBfYXV0aHVzZXIgfHwgJGF1dGgpIHsKKwkJcmV0dXJuIDE7CisJfQorCisJIyBXb3JrYXJvdW5kIEFVVEggUExBSU4vTE9HSU4gaW50ZXJhY3Rpb24gZGVmZWN0CisJIyB3aXRoIEF1dGhlbjo6U0FTTDo6Q3lydXMKKwlldmFsIHsKKwkJcmVxdWlyZSBBdXRoZW46OlNBU0w7CisJCUF1dGhlbjo6U0FTTC0+aW1wb3J0KHF3KFBlcmwpKTsKKwl9OworCisJIyBDaGVjayBtZWNoYW5pc20gbmFtaW5nIGFzIGRlZmluZWQgaW46CisJIyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDQyMiNwYWdlLTgKKwlpZiAoJHNtdHBfYXV0aCAmJiAkc210cF9hdXRoICF+IC9eKFxiW0EtWjAtOS1fXXsxLDIwfVxzKikqJC8pIHsKKwkJZGllICJpbnZhbGlkIHNtdHAgYXV0aDogJyR7c210cF9hdXRofSciOworCX0KKworCSMgVE9ETzogQXV0aGVudGljYXRpb24gbWF5IGZhaWwgbm90IGJlY2F1c2UgY3JlZGVudGlhbHMgd2VyZQorCSMgaW52YWxpZCBidXQgZHVlIHRvIG90aGVyIHJlYXNvbnMsIGluIHdoaWNoIHdlIHNob3VsZCBub3QKKwkjIHJlamVjdCBjcmVkZW50aWFscy4KKwkkYXV0aCA9IEdpdDo6Y3JlZGVudGlhbCh7CisJCSdwcm90b2NvbCcgPT4gJ3NtdHAnLAorCQknaG9zdCcgPT4gc210cF9ob3N0X3N0cmluZygpLAorCQkndXNlcm5hbWUnID0+ICRzbXRwX2F1dGh1c2VyLAorCQkjIGlmIHRoZXJlJ3Mgbm8gcGFzc3dvcmQsICJnaXQgY3JlZGVudGlhbCBmaWxsIiB3aWxsCisJCSMgZ2l2ZSB1cyBvbmUsIG90aGVyd2lzZSBpdCdsbCBqdXN0IHBhc3MgdGhpcyBvbmUuCisJCSdwYXNzd29yZCcgPT4gJHNtdHBfYXV0aHBhc3MKKwl9LCBzdWIgeworCQlteSAkY3JlZCA9IHNoaWZ0OworCisJCWlmICgkc210cF9hdXRoKSB7CisJCQlteSAkc2FzbCA9IEF1dGhlbjo6U0FTTC0+bmV3KAorCQkJCW1lY2hhbmlzbSA9PiAkc210cF9hdXRoLAorCQkJCWNhbGxiYWNrID0+IHsKKwkJCQkJdXNlciA9PiAkY3JlZC0+eyd1c2VybmFtZSd9LAorCQkJCQlwYXNzID0+ICRjcmVkLT57J3Bhc3N3b3JkJ30sCisJCQkJCWF1dGhuYW1lID0+ICRjcmVkLT57J3VzZXJuYW1lJ30sCisJCQkJfQorCQkJKTsKKworCQkJcmV0dXJuICEhJHNtdHAtPmF1dGgoJHNhc2wpOworCQl9CisKKwkJcmV0dXJuICEhJHNtdHAtPmF1dGgoJGNyZWQtPnsndXNlcm5hbWUnfSwgJGNyZWQtPnsncGFzc3dvcmQnfSk7CisJfSk7CisKKwlyZXR1cm4gJGF1dGg7Cit9CisKK3N1YiBzc2xfdmVyaWZ5X3BhcmFtcyB7CisJZXZhbCB7CisJCXJlcXVpcmUgSU86OlNvY2tldDo6U1NMOworCQlJTzo6U29ja2V0OjpTU0wtPmltcG9ydChxdy9TU0xfVkVSSUZZX1BFRVIgU1NMX1ZFUklGWV9OT05FLyk7CisJfTsKKwlpZiAoJEApIHsKKwkJcHJpbnQgU1RERVJSICJOb3QgdXNpbmcgU1NMX1ZFUklGWV9QRUVSIGR1ZSB0byBvdXQtb2YtZGF0ZSBJTzo6U29ja2V0OjpTU0wuXG4iOworCQlyZXR1cm47CisJfQorCisJaWYgKCFkZWZpbmVkICRzbXRwX3NzbF9jZXJ0X3BhdGgpIHsKKwkJIyB1c2UgdGhlIE9wZW5TU0wgZGVmYXVsdHMKKwkJcmV0dXJuIChTU0xfdmVyaWZ5X21vZGUgPT4gU1NMX1ZFUklGWV9QRUVSKCkpOworCX0KKworCWlmICgkc210cF9zc2xfY2VydF9wYXRoIGVxICIiKSB7CisJCXJldHVybiAoU1NMX3ZlcmlmeV9tb2RlID0+IFNTTF9WRVJJRllfTk9ORSgpKTsKKwl9IGVsc2lmICgtZCAkc210cF9zc2xfY2VydF9wYXRoKSB7CisJCXJldHVybiAoU1NMX3ZlcmlmeV9tb2RlID0+IFNTTF9WRVJJRllfUEVFUigpLAorCQkJU1NMX2NhX3BhdGggPT4gJHNtdHBfc3NsX2NlcnRfcGF0aCk7CisJfSBlbHNpZiAoLWYgJHNtdHBfc3NsX2NlcnRfcGF0aCkgeworCQlyZXR1cm4gKFNTTF92ZXJpZnlfbW9kZSA9PiBTU0xfVkVSSUZZX1BFRVIoKSwKKwkJCVNTTF9jYV9maWxlID0+ICRzbXRwX3NzbF9jZXJ0X3BhdGgpOworCX0gZWxzZSB7CisJCXByaW50IFNUREVSUiAiTm90IHVzaW5nIFNTTF9WRVJJRllfUEVFUiBiZWNhdXNlIHRoZSBDQSBwYXRoIGRvZXMgbm90IGV4aXN0LlxuIjsKKwkJcmV0dXJuIChTU0xfdmVyaWZ5X21vZGUgPT4gU1NMX1ZFUklGWV9OT05FKCkpOworCX0KK30KKworc3ViIGZpbGVfbmFtZV9pc19hYnNvbHV0ZSB7CisJbXkgKCRwYXRoKSA9IEBfOworCisJIyBtc3lzIGRvZXMgbm90IGdyb2sgRE9TIGRyaXZlLXByZWZpeGVzCisJaWYgKCReTyBlcSAnbXN5cycpIHsKKwkJcmV0dXJuICgkcGF0aCA9fiBtI14vIyB8fCAkcGF0aCA9fiBtI15bYS16QS1aXVw6IykKKwl9CisKKwlyZXF1aXJlIEZpbGU6OlNwZWM6OkZ1bmN0aW9uczsKKwlyZXR1cm4gRmlsZTo6U3BlYzo6RnVuY3Rpb25zOjpmaWxlX25hbWVfaXNfYWJzb2x1dGUoJHBhdGgpOworfQorCisjIFJldHVybnMgMSBpZiB0aGUgbWVzc2FnZSB3YXMgc2VudCwgYW5kIDAgb3RoZXJ3aXNlLgorIyBJbiBhY3R1YWxpdHksIHRoZSB3aG9sZSBwcm9ncmFtIGRpZXMgd2hlbiB0aGVyZQorIyBpcyBhbiBlcnJvciBzZW5kaW5nIGEgbWVzc2FnZS4KKworc3ViIHNlbmRfbWVzc2FnZSB7CisJbXkgQHJlY2lwaWVudHMgPSB1bmlxdWVfZW1haWxfbGlzdChAdG8pOworCUBjYyA9IChncmVwIHsgbXkgJGNjID0gZXh0cmFjdF92YWxpZF9hZGRyZXNzX29yX2RpZSgkXyk7CisJCSAgICAgIG5vdCBncmVwIHsgJGNjIGVxICRfIHx8ICRfID1+IC88XFEke2NjfVxFPiQvIH0gQHJlY2lwaWVudHMKKwkJICAgIH0KKwkgICAgICAgQGNjKTsKKwlteSAkdG8gPSBqb2luICgiLFxuXHQiLCBAcmVjaXBpZW50cyk7CisJQHJlY2lwaWVudHMgPSB1bmlxdWVfZW1haWxfbGlzdChAcmVjaXBpZW50cyxAY2MsQGJjY2xpc3QpOworCUByZWNpcGllbnRzID0gKG1hcCB7IGV4dHJhY3RfdmFsaWRfYWRkcmVzc19vcl9kaWUoJF8pIH0gQHJlY2lwaWVudHMpOworCW15ICRkYXRlID0gZm9ybWF0XzI4MjJfdGltZSgkdGltZSsrKTsKKwlteSAkZ2l0dmVyc2lvbiA9ICdAQEdJVF9WRVJTSU9OQEAnOworCWlmICgkZ2l0dmVyc2lvbiA9fiBtLy4uR0lUX1ZFUlNJT04uLi8pIHsKKwkgICAgJGdpdHZlcnNpb24gPSBHaXQ6OnZlcnNpb24oKTsKKwl9CisKKwlteSAkY2MgPSBqb2luKCIsXG5cdCIsIHVuaXF1ZV9lbWFpbF9saXN0KEBjYykpOworCW15ICRjY2xpbmUgPSAiIjsKKwlpZiAoJGNjIG5lICcnKSB7CisJCSRjY2xpbmUgPSAiXG5DYzogJGNjIjsKKwl9CisJbWFrZV9tZXNzYWdlX2lkKCkgdW5sZXNzIGRlZmluZWQoJG1lc3NhZ2VfaWQpOworCisJbXkgJGhlYWRlciA9ICJGcm9tOiAkc2VuZGVyCitUbzogJHRvJHtjY2xpbmV9CitTdWJqZWN0OiAkc3ViamVjdAorRGF0ZTogJGRhdGUKK01lc3NhZ2UtSWQ6ICRtZXNzYWdlX2lkCisiOworCWlmICgkdXNlX3htYWlsZXIpIHsKKwkJJGhlYWRlciAuPSAiWC1NYWlsZXI6IGdpdC1zZW5kLWVtYWlsICRnaXR2ZXJzaW9uXG4iOworCX0KKwlpZiAoJHJlcGx5X3RvKSB7CisKKwkJJGhlYWRlciAuPSAiSW4tUmVwbHktVG86ICRyZXBseV90b1xuIjsKKwkJJGhlYWRlciAuPSAiUmVmZXJlbmNlczogJHJlZmVyZW5jZXNcbiI7CisJfQorCWlmIChAeGgpIHsKKwkJJGhlYWRlciAuPSBqb2luKCJcbiIsIEB4aCkgLiAiXG4iOworCX0KKworCW15IEBzZW5kbWFpbF9wYXJhbWV0ZXJzID0gKCctaScsIEByZWNpcGllbnRzKTsKKwlteSAkcmF3X2Zyb20gPSAkc2VuZGVyOworCWlmIChkZWZpbmVkICRlbnZlbG9wZV9zZW5kZXIgJiYgJGVudmVsb3BlX3NlbmRlciBuZSAiYXV0byIpIHsKKwkJJHJhd19mcm9tID0gJGVudmVsb3BlX3NlbmRlcjsKKwl9CisJJHJhd19mcm9tID0gZXh0cmFjdF92YWxpZF9hZGRyZXNzKCRyYXdfZnJvbSk7CisJdW5zaGlmdCAoQHNlbmRtYWlsX3BhcmFtZXRlcnMsCisJCQknLWYnLCAkcmF3X2Zyb20pIGlmKGRlZmluZWQgJGVudmVsb3BlX3NlbmRlcik7CisKKwlpZiAoJG5lZWRzX2NvbmZpcm0gJiYgISRkcnlfcnVuKSB7CisJCXByaW50ICJcbiRoZWFkZXJcbiI7CisJCWlmICgkbmVlZHNfY29uZmlybSBlcSAiaW5mb3JtIikgeworCQkJJGNvbmZpcm1fdW5jb25maWd1cmVkID0gMDsgIyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBmb3IgdGhlIHJlc3Qgb2YgdGhpcyBydW4KKwkJCSRhc2tfZGVmYXVsdCA9ICJ5IjsgIyBhc3N1bWUgeWVzIG9uIEVPRiBzaW5jZSB1c2VyIGhhc24ndCBleHBsaWNpdGx5IGFza2VkIGZvciBjb25maXJtYXRpb24KKwkJCXByaW50ICIgICAgVGhlIENjIGxpc3QgYWJvdmUgaGFzIGJlZW4gZXhwYW5kZWQgYnkgYWRkaXRpb25hbFxuIjsKKwkJCXByaW50ICIgICAgYWRkcmVzc2VzIGZvdW5kIGluIHRoZSBwYXRjaCBjb21taXQgbWVzc2FnZS4gQnkgZGVmYXVsdFxuIjsKKwkJCXByaW50ICIgICAgc2VuZC1lbWFpbCBwcm9tcHRzIGJlZm9yZSBzZW5kaW5nIHdoZW5ldmVyIHRoaXMgb2NjdXJzLlxuIjsKKwkJCXByaW50ICIgICAgVGhpcyBiZWhhdmlvciBpcyBjb250cm9sbGVkIGJ5IHRoZSBzZW5kZW1haWwuY29uZmlybVxuIjsKKwkJCXByaW50ICIgICAgY29uZmlndXJhdGlvbiBzZXR0aW5nLlxuIjsKKwkJCXByaW50ICJcbiI7CisJCQlwcmludCAiICAgIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBydW4gJ2dpdCBzZW5kLWVtYWlsIC0taGVscCcuXG4iOworCQkJcHJpbnQgIiAgICBUbyByZXRhaW4gdGhlIGN1cnJlbnQgYmVoYXZpb3IsIGJ1dCBzcXVlbGNoIHRoaXMgbWVzc2FnZSxcbiI7CisJCQlwcmludCAiICAgIHJ1biAnZ2l0IGNvbmZpZyAtLWdsb2JhbCBzZW5kZW1haWwuY29uZmlybSBhdXRvJy5cblxuIjsKKwkJfQorCQkkXyA9IGFzaygiU2VuZCB0aGlzIGVtYWlsPyAoW3ldZXN8W25db3xbcV11aXR8W2FdbGwpOiAiLAorCQkgICAgICAgICB2YWxpZF9yZSA9PiBxci9eKD86eWVzfHl8bm98bnxxdWl0fHF8YWxsfGEpL2ksCisJCSAgICAgICAgIGRlZmF1bHQgPT4gJGFza19kZWZhdWx0KTsKKwkJZGllICJTZW5kIHRoaXMgZW1haWwgcmVwbHkgcmVxdWlyZWQiIHVubGVzcyBkZWZpbmVkICRfOworCQlpZiAoL15uL2kpIHsKKwkJCXJldHVybiAwOworCQl9IGVsc2lmICgvXnEvaSkgeworCQkJY2xlYW51cF9jb21wb3NlX2ZpbGVzKCk7CisJCQlleGl0KDApOworCQl9IGVsc2lmICgvXmEvaSkgeworCQkJJGNvbmZpcm0gPSAnbmV2ZXInOworCQl9CisJfQorCisJdW5zaGlmdCAoQHNlbmRtYWlsX3BhcmFtZXRlcnMsIEBzbXRwX3NlcnZlcl9vcHRpb25zKTsKKworCWlmICgkZHJ5X3J1bikgeworCQkjIFdlIGRvbid0IHdhbnQgdG8gc2VuZCB0aGUgZW1haWwuCisJfSBlbHNpZiAoZmlsZV9uYW1lX2lzX2Fic29sdXRlKCRzbXRwX3NlcnZlcikpIHsKKwkJbXkgJHBpZCA9IG9wZW4gbXkgJHNtLCAnfC0nOworCQlkZWZpbmVkICRwaWQgb3IgZGllICQhOworCQlpZiAoISRwaWQpIHsKKwkJCWV4ZWMoJHNtdHBfc2VydmVyLCBAc2VuZG1haWxfcGFyYW1ldGVycykgb3IgZGllICQhOworCQl9CisJCXByaW50ICRzbSAiJGhlYWRlclxuJG1lc3NhZ2UiOworCQljbG9zZSAkc20gb3IgZGllICQhOworCX0gZWxzZSB7CisKKwkJaWYgKCFkZWZpbmVkICRzbXRwX3NlcnZlcikgeworCQkJZGllICJUaGUgcmVxdWlyZWQgU01UUCBzZXJ2ZXIgaXMgbm90IHByb3Blcmx5IGRlZmluZWQuIgorCQl9CisKKwkJaWYgKCRzbXRwX2VuY3J5cHRpb24gZXEgJ3NzbCcpIHsKKwkJCSRzbXRwX3NlcnZlcl9wb3J0IHx8PSA0NjU7ICMgc3NtdHAKKwkJCXJlcXVpcmUgTmV0OjpTTVRQOjpTU0w7CisJCQkkc210cF9kb21haW4gfHw9IG1haWxkb21haW4oKTsKKwkJCXJlcXVpcmUgSU86OlNvY2tldDo6U1NMOworCQkJIyBOZXQ6OlNNVFA6OlNTTC0+bmV3KCkgZG9lcyBub3QgZm9yd2FyZCBhbnkgU1NMIG9wdGlvbnMKKwkJCUlPOjpTb2NrZXQ6OlNTTDo6c2V0X2NsaWVudF9kZWZhdWx0cygKKwkJCQlzc2xfdmVyaWZ5X3BhcmFtcygpKTsKKwkJCSRzbXRwIHx8PSBOZXQ6OlNNVFA6OlNTTC0+bmV3KCRzbXRwX3NlcnZlciwKKwkJCQkJCSAgICAgIEhlbGxvID0+ICRzbXRwX2RvbWFpbiwKKwkJCQkJCSAgICAgIFBvcnQgPT4gJHNtdHBfc2VydmVyX3BvcnQsCisJCQkJCQkgICAgICBEZWJ1ZyA9PiAkZGVidWdfbmV0X3NtdHApOworCQl9CisJCWVsc2UgeworCQkJcmVxdWlyZSBOZXQ6OlNNVFA7CisJCQkkc210cF9kb21haW4gfHw9IG1haWxkb21haW4oKTsKKwkJCSRzbXRwX3NlcnZlcl9wb3J0IHx8PSAyNTsKKwkJCSRzbXRwIHx8PSBOZXQ6OlNNVFAtPm5ldygkc210cF9zZXJ2ZXIsCisJCQkJCQkgSGVsbG8gPT4gJHNtdHBfZG9tYWluLAorCQkJCQkJIERlYnVnID0+ICRkZWJ1Z19uZXRfc210cCwKKwkJCQkJCSBQb3J0ID0+ICRzbXRwX3NlcnZlcl9wb3J0KTsKKwkJCWlmICgkc210cF9lbmNyeXB0aW9uIGVxICd0bHMnICYmICRzbXRwKSB7CisJCQkJcmVxdWlyZSBOZXQ6OlNNVFA6OlNTTDsKKwkJCQkkc210cC0+Y29tbWFuZCgnU1RBUlRUTFMnKTsKKwkJCQkkc210cC0+cmVzcG9uc2UoKTsKKwkJCQlpZiAoJHNtdHAtPmNvZGUgPT0gMjIwKSB7CisJCQkJCSRzbXRwID0gTmV0OjpTTVRQOjpTU0wtPnN0YXJ0X1NTTCgkc210cCwKKwkJCQkJCQkJCSAgc3NsX3ZlcmlmeV9wYXJhbXMoKSkKKwkJCQkJCW9yIGRpZSAiU1RBUlRUTFMgZmFpbGVkISAiLklPOjpTb2NrZXQ6OlNTTDo6ZXJyc3RyKCk7CisJCQkJCSRzbXRwX2VuY3J5cHRpb24gPSAnJzsKKwkJCQkJIyBTZW5kIEVITE8gYWdhaW4gdG8gcmVjZWl2ZSBmcmVzaAorCQkJCQkjIHN1cHBvcnRlZCBjb21tYW5kcworCQkJCQkkc210cC0+aGVsbG8oJHNtdHBfZG9tYWluKTsKKwkJCQl9IGVsc2UgeworCQkJCQlkaWUgIlNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNUQVJUVExTISAiLiRzbXRwLT5tZXNzYWdlOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmICghJHNtdHApIHsKKwkJCWRpZSAiVW5hYmxlIHRvIGluaXRpYWxpemUgU01UUCBwcm9wZXJseS4gQ2hlY2sgY29uZmlnIGFuZCB1c2UgLS1zbXRwLWRlYnVnLiAiLAorCQkJICAgICJWQUxVRVM6IHNlcnZlcj0kc210cF9zZXJ2ZXIgIiwKKwkJCSAgICAiZW5jcnlwdGlvbj0kc210cF9lbmNyeXB0aW9uICIsCisJCQkgICAgImhlbGxvPSRzbXRwX2RvbWFpbiIsCisJCQkgICAgZGVmaW5lZCAkc210cF9zZXJ2ZXJfcG9ydCA/ICIgcG9ydD0kc210cF9zZXJ2ZXJfcG9ydCIgOiAiIjsKKwkJfQorCisJCXNtdHBfYXV0aF9tYXliZSBvciBkaWUgJHNtdHAtPm1lc3NhZ2U7CisKKwkJJHNtdHAtPm1haWwoICRyYXdfZnJvbSApIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKKwkJJHNtdHAtPnRvKCBAcmVjaXBpZW50cyApIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKKwkJJHNtdHAtPmRhdGEgb3IgZGllICRzbXRwLT5tZXNzYWdlOworCQkkc210cC0+ZGF0YXNlbmQoIiRoZWFkZXJcbiIpIG9yIGRpZSAkc210cC0+bWVzc2FnZTsKKwkJbXkgQGxpbmVzID0gc3BsaXQgL14vLCAkbWVzc2FnZTsKKwkJZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CisJCQkkc210cC0+ZGF0YXNlbmQoIiRsaW5lIikgb3IgZGllICRzbXRwLT5tZXNzYWdlOworCQl9CisJCSRzbXRwLT5kYXRhZW5kKCkgb3IgZGllICRzbXRwLT5tZXNzYWdlOworCQkkc210cC0+Y29kZSA9fiAvMjUwfDIwMC8gb3IgZGllICJGYWlsZWQgdG8gc2VuZCAkc3ViamVjdFxuIi4kc210cC0+bWVzc2FnZTsKKwl9CisJaWYgKCRxdWlldCkgeworCQlwcmludGYgKCgkZHJ5X3J1biA/ICJEcnktIiA6ICIiKS4iU2VudCAlc1xuIiwgJHN1YmplY3QpOworCX0gZWxzZSB7CisJCXByaW50ICgoJGRyeV9ydW4gPyAiRHJ5LSIgOiAiIikuIk9LLiBMb2cgc2F5czpcbiIpOworCQlpZiAoIWZpbGVfbmFtZV9pc19hYnNvbHV0ZSgkc210cF9zZXJ2ZXIpKSB7CisJCQlwcmludCAiU2VydmVyOiAkc210cF9zZXJ2ZXJcbiI7CisJCQlwcmludCAiTUFJTCBGUk9NOjwkcmF3X2Zyb20+XG4iOworCQkJZm9yZWFjaCBteSAkZW50cnkgKEByZWNpcGllbnRzKSB7CisJCQkgICAgcHJpbnQgIlJDUFQgVE86PCRlbnRyeT5cbiI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmludCAiU2VuZG1haWw6ICRzbXRwX3NlcnZlciAiLmpvaW4oJyAnLEBzZW5kbWFpbF9wYXJhbWV0ZXJzKS4iXG4iOworCQl9CisJCXByaW50ICRoZWFkZXIsICJcbiI7CisJCWlmICgkc210cCkgeworCQkJcHJpbnQgIlJlc3VsdDogIiwgJHNtdHAtPmNvZGUsICcgJywKKwkJCQkoJHNtdHAtPm1lc3NhZ2UgPX4gL1xuKFteXG5dK1xuKSQvcyksICJcbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiUmVzdWx0OiBPS1xuIjsKKwkJfQorCX0KKworCXJldHVybiAxOworfQorCiskcmVwbHlfdG8gPSAkaW5pdGlhbF9yZXBseV90bzsKKyRyZWZlcmVuY2VzID0gJGluaXRpYWxfcmVwbHlfdG8gfHwgJyc7Ciskc3ViamVjdCA9ICRpbml0aWFsX3N1YmplY3Q7CiskbWVzc2FnZV9udW0gPSAwOworCitmb3JlYWNoIG15ICR0IChAZmlsZXMpIHsKKwlvcGVuIG15ICRmaCwgIjwiLCAkdCBvciBkaWUgImNhbid0IG9wZW4gZmlsZSAkdCI7CisKKwlteSAkYXV0aG9yID0gdW5kZWY7CisJbXkgJHNhdXRob3IgPSB1bmRlZjsKKwlteSAkYXV0aG9yX2VuY29kaW5nOworCW15ICRoYXNfY29udGVudF90eXBlOworCW15ICRib2R5X2VuY29kaW5nOworCW15ICR4ZmVyX2VuY29kaW5nOworCW15ICRoYXNfbWltZV92ZXJzaW9uOworCUB0byA9ICgpOworCUBjYyA9ICgpOworCUB4aCA9ICgpOworCW15ICRpbnB1dF9mb3JtYXQgPSB1bmRlZjsKKwlteSBAaGVhZGVyID0gKCk7CisJJG1lc3NhZ2UgPSAiIjsKKwkkbWVzc2FnZV9udW0rKzsKKwkjIEZpcnN0IHVuZm9sZCBtdWx0aWxpbmUgaGVhZGVyIGZpZWxkcworCXdoaWxlKDwkZmg+KSB7CisJCWxhc3QgaWYgL15ccyokLzsKKwkJaWYgKC9eXHMrXFMvIGFuZCBAaGVhZGVyKSB7CisJCQljaG9tcCgkaGVhZGVyWyQjaGVhZGVyXSk7CisJCQlzL15ccysvIC87CisJCQkkaGVhZGVyWyQjaGVhZGVyXSAuPSAkXzsKKwkgICAgfSBlbHNlIHsKKwkJCXB1c2goQGhlYWRlciwgJF8pOworCQl9CisJfQorCSMgTm93IHBhcnNlIHRoZSBoZWFkZXIKKwlmb3JlYWNoKEBoZWFkZXIpIHsKKwkJaWYgKC9eRnJvbSAvKSB7CisJCQkkaW5wdXRfZm9ybWF0ID0gJ21ib3gnOworCQkJbmV4dDsKKwkJfQorCQljaG9tcDsKKwkJaWYgKCFkZWZpbmVkICRpbnB1dF9mb3JtYXQgJiYgL15bLUEtWmEtel0rOlxzLykgeworCQkJJGlucHV0X2Zvcm1hdCA9ICdtYm94JzsKKwkJfQorCisJCWlmIChkZWZpbmVkICRpbnB1dF9mb3JtYXQgJiYgJGlucHV0X2Zvcm1hdCBlcSAnbWJveCcpIHsKKwkJCWlmICgvXlN1YmplY3Q6XHMrKC4qKSQvaSkgeworCQkJCSRzdWJqZWN0ID0gJDE7CisJCQl9CisJCQllbHNpZiAoL15Gcm9tOlxzKyguKikkL2kpIHsKKwkJCQkoJGF1dGhvciwgJGF1dGhvcl9lbmNvZGluZykgPSB1bnF1b3RlX3JmYzIwNDcoJDEpOworCQkJCSRzYXV0aG9yID0gc2FuaXRpemVfYWRkcmVzcygkYXV0aG9yKTsKKwkJCQluZXh0IGlmICRzdXBwcmVzc19jY3snYXV0aG9yJ307CisJCQkJbmV4dCBpZiAkc3VwcHJlc3NfY2N7J3NlbGYnfSBhbmQgJHNhdXRob3IgZXEgJHNlbmRlcjsKKwkJCQlwcmludGYoIihtYm94KSBBZGRpbmcgY2M6ICVzIGZyb20gbGluZSAnJXMnXG4iLAorCQkJCQkkMSwgJF8pIHVubGVzcyAkcXVpZXQ7CisJCQkJcHVzaCBAY2MsICQxOworCQkJfQorCQkJZWxzaWYgKC9eVG86XHMrKC4qKSQvaSkgeworCQkJCWZvcmVhY2ggbXkgJGFkZHIgKHBhcnNlX2FkZHJlc3NfbGluZSgkMSkpIHsKKwkJCQkJcHJpbnRmKCIobWJveCkgQWRkaW5nIHRvOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIiwKKwkJCQkJCSRhZGRyLCAkXykgdW5sZXNzICRxdWlldDsKKwkJCQkJcHVzaCBAdG8sICRhZGRyOworCQkJCX0KKwkJCX0KKwkJCWVsc2lmICgvXkNjOlxzKyguKikkL2kpIHsKKwkJCQlmb3JlYWNoIG15ICRhZGRyIChwYXJzZV9hZGRyZXNzX2xpbmUoJDEpKSB7CisJCQkJCW15ICRxYWRkciA9IHVucXVvdGVfcmZjMjA0NygkYWRkcik7CisJCQkJCW15ICRzYWRkciA9IHNhbml0aXplX2FkZHJlc3MoJHFhZGRyKTsKKwkJCQkJaWYgKCRzYWRkciBlcSAkc2VuZGVyKSB7CisJCQkJCQluZXh0IGlmICgkc3VwcHJlc3NfY2N7J3NlbGYnfSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluZXh0IGlmICgkc3VwcHJlc3NfY2N7J2NjJ30pOworCQkJCQl9CisJCQkJCXByaW50ZigiKG1ib3gpIEFkZGluZyBjYzogJXMgZnJvbSBsaW5lICclcydcbiIsCisJCQkJCQkkYWRkciwgJF8pIHVubGVzcyAkcXVpZXQ7CisJCQkJCXB1c2ggQGNjLCAkYWRkcjsKKwkJCQl9CisJCQl9CisJCQllbHNpZiAoL15Db250ZW50LXR5cGU6L2kpIHsKKwkJCQkkaGFzX2NvbnRlbnRfdHlwZSA9IDE7CisJCQkJaWYgKC9jaGFyc2V0PSI/KFteICJdKykvKSB7CisJCQkJCSRib2R5X2VuY29kaW5nID0gJDE7CisJCQkJfQorCQkJCXB1c2ggQHhoLCAkXzsKKwkJCX0KKwkJCWVsc2lmICgvXk1JTUUtVmVyc2lvbi9pKSB7CisJCQkJJGhhc19taW1lX3ZlcnNpb24gPSAxOworCQkJCXB1c2ggQHhoLCAkXzsKKwkJCX0KKwkJCWVsc2lmICgvXk1lc3NhZ2UtSWQ6ICguKikvaSkgeworCQkJCSRtZXNzYWdlX2lkID0gJDE7CisJCQl9CisJCQllbHNpZiAoL15Db250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiAoLiopL2kpIHsKKwkJCQkkeGZlcl9lbmNvZGluZyA9ICQxIGlmIG5vdCBkZWZpbmVkICR4ZmVyX2VuY29kaW5nOworCQkJfQorCQkJZWxzaWYgKCEvXkRhdGU6XHMvaSAmJiAvXlstQS1aYS16XSs6XHMrXFMvKSB7CisJCQkJcHVzaCBAeGgsICRfOworCQkJfQorCisJCX0gZWxzZSB7CisJCQkjIEluIHRoZSB0cmFkaXRpb25hbAorCQkJIyAic2VuZCBsb3RzIG9mIGVtYWlsIiBmb3JtYXQsCisJCQkjIGxpbmUgMSA9IGNjCisJCQkjIGxpbmUgMiA9IHN1YmplY3QKKwkJCSMgU28gbGV0J3Mgc3VwcG9ydCB0aGF0LCB0b28uCisJCQkkaW5wdXRfZm9ybWF0ID0gJ2xvdHMnOworCQkJaWYgKEBjYyA9PSAwICYmICEkc3VwcHJlc3NfY2N7J2NjJ30pIHsKKwkJCQlwcmludGYoIihub24tbWJveCkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIiwKKwkJCQkJJF8sICRfKSB1bmxlc3MgJHF1aWV0OworCQkJCXB1c2ggQGNjLCAkXzsKKwkJCX0gZWxzaWYgKCFkZWZpbmVkICRzdWJqZWN0KSB7CisJCQkJJHN1YmplY3QgPSAkXzsKKwkJCX0KKwkJfQorCX0KKwkjIE5vdyBwYXJzZSB0aGUgbWVzc2FnZSBib2R5CisJd2hpbGUoPCRmaD4pIHsKKwkJJG1lc3NhZ2UgLj0gICRfOworCQlpZiAoL14oU2lnbmVkLW9mZi1ieXxDYyk6ICguKikkL2kpIHsKKwkJCWNob21wOworCQkJbXkgKCR3aGF0LCAkYykgPSAoJDEsICQyKTsKKwkJCWNob21wICRjOworCQkJbXkgJHNjID0gc2FuaXRpemVfYWRkcmVzcygkYyk7CisJCQlpZiAoJHNjIGVxICRzZW5kZXIpIHsKKwkJCQluZXh0IGlmICgkc3VwcHJlc3NfY2N7J3NlbGYnfSk7CisJCQl9IGVsc2UgeworCQkJCW5leHQgaWYgJHN1cHByZXNzX2Njeydzb2InfSBhbmQgJHdoYXQgPX4gL1NpZ25lZC1vZmYtYnkvaTsKKwkJCQluZXh0IGlmICRzdXBwcmVzc19jY3snYm9keWNjJ30gYW5kICR3aGF0ID1+IC9DYy9pOworCQkJfQorCQkJcHVzaCBAY2MsICRjOworCQkJcHJpbnRmKCIoYm9keSkgQWRkaW5nIGNjOiAlcyBmcm9tIGxpbmUgJyVzJ1xuIiwKKwkJCQkkYywgJF8pIHVubGVzcyAkcXVpZXQ7CisJCX0KKwl9CisJY2xvc2UgJGZoOworCisJcHVzaCBAdG8sIHJlY2lwaWVudHNfY21kKCJ0by1jbWQiLCAidG8iLCAkdG9fY21kLCAkdCkKKwkJaWYgZGVmaW5lZCAkdG9fY21kOworCXB1c2ggQGNjLCByZWNpcGllbnRzX2NtZCgiY2MtY21kIiwgImNjIiwgJGNjX2NtZCwgJHQpCisJCWlmIGRlZmluZWQgJGNjX2NtZCAmJiAhJHN1cHByZXNzX2NjeydjY2NtZCd9OworCisJaWYgKCRicm9rZW5fZW5jb2Rpbmd7JHR9ICYmICEkaGFzX2NvbnRlbnRfdHlwZSkgeworCQkkeGZlcl9lbmNvZGluZyA9ICc4Yml0JyBpZiBub3QgZGVmaW5lZCAkeGZlcl9lbmNvZGluZzsKKwkJJGhhc19jb250ZW50X3R5cGUgPSAxOworCQlwdXNoIEB4aCwgIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0kYXV0b184Yml0X2VuY29kaW5nIjsKKwkJJGJvZHlfZW5jb2RpbmcgPSAkYXV0b184Yml0X2VuY29kaW5nOworCX0KKworCWlmICgkYnJva2VuX2VuY29kaW5neyR0fSAmJiAhaXNfcmZjMjA0N19xdW90ZWQoJHN1YmplY3QpKSB7CisJCSRzdWJqZWN0ID0gcXVvdGVfc3ViamVjdCgkc3ViamVjdCwgJGF1dG9fOGJpdF9lbmNvZGluZyk7CisJfQorCisJaWYgKGRlZmluZWQgJHNhdXRob3IgYW5kICRzYXV0aG9yIG5lICRzZW5kZXIpIHsKKwkJJG1lc3NhZ2UgPSAiRnJvbTogJGF1dGhvclxuXG4kbWVzc2FnZSI7CisJCWlmIChkZWZpbmVkICRhdXRob3JfZW5jb2RpbmcpIHsKKwkJCWlmICgkaGFzX2NvbnRlbnRfdHlwZSkgeworCQkJCWlmICgkYm9keV9lbmNvZGluZyBlcSAkYXV0aG9yX2VuY29kaW5nKSB7CisJCQkJCSMgb2ssIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgZW5jb2RpbmcKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCSMgdWggb2gsIHdlIHNob3VsZCByZS1lbmNvZGUKKwkJCQl9CisJCQl9CisJCQllbHNlIHsKKwkJCQkkeGZlcl9lbmNvZGluZyA9ICc4Yml0JyBpZiBub3QgZGVmaW5lZCAkeGZlcl9lbmNvZGluZzsKKwkJCQkkaGFzX2NvbnRlbnRfdHlwZSA9IDE7CisJCQkJcHVzaCBAeGgsCisJCQkJICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSRhdXRob3JfZW5jb2RpbmciOworCQkJfQorCQl9CisJfQorCWlmIChkZWZpbmVkICR0YXJnZXRfeGZlcl9lbmNvZGluZykgeworCQkkeGZlcl9lbmNvZGluZyA9ICc4Yml0JyBpZiBub3QgZGVmaW5lZCAkeGZlcl9lbmNvZGluZzsKKwkJJG1lc3NhZ2UgPSBhcHBseV90cmFuc2Zlcl9lbmNvZGluZygKKwkJCSRtZXNzYWdlLCAkeGZlcl9lbmNvZGluZywgJHRhcmdldF94ZmVyX2VuY29kaW5nKTsKKwkJJHhmZXJfZW5jb2RpbmcgPSAkdGFyZ2V0X3hmZXJfZW5jb2Rpbmc7CisJfQorCWlmIChkZWZpbmVkICR4ZmVyX2VuY29kaW5nKSB7CisJCXB1c2ggQHhoLCAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogJHhmZXJfZW5jb2RpbmciOworCX0KKwlpZiAoZGVmaW5lZCAkeGZlcl9lbmNvZGluZyBvciAkaGFzX2NvbnRlbnRfdHlwZSkgeworCQl1bnNoaWZ0IEB4aCwgJ01JTUUtVmVyc2lvbjogMS4wJyB1bmxlc3MgJGhhc19taW1lX3ZlcnNpb247CisJfQorCisJJG5lZWRzX2NvbmZpcm0gPSAoCisJCSRjb25maXJtIGVxICJhbHdheXMiIG9yCisJCSgkY29uZmlybSA9fiAvXig/OmF1dG98Y2MpJC8gJiYgQGNjKSBvcgorCQkoJGNvbmZpcm0gPX4gL14oPzphdXRvfGNvbXBvc2UpJC8gJiYgJGNvbXBvc2UgJiYgJG1lc3NhZ2VfbnVtID09IDEpKTsKKwkkbmVlZHNfY29uZmlybSA9ICJpbmZvcm0iIGlmICgkbmVlZHNfY29uZmlybSAmJiAkY29uZmlybV91bmNvbmZpZ3VyZWQgJiYgQGNjKTsKKworCUB0byA9IHByb2Nlc3NfYWRkcmVzc19saXN0KEB0byk7CisJQGNjID0gcHJvY2Vzc19hZGRyZXNzX2xpc3QoQGNjKTsKKworCUB0byA9IChAaW5pdGlhbF90bywgQHRvKTsKKwlAY2MgPSAoQGluaXRpYWxfY2MsIEBjYyk7CisKKwlpZiAoJG1lc3NhZ2VfbnVtID09IDEpIHsKKwkJaWYgKGRlZmluZWQgJGNvdmVyX2NjIGFuZCAkY292ZXJfY2MpIHsKKwkJCUBpbml0aWFsX2NjID0gQGNjOworCQl9CisJCWlmIChkZWZpbmVkICRjb3Zlcl90byBhbmQgJGNvdmVyX3RvKSB7CisJCQlAaW5pdGlhbF90byA9IEB0bzsKKwkJfQorCX0KKworCW15ICRtZXNzYWdlX3dhc19zZW50ID0gc2VuZF9tZXNzYWdlKCk7CisKKwkjIHNldCB1cCBmb3IgdGhlIG5leHQgbWVzc2FnZQorCWlmICgkdGhyZWFkICYmICRtZXNzYWdlX3dhc19zZW50ICYmCisJCSgkY2hhaW5fcmVwbHlfdG8gfHwgIWRlZmluZWQgJHJlcGx5X3RvIHx8IGxlbmd0aCgkcmVwbHlfdG8pID09IDAgfHwKKwkJJG1lc3NhZ2VfbnVtID09IDEpKSB7CisJCSRyZXBseV90byA9ICRtZXNzYWdlX2lkOworCQlpZiAobGVuZ3RoICRyZWZlcmVuY2VzID4gMCkgeworCQkJJHJlZmVyZW5jZXMgLj0gIlxuICRtZXNzYWdlX2lkIjsKKwkJfSBlbHNlIHsKKwkJCSRyZWZlcmVuY2VzID0gIiRtZXNzYWdlX2lkIjsKKwkJfQorCX0KKwkkbWVzc2FnZV9pZCA9IHVuZGVmOworfQorCisjIEV4ZWN1dGUgYSBjb21tYW5kIChlLmcuICR0b19jbWQpIHRvIGdldCBhIGxpc3Qgb2YgZW1haWwgYWRkcmVzc2VzCisjIGFuZCByZXR1cm4gYSByZXN1bHRzIGFycmF5CitzdWIgcmVjaXBpZW50c19jbWQgeworCW15ICgkcHJlZml4LCAkd2hhdCwgJGNtZCwgJGZpbGUpID0gQF87CisKKwlteSBAYWRkcmVzc2VzID0gKCk7CisJb3BlbiBteSAkZmgsICItfCIsICIkY21kIFxRJGZpbGVcRSIKKwkgICAgb3IgZGllICIoJHByZWZpeCkgQ291bGQgbm90IGV4ZWN1dGUgJyRjbWQnIjsKKwl3aGlsZSAobXkgJGFkZHJlc3MgPSA8JGZoPikgeworCQkkYWRkcmVzcyA9fiBzL15ccyovL2c7CisJCSRhZGRyZXNzID1+IHMvXHMqJC8vZzsKKwkJJGFkZHJlc3MgPSBzYW5pdGl6ZV9hZGRyZXNzKCRhZGRyZXNzKTsKKwkJbmV4dCBpZiAoJGFkZHJlc3MgZXEgJHNlbmRlciBhbmQgJHN1cHByZXNzX2NjeydzZWxmJ30pOworCQlwdXNoIEBhZGRyZXNzZXMsICRhZGRyZXNzOworCQlwcmludGYoIigkcHJlZml4KSBBZGRpbmcgJXM6ICVzIGZyb206ICclcydcbiIsCisJCSAgICAgICAkd2hhdCwgJGFkZHJlc3MsICRjbWQpIHVubGVzcyAkcXVpZXQ7CisJCX0KKwljbG9zZSAkZmgKKwkgICAgb3IgZGllICIoJHByZWZpeCkgZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJyRjbWQnIjsKKwlyZXR1cm4gQGFkZHJlc3NlczsKK30KKworY2xlYW51cF9jb21wb3NlX2ZpbGVzKCk7CisKK3N1YiBjbGVhbnVwX2NvbXBvc2VfZmlsZXMgeworCXVubGluaygkY29tcG9zZV9maWxlbmFtZSwgJGNvbXBvc2VfZmlsZW5hbWUgLiAiLmZpbmFsIikgaWYgJGNvbXBvc2U7Cit9CisKKyRzbXRwLT5xdWl0IGlmICRzbXRwOworCitzdWIgYXBwbHlfdHJhbnNmZXJfZW5jb2RpbmcgeworCW15ICRtZXNzYWdlID0gc2hpZnQ7CisJbXkgJGZyb20gPSBzaGlmdDsKKwlteSAkdG8gPSBzaGlmdDsKKworCXJldHVybiAkbWVzc2FnZSBpZiAoJGZyb20gZXEgJHRvIGFuZCAkZnJvbSBuZSAnN2JpdCcpOworCisJcmVxdWlyZSBNSU1FOjpRdW90ZWRQcmludDsKKwlyZXF1aXJlIE1JTUU6OkJhc2U2NDsKKworCSRtZXNzYWdlID0gTUlNRTo6UXVvdGVkUHJpbnQ6OmRlY29kZSgkbWVzc2FnZSkKKwkJaWYgKCRmcm9tIGVxICdxdW90ZWQtcHJpbnRhYmxlJyk7CisJJG1lc3NhZ2UgPSBNSU1FOjpCYXNlNjQ6OmRlY29kZSgkbWVzc2FnZSkKKwkJaWYgKCRmcm9tIGVxICdiYXNlNjQnKTsKKworCWRpZSAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IgorCQlpZiAoJHRvIGVxICc3Yml0JyBhbmQgJG1lc3NhZ2UgPX4gL1teWzphc2NpaTpdXS8pOworCXJldHVybiAkbWVzc2FnZQorCQlpZiAoJHRvIGVxICc3Yml0JyBvciAkdG8gZXEgJzhiaXQnKTsKKwlyZXR1cm4gTUlNRTo6UXVvdGVkUHJpbnQ6OmVuY29kZSgkbWVzc2FnZSwgIlxuIiwgMCkKKwkJaWYgKCR0byBlcSAncXVvdGVkLXByaW50YWJsZScpOworCXJldHVybiBNSU1FOjpCYXNlNjQ6OmVuY29kZSgkbWVzc2FnZSwgIlxuIikKKwkJaWYgKCR0byBlcSAnYmFzZTY0Jyk7CisJZGllICJpbnZhbGlkIHRyYW5zZmVyIGVuY29kaW5nIjsKK30KKworc3ViIHVuaXF1ZV9lbWFpbF9saXN0IHsKKwlteSAlc2VlbjsKKwlteSBAZW1haWxzOworCisJZm9yZWFjaCBteSAkZW50cnkgKEBfKSB7CisJCW15ICRjbGVhbiA9IGV4dHJhY3RfdmFsaWRfYWRkcmVzc19vcl9kaWUoJGVudHJ5KTsKKwkJJHNlZW57JGNsZWFufSB8fD0gMDsKKwkJbmV4dCBpZiAkc2VlbnskY2xlYW59Kys7CisJCXB1c2ggQGVtYWlscywgJGVudHJ5OworCX0KKwlyZXR1cm4gQGVtYWlsczsKK30KKworc3ViIHZhbGlkYXRlX3BhdGNoIHsKKwlteSAkZm4gPSBzaGlmdDsKKwlvcGVuKG15ICRmaCwgJzwnLCAkZm4pCisJCW9yIGRpZSAidW5hYmxlIHRvIG9wZW4gJGZuOiAkIVxuIjsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgeworCQlpZiAobGVuZ3RoKCRsaW5lKSA+IDk5OCkgeworCQkJcmV0dXJuICIkLjogcGF0Y2ggY29udGFpbnMgYSBsaW5lIGxvbmdlciB0aGFuIDk5OCBjaGFyYWN0ZXJzIjsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N1YiBmaWxlX2hhc19ub25hc2NpaSB7CisJbXkgJGZuID0gc2hpZnQ7CisJb3BlbihteSAkZmgsICc8JywgJGZuKQorCQlvciBkaWUgInVuYWJsZSB0byBvcGVuICRmbjogJCFcbiI7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJcmV0dXJuIDEgaWYgJGxpbmUgPX4gL1teWzphc2NpaTpdXS87CisJfQorCXJldHVybiAwOworfQorCitzdWIgYm9keV9vcl9zdWJqZWN0X2hhc19ub25hc2NpaSB7CisJbXkgJGZuID0gc2hpZnQ7CisJb3BlbihteSAkZmgsICc8JywgJGZuKQorCQlvciBkaWUgInVuYWJsZSB0byBvcGVuICRmbjogJCFcbiI7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJbGFzdCBpZiAkbGluZSA9fiAvXiQvOworCQlyZXR1cm4gMSBpZiAkbGluZSA9fiAvXlN1YmplY3QuKlteWzphc2NpaTpdXS87CisJfQorCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCXJldHVybiAxIGlmICRsaW5lID1+IC9bXls6YXNjaWk6XV0vOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2dpdC1zaC1pMThuLnNoIGIvZ2l0LXNoLWkxOG4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZjMzExNgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zaC1pMThuLnNoCkBAIC0wLDAgKzEsOTEgQEAKKyMgVGhpcyBzaGVsbCBsaWJyYXJ5IGlzIEdpdCdzIGludGVyZmFjZSB0byBnZXR0ZXh0LnNoLiBTZWUgcG8vUkVBRE1FCisjIGZvciB1c2FnZSBpbnN0cnVjdGlvbnMuCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCisjIEV4cG9ydCB0aGUgVEVYVERPTUFJTiogZGF0YSB0aGF0IHdlIG5lZWQgZm9yIEdpdAorVEVYVERPTUFJTj1naXQKK2V4cG9ydCBURVhURE9NQUlOCitpZiB0ZXN0IC16ICIkR0lUX1RFWFRET01BSU5ESVIiCit0aGVuCisJVEVYVERPTUFJTkRJUj0iQEBMT0NBTEVESVJAQCIKK2Vsc2UKKwlURVhURE9NQUlORElSPSIkR0lUX1RFWFRET01BSU5ESVIiCitmaQorZXhwb3J0IFRFWFRET01BSU5ESVIKKworIyBGaXJzdCBkZWNpZGUgd2hhdCBzY2hlbWUgdG8gdXNlLi4uCitHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUU9ZmFsbHRocm91Z2gKK2lmIHRlc3QgLW4gIkBAVVNFX0dFVFRFWFRfU0NIRU1FQEAiCit0aGVuCisJR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FPSJAQFVTRV9HRVRURVhUX1NDSEVNRUBAIgorZWxpZiB0ZXN0IC1uICIkR0lUX0lOVEVSTkFMX0dFVFRFWFRfVEVTVF9GQUxMQkFDS1MiCit0aGVuCisJOiBubyBwcm9iaW5nIG5lY2Vzc2FyeQorZWxpZiB0ZXN0IC1uICIkR0lUX0dFVFRFWFRfUE9JU09OIgordGhlbgorCUdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRT1wb2lzb24KK2VsaWYgdHlwZSBnZXR0ZXh0LnNoID4vZGV2L251bGwgMj4mMQordGhlbgorCSMgR05VIGxpYmludGwncyBnZXR0ZXh0LnNoCisJR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FPWdudQorZWxpZiB0ZXN0ICIkKGdldHRleHQgLWggMj4mMSkiID0gIi1oIgordGhlbgorCSMgZ2V0dGV4dCBiaW5hcnkgZXhpc3RzIGJ1dCBubyBnZXR0ZXh0LnNoLiBsaWtlbHkgdG8gYmUgYSBnZXR0ZXh0CisJIyBiaW5hcnkgb24gYSBTb2xhcmlzIG9yIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBHTlUgbGliaW50bCBhbmQKKwkjIGxhY2sgZXZhbF9nZXR0ZXh0LgorCUdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRT1nZXR0ZXh0X3dpdGhvdXRfZXZhbF9nZXR0ZXh0CitmaQorZXhwb3J0IEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRQorCisjIC4uLiBhbmQgdGhlbiBmb2xsb3cgdGhhdCBkZWNpc2lvbi4KK2Nhc2UgIiRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUiIGluCitnbnUpCisJIyBVc2UgbGliaW50bCdzIGdldHRleHQuc2gsIG9yIGZhbGwgYmFjayB0byBFbmdsaXNoIGlmIHdlIGNhbid0LgorCS4gZ2V0dGV4dC5zaAorCTs7CitnZXR0ZXh0X3dpdGhvdXRfZXZhbF9nZXR0ZXh0KQorCSMgU29sYXJpcyBoYXMgYSBnZXR0ZXh0KDEpIGJ1dCBubyBldmFsX2dldHRleHQoMSkKKwlldmFsX2dldHRleHQgKCkgeworCQlnZXR0ZXh0ICIkMSIgfCAoCisJCQlleHBvcnQgUEFUSCAkKGdpdCBzaC1pMThuLS1lbnZzdWJzdCAtLXZhcmlhYmxlcyAiJDEiKTsKKwkJCWdpdCBzaC1pMThuLS1lbnZzdWJzdCAiJDEiCisJCSkKKwl9CisJOzsKK3BvaXNvbikKKwkjIEVtaXQgZ2FyYmFnZSBzbyB0aGF0IHRlc3RzIHRoYXQgaW5jb3JyZWN0bHkgcmVseSBvbiB0cmFuc2xhdGFibGUKKwkjIHN0cmluZ3Mgd2lsbCBmYWlsLgorCWdldHRleHQgKCkgeworCQlwcmludGYgIiVzIiAiIyBHRVRURVhUIFBPSVNPTiAjIgorCX0KKworCWV2YWxfZ2V0dGV4dCAoKSB7CisJCXByaW50ZiAiJXMiICIjIEdFVFRFWFQgUE9JU09OICMiCisJfQorCTs7CisqKQorCWdldHRleHQgKCkgeworCQlwcmludGYgIiVzIiAiJDEiCisJfQorCisJZXZhbF9nZXR0ZXh0ICgpIHsKKwkJcHJpbnRmICIlcyIgIiQxIiB8ICgKKwkJCWV4cG9ydCBQQVRIICQoZ2l0IHNoLWkxOG4tLWVudnN1YnN0IC0tdmFyaWFibGVzICIkMSIpOworCQkJZ2l0IHNoLWkxOG4tLWVudnN1YnN0ICIkMSIKKwkJKQorCX0KKwk7OworZXNhYworCisjIEdpdC1zcGVjaWZpYyB3cmFwcGVyIGZ1bmN0aW9ucworZ2V0dGV4dGxuICgpIHsKKwlnZXR0ZXh0ICIkMSIKKwllY2hvCit9CisKK2V2YWxfZ2V0dGV4dGxuICgpIHsKKwlldmFsX2dldHRleHQgIiQxIgorCWVjaG8KK30KZGlmZiAtLWdpdCBhL2dpdC1zaC1zZXR1cC5zaCBiL2dpdC1zaC1zZXR1cC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjkxZmJjCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXNoLXNldHVwLnNoCkBAIC0wLDAgKzEsMzY1IEBACisjIFRoaXMgc2hlbGwgc2NyaXBsZXQgaXMgbWVhbnQgdG8gYmUgaW5jbHVkZWQgYnkgb3RoZXIgc2hlbGwgc2NyaXB0cworIyB0byBzZXQgdXAgc29tZSB2YXJpYWJsZXMgcG9pbnRpbmcgYXQgdGhlIG5vcm1hbCBnaXQgZGlyZWN0b3JpZXMgYW5kCisjIGEgZmV3IGhlbHBlciBzaGVsbCBmdW5jdGlvbnMuCisKKyMgSGF2aW5nIHRoaXMgdmFyaWFibGUgaW4geW91ciBlbnZpcm9ubWVudCB3b3VsZCBicmVhayBzY3JpcHRzIGJlY2F1c2UKKyMgeW91IHdvdWxkIGNhdXNlICJjZCIgdG8gYmUgdGFrZW4gdG8gdW5leHBlY3RlZCBwbGFjZXMuICBJZiB5b3UKKyMgbGlrZSBDRFBBVEgsIGRlZmluZSBpdCBmb3IgeW91ciBpbnRlcmFjdGl2ZSBzaGVsbCBzZXNzaW9ucyB3aXRob3V0CisjIGV4cG9ydGluZyBpdC4KKyMgQnV0IHdlIHByb3RlY3Qgb3Vyc2VsdmVzIGZyb20gc3VjaCBhIHVzZXIgbWlzdGFrZSBuZXZlcnRoZWxlc3MuCit1bnNldCBDRFBBVEgKKworIyBTaW1pbGFybHkgZm9yIElGUywgYnV0IHNvbWUgc2hlbGxzIChlLmcuIEZyZWVCU0QgNy4yKSBhcmUgYnVnZ3kgYW5kCisjIGRvIG5vdCBlcXVhdGUgYW4gdW5zZXQgSUZTIHdpdGggSUZTIHdpdGggdGhlIGRlZmF1bHQsIHNvIGhlcmUgaXMKKyMgYW4gZXhwbGljaXQgU1AgSFQgTEYuCitJRlM9JyAJCisnCisKK2dpdF9icm9rZW5fcGF0aF9maXggKCkgeworCWNhc2UgIjokUEFUSDoiIGluCisJKjokMToqKSA6IG9rIDs7CisJKikKKwkJUEFUSD0kKAorCQkJU0FORV9UT09MX1BBVEg9IiQxIgorCQkJSUZTPTogcGF0aD0gc2VwPQorCQkJc2V0IHggJFBBVEgKKwkJCXNoaWZ0CisJCQlmb3IgZWxlbQorCQkJZG8KKwkJCQljYXNlICIkU0FORV9UT09MX1BBVEg6JGVsZW0iIGluCisJCQkJKD8qOi9iaW4gfCA/KjovdXNyL2JpbikKKwkJCQkJcGF0aD0iJHBhdGgkc2VwJFNBTkVfVE9PTF9QQVRIIgorCQkJCQlzZXA9OgorCQkJCQlTQU5FX1RPT0xfUEFUSD0KKwkJCQllc2FjCisJCQkJcGF0aD0iJHBhdGgkc2VwJGVsZW0iCisJCQkJc2VwPToKKwkJCWRvbmUKKwkJCWVjaG8gIiRwYXRoIgorCQkpCisJCTs7CisJZXNhYworfQorCisjIEBAQlJPS0VOX1BBVEhfRklYQEAKKworZGllICgpIHsKKwlkaWVfd2l0aF9zdGF0dXMgMSAiJEAiCit9CisKK2RpZV93aXRoX3N0YXR1cyAoKSB7CisJc3RhdHVzPSQxCisJc2hpZnQKKwlwcmludGYgPiYyICclc1xuJyAiJCoiCisJZXhpdCAiJHN0YXR1cyIKK30KKworR0lUX1FVSUVUPQorCitzYXkgKCkgeworCWlmIHRlc3QgLXogIiRHSVRfUVVJRVQiCisJdGhlbgorCQlwcmludGYgJyVzXG4nICIkKiIKKwlmaQorfQorCitpZiB0ZXN0IC1uICIkT1BUSU9OU19TUEVDIjsgdGhlbgorCXVzYWdlKCkgeworCQkiJDAiIC1oCisJCWV4aXQgMQorCX0KKworCXBhcnNlb3B0X2V4dHJhPQorCVsgLW4gIiRPUFRJT05TX0tFRVBEQVNIREFTSCIgXSAmJgorCQlwYXJzZW9wdF9leHRyYT0iLS1rZWVwLWRhc2hkYXNoIgorCVsgLW4gIiRPUFRJT05TX1NUVUNLTE9ORyIgXSAmJgorCQlwYXJzZW9wdF9leHRyYT0iJHBhcnNlb3B0X2V4dHJhIC0tc3R1Y2stbG9uZyIKKworCWV2YWwgIiQoCisJCWVjaG8gIiRPUFRJT05TX1NQRUMiIHwKKwkJCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAkcGFyc2VvcHRfZXh0cmEgLS0gIiRAIiB8fAorCQllY2hvIGV4aXQgJD8KKwkpIgorZWxzZQorCWRhc2hsZXNzPSQoYmFzZW5hbWUgLS0gIiQwIiB8IHNlZCAtZSAncy8tLyAvJykKKwl1c2FnZSgpIHsKKwkJZGllICJ1c2FnZTogJGRhc2hsZXNzICRVU0FHRSIKKwl9CisKKwlpZiBbIC16ICIkTE9OR19VU0FHRSIgXQorCXRoZW4KKwkJTE9OR19VU0FHRT0idXNhZ2U6ICRkYXNobGVzcyAkVVNBR0UiCisJZWxzZQorCQlMT05HX1VTQUdFPSJ1c2FnZTogJGRhc2hsZXNzICRVU0FHRQorCiskTE9OR19VU0FHRSIKKwlmaQorCisJY2FzZSAiJDEiIGluCisJCS1oKQorCQllY2hvICIkTE9OR19VU0FHRSIKKwkJZXhpdAorCWVzYWMKK2ZpCisKKyMgU2V0IHRoZSBuYW1lIG9mIHRoZSBlbmQtdXNlciBmYWNpbmcgY29tbWFuZCBpbiB0aGUgcmVmbG9nIHdoZW4gdGhlCisjIHNjcmlwdCBtYXkgdXBkYXRlIHJlZnMuICBXaGVuIEdJVF9SRUZMT0dfQUNUSU9OIGlzIGFscmVhZHkgc2V0LCB0aGlzCisjIHdpbGwgbm90IG92ZXJ3cml0ZSBpdCwgc28gdGhhdCBhIHNjcmlwdGVkIFBvcmNlbGFpbiAoZS5nLiAiZ2l0CisjIHJlYmFzZSIpIGNhbiBzZXQgaXQgdG8gaXRzIG93biBuYW1lIChlLmcuICJyZWJhc2UiKSBhbmQgdGhlbiBjYWxsCisjIGFub3RoZXIgc2NyaXB0ZWQgUG9yY2VsYWluIChlLmcuICJnaXQgYW0iKSBhbmQgYSBjYWxsIHRvIHRoaXMKKyMgZnVuY3Rpb24gaW4gdGhlIGxhdHRlciB3aWxsIGtlZXAgdGhlIG5hbWUgb2YgdGhlIGVuZC11c2VyIGZhY2luZworIyBwcm9ncmFtIChlLmcuICJyZWJhc2UiKSBpbiBHSVRfUkVGTE9HX0FDVElPTiwgZW5zdXJpbmcgd2hhdGV2ZXIgaXQKKyMgZG9lcyB3aWxsIGJlIHJlY29yZCBhcyBhY3Rpb25zIGRvbmUgYXMgcGFydCBvZiB0aGUgZW5kLXVzZXIgZmFjaW5nCisjIG9wZXJhdGlvbiAoZS5nLiAicmViYXNlIikuCisjCisjIE5PVEUgTk9URSBOT1RFOiBjb25zZXF1ZW50bHksIGFmdGVyIGFzc2lnbmluZyBhIHNwZWNpZmljIG1lc3NhZ2UgdG8KKyMgR0lUX1JFRkxPR19BQ1RJT04gd2hlbiBjYWxsaW5nIGEgImdpdCIgY29tbWFuZCB0byByZWNvcmQgYSBjdXN0b20KKyMgcmVmbG9nIG1lc3NhZ2UsIGRvIG5vdCBsZWF2ZSB0aGF0IGN1c3RvbSB2YWx1ZSBpbiBHSVRfUkVGTE9HX0FDVElPTiwKKyMgYWZ0ZXIgeW91IGFyZSBkb25lLiAgT3RoZXIgY2FsbGVycyBvZiAiZ2l0IiBjb21tYW5kcyB0aGF0IHJlbHkgb24KKyMgd3JpdGluZyB0aGUgZGVmYXVsdCAicHJvZ3JhbSBuYW1lIiBpbiByZWZsb2cgZXhwZWN0IHRoZSB2YXJpYWJsZSB0bworIyBjb250YWluIHRoZSB2YWx1ZSBzZXQgYnkgdGhpcyBmdW5jdGlvbi4KKyMKKyMgVG8gdXNlIGEgY3VzdG9tIHJlZmxvZyBtZXNzYWdlLCBkbyBlaXRoZXIgb25lIG9mIHRoZXNlIHRocmVlOgorIworIyAoYSkgdXNlIGEgc2luZ2xlLXNob3QgZXhwb3J0IGZvcm06CisjICAgICBHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OOiBwcmVwYXJpbmcgZnJvdHoiIFwKKyMgICAgICAgICBnaXQgY29tbWFuZC10aGF0LXVwZGF0ZXMtYS1yZWYKKyMKKyMgKGIpIHNhdmUgdGhlIG9yaWdpbmFsIGF3YXkgYW5kIHJlc3RvcmU6CisjICAgICBTQVZFRF9BQ1RJT049JEdJVF9SRUZMT0dfQUNUSU9OCisjICAgICBHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OOiBwcmVwYXJpbmcgZnJvdHoiCisjICAgICBnaXQgY29tbWFuZC10aGF0LXVwZGF0ZXMtYS1yZWYKKyMgICAgIEdJVF9SRUZMT0dfQUNJVE9OPSRTQVZFRF9BQ1RJT04KKyMKKyMgKGMpIGFzc2lnbiB0aGUgdmFyaWFibGUgaW4gYSBzdWJzaGVsbDoKKyMgICAgICgKKyMgICAgICAgICBHSVRfUkVGTE9HX0FDVElPTj0iJEdJVF9SRUZMT0dfQUNUSU9OOiBwcmVwYXJpbmcgZnJvdHoiCisjICAgICAgICAgZ2l0IGNvbW1hbmQtdGhhdC11cGRhdGVzLWEtcmVmCisjICAgICApCitzZXRfcmVmbG9nX2FjdGlvbigpIHsKKwlpZiBbIC16ICIke0dJVF9SRUZMT0dfQUNUSU9OOitzZXR9IiBdCisJdGhlbgorCQlHSVRfUkVGTE9HX0FDVElPTj0iJCoiCisJCWV4cG9ydCBHSVRfUkVGTE9HX0FDVElPTgorCWZpCit9CisKK2dpdF9lZGl0b3IoKSB7CisJaWYgdGVzdCAteiAiJHtHSVRfRURJVE9SOitzZXR9IgorCXRoZW4KKwkJR0lUX0VESVRPUj0iJChnaXQgdmFyIEdJVF9FRElUT1IpIiB8fCByZXR1cm4gJD8KKwlmaQorCisJZXZhbCAiJEdJVF9FRElUT1IiICciJEAiJworfQorCitnaXRfcGFnZXIoKSB7CisJaWYgdGVzdCAtdCAxCisJdGhlbgorCQlHSVRfUEFHRVI9JChnaXQgdmFyIEdJVF9QQUdFUikKKwllbHNlCisJCUdJVF9QQUdFUj1jYXQKKwlmaQorCTogJHtMRVNTPS1GUlh9CisJOiAke0xWPS1jfQorCWV4cG9ydCBMRVNTIExWCisKKwlldmFsICIkR0lUX1BBR0VSIiAnIiRAIicKK30KKworc2FuZV9ncmVwICgpIHsKKwlHUkVQX09QVElPTlM9IExDX0FMTD1DIGdyZXAgIiRAIgorfQorCitzYW5lX2VncmVwICgpIHsKKwlHUkVQX09QVElPTlM9IExDX0FMTD1DIGVncmVwICIkQCIKK30KKworaXNfYmFyZV9yZXBvc2l0b3J5ICgpIHsKKwlnaXQgcmV2LXBhcnNlIC0taXMtYmFyZS1yZXBvc2l0b3J5Cit9CisKK2NkX3RvX3RvcGxldmVsICgpIHsKKwljZHVwPSQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpICYmCisJY2QgIiRjZHVwIiB8fCB7CisJCWVjaG8gPiYyICJDYW5ub3QgY2hkaXIgdG8gJGNkdXAsIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorCQlleGl0IDEKKwl9Cit9CisKK3JlcXVpcmVfd29ya190cmVlX2V4aXN0cyAoKSB7CisJaWYgdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLWlzLWJhcmUtcmVwb3NpdG9yeSkiICE9IHpmYWxzZQorCXRoZW4KKwkJZGllICJmYXRhbDogJDAgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHdvcmtpbmcgdHJlZS4iCisJZmkKK30KKworcmVxdWlyZV93b3JrX3RyZWUgKCkgeworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUgMj4vZGV2L251bGwpIiA9IHRydWUgfHwKKwlkaWUgImZhdGFsOiAkMCBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgd29ya2luZyB0cmVlLiIKK30KKworcmVxdWlyZV9jbGVhbl93b3JrX3RyZWUgKCkgeworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+L2Rldi9udWxsIHx8IGV4aXQgMQorCWdpdCB1cGRhdGUtaW5kZXggLXEgLS1pZ25vcmUtc3VibW9kdWxlcyAtLXJlZnJlc2gKKwllcnI9MAorCisJaWYgISBnaXQgZGlmZi1maWxlcyAtLXF1aWV0IC0taWdub3JlLXN1Ym1vZHVsZXMKKwl0aGVuCisJCWVjaG8gPiYyICJDYW5ub3QgJDE6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorCQllcnI9MQorCWZpCisKKwlpZiAhIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcyBIRUFEIC0tCisJdGhlbgorCQlpZiBbICRlcnIgPSAwIF0KKwkJdGhlbgorCQkgICAgZWNobyA+JjIgIkNhbm5vdCAkMTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKKwkJZWxzZQorCQkgICAgZWNobyA+JjIgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKKwkJZmkKKwkJZXJyPTEKKwlmaQorCisJaWYgWyAkZXJyID0gMSBdCisJdGhlbgorCQl0ZXN0IC1uICIkMiIgJiYgZWNobyA+JjIgIiQyIgorCQlleGl0IDEKKwlmaQorfQorCisjIEdlbmVyYXRlIGEgc2VkIHNjcmlwdCB0byBwYXJzZSBpZGVudGl0aWVzIGZyb20gYSBjb21taXQuCisjCisjIFJlYWRzIHRoZSBjb21taXQgZnJvbSBzdGRpbiwgd2hpY2ggc2hvdWxkIGJlIGluIHJhdyBmb3JtYXQgKGUuZy4sIGZyb20KKyMgY2F0LWZpbGUgb3IgIi0tcHJldHR5PXJhdyIpLgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBpZGVudCBsaW5lIHRvIHBhcnNlIChlLmcuLCAiYXV0aG9yIiksIGFuZAorIyB0aGUgc2Vjb25kIHNwZWNpZmllcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcHV0IGl0IGluIChlLmcuLCAiQVVUSE9SIgorIyBmb3IgIkdJVF9BVVRIT1JfKiIpLiBNdWx0aXBsZSBwYWlycyBjYW4gYmUgZ2l2ZW4gdG8gcGFyc2UgYXV0aG9yIGFuZAorIyBjb21taXR0ZXIuCitwaWNrX2lkZW50X3NjcmlwdCAoKSB7CisJd2hpbGUgdGVzdCAkIyAtZ3QgMAorCWRvCisJCWxpZD0kMTsgc2hpZnQKKwkJdWlkPSQxOyBzaGlmdAorCQlwcmludGYgJyVzJyAiCisJCS9eJGxpZCAveworCQkJcy8nLydcXFxcJycvZworCQkJaAorCQkJcy9eJGxpZCAiJ1woW148XSpcKSA8W14+XSo+IC4qJC9cMS8nIgorCQkJcy8uKi9HSVRfJHt1aWR9X05BTUU9JyYnL3AKKworCQkJZworCQkJcy9eJGxpZCAiJ1tePF0qIDxcKFtePl0qXCk+IC4qJC9cMS8nIgorCQkJcy8uKi9HSVRfJHt1aWR9X0VNQUlMPScmJy9wCisKKwkJCWcKKwkJCXMvXiRsaWQgIidbXjxdKiA8W14+XSo+IFwoLipcKSQvQFwxLyciCisJCQlzLy4qL0dJVF8ke3VpZH1fREFURT0nJicvcAorCQl9CisJCSIKKwlkb25lCisJZWNobyAnL14kL3EnCit9CisKKyMgQ3JlYXRlIGEgcGljay1zY3JpcHQgYXMgYWJvdmUgYW5kIGZlZWQgaXQgdG8gc2VkLiBTdGRvdXQgaXMgc3VpdGFibGUgZm9yCisjIGZlZWRpbmcgdG8gZXZhbC4KK3BhcnNlX2lkZW50X2Zyb21fY29tbWl0ICgpIHsKKwlMQU5HPUMgTENfQUxMPUMgc2VkIC1uZSAiJChwaWNrX2lkZW50X3NjcmlwdCAiJEAiKSIKK30KKworIyBQYXJzZSB0aGUgYXV0aG9yIGZyb20gYSBjb21taXQgZ2l2ZW4gYXMgYW4gYXJndW1lbnQuIFN0ZG91dCBpcyBzdWl0YWJsZSBmb3IKKyMgZmVlZGluZyB0byBldmFsIHRvIHNldCB0aGUgdXN1YWwgR0lUXyogaWRlbnQgdmFyaWFibGVzLgorZ2V0X2F1dGhvcl9pZGVudF9mcm9tX2NvbW1pdCAoKSB7CisJZW5jb2Rpbmc9JChnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgfHwgZWNobyBVVEYtOCkKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1yYXcgLS1lbmNvZGluZz0iJGVuY29kaW5nIiAiJDEiIC0tIHwKKwlwYXJzZV9pZGVudF9mcm9tX2NvbW1pdCBhdXRob3IgQVVUSE9SCit9CisKKyMgQ2xlYXIgcmVwby1sb2NhbCBHSVRfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFVzZWZ1bCB3aGVuIHN3aXRjaGluZyB0bworIyBhbm90aGVyIHJlcG9zaXRvcnkgKGUuZy4gd2hlbiBlbnRlcmluZyBhIHN1Ym1vZHVsZSkuIFNlZSBhbHNvIHRoZSBlbnYKKyMgbGlzdCBpbiBnaXRfY29ubmVjdCgpCitjbGVhcl9sb2NhbF9naXRfZW52KCkgeworCXVuc2V0ICQoZ2l0IHJldi1wYXJzZSAtLWxvY2FsLWVudi12YXJzKQorfQorCisjIEdlbmVyYXRlIGEgdmlydHVhbCBiYXNlIGZpbGUgZm9yIGEgdHdvLWZpbGUgbWVyZ2UuIFVzZXMgZ2l0IGFwcGx5IHRvCisjIHJlbW92ZSBsaW5lcyBmcm9tICQxIHRoYXQgYXJlIG5vdCBpbiAkMiwgbGVhdmluZyBvbmx5IGNvbW1vbiBsaW5lcy4KK2NyZWF0ZV92aXJ0dWFsX2Jhc2UoKSB7CisJc3owPSQod2MgLWMgPCIkMSIpCisJQEBESUZGQEAgLXUgLUxhLyIkMSIgLUxiLyIkMSIgIiQxIiAiJDIiIHwgZ2l0IGFwcGx5IC0tbm8tYWRkCisJc3oxPSQod2MgLWMgPCIkMSIpCisKKwkjIElmIHdlIGRvIG5vdCBoYXZlIGVub3VnaCBjb21tb24gbWF0ZXJpYWwsIGl0IGlzIG5vdAorCSMgd29ydGggdHJ5aW5nIHR3by1maWxlIG1lcmdlIHVzaW5nIGNvbW1vbiBzdWJzZWN0aW9ucy4KKwlleHByICRzejAgXDwgJHN6MSBcKiAyID4vZGV2L251bGwgfHwgOiA+IiQxIgorfQorCisKKyMgUGxhdGZvcm0gc3BlY2lmaWMgdHdlYWtzIHRvIHdvcmsgYXJvdW5kIHNvbWUgY29tbWFuZHMKK2Nhc2UgJCh1bmFtZSAtcykgaW4KKypNSU5HVyopCisJIyBXaW5kb3dzIGhhcyBpdHMgb3duIChpbmNvbXBhdGlibGUpIHNvcnQgYW5kIGZpbmQKKwlzb3J0ICgpIHsKKwkJL3Vzci9iaW4vc29ydCAiJEAiCisJfQorCWZpbmQgKCkgeworCQkvdXNyL2Jpbi9maW5kICIkQCIKKwl9CisJIyBnaXQgc2VlcyBXaW5kb3dzLXN0eWxlIHB3ZAorCXB3ZCAoKSB7CisJCWJ1aWx0aW4gcHdkIC1XCisJfQorCWlzX2Fic29sdXRlX3BhdGggKCkgeworCQljYXNlICIkMSIgaW4KKwkJWy9cXF0qIHwgW0EtWmEtel06KikKKwkJCXJldHVybiAwIDs7CisJCWVzYWMKKwkJcmV0dXJuIDEKKwl9CisJOzsKKyopCisJaXNfYWJzb2x1dGVfcGF0aCAoKSB7CisJCWNhc2UgIiQxIiBpbgorCQkvKikKKwkJCXJldHVybiAwIDs7CisJCWVzYWMKKwkJcmV0dXJuIDEKKwl9Citlc2FjCisKKyMgTWFrZSBzdXJlIHdlIGFyZSBpbiBhIHZhbGlkIHJlcG9zaXRvcnkgb2YgYSB2aW50YWdlIHdlIHVuZGVyc3RhbmQsCisjIGlmIHdlIHJlcXVpcmUgdG8gYmUgaW4gYSBnaXQgcmVwb3NpdG9yeS4KK2dpdF9kaXJfaW5pdCAoKSB7CisJR0lUX0RJUj0kKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKSB8fCBleGl0CisJaWYgWyAteiAiJFNVQkRJUkVDVE9SWV9PSyIgXQorCXRoZW4KKwkJdGVzdCAteiAiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwKSIgfHwgeworCQkJZXhpdD0kPworCQkJZWNobyA+JjIgIllvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZS4iCisJCQlleGl0ICRleGl0CisJCX0KKwlmaQorCXRlc3QgLW4gIiRHSVRfRElSIiAmJiBHSVRfRElSPSQoY2QgIiRHSVRfRElSIiAmJiBwd2QpIHx8IHsKKwkJZWNobyA+JjIgIlVuYWJsZSB0byBkZXRlcm1pbmUgYWJzb2x1dGUgcGF0aCBvZiBnaXQgZGlyZWN0b3J5IgorCQlleGl0IDEKKwl9CisJOiAke0dJVF9PQkpFQ1RfRElSRUNUT1JZPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCBvYmplY3RzKSJ9Cit9CisKK2lmIHRlc3QgLXogIiROT05HSVRfT0siCit0aGVuCisJZ2l0X2Rpcl9pbml0CitmaQorCitwZWVsX2NvbW1pdHRpc2ggKCkgeworCWNhc2UgIiQxIiBpbgorCTovKikKKwkJcGVlbHRtcD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIikgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHtwZWVsdG1wfV4wIgorCQk7OworCSopCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiR7MX1eMCIKKwkJOzsKKwllc2FjCit9CmRpZmYgLS1naXQgYS9naXQtc3Rhc2guc2ggYi9naXQtc3Rhc2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzdjNjVlMgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zdGFzaC5zaApAQCAtMCwwICsxLDY0OCBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwNywgTmFuYWtvIFNoaXJhaXNoaQorCitkYXNobGVzcz0kKGJhc2VuYW1lICIkMCIgfCBzZWQgLWUgJ3MvLS8gLycpCitVU0FHRT0ibGlzdCBbPG9wdGlvbnM+XQorICAgb3I6ICRkYXNobGVzcyBzaG93IFs8c3Rhc2g+XQorICAgb3I6ICRkYXNobGVzcyBkcm9wIFstcXwtLXF1aWV0XSBbPHN0YXNoPl0KKyAgIG9yOiAkZGFzaGxlc3MgKCBwb3AgfCBhcHBseSApIFstLWluZGV4XSBbLXF8LS1xdWlldF0gWzxzdGFzaD5dCisgICBvcjogJGRhc2hsZXNzIGJyYW5jaCA8YnJhbmNobmFtZT4gWzxzdGFzaD5dCisgICBvcjogJGRhc2hsZXNzIFtzYXZlIFstLXBhdGNoXSBbLWt8LS1bbm8tXWtlZXAtaW5kZXhdIFstcXwtLXF1aWV0XQorCQkgICAgICAgWy11fC0taW5jbHVkZS11bnRyYWNrZWRdIFstYXwtLWFsbF0gWzxtZXNzYWdlPl1dCisgICBvcjogJGRhc2hsZXNzIGNsZWFyIgorCitTVUJESVJFQ1RPUllfT0s9WWVzCitPUFRJT05TX1NQRUM9CitTVEFSVF9ESVI9JChwd2QpCisuIGdpdC1zaC1zZXR1cAorLiBnaXQtc2gtaTE4bgorcmVxdWlyZV93b3JrX3RyZWUKK2NkX3RvX3RvcGxldmVsCisKK1RNUD0iJEdJVF9ESVIvLmdpdC1zdGFzaC4kJCIKK1RNUGluZGV4PSR7R0lUX0lOREVYX0ZJTEUtIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1wYXRoIGluZGV4KSJ9LnN0YXNoLiQkCit0cmFwICdybSAtZiAiJFRNUC0iKiAiJFRNUGluZGV4IicgMAorCityZWZfc3Rhc2g9cmVmcy9zdGFzaAorCitpZiBnaXQgY29uZmlnIC0tZ2V0LWNvbG9yYm9vbCBjb2xvci5pbnRlcmFjdGl2ZTsgdGhlbgorICAgICAgIGhlbHBfY29sb3I9IiQoZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBjb2xvci5pbnRlcmFjdGl2ZS5oZWxwICdyZWQgYm9sZCcpIgorICAgICAgIHJlc2V0X2NvbG9yPSIkKGdpdCBjb25maWcgLS1nZXQtY29sb3IgJycgcmVzZXQpIgorZWxzZQorICAgICAgIGhlbHBfY29sb3I9CisgICAgICAgcmVzZXRfY29sb3I9CitmaQorCitub19jaGFuZ2VzICgpIHsKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS1pZ25vcmUtc3VibW9kdWxlcyAtLSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgLS1pZ25vcmUtc3VibW9kdWxlcyAmJgorCSh0ZXN0IC16ICIkdW50cmFja2VkIiB8fCB0ZXN0IC16ICIkKHVudHJhY2tlZF9maWxlcykiKQorfQorCit1bnRyYWNrZWRfZmlsZXMgKCkgeworCWV4Y2xfb3B0PS0tZXhjbHVkZS1zdGFuZGFyZAorCXRlc3QgIiR1bnRyYWNrZWQiID0gImFsbCIgJiYgZXhjbF9vcHQ9CisJZ2l0IGxzLWZpbGVzIC1vIC16ICRleGNsX29wdAorfQorCitjbGVhcl9zdGFzaCAoKSB7CisJaWYgdGVzdCAkIyAhPSAwCisJdGhlbgorCQlkaWUgIiQoZ2V0dGV4dCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIikiCisJZmkKKwlpZiBjdXJyZW50PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0ICRyZWZfc3Rhc2gpCisJdGhlbgorCQlnaXQgdXBkYXRlLXJlZiAtZCAkcmVmX3N0YXNoICRjdXJyZW50CisJZmkKK30KKworY3JlYXRlX3N0YXNoICgpIHsKKwlzdGFzaF9tc2c9IiQxIgorCXVudHJhY2tlZD0iJDIiCisKKwlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaAorCWlmIG5vX2NoYW5nZXMKKwl0aGVuCisJCWV4aXQgMAorCWZpCisKKwkjIHN0YXRlIG9mIHRoZSBiYXNlIGNvbW1pdAorCWlmIGJfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorCXRoZW4KKwkJaGVhZD0kKGdpdCByZXYtbGlzdCAtLW9uZWxpbmUgLW4gMSBIRUFEIC0tKQorCWVsc2UKKwkJZGllICIkKGdldHRleHQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IikiCisJZmkKKworCWlmIGJyYW5jaD0kKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkKKwl0aGVuCisJCWJyYW5jaD0ke2JyYW5jaCNyZWZzL2hlYWRzL30KKwllbHNlCisJCWJyYW5jaD0nKG5vIGJyYW5jaCknCisJZmkKKwltc2c9JChwcmludGYgJyVzOiAlcycgIiRicmFuY2giICIkaGVhZCIpCisKKwkjIHN0YXRlIG9mIHRoZSBpbmRleAorCWlfdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWlfY29tbWl0PSQocHJpbnRmICdpbmRleCBvbiAlc1xuJyAiJG1zZyIgfAorCQlnaXQgY29tbWl0LXRyZWUgJGlfdHJlZSAtcCAkYl9jb21taXQpIHx8CisJCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIpIgorCisJaWYgdGVzdCAtbiAiJHVudHJhY2tlZCIKKwl0aGVuCisJCSMgVW50cmFja2VkIGZpbGVzIGFyZSBzdG9yZWQgYnkgdGhlbXNlbHZlcyBpbiBhIHBhcmVudGxlc3MgY29tbWl0LCBmb3IKKwkJIyBlYXNlIG9mIHVucGFja2luZyBsYXRlci4KKwkJdV9jb21taXQ9JCgKKwkJCXVudHJhY2tlZF9maWxlcyB8ICgKKwkJCQlHSVRfSU5ERVhfRklMRT0iJFRNUGluZGV4IiAmJgorCQkJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQkJCXJtIC1mICIkVE1QaW5kZXgiICYmCisJCQkJZ2l0IHVwZGF0ZS1pbmRleCAteiAtLWFkZCAtLXJlbW92ZSAtLXN0ZGluICYmCisJCQkJdV90cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCQkJcHJpbnRmICd1bnRyYWNrZWQgZmlsZXMgb24gJXNcbicgIiRtc2ciIHwgZ2l0IGNvbW1pdC10cmVlICR1X3RyZWUgICYmCisJCQkJcm0gLWYgIiRUTVBpbmRleCIKKwkJKSApIHx8IGRpZSAiQ2Fubm90IHNhdmUgdGhlIHVudHJhY2tlZCBmaWxlcyIKKworCQl1bnRyYWNrZWRfY29tbWl0X29wdGlvbj0iLXAgJHVfY29tbWl0IjsKKwllbHNlCisJCXVudHJhY2tlZF9jb21taXRfb3B0aW9uPQorCWZpCisKKwlpZiB0ZXN0IC16ICIkcGF0Y2hfbW9kZSIKKwl0aGVuCisKKwkJIyBzdGF0ZSBvZiB0aGUgd29ya2luZyB0cmVlCisJCXdfdHJlZT0kKCAoCisJCQlnaXQgcmVhZC10cmVlIC0taW5kZXgtb3V0cHV0PSIkVE1QaW5kZXgiIC1tICRpX3RyZWUgJiYKKwkJCUdJVF9JTkRFWF9GSUxFPSIkVE1QaW5kZXgiICYmCisJCQlleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkJCWdpdCBkaWZmIC0tbmFtZS1vbmx5IC16IEhFQUQgLS0gPiIkVE1QLXN0YWdlbmFtZXMiICYmCisJCQlnaXQgdXBkYXRlLWluZGV4IC16IC0tYWRkIC0tcmVtb3ZlIC0tc3RkaW4gPCIkVE1QLXN0YWdlbmFtZXMiICYmCisJCQlnaXQgd3JpdGUtdHJlZSAmJgorCQkJcm0gLWYgIiRUTVBpbmRleCIKKwkJKSApIHx8CisJCQlkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiKSIKKworCWVsc2UKKworCQlybSAtZiAiJFRNUC1pbmRleCIgJiYKKwkJR0lUX0lOREVYX0ZJTEU9IiRUTVAtaW5kZXgiIGdpdCByZWFkLXRyZWUgSEVBRCAmJgorCisJCSMgZmluZCBvdXQgd2hhdCB0aGUgdXNlciB3YW50cworCQlHSVRfSU5ERVhfRklMRT0iJFRNUC1pbmRleCIgXAorCQkJZ2l0IGFkZC0taW50ZXJhY3RpdmUgLS1wYXRjaD1zdGFzaCAtLSAmJgorCisJCSMgc3RhdGUgb2YgdGhlIHdvcmtpbmcgdHJlZQorCQl3X3RyZWU9JChHSVRfSU5ERVhfRklMRT0iJFRNUC1pbmRleCIgZ2l0IHdyaXRlLXRyZWUpIHx8CisJCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIpIgorCisJCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCAkd190cmVlIC0tID4iJFRNUC1wYXRjaCIgJiYKKwkJdGVzdCAtcyAiJFRNUC1wYXRjaCIgfHwKKwkJZGllICIkKGdldHRleHQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiKSIKKworCQlybSAtZiAiJFRNUC1pbmRleCIgfHwKKwkJZGllICIkKGdldHRleHQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIikiCisKKwlmaQorCisJIyBjcmVhdGUgdGhlIHN0YXNoCisJaWYgdGVzdCAteiAiJHN0YXNoX21zZyIKKwl0aGVuCisJCXN0YXNoX21zZz0kKHByaW50ZiAnV0lQIG9uICVzJyAiJG1zZyIpCisJZWxzZQorCQlzdGFzaF9tc2c9JChwcmludGYgJ09uICVzOiAlcycgIiRicmFuY2giICIkc3Rhc2hfbXNnIikKKwlmaQorCXdfY29tbWl0PSQocHJpbnRmICclc1xuJyAiJHN0YXNoX21zZyIgfAorCWdpdCBjb21taXQtdHJlZSAkd190cmVlIC1wICRiX2NvbW1pdCAtcCAkaV9jb21taXQgJHVudHJhY2tlZF9jb21taXRfb3B0aW9uKSB8fAorCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIpIgorfQorCitzdG9yZV9zdGFzaCAoKSB7CisJd2hpbGUgdGVzdCAkIyAhPSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1tfC0tbWVzc2FnZSkKKwkJCXNoaWZ0CisJCQlzdGFzaF9tc2c9IiQxIgorCQkJOzsKKwkJLXF8LS1xdWlldCkKKwkJCXF1aWV0PXQKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKwl0ZXN0ICQjID0gMSB8fAorCWRpZSAiJChldmFsX2dldHRleHQgIlwiJGRhc2hsZXNzIHN0b3JlXCIgcmVxdWlyZXMgb25lIDxjb21taXQ+IGFyZ3VtZW50IikiCisKKwl3X2NvbW1pdD0iJDEiCisJaWYgdGVzdCAteiAiJHN0YXNoX21zZyIKKwl0aGVuCisJCXN0YXNoX21zZz0iQ3JlYXRlZCB2aWEgXCJnaXQgc3Rhc2ggc3RvcmVcIi4iCisJZmkKKworCWdpdCB1cGRhdGUtcmVmIC0tY3JlYXRlLXJlZmxvZyAtbSAiJHN0YXNoX21zZyIgJHJlZl9zdGFzaCAkd19jb21taXQKKwlyZXQ9JD8KKwl0ZXN0ICRyZXQgIT0gMCAmJiB0ZXN0IC16ICRxdWlldCAmJgorCWRpZSAiJChldmFsX2dldHRleHQgIkNhbm5vdCB1cGRhdGUgXCRyZWZfc3Rhc2ggd2l0aCBcJHdfY29tbWl0IikiCisJcmV0dXJuICRyZXQKK30KKworc2F2ZV9zdGFzaCAoKSB7CisJa2VlcF9pbmRleD0KKwlwYXRjaF9tb2RlPQorCXVudHJhY2tlZD0KKwl3aGlsZSB0ZXN0ICQjICE9IDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLWt8LS1rZWVwLWluZGV4KQorCQkJa2VlcF9pbmRleD10CisJCQk7OworCQktLW5vLWtlZXAtaW5kZXgpCisJCQlrZWVwX2luZGV4PW4KKwkJCTs7CisJCS1wfC0tcGF0Y2gpCisJCQlwYXRjaF9tb2RlPXQKKwkJCSMgb25seSBkZWZhdWx0IHRvIGtlZXAgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIG92ZXJyaWRlCisJCQl0ZXN0IC16ICIka2VlcF9pbmRleCIgJiYga2VlcF9pbmRleD10CisJCQk7OworCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPXQKKwkJCTs7CisJCS11fC0taW5jbHVkZS11bnRyYWNrZWQpCisJCQl1bnRyYWNrZWQ9dW50cmFja2VkCisJCQk7OworCQktYXwtLWFsbCkKKwkJCXVudHJhY2tlZD1hbGwKKwkJCTs7CisJCS0taGVscCkKKwkJCXNob3dfaGVscAorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJb3B0aW9uPSIkMSIKKwkJCSMgVFJBTlNMQVRPUlM6ICRvcHRpb24gaXMgYW4gaW52YWxpZCBvcHRpb24sIGxpa2UKKwkJCSMgYC0tYmxhaC1ibGFoJy4gVGhlIDcgc3BhY2VzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisJCQkjIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKwkJCSMgdXAgdGhlIHNlY29uZCBsaW5lIHdpdGggaG93ZXZlciBtYW55IGNoYXJhY3RlcnMgdGhlCisJCQkjIHRyYW5zbGF0aW9uIG9mICJlcnJvcjogIiB0YWtlcyBpbiB5b3VyIGxhbmd1YWdlLiBFLmcuIGluCisJCQkjIEVuZ2xpc2ggdGhpcyBpczoKKwkJCSMKKwkJCSMgICAgJCBnaXQgc3Rhc2ggc2F2ZSAtLWJsYWgtYmxhaCAyPiYxIHwgaGVhZCAtbiAyCisJCQkjICAgIGVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAtLWJsYWgtYmxhaAorCQkJIyAgICAgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnLS1ibGFoLWJsYWgnCisJCQlldmFsX2dldHRleHRsbiAiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6IFwkb3B0aW9uCisgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnXCRvcHRpb24nIgorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWlmIHRlc3QgLW4gIiRwYXRjaF9tb2RlIiAmJiB0ZXN0IC1uICIkdW50cmFja2VkIgorCXRoZW4KKwkgICAgZGllICJDYW4ndCB1c2UgLS1wYXRjaCBhbmQgLS1pbmNsdWRlLXVudHJhY2tlZCBvciAtLWFsbCBhdCB0aGUgc2FtZSB0aW1lIgorCWZpCisKKwlzdGFzaF9tc2c9IiQqIgorCisJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2gKKwlpZiBub19jaGFuZ2VzCisJdGhlbgorCQlzYXkgIiQoZ2V0dGV4dCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIikiCisJCWV4aXQgMAorCWZpCisJZ2l0IHJlZmxvZyBleGlzdHMgJHJlZl9zdGFzaCB8fAorCQljbGVhcl9zdGFzaCB8fCBkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giKSIKKworCWNyZWF0ZV9zdGFzaCAiJHN0YXNoX21zZyIgJHVudHJhY2tlZAorCXN0b3JlX3N0YXNoIC1tICIkc3Rhc2hfbXNnIiAtcSAkd19jb21taXQgfHwKKwlkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIikiCisJc2F5IFNhdmVkIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBpbmRleCBzdGF0ZSAiJHN0YXNoX21zZyIKKworCWlmIHRlc3QgLXogIiRwYXRjaF9tb2RlIgorCXRoZW4KKwkJZ2l0IHJlc2V0IC0taGFyZCAke0dJVF9RVUlFVDorLXF9CisJCXRlc3QgIiR1bnRyYWNrZWQiID0gImFsbCIgJiYgQ0xFQU5fWF9PUFRJT049LXggfHwgQ0xFQU5fWF9PUFRJT049CisJCWlmIHRlc3QgLW4gIiR1bnRyYWNrZWQiCisJCXRoZW4KKwkJCWdpdCBjbGVhbiAtLWZvcmNlIC0tcXVpZXQgLWQgJENMRUFOX1hfT1BUSU9OCisJCWZpCisKKwkJaWYgdGVzdCAiJGtlZXBfaW5kZXgiID0gInQiICYmIHRlc3QgLW4gJGlfdHJlZQorCQl0aGVuCisJCQlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgJGlfdHJlZQorCQlmaQorCWVsc2UKKwkJZ2l0IGFwcGx5IC1SIDwgIiRUTVAtcGF0Y2giIHx8CisJCWRpZSAiJChnZXR0ZXh0ICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiKSIKKworCQlpZiB0ZXN0ICIka2VlcF9pbmRleCIgIT0gInQiCisJCXRoZW4KKwkJCWdpdCByZXNldAorCQlmaQorCWZpCit9CisKK2hhdmVfc3Rhc2ggKCkgeworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAkcmVmX3N0YXNoID4vZGV2L251bGwKK30KKworbGlzdF9zdGFzaCAoKSB7CisJaGF2ZV9zdGFzaCB8fCByZXR1cm4gMAorCWdpdCBsb2cgLS1mb3JtYXQ9IiVnZDogJWdzIiAtZyAtLWZpcnN0LXBhcmVudCAtbSAiJEAiICRyZWZfc3Rhc2ggLS0KK30KKworc2hvd19zdGFzaCAoKSB7CisJQUxMT1dfVU5LTk9XTl9GTEFHUz10CisJYXNzZXJ0X3N0YXNoX2xpa2UgIiRAIgorCisJaWYgdGVzdCAteiAiJEZMQUdTIgorCXRoZW4KKwkJaWYgdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBzdGFzaC5zaG93U3RhdCB8fCBlY2hvIHRydWUpIiA9ICJ0cnVlIgorCQl0aGVuCisJCQlGTEFHUz0tLXN0YXQKKwkJZmkKKworCQlpZiB0ZXN0ICIkKGdpdCBjb25maWcgLS1ib29sIHN0YXNoLnNob3dQYXRjaCB8fCBlY2hvIGZhbHNlKSIgPSAidHJ1ZSIKKwkJdGhlbgorCQkJRkxBR1M9JHtGTEFHU30ke0ZMQUdTOisgfS1wCisJCWZpCisKKwkJaWYgdGVzdCAteiAiJEZMQUdTIgorCQl0aGVuCisJCQlyZXR1cm4gMAorCQlmaQorCWZpCisKKwlnaXQgZGlmZiAke0ZMQUdTfSAkYl9jb21taXQgJHdfY29tbWl0Cit9CisKK3Nob3dfaGVscCAoKSB7CisJZXhlYyBnaXQgaGVscCBzdGFzaAorCWV4aXQgMQorfQorCisjCisjIFBhcnNlcyB0aGUgcmVtYWluaW5nIG9wdGlvbnMgbG9va2luZyBmb3IgZmxhZ3MgYW5kCisjIGF0IG1vc3Qgb25lIHJldmlzaW9uIGRlZmF1bHRpbmcgdG8gJHtyZWZfc3Rhc2h9QHswfQorIyBpZiBub25lIGZvdW5kLgorIworIyBEZXJpdmVzIHJlbGF0ZWQgdHJlZSBhbmQgY29tbWl0IG9iamVjdHMgZnJvbSB0aGUKKyMgcmV2aXNpb24sIGlmIG9uZSBpcyBmb3VuZC4KKyMKKyMgc3Rhc2ggcmVjb3JkcyB0aGUgd29yayB0cmVlLCBhbmQgaXMgYSBtZXJnZSBiZXR3ZWVuIHRoZQorIyBiYXNlIGNvbW1pdCAoZmlyc3QgcGFyZW50KSBhbmQgdGhlIGluZGV4IHRyZWUgKHNlY29uZCBwYXJlbnQpLgorIworIyAgIFJFViBpcyBzZXQgdG8gdGhlIHN5bWJvbGljIHZlcnNpb24gb2YgdGhlIHNwZWNpZmllZCBzdGFzaC1saWtlIGNvbW1pdAorIyAgIElTX1NUQVNIX0xJS0UgaXMgbm9uLWJsYW5rIGlmICR7UkVWfSBsb29rcyBsaWtlIGEgc3Rhc2gKKyMgICBJU19TVEFTSF9SRUYgaXMgbm9uLWJsYW5rIGlmIHRoZSAke1JFVn0gbG9va3MgbGlrZSBhIHN0YXNoIHJlZgorIyAgIHMgaXMgc2V0IHRvIHRoZSBTSEExIG9mIHRoZSBzdGFzaCBjb21taXQKKyMgICB3X2NvbW1pdCBpcyBzZXQgdG8gdGhlIGNvbW1pdCBjb250YWluaW5nIHRoZSB3b3JraW5nIHRyZWUKKyMgICBiX2NvbW1pdCBpcyBzZXQgdG8gdGhlIGJhc2UgY29tbWl0CisjICAgaV9jb21taXQgaXMgc2V0IHRvIHRoZSBjb21taXQgY29udGFpbmluZyB0aGUgaW5kZXggdHJlZQorIyAgIHVfY29tbWl0IGlzIHNldCB0byB0aGUgY29tbWl0IGNvbnRhaW5pbmcgdGhlIHVudHJhY2tlZCBmaWxlcyB0cmVlCisjICAgd190cmVlIGlzIHNldCB0byB0aGUgd29ya2luZyB0cmVlCisjICAgYl90cmVlIGlzIHNldCB0byB0aGUgYmFzZSB0cmVlCisjICAgaV90cmVlIGlzIHNldCB0byB0aGUgaW5kZXggdHJlZQorIyAgIHVfdHJlZSBpcyBzZXQgdG8gdGhlIHVudHJhY2tlZCBmaWxlcyB0cmVlCisjCisjICAgR0lUX1FVSUVUIGlzIHNldCB0byB0IGlmIC1xIGlzIHNwZWNpZmllZAorIyAgIElOREVYX09QVElPTiBpcyBzZXQgdG8gLS1pbmRleCBpZiAtLWluZGV4IGlzIHNwZWNpZmllZC4KKyMgICBGTEFHUyBpcyBzZXQgdG8gdGhlIHJlbWFpbmluZyBmbGFncyAoaWYgYWxsb3dlZCkKKyMKKyMgZGllcyBpZjoKKyMgICAqIHRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQKKyMgICAqIG5vIHJldmlzaW9uIGlzIHNwZWNpZmllZCBhbmQgdGhlcmUgaXMgbm8gc3Rhc2ggc3RhY2sKKyMgICAqIGEgcmV2aXNpb24gaXMgc3BlY2lmaWVkIHdoaWNoIGNhbm5vdCBiZSByZXNvbHZlIHRvIGEgU0hBMQorIyAgICogYSBub24tZXhpc3RlbnQgc3Rhc2ggcmVmZXJlbmNlIGlzIHNwZWNpZmllZAorIyAgICogdW5rbm93biBmbGFncyB3ZXJlIHNldCBhbmQgQUxMT1dfVU5LTk9XTl9GTEFHUyBpcyBub3QgInQiCisjCisKK3BhcnNlX2ZsYWdzX2FuZF9yZXYoKQoreworCXRlc3QgIiRQQVJTRV9DQUNIRSIgPSAiJCoiICYmIHJldHVybiAwICMgb3B0aW1pc2F0aW9uCisJUEFSU0VfQ0FDSEU9IiQqIgorCisJSVNfU1RBU0hfTElLRT0KKwlJU19TVEFTSF9SRUY9CisJSU5ERVhfT1BUSU9OPQorCXM9CisJd19jb21taXQ9CisJYl9jb21taXQ9CisJaV9jb21taXQ9CisJdV9jb21taXQ9CisJd190cmVlPQorCWJfdHJlZT0KKwlpX3RyZWU9CisJdV90cmVlPQorCisJUkVWPSQoZ2l0IHJldi1wYXJzZSAtLW5vLWZsYWdzIC0tc3ltYm9saWMgLS1zcSAiJEAiKSB8fCBleGl0IDEKKworCUZMQUdTPQorCWZvciBvcHQKKwlkbworCQljYXNlICIkb3B0IiBpbgorCQkJLXF8LS1xdWlldCkKKwkJCQlHSVRfUVVJRVQ9LXQKKwkJCTs7CisJCQktLWluZGV4KQorCQkJCUlOREVYX09QVElPTj0tLWluZGV4CisJCQk7OworCQkJLS1oZWxwKQorCQkJCXNob3dfaGVscAorCQkJOzsKKwkJCS0qKQorCQkJCXRlc3QgIiRBTExPV19VTktOT1dOX0ZMQUdTIiA9IHQgfHwKKwkJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAidW5rbm93biBvcHRpb246IFwkb3B0IikiCisJCQkJRkxBR1M9IiR7RkxBR1N9JHtGTEFHUzorIH0kb3B0IgorCQkJOzsKKwkJZXNhYworCWRvbmUKKworCWV2YWwgc2V0IC0tICRSRVYKKworCWNhc2UgJCMgaW4KKwkJMCkKKwkJCWhhdmVfc3Rhc2ggfHwgZGllICIkKGdldHRleHQgIk5vIHN0YXNoIGZvdW5kLiIpIgorCQkJc2V0IC0tICR7cmVmX3N0YXNofUB7MH0KKwkJOzsKKwkJMSkKKwkJCToKKwkJOzsKKwkJKikKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6IFwkUkVWIikiCisJCTs7CisJZXNhYworCisJUkVWPSQoZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljIC0tdmVyaWZ5IC0tcXVpZXQgIiQxIikgfHwgeworCQlyZWZlcmVuY2U9IiQxIgorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJcJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiKSIKKwl9CisKKwlpX2NvbW1pdD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAiJFJFVl4yIikgJiYKKwlzZXQgLS0gJChnaXQgcmV2LXBhcnNlICIkUkVWIiAiJFJFVl4xIiAiJFJFVjoiICIkUkVWXjE6IiAiJFJFVl4yOiIgMj4vZGV2L251bGwpICYmCisJcz0kMSAmJgorCXdfY29tbWl0PSQxICYmCisJYl9jb21taXQ9JDIgJiYKKwl3X3RyZWU9JDMgJiYKKwliX3RyZWU9JDQgJiYKKwlpX3RyZWU9JDUgJiYKKwlJU19TVEFTSF9MSUtFPXQgJiYKKwl0ZXN0ICIkcmVmX3N0YXNoIiA9ICIkKGdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgIiR7UkVWJUAqfSIpIiAmJgorCUlTX1NUQVNIX1JFRj10CisKKwl1X2NvbW1pdD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1xdWlldCAiJFJFVl4zIikgJiYKKwl1X3RyZWU9JChnaXQgcmV2LXBhcnNlICIkUkVWXjM6IiAyPi9kZXYvbnVsbCkKK30KKworaXNfc3Rhc2hfbGlrZSgpCit7CisJcGFyc2VfZmxhZ3NfYW5kX3JldiAiJEAiCisJdGVzdCAtbiAiJElTX1NUQVNIX0xJS0UiCit9CisKK2Fzc2VydF9zdGFzaF9saWtlKCkgeworCWlzX3N0YXNoX2xpa2UgIiRAIiB8fCB7CisJCWFyZ3M9IiQqIgorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICInXCRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIpIgorCX0KK30KKworaXNfc3Rhc2hfcmVmKCkgeworCWlzX3N0YXNoX2xpa2UgIiRAIiAmJiB0ZXN0IC1uICIkSVNfU1RBU0hfUkVGIgorfQorCithc3NlcnRfc3Rhc2hfcmVmKCkgeworCWlzX3N0YXNoX3JlZiAiJEAiIHx8IHsKKwkJYXJncz0iJCoiCisJCWRpZSAiJChldmFsX2dldHRleHQgIidcJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIpIgorCX0KK30KKworYXBwbHlfc3Rhc2ggKCkgeworCisJYXNzZXJ0X3N0YXNoX2xpa2UgIiRAIgorCisJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2ggfHwgZGllICIkKGdldHRleHQgInVuYWJsZSB0byByZWZyZXNoIGluZGV4IikiCisKKwkjIGN1cnJlbnQgaW5kZXggc3RhdGUKKwljX3RyZWU9JChnaXQgd3JpdGUtdHJlZSkgfHwKKwkJZGllICIkKGdldHRleHQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIpIgorCisJdW5zdGFzaGVkX2luZGV4X3RyZWU9CisJaWYgdGVzdCAtbiAiJElOREVYX09QVElPTiIgJiYgdGVzdCAiJGJfdHJlZSIgIT0gIiRpX3RyZWUiICYmCisJCQl0ZXN0ICIkY190cmVlIiAhPSAiJGlfdHJlZSIKKwl0aGVuCisJCWdpdCBkaWZmLXRyZWUgLS1iaW5hcnkgJHNeMl4uLiRzXjIgfCBnaXQgYXBwbHkgLS1jYWNoZWQKKwkJdGVzdCAkPyAtbmUgMCAmJgorCQkJZGllICIkKGdldHRleHQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iKSIKKwkJdW5zdGFzaGVkX2luZGV4X3RyZWU9JChnaXQgd3JpdGUtdHJlZSkgfHwKKwkJCWRpZSAiJChnZXR0ZXh0ICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIikiCisJCWdpdCByZXNldAorCWZpCisKKwlpZiB0ZXN0IC1uICIkdV90cmVlIgorCXRoZW4KKwkJR0lUX0lOREVYX0ZJTEU9IiRUTVBpbmRleCIgZ2l0LXJlYWQtdHJlZSAiJHVfdHJlZSIgJiYKKwkJR0lUX0lOREVYX0ZJTEU9IiRUTVBpbmRleCIgZ2l0IGNoZWNrb3V0LWluZGV4IC0tYWxsICYmCisJCXJtIC1mICIkVE1QaW5kZXgiIHx8CisJCWRpZSAnQ291bGQgbm90IHJlc3RvcmUgdW50cmFja2VkIGZpbGVzIGZyb20gc3Rhc2gnCisJZmkKKworCWV2YWwgIgorCQlHSVRIRUFEXyR3X3RyZWU9J1N0YXNoZWQgY2hhbmdlcycgJiYKKwkJR0lUSEVBRF8kY190cmVlPSdVcGRhdGVkIHVwc3RyZWFtJyAmJgorCQlHSVRIRUFEXyRiX3RyZWU9J1ZlcnNpb24gc3Rhc2ggd2FzIGJhc2VkIG9uJyAmJgorCQlleHBvcnQgR0lUSEVBRF8kd190cmVlIEdJVEhFQURfJGNfdHJlZSBHSVRIRUFEXyRiX3RyZWUKKwkiCisKKwlpZiB0ZXN0IC1uICIkR0lUX1FVSUVUIgorCXRoZW4KKwkJR0lUX01FUkdFX1ZFUkJPU0lUWT0wICYmIGV4cG9ydCBHSVRfTUVSR0VfVkVSQk9TSVRZCisJZmkKKwlpZiBnaXQgbWVyZ2UtcmVjdXJzaXZlICRiX3RyZWUgLS0gJGNfdHJlZSAkd190cmVlCisJdGhlbgorCQkjIE5vIGNvbmZsaWN0CisJCWlmIHRlc3QgLW4gIiR1bnN0YXNoZWRfaW5kZXhfdHJlZSIKKwkJdGhlbgorCQkJZ2l0IHJlYWQtdHJlZSAiJHVuc3Rhc2hlZF9pbmRleF90cmVlIgorCQllbHNlCisJCQlhPSIkVE1QLWFkZGVkIiAmJgorCQkJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1uYW1lLW9ubHkgLS1kaWZmLWZpbHRlcj1BICRjX3RyZWUgPiIkYSIgJiYKKwkJCWdpdCByZWFkLXRyZWUgLS1yZXNldCAkY190cmVlICYmCisJCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tc3RkaW4gPCIkYSIgfHwKKwkJCQlkaWUgIiQoZ2V0dGV4dCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiKSIKKwkJCXJtIC1mICIkYSIKKwkJZmkKKwkJc3F1ZWxjaD0KKwkJaWYgdGVzdCAtbiAiJEdJVF9RVUlFVCIKKwkJdGhlbgorCQkJc3F1ZWxjaD0nPi9kZXYvbnVsbCAyPiYxJworCQlmaQorCQkoY2QgIiRTVEFSVF9ESVIiICYmIGV2YWwgImdpdCBzdGF0dXMgJHNxdWVsY2giKSB8fCA6CisJZWxzZQorCQkjIE1lcmdlIGNvbmZsaWN0OyBrZWVwIHRoZSBleGl0IHN0YXR1cyBmcm9tIG1lcmdlLXJlY3Vyc2l2ZQorCQlzdGF0dXM9JD8KKwkJZ2l0IHJlcmVyZQorCQlpZiB0ZXN0IC1uICIkSU5ERVhfT1BUSU9OIgorCQl0aGVuCisJCQlnZXR0ZXh0bG4gIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIgPiYyCisJCWZpCisJCWV4aXQgJHN0YXR1cworCWZpCit9CisKK3BvcF9zdGFzaCgpIHsKKwlhc3NlcnRfc3Rhc2hfcmVmICIkQCIKKworCWlmIGFwcGx5X3N0YXNoICIkQCIKKwl0aGVuCisJCWRyb3Bfc3Rhc2ggIiRAIgorCWVsc2UKKwkJc3RhdHVzPSQ/CisJCXNheSAiVGhlIHN0YXNoIGlzIGtlcHQgaW4gY2FzZSB5b3UgbmVlZCBpdCBhZ2Fpbi4iCisJCWV4aXQgJHN0YXR1cworCWZpCit9CisKK2Ryb3Bfc3Rhc2ggKCkgeworCWFzc2VydF9zdGFzaF9yZWYgIiRAIgorCisJZ2l0IHJlZmxvZyBkZWxldGUgLS11cGRhdGVyZWYgLS1yZXdyaXRlICIke1JFVn0iICYmCisJCXNheSAiJChldmFsX2dldHRleHQgIkRyb3BwZWQgXCR7UkVWfSAoXCRzKSIpIiB8fAorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJcJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIpIgorCisJIyBjbGVhcl9zdGFzaCBpZiB3ZSBqdXN0IGRyb3BwZWQgdGhlIGxhc3Qgc3Rhc2ggZW50cnkKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgIiRyZWZfc3Rhc2hAezB9IiA+L2Rldi9udWxsIHx8CisJY2xlYXJfc3Rhc2gKK30KKworYXBwbHlfdG9fYnJhbmNoICgpIHsKKwl0ZXN0IC1uICIkMSIgfHwgZGllICIkKGdldHRleHQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIpIgorCWJyYW5jaD0kMQorCXNoaWZ0IDEKKworCXNldCAtLSAtLWluZGV4ICIkQCIKKwlhc3NlcnRfc3Rhc2hfbGlrZSAiJEAiCisKKwlnaXQgY2hlY2tvdXQgLWIgJGJyYW5jaCAkUkVWXiAmJgorCWFwcGx5X3N0YXNoICIkQCIgJiYgeworCQl0ZXN0IC16ICIkSVNfU1RBU0hfUkVGIiB8fCBkcm9wX3N0YXNoICIkQCIKKwl9Cit9CisKK1BBUlNFX0NBQ0hFPSctLW5vdC1wYXJzZWQnCisjIFRoZSBkZWZhdWx0IGNvbW1hbmQgaXMgInNhdmUiIGlmIG5vdGhpbmcgYnV0IG9wdGlvbnMgYXJlIGdpdmVuCitzZWVuX25vbl9vcHRpb249Citmb3Igb3B0CitkbworCWNhc2UgIiRvcHQiIGluCisJLSopIDs7CisJKikgc2Vlbl9ub25fb3B0aW9uPXQ7IGJyZWFrIDs7CisJZXNhYworZG9uZQorCit0ZXN0IC1uICIkc2Vlbl9ub25fb3B0aW9uIiB8fCBzZXQgInNhdmUiICIkQCIKKworIyBNYWluIGNvbW1hbmQgc2V0CitjYXNlICIkMSIgaW4KK2xpc3QpCisJc2hpZnQKKwlsaXN0X3N0YXNoICIkQCIKKwk7Oworc2hvdykKKwlzaGlmdAorCXNob3dfc3Rhc2ggIiRAIgorCTs7CitzYXZlKQorCXNoaWZ0CisJc2F2ZV9zdGFzaCAiJEAiCisJOzsKK2FwcGx5KQorCXNoaWZ0CisJYXBwbHlfc3Rhc2ggIiRAIgorCTs7CitjbGVhcikKKwlzaGlmdAorCWNsZWFyX3N0YXNoICIkQCIKKwk7OworY3JlYXRlKQorCXNoaWZ0CisJY3JlYXRlX3N0YXNoICIkKiIgJiYgZWNobyAiJHdfY29tbWl0IgorCTs7CitzdG9yZSkKKwlzaGlmdAorCXN0b3JlX3N0YXNoICIkQCIKKwk7OworZHJvcCkKKwlzaGlmdAorCWRyb3Bfc3Rhc2ggIiRAIgorCTs7Citwb3ApCisJc2hpZnQKKwlwb3Bfc3Rhc2ggIiRAIgorCTs7CiticmFuY2gpCisJc2hpZnQKKwlhcHBseV90b19icmFuY2ggIiRAIgorCTs7CisqKQorCWNhc2UgJCMgaW4KKwkwKQorCQlzYXZlX3N0YXNoICYmCisJCXNheSAiJChnZXR0ZXh0ICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiKSIKKwkJOzsKKwkqKQorCQl1c2FnZQorCWVzYWMKKwk7OworZXNhYwpkaWZmIC0tZ2l0IGEvZ2l0LXN1Ym1vZHVsZS5zaCBiL2dpdC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWJjNWM1ZgotLS0gL2Rldi9udWxsCisrKyBiL2dpdC1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSwxMjkwIEBACisjIS9iaW4vc2gKKyMKKyMgZ2l0LXN1Ym1vZHVsZS5zaDogYWRkLCBpbml0LCB1cGRhdGUgb3IgbGlzdCBnaXQgc3VibW9kdWxlcworIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTGFycyBIamVtbGkKKworZGFzaGxlc3M9JChiYXNlbmFtZSAiJDAiIHwgc2VkIC1lICdzLy0vIC8nKQorVVNBR0U9IlstLXF1aWV0XSBhZGQgWy1iIDxicmFuY2g+XSBbLWZ8LS1mb3JjZV0gWy0tbmFtZSA8bmFtZT5dIFstLXJlZmVyZW5jZSA8cmVwb3NpdG9yeT5dIFstLV0gPHJlcG9zaXRvcnk+IFs8cGF0aD5dCisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBzdGF0dXMgWy0tY2FjaGVkXSBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIGluaXQgWy0tXSBbPHBhdGg+Li4uXQorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gZGVpbml0IFstZnwtLWZvcmNlXSBbLS1dIDxwYXRoPi4uLgorICAgb3I6ICRkYXNobGVzcyBbLS1xdWlldF0gdXBkYXRlIFstLWluaXRdIFstLXJlbW90ZV0gWy1OfC0tbm8tZmV0Y2hdIFstZnwtLWZvcmNlXSBbLS1jaGVja291dHwtLW1lcmdlfC0tcmViYXNlXSBbLS1yZWZlcmVuY2UgPHJlcG9zaXRvcnk+XSBbLS1yZWN1cnNpdmVdIFstLV0gWzxwYXRoPi4uLl0KKyAgIG9yOiAkZGFzaGxlc3MgWy0tcXVpZXRdIHN1bW1hcnkgWy0tY2FjaGVkfC0tZmlsZXNdIFstLXN1bW1hcnktbGltaXQgPG4+XSBbY29tbWl0XSBbLS1dIFs8cGF0aD4uLi5dCisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBmb3JlYWNoIFstLXJlY3Vyc2l2ZV0gPGNvbW1hbmQ+CisgICBvcjogJGRhc2hsZXNzIFstLXF1aWV0XSBzeW5jIFstLXJlY3Vyc2l2ZV0gWy0tXSBbPHBhdGg+Li4uXSIKK09QVElPTlNfU1BFQz0KK1NVQkRJUkVDVE9SWV9PSz1ZZXMKKy4gZ2l0LXNoLXNldHVwCisuIGdpdC1zaC1pMThuCisuIGdpdC1wYXJzZS1yZW1vdGUKK3JlcXVpcmVfd29ya190cmVlCit3dF9wcmVmaXg9JChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgpCitjZF90b190b3BsZXZlbAorCisjIFJlc3RyaWN0IG91cnNlbHZlcyB0byBhIHZhbmlsbGEgc3Vic2V0IG9mIHByb3RvY29sczsgdGhlIFVSTHMKKyMgd2UgZ2V0IGFyZSB1bmRlciBjb250cm9sIG9mIGEgcmVtb3RlIHJlcG9zaXRvcnksIGFuZCB3ZSBkbyBub3QKKyMgd2FudCB0aGVtIGtpY2tpbmcgb2ZmIGFyYml0cmFyeSBnaXQtcmVtb3RlLSogcHJvZ3JhbXMuCisjCisjIElmIHRoZSB1c2VyIGhhcyBhbHJlYWR5IHNwZWNpZmllZCBhIHNldCBvZiBhbGxvd2VkIHByb3RvY29scywKKyMgd2UgYXNzdW1lIHRoZXkga25vdyB3aGF0IHRoZXkncmUgZG9pbmcgYW5kIHVzZSB0aGF0IGluc3RlYWQuCis6ICR7R0lUX0FMTE9XX1BST1RPQ09MPWZpbGU6Z2l0Omh0dHA6aHR0cHM6c3NofQorZXhwb3J0IEdJVF9BTExPV19QUk9UT0NPTAorCitjb21tYW5kPQorYnJhbmNoPQorZm9yY2U9CityZWZlcmVuY2U9CitjYWNoZWQ9CityZWN1cnNpdmU9Citpbml0PQorZmlsZXM9CityZW1vdGU9Citub2ZldGNoPQordXBkYXRlPQorcHJlZml4PQorY3VzdG9tX25hbWU9CitkZXB0aD0KKworIyBUaGUgZnVuY3Rpb24gdGFrZXMgYXQgbW9zdCAyIGFyZ3VtZW50cy4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZQorIyBVUkwgdGhhdCBuYXZpZ2F0ZXMgdG8gdGhlIHN1Ym1vZHVsZSBvcmlnaW4gcmVwby4gV2hlbiByZWxhdGl2ZSwgdGhpcyBVUkwKKyMgaXMgcmVsYXRpdmUgdG8gdGhlIHN1cGVycHJvamVjdCBvcmlnaW4gVVJMIHJlcG8uIFRoZSBzZWNvbmQgdXBfcGF0aAorIyBhcmd1bWVudCwgaWYgc3BlY2lmaWVkLCBpcyB0aGUgcmVsYXRpdmUgcGF0aCB0aGF0IG5hdmlnYXRlcworIyBmcm9tIHRoZSBzdWJtb2R1bGUgd29ya2luZyB0cmVlIHRvIHRoZSBzdXBlcnByb2plY3Qgd29ya2luZyB0cmVlLgorIworIyBUaGUgb3V0cHV0IG9mIHRoZSBmdW5jdGlvbiBpcyB0aGUgb3JpZ2luIFVSTCBvZiB0aGUgc3VibW9kdWxlLgorIworIyBUaGUgb3V0cHV0IHdpbGwgZWl0aGVyIGJlIGFuIGFic29sdXRlIFVSTCBvciBmaWxlc3lzdGVtIHBhdGggKGlmIHRoZQorIyBzdXBlcnByb2plY3Qgb3JpZ2luIFVSTCBpcyBhbiBhYnNvbHV0ZSBVUkwgb3IgZmlsZXN5c3RlbSBwYXRoLAorIyByZXNwZWN0aXZlbHkpIG9yIGEgcmVsYXRpdmUgZmlsZSBzeXN0ZW0gcGF0aCAoaWYgdGhlIHN1cGVycHJvamVjdAorIyBvcmlnaW4gVVJMIGlzIGEgcmVsYXRpdmUgZmlsZSBzeXN0ZW0gcGF0aCkuCisjCisjIFdoZW4gdGhlIG91dHB1dCBpcyBhIHJlbGF0aXZlIGZpbGUgc3lzdGVtIHBhdGgsIHRoZSBwYXRoIGlzIGVpdGhlcgorIyByZWxhdGl2ZSB0byB0aGUgc3VibW9kdWxlIHdvcmtpbmcgdHJlZSwgaWYgdXBfcGF0aCBpcyBzcGVjaWZpZWQsIG9yIHRvCisjIHRoZSBzdXBlcnByb2plY3Qgd29ya2luZyB0cmVlIG90aGVyd2lzZS4KK3Jlc29sdmVfcmVsYXRpdmVfdXJsICgpCit7CisJcmVtb3RlPSQoZ2V0X2RlZmF1bHRfcmVtb3RlKQorCXJlbW90ZXVybD0kKGdpdCBjb25maWcgInJlbW90ZS4kcmVtb3RlLnVybCIpIHx8CisJCXJlbW90ZXVybD0kKHB3ZCkgIyB0aGUgcmVwb3NpdG9yeSBpcyBpdHMgb3duIGF1dGhvcml0YXRpdmUgdXBzdHJlYW0KKwl1cmw9IiQxIgorCXJlbW90ZXVybD0ke3JlbW90ZXVybCUvfQorCXNlcD0vCisJdXBfcGF0aD0iJDIiCisKKwljYXNlICIkcmVtb3RldXJsIiBpbgorCSo6KnwvKikKKwkJaXNfcmVsYXRpdmU9CisJCTs7CisJLi8qfC4uLyopCisJCWlzX3JlbGF0aXZlPXQKKwkJOzsKKwkqKQorCQlpc19yZWxhdGl2ZT10CisJCXJlbW90ZXVybD0iLi8kcmVtb3RldXJsIgorCQk7OworCWVzYWMKKworCXdoaWxlIHRlc3QgLW4gIiR1cmwiCisJZG8KKwkJY2FzZSAiJHVybCIgaW4KKwkJLi4vKikKKwkJCXVybD0iJHt1cmwjLi4vfSIKKwkJCWNhc2UgIiRyZW1vdGV1cmwiIGluCisJCQkqLyopCisJCQkJcmVtb3RldXJsPSIke3JlbW90ZXVybCUvKn0iCisJCQkJOzsKKwkJCSo6KikKKwkJCQlyZW1vdGV1cmw9IiR7cmVtb3RldXJsJToqfSIKKwkJCQlzZXA9OgorCQkJCTs7CisJCQkqKQorCQkJCWlmIHRlc3QgLXogIiRpc19yZWxhdGl2ZSIgfHwgdGVzdCAiLiIgPSAiJHJlbW90ZXVybCIKKwkJCQl0aGVuCisJCQkJCWRpZSAiJChldmFsX2dldHRleHQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJ1wkcmVtb3RldXJsJyIpIgorCQkJCWVsc2UKKwkJCQkJcmVtb3RldXJsPS4KKwkJCQlmaQorCQkJCTs7CisJCQllc2FjCisJCQk7OworCQkuLyopCisJCQl1cmw9IiR7dXJsIy4vfSIKKwkJCTs7CisJCSopCisJCQlicmVhazs7CisJCWVzYWMKKwlkb25lCisJcmVtb3RldXJsPSIkcmVtb3RldXJsJHNlcCR7dXJsJS99IgorCWVjaG8gIiR7aXNfcmVsYXRpdmU6KyR7dXBfcGF0aH19JHtyZW1vdGV1cmwjLi99IgorfQorCisjIFJlc29sdmUgYSBwYXRoIHRvIGJlIHJlbGF0aXZlIHRvIGFub3RoZXIgcGF0aC4gIFRoaXMgaXMgaW50ZW5kZWQgZm9yCisjIGNvbnZlcnRpbmcgc3VibW9kdWxlIHBhdGhzIHdoZW4gZ2l0LXN1Ym1vZHVsZSBpcyBydW4gaW4gYSBzdWJkaXJlY3RvcnkKKyMgYW5kIG9ubHkgaGFuZGxlcyBwYXRocyB3aGVyZSB0aGUgZGlyZWN0b3J5IHNlcGFyYXRvciBpcyAnLycuCisjCisjIFRoZSBvdXRwdXQgaXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgc2Vjb25kIGFyZ3VtZW50LAorIyB3aGljaCBkZWZhdWx0cyB0byAkd3RfcHJlZml4IGlmIGl0IGlzIG9taXR0ZWQuCityZWxhdGl2ZV9wYXRoICgpCit7CisJbG9jYWwgdGFyZ2V0IGN1cmRpciByZXN1bHQKKwl0YXJnZXQ9JDEKKwljdXJkaXI9JHsyLSR3dF9wcmVmaXh9CisJY3VyZGlyPSR7Y3VyZGlyJS99CisJcmVzdWx0PQorCisJd2hpbGUgdGVzdCAtbiAiJGN1cmRpciIKKwlkbworCQljYXNlICIkdGFyZ2V0IiBpbgorCQkiJGN1cmRpci8iKikKKwkJCXRhcmdldD0ke3RhcmdldCMiJGN1cmRpciIvfQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKworCQlyZXN1bHQ9IiR7cmVzdWx0fS4uLyIKKwkJaWYgdGVzdCAiJGN1cmRpciIgPSAiJHtjdXJkaXIlLyp9IgorCQl0aGVuCisJCQljdXJkaXI9CisJCWVsc2UKKwkJCWN1cmRpcj0iJHtjdXJkaXIlLyp9IgorCQlmaQorCWRvbmUKKworCWVjaG8gIiRyZXN1bHQkdGFyZ2V0IgorfQorCitkaWVfaWZfdW5tYXRjaGVkICgpCit7CisJaWYgdGVzdCAiJDEiID0gIiN1bm1hdGNoZWQiCisJdGhlbgorCQlleGl0IDEKKwlmaQorfQorCisjCisjIFByaW50IGEgc3VibW9kdWxlIGNvbmZpZ3VyYXRpb24gc2V0dGluZworIworIyAkMSA9IHN1Ym1vZHVsZSBuYW1lCisjICQyID0gb3B0aW9uIG5hbWUKKyMgJDMgPSBkZWZhdWx0IHZhbHVlCisjCisjIENoZWNrcyBpbiB0aGUgdXN1YWwgZ2l0LWNvbmZpZyBwbGFjZXMgZmlyc3QgKGZvciBvdmVycmlkZXMpLAorIyBvdGhlcndpc2UgaXQgZmFsbHMgYmFjayBvbiAuZ2l0bW9kdWxlcy4gIFRoaXMgYWxsb3dzIHlvdSB0bworIyBkaXN0cmlidXRlIHByb2plY3Qtd2lkZSBkZWZhdWx0cyBpbiAuZ2l0bW9kdWxlcywgd2hpbGUgc3RpbGwKKyMgY3VzdG9taXppbmcgaW5kaXZpZHVhbCByZXBvc2l0b3JpZXMgaWYgbmVjZXNzYXJ5LiAgSWYgdGhlIG9wdGlvbiBpcworIyBub3QgaW4gLmdpdG1vZHVsZXMgZWl0aGVyLCBwcmludCBhIGRlZmF1bHQgdmFsdWUuCisjCitnZXRfc3VibW9kdWxlX2NvbmZpZyAoKSB7CisJbmFtZT0iJDEiCisJb3B0aW9uPSIkMiIKKwlkZWZhdWx0PSIkMyIKKwl2YWx1ZT0kKGdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIuIiRvcHRpb24iKQorCWlmIHRlc3QgLXogIiR2YWx1ZSIKKwl0aGVuCisJCXZhbHVlPSQoZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuIiRuYW1lIi4iJG9wdGlvbiIpCisJZmkKKwlwcmludGYgJyVzJyAiJHt2YWx1ZTotJGRlZmF1bHR9IgorfQorCitpc251bWJlcigpCit7CisJbj0kKCgkMSArIDApKSAyPi9kZXYvbnVsbCAmJiB0ZXN0ICIkbiIgPSAiJDEiCit9CisKKyMKKyMgQWRkIGEgbmV3IHN1Ym1vZHVsZSB0byB0aGUgd29ya2luZyB0cmVlLCAuZ2l0bW9kdWxlcyBhbmQgdGhlIGluZGV4CisjCisjICRAID0gcmVwbyBwYXRoCisjCisjIG9wdGlvbmFsIGJyYW5jaCBpcyBzdG9yZWQgaW4gZ2xvYmFsIGJyYW5jaCB2YXJpYWJsZQorIworY21kX2FkZCgpCit7CisJIyBwYXJzZSAkYXJncyBhZnRlciAic3VibW9kdWxlIC4uLiBhZGQiLgorCXJlZmVyZW5jZV9wYXRoPQorCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLWIgfCAtLWJyYW5jaCkKKwkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYworCQkJYnJhbmNoPSQyCisJCQlzaGlmdAorCQkJOzsKKwkJLWYgfCAtLWZvcmNlKQorCQkJZm9yY2U9JDEKKwkJCTs7CisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9MQorCQkJOzsKKwkJLS1yZWZlcmVuY2UpCisJCQljYXNlICIkMiIgaW4gJycpIHVzYWdlIDs7IGVzYWMKKwkJCXJlZmVyZW5jZV9wYXRoPSQyCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yZWZlcmVuY2U9KikKKwkJCXJlZmVyZW5jZV9wYXRoPSIkezEjLS1yZWZlcmVuY2U9fSIKKwkJCTs7CisJCS0tbmFtZSkKKwkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYworCQkJY3VzdG9tX25hbWU9JDIKKwkJCXNoaWZ0CisJCQk7OworCQktLWRlcHRoKQorCQkJY2FzZSAiJDIiIGluICcnKSB1c2FnZSA7OyBlc2FjCisJCQlkZXB0aD0iLS1kZXB0aD0kMiIKKwkJCXNoaWZ0CisJCQk7OworCQktLWRlcHRoPSopCisJCQlkZXB0aD0kMQorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWlmIHRlc3QgLW4gIiRyZWZlcmVuY2VfcGF0aCIKKwl0aGVuCisJCWlzX2Fic29sdXRlX3BhdGggIiRyZWZlcmVuY2VfcGF0aCIgfHwKKwkJcmVmZXJlbmNlX3BhdGg9IiR3dF9wcmVmaXgkcmVmZXJlbmNlX3BhdGgiCisKKwkJcmVmZXJlbmNlPSItLXJlZmVyZW5jZT0kcmVmZXJlbmNlX3BhdGgiCisJZmkKKworCXJlcG89JDEKKwlzbV9wYXRoPSQyCisKKwlpZiB0ZXN0IC16ICIkc21fcGF0aCI7IHRoZW4KKwkJc21fcGF0aD0kKHByaW50ZiAnJXNcbicgIiRyZXBvIiB8CisJCQlzZWQgLWUgJ3N8LyR8fCcgLWUgJ3N8OiovKlwuZ2l0JHx8JyAtZSAnc3wuKlsvOl18fGcnKQorCWZpCisKKwlpZiB0ZXN0IC16ICIkcmVwbyIgfHwgdGVzdCAteiAiJHNtX3BhdGgiOyB0aGVuCisJCXVzYWdlCisJZmkKKworCWlzX2Fic29sdXRlX3BhdGggIiRzbV9wYXRoIiB8fCBzbV9wYXRoPSIkd3RfcHJlZml4JHNtX3BhdGgiCisKKwkjIGFzc3VyZSByZXBvIGlzIGFic29sdXRlIG9yIHJlbGF0aXZlIHRvIHBhcmVudAorCWNhc2UgIiRyZXBvIiBpbgorCS4vKnwuLi8qKQorCQl0ZXN0IC16ICIkd3RfcHJlZml4IiB8fAorCQlkaWUgIiQoZ2V0dGV4dCAiUmVsYXRpdmUgcGF0aCBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIHRvcGxldmVsIG9mIHRoZSB3b3JraW5nIHRyZWUiKSIKKworCQkjIGRlcmVmZXJlbmNlIHNvdXJjZSB1cmwgcmVsYXRpdmUgdG8gcGFyZW50J3MgdXJsCisJCXJlYWxyZXBvPSQocmVzb2x2ZV9yZWxhdGl2ZV91cmwgIiRyZXBvIikgfHwgZXhpdAorCQk7OworCSo6KnwvKikKKwkJIyBhYnNvbHV0ZSB1cmwKKwkJcmVhbHJlcG89JHJlcG8KKwkJOzsKKwkqKQorCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJyZXBvIFVSTDogJ1wkcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIpIgorCTs7CisJZXNhYworCisJIyBub3JtYWxpemUgcGF0aDoKKwkjIG11bHRpcGxlIC8vOyBsZWFkaW5nIC4vOyAvLi87IC8uLi87IHRyYWlsaW5nIC8KKwlzbV9wYXRoPSQocHJpbnRmICclcy9cbicgIiRzbV9wYXRoIiB8CisJCXNlZCAtZSAnCisJCQlzfC8vKnwvfGcKKwkJCXN8XlwoXC4vXCkqfHwKKwkJCXN8L1woXC4vXCkqfC98ZworCQkJOnN0YXJ0CisJCQlzfFwoW14vXSpcKS9cLlwuL3x8CisJCQl0c3RhcnQKKwkJCXN8LyokfHwKKwkJJykKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoICIkc21fcGF0aCIgPiAvZGV2L251bGwgMj4mMSAmJgorCWRpZSAiJChldmFsX2dldHRleHQgIidcJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIpIgorCisJaWYgdGVzdCAteiAiJGZvcmNlIiAmJiAhIGdpdCBhZGQgLS1kcnktcnVuIC0taWdub3JlLW1pc3NpbmcgIiRzbV9wYXRoIiA+IC9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQlldmFsX2dldHRleHRsbiAiVGhlIGZvbGxvd2luZyBwYXRoIGlzIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczoKK1wkc21fcGF0aAorVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIiA+JjIKKwkJZXhpdCAxCisJZmkKKworCWlmIHRlc3QgLW4gIiRjdXN0b21fbmFtZSIKKwl0aGVuCisJCXNtX25hbWU9IiRjdXN0b21fbmFtZSIKKwllbHNlCisJCXNtX25hbWU9IiRzbV9wYXRoIgorCWZpCisKKwkjIHBlcmhhcHMgdGhlIHBhdGggZXhpc3RzIGFuZCBpcyBhbHJlYWR5IGEgZ2l0IHJlcG8sIGVsc2UgY2xvbmUgaXQKKwlpZiB0ZXN0IC1lICIkc21fcGF0aCIKKwl0aGVuCisJCWlmIHRlc3QgLWQgIiRzbV9wYXRoIi8uZ2l0IHx8IHRlc3QgLWYgIiRzbV9wYXRoIi8uZ2l0CisJCXRoZW4KKwkJCWV2YWxfZ2V0dGV4dGxuICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnXCRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCisJCWVsc2UKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIidcJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYSB2YWxpZCBnaXQgcmVwbyIpIgorCQlmaQorCisJZWxzZQorCQlpZiB0ZXN0IC1kICIuZ2l0L21vZHVsZXMvJHNtX25hbWUiCisJCXRoZW4KKwkJCWlmIHRlc3QgLXogIiRmb3JjZSIKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiJChldmFsX2dldHRleHQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJ1wkc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiKSIKKwkJCQlHSVRfRElSPSIuZ2l0L21vZHVsZXMvJHNtX25hbWUiIEdJVF9XT1JLX1RSRUU9LiBnaXQgcmVtb3RlIC12IHwgZ3JlcCAnKGZldGNoKScgfCBzZWQgLWUgcyxeLCIgICIsIC1lIHMsJyAoZmV0Y2gpJywsID4mMgorCQkJCWVjaG8gPiYyICIkKGV2YWxfZ2V0dGV4dCAiSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiBmcm9tIikiCisJCQkJZWNobyA+JjIgIiAgJHJlYWxyZXBvIgorCQkJCWVjaG8gPiYyICIkKGV2YWxfZ2V0dGV4dCAidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgcmVwbyIpIgorCQkJCWRpZSAiJChldmFsX2dldHRleHQgIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnIG9wdGlvbi4iKSIKKwkJCWVsc2UKKwkJCQllY2hvICIkKGV2YWxfZ2V0dGV4dCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnXCRzbV9uYW1lJy4iKSIKKwkJCWZpCisJCWZpCisJCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBjbG9uZSAke0dJVF9RVUlFVDorLS1xdWlldH0gLS1wcmVmaXggIiR3dF9wcmVmaXgiIC0tcGF0aCAiJHNtX3BhdGgiIC0tbmFtZSAiJHNtX25hbWUiIC0tdXJsICIkcmVhbHJlcG8iICIkcmVmZXJlbmNlIiAiJGRlcHRoIiB8fCBleGl0CisJCSgKKwkJCWNsZWFyX2xvY2FsX2dpdF9lbnYKKwkJCWNkICIkc21fcGF0aCIgJiYKKwkJCSMgYXNoIGZhaWxzIHRvIHdvcmRzcGxpdCAke2JyYW5jaDorLWIgIiRicmFuY2giLi4ufQorCQkJY2FzZSAiJGJyYW5jaCIgaW4KKwkJCScnKSBnaXQgY2hlY2tvdXQgLWYgLXEgOzsKKwkJCT8qKSBnaXQgY2hlY2tvdXQgLWYgLXEgLUIgIiRicmFuY2giICJvcmlnaW4vJGJyYW5jaCIgOzsKKwkJCWVzYWMKKwkJKSB8fCBkaWUgIiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICdcJHNtX3BhdGgnIikiCisJZmkKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJHNtX25hbWUiLnVybCAiJHJlYWxyZXBvIgorCisJZ2l0IGFkZCAkZm9yY2UgIiRzbV9wYXRoIiB8fAorCWRpZSAiJChldmFsX2dldHRleHQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICdcJHNtX3BhdGgnIikiCisKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS4iJHNtX25hbWUiLnBhdGggIiRzbV9wYXRoIiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLiIkc21fbmFtZSIudXJsICIkcmVwbyIgJiYKKwlpZiB0ZXN0IC1uICIkYnJhbmNoIgorCXRoZW4KKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuIiRzbV9uYW1lIi5icmFuY2ggIiRicmFuY2giCisJZmkgJiYKKwlnaXQgYWRkIC0tZm9yY2UgLmdpdG1vZHVsZXMgfHwKKwlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICdcJHNtX3BhdGgnIikiCit9CisKKyMKKyMgRXhlY3V0ZSBhbiBhcmJpdHJhcnkgY29tbWFuZCBzZXF1ZW5jZSBpbiBlYWNoIGNoZWNrZWQgb3V0CisjIHN1Ym1vZHVsZQorIworIyAkQCA9IGNvbW1hbmQgdG8gZXhlY3V0ZQorIworY21kX2ZvcmVhY2goKQoreworCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gZm9yZWFjaCIuCisJd2hpbGUgdGVzdCAkIyAtbmUgMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPTEKKwkJCTs7CisJCS0tcmVjdXJzaXZlKQorCQkJcmVjdXJzaXZlPTEKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCXRvcGxldmVsPSQocHdkKQorCisJIyBkdXAgc3RkaW4gc28gdGhhdCBpdCBjYW4gYmUgcmVzdG9yZWQgd2hlbiBydW5uaW5nIHRoZSBleHRlcm5hbAorCSMgY29tbWFuZCBpbiB0aGUgc3Vic2hlbGwgKGFuZCBhIHJlY3Vyc2l2ZSBjYWxsIHRvIHRoaXMgZnVuY3Rpb24pCisJZXhlYyAzPCYwCisKKwlnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCAtLXByZWZpeCAiJHd0X3ByZWZpeCJ8CisJd2hpbGUgcmVhZCBtb2RlIHNoYTEgc3RhZ2Ugc21fcGF0aAorCWRvCisJCWRpZV9pZl91bm1hdGNoZWQgIiRtb2RlIgorCQlpZiB0ZXN0IC1lICIkc21fcGF0aCIvLmdpdAorCQl0aGVuCisJCQlkaXNwbGF5cGF0aD0kKHJlbGF0aXZlX3BhdGggIiRzbV9wYXRoIikKKwkJCXNheSAiJChldmFsX2dldHRleHQgIkVudGVyaW5nICdcJHByZWZpeFwkZGlzcGxheXBhdGgnIikiCisJCQluYW1lPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgIiRzbV9wYXRoIikKKwkJCSgKKwkJCQlwcmVmaXg9IiRwcmVmaXgkc21fcGF0aC8iCisJCQkJY2xlYXJfbG9jYWxfZ2l0X2VudgorCQkJCWNkICIkc21fcGF0aCIgJiYKKwkJCQlzbV9wYXRoPSQocmVsYXRpdmVfcGF0aCAiJHNtX3BhdGgiKSAmJgorCQkJCSMgd2UgbWFrZSAkcGF0aCBhdmFpbGFibGUgdG8gc2NyaXB0cyAuLi4KKwkJCQlwYXRoPSRzbV9wYXRoICYmCisJCQkJaWYgdGVzdCAkIyAtZXEgMQorCQkJCXRoZW4KKwkJCQkJZXZhbCAiJDEiCisJCQkJZWxzZQorCQkJCQkiJEAiCisJCQkJZmkgJiYKKwkJCQlpZiB0ZXN0IC1uICIkcmVjdXJzaXZlIgorCQkJCXRoZW4KKwkJCQkJY21kX2ZvcmVhY2ggIi0tcmVjdXJzaXZlIiAiJEAiCisJCQkJZmkKKwkJCSkgPCYzIDM8Ji0gfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlN0b3BwaW5nIGF0ICdcJHByZWZpeFwkZGlzcGxheXBhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIpIgorCQlmaQorCWRvbmUKK30KKworIworIyBSZWdpc3RlciBzdWJtb2R1bGVzIGluIC5naXQvY29uZmlnCisjCisjICRAID0gcmVxdWVzdGVkIHBhdGhzIChkZWZhdWx0IHRvIGFsbCkKKyMKK2NtZF9pbml0KCkKK3sKKwkjIHBhcnNlICRhcmdzIGFmdGVyICJzdWJtb2R1bGUgLi4uIGluaXQiLgorCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgLS1wcmVmaXggIiR3dF9wcmVmaXgiICIkQCIgfAorCXdoaWxlIHJlYWQgbW9kZSBzaGExIHN0YWdlIHNtX3BhdGgKKwlkbworCQlkaWVfaWZfdW5tYXRjaGVkICIkbW9kZSIKKwkJbmFtZT0kKGdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lICIkc21fcGF0aCIpIHx8IGV4aXQKKworCQlkaXNwbGF5cGF0aD0kKHJlbGF0aXZlX3BhdGggIiRzbV9wYXRoIikKKworCQkjIENvcHkgdXJsIHNldHRpbmcgd2hlbiBpdCBpcyBub3Qgc2V0IHlldAorCQlpZiB0ZXN0IC16ICIkKGdpdCBjb25maWcgInN1Ym1vZHVsZS4kbmFtZS51cmwiKSIKKwkJdGhlbgorCQkJdXJsPSQoZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuIiRuYW1lIi51cmwpCisJCQl0ZXN0IC16ICIkdXJsIiAmJgorCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCcgaW4gLmdpdG1vZHVsZXMiKSIKKworCQkJIyBQb3NzaWJseSBhIHVybCByZWxhdGl2ZSB0byBwYXJlbnQKKwkJCWNhc2UgIiR1cmwiIGluCisJCQkuLyp8Li4vKikKKwkJCQl1cmw9JChyZXNvbHZlX3JlbGF0aXZlX3VybCAiJHVybCIpIHx8IGV4aXQKKwkJCQk7OworCQkJZXNhYworCQkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cmwgIiR1cmwiIHx8CisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCciKSIKKworCQkJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiU3VibW9kdWxlICdcJG5hbWUnIChcJHVybCkgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnXCRkaXNwbGF5cGF0aCciKSIKKwkJZmkKKworCQkjIENvcHkgInVwZGF0ZSIgc2V0dGluZyB3aGVuIGl0IGlzIG5vdCBzZXQgeWV0CisJCWlmIHVwZD0iJChnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS4iJG5hbWUiLnVwZGF0ZSkiICYmCisJCSAgIHRlc3QgLW4gIiR1cGQiICYmCisJCSAgIHRlc3QgLXogIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cGRhdGUpIgorCQl0aGVuCisJCQljYXNlICIkdXBkIiBpbgorCQkJY2hlY2tvdXQgfCByZWJhc2UgfCBtZXJnZSB8IG5vbmUpCisJCQkJOzsgIyBrbm93biBtb2RlcyBvZiB1cGRhdGluZworCQkJKikKKwkJCQllY2hvID4mMiAid2FybmluZzogdW5rbm93biB1cGRhdGUgbW9kZSAnJHVwZCcgc3VnZ2VzdGVkIGZvciBzdWJtb2R1bGUgJyRuYW1lJyIKKwkJCQl1cGQ9bm9uZQorCQkJCTs7CisJCQllc2FjCisJCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVwZGF0ZSAiJHVwZCIgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCisJCWZpCisJZG9uZQorfQorCisjCisjIFVucmVnaXN0ZXIgc3VibW9kdWxlcyBmcm9tIC5naXQvY29uZmlnIGFuZCByZW1vdmUgdGhlaXIgd29yayB0cmVlCisjCisjICRAID0gcmVxdWVzdGVkIHBhdGhzICh1c2UgJy4nIHRvIGRlaW5pdCBhbGwgc3VibW9kdWxlcykKKyMKK2NtZF9kZWluaXQoKQoreworCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gZGVpbml0Ii4KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1mfC0tZm9yY2UpCisJCQlmb3JjZT0kMQorCQkJOzsKKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQk7OworCQktLSkKKwkJCXNoaWZ0CisJCQlicmVhaworCQkJOzsKKwkJLSopCisJCQl1c2FnZQorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZQorCisJaWYgdGVzdCAkIyA9IDAKKwl0aGVuCisJCWRpZSAiJChldmFsX2dldHRleHQgIlVzZSAnLicgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIpIgorCWZpCisKKwlnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCAtLXByZWZpeCAiJHd0X3ByZWZpeCIgIiRAIiB8CisJd2hpbGUgcmVhZCBtb2RlIHNoYTEgc3RhZ2Ugc21fcGF0aAorCWRvCisJCWRpZV9pZl91bm1hdGNoZWQgIiRtb2RlIgorCQluYW1lPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgIiRzbV9wYXRoIikgfHwgZXhpdAorCisJCWRpc3BsYXlwYXRoPSQocmVsYXRpdmVfcGF0aCAiJHNtX3BhdGgiKQorCisJCSMgUmVtb3ZlIHRoZSBzdWJtb2R1bGUgd29yayB0cmVlICh1bmxlc3MgdGhlIHVzZXIgYWxyZWFkeSBkaWQgaXQpCisJCWlmIHRlc3QgLWQgIiRzbV9wYXRoIgorCQl0aGVuCisJCQkjIFByb3RlY3Qgc3VibW9kdWxlcyBjb250YWluaW5nIGEgLmdpdCBkaXJlY3RvcnkKKwkJCWlmIHRlc3QgLWQgIiRzbV9wYXRoLy5naXQiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgd29yayB0cmVlICdcJGRpc3BsYXlwYXRoJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5IikiCisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiKHVzZSAncm0gLXJmJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIikiCisJCQlmaQorCisJCQlpZiB0ZXN0IC16ICIkZm9yY2UiCisJCQl0aGVuCisJCQkJZ2l0IHJtIC1xbiAiJHNtX3BhdGgiIHx8CisJCQkJZGllICIkKGV2YWxfZ2V0dGV4dCAiU3VibW9kdWxlIHdvcmsgdHJlZSAnXCRkaXNwbGF5cGF0aCcgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gZGlzY2FyZCB0aGVtIikiCisJCQlmaQorCQkJcm0gLXJmICIkc21fcGF0aCIgJiYKKwkJCXNheSAiJChldmFsX2dldHRleHQgIkNsZWFyZWQgZGlyZWN0b3J5ICdcJGRpc3BsYXlwYXRoJyIpIiB8fAorCQkJc2F5ICIkKGV2YWxfZ2V0dGV4dCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICdcJGRpc3BsYXlwYXRoJyIpIgorCQlmaQorCisJCW1rZGlyICIkc21fcGF0aCIgfHwgc2F5ICIkKGV2YWxfZ2V0dGV4dCAiQ291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICdcJGRpc3BsYXlwYXRoJyIpIgorCisJCSMgUmVtb3ZlIHRoZSAuZ2l0L2NvbmZpZyBlbnRyaWVzICh1bmxlc3MgdGhlIHVzZXIgYWxyZWFkeSBkaWQgaXQpCisJCWlmIHRlc3QgLW4gIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgc3VibW9kdWxlLiIkbmFtZVwuIikiCisJCXRoZW4KKwkJCSMgUmVtb3ZlIHRoZSB3aG9sZSBzZWN0aW9uIHNvIHdlIGhhdmUgYSBjbGVhbiBzdGF0ZSB3aGVuCisJCQkjIHRoZSB1c2VyIGxhdGVyIGRlY2lkZXMgdG8gaW5pdCB0aGlzIHN1Ym1vZHVsZSBhZ2FpbgorCQkJdXJsPSQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cmwpCisJCQlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLiIkbmFtZSIgMj4vZGV2L251bGwgJiYKKwkJCXNheSAiJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSAnXCRuYW1lJyAoXCR1cmwpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnXCRkaXNwbGF5cGF0aCciKSIKKwkJZmkKKwlkb25lCit9CisKKyMKKyMgVXBkYXRlIGVhY2ggc3VibW9kdWxlIHBhdGggdG8gY29ycmVjdCByZXZpc2lvbiwgdXNpbmcgY2xvbmUgYW5kIGNoZWNrb3V0IGFzIG5lZWRlZAorIworIyAkQCA9IHJlcXVlc3RlZCBwYXRocyAoZGVmYXVsdCB0byBhbGwpCisjCitjbWRfdXBkYXRlKCkKK3sKKwkjIHBhcnNlICRhcmdzIGFmdGVyICJzdWJtb2R1bGUgLi4uIHVwZGF0ZSIuCisJd2hpbGUgdGVzdCAkIyAtbmUgMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktcXwtLXF1aWV0KQorCQkJR0lUX1FVSUVUPTEKKwkJCTs7CisJCS1pfC0taW5pdCkKKwkJCWluaXQ9MQorCQkJOzsKKwkJLS1yZW1vdGUpCisJCQlyZW1vdGU9MQorCQkJOzsKKwkJLU58LS1uby1mZXRjaCkKKwkJCW5vZmV0Y2g9MQorCQkJOzsKKwkJLWZ8LS1mb3JjZSkKKwkJCWZvcmNlPSQxCisJCQk7OworCQktcnwtLXJlYmFzZSkKKwkJCXVwZGF0ZT0icmViYXNlIgorCQkJOzsKKwkJLS1yZWZlcmVuY2UpCisJCQljYXNlICIkMiIgaW4gJycpIHVzYWdlIDs7IGVzYWMKKwkJCXJlZmVyZW5jZT0iLS1yZWZlcmVuY2U9JDIiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yZWZlcmVuY2U9KikKKwkJCXJlZmVyZW5jZT0iJDEiCisJCQk7OworCQktbXwtLW1lcmdlKQorCQkJdXBkYXRlPSJtZXJnZSIKKwkJCTs7CisJCS0tcmVjdXJzaXZlKQorCQkJcmVjdXJzaXZlPTEKKwkJCTs7CisJCS0tY2hlY2tvdXQpCisJCQl1cGRhdGU9ImNoZWNrb3V0IgorCQkJOzsKKwkJLS1kZXB0aCkKKwkJCWNhc2UgIiQyIiBpbiAnJykgdXNhZ2UgOzsgZXNhYworCQkJZGVwdGg9Ii0tZGVwdGg9JDIiCisJCQlzaGlmdAorCQkJOzsKKwkJLS1kZXB0aD0qKQorCQkJZGVwdGg9JDEKKwkJCTs7CisJCS0tKQorCQkJc2hpZnQKKwkJCWJyZWFrCisJCQk7OworCQktKikKKwkJCXVzYWdlCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCisKKwlpZiB0ZXN0IC1uICIkaW5pdCIKKwl0aGVuCisJCWNtZF9pbml0ICItLSIgIiRAIiB8fCByZXR1cm4KKwlmaQorCisJY2xvbmVkX21vZHVsZXM9CisJZ2l0IHN1Ym1vZHVsZS0taGVscGVyIGxpc3QgLS1wcmVmaXggIiR3dF9wcmVmaXgiICIkQCIgfCB7CisJZXJyPQorCXdoaWxlIHJlYWQgbW9kZSBzaGExIHN0YWdlIHNtX3BhdGgKKwlkbworCQlkaWVfaWZfdW5tYXRjaGVkICIkbW9kZSIKKwkJaWYgdGVzdCAiJHN0YWdlIiA9IFUKKwkJdGhlbgorCQkJZWNobyA+JjIgIlNraXBwaW5nIHVubWVyZ2VkIHN1Ym1vZHVsZSAkcHJlZml4JHNtX3BhdGgiCisJCQljb250aW51ZQorCQlmaQorCQluYW1lPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgIiRzbV9wYXRoIikgfHwgZXhpdAorCQl1cmw9JChnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCkKKwkJYnJhbmNoPSQoZ2V0X3N1Ym1vZHVsZV9jb25maWcgIiRuYW1lIiBicmFuY2ggbWFzdGVyKQorCQlpZiAhIHRlc3QgLXogIiR1cGRhdGUiCisJCXRoZW4KKwkJCXVwZGF0ZV9tb2R1bGU9JHVwZGF0ZQorCQllbHNlCisJCQl1cGRhdGVfbW9kdWxlPSQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuIiRuYW1lIi51cGRhdGUpCisJCQlpZiB0ZXN0IC16ICIkdXBkYXRlX21vZHVsZSIKKwkJCXRoZW4KKwkJCQl1cGRhdGVfbW9kdWxlPSJjaGVja291dCIKKwkJCWZpCisJCWZpCisKKwkJZGlzcGxheXBhdGg9JChyZWxhdGl2ZV9wYXRoICIkcHJlZml4JHNtX3BhdGgiKQorCisJCWlmIHRlc3QgIiR1cGRhdGVfbW9kdWxlIiA9ICJub25lIgorCQl0aGVuCisJCQllY2hvICJTa2lwcGluZyBzdWJtb2R1bGUgJyRkaXNwbGF5cGF0aCciCisJCQljb250aW51ZQorCQlmaQorCisJCWlmIHRlc3QgLXogIiR1cmwiCisJCXRoZW4KKwkJCSMgT25seSBtZW50aW9uIHVuaW5pdGlhbGl6ZWQgc3VibW9kdWxlcyB3aGVuIGl0cworCQkJIyBwYXRoIGhhdmUgYmVlbiBzcGVjaWZpZWQKKwkJCXRlc3QgIiQjIiAhPSAiMCIgJiYKKwkJCXNheSAiJChldmFsX2dldHRleHQgIlN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyBub3QgaW5pdGlhbGl6ZWQKK01heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IikiCisJCQljb250aW51ZQorCQlmaQorCisJCWlmICEgdGVzdCAtZCAiJHNtX3BhdGgiLy5naXQgJiYgISB0ZXN0IC1mICIkc21fcGF0aCIvLmdpdAorCQl0aGVuCisJCQlnaXQgc3VibW9kdWxlLS1oZWxwZXIgY2xvbmUgJHtHSVRfUVVJRVQ6Ky0tcXVpZXR9IC0tcHJlZml4ICIkcHJlZml4IiAtLXBhdGggIiRzbV9wYXRoIiAtLW5hbWUgIiRuYW1lIiAtLXVybCAiJHVybCIgIiRyZWZlcmVuY2UiICIkZGVwdGgiIHx8IGV4aXQKKwkJCWNsb25lZF9tb2R1bGVzPSIkY2xvbmVkX21vZHVsZXM7JG5hbWUiCisJCQlzdWJzaGExPQorCQllbHNlCisJCQlzdWJzaGExPSQoY2xlYXJfbG9jYWxfZ2l0X2VudjsgY2QgIiRzbV9wYXRoIiAmJgorCQkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCisJCWZpCisKKwkJaWYgdGVzdCAtbiAiJHJlbW90ZSIKKwkJdGhlbgorCQkJaWYgdGVzdCAteiAiJG5vZmV0Y2giCisJCQl0aGVuCisJCQkJIyBGZXRjaCByZW1vdGUgYmVmb3JlIGRldGVybWluaW5nIHRyYWNraW5nICRzaGExCisJCQkJKGNsZWFyX2xvY2FsX2dpdF9lbnY7IGNkICIkc21fcGF0aCIgJiYgZ2l0LWZldGNoKSB8fAorCQkJCWRpZSAiJChldmFsX2dldHRleHQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnXCRzbV9wYXRoJyIpIgorCQkJZmkKKwkJCXJlbW90ZV9uYW1lPSQoY2xlYXJfbG9jYWxfZ2l0X2VudjsgY2QgIiRzbV9wYXRoIiAmJiBnZXRfZGVmYXVsdF9yZW1vdGUpCisJCQlzaGExPSQoY2xlYXJfbG9jYWxfZ2l0X2VudjsgY2QgIiRzbV9wYXRoIiAmJgorCQkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSIpIHx8CisJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gZmluZCBjdXJyZW50ICR7cmVtb3RlX25hbWV9LyR7YnJhbmNofSByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnXCRzbV9wYXRoJyIpIgorCQlmaQorCisJCWlmIHRlc3QgIiRzdWJzaGExIiAhPSAiJHNoYTEiIHx8IHRlc3QgLW4gIiRmb3JjZSIKKwkJdGhlbgorCQkJc3ViZm9yY2U9JGZvcmNlCisJCQkjIElmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhIC1mIGZsYWcgYW5kIHRoZSBzdWJtb2R1bGUgaGFzIG5ldmVyIGJlZW4gY2hlY2tlZCBvdXQKKwkJCWlmIHRlc3QgLXogIiRzdWJzaGExIiAmJiB0ZXN0IC16ICIkZm9yY2UiCisJCQl0aGVuCisJCQkJc3ViZm9yY2U9Ii1mIgorCQkJZmkKKworCQkJaWYgdGVzdCAteiAiJG5vZmV0Y2giCisJCQl0aGVuCisJCQkJIyBSdW4gZmV0Y2ggb25seSBpZiAkc2hhMSBpc24ndCBwcmVzZW50IG9yIGl0CisJCQkJIyBpcyBub3QgcmVhY2hhYmxlIGZyb20gYSByZWYuCisJCQkJKGNsZWFyX2xvY2FsX2dpdF9lbnY7IGNkICIkc21fcGF0aCIgJiYKKwkJCQkJKCAocmV2PSQoZ2l0IHJldi1saXN0IC1uIDEgJHNoYTEgLS1ub3QgLS1hbGwgMj4vZGV2L251bGwpICYmCisJCQkJCSB0ZXN0IC16ICIkcmV2IikgfHwgZ2l0LWZldGNoKSkgfHwKKwkJCQlkaWUgIiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJ1wkZGlzcGxheXBhdGgnIikiCisJCQlmaQorCisJCQkjIElzIHRoaXMgc29tZXRoaW5nIHdlIGp1c3QgY2xvbmVkPworCQkJY2FzZSAiOyRjbG9uZWRfbW9kdWxlczsiIGluCisJCQkqIjskbmFtZTsiKikKKwkJCQkjIHRoZW4gdGhlcmUgaXMgbm8gbG9jYWwgY2hhbmdlIHRvIGludGVncmF0ZQorCQkJCXVwZGF0ZV9tb2R1bGU9Y2hlY2tvdXQgOzsKKwkJCWVzYWMKKworCQkJbXVzdF9kaWVfb25fZmFpbHVyZT0KKwkJCWNhc2UgIiR1cGRhdGVfbW9kdWxlIiBpbgorCQkJY2hlY2tvdXQpCisJCQkJY29tbWFuZD0iZ2l0IGNoZWNrb3V0ICRzdWJmb3JjZSAtcSIKKwkJCQlkaWVfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIGNoZWNrb3V0ICdcJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyIpIgorCQkJCXNheV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCc6IGNoZWNrZWQgb3V0ICdcJHNoYTEnIikiCisJCQkJOzsKKwkJCXJlYmFzZSkKKwkJCQljb21tYW5kPSJnaXQgcmViYXNlIgorCQkJCWRpZV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJVbmFibGUgdG8gcmViYXNlICdcJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyIpIgorCQkJCXNheV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnXCRzaGExJyIpIgorCQkJCW11c3RfZGllX29uX2ZhaWx1cmU9eWVzCisJCQkJOzsKKwkJCW1lcmdlKQorCQkJCWNvbW1hbmQ9ImdpdCBtZXJnZSIKKwkJCQlkaWVfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiVW5hYmxlIHRvIG1lcmdlICdcJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICdcJGRpc3BsYXlwYXRoJyIpIgorCQkJCXNheV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnXCRzaGExJyIpIgorCQkJCW11c3RfZGllX29uX2ZhaWx1cmU9eWVzCisJCQkJOzsKKwkJCSEqKQorCQkJCWNvbW1hbmQ9IiR7dXBkYXRlX21vZHVsZSMhfSIKKwkJCQlkaWVfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiRXhlY3V0aW9uIG9mICdcJGNvbW1hbmQgXCRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJ1wkcHJlZml4XCRzbV9wYXRoJyIpIgorCQkJCXNheV9tc2c9IiQoZXZhbF9nZXR0ZXh0ICJTdWJtb2R1bGUgcGF0aCAnXCRwcmVmaXhcJHNtX3BhdGgnOiAnXCRjb21tYW5kIFwkc2hhMSciKSIKKwkJCQltdXN0X2RpZV9vbl9mYWlsdXJlPXllcworCQkJCTs7CisJCQkqKQorCQkJCWRpZSAiJChldmFsX2dldHRleHQgIkludmFsaWQgdXBkYXRlIG1vZGUgJyR1cGRhdGVfbW9kdWxlJyBmb3Igc3VibW9kdWxlICckbmFtZSciKSIKKwkJCWVzYWMKKworCQkJaWYgKGNsZWFyX2xvY2FsX2dpdF9lbnY7IGNkICIkc21fcGF0aCIgJiYgJGNvbW1hbmQgIiRzaGExIikKKwkJCXRoZW4KKwkJCQlzYXkgIiRzYXlfbXNnIgorCQkJZWxpZiB0ZXN0IC1uICIkbXVzdF9kaWVfb25fZmFpbHVyZSIKKwkJCXRoZW4KKwkJCQlkaWVfd2l0aF9zdGF0dXMgMiAiJGRpZV9tc2ciCisJCQllbHNlCisJCQkJZXJyPSIke2Vycn07JGRpZV9tc2ciCisJCQkJY29udGludWUKKwkJCWZpCisJCWZpCisKKwkJaWYgdGVzdCAtbiAiJHJlY3Vyc2l2ZSIKKwkJdGhlbgorCQkJKAorCQkJCXByZWZpeD0iJHByZWZpeCRzbV9wYXRoLyIKKwkJCQljbGVhcl9sb2NhbF9naXRfZW52CisJCQkJY2QgIiRzbV9wYXRoIiAmJgorCQkJCWV2YWwgY21kX3VwZGF0ZQorCQkJKQorCQkJcmVzPSQ/CisJCQlpZiB0ZXN0ICRyZXMgLWd0IDAKKwkJCXRoZW4KKwkJCQlkaWVfbXNnPSIkKGV2YWxfZ2V0dGV4dCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnXCRkaXNwbGF5cGF0aCciKSIKKwkJCQlpZiB0ZXN0ICRyZXMgLWVxIDEKKwkJCQl0aGVuCisJCQkJCWVycj0iJHtlcnJ9OyRkaWVfbXNnIgorCQkJCQljb250aW51ZQorCQkJCWVsc2UKKwkJCQkJZGllX3dpdGhfc3RhdHVzICRyZXMgIiRkaWVfbXNnIgorCQkJCWZpCisJCQlmaQorCQlmaQorCWRvbmUKKworCWlmIHRlc3QgLW4gIiRlcnIiCisJdGhlbgorCQlPSUZTPSRJRlMKKwkJSUZTPSc7JworCQlmb3IgZSBpbiAkZXJyCisJCWRvCisJCQlpZiB0ZXN0IC1uICIkZSIKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiJGUiCisJCQlmaQorCQlkb25lCisJCUlGUz0kT0lGUworCQlleGl0IDEKKwlmaQorCX0KK30KKworc2V0X25hbWVfcmV2ICgpIHsKKwlyZXZuYW1lPSQoICgKKwkJY2xlYXJfbG9jYWxfZ2l0X2VudgorCQljZCAiJDEiICYmIHsKKwkJCWdpdCBkZXNjcmliZSAiJDIiIDI+L2Rldi9udWxsIHx8CisJCQlnaXQgZGVzY3JpYmUgLS10YWdzICIkMiIgMj4vZGV2L251bGwgfHwKKwkJCWdpdCBkZXNjcmliZSAtLWNvbnRhaW5zICIkMiIgMj4vZGV2L251bGwgfHwKKwkJCWdpdCBkZXNjcmliZSAtLWFsbCAtLWFsd2F5cyAiJDIiCisJCX0KKwkpICkKKwl0ZXN0IC16ICIkcmV2bmFtZSIgfHwgcmV2bmFtZT0iICgkcmV2bmFtZSkiCit9CisjCisjIFNob3cgY29tbWl0IHN1bW1hcnkgZm9yIHN1Ym1vZHVsZXMgaW4gaW5kZXggb3Igd29ya2luZyB0cmVlCisjCisjIElmICctLWNhY2hlZCcgaXMgZ2l2ZW4sIHNob3cgc3VtbWFyeSBiZXR3ZWVuIGluZGV4IGFuZCBnaXZlbiBjb21taXQsCisjIG9yIGJldHdlZW4gd29ya2luZyB0cmVlIGFuZCBnaXZlbiBjb21taXQKKyMKKyMgJEAgPSBbY29tbWl0IChkZWZhdWx0ICdIRUFEJyksXSByZXF1ZXN0ZWQgcGF0aHMgKGRlZmF1bHQgYWxsKQorIworY21kX3N1bW1hcnkoKSB7CisJc3VtbWFyeV9saW1pdD0tMQorCWZvcl9zdGF0dXM9CisJZGlmZl9jbWQ9ZGlmZi1pbmRleAorCisJIyBwYXJzZSAkYXJncyBhZnRlciAic3VibW9kdWxlIC4uLiBzdW1tYXJ5Ii4KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS0tY2FjaGVkKQorCQkJY2FjaGVkPSIkMSIKKwkJCTs7CisJCS0tZmlsZXMpCisJCQlmaWxlcz0iJDEiCisJCQk7OworCQktLWZvci1zdGF0dXMpCisJCQlmb3Jfc3RhdHVzPSIkMSIKKwkJCTs7CisJCS1ufC0tc3VtbWFyeS1saW1pdCkKKwkJCXN1bW1hcnlfbGltaXQ9IiQyIgorCQkJaXNudW1iZXIgIiRzdW1tYXJ5X2xpbWl0IiB8fCB1c2FnZQorCQkJc2hpZnQKKwkJCTs7CisJCS0tc3VtbWFyeS1saW1pdD0qKQorCQkJc3VtbWFyeV9saW1pdD0iJHsxIy0tc3VtbWFyeS1saW1pdD19IgorCQkJaXNudW1iZXIgIiRzdW1tYXJ5X2xpbWl0IiB8fCB1c2FnZQorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCXRlc3QgJHN1bW1hcnlfbGltaXQgPSAwICYmIHJldHVybgorCisJaWYgcmV2PSQoZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSAtLWRlZmF1bHQgSEVBRCAkezErIiQxIn0pCisJdGhlbgorCQloZWFkPSRyZXYKKwkJdGVzdCAkIyA9IDAgfHwgc2hpZnQKKwllbGlmIHRlc3QgLXogIiQxIiB8fCB0ZXN0ICIkMSIgPSAiSEVBRCIKKwl0aGVuCisJCSMgYmVmb3JlIHRoZSBmaXJzdCBjb21taXQ6IGNvbXBhcmUgd2l0aCBhbiBlbXB0eSB0cmVlCisJCWhlYWQ9JChnaXQgaGFzaC1vYmplY3QgLXcgLXQgdHJlZSAtLXN0ZGluIDwvZGV2L251bGwpCisJCXRlc3QgLXogIiQxIiB8fCBzaGlmdAorCWVsc2UKKwkJaGVhZD0iSEVBRCIKKwlmaQorCisJaWYgWyAtbiAiJGZpbGVzIiBdCisJdGhlbgorCQl0ZXN0IC1uICIkY2FjaGVkIiAmJgorCQlkaWUgIiQoZ2V0dGV4dCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIpIgorCQlkaWZmX2NtZD1kaWZmLWZpbGVzCisJCWhlYWQ9CisJZmkKKworCWNkX3RvX3RvcGxldmVsCisJZXZhbCAic2V0ICQoZ2l0IHJldi1wYXJzZSAtLXNxIC0tcHJlZml4ICIkd3RfcHJlZml4IiAtLSAiJEAiKSIKKwkjIEdldCBtb2RpZmllZCBtb2R1bGVzIGNhcmVkIGJ5IHVzZXIKKwltb2R1bGVzPSQoZ2l0ICRkaWZmX2NtZCAkY2FjaGVkIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1yYXcgJGhlYWQgLS0gIiRAIiB8CisJCXNhbmVfZWdyZXAgJ146KFswLTddKiApPzE2MDAwMCcgfAorCQl3aGlsZSByZWFkIG1vZF9zcmMgbW9kX2RzdCBzaGExX3NyYyBzaGExX2RzdCBzdGF0dXMgc21fcGF0aAorCQlkbworCQkJIyBBbHdheXMgc2hvdyBtb2R1bGVzIGRlbGV0ZWQgb3IgdHlwZS1jaGFuZ2VkIChibG9iPC0+bW9kdWxlKQorCQkJaWYgdGVzdCAiJHN0YXR1cyIgPSBEIHx8IHRlc3QgIiRzdGF0dXMiID0gVAorCQkJdGhlbgorCQkJCXByaW50ZiAnJXNcbicgIiRzbV9wYXRoIgorCQkJCWNvbnRpbnVlCisJCQlmaQorCQkJIyBSZXNwZWN0IHRoZSBpZ25vcmUgc2V0dGluZyBmb3IgLS1mb3Itc3RhdHVzLgorCQkJaWYgdGVzdCAtbiAiJGZvcl9zdGF0dXMiCisJCQl0aGVuCisJCQkJbmFtZT0kKGdpdCBzdWJtb2R1bGUtLWhlbHBlciBuYW1lICIkc21fcGF0aCIpCisJCQkJaWdub3JlX2NvbmZpZz0kKGdldF9zdWJtb2R1bGVfY29uZmlnICIkbmFtZSIgaWdub3JlIG5vbmUpCisJCQkJdGVzdCAkc3RhdHVzICE9IEEgJiYgdGVzdCAkaWdub3JlX2NvbmZpZyA9IGFsbCAmJiBjb250aW51ZQorCQkJZmkKKwkJCSMgQWxzbyBzaG93IGFkZGVkIG9yIG1vZGlmaWVkIG1vZHVsZXMgd2hpY2ggYXJlIGNoZWNrZWQgb3V0CisJCQlHSVRfRElSPSIkc21fcGF0aC8uZ2l0IiBnaXQtcmV2LXBhcnNlIC0tZ2l0LWRpciA+L2Rldi9udWxsIDI+JjEgJiYKKwkJCXByaW50ZiAnJXNcbicgIiRzbV9wYXRoIgorCQlkb25lCisJKQorCisJdGVzdCAteiAiJG1vZHVsZXMiICYmIHJldHVybgorCisJZ2l0ICRkaWZmX2NtZCAkY2FjaGVkIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1yYXcgJGhlYWQgLS0gJG1vZHVsZXMgfAorCXNhbmVfZWdyZXAgJ146KFswLTddKiApPzE2MDAwMCcgfAorCWN1dCAtYzItIHwKKwl3aGlsZSByZWFkIG1vZF9zcmMgbW9kX2RzdCBzaGExX3NyYyBzaGExX2RzdCBzdGF0dXMgbmFtZQorCWRvCisJCWlmIHRlc3QgLXogIiRjYWNoZWQiICYmCisJCQl0ZXN0ICRzaGExX2RzdCA9IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKwkJdGhlbgorCQkJY2FzZSAiJG1vZF9kc3QiIGluCisJCQkxNjAwMDApCisJCQkJc2hhMV9kc3Q9JChHSVRfRElSPSIkbmFtZS8uZ2l0IiBnaXQgcmV2LXBhcnNlIEhFQUQpCisJCQkJOzsKKwkJCTEwMDY0NCB8IDEwMDc1NSB8IDEyMDAwMCkKKwkJCQlzaGExX2RzdD0kKGdpdCBoYXNoLW9iamVjdCAkbmFtZSkKKwkJCQk7OworCQkJMDAwMDAwKQorCQkJCTs7ICMgcmVtb3ZlZAorCQkJKikKKwkJCQkjIHVuZXhwZWN0ZWQgdHlwZQorCQkJCWV2YWxfZ2V0dGV4dGxuICJ1bmV4cGVjdGVkIG1vZGUgXCRtb2RfZHN0IiA+JjIKKwkJCQljb250aW51ZSA7OworCQkJZXNhYworCQlmaQorCQltaXNzaW5nX3NyYz0KKwkJbWlzc2luZ19kc3Q9CisKKwkJdGVzdCAkbW9kX3NyYyA9IDE2MDAwMCAmJgorCQkhIEdJVF9ESVI9IiRuYW1lLy5naXQiIGdpdC1yZXYtcGFyc2UgLXEgLS12ZXJpZnkgJHNoYTFfc3JjXjAgPi9kZXYvbnVsbCAmJgorCQltaXNzaW5nX3NyYz10CisKKwkJdGVzdCAkbW9kX2RzdCA9IDE2MDAwMCAmJgorCQkhIEdJVF9ESVI9IiRuYW1lLy5naXQiIGdpdC1yZXYtcGFyc2UgLXEgLS12ZXJpZnkgJHNoYTFfZHN0XjAgPi9kZXYvbnVsbCAmJgorCQltaXNzaW5nX2RzdD10CisKKwkJZGlzcGxheV9uYW1lPSQocmVsYXRpdmVfcGF0aCAiJG5hbWUiKQorCisJCXRvdGFsX2NvbW1pdHM9CisJCWNhc2UgIiRtaXNzaW5nX3NyYywkbWlzc2luZ19kc3QiIGluCisJCXQsKQorCQkJZXJybXNnPSIkKGV2YWxfZ2V0dGV4dCAiICBXYXJuOiBcJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0IFwkc2hhMV9zcmMiKSIKKwkJCTs7CisJCSx0KQorCQkJZXJybXNnPSIkKGV2YWxfZ2V0dGV4dCAiICBXYXJuOiBcJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0IFwkc2hhMV9kc3QiKSIKKwkJCTs7CisJCXQsdCkKKwkJCWVycm1zZz0iJChldmFsX2dldHRleHQgIiAgV2FybjogXCRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgXCRzaGExX3NyYyBhbmQgXCRzaGExX2RzdCIpIgorCQkJOzsKKwkJKikKKwkJCWVycm1zZz0KKwkJCXRvdGFsX2NvbW1pdHM9JCgKKwkJCWlmIHRlc3QgJG1vZF9zcmMgPSAxNjAwMDAgJiYgdGVzdCAkbW9kX2RzdCA9IDE2MDAwMAorCQkJdGhlbgorCQkJCXJhbmdlPSIkc2hhMV9zcmMuLi4kc2hhMV9kc3QiCisJCQllbGlmIHRlc3QgJG1vZF9zcmMgPSAxNjAwMDAKKwkJCXRoZW4KKwkJCQlyYW5nZT0kc2hhMV9zcmMKKwkJCWVsc2UKKwkJCQlyYW5nZT0kc2hhMV9kc3QKKwkJCWZpCisJCQlHSVRfRElSPSIkbmFtZS8uZ2l0IiBcCisJCQlnaXQgcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgJHJhbmdlIC0tIHwgd2MgLWwKKwkJCSkKKwkJCXRvdGFsX2NvbW1pdHM9IiAoJCgoJHRvdGFsX2NvbW1pdHMgKyAwKSkpIgorCQkJOzsKKwkJZXNhYworCisJCXNoYTFfYWJicl9zcmM9JChlY2hvICRzaGExX3NyYyB8IGN1dCAtYzEtNykKKwkJc2hhMV9hYmJyX2RzdD0kKGVjaG8gJHNoYTFfZHN0IHwgY3V0IC1jMS03KQorCQlpZiB0ZXN0ICRzdGF0dXMgPSBUCisJCXRoZW4KKwkJCWJsb2I9IiQoZ2V0dGV4dCAiYmxvYiIpIgorCQkJc3VibW9kdWxlPSIkKGdldHRleHQgInN1Ym1vZHVsZSIpIgorCQkJaWYgdGVzdCAkbW9kX2RzdCA9IDE2MDAwMAorCQkJdGhlbgorCQkJCWVjaG8gIiogJGRpc3BsYXlfbmFtZSAkc2hhMV9hYmJyX3NyYygkYmxvYiktPiRzaGExX2FiYnJfZHN0KCRzdWJtb2R1bGUpJHRvdGFsX2NvbW1pdHM6IgorCQkJZWxzZQorCQkJCWVjaG8gIiogJGRpc3BsYXlfbmFtZSAkc2hhMV9hYmJyX3NyYygkc3VibW9kdWxlKS0+JHNoYTFfYWJicl9kc3QoJGJsb2IpJHRvdGFsX2NvbW1pdHM6IgorCQkJZmkKKwkJZWxzZQorCQkJZWNobyAiKiAkZGlzcGxheV9uYW1lICRzaGExX2FiYnJfc3JjLi4uJHNoYTFfYWJicl9kc3QkdG90YWxfY29tbWl0czoiCisJCWZpCisJCWlmIHRlc3QgLW4gIiRlcnJtc2ciCisJCXRoZW4KKwkJCSMgRG9uJ3QgZ2l2ZSBlcnJvciBtc2cgZm9yIG1vZGlmaWNhdGlvbiB3aG9zZSBkc3QgaXMgbm90IHN1Ym1vZHVsZQorCQkJIyBpLmUuIGRlbGV0ZWQgb3IgY2hhbmdlZCB0byBibG9iCisJCQl0ZXN0ICRtb2RfZHN0ID0gMTYwMDAwICYmIGVjaG8gIiRlcnJtc2ciCisJCWVsc2UKKwkJCWlmIHRlc3QgJG1vZF9zcmMgPSAxNjAwMDAgJiYgdGVzdCAkbW9kX2RzdCA9IDE2MDAwMAorCQkJdGhlbgorCQkJCWxpbWl0PQorCQkJCXRlc3QgJHN1bW1hcnlfbGltaXQgLWd0IDAgJiYgbGltaXQ9Ii0kc3VtbWFyeV9saW1pdCIKKwkJCQlHSVRfRElSPSIkbmFtZS8uZ2l0IiBcCisJCQkJZ2l0IGxvZyAkbGltaXQgLS1wcmV0dHk9J2Zvcm1hdDogICVtICVzJyBcCisJCQkJLS1maXJzdC1wYXJlbnQgJHNoYTFfc3JjLi4uJHNoYTFfZHN0CisJCQllbGlmIHRlc3QgJG1vZF9kc3QgPSAxNjAwMDAKKwkJCXRoZW4KKwkJCQlHSVRfRElSPSIkbmFtZS8uZ2l0IiBcCisJCQkJZ2l0IGxvZyAtLXByZXR0eT0nZm9ybWF0OiAgPiAlcycgLTEgJHNoYTFfZHN0CisJCQllbHNlCisJCQkJR0lUX0RJUj0iJG5hbWUvLmdpdCIgXAorCQkJCWdpdCBsb2cgLS1wcmV0dHk9J2Zvcm1hdDogIDwgJXMnIC0xICRzaGExX3NyYworCQkJZmkKKwkJCWVjaG8KKwkJZmkKKwkJZWNobworCWRvbmUKK30KKyMKKyMgTGlzdCBhbGwgc3VibW9kdWxlcywgcHJlZml4ZWQgd2l0aDoKKyMgIC0gc3VibW9kdWxlIG5vdCBpbml0aWFsaXplZAorIyAgKyBkaWZmZXJlbnQgcmV2aXNpb24gY2hlY2tlZCBvdXQKKyMKKyMgSWYgLS1jYWNoZWQgd2FzIHNwZWNpZmllZCB0aGUgcmV2aXNpb24gaW4gdGhlIGluZGV4IHdpbGwgYmUgcHJpbnRlZAorIyBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50bHkgY2hlY2tlZCBvdXQgcmV2aXNpb24uCisjCisjICRAID0gcmVxdWVzdGVkIHBhdGhzIChkZWZhdWx0IHRvIGFsbCkKKyMKK2NtZF9zdGF0dXMoKQoreworCSMgcGFyc2UgJGFyZ3MgYWZ0ZXIgInN1Ym1vZHVsZSAuLi4gc3RhdHVzIi4KKwl3aGlsZSB0ZXN0ICQjIC1uZSAwCisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1xfC0tcXVpZXQpCisJCQlHSVRfUVVJRVQ9MQorCQkJOzsKKwkJLS1jYWNoZWQpCisJCQljYWNoZWQ9MQorCQkJOzsKKwkJLS1yZWN1cnNpdmUpCisJCQlyZWN1cnNpdmU9MQorCQkJOzsKKwkJLS0pCisJCQlzaGlmdAorCQkJYnJlYWsKKwkJCTs7CisJCS0qKQorCQkJdXNhZ2UKKwkJCTs7CisJCSopCisJCQlicmVhaworCQkJOzsKKwkJZXNhYworCQlzaGlmdAorCWRvbmUKKworCWdpdCBzdWJtb2R1bGUtLWhlbHBlciBsaXN0IC0tcHJlZml4ICIkd3RfcHJlZml4IiAiJEAiIHwKKwl3aGlsZSByZWFkIG1vZGUgc2hhMSBzdGFnZSBzbV9wYXRoCisJZG8KKwkJZGllX2lmX3VubWF0Y2hlZCAiJG1vZGUiCisJCW5hbWU9JChnaXQgc3VibW9kdWxlLS1oZWxwZXIgbmFtZSAiJHNtX3BhdGgiKSB8fCBleGl0CisJCXVybD0kKGdpdCBjb25maWcgc3VibW9kdWxlLiIkbmFtZSIudXJsKQorCQlkaXNwbGF5cGF0aD0kKHJlbGF0aXZlX3BhdGggIiRwcmVmaXgkc21fcGF0aCIpCisJCWlmIHRlc3QgIiRzdGFnZSIgPSBVCisJCXRoZW4KKwkJCXNheSAiVSRzaGExICRkaXNwbGF5cGF0aCIKKwkJCWNvbnRpbnVlCisJCWZpCisJCWlmIHRlc3QgLXogIiR1cmwiIHx8CisJCXsKKwkJCSEgdGVzdCAtZCAiJHNtX3BhdGgiLy5naXQgJiYKKwkJCSEgdGVzdCAtZiAiJHNtX3BhdGgiLy5naXQKKwkJfQorCQl0aGVuCisJCQlzYXkgIi0kc2hhMSAkZGlzcGxheXBhdGgiCisJCQljb250aW51ZTsKKwkJZmkKKwkJaWYgZ2l0IGRpZmYtZmlsZXMgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAtLXF1aWV0IC0tICIkc21fcGF0aCIKKwkJdGhlbgorCQkJc2V0X25hbWVfcmV2ICIkc21fcGF0aCIgIiRzaGExIgorCQkJc2F5ICIgJHNoYTEgJGRpc3BsYXlwYXRoJHJldm5hbWUiCisJCWVsc2UKKwkJCWlmIHRlc3QgLXogIiRjYWNoZWQiCisJCQl0aGVuCisJCQkJc2hhMT0kKGNsZWFyX2xvY2FsX2dpdF9lbnY7IGNkICIkc21fcGF0aCIgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorCQkJZmkKKwkJCXNldF9uYW1lX3JldiAiJHNtX3BhdGgiICIkc2hhMSIKKwkJCXNheSAiKyRzaGExICRkaXNwbGF5cGF0aCRyZXZuYW1lIgorCQlmaQorCisJCWlmIHRlc3QgLW4gIiRyZWN1cnNpdmUiCisJCXRoZW4KKwkJCSgKKwkJCQlwcmVmaXg9IiRkaXNwbGF5cGF0aC8iCisJCQkJY2xlYXJfbG9jYWxfZ2l0X2VudgorCQkJCWNkICIkc21fcGF0aCIgJiYKKwkJCQlldmFsIGNtZF9zdGF0dXMKKwkJCSkgfHwKKwkJCWRpZSAiJChldmFsX2dldHRleHQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJ1wkc21fcGF0aCciKSIKKwkJZmkKKwlkb25lCit9CisjCisjIFN5bmMgcmVtb3RlIHVybHMgZm9yIHN1Ym1vZHVsZXMKKyMgVGhpcyBtYWtlcyB0aGUgdmFsdWUgZm9yIHJlbW90ZS4kcmVtb3RlLnVybCBtYXRjaCB0aGUgdmFsdWUKKyMgc3BlY2lmaWVkIGluIC5naXRtb2R1bGVzLgorIworY21kX3N5bmMoKQoreworCXdoaWxlIHRlc3QgJCMgLW5lIDAKKwlkbworCQljYXNlICIkMSIgaW4KKwkJLXF8LS1xdWlldCkKKwkJCUdJVF9RVUlFVD0xCisJCQlzaGlmdAorCQkJOzsKKwkJLS1yZWN1cnNpdmUpCisJCQlyZWN1cnNpdmU9MQorCQkJc2hpZnQKKwkJCTs7CisJCS0tKQorCQkJc2hpZnQKKwkJCWJyZWFrCisJCQk7OworCQktKikKKwkJCXVzYWdlCisJCQk7OworCQkqKQorCQkJYnJlYWsKKwkJCTs7CisJCWVzYWMKKwlkb25lCisJY2RfdG9fdG9wbGV2ZWwKKwlnaXQgc3VibW9kdWxlLS1oZWxwZXIgbGlzdCAtLXByZWZpeCAiJHd0X3ByZWZpeCIgIiRAIiB8CisJd2hpbGUgcmVhZCBtb2RlIHNoYTEgc3RhZ2Ugc21fcGF0aAorCWRvCisJCWRpZV9pZl91bm1hdGNoZWQgIiRtb2RlIgorCQluYW1lPSQoZ2l0IHN1Ym1vZHVsZS0taGVscGVyIG5hbWUgIiRzbV9wYXRoIikKKwkJdXJsPSQoZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLWdldCBzdWJtb2R1bGUuIiRuYW1lIi51cmwpCisKKwkJIyBQb3NzaWJseSBhIHVybCByZWxhdGl2ZSB0byBwYXJlbnQKKwkJY2FzZSAiJHVybCIgaW4KKwkJLi8qfC4uLyopCisJCQkjIHJld3JpdGUgZm9vL2JhciBhcyAuLi8uLiB0byBmaW5kIHBhdGggZnJvbQorCQkJIyBzdWJtb2R1bGUgd29yayB0cmVlIHRvIHN1cGVycHJvamVjdCB3b3JrIHRyZWUKKwkJCXVwX3BhdGg9IiQocHJpbnRmICclc1xuJyAiJHNtX3BhdGgiIHwgc2VkICJzL1teL11bXi9dKi8uLi9nIikiICYmCisJCQkjIGd1YXJhbnRlZSBhIHRyYWlsaW5nIC8KKwkJCXVwX3BhdGg9JHt1cF9wYXRoJS99LyAmJgorCQkJIyBwYXRoIGZyb20gc3VibW9kdWxlIHdvcmsgdHJlZSB0byBzdWJtb2R1bGUgb3JpZ2luIHJlcG8KKwkJCXN1Yl9vcmlnaW5fdXJsPSQocmVzb2x2ZV9yZWxhdGl2ZV91cmwgIiR1cmwiICIkdXBfcGF0aCIpICYmCisJCQkjIHBhdGggZnJvbSBzdXBlcnByb2plY3Qgd29yayB0cmVlIHRvIHN1Ym1vZHVsZSBvcmlnaW4gcmVwbworCQkJc3VwZXJfY29uZmlnX3VybD0kKHJlc29sdmVfcmVsYXRpdmVfdXJsICIkdXJsIikgfHwgZXhpdAorCQkJOzsKKwkJKikKKwkJCXN1Yl9vcmlnaW5fdXJsPSIkdXJsIgorCQkJc3VwZXJfY29uZmlnX3VybD0iJHVybCIKKwkJCTs7CisJCWVzYWMKKworCQlpZiBnaXQgY29uZmlnICJzdWJtb2R1bGUuJG5hbWUudXJsIiA+L2Rldi9udWxsIDI+L2Rldi9udWxsCisJCXRoZW4KKwkJCWRpc3BsYXlwYXRoPSQocmVsYXRpdmVfcGF0aCAiJHByZWZpeCRzbV9wYXRoIikKKwkJCXNheSAiJChldmFsX2dldHRleHQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJ1wkZGlzcGxheXBhdGgnIikiCisJCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS4iJG5hbWUiLnVybCAiJHN1cGVyX2NvbmZpZ191cmwiCisKKwkJCWlmIHRlc3QgLWUgIiRzbV9wYXRoIi8uZ2l0CisJCQl0aGVuCisJCQkoCisJCQkJY2xlYXJfbG9jYWxfZ2l0X2VudgorCQkJCWNkICIkc21fcGF0aCIKKwkJCQlyZW1vdGU9JChnZXRfZGVmYXVsdF9yZW1vdGUpCisJCQkJZ2l0IGNvbmZpZyByZW1vdGUuIiRyZW1vdGUiLnVybCAiJHN1Yl9vcmlnaW5fdXJsIgorCisJCQkJaWYgdGVzdCAtbiAiJHJlY3Vyc2l2ZSIKKwkJCQl0aGVuCisJCQkJCXByZWZpeD0iJHByZWZpeCRzbV9wYXRoLyIKKwkJCQkJZXZhbCBjbWRfc3luYworCQkJCWZpCisJCQkpCisJCQlmaQorCQlmaQorCWRvbmUKK30KKworIyBUaGlzIGxvb3AgcGFyc2VzIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIGZpbmQgdGhlCisjIHN1YmNvbW1hbmQgbmFtZSB0byBkaXNwYXRjaC4gIFBhcnNpbmcgb2YgdGhlIHN1YmNvbW1hbmQgc3BlY2lmaWMKKyMgb3B0aW9ucyBhcmUgcHJpbWFyaWx5IGRvbmUgYnkgdGhlIHN1YmNvbW1hbmQgaW1wbGVtZW50YXRpb25zLgorIyBTdWJjb21tYW5kIHNwZWNpZmljIG9wdGlvbnMgc3VjaCBhcyAtLWJyYW5jaCBhbmQgLS1jYWNoZWQgYXJlCisjIHBhcnNlZCBoZXJlIGFzIHdlbGwsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCit3aGlsZSB0ZXN0ICQjICE9IDAgJiYgdGVzdCAteiAiJGNvbW1hbmQiCitkbworCWNhc2UgIiQxIiBpbgorCWFkZCB8IGZvcmVhY2ggfCBpbml0IHwgZGVpbml0IHwgdXBkYXRlIHwgc3RhdHVzIHwgc3VtbWFyeSB8IHN5bmMpCisJCWNvbW1hbmQ9JDEKKwkJOzsKKwktcXwtLXF1aWV0KQorCQlHSVRfUVVJRVQ9MQorCQk7OworCS1ifC0tYnJhbmNoKQorCQljYXNlICIkMiIgaW4KKwkJJycpCisJCQl1c2FnZQorCQkJOzsKKwkJZXNhYworCQlicmFuY2g9IiQyIjsgc2hpZnQKKwkJOzsKKwktLWNhY2hlZCkKKwkJY2FjaGVkPSIkMSIKKwkJOzsKKwktLSkKKwkJYnJlYWsKKwkJOzsKKwktKikKKwkJdXNhZ2UKKwkJOzsKKwkqKQorCQlicmVhaworCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCisjIE5vIGNvbW1hbmQgd29yZCBkZWZhdWx0cyB0byAic3RhdHVzIgoraWYgdGVzdCAteiAiJGNvbW1hbmQiCit0aGVuCisgICAgaWYgdGVzdCAkIyA9IDAKKyAgICB0aGVuCisJY29tbWFuZD1zdGF0dXMKKyAgICBlbHNlCisJdXNhZ2UKKyAgICBmaQorZmkKKworIyAiLWIgYnJhbmNoIiBpcyBhY2NlcHRlZCBvbmx5IGJ5ICJhZGQiCitpZiB0ZXN0IC1uICIkYnJhbmNoIiAmJiB0ZXN0ICIkY29tbWFuZCIgIT0gYWRkCit0aGVuCisJdXNhZ2UKK2ZpCisKKyMgIi0tY2FjaGVkIiBpcyBhY2NlcHRlZCBvbmx5IGJ5ICJzdGF0dXMiIGFuZCAic3VtbWFyeSIKK2lmIHRlc3QgLW4gIiRjYWNoZWQiICYmIHRlc3QgIiRjb21tYW5kIiAhPSBzdGF0dXMgJiYgdGVzdCAiJGNvbW1hbmQiICE9IHN1bW1hcnkKK3RoZW4KKwl1c2FnZQorZmkKKworImNtZF8kY29tbWFuZCIgIiRAIgpkaWZmIC0tZ2l0IGEvZ2l0LXN2bi5wZXJsIGIvZ2l0LXN2bi5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZhNWYyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9naXQtc3ZuLnBlcmwKQEAgLTAsMCArMSwyMjI2IEBACisjIS91c3IvYmluL3BlcmwKKyMgQ29weXJpZ2h0IChDKSAyMDA2LCBFcmljIFdvbmcgPG5vcm1hbHBlcnNvbkB5aGJ0Lm5ldD4KKyMgTGljZW5zZTogR1BMIHYyIG9yIGxhdGVyCit1c2UgNS4wMDg7Cit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OwordXNlIHZhcnMgcXcvCSRBVVRIT1IgJFZFUlNJT04KKwkJJHNoYTEgJHNoYTFfc2hvcnQgJF9yZXZpc2lvbiAkX3JlcG9zaXRvcnkKKwkJJF9xICRfYXV0aG9ycyAkX2F1dGhvcnNfcHJvZyAldXNlcnMvOworJEFVVEhPUiA9ICdFcmljIFdvbmcgPG5vcm1hbHBlcnNvbkB5aGJ0Lm5ldD4nOworJFZFUlNJT04gPSAnQEBHSVRfVkVSU0lPTkBAJzsKKwordXNlIENhcnAgcXcvY3JvYWsvOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3L2Rpcm5hbWUgYmFzZW5hbWUvOwordXNlIEZpbGU6OlBhdGggcXcvbWtwYXRoLzsKK3VzZSBGaWxlOjpTcGVjOwordXNlIEdldG9wdDo6TG9uZyBxdy86Y29uZmlnIGdudV9nZXRvcHQgbm9faWdub3JlX2Nhc2UgYXV0b19hYmJyZXYvOwordXNlIE1lbW9pemU7CisKK3VzZSBHaXQ6OlNWTjsKK3VzZSBHaXQ6OlNWTjo6RWRpdG9yOwordXNlIEdpdDo6U1ZOOjpGZXRjaGVyOwordXNlIEdpdDo6U1ZOOjpSYTsKK3VzZSBHaXQ6OlNWTjo6UHJvbXB0OwordXNlIEdpdDo6U1ZOOjpMb2c7Cit1c2UgR2l0OjpTVk46Ok1pZ3JhdGlvbjsKKwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdygKKwlmYXRhbAorCWNhbl9jb21wcmVzcworCWNhbm9uaWNhbGl6ZV9wYXRoCisJY2Fub25pY2FsaXplX3VybAorCWpvaW5fcGF0aHMKKwlhZGRfcGF0aF90b191cmwKKwlqb2luX3BhdGhzCispOworCit1c2UgR2l0IHF3KAorCWdpdF9jbWRfdHJ5CisJY29tbWFuZAorCWNvbW1hbmRfb25lbGluZQorCWNvbW1hbmRfbm9pc3kKKwljb21tYW5kX291dHB1dF9waXBlCisJY29tbWFuZF9jbG9zZV9waXBlCisJY29tbWFuZF9iaWRpX3BpcGUKKwljb21tYW5kX2Nsb3NlX2JpZGlfcGlwZQorKTsKKworQkVHSU4geworCU1lbW9pemU6Om1lbW9pemUgJ0dpdDo6Y29uZmlnJzsKKwlNZW1vaXplOjptZW1vaXplICdHaXQ6OmNvbmZpZ19ib29sJzsKK30KKworCisjIEZyb20gd2hpY2ggc3ViZGlyIGhhdmUgd2UgYmVlbiBpbnZva2VkPworbXkgJGNtZF9kaXJfcHJlZml4ID0gZXZhbCB7CisJY29tbWFuZF9vbmVsaW5lKFtxdy9yZXYtcGFyc2UgLS1zaG93LXByZWZpeC9dLCBTVERFUlIgPT4gMCkKK30gfHwgJyc7CisKKyRHaXQ6OlNWTjo6UmE6Ol9sb2dfd2luZG93X3NpemUgPSAxMDA7CisKK2lmICghIGV4aXN0cyAkRU5We1NWTl9TU0h9ICYmIGV4aXN0cyAkRU5We0dJVF9TU0h9KSB7CisJJEVOVntTVk5fU1NIfSA9ICRFTlZ7R0lUX1NTSH07Cit9CisKK2lmIChleGlzdHMgJEVOVntTVk5fU1NIfSAmJiAkXk8gZXEgJ21zeXMnKSB7CisJJEVOVntTVk5fU1NIfSA9fiBzL1xcL1xcXFwvZzsKKwkkRU5We1NWTl9TU0h9ID1+IHMvKC4qKS8iJDEiLzsKK30KKworJEdpdDo6U1ZOOjpMb2c6OlRaID0gJEVOVntUWn07CiskRU5We1RafSA9ICdVVEMnOworJHwgPSAxOyAjIHVuYnVmZmVyIFNURE9VVAorCisjIEFsbCBTVk4gY29tbWFuZHMgZG8gaXQuICBPdGhlcndpc2Ugd2UgbWF5IGRpZSBvbiBTSUdQSVBFIHdoZW4gdGhlIHJlbW90ZQorIyByZXBvc2l0b3J5IGRlY2lkZXMgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gd2hpY2ggd2UgZXhwZWN0IHRvIGJlIGtlcHQgYWxpdmUuCiskU0lHe1BJUEV9ID0gJ0lHTk9SRSc7CisKKyMgR2l2ZW4gYSBkb3Qgc2VwYXJhdGVkIHZlcnNpb24gbnVtYmVyLCAic3VidHJhY3QiIGl0IGZyb20KKyMgdGhlIFNWTjo6Q29yZTo6VkVSU0lPTjsgbm9uLW5lZ2FpdGl2ZSByZXR1cm4gbWVhbnMgdGhlIFNWTjo6Q29yZQorIyBpcyBhdCBsZWFzdCBhdCB0aGUgdmVyc2lvbiB0aGUgY2FsbGVyIGFza2VkIGZvci4KK3N1YiBjb21wYXJlX3N2bl92ZXJzaW9uIHsKKwlteSAoQG91cnMpID0gc3BsaXQoL1wuLywgJFNWTjo6Q29yZTo6VkVSU0lPTik7CisJbXkgKEB0aGVpcnMpID0gc3BsaXQoL1wuLywgJF9bMF0pOworCW15ICgkaSwgJGRpZmYpOworCisJZm9yICgkaSA9IDA7ICRpIDwgQG91cnMgJiYgJGkgPCBAdGhlaXJzOyAkaSsrKSB7CisJCSRkaWZmID0gJG91cnNbJGldIC0gJHRoZWlyc1skaV07CisJCXJldHVybiAkZGlmZiBpZiAoJGRpZmYpOworCX0KKwlyZXR1cm4gMSBpZiAoJGkgPCBAb3Vycyk7CisJcmV0dXJuIC0xIGlmICgkaSA8IEB0aGVpcnMpOworCXJldHVybiAwOworfQorCitzdWIgX3JlcV9zdm4geworCXJlcXVpcmUgU1ZOOjpDb3JlOyAjIHVzZSgpLWluZyB0aGlzIGNhdXNlcyBzZWdmYXVsdHMgZm9yIG1lLi4uICpzaHJ1ZyoKKwlyZXF1aXJlIFNWTjo6UmE7CisJcmVxdWlyZSBTVk46OkRlbHRhOworCWlmICg6OmNvbXBhcmVfc3ZuX3ZlcnNpb24oJzEuMS4wJykgPCAwKSB7CisJCWZhdGFsICJOZWVkIFNWTjo6Q29yZSAxLjEuMCBvciBiZXR0ZXIgKGdvdCAkU1ZOOjpDb3JlOjpWRVJTSU9OKSI7CisJfQorfQorCiskc2hhMSA9IHFyL1thLWZcZF17NDB9LzsKKyRzaGExX3Nob3J0ID0gcXIvW2EtZlxkXXs0LDQwfS87CitteSAoJF9zdGRpbiwgJF9oZWxwLCAkX2VkaXQsCisJJF9tZXNzYWdlLCAkX2ZpbGUsICRfYnJhbmNoX2Rlc3QsCisJJF90ZW1wbGF0ZSwgJF9zaGFyZWQsCisJJF92ZXJzaW9uLCAkX2ZldGNoX2FsbCwgJF9ub19yZWJhc2UsICRfZmV0Y2hfcGFyZW50LAorCSRfYmVmb3JlLCAkX2FmdGVyLAorCSRfbWVyZ2UsICRfc3RyYXRlZ3ksICRfcHJlc2VydmVfbWVyZ2VzLCAkX2RyeV9ydW4sICRfcGFyZW50cywgJF9sb2NhbCwKKwkkX3ByZWZpeCwgJF9ub19jaGVja291dCwgJF91cmwsICRfdmVyYm9zZSwKKwkkX2NvbW1pdF91cmwsICRfdGFnLCAkX21lcmdlX2luZm8sICRfaW50ZXJhY3RpdmUsICRfc2V0X3N2bl9wcm9wcyk7CisKKyMgVGhpcyBpcyBhIHJlZmFjdG9yaW5nIGFydGlmYWN0IHNvIEdpdDo6U1ZOIGNhbiBnZXQgYXQgdGhpcyBnaXQtc3ZuIHN3aXRjaC4KK3N1YiBvcHRfcHJlZml4IHsgcmV0dXJuICRfcHJlZml4IHx8ICcnIH0KKworJEdpdDo6U1ZOOjpGZXRjaGVyOjpfcGxhY2Vob2xkZXJfZmlsZW5hbWUgPSAiLmdpdGlnbm9yZSI7CiskX3EgfHw9IDA7CitteSAlcmVtb3RlX29wdHMgPSAoICd1c2VybmFtZT1zJyA9PiBcJEdpdDo6U1ZOOjpQcm9tcHQ6Ol91c2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZy1kaXI9cycgPT4gXCRHaXQ6OlNWTjo6UmE6OmNvbmZpZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICduby1hdXRoLWNhY2hlJyA9PiBcJEdpdDo6U1ZOOjpQcm9tcHQ6Ol9ub19hdXRoX2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAnaWdub3JlLXBhdGhzPXMnID0+IFwkR2l0OjpTVk46OkZldGNoZXI6Ol9pZ25vcmVfcmVnZXgsCisgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlLXBhdGhzPXMnID0+IFwkR2l0OjpTVk46OkZldGNoZXI6Ol9pbmNsdWRlX3JlZ2V4LAorICAgICAgICAgICAgICAgICAgICAnaWdub3JlLXJlZnM9cycgPT4gXCRHaXQ6OlNWTjo6UmE6Ol9pZ25vcmVfcmVmc19yZWdleCApOworbXkgJWZjX29wdHMgPSAoICdmb2xsb3ctcGFyZW50fGZvbGxvdyEnID0+IFwkR2l0OjpTVk46Ol9mb2xsb3dfcGFyZW50LAorCQknYXV0aG9ycy1maWxlfEE9cycgPT4gXCRfYXV0aG9ycywKKwkJJ2F1dGhvcnMtcHJvZz1zJyA9PiBcJF9hdXRob3JzX3Byb2csCisJCSdyZXBhY2s6aScgPT4gXCRHaXQ6OlNWTjo6X3JlcGFjaywKKwkJJ25vTWV0YWRhdGEnID0+IFwkR2l0OjpTVk46Ol9ub19tZXRhZGF0YSwKKwkJJ3VzZVN2bVByb3BzJyA9PiBcJEdpdDo6U1ZOOjpfdXNlX3N2bV9wcm9wcywKKwkJJ3VzZVN2bnN5bmNQcm9wcycgPT4gXCRHaXQ6OlNWTjo6X3VzZV9zdm5zeW5jX3Byb3BzLAorCQknbG9nLXdpbmRvdy1zaXplPWknID0+IFwkR2l0OjpTVk46OlJhOjpfbG9nX3dpbmRvd19zaXplLAorCQknbm8tY2hlY2tvdXQnID0+IFwkX25vX2NoZWNrb3V0LAorCQkncXVpZXR8cSsnID0+IFwkX3EsCisJCSdyZXBhY2stZmxhZ3N8cmVwYWNrLWFyZ3N8cmVwYWNrLW9wdHM9cycgPT4KKwkJICAgXCRHaXQ6OlNWTjo6X3JlcGFja19mbGFncywKKwkJJ3VzZS1sb2ctYXV0aG9yJyA9PiBcJEdpdDo6U1ZOOjpfdXNlX2xvZ19hdXRob3IsCisJCSdhZGQtYXV0aG9yLWZyb20nID0+IFwkR2l0OjpTVk46Ol9hZGRfYXV0aG9yX2Zyb20sCisJCSdsb2NhbHRpbWUnID0+IFwkR2l0OjpTVk46Ol9sb2NhbHRpbWUsCisJCSVyZW1vdGVfb3B0cyApOworCitteSAoJF90cnVuaywgQF90YWdzLCBAX2JyYW5jaGVzLCAkX3N0ZGxheW91dCk7CitteSAlaWN2OworbXkgJWluaXRfb3B0cyA9ICggJ3RlbXBsYXRlPXMnID0+IFwkX3RlbXBsYXRlLCAnc2hhcmVkOnMnID0+IFwkX3NoYXJlZCwKKyAgICAgICAgICAgICAgICAgICd0cnVua3xUPXMnID0+IFwkX3RydW5rLCAndGFnc3x0PXNAJyA9PiBcQF90YWdzLAorICAgICAgICAgICAgICAgICAgJ2JyYW5jaGVzfGI9c0AnID0+IFxAX2JyYW5jaGVzLCAncHJlZml4PXMnID0+IFwkX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgICdzdGRsYXlvdXR8cycgPT4gXCRfc3RkbGF5b3V0LAorICAgICAgICAgICAgICAgICAgJ21pbmltaXplLXVybHxtIScgPT4gXCRHaXQ6OlNWTjo6X21pbmltaXplX3VybCwKKwkJICAnbm8tbWV0YWRhdGEnID0+IHN1YiB7ICRpY3Z7bm9NZXRhZGF0YX0gPSAxIH0sCisJCSAgJ3VzZS1zdm0tcHJvcHMnID0+IHN1YiB7ICRpY3Z7dXNlU3ZtUHJvcHN9ID0gMSB9LAorCQkgICd1c2Utc3Zuc3luYy1wcm9wcycgPT4gc3ViIHsgJGljdnt1c2VTdm5zeW5jUHJvcHN9ID0gMSB9LAorCQkgICdyZXdyaXRlLXJvb3Q9cycgPT4gc3ViIHsgJGljdntyZXdyaXRlUm9vdH0gPSAkX1sxXSB9LAorCQkgICdyZXdyaXRlLXV1aWQ9cycgPT4gc3ViIHsgJGljdntyZXdyaXRlVVVJRH0gPSAkX1sxXSB9LAorICAgICAgICAgICAgICAgICAgJXJlbW90ZV9vcHRzICk7CitteSAlY210X29wdHMgPSAoICdlZGl0fGUnID0+IFwkX2VkaXQsCisJCSdybWRpcicgPT4gXCRHaXQ6OlNWTjo6RWRpdG9yOjpfcm1kaXIsCisJCSdmaW5kLWNvcGllcy1oYXJkZXInID0+IFwkR2l0OjpTVk46OkVkaXRvcjo6X2ZpbmRfY29waWVzX2hhcmRlciwKKwkJJ2w9aScgPT4gXCRHaXQ6OlNWTjo6RWRpdG9yOjpfcmVuYW1lX2xpbWl0LAorCQknY29weS1zaW1pbGFyaXR5fEM9aSc9PiBcJEdpdDo6U1ZOOjpFZGl0b3I6Ol9jcF9zaW1pbGFyaXR5CispOworCitteSAlY21kID0gKAorCWZldGNoID0+IFsgXCZjbWRfZmV0Y2gsICJEb3dubG9hZCBuZXcgcmV2aXNpb25zIGZyb20gU1ZOIiwKKwkJCXsgJ3JldmlzaW9ufHI9cycgPT4gXCRfcmV2aXNpb24sCisJCQkgICdmZXRjaC1hbGx8YWxsJyA9PiBcJF9mZXRjaF9hbGwsCisJCQkgICdwYXJlbnR8cCcgPT4gXCRfZmV0Y2hfcGFyZW50LAorCQkJICAgJWZjX29wdHMgfSBdLAorCWNsb25lID0+IFsgXCZjbWRfY2xvbmUsICJJbml0aWFsaXplIGFuZCBmZXRjaCByZXZpc2lvbnMiLAorCQkJeyAncmV2aXNpb258cj1zJyA9PiBcJF9yZXZpc2lvbiwKKwkJCSAgJ3ByZXNlcnZlLWVtcHR5LWRpcnMnID0+CisJCQkJXCRHaXQ6OlNWTjo6RmV0Y2hlcjo6X3ByZXNlcnZlX2VtcHR5X2RpcnMsCisJCQkgICdwbGFjZWhvbGRlci1maWxlbmFtZT1zJyA9PgorCQkJCVwkR2l0OjpTVk46OkZldGNoZXI6Ol9wbGFjZWhvbGRlcl9maWxlbmFtZSwKKwkJCSAgICVmY19vcHRzLCAlaW5pdF9vcHRzIH0gXSwKKwlpbml0ID0+IFsgXCZjbWRfaW5pdCwgIkluaXRpYWxpemUgYSByZXBvIGZvciB0cmFja2luZyIgLgorCQkJICAiIChyZXF1aXJlcyBVUkwgYXJndW1lbnQpIiwKKwkJCSAgXCVpbml0X29wdHMgXSwKKwknbXVsdGktaW5pdCcgPT4gWyBcJmNtZF9tdWx0aV9pbml0LAorCSAgICAgICAgICAgICAgICAgICJEZXByZWNhdGVkIGFsaWFzIGZvciAiLgorCQkJICAiJyQwIGluaXQgLVQ8dHJ1bms+IC1iPGJyYW5jaGVzPiAtdDx0YWdzPiciLAorCQkJICBcJWluaXRfb3B0cyBdLAorCWRjb21taXQgPT4gWyBcJmNtZF9kY29tbWl0LAorCSAgICAgICAgICAgICAnQ29tbWl0IHNldmVyYWwgZGlmZnMgdG8gbWVyZ2Ugd2l0aCB1cHN0cmVhbScsCisJCQl7ICdtZXJnZXxtfE0nID0+IFwkX21lcmdlLAorCQkJICAnc3RyYXRlZ3l8cz1zJyA9PiBcJF9zdHJhdGVneSwKKwkJCSAgJ3ZlcmJvc2V8dicgPT4gXCRfdmVyYm9zZSwKKwkJCSAgJ2RyeS1ydW58bicgPT4gXCRfZHJ5X3J1biwKKwkJCSAgJ2ZldGNoLWFsbHxhbGwnID0+IFwkX2ZldGNoX2FsbCwKKwkJCSAgJ2NvbW1pdC11cmw9cycgPT4gXCRfY29tbWl0X3VybCwKKwkJCSAgJ3NldC1zdm4tcHJvcHM9cycgPT4gXCRfc2V0X3N2bl9wcm9wcywKKwkJCSAgJ3JldmlzaW9ufHI9aScgPT4gXCRfcmV2aXNpb24sCisJCQkgICduby1yZWJhc2UnID0+IFwkX25vX3JlYmFzZSwKKwkJCSAgJ21lcmdlaW5mbz1zJyA9PiBcJF9tZXJnZV9pbmZvLAorCQkJICAnaW50ZXJhY3RpdmV8aScgPT4gXCRfaW50ZXJhY3RpdmUsCisJCQklY210X29wdHMsICVmY19vcHRzIH0gXSwKKwlicmFuY2ggPT4gWyBcJmNtZF9icmFuY2gsCisJICAgICAgICAgICAgJ0NyZWF0ZSBhIGJyYW5jaCBpbiB0aGUgU1ZOIHJlcG9zaXRvcnknLAorCSAgICAgICAgICAgIHsgJ21lc3NhZ2V8bT1zJyA9PiBcJF9tZXNzYWdlLAorCSAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9ufGQ9cycgPT4gXCRfYnJhbmNoX2Rlc3QsCisJICAgICAgICAgICAgICAnZHJ5LXJ1bnxuJyA9PiBcJF9kcnlfcnVuLAorCSAgICAgICAgICAgICAgJ3BhcmVudHMnID0+IFwkX3BhcmVudHMsCisJICAgICAgICAgICAgICAndGFnfHQnID0+IFwkX3RhZywKKwkgICAgICAgICAgICAgICd1c2VybmFtZT1zJyA9PiBcJEdpdDo6U1ZOOjpQcm9tcHQ6Ol91c2VybmFtZSwKKwkgICAgICAgICAgICAgICdjb21taXQtdXJsPXMnID0+IFwkX2NvbW1pdF91cmwgfSBdLAorCXRhZyA9PiBbIHN1YiB7ICRfdGFnID0gMTsgY21kX2JyYW5jaChAXykgfSwKKwkgICAgICAgICAnQ3JlYXRlIGEgdGFnIGluIHRoZSBTVk4gcmVwb3NpdG9yeScsCisJICAgICAgICAgeyAnbWVzc2FnZXxtPXMnID0+IFwkX21lc3NhZ2UsCisJICAgICAgICAgICAnZGVzdGluYXRpb258ZD1zJyA9PiBcJF9icmFuY2hfZGVzdCwKKwkgICAgICAgICAgICdkcnktcnVufG4nID0+IFwkX2RyeV9ydW4sCisJICAgICAgICAgICAncGFyZW50cycgPT4gXCRfcGFyZW50cywKKwkgICAgICAgICAgICd1c2VybmFtZT1zJyA9PiBcJEdpdDo6U1ZOOjpQcm9tcHQ6Ol91c2VybmFtZSwKKwkgICAgICAgICAgICdjb21taXQtdXJsPXMnID0+IFwkX2NvbW1pdF91cmwgfSBdLAorCSdzZXQtdHJlZScgPT4gWyBcJmNtZF9zZXRfdHJlZSwKKwkgICAgICAgICAgICAgICAgIlNldCBhbiBTVk4gcmVwb3NpdG9yeSB0byBhIGdpdCB0cmVlLWlzaCIsCisJCQl7ICdzdGRpbicgPT4gXCRfc3RkaW4sICVjbXRfb3B0cywgJWZjX29wdHMsIH0gXSwKKwknY3JlYXRlLWlnbm9yZScgPT4gWyBcJmNtZF9jcmVhdGVfaWdub3JlLAorCQkJICAgICAnQ3JlYXRlIGEgLmdpdGlnbm9yZSBwZXIgc3ZuOmlnbm9yZScsCisJCQkgICAgIHsgJ3JldmlzaW9ufHI9aScgPT4gXCRfcmV2aXNpb24KKwkJCSAgICAgfSBdLAorCSdta2RpcnMnID0+IFsgXCZjbWRfbWtkaXJzICwKKwkgICAgICAgICAgICAgICJyZWNyZWF0ZSBlbXB0eSBkaXJlY3RvcmllcyBhZnRlciBhIGNoZWNrb3V0IiwKKwkgICAgICAgICAgICAgIHsgJ3JldmlzaW9ufHI9aScgPT4gXCRfcmV2aXNpb24gfSBdLAorICAgICAgICAncHJvcGdldCcgPT4gWyBcJmNtZF9wcm9wZ2V0LAorCQkgICAgICAgJ1ByaW50IHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9uIGEgZmlsZSBvciBkaXJlY3RvcnknLAorCQkgICAgICAgeyAncmV2aXNpb258cj1pJyA9PiBcJF9yZXZpc2lvbiB9IF0sCisgICAgICAgICdwcm9wc2V0JyA9PiBbIFwmY21kX3Byb3BzZXQsCisJCSAgICAgICAnU2V0IHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9uIGEgZmlsZSBvciBkaXJlY3RvcnkgLSB3aWxsIGJlIHNldCBvbiBjb21taXQnLAorCQkgICAgICAge30gXSwKKyAgICAgICAgJ3Byb3BsaXN0JyA9PiBbIFwmY21kX3Byb3BsaXN0LAorCQkgICAgICAgJ0xpc3QgYWxsIHByb3BlcnRpZXMgb2YgYSBmaWxlIG9yIGRpcmVjdG9yeScsCisJCSAgICAgICB7ICdyZXZpc2lvbnxyPWknID0+IFwkX3JldmlzaW9uIH0gXSwKKwknc2hvdy1pZ25vcmUnID0+IFsgXCZjbWRfc2hvd19pZ25vcmUsICJTaG93IHN2bjppZ25vcmUgbGlzdGluZ3MiLAorCQkJeyAncmV2aXNpb258cj1pJyA9PiBcJF9yZXZpc2lvbgorCQkJfSBdLAorCSdzaG93LWV4dGVybmFscycgPT4gWyBcJmNtZF9zaG93X2V4dGVybmFscywgIlNob3cgc3ZuOmV4dGVybmFscyBsaXN0aW5ncyIsCisJCQl7ICdyZXZpc2lvbnxyPWknID0+IFwkX3JldmlzaW9uCisJCQl9IF0sCisJJ211bHRpLWZldGNoJyA9PiBbIFwmY21kX211bHRpX2ZldGNoLAorCSAgICAgICAgICAgICAgICAgICAiRGVwcmVjYXRlZCBhbGlhcyBmb3IgJDAgZmV0Y2ggLS1hbGwiLAorCQkJICAgeyAncmV2aXNpb258cj1zJyA9PiBcJF9yZXZpc2lvbiwgJWZjX29wdHMgfSBdLAorCSdtaWdyYXRlJyA9PiBbIHN1YiB7IH0sCisJICAgICAgICAgICAgICAgIyBuby1vcCwgd2UgYXV0b21hdGljYWxseSBydW4gdGhpcyBhbnl3YXlzLAorCSAgICAgICAgICAgICAgICdNaWdyYXRlIGNvbmZpZ3VyYXRpb24vbWV0YWRhdGEvbGF5b3V0IGZyb20KKwkJICAgICAgICBwcmV2aW91cyB2ZXJzaW9ucyBvZiBnaXQtc3ZuJywKKyAgICAgICAgICAgICAgICAgICAgICAgeyAnbWluaW1pemUnID0+IFwkR2l0OjpTVk46Ok1pZ3JhdGlvbjo6X21pbmltaXplLAorCQkJICVyZW1vdGVfb3B0cyB9IF0sCisJJ2xvZycgPT4gWyBcJkdpdDo6U1ZOOjpMb2c6OmNtZF9zaG93X2xvZywgJ1Nob3cgY29tbWl0IGxvZ3MnLAorCQkJeyAnbGltaXQ9aScgPT4gXCRHaXQ6OlNWTjo6TG9nOjpsaW1pdCwKKwkJCSAgJ3JldmlzaW9ufHI9cycgPT4gXCRfcmV2aXNpb24sCisJCQkgICd2ZXJib3NlfHYnID0+IFwkR2l0OjpTVk46OkxvZzo6dmVyYm9zZSwKKwkJCSAgJ2luY3JlbWVudGFsJyA9PiBcJEdpdDo6U1ZOOjpMb2c6OmluY3JlbWVudGFsLAorCQkJICAnb25lbGluZScgPT4gXCRHaXQ6OlNWTjo6TG9nOjpvbmVsaW5lLAorCQkJICAnc2hvdy1jb21taXQnID0+IFwkR2l0OjpTVk46OkxvZzo6c2hvd19jb21taXQsCisJCQkgICdub24tcmVjdXJzaXZlJyA9PiBcJEdpdDo6U1ZOOjpMb2c6Om5vbl9yZWN1cnNpdmUsCisJCQkgICdhdXRob3JzLWZpbGV8QT1zJyA9PiBcJF9hdXRob3JzLAorCQkJICAnY29sb3InID0+IFwkR2l0OjpTVk46OkxvZzo6Y29sb3IsCisJCQkgICdwYWdlcj1zJyA9PiBcJEdpdDo6U1ZOOjpMb2c6OnBhZ2VyCisJCQl9IF0sCisJJ2ZpbmQtcmV2JyA9PiBbIFwmY21kX2ZpbmRfcmV2LAorCSAgICAgICAgICAgICAgICAiVHJhbnNsYXRlIGJldHdlZW4gU1ZOIHJldmlzaW9uIG51bWJlcnMgYW5kIHRyZWUtaXNoIiwKKwkJCXsgJ0J8YmVmb3JlJyA9PiBcJF9iZWZvcmUsCisJCQkgICdBfGFmdGVyJyA9PiBcJF9hZnRlciB9IF0sCisJJ3JlYmFzZScgPT4gWyBcJmNtZF9yZWJhc2UsICJGZXRjaCBhbmQgcmViYXNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkiLAorCQkJeyAnbWVyZ2V8bXxNJyA9PiBcJF9tZXJnZSwKKwkJCSAgJ3ZlcmJvc2V8dicgPT4gXCRfdmVyYm9zZSwKKwkJCSAgJ3N0cmF0ZWd5fHM9cycgPT4gXCRfc3RyYXRlZ3ksCisJCQkgICdsb2NhbHxsJyA9PiBcJF9sb2NhbCwKKwkJCSAgJ2ZldGNoLWFsbHxhbGwnID0+IFwkX2ZldGNoX2FsbCwKKwkJCSAgJ2RyeS1ydW58bicgPT4gXCRfZHJ5X3J1biwKKwkJCSAgJ3ByZXNlcnZlLW1lcmdlc3xwJyA9PiBcJF9wcmVzZXJ2ZV9tZXJnZXMsCisJCQkgICVmY19vcHRzIH0gXSwKKwknY29tbWl0LWRpZmYnID0+IFsgXCZjbWRfY29tbWl0X2RpZmYsCisJICAgICAgICAgICAgICAgICAgICdDb21taXQgYSBkaWZmIGJldHdlZW4gdHdvIHRyZWVzJywKKwkJCXsgJ21lc3NhZ2V8bT1zJyA9PiBcJF9tZXNzYWdlLAorCQkJICAnZmlsZXxGPXMnID0+IFwkX2ZpbGUsCisJCQkgICdyZXZpc2lvbnxyPXMnID0+IFwkX3JldmlzaW9uLAorCQkJJWNtdF9vcHRzIH0gXSwKKwknaW5mbycgPT4gWyBcJmNtZF9pbmZvLAorCQkgICAgIlNob3cgaW5mbyBhYm91dCB0aGUgbGF0ZXN0IFNWTiByZXZpc2lvbgorCQkgICAgIG9uIHRoZSBjdXJyZW50IGJyYW5jaCIsCisJCSAgICB7ICd1cmwnID0+IFwkX3VybCwgfSBdLAorCSdibGFtZScgPT4gWyBcJkdpdDo6U1ZOOjpMb2c6OmNtZF9ibGFtZSwKKwkgICAgICAgICAgICAiU2hvdyB3aGF0IHJldmlzaW9uIGFuZCBhdXRob3IgbGFzdCBtb2RpZmllZCBlYWNoIGxpbmUgb2YgYSBmaWxlIiwKKwkJICAgIHsgJ2dpdC1mb3JtYXQnID0+IFwkR2l0OjpTVk46OkxvZzo6X2dpdF9mb3JtYXQgfSBdLAorCSdyZXNldCcgPT4gWyBcJmNtZF9yZXNldCwKKwkJICAgICAiVW5kbyBmZXRjaGVzIGJhY2sgdG8gdGhlIHNwZWNpZmllZCBTVk4gcmV2aXNpb24iLAorCQkgICAgIHsgJ3JldmlzaW9ufHI9cycgPT4gXCRfcmV2aXNpb24sCisJCSAgICAgICAncGFyZW50fHAnID0+IFwkX2ZldGNoX3BhcmVudCB9IF0sCisJJ2djJyA9PiBbIFwmY21kX2djLAorCQkgICJDb21wcmVzcyB1bmhhbmRsZWQubG9nIGZpbGVzIGluIC5naXQvc3ZuIGFuZCByZW1vdmUgIiAuCisJCSAgImluZGV4IGZpbGVzIGluIC5naXQvc3ZuIiwKKwkJe30gXSwKKyk7CisKK3BhY2thZ2UgRmFrZVRlcm07CitzdWIgbmV3IHsKKwlteSAoJGNsYXNzLCAkcmVhc29uKSA9IEBfOworCXJldHVybiBibGVzcyBcJHJlYXNvbiwgc2hpZnQ7Cit9CitzdWIgcmVhZGxpbmUgeworCW15ICRzZWxmID0gc2hpZnQ7CisJZGllICJDYW5ub3QgdXNlIHJlYWRsaW5lIG9uIEZha2VUZXJtOiAkJHNlbGYiOworfQorcGFja2FnZSBtYWluOworCitteSAkdGVybTsKK3N1YiB0ZXJtX2luaXQgeworCSR0ZXJtID0gZXZhbCB7CisJCXJlcXVpcmUgVGVybTo6UmVhZExpbmU7CisJCSRFTlZ7IkdJVF9TVk5fTk9UVFkifQorCQkJPyBuZXcgVGVybTo6UmVhZExpbmUgJ2dpdC1zdm4nLCBcKlNURElOLCBcKlNURE9VVAorCQkJOiBuZXcgVGVybTo6UmVhZExpbmUgJ2dpdC1zdm4nOworCX07CisJaWYgKCRAKSB7CisJCSR0ZXJtID0gbmV3IEZha2VUZXJtICIkQDogZ29pbmcgbm9uLWludGVyYWN0aXZlIjsKKwl9Cit9CisKK215ICRjbWQ7Citmb3IgKG15ICRpID0gMDsgJGkgPCBAQVJHVjsgJGkrKykgeworCWlmIChkZWZpbmVkICRjbWR7JEFSR1ZbJGldfSkgeworCQkkY21kID0gJEFSR1ZbJGldOworCQlzcGxpY2UgQEFSR1YsICRpLCAxOworCQlsYXN0OworCX0gZWxzaWYgKCRBUkdWWyRpXSBlcSAnaGVscCcpIHsKKwkJJGNtZCA9ICRBUkdWWyRpKzFdOworCQl1c2FnZSgwKTsKKwl9Cit9OworCisjIG1ha2Ugc3VyZSB3ZSdyZSBhbHdheXMgcnVubmluZyBhdCB0aGUgdG9wLWxldmVsIHdvcmtpbmcgZGlyZWN0b3J5CitpZiAoJGNtZCAmJiAkY21kID1+IC8oPzpjbG9uZXxpbml0fG11bHRpLWluaXQpJC8pIHsKKwkkRU5We0dJVF9ESVJ9IHx8PSAiLmdpdCI7CisJIyBjYXRjaCB0aGUgc3VibW9kdWxlIGNhc2UKKwlpZiAoLWYgJEVOVntHSVRfRElSfSkgeworCQlvcGVuKG15ICRmaCwgJzwnLCAkRU5We0dJVF9ESVJ9KSBvcgorCQkJZGllICJmYWlsZWQgdG8gb3BlbiAkRU5We0dJVF9ESVJ9OiAkIVxuIjsKKwkJJEVOVntHSVRfRElSfSA9ICQxIGlmIDwkZmg+ID1+IC9eZ2l0ZGlyOiAoLispJC87CisJfQorfSBlbHNlIHsKKwlteSAoJGdpdF9kaXIsICRjZHVwKTsKKwlnaXRfY21kX3RyeSB7CisJCSRnaXRfZGlyID0gY29tbWFuZF9vbmVsaW5lKFtxdy9yZXYtcGFyc2UgLS1naXQtZGlyL10pOworCX0gIlVuYWJsZSB0byBmaW5kIC5naXQgZGlyZWN0b3J5XG4iOworCWdpdF9jbWRfdHJ5IHsKKwkJJGNkdXAgPSBjb21tYW5kX29uZWxpbmUocXcvcmV2LXBhcnNlIC0tc2hvdy1jZHVwLyk7CisJCWNob21wICRjZHVwIGlmICgkY2R1cCk7CisJCSRjZHVwID0gIi4iIHVubGVzcyAoJGNkdXAgJiYgbGVuZ3RoICRjZHVwKTsKKwl9ICJBbHJlYWR5IGF0IHRvcGxldmVsLCBidXQgJGdpdF9kaXIgbm90IGZvdW5kXG4iOworCSRFTlZ7R0lUX0RJUn0gPSAkZ2l0X2RpcjsKKwljaGRpciAkY2R1cCBvciBkaWUgIlVuYWJsZSB0byBjaGRpciB1cCB0byAnJGNkdXAnXG4iOworCSRfcmVwb3NpdG9yeSA9IEdpdC0+cmVwb3NpdG9yeShSZXBvc2l0b3J5ID0+ICRFTlZ7R0lUX0RJUn0pOworfQorCitteSAlb3B0cyA9ICV7JGNtZHskY21kfS0+WzJdfSBpZiAoZGVmaW5lZCAkY21kKTsKKworcmVhZF9naXRfY29uZmlnKFwlb3B0cyk7CitpZiAoJGNtZCAmJiAoJGNtZCBlcSAnbG9nJyB8fCAkY21kIGVxICdibGFtZScpKSB7CisJR2V0b3B0OjpMb25nOjpDb25maWd1cmUoJ3Bhc3NfdGhyb3VnaCcpOworfQorbXkgJHJ2ID0gR2V0T3B0aW9ucyglb3B0cywgJ2h8SCcgPT4gXCRfaGVscCwgJ3ZlcnNpb258VicgPT4gXCRfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgJ21pbmltaXplLWNvbm5lY3Rpb25zJyA9PiBcJEdpdDo6U1ZOOjpNaWdyYXRpb246Ol9taW5pbWl6ZSwKKyAgICAgICAgICAgICAgICAgICAgJ2lkfGk9cycgPT4gXCRHaXQ6OlNWTjo6ZGVmYXVsdF9yZWZfaWQsCisgICAgICAgICAgICAgICAgICAgICdzdm4tcmVtb3RlfHJlbW90ZXxSPXMnID0+IHN1YiB7CisgICAgICAgICAgICAgICAgICAgICAgICRHaXQ6OlNWTjo6bm9fcmV1c2VfZXhpc3RpbmcgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAkR2l0OjpTVk46OmRlZmF1bHRfcmVwb19pZCA9ICRfWzFdIH0pOworZXhpdCAxIGlmICghJHJ2ICYmICRjbWQgJiYgJGNtZCBuZSAnbG9nJyk7CisKK3VzYWdlKDApIGlmICRfaGVscDsKK3ZlcnNpb24oKSBpZiAkX3ZlcnNpb247Cit1c2FnZSgxKSB1bmxlc3MgZGVmaW5lZCAkY21kOworbG9hZF9hdXRob3JzKCkgaWYgJF9hdXRob3JzOworaWYgKGRlZmluZWQgJF9hdXRob3JzX3Byb2cpIHsKKwkkX2F1dGhvcnNfcHJvZyA9ICInIiAuIEZpbGU6OlNwZWMtPnJlbDJhYnMoJF9hdXRob3JzX3Byb2cpIC4gIiciOworfQorCit1bmxlc3MgKCRjbWQgPX4gL14oPzpjbG9uZXxpbml0fG11bHRpLWluaXR8Y29tbWl0LWRpZmYpJC8pIHsKKwlHaXQ6OlNWTjo6TWlncmF0aW9uOjptaWdyYXRpb25fY2hlY2soKTsKK30KK0dpdDo6U1ZOOjppbml0X3ZhcnMoKTsKK2V2YWwgeworCUdpdDo6U1ZOOjp2ZXJpZnlfcmVtb3Rlc19zYW5pdHkoKTsKKwkkY21keyRjbWR9LT5bMF0tPihAQVJHVik7CisJcG9zdF9mZXRjaF9jaGVja291dCgpOworfTsKK2ZhdGFsICRAIGlmICRAOworZXhpdCAwOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBwcmltYXJ5IGZ1bmN0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzdWIgdXNhZ2UgeworCW15ICRleGl0ID0gc2hpZnQgfHwgMDsKKwlteSAkZmQgPSAkZXhpdCA/IFwqU1RERVJSIDogXCpTVERPVVQ7CisJcHJpbnQgJGZkIDw8IiI7CitnaXQtc3ZuIC0gYmlkaXJlY3Rpb25hbCBvcGVyYXRpb25zIGJldHdlZW4gYSBzaW5nbGUgU3VidmVyc2lvbiB0cmVlIGFuZCBnaXQKK3VzYWdlOiBnaXQgc3ZuIDxjb21tYW5kPiBbb3B0aW9uc10gW2FyZ3VtZW50c11cbgorCisJcHJpbnQgJGZkICJBdmFpbGFibGUgY29tbWFuZHM6XG4iIHVubGVzcyAkY21kOworCisJZm9yZWFjaCAoc29ydCBrZXlzICVjbWQpIHsKKwkJbmV4dCBpZiAkY21kICYmICRjbWQgbmUgJF87CisJCW5leHQgaWYgL15tdWx0aS0vOyAjIGRvbid0IHNob3cgZGVwcmVjYXRlZCBjb21tYW5kcworCQlwcmludCAkZmQgJyAgJyxwYWNrKCdBMTcnLCRfKSwkY21keyRffS0+WzFdLCJcbiI7CisJCWZvcmVhY2ggKHNvcnQga2V5cyAleyRjbWR7JF99LT5bMl19KSB7CisJCQkjIG1peGVkLWNhc2Ugb3B0aW9ucyBhcmUgZm9yIC5naXQvY29uZmlnIG9ubHkKKwkJCW5leHQgaWYgL1tBLVpdLyAmJiAvXlthLXpdKyQvaTsKKwkJCSMgcHJpbnRzIG91dCBhcmd1bWVudHMgYXMgdGhleSBzaG91bGQgYmUgcGFzc2VkOgorCQkJbXkgJHggPSBzI1s6PV1zJCMjID8gJzxhcmc+JyA6IHMjWzo9XWkkIyMgPyAnPG51bT4nIDogJyc7CisJCQlwcmludCAkZmQgJyAnIHggMjEsIGpvaW4oJywgJywgbWFwIHsgbGVuZ3RoICRfID4gMSA/CisJCQkJCQkJIi0tJF8iIDogIi0kXyIgfQorCQkJCQkJc3BsaXQgL1x8LywkXyksIiAkeFxuIjsKKwkJfQorCX0KKwlwcmludCAkZmQgPDwiIjsKK1xuR0lUX1NWTl9JRCBtYXkgYmUgc2V0IGluIHRoZSBlbnZpcm9ubWVudCBvciB2aWEgdGhlIC0taWQvLWkgc3dpdGNoIHRvIGFuCithcmJpdHJhcnkgaWRlbnRpZmllciBpZiB5b3UncmUgdHJhY2tpbmcgbXVsdGlwbGUgU1ZOIGJyYW5jaGVzL3JlcG9zaXRvcmllcyBpbgorb25lIGdpdCByZXBvc2l0b3J5IGFuZCB3YW50IHRvIGtlZXAgdGhlbSBzZXBhcmF0ZS4gIFNlZSBnaXQtc3ZuKDEpIGZvciBtb3JlCitpbmZvcm1hdGlvbi4KKworCWV4aXQgJGV4aXQ7Cit9CisKK3N1YiB2ZXJzaW9uIHsKKwk6Ol9yZXFfc3ZuKCk7CisJcHJpbnQgImdpdC1zdm4gdmVyc2lvbiAkVkVSU0lPTiAoc3ZuICRTVk46OkNvcmU6OlZFUlNJT04pXG4iOworCWV4aXQgMDsKK30KKworc3ViIGFzayB7CisJbXkgKCRwcm9tcHQsICVhcmcpID0gQF87CisJbXkgJHZhbGlkX3JlID0gJGFyZ3t2YWxpZF9yZX07CisJbXkgJGRlZmF1bHQgPSAkYXJne2RlZmF1bHR9OworCW15ICRyZXNwOworCW15ICRpID0gMDsKKwl0ZXJtX2luaXQoKSB1bmxlc3MgJHRlcm07CisKKwlpZiAoICEoIGRlZmluZWQoJHRlcm0tPklOKQorICAgICAgICAgICAgJiYgZGVmaW5lZCggZmlsZW5vKCR0ZXJtLT5JTikgKQorICAgICAgICAgICAgJiYgZGVmaW5lZCggJHRlcm0tPk9VVCApCisgICAgICAgICAgICAmJiBkZWZpbmVkKCBmaWxlbm8oJHRlcm0tPk9VVCkgKSApICl7CisJCXJldHVybiBkZWZpbmVkKCRkZWZhdWx0KSA/ICRkZWZhdWx0IDogdW5kZWY7CisJfQorCisJd2hpbGUgKCRpKysgPCAxMCkgeworCQkkcmVzcCA9ICR0ZXJtLT5yZWFkbGluZSgkcHJvbXB0KTsKKwkJaWYgKCFkZWZpbmVkICRyZXNwKSB7ICMgRU9GCisJCQlwcmludCAiXG4iOworCQkJcmV0dXJuIGRlZmluZWQgJGRlZmF1bHQgPyAkZGVmYXVsdCA6IHVuZGVmOworCQl9CisJCWlmICgkcmVzcCBlcSAnJyBhbmQgZGVmaW5lZCAkZGVmYXVsdCkgeworCQkJcmV0dXJuICRkZWZhdWx0OworCQl9CisJCWlmICghZGVmaW5lZCAkdmFsaWRfcmUgb3IgJHJlc3AgPX4gLyR2YWxpZF9yZS8pIHsKKwkJCXJldHVybiAkcmVzcDsKKwkJfQorCX0KKwlyZXR1cm4gdW5kZWY7Cit9CisKK3N1YiBkb19naXRfaW5pdF9kYiB7CisJdW5sZXNzICgtZCAkRU5We0dJVF9ESVJ9KSB7CisJCW15IEBpbml0X2RiID0gKCdpbml0Jyk7CisJCXB1c2ggQGluaXRfZGIsICItLXRlbXBsYXRlPSRfdGVtcGxhdGUiIGlmIGRlZmluZWQgJF90ZW1wbGF0ZTsKKwkJaWYgKGRlZmluZWQgJF9zaGFyZWQpIHsKKwkJCWlmICgkX3NoYXJlZCA9fiAvW2Etel0vKSB7CisJCQkJcHVzaCBAaW5pdF9kYiwgIi0tc2hhcmVkPSRfc2hhcmVkIjsKKwkJCX0gZWxzZSB7CisJCQkJcHVzaCBAaW5pdF9kYiwgIi0tc2hhcmVkIjsKKwkJCX0KKwkJfQorCQljb21tYW5kX25vaXN5KEBpbml0X2RiKTsKKwkJJF9yZXBvc2l0b3J5ID0gR2l0LT5yZXBvc2l0b3J5KFJlcG9zaXRvcnkgPT4gIi5naXQiKTsKKwl9CisJbXkgJHNldDsKKwlteSAkcGZ4ID0gInN2bi1yZW1vdGUuJEdpdDo6U1ZOOjpkZWZhdWx0X3JlcG9faWQiOworCWZvcmVhY2ggbXkgJGkgKGtleXMgJWljdikgeworCQlkaWUgIickc2V0JyBhbmQgJyRpJyBjYW5ub3QgYm90aCBiZSBzZXRcbiIgaWYgJHNldDsKKwkJbmV4dCB1bmxlc3MgZGVmaW5lZCAkaWN2eyRpfTsKKwkJY29tbWFuZF9ub2lzeSgnY29uZmlnJywgIiRwZnguJGkiLCAkaWN2eyRpfSk7CisJCSRzZXQgPSAkaTsKKwl9CisJbXkgJGlnbm9yZV9wYXRoc19yZWdleCA9IFwkR2l0OjpTVk46OkZldGNoZXI6Ol9pZ25vcmVfcmVnZXg7CisJY29tbWFuZF9ub2lzeSgnY29uZmlnJywgIiRwZnguaWdub3JlLXBhdGhzIiwgJCRpZ25vcmVfcGF0aHNfcmVnZXgpCisJCWlmIGRlZmluZWQgJCRpZ25vcmVfcGF0aHNfcmVnZXg7CisJbXkgJGluY2x1ZGVfcGF0aHNfcmVnZXggPSBcJEdpdDo6U1ZOOjpGZXRjaGVyOjpfaW5jbHVkZV9yZWdleDsKKwljb21tYW5kX25vaXN5KCdjb25maWcnLCAiJHBmeC5pbmNsdWRlLXBhdGhzIiwgJCRpbmNsdWRlX3BhdGhzX3JlZ2V4KQorCQlpZiBkZWZpbmVkICQkaW5jbHVkZV9wYXRoc19yZWdleDsKKwlteSAkaWdub3JlX3JlZnNfcmVnZXggPSBcJEdpdDo6U1ZOOjpSYTo6X2lnbm9yZV9yZWZzX3JlZ2V4OworCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICIkcGZ4Lmlnbm9yZS1yZWZzIiwgJCRpZ25vcmVfcmVmc19yZWdleCkKKwkJaWYgZGVmaW5lZCAkJGlnbm9yZV9yZWZzX3JlZ2V4OworCisJaWYgKGRlZmluZWQgJEdpdDo6U1ZOOjpGZXRjaGVyOjpfcHJlc2VydmVfZW1wdHlfZGlycykgeworCQlteSAkZm5hbWUgPSBcJEdpdDo6U1ZOOjpGZXRjaGVyOjpfcGxhY2Vob2xkZXJfZmlsZW5hbWU7CisJCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICIkcGZ4LnByZXNlcnZlLWVtcHR5LWRpcnMiLCAndHJ1ZScpOworCQljb21tYW5kX25vaXN5KCdjb25maWcnLCAiJHBmeC5wbGFjZWhvbGRlci1maWxlbmFtZSIsICQkZm5hbWUpOworCX0KK30KKworc3ViIGluaXRfc3ViZGlyIHsKKwlteSAkcmVwb19wYXRoID0gc2hpZnQgb3IgcmV0dXJuOworCW1rcGF0aChbJHJlcG9fcGF0aF0pIHVubGVzcyAtZCAkcmVwb19wYXRoOworCWNoZGlyICRyZXBvX3BhdGggb3IgZGllICJDb3VsZG4ndCBjaGRpciB0byAkcmVwb19wYXRoOiAkIVxuIjsKKwkkRU5We0dJVF9ESVJ9ID0gJy5naXQnOworCSRfcmVwb3NpdG9yeSA9IEdpdC0+cmVwb3NpdG9yeShSZXBvc2l0b3J5ID0+ICRFTlZ7R0lUX0RJUn0pOworfQorCitzdWIgY21kX2Nsb25lIHsKKwlteSAoJHVybCwgJHBhdGgpID0gQF87CisJaWYgKCFkZWZpbmVkICRwYXRoICYmCisJICAgIChkZWZpbmVkICRfdHJ1bmsgfHwgQF9icmFuY2hlcyB8fCBAX3RhZ3MgfHwKKwkgICAgIGRlZmluZWQgJF9zdGRsYXlvdXQpICYmCisJICAgICR1cmwgIX4gbSNeW2EtelwrXSs6Ly8jKSB7CisJCSRwYXRoID0gJHVybDsKKwl9CisJJHBhdGggPSBiYXNlbmFtZSgkdXJsKSBpZiAhZGVmaW5lZCAkcGF0aCB8fCAhbGVuZ3RoICRwYXRoOworCW15ICRhdXRob3JzX2Fic29sdXRlID0gJF9hdXRob3JzID8gRmlsZTo6U3BlYy0+cmVsMmFicygkX2F1dGhvcnMpIDogIiI7CisJY21kX2luaXQoJHVybCwgJHBhdGgpOworCWNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJ3N2bi5hdXRob3JzZmlsZScsICRhdXRob3JzX2Fic29sdXRlKQorCSAgICBpZiAkX2F1dGhvcnM7CisJR2l0OjpTVk46OmZldGNoX2FsbCgkR2l0OjpTVk46OmRlZmF1bHRfcmVwb19pZCk7Cit9CisKK3N1YiBjbWRfaW5pdCB7CisJaWYgKGRlZmluZWQgJF9zdGRsYXlvdXQpIHsKKwkJJF90cnVuayA9ICd0cnVuaycgaWYgKCFkZWZpbmVkICRfdHJ1bmspOworCQlAX3RhZ3MgPSAndGFncycgaWYgKCEgQF90YWdzKTsKKwkJQF9icmFuY2hlcyA9ICdicmFuY2hlcycgaWYgKCEgQF9icmFuY2hlcyk7CisJfQorCWlmIChkZWZpbmVkICRfdHJ1bmsgfHwgQF9icmFuY2hlcyB8fCBAX3RhZ3MpIHsKKwkJcmV0dXJuIGNtZF9tdWx0aV9pbml0KEBfKTsKKwl9CisJbXkgJHVybCA9IHNoaWZ0IG9yIGRpZSAiU1ZOIHJlcG9zaXRvcnkgbG9jYXRpb24gcmVxdWlyZWQgIiwKKwkgICAgICAgICAgICAgICAgICAgICAgICJhcyBhIGNvbW1hbmQtbGluZSBhcmd1bWVudFxuIjsKKwkkdXJsID0gY2Fub25pY2FsaXplX3VybCgkdXJsKTsKKwlpbml0X3N1YmRpcihAXyk7CisJZG9fZ2l0X2luaXRfZGIoKTsKKworCWlmICgkR2l0OjpTVk46Ol9taW5pbWl6ZV91cmwgZXEgJ3Vuc2V0JykgeworCQkkR2l0OjpTVk46Ol9taW5pbWl6ZV91cmwgPSAwOworCX0KKworCUdpdDo6U1ZOLT5pbml0KCR1cmwpOworfQorCitzdWIgY21kX2ZldGNoIHsKKwlpZiAoZ3JlcCAvXlxkKz0uLywgQF8pIHsKKwkJZGllICInPHJldj49PGNvbW1pdD4nIGZldGNoIGFyZ3VtZW50cyBhcmUgIiwKKwkJICAgICJubyBsb25nZXIgc3VwcG9ydGVkLlxuIjsKKwl9CisJbXkgKCRyZW1vdGUpID0gQF87CisJaWYgKEBfID4gMSkgeworCQlkaWUgInVzYWdlOiAkMCBmZXRjaCBbLS1hbGxdIFstLXBhcmVudF0gW3N2bi1yZW1vdGVdXG4iOworCX0KKwkkR2l0OjpTVk46Om5vX3JldXNlX2V4aXN0aW5nID0gdW5kZWY7CisJaWYgKCRfZmV0Y2hfcGFyZW50KSB7CisJCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJCXVubGVzcyAoJGdzKSB7CisJCQlkaWUgIlVuYWJsZSB0byBkZXRlcm1pbmUgdXBzdHJlYW0gU1ZOIGluZm9ybWF0aW9uIGZyb20gIiwKKwkJCSAgICAid29ya2luZyB0cmVlIGhpc3RvcnlcbiI7CisJCX0KKwkgICAgICAgICMganVzdCBmZXRjaCwgZG9uJ3QgY2hlY2tvdXQuCisJCSRfbm9fY2hlY2tvdXQgPSAndHJ1ZSc7CisJCSRfZmV0Y2hfYWxsID8gJGdzLT5mZXRjaF9hbGwgOiAkZ3MtPmZldGNoOworCX0gZWxzaWYgKCRfZmV0Y2hfYWxsKSB7CisJCWNtZF9tdWx0aV9mZXRjaCgpOworCX0gZWxzZSB7CisJCSRyZW1vdGUgfHw9ICRHaXQ6OlNWTjo6ZGVmYXVsdF9yZXBvX2lkOworCQlHaXQ6OlNWTjo6ZmV0Y2hfYWxsKCRyZW1vdGUsIEdpdDo6U1ZOOjpyZWFkX2FsbF9yZW1vdGVzKCkpOworCX0KK30KKworc3ViIGNtZF9zZXRfdHJlZSB7CisJbXkgKEBjb21taXRzKSA9IEBfOworCWlmICgkX3N0ZGluIHx8ICFAY29tbWl0cykgeworCQlwcmludCAiUmVhZGluZyBmcm9tIHN0ZGluLi4uXG4iOworCQlAY29tbWl0cyA9ICgpOworCQl3aGlsZSAoPFNURElOPikgeworCQkJaWYgKC9cYigkc2hhMV9zaG9ydClcYi9vKSB7CisJCQkJdW5zaGlmdCBAY29tbWl0cywgJDE7CisJCQl9CisJCX0KKwl9CisJbXkgQHJldnM7CisJZm9yZWFjaCBteSAkYyAoQGNvbW1pdHMpIHsKKwkJbXkgQHRtcCA9IGNvbW1hbmQoJ3Jldi1wYXJzZScsJGMpOworCQlpZiAoc2NhbGFyIEB0bXAgPT0gMSkgeworCQkJcHVzaCBAcmV2cywgJHRtcFswXTsKKwkJfSBlbHNpZiAoc2NhbGFyIEB0bXAgPiAxKSB7CisJCQlwdXNoIEByZXZzLCByZXZlcnNlKGNvbW1hbmQoJ3Jldi1saXN0JyxAdG1wKSk7CisJCX0gZWxzZSB7CisJCQlmYXRhbCAiRmFpbGVkIHRvIHJldi1wYXJzZSAkYyI7CisJCX0KKwl9CisJbXkgJGdzID0gR2l0OjpTVk4tPm5ldzsKKwlteSAoJHJfbGFzdCwgJGNtdF9sYXN0KSA9ICRncy0+bGFzdF9yZXZfY29tbWl0OworCSRncy0+ZmV0Y2g7CisJaWYgKGRlZmluZWQgJGdzLT57bGFzdF9yZXZ9ICYmICRyX2xhc3QgIT0gJGdzLT57bGFzdF9yZXZ9KSB7CisJCWZhdGFsICJUaGVyZSBhcmUgbmV3IHJldmlzaW9ucyB0aGF0IHdlcmUgZmV0Y2hlZCAiLAorCQkgICAgICAiYW5kIG5lZWQgdG8gYmUgbWVyZ2VkIChvciBhY2tub3dsZWRnZWQpICIsCisJCSAgICAgICJiZWZvcmUgY29tbWl0dGluZy5cbmxhc3QgcmV2OiAkcl9sYXN0XG4iLAorCQkgICAgICAiIGN1cnJlbnQ6ICRncy0+e2xhc3RfcmV2fSI7CisJfQorCSRncy0+c2V0X3RyZWUoJF8pIGZvcmVhY2ggQHJldnM7CisJcHJpbnQgIkRvbmUgY29tbWl0dGluZyAiLHNjYWxhciBAcmV2cywiIHJldmlzaW9ucyB0byBTVk5cbiI7CisJdW5saW5rICRncy0+e2luZGV4fTsKK30KKworc3ViIHNwbGl0X21lcmdlX2luZm9fcmFuZ2UgeworCW15ICgkcmFuZ2UpID0gQF87CisJaWYgKCRyYW5nZSA9fiAvKFxkKyktKFxkKykvKSB7CisJCXJldHVybiAoaW50KCQxKSwgaW50KCQyKSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChpbnQoJHJhbmdlKSwgaW50KCRyYW5nZSkpOworCX0KK30KKworc3ViIGNvbWJpbmVfcmFuZ2VzIHsKKwlteSAoJGluKSA9IEBfOworCisJbXkgQGZudW1zID0gKCk7CisJbXkgQGFyciA9IHNwbGl0KC8sLywgJGluKTsKKwlmb3IgbXkgJGVsZW1lbnQgKEBhcnIpIHsKKwkJbXkgKCRzdGFydCwgJGVuZCkgPSBzcGxpdF9tZXJnZV9pbmZvX3JhbmdlKCRlbGVtZW50KTsKKwkJcHVzaCBAZm51bXMsICRzdGFydDsKKwl9CisKKwlteSBAc29ydGVkID0gQGFyciBbIHNvcnQgeworCQkkZm51bXNbJGFdIDw9PiAkZm51bXNbJGJdCisJfSAwLi4kI2FyciBdOworCisJbXkgQHJldHVybiA9ICgpOworCW15ICRsYXN0ID0gLTE7CisJbXkgJGZpcnN0ID0gLTE7CisJZm9yIG15ICRlbGVtZW50IChAc29ydGVkKSB7CisJCW15ICgkc3RhcnQsICRlbmQpID0gc3BsaXRfbWVyZ2VfaW5mb19yYW5nZSgkZWxlbWVudCk7CisKKwkJaWYgKCRsYXN0ID09IC0xKSB7CisJCQkkZmlyc3QgPSAkc3RhcnQ7CisJCQkkbGFzdCA9ICRlbmQ7CisJCQluZXh0OworCQl9CisJCWlmICgkc3RhcnQgPD0gJGxhc3QrMSkgeworCQkJaWYgKCRlbmQgPiAkbGFzdCkgeworCQkJCSRsYXN0ID0gJGVuZDsKKwkJCX0KKwkJCW5leHQ7CisJCX0KKwkJaWYgKCRmaXJzdCA9PSAkbGFzdCkgeworCQkJcHVzaCBAcmV0dXJuLCAiJGZpcnN0IjsKKwkJfSBlbHNlIHsKKwkJCXB1c2ggQHJldHVybiwgIiRmaXJzdC0kbGFzdCI7CisJCX0KKwkJJGZpcnN0ID0gJHN0YXJ0OworCQkkbGFzdCA9ICRlbmQ7CisJfQorCisJaWYgKCRmaXJzdCAhPSAtMSkgeworCQlpZiAoJGZpcnN0ID09ICRsYXN0KSB7CisJCQlwdXNoIEByZXR1cm4sICIkZmlyc3QiOworCQl9IGVsc2UgeworCQkJcHVzaCBAcmV0dXJuLCAiJGZpcnN0LSRsYXN0IjsKKwkJfQorCX0KKworCXJldHVybiBqb2luKCcsJywgQHJldHVybik7Cit9CisKK3N1YiBtZXJnZV9yZXZzX2ludG9faGFzaCB7CisJbXkgKCRoYXNoLCAkbWluZm8pID0gQF87CisJbXkgQGxpbmVzID0gc3BsaXQoJyAnLCAkbWluZm8pOworCisJZm9yIG15ICRsaW5lIChAbGluZXMpIHsKKwkJbXkgKCRicmFuY2hwYXRoLCAkcmV2cykgPSBzcGxpdCgvOi8sICRsaW5lKTsKKworCQlpZiAoZXhpc3RzKCRoYXNoLT57JGJyYW5jaHBhdGh9KSkgeworCQkJIyBNZXJnZSB0aGUgdHdvIHJldmlzaW9uIHNldHMKKwkJCW15ICRjb21iaW5lZCA9ICIkaGFzaC0+eyRicmFuY2hwYXRofSwkcmV2cyI7CisJCQkkaGFzaC0+eyRicmFuY2hwYXRofSA9IGNvbWJpbmVfcmFuZ2VzKCRjb21iaW5lZCk7CisJCX0gZWxzZSB7CisJCQkjIEp1c3QgZG8gcmFuZ2UgY29tYmluaW5nIGZvciBjb25zb2xpZGF0aW9uCisJCQkkaGFzaC0+eyRicmFuY2hwYXRofSA9IGNvbWJpbmVfcmFuZ2VzKCRyZXZzKTsKKwkJfQorCX0KK30KKworc3ViIG1lcmdlX21lcmdlX2luZm8geworCW15ICgkbWVyZ2VpbmZvX29uZSwgJG1lcmdlaW5mb190d28sICRpZ25vcmVfYnJhbmNoKSA9IEBfOworCW15ICVyZXN1bHRfaGFzaCA9ICgpOworCisJbWVyZ2VfcmV2c19pbnRvX2hhc2goXCVyZXN1bHRfaGFzaCwgJG1lcmdlaW5mb19vbmUpOworCW1lcmdlX3JldnNfaW50b19oYXNoKFwlcmVzdWx0X2hhc2gsICRtZXJnZWluZm9fdHdvKTsKKworCWRlbGV0ZSAkcmVzdWx0X2hhc2h7JGlnbm9yZV9icmFuY2h9IGlmICRpZ25vcmVfYnJhbmNoOworCisJbXkgJHJlc3VsdCA9ICcnOworCSMgU29ydCBiZWxvdyBpcyBmb3IgY29uc2lzdGVuY3kncyBzYWtlCisJZm9yIG15ICRicmFuY2huYW1lIChzb3J0IGtleXMoJXJlc3VsdF9oYXNoKSkgeworCQlteSAkcmV2bGlzdCA9ICRyZXN1bHRfaGFzaHskYnJhbmNobmFtZX07CisJCSRyZXN1bHQgLj0gIiRicmFuY2huYW1lOiRyZXZsaXN0XG4iCisJfQorCXJldHVybiAkcmVzdWx0OworfQorCitzdWIgcG9wdWxhdGVfbWVyZ2VfaW5mbyB7CisJbXkgKCRkLCAkZ3MsICR1dWlkLCAkbGluZWFyX3JlZnMsICRyZXdyaXR0ZW5fcGFyZW50KSA9IEBfOworCisJbXkgJXBhcmVudHNoYXNoOworCXJlYWRfY29tbWl0X3BhcmVudHMoXCVwYXJlbnRzaGFzaCwgJGQpOworCW15IEBwYXJlbnRzID0gQHskcGFyZW50c2hhc2h7JGR9fTsKKwlpZiAoJCNwYXJlbnRzID4gMCkgeworCQkjIE1lcmdlIGNvbW1pdAorCQlteSAkYWxsX3BhcmVudHNfb2sgPSAxOworCQlteSAkYWdncmVnYXRlX21lcmdlaW5mbyA9ICcnOworCQlteSAkcm9vdHVybCA9ICRncy0+cmVwb3Nfcm9vdDsKKwkJbXkgKCR0YXJnZXRfYnJhbmNoKSA9ICRncy0+ZnVsbF9wdXNodXJsID1+IC9eXFEkcm9vdHVybFxFKC4qKS87CisKKwkJaWYgKGRlZmluZWQoJHJld3JpdHRlbl9wYXJlbnQpKSB7CisJCQkjIFJlcGxhY2UgZmlyc3QgcGFyZW50IHdpdGggbmV3bHktcmV3cml0dGVuIHZlcnNpb24KKwkJCXNoaWZ0IEBwYXJlbnRzOworCQkJdW5zaGlmdCBAcGFyZW50cywgJHJld3JpdHRlbl9wYXJlbnQ7CisJCX0KKworCQlmb3JlYWNoIG15ICRwYXJlbnQgKEBwYXJlbnRzKSB7CisJCQlteSAoJGJyYW5jaHVybCwgJHN2bnJldiwgJHBhcnV1aWQpID0KKwkJCQljbXRfbWV0YWRhdGEoJHBhcmVudCk7CisKKwkJCXVubGVzcyAoZGVmaW5lZCgkc3ZucmV2KSkgeworCQkJCSMgU2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYmUgcHJlZmxpZ2h0IGNoZWNrCisJCQkJZmF0YWwgIm1lcmdlIGNvbW1pdCAkZCBoYXMgYW5jZXN0b3IgJHBhcmVudCwgYnV0IHRoYXQgY2hhbmdlICIKKyAgICAgICAgICAgICAgICAgICAgIC4iZG9lcyBub3QgaGF2ZSBnaXQtc3ZuIG1ldGFkYXRhISI7CisJCQl9CisJCQl1bmxlc3MgKCRicmFuY2h1cmwgPX4gL15cUSRyb290dXJsXEUoLiopLykgeworCQkJCWZhdGFsICJjb21taXQgJHBhcmVudCBnaXQtc3ZuIG1ldGFkYXRhIGNoYW5nZWQgbWlkLXJ1biEiOworCQkJfQorCQkJbXkgJGJyYW5jaHBhdGggPSAkMTsKKworCQkJbXkgJHJhID0gR2l0OjpTVk46OlJhLT5uZXcoJGJyYW5jaHVybCk7CisJCQlteSAodW5kZWYsIHVuZGVmLCAkcHJvcHMpID0KKwkJCQkkcmEtPmdldF9kaXIoY2Fub25pY2FsaXplX3BhdGgoIi4iKSwgJHN2bnJldik7CisJCQlteSAkcGFyX21lcmdlaW5mbyA9ICRwcm9wcy0+eydzdm46bWVyZ2VpbmZvJ307CisJCQl1bmxlc3MgKGRlZmluZWQgJHBhcl9tZXJnZWluZm8pIHsKKwkJCQkkcGFyX21lcmdlaW5mbyA9ICcnOworCQkJfQorCQkJIyBNZXJnZSBwcmV2aW91cyBtZXJnZWluZm8gdmFsdWVzCisJCQkkYWdncmVnYXRlX21lcmdlaW5mbyA9CisJCQkJbWVyZ2VfbWVyZ2VfaW5mbygkYWdncmVnYXRlX21lcmdlaW5mbywKKwkJCQkJCQkJJHBhcl9tZXJnZWluZm8sCisJCQkJCQkJCSR0YXJnZXRfYnJhbmNoKTsKKworCQkJbmV4dCBpZiAkcGFyZW50IGVxICRwYXJlbnRzWzBdOyAjIFNraXAgZmlyc3QgcGFyZW50CisJCQkjIEFkZCBuZXcgY2hhbmdlcyBiZWluZyBwbGFjZWQgaW4gdHJlZSBieSBtZXJnZQorCQkJbXkgQGNtZCA9IChxdy9yZXYtbGlzdCAtLXJldmVyc2UvLAorCQkJCQkgICAkcGFyZW50LCBxdy8tLW5vdC8pOworCQkJZm9yZWFjaCBteSAkcGFyIChAcGFyZW50cykgeworCQkJCXVubGVzcyAoJHBhciBlcSAkcGFyZW50KSB7CisJCQkJCXB1c2ggQGNtZCwgJHBhcjsKKwkJCQl9CisJCQl9CisJCQlteSBAcmV2c2luID0gKCk7CisJCQlteSAoJHJldmxpc3QsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShAY21kKTsKKwkJCXdoaWxlICg8JHJldmxpc3Q+KSB7CisJCQkJbXkgJGlyZXYgPSAkXzsKKwkJCQljaG9tcCAkaXJldjsKKwkJCQlteSAodW5kZWYsICRjc3ZucmV2LCB1bmRlZikgPQorCQkJCQljbXRfbWV0YWRhdGEoJGlyZXYpOworCQkJCXVubGVzcyAoZGVmaW5lZCAkY3N2bnJldikgeworCQkJCQkjIEEgY2hpbGQgaXMgbWlzc2luZyBTVk4gYW5ub3RhdGlvbnMuLi4KKwkJCQkJIyB0aGlzIG1pZ2h0IGJlIE9LLCBvciBtaWdodCBub3QgYmUuCisJCQkJCXdhcm4gIlc6Y2hpbGQgJGlyZXYgaXMgbWVyZ2VkIGludG8gcmV2aXNpb24gIgorCQkJCQkJIC4iJGQgYnV0IGRvZXMgbm90IGhhdmUgZ2l0LXN2biBtZXRhZGF0YS4gIgorCQkJCQkJIC4iVGhpcyBtZWFucyBnaXQtc3ZuIGNhbm5vdCBkZXRlcm1pbmUgdGhlICIKKwkJCQkJCSAuInN2biByZXZpc2lvbiBudW1iZXJzIHRvIHBsYWNlIGludG8gdGhlICIKKwkJCQkJCSAuInN2bjptZXJnZWluZm8gcHJvcGVydHkuIFlvdSBtdXN0IGVuc3VyZSAiCisJCQkJCQkgLiJhIGJyYW5jaCBpcyBlbnRpcmVseSBjb21taXR0ZWQgdG8gIgorCQkJCQkJIC4iU1ZOIGJlZm9yZSBtZXJnaW5nIGl0IGluIG9yZGVyIGZvciAiCisJCQkJCQkgLiJzdm46bWVyZ2VpbmZvIHBvcHVsYXRpb24gdG8gZnVuY3Rpb24gIgorCQkJCQkJIC4icHJvcGVybHkiOworCQkJCX0KKwkJCQlwdXNoIEByZXZzaW4sICRjc3ZucmV2OworCQkJfQorCQkJY29tbWFuZF9jbG9zZV9waXBlKCRyZXZsaXN0LCAkY3R4KTsKKworCQkJbGFzdCB1bmxlc3MgJGFsbF9wYXJlbnRzX29rOworCisJCQkjIFdlIG5vdyBoYXZlIGEgbGlzdCBvZiBhbGwgU1ZOIHJldm5vcyB3aGljaCBhcmUKKwkJCSMgbWVyZ2VkIGJ5IHRoaXMgcGFydGljdWxhciBwYXJlbnQuIEludGVncmF0ZSB0aGVtLgorCQkJbmV4dCBpZiAkI3JldnNpbiA9PSAtMTsKKwkJCW15ICRuZXdtZXJnZWluZm8gPSAiJGJyYW5jaHBhdGg6IiAuIGpvaW4oJywnLCBAcmV2c2luKTsKKwkJCSRhZ2dyZWdhdGVfbWVyZ2VpbmZvID0KKwkJCQltZXJnZV9tZXJnZV9pbmZvKCRhZ2dyZWdhdGVfbWVyZ2VpbmZvLAorCQkJCQkJCQkkbmV3bWVyZ2VpbmZvLAorCQkJCQkJCQkkdGFyZ2V0X2JyYW5jaCk7CisJCX0KKwkJaWYgKCRhbGxfcGFyZW50c19vayBhbmQgJGFnZ3JlZ2F0ZV9tZXJnZWluZm8pIHsKKwkJCXJldHVybiAkYWdncmVnYXRlX21lcmdlaW5mbzsKKwkJfQorCX0KKworCXJldHVybiB1bmRlZjsKK30KKworc3ViIGRjb21taXRfcmViYXNlIHsKKwlteSAoJGlzX2xhc3QsICRjdXJyZW50LCAkZmV0Y2hlZF9yZWYsICRzdm5fZXJyb3IpID0gQF87CisJbXkgQGRpZmY7CisKKwlpZiAoJHN2bl9lcnJvcikgeworCQlwcmludCBTVERFUlIgIlxuRVJST1IgZnJvbSBTVk46XG4iLAorCQkJCSRzdm5fZXJyb3ItPmV4cGFuZGVkX21lc3NhZ2UsICJcbiI7CisJfQorCXVubGVzcyAoJF9ub19yZWJhc2UpIHsKKwkJIyB3ZSBhbHdheXMgd2FudCB0byByZWJhc2UgYWdhaW5zdCB0aGUgY3VycmVudCBIRUFELAorCQkjIG5vdCBhbnkgaGVhZCB0aGF0IHdhcyBwYXNzZWQgdG8gdXMKKwkJQGRpZmYgPSBjb21tYW5kKCdkaWZmLXRyZWUnLCAkY3VycmVudCwKKwkgICAgICAgICAgICAgICAgICAgJGZldGNoZWRfcmVmLCAnLS0nKTsKKwkJbXkgQGZpbmlzaDsKKwkJaWYgKEBkaWZmKSB7CisJCQlAZmluaXNoID0gcmViYXNlX2NtZCgpOworCQkJcHJpbnQgU1RERVJSICJXOiAkY3VycmVudCBhbmQgIiwgJGZldGNoZWRfcmVmLAorCQkJICAgICAgICAgICAgICIgZGlmZmVyLCB1c2luZyBAZmluaXNoOlxuIiwKKwkJCSAgICAgICAgICAgICBqb2luKCJcbiIsIEBkaWZmKSwgIlxuIjsKKwkJfSBlbHNpZiAoJGlzX2xhc3QpIHsKKwkJCXByaW50ICJObyBjaGFuZ2VzIGJldHdlZW4gIiwgJGN1cnJlbnQsICIgYW5kICIsCisJCQkgICAgICAkZmV0Y2hlZF9yZWYsCisJCQkgICAgICAiXG5SZXNldHRpbmcgdG8gdGhlIGxhdGVzdCAiLAorCQkJICAgICAgJGZldGNoZWRfcmVmLCAiXG4iOworCQkJQGZpbmlzaCA9IHF3L3Jlc2V0IC0tbWl4ZWQvOworCQl9CisJCWNvbW1hbmRfbm9pc3koQGZpbmlzaCwgJGZldGNoZWRfcmVmKSBpZiBAZmluaXNoOworCX0KKwlpZiAoJHN2bl9lcnJvcikgeworCQlkaWUgIkVSUk9SOiBOb3QgYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIGNvbW1pdHRlZCBpbnRvIFNWTiIKKwkJCS4oJF9ub19yZWJhc2UgPyAiLlxuIiA6ICIsIGhvd2V2ZXIgdGhlIGNvbW1pdHRlZFxuIgorCQkJLiJvbmVzIChpZiBhbnkpIHNlZW0gdG8gYmUgc3VjY2Vzc2Z1bGx5IGludGVncmF0ZWQgIgorCQkJLiJpbnRvIHRoZSB3b3JraW5nIHRyZWUuXG4iKQorCQkJLiJQbGVhc2Ugc2VlIHRoZSBhYm92ZSBtZXNzYWdlcyBmb3IgZGV0YWlscy5cbiI7CisJfQorCXJldHVybiBAZGlmZjsKK30KKworc3ViIGNtZF9kY29tbWl0IHsKKwlteSAkaGVhZCA9IHNoaWZ0OworCWNvbW1hbmRfbm9pc3kocXcvdXBkYXRlLWluZGV4IC0tcmVmcmVzaC8pOworCWdpdF9jbWRfdHJ5IHsgY29tbWFuZF9vbmVsaW5lKHF3L2RpZmYtaW5kZXggLS1xdWlldCBIRUFEIC0tLykgfQorCQknQ2Fubm90IGRjb21taXQgd2l0aCBhIGRpcnR5IGluZGV4LiAgQ29tbWl0IHlvdXIgY2hhbmdlcyBmaXJzdCwgJworCQkuICJvciBzdGFzaCB0aGVtIHdpdGggYGdpdCBzdGFzaCcuXG4iOworCSRoZWFkIHx8PSAnSEVBRCc7CisKKwlteSAkb2xkX2hlYWQ7CisJaWYgKCRoZWFkIG5lICdIRUFEJykgeworCQkkb2xkX2hlYWQgPSBldmFsIHsKKwkJCWNvbW1hbmRfb25lbGluZShbcXcvc3ltYm9saWMtcmVmIC1xIEhFQUQvXSkKKwkJfTsKKwkJaWYgKCRvbGRfaGVhZCkgeworCQkJJG9sZF9oZWFkID1+IHN7XnJlZnMvaGVhZHMvfXt9OworCQl9IGVsc2UgeworCQkJJG9sZF9oZWFkID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZShxdy9yZXYtcGFyc2UgSEVBRC8pIH07CisJCX0KKwkJY29tbWFuZChbJ2NoZWNrb3V0JywgJGhlYWRdLCBTVERFUlIgPT4gMCk7CisJfQorCisJbXkgQHJlZnM7CisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnLCBcQHJlZnMpOworCXVubGVzcyAoJGdzKSB7CisJCWRpZSAiVW5hYmxlIHRvIGRldGVybWluZSB1cHN0cmVhbSBTVk4gaW5mb3JtYXRpb24gZnJvbSAiLAorCQkgICAgIiRoZWFkIGhpc3RvcnkuXG5QZXJoYXBzIHRoZSByZXBvc2l0b3J5IGlzIGVtcHR5LiI7CisJfQorCisJaWYgKGRlZmluZWQgJF9jb21taXRfdXJsKSB7CisJCSR1cmwgPSAkX2NvbW1pdF91cmw7CisJfSBlbHNlIHsKKwkJJHVybCA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsCisJCQkgICAgICAic3ZuLXJlbW90ZS4kZ3MtPntyZXBvX2lkfS5jb21taXR1cmwiKSB9OworCQlpZiAoISR1cmwpIHsKKwkJCSR1cmwgPSAkZ3MtPmZ1bGxfcHVzaHVybAorCQl9CisJfQorCisJbXkgJGxhc3RfcmV2ID0gJF9yZXZpc2lvbiBpZiBkZWZpbmVkICRfcmV2aXNpb247CisJaWYgKCR1cmwpIHsKKwkJcHJpbnQgIkNvbW1pdHRpbmcgdG8gJHVybCAuLi5cbiI7CisJfQorCW15ICgkbGluZWFyX3JlZnMsICRwYXJlbnRzKSA9IGxpbmVhcml6ZV9oaXN0b3J5KCRncywgXEByZWZzKTsKKwlpZiAoJF9ub19yZWJhc2UgJiYgc2NhbGFyKEAkbGluZWFyX3JlZnMpID4gMSkgeworCQl3YXJuICJBdHRlbXB0aW5nIHRvIGNvbW1pdCBtb3JlIHRoYW4gb25lIGNoYW5nZSB3aGlsZSAiLAorCQkgICAgICItLW5vLXJlYmFzZSBpcyBlbmFibGVkLlxuIiwKKwkJICAgICAiSWYgdGhlc2UgY2hhbmdlcyBkZXBlbmQgb24gZWFjaCBvdGhlciwgcmUtcnVubmluZyAiLAorCQkgICAgICJ3aXRob3V0IC0tbm8tcmViYXNlIG1heSBiZSByZXF1aXJlZC4iCisJfQorCisJaWYgKGRlZmluZWQgJF9pbnRlcmFjdGl2ZSl7CisJCW15ICRhc2tfZGVmYXVsdCA9ICJ5IjsKKwkJZm9yZWFjaCBteSAkZCAoQCRsaW5lYXJfcmVmcyl7CisJCQlteSAoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUocXcoc2hvdyAtLXN1bW1hcnkpLCAiJGQiKTsKKwkJCXdoaWxlICg8JGZoPil7CisJCQkJcHJpbnQgJF87CisJCQl9CisJCQljb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkY3R4KTsKKwkJCSRfID0gYXNrKCJDb21taXQgdGhpcyBwYXRjaCB0byBTVk4/IChbeV1lcyAoZGVmYXVsdCl8W25db3xbcV11aXR8W2FdbGwpOiAiLAorCQkJICAgICAgICAgdmFsaWRfcmUgPT4gcXIvXig/Onllc3x5fG5vfG58cXVpdHxxfGFsbHxhKS9pLAorCQkJICAgICAgICAgZGVmYXVsdCA9PiAkYXNrX2RlZmF1bHQpOworCQkJZGllICJDb21taXQgdGhpcyBwYXRjaCByZXBseSByZXF1aXJlZCIgdW5sZXNzIGRlZmluZWQgJF87CisJCQlpZiAoL15bbnFdL2kpIHsKKwkJCQlleGl0KDApOworCQkJfSBlbHNpZiAoL15hL2kpIHsKKwkJCQlsYXN0OworCQkJfQorCQl9CisJfQorCisJbXkgJGV4cGVjdF91cmwgPSAkdXJsOworCisJbXkgJHB1c2hfbWVyZ2VfaW5mbyA9IGV2YWwgeworCQljb21tYW5kX29uZWxpbmUocXcvY29uZmlnIC0tZ2V0IHN2bi5wdXNobWVyZ2VpbmZvLykKKwkJfTsKKwlpZiAobm90IGRlZmluZWQoJHB1c2hfbWVyZ2VfaW5mbykKKwkJCW9yICRwdXNoX21lcmdlX2luZm8gZXEgImZhbHNlIgorCQkJb3IgJHB1c2hfbWVyZ2VfaW5mbyBlcSAibm8iCisJCQlvciAkcHVzaF9tZXJnZV9pbmZvIGVxICJuZXZlciIpIHsKKwkJJHB1c2hfbWVyZ2VfaW5mbyA9IDA7CisJfQorCisJdW5sZXNzIChkZWZpbmVkKCRfbWVyZ2VfaW5mbykgfHwgISAkcHVzaF9tZXJnZV9pbmZvKSB7CisJCSMgUHJlZmxpZ2h0IGNoZWNrIG9mIGNoYW5nZXMgdG8gZW5zdXJlIG5vIGlzc3VlcyB3aXRoIG1lcmdlaW5mbworCQkjIFRoaXMgaW5jbHVkZXMgY2hlY2sgZm9yIHVuY29tbWl0dGVkLXRvLVNWTiBwYXJlbnRzCisJCSMgKG90aGVyIHRoYW4gdGhlIGZpcnN0IHBhcmVudCwgd2hpY2ggd2Ugd2lsbCBoYW5kbGUpLAorCQkjIGluZm9ybWF0aW9uIGZyb20gZGlmZmVyZW50IFNWTiByZXBvcywgYW5kIHBhdGhzCisJCSMgd2hpY2ggYXJlIG5vdCB1bmRlcm5lYXRoIHRoaXMgcmVwb3NpdG9yeSByb290LgorCQlteSAkcm9vdHVybCA9ICRncy0+cmVwb3Nfcm9vdDsKKwkJZm9yZWFjaCBteSAkZCAoQCRsaW5lYXJfcmVmcykgeworCQkJbXkgJXBhcmVudHNoYXNoOworCQkJcmVhZF9jb21taXRfcGFyZW50cyhcJXBhcmVudHNoYXNoLCAkZCk7CisJCQlteSBAcmVhbHBhcmVudHMgPSBAeyRwYXJlbnRzaGFzaHskZH19OworCQkJaWYgKCQjcmVhbHBhcmVudHMgPiAwKSB7CisJCQkJIyBNZXJnZSBjb21taXQKKwkJCQlzaGlmdCBAcmVhbHBhcmVudHM7ICMgUmVtb3ZlL2lnbm9yZSBmaXJzdCBwYXJlbnQKKwkJCQlmb3JlYWNoIG15ICRwYXJlbnQgKEByZWFscGFyZW50cykgeworCQkJCQlteSAoJGJyYW5jaHVybCwgJHN2bnJldiwgJHBhcnV1aWQpID0gY210X21ldGFkYXRhKCRwYXJlbnQpOworCQkJCQl1bmxlc3MgKGRlZmluZWQgJHBhcnV1aWQpIHsKKwkJCQkJCSMgQSBwYXJlbnQgaXMgbWlzc2luZyBTVk4gYW5ub3RhdGlvbnMuLi4KKwkJCQkJCSMgYWJvcnQgdGhlIHdob2xlIG9wZXJhdGlvbi4KKwkJCQkJCWZhdGFsICIkcGFyZW50IGlzIG1lcmdlZCBpbnRvIHJldmlzaW9uICRkLCAiCisJCQkJCQkJIC4iYnV0IGRvZXMgbm90IGhhdmUgZ2l0LXN2biBtZXRhZGF0YS4gIgorCQkJCQkJCSAuIkVpdGhlciBkY29tbWl0IHRoZSBicmFuY2ggb3IgdXNlIGEgIgorCQkJCQkJCSAuImxvY2FsIGNoZXJyeS1waWNrLCBGRiBtZXJnZSwgb3IgcmViYXNlICIKKwkJCQkJCQkgLiJpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IG1lcmdlIGNvbW1pdC4iOworCQkJCQl9CisKKwkJCQkJdW5sZXNzICgkcGFydXVpZCBlcSAkdXVpZCkgeworCQkJCQkJIyBQYXJlbnQgaGFzIFNWTiBtZXRhZGF0YSBmcm9tIGRpZmZlcmVudCByZXBvc2l0b3J5CisJCQkJCQlmYXRhbCAibWVyZ2UgcGFyZW50ICRwYXJlbnQgZm9yIGNoYW5nZSAkZCBoYXMgIgorCQkJCQkJCSAuImdpdC1zdm4gdXVpZCAkcGFydXVpZCwgd2hpbGUgY3VycmVudCBjaGFuZ2UgIgorCQkJCQkJCSAuImhhcyB1dWlkICR1dWlkISI7CisJCQkJCX0KKworCQkJCQl1bmxlc3MgKCRicmFuY2h1cmwgPX4gL15cUSRyb290dXJsXEUoLiopLykgeworCQkJCQkJIyBUaGlzIGJyYW5jaCBpcyB2ZXJ5IHN0cmFuZ2UgaW5kZWVkLgorCQkJCQkJZmF0YWwgIm1lcmdlIHBhcmVudCAkcGFyZW50IGZvciAkZCBpcyBvbiBicmFuY2ggIgorCQkJCQkJCSAuIiRicmFuY2h1cmwsIHdoaWNoIGlzIG5vdCB1bmRlciB0aGUgIgorCQkJCQkJCSAuImdpdC1zdm4gcm9vdCAkcm9vdHVybCEiOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJbXkgJHJld3JpdHRlbl9wYXJlbnQ7CisJbXkgJGN1cnJlbnRfaGVhZCA9IGNvbW1hbmRfb25lbGluZShxdy9yZXYtcGFyc2UgSEVBRC8pOworCUdpdDo6U1ZOOjpyZW1vdmVfdXNlcm5hbWUoJGV4cGVjdF91cmwpOworCWlmIChkZWZpbmVkKCRfbWVyZ2VfaW5mbykpIHsKKwkJJF9tZXJnZV9pbmZvID1+IHRyeyB9e1xufTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJbXkgJGQgPSBzaGlmdCBAJGxpbmVhcl9yZWZzIG9yIGxhc3Q7CisJCXVubGVzcyAoZGVmaW5lZCAkbGFzdF9yZXYpIHsKKwkJCSh1bmRlZiwgJGxhc3RfcmV2LCB1bmRlZikgPSBjbXRfbWV0YWRhdGEoIiRkfjEiKTsKKwkJCXVubGVzcyAoZGVmaW5lZCAkbGFzdF9yZXYpIHsKKwkJCQlmYXRhbCAiVW5hYmxlIHRvIGV4dHJhY3QgcmV2aXNpb24gaW5mb3JtYXRpb24gIiwKKwkJCQkgICAgICAiZnJvbSBjb21taXQgJGR+MSI7CisJCQl9CisJCX0KKwkJaWYgKCRfZHJ5X3J1bikgeworCQkJcHJpbnQgImRpZmYtdHJlZSAkZH4xICRkXG4iOworCQl9IGVsc2UgeworCQkJbXkgJGNtdF9yZXY7CisKKwkJCXVubGVzcyAoZGVmaW5lZCgkX21lcmdlX2luZm8pIHx8ICEgJHB1c2hfbWVyZ2VfaW5mbykgeworCQkJCSRfbWVyZ2VfaW5mbyA9IHBvcHVsYXRlX21lcmdlX2luZm8oJGQsICRncywKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1dWlkLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmVhcl9yZWZzLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJld3JpdHRlbl9wYXJlbnQpOworCQkJfQorCisJCQlteSAlZWRfb3B0cyA9ICggciA9PiAkbGFzdF9yZXYsCisJCQkgICAgICAgICAgICAgICAgbG9nID0+IGdldF9jb21taXRfZW50cnkoJGQpLT57bG9nfSwKKwkJCSAgICAgICAgICAgICAgICByYSA9PiBHaXQ6OlNWTjo6UmEtPm5ldygkdXJsKSwKKwkJCSAgICAgICAgICAgICAgICBjb25maWcgPT4gU1ZOOjpDb3JlOjpjb25maWdfZ2V0X2NvbmZpZygKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICRHaXQ6OlNWTjo6UmE6OmNvbmZpZ19kaXIKKwkJCSAgICAgICAgICAgICAgICApLAorCQkJICAgICAgICAgICAgICAgIHRyZWVfYSA9PiAiJGR+MSIsCisJCQkgICAgICAgICAgICAgICAgdHJlZV9iID0+ICRkLAorCQkJICAgICAgICAgICAgICAgIGVkaXRvcl9jYiA9PiBzdWIgeworCQkJICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiQ29tbWl0dGVkIHIkX1swXVxuIjsKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgJGNtdF9yZXYgPSAkX1swXTsKKwkJCSAgICAgICAgICAgICAgICB9LAorCQkJCQltZXJnZWluZm8gPT4gJF9tZXJnZV9pbmZvLAorCQkJICAgICAgICAgICAgICAgIHN2bl9wYXRoID0+ICcnKTsKKworCQkJbXkgJGVycl9oYW5kbGVyID0gJFNWTjo6RXJyb3I6OmhhbmRsZXI7CisJCQkkU1ZOOjpFcnJvcjo6aGFuZGxlciA9IHN1YiB7CisJCQkJbXkgJGVyciA9IHNoaWZ0OworCQkJCWRjb21taXRfcmViYXNlKDEsICRjdXJyZW50X2hlYWQsICRncy0+cmVmbmFtZSwKKwkJCQkJJGVycik7CisJCQl9OworCisJCQlpZiAoIUdpdDo6U1ZOOjpFZGl0b3ItPm5ldyhcJWVkX29wdHMpLT5hcHBseV9kaWZmKSB7CisJCQkJcHJpbnQgIk5vIGNoYW5nZXNcbiRkfjEgPT0gJGRcbiI7CisJCQl9IGVsc2lmICgkcGFyZW50cy0+eyRkfSAmJiBAeyRwYXJlbnRzLT57JGR9fSkgeworCQkJCSRncy0+e2luamVjdF9wYXJlbnRzX2Rjb21taXR9LT57JGNtdF9yZXZ9ID0KKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVudHMtPnskZH07CisJCQl9CisJCQkkX2ZldGNoX2FsbCA/ICRncy0+ZmV0Y2hfYWxsIDogJGdzLT5mZXRjaDsKKwkJCSRTVk46OkVycm9yOjpoYW5kbGVyID0gJGVycl9oYW5kbGVyOworCQkJJGxhc3RfcmV2ID0gJGNtdF9yZXY7CisJCQluZXh0IGlmICRfbm9fcmViYXNlOworCisJCQlteSBAZGlmZiA9IGRjb21taXRfcmViYXNlKEAkbGluZWFyX3JlZnMgPT0gMCwgJGQsCisJCQkJCQkkZ3MtPnJlZm5hbWUsIHVuZGVmKTsKKworCQkJJHJld3JpdHRlbl9wYXJlbnQgPSBjb21tYW5kX29uZWxpbmUocXcvcmV2LXBhcnNlLywKKwkJCQkJCQkkZ3MtPnJlZm5hbWUpOworCisJCQlpZiAoQGRpZmYpIHsKKwkJCQkkY3VycmVudF9oZWFkID0gY29tbWFuZF9vbmVsaW5lKHF3L3Jldi1wYXJzZQorCQkJCQkJCQlIRUFELyk7CisJCQkJQHJlZnMgPSAoKTsKKwkJCQlteSAoJHVybF8sICRyZXZfLCAkdXVpZF8sICRnc18pID0KKwkJCQkgICAgICAgICAgICAgIHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJywgXEByZWZzKTsKKwkJCQlteSAoJGxpbmVhcl9yZWZzXywgJHBhcmVudHNfKSA9CisJCQkJICAgICAgICAgICAgICBsaW5lYXJpemVfaGlzdG9yeSgkZ3NfLCBcQHJlZnMpOworCQkJCWlmIChzY2FsYXIoQCRsaW5lYXJfcmVmcykgIT0KKwkJCQkgICAgc2NhbGFyKEAkbGluZWFyX3JlZnNfKSkgeworCQkJCQlmYXRhbCAiIyBvZiByZXZpc2lvbnMgY2hhbmdlZCAiLAorCQkJCQkgICJcbmJlZm9yZTpcbiIsCisJCQkJCSAgam9pbigiXG4iLCBAJGxpbmVhcl9yZWZzKSwKKwkJCQkJICAiXG5cbmFmdGVyOlxuIiwKKwkJCQkJICBqb2luKCJcbiIsIEAkbGluZWFyX3JlZnNfKSwgIlxuIiwKKwkJCQkJICAnSWYgeW91IGFyZSBhdHRlbXB0aW5nIHRvIGNvbW1pdCAnLAorCQkJCQkgICJtZXJnZXMsIHRyeSBydW5uaW5nOlxuXHQiLAorCQkJCQkgICdnaXQgcmViYXNlIC0taW50ZXJhY3RpdmUnLAorCQkJCQkgICctLXByZXNlcnZlLW1lcmdlcyAnLAorCQkJCQkgICRncy0+cmVmbmFtZSwKKwkJCQkJICAiXG5CZWZvcmUgZGNvbW1pdHRpbmciOworCQkJCX0KKwkJCQlpZiAoJHVybF8gbmUgJGV4cGVjdF91cmwpIHsKKwkJCQkJaWYgKCR1cmxfIGVxICRncy0+bWV0YWRhdGFfdXJsKSB7CisJCQkJCQlwcmludAorCQkJCQkJICAiQWNjZXB0aW5nIHJld3JpdHRlbiBVUkw6IiwKKwkJCQkJCSAgIiAkdXJsX1xuIjsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWZhdGFsCisJCQkJCQkgICJVUkwgbWlzbWF0Y2ggYWZ0ZXIgcmViYXNlOiIsCisJCQkJCQkgICIgJHVybF8gIT0gJGV4cGVjdF91cmwiOworCQkJCQl9CisJCQkJfQorCQkJCWlmICgkdXVpZF8gbmUgJHV1aWQpIHsKKwkJCQkJZmF0YWwgInV1aWQgbWlzbWF0Y2ggYWZ0ZXIgcmViYXNlOiAiLAorCQkJCQkgICAgICAiJHV1aWRfICE9ICR1dWlkIjsKKwkJCQl9CisJCQkJIyByZW1hcCBwYXJlbnRzCisJCQkJbXkgKCVwLCBAbCwgJGkpOworCQkJCWZvciAoJGkgPSAwOyAkaSA8IHNjYWxhciBAJGxpbmVhcl9yZWZzOyAkaSsrKSB7CisJCQkJCW15ICRuZXcgPSAkbGluZWFyX3JlZnNfLT5bJGldIG9yIG5leHQ7CisJCQkJCSRweyRuZXd9ID0KKwkJCQkJCSRwYXJlbnRzLT57JGxpbmVhcl9yZWZzLT5bJGldfTsKKwkJCQkJcHVzaCBAbCwgJG5ldzsKKwkJCQl9CisJCQkJJHBhcmVudHMgPSBcJXA7CisJCQkJJGxpbmVhcl9yZWZzID0gXEBsOworCQkJCXVuZGVmICRsYXN0X3JldjsKKwkJCX0KKwkJfQorCX0KKworCWlmICgkb2xkX2hlYWQpIHsKKwkJbXkgJG5ld19oZWFkID0gY29tbWFuZF9vbmVsaW5lKHF3L3Jldi1wYXJzZSBIRUFELyk7CisJCW15ICRuZXdfaXNfc3ltYm9saWMgPSBldmFsIHsKKwkJCWNvbW1hbmRfb25lbGluZShxdy9zeW1ib2xpYy1yZWYgLXEgSEVBRC8pOworCQl9OworCQlpZiAoJG5ld19pc19zeW1ib2xpYykgeworCQkJcHJpbnQgImRjb21taXR0ZWQgdGhlIGJyYW5jaCAiLCAkaGVhZCwgIlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICJkY29tbWl0dGVkIG9uIGEgZGV0YWNoZWQgSEVBRCBiZWNhdXNlIHlvdSBnYXZlICIsCisJCQkgICAgICAiYSByZXZpc2lvbiBhcmd1bWVudC5cbiIsCisJCQkgICAgICAiVGhlIHJld3JpdHRlbiBjb21taXQgaXM6ICIsICRuZXdfaGVhZCwgIlxuIjsKKwkJfQorCQljb21tYW5kKFsnY2hlY2tvdXQnLCAkb2xkX2hlYWRdLCBTVERFUlIgPT4gMCk7CisJfQorCisJdW5saW5rICRncy0+e2luZGV4fTsKK30KKworc3ViIGNtZF9icmFuY2ggeworCW15ICgkYnJhbmNoX25hbWUsICRoZWFkKSA9IEBfOworCisJdW5sZXNzIChkZWZpbmVkICRicmFuY2hfbmFtZSAmJiBsZW5ndGggJGJyYW5jaF9uYW1lKSB7CisJCWRpZSgoJF90YWcgPyAidGFnIiA6ICJicmFuY2giKSAuICIgbmFtZSByZXF1aXJlZFxuIik7CisJfQorCSRoZWFkIHx8PSAnSEVBRCc7CisKKwlteSAodW5kZWYsICRyZXYsIHVuZGVmLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJGhlYWQpOworCW15ICRzcmMgPSAkZ3MtPmZ1bGxfcHVzaHVybDsKKworCW15ICRyZW1vdGUgPSBHaXQ6OlNWTjo6cmVhZF9hbGxfcmVtb3RlcygpLT57JGdzLT57cmVwb19pZH19OworCW15ICRhbGxnbG9icyA9ICRyZW1vdGUtPnsgJF90YWcgPyAndGFncycgOiAnYnJhbmNoZXMnIH07CisJbXkgJGdsb2I7CisJaWYgKCQjeyRhbGxnbG9ic30gPT0gMCkgeworCQkkZ2xvYiA9ICRhbGxnbG9icy0+WzBdOworCX0gZWxzZSB7CisJCXVubGVzcyhkZWZpbmVkICRfYnJhbmNoX2Rlc3QpIHsKKwkJCWRpZSAiTXVsdGlwbGUgIiwKKwkJCSAgICAkX3RhZyA/ICJ0YWciIDogImJyYW5jaCIsCisJCQkgICAgIiBwYXRocyBkZWZpbmVkIGZvciBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuXG4iLAorCQkgICAgICAgICAgICAiWW91IG11c3Qgc3BlY2lmeSB3aGVyZSB5b3Ugd2FudCB0byBjcmVhdGUgdGhlICIsCisJCSAgICAgICAgICAgICRfdGFnID8gInRhZyIgOiAiYnJhbmNoIiwKKwkJICAgICAgICAgICAgIiB3aXRoIHRoZSAtLWRlc3RpbmF0aW9uIGFyZ3VtZW50LlxuIjsKKwkJfQorCQlmb3JlYWNoIG15ICRnIChAeyRhbGxnbG9ic30pIHsKKwkJCW15ICRyZSA9IEdpdDo6U1ZOOjpFZGl0b3I6Omdsb2IycGF0KCRnLT57cGF0aH0tPntsZWZ0fSk7CisJCQlpZiAoJF9icmFuY2hfZGVzdCA9fiAvJHJlLykgeworCQkJCSRnbG9iID0gJGc7CisJCQkJbGFzdDsKKwkJCX0KKwkJfQorCQl1bmxlc3MgKGRlZmluZWQgJGdsb2IpIHsKKwkJCW15ICRkZXN0X3JlID0gcXIvXGJcUSRfYnJhbmNoX2Rlc3RcRVxiLzsKKwkJCWZvcmVhY2ggbXkgJGcgKEB7JGFsbGdsb2JzfSkgeworCQkJCSRnLT57cGF0aH0tPntsZWZ0fSA9fiAvJGRlc3RfcmUvIG9yIG5leHQ7CisJCQkJaWYgKGRlZmluZWQgJGdsb2IpIHsKKwkJCQkJZGllICJBbWJpZ3VvdXMgZGVzdGluYXRpb246ICIsCisJCQkJCSAgICAkX2JyYW5jaF9kZXN0LCAiXG5tYXRjaGVzIGJvdGggJyIsCisJCQkJCSAgICAkZ2xvYi0+e3BhdGh9LT57bGVmdH0sICInIGFuZCAnIiwKKwkJCQkJICAgICRnLT57cGF0aH0tPntsZWZ0fSwgIidcbiI7CisJCQkJfQorCQkJCSRnbG9iID0gJGc7CisJCQl9CisJCQl1bmxlc3MgKGRlZmluZWQgJGdsb2IpIHsKKwkJCQlkaWUgIlVua25vd24gIiwKKwkJCQkgICAgJF90YWcgPyAidGFnIiA6ICJicmFuY2giLAorCQkJCSAgICAiIGRlc3RpbmF0aW9uICRfYnJhbmNoX2Rlc3RcbiI7CisJCQl9CisJCX0KKwl9CisJbXkgKCRsZnQsICRyZ3QpID0gQHsgJGdsb2ItPntwYXRofSB9e3F3L2xlZnQgcmlnaHQvfTsKKwlteSAkdXJsOworCWlmIChkZWZpbmVkICRfY29tbWl0X3VybCkgeworCQkkdXJsID0gJF9jb21taXRfdXJsOworCX0gZWxzZSB7CisJCSR1cmwgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLAorCQkJInN2bi1yZW1vdGUuJGdzLT57cmVwb19pZH0uY29tbWl0dXJsIikgfTsKKwkJaWYgKCEkdXJsKSB7CisJCQkkdXJsID0gJHJlbW90ZS0+e3B1c2h1cmx9IHx8ICRyZW1vdGUtPnt1cmx9OworCQl9CisJfQorCW15ICRkc3QgPSBqb2luICcvJywgJHVybCwgJGxmdCwgJGJyYW5jaF9uYW1lLCAoJHJndCB8fCAoKSk7CisKKwlpZiAoJGRzdCA9fiAvXmh0dHBzOi8gJiYgJHNyYyA9fiAvXmh0dHA6LykgeworCQkkc3JjPX5zL15odHRwOi9odHRwczovOworCX0KKworCTo6X3JlcV9zdm4oKTsKKwlyZXF1aXJlIFNWTjo6Q2xpZW50OworCisJbXkgJGN0eCA9IFNWTjo6Q2xpZW50LT5uZXcoCisJCWNvbmZpZyA9PiBTVk46OkNvcmU6OmNvbmZpZ19nZXRfY29uZmlnKAorCQkJJEdpdDo6U1ZOOjpSYTo6Y29uZmlnX2RpcgorCQkpLAorCQlsb2dfbXNnID0+IHN1YiB7CisJCQkkeyAkX1swXSB9ID0gZGVmaW5lZCAkX21lc3NhZ2UKKwkJCQk/ICRfbWVzc2FnZQorCQkJCTogJ0NyZWF0ZSAnIC4gKCRfdGFnID8gJ3RhZyAnIDogJ2JyYW5jaCAnICkKKwkJCQkuICRicmFuY2hfbmFtZTsKKwkJfSwKKwkpOworCisJZXZhbCB7CisJCSRjdHgtPmxzKCRkc3QsICdIRUFEJywgMCk7CisJfSBhbmQgZGllICJicmFuY2ggJHticmFuY2hfbmFtZX0gYWxyZWFkeSBleGlzdHNcbiI7CisKKwlpZiAoJF9wYXJlbnRzKSB7CisJCW1rX3BhcmVudF9kaXJzKCRjdHgsICRkc3QpOworCX0KKworCXByaW50ICJDb3B5aW5nICR7c3JjfSBhdCByJHtyZXZ9IHRvICR7ZHN0fS4uLlxuIjsKKwkkY3R4LT5jb3B5KCRzcmMsICRyZXYsICRkc3QpCisJCXVubGVzcyAkX2RyeV9ydW47CisKKwkkZ3MtPmZldGNoX2FsbDsKK30KKworc3ViIG1rX3BhcmVudF9kaXJzIHsKKwlteSAoJGN0eCwgJHBhcmVudCkgPSBAXzsKKwkkcGFyZW50ID1+IHN7L1teL10qJH17fTsKKworCWlmICghZXZhbHskY3R4LT5scygkcGFyZW50LCAnSEVBRCcsIDApfSkgeworCQlta19wYXJlbnRfZGlycygkY3R4LCAkcGFyZW50KTsKKwkJcHJpbnQgIkNyZWF0aW5nIHBhcmVudCBmb2xkZXIgJHtwYXJlbnR9IC4uLlxuIjsKKwkJJGN0eC0+bWtkaXIoJHBhcmVudCkgdW5sZXNzICRfZHJ5X3J1bjsKKwl9Cit9CisKK3N1YiBjbWRfZmluZF9yZXYgeworCW15ICRyZXZpc2lvbl9vcl9oYXNoID0gc2hpZnQgb3IgZGllICJTVk4gb3IgZ2l0IHJldmlzaW9uIHJlcXVpcmVkICIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50XG4iOworCW15ICRyZXN1bHQ7CisJaWYgKCRyZXZpc2lvbl9vcl9oYXNoID1+IC9eclxkKyQvKSB7CisJCW15ICRoZWFkID0gc2hpZnQ7CisJCSRoZWFkIHx8PSAnSEVBRCc7CisJCW15IEByZWZzOworCQlteSAodW5kZWYsIHVuZGVmLCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCRoZWFkLCBcQHJlZnMpOworCQl1bmxlc3MgKCRncykgeworCQkJZGllICJVbmFibGUgdG8gZGV0ZXJtaW5lIHVwc3RyZWFtIFNWTiBpbmZvcm1hdGlvbiBmcm9tICIsCisJCQkgICAgIiRoZWFkIGhpc3RvcnlcbiI7CisJCX0KKwkJbXkgJGRlc2lyZWRfcmV2aXNpb24gPSBzdWJzdHIoJHJldmlzaW9uX29yX2hhc2gsIDEpOworCQlpZiAoJF9iZWZvcmUpIHsKKwkJCSRyZXN1bHQgPSAkZ3MtPmZpbmRfcmV2X2JlZm9yZSgkZGVzaXJlZF9yZXZpc2lvbiwgMSk7CisJCX0gZWxzaWYgKCRfYWZ0ZXIpIHsKKwkJCSRyZXN1bHQgPSAkZ3MtPmZpbmRfcmV2X2FmdGVyKCRkZXNpcmVkX3JldmlzaW9uLCAxKTsKKwkJfSBlbHNlIHsKKwkJCSRyZXN1bHQgPSAkZ3MtPnJldl9tYXBfZ2V0KCRkZXNpcmVkX3JldmlzaW9uLCAkdXVpZCk7CisJCX0KKwl9IGVsc2UgeworCQlteSAodW5kZWYsICRyZXYsIHVuZGVmKSA9IGNtdF9tZXRhZGF0YSgkcmV2aXNpb25fb3JfaGFzaCk7CisJCSRyZXN1bHQgPSAkcmV2OworCX0KKwlwcmludCAiJHJlc3VsdFxuIiBpZiAkcmVzdWx0OworfQorCitzdWIgYXV0b19jcmVhdGVfZW1wdHlfZGlyZWN0b3JpZXMgeworCW15ICgkZ3MpID0gQF87CisJbXkgJHZhciA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldCcsICctLWJvb2wnLAorCQkJCQkgInN2bi1yZW1vdGUuJGdzLT57cmVwb19pZH0uYXV0b21rZGlycyIpIH07CisJIyBCeSBkZWZhdWx0LCBjcmVhdGUgZW1wdHkgZGlyZWN0b3JpZXMgYnkgY29uc3VsdGluZyB0aGUgdW5oYW5kbGVkIGxvZywKKwkjIGJ1dCBhbGxvdyBzZXR0aW5nIGl0IHRvICdmYWxzZScgdG8gc2tpcCBpdC4KKwlyZXR1cm4gISgkdmFyICYmICR2YXIgZXEgJ2ZhbHNlJyk7Cit9CisKK3N1YiBjbWRfcmViYXNlIHsKKwljb21tYW5kX25vaXN5KHF3L3VwZGF0ZS1pbmRleCAtLXJlZnJlc2gvKTsKKwlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOworCXVubGVzcyAoJGdzKSB7CisJCWRpZSAiVW5hYmxlIHRvIGRldGVybWluZSB1cHN0cmVhbSBTVk4gaW5mb3JtYXRpb24gZnJvbSAiLAorCQkgICAgIndvcmtpbmcgdHJlZSBoaXN0b3J5XG4iOworCX0KKwlpZiAoJF9kcnlfcnVuKSB7CisJCXByaW50ICJSZW1vdGUgQnJhbmNoOiAiIC4gJGdzLT5yZWZuYW1lIC4gIlxuIjsKKwkJcHJpbnQgIlNWTiBVUkw6ICIgLiAkdXJsIC4gIlxuIjsKKwkJcmV0dXJuOworCX0KKwlpZiAoY29tbWFuZChxdy9kaWZmLWluZGV4IEhFQUQgLS0vKSkgeworCQlwcmludCBTVERFUlIgIkNhbm5vdCByZWJhc2Ugd2l0aCB1bmNvbW1pdHRlZCBjaGFuZ2VzOlxuIjsKKwkJY29tbWFuZF9ub2lzeSgnc3RhdHVzJyk7CisJCWV4aXQgMTsKKwl9CisJdW5sZXNzICgkX2xvY2FsKSB7CisJCSMgcmViYXNlIHdpbGwgY2hlY2tvdXQgZm9yIHVzLCBzbyBubyBuZWVkIHRvIGRvIGl0IGV4cGxpY2l0bHkKKwkJJF9ub19jaGVja291dCA9ICd0cnVlJzsKKwkJJF9mZXRjaF9hbGwgPyAkZ3MtPmZldGNoX2FsbCA6ICRncy0+ZmV0Y2g7CisJfQorCWNvbW1hbmRfbm9pc3kocmViYXNlX2NtZCgpLCAkZ3MtPnJlZm5hbWUpOworCWlmIChhdXRvX2NyZWF0ZV9lbXB0eV9kaXJlY3RvcmllcygkZ3MpKSB7CisJCSRncy0+bWtlbXB0eWRpcnM7CisJfQorfQorCitzdWIgY21kX3Nob3dfaWdub3JlIHsKKwlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOworCSRncyB8fD0gR2l0OjpTVk4tPm5ldzsKKwlteSAkciA9IChkZWZpbmVkICRfcmV2aXNpb24gPyAkX3JldmlzaW9uIDogJGdzLT5yYS0+Z2V0X2xhdGVzdF9yZXZudW0pOworCSRncy0+cHJvcF93YWxrKCRncy0+cGF0aCwgJHIsIHN1YiB7CisJCW15ICgkZ3MsICRwYXRoLCAkcHJvcHMpID0gQF87CisJCXByaW50IFNURE9VVCAiXG4jICRwYXRoXG4iOworCQlteSAkcyA9ICRwcm9wcy0+eydzdm46aWdub3JlJ30gb3IgcmV0dXJuOworCQkkcyA9fiBzL1tcclxuXSsvXG4vZzsKKwkJJHMgPX4gcy9eXG4rLy87CisJCWNob21wICRzOworCQkkcyA9fiBzI14jJHBhdGgjZ207CisJCXByaW50IFNURE9VVCAiJHNcbiI7CisJfSk7Cit9CisKK3N1YiBjbWRfc2hvd19leHRlcm5hbHMgeworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJJGdzIHx8PSBHaXQ6OlNWTi0+bmV3OworCW15ICRyID0gKGRlZmluZWQgJF9yZXZpc2lvbiA/ICRfcmV2aXNpb24gOiAkZ3MtPnJhLT5nZXRfbGF0ZXN0X3Jldm51bSk7CisJJGdzLT5wcm9wX3dhbGsoJGdzLT5wYXRoLCAkciwgc3ViIHsKKwkJbXkgKCRncywgJHBhdGgsICRwcm9wcykgPSBAXzsKKwkJcHJpbnQgU1RET1VUICJcbiMgJHBhdGhcbiI7CisJCW15ICRzID0gJHByb3BzLT57J3N2bjpleHRlcm5hbHMnfSBvciByZXR1cm47CisJCSRzID1+IHMvW1xyXG5dKy9cbi9nOworCQljaG9tcCAkczsKKwkJJHMgPX4gcyNeIyRwYXRoI2dtOworCQlwcmludCBTVERPVVQgIiRzXG4iOworCX0pOworfQorCitzdWIgY21kX2NyZWF0ZV9pZ25vcmUgeworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCwgJGdzKSA9IHdvcmtpbmdfaGVhZF9pbmZvKCdIRUFEJyk7CisJJGdzIHx8PSBHaXQ6OlNWTi0+bmV3OworCW15ICRyID0gKGRlZmluZWQgJF9yZXZpc2lvbiA/ICRfcmV2aXNpb24gOiAkZ3MtPnJhLT5nZXRfbGF0ZXN0X3Jldm51bSk7CisJJGdzLT5wcm9wX3dhbGsoJGdzLT5wYXRoLCAkciwgc3ViIHsKKwkJbXkgKCRncywgJHBhdGgsICRwcm9wcykgPSBAXzsKKwkJIyAkcGF0aCBpcyBvZiB0aGUgZm9ybSAvcGF0aC90by9kaXIvCisJCSRwYXRoID0gJy4nIC4gJHBhdGg7CisJCSMgU1ZOIGNhbiBoYXZlIGF0dHJpYnV0ZXMgb24gZW1wdHkgZGlyZWN0b3JpZXMsCisJCSMgd2hpY2ggZ2l0IHdvbid0IHRyYWNrCisJCW1rcGF0aChbJHBhdGhdKSB1bmxlc3MgLWQgJHBhdGg7CisJCW15ICRpZ25vcmUgPSAkcGF0aCAuICcuZ2l0aWdub3JlJzsKKwkJbXkgJHMgPSAkcHJvcHMtPnsnc3ZuOmlnbm9yZSd9IG9yIHJldHVybjsKKwkJb3BlbihHSVRJR05PUkUsICc+JywgJGlnbm9yZSkKKwkJICBvciBmYXRhbCgiRmFpbGVkIHRvIG9wZW4gYCRpZ25vcmUnIGZvciB3cml0aW5nOiAkISIpOworCQkkcyA9fiBzL1tcclxuXSsvXG4vZzsKKwkJJHMgPX4gcy9eXG4rLy87CisJCWNob21wICRzOworCQkjIFByZWZpeCBhbGwgcGF0dGVybnMgc28gdGhhdCB0aGUgaWdub3JlIGRvZXNuJ3QgYXBwbHkKKwkJIyB0byBzdWItZGlyZWN0b3JpZXMuCisJCSRzID1+IHMjXiMvI2dtOworCQlwcmludCBHSVRJR05PUkUgIiRzXG4iOworCQljbG9zZShHSVRJR05PUkUpCisJCSAgb3IgZmF0YWwoIkZhaWxlZCB0byBjbG9zZSBgJGlnbm9yZSc6ICQhIik7CisJCWNvbW1hbmRfbm9pc3koJ2FkZCcsICctZicsICRpZ25vcmUpOworCX0pOworfQorCitzdWIgY21kX21rZGlycyB7CisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnKTsKKwkkZ3MgfHw9IEdpdDo6U1ZOLT5uZXc7CisJJGdzLT5ta2VtcHR5ZGlycygkX3JldmlzaW9uKTsKK30KKworIyBnZXRfc3ZucHJvcHMoUEFUSCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIEhlbHBlciBmb3IgY21kX3Byb3BnZXQgYW5kIGNtZF9wcm9wbGlzdCBiZWxvdy4KK3N1YiBnZXRfc3ZucHJvcHMgeworCW15ICRwYXRoID0gc2hpZnQ7CisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnKTsKKwkkZ3MgfHw9IEdpdDo6U1ZOLT5uZXc7CisKKwkjIHByZWZpeCBUSEUgUEFUSCBieSB0aGUgc3ViLWRpcmVjdG9yeSBmcm9tIHdoaWNoIHRoZSB1c2VyCisJIyBpbnZva2VkIHVzLgorCSRwYXRoID0gJGNtZF9kaXJfcHJlZml4IC4gJHBhdGg7CisJZmF0YWwoIk5vIHN1Y2ggZmlsZSBvciBkaXJlY3Rvcnk6ICRwYXRoIikgdW5sZXNzIC1lICRwYXRoOworCW15ICRpc19kaXIgPSAtZCAkcGF0aCA/IDEgOiAwOworCSRwYXRoID0gam9pbl9wYXRocygkZ3MtPnBhdGgsICRwYXRoKTsKKworCSMgY2Fub25pY2FsaXplIHRoZSBwYXRoIChvdGhlcndpc2UgbGlic3ZuIHdpbGwgYWJvcnQgb3IgZmFpbCB0bworCSMgZmluZCB0aGUgZmlsZSkKKwkkcGF0aCA9IGNhbm9uaWNhbGl6ZV9wYXRoKCRwYXRoKTsKKworCW15ICRyID0gKGRlZmluZWQgJF9yZXZpc2lvbiA/ICRfcmV2aXNpb24gOiAkZ3MtPnJhLT5nZXRfbGF0ZXN0X3Jldm51bSk7CisJbXkgJHByb3BzOworCWlmICgkaXNfZGlyKSB7CisJCSh1bmRlZiwgdW5kZWYsICRwcm9wcykgPSAkZ3MtPnJhLT5nZXRfZGlyKCRwYXRoLCAkcik7CisJfQorCWVsc2UgeworCQkodW5kZWYsICRwcm9wcykgPSAkZ3MtPnJhLT5nZXRfZmlsZSgkcGF0aCwgJHIsIHVuZGVmKTsKKwl9CisJcmV0dXJuICRwcm9wczsKK30KKworIyBjbWRfcHJvcGdldCAoUFJPUCwgUEFUSCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByaW50IHRoZSBTVk4gcHJvcGVydHkgUFJPUCBmb3IgUEFUSC4KK3N1YiBjbWRfcHJvcGdldCB7CisJbXkgKCRwcm9wLCAkcGF0aCkgPSBAXzsKKwkkcGF0aCA9ICcuJyBpZiBub3QgZGVmaW5lZCAkcGF0aDsKKwl1c2FnZSgxKSBpZiBub3QgZGVmaW5lZCAkcHJvcDsKKwlteSAkcHJvcHMgPSBnZXRfc3ZucHJvcHMoJHBhdGgpOworCWlmIChub3QgZGVmaW5lZCAkcHJvcHMtPnskcHJvcH0pIHsKKwkJZmF0YWwoImAkcGF0aCcgZG9lcyBub3QgaGF2ZSBhIGAkcHJvcCcgU1ZOIHByb3BlcnR5LiIpOworCX0KKwlwcmludCAkcHJvcHMtPnskcHJvcH0gLiAiXG4iOworfQorCisjIGNtZF9wcm9wc2V0IChQUk9QTkFNRSwgUFJPUFZBTCwgUEFUSCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFkanVzdCB0aGUgU1ZOIHByb3BlcnR5IFBST1BOQU1FIHRvIFBST1BWQUwgZm9yIFBBVEguCitzdWIgY21kX3Byb3BzZXQgeworCW15ICgkcHJvcG5hbWUsICRwcm9wdmFsLCAkcGF0aCkgPSBAXzsKKwkkcGF0aCA9ICcuJyBpZiBub3QgZGVmaW5lZCAkcGF0aDsKKwkkcGF0aCA9ICRjbWRfZGlyX3ByZWZpeCAuICRwYXRoOworCXVzYWdlKDEpIGlmIG5vdCBkZWZpbmVkICRwcm9wbmFtZTsKKwl1c2FnZSgxKSBpZiBub3QgZGVmaW5lZCAkcHJvcHZhbDsKKwlteSAkZmlsZSA9IGJhc2VuYW1lKCRwYXRoKTsKKwlteSAkZG4gPSBkaXJuYW1lKCRwYXRoKTsKKwlteSAkY3VyX3Byb3BzID0gR2l0OjpTVk46OkVkaXRvcjo6Y2hlY2tfYXR0ciggInN2bi1wcm9wZXJ0aWVzIiwgJHBhdGggKTsKKwlteSBAbmV3X3Byb3BzOworCWlmICghJGN1cl9wcm9wcyB8fCAkY3VyX3Byb3BzIGVxICJ1bnNldCIgfHwgJGN1cl9wcm9wcyBlcSAiIiB8fCAkY3VyX3Byb3BzIGVxICJzZXQiKSB7CisJCXB1c2ggQG5ld19wcm9wcywgIiRwcm9wbmFtZT0kcHJvcHZhbCI7CisJfSBlbHNlIHsKKwkJIyBUT0RPOiBoYW5kbGUgY29tYmluaW5nIHByb3BlcnRpZXMgYmV0dGVyCisJCW15IEBwcm9wcyA9IHNwbGl0KC87LywgJGN1cl9wcm9wcyk7CisJCW15ICRyZXBsYWNlZF9wcm9wOworCQlmb3JlYWNoIG15ICRwcm9wIChAcHJvcHMpIHsKKwkJCSMgUGFyc2UgJ25hbWU9dmFsdWUnIHN5bnRheCBhbmQgc2V0IHRoZSBwcm9wZXJ0eS4KKwkJCWlmICgkcHJvcCA9fiAvKFtePV0rKT0oLiopLykgeworCQkJCW15ICgkbiwkdikgPSAoJDEsJDIpOworCQkJCWlmICgkbiBlcSAkcHJvcG5hbWUpIHsKKwkJCQkJJHYgPSAkcHJvcHZhbDsKKwkJCQkJJHJlcGxhY2VkX3Byb3AgPSAxOworCQkJCX0KKwkJCQlwdXNoIEBuZXdfcHJvcHMsICIkbj0kdiI7CisJCQl9CisJCX0KKwkJaWYgKCEkcmVwbGFjZWRfcHJvcCkgeworCQkJcHVzaCBAbmV3X3Byb3BzLCAiJHByb3BuYW1lPSRwcm9wdmFsIjsKKwkJfQorCX0KKwlteSAkYXR0cmZpbGUgPSAiJGRuLy5naXRhdHRyaWJ1dGVzIjsKKwlvcGVuIG15ICRhdHRyZmgsICc+PicsICRhdHRyZmlsZSBvciBkaWUgIkNhbid0IG9wZW4gJGF0dHJmaWxlOiAkIVxuIjsKKwkjIFRPRE86IGRvbid0IHNpbXBseSBhcHBlbmQgaGVyZSBpZiAkZmlsZSBhbHJlYWR5IGhhcyBzdm4tcHJvcGVydGllcworCW15ICRuZXdfcHJvcHMgPSBqb2luKCc7JywgQG5ld19wcm9wcyk7CisJcHJpbnQgJGF0dHJmaCAiJGZpbGUgc3ZuLXByb3BlcnRpZXM9JG5ld19wcm9wc1xuIiBvcgorCQlkaWUgIndyaXRlIHRvICRhdHRyZmlsZTogJCFcbiI7CisJY2xvc2UgJGF0dHJmaCBvciBkaWUgImNsb3NlICRhdHRyZmlsZTogJCFcbiI7Cit9CisKKyMgY21kX3Byb3BsaXN0IChQQVRIKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByaW50IHRoZSBsaXN0IG9mIFNWTiBwcm9wZXJ0aWVzIGZvciBQQVRILgorc3ViIGNtZF9wcm9wbGlzdCB7CisJbXkgJHBhdGggPSBzaGlmdDsKKwkkcGF0aCA9ICcuJyBpZiBub3QgZGVmaW5lZCAkcGF0aDsKKwlteSAkcHJvcHMgPSBnZXRfc3ZucHJvcHMoJHBhdGgpOworCXByaW50ICJQcm9wZXJ0aWVzIG9uICckcGF0aCc6XG4iOworCWZvcmVhY2ggKHNvcnQga2V5cyAleyRwcm9wc30pIHsKKwkJcHJpbnQgIiAgJF9cbiI7CisJfQorfQorCitzdWIgY21kX211bHRpX2luaXQgeworCW15ICR1cmwgPSBzaGlmdDsKKwl1bmxlc3MgKGRlZmluZWQgJF90cnVuayB8fCBAX2JyYW5jaGVzIHx8IEBfdGFncykgeworCQl1c2FnZSgxKTsKKwl9CisKKwkkX3ByZWZpeCA9ICdvcmlnaW4vJyB1bmxlc3MgZGVmaW5lZCAkX3ByZWZpeDsKKwlpZiAoZGVmaW5lZCAkdXJsKSB7CisJCSR1cmwgPSBjYW5vbmljYWxpemVfdXJsKCR1cmwpOworCQlpbml0X3N1YmRpcihAXyk7CisJfQorCWRvX2dpdF9pbml0X2RiKCk7CisJaWYgKGRlZmluZWQgJF90cnVuaykgeworCQkkX3RydW5rID1+IHMjXi8rIyM7CisJCW15ICR0cnVua19yZWYgPSAncmVmcy9yZW1vdGVzLycgLiAkX3ByZWZpeCAuICd0cnVuayc7CisJCSMgdHJ5IGJvdGggb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgbG9va3VwczoKKwkJbXkgJGdzX3RydW5rID0gZXZhbCB7IEdpdDo6U1ZOLT5uZXcoJHRydW5rX3JlZikgfTsKKwkJdW5sZXNzICgkZ3NfdHJ1bmspIHsKKwkJCW15ICgkdHJ1bmtfdXJsLCAkdHJ1bmtfcGF0aCkgPQorCQkJICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlX3N2bl91cmwoJHVybCwgJF90cnVuayk7CisJCQkkZ3NfdHJ1bmsgPSBHaXQ6OlNWTi0+aW5pdCgkdHJ1bmtfdXJsLCAkdHJ1bmtfcGF0aCwKKwkJCQkJCSAgIHVuZGVmLCAkdHJ1bmtfcmVmKTsKKwkJfQorCX0KKwlyZXR1cm4gdW5sZXNzIEBfYnJhbmNoZXMgfHwgQF90YWdzOworCW15ICRyYSA9ICR1cmwgPyBHaXQ6OlNWTjo6UmEtPm5ldygkdXJsKSA6IHVuZGVmOworCWZvcmVhY2ggbXkgJHBhdGggKEBfYnJhbmNoZXMpIHsKKwkJY29tcGxldGVfdXJsX2xzX2luaXQoJHJhLCAkcGF0aCwgJy0tYnJhbmNoZXMvLWInLCAkX3ByZWZpeCk7CisJfQorCWZvcmVhY2ggbXkgJHBhdGggKEBfdGFncykgeworCQljb21wbGV0ZV91cmxfbHNfaW5pdCgkcmEsICRwYXRoLCAnLS10YWdzLy10JywgJF9wcmVmaXguJ3RhZ3MvJyk7CisJfQorfQorCitzdWIgY21kX211bHRpX2ZldGNoIHsKKwkkR2l0OjpTVk46Om5vX3JldXNlX2V4aXN0aW5nID0gdW5kZWY7CisJbXkgJHJlbW90ZXMgPSBHaXQ6OlNWTjo6cmVhZF9hbGxfcmVtb3RlcygpOworCWZvcmVhY2ggbXkgJHJlcG9faWQgKHNvcnQga2V5cyAlJHJlbW90ZXMpIHsKKwkJaWYgKCRyZW1vdGVzLT57JHJlcG9faWR9LT57dXJsfSkgeworCQkJR2l0OjpTVk46OmZldGNoX2FsbCgkcmVwb19pZCwgJHJlbW90ZXMpOworCQl9CisJfQorfQorCisjIHRoaXMgY29tbWFuZCBpcyBzcGVjaWFsIGJlY2F1c2UgaXQgcmVxdWlyZXMgbm8gbWV0YWRhdGEKK3N1YiBjbWRfY29tbWl0X2RpZmYgeworCW15ICgkdGEsICR0YiwgJHVybCkgPSBAXzsKKwlteSAkdXNhZ2UgPSAidXNhZ2U6ICQwIGNvbW1pdC1kaWZmIC1yPHJldmlzaW9uPiAiLgorCSAgICAgICAgICAgICI8dHJlZS1pc2g+IDx0cmVlLWlzaD4gWzxVUkw+XSI7CisJZmF0YWwoJHVzYWdlKSBpZiAoIWRlZmluZWQgJHRhIHx8ICFkZWZpbmVkICR0Yik7CisJbXkgJHN2bl9wYXRoID0gJyc7CisJaWYgKCFkZWZpbmVkICR1cmwpIHsKKwkJbXkgJGdzID0gZXZhbCB7IEdpdDo6U1ZOLT5uZXcgfTsKKwkJaWYgKCEkZ3MpIHsKKwkJCWZhdGFsKCJOZWVkZWQgVVJMIG9yIHVzYWJsZSBnaXQtc3ZuIC0taWQgaW4gIiwKKwkJCSAgICAgICJ0aGUgY29tbWFuZC1saW5lXG4iLCAkdXNhZ2UpOworCQl9CisJCSR1cmwgPSAkZ3MtPnVybDsKKwkJJHN2bl9wYXRoID0gJGdzLT5wYXRoOworCX0KKwl1bmxlc3MgKGRlZmluZWQgJF9yZXZpc2lvbikgeworCQlmYXRhbCgiLXJ8LS1yZXZpc2lvbiBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50XG4iLCAkdXNhZ2UpOworCX0KKwlpZiAoZGVmaW5lZCAkX21lc3NhZ2UgJiYgZGVmaW5lZCAkX2ZpbGUpIHsKKwkJZmF0YWwoIkJvdGggLS1tZXNzYWdlLy1tIGFuZCAtLWZpbGUvLUYgc3BlY2lmaWVkICIsCisJCSAgICAgICJmb3IgdGhlIGNvbW1pdCBtZXNzYWdlLlxuIiwKKwkJICAgICAgIkkgaGF2ZSBubyBpZGVhIHdoYXQgeW91IG1lYW4iKTsKKwl9CisJaWYgKGRlZmluZWQgJF9maWxlKSB7CisJCSRfbWVzc2FnZSA9IGZpbGVfdG9fcygkX2ZpbGUpOworCX0gZWxzZSB7CisJCSRfbWVzc2FnZSB8fD0gZ2V0X2NvbW1pdF9lbnRyeSgkdGIpLT57bG9nfTsKKwl9CisJbXkgJHJhIHx8PSBHaXQ6OlNWTjo6UmEtPm5ldygkdXJsKTsKKwlteSAkciA9ICRfcmV2aXNpb247CisJaWYgKCRyIGVxICdIRUFEJykgeworCQkkciA9ICRyYS0+Z2V0X2xhdGVzdF9yZXZudW07CisJfSBlbHNpZiAoJHIgIX4gL15cZCskLykgeworCQlkaWUgInJldmlzaW9uIGFyZ3VtZW50OiAkciBub3QgdW5kZXJzdG9vZCBieSBnaXQtc3ZuXG4iOworCX0KKwlteSAlZWRfb3B0cyA9ICggciA9PiAkciwKKwkgICAgICAgICAgICAgICAgbG9nID0+ICRfbWVzc2FnZSwKKwkgICAgICAgICAgICAgICAgcmEgPT4gJHJhLAorCSAgICAgICAgICAgICAgICB0cmVlX2EgPT4gJHRhLAorCSAgICAgICAgICAgICAgICB0cmVlX2IgPT4gJHRiLAorCSAgICAgICAgICAgICAgICBlZGl0b3JfY2IgPT4gc3ViIHsgcHJpbnQgIkNvbW1pdHRlZCByJF9bMF1cbiIgfSwKKwkgICAgICAgICAgICAgICAgc3ZuX3BhdGggPT4gJHN2bl9wYXRoICk7CisJaWYgKCFHaXQ6OlNWTjo6RWRpdG9yLT5uZXcoXCVlZF9vcHRzKS0+YXBwbHlfZGlmZikgeworCQlwcmludCAiTm8gY2hhbmdlc1xuJHRhID09ICR0YlxuIjsKKwl9Cit9CisKK3N1YiBjbWRfaW5mbyB7CisJbXkgJHBhdGhfYXJnID0gZGVmaW5lZCgkX1swXSkgPyAkX1swXSA6ICcuJzsKKwlteSAkcGF0aCA9ICRwYXRoX2FyZzsKKwlpZiAoRmlsZTo6U3BlYy0+ZmlsZV9uYW1lX2lzX2Fic29sdXRlKCRwYXRoKSkgeworCQkkcGF0aCA9IGNhbm9uaWNhbGl6ZV9wYXRoKCRwYXRoKTsKKworCQlteSAkdG9wbGV2ZWwgPSBldmFsIHsKKwkJCW15IEBjbWQgPSBxdy9yZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsLzsKKwkJCWNvbW1hbmRfb25lbGluZShcQGNtZCwgU1RERVJSID0+IDApOworCQl9OworCisJCSMgcmVtb3ZlICR0b3BsZXZlbCBmcm9tIHRoZSBhYnNvbHV0ZSBwYXRoOgorCQlteSAoJHZvbCwgJGRpcnMsICRmaWxlKSA9IEZpbGU6OlNwZWMtPnNwbGl0cGF0aCgkcGF0aCk7CisJCW15ICh1bmRlZiwgJHRkaXJzLCAkdGZpbGUpID0gRmlsZTo6U3BlYy0+c3BsaXRwYXRoKCR0b3BsZXZlbCk7CisJCW15IEBkaXJzID0gRmlsZTo6U3BlYy0+c3BsaXRkaXIoJGRpcnMpOworCQlteSBAdGRpcnMgPSBGaWxlOjpTcGVjLT5zcGxpdGRpcigkdGRpcnMpOworCQlwb3AgQGRpcnMgaWYgJGRpcnNbLTFdIGVxICcnOworCQlwb3AgQHRkaXJzIGlmICR0ZGlyc1stMV0gZXEgJyc7CisJCXB1c2ggQGRpcnMsICRmaWxlOworCQlwdXNoIEB0ZGlycywgJHRmaWxlOworCQl3aGlsZSAoQHRkaXJzICYmIEBkaXJzICYmICR0ZGlyc1swXSBlcSAkZGlyc1swXSkgeworCQkJc2hpZnQgQGRpcnM7CisJCQlzaGlmdCBAdGRpcnM7CisJCX0KKwkJJGRpcnMgPSBGaWxlOjpTcGVjLT5jYXRkaXIoQGRpcnMpOworCQkkcGF0aCA9IEZpbGU6OlNwZWMtPmNhdHBhdGgoJHZvbCwgJGRpcnMpOworCisJCSRwYXRoID0gY2Fub25pY2FsaXplX3BhdGgoJHBhdGgpOworCX0gZWxzZSB7CisJCSRwYXRoID0gY2Fub25pY2FsaXplX3BhdGgoJGNtZF9kaXJfcHJlZml4IC4gJHBhdGgpOworCX0KKwlpZiAoZXhpc3RzICRfWzFdKSB7CisJCWRpZSAiVG9vIG1hbnkgYXJndW1lbnRzIHNwZWNpZmllZFxuIjsKKwl9CisKKwlteSAoJGZpbGVfdHlwZSwgJGRpZmZfc3RhdHVzKSA9IGZpbmRfZmlsZV90eXBlX2FuZF9kaWZmX3N0YXR1cygkcGF0aCk7CisKKwlpZiAoISRmaWxlX3R5cGUgJiYgISRkaWZmX3N0YXR1cykgeworCQlwcmludCBTVERFUlIgInN2bjogJyRwYXRoJyBpcyBub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sXG4iOworCQlleGl0IDE7CisJfQorCisJbXkgKCR1cmwsICRyZXYsICR1dWlkLCAkZ3MpID0gd29ya2luZ19oZWFkX2luZm8oJ0hFQUQnKTsKKwl1bmxlc3MgKCRncykgeworCQlkaWUgIlVuYWJsZSB0byBkZXRlcm1pbmUgdXBzdHJlYW0gU1ZOIGluZm9ybWF0aW9uIGZyb20gIiwKKwkJICAgICJ3b3JraW5nIHRyZWUgaGlzdG9yeVxuIjsKKwl9CisKKwkjIGNhbm9uaWNhbGl6ZV9wYXRoKCkgd2lsbCByZXR1cm4gIiIgdG8gbWFrZSBsaWJzdm4gMS41LnggaGFwcHksCisJJHBhdGggPSAiLiIgaWYgJHBhdGggZXEgIiI7CisKKwlteSAkZnVsbF91cmwgPSBjYW5vbmljYWxpemVfdXJsKCBhZGRfcGF0aF90b191cmwoICR1cmwsICRwYXRoICkgKTsKKworCWlmICgkX3VybCkgeworCQlwcmludCAiJGZ1bGxfdXJsXG4iOworCQlyZXR1cm47CisJfQorCisJbXkgJHJlc3VsdCA9ICJQYXRoOiAkcGF0aF9hcmdcbiI7CisJJHJlc3VsdCAuPSAiTmFtZTogIiAuIGJhc2VuYW1lKCRwYXRoKSAuICJcbiIgaWYgJGZpbGVfdHlwZSBuZSAiZGlyIjsKKwkkcmVzdWx0IC49ICJVUkw6ICRmdWxsX3VybFxuIjsKKworCWV2YWwgeworCQlteSAkcmVwb3Nfcm9vdCA9ICRncy0+cmVwb3Nfcm9vdDsKKwkJR2l0OjpTVk46OnJlbW92ZV91c2VybmFtZSgkcmVwb3Nfcm9vdCk7CisJCSRyZXN1bHQgLj0gIlJlcG9zaXRvcnkgUm9vdDogIiAuIGNhbm9uaWNhbGl6ZV91cmwoJHJlcG9zX3Jvb3QpIC4gIlxuIjsKKwl9OworCWlmICgkQCkgeworCQkkcmVzdWx0IC49ICJSZXBvc2l0b3J5IFJvb3Q6IChvZmZsaW5lKVxuIjsKKwl9CisJOjpfcmVxX3N2bigpOworCSRyZXN1bHQgLj0gIlJlcG9zaXRvcnkgVVVJRDogJHV1aWRcbiIgdW5sZXNzICRkaWZmX3N0YXR1cyBlcSAiQSIgJiYKKwkJKDo6Y29tcGFyZV9zdm5fdmVyc2lvbignMS41LjQnKSA8PSAwIHx8ICRmaWxlX3R5cGUgbmUgImRpciIpOworCSRyZXN1bHQgLj0gIlJldmlzaW9uOiAiIC4gKCRkaWZmX3N0YXR1cyBlcSAiQSIgPyAwIDogJHJldikgLiAiXG4iOworCisJJHJlc3VsdCAuPSAiTm9kZSBLaW5kOiAiIC4KKwkJICAgKCRmaWxlX3R5cGUgZXEgImRpciIgPyAiZGlyZWN0b3J5IiA6ICJmaWxlIikgLiAiXG4iOworCisJbXkgJHNjaGVkdWxlID0gJGRpZmZfc3RhdHVzIGVxICJBIgorCQkgICAgICAgPyAiYWRkIgorCQkgICAgICAgOiAoJGRpZmZfc3RhdHVzIGVxICJEIiA/ICJkZWxldGUiIDogIm5vcm1hbCIpOworCSRyZXN1bHQgLj0gIlNjaGVkdWxlOiAkc2NoZWR1bGVcbiI7CisKKwlpZiAoJGRpZmZfc3RhdHVzIGVxICJBIikgeworCQlwcmludCAkcmVzdWx0LCAiXG4iOworCQlyZXR1cm47CisJfQorCisJbXkgKCRsY19hdXRob3IsICRsY19yZXYsICRsY19kYXRlX3V0Yyk7CisJbXkgQGFyZ3MgPSBHaXQ6OlNWTjo6TG9nOjpnaXRfc3ZuX2xvZ19jbWQoJHJldiwgJHJldiwgIi0tIiwgJHBhdGgpOworCW15ICRsb2cgPSBjb21tYW5kX291dHB1dF9waXBlKEBhcmdzKTsKKwlteSAkZXNjX2NvbG9yID0gcXIvKD86XDAzM1xbKD86KD86XGQrOykqXGQqKT9tKSovOworCXdoaWxlICg8JGxvZz4pIHsKKwkJaWYgKC9eJHtlc2NfY29sb3J9YXV0aG9yICguKykgPFtePl0rPiAoXGQrKSAoW1wtXCtdP1xkKykkL28pIHsKKwkJCSRsY19hdXRob3IgPSAkMTsKKwkJCSRsY19kYXRlX3V0YyA9IEdpdDo6U1ZOOjpMb2c6OnBhcnNlX2dpdF9kYXRlKCQyLCAkMyk7CisJCX0gZWxzaWYgKC9eJHtlc2NfY29sb3J9ICAgIChnaXQtc3ZuLWlkOi4rKSQvbykgeworCQkJKHVuZGVmLCAkbGNfcmV2LCB1bmRlZikgPSA6OmV4dHJhY3RfbWV0YWRhdGEoJDEpOworCQl9CisJfQorCWNsb3NlICRsb2c7CisKKwlHaXQ6OlNWTjo6TG9nOjpzZXRfbG9jYWxfdGltZXpvbmUoKTsKKworCSRyZXN1bHQgLj0gIkxhc3QgQ2hhbmdlZCBBdXRob3I6ICRsY19hdXRob3JcbiI7CisJJHJlc3VsdCAuPSAiTGFzdCBDaGFuZ2VkIFJldjogJGxjX3JldlxuIjsKKwkkcmVzdWx0IC49ICJMYXN0IENoYW5nZWQgRGF0ZTogIiAuCisJCSAgIEdpdDo6U1ZOOjpMb2c6OmZvcm1hdF9zdm5fZGF0ZSgkbGNfZGF0ZV91dGMpIC4gIlxuIjsKKworCWlmICgkZmlsZV90eXBlIG5lICJkaXIiKSB7CisJCW15ICR0ZXh0X2xhc3RfdXBkYXRlZF9kYXRlID0KKwkJICAgICgkZGlmZl9zdGF0dXMgZXEgIkQiID8gJGxjX2RhdGVfdXRjIDogKHN0YXQgJHBhdGgpWzldKTsKKwkJJHJlc3VsdCAuPQorCQkgICAgIlRleHQgTGFzdCBVcGRhdGVkOiAiIC4KKwkJICAgIEdpdDo6U1ZOOjpMb2c6OmZvcm1hdF9zdm5fZGF0ZSgkdGV4dF9sYXN0X3VwZGF0ZWRfZGF0ZSkgLgorCQkgICAgIlxuIjsKKwkJbXkgJGNoZWNrc3VtOworCQlpZiAoJGRpZmZfc3RhdHVzIGVxICJEIikgeworCQkJbXkgKCRmaCwgJGN0eCkgPQorCQkJICAgIGNvbW1hbmRfb3V0cHV0X3BpcGUocXcoY2F0LWZpbGUgYmxvYiksICJIRUFEOiRwYXRoIik7CisJCQlpZiAoJGZpbGVfdHlwZSBlcSAibGluayIpIHsKKwkJCQlteSAkZmlsZV9uYW1lID0gPCRmaD47CisJCQkJJGNoZWNrc3VtID0gbWQ1c3VtKCJsaW5rICRmaWxlX25hbWUiKTsKKwkJCX0gZWxzZSB7CisJCQkJJGNoZWNrc3VtID0gbWQ1c3VtKCRmaCk7CisJCQl9CisJCQljb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkY3R4KTsKKwkJfSBlbHNpZiAoJGZpbGVfdHlwZSBlcSAibGluayIpIHsKKwkJCW15ICRmaWxlX25hbWUgPQorCQkJICAgIGNvbW1hbmQocXcoY2F0LWZpbGUgYmxvYiksICJIRUFEOiRwYXRoIik7CisJCQkkY2hlY2tzdW0gPQorCQkJICAgIG1kNXN1bSgibGluayAiIC4gJGZpbGVfbmFtZSk7CisJCX0gZWxzZSB7CisJCQlvcGVuIEZJTEUsICI8IiwgJHBhdGggb3IgZGllICQhOworCQkJJGNoZWNrc3VtID0gbWQ1c3VtKFwqRklMRSk7CisJCQljbG9zZSBGSUxFIG9yIGRpZSAkITsKKwkJfQorCQkkcmVzdWx0IC49ICJDaGVja3N1bTogIiAuICRjaGVja3N1bSAuICJcbiI7CisJfQorCisJcHJpbnQgJHJlc3VsdCwgIlxuIjsKK30KKworc3ViIGNtZF9yZXNldCB7CisJbXkgJHRhcmdldCA9IHNoaWZ0IHx8ICRfcmV2aXNpb24gb3IgZGllICJTVk4gcmV2aXNpb24gcmVxdWlyZWRcbiI7CisJJHRhcmdldCA9ICQxIGlmICR0YXJnZXQgPX4gL15yKFxkKykkLzsKKwkkdGFyZ2V0ID1+IC9eXGQrJC8gb3IgZGllICJOdW1lcmljIFNWTiByZXZpc2lvbiBleHBlY3RlZFxuIjsKKwlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSB3b3JraW5nX2hlYWRfaW5mbygnSEVBRCcpOworCXVubGVzcyAoJGdzKSB7CisJCWRpZSAiVW5hYmxlIHRvIGRldGVybWluZSB1cHN0cmVhbSBTVk4gaW5mb3JtYXRpb24gZnJvbSAiLgorCQkgICAgImhpc3RvcnlcbiI7CisJfQorCW15ICgkciwgJGMpID0gJGdzLT5maW5kX3Jldl9iZWZvcmUoJHRhcmdldCwgbm90ICRfZmV0Y2hfcGFyZW50KTsKKwlkaWUgIkNhbm5vdCBmaW5kIFNWTiByZXZpc2lvbiAkdGFyZ2V0XG4iIHVubGVzcyBkZWZpbmVkKCRjKTsKKwkkZ3MtPnJldl9tYXBfc2V0KCRyLCAkYywgJ3Jlc2V0JywgJHV1aWQpOworCXByaW50ICJyJHIgPSAkYyAoJGdzLT57cmVmX2lkfSlcbiI7Cit9CisKK3N1YiBjbWRfZ2MgeworCXJlcXVpcmUgRmlsZTo6RmluZDsKKwlpZiAoIWNhbl9jb21wcmVzcygpKSB7CisJCXdhcm4gIkNvbXByZXNzOjpabGliIGNvdWxkIG5vdCBiZSBmb3VuZDsgdW5oYW5kbGVkLmxvZyAiIC4KKwkJICAgICAiZmlsZXMgd2lsbCBub3QgYmUgY29tcHJlc3NlZC5cbiI7CisJfQorCUZpbGU6OkZpbmQ6OmZpbmQoeyB3YW50ZWQgPT4gXCZnY19kaXJlY3RvcnksIG5vX2NoZGlyID0+IDF9LAorCQkJICIkRU5We0dJVF9ESVJ9L3N2biIpOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgdXRpbGl0eSBmdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzdWIgcmViYXNlX2NtZCB7CisJbXkgQGNtZCA9IHF3L3JlYmFzZS87CisJcHVzaCBAY21kLCAnLXYnIGlmICRfdmVyYm9zZTsKKwlwdXNoIEBjbWQsIHF3Ly0tbWVyZ2UvIGlmICRfbWVyZ2U7CisJcHVzaCBAY21kLCAiLS1zdHJhdGVneT0kX3N0cmF0ZWd5IiBpZiAkX3N0cmF0ZWd5OworCXB1c2ggQGNtZCwgIi0tcHJlc2VydmUtbWVyZ2VzIiBpZiAkX3ByZXNlcnZlX21lcmdlczsKKwlAY21kOworfQorCitzdWIgcG9zdF9mZXRjaF9jaGVja291dCB7CisJcmV0dXJuIGlmICRfbm9fY2hlY2tvdXQ7CisJcmV0dXJuIGlmIHZlcmlmeV9yZWYoJ0hFQUReMCcpOworCW15ICRncyA9ICRHaXQ6OlNWTjo6X2hlYWQgb3IgcmV0dXJuOworCisJIyBsb29rIGZvciAidHJ1bmsiIHJlZiBpZiBpdCBleGlzdHMKKwlteSAkcmVtb3RlID0gR2l0OjpTVk46OnJlYWRfYWxsX3JlbW90ZXMoKS0+eyRncy0+e3JlcG9faWR9fTsKKwlteSAkZmV0Y2ggPSAkcmVtb3RlLT57ZmV0Y2h9OworCWlmICgkZmV0Y2gpIHsKKwkJZm9yZWFjaCBteSAkcCAoa2V5cyAlJGZldGNoKSB7CisJCQliYXNlbmFtZSgkZmV0Y2gtPnskcH0pIGVxICd0cnVuaycgb3IgbmV4dDsKKwkJCSRncyA9IEdpdDo6U1ZOLT5uZXcoJGZldGNoLT57JHB9LCAkZ3MtPntyZXBvX2lkfSwgJHApOworCQkJbGFzdDsKKwkJfQorCX0KKworCWNvbW1hbmRfbm9pc3kocXcodXBkYXRlLXJlZiBIRUFEKSwgJGdzLT5yZWZuYW1lKTsKKwlyZXR1cm4gdW5sZXNzIHZlcmlmeV9yZWYoJ0hFQUReMCcpOworCisJcmV0dXJuIGlmICRFTlZ7R0lUX0RJUn0gIX4gbSNeKD86LiovKT9cLmdpdCQjOworCW15ICRpbmRleCA9ICRFTlZ7R0lUX0lOREVYX0ZJTEV9IHx8ICIkRU5We0dJVF9ESVJ9L2luZGV4IjsKKwlyZXR1cm4gaWYgLWYgJGluZGV4OworCisJcmV0dXJuIGlmIGNvbW1hbmRfb25lbGluZShxdy9yZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlLykgZXEgJ2ZhbHNlJzsKKwlyZXR1cm4gaWYgY29tbWFuZF9vbmVsaW5lKHF3L3Jldi1wYXJzZSAtLWlzLWluc2lkZS1naXQtZGlyLykgZXEgJ3RydWUnOworCWNvbW1hbmRfbm9pc3kocXcvcmVhZC10cmVlIC1tIC11IC12IEhFQUQgSEVBRC8pOworCXByaW50IFNUREVSUiAiQ2hlY2tlZCBvdXQgSEVBRDpcbiAgIiwKKwkgICAgICAgICAgICAgJGdzLT5mdWxsX3VybCwgIiByIiwgJGdzLT5sYXN0X3JldiwgIlxuIjsKKwlpZiAoYXV0b19jcmVhdGVfZW1wdHlfZGlyZWN0b3JpZXMoJGdzKSkgeworCQkkZ3MtPm1rZW1wdHlkaXJzKCRncy0+bGFzdF9yZXYpOworCX0KK30KKworc3ViIGNvbXBsZXRlX3N2bl91cmwgeworCW15ICgkdXJsLCAkcGF0aCkgPSBAXzsKKwkkcGF0aCA9IGNhbm9uaWNhbGl6ZV9wYXRoKCRwYXRoKTsKKworCSMgSWYgdGhlIHBhdGggaXMgbm90IGEgVVJMLi4uCisJaWYgKCRwYXRoICF+IG0jXlthLXpcK10rOi8vIykgeworCQlpZiAoIWRlZmluZWQgJHVybCB8fCAkdXJsICF+IG0jXlthLXpcK10rOi8vIykgeworCQkJZmF0YWwoIkU6ICckcGF0aCcgaXMgbm90IGEgY29tcGxldGUgVVJMICIsCisJCQkgICAgICAiYW5kIGEgc2VwYXJhdGUgVVJMIGlzIG5vdCBzcGVjaWZpZWQiKTsKKwkJfQorCQlyZXR1cm4gKCR1cmwsICRwYXRoKTsKKwl9CisJcmV0dXJuICgkcGF0aCwgJycpOworfQorCitzdWIgY29tcGxldGVfdXJsX2xzX2luaXQgeworCW15ICgkcmEsICRyZXBvX3BhdGgsICRzd2l0Y2gsICRwZngpID0gQF87CisJdW5sZXNzICgkcmVwb19wYXRoKSB7CisJCXByaW50IFNUREVSUiAiVzogJHN3aXRjaCBub3Qgc3BlY2lmaWVkXG4iOworCQlyZXR1cm47CisJfQorCSRyZXBvX3BhdGggPSBjYW5vbmljYWxpemVfcGF0aCgkcmVwb19wYXRoKTsKKwlpZiAoJHJlcG9fcGF0aCA9fiBtI15bYS16XCtdKzovLyMpIHsKKwkJJHJhID0gR2l0OjpTVk46OlJhLT5uZXcoJHJlcG9fcGF0aCk7CisJCSRyZXBvX3BhdGggPSAnJzsKKwl9IGVsc2UgeworCQkkcmVwb19wYXRoID1+IHMjXi8rIyM7CisJCXVubGVzcyAoJHJhKSB7CisJCQlmYXRhbCgiRTogJyRyZXBvX3BhdGgnIGlzIG5vdCBhIGNvbXBsZXRlIFVSTCAiLAorCQkJICAgICAgImFuZCBhIHNlcGFyYXRlIFVSTCBpcyBub3Qgc3BlY2lmaWVkIik7CisJCX0KKwl9CisJbXkgJHVybCA9ICRyYS0+dXJsOworCW15ICRncyA9IEdpdDo6U1ZOLT5pbml0KCR1cmwsIHVuZGVmLCB1bmRlZiwgdW5kZWYsIDEpOworCW15ICRrID0gInN2bi1yZW1vdGUuJGdzLT57cmVwb19pZH0udXJsIjsKKwlteSAkb3JpZ191cmwgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKHF3L2NvbmZpZyAtLWdldC8sICRrKSB9OworCWlmICgkb3JpZ191cmwgJiYgKCRvcmlnX3VybCBuZSAkZ3MtPnVybCkpIHsKKwkJZGllICIkayBhbHJlYWR5IHNldDogJG9yaWdfdXJsXG4iLAorCQkgICAgIndhbnRlZCB0byBzZXQgdG86ICRncy0+dXJsXG4iOworCX0KKwljb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICRrLCAkZ3MtPnVybCkgdW5sZXNzICRvcmlnX3VybDsKKworCW15ICRyZW1vdGVfcGF0aCA9IGpvaW5fcGF0aHMoICRncy0+cGF0aCwgJHJlcG9fcGF0aCApOworCSRyZW1vdGVfcGF0aCA9fiBzeyUoWzAtOUEtRl17Mn0pfXtjaHIgaGV4KCQxKX1pZWc7CisJJHJlbW90ZV9wYXRoID1+IHMjXi8jI2c7CisJJHJlbW90ZV9wYXRoIC49ICIvKiIgaWYgJHJlbW90ZV9wYXRoICF+IC9cKi87CisJbXkgKCRuKSA9ICgkc3dpdGNoID1+IC9eLS0oXHcrKS8pOworCWlmIChsZW5ndGggJHBmeCAmJiAkcGZ4ICF+IG0jLyQjKSB7CisJCWRpZSAiLS1wcmVmaXg9JyRwZngnIG11c3QgaGF2ZSBhIHRyYWlsaW5nIHNsYXNoICcvJ1xuIjsKKwl9CisJY29tbWFuZF9ub2lzeSgnY29uZmlnJywKKwkJICAgICAgJy0tYWRkJywKKwkgICAgICAgICAgICAgICJzdm4tcmVtb3RlLiRncy0+e3JlcG9faWR9LiRuIiwKKwkgICAgICAgICAgICAgICIkcmVtb3RlX3BhdGg6cmVmcy9yZW1vdGVzLyRwZngqIiAuCisJICAgICAgICAgICAgICAgICgnLyonIHggKCgkcmVtb3RlX3BhdGggPX4gdHIvKi8qLykgLSAxKSkgKTsKK30KKworc3ViIHZlcmlmeV9yZWYgeworCW15ICgkcmVmKSA9IEBfOworCWV2YWwgeyBjb21tYW5kX29uZWxpbmUoWyAncmV2LXBhcnNlJywgJy0tdmVyaWZ5JywgJHJlZiBdLAorCSAgICAgICAgICAgICAgICAgICAgICAgeyBTVERFUlIgPT4gMCB9KTsgfTsKK30KKworc3ViIGdldF90cmVlX2Zyb21fdHJlZWlzaCB7CisJbXkgKCR0cmVlaXNoKSA9IEBfOworCSMgJHRyZWVpc2ggY2FuIGJlIGEgc3ltYm9saWMgcmVmLCB0b286CisJbXkgJHR5cGUgPSBjb21tYW5kX29uZWxpbmUocXcvY2F0LWZpbGUgLXQvLCAkdHJlZWlzaCk7CisJbXkgJGV4cGVjdGVkOworCXdoaWxlICgkdHlwZSBlcSAndGFnJykgeworCQkoJHRyZWVpc2gsICR0eXBlKSA9IGNvbW1hbmQocXcvY2F0LWZpbGUgdGFnLywgJHRyZWVpc2gpOworCX0KKwlpZiAoJHR5cGUgZXEgJ2NvbW1pdCcpIHsKKwkJJGV4cGVjdGVkID0gKGdyZXAgL150cmVlIC8sIGNvbW1hbmQocXcvY2F0LWZpbGUgY29tbWl0LywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyZWVpc2gpKVswXTsKKwkJKCRleHBlY3RlZCkgPSAoJGV4cGVjdGVkID1+IC9edHJlZSAoJHNoYTEpJC9vKTsKKwkJZGllICJVbmFibGUgdG8gZ2V0IHRyZWUgZnJvbSAkdHJlZWlzaFxuIiB1bmxlc3MgJGV4cGVjdGVkOworCX0gZWxzaWYgKCR0eXBlIGVxICd0cmVlJykgeworCQkkZXhwZWN0ZWQgPSAkdHJlZWlzaDsKKwl9IGVsc2UgeworCQlkaWUgIiR0cmVlaXNoIGlzIGEgJHR5cGUsIGV4cGVjdGVkIHRyZWUsIHRhZyBvciBjb21taXRcbiI7CisJfQorCXJldHVybiAkZXhwZWN0ZWQ7Cit9CisKK3N1YiBnZXRfY29tbWl0X2VudHJ5IHsKKwlteSAoJHRyZWVpc2gpID0gc2hpZnQ7CisJbXkgJWxvZ19lbnRyeSA9ICggbG9nID0+ICcnLCB0cmVlID0+IGdldF90cmVlX2Zyb21fdHJlZWlzaCgkdHJlZWlzaCkgKTsKKwlteSAkY29tbWl0X2VkaXRtc2cgPSAiJEVOVntHSVRfRElSfS9DT01NSVRfRURJVE1TRyI7CisJbXkgJGNvbW1pdF9tc2cgPSAiJEVOVntHSVRfRElSfS9DT01NSVRfTVNHIjsKKwlvcGVuIG15ICRsb2dfZmgsICc+JywgJGNvbW1pdF9lZGl0bXNnIG9yIGNyb2FrICQhOworCisJbXkgJHR5cGUgPSBjb21tYW5kX29uZWxpbmUocXcvY2F0LWZpbGUgLXQvLCAkdHJlZWlzaCk7CisJaWYgKCR0eXBlIGVxICdjb21taXQnIHx8ICR0eXBlIGVxICd0YWcnKSB7CisJCW15ICgkbXNnX2ZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoJ2NhdC1maWxlJywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdHlwZSwgJHRyZWVpc2gpOworCQlteSAkaW5fbXNnID0gMDsKKwkJbXkgJGF1dGhvcjsKKwkJbXkgJHNhd19mcm9tID0gMDsKKwkJbXkgJG1zZ2J1ZiA9ICIiOworCQl3aGlsZSAoPCRtc2dfZmg+KSB7CisJCQlpZiAoISRpbl9tc2cpIHsKKwkJCQkkaW5fbXNnID0gMSBpZiAoL14kLyk7CisJCQkJJGF1dGhvciA9ICQxIGlmICgvXmF1dGhvciAoLio+KS8pOworCQkJfSBlbHNpZiAoL15naXQtc3ZuLWlkOiAvKSB7CisJCQkJIyBza2lwIHRoaXMgZm9yIG5vdywgd2UgcmVnZW5lcmF0ZSB0aGUKKwkJCQkjIGNvcnJlY3Qgb25lIG9uIHJlLWZldGNoIGFueXdheXMKKwkJCQkjIFRPRE86IHNldCAqOm1lcmdlIHByb3BlcnRpZXMgb3IgbGlrZS4uLgorCQkJfSBlbHNlIHsKKwkJCQlpZiAoL15Gcm9tOi8gfHwgL15TaWduZWQtb2ZmLWJ5Oi8pIHsKKwkJCQkJJHNhd19mcm9tID0gMTsKKwkJCQl9CisJCQkJJG1zZ2J1ZiAuPSAkXzsKKwkJCX0KKwkJfQorCQkkbXNnYnVmID1+IHMvXHMrJC8vczsKKwkJaWYgKCRHaXQ6OlNWTjo6X2FkZF9hdXRob3JfZnJvbSAmJiBkZWZpbmVkKCRhdXRob3IpCisJCSAgICAmJiAhJHNhd19mcm9tKSB7CisJCQkkbXNnYnVmIC49ICJcblxuRnJvbTogJGF1dGhvciI7CisJCX0KKwkJcHJpbnQgJGxvZ19maCAkbXNnYnVmIG9yIGNyb2FrICQhOworCQljb21tYW5kX2Nsb3NlX3BpcGUoJG1zZ19maCwgJGN0eCk7CisJfQorCWNsb3NlICRsb2dfZmggb3IgY3JvYWsgJCE7CisKKwlpZiAoJF9lZGl0IHx8ICgkdHlwZSBlcSAndHJlZScpKSB7CisJCWNob21wKG15ICRlZGl0b3IgPSBjb21tYW5kX29uZWxpbmUocXcodmFyIEdJVF9FRElUT1IpKSk7CisJCXN5c3RlbSgnc2gnLCAnLWMnLCAkZWRpdG9yLicgIiRAIicsICRlZGl0b3IsICRjb21taXRfZWRpdG1zZyk7CisJfQorCXJlbmFtZSAkY29tbWl0X2VkaXRtc2csICRjb21taXRfbXNnIG9yIGNyb2FrICQhOworCXsKKwkJcmVxdWlyZSBFbmNvZGU7CisJCSMgU1ZOIHJlcXVpcmVzIG1lc3NhZ2VzIHRvIGJlIFVURi04IHdoZW4gZW50ZXJpbmcgdGhlIHJlcG8KKwkJbG9jYWwgJC87CisJCW9wZW4gJGxvZ19maCwgJzwnLCAkY29tbWl0X21zZyBvciBjcm9hayAkITsKKwkJYmlubW9kZSAkbG9nX2ZoOworCQljaG9tcCgkbG9nX2VudHJ5e2xvZ30gPSA8JGxvZ19maD4pOworCisJCW15ICRlbmMgPSBHaXQ6OmNvbmZpZygnaTE4bi5jb21taXRlbmNvZGluZycpIHx8ICdVVEYtOCc7CisJCW15ICRtc2cgPSAkbG9nX2VudHJ5e2xvZ307CisKKwkJZXZhbCB7ICRtc2cgPSBFbmNvZGU6OmRlY29kZSgkZW5jLCAkbXNnLCAxKSB9OworCQlpZiAoJEApIHsKKwkJCWRpZSAiQ291bGQgbm90IGRlY29kZSBhcyAkZW5jOlxuIiwgJG1zZywKKwkJCSAgICAiXG5QZXJoYXBzIHlvdSBuZWVkIHRvIHNldCBpMThuLmNvbW1pdGVuY29kaW5nXG4iOworCQl9CisKKwkJZXZhbCB7ICRtc2cgPSBFbmNvZGU6OmVuY29kZSgnVVRGLTgnLCAkbXNnLCAxKSB9OworCQlkaWUgIkNvdWxkIG5vdCBlbmNvZGUgYXMgVVRGLTg6XG4kbXNnXG4iIGlmICRAOworCisJCSRsb2dfZW50cnl7bG9nfSA9ICRtc2c7CisKKwkJY2xvc2UgJGxvZ19maCBvciBjcm9hayAkITsKKwl9CisJdW5saW5rICRjb21taXRfbXNnOworCVwlbG9nX2VudHJ5OworfQorCitzdWIgc190b19maWxlIHsKKwlteSAoJHN0ciwgJGZpbGUsICRtb2RlKSA9IEBfOworCW9wZW4gbXkgJGZkLCc+JywkZmlsZSBvciBjcm9hayAkITsKKwlwcmludCAkZmQgJHN0ciwiXG4iIG9yIGNyb2FrICQhOworCWNsb3NlICRmZCBvciBjcm9hayAkITsKKwljaG1vZCAoJG1vZGUgJn4gdW1hc2ssICRmaWxlKSBpZiAoZGVmaW5lZCAkbW9kZSk7Cit9CisKK3N1YiBmaWxlX3RvX3MgeworCW15ICRmaWxlID0gc2hpZnQ7CisJb3BlbiBteSAkZmQsJzwnLCRmaWxlIG9yIGNyb2FrICIkITogZmlsZTogJGZpbGVcbiI7CisJbG9jYWwgJC87CisJbXkgJHJldCA9IDwkZmQ+OworCWNsb3NlICRmZCBvciBjcm9hayAkITsKKwkkcmV0ID1+IHMvXHMqJC8vczsKKwlyZXR1cm4gJHJldDsKK30KKworIyAnPHN2biB1c2VybmFtZT4gPSByZWFsLW5hbWUgPGVtYWlsIGFkZHJlc3M+JyBtYXBwaW5nIGJhc2VkIG9uIGdpdC1zdm5pbXBvcnQ6CitzdWIgbG9hZF9hdXRob3JzIHsKKwlvcGVuIG15ICRhdXRob3JzLCAnPCcsICRfYXV0aG9ycyBvciBkaWUgIkNhbid0IG9wZW4gJF9hdXRob3JzICQhXG4iOworCW15ICRsb2cgPSAkY21kIGVxICdsb2cnOworCXdoaWxlICg8JGF1dGhvcnM+KSB7CisJCWNob21wOworCQluZXh0IHVubGVzcyAvXiguKz98XChubyBhdXRob3JcKSlccyo9XHMqKC4rPylccyo8KC4qKT5ccyokLzsKKwkJbXkgKCR1c2VyLCAkbmFtZSwgJGVtYWlsKSA9ICgkMSwgJDIsICQzKTsKKwkJaWYgKCRsb2cpIHsKKwkJCSRHaXQ6OlNWTjo6TG9nOjpydXNlcnN7IiRuYW1lIDwkZW1haWw+In0gPSAkdXNlcjsKKwkJfSBlbHNlIHsKKwkJCSR1c2Vyc3skdXNlcn0gPSBbJG5hbWUsICRlbWFpbF07CisJCX0KKwl9CisJY2xvc2UgJGF1dGhvcnMgb3IgY3JvYWsgJCE7Cit9CisKKyMgY29udmVydCBHZXRPcHQ6Okxvbmcgc3BlY3MgZm9yIHVzZSBieSBnaXQtY29uZmlnCitzdWIgcmVhZF9naXRfY29uZmlnIHsKKwlteSAkb3B0cyA9IHNoaWZ0OworCW15IEBjb25maWdfb25seTsKKwlmb3JlYWNoIG15ICRvIChrZXlzICUkb3B0cykgeworCQkjIGlmIHdlIGhhdmUgbWl4ZWRDYXNlIGFuZCBhIGxvbmcgb3B0aW9uLW9ubHksIHRoZW4KKwkJIyBpdCdzIGEgY29uZmlnLW9ubHkgdmFyaWFibGUgdGhhdCB3ZSBkb24ndCBuZWVkIGZvcgorCQkjIHRoZSBjb21tYW5kLWxpbmUuCisJCXB1c2ggQGNvbmZpZ19vbmx5LCAkbyBpZiAoJG8gPX4gL1tBLVpdLyAmJiAkbyA9fiAvXlthLXpdKyQvaSk7CisJCW15ICR2ID0gJG9wdHMtPnskb307CisJCW15ICgka2V5KSA9ICgkbyA9fiAvXihbYS16QS1aXC1dKykvKTsKKwkJJGtleSA9fiBzLy0vL2c7CisJCW15ICRhcmcgPSAnZ2l0IGNvbmZpZyc7CisJCSRhcmcgLj0gJyAtLWludCcgaWYgKCRvID1+IC9bOj1daSQvKTsKKwkJJGFyZyAuPSAnIC0tYm9vbCcgaWYgKCRvICF+IC9bOj1dW3NmaV0kLyk7CisJCWlmIChyZWYgJHYgZXEgJ0FSUkFZJykgeworCQkJY2hvbXAobXkgQHRtcCA9IGAkYXJnIC0tZ2V0LWFsbCBzdm4uJGtleWApOworCQkJQCR2ID0gQHRtcCBpZiBAdG1wOworCQl9IGVsc2UgeworCQkJY2hvbXAobXkgJHRtcCA9IGAkYXJnIC0tZ2V0IHN2bi4ka2V5YCk7CisJCQlpZiAoJHRtcCAmJiAhKCRhcmcgPX4gLyAtLWJvb2wvICYmICR0bXAgZXEgJ2ZhbHNlJykpIHsKKwkJCQkkJHYgPSAkdG1wOworCQkJfQorCQl9CisJfQorCWRlbGV0ZSBAJG9wdHN7QGNvbmZpZ19vbmx5fSBpZiBAY29uZmlnX29ubHk7Cit9CisKK3N1YiBleHRyYWN0X21ldGFkYXRhIHsKKwlteSAkaWQgPSBzaGlmdCBvciByZXR1cm4gKHVuZGVmLCB1bmRlZiwgdW5kZWYpOworCW15ICgkdXJsLCAkcmV2LCAkdXVpZCkgPSAoJGlkID1+IC9eXHMqZ2l0LXN2bi1pZDpccysoLiopXEAoXGQrKQorCQkJCQkJCVxzKFthLWZcZFwtXSspJC9peCk7CisJaWYgKCFkZWZpbmVkICRyZXYgfHwgISR1dWlkIHx8ICEkdXJsKSB7CisJCSMgc29tZSBvZiB0aGUgb3JpZ2luYWwgcmVwb3NpdG9yaWVzIEkgbWFkZSBoYWQKKwkJIyBpZGVudGlmaWVycyBsaWtlIHRoaXM6CisJCSgkcmV2LCAkdXVpZCkgPSAoJGlkID1+L15ccypnaXQtc3ZuLWlkOlxzKFxkKylcQChbYS1mXGRcLV0rKS9pKTsKKwl9CisJcmV0dXJuICgkdXJsLCAkcmV2LCAkdXVpZCk7Cit9CisKK3N1YiBjbXRfbWV0YWRhdGEgeworCXJldHVybiBleHRyYWN0X21ldGFkYXRhKChncmVwKC9eZ2l0LXN2bi1pZDogLywKKwkJY29tbWFuZChxdy9jYXQtZmlsZSBjb21taXQvLCBzaGlmdCkpKVstMV0pOworfQorCitzdWIgY210X3NoYTJyZXZfYmF0Y2ggeworCW15ICVzMnI7CisJbXkgKCRwaWQsICRpbiwgJG91dCwgJGN0eCkgPSBjb21tYW5kX2JpZGlfcGlwZShxdy9jYXQtZmlsZSAtLWJhdGNoLyk7CisJbXkgJGxpc3QgPSBzaGlmdDsKKworCWZvcmVhY2ggbXkgJHNoYSAoQHskbGlzdH0pIHsKKwkJbXkgJGZpcnN0ID0gMTsKKwkJbXkgJHNpemUgPSAwOworCQlwcmludCAkb3V0ICRzaGEsICJcbiI7CisKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRpbj4pIHsKKwkJCWlmICgkZmlyc3QgJiYgJGxpbmUgPX4gL15bWzp4ZGlnaXQ6XV17NDB9XHNtaXNzaW5nJC8pIHsKKwkJCQlsYXN0OworCQkJfSBlbHNpZiAoJGZpcnN0ICYmCisJCQkgICAgICAgJGxpbmUgPX4gL15bWzp4ZGlnaXQ6XV17NDB9XHNjb21taXRccyhcZCspJC8pIHsKKwkJCQkkZmlyc3QgPSAwOworCQkJCSRzaXplID0gJDE7CisJCQkJbmV4dDsKKwkJCX0gZWxzaWYgKCRsaW5lID1+IC9eKGdpdC1zdm4taWQ6ICkvKSB7CisJCQkJbXkgKHVuZGVmLCAkcmV2LCB1bmRlZikgPQorCQkJCSAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0X21ldGFkYXRhKCRsaW5lKTsKKwkJCQkkczJyeyRzaGF9ID0gJHJldjsKKwkJCX0KKworCQkJJHNpemUgLT0gbGVuZ3RoKCRsaW5lKTsKKwkJCWxhc3QgaWYgKCRzaXplID09IDApOworCQl9CisJfQorCisJY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoJHBpZCwgJGluLCAkb3V0LCAkY3R4KTsKKworCXJldHVybiBcJXMycjsKK30KKworc3ViIHdvcmtpbmdfaGVhZF9pbmZvIHsKKwlteSAoJGhlYWQsICRyZWZzKSA9IEBfOworCW15IEBhcmdzID0gcXcvcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1wcmV0dHk9bWVkaXVtLzsKKwlteSAoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQGFyZ3MsICRoZWFkLCAiLS0iKTsKKwlteSAkaGFzaDsKKwlteSAlbWF4OworCXdoaWxlICg8JGZoPikgeworCQlpZiAoIG17XmNvbW1pdCAoJDo6c2hhMSkkfSApIHsKKwkJCXVuc2hpZnQgQCRyZWZzLCAkaGFzaCBpZiAkaGFzaCBhbmQgJHJlZnM7CisJCQkkaGFzaCA9ICQxOworCQkJbmV4dDsKKwkJfQorCQluZXh0IHVubGVzcyBze15ccyooZ2l0LXN2bi1pZDopfXskMX07CisJCW15ICgkdXJsLCAkcmV2LCAkdXVpZCkgPSBleHRyYWN0X21ldGFkYXRhKCRfKTsKKwkJaWYgKGRlZmluZWQgJHVybCAmJiBkZWZpbmVkICRyZXYpIHsKKwkJCW5leHQgaWYgJG1heHskdXJsfSBhbmQgJG1heHskdXJsfSA8ICRyZXY7CisJCQlpZiAobXkgJGdzID0gR2l0OjpTVk4tPmZpbmRfYnlfdXJsKCR1cmwpKSB7CisJCQkJbXkgJGMgPSAkZ3MtPnJldl9tYXBfZ2V0KCRyZXYsICR1dWlkKTsKKwkJCQlpZiAoJGMgJiYgJGMgZXEgJGhhc2gpIHsKKwkJCQkJY2xvc2UgJGZoOyAjIGJyZWFrIHRoZSBwaXBlCisJCQkJCXJldHVybiAoJHVybCwgJHJldiwgJHV1aWQsICRncyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJJG1heHskdXJsfSB8fD0gJGdzLT5yZXZfbWFwX21heDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRmaCwgJGN0eCk7CisJKHVuZGVmLCB1bmRlZiwgdW5kZWYsIHVuZGVmKTsKK30KKworc3ViIHJlYWRfY29tbWl0X3BhcmVudHMgeworCW15ICgkcGFyZW50cywgJGMpID0gQF87CisJY2hvbXAobXkgJHAgPSBjb21tYW5kX29uZWxpbmUocXcvcmV2LWxpc3QgLS1wYXJlbnRzIC0xLywgJGMpKTsKKwkkcCA9fiBzL14oJGMpXHMqLy8gb3IgZGllICJyZXYtbGlzdCAtLXBhcmVudHMgLTEgJGMgZmFpbGVkIVxuIjsKKwlAeyRwYXJlbnRzLT57JGN9fSA9IHNwbGl0KC8gLywgJHApOworfQorCitzdWIgbGluZWFyaXplX2hpc3RvcnkgeworCW15ICgkZ3MsICRyZWZzKSA9IEBfOworCW15ICVwYXJlbnRzOworCWZvcmVhY2ggbXkgJGMgKEAkcmVmcykgeworCQlyZWFkX2NvbW1pdF9wYXJlbnRzKFwlcGFyZW50cywgJGMpOworCX0KKworCW15IEBsaW5lYXJfcmVmczsKKwlteSAlc2tpcCA9ICgpOworCW15ICRsYXN0X3N2bl9jb21taXQgPSAkZ3MtPmxhc3RfY29tbWl0OworCWZvcmVhY2ggbXkgJGMgKHJldmVyc2UgQCRyZWZzKSB7CisJCW5leHQgaWYgJGMgZXEgJGxhc3Rfc3ZuX2NvbW1pdDsKKwkJbGFzdCBpZiAkc2tpcHskY307CisKKwkJdW5zaGlmdCBAbGluZWFyX3JlZnMsICRjOworCQkkc2tpcHskY30gPSAxOworCisJCSMgd2Ugb25seSB3YW50IHRoZSBmaXJzdCBwYXJlbnQgdG8gZGlmZiBhZ2FpbnN0IGZvciBsaW5lYXIKKwkJIyBoaXN0b3J5LCB3ZSBzYXZlIHRoZSByZXN0IHRvIGluamVjdCB3aGVuIHdlIGZpbmFsaXplIHRoZQorCQkjIHN2biBjb21taXQKKwkJbXkgJGZwX2EgPSB2ZXJpZnlfcmVmKCIkY34xIik7CisJCW15ICRmcF9iID0gc2hpZnQgQHskcGFyZW50c3skY319IGlmICRwYXJlbnRzeyRjfTsKKwkJaWYgKCEkZnBfYSB8fCAhJGZwX2IpIHsKKwkJCWRpZSAiQ29tbWl0ICRjXG4iLAorCQkJICAgICJoYXMgbm8gcGFyZW50IGNvbW1pdCwgYW5kIHRoZXJlZm9yZSAiLAorCQkJICAgICJub3RoaW5nIHRvIGRpZmYgYWdhaW5zdC5cbiIsCisJCQkgICAgIllvdSBzaG91bGQgYmUgd29ya2luZyBmcm9tIGEgcmVwb3NpdG9yeSAiLAorCQkJICAgICJvcmlnaW5hbGx5IGNyZWF0ZWQgYnkgZ2l0LXN2blxuIjsKKwkJfQorCQlpZiAoJGZwX2EgbmUgJGZwX2IpIHsKKwkJCWRpZSAiJGN+MSA9ICRmcF9hLCBob3dldmVyIHBhcnNpbmcgY29tbWl0ICRjICIsCisJCQkgICAgInJldmVhbGVkIHRoYXQ6XG4kY34xID0gJGZwX2JcbkJVRyFcbiI7CisJCX0KKworCQlmb3JlYWNoIG15ICRwIChAeyRwYXJlbnRzeyRjfX0pIHsKKwkJCSRza2lweyRwfSA9IDE7CisJCX0KKwl9CisJKFxAbGluZWFyX3JlZnMsIFwlcGFyZW50cyk7Cit9CisKK3N1YiBmaW5kX2ZpbGVfdHlwZV9hbmRfZGlmZl9zdGF0dXMgeworCW15ICgkcGF0aCkgPSBAXzsKKwlyZXR1cm4gKCdkaXInLCAnJykgaWYgJHBhdGggZXEgJyc7CisKKwlteSAkZGlmZl9vdXRwdXQgPQorCSAgICBjb21tYW5kX29uZWxpbmUocXcoZGlmZiAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIC0tKSwgJHBhdGgpIHx8ICIiOworCW15ICRkaWZmX3N0YXR1cyA9IChzcGxpdCgnICcsICRkaWZmX291dHB1dCkpWzBdIHx8ICIiOworCisJbXkgJGxzX3RyZWUgPSBjb21tYW5kX29uZWxpbmUocXcobHMtdHJlZSBIRUFEKSwgJHBhdGgpIHx8ICIiOworCisJcmV0dXJuICh1bmRlZiwgdW5kZWYpIGlmICEkZGlmZl9zdGF0dXMgJiYgISRsc190cmVlOworCisJaWYgKCRkaWZmX3N0YXR1cyBlcSAiQSIpIHsKKwkJcmV0dXJuICgibGluayIsICRkaWZmX3N0YXR1cykgaWYgLWwgJHBhdGg7CisJCXJldHVybiAoImRpciIsICRkaWZmX3N0YXR1cykgaWYgLWQgJHBhdGg7CisJCXJldHVybiAoImZpbGUiLCAkZGlmZl9zdGF0dXMpOworCX0KKworCW15ICRtb2RlID0gKHNwbGl0KCcgJywgJGxzX3RyZWUpKVswXSB8fCAiIjsKKworCXJldHVybiAoImxpbmsiLCAkZGlmZl9zdGF0dXMpIGlmICRtb2RlIGVxICIxMjAwMDAiOworCXJldHVybiAoImRpciIsICRkaWZmX3N0YXR1cykgaWYgJG1vZGUgZXEgIjA0MDAwMCI7CisJcmV0dXJuICgiZmlsZSIsICRkaWZmX3N0YXR1cyk7Cit9CisKK3N1YiBtZDVzdW0geworCW15ICRhcmcgPSBzaGlmdDsKKwlteSAkcmVmID0gcmVmICRhcmc7CisJcmVxdWlyZSBEaWdlc3Q6Ok1ENTsKKwlteSAkbWQ1ID0gRGlnZXN0OjpNRDUtPm5ldygpOworICAgICAgICBpZiAoJHJlZiBlcSAnR0xPQicgfHwgJHJlZiBlcSAnSU86OkZpbGUnIHx8ICRyZWYgZXEgJ0ZpbGU6OlRlbXAnKSB7CisJCSRtZDUtPmFkZGZpbGUoJGFyZykgb3IgY3JvYWsgJCE7CisJfSBlbHNpZiAoJHJlZiBlcSAnU0NBTEFSJykgeworCQkkbWQ1LT5hZGQoJCRhcmcpIG9yIGNyb2FrICQhOworCX0gZWxzaWYgKCEkcmVmKSB7CisJCSRtZDUtPmFkZCgkYXJnKSBvciBjcm9hayAkITsKKwl9IGVsc2UgeworCQlmYXRhbCAiQ2FuJ3QgcHJvdmlkZSBNRDUgaGFzaCBmb3IgdW5rbm93biByZWYgdHlwZTogJyIsICRyZWYsICInIjsKKwl9CisJcmV0dXJuICRtZDUtPmhleGRpZ2VzdCgpOworfQorCitzdWIgZ2NfZGlyZWN0b3J5IHsKKwlpZiAoY2FuX2NvbXByZXNzKCkgJiYgLWYgJF8gJiYgYmFzZW5hbWUoJF8pIGVxICJ1bmhhbmRsZWQubG9nIikgeworCQlteSAkb3V0X2ZpbGVuYW1lID0gJF8gLiAiLmd6IjsKKwkJb3BlbiBteSAkaW5fZmgsICI8IiwgJF8gb3IgZGllICJVbmFibGUgdG8gb3BlbiAkXzogJCFcbiI7CisJCWJpbm1vZGUgJGluX2ZoOworCQlteSAkZ3ogPSBDb21wcmVzczo6WmxpYjo6Z3pvcGVuKCRvdXRfZmlsZW5hbWUsICJhYiIpIG9yCisJCQkJZGllICJVbmFibGUgdG8gb3BlbiAkb3V0X2ZpbGVuYW1lOiAkIVxuIjsKKworCQlteSAkcmVzOworCQl3aGlsZSAoJHJlcyA9IHN5c3JlYWQoJGluX2ZoLCBteSAkc3RyLCAxMDI0KSkgeworCQkJJGd6LT5nendyaXRlKCRzdHIpIG9yCisJCQkJZGllICJVbmFibGUgdG8gd3JpdGU6ICIuJGd6LT5nemVycm9yKCkuIiFcbiI7CisJCX0KKwkJbm8gd2FybmluZ3MgJ29uY2UnOyAjICRGaWxlOjpGaW5kOjpuYW1lIHdvdWxkIHdhcm4KKwkJdW5saW5rICRfIG9yIGRpZSAidW5saW5rICRGaWxlOjpGaW5kOjpuYW1lOiAkIVxuIjsKKwl9IGVsc2lmICgtZiAkXyAmJiBiYXNlbmFtZSgkXykgZXEgImluZGV4IikgeworCQl1bmxpbmsgJF8gb3IgZGllICJ1bmxpbmsgJF86ICQhXG4iOworCX0KK30KKworX19FTkRfXworCitEYXRhIHN0cnVjdHVyZXM6CisKKworJHJlbW90ZXMgPSB7ICMgcmV0dXJuZWQgYnkgcmVhZF9hbGxfcmVtb3RlcygpCisJJ3N2bicgPT4geworCQkjIHN2bi1yZW1vdGUuc3ZuLnVybD1odHRwczovL3N2bi5tdXNpY3BkLm9yZworCQl1cmwgPT4gJ2h0dHBzOi8vc3ZuLm11c2ljcGQub3JnJywKKwkJIyBzdm4tcmVtb3RlLnN2bi5mZXRjaD1tcGQvdHJ1bms6dHJ1bmsKKwkJZmV0Y2ggPT4geworCQkJJ21wZC90cnVuaycgPT4gJ3RydW5rJywKKwkJfSwKKwkJIyBzdm4tcmVtb3RlLnN2bi50YWdzPW1wZC90YWdzLyo6dGFncy8qCisJCXRhZ3MgPT4geworCQkJcGF0aCA9PiB7CisJCQkJbGVmdCA9PiAnbXBkL3RhZ3MnLAorCQkJCXJpZ2h0ID0+ICcnLAorCQkJCXJlZ2V4ID0+IHFyIW1wZC90YWdzLyhbXi9dKykkISwKKwkJCQlnbG9iID0+ICd0YWdzLyonLAorCQkJfSwKKwkJCXJlZiA9PiB7CisJCQkJbGVmdCA9PiAndGFncycsCisJCQkJcmlnaHQgPT4gJycsCisJCQkJcmVnZXggPT4gcXIhdGFncy8oW14vXSspJCEsCisJCQkJZ2xvYiA9PiAndGFncy8qJywKKwkJCX0sCisJCX0KKwl9Cit9OworCiskbG9nX2VudHJ5IGhhc2hyZWYgYXMgcmV0dXJuZWQgYnkgbGlic3ZuX2xvZ19lbnRyeSgpCit7CisJbG9nID0+ICd3aGl0ZXNwYWNlLWZvcm1hdHRlZCBsb2cgZW50cnkKKycsCQkJCQkJIyB0cmFpbGluZyBuZXdsaW5lIGlzIHByZXNlcnZlZAorCXJldmlzaW9uID0+ICc4JywJCQkjIGludGVnZXIKKwlkYXRlID0+ICcyMDA0LTAyLTI0VDE3OjAxOjQ0LjEwODM0NVonLAkjIGNvbW1pdCBkYXRlCisJYXV0aG9yID0+ICdjb21taXR0ZXIgbmFtZScKK307CisKKworIyB0aGlzIGlzIGdlbmVyYXRlZCBieSBnZW5lcmF0ZV9kaWZmKCk7CitAbW9kcyA9IGFycmF5IG9mIGRpZmYtaW5kZXggbGluZSBoYXNoZXMsIGVhY2ggZWxlbWVudCByZXByZXNlbnRzIG9uZSBsaW5lCisJb2YgZGlmZi1pbmRleCBvdXRwdXQKKworZGlmZi1pbmRleCBsaW5lICgkbSBoYXNoKQoreworCW1vZGVfYSA9PiBmaXJzdCBjb2x1bW4gb2YgZGlmZi1pbmRleCBvdXRwdXQsIG5vIGxlYWRpbmcgJzonLAorCW1vZGVfYiA9PiBzZWNvbmQgY29sdW1uIG9mIGRpZmYtaW5kZXggb3V0cHV0LAorCXNoYTFfYiA9PiBzaGExc3VtIG9mIHRoZSBmaW5hbCBibG9iLAorCWNoZyA9PiBjaGFuZ2UgdHlwZSBbTUNSQURUXSwKKwlmaWxlX2EgPT4gb3JpZ2luYWwgZmlsZSBuYW1lIG9mIGEgZmlsZSAoaWZmIGNoZyBpcyAnQycgb3IgJ1InKQorCWZpbGVfYiA9PiBuZXcvY3VycmVudCBmaWxlIG5hbWUgb2YgYSBmaWxlIChhbnkgY2hnKQorfQorOworCisjIHJldHZhbCBvZiByZWFkX3VybF9wYXRoc3ssX2FsbH0oKTsKKyRsX21hcCA9IHsKKwkjIHJlcG9zaXRvcnkgcm9vdCB1cmwKKwknaHR0cHM6Ly9zdm4ubXVzaWNwZC5vcmcnID0+IHsKKwkJIyByZXBvc2l0b3J5IHBhdGggCQkjIEdJVF9TVk5fSUQKKwkJJ21wZC90cnVuaycJCT0+CSd0cnVuaycsCisJCSdtcGQvdGFncy8wLjExLjUnCT0+CSd0YWdzLzAuMTEuNScsCisJfSwKK30KKworTm90ZXM6CisJSSBkb24ndCB0cnVzdCB0aGUgZWFjaCgpIGZ1bmN0aW9uIG9uIHVubGVzcyBJIGNyZWF0ZWQgJWhhc2ggbXlzZWxmCisJYmVjYXVzZSB0aGUgaW50ZXJuYWwgaXRlcmF0b3IgbWF5IG5vdCBoYXZlIHN0YXJ0ZWQgYXQgYmFzZS4KZGlmZiAtLWdpdCBhL2dpdC13ZWItLWJyb3dzZS5zaCBiL2dpdC13ZWItLWJyb3dzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZTE1MjUzCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LXdlYi0tYnJvd3NlLnNoCkBAIC0wLDAgKzEsMTk2IEBACisjIS9iaW4vc2gKKyMKKyMgVGhpcyBwcm9ncmFtIGxhdW5jaCBhIHdlYiBicm93c2VyIG9uIHRoZSBodG1sIHBhZ2UKKyMgZGVzY3JpYmluZyBhIGdpdCBjb21tYW5kLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2hyaXN0aWFuIENvdWRlcgorIyBDb3B5cmlnaHQgKGMpIDIwMDYgVGhlb2RvcmUgWS4gVHMnbworIworIyBUaGlzIGZpbGUgaXMgaGVhdmlseSBzdG9sZW4gZnJvbSBnaXQtbWVyZ2V0b29sLnNoLCBieQorIyBUaGVvZG9yZSBZLiBUcydvICh0aGFua3MpIHRoYXQgaXM6CisjCisjIENvcHlyaWdodCAoYykgMjAwNiBUaGVvZG9yZSBZLiBUcydvCisjCisjIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KKyMgYXQgdGhlIGRpc2NyZXRpb24gb2YgSnVuaW8gQyBIYW1hbm8gb3IgYW55IG90aGVyIG9mZmljaWFsCisjIGdpdCBtYWludGFpbmVyLgorIworCitVU0FHRT0nWy0tYnJvd3Nlcj1icm93c2VyfC0tdG9vbD1icm93c2VyXSBbLS1jb25maWc9Y29uZi52YXJdIHVybC9maWxlIC4uLicKKworIyBUaGlzIG11c3QgYmUgY2FwYWJsZSBvZiBydW5uaW5nIG91dHNpZGUgb2YgZ2l0IGRpcmVjdG9yeSwgc28KKyMgdGhlIHZhbmlsbGEgZ2l0LXNoLXNldHVwIHNob3VsZCBub3QgYmUgdXNlZC4KK05PTkdJVF9PSz1ZZXMKKy4gZ2l0LXNoLXNldHVwCisKK3ZhbGlkX2N1c3RvbV90b29sKCkKK3sKKwlicm93c2VyX2NtZD0iJChnaXQgY29uZmlnICJicm93c2VyLiQxLmNtZCIpIgorCXRlc3QgLW4gIiRicm93c2VyX2NtZCIKK30KKwordmFsaWRfdG9vbCgpIHsKKwljYXNlICIkMSIgaW4KKwlmaXJlZm94IHwgaWNld2Vhc2VsIHwgc2VhbW9ua2V5IHwgaWNlYXBlIHwgXAorCWNocm9tZSB8IGdvb2dsZS1jaHJvbWUgfCBjaHJvbWl1bSB8IGNocm9taXVtLWJyb3dzZXIgfCBcCisJa29ucXVlcm9yIHwgb3BlcmEgfCB3M20gfCBlbGlua3MgfCBsaW5rcyB8IGx5bnggfCBkaWxsbyB8IG9wZW4gfCBcCisJc3RhcnQgfCBjeWdzdGFydCB8IHhkZy1vcGVuKQorCQk7OyAjIGhhcHB5CisJKikKKwkJdmFsaWRfY3VzdG9tX3Rvb2wgIiQxIiB8fCByZXR1cm4gMQorCQk7OworCWVzYWMKK30KKworaW5pdF9icm93c2VyX3BhdGgoKSB7CisJYnJvd3Nlcl9wYXRoPSQoZ2l0IGNvbmZpZyAiYnJvd3Nlci4kMS5wYXRoIikKKwlpZiB0ZXN0IC16ICIkYnJvd3Nlcl9wYXRoIiAmJgorCSAgIHRlc3QgIiQxIiA9IGNocm9taXVtICYmCisJICAgdHlwZSBjaHJvbWl1bS1icm93c2VyID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJYnJvd3Nlcl9wYXRoPWNocm9taXVtLWJyb3dzZXIKKwlmaQorCTogJHticm93c2VyX3BhdGg6PSIkMSJ9Cit9CisKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKwljYXNlICIkMSIgaW4KKwktYnwtLWJyb3dzZXIqfC10fC0tdG9vbCopCisJCWNhc2UgIiQjLCQxIiBpbgorCQkqLCo9KikKKwkJCWJyb3dzZXI9JChleHByICJ6JDEiIDogJ3otW149XSo9XCguKlwpJykKKwkJCTs7CisJCTEsKikKKwkJCXVzYWdlIDs7CisJCSopCisJCQlicm93c2VyPSIkMiIKKwkJCXNoaWZ0IDs7CisJCWVzYWMKKwkJOzsKKwktY3wtLWNvbmZpZyopCisJCWNhc2UgIiQjLCQxIiBpbgorCQkqLCo9KikKKwkJCWNvbmY9JChleHByICJ6JDEiIDogJ3otW149XSo9XCguKlwpJykKKwkJCTs7CisJCTEsKikKKwkJCXVzYWdlIDs7CisJCSopCisJCQljb25mPSIkMiIKKwkJCXNoaWZ0IDs7CisJCWVzYWMKKwkJOzsKKwktLSkKKwkJYnJlYWsKKwkJOzsKKwktKikKKwkJdXNhZ2UKKwkJOzsKKwkqKQorCQlicmVhaworCQk7OworCWVzYWMKKwlzaGlmdAorZG9uZQorCit0ZXN0ICQjID0gMCAmJiB1c2FnZQorCitpZiB0ZXN0IC16ICIkYnJvd3NlciIKK3RoZW4KKwlmb3Igb3B0IGluICIkY29uZiIgIndlYi5icm93c2VyIgorCWRvCisJCXRlc3QgLXogIiRvcHQiICYmIGNvbnRpbnVlCisJCWJyb3dzZXI9IiQoZ2l0IGNvbmZpZyAkb3B0KSIKKwkJdGVzdCAteiAiJGJyb3dzZXIiIHx8IGJyZWFrCisJZG9uZQorCWlmIHRlc3QgLW4gIiRicm93c2VyIiAmJiAhIHZhbGlkX3Rvb2wgIiRicm93c2VyIjsgdGhlbgorCQllY2hvID4mMiAiZ2l0IGNvbmZpZyBvcHRpb24gJG9wdCBzZXQgdG8gdW5rbm93biBicm93c2VyOiAkYnJvd3NlciIKKwkJZWNobyA+JjIgIlJlc2V0dGluZyB0byBkZWZhdWx0Li4uIgorCQl1bnNldCBicm93c2VyCisJZmkKK2ZpCisKK2lmIHRlc3QgLXogIiRicm93c2VyIiA7IHRoZW4KKwlpZiB0ZXN0IC1uICIkRElTUExBWSI7IHRoZW4KKwkJYnJvd3Nlcl9jYW5kaWRhdGVzPSJmaXJlZm94IGljZXdlYXNlbCBnb29nbGUtY2hyb21lIGNocm9tZSBjaHJvbWl1bSBjaHJvbWl1bS1icm93c2VyIGtvbnF1ZXJvciBvcGVyYSBzZWFtb25rZXkgaWNlYXBlIHczbSBlbGlua3MgbGlua3MgbHlueCBkaWxsbyB4ZGctb3BlbiIKKwkJaWYgdGVzdCAiJEtERV9GVUxMX1NFU1NJT04iID0gInRydWUiOyB0aGVuCisJCQlicm93c2VyX2NhbmRpZGF0ZXM9ImtvbnF1ZXJvciAkYnJvd3Nlcl9jYW5kaWRhdGVzIgorCQlmaQorCWVsc2UKKwkJYnJvd3Nlcl9jYW5kaWRhdGVzPSJ3M20gZWxpbmtzIGxpbmtzIGx5bngiCisJZmkKKwkjIFNFQ1VSSVRZU0VTU0lPTklEIGluZGljYXRlcyBhbiBPUyBYIEdVSSBsb2dpbiBzZXNzaW9uCisJaWYgdGVzdCAtbiAiJFNFQ1VSSVRZU0VTU0lPTklEIiB8fCB0ZXN0IC1uICIkVEVSTV9QUk9HUkFNIgorCXRoZW4KKwkJYnJvd3Nlcl9jYW5kaWRhdGVzPSJvcGVuICRicm93c2VyX2NhbmRpZGF0ZXMiCisJZmkKKwkjIC9iaW4vc3RhcnQgaW5kaWNhdGVzIE1pbkdXCisJaWYgdGVzdCAteCAvYmluL3N0YXJ0OyB0aGVuCisJCWJyb3dzZXJfY2FuZGlkYXRlcz0ic3RhcnQgJGJyb3dzZXJfY2FuZGlkYXRlcyIKKwlmaQorCSMgL3Vzci9iaW4vY3lnc3RhcnQgaW5kaWNhdGVzIEN5Z3dpbgorCWlmIHRlc3QgLXggL3Vzci9iaW4vY3lnc3RhcnQ7IHRoZW4KKwkJYnJvd3Nlcl9jYW5kaWRhdGVzPSJjeWdzdGFydCAkYnJvd3Nlcl9jYW5kaWRhdGVzIgorCWZpCisKKwlmb3IgaSBpbiAkYnJvd3Nlcl9jYW5kaWRhdGVzOyBkbworCQlpbml0X2Jyb3dzZXJfcGF0aCAkaQorCQlpZiB0eXBlICIkYnJvd3Nlcl9wYXRoIiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCQlicm93c2VyPSRpCisJCQlicmVhaworCQlmaQorCWRvbmUKKwl0ZXN0IC16ICIkYnJvd3NlciIgJiYgZGllICJObyBrbm93biBicm93c2VyIGF2YWlsYWJsZS4iCitlbHNlCisJdmFsaWRfdG9vbCAiJGJyb3dzZXIiIHx8IGRpZSAiVW5rbm93biBicm93c2VyICckYnJvd3NlcicuIgorCisJaW5pdF9icm93c2VyX3BhdGggIiRicm93c2VyIgorCisJaWYgdGVzdCAteiAiJGJyb3dzZXJfY21kIiAmJiAhIHR5cGUgIiRicm93c2VyX3BhdGgiID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZGllICJUaGUgYnJvd3NlciAkYnJvd3NlciBpcyBub3QgYXZhaWxhYmxlIGFzICckYnJvd3Nlcl9wYXRoJy4iCisJZmkKK2ZpCisKK2Nhc2UgIiRicm93c2VyIiBpbgorZmlyZWZveHxpY2V3ZWFzZWx8c2VhbW9ua2V5fGljZWFwZSkKKwkjIENoZWNrIHZlcnNpb24gYmVjYXVzZSBmaXJlZm94IDwgMi4wIGRvZXMgbm90IHN1cHBvcnQgIi1uZXctdGFiIi4KKwl2ZXJzPSQoZXhwciAiJCgkYnJvd3Nlcl9wYXRoIC12ZXJzaW9uKSIgOiAnLiogXChbMC05XVswLTldKlwpXC4uKicpCisJTkVXVEFCPSctbmV3LXRhYicKKwl0ZXN0ICIkdmVycyIgLWx0IDIgJiYgTkVXVEFCPScnCisJIiRicm93c2VyX3BhdGgiICRORVdUQUIgIiRAIiAmCisJOzsKK2dvb2dsZS1jaHJvbWV8Y2hyb21lfGNocm9taXVtfGNocm9taXVtLWJyb3dzZXIpCisJIyBObyBuZWVkIHRvIHNwZWNpZnkgbmV3VGFiLiBJdCdzIGRlZmF1bHQgaW4gY2hyb21pdW0KKwkiJGJyb3dzZXJfcGF0aCIgIiRAIiAmCisJOzsKK2tvbnF1ZXJvcikKKwljYXNlICIkKGJhc2VuYW1lICIkYnJvd3Nlcl9wYXRoIikiIGluCisJa29ucXVlcm9yKQorCQkjIEl0J3Mgc2ltcGxlciB0byB1c2Uga2ZtY2xpZW50IHRvIG9wZW4gYSBuZXcgdGFiIGluIGtvbnF1ZXJvci4KKwkJYnJvd3Nlcl9wYXRoPSIkKGVjaG8gIiRicm93c2VyX3BhdGgiIHwgc2VkIC1lICdzL2tvbnF1ZXJvciQva2ZtY2xpZW50LycpIgorCQl0eXBlICIkYnJvd3Nlcl9wYXRoIiA+IC9kZXYvbnVsbCAyPiYxIHx8IGRpZSAiTm8gJyRicm93c2VyX3BhdGgnIGZvdW5kLiIKKwkJIiRicm93c2VyX3BhdGgiIG5ld1RhYiAiJEAiICYKKwkJOzsKKwlrZm1jbGllbnQpCisJCSIkYnJvd3Nlcl9wYXRoIiBuZXdUYWIgIiRAIiAmCisJCTs7CisJKikKKwkJIiRicm93c2VyX3BhdGgiICIkQCIgJgorCQk7OworCWVzYWMKKwk7OwordzNtfGVsaW5rc3xsaW5rc3xseW54fG9wZW58Y3lnc3RhcnR8eGRnLW9wZW4pCisJIiRicm93c2VyX3BhdGgiICIkQCIKKwk7Oworc3RhcnQpCisJZXhlYyAiJGJyb3dzZXJfcGF0aCIgJyJ3ZWItYnJvd3NlIicgIiRAIgorCTs7CitvcGVyYXxkaWxsbykKKwkiJGJyb3dzZXJfcGF0aCIgIiRAIiAmCisJOzsKKyopCisJaWYgdGVzdCAtbiAiJGJyb3dzZXJfY21kIjsgdGhlbgorCQkoIGV2YWwgIiRicm93c2VyX2NtZCBcIlwkQFwiIiApCisJZmkKKwk7OworZXNhYwpkaWZmIC0tZ2l0IGEvZ2l0LmMgYi9naXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWQ4MjRjCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0LmMKQEAgLTAsMCArMSw3MTAgQEAKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJoZWxwLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKworY29uc3QgY2hhciBnaXRfdXNhZ2Vfc3RyaW5nW10gPQorCSJnaXQgWy0tdmVyc2lvbl0gWy0taGVscF0gWy1DIDxwYXRoPl0gWy1jIG5hbWU9dmFsdWVdXG4iCisJIiAgICAgICAgICAgWy0tZXhlYy1wYXRoWz08cGF0aD5dXSBbLS1odG1sLXBhdGhdIFstLW1hbi1wYXRoXSBbLS1pbmZvLXBhdGhdXG4iCisJIiAgICAgICAgICAgWy1wIHwgLS1wYWdpbmF0ZSB8IC0tbm8tcGFnZXJdIFstLW5vLXJlcGxhY2Utb2JqZWN0c10gWy0tYmFyZV1cbiIKKwkiICAgICAgICAgICBbLS1naXQtZGlyPTxwYXRoPl0gWy0td29yay10cmVlPTxwYXRoPl0gWy0tbmFtZXNwYWNlPTxuYW1lPl1cbiIKKwkiICAgICAgICAgICA8Y29tbWFuZD4gWzxhcmdzPl0iOworCitjb25zdCBjaGFyIGdpdF9tb3JlX2luZm9fc3RyaW5nW10gPQorCU5fKCInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisJICAgImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKwkgICAidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC4iKTsKKworc3RhdGljIHN0cnVjdCBzdGFydHVwX2luZm8gZ2l0X3N0YXJ0dXBfaW5mbzsKK3N0YXRpYyBpbnQgdXNlX3BhZ2VyID0gLTE7CitzdGF0aWMgY2hhciAqb3JpZ19jd2Q7CitzdGF0aWMgY29uc3QgY2hhciAqZW52X25hbWVzW10gPSB7CisJR0lUX0RJUl9FTlZJUk9OTUVOVCwKKwlHSVRfV09SS19UUkVFX0VOVklST05NRU5ULAorCUdJVF9JTVBMSUNJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsCisJR0lUX1BSRUZJWF9FTlZJUk9OTUVOVAorfTsKK3N0YXRpYyBjaGFyICpvcmlnX2Vudls0XTsKK3N0YXRpYyBpbnQgc2F2ZWRfZW52aXJvbm1lbnQ7CisKK3N0YXRpYyB2b2lkIHNhdmVfZW52KHZvaWQpCit7CisJaW50IGk7CisJaWYgKHNhdmVkX2Vudmlyb25tZW50KQorCQlyZXR1cm47CisJc2F2ZWRfZW52aXJvbm1lbnQgPSAxOworCW9yaWdfY3dkID0geGdldGN3ZCgpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVudl9uYW1lcyk7IGkrKykgeworCQlvcmlnX2VudltpXSA9IGdldGVudihlbnZfbmFtZXNbaV0pOworCQlpZiAob3JpZ19lbnZbaV0pCisJCQlvcmlnX2VudltpXSA9IHhzdHJkdXAob3JpZ19lbnZbaV0pOworCX0KK30KKworc3RhdGljIHZvaWQgcmVzdG9yZV9lbnYodm9pZCkKK3sKKwlpbnQgaTsKKwlpZiAob3JpZ19jd2QgJiYgY2hkaXIob3JpZ19jd2QpKQorCQlkaWVfZXJybm8oImNvdWxkIG5vdCBtb3ZlIHRvICVzIiwgb3JpZ19jd2QpOworCWZyZWUob3JpZ19jd2QpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVudl9uYW1lcyk7IGkrKykgeworCQlpZiAob3JpZ19lbnZbaV0pCisJCQlzZXRlbnYoZW52X25hbWVzW2ldLCBvcmlnX2VudltpXSwgMSk7CisJCWVsc2UKKwkJCXVuc2V0ZW52KGVudl9uYW1lc1tpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb21taXRfcGFnZXJfY2hvaWNlKHZvaWQpIHsKKwlzd2l0Y2ggKHVzZV9wYWdlcikgeworCWNhc2UgMDoKKwkJc2V0ZW52KCJHSVRfUEFHRVIiLCAiY2F0IiwgMSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJc2V0dXBfcGFnZXIoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGhhbmRsZV9vcHRpb25zKGNvbnN0IGNoYXIgKioqYXJndiwgaW50ICphcmdjLCBpbnQgKmVudmNoYW5nZWQpCit7CisJY29uc3QgY2hhciAqKm9yaWdfYXJndiA9ICphcmd2OworCisJd2hpbGUgKCphcmdjID4gMCkgeworCQljb25zdCBjaGFyICpjbWQgPSAoKmFyZ3YpWzBdOworCQlpZiAoY21kWzBdICE9ICctJykKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIEZvciBsZWdhY3kgcmVhc29ucywgdGhlICJ2ZXJzaW9uIiBhbmQgImhlbHAiCisJCSAqIGNvbW1hbmRzIGNhbiBiZSB3cml0dGVuIHdpdGggIi0tIiBwcmVwZW5kZWQKKwkJICogdG8gbWFrZSB0aGVtIGxvb2sgbGlrZSBmbGFncy4KKwkJICovCisJCWlmICghc3RyY21wKGNtZCwgIi0taGVscCIpIHx8ICFzdHJjbXAoY21kLCAiLS12ZXJzaW9uIikpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBDaGVjayByZW1haW5pbmcgZmxhZ3MuCisJCSAqLworCQlpZiAoc2tpcF9wcmVmaXgoY21kLCAiLS1leGVjLXBhdGgiLCAmY21kKSkgeworCQkJaWYgKCpjbWQgPT0gJz0nKQorCQkJCWdpdF9zZXRfYXJndl9leGVjX3BhdGgoY21kICsgMSk7CisJCQllbHNlIHsKKwkJCQlwdXRzKGdpdF9leGVjX3BhdGgoKSk7CisJCQkJZXhpdCgwKTsKKwkJCX0KKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0taHRtbC1wYXRoIikpIHsKKwkJCXB1dHMoc3lzdGVtX3BhdGgoR0lUX0hUTUxfUEFUSCkpOworCQkJZXhpdCgwKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbWFuLXBhdGgiKSkgeworCQkJcHV0cyhzeXN0ZW1fcGF0aChHSVRfTUFOX1BBVEgpKTsKKwkJCWV4aXQoMCk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWluZm8tcGF0aCIpKSB7CisJCQlwdXRzKHN5c3RlbV9wYXRoKEdJVF9JTkZPX1BBVEgpKTsKKwkJCWV4aXQoMCk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItcCIpIHx8ICFzdHJjbXAoY21kLCAiLS1wYWdpbmF0ZSIpKSB7CisJCQl1c2VfcGFnZXIgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1uby1wYWdlciIpKSB7CisJCQl1c2VfcGFnZXIgPSAwOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1uby1yZXBsYWNlLW9iamVjdHMiKSkgeworCQkJY2hlY2tfcmVwbGFjZV9yZWZzID0gMDsKKwkJCXNldGVudihOT19SRVBMQUNFX09CSkVDVFNfRU5WSVJPTk1FTlQsICIxIiwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWdpdC1kaXIiKSkgeworCQkJaWYgKCphcmdjIDwgMikgeworCQkJCWZwcmludGYoc3RkZXJyLCAiTm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLWdpdC1kaXIuXG4iICk7CisJCQkJdXNhZ2UoZ2l0X3VzYWdlX3N0cmluZyk7CisJCQl9CisJCQlzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgKCphcmd2KVsxXSwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCQkoKmFyZ3YpKys7CisJCQkoKmFyZ2MpLS07CisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoY21kLCAiLS1naXQtZGlyPSIsICZjbWQpKSB7CisJCQlzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgY21kLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0tbmFtZXNwYWNlIikpIHsKKwkJCWlmICgqYXJnYyA8IDIpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIk5vIG5hbWVzcGFjZSBnaXZlbiBmb3IgLS1uYW1lc3BhY2UuXG4iICk7CisJCQkJdXNhZ2UoZ2l0X3VzYWdlX3N0cmluZyk7CisJCQl9CisJCQlzZXRlbnYoR0lUX05BTUVTUEFDRV9FTlZJUk9OTUVOVCwgKCphcmd2KVsxXSwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCQkoKmFyZ3YpKys7CisJCQkoKmFyZ2MpLS07CisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoY21kLCAiLS1uYW1lc3BhY2U9IiwgJmNtZCkpIHsKKwkJCXNldGVudihHSVRfTkFNRVNQQUNFX0VOVklST05NRU5ULCBjbWQsIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS13b3JrLXRyZWUiKSkgeworCQkJaWYgKCphcmdjIDwgMikgeworCQkJCWZwcmludGYoc3RkZXJyLCAiTm8gZGlyZWN0b3J5IGdpdmVuIGZvciAtLXdvcmstdHJlZS5cbiIgKTsKKwkJCQl1c2FnZShnaXRfdXNhZ2Vfc3RyaW5nKTsKKwkJCX0KKwkJCXNldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5ULCAoKmFyZ3YpWzFdLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJCSgqYXJndikrKzsKKwkJCSgqYXJnYyktLTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChjbWQsICItLXdvcmstdHJlZT0iLCAmY21kKSkgeworCQkJc2V0ZW52KEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsIGNtZCwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItLWJhcmUiKSkgeworCQkJY2hhciAqY3dkID0geGdldGN3ZCgpOworCQkJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IDE7CisJCQlzZXRlbnYoR0lUX0RJUl9FTlZJUk9OTUVOVCwgY3dkLCAwKTsKKwkJCWZyZWUoY3dkKTsKKwkJCXNldGVudihHSVRfSU1QTElDSVRfV09SS19UUkVFX0VOVklST05NRU5ULCAiMCIsIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLWMiKSkgeworCQkJaWYgKCphcmdjIDwgMikgeworCQkJCWZwcmludGYoc3RkZXJyLCAiLWMgZXhwZWN0cyBhIGNvbmZpZ3VyYXRpb24gc3RyaW5nXG4iICk7CisJCQkJdXNhZ2UoZ2l0X3VzYWdlX3N0cmluZyk7CisJCQl9CisJCQlnaXRfY29uZmlnX3B1c2hfcGFyYW1ldGVyKCgqYXJndilbMV0pOworCQkJKCphcmd2KSsrOworCQkJKCphcmdjKS0tOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1saXRlcmFsLXBhdGhzcGVjcyIpKSB7CisJCQlzZXRlbnYoR0lUX0xJVEVSQUxfUEFUSFNQRUNTX0VOVklST05NRU5ULCAiMSIsIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1uby1saXRlcmFsLXBhdGhzcGVjcyIpKSB7CisJCQlzZXRlbnYoR0lUX0xJVEVSQUxfUEFUSFNQRUNTX0VOVklST05NRU5ULCAiMCIsIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1nbG9iLXBhdGhzcGVjcyIpKSB7CisJCQlzZXRlbnYoR0lUX0dMT0JfUEFUSFNQRUNTX0VOVklST05NRU5ULCAiMSIsIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1ub2dsb2ItcGF0aHNwZWNzIikpIHsKKwkJCXNldGVudihHSVRfTk9HTE9CX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgIjEiLCAxKTsKKwkJCWlmIChlbnZjaGFuZ2VkKQorCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNtZCwgIi0taWNhc2UtcGF0aHNwZWNzIikpIHsKKwkJCXNldGVudihHSVRfSUNBU0VfUEFUSFNQRUNTX0VOVklST05NRU5ULCAiMSIsIDEpOworCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJKmVudmNoYW5nZWQgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiLS1zaGFsbG93LWZpbGUiKSkgeworCQkJKCphcmd2KSsrOworCQkJKCphcmdjKS0tOworCQkJc2V0X2FsdGVybmF0ZV9zaGFsbG93X2ZpbGUoKCphcmd2KVswXSwgMSk7CisJCQlpZiAoZW52Y2hhbmdlZCkKKwkJCQkqZW52Y2hhbmdlZCA9IDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICItQyIpKSB7CisJCQlpZiAoKmFyZ2MgPCAyKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJObyBkaXJlY3RvcnkgZ2l2ZW4gZm9yIC1DLlxuIiApOworCQkJCXVzYWdlKGdpdF91c2FnZV9zdHJpbmcpOworCQkJfQorCQkJaWYgKCgqYXJndilbMV1bMF0pIHsKKwkJCQlpZiAoY2hkaXIoKCphcmd2KVsxXSkpCisJCQkJCWRpZV9lcnJubygiQ2Fubm90IGNoYW5nZSB0byAnJXMnIiwgKCphcmd2KVsxXSk7CisJCQkJaWYgKGVudmNoYW5nZWQpCisJCQkJCSplbnZjaGFuZ2VkID0gMTsKKwkJCX0KKwkJCSgqYXJndikrKzsKKwkJCSgqYXJnYyktLTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBvcHRpb246ICVzXG4iLCBjbWQpOworCQkJdXNhZ2UoZ2l0X3VzYWdlX3N0cmluZyk7CisJCX0KKworCQkoKmFyZ3YpKys7CisJCSgqYXJnYyktLTsKKwl9CisJcmV0dXJuICgqYXJndikgLSBvcmlnX2FyZ3Y7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2FsaWFzKGludCAqYXJnY3AsIGNvbnN0IGNoYXIgKioqYXJndikKK3sKKwlpbnQgZW52Y2hhbmdlZCA9IDAsIHJldCA9IDAsIHNhdmVkX2Vycm5vID0gZXJybm87CisJY29uc3QgY2hhciAqc3ViZGlyOworCWludCBjb3VudCwgb3B0aW9uX2NvdW50OworCWNvbnN0IGNoYXIgKipuZXdfYXJndjsKKwljb25zdCBjaGFyICphbGlhc19jb21tYW5kOworCWNoYXIgKmFsaWFzX3N0cmluZzsKKwlpbnQgdW51c2VkX25vbmdpdDsKKworCXN1YmRpciA9IHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZ1bnVzZWRfbm9uZ2l0KTsKKworCWFsaWFzX2NvbW1hbmQgPSAoKmFyZ3YpWzBdOworCWFsaWFzX3N0cmluZyA9IGFsaWFzX2xvb2t1cChhbGlhc19jb21tYW5kKTsKKwlpZiAoYWxpYXNfc3RyaW5nKSB7CisJCWlmIChhbGlhc19zdHJpbmdbMF0gPT0gJyEnKSB7CisJCQljb25zdCBjaGFyICoqYWxpYXNfYXJndjsKKwkJCWludCBhcmdjID0gKmFyZ2NwLCBpOworCisJCQljb21taXRfcGFnZXJfY2hvaWNlKCk7CisKKwkJCS8qIGJ1aWxkIGFsaWFzX2FyZ3YgKi8KKwkJCWFsaWFzX2FyZ3YgPSB4bWFsbG9jKHNpemVvZigqYWxpYXNfYXJndikgKiAoYXJnYyArIDEpKTsKKwkJCWFsaWFzX2FyZ3ZbMF0gPSBhbGlhc19zdHJpbmcgKyAxOworCQkJZm9yIChpID0gMTsgaSA8IGFyZ2M7ICsraSkKKwkJCQlhbGlhc19hcmd2W2ldID0gKCphcmd2KVtpXTsKKwkJCWFsaWFzX2FyZ3ZbYXJnY10gPSBOVUxMOworCisJCQlyZXQgPSBydW5fY29tbWFuZF92X29wdChhbGlhc19hcmd2LCBSVU5fVVNJTkdfU0hFTEwpOworCQkJaWYgKHJldCA+PSAwKSAgIC8qIG5vcm1hbCBleGl0ICovCisJCQkJZXhpdChyZXQpOworCisJCQlkaWVfZXJybm8oIldoaWxlIGV4cGFuZGluZyBhbGlhcyAnJXMnOiAnJXMnIiwKKwkJCSAgICBhbGlhc19jb21tYW5kLCBhbGlhc19zdHJpbmcgKyAxKTsKKwkJfQorCQljb3VudCA9IHNwbGl0X2NtZGxpbmUoYWxpYXNfc3RyaW5nLCAmbmV3X2FyZ3YpOworCQlpZiAoY291bnQgPCAwKQorCQkJZGllKCJCYWQgYWxpYXMuJXMgc3RyaW5nOiAlcyIsIGFsaWFzX2NvbW1hbmQsCisJCQkgICAgc3BsaXRfY21kbGluZV9zdHJlcnJvcihjb3VudCkpOworCQlvcHRpb25fY291bnQgPSBoYW5kbGVfb3B0aW9ucygmbmV3X2FyZ3YsICZjb3VudCwgJmVudmNoYW5nZWQpOworCQlpZiAoZW52Y2hhbmdlZCkKKwkJCWRpZSgiYWxpYXMgJyVzJyBjaGFuZ2VzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuIgorCQkJCSAiWW91IGNhbiB1c2UgJyFnaXQnIGluIHRoZSBhbGlhcyB0byBkbyB0aGlzLiIsCisJCQkJIGFsaWFzX2NvbW1hbmQpOworCQltZW1tb3ZlKG5ld19hcmd2IC0gb3B0aW9uX2NvdW50LCBuZXdfYXJndiwKKwkJCQljb3VudCAqIHNpemVvZihjaGFyICopKTsKKwkJbmV3X2FyZ3YgLT0gb3B0aW9uX2NvdW50OworCisJCWlmIChjb3VudCA8IDEpCisJCQlkaWUoImVtcHR5IGFsaWFzIGZvciAlcyIsIGFsaWFzX2NvbW1hbmQpOworCisJCWlmICghc3RyY21wKGFsaWFzX2NvbW1hbmQsIG5ld19hcmd2WzBdKSkKKwkJCWRpZSgicmVjdXJzaXZlIGFsaWFzOiAlcyIsIGFsaWFzX2NvbW1hbmQpOworCisJCXRyYWNlX2FyZ3ZfcHJpbnRmKG5ld19hcmd2LAorCQkJCSAgInRyYWNlOiBhbGlhcyBleHBhbnNpb246ICVzID0+IiwKKwkJCQkgIGFsaWFzX2NvbW1hbmQpOworCisJCVJFQUxMT0NfQVJSQVkobmV3X2FyZ3YsIGNvdW50ICsgKmFyZ2NwKTsKKwkJLyogaW5zZXJ0IGFmdGVyIGNvbW1hbmQgbmFtZSAqLworCQltZW1jcHkobmV3X2FyZ3YgKyBjb3VudCwgKmFyZ3YgKyAxLCBzaXplb2YoY2hhciAqKSAqICphcmdjcCk7CisKKwkJKmFyZ3YgPSBuZXdfYXJndjsKKwkJKmFyZ2NwICs9IGNvdW50IC0gMTsKKworCQlyZXQgPSAxOworCX0KKworCWlmIChzdWJkaXIgJiYgY2hkaXIoc3ViZGlyKSkKKwkJZGllX2Vycm5vKCJDYW5ub3QgY2hhbmdlIHRvICclcyciLCBzdWJkaXIpOworCisJZXJybm8gPSBzYXZlZF9lcnJubzsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgUlVOX1NFVFVQCQkoMTw8MCkKKyNkZWZpbmUgUlVOX1NFVFVQX0dFTlRMWQkoMTw8MSkKKyNkZWZpbmUgVVNFX1BBR0VSCQkoMTw8MikKKy8qCisgKiByZXF1aXJlIHdvcmtpbmcgdHJlZSB0byBiZSBwcmVzZW50IC0tIGFueXRoaW5nIHVzZXMgdGhpcyBuZWVkcworICogUlVOX1NFVFVQIGZvciByZWFkaW5nIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAqLworI2RlZmluZSBORUVEX1dPUktfVFJFRQkJKDE8PDMpCisjZGVmaW5lIE5PX1NFVFVQCQkoMTw8NCkKKworc3RydWN0IGNtZF9zdHJ1Y3QgeworCWNvbnN0IGNoYXIgKmNtZDsKKwlpbnQgKCpmbikoaW50LCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICopOworCWludCBvcHRpb247Cit9OworCitzdGF0aWMgaW50IHJ1bl9idWlsdGluKHN0cnVjdCBjbWRfc3RydWN0ICpwLCBpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJaW50IHN0YXR1cywgaGVscDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwljb25zdCBjaGFyICpwcmVmaXg7CisKKwlwcmVmaXggPSBOVUxMOworCWhlbHAgPSBhcmdjID09IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWgiKTsKKwlpZiAoIWhlbHApIHsKKwkJaWYgKHAtPm9wdGlvbiAmIFJVTl9TRVRVUCkKKwkJCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwkJZWxzZSBpZiAocC0+b3B0aW9uICYgUlVOX1NFVFVQX0dFTlRMWSkgeworCQkJaW50IG5vbmdpdF9vazsKKwkJCXByZWZpeCA9IHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXRfb2spOworCQl9CisKKwkJaWYgKHVzZV9wYWdlciA9PSAtMSAmJiBwLT5vcHRpb24gJiAoUlVOX1NFVFVQIHwgUlVOX1NFVFVQX0dFTlRMWSkpCisJCQl1c2VfcGFnZXIgPSBjaGVja19wYWdlcl9jb25maWcocC0+Y21kKTsKKwkJaWYgKHVzZV9wYWdlciA9PSAtMSAmJiBwLT5vcHRpb24gJiBVU0VfUEFHRVIpCisJCQl1c2VfcGFnZXIgPSAxOworCisJCWlmICgocC0+b3B0aW9uICYgKFJVTl9TRVRVUCB8IFJVTl9TRVRVUF9HRU5UTFkpKSAmJgorCQkgICAgc3RhcnR1cF9pbmZvLT5oYXZlX3JlcG9zaXRvcnkpIC8qIGdldF9naXRfZGlyKCkgbWF5IHNldCB1cCByZXBvLCBhdm9pZCB0aGF0ICovCisJCQl0cmFjZV9yZXBvX3NldHVwKHByZWZpeCk7CisJfQorCWNvbW1pdF9wYWdlcl9jaG9pY2UoKTsKKworCWlmICghaGVscCAmJiBwLT5vcHRpb24gJiBORUVEX1dPUktfVFJFRSkKKwkJc2V0dXBfd29ya190cmVlKCk7CisKKwl0cmFjZV9hcmd2X3ByaW50Zihhcmd2LCAidHJhY2U6IGJ1aWx0LWluOiBnaXQiKTsKKworCXN0YXR1cyA9IHAtPmZuKGFyZ2MsIGFyZ3YsIHByZWZpeCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIFNvbWVib2R5IGNsb3NlZCBzdGRvdXQ/ICovCisJaWYgKGZzdGF0KGZpbGVubyhzdGRvdXQpLCAmc3QpKQorCQlyZXR1cm4gMDsKKwkvKiBJZ25vcmUgd3JpdGUgZXJyb3JzIGZvciBwaXBlcyBhbmQgc29ja2V0cy4uICovCisJaWYgKFNfSVNGSUZPKHN0LnN0X21vZGUpIHx8IFNfSVNTT0NLKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gMDsKKworCS8qIENoZWNrIGZvciBFTk9TUEMgYW5kIEVJTyBlcnJvcnMuLiAqLworCWlmIChmZmx1c2goc3Rkb3V0KSkKKwkJZGllX2Vycm5vKCJ3cml0ZSBmYWlsdXJlIG9uIHN0YW5kYXJkIG91dHB1dCIpOworCWlmIChmZXJyb3Ioc3Rkb3V0KSkKKwkJZGllKCJ1bmtub3duIHdyaXRlIGZhaWx1cmUgb24gc3RhbmRhcmQgb3V0cHV0Iik7CisJaWYgKGZjbG9zZShzdGRvdXQpKQorCQlkaWVfZXJybm8oImNsb3NlIGZhaWxlZCBvbiBzdGFuZGFyZCBvdXRwdXQiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbWRfc3RydWN0IGNvbW1hbmRzW10gPSB7CisJeyAiYWRkIiwgY21kX2FkZCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJhbSIsIGNtZF9hbSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJhbm5vdGF0ZSIsIGNtZF9hbm5vdGF0ZSwgUlVOX1NFVFVQIH0sCisJeyAiYXBwbHkiLCBjbWRfYXBwbHksIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwl7ICJhcmNoaXZlIiwgY21kX2FyY2hpdmUgfSwKKwl7ICJiaXNlY3QtLWhlbHBlciIsIGNtZF9iaXNlY3RfX2hlbHBlciwgUlVOX1NFVFVQIH0sCisJeyAiYmxhbWUiLCBjbWRfYmxhbWUsIFJVTl9TRVRVUCB9LAorCXsgImJyYW5jaCIsIGNtZF9icmFuY2gsIFJVTl9TRVRVUCB9LAorCXsgImJ1bmRsZSIsIGNtZF9idW5kbGUsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwl7ICJjYXQtZmlsZSIsIGNtZF9jYXRfZmlsZSwgUlVOX1NFVFVQIH0sCisJeyAiY2hlY2stYXR0ciIsIGNtZF9jaGVja19hdHRyLCBSVU5fU0VUVVAgfSwKKwl7ICJjaGVjay1pZ25vcmUiLCBjbWRfY2hlY2tfaWdub3JlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgImNoZWNrLW1haWxtYXAiLCBjbWRfY2hlY2tfbWFpbG1hcCwgUlVOX1NFVFVQIH0sCisJeyAiY2hlY2stcmVmLWZvcm1hdCIsIGNtZF9jaGVja19yZWZfZm9ybWF0IH0sCisJeyAiY2hlY2tvdXQiLCBjbWRfY2hlY2tvdXQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAiY2hlY2tvdXQtaW5kZXgiLCBjbWRfY2hlY2tvdXRfaW5kZXgsCisJCVJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFfSwKKwl7ICJjaGVycnkiLCBjbWRfY2hlcnJ5LCBSVU5fU0VUVVAgfSwKKwl7ICJjaGVycnktcGljayIsIGNtZF9jaGVycnlfcGljaywgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJjbGVhbiIsIGNtZF9jbGVhbiwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJjbG9uZSIsIGNtZF9jbG9uZSwgTk9fU0VUVVAgfSwKKwl7ICJjb2x1bW4iLCBjbWRfY29sdW1uLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAiY29tbWl0IiwgY21kX2NvbW1pdCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJjb21taXQtdHJlZSIsIGNtZF9jb21taXRfdHJlZSwgUlVOX1NFVFVQIH0sCisJeyAiY29uZmlnIiwgY21kX2NvbmZpZywgUlVOX1NFVFVQX0dFTlRMWSB9LAorCXsgImNvdW50LW9iamVjdHMiLCBjbWRfY291bnRfb2JqZWN0cywgUlVOX1NFVFVQIH0sCisJeyAiY3JlZGVudGlhbCIsIGNtZF9jcmVkZW50aWFsLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAiZGVzY3JpYmUiLCBjbWRfZGVzY3JpYmUsIFJVTl9TRVRVUCB9LAorCXsgImRpZmYiLCBjbWRfZGlmZiB9LAorCXsgImRpZmYtZmlsZXMiLCBjbWRfZGlmZl9maWxlcywgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJkaWZmLWluZGV4IiwgY21kX2RpZmZfaW5kZXgsIFJVTl9TRVRVUCB9LAorCXsgImRpZmYtdHJlZSIsIGNtZF9kaWZmX3RyZWUsIFJVTl9TRVRVUCB9LAorCXsgImZhc3QtZXhwb3J0IiwgY21kX2Zhc3RfZXhwb3J0LCBSVU5fU0VUVVAgfSwKKwl7ICJmZXRjaCIsIGNtZF9mZXRjaCwgUlVOX1NFVFVQIH0sCisJeyAiZmV0Y2gtcGFjayIsIGNtZF9mZXRjaF9wYWNrLCBSVU5fU0VUVVAgfSwKKwl7ICJmbXQtbWVyZ2UtbXNnIiwgY21kX2ZtdF9tZXJnZV9tc2csIFJVTl9TRVRVUCB9LAorCXsgImZvci1lYWNoLXJlZiIsIGNtZF9mb3JfZWFjaF9yZWYsIFJVTl9TRVRVUCB9LAorCXsgImZvcm1hdC1wYXRjaCIsIGNtZF9mb3JtYXRfcGF0Y2gsIFJVTl9TRVRVUCB9LAorCXsgImZzY2siLCBjbWRfZnNjaywgUlVOX1NFVFVQIH0sCisJeyAiZnNjay1vYmplY3RzIiwgY21kX2ZzY2ssIFJVTl9TRVRVUCB9LAorCXsgImdjIiwgY21kX2djLCBSVU5fU0VUVVAgfSwKKwl7ICJnZXQtdGFyLWNvbW1pdC1pZCIsIGNtZF9nZXRfdGFyX2NvbW1pdF9pZCB9LAorCXsgImdyZXAiLCBjbWRfZ3JlcCwgUlVOX1NFVFVQX0dFTlRMWSB9LAorCXsgImhhc2gtb2JqZWN0IiwgY21kX2hhc2hfb2JqZWN0IH0sCisJeyAiaGVscCIsIGNtZF9oZWxwIH0sCisJeyAiaW5kZXgtcGFjayIsIGNtZF9pbmRleF9wYWNrLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAiaW5pdCIsIGNtZF9pbml0X2RiLCBOT19TRVRVUCB9LAorCXsgImluaXQtZGIiLCBjbWRfaW5pdF9kYiwgTk9fU0VUVVAgfSwKKwl7ICJpbnRlcnByZXQtdHJhaWxlcnMiLCBjbWRfaW50ZXJwcmV0X3RyYWlsZXJzLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAibG9nIiwgY21kX2xvZywgUlVOX1NFVFVQIH0sCisJeyAibHMtZmlsZXMiLCBjbWRfbHNfZmlsZXMsIFJVTl9TRVRVUCB9LAorCXsgImxzLXJlbW90ZSIsIGNtZF9sc19yZW1vdGUsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwl7ICJscy10cmVlIiwgY21kX2xzX3RyZWUsIFJVTl9TRVRVUCB9LAorCXsgIm1haWxpbmZvIiwgY21kX21haWxpbmZvIH0sCisJeyAibWFpbHNwbGl0IiwgY21kX21haWxzcGxpdCB9LAorCXsgIm1lcmdlIiwgY21kX21lcmdlLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgIm1lcmdlLWJhc2UiLCBjbWRfbWVyZ2VfYmFzZSwgUlVOX1NFVFVQIH0sCisJeyAibWVyZ2UtZmlsZSIsIGNtZF9tZXJnZV9maWxlLCBSVU5fU0VUVVBfR0VOVExZIH0sCisJeyAibWVyZ2UtaW5kZXgiLCBjbWRfbWVyZ2VfaW5kZXgsIFJVTl9TRVRVUCB9LAorCXsgIm1lcmdlLW91cnMiLCBjbWRfbWVyZ2Vfb3VycywgUlVOX1NFVFVQIH0sCisJeyAibWVyZ2UtcmVjdXJzaXZlIiwgY21kX21lcmdlX3JlY3Vyc2l2ZSwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJtZXJnZS1yZWN1cnNpdmUtb3VycyIsIGNtZF9tZXJnZV9yZWN1cnNpdmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAibWVyZ2UtcmVjdXJzaXZlLXRoZWlycyIsIGNtZF9tZXJnZV9yZWN1cnNpdmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAibWVyZ2Utc3VidHJlZSIsIGNtZF9tZXJnZV9yZWN1cnNpdmUsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAibWVyZ2UtdHJlZSIsIGNtZF9tZXJnZV90cmVlLCBSVU5fU0VUVVAgfSwKKwl7ICJta3RhZyIsIGNtZF9ta3RhZywgUlVOX1NFVFVQIH0sCisJeyAibWt0cmVlIiwgY21kX21rdHJlZSwgUlVOX1NFVFVQIH0sCisJeyAibXYiLCBjbWRfbXYsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAibmFtZS1yZXYiLCBjbWRfbmFtZV9yZXYsIFJVTl9TRVRVUCB9LAorCXsgIm5vdGVzIiwgY21kX25vdGVzLCBSVU5fU0VUVVAgfSwKKwl7ICJwYWNrLW9iamVjdHMiLCBjbWRfcGFja19vYmplY3RzLCBSVU5fU0VUVVAgfSwKKwl7ICJwYWNrLXJlZHVuZGFudCIsIGNtZF9wYWNrX3JlZHVuZGFudCwgUlVOX1NFVFVQIH0sCisJeyAicGFjay1yZWZzIiwgY21kX3BhY2tfcmVmcywgUlVOX1NFVFVQIH0sCisJeyAicGF0Y2gtaWQiLCBjbWRfcGF0Y2hfaWQgfSwKKwl7ICJwaWNrYXhlIiwgY21kX2JsYW1lLCBSVU5fU0VUVVAgfSwKKwl7ICJwcnVuZSIsIGNtZF9wcnVuZSwgUlVOX1NFVFVQIH0sCisJeyAicHJ1bmUtcGFja2VkIiwgY21kX3BydW5lX3BhY2tlZCwgUlVOX1NFVFVQIH0sCisJeyAicHVsbCIsIGNtZF9wdWxsLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgInB1c2giLCBjbWRfcHVzaCwgUlVOX1NFVFVQIH0sCisJeyAicmVhZC10cmVlIiwgY21kX3JlYWRfdHJlZSwgUlVOX1NFVFVQIH0sCisJeyAicmVjZWl2ZS1wYWNrIiwgY21kX3JlY2VpdmVfcGFjayB9LAorCXsgInJlZmxvZyIsIGNtZF9yZWZsb2csIFJVTl9TRVRVUCB9LAorCXsgInJlbW90ZSIsIGNtZF9yZW1vdGUsIFJVTl9TRVRVUCB9LAorCXsgInJlbW90ZS1leHQiLCBjbWRfcmVtb3RlX2V4dCB9LAorCXsgInJlbW90ZS1mZCIsIGNtZF9yZW1vdGVfZmQgfSwKKwl7ICJyZXBhY2siLCBjbWRfcmVwYWNrLCBSVU5fU0VUVVAgfSwKKwl7ICJyZXBsYWNlIiwgY21kX3JlcGxhY2UsIFJVTl9TRVRVUCB9LAorCXsgInJlcmVyZSIsIGNtZF9yZXJlcmUsIFJVTl9TRVRVUCB9LAorCXsgInJlc2V0IiwgY21kX3Jlc2V0LCBSVU5fU0VUVVAgfSwKKwl7ICJyZXYtbGlzdCIsIGNtZF9yZXZfbGlzdCwgUlVOX1NFVFVQIH0sCisJeyAicmV2LXBhcnNlIiwgY21kX3Jldl9wYXJzZSB9LAorCXsgInJldmVydCIsIGNtZF9yZXZlcnQsIFJVTl9TRVRVUCB8IE5FRURfV09SS19UUkVFIH0sCisJeyAicm0iLCBjbWRfcm0sIFJVTl9TRVRVUCB9LAorCXsgInNlbmQtcGFjayIsIGNtZF9zZW5kX3BhY2ssIFJVTl9TRVRVUCB9LAorCXsgInNob3J0bG9nIiwgY21kX3Nob3J0bG9nLCBSVU5fU0VUVVBfR0VOVExZIHwgVVNFX1BBR0VSIH0sCisJeyAic2hvdyIsIGNtZF9zaG93LCBSVU5fU0VUVVAgfSwKKwl7ICJzaG93LWJyYW5jaCIsIGNtZF9zaG93X2JyYW5jaCwgUlVOX1NFVFVQIH0sCisJeyAic2hvdy1yZWYiLCBjbWRfc2hvd19yZWYsIFJVTl9TRVRVUCB9LAorCXsgInN0YWdlIiwgY21kX2FkZCwgUlVOX1NFVFVQIHwgTkVFRF9XT1JLX1RSRUUgfSwKKwl7ICJzdGF0dXMiLCBjbWRfc3RhdHVzLCBSVU5fU0VUVVAgfCBORUVEX1dPUktfVFJFRSB9LAorCXsgInN0cmlwc3BhY2UiLCBjbWRfc3RyaXBzcGFjZSB9LAorCXsgInN1Ym1vZHVsZS0taGVscGVyIiwgY21kX3N1Ym1vZHVsZV9faGVscGVyLCBSVU5fU0VUVVAgfSwKKwl7ICJzeW1ib2xpYy1yZWYiLCBjbWRfc3ltYm9saWNfcmVmLCBSVU5fU0VUVVAgfSwKKwl7ICJ0YWciLCBjbWRfdGFnLCBSVU5fU0VUVVAgfSwKKwl7ICJ1bnBhY2stZmlsZSIsIGNtZF91bnBhY2tfZmlsZSwgUlVOX1NFVFVQIH0sCisJeyAidW5wYWNrLW9iamVjdHMiLCBjbWRfdW5wYWNrX29iamVjdHMsIFJVTl9TRVRVUCB9LAorCXsgInVwZGF0ZS1pbmRleCIsIGNtZF91cGRhdGVfaW5kZXgsIFJVTl9TRVRVUCB9LAorCXsgInVwZGF0ZS1yZWYiLCBjbWRfdXBkYXRlX3JlZiwgUlVOX1NFVFVQIH0sCisJeyAidXBkYXRlLXNlcnZlci1pbmZvIiwgY21kX3VwZGF0ZV9zZXJ2ZXJfaW5mbywgUlVOX1NFVFVQIH0sCisJeyAidXBsb2FkLWFyY2hpdmUiLCBjbWRfdXBsb2FkX2FyY2hpdmUgfSwKKwl7ICJ1cGxvYWQtYXJjaGl2ZS0td3JpdGVyIiwgY21kX3VwbG9hZF9hcmNoaXZlX3dyaXRlciB9LAorCXsgInZhciIsIGNtZF92YXIsIFJVTl9TRVRVUF9HRU5UTFkgfSwKKwl7ICJ2ZXJpZnktY29tbWl0IiwgY21kX3ZlcmlmeV9jb21taXQsIFJVTl9TRVRVUCB9LAorCXsgInZlcmlmeS1wYWNrIiwgY21kX3ZlcmlmeV9wYWNrIH0sCisJeyAidmVyaWZ5LXRhZyIsIGNtZF92ZXJpZnlfdGFnLCBSVU5fU0VUVVAgfSwKKwl7ICJ2ZXJzaW9uIiwgY21kX3ZlcnNpb24gfSwKKwl7ICJ3aGF0Y2hhbmdlZCIsIGNtZF93aGF0Y2hhbmdlZCwgUlVOX1NFVFVQIH0sCisJeyAid29ya3RyZWUiLCBjbWRfd29ya3RyZWUsIFJVTl9TRVRVUCB9LAorCXsgIndyaXRlLXRyZWUiLCBjbWRfd3JpdGVfdHJlZSwgUlVOX1NFVFVQIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNtZF9zdHJ1Y3QgKmdldF9idWlsdGluKGNvbnN0IGNoYXIgKnMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbWFuZHMpOyBpKyspIHsKKwkJc3RydWN0IGNtZF9zdHJ1Y3QgKnAgPSBjb21tYW5kcyArIGk7CisJCWlmICghc3RyY21wKHMsIHAtPmNtZCkpCisJCQlyZXR1cm4gcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBpc19idWlsdGluKGNvbnN0IGNoYXIgKnMpCit7CisJcmV0dXJuICEhZ2V0X2J1aWx0aW4ocyk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9idWlsdGluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICpjbWQgPSBhcmd2WzBdOworCWludCBpOworCXN0YXRpYyBjb25zdCBjaGFyIGV4dFtdID0gU1RSSVBfRVhURU5TSU9OOworCXN0cnVjdCBjbWRfc3RydWN0ICpidWlsdGluOworCisJaWYgKHNpemVvZihleHQpID4gMSkgeworCQlpID0gc3RybGVuKGFyZ3ZbMF0pIC0gc3RybGVuKGV4dCk7CisJCWlmIChpID4gMCAmJiAhc3RyY21wKGFyZ3ZbMF0gKyBpLCBleHQpKSB7CisJCQljaGFyICphcmd2MCA9IHhzdHJkdXAoYXJndlswXSk7CisJCQlhcmd2WzBdID0gY21kID0gYXJndjA7CisJCQlhcmd2MFtpXSA9ICdcMCc7CisJCX0KKwl9CisKKwkvKiBUdXJuICJnaXQgY21kIC0taGVscCIgaW50byAiZ2l0IGhlbHAgY21kIiAqLworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLWhlbHAiKSkgeworCQlhcmd2WzFdID0gYXJndlswXTsKKwkJYXJndlswXSA9IGNtZCA9ICJoZWxwIjsKKwl9CisKKwlidWlsdGluID0gZ2V0X2J1aWx0aW4oY21kKTsKKwlpZiAoYnVpbHRpbikgeworCQlpZiAoc2F2ZWRfZW52aXJvbm1lbnQgJiYgKGJ1aWx0aW4tPm9wdGlvbiAmIE5PX1NFVFVQKSkKKwkJCXJlc3RvcmVfZW52KCk7CisJCWVsc2UKKwkJCWV4aXQocnVuX2J1aWx0aW4oYnVpbHRpbiwgYXJnYywgYXJndikpOworCX0KK30KKworc3RhdGljIHZvaWQgZXhlY3ZfZGFzaGVkX2V4dGVybmFsKGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzdHJidWYgY21kID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqdG1wOworCWludCBzdGF0dXM7CisKKwlpZiAodXNlX3BhZ2VyID09IC0xKQorCQl1c2VfcGFnZXIgPSBjaGVja19wYWdlcl9jb25maWcoYXJndlswXSk7CisJY29tbWl0X3BhZ2VyX2Nob2ljZSgpOworCisJc3RyYnVmX2FkZGYoJmNtZCwgImdpdC0lcyIsIGFyZ3ZbMF0pOworCisJLyoKKwkgKiBhcmd2WzBdIG11c3QgYmUgdGhlIGdpdCBjb21tYW5kLCBidXQgdGhlIGFyZ3YgYXJyYXkKKwkgKiBiZWxvbmdzIHRvIHRoZSBjYWxsZXIsIGFuZCBtYXkgYmUgcmV1c2VkIGluCisJICogc3Vic2VxdWVudCBsb29wIGl0ZXJhdGlvbnMuIFNhdmUgYXJndlswXSBhbmQKKwkgKiByZXN0b3JlIGl0IG9uIGVycm9yLgorCSAqLworCXRtcCA9IGFyZ3ZbMF07CisJYXJndlswXSA9IGNtZC5idWY7CisKKwl0cmFjZV9hcmd2X3ByaW50Zihhcmd2LCAidHJhY2U6IGV4ZWM6Iik7CisKKwkvKgorCSAqIGlmIHdlIGZhaWwgYmVjYXVzZSB0aGUgY29tbWFuZCBpcyBub3QgZm91bmQsIGl0IGlzCisJICogT0sgdG8gcmV0dXJuLiBPdGhlcndpc2UsIHdlIGp1c3QgcGFzcyBhbG9uZyB0aGUgc3RhdHVzIGNvZGUuCisJICovCisJc3RhdHVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkUgfCBSVU5fQ0xFQU5fT05fRVhJVCk7CisJaWYgKHN0YXR1cyA+PSAwIHx8IGVycm5vICE9IEVOT0VOVCkKKwkJZXhpdChzdGF0dXMpOworCisJYXJndlswXSA9IHRtcDsKKworCXN0cmJ1Zl9yZWxlYXNlKCZjbWQpOworfQorCitzdGF0aWMgaW50IHJ1bl9hcmd2KGludCAqYXJnY3AsIGNvbnN0IGNoYXIgKioqYXJndikKK3sKKwlpbnQgZG9uZV9hbGlhcyA9IDA7CisKKwl3aGlsZSAoMSkgeworCQkvKiBTZWUgaWYgaXQncyBhIGJ1aWx0aW4gKi8KKwkJaGFuZGxlX2J1aWx0aW4oKmFyZ2NwLCAqYXJndik7CisKKwkJLyogLi4gdGhlbiB0cnkgdGhlIGV4dGVybmFsIG9uZXMgKi8KKwkJZXhlY3ZfZGFzaGVkX2V4dGVybmFsKCphcmd2KTsKKworCQkvKiBJdCBjb3VsZCBiZSBhbiBhbGlhcyAtLSB0aGlzIHdvcmtzIGFyb3VuZCB0aGUgaW5zYW5pdHkKKwkJICogb2Ygb3ZlcnJpZGluZyAiZ2l0IGxvZyIgd2l0aCAiZ2l0IHNob3ciIGJ5IGhhdmluZworCQkgKiBhbGlhcy5sb2cgPSBzaG93CisJCSAqLworCQlpZiAoZG9uZV9hbGlhcykKKwkJCWJyZWFrOworCQlzYXZlX2VudigpOworCQlpZiAoIWhhbmRsZV9hbGlhcyhhcmdjcCwgYXJndikpCisJCQlicmVhazsKKwkJZG9uZV9hbGlhcyA9IDE7CisJfQorCisJcmV0dXJuIGRvbmVfYWxpYXM7Cit9CisKKy8qCisgKiBNYW55IHBhcnRzIG9mIEdpdCBoYXZlIHN1YnByb2dyYW1zIGNvbW11bmljYXRlIHZpYSBwaXBlLCBleHBlY3QgdGhlCisgKiB1cHN0cmVhbSBvZiBhIHBpcGUgdG8gZGllIHdpdGggU0lHUElQRSB3aGVuIHRoZSBkb3duc3RyZWFtIG9mIGEKKyAqIHBpcGUgZG9lcyBub3QgbmVlZCB0byByZWFkIGFsbCB0aGF0IGlzIHdyaXR0ZW4uICBTb21lIHRoaXJkLXBhcnR5CisgKiBwcm9ncmFtcyB0aGF0IGlnbm9yZSBvciBibG9jayBTSUdQSVBFIGZvciB0aGVpciBvd24gcmVhc29uIGZvcmdldAorICogdG8gcmVzdG9yZSBTSUdQSVBFIGhhbmRsaW5nIHRvIHRoZSBkZWZhdWx0IGJlZm9yZSBzcGF3bmluZyBHaXQgYW5kCisgKiBicmVhayB0aGlzIGNhcmVmdWxseSBvcmNoZXN0cmF0ZWQgbWFjaGluZXJ5LgorICoKKyAqIFJlc3RvcmUgdGhlIHdheSBTSUdQSVBFIGlzIGhhbmRsZWQgdG8gZGVmYXVsdCwgd2hpY2ggaXMgd2hhdCB3ZQorICogZXhwZWN0LgorICovCitzdGF0aWMgdm9pZCByZXN0b3JlX3NpZ3BpcGVfdG9fZGVmYXVsdCh2b2lkKQoreworCXNpZ3NldF90IHVuYmxvY2s7CisKKwlzaWdlbXB0eXNldCgmdW5ibG9jayk7CisJc2lnYWRkc2V0KCZ1bmJsb2NrLCBTSUdQSVBFKTsKKwlzaWdwcm9jbWFzayhTSUdfVU5CTE9DSywgJnVuYmxvY2ssIE5VTEwpOworCXNpZ25hbChTSUdQSVBFLCBTSUdfREZMKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphdikKK3sKKwljb25zdCBjaGFyICoqYXJndiA9IChjb25zdCBjaGFyICoqKSBhdjsKKwljb25zdCBjaGFyICpjbWQ7CisJaW50IGRvbmVfaGVscCA9IDA7CisKKwlzdGFydHVwX2luZm8gPSAmZ2l0X3N0YXJ0dXBfaW5mbzsKKworCWNtZCA9IGdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisJaWYgKCFjbWQpCisJCWNtZCA9ICJnaXQtaGVscCI7CisKKwkvKgorCSAqIEFsd2F5cyBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgMC8xLzIgdG8gYXZvaWQgY2xvYmJlcmluZyBmaWxlcworCSAqIGluIGRpZSgpLiAgSXQgYWxzbyBhdm9pZHMgbWVzc2luZyB1cCB3aGVuIHRoZSBwaXBlcyBhcmUgZHVwJ2VkCisJICogb250byBzdGRpbi9zdGRvdXQvc3RkZXJyIGluIHRoZSBjaGlsZCBwcm9jZXNzZXMgd2Ugc3Bhd24uCisJICovCisJc2FuaXRpemVfc3RkZmRzKCk7CisKKwlyZXN0b3JlX3NpZ3BpcGVfdG9fZGVmYXVsdCgpOworCisJZ2l0X3NldHVwX2dldHRleHQoKTsKKworCXRyYWNlX2NvbW1hbmRfcGVyZm9ybWFuY2UoYXJndik7CisKKwkvKgorCSAqICJnaXQteHh4eCIgaXMgdGhlIHNhbWUgYXMgImdpdCB4eHh4IiwgYnV0IHdlIG9idmlvdXNseToKKwkgKgorCSAqICAtIGNhbm5vdCB0YWtlIGZsYWdzIGluIGJldHdlZW4gdGhlICJnaXQiIGFuZCB0aGUgInh4eHgiLgorCSAqICAtIGNhbm5vdCBleGVjdXRlIGl0IGV4dGVybmFsbHkgKHNpbmNlIGl0IHdvdWxkIGp1c3QgZG8KKwkgKiAgICB0aGUgc2FtZSB0aGluZyBvdmVyIGFnYWluKQorCSAqCisJICogU28gd2UganVzdCBkaXJlY3RseSBjYWxsIHRoZSBidWlsdGluIGhhbmRsZXIsIGFuZCBkaWUgaWYKKwkgKiB0aGF0IG9uZSBjYW5ub3QgaGFuZGxlIGl0LgorCSAqLworCWlmIChza2lwX3ByZWZpeChjbWQsICJnaXQtIiwgJmNtZCkpIHsKKwkJYXJndlswXSA9IGNtZDsKKwkJaGFuZGxlX2J1aWx0aW4oYXJnYywgYXJndik7CisJCWRpZSgiY2Fubm90IGhhbmRsZSAlcyBhcyBhIGJ1aWx0aW4iLCBjbWQpOworCX0KKworCS8qIExvb2sgZm9yIGZsYWdzLi4gKi8KKwlhcmd2Kys7CisJYXJnYy0tOworCWhhbmRsZV9vcHRpb25zKCZhcmd2LCAmYXJnYywgTlVMTCk7CisJaWYgKGFyZ2MgPiAwKSB7CisJCS8qIHRyYW5zbGF0ZSAtLWhlbHAgYW5kIC0tdmVyc2lvbiBpbnRvIGNvbW1hbmRzICovCisJCXNraXBfcHJlZml4KGFyZ3ZbMF0sICItLSIsICZhcmd2WzBdKTsKKwl9IGVsc2UgeworCQkvKiBUaGUgdXNlciBkaWRuJ3Qgc3BlY2lmeSBhIGNvbW1hbmQ7IGdpdmUgdGhlbSBoZWxwICovCisJCWNvbW1pdF9wYWdlcl9jaG9pY2UoKTsKKwkJcHJpbnRmKCJ1c2FnZTogJXNcblxuIiwgZ2l0X3VzYWdlX3N0cmluZyk7CisJCWxpc3RfY29tbW9uX2NtZHNfaGVscCgpOworCQlwcmludGYoIlxuJXNcbiIsIF8oZ2l0X21vcmVfaW5mb19zdHJpbmcpKTsKKwkJZXhpdCgxKTsKKwl9CisJY21kID0gYXJndlswXTsKKworCS8qCisJICogV2UgdXNlIFBBVEggdG8gZmluZCBnaXQgY29tbWFuZHMsIGJ1dCB3ZSBwcmVwZW5kIHNvbWUgaGlnaGVyCisJICogcHJlY2VkZW5jZSBwYXRoczogdGhlICItLWV4ZWMtcGF0aCIgb3B0aW9uLCB0aGUgR0lUX0VYRUNfUEFUSAorCSAqIGVudmlyb25tZW50LCBhbmQgdGhlICQoZ2l0ZXhlY2RpcikgZnJvbSB0aGUgTWFrZWZpbGUgYXQgYnVpbGQKKwkgKiB0aW1lLgorCSAqLworCXNldHVwX3BhdGgoKTsKKworCXdoaWxlICgxKSB7CisJCWludCB3YXNfYWxpYXMgPSBydW5fYXJndigmYXJnYywgJmFyZ3YpOworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJYnJlYWs7CisJCWlmICh3YXNfYWxpYXMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiRXhwYW5zaW9uIG9mIGFsaWFzICclcycgZmFpbGVkOyAiCisJCQkJIiclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmRcbiIsCisJCQkJY21kLCBhcmd2WzBdKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJaWYgKCFkb25lX2hlbHApIHsKKwkJCWNtZCA9IGFyZ3ZbMF0gPSBoZWxwX3Vua25vd25fY21kKGNtZCk7CisJCQlkb25lX2hlbHAgPSAxOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJ1biBjb21tYW5kICclcyc6ICVzXG4iLAorCQljbWQsIHN0cmVycm9yKGVycm5vKSk7CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2dpdC5yYyBiL2dpdC5yYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2FhZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0LnJjCkBAIC0wLDAgKzEsMjIgQEAKKzEgVkVSU0lPTklORk8KK0ZJTEVWRVJTSU9OICAgICBNQUpPUixNSU5PUiwwLDAKK1BST0RVQ1RWRVJTSU9OICBNQUpPUixNSU5PUiwwLDAKK0JFR0lOCisgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKKyAgQkVHSU4KKyAgICBCTE9DSyAiMDQwOTA0YjAiICAgLyogTEFOR19FTkdMSVNIL1NVQkxBTkdfRU5HTElTSF9VUywgVW5pY29kZSBDUCAqLworICAgIEJFR0lOCisgICAgICBWQUxVRSAiQ29tcGFueU5hbWUiLCAiVGhlIEdpdCBEZXZlbG9wbWVudCBDb21tdW5pdHlcMCIKKyAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiR2l0IGZvciBXaW5kb3dzXDAiCisgICAgICBWQUxVRSAiSW50ZXJuYWxOYW1lIiwgImdpdFwwIgorICAgICAgVkFMVUUgIk9yaWdpbmFsRmlsZW5hbWUiLCAiZ2l0LmV4ZVwwIgorICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkdpdFwwIgorICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgR0lUX1ZFUlNJT04gIlwwIgorICAgIEVORAorICBFTkQKKworICBCTE9DSyAiVmFyRmlsZUluZm8iCisgIEJFR0lOCisgICAgVkFMVUUgIlRyYW5zbGF0aW9uIiwgMHg0MDksIDEyMDAKKyAgRU5ECitFTkQKZGlmZiAtLWdpdCBhL2dpdC5zcGVjLmluIGIvZ2l0LnNwZWMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxZDUzNwotLS0gL2Rldi9udWxsCisrKyBiL2dpdC5zcGVjLmluCkBAIC0wLDAgKzEsMzMwIEBACisjIFBhc3MgLS13aXRob3V0IGRvY3MgdG8gcnBtYnVpbGQgaWYgeW91IGRvbid0IHdhbnQgdGhlIGRvY3VtZW50YXRpb24KKworTmFtZTogCQlnaXQKK1ZlcnNpb246IAlAQFZFUlNJT05AQAorUmVsZWFzZTogCTElez9kaXN0fQorU3VtbWFyeTogIAlDb3JlIGdpdCB0b29scworTGljZW5zZTogCUdQTAorR3JvdXA6IAkJRGV2ZWxvcG1lbnQvVG9vbHMKK1VSTDogCQlodHRwOi8va2VybmVsLm9yZy9wdWIvc29mdHdhcmUvc2NtL2dpdC8KK1NvdXJjZTogCWh0dHA6Ly9rZXJuZWwub3JnL3B1Yi9zb2Z0d2FyZS9zY20vZ2l0LyV7bmFtZX0tJXt2ZXJzaW9ufS50YXIuZ3oKK0J1aWxkUmVxdWlyZXM6CXpsaWItZGV2ZWwgPj0gMS4yLCBvcGVuc3NsLWRldmVsLCBjdXJsLWRldmVsLCBleHBhdC1kZXZlbCwgZ2V0dGV4dCAgJXshP193aXRob3V0X2RvY3M6LCB4bWx0bywgYXNjaWlkb2MgPiA2LjAuM30KK0J1aWxkUm9vdDoJJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LSV7cmVsZWFzZX0tcm9vdC0lKCV7X19pZF91fSAtbikKKworUmVxdWlyZXM6CXBlcmwtR2l0ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczoJemxpYiA+PSAxLjIsIHJzeW5jLCBsZXNzLCBvcGVuc3NoLWNsaWVudHMsIGV4cGF0CitQcm92aWRlczoJZ2l0LWNvcmUgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KK09ic29sZXRlczoJZ2l0LWNvcmUgPD0gMS41LjQuMgorT2Jzb2xldGVzOglnaXQtcDQKKworJWRlc2NyaXB0aW9uCitHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgordW51c3VhbGx5IHJpY2ggY29tbWFuZCBzZXQgdGhhdCBwcm92aWRlcyBib3RoIGhpZ2gtbGV2ZWwgb3BlcmF0aW9ucworYW5kIGZ1bGwgYWNjZXNzIHRvIGludGVybmFscy4KKworVGhlIGdpdCBycG0gaW5zdGFsbHMgdGhlIGNvcmUgdG9vbHMgd2l0aCBtaW5pbWFsIGRlcGVuZGVuY2llcy4gIFRvCitpbnN0YWxsIGFsbCBnaXQgcGFja2FnZXMsIGluY2x1ZGluZyB0b29scyBmb3IgaW50ZWdyYXRpbmcgd2l0aCBvdGhlcgorU0NNcywgaW5zdGFsbCB0aGUgZ2l0LWFsbCBtZXRhLXBhY2thZ2UuCisKKyVwYWNrYWdlIGFsbAorU3VtbWFyeToJTWV0YS1wYWNrYWdlIHRvIHB1bGwgaW4gYWxsIGdpdCB0b29scworR3JvdXA6CQlEZXZlbG9wbWVudC9Ub29scworUmVxdWlyZXM6CWdpdCA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQorUmVxdWlyZXM6CWdpdC1zdm4gPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KK1JlcXVpcmVzOglnaXQtY3ZzID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczoJZ2l0LWFyY2ggPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KK1JlcXVpcmVzOglnaXQtZW1haWwgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0KK1JlcXVpcmVzOglnaXRrID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczoJZ2l0d2ViID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczoJZ2l0LWd1aSA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfQorT2Jzb2xldGVzOglnaXQgPD0gMS41LjQuMgorCislZGVzY3JpcHRpb24gYWxsCitHaXQgaXMgYSBmYXN0LCBzY2FsYWJsZSwgZGlzdHJpYnV0ZWQgcmV2aXNpb24gY29udHJvbCBzeXN0ZW0gd2l0aCBhbgordW51c3VhbGx5IHJpY2ggY29tbWFuZCBzZXQgdGhhdCBwcm92aWRlcyBib3RoIGhpZ2gtbGV2ZWwgb3BlcmF0aW9ucworYW5kIGZ1bGwgYWNjZXNzIHRvIGludGVybmFscy4KKworVGhpcyBpcyBhIGR1bW15IHBhY2thZ2Ugd2hpY2ggYnJpbmdzIGluIGFsbCBzdWJwYWNrYWdlcy4KKworJXBhY2thZ2Ugc3ZuCitTdW1tYXJ5OiAgICAgICAgR2l0IHRvb2xzIGZvciBpbXBvcnRpbmcgU3VidmVyc2lvbiByZXBvc2l0b3JpZXMKK0dyb3VwOiAgICAgICAgICBEZXZlbG9wbWVudC9Ub29scworUmVxdWlyZXM6ICAgICAgIGdpdCA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfSwgc3VidmVyc2lvbgorJWRlc2NyaXB0aW9uIHN2bgorR2l0IHRvb2xzIGZvciBpbXBvcnRpbmcgU3VidmVyc2lvbiByZXBvc2l0b3JpZXMuCisKKyVwYWNrYWdlIGN2cworU3VtbWFyeTogICAgICAgIEdpdCB0b29scyBmb3IgaW1wb3J0aW5nIENWUyByZXBvc2l0b3JpZXMKK0dyb3VwOiAgICAgICAgICBEZXZlbG9wbWVudC9Ub29scworUmVxdWlyZXM6ICAgICAgIGdpdCA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfSwgY3ZzLCBjdnNwcworJWRlc2NyaXB0aW9uIGN2cworR2l0IHRvb2xzIGZvciBpbXBvcnRpbmcgQ1ZTIHJlcG9zaXRvcmllcy4KKworJXBhY2thZ2UgYXJjaAorU3VtbWFyeTogICAgICAgIEdpdCB0b29scyBmb3IgaW1wb3J0aW5nIEFyY2ggcmVwb3NpdG9yaWVzCitHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvVG9vbHMKK1JlcXVpcmVzOiAgICAgICBnaXQgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0sIHRsYQorJWRlc2NyaXB0aW9uIGFyY2gKK0dpdCB0b29scyBmb3IgaW1wb3J0aW5nIEFyY2ggcmVwb3NpdG9yaWVzLgorCislcGFja2FnZSBlbWFpbAorU3VtbWFyeTogICAgICAgIEdpdCB0b29scyBmb3Igc2VuZGluZyBlbWFpbAorR3JvdXA6ICAgICAgICAgIERldmVsb3BtZW50L1Rvb2xzCitSZXF1aXJlczoJZ2l0ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CislZGVzY3JpcHRpb24gZW1haWwKK0dpdCB0b29scyBmb3Igc2VuZGluZyBlbWFpbC4KKworJXBhY2thZ2UgZ3VpCitTdW1tYXJ5OiAgICAgICAgR2l0IEdVSSB0b29sCitHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvVG9vbHMKK1JlcXVpcmVzOiAgICAgICBnaXQgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0sIHRrID49IDguNAorJWRlc2NyaXB0aW9uIGd1aQorR2l0IEdVSSB0b29sCisKKyVwYWNrYWdlIC1uIGdpdGsKK1N1bW1hcnk6ICAgICAgICBHaXQgcmV2aXNpb24gdHJlZSB2aXN1YWxpc2VyICgnZ2l0aycpCitHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvVG9vbHMKK1JlcXVpcmVzOiAgICAgICBnaXQgPSAle3ZlcnNpb259LSV7cmVsZWFzZX0sIHRrID49IDguNAorJWRlc2NyaXB0aW9uIC1uIGdpdGsKK0dpdCByZXZpc2lvbiB0cmVlIHZpc3VhbGlzZXIgKCdnaXRrJykKKworJXBhY2thZ2UgLW4gZ2l0d2ViCitTdW1tYXJ5OglHaXQgd2ViIGludGVyZmFjZQorR3JvdXA6ICAgICAgICAgIERldmVsb3BtZW50L1Rvb2xzCitSZXF1aXJlczogICAgICAgZ2l0ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CislZGVzY3JpcHRpb24gLW4gZ2l0d2ViCitCcm93c2luZyBnaXQgcmVwb3NpdG9yeSBvbiB0aGUgd2ViCisKKyVwYWNrYWdlIC1uIHBlcmwtR2l0CitTdW1tYXJ5OiAgICAgICAgUGVybCBpbnRlcmZhY2UgdG8gR2l0CitHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvTGlicmFyaWVzCitSZXF1aXJlczogICAgICAgZ2l0ID0gJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitSZXF1aXJlczogICAgICAgcGVybCg6TU9EVUxFX0NPTVBBVF8lKGV2YWwgImAle19fcGVybH0gLVY6dmVyc2lvbmAiOyBlY2hvICR2ZXJzaW9uKSkKK0J1aWxkUmVxdWlyZXM6ICBwZXJsKEVycm9yKQorQnVpbGRSZXF1aXJlczogIHBlcmwoRXh0VXRpbHM6Ok1ha2VNYWtlcikKKworJWRlc2NyaXB0aW9uIC1uIHBlcmwtR2l0CitQZXJsIGludGVyZmFjZSB0byBHaXQKKworJWRlZmluZSBwYXRoX3NldHRpbmdzIEVUQ19HSVRDT05GSUc9L2V0Yy9naXRjb25maWcgcHJlZml4PSV7X3ByZWZpeH0gbWFuZGlyPSV7X21hbmRpcn0gaHRtbGRpcj0le19kb2NkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQorJXshP3B5dGhvbl9zaXRlbGliOiAlZ2xvYmFsIHB5dGhvbl9zaXRlbGliICUoJXtfX3B5dGhvbn0gLWMgImZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgZ2V0X3B5dGhvbl9saWI7IHByaW50IGdldF9weXRob25fbGliKCkiKX0KKworJXByZXAKKyVzZXR1cCAtcQorCislYnVpbGQKK21ha2UgJXtfc21wX21mbGFnc30gQ0ZMQUdTPSIkUlBNX09QVF9GTEFHUyIgXAorICAgICAle3BhdGhfc2V0dGluZ3N9IFwKKyAgICAgYWxsICV7IT9fd2l0aG91dF9kb2NzOiBkb2N9CisKKyVpbnN0YWxsCitybSAtcmYgJFJQTV9CVUlMRF9ST09UCittYWtlICV7X3NtcF9tZmxhZ3N9IENGTEFHUz0iJFJQTV9PUFRfRkxBR1MiIERFU1RESVI9JFJQTV9CVUlMRF9ST09UIFwKKyAgICAgJXtwYXRoX3NldHRpbmdzfSBcCisgICAgIElOU1RBTExESVJTPXZlbmRvciBpbnN0YWxsICV7IT9fd2l0aG91dF9kb2NzOiBpbnN0YWxsLWRvY30KK3Rlc3QgISAtZCAkUlBNX0JVSUxEX1JPT1Qle3B5dGhvbl9zaXRlbGlifSB8fCBybSAtZnIgJFJQTV9CVUlMRF9ST09UJXtweXRob25fc2l0ZWxpYn0KK2ZpbmQgJFJQTV9CVUlMRF9ST09UIC10eXBlIGYgLW5hbWUgLnBhY2tsaXN0IC1leGVjIHJtIC1mIHt9ICc7JworZmluZCAkUlBNX0JVSUxEX1JPT1QgLXR5cGUgZiAtbmFtZSAnKi5icycgLWVtcHR5IC1leGVjIHJtIC1mIHt9ICc7JworZmluZCAkUlBNX0JVSUxEX1JPT1QgLXR5cGUgZiAtbmFtZSBwZXJsbG9jYWwucG9kIC1leGVjIHJtIC1mIHt9ICc7JworCisoZmluZCAkUlBNX0JVSUxEX1JPT1Qle19iaW5kaXJ9IC10eXBlIGYgfCBncmVwIC12RSAiYXJjaGltcG9ydHxzdm58Y3ZzfGVtYWlsfGdpdGt8Z2l0LWd1aXxnaXQtY2l0b29sIiB8IHNlZCAtZSBzQF4kUlBNX0JVSUxEX1JPT1RAQCkgICAgICAgICAgICAgICA+IGJpbi1tYW4tZG9jLWZpbGVzCisoZmluZCAkUlBNX0JVSUxEX1JPT1Qle19saWJleGVjZGlyfS9naXQtY29yZSAtdHlwZSBmIHwgZ3JlcCAtdkUgImFyY2hpbXBvcnR8c3ZufGN2c3xlbWFpbHxnaXRrfGdpdC1ndWl8Z2l0LWNpdG9vbCIgfCBzZWQgLWUgc0BeJFJQTV9CVUlMRF9ST09UQEApICAgICAgICAgICAgICAgPj4gYmluLW1hbi1kb2MtZmlsZXMKKyhmaW5kICRSUE1fQlVJTERfUk9PVCV7cGVybF92ZW5kb3JsaWJ9IC10eXBlIGYgfCBzZWQgLWUgc0BeJFJQTV9CVUlMRF9ST09UQEApID4+IHBlcmwtZmlsZXMKKyVpZiAleyE/X3dpdGhvdXRfZG9jczoxfTAKKyhmaW5kICRSUE1fQlVJTERfUk9PVCV7X21hbmRpcn0gJFJQTV9CVUlMRF9ST09UL0RvY3VtZW50YXRpb24gLXR5cGUgZiB8IGdyZXAgLXZFICJhcmNoaW1wb3J0fHN2bnxnaXQtY3ZzfGVtYWlsfGdpdGt8Z2l0LWd1aXxnaXQtY2l0b29sIiB8IHNlZCAtZSBzQF4kUlBNX0JVSUxEX1JPT1RAQCAtZSAncy8kLyovJyApID4+IGJpbi1tYW4tZG9jLWZpbGVzCislZWxzZQorcm0gLXJmICRSUE1fQlVJTERfUk9PVCV7X21hbmRpcn0KKyVlbmRpZgorcm0gLXJmICRSUE1fQlVJTERfUk9PVCV7X2RhdGFkaXJ9L2xvY2FsZQorCitta2RpciAtcCAkUlBNX0JVSUxEX1JPT1Qle19zeXNjb25mZGlyfS9iYXNoX2NvbXBsZXRpb24uZAoraW5zdGFsbCAtbSA2NDQgLVQgY29udHJpYi9jb21wbGV0aW9uL2dpdC1jb21wbGV0aW9uLmJhc2ggJFJQTV9CVUlMRF9ST09UJXtfc3lzY29uZmRpcn0vYmFzaF9jb21wbGV0aW9uLmQvZ2l0CisKKyVjbGVhbgorcm0gLXJmICRSUE1fQlVJTERfUk9PVAorCislZmlsZXMgLWYgYmluLW1hbi1kb2MtZmlsZXMKKyVkZWZhdHRyKC0scm9vdCxyb290KQorJXtfZGF0YWRpcn0vZ2l0LWNvcmUvCislZG9jIFJFQURNRSBDT1BZSU5HIERvY3VtZW50YXRpb24vKi50eHQKKyV7IT9fd2l0aG91dF9kb2NzOiAlZG9jIERvY3VtZW50YXRpb24vKi5odG1sIERvY3VtZW50YXRpb24vaG93dG99CisleyE/X3dpdGhvdXRfZG9jczogJWRvYyBEb2N1bWVudGF0aW9uL3RlY2huaWNhbH0KKyV7X3N5c2NvbmZkaXJ9L2Jhc2hfY29tcGxldGlvbi5kCisKKyVmaWxlcyBzdm4KKyVkZWZhdHRyKC0scm9vdCxyb290KQorJXtfbGliZXhlY2Rpcn0vZ2l0LWNvcmUvKnN2bioKKyVkb2MgRG9jdW1lbnRhdGlvbi8qc3ZuKi50eHQKKyV7IT9fd2l0aG91dF9kb2NzOiAle19tYW5kaXJ9L21hbjEvKnN2biouMSp9CisleyE/X3dpdGhvdXRfZG9jczogJWRvYyBEb2N1bWVudGF0aW9uLypzdm4qLmh0bWwgfQorCislZmlsZXMgY3ZzCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgRG9jdW1lbnRhdGlvbi8qZ2l0LWN2cyoudHh0Cisle19iaW5kaXJ9L2dpdC1jdnNzZXJ2ZXIKKyV7X2xpYmV4ZWNkaXJ9L2dpdC1jb3JlLypjdnMqCisleyE/X3dpdGhvdXRfZG9jczogJXtfbWFuZGlyfS9tYW4xLypjdnMqLjEqfQorJXshP193aXRob3V0X2RvY3M6ICVkb2MgRG9jdW1lbnRhdGlvbi8qZ2l0LWN2cyouaHRtbCB9CisKKyVmaWxlcyBhcmNoCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC50eHQKKyV7X2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1hcmNoaW1wb3J0CisleyE/X3dpdGhvdXRfZG9jczogJXtfbWFuZGlyfS9tYW4xL2dpdC1hcmNoaW1wb3J0LjEqfQorJXshP193aXRob3V0X2RvY3M6ICVkb2MgRG9jdW1lbnRhdGlvbi9naXQtYXJjaGltcG9ydC5odG1sIH0KKworJWZpbGVzIGVtYWlsCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgRG9jdW1lbnRhdGlvbi8qZW1haWwqLnR4dAorJXtfbGliZXhlY2Rpcn0vZ2l0LWNvcmUvKmVtYWlsKgorJXshP193aXRob3V0X2RvY3M6ICV7X21hbmRpcn0vbWFuMS8qZW1haWwqLjEqfQorJXshP193aXRob3V0X2RvY3M6ICVkb2MgRG9jdW1lbnRhdGlvbi8qZW1haWwqLmh0bWwgfQorCislZmlsZXMgZ3VpCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyV7X2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1ndWkKKyV7X2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1jaXRvb2wKKyV7X2xpYmV4ZWNkaXJ9L2dpdC1jb3JlL2dpdC1ndWktLWFza3Bhc3MKKyV7X2RhdGFkaXJ9L2dpdC1ndWkvCisleyE/X3dpdGhvdXRfZG9jczogJXtfbWFuZGlyfS9tYW4xL2dpdC1ndWkuMSp9CisleyE/X3dpdGhvdXRfZG9jczogJWRvYyBEb2N1bWVudGF0aW9uL2dpdC1ndWkuaHRtbH0KKyV7IT9fd2l0aG91dF9kb2NzOiAle19tYW5kaXJ9L21hbjEvZ2l0LWNpdG9vbC4xKn0KKyV7IT9fd2l0aG91dF9kb2NzOiAlZG9jIERvY3VtZW50YXRpb24vZ2l0LWNpdG9vbC5odG1sfQorCislZmlsZXMgLW4gZ2l0aworJWRlZmF0dHIoLSxyb290LHJvb3QpCislZG9jIERvY3VtZW50YXRpb24vKmdpdGsqLnR4dAorJXtfYmluZGlyfS8qZ2l0ayoKKyV7X2RhdGFkaXJ9L2dpdGsvCisleyE/X3dpdGhvdXRfZG9jczogJXtfbWFuZGlyfS9tYW4xLypnaXRrKi4xKn0KKyV7IT9fd2l0aG91dF9kb2NzOiAlZG9jIERvY3VtZW50YXRpb24vKmdpdGsqLmh0bWwgfQorCislZmlsZXMgLW4gZ2l0d2ViCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgZ2l0d2ViL1JFQURNRSBnaXR3ZWIvSU5TVEFMTCBEb2N1bWVudGF0aW9uLypnaXR3ZWIqLnR4dAorJXtfZGF0YWRpcn0vZ2l0d2ViCisleyE/X3dpdGhvdXRfZG9jczogJXtfbWFuZGlyfS9tYW4xLypnaXR3ZWIqLjEqfQorJXshP193aXRob3V0X2RvY3M6ICV7X21hbmRpcn0vbWFuNS8qZ2l0d2ViKi41Kn0KKyV7IT9fd2l0aG91dF9kb2NzOiAlZG9jIERvY3VtZW50YXRpb24vKmdpdHdlYiouaHRtbCB9CisKKyVmaWxlcyAtbiBwZXJsLUdpdCAtZiBwZXJsLWZpbGVzCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKworJWZpbGVzIGFsbAorIyBObyBmaWxlcyBmb3IgeW91IQorCislY2hhbmdlbG9nCisqIFN1biBTZXAgMTggMjAxMSBKYWt1YiBOYXJlYnNraSA8am5hcmViQGdtYWlsLmNvbT4KKy0gQWRkIGdpdHdlYiBtYW5wYWdlcyB0byAnZ2l0d2ViJyBzdWJwYWNrYWdlCisKKyogV2VkIEp1biAzMCAyMDEwIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKy0gQWRkICdnaXR3ZWInIHN1YnBhY2thZ2UuCisKKyogRnJpIE1hciAyNiAyMDEwIElhbiBXYXJkIENvbWZvcnQgPGljb21mb3J0QHN0YW5mb3JkLmVkdT4KKy0gU2hpcCBiYXNoIGNvbXBsZXRpb24gc3VwcG9ydCBmcm9tIGNvbnRyaWIvIGluIHRoZSBjb3JlIHBhY2thZ2UuCisKKyogU3VuIEphbiAzMSAyMDEwIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKy0gRG8gbm90IHVzZSAlZGVmaW5lIGluc2lkZSAleyE/Li4ufSBjb25zdHJ1Y3QuCisKKyogU2F0IEphbiAzMCAyMDEwIEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKy0gV2UgZG9uJ3Qgc2hpcCBQeXRob24gYml0cyB1bnRpbCBhIHJlYWwgZm9yZWlnbiBzY20gaW50ZXJmYWNlIGNvbWVzLgorCisqIE1vbiBGZWIgMDQgMjAwOSBEYXZpZCBKLiBNZWxsb3IgPGRtZWxsb3JAd2hpc3RsaW5nY2F0LmNvbT4KKy0gZml4ZWQgYnJva2VuIGdpdCBoZWxwIC13IGFmdGVyIHJlbmFtaW5nIHRoZSBnaXQtY29yZSBwYWNrYWdlIHRvIGdpdC4KKworKiBGcmkgU2VwIDEyIDIwMDggUXV5IFRvbnRoYXQgPHF0b250aGF0QGdtYWlsLmNvbT4KKy0gbW92ZSBnaXQtY3Zzc2VydmVyIHRvIGJpbmRpci4KKworKiBTdW4gSnVuIDE1IDIwMDggSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLSBSZW1vdmUgY3VybCBmcm9tIFJlcXVpcmVzIGxpc3QuCisKKyogRnJpIEZlYiAxNSAyMDA4IEtyaXN0aWFuIEjDuGdzYmVyZyA8a3JoQHJlZGhhdC5jb20+CistIFJlbmFtZSBnaXQtY29yZSB0byBqdXN0IGdpdCBhbmQgcmVuYW1lIG1ldGEgcGFja2FnZSBmcm9tIGdpdCB0byBnaXQtYWxsLgorCisqIFN1biBGZWIgMDMgMjAwOCBKYW1lcyBCb3dlcyA8amJvd2VzQGRhbmdlcm91c2x5aW5jLmNvbT4KKy0gQWRkIGEgQnVpbGRSZXF1aXJlcyBmb3IgZ2V0dGV4dAorCisqIEZyaSBKYW4gMTEgMjAwOCBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CistIEluY2x1ZGUgZ2l0ayBtZXNzYWdlIGZpbGVzCisKKyogU3VuIEphbiAwNiAyMDA4IEphbWVzIEJvd2VzIDxqYm93ZXNAZGFuZ2Vyb3VzbHlpbmMuY29tPgorLSBNYWtlIHRoZSBtZXRhcGFja2FnZSByZXF1aXJlIHRoZSBzYW1lIHZlcnNpb24gb2YgdGhlIHN1YnBhY2thZ2VzLgorCisqIFdlZCBEZWMgMTIgMjAwNyBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CistIEFkanVzdCBodG1sZGlyIHRvIHBvaW50IGF0IC91c3Ivc2hhcmUvZG9jL2dpdC1jb3JlLSR2ZXJzaW9uLworCisqIFN1biBKdWwgMTUgMjAwNyBTZWFuIEVzdGFicm9va3MgPHNlYW5sa21sQHN5bXBhdGljby5jYT4KKy0gUmVtb3ZlZCBwNGltcG9ydC4KKworKiBUdWUgSnVuIDI2IDIwMDcgUXV5IFRvbnRoYXQgPHF0b250aGF0QGdtYWlsLmNvbT4KKy0gRml4ZWQgcHJvYmxlbXMgbG9va2luZyBmb3Igd3JvbmcgbWFucGFnZXMuCisKKyogVGh1IEp1biAyMSAyMDA3IFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KKy0gQWRkZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyBmb3IgZ2l0LWd1aQorCisqIFR1ZSBNYXkgMTMgMjAwNyBRdXkgVG9udGhhdCA8cXRvbnRoYXRAZ21haWwuY29tPgorLSBBZGRlZCBsaWIgZmlsZXMgZm9yIGdpdC1ndWkKKy0gQWRkZWQgRG9jdW1lbnRhdGlvbi90ZWNobmljYWwgKEFzIG5lZWRlZCBieSBHaXQgVXNlcnMgTWFudWFsKQorCisqIFR1ZSBNYXkgOCAyMDA3IFF1eSBUb250aGF0IDxxdG9udGhhdEBnbWFpbC5jb20+CistIEFkZGVkIGhvd3RvIGZpbGVzCisKKyogVHVlIE1hciAyNyAyMDA3IEV5Z2VuZSBSeWFiaW5raW4gPHJlYS1naXRAY29kZWxhYnMucnU+CistIEFkZGVkIHRoZSBnaXQtcDQgcGFja2FnZTogUGVyZm9yY2UgaW1wb3J0IHN0dWZmLgorCisqIE1vbiBGZWIgMTMgMjAwNyBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgorLSBVcGRhdGUgY29yZSBwYWNrYWdlIGRlc2NyaXB0aW9uIChHaXQgaXNuJ3QgYXMgc3R1cGlkIGFzIGl0IHVzZWQgdG8gYmUpCisKKyogTW9uIEZlYiAxMiAyMDA3IEp1bmlvIEMgSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KKy0gQWRkIGdpdC1ndWkgYW5kIGdpdC1jaXRvb2wuCisKKyogTW9uIE5vdiAxNCAyMDA1IEguIFBldGVyIEFudmluIDxocGFAenl0b3IuY29tPiAwLjk5LjlqLTEKKy0gQ2hhbmdlIHN1YnBhY2thZ2UgbmFtZXMgdG8gZ2l0LTxuYW1lPiBpbnN0ZWFkIG9mIGdpdC1jb3JlLTxuYW1lPgorLSBDcmVhdGUgZW1wdHkgcm9vdCBwYWNrYWdlIHdoaWNoIGJyaW5ncyBpbiBhbGwgc3VicGFja2FnZXMKKy0gUmVuYW1lIGdpdC10ayAtPiBnaXRrCisKKyogVGh1IE5vdiAxMCAyMDA1IENocmlzIFdyaWdodCA8Y2hyaXN3QG9zZGwub3JnPiAwLjk5LjlnLTEKKy0gemxpYiBkZXBlbmRlbmN5IGZpeAorLSBNaW5vciBjbGVhbnVwcyBmcm9tIHNwbGl0CistIE1vdmUgYXJjaCBpbXBvcnQgdG8gc2VwYXJhdGUgcGFja2FnZSBhcyB3ZWxsCisKKyogVHVlIFNlcCAyNyAyMDA1IEppbSBSYWRmb3JkIDxyYWRmb3JkQGJsYWNrYmVhbi5vcmc+CistIE1vdmUgcHJvZ3JhbXMgd2l0aCBub24tc3RhbmRhcmQgZGVwZW5kZW5jaWVzIChzdm4sIGN2cywgZW1haWwpCisgIGludG8gc2VwYXJhdGUgcGFja2FnZXMKKworKiBUdWUgU2VwIDI3IDIwMDUgSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+CistIHBhcmFsbGVsaXplIGJ1aWxkCistIENPUFRTIC0+IENGTEFHUworCisqIEZyaSBTZXAgMTYgMjAwNSBDaHJpcyBXcmlnaHQgPGNocmlzd0Bvc2RsLm9yZz4gMC45OS42LTEKKy0gdXBkYXRlIHRvIDAuOTkuNgorCisqIEZyaSBTZXAgMTYgMjAwNSBIb3JzdCBILiB2b24gQnJhbmQgPHZvbmJyYW5kQGluZi51dGZzbS5jbD4KKy0gTGludXMgbm90aWNlZCB0aGF0IGxlc3MgaXMgcmVxdWlyZWQsIGFkZGVkIHRvIHRoZSBkZXBlbmRlbmNpZXMKKworKiBTdW4gU2VwIDExIDIwMDUgSG9yc3QgSC4gdm9uIEJyYW5kIDx2b25icmFuZEBpbmYudXRmc20uY2w+CistIFVwZGF0ZWQgZGVwZW5kZW5jaWVzCistIERvbid0IGFzc3VtZSBtYW5wYWdlcyBhcmUgZ3ppcHBlZAorCisqIFRodSBBdWcgMTggMjAwNSBDaHJpcyBXcmlnaHQgPGNocmlzd0Bvc2RsLm9yZz4gMC45OS40LTQKKy0gZHJvcCBzaF91dGlscywgc2gtdXRpbHMsIGRpZmZ1dGlscywgbWt0ZW1wLCBhbmQgb3BlbnNzbCBSZXF1aXJlcworLSB1c2UgUlBNX09QVF9GTEFHUyBpbiBzcGVjIGZpbGUsIGRyb3AgcGF0Y2gwCisKKyogV2VkIEF1ZyAxNyAyMDA1IFRvbSAic3BvdCIgQ2FsbGF3YXkgPHRjYWxsYXdhQHJlZGhhdC5jb20+IDAuOTkuNC0zCistIHVzZSBkaXN0IHRhZyB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gYnJhbmNoZXMKKy0gdXNlIHJwbSBvcHRmbGFncyBieSBkZWZhdWx0IChwYXRjaDApCistIG93biAle19kYXRhZGlyfS9naXQtY29yZS8KKworKiBNb24gQXVnIDE1IDIwMDUgQ2hyaXMgV3JpZ2h0IDxjaHJpc3dAb3NkbC5vcmc+CistIHVwZGF0ZSBzcGVjIGZpbGUgdG8gZml4IEJ1aWxkcm9vdCwgUmVxdWlyZXMsIGFuZCBkcm9wIFZlbmRvcgorCisqIFN1biBBdWcgMDcgMjAwNSBIb3JzdCBILiB2b24gQnJhbmQgPHZvbmJyYW5kQGluZi51dGZzbS5jbD4KKy0gUmVkaWQgdGhlIGRlc2NyaXB0aW9uCistIEN1dCBvdmVybG9uZyBtYWtlIGxpbmUsIGxvb3NlbmVkIGNoYW5nZWxvZyBhIGJpdAorLSBJIHRoaW5rIEp1bmlvIChvciBwZXJoYXBzIE9TREw/KSBzaG91bGQgYmUgdmVuZG9yLi4uCisKKyogVGh1IEp1bCAxNCAyMDA1IEVyaWMgQmllZGVybWFuIDxlYmllZGVybUB4bWlzc2lvbi5jb20+CistIEFkZCB0aGUgbWFuIHBhZ2VzLCBhbmQgdGhlIC0td2l0aG91dCBkb2NzIGJ1aWxkIG9wdGlvbgorCisqIFdlZCBKdWwgNyAyMDA1IENocmlzIFdyaWdodCA8Y2hyaXNAb3NkbC5vcmc+CistIGluaXRpYWwgZ2l0IHNwZWMgZmlsZQpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvLmdpdGlnbm9yZSBiL2dpdGstZ2l0Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdlYmNhZgotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisvR0lULVRDTFRLLVZBUlMKKy9naXRrLXdpc2gKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L01ha2VmaWxlIGIvZ2l0ay1naXQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjZGM5MAotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L01ha2VmaWxlCkBAIC0wLDAgKzEsNzkgQEAKKyMgVGhlIGRlZmF1bHQgdGFyZ2V0IG9mIHRoaXMgTWFrZWZpbGUgaXMuLi4KK2FsbDo6CisKK3ByZWZpeCA/PSAkKEhPTUUpCitiaW5kaXIgPz0gJChwcmVmaXgpL2Jpbgorc2hhcmVkaXIgPz0gJChwcmVmaXgpL3NoYXJlCitnaXRrX2xpYmRpciAgID89ICQoc2hhcmVkaXIpL2dpdGsvbGliCittc2dzZGlyICAgID89ICQoZ2l0a19saWJkaXIpL21zZ3MKK21zZ3NkaXJfU1EgID0gJChzdWJzdCAnLCdcJycsJChtc2dzZGlyKSkKKworVENMX1BBVEggPz0gdGNsc2gKK1RDTFRLX1BBVEggPz0gd2lzaAorSU5TVEFMTCA/PSBpbnN0YWxsCitSTSA/PSBybSAtZgorCitERVNURElSX1NRID0gJChzdWJzdCAnLCdcJycsJChERVNURElSKSkKK2JpbmRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoYmluZGlyKSkKK1RDTFRLX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFRDTFRLX1BBVEgpKQorCisjIyMgRGV0ZWN0IFRjay9UayBpbnRlcnByZXRlciBwYXRoIGNoYW5nZXMKK1RSQUNLX1RDTFRLID0gJChzdWJzdCAnLCdcJycsLURUQ0xUS19QQVRIPSckKFRDTFRLX1BBVEhfU1EpJykKKworR0lULVRDTFRLLVZBUlM6IEZPUkNFCisJQFZBUlM9JyQoVFJBQ0tfVENMVEspJzsgXAorCQlpZiB0ZXN0IHgiJCRWQVJTIiAhPSB4ImBjYXQgJEAgMj4vZGV2L251bGxgIiA7IHRoZW4gXAorCQkJZWNobyAxPiYyICIgICAgKiBuZXcgVGNsL1RrIGludGVycHJldGVyIGxvY2F0aW9uIjsgXAorCQkJZWNobyAiJCRWQVJTIiA+JEA7IFwKKwkJZmkKKworIyMgcG8tZmlsZSBjcmVhdGlvbiBydWxlcworWEdFVFRFWFQgICA/PSB4Z2V0dGV4dAoraWZkZWYgTk9fTVNHRk1UCisJTVNHRk1UID89ICQoVENMX1BBVEgpIHBvL3BvMm1zZy5zaAorZWxzZQorCU1TR0ZNVCA/PSBtc2dmbXQKKwlpZm5lcSAoJChzaGVsbCAkKE1TR0ZNVCkgLS10Y2wgLWwgQyAtZCAuIC9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgZWNobyAkJD8pLDApCisJCU1TR0ZNVCA6PSAkKFRDTF9QQVRIKSBwby9wbzJtc2cuc2gKKwllbmRpZgorZW5kaWYKKworUE9fVEVNUExBVEUgPSBwby9naXRrLnBvdAorQUxMX1BPRklMRVMgPSAkKHdpbGRjYXJkIHBvLyoucG8pCitBTExfTVNHRklMRVMgPSAkKHN1YnN0IC5wbywubXNnLCQoQUxMX1BPRklMRVMpKQorCitpZm5kZWYgVgorCVFVSUVUICAgICAgICAgID0gQAorCVFVSUVUX0dFTiAgICAgID0gJChRVUlFVCllY2hvICcgICAnIEdFTiAkQCAmJgorZW5kaWYKKworYWxsOjogZ2l0ay13aXNoICQoQUxMX01TR0ZJTEVTKQorCitpbnN0YWxsOjogYWxsCisJJChJTlNUQUxMKSAtbSA3NTUgZ2l0ay13aXNoICckKERFU1RESVJfU1EpJChiaW5kaXJfU1EpJy9naXRrCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJworCSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChJTlNUQUxMKSAtbSA2NDQgJHAgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJyAmJikgdHJ1ZQorCit1bmluc3RhbGw6OgorCSQoZm9yZWFjaCBwLCQoQUxMX01TR0ZJTEVTKSwgJChSTSkgJyQoREVTVERJUl9TUSkkKG1zZ3NkaXJfU1EpJy8kKG5vdGRpciAkcCkgJiYpIHRydWUKKwkkKFJNKSAnJChERVNURElSX1NRKSQoYmluZGlyX1NRKScvZ2l0aworCitjbGVhbjo6CisJJChSTSkgZ2l0ay13aXNoIHBvLyoubXNnIEdJVC1UQ0xUSy1WQVJTCisKK2dpdGstd2lzaDogZ2l0ayBHSVQtVENMVEstVkFSUworCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxLDNzfF5leGVjIC4qICIkJDAifGV4ZWMgJChzdWJzdCB8LCdcfCcsJChUQ0xUS19QQVRIX1NRKSkgIiQkMCJ8JyA8Z2l0ayA+JEArICYmIFwKKwljaG1vZCAreCAkQCsgJiYgXAorCW12IC1mICRAKyAkQAorCiskKFBPX1RFTVBMQVRFKTogZ2l0aworCSQoWEdFVFRFWFQpIC1rbWMgLUxUY2wgLW8gJEAgZ2l0awordXBkYXRlLXBvOjogJChQT19URU1QTEFURSkKKwkkKGZvcmVhY2ggcCwgJChBTExfUE9GSUxFUyksIGVjaG8gVXBkYXRpbmcgJHAgOyBtc2dtZXJnZSAtVSAkcCAkKFBPX1RFTVBMQVRFKSA7ICkKKyQoQUxMX01TR0ZJTEVTKTogJS5tc2cgOiAlLnBvCisJQGVjaG8gR2VuZXJhdGluZyBjYXRhbG9nICRACisJJChNU0dGTVQpIC0tc3RhdGlzdGljcyAtLXRjbCAkPCAtbCAkKGJhc2VuYW1lICQobm90ZGlyICQ8KSkgLWQgJChkaXIgJEApCisKKy5QSE9OWTogYWxsIGluc3RhbGwgdW5pbnN0YWxsIGNsZWFuIHVwZGF0ZS1wbworLlBIT05ZOiBGT1JDRQpkaWZmIC0tZ2l0IGEvZ2l0ayBiL2dpdGstZ2l0L2dpdGsKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGdpdGsKcmVuYW1lIHRvIGdpdGstZ2l0L2dpdGsKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvLy5naXRpZ25vcmUgYi9naXRrLWdpdC9wby8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNThkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKKyoubXNnCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9iZy5wbyBiL2dpdGstZ2l0L3BvL2JnLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOWE1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9iZy5wbwpAQCAtMCwwICsxLDEzNjUgQEAKKyMgQnVsZ2FyaWFuIHRyYW5zbGF0aW9uIG9mIGdpdGsgcG8tZmlsZS4KKyMgQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz4uCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQgcGFja2FnZS4KKyMgQWxleGFuZGVyIFNob3BvdiA8YXNoQGthbWJhbmFyaWEub3JnPiwgMjAxNCwgMjAxNS4KKyMKKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGsgbWFzdGVyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA2LTI3IDIwOjQ0KzAzMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTA2LTI3IDIwOjQ2KzAzMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFsZXhhbmRlciBTaG9wb3YgPGFzaEBrYW1iYW5hcmlhLm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBCdWxnYXJpYW4gPGRpY3RAZnNhLWJnLm9yZz5cbiIKKyJMYW5ndWFnZTogYmdcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgItCh0L/QuNGB0YrQutGK0YIg0YEg0L3QtdGB0LvQtdGC0Lgg0YTQsNC50LvQvtCy0LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7Qu9GD0YfQtdC9OiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzgxCittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgItCe0YbQstC10YLRj9Cy0LDQvdC1INC90LAg0LTRg9C80LjRgtC1IgorCisjOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MworbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAi0J7RgtCx0LXQu9GP0LfQstCw0L3QtSDQvdCwINC00YPQvNC40YLQtSIKKworIzogZ2l0azozMjQKK21zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0YDQsNC30LHQvtGAINC90LAg0LLQtdGA0YHQuNC40YLQtToiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDRgSDigJ4tLWFyZ3NjbWTigJwuIgorCisjOiBnaXRrOjM5MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorItCd0LUg0YHQsCDQuNC30LHRgNCw0L3QuCDRhNCw0LnQu9C+0LLQtSDigJQg0YPQutCw0LfQsNC90LAg0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1tZXJnZeKAnCwg0L3QviDQvdGP0LzQsCDQvdC10YHQu9C10YLQuCDRhNCw0LnQu9C+0LLQtS4iCisKKyM6IGdpdGs6Mzk2Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyLQndC1INGB0LAg0LjQt9Cx0YDQsNC90Lgg0YTQsNC50LvQvtCy0LUg4oCUINGD0LrQsNC30LDQvdCwINC1INC+0L/RhtC40Y/RgtCwIOKAni0tbWVyZ2XigJwsINC90L4g0L3Rj9C80LAg0L3QtdGB0LvQtdGC0Lgg0YTQsNC50LvQvtCy0LUgIgorItCyINC+0LPRgNCw0L3QuNGH0LXQvdC40Y/RgtCwLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5naXQgbG9n4oCcOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICLQn9GA0L7Rh9C40YLQsNC90LUiCisKKyM6IGdpdGs6NDk2IGdpdGs6NDUyNQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAi0J/RgNC+0YfQuNGC0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsOKApiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgItCd0LUg0YHQsCDQuNC30LHRgNCw0L3QuCDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGdpdGs6MTQ0NSBnaXRrOjQwNDUgZ2l0azoxMjQzMgorbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LXQvSDRgNC10LQiCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAi0JjQt9GF0L7QtNGK0YIg0L7RgiDigJ5naXQgbG9n4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsDoiCisKKyM6IGdpdGs6MTc0MAorbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgItCb0LjQv9GB0LLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQorbXNnaWQgIk9LIgorbXNnc3RyICLQlNC+0LHRgNC1IgorCisjOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKKyM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi0J7RgtC60LDQtyIKKworIzogZ2l0azoyMDY5Cittc2dpZCAiJlVwZGF0ZSIKK21zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUiCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgItCf0YDQtdC30LDRgNC10LbQtNCw0L3QtSIKKworIzogZ2l0azoyMDcxCittc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgorbXNnc3RyICLQndCw0L3QvtCy0L4g0L/RgNC+0YfQuNGC0LDQvdC1INC90LAg0L3QsNGB0YLRgNC+0LnQutC40YLQtSIKKworIzogZ2l0azoyMDcyCittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAi0JjQt9Cx0YDQvtGP0LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1IgorCisjOiBnaXRrOjIwNzQKK21zZ2lkICJTdGFydCBnaXQgJmd1aSIKK21zZ3N0ciAi0KHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCDigJ5naXQgZ3Vp4oCcIgorCisjOiBnaXRrOjIwNzYKK21zZ2lkICImUXVpdCIKK21zZ3N0ciAi0KHQv9C40YDQsNC90LUg0L3QsCDQv9GA0L7Qs9GA0LDQvNCw0YLQsCIKKworIzogZ2l0azoyMDY4Cittc2dpZCAiJkZpbGUiCittc2dzdHIgItCk0LDQudC7IgorCisjOiBnaXRrOjIwODAKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgItCg0LXQtNCw0LrRgtC40YDQsNC90LUiCisKKyM6IGdpdGs6MjA4NAorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAi0J3QvtCyINC40LfQs9C70LXQtOKApiIKKworIzogZ2l0azoyMDg1Cittc2dpZCAiJkVkaXQgdmlldy4uLiIKK21zZ3N0ciAi0KDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINC40LfQs9C70LXQtNCw4oCmIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC40LfQs9C70LXQtNCwIgorCisjOiBnaXRrOjIwODggZ2l0azo0MDQzCittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAi0JLRgdC40YfQutC4INGE0LDQudC70L7QstC1IgorCisjOiBnaXRrOjIwODMgZ2l0azo0MDY3Cittc2dpZCAiJlZpZXciCittc2dzdHIgItCY0LfQs9C70LXQtCIKKworIzogZ2l0azoyMDkzIGdpdGs6MjEwMyBnaXRrOjMwMTIKK21zZ2lkICImQWJvdXQgZ2l0ayIKK21zZ3N0ciAi0J7RgtC90L7RgdC90L4gZ2l0ayIKKworIzogZ2l0azoyMDk0IGdpdGs6MjEwOAorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgItCa0LvQsNCy0LjRiNC90Lgg0LrQvtC80LHQuNC90LDRhtC40LgiCisKKyM6IGdpdGs6MjA5MiBnaXRrOjIxMDcKK21zZ2lkICImSGVscCIKK21zZ3N0ciAi0J/QvtC80L7RiSIKKworIzogZ2l0azoyMTg1IGdpdGs6ODY1MgorbXNnaWQgIlNIQTEgSUQ6IgorbXNnc3RyICJTSEExOiIKKworIzogZ2l0azoyMjI5Cittc2dpZCAiUm93IgorbXNnc3RyICLQoNC10LQiCisKKyM6IGdpdGs6MjI2NworbXNnaWQgIkZpbmQiCittc2dzdHIgItCi0YrRgNGB0LXQvdC1IgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6MjI5OSBnaXRrOjIzMDEgZ2l0azo0Njg3IGdpdGs6NDcxMCBnaXRrOjQ3MzQgZ2l0azo2NzU1IGdpdGs6NjgyNworIzogZ2l0azo2OTEyCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgItGB0YrQtNGK0YDQttCw0YnQvjoiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAi0LfQsNGB0Y/Qs9Cw0YnQviDQv9GK0YLQuNGJ0LDRgtCwOiIKKworIzogZ2l0azoyMzAzIGdpdGs6NDc3NworbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgorbXNnc3RyICLQtNC+0LHQsNCy0Y/RidC+L9C/0YDQtdC80LDRhdCy0LDRidC+INC90LjQtyIKKworIzogZ2l0azoyMzA0IGdpdGs6NDc3OQorbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAi0L/RgNC+0LzQtdC90Y/RidC+INGA0LXQtNC+0LLQtSDQvdCw0L/QsNGB0LLQsNGJ0Lg6IgorCisjOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDc2NgorbXNnaWQgIkV4YWN0IgorbXNnc3RyICLQotC+0YfQvdC+IgorCisjOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgItCR0LXQtyDRgNC10LPQuNGB0YLRitGAIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0NzM2IGdpdGs6NDg1MiBnaXRrOjY3MTkKK21zZ2lkICJSZWdleHAiCittc2dzdHIgItCg0LXQsy4g0LjQt9GA0LDQtyIKKworIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzQgZ2l0azo0OTA0IGdpdGs6NDkxMSBnaXRrOjY4NDggZ2l0azo2OTE2Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAi0JLRgdC40YfQutC4INC/0L7Qu9C10YLQsCIKKworIzogZ2l0azoyMzE4IGdpdGs6NDg3MSBnaXRrOjQ5MDQgZ2l0azo2Nzg2Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgItCf0YrRgNCy0Lgg0YDQtdC0IgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjY5MTYgZ2l0azo3Mzg5Cittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgItCa0L7QvNC10L3RgtCw0YDQuCIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjQ4NzYgZ2l0azo0OTExIGdpdGs6Njc4NiBnaXRrOjczMjQgZ2l0azo4ODMwCisjOiBnaXRrOjg4NDUKK21zZ2lkICJBdXRob3IiCittc2dzdHIgItCQ0LLRgtC+0YAiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NzMyNgorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAi0J/QvtC00LDQstCw0YkiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAi0KLRitGA0YHQtdC90LUiCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgItCg0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAi0KHRgtCw0YDQsCDQstC10YDRgdC40Y8iCisKKyM6IGdpdGs6MjM2MgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICLQndC+0LLQsCDQstC10YDRgdC40Y8iCisKKyM6IGdpdGs6MjM2NAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgItCa0L7QvdGC0LXQutGB0YIg0LIg0YDQtdC00L7QstC1IgorCisjOiBnaXRrOjIzNzQKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICLQn9GA0LDQt9C90LjRgtC1INC30L3QsNGG0Lgg0LHQtdC3INC30L3QsNGH0LXQvdC40LUiCisKKyM6IGdpdGs6MjM3OCBnaXRrOjIzODAgZ2l0azo3OTU5IGdpdGs6ODIwNgorbXNnaWQgIkxpbmUgZGlmZiIKK21zZ3N0ciAi0J/QvtGA0LXQtNC+0LLQuCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azoyNDQ1Cittc2dpZCAiUGF0Y2giCittc2dzdHIgItCa0YDRitC/0LrQsCIKKworIzogZ2l0azoyNDQ3Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAi0JTRitGA0LLQviIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzNworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAi0KDQsNC30LvQuNC60Lgg0LzQtdC20LTRgyDRgtC+0LLQsCDQuCDQuNC30LHRgNCw0L3QvtGC0L4iCisKKyM6IGdpdGs6MjYxOCBnaXRrOjI2MzgKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgItCg0LDQt9C70LjQutC4INC80LXQttC00YMg0LjQt9Cx0YDQsNC90L7RgtC+INC4INGC0L7QstCwIgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjM5Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0LrRgNGK0L/QutCwIgorCisjOiBnaXRrOjI2MjAgZ2l0azo5MjU0Cittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0LXRgtC40LrQtdGCIgorCisjOiBnaXRrOjI2MjEgZ2l0azo5MzcxCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgItCX0LDQv9Cw0LfQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+INCy0YrQsiDRhNCw0LnQuyIKKworIzogZ2l0azoyNjIyIGdpdGs6OTQyOAorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUg0L3QsCDQvdC+0LIg0LrQu9C+0L0iCisKKyM6IGdpdGs6MjYyMworbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICLQntGC0LHQuNGA0LDQvdC1INC90LAg0YLQvtCy0LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azoyNjI0Cittc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAi0J/RgNC40LLQtdC20LTQsNC90LUg0L3QsCDQstGK0YDRhdCwINC90LAg0LrQu9C+0L3QsCDQutGK0Lwg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjI2MjUKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICLQntGC0LHQtdC70Y/Qt9Cy0LDQvdC1INC90LAg0YLQvtCy0LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azoyNjI2Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgItCS0YDRitGJ0LDQvdC1INC60YrQvCDQvtGC0LHQtdC70Y/Qt9Cw0L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgItCe0YLQutGA0LjQstCw0L3QtSDQuCDQvtGC0LHQtdC70Y/Qt9Cy0LDQvdC1INC90LAg0L3QsNGB0LvQtdC00L3QuNGG0LjRgtC1IgorCisjOiBnaXRrOjI2MjgKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAi0KHRgNCw0LLQvdC10L3QuNC1INGBINC+0YLQsdC10LvRj9C30LDQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjI2MjkgZ2l0azoyNjQwCittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgItCg0LDQt9C70LjQutC4INC80LXQttC00YMg0YLQvtCy0LAg0Lgg0L7RgtCx0LXQu9GP0LfQsNC90L7RgtC+IgorCisjOiBnaXRrOjI2MzAgZ2l0azoyNjQxCittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgItCg0LDQt9C70LjQutC4INC80LXQttC00YMg0L7RgtCx0LXQu9GP0LfQsNC90L7RgtC+INC4INGC0L7QstCwIgorCisjOiBnaXRrOjI2MzEKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgItCe0YLQvNGP0L3QsCDQvdCwINGC0L7QstCwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6MjY0NworbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi0JjQt9GC0LXQs9C70Y/QvdC1INC90LAg0YLQvtC30Lgg0LrQu9C+0L0iCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YLQvtC30Lgg0LrQu9C+0L0iCisKKyM6IGdpdGs6MjY0OQorbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCittc2dzdHIgItCa0L7Qv9C40YDQsNC90LUg0L3QsCDQuNC80LXRgtC+INC90LAg0LrQu9C+0L3QsCIKKworIzogZ2l0azoyNjU2Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICLQntGC0LHQtdC70Y/Qt9Cy0LDQvdC1INC4INC90LAg0YLQvtCy0LAiCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgItCe0YLQsdC10LvRj9C30LLQsNC90LUg0YHQsNC80L4g0L3QsCDRgtC+0LLQsCIKKworIzogZ2l0azoyNjU4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAi0JLRitC90YjQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAi0JDQvdC+0YLQuNGA0LDQvdC1INC90LAg0YDQvtC00LjRgtC10LvRgdC60L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6MjY2MAorbXNnaWQgIkNvcHkgcGF0aCIKK21zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQvdCwINC/0YrRgtGPIgorCisjOiBnaXRrOjI2NjcKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC/0YDQvtC40LfRhdC+0LTQsCDQvdCwINGC0L7Qt9C4INGA0LXQtCIKKworIzogZ2l0azoyNjY4Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICLQmNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAnmdpdCBndWkgYmxhbWXigJwg0LLRitGA0YXRgyDRgtC+0LfQuCDRgNC10LQiCisKKyM6IGdpdGs6MzAxNAorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgwqkgMjAwNS0yMDE0IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKK21zZ3N0ciAiIgorIlxuIgorIkdpdGsg4oCUINCy0LjQt9GD0LDQu9C40LfQsNGG0LjRjyDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0LIgR2l0XG4iCisiXG4iCisi0JDQstGC0L7RgNGB0LrQuCDQv9GA0LDQstCwOiDCqSAyMDA1LTIwMTQgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyLQmNC30L/QvtC70LfQstCw0LnRgtC1INC4INGA0LDQt9C/0YDQvtGB0YLRgNCw0L3Rj9Cy0LDQudGC0LUg0L/RgNC4INGD0YHQu9C+0LLQuNGP0YLQsCDQvdCwINCe0J/QmyDQvdCwINCT0J3QoyIKKworIzogZ2l0azozMDIyIGdpdGs6MzA4OSBnaXRrOjk4NTcKK21zZ2lkICJDbG9zZSIKK21zZ3N0ciAi0JfQsNGC0LLQsNGA0Y/QvdC1IgorCisjOiBnaXRrOjMwNDMKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAi0JrQu9Cw0LLQuNGI0L3QuCDQutC+0LzQsdC40L3QsNGG0LjQuCIKKworIzogZ2l0azozMDQ2Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICLQmtC70LDQstC40YjQvdC4INC60L7QvNCx0LjQvdCw0YbQuNC4OiIKKworIzogZ2l0azozMDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHTQodC/0LjRgNCw0L3QtSDQvdCwINC/0YDQvtCz0YDQsNC80LDRgtCwIgorCisjOiBnaXRrOjMwNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtVz5cdFx00JfQsNGC0LLQsNGA0Y/QvdC1INC90LAg0L/RgNC+0LfQvtGA0LXRhtCwIgorCisjOiBnaXRrOjMwNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHTQmtGK0Lwg0L/RitGA0LLQvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azozMDUxCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx00JrRitC8INC/0L7RgdC70LXQtNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6MzA1MgorbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPFVwPiwgcCwga1x00JXQtNC90L4g0L/QvtC00LDQstCw0L3QtSDQvdCw0LPQvtGA0LUiCisKKyM6IGdpdGs6MzA1MworbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwgalx00JXQtNC90L4g0L/QvtC00LDQstCw0L3QtSDQvdCw0LTQvtC70YMiCisKKyM6IGdpdGs6MzA1NAorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMZWZ0PiwgeiwgaFx00J3QsNC30LDQtCDQsiDQuNGB0YLQvtGA0LjRj9GC0LAiCisKKyM6IGdpdGs6MzA1NQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8UmlnaHQ+LCB4LCBsXHTQndCw0L/RgNC10LQg0LIg0LjRgdGC0L7RgNC40Y/RgtCwIgorCisjOiBnaXRrOjMwNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPCVzLW4+XHTQmtGK0Lwgbi3RgtC40Y8g0YDQvtC00LjRgtC10Lsg0L3QsCDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0LIg0LjRgdGC0L7RgNC40Y/RgtCwIgorCisjOiBnaXRrOjMwNTcKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdNCh0YLRgNCw0L3QuNGG0LAg0L3QsNCz0L7RgNC1INCyINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCisKKyM6IGdpdGs6MzA1OAorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx00KHRgtGA0LDQvdC40YbQsCDQvdCw0LTQvtC70YMg0LIg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogZ2l0azozMDU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdNCa0YrQvCDQvdCw0YfQsNC70L7RgtC+INC90LAg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogZ2l0azozMDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHTQmtGK0Lwg0LrRgNCw0Y8g0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgorCisjOiBnaXRrOjMwNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcD5cdNCg0LXQtCDQvdCw0LPQvtGA0LUg0LIg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBnaXRrOjMwNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtRG93bj5cdNCg0LXQtCDQvdCw0LTQvtC70YMg0LIg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBnaXRrOjMwNjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZVVwPlx00KHRgtGA0LDQvdC40YbQsCDQvdCw0LPQvtGA0LUg0LIg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBnaXRrOjMwNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx00KHRgtGA0LDQvdC40YbQsCDQvdCw0LTQvtC70YMg0LIg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBnaXRrOjMwNjUKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1VcD5cdNCi0YrRgNGB0LXQvdC1INC90LDQt9Cw0LQgKNCy0LjQt9GD0LDQu9C90L4g0L3QsNCz0L7RgNC1LCDQuNGB0YLQvtGA0LjRh9C10YHQutC4IOKAlCDQv9C+0YHQu9C10LTQstCw0YnQuCkiCisKKyM6IGdpdGs6MzA2NgorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICIiCisiPFNoaWZ0LURvd24+XHTQotGK0YDRgdC10L3QtSDQvdCw0L/RgNC10LQgKNCy0LjQt9GD0LDQu9C90L4g0L3QsNC00L7Qu9GDLCDQuNGB0YLQvtGA0LjRh9C10YHQutC4IOKAlCDQv9GA0LXQtNGF0L7QttC00LDRidC4KSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHTQodGC0YDQsNC90LjRhtCwINC90LDQs9C+0YDQtSDQsiDQuNC30LPQu9C10LTQsCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjMwNjgKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdNCh0YLRgNCw0L3QuNGG0LAg0L3QsNC00L7Qu9GDINCyINC40LfQs9C70LXQtNCwINC30LAg0YDQsNC30LvQuNC60LgiCisKKyM6IGdpdGs6MzA2OQorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8U3BhY2U+XHRcdNCh0YLRgNCw0L3QuNGG0LAg0L3QsNC00L7Qu9GDINCyINC40LfQs9C70LXQtNCwINC30LAg0YDQsNC30LvQuNC60LgiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHQxOCDRgNC10LTQsCDQvdCw0LPQvtGA0LUg0LIg0LjQt9Cz0LvQtdC00LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azozMDcxCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0MTgg0YDQtdC00LAg0L3QsNC00L7Qu9GDINCyINC40LfQs9C70LXQtNCwINC30LAg0YDQsNC30LvQuNC60LgiCisKKyM6IGdpdGs6MzA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx00KLRitGA0YHQtdC90LUiCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHTQmtGK0Lwg0YHQu9C10LTQstCw0YnQsNGC0LAg0L/QvtGP0LLQsCIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdNCa0YrQvCDRgdC70LXQtNCy0LDRidCw0YLQsCDQv9C+0Y/QstCwIgorCisjOiBnaXRrOjMwNzUKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiZ1x0XHTQmtGK0Lwg0L/QvtGB0LvQtdC00L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHTQpNC+0LrRg9GBINCy0YrRgNGF0YMg0L/QvtC70LXRgtC+INC30LAg0YLRitGA0YHQtdC90LUiCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHTQmtGK0Lwg0L/RgNC10LTQuNGI0L3QsNGC0LAg0L/QvtGP0LLQsCIKKworIzogZ2l0azozMDc4Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHTQodC70LXQtNCy0LDRiSDRhNCw0LnQuyDQsiDQuNC30LPQu9C10LTQsCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjMwNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHTQotGK0YDRgdC10L3QtSDQvdCwINGB0LvQtdC00LLQsNGJ0LDRgtCwINC/0L7Rj9Cy0LAg0LIg0LjQt9Cz0LvQtdC00LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdNCi0YrRgNGB0LXQvdC1INC90LAg0L/RgNC10LTQuNGI0L3QsNGC0LAg0L/QvtGP0LLQsCDQsiDQuNC30LPQu9C10LTQsCDQt9CwINGA0LDQt9C70LjQutC4IgorCisjOiBnaXRrOjMwODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx00J/Qvi3Qs9C+0LvRj9C8INGA0LDQt9C80LXRgCDQvdCwINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azozMDgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx00J/Qvi3Qs9C+0LvRj9C8INGA0LDQt9C80LXRgCDQvdCwINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdNCf0L4t0LzQsNC70YrQuiDRgNCw0LfQvNC10YAg0L3QsCDRiNGA0LjRhNGC0LAiCisKKyM6IGdpdGs6MzA4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1pbnVzPlx00J/Qvi3QvNCw0LvRitC6INGA0LDQt9C80LXRgCDQvdCwINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azozMDg1Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx00J7QsdC90L7QstGP0LLQsNC90LUiCisKKyM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0LLRgNC10LzQtdC90L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g4oCeJXPigJw6IgorCisjOiBnaXRrOjM1NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQv9C+0LvRg9GH0LDQstCw0L3QtdGC0L4g0L3QsCDigJ4lc+KAnCDQvtGCICVzOiIKKworIzogZ2l0azozNjM1Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutC+0LzQsNC90LTQsDoiCisKKyM6IGdpdGs6Mzc4NAorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICLQotCw0LrQvtCy0LAg0L/QvtC00LDQstCw0L3QtSDQvdGP0LzQsCIKKworIzogZ2l0azozNzk4Cittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICLigJ5naXQgZ3VpIGJsYW1l4oCcOiDQvdC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutC+0LzQsNC90LTQsDoiCisKKyM6IGdpdGs6MzgyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgItCS0YrRgNGF0YrRgiDQt9CwINGB0LvQuNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9OiAlcyIKKworIzogZ2l0azozODM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/RgNC+0YfQuNGC0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LA6ICVzIgorCisjOiBnaXRrOjM4NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICLQmtC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGJsYW1l4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGC0LDRgNGC0LjRgNCw0L3QsDogJXMiCisKKyM6IGdpdGs6Mzg2NSBnaXRrOjY3NTQKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgItCi0YrRgNGB0LXQvdC1IgorCisjOiBnaXRrOjM4OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9C/0YrQu9C90LXQvdC40LXRgtC+INC90LAg4oCeZ2l0IGJsYW1l4oCcOiAlcyIKKworIzogZ2l0azozOTI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAi0KLQvtC30Lgg0YDQtdC0INC40LTQstCwINC+0YIg0L/QvtC00LDQstCw0L3QtdGC0L4gJXMsINC60L7QtdGC0L4g0L3QtSDQtSDQsiDQuNC30LPQu9C10LTQsCIKKworIzogZ2l0azozOTM5Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LLRitC90YjQvdCw0YLQsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0YDQsNC30LvQuNC60Lg6IgorCisjOiBnaXRrOjQwNzAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAi0JTQtdGE0LjQvdC40YbQuNGPINC90LAg0LjQt9Cz0LvQtdC0INCyIEdpdGsiCisKKyM6IGdpdGs6NDA3NAorbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKK21zZ3N0ciAi0JfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0YLQvtC30Lgg0LjQt9Cz0LvQtdC0IgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70LggKNGB0L/QuNGB0YrQuiDRgSDRgNCw0LfQtNC10LvQuNGC0LXQuyDQuNC90YLQtdGA0LLQsNC7KToiCisKKyM6IGdpdGs6NDA3NgorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgItCa0LvQvtC90Lgg0Lgg0LXRgtC40LrQtdGC0Lg6IgorCisjOiBnaXRrOjQwNzcKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAi0JLRgdC40YfQutC4INGD0LrQsNC30LDRgtC10LvQuCIKKworIzogZ2l0azo0MDc4Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgItCS0YHQuNGH0LrQuCAo0LvQvtC60LDQu9C90LgpINC60LvQvtC90LgiCisKKyM6IGdpdGs6NDA3OQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICLQktGB0LjRh9C60Lgg0LXRgtC40LrQtdGC0LgiCisKKyM6IGdpdGs6NDA4MAorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgItCS0YHQuNGH0LrQuCDRgdC70LXQtNGP0YnQuCDQutC70L7QvdC4IgorCisjOiBnaXRrOjQwODEKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICLQmNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0L7QtNCw0LLQsNC90LUgKNGA0LXQsy4g0LjQt9GALik6IgorCisjOiBnaXRrOjQwODIKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICLQkNCy0YLQvtGAOiIKKworIzogZ2l0azo0MDgzCittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAi0J/QvtC00LDQuzoiCisKKyM6IGdpdGs6NDA4NAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1OiIKKworIzogZ2l0azo0MDg1Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgItCh0YrQstC/0LDQtNC10L3QuNC1INC/0L4g0LLRgdC40YfQutC4INGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC60Lgg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviIKKworIzogZ2l0azo0MDg2Cittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAi0J3QtSDRgdGK0LLQv9Cw0LTQsCDQv9C+INC90LjQutC+0Y8g0L7RgiDRhdCw0YDQsNC60YLQtdGA0LjRgdGC0LjQutC40YLQtSDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBnaXRrOjQwODcKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90Lgg0L/QviDRhNCw0LnQu9C+0LLQtdGC0LU6IgorCisjOiBnaXRrOjQwODgKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgItCU0L7RgdC70L7QstC10L0g0L3QuNC3IgorCisjOiBnaXRrOjQwODkKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgItCg0LXQs9GD0LvRj9GA0LXQvSDQuNC30YDQsNC3IgorCisjOiBnaXRrOjQwOTAKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAi0J3QuNC3INC30LAg0YLRitGA0YHQtdC90LU6IgorCisjOiBnaXRrOjQwOTEKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyLQlNCw0YLQsCDQvdCwINC/0L7QtNCw0LLQsNC90LUgKOKAnjIgd2Vla3MgYWdv4oCcICjQv9GA0LXQtNC4IDIg0YHQtdC00LzQuNGG0LgpLCDigJ4yMDA5LTAzLTE3IDE1OjI3OjM44oCcLCAiCisi4oCeTWFyY2ggMTcsIDIwMDkgMTU6Mjc6MzjigJwpOiIKKworIzogZ2l0azo0MDkyCittc2dpZCAiU2luY2U6IgorbXNnc3RyICLQntGCOiIKKworIzogZ2l0azo0MDkzCittc2dpZCAiVW50aWw6IgorbXNnc3RyICLQlNC+OiIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIiIKKyLQntCz0YDQsNC90LjRh9Cw0LLQsNC90LUg0Lgv0LjQu9C4INC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0L7Qv9GA0LXQtNC10LvQtdC9INCx0YDQvtC5INCy0LXRgNGB0LjQuCAo0L3QtdC+0YLRgNC40YbQsNGC0LXQu9C90L4g0YbRj9C70L4gIgorItGH0LjRgdC70L4pOiIKKworIzogZ2l0azo0MDk1Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICLQkdGA0L7QuSDQv9C+0LrQsNC30LDQvdC4OiIKKworIzogZ2l0azo0MDk2Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICLQkdGA0L7QuSDQv9GA0LXRgdC60L7Rh9C10L3QuDoiCisKKyM6IGdpdGs6NDA5NworbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgItCg0LDQt9C90Lg6IgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgItCf0L7QtNGA0LXQttC00LDQvdC1INC/0L4g0LTQsNGC0LAiCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICLQntGC0LHQtdC70Y/Qt9Cy0LDQvdC1INC90LAg0YHRgtGA0LDQvdC40YLQtSDQv9C+INC60LvQvtC90LAiCisKKyM6IGdpdGs6NDEwMAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAi0KHQsNC80L4g0L/RitGA0LLQuNGPINGA0L7QtNC40YLQtdC7IgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAi0J7Qv9GA0L7RgdGC0LXQvdCwINC40YHRgtC+0YDQuNGPIgorCisjOiBnaXRrOjQxMDIKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAi0JTQvtC/0YrQu9C90LjRgtC10LvQvdC4INCw0YDQs9GD0LzQtdC90YLQuCDQutGK0Lwg4oCeZ2l0IGxvZ+KAnDoiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICLQktGK0LLQtdC00LXRgtC1INGE0LDQudC70L7QstC10YLQtSDQuCDQtNC40YDQtdC60YLQvtGA0LjQuNGC0LUg0LfQsCDQstC60LvRjtGH0LLQsNC90LUsINC/0L4g0LXQu9C10LzQtdC90YIg0L3QsCDRgNC10LQiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICIiCisi0JrQvtC80LDQvdC00LAg0LfQsCDQs9C10L3QtdGA0LjRgNCw0L3QtdGC0L4g0L3QsCDQtNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0L/QvtC00LDQstCw0L3QuNGPLCDQutC+0LjRgtC+INC00LAg0LHRitC00LDRgiDQstC60LvRjtGH0LXQvdC4OiIKKworIzogZ2l0azo0MjI4Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrOiDRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0LjQt9Cz0LvQtdC0IgorCisjOiBnaXRrOjQyMzYKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAi4oCUINC60YDQuNGC0LXRgNC40Lgg0LfQsCDQuNC30LHQvtGAINC90LAg0LLQtdGA0YHQuNC4IgorCisjOiBnaXRrOjQyNDEKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgItCY0LzQtSDQvdCwINC40LfQs9C70LXQtCIKKworIzogZ2l0azo0MzE2Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1IChGNSkiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINCyINCw0YDQs9GD0LzQtdC90YLQuNGC0LUg0LfQsCDQuNC30LHQvtGAINC90LAg0L/QvtC00LDQstCw0L3QuNGPOiIKKworIzogZ2l0azo0NDA5IGdpdGs6NDQ2MiBnaXRrOjQ5MjQgZ2l0azo0OTM4IGdpdGs6NjIwOCBnaXRrOjEyMzczIGdpdGs6MTIzNzQKK21zZ2lkICJOb25lIgorbXNnc3RyICLQndGP0LzQsCIKKworIzogZ2l0azo1MDIxIGdpdGs6NTAyNgorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgItCd0LDRgdC70LXQtNC90LjQuiIKKworIzogZ2l0azo1MDIyCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgItCd0LUg0LUg0L3QsNGB0LvQtdC00L3QuNC6IgorCisjOiBnaXRrOjUwMjkgZ2l0azo1MDM0Cittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgItCf0YDQtdC00YjQtdGB0YLQstC10L3QuNC6IgorCisjOiBnaXRrOjUwMzAKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgItCd0LUg0LUg0L/RgNC10LTRiNC10YHRgtCy0LXQvdC40LoiCisKKyM6IGdpdGs6NTMyNAorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAi0JvQvtC60LDQu9C90Lgg0L/RgNC+0LzQtdC90Lgg0LTQvtCx0LDQstC10L3QuCDQutGK0Lwg0LjQvdC00LXQutGB0LAsINC90L4g0L3QtdC/0L7QtNCw0LTQtdC90LgiCisKKyM6IGdpdGs6NTM2MAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICLQm9C+0LrQsNC70L3QuCDQv9GA0L7QvNC10L3QuCDQuNC30LLRitC9INC40L3QtNC10LrRgdCwIgorCisjOiBnaXRrOjcxMzQKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICLQuCDQvtGJ0LUg0LzQvdC+0LPQviIKKworIzogZ2l0azo3MTM3Cittc2dpZCAibWFueSIKK21zZ3N0ciAi0LzQvdC+0LPQviIKKworIzogZ2l0azo3MzI4Cittc2dpZCAiVGFnczoiCittc2dzdHIgItCV0YLQuNC60LXRgtC4OiIKKworIzogZ2l0azo3MzQ1IGdpdGs6NzM1MSBnaXRrOjg4MjUKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgItCg0L7QtNC40YLQtdC7IgorCisjOiBnaXRrOjczNTYKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAi0JTQtdGC0LUiCisKKyM6IGdpdGs6NzM2NQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAi0JrQu9C+0L0iCisKKyM6IGdpdGs6NzM2OAorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgItCh0LvQtdC00LLQsCIKKworIzogZ2l0azo3MzcxCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgItCf0YDQtdC00YjQtdGB0YLQstCwIgorCisjOiBnaXRrOjc5NjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQv9C+0LvRg9GH0LDQstCw0L3QtdGC0L4g0L3QsCDRgNCw0LfQu9C40LrQuNGC0LU6ICVzIgorCisjOiBnaXRrOjg2NTAKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAi0JrRitC8INGA0LXQtDoiCisKKyM6IGdpdGs6ODY3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICLQodGK0LrRgNCw0YLQtdC90LDRgtCwINGB0YPQvNCwINC/0L4gU0hBMSAlcyDQvdC1INC1INC10LTQvdC+0LfQvdCw0YfQvdCwIgorCisjOiBnaXRrOjg2NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDQstC10YDRgdC40Y8gJXMiCisKKyM6IGdpdGs6ODY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICLQndC10L/QvtC30L3QsNGC0LAg0YHRg9C80LAg0L/QviBTSEExICVzIgorCisjOiBnaXRrOjg2OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAi0JLQtdGA0YHQuNGPICVzINC90LUg0LUg0LIg0YLQtdC60YPRidC40Y8g0LjQt9Cz0LvQtdC0IgorCisjOiBnaXRrOjg4MzIgZ2l0azo4ODQ3Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAi0JTQsNGC0LAiCisKKyM6IGdpdGs6ODgzNQorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICLQlNC10YbQsCIKKworIzogZ2l0azo4ODk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgItCX0LDQvdGD0LvRj9Cy0LDQvdC1INC90LAg0LrQu9C+0L3QsCDigJ4lc+KAnCDQutGK0Lwg0YLQtdC60YPRidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXRrOjg5MDAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAi0J3QtdGB0LLRitGA0LfQsNC9INCy0YDRitGFOiDQvdC10LLRitC30LzQvtC20L3QviDQt9Cw0L3Rg9C70Y/QstCw0L3QtSIKKworIzogZ2l0azo5MDA1IGdpdGs6OTAxMQorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgItCf0YDQvtC/0YPRgdC60LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4g0L3QsCDRgdC70LjQstCw0L3QtdGC0L4iCisKKyM6IGdpdGs6OTAyMCBnaXRrOjkwMjUKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0L/QvtC70YPRh9Cw0LLQsNC90LXRgtC+INC90LAg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQsCDQvdCwICIKKworIzogZ2l0azo5MDIxIGdpdGs6OTAyNgorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiDigJQg0YHQv9C40YDQsNC90LVcbiIKKworIzogZ2l0azo5MDMxIGdpdGs6OTAzNCBnaXRrOjkwNDIgZ2l0azo5MDU2IGdpdGs6OTA2NQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6OTAzNQorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiINC1INGB0YrRidCw0YLQsCDQutGA0YrQv9C60LAg0LrQsNGC0L5cbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDMKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIg0YHQtSDRgNCw0LfQu9C40YfQsNCy0LAg0L7RglxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0NQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyLQoNCw0LfQu9C40LrQsCDQvNC10LbQtNGDINC/0L7QtNCw0LLQsNC90LjRj9GC0LA6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiINC40LzQsCAlcyDQtNC10YbQsCDigJQg0YHQv9C40YDQsNC90LVcbiIKKworIzogZ2l0azo5MDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNC/0LDQt9Cy0LDQvdC10YLQviDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+INCy0YrQsiDRhNCw0LnQuzogJXMiCisKKyM6IGdpdGs6OTA5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9GH0LjRgdC70Y/QstCw0L3QtdGC0L4g0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUg0LzQtdC20LTRgyDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwOiAlcyIKKworIzogZ2l0azo5MTM3Cittc2dpZCAiVG9wIgorbXNnc3RyICLQndCw0Lkt0LPQvtGA0LUiCisKKyM6IGdpdGs6OTEzOAorbXNnaWQgIkZyb20iCittc2dzdHIgItCe0YIiCisKKyM6IGdpdGs6OTE0MworbXNnaWQgIlRvIgorbXNnc3RyICLQlNC+IgorCisjOiBnaXRrOjkxNjcKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAi0JPQtdC90LXRgNC40YDQsNC90LUg0L3QsCDQutGA0YrQv9C60LAiCisKKyM6IGdpdGs6OTE2OQorbXNnaWQgIkZyb206IgorbXNnc3RyICLQntGCOiIKKworIzogZ2l0azo5MTc4Cittc2dpZCAiVG86IgorbXNnc3RyICLQlNC+OiIKKworIzogZ2l0azo5MTg3Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAi0J7QsdGA0YrRidCw0L3QtSIKKworIzogZ2l0azo5MTg5IGdpdGs6OTM4NQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAi0JfQsNC/0LDQt9Cy0LDQvdC1INCy0YrQsiDRhNCw0LnQu9CwOiIKKworIzogZ2l0azo5MTk1Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgItCT0LXQvdC10YDQuNGA0LDQvdC1IgorCisjOiBnaXRrOjkyMzMKK21zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC60YDRitC/0LrQsDoiCisKKyM6IGdpdGs6OTI1NiBnaXRrOjkzNzMgZ2l0azo5NDMwCittc2dpZCAiSUQ6IgorbXNnc3RyICLQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgDoiCisKKyM6IGdpdGs6OTI2NQorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAi0JjQvNC1INC90LAg0LXRgtC40LrQtdGCOiIKKworIzogZ2l0azo5MjY4Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgItCh0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQtdGC0LjQutC10YIg0LUg0L3QtdC30LDQtNGK0LvQttC40YLQtdC70L3QviIKKworIzogZ2l0azo5MjcwCittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICLQodGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQtdGC0LjQutC10YI6IgorCisjOiBnaXRrOjkyNzQgZ2l0azo5NDM5Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LUiCisKKyM6IGdpdGs6OTI5MgorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAi0JvQuNC/0YHQstCwINC40LzQtSDQvdCwINC10YLQuNC60LXRgiIKKworIzogZ2l0azo5Mjk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0JXRgtC40LrQtdGC0YrRgiDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogZ2l0azo5MzA2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0LXRgtC40LrQtdGCOiIKKworIzogZ2l0azo5MzgyCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgItCa0L7QvNCw0L3QtNCwOiIKKworIzogZ2l0azo5MzkwCittc2dpZCAiV3JpdGUiCittc2dzdHIgItCX0LDQv9Cw0LfQstCw0L3QtSIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC30LDQv9Cw0LfQstCw0L3QtdGC0L4g0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQvjoiCisKKyM6IGdpdGs6OTQzNQorbXNnaWQgIk5hbWU6IgorbXNnc3RyICLQmNC80LU6IgorCisjOiBnaXRrOjk0NTgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICLQo9C60LDQttC10YLQtSDQuNC80LUg0LfQsCDQvdC+0LLQuNGPINC60LvQvtC9IgorCisjOiBnaXRrOjk0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwLiDQlNCwINCx0YrQtNC1INC70Lgg0L/RgNC10LfQsNC/0LjRgdCw0L0/IgorCisjOiBnaXRrOjk1MzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINCy0LXRh9C1INC1INCy0LrQu9GO0YfQtdC90L4g0LIg0LrQu9C+0L3QsCDigJ4lc+KAnCDigJQg0LTQsCDQsdGK0LTQtSDQu9C4INC/0YDQuNC70L7QttC10L3QviDQvtGC0L3QvtCy0L4/IgorCisjOiBnaXRrOjk1MzUKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAi0J7RgtCx0LjRgNCw0L3QtSIKKworIzogZ2l0azo5NTQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDQvtGC0LHQuNGA0LDQvdC1LCDQt9Cw0YnQvtGC0L4g0LLRitCyINGE0LDQudC70LAg4oCeJXPigJwg0LjQvNCwINC70L7QutCw0LvQvdC4INC/0YDQvtC80LXQvdC4LlxuIgorItCf0L7QtNCw0LnRgtC1LCDQt9Cw0L3Rg9C70LXRgtC1INC40LvQuCDQs9C4INGB0LrQsNGC0LDQudGC0LUg0Lgg0L/RgNC+0LHQstCw0LnRgtC1INC+0YLQvdC+0LLQvi4iCisKKyM6IGdpdGs6OTU1MAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDQvtGC0LHQuNGA0LDQvdC1INC/0L7RgNCw0LTQuCDQutC+0L3RhNC70LjQutGC0Lgg0L/RgNC4INGB0LvQuNCy0LDQvdC1LlxuIgorItCY0YHQutCw0YLQtSDQu9C4INC00LAg0LPQuCDQutC+0YDQuNCz0LjRgNCw0YLQtSDRh9GA0LXQtyDigJ5naXQgY2l0b29s4oCcPyIKKworIzogZ2l0azo5NTY2IGdpdGs6OTYyNAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICLQndC1INGB0LAg0L/QvtC00LDQtNC10L3QuCDQv9GA0L7QvNC10L3QuCIKKworIzogZ2l0azo5NTkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC90LUg0LUg0LLQutC70Y7Rh9C10L3QviDQsiDQutC70L7QvdCwIOKAniVz4oCcLiDQlNCwINCx0YrQtNC1INC70Lgg0L7RgtC80LXQvdC10L3Qvj8iCisKKyM6IGdpdGs6OTU5OAorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAi0J7RgtC80Y/QvdCwIgorCisjOiBnaXRrOjk2MDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgorImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QsCDQvtGC0LzRj9C90LAsINC30LDRidC+0YLQviDQstGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnCDQuNC80LAg0LvQvtC60LDQu9C90Lgg0L/RgNC+0LzQtdC90LguXG4iCisi0J/QvtC00LDQudGC0LUsINC30LDQvdGD0LvQtdGC0LUg0LjQu9C4INCz0Lgg0YHQutCw0YLQsNC50YLQtSDQuCDQv9GA0L7QsdCy0LDQudGC0LUg0L7RgtC90L7QstC+LjwiCisKKyM6IGdpdGs6OTYxMAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INC+0YLQvNGP0L3QsCDQv9C+0YDQsNC00Lgg0LrQvtC90YTQu9C40LrRgtC4INC/0YDQuCDRgdC70LjQstCw0L3QtS5cbiIKKyLQmNGB0LrQsNGC0LUg0LvQuCDQtNCwINCz0Lgg0LrQvtGA0LjQs9C40YDQsNGC0LUg0YfRgNC10Lcg4oCeZ2l0IGNpdG9vbOKAnD8iCisKKyM6IGdpdGs6OTY1MworbXNnaWQgIkNvbmZpcm0gcmVzZXQiCittc2dzdHIgItCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LfQsNC90YPQu9GP0LLQsNC90LXRgtC+IgorCisjOiBnaXRrOjk2NTUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgorbXNnc3RyICLQlNCwINGB0LUg0LfQsNC90YPQu9C4INC70Lgg0LrQu9C+0L3RitGCIOKAniVz4oCcINC60YrQvCDigJ4lc+KAnD8iCisKKyM6IGdpdGs6OTY1NworbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICLQktC40LQg0LfQsNC90YPQu9GP0LLQsNC90LU6IgorCisjOiBnaXRrOjk2NjAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAi0KHQu9Cw0LHQvjog0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0Lgg0LjQvdC00LXQutGB0LAg0L7RgdGC0LDQstCw0YIg0YHRitGJ0LjRgtC1IgorCisjOiBnaXRrOjk2NjMKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgItCh0LzQtdGB0LXQvdC+OiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQvtGB0YLQsNCy0LAg0YHRitGJ0L7RgtC+LCDQuNC90LTQtdC60YHRitGCINGB0LUg0LfQsNC90YPQu9GP0LLQsCIKKworIzogZ2l0azo5NjY2Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyLQodC40LvQvdC+OiDQt9Cw0L3Rg9C70Y/QstCw0L3QtSDQuCDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+LCDQuCDQvdCwINC40L3QtNC10LrRgdCwXG4iCisiKCrQktCh0JjQp9Ca0JgqINC70L7QutCw0LvQvdC4INC/0YDQvtC80LXQvdC4INGJ0LUg0LHRitC00LDRgiDQsdC10LfQstGK0LfQstGA0LDRgtC90L4g0LfQsNCz0YPQsdC10L3QuCkiCisKKyM6IGdpdGs6OTY4MworbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAi0JfQsNC90YPQu9GP0LLQsNC90LUiCisKKyM6IGdpdGs6OTc0MworbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAi0JjQt9GC0LXQs9C70Y/QvdC1IgorCisjOiBnaXRrOjk3OTYKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgorbXNnc3RyICLQotC10LrRg9GJ0L4g0LjQt9GC0LXQs9C70LXQvdC40Y/RgiDQutC70L7QvSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBnaXRrOjk4MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorItCf0L7QtNCw0LLQsNC90LjRj9GC0LAg0L3QsCDQutC70L7QvdCwIOKAniVz4oCcINC90LUg0YHQsCDQvdCwINC90LjQutC+0Lkg0LTRgNGD0LMg0LrQu9C+0L0uXG4iCisi0J3QsNC40YHRgtC40L3QsCDQu9C4INC00LAg0YHQtSDQuNC30YLRgNC40LUg0LrQu9C+0L3RitGCIOKAniVz4oCcPyIKKworIzogZ2l0azo5ODMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICLQldGC0LjQutC10YLQuCDQuCDQstGK0YDRhdC+0LLQtTogJXMiCisKKyM6IGdpdGs6OTg1MAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAi0KTQuNC70YLRgNC40YDQsNC90LUiCisKKyM6IGdpdGs6MTAxNDYKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyLQk9GA0LXRiNC60LAg0L/RgNC4INC/0YDQvtGH0LjRgtCw0L3QtdGC0L4g0L3QsCDRgtC+0L/QvtC70L7Qs9C40Y/RgtCwINC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsC4g0JjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0LrQu9C+0L3QsCAiCisi0Lgg0L/RgNC10LTRiNC10YHRgtCy0LDRidC40YLQtS/RgdC70LXQtNCy0LDRidC40YLQtSDQtdGC0LjQutC10YLQuCDRidC1INC1INC90LXQv9GK0LvQvdCwLiIKKworIzogZ2l0azoxMTEyMworbXNnaWQgIlRhZyIKK21zZ3N0ciAi0JXRgtC40LrQtdGCIgorCisjOiBnaXRrOjExMTI3Cittc2dpZCAiSWQiCittc2dzdHIgItCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAIgorCisjOiBnaXRrOjExMjEwCittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgItCY0LfQsdC+0YAg0L3QsCDRiNGA0LjRhNGCINC30LAgR2l0ayIKKworIzogZ2l0azoxMTIyNworbXNnaWQgIkIiCittc2dzdHIgItCnIgorCisjOiBnaXRrOjExMjMwCittc2dpZCAiSSIKK21zZ3N0ciAi0JoiCisKKyM6IGdpdGs6MTEzNDgKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogZ2l0azoxMTM1MQorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAi0JzQsNC60YHQuNC80LDQu9C90LAg0YjQuNGA0L7Rh9C40L3QsCDQvdCwINCz0YDQsNGE0LAgKNCyINGA0LXQtNC+0LLQtSkiCisKKyM6IGdpdGs6MTEzNTUKKyMsIG5vLXRjbC1mb3JtYXQKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgorbXNnc3RyICLQnNCw0LrRgdC40LzQsNC70L3QsCDRiNC40YDQvtGH0LjQvdCwINC90LAg0LPRgNCw0YTQsCAoJSDQvtGCINC/0LDQvdC10LvQsCkiCisKKyM6IGdpdGs6MTEzNTgKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC70L7QutCw0LvQvdC40YLQtSDQv9GA0L7QvNC10L3QuCIKKworIzogZ2l0azoxMTM2MQorbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEgKGxlbmd0aCkiCittc2dzdHIgItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0LjQt9Cx0LjRgNCw0L3QtSDQvdCwIFNIQTEgKNC00YrQu9C20LjQvdCwKSIKKworIzogZ2l0azoxMTM2NQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgItCh0LrRgNC40LLQsNC90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBnaXRrOjExMzY5Cittc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwINC/0L7QutCw0LfQstCw0L3QtdGC0L4g0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUiCisKKyM6IGdpdGs6MTEzNzEKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAi0KjQuNGA0L7Rh9C40L3QsCDQvdCwINGC0LDQsdGD0LvQsNGC0L7RgNCwIgorCisjOiBnaXRrOjExMzc0Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LHQu9C40LfQutC40YLQtSDQtdGC0LjQutC10YLQuCDQuCDQstGK0YDRhdC+0LLQtSIKKworIzogZ2l0azoxMTM3NworbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgItCc0LDQutGB0LjQvNCw0LvQtdC9INCx0YDQvtC5INC10YLQuNC60LXRgtC4L9Cy0YrRgNGF0L7QstC1INC30LAg0L/QvtC60LDQt9Cy0LDQvdC1IgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICLQoNCw0LfQu9C40LrQsCDRgdCw0LzQviDQsiDQuNC30LHRgNCw0L3QuNGC0LUg0L/RitGC0LjRidCwIgorCisjOiBnaXRrOjExMzgzCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgItCf0L7QtNC00YDRitC20LrQsCDQvdCwINGA0LDQt9C70LjRh9C90Lgg0LrQvtC00LjRgNCw0L3QuNGPINC30LAg0LLRgdC10LrQuCDRhNCw0LnQuyIKKworIzogZ2l0azoxMTM4OSBnaXRrOjExNTM2Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICLQktGK0L3RiNC10L0g0LjQvdGB0YLRgNGD0LzQtdC90YIg0LfQsCDRgNCw0LfQu9C40LrQuCIKKworIzogZ2l0azoxMTM5MAorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAi0JjQt9Cx0L7RgOKApiIKKworIzogZ2l0azoxMTM5NQorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAi0J7QsdGJ0Lgg0L3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBnaXRrOjExMzk4Cittc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgorbXNnc3RyICLQmNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGC0LXQvNCwINC30LAg0LPRgNCw0YTQuNGH0L3QuNGC0LUg0L7QsdC10LrRgtC4IgorCisjOiBnaXRrOjExNDAwCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKNC/0YDQvtC80Y/QvdCw0YLQsCDQuNC30LjRgdC60LLQsCDRgNC10YHRgtCw0YDRgtC40YDQsNC90LUg0L3QsCBHaXRrKSIKKworIzogZ2l0azoxMTQwMgorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIo0LIg0LzQvtC80LXQvdGC0LAg0L3QtdC00L7RgdGC0YrQv9C90L4pIgorCisjOiBnaXRrOjExNDEzCittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgItCm0LLQtdGC0L7QstC1OiDQuNC30LHQuNGA0LAg0YHQtSDRgSDQvdCw0YLQuNGB0LrQsNC90LUiCisKKyM6IGdpdGs6MTE0MTYKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgItCY0L3RgtC10YDRhNC10LnRgSIKKworIzogZ2l0azoxMTQxNworbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAi0LjQvdGC0LXRgNGE0LXQudGBIgorCisjOiBnaXRrOjExNDIwCittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAi0KTQvtC9IgorCisjOiBnaXRrOjExNDIxIGdpdGs6MTE0NTEKK21zZ2lkICJiYWNrZ3JvdW5kIgorbXNnc3RyICLRhNC+0L0iCisKKyM6IGdpdGs6MTE0MjQKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICLQl9C90LDRhtC4IgorCisjOiBnaXRrOjExNDI1Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAi0LfQvdCw0YbQuCIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAi0KDQsNC30LvQuNC60LA6INGB0YLQsNGA0Lgg0YDQtdC00L7QstC1IgorCisjOiBnaXRrOjExNDI5Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgItGA0LDQt9C70LjQutCwLCDRgdGC0LDRgNC4INGA0LXQtNC+0LLQtSIKKworIzogZ2l0azoxMTQzMworbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAi0KDQsNC30LvQuNC60LA6INC90L7QstC4INGA0LXQtNC+0LLQtSIKKworIzogZ2l0azoxMTQzNAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICLRgNCw0LfQu9C40LrQsCwg0L3QvtCy0Lgg0YDQtdC00L7QstC1IgorCisjOiBnaXRrOjExNDM4Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgItCg0LDQt9C70LjQutCwOiDQvdCw0YfQsNC70L4g0L3QsCDQv9Cw0YDRh9C1IgorCisjOiBnaXRrOjExNDQwCittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAi0YDQsNC30LvQuNC60LAsINC90LDRh9Cw0LvQviDQvdCwINC/0LDRgNGH0LUiCisKKyM6IGdpdGs6MTE0NDQKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAi0KTQvtC9INC90LAg0L7RgtCx0LXQu9GP0LfQsNC9INGA0LXQtCIKKworIzogZ2l0azoxMTQ0NgorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgItGE0L7QvSDQvdCwINC+0YLQsdC10LvRj9C30LDQvSDRgNC10LQiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgItCY0LfQsdC+0YAg0L3QsCDRhNC+0L0iCisKKyM6IGdpdGs6MTE0NTkKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICLQqNGA0LjRhNGC0L7QstC1OiDQuNC30LHQuNGA0LAg0YHQtSDRgSDQvdCw0YLQuNGB0LrQsNC90LUiCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgItCe0YHQvdC+0LLQtdC9INGI0YDQuNGE0YIiCisKKyM6IGdpdGs6MTE0NjIKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAi0KjRgNC40YTRgiDQt9CwINGA0LDQt9C70LjQutC40YLQtSIKKworIzogZ2l0azoxMTQ2MworbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgItCo0YDQuNGE0YIg0L3QsCDQuNC90YLQtdGA0YTQtdC50YHQsCIKKworIzogZ2l0azoxMTQ4NQorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwIEdpdGsiCisKKyM6IGdpdGs6MTE0OTQKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICLQntCx0YnQuCIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAi0KbQstC10YLQvtCy0LUiCisKKyM6IGdpdGs6MTE0OTYKK21zZ2lkICJGb250cyIKK21zZ3N0ciAi0KjRgNC40YTRgtC+0LLQtSIKKworIzogZ2l0azoxMTU0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6INC40LfQsdC+0YAg0L3QsCDRhtCy0Y/RgiDQvdCwIOKAniVz4oCcIgorCisjOiBnaXRrOjEyMDU5Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisi0KLQsNC30Lgg0LLQtdGA0YHQuNGPINC90LAgVGNsL1RrINC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCwINC+0YIgR2l0ay5cbiIKKyIg0J3QtdC+0LHRhdC+0LTQuNC80LAg0LLQuCDQtSDQv9C+0L3QtSBUY2wvVGsgOC40LiIKKworIzogZ2l0azoxMjI2OQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgItCi0YPQuiDQu9C40L/RgdCy0LAg0YXRgNCw0L3QuNC70LjRidC1INC90LAgR2l0LiIKKworIzogZ2l0azoxMjMxNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAi0J3QtdC10LTQvdC+0LfQvdCw0YfQtdC9INCw0YDQs9GD0LzQtdC90YIg4oCeJXPigJw6INC40LzQsCDQuCDRgtCw0LrQsNCy0LAg0LLQtdGA0YHQuNGPLCDQuCDRgtCw0LrRitCyINGE0LDQudC7IgorCisjOiBnaXRrOjEyMzI4Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90Lgg0LDRgNCz0YPQvNC10L3RgtC4INC90LAgZ2l0azoiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9jYS5wbyBiL2dpdGstZ2l0L3BvL2NhLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhZDA2NmYKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9jYS5wbwpAQCAtMCwwICsxLDEzNjkgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0aworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIyBBbGV4IEhlbnJpZSA8YWxleGhlbnJpZTI0QGdtYWlsLmNvbT4sIDIwMTUuCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTEwLTA1IDIyOjIzLTA2MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEFsZXggSGVucmllIDxhbGV4aGVucmllMjRAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IENhdGFsYW5cbiIKKyJMYW5ndWFnZTogY2FcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKyJYLUdlbmVyYXRvcjogUG9lZGl0IDEuOC41XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgbGEgbGxpc3RhIGRlIGZpdHhlcnMgbm8gZnVzaW9uYXRzOiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzgxCittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgIkNvbG9yYSBsZXMgcGFyYXVsZXMiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjAgZ2l0azo4MjUzCittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICJNYXJjYSBsZXMgcGFyYXVsZXMiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJFcnJvciBlbiBhbmFsaXR6YXIgbGVzIHJldmlzaW9uczoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRXJyb3IgZW4gZXhlY3V0YXIgbCdvcmRyZSAtLWFyZ3NjbWQ6IgorCisjOiBnaXRrOjM5MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorIk5vIGhpIGhhIGZpdHhlcnMgc2VsZWNjaW9uYXRzOiBzJ2hhIGVzcGVjaWZpY2F0IC0tbWVyZ2UgcGVyw7IgY2FwIGZpdHhlciBlc3TDoCAiCisic2Vuc2UgZnVzaW9uYXIuIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiTm8gaGkgaGEgZml0eGVycyBzZWxlY2Npb25hdHM6IHMnaGEgZXNwZWNpZmljYXQgLS1tZXJnZSBwZXLDsiBjYXAgZml0eGVyICIKKyJzZW5zZSBmdXNpb25hciBlc3TDoCBkaW5zIGRlbCBsw61taXQgZGUgZml0eGVycy4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJFcnJvciBlbiBleGVjdXRhciBnaXQgbG9nOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJMbGVnaW50IgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkxsZWdpbnQgbGVzIHJldmlzaW9ucy4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIkNhcCBjb21pc3Npw7Mgc2VsZWNjaW9uYWRhIgorCisjOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkzDrW5pYSBkJ29yZHJlcyIKKworIzogZ2l0azoxNTExCittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJObyBlcyBwb3QgYW5hbGl0emFyIGxhIHNvcnRpZGEgZGVsIGdpdCBsb2c6IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJDYXAgaW5mb3JtYWNpw7MgZGUgY29taXNzacOzIGRpc3BvbmlibGUiCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKK21zZ2lkICJPSyIKK21zZ3N0ciAiRCdhY29yZCIKKworIzogZ2l0azoxOTM0IGdpdGs6NDMxNyBnaXRrOjkxOTYgZ2l0azo5Mjc1IGdpdGs6OTM5MSBnaXRrOjk0NDAgZ2l0azo5NjcxCisjOiBnaXRrOjExMjQyIGdpdGs6MTE1MjIKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkNhbmNlbMK3bGEiCisKKyM6IGdpdGs6MjA2OQorbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIkFjdHVhbGl0emEiCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIlJlY2FycmVnYSIKKworIzogZ2l0azoyMDcxCittc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgorbXNnc3RyICJSZWxsZWdlaXggbGVzIHJlZmVyw6huY2llcyIKKworIzogZ2l0azoyMDcyCittc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKK21zZ3N0ciAiTGxpc3RhIGxlcyByZWZlcsOobmNpZXMiCisKKyM6IGdpdGs6MjA3NAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICJJbmljaWEgZWwgZ2l0IGd1aSIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIlN1cnQiCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICJGaXR4ZXIiCisKKyM6IGdpdGs6MjA4MAorbXNnaWQgIiZQcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyw6huY2llcyIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgIkVkaXRhIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgIlZpc3RhIG5vdmEuLi4iCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIkVkaXRhIGxhIHZpc3RhLi4uIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgIlN1cHJpbWVpeCBsYSB2aXN0YSIKKworIzogZ2l0azoyMDg4IGdpdGs6NDA0MworbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIlRvdHMgZWxzIGZpdHhlcnMiCisKKyM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiVmlzdGEiCisKKyM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgIlF1YW50IGFsIGdpdGsiCisKKyM6IGdpdGs6MjA5NCBnaXRrOjIxMDgKK21zZ2lkICImS2V5IGJpbmRpbmdzIgorbXNnc3RyICJBc3NvY2lhY2lvbnMgZGUgdGVjbGVzIgorCisjOiBnaXRrOjIwOTIgZ2l0azoyMTA3Cittc2dpZCAiJkhlbHAiCittc2dzdHIgIkFqdWRhIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIklEIFNIQTE6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIkZpbGEiCisKKyM6IGdpdGs6MjI2NworbXNnaWQgIkZpbmQiCittc2dzdHIgIkNlcmNhIgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgImNvbWlzc2nDsyIKKworIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3CisjOiBnaXRrOjY5MTIKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAicXVlIGNvbnRpbmd1aToiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAicXVlIHRvcXVpIGVscyBjYW1pbnM6IgorCisjOiBnaXRrOjIzMDMgZ2l0azo0Nzc3Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgInF1ZSBhZmVnZWl4aS9lbGltaW5pIGxhIGNhZGVuYToiCisKKyM6IGdpdGs6MjMwNCBnaXRrOjQ3NzkKK21zZ2lkICJjaGFuZ2luZyBsaW5lcyBtYXRjaGluZzoiCittc2dzdHIgInF1ZSB0aW5ndWkgbMOtbmllcyBjYW52aWFkZXMgY29pbmNpZGVudHMgYW1iOiIKKworIzogZ2l0azoyMzEzIGdpdGs6MjMxNSBnaXRrOjQ3NjYKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAiRXhhY3RlIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIklnbm9yYSBtYWrDunNjdWxhIGkgbWluw7pzY3VsYSIKKworIzogZ2l0azoyMzE1IGdpdGs6NDczNiBnaXRrOjQ4NTIgZ2l0azo2NzE5Cittc2dpZCAiUmVnZXhwIgorbXNnc3RyICJSZWdleHAiCisKKyM6IGdpdGs6MjMxNyBnaXRrOjIzMTggZ2l0azo0ODc0IGdpdGs6NDkwNCBnaXRrOjQ5MTEgZ2l0azo2ODQ4IGdpdGs6NjkxNgorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgIlRvdHMgZWxzIGNhbXBzIgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiVGl0dWxhciIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJDb21lbnRhcmlzIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6NDg3NiBnaXRrOjQ5MTEgZ2l0azo2Nzg2IGdpdGs6NzMyNCBnaXRrOjg4MzAKKyM6IGdpdGs6ODg0NQorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiQXV0b3IiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NzMyNgorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiQ29taXRlbnQiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiQ2VyY2EiCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgIkRpZmVyw6huY2lhIgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiVmVyc2nDsyBhbnRpZ2EiCisKKyM6IGdpdGs6MjM2MgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJWZXJzacOzIG5vdmEiCisKKyM6IGdpdGs6MjM2NAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIkzDrW5pZXMgZGUgY29udGV4dCIKKworIzogZ2l0azoyMzc0Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiSWdub3JhIGNhbnZpcyBkJ2VzcGFpIgorCisjOiBnaXRrOjIzNzggZ2l0azoyMzgwIGdpdGs6Nzk1OSBnaXRrOjgyMDYKK21zZ2lkICJMaW5lIGRpZmYiCittc2dzdHIgIkRpZmVyw6huY2lhIGRlIGzDrW5pZXMiCisKKyM6IGdpdGs6MjQ0NQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQZWRhw6ciCisKKyM6IGdpdGs6MjQ0NworbXNnaWQgIlRyZWUiCittc2dzdHIgIkFyYnJlIgorCisjOiBnaXRrOjI2MTcgZ2l0azoyNjM3Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICJEaWZlcmVuY2lhIGFxdWVzdGEgLT4gbGEgc2VsZWNjaW9uYWRhIgorCisjOiBnaXRrOjI2MTggZ2l0azoyNjM4Cittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICJEaWZlcmVuY2lhIGxhIHNlbGVjY2lvbmFkYSAtPiBhcXVlc3RhIgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjM5Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiRmVzIHBlZGHDpyIKKworIzogZ2l0azoyNjIwIGdpdGs6OTI1NAorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIkNyZWEgZXRpcXVldGEiCisKKyM6IGdpdGs6MjYyMSBnaXRrOjkzNzEKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiRXNjcml1IGxhIGNvbWlzc2nDsyBhIHVuIGZpdHhlciIKKworIzogZ2l0azoyNjIyIGdpdGs6OTQyOAorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJDcmVhIHVuYSBicmFuY2Egbm92YSIKKworIzogZ2l0azoyNjIzCittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIlJlY3VsbCBhcXVlc3RhIGNvbWlzc2nDsyBjb20gYSBjaXJlcmEiCisKKyM6IGdpdGs6MjYyNAorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlJlc3RhYmxlaXggbGEgYnJhbmNhIEhFQUQgYXF1w60iCisKKyM6IGdpdGs6MjYyNQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIk1hcmNhIGFxdWVzdGEgY29taXNzacOzIgorCisjOiBnaXRrOjI2MjYKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiVG9ybmEgYSBsYSBtYXJjYSIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIlRyb2JhIGxhIGRlc2NlbmRlbnQgZCdhcXVlc3RhIGkgbWFyY2EtbGEiCisKKyM6IGdpdGs6MjYyOAorbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJDb21wYXJhIGFtYiBsYSBjb21pc3Npw7MgbWFyY2FkYSIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJEaWZlcmVuY2lhIGFxdWVzdGEgLT4gbGEgY29taXNzacOzIG1hcmNhZGEiCisKKyM6IGdpdGs6MjYzMCBnaXRrOjI2NDEKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZXJlbmNpYSBsYSBjb21pc3Npw7Mgc2VsZWNjaW9uYWRhIC0+IGFxdWVzdGEiCisKKyM6IGdpdGs6MjYzMQorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiUmV2ZXJ0ZWl4IGFxdWVzdGEgY29taXNzacOzIgorCisjOiBnaXRrOjI2NDcKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkFnYWZhIGFxdWVzdGEgYnJhbmNhIgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIkVsaW1pbmEgYXF1ZXN0YSBicmFuY2EiCisKKyM6IGdpdGs6MjY0OQorbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCittc2dzdHIgIkNvcGlhIGVsIG5vbSBkZSBicmFuY2EiCisKKyM6IGdpdGs6MjY1NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiUmVzc2FsdGEgYXF1ZXN0IHRhbWLDqSIKKworIzogZ2l0azoyNjU3Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiUmVzc2FsdGEgbm9tw6lzIGFxdWVzdCIKKworIzogZ2l0azoyNjU4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiRGlmZXLDqG5jaWEgZXh0ZXJuYSIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiQ3VscGFiaWxpdGF0IGRlIGxhIGNvbWlzc2nDsyBtYXJlIgorCisjOiBnaXRrOjI2NjAKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgIkNvcGlhIGVsIGNhbcOtIgorCisjOiBnaXRrOjI2NjcKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIk1vc3RyYSBsJ29yaWdlbiBkJ2FxdWVzdGEgbMOtbmlhIgorCisjOiBnaXRrOjI2NjgKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgIkV4ZWN1dGEgZ2l0IGd1aSBibGFtZSBlbiBhcXVlc3RhIGzDrW5pYSIKKworIzogZ2l0azozMDE0Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTQgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIHZpc3VhbGl0emFkb3IgZGUgY29taXNzaW9ucyBwZXIgYWwgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZXUtbG8gaSByZWRpc3RyaWJ1w691LWxvIHNvdGEgZWxzIHRlcm1lcyBkZSBsYSBMbGljw6huY2lhIFDDumJsaWNhIEdlbmVyYWwgR05VIgorCisjOiBnaXRrOjMwMjIgZ2l0azozMDg5IGdpdGs6OTg1NworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJUYW5jYSIKKworIzogZ2l0azozMDQzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIkFzc29jaWFjaW9ucyBkZSB0ZWNsZXMgZGVsIEdpdGsiCisKKyM6IGdpdGs6MzA0NgorbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKK21zZ3N0ciAiQXNzb2NpYWNpb25zIGRlIHRlY2xlcyBkZWwgR2l0azoiCisKKyM6IGdpdGs6MzA0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0U3VydCIKKworIzogZ2l0azozMDQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdFRhbmNhIGxhIGZpbmVzdHJhIgorCisjOiBnaXRrOjMwNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxJbmljaT5cdFx0VsOpcyBhIGxhIHByaW1lcmEgY29taXNzacOzIgorCisjOiBnaXRrOjMwNTEKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8Rmk+XHRcdFbDqXMgYSBsJ8O6bHRpbWEgY29taXNzacOzIgorCisjOiBnaXRrOjMwNTIKK21zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxBbXVudD4sIHAsIGtcdE1vdS10ZSBjYXAgYW11bnQgcGVyIHVuYSBjb21pc3Npw7MiCisKKyM6IGdpdGs6MzA1MworbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxBdmFsbD4sIG4sIGpcdE1vdS10ZSBjYXAgYXZhbGwgcGVyIHVuYSBjb21pc3Npw7MiCisKKyM6IGdpdGs6MzA1NAorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxFc3F1ZXJyYT4sIHosIGhcdFJldHJvY2VkZWl4IGVuIGxhIGxsaXN0YSBkJ2hpc3TDsnJpYSIKKworIzogZ2l0azozMDU1Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxEcmV0YT4sIHgsIGxcdEF2YW7Dp2EgZW4gbGEgbGxpc3RhIGQnaGlzdMOycmlhIgorCisjOiBnaXRrOjMwNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiIgorIjwlcy1uPlx0VsOpcyBhIGwnZW7DqHNpbWEgbWFyZSBkZSBsYSBjb21pc3Npw7MgYWN0dWFsIGVuIGxhIGxsaXN0YSBkJ2hpc3TDsnJpYSIKKworIzogZ2l0azozMDU3Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxSZVDDoGc+XHRNb3UtdGUgY2FwIGFtdW50IHBlciB1bmEgcMOgZ2luYSBlbiBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyIKKworIzogZ2l0azozMDU4Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8QXZQw6BnPlx0TW91LXRlIGNhcCBhdmFsbCBwZXIgdW5hIHDDoGdpbmEgZW4gbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMiCisKKyM6IGdpdGs6MzA1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUluaWNpPlx0RGVzcGxhw6dhJ3QgYSBsYSBwYXJ0IHN1cGVyaW9yIGRlIGxhIGxsaXN0YSBkZSBjb21pc3Npb25zIgorCisjOiBnaXRrOjMwNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUZpPlx0RGVzcGxhw6dhJ3QgYSBsYSBwYXJ0IGluZmVyaW9yIGRlIGxhIGxsaXN0YSBkZSBjb21pc3Npb25zIgorCisjOiBnaXRrOjMwNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1BbXVudD5cdERlc3BsYcOnYSBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyBjYXAgYW11bnQgcGVyIHVuYSBsw61uaWEiCisKKyM6IGdpdGs6MzA2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1BdmFsbD5cdERlc3BsYcOnYSBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyBjYXAgYXZhbGwgcGVyIHVuYSBsw61uaWEiCisKKyM6IGdpdGs6MzA2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1SZVDDoGc+XHREZXNwbGHDp2EgbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMgY2FwIGFtdW50IHBlciB1bmEgcMOgZ2luYSIKKworIzogZ2l0azozMDY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1BdlDDoGc+XHREZXNwbGHDp2EgbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMgY2FwIGF2YWxsIHBlciB1bmEgcMOgZ2luYSIKKworIzogZ2l0azozMDY1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8TWFqLUFtdW50Plx0Q2VyY2EgY2FwIGVucmVyZSAoY2FwIGFtdW50LCBsZXMgY29taXNzaW9ucyBtw6lzIG5vdmVzKSIKKworIzogZ2l0azozMDY2Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIjxNYWotQXZhbGw+XHRDZXJjYSBjYXAgZW5kYXZhbnQgKGNhcCBhdmFsbCwgbGVzIGNvbWlzc2lvbnMgbcOpcyB2ZWxsZXMpIgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPFN1cHI+LCBiXHREZXNwbGHDp2EgbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEgY2FwIGFtdW50IHBlciB1bmEgcMOgZ2luYSIKKworIzogZ2l0azozMDY4Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxSZXRyb2PDqXM+XHREZXNwbGHDp2EgbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEgY2FwIGFtdW50IHBlciB1bmEgcMOgZ2luYSIKKworIzogZ2l0azozMDY5Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxFc3BhaT5cdFx0RGVzcGxhw6dhIGxhIHZpc3RhIGRlIGRpZmVyw6huY2lhIGNhcCBhdmFsbCBwZXIgdW5hIHDDoGdpbmEiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHREZXNwbGHDp2EgbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEgY2FwIGFtdW50IHBlciAxOCBsw61uaWVzIgorCisjOiBnaXRrOjMwNzEKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHREZXNwbGHDp2EgbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEgY2FwIGF2YWxsIHBlciAxOCBsw61uaWVzIgorCisjOiBnaXRrOjMwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdENlcmNhIgorCisjOiBnaXRrOjMwNzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8JXMtRz5cdFx0TW91LXRlIGEgbGEgcHJvcGVyYSBjb2luY2lkw6huY2lhIGRlIGxhIGNlcmNhIgorCisjOiBnaXRrOjMwNzQKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0b3JuPlx0TW91LXRlIGEgbGEgcHJvcGVyYSBjb2luY2lkw6huY2lhIGRlIGxhIGNlcmNhIgorCisjOiBnaXRrOjMwNzUKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiZ1x0XHRWw6lzIGEgbCfDumx0aW1hIGNvbWlzc2nDsyIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRQb3NhIGVsIGZvY3VzIGEgbGEgY2FpeGEgZGUgY2VyY2EiCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRNb3UgYSBsYSBjb2luY2lkw6huY2lhIHByw6h2aWEgZGUgbGEgY2VyY2EiCisKKyM6IGdpdGs6MzA3OAorbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCittc2dzdHIgImZcdFx0RGVzcGxhw6dhIGxhIHZpc3RhIGRlIGRpZmVyw6huY2lhIGFsIHByb3BlciBmaXR4ZXIiCisKKyM6IGdpdGs6MzA3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdENlcmNhIGxhIHByb3BlcmEgY29pbmNpZMOobmNpYSBlbiBsYSB2aXN0YSBkZSBkaWZlcsOobmNpYSIKKworIzogZ2l0azozMDgwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVI+XHRcdENlcmNhIGxhIGNvaW5jaWTDqG5jaWEgcHLDqHZpYSBlbiBsYSB2aXN0YSBkZSBkaWZlcsOobmNpYSIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdEF1Z21lbnRhIGxhIG1pZGEgZGUgbGxldHJhIgorCisjOiBnaXRrOjMwODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW3DqXM+XHRBdWdtZW50YSBsYSBtaWRhIGRlIGxsZXRyYSIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdERpc21pbnVlaXggbGEgbWlkYSBkZSBsbGV0cmEiCisKKyM6IGdpdGs6MzA4NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLW1lbnlzPlx0RGlzbWludWVpeCBsYSBtaWRhIGRlIGxsZXRyYSIKKworIzogZ2l0azozMDg1Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0QWN0dWFsaXR6YSIKKworIzogZ2l0azozNTUwIGdpdGs6MzU1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgorbXNnc3RyICJFcnJvciBlbiBjcmVhciBlbCBkaXJlY3RvcmkgdGVtcG9yYWwgJXM6IgorCisjOiBnaXRrOjM1NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiRXJyb3IgZW4gb2J0ZW5pciBcIiVzXCIgZGUgJXM6IgorCisjOiBnaXRrOjM2MzUKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImwnb3JkcmUgaGEgZmFsbGF0OiIKKworIzogZ2l0azozNzg0Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgIkNhcCBjb21pc3Npw7MgYWl4w60iCisKKyM6IGdpdGs6Mzc5OAorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZTogbCdvcmRyZSBoYSBmYWxsYXQ6IgorCisjOiBnaXRrOjM4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGxsZWdpciBlbCBjYXAgZGUgZnVzacOzOiAlcyIKKworIzogZ2l0azozODM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkVycm9yIGVuIGxsZWdpciBsJ8OtbmRleDogJXMiCisKKyM6IGdpdGs6Mzg2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgaW5pY2lhciBlbCBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM4NjUgZ2l0azo2NzU0Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJDZXJjYW50IgorCisjOiBnaXRrOjM4OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkVycm9yIGVuIGV4ZWN1dGFyIGVsIGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6MzkyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIiIKKyJBcXVlbGxhIGzDrW5pYSB2ZSBkZSBsYSBjb21pc3Npw7MgJXMsIGxhIHF1YWwgbm8gw6lzIGVuIGFxdWVzdGEgdmlzdWFsaXR6YWNpw7MiCisKKyM6IGdpdGs6MzkzOQorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgIkVsIHZpc3VhbGl0emFkb3IgZGUgZGlmZXLDqG5jaWEgZXh0ZXJuIGhhIGZhbGxhdDoiCisKKyM6IGdpdGs6NDA3MAorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJEZWZpbmljacOzIGRlIHZpc3RhIGRlbCBHaXRrIgorCisjOiBnaXRrOjQwNzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlJlY29yZGEgYXF1ZXN0YSB2aXN0YSIKKworIzogZ2l0azo0MDc1Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAiUmVmZXLDqG5jaWVzIChsbGlzdGEgc2VwYXJhZGEgcGVyIGVzcGFpcykiCisKKyM6IGdpdGs6NDA3NgorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIkJyYW5xdWVzIGkgZXRpcXVldGVzOiIKKworIzogZ2l0azo0MDc3Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIlRvdGVzIGxlcyByZWZlcsOobmNpZXMiCisKKyM6IGdpdGs6NDA3OAorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICJUb3RlcyBsZXMgYnJhbnF1ZXMgKGxvY2FscykiCisKKyM6IGdpdGs6NDA3OQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJUb3RlcyBsZXMgZXRpcXVldGVzIgorCisjOiBnaXRrOjQwODAKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJUb3RlcyBsZXMgYnJhbnF1ZXMgYW1iIHNlZ3VpbWVudCByZW1vdCIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiSW5mb3JtYWNpw7MgZGUgY29taXNzacOzIChleHByZXNzaW9ucyByZWd1bGFycyk6IgorCisjOiBnaXRrOjQwODIKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvcjoiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIkNvbWl0ZW50OiIKKworIzogZ2l0azo0MDg0Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJNaXNzYXRnZSBkZSBjb21pc3Npw7M6IgorCisjOiBnaXRrOjQwODUKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiQ29pbmNpZGVpeCBhbWIgdG90cyBlbHMgY3JpdGVyaXMgZCdpbmZvcm1hY2nDsyBkZSBjb21pc3Npw7MiCisKKyM6IGdpdGs6NDA4NgorbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIk5vIGNvaW5jaWRlaXggYW1iIGNhcCBjcml0ZXJpIGQnaW5mb3JtYWNpw7MgZGUgY29taXNzacOzIgorCisjOiBnaXRrOjQwODcKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAiQ2FudmlzIGFscyBmaXR4ZXJzOiIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJDYWRlbmEgZml4YSIKKworIzogZ2l0azo0MDg5Cittc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgorbXNnc3RyICJFeHByZXNzacOzIHJlZ3VsYXIiCisKKyM6IGdpdGs6NDA5MAorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJDYWRlbmEgZGUgY2VyY2E6IgorCisjOiBnaXRrOjQwOTEKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJEYXRlcyBkZSBjb21pc3Npw7MgKFwiZmEgMiBzZXRtYW5lc1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCIxNyBhYnIgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorCisjOiBnaXRrOjQwOTIKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIkRlcyBkZToiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAiRmluczoiCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJMaW1pdGEgbyBzYWx0YSB1biBub21icmUgZGUgcmV2aXNpb25zIChub21icmUgZW50ZXIgcG9zaXRpdSkiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiTm9tYnJlIGEgbW9zdHJhcjoiCisKKyM6IGdpdGs6NDA5NgorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAiTm9tYnJlIGEgc2FsdGFyOiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiT3BjaW9ucyBtaXNjZWzCt2zDoG5pZXM6IgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIk9yZGVuYSBlc3RyaWN0YW1lbnQgcGVyIGRhdGEiCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICJNYXJjYSBlbHMgY29zdGF0cyBkZSBsZXMgYnJhbnF1ZXMiCisKKyM6IGdpdGs6NDEwMAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiTGltaXRhIGEgbGEgcHJpbWVyYSBtYXJlIgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAiSGlzdMOycmlhIHNlbnppbGxhIgorCisjOiBnaXRrOjQxMDIKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiUGFyw6BtZXRyZXMgYWRkaWNpb25hbHMgYWwgZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJJbnRyb2R1w691IGVscyBmaXR4ZXJzIGkgZGlyZWN0b3JpcyBhIGluY2xvdXJlLCB1biBwZXIgbMOtbmlhOiIKKworIzogZ2l0azo0MTA0Cittc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCittc2dzdHIgIk9yZHJlIHBlciBhIGdlbmVyYXIgbcOpcyBjb21pc3Npb25zIGEgaW5jbG91cmU6IgorCisjOiBnaXRrOjQyMjgKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IHZpc3RhIGQnZWRpY2nDsyIKKworIzogZ2l0azo0MjM2Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIi0tIGNyaXRlcmlzIHBlciBhIHNlbGVjY2lvbmFyIGxlcyByZXZpc2lvbnMiCisKKyM6IGdpdGs6NDI0MQorbXNnaWQgIlZpZXcgTmFtZSIKK21zZ3N0ciAiTm9tIGRlIHZpc3RhIgorCisjOiBnaXRrOjQzMTYKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICJBcGxpY2EgKEY1KSIKKworIzogZ2l0azo0MzU0Cittc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgorbXNnc3RyICJFcnJvciBlbiBlbHMgcGFyw6BtZXRyZXMgZGUgc2VsZWNjacOzIGRlIGNvbWlzc2lvbnM6IgorCisjOiBnaXRrOjQ0MDkgZ2l0azo0NDYyIGdpdGs6NDkyNCBnaXRrOjQ5MzggZ2l0azo2MjA4IGdpdGs6MTIzNzMgZ2l0azoxMjM3NAorbXNnaWQgIk5vbmUiCittc2dzdHIgIkNhcCIKKworIzogZ2l0azo1MDIxIGdpdGs6NTAyNgorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgIkRlc2NlbmRlbnQiCisKKyM6IGdpdGs6NTAyMgorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJObyBkZXNjZW5kZW50IgorCisjOiBnaXRrOjUwMjkgZ2l0azo1MDM0Cittc2dpZCAiQW5jZXN0b3IiCittc2dzdHIgIkF2YW50cGFzc2F0IgorCisjOiBnaXRrOjUwMzAKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIk5vIGF2YW50cGFzc2F0IgorCisjOiBnaXRrOjUzMjQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIkNhbnZpcyBsb2NhbHMgcmVnaXN0cmF0cyBlbiBsJ8OtbmRleCBwZXLDsiBubyBjb21lc29zIgorCisjOiBnaXRrOjUzNjAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiQ2FudmlzIGxvY2FscyBzZW5zZSBjb21ldHJlLCBubyByZWdpc3RyYXRzIGVuIGwnw61uZGV4IgorCisjOiBnaXRrOjcxMzQKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICJpIG1vbHRlcyBtw6lzIgorCisjOiBnaXRrOjcxMzcKK21zZ2lkICJtYW55IgorbXNnc3RyICJtb2x0ZXMiCisKKyM6IGdpdGs6NzMyOAorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJFdGlxdWV0ZXM6IgorCisjOiBnaXRrOjczNDUgZ2l0azo3MzUxIGdpdGs6ODgyNQorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAiTWFyZSIKKworIzogZ2l0azo3MzU2Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkZpbGxhIgorCisjOiBnaXRrOjczNjUKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIkJyYW5jYSIKKworIzogZ2l0azo3MzY4Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAiU2VndWVpeCIKKworIzogZ2l0azo3MzcxCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIlByZWNlZGVpeCIKKworIzogZ2l0azo3OTY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkVycm9yIGVuIG9idGVuaXIgbGVzIGRpZmVyw6huY2llczogJXMiCisKKyM6IGdpdGs6ODY1MAorbXNnaWQgIkdvdG86IgorbXNnc3RyICJWw6lzIGE6IgorCisjOiBnaXRrOjg2NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiTCdpZCBTSEExIGN1cnRhICVzIMOpcyBhbWJpZ3VhIgorCisjOiBnaXRrOjg2NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkxhIHJldmlzacOzICVzIMOpcyBkZXNjb25lZ3VkYSIKKworIzogZ2l0azo4Njg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIkwnaWQgU0hBMSAlcyDDqXMgZGVzY29uZWd1ZGEiCisKKyM6IGdpdGs6ODY5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJMYSByZXZpc2nDsyAlcyBubyDDqXMgZW4gbGEgdmlzdGEgYWN0dWFsIgorCisjOiBnaXRrOjg4MzIgZ2l0azo4ODQ3Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRGF0YSIKKworIzogZ2l0azo4ODM1Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkZpbGxlcyIKKworIzogZ2l0azo4ODk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIlJlc3RhYmxlaXggbGEgYnJhbmNhICVzIGFxdcOtIgorCisjOiBnaXRrOjg5MDAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiQ2FwIHNlcGFyYXQ6IG5vIGVzIHBvdCByZXN0YWJsaXIiCisKKyM6IGdpdGs6OTAwNSBnaXRrOjkwMTEKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICJTYWx0YW50IGxhIGNvbWlzc2nDsyBkZSBmdXNpw7MgIgorCisjOiBnaXRrOjkwMjAgZ2l0azo5MDI1Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgorbXNnc3RyICJFcnJvciBlbiBvYnRlbmlyIGwnSUQgZGUgcGVkYcOnIGRlICIKKworIzogZ2l0azo5MDIxIGdpdGs6OTAyNgorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIGF0dXJhbnRcbiIKKworIzogZ2l0azo5MDMxIGdpdGs6OTAzNCBnaXRrOjkwNDIgZ2l0azo5MDU2IGdpdGs6OTA2NQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkNvbWlzc2nDsyAiCisKKyM6IGdpdGs6OTAzNQorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIMOpcyBlbCBtYXRlaXggcGVkYcOnIHF1ZVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0MworbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBkaWZlcmVpeCBkZVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0NQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJEaWZlcsOobmNpYSBlbnRyZSBjb21pc3Npb25zOlxuIgorIlxuIgorCisjOiBnaXRrOjkwNTcgZ2l0azo5MDY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiB0w6kgJXMgZmlsbGVzIC0gYXR1cmFudFxuIgorCisjOiBnaXRrOjkwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRXJyb3IgZW4gZXNjcml1cmUgbGEgY29taXNzacOzIGFsIGZpdHhlcjogJXMiCisKKyM6IGdpdGs6OTA5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgIkVycm9yIGVuIGRpZmVyZW5jaWFyIGxlcyBjb21pc3Npb25zOiAlcyIKKworIzogZ2l0azo5MTM3Cittc2dpZCAiVG9wIgorbXNnc3RyICJQYXJ0IHN1cGVyaW9yIgorCisjOiBnaXRrOjkxMzgKK21zZ2lkICJGcm9tIgorbXNnc3RyICJEZSIKKworIzogZ2l0azo5MTQzCittc2dpZCAiVG8iCittc2dzdHIgIkEiCisKKyM6IGdpdGs6OTE2NworbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJHZW5lcmEgcGVkYcOnIgorCisjOiBnaXRrOjkxNjkKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRGU6IgorCisjOiBnaXRrOjkxNzgKK21zZ2lkICJUbzoiCittc2dzdHIgIkE6IgorCisjOiBnaXRrOjkxODcKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJJbnZlcnRlaXgiCisKKyM6IGdpdGs6OTE4OSBnaXRrOjkzODUKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIkZpdHhlciBkZSBzb3J0aWRhOiIKKworIzogZ2l0azo5MTk1Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyYSIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJFcnJvciBlbiBjcmVhciBlbCBwZWRhw6c6IgorCisjOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAorbXNnaWQgIklEOiIKK21zZ3N0ciAiSUQ6IgorCisjOiBnaXRrOjkyNjUKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIk5vbSBkJ2V0aXF1ZXRhOiIKKworIzogZ2l0azo5MjY4Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIkVsIG1pc3NhdGdlIGQnZXRpcXVldGEgw6lzIG9wY2lvbmFsIgorCisjOiBnaXRrOjkyNzAKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIk1pc3NhdGdlIGQnZXRpcXVldGE6IgorCisjOiBnaXRrOjkyNzQgZ2l0azo5NDM5Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJDcmVhIgorCisjOiBnaXRrOjkyOTIKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIk5vIHMnaGEgZXNwZWNpZmljYXQgY2FwIG5vbSBkJ2V0aXF1ZXRhIgorCisjOiBnaXRrOjkyOTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJMJ2V0aXF1ZXRhIFwiJXNcIiBqYSBleGlzdGVpeCIKKworIzogZ2l0azo5MzA2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJyb3IgZW4gY3JlYXIgbCdldGlxdWV0YToiCisKKyM6IGdpdGs6OTM4MgorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJPcmRyZToiCisKKyM6IGdpdGs6OTM5MAorbXNnaWQgIldyaXRlIgorbXNnc3RyICJFc2NyaXUiCisKKyM6IGdpdGs6OTQwOAorbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKK21zZ3N0ciAiRXJyb3IgZW4gZXNjcml1cmUgbGEgY29taXNzacOzOiIKKworIzogZ2l0azo5NDM1Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbToiCisKKyM6IGdpdGs6OTQ1OAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCittc2dzdHIgIlNpIHVzIHBsYXUsIGVzcGVjaWZpcXVldSB1biBub20gcGVyIGEgbGEgYnJhbmNhIG5vdmEiCisKKyM6IGdpdGs6OTQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJMYSBicmFuY2EgJyVzJyBqYSBleGlzdGVpeC4gVm9sZXUgc29icmVlc2NyaXVyZT8iCisKKyM6IGdpdGs6OTUzMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICIiCisiTGEgY29taXNzacOzICVzIGphIGVzdMOgIGluY2xvc2EgZW4gbGEgYnJhbmNhICVzIC0tIHJlYWxtZW50IHZvbGV1IHRvcm5hciBhICIKKyJhcGxpY2FyLWxhPyIKKworIzogZ2l0azo5NTM1Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIlJlY29sbGludCBjaXJlcmVzIgorCisjOiBnaXRrOjk1NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiRWwgcmVjdWxsIGRlIGNpcmVyZXMgaGEgZmFsbGF0IGEgY2F1c2EgZGUgY2FudmlzIGxvY2FscyBhbCBmaXR4ZXIgJyVzJy5cbiIKKyJTaSB1cyBwbGF1LCBjb21ldGV1LCByZXN0YWJsaXUgbyBlbW1hZ2F0emVtZXUgZWxzIHZvc3RyZXMgY2FudmlzIGkgdG9ybmV1IGEgIgorImludGVudGFyLiIKKworIzogZ2l0azo5NTUwCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiRWwgcmVjdWxsIGRlIGNpcmVyZXMgaGEgZmFsbGF0IGEgY2F1c2EgZCd1biBjb25mbGljdGUgZGUgZnVzacOzLlxuIgorIlZvbGV1IGV4ZWN1dGFyIGVsIGdpdCBjaXRvb2wgcGVyIGEgcmVzb2xkcmUnbD8iCisKKyM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiQ2FwIGNhbnZpIGNvbcOocyIKKworIzogZ2l0azo5NTkzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCittc2dzdHIgIiIKKyJMYSBjb21pc3Npw7MgJXMgbm8gcydpbmNsb3UgZW4gbGEgYnJhbmNhICVzIC0tIHJlYWxtZW50IHZvbGV1IHJldmVydGlyLWxhPyIKKworIzogZ2l0azo5NTk4Cittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICJSZXZlcnRpbnQiCisKKyM6IGdpdGs6OTYwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiTGEgcmV2ZXJzacOzIGhhIGZhbGxhdCBhIGNhdXNhIGRlIGNhbnZpcyBsb2NhbHMgYWxzIGZpdHhlcnMgc2Vnw7xlbnRzOiVzIFNpIHVzICIKKyJwbGF1LCBjb21ldGV1LCByZXN0YWJsaXUgbyBlbW1hZ2F0emVtZXUgZWxzIHZvc3RyZXMgY2FudmlzIGkgdG9ybmV1LWhvIGEgIgorImludGVudGFyLiIKKworIzogZ2l0azo5NjEwCittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJMYSByZXZlcnNpw7MgaGEgZmFsbGF0IGEgY2F1c2EgZCd1biBjb25mbGljdGUgZGUgZnVzacOzLlxuIgorIiBWb2xldSBleGVjdXRhciBlbCBnaXQgY2l0b29sIHBlciBhIHJlc29sZHJlJ2w/IgorCisjOiBnaXRrOjk2NTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJDb25maXJtYSBlbCByZXN0YWJsaW1lbnQiCisKKyM6IGdpdGs6OTY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIlZvbGV1IHJlc3RhYmxpciBsYSBicmFuY2EgJXMgYSAlcz8iCisKKyM6IGdpdGs6OTY1NworbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICJUaXB1cyBkZSByZXN0YWJsaW1lbnQ6IgorCisjOiBnaXRrOjk2NjAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiU3VhdTogRGVpeGEgbCdhcmJyZSBkZSB0cmViYWxsIGkgbCfDrW5kZXggc2Vuc2UgdG9jYXIiCisKKyM6IGdpdGs6OTY2MworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiTWl4dDogRGVpeGEgbCdhcmJyZSBkZSB0cmViYWxsIHNlbnNlIHRvY2FyLCByZXN0YWJsZWl4IGwnw61uZGV4IgorCisjOiBnaXRrOjk2NjYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkR1cjogUmVzdGFibGVpeCBsJ2FyYnJlIGRlIHRyZWJhbGwgaSBsJ8OtbmRleFxuIgorIihkZXNjYXJ0YSBUT1RTIGVscyBjYW52aXMgbG9jYWxzKSIKKworIzogZ2l0azo5NjgzCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICJSZXN0YWJsaW50IgorCisjOiBnaXRrOjk3NDMKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkFnYWZhbnQiCisKKyM6IGdpdGs6OTc5NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIk5vIGVzIHBvdCBzdXByaW1pciBsYSBicmFuY2EgYWN0dWFsbWVudCBhZ2FmYWRhIgorCisjOiBnaXRrOjk4MDIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgorIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKK21zZ3N0ciAiIgorIkxlcyBjb21pc3Npb25zIGVuIGxhIGJyYW5jYSAlcyBubyBzw7NuIGVuIGNhcCBhbHRyYSBicmFuY2EuXG4iCisiUmVhbG1lbnQgdm9sZXUgc3VwcmltaXIgbGEgYnJhbmNhICVzPyIKKworIzogZ2l0azo5ODMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJFdGlxdWV0ZXMgaSBjYXBzOiAlcyIKKworIzogZ2l0azo5ODUwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJGaWx0cmUiCisKKyM6IGdpdGs6MTAxNDYKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJFcnJvciBlbiBsbGVnaXIgbGEgaW5mb3JtYWNpw7MgZGUgdG9wb2xvZ2lhIGRlIGNvbWlzc2nDszsgbGEgaW5mb3JtYWNpw7Mgc29icmUgIgorImJyYW5xdWVzIGkgZXRpcXVldGVzIHByZWNlZGVudHMvc2Vnw7xlbnRzIHNlcsOgIGluY29tcGxldGEuIgorCisjOiBnaXRrOjExMTIzCittc2dpZCAiVGFnIgorbXNnc3RyICJFdGlxdWV0YSIKKworIzogZ2l0azoxMTEyNworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMTIxMAorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTZWxlY3RvciBkZSB0aXB1cyBkZSBsbGV0cmEgZGVsIEdpdGsiCisKKyM6IGdpdGs6MTEyMjcKK21zZ2lkICJCIgorbXNnc3RyICJCIgorCisjOiBnaXRrOjExMjMwCittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azoxMTM0OAorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBkZSB2aXN1YWxpdHphY2nDsyBkZSBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyIKKworIzogZ2l0azoxMTM1MQorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKK21zZ3N0ciAiQW1wbGFkYSBtw6B4aW1hIGRlbCBncsOgZmljIChsw61uaWVzKSIKKworIzogZ2l0azoxMTM1NQorIywgbm8tdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIkFtcGxhZGEgbcOgeGltYSBkZWwgZ3LDoGZpYyAoJSBkZWwgcGFuZWxsKSIKKworIzogZ2l0azoxMTM1OAorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTW9zdHJhIGVscyBjYW52aXMgbG9jYWxzIgorCisjOiBnaXRrOjExMzYxCittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiU2VsZWNjaW9uYSBhdXRvbcOgdGljYW1lbnQgbCdTSEExIChsb25naXR1ZCkiCisKKyM6IGdpdGs6MTEzNjUKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICJBbWFnYSBsZXMgcmVmZXLDqG5jaWVzIHJlbW90ZXMiCisKKyM6IGdpdGs6MTEzNjkKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBkZSB2aXN1YWxpdHphY2nDsyBkZSBkaWZlcsOobmNpYSIKKworIzogZ2l0azoxMTM3MQorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJFc3BhaWF0IGRlIHRhYnVsYWNpw7MiCisKKyM6IGdpdGs6MTEzNzQKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgorbXNnc3RyICJNb3N0cmEgZXRpcXVldGVzL2NhcHMgcHJvcGVycyIKKworIzogZ2l0azoxMTM3NworbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgIk5vbWJyZSBtw6B4aW0gZCdldGlxdWV0ZXMvY2FwcyBhIG1vc3RyYXIiCisKKyM6IGdpdGs6MTEzODAKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkxpbWl0YSBsZXMgZGlmZXLDqG5jaWVzIGFscyBjYW1pbnMgbGxpc3RhdHMiCisKKyM6IGdpdGs6MTEzODMKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAiQWRtZXQgY29kaWZpY2FjaW9ucyBlc3BlY8OtZmlxdWVzIHBlciBhIGNhZGEgZml0eGVyIgorCisjOiBnaXRrOjExMzg5IGdpdGs6MTE1MzYKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIkVpbmEgZGUgZGlmZXLDqG5jaWEgZXh0ZXJuYSIKKworIzogZ2l0azoxMTM5MAorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiVHJpZXUuLi4iCisKKyM6IGdpdGs6MTEzOTUKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIk9wY2lvbnMgZ2VuZXJhbHMiCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIlVzYSBlbHMgZ2lueXMgdGVtYXRpdHphdHMiCisKKyM6IGdpdGs6MTE0MDAKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIoZWwgY2FudmkgcmVxdWVyZWl4IHJlaW5pY2lhcikiCisKKyM6IGdpdGs6MTE0MDIKK21zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKK21zZ3N0ciAiKGFjdHVhbG1lbnQgbm8gZGlzcG9uaWJsZSkiCisKKyM6IGdpdGs6MTE0MTMKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQ29sb3JzOiBwcmVzc2lvbmEgcGVyIGEgdHJpYXIiCisKKyM6IGdpdGs6MTE0MTYKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIkludGVyZsOtY2llIgorCisjOiBnaXRrOjExNDE3Cittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICJpbnRlcmbDrWNpZSIKKworIzogZ2l0azoxMTQyMAorbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIkZvbnMiCisKKyM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgImZvbnMiCisKKyM6IGdpdGs6MTE0MjQKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICJQcmltZXIgcGxhIgorCisjOiBnaXRrOjExNDI1Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAicHJpbWVyIHBsYSIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZXLDqG5jaWE6IGzDrW5pZXMgdmVsbGVzIgorCisjOiBnaXRrOjExNDI5Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgImRpZmVyZW5jaWEgbGVzIGzDrW5pZXMgdmVsbGVzIgorCisjOiBnaXRrOjExNDMzCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZlcsOobmNpYTogbMOtbmllcyBub3ZlcyIKKworIzogZ2l0azoxMTQzNAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJkaWZlcmVuY2lhIGxlcyBsw61uaWVzIG5vdmVzIgorCisjOiBnaXRrOjExNDM4Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIkRpZmVyw6huY2lhOiBjYXDDp2FsZXJhIGRlIHRyb3MiCisKKyM6IGdpdGs6MTE0NDAKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJkaWZlcmVuY2lhIGxhIGNhcMOnYWxlcmEgZGUgdHJvcyIKKworIzogZ2l0azoxMTQ0NAorbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgorbXNnc3RyICJGb25zIGRlIGxhIGzDrW5pYSBtYXJjYWRhIgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAiZm9ucyBkZSBsYSBsw61uaWEgbWFyY2FkYSIKKworIzogZ2l0azoxMTQ1MAorbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiRm9ucyBkZSBsYSBzZWxlY2Npw7MiCisKKyM6IGdpdGs6MTE0NTkKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJUaXB1cyBkZSBsbGV0cmE6IHByZXNzaW9uYSBwZXIgYSB0cmlhciIKKworIzogZ2l0azoxMTQ2MQorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAiVGlwdXMgZGUgbGxldHJhIHByaW5jaXBhbCIKKworIzogZ2l0azoxMTQ2MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJUaXB1cyBkZSBsbGV0cmEgZGUgdmlzdWFsaXR6YWNpw7MgZGUgZGlmZXLDqG5jaWEiCisKKyM6IGdpdGs6MTE0NjMKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJUaXB1cyBkZSBsbGV0cmEgZGUgbGEgaW50ZXJmw61jaWUgZCd1c3VhcmkiCisKKyM6IGdpdGs6MTE0ODUKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJQcmVmZXLDqG5jaWVzIGRlbCBHaXRrIgorCisjOiBnaXRrOjExNDk0Cittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAiR2VuZXJhbCIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAiQ29sb3JzIgorCisjOiBnaXRrOjExNDk2Cittc2dpZCAiRm9udHMiCittc2dzdHIgIlRpcHVzIGRlIGxsZXRyYSIKKworIzogZ2l0azoxMTU0NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCittc2dzdHIgIkdpdGs6IHRyaWEgZWwgY29sb3IgcGVyIGEgJXMiCisKKyM6IGdpdGs6MTIwNTkKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJQZXJkw7MsIGVsIGdpdGsgbm8gcG90IGV4ZWN1dGFyLXNlIGFtYiBhcXVlc3RhIHZlcnNpw7MgZGUgVGNsL1RrLlxuIgorIiBFbCBHaXRrIHJlcXVlcmVpeCBjb20gYSBtw61uaW0gZWwgVGNsL1RrIDguNC4iCisKKyM6IGdpdGs6MTIyNjkKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJObyBlcyBwb3QgdHJvYmFyIGNhcCBkaXDDsnNpdCBkZSBnaXQgYXF1w60uIgorCisjOiBnaXRrOjEyMzE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJQYXLDoG1ldHJlIGFtYmlndSAnJXMnOiDDqXMgdGFudCByZXZpc2nDsyBjb20gbm9tIGRlIGZpdHhlciIKKworIzogZ2l0azoxMjMyOAorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIlBhcsOgbWV0cmVzIGRvbGVudHMgYWwgZ2l0azoiCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9kZS5wbyBiL2dpdGstZ2l0L3BvL2RlLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YmE0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9kZS5wbwpAQCAtMCwwICsxLDE0MDAgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0ayB0byBHZXJtYW4uCisjIENvcHlyaWdodCAoQykgMjAwNyBQYXVsIE1hY2tlcnJhcy4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KKyMKKyMgQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPiwgMjAwNy4KKyMgRnJlZGVyaWsgU2Nod2FyemVyIDxzY2h3YXJ6ZXJmQGdtYWlsLmNvbT4sIDIwMDguCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTEwLTIwIDE0OjIwKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHZXJtYW5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJMaXN0ZSBkZXIgbmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gbmljaHQgZ2VmdW5kZW46IgorCisjOiBnaXRrOjIxMiBnaXRrOjIzODEKK21zZ2lkICJDb2xvciB3b3JkcyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MworbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVyIFZlcnNpb25lbjoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiBkZXMgLS1hcmdzY21kLUtvbW1hbmRvczoiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsdDogRXMgd3VyZGUgLS1tZXJnZSBhbmdlZ2ViZW4sIGFiZXIgZXMgZXhpc3RpZXJlbiAiCisia2VpbmUgbmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4uIgorCisjOiBnaXRrOjM5NgorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsdDogRXMgd3VyZGUgLS1tZXJnZSBhbmdlZ2ViZW4sIGFiZXIgZXMgc2luZCBrZWluZSAiCisibmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4gaW4gZGVyIERhdGVpYXVzd2FobC4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiDCu2dpdCBsb2fCqzoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTGVzZW4iCisKKyM6IGdpdGs6NDk2IGdpdGs6NDUyNQorbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKK21zZ3N0ciAiVmVyc2lvbmVuIHdlcmRlbiBnZWxlc2VuIC4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIktlaW5lIFZlcnNpb25lbiBhdXNnZXfDpGhsdCIKKworIzogZ2l0azoxNDQ1IGdpdGs6NDA0NSBnaXRrOjEyNDMyCittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJLb21tYW5kb3plaWxlIgorCisjOiBnaXRrOjE1MTEKK21zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCittc2dzdHIgIkF1c2dhYmUgdm9uIMK7Z2l0IGxvZ8KrIGthbm4gbmljaHQgZXJrYW5udCB3ZXJkZW46IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJLZWluZSBWZXJzaW9uc2luZm9ybWF0aW9uIHZlcmbDvGdiYXIiCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKK21zZ2lkICJPSyIKK21zZ3N0ciAiT2siCisKKyM6IGdpdGs6MTkzNCBnaXRrOjQzMTcgZ2l0azo5MTk2IGdpdGs6OTI3NSBnaXRrOjkzOTEgZ2l0azo5NDQwIGdpdGs6OTY3MQorIzogZ2l0azoxMTI0MiBnaXRrOjExNTIyCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBYmJyZWNoZW4iCisKKyM6IGdpdGs6MjA2OQorbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIiZBa3R1YWxpc2llcmVuIgorCisjOiBnaXRrOjIwNzAKK21zZ2lkICImUmVsb2FkIgorbXNnc3RyICImTmV1IGxhZGVuIgorCisjOiBnaXRrOjIwNzEKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIiZad2VpZ2UgbmV1IGxhZGVuIgorCisjOiBnaXRrOjIwNzIKK21zZ2lkICImTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuIGF1ZiZsaXN0ZW4iCisKKyM6IGdpdGs6MjA3NAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICLCu2dpdCAmZ3Vpwqsgc3RhcnRlbiIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIiZCZWVuZGVuIgorCisjOiBnaXRrOjIwNjgKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAiJkRhdGVpIgorCisjOiBnaXRrOjIwODAKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgIiZFaW5zdGVsbHVuZ2VuIgorCisjOiBnaXRrOjIwNzkKK21zZ2lkICImRWRpdCIKK21zZ3N0ciAiJkJlYXJiZWl0ZW4iCisKKyM6IGdpdGs6MjA4NAorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAiJk5ldWUgQW5zaWNodCAuLi4iCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgIkFuc2ljaHQgJmJlYXJiZWl0ZW4gLi4uIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgIkFuc2ljaHQgJmVudGZlcm5lbiIKKworIzogZ2l0azoyMDg4IGdpdGs6NDA0MworbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIiZBbGxlIERhdGVpZW4iCisKKyM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiJkFuc2ljaHQiCisKKyM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgIsOcYmVyICZnaXRrIgorCisjOiBnaXRrOjIwOTQgZ2l0azoyMTA4Cittc2dpZCAiJktleSBiaW5kaW5ncyIKK21zZ3N0ciAiJlRhc3RlbmvDvHJ6ZWwiCisKKyM6IGdpdGs6MjA5MiBnaXRrOjIxMDcKK21zZ2lkICImSGVscCIKK21zZ3N0ciAiJkhpbGZlIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIlplaWxlIgorCisjOiBnaXRrOjIyNjcKK21zZ2lkICJGaW5kIgorbXNnc3RyICJTdWNoZSIKKworIzogZ2l0azoyMjk1Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJWZXJzaW9uIG5hY2giCisKKyM6IGdpdGs6MjI5OSBnaXRrOjIzMDEgZ2l0azo0Njg3IGdpdGs6NDcxMCBnaXRrOjQ3MzQgZ2l0azo2NzU1IGdpdGs6NjgyNworIzogZ2l0azo2OTEyCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgIkJlc2NocmVpYnVuZzoiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAiRGF0ZWllbjoiCisKKyM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAiw4RuZGVydW5nZW46IgorCisjOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Cittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY2Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YWt0IgorCisjOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIktlaW4gR3Jvw58vS2xlaW4iCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiUmVnZXhwIgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJBbGxlIEZlbGRlciIKKworIzogZ2l0azoyMzE4IGdpdGs6NDg3MSBnaXRrOjQ5MDQgZ2l0azo2Nzg2Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIsOcYmVyc2NocmlmdCIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJCZXNjaHJlaWJ1bmciCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo0ODc2IGdpdGs6NDkxMSBnaXRrOjY3ODYgZ2l0azo3MzI0IGdpdGs6ODgzMAorIzogZ2l0azo4ODQ1Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJBdXRvciIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo3MzI2Cittc2dpZCAiQ29tbWl0dGVyIgorbXNnc3RyICJFaW50cmFnZW5kZXIiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiU3VjaGVuIgorCisjOiBnaXRrOjIzNTgKK21zZ2lkICJEaWZmIgorbXNnc3RyICJWZXJnbGVpY2giCisKKyM6IGdpdGs6MjM2MAorbXNnaWQgIk9sZCB2ZXJzaW9uIgorbXNnc3RyICJBbHRlIFZlcnNpb24iCisKKyM6IGdpdGs6MjM2MgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJOZXVlIFZlcnNpb24iCisKKyM6IGdpdGs6MjM2NAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIktvbnRleHR6ZWlsZW4iCisKKyM6IGdpdGs6MjM3NAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIkxlZXJ6ZWljaGVuw6RuZGVydW5nZW4gaWdub3JpZXJlbiIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjQ0NQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXRjaCIKKworIzogZ2l0azoyNDQ3Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiQmF1bSIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzNworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiVmVyZ2xlaWNoOiBkaWVzZSAtPiBnZXfDpGhsdGUiCisKKyM6IGdpdGs6MjYxOCBnaXRrOjI2MzgKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIlZlcmdsZWljaDogZ2V3w6RobHRlIC0+IGRpZXNlIgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjM5Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiUGF0Y2ggZXJzdGVsbGVuIgorCisjOiBnaXRrOjI2MjAgZ2l0azo5MjU0Cittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAiTWFya2llcnVuZyBlcnN0ZWxsZW4iCisKKyM6IGdpdGs6MjYyMSBnaXRrOjkzNzEKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiVmVyc2lvbiBpbiBEYXRlaSBzY2hyZWliZW4iCisKKyM6IGdpdGs6MjYyMiBnaXRrOjk0MjgKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiTmV1ZW4gWndlaWcgZXJzdGVsbGVuIgorCisjOiBnaXRrOjI2MjMKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiRGllc2UgVmVyc2lvbiBwZmzDvGNrZW4iCisKKyM6IGdpdGs6MjYyNAorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIkhFQUQtWndlaWcgYXVmIGRpZXNlIFZlcnNpb24genVyw7xja3NldHplbiIKKworIzogZ2l0azoyNjI1Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiTGVzZXplaWNoZW4gc2V0emVuIgorCisjOiBnaXRrOjI2MjYKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiWnVtIExlc2V6ZWljaGVuIgorCisjOiBnaXRrOjI2MjcKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiQWJrw7ZtbWxpbmcgdm9uIExlc2V6ZWljaGVuIHVuZCBkaWVzZXIgVmVyc2lvbiBmaW5kZW4iCisKKyM6IGdpdGs6MjYyOAorbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJNaXQgTGVzZXplaWNoZW4gdmVyZ2xlaWNoZW4iCisKKyM6IGdpdGs6MjYyOSBnaXRrOjI2NDAKKyMsIGZ1enp5Cittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgIlZlcmdsZWljaDogZGllc2UgLT4gZ2V3w6RobHRlIgorCisjOiBnaXRrOjI2MzAgZ2l0azoyNjQxCisjLCBmdXp6eQorbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgorbXNnc3RyICJWZXJnbGVpY2g6IGdld8OkaGx0ZSAtPiBkaWVzZSIKKworIzogZ2l0azoyNjMxCisjLCBmdXp6eQorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiTGVzZXplaWNoZW4gc2V0emVuIgorCisjOiBnaXRrOjI2NDcKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkF1ZiBkaWVzZW4gWndlaWcgdW1zdGVsbGVuIgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIlp3ZWlnIGzDtnNjaGVuIgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY1NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiRGllc2VuIGF1Y2ggaGVydm9yaGViZW4iCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIk51ciBkaWVzZW4gaGVydm9yaGViZW4iCisKKyM6IGdpdGs6MjY1OAorbXNnaWQgIkV4dGVybmFsIGRpZmYiCittc2dzdHIgIkV4dGVybmVzIERpZmYtUHJvZ3JhbW0iCisKKyM6IGdpdGs6MjY1OQorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIkFubm90aWVyZW4gZGVyIEVsdGVybnZlcnNpb24iCisKKyM6IGdpdGs6MjY2MAorbXNnaWQgIkNvcHkgcGF0aCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjI2NjcKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIkhlcmt1bmZ0IGRpZXNlciBaZWlsZSBhbnplaWdlbiIKKworIzogZ2l0azoyNjY4Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICJEaWVzZSBaZWlsZSBhbm5vdGllcmVuICjCu2dpdCBndWkgYmxhbWXCqykiCisKKyM6IGdpdGs6MzAxNAorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0gZWluZSBWaXN1YWxpc2llcnVuZyBkZXIgR2l0LUhpc3RvcmllXG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiQmVudXR6dW5nIHVuZCBXZWl0ZXJ2ZXJicmVpdHVuZyBnZW3DpMOfIGRlbiBCZWRpbmd1bmdlbiBkZXIgR05VIEdlbmVyYWwgUHVibGljICIKKyJMaWNlbnNlIgorCisjOiBnaXRrOjMwMjIgZ2l0azozMDg5IGdpdGs6OTg1NworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJTY2hsaWXDn2VuIgorCisjOiBnaXRrOjMwNDMKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAiR2l0ay1UYXN0YXR1cmJlbGVndW5nIgorCisjOiBnaXRrOjMwNDYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIkdpdGstVGFzdGF0dXJiZWxlZ3VuZzoiCisKKyM6IGdpdGs6MzA0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0QmVlbmRlbiIKKworIzogZ2l0azozMDQ5CisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCittc2dzdHIgIjwlcy1GPlx0XHRTdWNoZW4iCisKKyM6IGdpdGs6MzA1MAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPFBvczE+XHRcdFp1ciBuZXVlc3RlbiBWZXJzaW9uIHNwcmluZ2VuIgorCisjOiBnaXRrOjMwNTEKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kZT5cdFx0WnVyIMOkbHRlc3RlbiBWZXJzaW9uIHNwcmluZ2VuIgorCisjOiBnaXRrOjMwNTIKKyMsIGZ1enp5Cittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8SG9jaD4sIHAsIGlcdE7DpGNoc3RlIG5ldWVyZSBWZXJzaW9uIgorCisjOiBnaXRrOjMwNTMKKyMsIGZ1enp5Cittc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPFJ1bnRlcj4sIG4sIGtcdE7DpGNoc3RlIMOkbHRlcmUgVmVyc2lvbiIKKworIzogZ2l0azozMDU0CisjLCBmdXp6eQorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMaW5rcz4sIHosIGpcdEVpbmUgVmVyc2lvbiB6dXLDvGNrZ2VoZW4iCisKKyM6IGdpdGs6MzA1NQorbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8UmVjaHRzPiwgeCwgbFx0RWluZSBWZXJzaW9uIHdlaXRlcmdlaGVuIgorCisjOiBnaXRrOjMwNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjMwNTcKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPEJpbGRIb2NoPlx0RWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNTgKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxCaWxkUnVudGVyPlx0RWluZSBTZWl0ZSBuYWNoIHVudGVuIGJsw6R0dGVybiIKKworIzogZ2l0azozMDU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtUG9zMT5cdFp1bSBvYmVyZW4gRW5kZSBkZXIgVmVyc2lvbnNsaXN0ZSBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kZT5cdFp1bSB1bnRlcmVuIEVuZGUgZGVyIFZlcnNpb25zbGlzdGUgYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1Ib2NoPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFplaWxlIG5hY2ggb2JlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1SdW50ZXI+XHRWZXJzaW9uc2xpc3RlIGVpbmUgWmVpbGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCittc2dzdHIgIjwlcy1CaWxkSG9jaD5cdFZlcnNpb25zbGlzdGUgZWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLUJpbGRSdW50ZXI+XHRWZXJzaW9uc2xpc3RlIGVpbmUgU2VpdGUgbmFjaCB1bnRlbiBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA2NQorbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKK21zZ3N0ciAiPFVtc2NoYWx0LUhvY2g+XHRSw7xja3fDpHJ0cyBzdWNoZW4gKG5hY2ggb2JlbjsgbmV1ZXJlIFZlcnNpb25lbikiCisKKyM6IGdpdGs6MzA2NgorbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgorbXNnc3RyICI8VW1zY2hhbHQtUnVudGVyPiBTdWNoZW4gKG5hY2ggdW50ZW47IMOkbHRlcmUgVmVyc2lvbmVuKSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxFbnRmPiwgYlx0XHRWZXJnbGVpY2ggZWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgorCisjOiBnaXRrOjMwNjgKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEzDtnNjaHRhc3RlPlx0VmVyZ2xlaWNoIGVpbmUgU2VpdGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKKworIzogZ2l0azozMDY5Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxMZWVydGFzdGU+XHRWZXJnbGVpY2ggZWluZSBTZWl0ZSBuYWNoIHVudGVuIGJsw6R0dGVybiIKKworIzogZ2l0azozMDcwCittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdFZlcmdsZWljaCB1bSAxOCBaZWlsZW4gbmFjaCBvYmVuIGJsw6R0dGVybiIKKworIzogZ2l0azozMDcxCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0VmVyZ2xlaWNoIHVtIDE4IFplaWxlbiBuYWNoIHVudGVuIGJsw6R0dGVybiIKKworIzogZ2l0azozMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRTdWNoZW4iCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRXZWl0ZXJzdWNoZW4iCisKKyM6IGdpdGs6MzA3NAorbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxFaW5nYWJldGFzdGU+XHRXZWl0ZXJzdWNoZW4iCisKKyM6IGdpdGs6MzA3NQorIywgZnV6enkKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiPEVuZGU+XHRcdFp1ciDDpGx0ZXN0ZW4gVmVyc2lvbiBzcHJpbmdlbiIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRUYXN0YXR1cmZva3VzIGlucyBTdWNoZmVsZCIKKworIzogZ2l0azozMDc3Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdFLDvGNrd8OkcnRzIHdlaXRlcnN1Y2hlbiIKKworIzogZ2l0azozMDc4Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRWZXJnbGVpY2ggenVyIG7DpGNoc3RlbiBEYXRlaSBibMOkdHRlcm4iCisKKyM6IGdpdGs6MzA3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdFdlaXRlcnN1Y2hlbiBpbSBWZXJnbGVpY2giCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRSw7xja3fDpHJ0cyB3ZWl0ZXJzdWNoZW4gaW0gVmVyZ2xlaWNoIgorCisjOiBnaXRrOjMwODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtbWVyYmxvY2stUGx1cz5cdFNjaHJpZnQgdmVyZ3LDtsOfZXJuIgorCisjOiBnaXRrOjMwODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLVBsdXM+XHRTY2hyaWZ0IHZlcmdyw7bDn2VybiIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLU51bW1lcm5ibG9jay1NaW51cz4gU2NocmlmdCB2ZXJrbGVpbmVybiIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTWludXM+XHRTY2hyaWZ0IHZlcmtsZWluZXJuIgorCisjOiBnaXRrOjMwODUKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRBa3R1YWxpc2llcmVuIgorCisjOiBnaXRrOjM1NTAgZ2l0azozNTU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgIkZlaGxlciBiZWltIEVyemV1Z2VuIGRlcyB0ZW1wb3LDpHJlbiBWZXJ6ZWljaG5pc3NlcyDCuyVzwqs6IgorCisjOiBnaXRrOjM1NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gSG9sZW4gdm9uIMK7JXPCqyB2b24gwrslc8KrOiIKKworIzogZ2l0azozNjM1Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJLb21tYW5kbyBmZWhsZ2VzY2hsYWdlbjoiCisKKyM6IGdpdGs6Mzc4NAorbXNnaWQgIk5vIHN1Y2ggY29tbWl0IgorbXNnc3RyICJWZXJzaW9uIG5pY2h0IGdlZnVuZGVuIgorCisjOiBnaXRrOjM3OTgKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWU6IEtvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuOiIKKworIzogZ2l0azozODI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocnVuZ3MtU3BpdHplIGtvbm50ZSBuaWNodCBnZWxlc2VuIHdlcmRlbjogJXMiCisKKyM6IGdpdGs6MzgzNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgQmVyZWl0c3RlbGx1bmcgKMK7aW5kZXjCqyk6ICVzIgorCisjOiBnaXRrOjM4NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICLCu2dpdCBibGFtZcKrIGtvbm50ZSBuaWNodCBnZXN0YXJ0ZXQgd2VyZGVuOiAlcyIKKworIzogZ2l0azozODY1IGdpdGs6Njc1NAorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAiU3VjaGVuIgorCisjOiBnaXRrOjM4OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIEF1c2bDvGhyZW4gdm9uIMK7Z2l0IGJsYW1lwqs6ICVzIgorCisjOiBnaXRrOjM5MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICIiCisiRGllc2UgWmVpbGUgc3RhbW10IGF1cyBWZXJzaW9uICVzLCBkaWUgbmljaHQgaW4gZGllc2VyIEFuc2ljaHQgZ2V6ZWlndCB3aXJkIgorCisjOiBnaXRrOjM5MzkKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJFeHRlcm5lcyBEaWZmLVByb2dyYW1tIGZlaGxnZXNjaGxhZ2VuOiIKKworIzogZ2l0azo0MDcwCittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkdpdGstQW5zaWNodGVuIgorCisjOiBnaXRrOjQwNzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIkRpZXNlIEFuc2ljaHQgc3BlaWNoZXJuIgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuIChkdXJjaCBMZWVyemVpY2hlbiBnZXRyZW5udGUgTGlzdGUpOiIKKworIzogZ2l0azo0MDc2Cittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAiWndlaWdlL01hcmtpZXJ1bmdlbjoiCisKKyM6IGdpdGs6NDA3NworbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICJBbGxlIE1hcmtpZXJ1bmdlbiB1bmQgWndlaWdlIgorCisjOiBnaXRrOjQwNzgKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiQWxsZSAobG9rYWxlbikgWndlaWdlIgorCisjOiBnaXRrOjQwNzkKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAiQWxsZSBNYXJraWVydW5nZW4iCisKKyM6IGdpdGs6NDA4MAorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIkFsbGUgw5xiZXJuYWhtZXp3ZWlnZSIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiVmVyc2lvbnNpbmZvcm1hdGlvbmVuIChyZWd1bMOkcmUgQXVzZHLDvGNrZSk6IgorCisjOiBnaXRrOjQwODIKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICJBdXRvcjoiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIkVpbnRyYWdlbmRlcjoiCisKKyM6IGdpdGs6NDA4NAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAiVmVyc2lvbnNiZXNjaHJlaWJ1bmc6IgorCisjOiBnaXRrOjQwODUKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiQWxsZSBWZXJzaW9uc2luZm9ybWF0aW9uZW4tS3JpdGVyaWVuIGVyZsO8bGxlbiIKKworIzogZ2l0azo0MDg2CisjLCBmdXp6eQorbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIkFsbGUgVmVyc2lvbnNpbmZvcm1hdGlvbmVuLUtyaXRlcmllbiBlcmbDvGxsZW4iCisKKyM6IGdpdGs6NDA4NworbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICJEYXRlaWVuOiIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJaZWljaGVua2V0dGUiCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiUmVndWzDpHJlciBBdXNkcnVjayIKKworIzogZ2l0azo0MDkwCittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIlN1Y2hhdXNkcnVjazoiCisKKyM6IGdpdGs6NDA5MQorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiIgorIkRhdHVtICjCuzIgd2Vla3MgYWdvwqssIMK7MjAwOS0wMy0xNyAxNToyNzozOMKrLCDCu01hcmNoIDE3LCAyMDA5IDE1OjI3OjM4wqspIgorCisjOiBnaXRrOjQwOTIKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIlZvbjoiCisKKyM6IGdpdGs6NDA5MworbXNnaWQgIlVudGlsOiIKK21zZ3N0ciAiQmlzOiIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIlZlcnNpb25zYW56YWhsIGJlZ3JlbnplbiBvZGVyIGVpbmlnZSDDvGJlcnNwcmluZ2VuIChnYW56emFobGlnZXIgV2VydCk6IgorCisjOiBnaXRrOjQwOTUKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIkFuemVpZ2VuOiIKKworIzogZ2l0azo0MDk2Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICLDnGJlcnNwcmluZ2VuOiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiU29uc3RpZ2VzOiIKKworIzogZ2l0azo0MDk4Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJTdHJlbmcgbmFjaCBEYXR1bSBzb3J0aWVyZW4iCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICJad2VpZy1TZWl0ZW4gbWFya2llcmVuIgorCisjOiBnaXRrOjQxMDAKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgIkF1ZiBlcnN0ZSBFbHRlcm52ZXJzaW9uIGJlc2NocsOkbmtlbiIKKworIzogZ2l0azo0MTAxCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgIkVpbmZhY2hlIEhpc3RvcmllIgorCisjOiBnaXRrOjQxMDIKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAiWnVzw6R0emxpY2hlIEFyZ3VtZW50ZSBmw7xyIMK7Z2l0IGxvZ8KrOiIKKworIzogZ2l0azo0MTAzCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkZvbGdlbmRlIERhdGVpZW4gdW5kIFZlcnplaWNobmlzc2UgYW56ZWlnZW4gKGVpbmUgcHJvIFplaWxlKToiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJWZXJzaW9uc2xpc3RlIGR1cmNoIGZvbGdlbmRlcyBLb21tYW5kbyBlcnpldWdlbiBsYXNzZW46IgorCisjOiBnaXRrOjQyMjgKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IEFuc2ljaHQgYmVhcmJlaXRlbiIKKworIzogZ2l0azo0MjM2Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIi0tIEF1c3dhaGwgZGVyIGFuZ2V6ZWlndGVuIFZlcnNpb25lbiIKKworIzogZ2l0azo0MjQxCittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJBbnNpY2h0c25hbWUiCisKKyM6IGdpdGs6NDMxNgorbXNnaWQgIkFwcGx5IChGNSkiCittc2dzdHIgIkFud2VuZGVuIChGNSkiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRmVobGVyIGluIGRlbiBhdXNnZXfDpGhsdGVuIFZlcnNpb25lbjoiCisKKyM6IGdpdGs6NDQwOSBnaXRrOjQ0NjIgZ2l0azo0OTI0IGdpdGs6NDkzOCBnaXRrOjYyMDggZ2l0azoxMjM3MyBnaXRrOjEyMzc0Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiS2VpbmUiCisKKyM6IGdpdGs6NTAyMSBnaXRrOjUwMjYKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJBYmvDtm1tbGluZyIKKworIzogZ2l0azo1MDIyCittc2dpZCAiTm90IGRlc2NlbmRhbnQiCittc2dzdHIgIktlaW4gQWJrw7ZtbWxpbmciCisKKyM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiVm9yZ8OkbmdlciIKKworIzogZ2l0azo1MDMwCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJLZWluIFZvcmfDpG5nZXIiCisKKyM6IGdpdGs6NTMyNAorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiTG9rYWxlIMOEbmRlcnVuZ2VuIGJlcmVpdGdlc3RlbGx0LCBhYmVyIG5pY2h0IGVpbmdldHJhZ2VuIgorCisjOiBnaXRrOjUzNjAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTG9rYWxlIMOEbmRlcnVuZ2VuLCBuaWNodCBiZXJlaXRnZXN0ZWxsdCIKKworIzogZ2l0azo3MTM0Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjcxMzcKK21zZ2lkICJtYW55IgorbXNnc3RyICJ2aWVsZSIKKworIzogZ2l0azo3MzI4Cittc2dpZCAiVGFnczoiCittc2dzdHIgIk1hcmtpZXJ1bmdlbjoiCisKKyM6IGdpdGs6NzM0NSBnaXRrOjczNTEgZ2l0azo4ODI1Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICJFbHRlcm4iCisKKyM6IGdpdGs6NzM1NgorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJLaW5kIgorCisjOiBnaXRrOjczNjUKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlp3ZWlnIgorCisjOiBnaXRrOjczNjgKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJGb2xndCBhdWYiCisKKyM6IGdpdGs6NzM3MQorbXNnaWQgIlByZWNlZGVzIgorbXNnc3RyICJWb3Jnw6RuZ2VyIHZvbiIKKworIzogZ2l0azo3OTY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIExhZGVuIGRlcyBWZXJnbGVpY2hzOiAlcyIKKworIzogZ2l0azo4NjUwCittc2dpZCAiR290bzoiCittc2dzdHIgIkdlaGUgenU6IgorCisjOiBnaXRrOjg2NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiS3VyemVyIFNIQTEtSGFzaHdlcnQgwrslc8KrIGlzdCBtZWhyZGV1dGlnIgorCisjOiBnaXRrOjg2NzgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIlZlcnNpb24gwrslc8KrIGlzdCB1bmJla2FubnQiCisKKyM6IGdpdGs6ODY4OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNIQTEgaWQgJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJTSEExLUhhc2h3ZXJ0IMK7JXPCqyBpc3QgdW5iZWthbm50IgorCisjOiBnaXRrOjg2OTAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3QgaW4gdGhlIGN1cnJlbnQgdmlldyIKK21zZ3N0ciAiVmVyc2lvbiDCuyVzwqsgd2lyZCBpbiBkZXIgYWt0dWVsbGVuIEFuc2ljaHQgbmljaHQgYW5nZXplaWd0IgorCisjOiBnaXRrOjg4MzIgZ2l0azo4ODQ3Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRGF0dW0iCisKKyM6IGdpdGs6ODgzNQorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJLaW5kZXIiCisKKyM6IGdpdGs6ODg5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJad2VpZyDCuyVzwqsgaGllcmhlciB6dXLDvGNrc2V0emVuIgorCisjOiBnaXRrOjg5MDAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiWndlaWdzcGl0emUgaXN0IGFiZ2V0cmVubnQ6IFp1csO8Y2tzZXR6ZW4gbmljaHQgbcO2Z2xpY2giCisKKyM6IGdpdGs6OTAwNSBnaXRrOjkwMTEKK21zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgorbXNnc3RyICLDnGJlcnNwcmluZ2UgWnVzYW1tZW5mw7xocnVuZ3MtVmVyc2lvbiAiCisKKyM6IGdpdGs6OTAyMCBnaXRrOjkwMjUKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIkZlaGxlciBiZWltIEhvbGVuIGRlciBQYXRjaC1JRCBmw7xyICIKKworIzogZ2l0azo5MDIxIGdpdGs6OTAyNgorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiAtIEFiYnJ1Y2guXG4iCisKKyM6IGdpdGs6OTAzMSBnaXRrOjkwMzQgZ2l0azo5MDQyIGdpdGs6OTA1NiBnaXRrOjkwNjUKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJWZXJzaW9uICIKKworIzogZ2l0azo5MDM1Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgaXN0IGRhcyBnbGVpY2hlIFBhdGNoIHdpZVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0MworbXNnaWQgIiIKKyIgZGlmZmVycyBmcm9tXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBpc3QgdW50ZXJzY2hpZWRsaWNoIHZvblxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0NQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJWZXJnbGVpY2ggZGVyIFZlcnNpb25lbjpcbiIKKyJcbiIKKworIzogZ2l0azo5MDU3IGdpdGs6OTA2NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgaGF0ICVzIEtpbmRlci4gQWJicnVjaFxuIgorCisjOiBnaXRrOjkwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlciBWZXJzaW9uIGluIERhdGVpOiAlcyIKKworIzogZ2l0azo5MDkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gVmVyZ2xlaWNoZW4gZGVyIFZlcnNpb25lbjogJXMiCisKKyM6IGdpdGs6OTEzNworbXNnaWQgIlRvcCIKK21zZ3N0ciAiT2JlbiIKKworIzogZ2l0azo5MTM4Cittc2dpZCAiRnJvbSIKK21zZ3N0ciAiVm9uIgorCisjOiBnaXRrOjkxNDMKK21zZ2lkICJUbyIKK21zZ3N0ciAiYmlzIgorCisjOiBnaXRrOjkxNjcKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiUGF0Y2ggZXJzdGVsbGVuIgorCisjOiBnaXRrOjkxNjkKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiVm9uOiIKKworIzogZ2l0azo5MTc4Cittc2dpZCAiVG86IgorbXNnc3RyICJiaXM6IgorCisjOiBnaXRrOjkxODcKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJVbWdla2VocnQiCisKKyM6IGdpdGs6OTE4OSBnaXRrOjkzODUKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIkF1c2dhYmVkYXRlaToiCisKKyM6IGdpdGs6OTE5NQorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJFcnpldWdlbiIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXMgUGF0Y2hlczoiCisKKyM6IGdpdGs6OTI1NiBnaXRrOjkzNzMgZ2l0azo5NDMwCittc2dpZCAiSUQ6IgorbXNnc3RyICJJRDoiCisKKyM6IGdpdGs6OTI2NQorbXNnaWQgIlRhZyBuYW1lOiIKK21zZ3N0ciAiTWFya2llcnVuZ3NuYW1lOiIKKworIzogZ2l0azo5MjY4Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIkVpbmUgTWFya2llcnVuZ3NiZXNjaHJlaWJ1bmcgaXN0IG9wdGlvbmFsIgorCisjOiBnaXRrOjkyNzAKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIk1hcmtpZXJ1bmdzYmVzY2hyZWlidW5nOiIKKworIzogZ2l0azo5Mjc0IGdpdGs6OTQzOQorbXNnaWQgIkNyZWF0ZSIKK21zZ3N0ciAiRXJzdGVsbGVuIgorCisjOiBnaXRrOjkyOTIKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIktlaW4gTWFya2llcnVuZ3NuYW1lIGFuZ2VnZWJlbiIKKworIzogZ2l0azo5Mjk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiTWFya2llcnVuZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgorCisjOiBnaXRrOjkzMDYKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICJGZWhsZXIgYmVpbSBFcnN0ZWxsZW4gZGVyIE1hcmtpZXJ1bmc6IgorCisjOiBnaXRrOjkzODIKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiS29tbWFuZG86IgorCisjOiBnaXRrOjkzOTAKK21zZ2lkICJXcml0ZSIKK21zZ3N0ciAiU2NocmVpYmVuIgorCisjOiBnaXRrOjk0MDgKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIgVmVyc2lvbjoiCisKKyM6IGdpdGs6OTQzNQorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOYW1lOiIKKworIzogZ2l0azo5NDU4Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiQml0dGUgZ2ViZW4gU2llIGVpbmVuIE5hbWVuIGbDvHIgZGVuIG5ldWVuIFp3ZWlnIGFuLiIKKworIzogZ2l0azo5NDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgIlp3ZWlnIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4gU29sbCBlciDDvGJlcnNjaHJpZWJlbiB3ZXJkZW4/IgorCisjOiBnaXRrOjk1MzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorIlZlcnNpb24gwrslc8KrIGlzdCBiZXJlaXRzIGltIFp3ZWlnIMK7JXPCqyBlbnRoYWx0ZW4gLS0gdHJvdHpkZW0gZXJuZXV0ICIKKyJlaW50cmFnZW4/IgorCisjOiBnaXRrOjk1MzUKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAiVmVyc2lvbiBwZmzDvGNrZW4iCisKKyM6IGdpdGs6OTU0NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJQZmzDvGNrZW4gZmVobGdlc2NobGFnZW4sIGRhIG5vY2ggbG9rYWxlIMOEbmRlcnVuZ2VuIGluIERhdGVpIMK7JXPCq1xuIgorInZvcmxpZWdlbi4gQml0dGUgZGllc2Ugw4RuZGVydW5nZW4gZWludHJhZ2VuLCB6dXLDvGNrc2V0emVuIG9kZXJcbiIKKyJ6d2lzY2hlbnNwZWljaGVybiAowrtnaXQgc3Rhc2jCqykgdW5kIGRhbm4gZXJuZXV0IHZlcnN1Y2hlbi4iCisKKyM6IGdpdGs6OTU1MAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIlBmbMO8Y2tlbiBmZWhsZ2VzY2hsYWdlbiwgZGEgZWluIFp1c2FtbWVuZsO8aHJ1bmdzLUtvbmZsaWt0IGF1ZmdldHJldGVuXG4iCisiaXN0LiBTb2xsIGRhcyBadXNhbW1lbmbDvGhydW5ncy1XZXJremV1ZyAowrtnaXQgY2l0b29swqspIGF1ZmdlcnVmZW5cbiIKKyJ3ZXJkZW4sIHVtIGRpZXNlbiBLb25mbGlrdCBhdWZ6dWzDtnNlbj8iCisKKyM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4gZWluZ2V0cmFnZW4iCisKKyM6IGdpdGs6OTU5MworIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAiIgorIlZlcnNpb24gwrslc8KrIGlzdCBiZXJlaXRzIGltIFp3ZWlnIMK7JXPCqyBlbnRoYWx0ZW4gLS0gdHJvdHpkZW0gZXJuZXV0ICIKKyJlaW50cmFnZW4/IgorCisjOiBnaXRrOjk1OTgKKyMsIGZ1enp5Cittc2dpZCAiUmV2ZXJ0aW5nIgorbXNnc3RyICJadXLDvGNrc2V0emVuIgorCisjOiBnaXRrOjk2MDYKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJQZmzDvGNrZW4gZmVobGdlc2NobGFnZW4sIGRhIG5vY2ggbG9rYWxlIMOEbmRlcnVuZ2VuIGluIERhdGVpIMK7JXPCq1xuIgorInZvcmxpZWdlbi4gQml0dGUgZGllc2Ugw4RuZGVydW5nZW4gZWludHJhZ2VuLCB6dXLDvGNrc2V0emVuIG9kZXJcbiIKKyJ6d2lzY2hlbnNwZWljaGVybiAowrtnaXQgc3Rhc2jCqykgdW5kIGRhbm4gZXJuZXV0IHZlcnN1Y2hlbi4iCisKKyM6IGdpdGs6OTYxMAorIywgZnV6enkKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIlBmbMO8Y2tlbiBmZWhsZ2VzY2hsYWdlbiwgZGEgZWluIFp1c2FtbWVuZsO8aHJ1bmdzLUtvbmZsaWt0IGF1ZmdldHJldGVuXG4iCisiaXN0LiBTb2xsIGRhcyBadXNhbW1lbmbDvGhydW5ncy1XZXJremV1ZyAowrtnaXQgY2l0b29swqspIGF1ZmdlcnVmZW5cbiIKKyJ3ZXJkZW4sIHVtIGRpZXNlbiBLb25mbGlrdCBhdWZ6dWzDtnNlbj8iCisKKyM6IGdpdGs6OTY1MworbXNnaWQgIkNvbmZpcm0gcmVzZXQiCittc2dzdHIgIlp1csO8Y2tzZXR6ZW4gYmVzdMOkdGlnZW4iCisKKyM6IGdpdGs6OTY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIlp3ZWlnIMK7JXPCqyBhdWYgwrslc8KrIHp1csO8Y2tzZXR6ZW4/IgorCisjOiBnaXRrOjk2NTcKK21zZ2lkICJSZXNldCB0eXBlOiIKK21zZ3N0ciAiQXJ0IGRlcyBadXLDvGNrc2V0emVuczoiCisKKyM6IGdpdGs6OTY2MAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJIYXJtbG9zOiBBcmJlaXRza29waWUgdW5kIEJlcmVpdHN0ZWxsdW5nIHVudmVyw6RuZGVydCIKKworIzogZ2l0azo5NjYzCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICIiCisiR2VtaXNjaHQ6IEFyYmVpdHNrb3BpZSB1bnZlcsOkbmRlcnQsXG4iCisiQmVyZWl0c3RlbGx1bmcgenVyw7xja2dlc2V0enQiCisKKyM6IGdpdGs6OTY2NgorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiSGFydDogQXJiZWl0c2tvcGllIHVuZCBCZXJlaXRzdGVsbHVuZ1xuIgorIihBbGxlIGxva2FsZW4gw4RuZGVydW5nZW4gd2VyZGVuIGdlbMO2c2NodCkiCisKKyM6IGdpdGs6OTY4MworbXNnaWQgIlJlc2V0dGluZyIKK21zZ3N0ciAiWnVyw7xja3NldHplbiIKKworIzogZ2l0azo5NzQzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJVbXN0ZWxsZW4iCisKKyM6IGdpdGs6OTc5NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIiIKKyJEZXIgWndlaWcsIGF1ZiBkZW4gZGllIEFyYmVpdHNrb3BpZSBtb21lbnRhbiB1bWdlc3RlbGx0IGlzdCwga2FubiBuaWNodCAiCisiZ2Vsw7ZzY2h0IHdlcmRlbi4iCisKKyM6IGdpdGs6OTgwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiRGllIFZlcnNpb25lbiBhdWYgWndlaWcgwrslc8KrIGV4aXN0aWVyZW4gYXVmIGtlaW5lbSBhbmRlcmVuIFp3ZWlnLlxuIgorIlp3ZWlnIMK7JXPCqyB0cm90emRlbSBsw7ZzY2hlbj8iCisKKyM6IGdpdGs6OTgzMworIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKK21zZ3N0ciAiTWFya2llcnVuZ2VuIHVuZCBad2VpZ2U6ICVzIgorCisjOiBnaXRrOjk4NTAKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRlcm4iCisKKyM6IGdpdGs6MTAxNDYKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgU3RydWt0dXJpbmZvcm1hdGlvbmVuOyBad2VpZ2UgdW5kIEluZm9ybWF0aW9uZW4genUgIgorIlZvcmfDpG5nZXIvTmFjaGZvbGdlciB3ZXJkZW4gdW52b2xsc3TDpG5kaWcgc2Vpbi4iCisKKyM6IGdpdGs6MTExMjMKK21zZ2lkICJUYWciCittc2dzdHIgIk1hcmtpZXJ1bmciCisKKyM6IGdpdGs6MTExMjcKK21zZ2lkICJJZCIKK21zZ3N0ciAiSWQiCisKKyM6IGdpdGs6MTEyMTAKK21zZ2lkICJHaXRrIGZvbnQgY2hvb3NlciIKK21zZ3N0ciAiR2l0ay1TY2hyaWZ0ZW4gd8OkaGxlbiIKKworIzogZ2l0azoxMTIyNworbXNnaWQgIkIiCittc2dzdHIgIkYiCisKKyM6IGdpdGs6MTEyMzAKK21zZ2lkICJJIgorbXNnc3RyICJLIgorCisjOiBnaXRrOjExMzQ4Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJBbnplaWdlIGRlciBWZXJzaW9uc2xpc3RlIgorCisjOiBnaXRrOjExMzUxCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJNYXhpbWFsZSBHcmFwaGVuYnJlaXRlIChaZWlsZW4pIgorCisjOiBnaXRrOjExMzU1CisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAiTWF4aW1hbGUgR3JhcGhlbmJyZWl0ZSAoJSBkZXMgRmVuc3RlcnMpIgorCisjOiBnaXRrOjExMzU4Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4gYW56ZWlnZW4iCisKKyM6IGdpdGs6MTEzNjEKKyMsIGZ1enp5Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiU0hBMS1IYXNod2VydCBhdXRvbWF0aXNjaCBhdXN3w6RobGVuIgorCisjOiBnaXRrOjExMzY1Cittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiRW50ZmVybnRlIFp3ZWlnZS9NYXJraWVydW5nZW4gYXVzYmxlbmRlbiIKKworIzogZ2l0azoxMTM2OQorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJBbnplaWdlIGRlcyBWZXJnbGVpY2hzIgorCisjOiBnaXRrOjExMzcxCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIlRhYnVsYXRvcmJyZWl0ZSIKKworIzogZ2l0azoxMTM3NAorIywgZnV6enkKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgorbXNnc3RyICJOYWhlbGllZ2VuZGUgTWFya2llcnVuZ2VuIGFuemVpZ2VuIgorCisjOiBnaXRrOjExMzc3Cittc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJWZXJnbGVpY2ggbnVyIGbDvHIgYW5nZXplaWd0ZSBQZmFkZSIKKworIzogZ2l0azoxMTM4MworbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICJaZWljaGVua29kaWVydW5nIHBybyBEYXRlaSBlcm1pdHRlbG4iCisKKyM6IGdpdGs6MTEzODkgZ2l0azoxMTUzNgorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAiRXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSIKKworIzogZ2l0azoxMTM5MAorbXNnaWQgIkNob29zZS4uLiIKK21zZ3N0ciAiV8OkaGxlbiAuLi4iCisKKyM6IGdpdGs6MTEzOTUKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIkFsbGdlbWVpbmUgT3B0aW9uZW4iCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIkF1c3NlaGVuIGRlciBCZW51dHplcm9iZXJmbMOkY2hlIGR1cmNoIFRoZW1hIGJlc3RpbW1lbiIKKworIzogZ2l0azoxMTQwMAorbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCittc2dzdHIgIijDhG5kZXJ1bmdlbiB3ZXJkZW4gZXJzdCBuYWNoIE5ldXN0YXJ0IHdpcmtzYW0pIgorCisjOiBnaXRrOjExNDAyCittc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCittc2dzdHIgIihNb21lbnRhbiBuaWNodCB2ZXJmw7xnYmFyKSIKKworIzogZ2l0azoxMTQxMworbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJGYXJiZW46IEtsaWNrZW4genVtIFfDpGhsZW4iCisKKyM6IGdpdGs6MTE0MTYKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIkJlbnV0emVyb2JlcmZsw6RjaGUiCisKKyM6IGdpdGs6MTE0MTcKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgIkJlbnV0emVyb2JlcmZsw6RjaGUiCisKKyM6IGdpdGs6MTE0MjAKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICJIaW50ZXJncnVuZCIKKworIzogZ2l0azoxMTQyMSBnaXRrOjExNDUxCittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAiSGludGVyZ3J1bmQiCisKKyM6IGdpdGs6MTE0MjQKK21zZ2lkICJGb3JlZ3JvdW5kIgorbXNnc3RyICJWb3JkZXJncnVuZCIKKworIzogZ2l0azoxMTQyNQorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgIlZvcmRlcmdydW5kIgorCisjOiBnaXRrOjExNDI4Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJWZXJnbGVpY2g6IEFsdGUgWmVpbGVuIgorCisjOiBnaXRrOjExNDI5Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgIlZlcmdsZWljaCAtIEFsdGUgWmVpbGVuIgorCisjOiBnaXRrOjExNDMzCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJWZXJnbGVpY2g6IE5ldWUgWmVpbGVuIgorCisjOiBnaXRrOjExNDM0Cittc2dpZCAiZGlmZiBuZXcgbGluZXMiCittc2dzdHIgIlZlcmdsZWljaCAtIE5ldWUgWmVpbGVuIgorCisjOiBnaXRrOjExNDM4Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIlZlcmdsZWljaDogw4RuZGVydW5nc3RpdGVsIgorCisjOiBnaXRrOjExNDQwCittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAiVmVyZ2xlaWNoIC0gw4RuZGVydW5nc3RpdGVsIgorCisjOiBnaXRrOjExNDQ0Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIkhpbnRlcmdydW5kIGbDvHIgbWFya2llcnRlIFplaWxlIgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAiSGludGVyZ3J1bmQgZsO8ciBtYXJraWVydGUgWmVpbGUiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIkhpbnRlcmdydW5kZmFyYmUgYXVzd8OkaGxlbiIKKworIzogZ2l0azoxMTQ1OQorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIlNjaHJpZnRhcnQ6IEtsaWNrZW4genVtIFfDpGhsZW4iCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIlByb2dyYW1tc2NocmlmdGFydCIKKworIzogZ2l0azoxMTQ2MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJTY2hyaWZ0YXJ0IGbDvHIgVmVyZ2xlaWNoIgorCisjOiBnaXRrOjExNDYzCittc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKK21zZ3N0ciAiQmVzY2hyaWZ0dW5nZW4iCisKKyM6IGdpdGs6MTE0ODUKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJHaXRrLUVpbnN0ZWxsdW5nZW4iCisKKyM6IGdpdGs6MTE0OTQKKyMsIGZ1enp5Cittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAiRXJ6ZXVnZW4iCisKKyM6IGdpdGs6MTE0OTUKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTQ5NgorbXNnaWQgIkZvbnRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE1NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiBGYXJiZSB3w6RobGVuIGbDvHIgJXMiCisKKyM6IGdpdGs6MTIwNTkKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKworIzogZ2l0azoxMjI2OQorbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCittc2dzdHIgIktlaW4gR2l0LVByb2pla3RhcmNoaXYgZ2VmdW5kZW4uIgorCisjOiBnaXRrOjEyMzE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICJNZWhyZGV1dGlnZSBBbmdhYmUgwrslc8KrOiBTb3dvaGwgVmVyc2lvbiBhbHMgYXVjaCBEYXRlaW5hbWUgZXhpc3RpZXJ0LiIKKworIzogZ2l0azoxMjMyOAorbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCittc2dzdHIgIkZhbHNjaGUgS29tbWFuZG96ZWlsZW4tUGFyYW1ldGVyIGbDvHIgZ2l0azoiCisKKyN+IG1zZ2lkICJtYyIKKyN+IG1zZ3N0ciAibWMiCisKKyN+IG1zZ2lkICJuZXh0IgorI34gbXNnc3RyICJuw6RjaHN0ZSIKKworI34gbXNnaWQgInByZXYiCisjfiBtc2dzdHIgInZvcmlnZSIKKworI34gbXNnaWQgIkNEYXRlIgorI34gbXNnc3RyICJFaW50cmFnZWRhdHVtIgorCisjfiBtc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKKyN+IG1zZ3N0ciAiR2l0LVZlcnplaWNobmlzIMK7JXPCqyB3dXJkZSBuaWNodCBnZWZ1bmRlbi4iCmRpZmYgLS1naXQgYS9wby9lcy5wbyBiL2dpdGstZ2l0L3BvL2VzLnBvCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwby9lcy5wbwpyZW5hbWUgdG8gZ2l0ay1naXQvcG8vZXMucG8KZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL2ZyLnBvIGIvZ2l0ay1naXQvcG8vZnIucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmNzJmYgotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL2ZyLnBvCkBAIC0wLDAgKzEsMTQxOSBAQAorIyBGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIGdpdGsgcGFja2FnZQorIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjIFRyYW5zbGF0b3JzOgorIyBFbW1hbnVlbCBUcmlsbGF1ZCA8ZXRyaWxsYXVkQGdtYWlsLmNvbT4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGtcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMTQ6MzIrMTAwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDktMTEtMTkgMjI6MTMrMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogRW1tYW51ZWwgVHJpbGxhdWQgPGV0cmlsbGF1ZEBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogZ2l0QHZnZXIua2VybmVsLm9yZ1xuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJYLVBvZWRpdC1MYW5ndWFnZTogRnJlbmNoXG4iCisiWC1Qb2VkaXQtQ291bnRyeTogRlJBTkNFXG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHLDqWN1cMOpcmVyIGxhIGxpc3RlIGRlcyBmaWNoaWVycyBub24gZnVzaW9ubsOpcyA6IgorCisjOiBnaXRrOjIxMiBnaXRrOjIzODEKK21zZ2lkICJDb2xvciB3b3JkcyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MworbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjMyNAorbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZHUgcGFyY291cnMgZGVzIHLDqXZpc2lvbnMgOiIKKworIzogZ2l0azozODAKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgorbXNnc3RyICJFcnJldXIgw6AgbCdleMOpY3V0aW9uIGRlIGxhIGNvbW1hbmRlIC0tYXJnc2NtZCA6IgorCisjOiBnaXRrOjM5MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorIkF1Y3VuIGZpY2hpZXIgc8OpbGVjdGlvbm7DqSA6IC0tbWVyZ2UgcHLDqWNpc8OpLCBtYWlzIHRvdXMgbGVzIGZpY2hpZXJzIHNvbnQgIgorImZ1c2lvbm7DqXMuIgorCisjIEZJWE1FIDogYW3DqWxpb3JlciBsYSB0cmFkdWN0aW9uIGRlICdmaWxlIGxpbWl0ZScKKyM6IGdpdGs6Mzk2CisjLCBmdXp6eQorbXNnaWQgIiIKKyJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCisibGltaXQuIgorbXNnc3RyICIiCisiQXVjdW4gZmljaGllciBzw6lsZWN0aW9ubsOpIDogLS1tZXJnZSBwcsOpY2lzw6kgbWFpcyBhdWN1biBmaWNoaWVyIG5vbiBmdXNpb25uw6kgIgorIm4nZXN0IGRhbnMgbGEgbGltaXRlIGRlcyBmaWNoaWVycy4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJFcnJldXIgw6AgbCdleMOpY3V0aW9uIGRlIGdpdCBsb2cgOiIKKworIzogZ2l0azo0MzYgZ2l0azo1ODIKK21zZ2lkICJSZWFkaW5nIgorbXNnc3RyICJMZWN0dXJlIGVuIGNvdXJzIgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkxlY3R1cmUgZGVzIGNvbW1pdHMuLi4iCisKKyM6IGdpdGs6NDk5IGdpdGs6MTYzNyBnaXRrOjQ1MjgKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICJBdWN1biBjb21taXQgc8OpbGVjdGlvbm7DqSIKKworIzogZ2l0azoxNDQ1IGdpdGs6NDA0NSBnaXRrOjEyNDMyCittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJMaWduZSBkZSBjb21tYW5kZSIKKworIzogZ2l0azoxNTExCittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgbGEgc29ydGllIGRlIGdpdCBsb2cgOiIKKworIzogZ2l0azoxNzQwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiQXVjdW5lIGluZm9ybWF0aW9uIGRpc3BvbmlibGUgc3VyIGxlIGNvbW1pdCIKKworIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQorbXNnaWQgIk9LIgorbXNnc3RyICJPSyIKKworIzogZ2l0azoxOTM0IGdpdGs6NDMxNyBnaXRrOjkxOTYgZ2l0azo5Mjc1IGdpdGs6OTM5MSBnaXRrOjk0NDAgZ2l0azo5NjcxCisjOiBnaXRrOjExMjQyIGdpdGs6MTE1MjIKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIkFubnVsZXIiCisKKyM6IGdpdGs6MjA2OQorbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIk1pc2Ugw6Agam91ciIKKworIzogZ2l0azoyMDcwCittc2dpZCAiJlJlbG9hZCIKK21zZ3N0ciAiUmVjaGFyZ2VyIgorCisjOiBnaXRrOjIwNzEKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIlJlbGlyZSBsZXMgcsOpZsOpcmVuY2VzIgorCisjOiBnaXRrOjIwNzIKK21zZ2lkICImTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJMaXN0ZXIgbGVzIHLDqWbDqXJlbmNlcyIKKworIzogZ2l0azoyMDc0Cittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgIkTDqW1hcnJlciBnaXQgZ3VpIgorCisjOiBnaXRrOjIwNzYKK21zZ2lkICImUXVpdCIKK21zZ3N0ciAiUXVpdHRlciIKKworIzogZ2l0azoyMDY4Cittc2dpZCAiJkZpbGUiCittc2dzdHIgIkZpY2hpZXIiCisKKyM6IGdpdGs6MjA4MAorbXNnaWQgIiZQcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHLDqWbDqXJlbmNlcyIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgIsOJZGl0ZXIiCisKKyM6IGdpdGs6MjA4NAorbXNnaWQgIiZOZXcgdmlldy4uLiIKK21zZ3N0ciAiTm91dmVsbGUgdnVlLi4uIgorCisjOiBnaXRrOjIwODUKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICLDiWRpdGVyIGxhIHZ1ZS4uLiIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICJTdXBwcmltZXIgbGEgdnVlIgorCisjOiBnaXRrOjIwODggZ2l0azo0MDQzCittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAiVG91cyBsZXMgZmljaGllcnMiCisKKyM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiVnVlIgorCisjOiBnaXRrOjIwOTMgZ2l0azoyMTAzIGdpdGs6MzAxMgorbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICLDgCBwcm9wb3MgZGUgZ2l0ayIKKworIzogZ2l0azoyMDk0IGdpdGs6MjEwOAorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciIKKworIzogZ2l0azoyMDkyIGdpdGs6MjEwNworbXNnaWQgIiZIZWxwIgorbXNnc3RyICJBaWRlIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIklkIFNIQTEgOiIKKworIzogZ2l0azoyMjI5Cittc2dpZCAiUm93IgorbXNnc3RyICJDb2xvbm5lIgorCisjOiBnaXRrOjIyNjcKK21zZ2lkICJGaW5kIgorbXNnc3RyICJSZWNoZXJjaGUiCisKKyM6IGdpdGs6MjI5NQorbXNnaWQgImNvbW1pdCIKK21zZ3N0ciAiY29tbWl0IgorCisjOiBnaXRrOjIyOTkgZ2l0azoyMzAxIGdpdGs6NDY4NyBnaXRrOjQ3MTAgZ2l0azo0NzM0IGdpdGs6Njc1NSBnaXRrOjY4MjcKKyM6IGdpdGs6NjkxMgorbXNnaWQgImNvbnRhaW5pbmc6IgorbXNnc3RyICJjb250aWVudCA6IgorCisjOiBnaXRrOjIzMDIgZ2l0azozNTI2IGdpdGs6MzUzMSBnaXRrOjQ3NjMKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgImNoZW1pbnMgbW9kaWZpw6lzIDoiCisKKyM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAiYWpvdXRlL3N1cHByaW1lIGxhIGNoYcOubmUgOiIKKworIzogZ2l0azoyMzA0IGdpdGs6NDc3OQorbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDc2NgorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJFeGFjdCIKKworIzogZ2l0azoyMzE1IGdpdGs6NDg1NCBnaXRrOjY3MjMKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICJJZ25vcmVyIGxhIGNhc3NlIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0NzM2IGdpdGs6NDg1MiBnaXRrOjY3MTkKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIkV4cHJlc3Npb24gcsOpZ3VsacOocmUiCisKKyM6IGdpdGs6MjMxNyBnaXRrOjIzMTggZ2l0azo0ODc0IGdpdGs6NDkwNCBnaXRrOjQ5MTEgZ2l0azo2ODQ4IGdpdGs6NjkxNgorbXNnaWQgIkFsbCBmaWVsZHMiCittc2dzdHIgIlRvdXMgbGVzIGNoYW1wcyIKKworIzogZ2l0azoyMzE4IGdpdGs6NDg3MSBnaXRrOjQ5MDQgZ2l0azo2Nzg2Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIlN1cmxpZ25lciIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJDb21tZW50YWlyZXMiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo0ODc2IGdpdGs6NDkxMSBnaXRrOjY3ODYgZ2l0azo3MzI0IGdpdGs6ODgzMAorIzogZ2l0azo4ODQ1Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJBdXRldXIiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NzMyNgorbXNnaWQgIkNvbW1pdHRlciIKK21zZ3N0ciAiQXV0ZXVyIGR1IGNvbW1pdCIKKworIzogZ2l0azoyMzUwCittc2dpZCAiU2VhcmNoIgorbXNnc3RyICJSZWNoZXJjaGVyIgorCisjOiBnaXRrOjIzNTgKK21zZ2lkICJEaWZmIgorbXNnc3RyICJEaWZmIgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiQW5jaWVubmUgdmVyc2lvbiIKKworIzogZ2l0azoyMzYyCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIk5vdXZlbGxlIHZlcnNpb24iCisKKyM6IGdpdGs6MjM2NAorbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCittc2dzdHIgIkxpZ25lcyBkZSBjb250ZXh0ZSIKKworIzogZ2l0azoyMzc0Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiSWdub3JlciBsZXMgbW9kaWZpY2F0aW9ucyBkJ2VzcGFjZSIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjQ0NQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJQYXRjaCIKKworIzogZ2l0azoyNDQ3Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiQXJicmUiCisKKyM6IGdpdGs6MjYxNyBnaXRrOjI2MzcKK21zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCittc2dzdHIgIkRpZmYgZW50cmUgY2VjaSBldCBsYSBzw6lsZWN0aW9uIgorCisjOiBnaXRrOjI2MTggZ2l0azoyNjM4Cittc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgorbXNnc3RyICJEaWZmIGVudHJlIHPDqWxlY3Rpb24gZXQgY2VjaSIKKworIzogZ2l0azoyNjE5IGdpdGs6MjYzOQorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIkNyw6llciBwYXRjaCIKKworIzogZ2l0azoyNjIwIGdpdGs6OTI1NAorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIkNyw6llciB0YWciCisKKyM6IGdpdGs6MjYyMSBnaXRrOjkzNzEKK21zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKK21zZ3N0ciAiw4ljcmlyZSBsZSBjb21taXQgZGFucyB1biBmaWNoaWVyIgorCisjOiBnaXRrOjI2MjIgZ2l0azo5NDI4Cittc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCittc2dzdHIgIkNyw6llciB1bmUgbm91dmVsbGUgYnJhbmNoZSIKKworIzogZ2l0azoyNjIzCittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgIkN1ZWlsbGlyIChjaGVycnktcGljaykgY2UgY29tbWl0IgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSw6lpbml0aWFsaXNlciBsYSBicmFuY2hlIEhFQUQgdmVycyBjZXQgw6l0YXQiCisKKyM6IGdpdGs6MjYyNQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIk1hcnF1ZXIgY2UgY29tbWl0IgorCisjOiBnaXRrOjI2MjYKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiUmV0b3VybmVyIMOgIGxhIG1hcnF1ZSIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIkNoZXJjaGVyIGxlIGRlc2NlbmRhbnQgZGUgY2VjaSBldCBsZSBtYXJxdWVyIgorCisjOiBnaXRrOjI2MjgKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiQ29tcGFyZXIgYXZlYyBsZSBjb21taXQgbWFycXXDqSIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorIywgZnV6enkKK21zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiRGlmZiBlbnRyZSBjZWNpIGV0IGxhIHPDqWxlY3Rpb24iCisKKyM6IGdpdGs6MjYzMCBnaXRrOjI2NDEKKyMsIGZ1enp5Cittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgIkRpZmYgZW50cmUgc8OpbGVjdGlvbiBldCBjZWNpIgorCisjOiBnaXRrOjI2MzEKKyMsIGZ1enp5Cittc2dpZCAiUmV2ZXJ0IHRoaXMgY29tbWl0IgorbXNnc3RyICJNYXJxdWVyIGNlIGNvbW1pdCIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJSw6ljdXDDqXJlciBjZXR0ZSBicmFuY2hlIgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIlN1cHByaW1lciBjZXR0ZSBicmFuY2hlIgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY1NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAiU3VybGlnbmVyIMOpZ2FsZW1lbnQgY2VjaSIKKworIzogZ2l0azoyNjU3Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKK21zZ3N0ciAiU3VybGlnbmVyIHNldWxlbWVudCBjZWNpIgorCisjOiBnaXRrOjI2NTgKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICJEaWZmIGV4dGVybmUiCisKKyM6IGdpdGs6MjY1OQorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIkJsw6JtZXIgbGUgY29tbWl0IHBhcmVudCIKKworIzogZ2l0azoyNjYwCittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjY2NworbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKK21zZ3N0ciAiTW9udHJlciBsJ29yaWdpbmUgZGUgY2V0dGUgbGlnbmUiCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiRXjDqWN1dGVyIGdpdCBndWkgYmxhbWUgc3VyIGNldHRlIGxpZ25lIgorCisjOiBnaXRrOjMwMTQKKyMsIGZ1enp5Cittc2dpZCAiIgorIlxuIgorIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIlxuIgorIkNvcHlyaWdodCDCqSAyMDA1LTIwMTQgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgorbXNnc3RyICIiCisiXG4iCisiR2l0ayAtIHZpc3VhbGlzYXRldXIgZGUgY29tbWl0IHBvdXIgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiVXRpbGlzYXRpb24gZXQgcmVkaXN0cmlidXRpb24gc291bWlzZXMgYXV4IHRlcm1lcyBkZSBsYSBHTlUgR2VuZXJhbCBQdWJsaWMgIgorIkxpY2Vuc2UiCisKKyM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgIkZlcm1lciIKKworIzogZ2l0azozMDQzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciBkZSBHaXRrIgorCisjOiBnaXRrOjMwNDYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciBkZSBHaXRrIDoiCisKKyM6IGdpdGs6MzA0OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgorbXNnc3RyICI8JXMtUT5cdFx0UXVpdHRlciIKKworIzogZ2l0azozMDQ5CisjLCBmdXp6eSwgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCittc2dzdHIgIjwlcy1GPlx0XHRSZWNoZXJjaGVyIgorCisjOiBnaXRrOjMwNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxEw6lidXQ+XHRcdEFsbGVyIGF1IHByZW1pZXIgY29tbWl0IgorCisjOiBnaXRrOjMwNTEKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RmluPlx0XHRBbGxlciBhdSBkZXJuaWVyIGNvbW1pdCIKKworIzogZ2l0azozMDUyCisjLCBmdXp6eQorbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKK21zZ3N0ciAiPEhhdXQ+LCBwLCBpXHQgQWxsZXIgYXUgY29tbWl0IHN1aXZhbnQiCisKKyM6IGdpdGs6MzA1MworIywgZnV6enkKK21zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8QmFzPiwgbiwga1x0IEFsbGVyIGF1IGNvbW1pdCBwcsOpY8OpZGVudCIKKworIzogZ2l0azozMDU0CisjLCBmdXp6eQorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxHYXVjaGU+LCB6LCBqXHRSZWN1bGVyIGRhbnMgbCdoaXN0b3JpcXVlIgorCisjOiBnaXRrOjMwNTUKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPERyb2l0ZT4sIHgsIGxcdEF2YW5jZXIgZGFucyBsJ2hpc3RvcmlxdWUiCisKKyM6IGdpdGs6MzA1NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzA1NworbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0TW9udGVyIGQndW5lIHBhZ2UgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azozMDU4Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZURvd24+XHREZXNjZW5kcmUgZCd1bmUgcGFnZSBkYW5zIGxhIGxpc3RlIGRlcyBjb21taXRzIgorCisjOiBnaXRrOjMwNTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1Ew6lidXQ+XHRBbGxlciBlbiBoYXV0IGRlIGxhIGxpc3RlIGRlcyBjb21taXRzIgorCisjOiBnaXRrOjMwNjAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUVuZD5cdEFsbGVyIGVuIGJhcyBkZSBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azozMDYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtVXA+XHRNb250ZXIgZCd1bmUgbGlnbmUgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azozMDYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLURvd24+XHREZXNjZW5kcmUgZCd1bmUgbGlnbmUgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKKworIzogZ2l0azozMDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MzA2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnZURvd24+XHREZXNjZW5kcmUgZCd1bmUgcGFnZSBkYW5zIGxhIGxpc3RlIGRlcyBjb21taXRzIgorCisjOiBnaXRrOjMwNjUKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIiIKKyI8U2hpZnQtVXA+XHRSZWNoZXJjaGUgZW4gYXJyacOocmUgKHZlcnMgbCdhdmFudCwgY29tbWl0cyBsZXMgcGx1cyBhbmNpZW5zKSIKKworIzogZ2l0azozMDY2Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIiIKKyI8U2hpZnQtRG93bj5cdFJlY2hlcmNoZSBlbiBhdmFudCAodmVycyBsJ2FycmnDqHJlLCBjb21taXQgbGVzIHBsdXMgcsOpY2VudHMpIgorCisjOiBnaXRrOjMwNjcKK21zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPFN1cHByaW1lcj4sIGJcdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwNjgKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwNjkKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPEVzcGFjZT5cdFx0RGVzY2VuZHJlIGQndW5lIHBhZ2UgZGFucyBsYSB2dWUgZGVzIGRpZmYiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRNb250ZXIgZGUgMTggbGlnbmVzIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwNzEKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHREZXNjZW5kcmUgZGUgMTggbGlnbmVzIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdFJlY2hlcmNoZXIiCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHRBbGxlciBhdSByw6lzdWx0YXQgZGUgcmVjaGVyY2hlIHN1aXZhbnQiCisKKyM6IGdpdGs6MzA3NAorbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxSZXR1cm4+XHRcdEFsbGVyIGF1IHLDqXN1bHRhdCBkZSByZWNoZXJjaGUgc3VpdmFudCIKKworIzogZ2l0azozMDc1CisjLCBmdXp6eQorbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgorbXNnc3RyICI8RmluPlx0XHRBbGxlciBhdSBkZXJuaWVyIGNvbW1pdCIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRGb2N1cyBzdXIgbGEgem9uZSBkZSByZWNoZXJjaGUiCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRBbGxlciBhdSByw6lzdWx0YXQgZGUgcmVjaGVyY2hlIHByw6ljw6lkZW50IgorCisjOiBnaXRrOjMwNzgKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdEFsbGVyIGF1IHByb2NoYWluIGZpY2hpZXIgZGFucyBsYSB2dWUgZGVzIGRpZmYiCisKKyM6IGdpdGs6MzA3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdEFsbGVyIGF1IHLDqXN1bHRhdCBzdWl2YW50IGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0QWxsZXIgYXUgcsOpc3VsdGF0IHByw6ljw6lkZW50IGRhbnMgbGEgdnVlIGRlcyBkaWZmIgorCisjOiBnaXRrOjMwODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1ArPlx0QXVnbWVudGVyIGxhIHRhaWxsZSBkZSBsYSBwb2xpY2UiCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdEF1Z21lbnRlciBsYSB0YWlsbGUgZGUgbGEgcG9saWNlIgorCisjOiBnaXRrOjMwODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1AtPlx0RGltaW51ZXIgbGEgdGFpbGxlIGRlIGxhIHBvbGljZSIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHREaW1pbnVlciBsYSB0YWlsbGUgZGUgbGEgcG9saWNlIgorCisjOiBnaXRrOjMwODUKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRNaXNlIMOgIGpvdXIiCisKKyM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgY3LDqWF0aW9uIGR1IHLDqXBlcnRvaXJlIHRlbXBvcmFpcmUgJXMgOiIKKworIzogZ2l0azozNTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkVycmV1ciBlbiBvYnRlbmFudCBcIiVzXCIgZGUgJXM6IgorCisjOiBnaXRrOjM2MzUKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBjb21tYW5kZSA6IgorCisjOiBnaXRrOjM3ODQKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiQ29tbWl0IGluZXhpc3RhbnQiCisKKyM6IGdpdGs6Mzc5OAorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZSA6IMOpY2hlYyBkZSBsYSBjb21tYW5kZSA6IgorCisjOiBnaXRrOjM4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgbGUgaGVhZCBkZSBsYSBmdXNpb24gOiAlcyIKKworIzogZ2l0azozODM3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCittc2dzdHIgIkVycmV1ciDDoCBsYSBsZWN0dXJlIGRlIGwnaW5kZXggOiAlcyIKKworIzogZ2l0azozODYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6ltYXJyZXIgZ2l0IGJsYW1lIDogJXMiCisKKyM6IGdpdGs6Mzg2NSBnaXRrOjY3NTQKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIlJlY2hlcmNoZSBlbiBjb3VycyIKKworIzogZ2l0azozODk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJFcnJldXIgw6AgbCdleMOpY3V0aW9uIGRlIGdpdCBibGFtZSA6ICVzIgorCisjOiBnaXRrOjM5MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICJDZXR0ZSBsaWduZSBlc3QgaXNzdWUgZHUgY29tbWl0ICVzLCBxdWkgbidlc3QgcGFzIGRhbnMgY2V0dGUgdnVlIgorCisjOiBnaXRrOjM5MzkKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICLDiWNoZWMgZGUgbCdvdXRpbCBleHRlcm5lIGRlIHZpc3VhbGlzYXRpb24gZGVzIGRpZmYiCisKKyM6IGdpdGs6NDA3MAorbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgorbXNnc3RyICJEw6lmaW5pdGlvbiBkZXMgdnVlcyBkZSBHaXRrIgorCisjOiBnaXRrOjQwNzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlNlIHNvdXZlbmlyIGRlIGNldHRlIHZ1ZSIKKworIzogZ2l0azo0MDc1Cittc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKK21zZ3N0ciAiUsOpZsOpcmVuY2VzIChsaXN0ZSBkJ8OpbMOpbWVudHMgc8OpcGFyw6lzIHBhciBkZXMgZXNwYWNlcykgOiIKKworIzogZ2l0azo0MDc2Cittc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKK21zZ3N0ciAiQnJhbmNoZXMgJiB0YWdzIDoiCisKKyM6IGdpdGs6NDA3NworbXNnaWQgIkFsbCByZWZzIgorbXNnc3RyICJUb3V0ZXMgbGVzIHLDqWbDqXJlbmNlcyIKKworIzogZ2l0azo0MDc4Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIlRvdXRlcyBsZXMgYnJhbmNoZXMgKGxvY2FsZXMpIgorCisjOiBnaXRrOjQwNzkKK21zZ2lkICJBbGwgdGFncyIKK21zZ3N0ciAiVG91cyBsZXMgdGFncyIKKworIzogZ2l0azo0MDgwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiVG91dGVzIGxlcyBicmFuY2hlcyBkZSBzdWl2aSDDoCBkaXN0YW5jZSIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiSW5mbyBzdXIgbGVzIGNvbW1pdHMgKGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcykgOiIKKworIzogZ2l0azo0MDgyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiQXV0ZXVyIDoiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIkNvbW1pdGV1ciA6IgorCisjOiBnaXRrOjQwODQKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2UgZGUgY29tbWl0IDoiCisKKyM6IGdpdGs6NDA4NQorbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJDb3JyZXNwb25kIMOgIHRvdXMgbGVzIGNyaXTDqHJlcyBkJ0luZm8gc3VyIGxlcyBjb21taXRzIgorCisjOiBnaXRrOjQwODYKKyMsIGZ1enp5Cittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiQ29ycmVzcG9uZCDDoCB0b3VzIGxlcyBjcml0w6hyZXMgZCdJbmZvIHN1ciBsZXMgY29tbWl0cyIKKworIzogZ2l0azo0MDg3Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIkNoYW5nZW1lbnRzIGRlcyBmaWNoaWVycyA6IgorCisjOiBnaXRrOjQwODgKK21zZ2lkICJGaXhlZCBTdHJpbmciCittc2dzdHIgIkNoYcOubmUgRmlnw6llIgorCisjOiBnaXRrOjQwODkKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIkV4cHJlc3Npb24gUsOpZ3VsacOocmUiCisKKyM6IGdpdGs6NDA5MAorbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgorbXNnc3RyICJSZWNoZXJjaGUgZGUgbGEgY2hhw65uZSA6IgorCisjOiBnaXRrOjQwOTEKK21zZ2lkICIiCisiQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKKyIxNToyNzozOFwiKToiCittc2dzdHIgIiIKKyJEYXRlcyBkZXMgY29tbWl0cyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgIgorIjIwMDkgMTU6Mjc6MzhcIikgOiIKKworIzogZ2l0azo0MDkyCittc2dpZCAiU2luY2U6IgorbXNnc3RyICJEZSA6IgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIkp1c3F1J2F1IDoiCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJMaW1pdGVyIGV0L291IHNhdXRlciB1biBjZXJ0YWluIG5vbWJyZSAoZW50aWVyIHBvc2l0aWYpIGRlIHLDqXZpc2lvbnMgOiIKKworIzogZ2l0azo0MDk1Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICJOb21icmUgw6AgYWZmaWNoZXIgOiIKKworIzogZ2l0azo0MDk2Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICJOb21icmUgw6Agc2F1dGVyIDoiCisKKyM6IGdpdGs6NDA5NworbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIk9wdGlvbnMgZGl2ZXJzZXMgOiIKKworIzogZ2l0azo0MDk4Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJUcmllciBwYXIgZGF0ZSIKKworIyBGSVhNRSA6IHRyYWR1Y3Rpb24gZGUgImJyYW5jaCBzaWRlcyIKKyM6IGdpdGs6NDA5OQorIywgZnV6enkKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAiTWFycXVlciBsZXMgZXh0csOpbWl0w6lzIGRlcyBicmFuY2hlcyIKKworIzogZ2l0azo0MTAwCittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICJMaW1pdGVyIGF1IHByZW1pZXIgYW5jw6p0cmUiCisKKyM6IGdpdGs6NDEwMQorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJIaXN0b3JpcXVlIHNpbXBsZSIKKworIzogZ2l0azo0MTAyCittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIkFyZ3VtZW50cyBzdXBwbMOpbWVudGFpcmVzIGRlIGdpdCBsb2cgOiIKKworIzogZ2l0azo0MTAzCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIlNhaXNpciBsZXMgZmljaGllcnMgZXQgcsOpcGVydG9pcmVzIMOgIGluY2x1cmUsIHVuIHBhciBsaWduZSA6IgorCisjOiBnaXRrOjQxMDQKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiQ29tbWFuZGUgcG91ciBnw6luw6lyZXIgcGx1cyBkZSBjb21taXRzIMOgIGluY2x1cmUgOiIKKworIzogZ2l0azo0MjI4Cittc2dpZCAiR2l0azogZWRpdCB2aWV3IgorbXNnc3RyICJHaXRrIDogw6lkaXRlciBsYSB2dWUiCisKKyM6IGdpdGs6NDIzNgorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSBjcml0w6hyZSBwb3VyIGxhIHPDqWxlY3Rpb24gZGVzIHLDqXZpc2lvbnMiCisKKyM6IGdpdGs6NDI0MQorIywgZnV6enkKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgIk5vbSBkZSBsYSB2dWUgOiIKKworIzogZ2l0azo0MzE2Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQXBwbGlxdWVyIChGNSkiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRXJyZXVyIGRhbnMgbGVzIGFyZ3VtZW50cyBkZSBzw6lsZWN0aW9uIGRlcyBjb21taXRzIDoiCisKKyM6IGdpdGs6NDQwOSBnaXRrOjQ0NjIgZ2l0azo0OTI0IGdpdGs6NDkzOCBnaXRrOjYyMDggZ2l0azoxMjM3MyBnaXRrOjEyMzc0Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiQXVjdW4iCisKKyM6IGdpdGs6NTAyMSBnaXRrOjUwMjYKK21zZ2lkICJEZXNjZW5kYW50IgorbXNnc3RyICJEZXNjZW5kYW50IgorCisjOiBnaXRrOjUwMjIKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiUGFzIHVuIGRlc2NlbmRhbnQiCisKKyM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiQW5jw6p0cmUiCisKKyM6IGdpdGs6NTAzMAorbXNnaWQgIk5vdCBhbmNlc3RvciIKK21zZ3N0ciAiUGFzIHVuIGFuY8OqdHJlIgorCisjOiBnaXRrOjUzMjQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIk1vZGlmaWNhdGlvbnMgbG9jYWxlcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbCdpbmRleCBtYWlzIG5vbiBjb21taXTDqWVzIgorCisjOiBnaXRrOjUzNjAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTW9kaWZpY2F0aW9ucyBsb2NhbGVzIG5vbiBlbnJlZ2lzdHLDqWVzIGRhbnMgbCdpbmRleCBldCBub24gY29tbWl0w6llcyIKKworIzogZ2l0azo3MTM0Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjcxMzcKK21zZ2lkICJtYW55IgorbXNnc3RyICJub21icmV1eCIKKworIzogZ2l0azo3MzI4Cittc2dpZCAiVGFnczoiCittc2dzdHIgIlRhZ3MgOiIKKworIzogZ2l0azo3MzQ1IGdpdGs6NzM1MSBnaXRrOjg4MjUKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIlBhcmVudCIKKworIzogZ2l0azo3MzU2Cittc2dpZCAiQ2hpbGQiCittc2dzdHIgIkVuZmFudCIKKworIzogZ2l0azo3MzY1Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJCcmFuY2hlIgorCisjOiBnaXRrOjczNjgKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJTdWl0IgorCisjOiBnaXRrOjczNzEKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiUHLDqWPDqGRlIgorCisjOiBnaXRrOjc5NjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgcsOpY3Vww6lyYXRpb24gZGVzIGRpZmYgOiAlcyIKKworIzogZ2l0azo4NjUwCittc2dpZCAiR290bzoiCittc2dzdHIgIkFsbGVyIMOgIDoiCisKKyM6IGdpdGs6ODY3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJJZCBTSEExIGNvdXJ0ICVzIGVzdCBhbWJpZ3UiCisKKyM6IGdpdGs6ODY3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiSWQgU0hBMSAlcyBlc3QgaW5jb25udSIKKworIzogZ2l0azo4Njg4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCittc2dzdHIgIklkIFNIQTEgJXMgZXN0IGluY29ubnUiCisKKyM6IGdpdGs6ODY5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJMYSByw6l2aXNpb24gJXMgbidlc3QgcGFzIGRhbnMgbGEgdnVlIGNvdXJhbnRlIgorCisjOiBnaXRrOjg4MzIgZ2l0azo4ODQ3Cittc2dpZCAiRGF0ZSIKK21zZ3N0ciAiRGF0ZSIKKworIzogZ2l0azo4ODM1Cittc2dpZCAiQ2hpbGRyZW4iCittc2dzdHIgIkVuZmFudHMiCisKKyM6IGdpdGs6ODg5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJSw6lpbml0aWFsaXNlciBsYSBicmFuY2hlICVzIHZlcnMgY2V0IMOpdGF0IgorCisjOiBnaXRrOjg5MDAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiSGVhZCBkw6l0YWNow6kgOiBpbXBvc3NpYmxlIGRlIHLDqWluaXRpYWxpc2VyIgorCisjOiBnaXRrOjkwMDUgZ2l0azo5MDExCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiw4l2aXRlciBsZSBjb21taXQgZGUgbGEgZnVzaW9uICIKKworIzogZ2l0azo5MDIwIGdpdGs6OTAyNQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRXJyZXVyIMOgIGwnb2J0ZW50aW9uIGRlIGwnSUQgZHUgcGF0Y2ggcG91ciAiCisKKyM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSBhcnLDqnQgZW4gY291cnNcbiIKKworIzogZ2l0azo5MDMxIGdpdGs6OTAzNCBnaXRrOjkwNDIgZ2l0azo5MDU2IGdpdGs6OTA2NQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgIkNvbW1pdCAiCisKKyM6IGdpdGs6OTAzNQorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiZXN0IGxlIG3Dqm1lIHBhdGNoIHF1ZSBcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDMKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgZGlmZsOocmUgZGVcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDUKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiYSAlcyBlbmZhbnRzIC0gYXJyw6p0IGVuIGNvdXJzXG4iCisKKyM6IGdpdGs6OTA4NQorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRXJyZXVyIMOgIGwnZWNyaXR1cmUgZHUgY29tbWl0IDoiCisKKyM6IGdpdGs6OTA5MQorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJFcnJldXIgw6AgbCdlY3JpdHVyZSBkdSBjb21taXQgOiIKKworIzogZ2l0azo5MTM3Cittc2dpZCAiVG9wIgorbXNnc3RyICJIYXV0IgorCisjOiBnaXRrOjkxMzgKK21zZ2lkICJGcm9tIgorbXNnc3RyICJEZSIKKworIzogZ2l0azo5MTQzCittc2dpZCAiVG8iCittc2dzdHIgIsOAIgorCisjOiBnaXRrOjkxNjcKK21zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKK21zZ3N0ciAiR8OpbsOpcmVyIGxlIHBhdGNoIgorCisjOiBnaXRrOjkxNjkKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAiRGUgOiIKKworIzogZ2l0azo5MTc4Cittc2dpZCAiVG86IgorbXNnc3RyICLDgCA6IgorCisjOiBnaXRrOjkxODcKK21zZ2lkICJSZXZlcnNlIgorbXNnc3RyICJJbnZlcnNlciIKKworIzogZ2l0azo5MTg5IGdpdGs6OTM4NQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiRmljaGllciBkZSBzb3J0aWUgOiIKKworIzogZ2l0azo5MTk1Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkfDqW7DqXJlciIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJFcnJldXIgw6AgbGEgY3LDqWF0aW9uIGR1IHBhdGNoIDoiCisKKyM6IGdpdGs6OTI1NiBnaXRrOjkzNzMgZ2l0azo5NDMwCittc2dpZCAiSUQ6IgorbXNnc3RyICJJRCA6IgorCisjOiBnaXRrOjkyNjUKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIk5vbSBkdSBUYWcgOiIKKworIzogZ2l0azo5MjY4Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIiIKKworIzogZ2l0azo5MjcwCisjLCBmdXp6eQorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAiTm9tIGR1IFRhZyA6IgorCisjOiBnaXRrOjkyNzQgZ2l0azo5NDM5Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJDcsOpZXIiCisKKyM6IGdpdGs6OTI5MgorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiQXVjdW4gbm9tIGRlIHRhZyBzcMOpY2lmacOpIgorCisjOiBnaXRrOjkyOTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJMZSB0YWcgXCIlc1wiIGV4aXN0ZSBkw6lqw6AiCisKKyM6IGdpdGs6OTMwNgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkVycmV1ciDDoCBsYSBjcsOpYXRpb24gZHUgdGFnIDoiCisKKyM6IGdpdGs6OTM4MgorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJDb21tYW5kZSA6IgorCisjOiBnaXRrOjkzOTAKK21zZ2lkICJXcml0ZSIKK21zZ3N0ciAiw4ljcmlyZSIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJFcnJldXIgw6AgbCdlY3JpdHVyZSBkdSBjb21taXQgOiIKKworIzogZ2l0azo5NDM1Cittc2dpZCAiTmFtZToiCittc2dzdHIgIk5vbSA6IgorCisjOiBnaXRrOjk0NTgKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJWZXVpbGxleiBzcMOpY2lmaWVyIHVuIG5vbSBwb3VyIGxhIG5vdXZlbGxlIGJyYW5jaGUiCisKKyM6IGdpdGs6OTQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICJMYSBicmFuY2hlICclcycgZXhpc3RlIGTDqWrDoC4gw4ljcmFzZXI/IgorCisjOiBnaXRrOjk1MzAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKK21zZ3N0ciAiIgorIkxlIENvbW1pdCAlcyBlc3QgZMOpasOgIGluY2x1cyBkYW5zIGxhIGJyYW5jaGUgJXMgLS0gbGUgcsOpLWFwcGxpcXVlciBtYWxncsOpICIKKyJ0b3V0PyIKKworIzogZ2l0azo5NTM1Cittc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCittc2dzdHIgIkN1ZWlsbGlyIChDaGVycnktcGlja2luZykiCisKKyM6IGdpdGs6OTU0NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJMYSBjdWVpbGxldHRlIChjaGVycnktcGljaykgYSDDqWNob3XDqWUgw6AgY2F1c2UgZGUgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIGR1ICIKKyJmaWNoaWVyICclcycuXG4iCisiVmV1aWxsZXogY29tbWl0ZXIsIHLDqWluaXRpYWxpc2VyIG91IHN0YXNoZXIgdm9zIGNoYW5nZW1lbnRzIGV0IGVzc2F5ZXIgZGUgIgorIm5vdXZlYXUuIgorCisjOiBnaXRrOjk1NTAKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJMYSBjdWVpbGxldHRlIChjaGVycnktcGljaykgYSDDqWNob3XDqWUgw6AgY2F1c2UgZCd1biBjb25mbGl0IGxvcnMgZCd1bmUgIgorImZ1c2lvbi5cbiIKKyJTb3VoYWl0ZXotdm91cyBleMOpY3V0ZXIgZ2l0IGNpdG9vbCBwb3VyIGxlIHLDqXNvdWRyZSA/IgorCisjOiBnaXRrOjk1NjYgZ2l0azo5NjI0Cittc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCittc2dzdHIgIkF1Y3VuIGNoYW5nZW1lbnQgY29tbWl0w6kiCisKKyM6IGdpdGs6OTU5MworIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAiIgorIkxlIENvbW1pdCAlcyBlc3QgZMOpasOgIGluY2x1cyBkYW5zIGxhIGJyYW5jaGUgJXMgLS0gbGUgcsOpLWFwcGxpcXVlciBtYWxncsOpICIKKyJ0b3V0PyIKKworIzogZ2l0azo5NTk4CisjLCBmdXp6eQorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzYXRpb24iCisKKyM6IGdpdGs6OTYwNgorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgorImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAiIgorIkxhIGN1ZWlsbGV0dGUgKGNoZXJyeS1waWNrKSBhIMOpY2hvdcOpZSDDoCBjYXVzZSBkZSBtb2RpZmljYXRpb25zIGxvY2FsZXMgZHUgIgorImZpY2hpZXIgJyVzJy5cbiIKKyJWZXVpbGxleiBjb21taXRlciwgcsOpaW5pdGlhbGlzZXIgb3Ugc3Rhc2hlciB2b3MgY2hhbmdlbWVudHMgZXQgZXNzYXllciBkZSAiCisibm91dmVhdS4iCisKKyM6IGdpdGs6OTYxMAorIywgZnV6enkKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkxhIGN1ZWlsbGV0dGUgKGNoZXJyeS1waWNrKSBhIMOpY2hvdcOpZSDDoCBjYXVzZSBkJ3VuIGNvbmZsaXQgbG9ycyBkJ3VuZSAiCisiZnVzaW9uLlxuIgorIlNvdWhhaXRlei12b3VzIGV4w6ljdXRlciBnaXQgY2l0b29sIHBvdXIgbGUgcsOpc291ZHJlID8iCisKKyM6IGdpdGs6OTY1MworbXNnaWQgIkNvbmZpcm0gcmVzZXQiCittc2dzdHIgIkNvbmZpcm1lciBsYSByw6lpbml0aWFsaXNhdGlvbiIKKworIzogZ2l0azo5NjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAiUsOpaW5pdGlhbGlzZXIgbGEgYnJhbmNoZSAlcyDDoCAlcz8iCisKKyM6IGdpdGs6OTY1NworbXNnaWQgIlJlc2V0IHR5cGU6IgorbXNnc3RyICJUeXBlIGRlIHLDqWluaXRpYWxpc2F0aW9uIDoiCisKKyM6IGdpdGs6OTY2MAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJEb3VjZSA6IExhaXNzZSBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIGV0IGwnaW5kZXggaW50YWN0cyIKKworIzogZ2l0azo5NjYzCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICIiCisiSHlicmlkZSA6IExhaXNzZSBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIGRhbnMgc29uIMOpdGF0IGNvdXJhbnQsICIKKyJyw6lpbml0aWFsaXNlIGwnaW5kZXgiCisKKyM6IGdpdGs6OTY2NgorbXNnaWQgIiIKKyJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCisiKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorbXNnc3RyICIiCisiRHVyZSA6IFLDqWluaXRpYWxpc2UgbGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBldCBsJ2luZGV4XG4iCisiKGFiYW5kb25uZSBUT1VTIGxlcyBjaGFuZ2VtZW50cyBsb2NhdXgpIgorCisjOiBnaXRrOjk2ODMKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgIlLDqWluaXRpYWxpc2F0aW9uIgorCisjIEZpeG1lOiBSw6ljdXDDqXJhdGlvbiBlc3QtaWwgdnJhaW1lbnQgdW5lIG1hdXZhaXNlIHRyYWR1Y3Rpb24/CisjOiBnaXRrOjk3NDMKKyMsIGZ1enp5Cittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJSw6ljdXDDqXJhdGlvbiIKKworIzogZ2l0azo5Nzk2Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGEgYnJhbmNoZSBlbiBjb3VycyIKKworIzogZ2l0azo5ODAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJMZXMgY29tbWl0cyBkZSBsYSBicmFuY2hlICVzIG5lIHNvbnQgZGFucyBhdWN1bmUgYXV0cmUgYnJhbmNoZS5cbiIKKyJWb3VsZXotdm91cyB2cmFpbWVudCBzdXBwcmltZXIgY2V0dGUgYnJhbmNoZSAlcyA/IgorCisjOiBnaXRrOjk4MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIlRhZ3MgZXQgaGVhZHMgOiAlcyIKKworIzogZ2l0azo5ODUwCittc2dpZCAiRmlsdGVyIgorbXNnc3RyICJGaWx0cmVyIgorCisjOiBnaXRrOjEwMTQ2Cittc2dpZCAiIgorIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgorInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorbXNnc3RyICIiCisiRXJyZXVyIMOgIGxhIGxlY3R1cmUgZGVzIGluZm9ybWF0aW9ucyBzdXIgbGEgdG9wb2xvZ2llIGRlcyBjb21taXRzLCBsZXMgIgorImluZm9ybWF0aW9ucyBzdXIgbGVzIGJyYW5jaGVzIGV0IGxlcyB0YWdzIHByw6ljw6lkZW50cy9zdWl2YW50cyBzZXJvbnQgIgorImluY29tcGzDqHRlcy4iCisKKyM6IGdpdGs6MTExMjMKK21zZ2lkICJUYWciCittc2dzdHIgIlRhZyIKKworIzogZ2l0azoxMTEyNworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMTIxMAorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTw6lsZWN0ZXVyIGRlIHBvbGljZSBkZSBHaXRrIgorCisjOiBnaXRrOjExMjI3Cittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azoxMTIzMAorbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6MTEzNDgKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMgZCdhZmZpY2hhZ2UgZGUgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCisKKyM6IGdpdGs6MTEzNTEKK21zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCittc2dzdHIgIkxvbmd1ZXVyIG1heGltdW0gZHUgZ3JhcGhlIChsaWduZXMpIgorCisjIEZJWE1FIDogVHJhZHVjdGlvbiBzdGFuZGFyZCBkZSAicGFuZSI/CisjOiBnaXRrOjExMzU1CisjLCBmdXp6eSwgbm8tdGNsLWZvcm1hdAorbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCittc2dzdHIgIkxvbmd1ZXVyIG1heGltdW0gZHUgZ3JhcGhlICglIGR1IHBhbm5lYXUpIgorCisjOiBnaXRrOjExMzU4Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJNb250cmVyIGxlcyBjaGFuZ2VtZW50cyBsb2NhdXgiCisKKyM6IGdpdGs6MTEzNjEKKyMsIGZ1enp5Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiU8OpbGVjdGlvbiBhdXRvLiBkdSBTSEExIgorCisjOiBnaXRrOjExMzY1Cittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiQ2FjaGVyIGxlcyByZWZzIGRpc3RhbnRlcyIKKworIzogZ2l0azoxMTM2OQorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGQnYWZmaWNoYWdlIGRlcyBkaWZmIgorCisjOiBnaXRrOjExMzcxCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIlRhaWxsZSBkZXMgdGFidWxhdGlvbnMiCisKKyM6IGdpdGs6MTEzNzQKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIHRhZ3MgbGVzIHBsdXMgcHJvY2hlcyIKKworIzogZ2l0azoxMTM3NworbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgIiIKKworIzogZ2l0azoxMTM4MAorbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiTGltaXRlciBsZXMgZGlmZsOpcmVuY2VzIGF1eCBjaGVtaW5zIGxpc3TDqXMiCisKKyM6IGdpdGs6MTEzODMKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAiU3VwcG9ydCBwb3VyIHVuIGVuY29kYWdlIGRlcyBjYXJhY3TDqHJlcyBwYXIgZmljaGllciIKKworIzogZ2l0azoxMTM4OSBnaXRrOjExNTM2Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICJPdXRpbCBkaWZmIGV4dGVybmUiCisKKyM6IGdpdGs6MTEzOTAKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIkNob2lzaXIuLi4iCisKKyM6IGdpdGs6MTEzOTUKKyMsIGZ1enp5Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJHw6luw6lyZXIgbGUgcGF0Y2giCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTQwMAorbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTQwMgorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE0MTMKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQ291bGV1cnMgOiBjbGlxdWVyIHBvdXIgY2hvaXNpciIKKworIzogZ2l0azoxMTQxNgorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNDE3CisjLCBmdXp6eQorbXNnaWQgImludGVyZmFjZSIKK21zZ3N0ciAiUG9saWNlIGRlIGwnaW50ZXJmYWNlIHV0aWxpc2F0ZXVyIgorCisjOiBnaXRrOjExNDIwCittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiQXJyacOocmUtcGxhbiIKKworIzogZ2l0azoxMTQyMSBnaXRrOjExNDUxCittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAiYXJyacOocmUtcGxhbiIKKworIzogZ2l0azoxMTQyNAorbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgIlByZW1pZXIgcGxhbiIKKworIzogZ2l0azoxMTQyNQorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgInByZW1pZXIgcGxhbiIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZiA6IGFuY2llbm5lcyBsaWduZXMiCisKKyM6IGdpdGs6MTE0MjkKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAiZGlmZiBhbmNpZW5uZXMgbGlnbmVzIgorCisjOiBnaXRrOjExNDMzCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmIDogbm91dmVsbGVzIGxpZ25lcyIKKworIzogZ2l0azoxMTQzNAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJkaWZmIG5vdXZlbGxlcyBsaWduZXMiCisKKyM6IGdpdGs6MTE0MzgKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiRGlmZiA6IGVudMOqdGUgZHUgaHVuayIKKworIzogZ2l0azoxMTQ0MAorbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgImRpZmYgOiBlbnTDqnRlIGR1IGh1bmsiCisKKyM6IGdpdGs6MTE0NDQKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAiQXJyacOocmUtcGxhbiBkZSBsYSBsaWduZSBtYXJxdcOpZSIKKworIzogZ2l0azoxMTQ0NgorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgIkFycmnDqHJlLXBsYW4gZGUgbGEgbGlnbmUgbWFycXXDqWUiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIlPDqWxlY3Rpb25uZXIgbCdhcnJpw6hyZS1wbGFuIgorCisjOiBnaXRrOjExNDU5Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiUG9saWNlcyA6IGNsaXF1ZXIgcG91ciBjaG9pc2lyIgorCisjOiBnaXRrOjExNDYxCittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJQb2xpY2UgcHJpbmNpcGFsZSIKKworIzogZ2l0azoxMTQ2MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJQb2xpY2UgZCdhZmZpY2hhZ2UgZGVzIGRpZmYiCisKKyM6IGdpdGs6MTE0NjMKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJQb2xpY2UgZGUgbCdpbnRlcmZhY2UgdXRpbGlzYXRldXIiCisKKyM6IGdpdGs6MTE0ODUKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICJQcsOpZsOpcmVuY2VzIGRlIEdpdGsiCisKKyM6IGdpdGs6MTE0OTQKKyMsIGZ1enp5Cittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAiR8OpbsOpcmVyIgorCisjOiBnaXRrOjExNDk1Cittc2dpZCAiQ29sb3JzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE0OTYKK21zZ2lkICJGb250cyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjExNTQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0ayA6IGNob2lzaXIgbGEgY291bGV1ciBkZSAlcyIKKworIzogZ2l0azoxMjA1OQorbXNnaWQgIiIKKyJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKKyIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKK21zZ3N0ciAiIgorIkTDqXNvbMOpLCBnaXRrIG5lIHBldXQgw6p0cmUgZXjDqWN1dMOpIGF2ZWMgY2V0dGUgdmVyc2lvbiBkZSBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWllcnQgVGNsL1RrIHZlcnNpb24gOC40IG91IHN1cMOpcmlldXIuIgorCisjOiBnaXRrOjEyMjY5Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIHVuIGTDqXDDtHQgZ2l0IGljaS4iCisKKyM6IGdpdGs6MTIzMTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgIkFyZ3VtZW50ICclcycgYW1iaWd1IDogw6AgbGEgZm9pcyB1bmUgcsOpdmlzaW9uIGV0IHVuIG5vbSBkZSBmaWNoaWVyIgorCisjOiBnaXRrOjEyMzI4Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiQXJndW1lbnRzIGludmFsaWRlcyBwb3VyIGdpdGsgOiIKKworI34gbXNnaWQgIlNIQTEgSUQ6ICIKKyN+IG1zZ3N0ciAiSUQgU0hBMSA6IgorCisjfiBtc2dpZCAibmV4dCIKKyN+IG1zZ3N0ciAic3VpdmFudCIKKworI34gbXNnaWQgInByZXYiCisjfiBtc2dzdHIgInByw6ljw6lkZW50IgorCisjfiBtc2dpZCAiQ0RhdGUiCisjfiBtc2dzdHIgIkNEYXRlIgorCisjfiBtc2dpZCAiLSBzdG9wcGluZ1xuIgorI34gbXNnc3RyICItIGFycsOqdCBlbiBjb3Vyc1xuIgorCisjfiBtc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKKyN+IG1zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIHLDqXBlcnRvaXJlIGdpdCBcIiVzXCIuIgpkaWZmIC0tZ2l0IGEvcG8vaHUucG8gYi9naXRrLWdpdC9wby9odS5wbwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcG8vaHUucG8KcmVuYW1lIHRvIGdpdGstZ2l0L3BvL2h1LnBvCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9pdC5wbyBiL2dpdGstZ2l0L3BvL2l0LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjAwMmQKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9pdC5wbwpAQCAtMCwwICsxLDEzODcgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0aworIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBQYXVsIE1hY2tlcnJhcworIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIyBNaWNoZWxlIEJhbGxhYmlvIDxiYXJyYV9jdWRhQGthdGFtYWlsLmNvbT4sIDIwMDguCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEwLTAxLTI4IDE4OjQxKzAxMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1pY2hlbGUgQmFsbGFiaW8gPGJhcnJhX2N1ZGFAa2F0YW1haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEl0YWxpYW5cbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBvdHRlbmVyZSBsJ2VsZW5jbyBkZWkgZmlsZSBpbiBhdHRlc2EgZGkgZnVzaW9uZToiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM4MQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjAgZ2l0azo4MjUzCittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MzI0Cittc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgorbXNnc3RyICJFcnJvcmUgbmVsbGEgbGV0dHVyYSBkZWxsZSByZXZpc2lvbmk6IgorCisjOiBnaXRrOjM4MAorbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCittc2dzdHIgIkVycm9yZSBuZWxsJ2VzZWN1emlvbmUgZGVsIGNvbWFuZG8gc3BlY2lmaWNhdG8gY29uIC0tYXJnc2NtZDoiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiTmVzc3VuIGZpbGUgc2VsZXppb25hdG86IMOoIHN0YXRhIHNwZWNpZmljYXRhIGwnb3B6aW9uZSAtLW1lcmdlIG1hIG5vbiBjaSAiCisic29ubyBmaWxlIGluIGF0dGVzYSBkaSBmdXNpb25lLiIKKworIzogZ2l0azozOTYKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIk5lc3N1biBmaWxlIHNlbGV6aW9uYXRvOiDDqCBzdGF0YSBzcGVjaWZpY2F0YSBsJ29wemlvbmUgLS1tZXJnZSBtYSBpIGZpbGUgIgorInNwZWNpZmljYXRpIG5vbiBzb25vIGluIGF0dGVzYSBkaSBmdXNpb25lLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgIkVycm9yZSBuZWxsJ2VzZWN1emlvbmUgZGkgZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTGV0dHVyYSBpbiBjb3JzbyIKKworIzogZ2l0azo0OTYgZ2l0azo0NTI1Cittc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgorbXNnc3RyICJMZXR0dXJhIGRlbGxlIHJldmlzaW9uaSBpbiBjb3Jzby4uLiIKKworIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAorbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCittc2dzdHIgIk5lc3N1bmEgcmV2aXNpb25lIHNlbGV6aW9uYXRhIgorCisjOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkxpbmVhIGRpIGNvbWFuZG8iCisKKyM6IGdpdGs6MTUxMQorbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgZWxhYm9yYXJlIGkgZGF0aSBkaSBnaXQgbG9nOiIKKworIzogZ2l0azoxNzQwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAiTmVzc3VuYSBpbmZvcm1hemlvbmUgZGlzcG9uaWJpbGUgc3VsbGUgcmV2aXNpb25pIgorCisjOiBnaXRrOjE5MDMgZ2l0azoxOTMyIGdpdGs6NDMxNSBnaXRrOjk2NjkgZ2l0azoxMTI0MSBnaXRrOjExNTIxCittc2dpZCAiT0siCittc2dzdHIgIk9LIgorCisjOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKKyM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAiQW5udWxsYSIKKworIzogZ2l0azoyMDY5Cittc2dpZCAiJlVwZGF0ZSIKK21zZ3N0ciAiQWdnaW9ybmEiCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIlJpY2FyaWNhIgorCisjOiBnaXRrOjIwNzEKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIlJpbGVnZ2kgcmlmZXJpbWVudGkiCisKKyM6IGdpdGs6MjA3MgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIkVsZW5jYSByaWZlcmltZW50aSIKKworIzogZ2l0azoyMDc0Cittc2dpZCAiU3RhcnQgZ2l0ICZndWkiCittc2dzdHIgIkF2dmlhIGdpdCBndWkiCisKKyM6IGdpdGs6MjA3NgorbXNnaWQgIiZRdWl0IgorbXNnc3RyICJFc2NpIgorCisjOiBnaXRrOjIwNjgKK21zZ2lkICImRmlsZSIKK21zZ3N0ciAiJkZpbGUiCisKKyM6IGdpdGs6MjA4MAorbXNnaWQgIiZQcmVmZXJlbmNlcyIKK21zZ3N0ciAiUHJlZmVyZW56ZSIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgIk1vZGlmaWNhIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgIk51b3ZhIHZpc3RhLi4uIgorCisjOiBnaXRrOjIwODUKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICJNb2RpZmljYSB2aXN0YS4uLiIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICJFbGltaW5hIHZpc3RhIgorCisjOiBnaXRrOjIwODggZ2l0azo0MDQzCittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAiVHV0dGkgaSBmaWxlIgorCisjOiBnaXRrOjIwODMgZ2l0azo0MDY3Cittc2dpZCAiJlZpZXciCittc2dzdHIgIlZpc3RhIgorCisjOiBnaXRrOjIwOTMgZ2l0azoyMTAzIGdpdGs6MzAxMgorbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICJJbmZvcm1hemlvbmkgc3UgZ2l0ayIKKworIzogZ2l0azoyMDk0IGdpdGs6MjEwOAorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIlNjb3JjaWF0b2llIGRhIHRhc3RpZXJhIgorCisjOiBnaXRrOjIwOTIgZ2l0azoyMTA3Cittc2dpZCAiJkhlbHAiCittc2dzdHIgIkFpdXRvIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIlJpZ2EiCisKKyM6IGdpdGs6MjI2NworbXNnaWQgIkZpbmQiCittc2dzdHIgIlRyb3ZhIgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgInJldmlzaW9uZSIKKworIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3CisjOiBnaXRrOjY5MTIKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAiY29udGVuZW50ZToiCisKKyM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MworbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKK21zZ3N0ciAiY2hlIHJpZ3VhcmRhIGkgcGVyY29yc2k6IgorCisjOiBnaXRrOjIzMDMgZ2l0azo0Nzc3Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgImNoZSBhZ2dpdW5nZS9yaW11b3ZlIGxhIHN0cmluZ2E6IgorCisjOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Cittc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY2Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkVzYXR0byIKKworIzogZ2l0azoyMzE1IGdpdGs6NDg1NCBnaXRrOjY3MjMKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKK21zZ2lkICJBbGwgZmllbGRzIgorbXNnc3RyICJUdXR0aSBpIGNhbXBpIgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiVGl0b2xvIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjY5MTYgZ2l0azo3Mzg5Cittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgIkNvbW1lbnRpIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6NDg3NiBnaXRrOjQ5MTEgZ2l0azo2Nzg2IGdpdGs6NzMyNCBnaXRrOjg4MzAKKyM6IGdpdGs6ODg0NQorbXNnaWQgIkF1dGhvciIKK21zZ3N0ciAiQXV0b3JlIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIlJldmlzaW9uZSBjcmVhdGEgZGEiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiQ2VyY2EiCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgIiIKKworIzogZ2l0azoyMzYwCittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIlZlY2NoaWEgdmVyc2lvbmUiCisKKyM6IGdpdGs6MjM2MgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICJOdW92YSB2ZXJzaW9uZSIKKworIzogZ2l0azoyMzY0Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAiTGluZWUgZGkgY29udGVzdG8iCisKKyM6IGdpdGs6MjM3NAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgIklnbm9yYSBtb2RpZmljaGUgYWdsaSBzcGF6aSIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MjQ0NQorbXNnaWQgIlBhdGNoIgorbXNnc3RyICJNb2RpZmljaGUiCisKKyM6IGdpdGs6MjQ0NworbXNnaWQgIlRyZWUiCittc2dzdHIgIkRpcmVjdG9yeSIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzNworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZiBxdWVzdG8gLT4gc2VsZXppb25hdG8iCisKKyM6IGdpdGs6MjYxOCBnaXRrOjI2MzgKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIkRpZmYgc2VsZXppb25hdG8gLT4gcXVlc3RvIgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjM5Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiQ3JlYSBwYXRjaCIKKworIzogZ2l0azoyNjIwIGdpdGs6OTI1NAorbXNnaWQgIkNyZWF0ZSB0YWciCittc2dzdHIgIkNyZWEgZXRpY2hldHRhIgorCisjOiBnaXRrOjI2MjEgZ2l0azo5MzcxCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgIlNjcml2aSByZXZpc2lvbmUgaW4gdW4gZmlsZSIKKworIzogZ2l0azoyNjIyIGdpdGs6OTQyOAorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJDcmVhIHVuIG51b3ZvIHJhbW8iCisKKyM6IGdpdGs6MjYyMworbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgorbXNnc3RyICJQb3J0YSBxdWVzdGEgcmV2aXNpb25lIGluIGNpbWEgYWwgcmFtbyBhdHR1YWxlIgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICJBZ2dpb3JuYSBpbCByYW1vIEhFQUQgYSBxdWVzdGEgcmV2aXNpb25lIgorCisjOiBnaXRrOjI2MjUKK21zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgorbXNnc3RyICJTZWduYSBxdWVzdGEgcmV2aXNpb25lIgorCisjOiBnaXRrOjI2MjYKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAiVG9ybmEgYWxsYSByZXZpc2lvbmUgc2VnbmF0YSIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIlRyb3ZhIGlsIGRpc2NlbmRlbnRlIGRpIHF1ZXN0YSByZXZpc2lvbmUgZSBkaSBxdWVsbGEgc2VnbmF0YSIKKworIzogZ2l0azoyNjI4Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIkNvbmZyb250YSBjb24gbGEgcmV2aXNpb25lIHNlZ25hdGEiCisKKyM6IGdpdGs6MjYyOSBnaXRrOjI2NDAKKyMsIGZ1enp5Cittc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCittc2dzdHIgIkRpZmYgcXVlc3RvIC0+IHNlbGV6aW9uYXRvIgorCisjOiBnaXRrOjI2MzAgZ2l0azoyNjQxCisjLCBmdXp6eQorbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgorbXNnc3RyICJEaWZmIHNlbGV6aW9uYXRvIC0+IHF1ZXN0byIKKworIzogZ2l0azoyNjMxCisjLCBmdXp6eQorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiU2VnbmEgcXVlc3RhIHJldmlzaW9uZSIKKworIzogZ2l0azoyNjQ3Cittc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgorbXNnc3RyICJBdHRpdmEgcXVlc3RvIHJhbW8iCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiRWxpbWluYSBxdWVzdG8gcmFtbyIKKworIzogZ2l0azoyNjQ5Cittc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjI2NTYKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIkV2aWRlbnppYSBhbmNoZSBxdWVzdG8iCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIkV2aWRlbnppYSBzb2xvIHF1ZXN0byIKKworIzogZ2l0azoyNjU4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiVmlzdWFsaXp6YSBkaWZmZXJlbnplIGluIHVuIGFsdHJvIHByb2dyYW1tYSIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAiQW5ub3RhIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlIgorCisjOiBnaXRrOjI2NjAKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjY3Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJNb3N0cmEgbGEgcHJvdmVuaWVuemEgZGkgcXVlc3RhIHJpZ2EiCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiRXNlZ3VpIGdpdCBndWkgYmxhbWUgc3UgcXVlc3RhIHJpZ2EiCisKKyM6IGdpdGs6MzAxNAorIywgZnV6enkKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0gdW4gdmlzdWFsaXp6YXRvcmUgZGkgcmV2aXNpb25pIHBlciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgXFx1MDBhOSAyMDA1LTIwMTAgUGF1bCBNYWNrZXJyYXNcbiIKKyJcbiIKKyJVdGlsaXp6byBlIHJlZGlzdHJpYnV6aW9uZSBwZXJtZXNzaSBzb3R0byBpIHRlcm1pbmkgZGVsbGEgR05VIEdlbmVyYWwgUHVibGljICIKKyJMaWNlbnNlIgorCisjOiBnaXRrOjMwMjIgZ2l0azozMDg5IGdpdGs6OTg1NworbXNnaWQgIkNsb3NlIgorbXNnc3RyICJDaGl1ZGkiCisKKyM6IGdpdGs6MzA0MworbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgorbXNnc3RyICJTY29yY2lhdG9pZSBkYSB0YXN0aWVyYSBkaSBHaXRrIgorCisjOiBnaXRrOjMwNDYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIlNjb3JjaWF0b2llIGRhIHRhc3RpZXJhIGRpIEdpdGs6IgorCisjOiBnaXRrOjMwNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdEVzY2kiCisKKyM6IGdpdGs6MzA0OQorIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtRj5cdFx0VHJvdmEiCisKKyM6IGdpdGs6MzA1MAorbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKK21zZ3N0ciAiPEhvbWU+XHRcdFZhaSBhbGxhIHByaW1hIHJldmlzaW9uZSIKKworIzogZ2l0azozMDUxCittc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKK21zZ3N0ciAiPEVuZD5cdFx0VmFpIGFsbCd1bHRpbWEgcmV2aXNpb25lIgorCisjOiBnaXRrOjMwNTIKKyMsIGZ1enp5Cittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8U3U+LCBwLCBpXHRWYWkgcGnDuSBpbiBhbHRvIGRpIHVuYSByZXZpc2lvbmUiCisKKyM6IGdpdGs6MzA1MworIywgZnV6enkKK21zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgorbXNnc3RyICI8R2nDuT4sIG4sIGtcdFZhaSBwacO5IGluIGJhc3NvIGRpIHVuYSByZXZpc2lvbmUiCisKKyM6IGdpdGs6MzA1NAorIywgZnV6enkKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8U2luaXN0cmE+LCB6LCBqXHRUb3JuYSBpbmRpZXRybyBuZWxsYSBjcm9ub2xvZ2lhIgorCisjOiBnaXRrOjMwNTUKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPERlc3RyYT4sIHgsIGxcdFZhaSBhdmFudGkgbmVsbGEgY3Jvbm9sb2dpYSIKKworIzogZ2l0azozMDU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIiIKKworIzogZ2l0azozMDU3Cittc2dpZCAiPFBhZ2VVcD5cdE1vdmUgdXAgb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdpbmFTdT5cdFZhaSBwacO5IGluIGFsdG8gZGkgdW5hIHBhZ2luYSBuZWxsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkiCisKKyM6IGdpdGs6MzA1OAorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiIgorIjxQYWdpbmFHacO5Plx0VmFpIHBpw7kgaW4gYmFzc28gZGkgdW5hIHBhZ2luYSBuZWxsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkiCisKKyM6IGdpdGs6MzA1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHRTY29ycmkgYWxsYSBjaW1hIGRlbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKKworIzogZ2l0azozMDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHRTY29ycmkgYWxsYSBmaW5lIGRlbGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSIKKworIzogZ2l0azozMDYxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtU3U+XHRTY29ycmkgbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIGluIGFsdG8gZGkgdW5hIHJpZ2EiCisKKyM6IGdpdGs6MzA2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCittc2dzdHIgIjwlcy1HacO5Plx0U2NvcnJpIGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSBpbiBiYXNzbyBkaSB1bmEgcmlnYSIKKworIzogZ2l0azozMDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2luYVN1Plx0U2NvcnJpIGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSBpbiBhbHRvIGRpIHVuYSBwYWdpbmEiCisKKyM6IGdpdGs6MzA2NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8JXMtUGFnaW5hR2nDuT5cdFNjb3JyaSBsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkgaW4gYmFzc28gZGkgdW5hIHBhZ2luYSIKKworIzogZ2l0azozMDY1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtU3U+XHRUcm92YSBhbGwnaW5kaWV0cm8gKHZlcnNvIGwnYWx0bywgcmV2aXNpb25pIHN1Y2Nlc3NpdmUpIgorCisjOiBnaXRrOjMwNjYKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LUdpw7k+XHRUcm92YSBpbiBhdmFudGkgKHZlcnNvIGlsIGJhc3NvLCByZXZpc2lvbmkgcHJlY2VkZW50aSkiCisKKyM6IGdpdGs6MzA2NworbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgaW4gYWx0byBkaSB1bmEgcGFnaW5hIgorCisjOiBnaXRrOjMwNjgKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJhY2tzcGFjZT5cdFNjb3JyaSBsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIGluIGFsdG8gZGkgdW5hIHBhZ2luYSIKKworIzogZ2l0azozMDY5Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxTcGF6aW8+XHRcdFNjb3JyaSBsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIGluIGJhc3NvIGRpIHVuYSBwYWdpbmEiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBpbiBhbHRvIGRpIDE4IGxpbmVlIgorCisjOiBnaXRrOjMwNzEKK21zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKK21zZ3N0ciAiZFx0XHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBpbiBiYXNzbyBkaSAxOCBsaW5lZSIKKworIzogZ2l0azozMDcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUY+XHRcdEZpbmQiCittc2dzdHIgIjwlcy1GPlx0XHRUcm92YSIKKworIzogZ2l0azozMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdFRyb3ZhIGluIGF2YW50aSIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPEludmlvPlx0VHJvdmEgaW4gYXZhbnRpIgorCisjOiBnaXRrOjMwNzUKKyMsIGZ1enp5Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdFZhaSBhbGwndWx0aW1hIHJldmlzaW9uZSIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRDdXJzb3JlIG5lbCBib3ggZGkgcmljZXJjYSIKKworIzogZ2l0azozMDc3Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdFRyb3ZhIGFsbCdpbmRpZXRybyIKKworIzogZ2l0azozMDc4Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBhbCBmaWxlIHN1Y2Nlc3Npdm8iCisKKyM6IGdpdGs6MzA3OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKK21zZ3N0ciAiPCVzLVM+XHRcdENlcmNhIGluIGF2YW50aSBuZWxsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0Q2VyY2EgYWxsJ2luZGlldHJvIG5lbGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUiCisKKyM6IGdpdGs6MzA4MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUCs+XHRBdW1lbnRhIGRpbWVuc2lvbmUgY2FyYXR0ZXJlIgorCisjOiBnaXRrOjMwODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBpw7k+XHRBdW1lbnRhIGRpbWVuc2lvbmUgY2FyYXR0ZXJlIgorCisjOiBnaXRrOjMwODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtS1AtPlx0RGltaW51aXNjaSBkaW1lbnNpb25lIGNhcmF0dGVyZSIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWVubz5cdERpbWludWlzY2kgZGltZW5zaW9uZSBjYXJhdHRlcmUiCisKKyM6IGdpdGs6MzA4NQorbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgorbXNnc3RyICI8RjU+XHRcdEFnZ2lvcm5hIgorCisjOiBnaXRrOjM1NTAgZ2l0azozNTU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgIkVycm9yZSBkdXJhbnRlIGxhIGNyZWF6aW9uZSBkZWxsYSBkaXJlY3RvcnkgdGVtcG9yYW5lYSAlczoiCisKKyM6IGdpdGs6MzU3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICJFcnJvcmUgbmVsbGEgbGV0dHVyYSBkaSBcIiVzXCIgZGEgJXM6IgorCisjOiBnaXRrOjM2MzUKK21zZ2lkICJjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNvbWFuZG86IgorCisjOiBnaXRrOjM3ODQKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiUmV2aXNpb25lIGluZXNpc3RlbnRlIgorCisjOiBnaXRrOjM3OTgKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWU6IGltcG9zc2liaWxlIGVzZWd1aXJlIGlsIGNvbWFuZG86IgorCisjOiBnaXRrOjM4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBsZWdnZXJlIG1lcmdlIGhlYWQ6ICVzIgorCisjOiBnaXRrOjM4MzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIGxldHR1cmEgZGVsbCdpbmRpY2U6ICVzIgorCisjOiBnaXRrOjM4NjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBzdGFydCBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM4NjUgZ2l0azo2NzU0Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICJSaWNlcmNhIGluIGNvcnNvIgorCisjOiBnaXRrOjM4OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgIkVycm9yZSBuZWxsJ2VzZWN1emlvbmUgZGkgZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozOTI1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKK21zZ3N0ciAiUXVlbGxhIHJpZ2EgcHJvdmllbmUgZGFsbGEgcmV2aXNpb25lICVzLCBub24gcHJlc2VudGUgaW4gcXVlc3RhIHZpc3RhIgorCisjOiBnaXRrOjM5MzkKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCB2aXN1YWxpenphdG9yZSBkaSBkaWZmZXJlbnplOiIKKworIzogZ2l0azo0MDcwCittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIlNjZWx0YSB2aXN0YSBHaXRrIgorCisjOiBnaXRrOjQwNzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlJpY29yZGEgcXVlc3RhIHZpc3RhIgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJSaWZlcmltZW50aSAobGlzdGEgZGkgZWxlbWVudGkgc2VwYXJhdGkgZGEgc3BhemkpIgorCisjOiBnaXRrOjQwNzYKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJSYW1pIGVkIGV0aWNoZXR0ZSIKKworIzogZ2l0azo0MDc3Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIlR1dHRpIGkgcmlmZXJpbWVudGkiCisKKyM6IGdpdGs6NDA3OAorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICJUdXR0aSBpIHJhbWkgKGxvY2FsaSkiCisKKyM6IGdpdGs6NDA3OQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJUdXR0ZSBsZSBldGljaGV0dGUiCisKKyM6IGdpdGs6NDA4MAorbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIlR1dHRpIGkgcmFtaSByZW1vdGkiCisKKyM6IGdpdGs6NDA4MQorbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCittc2dzdHIgIkluZm9ybWF6aW9uaSBzdWxsYSByZXZpc2lvbmUgKGVzcHJlc3Npb25pIHJlZ29sYXJpKToiCisKKyM6IGdpdGs6NDA4MgorbXNnaWQgIkF1dGhvcjoiCittc2dzdHIgIkF1dG9yZToiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIlJldmlzaW9uZSBjcmVhdGEgZGE6IgorCisjOiBnaXRrOjQwODQKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2dpbyBkaSByZXZpc2lvbmU6IgorCisjOiBnaXRrOjQwODUKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiUmlzcG9uZGUgYSB0dXR0aSBpIGNyaXRlcmkgZGkgcmljZXJjYSBzdWxsZSByZXZpc2lvbmkiCisKKyM6IGdpdGs6NDA4NgorIywgZnV6enkKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJSaXNwb25kZSBhIHR1dHRpIGkgY3JpdGVyaSBkaSByaWNlcmNhIHN1bGxlIHJldmlzaW9uaSIKKworIzogZ2l0azo0MDg3Cittc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCittc2dzdHIgIk1vZGlmaWNoZSBhaSBmaWxlOiIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICJTdHJpbmdhIGZpc3NhIgorCisjOiBnaXRrOjQwODkKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIkVzcHJlc3Npb25lIHJlZ29sYXJlIgorCisjOiBnaXRrOjQwOTAKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiQ2VyY2Egc3RyaW5nYToiCisKKyM6IGdpdGs6NDA5MQorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiIgorIkRhdGUgZGkgcmV2aXNpb25lIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAiCisiMjAwOSAxNToyNzozOFwiKToiCisKKyM6IGdpdGs6NDA5MgorbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAiRGE6IgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIkE6IgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAiTGltaXRhIGUvbyBzYWx0YSBOIHJldmlzaW9uaSAoaW50ZXJvIHBvc2l0aXZvKToiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiTnVtZXJvIGRpIHJldmlzaW9uaSBkYSBtb3N0cmFyZToiCisKKyM6IGdpdGs6NDA5NgorbXNnaWQgIk51bWJlciB0byBza2lwOiIKK21zZ3N0ciAiTnVtZXJvIGRpIHJldmlzaW9uaSBkYSBzYWx0YXJlOiIKKworIzogZ2l0azo0MDk3Cittc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKK21zZ3N0ciAiQWx0cmUgb3B6aW9uaToiCisKKyM6IGdpdGs6NDA5OAorbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKK21zZ3N0ciAiT3JkaW5hIHNvbG8gcGVyIGRhdGEiCisKKyM6IGdpdGs6NDA5OQorbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgorbXNnc3RyICJTZWduYSBpIGxhdGkgZGVsIHJhbW8iCisKKyM6IGdpdGs6NDEwMAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiTGltaXRhIGFsIHByaW1vIGdlbml0b3JlIgorCisjOiBnaXRrOjQxMDEKK21zZ2lkICJTaW1wbGUgaGlzdG9yeSIKK21zZ3N0ciAiQ3Jvbm9sb2dpYSBzZW1wbGlmaWNhdGEiCisKKyM6IGdpdGs6NDEwMgorbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgorbXNnc3RyICJVbHRlcmlvcmkgYXJnb21lbnRpIGRhIHBhc3NhcmUgYSBnaXQgbG9nOiIKKworIzogZ2l0azo0MTAzCittc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCittc2dzdHIgIkluc2VyaXJlIGZpbGUgZSBkaXJlY3RvcnkgZGEgaW5jbHVkZXJlLCB1bm8gcGVyIHJpZ2E6IgorCisjOiBnaXRrOjQxMDQKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiQ29tYW5kbyBjaGUgZ2VuZXJhIGFsdHJlIHJldmlzaW9uaSBkYSB2aXN1YWxpenphcmU6IgorCisjOiBnaXRrOjQyMjgKK21zZ2lkICJHaXRrOiBlZGl0IHZpZXciCittc2dzdHIgIkdpdGs6IG1vZGlmaWNhIHZpc3RhIgorCisjOiBnaXRrOjQyMzYKK21zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKK21zZ3N0ciAiLS0gY3JpdGVyaSBwZXIgbGEgc2NlbHRhIGRlbGxlIHJldmlzaW9uaSIKKworIzogZ2l0azo0MjQxCittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJOb21lIHZpc3RhIgorCisjOiBnaXRrOjQzMTYKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICJBcHBsaWNhIChGNSkiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiRXJyb3JlIG5lZ2xpIGFyZ29tZW50aSBkaSBzZWxlemlvbmUgZGVsbGUgcmV2aXNpb25pOiIKKworIzogZ2l0azo0NDA5IGdpdGs6NDQ2MiBnaXRrOjQ5MjQgZ2l0azo0OTM4IGdpdGs6NjIwOCBnaXRrOjEyMzczIGdpdGs6MTIzNzQKK21zZ2lkICJOb25lIgorbXNnc3RyICJOZXNzdW5vIgorCisjOiBnaXRrOjUwMjEgZ2l0azo1MDI2Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAiRGlzY2VuZGVudGUiCisKKyM6IGdpdGs6NTAyMgorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICJOb24gZGlzY2VuZGVudGUiCisKKyM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiQXNjZW5kZW50ZSIKKworIzogZ2l0azo1MDMwCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJOb24gYXNjZW5kZW50ZSIKKworIzogZ2l0azo1MzI0Cittc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgorbXNnc3RyICJNb2RpZmljaGUgbG9jYWxpIHByZXNlbnRpIG5lbGwnaW5kaWNlIG1hIG5vbiBuZWxsJ2FyY2hpdmlvIgorCisjOiBnaXRrOjUzNjAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiTW9kaWZpY2hlIGxvY2FsaSBub24gcHJlc2VudGkgbsOpIG5lbGwnYXJjaGl2aW8gbsOpIG5lbGwnaW5kaWNlIgorCisjOiBnaXRrOjcxMzQKK21zZ2lkICJhbmQgbWFueSBtb3JlIgorbXNnc3RyICIiCisKKyM6IGdpdGs6NzEzNworbXNnaWQgIm1hbnkiCittc2dzdHIgIm1vbHRpIgorCisjOiBnaXRrOjczMjgKK21zZ2lkICJUYWdzOiIKK21zZ3N0ciAiRXRpY2hldHRlOiIKKworIzogZ2l0azo3MzQ1IGdpdGs6NzM1MSBnaXRrOjg4MjUKK21zZ2lkICJQYXJlbnQiCittc2dzdHIgIkdlbml0b3JlIgorCisjOiBnaXRrOjczNTYKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAiRmlnbGlvIgorCisjOiBnaXRrOjczNjUKK21zZ2lkICJCcmFuY2giCittc2dzdHIgIlJhbW8iCisKKyM6IGdpdGs6NzM2OAorbXNnaWQgIkZvbGxvd3MiCittc2dzdHIgIlNlZ3VlIgorCisjOiBnaXRrOjczNzEKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiUHJlY2VkZSIKKworIzogZ2l0azo3OTY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGxlIGRpZmZlcmVuemU6IgorCisjOiBnaXRrOjg2NTAKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiVmFpIGE6IgorCisjOiBnaXRrOjg2NzEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKK21zZ3N0ciAiTGEgU0hBMSBpZCBhYmJyZXZpYXRhICVzIMOoIGFtYmlndWEiCisKKyM6IGdpdGs6ODY3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiTGEgcmV2aXNpb25lICVzIMOoIHNjb25vc2NpdXRhIgorCisjOiBnaXRrOjg2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiTGEgU0hBMSBpZCAlcyDDqCBzY29ub3NjaXV0YSIKKworIzogZ2l0azo4NjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIkxhIHJldmlzaW9uZSAlcyBub24gw6ggcHJlc2VudGUgbmVsbGEgdmlzdGEgYXR0dWFsZSIKKworIzogZ2l0azo4ODMyIGdpdGs6ODg0NworbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdGEiCisKKyM6IGdpdGs6ODgzNQorbXNnaWQgIkNoaWxkcmVuIgorbXNnc3RyICJGaWdsaSIKKworIzogZ2l0azo4ODk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIkFnZ2lvcm5hIGlsIHJhbW8gJXMgYSBxdWVzdGEgcmV2aXNpb25lIgorCisjOiBnaXRrOjg5MDAKK21zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKK21zZ3N0ciAiTmVzc3VuIHJhbW8gYXR0aXZvOiByZXNldCBpbXBvc3NpYmlsZSIKKworIzogZ2l0azo5MDA1IGdpdGs6OTAxMQorbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCittc2dzdHIgIlNhbHRvIGxhIHJldmlzaW9uZSBkaSBmdXNpb25lICIKKworIzogZ2l0azo5MDIwIGdpdGs6OTAyNQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIGlkZW50aWZpY2F6aW9uZSBkZWxsYSBwYXRjaCBwZXIgIgorCisjOiBnaXRrOjkwMjEgZ2l0azo5MDI2Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIC0gZmluZVxuIgorCisjOiBnaXRrOjkwMzEgZ2l0azo5MDM0IGdpdGs6OTA0MiBnaXRrOjkwNTYgZ2l0azo5MDY1Cittc2dpZCAiQ29tbWl0ICIKK21zZ3N0ciAiTGEgcmV2aXNpb25lICIKKworIzogZ2l0azo5MDM1Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgaGEgbGUgc3Rlc3NlIGRpZmZlcmVuemUgZGlcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDMKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgw6ggZGl2ZXJzYSBkYVxuIgorIiAgICAgICAiCisKKyM6IGdpdGs6OTA0NQorbXNnaWQgIiIKKyJEaWZmIG9mIGNvbW1pdHM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJEaWZmZXJlbnplIHRyYSBsZSByZXZpc2lvbmk6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIGhhICVzIGZpZ2xpIC0gZmluZVxuIgorCisjOiBnaXRrOjkwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIHNjcml0dHVyYSBkZWxsYSByZXZpc2lvbmUgbmVsIGZpbGU6ICVzIgorCisjOiBnaXRrOjkwOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJFcnJvcmUgbmVsbGUgZGlmZmVyZW56ZSB0cmEgbGUgcmV2aXNpb25pOiAlcyIKKworIzogZ2l0azo5MTM3Cittc2dpZCAiVG9wIgorbXNnc3RyICJJbml6aW8iCisKKyM6IGdpdGs6OTEzOAorbXNnaWQgIkZyb20iCittc2dzdHIgIkRhIgorCisjOiBnaXRrOjkxNDMKK21zZ2lkICJUbyIKK21zZ3N0ciAiQSIKKworIzogZ2l0azo5MTY3Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgIkdlbmVyYSBwYXRjaCIKKworIzogZ2l0azo5MTY5Cittc2dpZCAiRnJvbToiCittc2dzdHIgIkRhOiIKKworIzogZ2l0azo5MTc4Cittc2dpZCAiVG86IgorbXNnc3RyICJBOiIKKworIzogZ2l0azo5MTg3Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiSW52ZXJ0aSIKKworIzogZ2l0azo5MTg5IGdpdGs6OTM4NQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiU2NyaXZpIHN1bCBmaWxlOiIKKworIzogZ2l0azo5MTk1Cittc2dpZCAiR2VuZXJhdGUiCittc2dzdHIgIkdlbmVyYSIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJFcnJvcmUgbmVsbGEgY3JlYXppb25lIGRlbGxhIHBhdGNoOiIKKworIzogZ2l0azo5MjU2IGdpdGs6OTM3MyBnaXRrOjk0MzAKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo5MjY1Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICJOb21lIGV0aWNoZXR0YToiCisKKyM6IGdpdGs6OTI2OAorbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICJJbCBtZXNzYWdnaW8gZGVsbCdldGljaGV0dGEgw6ggb3B6aW9uYWxlIgorCisjOiBnaXRrOjkyNzAKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIk1lc3NhZ2dpbyBkZWxsJ2V0aWNoZXR0YToiCisKKyM6IGdpdGs6OTI3NCBnaXRrOjk0MzkKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIkNyZWEiCisKKyM6IGdpdGs6OTI5MgorbXNnaWQgIk5vIHRhZyBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiTmVzc3VuYSBldGljaGV0dGEgc3BlY2lmaWNhdGEiCisKKyM6IGdpdGs6OTI5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIkwnZXRpY2hldHRhIFwiJXNcIiBlc2lzdGUgZ2nDoCIKKworIzogZ2l0azo5MzA2Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKK21zZ3N0ciAiRXJyb3JlIG5lbGxhIGNyZWF6aW9uZSBkZWxsJ2V0aWNoZXR0YToiCisKKyM6IGdpdGs6OTM4MgorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJDb21hbmRvOiIKKworIzogZ2l0azo5MzkwCittc2dpZCAiV3JpdGUiCittc2dzdHIgIlNjcml2aSIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJFcnJvcmUgbmVsbGEgc2NyaXR0dXJhIGRlbGxhIHJldmlzaW9uZToiCisKKyM6IGdpdGs6OTQzNQorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOb21lOiIKKworIzogZ2l0azo5NDU4Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiU3BlY2lmaWNhcmUgdW4gbm9tZSBwZXIgaWwgbnVvdm8gcmFtbyIKKworIzogZ2l0azo5NDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCittc2dzdHIgIklsIHJhbW8gJyVzJyBlc2lzdGUgZ2nDoC4gU292cmFzY3JpdmVyZT8iCisKKyM6IGdpdGs6OTUzMAorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgorbXNnc3RyICJMYSByZXZpc2lvbmUgJXMgw6ggZ2nDoCBpbmNsdXNhIG5lbCByYW1vICVzIC0tIGFwcGxpY2FybGEgZGkgbnVvdm8/IgorCisjOiBnaXRrOjk1MzUKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjk1NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgY2hlcnJ5LXBpY2sgcGVyY2jDqSBpbCBmaWxlICclcycgw6ggc3RhdG8gbW9kaWZpY2F0byAiCisibmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9yby5cbiIKKyJQcmltYSBkaSByaXByb3ZhcmUsIGJpc29nbmEgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUsIGFubnVsbGFyZSBsZSAiCisibW9kaWZpY2hlIG8gdXNhcmUgJ2dpdCBzdGFzaCcuIgorCisjOiBnaXRrOjk1NTAKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBjaGVycnktcGljayBhIGNhdXNhIGRpIHVuIGNvbmZsaXR0byBuZWxsYSBmdXNpb25lLlxuIgorIlZ1b2kgYXZ2aWFyZSBnaXQgY2l0b29sIHBlciByaXNvbHZlcmxvPyIKKworIzogZ2l0azo5NTY2IGdpdGs6OTYyNAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhIGFyY2hpdmlhdGEiCisKKyM6IGdpdGs6OTU5MworIywgZnV6enksIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAiTGEgcmV2aXNpb25lICVzIMOoIGdpw6AgaW5jbHVzYSBuZWwgcmFtbyAlcyAtLSBhcHBsaWNhcmxhIGRpIG51b3ZvPyIKKworIzogZ2l0azo5NTk4CisjLCBmdXp6eQorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAiZ2l0IHJlc2V0IGluIGNvcnNvIgorCisjOiBnaXRrOjk2MDYKKyMsIGZ1enp5LCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmlsZSBlc2VndWlyZSBjaGVycnktcGljayBwZXJjaMOpIGlsIGZpbGUgJyVzJyDDqCBzdGF0byBtb2RpZmljYXRvICIKKyJuZWxsYSBkaXJlY3RvcnkgZGkgbGF2b3JvLlxuIgorIlByaW1hIGRpIHJpcHJvdmFyZSwgYmlzb2duYSBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZSwgYW5udWxsYXJlIGxlICIKKyJtb2RpZmljaGUgbyB1c2FyZSAnZ2l0IHN0YXNoJy4iCisKKyM6IGdpdGs6OTYxMAorIywgZnV6enkKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGVzZWd1aXJlIGNoZXJyeS1waWNrIGEgY2F1c2EgZGkgdW4gY29uZmxpdHRvIG5lbGxhIGZ1c2lvbmUuXG4iCisiVnVvaSBhdnZpYXJlIGdpdCBjaXRvb2wgcGVyIHJpc29sdmVybG8/IgorCisjOiBnaXRrOjk2NTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJDb25mZXJtYSBnaXQgcmVzZXQiCisKKyM6IGdpdGs6OTY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIkFnZ2lvcm5hcmUgaWwgcmFtbyAlcyBhICVzPyIKKworIzogZ2l0azo5NjU3Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIlRpcG8gZGkgYWdnaW9ybmFtZW50bzoiCisKKyM6IGdpdGs6OTY2MAorbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgorbXNnc3RyICJTb2Z0OiBMYXNjaWEgbGEgZGlyZWNvcnkgZGkgbGF2b3JvIGUgbCdpbmRpY2UgY29tZSBzb25vIgorCisjOiBnaXRrOjk2NjMKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgIk1peGVkOiBMYXNjaWEgbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyBjb21lIMOoLCBhZ2dpb3JuYSBsJ2luZGljZSIKKworIzogZ2l0azo5NjY2Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJIYXJkOiBBZ2dpb3JuYSBsYSBkaXJlY3RvcnkgZGkgbGF2b3JvIGUgbCdpbmRpY2VcbiIKKyIoYWJiYW5kb25hIFRVVFRFIGxlIG1vZGlmaWNoZSBsb2NhbGkpIgorCisjOiBnaXRrOjk2ODMKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgImdpdCByZXNldCBpbiBjb3JzbyIKKworIzogZ2l0azo5NzQzCittc2dpZCAiQ2hlY2tpbmcgb3V0IgorbXNnc3RyICJBdHRpdmF6aW9uZSBpbiBjb3JzbyIKKworIzogZ2l0azo5Nzk2Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY2FuY2VsbGFyZSBpbCByYW1vIGF0dHVhbG1lbnRlIGF0dGl2byIKKworIzogZ2l0azo5ODAyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKKyJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCittc2dzdHIgIiIKKyJMZSByZXZpc2lvbmkgbmVsIHJhbW8gJXMgbm9uIHNvbm8gcHJlc2VudGkgc3UgYWx0cmkgcmFtaS5cbiIKKyJDYW5jZWxsYXJlIGlsIHJhbW8gJXM/IgorCisjOiBnaXRrOjk4MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIkV0aWNoZXR0ZSBlIHJhbWk6ICVzIgorCisjOiBnaXRrOjk4NTAKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRybyIKKworIzogZ2l0azoxMDE0NgorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGxhIHRvcG9sb2dpYSBkZWxsZSByZXZpc2lvbmk6IGxlIGluZm9ybWF6aW9uaSBzdWwgIgorInJhbW8gZSBsZSBldGljaGV0dGUgcHJlY2VkZW50aSBlIHNlZ3VlbnRpIHNhcmFubm8gaW5jb21wbGV0ZS4iCisKKyM6IGdpdGs6MTExMjMKK21zZ2lkICJUYWciCittc2dzdHIgIkV0aWNoZXR0YSIKKworIzogZ2l0azoxMTEyNworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMTIxMAorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICJTY2VsdGEgY2FyYXR0ZXJpIGdpdGsiCisKKyM6IGdpdGs6MTEyMjcKK21zZ2lkICJCIgorbXNnc3RyICJCIgorCisjOiBnaXRrOjExMjMwCittc2dpZCAiSSIKK21zZ3N0ciAiSSIKKworIzogZ2l0azoxMTM0OAorbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSB2aXN1YWxpenphemlvbmUgZGVsbCdlbGVuY28gcmV2aXNpb25pIgorCisjOiBnaXRrOjExMzUxCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJMYXJnaGV6emEgbWFzc2ltYSBkZWwgZ3JhZmljbyAoaW4gbGluZWUpIgorCisjOiBnaXRrOjExMzU1CisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAiTGFyZ2hlenphIG1hc3NpbWEgZGVsIGdyYWZpY28gKCUgZGVsIHBhbm5lbGxvKSIKKworIzogZ2l0azoxMTM1OAorbXNnaWQgIlNob3cgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiTW9zdHJhIG1vZGlmaWNoZSBsb2NhbGkiCisKKyM6IGdpdGs6MTEzNjEKKyMsIGZ1enp5Cittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiU2VsZXppb25hIGF1dG9tYXRpY2FtZW50ZSBTSEExIGhhc2giCisKKyM6IGdpdGs6MTEzNjUKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICJOYXNjb25kaSBpIHJpZmVyaW1lbnRpIHJlbW90aSIKKworIzogZ2l0azoxMTM2OQorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJPcHppb25pIGRpIHZpc3VhbGl6emF6aW9uZSBkZWxsZSBkaWZmZXJlbnplIgorCisjOiBnaXRrOjExMzcxCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIlNwYXppYXR1cmEgdGFidWxhemlvbmkiCisKKyM6IGdpdGs6MTEzNzQKKyMsIGZ1enp5Cittc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKK21zZ3N0ciAiTW9zdHJhIGV0aWNoZXR0ZSB2aWNpbmUiCisKKyM6IGdpdGs6MTEzNzcKK21zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTEzODAKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIkxpbWl0YSBsZSBkaWZmZXJlbnplIGFpIHBlcmNvcnNpIGVsZW5jYXRpIgorCisjOiBnaXRrOjExMzgzCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgIkF0dGl2YSBjb2RpZmljYSBmaWxlIHBlciBmaWxlIgorCisjOiBnaXRrOjExMzg5IGdpdGs6MTE1MzYKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCittc2dzdHIgIlZpc3VhbGl6emF0b3JlIGRpIGRpZmZlcmVuemUiCisKKyM6IGdpdGs6MTEzOTAKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIlNjZWdsaS4uLiIKKworIzogZ2l0azoxMTM5NQorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiT3B6aW9uaSBnZW5lcmFsaSIKKworIzogZ2l0azoxMTM5OAorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiVXRpbGl6emEgaW50ZXJmYWNjaWEgYSB0ZW1hIgorCisjOiBnaXRrOjExNDAwCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKHVuYSBtb2RpZmljYSByaWNoaWVkZSBpbCByaWF2dmlvKSIKKworIzogZ2l0azoxMTQwMgorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIobW9tZW50YW5lYW1lbnRlIG5vbiBkaXNwb25pYmlsZSkiCisKKyM6IGdpdGs6MTE0MTMKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiQ29sb3JpOiBwcmVtZXJlIHBlciBzY2VnbGllcmUiCisKKyM6IGdpdGs6MTE0MTYKK21zZ2lkICJJbnRlcmZhY2UiCittc2dzdHIgIkludGVyZmFjY2lhIgorCisjOiBnaXRrOjExNDE3Cittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICJpbnRlcmZhY2NpYSIKKworIzogZ2l0azoxMTQyMAorbXNnaWQgIkJhY2tncm91bmQiCittc2dzdHIgIlNmb25kbyIKKworIzogZ2l0azoxMTQyMSBnaXRrOjExNDUxCittc2dpZCAiYmFja2dyb3VuZCIKK21zZ3N0ciAic2ZvbmRvIgorCisjOiBnaXRrOjExNDI0Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiUHJpbW8gcGlhbm8iCisKKyM6IGdpdGs6MTE0MjUKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICJwcmltbyBwaWFubyIKKworIzogZ2l0azoxMTQyOAorbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKK21zZ3N0ciAiRGlmZjogdmVjY2hpZSBsaW5lZSIKKworIzogZ2l0azoxMTQyOQorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJ2ZWNjaGllIGxpbmVlIgorCisjOiBnaXRrOjExNDMzCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmOiBudW92ZSBsaW5lZSIKKworIzogZ2l0azoxMTQzNAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJudW92ZSBsaW5lZSIKKworIzogZ2l0azoxMTQzOAorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICJEaWZmOiBpbnRlc3RhemlvbmUgZGVsbGEgc2V6aW9uZSIKKworIzogZ2l0azoxMTQ0MAorbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCittc2dzdHIgImludGVzdGF6aW9uZSBkZWxsYSBzZXppb25lIgorCisjOiBnaXRrOjExNDQ0Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIlNmb25kbyByaWdhIHNlbGV6aW9uYXRhIgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAic2ZvbmRvIHJpZ2Egc2VsZXppb25hdGEiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgIlNmb25kbyIKKworIzogZ2l0azoxMTQ1OQorbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkNhcmF0dGVyZTogcHJlbWVyZSBwZXIgc2NlZ2xpZXJlIgorCisjOiBnaXRrOjExNDYxCittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJDYXJhdHRlcmUgcHJpbmNpcGFsZSIKKworIzogZ2l0azoxMTQ2MgorbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgorbXNnc3RyICJDYXJhdHRlcmUgcGVyIGRpZmZlcmVuemUiCisKKyM6IGdpdGs6MTE0NjMKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJDYXJhdHRlcmUgcGVyIGludGVyZmFjY2lhIHV0ZW50ZSIKKworIzogZ2l0azoxMTQ4NQorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIlByZWZlcmVuemUgZ2l0ayIKKworIzogZ2l0azoxMTQ5NAorIywgZnV6enkKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICJHZW5lcmEiCisKKyM6IGdpdGs6MTE0OTUKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIiIKKworIzogZ2l0azoxMTQ5NgorbXNnaWQgIkZvbnRzIgorbXNnc3RyICIiCisKKyM6IGdpdGs6MTE1NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiBzY2VnbGllcmUgdW4gY29sb3JlIHBlciAlcyIKKworIzogZ2l0azoxMjA1OQorbXNnaWQgIiIKKyJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKKyIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjEyMjY5Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiQXJjaGl2aW8gZ2l0IG5vbiB0cm92YXRvLiIKKworIzogZ2l0azoxMjMxNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAiQXJnb21lbnRvIGFtYmlndW86ICclcycgw6ggc2lhIHJldmlzaW9uZSBjaGUgbm9tZSBkaSBmaWxlIgorCisjOiBnaXRrOjEyMzI4Cittc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKK21zZ3N0ciAiR2l0azogYXJnb21lbnRpIGVycmF0aToiCisKKyN+IG1zZ2lkICJuZXh0IgorI34gbXNnc3RyICJzdWNjIgorCisjfiBtc2dpZCAicHJldiIKKyN+IG1zZ3N0ciAicHJlYyIKKworI34gbXNnaWQgIkNhbm5vdCBmaW5kIHRoZSBnaXQgZGlyZWN0b3J5IFwiJXNcIi4iCisjfiBtc2dzdHIgIkRpcmVjdG9yeSBnaXQgXCIlc1wiIG5vbiB0cm92YXRhLiIKZGlmZiAtLWdpdCBhL3BvL2phLnBvIGIvZ2l0ay1naXQvcG8vamEucG8Kc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHBvL2phLnBvCnJlbmFtZSB0byBnaXRrLWdpdC9wby9qYS5wbwpkaWZmIC0tZ2l0IGEvcG8vcG8ybXNnLnNoIGIvZ2l0ay1naXQvcG8vcG8ybXNnLnNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBwby9wbzJtc2cuc2gKcmVuYW1lIHRvIGdpdGstZ2l0L3BvL3BvMm1zZy5zaApkaWZmIC0tZ2l0IGEvcG8vcHRfYnIucG8gYi9naXRrLWdpdC9wby9wdF9ici5wbwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gcG8vcHRfYnIucG8KcmVuYW1lIHRvIGdpdGstZ2l0L3BvL3B0X2JyLnBvCmRpZmYgLS1naXQgYS9naXRrLWdpdC9wby9ydS5wbyBiL2dpdGstZ2l0L3BvL3J1LnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWQwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9naXRrLWdpdC9wby9ydS5wbwpAQCAtMCwwICsxLDEzMjkgQEAKKyMgVHJhbnNsYXRpb24gb2YgZ2l0ayB0byBSdXNzaWFuLgorIworIyBUcmFuc2xhdG9yczoKKyMgMHhBWCA8a3VsZXNob3ZtYWlsQGdtYWlsLmNvbT4sIDIwMTQKKyMgQWxleCBSaWVzZW4gPHJhYS5sa21sQGdtYWlsLmNvbT4sIDIwMTUKKyMgRGltaXRyaXkgUnlhemFudGNldiA8REptMDBuQG1haWwucnU+LCAyMDE1CisjIERtaXRyeSBQb3RhcG92IDxkcG90YXBvdkBnbWFpbC5jb20+LCAyMDA5CisjIFNraXAgPGJzdnNraXBAcmFtYmxlci5ydT4sIDIwMTEKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdpdCBSdXNzaWFuIExvY2FsaXphdGlvbiBQcm9qZWN0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTEwLTEyIDEwOjE0KzAwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IERpbWl0cml5IFJ5YXphbnRjZXYgPERKbTAwbkBtYWlsLnJ1PlxuIgorIkxhbmd1YWdlLVRlYW06IFJ1c3NpYW4gKGh0dHA6Ly93d3cudHJhbnNpZmV4LmNvbS9kam0wMG4vZ2l0LXBvLXJ1L2xhbmd1YWdlL3J1LylcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJMYW5ndWFnZTogcnVcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTQ7IHBsdXJhbD0obiUxMD09MSAmJiBuJTEwMCE9MTEgPyAwIDogbiUxMD49MiAmJiBuJTEwPD00ICYmIChuJTEwMDwxMiB8fCBuJTEwMD4xNCkgPyAxIDogbiUxMD09MCB8fCAobiUxMD49NSAmJiBuJTEwPD05KSB8fCAobiUxMDA+PTExICYmIG4lMTAwPD0xNCk/IDIgOiAzKTtcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgItCd0LXQstC+0LfQvNC+0LbQvdC+INC/0L7Qu9GD0YfQuNGC0Ywg0YHQv9C40YHQvtC6INGE0LDQudC70L7QsiDQvdC10LfQsNCy0LXRgNGI0ZHQvdC90L7QuSDQvtC/0LXRgNCw0YbQuNC4INGB0LvQuNGP0L3QuNGPOiIKKworIzogZ2l0azoyMTIgZ2l0azoyMzgxCittc2dpZCAiQ29sb3Igd29yZHMiCittc2dzdHIgItCm0LLQtdGC0L3Ri9C1INGB0LvQvtCy0LAiCisKKyM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjAgZ2l0azo4MjUzCittc2dpZCAiTWFya3VwIHdvcmRzIgorbXNnc3RyICLQn9C+0LzQtdGH0LXQvdGL0LUg0YHQu9C+0LLQsCIKKworIzogZ2l0azozMjQKK21zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQv9GA0Lgg0YDQsNC30LHQvtGA0LUg0YDQtdC00LDQutGG0LjQuDoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPINC60L7QvNCw0L3QtNGLINC30LDQtNCw0L3QvdC+0LkgLS1hcmdzY21kOiIKKworIzogZ2l0azozOTMKK21zZ2lkICJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIGZpbGVzIGFyZSB1bm1lcmdlZC4iCittc2dzdHIgItCk0LDQudC70Ysg0L3QtSDQstGL0LHRgNCw0L3Rizog0YPQutCw0LfQsNC9IC0tbWVyZ2UsINC90L4g0L3QtSDQsdGL0LvQviDQvdCw0LnQtNC10L3QviDQvdC4INC+0LTQvdC+0LPQviDRhNCw0LnQu9CwINCz0LTQtSDRjdGC0LAg0L7Qv9C10YDQsNGG0LjRjyDQtNC+0LvQttC90LAg0LHRi9GC0Ywg0LfQsNCy0LXRgNGI0LXQvdCwLiIKKworIzogZ2l0azozOTYKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAi0KTQsNC50LvRiyDQvdC1INCy0YvQsdGA0LDQvdGLOiDRg9C60LDQt9Cw0L0gLS1tZXJnZSwg0L3QviDQsiDRgNCw0LzQutCw0YUg0YPQutCw0LfQsNC90L3QvtCz0L4g0L7Qs9GA0LDQvdC40YfQtdC90LjRjyDQvdCwINC40LzQtdC90LAg0YTQsNC50LvQvtCyINC90LXRgiDQvdC4INC+0LTQvdC+0LPQviDQs9C00LUg0Y3RgtCwINC+0L/QtdGA0LDRhtC40Y8g0LTQvtC70LbQvdCwINCx0YvRgtGMINC30LDQstC10YDRiNC10L3QsC4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0LfQsNC/0YPRgdC60LAgZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAi0KfRgtC10L3QuNC1IgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgItCn0YLQtdC90LjQtSDQutC+0LzQvNC40YLQvtCyLi4uIgorCisjOiBnaXRrOjQ5OSBnaXRrOjE2MzcgZ2l0azo0NTI4Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAi0J3QuNGH0LXQs9C+INC90LUg0LLRi9Cx0YDQsNC90L4iCisKKyM6IGdpdGs6MTQ0NSBnaXRrOjQwNDUgZ2l0azoxMjQzMgorbXNnaWQgIkNvbW1hbmQgbGluZSIKK21zZ3N0ciAi0JrQvtC80LDQvdC00L3QsNGPINGB0YLRgNC+0LrQsCIKKworIzogZ2l0azoxNTExCittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0L7QsdGA0LDQsdC+0YLQutC4INCy0YvQstC+0LTQsCDQutC+0LzQsNC90LTRiyBnaXQgbG9nOiIKKworIzogZ2l0azoxNzQwCittc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKK21zZ3N0ciAi0J3QtdGCINC40L3RhNC+0YDQvNCw0YbQuNC4INC+INC60L7QvNC80LjRgtC1IgorCisjOiBnaXRrOjE5MDMgZ2l0azoxOTMyIGdpdGs6NDMxNSBnaXRrOjk2NjkgZ2l0azoxMTI0MSBnaXRrOjExNTIxCittc2dpZCAiT0siCittc2dzdHIgIk9rIgorCisjOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKKyM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgorbXNnaWQgIkNhbmNlbCIKK21zZ3N0ciAi0J7RgtC80LXQvdCwIgorCisjOiBnaXRrOjIwNjkKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICLQntCx0L3QvtCy0LjRgtGMIgorCisjOiBnaXRrOjIwNzAKK21zZ2lkICImUmVsb2FkIgorbXNnc3RyICLQn9C10YDQtdGH0LjRgtCw0YLRjCIKKworIzogZ2l0azoyMDcxCittc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgorbXNnc3RyICLQntCx0L3QvtCy0LjRgtGMINGB0L/QuNGB0L7QuiDRgdGB0YvQu9C+0LoiCisKKyM6IGdpdGs6MjA3MgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgItCh0L/QuNGB0L7QuiDRgdGB0YvQu9C+0LoiCisKKyM6IGdpdGs6MjA3NAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICLQl9Cw0L/Rg9GB0YLQuNGC0YwgZ2l0IGd1aSIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgItCX0LDQstC10YDRiNC40YLRjCIKKworIzogZ2l0azoyMDY4Cittc2dpZCAiJkZpbGUiCittc2dzdHIgItCk0LDQudC7IgorCisjOiBnaXRrOjIwODAKK21zZ2lkICImUHJlZmVyZW5jZXMiCittc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgItCd0L7QstC+0LUg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUuLi4iCisKKyM6IGdpdGs6MjA4NQorbXNnaWQgIiZFZGl0IHZpZXcuLi4iCittc2dzdHIgItCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1Li4uIgorCisjOiBnaXRrOjIwODYKK21zZ2lkICImRGVsZXRlIHZpZXciCittc2dzdHIgItCj0LTQsNC70LjRgtGMINC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1IgorCisjOiBnaXRrOjIwODggZ2l0azo0MDQzCittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAi0JLRgdC1INGE0LDQudC70YsiCisKKyM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAi0J/RgNC10LTRgdGC0LDQstC70LXQvdC40LUiCisKKyM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCittc2dpZCAiJkFib3V0IGdpdGsiCittc2dzdHIgItCeIGdpdGsiCisKKyM6IGdpdGs6MjA5NCBnaXRrOjIxMDgKK21zZ2lkICImS2V5IGJpbmRpbmdzIgorbXNnc3RyICLQndCw0LfQvdCw0YfQtdC90LjRjyDQutC70LDQstC40LDRgtGD0YDRiyIKKworIzogZ2l0azoyMDkyIGdpdGs6MjEwNworbXNnaWQgIiZIZWxwIgorbXNnc3RyICLQn9C+0LTRgdC60LDQt9C60LAiCisKKyM6IGdpdGs6MjE4NSBnaXRrOjg2NTIKK21zZ2lkICJTSEExIElEOiIKK21zZ3N0ciAiU0hBMSBJRDoiCisKKyM6IGdpdGs6MjIyOQorbXNnaWQgIlJvdyIKK21zZ3N0ciAi0KHRgtGA0L7QutCwIgorCisjOiBnaXRrOjIyNjcKK21zZ2lkICJGaW5kIgorbXNnc3RyICLQn9C+0LjRgdC6IgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgItC60L7QvNC80LjRgiIKKworIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3CisjOiBnaXRrOjY5MTIKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAi0YHQvtC00LXRgNC20LDRidC10LU6IgorCisjOiBnaXRrOjIzMDIgZ2l0azozNTI2IGdpdGs6MzUzMSBnaXRrOjQ3NjMKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgItC60LDRgdCw0YLQtdC70YzQvdC+INGE0LDQudC70L7QsjoiCisKKyM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAi0LTQvtCx0LDQstC40LIv0YPQtNCw0LvQuNCyINGB0YLRgNC+0LrRgzoiCisKKyM6IGdpdGs6MjMwNCBnaXRrOjQ3NzkKK21zZ2lkICJjaGFuZ2luZyBsaW5lcyBtYXRjaGluZzoiCittc2dzdHIgItC40LfQvNC10L3Rj9GPINGB0L7QstC/0LDQtNCw0Y7RidC40LUg0YHRgtGA0L7QutC4OiIKKworIzogZ2l0azoyMzEzIGdpdGs6MjMxNSBnaXRrOjQ3NjYKK21zZ2lkICJFeGFjdCIKK21zZ3N0ciAi0KLQvtGH0L3QviIKKworIzogZ2l0azoyMzE1IGdpdGs6NDg1NCBnaXRrOjY3MjMKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICLQmNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0LHQvtC70YzRiNC40LUv0LzQsNC70LXQvdGM0LrQuNC1IgorCisjOiBnaXRrOjIzMTUgZ2l0azo0NzM2IGdpdGs6NDg1MiBnaXRrOjY3MTkKK21zZ2lkICJSZWdleHAiCittc2dzdHIgItCg0LXQs9GD0LvRj9GA0L3Ri9C1INCy0YvRgNCw0LbQtdC90LjRjyIKKworIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzQgZ2l0azo0OTA0IGdpdGs6NDkxMSBnaXRrOjY4NDggZ2l0azo2OTE2Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAi0JLQviDQstGB0LXRhSDQv9C+0LvRj9GFIgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAi0JfQsNCz0L7Qu9C+0LLQvtC6IgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjY5MTYgZ2l0azo3Mzg5Cittc2dpZCAiQ29tbWVudHMiCittc2dzdHIgItCa0L7QvNC80LXQvdGC0LDRgNC40LgiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo0ODc2IGdpdGs6NDkxMSBnaXRrOjY3ODYgZ2l0azo3MzI0IGdpdGs6ODgzMAorIzogZ2l0azo4ODQ1Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICLQkNCy0YLQvtGAIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgItCa0L7QvNC80LjRgtC10YAiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAi0J3QsNC50YLQuCIKKworIzogZ2l0azoyMzU4Cittc2dpZCAiRGlmZiIKK21zZ3N0ciAi0KHRgNCw0LLQvdC40YLRjCIKKworIzogZ2l0azoyMzYwCittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgItCh0YLQsNGA0LDRjyDQstC10YDRgdC40Y8iCisKKyM6IGdpdGs6MjM2MgorbXNnaWQgIk5ldyB2ZXJzaW9uIgorbXNnc3RyICLQndC+0LLQsNGPINCy0LXRgNGB0LjRjyIKKworIzogZ2l0azoyMzY0Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAi0KHRgtGA0L7QuiDQutC+0L3RgtC10LrRgdGC0LAiCisKKyM6IGdpdGs6MjM3NAorbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCittc2dzdHIgItCY0LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQv9GA0L7QsdC10LvRiyIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y8g0YHRgtGA0L7QuiIKKworIzogZ2l0azoyNDQ1Cittc2dpZCAiUGF0Y2giCittc2dzdHIgItCf0LDRgtGHIgorCisjOiBnaXRrOjI0NDcKK21zZ2lkICJUcmVlIgorbXNnc3RyICLQpNCw0LnQu9GLIgorCisjOiBnaXRrOjI2MTcgZ2l0azoyNjM3Cittc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgorbXNnc3RyICLQodGA0LDQstC90LjRgtGMINGN0YLQvtGCINC60L7QvNC80LjRgiDRgSDQstGL0LTQtdC70LXQvdC90YvQvCIKKworIzogZ2l0azoyNjE4IGdpdGs6MjYzOAorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAi0KHRgNCw0LLQvdC40YLRjCDQstGL0LTQtdC70LXQvdC90YvQuSDRgSDRjdGC0LjQvCDQutC+0LzQvNC40YLQvtC8IgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjM5Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0L/QsNGC0YciCisKKyM6IGdpdGs6MjYyMCBnaXRrOjkyNTQKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQvNC10YLQutGDIgorCisjOiBnaXRrOjI2MjEgZ2l0azo5MzcxCittc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCittc2dzdHIgItCh0L7RhdGA0LDQvdC40YLRjCDQutC+0LzQvNC40YIg0LIg0YTQsNC50LsiCisKKyM6IGdpdGs6MjYyMiBnaXRrOjk0MjgKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0LLQtdGC0LrRgyIKKworIzogZ2l0azoyNjIzCittc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCittc2dzdHIgItCe0YLQsdC+0YAg0LvRg9GH0YjQtdCz0L4g0LTQu9GPINGN0YLQvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGdpdGs6MjYyNAorbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgItCj0YHRgtCw0L3QvtCy0LjRgtGMIEhFQUQg0L3QsCDRjdGC0L7RgiDQutC+0LzQvNC40YIiCisKKyM6IGdpdGs6MjYyNQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgItCf0L7QvNC10YLQuNGC0Ywg0Y3RgtC+0YIg0LrQvtC80LzQuNGCIgorCisjOiBnaXRrOjI2MjYKK21zZ2lkICJSZXR1cm4gdG8gbWFyayIKK21zZ3N0ciAi0JLQtdGA0L3Rg9GC0YzRgdGPINC90LAg0L/QvtC80LXRgtC60YMiCisKKyM6IGdpdGs6MjYyNworbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgorbXNnc3RyICLQndCw0LnRgtC4INC4INC/0L7QvNC10YLQuNGC0Ywg0L/QvtGC0L7QvNC60LAg0Y3RgtC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogZ2l0azoyNjI4Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgItCh0YDQsNCy0L3QuNGC0Ywg0YEg0L/QvtC80LXRh9C10L3QvdGL0Lwg0LrQvtC80LzQuNGC0L7QvCIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICLQodGA0LDQstC90LjRgtGMINCy0YvQtNC10LvQtdC90L3QvtC1INGBINC/0L7QvNC10YfQtdC90L3Ri9C8INC60L7QvNC80LjRgtC+0LwiCisKKyM6IGdpdGs6MjYzMCBnaXRrOjI2NDEKK21zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKK21zZ3N0ciAi0KHRgNCw0LLQvdC40YLRjCDQv9C+0LzQtdGH0LXQvdC90YvQuSDRgSDRjdGC0LjQvCDQutC+0LzQvNC40YLQvtC8IgorCisjOiBnaXRrOjI2MzEKK21zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCittc2dzdHIgItCS0L7Qt9Cy0YDQsNGCINGN0YLQvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGdpdGs6MjY0NworbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAi0J/QtdGA0LXQudGC0Lgg0L3QsCDRjdGC0YMg0LLQtdGC0LrRgyIKKworIzogZ2l0azoyNjQ4Cittc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCDRjdGC0YMg0LLQtdGC0LrRgyIKKworIzogZ2l0azoyNjQ5Cittc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKK21zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNGC0Ywg0LjQvNGPINCy0LXRgtC60LgiCisKKyM6IGdpdGs6MjY1NgorbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKK21zZ3N0ciAi0J/QvtC00YHQstC10YLQuNGC0Ywg0Y3RgtC+0YIg0YLQvtC20LUiCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgItCf0L7QtNGB0LLQtdGC0LjRgtGMINGC0L7Qu9GM0LrQviDRjdGC0L7RgiIKKworIzogZ2l0azoyNjU4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQvNCwINGB0YDQsNCy0L3QtdC90LjRjyIKKworIzogZ2l0azoyNjU5Cittc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKK21zZ3N0ciAi0JDQstGC0L7RgNGLINC40LfQvNC10L3QtdC90LjQuSDRgNC+0LTQuNGC0LXQu9GM0YHQutC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogZ2l0azoyNjYwCittc2dpZCAiQ29weSBwYXRoIgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0YLRjCDQv9GD0YLRjCIKKworIzogZ2l0azoyNjY3Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC40YHRgtC+0YfQvdC40Log0Y3RgtC+0Lkg0YHRgtGA0L7QutC4IgorCisjOiBnaXRrOjI2NjgKK21zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCittc2dzdHIgItCX0LDQv9GD0YHRgtC40YLRjCBnaXQgZ3VpIGJsYW1lINC00LvRjyDRjdGC0L7QuSDRgdGC0YDQvtC60LgiCisKKyM6IGdpdGs6MzAxNAorbXNnaWQgIiIKKyJcbiIKKyJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyJcbiIKKyJDb3B5cmlnaHQgIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIlxuR2l0ayAtINC/0YDQvtCz0YDQsNC80LzQsCDQv9GA0L7RgdC80L7RgtGA0LAg0LjRgdGC0L7RgNC40Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIGdpdFxuXG7CqSAgMjAwNS0yMDE0IFBhdWwgTWFja2VycmFzXG5cbtCY0YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INC4INGA0LDRgdC/0YDQvtGB0YLRgNCw0L3QtdC90LjQtSDRgdC+0LPQu9Cw0YHQvdC+INGD0YHQu9C+0LLQuNGP0LwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCisKKyM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgItCX0LDQutGA0YvRgtGMIgorCisjOiBnaXRrOjMwNDMKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKK21zZ3N0ciAi0J3QsNC30L3QsNGH0LXQvdC40Y8g0LrQu9Cw0LLQuNCw0YLRg9GA0Ysg0LIgR2l0ayIKKworIzogZ2l0azozMDQ2Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICLQndCw0LfQvdCw0YfQtdC90LjRjyDQutC70LDQstC40LDRgtGD0YDRiyDQsiBHaXRrOiIKKworIzogZ2l0azozMDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHTQl9Cw0LLQtdGA0YjQuNGC0YwiCisKKyM6IGdpdGs6MzA0OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCittc2dzdHIgIjwlcy1XPlx0XHTQl9Cw0LrRgNGL0YLRjCDQvtC60L3QviIKKworIzogZ2l0azozMDUwCittc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgorbXNnc3RyICI8SG9tZT5cdFx00J/QtdGA0LXQudGC0Lgg0Log0L/QtdGA0LLQvtC80YMg0LrQvtC80LzQuNGC0YMiCisKKyM6IGdpdGs6MzA1MQorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdNCf0LXRgNC10LnRgtC4INC6INC/0L7RgdC70LXQtNC90LXQvNGDINC60L7QvNC80LjRgtGDIgorCisjOiBnaXRrOjMwNTIKK21zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCittc2dzdHIgIjxVcD4sIHAsIGtcdNCf0LXRgNC10LnRgtC4INC90LAg0L7QtNC40L0g0LrQvtC80LzQuNGCINCy0LLQtdGA0YUiCisKKyM6IGdpdGs6MzA1MworbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwgalx00J/QtdGA0LXQudGC0Lgg0L3QsCDQvtC00LjQvSDQutC+0LzQvNC40YIg0LLQvdC40LciCisKKyM6IGdpdGs6MzA1NAorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxMZWZ0PiwgeiwgaFx00J/QvtC60LDQt9Cw0YLRjCDRgNCw0L3QtdC1INC/0L7RgdC10YnRkdC90L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSIKKworIzogZ2l0azozMDU1Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSaWdodD4sIHgsIGxcdNCf0L7QutCw0LfQsNGC0Ywg0YHQu9C10LTRg9GO0YnQuNC5INC/0L7RgdC10YnRkdC90L3Ri9C5INC60L7QvNC80LjRgiIKKworIzogZ2l0azozMDU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjwlcy1uPlx00J/QtdGA0LXQudGC0Lgg0L3QsCBuINGA0L7QtNC40YLQtdC70Y8g0L7RgiDRgtC10LrRg9GJ0LXQs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBnaXRrOjMwNTcKK21zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VVcD5cdNCf0LXRgNC10LnRgtC4INC90LAg0YHRgtGA0LDQvdC40YbRgyDQstGL0YjQtSDQsiDRgdC/0LjRgdC60LUg0LrQvtC80LzQuNGC0L7QsiIKKworIzogZ2l0azozMDU4Cittc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZURvd24+XHTQn9C10YDQtdC50YLQuCDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0L3QuNC20LUg0LIg0YHQv9C40YHQutC1INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGdpdGs6MzA1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHTQn9C10YDQtdC50YLQuCDQvdCwINC90LDRh9Cw0LvQviDRgdC/0LjRgdC60LAg0LrQvtC80LzQuNGC0L7QsiIKKworIzogZ2l0azozMDYwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCittc2dzdHIgIjwlcy1FbmQ+XHTQn9C10YDQtdC50YLQuCDQvdCwINC60L7QvdC10YYg0YHQv9C40YHQutCwINC60L7QvNC80LjRgtC+0LIiCisKKyM6IGdpdGs6MzA2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVVwPlx00J/RgNC+0LLQtdGA0L3Rg9GC0Ywg0YHQv9C40YHQvtC6INC60L7QvNC80LjRgtC+0LIg0LLQstC10YDRhSIKKworIzogZ2l0azozMDYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLURvd24+XHTQn9GA0L7QstC10YDQvdGD0YLRjCDRgdC/0LjRgdC+0Log0LrQvtC80LzQuNGC0L7QsiDQstC90LjQtyIKKworIzogZ2l0azozMDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdNCf0YDQvtCy0LXRgNC90YPRgtGMINGB0L/QuNGB0L7QuiDQutC+0LzQvNC40YLQvtCyINC90LAg0YHRgtGA0LDQvdC40YbRgyDQstCy0LXRgNGFIgorCisjOiBnaXRrOjMwNjQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VEb3duPlx00J/RgNC+0LLQtdGA0L3Rg9GC0Ywg0YHQv9C40YHQvtC6INC60L7QvNC80LjRgtC+0LIg0L3QsCDRgdGC0YDQsNC90LjRhtGDINCy0L3QuNC3IgorCisjOiBnaXRrOjMwNjUKK21zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCittc2dzdHIgIjxTaGlmdC1VcD5cdNCf0L7QuNGB0Log0LIg0L7QsdGA0LDRgtC90L7QvCDQv9C+0YDRj9C00LrQtSAo0LLQstC10YDRhSwg0YHRgNC10LTQuCDQvdC+0LLRi9GFINC60L7QvNC80LjRgtC+0LIpIgorCisjOiBnaXRrOjMwNjYKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNoaWZ0LURvd24+XHTQn9C+0LjRgdC6ICjQstC90LjQtywg0YHRgNC10LTQuCDRgdGC0LDRgNGL0YUg0LrQvtC80LzQuNGC0L7QsikiCisKKyM6IGdpdGs6MzA2NworbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8RGVsZXRlPiwgYlx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0LLRi9GI0LUiCisKKyM6IGdpdGs6MzA2OAorbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgorbXNnc3RyICI8QmFja3NwYWNlPlx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0LLRi9GI0LUiCisKKyM6IGdpdGs6MzA2OQorbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgorbXNnc3RyICI8TGVlcnRhc3RlPlx0XHTQn9GA0L7QutGA0YPRgtC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INC90LAg0YHRgtGA0LDQvdC40YbRgyDQvdC40LbQtSIKKworIzogZ2l0azozMDcwCittc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgorbXNnc3RyICJ1XHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCAxOCDRgdGC0YDQvtC6INCy0LLQtdGA0YUiCisKKyM6IGdpdGs6MzA3MQorbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgorbXNnc3RyICJkXHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCAxOCDRgdGC0YDQvtC6INCy0L3QuNC3IgorCisjOiBnaXRrOjMwNzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRj5cdFx0RmluZCIKK21zZ3N0ciAiPCVzLUY+XHRcdNCf0L7QuNGB0LoiCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHTQn9C10YDQtdC50YLQuCDQuiDRgdC70LXQtNGD0Y7RidC10LzRgyDQvdCw0LnQtNC10L3QvdC+0LzRgyDQutC+0LzQvNC40YLRgyIKKworIzogZ2l0azozMDc0Cittc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPFJldHVybj5cdNCf0LXRgNC10LnRgtC4INC6INGB0LvQtdC00YPRjtGJ0LXQvNGDINC90LDQudC00LXQvdC90L7QvNGDINC60L7QvNC80LjRgtGDIgorCisjOiBnaXRrOjMwNzUKK21zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKK21zZ3N0ciAiZ1x0XHTQn9C10YDQtdC50YLQuCDQvdCwINC60L7QvNC80LjRgiIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHTQn9C10YDQtdC50YLQuCDQuiDQv9C+0LvRjiDQv9C+0LjRgdC60LAiCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHTQn9C10YDQtdC50YLQuCDQuiDQv9GA0LXQtNGL0LTRg9GJ0LXQvNGDINC90LDQudC00LXQvdC90L7QvNGDINC60L7QvNC80LjRgtGDIgorCisjOiBnaXRrOjMwNzgKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0YTQsNC50LvRgyIKKworIzogZ2l0azozMDc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx00J/RgNC+0LTQvtC70LbQuNGC0Ywg0L/QvtC40YHQuiDQsiDRgdC/0LjRgdC60LUg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx00J/QtdGA0LXQudGC0Lgg0Log0L/RgNC10LTRi9C00YPRidC10LzRgyDQvdCw0LnQtNC10L3QvdC+0LzRgyDRgtC10LrRgdGC0YMg0LIg0YHQv9C40YHQutC1INC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdNCj0LLQtdC70LjRh9C40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorCisjOiBnaXRrOjMwODIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLXBsdXM+XHTQo9Cy0LXQu9C40YfQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKKworIzogZ2l0azozMDgzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQLT5cdNCj0LzQtdC90YzRiNC40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorCisjOiBnaXRrOjMwODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdNCj0LzQtdC90YzRiNC40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgorCisjOiBnaXRrOjMwODUKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHTQntCx0L3QvtCy0LjRgtGMIgorCisjOiBnaXRrOjM1NTAgZ2l0azozNTU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDRgdC+0LfQtNCw0L3QuNGPINCy0YDQtdC80LXQvdC90L7Qs9C+INC60LDRgtCw0LvQvtCz0LAgJXM6IgorCisjOiBnaXRrOjM1NzIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINC/0L7Qu9GD0YfQtdC90LjRjyDCqyVzwrsg0LjQtyAlczoiCisKKyM6IGdpdGs6MzYzNQorbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPINC60L7QvNCw0L3QtNGLOiIKKworIzogZ2l0azozNzg0Cittc2dpZCAiTm8gc3VjaCBjb21taXQiCittc2dzdHIgItCa0L7QvNC80LjRgiDQvdC1INC90LDQudC00LXQvSIKKworIzogZ2l0azozNzk4Cittc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiDQvtGI0LjQsdC60LAg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0LrQvtC80LDQvdC00Ys6IgorCisjOiBnaXRrOjM4MjkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0YfRgtC10L3QuNGPIE1FUkdFX0hFQUQ6ICVzIgorCisjOiBnaXRrOjM4MzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGH0YLQtdC90LjRjyDQuNC90LTQtdC60YHQsDogJXMiCisKKyM6IGdpdGs6Mzg2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/Rg9GB0LrQsCBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM4NjUgZ2l0azo2NzU0Cittc2dpZCAiU2VhcmNoaW5nIgorbXNnc3RyICLQn9C+0LjRgdC6IgorCisjOiBnaXRrOjM4OTcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM5MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICLQrdGC0LAg0YHRgtGA0L7QutCwINC/0YDQuNC90LDQtNC70LXQttC40YIg0LrQvtC80LzQuNGC0YMgJXMsINC60L7RgtC+0YDRi9C5INC90LUg0L/QvtC60LDQt9Cw0L0g0LIg0Y3RgtC+0Lwg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LgiCisKKyM6IGdpdGs6MzkzOQorbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHRgNCw0LLQvdC10L3QuNGPOiIKKworIzogZ2l0azo0MDcwCittc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCittc2dzdHIgIkdpdGsg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuSIKKworIzogZ2l0azo0MDc0Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICLQl9Cw0L/QvtC80L3QuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUiCisKKyM6IGdpdGs6NDA3NQorbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCittc2dzdHIgItCh0YHRi9C70LrQuCAo0YDQsNC30LTQtdC70ZHQvdC90YvQtSDQv9GA0L7QsdC10LvQvtC8KToiCisKKyM6IGdpdGs6NDA3NgorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgItCS0LXRgtC60Lgg0Lgg0LzQtdGC0LrQuCIKKworIzogZ2l0azo0MDc3Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgItCS0YHQtSDRgdGB0YvQu9C60LgiCisKKyM6IGdpdGs6NDA3OAorbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgorbXNnc3RyICLQktGB0LUgKNC70L7QutCw0LvRjNC90YvQtSkg0LLQtdGC0LrQuCIKKworIzogZ2l0azo0MDc5Cittc2dpZCAiQWxsIHRhZ3MiCittc2dzdHIgItCS0YHQtSDQvNC10YLQutC4IgorCisjOiBnaXRrOjQwODAKK21zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLQktGB0LUg0LLQvdC10YjQvdC40LUg0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0LLQtdGC0LrQuCIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAi0JjQvdGE0L7RgNC80LDRhtC40Y8g0L4g0LrQvtC80LzQuNGC0LUgKNGA0LXQs9GD0LvRj9GA0L3Ri9C1INCy0YvRgNCw0LbQtdC90LjRjyk6IgorCisjOiBnaXRrOjQwODIKK21zZ2lkICJBdXRob3I6IgorbXNnc3RyICLQkNCy0YLQvtGAOiIKKworIzogZ2l0azo0MDgzCittc2dpZCAiQ29tbWl0dGVyOiIKK21zZ3N0ciAi0JrQvtC80LzQuNGC0LXRgDoiCisKKyM6IGdpdGs6NDA4NAorbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKK21zZ3N0ciAi0KHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwOiIKKworIzogZ2l0azo0MDg1Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgItCh0L7QstC/0LDQtNCw0LXRgiDRgdC+INCy0YHQtdC80Lgg0YPRgdC70L7QstC40Y/QvNC4INC40L3RhNC+0YDQvNCw0YbQuNC4INC+INC60L7QvNC80LjRgtC1IgorCisjOiBnaXRrOjQwODYKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICLQndC1INGB0L7QstC/0LDQtNCw0LXRgiDRgSDRg9GB0LvQvtCy0LjRj9C80Lgg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0LrQvtC80LzQuNGC0LUiCisKKyM6IGdpdGs6NDA4NworbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y8g0YTQsNC50LvQvtCyOiIKKworIzogZ2l0azo0MDg4Cittc2dpZCAiRml4ZWQgU3RyaW5nIgorbXNnc3RyICLQntCx0YvRh9C90LDRjyDRgdGC0YDQvtC60LAiCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAi0KDQtdCz0YPQu9GP0YDQvdC+0LUg0LLRi9GA0LDQttC10L3QuNC1OiIKKworIzogZ2l0azo0MDkwCittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgItCh0YLRgNC+0LrQsCDQtNC70Y8g0L/QvtC40YHQutCwOiIKKworIzogZ2l0azo0MDkxCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICLQlNCw0YLRiyDQutC+0LzQvNC40YLQsCAowqsyINC90LXQtNC10LvQuCDQvdCw0LfQsNC0wrssIMKrMjAwOS0wMy0xNyAxNToyNzozOMK7LCDCqzE3INC80LDRgNGC0LAgMjAwOSAxNToyNzozOMK7KToiCisKKyM6IGdpdGs6NDA5MgorbXNnaWQgIlNpbmNlOiIKK21zZ3N0ciAi0KEg0LTQsNGC0Ys6IgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgItCf0L4g0LTQsNGC0YM6IgorCisjOiBnaXRrOjQwOTQKK21zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKK21zZ3N0ciAi0J7Qs9GA0LDQvdC40YfQuNGC0Ywg0Lgv0LjQu9C4INC/0YDQvtC/0YPRgdGC0LjRgtGMINC60L7Qu9C40YfQtdGB0YLQstC+INGA0LXQtNCw0LrRhtC40LkgKNC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3QvtC1INGH0LjRgdC70L4pOiIKKworIzogZ2l0azo0MDk1Cittc2dpZCAiTnVtYmVyIHRvIHNob3c6IgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC60L7Qu9C40YfQtdGB0YLQstC+OiIKKworIzogZ2l0azo0MDk2Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICLQn9GA0L7Qv9GD0YHRgtC40YLRjCDQutC+0LvQuNGH0LXRgdGC0LLQvjoiCisKKyM6IGdpdGs6NDA5NworbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgItCg0LDQt9C70LjRh9C90YvQtSDQvtC/0YbQuNC4OiIKKworIzogZ2l0azo0MDk4Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICLQodGC0YDQvtCz0LDRjyDRgdC+0YDRgtC40YDQvtCy0LrQsCDQv9C+INC00LDRgtC1IgorCisjOiBnaXRrOjQwOTkKK21zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKK21zZ3N0ciAi0J7RgtC80LXRgtC40YLRjCDRgdGC0L7RgNC+0L3RiyDQstC10YLQvtC6IgorCisjOiBnaXRrOjQxMDAKK21zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCittc2dzdHIgItCe0LPRgNCw0L3QuNGH0LjRgtGMINC/0LXRgNCy0YvQvCDQv9GA0LXQtNC60L7QvCIKKworIzogZ2l0azo0MTAxCittc2dpZCAiU2ltcGxlIGhpc3RvcnkiCittc2dzdHIgItCj0L/RgNC+0YnQtdC90L3QsNGPINC40YHRgtC+0YDQuNGPIgorCisjOiBnaXRrOjQxMDIKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAi0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQsNGA0LPRg9C80LXQvdGC0Ysg0LTQu9GPIGdpdCBsb2c6IgorCisjOiBnaXRrOjQxMDMKK21zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKK21zZ3N0ciAi0KTQsNC50LvRiyDQuCDQutCw0YLQsNC70L7Qs9C4INC00LvRjyDQvtCz0YDQsNC90LjRh9C10L3QuNGPINC40YHRgtC+0YDQuNC4LCDQv9C+INC+0LTQvdC+0LzRgyDQvdCwINGB0YLRgNC+0LrRgzoiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICLQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QsNGPINC60L7QvNCw0L3QtNCwINC00LvRjyDRgdC/0LjRgdC60LAg0LrQvtC80LzQuNGC0L7QsjoiCisKKyM6IGdpdGs6NDIyOAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azog0LjQt9C80LXQvdC40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSIKKworIzogZ2l0azo0MjM2Cittc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCittc2dzdHIgIuKAlCDQutGA0LjRgtC10YDQuNC5INC/0L7QuNGB0LrQsCDRgNC10LTQsNC60YbQuNC5IgorCisjOiBnaXRrOjQyNDEKK21zZ2lkICJWaWV3IE5hbWUiCittc2dzdHIgItCY0LzRjyDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRjyIKKworIzogZ2l0azo0MzE2Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGMIChGNSkiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCyINC/0LDRgNCw0LzQtdGC0YDQsNGFINCy0YvQsdC+0YDQsCDQutC+0LzQvNC40YLQvtCyOiIKKworIzogZ2l0azo0NDA5IGdpdGs6NDQ2MiBnaXRrOjQ5MjQgZ2l0azo0OTM4IGdpdGs6NjIwOCBnaXRrOjEyMzczIGdpdGs6MTIzNzQKK21zZ2lkICJOb25lIgorbXNnc3RyICLQndC4INC+0LTQvdC+0LPQviIKKworIzogZ2l0azo1MDIxIGdpdGs6NTAyNgorbXNnaWQgIkRlc2NlbmRhbnQiCittc2dzdHIgItCf0L7RgNC+0LbQtNGR0L3QvdC+0LUiCisKKyM6IGdpdGs6NTAyMgorbXNnaWQgIk5vdCBkZXNjZW5kYW50IgorbXNnc3RyICLQndC1INC/0L7RgNC+0LbQtNGR0L3QvdC+0LUiCisKKyM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAi0J/RgNC10LTQvtC6IgorCisjOiBnaXRrOjUwMzAKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgItCd0LUg0L/RgNC10LTQvtC6IgorCisjOiBnaXRrOjUzMjQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgItCf0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IGdpdGs6NTM2MAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICLQndC10L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyIKKworIzogZ2l0azo3MTM0Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAi0Lgg0LzQvdC+0LPQvtC1INC00YDRg9Cz0L7QtSIKKworIzogZ2l0azo3MTM3Cittc2dpZCAibWFueSIKK21zZ3N0ciAi0LzQvdC+0LPQviIKKworIzogZ2l0azo3MzI4Cittc2dpZCAiVGFnczoiCittc2dzdHIgItCc0LXRgtC60Lg6IgorCisjOiBnaXRrOjczNDUgZ2l0azo3MzUxIGdpdGs6ODgyNQorbXNnaWQgIlBhcmVudCIKK21zZ3N0ciAi0J/RgNC10LTQvtC6IgorCisjOiBnaXRrOjczNTYKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAi0J/QvtGC0L7QvNC+0LoiCisKKyM6IGdpdGs6NzM2NQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAi0JLQtdGC0LrQsCIKKworIzogZ2l0azo3MzY4Cittc2dpZCAiRm9sbG93cyIKK21zZ3N0ciAi0KHQu9C10LTRg9C10YIg0LfQsCIKKworIzogZ2l0azo3MzcxCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgItCf0YDQtdC00YjQtdGB0YLQstGD0LXRgiIKKworIzogZ2l0azo3OTY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQv9C+0LvRg9GH0LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5OiAlcyIKKworIzogZ2l0azo4NjUwCittc2dpZCAiR290bzoiCittc2dzdHIgItCf0LXRgNC10LnRgtC4INC6OiIKKworIzogZ2l0azo4NjcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgItCh0L7QutGA0LDRidGR0L3QvdGL0LkgU0hBMSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCAlcyDQvdC10L7QtNC90L7Qt9C90LDRh9C10L0iCisKKyM6IGdpdGs6ODY3OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAi0KDQtdC00LDQutGG0LjRjyAlcyDQvdC1INC90LDQudC00LXQvdCwIgorCisjOiBnaXRrOjg2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiU0hBMSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCAlcyDQvdC1INC90LDQudC00LXQvSIKKworIzogZ2l0azo4NjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgItCg0LXQtNCw0LrRhtC40Y8gJXMg0L3QtSDQvdCw0LnQtNC10L3QsCDQsiDRgtC10LrRg9GJ0LXQvCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuCIKKworIzogZ2l0azo4ODMyIGdpdGs6ODg0NworbXNnaWQgIkRhdGUiCittc2dzdHIgItCU0LDRgtCwIgorCisjOiBnaXRrOjg4MzUKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAi0J/QvtGC0L7QvNC60LgiCisKKyM6IGdpdGs6ODg5OAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLQodCx0YDQvtGB0LjRgtGMINCy0LXRgtC60YMgJXMg0L3QsCDRjdGC0L7RgiDQutC+0LzQvNC40YIiCisKKyM6IGdpdGs6ODkwMAorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICLQmtC+0LzQvNC40YIg0L3QtSDQv9GA0LjQvdCw0LTQu9C10LbQuNGCINC90Lgg0L7QtNC90L7QuSDQstC10YLQutC1LCDRgdCx0YDQvtGB0LjRgtGMINC90LXQstC+0LfQvNC+0LbQvdC+IgorCisjOiBnaXRrOjkwMDUgZ2l0azo5MDExCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0LrQsNGOINC60L7QvNC80LjRgi3RgdC70LjRj9C90LjQtSIKKworIzogZ2l0azo5MDIwIGdpdGs6OTAyNQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC/0LDRgtGH0LAg0LTQu9GPICIKKworIzogZ2l0azo5MDIxIGdpdGs6OTAyNgorbXNnaWQgIiAtIHN0b3BwaW5nXG4iCittc2dzdHIgIiDigJQg0L7RgdGC0LDQvdC+0LJcbiIKKworIzogZ2l0azo5MDMxIGdpdGs6OTAzNCBnaXRrOjkwNDIgZ2l0azo5MDU2IGdpdGs6OTA2NQorbXNnaWQgIkNvbW1pdCAiCittc2dzdHIgItCa0L7QvNC80LjRgiIKKworIzogZ2l0azo5MDM1Cittc2dpZCAiIgorIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgorIiAgICAgICAiCittc2dzdHIgIiDRgtCw0LrQvtC5INC20LUg0L/QsNGC0YcsINC60LDQuiDQuFxuICAgICAgICIKKworIzogZ2l0azo5MDQzCittc2dpZCAiIgorIiBkaWZmZXJzIGZyb21cbiIKKyIgICAgICAgIgorbXNnc3RyICIg0L7RgtC70LjRh9Cw0LXRgtGB0Y8g0L7RglxuICAgICAgICIKKworIzogZ2l0azo5MDQ1Cittc2dpZCAiIgorIkRpZmYgb2YgY29tbWl0czpcbiIKKyJcbiIKK21zZ3N0ciAi0KDQsNC30LvQuNGH0LjRjyDQutC+0LzQvNC40YLQvtCyOlxuXG4iCisKKyM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiINGP0LLQu9GP0LXRgtGB0Y8gJXMg0L/QvtGC0L7QvNC60L7QvCDigJQg0L7RgdGC0LDQvdC+0LJcbiIKKworIzogZ2l0azo5MDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgItCf0YDQvtC40LfQvtGI0LvQsCDQvtGI0LjQsdC60LAg0L/RgNC4INC30LDQv9C40YHQuCDQutC+0LzQvNC40YLQsCDQsiDRhNCw0LnQuzogJXMiCisKKyM6IGdpdGs6OTA5MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCittc2dzdHIgItCf0YDQvtC40LfQvtGI0LvQsCDQvtGI0LjQsdC60LAg0L/RgNC4INCy0YvQstC+0LTQtSDRgNCw0LfQu9C40YfQuNC5INC60L7QvNC80LjRgtC+0LI6ICVzIgorCisjOiBnaXRrOjkxMzcKK21zZ2lkICJUb3AiCittc2dzdHIgItCS0LXRgNGFIgorCisjOiBnaXRrOjkxMzgKK21zZ2lkICJGcm9tIgorbXNnc3RyICLQntGCIgorCisjOiBnaXRrOjkxNDMKK21zZ2lkICJUbyIKK21zZ3N0ciAi0JTQviIKKworIzogZ2l0azo5MTY3Cittc2dpZCAiR2VuZXJhdGUgcGF0Y2giCittc2dzdHIgItCh0L7Qt9C00LDRgtGMINC/0LDRgtGHIgorCisjOiBnaXRrOjkxNjkKK21zZ2lkICJGcm9tOiIKK21zZ3N0ciAi0J7RgjoiCisKKyM6IGdpdGs6OTE3OAorbXNnaWQgIlRvOiIKK21zZ3N0ciAi0JTQvjoiCisKKyM6IGdpdGs6OTE4NworbXNnaWQgIlJldmVyc2UiCittc2dzdHIgItCSINC+0LHRgNCw0YLQvdC+0Lwg0L/QvtGA0Y/QtNC60LUiCisKKyM6IGdpdGs6OTE4OSBnaXRrOjkzODUKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgItCk0LDQudC7INC00LvRjyDRgdC+0YXRgNCw0L3QtdC90LjRjzoiCisKKyM6IGdpdGs6OTE5NQorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0YHQvtC30LTQsNC90LjRjyDQv9Cw0YLRh9CwOiIKKworIzogZ2l0azo5MjU2IGdpdGs6OTM3MyBnaXRrOjk0MzAKK21zZ2lkICJJRDoiCittc2dzdHIgIklEOiIKKworIzogZ2l0azo5MjY1Cittc2dpZCAiVGFnIG5hbWU6IgorbXNnc3RyICLQmNC80Y8g0LzQtdGC0LrQuDoiCisKKyM6IGdpdGs6OTI2OAorbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgorbXNnc3RyICLQntC/0LjRgdCw0L3QuNC1INC80LXRgtC60Lgg0YPQutCw0LfRi9Cy0LDRgtGMINC90LUg0L7QsdGP0LfQsNGC0LXQu9GM0L3QviIKKworIzogZ2l0azo5MjcwCittc2dpZCAiVGFnIG1lc3NhZ2U6IgorbXNnc3RyICLQntC/0LjRgdCw0L3QuNC1INC80LXRgtC60Lg6IgorCisjOiBnaXRrOjkyNzQgZ2l0azo5NDM5Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICLQodC+0LfQtNCw0YLRjCIKKworIzogZ2l0azo5MjkyCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICLQndC1INC30LDQtNCw0L3QviDQuNC80Y8g0LzQtdGC0LrQuCIKKworIzogZ2l0azo5Mjk2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0JzQtdGC0LrQsCDCqyVzwrsg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBnaXRrOjkzMDYKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICLQntGI0LjQsdC60LAg0YHQvtC30LTQsNC90LjRjyDQvNC10YLQutC4OiIKKworIzogZ2l0azo5MzgyCittc2dpZCAiQ29tbWFuZDoiCittc2dzdHIgItCa0L7QvNCw0L3QtNCwOiIKKworIzogZ2l0azo5MzkwCittc2dpZCAiV3JpdGUiCittc2dzdHIgItCX0LDQv9C40YHRjCIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICLQn9GA0L7QuNC30L7RiNC70LAg0L7RiNC40LHQutCwINC/0YDQuCDQt9Cw0L/QuNGB0Lgg0LrQvtC80LzQuNGC0LA6IgorCisjOiBnaXRrOjk0MzUKK21zZ2lkICJOYW1lOiIKK21zZ3N0ciAi0JjQvNGPOiIKKworIzogZ2l0azo5NDU4Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0KPQutCw0LbQuNGC0LUg0LjQvNGPINC00LvRjyDQvdC+0LLQvtC5INCy0LXRgtC60LgiCisKKyM6IGdpdGs6OTQ2MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgorbXNnc3RyICLQktC10YLQutCwIMKrJXPCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIuINCf0LXRgNC10L/QuNGB0LDRgtGMPyIKKworIzogZ2l0azo5NTMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgItCa0L7QvNC80LjRgiAlcyDRg9C20LUg0LLQutC70Y7Rh9GR0L0g0LIg0LLQtdGC0LrRgyAlcy4g0J/RgNC+0LTQvtC70LbQuNGC0Ywg0L7Qv9C10YDQsNGG0LjRjj8iCisKKyM6IGdpdGs6OTUzNQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azo5NTQ0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgorIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAi0J7RgtCx0L7RgCDQu9GD0YfRiNC10LPQviDQvdC10LLQvtC30LzQvtC20LXQvSDQuNC3LdC30LAg0LjQt9C80LXQvdC10L3QuNC5INCyINGE0LDQudC70LUgwqslc8K7Llxu0JfQsNC60L7QvNC40YLRjNGC0LUsINGB0LHRgNC+0YHRjNGC0LUg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LjQt9C80LXQvdC10L3QuNGPINC4INC/0L7QstGC0L7RgNC40YLQtSDQvtC/0LXRgNCw0YbQuNGOLiIKKworIzogZ2l0azo5NTUwCittc2dpZCAiIgorIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQvdC10LLQvtC30LzQvtC20L3QviDQuNC3LdC30LAg0L3QtdC30LDQstC10YDRiNGR0L3QvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjy5cbtCX0LDQv9GD0YHRgtC40YLRjCBnaXQgY2l0b29sINC00LvRjyDQt9Cw0LLQtdGA0YjQtdC90LjRjyDRjdGC0L7QuSDQvtC/0LXRgNCw0YbQuNC4PyIKKworIzogZ2l0azo5NTY2IGdpdGs6OTYyNAorbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y8g0L3QtSDQt9Cw0LrQvtC80LzQuNGH0LXQvdGLIgorCisjOiBnaXRrOjk1OTMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKK21zZ3N0ciAi0JrQvtC80LzQuNGCICVzINC90LUg0LLQutC70Y7Rh9GR0L0g0LIg0LLQtdGC0LrRgyAlcy4g0J/RgNC+0LTQvtC70LbQuNGC0Ywg0L7Qv9C10YDQsNGG0LjRjj8iCisKKyM6IGdpdGs6OTU5OAorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAi0JLQvtC30LLRgNCw0YIg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXRrOjk2MDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgorImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKK21zZ3N0ciAi0JLQvtC30LLRgNCw0YIg0LjQt9C80LXQvdC10L3QuNC5INC60L7QvNC80LjRgtCwINC90LUg0YPQtNCw0LvRgdGPINC40Lct0LfQsCDQu9C+0LrQsNC70YzQvdGL0YUg0LjQt9C80LXQvdC10L3QuNC5INCyINGD0LrQsNC30LDQvdC90YvRhSDRhNCw0LnQu9Cw0YU6ICVzXG7Ql9Cw0LrQvtC80LjRgtGM0YLQtSwg0YHQsdGA0L7RgdGM0YLQtSDQuNC70Lgg0YHQv9GA0Y/Rh9GM0YLQtSDQuNC30LzQtdC90LXQvdC40Y8g0Lgg0L/QvtCy0YLQvtGA0LjRgtC1INC+0L/QtdGA0LDRhtC40Y4uIgorCisjOiBnaXRrOjk2MTAKK21zZ2lkICIiCisiUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgorIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAi0JLQvtC30LLRgNCw0YIg0LjQt9C80LXQvdC10L3QuNC5INC90LXQstC+0LfQvNC+0LbQtdC9INC40Lct0LfQsCDQvdC10LfQsNCy0LXRgNGI0ZHQvdC90L7QuSDQvtC/0LXRgNCw0YbQuNC4INGB0LvQuNGP0L3QuNGPLlxu0JfQsNC/0YPRgdGC0LjRgtGMIGdpdCBjaXRvb2wg0LTQu9GPINC30LDQstC10YDRiNC10L3QuNGPINGN0YLQvtC5INC+0L/QtdGA0LDRhtC40Lg/IgorCisjOiBnaXRrOjk2NTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICLQn9C+0LTRgtCy0LXRgNC00LjRgtC1INC+0L/QtdGA0LDRhtC40Y4g0L/QtdGA0LXRhdC+0LTQsCIKKworIzogZ2l0azo5NjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAi0KHQsdGA0L7RgdC40YLRjCDQstC10YLQutGDICVzINC90LAg0LrQvtC80LzQuNGCICVzPyIKKworIzogZ2l0azo5NjU3Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgItCi0LjQvyDQvtC/0LXRgNCw0YbQuNC4INC/0LXRgNC10YXQvtC00LA6IgorCisjOiBnaXRrOjk2NjAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAi0JvRkdCz0LrQuNC5OiDQvtGB0YLQsNCy0LjRgtGMINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINC4INC40L3QtNC10LrRgSDQvdC10LjQt9C80LXQvdC90YvQvNC4IgorCisjOiBnaXRrOjk2NjMKK21zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCittc2dzdHIgItCh0LzQtdGI0LDQvdC90YvQuTog0L7RgdGC0LDQstC40YLRjCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQvdC10LjQt9C80LXQvdC90YvQvCwg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LjQvdC00LXQutGBIgorCisjOiBnaXRrOjk2NjYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAi0JbQtdGB0YLQutC40Lk6INC/0LXRgNC10L/QuNGB0LDRgtGMINC40L3QtNC10LrRgSDQuCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7Qs1xuKNCy0YHQtSDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSDQsdGD0LTRg9GCINC/0L7RgtC10YDRj9C90YspIgorCisjOiBnaXRrOjk2ODMKK21zZ2lkICJSZXNldHRpbmciCittc2dzdHIgItCh0LHRgNC+0YEiCisKKyM6IGdpdGs6OTc0MworbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAi0J/QtdGA0LXRhdC+0LQiCisKKyM6IGdpdGs6OTc5NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgItCQ0LrRgtC40LLQvdCw0Y8g0LLQtdGC0LrQsCDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0YPQtNCw0LvQtdC90LAiCisKKyM6IGdpdGs6OTgwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICLQmtC+0LzQvNC40YLRiyDQuNC3INCy0LXRgtC60LggJXMg0L3QtSDQv9GA0LjQvdCw0LTQu9C10LbQsNGCINCx0L7Qu9GM0YjQtSDQvdC40LrQsNC60L7QuSDQtNGA0YPQs9C+0Lkg0LLQtdGC0LrQtS5cbtCU0LXQudGB0YLQstC40YLQtdC70YzQvdC+INGD0LTQsNC70LjRgtGMINCy0LXRgtC60YMgJXM/IgorCisjOiBnaXRrOjk4MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgItCc0LXRgtC60Lgg0Lgg0LLQtdGC0LrQuDogJXMiCisKKyM6IGdpdGs6OTg1MAorbXNnaWQgIkZpbHRlciIKK21zZ3N0ciAi0KTQuNC70YzRgtGA0L7QstCw0YLRjCIKKworIzogZ2l0azoxMDE0NgorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAi0J7RiNC40LHQutCwINGH0YLQtdC90LjRjyDQuNGB0YLQvtGA0LjQuCDQv9GA0L7QtdC60YLQsDsg0LjQvdGE0L7RgNC80LDRhtC40Y8g0L4g0LLQtdGC0LrQsNGFINC4INC60L7QvNC80LjRgtCw0YUg0LLQvtC60YDRg9CzINC80LXRgtC+0LogKNC00L4v0L/QvtGB0LvQtSkg0LzQvtC20LXRgiDQsdGL0YLRjCDQvdC10L/QvtC70L3QvtC5LiIKKworIzogZ2l0azoxMTEyMworbXNnaWQgIlRhZyIKK21zZ3N0ciAi0JzQtdGC0LrQsCIKKworIzogZ2l0azoxMTEyNworbXNnaWQgIklkIgorbXNnc3RyICJJZCIKKworIzogZ2l0azoxMTIxMAorbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgorbXNnc3RyICLQqNGA0LjRhNGCIEdpdGsiCisKKyM6IGdpdGs6MTEyMjcKK21zZ2lkICJCIgorbXNnc3RyICLQliIKKworIzogZ2l0azoxMTIzMAorbXNnaWQgIkkiCittc2dzdHIgItCaIgorCisjOiBnaXRrOjExMzQ4Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICLQn9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC60LDQt9CwINGB0L/QuNGB0LrQsCDQutC+0LzQvNC40YLQvtCyIgorCisjOiBnaXRrOjExMzUxCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICLQnNCw0LrRgS4g0YjQuNGA0LjQvdCwINCz0YDQsNGE0LAgKNGB0YLRgNC+0LopIgorCisjOiBnaXRrOjExMzU1CisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAi0JzQsNC60YEuINGI0LjRgNC40L3QsCDQs9GA0LDRhNCwICglINGI0LjRgNC40L3RiyDQv9Cw0L3QtdC70LgpIgorCisjOiBnaXRrOjExMzU4Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICLQn9C+0LrQsNC30YvQstCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogZ2l0azoxMTM2MQorbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEgKGxlbmd0aCkiCittc2dzdHIgItCQ0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INCy0YvQtNC10LvQuNGC0YwgU0hBMSAo0LTQu9C40L3QvdCwKSIKKworIzogZ2l0azoxMTM2NQorbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCittc2dzdHIgItCh0LrRgNGL0YLRjCDQstC90LXRiNC90LjQtSDRgdGB0YvQu9C60LgiCisKKyM6IGdpdGs6MTEzNjkKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAi0J/QsNGA0LDQvNC10YLRgNGLINC/0L7QutCw0LfQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6MTEzNzEKK21zZ2lkICJUYWIgc3BhY2luZyIKK21zZ3N0ciAi0KjQuNGA0LjQvdCwINGC0LDQsdGD0LvRj9GG0LjQuCIKKworIzogZ2l0azoxMTM3NAorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgItCf0L7QutCw0LfRi9Cy0LDRgtGMINCx0LvQuNC30LrQuNC1INC80LXRgtC60Lgv0LLQtdGC0LrQuCIKKworIzogZ2l0azoxMTM3NworbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgItCf0L7QutCw0LfRi9Cy0LDRgtGMINC80LDQutGB0LjQvNCw0LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQvNC10YLQvtC6L9Cy0LXRgtC+0LoiCisKKyM6IGdpdGs6MTEzODAKK21zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCittc2dzdHIgItCe0LPRgNCw0L3QuNGH0LjRgtGMINC/0L7QutCw0Lcg0LjQt9C80LXQvdC10L3QuNC5INCy0YvQsdGA0LDQvdC90YvQvNC4INGE0LDQudC70LDQvNC4IgorCisjOiBnaXRrOjExMzgzCittc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCittc2dzdHIgItCf0L7QtNC00LXRgNC20LrQsCDQutC+0LTQuNGA0L7QstC+0Log0LIg0L7RgtC00LXQu9GM0L3Ri9GFINGE0LDQudC70LDRhSIKKworIzogZ2l0azoxMTM4OSBnaXRrOjExNTM2Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAg0LTQu9GPINC/0L7QutCw0LfQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdGs6MTEzOTAKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgItCS0YvQsdC10YDQuNGC0LUuLi4iCisKKyM6IGdpdGs6MTEzOTUKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgItCe0LHRidC40LUg0L7Qv9GG0LjQuCIKKworIzogZ2l0azoxMTM5OAorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGB0YLQuNC70Lgg0LLQuNC00LbQtdGC0L7QsiIKKworIzogZ2l0azoxMTQwMAorbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCittc2dzdHIgIijQuNC30LzQtdC90LXQvdC40LUg0L/QvtGC0YDQtdCx0YPQtdGCINC/0LXRgNC10LfQsNC/0YPRgdC6KSIKKworIzogZ2l0azoxMTQwMgorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIo0L3QtdC00L7RgdGC0YPQv9C90L4g0LIg0LTQsNC90L3Ri9C5INC80L7QvNC10L3RgikiCisKKyM6IGdpdGs6MTE0MTMKK21zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAi0KbQstC10YLQsDog0L3QsNC20LzQuNGC0LUg0LTQu9GPINCy0YvQsdC+0YDQsCIKKworIzogZ2l0azoxMTQxNgorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAi0JjQvdGC0LXRgNGE0LXQudGBIgorCisjOiBnaXRrOjExNDE3Cittc2dpZCAiaW50ZXJmYWNlIgorbXNnc3RyICLQuNC90YLQtdGA0YTQtdC50YEiCisKKyM6IGdpdGs6MTE0MjAKK21zZ2lkICJCYWNrZ3JvdW5kIgorbXNnc3RyICLQpNC+0L0iCisKKyM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgItGE0L7QvSIKKworIzogZ2l0azoxMTQyNAorbXNnaWQgIkZvcmVncm91bmQiCittc2dzdHIgItCf0LXRgNC10LTQvdC40Lkg0L/Qu9Cw0L0iCisKKyM6IGdpdGs6MTE0MjUKK21zZ2lkICJmb3JlZ3JvdW5kIgorbXNnc3RyICLQv9C10YDQtdC00L3QuNC5INC/0LvQsNC9IgorCisjOiBnaXRrOjExNDI4Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y86INGB0YLQsNGA0YvQuSDRgtC10LrRgdGCIgorCisjOiBnaXRrOjExNDI5Cittc2dpZCAiZGlmZiBvbGQgbGluZXMiCittc2dzdHIgItGB0YLQsNGA0YvQuSDRgtC10LrRgdGCINC40LfQvNC10L3QtdC90LjRjyIKKworIzogZ2l0azoxMTQzMworbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPOiDQvdC+0LLRi9C5INGC0LXQutGB0YIiCisKKyM6IGdpdGs6MTE0MzQKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAi0L3QvtCy0YvQuSDRgtC10LrRgdGCINC40LfQvNC10L3QtdC90LjRjyIKKworIzogZ2l0azoxMTQzOAorbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y86INC30LDQs9C+0LvQvtCy0L7QuiDQsdC70L7QutCwIgorCisjOiBnaXRrOjExNDQwCittc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKK21zZ3N0ciAi0LfQsNCz0L7Qu9C+0LLQvtC6INCx0LvQvtC60LAg0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBnaXRrOjExNDQ0Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgItCk0L7QvSDQstGL0LHRgNCw0L3QvdC+0Lkg0YHRgtGA0L7QutC4IgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAi0YTQvtC9INCy0YvQsdGA0LDQvdC90L7QuSDRgdGC0YDQvtC60LgiCisKKyM6IGdpdGs6MTE0NTAKK21zZ2lkICJTZWxlY3QgYmciCittc2dzdHIgItCS0YvQsdC10YDQuNGC0LUg0YTQvtC9IgorCisjOiBnaXRrOjExNDU5Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAi0KjRgNC40YTRgjog0L3QsNC20LzQuNGC0LUg0LTQu9GPINCy0YvQsdC+0YDQsCIKKworIzogZ2l0azoxMTQ2MQorbXNnaWQgIk1haW4gZm9udCIKK21zZ3N0ciAi0J7RgdC90L7QstC90L7QuSDRiNGA0LjRhNGCIgorCisjOiBnaXRrOjExNDYyCittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgItCo0YDQuNGE0YIg0L/QvtC60LDQt9CwINC40LfQvNC10L3QtdC90LjQuSIKKworIzogZ2l0azoxMTQ2MworbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgItCo0YDQuNGE0YIg0LjQvdGC0LXRgNGE0LXQudGB0LAiCisKKyM6IGdpdGs6MTE0ODUKK21zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LggR2l0ayIKKworIzogZ2l0azoxMTQ5NAorbXNnaWQgIkdlbmVyYWwiCittc2dzdHIgItCe0LHRidC40LUiCisKKyM6IGdpdGs6MTE0OTUKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgItCm0LLQtdGC0LAiCisKKyM6IGdpdGs6MTE0OTYKK21zZ2lkICJGb250cyIKK21zZ3N0ciAi0KjRgNC40YTRgtGLIgorCisjOiBnaXRrOjExNTQ2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKK21zZ3N0ciAiR2l0azog0LLRi9Cx0LXRgNC40YLQtSDRhtCy0LXRgiDQtNC70Y8gJXMiCisKKyM6IGdpdGs6MTIwNTkKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgItCaINGB0L7QttCw0LvQtdC90LjRjiBnaXRrINC90LUg0LzQvtC20LXRgiDRgNCw0LHQvtGC0LDRgtGMINGBINGN0YLQvtC5INCy0LXRgNGB0LjQuSBUY2wvVGsuXG7QotGA0LXQsdGD0LXRgtGB0Y8g0LrQsNC6INC80LjQvdC40LzRg9C8IFRjbC9UayA4LjQuIgorCisjOiBnaXRrOjEyMjY5Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiR2l0LdGA0LXQv9C+0LfQuNGC0LDRgNC40Lkg0L3QtSDQvdCw0LnQtNC10L0g0LIg0YLQtdC60YPRidC10Lwg0LrQsNGC0LDQu9C+0LPQtS4iCisKKyM6IGdpdGs6MTIzMTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCittc2dzdHIgItCd0LXQvtC00L3QvtC30L3QsNGH0L3Ri9C5INCw0YDQs9GD0LzQtdC90YIgwqslc8K7OiDRgdGD0YnQtdGB0YLQstGD0LXRgiDQutCw0Log0YDQtdC00LDQutGG0LjRjyDQuCDQutCw0Log0LjQvNGPINGE0LDQudC70LAiCisKKyM6IGdpdGs6MTIzMjgKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdGL0LUg0LDRgNCz0YPQvNC10L3RgtGLINC00LvRjyBnaXRrOiIKZGlmZiAtLWdpdCBhL2dpdGstZ2l0L3BvL3N2LnBvIGIvZ2l0ay1naXQvcG8vc3YucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUzMTdmNAotLS0gL2Rldi9udWxsCisrKyBiL2dpdGstZ2l0L3BvL3N2LnBvCkBAIC0wLDAgKzEsMTQxNCBAQAorIyBTd2VkaXNoIHRyYW5zbGF0aW9uIGZvciBnaXRrCisjIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIFBhdWwgTWFja2VycmFzCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjCisjIE1pa2FlbCBNYWdudXNzb24gPG1pa2FjaHVAZ21haWwuY29tPiwgMjAwOC4KKyMgUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzLCAyMDE1LgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogc3ZcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMTQ6MzIrMTAwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMDMtMjcgMTA6MzErMDEwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+XG4iCisiTGFuZ3VhZ2UtVGVhbTogU3dlZGlzaCA8dHAtc3ZAbGlzdG9yLnRwLXN2LnNlPlxuIgorIkxhbmd1YWdlOiBzdlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorIlgtR2VuZXJhdG9yOiBHdHJhbnNsYXRvciAyLjkxLjZcbiIKKworIzogZ2l0azoxNDAKK21zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCittc2dzdHIgIkt1bmRlIGludGUgaMOkbXRhIGxpc3RhIMO2dmVyIGVqIHNhbW1hbnNsYWduYSBmaWxlcjoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM4MQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICJGw6RyZ2Egb3JkIgorCisjOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MworbXNnaWQgIk1hcmt1cCB3b3JkcyIKK21zZ3N0ciAiTcOkcmsgdXBwIG9yZCIKKworIzogZ2l0azozMjQKK21zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCittc2dzdHIgIkZlbCB2aWQgdG9sa25pbmcgYXYgcmV2aXNpb25lcjoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiRmVsIHZpZCBrw7ZybmluZyBhdiAtLWFyZ3NjbWQta29tbWFuZG86IgorCisjOiBnaXRrOjM5MworbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorIkluZ2EgZmlsZXIgdmFsZGVzOiAtLW1lcmdlIGFuZ2F2cyBtZW4gZGV0IGZpbm5zIGluZ2EgZmlsZXIgc29tIGludGUgaGFyICIKKyJzbGFnaXRzIHNhbW1hbi4iCisKKyM6IGdpdGs6Mzk2Cittc2dpZCAiIgorIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKKyJsaW1pdC4iCittc2dzdHIgIiIKKyJJbmdhIGZpbGVyIHZhbGRlczogLS1tZXJnZSBhbmdhdnMgbWVuIGRldCBmaW5ucyBpbmdhIGZpbGVyIGlub20gIgorImZpbGJlZ3LDpG5zbmluZ2VuLiIKKworIzogZ2l0azo0MTggZ2l0azo1NjYKK21zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCittc2dzdHIgIkZlbCB2aWQga8O2cm5pbmcgYXYgZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAiTMOkc2VyIgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIkzDpHNlciBpbmNoZWNrbmluZ2FyLi4uIgorCisjOiBnaXRrOjQ5OSBnaXRrOjE2MzcgZ2l0azo0NTI4Cittc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKK21zZ3N0ciAiSW5nYSBpbmNoZWNrbmluZ2FyIG1hcmtlcmFkZSIKKworIzogZ2l0azoxNDQ1IGdpdGs6NDA0NSBnaXRrOjEyNDMyCittc2dpZCAiQ29tbWFuZCBsaW5lIgorbXNnc3RyICJLb21tYW5kb3JhZCIKKworIzogZ2l0azoxNTExCittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJLYW4gaW50ZSB0b2xrYSB1dGRhdGEgZnLDpW4gZ2l0IGxvZzoiCisKKyM6IGdpdGs6MTc0MAorbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCittc2dzdHIgIkluZ2VuIGluY2hlY2tuaW5nc2luZm9ybWF0aW9uIMOkciB0aWxsZ8OkbmdsaWciCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKK21zZ2lkICJPSyIKK21zZ3N0ciAiT0siCisKKyM6IGdpdGs6MTkzNCBnaXRrOjQzMTcgZ2l0azo5MTk2IGdpdGs6OTI3NSBnaXRrOjkzOTEgZ2l0azo5NDQwIGdpdGs6OTY3MQorIzogZ2l0azoxMTI0MiBnaXRrOjExNTIyCittc2dpZCAiQ2FuY2VsIgorbXNnc3RyICJBdmJyeXQiCisKKyM6IGdpdGs6MjA2OQorbXNnaWQgIiZVcGRhdGUiCittc2dzdHIgIlVwcGRhdGVyYSIKKworIzogZ2l0azoyMDcwCittc2dpZCAiJlJlbG9hZCIKK21zZ3N0ciAiTGFkZGEgb20iCisKKyM6IGdpdGs6MjA3MQorbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKK21zZ3N0ciAiTMOkcyBvbSByZWZlcmVuc2VyIgorCisjOiBnaXRrOjIwNzIKK21zZ2lkICImTGlzdCByZWZlcmVuY2VzIgorbXNnc3RyICJWaXNhIHJlZmVyZW5zZXIiCisKKyM6IGdpdGs6MjA3NAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICJTdGFydGEgZ2l0IGd1aSIKKworIzogZ2l0azoyMDc2Cittc2dpZCAiJlF1aXQiCittc2dzdHIgIkF2c2x1dGEiCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICJBcmtpdiIKKworIzogZ2l0azoyMDgwCittc2dpZCAiJlByZWZlcmVuY2VzIgorbXNnc3RyICJJbnN0w6RsbG5pbmdhciIKKworIzogZ2l0azoyMDc5Cittc2dpZCAiJkVkaXQiCittc2dzdHIgIlJlZGlnZXJhIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgIk55IHZ5Li4uIgorCisjOiBnaXRrOjIwODUKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICLDhG5kcmEgdnkuLi4iCisKKyM6IGdpdGs6MjA4NgorbXNnaWQgIiZEZWxldGUgdmlldyIKK21zZ3N0ciAiVGEgYm9ydCB2eSIKKworIzogZ2l0azoyMDg4IGdpdGs6NDA0MworbXNnaWQgIiZBbGwgZmlsZXMiCittc2dzdHIgIkFsbGEgZmlsZXIiCisKKyM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKK21zZ2lkICImVmlldyIKK21zZ3N0ciAiVmlzYSIKKworIzogZ2l0azoyMDkzIGdpdGs6MjEwMyBnaXRrOjMwMTIKK21zZ2lkICImQWJvdXQgZ2l0ayIKK21zZ3N0ciAiT20gZ2l0ayIKKworIzogZ2l0azoyMDk0IGdpdGs6MjEwOAorbXNnaWQgIiZLZXkgYmluZGluZ3MiCittc2dzdHIgIlRhbmdlbnRib3Jkc2JpbmRuaW5nYXIiCisKKyM6IGdpdGs6MjA5MiBnaXRrOjIxMDcKK21zZ2lkICImSGVscCIKK21zZ3N0ciAiSGrDpGxwIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEtaWQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIlJhZCIKKworIzogZ2l0azoyMjY3Cittc2dpZCAiRmluZCIKK21zZ3N0ciAiU8O2ayIKKworIzogZ2l0azoyMjk1Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICJpbmNoZWNrbmluZyIKKworIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3CisjOiBnaXRrOjY5MTIKK21zZ2lkICJjb250YWluaW5nOiIKK21zZ3N0ciAic29tIGlubmVow6VsbGVyOiIKKworIzogZ2l0azoyMzAyIGdpdGs6MzUyNiBnaXRrOjM1MzEgZ2l0azo0NzYzCittc2dpZCAidG91Y2hpbmcgcGF0aHM6IgorbXNnc3RyICJzb20gcsO2ciBzw7ZrdsOkZzoiCisKKyM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKK21zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKK21zZ3N0ciAic29tIGzDpGdnZXIvdGlsbCB0YXIgYm9ydCBzdHLDpG5nOiIKKworIzogZ2l0azoyMzA0IGdpdGs6NDc3OQorbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAiw6RuZHJhciByYWRlciBzb20gbWF0Y2hhcjoiCisKKyM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY2Cittc2dpZCAiRXhhY3QiCittc2dzdHIgIkV4YWt0IgorCisjOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMworbXNnaWQgIklnbkNhc2UiCittc2dzdHIgIklnblZlcnNhbGVyIgorCisjOiBnaXRrOjIzMTUgZ2l0azo0NzM2IGdpdGs6NDg1MiBnaXRrOjY3MTkKK21zZ2lkICJSZWdleHAiCittc2dzdHIgIlJlZy51dHRyLiIKKworIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzQgZ2l0azo0OTA0IGdpdGs6NDkxMSBnaXRrOjY4NDggZ2l0azo2OTE2Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiQWxsYSBmw6RsdCIKKworIzogZ2l0azoyMzE4IGdpdGs6NDg3MSBnaXRrOjQ5MDQgZ2l0azo2Nzg2Cittc2dpZCAiSGVhZGxpbmUiCittc2dzdHIgIlJ1YnJpayIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQorbXNnaWQgIkNvbW1lbnRzIgorbXNnc3RyICJLb21tZW50YXJlciIKKworIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjQ4NzYgZ2l0azo0OTExIGdpdGs6Njc4NiBnaXRrOjczMjQgZ2l0azo4ODMwCisjOiBnaXRrOjg4NDUKK21zZ2lkICJBdXRob3IiCittc2dzdHIgIkbDtnJmYXR0YXJlIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIkluY2hlY2thcmUiCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiU8O2ayIKKworIzogZ2l0azoyMzU4Cittc2dpZCAiRGlmZiIKK21zZ3N0ciAiRGlmZiIKKworIzogZ2l0azoyMzYwCittc2dpZCAiT2xkIHZlcnNpb24iCittc2dzdHIgIkdhbW1hbCB2ZXJzaW9uIgorCisjOiBnaXRrOjIzNjIKK21zZ2lkICJOZXcgdmVyc2lvbiIKK21zZ3N0ciAiTnkgdmVyc2lvbiIKKworIzogZ2l0azoyMzY0Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAiUmFkZXIgc2FtbWFuaGFuZyIKKworIzogZ2l0azoyMzc0Cittc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKK21zZ3N0ciAiSWdub3JlcmEgw6RuZHJpbmdhciBpIGJsYW5rc3RlZyIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICJSYWQtZGlmZiIKKworIzogZ2l0azoyNDQ1Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIlBhdGNoIgorCisjOiBnaXRrOjI0NDcKK21zZ2lkICJUcmVlIgorbXNnc3RyICJUcsOkZCIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzNworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiRGlmZiBkZW5uYSAtPiBtYXJrZXJhZCIKKworIzogZ2l0azoyNjE4IGdpdGs6MjYzOAorbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKK21zZ3N0ciAiRGlmZiBtYXJrZXJhZCAtPiBkZW5uYSIKKworIzogZ2l0azoyNjE5IGdpdGs6MjYzOQorbXNnaWQgIk1ha2UgcGF0Y2giCittc2dzdHIgIlNrYXBhIHBhdGNoIgorCisjOiBnaXRrOjI2MjAgZ2l0azo5MjU0Cittc2dpZCAiQ3JlYXRlIHRhZyIKK21zZ3N0ciAiU2thcGEgdGFnZyIKKworIzogZ2l0azoyNjIxIGdpdGs6OTM3MQorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJTa3JpdiBpbmNoZWNrbmluZyB0aWxsIGZpbCIKKworIzogZ2l0azoyNjIyIGdpdGs6OTQyOAorbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgorbXNnc3RyICJTa2FwYSBueSBncmVuIgorCisjOiBnaXRrOjI2MjMKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiUGxvY2thIGRlbm5hIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLDhXRlcnN0w6RsbCBIRUFELWdyZW5lbiBoaXQiCisKKyM6IGdpdGs6MjYyNQorbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCittc2dzdHIgIk1hcmtlcmEgZGVubmEgaW5jaGVja25pbmciCisKKyM6IGdpdGs6MjYyNgorbXNnaWQgIlJldHVybiB0byBtYXJrIgorbXNnc3RyICLDhXRlcmfDpSB0aWxsIG1hcmtlcmluZyIKKworIzogZ2l0azoyNjI3Cittc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCittc2dzdHIgIkhpdHRhIGVmdGVyZsO2bGphcmUgdGlsbCBkZW5uYSBvY2ggbWFya2VyYSIKKworIzogZ2l0azoyNjI4Cittc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCittc2dzdHIgIkrDpG1mw7ZyIG1lZCBtYXJrZXJhZCBpbmNoZWNrbmluZyIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJEaWZmIGRlbm5hIC0+IG1hcmtlcmFkIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI2MzAgZ2l0azoyNjQxCittc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCittc2dzdHIgIkRpZmYgbWFya2VyYWQgaW5jaGVja25pbmcgLT4gZGVubmEiCisKKyM6IGdpdGs6MjYzMQorbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiw4VuZ3JhIGRlbm5hIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI2NDcKK21zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCittc2dzdHIgIkNoZWNrYSB1dCBkZW5uYSBncmVuIgorCisjOiBnaXRrOjI2NDgKK21zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCittc2dzdHIgIlRhIGJvcnQgZGVubmEgZ3JlbiIKKworIzogZ2l0azoyNjQ5Cittc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXRrOjI2NTYKK21zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCittc2dzdHIgIk1hcmtlcmEgw6R2ZW4gZGV0dGEiCisKKyM6IGdpdGs6MjY1NworbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCittc2dzdHIgIk1hcmtlcmEgYmFyYSBkZXR0YSIKKworIzogZ2l0azoyNjU4Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiIKK21zZ3N0ciAiRXh0ZXJuIGRpZmYiCisKKyM6IGdpdGs6MjY1OQorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIktsYW5kcmEgZsO2csOkbGRyYWluY2hlY2tuaW5nIgorCisjOiBnaXRrOjI2NjAKK21zZ2lkICJDb3B5IHBhdGgiCittc2dzdHIgIiIKKworIzogZ2l0azoyNjY3Cittc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgorbXNnc3RyICJWaXNhIHVyc3BydW5nZXQgZsO2ciBkZW4gaMOkciByYWRlbiIKKworIzogZ2l0azoyNjY4Cittc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgorbXNnc3RyICJLw7ZyIGdpdCBndWkgYmxhbWUgcMOlIGRlbiBow6RyIHJhZGVuIgorCisjOiBnaXRrOjMwMTQKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0gZW4gaW5jaGVja25pbmdzdmlzYXJlIGbDtnIgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIkFudsOkbmQgb2NoIHZpZGFyZWbDtnJtZWRsYSBlbmxpZ3QgdmlsbGtvcmVuIGkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCisKKyM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgIlN0w6RuZyIKKworIzogZ2l0azozMDQzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIlRhbmdlbnRib3Jkc2JpbmRuaW5nYXIgZsO2ciBHaXRrIgorCisjOiBnaXRrOjMwNDYKK21zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCittc2dzdHIgIlRhbmdlbnRib3Jkc2JpbmRuaW5nYXIgZsO2ciBHaXRrOiIKKworIzogZ2l0azozMDQ4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVE+XHRcdFF1aXQiCittc2dzdHIgIjwlcy1RPlx0XHRBdnNsdXRhIgorCisjOiBnaXRrOjMwNDkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgorbXNnc3RyICI8JXMtVz5cdFx0U3TDpG5nIGbDtm5zdGVyIgorCisjOiBnaXRrOjMwNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHRHw6UgdGlsbCBmw7Zyc3RhIGluY2hlY2tuaW5nIgorCisjOiBnaXRrOjMwNTEKK21zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHRHw6UgdGlsbCBzaXN0YSBpbmNoZWNrbmluZyIKKworIzogZ2l0azozMDUyCittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8VXBwPiwgcCwga1x0R8OlIGVuIGluY2hlY2tuaW5nIHVwcCIKKworIzogZ2l0azozMDUzCittc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKK21zZ3N0ciAiPE5lZD4sIG4sIGpcdEfDpSBlbiBpbmNoZWNrbmluZyBuZWQiCisKKyM6IGdpdGs6MzA1NAorbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxWw6Ruc3Rlcj4sIHosIGhcdEfDpSBiYWvDpXQgaSBoaXN0b3Jpa2VuIgorCisjOiBnaXRrOjMwNTUKK21zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiPEjDtmdlcj4sIHgsIGxcdEfDpSBmcmFtw6V0IGkgaGlzdG9yaWtlbiIKKworIzogZ2l0azozMDU2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjwlcy1uPlx0R8OlIHRpbGwgYWt0dWVsbCBpbmNoZWNrbmluZ3Mgbjp0ZSBmw7Zyw6RsZGVyIGkgaGlzdG9yaWVsaXN0YW4iCisKKyM6IGdpdGs6MzA1NworbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0R8OlIHVwcCBlbiBzaWRhIGkgaW5jaGVja25pbmdzbGlzdGFuIgorCisjOiBnaXRrOjMwNTgKK21zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCittc2dzdHIgIjxQYWdlRG93bj5cdEfDpSBuZWQgZW4gc2lkYSBpIGluY2hlY2tuaW5nc2xpc3RhbiIKKworIzogZ2l0azozMDU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtSG9tZT5cdFJ1bGxhIHRpbGwgYsO2cmphbiBhdiBpbmNoZWNrbmluZ3NsaXN0YW4iCisKKyM6IGdpdGs6MzA2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx0UnVsbGEgdGlsbCBzbHV0ZXQgYXYgaW5jaGVja25pbmdzbGlzdGFuIgorCisjOiBnaXRrOjMwNjEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCittc2dzdHIgIjwlcy1VcHA+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gdXBwIGV0dCBzdGVnIgorCisjOiBnaXRrOjMwNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtTmVkPlx0UnVsbGEgaW5jaGVja25pbmdzbGlzdGFuIG5lZCBldHQgc3RlZyIKKworIzogZ2l0azozMDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiB1cHAgZW4gc2lkYSIKKworIzogZ2l0azozMDY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiBuZWQgZW4gc2lkYSIKKworIzogZ2l0azozMDY1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2tpZnQtVXBwPlx0U8O2ayBiYWvDpXQgKHVwcMOldCwgc2VuYXJlIGluY2hlY2tuaW5nYXIpIgorCisjOiBnaXRrOjMwNjYKK21zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKK21zZ3N0ciAiPFNraWZ0LU5lZD5cdFPDtmsgZnJhbcOldCAobmVkw6V0LCB0aWRpZ2FyZSBpbmNoZWNrbmluZ2FyKSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCBlbiBzaWRhIgorCisjOiBnaXRrOjMwNjgKK21zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPEJha3N0ZWc+XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCBlbiBzaWRhIgorCisjOiBnaXRrOjMwNjkKK21zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKK21zZ3N0ciAiPEJsYW5rc3RlZz5cdFJ1bGxhIGRpZmZ2aXNuaW5nZW4gbmVkIGVuIHNpZGEiCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCAxOCByYWRlciIKKworIzogZ2l0azozMDcxCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0UnVsbGEgZGlmZnZpc25pbmdlbiBuZWQgMTggcmFkZXIiCisKKyM6IGdpdGs6MzA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0U8O2ayIKKworIzogZ2l0azozMDczCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKK21zZ3N0ciAiPCVzLUc+XHRcdEfDpSB0aWxsIG7DpHN0YSBzw7ZrdHLDpGZmIgorCisjOiBnaXRrOjMwNzQKK21zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgorbXNnc3RyICI8UmV0dXJuPlx0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiIKKworIzogZ2l0azozMDc1CisjLCBmdXp6eQorbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgorbXNnc3RyICI8RW5kPlx0XHRHw6UgdGlsbCBzaXN0YSBpbmNoZWNrbmluZyIKKworIzogZ2l0azozMDc2Cittc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKK21zZ3N0ciAiL1x0XHRGb2t1c2VyYSBzw7ZrcnV0YW4iCisKKyM6IGdpdGs6MzA3NworbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKK21zZ3N0ciAiP1x0XHRHw6UgdGlsbCBmw7ZyZWfDpWVuZGUgc8O2a3Ryw6RmZiIKKworIzogZ2l0azozMDc4Cittc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKK21zZ3N0ciAiZlx0XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHRpbGwgbsOkc3RhIGZpbCIKKworIzogZ2l0azozMDc5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUz5cdFx0R8OlIHRpbGwgbsOkc3RhIHPDtmt0csOkZmYgaSBkaWZmdmlzbmluZ2VuIgorCisjOiBnaXRrOjMwODAKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgorbXNnc3RyICI8JXMtUj5cdFx0R8OlIHRpbGwgZsO2cmVnw6VlbmRlIHPDtmt0csOkZmYgaSBkaWZmdmlzbmluZ2VuIgorCisjOiBnaXRrOjMwODEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtKz5cdMOWa2EgdGVja2Vuc3RvcmxlayIKKworIzogZ2l0azozMDgyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1wbHVzPlx0w5ZrYSB0ZWNrZW5zdG9ybGVrIgorCisjOiBnaXRrOjMwODMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtTnVtLT5cdE1pbnNrYSB0ZWNrZW5zdG9ybGVrIgorCisjOiBnaXRrOjMwODQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1taW51cz5cdE1pbnNrYSB0ZWNrZW5zdG9ybGVrIgorCisjOiBnaXRrOjMwODUKK21zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKK21zZ3N0ciAiPEY1Plx0XHRVcHBkYXRlcmEiCisKKyM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKK21zZ3N0ciAiRmVsIHZpZCBza2FwYW5kZSBhdiB0ZW1wb3LDpHIga2F0YWxvZyAlczoiCisKKyM6IGdpdGs6MzU3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgorbXNnc3RyICJGZWwgdmlkIGjDpG10bmluZyBhdiAgXCIlc1wiIGZyw6VuICVzOiIKKworIzogZ2l0azozNjM1Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJrb21tYW5kbyBtaXNzbHlja2FkZXM6IgorCisjOiBnaXRrOjM3ODQKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiSW5jaGVja25pbmcgc2FrbmFzIgorCisjOiBnaXRrOjM3OTgKK21zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCittc2dzdHIgImdpdCBndWkgYmxhbWU6IGtvbW1hbmRvIG1pc3NseWNrYWRlczoiCisKKyM6IGdpdGs6MzgyOQorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCittc2dzdHIgIkt1bmRlIGludGUgbMOkc2Egc2FtbWFuc2xhZ25pbmdzaHV2dWQ6ICVzIgorCisjOiBnaXRrOjM4MzcKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKK21zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyBhdiBpbmRleDogJXMiCisKKyM6IGdpdGs6Mzg2MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCittc2dzdHIgIkt1bmRlIGludGUgc3RhcnRhIGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6Mzg2NSBnaXRrOjY3NTQKK21zZ2lkICJTZWFyY2hpbmciCittc2dzdHIgIlPDtmtlciIKKworIzogZ2l0azozODk3CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgorbXNnc3RyICJGZWwgdmlkIGvDtnJuaW5nIGF2IGdpdCBibGFtZTogJXMiCisKKyM6IGdpdGs6MzkyNQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCittc2dzdHIgIlJhZGVuIGtvbW1lciBmcsOlbiBpbmNoZWNrbmluZ2VuICVzLCBzb20gaW50ZSBmaW5ucyBpIGRlbm5hIHZ5IgorCisjOiBnaXRrOjM5MzkKK21zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgorbXNnc3RyICJFeHRlcm50IGRpZmYtdmVya3R5ZyBtaXNzbHlja2FkZXM6IgorCisjOiBnaXRrOjQwNzAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAiRGVmaW5pdGlvbiBhdiBHaXRrLXZ5IgorCisjOiBnaXRrOjQwNzQKK21zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCittc2dzdHIgIlNwYXJhIGRlbm5hIHZ5IgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJSZWZlcmVuc2VyIChibGFua3N0ZWdzYXZkZWxhZCBsaXN0YSk6IgorCisjOiBnaXRrOjQwNzYKK21zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgorbXNnc3RyICJHcmVuYXIgJiB0YWdnYXI6IgorCisjOiBnaXRrOjQwNzcKK21zZ2lkICJBbGwgcmVmcyIKK21zZ3N0ciAiQWxsYSByZWZlcmVuc2VyIgorCisjOiBnaXRrOjQwNzgKK21zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKK21zZ3N0ciAiQWxsYSAobG9rYWxhKSBncmVuYXIiCisKKyM6IGdpdGs6NDA3OQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJBbGxhIHRhZ2dhciIKKworIzogZ2l0azo0MDgwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiQWxsYSBmasOkcnJzcMOlcmFuZGUgZ3JlbmFyIgorCisjOiBnaXRrOjQwODEKK21zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgorbXNnc3RyICJJbmNoZWNrbmluZ3NpbmZvIChyZWd1bGrDpHJhIHV0dHJ5Y2spOiIKKworIzogZ2l0azo0MDgyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiRsO2cmZhdHRhcmU6IgorCisjOiBnaXRrOjQwODMKK21zZ2lkICJDb21taXR0ZXI6IgorbXNnc3RyICJJbmNoZWNrYXJlOiIKKworIzogZ2l0azo0MDg0Cittc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgorbXNnc3RyICJJbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKKworIzogZ2l0azo0MDg1Cittc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCittc2dzdHIgIk1vdHN2YXJhciBhbGxhIGtyaXRlcmllciBmw7ZyIGluY2hlY2tuaW5nc2luZm8iCisKKyM6IGdpdGs6NDA4NgorIywgZnV6enkKK21zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgorbXNnc3RyICJNb3RzdmFyYXIgaW5nYSBrcml0ZXJpZXIgZsO2ciBpbmNoZWNrbmluZ3NpbmZvIgorCisjOiBnaXRrOjQwODcKK21zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKK21zZ3N0ciAiw4RuZHJpbmdhciBhdiBmaWxlcjoiCisKKyM6IGdpdGs6NDA4OAorbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAiRmFzdCBzdHLDpG5nIgorCisjOiBnaXRrOjQwODkKK21zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCittc2dzdHIgIlJlZ3VsasOkcnQgdXR0cnljayIKKworIzogZ2l0azo0MDkwCittc2dpZCAiU2VhcmNoIHN0cmluZzoiCittc2dzdHIgIlPDtmtzdHLDpG5nOiIKKworIzogZ2l0azo0MDkxCittc2dpZCAiIgorIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorbXNnc3RyICIiCisiSW5jaGVja2luZ3NkYXR1bSAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCisiMTU6Mjc6MzhcIik6IgorCisjOiBnaXRrOjQwOTIKK21zZ2lkICJTaW5jZToiCittc2dzdHIgIkZyw6VuOiIKKworIzogZ2l0azo0MDkzCittc2dpZCAiVW50aWw6IgorbXNnc3RyICJUaWxsOiIKKworIzogZ2l0azo0MDk0Cittc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCittc2dzdHIgIkJlZ3LDpG5zYSBvY2gvZWxsZXIgaG9wcGEgw7Z2ZXIgZXR0IGFudGFsIHJldmlzaW9uZXIgKHBvc2l0aXZ0IGhlbHRhbCk6IgorCisjOiBnaXRrOjQwOTUKK21zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCittc2dzdHIgIkFudGFsIGF0dCB2aXNhOiIKKworIzogZ2l0azo0MDk2Cittc2dpZCAiTnVtYmVyIHRvIHNraXA6IgorbXNnc3RyICJBbnRhbCBhdHQgaG9wcGEgw7Z2ZXI6IgorCisjOiBnaXRrOjQwOTcKK21zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgorbXNnc3RyICJEaXZlcnNlIGFsdGVybmF0aXY6IgorCisjOiBnaXRrOjQwOTgKK21zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCittc2dzdHIgIlN0cmlrdCBkYXR1bXNvcnRlcmluZyIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIk1hcmtlcmEgc2lkb2dyZW5hciIKKworIzogZ2l0azo0MTAwCittc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgorbXNnc3RyICJCZWdyw6Ruc2EgdGlsbCBmw7Zyc3RhIGbDtnLDpGxkZXIiCisKKyM6IGdpdGs6NDEwMQorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJFbmtlbCBoaXN0b3JpayIKKworIzogZ2l0azo0MTAyCittc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCittc2dzdHIgIll0dGVybGlnYXJlIGFyZ3VtZW50IHRpbGwgZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJBbmdlIGZpbGVyIG9jaCBrYXRhbG9nZXIgYXR0IHRhIG1lZCwgZW4gcGVyIHJhZDoiCisKKyM6IGdpdGs6NDEwNAorbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgorbXNnc3RyICJLb21tYW5kbyBmw7ZyIGF0dCBnZW5lcmVyYSBmbGVyIGluY2hlY2tuaW5nYXIgYXR0IHRhIG1lZDoiCisKKyM6IGdpdGs6NDIyOAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogcmVkaWdlcmEgdnkiCisKKyM6IGdpdGs6NDIzNgorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICIgLSBrcml0ZXJpZXIgZsO2ciB2YWwgYXYgcmV2aXNpb25lciIKKworIzogZ2l0azo0MjQxCittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJOYW1uIHDDpSB2eSIKKworIzogZ2l0azo0MzE2Cittc2dpZCAiQXBwbHkgKEY1KSIKK21zZ3N0ciAiQW52w6RuZCAoRjUpIgorCisjOiBnaXRrOjQzNTQKK21zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCittc2dzdHIgIkZlbCBpIGFyZ3VtZW50IGbDtnIgdmFsIGF2IGluY2hlY2tuaW5nYXI6IgorCisjOiBnaXRrOjQ0MDkgZ2l0azo0NDYyIGdpdGs6NDkyNCBnaXRrOjQ5MzggZ2l0azo2MjA4IGdpdGs6MTIzNzMgZ2l0azoxMjM3NAorbXNnaWQgIk5vbmUiCittc2dzdHIgIkluZ2V0IgorCisjOiBnaXRrOjUwMjEgZ2l0azo1MDI2Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAiQXZrb21saW5nIgorCisjOiBnaXRrOjUwMjIKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiSW50ZSBhdmtvbWxpbmciCisKKyM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiRsO2cmZhZGVyIgorCisjOiBnaXRrOjUwMzAKK21zZ2lkICJOb3QgYW5jZXN0b3IiCittc2dzdHIgIkludGUgZsO2cmZhZGVyIgorCisjOiBnaXRrOjUzMjQKK21zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCittc2dzdHIgIkxva2FsYSDDpG5kcmluZ2FyIHNwYXJhZGUgaSBpbmRleGV0IG1lbiBpbnRlIGluY2hlY2thZGUiCisKKyM6IGdpdGs6NTM2MAorbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgorbXNnc3RyICJMb2thbGEgw6RuZHJpbmdhciwgZWogc3BhcmFkZSBpIGluZGV4ZXQiCisKKyM6IGdpdGs6NzEzNAorbXNnaWQgImFuZCBtYW55IG1vcmUiCittc2dzdHIgIm1lZCBtw6VuZ2EgZmxlcmEiCisKKyM6IGdpdGs6NzEzNworbXNnaWQgIm1hbnkiCittc2dzdHIgIm3DpW5nYSIKKworIzogZ2l0azo3MzI4Cittc2dpZCAiVGFnczoiCittc2dzdHIgIlRhZ2dhcjoiCisKKyM6IGdpdGs6NzM0NSBnaXRrOjczNTEgZ2l0azo4ODI1Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICJGw7Zyw6RsZGVyIgorCisjOiBnaXRrOjczNTYKK21zZ2lkICJDaGlsZCIKK21zZ3N0ciAiQmFybiIKKworIzogZ2l0azo3MzY1Cittc2dpZCAiQnJhbmNoIgorbXNnc3RyICJHcmVuIgorCisjOiBnaXRrOjczNjgKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICJGw7ZsamVyIgorCisjOiBnaXRrOjczNzEKK21zZ2lkICJQcmVjZWRlcyIKK21zZ3N0ciAiRsO2cmVnw6VyIgorCisjOiBnaXRrOjc5NjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKK21zZ3N0ciAiRmVsIHZpZCBow6RtdG5pbmcgYXYgZGlmZjogJXMiCisKKyM6IGdpdGs6ODY1MAorbXNnaWQgIkdvdG86IgorbXNnc3RyICJHw6UgdGlsbDoiCisKKyM6IGdpdGs6ODY3MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgorbXNnc3RyICJGw7Zya29ydGF0IFNIQTEtaWQgJXMgw6RyIHR2ZXR5ZGlndCIKKworIzogZ2l0azo4Njc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJSZXZpc2lvbmVuICVzIMOkciBpbnRlIGvDpG5kIgorCisjOiBnaXRrOjg2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiU0hBLWlkOnQgJXMgw6RyIGludGUga8OkbnQiCisKKyM6IGdpdGs6ODY5MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgorbXNnc3RyICJSZXZpc2lvbmVuICVzIGZpbm5zIGludGUgaSBkZW4gbnV2YXJhbmRlIHZ5biIKKworIzogZ2l0azo4ODMyIGdpdGs6ODg0NworbXNnaWQgIkRhdGUiCittc2dzdHIgIkRhdHVtIgorCisjOiBnaXRrOjg4MzUKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAiQmFybiIKKworIzogZ2l0azo4ODk4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCittc2dzdHIgIsOFdGVyc3TDpGxsIGdyZW5lbiAlcyBoaXQiCisKKyM6IGdpdGs6ODkwMAorbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgorbXNnc3RyICJGcsOlbmtvcHBsYWQgaGVhZDoga2FuIGludGUgw6V0ZXJzdMOkbGxhIgorCisjOiBnaXRrOjkwMDUgZ2l0azo5MDExCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiSG9wcGFyIMO2dmVyIHNhbW1hbnNsYWduaW5nc2luY2hlY2tuaW5nICIKKworIzogZ2l0azo5MDIwIGdpdGs6OTAyNQorbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKK21zZ3N0ciAiRmVsIHZpZCBow6RtdG5pbmcgYXYgcGF0Y2gtaWQgZsO2ciAiCisKKyM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKK21zZ2lkICIgLSBzdG9wcGluZ1xuIgorbXNnc3RyICIgLSBzdGFubmFyXG4iCisKKyM6IGdpdGs6OTAzMSBnaXRrOjkwMzQgZ2l0azo5MDQyIGdpdGs6OTA1NiBnaXRrOjkwNjUKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJJbmNoZWNrbmluZyAiCisKKyM6IGdpdGs6OTAzNQorbXNnaWQgIiIKKyIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKKyIgICAgICAgIgorbXNnc3RyICIiCisiIMOkciBzYW1tYSBwYXRjaCBzb21cbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDMKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIgc2tpbGplciBzaWcgZnLDpW5cbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDUKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisiU2tpbGxuYWQgbWVsbGFuIGluY2hlY2tuaW5nYXI6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIGhhciAlcyBiYXJuIC0gc3Rhbm5hclxuIgorCisjOiBnaXRrOjkwODUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKK21zZ3N0ciAiRmVsIHZpZCBza3Jpdm5pbmcgYXYgaW5jaGVja25pbmcgdGlsbCBmaWw6ICVzIgorCisjOiBnaXRrOjkwOTEKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgorbXNnc3RyICJGZWwgdmlkIGrDpG1mw7ZyZWxzZSBhdiBpbmNoZWNrbmluZ2FyOiAlcyIKKworIzogZ2l0azo5MTM3Cittc2dpZCAiVG9wIgorbXNnc3RyICJUb3BwIgorCisjOiBnaXRrOjkxMzgKK21zZ2lkICJGcm9tIgorbXNnc3RyICJGcsOlbiIKKworIzogZ2l0azo5MTQzCittc2dpZCAiVG8iCittc2dzdHIgIlRpbGwiCisKKyM6IGdpdGs6OTE2NworbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJHZW5lcmVyYSBwYXRjaCIKKworIzogZ2l0azo5MTY5Cittc2dpZCAiRnJvbToiCittc2dzdHIgIkZyw6VuOiIKKworIzogZ2l0azo5MTc4Cittc2dpZCAiVG86IgorbXNnc3RyICJUaWxsOiIKKworIzogZ2l0azo5MTg3Cittc2dpZCAiUmV2ZXJzZSIKK21zZ3N0ciAiVsOkbmQiCisKKyM6IGdpdGs6OTE4OSBnaXRrOjkzODUKK21zZ2lkICJPdXRwdXQgZmlsZToiCittc2dzdHIgIlV0ZGF0YWZpbDoiCisKKyM6IGdpdGs6OTE5NQorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJHZW5lcmVyYSIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJGZWwgdmlkIGdlbmVyZXJpbmcgYXYgcGF0Y2g6IgorCisjOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAorbXNnaWQgIklEOiIKK21zZ3N0ciAiSWQ6IgorCisjOiBnaXRrOjkyNjUKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIlRhZ2duYW1uOiIKKworIzogZ2l0azo5MjY4Cittc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCittc2dzdHIgIlRhZ2dtZWRkZWxhbmRldCDDpHIgdmFsZnJpdHQiCisKKyM6IGdpdGs6OTI3MAorbXNnaWQgIlRhZyBtZXNzYWdlOiIKK21zZ3N0ciAiVGFnZ21lZGRlbGFuZGU6IgorCisjOiBnaXRrOjkyNzQgZ2l0azo5NDM5Cittc2dpZCAiQ3JlYXRlIgorbXNnc3RyICJTa2FwYSIKKworIzogZ2l0azo5MjkyCittc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJJbmdldCB0YWdnbmFtbiBhbmdhdnMiCisKKyM6IGdpdGs6OTI5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlRhZ2dlbiBcIiVzXCIgZmlubnMgcmVkYW4iCisKKyM6IGdpdGs6OTMwNgorbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCittc2dzdHIgIkZlbCB2aWQgc2thcGFuZGUgYXYgdGFnZzoiCisKKyM6IGdpdGs6OTM4MgorbXNnaWQgIkNvbW1hbmQ6IgorbXNnc3RyICJLb21tYW5kbzoiCisKKyM6IGdpdGs6OTM5MAorbXNnaWQgIldyaXRlIgorbXNnc3RyICJTa3JpdiIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBpbmNoZWNrbmluZzoiCisKKyM6IGdpdGs6OTQzNQorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJOYW1uOiIKKworIzogZ2l0azo5NDU4Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiQW5nZSBldHQgbmFtbiBmw7ZyIGRlbiBueWEgZ3JlbmVuIgorCisjOiBnaXRrOjk0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyByZWRhbi4gU2tyaXZhIMO2dmVyPyIKKworIzogZ2l0azo5NTMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIiIKKyJJbmNoZWNrbmluZ2VuICVzIGZpbm5zIHJlZGFuIHDDpSBncmVuZW4gJXMgLS0gc2thbGwgZGVuIHZlcmtsaWdlbiBhcHBsaWNlcmFzICIKKyJww6Ugbnl0dD8iCisKKyM6IGdpdGs6OTUzNQorbXNnaWQgIkNoZXJyeS1waWNraW5nIgorbXNnc3RyICJQbG9ja2FyIgorCisjOiBnaXRrOjk1NDQKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCisiUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiQ2hlcnJ5LXBpY2sgbWlzc2x5Y2thZGVzIHDDpSBncnVuZCBhdiBsb2thbGEgw6RuZHJpbmdhciBpIGZpbGVuIFwiJXNcIi5cbiIKKyJDaGVja2EgaW4sIMOldGVyc3TDpGxsIGVsbGVyIHNwYXJhIHVuZGFuIChzdGFzaCkgZGluYSDDpG5kcmluZ2FyIG9jaCBmw7Zyc8O2ayAiCisiaWdlbi4iCisKKyM6IGdpdGs6OTU1MAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkNoZXJyeS1waWNrIG1pc3NseWNrYWRlcyBww6UgZ3J1bmQgYXYgZW4gc2FtbWFuc2xhZ25pbmdza29uZmxpa3QuXG4iCisiVmlsbCBkdSBrw7ZyYSBnaXQgY2l0b29sIGbDtnIgYXR0IGzDtnNhIGRlbj8iCisKKyM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiSW5nYSDDpG5kcmluZ2FyIGluY2hlY2thZGUiCisKKyM6IGdpdGs6OTU5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorbXNnc3RyICJJbmNoZWNrbmluZ2VuICVzIGZpbm5zIGludGUgcMOlIGdyZW5lbiAlcyAtLSB2aWxsIGR1IHZlcmtsaWdlbiDDpW5ncmE/IgorCisjOiBnaXRrOjk1OTgKK21zZ2lkICJSZXZlcnRpbmciCittc2dzdHIgIsOFbmdyYXIiCisKKyM6IGdpdGs6OTYwNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCisiY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorbXNnc3RyICIiCisiTWlzc2x5Y2thZGVzIG1lZCBhdHQgw6VuZ3JhIHDDpSBncnVuZCBhdiBsb2thbGEgw6RuZHJpbmdhciBpIGbDtmxqYW5kZSBmaWxlcjolcy4gIgorIkNoZWNrYSBpbiwgw6V0ZXJzdMOkbGwgZWxsZXIgc3BhcmEgdW5kYW4gKHN0YXNoKSBkaW5hIMOkbmRyaW5nYXIgb2NoIGbDtnJzw7ZrICIKKyJpZ2VuLiIKKworIzogZ2l0azo5NjEwCittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMgbWVkIGF0dCDDpW5ncmEgcMOlIGdydW5kIGF2IGVuIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0LlxuIgorIiBWaWxsIGR1IGvDtnJhIGdpdCBjaXRvb2wgZsO2ciBhdHQgbMO2c2EgZGVuPyIKKworIzogZ2l0azo5NjUzCittc2dpZCAiQ29uZmlybSByZXNldCIKK21zZ3N0ciAiQmVrcsOkZnRhIMOldGVyc3TDpGxsbmluZyIKKworIzogZ2l0azo5NjU1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKK21zZ3N0ciAiw4V0ZXJzdMOkbGxhIGdyZW5lbiAlcyB0aWxsICVzPyIKKworIzogZ2l0azo5NjU3Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIlR5cCBhdiDDpXRlcnN0w6RsbG5pbmc6IgorCisjOiBnaXRrOjk2NjAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiTWp1azogUsO2ciBpbnRlIHV0Y2hlY2tuaW5nIG9jaCBpbmRleCIKKworIzogZ2l0azo5NjYzCittc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorbXNnc3RyICJCbGFuZGFkOiBSw7ZyIGludGUgdXRjaGVja25pbmcsIMOldGVyc3TDpGxsIGluZGV4IgorCisjOiBnaXRrOjk2NjYKK21zZ2lkICIiCisiSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgorIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIkjDpXJkOiDDhXRlcnN0w6RsbCB1dGNoZWNrbmluZyBvY2ggaW5kZXhcbiIKKyIoZsO2cmthc3RhciBBTExBIGxva2FsYSDDpG5kcmluZ2FyKSIKKworIzogZ2l0azo5NjgzCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLDhXRlcnN0w6RsbGVyIgorCisjOiBnaXRrOjk3NDMKK21zZ2lkICJDaGVja2luZyBvdXQiCittc2dzdHIgIkNoZWNrYXIgdXQiCisKKyM6IGdpdGs6OTc5NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIkthbiBpbnRlIHRhIGJvcnQgZGVuIGp1c3QgbnUgdXRjaGVja2FkZSBncmVuZW4iCisKKyM6IGdpdGs6OTgwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiSW5jaGVja25pbmdhcm5hIHDDpSBncmVuZW4gJXMgZXhpc3RlcmFyIGludGUgcMOlIG7DpWdvbiBhbm5hbiBncmVuLlxuIgorIlZpbGwgZHUgdmVya2xpZ2VuIHRhIGJvcnQgZ3JlbmVuICVzPyIKKworIzogZ2l0azo5ODMzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgorbXNnc3RyICJUYWdnYXIgb2NoIGh1dnVkZW46ICVzIgorCisjOiBnaXRrOjk4NTAKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkZpbHRlciIKKworIzogZ2l0azoxMDE0NgorbXNnaWQgIiIKKyJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKKyJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKK21zZ3N0ciAiIgorIkZlbCB2aWQgbMOkc25pbmcgYXYgaW5mb3JtYXRpb24gb20gaW5jaGVja25pbmdzdG9wb2xvZ2k7IGluZm9ybWF0aW9uIG9tICIKKyJncmVuYXIgb2NoIGbDtnJlZ8OlZW5kZS9zZW5hcmUgdGFnZ2FyIGtvbW1lciBpbnRlIHZhcmEga29tcGxldHQuIgorCisjOiBnaXRrOjExMTIzCittc2dpZCAiVGFnIgorbXNnc3RyICJUYWdnIgorCisjOiBnaXRrOjExMTI3Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjExMjEwCittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIlRlY2tlbnNuaXR0c3bDpGxqYXJlIGbDtnIgR2l0ayIKKworIzogZ2l0azoxMTIyNworbXNnaWQgIkIiCittc2dzdHIgIkYiCisKKyM6IGdpdGs6MTEyMzAKK21zZ2lkICJJIgorbXNnc3RyICJLIgorCisjOiBnaXRrOjExMzQ4Cittc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJBbHRlcm5hdGl2IGbDtnIgaW5jaGVja25pbmdzbGlzdHZ5IgorCisjOiBnaXRrOjExMzUxCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICJNYXhpbWFsIGdyYWZicmVkZCAocmFkZXIpIgorCisjOiBnaXRrOjExMzU1CisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAiTWF4aW1hbCBncmFmYnJlZGQgKCUgYXYgcnV0YSkiCisKKyM6IGdpdGs6MTEzNTgKK21zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIlZpc2EgbG9rYWxhIMOkbmRyaW5nYXIiCisKKyM6IGdpdGs6MTEzNjEKK21zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgorbXNnc3RyICJWw6RsaiBTSEExIChsw6RuZ2QpIGF1dG9tYXRpc2t0IgorCisjOiBnaXRrOjExMzY1Cittc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKK21zZ3N0ciAiRMO2bGogZmrDpHJyLXJlZmVyZW5zZXIiCisKKyM6IGdpdGs6MTEzNjkKK21zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGRpZmZ2eSIKKworIzogZ2l0azoxMTM3MQorbXNnaWQgIlRhYiBzcGFjaW5nIgorbXNnc3RyICJCbGFua3N0ZWcgZsO2ciB0YWJ1bGF0b3J0ZWNrZW4iCisKKyM6IGdpdGs6MTEzNzQKK21zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgorbXNnc3RyICJWaXNhIG7DpHJsaWdnYW5kZSB0YWdnYXIvaHV2dWRlbiIKKworIzogZ2l0azoxMTM3NworbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCittc2dzdHIgIk1heGltYWx0IGFudGFsIHRhZ2dhci9odXZ1ZGVuIGF0dCB2aXNhIgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJCZWdyw6Ruc2EgZGlmZiB0aWxsIGxpc3RhZGUgc8O2a3bDpGdhciIKKworIzogZ2l0azoxMTM4MworbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgorbXNnc3RyICJTdMO2ZCBmw7ZyIGZpbHNwZWNpZmlrYSB0ZWNrZW5rb2RuaW5nYXIiCisKKyM6IGdpdGs6MTEzODkgZ2l0azoxMTUzNgorbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKK21zZ3N0ciAiRXh0ZXJudCBkaWZmLXZlcmt0eWciCisKKyM6IGdpdGs6MTEzOTAKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIlbDpGxqLi4uIgorCisjOiBnaXRrOjExMzk1Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICJBbGxtw6RubmEgaW5zdMOkbGxuaW5nYXIiCisKKyM6IGdpdGs6MTEzOTgKK21zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCittc2dzdHIgIkFudsOkbmQgdGVtYSBww6UgZsO2bnN0ZXJlbGVtZW50IgorCisjOiBnaXRrOjExNDAwCittc2dpZCAiKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KSIKK21zZ3N0ciAiKMOkbmRyaW5nZW4ga3LDpHZlciBvbXN0YXJ0KSIKKworIzogZ2l0azoxMTQwMgorbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgorbXNnc3RyICIoZsO2ciBuw6RydmFyYW5kZSBpbnRlIHRpbGxnw6RuZ2xpZ3QpIgorCisjOiBnaXRrOjExNDEzCittc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCittc2dzdHIgIkbDpHJnZXI6IHRyeWNrIGbDtnIgYXR0IHbDpGxqYSIKKworIzogZ2l0azoxMTQxNgorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiR3LDpG5zc25pdHQiCisKKyM6IGdpdGs6MTE0MTcKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgImdyw6Ruc3NuaXR0IgorCisjOiBnaXRrOjExNDIwCittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiQmFrZ3J1bmQiCisKKyM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgImJha2dydW5kIgorCisjOiBnaXRrOjExNDI0Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiRsO2cmdydW5kIgorCisjOiBnaXRrOjExNDI1Cittc2dpZCAiZm9yZWdyb3VuZCIKK21zZ3N0ciAiZsO2cmdydW5kIgorCisjOiBnaXRrOjExNDI4Cittc2dpZCAiRGlmZjogb2xkIGxpbmVzIgorbXNnc3RyICJEaWZmOiBnYW1sYSByYWRlciIKKworIzogZ2l0azoxMTQyOQorbXNnaWQgImRpZmYgb2xkIGxpbmVzIgorbXNnc3RyICJkaWZmIGdhbWxhIHJhZGVyIgorCisjOiBnaXRrOjExNDMzCittc2dpZCAiRGlmZjogbmV3IGxpbmVzIgorbXNnc3RyICJEaWZmOiBueWEgcmFkZXIiCisKKyM6IGdpdGs6MTE0MzQKK21zZ2lkICJkaWZmIG5ldyBsaW5lcyIKK21zZ3N0ciAiZGlmZiBueWEgcmFkZXIiCisKKyM6IGdpdGs6MTE0MzgKK21zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKK21zZ3N0ciAiRGlmZjogZGVsaHV2dWQiCisKKyM6IGdpdGs6MTE0NDAKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJkaWZmIGRlbGh1dnVkIgorCisjOiBnaXRrOjExNDQ0Cittc2dpZCAiTWFya2VkIGxpbmUgYmciCittc2dzdHIgIk1hcmtlcmFkIHJhZCBiYWtncnVuZCIKKworIzogZ2l0azoxMTQ0NgorbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCittc2dzdHIgIm1hcmtlcmFkIHJhZCBiYWtncnVuZCIKKworIzogZ2l0azoxMTQ1MAorbXNnaWQgIlNlbGVjdCBiZyIKK21zZ3N0ciAiTWFya2VyYWQgYmFrZ3J1bmQiCisKKyM6IGdpdGs6MTE0NTkKK21zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJUZWNrZW5zbml0dDogdHJ5Y2sgZsO2ciBhdHQgdsOkbGphIgorCisjOiBnaXRrOjExNDYxCittc2dpZCAiTWFpbiBmb250IgorbXNnc3RyICJIdXZ1ZHRlY2tlbnNuaXR0IgorCisjOiBnaXRrOjExNDYyCittc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCittc2dzdHIgIlRlY2tlbnNuaXR0IGbDtnIgZGlmZnZpc25pbmciCisKKyM6IGdpdGs6MTE0NjMKK21zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgorbXNnc3RyICJUZWNrZW5zbml0dCBmw7ZyIGFudsOkbmRhcmdyw6Ruc3NuaXR0IgorCisjOiBnaXRrOjExNDg1Cittc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKK21zZ3N0ciAiSW5zdMOkbGxuaW5nYXIgZsO2ciBHaXRrIgorCisjOiBnaXRrOjExNDk0Cittc2dpZCAiR2VuZXJhbCIKK21zZ3N0ciAiQWxsbcOkbnQiCisKKyM6IGdpdGs6MTE0OTUKK21zZ2lkICJDb2xvcnMiCittc2dzdHIgIkbDpHJnZXIiCisKKyM6IGdpdGs6MTE0OTYKK21zZ2lkICJGb250cyIKK21zZ3N0ciAiVGVja2Vuc25pdHQiCisKKyM6IGdpdGs6MTE1NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiB2w6RsaiBmw6RyZyBmw7ZyICVzIgorCisjOiBnaXRrOjEyMDU5Cittc2dpZCAiIgorIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgorIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorbXNnc3RyICIiCisiR2l0ayBrYW4gdHl2w6RyciBpbnRlIGvDtnJhIG1lZCBkZW5uYSB2ZXJzaW9uIGF2IFRjbC9Uay5cbiIKKyIgR2l0ayBrcsOkdmVyIMOldG1pbnN0b25lIFRjbC9UayA4LjQuIgorCisjOiBnaXRrOjEyMjY5Cittc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKK21zZ3N0ciAiSGl0dGFyIGluZ2V0IGdpdC1hcmtpdiBow6RyLiIKKworIzogZ2l0azoxMjMxNgorIywgdGNsLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKK21zZ3N0ciAiVHZldHlkaWd0IGFyZ3VtZW50IFwiJXNcIjogYsOlZGUgcmV2aXNpb24gb2NoIGZpbG5hbW4iCisKKyM6IGdpdGs6MTIzMjgKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICJGZWxha3RpZ2EgYXJndW1lbnQgdGlsbCBnaXRrOiIKKworI34gbXNnaWQgIm1jIgorI34gbXNnc3RyICJtYyIKKworI34gbXNnaWQgIiIKKyN+ICJcbiIKKyN+ICJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKKyN+ICJcbiIKKyN+ICJDb3B5cmlnaHQgwqkgMjAwNS0yMDE1IFBhdWwgTWFja2VycmFzXG4iCisjfiAiXG4iCisjfiAiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKKyN+IG1zZ3N0ciAiIgorI34gIlxuIgorI34gIkdpdGsgLSBlbiBpbmNoZWNrbmluZ3N2aXNhcmUgZsO2ciBnaXRcbiIKKyN+ICJcbiIKKyN+ICJDb3B5cmlnaHQgwqkgMjAwNS0yMDE1IFBhdWwgTWFja2VycmFzXG4iCisjfiAiXG4iCisjfiAiQW52w6RuZCBvY2ggdmlkYXJlZsO2cm1lZGxhIGVubGlndCB2aWxsa29yZW4gaSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKKworI34gbXNnaWQgIm5leHQiCisjfiBtc2dzdHIgIm7DpHN0YSIKKworI34gbXNnaWQgInByZXYiCisjfiBtc2dzdHIgImbDtnJlZyIKKworI34gbXNnaWQgIkNEYXRlIgorI34gbXNnc3RyICJTa2FwYXQgZGF0dW0iCisKKyN+IG1zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgorI34gbXNnc3RyICJIaXR0YXIgaW50ZSBnaXQta2F0YWxvZ2VuIFwiJXNcIi4iCisKKyN+IG1zZ2lkICJTSEExIElEOiAiCisjfiBtc2dzdHIgIlNIQTEtaWQ6ICIKKworI34gbXNnaWQgIi0gc3RvcHBpbmdcbiIKKyN+IG1zZ3N0ciAiLSBzdGFubmFyXG4iCisKKyN+IG1zZ2lkICJUYWcvSGVhZCAlcyBpcyBub3Qga25vd24iCisjfiBtc2dzdHIgIlRhZ2cvaHV2dWQgJXMgw6RyIG9rw6RudCIKKworI34gbXNnaWQgIi9cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0LCBvciByZWRvIGZpbmQiCisjfiBtc2dzdHIgIi9cdFx0R8OlIHRpbGwgbsOkc3RhIHPDtmt0csOkZmYsIGVsbGVyIHPDtmsgcMOlIG55dHQiCisKKyN+IG1zZ2lkICJOYW1lIgorI34gbXNnc3RyICJOYW1uIgpkaWZmIC0tZ2l0IGEvZ2l0ay1naXQvcG8vdmkucG8gYi9naXRrLWdpdC9wby92aS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTY2ODEyCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0ay1naXQvcG8vdmkucG8KQEAgLTAsMCArMSwxMzc5IEBACisjIFZpZXRuYW1lc2UgdHJhbnNsYXRpb25zIGZvciBnaXRrIHBhY2thZ2UuCisjIELhuqNuIGThu4tjaCB0aeG6v25nIFZp4buHdCBjaG8gZ8OzaSBnaXRrLgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgorIyBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPiwgMjAxMywgMjAxNS4KKyMKK21zZ2lkICIiCittc2dzdHIgIiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IGdpdGsgQEBHSVRfVkVSU0lPTkBAXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTA5LTE1IDA3OjMzKzA3MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IFRy4bqnbiBOZ+G7jWMgUXXDom4gPHZud2lsZG1hbkBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogVmlldG5hbWVzZSA8dHJhbnNsYXRpb24tdGVhbS12aUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+XG4iCisiTGFuZ3VhZ2U6IHZpXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKyJYLUdlbmVyYXRvcjogR3RyYW5zbGF0b3IgMi45MS43XG4iCisKKyM6IGdpdGs6MTQwCittc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgZGFuaCBzw6FjaCBjw6FjIHThuq1wLXRpbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbjoiCisKKyM6IGdpdGs6MjEyIGdpdGs6MjM4MQorbXNnaWQgIkNvbG9yIHdvcmRzIgorbXNnc3RyICJUw7QgbcOgdSBjaOG7ryIKKworIzogZ2l0azoyMTcgZ2l0azoyMzgxIGdpdGs6ODIyMCBnaXRrOjgyNTMKK21zZ2lkICJNYXJrdXAgd29yZHMiCittc2dzdHIgIsSQw6FuaCBk4bqldSBjaOG7ryIKKworIzogZ2l0azozMjQKK21zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCDEkWnhu4NtIHjDqXQgZHV54buHdDoiCisKKyM6IGdpdGs6MzgwCittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRo4buxYyBoaeG7h24gbOG7h25oIC0tYXJnc2NtZDoiCisKKyM6IGdpdGs6MzkzCittc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgorbXNnc3RyICIiCisiQ2jGsGEgY2jhu41uIHThuq1wIHRpbjogLS1tZXJnZSDEkcOjIGNo4buJIMSR4buLbmggbmjGsG5nIGtow7RuZyBjw7MgdOG6rXAgdGluIGNoxrBhIGjDsmEgdHLhu5luLiIKKworIzogZ2l0azozOTYKK21zZ2lkICIiCisiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgorImxpbWl0LiIKK21zZ3N0ciAiIgorIkNoxrBhIGNo4buNbiB04bqtcCB0aW46IC0tbWVyZ2UgxJHDoyBjaOG7iSDEkeG7i25oIG5oxrBuZyBraMO0bmcgY8OzIHThuq1wIHRpbiBjaMawYSBow7JhIHRy4buZbiAiCisidHJvbmcgZ2nhu5tpIGjhuqFuIHThuq1wIHRpbi4iCisKKyM6IGdpdGs6NDE4IGdpdGs6NTY2Cittc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdGjhu7FjIGhp4buHbiBs4buHbmggZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDM2IGdpdGs6NTgyCittc2dpZCAiUmVhZGluZyIKK21zZ3N0ciAixJBhbmcgxJHhu41jIgorCisjOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKK21zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCittc2dzdHIgIsSQYW5nIMSR4buNYyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW/igKYiCisKKyM6IGdpdGs6NDk5IGdpdGs6MTYzNyBnaXRrOjQ1MjgKK21zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgorbXNnc3RyICJDaMawYSBjaOG7jW4gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKK21zZ2lkICJDb21tYW5kIGxpbmUiCittc2dzdHIgIkTDsm5nIGzhu4duaCIKKworIzogZ2l0azoxNTExCittc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gdMOtY2gga+G6v3QgeHXhuqV0IHThu6sgbOG7h25oIGdpdCBsb2c6IgorCisjOiBnaXRrOjE3NDAKK21zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgorbXNnc3RyICJLaMO0bmcgY8OzIHRow7RuZyB0aW4gduG7gSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8iCisKKyM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKK21zZ2lkICJPSyIKK21zZ3N0ciAixJDhu5NuZyDDvSIKKworIzogZ2l0azoxOTM0IGdpdGs6NDMxNyBnaXRrOjkxOTYgZ2l0azo5Mjc1IGdpdGs6OTM5MSBnaXRrOjk0NDAgZ2l0azo5NjcxCisjOiBnaXRrOjExMjQyIGdpdGs6MTE1MjIKK21zZ2lkICJDYW5jZWwiCittc2dzdHIgIlRow7RpIgorCisjOiBnaXRrOjIwNjkKK21zZ2lkICImVXBkYXRlIgorbXNnc3RyICJD4bqtcCBuaOG6rXQiCisKKyM6IGdpdGs6MjA3MAorbXNnaWQgIiZSZWxvYWQiCittc2dzdHIgIlThuqNpIGzhuqFpIgorCisjOiBnaXRrOjIwNzEKK21zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCittc2dzdHIgIsSQ4buNYyBs4bqhaSB0aGFtIGNoaeG6v3UiCisKKyM6IGdpdGs6MjA3MgorbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCittc2dzdHIgIkxp4buHdCBrw6ogY8OhYyB0aGFtIGNoaeG6v3UiCisKKyM6IGdpdGs6MjA3NAorbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgorbXNnc3RyICJLaOG7n2kgY2jhuqF5IGdpdCBndWkiCisKKyM6IGdpdGs6MjA3NgorbXNnaWQgIiZRdWl0IgorbXNnc3RyICJUaG/DoXQiCisKKyM6IGdpdGs6MjA2OAorbXNnaWQgIiZGaWxlIgorbXNnc3RyICJDaMOtbmgiCisKKyM6IGdpdGs6MjA4MAorbXNnaWQgIiZQcmVmZXJlbmNlcyIKK21zZ3N0ciAiVMO5eSB0aMOtY2giCisKKyM6IGdpdGs6MjA3OQorbXNnaWQgIiZFZGl0IgorbXNnc3RyICJDaOG7iW5oIHPhu61hIgorCisjOiBnaXRrOjIwODQKK21zZ2lkICImTmV3IHZpZXcuLi4iCittc2dzdHIgIlRow6ptIHRyw6xuaCBiw6B5IG3hu5tp4oCmIgorCisjOiBnaXRrOjIwODUKK21zZ2lkICImRWRpdCB2aWV3Li4uIgorbXNnc3RyICJT4butYSBjw6FjaCB0csOsbmggYsOgeeKApiIKKworIzogZ2l0azoyMDg2Cittc2dpZCAiJkRlbGV0ZSB2aWV3IgorbXNnc3RyICJYw7NhIGPDoWNoIHRyw6xuaCBiw6B5IgorCisjOiBnaXRrOjIwODggZ2l0azo0MDQzCittc2dpZCAiJkFsbCBmaWxlcyIKK21zZ3N0ciAiTeG7jWkgdOG6rXAgdGluIgorCisjOiBnaXRrOjIwODMgZ2l0azo0MDY3Cittc2dpZCAiJlZpZXciCittc2dzdHIgIlRyw6xuaCBiw6B5IgorCisjOiBnaXRrOjIwOTMgZ2l0azoyMTAzIGdpdGs6MzAxMgorbXNnaWQgIiZBYm91dCBnaXRrIgorbXNnc3RyICJHaeG7m2kgdGhp4buHdSB24buBIGdpdGsiCisKKyM6IGdpdGs6MjA5NCBnaXRrOjIxMDgKK21zZ2lkICImS2V5IGJpbmRpbmdzIgorbXNnc3RyICJU4buVIGjhu6NwIHBow61tIgorCisjOiBnaXRrOjIwOTIgZ2l0azoyMTA3Cittc2dpZCAiJkhlbHAiCittc2dzdHIgIlRy4bujIGdpw7pwIgorCisjOiBnaXRrOjIxODUgZ2l0azo4NjUyCittc2dpZCAiU0hBMSBJRDoiCittc2dzdHIgIlNIQTEgSUQ6IgorCisjOiBnaXRrOjIyMjkKK21zZ2lkICJSb3ciCittc2dzdHIgIkjDoG5nIgorCisjOiBnaXRrOjIyNjcKK21zZ2lkICJGaW5kIgorbXNnc3RyICJUw6xtIgorCisjOiBnaXRrOjIyOTUKK21zZ2lkICJjb21taXQiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MjI5OSBnaXRrOjIzMDEgZ2l0azo0Njg3IGdpdGs6NDcxMCBnaXRrOjQ3MzQgZ2l0azo2NzU1IGdpdGs6NjgyNworIzogZ2l0azo2OTEyCittc2dpZCAiY29udGFpbmluZzoiCittc2dzdHIgImPDsyBjaOG7qWE6IgorCisjOiBnaXRrOjIzMDIgZ2l0azozNTI2IGdpdGs6MzUzMSBnaXRrOjQ3NjMKK21zZ2lkICJ0b3VjaGluZyBwYXRoczoiCittc2dzdHIgIsSRYW5nIGNo4bqhbSDEkcaw4budbmcgZOG6q246IgorCisjOiBnaXRrOjIzMDMgZ2l0azo0Nzc3Cittc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCittc2dzdHIgInRow6ptL2fhu6EgYuG7jyBjaHXhu5dpOiIKKworIzogZ2l0azoyMzA0IGdpdGs6NDc3OQorbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKK21zZ3N0ciAibmjhu69uZyBkw7JuZyB0aGF5IMSR4buVaSBraOG7m3AgbeG6q3U6IgorCisjOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDc2NgorbXNnaWQgIkV4YWN0IgorbXNnc3RyICJDaMOtbmggeMOhYyIKKworIzogZ2l0azoyMzE1IGdpdGs6NDg1NCBnaXRrOjY3MjMKK21zZ2lkICJJZ25DYXNlIgorbXNnc3RyICJCcXVhSHQiCisKKyM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQorbXNnaWQgIlJlZ2V4cCIKK21zZ3N0ciAiQlRDUSIKKworIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzQgZ2l0azo0OTA0IGdpdGs6NDkxMSBnaXRrOjY4NDggZ2l0azo2OTE2Cittc2dpZCAiQWxsIGZpZWxkcyIKK21zZ3N0ciAiTeG7jWkgdHLGsOG7nW5nIgorCisjOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKK21zZ2lkICJIZWFkbGluZSIKK21zZ3N0ciAiTuG7mWkgZHVuZyBjaMOtbmgiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NjkxNiBnaXRrOjczODkKK21zZ2lkICJDb21tZW50cyIKK21zZ3N0ciAiR2hpIGNow7oiCisKKyM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo0ODc2IGdpdGs6NDkxMSBnaXRrOjY3ODYgZ2l0azo3MzI0IGdpdGs6ODgzMAorIzogZ2l0azo4ODQ1Cittc2dpZCAiQXV0aG9yIgorbXNnc3RyICJUw6FjIGdp4bqjIgorCisjOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKK21zZ2lkICJDb21taXR0ZXIiCittc2dzdHIgIk5nxrDhu51pIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MjM1MAorbXNnaWQgIlNlYXJjaCIKK21zZ3N0ciAiVMOsbSBraeG6v20iCisKKyM6IGdpdGs6MjM1OAorbXNnaWQgIkRpZmYiCittc2dzdHIgIlNvIHPDoW5oIgorCisjOiBnaXRrOjIzNjAKK21zZ2lkICJPbGQgdmVyc2lvbiIKK21zZ3N0ciAiUGhpw6puIGLhuqNuIGPFqSIKKworIzogZ2l0azoyMzYyCittc2dpZCAiTmV3IHZlcnNpb24iCittc2dzdHIgIlBoacOqbiBi4bqjbiBt4bubaSIKKworIzogZ2l0azoyMzY0Cittc2dpZCAiTGluZXMgb2YgY29udGV4dCIKK21zZ3N0ciAiQ8OhYyBkw7JuZyBj4bunYSBu4buZaSBkdW5nIgorCisjOiBnaXRrOjIzNzQKK21zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgorbXNnc3RyICJLaMO0bmcgeMOpdCDEkeG6v24gdGhheSDEkeG7lWkgZG8ga2hv4bqjbmcgdHLhuq9uZyIKKworIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Cittc2dpZCAiTGluZSBkaWZmIgorbXNnc3RyICJLaMOhYyBiaeG7h3QgdGhlbyBkw7JuZyIKKworIzogZ2l0azoyNDQ1Cittc2dpZCAiUGF0Y2giCittc2dzdHIgIlbDoSIKKworIzogZ2l0azoyNDQ3Cittc2dpZCAiVHJlZSIKK21zZ3N0ciAiQ8OieSIKKworIzogZ2l0azoyNjE3IGdpdGs6MjYzNworbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKK21zZ3N0ciAiU28gc8OhbmggY8OhaSBuw6B5IC0+IGPDoWkgxJHDoyBjaOG7jW4iCisKKyM6IGdpdGs6MjYxOCBnaXRrOjI2MzgKK21zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCittc2dzdHIgIlNvIHPDoW5oIGPDoWkgxJHDoyBjaOG7jW4gLT4gY8OhaSBuw6B5IgorCisjOiBnaXRrOjI2MTkgZ2l0azoyNjM5Cittc2dpZCAiTWFrZSBwYXRjaCIKK21zZ3N0ciAiVOG6oW8gbWnhur9uZyB2w6EiCisKKyM6IGdpdGs6MjYyMCBnaXRrOjkyNTQKK21zZ2lkICJDcmVhdGUgdGFnIgorbXNnc3RyICJU4bqhbyB0aOG6uyIKKworIzogZ2l0azoyNjIxIGdpdGs6OTM3MQorbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgorbXNnc3RyICJHaGkgbOG6p24gY2h1eeG7g24gZ2lhbyByYSB04bqtcCB0aW4iCisKKyM6IGdpdGs6MjYyMiBnaXRrOjk0MjgKK21zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiVOG6oW8gbmjDoW5oIG3hu5tpIgorCisjOiBnaXRrOjI2MjMKK21zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAiQ2hlcnJ5LXBpY2sgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6B5IgorCisjOiBnaXRrOjI2MjQKK21zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgorbXNnc3RyICLEkOG6t3QgbOG6oWkgSEVBRCBj4bunYSBuaMOhbmggdsOgbyDEkcOieSIKKworIzogZ2l0azoyNjI1Cittc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKK21zZ3N0ciAixJDDoW5oIGThuqV1IGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSIKKworIzogZ2l0azoyNjI2Cittc2dpZCAiUmV0dXJuIHRvIG1hcmsiCittc2dzdHIgIlF1YXkgbOG6oWkgduG7iyB0csOtIGThuqV1IgorCisjOiBnaXRrOjI2MjcKK21zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKK21zZ3N0ciAiVMOsbSBjb24gY2jDoXUgY+G7p2EgY8OhaSBuw6B5IHbDoCBjw6FpIMSRw6MgxJHDoW5oIGThuqV1IgorCisjOiBnaXRrOjI2MjgKK21zZ2lkICJDb21wYXJlIHdpdGggbWFya2VkIGNvbW1pdCIKK21zZ3N0ciAiU28gc8OhbmggduG7m2kgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIMSRw6FuaCBk4bqldSIKKworIzogZ2l0azoyNjI5IGdpdGs6MjY0MAorbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgorbXNnc3RyICJTbyBzw6FuaCBjw6FpIG7DoHkgLT4gbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIMSRw6FuaCBk4bqldSIKKworIzogZ2l0azoyNjMwIGdpdGs6MjY0MQorbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgorbXNnc3RyICJTbyBzw6FuaCBs4bqnbiBjaHV54buDbiBnaWFvIMSRw6MgxJHDoW5oIGThuqV1IC0+IGPDoWkgbsOgeSIKKworIzogZ2l0azoyNjMxCittc2dpZCAiUmV2ZXJ0IHRoaXMgY29tbWl0IgorbXNnc3RyICJIb8OgbiBs4bqhaSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoHkiCisKKyM6IGdpdGs6MjY0NworbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiTOG6pXkgcmEgbmjDoW5oIG7DoHkiCisKKyM6IGdpdGs6MjY0OAorbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKK21zZ3N0ciAiR+G7oSBi4buPIG5ow6FuaCBuw6B5IgorCisjOiBnaXRrOjI2NDkKK21zZ2lkICJDb3B5IGJyYW5jaCBuYW1lIgorbXNnc3RyICJDaMOpcCB0w6puIG5ow6FuaCIKKworIzogZ2l0azoyNjU2Cittc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgorbXNnc3RyICJDxaluZyB0w7Qgc8OhbmcgbsOzIgorCisjOiBnaXRrOjI2NTcKK21zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgorbXNnc3RyICJDaOG7iSB0w7Qgc8OhbmcgY8OhaSBuw6B5IgorCisjOiBnaXRrOjI2NTgKK21zZ2lkICJFeHRlcm5hbCBkaWZmIgorbXNnc3RyICJkaWZmIHThu6sgYsOqbiBuZ2/DoGkiCisKKyM6IGdpdGs6MjY1OQorbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCittc2dzdHIgIlhlbSBjw7RuZyB0cuG6oW5nIGzhuqduIGNodXnhu4NuIGdpYW8gY2hhIG3hurkiCisKKyM6IGdpdGs6MjY2MAorbXNnaWQgIkNvcHkgcGF0aCIKK21zZ3N0ciAiQ2jDqXAgxJHGsOG7nW5nIGThuqtuIgorCisjOiBnaXRrOjI2NjcKK21zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCittc2dzdHIgIkhp4buDbiB0aOG7iyBuZ3V5w6puIGfhu5FjIGPhu6dhIGTDsm5nIG7DoHkiCisKKyM6IGdpdGs6MjY2OAorbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKK21zZ3N0ciAiQ2jhuqF5IGzhu4duaCBnaXQgZ3VpIGJsYW1lIGNobyBkw7JuZyBuw6B5IgorCisjOiBnaXRrOjMwMTQKK21zZ2lkICIiCisiXG4iCisiR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiXG4iCisiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgorIlxuIgorIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCittc2dzdHIgIiIKKyJcbiIKKyJHaXRrIC0g4bupbmcgZOG7pW5nIMSR4buDIHhlbSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gZMOgbmggY2hvIGdpdFxuIgorIlxuIgorIkLhuqNuIHF1eeG7gW4gwqkgMjAwNS0yMDE0IFBhdWwgTWFja2VycmFzXG4iCisiXG4iCisiRMO5bmcgdsOgIHBow6JuIHBo4buRaSBs4bqhaSBwaOG6p24gbeG7gW0gbsOgeSB0aGVvIGPDoWMgxJFp4buBdSBraG/huqNuIGPhu6dhIEdp4bqleSBQaMOpcCBDw7RuZyBHTlUiCisKKyM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Cittc2dpZCAiQ2xvc2UiCittc2dzdHIgIsSQw7NuZyIKKworIzogZ2l0azozMDQzCittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCittc2dzdHIgIlThu5UgaOG7o3AgcGjDrW0gZ2l0ayIKKworIzogZ2l0azozMDQ2Cittc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgorbXNnc3RyICJU4buVIGjhu6NwIHBow61tIGdpdGs6IgorCisjOiBnaXRrOjMwNDgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUT5cdFx0UXVpdCIKK21zZ3N0ciAiPCVzLVE+XHRcdFRob8OhdCIKKworIzogZ2l0azozMDQ5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKK21zZ3N0ciAiPCVzLVc+XHRcdMSQw7NuZyBj4butYSBz4buVIgorCisjOiBnaXRrOjMwNTAKK21zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCittc2dzdHIgIjxIb21lPlx0XHRDaHV54buDbiDEkeG6v24gbOG6p24gY2h1eeG7g24gZ2lhbyDEkeG6p3UgdGnDqm4iCisKKyM6IGdpdGs6MzA1MQorbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCittc2dzdHIgIjxFbmQ+XHRcdENodXnhu4NuIMSR4bq/biBs4bqnbiBjaHV54buDbiBnaWFvIGN14buRaSIKKworIzogZ2l0azozMDUyCittc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgorbXNnc3RyICI8VXA+LCBwLCBrXHREaSBjaHV54buDbiBsw6puIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA1MworbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCittc2dzdHIgIjxEb3duPiwgbiwgalx0RGkgY2h1eeG7g24geHXhu5FuZyBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXRrOjMwNTQKK21zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgorbXNnc3RyICI8TGVmdD4sIHosIGhcdFF1YXkgdHLhu58gbOG6oWkgZGFuaCBzw6FjaCBs4buLY2ggc+G7rSIKKworIzogZ2l0azozMDU1Cittc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCittc2dzdHIgIjxSaWdodD4sIHgsIGxcdERpIGNodXnhu4NuIHRp4bq/cCB0cm9uZyBkYW5oIHPDoWNoIGzhu4tjaCBz4butIgorCisjOiBnaXRrOjMwNTYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtbj5cdEdvIHRvIG4tdGggcGFyZW50IG9mIGN1cnJlbnQgY29tbWl0IGluIGhpc3RvcnkgbGlzdCIKK21zZ3N0ciAiIgorIjwlcy1uPlx0xJDhur9uIGNoYSB0aOG7qSBuIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gaGnhu4duIHThuqFpIHRyb25nIGRhbmggc8OhY2ggbOG7i2NoIHPhu60iCisKKyM6IGdpdGs6MzA1NworbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8UGFnZVVwPlx0RGkgY2h1eeG7g24gbMOqbiBt4buZdCB0cmFuZyB0cm9uZyBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA1OAorbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPFBhZ2VEb3duPlx0RGkgY2h1eeG7g24geHXhu5FuZyBt4buZdCB0cmFuZyB0cm9uZyBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA1OQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKK21zZ3N0ciAiPCVzLUhvbWU+XHRDdeG7mW4gbMOqbiB0csOqbiBjw7luZyBj4bunYSBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA2MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgorbXNnc3RyICI8JXMtRW5kPlx0Q3Xhu5luIHh14buRbmcgZMaw4bubaSBjw7luZyBj4bunYSBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA2MQorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKK21zZ3N0ciAiPCVzLVVwPlx0Q3Xhu5luIGRhbmggc8OhY2ggbOG6p24gY2h1eeG7g24gZ2lhbyBsw6puIG3hu5l0IGTDsm5nIgorCisjOiBnaXRrOjMwNjIKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgorbXNnc3RyICI8JXMtRG93bj5cdEN14buZbiBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8geHXhu5FuZyBt4buZdCBkw7JuZyIKKworIzogZ2l0azozMDYzCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKK21zZ3N0ciAiPCVzLVBhZ2VVcD5cdEN14buZbiBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8gbMOqbiBt4buZdCB0cmFuZyIKKworIzogZ2l0azozMDY0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjwlcy1QYWdlRG93bj5cdEN14buZbiBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8geHXhu5FuZyBt4buZdCB0cmFuZyIKKworIzogZ2l0azozMDY1Cittc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgorbXNnc3RyICI8U2hpZnQtVXA+XHRUw6xtIHbhu4EgcGjDrWEgc2F1IChoxrDhu5tuZyBsw6puIHRyw6puLCBs4bqnbiBjaHV54buDbiBnaWFvIHNhdSBuw6B5KSIKKworIzogZ2l0azozMDY2Cittc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCittc2dzdHIgIiIKKyI8U2hpZnQtRG93bj5cdFTDrG0gduG7gSBwaMOtYSB0csaw4bubYyAoaMaw4bubbmcgeHXhu5FuZyBkxrDhu5tpLCBs4bqnbiBjaHV54buDbiBnaWFvIHRyxrDhu5tjIMSRw6J5KSIKKworIzogZ2l0azozMDY3Cittc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxEZWxldGU+LCBiXHRDdeG7mW4gcGjhuqduIHRyw6xuaCBiw6B5IGRpZmYgbMOqbiBt4buZdCB0cmFuZyIKKworIzogZ2l0azozMDY4Cittc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCittc2dzdHIgIjxCYWNrc3BhY2U+XHRDdeG7mW4gcGjhuqduIHRyw6xuaCBiw6B5IGRpZmYgbMOqbiBt4buZdCB0cmFuZyIKKworIzogZ2l0azozMDY5Cittc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCittc2dzdHIgIjxTcGFjZT5cdFx0Q3Xhu5luIHBo4bqnbiB0csOsbmggYsOgeSBkaWZmIHh14buRbmcgbeG7mXQgdHJhbmciCisKKyM6IGdpdGs6MzA3MAorbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKK21zZ3N0ciAidVx0XHRDdeG7mW4gcGjhuqduIHRyw6xuaCBiw6B5IGRpZmYgbMOqbiAxOCBkw7JuZyIKKworIzogZ2l0azozMDcxCittc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCittc2dzdHIgImRcdFx0Q3Xhu5luIHBo4bqnbiB0csOsbmggYsOgeSBkaWZmIHh14buRbmcgMTggZMOybmciCisKKyM6IGdpdGs6MzA3MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgorbXNnc3RyICI8JXMtRj5cdFx0VMOsbSBraeG6v20iCisKKyM6IGdpdGs6MzA3MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjwlcy1HPlx0XHREaSBjaHV54buDbiDEkeG6v24gY2jhu5cgZ+G6t3Aga+G6vyB0aeG6v3AiCisKKyM6IGdpdGs6MzA3NAorbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCittc2dzdHIgIjxSZXR1cm4+XHRcdERpIGNodXnhu4NuIMSR4bq/biBjaOG7lyBn4bq3cCBr4bq/IHRp4bq/cCIKKworIzogZ2l0azozMDc1Cittc2dpZCAiZ1x0XHRHbyB0byBjb21taXQiCittc2dzdHIgImdcdFx0Q2h1eeG7g24gxJHhur9uIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6MzA3NgorbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCittc2dzdHIgIi9cdFx0xJDGsGEgY29uIHRy4buPIGNodeG7mXQgdsOgbyDDtCB0w6xtIGtp4bq/bSIKKworIzogZ2l0azozMDc3Cittc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgorbXNnc3RyICI/XHRcdERpIGNodXnhu4NuIMSR4bq/biBjaOG7lyBn4bq3cCBr4bq/IHRyxrDhu5tjIgorCisjOiBnaXRrOjMwNzgKK21zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgorbXNnc3RyICJmXHRcdEN14buZbiBwaOG6p24gdHLDrG5oIGLDoHkgZGlmZiBzYW5nIHThuq1wLXRpbiBr4bq/IgorCisjOiBnaXRrOjMwNzkKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1TPlx0XHRUw6xtIMSR4bq/biBjaOG7lyBraMOhYyBiaeG7h3Qga+G6vyB0aeG6v3AiCisKKyM6IGdpdGs6MzA4MAorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1SPlx0XHRTZWFyY2ggZm9yIHByZXZpb3VzIGhpdCBpbiBkaWZmIHZpZXciCittc2dzdHIgIjwlcy1SPlx0XHRUw6xtIMSR4bq/biBjaOG7lyBraMOhYyBiaeG7h3Qga+G6vyB0csaw4bubYyIKKworIzogZ2l0azozMDgxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKK21zZ3N0ciAiPCVzLUtQKz5cdFTEg25nIGPhu6EgY2jhu68iCisKKyM6IGdpdGs6MzA4MgorIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtcGx1cz5cdFTEg25nIGPhu6EgY2jhu68iCisKKyM6IGdpdGs6MzA4MworIywgdGNsLWZvcm1hdAorbXNnaWQgIjwlcy1LUC0+XHREZWNyZWFzZSBmb250IHNpemUiCittc2dzdHIgIjwlcy1LUC0+XHRHaeG6o20gY+G7oSBjaOG7ryIKKworIzogZ2l0azozMDg0CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgorbXNnc3RyICI8JXMtbWludXM+XHRHaeG6o20gY+G7oSBjaOG7ryIKKworIzogZ2l0azozMDg1Cittc2dpZCAiPEY1Plx0XHRVcGRhdGUiCittc2dzdHIgIjxGNT5cdFx0Q+G6rXAgbmjhuq10IgorCisjOiBnaXRrOjM1NTAgZ2l0azozNTU5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB04bqhbyB0aMawIG3hu6VjIHThuqFtICVzOiIKKworIzogZ2l0azozNTcyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCittc2dzdHIgIkzhu5dpIGNow6BvIGjhu49pIFwiJXNcIiB04burICVzOiIKKworIzogZ2l0azozNjM1Cittc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgorbXNnc3RyICJs4buHbmggZ+G6t3AgbOG7l2k6IgorCisjOiBnaXRrOjM3ODQKK21zZ2lkICJObyBzdWNoIGNvbW1pdCIKK21zZ3N0ciAiS2jDtG5nIGPDsyBs4bqnbiBjaHV54buDbiBnaWFvIG5oxrAgduG6rXkiCisKKyM6IGdpdGs6Mzc5OAorbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKK21zZ3N0ciAiZ2l0IGd1aSBibGFtZTogbOG7h25oIGfhurdwIGzhu5dpOiIKKworIzogZ2l0azozODI5CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMSR4buZYyDEkeG6p3UgY+G7p2EgaMOyYSB0cuG7mW46ICVzIgorCisjIHRjbC1mb3JtYXQKKyM6IGdpdGs6MzgzNworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJlYWRpbmcgaW5kZXg6ICVzIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu41jIGNo4buJIG3hu6VjOiAlcyIKKworIzogZ2l0azozODYyCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGto4bufaSBjaOG6oXkgZ2l0IGJsYW1lOiAlcyIKKworIzogZ2l0azozODY1IGdpdGs6Njc1NAorbXNnaWQgIlNlYXJjaGluZyIKK21zZ3N0ciAixJBhbmcgdMOsbSBraeG6v20iCisKKyM6IGdpdGs6Mzg5NworIywgdGNsLWZvcm1hdAorbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGNo4bqheSBnaXQgYmxhbWU6ICVzIgorCisjOiBnaXRrOjM5MjUKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgorbXNnc3RyICJEw7JuZyDEkeG6v24gdOG7qyBs4bqnbiBjaHV54buDbiBnaWFvICVzLCBjw6FpIG3DoCBraMO0bmcgdHJvbmcgdHLDrG5oIGLDoHkgbsOgeSIKKworIzogZ2l0azozOTM5Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKK21zZ3N0ciAiQuG7mSB0csOsbmggYsOgeSBkaWZmIHThu6sgYsOqbiBuZ2/DoGkgZ+G6t3AgbOG7l2k6IgorCisjOiBnaXRrOjQwNzAKK21zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKK21zZ3N0ciAixJDhu4tuaCBuZ2jEqWEgY8OhY2ggdHLDrG5oIGLDoHkgZ2l0ayIKKworIzogZ2l0azo0MDc0Cittc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgorbXNnc3RyICJOaOG7myBjw6FjaCB0csOsbmggYsOgeSBuw6B5IgorCisjOiBnaXRrOjQwNzUKK21zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgorbXNnc3RyICJUaGFtIGNoaeG6v3UgKGRhbmggc8OhY2ggbmfEg24gY8OhY2ggYuG6sW5nIGThuqV1IGPDoWNoKToiCisKKyM6IGdpdGs6NDA3NgorbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCittc2dzdHIgIk5ow6FuaCAmIHRo4bq7OiIKKworIzogZ2l0azo0MDc3Cittc2dpZCAiQWxsIHJlZnMiCittc2dzdHIgIk3hu41pIHRoYW0gY2hp4bq/dSIKKworIzogZ2l0azo0MDc4Cittc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCittc2dzdHIgIk3hu41pIG5ow6FuaCAobuG7mWkgYuG7mSkiCisKKyM6IGdpdGs6NDA3OQorbXNnaWQgIkFsbCB0YWdzIgorbXNnc3RyICJN4buNaSB0aOG6uyIKKworIzogZ2l0azo0MDgwCittc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAiTeG7jWkgbmjDoW5oIHJlbW90ZS10cmFja2luZyIKKworIzogZ2l0azo0MDgxCittc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKK21zZ3N0ciAiVGjDtG5nIHRpbiBjaHV54buDbiBnaWFvIChiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkpOiIKKworIzogZ2l0azo0MDgyCittc2dpZCAiQXV0aG9yOiIKK21zZ3N0ciAiVMOhYyBnaeG6ozoiCisKKyM6IGdpdGs6NDA4MworbXNnaWQgIkNvbW1pdHRlcjoiCittc2dzdHIgIk5nxrDhu51pIGNodXnhu4NuIGdpYW86IgorCisjOiBnaXRrOjQwODQKK21zZ2lkICJDb21taXQgTWVzc2FnZToiCittc2dzdHIgIkNow7ogdGjDrWNoIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW86IgorCisjOiBnaXRrOjQwODUKK21zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiS2jhu5twIG3hu41pIMSRaeG7gXUga2nhu4duIFRow7RuZyB0aW4gQ2h1eeG7g24gZ2lhbyIKKworIzogZ2l0azo0MDg2Cittc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKK21zZ3N0ciAiS2jhu5twIGtow7RuZyDEkWnhu4F1IGtp4buHbiBUaMO0bmcgdGluIENodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6NDA4NworbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgorbXNnc3RyICLEkOG7lWkgdGjDoG5oIFThuq1wIHRpbjoiCisKKyM6IGdpdGs6NDA4OAorbXNnaWQgIkZpeGVkIFN0cmluZyIKK21zZ3N0ciAiQ2h14buXaSBj4buRIMSR4buLbmgiCisKKyM6IGdpdGs6NDA4OQorbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKK21zZ3N0ciAiQmnhu4N1IHRo4bupYyBjaMOtbmggcXV5IgorCisjOiBnaXRrOjQwOTAKK21zZ2lkICJTZWFyY2ggc3RyaW5nOiIKK21zZ3N0ciAiQ2h14buXaSB0w6xtIGtp4bq/bToiCisKKyM6IGdpdGs6NDA5MQorbXNnaWQgIiIKKyJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKK21zZ3N0ciAiIgorIk5nw6B5IGNodXnhu4NuIGdpYW8gKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgorIjE1OjI3OjM4XCIpOiIKKworIzogZ2l0azo0MDkyCittc2dpZCAiU2luY2U6IgorbXNnc3RyICJL4buDIHThu6s6IgorCisjOiBnaXRrOjQwOTMKK21zZ2lkICJVbnRpbDoiCittc2dzdHIgIsSQ4bq/bjoiCisKKyM6IGdpdGs6NDA5NAorbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgorbXNnc3RyICJHaeG7m2kgaOG6oW4gdsOgL2hv4bq3YyBi4buPIHPhu5EgY+G7p2EgxJFp4buDbSB4w6l0IChz4buRIG5ndXnDqm4gw6JtKToiCisKKyM6IGdpdGs6NDA5NQorbXNnaWQgIk51bWJlciB0byBzaG93OiIKK21zZ3N0ciAiU+G7kSBsxrDhu6NuZyBoaeG7g24gdGjhu4s6IgorCisjOiBnaXRrOjQwOTYKK21zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCittc2dzdHIgIlPhu5EgbMaw4bujbmcgc+G6vSBi4buPIHF1YToiCisKKyM6IGdpdGs6NDA5NworbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCittc2dzdHIgIlTDuXkgY2jhu41uIGjhu5duIGjhu6NwOiIKKworIzogZ2l0azo0MDk4Cittc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgorbXNnc3RyICJT4bqvcCB44bq/cCBjaOG6t3QgY2jhur0gdGhlbyBuZ8OgeSIKKworIzogZ2l0azo0MDk5Cittc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCittc2dzdHIgIsSQw6FuaCBk4bqldSBjw6FjIGPhuqFuaCBuaMOhbmgiCisKKyM6IGdpdGs6NDEwMAorbXNnaWQgIkxpbWl0IHRvIGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiR2nhu5tpIGjhuqFuIHRow6BuaCBjaGEgbeG6uSDEkeG6p3UgdGnDqm4iCisKKyM6IGdpdGs6NDEwMQorbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgorbXNnc3RyICJM4buLY2ggc+G7rSBk4bqhbmcgxJHGoW4gZ2nhuqNuIgorCisjOiBnaXRrOjQxMDIKK21zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKK21zZ3N0ciAixJDhu5FpIHPhu5EgYuG7lSB4dW5nIGNobyBs4buHbmggZ2l0IGxvZzoiCisKKyM6IGdpdGs6NDEwMworbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgorbXNnc3RyICJOaOG6rXAgdsOgbyBjw6FjIHThuq1wIHRpbiB2w6AgdGjGsCBt4bulYyBiYW8gZ+G7k20sIG3hu5dpIGTDsm5nIG3hu5l0IGPDoWk6IgorCisjOiBnaXRrOjQxMDQKK21zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKK21zZ3N0ciAiTOG7h25oIHThuqFvIHJhIG5oaeG7gXUgbOG6p24gY2h1eeG7g24gZ2lhbyBoxqFuIGJhbyBn4buTbToiCisKKyM6IGdpdGs6NDIyOAorbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKK21zZ3N0ciAiR2l0azogc+G7rWEgY8OhY2ggdHLDrG5oIGLDoHkiCisKKyM6IGdpdGs6NDIzNgorbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgorbXNnc3RyICItLSB0acOqdSBjaHXhuqluIGNo4buNbiDEkWnhu4NtIHjDqXQgZHV54buHdCIKKworIzogZ2l0azo0MjQxCittc2dpZCAiVmlldyBOYW1lIgorbXNnc3RyICJUw6puIGPDoWNoIHRyw6xuaCBiw6B5IgorCisjOiBnaXRrOjQzMTYKK21zZ2lkICJBcHBseSAoRjUpIgorbXNnc3RyICLDgXAgZOG7pW5nIChGNSkiCisKKyM6IGdpdGs6NDM1NAorbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKK21zZ3N0ciAiTOG7l2kgdHJvbmcgY8OhYyDEkeG7kWkgc+G7kSBjaOG7jW4gY2h1eeG7g24gZ2lhbzoiCisKKyM6IGdpdGs6NDQwOSBnaXRrOjQ0NjIgZ2l0azo0OTI0IGdpdGs6NDkzOCBnaXRrOjYyMDggZ2l0azoxMjM3MyBnaXRrOjEyMzc0Cittc2dpZCAiTm9uZSIKK21zZ3N0ciAiS2jDtG5nIgorCisjOiBnaXRrOjUwMjEgZ2l0azo1MDI2Cittc2dpZCAiRGVzY2VuZGFudCIKK21zZ3N0ciAiQ29uIGNow6F1IgorCisjOiBnaXRrOjUwMjIKK21zZ2lkICJOb3QgZGVzY2VuZGFudCIKK21zZ3N0ciAiS2jDtG5nIGPDsyBjb24gY2jDoXUiCisKKyM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKK21zZ2lkICJBbmNlc3RvciIKK21zZ3N0ciAiVOG7lSB0acOqbiBjaHVuZyIKKworIzogZ2l0azo1MDMwCittc2dpZCAiTm90IGFuY2VzdG9yIgorbXNnc3RyICJLaMO0bmcgY8OzIGNodW5nIHThu5UgdGnDqm4iCisKKyM6IGdpdGs6NTMyNAorbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKK21zZ3N0ciAiIgorIkPDsyB0aGF5IMSR4buVaSBu4buZaSBi4buZIMSRw6MgxJHGsOG7o2MgxJHGsGEgdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMsIG5oxrBuZyBjaMawYSDEkcaw4bujYyBjaHV54buDbiBnaWFvIgorCisjOiBnaXRrOjUzNjAKK21zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKK21zZ3N0ciAiQ8OzIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5ksIG5oxrBuZyBjaMawYSDEkcaw4bujYyDEkcawYSB2w6BvIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogZ2l0azo3MTM0Cittc2dpZCAiYW5kIG1hbnkgbW9yZSIKK21zZ3N0ciAidsOgIG5oaeG7gXUgbuG7r2EiCisKKyM6IGdpdGs6NzEzNworbXNnaWQgIm1hbnkiCittc2dzdHIgIm5oaeG7gXUiCisKKyM6IGdpdGs6NzMyOAorbXNnaWQgIlRhZ3M6IgorbXNnc3RyICJUaOG6uzoiCisKKyM6IGdpdGs6NzM0NSBnaXRrOjczNTEgZ2l0azo4ODI1Cittc2dpZCAiUGFyZW50IgorbXNnc3RyICJDaGEiCisKKyM6IGdpdGs6NzM1NgorbXNnaWQgIkNoaWxkIgorbXNnc3RyICJDb24iCisKKyM6IGdpdGs6NzM2NQorbXNnaWQgIkJyYW5jaCIKK21zZ3N0ciAiTmjDoW5oIgorCisjOiBnaXRrOjczNjgKK21zZ2lkICJGb2xsb3dzIgorbXNnc3RyICLEkOG7qW5nIHNhdSIKKworIzogZ2l0azo3MzcxCittc2dpZCAiUHJlY2VkZXMiCittc2dzdHIgIsSQ4bupbmcgdHLGsOG7m2MiCisKKyMgdGNsLWZvcm1hdAorIzogZ2l0azo3OTY2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCittc2dzdHIgIkzhu5dpIGzhuqV5IGRpZmY6ICVzIgorCisjOiBnaXRrOjg2NTAKK21zZ2lkICJHb3RvOiIKK21zZ3N0ciAiTmjhuqN5IHThu5tpOiIKKworIzogZ2l0azo4NjcxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCittc2dzdHIgIsSQ4buLbmggZGFuaCBTSEExIGThuqFuZyBuZ+G6r24gJXMgbMOgIGNoxrBhIMSR4bunIHLDtSByw6BuZyIKKworIzogZ2l0azo4Njc4CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgorbXNnc3RyICJLaMO0bmcgaGnhu4N1IMSRaeG7g20geMOpdCBkdXnhu4d0ICVzIgorCisjOiBnaXRrOjg2ODgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSDEkeG7i25oIGRhbmggU0hBMSAlcyIKKworIzogZ2l0azo4NjkwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCittc2dzdHIgIsSQaeG7g20gJXMga2jDtG5nIOG7nyB0cm9uZyBwaOG6p24gaGnhu4NuIHRo4buLIGhp4buHbiB04bqhaSIKKworIzogZ2l0azo4ODMyIGdpdGs6ODg0NworbXNnaWQgIkRhdGUiCittc2dzdHIgIk5nw6B5IgorCisjOiBnaXRrOjg4MzUKK21zZ2lkICJDaGlsZHJlbiIKK21zZ3N0ciAiQ29uIGNow6F1IgorCisjOiBnaXRrOjg4OTgKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKK21zZ3N0ciAixJDhurd0IGzhuqFpIG5ow6FuaCAlcyB04bqhaSDEkcOieSIKKworIzogZ2l0azo4OTAwCittc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCittc2dzdHIgIkhlYWQgxJHDoyBi4buLIHTDoWNoIHLhu51pOiBraMO0bmcgdGjhu4MgxJHhurd0IGzhuqFpIgorCisjOiBnaXRrOjkwMDUgZ2l0azo5MDExCittc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKK21zZ3N0ciAiQuG7jyBxdWEgbOG6p24gY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbiAiCisKKyM6IGdpdGs6OTAyMCBnaXRrOjkwMjUKK21zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBs4bqleSBJRCBtaeG6v25nIHbDoSBjaG8gIgorCisjOiBnaXRrOjkwMjEgZ2l0azo5MDI2Cittc2dpZCAiIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIC0gZOG7q25nXG4iCisKKyM6IGdpdGs6OTAzMSBnaXRrOjkwMzQgZ2l0azo5MDQyIGdpdGs6OTA1NiBnaXRrOjkwNjUKK21zZ2lkICJDb21taXQgIgorbXNnc3RyICJDb21taXQgIgorCisjOiBnaXRrOjkwMzUKK21zZ2lkICIiCisiIGlzIHRoZSBzYW1lIHBhdGNoIGFzXG4iCisiICAgICAgICIKK21zZ3N0ciAiIgorIiBsw6AgY8O5bmcgbeG7mXQgbWnhur9uZyB2w6EgduG7m2lcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDMKK21zZ2lkICIiCisiIGRpZmZlcnMgZnJvbVxuIgorIiAgICAgICAiCittc2dzdHIgIiIKKyIga2jDoWMgYmnhu4d0IHThu6tcbiIKKyIgICAgICAgIgorCisjOiBnaXRrOjkwNDUKK21zZ2lkICIiCisiRGlmZiBvZiBjb21taXRzOlxuIgorIlxuIgorbXNnc3RyICIiCisiS2jDoWMgYmnhu4d0IGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCk6XG4iCisiXG4iCisKKyM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKK21zZ3N0ciAiIGPDsyAlcyBjb24gLSBk4burbmdcbiIKKworIzogZ2l0azo5MDg1CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCittc2dzdHIgIkfhurdwIGzhu5dpIHRyb25nIHF1w6EgdHLDrG5oIGdoaSBs4bqnbiBjaHV54buDbiBnaWFvIHbDoG8gdOG6rXAgdGluOiAlcyIKKworIzogZ2l0azo5MDkxCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHNvIHPDoW5oIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW86ICVzIgorCisjOiBnaXRrOjkxMzcKK21zZ2lkICJUb3AiCittc2dzdHIgIsSQ4buJbmgiCisKKyM6IGdpdGs6OTEzOAorbXNnaWQgIkZyb20iCittc2dzdHIgIlThu6siCisKKyM6IGdpdGs6OTE0MworbXNnaWQgIlRvIgorbXNnc3RyICLEkOG6v24iCisKKyM6IGdpdGs6OTE2NworbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgorbXNnc3RyICJU4bqhbyBtaeG6v25nIHbDoSIKKworIzogZ2l0azo5MTY5Cittc2dpZCAiRnJvbToiCittc2dzdHIgIlThu6s6IgorCisjOiBnaXRrOjkxNzgKK21zZ2lkICJUbzoiCittc2dzdHIgIsSQ4bq/bjoiCisKKyM6IGdpdGs6OTE4NworbXNnaWQgIlJldmVyc2UiCittc2dzdHIgIsSQ4bqjbyBuZ8aw4bujYyIKKworIzogZ2l0azo5MTg5IGdpdGs6OTM4NQorbXNnaWQgIk91dHB1dCBmaWxlOiIKK21zZ3N0ciAiVOG6rXAgdGluIGvhur90IHh14bqldDoiCisKKyM6IGdpdGs6OTE5NQorbXNnaWQgIkdlbmVyYXRlIgorbXNnc3RyICJU4bqhbyIKKworIzogZ2l0azo5MjMzCittc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6oW8gbWnhur9uZyB2w6E6IgorCisjOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAorbXNnaWQgIklEOiIKK21zZ3N0ciAiTcOjIHPhu5E6IgorCisjOiBnaXRrOjkyNjUKK21zZ2lkICJUYWcgbmFtZToiCittc2dzdHIgIlTDqm4gdGjhurs6IgorCisjOiBnaXRrOjkyNjgKK21zZ2lkICJUYWcgbWVzc2FnZSBpcyBvcHRpb25hbCIKK21zZ3N0ciAiR2hpIGNow7ogdGjhursgY2jhu4kgbMOgIHTDuXkgY2jhu41uIgorCisjOiBnaXRrOjkyNzAKK21zZ2lkICJUYWcgbWVzc2FnZToiCittc2dzdHIgIkdoaSBjaMO6IGNobyB0aOG6uzoiCisKKyM6IGdpdGs6OTI3NCBnaXRrOjk0MzkKK21zZ2lkICJDcmVhdGUiCittc2dzdHIgIlThuqFvIgorCisjOiBnaXRrOjkyOTIKK21zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIkNoxrBhIGNo4buJIHJhIHTDqm4gY+G7p2EgdGjhursiCisKKyM6IGdpdGs6OTI5NgorIywgdGNsLWZvcm1hdAorbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlRo4bq7IOKAnCVz4oCdIMSRw6MgY8OzIHPhurVuIHLhu5NpIgorCisjOiBnaXRrOjkzMDYKK21zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6oW8gdGjhurs6IgorCisjOiBnaXRrOjkzODIKK21zZ2lkICJDb21tYW5kOiIKK21zZ3N0ciAiTOG7h25oOiIKKworIzogZ2l0azo5MzkwCittc2dpZCAiV3JpdGUiCittc2dzdHIgIkdoaSIKKworIzogZ2l0azo5NDA4Cittc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgorbXNnc3RyICJH4bq3cCBs4buXaSB0cm9uZyBxdcOhIHRyw6xuaCBnaGkgY2h1eeG7g24gZ2lhbzoiCisKKyM6IGdpdGs6OTQzNQorbXNnaWQgIk5hbWU6IgorbXNnc3RyICJUw6puOiIKKworIzogZ2l0azo5NDU4Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAiVnVpIGzDsm5nIGNo4buJIMSR4buLbmggdMOqbiBjaG8gbmjDoW5oIG3hu5tpIgorCisjOiBnaXRrOjk0NjMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKK21zZ3N0ciAiTmjDoW5oIOKAnCVz4oCdIMSRw6MgY8OzIHThu6sgdHLGsOG7m2MgcuG7k2kuIEdoaSDEkcOoPyIKKworIzogZ2l0azo5NTMwCisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCittc2dzdHIgIiIKKyJM4bqnbiBjaHV54buDbiBnaWFvICVzIMSRw6Mgc+G6tW4gxJHGsOG7o2MgYmFvIGfhu5NtIHRyb25nIG5ow6FuaCAlcyAtLSBi4bqhbiBjw7MgdGjhu7FjIHPhu7EgbXXhu5FuICIKKyLDoXAgZOG7pW5nIGzhuqFpIG7DsyBraMO0bmc/IgorCisjOiBnaXRrOjk1MzUKK21zZ2lkICJDaGVycnktcGlja2luZyIKK21zZ3N0ciAixJBhbmcgY2hlcnJ5LXBpY2siCisKKyM6IGdpdGs6OTU0NAorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKKyJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJDaGVycnktcGljayBn4bq3cCBs4buXaSBi4bufaSB2w6wgY8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIHThuq1wIHRpbiDigJwlc+KAnS5cbiIKKyJYaW4gaMOjeSBjaHV54buDbiBnaWFvLCByZXNldCBoYXkgc3Rhc2ggY8OhYyB0aGF5IMSR4buVaSBj4bunYSBi4bqhbiBzYXUgxJHDsyB0aOG7rSBs4bqhaS4iCisKKyM6IGdpdGs6OTU1MAorbXNnaWQgIiIKKyJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKKyJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKK21zZ3N0ciAiIgorIkNoZXJyeS1waWNrIGfhurdwIGzhu5dpIGLhu59pIHbDrCB4dW5nIMSR4buZdCB0cm9uZyBow7JhIHRy4buZbi5cbiIKKyJC4bqhbiBjw7MgbXXhu5FuIGNo4bqheSBs4buHbmgg4oCcZ2l0IGNpdG9vbOKAnSDEkeG7gyBnaeG6o2kgcXV54bq/dCB24bqlbiDEkeG7gSBuw6B5IGtow7RuZz8iCisKKyM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKK21zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIGPhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGdpdGs6OTU5MworIywgdGNsLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorbXNnc3RyICIiCisiTOG6p24gY2h1eeG7g24gZ2lhbyAlcyBraMO0bmcgxJHGsOG7o2MgYmFvIGfhu5NtIHRyb25nIG5ow6FuaCAlcyAtLSBi4bqhbiBjw7MgdGjhu7FjIHPhu7EgbXXhu5FuICIKKyLigJxyZXZlcnTigJ0gbsOzIGtow7RuZz8iCisKKyM6IGdpdGs6OTU5OAorbXNnaWQgIlJldmVydGluZyIKK21zZ3N0ciAixJBhbmcgaG/DoG4gdMOhYyIKKworIzogZ2l0azo5NjA2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiIgorIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKKyJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCittc2dzdHIgIiIKKyJSZXZlcnQgZ+G6t3AgbOG7l2kgYuG7n2kgdsOsIHThuq1wIHRpbiBzYXUgxJHDoyDEkcaw4bujYyB0aGF5IMSR4buVaSBu4buZaSBi4buZOiVzXG4iCisiWGluIGjDo3kgY2jhuqF5IGzhu4duaCDigJxjb21taXTigJ0sIOKAnHJlc2V04oCdIGhv4bq3YyDigJxzdGFzaOKAnSBy4buTaSB0aOG7rSBs4bqhaS4iCisKKyM6IGdpdGs6OTYxMAorbXNnaWQgIiIKKyJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCisiIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorbXNnc3RyICIiCisiUmV2ZXJ0IGfhurdwIGzhu5dpIGLhu59pIHbDrCB4dW5nIMSR4buZdCBow7JhIHRy4buZbi5cbiIKKyIgQuG6oW4gY8OzIG114buRbiBjaOG6oXkgbOG7h25oIOKAnGdpdCBjaXRvb2zigJ0gxJHhu4MgcGjDom4gZ2nhuqNpIG7DsyBraMO0bmc/IgorCisjOiBnaXRrOjk2NTMKK21zZ2lkICJDb25maXJtIHJlc2V0IgorbXNnc3RyICJYw6FjIG5o4bqtdCDEkeG6t3QgbOG6oWkiCisKKyM6IGdpdGs6OTY1NQorIywgdGNsLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCittc2dzdHIgIsSQ4bq3dCBs4bqhaSBuaMOhbmgg4oCcJXPigJ0gdGjDoG5oIOKAnCVz4oCdPyIKKworIzogZ2l0azo5NjU3Cittc2dpZCAiUmVzZXQgdHlwZToiCittc2dzdHIgIktp4buDdSDEkeG6t3QgbOG6oWk6IgorCisjOiBnaXRrOjk2NjAKK21zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKK21zZ3N0ciAiTeG7gW06IEtow7RuZyDEkeG7mW5nIMSR4bq/biB0aMawIG3hu6VjIGzDoG0gdmnhu4djIHbDoCBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGdpdGs6OTY2MworbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKK21zZ3N0ciAiIgorIlBoYSB0cuG7mW46IEtow7RuZyDEkeG7mW5nIGNo4bqhbSDEkeG6v24gdGjGsCBt4bulYyBsw6BtIHZp4buHYyBuaMawbmcgxJHhurd0IGzhuqFpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogZ2l0azo5NjY2Cittc2dpZCAiIgorIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKKyIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCittc2dzdHIgIiIKKyJIYXJkOiDEkOG6t3QgbOG6oWkgY8OieSBsw6BtIHZp4buHYyB2w6AgbeG7pWMgbOG7pWNcbiIKKyIoaOG7p3kgYuG7jyBN4buMSSB0aGF5IMSR4buVaSBu4buZaSBi4buZKSIKKworIzogZ2l0azo5NjgzCittc2dpZCAiUmVzZXR0aW5nIgorbXNnc3RyICLEkGFuZyDEkeG6t3QgbOG6oWkiCisKKyM6IGdpdGs6OTc0MworbXNnaWQgIkNoZWNraW5nIG91dCIKK21zZ3N0ciAixJBhbmcgY2hlY2tvdXQiCisKKyM6IGdpdGs6OTc5NgorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCittc2dzdHIgIktow7RuZyB0aOG7gyB4w7NhIG5ow6FuaCBoaeG7h24gdOG6oWkgxJFhbmcgxJHGsOG7o2MgbOG6pXkgcmEiCisKKyM6IGdpdGs6OTgwMgorIywgdGNsLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCisiUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorbXNnc3RyICIiCisiQ8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIHRyw6puIG5ow6FuaCAlcyBraMO0bmcg4bufIHRyw6puIG5ow6FuaCBraMOhYy5cbiIKKyJUaOG7sWMgc+G7sSBtdeG7kW4geMOzYSBuaMOhbmggJXM/IgorCisjOiBnaXRrOjk4MzMKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCittc2dzdHIgIlRo4bq7IHbDoCDEkOG6p3U6ICVzIgorCisjOiBnaXRrOjk4NTAKK21zZ2lkICJGaWx0ZXIiCittc2dzdHIgIkLhu5kgbOG7jWMiCisKKyM6IGdpdGs6MTAxNDYKK21zZ2lkICIiCisiRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCisidGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCittc2dzdHIgIiIKKyJH4bq3cCBs4buXaSBraGkgxJHhu41jIHRow7RuZyB0aW4gaMOsbmggaOG7jWMgbOG6p24gY2h1eeG7g24gZ2lhbzsgdGjDtG5nIHRpbiBuaMOhbmggdsOgIHRo4bq7ICIKKyJ0csaw4bubYy9zYXUgc+G6vSBraMO0bmcgaG/DoG4gdGhp4buHbi4iCisKKyM6IGdpdGs6MTExMjMKK21zZ2lkICJUYWciCittc2dzdHIgIlRo4bq7IgorCisjOiBnaXRrOjExMTI3Cittc2dpZCAiSWQiCittc2dzdHIgIklkIgorCisjOiBnaXRrOjExMjEwCittc2dpZCAiR2l0ayBmb250IGNob29zZXIiCittc2dzdHIgIkjhu5lwIHRob+G6oWkgY2jhu41uIHBow7RuZyBHaXRrIgorCisjOiBnaXRrOjExMjI3Cittc2dpZCAiQiIKK21zZ3N0ciAiQiIKKworIzogZ2l0azoxMTIzMAorbXNnaWQgIkkiCittc2dzdHIgIkkiCisKKyM6IGdpdGs6MTEzNDgKK21zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gduG7gSBoaeG7g24gdGjhu4sgZGFuaCBzw6FjaCBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBnaXRrOjExMzUxCittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgorbXNnc3RyICLEkOG7mSBy4buZbmcgYmnhu4N1IMSR4buTIHThu5FpIMSRYSAoZMOybmcpIgorCisjOiBnaXRrOjExMzU1CisjLCBuby10Y2wtZm9ybWF0Cittc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKK21zZ3N0ciAixJDhu5kgcuG7mW5nIMSR4buTIHRo4buLIHThu5FpIMSRYSAoJSBj4bunYSBi4bqjbmcpIgorCisjOiBnaXRrOjExMzU4Cittc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgorbXNnc3RyICJIaeG7g24gdGjhu4sgY8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIgorCisjOiBnaXRrOjExMzYxCittc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKK21zZ3N0ciAiVOG7sSBjaOG7jW4gKMSR4buZIGTDoGkpIFNIQTEiCisKKyM6IGdpdGs6MTEzNjUKK21zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgorbXNnc3RyICLhuqhuIHRoYW0gY2hp4bq/dSDEkeG6v24gbcOheSBjaOG7pyIKKworIzogZ2l0azoxMTM2OQorbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIHRyw6xuaCBiw6B5IGPDoWMga2jDoWMgYmnhu4d0IgorCisjOiBnaXRrOjExMzcxCittc2dpZCAiVGFiIHNwYWNpbmciCittc2dzdHIgIktob+G6o25nIGPDoWNoIHRhYiIKKworIzogZ2l0azoxMTM3NAorbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCittc2dzdHIgIkhp4buDbiB0aOG7iyBjw6FjIHRo4bq7L8SR4bqndSB4dW5nIHF1YW5oIgorCisjOiBnaXRrOjExMzc3Cittc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKK21zZ3N0ciAiU+G7kSBsxrDhu6NuZyB0aOG6uy/EkeG6p3UgdOG7kWkgxJFhIHPhur0gaGnhu4NuIHRo4buLIgorCisjOiBnaXRrOjExMzgwCittc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgorbXNnc3RyICJHaeG7m2kgaOG6oW4gY8OhYyBraMOhYyBiaeG7h3QgY2hvIMSRxrDhu51uZyBk4bqrbiDEkcOjIGxp4buHdCBrw6oiCisKKyM6IGdpdGs6MTEzODMKK21zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKK21zZ3N0ciAiSOG7lyB0cuG7oyBtw6MgaMOzYSBt4buXaS1kw7JuZyIKKworIzogZ2l0azoxMTM4OSBnaXRrOjExNTM2Cittc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgorbXNnc3RyICJDw7RuZyBj4bulIHNvIHPDoW5oIHThu6sgYsOqbiBuZ2/DoGkiCisKKyM6IGdpdGs6MTEzOTAKK21zZ2lkICJDaG9vc2UuLi4iCittc2dzdHIgIkNo4buNbuKApiIKKworIzogZ2l0azoxMTM5NQorbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiBjaHVuZyIKKworIzogZ2l0azoxMTM5OAorbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKK21zZ3N0ciAiRMO5bmcgY8OhYyB3aWRnZXQgY2jhu6cgxJHhu4EiCisKKyM6IGdpdGs6MTE0MDAKK21zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgorbXNnc3RyICIoxJHhu4MgdGhheSDEkeG7lWkgY+G6p24ga2jhu59pIMSR4buZbmcgbOG6oWkpIgorCisjOiBnaXRrOjExNDAyCittc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCittc2dzdHIgIihoaeG7h24gdOG6oWkga2jDtG5nIHPhurVuIHPDoG5nKSIKKworIzogZ2l0azoxMTQxMworbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgorbXNnc3RyICJNw6B1IHPhuq9jOiBi4bqlbSB2w6BvIG7DunQgcGjDrWEgZMaw4bubaSDEkeG7gyBjaOG7jW4gbcOgdSIKKworIzogZ2l0azoxMTQxNgorbXNnaWQgIkludGVyZmFjZSIKK21zZ3N0ciAiR2lhbyBkaeG7h24iCisKKyM6IGdpdGs6MTE0MTcKK21zZ2lkICJpbnRlcmZhY2UiCittc2dzdHIgImdpYW8gZGnhu4duIgorCisjOiBnaXRrOjExNDIwCittc2dpZCAiQmFja2dyb3VuZCIKK21zZ3N0ciAiTuG7gW4iCisKKyM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQorbXNnaWQgImJhY2tncm91bmQiCittc2dzdHIgIm7hu4FuIgorCisjOiBnaXRrOjExNDI0Cittc2dpZCAiRm9yZWdyb3VuZCIKK21zZ3N0ciAiVGnhu4FuIGPhuqNuaCIKKworIzogZ2l0azoxMTQyNQorbXNnaWQgImZvcmVncm91bmQiCittc2dzdHIgInRp4buBbiBj4bqjbmgiCisKKyM6IGdpdGs6MTE0MjgKK21zZ2lkICJEaWZmOiBvbGQgbGluZXMiCittc2dzdHIgIlNvIHPDoW5oOiBkw7JuZyBjxakiCisKKyM6IGdpdGs6MTE0MjkKK21zZ2lkICJkaWZmIG9sZCBsaW5lcyIKK21zZ3N0ciAiZGlmZiBkw7JuZyBjxakiCisKKyM6IGdpdGs6MTE0MzMKK21zZ2lkICJEaWZmOiBuZXcgbGluZXMiCittc2dzdHIgIlNvIHPDoW5oOiBkw7JuZyBt4bubaSIKKworIzogZ2l0azoxMTQzNAorbXNnaWQgImRpZmYgbmV3IGxpbmVzIgorbXNnc3RyICJtw6B1IGTDsm5nIG3hu5tpIgorCisjOiBnaXRrOjExNDM4Cittc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCittc2dzdHIgIlNvIHPDoW5oOiBwaOG6p24gxJHhuqd1IGPhu6dhIMSRb+G6oW4iCisKKyM6IGdpdGs6MTE0NDAKK21zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgorbXNnc3RyICJtw6B1IGPhu6dhIHBo4bqnbiDEkeG6p3UgY+G7p2EgxJFv4bqhbiBraGkgc28gc8OhbmgiCisKKyM6IGdpdGs6MTE0NDQKK21zZ2lkICJNYXJrZWQgbGluZSBiZyIKK21zZ3N0ciAiTuG7gW4gZMOybmcgxJHDoW5oIGThuqV1IgorCisjOiBnaXRrOjExNDQ2Cittc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKK21zZ3N0ciAibuG7gW4gZMOybmcgxJHGsOG7o2MgxJHDoW5oIGThuqV1IgorCisjOiBnaXRrOjExNDUwCittc2dpZCAiU2VsZWN0IGJnIgorbXNnc3RyICJNw6B1IG7hu4FuIgorCisjOiBnaXRrOjExNDU5Cittc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKK21zZ3N0ciAiUGjDtG5nIGNo4buvOiBi4bqlbSB2w6BvIGPDoWMgbsO6dCDhu58gZMaw4bubaSDEkeG7gyBjaOG7jW4iCisKKyM6IGdpdGs6MTE0NjEKK21zZ2lkICJNYWluIGZvbnQiCittc2dzdHIgIlBow7RuZyBjaOG7ryBjaMOtbmgiCisKKyM6IGdpdGs6MTE0NjIKK21zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKK21zZ3N0ciAiUGjDtG5nIGNo4buvIGTDuW5nIGtoaSBzbyBzw6FuaCIKKworIzogZ2l0azoxMTQ2MworbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCittc2dzdHIgIlBow7RuZyBjaOG7ryBnaWFvIGRp4buHbiIKKworIzogZ2l0azoxMTQ4NQorbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCittc2dzdHIgIkPDoSBuaMOibiBow7NhIGPDoWMgY8OgaSDEkeG6t3QgY2hvIEdpdGsiCisKKyM6IGdpdGs6MTE0OTQKK21zZ2lkICJHZW5lcmFsIgorbXNnc3RyICJDaHVuZyIKKworIzogZ2l0azoxMTQ5NQorbXNnaWQgIkNvbG9ycyIKK21zZ3N0ciAiTcOgdSBz4bqvYyIKKworIzogZ2l0azoxMTQ5NgorbXNnaWQgIkZvbnRzIgorbXNnc3RyICJQaMO0bmcgY2jhu68iCisKKyM6IGdpdGs6MTE1NDYKKyMsIHRjbC1mb3JtYXQKK21zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgorbXNnc3RyICJHaXRrOiBjaOG7jW4gbcOgdSBjaG8gJXMiCisKKyM6IGdpdGs6MTIwNTkKK21zZ2lkICIiCisiU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCisiIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCittc2dzdHIgIiIKKyJS4bqldCB0aeG6v2MsIGdpdGsga2jDtG5nIHRo4buDIGNo4bqheSBUY2wvVGsgcGhpw6puIGLhuqNuIG7DoHkuXG4iCisiIEdpdGsgY+G6p24gw610IG5o4bqldCBsw6AgVGNsL1RrIDguNC4iCisKKyM6IGdpdGs6MTIyNjkKK21zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkga2hvIGdpdCDhu58gxJHDonkuIgorCisjOiBnaXRrOjEyMzE2CisjLCB0Y2wtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgorbXNnc3RyICLEkOG7kWkgc+G7kSDigJwlc+KAnSBjaMawYSByw7UgcsOgbmc6IHbhu6thIGzDoCDEkWnhu4NtIHjDqXQgZHV54buHdCB24burYSBsw6AgdMOqbiB04bqtcCB0aW4iCisKKyM6IGdpdGs6MTIzMjgKK21zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgorbXNnc3RyICLEkOG7kWkgc+G7kSBjaG8gZ2l0ayBraMO0bmcgaOG7o3AgbOG7hzoiCisKKyN+IG1zZ2lkICJtYyIKKyN+IG1zZ3N0ciAibWMiCisKKyN+IG1zZ2lkICJuZXh0IgorI34gbXNnc3RyICJ0aeG6v3AiCisKKyN+IG1zZ2lkICJwcmV2IgorI34gbXNnc3RyICJ0csaw4bubYyIKZGlmZiAtLWdpdCBhL2dpdHdlYi9JTlNUQUxMIGIvZ2l0d2ViL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA4ZjI4NQotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9JTlNUQUxMCkBAIC0wLDAgKzEsMzI5IEBACitHSVQgd2ViIEludGVyZmFjZSAoZ2l0d2ViKSBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitGaXJzdCB5b3UgaGF2ZSB0byBnZW5lcmF0ZSBnaXR3ZWIuY2dpIGZyb20gZ2l0d2ViLnBlcmwgdXNpbmcKKyJtYWtlIGdpdHdlYiIsIHRoZW4gIm1ha2UgaW5zdGFsbC1naXR3ZWIiIGFwcHJvcHJpYXRlIGZpbGVzCisoZ2l0d2ViLmNnaSwgZ2l0d2ViLmpzLCBnaXR3ZWIuY3NzLCBnaXQtbG9nby5wbmcgYW5kIGdpdC1mYXZpY29uLnBuZykKK3RvIHRoZWlyIGRlc3RpbmF0aW9uLiBGb3IgZXhhbXBsZSBpZiBnaXQgd2FzIChvciBpcykgaW5zdGFsbGVkIHdpdGgKKy91c3IgcHJlZml4IGFuZCBnaXR3ZWJkaXIgaXMgL3Zhci93d3cvY2dpLWJpbiwgeW91IGNhbiBkbworCisJJCBtYWtlIHByZWZpeD0vdXNyIGdpdHdlYiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSMgbWFrZSBnaXR3ZWJkaXI9L3Zhci93d3cvY2dpLWJpbiBpbnN0YWxsLWdpdHdlYiAgICAgOyMgYXMgcm9vdAorCitBbHRlcm5hdGl2ZWx5IHlvdSBjYW4gdXNlIGF1dG9jb25mIGdlbmVyYXRlZCAuL2NvbmZpZ3VyZSBzY3JpcHQgdG8KK3NldCB1cCBwYXRoIHRvIGdpdCBiaW5hcmllcyAodmlhIGNvbmZpZy5tYWsuYXV0b2dlbiksIHNvIHlvdSBjYW4gd3JpdGUKK2luc3RlYWQKKworCSQgbWFrZSBjb25maWd1cmUgICAgICAgICAgICAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSQgLi9jb25maWd1cmUgLS1wcmVmaXg9L3VzciAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSQgbWFrZSBnaXR3ZWIgICAgICAgICAgICAgICAgICAgICAgICA7IyBhcyB5b3Vyc2VsZgorCSMgbWFrZSBnaXR3ZWJkaXI9L3Zhci93d3cvY2dpLWJpbiBcCisJICAgICAgIGluc3RhbGwtZ2l0d2ViICAgICAgICAgICAgICAgIDsjIGFzIHJvb3QKKworVGhlIGFib3ZlIGV4YW1wbGUgYXNzdW1lcyB0aGF0IHlvdXIgd2ViIHNlcnZlciBpcyBjb25maWd1cmVkIHRvIHJ1bgorW2V4ZWN1dGFibGVdIGZpbGVzIGluIC92YXIvd3d3L2NnaS1iaW4vIGFzIHNlcnZlciBzY3JpcHRzIChhcyBDR0kKK3NjcmlwdHMpLgorCisKK1JlcXVpcmVtZW50cworLS0tLS0tLS0tLS0tCisKKyAtIENvcmUgZ2l0IHRvb2xzCisgLSBQZXJsCisgLSBQZXJsIG1vZHVsZXM6IENHSSwgRW5jb2RlLCBGY250bCwgRmlsZTo6RmluZCwgRmlsZTo6QmFzZW5hbWUuCisgLSB3ZWIgc2VydmVyCisKK1RoZSBmb2xsb3dpbmcgb3B0aW9uYWwgUGVybCBtb2R1bGVzIGFyZSByZXF1aXJlZCBmb3IgZXh0cmEgZmVhdHVyZXMKKyAtIERpZ2VzdDo6TUQ1IC0gZm9yIGdyYXZhdGFyIHN1cHBvcnQKKyAtIENHSTo6RmFzdCBhbmQgRkNHSSAtIGZvciBydW5uaW5nIGdpdHdlYiBhcyBGYXN0Q0dJIHNjcmlwdAorIC0gSFRNTDo6VGFnQ2xvdWQgLSBmb3IgZmFuY3kgdGFnIGNsb3VkIGluIHByb2plY3QgbGlzdCB2aWV3CisgLSBIVFRQOjpEYXRlIG9yIFRpbWU6OlBhcnNlRGF0ZSAtIHRvIHN1cHBvcnQgSWYtTW9kaWZpZWQtU2luY2UgZm9yIGZlZWRzCisKKworQnVpbGQgdGltZSBjb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU2VlIGFsc28gIkhvdyB0byBjb25maWd1cmUgZ2l0d2ViIGZvciB5b3VyIGxvY2FsIHN5c3RlbSIgc2VjdGlvbiBiZWxvdy4KKworLSBUaGVyZSBhcmUgbWFueSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB3aGljaCBhZmZlY3QgYnVpbGRpbmcgb2YKKyAgZ2l0d2ViLmNnaTsgc2VlICJkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGdpdHdlYiIgc2VjdGlvbiBpbiBtYWluCisgICh0b3AgZGlyKSBNYWtlZmlsZSwgYW5kIGluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgZ2l0d2ViIHRhcmdldC4KKworICBPbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IGlzIHdoZXJlIHRvIGZpbmQgdGhlIGdpdCB3cmFwcGVyIGJpbmFyeS4gR2l0d2ViCisgIHRyaWVzIHRvIGZpbmQgdGhlIGdpdCB3cmFwcGVyIGF0ICQoYmluZGlyKS9naXQsIHNvIHlvdSBoYXZlIHRvIHNldCAkYmluZGlyCisgIHdoZW4gYnVpbGRpbmcgZ2l0d2ViLmNnaSwgb3IgJHByZWZpeCBmcm9tIHdoaWNoICRiaW5kaXIgaXMgZGVyaXZlZC4gSWYKKyAgeW91IGJ1aWxkIGFuZCBpbnN0YWxsIGdpdHdlYiB0b2dldGhlciB3aXRoIHRoZSByZXN0IG9mIHRoZSBnaXQgc3VpdGUsCisgIHRoZXJlIHNob3VsZCBiZSBubyBwcm9ibGVtcy4gT3RoZXJ3aXNlLCBpZiBnaXQgd2FzIGZvciBleGFtcGxlCisgIGluc3RhbGxlZCBmcm9tIGEgYmluYXJ5IHBhY2thZ2UsIHlvdSBoYXZlIHRvIHNldCAkcHJlZml4IChvciAkYmluZGlyKQorICBhY2NvcmRpbmdseS4KKworLSBBbm90aGVyIGltcG9ydGFudCBpc3N1ZSBpcyB3aGVyZSBhcmUgZ2l0IHJlcG9zaXRvcmllcyB5b3Ugd2FudCB0byBtYWtlCisgIGF2YWlsYWJsZSB0byBnaXR3ZWIuIEJ5IGRlZmF1bHQgZ2l0d2ViIHNlYXJjaGVzIGZvciByZXBvc2l0b3JpZXMgdW5kZXIKKyAgL3B1Yi9naXQ7IGlmIHlvdSB3YW50IHRvIGhhdmUgcHJvamVjdHMgc29tZXdoZXJlIGVsc2UsIGxpa2UgL2hvbWUvZ2l0LAorICB1c2UgR0lUV0VCX1BST0pFQ1RST09UIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUuCisKKyAgQnkgZGVmYXVsdCBhbGwgZ2l0IHJlcG9zaXRvcmllcyB1bmRlciBwcm9qZWN0cm9vdCBhcmUgdmlzaWJsZSBhbmQKKyAgYXZhaWxhYmxlIHRvIGdpdHdlYi4gVGhlIGxpc3Qgb2YgcHJvamVjdHMgaXMgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgYnkKKyAgc2Nhbm5pbmcgdGhlIHByb2plY3Ryb290IGRpcmVjdG9yeSBmb3IgZ2l0IHJlcG9zaXRvcmllcy4gVGhpcyBjYW4gYmUKKyAgY2hhbmdlZCAoY29uZmlndXJlZCkgYXMgZGVzY3JpYmVkIGluICJHaXR3ZWIgcmVwb3NpdG9yaWVzIiBzZWN0aW9uCisgIGJlbG93LgorCisgIE5vdGUgdGhhdCBnaXR3ZWIgZGVhbHMgZGlyZWN0bHkgd2l0aCB0aGUgb2JqZWN0IGRhdGFiYXNlLCBhbmQgZG9lcyBub3QKKyAgbmVlZCBhIHdvcmtpbmcgZGlyZWN0b3J5OyB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBpcyB0aGUgbmFtZSBvZiBpdHMKKyAgcmVwb3NpdG9yeSBvYmplY3QgZGF0YWJhc2UsIHVzdWFsbHkgcHJvamVjdG5hbWUuZ2l0IGZvciBiYXJlCisgIHJlcG9zaXRvcmllcy4gSWYgeW91IHdhbnQgdG8gcHJvdmlkZSBnaXR3ZWIgYWNjZXNzIHRvIG5vbi1iYXJlIChsaXZlKQorICByZXBvc2l0b3JpZXMsIHlvdSBjYW4gbWFrZSBwcm9qZWN0bmFtZS5naXQgYSBzeW1ib2xpYyBsaW5rIHVuZGVyCisgIHByb2plY3Ryb290IGxpbmtpbmcgdG8gcHJvamVjdG5hbWUvLmdpdCAoYnV0IGl0IGlzIGp1c3QKKyAgYSBzdWdnZXN0aW9uKS4KKworLSBZb3UgY2FuIGNvbnRyb2wgd2hlcmUgZ2l0d2ViIHRyaWVzIHRvIGZpbmQgaXRzIG1haW4gQ1NTIHN0eWxlIGZpbGUsCisgIGl0cyBKYXZhU2NyaXB0IGZpbGUsIGl0cyBmYXZpY29uIGFuZCBsb2dvIHdpdGggdGhlIEdJVFdFQl9DU1MsIEdJVFdFQl9KUworICBHSVRXRUJfRkFWSUNPTiBhbmQgR0lUV0VCX0xPR08gYnVpbGQgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuIEJ5IGRlZmF1bHQKKyAgZ2l0d2ViIHRyaWVzIHRvIGZpbmQgdGhlbSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgZ2l0d2ViLmNnaSBzY3JpcHQuCisKKy0gWW91IGNhbiBvcHRpb25hbGx5IGdlbmVyYXRlIG1pbmlmaWVkIHZlcnNpb25zIG9mIGdpdHdlYi5qcyBhbmQgZ2l0d2ViLmNzcworICBieSBkZWZpbmluZyB0aGUgSlNNSU4gYW5kIENTU01JTiBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gQnkgZGVmYXVsdAorICB0aGUgbm9uLW1pbmlmaWVkIHZlcnNpb25zIHdpbGwgYmUgdXNlZC4gTk9URTogaWYgeW91IGVuYWJsZSB0aGlzIG9wdGlvbiwKKyAgc3Vic3RpdHV0ZSBnaXR3ZWIubWluLmpzIGFuZCBnaXR3ZWIubWluLmNzcyBmb3IgYWxsIHVzZXMgb2YgZ2l0d2ViLmpzIGFuZAorICBnaXR3ZWIuY3NzIGluIHRoZSBoZWxwIGZpbGVzLgorCisKK0hvdyB0byBjb25maWd1cmUgZ2l0d2ViIGZvciB5b3VyIGxvY2FsIHN5c3RlbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gc3BlY2lmeSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHdoZW4gYnVpbGRpbmcgR0lUOgorCisgKiBHSVRfQklORElSCisgICBQb2ludHMgd2hlcmUgdG8gZmluZCB0aGUgZ2l0IGV4ZWN1dGFibGUuICBZb3Ugc2hvdWxkIHNldCBpdCB1cCB0bworICAgdGhlIHBsYWNlIHdoZXJlIHRoZSBnaXQgYmluYXJ5IHdhcyBpbnN0YWxsZWQgKHVzdWFsbHkgL3Vzci9iaW4pIGlmIHlvdQorICAgZG9uJ3QgaW5zdGFsbCBnaXQgZnJvbSBzb3VyY2VzIHRvZ2V0aGVyIHdpdGggZ2l0d2ViLiAgW0RlZmF1bHQ6ICQoYmluZGlyKV0KKyAqIEdJVFdFQl9TSVRFTkFNRQorICAgU2hvd24gaW4gdGhlIHRpdGxlIG9mIGFsbCBnZW5lcmF0ZWQgcGFnZXMsIGRlZmF1bHRzIHRvIHRoZSBzZXJ2ZXIgbmFtZQorICAgKFNFUlZFUl9OQU1FIENHSSBlbnZpcm9ubWVudCB2YXJpYWJsZSkgaWYgbm90IHNldC4gW05vIGRlZmF1bHRdCisgKiBHSVRXRUJfUFJPSkVDVFJPT1QKKyAgIFRoZSByb290IGRpcmVjdG9yeSBmb3IgYWxsIHByb2plY3RzIHNob3duIGJ5IGdpdHdlYi4gTXVzdCBiZSBzZXQKKyAgIGNvcnJlY3RseSBmb3IgZ2l0d2ViIHRvIGZpbmQgcmVwb3NpdG9yaWVzIHRvIGRpc3BsYXkuICBTZWUgYWxzbworICAgIkdpdHdlYiByZXBvc2l0b3JpZXMiIGluIHRoZSBJTlNUQUxMIGZpbGUgZm9yIGdpdHdlYi4gIFtEZWZhdWx0OiAvcHViL2dpdF0KKyAqIEdJVFdFQl9QUk9KRUNUX01BWERFUFRICisgICBUaGUgZmlsZXN5c3RlbSB0cmF2ZXJzaW5nIGxpbWl0IGZvciBnZXR0aW5nIHRoZSBwcm9qZWN0IGxpc3Q7IHRoZSBudW1iZXIKKyAgIGlzIHRha2VuIGFzIGRlcHRoIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0cm9vdC4gIEl0IGlzIHVzZWQgd2hlbgorICAgR0lUV0VCX0xJU1QgaXMgYSBkaXJlY3RvcnkgKG9yIGlzIG5vdCBzZXQ7IHRoZW4gcHJvamVjdCByb290IGlzIHVzZWQpLgorICAgVGhpcyBpcyBtZWFudCB0byBzcGVlZCB1cCBwcm9qZWN0IGxpc3Rpbmcgb24gbGFyZ2Ugd29yayB0cmVlcyBieSBsaW1pdGluZworICAgc2VhcmNoIGRlcHRoLiAgW0RlZmF1bHQ6IDIwMDddCisgKiBHSVRXRUJfTElTVAorICAgUG9pbnRzIHRvIGEgZGlyZWN0b3J5IHRvIHNjYW4gZm9yIHByb2plY3RzIChkZWZhdWx0cyB0byBwcm9qZWN0IHJvb3QKKyAgIGlmIG5vdCBzZXQgLyBpZiBlbXB0eSkgb3IgdG8gYSBmaWxlIHdpdGggZXhwbGljaXQgbGlzdGluZyBvZiBwcm9qZWN0cworICAgKHRvZ2V0aGVyIHdpdGggcHJvamVjdHMnIG93bmVyc2hpcCkuIFNlZSAiR2VuZXJhdGluZyBwcm9qZWN0cyBsaXN0CisgICB1c2luZyBnaXR3ZWIiIGluIElOU1RBTEwgZmlsZSBmb3IgZ2l0d2ViIHRvIGZpbmQgb3V0IGhvdyB0byBnZW5lcmF0ZQorICAgc3VjaCBmaWxlIGZyb20gc2NhbiBvZiBhIGRpcmVjdG9yeS4gW05vIGRlZmF1bHQsIHdoaWNoIG1lYW5zIHVzZSByb290CisgICBkaXJlY3RvcnkgZm9yIHByb2plY3RzXQorICogR0lUV0VCX0VYUE9SVF9PSworICAgU2hvdyByZXBvc2l0b3J5IG9ubHkgaWYgdGhpcyBmaWxlIGV4aXN0cyAoaW4gcmVwb3NpdG9yeSkuICBPbmx5CisgICBlZmZlY3RpdmUgaWYgdGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdHJ1ZS4gIFtObyBkZWZhdWx0IC8gTm90IHNldF0KKyAqIEdJVFdFQl9TVFJJQ1RfRVhQT1JUCisgICBPbmx5IGFsbG93IHZpZXdpbmcgb2YgcmVwb3NpdG9yaWVzIGFsc28gc2hvd24gb24gdGhlIG92ZXJ2aWV3IHBhZ2UuCisgICBUaGlzIGZvciBleGFtcGxlIG1ha2VzIEdJVFdFQl9FWFBPUlRfT0sgdG8gZGVjaWRlIGlmIHJlcG9zaXRvcnkgaXMKKyAgIGF2YWlsYWJsZSBhbmQgbm90IG9ubHkgaWYgaXQgaXMgc2hvd24uICBJZiBHSVRXRUJfTElTVCBwb2ludHMgdG8KKyAgIGZpbGUgd2l0aCBsaXN0IG9mIHByb2plY3QsIG9ubHkgdGhvc2UgcmVwb3NpdG9yaWVzIGxpc3RlZCB3b3VsZCBiZQorICAgYXZhaWxhYmxlIGZvciBnaXR3ZWIuICBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9IT01FVEVYVAorICAgUG9pbnRzIHRvIGFuIC5odG1sIGZpbGUgd2hpY2ggaXMgaW5jbHVkZWQgb24gdGhlIGdpdHdlYiBwcm9qZWN0CisgICBvdmVydmlldyBwYWdlICgncHJvamVjdHNfbGlzdCcgdmlldyksIGlmIGl0IGV4aXN0cy4gIFJlbGF0aXZlIHRvCisgICBnaXR3ZWIuY2dpIHNjcmlwdC4gIFtEZWZhdWx0OiBpbmRleHRleHQuaHRtbF0KKyAqIEdJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkcKKyAgIGh0bWwgc25pcHBldCB0byBpbmNsdWRlIGluIHRoZSA8aGVhZD4gc2VjdGlvbiBvZiBlYWNoIHBhZ2UuIFtObyBkZWZhdWx0XQorICogR0lUV0VCX1NJVEVfSEVBREVSCisgICBGaWxlbmFtZSBvZiBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCB0b3Agb2YgZWFjaCBwYWdlLiAgUmVsYXRpdmUgdG8KKyAgIGdpdHdlYi5jZ2kgc2NyaXB0LiAgW05vIGRlZmF1bHRdCisgKiBHSVRXRUJfU0lURV9GT09URVIKKyAgIEZpbGVuYW1lIG9mIGh0bWwgdGV4dCB0byBpbmNsdWRlIGF0IGJvdHRvbSBvZiBlYWNoIHBhZ2UuICBSZWxhdGl2ZSB0bworICAgZ2l0d2ViLmNnaSBzY3JpcHQuICBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9IT01FX0xJTktfU1RSCisgICBTdHJpbmcgb2YgdGhlIGhvbWUgbGluayBvbiB0b3Agb2YgYWxsIHBhZ2VzLCBsZWFkaW5nIHRvICRob21lX2xpbmsKKyAgICh1c3VhbGx5IG1haW4gZ2l0d2ViIHBhZ2UsIHdoaWNoIG1lYW5zIHByb2plY3RzIGxpc3QpLiAgVXNlZCBhcyBmaXJzdAorICAgcGFydCBvZiBnaXR3ZWIgdmlldyAiYnJlYWRjcnVtYiB0cmFpbCI6IDxob21lPiAvIDxwcm9qZWN0PiAvIDx2aWV3Pi4KKyAgIFtEZWZhdWx0OiBwcm9qZWN0c10KKyAqIEdJVFdFQl9TSVRFTkFNRQorICAgTmFtZSBvZiB5b3VyIHNpdGUgb3Igb3JnYW5pemF0aW9uIHRvIGFwcGVhciBpbiBwYWdlIHRpdGxlcy4gIFNldCBpdAorICAgdG8gc29tZXRoaW5nIGRlc2NyaXB0aXZlIGZvciBjbGVhcmVyIGJvb2ttYXJrcyBldGMuICBJZiBub3Qgc2V0CisgICAoaWYgZW1wdHkpIGdpdHdlYiB1c2VzICIkU0VSVkVSX05BTUUgR2l0Iiwgb3IgIlVudGl0bGVkIEdpdCIgaWYKKyAgIFNFUlZFUl9OQU1FIENHSSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0IChlLmcuIGlmIHJ1bm5pbmcKKyAgIGdpdHdlYiBhcyBzdGFuZGFsb25lIHNjcmlwdCkuICBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9CQVNFX1VSTAorICAgR2l0IGJhc2UgVVJMcyB1c2VkIGZvciBVUkwgdG8gd2hlcmUgZmV0Y2ggcHJvamVjdCBmcm9tLCBpLmUuIGZ1bGwKKyAgIFVSTCBpcyAiJGdpdF9iYXNlX3VybC8kcHJvamVjdCIuICBTaG93biBvbiBwcm9qZWN0cyBzdW1tYXJ5IHBhZ2UuCisgICBSZXBvc2l0b3J5IFVSTCBmb3IgcHJvamVjdCBjYW4gYmUgYWxzbyBjb25maWd1cmVkIHBlciByZXBvc2l0b3J5OyB0aGlzCisgICB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgVVJMcyBjb21wb3NlZCBmcm9tIGJhc2UgVVJMIGFuZCBhIHByb2plY3QgbmFtZS4KKyAgIE5vdGUgdGhhdCB5b3UgY2FuIHNldHVwIG11bHRpcGxlIGJhc2UgVVJMcyAoZm9yIGV4YW1wbGUgb25lIGZvcgorICAgZ2l0Oi8vIHByb3RvY29sIGFjY2VzcywgYW5vdGhlciBmb3IgaHR0cDovLyBhY2Nlc3MpIGZyb20gdGhlIGdpdHdlYgorICAgY29uZmlnIGZpbGUuICBbTm8gZGVmYXVsdF0KKyAqIEdJVFdFQl9DU1MKKyAgIFBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgeW91IHB1dCBnaXR3ZWIuY3NzIG9uIHlvdXIgd2ViIHNlcnZlcgorICAgKG9yIHRvIGJlIG1vcmUgZ2VuZXJpYywgdGhlIFVSSSBvZiBnaXR3ZWIgc3R5bGVzaGVldCkuICBSZWxhdGl2ZSB0byB0aGUKKyAgIGJhc2UgVVJJIG9mIGdpdHdlYi4gIE5vdGUgdGhhdCB5b3UgY2FuIHNldHVwIG11bHRpcGxlIHN0eWxlc2hlZXRzIGZyb20KKyAgIHRoZSBnaXR3ZWIgY29uZmlnIGZpbGUuICBbRGVmYXVsdDogc3RhdGljL2dpdHdlYi5jc3MgKG9yCisgICBzdGF0aWMvZ2l0d2ViLm1pbi5jc3MgaWYgdGhlIENTU01JTiB2YXJpYWJsZSBpcyBkZWZpbmVkIC8gQ1NTIG1pbmlmaWVyCisgICBpcyB1c2VkKV0KKyAqIEdJVFdFQl9KUworICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0IGdpdHdlYi5qcyBvbiB5b3VyIHdlYiBzZXJ2ZXIKKyAgIChvciB0byBiZSBtb3JlIGdlbmVyaWMgVVJJIG9mIEphdmFTY3JpcHQgY29kZSB1c2VkIGJ5IGdpdHdlYikuCisgICBSZWxhdGl2ZSB0byBiYXNlIFVSSSBvZiBnaXR3ZWIuICBbRGVmYXVsdDogc3RhdGljL2dpdHdlYi5qcyAob3IKKyAgIHN0YXRpYy9naXR3ZWIubWluLmpzIGlmIEpTTUlOIGJ1aWxkIHZhcmlhYmxlIGlzIGRlZmluZWQgLyBKYXZhU2NyaXB0CisgICBtaW5pZmllciBpcyB1c2VkKV0KKyAqIENTU01JTiwgSlNNSU4KKyAgIEludm9jYXRpb24gb2YgYSBDU1MgbWluaWZpZXIgb3IgYSBKYXZhU2NyaXB0IG1pbmlmaWVyLCByZXNwZWN0aXZlbHksCisgICB3b3JraW5nIGFzIGEgZmlsdGVyIChzb3VyY2Ugb24gc3RhbmRhcmQgaW5wdXQsIG1pbmlmaWVkIHJlc3VsdCBvbgorICAgc3RhbmRhcmQgb3V0cHV0KS4gIElmIHNldCwgaXQgaXMgdXNlZCB0byBnZW5lcmF0ZSBhIG1pbmlmaWVkIHZlcnNpb24gb2YKKyAgICdzdGF0aWMvZ2l0d2ViLmNzcycgb3IgJ3N0YXRpYy9naXR3ZWIuanMnLCByZXNwZWN0aXZlbHkuICAqTm90ZSogdGhhdAorICAgbWluaWZpZWQgZmlsZXMgd291bGQgaGF2ZSAqLm1pbi5jc3MgYW5kICoubWluLmpzIGV4dGVuc2lvbiwgd2hpY2ggaXMKKyAgIGltcG9ydGFudCBpZiB5b3UgYWxzbyBzZXQgR0lUV0VCX0NTUyBhbmQvb3IgR0lUV0VCX0pTLiAgW05vIGRlZmF1bHRdCisgKiBHSVRXRUJfTE9HTworICAgUG9pbnRzIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3UgcHV0IGdpdC1sb2dvLnBuZyBvbiB5b3VyIHdlYiBzZXJ2ZXIKKyAgIChvciB0byBiZSBtb3JlIGdlbmVyaWMgVVJJIG9mIGxvZ28sIDcyeDI3IHNpemUsIGRpc3BsYXllZCBpbiB0b3AgcmlnaHQKKyAgIGNvcm5lciBvZiBlYWNoIGdpdHdlYiBwYWdlLCBhbmQgdXNlZCBhcyBsb2dvIGZvciBBdG9tIGZlZWQpLiAgUmVsYXRpdmUKKyAgIHRvIGJhc2UgVVJJIG9mIGdpdHdlYi4gIFtEZWZhdWx0OiBzdGF0aWMvZ2l0LWxvZ28ucG5nXQorICogR0lUV0VCX0ZBVklDT04KKyAgIFBvaW50cyB0byB0aGUgbG9jYXRpb24gd2hlcmUgeW91IHB1dCBnaXQtZmF2aWNvbi5wbmcgb24geW91ciB3ZWIgc2VydmVyCisgICAob3IgdG8gYmUgbW9yZSBnZW5lcmljIFVSSSBvZiBmYXZpY29uLCBhc3N1bWVkIHRvIGJlIGltYWdlL3BuZyB0eXBlOworICAgd2ViIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBmYXZpY29ucyAod2Vic2l0ZSBpY29ucykgbWF5IGRpc3BsYXkgdGhlbQorICAgaW4gdGhlIGJyb3dzZXIncyBVUkwgYmFyIGFuZCBuZXh0IHRvIHNpdGUgbmFtZSBpbiBib29rbWFya3MpLiAgUmVsYXRpdmUKKyAgIHRvIGJhc2UgVVJJIG9mIGdpdHdlYi4gIFtEZWZhdWx0OiBzdGF0aWMvZ2l0LWZhdmljb24ucG5nXQorICogR0lUV0VCX0NPTkZJRworICAgVGhpcyBQZXJsIGZpbGUgd2lsbCBiZSBsb2FkZWQgdXNpbmcgJ2RvJyBhbmQgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55CisgICBvZiB0aGUgb3B0aW9ucyBhYm92ZSBhcyB3ZWxsIGFzIHNvbWUgb3RoZXIgb3B0aW9ucyAtLSBzZWUgdGhlICJSdW50aW1lCisgICBnaXR3ZWIgY29uZmlndXJhdGlvbiIgc2VjdGlvbiBiZWxvdywgYW5kIHRvcCBvZiAnZ2l0d2ViLmNnaScgZm9yIHRoZWlyCisgICBmdWxsIGxpc3QgYW5kIGRlc2NyaXB0aW9uLiAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdJVFdFQl9DT05GSUcKKyAgIGlzIHNldCB3aGVuIGdpdHdlYi5jZ2kgaXMgZXhlY3V0ZWQsIHRoZW4gdGhlIGZpbGUgc3BlY2lmaWVkIGluIHRoZQorICAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBsb2FkZWQgaW5zdGVhZCBvZiB0aGUgZmlsZSBzcGVjaWZpZWQKKyAgIHdoZW4gZ2l0d2ViLmNnaSB3YXMgY3JlYXRlZC4gIFtEZWZhdWx0OiBnaXR3ZWJfY29uZmlnLnBlcmxdCisgKiBHSVRXRUJfQ09ORklHX1NZU1RFTQorICAgVGhpcyBQZXJsIGZpbGUgd2lsbCBiZSBsb2FkZWQgdXNpbmcgJ2RvJyBhcyBhIGZhbGxiYWNrIGlmIEdJVFdFQl9DT05GSUcKKyAgIGRvZXMgbm90IGV4aXN0LiAgSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEdJVFdFQl9DT05GSUdfU1lTVEVNIGlzIHNldAorICAgd2hlbiBnaXR3ZWIuY2dpIGlzIGV4ZWN1dGVkLCB0aGVuIHRoZSBmaWxlIHNwZWNpZmllZCBpbiB0aGUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlIHdpbGwgYmUgbG9hZGVkIGluc3RlYWQgb2YgdGhlIGZpbGUgc3BlY2lmaWVkIHdoZW4gZ2l0d2ViLmNnaSB3YXMKKyAgIGNyZWF0ZWQuICBbRGVmYXVsdDogL2V0Yy9naXR3ZWIuY29uZl0KKyAqIEhJR0hMSUdIVF9CSU4KKyAgIFBhdGggdG8gdGhlIGhpZ2hsaWdodCBleGVjdXRhYmxlIHRvIHVzZSAobXVzdCBiZSB0aGUgb25lIGZyb20KKyAgIGh0dHA6Ly93d3cuYW5kcmUtc2ltb24uZGUgZHVlIHRvIGFzc3VtcHRpb25zIGFib3V0IHBhcmFtZXRlcnMgYW5kIG91dHB1dCkuCisgICBVc2VmdWwgaWYgaGlnaGxpZ2h0IGlzIG5vdCBpbnN0YWxsZWQgb24geW91ciB3ZWJzZXJ2ZXIncyBQQVRILgorICAgW0RlZmF1bHQ6IGhpZ2hsaWdodF0KKworQnVpbGQgZXhhbXBsZQorfn5+fn5+fn5+fn5+fgorCistIFRvIGluc3RhbGwgZ2l0d2ViIHRvIC92YXIvd3d3L2NnaS1iaW4vZ2l0d2ViLywgd2hlbiBnaXQgd3JhcHBlcgorICBpcyBpbnN0YWxsZWQgYXQgL3Vzci9sb2NhbC9iaW4vZ2l0LCB0aGUgcmVwb3NpdG9yaWVzIChwcm9qZWN0cykKKyAgd2Ugd2FudCB0byBkaXNwbGF5IGFyZSB1bmRlciAvaG9tZS9sb2NhbC9zY20sIGFuZCB5b3UgZG8gbm90IHVzZQorICBtaW5pZmllcnMsIHlvdSBjYW4gZG8KKworCW1ha2UgR0lUV0VCX1BST0pFQ1RST09UPSIvaG9tZS9sb2NhbC9zY20iIFwKKwkgICAgIEdJVFdFQl9KUz0iZ2l0d2ViL3N0YXRpYy9naXR3ZWIuanMiIFwKKwkgICAgIEdJVFdFQl9DU1M9ImdpdHdlYi9zdGF0aWMvZ2l0d2ViLmNzcyIgXAorCSAgICAgR0lUV0VCX0xPR089ImdpdHdlYi9zdGF0aWMvZ2l0LWxvZ28ucG5nIiBcCisJICAgICBHSVRXRUJfRkFWSUNPTj0iZ2l0d2ViL3N0YXRpYy9naXQtZmF2aWNvbi5wbmciIFwKKwkgICAgIGJpbmRpcj0vdXNyL2xvY2FsL2JpbiBcCisJICAgICBnaXR3ZWIKKworCW1ha2UgZ2l0d2ViZGlyPS92YXIvd3d3L2NnaS1iaW4vZ2l0d2ViIGluc3RhbGwtZ2l0d2ViCisKKworR2l0d2ViIGNvbmZpZyBmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0KKworU2VlIGFsc28gIlJ1bnRpbWUgZ2l0d2ViIGNvbmZpZ3VyYXRpb24iIHNlY3Rpb24gaW4gUkVBRE1FIGZpbGUKK2ZvciBnaXR3ZWIgKGluIGdpdHdlYi9SRUFETUUpLCBhbmQgZ2l0d2ViLmNvbmYoNSkgbWFucGFnZS4KKworLSBZb3UgY2FuIGNvbmZpZ3VyZSBnaXR3ZWIgZnVydGhlciB1c2luZyB0aGUgcGVyLWluc3RhbmNlIGdpdHdlYiBjb25maWd1cmF0aW9uIGZpbGU7CisgIGJ5IGRlZmF1bHQgdGhpcyBpcyBhIGZpbGUgbmFtZWQgZ2l0d2ViX2NvbmZpZy5wZXJsIGluIHRoZSBzYW1lIHBsYWNlIGFzCisgIGdpdHdlYi5jZ2kgc2NyaXB0LiBZb3UgY2FuIGNvbnRyb2wgdGhlIGRlZmF1bHQgcGxhY2UgZm9yIHRoZSBjb25maWcgZmlsZQorICB1c2luZyB0aGUgR0lUV0VCX0NPTkZJRyBidWlsZCBjb25maWd1cmF0aW9uIHZhcmlhYmxlLCBhbmQgeW91IGNhbiBzZXQgaXQKKyAgdXNpbmcgdGhlIEdJVFdFQl9DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUuIElmIHRoaXMgZmlsZSBkb2VzIG5vdAorICBleGlzdCwgZ2l0d2ViIGxvb2tzIGZvciBhIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSwgbm9ybWFsbHkKKyAgL2V0Yy9naXR3ZWIuY29uZi4gWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgdXNpbmcgdGhlCisgIEdJVFdFQl9DT05GSUdfU1lTVEVNIGJ1aWxkIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGFuZCBvdmVycmlkZSBpdAorICB0aHJvdWdoIHRoZSBHSVRXRUJfQ09ORklHX1NZU1RFTSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICBOb3RlIHRoYXQgdGhlIEdJVFdFQl9DT05GSUdfU1lTVEVNIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcworICBvbmx5IHVzZWQgZm9yIGluc3RhbmNlcyB0aGF0IGxhY2sgcGVyLWluc3RhbmNlIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgWW91IGNhbiB1c2UgR0lUV0VCX0NPTkZJR19DT01NT04gY29tbW9uIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24KKyAgZmlsZSAobm9ybWFsbHkgL2V0Yy9naXR3ZWItY29tbW9uLmNvbmYpIHRvIGtlZXAgY29tbW9uIGRlZmF1bHQKKyAgc2V0dGluZ3MgdGhhdCBhcHBseSB0byBhbGwgaW5zdGFuY2VzLiAgU2V0dGluZ3MgZnJvbSBwZXItaW5zdGFuY2Ugb3IKKyAgc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlIG92ZXJyaWRlIHRob3NlIGZyb20gY29tbW9uIHN5c3RlbS13aWRlCisgIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworLSBUaGUgZ2l0d2ViIGNvbmZpZyBmaWxlIGlzIGEgZnJhZ21lbnQgb2YgcGVybCBjb2RlLiBZb3UgY2FuIHNldCB2YXJpYWJsZXMKKyAgdXNpbmcgIm91ciAkdmFyaWFibGUgPSB2YWx1ZSI7IHRleHQgZnJvbSAiIyIgY2hhcmFjdGVyIHVudGlsIHRoZSBlbmQKKyAgb2YgYSBsaW5lIGlzIGlnbm9yZWQuIFNlZSBwZXJsc3luKDEpIGZvciBkZXRhaWxzLgorCisgIFNlZSB0aGUgdG9wIG9mIGdpdHdlYi5wZXJsIGZpbGUgZm9yIGV4YW1wbGVzIG9mIGN1c3RvbWl6YWJsZSBvcHRpb25zLgorCitDb25maWcgZmlsZSBleGFtcGxlCit+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1RvIGVuYWJsZSBibGFtZSwgcGlja2F4ZSBzZWFyY2gsIGFuZCBzbmFwc2hvdCBzdXBwb3J0LCB3aGlsZSBhbGxvd2luZworaW5kaXZpZHVhbCBwcm9qZWN0cyB0byB0dXJuIHRoZW0gb2ZmLCBwdXQgdGhlIGZvbGxvd2luZyBpbiB5b3VyCitHSVRXRUJfQ09ORklHIGZpbGU6CisKKwkkZmVhdHVyZXsnYmxhbWUnfXsnZGVmYXVsdCd9ID0gWzFdOworCSRmZWF0dXJleydibGFtZSd9eydvdmVycmlkZSd9ID0gMTsKKworCSRmZWF0dXJleydwaWNrYXhlJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkkZmVhdHVyZXsncGlja2F4ZSd9eydvdmVycmlkZSd9ID0gMTsKKworCSRmZWF0dXJleydzbmFwc2hvdCd9eydkZWZhdWx0J30gPSBbJ3ppcCcsICd0Z3onXTsKKwkkZmVhdHVyZXsnc25hcHNob3QnfXsnb3ZlcnJpZGUnfSA9IDE7CisKK0lmIHlvdSBhbGxvdyBvdmVycmlkaW5nIGZvciB0aGUgc25hcHNob3QgZmVhdHVyZSwgeW91IGNhbiBzcGVjaWZ5IHdoaWNoCitzbmFwc2hvdCBmb3JtYXRzIGFyZSBnbG9iYWxseSBkaXNhYmxlZC4gWW91IGNhbiBhbHNvIGFkZCBhbnkgY29tbWFuZCBsaW5lCitvcHRpb25zIHlvdSB3YW50IChzdWNoIGFzIHNldHRpbmcgdGhlIGNvbXByZXNzaW9uIGxldmVsKS4gRm9yIGluc3RhbmNlLAoreW91IGNhbiBkaXNhYmxlIFppcCBjb21wcmVzc2VkIHNuYXBzaG90cyBhbmQgc2V0IEdaaXAgdG8gcnVuIGF0IGxldmVsIDYgYnkKK2FkZGluZyB0aGUgZm9sbG93aW5nIGxpbmVzIHRvIHlvdXIgJEdJVFdFQl9DT05GSUc6CisKKwkka25vd25fc25hcHNob3RfZm9ybWF0c3snemlwJ317J2Rpc2FibGVkJ30gPSAxOworCSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd0Z3onfXsnY29tcHJlc3Nvcid9ID0gWydnemlwJywnLTYnXTsKKworCitHaXR3ZWIgcmVwb3NpdG9yaWVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK0J5IGRlZmF1bHQgZ2l0d2ViIHNob3dzIGFsbCBnaXQgcmVwb3NpdG9yaWVzIHVuZGVyIHNpbmdsZSBjb21tb24gcmVwb3NpdG9yeQorcm9vdCBvbiBhIGxvY2FsIGZpbGVzeXN0ZW07IHNlZSBkZXNjcmlwdGlvbiBvZiBHSVRXRUJfUFJPSkVDVFJPT1QgYnVpbGQtdGltZQorY29uZmlndXJhdGlvbiB2YXJpYWJsZSBhYm92ZSAoYW5kIGFsc28gb2YgR0lUV0VCX0xJU1QpLgorCitNb3JlIGFkdmFuY2VkIHVzYWdlLCBsaWtlIGxpbWl0aW5nIGFjY2VzcyBvciB2aXNpYmlsaXR5IG9mIHJlcG9zaXRvcmllcyBhbmQKK21hbmFnaW5nIG11bHRpcGxlIHJvb3RzIGFyZSBkZXNjcmliZWQgb24gZ2l0d2ViIG1hbnBhZ2UuCisKKworRXhhbXBsZSB3ZWIgc2VydmVyIGNvbmZpZ3VyYXRpb24KK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK1NlZSBhbHNvICJXZWJzZXJ2ZXIgY29uZmlndXJhdGlvbiIgYW5kICJBZHZhbmNlZCB3ZWIgc2VydmVyIHNldHVwIiBzZWN0aW9ucworaW4gZ2l0d2ViKDEpIG1hbnBhZ2UuCisKKworLSBBcGFjaGUyLCBnaXR3ZWIgaW5zdGFsbGVkIGFzIENHSSBzY3JpcHQsCisgIHVuZGVyIC92YXIvd3d3L2NnaS1iaW4vCisKKwlTY3JpcHRBbGlhcyAvY2dpLWJpbi8gIi92YXIvd3d3L2NnaS1iaW4vIgorCisJPERpcmVjdG9yeSAiL3Zhci93d3cvY2dpLWJpbiI+CisJICAgIE9wdGlvbnMgSW5kZXhlcyBGb2xsb3dTeW1saW5rcyBFeGVjQ0dJCisJICAgIEFsbG93T3ZlcnJpZGUgTm9uZQorCSAgICBPcmRlciBhbGxvdyxkZW55CisJICAgIEFsbG93IGZyb20gYWxsCisJPC9EaXJlY3Rvcnk+CisKKy0gQXBhY2hlMiwgZ2l0d2ViIGluc3RhbGxlZCBhcyBtb2RfcGVybCBsZWdhY3kgc2NyaXB0LAorICB1bmRlciAvdmFyL3d3dy9wZXJsLworCisJQWxpYXMgL3BlcmwgIi92YXIvd3d3L3BlcmwiCisKKwk8RGlyZWN0b3J5ICIvdmFyL3d3dy9wZXJsIj4KKwkgICAgU2V0SGFuZGxlciBwZXJsLXNjcmlwdAorCSAgICBQZXJsUmVzcG9uc2VIYW5kbGVyIE1vZFBlcmw6OlJlZ2lzdHJ5CisJICAgIFBlcmxPcHRpb25zICtQYXJzZUhlYWRlcnMKKwkgICAgT3B0aW9ucyBJbmRleGVzIEZvbGxvd1N5bWxpbmtzICtFeGVjQ0dJCisJICAgIEFsbG93T3ZlcnJpZGUgTm9uZQorCSAgICBPcmRlciBhbGxvdyxkZW55CisJICAgIEFsbG93IGZyb20gYWxsCisJPC9EaXJlY3Rvcnk+CmRpZmYgLS1naXQgYS9naXR3ZWIvTWFrZWZpbGUgYi9naXR3ZWIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QxOTRkMAotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9NYWtlZmlsZQpAQCAtMCwwICsxLDE5NSBAQAorIyBUaGUgZGVmYXVsdCB0YXJnZXQgb2YgdGhpcyBNYWtlZmlsZSBpcy4uLgorYWxsOjoKKworIyBEZWZpbmUgVj0xIHRvIGhhdmUgYSBtb3JlIHZlcmJvc2UgY29tcGlsZS4KKyMKKyMgRGVmaW5lIEpTTUlOIHRvIHBvaW50IHRvIEphdmFTY3JpcHQgbWluaWZpZXIgdGhhdCBmdW5jdGlvbnMgYXMKKyMgYSBmaWx0ZXIgdG8gaGF2ZSBzdGF0aWMvZ2l0d2ViLmpzIG1pbmlmaWVkLgorIworIyBEZWZpbmUgQ1NTTUlOIHRvIHBvaW50IHRvIGEgQ1NTIG1pbmlmaWVyIGluIG9yZGVyIHRvIGdlbmVyYXRlIGEgbWluaWZpZWQKKyMgdmVyc2lvbiBvZiBzdGF0aWMvZ2l0d2ViLmNzcworIworCitwcmVmaXggPz0gJChIT01FKQorYmluZGlyID89ICQocHJlZml4KS9iaW4KK2dpdHdlYmRpciA/PSAvdmFyL3d3dy9jZ2ktYmluCisKK1JNID89IHJtIC1mCitJTlNUQUxMID89IGluc3RhbGwKKworIyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGdpdHdlYgorR0lUV0VCX0NPTkZJRyA9IGdpdHdlYl9jb25maWcucGVybAorR0lUV0VCX0NPTkZJR19TWVNURU0gPSAvZXRjL2dpdHdlYi5jb25mCitHSVRXRUJfQ09ORklHX0NPTU1PTiA9IC9ldGMvZ2l0d2ViLWNvbW1vbi5jb25mCitHSVRXRUJfSE9NRV9MSU5LX1NUUiA9IHByb2plY3RzCitHSVRXRUJfU0lURU5BTUUgPQorR0lUV0VCX1BST0pFQ1RST09UID0gL3B1Yi9naXQKK0dJVFdFQl9QUk9KRUNUX01BWERFUFRIID0gMjAwNworR0lUV0VCX0VYUE9SVF9PSyA9CitHSVRXRUJfU1RSSUNUX0VYUE9SVCA9CitHSVRXRUJfQkFTRV9VUkwgPQorR0lUV0VCX0xJU1QgPQorR0lUV0VCX0hPTUVURVhUID0gaW5kZXh0ZXh0Lmh0bWwKK0dJVFdFQl9DU1MgPSBzdGF0aWMvZ2l0d2ViLmNzcworR0lUV0VCX0xPR08gPSBzdGF0aWMvZ2l0LWxvZ28ucG5nCitHSVRXRUJfRkFWSUNPTiA9IHN0YXRpYy9naXQtZmF2aWNvbi5wbmcKK0dJVFdFQl9KUyA9IHN0YXRpYy9naXR3ZWIuanMKK0dJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkcgPQorR0lUV0VCX1NJVEVfSEVBREVSID0KK0dJVFdFQl9TSVRFX0ZPT1RFUiA9CitISUdITElHSFRfQklOID0gaGlnaGxpZ2h0CisKKyMgaW5jbHVkZSB1c2VyIGNvbmZpZworLWluY2x1ZGUgLi4vY29uZmlnLm1hay5hdXRvZ2VuCistaW5jbHVkZSAuLi9jb25maWcubWFrCistaW5jbHVkZSBjb25maWcubWFrCisKKyMgZGV0ZXJtaW5lIHZlcnNpb24KKy4uL0dJVC1WRVJTSU9OLUZJTEU6IC5GT1JDRS1HSVQtVkVSU0lPTi1GSUxFCisJJChRVUlFVF9TVUJESVIwKS4uLyAkKFFVSUVUX1NVQkRJUjEpIEdJVC1WRVJTSU9OLUZJTEUKKworLWluY2x1ZGUgLi4vR0lULVZFUlNJT04tRklMRQorCisjIyMgQnVpbGQgcnVsZXMKKworU0hFTExfUEFUSCA/PSAkKFNIRUxMKQorUEVSTF9QQVRIICA/PSAvdXNyL2Jpbi9wZXJsCisKKyMgU2hlbGwgcXVvdGU7CitiaW5kaXJfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKGJpbmRpcikpIycKK2dpdHdlYmRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoZ2l0d2ViZGlyKSkjJworZ2l0d2Vic3RhdGljZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJChnaXR3ZWJkaXIpL3N0YXRpYykjJworU0hFTExfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoU0hFTExfUEFUSCkpIycKK1BFUkxfUEFUSF9TUSAgPSAkKHN1YnN0ICcsJ1wnJywkKFBFUkxfUEFUSCkpIycKK0RFU1RESVJfU1EgICAgPSAkKHN1YnN0ICcsJ1wnJywkKERFU1RESVIpKSMnCisKKyMgUXVpZXQgZ2VuZXJhdGlvbiAodW5sZXNzIFY9MSkKK1FVSUVUX1NVQkRJUjAgID0gKyQoTUFLRSkgLUMgIyBzcGFjZSB0byBzZXBhcmF0ZSAtQyBhbmQgc3ViZGlyCitRVUlFVF9TVUJESVIxICA9CisKK2lmbmVxICgkKGZpbmRzdHJpbmcgJChNQUtFRkxBR1MpLHcpLHcpCitQUklOVF9ESVIgPSAtLW5vLXByaW50LWRpcmVjdG9yeQorZWxzZSAjICJtYWtlIC13IgorTk9fU1VCRElSID0gOgorZW5kaWYKKworaWZuZXEgKCQoZmluZHN0cmluZyAkKE1BS0VGTEFHUykscykscykKK2lmbmRlZiBWCisJUVVJRVQgICAgICAgICAgPSBACisJUVVJRVRfR0VOICAgICAgPSAkKFFVSUVUKWVjaG8gJyAgICcgR0VOICRAOworCVFVSUVUX1NVQkRJUjAgID0gK0BzdWJkaXI9CisJUVVJRVRfU1VCRElSMSAgPSA7JChOT19TVUJESVIpIGVjaG8gJyAgICcgU1VCRElSICQkc3ViZGlyOyBcCisJICAgICAgICAgICAgICAgICAkKE1BS0UpICQoUFJJTlRfRElSKSAtQyAkJHN1YmRpcgorCWV4cG9ydCBWCisJZXhwb3J0IFFVSUVUCisJZXhwb3J0IFFVSUVUX0dFTgorCWV4cG9ydCBRVUlFVF9TVUJESVIwCisJZXhwb3J0IFFVSUVUX1NVQkRJUjEKK2VuZGlmCitlbmRpZgorCithbGw6OiBnaXR3ZWIuY2dpIHN0YXRpYy9naXR3ZWIuanMKKworR0lUV0VCX1BST0dSQU1TID0gZ2l0d2ViLmNnaQorCitpZmRlZiBKU01JTgorR0lUV0VCX0ZJTEVTICs9IHN0YXRpYy9naXR3ZWIubWluLmpzCitHSVRXRUJfSlMgPSBzdGF0aWMvZ2l0d2ViLm1pbi5qcworYWxsOjogc3RhdGljL2dpdHdlYi5taW4uanMKK3N0YXRpYy9naXR3ZWIubWluLmpzOiBzdGF0aWMvZ2l0d2ViLmpzIEdJVFdFQi1CVUlMRC1PUFRJT05TCisJJChRVUlFVF9HRU4pJChKU01JTikgPCQ8ID4kQAorZWxzZQorR0lUV0VCX0ZJTEVTICs9IHN0YXRpYy9naXR3ZWIuanMKK2VuZGlmCisKK2lmZGVmIENTU01JTgorR0lUV0VCX0ZJTEVTICs9IHN0YXRpYy9naXR3ZWIubWluLmNzcworR0lUV0VCX0NTUyA9IHN0YXRpYy9naXR3ZWIubWluLmNzcworYWxsOjogc3RhdGljL2dpdHdlYi5taW4uY3NzCitzdGF0aWMvZ2l0d2ViLm1pbi5jc3M6IHN0YXRpYy9naXR3ZWIuY3NzIEdJVFdFQi1CVUlMRC1PUFRJT05TCisJJChRVUlFVF9HRU4pJChDU1NNSU4pIDwkPCA+JEAKK2Vsc2UKK0dJVFdFQl9GSUxFUyArPSBzdGF0aWMvZ2l0d2ViLmNzcworZW5kaWYKKworR0lUV0VCX0ZJTEVTICs9IHN0YXRpYy9naXQtbG9nby5wbmcgc3RhdGljL2dpdC1mYXZpY29uLnBuZworCisjIEphdmFTY3JpcHQgZmlsZXMgdGhhdCBhcmUgY29tcG9zZWQgKGNvbmNhdGVuYXRlZCkgdG8gZm9ybSBnaXR3ZWIuanMKKyMKKyMganMvbGliL2NvbW1vbi1saWIuanMgc2hvdWxkIGJlIGFsd2F5cyBmaXJzdCwgdGhlbiBqcy9saWIvKi5qcywKKyMgdGhlbiB0aGUgcmVzdCBvZiBmaWxlczsganMvZ2l0d2ViLmpzIHNob3VsZCBiZSBsYXN0IChpZiBpdCBleGlzdHMpCitHSVRXRUJfSlNMSUJfRklMRVMgKz0gc3RhdGljL2pzL2xpYi9jb21tb24tbGliLmpzCitHSVRXRUJfSlNMSUJfRklMRVMgKz0gc3RhdGljL2pzL2xpYi9kYXRldGltZS5qcworR0lUV0VCX0pTTElCX0ZJTEVTICs9IHN0YXRpYy9qcy9saWIvY29va2llcy5qcworR0lUV0VCX0pTTElCX0ZJTEVTICs9IHN0YXRpYy9qcy9qYXZhc2NyaXB0LWRldGVjdGlvbi5qcworR0lUV0VCX0pTTElCX0ZJTEVTICs9IHN0YXRpYy9qcy9hZGp1c3QtdGltZXpvbmUuanMKK0dJVFdFQl9KU0xJQl9GSUxFUyArPSBzdGF0aWMvanMvYmxhbWVfaW5jcmVtZW50YWwuanMKKworCitHSVRXRUJfUkVQTEFDRSA9IFwKKwktZSAnc3wrK0dJVF9WRVJTSU9OKyt8JChHSVRfVkVSU0lPTil8ZycgXAorCS1lICdzfCsrR0lUX0JJTkRJUisrfCQoYmluZGlyKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfQ09ORklHKyt8JChHSVRXRUJfQ09ORklHKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfQ09ORklHX1NZU1RFTSsrfCQoR0lUV0VCX0NPTkZJR19TWVNURU0pfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9DT05GSUdfQ09NTU9OKyt8JChHSVRXRUJfQ09ORklHX0NPTU1PTil8ZycgXAorCS1lICdzfCsrR0lUV0VCX0hPTUVfTElOS19TVFIrK3wkKEdJVFdFQl9IT01FX0xJTktfU1RSKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfU0lURU5BTUUrK3wkKEdJVFdFQl9TSVRFTkFNRSl8ZycgXAorCS1lICdzfCsrR0lUV0VCX1BST0pFQ1RST09UKyt8JChHSVRXRUJfUFJPSkVDVFJPT1QpfGcnIFwKKwktZSAnc3wiKytHSVRXRUJfUFJPSkVDVF9NQVhERVBUSCsrInwkKEdJVFdFQl9QUk9KRUNUX01BWERFUFRIKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfRVhQT1JUX09LKyt8JChHSVRXRUJfRVhQT1JUX09LKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfU1RSSUNUX0VYUE9SVCsrfCQoR0lUV0VCX1NUUklDVF9FWFBPUlQpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9CQVNFX1VSTCsrfCQoR0lUV0VCX0JBU0VfVVJMKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfTElTVCsrfCQoR0lUV0VCX0xJU1QpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9IT01FVEVYVCsrfCQoR0lUV0VCX0hPTUVURVhUKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfQ1NTKyt8JChHSVRXRUJfQ1NTKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfTE9HTysrfCQoR0lUV0VCX0xPR08pfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9GQVZJQ09OKyt8JChHSVRXRUJfRkFWSUNPTil8ZycgXAorCS1lICdzfCsrR0lUV0VCX0pTKyt8JChHSVRXRUJfSlMpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkcrK3wkKEdJVFdFQl9TSVRFX0hUTUxfSEVBRF9TVFJJTkcpfGcnIFwKKwktZSAnc3wrK0dJVFdFQl9TSVRFX0hFQURFUisrfCQoR0lUV0VCX1NJVEVfSEVBREVSKXxnJyBcCisJLWUgJ3N8KytHSVRXRUJfU0lURV9GT09URVIrK3wkKEdJVFdFQl9TSVRFX0ZPT1RFUil8ZycgXAorCS1lICdzfCsrSElHSExJR0hUX0JJTisrfCQoSElHSExJR0hUX0JJTil8ZycKKworR0lUV0VCLUJVSUxELU9QVElPTlM6IEZPUkNFCisJQHJtIC1mICRAKworCUBlY2hvICJ4IiAnJChQRVJMX1BBVEhfU1EpJyAkKEdJVFdFQl9SRVBMQUNFKSAiJChKU01JTil8JChDU1NNSU4pIiA+JEArCisJQGNtcCAtcyAkQCsgJEAgJiYgcm0gLWYgJEArIHx8IG12IC1mICRAKyAkQAorCitnaXR3ZWIuY2dpOiBnaXR3ZWIucGVybCBHSVRXRUItQlVJTEQtT1BUSU9OUworCSQoUVVJRVRfR0VOKSQoUk0pICRAICRAKyAmJiBcCisJc2VkIC1lICcxc3wjIS4qcGVybHwjISQoUEVSTF9QQVRIX1NRKXwnIFwKKwkJJChHSVRXRUJfUkVQTEFDRSkgJDwgPiRAKyAmJiBcCisJY2htb2QgK3ggJEArICYmIFwKKwltdiAkQCsgJEAKKworc3RhdGljL2dpdHdlYi5qczogJChHSVRXRUJfSlNMSUJfRklMRVMpCisJJChRVUlFVF9HRU4pJChSTSkgJEAgJEArICYmIFwKKwljYXQgJF4gPiRAKyAmJiBcCisJbXYgJEArICRACisKKyMjIyBUZXN0aW5nIHJ1bGVzCisKK3Rlc3Q6CisJJChNQUtFKSAtQyAuLi90IGdpdHdlYi10ZXN0CisKK3Rlc3QtaW5zdGFsbGVkOgorCUdJVFdFQl9URVNUX0lOU1RBTExFRD0nJChERVNURElSX1NRKSQoZ2l0d2ViZGlyX1NRKScgXAorCQkkKE1BS0UpIC1DIC4uL3QgZ2l0d2ViLXRlc3QKKworIyMjIEluc3RhbGxhdGlvbiBydWxlcworCitpbnN0YWxsOiBhbGwKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQoZ2l0d2ViZGlyX1NRKScKKwkkKElOU1RBTEwpIC1tIDc1NSAkKEdJVFdFQl9QUk9HUkFNUykgJyQoREVTVERJUl9TUSkkKGdpdHdlYmRpcl9TUSknCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJyQoREVTVERJUl9TUSkkKGdpdHdlYnN0YXRpY2Rpcl9TUSknCisJJChJTlNUQUxMKSAtbSA2NDQgJChHSVRXRUJfRklMRVMpICckKERFU1RESVJfU1EpJChnaXR3ZWJzdGF0aWNkaXJfU1EpJworCisjIyMgQ2xlYW5pbmcgcnVsZXMKKworY2xlYW46CisJJChSTSkgZ2l0d2ViLmNnaSBzdGF0aWMvZ2l0d2ViLmpzIFwKKwkJc3RhdGljL2dpdHdlYi5taW4uanMgc3RhdGljL2dpdHdlYi5taW4uY3NzIFwKKwkJR0lUV0VCLUJVSUxELU9QVElPTlMKKworLlBIT05ZOiBhbGwgY2xlYW4gaW5zdGFsbCB0ZXN0IHRlc3QtaW5zdGFsbGVkIC5GT1JDRS1HSVQtVkVSU0lPTi1GSUxFIEZPUkNFCisKZGlmZiAtLWdpdCBhL2dpdHdlYi9SRUFETUUgYi9naXR3ZWIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MWRjZmIKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvUkVBRE1FCkBAIC0wLDAgKzEsNzAgQEAKK0dJVCB3ZWIgSW50ZXJmYWNlCis9PT09PT09PT09PT09PT09PQorCitGcm9tIHRoZSBnaXQgdmVyc2lvbiAxLjQuMCBnaXR3ZWIgaXMgYnVuZGxlZCB3aXRoIGdpdC4KKworCitCdWlsZCB0aW1lIGdpdHdlYiBjb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGVyZSBhcmUgbWFueSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB3aGljaCBhZmZlY3QgYnVpbGRpbmcgZ2l0d2ViIChhbW9uZworb3RoZXJzIGNyZWF0aW5nIGdpdHdlYi5jZ2kgb3V0IG9mIGdpdHdlYi5wZXJsIGJ5IHJlcGxhY2luZyBwbGFjZWhvbGRlcnMgc3VjaAorYXMgYCsrR0lUX0JJTkRJUisrYCBieSB0aGVpciBidWlsZC10aW1lIHZhbHVlcykuCisKK0J1aWxkaW5nIGFuZCBpbnN0YWxsaW5nIGdpdHdlYiBpcyBkZXNjcmliZWQgaW4gZ2l0d2ViJ3MgSU5TVEFMTCBmaWxlCisoaW4gJ2dpdHdlYi9JTlNUQUxMJykuCisKKworUnVudGltZSBnaXR3ZWIgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2l0d2ViIG9idGFpbnMgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gdGhlIGZvbGxvd2luZyBzb3VyY2VzIGluIHRoZQorZm9sbG93aW5nIG9yZGVyOgorCisxLiBidWlsdC1pbiB2YWx1ZXMgKHNvbWUgc2V0IGR1cmluZyBidWlsZCBzdGFnZSksCisyLiBjb21tb24gc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlIChgR0lUV0VCX0NPTkZJR19DT01NT05gLAorICAgZGVmYXVsdHMgdG8gJy9ldGMvZ2l0d2ViLWNvbW1vbi5jb25mJyksCiszLiBlaXRoZXIgcGVyLWluc3RhbmNlIGNvbmZpZ3VyYXRpb24gZmlsZSAoYEdJVFdFQl9DT05GSUdgLCBkZWZhdWx0cyB0bworICAgJ2dpdHdlYl9jb25maWcucGVybCcgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBpbnN0YWxsZWQgZ2l0d2ViKSwKKyAgIG9yIGlmIGl0IGRvZXMgbm90IGV4aXN0cyB0aGVuIHN5c3RlbS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgKGBHSVRXRUJfQ09ORklHX1NZU1RFTWAsIGRlZmF1bHRzIHRvICcvZXRjL2dpdHdlYi5jb25mJykuCisKK1ZhbHVlcyBvYnRhaW5lZCBpbiBsYXRlciBjb25maWd1cmF0aW9uIGZpbGVzIG92ZXJyaWRlIHZhbHVlcyBvYnRhaW5lZCBlYXJsaWVyCitpbiBhYm92ZSBzZXF1ZW5jZS4KKworWW91IGNhbiByZWFkIGRlZmF1bHRzIGluIHN5c3RlbS13aWRlIEdJVFdFQl9DT05GSUdfU1lTVEVNIGZyb20gR0lUV0VCX0NPTkZJRworYnkgYWRkaW5nCisKKyAgcmVhZF9jb25maWdfZmlsZSgkR0lUV0VCX0NPTkZJR19TWVNURU0pOworCithdCB2ZXJ5IGJlZ2lubmluZyBvZiBwZXItaW5zdGFuY2UgR0lUV0VCX0NPTkZJRyBmaWxlLiAgSW4gdGhpcyBjYXNlCitzZXR0aW5ncyBpbiBzYWlkIHBlci1pbnN0YW5jZSBmaWxlIHdpbGwgb3ZlcnJpZGUgc2V0dGluZ3MgZnJvbQorc3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLiAgTm90ZSB0aGF0IHJlYWRfY29uZmlnX2ZpbGUgY2hlY2tzCitpdHNlbGYgdGhhdCB0aGUgJEdJVFdFQl9DT05GSUdfU1lTVEVNIGZpbGUgZXhpc3RzLgorCitUaGUgbW9zdCBub3RhYmxlIHRoaW5nIHRoYXQgaXMgbm90IGNvbmZpZ3VyYWJsZSBhdCBjb21waWxlIHRpbWUgYXJlIHRoZQorb3B0aW9uYWwgZmVhdHVyZXMsIHN0b3JlZCBpbiB0aGUgJyVmZWF0dXJlcycgdmFyaWFibGUuCisKK1VsdGltYXRlIGRlc2NyaXB0aW9uIG9uIGhvdyB0byByZWNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBmZWF0dXJlcyBzZXR0aW5nCitpbiB5b3VyIGBHSVRXRUJfQ09ORklHYCBvciBwZXItcHJvamVjdCBpbiBgcHJvamVjdC5naXQvY29uZmlnYCBjYW4gYmUgZm91bmQKK2FzIGNvbW1lbnRzIGluc2lkZSAnZ2l0d2ViLmNnaScuCisKK1NlZSBhbHNvIGdpdHdlYi5jb25mKDUpIG1hbnBhZ2UuCisKKworV2ViIHNlcnZlciBjb25maWd1cmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dpdHdlYiBjYW4gYmUgcnVuIGFzIENHSSBzY3JpcHQsIGFzIGxlZ2FjeSBtb2RfcGVybCBhcHBsaWNhdGlvbiAodXNpbmcKK01vZFBlcmw6OlJlZ2lzdHJ5KSwgYW5kIGFzIEZhc3RDR0kgc2NyaXB0LiAgWW91IGNhbiBmaW5kIHNvbWUgc2ltcGxlIGV4YW1wbGVzCitpbiAiRXhhbXBsZSB3ZWIgc2VydmVyIGNvbmZpZ3VyYXRpb24iIHNlY3Rpb24gaW4gSU5TVEFMTCBmaWxlIGZvciBnaXR3ZWIgKGluCitnaXR3ZWIvSU5TVEFMTCkuCisKK1NlZSAiV2Vic2VydmVyIGNvbmZpZ3VyYXRpb24iIGFuZCAiQWR2YW5jZWQgd2ViIHNlcnZlciBzZXR1cCIgc2VjdGlvbnMgaW4KK2dpdHdlYigxKSBtYW5wYWdlLgorCisKK0FVVEhPUlMKKy0tLS0tLS0KK09yaWdpbmFsbHkgd3JpdHRlbiBieToKKyAgS2F5IFNpZXZlcnMgPGtheS5zaWV2ZXJzQHZyZnkub3JnPgorCitBbnkgY29tbWVudC9xdWVzdGlvbi9jb25jZXJuIHRvOgorICBHaXQgbWFpbGluZyBsaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPgpkaWZmIC0tZ2l0IGEvZ2l0d2ViL2dpdHdlYi5wZXJsIGIvZ2l0d2ViL2dpdHdlYi5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdhNWIyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvZ2l0d2ViLnBlcmwKQEAgLTAsMCArMSw4NDEyIEBACisjIS91c3IvYmluL3BlcmwKKworIyBnaXR3ZWIgLSBzaW1wbGUgd2ViIGludGVyZmFjZSB0byB0cmFjayBjaGFuZ2VzIGluIGdpdCByZXBvc2l0b3JpZXMKKyMKKyMgKEMpIDIwMDUtMjAwNiwgS2F5IFNpZXZlcnMgPGtheS5zaWV2ZXJzQHZyZnkub3JnPgorIyAoQykgMjAwNSwgQ2hyaXN0aWFuIEdpZXJrZQorIworIyBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTHYyCisKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgQ0dJIHF3KDpzdGFuZGFyZCA6ZXNjYXBlSFRNTCAtbm9zdGlja3kpOwordXNlIENHSTo6VXRpbCBxdyh1bmVzY2FwZSk7Cit1c2UgQ0dJOjpDYXJwIHF3KGZhdGFsc1RvQnJvd3NlciBzZXRfbWVzc2FnZSk7Cit1c2UgRW5jb2RlOwordXNlIEZjbnRsICc6bW9kZSc7Cit1c2UgRmlsZTo6RmluZCBxdygpOwordXNlIEZpbGU6OkJhc2VuYW1lIHF3KGJhc2VuYW1lKTsKK3VzZSBUaW1lOjpIaVJlcyBxdyhnZXR0aW1lb2ZkYXkgdHZfaW50ZXJ2YWwpOworYmlubW9kZSBTVERPVVQsICc6dXRmOCc7CisKK2lmICghZGVmaW5lZCgkQ0dJOjpWRVJTSU9OKSB8fCAkQ0dJOjpWRVJTSU9OIDwgNC4wOCkgeworCWV2YWwgJ3N1YiBDR0k6Om11bHRpX3BhcmFtIHsgQ0dJOjpwYXJhbShAXykgfScKK30KKworb3VyICR0MCA9IFsgZ2V0dGltZW9mZGF5KCkgXTsKK291ciAkbnVtYmVyX29mX2dpdF9jbWRzID0gMDsKKworQkVHSU4geworCUNHSS0+Y29tcGlsZSgpIGlmICRFTlZ7J01PRF9QRVJMJ307Cit9CisKK291ciAkdmVyc2lvbiA9ICIrK0dJVF9WRVJTSU9OKysiOworCitvdXIgKCRteV91cmwsICRteV91cmksICRiYXNlX3VybCwgJHBhdGhfaW5mbywgJGhvbWVfbGluayk7CitzdWIgZXZhbHVhdGVfdXJpIHsKKwlvdXIgJGNnaTsKKworCW91ciAkbXlfdXJsID0gJGNnaS0+dXJsKCk7CisJb3VyICRteV91cmkgPSAkY2dpLT51cmwoLWFic29sdXRlID0+IDEpOworCisJIyBCYXNlIFVSTCBmb3IgcmVsYXRpdmUgVVJMcyBpbiBnaXR3ZWIgKCRsb2dvLCAkZmF2aWNvbiwgLi4uKSwKKwkjIG5lZWRlZCBhbmQgdXNlZCBvbmx5IGZvciBVUkxzIHdpdGggbm9uZW1wdHkgUEFUSF9JTkZPCisJb3VyICRiYXNlX3VybCA9ICRteV91cmw7CisKKwkjIFdoZW4gdGhlIHNjcmlwdCBpcyB1c2VkIGFzIERpcmVjdG9yeUluZGV4LCB0aGUgVVJMIGRvZXMgbm90IGNvbnRhaW4gdGhlIG5hbWUKKwkjIG9mIHRoZSBzY3JpcHQgZmlsZSBpdHNlbGYsIGFuZCAkY2dpLT51cmwoKSBmYWlscyB0byBzdHJpcCBQQVRIX0lORk8sIHNvIHdlCisJIyBoYXZlIHRvIGRvIGl0IG91cnNlbHZlcy4gV2UgbWFrZSAkcGF0aF9pbmZvIGdsb2JhbCBiZWNhdXNlIGl0J3MgYWxzbyB1c2VkCisJIyBsYXRlciBvbi4KKwkjCisJIyBBbm90aGVyIGlzc3VlIHdpdGggdGhlIHNjcmlwdCBiZWluZyB0aGUgRGlyZWN0b3J5SW5kZXggaXMgdGhhdCB0aGUgcmVzdWx0aW5nCisJIyAkbXlfdXJsIGRhdGEgaXMgbm90IHRoZSBmdWxsIHNjcmlwdCBVUkw6IHRoaXMgaXMgZ29vZCwgYmVjYXVzZSB3ZSB3YW50CisJIyBnZW5lcmF0ZWQgbGlua3MgdG8ga2VlcCBpbXBseWluZyB0aGUgc2NyaXB0IG5hbWUgaWYgaXQgd2Fzbid0IGV4cGxpY2l0bHkKKwkjIGluZGljYXRlZCBpbiB0aGUgVVJMIHdlJ3JlIGhhbmRsaW5nLCBidXQgaXQgbWVhbnMgdGhhdCAkbXlfdXJsIGNhbm5vdCBiZSB1c2VkCisJIyBhcyBiYXNlIFVSTC4KKwkjIFRoZXJlZm9yZSwgaWYgd2UgbmVlZGVkIHRvIHN0cmlwIFBBVEhfSU5GTywgdGhlbiB3ZSBrbm93IHRoYXQgd2UgaGF2ZQorCSMgdG8gYnVpbGQgdGhlIGJhc2UgVVJMIG91cnNlbHZlczoKKwlvdXIgJHBhdGhfaW5mbyA9IGRlY29kZV91dGY4KCRFTlZ7IlBBVEhfSU5GTyJ9KTsKKwlpZiAoJHBhdGhfaW5mbykgeworCQkjICRwYXRoX2luZm8gaGFzIGFscmVhZHkgYmVlbiBVUkwtZGVjb2RlZCBieSB0aGUgd2ViIHNlcnZlciwgYnV0CisJCSMgJG15X3VybCBhbmQgJG15X3VyaSBoYXZlIG5vdC4gVVJMLWRlY29kZSB0aGVtIHNvIHdlIGNhbiBwcm9wZXJseQorCQkjIHN0cmlwICRwYXRoX2luZm8uCisJCSRteV91cmwgPSB1bmVzY2FwZSgkbXlfdXJsKTsKKwkJJG15X3VyaSA9IHVuZXNjYXBlKCRteV91cmkpOworCQlpZiAoJG15X3VybCA9fiBzLFxRJHBhdGhfaW5mb1xFJCwsICYmCisJCSAgICAkbXlfdXJpID1+IHMsXFEkcGF0aF9pbmZvXEUkLCwgJiYKKwkJICAgIGRlZmluZWQgJEVOVnsnU0NSSVBUX05BTUUnfSkgeworCQkJJGJhc2VfdXJsID0gJGNnaS0+dXJsKC1iYXNlID0+IDEpIC4gJEVOVnsnU0NSSVBUX05BTUUnfTsKKwkJfQorCX0KKworCSMgdGFyZ2V0IG9mIHRoZSBob21lIGxpbmsgb24gdG9wIG9mIGFsbCBwYWdlcworCW91ciAkaG9tZV9saW5rID0gJG15X3VyaSB8fCAiLyI7Cit9CisKKyMgY29yZSBnaXQgZXhlY3V0YWJsZSB0byB1c2UKKyMgdGhpcyBjYW4ganVzdCBiZSAiZ2l0IiBpZiB5b3VyIHdlYnNlcnZlciBoYXMgYSBzZW5zaWJsZSBQQVRICitvdXIgJEdJVCA9ICIrK0dJVF9CSU5ESVIrKy9naXQiOworCisjIGFic29sdXRlIGZzLXBhdGggd2hpY2ggd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIHByb2plY3QgcGF0aAorI291ciAkcHJvamVjdHJvb3QgPSAiL3B1Yi9zY20iOworb3VyICRwcm9qZWN0cm9vdCA9ICIrK0dJVFdFQl9QUk9KRUNUUk9PVCsrIjsKKworIyBmcyB0cmF2ZXJzaW5nIGxpbWl0IGZvciBnZXR0aW5nIHByb2plY3QgbGlzdAorIyB0aGUgbnVtYmVyIGlzIHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0cm9vdAorb3VyICRwcm9qZWN0X21heGRlcHRoID0gIisrR0lUV0VCX1BST0pFQ1RfTUFYREVQVEgrKyI7CisKKyMgc3RyaW5nIG9mIHRoZSBob21lIGxpbmsgb24gdG9wIG9mIGFsbCBwYWdlcworb3VyICRob21lX2xpbmtfc3RyID0gIisrR0lUV0VCX0hPTUVfTElOS19TVFIrKyI7CisKKyMgZXh0cmEgYnJlYWRjcnVtYnMgcHJlY2VkaW5nIHRoZSBob21lIGxpbmsKK291ciBAZXh0cmFfYnJlYWRjcnVtYnMgPSAoKTsKKworIyBuYW1lIG9mIHlvdXIgc2l0ZSBvciBvcmdhbml6YXRpb24gdG8gYXBwZWFyIGluIHBhZ2UgdGl0bGVzCisjIHJlcGxhY2UgdGhpcyB3aXRoIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlIGZvciBjbGVhcmVyIGJvb2ttYXJrcworb3VyICRzaXRlX25hbWUgPSAiKytHSVRXRUJfU0lURU5BTUUrKyIKKyAgICAgICAgICAgICAgICAgfHwgKCRFTlZ7J1NFUlZFUl9OQU1FJ30gfHwgIlVudGl0bGVkIikgLiAiIEdpdCI7CisKKyMgaHRtbCBzbmlwcGV0IHRvIGluY2x1ZGUgaW4gdGhlIDxoZWFkPiBzZWN0aW9uIG9mIGVhY2ggcGFnZQorb3VyICRzaXRlX2h0bWxfaGVhZF9zdHJpbmcgPSAiKytHSVRXRUJfU0lURV9IVE1MX0hFQURfU1RSSU5HKysiOworIyBmaWxlbmFtZSBvZiBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCB0b3Agb2YgZWFjaCBwYWdlCitvdXIgJHNpdGVfaGVhZGVyID0gIisrR0lUV0VCX1NJVEVfSEVBREVSKysiOworIyBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCBob21lIHBhZ2UKK291ciAkaG9tZV90ZXh0ID0gIisrR0lUV0VCX0hPTUVURVhUKysiOworIyBmaWxlbmFtZSBvZiBodG1sIHRleHQgdG8gaW5jbHVkZSBhdCBib3R0b20gb2YgZWFjaCBwYWdlCitvdXIgJHNpdGVfZm9vdGVyID0gIisrR0lUV0VCX1NJVEVfRk9PVEVSKysiOworCisjIFVSSSBvZiBzdHlsZXNoZWV0cworb3VyIEBzdHlsZXNoZWV0cyA9ICgiKytHSVRXRUJfQ1NTKysiKTsKKyMgVVJJIG9mIGEgc2luZ2xlIHN0eWxlc2hlZXQsIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuIGluIEdJVFdFQl9DT05GSUcuCitvdXIgJHN0eWxlc2hlZXQgPSB1bmRlZjsKKyMgVVJJIG9mIEdJVCBsb2dvICg3MngyNyBzaXplKQorb3VyICRsb2dvID0gIisrR0lUV0VCX0xPR08rKyI7CisjIFVSSSBvZiBHSVQgZmF2aWNvbiwgYXNzdW1lZCB0byBiZSBpbWFnZS9wbmcgdHlwZQorb3VyICRmYXZpY29uID0gIisrR0lUV0VCX0ZBVklDT04rKyI7CisjIFVSSSBvZiBnaXR3ZWIuanMgKEphdmFTY3JpcHQgY29kZSBmb3IgZ2l0d2ViKQorb3VyICRqYXZhc2NyaXB0ID0gIisrR0lUV0VCX0pTKysiOworCisjIFVSSSBhbmQgbGFiZWwgKHRpdGxlKSBvZiBHSVQgbG9nbyBsaW5rCisjb3VyICRsb2dvX3VybCA9ICJodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL3NjbS9naXQvZG9jcy8iOworI291ciAkbG9nb19sYWJlbCA9ICJnaXQgZG9jdW1lbnRhdGlvbiI7CitvdXIgJGxvZ29fdXJsID0gImh0dHA6Ly9naXQtc2NtLmNvbS8iOworb3VyICRsb2dvX2xhYmVsID0gImdpdCBob21lcGFnZSI7CisKKyMgc291cmNlIG9mIHByb2plY3RzIGxpc3QKK291ciAkcHJvamVjdHNfbGlzdCA9ICIrK0dJVFdFQl9MSVNUKysiOworCisjIHRoZSB3aWR0aCAoaW4gY2hhcmFjdGVycykgb2YgdGhlIHByb2plY3RzIGxpc3QgIkRlc2NyaXB0aW9uIiBjb2x1bW4KK291ciAkcHJvamVjdHNfbGlzdF9kZXNjcmlwdGlvbl93aWR0aCA9IDI1OworCisjIGdyb3VwIHByb2plY3RzIGJ5IGNhdGVnb3J5IG9uIHRoZSBwcm9qZWN0cyBsaXN0CisjIChlbmFibGVkIGlmIHRoaXMgdmFyaWFibGUgZXZhbHVhdGVzIHRvIHRydWUpCitvdXIgJHByb2plY3RzX2xpc3RfZ3JvdXBfY2F0ZWdvcmllcyA9IDA7CisKKyMgZGVmYXVsdCBjYXRlZ29yeSBpZiBub25lIHNwZWNpZmllZAorIyAobGVhdmUgdGhlIGVtcHR5IHN0cmluZyBmb3Igbm8gY2F0ZWdvcnkpCitvdXIgJHByb2plY3RfbGlzdF9kZWZhdWx0X2NhdGVnb3J5ID0gIiI7CisKKyMgZGVmYXVsdCBvcmRlciBvZiBwcm9qZWN0cyBsaXN0CisjIHZhbGlkIHZhbHVlcyBhcmUgbm9uZSwgcHJvamVjdCwgZGVzY3IsIG93bmVyLCBhbmQgYWdlCitvdXIgJGRlZmF1bHRfcHJvamVjdHNfb3JkZXIgPSAicHJvamVjdCI7CisKKyMgc2hvdyByZXBvc2l0b3J5IG9ubHkgaWYgdGhpcyBmaWxlIGV4aXN0cworIyAob25seSBlZmZlY3RpdmUgaWYgdGhpcyB2YXJpYWJsZSBldmFsdWF0ZXMgdG8gdHJ1ZSkKK291ciAkZXhwb3J0X29rID0gIisrR0lUV0VCX0VYUE9SVF9PSysrIjsKKworIyBkb24ndCBnZW5lcmF0ZSBhZ2UgY29sdW1uIG9uIHRoZSBwcm9qZWN0cyBsaXN0IHBhZ2UKK291ciAkb21pdF9hZ2VfY29sdW1uID0gMDsKKworIyBkb24ndCBnZW5lcmF0ZSBpbmZvcm1hdGlvbiBhYm91dCBvd25lcnMgb2YgcmVwb3NpdG9yaWVzCitvdXIgJG9taXRfb3duZXI9MDsKKworIyBzaG93IHJlcG9zaXRvcnkgb25seSBpZiB0aGlzIHN1YnJvdXRpbmUgcmV0dXJucyB0cnVlCisjIHdoZW4gZ2l2ZW4gdGhlIHBhdGggdG8gdGhlIHByb2plY3QsIGZvciBleGFtcGxlOgorIyAgICBzdWIgeyByZXR1cm4gLWUgIiRfWzBdL2dpdC1kYWVtb24tZXhwb3J0LW9rIjsgfQorb3VyICRleHBvcnRfYXV0aF9ob29rID0gdW5kZWY7CisKKyMgb25seSBhbGxvdyB2aWV3aW5nIG9mIHJlcG9zaXRvcmllcyBhbHNvIHNob3duIG9uIHRoZSBvdmVydmlldyBwYWdlCitvdXIgJHN0cmljdF9leHBvcnQgPSAiKytHSVRXRUJfU1RSSUNUX0VYUE9SVCsrIjsKKworIyBsaXN0IG9mIGdpdCBiYXNlIFVSTHMgdXNlZCBmb3IgVVJMIHRvIHdoZXJlIGZldGNoIHByb2plY3QgZnJvbSwKKyMgaS5lLiBmdWxsIFVSTCBpcyAiJGdpdF9iYXNlX3VybC8kcHJvamVjdCIKK291ciBAZ2l0X2Jhc2VfdXJsX2xpc3QgPSBncmVwIHsgJF8gbmUgJycgfSAoIisrR0lUV0VCX0JBU0VfVVJMKysiKTsKKworIyBkZWZhdWx0IGJsb2JfcGxhaW4gbWltZXR5cGUgYW5kIGRlZmF1bHQgY2hhcnNldCBmb3IgdGV4dC9wbGFpbiBibG9iCitvdXIgJGRlZmF1bHRfYmxvYl9wbGFpbl9taW1ldHlwZSA9ICd0ZXh0L3BsYWluJzsKK291ciAkZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQgID0gdW5kZWY7CisKKyMgZmlsZSB0byB1c2UgZm9yIGd1ZXNzaW5nIE1JTUUgdHlwZXMgYmVmb3JlIHRyeWluZyAvZXRjL21pbWUudHlwZXMKKyMgKHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGdpdCByZXBvc2l0b3J5KQorb3VyICRtaW1ldHlwZXNfZmlsZSA9IHVuZGVmOworCisjIGFzc3VtZSB0aGlzIGNoYXJzZXQgaWYgbGluZSBjb250YWlucyBub24tVVRGLTggY2hhcmFjdGVyczsKKyMgaXQgc2hvdWxkIGJlIHZhbGlkIGVuY29kaW5nIChzZWUgRW5jb2Rpbmc6OlN1cHBvcnRlZCgzcG0pIGZvciBsaXN0KSwKKyMgZm9yIHdoaWNoIGVuY29kaW5nIGFsbCBieXRlIHNlcXVlbmNlcyBhcmUgdmFsaWQsIGZvciBleGFtcGxlCisjICdpc28tODg1OS0xJyBha2EgJ2xhdGluMScgKGl0IGlzIGRlY29kZWQgd2l0aG91dCBjaGVja2luZywgc28gaXQKKyMgY291bGQgYmUgZXZlbiAndXRmLTgnIGZvciB0aGUgb2xkIGJlaGF2aW9yKQorb3VyICRmYWxsYmFja19lbmNvZGluZyA9ICdsYXRpbjEnOworCisjIHJlbmFtZSBkZXRlY3Rpb24gb3B0aW9ucyBmb3IgZ2l0LWRpZmYgYW5kIGdpdC1kaWZmLXRyZWUKKyMgLSBkZWZhdWx0IGlzICctTScsIHdpdGggdGhlIGNvc3QgcHJvcG9ydGlvbmFsIHRvCisjICAgKG51bWJlciBvZiByZW1vdmVkIGZpbGVzKSAqIChudW1iZXIgb2YgbmV3IGZpbGVzKS4KKyMgLSBtb3JlIGNvc3RseSBpcyAnLUMnICh3aGljaCBpbXBsaWVzICctTScpLCB3aXRoIHRoZSBjb3N0IHByb3BvcnRpb25hbCB0bworIyAgIChudW1iZXIgb2YgY2hhbmdlZCBmaWxlcyArIG51bWJlciBvZiByZW1vdmVkIGZpbGVzKSAqIChudW1iZXIgb2YgbmV3IGZpbGVzKQorIyAtIGV2ZW4gbW9yZSBjb3N0bHkgaXMgJy1DJywgJy0tZmluZC1jb3BpZXMtaGFyZGVyJyB3aXRoIGNvc3QKKyMgICAobnVtYmVyIG9mIGZpbGVzIGluIHRoZSBvcmlnaW5hbCB0cmVlKSAqIChudW1iZXIgb2YgbmV3IGZpbGVzKQorIyAtIG9uZSBtaWdodCB3YW50IHRvIGluY2x1ZGUgJy1CJyBvcHRpb24sIGUuZy4gJy1CJywgJy1NJworb3VyIEBkaWZmX29wdHMgPSAoJy1NJyk7ICMgdGFrZW4gZnJvbSBnaXRfY29tbWl0CisKKyMgRGlzYWJsZXMgZmVhdHVyZXMgdGhhdCB3b3VsZCBhbGxvdyByZXBvc2l0b3J5IG93bmVycyB0byBpbmplY3Qgc2NyaXB0IGludG8KKyMgdGhlIGdpdHdlYiBkb21haW4uCitvdXIgJHByZXZlbnRfeHNzID0gMDsKKworIyBQYXRoIHRvIHRoZSBoaWdobGlnaHQgZXhlY3V0YWJsZSB0byB1c2UgKG11c3QgYmUgdGhlIG9uZSBmcm9tCisjIGh0dHA6Ly93d3cuYW5kcmUtc2ltb24uZGUgZHVlIHRvIGFzc3VtcHRpb25zIGFib3V0IHBhcmFtZXRlcnMgYW5kIG91dHB1dCkuCisjIFVzZWZ1bCBpZiBoaWdobGlnaHQgaXMgbm90IGluc3RhbGxlZCBvbiB5b3VyIHdlYnNlcnZlcidzIFBBVEguCisjIFtEZWZhdWx0OiBoaWdobGlnaHRdCitvdXIgJGhpZ2hsaWdodF9iaW4gPSAiKytISUdITElHSFRfQklOKysiOworCisjIGluZm9ybWF0aW9uIGFib3V0IHNuYXBzaG90IGZvcm1hdHMgdGhhdCBnaXR3ZWIgaXMgY2FwYWJsZSBvZiBzZXJ2aW5nCitvdXIgJWtub3duX3NuYXBzaG90X2Zvcm1hdHMgPSAoCisJIyBuYW1lID0+IHsKKwkjIAknZGlzcGxheScgPT4gZGlzcGxheSBuYW1lLAorCSMgCSd0eXBlJyA9PiBtaW1lIHR5cGUsCisJIyAJJ3N1ZmZpeCcgPT4gZmlsZW5hbWUgc3VmZml4LAorCSMgCSdmb3JtYXQnID0+IC0tZm9ybWF0IGZvciBnaXQtYXJjaGl2ZSwKKwkjIAknY29tcHJlc3NvcicgPT4gW2NvbXByZXNzb3IgY29tbWFuZCBhbmQgYXJndW1lbnRzXQorCSMgCSAgICAgICAgICAgICAgICAoYXJyYXkgcmVmZXJlbmNlLCBvcHRpb25hbCkKKwkjIAknZGlzYWJsZWQnID0+IGJvb2xlYW4gKG9wdGlvbmFsKX0KKwkjCisJJ3RneicgPT4geworCQknZGlzcGxheScgPT4gJ3Rhci5neicsCisJCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC1nemlwJywKKwkJJ3N1ZmZpeCcgPT4gJy50YXIuZ3onLAorCQknZm9ybWF0JyA9PiAndGFyJywKKwkJJ2NvbXByZXNzb3InID0+IFsnZ3ppcCcsICctbiddfSwKKworCSd0YnoyJyA9PiB7CisJCSdkaXNwbGF5JyA9PiAndGFyLmJ6MicsCisJCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC1iemlwMicsCisJCSdzdWZmaXgnID0+ICcudGFyLmJ6MicsCisJCSdmb3JtYXQnID0+ICd0YXInLAorCQknY29tcHJlc3NvcicgPT4gWydiemlwMiddfSwKKworCSd0eHonID0+IHsKKwkJJ2Rpc3BsYXknID0+ICd0YXIueHonLAorCQkndHlwZScgPT4gJ2FwcGxpY2F0aW9uL3gteHonLAorCQknc3VmZml4JyA9PiAnLnRhci54eicsCisJCSdmb3JtYXQnID0+ICd0YXInLAorCQknY29tcHJlc3NvcicgPT4gWyd4eiddLAorCQknZGlzYWJsZWQnID0+IDF9LAorCisJJ3ppcCcgPT4geworCQknZGlzcGxheScgPT4gJ3ppcCcsCisJCSd0eXBlJyA9PiAnYXBwbGljYXRpb24veC16aXAnLAorCQknc3VmZml4JyA9PiAnLnppcCcsCisJCSdmb3JtYXQnID0+ICd6aXAnfSwKKyk7CisKKyMgQWxpYXNlcyBzbyB3ZSB1bmRlcnN0YW5kIG9sZCBnaXR3ZWIuc25hcHNob3QgdmFsdWVzIGluIHJlcG9zaXRvcnkKKyMgY29uZmlndXJhdGlvbi4KK291ciAla25vd25fc25hcHNob3RfZm9ybWF0X2FsaWFzZXMgPSAoCisJJ2d6aXAnICA9PiAndGd6JywKKwknYnppcDInID0+ICd0YnoyJywKKwkneHonICAgID0+ICd0eHonLAorCisJIyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBsZWdhY3kgZ2l0d2ViIGNvbmZpZyBzdXBwb3J0CisJJ3gtZ3ppcCcgPT4gdW5kZWYsICdneicgPT4gdW5kZWYsCisJJ3gtYnppcDInID0+IHVuZGVmLCAnYnoyJyA9PiB1bmRlZiwKKwkneC16aXAnID0+IHVuZGVmLCAnJyA9PiB1bmRlZiwKKyk7CisKKyMgUGl4ZWwgc2l6ZXMgZm9yIGljb25zIGFuZCBhdmF0YXJzLiBJZiB0aGUgZGVmYXVsdCBmb250IHNpemVzIG9yIGxpbmVoZWlnaHRzCisjIGFyZSBjaGFuZ2VkLCBpdCBtYXkgYmUgYXBwcm9wcmlhdGUgdG8gY2hhbmdlIHRoZXNlIHZhbHVlcyB0b28gdmlhCisjICRHSVRXRUJfQ09ORklHLgorb3VyICVhdmF0YXJfc2l6ZSA9ICgKKwknZGVmYXVsdCcgPT4gMTYsCisJJ2RvdWJsZScgID0+IDMyCispOworCisjIFVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGxvYWQgdGhhdCB3ZSB3aWxsIHN0aWxsIHJlc3BvbmQgdG8gZ2l0d2ViIHF1ZXJpZXMuCisjIElmIHNlcnZlciBsb2FkIGV4Y2VlZCB0aGlzIHZhbHVlIHRoZW4gcmV0dXJuICI1MDMgc2VydmVyIGJ1c3kiIGVycm9yLgorIyBJZiBnaXR3ZWIgY2Fubm90IGRldGVybWluZWQgc2VydmVyIGxvYWQsIGl0IGlzIHRha2VuIHRvIGJlIDAuCisjIExlYXZlIGl0IHVuZGVmaW5lZCAob3Igc2V0IHRvICd1bmRlZicpIHRvIHR1cm4gb2ZmIGxvYWQgY2hlY2tpbmcuCitvdXIgJG1heGxvYWQgPSAzMDA7CisKKyMgY29uZmlndXJhdGlvbiBmb3IgJ2hpZ2hsaWdodCcgKGh0dHA6Ly93d3cuYW5kcmUtc2ltb24uZGUvKQorIyBtYXRjaCBieSBiYXNlbmFtZQorb3VyICVoaWdobGlnaHRfYmFzZW5hbWUgPSAoCisJIydQcm9ncmFtJyA9PiAncHknLAorCSMnTGlicmFyeScgPT4gJ3B5JywKKwknU0NvbnN0cnVjdCcgPT4gJ3B5JywgIyBTQ29ucyBlcXVpdmFsZW50IG9mIE1ha2VmaWxlCisJJ01ha2VmaWxlJyA9PiAnbWFrZScsCispOworIyBtYXRjaCBieSBleHRlbnNpb24KK291ciAlaGlnaGxpZ2h0X2V4dCA9ICgKKwkjIG1haW4gZXh0ZW5zaW9ucywgZGVmaW5pbmcgbmFtZSBvZiBzeW50YXg7CisJIyBzZWUgZmlsZXMgaW4gL3Vzci9zaGFyZS9oaWdobGlnaHQvbGFuZ0RlZnMvIGRpcmVjdG9yeQorCShtYXAgeyAkXyA9PiAkXyB9IHF3KHB5IHJiIGphdmEgY3NzIGpzIHRleCBiaWIgeG1sIGF3ayBiYXQgaW5pIHNwZWMgdGNsIHNxbCkpLAorCSMgYWx0ZXJuYXRlIGV4dGVuc2lvbnMsIHNlZSAvZXRjL2hpZ2hsaWdodC9maWxldHlwZXMuY29uZgorCShtYXAgeyAkXyA9PiAnYycgICB9IHF3KGMgaCkpLAorCShtYXAgeyAkXyA9PiAnc2gnICB9IHF3KHNoIGJhc2ggenNoIGtzaCkpLAorCShtYXAgeyAkXyA9PiAnY3BwJyB9IHF3KGNwcCBjeHggYysrIGNjKSksCisJKG1hcCB7ICRfID0+ICdwaHAnIH0gcXcocGhwIHBocDMgcGhwNCBwaHA1IHBocHMpKSwKKwkobWFwIHsgJF8gPT4gJ3BsJyAgfSBxdyhwbCBwZXJsIHBtKSksICMgcGVyaGFwcyBhbHNvICdjZ2knCisJKG1hcCB7ICRfID0+ICdtYWtlJ30gcXcobWFrZSBtYWsgbWspKSwKKwkobWFwIHsgJF8gPT4gJ3htbCcgfSBxdyh4bWwgeGh0bWwgaHRtbCBodG0pKSwKKyk7CisKKyMgWW91IGRlZmluZSBzaXRlLXdpZGUgZmVhdHVyZSBkZWZhdWx0cyBoZXJlOyBvdmVycmlkZSB0aGVtIHdpdGgKKyMgJEdJVFdFQl9DT05GSUcgYXMgbmVjZXNzYXJ5Lgorb3VyICVmZWF0dXJlID0gKAorCSMgZmVhdHVyZSA9PiB7CisJIyAJJ3N1YicgPT4gZmVhdHVyZS1zdWIgKHN1YnJvdXRpbmUpLAorCSMgCSdvdmVycmlkZScgPT4gYWxsb3ctb3ZlcnJpZGUgKGJvb2xlYW4pLAorCSMgCSdkZWZhdWx0JyA9PiBbIGRlZmF1bHQgb3B0aW9ucy4uLl0gKGFycmF5IHJlZmVyZW5jZSl9CisJIworCSMgaWYgZmVhdHVyZSBpcyBvdmVycmlkYWJsZSAoaXQgbWVhbnMgdGhhdCBhbGxvdy1vdmVycmlkZSBoYXMgdHJ1ZSB2YWx1ZSksCisJIyB0aGVuIGZlYXR1cmUtc3ViIHdpbGwgYmUgY2FsbGVkIHdpdGggZGVmYXVsdCBvcHRpb25zIGFzIHBhcmFtZXRlcnM7CisJIyByZXR1cm4gdmFsdWUgb2YgZmVhdHVyZS1zdWIgaW5kaWNhdGVzIGlmIHRvIGVuYWJsZSBzcGVjaWZpZWQgZmVhdHVyZQorCSMKKwkjIGlmIHRoZXJlIGlzIG5vICdzdWInIGtleSAobm8gZmVhdHVyZS1zdWIpLCB0aGVuIGZlYXR1cmUgY2Fubm90IGJlCisJIyBvdmVycmlkZGVuCisJIworCSMgdXNlIGdpdHdlYl9nZXRfZmVhdHVyZSg8ZmVhdHVyZT4pIHRvIHJldHJpZXZlIHRoZSA8ZmVhdHVyZT4gdmFsdWUKKwkjIChhbiBhcnJheSkgb3IgZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoPGZlYXR1cmU+KSB0byBjaGVjayBpZiA8ZmVhdHVyZT4KKwkjIGlzIGVuYWJsZWQKKworCSMgRW5hYmxlIHRoZSAnYmxhbWUnIGJsb2Igdmlldywgc2hvd2luZyB0aGUgbGFzdCBjb21taXQgdGhhdCBtb2RpZmllZAorCSMgZWFjaCBsaW5lIGluIHRoZSBmaWxlLiBUaGlzIGNhbiBiZSB2ZXJ5IENQVS1pbnRlbnNpdmUuCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnYmxhbWUnfXsnZGVmYXVsdCd9ID0gWzFdOworCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydibGFtZSd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIuYmxhbWUgPSAwfDE7CisJJ2JsYW1lJyA9PiB7CisJCSdzdWInID0+IHN1YiB7IGZlYXR1cmVfYm9vbCgnYmxhbWUnLCBAXykgfSwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKKworCSMgRW5hYmxlIHRoZSAnc25hcHNob3QnIGxpbmssIHByb3ZpZGluZyBhIGNvbXByZXNzZWQgYXJjaGl2ZSBvZiBhbnkKKwkjIHRyZWUuIFRoaXMgY2FuIHBvdGVudGlhbGx5IGdlbmVyYXRlIGhpZ2ggdHJhZmZpYyBpZiB5b3UgaGF2ZSBsYXJnZQorCSMgcHJvamVjdC4KKworCSMgVmFsdWUgaXMgYSBsaXN0IG9mIGZvcm1hdHMgZGVmaW5lZCBpbiAla25vd25fc25hcHNob3RfZm9ybWF0cyB0aGF0CisJIyB5b3Ugd2lzaCB0byBvZmZlci4KKwkjIFRvIGRpc2FibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3NuYXBzaG90J317J2RlZmF1bHQnfSA9IFtdOworCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydzbmFwc2hvdCd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZywgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBmb3JtYXRzIG9yICJub25lIgorCSMgdG8gZGlzYWJsZS4gIEV4YW1wbGU6IGdpdHdlYi5zbmFwc2hvdCA9IHRiejIsemlwOworCSdzbmFwc2hvdCcgPT4geworCQknc3ViJyA9PiBcJmZlYXR1cmVfc25hcHNob3QsCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsndGd6J119LAorCisJIyBFbmFibGUgdGV4dCBzZWFyY2gsIHdoaWNoIHdpbGwgbGlzdCB0aGUgY29tbWl0cyB3aGljaCBtYXRjaCBhdXRob3IsCisJIyBjb21taXR0ZXIgb3IgY29tbWl0IHRleHQgdG8gYSBnaXZlbiBzdHJpbmcuICBFbmFibGVkIGJ5IGRlZmF1bHQuCisJIyBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisJIworCSMgTm90ZSB0aGF0IHRoaXMgY29udHJvbHMgYWxsIHNlYXJjaCBmZWF0dXJlcywgd2hpY2ggbWVhbnMgdGhhdCBpZgorCSMgaXQgaXMgZGlzYWJsZWQsIHRoZW4gJ2dyZXAnIGFuZCAncGlja2F4ZScgc2VhcmNoIHdvdWxkIGFsc28gYmUKKwkjIGRpc2FibGVkLgorCSdzZWFyY2gnID0+IHsKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzFdfSwKKworCSMgRW5hYmxlIGdyZXAgc2VhcmNoLCB3aGljaCB3aWxsIGxpc3QgdGhlIGZpbGVzIGluIGN1cnJlbnRseSBzZWxlY3RlZAorCSMgdHJlZSBjb250YWluaW5nIHRoZSBnaXZlbiBzdHJpbmcuIEVuYWJsZWQgYnkgZGVmYXVsdC4gVGhpcyBjYW4gYmUKKwkjIHBvdGVudGlhbGx5IENQVS1pbnRlbnNpdmUsIG9mIGNvdXJzZS4KKwkjIE5vdGUgdGhhdCB5b3UgbmVlZCB0byBoYXZlICdzZWFyY2gnIGZlYXR1cmUgZW5hYmxlZCB0b28uCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnZ3JlcCd9eydkZWZhdWx0J30gPSBbMV07CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2dyZXAnfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLmdyZXAgPSAwfDE7CisJJ2dyZXAnID0+IHsKKwkJJ3N1YicgPT4gc3ViIHsgZmVhdHVyZV9ib29sKCdncmVwJywgQF8pIH0sCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsxXX0sCisKKwkjIEVuYWJsZSB0aGUgcGlja2F4ZSBzZWFyY2gsIHdoaWNoIHdpbGwgbGlzdCB0aGUgY29tbWl0cyB0aGF0IG1vZGlmaWVkCisJIyBhIGdpdmVuIHN0cmluZyBpbiBhIGZpbGUuIFRoaXMgY2FuIGJlIHByYWN0aWNhbCBhbmQgcXVpdGUgZmFzdGVyCisJIyBhbHRlcm5hdGl2ZSB0byAnYmxhbWUnLCBidXQgc3RpbGwgcG90ZW50aWFsbHkgQ1BVLWludGVuc2l2ZS4KKwkjIE5vdGUgdGhhdCB5b3UgbmVlZCB0byBoYXZlICdzZWFyY2gnIGZlYXR1cmUgZW5hYmxlZCB0b28uCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsncGlja2F4ZSd9eydkZWZhdWx0J30gPSBbMV07CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3BpY2theGUnfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLnBpY2theGUgPSAwfDE7CisJJ3BpY2theGUnID0+IHsKKwkJJ3N1YicgPT4gc3ViIHsgZmVhdHVyZV9ib29sKCdwaWNrYXhlJywgQF8pIH0sCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsxXX0sCisKKwkjIEVuYWJsZSBzaG93aW5nIHNpemUgb2YgYmxvYnMgaW4gYSAndHJlZScgdmlldywgaW4gYSBzZXBhcmF0ZQorCSMgY29sdW1uLCBzaW1pbGFyIHRvIHdoYXQgJ2xzIC1sJyBkb2VzLiAgVGhpcyBjb3N0IGEgYml0IG9mIElPLgorCisJIyBUbyBkaXNhYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydzaG93LXNpemVzJ317J2RlZmF1bHQnfSA9IFswXTsKKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnc2hvdy1zaXplcyd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIuc2hvd3NpemVzID0gMHwxOworCSdzaG93LXNpemVzJyA9PiB7CisJCSdzdWInID0+IHN1YiB7IGZlYXR1cmVfYm9vbCgnc2hvd3NpemVzJywgQF8pIH0sCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFsxXX0sCisKKwkjIE1ha2UgZ2l0d2ViIHVzZSBhbiBhbHRlcm5hdGl2ZSBmb3JtYXQgb2YgdGhlIFVSTHMgd2hpY2ggY2FuIGJlCisJIyBtb3JlIHJlYWRhYmxlIGFuZCBuYXR1cmFsLWxvb2tpbmc6IHByb2plY3QgbmFtZSBpcyBlbWJlZGRlZAorCSMgZGlyZWN0bHkgaW4gdGhlIHBhdGggYW5kIHRoZSBxdWVyeSBzdHJpbmcgY29udGFpbnMgb3RoZXIKKwkjIGF1eGlsaWFyeSBpbmZvcm1hdGlvbi4gQWxsIGdpdHdlYiBpbnN0YWxsYXRpb25zIHJlY29nbml6ZQorCSMgVVJMIGluIGVpdGhlciBmb3JtYXQ7IHRoaXMgY29uZmlndXJlcyBpbiB3aGljaCBmb3JtYXRzIGdpdHdlYgorCSMgZ2VuZXJhdGVzIGxpbmtzLgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J3BhdGhpbmZvJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkjIFByb2plY3Qgc3BlY2lmaWMgb3ZlcnJpZGUgaXMgbm90IHN1cHBvcnRlZC4KKworCSMgTm90ZSB0aGF0IHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIENTUywKKwkjIGZhdmljb24sIGxvZ28gYW5kIHBvc3NpYmx5IG90aGVyIGZpbGVzIHRvIGFuIGFic29sdXRlIFVSTC4gQWxzbywKKwkjIGlmIGdpdHdlYi5jZ2kgc2VydmVzIGFzIHlvdXIgaW5kZXhmaWxlLCB5b3Ugd2lsbCBuZWVkIHRvIGZvcmNlCisJIyAkbXlfdXJpIHRvIGNvbnRhaW4gdGhlIHNjcmlwdCBuYW1lIGluIHlvdXIgJEdJVFdFQl9DT05GSUcuCisJJ3BhdGhpbmZvJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIE1ha2UgZ2l0d2ViIGNvbnNpZGVyIHByb2plY3RzIGluIHByb2plY3Qgcm9vdCBzdWJkaXJlY3RvcmllcworCSMgdG8gYmUgZm9ya3Mgb2YgZXhpc3RpbmcgcHJvamVjdHMuIEdpdmVuIHByb2plY3QgJHByb2puYW1lLmdpdCwKKwkjIHByb2plY3RzIG1hdGNoaW5nICRwcm9qbmFtZS8qLmdpdCB3aWxsIG5vdCBiZSBzaG93biBpbiB0aGUgbWFpbgorCSMgcHJvamVjdHMgbGlzdCwgaW5zdGVhZCBhICcrJyBtYXJrIHdpbGwgYmUgYWRkZWQgdG8gJHByb2puYW1lCisJIyB0aGVyZSBhbmQgYSAnZm9ya3MnIHZpZXcgd2lsbCBiZSBlbmFibGVkIGZvciB0aGUgcHJvamVjdCwgbGlzdGluZworCSMgYWxsIHRoZSBmb3Jrcy4gSWYgcHJvamVjdCBsaXN0IGlzIHRha2VuIGZyb20gYSBmaWxlLCBmb3JrcyBoYXZlCisJIyB0byBiZSBsaXN0ZWQgYWZ0ZXIgdGhlIG1haW4gcHJvamVjdC4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydmb3Jrcyd9eydkZWZhdWx0J30gPSBbMV07CisJIyBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisJJ2ZvcmtzJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIEluc2VydCBjdXN0b20gbGlua3MgdG8gdGhlIGFjdGlvbiBiYXIgb2YgYWxsIHByb2plY3QgcGFnZXMuCisJIyBUaGlzIGVuYWJsZXMgeW91IG1haW5seSB0byBsaW5rIHRvIHRoaXJkLXBhcnR5IHNjcmlwdHMgaW50ZWdyYXRpbmcKKwkjIGludG8gZ2l0d2ViOyBlLmcuIGdpdC1icm93c2VyIGZvciBncmFwaGljYWwgaGlzdG9yeSByZXByZXNlbnRhdGlvbgorCSMgb3IgY3VzdG9tIHdlYi1iYXNlZCByZXBvc2l0b3J5IGFkbWluaXN0cmF0aW9uIGludGVyZmFjZS4KKworCSMgVGhlICdkZWZhdWx0JyB2YWx1ZSBjb25zaXN0cyBvZiBhIGxpc3Qgb2YgdHJpcGxldHMgaW4gdGhlIGZvcm0KKwkjIChsYWJlbCwgbGluaywgcG9zaXRpb24pIHdoZXJlIHBvc2l0aW9uIGlzIHRoZSBsYWJlbCBhZnRlciB3aGljaAorCSMgdG8gaW5zZXJ0IHRoZSBsaW5rIGFuZCBsaW5rIGlzIGEgZm9ybWF0IHN0cmluZyB3aGVyZSAlbiBleHBhbmRzCisJIyB0byB0aGUgcHJvamVjdCBuYW1lLCAlZiB0byB0aGUgcHJvamVjdCBwYXRoIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSwKKwkjICVoIHRvIHRoZSBjdXJyZW50IGhhc2ggKGggZ2l0d2ViIHBhcmFtZXRlcikgYW5kICViIHRvIHRoZSBjdXJyZW50CisJIyBoYXNoIGJhc2UgKGhiIGdpdHdlYiBwYXJhbWV0ZXIpOyAlJSBleHBhbmRzIHRvICUuCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHIGUuZy4KKwkjICRmZWF0dXJleydhY3Rpb25zJ317J2RlZmF1bHQnfSA9IFsoJ2dyYXBoaWNsb2cnLAorCSMgCScvZ2l0LWJyb3dzZXIvYnktY29tbWl0Lmh0bWw/cj0lbicsICdzdW1tYXJ5JyldOworCSMgUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCSdhY3Rpb25zJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFtdfSwKKworCSMgQWxsb3cgZ2l0d2ViIHNjYW4gcHJvamVjdCBjb250ZW50IHRhZ3Mgb2YgcHJvamVjdCByZXBvc2l0b3J5LAorCSMgYW5kIGRpc3BsYXkgdGhlIHBvcHVsYXIgV2ViIDIuMC1pc2ggInRhZyBjbG91ZCIgbmVhciB0aGUgcHJvamVjdHMKKwkjIGxpc3QuICBOb3RlIHRoYXQgdGhpcyBpcyBzb21ldGhpbmcgQ09NUExFVEVMWSBkaWZmZXJlbnQgZnJvbSB0aGUKKwkjIG5vcm1hbCBHaXQgdGFncy4KKworCSMgZ2l0d2ViIGJ5IGl0c2VsZiBjYW4gc2hvdyBleGlzdGluZyB0YWdzLCBidXQgaXQgZG9lcyBub3QgaGFuZGxlCisJIyB0YWdnaW5nIGl0c2VsZjsgeW91IG5lZWQgdG8gZG8gaXQgZXh0ZXJuYWxseSwgb3V0c2lkZSBnaXR3ZWIuCisJIyBUaGUgZm9ybWF0IGlzIGRlc2NyaWJlZCBpbiBnaXRfZ2V0X3Byb2plY3RfY3RhZ3MoKSBzdWJyb3V0aW5lLgorCSMgWW91IG1heSB3YW50IHRvIGluc3RhbGwgdGhlIEhUTUw6OlRhZ0Nsb3VkIFBlcmwgbW9kdWxlIHRvIGdldAorCSMgYSBwcmV0dHkgdGFnIGNsb3VkIGluc3RlYWQgb2YganVzdCBhIGxpc3Qgb2YgdGFncy4KKworCSMgVG8gZW5hYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydjdGFncyd9eydkZWZhdWx0J30gPSBbMV07CisJIyBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisKKwkjIEluIHRoZSBmdXR1cmUgd2hldGhlciBjdGFncyBlZGl0aW5nIGlzIGVuYWJsZWQgbWlnaHQgZGVwZW5kCisJIyBvbiB0aGUgdmFsdWUsIGJ1dCB1c2luZyAxIHNob3VsZCBhbHdheXMgbWVhbiBubyBlZGl0aW5nIG9mIGN0YWdzLgorCSdjdGFncycgPT4geworCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMF19LAorCisJIyBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGF0Y2hlcyBpbiBhIHBhdGNoc2V0IGdlbmVyYXRlZCBpbiBwYXRjaAorCSMgdmlldy4gU2V0IHRoaXMgdG8gMCBvciB1bmRlZiB0byBkaXNhYmxlIHBhdGNoIHZpZXcsIG9yIHRvIGEKKwkjIG5lZ2F0aXZlIG51bWJlciB0byByZW1vdmUgYW55IGxpbWl0LgorCisJIyBUbyBkaXNhYmxlIHN5c3RlbSB3aWRlIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydwYXRjaGVzJ317J2RlZmF1bHQnfSA9IFswXTsKKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsncGF0Y2hlcyd9eydvdmVycmlkZSd9ID0gMTsKKwkjIGFuZCBpbiBwcm9qZWN0IGNvbmZpZyBnaXR3ZWIucGF0Y2hlcyA9IDB8bjsKKwkjIHdoZXJlIG4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhdGNoZXMgYWxsb3dlZCBpbiBhIHBhdGNoc2V0LgorCSdwYXRjaGVzJyA9PiB7CisJCSdzdWInID0+IFwmZmVhdHVyZV9wYXRjaGVzLAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMTZdfSwKKworCSMgQXZhdGFyIHN1cHBvcnQuIFdoZW4gdGhpcyBmZWF0dXJlIGlzIGVuYWJsZWQsIHZpZXdzIHN1Y2ggYXMKKwkjIHNob3J0bG9nIG9yIGNvbW1pdCB3aWxsIGRpc3BsYXkgYW4gYXZhdGFyIGFzc29jaWF0ZWQgd2l0aAorCSMgdGhlIGVtYWlsIG9mIHRoZSBjb21taXR0ZXIocykgYW5kL29yIGF1dGhvcihzKS4KKworCSMgQ3VycmVudGx5IGF2YWlsYWJsZSBwcm92aWRlcnMgYXJlIGdyYXZhdGFyIGFuZCBwaWNvbi4KKwkjIElmIGFuIHVua25vd24gcHJvdmlkZXIgaXMgc3BlY2lmaWVkLCB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZC4KKworCSMgR3JhdmF0YXIgZGVwZW5kcyBvbiBEaWdlc3Q6Ok1ENS4KKwkjIFBpY29uIGN1cnJlbnRseSByZWxpZXMgb24gdGhlIGluZGlhbmEuZWR1IGRhdGFiYXNlLgorCisJIyBUbyBlbmFibGUgc3lzdGVtIHdpZGUgaGF2ZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2F2YXRhcid9eydkZWZhdWx0J30gPSBbJzxwcm92aWRlcj4nXTsKKwkjIHdoZXJlIDxwcm92aWRlcj4gaXMgZWl0aGVyIGdyYXZhdGFyIG9yIHBpY29uLgorCSMgVG8gaGF2ZSBwcm9qZWN0IHNwZWNpZmljIGNvbmZpZyBlbmFibGUgb3ZlcnJpZGUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydhdmF0YXInfXsnb3ZlcnJpZGUnfSA9IDE7CisJIyBhbmQgaW4gcHJvamVjdCBjb25maWcgZ2l0d2ViLmF2YXRhciA9IDxwcm92aWRlcj47CisJJ2F2YXRhcicgPT4geworCQknc3ViJyA9PiBcJmZlYXR1cmVfYXZhdGFyLAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbJyddfSwKKworCSMgRW5hYmxlIGRpc3BsYXlpbmcgaG93IG11Y2ggdGltZSBhbmQgaG93IG1hbnkgZ2l0IGNvbW1hbmRzCisJIyBpdCB0b29rIHRvIGdlbmVyYXRlIGFuZCBkaXNwbGF5IHBhZ2UuICBEaXNhYmxlZCBieSBkZWZhdWx0LgorCSMgUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBub3Qgc3VwcG9ydGVkLgorCSd0aW1lZCcgPT4geworCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbMF19LAorCisJIyBFbmFibGUgdHVybmluZyBzb21lIGxpbmtzIGludG8gbGlua3MgdG8gYWN0aW9ucyB3aGljaCByZXF1aXJlCisJIyBKYXZhU2NyaXB0IHRvIHJ1biAobGlrZSAnYmxhbWVfaW5jcmVtZW50YWwnKS4gIE5vdCBlbmFibGVkIGJ5CisJIyBkZWZhdWx0LiAgUHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4KKwknamF2YXNjcmlwdC1hY3Rpb25zJyA9PiB7CisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIEVuYWJsZSBhbmQgY29uZmlndXJlIGFiaWxpdHkgdG8gY2hhbmdlIGNvbW1vbiB0aW1lem9uZSBmb3IgZGF0ZXMKKwkjIGluIGdpdHdlYiBvdXRwdXQgdmlhIEphdmFTY3JpcHQuICBFbmFibGVkIGJ5IGRlZmF1bHQuCisJIyBQcm9qZWN0IHNwZWNpZmljIG92ZXJyaWRlIGlzIG5vdCBzdXBwb3J0ZWQuCisJJ2phdmFzY3JpcHQtdGltZXpvbmUnID0+IHsKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWworCQkJJ2xvY2FsJywgICAgICMgZGVmYXVsdCB0aW1lem9uZTogJ3V0YycsICdsb2NhbCcsIG9yICcoLXwrKUhITU0nIGZvcm1hdCwKKwkJCSAgICAgICAgICAgICAjIG9yIHVuZGVmIHRvIHR1cm4gb2ZmIHRoaXMgZmVhdHVyZQorCQkJJ2dpdHdlYl90eicsICMgbmFtZSBvZiBjb29raWUgd2hlcmUgdG8gc3RvcmUgc2VsZWN0ZWQgdGltZXpvbmUKKwkJCSdkYXRldGltZScsICAjIENTUyBjbGFzcyB1c2VkIHRvIG1hcmsgdXAgZGF0ZXMgZm9yIG1hbmlwdWxhdGlvbgorCQldfSwKKworCSMgU3ludGF4IGhpZ2hsaWdodGluZyBzdXBwb3J0LiBUaGlzIGlzIGJhc2VkIG9uIERhbmllbCBTdmVuc3NvbidzCisJIyBhbmQgU2hhbSBDaHVrb3VyeSdzIHdvcmsgaW4gZ2l0d2ViLXhtbXMyLmdpdC4KKwkjIEl0IHJlcXVpcmVzIHRoZSAnaGlnaGxpZ2h0JyBwcm9ncmFtIHByZXNlbnQgaW4gJFBBVEgsCisJIyBhbmQgdGhlcmVmb3JlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsnaGlnaGxpZ2h0J317J2RlZmF1bHQnfSA9IFsxXTsKKworCSdoaWdobGlnaHQnID0+IHsKKwkJJ3N1YicgPT4gc3ViIHsgZmVhdHVyZV9ib29sKCdoaWdobGlnaHQnLCBAXykgfSwKKwkJJ292ZXJyaWRlJyA9PiAwLAorCQknZGVmYXVsdCcgPT4gWzBdfSwKKworCSMgRW5hYmxlIGRpc3BsYXlpbmcgb2YgcmVtb3RlIGhlYWRzIGluIHRoZSBoZWFkcyBsaXN0CisKKwkjIFRvIGVuYWJsZSBzeXN0ZW0gd2lkZSBoYXZlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsncmVtb3RlX2hlYWRzJ317J2RlZmF1bHQnfSA9IFsxXTsKKwkjIFRvIGhhdmUgcHJvamVjdCBzcGVjaWZpYyBjb25maWcgZW5hYmxlIG92ZXJyaWRlIGluICRHSVRXRUJfQ09ORklHCisJIyAkZmVhdHVyZXsncmVtb3RlX2hlYWRzJ317J292ZXJyaWRlJ30gPSAxOworCSMgYW5kIGluIHByb2plY3QgY29uZmlnIGdpdHdlYi5yZW1vdGVoZWFkcyA9IDB8MTsKKwkncmVtb3RlX2hlYWRzJyA9PiB7CisJCSdzdWInID0+IHN1YiB7IGZlYXR1cmVfYm9vbCgncmVtb3RlX2hlYWRzJywgQF8pIH0sCisJCSdvdmVycmlkZScgPT4gMCwKKwkJJ2RlZmF1bHQnID0+IFswXX0sCisKKwkjIEVuYWJsZSBzaG93aW5nIGJyYW5jaGVzIHVuZGVyIG90aGVyIHJlZnMgaW4gYWRkaXRpb24gdG8gaGVhZHMKKworCSMgVG8gc2V0IHN5c3RlbSB3aWRlIGV4dHJhIGJyYW5jaCByZWZzIGhhdmUgaW4gJEdJVFdFQl9DT05GSUcKKwkjICRmZWF0dXJleydleHRyYS1icmFuY2gtcmVmcyd9eydkZWZhdWx0J30gPSBbJ2RpcnMnLCAnb2YnLCAnY2hvaWNlJ107CisJIyBUbyBoYXZlIHByb2plY3Qgc3BlY2lmaWMgY29uZmlnIGVuYWJsZSBvdmVycmlkZSBpbiAkR0lUV0VCX0NPTkZJRworCSMgJGZlYXR1cmV7J2V4dHJhLWJyYW5jaC1yZWZzJ317J292ZXJyaWRlJ30gPSAxOworCSMgYW5kIGluIHByb2plY3QgY29uZmlnIGdpdHdlYi5leHRyYWJyYW5jaHJlZnMgPSBkaXJzIG9mIGNob2ljZQorCSMgRXZlcnkgZGlyZWN0b3J5IGlzIHNlcGFyYXRlZCB3aXRoIHdoaXRlc3BhY2UuCisKKwknZXh0cmEtYnJhbmNoLXJlZnMnID0+IHsKKwkJJ3N1YicgPT4gXCZmZWF0dXJlX2V4dHJhX2JyYW5jaF9yZWZzLAorCQknb3ZlcnJpZGUnID0+IDAsCisJCSdkZWZhdWx0JyA9PiBbXX0sCispOworCitzdWIgZ2l0d2ViX2dldF9mZWF0dXJlIHsKKwlteSAoJG5hbWUpID0gQF87CisJcmV0dXJuIHVubGVzcyBleGlzdHMgJGZlYXR1cmV7JG5hbWV9OworCW15ICgkc3ViLCAkb3ZlcnJpZGUsIEBkZWZhdWx0cykgPSAoCisJCSRmZWF0dXJleyRuYW1lfXsnc3ViJ30sCisJCSRmZWF0dXJleyRuYW1lfXsnb3ZlcnJpZGUnfSwKKwkJQHskZmVhdHVyZXskbmFtZX17J2RlZmF1bHQnfX0pOworCSMgcHJvamVjdCBzcGVjaWZpYyBvdmVycmlkZSBpcyBwb3NzaWJsZSBvbmx5IGlmIHdlIGhhdmUgcHJvamVjdAorCW91ciAkZ2l0X2RpcjsgIyBnbG9iYWwgdmFyaWFibGUsIGRlY2xhcmVkIGxhdGVyCisJaWYgKCEkb3ZlcnJpZGUgfHwgIWRlZmluZWQgJGdpdF9kaXIpIHsKKwkJcmV0dXJuIEBkZWZhdWx0czsKKwl9CisJaWYgKCFkZWZpbmVkICRzdWIpIHsKKwkJd2FybiAiZmVhdHVyZSAkbmFtZSBpcyBub3Qgb3ZlcnJpZGFibGUiOworCQlyZXR1cm4gQGRlZmF1bHRzOworCX0KKwlyZXR1cm4gJHN1Yi0+KEBkZWZhdWx0cyk7Cit9CisKKyMgQSB3cmFwcGVyIHRvIGNoZWNrIGlmIGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkLgorIyBXaXRoIHRoaXMsIHlvdSBjYW4gc2F5CisjCisjICAgbXkgJGJvb2xfZmVhdCA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdib29sX2ZlYXQnKTsKKyMgICBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnYm9vbF9mZWF0Jykgb3Igc29tZWNvZGU7CisjCisjIGluc3RlYWQgb2YKKyMKKyMgICBteSAoJGJvb2xfZmVhdCkgPSBnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ2Jvb2xfZmVhdCcpOworIyAgIChnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ2Jvb2xfZmVhdCcpKVswXSBvciBzb21lY29kZTsKKyMKK3N1YiBnaXR3ZWJfY2hlY2tfZmVhdHVyZSB7CisJcmV0dXJuIChnaXR3ZWJfZ2V0X2ZlYXR1cmUoQF8pKVswXTsKK30KKworCitzdWIgZmVhdHVyZV9ib29sIHsKKwlteSAka2V5ID0gc2hpZnQ7CisJbXkgKCR2YWwpID0gZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygka2V5LCAnLS1ib29sJyk7CisKKwlpZiAoIWRlZmluZWQgJHZhbCkgeworCQlyZXR1cm4gKCRfWzBdKTsKKwl9IGVsc2lmICgkdmFsIGVxICd0cnVlJykgeworCQlyZXR1cm4gKDEpOworCX0gZWxzaWYgKCR2YWwgZXEgJ2ZhbHNlJykgeworCQlyZXR1cm4gKDApOworCX0KK30KKworc3ViIGZlYXR1cmVfc25hcHNob3QgeworCW15IChAZm10cykgPSBAXzsKKworCW15ICgkdmFsKSA9IGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ3NuYXBzaG90Jyk7CisKKwlpZiAoJHZhbCkgeworCQlAZm10cyA9ICgkdmFsIGVxICdub25lJyA/ICgpIDogc3BsaXQgL1xzKlssXHNdXHMqLywgJHZhbCk7CisJfQorCisJcmV0dXJuIEBmbXRzOworfQorCitzdWIgZmVhdHVyZV9wYXRjaGVzIHsKKwlteSBAdmFsID0gKGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ3BhdGNoZXMnLCAnLS1pbnQnKSk7CisKKwlpZiAoQHZhbCkgeworCQlyZXR1cm4gQHZhbDsKKwl9CisKKwlyZXR1cm4gKCRfWzBdKTsKK30KKworc3ViIGZlYXR1cmVfYXZhdGFyIHsKKwlteSBAdmFsID0gKGdpdF9nZXRfcHJvamVjdF9jb25maWcoJ2F2YXRhcicpKTsKKworCXJldHVybiBAdmFsID8gQHZhbCA6IEBfOworfQorCitzdWIgZmVhdHVyZV9leHRyYV9icmFuY2hfcmVmcyB7CisJbXkgKEBicmFuY2hfcmVmcykgPSBAXzsKKwlteSAkdmFsdWVzID0gZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygnZXh0cmFicmFuY2hyZWZzJyk7CisKKwlpZiAoJHZhbHVlcykgeworCQkkdmFsdWVzID0gY29uZmlnX3RvX211bHRpICgkdmFsdWVzKTsKKwkJQGJyYW5jaF9yZWZzID0gKCk7CisJCWZvcmVhY2ggbXkgJHZhbHVlIChAeyR2YWx1ZXN9KSB7CisJCQlwdXNoIEBicmFuY2hfcmVmcywgc3BsaXQgL1xzKy8sICR2YWx1ZTsKKwkJfQorCX0KKworCXJldHVybiBAYnJhbmNoX3JlZnM7Cit9CisKKyMgY2hlY2tpbmcgSEVBRCBmaWxlIHdpdGggLWUgaXMgZnJhZ2lsZSBpZiB0aGUgcmVwb3NpdG9yeSB3YXMKKyMgaW5pdGlhbGl6ZWQgbG9uZyB0aW1lIGFnbyAoaS5lLiBzeW1saW5rIEhFQUQpIGFuZCB3YXMgcGFjay1yZWYnZWQKKyMgYW5kIHRoZW4gcHJ1bmVkLgorc3ViIGNoZWNrX2hlYWRfbGluayB7CisJbXkgKCRkaXIpID0gQF87CisJbXkgJGhlYWRmaWxlID0gIiRkaXIvSEVBRCI7CisJcmV0dXJuICgoLWUgJGhlYWRmaWxlKSB8fAorCQkoLWwgJGhlYWRmaWxlICYmIHJlYWRsaW5rKCRoZWFkZmlsZSkgPX4gL15yZWZzXC9oZWFkc1wvLykpOworfQorCitzdWIgY2hlY2tfZXhwb3J0X29rIHsKKwlteSAoJGRpcikgPSBAXzsKKwlyZXR1cm4gKGNoZWNrX2hlYWRfbGluaygkZGlyKSAmJgorCQkoISRleHBvcnRfb2sgfHwgLWUgIiRkaXIvJGV4cG9ydF9vayIpICYmCisJCSghJGV4cG9ydF9hdXRoX2hvb2sgfHwgJGV4cG9ydF9hdXRoX2hvb2stPigkZGlyKSkpOworfQorCisjIHByb2Nlc3MgYWx0ZXJuYXRlIG5hbWVzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisjIGZpbHRlciBvdXQgdW5zdXBwb3J0ZWQgKHVua25vd24pIHNuYXBzaG90IGZvcm1hdHMKK3N1YiBmaWx0ZXJfc25hcHNob3RfZm10cyB7CisJbXkgQGZtdHMgPSBAXzsKKworCUBmbXRzID0gbWFwIHsKKwkJZXhpc3RzICRrbm93bl9zbmFwc2hvdF9mb3JtYXRfYWxpYXNlc3skX30gPworCQkgICAgICAgJGtub3duX3NuYXBzaG90X2Zvcm1hdF9hbGlhc2VzeyRffSA6ICRffSBAZm10czsKKwlAZm10cyA9IGdyZXAgeworCQlleGlzdHMgJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JF99ICYmCisJCSEka25vd25fc25hcHNob3RfZm9ybWF0c3skX317J2Rpc2FibGVkJ319IEBmbXRzOworfQorCitzdWIgZmlsdGVyX2FuZF92YWxpZGF0ZV9yZWZzIHsKKwlteSBAcmVmcyA9IEBfOworCW15ICV1bmlxdWVfcmVmcyA9ICgpOworCisJZm9yZWFjaCBteSAkcmVmIChAcmVmcykgeworCQlkaWVfZXJyb3IoNTAwLCAiSW52YWxpZCByZWYgJyRyZWYnIGluICdleHRyYS1icmFuY2gtcmVmcycgZmVhdHVyZSIpIHVubGVzcyAoaXNfdmFsaWRfcmVmX2Zvcm1hdCgkcmVmKSk7CisJCSMgJ2hlYWRzJyBhcmUgYWRkZWQgaW1wbGljaXRseSBpbiBnZXRfYnJhbmNoX3JlZnMoKS4KKwkJJHVuaXF1ZV9yZWZzeyRyZWZ9ID0gMSBpZiAoJHJlZiBuZSAnaGVhZHMnKTsKKwl9CisJcmV0dXJuIHNvcnQga2V5cyAldW5pcXVlX3JlZnM7Cit9CisKKyMgSWYgaXQgaXMgc2V0IHRvIGNvZGUgcmVmZXJlbmNlLCBpdCBpcyBjb2RlIHRoYXQgaXQgaXMgdG8gYmUgcnVuIG9uY2UgcGVyCisjIHJlcXVlc3QsIGFsbG93aW5nIHVwZGF0aW5nIGNvbmZpZ3VyYXRpb25zIHRoYXQgY2hhbmdlIHdpdGggZWFjaCByZXF1ZXN0LAorIyB3aGlsZSBydW5uaW5nIG90aGVyIGNvZGUgaW4gY29uZmlnIGZpbGUgb25seSBvbmNlLgorIworIyBPdGhlcndpc2UsIGlmIGl0IGlzIGZhbHNlIHRoZW4gZ2l0d2ViIHdvdWxkIHByb2Nlc3MgY29uZmlnIGZpbGUgb25seSBvbmNlOworIyBpZiBpdCBpcyB0cnVlIHRoZW4gZ2l0d2ViIGNvbmZpZyB3b3VsZCBiZSBydW4gZm9yIGVhY2ggcmVxdWVzdC4KK291ciAkcGVyX3JlcXVlc3RfY29uZmlnID0gMTsKKworIyByZWFkIGFuZCBwYXJzZSBnaXR3ZWIgY29uZmlnIGZpbGUgZ2l2ZW4gYnkgaXRzIHBhcmFtZXRlci4KKyMgcmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIHJlY292ZXJhYmxlIGVycm9yLCBhbGxvd2luZworIyB0byBjaGFpbiB0aGlzIHN1YnJvdXRpbmUsIHVzaW5nIGZpcnN0IGZpbGUgdGhhdCBleGlzdHMuCisjIGRpZXMgb24gZXJyb3JzIGR1cmluZyBwYXJzaW5nIGNvbmZpZyBmaWxlLCBhcyBpdCBpcyB1bnJlY292ZXJhYmxlLgorc3ViIHJlYWRfY29uZmlnX2ZpbGUgeworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkZmlsZW5hbWU7CisJIyBkaWUgaWYgdGhlcmUgYXJlIGVycm9ycyBwYXJzaW5nIGNvbmZpZyBmaWxlCisJaWYgKC1lICRmaWxlbmFtZSkgeworCQlkbyAkZmlsZW5hbWU7CisJCWRpZSAkQCBpZiAkQDsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybjsKK30KKworb3VyICgkR0lUV0VCX0NPTkZJRywgJEdJVFdFQl9DT05GSUdfU1lTVEVNLCAkR0lUV0VCX0NPTkZJR19DT01NT04pOworc3ViIGV2YWx1YXRlX2dpdHdlYl9jb25maWcgeworCW91ciAkR0lUV0VCX0NPTkZJRyA9ICRFTlZ7J0dJVFdFQl9DT05GSUcnfSB8fCAiKytHSVRXRUJfQ09ORklHKysiOworCW91ciAkR0lUV0VCX0NPTkZJR19TWVNURU0gPSAkRU5WeydHSVRXRUJfQ09ORklHX1NZU1RFTSd9IHx8ICIrK0dJVFdFQl9DT05GSUdfU1lTVEVNKysiOworCW91ciAkR0lUV0VCX0NPTkZJR19DT01NT04gPSAkRU5WeydHSVRXRUJfQ09ORklHX0NPTU1PTid9IHx8ICIrK0dJVFdFQl9DT05GSUdfQ09NTU9OKysiOworCisJIyBQcm90ZWN0IGFnYWluc3QgZHVwbGljYXRpb25zIG9mIGZpbGUgbmFtZXMsIHRvIG5vdCByZWFkIGNvbmZpZyB0d2ljZS4KKwkjIE9ubHkgb25lIG9mICRHSVRXRUJfQ09ORklHIGFuZCAkR0lUV0VCX0NPTkZJR19TWVNURU0gaXMgdXNlZCwgc28KKwkjIHRoZXJlIHBvc3NpYmlsaXR5IG9mIGR1cGxpY2F0aW9uIG9mIGZpbGVuYW1lIHRoZXJlIGRvZXNuJ3QgbWF0dGVyLgorCSRHSVRXRUJfQ09ORklHID0gIiIgICAgICAgIGlmICgkR0lUV0VCX0NPTkZJRyBlcSAkR0lUV0VCX0NPTkZJR19DT01NT04pOworCSRHSVRXRUJfQ09ORklHX1NZU1RFTSA9ICIiIGlmICgkR0lUV0VCX0NPTkZJR19TWVNURU0gZXEgJEdJVFdFQl9DT05GSUdfQ09NTU9OKTsKKworCSMgQ29tbW9uIHN5c3RlbS13aWRlIHNldHRpbmdzIGZvciBjb252ZW5pZW5jZS4KKwkjIFRob3NlIHNldHRpbmdzIGNhbiBiZSBvdnZlcnJpZGVuIGJ5IEdJVFdFQl9DT05GSUcgb3IgR0lUV0VCX0NPTkZJR19TWVNURU0uCisJcmVhZF9jb25maWdfZmlsZSgkR0lUV0VCX0NPTkZJR19DT01NT04pOworCisJIyBVc2UgZmlyc3QgY29uZmlnIGZpbGUgdGhhdCBleGlzdHMuICBUaGlzIG1lYW5zIHVzZSB0aGUgcGVyLWluc3RhbmNlCisJIyBHSVRXRUJfQ09ORklHIGlmIGV4aXN0cywgb3RoZXJ3aXNlIHVzZSBHSVRXRUJfU1lTVEVNX0NPTkZJRy4KKwlyZWFkX2NvbmZpZ19maWxlKCRHSVRXRUJfQ09ORklHKSBhbmQgcmV0dXJuOworCXJlYWRfY29uZmlnX2ZpbGUoJEdJVFdFQl9DT05GSUdfU1lTVEVNKTsKK30KKworIyBHZXQgbG9hZGF2ZyBvZiBzeXN0ZW0sIHRvIGNvbXBhcmUgYWdhaW5zdCAkbWF4bG9hZC4KKyMgQ3VycmVudGx5IGl0IHJlcXVpcmVzICcvcHJvYy9sb2FkYXZnJyBwcmVzZW50IHRvIGdldCBsb2FkYXZnOworIyBpZiBpdCBpcyBub3QgcHJlc2VudCBpdCByZXR1cm5zIDAsIHdoaWNoIG1lYW5zIG5vIGxvYWQgY2hlY2tpbmcuCitzdWIgZ2V0X2xvYWRhdmcgeworCWlmKCAtZSAnL3Byb2MvbG9hZGF2ZycgKXsKKwkJb3BlbiBteSAkZmQsICc8JywgJy9wcm9jL2xvYWRhdmcnCisJCQlvciByZXR1cm4gMDsKKwkJbXkgQGxvYWQgPSBzcGxpdCgvXHMrLywgc2NhbGFyIDwkZmQ+KTsKKwkJY2xvc2UgJGZkOworCisJCSMgVGhlIGZpcnN0IHRocmVlIGNvbHVtbnMgbWVhc3VyZSBDUFUgYW5kIElPIHV0aWxpemF0aW9uIG9mIHRoZSBsYXN0IG9uZSwKKwkJIyBmaXZlLCBhbmQgMTAgbWludXRlIHBlcmlvZHMuICBUaGUgZm91cnRoIGNvbHVtbiBzaG93cyB0aGUgbnVtYmVyIG9mCisJCSMgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2Vzc2VzIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NlcyBpbiB0aGUgbS9uCisJCSMgZm9ybWF0LiAgVGhlIGxhc3QgY29sdW1uIGRpc3BsYXlzIHRoZSBsYXN0IHByb2Nlc3MgSUQgdXNlZC4KKwkJcmV0dXJuICRsb2FkWzBdIHx8IDA7CisJfQorCSMgYWRkaXRpb25hbCBjaGVja3MgZm9yIGxvYWQgYXZlcmFnZSBzaG91bGQgZ28gaGVyZSBmb3IgdGhpbmdzIHRoYXQgZG9uJ3QgZXhwb3J0CisJIyAvcHJvYy9sb2FkYXZnCisKKwlyZXR1cm4gMDsKK30KKworIyB2ZXJzaW9uIG9mIHRoZSBjb3JlIGdpdCBiaW5hcnkKK291ciAkZ2l0X3ZlcnNpb247CitzdWIgZXZhbHVhdGVfZ2l0X3ZlcnNpb24geworCW91ciAkZ2l0X3ZlcnNpb24gPSBxeCgiJEdJVCIgLS12ZXJzaW9uKSA9fiBtL2dpdCB2ZXJzaW9uICguKikkLyA/ICQxIDogInVua25vd24iOworCSRudW1iZXJfb2ZfZ2l0X2NtZHMrKzsKK30KKworc3ViIGNoZWNrX2xvYWRhdmcgeworCWlmIChkZWZpbmVkICRtYXhsb2FkICYmIGdldF9sb2FkYXZnKCkgPiAkbWF4bG9hZCkgeworCQlkaWVfZXJyb3IoNTAzLCAiVGhlIGxvYWQgYXZlcmFnZSBvbiB0aGUgc2VydmVyIGlzIHRvbyBoaWdoIik7CisJfQorfQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgaW5wdXQgdmFsaWRhdGlvbiBhbmQgZGlzcGF0Y2gKKworIyBpbnB1dCBwYXJhbWV0ZXJzIGNhbiBiZSBjb2xsZWN0ZWQgZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyAocHJlc2VudGx5LCBDR0kKKyMgYW5kIFBBVEhfSU5GTyksIHNvIHdlIGRlZmluZSBhbiAlaW5wdXRfcGFyYW1zIGhhc2ggdGhhdCBjb2xsZWN0cyB0aGVtIGFsbAorIyB0b2dldGhlciBkdXJpbmcgdmFsaWRhdGlvbjogdGhpcyBhbGxvd3Mgc3Vic2VxdWVudCB1c2VzIChlLmcuIGhyZWYoKSkgdG8gYmUKKyMgYWdub3N0aWMgb2YgdGhlIHBhcmFtZXRlciBvcmlnaW4KKworb3VyICVpbnB1dF9wYXJhbXMgPSAoKTsKKworIyBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBzdG9yZWQgd2l0aCB0aGUgbG9uZyBwYXJhbWV0ZXIgbmFtZSBhcyBrZXkuIFRoaXMgd2lsbAorIyBhbHNvIGJlIHVzZWQgaW4gdGhlIGhyZWYgc3Vicm91dGluZSB0byBjb252ZXJ0IHBhcmFtZXRlcnMgdG8gdGhlaXIgQ0dJCisjIGVxdWl2YWxlbnQsIGFuZCBzaW5jZSB0aGUgaHJlZigpIHVzYWdlIGlzIHRoZSBtb3N0IGZyZXF1ZW50IG9uZSwgd2Ugc3RvcmUKKyMgdGhlIG5hbWUgLT4gQ0dJIGtleSBtYXBwaW5nIGhlcmUsIGluc3RlYWQgb2YgdGhlIHJldmVyc2UuCisjCisjIFhYWDogV2FybmluZzogSWYgeW91IHRvdWNoIHRoaXMsIGNoZWNrIHRoZSBzZWFyY2ggZm9ybSBmb3IgdXBkYXRpbmcsCisjIHRvby4KKworb3VyIEBjZ2lfcGFyYW1fbWFwcGluZyA9ICgKKwlwcm9qZWN0ID0+ICJwIiwKKwlhY3Rpb24gPT4gImEiLAorCWZpbGVfbmFtZSA9PiAiZiIsCisJZmlsZV9wYXJlbnQgPT4gImZwIiwKKwloYXNoID0+ICJoIiwKKwloYXNoX3BhcmVudCA9PiAiaHAiLAorCWhhc2hfYmFzZSA9PiAiaGIiLAorCWhhc2hfcGFyZW50X2Jhc2UgPT4gImhwYiIsCisJcGFnZSA9PiAicGciLAorCW9yZGVyID0+ICJvIiwKKwlzZWFyY2h0ZXh0ID0+ICJzIiwKKwlzZWFyY2h0eXBlID0+ICJzdCIsCisJc25hcHNob3RfZm9ybWF0ID0+ICJzZiIsCisJZXh0cmFfb3B0aW9ucyA9PiAib3B0IiwKKwlzZWFyY2hfdXNlX3JlZ2V4cCA9PiAic3IiLAorCWN0YWcgPT4gImJ5X3RhZyIsCisJZGlmZl9zdHlsZSA9PiAiZHMiLAorCXByb2plY3RfZmlsdGVyID0+ICJwZiIsCisJIyB0aGlzIG11c3QgYmUgbGFzdCBlbnRyeSAoZm9yIG1hbmlwdWxhdGlvbiBmcm9tIEphdmFTY3JpcHQpCisJamF2YXNjcmlwdCA9PiAianMiCispOworb3VyICVjZ2lfcGFyYW1fbWFwcGluZyA9IEBjZ2lfcGFyYW1fbWFwcGluZzsKKworIyB3ZSB3aWxsIGFsc28gbmVlZCB0byBrbm93IHRoZSBwb3NzaWJsZSBhY3Rpb25zLCBmb3IgdmFsaWRhdGlvbgorb3VyICVhY3Rpb25zID0gKAorCSJibGFtZSIgPT4gXCZnaXRfYmxhbWUsCisJImJsYW1lX2luY3JlbWVudGFsIiA9PiBcJmdpdF9ibGFtZV9pbmNyZW1lbnRhbCwKKwkiYmxhbWVfZGF0YSIgPT4gXCZnaXRfYmxhbWVfZGF0YSwKKwkiYmxvYmRpZmYiID0+IFwmZ2l0X2Jsb2JkaWZmLAorCSJibG9iZGlmZl9wbGFpbiIgPT4gXCZnaXRfYmxvYmRpZmZfcGxhaW4sCisJImJsb2IiID0+IFwmZ2l0X2Jsb2IsCisJImJsb2JfcGxhaW4iID0+IFwmZ2l0X2Jsb2JfcGxhaW4sCisJImNvbW1pdGRpZmYiID0+IFwmZ2l0X2NvbW1pdGRpZmYsCisJImNvbW1pdGRpZmZfcGxhaW4iID0+IFwmZ2l0X2NvbW1pdGRpZmZfcGxhaW4sCisJImNvbW1pdCIgPT4gXCZnaXRfY29tbWl0LAorCSJmb3JrcyIgPT4gXCZnaXRfZm9ya3MsCisJImhlYWRzIiA9PiBcJmdpdF9oZWFkcywKKwkiaGlzdG9yeSIgPT4gXCZnaXRfaGlzdG9yeSwKKwkibG9nIiA9PiBcJmdpdF9sb2csCisJInBhdGNoIiA9PiBcJmdpdF9wYXRjaCwKKwkicGF0Y2hlcyIgPT4gXCZnaXRfcGF0Y2hlcywKKwkicmVtb3RlcyIgPT4gXCZnaXRfcmVtb3RlcywKKwkicnNzIiA9PiBcJmdpdF9yc3MsCisJImF0b20iID0+IFwmZ2l0X2F0b20sCisJInNlYXJjaCIgPT4gXCZnaXRfc2VhcmNoLAorCSJzZWFyY2hfaGVscCIgPT4gXCZnaXRfc2VhcmNoX2hlbHAsCisJInNob3J0bG9nIiA9PiBcJmdpdF9zaG9ydGxvZywKKwkic3VtbWFyeSIgPT4gXCZnaXRfc3VtbWFyeSwKKwkidGFnIiA9PiBcJmdpdF90YWcsCisJInRhZ3MiID0+IFwmZ2l0X3RhZ3MsCisJInRyZWUiID0+IFwmZ2l0X3RyZWUsCisJInNuYXBzaG90IiA9PiBcJmdpdF9zbmFwc2hvdCwKKwkib2JqZWN0IiA9PiBcJmdpdF9vYmplY3QsCisJIyB0aG9zZSBiZWxvdyBkb24ndCBuZWVkICRwcm9qZWN0CisJIm9wbWwiID0+IFwmZ2l0X29wbWwsCisJInByb2plY3RfbGlzdCIgPT4gXCZnaXRfcHJvamVjdF9saXN0LAorCSJwcm9qZWN0X2luZGV4IiA9PiBcJmdpdF9wcm9qZWN0X2luZGV4LAorKTsKKworIyBmaW5hbGx5LCB3ZSBoYXZlIHRoZSBoYXNoIG9mIGFsbG93ZWQgZXh0cmFfb3B0aW9ucyBmb3IgdGhlIGNvbW1hbmRzIHRoYXQKKyMgYWxsb3cgdGhlbQorb3VyICVhbGxvd2VkX29wdGlvbnMgPSAoCisJIi0tbm8tbWVyZ2VzIiA9PiBbIHF3KHJzcyBhdG9tIGxvZyBzaG9ydGxvZyBoaXN0b3J5KSBdLAorKTsKKworIyBmaWxsICVpbnB1dF9wYXJhbXMgd2l0aCB0aGUgQ0dJIHBhcmFtZXRlcnMuIEFsbCB2YWx1ZXMgZXhjZXB0IGZvciAnb3B0JworIyBzaG91bGQgYmUgc2luZ2xlIHZhbHVlcywgYnV0IG9wdCBjYW4gYmUgYW4gYXJyYXkuIFdlIHNob3VsZCBwcm9iYWJseQorIyBidWlsZCBhbiBhcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIG11bHRpLXZhbHVlZCwgYnV0IHNpbmNlIGZvciB0aGUgdGltZQorIyBiZWluZyBpdCdzIG9ubHkgdGhpcyBvbmUsIHdlIGp1c3Qgc2luZ2xlIGl0IG91dAorc3ViIGV2YWx1YXRlX3F1ZXJ5X3BhcmFtcyB7CisJb3VyICRjZ2k7CisKKwl3aGlsZSAobXkgKCRuYW1lLCAkc3ltYm9sKSA9IGVhY2ggJWNnaV9wYXJhbV9tYXBwaW5nKSB7CisJCWlmICgkc3ltYm9sIGVxICdvcHQnKSB7CisJCQkkaW5wdXRfcGFyYW1zeyRuYW1lfSA9IFsgbWFwIHsgZGVjb2RlX3V0ZjgoJF8pIH0gJGNnaS0+bXVsdGlfcGFyYW0oJHN5bWJvbCkgXTsKKwkJfSBlbHNlIHsKKwkJCSRpbnB1dF9wYXJhbXN7JG5hbWV9ID0gZGVjb2RlX3V0ZjgoJGNnaS0+cGFyYW0oJHN5bWJvbCkpOworCQl9CisJfQorfQorCisjIG5vdyByZWFkIFBBVEhfSU5GTyBhbmQgdXBkYXRlIHRoZSBwYXJhbWV0ZXIgbGlzdCBmb3IgbWlzc2luZyBwYXJhbWV0ZXJzCitzdWIgZXZhbHVhdGVfcGF0aF9pbmZvIHsKKwlyZXR1cm4gaWYgZGVmaW5lZCAkaW5wdXRfcGFyYW1zeydwcm9qZWN0J307CisJcmV0dXJuIGlmICEkcGF0aF9pbmZvOworCSRwYXRoX2luZm8gPX4gcyxeLyssLDsKKwlyZXR1cm4gaWYgISRwYXRoX2luZm87CisKKwkjIGZpbmQgd2hpY2ggcGFydCBvZiBQQVRIX0lORk8gaXMgcHJvamVjdAorCW15ICRwcm9qZWN0ID0gJHBhdGhfaW5mbzsKKwkkcHJvamVjdCA9fiBzLC8rJCwsOworCXdoaWxlICgkcHJvamVjdCAmJiAhY2hlY2tfaGVhZF9saW5rKCIkcHJvamVjdHJvb3QvJHByb2plY3QiKSkgeworCQkkcHJvamVjdCA9fiBzLC8qW14vXSokLCw7CisJfQorCXJldHVybiB1bmxlc3MgJHByb2plY3Q7CisJJGlucHV0X3BhcmFtc3sncHJvamVjdCd9ID0gJHByb2plY3Q7CisKKwkjIGRvIG5vdCBjaGFuZ2UgYW55IHBhcmFtZXRlcnMgaWYgYW4gYWN0aW9uIGlzIGdpdmVuIHVzaW5nIHRoZSBxdWVyeSBzdHJpbmcKKwlyZXR1cm4gaWYgJGlucHV0X3BhcmFtc3snYWN0aW9uJ307CisJJHBhdGhfaW5mbyA9fiBzLF5cUSRwcm9qZWN0XEUvKiwsOworCisJIyBuZXh0LCBjaGVjayBpZiB3ZSBoYXZlIGFuIGFjdGlvbgorCW15ICRhY3Rpb24gPSAkcGF0aF9pbmZvOworCSRhY3Rpb24gPX4gcywvLiokLCw7CisJaWYgKGV4aXN0cyAkYWN0aW9uc3skYWN0aW9ufSkgeworCQkkcGF0aF9pbmZvID1+IHMsXiRhY3Rpb24vKiwsOworCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSA9ICRhY3Rpb247CisJfQorCisJIyBsaXN0IG9mIGFjdGlvbnMgdGhhdCB3YW50IGhhc2hfYmFzZSBpbnN0ZWFkIG9mIGhhc2gsIGJ1dCBjYW4gaGF2ZSBubworCSMgcGF0aG5hbWUgKGYpIHBhcmFtZXRlcgorCW15IEB3YW50c19iYXNlID0gKAorCQkndHJlZScsCisJCSdoaXN0b3J5JywKKwkpOworCisJIyB3ZSB3YW50IHRvIGNhdGNoLCBhbW9uZyBvdGhlcnMKKwkjIFskaGFzaF9wYXJlbnRfYmFzZVs6JGZpbGVfcGFyZW50XS4uXSRoYXNoX3BhcmVudFs6JGZpbGVfbmFtZV0KKwlteSAoJHBhcmVudHJlZm5hbWUsICRwYXJlbnRwYXRobmFtZSwgJHJlZm5hbWUsICRwYXRobmFtZSkgPQorCQkoJHBhdGhfaW5mbyA9fiAvXig/OiguKz8pKD86OiguKykpP1wuXC4pPyhbXjpdKz8pPyg/OjooLispKT8kLyk7CisKKwkjIGZpcnN0LCBhbmFseXplIHRoZSAnY3VycmVudCcgcGFydAorCWlmIChkZWZpbmVkICRwYXRobmFtZSkgeworCQkjIHdlIGdvdCAiYnJhbmNoOmZpbGVuYW1lIiBvciAiYnJhbmNoOmRpci8iCisJCSMgd2UgY291bGQgdXNlIGdpdF9nZXRfdHlwZShicmFuY2g6cGF0aG5hbWUpLCBidXQ6CisJCSMgLSBpdCBuZWVkcyAkZ2l0X2RpcgorCQkjIC0gaXQgZG9lcyBhIGdpdCgpIGNhbGwKKwkJIyAtIHRoZSBjb252ZW50aW9uIG9mIHRlcm1pbmF0aW5nIGRpcmVjdG9yaWVzIHdpdGggYSBzbGFzaAorCQkjICAgbWFrZXMgaXQgc3VwZXJmbHVvdXMKKwkJIyAtIGVtYmVkZGluZyB0aGUgYWN0aW9uIGluIHRoZSBQQVRIX0lORk8gd291bGQgbWFrZSBpdCBldmVuCisJCSMgICBtb3JlIHN1cGVyZmx1b3VzCisJCSRwYXRobmFtZSA9fiBzLF4vKywsOworCQlpZiAoISRwYXRobmFtZSB8fCBzdWJzdHIoJHBhdGhuYW1lLCAtMSkgZXEgIi8iKSB7CisJCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSB8fD0gInRyZWUiOworCQkJJHBhdGhuYW1lID1+IHMsLyQsLDsKKwkJfSBlbHNlIHsKKwkJCSMgdGhlIGRlZmF1bHQgYWN0aW9uIGRlcGVuZHMgb24gd2hldGhlciB3ZSBoYWQgcGFyZW50IGluZm8KKwkJCSMgb3Igbm90CisJCQlpZiAoJHBhcmVudHJlZm5hbWUpIHsKKwkJCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSB8fD0gImJsb2JkaWZmX3BsYWluIjsKKwkJCX0gZWxzZSB7CisJCQkJJGlucHV0X3BhcmFtc3snYWN0aW9uJ30gfHw9ICJibG9iX3BsYWluIjsKKwkJCX0KKwkJfQorCQkkaW5wdXRfcGFyYW1zeydoYXNoX2Jhc2UnfSB8fD0gJHJlZm5hbWU7CisJCSRpbnB1dF9wYXJhbXN7J2ZpbGVfbmFtZSd9IHx8PSAkcGF0aG5hbWU7CisJfSBlbHNpZiAoZGVmaW5lZCAkcmVmbmFtZSkgeworCQkjIHdlIGdvdCAiYnJhbmNoIi4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gY2hvb3NlIGlmIHdlIGhhdmUgdG8KKwkJIyBzZXQgaGFzaCBvciBoYXNoX2Jhc2UuCisJCSMKKwkJIyBNb3N0IG9mIHRoZSBhY3Rpb25zIHdpdGhvdXQgYSBwYXRobmFtZSBvbmx5IHdhbnQgaGFzaCB0byBiZQorCQkjIHNldCwgZXhjZXB0IGZvciB0aGUgb25lcyBzcGVjaWZpZWQgaW4gQHdhbnRzX2Jhc2UgdGhhdCB3YW50CisJCSMgaGFzaF9iYXNlIGluc3RlYWQuIEl0IHNob3VsZCBhbHNvIGJlIG5vdGVkIHRoYXQgaGFuZC1jcmFmdGVkCisJCSMgbGlua3MgaGF2aW5nICdoaXN0b3J5JyBhcyBhbiBhY3Rpb24gYW5kIG5vIHBhdGhuYW1lIG9yIGhhc2gKKwkJIyBzZXQgd2lsbCBmYWlsLCBidXQgdGhhdCBoYXBwZW5zIHJlZ2FyZGxlc3Mgb2YgUEFUSF9JTkZPLgorCQlpZiAoZGVmaW5lZCAkcGFyZW50cmVmbmFtZSkgeworCQkJIyBpZiB0aGVyZSBpcyBwYXJlbnQgbGV0IHRoZSBkZWZhdWx0IGJlICdzaG9ydGxvZycgYWN0aW9uCisJCQkjIChmb3IgaHR0cDovL2dpdC5leGFtcGxlLmNvbS9yZXBvLmdpdC9BLi5CIGxpbmtzKTsgaWYgdGhlcmUKKwkJCSMgaXMgbm8gcGFyZW50LCBkaXNwYXRjaCB3aWxsIGRldGVjdCB0eXBlIG9mIG9iamVjdCBhbmQgc2V0CisJCQkjIGFjdGlvbiBhcHByb3ByaWF0ZWx5IGlmIHJlcXVpcmVkIChpZiBhY3Rpb24gaXMgbm90IHNldCkKKwkJCSRpbnB1dF9wYXJhbXN7J2FjdGlvbid9IHx8PSAic2hvcnRsb2ciOworCQl9CisJCWlmICgkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSAmJgorCQkgICAgZ3JlcCB7ICRfIGVxICRpbnB1dF9wYXJhbXN7J2FjdGlvbid9IH0gQHdhbnRzX2Jhc2UpIHsKKwkJCSRpbnB1dF9wYXJhbXN7J2hhc2hfYmFzZSd9IHx8PSAkcmVmbmFtZTsKKwkJfSBlbHNlIHsKKwkJCSRpbnB1dF9wYXJhbXN7J2hhc2gnfSB8fD0gJHJlZm5hbWU7CisJCX0KKwl9CisKKwkjIG5leHQsIGhhbmRsZSB0aGUgJ3BhcmVudCcgcGFydCwgaWYgcHJlc2VudAorCWlmIChkZWZpbmVkICRwYXJlbnRyZWZuYW1lKSB7CisJCSMgYSBtaXNzaW5nIHBhdGhzcGVjIGRlZmF1bHRzIHRvIHRoZSAnY3VycmVudCcgZmlsZW5hbWUsIGFsbG93aW5nIGUuZy4KKwkJIyBzb21lcHJvamVjdC9ibG9iZGlmZi9vbGRyZXYuLm5ld3JldjovZmlsZW5hbWUKKwkJaWYgKCRwYXJlbnRwYXRobmFtZSkgeworCQkJJHBhcmVudHBhdGhuYW1lID1+IHMsXi8rLCw7CisJCQkkcGFyZW50cGF0aG5hbWUgPX4gcywvJCwsOworCQkJJGlucHV0X3BhcmFtc3snZmlsZV9wYXJlbnQnfSB8fD0gJHBhcmVudHBhdGhuYW1lOworCQl9IGVsc2UgeworCQkJJGlucHV0X3BhcmFtc3snZmlsZV9wYXJlbnQnfSB8fD0gJGlucHV0X3BhcmFtc3snZmlsZV9uYW1lJ307CisJCX0KKwkJIyB3ZSBhc3N1bWUgdGhhdCBoYXNoX3BhcmVudF9iYXNlIGlzIHdhbnRlZCBpZiBhIHBhdGggd2FzIHNwZWNpZmllZCwKKwkJIyBvciBpZiB0aGUgYWN0aW9uIHdhbnRzIGhhc2hfYmFzZSBpbnN0ZWFkIG9mIGhhc2gKKwkJaWYgKGRlZmluZWQgJGlucHV0X3BhcmFtc3snZmlsZV9wYXJlbnQnfSB8fAorCQkJZ3JlcCB7ICRfIGVxICRpbnB1dF9wYXJhbXN7J2FjdGlvbid9IH0gQHdhbnRzX2Jhc2UpIHsKKwkJCSRpbnB1dF9wYXJhbXN7J2hhc2hfcGFyZW50X2Jhc2UnfSB8fD0gJHBhcmVudHJlZm5hbWU7CisJCX0gZWxzZSB7CisJCQkkaW5wdXRfcGFyYW1zeydoYXNoX3BhcmVudCd9IHx8PSAkcGFyZW50cmVmbmFtZTsKKwkJfQorCX0KKworCSMgZm9yIHRoZSBzbmFwc2hvdCBhY3Rpb24sIHdlIGFsbG93IFVSTHMgaW4gdGhlIGZvcm0KKwkjICRwcm9qZWN0L3NuYXBzaG90LyRoYXNoLmV4dAorCSMgd2hlcmUgLmV4dCBkZXRlcm1pbmVzIHRoZSBzbmFwc2hvdCBhbmQgZ2V0cyByZW1vdmVkIGZyb20gdGhlCisJIyBwYXNzZWQgJHJlZm5hbWUgdG8gcHJvdmlkZSB0aGUgJGhhc2guCisJIworCSMgVG8gYmUgYWJsZSB0byB0ZWxsIHRoYXQgJHJlZm5hbWUgaW5jbHVkZXMgdGhlIGZvcm1hdCBleHRlbnNpb24sIHdlCisJIyByZXF1aXJlIHRoZSBmb2xsb3dpbmcgdHdvIGNvbmRpdGlvbnMgdG8gYmUgc2F0aXNmaWVkOgorCSMgLSB0aGUgaGFzaCBpbnB1dCBwYXJhbWV0ZXIgTVVTVCBoYXZlIGJlZW4gc2V0IGZyb20gdGhlICRyZWZuYW1lIHBhcnQKKwkjICAgb2YgdGhlIFVSTCAoaS5lLiB0aGV5IG11c3QgYmUgZXF1YWwpCisJIyAtIHRoZSBzbmFwc2hvdCBmb3JtYXQgTVVTVCBOT1QgaGF2ZSBiZWVuIGRlZmluZWQgYWxyZWFkeSAoZS5nLiBmcm9tCisJIyAgIENHSSBwYXJhbWV0ZXIgc2YpCisJIyBJdCdzIGFsc28gdXNlbGVzcyB0byB0cnkgYW55IG1hdGNoaW5nIHVubGVzcyAkcmVmbmFtZSBoYXMgYSBkb3QsCisJIyBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28KKwlpZiAoZGVmaW5lZCAkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSAmJgorCQkkaW5wdXRfcGFyYW1zeydhY3Rpb24nfSBlcSAnc25hcHNob3QnICYmCisJCWRlZmluZWQgJHJlZm5hbWUgJiYgaW5kZXgoJHJlZm5hbWUsICcuJykgIT0gLTEgJiYKKwkJJHJlZm5hbWUgZXEgJGlucHV0X3BhcmFtc3snaGFzaCd9ICYmCisJCSFkZWZpbmVkICRpbnB1dF9wYXJhbXN7J3NuYXBzaG90X2Zvcm1hdCd9KSB7CisJCSMgV2UgbG9vcCBvdmVyIHRoZSBrbm93biBzbmFwc2hvdCBmb3JtYXRzLCBjaGVja2luZyBmb3IKKwkJIyBleHRlbnNpb25zLiBBbGxvd2VkIGV4dGVuc2lvbnMgYXJlIGJvdGggdGhlIGRlZmluZWQgc3VmZml4CisJCSMgKHdoaWNoIGluY2x1ZGVzIHRoZSBpbml0aWFsIGRvdCBhbHJlYWR5KSBhbmQgdGhlIHNuYXBzaG90CisJCSMgZm9ybWF0IGtleSBpdHNlbGYsIHdpdGggYSBwcmVwZW5kZWQgZG90CisJCXdoaWxlIChteSAoJGZtdCwgJG9wdCkgPSBlYWNoICVrbm93bl9zbmFwc2hvdF9mb3JtYXRzKSB7CisJCQlteSAkaGFzaCA9ICRyZWZuYW1lOworCQkJdW5sZXNzICgkaGFzaCA9fiBzLyhcUSRvcHQtPnsnc3VmZml4J31cRXxcUS4kZm10XEUpJC8vKSB7CisJCQkJbmV4dDsKKwkJCX0KKwkJCW15ICRzZnggPSAkMTsKKwkJCSMgYSB2YWxpZCBzdWZmaXggd2FzIGZvdW5kLCBzbyBzZXQgdGhlIHNuYXBzaG90IGZvcm1hdAorCQkJIyBhbmQgcmVzZXQgdGhlIGhhc2ggcGFyYW1ldGVyCisJCQkkaW5wdXRfcGFyYW1zeydzbmFwc2hvdF9mb3JtYXQnfSA9ICRmbXQ7CisJCQkkaW5wdXRfcGFyYW1zeydoYXNoJ30gPSAkaGFzaDsKKwkJCSMgd2UgYWxzbyBzZXQgdGhlIGZvcm1hdCBzdWZmaXggdG8gdGhlIG9uZSByZXF1ZXN0ZWQKKwkJCSMgaW4gdGhlIFVSTDogdGhpcyB3YXkgYSByZXF1ZXN0IGZvciBlLmcuIC50Z3ogcmV0dXJucworCQkJIyBhIC50Z3ogaW5zdGVhZCBvZiBhIC50YXIuZ3oKKwkJCSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmbXR9eydzdWZmaXgnfSA9ICRzZng7CisJCQlsYXN0OworCQl9CisJfQorfQorCitvdXIgKCRhY3Rpb24sICRwcm9qZWN0LCAkZmlsZV9uYW1lLCAkZmlsZV9wYXJlbnQsICRoYXNoLCAkaGFzaF9wYXJlbnQsICRoYXNoX2Jhc2UsCisgICAgICRoYXNoX3BhcmVudF9iYXNlLCBAZXh0cmFfb3B0aW9ucywgJHBhZ2UsICRzZWFyY2h0eXBlLCAkc2VhcmNoX3VzZV9yZWdleHAsCisgICAgICRzZWFyY2h0ZXh0LCAkc2VhcmNoX3JlZ2V4cCwgJHByb2plY3RfZmlsdGVyKTsKK3N1YiBldmFsdWF0ZV9hbmRfdmFsaWRhdGVfcGFyYW1zIHsKKwlvdXIgJGFjdGlvbiA9ICRpbnB1dF9wYXJhbXN7J2FjdGlvbid9OworCWlmIChkZWZpbmVkICRhY3Rpb24pIHsKKwkJaWYgKCFpc192YWxpZF9hY3Rpb24oJGFjdGlvbikpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIGFjdGlvbiBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCSMgcGFyYW1ldGVycyB3aGljaCBhcmUgcGF0aG5hbWVzCisJb3VyICRwcm9qZWN0ID0gJGlucHV0X3BhcmFtc3sncHJvamVjdCd9OworCWlmIChkZWZpbmVkICRwcm9qZWN0KSB7CisJCWlmICghaXNfdmFsaWRfcHJvamVjdCgkcHJvamVjdCkpIHsKKwkJCXVuZGVmICRwcm9qZWN0OworCQkJZGllX2Vycm9yKDQwNCwgIk5vIHN1Y2ggcHJvamVjdCIpOworCQl9CisJfQorCisJb3VyICRwcm9qZWN0X2ZpbHRlciA9ICRpbnB1dF9wYXJhbXN7J3Byb2plY3RfZmlsdGVyJ307CisJaWYgKGRlZmluZWQgJHByb2plY3RfZmlsdGVyKSB7CisJCWlmICghaXNfdmFsaWRfcGF0aG5hbWUoJHByb2plY3RfZmlsdGVyKSkgeworCQkJZGllX2Vycm9yKDQwNCwgIkludmFsaWQgcHJvamVjdF9maWx0ZXIgcGFyYW1ldGVyIik7CisJCX0KKwl9CisKKwlvdXIgJGZpbGVfbmFtZSA9ICRpbnB1dF9wYXJhbXN7J2ZpbGVfbmFtZSd9OworCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJaWYgKCFpc192YWxpZF9wYXRobmFtZSgkZmlsZV9uYW1lKSkgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgZmlsZSBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCW91ciAkZmlsZV9wYXJlbnQgPSAkaW5wdXRfcGFyYW1zeydmaWxlX3BhcmVudCd9OworCWlmIChkZWZpbmVkICRmaWxlX3BhcmVudCkgeworCQlpZiAoIWlzX3ZhbGlkX3BhdGhuYW1lKCRmaWxlX3BhcmVudCkpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIGZpbGUgcGFyZW50IHBhcmFtZXRlciIpOworCQl9CisJfQorCisJIyBwYXJhbWV0ZXJzIHdoaWNoIGFyZSByZWZuYW1lcworCW91ciAkaGFzaCA9ICRpbnB1dF9wYXJhbXN7J2hhc2gnfTsKKwlpZiAoZGVmaW5lZCAkaGFzaCkgeworCQlpZiAoIWlzX3ZhbGlkX3JlZm5hbWUoJGhhc2gpKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBoYXNoIHBhcmFtZXRlciIpOworCQl9CisJfQorCisJb3VyICRoYXNoX3BhcmVudCA9ICRpbnB1dF9wYXJhbXN7J2hhc2hfcGFyZW50J307CisJaWYgKGRlZmluZWQgJGhhc2hfcGFyZW50KSB7CisJCWlmICghaXNfdmFsaWRfcmVmbmFtZSgkaGFzaF9wYXJlbnQpKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBoYXNoIHBhcmVudCBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCW91ciAkaGFzaF9iYXNlID0gJGlucHV0X3BhcmFtc3snaGFzaF9iYXNlJ307CisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSkgeworCQlpZiAoIWlzX3ZhbGlkX3JlZm5hbWUoJGhhc2hfYmFzZSkpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIGhhc2ggYmFzZSBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCW91ciBAZXh0cmFfb3B0aW9ucyA9IEB7JGlucHV0X3BhcmFtc3snZXh0cmFfb3B0aW9ucyd9fTsKKwkjIEBleHRyYV9vcHRpb25zIGlzIGFsd2F5cyBkZWZpbmVkLCBzaW5jZSBpdCBjYW4gb25seSBiZSAoY3VycmVudGx5KSBzZXQgZnJvbQorCSMgQ0dJLCBhbmQgJGNnaS0+cGFyYW0oKSByZXR1cm5zIHRoZSBlbXB0eSBhcnJheSBpbiBhcnJheSBjb250ZXh0IGlmIHRoZSBwYXJhbQorCSMgaXMgbm90IHNldAorCWZvcmVhY2ggbXkgJG9wdCAoQGV4dHJhX29wdGlvbnMpIHsKKwkJaWYgKG5vdCBleGlzdHMgJGFsbG93ZWRfb3B0aW9uc3skb3B0fSkgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgb3B0aW9uIHBhcmFtZXRlciIpOworCQl9CisJCWlmIChub3QgZ3JlcCgvXiRhY3Rpb24kLywgQHskYWxsb3dlZF9vcHRpb25zeyRvcHR9fSkpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIG9wdGlvbiBwYXJhbWV0ZXIgZm9yIHRoaXMgYWN0aW9uIik7CisJCX0KKwl9CisKKwlvdXIgJGhhc2hfcGFyZW50X2Jhc2UgPSAkaW5wdXRfcGFyYW1zeydoYXNoX3BhcmVudF9iYXNlJ307CisJaWYgKGRlZmluZWQgJGhhc2hfcGFyZW50X2Jhc2UpIHsKKwkJaWYgKCFpc192YWxpZF9yZWZuYW1lKCRoYXNoX3BhcmVudF9iYXNlKSkgeworCQkJZGllX2Vycm9yKDQwMCwgIkludmFsaWQgaGFzaCBwYXJlbnQgYmFzZSBwYXJhbWV0ZXIiKTsKKwkJfQorCX0KKworCSMgb3RoZXIgcGFyYW1ldGVycworCW91ciAkcGFnZSA9ICRpbnB1dF9wYXJhbXN7J3BhZ2UnfTsKKwlpZiAoZGVmaW5lZCAkcGFnZSkgeworCQlpZiAoJHBhZ2UgPX4gbS9bXjAtOV0vKSB7CisJCQlkaWVfZXJyb3IoNDAwLCAiSW52YWxpZCBwYWdlIHBhcmFtZXRlciIpOworCQl9CisJfQorCisJb3VyICRzZWFyY2h0eXBlID0gJGlucHV0X3BhcmFtc3snc2VhcmNodHlwZSd9OworCWlmIChkZWZpbmVkICRzZWFyY2h0eXBlKSB7CisJCWlmICgkc2VhcmNodHlwZSA9fiBtL1teYS16XS8pIHsKKwkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIHNlYXJjaHR5cGUgcGFyYW1ldGVyIik7CisJCX0KKwl9CisKKwlvdXIgJHNlYXJjaF91c2VfcmVnZXhwID0gJGlucHV0X3BhcmFtc3snc2VhcmNoX3VzZV9yZWdleHAnfTsKKworCW91ciAkc2VhcmNodGV4dCA9ICRpbnB1dF9wYXJhbXN7J3NlYXJjaHRleHQnfTsKKwlvdXIgJHNlYXJjaF9yZWdleHAgPSB1bmRlZjsKKwlpZiAoZGVmaW5lZCAkc2VhcmNodGV4dCkgeworCQlpZiAobGVuZ3RoKCRzZWFyY2h0ZXh0KSA8IDIpIHsKKwkJCWRpZV9lcnJvcig0MDMsICJBdCBsZWFzdCB0d28gY2hhcmFjdGVycyBhcmUgcmVxdWlyZWQgZm9yIHNlYXJjaCBwYXJhbWV0ZXIiKTsKKwkJfQorCQlpZiAoJHNlYXJjaF91c2VfcmVnZXhwKSB7CisJCQkkc2VhcmNoX3JlZ2V4cCA9ICRzZWFyY2h0ZXh0OworCQkJaWYgKCFldmFsIHsgcXIvJHNlYXJjaF9yZWdleHAvOyAxOyB9KSB7CisJCQkJKG15ICRlcnJvciA9ICRAKSA9fiBzLyBhdCBcUysgbGluZSBcZCsuKlxuPy8vOworCQkJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIHNlYXJjaCByZWdleHAgJyRzZWFyY2hfcmVnZXhwJyIsCisJCQkJICAgICAgICAgIGVzY19odG1sKCRlcnJvcikpOworCQkJfQorCQl9IGVsc2UgeworCQkJJHNlYXJjaF9yZWdleHAgPSBxdW90ZW1ldGEgJHNlYXJjaHRleHQ7CisJCX0KKwl9Cit9CisKKyMgcGF0aCB0byB0aGUgY3VycmVudCBnaXQgcmVwb3NpdG9yeQorb3VyICRnaXRfZGlyOworc3ViIGV2YWx1YXRlX2dpdF9kaXIgeworCW91ciAkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHByb2plY3QiIGlmICRwcm9qZWN0OworfQorCitvdXIgKEBzbmFwc2hvdF9mbXRzLCAkZ2l0X2F2YXRhciwgQGV4dHJhX2JyYW5jaF9yZWZzKTsKK3N1YiBjb25maWd1cmVfZ2l0d2ViX2ZlYXR1cmVzIHsKKwkjIGxpc3Qgb2Ygc3VwcG9ydGVkIHNuYXBzaG90IGZvcm1hdHMKKwlvdXIgQHNuYXBzaG90X2ZtdHMgPSBnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ3NuYXBzaG90Jyk7CisJQHNuYXBzaG90X2ZtdHMgPSBmaWx0ZXJfc25hcHNob3RfZm10cyhAc25hcHNob3RfZm10cyk7CisKKwkjIGNoZWNrIHRoYXQgdGhlIGF2YXRhciBmZWF0dXJlIGlzIHNldCB0byBhIGtub3duIHByb3ZpZGVyIG5hbWUsCisJIyBhbmQgZm9yIGVhY2ggcHJvdmlkZXIgY2hlY2sgaWYgdGhlIGRlcGVuZGVuY2llcyBhcmUgc2F0aXNmaWVkLgorCSMgaWYgdGhlIHByb3ZpZGVyIG5hbWUgaXMgaW52YWxpZCBvciB0aGUgZGVwZW5kZW5jaWVzIGFyZSBub3QgbWV0LAorCSMgcmVzZXQgJGdpdF9hdmF0YXIgdG8gdGhlIGVtcHR5IHN0cmluZy4KKwlvdXIgKCRnaXRfYXZhdGFyKSA9IGdpdHdlYl9nZXRfZmVhdHVyZSgnYXZhdGFyJyk7CisJaWYgKCRnaXRfYXZhdGFyIGVxICdncmF2YXRhcicpIHsKKwkJJGdpdF9hdmF0YXIgPSAnJyB1bmxlc3MgKGV2YWwgeyByZXF1aXJlIERpZ2VzdDo6TUQ1OyAxOyB9KTsKKwl9IGVsc2lmICgkZ2l0X2F2YXRhciBlcSAncGljb24nKSB7CisJCSMgbm8gZGVwZW5kZW5jaWVzCisJfSBlbHNlIHsKKwkJJGdpdF9hdmF0YXIgPSAnJzsKKwl9CisKKwlvdXIgQGV4dHJhX2JyYW5jaF9yZWZzID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdleHRyYS1icmFuY2gtcmVmcycpOworCUBleHRyYV9icmFuY2hfcmVmcyA9IGZpbHRlcl9hbmRfdmFsaWRhdGVfcmVmcyAoQGV4dHJhX2JyYW5jaF9yZWZzKTsKK30KKworc3ViIGdldF9icmFuY2hfcmVmcyB7CisJcmV0dXJuICgnaGVhZHMnLCBAZXh0cmFfYnJhbmNoX3JlZnMpOworfQorCisjIGN1c3RvbSBlcnJvciBoYW5kbGVyOiAnZGllIDxtZXNzYWdlPicgaXMgSW50ZXJuYWwgU2VydmVyIEVycm9yCitzdWIgaGFuZGxlX2Vycm9yc19odG1sIHsKKwlteSAkbXNnID0gc2hpZnQ7ICMgaXQgaXMgYWxyZWFkeSBIVE1MIGVzY2FwZWQKKworCSMgdG8gYXZvaWQgaW5maW5pdGUgbG9vcCB3aGVyZSBlcnJvciBvY2N1cnMgaW4gZGllX2Vycm9yLAorCSMgY2hhbmdlIGhhbmRsZXIgdG8gZGVmYXVsdCBoYW5kbGVyLCBkaXNhYmxpbmcgaGFuZGxlX2Vycm9yc19odG1sCisJc2V0X21lc3NhZ2UoIkVycm9yIG9jY3VycmVkIHdoZW4gaW5zaWRlIGRpZV9lcnJvcjpcbiRtc2ciKTsKKworCSMgeW91IGNhbm5vdCBqdW1wIG91dCBvZiBkaWVfZXJyb3Igd2hlbiBjYWxsZWQgYXMgZXJyb3IgaGFuZGxlcjsKKwkjIHRoZSBzdWJyb3V0aW5lIHNldCB2aWEgQ0dJOjpDYXJwOjpzZXRfbWVzc2FnZSBpcyBjYWxsZWQgX2FmdGVyXworCSMgSFRUUCBoZWFkZXJzIGFyZSBhbHJlYWR5IHdyaXR0ZW4sIHNvIGl0IGNhbm5vdCB3cml0ZSB0aGVtIGl0c2VsZgorCWRpZV9lcnJvcih1bmRlZiwgdW5kZWYsICRtc2csIC1lcnJvcl9oYW5kbGVyID0+IDEsIC1ub19odHRwX2hlYWRlciA9PiAxKTsKK30KK3NldF9tZXNzYWdlKFwmaGFuZGxlX2Vycm9yc19odG1sKTsKKworIyBkaXNwYXRjaAorc3ViIGRpc3BhdGNoIHsKKwlpZiAoIWRlZmluZWQgJGFjdGlvbikgeworCQlpZiAoZGVmaW5lZCAkaGFzaCkgeworCQkJJGFjdGlvbiA9IGdpdF9nZXRfdHlwZSgkaGFzaCk7CisJCQkkYWN0aW9uIG9yIGRpZV9lcnJvcig0MDQsICJPYmplY3QgZG9lcyBub3QgZXhpc3QiKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkaGFzaF9iYXNlICYmIGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkJJGFjdGlvbiA9IGdpdF9nZXRfdHlwZSgiJGhhc2hfYmFzZTokZmlsZV9uYW1lIik7CisJCQkkYWN0aW9uIG9yIGRpZV9lcnJvcig0MDQsICJGaWxlIG9yIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIpOworCQl9IGVsc2lmIChkZWZpbmVkICRwcm9qZWN0KSB7CisJCQkkYWN0aW9uID0gJ3N1bW1hcnknOworCQl9IGVsc2UgeworCQkJJGFjdGlvbiA9ICdwcm9qZWN0X2xpc3QnOworCQl9CisJfQorCWlmICghZGVmaW5lZCgkYWN0aW9uc3skYWN0aW9ufSkpIHsKKwkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gYWN0aW9uIik7CisJfQorCWlmICgkYWN0aW9uICF+IG0vXig/Om9wbWx8cHJvamVjdF9saXN0fHByb2plY3RfaW5kZXgpJC8gJiYKKwkgICAgISRwcm9qZWN0KSB7CisJCWRpZV9lcnJvcig0MDAsICJQcm9qZWN0IG5lZWRlZCIpOworCX0KKwkkYWN0aW9uc3skYWN0aW9ufS0+KCk7Cit9CisKK3N1YiByZXNldF90aW1lciB7CisJb3VyICR0MCA9IFsgZ2V0dGltZW9mZGF5KCkgXQorCQlpZiBkZWZpbmVkICR0MDsKKwlvdXIgJG51bWJlcl9vZl9naXRfY21kcyA9IDA7Cit9CisKK291ciAkZmlyc3RfcmVxdWVzdCA9IDE7CitzdWIgcnVuX3JlcXVlc3QgeworCXJlc2V0X3RpbWVyKCk7CisKKwlldmFsdWF0ZV91cmkoKTsKKwlpZiAoJGZpcnN0X3JlcXVlc3QpIHsKKwkJZXZhbHVhdGVfZ2l0d2ViX2NvbmZpZygpOworCQlldmFsdWF0ZV9naXRfdmVyc2lvbigpOworCX0KKwlpZiAoJHBlcl9yZXF1ZXN0X2NvbmZpZykgeworCQlpZiAocmVmKCRwZXJfcmVxdWVzdF9jb25maWcpIGVxICdDT0RFJykgeworCQkJJHBlcl9yZXF1ZXN0X2NvbmZpZy0+KCk7CisJCX0gZWxzaWYgKCEkZmlyc3RfcmVxdWVzdCkgeworCQkJZXZhbHVhdGVfZ2l0d2ViX2NvbmZpZygpOworCQl9CisJfQorCWNoZWNrX2xvYWRhdmcoKTsKKworCSMgJHByb2plY3Ryb290IGFuZCAkcHJvamVjdHNfbGlzdCBtaWdodCBiZSBzZXQgaW4gZ2l0d2ViIGNvbmZpZyBmaWxlCisJJHByb2plY3RzX2xpc3QgfHw9ICRwcm9qZWN0cm9vdDsKKworCWV2YWx1YXRlX3F1ZXJ5X3BhcmFtcygpOworCWV2YWx1YXRlX3BhdGhfaW5mbygpOworCWV2YWx1YXRlX2FuZF92YWxpZGF0ZV9wYXJhbXMoKTsKKwlldmFsdWF0ZV9naXRfZGlyKCk7CisKKwljb25maWd1cmVfZ2l0d2ViX2ZlYXR1cmVzKCk7CisKKwlkaXNwYXRjaCgpOworfQorCitvdXIgJGlzX2xhc3RfcmVxdWVzdCA9IHN1YiB7IDEgfTsKK291ciAoJHByZV9kaXNwYXRjaF9ob29rLCAkcG9zdF9kaXNwYXRjaF9ob29rLCAkcHJlX2xpc3Rlbl9ob29rKTsKK291ciAkQ0dJID0gJ0NHSSc7CitvdXIgJGNnaTsKK3N1YiBjb25maWd1cmVfYXNfZmNnaSB7CisJcmVxdWlyZSBDR0k6OkZhc3Q7CisJb3VyICRDR0kgPSAnQ0dJOjpGYXN0JzsKKworCW15ICRyZXF1ZXN0X251bWJlciA9IDA7CisJIyBsZXQgZWFjaCBjaGlsZCBzZXJ2aWNlIDEwMCByZXF1ZXN0cworCW91ciAkaXNfbGFzdF9yZXF1ZXN0ID0gc3ViIHsgKyskcmVxdWVzdF9udW1iZXIgPiAxMDAgfTsKK30KK3N1YiBldmFsdWF0ZV9hcmd2IHsKKwlteSAkc2NyaXB0X25hbWUgPSAkRU5WeydTQ1JJUFRfTkFNRSd9IHx8ICRFTlZ7J1NDUklQVF9GSUxFTkFNRSd9IHx8IF9fRklMRV9fOworCWNvbmZpZ3VyZV9hc19mY2dpKCkKKwkJaWYgJHNjcmlwdF9uYW1lID1+IC9cLmZjZ2kkLzsKKworCXJldHVybiB1bmxlc3MgKEBBUkdWKTsKKworCXJlcXVpcmUgR2V0b3B0OjpMb25nOworCUdldG9wdDo6TG9uZzo6R2V0T3B0aW9ucygKKwkJJ2Zhc3RjZ2l8ZmNnaXxmJyA9PiBcJmNvbmZpZ3VyZV9hc19mY2dpLAorCQknbnByb2N8bj1pJyA9PiBzdWIgeworCQkJbXkgKCRhcmcsICR2YWwpID0gQF87CisJCQlyZXR1cm4gdW5sZXNzIGV2YWwgeyByZXF1aXJlIEZDR0k6OlByb2NNYW5hZ2VyOyAxOyB9OworCQkJbXkgJHByb2NfbWFuYWdlciA9IEZDR0k6OlByb2NNYW5hZ2VyLT5uZXcoeworCQkJCW5fcHJvY2Vzc2VzID0+ICR2YWwsCisJCQl9KTsKKwkJCW91ciAkcHJlX2xpc3Rlbl9ob29rICAgID0gc3ViIHsgJHByb2NfbWFuYWdlci0+cG1fbWFuYWdlKCkgICAgICAgIH07CisJCQlvdXIgJHByZV9kaXNwYXRjaF9ob29rICA9IHN1YiB7ICRwcm9jX21hbmFnZXItPnBtX3ByZV9kaXNwYXRjaCgpICB9OworCQkJb3VyICRwb3N0X2Rpc3BhdGNoX2hvb2sgPSBzdWIgeyAkcHJvY19tYW5hZ2VyLT5wbV9wb3N0X2Rpc3BhdGNoKCkgfTsKKwkJfSwKKwkpOworfQorCitzdWIgcnVuIHsKKwlldmFsdWF0ZV9hcmd2KCk7CisKKwkkZmlyc3RfcmVxdWVzdCA9IDE7CisJJHByZV9saXN0ZW5faG9vay0+KCkKKwkJaWYgJHByZV9saXN0ZW5faG9vazsKKworIFJFUVVFU1Q6CisJd2hpbGUgKCRjZ2kgPSAkQ0dJLT5uZXcoKSkgeworCQkkcHJlX2Rpc3BhdGNoX2hvb2stPigpCisJCQlpZiAkcHJlX2Rpc3BhdGNoX2hvb2s7CisKKwkJcnVuX3JlcXVlc3QoKTsKKworCQkkcG9zdF9kaXNwYXRjaF9ob29rLT4oKQorCQkJaWYgJHBvc3RfZGlzcGF0Y2hfaG9vazsKKwkJJGZpcnN0X3JlcXVlc3QgPSAwOworCisJCWxhc3QgUkVRVUVTVCBpZiAoJGlzX2xhc3RfcmVxdWVzdC0+KCkpOworCX0KKworIERPTkVfR0lUV0VCOgorCTE7Cit9CisKK3J1bigpOworCitpZiAoZGVmaW5lZCBjYWxsZXIpIHsKKwkjIHdyYXBwZWQgaW4gYSBzdWJyb3V0aW5lIHByb2Nlc3NpbmcgcmVxdWVzdHMsCisJIyBlLmcuIG1vZF9wZXJsIHdpdGggTW9kUGVybDo6UmVnaXN0cnksIG9yIFBTR0kgd2l0aCBQbGFjazo6QXBwOjpXcmFwQ0dJCisJcmV0dXJuOworfSBlbHNlIHsKKwkjIHB1cmUgQ0dJIHNjcmlwdCwgc2VydmluZyBzaW5nbGUgcmVxdWVzdAorCWV4aXQ7Cit9CisKKyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMjIGFjdGlvbiBsaW5rcworCisjIHBvc3NpYmxlIHZhbHVlcyBvZiBleHRyYSBvcHRpb25zCisjIC1mdWxsID0+IDB8MSAgICAgIC0gdXNlIGFic29sdXRlL2Z1bGwgVVJMICgkbXlfdXJpLyRteV91cmwgYXMgYmFzZSkKKyMgLXJlcGxheSA9PiAxICAgICAgLSBzdGFydCBmcm9tIGEgY3VycmVudCB2aWV3IChyZXBsYXkgd2l0aCBtb2RpZmljYXRpb25zKQorIyAtcGF0aF9pbmZvID0+IDB8MSAtIGRvbid0IHVzZS91c2UgcGF0aF9pbmZvIFVSTCAoaWYgcG9zc2libGUpCisjIC1hbmNob3IgPT4gQU5DSE9SIC0gYWRkICNBTkNIT1IgdG8gZW5kIG9mIFVSTCwgaW1wbGllcyAtcmVwbGF5IGlmIHVzZWQgYWxvbmUKK3N1YiBocmVmIHsKKwlteSAlcGFyYW1zID0gQF87CisJIyBkZWZhdWx0IGlzIHRvIHVzZSAtYWJzb2x1dGUgdXJsKCkgaS5lLiAkbXlfdXJpCisJbXkgJGhyZWYgPSAkcGFyYW1zey1mdWxsfSA/ICRteV91cmwgOiAkbXlfdXJpOworCisJIyBpbXBsaWNpdCAtcmVwbGF5LCBtdXN0IGJlIGZpcnN0IG9mIGltcGxpY2l0IHBhcmFtcworCSRwYXJhbXN7LXJlcGxheX0gPSAxIGlmIChrZXlzICVwYXJhbXMgPT0gMSAmJiAkcGFyYW1zey1hbmNob3J9KTsKKworCSRwYXJhbXN7J3Byb2plY3QnfSA9ICRwcm9qZWN0IHVubGVzcyBleGlzdHMgJHBhcmFtc3sncHJvamVjdCd9OworCisJaWYgKCRwYXJhbXN7LXJlcGxheX0pIHsKKwkJd2hpbGUgKG15ICgkbmFtZSwgJHN5bWJvbCkgPSBlYWNoICVjZ2lfcGFyYW1fbWFwcGluZykgeworCQkJaWYgKCFleGlzdHMgJHBhcmFtc3skbmFtZX0pIHsKKwkJCQkkcGFyYW1zeyRuYW1lfSA9ICRpbnB1dF9wYXJhbXN7JG5hbWV9OworCQkJfQorCQl9CisJfQorCisJbXkgJHVzZV9wYXRoaW5mbyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdwYXRoaW5mbycpOworCWlmIChkZWZpbmVkICRwYXJhbXN7J3Byb2plY3QnfSAmJgorCSAgICAoZXhpc3RzICRwYXJhbXN7LXBhdGhfaW5mb30gPyAkcGFyYW1zey1wYXRoX2luZm99IDogJHVzZV9wYXRoaW5mbykpIHsKKwkJIyB0cnkgdG8gcHV0IGFzIG1hbnkgcGFyYW1ldGVycyBhcyBwb3NzaWJsZSBpbiBQQVRIX0lORk86CisJCSMgICAtIHByb2plY3QgbmFtZQorCQkjICAgLSBhY3Rpb24KKwkJIyAgIC0gaGFzaF9wYXJlbnQgb3IgaGFzaF9wYXJlbnRfYmFzZTovZmlsZV9wYXJlbnQKKwkJIyAgIC0gaGFzaCBvciBoYXNoX2Jhc2U6L2ZpbGVuYW1lCisJCSMgICAtIHRoZSBzbmFwc2hvdF9mb3JtYXQgYXMgYW4gYXBwcm9wcmlhdGUgc3VmZml4CisKKwkJIyBXaGVuIHRoZSBzY3JpcHQgaXMgdGhlIHJvb3QgRGlyZWN0b3J5SW5kZXggZm9yIHRoZSBkb21haW4sCisJCSMgJGhyZWYgaGVyZSB3b3VsZCBiZSBzb21ldGhpbmcgbGlrZSBodHRwOi8vZ2l0d2ViLmV4YW1wbGUuY29tLworCQkjIFRodXMsIHdlIHN0cmlwIGFueSB0cmFpbGluZyAvIGZyb20gJGhyZWYsIHRvIHNwYXJlIHVzIGRvdWJsZQorCQkjIHNsYXNoZXMgaW4gdGhlIGZpbmFsIFVSTAorCQkkaHJlZiA9fiBzLC8kLCw7CisKKwkJIyBUaGVuIGFkZCB0aGUgcHJvamVjdCBuYW1lLCBpZiBwcmVzZW50CisJCSRocmVmIC49ICIvIi5lc2NfcGF0aF9pbmZvKCRwYXJhbXN7J3Byb2plY3QnfSk7CisJCWRlbGV0ZSAkcGFyYW1zeydwcm9qZWN0J307CisKKwkJIyBzaW5jZSB3ZSBkZXN0cnVjdGl2ZWx5IGFic29yYiBwYXJhbWV0ZXJzLCB3ZSBrZWVwIHRoaXMKKwkJIyBib29sZWFuIHRoYXQgcmVtZW1iZXJzIGlmIHdlJ3JlIGhhbmRsaW5nIGEgc25hcHNob3QKKwkJbXkgJGlzX3NuYXBzaG90ID0gJHBhcmFtc3snYWN0aW9uJ30gZXEgJ3NuYXBzaG90JzsKKworCQkjIFN1bW1hcnkganVzdCB1c2VzIHRoZSBwcm9qZWN0IHBhdGggVVJMLCBhbnkgb3RoZXIgYWN0aW9uIGlzCisJCSMgYWRkZWQgdG8gdGhlIFVSTAorCQlpZiAoZGVmaW5lZCAkcGFyYW1zeydhY3Rpb24nfSkgeworCQkJJGhyZWYgLj0gIi8iLmVzY19wYXRoX2luZm8oJHBhcmFtc3snYWN0aW9uJ30pCisJCQkJdW5sZXNzICRwYXJhbXN7J2FjdGlvbid9IGVxICdzdW1tYXJ5JzsKKwkJCWRlbGV0ZSAkcGFyYW1zeydhY3Rpb24nfTsKKwkJfQorCisJCSMgTmV4dCwgd2UgcHV0IGhhc2hfcGFyZW50X2Jhc2U6L2ZpbGVfcGFyZW50Li5oYXNoX2Jhc2U6L2ZpbGVfbmFtZSwKKwkJIyBzdHJpcHBpbmcgbm9uZXhpc3RlbnQgb3IgdXNlbGVzcyBwaWVjZXMKKwkJJGhyZWYgLj0gIi8iIGlmICgkcGFyYW1zeydoYXNoX2Jhc2UnfSB8fCAkcGFyYW1zeydoYXNoX3BhcmVudF9iYXNlJ30KKwkJCXx8ICRwYXJhbXN7J2hhc2hfcGFyZW50J30gfHwgJHBhcmFtc3snaGFzaCd9KTsKKwkJaWYgKGRlZmluZWQgJHBhcmFtc3snaGFzaF9iYXNlJ30pIHsKKwkJCWlmIChkZWZpbmVkICRwYXJhbXN7J2hhc2hfcGFyZW50X2Jhc2UnfSkgeworCQkJCSRocmVmIC49IGVzY19wYXRoX2luZm8oJHBhcmFtc3snaGFzaF9wYXJlbnRfYmFzZSd9KTsKKwkJCQkjIHNraXAgdGhlIGZpbGVfcGFyZW50IGlmIGl0J3MgdGhlIHNhbWUgYXMgdGhlIGZpbGVfbmFtZQorCQkJCWlmIChkZWZpbmVkICRwYXJhbXN7J2ZpbGVfcGFyZW50J30pIHsKKwkJCQkJaWYgKGRlZmluZWQgJHBhcmFtc3snZmlsZV9uYW1lJ30gJiYgJHBhcmFtc3snZmlsZV9wYXJlbnQnfSBlcSAkcGFyYW1zeydmaWxlX25hbWUnfSkgeworCQkJCQkJZGVsZXRlICRwYXJhbXN7J2ZpbGVfcGFyZW50J307CisJCQkJCX0gZWxzaWYgKCRwYXJhbXN7J2ZpbGVfcGFyZW50J30gIX4gL1wuXC4vKSB7CisJCQkJCQkkaHJlZiAuPSAiOi8iLmVzY19wYXRoX2luZm8oJHBhcmFtc3snZmlsZV9wYXJlbnQnfSk7CisJCQkJCQlkZWxldGUgJHBhcmFtc3snZmlsZV9wYXJlbnQnfTsKKwkJCQkJfQorCQkJCX0KKwkJCQkkaHJlZiAuPSAiLi4iOworCQkJCWRlbGV0ZSAkcGFyYW1zeydoYXNoX3BhcmVudCd9OworCQkJCWRlbGV0ZSAkcGFyYW1zeydoYXNoX3BhcmVudF9iYXNlJ307CisJCQl9IGVsc2lmIChkZWZpbmVkICRwYXJhbXN7J2hhc2hfcGFyZW50J30pIHsKKwkJCQkkaHJlZiAuPSBlc2NfcGF0aF9pbmZvKCRwYXJhbXN7J2hhc2hfcGFyZW50J30pLiAiLi4iOworCQkJCWRlbGV0ZSAkcGFyYW1zeydoYXNoX3BhcmVudCd9OworCQkJfQorCisJCQkkaHJlZiAuPSBlc2NfcGF0aF9pbmZvKCRwYXJhbXN7J2hhc2hfYmFzZSd9KTsKKwkJCWlmIChkZWZpbmVkICRwYXJhbXN7J2ZpbGVfbmFtZSd9ICYmICRwYXJhbXN7J2ZpbGVfbmFtZSd9ICF+IC9cLlwuLykgeworCQkJCSRocmVmIC49ICI6LyIuZXNjX3BhdGhfaW5mbygkcGFyYW1zeydmaWxlX25hbWUnfSk7CisJCQkJZGVsZXRlICRwYXJhbXN7J2ZpbGVfbmFtZSd9OworCQkJfQorCQkJZGVsZXRlICRwYXJhbXN7J2hhc2gnfTsKKwkJCWRlbGV0ZSAkcGFyYW1zeydoYXNoX2Jhc2UnfTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkcGFyYW1zeydoYXNoJ30pIHsKKwkJCSRocmVmIC49IGVzY19wYXRoX2luZm8oJHBhcmFtc3snaGFzaCd9KTsKKwkJCWRlbGV0ZSAkcGFyYW1zeydoYXNoJ307CisJCX0KKworCQkjIElmIHRoZSBhY3Rpb24gd2FzIGEgc25hcHNob3QsIHdlIGNhbiBhYnNvcmIgdGhlCisJCSMgc25hcHNob3RfZm9ybWF0IHBhcmFtZXRlciB0b28KKwkJaWYgKCRpc19zbmFwc2hvdCkgeworCQkJbXkgJGZtdCA9ICRwYXJhbXN7J3NuYXBzaG90X2Zvcm1hdCd9OworCQkJIyBzbmFwc2hvdF9mb3JtYXQgc2hvdWxkIGFsd2F5cyBiZSBkZWZpbmVkIHdoZW4gaHJlZigpCisJCQkjIGlzIGNhbGxlZCwgYnV0IGp1c3QgaW4gY2FzZSBzb21lIGNvZGUgZm9yZ2V0cywgd2UKKwkJCSMgZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0CisJCQkkZm10IHx8PSAkc25hcHNob3RfZm10c1swXTsKKwkJCSRocmVmIC49ICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmbXR9eydzdWZmaXgnfTsKKwkJCWRlbGV0ZSAkcGFyYW1zeydzbmFwc2hvdF9mb3JtYXQnfTsKKwkJfQorCX0KKworCSMgbm93IGVuY29kZSB0aGUgcGFyYW1ldGVycyBleHBsaWNpdGx5CisJbXkgQHJlc3VsdCA9ICgpOworCWZvciAobXkgJGkgPSAwOyAkaSA8IEBjZ2lfcGFyYW1fbWFwcGluZzsgJGkgKz0gMikgeworCQlteSAoJG5hbWUsICRzeW1ib2wpID0gKCRjZ2lfcGFyYW1fbWFwcGluZ1skaV0sICRjZ2lfcGFyYW1fbWFwcGluZ1skaSsxXSk7CisJCWlmIChkZWZpbmVkICRwYXJhbXN7JG5hbWV9KSB7CisJCQlpZiAocmVmKCRwYXJhbXN7JG5hbWV9KSBlcSAiQVJSQVkiKSB7CisJCQkJZm9yZWFjaCBteSAkcGFyIChAeyRwYXJhbXN7JG5hbWV9fSkgeworCQkJCQlwdXNoIEByZXN1bHQsICRzeW1ib2wgLiAiPSIgLiBlc2NfcGFyYW0oJHBhcik7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlwdXNoIEByZXN1bHQsICRzeW1ib2wgLiAiPSIgLiBlc2NfcGFyYW0oJHBhcmFtc3skbmFtZX0pOworCQkJfQorCQl9CisJfQorCSRocmVmIC49ICI/IiAuIGpvaW4oJzsnLCBAcmVzdWx0KSBpZiBzY2FsYXIgQHJlc3VsdDsKKworCSMgZmluYWwgdHJhbnNmb3JtYXRpb246IHRyYWlsaW5nIHNwYWNlcyBtdXN0IGJlIGVzY2FwZWQgKFVSSS1lbmNvZGVkKQorCSRocmVmID1+IHMvKFxzKykkL0NHSTo6ZXNjYXBlKCQxKS9lOworCisJaWYgKCRwYXJhbXN7LWFuY2hvcn0pIHsKKwkJJGhyZWYgLj0gIiMiLmVzY19wYXJhbSgkcGFyYW1zey1hbmNob3J9KTsKKwl9CisKKwlyZXR1cm4gJGhyZWY7Cit9CisKKworIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyMgdmFsaWRhdGlvbiwgcXVvdGluZy91bnF1b3RpbmcgYW5kIGVzY2FwaW5nCisKK3N1YiBpc192YWxpZF9hY3Rpb24geworCW15ICRpbnB1dCA9IHNoaWZ0OworCXJldHVybiB1bmRlZiB1bmxlc3MgZXhpc3RzICRhY3Rpb25zeyRpbnB1dH07CisJcmV0dXJuIDE7Cit9CisKK3N1YiBpc192YWxpZF9wcm9qZWN0IHsKKwlteSAkaW5wdXQgPSBzaGlmdDsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkaW5wdXQ7CisJaWYgKCFpc192YWxpZF9wYXRobmFtZSgkaW5wdXQpIHx8CisJCSEoLWQgIiRwcm9qZWN0cm9vdC8kaW5wdXQiKSB8fAorCQkhY2hlY2tfZXhwb3J0X29rKCIkcHJvamVjdHJvb3QvJGlucHV0IikgfHwKKwkJKCRzdHJpY3RfZXhwb3J0ICYmICFwcm9qZWN0X2luX2xpc3QoJGlucHV0KSkpIHsKKwkJcmV0dXJuIHVuZGVmOworCX0gZWxzZSB7CisJCXJldHVybiAxOworCX0KK30KKworc3ViIGlzX3ZhbGlkX3BhdGhuYW1lIHsKKwlteSAkaW5wdXQgPSBzaGlmdDsKKworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkaW5wdXQ7CisJIyBubyAnLicgb3IgJy4uJyBhcyBlbGVtZW50cyBvZiBwYXRoLCBpLmUuIG5vICcuJyBvciAnLi4nCisJIyBhdCB0aGUgYmVnaW5uaW5nLCBhdCB0aGUgZW5kLCBhbmQgYmV0d2VlbiBzbGFzaGVzLgorCSMgYWxzbyB0aGlzIGNhdGNoZXMgZG91YmxlZCBzbGFzaGVzCisJaWYgKCRpbnB1dCA9fiBtIShefC8pKHxcLnxcLlwuKSgvfCQpISkgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCSMgbm8gbnVsbCBjaGFyYWN0ZXJzCisJaWYgKCRpbnB1dCA9fiBtIVwwISkgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCXJldHVybiAxOworfQorCitzdWIgaXNfdmFsaWRfcmVmX2Zvcm1hdCB7CisJbXkgJGlucHV0ID0gc2hpZnQ7CisKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJGlucHV0OworCSMgcmVzdHJpY3Rpb25zIG9uIHJlZiBuYW1lIGFjY29yZGluZyB0byBnaXQtY2hlY2stcmVmLWZvcm1hdAorCWlmICgkaW5wdXQgPX4gbSEoL1wufFwuXC58W1wwMDAtXDA0MFwxNzcgfl46PypcW118LyQpISkgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCXJldHVybiAxOworfQorCitzdWIgaXNfdmFsaWRfcmVmbmFtZSB7CisJbXkgJGlucHV0ID0gc2hpZnQ7CisKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJGlucHV0OworCSMgdGV4dHVhbCBoYXNoZXMgYXJlIE8uSy4KKwlpZiAoJGlucHV0ID1+IG0vXlswLTlhLWZBLUZdezQwfSQvKSB7CisJCXJldHVybiAxOworCX0KKwkjIGl0IG11c3QgYmUgY29ycmVjdCBwYXRobmFtZQorCWlzX3ZhbGlkX3BhdGhuYW1lKCRpbnB1dCkgb3IgcmV0dXJuIHVuZGVmOworCSMgY2hlY2sgZ2l0LWNoZWNrLXJlZi1mb3JtYXQgcmVzdHJpY3Rpb25zCisJaXNfdmFsaWRfcmVmX2Zvcm1hdCgkaW5wdXQpIG9yIHJldHVybiB1bmRlZjsKKwlyZXR1cm4gMTsKK30KKworIyBkZWNvZGUgc2VxdWVuY2VzIG9mIG9jdGV0cyBpbiB1dGY4IGludG8gUGVybCdzIGludGVybmFsIGZvcm0sCisjIHdoaWNoIGlzIHV0Zi04IHdpdGggdXRmOCBmbGFnIHNldCBpZiBuZWVkZWQuICBnaXR3ZWIgd3JpdGVzIG91dAorIyBpbiB1dGYtOCB0aGFua3MgdG8gImJpbm1vZGUgU1RET1VULCAnOnV0ZjgnIiBhdCBiZWdpbm5pbmcKK3N1YiB0b191dGY4IHsKKwlteSAkc3RyID0gc2hpZnQ7CisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRzdHI7CisKKwlpZiAodXRmODo6aXNfdXRmOCgkc3RyKSB8fCB1dGY4OjpkZWNvZGUoJHN0cikpIHsKKwkJcmV0dXJuICRzdHI7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGRlY29kZSgkZmFsbGJhY2tfZW5jb2RpbmcsICRzdHIsIEVuY29kZTo6RkJfREVGQVVMVCk7CisJfQorfQorCisjIHF1b3RlIHVuc2FmZSBjaGFycywgYnV0IGtlZXAgdGhlIHNsYXNoLCBldmVuIHdoZW4gaXQncyBub3QKKyMgY29ycmVjdCwgYnV0IHF1b3RlZCBzbGFzaGVzIGxvb2sgdG9vIGhvcnJpYmxlIGluIGJvb2ttYXJrcworc3ViIGVzY19wYXJhbSB7CisJbXkgJHN0ciA9IHNoaWZ0OworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCSRzdHIgPX4gcy8oW15BLVphLXowLTlcLV8ufigpXC86QCBdKykvQ0dJOjplc2NhcGUoJDEpL2VnOworCSRzdHIgPX4gcy8gL1wrL2c7CisJcmV0dXJuICRzdHI7Cit9CisKKyMgdGhlIHF1b3RpbmcgcnVsZXMgZm9yIHBhdGhfaW5mbyBmcmFnbWVudCBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50CitzdWIgZXNjX3BhdGhfaW5mbyB7CisJbXkgJHN0ciA9IHNoaWZ0OworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCisJIyBwYXRoX2luZm8gZG9lc24ndCB0cmVhdCAnKycgYXMgc3BhY2UgKHNwZWNpYWxseSksIGJ1dCAnPycgbXVzdCBiZSBlc2NhcGVkCisJJHN0ciA9fiBzLyhbXkEtWmEtejAtOVwtXy5+KCk7XC87OkAmPSArXSspL0NHSTo6ZXNjYXBlKCQxKS9lZzsKKworCXJldHVybiAkc3RyOworfQorCisjIHF1b3RlIHVuc2FmZSBjaGFycyBpbiB3aG9sZSBVUkwsIHNvIHNvbWUgY2hhcmFjdGVycyBjYW5ub3QgYmUgcXVvdGVkCitzdWIgZXNjX3VybCB7CisJbXkgJHN0ciA9IHNoaWZ0OworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCSRzdHIgPX4gcy8oW15BLVphLXowLTlcLV8ufigpO1wvOz86QCY9IF0rKS9DR0k6OmVzY2FwZSgkMSkvZWc7CisJJHN0ciA9fiBzLyAvXCsvZzsKKwlyZXR1cm4gJHN0cjsKK30KKworIyBxdW90ZSB1bnNhZmUgY2hhcmFjdGVycyBpbiBIVE1MIGF0dHJpYnV0ZXMKK3N1YiBlc2NfYXR0ciB7CisKKwkjIGZvciBYSFRNTCBjb25mb3JtYW5jZSBlc2NhcGluZyAnIicgdG8gJyZxdW90OycgaXMgbm90IGVub3VnaAorCXJldHVybiBlc2NfaHRtbChAXyk7Cit9CisKKyMgcmVwbGFjZSBpbnZhbGlkIHV0ZjggY2hhcmFjdGVyIHdpdGggU1VCU1RJVFVUSU9OIHNlcXVlbmNlCitzdWIgZXNjX2h0bWwgeworCW15ICRzdHIgPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRzdHI7CisKKwkkc3RyID0gdG9fdXRmOCgkc3RyKTsKKwkkc3RyID0gJGNnaS0+ZXNjYXBlSFRNTCgkc3RyKTsKKwlpZiAoJG9wdHN7Jy1uYnNwJ30pIHsKKwkJJHN0ciA9fiBzLyAvJm5ic3A7L2c7CisJfQorCSRzdHIgPX4gc3woW1s6Y250cmw6XV0pfCgoJDEgbmUgIlx0IikgPyBxdW90X2NlYygkMSkgOiAkMSl8ZWc7CisJcmV0dXJuICRzdHI7Cit9CisKKyMgcXVvdGUgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCBlc2NhcGUgZmlsZW5hbWUgdG8gSFRNTAorc3ViIGVzY19wYXRoIHsKKwlteSAkc3RyID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKworCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkc3RyOworCisJJHN0ciA9IHRvX3V0ZjgoJHN0cik7CisJJHN0ciA9ICRjZ2ktPmVzY2FwZUhUTUwoJHN0cik7CisJaWYgKCRvcHRzeyctbmJzcCd9KSB7CisJCSRzdHIgPX4gcy8gLyZuYnNwOy9nOworCX0KKwkkc3RyID1+IHN8KFtbOmNudHJsOl1dKXxxdW90X2NlYygkMSl8ZWc7CisJcmV0dXJuICRzdHI7Cit9CisKKyMgU2FuaXRpemUgZm9yIHVzZSBpbiBYSFRNTCArIGFwcGxpY2F0aW9uL3htbCt4aHRtICh2YWxpZCBYTUwgMS4wKQorc3ViIHNhbml0aXplIHsKKwlteSAkc3RyID0gc2hpZnQ7CisKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIGRlZmluZWQgJHN0cjsKKworCSRzdHIgPSB0b191dGY4KCRzdHIpOworCSRzdHIgPX4gc3woW1s6Y250cmw6XV0pfChpbmRleCgiXHRcblxyIiwgJDEpICE9IC0xID8gJDEgOiBxdW90X2NlYygkMSkpfGVnOworCXJldHVybiAkc3RyOworfQorCisjIE1ha2UgY29udHJvbCBjaGFyYWN0ZXJzICJwcmludGFibGUiLCB1c2luZyBjaGFyYWN0ZXIgZXNjYXBlIGNvZGVzIChDRUMpCitzdWIgcXVvdF9jZWMgeworCW15ICRjbnRybCA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisJbXkgJWVzID0gKCAjIGNoYXJhY3RlciBlc2NhcGUgY29kZXMsIGFrYSBlc2NhcGUgc2VxdWVuY2VzCisJCSJcdCIgPT4gJ1x0JywgICAjIHRhYiAgICAgICAgICAgIChIVCkKKwkJIlxuIiA9PiAnXG4nLCAgICMgbGluZSBmZWVkICAgICAgKExGKQorCQkiXHIiID0+ICdccicsICAgIyBjYXJyaWdlIHJldHVybiAoQ1IpCisJCSJcZiIgPT4gJ1xmJywgICAjIGZvcm0gZmVlZCAgICAgIChGRikKKwkJIlxiIiA9PiAnXGInLCAgICMgYmFja3NwYWNlICAgICAgKEJTKQorCQkiXGEiID0+ICdcYScsICAgIyBhbGFybSAoYmVsbCkgICAoQkVMKQorCQkiXGUiID0+ICdcZScsICAgIyBlc2NhcGUgICAgICAgICAoRVNDKQorCQkiXDAxMyIgPT4gJ1x2JywgIyB2ZXJ0aWNhbCB0YWIgICAoVlQpCisJCSJcMDAwIiA9PiAnXDAnLCAjIG51bCBjaGFyYWN0ZXIgIChOVUwpCisJKTsKKwlteSAkY2hyID0gKCAoZXhpc3RzICRlc3skY250cmx9KQorCQkgICAgPyAkZXN7JGNudHJsfQorCQkgICAgOiBzcHJpbnRmKCdcJTJ4Jywgb3JkKCRjbnRybCkpICk7CisJaWYgKCRvcHRzey1ub2h0bWx9KSB7CisJCXJldHVybiAkY2hyOworCX0gZWxzZSB7CisJCXJldHVybiAiPHNwYW4gY2xhc3M9XCJjbnRybFwiPiRjaHI8L3NwYW4+IjsKKwl9Cit9CisKKyMgQWx0ZXJuYXRpdmVseSB1c2UgdW5pY29kZSBjb250cm9sIHBpY3R1cmVzIGNvZGVwb2ludHMsCisjIFVuaWNvZGUgInByaW50YWJsZSByZXByZXNlbnRhdGlvbiIgKFBSKQorc3ViIHF1b3RfdXByIHsKKwlteSAkY250cmwgPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCisJbXkgJGNociA9IHNwcmludGYoJyYjJTA0ZDsnLCAweDI0MDArb3JkKCRjbnRybCkpOworCWlmICgkb3B0c3stbm9odG1sfSkgeworCQlyZXR1cm4gJGNocjsKKwl9IGVsc2UgeworCQlyZXR1cm4gIjxzcGFuIGNsYXNzPVwiY250cmxcIj4kY2hyPC9zcGFuPiI7CisJfQorfQorCisjIGdpdCBtYXkgcmV0dXJuIHF1b3RlZCBhbmQgZXNjYXBlZCBmaWxlbmFtZXMKK3N1YiB1bnF1b3RlIHsKKwlteSAkc3RyID0gc2hpZnQ7CisKKwlzdWIgdW5xIHsKKwkJbXkgJHNlcSA9IHNoaWZ0OworCQlteSAlZXMgPSAoICMgY2hhcmFjdGVyIGVzY2FwZSBjb2RlcywgYWthIGVzY2FwZSBzZXF1ZW5jZXMKKwkJCSd0JyA9PiAiXHQiLCAgICMgdGFiICAgICAgICAgICAgKEhULCBUQUIpCisJCQknbicgPT4gIlxuIiwgICAjIG5ld2xpbmUgICAgICAgIChOTCkKKwkJCSdyJyA9PiAiXHIiLCAgICMgcmV0dXJuICAgICAgICAgKENSKQorCQkJJ2YnID0+ICJcZiIsICAgIyBmb3JtIGZlZWQgICAgICAoRkYpCisJCQknYicgPT4gIlxiIiwgICAjIGJhY2tzcGFjZSAgICAgIChCUykKKwkJCSdhJyA9PiAiXGEiLCAgICMgYWxhcm0gKGJlbGwpICAgKEJFTCkKKwkJCSdlJyA9PiAiXGUiLCAgICMgZXNjYXBlICAgICAgICAgKEVTQykKKwkJCSd2JyA9PiAiXDAxMyIsICMgdmVydGljYWwgdGFiICAgKFZUKQorCQkpOworCisJCWlmICgkc2VxID1+IG0vXlswLTddezEsM30kLykgeworCQkJIyBvY3RhbCBjaGFyIHNlcXVlbmNlCisJCQlyZXR1cm4gY2hyKG9jdCgkc2VxKSk7CisJCX0gZWxzaWYgKGV4aXN0cyAkZXN7JHNlcX0pIHsKKwkJCSMgQyBlc2NhcGUgc2VxdWVuY2UsIGFrYSBjaGFyYWN0ZXIgZXNjYXBlIGNvZGUKKwkJCXJldHVybiAkZXN7JHNlcX07CisJCX0KKwkJIyBxdW90ZWQgb3JkaW5hcnkgY2hhcmFjdGVyCisJCXJldHVybiAkc2VxOworCX0KKworCWlmICgkc3RyID1+IG0vXiIoLiopIiQvKSB7CisJCSMgbmVlZHMgdW5xdW90aW5nCisJCSRzdHIgPSAkMTsKKwkJJHN0ciA9fiBzL1xcKFteMC03XXxbMC03XXsxLDN9KS91bnEoJDEpL2VnOworCX0KKwlyZXR1cm4gJHN0cjsKK30KKworIyBlc2NhcGUgdGFicyAoY29udmVydCB0YWJzIHRvIHNwYWNlcykKK3N1YiB1bnRhYmlmeSB7CisJbXkgJGxpbmUgPSBzaGlmdDsKKworCXdoaWxlICgobXkgJHBvcyA9IGluZGV4KCRsaW5lLCAiXHQiKSkgIT0gLTEpIHsKKwkJaWYgKG15ICRjb3VudCA9ICg4IC0gKCRwb3MgJSA4KSkpIHsKKwkJCW15ICRzcGFjZXMgPSAnICcgeCAkY291bnQ7CisJCQkkbGluZSA9fiBzL1x0LyRzcGFjZXMvOworCQl9CisJfQorCisJcmV0dXJuICRsaW5lOworfQorCitzdWIgcHJvamVjdF9pbl9saXN0IHsKKwlteSAkcHJvamVjdCA9IHNoaWZ0OworCW15IEBsaXN0ID0gZ2l0X2dldF9wcm9qZWN0c19saXN0KCk7CisJcmV0dXJuIEBsaXN0ICYmIHNjYWxhcihncmVwIHsgJF8tPnsncGF0aCd9IGVxICRwcm9qZWN0IH0gQGxpc3QpOworfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBIVE1MIGF3YXJlIHN0cmluZyBtYW5pcHVsYXRpb24KKworIyBUcnkgdG8gY2hvcCBnaXZlbiBzdHJpbmcgb24gYSB3b3JkIGJvdW5kYXJ5IGJldHdlZW4gcG9zaXRpb24KKyMgJGxlbiBhbmQgJGxlbiskYWRkX2xlbi4gSWYgdGhlcmUgaXMgbm8gd29yZCBib3VuZGFyeSB0aGVyZSwKKyMgY2hvcCBhdCAkbGVuKyRhZGRfbGVuLiBEbyBub3QgY2hvcCBpZiBjaG9wcGVkIHBhcnQgcGx1cyBlbGxpcHNpcworIyAobWFya2luZyBjaG9wcGVkIHBhcnQpIHdvdWxkIGJlIGxvbmdlciB0aGFuIGdpdmVuIHN0cmluZy4KK3N1YiBjaG9wX3N0ciB7CisJbXkgJHN0ciA9IHNoaWZ0OworCW15ICRsZW4gPSBzaGlmdDsKKwlteSAkYWRkX2xlbiA9IHNoaWZ0IHx8IDEwOworCW15ICR3aGVyZSA9IHNoaWZ0IHx8ICdyaWdodCc7ICMgJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnCisKKwkjIE1ha2Ugc3VyZSBwZXJsIGtub3dzIGl0IGlzIHV0ZjggZW5jb2RlZCBzbyB3ZSBkb24ndAorCSMgY3V0IGluIHRoZSBtaWRkbGUgb2YgYSB1dGY4IG11bHRpYnl0ZSBjaGFyLgorCSRzdHIgPSB0b191dGY4KCRzdHIpOworCisJIyBhbGxvdyBvbmx5ICRsZW4gY2hhcnMsIGJ1dCBkb24ndCBjdXQgYSB3b3JkIGlmIGl0IHdvdWxkIGZpdCBpbiAkYWRkX2xlbgorCSMgaWYgaXQgZG9lc24ndCBmaXQsIGN1dCBpdCBpZiBpdCdzIHN0aWxsIGxvbmdlciB0aGFuIHRoZSBkb3RzIHdlIHdvdWxkIGFkZAorCSMgcmVtb3ZlIGNob3BwZWQgY2hhcmFjdGVyIGVudGl0aWVzIGVudGlyZWx5CisKKwkjIHdoZW4gY2hvcHBpbmcgaW4gdGhlIG1pZGRsZSwgZGlzdHJpYnV0ZSAkbGVuIGludG8gbGVmdCBhbmQgcmlnaHQgcGFydAorCSMgcmV0dXJuIGVhcmx5IGlmIGNob3BwaW5nIHdvdWxkbid0IG1ha2Ugc3RyaW5nIHNob3J0ZXIKKwlpZiAoJHdoZXJlIGVxICdjZW50ZXInKSB7CisJCXJldHVybiAkc3RyIGlmICgkbGVuICsgNSA+PSBsZW5ndGgoJHN0cikpOyAjIGZpbGxlciBpcyBsZW5ndGggNQorCQkkbGVuID0gaW50KCRsZW4vMik7CisJfSBlbHNlIHsKKwkJcmV0dXJuICRzdHIgaWYgKCRsZW4gKyA0ID49IGxlbmd0aCgkc3RyKSk7ICMgZmlsbGVyIGlzIGxlbmd0aCA0CisJfQorCisJIyByZWdleHBzOiBlbmRpbmcgYW5kIGJlZ2lubmluZyB3aXRoIHdvcmQgcGFydCB1cCB0byAkYWRkX2xlbgorCW15ICRlbmRyZSA9IHFyLy57JGxlbn1cd3swLCRhZGRfbGVufS87CisJbXkgJGJlZ3JlID0gcXIvXHd7MCwkYWRkX2xlbn0ueyRsZW59LzsKKworCWlmICgkd2hlcmUgZXEgJ2xlZnQnKSB7CisJCSRzdHIgPX4gbS9eKC4qPykoJGJlZ3JlKSQvOworCQlteSAoJGxlYWQsICRib2R5KSA9ICgkMSwgJDIpOworCQlpZiAobGVuZ3RoKCRsZWFkKSA+IDQpIHsKKwkJCSRsZWFkID0gIiAuLi4iOworCQl9CisJCXJldHVybiAiJGxlYWQkYm9keSI7CisKKwl9IGVsc2lmICgkd2hlcmUgZXEgJ2NlbnRlcicpIHsKKwkJJHN0ciA9fiBtL14oJGVuZHJlKSguKikkLzsKKwkJbXkgKCRsZWZ0LCAkc3RyKSAgPSAoJDEsICQyKTsKKwkJJHN0ciA9fiBtL14oLio/KSgkYmVncmUpJC87CisJCW15ICgkbWlkLCAkcmlnaHQpID0gKCQxLCAkMik7CisJCWlmIChsZW5ndGgoJG1pZCkgPiA1KSB7CisJCQkkbWlkID0gIiAuLi4gIjsKKwkJfQorCQlyZXR1cm4gIiRsZWZ0JG1pZCRyaWdodCI7CisKKwl9IGVsc2UgeworCQkkc3RyID1+IG0vXigkZW5kcmUpKC4qKSQvOworCQlteSAkYm9keSA9ICQxOworCQlteSAkdGFpbCA9ICQyOworCQlpZiAobGVuZ3RoKCR0YWlsKSA+IDQpIHsKKwkJCSR0YWlsID0gIi4uLiAiOworCQl9CisJCXJldHVybiAiJGJvZHkkdGFpbCI7CisJfQorfQorCisjIHRha2VzIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyBjaG9wX3N0ciwgYnV0IGFsc28gd3JhcHMgYSA8c3Bhbj4gYXJvdW5kIHRoZQorIyByZXN1bHQgd2l0aCBhIHRpdGxlIGF0dHJpYnV0ZSBpZiBpdCBkb2VzIGdldCBjaG9wcGVkLiBBZGRpdGlvbmFsbHksIHRoZQorIyBzdHJpbmcgaXMgSFRNTC1lc2NhcGVkLgorc3ViIGNob3BfYW5kX2VzY2FwZV9zdHIgeworCW15ICgkc3RyKSA9IEBfOworCisJbXkgJGNob3BwZWQgPSBjaG9wX3N0cihAXyk7CisJJHN0ciA9IHRvX3V0ZjgoJHN0cik7CisJaWYgKCRjaG9wcGVkIGVxICRzdHIpIHsKKwkJcmV0dXJuIGVzY19odG1sKCRjaG9wcGVkKTsKKwl9IGVsc2UgeworCQkkc3RyID1+IHMvW1s6Y250cmw6XV0vPy9nOworCQlyZXR1cm4gJGNnaS0+c3Bhbih7LXRpdGxlPT4kc3RyfSwgZXNjX2h0bWwoJGNob3BwZWQpKTsKKwl9Cit9CisKKyMgSGlnaGxpZ2h0IHNlbGVjdGVkIGZyYWdtZW50cyBvZiBzdHJpbmcsIHVzaW5nIGdpdmVuIENTUyBjbGFzcywKKyMgYW5kIGVzY2FwZSBIVE1MLiAgSXQgaXMgYXNzdW1lZCB0aGF0IGZyYWdtZW50cyBkbyBub3Qgb3ZlcmxhcC4KKyMgUmVnaW9ucyBhcmUgcGFzc2VkIGFzIGxpc3Qgb2YgcGFpcnMgKGFycmF5IHJlZmVyZW5jZXMpLgorIworIyBFeGFtcGxlOiBlc2NfaHRtbF9obF9yZWdpb25zKCJmb29iYXIiLCAibWFyayIsIFsgMCwgMyBdKSByZXR1cm5zCisjICc8c3BhbiBjbGFzcz0ibWFyayI+Zm9vPC9zcGFuPmJhcicKK3N1YiBlc2NfaHRtbF9obF9yZWdpb25zIHsKKwlteSAoJHN0ciwgJGNzc19jbGFzcywgQHNlbCkgPSBAXzsKKwlteSAlb3B0cyA9IGdyZXAgeyByZWYoJF8pIG5lICdBUlJBWScgfSBAc2VsOworCUBzZWwgICAgID0gZ3JlcCB7IHJlZigkXykgZXEgJ0FSUkFZJyB9IEBzZWw7CisJcmV0dXJuIGVzY19odG1sKCRzdHIsICVvcHRzKSB1bmxlc3MgQHNlbDsKKworCW15ICRvdXQgPSAnJzsKKwlteSAkcG9zID0gMDsKKworCWZvciBteSAkcyAoQHNlbCkgeworCQlteSAoJGJlZ2luLCAkZW5kKSA9IEAkczsKKworCQkjIERvbid0IGNyZWF0ZSBlbXB0eSA8c3Bhbj4gZWxlbWVudHMuCisJCW5leHQgaWYgJGVuZCA8PSAkYmVnaW47CisKKwkJbXkgJGVzY2FwZWQgPSBlc2NfaHRtbChzdWJzdHIoJHN0ciwgJGJlZ2luLCAkZW5kIC0gJGJlZ2luKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAlb3B0cyk7CisKKwkJJG91dCAuPSBlc2NfaHRtbChzdWJzdHIoJHN0ciwgJHBvcywgJGJlZ2luIC0gJHBvcyksICVvcHRzKQorCQkJaWYgKCRiZWdpbiAtICRwb3MgPiAwKTsKKwkJJG91dCAuPSAkY2dpLT5zcGFuKHstY2xhc3MgPT4gJGNzc19jbGFzc30sICRlc2NhcGVkKTsKKworCQkkcG9zID0gJGVuZDsKKwl9CisJJG91dCAuPSBlc2NfaHRtbChzdWJzdHIoJHN0ciwgJHBvcyksICVvcHRzKQorCQlpZiAoJHBvcyA8IGxlbmd0aCgkc3RyKSk7CisKKwlyZXR1cm4gJG91dDsKK30KKworIyByZXR1cm4gcG9zaXRpb25zIG9mIGJlZ2lubmluZyBhbmQgZW5kIG9mIGVhY2ggbWF0Y2gKK3N1YiBtYXRjaHBvc19saXN0IHsKKwlteSAoJHN0ciwgJHJlZ2V4cCkgPSBAXzsKKwlyZXR1cm4gdW5sZXNzIChkZWZpbmVkICRzdHIgJiYgZGVmaW5lZCAkcmVnZXhwKTsKKworCW15IEBtYXRjaGVzOworCXdoaWxlICgkc3RyID1+IC8kcmVnZXhwL2cpIHsKKwkJcHVzaCBAbWF0Y2hlcywgWyQtWzBdLCAkK1swXV07CisJfQorCXJldHVybiBAbWF0Y2hlczsKK30KKworIyBoaWdobGlnaHQgbWF0Y2ggKGlmIGFueSksIGFuZCBlc2NhcGUgSFRNTAorc3ViIGVzY19odG1sX21hdGNoX2hsIHsKKwlteSAoJHN0ciwgJHJlZ2V4cCkgPSBAXzsKKwlyZXR1cm4gZXNjX2h0bWwoJHN0cikgdW5sZXNzIGRlZmluZWQgJHJlZ2V4cDsKKworCW15IEBtYXRjaGVzID0gbWF0Y2hwb3NfbGlzdCgkc3RyLCAkcmVnZXhwKTsKKwlyZXR1cm4gZXNjX2h0bWwoJHN0cikgdW5sZXNzIEBtYXRjaGVzOworCisJcmV0dXJuIGVzY19odG1sX2hsX3JlZ2lvbnMoJHN0ciwgJ21hdGNoJywgQG1hdGNoZXMpOworfQorCisKKyMgaGlnaGxpZ2h0IG1hdGNoIChpZiBhbnkpIG9mIHNob3J0ZW5lZCBzdHJpbmcsIGFuZCBlc2NhcGUgSFRNTAorc3ViIGVzY19odG1sX21hdGNoX2hsX2Nob3BwZWQgeworCW15ICgkc3RyLCAkY2hvcHBlZCwgJHJlZ2V4cCkgPSBAXzsKKwlyZXR1cm4gZXNjX2h0bWxfbWF0Y2hfaGwoJHN0ciwgJHJlZ2V4cCkgdW5sZXNzIGRlZmluZWQgJGNob3BwZWQ7CisKKwlteSBAbWF0Y2hlcyA9IG1hdGNocG9zX2xpc3QoJHN0ciwgJHJlZ2V4cCk7CisJcmV0dXJuIGVzY19odG1sKCRjaG9wcGVkKSB1bmxlc3MgQG1hdGNoZXM7CisKKwkjIGZpbHRlciBtYXRjaGVzIHNvIHRoYXQgd2UgbWFyayBjaG9wcGVkIHN0cmluZworCW15ICR0YWlsID0gIi4uLiAiOyAjIHNlZSBjaG9wX3N0cgorCXVubGVzcyAoJGNob3BwZWQgPX4gcy9cUSR0YWlsXEUkLy8pIHsKKwkJJHRhaWwgPSAnJzsKKwl9CisJbXkgJGNob3BfbGVuID0gbGVuZ3RoKCRjaG9wcGVkKTsKKwlteSAkdGFpbF9sZW4gPSBsZW5ndGgoJHRhaWwpOworCW15IEBmaWx0ZXJlZDsKKworCWZvciBteSAkbSAoQG1hdGNoZXMpIHsKKwkJaWYgKCRtLT5bMF0gPiAkY2hvcF9sZW4pIHsKKwkJCXB1c2ggQGZpbHRlcmVkLCBbICRjaG9wX2xlbiwgJGNob3BfbGVuICsgJHRhaWxfbGVuIF0gaWYgKCR0YWlsX2xlbiA+IDApOworCQkJbGFzdDsKKwkJfSBlbHNpZiAoJG0tPlsxXSA+ICRjaG9wX2xlbikgeworCQkJcHVzaCBAZmlsdGVyZWQsIFsgJG0tPlswXSwgJGNob3BfbGVuICsgJHRhaWxfbGVuIF07CisJCQlsYXN0OworCQl9CisJCXB1c2ggQGZpbHRlcmVkLCAkbTsKKwl9CisKKwlyZXR1cm4gZXNjX2h0bWxfaGxfcmVnaW9ucygkY2hvcHBlZCAuICR0YWlsLCAnbWF0Y2gnLCBAZmlsdGVyZWQpOworfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBmdW5jdGlvbnMgcmV0dXJuaW5nIHNob3J0IHN0cmluZ3MKKworIyBDU1MgY2xhc3MgZm9yIGdpdmVuIGFnZSB2YWx1ZSAoaW4gc2Vjb25kcykKK3N1YiBhZ2VfY2xhc3MgeworCW15ICRhZ2UgPSBzaGlmdDsKKworCWlmICghZGVmaW5lZCAkYWdlKSB7CisJCXJldHVybiAibm9hZ2UiOworCX0gZWxzaWYgKCRhZ2UgPCA2MCo2MCoyKSB7CisJCXJldHVybiAiYWdlMCI7CisJfSBlbHNpZiAoJGFnZSA8IDYwKjYwKjI0KjIpIHsKKwkJcmV0dXJuICJhZ2UxIjsKKwl9IGVsc2UgeworCQlyZXR1cm4gImFnZTIiOworCX0KK30KKworIyBjb252ZXJ0IGFnZSBpbiBzZWNvbmRzIHRvICJubiB1bml0cyBhZ28iIHN0cmluZworc3ViIGFnZV9zdHJpbmcgeworCW15ICRhZ2UgPSBzaGlmdDsKKwlteSAkYWdlX3N0cjsKKworCWlmICgkYWdlID4gNjAqNjAqMjQqMzY1KjIpIHsKKwkJJGFnZV9zdHIgPSAoaW50ICRhZ2UvNjAvNjAvMjQvMzY1KTsKKwkJJGFnZV9zdHIgLj0gIiB5ZWFycyBhZ28iOworCX0gZWxzaWYgKCRhZ2UgPiA2MCo2MCoyNCooMzY1LzEyKSoyKSB7CisJCSRhZ2Vfc3RyID0gaW50ICRhZ2UvNjAvNjAvMjQvKDM2NS8xMik7CisJCSRhZ2Vfc3RyIC49ICIgbW9udGhzIGFnbyI7CisJfSBlbHNpZiAoJGFnZSA+IDYwKjYwKjI0KjcqMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlLzYwLzYwLzI0Lzc7CisJCSRhZ2Vfc3RyIC49ICIgd2Vla3MgYWdvIjsKKwl9IGVsc2lmICgkYWdlID4gNjAqNjAqMjQqMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlLzYwLzYwLzI0OworCQkkYWdlX3N0ciAuPSAiIGRheXMgYWdvIjsKKwl9IGVsc2lmICgkYWdlID4gNjAqNjAqMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlLzYwLzYwOworCQkkYWdlX3N0ciAuPSAiIGhvdXJzIGFnbyI7CisJfSBlbHNpZiAoJGFnZSA+IDYwKjIpIHsKKwkJJGFnZV9zdHIgPSBpbnQgJGFnZS82MDsKKwkJJGFnZV9zdHIgLj0gIiBtaW4gYWdvIjsKKwl9IGVsc2lmICgkYWdlID4gMikgeworCQkkYWdlX3N0ciA9IGludCAkYWdlOworCQkkYWdlX3N0ciAuPSAiIHNlYyBhZ28iOworCX0gZWxzZSB7CisJCSRhZ2Vfc3RyIC49ICIgcmlnaHQgbm93IjsKKwl9CisJcmV0dXJuICRhZ2Vfc3RyOworfQorCit1c2UgY29uc3RhbnQgeworCVNfSUZJTlZBTElEID0+IDAwMzAwMDAsCisJU19JRkdJVExJTksgPT4gMDE2MDAwMCwKK307CisKKyMgc3VibW9kdWxlL3N1YnByb2plY3QsIGEgY29tbWl0IG9iamVjdCByZWZlcmVuY2UKK3N1YiBTX0lTR0lUTElOSyB7CisJbXkgJG1vZGUgPSBzaGlmdDsKKworCXJldHVybiAoKCRtb2RlICYgU19JRk1UKSA9PSBTX0lGR0lUTElOSykKK30KKworIyBjb252ZXJ0IGZpbGUgbW9kZSBpbiBvY3RhbCB0byBzeW1ib2xpYyBmaWxlIG1vZGUgc3RyaW5nCitzdWIgbW9kZV9zdHIgeworCW15ICRtb2RlID0gb2N0IHNoaWZ0OworCisJaWYgKFNfSVNHSVRMSU5LKCRtb2RlKSkgeworCQlyZXR1cm4gJ20tLS0tLS0tLS0nOworCX0gZWxzaWYgKFNfSVNESVIoJG1vZGUgJiBTX0lGTVQpKSB7CisJCXJldHVybiAnZHJ3eHIteHIteCc7CisJfSBlbHNpZiAoU19JU0xOSygkbW9kZSkpIHsKKwkJcmV0dXJuICdscnd4cnd4cnd4JzsKKwl9IGVsc2lmIChTX0lTUkVHKCRtb2RlKSkgeworCQkjIGdpdCBjYXJlcyBvbmx5IGFib3V0IHRoZSBleGVjdXRhYmxlIGJpdAorCQlpZiAoJG1vZGUgJiBTX0lYVVNSKSB7CisJCQlyZXR1cm4gJy1yd3hyLXhyLXgnOworCQl9IGVsc2UgeworCQkJcmV0dXJuICctcnctci0tci0tJzsKKwkJfTsKKwl9IGVsc2UgeworCQlyZXR1cm4gJy0tLS0tLS0tLS0nOworCX0KK30KKworIyBjb252ZXJ0IGZpbGUgbW9kZSBpbiBvY3RhbCB0byBmaWxlIHR5cGUgc3RyaW5nCitzdWIgZmlsZV90eXBlIHsKKwlteSAkbW9kZSA9IHNoaWZ0OworCisJaWYgKCRtb2RlICF+IG0vXlswLTddKyQvKSB7CisJCXJldHVybiAkbW9kZTsKKwl9IGVsc2UgeworCQkkbW9kZSA9IG9jdCAkbW9kZTsKKwl9CisKKwlpZiAoU19JU0dJVExJTksoJG1vZGUpKSB7CisJCXJldHVybiAic3VibW9kdWxlIjsKKwl9IGVsc2lmIChTX0lTRElSKCRtb2RlICYgU19JRk1UKSkgeworCQlyZXR1cm4gImRpcmVjdG9yeSI7CisJfSBlbHNpZiAoU19JU0xOSygkbW9kZSkpIHsKKwkJcmV0dXJuICJzeW1saW5rIjsKKwl9IGVsc2lmIChTX0lTUkVHKCRtb2RlKSkgeworCQlyZXR1cm4gImZpbGUiOworCX0gZWxzZSB7CisJCXJldHVybiAidW5rbm93biI7CisJfQorfQorCisjIGNvbnZlcnQgZmlsZSBtb2RlIGluIG9jdGFsIHRvIGZpbGUgdHlwZSBkZXNjcmlwdGlvbiBzdHJpbmcKK3N1YiBmaWxlX3R5cGVfbG9uZyB7CisJbXkgJG1vZGUgPSBzaGlmdDsKKworCWlmICgkbW9kZSAhfiBtL15bMC03XSskLykgeworCQlyZXR1cm4gJG1vZGU7CisJfSBlbHNlIHsKKwkJJG1vZGUgPSBvY3QgJG1vZGU7CisJfQorCisJaWYgKFNfSVNHSVRMSU5LKCRtb2RlKSkgeworCQlyZXR1cm4gInN1Ym1vZHVsZSI7CisJfSBlbHNpZiAoU19JU0RJUigkbW9kZSAmIFNfSUZNVCkpIHsKKwkJcmV0dXJuICJkaXJlY3RvcnkiOworCX0gZWxzaWYgKFNfSVNMTksoJG1vZGUpKSB7CisJCXJldHVybiAic3ltbGluayI7CisJfSBlbHNpZiAoU19JU1JFRygkbW9kZSkpIHsKKwkJaWYgKCRtb2RlICYgU19JWFVTUikgeworCQkJcmV0dXJuICJleGVjdXRhYmxlIjsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAiZmlsZSI7CisJCX07CisJfSBlbHNlIHsKKwkJcmV0dXJuICJ1bmtub3duIjsKKwl9Cit9CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyMgZnVuY3Rpb25zIHJldHVybmluZyBzaG9ydCBIVE1MIGZyYWdtZW50cywgb3IgdHJhbnNmb3JtaW5nIEhUTUwgZnJhZ21lbnRzCisjIyB3aGljaCBkb24ndCBiZWxvbmcgdG8gb3RoZXIgc2VjdGlvbnMKKworIyBmb3JtYXQgbGluZSBvZiBjb21taXQgbWVzc2FnZS4KK3N1YiBmb3JtYXRfbG9nX2xpbmVfaHRtbCB7CisJbXkgJGxpbmUgPSBzaGlmdDsKKworCSRsaW5lID0gZXNjX2h0bWwoJGxpbmUsIC1uYnNwPT4xKTsKKwkkbGluZSA9fiBze1xiKFswLTlhLWZBLUZdezgsNDB9KVxifXsKKwkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJvYmplY3QiLCBoYXNoPT4kMSksCisJCQkJCS1jbGFzcyA9PiAidGV4dCJ9LCAkMSk7CisJfWVnOworCisJcmV0dXJuICRsaW5lOworfQorCisjIGZvcm1hdCBtYXJrZXIgb2YgcmVmcyBwb2ludGluZyB0byBnaXZlbiBvYmplY3QKKworIyB0aGUgZGVzdGluYXRpb24gYWN0aW9uIGlzIGNob3NlbiBiYXNlZCBvbiBvYmplY3QgdHlwZSBhbmQgY3VycmVudCBjb250ZXh0OgorIyAtIGZvciBhbm5vdGF0ZWQgdGFncywgd2UgY2hvb3NlIHRoZSB0YWcgdmlldyB1bmxlc3MgaXQncyB0aGUgY3VycmVudCB2aWV3CisjICAgYWxyZWFkeSwgaW4gd2hpY2ggY2FzZSB3ZSBnbyB0byBzaG9ydGxvZyB2aWV3CisjIC0gZm9yIG90aGVyIHJlZnMsIHdlIGtlZXAgdGhlIGN1cnJlbnQgdmlldyBpZiB3ZSdyZSBpbiBoaXN0b3J5LCBzaG9ydGxvZyBvcgorIyAgIGxvZyB2aWV3LCBhbmQgc2VsZWN0IHNob3J0bG9nIG90aGVyd2lzZQorc3ViIGZvcm1hdF9yZWZfbWFya2VyIHsKKwlteSAoJHJlZnMsICRpZCkgPSBAXzsKKwlteSAkbWFya2VycyA9ICcnOworCisJaWYgKGRlZmluZWQgJHJlZnMtPnskaWR9KSB7CisJCWZvcmVhY2ggbXkgJHJlZiAoQHskcmVmcy0+eyRpZH19KSB7CisJCQkjIHRoaXMgY29kZSBleHBsb2l0cyB0aGUgZmFjdCB0aGF0IG5vbi1saWdodHdlaWdodCB0YWdzIGFyZSB0aGUKKwkJCSMgb25seSBpbmRpcmVjdCBvYmplY3RzLCBhbmQgdGhhdCB0aGV5IGFyZSB0aGUgb25seSBvYmplY3RzIGZvciB3aGljaAorCQkJIyB3ZSB3YW50IHRvIHVzZSB0YWcgaW5zdGVhZCBvZiBzaG9ydGxvZyBhcyBhY3Rpb24KKwkJCW15ICgkdHlwZSwgJG5hbWUpID0gcXcoKTsKKwkJCW15ICRpbmRpcmVjdCA9ICgkcmVmID1+IHMvXF5ce1x9JC8vKTsKKwkJCSMgZS5nLiB0YWdzL3YyLjYuMTEgb3IgaGVhZHMvbmV4dAorCQkJaWYgKCRyZWYgPX4gbSFeKC4qPylzPy8oLiopJCEpIHsKKwkJCQkkdHlwZSA9ICQxOworCQkJCSRuYW1lID0gJDI7CisJCQl9IGVsc2UgeworCQkJCSR0eXBlID0gInJlZiI7CisJCQkJJG5hbWUgPSAkcmVmOworCQkJfQorCisJCQlteSAkY2xhc3MgPSAkdHlwZTsKKwkJCSRjbGFzcyAuPSAiIGluZGlyZWN0IiBpZiAkaW5kaXJlY3Q7CisKKwkJCW15ICRkZXN0X2FjdGlvbiA9ICJzaG9ydGxvZyI7CisKKwkJCWlmICgkaW5kaXJlY3QpIHsKKwkJCQkkZGVzdF9hY3Rpb24gPSAidGFnIiB1bmxlc3MgJGFjdGlvbiBlcSAidGFnIjsKKwkJCX0gZWxzaWYgKCRhY3Rpb24gPX4gL14oaGlzdG9yeXwoc2hvcnQpP2xvZykkLykgeworCQkJCSRkZXN0X2FjdGlvbiA9ICRhY3Rpb247CisJCQl9CisKKwkJCW15ICRkZXN0ID0gIiI7CisJCQkkZGVzdCAuPSAicmVmcy8iIHVubGVzcyAkcmVmID1+IG0hXnJlZnMvITsKKwkJCSRkZXN0IC49ICRyZWY7CisKKwkJCW15ICRsaW5rID0gJGNnaS0+YSh7CisJCQkJLWhyZWYgPT4gaHJlZigKKwkJCQkJYWN0aW9uPT4kZGVzdF9hY3Rpb24sCisJCQkJCWhhc2g9PiRkZXN0CisJCQkJKX0sICRuYW1lKTsKKworCQkJJG1hcmtlcnMgLj0gIiA8c3BhbiBjbGFzcz1cIiIuZXNjX2F0dHIoJGNsYXNzKS4iXCIgdGl0bGU9XCIiLmVzY19hdHRyKCRyZWYpLiJcIj4iIC4KKwkJCQkkbGluayAuICI8L3NwYW4+IjsKKwkJfQorCX0KKworCWlmICgkbWFya2VycykgeworCQlyZXR1cm4gJyA8c3BhbiBjbGFzcz0icmVmcyI+Jy4gJG1hcmtlcnMgLiAnPC9zcGFuPic7CisJfSBlbHNlIHsKKwkJcmV0dXJuICIiOworCX0KK30KKworIyBmb3JtYXQsIHBlcmhhcHMgc2hvcnRlbmVkIGFuZCB3aXRoIG1hcmtlcnMsIHRpdGxlIGxpbmUKK3N1YiBmb3JtYXRfc3ViamVjdF9odG1sIHsKKwlteSAoJGxvbmcsICRzaG9ydCwgJGhyZWYsICRleHRyYSkgPSBAXzsKKwkkZXh0cmEgPSAnJyB1bmxlc3MgZGVmaW5lZCgkZXh0cmEpOworCisJaWYgKGxlbmd0aCgkc2hvcnQpIDwgbGVuZ3RoKCRsb25nKSkgeworCQkkbG9uZyA9fiBzL1tbOmNudHJsOl1dLz8vZzsKKwkJcmV0dXJuICRjZ2ktPmEoey1ocmVmID0+ICRocmVmLCAtY2xhc3MgPT4gImxpc3Qgc3ViamVjdCIsCisJCSAgICAgICAgICAgICAgICAtdGl0bGUgPT4gdG9fdXRmOCgkbG9uZyl9LAorCQkgICAgICAgZXNjX2h0bWwoJHNob3J0KSkgLiAkZXh0cmE7CisJfSBlbHNlIHsKKwkJcmV0dXJuICRjZ2ktPmEoey1ocmVmID0+ICRocmVmLCAtY2xhc3MgPT4gImxpc3Qgc3ViamVjdCJ9LAorCQkgICAgICAgZXNjX2h0bWwoJGxvbmcpKSAuICRleHRyYTsKKwl9Cit9CisKKyMgUmF0aGVyIHRoYW4gcmVjb21wdXRpbmcgdGhlIHVybCBmb3IgYW4gZW1haWwgbXVsdGlwbGUgdGltZXMsIHdlIGNhY2hlIGl0CisjIGFmdGVyIHRoZSBmaXJzdCBoaXQuIFRoaXMgZ2l2ZXMgYSB2aXNpYmxlIGJlbmVmaXQgaW4gdmlld3Mgd2hlcmUgdGhlIGF2YXRhcgorIyBmb3IgdGhlIHNhbWUgZW1haWwgaXMgdXNlZCByZXBlYXRlZGx5IChlLmcuIHNob3J0bG9nKS4KKyMgVGhlIGNhY2hlIGlzIHNoYXJlZCBieSBhbGwgYXZhdGFyIGVuZ2luZXMgKGN1cnJlbnRseSBncmF2YXRhciBvbmx5KSwgd2hpY2gKKyMgYXJlIGZyZWUgdG8gdXNlIGl0IGFzIHByZWZlcnJlZC4gU2luY2Ugb25seSBvbmUgYXZhdGFyIGVuZ2luZSBpcyB1c2VkIGZvciBhbnkKKyMgZ2l2ZW4gcGFnZSwgdGhlcmUncyBubyByaXNrIGZvciBjYWNoZSBjb25mbGljdHMuCitvdXIgJWF2YXRhcl9jYWNoZSA9ICgpOworCisjIENvbXB1dGUgdGhlIHBpY29uIHVybCBmb3IgYSBnaXZlbiBlbWFpbCwgYnkgdXNpbmcgdGhlIHBpY29uIHNlYXJjaCBzZXJ2aWNlIG92ZXIgYXQKKyMgaHR0cDovL3d3dy5jcy5pbmRpYW5hLmVkdS9waWNvbnMvc2VhcmNoLmh0bWwKK3N1YiBwaWNvbl91cmwgeworCW15ICRlbWFpbCA9IGxjIHNoaWZ0OworCWlmICghJGF2YXRhcl9jYWNoZXskZW1haWx9KSB7CisJCW15ICgkdXNlciwgJGRvbWFpbikgPSBzcGxpdCgnQCcsICRlbWFpbCk7CisJCSRhdmF0YXJfY2FjaGV7JGVtYWlsfSA9CisJCQkiLy93d3cuY3MuaW5kaWFuYS5lZHUvY2dpLXB1Yi9raW56bGVyL3BpY29uc2VhcmNoLmNnaS8iIC4KKwkJCSIkZG9tYWluLyR1c2VyLyIgLgorCQkJInVzZXJzK2RvbWFpbnMrdW5rbm93bi91cC9zaW5nbGUiOworCX0KKwlyZXR1cm4gJGF2YXRhcl9jYWNoZXskZW1haWx9OworfQorCisjIENvbXB1dGUgdGhlIGdyYXZhdGFyIHVybCBmb3IgYSBnaXZlbiBlbWFpbCwgaWYgaXQncyBub3QgaW4gdGhlIGNhY2hlIGFscmVhZHkuCisjIEdyYXZhdGFyIHN0b3JlcyBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBVUkwgYmVmb3JlIHRoZSBzaXplLCBzaW5jZSB0aGF0J3MgdGhlCisjIG9uZSBjb21wdXRhdGlvbmFsbHkgbW9yZSBleHBlbnNpdmUuIFRoaXMgYWxzbyBhbGxvd3MgcmV1c2Ugb2YgdGhlIGNhY2hlIGZvcgorIyBkaWZmZXJlbnQgc2l6ZXMgKGZvciB0aGlzIHBhcnRpY3VsYXIgZW5naW5lKS4KK3N1YiBncmF2YXRhcl91cmwgeworCW15ICRlbWFpbCA9IGxjIHNoaWZ0OworCW15ICRzaXplID0gc2hpZnQ7CisJJGF2YXRhcl9jYWNoZXskZW1haWx9IHx8PQorCQkiLy93d3cuZ3JhdmF0YXIuY29tL2F2YXRhci8iIC4KKwkJCURpZ2VzdDo6TUQ1OjptZDVfaGV4KCRlbWFpbCkgLiAiP3M9IjsKKwlyZXR1cm4gJGF2YXRhcl9jYWNoZXskZW1haWx9IC4gJHNpemU7Cit9CisKKyMgSW5zZXJ0IGFuIGF2YXRhciBmb3IgdGhlIGdpdmVuICRlbWFpbCBhdCB0aGUgZ2l2ZW4gJHNpemUgaWYgdGhlIGZlYXR1cmUKKyMgaXMgZW5hYmxlZC4KK3N1YiBnaXRfZ2V0X2F2YXRhciB7CisJbXkgKCRlbWFpbCwgJW9wdHMpID0gQF87CisJbXkgJHByZV93aGl0ZSAgPSAoJG9wdHN7LXBhZF9iZWZvcmV9ID8gIiZuYnNwOyIgOiAiIik7CisJbXkgJHBvc3Rfd2hpdGUgPSAoJG9wdHN7LXBhZF9hZnRlcn0gID8gIiZuYnNwOyIgOiAiIik7CisJJG9wdHN7LXNpemV9IHx8PSAnZGVmYXVsdCc7CisJbXkgJHNpemUgPSAkYXZhdGFyX3NpemV7JG9wdHN7LXNpemV9fSB8fCAkYXZhdGFyX3NpemV7J2RlZmF1bHQnfTsKKwlteSAkdXJsID0gIiI7CisJaWYgKCRnaXRfYXZhdGFyIGVxICdncmF2YXRhcicpIHsKKwkJJHVybCA9IGdyYXZhdGFyX3VybCgkZW1haWwsICRzaXplKTsKKwl9IGVsc2lmICgkZ2l0X2F2YXRhciBlcSAncGljb24nKSB7CisJCSR1cmwgPSBwaWNvbl91cmwoJGVtYWlsKTsKKwl9CisJIyBPdGhlciBwcm92aWRlcnMgY2FuIGJlIGFkZGVkIGJ5IGV4dGVuZGluZyB0aGUgaWYgY2hhaW4sIGRlZmluaW5nICR1cmwKKwkjIGFzIG5lZWRlZC4gSWYgbm8gdmFyaWFudCBwdXRzIHNvbWV0aGluZyBpbiAkdXJsLCB3ZSBhc3N1bWUgYXZhdGFycworCSMgYXJlIGNvbXBsZXRlbHkgZGlzYWJsZWQvdW5hdmFpbGFibGUuCisJaWYgKCR1cmwpIHsKKwkJcmV0dXJuICRwcmVfd2hpdGUgLgorCQkgICAgICAgIjxpbWcgd2lkdGg9XCIkc2l6ZVwiICIgLgorCQkgICAgICAgICAgICAiY2xhc3M9XCJhdmF0YXJcIiAiIC4KKwkJICAgICAgICAgICAgInNyYz1cIiIuZXNjX3VybCgkdXJsKS4iXCIgIiAuCisJCQkgICAgImFsdD1cIlwiICIgLgorCQkgICAgICAgIi8+IiAuICRwb3N0X3doaXRlOworCX0gZWxzZSB7CisJCXJldHVybiAiIjsKKwl9Cit9CisKK3N1YiBmb3JtYXRfc2VhcmNoX2F1dGhvciB7CisJbXkgKCRhdXRob3IsICRzZWFyY2h0eXBlLCAkZGlzcGxheXRleHQpID0gQF87CisJbXkgJGhhdmVfc2VhcmNoID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3NlYXJjaCcpOworCisJaWYgKCRoYXZlX3NlYXJjaCkgeworCQlteSAkcGVyZm9ybWVkID0gIiI7CisJCWlmICgkc2VhcmNodHlwZSBlcSAnYXV0aG9yJykgeworCQkJJHBlcmZvcm1lZCA9ICJhdXRob3JlZCI7CisJCX0gZWxzaWYgKCRzZWFyY2h0eXBlIGVxICdjb21taXR0ZXInKSB7CisJCQkkcGVyZm9ybWVkID0gImNvbW1pdHRlZCI7CisJCX0KKworCQlyZXR1cm4gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzZWFyY2giLCBoYXNoPT4kaGFzaCwKKwkJCQlzZWFyY2h0ZXh0PT4kYXV0aG9yLAorCQkJCXNlYXJjaHR5cGU9PiRzZWFyY2h0eXBlKSwgY2xhc3M9PiJsaXN0IiwKKwkJCQl0aXRsZT0+IlNlYXJjaCBmb3IgY29tbWl0cyAkcGVyZm9ybWVkIGJ5ICRhdXRob3IifSwKKwkJCQkkZGlzcGxheXRleHQpOworCisJfSBlbHNlIHsKKwkJcmV0dXJuICRkaXNwbGF5dGV4dDsKKwl9Cit9CisKKyMgZm9ybWF0IHRoZSBhdXRob3IgbmFtZSBvZiB0aGUgZ2l2ZW4gY29tbWl0IHdpdGggdGhlIGdpdmVuIHRhZworIyB0aGUgYXV0aG9yIG5hbWUgaXMgY2hvcHBlZCBhbmQgZXNjYXBlZCBhY2NvcmRpbmcgdG8gdGhlIG90aGVyCisjIG9wdGlvbmFsIHBhcmFtZXRlcnMgKHNlZSBjaG9wX3N0cikuCitzdWIgZm9ybWF0X2F1dGhvcl9odG1sIHsKKwlteSAkdGFnID0gc2hpZnQ7CisJbXkgJGNvID0gc2hpZnQ7CisJbXkgJGF1dGhvciA9IGNob3BfYW5kX2VzY2FwZV9zdHIoJGNvLT57J2F1dGhvcl9uYW1lJ30sIEBfKTsKKwlyZXR1cm4gIjwkdGFnIGNsYXNzPVwiYXV0aG9yXCI+IiAuCisJICAgICAgIGZvcm1hdF9zZWFyY2hfYXV0aG9yKCRjby0+eydhdXRob3JfbmFtZSd9LCAiYXV0aG9yIiwKKwkJICAgICAgIGdpdF9nZXRfYXZhdGFyKCRjby0+eydhdXRob3JfZW1haWwnfSwgLXBhZF9hZnRlciA9PiAxKSAuCisJCSAgICAgICAkYXV0aG9yKSAuCisJICAgICAgICI8LyR0YWc+IjsKK30KKworIyBmb3JtYXQgZ2l0IGRpZmYgaGVhZGVyIGxpbmUsIGkuZS4gImRpZmYgLS0oZ2l0fGNvbWJpbmVkfGNjKSAuLi4iCitzdWIgZm9ybWF0X2dpdF9kaWZmX2hlYWRlcl9saW5lIHsKKwlteSAkbGluZSA9IHNoaWZ0OworCW15ICRkaWZmaW5mbyA9IHNoaWZ0OworCW15ICgkZnJvbSwgJHRvKSA9IEBfOworCisJaWYgKCRkaWZmaW5mby0+eyducGFyZW50cyd9KSB7CisJCSMgY29tYmluZWQgZGlmZgorCQkkbGluZSA9fiBzIV4oZGlmZiAoLio/KSApIj8uKiQhJDEhOworCQlpZiAoJHRvLT57J2hyZWYnfSkgeworCQkJJGxpbmUgLj0gJGNnaS0+YSh7LWhyZWYgPT4gJHRvLT57J2hyZWYnfSwgLWNsYXNzID0+ICJwYXRoIn0sCisJCQkgICAgICAgICAgICAgICAgIGVzY19wYXRoKCR0by0+eydmaWxlJ30pKTsKKwkJfSBlbHNlIHsgIyBmaWxlIHdhcyBkZWxldGVkIChubyBocmVmKQorCQkJJGxpbmUgLj0gZXNjX3BhdGgoJHRvLT57J2ZpbGUnfSk7CisJCX0KKwl9IGVsc2UgeworCQkjICJvcmRpbmFyeSIgZGlmZgorCQkkbGluZSA9fiBzIV4oZGlmZiAoLio/KSApIj9hLy4qJCEkMSE7CisJCWlmICgkZnJvbS0+eydocmVmJ30pIHsKKwkJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmID0+ICRmcm9tLT57J2hyZWYnfSwgLWNsYXNzID0+ICJwYXRoIn0sCisJCQkgICAgICAgICAgICAgICAgICdhLycgLiBlc2NfcGF0aCgkZnJvbS0+eydmaWxlJ30pKTsKKwkJfSBlbHNlIHsgIyBmaWxlIHdhcyBhZGRlZCAobm8gaHJlZikKKwkJCSRsaW5lIC49ICdhLycgLiBlc2NfcGF0aCgkZnJvbS0+eydmaWxlJ30pOworCQl9CisJCSRsaW5lIC49ICcgJzsKKwkJaWYgKCR0by0+eydocmVmJ30pIHsKKwkJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmID0+ICR0by0+eydocmVmJ30sIC1jbGFzcyA9PiAicGF0aCJ9LAorCQkJICAgICAgICAgICAgICAgICAnYi8nIC4gZXNjX3BhdGgoJHRvLT57J2ZpbGUnfSkpOworCQl9IGVsc2UgeyAjIGZpbGUgd2FzIGRlbGV0ZWQKKwkJCSRsaW5lIC49ICdiLycgLiBlc2NfcGF0aCgkdG8tPnsnZmlsZSd9KTsKKwkJfQorCX0KKworCXJldHVybiAiPGRpdiBjbGFzcz1cImRpZmYgaGVhZGVyXCI+JGxpbmU8L2Rpdj5cbiI7Cit9CisKKyMgZm9ybWF0IGV4dGVuZGVkIGRpZmYgaGVhZGVyIGxpbmUsIGJlZm9yZSBwYXRjaCBpdHNlbGYKK3N1YiBmb3JtYXRfZXh0ZW5kZWRfZGlmZl9oZWFkZXJfbGluZSB7CisJbXkgJGxpbmUgPSBzaGlmdDsKKwlteSAkZGlmZmluZm8gPSBzaGlmdDsKKwlteSAoJGZyb20sICR0bykgPSBAXzsKKworCSMgbWF0Y2ggPHBhdGg+CisJaWYgKCRsaW5lID1+IHMhXigoY29weXxyZW5hbWUpIGZyb20gKS4qJCEkMSEgJiYgJGZyb20tPnsnaHJlZid9KSB7CisJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmPT4kZnJvbS0+eydocmVmJ30sIC1jbGFzcz0+InBhdGgifSwKKwkJICAgICAgICAgICAgICAgICAgICAgICBlc2NfcGF0aCgkZnJvbS0+eydmaWxlJ30pKTsKKwl9CisJaWYgKCRsaW5lID1+IHMhXigoY29weXxyZW5hbWUpIHRvICkuKiQhJDEhICYmICR0by0+eydocmVmJ30pIHsKKwkJJGxpbmUgLj0gJGNnaS0+YSh7LWhyZWY9PiR0by0+eydocmVmJ30sIC1jbGFzcz0+InBhdGgifSwKKwkJICAgICAgICAgICAgICAgICBlc2NfcGF0aCgkdG8tPnsnZmlsZSd9KSk7CisJfQorCSMgbWF0Y2ggc2luZ2xlIDxtb2RlPgorCWlmICgkbGluZSA9fiBtL1xzKFxkezZ9KSQvKSB7CisJCSRsaW5lIC49ICc8c3BhbiBjbGFzcz0iaW5mbyI+ICgnIC4KKwkJICAgICAgICAgZmlsZV90eXBlX2xvbmcoJDEpIC4KKwkJICAgICAgICAgJyk8L3NwYW4+JzsKKwl9CisJIyBtYXRjaCA8aGFzaD4KKwlpZiAoJGxpbmUgPX4gbS9eaW5kZXggWzAtOWEtZkEtRl17NDB9LFswLTlhLWZBLUZdezQwfS8pIHsKKwkJIyBjYW4gbWF0Y2ggb25seSBmb3IgY29tYmluZWQgZGlmZgorCQkkbGluZSA9ICdpbmRleCAnOworCQlmb3IgKG15ICRpID0gMDsgJGkgPCAkZGlmZmluZm8tPnsnbnBhcmVudHMnfTsgJGkrKykgeworCQkJaWYgKCRmcm9tLT57J2hyZWYnfVskaV0pIHsKKwkJCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZj0+JGZyb20tPnsnaHJlZid9WyRpXSwKKwkJCQkgICAgICAgICAgICAgICAgICAtY2xhc3M9PiJoYXNoIn0sCisJCQkJICAgICAgICAgICAgICAgICBzdWJzdHIoJGRpZmZpbmZvLT57J2Zyb21faWQnfVskaV0sMCw3KSk7CisJCQl9IGVsc2UgeworCQkJCSRsaW5lIC49ICcwJyB4IDc7CisJCQl9CisJCQkjIHNlcGFyYXRvcgorCQkJJGxpbmUgLj0gJywnIGlmICgkaSA8ICRkaWZmaW5mby0+eyducGFyZW50cyd9IC0gMSk7CisJCX0KKwkJJGxpbmUgLj0gJy4uJzsKKwkJaWYgKCR0by0+eydocmVmJ30pIHsKKwkJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmPT4kdG8tPnsnaHJlZid9LCAtY2xhc3M9PiJoYXNoIn0sCisJCQkgICAgICAgICAgICAgICAgIHN1YnN0cigkZGlmZmluZm8tPnsndG9faWQnfSwwLDcpKTsKKwkJfSBlbHNlIHsKKwkJCSRsaW5lIC49ICcwJyB4IDc7CisJCX0KKworCX0gZWxzaWYgKCRsaW5lID1+IG0vXmluZGV4IFswLTlhLWZBLUZdezQwfS4uWzAtOWEtZkEtRl17NDB9LykgeworCQkjIGNhbiBtYXRjaCBvbmx5IGZvciBvcmRpbmFyeSBkaWZmCisJCW15ICgkZnJvbV9saW5rLCAkdG9fbGluayk7CisJCWlmICgkZnJvbS0+eydocmVmJ30pIHsKKwkJCSRmcm9tX2xpbmsgPSAkY2dpLT5hKHstaHJlZj0+JGZyb20tPnsnaHJlZid9LCAtY2xhc3M9PiJoYXNoIn0sCisJCQkgICAgICAgICAgICAgICAgICAgICBzdWJzdHIoJGRpZmZpbmZvLT57J2Zyb21faWQnfSwwLDcpKTsKKwkJfSBlbHNlIHsKKwkJCSRmcm9tX2xpbmsgPSAnMCcgeCA3OworCQl9CisJCWlmICgkdG8tPnsnaHJlZid9KSB7CisJCQkkdG9fbGluayA9ICRjZ2ktPmEoey1ocmVmPT4kdG8tPnsnaHJlZid9LCAtY2xhc3M9PiJoYXNoIn0sCisJCQkgICAgICAgICAgICAgICAgICAgc3Vic3RyKCRkaWZmaW5mby0+eyd0b19pZCd9LDAsNykpOworCQl9IGVsc2UgeworCQkJJHRvX2xpbmsgPSAnMCcgeCA3OworCQl9CisJCW15ICgkZnJvbV9pZCwgJHRvX2lkKSA9ICgkZGlmZmluZm8tPnsnZnJvbV9pZCd9LCAkZGlmZmluZm8tPnsndG9faWQnfSk7CisJCSRsaW5lID1+IHMhJGZyb21faWRcLlwuJHRvX2lkISRmcm9tX2xpbmsuLiR0b19saW5rITsKKwl9CisKKwlyZXR1cm4gJGxpbmUgLiAiPGJyLz5cbiI7Cit9CisKKyMgZm9ybWF0IGZyb20tZmlsZS90by1maWxlIGRpZmYgaGVhZGVyCitzdWIgZm9ybWF0X2RpZmZfZnJvbV90b19oZWFkZXIgeworCW15ICgkZnJvbV9saW5lLCAkdG9fbGluZSwgJGRpZmZpbmZvLCAkZnJvbSwgJHRvLCBAcGFyZW50cykgPSBAXzsKKwlteSAkbGluZTsKKwlteSAkcmVzdWx0ID0gJyc7CisKKwkkbGluZSA9ICRmcm9tX2xpbmU7CisJI2Fzc2VydCgkbGluZSA9fiBtL14tLS0vKSBpZiBERUJVRzsKKwkjIG5vIGV4dHJhIGZvcm1hdHRpbmcgZm9yICJeLS0tIC9kZXYvbnVsbCIKKwlpZiAoISAkZGlmZmluZm8tPnsnbnBhcmVudHMnfSkgeworCQkjIG9yZGluYXJ5IChzaW5nbGUgcGFyZW50KSBkaWZmCisJCWlmICgkbGluZSA9fiBtIV4tLS0gIj9hLyEpIHsKKwkJCWlmICgkZnJvbS0+eydocmVmJ30pIHsKKwkJCQkkbGluZSA9ICctLS0gYS8nIC4KKwkJCQkgICAgICAgICRjZ2ktPmEoey1ocmVmPT4kZnJvbS0+eydocmVmJ30sIC1jbGFzcz0+InBhdGgifSwKKwkJCQkgICAgICAgICAgICAgICAgZXNjX3BhdGgoJGZyb20tPnsnZmlsZSd9KSk7CisJCQl9IGVsc2UgeworCQkJCSRsaW5lID0gJy0tLSBhLycgLgorCQkJCSAgICAgICAgZXNjX3BhdGgoJGZyb20tPnsnZmlsZSd9KTsKKwkJCX0KKwkJfQorCQkkcmVzdWx0IC49IHFxITxkaXYgY2xhc3M9ImRpZmYgZnJvbV9maWxlIj4kbGluZTwvZGl2PlxuITsKKworCX0gZWxzZSB7CisJCSMgY29tYmluZWQgZGlmZiAobWVyZ2UgY29tbWl0KQorCQlmb3IgKG15ICRpID0gMDsgJGkgPCAkZGlmZmluZm8tPnsnbnBhcmVudHMnfTsgJGkrKykgeworCQkJaWYgKCRmcm9tLT57J2hyZWYnfVskaV0pIHsKKwkJCQkkbGluZSA9ICctLS0gJyAuCisJCQkJICAgICAgICAkY2dpLT5hKHstaHJlZj0+aHJlZihhY3Rpb249PiJibG9iZGlmZiIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX3BhcmVudD0+JGRpZmZpbmZvLT57J2Zyb21faWQnfVskaV0sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX3BhcmVudF9iYXNlPT4kcGFyZW50c1skaV0sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhcmVudD0+JGZyb20tPnsnZmlsZSd9WyRpXSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmaW5mby0+eyd0b19pZCd9LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JHRvLT57J2ZpbGUnfSksCisJCQkJICAgICAgICAgICAgICAgICAtY2xhc3M9PiJwYXRoIiwKKwkJCQkgICAgICAgICAgICAgICAgIC10aXRsZT0+ImRpZmYiIC4gKCRpKzEpfSwKKwkJCQkgICAgICAgICAgICAgICAgJGkrMSkgLgorCQkJCSAgICAgICAgJy8nIC4KKwkJCQkgICAgICAgICRjZ2ktPmEoey1ocmVmPT4kZnJvbS0+eydocmVmJ31bJGldLCAtY2xhc3M9PiJwYXRoIn0sCisJCQkJICAgICAgICAgICAgICAgIGVzY19wYXRoKCRmcm9tLT57J2ZpbGUnfVskaV0pKTsKKwkJCX0gZWxzZSB7CisJCQkJJGxpbmUgPSAnLS0tIC9kZXYvbnVsbCc7CisJCQl9CisJCQkkcmVzdWx0IC49IHFxITxkaXYgY2xhc3M9ImRpZmYgZnJvbV9maWxlIj4kbGluZTwvZGl2PlxuITsKKwkJfQorCX0KKworCSRsaW5lID0gJHRvX2xpbmU7CisJI2Fzc2VydCgkbGluZSA9fiBtL15cK1wrXCsvKSBpZiBERUJVRzsKKwkjIG5vIGV4dHJhIGZvcm1hdHRpbmcgZm9yICJeKysrIC9kZXYvbnVsbCIKKwlpZiAoJGxpbmUgPX4gbSFeXCtcK1wrICI/Yi8hKSB7CisJCWlmICgkdG8tPnsnaHJlZid9KSB7CisJCQkkbGluZSA9ICcrKysgYi8nIC4KKwkJCSAgICAgICAgJGNnaS0+YSh7LWhyZWY9PiR0by0+eydocmVmJ30sIC1jbGFzcz0+InBhdGgifSwKKwkJCSAgICAgICAgICAgICAgICBlc2NfcGF0aCgkdG8tPnsnZmlsZSd9KSk7CisJCX0gZWxzZSB7CisJCQkkbGluZSA9ICcrKysgYi8nIC4KKwkJCSAgICAgICAgZXNjX3BhdGgoJHRvLT57J2ZpbGUnfSk7CisJCX0KKwl9CisJJHJlc3VsdCAuPSBxcSE8ZGl2IGNsYXNzPSJkaWZmIHRvX2ZpbGUiPiRsaW5lPC9kaXY+XG4hOworCisJcmV0dXJuICRyZXN1bHQ7Cit9CisKKyMgY3JlYXRlIG5vdGUgZm9yIHBhdGNoIHNpbXBsaWZpZWQgYnkgY29tYmluZWQgZGlmZgorc3ViIGZvcm1hdF9kaWZmX2NjX3NpbXBsaWZpZWQgeworCW15ICgkZGlmZmluZm8sIEBwYXJlbnRzKSA9IEBfOworCW15ICRyZXN1bHQgPSAnJzsKKworCSRyZXN1bHQgLj0gIjxkaXYgY2xhc3M9XCJkaWZmIGhlYWRlclwiPiIgLgorCSAgICAgICAgICAgImRpZmYgLS1jYyAiOworCWlmICghaXNfZGVsZXRlZCgkZGlmZmluZm8pKSB7CisJCSRyZXN1bHQgLj0gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZmluZm8tPnsndG9faWQnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmZpbmZvLT57J3RvX2ZpbGUnfSksCisJCSAgICAgICAgICAgICAgICAgICAgLWNsYXNzID0+ICJwYXRoIn0sCisJCSAgICAgICAgICAgICAgICAgICBlc2NfcGF0aCgkZGlmZmluZm8tPnsndG9fZmlsZSd9KSk7CisJfSBlbHNlIHsKKwkJJHJlc3VsdCAuPSBlc2NfcGF0aCgkZGlmZmluZm8tPnsndG9fZmlsZSd9KTsKKwl9CisJJHJlc3VsdCAuPSAiPC9kaXY+XG4iIC4gIyBjbGFzcz0iZGlmZiBoZWFkZXIiCisJICAgICAgICAgICAiPGRpdiBjbGFzcz1cImRpZmYgbm9kaWZmZXJlbmNlc1wiPiIgLgorCSAgICAgICAgICAgIlNpbXBsZSBtZXJnZSIgLgorCSAgICAgICAgICAgIjwvZGl2PlxuIjsgIyBjbGFzcz0iZGlmZiBub2RpZmZlcmVuY2VzIgorCisJcmV0dXJuICRyZXN1bHQ7Cit9CisKK3N1YiBkaWZmX2xpbmVfY2xhc3MgeworCW15ICgkbGluZSwgJGZyb20sICR0bykgPSBAXzsKKworCSMgb3JkaW5hcnkgZGlmZgorCW15ICRudW1fc2lnbiA9IDE7CisJIyBjb21iaW5lZCBkaWZmCisJaWYgKCRmcm9tICYmICR0byAmJiByZWYoJGZyb20tPnsnaHJlZid9KSBlcSAiQVJSQVkiKSB7CisJCSRudW1fc2lnbiA9IHNjYWxhciBAeyRmcm9tLT57J2hyZWYnfX07CisJfQorCisJbXkgQGRpZmZfbGluZV9jbGFzc2lmaWVyID0gKAorCQl7IHJlZ2V4cCA9PiBxci9eXEBcQHskbnVtX3NpZ259IC8sIGNsYXNzID0+ICJjaHVua19oZWFkZXIifSwKKwkJeyByZWdleHAgPT4gcXIvXlxcLywgICAgICAgICAgICAgICBjbGFzcyA9PiAiaW5jb21wbGV0ZSIgIH0sCisJCXsgcmVnZXhwID0+IHFyL14geyRudW1fc2lnbn0vLCAgICAgY2xhc3MgPT4gImN0eCIgfSwKKwkJIyBjbGFzc2lmaWVyIGZvciBjb250ZXh0IG11c3QgY29tZSBiZWZvcmUgY2xhc3NpZmllciBhZGQvcmVtLAorCQkjIG9yIHdlIHdvdWxkIGhhdmUgdG8gdXNlIG1vcmUgY29tcGxpY2F0ZWQgcmVnZXhwLCBmb3IgZXhhbXBsZQorCQkjIHFyLyg/PSB7MCwkbX1cKylbKyBdeyRudW1fc2lnbn0vLCB3aGVyZSAkbSA9ICRudW1fc2lnbiAtIDE7CisJCXsgcmVnZXhwID0+IHFyL15bKyBdeyRudW1fc2lnbn0vLCAgIGNsYXNzID0+ICJhZGQiIH0sCisJCXsgcmVnZXhwID0+IHFyL15bLSBdeyRudW1fc2lnbn0vLCAgIGNsYXNzID0+ICJyZW0iIH0sCisJKTsKKwlmb3IgbXkgJGNsc2Z5IChAZGlmZl9saW5lX2NsYXNzaWZpZXIpIHsKKwkJcmV0dXJuICRjbHNmeS0+eydjbGFzcyd9CisJCQlpZiAoJGxpbmUgPX4gJGNsc2Z5LT57J3JlZ2V4cCd9KTsKKwl9CisKKwkjIGZhbGxiYWNrCisJcmV0dXJuICIiOworfQorCisjIGFzc3VtZXMgdGhhdCAkZnJvbSBhbmQgJHRvIGFyZSBkZWZpbmVkIGFuZCBjb3JyZWN0bHkgZmlsbGVkLAorIyBhbmQgdGhhdCAkbGluZSBob2xkcyBhIGxpbmUgb2YgY2h1bmsgaGVhZGVyIGZvciB1bmlmaWVkIGRpZmYKK3N1YiBmb3JtYXRfdW5pZGlmZl9jaHVua19oZWFkZXIgeworCW15ICgkbGluZSwgJGZyb20sICR0bykgPSBAXzsKKworCW15ICgkZnJvbV90ZXh0LCAkZnJvbV9zdGFydCwgJGZyb21fbGluZXMsICR0b190ZXh0LCAkdG9fc3RhcnQsICR0b19saW5lcywgJHNlY3Rpb24pID0KKwkJJGxpbmUgPX4gbS9eXEB7Mn0gKC0oXGQrKSg/OiwoXGQrKSk/KSAoXCsoXGQrKSg/OiwoXGQrKSk/KSBcQHsyfSguKikkLzsKKworCSRmcm9tX2xpbmVzID0gMCB1bmxlc3MgZGVmaW5lZCAkZnJvbV9saW5lczsKKwkkdG9fbGluZXMgICA9IDAgdW5sZXNzIGRlZmluZWQgJHRvX2xpbmVzOworCisJaWYgKCRmcm9tLT57J2hyZWYnfSkgeworCQkkZnJvbV90ZXh0ID0gJGNnaS0+YSh7LWhyZWY9PiIkZnJvbS0+eydocmVmJ30jbCRmcm9tX3N0YXJ0IiwKKwkJICAgICAgICAgICAgICAgICAgICAgLWNsYXNzPT4ibGlzdCJ9LCAkZnJvbV90ZXh0KTsKKwl9CisJaWYgKCR0by0+eydocmVmJ30pIHsKKwkJJHRvX3RleHQgICA9ICRjZ2ktPmEoey1ocmVmPT4iJHRvLT57J2hyZWYnfSNsJHRvX3N0YXJ0IiwKKwkJICAgICAgICAgICAgICAgICAgICAgLWNsYXNzPT4ibGlzdCJ9LCAkdG9fdGV4dCk7CisJfQorCSRsaW5lID0gIjxzcGFuIGNsYXNzPVwiY2h1bmtfaW5mb1wiPkBAICRmcm9tX3RleHQgJHRvX3RleHQgQEA8L3NwYW4+IiAuCisJICAgICAgICAiPHNwYW4gY2xhc3M9XCJzZWN0aW9uXCI+IiAuIGVzY19odG1sKCRzZWN0aW9uLCAtbmJzcD0+MSkgLiAiPC9zcGFuPiI7CisJcmV0dXJuICRsaW5lOworfQorCisjIGFzc3VtZXMgdGhhdCAkZnJvbSBhbmQgJHRvIGFyZSBkZWZpbmVkIGFuZCBjb3JyZWN0bHkgZmlsbGVkLAorIyBhbmQgdGhhdCAkbGluZSBob2xkcyBhIGxpbmUgb2YgY2h1bmsgaGVhZGVyIGZvciBjb21iaW5lZCBkaWZmCitzdWIgZm9ybWF0X2NjX2RpZmZfY2h1bmtfaGVhZGVyIHsKKwlteSAoJGxpbmUsICRmcm9tLCAkdG8pID0gQF87CisKKwlteSAoJHByZWZpeCwgJHJhbmdlcywgJHNlY3Rpb24pID0gJGxpbmUgPX4gbS9eKFxAKykgKC4qPykgXEArKC4qKSQvOworCW15IChAZnJvbV90ZXh0LCBAZnJvbV9zdGFydCwgQGZyb21fbmxpbmVzLCAkdG9fdGV4dCwgJHRvX3N0YXJ0LCAkdG9fbmxpbmVzKTsKKworCUBmcm9tX3RleHQgPSBzcGxpdCgnICcsICRyYW5nZXMpOworCWZvciAobXkgJGkgPSAwOyAkaSA8IEBmcm9tX3RleHQ7ICsrJGkpIHsKKwkJKCRmcm9tX3N0YXJ0WyRpXSwgJGZyb21fbmxpbmVzWyRpXSkgPQorCQkJKHNwbGl0KCcsJywgc3Vic3RyKCRmcm9tX3RleHRbJGldLCAxKSksIDApOworCX0KKworCSR0b190ZXh0ICAgPSBwb3AgQGZyb21fdGV4dDsKKwkkdG9fc3RhcnQgID0gcG9wIEBmcm9tX3N0YXJ0OworCSR0b19ubGluZXMgPSBwb3AgQGZyb21fbmxpbmVzOworCisJJGxpbmUgPSAiPHNwYW4gY2xhc3M9XCJjaHVua19pbmZvXCI+JHByZWZpeCAiOworCWZvciAobXkgJGkgPSAwOyAkaSA8IEBmcm9tX3RleHQ7ICsrJGkpIHsKKwkJaWYgKCRmcm9tLT57J2hyZWYnfVskaV0pIHsKKwkJCSRsaW5lIC49ICRjZ2ktPmEoey1ocmVmPT4iJGZyb20tPnsnaHJlZid9WyRpXSNsJGZyb21fc3RhcnRbJGldIiwKKwkJCSAgICAgICAgICAgICAgICAgIC1jbGFzcz0+Imxpc3QifSwgJGZyb21fdGV4dFskaV0pOworCQl9IGVsc2UgeworCQkJJGxpbmUgLj0gJGZyb21fdGV4dFskaV07CisJCX0KKwkJJGxpbmUgLj0gIiAiOworCX0KKwlpZiAoJHRvLT57J2hyZWYnfSkgeworCQkkbGluZSAuPSAkY2dpLT5hKHstaHJlZj0+IiR0by0+eydocmVmJ30jbCR0b19zdGFydCIsCisJCSAgICAgICAgICAgICAgICAgIC1jbGFzcz0+Imxpc3QifSwgJHRvX3RleHQpOworCX0gZWxzZSB7CisJCSRsaW5lIC49ICR0b190ZXh0OworCX0KKwkkbGluZSAuPSAiICRwcmVmaXg8L3NwYW4+IiAuCisJICAgICAgICAgIjxzcGFuIGNsYXNzPVwic2VjdGlvblwiPiIgLiBlc2NfaHRtbCgkc2VjdGlvbiwgLW5ic3A9PjEpIC4gIjwvc3Bhbj4iOworCXJldHVybiAkbGluZTsKK30KKworIyBwcm9jZXNzIHBhdGNoIChkaWZmKSBsaW5lIChub3QgdG8gYmUgdXNlZCBmb3IgZGlmZiBoZWFkZXJzKSwKKyMgcmV0dXJuaW5nIEhUTUwtZm9ybWF0dGVkIChidXQgbm90IHdyYXBwZWQpIGxpbmUuCisjIElmIHRoZSBsaW5lIGlzIHBhc3NlZCBhcyBhIHJlZmVyZW5jZSwgaXQgaXMgdHJlYXRlZCBhcyBIVE1MIGFuZCBub3QKKyMgZXNjX2h0bWwoKSdlZC4KK3N1YiBmb3JtYXRfZGlmZl9saW5lIHsKKwlteSAoJGxpbmUsICRkaWZmX2NsYXNzLCAkZnJvbSwgJHRvKSA9IEBfOworCisJaWYgKHJlZigkbGluZSkpIHsKKwkJJGxpbmUgPSAkJGxpbmU7CisJfSBlbHNlIHsKKwkJY2hvbXAgJGxpbmU7CisJCSRsaW5lID0gdW50YWJpZnkoJGxpbmUpOworCisJCWlmICgkZnJvbSAmJiAkdG8gJiYgJGxpbmUgPX4gbS9eXEB7Mn0gLykgeworCQkJJGxpbmUgPSBmb3JtYXRfdW5pZGlmZl9jaHVua19oZWFkZXIoJGxpbmUsICRmcm9tLCAkdG8pOworCQl9IGVsc2lmICgkZnJvbSAmJiAkdG8gJiYgJGxpbmUgPX4gbS9eXEB7M30vKSB7CisJCQkkbGluZSA9IGZvcm1hdF9jY19kaWZmX2NodW5rX2hlYWRlcigkbGluZSwgJGZyb20sICR0byk7CisJCX0gZWxzZSB7CisJCQkkbGluZSA9IGVzY19odG1sKCRsaW5lLCAtbmJzcD0+MSk7CisJCX0KKwl9CisKKwlteSAkZGlmZl9jbGFzc2VzID0gImRpZmYiOworCSRkaWZmX2NsYXNzZXMgLj0gIiAkZGlmZl9jbGFzcyIgaWYgKCRkaWZmX2NsYXNzKTsKKwkkbGluZSA9ICI8ZGl2IGNsYXNzPVwiJGRpZmZfY2xhc3Nlc1wiPiRsaW5lPC9kaXY+XG4iOworCisJcmV0dXJuICRsaW5lOworfQorCisjIEdlbmVyYXRlcyB1bmRlZiBvciBzb21ldGhpbmcgbGlrZSAiX3NuYXBzaG90XyIgb3IgInNuYXBzaG90IChfdGJ6Ml8gX3ppcF8pIiwKKyMgbGlua2VkLiAgUGFzcyB0aGUgaGFzaCBvZiB0aGUgdHJlZS9jb21taXQgdG8gc25hcHNob3QuCitzdWIgZm9ybWF0X3NuYXBzaG90X2xpbmtzIHsKKwlteSAoJGhhc2gpID0gQF87CisJbXkgJG51bV9mbXRzID0gQHNuYXBzaG90X2ZtdHM7CisJaWYgKCRudW1fZm10cyA+IDEpIHsKKwkJIyBBIHBhcmVudGhlc2l6ZWQgbGlzdCBvZiBsaW5rcyBiZWFyaW5nIGZvcm1hdCBuYW1lcy4KKwkJIyBlLmcuICJzbmFwc2hvdCAoX3Rhci5nel8gX3ppcF8pIgorCQlyZXR1cm4gInNuYXBzaG90ICgiIC4gam9pbignICcsIG1hcAorCQkJJGNnaS0+YSh7CisJCQkJLWhyZWYgPT4gaHJlZigKKwkJCQkJYWN0aW9uPT4ic25hcHNob3QiLAorCQkJCQloYXNoPT4kaGFzaCwKKwkJCQkJc25hcHNob3RfZm9ybWF0PT4kXworCQkJCSkKKwkJCX0sICRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRffXsnZGlzcGxheSd9KQorCQksIEBzbmFwc2hvdF9mbXRzKSAuICIpIjsKKwl9IGVsc2lmICgkbnVtX2ZtdHMgPT0gMSkgeworCQkjIEEgc2luZ2xlICJzbmFwc2hvdCIgbGluayB3aG9zZSB0b29sdGlwIGJlYXJzIHRoZSBmb3JtYXQgbmFtZS4KKwkJIyBpLmUuICJfc25hcHNob3RfIgorCQlteSAoJGZtdCkgPSBAc25hcHNob3RfZm10czsKKwkJcmV0dXJuCisJCQkkY2dpLT5hKHsKKwkJCQktaHJlZiA9PiBocmVmKAorCQkJCQlhY3Rpb249PiJzbmFwc2hvdCIsCisJCQkJCWhhc2g9PiRoYXNoLAorCQkJCQlzbmFwc2hvdF9mb3JtYXQ9PiRmbXQKKwkJCQkpLAorCQkJCS10aXRsZSA9PiAiaW4gZm9ybWF0OiAka25vd25fc25hcHNob3RfZm9ybWF0c3skZm10fXsnZGlzcGxheSd9IgorCQkJfSwgInNuYXBzaG90Iik7CisJfSBlbHNlIHsgIyAkbnVtX2ZtdHMgPT0gMAorCQlyZXR1cm4gdW5kZWY7CisJfQorfQorCisjIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisjIyBmdW5jdGlvbnMgcmV0dXJuaW5nIHZhbHVlcyB0byBiZSBwYXNzZWQsIHBlcmhhcHMgYWZ0ZXIgc29tZQorIyMgdHJhbnNmb3JtYXRpb24sIHRvIG90aGVyIGZ1bmN0aW9uczsgZS5nLiByZXR1cm5pbmcgYXJndW1lbnRzIHRvIGhyZWYoKQorCisjIHJldHVybnMgaGFzaCB0byBiZSBwYXNzZWQgdG8gaHJlZiB0byBnZW5lcmF0ZSBnaXR3ZWIgVVJMCisjIGluIC10aXRsZSBrZXkgaXQgcmV0dXJucyBkZXNjcmlwdGlvbiBvZiBsaW5rCitzdWIgZ2V0X2ZlZWRfaW5mbyB7CisJbXkgJGZvcm1hdCA9IHNoaWZ0IHx8ICdBdG9tJzsKKwlteSAlcmVzID0gKGFjdGlvbiA9PiBsYygkZm9ybWF0KSk7CisJbXkgJG1hdGNoZWRfcmVmID0gMDsKKworCSMgZmVlZCBsaW5rcyBhcmUgcG9zc2libGUgb25seSBmb3IgcHJvamVjdCB2aWV3cworCXJldHVybiB1bmxlc3MgKGRlZmluZWQgJHByb2plY3QpOworCSMgc29tZSB2aWV3cyBzaG91bGQgbGluayB0byBPUE1MLCBvciB0byBnZW5lcmljIHByb2plY3QgZmVlZCwKKwkjIG9yIGRvbid0IGhhdmUgc3BlY2lmaWMgZmVlZCB5ZXQgKHNvIHRoZXkgc2hvdWxkIHVzZSBnZW5lcmljKQorCXJldHVybiBpZiAoISRhY3Rpb24gfHwgJGFjdGlvbiA9fiAvXig/OnRhZ3N8aGVhZHN8Zm9ya3N8dGFnfHNlYXJjaCkkL3gpOworCisJbXkgJGJyYW5jaCA9IHVuZGVmOworCSMgYnJhbmNoZXMgcmVmcyB1c2VzICdyZWZzLycgKyAkZ2V0X2JyYW5jaF9yZWZzKClbeF0gKyAnLycgcHJlZml4CisJIyAoZnVsbG5hbWUpIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB0YWcgbGlua3M7IHRoaXMgYWxzbyBtYWtlcworCSMgcG9zc2libGUgdG8gZGV0ZWN0IGJyYW5jaCBsaW5rcworCWZvciBteSAkcmVmIChnZXRfYnJhbmNoX3JlZnMoKSkgeworCQlpZiAoKGRlZmluZWQgJGhhc2hfYmFzZSAmJiAkaGFzaF9iYXNlID1+IG0hXnJlZnMvXFEkcmVmXEUvKC4qKSQhKSB8fAorCQkgICAgKGRlZmluZWQgJGhhc2ggICAgICAmJiAkaGFzaCAgICAgID1+IG0hXnJlZnMvXFEkcmVmXEUvKC4qKSQhKSkgeworCQkJJGJyYW5jaCA9ICQxOworCQkJJG1hdGNoZWRfcmVmID0gJHJlZjsKKwkJCWxhc3Q7CisJCX0KKwl9CisJIyBmaW5kIGxvZyB0eXBlIGZvciBmZWVkIGRlc2NyaXB0aW9uICh0aXRsZSkKKwlteSAkdHlwZSA9ICdsb2cnOworCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJJHR5cGUgID0gImhpc3Rvcnkgb2YgJGZpbGVfbmFtZSI7CisJCSR0eXBlIC49ICIvIiBpZiAoJGFjdGlvbiBlcSAndHJlZScpOworCQkkdHlwZSAuPSAiIG9uICckYnJhbmNoJyIgaWYgKGRlZmluZWQgJGJyYW5jaCk7CisJfSBlbHNlIHsKKwkJJHR5cGUgPSAibG9nIG9mICRicmFuY2giIGlmIChkZWZpbmVkICRicmFuY2gpOworCX0KKworCSRyZXN7LXRpdGxlfSA9ICR0eXBlOworCSRyZXN7J2hhc2gnfSA9IChkZWZpbmVkICRicmFuY2ggPyAicmVmcy8kbWF0Y2hlZF9yZWYvJGJyYW5jaCIgOiB1bmRlZik7CisJJHJlc3snZmlsZV9uYW1lJ30gPSAkZmlsZV9uYW1lOworCisJcmV0dXJuICVyZXM7Cit9CisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMjIGdpdCB1dGlsaXR5IHN1YnJvdXRpbmVzLCBpbnZva2luZyBnaXQgY29tbWFuZHMKKworIyByZXR1cm5zIHBhdGggdG8gdGhlIGNvcmUgZ2l0IGV4ZWN1dGFibGUgYW5kIHRoZSAtLWdpdC1kaXIgcGFyYW1ldGVyIGFzIGxpc3QKK3N1YiBnaXRfY21kIHsKKwkkbnVtYmVyX29mX2dpdF9jbWRzKys7CisJcmV0dXJuICRHSVQsICctLWdpdC1kaXI9Jy4kZ2l0X2RpcjsKK30KKworIyBxdW90ZSB0aGUgZ2l2ZW4gYXJndW1lbnRzIGZvciBwYXNzaW5nIHRoZW0gdG8gdGhlIHNoZWxsCisjIHF1b3RlX2NvbW1hbmQoImNvbW1hbmQiLCAiYXJnIDEiLCAiYXJnIHdpdGggJyBhbmQgISBjaGFyYWN0ZXJzIikKKyMgPT4gIidjb21tYW5kJyAnYXJnIDEnICdhcmcgd2l0aCAnXCcnIGFuZCAnXCEnIGNoYXJhY3RlcnMnIgorIyBUcnkgdG8gYXZvaWQgdXNpbmcgdGhpcyBmdW5jdGlvbiB3aGVyZXZlciBwb3NzaWJsZS4KK3N1YiBxdW90ZV9jb21tYW5kIHsKKwlyZXR1cm4gam9pbignICcsCisJCW1hcCB7IG15ICRhID0gJF87ICRhID1+IHMvKFsnIV0pLydcXCQxJy9nOyAiJyRhJyIgfSBAXyApOworfQorCisjIGdldCBIRUFEIHJlZiBvZiBnaXZlbiBwcm9qZWN0IGFzIGhhc2gKK3N1YiBnaXRfZ2V0X2hlYWRfaGFzaCB7CisJcmV0dXJuIGdpdF9nZXRfZnVsbF9oYXNoKHNoaWZ0LCAnSEVBRCcpOworfQorCitzdWIgZ2l0X2dldF9mdWxsX2hhc2ggeworCXJldHVybiBnaXRfZ2V0X2hhc2goQF8pOworfQorCitzdWIgZ2l0X2dldF9zaG9ydF9oYXNoIHsKKwlyZXR1cm4gZ2l0X2dldF9oYXNoKEBfLCAnLS1zaG9ydD03Jyk7Cit9CisKK3N1YiBnaXRfZ2V0X2hhc2ggeworCW15ICgkcHJvamVjdCwgJGhhc2gsIEBvcHRpb25zKSA9IEBfOworCW15ICRvX2dpdF9kaXIgPSAkZ2l0X2RpcjsKKwlteSAkcmV0dmFsID0gdW5kZWY7CisJJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwcm9qZWN0IjsKKwlpZiAob3BlbiBteSAkZmQsICctfCcsIGdpdF9jbWQoKSwgJ3Jldi1wYXJzZScsCisJICAgICctLXZlcmlmeScsICctcScsIEBvcHRpb25zLCAkaGFzaCkgeworCQkkcmV0dmFsID0gPCRmZD47CisJCWNob21wICRyZXR2YWwgaWYgZGVmaW5lZCAkcmV0dmFsOworCQljbG9zZSAkZmQ7CisJfQorCWlmIChkZWZpbmVkICRvX2dpdF9kaXIpIHsKKwkJJGdpdF9kaXIgPSAkb19naXRfZGlyOworCX0KKwlyZXR1cm4gJHJldHZhbDsKK30KKworIyBnZXQgdHlwZSBvZiBnaXZlbiBvYmplY3QKK3N1YiBnaXRfZ2V0X3R5cGUgeworCW15ICRoYXNoID0gc2hpZnQ7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAnLXQnLCAkaGFzaCBvciByZXR1cm47CisJbXkgJHR5cGUgPSA8JGZkPjsKKwljbG9zZSAkZmQgb3IgcmV0dXJuOworCWNob21wICR0eXBlOworCXJldHVybiAkdHlwZTsKK30KKworIyByZXBvc2l0b3J5IGNvbmZpZ3VyYXRpb24KK291ciAkY29uZmlnX2ZpbGUgPSAnJzsKK291ciAlY29uZmlnOworCisjIHN0b3JlIG11bHRpcGxlIHZhbHVlcyBmb3Igc2luZ2xlIGtleSBhcyBhbm9ueW1vdXMgYXJyYXkgcmVmZXJlbmNlCisjIHNpbmdsZSB2YWx1ZXMgc3RvcmVkIGRpcmVjdGx5IGluIHRoZSBoYXNoLCBub3QgYXMgWyA8dmFsdWU+IF0KK3N1YiBoYXNoX3NldF9tdWx0aSB7CisJbXkgKCRoYXNoLCAka2V5LCAkdmFsdWUpID0gQF87CisKKwlpZiAoIWV4aXN0cyAkaGFzaC0+eyRrZXl9KSB7CisJCSRoYXNoLT57JGtleX0gPSAkdmFsdWU7CisJfSBlbHNpZiAoIXJlZiAkaGFzaC0+eyRrZXl9KSB7CisJCSRoYXNoLT57JGtleX0gPSBbICRoYXNoLT57JGtleX0sICR2YWx1ZSBdOworCX0gZWxzZSB7CisJCXB1c2ggQHskaGFzaC0+eyRrZXl9fSwgJHZhbHVlOworCX0KK30KKworIyByZXR1cm4gaGFzaCBvZiBnaXQgcHJvamVjdCBjb25maWd1cmF0aW9uCisjIG9wdGlvbmFsbHkgbGltaXRlZCB0byBzb21lIHNlY3Rpb24sIGUuZy4gJ2dpdHdlYicKK3N1YiBnaXRfcGFyc2VfcHJvamVjdF9jb25maWcgeworCW15ICRzZWN0aW9uX3JlZ2V4cCA9IHNoaWZ0OworCW15ICVjb25maWc7CisKKwlsb2NhbCAkLyA9ICJcMCI7CisKKwlvcGVuIG15ICRmaCwgIi18IiwgZ2l0X2NtZCgpLCAiY29uZmlnIiwgJy16JywgJy1sJywKKwkJb3IgcmV0dXJuOworCisJd2hpbGUgKG15ICRrZXl2YWwgPSA8JGZoPikgeworCQljaG9tcCAka2V5dmFsOworCQlteSAoJGtleSwgJHZhbHVlKSA9IHNwbGl0KC9cbi8sICRrZXl2YWwsIDIpOworCisJCWhhc2hfc2V0X211bHRpKFwlY29uZmlnLCAka2V5LCAkdmFsdWUpCisJCQlpZiAoIWRlZmluZWQgJHNlY3Rpb25fcmVnZXhwIHx8ICRrZXkgPX4gL14oPzokc2VjdGlvbl9yZWdleHApXC4vbyk7CisJfQorCWNsb3NlICRmaDsKKworCXJldHVybiAlY29uZmlnOworfQorCisjIGNvbnZlcnQgY29uZmlnIHZhbHVlIHRvIGJvb2xlYW46ICd0cnVlJyBvciAnZmFsc2UnCisjIG5vIHZhbHVlLCBudW1iZXIgPiAwLCAndHJ1ZScgYW5kICd5ZXMnIHZhbHVlcyBhcmUgdHJ1ZQorIyByZXN0IG9mIHZhbHVlcyBhcmUgdHJlYXRlZCBhcyBmYWxzZSAobmV2ZXIgYXMgZXJyb3IpCitzdWIgY29uZmlnX3RvX2Jvb2wgeworCW15ICR2YWwgPSBzaGlmdDsKKworCXJldHVybiAxIGlmICFkZWZpbmVkICR2YWw7ICAgICAgICAgICAgICMgc2VjdGlvbi5rZXkKKworCSMgc3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZQorCSR2YWwgPX4gcy9eXHMrLy87CisJJHZhbCA9fiBzL1xzKyQvLzsKKworCXJldHVybiAoKCR2YWwgPX4gL15cZCskLyAmJiAkdmFsKSB8fCAgICMgc2VjdGlvbi5rZXkgPSAxCisJICAgICAgICAoJHZhbCA9fiAvXig/OnRydWV8eWVzKSQvaSkpOyAgIyBzZWN0aW9uLmtleSA9IHRydWUKK30KKworIyBjb252ZXJ0IGNvbmZpZyB2YWx1ZSB0byBzaW1wbGUgZGVjaW1hbCBudW1iZXIKKyMgYW4gb3B0aW9uYWwgdmFsdWUgc3VmZml4IG9mICdrJywgJ20nLCBvciAnZycgd2lsbCBjYXVzZSB0aGUgdmFsdWUKKyMgdG8gYmUgbXVsdGlwbGllZCBieSAxMDI0LCAxMDQ4NTc2LCBvciAxMDczNzQxODI0CitzdWIgY29uZmlnX3RvX2ludCB7CisJbXkgJHZhbCA9IHNoaWZ0OworCisJIyBzdHJpcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCisJJHZhbCA9fiBzL15ccysvLzsKKwkkdmFsID1+IHMvXHMrJC8vOworCisJaWYgKG15ICgkbnVtLCAkdW5pdCkgPSAoJHZhbCA9fiAvXihbMC05XSopKFtrbWddKSQvaSkpIHsKKwkJJHVuaXQgPSBsYygkdW5pdCk7CisJCSMgdW5rbm93biB1bml0IGlzIHRyZWF0ZWQgYXMgMQorCQlyZXR1cm4gJG51bSAqICgkdW5pdCBlcSAnZycgPyAxMDczNzQxODI0IDoKKwkJICAgICAgICAgICAgICAgJHVuaXQgZXEgJ20nID8gICAgMTA0ODU3NiA6CisJCSAgICAgICAgICAgICAgICR1bml0IGVxICdrJyA/ICAgICAgIDEwMjQgOiAxKTsKKwl9CisJcmV0dXJuICR2YWw7Cit9CisKKyMgY29udmVydCBjb25maWcgdmFsdWUgdG8gYXJyYXkgcmVmZXJlbmNlLCBpZiBuZWVkZWQKK3N1YiBjb25maWdfdG9fbXVsdGkgeworCW15ICR2YWwgPSBzaGlmdDsKKworCXJldHVybiByZWYoJHZhbCkgPyAkdmFsIDogKGRlZmluZWQoJHZhbCkgPyBbICR2YWwgXSA6IFtdKTsKK30KKworc3ViIGdpdF9nZXRfcHJvamVjdF9jb25maWcgeworCW15ICgka2V5LCAkdHlwZSkgPSBAXzsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCAkZ2l0X2RpcjsKKworCSMga2V5IHNhbml0eSBjaGVjaworCXJldHVybiB1bmxlc3MgKCRrZXkpOworCSMgb25seSBzdWJzZWN0aW9uLCBpZiBleGlzdHMsIGlzIGNhc2Ugc2Vuc2l0aXZlLAorCSMgYW5kIG5vdCBsb3dlcmNhc2VkIGJ5ICdnaXQgY29uZmlnIC16IC1sJworCWlmIChteSAoJGhpLCAkbWksICRsbykgPSAoJGtleSA9fiAvXihbXi5dKilcLiguKilcLihbXi5dKikkLykpIHsKKwkJJGxvID1+IHMvXy8vZzsKKwkJJGtleSA9IGpvaW4oIi4iLCBsYygkaGkpLCAkbWksIGxjKCRsbykpOworCQlyZXR1cm4gaWYgKCRsbyA9fiAvXFcvIHx8ICRoaSA9fiAvXFcvKTsKKwl9IGVsc2UgeworCQkka2V5ID0gbGMoJGtleSk7CisJCSRrZXkgPX4gcy9fLy9nOworCQlyZXR1cm4gaWYgKCRrZXkgPX4gL1xXLyk7CisJfQorCSRrZXkgPX4gcy9eZ2l0d2ViXC4vLzsKKworCSMgdHlwZSBzYW5pdHkgY2hlY2sKKwlpZiAoZGVmaW5lZCAkdHlwZSkgeworCQkkdHlwZSA9fiBzL14tLS8vOworCQkkdHlwZSA9IHVuZGVmCisJCQl1bmxlc3MgKCR0eXBlIGVxICdib29sJyB8fCAkdHlwZSBlcSAnaW50Jyk7CisJfQorCisJIyBnZXQgY29uZmlnCisJaWYgKCFkZWZpbmVkICRjb25maWdfZmlsZSB8fAorCSAgICAkY29uZmlnX2ZpbGUgbmUgIiRnaXRfZGlyL2NvbmZpZyIpIHsKKwkJJWNvbmZpZyA9IGdpdF9wYXJzZV9wcm9qZWN0X2NvbmZpZygnZ2l0d2ViJyk7CisJCSRjb25maWdfZmlsZSA9ICIkZ2l0X2Rpci9jb25maWciOworCX0KKworCSMgY2hlY2sgaWYgY29uZmlnIHZhcmlhYmxlIChrZXkpIGV4aXN0cworCXJldHVybiB1bmxlc3MgZXhpc3RzICRjb25maWd7ImdpdHdlYi4ka2V5In07CisKKwkjIGVuc3VyZSBnaXZlbiB0eXBlCisJaWYgKCFkZWZpbmVkICR0eXBlKSB7CisJCXJldHVybiAkY29uZmlneyJnaXR3ZWIuJGtleSJ9OworCX0gZWxzaWYgKCR0eXBlIGVxICdib29sJykgeworCQkjIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6ICdnaXQgY29uZmlnIC0tYm9vbCcgcmV0dXJucyB0cnVlL2ZhbHNlCisJCXJldHVybiBjb25maWdfdG9fYm9vbCgkY29uZmlneyJnaXR3ZWIuJGtleSJ9KSA/ICd0cnVlJyA6ICdmYWxzZSc7CisJfSBlbHNpZiAoJHR5cGUgZXEgJ2ludCcpIHsKKwkJcmV0dXJuIGNvbmZpZ190b19pbnQoJGNvbmZpZ3siZ2l0d2ViLiRrZXkifSk7CisJfQorCXJldHVybiAkY29uZmlneyJnaXR3ZWIuJGtleSJ9OworfQorCisjIGdldCBoYXNoIG9mIGdpdmVuIHBhdGggYXQgZ2l2ZW4gcmVmCitzdWIgZ2l0X2dldF9oYXNoX2J5X3BhdGggeworCW15ICRiYXNlID0gc2hpZnQ7CisJbXkgJHBhdGggPSBzaGlmdCB8fCByZXR1cm4gdW5kZWY7CisJbXkgJHR5cGUgPSBzaGlmdDsKKworCSRwYXRoID1+IHMsLyskLCw7CisKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAibHMtdHJlZSIsICRiYXNlLCAiLS0iLCAkcGF0aAorCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtbHMtdHJlZSBmYWlsZWQiKTsKKwlteSAkbGluZSA9IDwkZmQ+OworCWNsb3NlICRmZCBvciByZXR1cm4gdW5kZWY7CisKKwlpZiAoIWRlZmluZWQgJGxpbmUpIHsKKwkJIyB0aGVyZSBpcyBubyB0cmVlIG9yIGhhc2ggZ2l2ZW4gYnkgJHBhdGggYXQgJGJhc2UKKwkJcmV0dXJuIHVuZGVmOworCX0KKworCSMnMTAwNjQ0IGJsb2IgMGZhM2YzYTY2ZmI2YTEzN2Y2ZWMyYzE5MzUxZWQ0ZDgwNzA3MGZmYQlwYW5pYy5jJworCSRsaW5lID1+IG0vXihbMC05XSspICguKykgKFswLTlhLWZBLUZdezQwfSlcdC87CisJaWYgKGRlZmluZWQgJHR5cGUgJiYgJHR5cGUgbmUgJDIpIHsKKwkJIyB0eXBlIGRvZXNuJ3QgbWF0Y2gKKwkJcmV0dXJuIHVuZGVmOworCX0KKwlyZXR1cm4gJDM7Cit9CisKKyMgZ2V0IHBhdGggb2YgZW50cnkgd2l0aCBnaXZlbiBoYXNoIGF0IGdpdmVuIHRyZWUtaXNoIChyZWYpCisjIHVzZWQgdG8gZ2V0ICdmcm9tJyBmaWxlbmFtZSBmb3IgY29tYmluZWQgZGlmZiAobWVyZ2UgY29tbWl0KSBmb3IgcmVuYW1lcworc3ViIGdpdF9nZXRfcGF0aF9ieV9oYXNoIHsKKwlteSAkYmFzZSA9IHNoaWZ0IHx8IHJldHVybjsKKwlteSAkaGFzaCA9IHNoaWZ0IHx8IHJldHVybjsKKworCWxvY2FsICQvID0gIlwwIjsKKworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJscy10cmVlIiwgJy1yJywgJy10JywgJy16JywgJGJhc2UKKwkJb3IgcmV0dXJuIHVuZGVmOworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCWNob21wICRsaW5lOworCisJCSMnMDQwMDAwIHRyZWUgNTk1NTk2YTZhOTExN2RkYmE5ZmUzNzliNmIwMTJiNTU4YmFjODQyMwlnaXR3ZWInCisJCSMnMTAwNjQ0IGJsb2IgZTAyZTkwZjA0MjliZTBkMmE2OWI3NjU3MTEwMWYyMGI4Zjc1NTMwZglnaXR3ZWIvUkVBRE1FJworCQlpZiAoJGxpbmUgPX4gbS8oPzpbMC05XSspICg/Oi4rKSAkaGFzaFx0KC4rKSQvKSB7CisJCQljbG9zZSAkZmQ7CisJCQlyZXR1cm4gJDE7CisJCX0KKwl9CisJY2xvc2UgJGZkOworCXJldHVybiB1bmRlZjsKK30KKworIyMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIyMgZ2l0IHV0aWxpdHkgZnVuY3Rpb25zLCBkaXJlY3RseSBhY2Nlc3NpbmcgZ2l0IHJlcG9zaXRvcnkKKworIyBnZXQgdGhlIHZhbHVlIG9mIGNvbmZpZyB2YXJpYWJsZSBlaXRoZXIgZnJvbSBmaWxlIG5hbWVkIGFzIHRoZSB2YXJpYWJsZQorIyBpdHNlbGYgaW4gdGhlIHJlcG9zaXRvcnkgKCRHSVRfRElSLyRuYW1lIGZpbGUpLCBvciBmcm9tIGdpdHdlYi4kbmFtZQorIyBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGluIHRoZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlLgorc3ViIGdpdF9nZXRfZmlsZV9vcl9wcm9qZWN0X2NvbmZpZyB7CisJbXkgKCRwYXRoLCAkbmFtZSkgPSBAXzsKKworCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcGF0aCI7CisJb3BlbiBteSAkZmQsICc8JywgIiRnaXRfZGlyLyRuYW1lIgorCQlvciByZXR1cm4gZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygkbmFtZSk7CisJbXkgJGNvbmYgPSA8JGZkPjsKKwljbG9zZSAkZmQ7CisJaWYgKGRlZmluZWQgJGNvbmYpIHsKKwkJY2hvbXAgJGNvbmY7CisJfQorCXJldHVybiAkY29uZjsKK30KKworc3ViIGdpdF9nZXRfcHJvamVjdF9kZXNjcmlwdGlvbiB7CisJbXkgJHBhdGggPSBzaGlmdDsKKwlyZXR1cm4gZ2l0X2dldF9maWxlX29yX3Byb2plY3RfY29uZmlnKCRwYXRoLCAnZGVzY3JpcHRpb24nKTsKK30KKworc3ViIGdpdF9nZXRfcHJvamVjdF9jYXRlZ29yeSB7CisJbXkgJHBhdGggPSBzaGlmdDsKKwlyZXR1cm4gZ2l0X2dldF9maWxlX29yX3Byb2plY3RfY29uZmlnKCRwYXRoLCAnY2F0ZWdvcnknKTsKK30KKworCisjIHN1cHBvcnRlZCBmb3JtYXRzOgorIyAqICRHSVRfRElSL2N0YWdzLzx0YWduYW1lPiBmaWxlIChpbiAnY3RhZ3MnIHN1YmRpcmVjdG9yeSkKKyMgICAtIGlmIGl0cyBjb250ZW50cyBpcyBhIG51bWJlciwgdXNlIGl0IGFzIHRhZyB3ZWlnaHQsCisjICAgLSBvdGhlcndpc2UgYWRkIGEgdGFnIHdpdGggd2VpZ2h0IDEKKyMgKiAkR0lUX0RJUi9jdGFncyBmaWxlLCBlYWNoIGxpbmUgaXMgYSB0YWcgKHdpdGggd2VpZ2h0IDEpCisjICAgdGhlIHNhbWUgdmFsdWUgbXVsdGlwbGUgdGltZXMgaW5jcmVhc2VzIHRhZyB3ZWlnaHQKKyMgKiBgZ2l0d2ViLmN0YWcnIG11bHRpLXZhbHVlZCByZXBvIGNvbmZpZyB2YXJpYWJsZQorc3ViIGdpdF9nZXRfcHJvamVjdF9jdGFncyB7CisJbXkgJHByb2plY3QgPSBzaGlmdDsKKwlteSAkY3RhZ3MgPSB7fTsKKworCSRnaXRfZGlyID0gIiRwcm9qZWN0cm9vdC8kcHJvamVjdCI7CisJaWYgKG9wZW5kaXIgbXkgJGRoLCAiJGdpdF9kaXIvY3RhZ3MiKSB7CisJCW15IEBmaWxlcyA9IGdyZXAgeyAtZiAkXyB9IG1hcCB7ICIkZ2l0X2Rpci9jdGFncy8kXyIgfSByZWFkZGlyKCRkaCk7CisJCWZvcmVhY2ggbXkgJHRhZ2ZpbGUgKEBmaWxlcykgeworCQkJb3BlbiBteSAkY3QsICc8JywgJHRhZ2ZpbGUKKwkJCQlvciBuZXh0OworCQkJbXkgJHZhbCA9IDwkY3Q+OworCQkJY2hvbXAgJHZhbCBpZiAkdmFsOworCQkJY2xvc2UgJGN0OworCisJCQkobXkgJGN0YWcgPSAkdGFnZmlsZSkgPX4gcyMuKi8jIzsKKwkJCWlmICgkdmFsID1+IC9eXGQrJC8pIHsKKwkJCQkkY3RhZ3MtPnskY3RhZ30gPSAkdmFsOworCQkJfSBlbHNlIHsKKwkJCQkkY3RhZ3MtPnskY3RhZ30gPSAxOworCQkJfQorCQl9CisJCWNsb3NlZGlyICRkaDsKKworCX0gZWxzaWYgKG9wZW4gbXkgJGZoLCAnPCcsICIkZ2l0X2Rpci9jdGFncyIpIHsKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmaD4pIHsKKwkJCWNob21wICRsaW5lOworCQkJJGN0YWdzLT57JGxpbmV9KysgaWYgJGxpbmU7CisJCX0KKwkJY2xvc2UgJGZoOworCisJfSBlbHNlIHsKKwkJbXkgJHRhZ2xpc3QgPSBjb25maWdfdG9fbXVsdGkoZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygnY3RhZycpKTsKKwkJZm9yZWFjaCBteSAkdGFnIChAJHRhZ2xpc3QpIHsKKwkJCSRjdGFncy0+eyR0YWd9Kys7CisJCX0KKwl9CisKKwlyZXR1cm4gJGN0YWdzOworfQorCisjIHJldHVybiBoYXNoLCB3aGVyZSBrZXlzIGFyZSBjb250ZW50IHRhZ3MgKCdjdGFncycpLAorIyBhbmQgdmFsdWVzIGFyZSBzdW0gb2Ygd2VpZ2h0cyBvZiBnaXZlbiB0YWcgaW4gZXZlcnkgcHJvamVjdAorc3ViIGdpdF9nYXRoZXJfYWxsX2N0YWdzIHsKKwlteSAkcHJvamVjdHMgPSBzaGlmdDsKKwlteSAkY3RhZ3MgPSB7fTsKKworCWZvcmVhY2ggbXkgJHAgKEAkcHJvamVjdHMpIHsKKwkJZm9yZWFjaCBteSAkY3QgKGtleXMgJXskcC0+eydjdGFncyd9fSkgeworCQkJJGN0YWdzLT57JGN0fSArPSAkcC0+eydjdGFncyd9LT57JGN0fTsKKwkJfQorCX0KKworCXJldHVybiAkY3RhZ3M7Cit9CisKK3N1YiBnaXRfcG9wdWxhdGVfcHJvamVjdF90YWdjbG91ZCB7CisJbXkgJGN0YWdzID0gc2hpZnQ7CisKKwkjIEZpcnN0LCBtZXJnZSBkaWZmZXJlbnQtY2FzZWQgdGFnczsgdGFncyB2b3RlIG9uIGNhc2luZworCW15ICVjdGFnc19sYzsKKwlmb3JlYWNoIChrZXlzICUkY3RhZ3MpIHsKKwkJJGN0YWdzX2xje2xjICRffS0+e2NvdW50fSArPSAkY3RhZ3MtPnskX307CisJCWlmIChub3QgJGN0YWdzX2xje2xjICRffS0+e3RvcGNvdW50fQorCQkgICAgb3IgJGN0YWdzX2xje2xjICRffS0+e3RvcGNvdW50fSA8ICRjdGFncy0+eyRffSkgeworCQkJJGN0YWdzX2xje2xjICRffS0+e3RvcGNvdW50fSA9ICRjdGFncy0+eyRffTsKKwkJCSRjdGFnc19sY3tsYyAkX30tPnt0b3BuYW1lfSA9ICRfOworCQl9CisJfQorCisJbXkgJGNsb3VkOworCW15ICRtYXRjaGVkID0gJGlucHV0X3BhcmFtc3snY3RhZyd9OworCWlmIChldmFsIHsgcmVxdWlyZSBIVE1MOjpUYWdDbG91ZDsgMTsgfSkgeworCQkkY2xvdWQgPSBIVE1MOjpUYWdDbG91ZC0+bmV3OworCQlmb3JlYWNoIG15ICRjdGFnIChzb3J0IGtleXMgJWN0YWdzX2xjKSB7CisJCQkjIFBhZCB0aGUgdGl0bGUgd2l0aCBzcGFjZXMgc28gdGhhdCB0aGUgY2xvdWQgbG9va3MKKwkJCSMgbGVzcyBjcmFtbWVkLgorCQkJbXkgJHRpdGxlID0gZXNjX2h0bWwoJGN0YWdzX2xjeyRjdGFnfS0+e3RvcG5hbWV9KTsKKwkJCSR0aXRsZSA9fiBzLyAvJm5ic3A7L2c7CisJCQkkdGl0bGUgPX4gcy9eLyZuYnNwOy9nOworCQkJJHRpdGxlID1+IHMvJC8mbmJzcDsvZzsKKwkJCWlmIChkZWZpbmVkICRtYXRjaGVkICYmICRtYXRjaGVkIGVxICRjdGFnKSB7CisJCQkJJHRpdGxlID0gcXEoPHNwYW4gY2xhc3M9Im1hdGNoIj4kdGl0bGU8L3NwYW4+KTsKKwkJCX0KKwkJCSRjbG91ZC0+YWRkKCR0aXRsZSwgaHJlZihwcm9qZWN0PT51bmRlZiwgY3RhZz0+JGN0YWcpLAorCQkJICAgICAgICAgICAgJGN0YWdzX2xjeyRjdGFnfS0+e2NvdW50fSk7CisJCX0KKwl9IGVsc2UgeworCQkkY2xvdWQgPSB7fTsKKwkJZm9yZWFjaCBteSAkY3RhZyAoa2V5cyAlY3RhZ3NfbGMpIHsKKwkJCW15ICR0aXRsZSA9IGVzY19odG1sKCRjdGFnc19sY3skY3RhZ30tPnt0b3BuYW1lfSwgLW5ic3A9PjEpOworCQkJaWYgKGRlZmluZWQgJG1hdGNoZWQgJiYgJG1hdGNoZWQgZXEgJGN0YWcpIHsKKwkJCQkkdGl0bGUgPSBxcSg8c3BhbiBjbGFzcz0ibWF0Y2giPiR0aXRsZTwvc3Bhbj4pOworCQkJfQorCQkJJGNsb3VkLT57JGN0YWd9e2NvdW50fSA9ICRjdGFnc19sY3skY3RhZ30tPntjb3VudH07CisJCQkkY2xvdWQtPnskY3RhZ317Y3RhZ30gPQorCQkJCSRjZ2ktPmEoey1ocmVmPT5ocmVmKHByb2plY3Q9PnVuZGVmLCBjdGFnPT4kY3RhZyl9LCAkdGl0bGUpOworCQl9CisJfQorCXJldHVybiAkY2xvdWQ7Cit9CisKK3N1YiBnaXRfc2hvd19wcm9qZWN0X3RhZ2Nsb3VkIHsKKwlteSAoJGNsb3VkLCAkY291bnQpID0gQF87CisJaWYgKHJlZiAkY2xvdWQgZXEgJ0hUTUw6OlRhZ0Nsb3VkJykgeworCQlyZXR1cm4gJGNsb3VkLT5odG1sX2FuZF9jc3MoJGNvdW50KTsKKwl9IGVsc2UgeworCQlteSBAdGFncyA9IHNvcnQgeyAkY2xvdWQtPnskYX0tPnsnY291bnQnfSA8PT4gJGNsb3VkLT57JGJ9LT57J2NvdW50J30gfSBrZXlzICUkY2xvdWQ7CisJCXJldHVybgorCQkJJzxkaXYgaWQ9Imh0bWx0YWdjbG91ZCInLigkcHJvamVjdCA/ICcnIDogJyBhbGlnbj0iY2VudGVyIicpLic+JyAuCisJCQlqb2luICgnLCAnLCBtYXAgeworCQkJCSRjbG91ZC0+eyRffS0+eydjdGFnJ30KKwkJCX0gc3BsaWNlKEB0YWdzLCAwLCAkY291bnQpKSAuCisJCQknPC9kaXY+JzsKKwl9Cit9CisKK3N1YiBnaXRfZ2V0X3Byb2plY3RfdXJsX2xpc3QgeworCW15ICRwYXRoID0gc2hpZnQ7CisKKwkkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHBhdGgiOworCW9wZW4gbXkgJGZkLCAnPCcsICIkZ2l0X2Rpci9jbG9uZXVybCIKKwkJb3IgcmV0dXJuIHdhbnRhcnJheSA/CisJCUB7IGNvbmZpZ190b19tdWx0aShnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCd1cmwnKSkgfSA6CisJCSAgIGNvbmZpZ190b19tdWx0aShnaXRfZ2V0X3Byb2plY3RfY29uZmlnKCd1cmwnKSk7CisJbXkgQGdpdF9wcm9qZWN0X3VybF9saXN0ID0gbWFwIHsgY2hvbXA7ICRfIH0gPCRmZD47CisJY2xvc2UgJGZkOworCisJcmV0dXJuIHdhbnRhcnJheSA/IEBnaXRfcHJvamVjdF91cmxfbGlzdCA6IFxAZ2l0X3Byb2plY3RfdXJsX2xpc3Q7Cit9CisKK3N1YiBnaXRfZ2V0X3Byb2plY3RzX2xpc3QgeworCW15ICRmaWx0ZXIgPSBzaGlmdCB8fCAnJzsKKwlteSAkcGFyYW5vaWQgPSBzaGlmdDsKKwlteSBAbGlzdDsKKworCWlmICgtZCAkcHJvamVjdHNfbGlzdCkgeworCQkjIHNlYXJjaCBpbiBkaXJlY3RvcnkKKwkJbXkgJGRpciA9ICRwcm9qZWN0c19saXN0OworCQkjIHJlbW92ZSB0aGUgdHJhaWxpbmcgIi8iCisJCSRkaXIgPX4gcyEvKyQhITsKKwkJbXkgJHBmeGxlbiA9IGxlbmd0aCgiJGRpciIpOworCQlteSAkcGZ4ZGVwdGggPSAoJGRpciA9fiB0ciEvISEpOworCQkjIHdoZW4gZmlsdGVyaW5nLCBzZWFyY2ggb25seSBnaXZlbiBzdWJkaXJlY3RvcnkKKwkJaWYgKCRmaWx0ZXIgJiYgISRwYXJhbm9pZCkgeworCQkJJGRpciAuPSAiLyRmaWx0ZXIiOworCQkJJGRpciA9fiBzIS8rJCEhOworCQl9CisKKwkJRmlsZTo6RmluZDo6ZmluZCh7CisJCQlmb2xsb3dfZmFzdCA9PiAxLCAjIGZvbGxvdyBzeW1ib2xpYyBsaW5rcworCQkJZm9sbG93X3NraXAgPT4gMiwgIyBpZ25vcmUgZHVwbGljYXRlcworCQkJZGFuZ2xpbmdfc3ltbGlua3MgPT4gMCwgIyBpZ25vcmUgZGFuZ2xpbmcgc3ltbGlua3MsIHNpbGVudGx5CisJCQl3YW50ZWQgPT4gc3ViIHsKKwkJCQkjIGdsb2JhbCB2YXJpYWJsZXMKKwkJCQlvdXIgJHByb2plY3RfbWF4ZGVwdGg7CisJCQkJb3VyICRwcm9qZWN0cm9vdDsKKwkJCQkjIHNraXAgcHJvamVjdC1saXN0IHRvcGxldmVsLCBpZiB3ZSBnZXQgaXQuCisJCQkJcmV0dXJuIGlmIChtIV5bLy5dJCEpOworCQkJCSMgb25seSBkaXJlY3RvcmllcyBjYW4gYmUgZ2l0IHJlcG9zaXRvcmllcworCQkJCXJldHVybiB1bmxlc3MgKC1kICRfKTsKKwkJCQkjIGRvbid0IHRyYXZlcnNlIHRvbyBkZWVwIChGaW5kIGlzIHN1cGVyIHNsb3cgb24gb3MgeCkKKwkJCQkjICRwcm9qZWN0X21heGRlcHRoIGV4Y2x1ZGVzIGRlcHRoIG9mICRwcm9qZWN0cm9vdAorCQkJCWlmICgoJEZpbGU6OkZpbmQ6Om5hbWUgPX4gdHIhLyEhKSAtICRwZnhkZXB0aCA+ICRwcm9qZWN0X21heGRlcHRoKSB7CisJCQkJCSRGaWxlOjpGaW5kOjpwcnVuZSA9IDE7CisJCQkJCXJldHVybjsKKwkJCQl9CisKKwkJCQlteSAkcGF0aCA9IHN1YnN0cigkRmlsZTo6RmluZDo6bmFtZSwgJHBmeGxlbiArIDEpOworCQkJCSMgcGFyYW5vaWRseSBvbmx5IGZpbHRlciBoZXJlCisJCQkJaWYgKCRwYXJhbm9pZCAmJiAkZmlsdGVyICYmICRwYXRoICF+IG0hXlxRJGZpbHRlclxFLyEpIHsKKwkJCQkJbmV4dDsKKwkJCQl9CisJCQkJIyB3ZSBjaGVjayByZWxhdGVkIGZpbGUgaW4gJHByb2plY3Ryb290CisJCQkJaWYgKGNoZWNrX2V4cG9ydF9vaygiJHByb2plY3Ryb290LyRwYXRoIikpIHsKKwkJCQkJcHVzaCBAbGlzdCwgeyBwYXRoID0+ICRwYXRoIH07CisJCQkJCSRGaWxlOjpGaW5kOjpwcnVuZSA9IDE7CisJCQkJfQorCQkJfSwKKwkJfSwgIiRkaXIiKTsKKworCX0gZWxzaWYgKC1mICRwcm9qZWN0c19saXN0KSB7CisJCSMgcmVhZCBmcm9tIGZpbGUodXJsLWVuY29kZWQpOgorCQkjICdnaXQlMkZnaXQuZ2l0IExpbnVzK1RvcnZhbGRzJworCQkjICdsaWJzJTJGa2xpYmMlMkZrbGliYy5naXQgSC4rUGV0ZXIrQW52aW4nCisJCSMgJ2xpbnV4JTJGaG90cGx1ZyUyRnVkZXYuZ2l0IEdyZWcrS3JvYWgtSGFydG1hbicKKwkJb3BlbiBteSAkZmQsICc8JywgJHByb2plY3RzX2xpc3Qgb3IgcmV0dXJuOworCVBST0pFQ1Q6CisJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCQljaG9tcCAkbGluZTsKKwkJCW15ICgkcGF0aCwgJG93bmVyKSA9IHNwbGl0ICcgJywgJGxpbmU7CisJCQkkcGF0aCA9IHVuZXNjYXBlKCRwYXRoKTsKKwkJCSRvd25lciA9IHVuZXNjYXBlKCRvd25lcik7CisJCQlpZiAoIWRlZmluZWQgJHBhdGgpIHsKKwkJCQluZXh0OworCQkJfQorCQkJIyBpZiAkZmlsdGVyIGlzIHJwb3ZpZGVkLCBjaGVjayBpZiAkcGF0aCBiZWdpbnMgd2l0aCAkZmlsdGVyCisJCQlpZiAoJGZpbHRlciAmJiAkcGF0aCAhfiBtIV5cUSRmaWx0ZXJcRS8hKSB7CisJCQkJbmV4dDsKKwkJCX0KKwkJCWlmIChjaGVja19leHBvcnRfb2soIiRwcm9qZWN0cm9vdC8kcGF0aCIpKSB7CisJCQkJbXkgJHByID0geworCQkJCQlwYXRoID0+ICRwYXRoCisJCQkJfTsKKwkJCQlpZiAoJG93bmVyKSB7CisJCQkJCSRwci0+eydvd25lcid9ID0gdG9fdXRmOCgkb3duZXIpOworCQkJCX0KKwkJCQlwdXNoIEBsaXN0LCAkcHI7CisJCQl9CisJCX0KKwkJY2xvc2UgJGZkOworCX0KKwlyZXR1cm4gQGxpc3Q7Cit9CisKKyMgd3JpdHRlbiB3aXRoIGhlbHAgb2YgVHJlZTo6VHJpZSBtb2R1bGUgKFBlcmwgQXJ0aXN0aWMgTGljZW5zZSwgR1BMIGNvbXBhdGliaWxlKQorIyBhcyBzaWRlIGVmZmVjdHMgaXQgc2V0cyAnZm9ya3MnIGZpZWxkIHRvIGxpc3Qgb2YgZm9ya3MgZm9yIGZvcmtlZCBwcm9qZWN0cworc3ViIGZpbHRlcl9mb3Jrc19mcm9tX3Byb2plY3RzX2xpc3QgeworCW15ICRwcm9qZWN0cyA9IHNoaWZ0OworCisJbXkgJXRyaWU7ICMgcHJlZml4IHRyZWUgb2YgZGlyZWN0b3JpZXMgKHBhdGggY29tcG9uZW50cykKKwkjIGdlbmVyYXRlIHRyaWUgb3V0IG9mIHRob3NlIGRpcmVjdG9yaWVzIHRoYXQgbWlnaHQgY29udGFpbiBmb3JrcworCWZvcmVhY2ggbXkgJHByIChAJHByb2plY3RzKSB7CisJCW15ICRwYXRoID0gJHByLT57J3BhdGgnfTsKKwkJJHBhdGggPX4gcy9cLmdpdCQvLzsgICAgICAjIGZvcmtzIG9mICdyZXBvLmdpdCcgYXJlIGluICdyZXBvLycgZGlyZWN0b3J5CisJCW5leHQgaWYgKCRwYXRoID1+IG0hLyQhKTsgIyBza2lwIG5vbi1iYXJlIHJlcG9zaXRvcmllcywgZS5nLiAncmVwby8uZ2l0JworCQluZXh0IHVubGVzcyAoJHBhdGgpOyAgICAgICMgc2tpcCAnLmdpdCcgcmVwb3NpdG9yeTogdGVzdHMsIGdpdC1pbnN0YXdlYgorCQluZXh0IHVubGVzcyAoLWQgIiRwcm9qZWN0cm9vdC8kcGF0aCIpOyAjIGNvbnRhaW5pbmcgZGlyZWN0b3J5IGV4aXN0cworCQkkcHItPnsnZm9ya3MnfSA9IFtdOyAgICAgICMgdGhlcmUgY2FuIGJlIDAgb3IgbW9yZSBmb3JrcyBvZiBwcm9qZWN0CisKKwkJIyBhZGQgdG8gdHJpZQorCQlteSBAZGlycyA9IHNwbGl0KCcvJywgJHBhdGgpOworCQkjIHdhbGsgdGhlIHRyaWUsIHVudGlsIGVpdGhlciBydW5zIG91dCBvZiBjb21wb25lbnRzIG9yIG91dCBvZiB0cmllCisJCW15ICRyZWYgPSBcJXRyaWU7CisJCXdoaWxlIChzY2FsYXIgQGRpcnMgJiYKKwkJICAgICAgIGV4aXN0cygkcmVmLT57JGRpcnNbMF19KSkgeworCQkJJHJlZiA9ICRyZWYtPntzaGlmdCBAZGlyc307CisJCX0KKwkJIyBjcmVhdGUgcmVzdCBvZiB0cmllIHN0cnVjdHVyZSBmcm9tIHJlc3Qgb2YgY29tcG9uZW50cworCQlmb3JlYWNoIG15ICRkaXIgKEBkaXJzKSB7CisJCQkkcmVmID0gJHJlZi0+eyRkaXJ9ID0ge307CisJCX0KKwkJIyBjcmVhdGUgZW5kIG1hcmtlciwgc3RvcmUgJHByIGFzIGEgZGF0YQorCQkkcmVmLT57Jyd9ID0gJHByIGlmICghZXhpc3RzICRyZWYtPnsnJ30pOworCX0KKworCSMgZmlsdGVyIG91dCBmb3JrcywgYnkgZmluZGluZyBzaG9ydGVzdCBwcmVmaXggbWF0Y2ggZm9yIHBhdGhzCisJbXkgQGZpbHRlcmVkOworIFBST0pFQ1Q6CisJZm9yZWFjaCBteSAkcHIgKEAkcHJvamVjdHMpIHsKKwkJIyB0cmllIGxvb2t1cAorCQlteSAkcmVmID0gXCV0cmllOworCURJUjoKKwkJZm9yZWFjaCBteSAkZGlyIChzcGxpdCgnLycsICRwci0+eydwYXRoJ30pKSB7CisJCQlpZiAoZXhpc3RzICRyZWYtPnsnJ30pIHsKKwkJCQkjIGZvdW5kIFtzaG9ydGVzdF0gcHJlZml4LCBpcyBhIGZvcmsgLSBza2lwIGl0CisJCQkJcHVzaCBAeyRyZWYtPnsnJ317J2ZvcmtzJ319LCAkcHI7CisJCQkJbmV4dCBQUk9KRUNUOworCQkJfQorCQkJaWYgKCFleGlzdHMgJHJlZi0+eyRkaXJ9KSB7CisJCQkJIyBub3QgaW4gdHJpZSwgY2Fubm90IGhhdmUgcHJlZml4LCBub3QgYSBmb3JrCisJCQkJcHVzaCBAZmlsdGVyZWQsICRwcjsKKwkJCQluZXh0IFBST0pFQ1Q7CisJCQl9CisJCQkjIElmIHRoZSBkaXIgaXMgdGhlcmUsIHdlIGp1c3Qgd2FsayBvbmUgc3RlcCBkb3duIHRoZSB0cmllLgorCQkJJHJlZiA9ICRyZWYtPnskZGlyfTsKKwkJfQorCQkjIHdlIHJhbiBvdXQgb2YgdHJpZQorCQkjIChzaG91bGRuJ3QgaGFwcGVuOiBpdCdzIGVpdGhlciBubyBtYXRjaCwgb3IgZW5kIG1hcmtlcikKKwkJcHVzaCBAZmlsdGVyZWQsICRwcjsKKwl9CisKKwlyZXR1cm4gQGZpbHRlcmVkOworfQorCisjIG5vdGU6IGZpbGxfcHJvamVjdF9saXN0X2luZm8gbXVzdCBiZSBydW4gZmlyc3QsCisjIGZvciAnZGVzY3JfbG9uZycgYW5kICdjdGFncycgdG8gYmUgZmlsbGVkCitzdWIgc2VhcmNoX3Byb2plY3RzX2xpc3QgeworCW15ICgkcHJvamxpc3QsICVvcHRzKSA9IEBfOworCW15ICR0YWdmaWx0ZXIgID0gJG9wdHN7J3RhZ2ZpbHRlcid9OworCW15ICRzZWFyY2hfcmUgPSAkb3B0c3snc2VhcmNoX3JlZ2V4cCd9OworCisJcmV0dXJuIEAkcHJvamxpc3QKKwkJdW5sZXNzICgkdGFnZmlsdGVyIHx8ICRzZWFyY2hfcmUpOworCisJIyBzZWFyY2hpbmcgcHJvamVjdHMgcmVxdWlyZSBmaWxsaW5nIHRvIGJlIHJ1biBiZWZvcmUgaXQ7CisJZmlsbF9wcm9qZWN0X2xpc3RfaW5mbygkcHJvamxpc3QsCisJICAgICAgICAgICAgICAgICAgICAgICAkdGFnZmlsdGVyICA/ICdjdGFncycgOiAoKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hfcmUgPyAoJ3BhdGgnLCAnZGVzY3InKSA6ICgpKTsKKwlteSBAcHJvamVjdHM7CisgUFJPSkVDVDoKKwlmb3JlYWNoIG15ICRwciAoQCRwcm9qbGlzdCkgeworCisJCWlmICgkdGFnZmlsdGVyKSB7CisJCQluZXh0IHVubGVzcyByZWYoJHByLT57J2N0YWdzJ30pIGVxICdIQVNIJzsKKwkJCW5leHQgdW5sZXNzCisJCQkJZ3JlcCB7IGxjKCRfKSBlcSBsYygkdGFnZmlsdGVyKSB9IGtleXMgJXskcHItPnsnY3RhZ3MnfX07CisJCX0KKworCQlpZiAoJHNlYXJjaF9yZSkgeworCQkJbmV4dCB1bmxlc3MKKwkJCQkkcHItPnsncGF0aCd9ID1+IC8kc2VhcmNoX3JlLyB8fAorCQkJCSRwci0+eydkZXNjcl9sb25nJ30gPX4gLyRzZWFyY2hfcmUvOworCQl9CisKKwkJcHVzaCBAcHJvamVjdHMsICRwcjsKKwl9CisKKwlyZXR1cm4gQHByb2plY3RzOworfQorCitvdXIgJGdpdHdlYl9wcm9qZWN0X293bmVyID0gdW5kZWY7CitzdWIgZ2l0X2dldF9wcm9qZWN0X2xpc3RfZnJvbV9maWxlIHsKKworCXJldHVybiBpZiAoZGVmaW5lZCAkZ2l0d2ViX3Byb2plY3Rfb3duZXIpOworCisJJGdpdHdlYl9wcm9qZWN0X293bmVyID0ge307CisJIyByZWFkIGZyb20gZmlsZSAodXJsLWVuY29kZWQpOgorCSMgJ2dpdCUyRmdpdC5naXQgTGludXMrVG9ydmFsZHMnCisJIyAnbGlicyUyRmtsaWJjJTJGa2xpYmMuZ2l0IEguK1BldGVyK0FudmluJworCSMgJ2xpbnV4JTJGaG90cGx1ZyUyRnVkZXYuZ2l0IEdyZWcrS3JvYWgtSGFydG1hbicKKwlpZiAoLWYgJHByb2plY3RzX2xpc3QpIHsKKwkJb3BlbihteSAkZmQsICc8JywgJHByb2plY3RzX2xpc3QpOworCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJGxpbmU7CisJCQlteSAoJHByLCAkb3cpID0gc3BsaXQgJyAnLCAkbGluZTsKKwkJCSRwciA9IHVuZXNjYXBlKCRwcik7CisJCQkkb3cgPSB1bmVzY2FwZSgkb3cpOworCQkJJGdpdHdlYl9wcm9qZWN0X293bmVyLT57JHByfSA9IHRvX3V0ZjgoJG93KTsKKwkJfQorCQljbG9zZSAkZmQ7CisJfQorfQorCitzdWIgZ2l0X2dldF9wcm9qZWN0X293bmVyIHsKKwlteSAkcHJvamVjdCA9IHNoaWZ0OworCW15ICRvd25lcjsKKworCXJldHVybiB1bmRlZiB1bmxlc3MgJHByb2plY3Q7CisJJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwcm9qZWN0IjsKKworCWlmICghZGVmaW5lZCAkZ2l0d2ViX3Byb2plY3Rfb3duZXIpIHsKKwkJZ2l0X2dldF9wcm9qZWN0X2xpc3RfZnJvbV9maWxlKCk7CisJfQorCisJaWYgKGV4aXN0cyAkZ2l0d2ViX3Byb2plY3Rfb3duZXItPnskcHJvamVjdH0pIHsKKwkJJG93bmVyID0gJGdpdHdlYl9wcm9qZWN0X293bmVyLT57JHByb2plY3R9OworCX0KKwlpZiAoIWRlZmluZWQgJG93bmVyKXsKKwkJJG93bmVyID0gZ2l0X2dldF9wcm9qZWN0X2NvbmZpZygnb3duZXInKTsKKwl9CisJaWYgKCFkZWZpbmVkICRvd25lcikgeworCQkkb3duZXIgPSBnZXRfZmlsZV9vd25lcigiJGdpdF9kaXIiKTsKKwl9CisKKwlyZXR1cm4gJG93bmVyOworfQorCitzdWIgZ2l0X2dldF9sYXN0X2FjdGl2aXR5IHsKKwlteSAoJHBhdGgpID0gQF87CisJbXkgJGZkOworCisJJGdpdF9kaXIgPSAiJHByb2plY3Ryb290LyRwYXRoIjsKKwlvcGVuKCRmZCwgIi18IiwgZ2l0X2NtZCgpLCAnZm9yLWVhY2gtcmVmJywKKwkgICAgICctLWZvcm1hdD0lKGNvbW1pdHRlciknLAorCSAgICAgJy0tc29ydD0tY29tbWl0dGVyZGF0ZScsCisJICAgICAnLS1jb3VudD0xJywKKwkgICAgIG1hcCB7ICJyZWZzLyRfIiB9IGdldF9icmFuY2hfcmVmcyAoKSkgb3IgcmV0dXJuOworCW15ICRtb3N0X3JlY2VudCA9IDwkZmQ+OworCWNsb3NlICRmZCBvciByZXR1cm47CisJaWYgKGRlZmluZWQgJG1vc3RfcmVjZW50ICYmCisJICAgICRtb3N0X3JlY2VudCA9fiAvIChcZCspIFstK11bMDFdXGRcZFxkJC8pIHsKKwkJbXkgJHRpbWVzdGFtcCA9ICQxOworCQlteSAkYWdlID0gdGltZSAtICR0aW1lc3RhbXA7CisJCXJldHVybiAoJGFnZSwgYWdlX3N0cmluZygkYWdlKSk7CisJfQorCXJldHVybiAodW5kZWYsIHVuZGVmKTsKK30KKworIyBJbXBsZW1lbnRhdGlvbiBub3RlOiB3aGVuIGEgc2luZ2xlIHJlbW90ZSBpcyB3YW50ZWQsIHdlIGNhbm5vdCB1c2UgJ2dpdAorIyByZW1vdGUgc2hvdyAtbicgYmVjYXVzZSB0aGF0IGNvbW1hbmQgYWx3YXlzIHdvcmsgKGFzc3VtaW5nIGl0J3MgYSByZW1vdGUgVVJMCisjIGlmIGl0J3Mgbm90IGRlZmluZWQpLCBhbmQgd2UgY2Fubm90IHVzZSAnZ2l0IHJlbW90ZSBzaG93JyBiZWNhdXNlIHRoYXQgd291bGQKKyMgdHJ5IHRvIG1ha2UgYSBuZXR3b3JrIHJvdW5kdHJpcC4gU28gdGhlIG9ubHkgd2F5IHRvIGZpbmQgaWYgdGhhdCBwYXJ0aWN1bGFyCisjIHJlbW90ZSBpcyBkZWZpbmVkIGlzIHRvIHdhbGsgdGhlIGxpc3QgcHJvdmlkZWQgYnkgJ2dpdCByZW1vdGUgLXYnIGFuZCBzdG9wIGlmCisjIGFuZCB3aGVuIHdlIGZpbmQgd2hhdCB3ZSB3YW50Lgorc3ViIGdpdF9nZXRfcmVtb3Rlc19saXN0IHsKKwlteSAkd2FudGVkID0gc2hpZnQ7CisJbXkgJXJlbW90ZXMgPSAoKTsKKworCW9wZW4gbXkgJGZkLCAnLXwnICwgZ2l0X2NtZCgpLCAncmVtb3RlJywgJy12JzsKKwlyZXR1cm4gdW5sZXNzICRmZDsKKwl3aGlsZSAobXkgJHJlbW90ZSA9IDwkZmQ+KSB7CisJCWNob21wICRyZW1vdGU7CisJCSRyZW1vdGUgPX4gcyFcdCguKj8pXHMrXCgoXHcrKVwpJCEhOworCQluZXh0IGlmICR3YW50ZWQgYW5kIG5vdCAkcmVtb3RlIGVxICR3YW50ZWQ7CisJCW15ICgkdXJsLCAka2V5KSA9ICgkMSwgJDIpOworCisJCSRyZW1vdGVzeyRyZW1vdGV9IHx8PSB7ICdoZWFkcycgPT4gKCkgfTsKKwkJJHJlbW90ZXN7JHJlbW90ZX17JGtleX0gPSAkdXJsOworCX0KKwljbG9zZSAkZmQgb3IgcmV0dXJuOworCXJldHVybiB3YW50YXJyYXkgPyAlcmVtb3RlcyA6IFwlcmVtb3RlczsKK30KKworIyBUYWtlcyBhIGhhc2ggb2YgcmVtb3RlcyBhcyBmaXJzdCBwYXJhbWV0ZXIgYW5kIGZpbGxzIGl0IGJ5IGFkZGluZyB0aGUKKyMgYXZhaWxhYmxlIHJlbW90ZSBoZWFkcyBmb3IgZWFjaCBvZiB0aGUgaW5kaWNhdGVkIHJlbW90ZXMuCitzdWIgZmlsbF9yZW1vdGVfaGVhZHMgeworCW15ICRyZW1vdGVzID0gc2hpZnQ7CisJbXkgQGhlYWRzID0gbWFwIHsgInJlbW90ZXMvJF8iIH0ga2V5cyAlJHJlbW90ZXM7CisJbXkgQHJlbW90ZWhlYWRzID0gZ2l0X2dldF9oZWFkc19saXN0KHVuZGVmLCBAaGVhZHMpOworCWZvcmVhY2ggbXkgJHJlbW90ZSAoa2V5cyAlJHJlbW90ZXMpIHsKKwkJJHJlbW90ZXMtPnskcmVtb3RlfXsnaGVhZHMnfSA9IFsgZ3JlcCB7CisJCQkkXy0+eyduYW1lJ30gPX4gcyFeJHJlbW90ZS8hIQorCQkJfSBAcmVtb3RlaGVhZHMgXTsKKwl9Cit9CisKK3N1YiBnaXRfZ2V0X3JlZmVyZW5jZXMgeworCW15ICR0eXBlID0gc2hpZnQgfHwgIiI7CisJbXkgJXJlZnM7CisJIyA1ZGMwMWM1OTVlNmM2ZWM5Y2NkYTRmNmY2OWMxMzFjMGRkOTQ1ZjhjIHJlZnMvdGFncy92Mi42LjExCisJIyBjMzlhZTA3ZjM5MzgwNmNjZjQwNmVmOTY2ZTlhMTVhZmM0M2NjMzZhIHJlZnMvdGFncy92Mi42LjExXnt9CisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgInNob3ctcmVmIiwgIi0tZGVyZWZlcmVuY2UiLAorCQkoJHR5cGUgPyAoIi0tIiwgInJlZnMvJHR5cGUiKSA6ICgpKSAjIHVzZSAtLSA8cGF0dGVybj4gaWYgJHR5cGUKKwkJb3IgcmV0dXJuOworCisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJY2hvbXAgJGxpbmU7CisJCWlmICgkbGluZSA9fiBtIV4oWzAtOWEtZkEtRl17NDB9KVxzcmVmcy8oJHR5cGUuKikkISkgeworCQkJaWYgKGRlZmluZWQgJHJlZnN7JDF9KSB7CisJCQkJcHVzaCBAeyRyZWZzeyQxfX0sICQyOworCQkJfSBlbHNlIHsKKwkJCQkkcmVmc3skMX0gPSBbICQyIF07CisJCQl9CisJCX0KKwl9CisJY2xvc2UgJGZkIG9yIHJldHVybjsKKwlyZXR1cm4gXCVyZWZzOworfQorCitzdWIgZ2l0X2dldF9yZXZfbmFtZV90YWdzIHsKKwlteSAkaGFzaCA9IHNoaWZ0IHx8IHJldHVybiB1bmRlZjsKKworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJuYW1lLXJldiIsICItLXRhZ3MiLCAkaGFzaAorCQlvciByZXR1cm47CisJbXkgJG5hbWVfcmV2ID0gPCRmZD47CisJY2xvc2UgJGZkOworCisJaWYgKCRuYW1lX3JldiA9fiBtfF4kaGFzaCB0YWdzLyguKikkfCkgeworCQlyZXR1cm4gJDE7CisJfSBlbHNlIHsKKwkJIyBjYXRjaGVzIGFsc28gJyRoYXNoIHVuZGVmaW5lZCcgb3V0cHV0CisJCXJldHVybiB1bmRlZjsKKwl9Cit9CisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMjIHBhcnNlIHRvIGhhc2ggZnVuY3Rpb25zCisKK3N1YiBwYXJzZV9kYXRlIHsKKwlteSAkZXBvY2ggPSBzaGlmdDsKKwlteSAkdHogPSBzaGlmdCB8fCAiLTAwMDAiOworCisJbXkgJWRhdGU7CisJbXkgQG1vbnRocyA9ICgiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiKTsKKwlteSBAZGF5cyA9ICgiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0Iik7CisJbXkgKCRzZWMsICRtaW4sICRob3VyLCAkbWRheSwgJG1vbiwgJHllYXIsICR3ZGF5LCAkeWRheSkgPSBnbXRpbWUoJGVwb2NoKTsKKwkkZGF0ZXsnaG91cid9ID0gJGhvdXI7CisJJGRhdGV7J21pbnV0ZSd9ID0gJG1pbjsKKwkkZGF0ZXsnbWRheSd9ID0gJG1kYXk7CisJJGRhdGV7J2RheSd9ID0gJGRheXNbJHdkYXldOworCSRkYXRleydtb250aCd9ID0gJG1vbnRoc1skbW9uXTsKKwkkZGF0ZXsncmZjMjgyMid9ICAgPSBzcHJpbnRmICIlcywgJWQgJXMgJTRkICUwMmQ6JTAyZDolMDJkICswMDAwIiwKKwkgICAgICAgICAgICAgICAgICAgICAkZGF5c1skd2RheV0sICRtZGF5LCAkbW9udGhzWyRtb25dLCAxOTAwKyR5ZWFyLCAkaG91ciAsJG1pbiwgJHNlYzsKKwkkZGF0ZXsnbWRheS10aW1lJ30gPSBzcHJpbnRmICIlZCAlcyAlMDJkOiUwMmQiLAorCSAgICAgICAgICAgICAgICAgICAgICRtZGF5LCAkbW9udGhzWyRtb25dLCAkaG91ciAsJG1pbjsKKwkkZGF0ZXsnaXNvLTg2MDEnfSAgPSBzcHJpbnRmICIlMDRkLSUwMmQtJTAyZFQlMDJkOiUwMmQ6JTAyZFoiLAorCSAgICAgICAgICAgICAgICAgICAgIDE5MDArJHllYXIsIDErJG1vbiwgJG1kYXksICRob3VyICwkbWluLCAkc2VjOworCisJbXkgKCR0el9zaWduLCAkdHpfaG91ciwgJHR6X21pbikgPQorCQkoJHR6ID1+IG0vXihbLStdKShcZFxkKShcZFxkKSQvKTsKKwkkdHpfc2lnbiA9ICgkdHpfc2lnbiBlcSAnLScgPyAtMSA6ICsxKTsKKwlteSAkbG9jYWwgPSAkZXBvY2ggKyAkdHpfc2lnbiooKCgkdHpfaG91cio2MCkgKyAkdHpfbWluKSo2MCk7CisJKCRzZWMsICRtaW4sICRob3VyLCAkbWRheSwgJG1vbiwgJHllYXIsICR3ZGF5LCAkeWRheSkgPSBnbXRpbWUoJGxvY2FsKTsKKwkkZGF0ZXsnaG91cl9sb2NhbCd9ID0gJGhvdXI7CisJJGRhdGV7J21pbnV0ZV9sb2NhbCd9ID0gJG1pbjsKKwkkZGF0ZXsndHpfbG9jYWwnfSA9ICR0ejsKKwkkZGF0ZXsnaXNvLXR6J30gPSBzcHJpbnRmKCIlMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZCAlcyIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAxOTAwKyR5ZWFyLCAkbW9uKzEsICRtZGF5LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgJGhvdXIsICRtaW4sICRzZWMsICR0eik7CisJcmV0dXJuICVkYXRlOworfQorCitzdWIgcGFyc2VfdGFnIHsKKwlteSAkdGFnX2lkID0gc2hpZnQ7CisJbXkgJXRhZzsKKwlteSBAY29tbWVudDsKKworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJjYXQtZmlsZSIsICJ0YWciLCAkdGFnX2lkIG9yIHJldHVybjsKKwkkdGFneydpZCd9ID0gJHRhZ19pZDsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQljaG9tcCAkbGluZTsKKwkJaWYgKCRsaW5lID1+IG0vXm9iamVjdCAoWzAtOWEtZkEtRl17NDB9KSQvKSB7CisJCQkkdGFneydvYmplY3QnfSA9ICQxOworCQl9IGVsc2lmICgkbGluZSA9fiBtL150eXBlICguKykkLykgeworCQkJJHRhZ3sndHlwZSd9ID0gJDE7CisJCX0gZWxzaWYgKCRsaW5lID1+IG0vXnRhZyAoLispJC8pIHsKKwkJCSR0YWd7J25hbWUnfSA9ICQxOworCQl9IGVsc2lmICgkbGluZSA9fiBtL150YWdnZXIgKC4qKSAoWzAtOV0rKSAoLiopJC8pIHsKKwkJCSR0YWd7J2F1dGhvcid9ID0gJDE7CisJCQkkdGFneydhdXRob3JfZXBvY2gnfSA9ICQyOworCQkJJHRhZ3snYXV0aG9yX3R6J30gPSAkMzsKKwkJCWlmICgkdGFneydhdXRob3InfSA9fiBtL14oW148XSspIDwoW14+XSopPi8pIHsKKwkJCQkkdGFneydhdXRob3JfbmFtZSd9ICA9ICQxOworCQkJCSR0YWd7J2F1dGhvcl9lbWFpbCd9ID0gJDI7CisJCQl9IGVsc2UgeworCQkJCSR0YWd7J2F1dGhvcl9uYW1lJ30gPSAkdGFneydhdXRob3InfTsKKwkJCX0KKwkJfSBlbHNpZiAoJGxpbmUgPX4gbS8tLUJFR0lOLykgeworCQkJcHVzaCBAY29tbWVudCwgJGxpbmU7CisJCQlsYXN0OworCQl9IGVsc2lmICgkbGluZSBlcSAiIikgeworCQkJbGFzdDsKKwkJfQorCX0KKwlwdXNoIEBjb21tZW50LCA8JGZkPjsKKwkkdGFneydjb21tZW50J30gPSBcQGNvbW1lbnQ7CisJY2xvc2UgJGZkIG9yIHJldHVybjsKKwlpZiAoIWRlZmluZWQgJHRhZ3snbmFtZSd9KSB7CisJCXJldHVybgorCX07CisJcmV0dXJuICV0YWcKK30KKworc3ViIHBhcnNlX2NvbW1pdF90ZXh0IHsKKwlteSAoJGNvbW1pdF90ZXh0LCAkd2l0aHBhcmVudHMpID0gQF87CisJbXkgQGNvbW1pdF9saW5lcyA9IHNwbGl0ICdcbicsICRjb21taXRfdGV4dDsKKwlteSAlY287CisKKwlwb3AgQGNvbW1pdF9saW5lczsgIyBSZW1vdmUgJ1wwJworCisJaWYgKCEgQGNvbW1pdF9saW5lcykgeworCQlyZXR1cm47CisJfQorCisJbXkgJGhlYWRlciA9IHNoaWZ0IEBjb21taXRfbGluZXM7CisJaWYgKCRoZWFkZXIgIX4gbS9eWzAtOWEtZkEtRl17NDB9LykgeworCQlyZXR1cm47CisJfQorCSgkY297J2lkJ30sIG15IEBwYXJlbnRzKSA9IHNwbGl0ICcgJywgJGhlYWRlcjsKKwl3aGlsZSAobXkgJGxpbmUgPSBzaGlmdCBAY29tbWl0X2xpbmVzKSB7CisJCWxhc3QgaWYgJGxpbmUgZXEgIlxuIjsKKwkJaWYgKCRsaW5lID1+IG0vXnRyZWUgKFswLTlhLWZBLUZdezQwfSkkLykgeworCQkJJGNveyd0cmVlJ30gPSAkMTsKKwkJfSBlbHNpZiAoKCFkZWZpbmVkICR3aXRocGFyZW50cykgJiYgKCRsaW5lID1+IG0vXnBhcmVudCAoWzAtOWEtZkEtRl17NDB9KSQvKSkgeworCQkJcHVzaCBAcGFyZW50cywgJDE7CisJCX0gZWxzaWYgKCRsaW5lID1+IG0vXmF1dGhvciAoLiopIChbMC05XSspICguKikkLykgeworCQkJJGNveydhdXRob3InfSA9IHRvX3V0ZjgoJDEpOworCQkJJGNveydhdXRob3JfZXBvY2gnfSA9ICQyOworCQkJJGNveydhdXRob3JfdHonfSA9ICQzOworCQkJaWYgKCRjb3snYXV0aG9yJ30gPX4gbS9eKFtePF0rKSA8KFtePl0qKT4vKSB7CisJCQkJJGNveydhdXRob3JfbmFtZSd9ICA9ICQxOworCQkJCSRjb3snYXV0aG9yX2VtYWlsJ30gPSAkMjsKKwkJCX0gZWxzZSB7CisJCQkJJGNveydhdXRob3JfbmFtZSd9ID0gJGNveydhdXRob3InfTsKKwkJCX0KKwkJfSBlbHNpZiAoJGxpbmUgPX4gbS9eY29tbWl0dGVyICguKikgKFswLTldKykgKC4qKSQvKSB7CisJCQkkY297J2NvbW1pdHRlcid9ID0gdG9fdXRmOCgkMSk7CisJCQkkY297J2NvbW1pdHRlcl9lcG9jaCd9ID0gJDI7CisJCQkkY297J2NvbW1pdHRlcl90eid9ID0gJDM7CisJCQlpZiAoJGNveydjb21taXR0ZXInfSA9fiBtL14oW148XSspIDwoW14+XSopPi8pIHsKKwkJCQkkY297J2NvbW1pdHRlcl9uYW1lJ30gID0gJDE7CisJCQkJJGNveydjb21taXR0ZXJfZW1haWwnfSA9ICQyOworCQkJfSBlbHNlIHsKKwkJCQkkY297J2NvbW1pdHRlcl9uYW1lJ30gPSAkY297J2NvbW1pdHRlcid9OworCQkJfQorCQl9CisJfQorCWlmICghZGVmaW5lZCAkY297J3RyZWUnfSkgeworCQlyZXR1cm47CisJfTsKKwkkY297J3BhcmVudHMnfSA9IFxAcGFyZW50czsKKwkkY297J3BhcmVudCd9ID0gJHBhcmVudHNbMF07CisKKwlmb3JlYWNoIG15ICR0aXRsZSAoQGNvbW1pdF9saW5lcykgeworCQkkdGl0bGUgPX4gcy9eICAgIC8vOworCQlpZiAoJHRpdGxlIG5lICIiKSB7CisJCQkkY297J3RpdGxlJ30gPSBjaG9wX3N0cigkdGl0bGUsIDgwLCA1KTsKKwkJCSMgcmVtb3ZlIGxlYWRpbmcgc3R1ZmYgb2YgbWVyZ2VzIHRvIG1ha2UgdGhlIGludGVyZXN0aW5nIHBhcnQgdmlzaWJsZQorCQkJaWYgKGxlbmd0aCgkdGl0bGUpID4gNTApIHsKKwkJCQkkdGl0bGUgPX4gcy9eQXV0b21hdGljIC8vOworCQkJCSR0aXRsZSA9fiBzL15tZXJnZSAob2Z8d2l0aCkgL01lcmdlIC4uLiAvaTsKKwkJCQlpZiAobGVuZ3RoKCR0aXRsZSkgPiA1MCkgeworCQkJCQkkdGl0bGUgPX4gcy8oaHR0cHxyc3luYyk6XC9cLy8vOworCQkJCX0KKwkJCQlpZiAobGVuZ3RoKCR0aXRsZSkgPiA1MCkgeworCQkJCQkkdGl0bGUgPX4gcy8obWFzdGVyfHd3d3xyc3luYylcLi8vOworCQkJCX0KKwkJCQlpZiAobGVuZ3RoKCR0aXRsZSkgPiA1MCkgeworCQkJCQkkdGl0bGUgPX4gcy9rZXJuZWwub3JnOj8vLzsKKwkJCQl9CisJCQkJaWYgKGxlbmd0aCgkdGl0bGUpID4gNTApIHsKKwkJCQkJJHRpdGxlID1+IHMvXC9wdWJcL3NjbS8vOworCQkJCX0KKwkJCX0KKwkJCSRjb3sndGl0bGVfc2hvcnQnfSA9IGNob3Bfc3RyKCR0aXRsZSwgNTAsIDUpOworCQkJbGFzdDsKKwkJfQorCX0KKwlpZiAoISBkZWZpbmVkICRjb3sndGl0bGUnfSB8fCAkY297J3RpdGxlJ30gZXEgIiIpIHsKKwkJJGNveyd0aXRsZSd9ID0gJGNveyd0aXRsZV9zaG9ydCd9ID0gJyhubyBjb21taXQgbWVzc2FnZSknOworCX0KKwkjIHJlbW92ZSBhZGRlZCBzcGFjZXMKKwlmb3JlYWNoIG15ICRsaW5lIChAY29tbWl0X2xpbmVzKSB7CisJCSRsaW5lID1+IHMvXiAgICAvLzsKKwl9CisJJGNveydjb21tZW50J30gPSBcQGNvbW1pdF9saW5lczsKKworCW15ICRhZ2UgPSB0aW1lIC0gJGNveydjb21taXR0ZXJfZXBvY2gnfTsKKwkkY297J2FnZSd9ID0gJGFnZTsKKwkkY297J2FnZV9zdHJpbmcnfSA9IGFnZV9zdHJpbmcoJGFnZSk7CisJbXkgKCRzZWMsICRtaW4sICRob3VyLCAkbWRheSwgJG1vbiwgJHllYXIsICR3ZGF5LCAkeWRheSkgPSBnbXRpbWUoJGNveydjb21taXR0ZXJfZXBvY2gnfSk7CisJaWYgKCRhZ2UgPiA2MCo2MCoyNCo3KjIpIHsKKwkJJGNveydhZ2Vfc3RyaW5nX2RhdGUnfSA9IHNwcmludGYgIiU0aS0lMDJ1LSUwMmkiLCAxOTAwICsgJHllYXIsICRtb24rMSwgJG1kYXk7CisJCSRjb3snYWdlX3N0cmluZ19hZ2UnfSA9ICRjb3snYWdlX3N0cmluZyd9OworCX0gZWxzZSB7CisJCSRjb3snYWdlX3N0cmluZ19kYXRlJ30gPSAkY297J2FnZV9zdHJpbmcnfTsKKwkJJGNveydhZ2Vfc3RyaW5nX2FnZSd9ID0gc3ByaW50ZiAiJTRpLSUwMnUtJTAyaSIsIDE5MDAgKyAkeWVhciwgJG1vbisxLCAkbWRheTsKKwl9CisJcmV0dXJuICVjbzsKK30KKworc3ViIHBhcnNlX2NvbW1pdCB7CisJbXkgKCRjb21taXRfaWQpID0gQF87CisJbXkgJWNvOworCisJbG9jYWwgJC8gPSAiXDAiOworCisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgInJldi1saXN0IiwKKwkJIi0tcGFyZW50cyIsCisJCSItLWhlYWRlciIsCisJCSItLW1heC1jb3VudD0xIiwKKwkJJGNvbW1pdF9pZCwKKwkJIi0tIiwKKwkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LXJldi1saXN0IGZhaWxlZCIpOworCSVjbyA9IHBhcnNlX2NvbW1pdF90ZXh0KDwkZmQ+LCAxKTsKKwljbG9zZSAkZmQ7CisKKwlyZXR1cm4gJWNvOworfQorCitzdWIgcGFyc2VfY29tbWl0cyB7CisJbXkgKCRjb21taXRfaWQsICRtYXhjb3VudCwgJHNraXAsICRmaWxlbmFtZSwgQGFyZ3MpID0gQF87CisJbXkgQGNvczsKKworCSRtYXhjb3VudCB8fD0gMTsKKwkkc2tpcCB8fD0gMDsKKworCWxvY2FsICQvID0gIlwwIjsKKworCW9wZW4gbXkgJGZkLCAiLXwiLCBnaXRfY21kKCksICJyZXYtbGlzdCIsCisJCSItLWhlYWRlciIsCisJCUBhcmdzLAorCQkoIi0tbWF4LWNvdW50PSIgLiAkbWF4Y291bnQpLAorCQkoIi0tc2tpcD0iIC4gJHNraXApLAorCQlAZXh0cmFfb3B0aW9ucywKKwkJJGNvbW1pdF9pZCwKKwkJIi0tIiwKKwkJKCRmaWxlbmFtZSA/ICgkZmlsZW5hbWUpIDogKCkpCisJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1yZXYtbGlzdCBmYWlsZWQiKTsKKwl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQlteSAlY28gPSBwYXJzZV9jb21taXRfdGV4dCgkbGluZSk7CisJCXB1c2ggQGNvcywgXCVjbzsKKwl9CisJY2xvc2UgJGZkOworCisJcmV0dXJuIHdhbnRhcnJheSA/IEBjb3MgOiBcQGNvczsKK30KKworIyBwYXJzZSBsaW5lIG9mIGdpdC1kaWZmLXRyZWUgInJhdyIgb3V0cHV0CitzdWIgcGFyc2VfZGlmZnRyZWVfcmF3X2xpbmUgeworCW15ICRsaW5lID0gc2hpZnQ7CisJbXkgJXJlczsKKworCSMgJzoxMDA2NDQgMTAwNjQ0IDAzYjIxODI2MGU5OWI3OGM2ZGYwZWQzNzhlNTllZDkyMDVjY2M5NmQgM2I5M2Q1ZTdjYzdmN2RkNGViZWQxM2E1Y2MxYTRhZDk3NmZjOTRkOCBNCWxzLWZpbGVzLmMnCisJIyAnOjEwMDY0NCAxMDA2NDQgN2Y5MjgxOTg1MDg2OTcxZDM4NzdhY2EyNzcwNGYyYWFmOWM0NDhjZSBiYzE5MGViYzcxYmJkOTIzZjJiNzI4ZTUwNTQwOGY1ZTU0YmQwNzNhIE0JcmV2LXRyZWUuYycKKwlpZiAoJGxpbmUgPX4gbS9eOihbMC03XXs2fSkgKFswLTddezZ9KSAoWzAtOWEtZkEtRl17NDB9KSAoWzAtOWEtZkEtRl17NDB9KSAoLikoWzAtOV17MCwzfSlcdCguKikkLykgeworCQkkcmVzeydmcm9tX21vZGUnfSA9ICQxOworCQkkcmVzeyd0b19tb2RlJ30gPSAkMjsKKwkJJHJlc3snZnJvbV9pZCd9ID0gJDM7CisJCSRyZXN7J3RvX2lkJ30gPSAkNDsKKwkJJHJlc3snc3RhdHVzJ30gPSAkNTsKKwkJJHJlc3snc2ltaWxhcml0eSd9ID0gJDY7CisJCWlmICgkcmVzeydzdGF0dXMnfSBlcSAnUicgfHwgJHJlc3snc3RhdHVzJ30gZXEgJ0MnKSB7ICMgcmVuYW1lZCBvciBjb3BpZWQKKwkJCSgkcmVzeydmcm9tX2ZpbGUnfSwgJHJlc3sndG9fZmlsZSd9KSA9IG1hcCB7IHVucXVvdGUoJF8pIH0gc3BsaXQoIlx0IiwgJDcpOworCQl9IGVsc2UgeworCQkJJHJlc3snZnJvbV9maWxlJ30gPSAkcmVzeyd0b19maWxlJ30gPSAkcmVzeydmaWxlJ30gPSB1bnF1b3RlKCQ3KTsKKwkJfQorCX0KKwkjICc6OjEwMDc1NSAxMDA3NTUgMTAwNzU1IDYwZTc5Y2ExYjAxYmM4YjA1N2FiZTE3ZGRhYjQ4NDY5OWE3ZjVmZGIgOTQwNjdjYzVmNzMzODhmMzM3MjJkNTJhZTAyZjQ0NjkyYmMwNzQ5MCA5NDA2N2NjNWY3MzM4OGYzMzcyMmQ1MmFlMDJmNDQ2OTJiYzA3NDkwIE1SCWdpdC1ndWkvZ2l0LWd1aS5zaCcKKwkjIGNvbWJpbmVkIGRpZmYgKGZvciBtZXJnZSBjb21taXQpCisJZWxzaWYgKCRsaW5lID1+IHMvXig6OispKCg/OlswLTddezZ9ICkrKSgoPzpbMC05YS1mQS1GXXs0MH0gKSspKFthLXpBLVpdKylcdCguKikkLy8pIHsKKwkJJHJlc3snbnBhcmVudHMnfSAgPSBsZW5ndGgoJDEpOworCQkkcmVzeydmcm9tX21vZGUnfSA9IFsgc3BsaXQoJyAnLCAkMikgXTsKKwkJJHJlc3sndG9fbW9kZSd9ID0gcG9wIEB7JHJlc3snZnJvbV9tb2RlJ319OworCQkkcmVzeydmcm9tX2lkJ30gPSBbIHNwbGl0KCcgJywgJDMpIF07CisJCSRyZXN7J3RvX2lkJ30gPSBwb3AgQHskcmVzeydmcm9tX2lkJ319OworCQkkcmVzeydzdGF0dXMnfSA9IFsgc3BsaXQoJycsICQ0KSBdOworCQkkcmVzeyd0b19maWxlJ30gPSB1bnF1b3RlKCQ1KTsKKwl9CisJIyAnYzUxMmI1MjM0NzI0ODVhZWY0ZmZmOWU1N2IyMjlkOWQyNDNjOTY3ZicKKwllbHNpZiAoJGxpbmUgPX4gbS9eKFswLTlhLWZBLUZdezQwfSkkLykgeworCQkkcmVzeydjb21taXQnfSA9ICQxOworCX0KKworCXJldHVybiB3YW50YXJyYXkgPyAlcmVzIDogXCVyZXM7Cit9CisKKyMgd3JhcHBlcjogcmV0dXJuIHBhcnNlZCBsaW5lIG9mIGdpdC1kaWZmLXRyZWUgInJhdyIgb3V0cHV0CisjICh0aGUgYXJndW1lbnQgbWlnaHQgYmUgcmF3IGxpbmUsIG9yIHBhcnNlZCBpbmZvKQorc3ViIHBhcnNlZF9kaWZmdHJlZV9saW5lIHsKKwlteSAkbGluZV9vcl9yZWYgPSBzaGlmdDsKKworCWlmIChyZWYoJGxpbmVfb3JfcmVmKSBlcSAiSEFTSCIpIHsKKwkJIyBwcmUtcGFyc2VkIChvciBnZW5lcmF0ZWQgYnkgaGFuZCkKKwkJcmV0dXJuICRsaW5lX29yX3JlZjsKKwl9IGVsc2UgeworCQlyZXR1cm4gcGFyc2VfZGlmZnRyZWVfcmF3X2xpbmUoJGxpbmVfb3JfcmVmKTsKKwl9Cit9CisKKyMgcGFyc2UgbGluZSBvZiBnaXQtbHMtdHJlZSBvdXRwdXQKK3N1YiBwYXJzZV9sc190cmVlX2xpbmUgeworCW15ICRsaW5lID0gc2hpZnQ7CisJbXkgJW9wdHMgPSBAXzsKKwlteSAlcmVzOworCisJaWYgKCRvcHRzeyctbCd9KSB7CisJCSMnMTAwNjQ0IGJsb2IgMGZhM2YzYTY2ZmI2YTEzN2Y2ZWMyYzE5MzUxZWQ0ZDgwNzA3MGZmYSAgIDE2NzE3CXBhbmljLmMnCisJCSRsaW5lID1+IG0vXihbMC05XSspICguKykgKFswLTlhLWZBLUZdezQwfSkgKygtfFswLTldKylcdCguKykkL3M7CisKKwkJJHJlc3snbW9kZSd9ID0gJDE7CisJCSRyZXN7J3R5cGUnfSA9ICQyOworCQkkcmVzeydoYXNoJ30gPSAkMzsKKwkJJHJlc3snc2l6ZSd9ID0gJDQ7CisJCWlmICgkb3B0c3snLXonfSkgeworCQkJJHJlc3snbmFtZSd9ID0gJDU7CisJCX0gZWxzZSB7CisJCQkkcmVzeyduYW1lJ30gPSB1bnF1b3RlKCQ1KTsKKwkJfQorCX0gZWxzZSB7CisJCSMnMTAwNjQ0IGJsb2IgMGZhM2YzYTY2ZmI2YTEzN2Y2ZWMyYzE5MzUxZWQ0ZDgwNzA3MGZmYQlwYW5pYy5jJworCQkkbGluZSA9fiBtL14oWzAtOV0rKSAoLispIChbMC05YS1mQS1GXXs0MH0pXHQoLispJC9zOworCisJCSRyZXN7J21vZGUnfSA9ICQxOworCQkkcmVzeyd0eXBlJ30gPSAkMjsKKwkJJHJlc3snaGFzaCd9ID0gJDM7CisJCWlmICgkb3B0c3snLXonfSkgeworCQkJJHJlc3snbmFtZSd9ID0gJDQ7CisJCX0gZWxzZSB7CisJCQkkcmVzeyduYW1lJ30gPSB1bnF1b3RlKCQ0KTsKKwkJfQorCX0KKworCXJldHVybiB3YW50YXJyYXkgPyAlcmVzIDogXCVyZXM7Cit9CisKKyMgZ2VuZXJhdGVzIF90d29fIGhhc2hlcywgcmVmZXJlbmNlcyB0byB3aGljaCBhcmUgcGFzc2VkIGFzIDIgYW5kIDMgYXJndW1lbnQKK3N1YiBwYXJzZV9mcm9tX3RvX2RpZmZpbmZvIHsKKwlteSAoJGRpZmZpbmZvLCAkZnJvbSwgJHRvLCBAcGFyZW50cykgPSBAXzsKKworCWlmICgkZGlmZmluZm8tPnsnbnBhcmVudHMnfSkgeworCQkjIGNvbWJpbmVkIGRpZmYKKwkJJGZyb20tPnsnZmlsZSd9ID0gW107CisJCSRmcm9tLT57J2hyZWYnfSA9IFtdOworCQlmaWxsX2Zyb21fZmlsZV9pbmZvKCRkaWZmaW5mbywgQHBhcmVudHMpCisJCQl1bmxlc3MgZXhpc3RzICRkaWZmaW5mby0+eydmcm9tX2ZpbGUnfTsKKwkJZm9yIChteSAkaSA9IDA7ICRpIDwgJGRpZmZpbmZvLT57J25wYXJlbnRzJ307ICRpKyspIHsKKwkJCSRmcm9tLT57J2ZpbGUnfVskaV0gPQorCQkJCWRlZmluZWQgJGRpZmZpbmZvLT57J2Zyb21fZmlsZSd9WyRpXSA/CisJCQkJICAgICAgICAkZGlmZmluZm8tPnsnZnJvbV9maWxlJ31bJGldIDoKKwkJCQkgICAgICAgICRkaWZmaW5mby0+eyd0b19maWxlJ307CisJCQlpZiAoJGRpZmZpbmZvLT57J3N0YXR1cyd9WyRpXSBuZSAiQSIpIHsgIyBub3QgbmV3IChhZGRlZCkgZmlsZQorCQkJCSRmcm9tLT57J2hyZWYnfVskaV0gPSBocmVmKGFjdGlvbj0+ImJsb2IiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JHBhcmVudHNbJGldLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmaW5mby0+eydmcm9tX2lkJ31bJGldLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZyb20tPnsnZmlsZSd9WyRpXSk7CisJCQl9IGVsc2UgeworCQkJCSRmcm9tLT57J2hyZWYnfVskaV0gPSB1bmRlZjsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCSMgb3JkaW5hcnkgKG5vdCBjb21iaW5lZCkgZGlmZgorCQkkZnJvbS0+eydmaWxlJ30gPSAkZGlmZmluZm8tPnsnZnJvbV9maWxlJ307CisJCWlmICgkZGlmZmluZm8tPnsnc3RhdHVzJ30gbmUgIkEiKSB7ICMgbm90IG5ldyAoYWRkZWQpIGZpbGUKKwkJCSRmcm9tLT57J2hyZWYnfSA9IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2hfYmFzZT0+JGhhc2hfcGFyZW50LAorCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZmluZm8tPnsnZnJvbV9pZCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRmcm9tLT57J2ZpbGUnfSk7CisJCX0gZWxzZSB7CisJCQlkZWxldGUgJGZyb20tPnsnaHJlZid9OworCQl9CisJfQorCisJJHRvLT57J2ZpbGUnfSA9ICRkaWZmaW5mby0+eyd0b19maWxlJ307CisJaWYgKCFpc19kZWxldGVkKCRkaWZmaW5mbykpIHsgIyBmaWxlIGV4aXN0cyBpbiByZXN1bHQKKwkJJHRvLT57J2hyZWYnfSA9IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2hfYmFzZT0+JGhhc2gsCisJCSAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmaW5mby0+eyd0b19pZCd9LAorCQkgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiR0by0+eydmaWxlJ30pOworCX0gZWxzZSB7CisJCWRlbGV0ZSAkdG8tPnsnaHJlZid9OworCX0KK30KKworIyMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIyMgcGFyc2UgdG8gYXJyYXkgb2YgaGFzaGVzIGZ1bmN0aW9ucworCitzdWIgZ2l0X2dldF9oZWFkc19saXN0IHsKKwlteSAoJGxpbWl0LCBAY2xhc3NlcykgPSBAXzsKKwlAY2xhc3NlcyA9IGdldF9icmFuY2hfcmVmcygpIHVubGVzcyBAY2xhc3NlczsKKwlteSBAcGF0dGVybnMgPSBtYXAgeyAicmVmcy8kXyIgfSBAY2xhc3NlczsKKwlteSBAaGVhZHNsaXN0OworCisJb3BlbiBteSAkZmQsICctfCcsIGdpdF9jbWQoKSwgJ2Zvci1lYWNoLXJlZicsCisJCSgkbGltaXQgPyAnLS1jb3VudD0nLigkbGltaXQrMSkgOiAoKSksICctLXNvcnQ9LWNvbW1pdHRlcmRhdGUnLAorCQknLS1mb3JtYXQ9JShvYmplY3RuYW1lKSAlKHJlZm5hbWUpICUoc3ViamVjdCklMDAlKGNvbW1pdHRlciknLAorCQlAcGF0dGVybnMKKwkJb3IgcmV0dXJuOworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCW15ICVyZWZfaXRlbTsKKworCQljaG9tcCAkbGluZTsKKwkJbXkgKCRyZWZpbmZvLCAkY29tbWl0dGVyaW5mbykgPSBzcGxpdCgvXDAvLCAkbGluZSk7CisJCW15ICgkaGFzaCwgJG5hbWUsICR0aXRsZSkgPSBzcGxpdCgnICcsICRyZWZpbmZvLCAzKTsKKwkJbXkgKCRjb21taXR0ZXIsICRlcG9jaCwgJHR6KSA9CisJCQkoJGNvbW1pdHRlcmluZm8gPX4gL14oLiopIChbMC05XSspICguKikkLyk7CisJCSRyZWZfaXRlbXsnZnVsbG5hbWUnfSAgPSAkbmFtZTsKKwkJbXkgJHN0cmlwX3JlZnMgPSBqb2luICd8JywgbWFwIHsgcXVvdGVtZXRhIH0gZ2V0X2JyYW5jaF9yZWZzKCk7CisJCSRuYW1lID1+IHMhXnJlZnMvKCRzdHJpcF9yZWZzfHJlbW90ZXMpLyEhOworCQkkcmVmX2l0ZW17J25hbWUnfSA9ICRuYW1lOworCQkjIGZvciByZWZzIG5laXRoZXIgaW4gJ2hlYWRzJyBub3IgJ3JlbW90ZXMnIHdlIHdhbnQgdG8KKwkJIyBzaG93IHRoZWlyIHJlZiBkaXIKKwkJbXkgJHJlZl9kaXIgPSAoZGVmaW5lZCAkMSkgPyAkMSA6ICcnOworCQlpZiAoJHJlZl9kaXIgbmUgJycgYW5kICRyZWZfZGlyIG5lICdoZWFkcycgYW5kICRyZWZfZGlyIG5lICdyZW1vdGVzJykgeworCQkgICAgJHJlZl9pdGVteyduYW1lJ30gLj0gJyAoJyAuICRyZWZfZGlyIC4gJyknOworCQl9CisKKwkJJHJlZl9pdGVteydpZCd9ICAgID0gJGhhc2g7CisJCSRyZWZfaXRlbXsndGl0bGUnfSA9ICR0aXRsZSB8fCAnKG5vIGNvbW1pdCBtZXNzYWdlKSc7CisJCSRyZWZfaXRlbXsnZXBvY2gnfSA9ICRlcG9jaDsKKwkJaWYgKCRlcG9jaCkgeworCQkJJHJlZl9pdGVteydhZ2UnfSA9IGFnZV9zdHJpbmcodGltZSAtICRyZWZfaXRlbXsnZXBvY2gnfSk7CisJCX0gZWxzZSB7CisJCQkkcmVmX2l0ZW17J2FnZSd9ID0gInVua25vd24iOworCQl9CisKKwkJcHVzaCBAaGVhZHNsaXN0LCBcJXJlZl9pdGVtOworCX0KKwljbG9zZSAkZmQ7CisKKwlyZXR1cm4gd2FudGFycmF5ID8gQGhlYWRzbGlzdCA6IFxAaGVhZHNsaXN0OworfQorCitzdWIgZ2l0X2dldF90YWdzX2xpc3QgeworCW15ICRsaW1pdCA9IHNoaWZ0OworCW15IEB0YWdzbGlzdDsKKworCW9wZW4gbXkgJGZkLCAnLXwnLCBnaXRfY21kKCksICdmb3ItZWFjaC1yZWYnLAorCQkoJGxpbWl0ID8gJy0tY291bnQ9Jy4oJGxpbWl0KzEpIDogKCkpLCAnLS1zb3J0PS1jcmVhdG9yZGF0ZScsCisJCSctLWZvcm1hdD0lKG9iamVjdG5hbWUpICUob2JqZWN0dHlwZSkgJShyZWZuYW1lKSAnLgorCQknJSgqb2JqZWN0bmFtZSkgJSgqb2JqZWN0dHlwZSkgJShzdWJqZWN0KSUwMCUoY3JlYXRvciknLAorCQkncmVmcy90YWdzJworCQlvciByZXR1cm47CisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJbXkgJXJlZl9pdGVtOworCisJCWNob21wICRsaW5lOworCQlteSAoJHJlZmluZm8sICRjcmVhdG9yaW5mbykgPSBzcGxpdCgvXDAvLCAkbGluZSk7CisJCW15ICgkaWQsICR0eXBlLCAkbmFtZSwgJHJlZmlkLCAkcmVmdHlwZSwgJHRpdGxlKSA9IHNwbGl0KCcgJywgJHJlZmluZm8sIDYpOworCQlteSAoJGNyZWF0b3IsICRlcG9jaCwgJHR6KSA9CisJCQkoJGNyZWF0b3JpbmZvID1+IC9eKC4qKSAoWzAtOV0rKSAoLiopJC8pOworCQkkcmVmX2l0ZW17J2Z1bGxuYW1lJ30gPSAkbmFtZTsKKwkJJG5hbWUgPX4gcyFecmVmcy90YWdzLyEhOworCisJCSRyZWZfaXRlbXsndHlwZSd9ID0gJHR5cGU7CisJCSRyZWZfaXRlbXsnaWQnfSA9ICRpZDsKKwkJJHJlZl9pdGVteyduYW1lJ30gPSAkbmFtZTsKKwkJaWYgKCR0eXBlIGVxICJ0YWciKSB7CisJCQkkcmVmX2l0ZW17J3N1YmplY3QnfSA9ICR0aXRsZTsKKwkJCSRyZWZfaXRlbXsncmVmdHlwZSd9ID0gJHJlZnR5cGU7CisJCQkkcmVmX2l0ZW17J3JlZmlkJ30gICA9ICRyZWZpZDsKKwkJfSBlbHNlIHsKKwkJCSRyZWZfaXRlbXsncmVmdHlwZSd9ID0gJHR5cGU7CisJCQkkcmVmX2l0ZW17J3JlZmlkJ30gICA9ICRpZDsKKwkJfQorCisJCWlmICgkdHlwZSBlcSAidGFnIiB8fCAkdHlwZSBlcSAiY29tbWl0IikgeworCQkJJHJlZl9pdGVteydlcG9jaCd9ID0gJGVwb2NoOworCQkJaWYgKCRlcG9jaCkgeworCQkJCSRyZWZfaXRlbXsnYWdlJ30gPSBhZ2Vfc3RyaW5nKHRpbWUgLSAkcmVmX2l0ZW17J2Vwb2NoJ30pOworCQkJfSBlbHNlIHsKKwkJCQkkcmVmX2l0ZW17J2FnZSd9ID0gInVua25vd24iOworCQkJfQorCQl9CisKKwkJcHVzaCBAdGFnc2xpc3QsIFwlcmVmX2l0ZW07CisJfQorCWNsb3NlICRmZDsKKworCXJldHVybiB3YW50YXJyYXkgPyBAdGFnc2xpc3QgOiBcQHRhZ3NsaXN0OworfQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBmaWxlc3lzdGVtLXJlbGF0ZWQgZnVuY3Rpb25zCisKK3N1YiBnZXRfZmlsZV9vd25lciB7CisJbXkgJHBhdGggPSBzaGlmdDsKKworCW15ICgkZGV2LCAkaW5vLCAkbW9kZSwgJG5saW5rLCAkc3RfdWlkLCAkc3RfZ2lkLCAkcmRldiwgJHNpemUpID0gc3RhdCgkcGF0aCk7CisJbXkgKCRuYW1lLCAkcGFzc3dkLCAkdWlkLCAkZ2lkLCAkcXVvdGEsICRjb21tZW50LCAkZ2NvcywgJGRpciwgJHNoZWxsKSA9IGdldHB3dWlkKCRzdF91aWQpOworCWlmICghZGVmaW5lZCAkZ2NvcykgeworCQlyZXR1cm4gdW5kZWY7CisJfQorCW15ICRvd25lciA9ICRnY29zOworCSRvd25lciA9fiBzL1ssO10uKiQvLzsKKwlyZXR1cm4gdG9fdXRmOCgkb3duZXIpOworfQorCisjIGFzc3VtZSB0aGF0IGZpbGUgZXhpc3RzCitzdWIgaW5zZXJ0X2ZpbGUgeworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCisJb3BlbiBteSAkZmQsICc8JywgJGZpbGVuYW1lOworCXByaW50IG1hcCB7IHRvX3V0ZjgoJF8pIH0gPCRmZD47CisJY2xvc2UgJGZkOworfQorCisjIyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisjIyBtaW1ldHlwZSByZWxhdGVkIGZ1bmN0aW9ucworCitzdWIgbWltZXR5cGVfZ3Vlc3NfZmlsZSB7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJbXkgJG1pbWVtYXAgPSBzaGlmdDsKKwktciAkbWltZW1hcCBvciByZXR1cm4gdW5kZWY7CisKKwlteSAlbWltZW1hcDsKKwlvcGVuKG15ICRtaCwgJzwnLCAkbWltZW1hcCkgb3IgcmV0dXJuIHVuZGVmOworCXdoaWxlICg8JG1oPikgeworCQluZXh0IGlmIG0vXiMvOyAjIHNraXAgY29tbWVudHMKKwkJbXkgKCRtaW1ldHlwZSwgQGV4dHMpID0gc3BsaXQoL1xzKy8pOworCQlmb3JlYWNoIG15ICRleHQgKEBleHRzKSB7CisJCQkkbWltZW1hcHskZXh0fSA9ICRtaW1ldHlwZTsKKwkJfQorCX0KKwljbG9zZSgkbWgpOworCisJJGZpbGVuYW1lID1+IC9cLihbXi5dKikkLzsKKwlyZXR1cm4gJG1pbWVtYXB7JDF9OworfQorCitzdWIgbWltZXR5cGVfZ3Vlc3MgeworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCW15ICRtaW1lOworCSRmaWxlbmFtZSA9fiAvXC4vIG9yIHJldHVybiB1bmRlZjsKKworCWlmICgkbWltZXR5cGVzX2ZpbGUpIHsKKwkJbXkgJGZpbGUgPSAkbWltZXR5cGVzX2ZpbGU7CisJCWlmICgkZmlsZSAhfiBtIV4vISkgeyAjIGlmIGl0IGlzIHJlbGF0aXZlIHBhdGgKKwkJCSMgaXQgaXMgcmVsYXRpdmUgdG8gcHJvamVjdAorCQkJJGZpbGUgPSAiJHByb2plY3Ryb290LyRwcm9qZWN0LyRmaWxlIjsKKwkJfQorCQkkbWltZSA9IG1pbWV0eXBlX2d1ZXNzX2ZpbGUoJGZpbGVuYW1lLCAkZmlsZSk7CisJfQorCSRtaW1lIHx8PSBtaW1ldHlwZV9ndWVzc19maWxlKCRmaWxlbmFtZSwgJy9ldGMvbWltZS50eXBlcycpOworCXJldHVybiAkbWltZTsKK30KKworc3ViIGJsb2JfbWltZXR5cGUgeworCW15ICRmZCA9IHNoaWZ0OworCW15ICRmaWxlbmFtZSA9IHNoaWZ0OworCisJaWYgKCRmaWxlbmFtZSkgeworCQlteSAkbWltZSA9IG1pbWV0eXBlX2d1ZXNzKCRmaWxlbmFtZSk7CisJCSRtaW1lIGFuZCByZXR1cm4gJG1pbWU7CisJfQorCisJIyBqdXN0IGluIGNhc2UKKwlyZXR1cm4gJGRlZmF1bHRfYmxvYl9wbGFpbl9taW1ldHlwZSB1bmxlc3MgJGZkOworCisJaWYgKC1UICRmZCkgeworCQlyZXR1cm4gJ3RleHQvcGxhaW4nOworCX0gZWxzaWYgKCEgJGZpbGVuYW1lKSB7CisJCXJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJzsKKwl9IGVsc2lmICgkZmlsZW5hbWUgPX4gbS9cLnBuZyQvaSkgeworCQlyZXR1cm4gJ2ltYWdlL3BuZyc7CisJfSBlbHNpZiAoJGZpbGVuYW1lID1+IG0vXC5naWYkL2kpIHsKKwkJcmV0dXJuICdpbWFnZS9naWYnOworCX0gZWxzaWYgKCRmaWxlbmFtZSA9fiBtL1wuanBlP2ckL2kpIHsKKwkJcmV0dXJuICdpbWFnZS9qcGVnJzsKKwl9IGVsc2UgeworCQlyZXR1cm4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CisJfQorfQorCitzdWIgYmxvYl9jb250ZW50dHlwZSB7CisJbXkgKCRmZCwgJGZpbGVfbmFtZSwgJHR5cGUpID0gQF87CisKKwkkdHlwZSB8fD0gYmxvYl9taW1ldHlwZSgkZmQsICRmaWxlX25hbWUpOworCWlmICgkdHlwZSBlcSAndGV4dC9wbGFpbicgJiYgZGVmaW5lZCAkZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQpIHsKKwkJJHR5cGUgLj0gIjsgY2hhcnNldD0kZGVmYXVsdF90ZXh0X3BsYWluX2NoYXJzZXQiOworCX0KKworCXJldHVybiAkdHlwZTsKK30KKworIyBndWVzcyBmaWxlIHN5bnRheCBmb3Igc3ludGF4IGhpZ2hsaWdodGluZzsgcmV0dXJuIHVuZGVmIGlmIG5vIGhpZ2hsaWdodGluZworIyB0aGUgbmFtZSBvZiBzeW50YXggY2FuIChpbiB0aGUgZnV0dXJlKSBkZXBlbmQgb24gc3ludGF4IGhpZ2hsaWdodGVyIHVzZWQKK3N1YiBndWVzc19maWxlX3N5bnRheCB7CisJbXkgKCRoaWdobGlnaHQsICRtaW1ldHlwZSwgJGZpbGVfbmFtZSkgPSBAXzsKKwlyZXR1cm4gdW5kZWYgdW5sZXNzICgkaGlnaGxpZ2h0ICYmIGRlZmluZWQgJGZpbGVfbmFtZSk7CisJbXkgJGJhc2VuYW1lID0gYmFzZW5hbWUoJGZpbGVfbmFtZSwgJy5pbicpOworCXJldHVybiAkaGlnaGxpZ2h0X2Jhc2VuYW1leyRiYXNlbmFtZX0KKwkJaWYgZXhpc3RzICRoaWdobGlnaHRfYmFzZW5hbWV7JGJhc2VuYW1lfTsKKworCSRiYXNlbmFtZSA9fiAvXC4oW14uXSopJC87CisJbXkgJGV4dCA9ICQxIG9yIHJldHVybiB1bmRlZjsKKwlyZXR1cm4gJGhpZ2hsaWdodF9leHR7JGV4dH0KKwkJaWYgZXhpc3RzICRoaWdobGlnaHRfZXh0eyRleHR9OworCisJcmV0dXJuIHVuZGVmOworfQorCisjIHJ1biBoaWdobGlnaHRlciBhbmQgcmV0dXJuIEZEIG9mIGl0cyBvdXRwdXQsCisjIG9yIHJldHVybiBvcmlnaW5hbCBGRCBpZiBubyBoaWdobGlnaHRpbmcKK3N1YiBydW5faGlnaGxpZ2h0ZXIgeworCW15ICgkZmQsICRoaWdobGlnaHQsICRzeW50YXgpID0gQF87CisJcmV0dXJuICRmZCB1bmxlc3MgKCRoaWdobGlnaHQgJiYgZGVmaW5lZCAkc3ludGF4KTsKKworCWNsb3NlICRmZDsKKwlvcGVuICRmZCwgcXVvdGVfY29tbWFuZChnaXRfY21kKCksICJjYXQtZmlsZSIsICJibG9iIiwgJGhhc2gpLiIgfCAiLgorCSAgICAgICAgICBxdW90ZV9jb21tYW5kKCRoaWdobGlnaHRfYmluKS4KKwkgICAgICAgICAgIiAtLXJlcGxhY2UtdGFicz04IC0tZnJhZ21lbnQgLS1zeW50YXggJHN5bnRheCB8IgorCQlvciBkaWVfZXJyb3IoNTAwLCAiQ291bGRuJ3Qgb3BlbiBmaWxlIG9yIHJ1biBzeW50YXggaGlnaGxpZ2h0ZXIiKTsKKwlyZXR1cm4gJGZkOworfQorCisjIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIyBmdW5jdGlvbnMgcHJpbnRpbmcgSFRNTDogaGVhZGVyLCBmb290ZXIsIGVycm9yIHBhZ2UKKworc3ViIGdldF9wYWdlX3RpdGxlIHsKKwlteSAkdGl0bGUgPSB0b191dGY4KCRzaXRlX25hbWUpOworCisJdW5sZXNzIChkZWZpbmVkICRwcm9qZWN0KSB7CisJCWlmIChkZWZpbmVkICRwcm9qZWN0X2ZpbHRlcikgeworCQkJJHRpdGxlIC49ICIgLSBwcm9qZWN0cyBpbiAnIiAuIGVzY19wYXRoKCRwcm9qZWN0X2ZpbHRlcikgLiAiJyI7CisJCX0KKwkJcmV0dXJuICR0aXRsZTsKKwl9CisJJHRpdGxlIC49ICIgLSAiIC4gdG9fdXRmOCgkcHJvamVjdCk7CisKKwlyZXR1cm4gJHRpdGxlIHVubGVzcyAoZGVmaW5lZCAkYWN0aW9uKTsKKwkkdGl0bGUgLj0gIi8kYWN0aW9uIjsgIyAkYWN0aW9uIGlzIFVTLUFTQ0lJICg3Yml0IEFTQ0lJKQorCisJcmV0dXJuICR0aXRsZSB1bmxlc3MgKGRlZmluZWQgJGZpbGVfbmFtZSk7CisJJHRpdGxlIC49ICIgLSAiIC4gZXNjX3BhdGgoJGZpbGVfbmFtZSk7CisJaWYgKCRhY3Rpb24gZXEgInRyZWUiICYmICRmaWxlX25hbWUgIX4gbXwvJHwpIHsKKwkJJHRpdGxlIC49ICIvIjsKKwl9CisKKwlyZXR1cm4gJHRpdGxlOworfQorCitzdWIgZ2V0X2NvbnRlbnRfdHlwZV9odG1sIHsKKwkjIHJlcXVpcmUgZXhwbGljaXQgc3VwcG9ydCBmcm9tIHRoZSBVQSBpZiB3ZSBhcmUgdG8gc2VuZCB0aGUgcGFnZSBhcworCSMgJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsIG90aGVyd2lzZSBzZW5kIGl0IGFzIHBsYWluIG9sZCAndGV4dC9odG1sJy4KKwkjIHdlIGhhdmUgdG8gZG8gdGhpcyBiZWNhdXNlIE1TSUUgc29tZXRpbWVzIGdsb2JzICcqLyonLCBwcmV0ZW5kaW5nIHRvCisJIyBzdXBwb3J0IHhodG1sK3htbCBidXQgY2hva2luZyB3aGVuIGl0IGdldHMgd2hhdCBpdCBhc2tlZCBmb3IuCisJaWYgKGRlZmluZWQgJGNnaS0+aHR0cCgnSFRUUF9BQ0NFUFQnKSAmJgorCSAgICAkY2dpLT5odHRwKCdIVFRQX0FDQ0VQVCcpID1+IG0vKCx8O3xcc3xeKWFwcGxpY2F0aW9uXC94aHRtbFwreG1sKCx8O3xcc3wkKS8gJiYKKwkgICAgJGNnaS0+QWNjZXB0KCdhcHBsaWNhdGlvbi94aHRtbCt4bWwnKSAhPSAwKSB7CisJCXJldHVybiAnYXBwbGljYXRpb24veGh0bWwreG1sJzsKKwl9IGVsc2UgeworCQlyZXR1cm4gJ3RleHQvaHRtbCc7CisJfQorfQorCitzdWIgcHJpbnRfZmVlZF9tZXRhIHsKKwlpZiAoZGVmaW5lZCAkcHJvamVjdCkgeworCQlteSAlaHJlZl9wYXJhbXMgPSBnZXRfZmVlZF9pbmZvKCk7CisJCWlmICghZXhpc3RzICRocmVmX3BhcmFtc3snLXRpdGxlJ30pIHsKKwkJCSRocmVmX3BhcmFtc3snLXRpdGxlJ30gPSAnbG9nJzsKKwkJfQorCisJCWZvcmVhY2ggbXkgJGZvcm1hdCAocXcoUlNTIEF0b20pKSB7CisJCQlteSAkdHlwZSA9IGxjKCRmb3JtYXQpOworCQkJbXkgJWxpbmtfYXR0ciA9ICgKKwkJCQknLXJlbCcgPT4gJ2FsdGVybmF0ZScsCisJCQkJJy10aXRsZScgPT4gZXNjX2F0dHIoIiRwcm9qZWN0IC0gJGhyZWZfcGFyYW1zeyctdGl0bGUnfSAtICRmb3JtYXQgZmVlZCIpLAorCQkJCSctdHlwZScgPT4gImFwcGxpY2F0aW9uLyR0eXBlK3htbCIKKwkJCSk7CisKKwkJCSRocmVmX3BhcmFtc3snZXh0cmFfb3B0aW9ucyd9ID0gdW5kZWY7CisJCQkkaHJlZl9wYXJhbXN7J2FjdGlvbid9ID0gJHR5cGU7CisJCQkkbGlua19hdHRyeyctaHJlZid9ID0gaHJlZiglaHJlZl9wYXJhbXMpOworCQkJcHJpbnQgIjxsaW5rICIuCisJCQkgICAgICAicmVsPVwiJGxpbmtfYXR0cnsnLXJlbCd9XCIgIi4KKwkJCSAgICAgICJ0aXRsZT1cIiRsaW5rX2F0dHJ7Jy10aXRsZSd9XCIgIi4KKwkJCSAgICAgICJocmVmPVwiJGxpbmtfYXR0cnsnLWhyZWYnfVwiICIuCisJCQkgICAgICAidHlwZT1cIiRsaW5rX2F0dHJ7Jy10eXBlJ31cIiAiLgorCQkJICAgICAgIi8+XG4iOworCisJCQkkaHJlZl9wYXJhbXN7J2V4dHJhX29wdGlvbnMnfSA9ICctLW5vLW1lcmdlcyc7CisJCQkkbGlua19hdHRyeyctaHJlZid9ID0gaHJlZiglaHJlZl9wYXJhbXMpOworCQkJJGxpbmtfYXR0cnsnLXRpdGxlJ30gLj0gJyAobm8gbWVyZ2VzKSc7CisJCQlwcmludCAiPGxpbmsgIi4KKwkJCSAgICAgICJyZWw9XCIkbGlua19hdHRyeyctcmVsJ31cIiAiLgorCQkJICAgICAgInRpdGxlPVwiJGxpbmtfYXR0cnsnLXRpdGxlJ31cIiAiLgorCQkJICAgICAgImhyZWY9XCIkbGlua19hdHRyeyctaHJlZid9XCIgIi4KKwkJCSAgICAgICJ0eXBlPVwiJGxpbmtfYXR0cnsnLXR5cGUnfVwiICIuCisJCQkgICAgICAiLz5cbiI7CisJCX0KKworCX0gZWxzZSB7CisJCXByaW50ZignPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSIlcyBwcm9qZWN0cyBsaXN0IiAnLgorCQkgICAgICAgJ2hyZWY9IiVzIiB0eXBlPSJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiAvPicuIlxuIiwKKwkJICAgICAgIGVzY19hdHRyKCRzaXRlX25hbWUpLCBocmVmKHByb2plY3Q9PnVuZGVmLCBhY3Rpb249PiJwcm9qZWN0X2luZGV4IikpOworCQlwcmludGYoJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iJXMgcHJvamVjdHMgZmVlZHMiICcuCisJCSAgICAgICAnaHJlZj0iJXMiIHR5cGU9InRleHQveC1vcG1sIiAvPicuIlxuIiwKKwkJICAgICAgIGVzY19hdHRyKCRzaXRlX25hbWUpLCBocmVmKHByb2plY3Q9PnVuZGVmLCBhY3Rpb249PiJvcG1sIikpOworCX0KK30KKworc3ViIHByaW50X2hlYWRlcl9saW5rcyB7CisJbXkgJHN0YXR1cyA9IHNoaWZ0OworCisJIyBwcmludCBvdXQgZWFjaCBzdHlsZXNoZWV0IHRoYXQgZXhpc3QsIHByb3ZpZGluZyBiYWNrd2FyZHMgY2FwYWJpbGl0eQorCSMgZm9yIHRob3NlIHBlb3BsZSB3aG8gZGVmaW5lZCAkc3R5bGVzaGVldCBpbiBhIGNvbmZpZyBmaWxlCisJaWYgKGRlZmluZWQgJHN0eWxlc2hlZXQpIHsKKwkJcHJpbnQgJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuZXNjX3VybCgkc3R5bGVzaGVldCkuJyIvPicuIlxuIjsKKwl9IGVsc2UgeworCQlmb3JlYWNoIG15ICRzdHlsZXNoZWV0IChAc3R5bGVzaGVldHMpIHsKKwkJCW5leHQgdW5sZXNzICRzdHlsZXNoZWV0OworCQkJcHJpbnQgJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuZXNjX3VybCgkc3R5bGVzaGVldCkuJyIvPicuIlxuIjsKKwkJfQorCX0KKwlwcmludF9mZWVkX21ldGEoKQorCQlpZiAoJHN0YXR1cyBlcSAnMjAwIE9LJyk7CisJaWYgKGRlZmluZWQgJGZhdmljb24pIHsKKwkJcHJpbnQgcXEoPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSIpLmVzY191cmwoJGZhdmljb24pLnFxKCIgdHlwZT0iaW1hZ2UvcG5nIiAvPlxuKTsKKwl9Cit9CisKK3N1YiBwcmludF9uYXZfYnJlYWRjcnVtYnNfcGF0aCB7CisJbXkgJGRpcnByZWZpeCA9IHVuZGVmOworCXdoaWxlIChteSAkcGFydCA9IHNoaWZ0KSB7CisJCSRkaXJwcmVmaXggLj0gIi8iIGlmIGRlZmluZWQgJGRpcnByZWZpeDsKKwkJJGRpcnByZWZpeCAuPSAkcGFydDsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0ID0+IHVuZGVmLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RfZmlsdGVyID0+ICRkaXJwcmVmaXgsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0+ICJwcm9qZWN0X2xpc3QiKX0sCisJCQkgICAgICBlc2NfaHRtbCgkcGFydCkpIC4gIiAvICI7CisJfQorfQorCitzdWIgcHJpbnRfbmF2X2JyZWFkY3J1bWJzIHsKKwlteSAlb3B0cyA9IEBfOworCisJZm9yIG15ICRjcnVtYiAoQGV4dHJhX2JyZWFkY3J1bWJzLCBbICRob21lX2xpbmtfc3RyID0+ICRob21lX2xpbmsgXSkgeworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBlc2NfdXJsKCRjcnVtYi0+WzFdKX0sICRjcnVtYi0+WzBdKSAuICIgLyAiOworCX0KKwlpZiAoZGVmaW5lZCAkcHJvamVjdCkgeworCQlteSBAZGlybmFtZSA9IHNwbGl0ICcvJywgJHByb2plY3Q7CisJCW15ICRwcm9qZWN0YmFzZW5hbWUgPSBwb3AgQGRpcm5hbWU7CisJCXByaW50X25hdl9icmVhZGNydW1ic19wYXRoKEBkaXJuYW1lKTsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzdW1tYXJ5Iil9LCBlc2NfaHRtbCgkcHJvamVjdGJhc2VuYW1lKSk7CisJCWlmIChkZWZpbmVkICRhY3Rpb24pIHsKKwkJCW15ICRhY3Rpb25fcHJpbnQgPSAkYWN0aW9uIDsKKwkJCWlmIChkZWZpbmVkICRvcHRzey1hY3Rpb25fZXh0cmF9KSB7CisJCQkJJGFjdGlvbl9wcmludCA9ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kYWN0aW9uKX0sCisJCQkJCSRhY3Rpb24pOworCQkJfQorCQkJcHJpbnQgIiAvICRhY3Rpb25fcHJpbnQiOworCQl9CisJCWlmIChkZWZpbmVkICRvcHRzey1hY3Rpb25fZXh0cmF9KSB7CisJCQlwcmludCAiIC8gJG9wdHN7LWFjdGlvbl9leHRyYX0iOworCQl9CisJCXByaW50ICJcbiI7CisJfSBlbHNpZiAoZGVmaW5lZCAkcHJvamVjdF9maWx0ZXIpIHsKKwkJcHJpbnRfbmF2X2JyZWFkY3J1bWJzX3BhdGgoc3BsaXQgJy8nLCAkcHJvamVjdF9maWx0ZXIpOworCX0KK30KKworc3ViIHByaW50X3NlYXJjaF9mb3JtIHsKKwlpZiAoIWRlZmluZWQgJHNlYXJjaHRleHQpIHsKKwkJJHNlYXJjaHRleHQgPSAiIjsKKwl9CisJbXkgJHNlYXJjaF9oYXNoOworCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UpIHsKKwkJJHNlYXJjaF9oYXNoID0gJGhhc2hfYmFzZTsKKwl9IGVsc2lmIChkZWZpbmVkICRoYXNoKSB7CisJCSRzZWFyY2hfaGFzaCA9ICRoYXNoOworCX0gZWxzZSB7CisJCSRzZWFyY2hfaGFzaCA9ICJIRUFEIjsKKwl9CisJbXkgJGFjdGlvbiA9ICRteV91cmk7CisJbXkgJHVzZV9wYXRoaW5mbyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdwYXRoaW5mbycpOworCWlmICgkdXNlX3BhdGhpbmZvKSB7CisJCSRhY3Rpb24gLj0gIi8iLmVzY191cmwoJHByb2plY3QpOworCX0KKwlwcmludCAkY2dpLT5zdGFydF9mb3JtKC1tZXRob2QgPT4gImdldCIsIC1hY3Rpb24gPT4gJGFjdGlvbikgLgorCSAgICAgICI8ZGl2IGNsYXNzPVwic2VhcmNoXCI+XG4iIC4KKwkgICAgICAoISR1c2VfcGF0aGluZm8gJiYKKwkgICAgICAkY2dpLT5pbnB1dCh7LW5hbWU9PiJwIiwgLXZhbHVlPT4kcHJvamVjdCwgLXR5cGU9PiJoaWRkZW4ifSkgLiAiXG4iKSAuCisJICAgICAgJGNnaS0+aW5wdXQoey1uYW1lPT4iYSIsIC12YWx1ZT0+InNlYXJjaCIsIC10eXBlPT4iaGlkZGVuIn0pIC4gIlxuIiAuCisJICAgICAgJGNnaS0+aW5wdXQoey1uYW1lPT4iaCIsIC12YWx1ZT0+JHNlYXJjaF9oYXNoLCAtdHlwZT0+ImhpZGRlbiJ9KSAuICJcbiIgLgorCSAgICAgICRjZ2ktPnBvcHVwX21lbnUoLW5hbWUgPT4gJ3N0JywgLWRlZmF1bHQgPT4gJ2NvbW1pdCcsCisJICAgICAgICAgICAgICAgICAgICAgICAtdmFsdWVzID0+IFsnY29tbWl0JywgJ2dyZXAnLCAnYXV0aG9yJywgJ2NvbW1pdHRlcicsICdwaWNrYXhlJ10pIC4KKwkgICAgICAiICIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InNlYXJjaF9oZWxwIiksCisJCQkgICAgIC10aXRsZSA9PiAic2VhcmNoIGhlbHAiIH0sICI/IikgLiAiIHNlYXJjaDpcbiIsCisJICAgICAgJGNnaS0+dGV4dGZpZWxkKC1uYW1lID0+ICJzIiwgLXZhbHVlID0+ICRzZWFyY2h0ZXh0LCAtb3ZlcnJpZGUgPT4gMSkgLiAiXG4iIC4KKwkgICAgICAiPHNwYW4gdGl0bGU9XCJFeHRlbmRlZCByZWd1bGFyIGV4cHJlc3Npb25cIj4iIC4KKwkgICAgICAkY2dpLT5jaGVja2JveCgtbmFtZSA9PiAnc3InLCAtdmFsdWUgPT4gMSwgLWxhYmVsID0+ICdyZScsCisJICAgICAgICAgICAgICAgICAgICAgLWNoZWNrZWQgPT4gJHNlYXJjaF91c2VfcmVnZXhwKSAuCisJICAgICAgIjwvc3Bhbj4iIC4KKwkgICAgICAiPC9kaXY+IiAuCisJICAgICAgJGNnaS0+ZW5kX2Zvcm0oKSAuICJcbiI7Cit9CisKK3N1YiBnaXRfaGVhZGVyX2h0bWwgeworCW15ICRzdGF0dXMgPSBzaGlmdCB8fCAiMjAwIE9LIjsKKwlteSAkZXhwaXJlcyA9IHNoaWZ0OworCW15ICVvcHRzID0gQF87CisKKwlteSAkdGl0bGUgPSBnZXRfcGFnZV90aXRsZSgpOworCW15ICRjb250ZW50X3R5cGUgPSBnZXRfY29udGVudF90eXBlX2h0bWwoKTsKKwlwcmludCAkY2dpLT5oZWFkZXIoLXR5cGU9PiRjb250ZW50X3R5cGUsIC1jaGFyc2V0ID0+ICd1dGYtOCcsCisJICAgICAgICAgICAgICAgICAgIC1zdGF0dXM9PiAkc3RhdHVzLCAtZXhwaXJlcyA9PiAkZXhwaXJlcykKKwkJdW5sZXNzICgkb3B0c3snLW5vX2h0dHBfaGVhZGVyJ30pOworCW15ICRtb2RfcGVybF92ZXJzaW9uID0gJEVOVnsnTU9EX1BFUkwnfSA/ICIgJEVOVnsnTU9EX1BFUkwnfSIgOiAnJzsKKwlwcmludCA8PEVPRjsKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuLVVTIiBsYW5nPSJlbi1VUyI+Cis8IS0tIGdpdCB3ZWIgaW50ZXJmYWNlIHZlcnNpb24gJHZlcnNpb24sIChDKSAyMDA1LTIwMDYsIEtheSBTaWV2ZXJzIDxrYXkuc2lldmVyc1xAdnJmeS5vcmc+LCBDaHJpc3RpYW4gR2llcmtlIC0tPgorPCEtLSBnaXQgY29yZSBiaW5hcmllcyB2ZXJzaW9uICRnaXRfdmVyc2lvbiAtLT4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSIkY29udGVudF90eXBlOyBjaGFyc2V0PXV0Zi04Ii8+Cis8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9ImdpdHdlYi8kdmVyc2lvbiBnaXQvJGdpdF92ZXJzaW9uJG1vZF9wZXJsX3ZlcnNpb24iLz4KKzxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iaW5kZXgsIG5vZm9sbG93Ii8+Cis8dGl0bGU+JHRpdGxlPC90aXRsZT4KK0VPRgorCSMgdGhlIHN0eWxlc2hlZXQsIGZhdmljb24gZXRjIHVybHMgd29uJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCBwYXRoX2luZm8KKwkjIHVubGVzcyB3ZSBzZXQgdGhlIGFwcHJvcHJpYXRlIGJhc2UgVVJMCisJaWYgKCRFTlZ7J1BBVEhfSU5GTyd9KSB7CisJCXByaW50ICI8YmFzZSBocmVmPVwiIi5lc2NfdXJsKCRiYXNlX3VybCkuIlwiIC8+XG4iOworCX0KKwlwcmludF9oZWFkZXJfbGlua3MoJHN0YXR1cyk7CisKKwlpZiAoZGVmaW5lZCAkc2l0ZV9odG1sX2hlYWRfc3RyaW5nKSB7CisJCXByaW50IHRvX3V0ZjgoJHNpdGVfaHRtbF9oZWFkX3N0cmluZyk7CisJfQorCisJcHJpbnQgIjwvaGVhZD5cbiIgLgorCSAgICAgICI8Ym9keT5cbiI7CisKKwlpZiAoZGVmaW5lZCAkc2l0ZV9oZWFkZXIgJiYgLWYgJHNpdGVfaGVhZGVyKSB7CisJCWluc2VydF9maWxlKCRzaXRlX2hlYWRlcik7CisJfQorCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2hlYWRlclwiPlxuIjsKKwlpZiAoZGVmaW5lZCAkbG9nbykgeworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBlc2NfdXJsKCRsb2dvX3VybCksCisJCSAgICAgICAgICAgICAgIC10aXRsZSA9PiAkbG9nb19sYWJlbH0sCisJCSAgICAgICAgICAgICAgJGNnaS0+aW1nKHstc3JjID0+IGVzY191cmwoJGxvZ28pLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgLXdpZHRoID0+IDcyLCAtaGVpZ2h0ID0+IDI3LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgLWFsdCA9PiAiZ2l0IiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibG9nbyJ9KSk7CisJfQorCXByaW50X25hdl9icmVhZGNydW1icyglb3B0cyk7CisJcHJpbnQgIjwvZGl2PlxuIjsKKworCW15ICRoYXZlX3NlYXJjaCA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdzZWFyY2gnKTsKKwlpZiAoZGVmaW5lZCAkcHJvamVjdCAmJiAkaGF2ZV9zZWFyY2gpIHsKKwkJcHJpbnRfc2VhcmNoX2Zvcm0oKTsKKwl9Cit9CisKK3N1YiBnaXRfZm9vdGVyX2h0bWwgeworCW15ICRmZWVkX2NsYXNzID0gJ3Jzc19sb2dvJzsKKworCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9mb290ZXJcIj5cbiI7CisJaWYgKGRlZmluZWQgJHByb2plY3QpIHsKKwkJbXkgJGRlc2NyID0gZ2l0X2dldF9wcm9qZWN0X2Rlc2NyaXB0aW9uKCRwcm9qZWN0KTsKKwkJaWYgKGRlZmluZWQgJGRlc2NyKSB7CisJCQlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfZm9vdGVyX3RleHRcIj4iIC4gZXNjX2h0bWwoJGRlc2NyKSAuICI8L2Rpdj5cbiI7CisJCX0KKworCQlteSAlaHJlZl9wYXJhbXMgPSBnZXRfZmVlZF9pbmZvKCk7CisJCWlmICghJWhyZWZfcGFyYW1zKSB7CisJCQkkZmVlZF9jbGFzcyAuPSAnIGdlbmVyaWMnOworCQl9CisJCSRocmVmX3BhcmFtc3snLXRpdGxlJ30gfHw9ICdsb2cnOworCisJCWZvcmVhY2ggbXkgJGZvcm1hdCAocXcoUlNTIEF0b20pKSB7CisJCQkkaHJlZl9wYXJhbXN7J2FjdGlvbid9ID0gbGMoJGZvcm1hdCk7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKCVocmVmX3BhcmFtcyksCisJCQkgICAgICAgICAgICAgIC10aXRsZSA9PiAiJGhyZWZfcGFyYW1zeyctdGl0bGUnfSAkZm9ybWF0IGZlZWQiLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gJGZlZWRfY2xhc3N9LCAkZm9ybWF0KS4iXG4iOworCQl9CisKKwl9IGVsc2UgeworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PnVuZGVmLCBhY3Rpb249PiJvcG1sIiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0X2ZpbHRlciA9PiAkcHJvamVjdF9maWx0ZXIpLAorCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAkZmVlZF9jbGFzc30sICJPUE1MIikgLiAiICI7CisJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdD0+dW5kZWYsIGFjdGlvbj0+InByb2plY3RfaW5kZXgiLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2plY3RfZmlsdGVyID0+ICRwcm9qZWN0X2ZpbHRlciksCisJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICRmZWVkX2NsYXNzfSwgIlRYVCIpIC4gIlxuIjsKKwl9CisJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGFnZV9mb290ZXIiCisKKwlpZiAoZGVmaW5lZCAkdDAgJiYgZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3RpbWVkJykpIHsKKwkJcHJpbnQgIjxkaXYgaWQ9XCJnZW5lcmF0aW5nX2luZm9cIj5cbiI7CisJCXByaW50ICdUaGlzIHBhZ2UgdG9vayAnLgorCQkgICAgICAnPHNwYW4gaWQ9ImdlbmVyYXRpbmdfdGltZSIgY2xhc3M9InRpbWVfc3BhbiI+Jy4KKwkJICAgICAgdHZfaW50ZXJ2YWwoJHQwLCBbIGdldHRpbWVvZmRheSgpIF0pLgorCQkgICAgICAnIHNlY29uZHMgPC9zcGFuPicuCisJCSAgICAgICcgYW5kICcuCisJCSAgICAgICc8c3BhbiBpZD0iZ2VuZXJhdGluZ19jbWQiPicuCisJCSAgICAgICRudW1iZXJfb2ZfZ2l0X2NtZHMuCisJCSAgICAgICc8L3NwYW4+IGdpdCBjb21tYW5kcyAnLgorCQkgICAgICAiIHRvIGdlbmVyYXRlLlxuIjsKKwkJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGFnZV9mb290ZXIiCisJfQorCisJaWYgKGRlZmluZWQgJHNpdGVfZm9vdGVyICYmIC1mICRzaXRlX2Zvb3RlcikgeworCQlpbnNlcnRfZmlsZSgkc2l0ZV9mb290ZXIpOworCX0KKworCXByaW50IHFxITxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IiEuZXNjX3VybCgkamF2YXNjcmlwdCkucXEhIj48L3NjcmlwdD5cbiE7CisJaWYgKGRlZmluZWQgJGFjdGlvbiAmJgorCSAgICAkYWN0aW9uIGVxICdibGFtZV9pbmNyZW1lbnRhbCcpIHsKKwkJcHJpbnQgcXEhPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPlxuIS4KKwkJICAgICAgcXEhc3RhcnRCbGFtZSgiIS4gaHJlZihhY3Rpb249PiJibGFtZV9kYXRhIiwgLXJlcGxheT0+MSkgLnFxISIsXG4hLgorCQkgICAgICBxcSEgICAgICAgICAgICIhLiBocmVmKCkgLnFxISIpO1xuIS4KKwkJICAgICAgcXEhPC9zY3JpcHQ+XG4hOworCX0gZWxzZSB7CisJCW15ICgkanN0aW1lem9uZSwgJHR6X2Nvb2tpZSwgJGRhdGV0aW1lX2NsYXNzKSA9CisJCQlnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ2phdmFzY3JpcHQtdGltZXpvbmUnKTsKKworCQlwcmludCBxcSE8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+XG4hLgorCQkgICAgICBxcSF3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkge1xuITsKKwkJaWYgKGdpdHdlYl9jaGVja19mZWF0dXJlKCdqYXZhc2NyaXB0LWFjdGlvbnMnKSkgeworCQkJcHJpbnQgcXEhCWZpeExpbmtzKCk7XG4hOworCQl9CisJCWlmICgkanN0aW1lem9uZSAmJiAkdHpfY29va2llICYmICRkYXRldGltZV9jbGFzcykgeworCQkJcHJpbnQgcXEhCXZhciB0el9jb29raWUgPSB7IG5hbWU6ICckdHpfY29va2llJywgZXhwaXJlczogMTQsIHBhdGg6ICcvJyB9O1xuIS4gIyBpbiBkYXlzCisJCQkgICAgICBxcSEJb25sb2FkVFpTZXR1cCgnJGpzdGltZXpvbmUnLCB0el9jb29raWUsICckZGF0ZXRpbWVfY2xhc3MnKTtcbiE7CisJCX0KKwkJcHJpbnQgcXEhfTtcbiEuCisJCSAgICAgIHFxITwvc2NyaXB0PlxuITsKKwl9CisKKwlwcmludCAiPC9ib2R5PlxuIiAuCisJICAgICAgIjwvaHRtbD4iOworfQorCisjIGRpZV9lcnJvcig8aHR0cF9zdGF0dXNfY29kZT4sIDxlcnJvcl9tZXNzYWdlPlssIDxkZXRhaWxlZF9odG1sX2Rlc2NyaXB0aW9uPl0pCisjIEV4YW1wbGU6IGRpZV9lcnJvcig0MDQsICdIYXNoIG5vdCBmb3VuZCcpCisjIEJ5IGNvbnZlbnRpb24sIHVzZSB0aGUgZm9sbG93aW5nIHN0YXR1cyBjb2RlcyAoYXMgZGVmaW5lZCBpbiBSRkMgMjYxNik6CisjIDQwMDogSW52YWxpZCBvciBtaXNzaW5nIENHSSBwYXJhbWV0ZXJzLCBvcgorIyAgICAgIHJlcXVlc3RlZCBvYmplY3QgZXhpc3RzIGJ1dCBoYXMgd3JvbmcgdHlwZS4KKyMgNDAzOiBSZXF1ZXN0ZWQgZmVhdHVyZSAobGlrZSAicGlja2F4ZSIgb3IgInNuYXBzaG90Iikgbm90IGVuYWJsZWQgb24KKyMgICAgICB0aGlzIHNlcnZlciBvciBwcm9qZWN0LgorIyA0MDQ6IFJlcXVlc3RlZCBvYmplY3QvcmV2aXNpb24vcHJvamVjdCBkb2Vzbid0IGV4aXN0LgorIyA1MDA6IFRoZSBzZXJ2ZXIgaXNuJ3QgY29uZmlndXJlZCBwcm9wZXJseSwgb3IKKyMgICAgICBhbiBpbnRlcm5hbCBlcnJvciBvY2N1cnJlZCAoZS5nLiBmYWlsZWQgYXNzZXJ0aW9ucyBjYXVzZWQgYnkgYnVncyksIG9yCisjICAgICAgYW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCAoZS5nLiB0aGUgZ2l0IGJpbmFyeSBkaWVkIHVuZXhwZWN0ZWRseSkuCisjIDUwMzogVGhlIHNlcnZlciBpcyBjdXJyZW50bHkgdW5hdmFpbGFibGUgKGJlY2F1c2UgaXQgaXMgb3ZlcmxvYWRlZCwKKyMgICAgICBvciBkb3duIGZvciBtYWludGVuYW5jZSkuICBHZW5lcmFsbHksIHRoaXMgaXMgYSB0ZW1wb3Jhcnkgc3RhdGUuCitzdWIgZGllX2Vycm9yIHsKKwlteSAkc3RhdHVzID0gc2hpZnQgfHwgNTAwOworCW15ICRlcnJvciA9IGVzY19odG1sKHNoaWZ0KSB8fCAiSW50ZXJuYWwgU2VydmVyIEVycm9yIjsKKwlteSAkZXh0cmEgPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCisJbXkgJWh0dHBfcmVzcG9uc2VzID0gKAorCQk0MDAgPT4gJzQwMCBCYWQgUmVxdWVzdCcsCisJCTQwMyA9PiAnNDAzIEZvcmJpZGRlbicsCisJCTQwNCA9PiAnNDA0IE5vdCBGb3VuZCcsCisJCTUwMCA9PiAnNTAwIEludGVybmFsIFNlcnZlciBFcnJvcicsCisJCTUwMyA9PiAnNTAzIFNlcnZpY2UgVW5hdmFpbGFibGUnLAorCSk7CisJZ2l0X2hlYWRlcl9odG1sKCRodHRwX3Jlc3BvbnNlc3skc3RhdHVzfSwgdW5kZWYsICVvcHRzKTsKKwlwcmludCA8PEVPRjsKKzxkaXYgY2xhc3M9InBhZ2VfYm9keSI+Cis8YnIgLz48YnIgLz4KKyRzdGF0dXMgLSAkZXJyb3IKKzxiciAvPgorRU9GCisJaWYgKGRlZmluZWQgJGV4dHJhKSB7CisJCXByaW50ICI8aHIgLz5cbiIgLgorCQkgICAgICAiJGV4dHJhXG4iOworCX0KKwlwcmludCAiPC9kaXY+XG4iOworCisJZ2l0X2Zvb3Rlcl9odG1sKCk7CisJZ290byBET05FX0dJVFdFQgorCQl1bmxlc3MgKCRvcHRzeyctZXJyb3JfaGFuZGxlcid9KTsKK30KKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyMgZnVuY3Rpb25zIHByaW50aW5nIG9yIG91dHB1dHRpbmcgSFRNTDogbmF2aWdhdGlvbgorCitzdWIgZ2l0X3ByaW50X3BhZ2VfbmF2IHsKKwlteSAoJGN1cnJlbnQsICRzdXBwcmVzcywgJGhlYWQsICR0cmVlaGVhZCwgJHRyZWViYXNlLCAkZXh0cmEpID0gQF87CisJJGV4dHJhID0gJycgaWYgIWRlZmluZWQgJGV4dHJhOyAjIHBhZ2VyIG9yIGZvcm1hdHMKKworCW15IEBuYXZzID0gcXcoc3VtbWFyeSBzaG9ydGxvZyBsb2cgY29tbWl0IGNvbW1pdGRpZmYgdHJlZSk7CisJaWYgKCRzdXBwcmVzcykgeworCQlAbmF2cyA9IGdyZXAgeyAkXyBuZSAkc3VwcHJlc3MgfSBAbmF2czsKKwl9CisKKwlteSAlYXJnID0gbWFwIHsgJF8gPT4ge2FjdGlvbj0+JF99IH0gQG5hdnM7CisJaWYgKGRlZmluZWQgJGhlYWQpIHsKKwkJZm9yIChxdyhjb21taXQgY29tbWl0ZGlmZikpIHsKKwkJCSRhcmd7JF99eydoYXNoJ30gPSAkaGVhZDsKKwkJfQorCQlpZiAoJGN1cnJlbnQgPX4gbS9eKHRyZWUgfCBsb2cgfCBzaG9ydGxvZyB8IGNvbW1pdCB8IGNvbW1pdGRpZmYgfCBzZWFyY2gpJC94KSB7CisJCQlmb3IgKHF3KHNob3J0bG9nIGxvZykpIHsKKwkJCQkkYXJneyRffXsnaGFzaCd9ID0gJGhlYWQ7CisJCQl9CisJCX0KKwl9CisKKwkkYXJneyd0cmVlJ317J2hhc2gnfSA9ICR0cmVlaGVhZCBpZiBkZWZpbmVkICR0cmVlaGVhZDsKKwkkYXJneyd0cmVlJ317J2hhc2hfYmFzZSd9ID0gJHRyZWViYXNlIGlmIGRlZmluZWQgJHRyZWViYXNlOworCisJbXkgQGFjdGlvbnMgPSBnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ2FjdGlvbnMnKTsKKwlteSAlcmVwbCA9ICgKKwkJJyUnID0+ICclJywKKwkJJ24nID0+ICRwcm9qZWN0LCAgICAgICAgICMgcHJvamVjdCBuYW1lCisJCSdmJyA9PiAkZ2l0X2RpciwgICAgICAgICAjIHByb2plY3QgcGF0aCB3aXRoaW4gZmlsZXN5c3RlbQorCQknaCcgPT4gJHRyZWVoZWFkIHx8ICcnLCAgIyBjdXJyZW50IGhhc2ggKCdoJyBwYXJhbWV0ZXIpCisJCSdiJyA9PiAkdHJlZWJhc2UgfHwgJycsICAjIGhhc2ggYmFzZSAoJ2hiJyBwYXJhbWV0ZXIpCisJKTsKKwl3aGlsZSAoQGFjdGlvbnMpIHsKKwkJbXkgKCRsYWJlbCwgJGxpbmssICRwb3MpID0gc3BsaWNlKEBhY3Rpb25zLDAsMyk7CisJCSMgaW5zZXJ0CisJCUBuYXZzID0gbWFwIHsgJF8gZXEgJHBvcyA/ICgkXywgJGxhYmVsKSA6ICRfIH0gQG5hdnM7CisJCSMgbXVuY2ggbXVuY2gKKwkJJGxpbmsgPX4gcy8lKFslbmZoYl0pLyRyZXBseyQxfS9nOworCQkkYXJneyRsYWJlbH17J19ocmVmJ30gPSAkbGluazsKKwl9CisKKwlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfbmF2XCI+XG4iIC4KKwkJKGpvaW4gIiB8ICIsCisJCSBtYXAgeyAkXyBlcSAkY3VycmVudCA/CisJCSAgICAgICAkXyA6ICRjZ2ktPmEoey1ocmVmID0+ICgkYXJneyRffXtfaHJlZn0gPyAkYXJneyRffXtfaHJlZn0gOiBocmVmKCV7JGFyZ3skX319KSl9LCAiJF8iKQorCQkgfSBAbmF2cyk7CisJcHJpbnQgIjxici8+XG4kZXh0cmE8YnIvPlxuIiAuCisJICAgICAgIjwvZGl2PlxuIjsKK30KKworIyByZXR1cm5zIGEgc3VibWVudSBmb3IgdGhlIG5hZ2l2YXRpb24gb2YgdGhlIHJlZnMgdmlld3MgKHRhZ3MsIGhlYWRzLAorIyByZW1vdGVzKSB3aXRoIHRoZSBjdXJyZW50IHZpZXcgZGlzYWJsZWQgYW5kIHRoZSByZW1vdGVzIHZpZXcgb25seQorIyBhdmFpbGFibGUgaWYgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZAorc3ViIGZvcm1hdF9yZWZfdmlld3MgeworCW15ICgkY3VycmVudCkgPSBAXzsKKwlteSBAcmVmX3ZpZXdzID0gcXd7dGFncyBoZWFkc307CisJcHVzaCBAcmVmX3ZpZXdzLCAncmVtb3RlcycgaWYgZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3JlbW90ZV9oZWFkcycpOworCXJldHVybiBqb2luICIgfCAiLCBtYXAgeworCQkkXyBlcSAkY3VycmVudCA/ICRfIDoKKwkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiRfKX0sICRfKQorCX0gQHJlZl92aWV3cworfQorCitzdWIgZm9ybWF0X3BhZ2luZ19uYXYgeworCW15ICgkYWN0aW9uLCAkcGFnZSwgJGhhc19uZXh0X2xpbmspID0gQF87CisJbXkgJHBhZ2luZ19uYXY7CisKKworCWlmICgkcGFnZSA+IDApIHsKKwkJJHBhZ2luZ19uYXYgLj0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgcGFnZT0+dW5kZWYpfSwgImZpcnN0IikgLgorCQkJIiAmc2RvdDsgIiAuCisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PiRwYWdlLTEpLAorCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAicCIsIC10aXRsZSA9PiAiQWx0LXAifSwgInByZXYiKTsKKwl9IGVsc2UgeworCQkkcGFnaW5nX25hdiAuPSAiZmlyc3QgJnNkb3Q7IHByZXYiOworCX0KKworCWlmICgkaGFzX25leHRfbGluaykgeworCQkkcGFnaW5nX25hdiAuPSAiICZzZG90OyAiIC4KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgcGFnZT0+JHBhZ2UrMSksCisJCQkgICAgICAgICAtYWNjZXNza2V5ID0+ICJuIiwgLXRpdGxlID0+ICJBbHQtbiJ9LCAibmV4dCIpOworCX0gZWxzZSB7CisJCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7IG5leHQiOworCX0KKworCXJldHVybiAkcGFnaW5nX25hdjsKK30KKworIyMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIyMgZnVuY3Rpb25zIHByaW50aW5nIG9yIG91dHB1dHRpbmcgSFRNTDogZGl2CisKK3N1YiBnaXRfcHJpbnRfaGVhZGVyX2RpdiB7CisJbXkgKCRhY3Rpb24sICR0aXRsZSwgJGhhc2gsICRoYXNoX2Jhc2UpID0gQF87CisJbXkgJWFyZ3MgPSAoKTsKKworCSRhcmdzeydhY3Rpb24nfSA9ICRhY3Rpb247CisJJGFyZ3N7J2hhc2gnfSA9ICRoYXNoIGlmICRoYXNoOworCSRhcmdzeydoYXNoX2Jhc2UnfSA9ICRoYXNoX2Jhc2UgaWYgJGhhc2hfYmFzZTsKKworCXByaW50ICI8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4iIC4KKwkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKCVhcmdzKSwgLWNsYXNzID0+ICJ0aXRsZSJ9LAorCSAgICAgICR0aXRsZSA/ICR0aXRsZSA6ICRhY3Rpb24pIC4KKwkgICAgICAiXG48L2Rpdj5cbiI7Cit9CisKK3N1YiBmb3JtYXRfcmVwb191cmwgeworCW15ICgkbmFtZSwgJHVybCkgPSBAXzsKKwlyZXR1cm4gIjx0ciBjbGFzcz1cIm1ldGFkYXRhX3VybFwiPjx0ZD4kbmFtZTwvdGQ+PHRkPiR1cmw8L3RkPjwvdHI+XG4iOworfQorCisjIEdyb3VwIG91dHB1dCBieSBwbGFjaW5nIGl0IGluIGEgRElWIGVsZW1lbnQgYW5kIGFkZGluZyBhIGhlYWRlci4KKyMgT3B0aW9ucyBmb3Igc3RhcnRfZGl2KCkgY2FuIGJlIHByb3ZpZGVkIGJ5IHBhc3NpbmcgYSBoYXNoIHJlZmVyZW5jZSBhcyB0aGUKKyMgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSBmdW5jdGlvbi4KKyMgT3B0aW9ucyB0byBnaXRfcHJpbnRfaGVhZGVyX2RpdigpIGNhbiBiZSBwcm92aWRlZCBieSBwYXNzaW5nIGFuIGFycmF5CisjIHJlZmVyZW5jZS4gVGhpcyBtdXN0IGZvbGxvdyB0aGUgb3B0aW9ucyB0byBzdGFydF9kaXYgaWYgdGhleSBhcmUgcHJlc2VudC4KKyMgVGhlIGNvbnRlbnQgY2FuIGJlIGEgc2NhbGFyLCB3aGljaCBpcyBvdXRwdXQgYXMtaXMsIGEgc2NhbGFyIHJlZmVyZW5jZSwgd2hpY2gKKyMgaXMgb3V0cHV0IGFmdGVyIGh0bWwgZXNjYXBpbmcsIGFuIElPIGhhbmRsZSBwYXNzZWQgZWl0aGVyIGFzICpoYW5kbGUgb3IKKyMgKmhhbmRsZXtJT30sIG9yIGEgZnVuY3Rpb24gcmVmZXJlbmNlLiBJbiB0aGUgbGF0dGVyIGNhc2UgYWxsIGZvbGxvd2luZworIyBwYXJhbWV0ZXJzIHdpbGwgYmUgdGFrZW4gYXMgYXJndW1lbnQgdG8gdGhlIGNvbnRlbnQgZnVuY3Rpb24gY2FsbC4KK3N1YiBnaXRfcHJpbnRfc2VjdGlvbiB7CisJbXkgKCRkaXZfYXJncywgJGhlYWRlcl9hcmdzLCAkY29udGVudCk7CisJbXkgJGFyZyA9IHNoaWZ0OworCWlmIChyZWYoJGFyZykgZXEgJ0hBU0gnKSB7CisJCSRkaXZfYXJncyA9ICRhcmc7CisJCSRhcmcgPSBzaGlmdDsKKwl9CisJaWYgKHJlZigkYXJnKSBlcSAnQVJSQVknKSB7CisJCSRoZWFkZXJfYXJncyA9ICRhcmc7CisJCSRhcmcgPSBzaGlmdDsKKwl9CisJJGNvbnRlbnQgPSAkYXJnOworCisJcHJpbnQgJGNnaS0+c3RhcnRfZGl2KCRkaXZfYXJncyk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoQCRoZWFkZXJfYXJncyk7CisKKwlpZiAocmVmKCRjb250ZW50KSBlcSAnQ09ERScpIHsKKwkJJGNvbnRlbnQtPihAXyk7CisJfSBlbHNpZiAocmVmKCRjb250ZW50KSBlcSAnU0NBTEFSJykgeworCQlwcmludCBlc2NfaHRtbCgkJGNvbnRlbnQpOworCX0gZWxzaWYgKHJlZigkY29udGVudCkgZXEgJ0dMT0InIG9yIHJlZigkY29udGVudCkgZXEgJ0lPOjpIYW5kbGUnKSB7CisJCXByaW50IDwkY29udGVudD47CisJfSBlbHNpZiAoIXJlZigkY29udGVudCkgJiYgZGVmaW5lZCgkY29udGVudCkpIHsKKwkJcHJpbnQgJGNvbnRlbnQ7CisJfQorCisJcHJpbnQgJGNnaS0+ZW5kX2RpdjsKK30KKworc3ViIGZvcm1hdF90aW1lc3RhbXBfaHRtbCB7CisJbXkgJGRhdGUgPSBzaGlmdDsKKwlteSAkc3RydGltZSA9ICRkYXRlLT57J3JmYzI4MjInfTsKKworCW15ICh1bmRlZiwgdW5kZWYsICRkYXRldGltZV9jbGFzcykgPQorCQlnaXR3ZWJfZ2V0X2ZlYXR1cmUoJ2phdmFzY3JpcHQtdGltZXpvbmUnKTsKKwlpZiAoJGRhdGV0aW1lX2NsYXNzKSB7CisJCSRzdHJ0aW1lID0gcXEhPHNwYW4gY2xhc3M9IiRkYXRldGltZV9jbGFzcyI+JHN0cnRpbWU8L3NwYW4+ITsKKwl9CisKKwlteSAkbG9jYWx0aW1lX2Zvcm1hdCA9ICcoJTAyZDolMDJkICVzKSc7CisJaWYgKCRkYXRlLT57J2hvdXJfbG9jYWwnfSA8IDYpIHsKKwkJJGxvY2FsdGltZV9mb3JtYXQgPSAnKDxzcGFuIGNsYXNzPSJhdG5pZ2h0Ij4lMDJkOiUwMmQ8L3NwYW4+ICVzKSc7CisJfQorCSRzdHJ0aW1lIC49ICcgJyAuCisJICAgICAgICAgICAgc3ByaW50ZigkbG9jYWx0aW1lX2Zvcm1hdCwKKwkgICAgICAgICAgICAgICAgICAgICRkYXRlLT57J2hvdXJfbG9jYWwnfSwgJGRhdGUtPnsnbWludXRlX2xvY2FsJ30sICRkYXRlLT57J3R6X2xvY2FsJ30pOworCisJcmV0dXJuICRzdHJ0aW1lOworfQorCisjIE91dHB1dHMgdGhlIGF1dGhvciBuYW1lIGFuZCBkYXRlIGluIGxvbmcgZm9ybQorc3ViIGdpdF9wcmludF9hdXRob3JzaGlwIHsKKwlteSAkY28gPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCW15ICR0YWcgPSAkb3B0c3stdGFnfSB8fCAnZGl2JzsKKwlteSAkYXV0aG9yID0gJGNvLT57J2F1dGhvcl9uYW1lJ307CisKKwlteSAlYWQgPSBwYXJzZV9kYXRlKCRjby0+eydhdXRob3JfZXBvY2gnfSwgJGNvLT57J2F1dGhvcl90eid9KTsKKwlwcmludCAiPCR0YWcgY2xhc3M9XCJhdXRob3JfZGF0ZVwiPiIgLgorCSAgICAgIGZvcm1hdF9zZWFyY2hfYXV0aG9yKCRhdXRob3IsICJhdXRob3IiLCBlc2NfaHRtbCgkYXV0aG9yKSkgLgorCSAgICAgICIgWyIuZm9ybWF0X3RpbWVzdGFtcF9odG1sKFwlYWQpLiJdIi4KKwkgICAgICBnaXRfZ2V0X2F2YXRhcigkY28tPnsnYXV0aG9yX2VtYWlsJ30sIC1wYWRfYmVmb3JlID0+IDEpIC4KKwkgICAgICAiPC8kdGFnPlxuIjsKK30KKworIyBPdXRwdXRzIHRhYmxlIHJvd3MgY29udGFpbmluZyB0aGUgZnVsbCBhdXRob3Igb3IgY29tbWl0dGVyIGluZm9ybWF0aW9uLAorIyBpbiB0aGUgZm9ybWF0IGV4cGVjdGVkIGZvciAnY29tbWl0JyB2aWV3ICgmIHNpbWlsYXIpLgorIyBQYXJhbWV0ZXJzIGFyZSBhIGNvbW1pdCBoYXNoIHJlZmVyZW5jZSwgZm9sbG93ZWQgYnkgdGhlIGxpc3Qgb2YgcGVvcGxlCisjIHRvIG91dHB1dCBpbmZvcm1hdGlvbiBmb3IuIElmIHRoZSBsaXN0IGlzIGVtcHR5IGl0IGRlZmF1bHRzIHRvIGJvdGgKKyMgYXV0aG9yIGFuZCBjb21taXR0ZXIuCitzdWIgZ2l0X3ByaW50X2F1dGhvcnNoaXBfcm93cyB7CisJbXkgJGNvID0gc2hpZnQ7CisJIyB0b28gYmFkIHdlIGNhbid0IHVzZSBAcGVvcGxlID0gQF8gfHwgKCdhdXRob3InLCAnY29tbWl0dGVyJykKKwlteSBAcGVvcGxlID0gQF87CisJQHBlb3BsZSA9ICgnYXV0aG9yJywgJ2NvbW1pdHRlcicpIHVubGVzcyBAcGVvcGxlOworCWZvcmVhY2ggbXkgJHdobyAoQHBlb3BsZSkgeworCQlteSAld2QgPSBwYXJzZV9kYXRlKCRjby0+eyIke3dob31fZXBvY2gifSwgJGNvLT57IiR7d2hvfV90eiJ9KTsKKwkJcHJpbnQgIjx0cj48dGQ+JHdobzwvdGQ+PHRkPiIgLgorCQkgICAgICBmb3JtYXRfc2VhcmNoX2F1dGhvcigkY28tPnsiJHt3aG99X25hbWUifSwgJHdobywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjX2h0bWwoJGNvLT57IiR7d2hvfV9uYW1lIn0pKSAuICIgIiAuCisJCSAgICAgIGZvcm1hdF9zZWFyY2hfYXV0aG9yKCRjby0+eyIke3dob31fZW1haWwifSwgJHdobywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjX2h0bWwoIjwiIC4gJGNvLT57IiR7d2hvfV9lbWFpbCJ9IC4gIj4iKSkgLgorCQkgICAgICAiPC90ZD48dGQgcm93c3Bhbj1cIjJcIj4iIC4KKwkJICAgICAgZ2l0X2dldF9hdmF0YXIoJGNvLT57IiR7d2hvfV9lbWFpbCJ9LCAtc2l6ZSA9PiAnZG91YmxlJykgLgorCQkgICAgICAiPC90ZD48L3RyPlxuIiAuCisJCSAgICAgICI8dHI+IiAuCisJCSAgICAgICI8dGQ+PC90ZD48dGQ+IiAuCisJCSAgICAgIGZvcm1hdF90aW1lc3RhbXBfaHRtbChcJXdkKSAuCisJCSAgICAgICI8L3RkPiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorfQorCitzdWIgZ2l0X3ByaW50X3BhZ2VfcGF0aCB7CisJbXkgJG5hbWUgPSBzaGlmdDsKKwlteSAkdHlwZSA9IHNoaWZ0OworCW15ICRoYiA9IHNoaWZ0OworCisKKwlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfcGF0aFwiPiI7CisJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaF9iYXNlPT4kaGIpLAorCSAgICAgICAgICAgICAgLXRpdGxlID0+ICd0cmVlIHJvb3QnfSwgdG9fdXRmOCgiWyRwcm9qZWN0XSIpKTsKKwlwcmludCAiIC8gIjsKKwlpZiAoZGVmaW5lZCAkbmFtZSkgeworCQlteSBAZGlybmFtZSA9IHNwbGl0ICcvJywgJG5hbWU7CisJCW15ICRiYXNlbmFtZSA9IHBvcCBAZGlybmFtZTsKKwkJbXkgJGZ1bGxuYW1lID0gJyc7CisKKwkJZm9yZWFjaCBteSAkZGlyIChAZGlybmFtZSkgeworCQkJJGZ1bGxuYW1lIC49ICgkZnVsbG5hbWUgPyAnLycgOiAnJykgLiAkZGlyOworCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgZmlsZV9uYW1lPT4kZnVsbG5hbWUsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhiKSwKKwkJCSAgICAgICAgICAgICAgLXRpdGxlID0+ICRmdWxsbmFtZX0sIGVzY19wYXRoKCRkaXIpKTsKKwkJCXByaW50ICIgLyAiOworCQl9CisJCWlmIChkZWZpbmVkICR0eXBlICYmICR0eXBlIGVxICdibG9iJykgeworCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iX3BsYWluIiwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYiksCisJCQkgICAgICAgICAgICAgIC10aXRsZSA9PiAkbmFtZX0sIGVzY19wYXRoKCRiYXNlbmFtZSkpOworCQl9IGVsc2lmIChkZWZpbmVkICR0eXBlICYmICR0eXBlIGVxICd0cmVlJykgeworCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYiksCisJCQkgICAgICAgICAgICAgIC10aXRsZSA9PiAkbmFtZX0sIGVzY19wYXRoKCRiYXNlbmFtZSkpOworCQkJcHJpbnQgIiAvICI7CisJCX0gZWxzZSB7CisJCQlwcmludCBlc2NfcGF0aCgkYmFzZW5hbWUpOworCQl9CisJfQorCXByaW50ICI8YnIvPjwvZGl2PlxuIjsKK30KKworc3ViIGdpdF9wcmludF9sb2cgeworCW15ICRsb2cgPSBzaGlmdDsKKwlteSAlb3B0cyA9IEBfOworCisJaWYgKCRvcHRzeyctcmVtb3ZlX3RpdGxlJ30pIHsKKwkJIyByZW1vdmUgdGl0bGUsIGkuZS4gZmlyc3QgbGluZSBvZiBsb2cKKwkJc2hpZnQgQCRsb2c7CisJfQorCSMgcmVtb3ZlIGxlYWRpbmcgZW1wdHkgbGluZXMKKwl3aGlsZSAoZGVmaW5lZCAkbG9nLT5bMF0gJiYgJGxvZy0+WzBdIGVxICIiKSB7CisJCXNoaWZ0IEAkbG9nOworCX0KKworCSMgcHJpbnQgbG9nCisJbXkgJHNraXBfYmxhbmtfbGluZSA9IDA7CisJZm9yZWFjaCBteSAkbGluZSAoQCRsb2cpIHsKKwkJaWYgKCRsaW5lID1+IG0vXlxzKihbQS1aXVstQS1aYS16XSotW0JiXXl8Q1tDY10pOiAvKSB7CisJCQlpZiAoISAkb3B0c3snLXJlbW92ZV9zaWdub2ZmJ30pIHsKKwkJCQlwcmludCAiPHNwYW4gY2xhc3M9XCJzaWdub2ZmXCI+IiAuIGVzY19odG1sKCRsaW5lKSAuICI8L3NwYW4+PGJyLz5cbiI7CisJCQkJJHNraXBfYmxhbmtfbGluZSA9IDE7CisJCQl9CisJCQluZXh0OworCQl9CisKKwkJaWYgKCRsaW5lID1+IG0sXHMqKFthLXpdKmxpbmspOiAoaHR0cHM/Oi8vXFMrKSxpKSB7CisJCQlpZiAoISAkb3B0c3snLXJlbW92ZV9zaWdub2ZmJ30pIHsKKwkJCQlwcmludCAiPHNwYW4gY2xhc3M9XCJzaWdub2ZmXCI+IiAuIGVzY19odG1sKCQxKSAuICI6ICIgLgorCQkJCQkiPGEgaHJlZj1cIiIgLiBlc2NfaHRtbCgkMikgLiAiXCI+IiAuIGVzY19odG1sKCQyKSAuICI8L2E+IiAuCisJCQkJCSI8L3NwYW4+PGJyLz5cbiI7CisJCQkJJHNraXBfYmxhbmtfbGluZSA9IDE7CisJCQl9CisJCQluZXh0OworCQl9CisKKwkJIyBwcmludCBvbmx5IG9uZSBlbXB0eSBsaW5lCisJCSMgZG8gbm90IHByaW50IGVtcHR5IGxpbmUgYWZ0ZXIgc2lnbm9mZgorCQlpZiAoJGxpbmUgZXEgIiIpIHsKKwkJCW5leHQgaWYgKCRza2lwX2JsYW5rX2xpbmUpOworCQkJJHNraXBfYmxhbmtfbGluZSA9IDE7CisJCX0gZWxzZSB7CisJCQkkc2tpcF9ibGFua19saW5lID0gMDsKKwkJfQorCisJCXByaW50IGZvcm1hdF9sb2dfbGluZV9odG1sKCRsaW5lKSAuICI8YnIvPlxuIjsKKwl9CisKKwlpZiAoJG9wdHN7Jy1maW5hbF9lbXB0eV9saW5lJ30pIHsKKwkJIyBlbmQgd2l0aCBzaW5nbGUgZW1wdHkgbGluZQorCQlwcmludCAiPGJyLz5cbiIgdW5sZXNzICRza2lwX2JsYW5rX2xpbmU7CisJfQorfQorCisjIHJldHVybiBsaW5rIHRhcmdldCAod2hhdCBsaW5rIHBvaW50cyB0bykKK3N1YiBnaXRfZ2V0X2xpbmtfdGFyZ2V0IHsKKwlteSAkaGFzaCA9IHNoaWZ0OworCW15ICRsaW5rX3RhcmdldDsKKworCSMgcmVhZCBsaW5rCisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImNhdC1maWxlIiwgImJsb2IiLCAkaGFzaAorCQlvciByZXR1cm47CisJeworCQlsb2NhbCAkLyA9IHVuZGVmOworCQkkbGlua190YXJnZXQgPSA8JGZkPjsKKwl9CisJY2xvc2UgJGZkCisJCW9yIHJldHVybjsKKworCXJldHVybiAkbGlua190YXJnZXQ7Cit9CisKKyMgZ2l2ZW4gbGluayB0YXJnZXQsIGFuZCB0aGUgZGlyZWN0b3J5IChiYXNlZGlyKSB0aGUgbGluayBpcyBpbiwKKyMgcmV0dXJuIHRhcmdldCBvZiBsaW5rIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkgKHRvcCB0cmVlKTsKKyMgcmV0dXJuIHVuZGVmIGlmIGl0IGlzIG5vdCBwb3NzaWJsZSAoaW5jbHVkaW5nIGFic29sdXRlIGxpbmtzKS4KK3N1YiBub3JtYWxpemVfbGlua190YXJnZXQgeworCW15ICgkbGlua190YXJnZXQsICRiYXNlZGlyKSA9IEBfOworCisJIyBhYnNvbHV0ZSBzeW1saW5rcyAoYmVnaW5uaW5nIHdpdGggJy8nKSBjYW5ub3QgYmUgbm9ybWFsaXplZAorCXJldHVybiBpZiAoc3Vic3RyKCRsaW5rX3RhcmdldCwgMCwgMSkgZXEgJy8nKTsKKworCSMgbm9ybWFsaXplIGxpbmsgdGFyZ2V0IHRvIHBhdGggZnJvbSB0b3AgKHJvb3QpIHRyZWUgKGRpcikKKwlteSAkcGF0aDsKKwlpZiAoJGJhc2VkaXIpIHsKKwkJJHBhdGggPSAkYmFzZWRpciAuICcvJyAuICRsaW5rX3RhcmdldDsKKwl9IGVsc2UgeworCQkjIHdlIGFyZSBpbiB0b3AgKHJvb3QpIHRyZWUgKGRpcikKKwkJJHBhdGggPSAkbGlua190YXJnZXQ7CisJfQorCisJIyByZW1vdmUgLy8sIC8uLywgYW5kIC8uLi8KKwlteSBAcGF0aF9wYXJ0czsKKwlmb3JlYWNoIG15ICRwYXJ0IChzcGxpdCgnLycsICRwYXRoKSkgeworCQkjIGRpc2NhcmQgJy4nIGFuZCAnJworCQluZXh0IGlmICghJHBhcnQgfHwgJHBhcnQgZXEgJy4nKTsKKwkJIyBoYW5kbGUgJy4uJworCQlpZiAoJHBhcnQgZXEgJy4uJykgeworCQkJaWYgKEBwYXRoX3BhcnRzKSB7CisJCQkJcG9wIEBwYXRoX3BhcnRzOworCQkJfSBlbHNlIHsKKwkJCQkjIGxpbmsgbGVhZHMgb3V0c2lkZSByZXBvc2l0b3J5IChvdXRzaWRlIHRvcCBkaXIpCisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJcHVzaCBAcGF0aF9wYXJ0cywgJHBhcnQ7CisJCX0KKwl9CisJJHBhdGggPSBqb2luKCcvJywgQHBhdGhfcGFydHMpOworCisJcmV0dXJuICRwYXRoOworfQorCisjIHByaW50IHRyZWUgZW50cnkgKHJvdyBvZiBnaXRfdHJlZSksIGJ1dCB3aXRob3V0IGVuY29tcGFzc2luZyA8dHI+IGVsZW1lbnQKK3N1YiBnaXRfcHJpbnRfdHJlZV9lbnRyeSB7CisJbXkgKCR0LCAkYmFzZWRpciwgJGhhc2hfYmFzZSwgJGhhdmVfYmxhbWUpID0gQF87CisKKwlteSAlYmFzZV9rZXkgPSAoKTsKKwkkYmFzZV9rZXl7J2hhc2hfYmFzZSd9ID0gJGhhc2hfYmFzZSBpZiBkZWZpbmVkICRoYXNoX2Jhc2U7CisKKwkjIFRoZSBmb3JtYXQgb2YgYSB0YWJsZSByb3cgaXM6IG1vZGUgbGlzdCBsaW5rLiAgV2hlcmUgbW9kZSBpcworCSMgdGhlIG1vZGUgb2YgdGhlIGVudHJ5LCBsaXN0IGlzIHRoZSBuYW1lIG9mIHRoZSBlbnRyeSwgYW4gaHJlZiwKKwkjIGFuZCBsaW5rIGlzIHRoZSBhY3Rpb24gbGlua3Mgb2YgdGhlIGVudHJ5LgorCisJcHJpbnQgIjx0ZCBjbGFzcz1cIm1vZGVcIj4iIC4gbW9kZV9zdHIoJHQtPnsnbW9kZSd9KSAuICI8L3RkPlxuIjsKKwlpZiAoZXhpc3RzICR0LT57J3NpemUnfSkgeworCQlwcmludCAiPHRkIGNsYXNzPVwic2l6ZVwiPiR0LT57J3NpemUnfTwvdGQ+XG4iOworCX0KKwlpZiAoJHQtPnsndHlwZSd9IGVxICJibG9iIikgeworCQlwcmludCAiPHRkIGNsYXNzPVwibGlzdFwiPiIgLgorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaD0+JHQtPnsnaGFzaCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIsICViYXNlX2tleSksCisJCQkgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LCBlc2NfcGF0aCgkdC0+eyduYW1lJ30pKTsKKwkJaWYgKFNfSVNMTksob2N0ICR0LT57J21vZGUnfSkpIHsKKwkJCW15ICRsaW5rX3RhcmdldCA9IGdpdF9nZXRfbGlua190YXJnZXQoJHQtPnsnaGFzaCd9KTsKKwkJCWlmICgkbGlua190YXJnZXQpIHsKKwkJCQlteSAkbm9ybV90YXJnZXQgPSBub3JtYWxpemVfbGlua190YXJnZXQoJGxpbmtfdGFyZ2V0LCAkYmFzZWRpcik7CisJCQkJaWYgKGRlZmluZWQgJG5vcm1fdGFyZ2V0KSB7CisJCQkJCXByaW50ICIgLT4gIiAuCisJCQkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ib2JqZWN0IiwgaGFzaF9iYXNlPT4kaGFzaF9iYXNlLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JG5vcm1fdGFyZ2V0KSwKKwkJCQkJICAgICAgICAgICAgICAgLXRpdGxlID0+ICRub3JtX3RhcmdldH0sIGVzY19wYXRoKCRsaW5rX3RhcmdldCkpOworCQkJCX0gZWxzZSB7CisJCQkJCXByaW50ICIgLT4gIiAuIGVzY19wYXRoKCRsaW5rX3RhcmdldCk7CisJCQkJfQorCQkJfQorCQl9CisJCXByaW50ICI8L3RkPlxuIjsKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kdC0+eydoYXNoJ30sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iLCAlYmFzZV9rZXkpfSwKKwkJICAgICAgICAgICAgICAiYmxvYiIpOworCQlpZiAoJGhhdmVfYmxhbWUpIHsKKwkJCXByaW50ICIgfCAiIC4KKwkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxhbWUiLCBoYXNoPT4kdC0+eydoYXNoJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9IiwgJWJhc2Vfa2V5KX0sCisJCQkgICAgICAgICAgICAgICJibGFtZSIpOworCQl9CisJCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UpIHsKKwkJCXByaW50ICIgfCAiIC4KKwkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JHQtPnsnaGFzaCd9LCBmaWxlX25hbWU9PiIkYmFzZWRpciR0LT57J25hbWUnfSIpfSwKKwkJCSAgICAgICAgICAgICAgImhpc3RvcnkiKTsKKwkJfQorCQlwcmludCAiIHwgIiAuCisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JfcGxhaW4iLCBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCisJCQkgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9Iil9LAorCQkJICAgICAgICAicmF3Iik7CisJCXByaW50ICI8L3RkPlxuIjsKKworCX0gZWxzaWYgKCR0LT57J3R5cGUnfSBlcSAidHJlZSIpIHsKKwkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpc3RcIj4iOworCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kdC0+eydoYXNoJ30sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICViYXNlX2tleSl9LAorCQkgICAgICAgICAgICAgIGVzY19wYXRoKCR0LT57J25hbWUnfSkpOworCQlwcmludCAiPC90ZD5cbiI7CisJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JHQtPnsnaGFzaCd9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9IiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlYmFzZV9rZXkpfSwKKwkJICAgICAgICAgICAgICAidHJlZSIpOworCQlpZiAoZGVmaW5lZCAkaGFzaF9iYXNlKSB7CisJCQlwcmludCAiIHwgIiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+IiRiYXNlZGlyJHQtPnsnbmFtZSd9Iil9LAorCQkJICAgICAgICAgICAgICAiaGlzdG9yeSIpOworCQl9CisJCXByaW50ICI8L3RkPlxuIjsKKwl9IGVsc2UgeworCQkjIHVua25vd24gb2JqZWN0OiB3ZSBjYW4gb25seSBwcmVzZW50IGhpc3RvcnkgZm9yIGl0CisJCSMgKHRoaXMgaW5jbHVkZXMgJ2NvbW1pdCcgb2JqZWN0LCBpLmUuIHN1Ym1vZHVsZSBzdXBwb3J0KQorCQlwcmludCAiPHRkIGNsYXNzPVwibGlzdFwiPiIgLgorCQkgICAgICBlc2NfcGF0aCgkdC0+eyduYW1lJ30pIC4KKwkJICAgICAgIjwvdGQ+XG4iOworCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UpIHsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4iJGJhc2VkaXIkdC0+eyduYW1lJ30iKX0sCisJCQkgICAgICAgICAgICAgICJoaXN0b3J5Iik7CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iOworCX0KK30KKworIyMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIyMgZnVuY3Rpb25zIHByaW50aW5nIGxhcmdlIGZyYWdtZW50cyBvZiBIVE1MCisKKyMgZ2V0IHByZS1pbWFnZSBmaWxlbmFtZXMgZm9yIG1lcmdlIChjb21iaW5lZCkgZGlmZgorc3ViIGZpbGxfZnJvbV9maWxlX2luZm8geworCW15ICgkZGlmZiwgQHBhcmVudHMpID0gQF87CisKKwkkZGlmZi0+eydmcm9tX2ZpbGUnfSA9IFsgXTsKKwkkZGlmZi0+eydmcm9tX2ZpbGUnfVskZGlmZi0+eyducGFyZW50cyd9IC0gMV0gPSB1bmRlZjsKKwlmb3IgKG15ICRpID0gMDsgJGkgPCAkZGlmZi0+eyducGFyZW50cyd9OyAkaSsrKSB7CisJCWlmICgkZGlmZi0+eydzdGF0dXMnfVskaV0gZXEgJ1InIHx8CisJCSAgICAkZGlmZi0+eydzdGF0dXMnfVskaV0gZXEgJ0MnKSB7CisJCQkkZGlmZi0+eydmcm9tX2ZpbGUnfVskaV0gPQorCQkJCWdpdF9nZXRfcGF0aF9ieV9oYXNoKCRwYXJlbnRzWyRpXSwgJGRpZmYtPnsnZnJvbV9pZCd9WyRpXSk7CisJCX0KKwl9CisKKwlyZXR1cm4gJGRpZmY7Cit9CisKKyMgaXMgY3VycmVudCByYXcgZGlmZnRyZWUgbGluZSBvZiBmaWxlIGRlbGV0aW9uCitzdWIgaXNfZGVsZXRlZCB7CisJbXkgJGRpZmZpbmZvID0gc2hpZnQ7CisKKwlyZXR1cm4gJGRpZmZpbmZvLT57J3RvX2lkJ30gZXEgKCcwJyB4IDQwKTsKK30KKworIyBkb2VzIHBhdGNoIGNvcnJlc3BvbmQgdG8gW3ByZXZpb3VzXSBkaWZmdHJlZSByYXcgbGluZQorIyAkZGlmZmluZm8gIC0gaGFzaHJlZiBvZiBwYXJzZWQgcmF3IGRpZmYgZm9ybWF0CisjICRwYXRjaGluZm8gLSBoYXNocmVmIG9mIHBhcnNlZCBwYXRjaCBkaWZmIGZvcm1hdAorIyAgICAgICAgICAgICAgKHRoZSBzYW1lIGtleXMgYXMgaW4gJGRpZmZpbmZvKQorc3ViIGlzX3BhdGNoX3NwbGl0IHsKKwlteSAoJGRpZmZpbmZvLCAkcGF0Y2hpbmZvKSA9IEBfOworCisJcmV0dXJuIGRlZmluZWQgJGRpZmZpbmZvICYmIGRlZmluZWQgJHBhdGNoaW5mbworCQkmJiAkZGlmZmluZm8tPnsndG9fZmlsZSd9IGVxICRwYXRjaGluZm8tPnsndG9fZmlsZSd9OworfQorCisKK3N1YiBnaXRfZGlmZnRyZWVfYm9keSB7CisJbXkgKCRkaWZmdHJlZSwgJGhhc2gsIEBwYXJlbnRzKSA9IEBfOworCW15ICgkcGFyZW50KSA9ICRwYXJlbnRzWzBdOworCW15ICRoYXZlX2JsYW1lID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2JsYW1lJyk7CisJcHJpbnQgIjxkaXYgY2xhc3M9XCJsaXN0X2hlYWRcIj5cbiI7CisJaWYgKCQjeyRkaWZmdHJlZX0gPiAxMCkgeworCQlwcmludCgoJCN7JGRpZmZ0cmVlfSArIDEpIC4gIiBmaWxlcyBjaGFuZ2VkOlxuIik7CisJfQorCXByaW50ICI8L2Rpdj5cbiI7CisKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwiIiAuCisJICAgICAgKEBwYXJlbnRzID4gMSA/ICJjb21iaW5lZCAiIDogIiIpIC4KKwkgICAgICAiZGlmZl90cmVlXCI+XG4iOworCisJIyBoZWFkZXIgb25seSBmb3IgY29tYmluZWQgZGlmZiBpbiAnY29tbWl0ZGlmZicgdmlldworCW15ICRoYXNfaGVhZGVyID0gQCRkaWZmdHJlZSAmJiBAcGFyZW50cyA+IDEgJiYgJGFjdGlvbiBlcSAnY29tbWl0ZGlmZic7CisJaWYgKCRoYXNfaGVhZGVyKSB7CisJCSMgdGFibGUgaGVhZGVyCisJCXByaW50ICI8dGhlYWQ+PHRyPlxuIiAuCisJCSAgICAgICAiPHRoPjwvdGg+PHRoPjwvdGg+XG4iOyAjIGZpbGVuYW1lLCBwYXRjaE4gbGluaworCQlmb3IgKG15ICRpID0gMDsgJGkgPCBAcGFyZW50czsgJGkrKykgeworCQkJbXkgJHBhciA9ICRwYXJlbnRzWyRpXTsKKwkJCXByaW50ICI8dGg+IiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmYiLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kaGFzaCwgaGFzaF9wYXJlbnQ9PiRwYXIpLAorCQkJICAgICAgICAgICAgICAgLXRpdGxlID0+ICdjb21taXRkaWZmIHRvIHBhcmVudCBudW1iZXIgJyAuCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICgkaSsxKSAuICc6ICcgLiBzdWJzdHIoJHBhciwwLDcpfSwKKwkJCSAgICAgICAgICAgICAgJGkrMSkgLgorCQkJICAgICAgIiZuYnNwOzwvdGg+XG4iOworCQl9CisJCXByaW50ICI8L3RyPjwvdGhlYWQ+XG48dGJvZHk+XG4iOworCX0KKworCW15ICRhbHRlcm5hdGUgPSAxOworCW15ICRwYXRjaG5vID0gMDsKKwlmb3JlYWNoIG15ICRsaW5lIChAeyRkaWZmdHJlZX0pIHsKKwkJbXkgJGRpZmYgPSBwYXJzZWRfZGlmZnRyZWVfbGluZSgkbGluZSk7CisKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKworCQlpZiAoZXhpc3RzICRkaWZmLT57J25wYXJlbnRzJ30pIHsgIyBjb21iaW5lZCBkaWZmCisKKwkJCWZpbGxfZnJvbV9maWxlX2luZm8oJGRpZmYsIEBwYXJlbnRzKQorCQkJCXVubGVzcyBleGlzdHMgJGRpZmYtPnsnZnJvbV9maWxlJ307CisKKwkJCWlmICghaXNfZGVsZXRlZCgkZGlmZikpIHsKKwkJCQkjIGZpbGUgZXhpc3RzIGluIHRoZSByZXN1bHQgKGNoaWxkKSBjb21taXQKKwkJCQlwcmludCAiPHRkPiIgLgorCQkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gpLAorCQkJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0In0sIGVzY19wYXRoKCRkaWZmLT57J3RvX2ZpbGUnfSkpIC4KKwkJCQkgICAgICAiPC90ZD5cbiI7CisJCQl9IGVsc2UgeworCQkJCXByaW50ICI8dGQ+IiAuCisJCQkJICAgICAgZXNjX3BhdGgoJGRpZmYtPnsndG9fZmlsZSd9KSAuCisJCQkJICAgICAgIjwvdGQ+XG4iOworCQkJfQorCisJCQlpZiAoJGFjdGlvbiBlcSAnY29tbWl0ZGlmZicpIHsKKwkJCQkjIGxpbmsgdG8gcGF0Y2gKKwkJCQkkcGF0Y2hubysrOworCQkJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtYW5jaG9yPT4icGF0Y2gkcGF0Y2hubyIpfSwKKwkJCQkgICAgICAgICAgICAgICJwYXRjaCIpIC4KKwkJCQkgICAgICAiIHwgIiAuCisJCQkJICAgICAgIjwvdGQ+XG4iOworCQkJfQorCisJCQlteSAkaGFzX2hpc3RvcnkgPSAwOworCQkJbXkgJG5vdF9kZWxldGVkID0gMDsKKwkJCWZvciAobXkgJGkgPSAwOyAkaSA8ICRkaWZmLT57J25wYXJlbnRzJ307ICRpKyspIHsKKwkJCQlteSAkaGFzaF9wYXJlbnQgPSAkcGFyZW50c1skaV07CisJCQkJbXkgJGZyb21faGFzaCA9ICRkaWZmLT57J2Zyb21faWQnfVskaV07CisJCQkJbXkgJGZyb21fcGF0aCA9ICRkaWZmLT57J2Zyb21fZmlsZSd9WyRpXTsKKwkJCQlteSAkc3RhdHVzID0gJGRpZmYtPnsnc3RhdHVzJ31bJGldOworCisJCQkJJGhhc19oaXN0b3J5IHx8PSAoJHN0YXR1cyBuZSAnQScpOworCQkJCSRub3RfZGVsZXRlZCB8fD0gKCRzdGF0dXMgbmUgJ0QnKTsKKworCQkJCWlmICgkc3RhdHVzIGVxICdBJykgeworCQkJCQlwcmludCAiPHRkICBjbGFzcz1cImxpbmtcIiBhbGlnbj1cInJpZ2h0XCI+IHwgPC90ZD5cbiI7CisJCQkJfSBlbHNpZiAoJHN0YXR1cyBlcSAnRCcpIHsKKwkJCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRmcm9tX2hhc2gsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZnJvbV9wYXRoKX0sCisJCQkJCSAgICAgICAgICAgICAgImJsb2IiIC4gKCRpKzEpKSAuCisJCQkJCSAgICAgICIgfCA8L3RkPlxuIjsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoJGRpZmYtPnsndG9faWQnfSBlcSAkZnJvbV9oYXNoKSB7CisJCQkJCQlwcmludCAiPHRkIGNsYXNzPVwibGluayBub2NoYW5nZVwiPiI7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCQkJCX0KKwkJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iZGlmZiIsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX3BhcmVudD0+JGZyb21faGFzaCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfcGFyZW50X2Jhc2U9PiRoYXNoX3BhcmVudCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BhcmVudD0+JGZyb21fcGF0aCl9LAorCQkJCQkgICAgICAgICAgICAgICJkaWZmIiAuICgkaSsxKSkgLgorCQkJCQkgICAgICAiIHwgPC90ZD5cbiI7CisJCQkJfQorCQkJfQorCisJCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiI7CisJCQlpZiAoJG5vdF9kZWxldGVkKSB7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gpfSwKKwkJCQkgICAgICAgICAgICAgICJibG9iIik7CisJCQkJcHJpbnQgIiB8ICIgaWYgKCRoYXNfaGlzdG9yeSk7CisJCQl9CisJCQlpZiAoJGhhc19oaXN0b3J5KSB7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsndG9fZmlsZSd9LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCl9LAorCQkJCSAgICAgICAgICAgICAgImhpc3RvcnkiKTsKKwkJCX0KKwkJCXByaW50ICI8L3RkPlxuIjsKKworCQkJcHJpbnQgIjwvdHI+XG4iOworCQkJbmV4dDsgIyBpbnN0ZWFkIG9mICdlbHNlJyBjbGF1c2UsIHRvIGF2b2lkIGV4dHJhIGluZGVudAorCQl9CisJCSMgZWxzZSBvcmRpbmFyeSBkaWZmCisKKwkJbXkgKCR0b19tb2RlX29jdCwgJHRvX21vZGVfc3RyLCAkdG9fZmlsZV90eXBlKTsKKwkJbXkgKCRmcm9tX21vZGVfb2N0LCAkZnJvbV9tb2RlX3N0ciwgJGZyb21fZmlsZV90eXBlKTsKKwkJaWYgKCRkaWZmLT57J3RvX21vZGUnfSBuZSAoJzAnIHggNikpIHsKKwkJCSR0b19tb2RlX29jdCA9IG9jdCAkZGlmZi0+eyd0b19tb2RlJ307CisJCQlpZiAoU19JU1JFRygkdG9fbW9kZV9vY3QpKSB7ICMgb25seSBmb3IgcmVndWxhciBmaWxlCisJCQkJJHRvX21vZGVfc3RyID0gc3ByaW50ZigiJTA0byIsICR0b19tb2RlX29jdCAmIDA3NzcpOyAjIHBlcm1pc3Npb24gYml0cworCQkJfQorCQkJJHRvX2ZpbGVfdHlwZSA9IGZpbGVfdHlwZSgkZGlmZi0+eyd0b19tb2RlJ30pOworCQl9CisJCWlmICgkZGlmZi0+eydmcm9tX21vZGUnfSBuZSAoJzAnIHggNikpIHsKKwkJCSRmcm9tX21vZGVfb2N0ID0gb2N0ICRkaWZmLT57J2Zyb21fbW9kZSd9OworCQkJaWYgKFNfSVNSRUcoJGZyb21fbW9kZV9vY3QpKSB7ICMgb25seSBmb3IgcmVndWxhciBmaWxlCisJCQkJJGZyb21fbW9kZV9zdHIgPSBzcHJpbnRmKCIlMDRvIiwgJGZyb21fbW9kZV9vY3QgJiAwNzc3KTsgIyBwZXJtaXNzaW9uIGJpdHMKKwkJCX0KKwkJCSRmcm9tX2ZpbGVfdHlwZSA9IGZpbGVfdHlwZSgkZGlmZi0+eydmcm9tX21vZGUnfSk7CisJCX0KKworCQlpZiAoJGRpZmYtPnsnc3RhdHVzJ30gZXEgIkEiKSB7ICMgY3JlYXRlZAorCQkJbXkgJG1vZGVfY2huZyA9ICI8c3BhbiBjbGFzcz1cImZpbGVfc3RhdHVzIG5ld1wiPltuZXcgJHRvX2ZpbGVfdHlwZSI7CisJCQkkbW9kZV9jaG5nICAgLj0gIiB3aXRoIG1vZGU6ICR0b19tb2RlX3N0ciIgaWYgJHRvX21vZGVfc3RyOworCQkJJG1vZGVfY2huZyAgIC49ICJdPC9zcGFuPiI7CisJCQlwcmludCAiPHRkPiI7CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoPT4kZGlmZi0+eyd0b19pZCd9LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLCBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSksCisJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LCBlc2NfcGF0aCgkZGlmZi0+eydmaWxlJ30pKTsKKwkJCXByaW50ICI8L3RkPlxuIjsKKwkJCXByaW50ICI8dGQ+JG1vZGVfY2huZzwvdGQ+XG4iOworCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQkJaWYgKCRhY3Rpb24gZXEgJ2NvbW1pdGRpZmYnKSB7CisJCQkJIyBsaW5rIHRvIHBhdGNoCisJCQkJJHBhdGNobm8rKzsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1hbmNob3I9PiJwYXRjaCRwYXRjaG5vIil9LAorCQkJCSAgICAgICAgICAgICAgInBhdGNoIikgLgorCQkJCSAgICAgICIgfCAiOworCQkJfQorCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgImJsb2IiKTsKKwkJCXByaW50ICI8L3RkPlxuIjsKKworCQl9IGVsc2lmICgkZGlmZi0+eydzdGF0dXMnfSBlcSAiRCIpIHsgIyBkZWxldGVkCisJCQlteSAkbW9kZV9jaG5nID0gIjxzcGFuIGNsYXNzPVwiZmlsZV9zdGF0dXMgZGVsZXRlZFwiPltkZWxldGVkICRmcm9tX2ZpbGVfdHlwZV08L3NwYW4+IjsKKwkJCXByaW50ICI8dGQ+IjsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J2Zyb21faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kcGFyZW50LCBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSksCisJCQkgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwgZXNjX3BhdGgoJGRpZmYtPnsnZmlsZSd9KSk7CisJCQlwcmludCAiPC90ZD5cbiI7CisJCQlwcmludCAiPHRkPiRtb2RlX2Nobmc8L3RkPlxuIjsKKwkJCXByaW50ICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJCWlmICgkYWN0aW9uIGVxICdjb21taXRkaWZmJykgeworCQkJCSMgbGluayB0byBwYXRjaAorCQkJCSRwYXRjaG5vKys7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtYW5jaG9yPT4icGF0Y2gkcGF0Y2hubyIpfSwKKwkJCQkgICAgICAgICAgICAgICJwYXRjaCIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0KKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J2Zyb21faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kcGFyZW50LCBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSl9LAorCQkJICAgICAgICAgICAgICAiYmxvYiIpIC4gIiB8ICI7CisJCQlpZiAoJGhhdmVfYmxhbWUpIHsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsYW1lIiwgaGFzaF9iYXNlPT4kcGFyZW50LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCQkgICAgICAgICAgICAgICJibGFtZSIpIC4gIiB8ICI7CisJCQl9CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCBoYXNoX2Jhc2U9PiRwYXJlbnQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KX0sCisJCQkgICAgICAgICAgICAgICJoaXN0b3J5Iik7CisJCQlwcmludCAiPC90ZD5cbiI7CisKKwkJfSBlbHNpZiAoJGRpZmYtPnsnc3RhdHVzJ30gZXEgIk0iIHx8ICRkaWZmLT57J3N0YXR1cyd9IGVxICJUIikgeyAjIG1vZGlmaWVkLCBvciB0eXBlIGNoYW5nZWQKKwkJCW15ICRtb2RlX2NobmdlID0gIiI7CisJCQlpZiAoJGRpZmYtPnsnZnJvbV9tb2RlJ30gIT0gJGRpZmYtPnsndG9fbW9kZSd9KSB7CisJCQkJJG1vZGVfY2huZ2UgPSAiPHNwYW4gY2xhc3M9XCJmaWxlX3N0YXR1cyBtb2RlX2NobmdlXCI+W2NoYW5nZWQiOworCQkJCWlmICgkZnJvbV9maWxlX3R5cGUgbmUgJHRvX2ZpbGVfdHlwZSkgeworCQkJCQkkbW9kZV9jaG5nZSAuPSAiIGZyb20gJGZyb21fZmlsZV90eXBlIHRvICR0b19maWxlX3R5cGUiOworCQkJCX0KKwkJCQlpZiAoKCRmcm9tX21vZGVfb2N0ICYgMDc3NykgIT0gKCR0b19tb2RlX29jdCAmIDA3NzcpKSB7CisJCQkJCWlmICgkZnJvbV9tb2RlX3N0ciAmJiAkdG9fbW9kZV9zdHIpIHsKKwkJCQkJCSRtb2RlX2NobmdlIC49ICIgbW9kZTogJGZyb21fbW9kZV9zdHItPiR0b19tb2RlX3N0ciI7CisJCQkJCX0gZWxzaWYgKCR0b19tb2RlX3N0cikgeworCQkJCQkJJG1vZGVfY2huZ2UgLj0gIiBtb2RlOiAkdG9fbW9kZV9zdHIiOworCQkJCQl9CisJCQkJfQorCQkJCSRtb2RlX2NobmdlIC49ICJdPC9zcGFuPlxuIjsKKwkJCX0KKwkJCXByaW50ICI8dGQ+IjsKKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gsIGZpbGVfbmFtZT0+JGRpZmYtPnsnZmlsZSd9KSwKKwkJCSAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0In0sIGVzY19wYXRoKCRkaWZmLT57J2ZpbGUnfSkpOworCQkJcHJpbnQgIjwvdGQ+XG4iOworCQkJcHJpbnQgIjx0ZD4kbW9kZV9jaG5nZTwvdGQ+XG4iOworCQkJcHJpbnQgIjx0ZCBjbGFzcz1cImxpbmtcIj4iOworCQkJaWYgKCRhY3Rpb24gZXEgJ2NvbW1pdGRpZmYnKSB7CisJCQkJIyBsaW5rIHRvIHBhdGNoCisJCQkJJHBhdGNobm8rKzsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1hbmNob3I9PiJwYXRjaCRwYXRjaG5vIil9LAorCQkJCSAgICAgICAgICAgICAgInBhdGNoIikgLgorCQkJCSAgICAgICIgfCAiOworCQkJfSBlbHNpZiAoJGRpZmYtPnsndG9faWQnfSBuZSAkZGlmZi0+eydmcm9tX2lkJ30pIHsKKwkJCQkjICJjb21taXQiIHZpZXcgYW5kIG1vZGlmaWVkIGZpbGUgKG5vdCBvbmx1IG1vZGUgY2hhbmdlZCkKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JkaWZmIiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sIGhhc2hfcGFyZW50PT4kZGlmZi0+eydmcm9tX2lkJ30sCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoLCBoYXNoX3BhcmVudF9iYXNlPT4kcGFyZW50LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCQkgICAgICAgICAgICAgICJkaWZmIikgLgorCQkJCSAgICAgICIgfCAiOworCQkJfQorCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kaGFzaCwgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgICJibG9iIikgLiAiIHwgIjsKKwkJCWlmICgkaGF2ZV9ibGFtZSkgeworCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxhbWUiLCBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eydmaWxlJ30pfSwKKwkJCQkgICAgICAgICAgICAgICJibGFtZSIpIC4gIiB8ICI7CisJCQl9CisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCBoYXNoX2Jhc2U9PiRoYXNoLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J2ZpbGUnfSl9LAorCQkJICAgICAgICAgICAgICAiaGlzdG9yeSIpOworCQkJcHJpbnQgIjwvdGQ+XG4iOworCisJCX0gZWxzaWYgKCRkaWZmLT57J3N0YXR1cyd9IGVxICJSIiB8fCAkZGlmZi0+eydzdGF0dXMnfSBlcSAiQyIpIHsgIyByZW5hbWVkIG9yIGNvcGllZAorCQkJbXkgJXN0YXR1c19uYW1lID0gKCdSJyA9PiAnbW92ZWQnLCAnQycgPT4gJ2NvcGllZCcpOworCQkJbXkgJG5zdGF0dXMgPSAkc3RhdHVzX25hbWV7JGRpZmYtPnsnc3RhdHVzJ319OworCQkJbXkgJG1vZGVfY2huZyA9ICIiOworCQkJaWYgKCRkaWZmLT57J2Zyb21fbW9kZSd9ICE9ICRkaWZmLT57J3RvX21vZGUnfSkgeworCQkJCSMgbW9kZSBhbHNvIGZvciBkaXJlY3Rvcmllcywgc28gd2UgY2Fubm90IHVzZSAkdG9fbW9kZV9zdHIKKwkJCQkkbW9kZV9jaG5nID0gc3ByaW50ZigiLCBtb2RlOiAlMDRvIiwgJHRvX21vZGVfb2N0ICYgMDc3Nyk7CisJCQl9CisJCQlwcmludCAiPHRkPiIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgaGFzaF9iYXNlPT4kaGFzaCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30pLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwgZXNjX3BhdGgoJGRpZmYtPnsndG9fZmlsZSd9KSkgLiAiPC90ZD5cbiIgLgorCQkJICAgICAgIjx0ZD48c3BhbiBjbGFzcz1cImZpbGVfc3RhdHVzICRuc3RhdHVzXCI+WyRuc3RhdHVzIGZyb20gIiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoX2Jhc2U9PiRwYXJlbnQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRkaWZmLT57J2Zyb21faWQnfSwgZmlsZV9uYW1lPT4kZGlmZi0+eydmcm9tX2ZpbGUnfSksCisJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LCBlc2NfcGF0aCgkZGlmZi0+eydmcm9tX2ZpbGUnfSkpIC4KKwkJCSAgICAgICIgd2l0aCAiIC4gKGludCAkZGlmZi0+eydzaW1pbGFyaXR5J30pIC4gIiUgc2ltaWxhcml0eSRtb2RlX2NobmddPC9zcGFuPjwvdGQ+XG4iIC4KKwkJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IjsKKwkJCWlmICgkYWN0aW9uIGVxICdjb21taXRkaWZmJykgeworCQkJCSMgbGluayB0byBwYXRjaAorCQkJCSRwYXRjaG5vKys7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtYW5jaG9yPT4icGF0Y2gkcGF0Y2hubyIpfSwKKwkJCQkgICAgICAgICAgICAgICJwYXRjaCIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0gZWxzaWYgKCRkaWZmLT57J3RvX2lkJ30gbmUgJGRpZmYtPnsnZnJvbV9pZCd9KSB7CisJCQkJIyAiY29tbWl0IiB2aWV3IGFuZCBtb2RpZmllZCBmaWxlIChub3Qgb25seSBwdXJlIHJlbmFtZSBvciBjb3B5KQorCQkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYmRpZmYiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGRpZmYtPnsndG9faWQnfSwgaGFzaF9wYXJlbnQ9PiRkaWZmLT57J2Zyb21faWQnfSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2gsIGhhc2hfcGFyZW50X2Jhc2U9PiRwYXJlbnQsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSwgZmlsZV9wYXJlbnQ9PiRkaWZmLT57J2Zyb21fZmlsZSd9KX0sCisJCQkJICAgICAgICAgICAgICAiZGlmZiIpIC4KKwkJCQkgICAgICAiIHwgIjsKKwkJCX0KKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2g9PiRkaWZmLT57J3RvX2lkJ30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JHBhcmVudCwgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgImJsb2IiKSAuICIgfCAiOworCQkJaWYgKCRoYXZlX2JsYW1lKSB7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibGFtZSIsIGhhc2hfYmFzZT0+JGhhc2gsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRkaWZmLT57J3RvX2ZpbGUnfSl9LAorCQkJCSAgICAgICAgICAgICAgImJsYW1lIikgLiAiIHwgIjsKKwkJCX0KKwkJCXByaW50ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGlzdG9yeSIsIGhhc2hfYmFzZT0+JGhhc2gsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZGlmZi0+eyd0b19maWxlJ30pfSwKKwkJCSAgICAgICAgICAgICAgImhpc3RvcnkiKTsKKwkJCXByaW50ICI8L3RkPlxuIjsKKworCQl9ICMgd2Ugc2hvdWxkIG5vdCBlbmNvdW50ZXIgVW5tZXJnZWQgKFUpIG9yIFVua25vd24gKFgpIHN0YXR1cworCQlwcmludCAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3Rib2R5PiIgaWYgJGhhc19oZWFkZXI7CisJcHJpbnQgIjwvdGFibGU+XG4iOworfQorCisjIFByaW50IGNvbnRleHQgbGluZXMgYW5kIHRoZW4gcmVtL2FkZCBsaW5lcyBpbiBhIHNpZGUtYnktc2lkZSBtYW5uZXIuCitzdWIgcHJpbnRfc2lkZWJ5c2lkZV9kaWZmX2xpbmVzIHsKKwlteSAoJGN0eCwgJHJlbSwgJGFkZCkgPSBAXzsKKworCSMgcHJpbnQgY29udGV4dCBibG9jayBiZWZvcmUgYWRkL3JlbSBibG9jaworCWlmIChAJGN0eCkgeworCQlwcmludCBqb2luICcnLAorCQkJJzxkaXYgY2xhc3M9ImNodW5rX2Jsb2NrIGN0eCI+JywKKwkJCQknPGRpdiBjbGFzcz0ib2xkIj4nLAorCQkJCUAkY3R4LAorCQkJCSc8L2Rpdj4nLAorCQkJCSc8ZGl2IGNsYXNzPSJuZXciPicsCisJCQkJQCRjdHgsCisJCQkJJzwvZGl2PicsCisJCQknPC9kaXY+JzsKKwl9CisKKwlpZiAoIUAkYWRkKSB7CisJCSMgcHVyZSByZW1vdmFsCisJCXByaW50IGpvaW4gJycsCisJCQknPGRpdiBjbGFzcz0iY2h1bmtfYmxvY2sgcmVtIj4nLAorCQkJCSc8ZGl2IGNsYXNzPSJvbGQiPicsCisJCQkJQCRyZW0sCisJCQkJJzwvZGl2PicsCisJCQknPC9kaXY+JzsKKwl9IGVsc2lmICghQCRyZW0pIHsKKwkJIyBwdXJlIGFkZGl0aW9uCisJCXByaW50IGpvaW4gJycsCisJCQknPGRpdiBjbGFzcz0iY2h1bmtfYmxvY2sgYWRkIj4nLAorCQkJCSc8ZGl2IGNsYXNzPSJuZXciPicsCisJCQkJQCRhZGQsCisJCQkJJzwvZGl2PicsCisJCQknPC9kaXY+JzsKKwl9IGVsc2UgeworCQlwcmludCBqb2luICcnLAorCQkJJzxkaXYgY2xhc3M9ImNodW5rX2Jsb2NrIGNoZyI+JywKKwkJCQknPGRpdiBjbGFzcz0ib2xkIj4nLAorCQkJCUAkcmVtLAorCQkJCSc8L2Rpdj4nLAorCQkJCSc8ZGl2IGNsYXNzPSJuZXciPicsCisJCQkJQCRhZGQsCisJCQkJJzwvZGl2PicsCisJCQknPC9kaXY+JzsKKwl9Cit9CisKKyMgUHJpbnQgY29udGV4dCBsaW5lcyBhbmQgdGhlbiByZW0vYWRkIGxpbmVzIGluIGlubGluZSBtYW5uZXIuCitzdWIgcHJpbnRfaW5saW5lX2RpZmZfbGluZXMgeworCW15ICgkY3R4LCAkcmVtLCAkYWRkKSA9IEBfOworCisJcHJpbnQgQCRjdHgsIEAkcmVtLCBAJGFkZDsKK30KKworIyBGb3JtYXQgcmVtb3ZlZCBhbmQgYWRkZWQgbGluZSwgbWFyayBjaGFuZ2VkIHBhcnQgYW5kIEhUTUwtZm9ybWF0IHRoZW0uCisjIEltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGNvbnRyaWIvZGlmZi1oaWdobGlnaHQKK3N1YiBmb3JtYXRfcmVtX2FkZF9saW5lc19wYWlyIHsKKwlteSAoJHJlbSwgJGFkZCwgJG51bV9wYXJlbnRzKSA9IEBfOworCisJIyBXZSBuZWVkIHRvIHVudGFiaWZ5IGxpbmVzIGJlZm9yZSBzcGxpdCgpJ2luZyB0aGVtOworCSMgb3RoZXJ3aXNlIG9mZnNldHMgd291bGQgYmUgaW52YWxpZC4KKwljaG9tcCAkcmVtOworCWNob21wICRhZGQ7CisJJHJlbSA9IHVudGFiaWZ5KCRyZW0pOworCSRhZGQgPSB1bnRhYmlmeSgkYWRkKTsKKworCW15IEByZW0gPSBzcGxpdCgvLywgJHJlbSk7CisJbXkgQGFkZCA9IHNwbGl0KC8vLCAkYWRkKTsKKwlteSAoJGVzY19yZW0sICRlc2NfYWRkKTsKKwkjIElnbm9yZSBsZWFkaW5nICsvLSBjaGFyYWN0ZXJzIGZvciBlYWNoIHBhcmVudC4KKwlteSAoJHByZWZpeF9sZW4sICRzdWZmaXhfbGVuKSA9ICgkbnVtX3BhcmVudHMsIDApOworCW15ICgkcHJlZml4X2hhc19ub25zcGFjZSwgJHN1ZmZpeF9oYXNfbm9uc3BhY2UpOworCisJbXkgJHNob3J0ZXIgPSAoQHJlbSA8IEBhZGQpID8gQHJlbSA6IEBhZGQ7CisJd2hpbGUgKCRwcmVmaXhfbGVuIDwgJHNob3J0ZXIpIHsKKwkJbGFzdCBpZiAoJHJlbVskcHJlZml4X2xlbl0gbmUgJGFkZFskcHJlZml4X2xlbl0pOworCisJCSRwcmVmaXhfaGFzX25vbnNwYWNlID0gMSBpZiAoJHJlbVskcHJlZml4X2xlbl0gIX4gL1xzLyk7CisJCSRwcmVmaXhfbGVuKys7CisJfQorCisJd2hpbGUgKCRwcmVmaXhfbGVuICsgJHN1ZmZpeF9sZW4gPCAkc2hvcnRlcikgeworCQlsYXN0IGlmICgkcmVtWy0xIC0gJHN1ZmZpeF9sZW5dIG5lICRhZGRbLTEgLSAkc3VmZml4X2xlbl0pOworCisJCSRzdWZmaXhfaGFzX25vbnNwYWNlID0gMSBpZiAoJHJlbVstMSAtICRzdWZmaXhfbGVuXSAhfiAvXHMvKTsKKwkJJHN1ZmZpeF9sZW4rKzsKKwl9CisKKwkjIE1hcmsgbGluZXMgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gZWFjaCBvdGhlciwgYnV0IGhhdmUgc29tZSBjb21tb24KKwkjIHBhcnQgdGhhdCBpc24ndCB3aGl0ZXNwYWNlLiAgSWYgbGluZXMgYXJlIGNvbXBsZXRlbHkgZGlmZmVyZW50LCBkb24ndAorCSMgbWFyayB0aGVtIGJlY2F1c2UgdGhhdCB3b3VsZCBtYWtlIG91dHB1dCB1bnJlYWRhYmxlLCBlc3BlY2lhbGx5IGlmCisJIyBkaWZmIGNvbnNpc3RzIG9mIG11bHRpcGxlIGxpbmVzLgorCWlmICgkcHJlZml4X2hhc19ub25zcGFjZSB8fCAkc3VmZml4X2hhc19ub25zcGFjZSkgeworCQkkZXNjX3JlbSA9IGVzY19odG1sX2hsX3JlZ2lvbnMoJHJlbSwgJ21hcmtlZCcsCisJCSAgICAgICAgWyRwcmVmaXhfbGVuLCBAcmVtIC0gJHN1ZmZpeF9sZW5dLCAtbmJzcD0+MSk7CisJCSRlc2NfYWRkID0gZXNjX2h0bWxfaGxfcmVnaW9ucygkYWRkLCAnbWFya2VkJywKKwkJICAgICAgICBbJHByZWZpeF9sZW4sIEBhZGQgLSAkc3VmZml4X2xlbl0sIC1uYnNwPT4xKTsKKwl9IGVsc2UgeworCQkkZXNjX3JlbSA9IGVzY19odG1sKCRyZW0sIC1uYnNwPT4xKTsKKwkJJGVzY19hZGQgPSBlc2NfaHRtbCgkYWRkLCAtbmJzcD0+MSk7CisJfQorCisJcmV0dXJuIGZvcm1hdF9kaWZmX2xpbmUoXCRlc2NfcmVtLCAncmVtJyksCisJICAgICAgIGZvcm1hdF9kaWZmX2xpbmUoXCRlc2NfYWRkLCAnYWRkJyk7Cit9CisKKyMgSFRNTC1mb3JtYXQgZGlmZiBjb250ZXh0LCByZW1vdmVkIGFuZCBhZGRlZCBsaW5lcy4KK3N1YiBmb3JtYXRfY3R4X3JlbV9hZGRfbGluZXMgeworCW15ICgkY3R4LCAkcmVtLCAkYWRkLCAkbnVtX3BhcmVudHMpID0gQF87CisJbXkgKEBuZXdfY3R4LCBAbmV3X3JlbSwgQG5ld19hZGQpOworCW15ICRjYW5faGlnaGxpZ2h0ID0gMDsKKwlteSAkaXNfY29tYmluZWQgPSAoJG51bV9wYXJlbnRzID4gMSk7CisKKwkjIEhpZ2hsaWdodCBpZiBldmVyeSByZW1vdmVkIGxpbmUgaGFzIGEgY29ycmVzcG9uZGluZyBhZGRlZCBsaW5lLgorCWlmIChAJGFkZCA+IDAgJiYgQCRhZGQgPT0gQCRyZW0pIHsKKwkJJGNhbl9oaWdobGlnaHQgPSAxOworCisJCSMgSGlnaGxpZ2h0IGxpbmVzIGluIGNvbWJpbmVkIGRpZmYgb25seSBpZiB0aGUgY2h1bmsgY29udGFpbnMKKwkJIyBkaWZmIGJldHdlZW4gdGhlIHNhbWUgdmVyc2lvbiwgZS5nLgorCQkjCisJCSMgICAgLSBhCisJCSMgICAtICBiCisJCSMgICAgKyBjCisJCSMgICArICBkCisJCSMKKwkJIyBPdGhlcndpc2UgdGhlIGhpZ2hsaWdodGxpbmcgd291bGQgYmUgY29uZnVzaW5nLgorCQlpZiAoJGlzX2NvbWJpbmVkKSB7CisJCQlmb3IgKG15ICRpID0gMDsgJGkgPCBAJGFkZDsgJGkrKykgeworCQkJCW15ICRwcmVmaXhfcmVtID0gc3Vic3RyKCRyZW0tPlskaV0sIDAsICRudW1fcGFyZW50cyk7CisJCQkJbXkgJHByZWZpeF9hZGQgPSBzdWJzdHIoJGFkZC0+WyRpXSwgMCwgJG51bV9wYXJlbnRzKTsKKworCQkJCSRwcmVmaXhfcmVtID1+IHMvLS8rL2c7CisKKwkJCQlpZiAoJHByZWZpeF9yZW0gbmUgJHByZWZpeF9hZGQpIHsKKwkJCQkJJGNhbl9oaWdobGlnaHQgPSAwOworCQkJCQlsYXN0OworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCWlmICgkY2FuX2hpZ2hsaWdodCkgeworCQlmb3IgKG15ICRpID0gMDsgJGkgPCBAJGFkZDsgJGkrKykgeworCQkJbXkgKCRsaW5lX3JlbSwgJGxpbmVfYWRkKSA9IGZvcm1hdF9yZW1fYWRkX2xpbmVzX3BhaXIoCisJCQkgICAgICAgICRyZW0tPlskaV0sICRhZGQtPlskaV0sICRudW1fcGFyZW50cyk7CisJCQlwdXNoIEBuZXdfcmVtLCAkbGluZV9yZW07CisJCQlwdXNoIEBuZXdfYWRkLCAkbGluZV9hZGQ7CisJCX0KKwl9IGVsc2UgeworCQlAbmV3X3JlbSA9IG1hcCB7IGZvcm1hdF9kaWZmX2xpbmUoJF8sICdyZW0nKSB9IEAkcmVtOworCQlAbmV3X2FkZCA9IG1hcCB7IGZvcm1hdF9kaWZmX2xpbmUoJF8sICdhZGQnKSB9IEAkYWRkOworCX0KKworCUBuZXdfY3R4ID0gbWFwIHsgZm9ybWF0X2RpZmZfbGluZSgkXywgJ2N0eCcpIH0gQCRjdHg7CisKKwlyZXR1cm4gKFxAbmV3X2N0eCwgXEBuZXdfcmVtLCBcQG5ld19hZGQpOworfQorCisjIFByaW50IGNvbnRleHQgbGluZXMgYW5kIHRoZW4gcmVtL2FkZCBsaW5lcy4KK3N1YiBwcmludF9kaWZmX2xpbmVzIHsKKwlteSAoJGN0eCwgJHJlbSwgJGFkZCwgJGRpZmZfc3R5bGUsICRudW1fcGFyZW50cykgPSBAXzsKKwlteSAkaXNfY29tYmluZWQgPSAkbnVtX3BhcmVudHMgPiAxOworCisJKCRjdHgsICRyZW0sICRhZGQpID0gZm9ybWF0X2N0eF9yZW1fYWRkX2xpbmVzKCRjdHgsICRyZW0sICRhZGQsCisJICAgICAgICAkbnVtX3BhcmVudHMpOworCisJaWYgKCRkaWZmX3N0eWxlIGVxICdzaWRlYnlzaWRlJyAmJiAhJGlzX2NvbWJpbmVkKSB7CisJCXByaW50X3NpZGVieXNpZGVfZGlmZl9saW5lcygkY3R4LCAkcmVtLCAkYWRkKTsKKwl9IGVsc2UgeworCQkjIGRlZmF1bHQgJ2lubGluZScgc3R5bGUgYW5kIHVua25vd24gc3R5bGVzCisJCXByaW50X2lubGluZV9kaWZmX2xpbmVzKCRjdHgsICRyZW0sICRhZGQpOworCX0KK30KKworc3ViIHByaW50X2RpZmZfY2h1bmsgeworCW15ICgkZGlmZl9zdHlsZSwgJG51bV9wYXJlbnRzLCAkZnJvbSwgJHRvLCBAY2h1bmspID0gQF87CisJbXkgKEBjdHgsIEByZW0sIEBhZGQpOworCisJIyBUaGUgY2xhc3Mgb2YgdGhlIHByZXZpb3VzIGxpbmUuCisJbXkgJHByZXZfY2xhc3MgPSAnJzsKKworCXJldHVybiB1bmxlc3MgQGNodW5rOworCisJIyBpbmNvbXBsZXRlIGxhc3QgbGluZSBtaWdodCBiZSBhbW9uZyByZW1vdmVkIG9yIGFkZGVkIGxpbmVzLAorCSMgb3IgYm90aCwgb3IgYW1vbmcgY29udGV4dCBsaW5lczogZmluZCB3aGljaAorCWZvciAobXkgJGkgPSAxOyAkaSA8IEBjaHVuazsgJGkrKykgeworCQlpZiAoJGNodW5rWyRpXVswXSBlcSAnaW5jb21wbGV0ZScpIHsKKwkJCSRjaHVua1skaV1bMF0gPSAkY2h1bmtbJGktMV1bMF07CisJCX0KKwl9CisKKwkjIGd1YXJkaWFuCisJcHVzaCBAY2h1bmssIFsiIiwgIiJdOworCisJZm9yZWFjaCBteSAkbGluZV9pbmZvIChAY2h1bmspIHsKKwkJbXkgKCRjbGFzcywgJGxpbmUpID0gQCRsaW5lX2luZm87CisKKwkJIyBwcmludCBjaHVuayBoZWFkZXJzCisJCWlmICgkY2xhc3MgJiYgJGNsYXNzIGVxICdjaHVua19oZWFkZXInKSB7CisJCQlwcmludCBmb3JtYXRfZGlmZl9saW5lKCRsaW5lLCAkY2xhc3MsICRmcm9tLCAkdG8pOworCQkJbmV4dDsKKwkJfQorCisJCSMjIHByaW50IGZyb20gYWNjdW11bGF0b3Igd2hlbiBoYXZlIHNvbWUgYWRkL3JlbSBsaW5lcyBvciBlbmQKKwkJIyBvZiBjaHVuayAoZmx1c2ggY29udGV4dCBsaW5lcyksIG9yIHdoZW4gaGF2ZSBhZGQgYW5kIHJlbQorCQkjIGxpbmVzIGFuZCBuZXcgYmxvY2sgaXMgcmVhY2hlZCAob3RoZXJ3aXNlIGFkZC9yZW0gbGluZXMgY291bGQKKwkJIyBiZSByZW9yZGVyZWQpCisJCWlmICghJGNsYXNzIHx8ICgoQHJlbSB8fCBAYWRkKSAmJiAkY2xhc3MgZXEgJ2N0eCcpIHx8CisJCSAgICAoQHJlbSAmJiBAYWRkICYmICRjbGFzcyBuZSAkcHJldl9jbGFzcykpIHsKKwkJCXByaW50X2RpZmZfbGluZXMoXEBjdHgsIFxAcmVtLCBcQGFkZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICRkaWZmX3N0eWxlLCAkbnVtX3BhcmVudHMpOworCQkJQGN0eCA9IEByZW0gPSBAYWRkID0gKCk7CisJCX0KKworCQkjIyBhZGRpbmcgbGluZXMgdG8gYWNjdW11bGF0b3IKKwkJIyBndWFyZGlhbiB2YWx1ZQorCQlsYXN0IHVubGVzcyAkbGluZTsKKwkJIyByZW0sIGFkZCBvciBjaGFuZ2UKKwkJaWYgKCRjbGFzcyBlcSAncmVtJykgeworCQkJcHVzaCBAcmVtLCAkbGluZTsKKwkJfSBlbHNpZiAoJGNsYXNzIGVxICdhZGQnKSB7CisJCQlwdXNoIEBhZGQsICRsaW5lOworCQl9CisJCSMgY29udGV4dCBsaW5lCisJCWlmICgkY2xhc3MgZXEgJ2N0eCcpIHsKKwkJCXB1c2ggQGN0eCwgJGxpbmU7CisJCX0KKworCQkkcHJldl9jbGFzcyA9ICRjbGFzczsKKwl9Cit9CisKK3N1YiBnaXRfcGF0Y2hzZXRfYm9keSB7CisJbXkgKCRmZCwgJGRpZmZfc3R5bGUsICRkaWZmdHJlZSwgJGhhc2gsIEBoYXNoX3BhcmVudHMpID0gQF87CisJbXkgKCRoYXNoX3BhcmVudCkgPSAkaGFzaF9wYXJlbnRzWzBdOworCisJbXkgJGlzX2NvbWJpbmVkID0gKEBoYXNoX3BhcmVudHMgPiAxKTsKKwlteSAkcGF0Y2hfaWR4ID0gMDsKKwlteSAkcGF0Y2hfbnVtYmVyID0gMDsKKwlteSAkcGF0Y2hfbGluZTsKKwlteSAkZGlmZmluZm87CisJbXkgJHRvX25hbWU7CisJbXkgKCVmcm9tLCAldG8pOworCW15IEBjaHVuazsgIyBmb3Igc2lkZS1ieS1zaWRlIGRpZmYKKworCXByaW50ICI8ZGl2IGNsYXNzPVwicGF0Y2hzZXRcIj5cbiI7CisKKwkjIHNraXAgdG8gZmlyc3QgcGF0Y2gKKwl3aGlsZSAoJHBhdGNoX2xpbmUgPSA8JGZkPikgeworCQljaG9tcCAkcGF0Y2hfbGluZTsKKworCQlsYXN0IGlmICgkcGF0Y2hfbGluZSA9fiBtL15kaWZmIC8pOworCX0KKworIFBBVENIOgorCXdoaWxlICgkcGF0Y2hfbGluZSkgeworCisJCSMgcGFyc2UgImdpdCBkaWZmIiBoZWFkZXIgbGluZQorCQlpZiAoJHBhdGNoX2xpbmUgPX4gbS9eZGlmZiAtLWdpdCAoXCIoPzpbXlxcXCJdKig/OlxcLlteXFxcIl0qKSopXCJ8W14gIl0qKSAoLiopJC8pIHsKKwkJCSMgJDEgaXMgZnJvbV9uYW1lLCB3aGljaCB3ZSBkbyBub3QgdXNlCisJCQkkdG9fbmFtZSA9IHVucXVvdGUoJDIpOworCQkJJHRvX25hbWUgPX4gcyFeYi8hITsKKwkJfSBlbHNpZiAoJHBhdGNoX2xpbmUgPX4gbS9eZGlmZiAtLShjY3xjb21iaW5lZCkgKCI/LioiPykkLykgeworCQkJIyAkMSBpcyAnY2MnIG9yICdjb21iaW5lZCcsIHdoaWNoIHdlIGRvIG5vdCB1c2UKKwkJCSR0b19uYW1lID0gdW5xdW90ZSgkMik7CisJCX0gZWxzZSB7CisJCQkkdG9fbmFtZSA9IHVuZGVmOworCQl9CisKKwkJIyBjaGVjayBpZiBjdXJyZW50IHBhdGNoIGJlbG9uZyB0byBjdXJyZW50IHJhdyBsaW5lCisJCSMgYW5kIHBhcnNlIHJhdyBnaXQtZGlmZiBsaW5lIGlmIG5lZWRlZAorCQlpZiAoaXNfcGF0Y2hfc3BsaXQoJGRpZmZpbmZvLCB7ICd0b19maWxlJyA9PiAkdG9fbmFtZSB9KSkgeworCQkJIyB0aGlzIGlzIGNvbnRpbnVhdGlvbiBvZiBhIHNwbGl0IHBhdGNoCisJCQlwcmludCAiPGRpdiBjbGFzcz1cInBhdGNoIGNvbnRcIj5cbiI7CisJCX0gZWxzZSB7CisJCQkjIGFkdmFuY2UgcmF3IGdpdC1kaWZmIG91dHB1dCBpZiBuZWVkZWQKKwkJCSRwYXRjaF9pZHgrKyBpZiBkZWZpbmVkICRkaWZmaW5mbzsKKworCQkJIyByZWFkIGFuZCBwcmVwYXJlIHBhdGNoIGluZm9ybWF0aW9uCisJCQkkZGlmZmluZm8gPSBwYXJzZWRfZGlmZnRyZWVfbGluZSgkZGlmZnRyZWUtPlskcGF0Y2hfaWR4XSk7CisKKwkJCSMgY29tcGFjdCBjb21iaW5lZCBkaWZmIG91dHB1dCBjYW4gaGF2ZSBzb21lIHBhdGNoZXMgc2tpcHBlZAorCQkJIyBmaW5kIHdoaWNoIHBhdGNoICh1c2luZyBwYXRobmFtZSBvZiByZXN1bHQpIHdlIGFyZSBhdCBub3c7CisJCQlpZiAoJGlzX2NvbWJpbmVkKSB7CisJCQkJd2hpbGUgKCR0b19uYW1lIG5lICRkaWZmaW5mby0+eyd0b19maWxlJ30pIHsKKwkJCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYXRjaFwiIGlkPVwicGF0Y2giLiAoJHBhdGNoX2lkeCsxKSAuIlwiPlxuIiAuCisJCQkJCSAgICAgIGZvcm1hdF9kaWZmX2NjX3NpbXBsaWZpZWQoJGRpZmZpbmZvLCBAaGFzaF9wYXJlbnRzKSAuCisJCQkJCSAgICAgICI8L2Rpdj5cbiI7ICAjIGNsYXNzPSJwYXRjaCIKKworCQkJCQkkcGF0Y2hfaWR4Kys7CisJCQkJCSRwYXRjaF9udW1iZXIrKzsKKworCQkJCQlsYXN0IGlmICRwYXRjaF9pZHggPiAkIyRkaWZmdHJlZTsKKwkJCQkJJGRpZmZpbmZvID0gcGFyc2VkX2RpZmZ0cmVlX2xpbmUoJGRpZmZ0cmVlLT5bJHBhdGNoX2lkeF0pOworCQkJCX0KKwkJCX0KKworCQkJIyBtb2RpZmllcyAlZnJvbSwgJXRvIGhhc2hlcworCQkJcGFyc2VfZnJvbV90b19kaWZmaW5mbygkZGlmZmluZm8sIFwlZnJvbSwgXCV0bywgQGhhc2hfcGFyZW50cyk7CisKKwkJCSMgdGhpcyBpcyBmaXJzdCBwYXRjaCBmb3IgcmF3IGRpZmZ0cmVlIGxpbmUgd2l0aCAkcGF0Y2hfaWR4IGluZGV4CisJCQkjIHdlIGluZGV4IEAkZGlmZnRyZWUgYXJyYXkgZnJvbSAwLCBidXQgbnVtYmVyIHBhdGNoZXMgZnJvbSAxCisJCQlwcmludCAiPGRpdiBjbGFzcz1cInBhdGNoXCIgaWQ9XCJwYXRjaCIuICgkcGF0Y2hfaWR4KzEpIC4iXCI+XG4iOworCQl9CisKKwkJIyBnaXQgZGlmZiBoZWFkZXIKKwkJI2Fzc2VydCgkcGF0Y2hfbGluZSA9fiBtL15kaWZmIC8pIGlmIERFQlVHOworCQkjYXNzZXJ0KCRwYXRjaF9saW5lICF+IG0hJC8kISkgaWYgREVCVUc7ICMgaXMgY2hvbXAtZWQKKwkJJHBhdGNoX251bWJlcisrOworCQkjIHByaW50ICJnaXQgZGlmZiIgaGVhZGVyCisJCXByaW50IGZvcm1hdF9naXRfZGlmZl9oZWFkZXJfbGluZSgkcGF0Y2hfbGluZSwgJGRpZmZpbmZvLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCVmcm9tLCBcJXRvKTsKKworCQkjIHByaW50IGV4dGVuZGVkIGRpZmYgaGVhZGVyCisJCXByaW50ICI8ZGl2IGNsYXNzPVwiZGlmZiBleHRlbmRlZF9oZWFkZXJcIj5cbiI7CisJRVhURU5ERURfSEVBREVSOgorCQl3aGlsZSAoJHBhdGNoX2xpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJHBhdGNoX2xpbmU7CisKKwkJCWxhc3QgRVhURU5ERURfSEVBREVSIGlmICgkcGF0Y2hfbGluZSA9fiBtL14tLS0gfF5kaWZmIC8pOworCisJCQlwcmludCBmb3JtYXRfZXh0ZW5kZWRfZGlmZl9oZWFkZXJfbGluZSgkcGF0Y2hfbGluZSwgJGRpZmZpbmZvLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCVmcm9tLCBcJXRvKTsKKwkJfQorCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJkaWZmIGV4dGVuZGVkX2hlYWRlciIKKworCQkjIGZyb20tZmlsZS90by1maWxlIGRpZmYgaGVhZGVyCisJCWlmICghICRwYXRjaF9saW5lKSB7CisJCQlwcmludCAiPC9kaXY+XG4iOyAjIGNsYXNzPSJwYXRjaCIKKwkJCWxhc3QgUEFUQ0g7CisJCX0KKwkJbmV4dCBQQVRDSCBpZiAoJHBhdGNoX2xpbmUgPX4gbS9eZGlmZiAvKTsKKwkJI2Fzc2VydCgkcGF0Y2hfbGluZSA9fiBtL14tLS0vKSBpZiBERUJVRzsKKworCQlteSAkbGFzdF9wYXRjaF9saW5lID0gJHBhdGNoX2xpbmU7CisJCSRwYXRjaF9saW5lID0gPCRmZD47CisJCWNob21wICRwYXRjaF9saW5lOworCQkjYXNzZXJ0KCRwYXRjaF9saW5lID1+IG0vXlwrXCtcKy8pIGlmIERFQlVHOworCisJCXByaW50IGZvcm1hdF9kaWZmX2Zyb21fdG9faGVhZGVyKCRsYXN0X3BhdGNoX2xpbmUsICRwYXRjaF9saW5lLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlmZmluZm8sIFwlZnJvbSwgXCV0bywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGhhc2hfcGFyZW50cyk7CisKKwkJIyB0aGUgcGF0Y2ggaXRzZWxmCisJTElORToKKwkJd2hpbGUgKCRwYXRjaF9saW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRwYXRjaF9saW5lOworCisJCQluZXh0IFBBVENIIGlmICgkcGF0Y2hfbGluZSA9fiBtL15kaWZmIC8pOworCisJCQlteSAkY2xhc3MgPSBkaWZmX2xpbmVfY2xhc3MoJHBhdGNoX2xpbmUsIFwlZnJvbSwgXCV0byk7CisKKwkJCWlmICgkY2xhc3MgZXEgJ2NodW5rX2hlYWRlcicpIHsKKwkJCQlwcmludF9kaWZmX2NodW5rKCRkaWZmX3N0eWxlLCBzY2FsYXIgQGhhc2hfcGFyZW50cywgXCVmcm9tLCBcJXRvLCBAY2h1bmspOworCQkJCUBjaHVuayA9ICgpOworCQkJfQorCisJCQlwdXNoIEBjaHVuaywgWyAkY2xhc3MsICRwYXRjaF9saW5lIF07CisJCX0KKworCX0gY29udGludWUgeworCQlpZiAoQGNodW5rKSB7CisJCQlwcmludF9kaWZmX2NodW5rKCRkaWZmX3N0eWxlLCBzY2FsYXIgQGhhc2hfcGFyZW50cywgXCVmcm9tLCBcJXRvLCBAY2h1bmspOworCQkJQGNodW5rID0gKCk7CisJCX0KKwkJcHJpbnQgIjwvZGl2PlxuIjsgIyBjbGFzcz0icGF0Y2giCisJfQorCisJIyBmb3IgY29tcGFjdCBjb21iaW5lZCAoLS1jYykgZm9ybWF0LCB3aXRoIGNodW5rIGFuZCBwYXRjaCBzaW1wbGlmaWNhdGlvbgorCSMgdGhlIHBhdGNoc2V0IG1pZ2h0IGJlIGVtcHR5LCBidXQgdGhlcmUgbWlnaHQgYmUgdW5wcm9jZXNzZWQgcmF3IGxpbmVzCisJZm9yICgrKyRwYXRjaF9pZHggaWYgJHBhdGNoX251bWJlciA+IDA7CisJICAgICAkcGF0Y2hfaWR4IDwgQCRkaWZmdHJlZTsKKwkgICAgICsrJHBhdGNoX2lkeCkgeworCQkjIHJlYWQgYW5kIHByZXBhcmUgcGF0Y2ggaW5mb3JtYXRpb24KKwkJJGRpZmZpbmZvID0gcGFyc2VkX2RpZmZ0cmVlX2xpbmUoJGRpZmZ0cmVlLT5bJHBhdGNoX2lkeF0pOworCisJCSMgZ2VuZXJhdGUgYW5jaG9yIGZvciAicGF0Y2giIGxpbmtzIGluIGRpZmZ0cmVlIC8gd2hhdGNoYW5nZWQgcGFydAorCQlwcmludCAiPGRpdiBjbGFzcz1cInBhdGNoXCIgaWQ9XCJwYXRjaCIuICgkcGF0Y2hfaWR4KzEpIC4iXCI+XG4iIC4KKwkJICAgICAgZm9ybWF0X2RpZmZfY2Nfc2ltcGxpZmllZCgkZGlmZmluZm8sIEBoYXNoX3BhcmVudHMpIC4KKwkJICAgICAgIjwvZGl2PlxuIjsgICMgY2xhc3M9InBhdGNoIgorCisJCSRwYXRjaF9udW1iZXIrKzsKKwl9CisKKwlpZiAoJHBhdGNoX251bWJlciA9PSAwKSB7CisJCWlmIChAaGFzaF9wYXJlbnRzID4gMSkgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJkaWZmIG5vZGlmZmVyZW5jZXNcIj5Ucml2aWFsIG1lcmdlPC9kaXY+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJkaWZmIG5vZGlmZmVyZW5jZXNcIj5ObyBkaWZmZXJlbmNlcyBmb3VuZDwvZGl2PlxuIjsKKwkJfQorCX0KKworCXByaW50ICI8L2Rpdj5cbiI7ICMgY2xhc3M9InBhdGNoc2V0IgorfQorCisjIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuCisKK3N1YiBnaXRfcHJvamVjdF9zZWFyY2hfZm9ybSB7CisJbXkgKCRzZWFyY2h0ZXh0LCAkc2VhcmNoX3VzZV9yZWdleHApID0gQF87CisKKwlteSAkbGltaXQgPSAnJzsKKwlpZiAoJHByb2plY3RfZmlsdGVyKSB7CisJCSRsaW1pdCA9ICIgaW4gJyRwcm9qZWN0X2ZpbHRlci8nIjsKKwl9CisKKwlwcmludCAiPGRpdiBjbGFzcz1cInByb2pzZWFyY2hcIj5cbiI7CisJcHJpbnQgJGNnaS0+c3RhcnRfZm9ybSgtbWV0aG9kID0+ICdnZXQnLCAtYWN0aW9uID0+ICRteV91cmkpIC4KKwkgICAgICAkY2dpLT5oaWRkZW4oLW5hbWUgPT4gJ2EnLCAtdmFsdWUgPT4gJ3Byb2plY3RfbGlzdCcpICAuICJcbiI7CisJcHJpbnQgJGNnaS0+aGlkZGVuKC1uYW1lID0+ICdwZicsIC12YWx1ZSA9PiAkcHJvamVjdF9maWx0ZXIpLiAiXG4iCisJCWlmIChkZWZpbmVkICRwcm9qZWN0X2ZpbHRlcik7CisJcHJpbnQgJGNnaS0+dGV4dGZpZWxkKC1uYW1lID0+ICdzJywgLXZhbHVlID0+ICRzZWFyY2h0ZXh0LAorCSAgICAgICAgICAgICAgICAgICAgICAtdGl0bGUgPT4gIlNlYXJjaCBwcm9qZWN0IGJ5IG5hbWUgYW5kIGRlc2NyaXB0aW9uJGxpbWl0IiwKKwkgICAgICAgICAgICAgICAgICAgICAgLXNpemUgPT4gNjApIC4gIlxuIiAuCisJICAgICAgIjxzcGFuIHRpdGxlPVwiRXh0ZW5kZWQgcmVndWxhciBleHByZXNzaW9uXCI+IiAuCisJICAgICAgJGNnaS0+Y2hlY2tib3goLW5hbWUgPT4gJ3NyJywgLXZhbHVlID0+IDEsIC1sYWJlbCA9PiAncmUnLAorCSAgICAgICAgICAgICAgICAgICAgIC1jaGVja2VkID0+ICRzZWFyY2hfdXNlX3JlZ2V4cCkgLgorCSAgICAgICI8L3NwYW4+XG4iIC4KKwkgICAgICAkY2dpLT5zdWJtaXQoLW5hbWUgPT4gJ2J0blMnLCAtdmFsdWUgPT4gJ1NlYXJjaCcpIC4KKwkgICAgICAkY2dpLT5lbmRfZm9ybSgpIC4gIlxuIiAuCisJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0ID0+IHVuZGVmLCBzZWFyY2h0ZXh0ID0+IHVuZGVmLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvamVjdF9maWx0ZXIgPT4gJHByb2plY3RfZmlsdGVyKX0sCisJICAgICAgICAgICAgICBlc2NfaHRtbCgiTGlzdCBhbGwgcHJvamVjdHMkbGltaXQiKSkgLiAiPGJyIC8+XG4iOworCXByaW50ICI8L2Rpdj5cbiI7Cit9CisKKyMgZW50cnkgZm9yIGdpdmVuIEBrZXlzIG5lZWRzIGZpbGxpbmcgaWYgYXQgbGVhc3Qgb25lIG9mIGtleXMgaW4gbGlzdAorIyBpcyBub3QgcHJlc2VudCBpbiAlJHByb2plY3RfaW5mbworc3ViIHByb2plY3RfaW5mb19uZWVkc19maWxsaW5nIHsKKwlteSAoJHByb2plY3RfaW5mbywgQGtleXMpID0gQF87CisKKwkjIHJldHVybiBMaXN0OjpNb3JlVXRpbHM6OmFueSB7ICFleGlzdHMgJHByb2plY3RfaW5mby0+eyRffSB9IEBrZXlzOworCWZvcmVhY2ggbXkgJGtleSAoQGtleXMpIHsKKwkJaWYgKCFleGlzdHMgJHByb2plY3RfaW5mby0+eyRrZXl9KSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKyMgZmlsbHMgcHJvamVjdCBsaXN0IGluZm8gKGFnZSwgZGVzY3JpcHRpb24sIG93bmVyLCBjYXRlZ29yeSwgZm9ya3MsIGV0Yy4pCisjIGZvciBlYWNoIHByb2plY3QgaW4gdGhlIGxpc3QsIHJlbW92aW5nIGludmFsaWQgcHJvamVjdHMgZnJvbQorIyByZXR1cm5lZCBsaXN0LCBvciBmaWxsIG9ubHkgc3BlY2lmaWVkIGluZm8uCisjCisjIEludmFsaWQgcHJvamVjdHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcmV0dXJuZWQgbGlzdCBpZiBhbmQgb25seSBpZiB5b3UKKyMgYXNrICdhZ2UnIG9yICdhZ2Vfc3RyaW5nJyB0byBiZSBmaWxsZWQsIGJlY2F1c2UgdGhleSBhcmUgdGhlIG9ubHkgZmllbGRzCisjIHRoYXQgcnVuIHVuY29uZGl0aW9uYWxseSBnaXQgY29tbWFuZCB0aGF0IHJlcXVpcmVzIHJlcG9zaXRvcnksIGFuZAorIyB0aGVyZWZvcmUgZG8gYWx3YXlzIGNoZWNrIGlmIHByb2plY3QgcmVwb3NpdG9yeSBpcyBpbnZhbGlkLgorIworIyBVU0FHRToKKyMgKiBmaWxsX3Byb2plY3RfbGlzdF9pbmZvKFxAcHJvamVjdF9saXN0LCAnZGVzY3JfbG9uZycsICdjdGFncycpCisjICAgZW5zdXJlcyB0aGF0ICdkZXNjcl9sb25nJyBhbmQgJ2N0YWdzJyBmaWVsZHMgYXJlIGZpbGxlZAorIyAqIEBwcm9qZWN0X2xpc3QgPSBmaWxsX3Byb2plY3RfbGlzdF9pbmZvKFxAcHJvamVjdF9saXN0KQorIyAgIGVuc3VyZXMgdGhhdCBhbGwgZmllbGRzIGFyZSBmaWxsZWQgKGFuZCBpbnZhbGlkIHByb2plY3RzIHJlbW92ZWQpCisjCisjIE5PVEU6IG1vZGlmaWVzICRwcm9qbGlzdCwgYnV0IGRvZXMgbm90IHJlbW92ZSBlbnRyaWVzIGZyb20gaXQKK3N1YiBmaWxsX3Byb2plY3RfbGlzdF9pbmZvIHsKKwlteSAoJHByb2psaXN0LCBAd2FudGVkX2tleXMpID0gQF87CisJbXkgQHByb2plY3RzOworCW15ICRmaWx0ZXJfc2V0ID0gc3ViIHsgcmV0dXJuIEBfOyB9OworCWlmIChAd2FudGVkX2tleXMpIHsKKwkJbXkgJXdhbnRlZF9rZXlzID0gbWFwIHsgJF8gPT4gMSB9IEB3YW50ZWRfa2V5czsKKwkJJGZpbHRlcl9zZXQgPSBzdWIgeyByZXR1cm4gZ3JlcCB7ICR3YW50ZWRfa2V5c3skX30gfSBAXzsgfTsKKwl9CisKKwlteSAkc2hvd19jdGFncyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdjdGFncycpOworIFBST0pFQ1Q6CisJZm9yZWFjaCBteSAkcHIgKEAkcHJvamxpc3QpIHsKKwkJaWYgKHByb2plY3RfaW5mb19uZWVkc19maWxsaW5nKCRwciwgJGZpbHRlcl9zZXQtPignYWdlJywgJ2FnZV9zdHJpbmcnKSkpIHsKKwkJCW15IChAYWN0aXZpdHkpID0gZ2l0X2dldF9sYXN0X2FjdGl2aXR5KCRwci0+eydwYXRoJ30pOworCQkJdW5sZXNzIChAYWN0aXZpdHkpIHsKKwkJCQluZXh0IFBST0pFQ1Q7CisJCQl9CisJCQkoJHByLT57J2FnZSd9LCAkcHItPnsnYWdlX3N0cmluZyd9KSA9IEBhY3Rpdml0eTsKKwkJfQorCQlpZiAocHJvamVjdF9pbmZvX25lZWRzX2ZpbGxpbmcoJHByLCAkZmlsdGVyX3NldC0+KCdkZXNjcicsICdkZXNjcl9sb25nJykpKSB7CisJCQlteSAkZGVzY3IgPSBnaXRfZ2V0X3Byb2plY3RfZGVzY3JpcHRpb24oJHByLT57J3BhdGgnfSkgfHwgIiI7CisJCQkkZGVzY3IgPSB0b191dGY4KCRkZXNjcik7CisJCQkkcHItPnsnZGVzY3JfbG9uZyd9ID0gJGRlc2NyOworCQkJJHByLT57J2Rlc2NyJ30gPSBjaG9wX3N0cigkZGVzY3IsICRwcm9qZWN0c19saXN0X2Rlc2NyaXB0aW9uX3dpZHRoLCA1KTsKKwkJfQorCQlpZiAocHJvamVjdF9pbmZvX25lZWRzX2ZpbGxpbmcoJHByLCAkZmlsdGVyX3NldC0+KCdvd25lcicpKSkgeworCQkJJHByLT57J293bmVyJ30gPSBnaXRfZ2V0X3Byb2plY3Rfb3duZXIoIiRwci0+eydwYXRoJ30iKSB8fCAiIjsKKwkJfQorCQlpZiAoJHNob3dfY3RhZ3MgJiYKKwkJICAgIHByb2plY3RfaW5mb19uZWVkc19maWxsaW5nKCRwciwgJGZpbHRlcl9zZXQtPignY3RhZ3MnKSkpIHsKKwkJCSRwci0+eydjdGFncyd9ID0gZ2l0X2dldF9wcm9qZWN0X2N0YWdzKCRwci0+eydwYXRoJ30pOworCQl9CisJCWlmICgkcHJvamVjdHNfbGlzdF9ncm91cF9jYXRlZ29yaWVzICYmCisJCSAgICBwcm9qZWN0X2luZm9fbmVlZHNfZmlsbGluZygkcHIsICRmaWx0ZXJfc2V0LT4oJ2NhdGVnb3J5JykpKSB7CisJCQlteSAkY2F0ID0gZ2l0X2dldF9wcm9qZWN0X2NhdGVnb3J5KCRwci0+eydwYXRoJ30pIHx8CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcm9qZWN0X2xpc3RfZGVmYXVsdF9jYXRlZ29yeTsKKwkJCSRwci0+eydjYXRlZ29yeSd9ID0gdG9fdXRmOCgkY2F0KTsKKwkJfQorCisJCXB1c2ggQHByb2plY3RzLCAkcHI7CisJfQorCisJcmV0dXJuIEBwcm9qZWN0czsKK30KKworc3ViIHNvcnRfcHJvamVjdHNfbGlzdCB7CisJbXkgKCRwcm9qbGlzdCwgJG9yZGVyKSA9IEBfOworCisJc3ViIG9yZGVyX3N0ciB7CisJCW15ICRrZXkgPSBzaGlmdDsKKwkJcmV0dXJuIHN1YiB7ICRhLT57JGtleX0gY21wICRiLT57JGtleX0gfTsKKwl9CisKKwlzdWIgb3JkZXJfbnVtX3RoZW5fdW5kZWYgeworCQlteSAka2V5ID0gc2hpZnQ7CisJCXJldHVybiBzdWIgeworCQkJZGVmaW5lZCAkYS0+eyRrZXl9ID8KKwkJCQkoZGVmaW5lZCAkYi0+eyRrZXl9ID8gJGEtPnska2V5fSA8PT4gJGItPnska2V5fSA6IC0xKSA6CisJCQkJKGRlZmluZWQgJGItPnska2V5fSA/IDEgOiAwKQorCQl9OworCX0KKworCW15ICVvcmRlcmluZ3MgPSAoCisJCXByb2plY3QgPT4gb3JkZXJfc3RyKCdwYXRoJyksCisJCWRlc2NyID0+IG9yZGVyX3N0cignZGVzY3JfbG9uZycpLAorCQlvd25lciA9PiBvcmRlcl9zdHIoJ293bmVyJyksCisJCWFnZSA9PiBvcmRlcl9udW1fdGhlbl91bmRlZignYWdlJyksCisJKTsKKworCW15ICRvcmRlcmluZyA9ICRvcmRlcmluZ3N7JG9yZGVyfTsKKwlyZXR1cm4gZGVmaW5lZCAkb3JkZXJpbmcgPyBzb3J0ICRvcmRlcmluZyBAJHByb2psaXN0IDogQCRwcm9qbGlzdDsKK30KKworIyByZXR1cm5zIGEgaGFzaCBvZiBjYXRlZ29yaWVzLCBjb250YWluaW5nIHRoZSBsaXN0IG9mIHByb2plY3QKKyMgYmVsb25naW5nIHRvIGVhY2ggY2F0ZWdvcnkKK3N1YiBidWlsZF9wcm9qbGlzdF9ieV9jYXRlZ29yeSB7CisJbXkgKCRwcm9qbGlzdCwgJGZyb20sICR0bykgPSBAXzsKKwlteSAlY2F0ZWdvcmllczsKKworCSRmcm9tID0gMCB1bmxlc3MgZGVmaW5lZCAkZnJvbTsKKwkkdG8gPSAkIyRwcm9qbGlzdCBpZiAoIWRlZmluZWQgJHRvIHx8ICQjJHByb2psaXN0IDwgJHRvKTsKKworCWZvciAobXkgJGkgPSAkZnJvbTsgJGkgPD0gJHRvOyAkaSsrKSB7CisJCW15ICRwciA9ICRwcm9qbGlzdC0+WyRpXTsKKwkJcHVzaCBAeyRjYXRlZ29yaWVzeyAkcHItPnsnY2F0ZWdvcnknfSB9fSwgJHByOworCX0KKworCXJldHVybiB3YW50YXJyYXkgPyAlY2F0ZWdvcmllcyA6IFwlY2F0ZWdvcmllczsKK30KKworIyBwcmludCAnc29ydCBieScgPHRoPiBlbGVtZW50LCBnZW5lcmF0aW5nICdzb3J0IGJ5ICRuYW1lJyByZXBsYXkgbGluaworIyBpZiB0aGF0IG9yZGVyIGlzIG5vdCBzZWxlY3RlZAorc3ViIHByaW50X3NvcnRfdGggeworCXByaW50IGZvcm1hdF9zb3J0X3RoKEBfKTsKK30KKworc3ViIGZvcm1hdF9zb3J0X3RoIHsKKwlteSAoJG5hbWUsICRvcmRlciwgJGhlYWRlcikgPSBAXzsKKwlteSAkc29ydF90aCA9ICIiOworCSRoZWFkZXIgfHw9IHVjZmlyc3QoJG5hbWUpOworCisJaWYgKCRvcmRlciBlcSAkbmFtZSkgeworCQkkc29ydF90aCAuPSAiPHRoPiRoZWFkZXI8L3RoPlxuIjsKKwl9IGVsc2UgeworCQkkc29ydF90aCAuPSAiPHRoPiIgLgorCQkgICAgICAgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIG9yZGVyPT4kbmFtZSksCisJCSAgICAgICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAiaGVhZGVyIn0sICRoZWFkZXIpIC4KKwkJICAgICAgICAgICAgIjwvdGg+XG4iOworCX0KKworCXJldHVybiAkc29ydF90aDsKK30KKworc3ViIGdpdF9wcm9qZWN0X2xpc3Rfcm93cyB7CisJbXkgKCRwcm9qbGlzdCwgJGZyb20sICR0bywgJGNoZWNrX2ZvcmtzKSA9IEBfOworCisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjJHByb2psaXN0IGlmICghZGVmaW5lZCAkdG8gfHwgJCMkcHJvamxpc3QgPCAkdG8pOworCisJbXkgJGFsdGVybmF0ZSA9IDE7CisJZm9yIChteSAkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJHByID0gJHByb2psaXN0LT5bJGldOworCisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisKKwkJaWYgKCRjaGVja19mb3JrcykgeworCQkJcHJpbnQgIjx0ZD4iOworCQkJaWYgKCRwci0+eydmb3Jrcyd9KSB7CisJCQkJbXkgJG5mb3JrcyA9IHNjYWxhciBAeyRwci0+eydmb3Jrcyd9fTsKKwkJCQlpZiAoJG5mb3JrcyA+IDApIHsKKwkJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJmb3JrcyIpLAorCQkJCQkgICAgICAgICAgICAgICAtdGl0bGUgPT4gIiRuZm9ya3MgZm9ya3MifSwgIisiKTsKKwkJCQl9IGVsc2UgeworCQkJCQlwcmludCAkY2dpLT5zcGFuKHstdGl0bGUgPT4gIiRuZm9ya3MgZm9ya3MifSwgIisiKTsKKwkJCQl9CisJCQl9CisJCQlwcmludCAiPC90ZD5cbiI7CisJCX0KKwkJcHJpbnQgIjx0ZD4iIC4gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJzdW1tYXJ5IiksCisJCSAgICAgICAgICAgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCJ9LAorCQkgICAgICAgICAgICAgICAgICAgICAgIGVzY19odG1sX21hdGNoX2hsKCRwci0+eydwYXRoJ30sICRzZWFyY2hfcmVnZXhwKSkgLgorCQkgICAgICAiPC90ZD5cbiIgLgorCQkgICAgICAiPHRkPiIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+InN1bW1hcnkiKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0IiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgLXRpdGxlID0+ICRwci0+eydkZXNjcl9sb25nJ319LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAkc2VhcmNoX3JlZ2V4cAorCQkgICAgICAgICAgICAgICAgICAgICAgICA/IGVzY19odG1sX21hdGNoX2hsX2Nob3BwZWQoJHByLT57J2Rlc2NyX2xvbmcnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwci0+eydkZXNjcid9LCAkc2VhcmNoX3JlZ2V4cCkKKwkJICAgICAgICAgICAgICAgICAgICAgICAgOiBlc2NfaHRtbCgkcHItPnsnZGVzY3InfSkpIC4KKwkJICAgICAgIjwvdGQ+XG4iOworCQl1bmxlc3MgKCRvbWl0X293bmVyKSB7CisJCSAgICAgICAgcHJpbnQgIjx0ZD48aT4iIC4gY2hvcF9hbmRfZXNjYXBlX3N0cigkcHItPnsnb3duZXInfSwgMTUpIC4gIjwvaT48L3RkPlxuIjsKKwkJfQorCQl1bmxlc3MgKCRvbWl0X2FnZV9jb2x1bW4pIHsKKwkJICAgICAgICBwcmludCAiPHRkIGNsYXNzPVwiIi4gYWdlX2NsYXNzKCRwci0+eydhZ2UnfSkgLiAiXCI+IiAuCisJCSAgICAgICAgICAgIChkZWZpbmVkICRwci0+eydhZ2Vfc3RyaW5nJ30gPyAkcHItPnsnYWdlX3N0cmluZyd9IDogIk5vIGNvbW1pdHMiKSAuICI8L3RkPlxuIjsKKwkJfQorCQlwcmludCI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYocHJvamVjdD0+JHByLT57J3BhdGgnfSwgYWN0aW9uPT4ic3VtbWFyeSIpfSwgInN1bW1hcnkiKSAgIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+InNob3J0bG9nIil9LCAic2hvcnRsb2ciKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJsb2ciKX0sICJsb2ciKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihwcm9qZWN0PT4kcHItPnsncGF0aCd9LCBhY3Rpb249PiJ0cmVlIil9LCAidHJlZSIpIC4KKwkJICAgICAgKCRwci0+eydmb3Jrcyd9ID8gIiB8ICIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKHByb2plY3Q9PiRwci0+eydwYXRoJ30sIGFjdGlvbj0+ImZvcmtzIil9LCAiZm9ya3MiKSA6ICcnKSAuCisJCSAgICAgICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9Cit9CisKK3N1YiBnaXRfcHJvamVjdF9saXN0X2JvZHkgeworCSMgYWN0dWFsbHkgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJHByb2psaXN0LCAkb3JkZXIsICRmcm9tLCAkdG8sICRleHRyYSwgJG5vX2hlYWRlcikgPSBAXzsKKwlteSBAcHJvamVjdHMgPSBAJHByb2psaXN0OworCisJbXkgJGNoZWNrX2ZvcmtzID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2ZvcmtzJyk7CisJbXkgJHNob3dfY3RhZ3MgID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2N0YWdzJyk7CisJbXkgJHRhZ2ZpbHRlciA9ICRzaG93X2N0YWdzID8gJGlucHV0X3BhcmFtc3snY3RhZyd9IDogdW5kZWY7CisJJGNoZWNrX2ZvcmtzID0gdW5kZWYKKwkJaWYgKCR0YWdmaWx0ZXIgfHwgJHNlYXJjaF9yZWdleHApOworCisJIyBmaWx0ZXJpbmcgb3V0IGZvcmtzIGJlZm9yZSBmaWxsaW5nIGluZm8gYWxsb3dzIHRvIGRvIGxlc3Mgd29yaworCUBwcm9qZWN0cyA9IGZpbHRlcl9mb3Jrc19mcm9tX3Byb2plY3RzX2xpc3QoXEBwcm9qZWN0cykKKwkJaWYgKCRjaGVja19mb3Jrcyk7CisJIyBzZWFyY2hfcHJvamVjdHNfbGlzdCBwcmUtZmlsbHMgcmVxdWlyZWQgaW5mbworCUBwcm9qZWN0cyA9IHNlYXJjaF9wcm9qZWN0c19saXN0KFxAcHJvamVjdHMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlYXJjaF9yZWdleHAnID0+ICRzZWFyY2hfcmVnZXhwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0YWdmaWx0ZXInICA9PiAkdGFnZmlsdGVyKQorCQlpZiAoJHRhZ2ZpbHRlciB8fCAkc2VhcmNoX3JlZ2V4cCk7CisJIyBmaWxsIHRoZSByZXN0CisJbXkgQGFsbF9maWVsZHMgPSAoJ2Rlc2NyJywgJ2Rlc2NyX2xvbmcnLCAnY3RhZ3MnLCAnY2F0ZWdvcnknKTsKKwlwdXNoIEBhbGxfZmllbGRzLCAoJ2FnZScsICdhZ2Vfc3RyaW5nJykgdW5sZXNzKCRvbWl0X2FnZV9jb2x1bW4pOworCXB1c2ggQGFsbF9maWVsZHMsICdvd25lcicgdW5sZXNzKCRvbWl0X293bmVyKTsKKwlAcHJvamVjdHMgPSBmaWxsX3Byb2plY3RfbGlzdF9pbmZvKFxAcHJvamVjdHMsIEBhbGxfZmllbGRzKTsKKworCSRvcmRlciB8fD0gJGRlZmF1bHRfcHJvamVjdHNfb3JkZXI7CisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjcHJvamVjdHMgaWYgKCFkZWZpbmVkICR0byB8fCAkI3Byb2plY3RzIDwgJHRvKTsKKworCSMgc2hvcnQgY2lyY3VpdAorCWlmICgkZnJvbSA+ICR0bykgeworCQlwcmludCAiPGNlbnRlcj5cbiIuCisJCSAgICAgICI8Yj5ObyBzdWNoIHByb2plY3RzIGZvdW5kPC9iPjxiciAvPlxuIi4KKwkJICAgICAgIkNsaWNrICIuJGNnaS0+YSh7LWhyZWY9PmhyZWYocHJvamVjdD0+dW5kZWYpfSwiaGVyZSIpLiIgdG8gdmlldyBhbGwgcHJvamVjdHM8YnIgLz5cbiIuCisJCSAgICAgICI8L2NlbnRlcj5cbjxiciAvPlxuIjsKKwkJcmV0dXJuOworCX0KKworCUBwcm9qZWN0cyA9IHNvcnRfcHJvamVjdHNfbGlzdChcQHByb2plY3RzLCAkb3JkZXIpOworCisJaWYgKCRzaG93X2N0YWdzKSB7CisJCW15ICRjdGFncyA9IGdpdF9nYXRoZXJfYWxsX2N0YWdzKFxAcHJvamVjdHMpOworCQlteSAkY2xvdWQgPSBnaXRfcG9wdWxhdGVfcHJvamVjdF90YWdjbG91ZCgkY3RhZ3MpOworCQlwcmludCBnaXRfc2hvd19wcm9qZWN0X3RhZ2Nsb3VkKCRjbG91ZCwgNjQpOworCX0KKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJwcm9qZWN0X2xpc3RcIj5cbiI7CisJdW5sZXNzICgkbm9faGVhZGVyKSB7CisJCXByaW50ICI8dHI+XG4iOworCQlpZiAoJGNoZWNrX2ZvcmtzKSB7CisJCQlwcmludCAiPHRoPjwvdGg+XG4iOworCQl9CisJCXByaW50X3NvcnRfdGgoJ3Byb2plY3QnLCAkb3JkZXIsICdQcm9qZWN0Jyk7CisJCXByaW50X3NvcnRfdGgoJ2Rlc2NyJywgJG9yZGVyLCAnRGVzY3JpcHRpb24nKTsKKwkJcHJpbnRfc29ydF90aCgnb3duZXInLCAkb3JkZXIsICdPd25lcicpIHVubGVzcyAkb21pdF9vd25lcjsKKwkJcHJpbnRfc29ydF90aCgnYWdlJywgJG9yZGVyLCAnTGFzdCBDaGFuZ2UnKSB1bmxlc3MgJG9taXRfYWdlX2NvbHVtbjsKKwkJcHJpbnQgIjx0aD48L3RoPlxuIiAuICMgZm9yIGxpbmtzCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisKKwlpZiAoJHByb2plY3RzX2xpc3RfZ3JvdXBfY2F0ZWdvcmllcykgeworCQkjIG9ubHkgZGlzcGxheSBjYXRlZ29yaWVzIHdpdGggcHJvamVjdHMgaW4gdGhlICRmcm9tLSR0byB3aW5kb3cKKwkJQHByb2plY3RzID0gc29ydCB7JGEtPnsnY2F0ZWdvcnknfSBjbXAgJGItPnsnY2F0ZWdvcnknfX0gQHByb2plY3RzWyRmcm9tLi4kdG9dOworCQlteSAlY2F0ZWdvcmllcyA9IGJ1aWxkX3Byb2psaXN0X2J5X2NhdGVnb3J5KFxAcHJvamVjdHMsICRmcm9tLCAkdG8pOworCQlmb3JlYWNoIG15ICRjYXQgKHNvcnQga2V5cyAlY2F0ZWdvcmllcykgeworCQkJdW5sZXNzICgkY2F0IGVxICIiKSB7CisJCQkJcHJpbnQgIjx0cj5cbiI7CisJCQkJaWYgKCRjaGVja19mb3JrcykgeworCQkJCQlwcmludCAiPHRkPjwvdGQ+XG4iOworCQkJCX0KKwkJCQlwcmludCAiPHRkIGNsYXNzPVwiY2F0ZWdvcnlcIiBjb2xzcGFuPVwiNVwiPiIuZXNjX2h0bWwoJGNhdCkuIjwvdGQ+XG4iOworCQkJCXByaW50ICI8L3RyPlxuIjsKKwkJCX0KKworCQkJZ2l0X3Byb2plY3RfbGlzdF9yb3dzKCRjYXRlZ29yaWVzeyRjYXR9LCB1bmRlZiwgdW5kZWYsICRjaGVja19mb3Jrcyk7CisJCX0KKwl9IGVsc2UgeworCQlnaXRfcHJvamVjdF9saXN0X3Jvd3MoXEBwcm9qZWN0cywgJGZyb20sICR0bywgJGNoZWNrX2ZvcmtzKTsKKwl9CisKKwlpZiAoZGVmaW5lZCAkZXh0cmEpIHsKKwkJcHJpbnQgIjx0cj5cbiI7CisJCWlmICgkY2hlY2tfZm9ya3MpIHsKKwkJCXByaW50ICI8dGQ+PC90ZD5cbiI7CisJCX0KKwkJcHJpbnQgIjx0ZCBjb2xzcGFuPVwiNVwiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKK3N1YiBnaXRfbG9nX2JvZHkgeworCSMgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJGNvbW1pdGxpc3QsICRmcm9tLCAkdG8sICRyZWZzLCAkZXh0cmEpID0gQF87CisKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JGNvbW1pdGxpc3R9IGlmICghZGVmaW5lZCAkdG8gfHwgJCN7JGNvbW1pdGxpc3R9IDwgJHRvKTsKKworCWZvciAobXkgJGkgPSAwOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJWNvID0gJXskY29tbWl0bGlzdC0+WyRpXX07CisJCW5leHQgaWYgISVjbzsKKwkJbXkgJGNvbW1pdCA9ICRjb3snaWQnfTsKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY29tbWl0KTsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsCisJCSAgICAgICAgICAgICAgICI8c3BhbiBjbGFzcz1cImFnZVwiPiRjb3snYWdlX3N0cmluZyd9PC9zcGFuPiIgLgorCQkgICAgICAgICAgICAgICBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwKKwkJICAgICAgICAgICAgICAgJGNvbW1pdCk7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVfdGV4dFwiPlxuIiAuCisJCSAgICAgICI8ZGl2IGNsYXNzPVwibG9nX2xpbmtcIj5cbiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpfSwgImNvbW1pdCIpIC4KKwkJICAgICAgIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmYiLCBoYXNoPT4kY29tbWl0KX0sICJjb21taXRkaWZmIikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb21taXQsIGhhc2hfYmFzZT0+JGNvbW1pdCl9LCAidHJlZSIpIC4KKwkJICAgICAgIjxici8+XG4iIC4KKwkJICAgICAgIjwvZGl2PlxuIjsKKwkJICAgICAgZ2l0X3ByaW50X2F1dGhvcnNoaXAoXCVjbywgLXRhZyA9PiAnc3BhbicpOworCQkgICAgICBwcmludCAiPGJyLz5cbjwvZGl2PlxuIjsKKworCQlwcmludCAiPGRpdiBjbGFzcz1cImxvZ19ib2R5XCI+XG4iOworCQlnaXRfcHJpbnRfbG9nKCRjb3snY29tbWVudCd9LCAtZmluYWxfZW1wdHlfbGluZT0+IDEpOworCQlwcmludCAiPC9kaXY+XG4iOworCX0KKwlpZiAoJGV4dHJhKSB7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9uYXZcIj5cbiI7CisJCXByaW50ICIkZXh0cmFcbiI7CisJCXByaW50ICI8L2Rpdj5cbiI7CisJfQorfQorCitzdWIgZ2l0X3Nob3J0bG9nX2JvZHkgeworCSMgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJGNvbW1pdGxpc3QsICRmcm9tLCAkdG8sICRyZWZzLCAkZXh0cmEpID0gQF87CisKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JGNvbW1pdGxpc3R9IGlmICghZGVmaW5lZCAkdG8gfHwgJCN7JGNvbW1pdGxpc3R9IDwgJHRvKTsKKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJzaG9ydGxvZ1wiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwlmb3IgKG15ICRpID0gJGZyb207ICRpIDw9ICR0bzsgJGkrKykgeworCQlteSAlY28gPSAleyRjb21taXRsaXN0LT5bJGldfTsKKwkJbXkgJGNvbW1pdCA9ICRjb3snaWQnfTsKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY29tbWl0KTsKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKwkJIyBnaXRfc3VtbWFyeSgpIHVzZWQgcHJpbnQgIjx0ZD48aT4kY297J2FnZV9zdHJpbmcnfTwvaT48L3RkPlxuIiAuCisJCXByaW50ICI8dGQgdGl0bGU9XCIkY297J2FnZV9zdHJpbmdfYWdlJ31cIj48aT4kY297J2FnZV9zdHJpbmdfZGF0ZSd9PC9pPjwvdGQ+XG4iIC4KKwkJICAgICAgZm9ybWF0X2F1dGhvcl9odG1sKCd0ZCcsIFwlY28sIDEwKSAuICI8dGQ+IjsKKwkJcHJpbnQgZm9ybWF0X3N1YmplY3RfaHRtbCgkY297J3RpdGxlJ30sICRjb3sndGl0bGVfc2hvcnQnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb21taXQpLCAkcmVmKTsKKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY29tbWl0KX0sICJjb21taXQiKSAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXRkaWZmIiwgaGFzaD0+JGNvbW1pdCl9LCAiY29tbWl0ZGlmZiIpIC4gIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kY29tbWl0LCBoYXNoX2Jhc2U9PiRjb21taXQpfSwgInRyZWUiKTsKKwkJbXkgJHNuYXBzaG90X2xpbmtzID0gZm9ybWF0X3NuYXBzaG90X2xpbmtzKCRjb21taXQpOworCQlpZiAoZGVmaW5lZCAkc25hcHNob3RfbGlua3MpIHsKKwkJCXByaW50ICIgfCAiIC4gJHNuYXBzaG90X2xpbmtzOworCQl9CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJaWYgKGRlZmluZWQgJGV4dHJhKSB7CisJCXByaW50ICI8dHI+XG4iIC4KKwkJICAgICAgIjx0ZCBjb2xzcGFuPVwiNFwiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKK3N1YiBnaXRfaGlzdG9yeV9ib2R5IHsKKwkjIFdhcm5pbmc6IGFzc3VtZXMgY29uc3RhbnQgdHlwZSAoYmxvYiBvciB0cmVlKSBkdXJpbmcgaGlzdG9yeQorCW15ICgkY29tbWl0bGlzdCwgJGZyb20sICR0bywgJHJlZnMsICRleHRyYSwKKwkgICAgJGZpbGVfbmFtZSwgJGZpbGVfaGFzaCwgJGZ0eXBlKSA9IEBfOworCisJJGZyb20gPSAwIHVubGVzcyBkZWZpbmVkICRmcm9tOworCSR0byA9ICQjeyRjb21taXRsaXN0fSB1bmxlc3MgKGRlZmluZWQgJHRvICYmICR0byA8PSAkI3skY29tbWl0bGlzdH0pOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cImhpc3RvcnlcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJZm9yIChteSAkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJWNvID0gJXskY29tbWl0bGlzdC0+WyRpXX07CisJCWlmICghJWNvKSB7CisJCQluZXh0OworCQl9CisJCW15ICRjb21taXQgPSAkY297J2lkJ307CisKKwkJbXkgJHJlZiA9IGZvcm1hdF9yZWZfbWFya2VyKCRyZWZzLCAkY29tbWl0KTsKKworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCQlwcmludCAiPHRkIHRpdGxlPVwiJGNveydhZ2Vfc3RyaW5nX2FnZSd9XCI+PGk+JGNveydhZ2Vfc3RyaW5nX2RhdGUnfTwvaT48L3RkPlxuIiAuCisJIyBzaG9ydGxvZzogICBmb3JtYXRfYXV0aG9yX2h0bWwoJ3RkJywgXCVjbywgMTApCisJCSAgICAgIGZvcm1hdF9hdXRob3JfaHRtbCgndGQnLCBcJWNvLCAxNSwgMykgLiAiPHRkPiI7CisJCSMgb3JpZ2luYWxseSBnaXRfaGlzdG9yeSB1c2VkIGNob3Bfc3RyKCRjb3sndGl0bGUnfSwgNTApCisJCXByaW50IGZvcm1hdF9zdWJqZWN0X2h0bWwoJGNveyd0aXRsZSd9LCAkY297J3RpdGxlX3Nob3J0J30sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY29tbWl0KSwgJHJlZik7CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kZnR5cGUsIGhhc2hfYmFzZT0+JGNvbW1pdCwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sICRmdHlwZSkgLiAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0ZGlmZiIsIGhhc2g9PiRjb21taXQpfSwgImNvbW1pdGRpZmYiKTsKKworCQlpZiAoJGZ0eXBlIGVxICdibG9iJykgeworCQkJbXkgJGJsb2JfY3VycmVudCA9ICRmaWxlX2hhc2g7CisJCQlteSAkYmxvYl9wYXJlbnQgID0gZ2l0X2dldF9oYXNoX2J5X3BhdGgoJGNvbW1pdCwgJGZpbGVfbmFtZSk7CisJCQlpZiAoZGVmaW5lZCAkYmxvYl9jdXJyZW50ICYmIGRlZmluZWQgJGJsb2JfcGFyZW50ICYmCisJCQkJCSRibG9iX2N1cnJlbnQgbmUgJGJsb2JfcGFyZW50KSB7CisJCQkJcHJpbnQgIiB8ICIgLgorCQkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JkaWZmIiwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kYmxvYl9jdXJyZW50LCBoYXNoX3BhcmVudD0+JGJsb2JfcGFyZW50LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwgaGFzaF9wYXJlbnRfYmFzZT0+JGNvbW1pdCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRmaWxlX25hbWUpfSwKKwkJCQkJICAgICAgICAiZGlmZiB0byBjdXJyZW50Iik7CisJCQl9CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlpZiAoZGVmaW5lZCAkZXh0cmEpIHsKKwkJcHJpbnQgIjx0cj5cbiIgLgorCQkgICAgICAiPHRkIGNvbHNwYW49XCI0XCI+JGV4dHJhPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3RhYmxlPlxuIjsKK30KKworc3ViIGdpdF90YWdzX2JvZHkgeworCSMgdXNlcyBnbG9iYWwgdmFyaWFibGUgJHByb2plY3QKKwlteSAoJHRhZ2xpc3QsICRmcm9tLCAkdG8sICRleHRyYSkgPSBAXzsKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JHRhZ2xpc3R9IGlmICghZGVmaW5lZCAkdG8gfHwgJCN7JHRhZ2xpc3R9IDwgJHRvKTsKKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJ0YWdzXCI+XG4iOworCW15ICRhbHRlcm5hdGUgPSAxOworCWZvciAobXkgJGkgPSAkZnJvbTsgJGkgPD0gJHRvOyAkaSsrKSB7CisJCW15ICRlbnRyeSA9ICR0YWdsaXN0LT5bJGldOworCQlteSAldGFnID0gJSRlbnRyeTsKKwkJbXkgJGNvbW1lbnQgPSAkdGFneydzdWJqZWN0J307CisJCW15ICRjb21tZW50X3Nob3J0OworCQlpZiAoZGVmaW5lZCAkY29tbWVudCkgeworCQkJJGNvbW1lbnRfc2hvcnQgPSBjaG9wX3N0cigkY29tbWVudCwgMzAsIDUpOworCQl9CisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisJCWlmIChkZWZpbmVkICR0YWd7J2FnZSd9KSB7CisJCQlwcmludCAiPHRkPjxpPiR0YWd7J2FnZSd9PC9pPjwvdGQ+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ZD48L3RkPlxuIjsKKwkJfQorCQlwcmludCAiPHRkPiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+JHRhZ3sncmVmdHlwZSd9LCBoYXNoPT4kdGFneydyZWZpZCd9KSwKKwkJICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0IG5hbWUifSwgZXNjX2h0bWwoJHRhZ3snbmFtZSd9KSkgLgorCQkgICAgICAiPC90ZD5cbiIgLgorCQkgICAgICAiPHRkPiI7CisJCWlmIChkZWZpbmVkICRjb21tZW50KSB7CisJCQlwcmludCBmb3JtYXRfc3ViamVjdF9odG1sKCRjb21tZW50LCAkY29tbWVudF9zaG9ydCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZihhY3Rpb249PiJ0YWciLCBoYXNoPT4kdGFneydpZCd9KSk7CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cInNlbGZsaW5rXCI+IjsKKwkJaWYgKCR0YWd7J3R5cGUnfSBlcSAidGFnIikgeworCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0YWciLCBoYXNoPT4kdGFneydpZCd9KX0sICJ0YWciKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICImbmJzcDsiOworCQl9CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiR0YWd7J3JlZnR5cGUnfSwgaGFzaD0+JHRhZ3sncmVmaWQnfSl9LCAkdGFneydyZWZ0eXBlJ30pOworCQlpZiAoJHRhZ3sncmVmdHlwZSd9IGVxICJjb21taXQiKSB7CisJCQlwcmludCAiIHwgIiAuICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2hvcnRsb2ciLCBoYXNoPT4kdGFneydmdWxsbmFtZSd9KX0sICJzaG9ydGxvZyIpIC4KKwkJCSAgICAgICIgfCAiIC4gJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJsb2ciLCBoYXNoPT4kdGFneydmdWxsbmFtZSd9KX0sICJsb2ciKTsKKwkJfSBlbHNpZiAoJHRhZ3sncmVmdHlwZSd9IGVxICJibG9iIikgeworCQkJcHJpbnQgIiB8ICIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2JfcGxhaW4iLCBoYXNoPT4kdGFneydyZWZpZCd9KX0sICJyYXciKTsKKwkJfQorCQlwcmludCAiPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj4iOworCX0KKwlpZiAoZGVmaW5lZCAkZXh0cmEpIHsKKwkJcHJpbnQgIjx0cj5cbiIgLgorCQkgICAgICAiPHRkIGNvbHNwYW49XCI1XCI+JGV4dHJhPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3RhYmxlPlxuIjsKK30KKworc3ViIGdpdF9oZWFkc19ib2R5IHsKKwkjIHVzZXMgZ2xvYmFsIHZhcmlhYmxlICRwcm9qZWN0CisJbXkgKCRoZWFkbGlzdCwgJGhlYWRfYXQsICRmcm9tLCAkdG8sICRleHRyYSkgPSBAXzsKKwkkZnJvbSA9IDAgdW5sZXNzIGRlZmluZWQgJGZyb207CisJJHRvID0gJCN7JGhlYWRsaXN0fSBpZiAoIWRlZmluZWQgJHRvIHx8ICQjeyRoZWFkbGlzdH0gPCAkdG8pOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cImhlYWRzXCI+XG4iOworCW15ICRhbHRlcm5hdGUgPSAxOworCWZvciAobXkgJGkgPSAkZnJvbTsgJGkgPD0gJHRvOyAkaSsrKSB7CisJCW15ICRlbnRyeSA9ICRoZWFkbGlzdC0+WyRpXTsKKwkJbXkgJXJlZiA9ICUkZW50cnk7CisJCW15ICRjdXJyID0gZGVmaW5lZCAkaGVhZF9hdCAmJiAkcmVmeydpZCd9IGVxICRoZWFkX2F0OworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCQlwcmludCAiPHRkPjxpPiRyZWZ7J2FnZSd9PC9pPjwvdGQ+XG4iIC4KKwkJICAgICAgKCRjdXJyID8gIjx0ZCBjbGFzcz1cImN1cnJlbnRfaGVhZFwiPiIgOiAiPHRkPiIpIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzaG9ydGxvZyIsIGhhc2g9PiRyZWZ7J2Z1bGxuYW1lJ30pLAorCQkgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QgbmFtZSJ9LGVzY19odG1sKCRyZWZ7J25hbWUnfSkpIC4KKwkJICAgICAgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJzaG9ydGxvZyIsIGhhc2g9PiRyZWZ7J2Z1bGxuYW1lJ30pfSwgInNob3J0bG9nIikgLiAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ibG9nIiwgaGFzaD0+JHJlZnsnZnVsbG5hbWUnfSl9LCAibG9nIikgLiAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRyZWZ7J2Z1bGxuYW1lJ30sIGhhc2hfYmFzZT0+JHJlZnsnZnVsbG5hbWUnfSl9LCAidHJlZSIpIC4KKwkJICAgICAgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+IjsKKwl9CisJaWYgKGRlZmluZWQgJGV4dHJhKSB7CisJCXByaW50ICI8dHI+XG4iIC4KKwkJICAgICAgIjx0ZCBjb2xzcGFuPVwiM1wiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKKyMgRGlzcGxheSBhIHNpbmdsZSByZW1vdGUgYmxvY2sKK3N1YiBnaXRfcmVtb3RlX2Jsb2NrIHsKKwlteSAoJHJlbW90ZSwgJHJkYXRhLCAkbGltaXQsICRoZWFkKSA9IEBfOworCisJbXkgJGhlYWRzID0gJHJkYXRhLT57J2hlYWRzJ307CisJbXkgJGZldGNoID0gJHJkYXRhLT57J2ZldGNoJ307CisJbXkgJHB1c2ggPSAkcmRhdGEtPnsncHVzaCd9OworCisJbXkgJHVybHNfdGFibGUgPSAiPHRhYmxlIGNsYXNzPVwicHJvamVjdHNfbGlzdFwiPlxuIiA7CisKKwlpZiAoZGVmaW5lZCAkZmV0Y2gpIHsKKwkJaWYgKCRmZXRjaCBlcSAkcHVzaCkgeworCQkJJHVybHNfdGFibGUgLj0gZm9ybWF0X3JlcG9fdXJsKCJVUkwiLCAkZmV0Y2gpOworCQl9IGVsc2UgeworCQkJJHVybHNfdGFibGUgLj0gZm9ybWF0X3JlcG9fdXJsKCJGZXRjaCBVUkwiLCAkZmV0Y2gpOworCQkJJHVybHNfdGFibGUgLj0gZm9ybWF0X3JlcG9fdXJsKCJQdXNoIFVSTCIsICRwdXNoKSBpZiBkZWZpbmVkICRwdXNoOworCQl9CisJfSBlbHNpZiAoZGVmaW5lZCAkcHVzaCkgeworCQkkdXJsc190YWJsZSAuPSBmb3JtYXRfcmVwb191cmwoIlB1c2ggVVJMIiwgJHB1c2gpOworCX0gZWxzZSB7CisJCSR1cmxzX3RhYmxlIC49IGZvcm1hdF9yZXBvX3VybCgiIiwgIk5vIHJlbW90ZSBVUkwiKTsKKwl9CisKKwkkdXJsc190YWJsZSAuPSAiPC90YWJsZT5cbiI7CisKKwlteSAkZG90czsKKwlpZiAoZGVmaW5lZCAkbGltaXQgJiYgJGxpbWl0IDwgQCRoZWFkcykgeworCQkkZG90cyA9ICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4icmVtb3RlcyIsIGhhc2g9PiRyZW1vdGUpfSwgIi4uLiIpOworCX0KKworCXByaW50ICR1cmxzX3RhYmxlOworCWdpdF9oZWFkc19ib2R5KCRoZWFkcywgJGhlYWQsIDAsICRsaW1pdCwgJGRvdHMpOworfQorCisjIERpc3BsYXkgYSBsaXN0IG9mIHJlbW90ZSBuYW1lcyB3aXRoIHRoZSByZXNwZWN0aXZlIGZldGNoIGFuZCBwdXNoIFVSTHMKK3N1YiBnaXRfcmVtb3Rlc19saXN0IHsKKwlteSAoJHJlbW90ZWRhdGEsICRsaW1pdCkgPSBAXzsKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwiaGVhZHNcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJbXkgQHJlbW90ZXMgPSBzb3J0IGtleXMgJSRyZW1vdGVkYXRhOworCisJbXkgJGxpbWl0ZWQgPSAkbGltaXQgJiYgJGxpbWl0IDwgQHJlbW90ZXM7CisKKwkkI3JlbW90ZXMgPSAkbGltaXQgLSAxIGlmICRsaW1pdGVkOworCisJd2hpbGUgKG15ICRyZW1vdGUgPSBzaGlmdCBAcmVtb3RlcykgeworCQlteSAkcmRhdGEgPSAkcmVtb3RlZGF0YS0+eyRyZW1vdGV9OworCQlteSAkZmV0Y2ggPSAkcmRhdGEtPnsnZmV0Y2gnfTsKKwkJbXkgJHB1c2ggPSAkcmRhdGEtPnsncHVzaCd9OworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCQlwcmludCAiPHRkPiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZj0+IGhyZWYoYWN0aW9uPT4ncmVtb3RlcycsIGhhc2g9PiRyZW1vdGUpLAorCQkJICAgICAgIC1jbGFzcz0+ICJsaXN0IG5hbWUifSxlc2NfaHRtbCgkcmVtb3RlKSkgLgorCQkgICAgICAiPC90ZD4iOworCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCQkgICAgICAoZGVmaW5lZCAkZmV0Y2ggPyAkY2dpLT5hKHstaHJlZj0+ICRmZXRjaH0sICJmZXRjaCIpIDogImZldGNoIikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgIChkZWZpbmVkICRwdXNoID8gJGNnaS0+YSh7LWhyZWY9PiAkcHVzaH0sICJwdXNoIikgOiAicHVzaCIpIC4KKwkJICAgICAgIjwvdGQ+IjsKKworCQlwcmludCAiPC90cj5cbiI7CisJfQorCisJaWYgKCRsaW1pdGVkKSB7CisJCXByaW50ICI8dHI+XG4iIC4KKwkJICAgICAgIjx0ZCBjb2xzcGFuPVwiM1wiPiIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InJlbW90ZXMiKX0sICIuLi4iKSAuCisJCSAgICAgICI8L3RkPlxuIiAuICI8L3RyPlxuIjsKKwl9CisKKwlwcmludCAiPC90YWJsZT4iOworfQorCisjIERpc3BsYXkgcmVtb3RlIGhlYWRzIGdyb3VwZWQgYnkgcmVtb3RlLCB1bmxlc3MgdGhlcmUgYXJlIHRvbyBtYW55CisjIHJlbW90ZXMsIGluIHdoaWNoIGNhc2Ugd2Ugb25seSBkaXNwbGF5IHRoZSByZW1vdGUgbmFtZXMKK3N1YiBnaXRfcmVtb3Rlc19ib2R5IHsKKwlteSAoJHJlbW90ZWRhdGEsICRsaW1pdCwgJGhlYWQpID0gQF87CisJaWYgKCRsaW1pdCBhbmQgJGxpbWl0IDwga2V5cyAlJHJlbW90ZWRhdGEpIHsKKwkJZ2l0X3JlbW90ZXNfbGlzdCgkcmVtb3RlZGF0YSwgJGxpbWl0KTsKKwl9IGVsc2UgeworCQlmaWxsX3JlbW90ZV9oZWFkcygkcmVtb3RlZGF0YSk7CisJCXdoaWxlIChteSAoJHJlbW90ZSwgJHJkYXRhKSA9IGVhY2ggJSRyZW1vdGVkYXRhKSB7CisJCQlnaXRfcHJpbnRfc2VjdGlvbih7LWNsYXNzPT4icmVtb3RlIiwgLWlkPT4kcmVtb3RlfSwKKwkJCQlbInJlbW90ZXMiLCAkcmVtb3RlLCAkcmVtb3RlXSwgc3ViIHsKKwkJCQkJZ2l0X3JlbW90ZV9ibG9jaygkcmVtb3RlLCAkcmRhdGEsICRsaW1pdCwgJGhlYWQpOworCQkJCX0pOworCQl9CisJfQorfQorCitzdWIgZ2l0X3NlYXJjaF9tZXNzYWdlIHsKKwlteSAlY28gPSBAXzsKKworCW15ICRncmVwdHlwZTsKKwlpZiAoJHNlYXJjaHR5cGUgZXEgJ2NvbW1pdCcpIHsKKwkJJGdyZXB0eXBlID0gIi0tZ3JlcD0iOworCX0gZWxzaWYgKCRzZWFyY2h0eXBlIGVxICdhdXRob3InKSB7CisJCSRncmVwdHlwZSA9ICItLWF1dGhvcj0iOworCX0gZWxzaWYgKCRzZWFyY2h0eXBlIGVxICdjb21taXR0ZXInKSB7CisJCSRncmVwdHlwZSA9ICItLWNvbW1pdHRlcj0iOworCX0KKwkkZ3JlcHR5cGUgLj0gJHNlYXJjaHRleHQ7CisJbXkgQGNvbW1pdGxpc3QgPSBwYXJzZV9jb21taXRzKCRoYXNoLCAxMDEsICgxMDAgKiAkcGFnZSksIHVuZGVmLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ3JlcHR5cGUsICctLXJlZ2V4cC1pZ25vcmUtY2FzZScsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzZWFyY2hfdXNlX3JlZ2V4cCA/ICctLWV4dGVuZGVkLXJlZ2V4cCcgOiAnLS1maXhlZC1zdHJpbmdzJyk7CisKKwlteSAkcGFnaW5nX25hdiA9ICcnOworCWlmICgkcGFnZSA+IDApIHsKKwkJJHBhZ2luZ19uYXYgLj0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwgcGFnZT0+dW5kZWYpfSwKKwkJCSAgICAgICAgImZpcnN0IikgLgorCQkJIiAmc2RvdDsgIiAuCisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PiRwYWdlLTEpLAorCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAicCIsIC10aXRsZSA9PiAiQWx0LXAifSwgInByZXYiKTsKKwl9IGVsc2UgeworCQkkcGFnaW5nX25hdiAuPSAiZmlyc3QgJnNkb3Q7IHByZXYiOworCX0KKwlteSAkbmV4dF9saW5rID0gJyc7CisJaWYgKCQjY29tbWl0bGlzdCA+PSAxMDApIHsKKwkJJG5leHRfbGluayA9CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PiRwYWdlKzEpLAorCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAibiIsIC10aXRsZSA9PiAiQWx0LW4ifSwgIm5leHQiKTsKKwkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgJG5leHRfbGluayI7CisJfSBlbHNlIHsKKwkJJHBhZ2luZ19uYXYgLj0gIiAmc2RvdDsgbmV4dCI7CisJfQorCisJZ2l0X2hlYWRlcl9odG1sKCk7CisKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoYXNoLCRjb3sndHJlZSd9LCRoYXNoLCAkcGFnaW5nX25hdik7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSksICRoYXNoKTsKKwlpZiAoJHBhZ2UgPT0gMCAmJiAhQGNvbW1pdGxpc3QpIHsKKwkJcHJpbnQgIjxwPk5vIG1hdGNoLjwvcD5cbiI7CisJfSBlbHNlIHsKKwkJZ2l0X3NlYXJjaF9ncmVwX2JvZHkoXEBjb21taXRsaXN0LCAwLCA5OSwgJG5leHRfbGluayk7CisJfQorCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfc2VhcmNoX2NoYW5nZXMgeworCW15ICVjbyA9IEBfOworCisJbG9jYWwgJC8gPSAiXG4iOworCW9wZW4gbXkgJGZkLCAnLXwnLCBnaXRfY21kKCksICctLW5vLXBhZ2VyJywgJ2xvZycsIEBkaWZmX29wdHMsCisJCSctLXByZXR0eT1mb3JtYXQ6JUgnLCAnLS1uby1hYmJyZXYnLCAnLS1yYXcnLCAiLVMkc2VhcmNodGV4dCIsCisJCSgkc2VhcmNoX3VzZV9yZWdleHAgPyAnLS1waWNrYXhlLXJlZ2V4JyA6ICgpKQorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWxvZyBmYWlsZWQiKTsKKworCWdpdF9oZWFkZXJfaHRtbCgpOworCisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCcnLCAkaGFzaCwkY297J3RyZWUnfSwkaGFzaCk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSksICRoYXNoKTsKKworCXByaW50ICI8dGFibGUgY2xhc3M9XCJwaWNrYXhlIHNlYXJjaFwiPlxuIjsKKwlteSAkYWx0ZXJuYXRlID0gMTsKKwl1bmRlZiAlY287CisJbXkgQGZpbGVzOworCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCWNob21wICRsaW5lOworCQluZXh0IHVubGVzcyAkbGluZTsKKworCQlteSAlc2V0ID0gcGFyc2VfZGlmZnRyZWVfcmF3X2xpbmUoJGxpbmUpOworCQlpZiAoZGVmaW5lZCAkc2V0eydjb21taXQnfSkgeworCQkJIyBmaW5pc2ggcHJldmlvdXMgY29tbWl0CisJCQlpZiAoJWNvKSB7CisJCQkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJCQkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCQkJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JGNveydpZCd9KX0sCisJCQkJICAgICAgICAgICAgICAiY29tbWl0IikgLgorCQkJCSAgICAgICIgfCAiIC4KKwkJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kY297J3RyZWUnfSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZT0+JGNveydpZCd9KX0sCisJCQkJICAgICAgICAgICAgICAidHJlZSIpIC4KKwkJCQkgICAgICAiPC90ZD5cbiIgLgorCQkJCSAgICAgICI8L3RyPlxuIjsKKwkJCX0KKworCQkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQkJfQorCQkJJGFsdGVybmF0ZSBePSAxOworCQkJJWNvID0gcGFyc2VfY29tbWl0KCRzZXR7J2NvbW1pdCd9KTsKKwkJCW15ICRhdXRob3IgPSBjaG9wX2FuZF9lc2NhcGVfc3RyKCRjb3snYXV0aG9yX25hbWUnfSwgMTUsIDUpOworCQkJcHJpbnQgIjx0ZCB0aXRsZT1cIiRjb3snYWdlX3N0cmluZ19hZ2UnfVwiPjxpPiRjb3snYWdlX3N0cmluZ19kYXRlJ308L2k+PC90ZD5cbiIgLgorCQkJICAgICAgIjx0ZD48aT4kYXV0aG9yPC9pPjwvdGQ+XG4iIC4KKwkJCSAgICAgICI8dGQ+IiAuCisJCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdCIsIGhhc2g9PiRjb3snaWQnfSksCisJCQkgICAgICAgICAgICAgIC1jbGFzcyA9PiAibGlzdCBzdWJqZWN0In0sCisJCQkgICAgICAgICAgICAgIGNob3BfYW5kX2VzY2FwZV9zdHIoJGNveyd0aXRsZSd9LCA1MCkgLiAiPGJyLz4iKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkc2V0eyd0b19pZCd9KSB7CisJCQluZXh0IGlmICgkc2V0eyd0b19pZCd9ID1+IG0vXjB7NDB9JC8pOworCisJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImJsb2IiLCBoYXNoX2Jhc2U9PiRjb3snaWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JHNldHsndG9faWQnfSwgZmlsZV9uYW1lPT4kc2V0eyd0b19maWxlJ30pLAorCQkJICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpc3QifSwKKwkJCSAgICAgICAgICAgICAgIjxzcGFuIGNsYXNzPVwibWF0Y2hcIj4iIC4gZXNjX3BhdGgoJHNldHsnZmlsZSd9KSAuICI8L3NwYW4+IikgLgorCQkJICAgICAgIjxici8+XG4iOworCQl9CisJfQorCWNsb3NlICRmZDsKKworCSMgZmluaXNoIGxhc3QgY29tbWl0ICh3YXJuaW5nOiByZXBldGl0aW9uISkKKwlpZiAoJWNvKSB7CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JGNveydpZCd9KX0sCisJCSAgICAgICAgICAgICAgImNvbW1pdCIpIC4KKwkJICAgICAgIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kY297J3RyZWUnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRjb3snaWQnfSl9LAorCQkgICAgICAgICAgICAgICJ0cmVlIikgLgorCQkgICAgICAiPC90ZD5cbiIgLgorCQkgICAgICAiPC90cj5cbiI7CisJfQorCisJcHJpbnQgIjwvdGFibGU+XG4iOworCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfc2VhcmNoX2ZpbGVzIHsKKwlteSAlY28gPSBAXzsKKworCWxvY2FsICQvID0gIlxuIjsKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAnZ3JlcCcsICctbicsICcteicsCisJCSRzZWFyY2hfdXNlX3JlZ2V4cCA/ICgnLUUnLCAnLWknKSA6ICctRicsCisJCSRzZWFyY2h0ZXh0LCAkY297J3RyZWUnfQorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWdyZXAgZmFpbGVkIik7CisKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKworCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhhc2gsJGNveyd0cmVlJ30sJGhhc2gpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkaGFzaCk7CisKKwlwcmludCAiPHRhYmxlIGNsYXNzPVwiZ3JlcF9zZWFyY2hcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJbXkgJG1hdGNoZXMgPSAwOworCW15ICRsYXN0ZmlsZSA9ICcnOworCW15ICRmaWxlX2hyZWY7CisJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJY2hvbXAgJGxpbmU7CisJCW15ICgkZmlsZSwgJGxubywgJGx0ZXh0LCAkYmluYXJ5KTsKKwkJbGFzdCBpZiAoJG1hdGNoZXMrKyA+IDEwMDApOworCQlpZiAoJGxpbmUgPX4gL15CaW5hcnkgZmlsZSAoLispIG1hdGNoZXMkLykgeworCQkJJGZpbGUgPSAkMTsKKwkJCSRiaW5hcnkgPSAxOworCQl9IGVsc2UgeworCQkJKCRmaWxlLCAkbG5vLCAkbHRleHQpID0gc3BsaXQoL1wwLywgJGxpbmUsIDMpOworCQkJJGZpbGUgPX4gcy9eJGNveyd0cmVlJ306Ly87CisJCX0KKwkJaWYgKCRmaWxlIG5lICRsYXN0ZmlsZSkgeworCQkJJGxhc3RmaWxlIGFuZCBwcmludCAiPC90ZD48L3RyPlxuIjsKKwkJCWlmICgkYWx0ZXJuYXRlKyspIHsKKwkJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQkJfQorCQkJJGZpbGVfaHJlZiA9IGhyZWYoYWN0aW9uPT4iYmxvYiIsIGhhc2hfYmFzZT0+JGNveydpZCd9LAorCQkJICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZmlsZSk7CisJCQlwcmludCAiPHRkIGNsYXNzPVwibGlzdFwiPiIuCisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gJGZpbGVfaHJlZiwgLWNsYXNzID0+ICJsaXN0In0sIGVzY19wYXRoKCRmaWxlKSk7CisJCQlwcmludCAiPC90ZD48dGQ+XG4iOworCQkJJGxhc3RmaWxlID0gJGZpbGU7CisJCX0KKwkJaWYgKCRiaW5hcnkpIHsKKwkJCXByaW50ICI8ZGl2IGNsYXNzPVwiYmluYXJ5XCI+QmluYXJ5IGZpbGU8L2Rpdj5cbiI7CisJCX0gZWxzZSB7CisJCQkkbHRleHQgPSB1bnRhYmlmeSgkbHRleHQpOworCQkJaWYgKCRsdGV4dCA9fiBtL14oLiopKCRzZWFyY2hfcmVnZXhwKSguKikkL2kpIHsKKwkJCQkkbHRleHQgPSBlc2NfaHRtbCgkMSwgLW5ic3A9PjEpOworCQkJCSRsdGV4dCAuPSAnPHNwYW4gY2xhc3M9Im1hdGNoIj4nOworCQkJCSRsdGV4dCAuPSBlc2NfaHRtbCgkMiwgLW5ic3A9PjEpOworCQkJCSRsdGV4dCAuPSAnPC9zcGFuPic7CisJCQkJJGx0ZXh0IC49IGVzY19odG1sKCQzLCAtbmJzcD0+MSk7CisJCQl9IGVsc2UgeworCQkJCSRsdGV4dCA9IGVzY19odG1sKCRsdGV4dCwgLW5ic3A9PjEpOworCQkJfQorCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwcmVcIj4iIC4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiAkZmlsZV9ocmVmLicjbCcuJGxubywKKwkJCQkgICAgICAgIC1jbGFzcyA9PiAibGluZW5yIn0sIHNwcmludGYoJyU0aScsICRsbm8pKSAuCisJCQkJJyAnIC4gICRsdGV4dCAuICI8L2Rpdj5cbiI7CisJCX0KKwl9CisJaWYgKCRsYXN0ZmlsZSkgeworCQlwcmludCAiPC90ZD48L3RyPlxuIjsKKwkJaWYgKCRtYXRjaGVzID4gMTAwMCkgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJkaWZmIG5vZGlmZmVyZW5jZXNcIj5Ub28gbWFueSBtYXRjaGVzLCBsaXN0aW5nIHRyaW1tZWQ8L2Rpdj5cbiI7CisJCX0KKwl9IGVsc2UgeworCQlwcmludCAiPGRpdiBjbGFzcz1cImRpZmYgbm9kaWZmZXJlbmNlc1wiPk5vIG1hdGNoZXMgZm91bmQ8L2Rpdj5cbiI7CisJfQorCWNsb3NlICRmZDsKKworCXByaW50ICI8L3RhYmxlPlxuIjsKKworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X3NlYXJjaF9ncmVwX2JvZHkgeworCW15ICgkY29tbWl0bGlzdCwgJGZyb20sICR0bywgJGV4dHJhKSA9IEBfOworCSRmcm9tID0gMCB1bmxlc3MgZGVmaW5lZCAkZnJvbTsKKwkkdG8gPSAkI3skY29tbWl0bGlzdH0gaWYgKCFkZWZpbmVkICR0byB8fCAkI3skY29tbWl0bGlzdH0gPCAkdG8pOworCisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cImNvbW1pdF9zZWFyY2hcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJZm9yIChteSAkaSA9ICRmcm9tOyAkaSA8PSAkdG87ICRpKyspIHsKKwkJbXkgJWNvID0gJXskY29tbWl0bGlzdC0+WyRpXX07CisJCWlmICghJWNvKSB7CisJCQluZXh0OworCQl9CisJCW15ICRjb21taXQgPSAkY297J2lkJ307CisJCWlmICgkYWx0ZXJuYXRlKSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwiZGFya1wiPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJsaWdodFwiPlxuIjsKKwkJfQorCQkkYWx0ZXJuYXRlIF49IDE7CisJCXByaW50ICI8dGQgdGl0bGU9XCIkY297J2FnZV9zdHJpbmdfYWdlJ31cIj48aT4kY297J2FnZV9zdHJpbmdfZGF0ZSd9PC9pPjwvdGQ+XG4iIC4KKwkJICAgICAgZm9ybWF0X2F1dGhvcl9odG1sKCd0ZCcsIFwlY28sIDE1LCA1KSAuCisJCSAgICAgICI8dGQ+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JGNveydpZCd9KSwKKwkJICAgICAgICAgICAgICAgLWNsYXNzID0+ICJsaXN0IHN1YmplY3QifSwKKwkJICAgICAgICAgICAgICBjaG9wX2FuZF9lc2NhcGVfc3RyKCRjb3sndGl0bGUnfSwgNTApIC4gIjxici8+Iik7CisJCW15ICRjb21tZW50ID0gJGNveydjb21tZW50J307CisJCWZvcmVhY2ggbXkgJGxpbmUgKEAkY29tbWVudCkgeworCQkJaWYgKCRsaW5lID1+IG0vXiguKj8pKCRzZWFyY2hfcmVnZXhwKSguKikkL2kpIHsKKwkJCQlteSAoJGxlYWQsICRtYXRjaCwgJHRyYWlsKSA9ICgkMSwgJDIsICQzKTsKKwkJCQkkbWF0Y2ggPSBjaG9wX3N0cigkbWF0Y2gsIDcwLCA1LCAnY2VudGVyJyk7CisJCQkJbXkgJGNvbnRleHRsZW4gPSBpbnQoKDgwIC0gbGVuZ3RoKCRtYXRjaCkpLzIpOworCQkJCSRjb250ZXh0bGVuID0gMzAgaWYgKCRjb250ZXh0bGVuID4gMzApOworCQkJCSRsZWFkICA9IGNob3Bfc3RyKCRsZWFkLCAgJGNvbnRleHRsZW4sIDEwLCAnbGVmdCcpOworCQkJCSR0cmFpbCA9IGNob3Bfc3RyKCR0cmFpbCwgJGNvbnRleHRsZW4sIDEwLCAncmlnaHQnKTsKKworCQkJCSRsZWFkICA9IGVzY19odG1sKCRsZWFkKTsKKwkJCQkkbWF0Y2ggPSBlc2NfaHRtbCgkbWF0Y2gpOworCQkJCSR0cmFpbCA9IGVzY19odG1sKCR0cmFpbCk7CisKKwkJCQlwcmludCAiJGxlYWQ8c3BhbiBjbGFzcz1cIm1hdGNoXCI+JG1hdGNoPC9zcGFuPiR0cmFpbDxiciAvPiI7CisJCQl9CisJCX0KKwkJcHJpbnQgIjwvdGQ+XG4iIC4KKwkJICAgICAgIjx0ZCBjbGFzcz1cImxpbmtcIj4iIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLCBoYXNoPT4kY297J2lkJ30pfSwgImNvbW1pdCIpIC4KKwkJICAgICAgIiB8ICIgLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmYiLCBoYXNoPT4kY297J2lkJ30pfSwgImNvbW1pdGRpZmYiKSAuCisJCSAgICAgICIgfCAiIC4KKwkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwgaGFzaD0+JGNveyd0cmVlJ30sIGhhc2hfYmFzZT0+JGNveydpZCd9KX0sICJ0cmVlIik7CisJCXByaW50ICI8L3RkPlxuIiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJaWYgKGRlZmluZWQgJGV4dHJhKSB7CisJCXByaW50ICI8dHI+XG4iIC4KKwkJICAgICAgIjx0ZCBjb2xzcGFuPVwiM1wiPiRleHRyYTwvdGQ+XG4iIC4KKwkJICAgICAgIjwvdHI+XG4iOworCX0KKwlwcmludCAiPC90YWJsZT5cbiI7Cit9CisKKyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMjIGFjdGlvbnMKKworc3ViIGdpdF9wcm9qZWN0X2xpc3QgeworCW15ICRvcmRlciA9ICRpbnB1dF9wYXJhbXN7J29yZGVyJ307CisJaWYgKGRlZmluZWQgJG9yZGVyICYmICRvcmRlciAhfiBtL25vbmV8cHJvamVjdHxkZXNjcnxvd25lcnxhZ2UvKSB7CisJCWRpZV9lcnJvcig0MDAsICJVbmtub3duIG9yZGVyIHBhcmFtZXRlciIpOworCX0KKworCW15IEBsaXN0ID0gZ2l0X2dldF9wcm9qZWN0c19saXN0KCRwcm9qZWN0X2ZpbHRlciwgJHN0cmljdF9leHBvcnQpOworCWlmICghQGxpc3QpIHsKKwkJZGllX2Vycm9yKDQwNCwgIk5vIHByb2plY3RzIGZvdW5kIik7CisJfQorCisJZ2l0X2hlYWRlcl9odG1sKCk7CisJaWYgKGRlZmluZWQgJGhvbWVfdGV4dCAmJiAtZiAkaG9tZV90ZXh0KSB7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwiaW5kZXhfaW5jbHVkZVwiPlxuIjsKKwkJaW5zZXJ0X2ZpbGUoJGhvbWVfdGV4dCk7CisJCXByaW50ICI8L2Rpdj5cbiI7CisJfQorCisJZ2l0X3Byb2plY3Rfc2VhcmNoX2Zvcm0oJHNlYXJjaHRleHQsICRzZWFyY2hfdXNlX3JlZ2V4cCk7CisJZ2l0X3Byb2plY3RfbGlzdF9ib2R5KFxAbGlzdCwgJG9yZGVyKTsKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9mb3JrcyB7CisJbXkgJG9yZGVyID0gJGlucHV0X3BhcmFtc3snb3JkZXInfTsKKwlpZiAoZGVmaW5lZCAkb3JkZXIgJiYgJG9yZGVyICF+IG0vbm9uZXxwcm9qZWN0fGRlc2NyfG93bmVyfGFnZS8pIHsKKwkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gb3JkZXIgcGFyYW1ldGVyIik7CisJfQorCisJbXkgJGZpbHRlciA9ICRwcm9qZWN0OworCSRmaWx0ZXIgPX4gcy9cLmdpdCQvLzsKKwlteSBAbGlzdCA9IGdpdF9nZXRfcHJvamVjdHNfbGlzdCgkZmlsdGVyKTsKKwlpZiAoIUBsaXN0KSB7CisJCWRpZV9lcnJvcig0MDQsICJObyBmb3JrcyBmb3VuZCIpOworCX0KKworCWdpdF9oZWFkZXJfaHRtbCgpOworCWdpdF9wcmludF9wYWdlX25hdignJywnJyk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3N1bW1hcnknLCAiJHByb2plY3QgZm9ya3MiKTsKKwlnaXRfcHJvamVjdF9saXN0X2JvZHkoXEBsaXN0LCAkb3JkZXIpOworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X3Byb2plY3RfaW5kZXggeworCW15IEBwcm9qZWN0cyA9IGdpdF9nZXRfcHJvamVjdHNfbGlzdCgkcHJvamVjdF9maWx0ZXIsICRzdHJpY3RfZXhwb3J0KTsKKwlpZiAoIUBwcm9qZWN0cykgeworCQlkaWVfZXJyb3IoNDA0LCAiTm8gcHJvamVjdHMgZm91bmQiKTsKKwl9CisKKwlwcmludCAkY2dpLT5oZWFkZXIoCisJCS10eXBlID0+ICd0ZXh0L3BsYWluJywKKwkJLWNoYXJzZXQgPT4gJ3V0Zi04JywKKwkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4gJ2lubGluZTsgZmlsZW5hbWU9ImluZGV4LmF1eCInKTsKKworCWZvcmVhY2ggbXkgJHByIChAcHJvamVjdHMpIHsKKwkJaWYgKCFleGlzdHMgJHByLT57J293bmVyJ30pIHsKKwkJCSRwci0+eydvd25lcid9ID0gZ2l0X2dldF9wcm9qZWN0X293bmVyKCIkcHItPnsncGF0aCd9Iik7CisJCX0KKworCQlteSAoJHBhdGgsICRvd25lcikgPSAoJHByLT57J3BhdGgnfSwgJHByLT57J293bmVyJ30pOworCQkjIHF1b3RlIGFzIGluIENHSTo6VXRpbDo6ZW5jb2RlLCBidXQga2VlcCB0aGUgc2xhc2gsIGFuZCB1c2UgJysnIGZvciAnICcKKwkJJHBhdGggID1+IHMvKFteYS16QS1aMC05Xy5cLVwvIF0pL3NwcmludGYoIiUlJTAyWCIsIG9yZCgkMSkpL2VnOworCQkkb3duZXIgPX4gcy8oW15hLXpBLVowLTlfLlwtXC8gXSkvc3ByaW50ZigiJSUlMDJYIiwgb3JkKCQxKSkvZWc7CisJCSRwYXRoICA9fiBzLyAvXCsvZzsKKwkJJG93bmVyID1+IHMvIC9cKy9nOworCisJCXByaW50ICIkcGF0aCAkb3duZXJcbiI7CisJfQorfQorCitzdWIgZ2l0X3N1bW1hcnkgeworCW15ICRkZXNjciA9IGdpdF9nZXRfcHJvamVjdF9kZXNjcmlwdGlvbigkcHJvamVjdCkgfHwgIm5vbmUiOworCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgiSEVBRCIpOworCW15ICVjZCA9ICVjbyA/IHBhcnNlX2RhdGUoJGNveydjb21taXR0ZXJfZXBvY2gnfSwgJGNveydjb21taXR0ZXJfdHonfSkgOiAoKTsKKwlteSAkaGVhZCA9ICRjb3snaWQnfTsKKwlteSAkcmVtb3RlX2hlYWRzID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3JlbW90ZV9oZWFkcycpOworCisJbXkgJG93bmVyID0gZ2l0X2dldF9wcm9qZWN0X293bmVyKCRwcm9qZWN0KTsKKworCW15ICRyZWZzID0gZ2l0X2dldF9yZWZlcmVuY2VzKCk7CisJIyBUaGVzZSBnZXRfKl9saXN0IGZ1bmN0aW9ucyByZXR1cm4gb25lIG1vcmUgdG8gYWxsb3cgdXMgdG8gc2VlIGlmCisJIyB0aGVyZSBhcmUgbW9yZSAuLi4KKwlteSBAdGFnbGlzdCAgPSBnaXRfZ2V0X3RhZ3NfbGlzdCgxNik7CisJbXkgQGhlYWRsaXN0ID0gZ2l0X2dldF9oZWFkc19saXN0KDE2KTsKKwlteSAlcmVtb3RlZGF0YSA9ICRyZW1vdGVfaGVhZHMgPyBnaXRfZ2V0X3JlbW90ZXNfbGlzdCgpIDogKCk7CisJbXkgQGZvcmtsaXN0OworCW15ICRjaGVja19mb3JrcyA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdmb3JrcycpOworCisJaWYgKCRjaGVja19mb3JrcykgeworCQkjIGZpbmQgZm9ya3Mgb2YgYSBwcm9qZWN0CisJCW15ICRmaWx0ZXIgPSAkcHJvamVjdDsKKwkJJGZpbHRlciA9fiBzL1wuZ2l0JC8vOworCQlAZm9ya2xpc3QgPSBnaXRfZ2V0X3Byb2plY3RzX2xpc3QoJGZpbHRlcik7CisJCSMgZmlsdGVyIG91dCBmb3JrcyBvZiBmb3JrcworCQlAZm9ya2xpc3QgPSBmaWx0ZXJfZm9ya3NfZnJvbV9wcm9qZWN0c19saXN0KFxAZm9ya2xpc3QpCisJCQlpZiAoQGZvcmtsaXN0KTsKKwl9CisKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJ3N1bW1hcnknLCcnLCAkaGVhZCk7CisKKwlwcmludCAiPGRpdiBjbGFzcz1cInRpdGxlXCI+Jm5ic3A7PC9kaXY+XG4iOworCXByaW50ICI8dGFibGUgY2xhc3M9XCJwcm9qZWN0c19saXN0XCI+XG4iIC4KKwkgICAgICAiPHRyIGlkPVwibWV0YWRhdGFfZGVzY1wiPjx0ZD5kZXNjcmlwdGlvbjwvdGQ+PHRkPiIgLiBlc2NfaHRtbCgkZGVzY3IpIC4gIjwvdGQ+PC90cj5cbiI7CisgICAgICAgIGlmICgkb3duZXIgYW5kIG5vdCAkb21pdF9vd25lcikgeworCSAgICAgICAgcHJpbnQgICI8dHIgaWQ9XCJtZXRhZGF0YV9vd25lclwiPjx0ZD5vd25lcjwvdGQ+PHRkPiIgLiBlc2NfaHRtbCgkb3duZXIpIC4gIjwvdGQ+PC90cj5cbiI7CisgICAgICAgIH0KKwlpZiAoZGVmaW5lZCAkY2R7J3JmYzI4MjInfSkgeworCQlwcmludCAiPHRyIGlkPVwibWV0YWRhdGFfbGNoYW5nZVwiPjx0ZD5sYXN0IGNoYW5nZTwvdGQ+IiAuCisJCSAgICAgICI8dGQ+Ii5mb3JtYXRfdGltZXN0YW1wX2h0bWwoXCVjZCkuIjwvdGQ+PC90cj5cbiI7CisJfQorCisJIyB1c2UgcGVyIHByb2plY3QgZ2l0IFVSTCBsaXN0IGluICRwcm9qZWN0cm9vdC8kcHJvamVjdC9jbG9uZXVybAorCSMgb3IgbWFrZSBwcm9qZWN0IGdpdCBVUkwgZnJvbSBnaXQgYmFzZSBVUkwgYW5kIHByb2plY3QgbmFtZQorCW15ICR1cmxfdGFnID0gIlVSTCI7CisJbXkgQHVybF9saXN0ID0gZ2l0X2dldF9wcm9qZWN0X3VybF9saXN0KCRwcm9qZWN0KTsKKwlAdXJsX2xpc3QgPSBtYXAgeyAiJF8vJHByb2plY3QiIH0gQGdpdF9iYXNlX3VybF9saXN0IHVubGVzcyBAdXJsX2xpc3Q7CisJZm9yZWFjaCBteSAkZ2l0X3VybCAoQHVybF9saXN0KSB7CisJCW5leHQgdW5sZXNzICRnaXRfdXJsOworCQlwcmludCBmb3JtYXRfcmVwb191cmwoJHVybF90YWcsICRnaXRfdXJsKTsKKwkJJHVybF90YWcgPSAiIjsKKwl9CisKKwkjIFRhZyBjbG91ZAorCW15ICRzaG93X2N0YWdzID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2N0YWdzJyk7CisJaWYgKCRzaG93X2N0YWdzKSB7CisJCW15ICRjdGFncyA9IGdpdF9nZXRfcHJvamVjdF9jdGFncygkcHJvamVjdCk7CisJCWlmICglJGN0YWdzKSB7CisJCQkjIHdpdGhvdXQgYWJpbGl0eSB0byBhZGQgdGFncywgZG9uJ3Qgc2hvdyBpZiB0aGVyZSBhcmUgbm9uZQorCQkJbXkgJGNsb3VkID0gZ2l0X3BvcHVsYXRlX3Byb2plY3RfdGFnY2xvdWQoJGN0YWdzKTsKKwkJCXByaW50ICI8dHIgaWQ9XCJtZXRhZGF0YV9jdGFnc1wiPiIgLgorCQkJICAgICAgIjx0ZD5jb250ZW50IHRhZ3M8L3RkPiIgLgorCQkJICAgICAgIjx0ZD4iLmdpdF9zaG93X3Byb2plY3RfdGFnY2xvdWQoJGNsb3VkLCA0OCkuIjwvdGQ+IiAuCisJCQkgICAgICAiPC90cj5cbiI7CisJCX0KKwl9CisKKwlwcmludCAiPC90YWJsZT5cbiI7CisKKwkjIElmIFhTUyBwcmV2ZW50aW9uIGlzIG9uLCB3ZSBkb24ndCBpbmNsdWRlIFJFQURNRS5odG1sLgorCSMgVE9ETzogQWxsb3cgYSByZWFkbWUgaW4gc29tZSBzYWZlIGZvcm1hdC4KKwlpZiAoISRwcmV2ZW50X3hzcyAmJiAtcyAiJHByb2plY3Ryb290LyRwcm9qZWN0L1JFQURNRS5odG1sIikgeworCQlwcmludCAiPGRpdiBjbGFzcz1cInRpdGxlXCI+cmVhZG1lPC9kaXY+XG4iIC4KKwkJICAgICAgIjxkaXYgY2xhc3M9XCJyZWFkbWVcIj5cbiI7CisJCWluc2VydF9maWxlKCIkcHJvamVjdHJvb3QvJHByb2plY3QvUkVBRE1FLmh0bWwiKTsKKwkJcHJpbnQgIlxuPC9kaXY+XG4iOyAjIGNsYXNzPSJyZWFkbWUiCisJfQorCisJIyB3ZSBuZWVkIHRvIHJlcXVlc3Qgb25lIG1vcmUgdGhhbiAxNiAoMC4uMTUpIHRvIGNoZWNrIGlmCisJIyB0aG9zZSAxNiBhcmUgYWxsCisJbXkgQGNvbW1pdGxpc3QgPSAkaGVhZCA/IHBhcnNlX2NvbW1pdHMoJGhlYWQsIDE3KSA6ICgpOworCWlmIChAY29tbWl0bGlzdCkgeworCQlnaXRfcHJpbnRfaGVhZGVyX2Rpdignc2hvcnRsb2cnKTsKKwkJZ2l0X3Nob3J0bG9nX2JvZHkoXEBjb21taXRsaXN0LCAwLCAxNSwgJHJlZnMsCisJCSAgICAgICAgICAgICAgICAgICQjY29tbWl0bGlzdCA8PSAgMTUgPyB1bmRlZiA6CisJCSAgICAgICAgICAgICAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4ic2hvcnRsb2ciKX0sICIuLi4iKSk7CisJfQorCisJaWYgKEB0YWdsaXN0KSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCd0YWdzJyk7CisJCWdpdF90YWdzX2JvZHkoXEB0YWdsaXN0LCAwLCAxNSwKKwkJICAgICAgICAgICAgICAkI3RhZ2xpc3QgPD0gIDE1ID8gdW5kZWYgOgorCQkgICAgICAgICAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idGFncyIpfSwgIi4uLiIpKTsKKwl9CisKKwlpZiAoQGhlYWRsaXN0KSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdoZWFkcycpOworCQlnaXRfaGVhZHNfYm9keShcQGhlYWRsaXN0LCAkaGVhZCwgMCwgMTUsCisJCSAgICAgICAgICAgICAgICQjaGVhZGxpc3QgPD0gMTUgPyB1bmRlZiA6CisJCSAgICAgICAgICAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iaGVhZHMiKX0sICIuLi4iKSk7CisJfQorCisJaWYgKCVyZW1vdGVkYXRhKSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdyZW1vdGVzJyk7CisJCWdpdF9yZW1vdGVzX2JvZHkoXCVyZW1vdGVkYXRhLCAxNSwgJGhlYWQpOworCX0KKworCWlmIChAZm9ya2xpc3QpIHsKKwkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2ZvcmtzJyk7CisJCWdpdF9wcm9qZWN0X2xpc3RfYm9keShcQGZvcmtsaXN0LCAnYWdlJywgMCwgMTUsCisJCSAgICAgICAgICAgICAgICAgICAgICAkI2ZvcmtsaXN0IDw9IDE1ID8gdW5kZWYgOgorCQkgICAgICAgICAgICAgICAgICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJmb3JrcyIpfSwgIi4uLiIpLAorCQkgICAgICAgICAgICAgICAgICAgICAgJ25vX2hlYWRlcicpOworCX0KKworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X3RhZyB7CisJbXkgJXRhZyA9IHBhcnNlX3RhZygkaGFzaCk7CisKKwlpZiAoISAldGFnKSB7CisJCWRpZV9lcnJvcig0MDQsICJVbmtub3duIHRhZyBvYmplY3QiKTsKKwl9CisKKwlteSAkaGVhZCA9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoZWFkLHVuZGVmLCRoZWFkKTsKKwlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJHRhZ3snbmFtZSd9KSwgJGhhc2gpOworCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVfdGV4dFwiPlxuIiAuCisJICAgICAgIjx0YWJsZSBjbGFzcz1cIm9iamVjdF9oZWFkZXJcIj5cbiIgLgorCSAgICAgICI8dHI+XG4iIC4KKwkgICAgICAiPHRkPm9iamVjdDwvdGQ+XG4iIC4KKwkgICAgICAiPHRkPiIgLiAkY2dpLT5hKHstY2xhc3MgPT4gImxpc3QiLCAtaHJlZiA9PiBocmVmKGFjdGlvbj0+JHRhZ3sndHlwZSd9LCBoYXNoPT4kdGFneydvYmplY3QnfSl9LAorCSAgICAgICAgICAgICAgICAgICAgICAgJHRhZ3snb2JqZWN0J30pIC4gIjwvdGQ+XG4iIC4KKwkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiIgLiAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+JHRhZ3sndHlwZSd9LCBoYXNoPT4kdGFneydvYmplY3QnfSl9LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhZ3sndHlwZSd9KSAuICI8L3RkPlxuIiAuCisJICAgICAgIjwvdHI+XG4iOworCWlmIChkZWZpbmVkKCR0YWd7J2F1dGhvcid9KSkgeworCQlnaXRfcHJpbnRfYXV0aG9yc2hpcF9yb3dzKFwldGFnLCAnYXV0aG9yJyk7CisJfQorCXByaW50ICI8L3RhYmxlPlxuXG4iIC4KKwkgICAgICAiPC9kaXY+XG4iOworCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9ib2R5XCI+IjsKKwlteSAkY29tbWVudCA9ICR0YWd7J2NvbW1lbnQnfTsKKwlmb3JlYWNoIG15ICRsaW5lIChAJGNvbW1lbnQpIHsKKwkJY2hvbXAgJGxpbmU7CisJCXByaW50IGVzY19odG1sKCRsaW5lLCAtbmJzcD0+MSkgLiAiPGJyLz5cbiI7CisJfQorCXByaW50ICI8L2Rpdj5cbiI7CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfYmxhbWVfY29tbW9uIHsKKwlteSAkZm9ybWF0ID0gc2hpZnQgfHwgJ3BvcmNlbGFpbic7CisJaWYgKCRmb3JtYXQgZXEgJ3BvcmNlbGFpbicgJiYgJGlucHV0X3BhcmFtc3snamF2YXNjcmlwdCd9KSB7CisJCSRmb3JtYXQgPSAnaW5jcmVtZW50YWwnOworCQkkYWN0aW9uID0gJ2JsYW1lX2luY3JlbWVudGFsJzsgIyBmb3IgcGFnZSB0aXRsZSBldGMKKwl9CisKKwkjIHBlcm1pc3Npb25zCisJZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2JsYW1lJykKKwkJb3IgZGllX2Vycm9yKDQwMywgIkJsYW1lIHZpZXcgbm90IGFsbG93ZWQiKTsKKworCSMgZXJyb3IgY2hlY2tpbmcKKwlkaWVfZXJyb3IoNDAwLCAiTm8gZmlsZSBuYW1lIGdpdmVuIikgdW5sZXNzICRmaWxlX25hbWU7CisJJGhhc2hfYmFzZSB8fD0gZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCWRpZV9lcnJvcig0MDQsICJDb3VsZG4ndCBmaW5kIGJhc2UgY29tbWl0IikgdW5sZXNzICRoYXNoX2Jhc2U7CisJbXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoX2Jhc2UpCisJCW9yIGRpZV9lcnJvcig0MDQsICJDb21taXQgbm90IGZvdW5kIik7CisJbXkgJGZ0eXBlID0gImJsb2IiOworCWlmICghZGVmaW5lZCAkaGFzaCkgeworCQkkaGFzaCA9IGdpdF9nZXRfaGFzaF9ieV9wYXRoKCRoYXNoX2Jhc2UsICRmaWxlX25hbWUsICJibG9iIikKKwkJCW9yIGRpZV9lcnJvcig0MDQsICJFcnJvciBsb29raW5nIHVwIGZpbGUiKTsKKwl9IGVsc2UgeworCQkkZnR5cGUgPSBnaXRfZ2V0X3R5cGUoJGhhc2gpOworCQlpZiAoJGZ0eXBlICF+ICJibG9iIikgeworCQkJZGllX2Vycm9yKDQwMCwgIk9iamVjdCBpcyBub3QgYSBibG9iIik7CisJCX0KKwl9CisKKwlteSAkZmQ7CisJaWYgKCRmb3JtYXQgZXEgJ2luY3JlbWVudGFsJykgeworCQkjIGdldCBmaWxlIGNvbnRlbnRzIChhcyBiYXNlKQorCQlvcGVuICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAnY2F0LWZpbGUnLCAnYmxvYicsICRoYXNoCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtY2F0LWZpbGUgZmFpbGVkIik7CisJfSBlbHNpZiAoJGZvcm1hdCBlcSAnZGF0YScpIHsKKwkJIyBydW4gZ2l0LWJsYW1lIC0taW5jcmVtZW50YWwKKwkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgImJsYW1lIiwgIi0taW5jcmVtZW50YWwiLAorCQkJJGhhc2hfYmFzZSwgIi0tIiwgJGZpbGVfbmFtZQorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWJsYW1lIC0taW5jcmVtZW50YWwgZmFpbGVkIik7CisJfSBlbHNlIHsKKwkJIyBydW4gZ2l0LWJsYW1lIC0tcG9yY2VsYWluCisJCW9wZW4gJGZkLCAiLXwiLCBnaXRfY21kKCksICJibGFtZSIsICctcCcsCisJCQkkaGFzaF9iYXNlLCAnLS0nLCAkZmlsZV9uYW1lCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtYmxhbWUgLS1wb3JjZWxhaW4gZmFpbGVkIik7CisJfQorCWJpbm1vZGUgJGZkLCAnOnV0ZjgnOworCisJIyBpbmNyZW1lbnRhbCBibGFtZSBkYXRhIHJldHVybnMgZWFybHkKKwlpZiAoJGZvcm1hdCBlcSAnZGF0YScpIHsKKwkJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQkJLXR5cGU9PiJ0ZXh0L3BsYWluIiwgLWNoYXJzZXQgPT4gInV0Zi04IiwKKwkJCS1zdGF0dXM9PiAiMjAwIE9LIik7CisJCWxvY2FsICR8ID0gMTsgIyBvdXRwdXQgYXV0b2ZsdXNoCisJCXdoaWxlIChteSAkbGluZSA9IDwkZmQ+KSB7CisJCQlwcmludCB0b191dGY4KCRsaW5lKTsKKwkJfQorCQljbG9zZSAkZmQKKwkJCW9yIHByaW50ICJFUlJPUiAkIVxuIjsKKworCQlwcmludCAnRU5EJzsKKwkJaWYgKGRlZmluZWQgJHQwICYmIGdpdHdlYl9jaGVja19mZWF0dXJlKCd0aW1lZCcpKSB7CisJCQlwcmludCAnICcuCisJCQkgICAgICB0dl9pbnRlcnZhbCgkdDAsIFsgZ2V0dGltZW9mZGF5KCkgXSkuCisJCQkgICAgICAnICcuJG51bWJlcl9vZl9naXRfY21kczsKKwkJfQorCQlwcmludCAiXG4iOworCisJCXJldHVybjsKKwl9CisKKwkjIHBhZ2UgaGVhZGVyCisJZ2l0X2hlYWRlcl9odG1sKCk7CisJbXkgJGZvcm1hdHNfbmF2ID0KKwkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iIiwgLXJlcGxheT0+MSl9LAorCQkgICAgICAgICJibG9iIikgLgorCQkiIHwgIjsKKwlpZiAoJGZvcm1hdCBlcSAnaW5jcmVtZW50YWwnKSB7CisJCSRmb3JtYXRzX25hdiAuPQorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibGFtZSIsIGphdmFzY3JpcHQ9PjAsIC1yZXBsYXk9PjEpfSwKKwkJCSAgICAgICAgImJsYW1lIikgLiAiIChub24taW5jcmVtZW50YWwpIjsKKwl9IGVsc2UgeworCQkkZm9ybWF0c19uYXYgLj0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxhbWVfaW5jcmVtZW50YWwiLCAtcmVwbGF5PT4xKX0sCisJCQkgICAgICAgICJibGFtZSIpIC4gIiAoaW5jcmVtZW50YWwpIjsKKwl9CisJJGZvcm1hdHNfbmF2IC49CisJCSIgfCAiIC4KKwkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwgLXJlcGxheT0+MSl9LAorCQkgICAgICAgICJoaXN0b3J5IikgLgorCQkiIHwgIiAuCisJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4kYWN0aW9uLCBmaWxlX25hbWU9PiRmaWxlX25hbWUpfSwKKwkJICAgICAgICAiSEVBRCIpOworCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhhc2hfYmFzZSwkY297J3RyZWUnfSwkaGFzaF9iYXNlLCAkZm9ybWF0c19uYXYpOworCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pLCAkaGFzaF9iYXNlKTsKKwlnaXRfcHJpbnRfcGFnZV9wYXRoKCRmaWxlX25hbWUsICRmdHlwZSwgJGhhc2hfYmFzZSk7CisKKwkjIHBhZ2UgYm9keQorCWlmICgkZm9ybWF0IGVxICdpbmNyZW1lbnRhbCcpIHsKKwkJcHJpbnQgIjxub3NjcmlwdD5cbjxkaXYgY2xhc3M9XCJlcnJvclwiPjxjZW50ZXI+PGI+XG4iLgorCQkgICAgICAiVGhpcyBwYWdlIHJlcXVpcmVzIEphdmFTY3JpcHQgdG8gcnVuLlxuIFVzZSAiLgorCQkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+J2JsYW1lJyxqYXZhc2NyaXB0PT4wLC1yZXBsYXk9PjEpfSwKKwkJICAgICAgICAgICAgICAndGhpcyBwYWdlJykuCisJCSAgICAgICIgaW5zdGVhZC5cbiIuCisJCSAgICAgICI8L2I+PC9jZW50ZXI+PC9kaXY+XG48L25vc2NyaXB0PlxuIjsKKworCQlwcmludCBxcSE8ZGl2IGlkPSJwcm9ncmVzc19iYXIiIHN0eWxlPSJ3aWR0aDogMTAwJTsgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93Ij48L2Rpdj5cbiE7CisJfQorCisJcHJpbnQgcXEhPGRpdiBjbGFzcz0icGFnZV9ib2R5Ij5cbiE7CisJcHJpbnQgcXEhPGRpdiBpZD0icHJvZ3Jlc3NfaW5mbyI+Li4uIC8gLi4uPC9kaXY+XG4hCisJCWlmICgkZm9ybWF0IGVxICdpbmNyZW1lbnRhbCcpOworCXByaW50IHFxITx0YWJsZSBpZD0iYmxhbWVfdGFibGUiIGNsYXNzPSJibGFtZSIgd2lkdGg9IjEwMCUiPlxuIS4KKwkgICAgICAjcXEhPGNvbCB3aWR0aD0iNS41ZW0iIC8+PGNvbCB3aWR0aD0iMi41ZW0iIC8+PGNvbCB3aWR0aD0iKiIgLz5cbiEuCisJICAgICAgcXEhPHRoZWFkPlxuIS4KKwkgICAgICBxcSE8dHI+PHRoPkNvbW1pdDwvdGg+PHRoPkxpbmU8L3RoPjx0aD5EYXRhPC90aD48L3RyPlxuIS4KKwkgICAgICBxcSE8L3RoZWFkPlxuIS4KKwkgICAgICBxcSE8dGJvZHk+XG4hOworCisJbXkgQHJldl9jb2xvciA9IHF3KGxpZ2h0IGRhcmspOworCW15ICRudW1fY29sb3JzID0gc2NhbGFyKEByZXZfY29sb3IpOworCW15ICRjdXJyZW50X2NvbG9yID0gMDsKKworCWlmICgkZm9ybWF0IGVxICdpbmNyZW1lbnRhbCcpIHsKKwkJbXkgJGNvbG9yX2NsYXNzID0gJHJldl9jb2xvclskY3VycmVudF9jb2xvcl07CisKKwkJI2NvbnRlbnRzIG9mIGEgZmlsZQorCQlteSAkbGluZW5yID0gMDsKKwlMSU5FOgorCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJGxpbmU7CisJCQkkbGluZW5yKys7CisKKwkJCXByaW50IHFxITx0ciBpZD0ibCRsaW5lbnIiIGNsYXNzPSIkY29sb3JfY2xhc3MiPiEuCisJCQkgICAgICBxcSE8dGQgY2xhc3M9InNoYTEiPjxhIGhyZWY9IiI+IDwvYT48L3RkPiEuCisJCQkgICAgICBxcSE8dGQgY2xhc3M9ImxpbmVuciI+IS4KKwkJCSAgICAgIHFxITxhIGNsYXNzPSJsaW5lbnIiIGhyZWY9IiI+JGxpbmVucjwvYT48L3RkPiE7CisJCQlwcmludCBxcSE8dGQgY2xhc3M9InByZSI+ISAuIGVzY19odG1sKCRsaW5lKSAuICI8L3RkPlxuIjsKKwkJCXByaW50IHFxITwvdHI+XG4hOworCQl9CisKKwl9IGVsc2UgeyAjIHBvcmNlbGFpbiwgaS5lLiBvcmRpbmFyeSBibGFtZQorCQlteSAlbWV0YWluZm8gPSAoKTsgIyBzYXZlcyBpbmZvcm1hdGlvbiBhYm91dCBjb21taXRzCisKKwkJIyBibGFtZSBkYXRhCisJTElORToKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRsaW5lOworCQkJIyB0aGUgaGVhZGVyOiA8U0hBLTE+IDxzcmMgbGluZW5vPiA8ZHN0IGxpbmVubz4gWzxsaW5lcyBpbiBncm91cD5dCisJCQkjIG5vIDxsaW5lcyBpbiBncm91cD4gZm9yIHN1YnNlcXVlbnQgbGluZXMgaW4gZ3JvdXAgb2YgbGluZXMKKwkJCW15ICgkZnVsbF9yZXYsICRvcmlnX2xpbmVubywgJGxpbmVubywgJGdyb3VwX3NpemUpID0KKwkJCSAgICgkbGluZSA9fiAvXihbMC05YS1mXXs0MH0pIChcZCspIChcZCspKD86IChcZCspKT8kLyk7CisJCQlpZiAoIWV4aXN0cyAkbWV0YWluZm97JGZ1bGxfcmV2fSkgeworCQkJCSRtZXRhaW5mb3skZnVsbF9yZXZ9ID0geyAnbnByZXZpb3VzJyA9PiAwIH07CisJCQl9CisJCQlteSAkbWV0YSA9ICRtZXRhaW5mb3skZnVsbF9yZXZ9OworCQkJbXkgJGRhdGE7CisJCQl3aGlsZSAoJGRhdGEgPSA8JGZkPikgeworCQkJCWNob21wICRkYXRhOworCQkJCWxhc3QgaWYgKCRkYXRhID1+IHMvXlx0Ly8pOyAjIGNvbnRlbnRzIG9mIGxpbmUKKwkJCQlpZiAoJGRhdGEgPX4gL14oXFMrKSg/OiAoLiopKT8kLykgeworCQkJCQkkbWV0YS0+eyQxfSA9ICQyIHVubGVzcyBleGlzdHMgJG1ldGEtPnskMX07CisJCQkJfQorCQkJCWlmICgkZGF0YSA9fiAvXnByZXZpb3VzIC8pIHsKKwkJCQkJJG1ldGEtPnsnbnByZXZpb3VzJ30rKzsKKwkJCQl9CisJCQl9CisJCQlteSAkc2hvcnRfcmV2ID0gc3Vic3RyKCRmdWxsX3JldiwgMCwgOCk7CisJCQlteSAkYXV0aG9yID0gJG1ldGEtPnsnYXV0aG9yJ307CisJCQlteSAlZGF0ZSA9CisJCQkJcGFyc2VfZGF0ZSgkbWV0YS0+eydhdXRob3ItdGltZSd9LCAkbWV0YS0+eydhdXRob3ItdHonfSk7CisJCQlteSAkZGF0ZSA9ICRkYXRleydpc28tdHonfTsKKwkJCWlmICgkZ3JvdXBfc2l6ZSkgeworCQkJCSRjdXJyZW50X2NvbG9yID0gKCRjdXJyZW50X2NvbG9yICsgMSkgJSAkbnVtX2NvbG9yczsKKwkJCX0KKwkJCW15ICR0cl9jbGFzcyA9ICRyZXZfY29sb3JbJGN1cnJlbnRfY29sb3JdOworCQkJJHRyX2NsYXNzIC49ICcgYm91bmRhcnknIGlmIChleGlzdHMgJG1ldGEtPnsnYm91bmRhcnknfSk7CisJCQkkdHJfY2xhc3MgLj0gJyBuby1wcmV2aW91cycgaWYgKCRtZXRhLT57J25wcmV2aW91cyd9ID09IDApOworCQkJJHRyX2NsYXNzIC49ICcgbXVsdGlwbGUtcHJldmlvdXMnIGlmICgkbWV0YS0+eyducHJldmlvdXMnfSA+IDEpOworCQkJcHJpbnQgIjx0ciBpZD1cImwkbGluZW5vXCIgY2xhc3M9XCIkdHJfY2xhc3NcIj5cbiI7CisJCQlpZiAoJGdyb3VwX3NpemUpIHsKKwkJCQlwcmludCAiPHRkIGNsYXNzPVwic2hhMVwiIjsKKwkJCQlwcmludCAiIHRpdGxlPVwiIi4gZXNjX2h0bWwoJGF1dGhvcikgLiAiLCAkZGF0ZVwiIjsKKwkJCQlwcmludCAiIHJvd3NwYW49XCIkZ3JvdXBfc2l6ZVwiIiBpZiAoJGdyb3VwX3NpemUgPiAxKTsKKwkJCQlwcmludCAiPiI7CisJCQkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGZ1bGxfcmV2LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sCisJCQkJICAgICAgICAgICAgICBlc2NfaHRtbCgkc2hvcnRfcmV2KSk7CisJCQkJaWYgKCRncm91cF9zaXplID49IDIpIHsKKwkJCQkJbXkgQGF1dGhvcl9pbml0aWFscyA9ICgkYXV0aG9yID1+IC9cYihbWzp1cHBlcjpdXSlcQi9nKTsKKwkJCQkJaWYgKEBhdXRob3JfaW5pdGlhbHMpIHsKKwkJCQkJCXByaW50ICI8YnIgLz4iIC4KKwkJCQkJCSAgICAgIGVzY19odG1sKGpvaW4oJycsIEBhdXRob3JfaW5pdGlhbHMpKTsKKwkJCQkJCSMgICAgICAgICAgIG9yIGpvaW4oJy4nLCAuLi4pCisJCQkJCX0KKwkJCQl9CisJCQkJcHJpbnQgIjwvdGQ+XG4iOworCQkJfQorCQkJIyAncHJldmlvdXMnIDxzaGExIG9mIHBhcmVudCBjb21taXQ+IDxmaWxlbmFtZSBhdCBjb21taXQ+CisJCQlpZiAoZXhpc3RzICRtZXRhLT57J3ByZXZpb3VzJ30gJiYKKwkJCSAgICAkbWV0YS0+eydwcmV2aW91cyd9ID1+IC9eKFthLWZBLUYwLTldezQwfSkgKC4qKSQvKSB7CisJCQkJJG1ldGEtPnsncGFyZW50J30gPSAkMTsKKwkJCQkkbWV0YS0+eydmaWxlX3BhcmVudCd9ID0gdW5xdW90ZSgkMik7CisJCQl9CisJCQlteSAkbGluZW5yX2NvbW1pdCA9CisJCQkJZXhpc3RzKCRtZXRhLT57J3BhcmVudCd9KSA/CisJCQkJJG1ldGEtPnsncGFyZW50J30gOiAkZnVsbF9yZXY7CisJCQlteSAkbGluZW5yX2ZpbGVuYW1lID0KKwkJCQlleGlzdHMoJG1ldGEtPnsnZmlsZV9wYXJlbnQnfSkgPworCQkJCSRtZXRhLT57J2ZpbGVfcGFyZW50J30gOiB1bnF1b3RlKCRtZXRhLT57J2ZpbGVuYW1lJ30pOworCQkJbXkgJGJsYW1lZCA9IGhyZWYoYWN0aW9uID0+ICdibGFtZScsCisJCQkgICAgICAgICAgICAgICAgICBmaWxlX25hbWUgPT4gJGxpbmVucl9maWxlbmFtZSwKKwkJCSAgICAgICAgICAgICAgICAgIGhhc2hfYmFzZSA9PiAkbGluZW5yX2NvbW1pdCk7CisJCQlwcmludCAiPHRkIGNsYXNzPVwibGluZW5yXCI+IjsKKwkJCXByaW50ICRjZ2ktPmEoeyAtaHJlZiA9PiAiJGJsYW1lZCNsJG9yaWdfbGluZW5vIiwKKwkJCSAgICAgICAgICAgICAgICAtY2xhc3MgPT4gImxpbmVuciIgfSwKKwkJCSAgICAgICAgICAgICAgZXNjX2h0bWwoJGxpbmVubykpOworCQkJcHJpbnQgIjwvdGQ+IjsKKwkJCXByaW50ICI8dGQgY2xhc3M9XCJwcmVcIj4iIC4gZXNjX2h0bWwoJGRhdGEpIC4gIjwvdGQ+XG4iOworCQkJcHJpbnQgIjwvdHI+XG4iOworCQl9ICMgZW5kIHdoaWxlCisKKwl9CisKKwkjIGZvb3RlcgorCXByaW50ICI8L3Rib2R5PlxuIi4KKwkgICAgICAiPC90YWJsZT5cbiI7ICMgY2xhc3M9ImJsYW1lIgorCXByaW50ICI8L2Rpdj5cbiI7ICAgIyBjbGFzcz0iYmxhbWVfYm9keSIKKwljbG9zZSAkZmQKKwkJb3IgcHJpbnQgIlJlYWRpbmcgYmxvYiBmYWlsZWRcbiI7CisKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9ibGFtZSB7CisJZ2l0X2JsYW1lX2NvbW1vbigpOworfQorCitzdWIgZ2l0X2JsYW1lX2luY3JlbWVudGFsIHsKKwlnaXRfYmxhbWVfY29tbW9uKCdpbmNyZW1lbnRhbCcpOworfQorCitzdWIgZ2l0X2JsYW1lX2RhdGEgeworCWdpdF9ibGFtZV9jb21tb24oJ2RhdGEnKTsKK30KKworc3ViIGdpdF90YWdzIHsKKwlteSAkaGVhZCA9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoZWFkLHVuZGVmLCRoZWFkLGZvcm1hdF9yZWZfdmlld3MoJ3RhZ3MnKSk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3N1bW1hcnknLCAkcHJvamVjdCk7CisKKwlteSBAdGFnc2xpc3QgPSBnaXRfZ2V0X3RhZ3NfbGlzdCgpOworCWlmIChAdGFnc2xpc3QpIHsKKwkJZ2l0X3RhZ3NfYm9keShcQHRhZ3NsaXN0KTsKKwl9CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfaGVhZHMgeworCW15ICRoZWFkID0gZ2l0X2dldF9oZWFkX2hhc2goJHByb2plY3QpOworCWdpdF9oZWFkZXJfaHRtbCgpOworCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhlYWQsdW5kZWYsJGhlYWQsZm9ybWF0X3JlZl92aWV3cygnaGVhZHMnKSk7CisJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ3N1bW1hcnknLCAkcHJvamVjdCk7CisKKwlteSBAaGVhZHNsaXN0ID0gZ2l0X2dldF9oZWFkc19saXN0KCk7CisJaWYgKEBoZWFkc2xpc3QpIHsKKwkJZ2l0X2hlYWRzX2JvZHkoXEBoZWFkc2xpc3QsICRoZWFkKTsKKwl9CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKKyMgdXNlZCBib3RoIGZvciBzaW5nbGUgcmVtb3RlIHZpZXcgYW5kIGZvciBsaXN0IG9mIGFsbCB0aGUgcmVtb3Rlcworc3ViIGdpdF9yZW1vdGVzIHsKKwlnaXR3ZWJfY2hlY2tfZmVhdHVyZSgncmVtb3RlX2hlYWRzJykKKwkJb3IgZGllX2Vycm9yKDQwMywgIlJlbW90ZSBoZWFkcyB2aWV3IGlzIGRpc2FibGVkIik7CisKKwlteSAkaGVhZCA9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKKwlteSAkcmVtb3RlID0gJGlucHV0X3BhcmFtc3snaGFzaCd9OworCisJbXkgJHJlbW90ZWRhdGEgPSBnaXRfZ2V0X3JlbW90ZXNfbGlzdCgkcmVtb3RlKTsKKwlkaWVfZXJyb3IoNTAwLCAiVW5hYmxlIHRvIGdldCByZW1vdGUgaW5mb3JtYXRpb24iKSB1bmxlc3MgZGVmaW5lZCAkcmVtb3RlZGF0YTsKKworCXVubGVzcyAoJSRyZW1vdGVkYXRhKSB7CisJCWRpZV9lcnJvcig0MDQsIGRlZmluZWQgJHJlbW90ZSA/CisJCQkiUmVtb3RlICRyZW1vdGUgbm90IGZvdW5kIiA6CisJCQkiTm8gcmVtb3RlcyBmb3VuZCIpOworCX0KKworCWdpdF9oZWFkZXJfaHRtbCh1bmRlZiwgdW5kZWYsIC1hY3Rpb25fZXh0cmEgPT4gJHJlbW90ZSk7CisJZ2l0X3ByaW50X3BhZ2VfbmF2KCcnLCAnJywgICRoZWFkLCB1bmRlZiwgJGhlYWQsCisJCWZvcm1hdF9yZWZfdmlld3MoJHJlbW90ZSA/ICcnIDogJ3JlbW90ZXMnKSk7CisKKwlmaWxsX3JlbW90ZV9oZWFkcygkcmVtb3RlZGF0YSk7CisJaWYgKGRlZmluZWQgJHJlbW90ZSkgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdigncmVtb3RlcycsICIkcmVtb3RlIHJlbW90ZSBmb3IgJHByb2plY3QiKTsKKwkJZ2l0X3JlbW90ZV9ibG9jaygkcmVtb3RlLCAkcmVtb3RlZGF0YS0+eyRyZW1vdGV9LCB1bmRlZiwgJGhlYWQpOworCX0gZWxzZSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdzdW1tYXJ5JywgIiRwcm9qZWN0IHJlbW90ZXMiKTsKKwkJZ2l0X3JlbW90ZXNfYm9keSgkcmVtb3RlZGF0YSwgdW5kZWYsICRoZWFkKTsKKwl9CisKKwlnaXRfZm9vdGVyX2h0bWwoKTsKK30KKworc3ViIGdpdF9ibG9iX3BsYWluIHsKKwlteSAkdHlwZSA9IHNoaWZ0OworCW15ICRleHBpcmVzOworCisJaWYgKCFkZWZpbmVkICRoYXNoKSB7CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCW15ICRiYXNlID0gJGhhc2hfYmFzZSB8fCBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJCQkkaGFzaCA9IGdpdF9nZXRfaGFzaF9ieV9wYXRoKCRiYXNlLCAkZmlsZV9uYW1lLCAiYmxvYiIpCisJCQkJb3IgZGllX2Vycm9yKDQwNCwgIkNhbm5vdCBmaW5kIGZpbGUiKTsKKwkJfSBlbHNlIHsKKwkJCWRpZV9lcnJvcig0MDAsICJObyBmaWxlIG5hbWUgZGVmaW5lZCIpOworCQl9CisJfSBlbHNpZiAoJGhhc2ggPX4gbS9eWzAtOWEtZkEtRl17NDB9JC8pIHsKKwkJIyBibG9icyBkZWZpbmVkIGJ5IG5vbi10ZXh0dWFsIGhhc2ggaWQncyBjYW4gYmUgY2FjaGVkCisJCSRleHBpcmVzID0gIisxZCI7CisJfQorCisJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImNhdC1maWxlIiwgImJsb2IiLCAkaGFzaAorCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtY2F0LWZpbGUgYmxvYiAnJGhhc2gnIGZhaWxlZCIpOworCisJIyBjb250ZW50LXR5cGUgKGNhbiBpbmNsdWRlIGNoYXJzZXQpCisJJHR5cGUgPSBibG9iX2NvbnRlbnR0eXBlKCRmZCwgJGZpbGVfbmFtZSwgJHR5cGUpOworCisJIyAic2F2ZSBhcyIgZmlsZW5hbWUsIGV2ZW4gd2hlbiBubyAkZmlsZV9uYW1lIGlzIGdpdmVuCisJbXkgJHNhdmVfYXMgPSAiJGhhc2giOworCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJJHNhdmVfYXMgPSAkZmlsZV9uYW1lOworCX0gZWxzaWYgKCR0eXBlID1+IG0vXnRleHRcLy8pIHsKKwkJJHNhdmVfYXMgLj0gJy50eHQnOworCX0KKworCSMgV2l0aCBYU1MgcHJldmVudGlvbiBvbiwgYmxvYnMgb2YgYWxsIHR5cGVzIGV4Y2VwdCBhIGZldyBrbm93biBzYWZlCisJIyBvbmVzIGFyZSBzZXJ2ZWQgd2l0aCAiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudCIgdG8gbWFrZSBzdXJlCisJIyB0aGV5IGRvbid0IHJ1biBpbiBvdXIgc2VjdXJpdHkgZG9tYWluLiAgRm9yIGNlcnRhaW4gaW1hZ2UgdHlwZXMsCisJIyBibG9iIHZpZXcgd3JpdGVzIGFuIDxpbWc+IHRhZyByZWZlcnJpbmcgdG8gYmxvYl9wbGFpbiB2aWV3LCBhbmQgd2UKKwkjIHdhbnQgdG8gYmUgc3VyZSBub3QgdG8gYnJlYWsgdGhhdCBieSBzZXJ2aW5nIHRoZSBpbWFnZSBhcyBhbgorCSMgYXR0YWNobWVudCAodGhvdWdoIEZpcmVmb3ggMyBkb2Vzbid0IHNlZW0gdG8gY2FyZSkuCisJbXkgJHNhbmRib3ggPSAkcHJldmVudF94c3MgJiYKKwkJJHR5cGUgIX4gbSFeKD86dGV4dC9bYS16XSt8aW1hZ2UvKD86Z2lmfHBuZ3xqcGVnKSkoPzpbIDtdfCQpITsKKworCSMgc2VydmUgdGV4dC8qIGFzIHRleHQvcGxhaW4KKwlpZiAoJHByZXZlbnRfeHNzICYmCisJICAgICgkdHlwZSA9fiBtIV50ZXh0L1thLXpdK1xiKC4qKSQhIHx8CisJICAgICAoJHR5cGUgPX4gbSFeW2Etel0rL1thLXpdXCt4bWxcYiguKikkISAmJiAtVCAkZmQpKSkgeworCQlteSAkcmVzdCA9ICQxOworCQkkcmVzdCA9IGRlZmluZWQgJHJlc3QgPyAkcmVzdCA6ICcnOworCQkkdHlwZSA9ICJ0ZXh0L3BsYWluJHJlc3QiOworCX0KKworCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJLXR5cGUgPT4gJHR5cGUsCisJCS1leHBpcmVzID0+ICRleHBpcmVzLAorCQktY29udGVudF9kaXNwb3NpdGlvbiA9PgorCQkJKCRzYW5kYm94ID8gJ2F0dGFjaG1lbnQnIDogJ2lubGluZScpCisJCQkuICc7IGZpbGVuYW1lPSInIC4gJHNhdmVfYXMgLiAnIicpOworCWxvY2FsICQvID0gdW5kZWY7CisJYmlubW9kZSBTVERPVVQsICc6cmF3JzsKKwlwcmludCA8JGZkPjsKKwliaW5tb2RlIFNURE9VVCwgJzp1dGY4JzsgIyBhcyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBnaXR3ZWIuY2dpCisJY2xvc2UgJGZkOworfQorCitzdWIgZ2l0X2Jsb2IgeworCW15ICRleHBpcmVzOworCisJaWYgKCFkZWZpbmVkICRoYXNoKSB7CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCW15ICRiYXNlID0gJGhhc2hfYmFzZSB8fCBnaXRfZ2V0X2hlYWRfaGFzaCgkcHJvamVjdCk7CisJCQkkaGFzaCA9IGdpdF9nZXRfaGFzaF9ieV9wYXRoKCRiYXNlLCAkZmlsZV9uYW1lLCAiYmxvYiIpCisJCQkJb3IgZGllX2Vycm9yKDQwNCwgIkNhbm5vdCBmaW5kIGZpbGUiKTsKKwkJfSBlbHNlIHsKKwkJCWRpZV9lcnJvcig0MDAsICJObyBmaWxlIG5hbWUgZGVmaW5lZCIpOworCQl9CisJfSBlbHNpZiAoJGhhc2ggPX4gbS9eWzAtOWEtZkEtRl17NDB9JC8pIHsKKwkJIyBibG9icyBkZWZpbmVkIGJ5IG5vbi10ZXh0dWFsIGhhc2ggaWQncyBjYW4gYmUgY2FjaGVkCisJCSRleHBpcmVzID0gIisxZCI7CisJfQorCisJbXkgJGhhdmVfYmxhbWUgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnYmxhbWUnKTsKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiY2F0LWZpbGUiLCAiYmxvYiIsICRoYXNoCisJCW9yIGRpZV9lcnJvcig1MDAsICJDb3VsZG4ndCBjYXQgJGZpbGVfbmFtZSwgJGhhc2giKTsKKwlteSAkbWltZXR5cGUgPSBibG9iX21pbWV0eXBlKCRmZCwgJGZpbGVfbmFtZSk7CisJIyB1c2UgJ2Jsb2JfcGxhaW4nIChha2EgJ3JhdycpIHZpZXcgZm9yIGZpbGVzIHRoYXQgY2Fubm90IGJlIGRpc3BsYXllZAorCWlmICgkbWltZXR5cGUgIX4gbSFeKD86dGV4dC98aW1hZ2UvKD86Z2lmfHBuZ3xqcGVnKSQpISAmJiAtQiAkZmQpIHsKKwkJY2xvc2UgJGZkOworCQlyZXR1cm4gZ2l0X2Jsb2JfcGxhaW4oJG1pbWV0eXBlKTsKKwl9CisJIyB3ZSBjYW4gaGF2ZSBibGFtZSBvbmx5IGZvciB0ZXh0LyogbWltZXR5cGUKKwkkaGF2ZV9ibGFtZSAmJj0gKCRtaW1ldHlwZSA9fiBtIV50ZXh0LyEpOworCisJbXkgJGhpZ2hsaWdodCA9IGdpdHdlYl9jaGVja19mZWF0dXJlKCdoaWdobGlnaHQnKTsKKwlteSAkc3ludGF4ID0gZ3Vlc3NfZmlsZV9zeW50YXgoJGhpZ2hsaWdodCwgJG1pbWV0eXBlLCAkZmlsZV9uYW1lKTsKKwkkZmQgPSBydW5faGlnaGxpZ2h0ZXIoJGZkLCAkaGlnaGxpZ2h0LCAkc3ludGF4KQorCQlpZiAkc3ludGF4OworCisJZ2l0X2hlYWRlcl9odG1sKHVuZGVmLCAkZXhwaXJlcyk7CisJbXkgJGZvcm1hdHNfbmF2ID0gJyc7CisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSAmJiAobXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoX2Jhc2UpKSkgeworCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCQlpZiAoJGhhdmVfYmxhbWUpIHsKKwkJCQkkZm9ybWF0c19uYXYgLj0KKwkJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibGFtZSIsIC1yZXBsYXk9PjEpfSwKKwkJCQkJICAgICAgICAiYmxhbWUiKSAuCisJCQkJCSIgfCAiOworCQkJfQorCQkJJGZvcm1hdHNfbmF2IC49CisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJoaXN0b3J5IiwgLXJlcGxheT0+MSl9LAorCQkJCSAgICAgICAgImhpc3RvcnkiKSAuCisJCQkJIiB8ICIgLgorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYl9wbGFpbiIsIC1yZXBsYXk9PjEpfSwKKwkJCQkgICAgICAgICJyYXciKSAuCisJCQkJIiB8ICIgLgorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYiIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiJIRUFEIiwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sCisJCQkJICAgICAgICAiSEVBRCIpOworCQl9IGVsc2UgeworCQkJJGZvcm1hdHNfbmF2IC49CisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJibG9iX3BsYWluIiwgLXJlcGxheT0+MSl9LAorCQkJCSAgICAgICAgInJhdyIpOworCQl9CisJCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhhc2hfYmFzZSwkY297J3RyZWUnfSwkaGFzaF9iYXNlLCAkZm9ybWF0c19uYXYpOworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSwgJGhhc2hfYmFzZSk7CisJfSBlbHNlIHsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX25hdlwiPlxuIiAuCisJCSAgICAgICI8YnIvPjxici8+PC9kaXY+XG4iIC4KKwkJICAgICAgIjxkaXYgY2xhc3M9XCJ0aXRsZVwiPiIuZXNjX2h0bWwoJGhhc2gpLiI8L2Rpdj5cbiI7CisJfQorCWdpdF9wcmludF9wYWdlX3BhdGgoJGZpbGVfbmFtZSwgImJsb2IiLCAkaGFzaF9iYXNlKTsKKwlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfYm9keVwiPlxuIjsKKwlpZiAoJG1pbWV0eXBlID1+IG0hXmltYWdlLyEpIHsKKwkJcHJpbnQgcXEhPGltZyBjbGFzcz0iYmxvYiIgdHlwZT0iIS5lc2NfYXR0cigkbWltZXR5cGUpLnFxISIhOworCQlpZiAoJGZpbGVfbmFtZSkgeworCQkJcHJpbnQgcXEhIGFsdD0iIS5lc2NfYXR0cigkZmlsZV9uYW1lKS5xcSEiIHRpdGxlPSIhLmVzY19hdHRyKCRmaWxlX25hbWUpLnFxISIhOworCQl9CisJCXByaW50IHFxISBzcmM9IiEgLgorCQkgICAgICBocmVmKGFjdGlvbj0+ImJsb2JfcGxhaW4iLCBoYXNoPT4kaGFzaCwKKwkJICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsIGZpbGVfbmFtZT0+JGZpbGVfbmFtZSkgLgorCQkgICAgICBxcSEiIC8+XG4hOworCX0gZWxzZSB7CisJCW15ICRucjsKKwkJd2hpbGUgKG15ICRsaW5lID0gPCRmZD4pIHsKKwkJCWNob21wICRsaW5lOworCQkJJG5yKys7CisJCQkkbGluZSA9IHVudGFiaWZ5KCRsaW5lKTsKKwkJCXByaW50ZiBxcSE8ZGl2IGNsYXNzPSJwcmUiPjxhIGlkPSJsJWkiIGhyZWY9IiVzI2wlaSIgY2xhc3M9ImxpbmVuciI+JTRpPC9hPiAlczwvZGl2PlxuISwKKwkJCSAgICAgICAkbnIsIGVzY19hdHRyKGhyZWYoLXJlcGxheSA9PiAxKSksICRuciwgJG5yLAorCQkJICAgICAgICRzeW50YXggPyBzYW5pdGl6ZSgkbGluZSkgOiBlc2NfaHRtbCgkbGluZSwgLW5ic3A9PjEpOworCQl9CisJfQorCWNsb3NlICRmZAorCQlvciBwcmludCAiUmVhZGluZyBibG9iIGZhaWxlZC5cbiI7CisJcHJpbnQgIjwvZGl2PiI7CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfdHJlZSB7CisJaWYgKCFkZWZpbmVkICRoYXNoX2Jhc2UpIHsKKwkJJGhhc2hfYmFzZSA9ICJIRUFEIjsKKwl9CisJaWYgKCFkZWZpbmVkICRoYXNoKSB7CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCSRoYXNoID0gZ2l0X2dldF9oYXNoX2J5X3BhdGgoJGhhc2hfYmFzZSwgJGZpbGVfbmFtZSwgInRyZWUiKTsKKwkJfSBlbHNlIHsKKwkJCSRoYXNoID0gJGhhc2hfYmFzZTsKKwkJfQorCX0KKwlkaWVfZXJyb3IoNDA0LCAiTm8gc3VjaCB0cmVlIikgdW5sZXNzIGRlZmluZWQoJGhhc2gpOworCisJbXkgJHNob3dfc2l6ZXMgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnc2hvdy1zaXplcycpOworCW15ICRoYXZlX2JsYW1lID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2JsYW1lJyk7CisKKwlteSBAZW50cmllcyA9ICgpOworCXsKKwkJbG9jYWwgJC8gPSAiXDAiOworCQlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAibHMtdHJlZSIsICcteicsCisJCQkoJHNob3dfc2l6ZXMgPyAnLWwnIDogKCkpLCBAZXh0cmFfb3B0aW9ucywgJGhhc2gKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1scy10cmVlIGZhaWxlZCIpOworCQlAZW50cmllcyA9IG1hcCB7IGNob21wOyAkXyB9IDwkZmQ+OworCQljbG9zZSAkZmQKKwkJCW9yIGRpZV9lcnJvcig0MDQsICJSZWFkaW5nIHRyZWUgZmFpbGVkIik7CisJfQorCisJbXkgJHJlZnMgPSBnaXRfZ2V0X3JlZmVyZW5jZXMoKTsKKwlteSAkcmVmID0gZm9ybWF0X3JlZl9tYXJrZXIoJHJlZnMsICRoYXNoX2Jhc2UpOworCWdpdF9oZWFkZXJfaHRtbCgpOworCW15ICRiYXNlZGlyID0gJyc7CisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSAmJiAobXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoX2Jhc2UpKSkgeworCQlteSBAdmlld3NfbmF2ID0gKCk7CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCXB1c2ggQHZpZXdzX25hdiwKKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+Imhpc3RvcnkiLCAtcmVwbGF5PT4xKX0sCisJCQkJICAgICAgICAiaGlzdG9yeSIpLAorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiJIRUFEIiwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKX0sCisJCQkJICAgICAgICAiSEVBRCIpLAorCQl9CisJCW15ICRzbmFwc2hvdF9saW5rcyA9IGZvcm1hdF9zbmFwc2hvdF9saW5rcygkaGFzaCk7CisJCWlmIChkZWZpbmVkICRzbmFwc2hvdF9saW5rcykgeworCQkJIyBGSVhNRTogU2hvdWxkIGJlIGF2YWlsYWJsZSB3aGVuIHdlIGhhdmUgbm8gaGFzaCBiYXNlIGFzIHdlbGwuCisJCQlwdXNoIEB2aWV3c19uYXYsICRzbmFwc2hvdF9saW5rczsKKwkJfQorCQlnaXRfcHJpbnRfcGFnZV9uYXYoJ3RyZWUnLCcnLCAkaGFzaF9iYXNlLCB1bmRlZiwgdW5kZWYsCisJCSAgICAgICAgICAgICAgICAgICBqb2luKCcgfCAnLCBAdmlld3NfbmF2KSk7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXQnLCBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gJHJlZiwgJGhhc2hfYmFzZSk7CisJfSBlbHNlIHsKKwkJdW5kZWYgJGhhc2hfYmFzZTsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX25hdlwiPlxuIjsKKwkJcHJpbnQgIjxici8+PGJyLz48L2Rpdj5cbiI7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwidGl0bGVcIj4iLmVzY19odG1sKCRoYXNoKS4iPC9kaXY+XG4iOworCX0KKwlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCSRiYXNlZGlyID0gJGZpbGVfbmFtZTsKKwkJaWYgKCRiYXNlZGlyIG5lICcnICYmIHN1YnN0cigkYmFzZWRpciwgLTEpIG5lICcvJykgeworCQkJJGJhc2VkaXIgLj0gJy8nOworCQl9CisJCWdpdF9wcmludF9wYWdlX3BhdGgoJGZpbGVfbmFtZSwgJ3RyZWUnLCAkaGFzaF9iYXNlKTsKKwl9CisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2JvZHlcIj5cbiI7CisJcHJpbnQgIjx0YWJsZSBjbGFzcz1cInRyZWVcIj5cbiI7CisJbXkgJGFsdGVybmF0ZSA9IDE7CisJIyAnLi4nICh0b3AgZGlyZWN0b3J5KSBsaW5rIGlmIHBvc3NpYmxlCisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSAmJgorCSAgICBkZWZpbmVkICRmaWxlX25hbWUgJiYgJGZpbGVfbmFtZSA9fiBtIVteL10rJCEpIHsKKwkJaWYgKCRhbHRlcm5hdGUpIHsKKwkJCXByaW50ICI8dHIgY2xhc3M9XCJkYXJrXCI+XG4iOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImxpZ2h0XCI+XG4iOworCQl9CisJCSRhbHRlcm5hdGUgXj0gMTsKKworCQlteSAkdXAgPSAkZmlsZV9uYW1lOworCQkkdXAgPX4gcyEvP1teL10rJCEhOworCQl1bmRlZiAkdXAgdW5sZXNzICR1cDsKKwkJIyBiYXNlZCBvbiBnaXRfcHJpbnRfdHJlZV9lbnRyeQorCQlwcmludCAnPHRkIGNsYXNzPSJtb2RlIj4nIC4gbW9kZV9zdHIoJzA0MDAwMCcpIC4gIjwvdGQ+XG4iOworCQlwcmludCAnPHRkIGNsYXNzPSJzaXplIj4mbmJzcDs8L3RkPicuIlxuIiBpZiAkc2hvd19zaXplczsKKwkJcHJpbnQgJzx0ZCBjbGFzcz0ibGlzdCI+JzsKKwkJcHJpbnQgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJ0cmVlIiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Jhc2U9PiRoYXNoX2Jhc2UsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kdXApfSwKKwkJICAgICAgICAgICAgICAiLi4iKTsKKwkJcHJpbnQgIjwvdGQ+XG4iOworCQlwcmludCAiPHRkIGNsYXNzPVwibGlua1wiPjwvdGQ+XG4iOworCisJCXByaW50ICI8L3RyPlxuIjsKKwl9CisJZm9yZWFjaCBteSAkbGluZSAoQGVudHJpZXMpIHsKKwkJbXkgJXQgPSBwYXJzZV9sc190cmVlX2xpbmUoJGxpbmUsIC16ID0+IDEsIC1sID0+ICRzaG93X3NpemVzKTsKKworCQlpZiAoJGFsdGVybmF0ZSkgeworCQkJcHJpbnQgIjx0ciBjbGFzcz1cImRhcmtcIj5cbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPHRyIGNsYXNzPVwibGlnaHRcIj5cbiI7CisJCX0KKwkJJGFsdGVybmF0ZSBePSAxOworCisJCWdpdF9wcmludF90cmVlX2VudHJ5KFwldCwgJGJhc2VkaXIsICRoYXNoX2Jhc2UsICRoYXZlX2JsYW1lKTsKKworCQlwcmludCAiPC90cj5cbiI7CisJfQorCXByaW50ICI8L3RhYmxlPlxuIiAuCisJICAgICAgIjwvZGl2PiI7CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBzYW5pdGl6ZV9mb3JfZmlsZW5hbWUgeworICAgIG15ICRuYW1lID0gc2hpZnQ7CisKKyAgICAkbmFtZSA9fiBzIS8hLSFnOworICAgICRuYW1lID1+IHMvW15bOmFsbnVtOl1fLi1dLy9nOworCisgICAgcmV0dXJuICRuYW1lOworfQorCitzdWIgc25hcHNob3RfbmFtZSB7CisJbXkgKCRwcm9qZWN0LCAkaGFzaCkgPSBAXzsKKworCSMgcGF0aC90by9wcm9qZWN0LmdpdCAgLT4gcHJvamVjdAorCSMgcGF0aC90by9wcm9qZWN0Ly5naXQgLT4gcHJvamVjdAorCW15ICRuYW1lID0gdG9fdXRmOCgkcHJvamVjdCk7CisJJG5hbWUgPX4gcywoW14vXSkvKlwuZ2l0JCwkMSw7CisJJG5hbWUgPSBzYW5pdGl6ZV9mb3JfZmlsZW5hbWUoYmFzZW5hbWUoJG5hbWUpKTsKKworCW15ICR2ZXIgPSAkaGFzaDsKKwlpZiAoJGhhc2ggPX4gL15bMC05YS1mQS1GXSskLykgeworCQkjIHNob3J0ZW4gU0hBLTEgaGFzaAorCQlteSAkZnVsbF9oYXNoID0gZ2l0X2dldF9mdWxsX2hhc2goJHByb2plY3QsICRoYXNoKTsKKwkJaWYgKCRmdWxsX2hhc2ggPX4gL14kaGFzaC8gJiYgbGVuZ3RoKCRoYXNoKSA+IDcpIHsKKwkJCSR2ZXIgPSBnaXRfZ2V0X3Nob3J0X2hhc2goJHByb2plY3QsICRoYXNoKTsKKwkJfQorCX0gZWxzaWYgKCRoYXNoID1+IG0hXnJlZnMvdGFncy8oLiopJCEpIHsKKwkJIyB0YWdzIGRvbid0IG5lZWQgc2hvcnRlbmVkIFNIQS0xIGhhc2gKKwkJJHZlciA9ICQxOworCX0gZWxzZSB7CisJCSMgYnJhbmNoZXMgYW5kIG90aGVyIG5lZWQgc2hvcnRlbmVkIFNIQS0xIGhhc2gKKwkJbXkgJHN0cmlwX3JlZnMgPSBqb2luICd8JywgbWFwIHsgcXVvdGVtZXRhIH0gZ2V0X2JyYW5jaF9yZWZzKCk7CisJCWlmICgkaGFzaCA9fiBtIV5yZWZzLygkc3RyaXBfcmVmc3xyZW1vdGVzKS8oLiopJCEpIHsKKwkJCW15ICRyZWZfZGlyID0gKGRlZmluZWQgJDEpID8gJDEgOiAnJzsKKwkJCSR2ZXIgPSAkMjsKKworCQkJJHJlZl9kaXIgPSBzYW5pdGl6ZV9mb3JfZmlsZW5hbWUoJHJlZl9kaXIpOworCQkJIyBmb3IgcmVmcyBuZWl0aGVyIGluIGhlYWRzIG5vciByZW1vdGVzIHdlIHdhbnQgdG8KKwkJCSMgYWRkIGEgcmVmIGRpciB0byBhcmNoaXZlIG5hbWUKKwkJCWlmICgkcmVmX2RpciBuZSAnJyBhbmQgJHJlZl9kaXIgbmUgJ2hlYWRzJyBhbmQgJHJlZl9kaXIgbmUgJ3JlbW90ZXMnKSB7CisJCQkJJHZlciA9ICRyZWZfZGlyIC4gJy0nIC4gJHZlcjsKKwkJCX0KKwkJfQorCQkkdmVyIC49ICctJyAuIGdpdF9nZXRfc2hvcnRfaGFzaCgkcHJvamVjdCwgJGhhc2gpOworCX0KKwkjIHNwZWNpYWwgY2FzZSBvZiBzYW5pdGl6YXRpb24gZm9yIGZpbGVuYW1lIC0gd2UgY2hhbmdlCisJIyBzbGFzaGVzIHRvIGRvdHMgaW5zdGVhZCBvZiBkYXNoZXMKKwkjIGluIGNhc2Ugb2YgaGllcmFyY2hpY2FsIGJyYW5jaCBuYW1lcworCSR2ZXIgPX4gcyEvIS4hZzsKKwkkdmVyID1+IHMvW15bOmFsbnVtOl1fLi1dLy9nOworCisJIyBuYW1lID0gcHJvamVjdC12ZXJzaW9uX3N0cmluZworCSRuYW1lID0gIiRuYW1lLSR2ZXIiOworCisJcmV0dXJuIHdhbnRhcnJheSA/ICgkbmFtZSwgJG5hbWUpIDogJG5hbWU7Cit9CisKK3N1YiBleGl0X2lmX3VubW9kaWZpZWRfc2luY2UgeworCW15ICgkbGF0ZXN0X2Vwb2NoKSA9IEBfOworCW91ciAkY2dpOworCisJbXkgJGlmX21vZGlmaWVkID0gJGNnaS0+aHR0cCgnSUZfTU9ESUZJRURfU0lOQ0UnKTsKKwlpZiAoZGVmaW5lZCAkaWZfbW9kaWZpZWQpIHsKKwkJbXkgJHNpbmNlOworCQlpZiAoZXZhbCB7IHJlcXVpcmUgSFRUUDo6RGF0ZTsgMTsgfSkgeworCQkJJHNpbmNlID0gSFRUUDo6RGF0ZTo6c3RyMnRpbWUoJGlmX21vZGlmaWVkKTsKKwkJfSBlbHNpZiAoZXZhbCB7IHJlcXVpcmUgVGltZTo6UGFyc2VEYXRlOyAxOyB9KSB7CisJCQkkc2luY2UgPSBUaW1lOjpQYXJzZURhdGU6OnBhcnNlZGF0ZSgkaWZfbW9kaWZpZWQsIEdNVCA9PiAxKTsKKwkJfQorCQlpZiAoZGVmaW5lZCAkc2luY2UgJiYgJGxhdGVzdF9lcG9jaCA8PSAkc2luY2UpIHsKKwkJCW15ICVsYXRlc3RfZGF0ZSA9IHBhcnNlX2RhdGUoJGxhdGVzdF9lcG9jaCk7CisJCQlwcmludCAkY2dpLT5oZWFkZXIoCisJCQkJLWxhc3RfbW9kaWZpZWQgPT4gJGxhdGVzdF9kYXRleydyZmMyODIyJ30sCisJCQkJLXN0YXR1cyA9PiAnMzA0IE5vdCBNb2RpZmllZCcpOworCQkJZ290byBET05FX0dJVFdFQjsKKwkJfQorCX0KK30KKworc3ViIGdpdF9zbmFwc2hvdCB7CisJbXkgJGZvcm1hdCA9ICRpbnB1dF9wYXJhbXN7J3NuYXBzaG90X2Zvcm1hdCd9OworCWlmICghQHNuYXBzaG90X2ZtdHMpIHsKKwkJZGllX2Vycm9yKDQwMywgIlNuYXBzaG90cyBub3QgYWxsb3dlZCIpOworCX0KKwkjIGRlZmF1bHQgdG8gZmlyc3Qgc3VwcG9ydGVkIHNuYXBzaG90IGZvcm1hdAorCSRmb3JtYXQgfHw9ICRzbmFwc2hvdF9mbXRzWzBdOworCWlmICgkZm9ybWF0ICF+IG0vXlthLXowLTldKyQvKSB7CisJCWRpZV9lcnJvcig0MDAsICJJbnZhbGlkIHNuYXBzaG90IGZvcm1hdCBwYXJhbWV0ZXIiKTsKKwl9IGVsc2lmICghZXhpc3RzKCRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9KSkgeworCQlkaWVfZXJyb3IoNDAwLCAiVW5rbm93biBzbmFwc2hvdCBmb3JtYXQiKTsKKwl9IGVsc2lmICgka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnZGlzYWJsZWQnfSkgeworCQlkaWVfZXJyb3IoNDAzLCAiU25hcHNob3QgZm9ybWF0IG5vdCBhbGxvd2VkIik7CisJfSBlbHNpZiAoIWdyZXAoJF8gZXEgJGZvcm1hdCwgQHNuYXBzaG90X2ZtdHMpKSB7CisJCWRpZV9lcnJvcig0MDMsICJVbnN1cHBvcnRlZCBzbmFwc2hvdCBmb3JtYXQiKTsKKwl9CisKKwlteSAkdHlwZSA9IGdpdF9nZXRfdHlwZSgiJGhhc2hee30iKTsKKwlpZiAoISR0eXBlKSB7CisJCWRpZV9lcnJvcig0MDQsICdPYmplY3QgZG9lcyBub3QgZXhpc3QnKTsKKwl9ICBlbHNpZiAoJHR5cGUgZXEgJ2Jsb2InKSB7CisJCWRpZV9lcnJvcig0MDAsICdPYmplY3QgaXMgbm90IGEgdHJlZS1pc2gnKTsKKwl9CisKKwlteSAoJG5hbWUsICRwcmVmaXgpID0gc25hcHNob3RfbmFtZSgkcHJvamVjdCwgJGhhc2gpOworCW15ICRmaWxlbmFtZSA9ICIkbmFtZSRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyRmb3JtYXR9eydzdWZmaXgnfSI7CisKKwlteSAlY28gPSBwYXJzZV9jb21taXQoJGhhc2gpOworCWV4aXRfaWZfdW5tb2RpZmllZF9zaW5jZSgkY297J2NvbW1pdHRlcl9lcG9jaCd9KSBpZiAlY287CisKKwlteSAkY21kID0gcXVvdGVfY29tbWFuZCgKKwkJZ2l0X2NtZCgpLCAnYXJjaGl2ZScsCisJCSItLWZvcm1hdD0ka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnZm9ybWF0J30iLAorCQkiLS1wcmVmaXg9JHByZWZpeC8iLCAkaGFzaCk7CisJaWYgKGV4aXN0cyAka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsnY29tcHJlc3Nvcid9KSB7CisJCSRjbWQgLj0gJyB8ICcgLiBxdW90ZV9jb21tYW5kKEB7JGtub3duX3NuYXBzaG90X2Zvcm1hdHN7JGZvcm1hdH17J2NvbXByZXNzb3InfX0pOworCX0KKworCSRmaWxlbmFtZSA9fiBzLyhbIlxcXSkvXFwkMS9nOworCW15ICVsYXRlc3RfZGF0ZTsKKwlpZiAoJWNvKSB7CisJCSVsYXRlc3RfZGF0ZSA9IHBhcnNlX2RhdGUoJGNveydjb21taXR0ZXJfZXBvY2gnfSwgJGNveydjb21taXR0ZXJfdHonfSk7CisJfQorCisJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQktdHlwZSA9PiAka25vd25fc25hcHNob3RfZm9ybWF0c3skZm9ybWF0fXsndHlwZSd9LAorCQktY29udGVudF9kaXNwb3NpdGlvbiA9PiAnaW5saW5lOyBmaWxlbmFtZT0iJyAuICRmaWxlbmFtZSAuICciJywKKwkJJWNvID8gKC1sYXN0X21vZGlmaWVkID0+ICRsYXRlc3RfZGF0ZXsncmZjMjgyMid9KSA6ICgpLAorCQktc3RhdHVzID0+ICcyMDAgT0snKTsKKworCW9wZW4gbXkgJGZkLCAiLXwiLCAkY21kCisJCW9yIGRpZV9lcnJvcig1MDAsICJFeGVjdXRlIGdpdC1hcmNoaXZlIGZhaWxlZCIpOworCWJpbm1vZGUgU1RET1VULCAnOnJhdyc7CisJcHJpbnQgPCRmZD47CisJYmlubW9kZSBTVERPVVQsICc6dXRmOCc7ICMgYXMgc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgZ2l0d2ViLmNnaQorCWNsb3NlICRmZDsKK30KKworc3ViIGdpdF9sb2dfZ2VuZXJpYyB7CisJbXkgKCRmbXRfbmFtZSwgJGJvZHlfc3ViciwgJGJhc2UsICRwYXJlbnQsICRmaWxlX25hbWUsICRmaWxlX2hhc2gpID0gQF87CisKKwlteSAkaGVhZCA9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKKwlpZiAoIWRlZmluZWQgJGJhc2UpIHsKKwkJJGJhc2UgPSAkaGVhZDsKKwl9CisJaWYgKCFkZWZpbmVkICRwYWdlKSB7CisJCSRwYWdlID0gMDsKKwl9CisJbXkgJHJlZnMgPSBnaXRfZ2V0X3JlZmVyZW5jZXMoKTsKKworCW15ICRjb21taXRfaGFzaCA9ICRiYXNlOworCWlmIChkZWZpbmVkICRwYXJlbnQpIHsKKwkJJGNvbW1pdF9oYXNoID0gIiRwYXJlbnQuLiRiYXNlIjsKKwl9CisJbXkgQGNvbW1pdGxpc3QgPQorCQlwYXJzZV9jb21taXRzKCRjb21taXRfaGFzaCwgMTAxLCAoMTAwICogJHBhZ2UpLAorCQkgICAgICAgICAgICAgIGRlZmluZWQgJGZpbGVfbmFtZSA/ICgkZmlsZV9uYW1lLCAiLS1mdWxsLWhpc3RvcnkiKSA6ICgpKTsKKworCW15ICRmdHlwZTsKKwlpZiAoIWRlZmluZWQgJGZpbGVfaGFzaCAmJiBkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJIyBzb21lIGNvbW1pdHMgY291bGQgaGF2ZSBkZWxldGVkIGZpbGUgaW4gcXVlc3Rpb24sCisJCSMgYW5kIG5vdCBoYXZlIGl0IGluIHRyZWUsIGJ1dCBvbmUgb2YgdGhlbSBoYXMgdG8gaGF2ZSBpdAorCQlmb3IgKG15ICRpID0gMDsgJGkgPCBAY29tbWl0bGlzdDsgJGkrKykgeworCQkJJGZpbGVfaGFzaCA9IGdpdF9nZXRfaGFzaF9ieV9wYXRoKCRjb21taXRsaXN0WyRpXXsnaWQnfSwgJGZpbGVfbmFtZSk7CisJCQlsYXN0IGlmIGRlZmluZWQgJGZpbGVfaGFzaDsKKwkJfQorCX0KKwlpZiAoZGVmaW5lZCAkZmlsZV9oYXNoKSB7CisJCSRmdHlwZSA9IGdpdF9nZXRfdHlwZSgkZmlsZV9oYXNoKTsKKwl9CisJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSAmJiAhZGVmaW5lZCAkZnR5cGUpIHsKKwkJZGllX2Vycm9yKDUwMCwgIlVua25vd24gdHlwZSBvZiBvYmplY3QiKTsKKwl9CisJbXkgJWNvOworCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJJWNvID0gcGFyc2VfY29tbWl0KCRiYXNlKQorCQkJb3IgZGllX2Vycm9yKDQwNCwgIlVua25vd24gY29tbWl0IG9iamVjdCIpOworCX0KKworCisJbXkgJHBhZ2luZ19uYXYgPSBmb3JtYXRfcGFnaW5nX25hdigkZm10X25hbWUsICRwYWdlLCAkI2NvbW1pdGxpc3QgPj0gMTAwKTsKKwlteSAkbmV4dF9saW5rID0gJyc7CisJaWYgKCQjY29tbWl0bGlzdCA+PSAxMDApIHsKKwkJJG5leHRfbGluayA9CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIHBhZ2U9PiRwYWdlKzEpLAorCQkJICAgICAgICAgLWFjY2Vzc2tleSA9PiAibiIsIC10aXRsZSA9PiAiQWx0LW4ifSwgIm5leHQiKTsKKwl9CisJbXkgJHBhdGNoX21heCA9IGdpdHdlYl9nZXRfZmVhdHVyZSgncGF0Y2hlcycpOworCWlmICgkcGF0Y2hfbWF4ICYmICFkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJaWYgKCRwYXRjaF9tYXggPCAwIHx8IEBjb21taXRsaXN0IDw9ICRwYXRjaF9tYXgpIHsKKwkJCSRwYWdpbmdfbmF2IC49ICIgJnNkb3Q7ICIgLgorCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4icGF0Y2hlcyIsIC1yZXBsYXk9PjEpfSwKKwkJCQkJInBhdGNoZXMiKTsKKwkJfQorCX0KKworCWdpdF9oZWFkZXJfaHRtbCgpOworCWdpdF9wcmludF9wYWdlX25hdigkZm10X25hbWUsJycsICRoYXNoLCRoYXNoLCRoYXNoLCAkcGFnaW5nX25hdik7CisJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSwgJGJhc2UpOworCX0gZWxzZSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdzdW1tYXJ5JywgJHByb2plY3QpCisJfQorCWdpdF9wcmludF9wYWdlX3BhdGgoJGZpbGVfbmFtZSwgJGZ0eXBlLCAkaGFzaF9iYXNlKQorCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKTsKKworCSRib2R5X3N1YnItPihcQGNvbW1pdGxpc3QsIDAsIDk5LCAkcmVmcywgJG5leHRfbGluaywKKwkgICAgICAgICAgICAgJGZpbGVfbmFtZSwgJGZpbGVfaGFzaCwgJGZ0eXBlKTsKKworCWdpdF9mb290ZXJfaHRtbCgpOworfQorCitzdWIgZ2l0X2xvZyB7CisJZ2l0X2xvZ19nZW5lcmljKCdsb2cnLCBcJmdpdF9sb2dfYm9keSwKKwkgICAgICAgICAgICAgICAgJGhhc2gsICRoYXNoX3BhcmVudCk7Cit9CisKK3N1YiBnaXRfY29tbWl0IHsKKwkkaGFzaCB8fD0gJGhhc2hfYmFzZSB8fCAiSEVBRCI7CisJbXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoKQorCSAgICBvciBkaWVfZXJyb3IoNDA0LCAiVW5rbm93biBjb21taXQgb2JqZWN0Iik7CisKKwlteSAkcGFyZW50ICA9ICRjb3sncGFyZW50J307CisJbXkgJHBhcmVudHMgPSAkY297J3BhcmVudHMnfTsgIyBsaXN0cmVmCisKKwkjIHdlIG5lZWQgdG8gcHJlcGFyZSAkZm9ybWF0c19uYXYgYmVmb3JlIGFueSBwYXJhbWV0ZXIgbXVuZ2luZworCW15ICRmb3JtYXRzX25hdjsKKwlpZiAoIWRlZmluZWQgJHBhcmVudCkgeworCQkjIC0tcm9vdCBjb21taXRkaWZmCisJCSRmb3JtYXRzX25hdiAuPSAnKGluaXRpYWwpJzsKKwl9IGVsc2lmIChAJHBhcmVudHMgPT0gMSkgeworCQkjIHNpbmdsZSBwYXJlbnQgY29tbWl0CisJCSRmb3JtYXRzX25hdiAuPQorCQkJJyhwYXJlbnQ6ICcgLgorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLAorCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kcGFyZW50KX0sCisJCQkgICAgICAgIGVzY19odG1sKHN1YnN0cigkcGFyZW50LCAwLCA3KSkpIC4KKwkJCScpJzsKKwl9IGVsc2UgeworCQkjIG1lcmdlIGNvbW1pdAorCQkkZm9ybWF0c19uYXYgLj0KKwkJCScobWVyZ2U6ICcgLgorCQkJam9pbignICcsIG1hcCB7CisJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJjb21taXQiLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JF8pfSwKKwkJCQkgICAgICAgIGVzY19odG1sKHN1YnN0cigkXywgMCwgNykpKTsKKwkJCX0gQCRwYXJlbnRzICkgLgorCQkJJyknOworCX0KKwlpZiAoZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3BhdGNoZXMnKSAmJiBAJHBhcmVudHMgPD0gMSkgeworCQkkZm9ybWF0c19uYXYgLj0gIiB8ICIgLgorCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZihhY3Rpb249PiJwYXRjaCIsIC1yZXBsYXk9PjEpfSwKKwkJCQkicGF0Y2giKTsKKwl9CisKKwlpZiAoIWRlZmluZWQgJHBhcmVudCkgeworCQkkcGFyZW50ID0gIi0tcm9vdCI7CisJfQorCW15IEBkaWZmdHJlZTsKKwlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiZGlmZi10cmVlIiwgJy1yJywgIi0tbm8tY29tbWl0LWlkIiwKKwkJQGRpZmZfb3B0cywKKwkJKEAkcGFyZW50cyA8PSAxID8gJHBhcmVudCA6ICctYycpLAorCQkkaGFzaCwgIi0tIgorCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCUBkaWZmdHJlZSA9IG1hcCB7IGNob21wOyAkXyB9IDwkZmQ+OworCWNsb3NlICRmZCBvciBkaWVfZXJyb3IoNDA0LCAiUmVhZGluZyBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCisJIyBub24tdGV4dHVhbCBoYXNoIGlkJ3MgY2FuIGJlIGNhY2hlZAorCW15ICRleHBpcmVzOworCWlmICgkaGFzaCA9fiBtL15bMC05YS1mQS1GXXs0MH0kLykgeworCQkkZXhwaXJlcyA9ICIrMWQiOworCX0KKwlteSAkcmVmcyA9IGdpdF9nZXRfcmVmZXJlbmNlcygpOworCW15ICRyZWYgPSBmb3JtYXRfcmVmX21hcmtlcigkcmVmcywgJGNveydpZCd9KTsKKworCWdpdF9oZWFkZXJfaHRtbCh1bmRlZiwgJGV4cGlyZXMpOworCWdpdF9wcmludF9wYWdlX25hdignY29tbWl0JywgJycsCisJICAgICAgICAgICAgICAgICAgICRoYXNoLCAkY297J3RyZWUnfSwgJGhhc2gsCisJICAgICAgICAgICAgICAgICAgICRmb3JtYXRzX25hdik7CisKKwlpZiAoZGVmaW5lZCAkY297J3BhcmVudCd9KSB7CisJCWdpdF9wcmludF9oZWFkZXJfZGl2KCdjb21taXRkaWZmJywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSAuICRyZWYsICRoYXNoKTsKKwl9IGVsc2UgeworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdigndHJlZScsIGVzY19odG1sKCRjb3sndGl0bGUnfSkgLiAkcmVmLCAkY297J3RyZWUnfSwgJGhhc2gpOworCX0KKwlwcmludCAiPGRpdiBjbGFzcz1cInRpdGxlX3RleHRcIj5cbiIgLgorCSAgICAgICI8dGFibGUgY2xhc3M9XCJvYmplY3RfaGVhZGVyXCI+XG4iOworCWdpdF9wcmludF9hdXRob3JzaGlwX3Jvd3MoXCVjbyk7CisJcHJpbnQgIjx0cj48dGQ+Y29tbWl0PC90ZD48dGQgY2xhc3M9XCJzaGExXCI+JGNveydpZCd9PC90ZD48L3RyPlxuIjsKKwlwcmludCAiPHRyPiIgLgorCSAgICAgICI8dGQ+dHJlZTwvdGQ+IiAuCisJICAgICAgIjx0ZCBjbGFzcz1cInNoYTFcIj4iIC4KKwkgICAgICAkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InRyZWUiLCBoYXNoPT4kY297J3RyZWUnfSwgaGFzaF9iYXNlPT4kaGFzaCksCisJICAgICAgICAgICAgICAgY2xhc3MgPT4gImxpc3QifSwgJGNveyd0cmVlJ30pIC4KKwkgICAgICAiPC90ZD4iIC4KKwkgICAgICAiPHRkIGNsYXNzPVwibGlua1wiPiIgLgorCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4idHJlZSIsIGhhc2g9PiRjb3sndHJlZSd9LCBoYXNoX2Jhc2U9PiRoYXNoKX0sCisJICAgICAgICAgICAgICAidHJlZSIpOworCW15ICRzbmFwc2hvdF9saW5rcyA9IGZvcm1hdF9zbmFwc2hvdF9saW5rcygkaGFzaCk7CisJaWYgKGRlZmluZWQgJHNuYXBzaG90X2xpbmtzKSB7CisJCXByaW50ICIgfCAiIC4gJHNuYXBzaG90X2xpbmtzOworCX0KKwlwcmludCAiPC90ZD4iIC4KKwkgICAgICAiPC90cj5cbiI7CisKKwlmb3JlYWNoIG15ICRwYXIgKEAkcGFyZW50cykgeworCQlwcmludCAiPHRyPiIgLgorCQkgICAgICAiPHRkPnBhcmVudDwvdGQ+IiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJzaGExXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JHBhciksCisJCSAgICAgICAgICAgICAgIGNsYXNzID0+ICJsaXN0In0sICRwYXIpIC4KKwkJICAgICAgIjwvdGQ+IiAuCisJCSAgICAgICI8dGQgY2xhc3M9XCJsaW5rXCI+IiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0IiwgaGFzaD0+JHBhcil9LCAiY29tbWl0IikgLgorCQkgICAgICAiIHwgIiAuCisJCSAgICAgICRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iY29tbWl0ZGlmZiIsIGhhc2g9PiRoYXNoLCBoYXNoX3BhcmVudD0+JHBhcil9LCAiZGlmZiIpIC4KKwkJICAgICAgIjwvdGQ+IiAuCisJCSAgICAgICI8L3RyPlxuIjsKKwl9CisJcHJpbnQgIjwvdGFibGU+Ii4KKwkgICAgICAiPC9kaXY+XG4iOworCisJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2JvZHlcIj5cbiI7CisJZ2l0X3ByaW50X2xvZygkY297J2NvbW1lbnQnfSk7CisJcHJpbnQgIjwvZGl2PlxuIjsKKworCWdpdF9kaWZmdHJlZV9ib2R5KFxAZGlmZnRyZWUsICRoYXNoLCBAJHBhcmVudHMpOworCisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfb2JqZWN0IHsKKwkjIG9iamVjdCBpcyBkZWZpbmVkIGJ5OgorCSMgLSBoYXNoIG9yIGhhc2hfYmFzZSBhbG9uZQorCSMgLSBoYXNoX2Jhc2UgYW5kIGZpbGVfbmFtZQorCW15ICR0eXBlOworCisJIyAtIGhhc2ggb3IgaGFzaF9iYXNlIGFsb25lCisJaWYgKCRoYXNoIHx8ICgkaGFzaF9iYXNlICYmICFkZWZpbmVkICRmaWxlX25hbWUpKSB7CisJCW15ICRvYmplY3RfaWQgPSAkaGFzaCB8fCAkaGFzaF9iYXNlOworCisJCW9wZW4gbXkgJGZkLCAiLXwiLCBxdW90ZV9jb21tYW5kKAorCQkJZ2l0X2NtZCgpLCAnY2F0LWZpbGUnLCAnLXQnLCAkb2JqZWN0X2lkKSAuICcgMj4gL2Rldi9udWxsJworCQkJb3IgZGllX2Vycm9yKDQwNCwgIk9iamVjdCBkb2VzIG5vdCBleGlzdCIpOworCQkkdHlwZSA9IDwkZmQ+OworCQljaG9tcCAkdHlwZTsKKwkJY2xvc2UgJGZkCisJCQlvciBkaWVfZXJyb3IoNDA0LCAiT2JqZWN0IGRvZXMgbm90IGV4aXN0Iik7CisKKwkjIC0gaGFzaF9iYXNlIGFuZCBmaWxlX25hbWUKKwl9IGVsc2lmICgkaGFzaF9iYXNlICYmIGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkkZmlsZV9uYW1lID1+IHMsLyskLCw7CisKKwkJc3lzdGVtKGdpdF9jbWQoKSwgImNhdC1maWxlIiwgJy1lJywgJGhhc2hfYmFzZSkgPT0gMAorCQkJb3IgZGllX2Vycm9yKDQwNCwgIkJhc2Ugb2JqZWN0IGRvZXMgbm90IGV4aXN0Iik7CisKKwkJIyBoZXJlIGVycm9ycyBzaG91bGQgbm90IGhhcHBlbgorCQlvcGVuIG15ICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAibHMtdHJlZSIsICRoYXNoX2Jhc2UsICItLSIsICRmaWxlX25hbWUKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1scy10cmVlIGZhaWxlZCIpOworCQlteSAkbGluZSA9IDwkZmQ+OworCQljbG9zZSAkZmQ7CisKKwkJIycxMDA2NDQgYmxvYiAwZmEzZjNhNjZmYjZhMTM3ZjZlYzJjMTkzNTFlZDRkODA3MDcwZmZhCXBhbmljLmMnCisJCXVubGVzcyAoJGxpbmUgJiYgJGxpbmUgPX4gbS9eKFswLTldKykgKC4rKSAoWzAtOWEtZkEtRl17NDB9KVx0LykgeworCQkJZGllX2Vycm9yKDQwNCwgIkZpbGUgb3IgZGlyZWN0b3J5IGZvciBnaXZlbiBiYXNlIGRvZXMgbm90IGV4aXN0Iik7CisJCX0KKwkJJHR5cGUgPSAkMjsKKwkJJGhhc2ggPSAkMzsKKwl9IGVsc2UgeworCQlkaWVfZXJyb3IoNDAwLCAiTm90IGVub3VnaCBpbmZvcm1hdGlvbiB0byBmaW5kIG9iamVjdCIpOworCX0KKworCXByaW50ICRjZ2ktPnJlZGlyZWN0KC11cmkgPT4gaHJlZihhY3Rpb249PiR0eXBlLCAtZnVsbD0+MSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaD0+JGhhc2gsIGhhc2hfYmFzZT0+JGhhc2hfYmFzZSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKSwKKwkgICAgICAgICAgICAgICAgICAgICAtc3RhdHVzID0+ICczMDIgRm91bmQnKTsKK30KKworc3ViIGdpdF9ibG9iZGlmZiB7CisJbXkgJGZvcm1hdCA9IHNoaWZ0IHx8ICdodG1sJzsKKwlteSAkZGlmZl9zdHlsZSA9ICRpbnB1dF9wYXJhbXN7J2RpZmZfc3R5bGUnfSB8fCAnaW5saW5lJzsKKworCW15ICRmZDsKKwlteSBAZGlmZnRyZWU7CisJbXkgJWRpZmZpbmZvOworCW15ICRleHBpcmVzOworCisJIyBwcmVwYXJpbmcgJGZkIGFuZCAlZGlmZmluZm8gZm9yIGdpdF9wYXRjaHNldF9ib2R5CisJIyBuZXcgc3R5bGUgVVJJCisJaWYgKGRlZmluZWQgJGhhc2hfYmFzZSAmJiBkZWZpbmVkICRoYXNoX3BhcmVudF9iYXNlKSB7CisJCWlmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJCSMgcmVhZCByYXcgb3V0cHV0CisJCQlvcGVuICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiZGlmZi10cmVlIiwgJy1yJywgQGRpZmZfb3B0cywKKwkJCQkkaGFzaF9wYXJlbnRfYmFzZSwgJGhhc2hfYmFzZSwKKwkJCQkiLS0iLCAoZGVmaW5lZCAkZmlsZV9wYXJlbnQgPyAkZmlsZV9wYXJlbnQgOiAoKSksICRmaWxlX25hbWUKKwkJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCQkJQGRpZmZ0cmVlID0gbWFwIHsgY2hvbXA7ICRfIH0gPCRmZD47CisJCQljbG9zZSAkZmQKKwkJCQlvciBkaWVfZXJyb3IoNDA0LCAiUmVhZGluZyBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCQkJQGRpZmZ0cmVlCisJCQkJb3IgZGllX2Vycm9yKDQwNCwgIkJsb2IgZGlmZiBub3QgZm91bmQiKTsKKworCQl9IGVsc2lmIChkZWZpbmVkICRoYXNoICYmCisJCSAgICAgICAgICRoYXNoID1+IC9bMC05YS1mQS1GXXs0MH0vKSB7CisJCQkjIHRyeSB0byBmaW5kIGZpbGVuYW1lIGZyb20gJGhhc2gKKworCQkJIyByZWFkIGZpbHRlcmVkIHJhdyBvdXRwdXQKKwkJCW9wZW4gJGZkLCAiLXwiLCBnaXRfY21kKCksICJkaWZmLXRyZWUiLCAnLXInLCBAZGlmZl9vcHRzLAorCQkJCSRoYXNoX3BhcmVudF9iYXNlLCAkaGFzaF9iYXNlLCAiLS0iCisJCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWRpZmYtdHJlZSBmYWlsZWQiKTsKKwkJCUBkaWZmdHJlZSA9CisJCQkJIyAnOjEwMDY0NCAxMDA2NDQgMDNiMjE4MjYuLi4gM2I5M2Q1ZTcuLi4gTQlscy1maWxlcy5jJworCQkJCSMgJGhhc2ggPT0gdG9faWQKKwkJCQlncmVwIHsgL146WzAtN117Nn0gWzAtN117Nn0gWzAtOWEtZkEtRl17NDB9ICRoYXNoLyB9CisJCQkJbWFwIHsgY2hvbXA7ICRfIH0gPCRmZD47CisJCQljbG9zZSAkZmQKKwkJCQlvciBkaWVfZXJyb3IoNDA0LCAiUmVhZGluZyBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCQkJQGRpZmZ0cmVlCisJCQkJb3IgZGllX2Vycm9yKDQwNCwgIkJsb2IgZGlmZiBub3QgZm91bmQiKTsKKworCQl9IGVsc2UgeworCQkJZGllX2Vycm9yKDQwMCwgIk1pc3Npbmcgb25lIG9mIHRoZSBibG9iIGRpZmYgcGFyYW1ldGVycyIpOworCQl9CisKKwkJaWYgKEBkaWZmdHJlZSA+IDEpIHsKKwkJCWRpZV9lcnJvcig0MDAsICJBbWJpZ3VvdXMgYmxvYiBkaWZmIHNwZWNpZmljYXRpb24iKTsKKwkJfQorCisJCSVkaWZmaW5mbyA9IHBhcnNlX2RpZmZ0cmVlX3Jhd19saW5lKCRkaWZmdHJlZVswXSk7CisJCSRmaWxlX3BhcmVudCB8fD0gJGRpZmZpbmZveydmcm9tX2ZpbGUnfSB8fCAkZmlsZV9uYW1lOworCQkkZmlsZV9uYW1lICAgfHw9ICRkaWZmaW5mb3sndG9fZmlsZSd9OworCisJCSRoYXNoX3BhcmVudCB8fD0gJGRpZmZpbmZveydmcm9tX2lkJ307CisJCSRoYXNoICAgICAgICB8fD0gJGRpZmZpbmZveyd0b19pZCd9OworCisJCSMgbm9uLXRleHR1YWwgaGFzaCBpZCdzIGNhbiBiZSBjYWNoZWQKKwkJaWYgKCRoYXNoX2Jhc2UgPX4gbS9eWzAtOWEtZkEtRl17NDB9JC8gJiYKKwkJICAgICRoYXNoX3BhcmVudF9iYXNlID1+IG0vXlswLTlhLWZBLUZdezQwfSQvKSB7CisJCQkkZXhwaXJlcyA9ICcrMWQnOworCQl9CisKKwkJIyBvcGVuIHBhdGNoIG91dHB1dAorCQlvcGVuICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiZGlmZi10cmVlIiwgJy1yJywgQGRpZmZfb3B0cywKKwkJCSctcCcsICgkZm9ybWF0IGVxICdodG1sJyA/ICItLWZ1bGwtaW5kZXgiIDogKCkpLAorCQkJJGhhc2hfcGFyZW50X2Jhc2UsICRoYXNoX2Jhc2UsCisJCQkiLS0iLCAoZGVmaW5lZCAkZmlsZV9wYXJlbnQgPyAkZmlsZV9wYXJlbnQgOiAoKSksICRmaWxlX25hbWUKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1kaWZmLXRyZWUgZmFpbGVkIik7CisJfQorCisJIyBvbGQvbGVnYWN5IHN0eWxlIFVSSSAtLSBub3QgZ2VuZXJhdGVkIGFueW1vcmUgc2luY2UgMS40LjMuCisJaWYgKCElZGlmZmluZm8pIHsKKwkJZGllX2Vycm9yKCc0MDQgTm90IEZvdW5kJywgIk1pc3Npbmcgb25lIG9mIHRoZSBibG9iIGRpZmYgcGFyYW1ldGVycyIpCisJfQorCisJIyBoZWFkZXIKKwlpZiAoJGZvcm1hdCBlcSAnaHRtbCcpIHsKKwkJbXkgJGZvcm1hdHNfbmF2ID0KKwkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoYWN0aW9uPT4iYmxvYmRpZmZfcGxhaW4iLCAtcmVwbGF5PT4xKX0sCisJCQkgICAgICAgICJyYXciKTsKKwkJJGZvcm1hdHNfbmF2IC49IGRpZmZfc3R5bGVfbmF2KCRkaWZmX3N0eWxlKTsKKwkJZ2l0X2hlYWRlcl9odG1sKHVuZGVmLCAkZXhwaXJlcyk7CisJCWlmIChkZWZpbmVkICRoYXNoX2Jhc2UgJiYgKG15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGFzaF9iYXNlKSkpIHsKKwkJCWdpdF9wcmludF9wYWdlX25hdignJywnJywgJGhhc2hfYmFzZSwkY297J3RyZWUnfSwkaGFzaF9iYXNlLCAkZm9ybWF0c19uYXYpOworCQkJZ2l0X3ByaW50X2hlYWRlcl9kaXYoJ2NvbW1pdCcsIGVzY19odG1sKCRjb3sndGl0bGUnfSksICRoYXNoX2Jhc2UpOworCQl9IGVsc2UgeworCQkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX25hdlwiPjxici8+JGZvcm1hdHNfbmF2PGJyLz48L2Rpdj5cbiI7CisJCQlwcmludCAiPGRpdiBjbGFzcz1cInRpdGxlXCI+Ii5lc2NfaHRtbCgiJGhhc2ggdnMgJGhhc2hfcGFyZW50IikuIjwvZGl2PlxuIjsKKwkJfQorCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCQlnaXRfcHJpbnRfcGFnZV9wYXRoKCRmaWxlX25hbWUsICJibG9iIiwgJGhhc2hfYmFzZSk7CisJCX0gZWxzZSB7CisJCQlwcmludCAiPGRpdiBjbGFzcz1cInBhZ2VfcGF0aFwiPjwvZGl2PlxuIjsKKwkJfQorCisJfSBlbHNpZiAoJGZvcm1hdCBlcSAncGxhaW4nKSB7CisJCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJCS10eXBlID0+ICd0ZXh0L3BsYWluJywKKwkJCS1jaGFyc2V0ID0+ICd1dGYtOCcsCisJCQktZXhwaXJlcyA9PiAkZXhwaXJlcywKKwkJCS1jb250ZW50X2Rpc3Bvc2l0aW9uID0+ICdpbmxpbmU7IGZpbGVuYW1lPSInIC4gIiRmaWxlX25hbWUiIC4gJy5wYXRjaCInKTsKKworCQlwcmludCAiWC1HaXQtVXJsOiAiIC4gJGNnaS0+c2VsZl91cmwoKSAuICJcblxuIjsKKworCX0gZWxzZSB7CisJCWRpZV9lcnJvcig0MDAsICJVbmtub3duIGJsb2JkaWZmIGZvcm1hdCIpOworCX0KKworCSMgcGF0Y2gKKwlpZiAoJGZvcm1hdCBlcSAnaHRtbCcpIHsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJwYWdlX2JvZHlcIj5cbiI7CisKKwkJZ2l0X3BhdGNoc2V0X2JvZHkoJGZkLCAkZGlmZl9zdHlsZSwKKwkJICAgICAgICAgICAgICAgICAgWyBcJWRpZmZpbmZvIF0sICRoYXNoX2Jhc2UsICRoYXNoX3BhcmVudF9iYXNlKTsKKwkJY2xvc2UgJGZkOworCisJCXByaW50ICI8L2Rpdj5cbiI7ICMgY2xhc3M9InBhZ2VfYm9keSIKKwkJZ2l0X2Zvb3Rlcl9odG1sKCk7CisKKwl9IGVsc2UgeworCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJJGxpbmUgPX4gcyFhLygkaGFzaHwkaGFzaF9wYXJlbnQpISdhLycuZXNjX3BhdGgoJGRpZmZpbmZveydmcm9tX2ZpbGUnfSkhZWc7CisJCQkkbGluZSA9fiBzIWIvKCRoYXNofCRoYXNoX3BhcmVudCkhJ2IvJy5lc2NfcGF0aCgkZGlmZmluZm97J3RvX2ZpbGUnfSkhZWc7CisKKwkJCXByaW50ICRsaW5lOworCisJCQlsYXN0IGlmICRsaW5lID1+IG0hXlwrXCtcKyE7CisJCX0KKwkJbG9jYWwgJC8gPSB1bmRlZjsKKwkJcHJpbnQgPCRmZD47CisJCWNsb3NlICRmZDsKKwl9Cit9CisKK3N1YiBnaXRfYmxvYmRpZmZfcGxhaW4geworCWdpdF9ibG9iZGlmZigncGxhaW4nKTsKK30KKworIyBhc3N1bWVzIHRoYXQgaXQgaXMgYWRkZWQgYXMgbGF0ZXIgcGFydCBvZiBhbHJlYWR5IGV4aXN0aW5nIG5hdmlnYXRpb24sCisjIHNvIGl0IHJldHVybnMgInwgZm9vIHwgYmFyIiByYXRoZXIgdGhhbiBqdXN0ICJmb28gfCBiYXIiCitzdWIgZGlmZl9zdHlsZV9uYXYgeworCW15ICgkZGlmZl9zdHlsZSwgJGlzX2NvbWJpbmVkKSA9IEBfOworCSRkaWZmX3N0eWxlIHx8PSAnaW5saW5lJzsKKworCXJldHVybiAiIiBpZiAoJGlzX2NvbWJpbmVkKTsKKworCW15IEBzdHlsZXMgPSAoaW5saW5lID0+ICdpbmxpbmUnLCAnc2lkZWJ5c2lkZScgPT4gJ3NpZGUgYnkgc2lkZScpOworCW15ICVzdHlsZXMgPSBAc3R5bGVzOworCUBzdHlsZXMgPQorCQlAc3R5bGVzWyBtYXAgeyAkXyAqIDIgfSAwLi4kI3N0eWxlcy8yIF07CisKKwlyZXR1cm4gam9pbiAnJywKKwkJbWFwIHsgIiB8ICIuJF8gfQorCQltYXAgeworCQkJJF8gZXEgJGRpZmZfc3R5bGUgPyAkc3R5bGVzeyRffSA6CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsIGRpZmZfc3R5bGUgPT4gJF8pfSwgJHN0eWxlc3skX30pCisJCX0gQHN0eWxlczsKK30KKworc3ViIGdpdF9jb21taXRkaWZmIHsKKwlteSAlcGFyYW1zID0gQF87CisJbXkgJGZvcm1hdCA9ICRwYXJhbXN7LWZvcm1hdH0gfHwgJ2h0bWwnOworCW15ICRkaWZmX3N0eWxlID0gJGlucHV0X3BhcmFtc3snZGlmZl9zdHlsZSd9IHx8ICdpbmxpbmUnOworCisJbXkgKCRwYXRjaF9tYXgpID0gZ2l0d2ViX2dldF9mZWF0dXJlKCdwYXRjaGVzJyk7CisJaWYgKCRmb3JtYXQgZXEgJ3BhdGNoJykgeworCQlkaWVfZXJyb3IoNDAzLCAiUGF0Y2ggdmlldyBub3QgYWxsb3dlZCIpIHVubGVzcyAkcGF0Y2hfbWF4OworCX0KKworCSRoYXNoIHx8PSAkaGFzaF9iYXNlIHx8ICJIRUFEIjsKKwlteSAlY28gPSBwYXJzZV9jb21taXQoJGhhc2gpCisJICAgIG9yIGRpZV9lcnJvcig0MDQsICJVbmtub3duIGNvbW1pdCBvYmplY3QiKTsKKworCSMgY2hvb3NlIGZvcm1hdCBmb3IgY29tbWl0ZGlmZiBmb3IgbWVyZ2UKKwlpZiAoISBkZWZpbmVkICRoYXNoX3BhcmVudCAmJiBAeyRjb3sncGFyZW50cyd9fSA+IDEpIHsKKwkJJGhhc2hfcGFyZW50ID0gJy0tY2MnOworCX0KKwkjIHdlIG5lZWQgdG8gcHJlcGFyZSAkZm9ybWF0c19uYXYgYmVmb3JlIGFsbW9zdCBhbnkgcGFyYW1ldGVyIG11bmdpbmcKKwlteSAkZm9ybWF0c19uYXY7CisJaWYgKCRmb3JtYXQgZXEgJ2h0bWwnKSB7CisJCSRmb3JtYXRzX25hdiA9CisJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+ImNvbW1pdGRpZmZfcGxhaW4iLCAtcmVwbGF5PT4xKX0sCisJCQkgICAgICAgICJyYXciKTsKKwkJaWYgKCRwYXRjaF9tYXggJiYgQHskY297J3BhcmVudHMnfX0gPD0gMSkgeworCQkJJGZvcm1hdHNfbmF2IC49ICIgfCAiIC4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKGFjdGlvbj0+InBhdGNoIiwgLXJlcGxheT0+MSl9LAorCQkJCQkicGF0Y2giKTsKKwkJfQorCQkkZm9ybWF0c19uYXYgLj0gZGlmZl9zdHlsZV9uYXYoJGRpZmZfc3R5bGUsIEB7JGNveydwYXJlbnRzJ319ID4gMSk7CisKKwkJaWYgKGRlZmluZWQgJGhhc2hfcGFyZW50ICYmCisJCSAgICAkaGFzaF9wYXJlbnQgbmUgJy1jJyAmJiAkaGFzaF9wYXJlbnQgbmUgJy0tY2MnKSB7CisJCQkjIGNvbW1pdGRpZmYgd2l0aCB0d28gY29tbWl0cyBnaXZlbgorCQkJbXkgJGhhc2hfcGFyZW50X3Nob3J0ID0gJGhhc2hfcGFyZW50OworCQkJaWYgKCRoYXNoX3BhcmVudCA9fiBtL15bMC05YS1mQS1GXXs0MH0kLykgeworCQkJCSRoYXNoX3BhcmVudF9zaG9ydCA9IHN1YnN0cigkaGFzaF9wYXJlbnQsIDAsIDcpOworCQkJfQorCQkJJGZvcm1hdHNfbmF2IC49CisJCQkJJyAoZnJvbSc7CisJCQlmb3IgKG15ICRpID0gMDsgJGkgPCBAeyRjb3sncGFyZW50cyd9fTsgJGkrKykgeworCQkJCWlmICgkY297J3BhcmVudHMnfVskaV0gZXEgJGhhc2hfcGFyZW50KSB7CisJCQkJCSRmb3JtYXRzX25hdiAuPSAnIHBhcmVudCAnIC4gKCRpKzEpOworCQkJCQlsYXN0OworCQkJCX0KKwkJCX0KKwkJCSRmb3JtYXRzX25hdiAuPSAnOiAnIC4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kaGFzaF9wYXJlbnQsIGhhc2hfYmFzZT0+dW5kZWYpfSwKKwkJCQkgICAgICAgIGVzY19odG1sKCRoYXNoX3BhcmVudF9zaG9ydCkpIC4KKwkJCQknKSc7CisJCX0gZWxzaWYgKCEkY297J3BhcmVudCd9KSB7CisJCQkjIC0tcm9vdCBjb21taXRkaWZmCisJCQkkZm9ybWF0c19uYXYgLj0gJyAoaW5pdGlhbCknOworCQl9IGVsc2lmIChzY2FsYXIgQHskY297J3BhcmVudHMnfX0gPT0gMSkgeworCQkJIyBzaW5nbGUgcGFyZW50IGNvbW1pdAorCQkJJGZvcm1hdHNfbmF2IC49CisJCQkJJyAocGFyZW50OiAnIC4KKwkJCQkkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1yZXBsYXk9PjEsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kY297J3BhcmVudCd9LCBoYXNoX2Jhc2U9PnVuZGVmKX0sCisJCQkJICAgICAgICBlc2NfaHRtbChzdWJzdHIoJGNveydwYXJlbnQnfSwgMCwgNykpKSAuCisJCQkJJyknOworCQl9IGVsc2UgeworCQkJIyBtZXJnZSBjb21taXQKKwkJCWlmICgkaGFzaF9wYXJlbnQgZXEgJy0tY2MnKSB7CisJCQkJJGZvcm1hdHNfbmF2IC49ICcgfCAnIC4KKwkJCQkJJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtcmVwbGF5PT4xLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgIGhhc2g9PiRoYXNoLCBoYXNoX3BhcmVudD0+Jy1jJyl9LAorCQkJCQkgICAgICAgICdjb21iaW5lZCcpOworCQkJfSBlbHNlIHsgIyAkaGFzaF9wYXJlbnQgZXEgJy1jJworCQkJCSRmb3JtYXRzX25hdiAuPSAnIHwgJyAuCisJCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kaGFzaCwgaGFzaF9wYXJlbnQ9PictLWNjJyl9LAorCQkJCQkgICAgICAgICdjb21wYWN0Jyk7CisJCQl9CisJCQkkZm9ybWF0c19uYXYgLj0KKwkJCQknIChtZXJnZTogJyAuCisJCQkJam9pbignICcsIG1hcCB7CisJCQkJCSRjZ2ktPmEoey1ocmVmID0+IGhyZWYoLXJlcGxheT0+MSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kXywgaGFzaF9iYXNlPT51bmRlZil9LAorCQkJCQkgICAgICAgIGVzY19odG1sKHN1YnN0cigkXywgMCwgNykpKTsKKwkJCQl9IEB7JGNveydwYXJlbnRzJ319ICkgLgorCQkJCScpJzsKKwkJfQorCX0KKworCW15ICRoYXNoX3BhcmVudF9wYXJhbSA9ICRoYXNoX3BhcmVudDsKKwlpZiAoIWRlZmluZWQgJGhhc2hfcGFyZW50X3BhcmFtKSB7CisJCSMgLS1jYyBmb3IgbXVsdGlwbGUgcGFyZW50cywgLS1yb290IGZvciBwYXJlbnRsZXNzCisJCSRoYXNoX3BhcmVudF9wYXJhbSA9CisJCQlAeyRjb3sncGFyZW50cyd9fSA+IDEgPyAnLS1jYycgOiAkY297J3BhcmVudCd9IHx8ICctLXJvb3QnOworCX0KKworCSMgcmVhZCBjb21taXRkaWZmCisJbXkgJGZkOworCW15IEBkaWZmdHJlZTsKKwlpZiAoJGZvcm1hdCBlcSAnaHRtbCcpIHsKKwkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgImRpZmYtdHJlZSIsICctcicsIEBkaWZmX29wdHMsCisJCQkiLS1uby1jb21taXQtaWQiLCAiLS1wYXRjaC13aXRoLXJhdyIsICItLWZ1bGwtaW5kZXgiLAorCQkJJGhhc2hfcGFyZW50X3BhcmFtLCAkaGFzaCwgIi0tIgorCQkJb3IgZGllX2Vycm9yKDUwMCwgIk9wZW4gZ2l0LWRpZmYtdHJlZSBmYWlsZWQiKTsKKworCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZkPikgeworCQkJY2hvbXAgJGxpbmU7CisJCQkjIGVtcHR5IGxpbmUgZW5kcyByYXcgcGFydCBvZiBkaWZmLXRyZWUgb3V0cHV0CisJCQlsYXN0IHVubGVzcyAkbGluZTsKKwkJCXB1c2ggQGRpZmZ0cmVlLCBzY2FsYXIgcGFyc2VfZGlmZnRyZWVfcmF3X2xpbmUoJGxpbmUpOworCQl9CisKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdwbGFpbicpIHsKKwkJb3BlbiAkZmQsICItfCIsIGdpdF9jbWQoKSwgImRpZmYtdHJlZSIsICctcicsIEBkaWZmX29wdHMsCisJCQknLXAnLCAkaGFzaF9wYXJlbnRfcGFyYW0sICRoYXNoLCAiLS0iCisJCQlvciBkaWVfZXJyb3IoNTAwLCAiT3BlbiBnaXQtZGlmZi10cmVlIGZhaWxlZCIpOworCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ3BhdGNoJykgeworCQkjIEZvciBjb21taXQgcmFuZ2VzLCB3ZSBsaW1pdCB0aGUgb3V0cHV0IHRvIHRoZSBudW1iZXIgb2YKKwkJIyBwYXRjaGVzIHNwZWNpZmllZCBpbiB0aGUgJ3BhdGNoZXMnIGZlYXR1cmUuCisJCSMgRm9yIHNpbmdsZSBjb21taXRzLCB3ZSBsaW1pdCB0aGUgb3V0cHV0IHRvIGEgc2luZ2xlIHBhdGNoLAorCQkjIGRpdmVyZ2luZyBmcm9tIHRoZSBnaXQtZm9ybWF0LXBhdGNoIGRlZmF1bHQuCisJCW15IEBjb21taXRfc3BlYyA9ICgpOworCQlpZiAoJGhhc2hfcGFyZW50KSB7CisJCQlpZiAoJHBhdGNoX21heCA+IDApIHsKKwkJCQlwdXNoIEBjb21taXRfc3BlYywgIi0kcGF0Y2hfbWF4IjsKKwkJCX0KKwkJCXB1c2ggQGNvbW1pdF9zcGVjLCAnLW4nLCAiJGhhc2hfcGFyZW50Li4kaGFzaCI7CisJCX0gZWxzZSB7CisJCQlpZiAoJHBhcmFtc3stc2luZ2xlfSkgeworCQkJCXB1c2ggQGNvbW1pdF9zcGVjLCAnLTEnOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoJHBhdGNoX21heCA+IDApIHsKKwkJCQkJcHVzaCBAY29tbWl0X3NwZWMsICItJHBhdGNoX21heCI7CisJCQkJfQorCQkJCXB1c2ggQGNvbW1pdF9zcGVjLCAiLW4iOworCQkJfQorCQkJcHVzaCBAY29tbWl0X3NwZWMsICctLXJvb3QnLCAkaGFzaDsKKwkJfQorCQlvcGVuICRmZCwgIi18IiwgZ2l0X2NtZCgpLCAiZm9ybWF0LXBhdGNoIiwgQGRpZmZfb3B0cywKKwkJCSctLWVuY29kaW5nPXV0ZjgnLCAnLS1zdGRvdXQnLCBAY29tbWl0X3NwZWMKKwkJCW9yIGRpZV9lcnJvcig1MDAsICJPcGVuIGdpdC1mb3JtYXQtcGF0Y2ggZmFpbGVkIik7CisJfSBlbHNlIHsKKwkJZGllX2Vycm9yKDQwMCwgIlVua25vd24gY29tbWl0ZGlmZiBmb3JtYXQiKTsKKwl9CisKKwkjIG5vbi10ZXh0dWFsIGhhc2ggaWQncyBjYW4gYmUgY2FjaGVkCisJbXkgJGV4cGlyZXM7CisJaWYgKCRoYXNoID1+IG0vXlswLTlhLWZBLUZdezQwfSQvKSB7CisJCSRleHBpcmVzID0gIisxZCI7CisJfQorCisJIyB3cml0ZSBjb21taXQgbWVzc2FnZQorCWlmICgkZm9ybWF0IGVxICdodG1sJykgeworCQlteSAkcmVmcyA9IGdpdF9nZXRfcmVmZXJlbmNlcygpOworCQlteSAkcmVmID0gZm9ybWF0X3JlZl9tYXJrZXIoJHJlZnMsICRjb3snaWQnfSk7CisKKwkJZ2l0X2hlYWRlcl9odG1sKHVuZGVmLCAkZXhwaXJlcyk7CisJCWdpdF9wcmludF9wYWdlX25hdignY29tbWl0ZGlmZicsJycsICRoYXNoLCRjb3sndHJlZSd9LCRoYXNoLCAkZm9ybWF0c19uYXYpOworCQlnaXRfcHJpbnRfaGVhZGVyX2RpdignY29tbWl0JywgZXNjX2h0bWwoJGNveyd0aXRsZSd9KSAuICRyZWYsICRoYXNoKTsKKwkJcHJpbnQgIjxkaXYgY2xhc3M9XCJ0aXRsZV90ZXh0XCI+XG4iIC4KKwkJICAgICAgIjx0YWJsZSBjbGFzcz1cIm9iamVjdF9oZWFkZXJcIj5cbiI7CisJCWdpdF9wcmludF9hdXRob3JzaGlwX3Jvd3MoXCVjbyk7CisJCXByaW50ICI8L3RhYmxlPiIuCisJCSAgICAgICI8L2Rpdj5cbiI7CisJCXByaW50ICI8ZGl2IGNsYXNzPVwicGFnZV9ib2R5XCI+XG4iOworCQlpZiAoQHskY297J2NvbW1lbnQnfX0gPiAxKSB7CisJCQlwcmludCAiPGRpdiBjbGFzcz1cImxvZ1wiPlxuIjsKKwkJCWdpdF9wcmludF9sb2coJGNveydjb21tZW50J30sIC1maW5hbF9lbXB0eV9saW5lPT4gMSwgLXJlbW92ZV90aXRsZSA9PiAxKTsKKwkJCXByaW50ICI8L2Rpdj5cbiI7ICMgY2xhc3M9ImxvZyIKKwkJfQorCisJfSBlbHNpZiAoJGZvcm1hdCBlcSAncGxhaW4nKSB7CisJCW15ICRyZWZzID0gZ2l0X2dldF9yZWZlcmVuY2VzKCJ0YWdzIik7CisJCW15ICR0YWduYW1lID0gZ2l0X2dldF9yZXZfbmFtZV90YWdzKCRoYXNoKTsKKwkJbXkgJGZpbGVuYW1lID0gYmFzZW5hbWUoJHByb2plY3QpIC4gIi0kaGFzaC5wYXRjaCI7CisKKwkJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQkJLXR5cGUgPT4gJ3RleHQvcGxhaW4nLAorCQkJLWNoYXJzZXQgPT4gJ3V0Zi04JywKKwkJCS1leHBpcmVzID0+ICRleHBpcmVzLAorCQkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4gJ2lubGluZTsgZmlsZW5hbWU9IicgLiAiJGZpbGVuYW1lIiAuICciJyk7CisJCW15ICVhZCA9IHBhcnNlX2RhdGUoJGNveydhdXRob3JfZXBvY2gnfSwgJGNveydhdXRob3JfdHonfSk7CisJCXByaW50ICJGcm9tOiAiIC4gdG9fdXRmOCgkY297J2F1dGhvcid9KSAuICJcbiI7CisJCXByaW50ICJEYXRlOiAkYWR7J3JmYzI4MjInfSAoJGFkeyd0el9sb2NhbCd9KVxuIjsKKwkJcHJpbnQgIlN1YmplY3Q6ICIgLiB0b191dGY4KCRjb3sndGl0bGUnfSkgLiAiXG4iOworCisJCXByaW50ICJYLUdpdC1UYWc6ICR0YWduYW1lXG4iIGlmICR0YWduYW1lOworCQlwcmludCAiWC1HaXQtVXJsOiAiIC4gJGNnaS0+c2VsZl91cmwoKSAuICJcblxuIjsKKworCQlmb3JlYWNoIG15ICRsaW5lIChAeyRjb3snY29tbWVudCd9fSkgeworCQkJcHJpbnQgdG9fdXRmOCgkbGluZSkgLiAiXG4iOworCQl9CisJCXByaW50ICItLS1cblxuIjsKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdwYXRjaCcpIHsKKwkJbXkgJGZpbGVuYW1lID0gYmFzZW5hbWUoJHByb2plY3QpIC4gIi0kaGFzaC5wYXRjaCI7CisKKwkJcHJpbnQgJGNnaS0+aGVhZGVyKAorCQkJLXR5cGUgPT4gJ3RleHQvcGxhaW4nLAorCQkJLWNoYXJzZXQgPT4gJ3V0Zi04JywKKwkJCS1leHBpcmVzID0+ICRleHBpcmVzLAorCQkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4gJ2lubGluZTsgZmlsZW5hbWU9IicgLiAiJGZpbGVuYW1lIiAuICciJyk7CisJfQorCisJIyB3cml0ZSBwYXRjaAorCWlmICgkZm9ybWF0IGVxICdodG1sJykgeworCQlteSAkdXNlX3BhcmVudHMgPSAhZGVmaW5lZCAkaGFzaF9wYXJlbnQgfHwKKwkJCSRoYXNoX3BhcmVudCBlcSAnLWMnIHx8ICRoYXNoX3BhcmVudCBlcSAnLS1jYyc7CisJCWdpdF9kaWZmdHJlZV9ib2R5KFxAZGlmZnRyZWUsICRoYXNoLAorCQkgICAgICAgICAgICAgICAgICAkdXNlX3BhcmVudHMgPyBAeyRjb3sncGFyZW50cyd9fSA6ICRoYXNoX3BhcmVudCk7CisJCXByaW50ICI8YnIvPlxuIjsKKworCQlnaXRfcGF0Y2hzZXRfYm9keSgkZmQsICRkaWZmX3N0eWxlLAorCQkgICAgICAgICAgICAgICAgICBcQGRpZmZ0cmVlLCAkaGFzaCwKKwkJICAgICAgICAgICAgICAgICAgJHVzZV9wYXJlbnRzID8gQHskY297J3BhcmVudHMnfX0gOiAkaGFzaF9wYXJlbnQpOworCQljbG9zZSAkZmQ7CisJCXByaW50ICI8L2Rpdj5cbiI7ICMgY2xhc3M9InBhZ2VfYm9keSIKKwkJZ2l0X2Zvb3Rlcl9odG1sKCk7CisKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdwbGFpbicpIHsKKwkJbG9jYWwgJC8gPSB1bmRlZjsKKwkJcHJpbnQgPCRmZD47CisJCWNsb3NlICRmZAorCQkJb3IgcHJpbnQgIlJlYWRpbmcgZ2l0LWRpZmYtdHJlZSBmYWlsZWRcbiI7CisJfSBlbHNpZiAoJGZvcm1hdCBlcSAncGF0Y2gnKSB7CisJCWxvY2FsICQvID0gdW5kZWY7CisJCXByaW50IDwkZmQ+OworCQljbG9zZSAkZmQKKwkJCW9yIHByaW50ICJSZWFkaW5nIGdpdC1mb3JtYXQtcGF0Y2ggZmFpbGVkXG4iOworCX0KK30KKworc3ViIGdpdF9jb21taXRkaWZmX3BsYWluIHsKKwlnaXRfY29tbWl0ZGlmZigtZm9ybWF0ID0+ICdwbGFpbicpOworfQorCisjIGZvcm1hdC1wYXRjaC1zdHlsZSBwYXRjaGVzCitzdWIgZ2l0X3BhdGNoIHsKKwlnaXRfY29tbWl0ZGlmZigtZm9ybWF0ID0+ICdwYXRjaCcsIC1zaW5nbGUgPT4gMSk7Cit9CisKK3N1YiBnaXRfcGF0Y2hlcyB7CisJZ2l0X2NvbW1pdGRpZmYoLWZvcm1hdCA9PiAncGF0Y2gnKTsKK30KKworc3ViIGdpdF9oaXN0b3J5IHsKKwlnaXRfbG9nX2dlbmVyaWMoJ2hpc3RvcnknLCBcJmdpdF9oaXN0b3J5X2JvZHksCisJICAgICAgICAgICAgICAgICRoYXNoX2Jhc2UsICRoYXNoX3BhcmVudF9iYXNlLAorCSAgICAgICAgICAgICAgICAkZmlsZV9uYW1lLCAkaGFzaCk7Cit9CisKK3N1YiBnaXRfc2VhcmNoIHsKKwkkc2VhcmNodHlwZSB8fD0gJ2NvbW1pdCc7CisKKwkjIGNoZWNrIGlmIGFwcHJvcHJpYXRlIGZlYXR1cmVzIGFyZSBlbmFibGVkCisJZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3NlYXJjaCcpCisJCW9yIGRpZV9lcnJvcig0MDMsICJTZWFyY2ggaXMgZGlzYWJsZWQiKTsKKwlpZiAoJHNlYXJjaHR5cGUgZXEgJ3BpY2theGUnKSB7CisJCSMgcGlja2F4ZSBtYXkgdGFrZSBhbGwgcmVzb3VyY2VzIG9mIHlvdXIgYm94IGFuZCBydW4gZm9yIHNldmVyYWwgbWludXRlcworCQkjIHdpdGggZXZlcnkgcXVlcnkgLSBzbyBkZWNpZGUgYnkgeW91cnNlbGYgaG93IHB1YmxpYyB5b3UgbWFrZSB0aGlzIGZlYXR1cmUKKwkJZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3BpY2theGUnKQorCQkJb3IgZGllX2Vycm9yKDQwMywgIlBpY2theGUgc2VhcmNoIGlzIGRpc2FibGVkIik7CisJfQorCWlmICgkc2VhcmNodHlwZSBlcSAnZ3JlcCcpIHsKKwkJIyBncmVwIHNlYXJjaCBtaWdodCBiZSBwb3RlbnRpYWxseSBDUFUtaW50ZW5zaXZlLCB0b28KKwkJZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2dyZXAnKQorCQkJb3IgZGllX2Vycm9yKDQwMywgIkdyZXAgc2VhcmNoIGlzIGRpc2FibGVkIik7CisJfQorCisJaWYgKCFkZWZpbmVkICRzZWFyY2h0ZXh0KSB7CisJCWRpZV9lcnJvcig0MDAsICJUZXh0IGZpZWxkIGlzIGVtcHR5Iik7CisJfQorCWlmICghZGVmaW5lZCAkaGFzaCkgeworCQkkaGFzaCA9IGdpdF9nZXRfaGVhZF9oYXNoKCRwcm9qZWN0KTsKKwl9CisJbXkgJWNvID0gcGFyc2VfY29tbWl0KCRoYXNoKTsKKwlpZiAoISVjbykgeworCQlkaWVfZXJyb3IoNDA0LCAiVW5rbm93biBjb21taXQgb2JqZWN0Iik7CisJfQorCWlmICghZGVmaW5lZCAkcGFnZSkgeworCQkkcGFnZSA9IDA7CisJfQorCisJaWYgKCRzZWFyY2h0eXBlIGVxICdjb21taXQnIHx8CisJICAgICRzZWFyY2h0eXBlIGVxICdhdXRob3InIHx8CisJICAgICRzZWFyY2h0eXBlIGVxICdjb21taXR0ZXInKSB7CisJCWdpdF9zZWFyY2hfbWVzc2FnZSglY28pOworCX0gZWxzaWYgKCRzZWFyY2h0eXBlIGVxICdwaWNrYXhlJykgeworCQlnaXRfc2VhcmNoX2NoYW5nZXMoJWNvKTsKKwl9IGVsc2lmICgkc2VhcmNodHlwZSBlcSAnZ3JlcCcpIHsKKwkJZ2l0X3NlYXJjaF9maWxlcyglY28pOworCX0gZWxzZSB7CisJCWRpZV9lcnJvcig0MDAsICJVbmtub3duIHNlYXJjaCB0eXBlIik7CisJfQorfQorCitzdWIgZ2l0X3NlYXJjaF9oZWxwIHsKKwlnaXRfaGVhZGVyX2h0bWwoKTsKKwlnaXRfcHJpbnRfcGFnZV9uYXYoJycsJycsICRoYXNoLCRoYXNoLCRoYXNoKTsKKwlwcmludCA8PEVPVDsKKzxwPjxzdHJvbmc+UGF0dGVybjwvc3Ryb25nPiBpcyBieSBkZWZhdWx0IGEgbm9ybWFsIHN0cmluZyB0aGF0IGlzIG1hdGNoZWQgcHJlY2lzZWx5IChidXQgd2l0aG91dAorcmVnYXJkIHRvIGNhc2UsIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBwaWNrYXhlKS4gSG93ZXZlciwgd2hlbiB5b3UgY2hlY2sgdGhlIDxlbT5yZTwvZW0+IGNoZWNrYm94LAordGhlIHBhdHRlcm4gZW50ZXJlZCBpcyByZWNvZ25pemVkIGFzIHRoZSBQT1NJWCBleHRlbmRlZAorPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZWd1bGFyX2V4cHJlc3Npb24iPnJlZ3VsYXIgZXhwcmVzc2lvbjwvYT4gKGFsc28gY2FzZQoraW5zZW5zaXRpdmUpLjwvcD4KKzxkbD4KKzxkdD48Yj5jb21taXQ8L2I+PC9kdD4KKzxkZD5UaGUgY29tbWl0IG1lc3NhZ2VzIGFuZCBhdXRob3JzaGlwIGluZm9ybWF0aW9uIHdpbGwgYmUgc2Nhbm5lZCBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uPC9kZD4KK0VPVAorCW15ICRoYXZlX2dyZXAgPSBnaXR3ZWJfY2hlY2tfZmVhdHVyZSgnZ3JlcCcpOworCWlmICgkaGF2ZV9ncmVwKSB7CisJCXByaW50IDw8RU9UOworPGR0PjxiPmdyZXA8L2I+PC9kdD4KKzxkZD5BbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0cmVlIChIRUFEIHVubGVzcyB5b3UgYXJlIGV4cGxpY2l0bHkgYnJvd3NpbmcKKyAgICBhIGRpZmZlcmVudCBvbmUpIGFyZSBzZWFyY2hlZCBmb3IgdGhlIGdpdmVuIHBhdHRlcm4uIE9uIGxhcmdlIHRyZWVzLCB0aGlzIHNlYXJjaCBjYW4gdGFrZQorYSB3aGlsZSBhbmQgcHV0IHNvbWUgc3RyYWluIG9uIHRoZSBzZXJ2ZXIsIHNvIHBsZWFzZSB1c2UgaXQgd2l0aCBzb21lIGNvbnNpZGVyYXRpb24uIE5vdGUgdGhhdAorZHVlIHRvIGdpdC1ncmVwIHBlY3VsaWFyaXR5LCBjdXJyZW50bHkgaWYgcmVnZXhwIG1vZGUgaXMgdHVybmVkIG9mZiwgdGhlIG1hdGNoZXMgYXJlCitjYXNlLXNlbnNpdGl2ZS48L2RkPgorRU9UCisJfQorCXByaW50IDw8RU9UOworPGR0PjxiPmF1dGhvcjwvYj48L2R0PgorPGRkPk5hbWUgYW5kIGUtbWFpbCBvZiB0aGUgY2hhbmdlIGF1dGhvciBhbmQgZGF0ZSBvZiBiaXJ0aCBvZiB0aGUgcGF0Y2ggd2lsbCBiZSBzY2FubmVkIGZvciB0aGUgZ2l2ZW4gcGF0dGVybi48L2RkPgorPGR0PjxiPmNvbW1pdHRlcjwvYj48L2R0PgorPGRkPk5hbWUgYW5kIGUtbWFpbCBvZiB0aGUgY29tbWl0dGVyIGFuZCBkYXRlIG9mIGNvbW1pdCB3aWxsIGJlIHNjYW5uZWQgZm9yIHRoZSBnaXZlbiBwYXR0ZXJuLjwvZGQ+CitFT1QKKwlteSAkaGF2ZV9waWNrYXhlID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ3BpY2theGUnKTsKKwlpZiAoJGhhdmVfcGlja2F4ZSkgeworCQlwcmludCA8PEVPVDsKKzxkdD48Yj5waWNrYXhlPC9iPjwvZHQ+Cis8ZGQ+QWxsIGNvbW1pdHMgdGhhdCBjYXVzZWQgdGhlIHN0cmluZyB0byBhcHBlYXIgb3IgZGlzYXBwZWFyIGZyb20gYW55IGZpbGUgKGNoYW5nZXMgdGhhdAorYWRkZWQsIHJlbW92ZWQgb3IgIm1vZGlmaWVkIiB0aGUgc3RyaW5nKSB3aWxsIGJlIGxpc3RlZC4gVGhpcyBzZWFyY2ggY2FuIHRha2UgYSB3aGlsZSBhbmQKK3Rha2VzIGEgbG90IG9mIHN0cmFpbiBvbiB0aGUgc2VydmVyLCBzbyBwbGVhc2UgdXNlIGl0IHdpc2VseS4gTm90ZSB0aGF0IHNpbmNlIHlvdSBtYXkgYmUKK2ludGVyZXN0ZWQgZXZlbiBpbiBjaGFuZ2VzIGp1c3QgY2hhbmdpbmcgdGhlIGNhc2UgYXMgd2VsbCwgdGhpcyBzZWFyY2ggaXMgY2FzZSBzZW5zaXRpdmUuPC9kZD4KK0VPVAorCX0KKwlwcmludCAiPC9kbD5cbiI7CisJZ2l0X2Zvb3Rlcl9odG1sKCk7Cit9CisKK3N1YiBnaXRfc2hvcnRsb2cgeworCWdpdF9sb2dfZ2VuZXJpYygnc2hvcnRsb2cnLCBcJmdpdF9zaG9ydGxvZ19ib2R5LAorCSAgICAgICAgICAgICAgICAkaGFzaCwgJGhhc2hfcGFyZW50KTsKK30KKworIyMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorIyMgZmVlZHMgKFJTUywgQXRvbTsgT1BNTCkKKworc3ViIGdpdF9mZWVkIHsKKwlteSAkZm9ybWF0ID0gc2hpZnQgfHwgJ2F0b20nOworCW15ICRoYXZlX2JsYW1lID0gZ2l0d2ViX2NoZWNrX2ZlYXR1cmUoJ2JsYW1lJyk7CisKKwkjIEF0b206IGh0dHA6Ly93d3cuYXRvbWVuYWJsZWQub3JnL2RldmVsb3BlcnMvc3luZGljYXRpb24vCisJIyBSU1M6ICBodHRwOi8vd3d3Lm5vdGVzdGlwcy5jb20vODAyNTZCM0EwMDdGMjY5Mi8xL05BTU81UDlVUFEKKwlpZiAoJGZvcm1hdCBuZSAncnNzJyAmJiAkZm9ybWF0IG5lICdhdG9tJykgeworCQlkaWVfZXJyb3IoNDAwLCAiVW5rbm93biB3ZWIgZmVlZCBmb3JtYXQiKTsKKwl9CisKKwkjIGxvZy9mZWVkIG9mIGN1cnJlbnQgKEhFQUQpIGJyYW5jaCwgbG9nIG9mIGdpdmVuIGJyYW5jaCwgaGlzdG9yeSBvZiBmaWxlL2RpcmVjdG9yeQorCW15ICRoZWFkID0gJGhhc2ggfHwgJ0hFQUQnOworCW15IEBjb21taXRsaXN0ID0gcGFyc2VfY29tbWl0cygkaGVhZCwgMTUwLCAwLCAkZmlsZV9uYW1lKTsKKworCW15ICVsYXRlc3RfY29tbWl0OworCW15ICVsYXRlc3RfZGF0ZTsKKwlteSAkY29udGVudF90eXBlID0gImFwcGxpY2F0aW9uLyRmb3JtYXQreG1sIjsKKwlpZiAoZGVmaW5lZCAkY2dpLT5odHRwKCdIVFRQX0FDQ0VQVCcpICYmCisJCSAkY2dpLT5BY2NlcHQoJ3RleHQveG1sJykgPiAkY2dpLT5BY2NlcHQoJGNvbnRlbnRfdHlwZSkpIHsKKwkJIyBicm93c2VyIChmZWVkIHJlYWRlcikgcHJlZmVycyB0ZXh0L3htbAorCQkkY29udGVudF90eXBlID0gJ3RleHQveG1sJzsKKwl9CisJaWYgKGRlZmluZWQoJGNvbW1pdGxpc3RbMF0pKSB7CisJCSVsYXRlc3RfY29tbWl0ID0gJXskY29tbWl0bGlzdFswXX07CisJCW15ICRsYXRlc3RfZXBvY2ggPSAkbGF0ZXN0X2NvbW1pdHsnY29tbWl0dGVyX2Vwb2NoJ307CisJCWV4aXRfaWZfdW5tb2RpZmllZF9zaW5jZSgkbGF0ZXN0X2Vwb2NoKTsKKwkJJWxhdGVzdF9kYXRlID0gcGFyc2VfZGF0ZSgkbGF0ZXN0X2Vwb2NoLCAkbGF0ZXN0X2NvbW1pdHsnY29tbWl0dGVyX3R6J30pOworCX0KKwlwcmludCAkY2dpLT5oZWFkZXIoCisJCS10eXBlID0+ICRjb250ZW50X3R5cGUsCisJCS1jaGFyc2V0ID0+ICd1dGYtOCcsCisJCSVsYXRlc3RfZGF0ZSA/ICgtbGFzdF9tb2RpZmllZCA9PiAkbGF0ZXN0X2RhdGV7J3JmYzI4MjInfSkgOiAoKSwKKwkJLXN0YXR1cyA9PiAnMjAwIE9LJyk7CisKKwkjIE9wdGltaXphdGlvbjogc2tpcCBnZW5lcmF0aW5nIHRoZSBib2R5IGlmIGNsaWVudCBhc2tzIG9ubHkKKwkjIGZvciBMYXN0LU1vZGlmaWVkIGRhdGUuCisJcmV0dXJuIGlmICgkY2dpLT5yZXF1ZXN0X21ldGhvZCgpIGVxICdIRUFEJyk7CisKKwkjIGhlYWRlciB2YXJpYWJsZXMKKwlteSAkdGl0bGUgPSAiJHNpdGVfbmFtZSAtICRwcm9qZWN0LyRhY3Rpb24iOworCW15ICRmZWVkX3R5cGUgPSAnbG9nJzsKKwlpZiAoZGVmaW5lZCAkaGFzaCkgeworCQkkdGl0bGUgLj0gIiAtICckaGFzaCciOworCQkkZmVlZF90eXBlID0gJ2JyYW5jaCBsb2cnOworCQlpZiAoZGVmaW5lZCAkZmlsZV9uYW1lKSB7CisJCQkkdGl0bGUgLj0gIiA6OiAkZmlsZV9uYW1lIjsKKwkJCSRmZWVkX3R5cGUgPSAnaGlzdG9yeSc7CisJCX0KKwl9IGVsc2lmIChkZWZpbmVkICRmaWxlX25hbWUpIHsKKwkJJHRpdGxlIC49ICIgLSAkZmlsZV9uYW1lIjsKKwkJJGZlZWRfdHlwZSA9ICdoaXN0b3J5JzsKKwl9CisJJHRpdGxlIC49ICIgJGZlZWRfdHlwZSI7CisJJHRpdGxlID0gZXNjX2h0bWwoJHRpdGxlKTsKKwlteSAkZGVzY3IgPSBnaXRfZ2V0X3Byb2plY3RfZGVzY3JpcHRpb24oJHByb2plY3QpOworCWlmIChkZWZpbmVkICRkZXNjcikgeworCQkkZGVzY3IgPSBlc2NfaHRtbCgkZGVzY3IpOworCX0gZWxzZSB7CisJCSRkZXNjciA9ICIkcHJvamVjdCAiIC4KKwkJICAgICAgICAgKCRmb3JtYXQgZXEgJ3JzcycgPyAnUlNTJyA6ICdBdG9tJykgLgorCQkgICAgICAgICAiIGZlZWQiOworCX0KKwlteSAkb3duZXIgPSBnaXRfZ2V0X3Byb2plY3Rfb3duZXIoJHByb2plY3QpOworCSRvd25lciA9IGVzY19odG1sKCRvd25lcik7CisKKwkjaGVhZGVyCisJbXkgJGFsdF91cmw7CisJaWYgKGRlZmluZWQgJGZpbGVfbmFtZSkgeworCQkkYWx0X3VybCA9IGhyZWYoLWZ1bGw9PjEsIGFjdGlvbj0+Imhpc3RvcnkiLCBoYXNoPT4kaGFzaCwgZmlsZV9uYW1lPT4kZmlsZV9uYW1lKTsKKwl9IGVsc2lmIChkZWZpbmVkICRoYXNoKSB7CisJCSRhbHRfdXJsID0gaHJlZigtZnVsbD0+MSwgYWN0aW9uPT4ibG9nIiwgaGFzaD0+JGhhc2gpOworCX0gZWxzZSB7CisJCSRhbHRfdXJsID0gaHJlZigtZnVsbD0+MSwgYWN0aW9uPT4ic3VtbWFyeSIpOworCX0KKwlwcmludCBxcSE8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PlxuITsKKwlpZiAoJGZvcm1hdCBlcSAncnNzJykgeworCQlwcmludCA8PFhNTDsKKzxyc3MgdmVyc2lvbj0iMi4wIiB4bWxuczpjb250ZW50PSJodHRwOi8vcHVybC5vcmcvcnNzLzEuMC9tb2R1bGVzL2NvbnRlbnQvIj4KKzxjaGFubmVsPgorWE1MCisJCXByaW50ICI8dGl0bGU+JHRpdGxlPC90aXRsZT5cbiIgLgorCQkgICAgICAiPGxpbms+JGFsdF91cmw8L2xpbms+XG4iIC4KKwkJICAgICAgIjxkZXNjcmlwdGlvbj4kZGVzY3I8L2Rlc2NyaXB0aW9uPlxuIiAuCisJCSAgICAgICI8bGFuZ3VhZ2U+ZW48L2xhbmd1YWdlPlxuIiAuCisJCSAgICAgICMgcHJvamVjdCBvd25lciBpcyByZXNwb25zaWJsZSBmb3IgJ2VkaXRvcmlhbCcgY29udGVudAorCQkgICAgICAiPG1hbmFnaW5nRWRpdG9yPiRvd25lcjwvbWFuYWdpbmdFZGl0b3I+XG4iOworCQlpZiAoZGVmaW5lZCAkbG9nbyB8fCBkZWZpbmVkICRmYXZpY29uKSB7CisJCQkjIHByZWZlciB0aGUgbG9nbyB0byB0aGUgZmF2aWNvbiwgc2luY2UgUlNTCisJCQkjIGRvZXNuJ3QgYWxsb3cgYm90aAorCQkJbXkgJGltZyA9IGVzY191cmwoJGxvZ28gfHwgJGZhdmljb24pOworCQkJcHJpbnQgIjxpbWFnZT5cbiIgLgorCQkJICAgICAgIjx1cmw+JGltZzwvdXJsPlxuIiAuCisJCQkgICAgICAiPHRpdGxlPiR0aXRsZTwvdGl0bGU+XG4iIC4KKwkJCSAgICAgICI8bGluaz4kYWx0X3VybDwvbGluaz5cbiIgLgorCQkJICAgICAgIjwvaW1hZ2U+XG4iOworCQl9CisJCWlmICglbGF0ZXN0X2RhdGUpIHsKKwkJCXByaW50ICI8cHViRGF0ZT4kbGF0ZXN0X2RhdGV7J3JmYzI4MjInfTwvcHViRGF0ZT5cbiI7CisJCQlwcmludCAiPGxhc3RCdWlsZERhdGU+JGxhdGVzdF9kYXRleydyZmMyODIyJ308L2xhc3RCdWlsZERhdGU+XG4iOworCQl9CisJCXByaW50ICI8Z2VuZXJhdG9yPmdpdHdlYiB2LiR2ZXJzaW9uLyRnaXRfdmVyc2lvbjwvZ2VuZXJhdG9yPlxuIjsKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdhdG9tJykgeworCQlwcmludCA8PFhNTDsKKzxmZWVkIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20iPgorWE1MCisJCXByaW50ICI8dGl0bGU+JHRpdGxlPC90aXRsZT5cbiIgLgorCQkgICAgICAiPHN1YnRpdGxlPiRkZXNjcjwvc3VidGl0bGU+XG4iIC4KKwkJICAgICAgJzxsaW5rIHJlbD0iYWx0ZXJuYXRlIiB0eXBlPSJ0ZXh0L2h0bWwiIGhyZWY9IicgLgorCQkgICAgICAkYWx0X3VybCAuICciIC8+JyAuICJcbiIgLgorCQkgICAgICAnPGxpbmsgcmVsPSJzZWxmIiB0eXBlPSInIC4gJGNvbnRlbnRfdHlwZSAuICciIGhyZWY9IicgLgorCQkgICAgICAkY2dpLT5zZWxmX3VybCgpIC4gJyIgLz4nIC4gIlxuIiAuCisJCSAgICAgICI8aWQ+IiAuIGhyZWYoLWZ1bGw9PjEpIC4gIjwvaWQ+XG4iIC4KKwkJICAgICAgIyB1c2UgcHJvamVjdCBvd25lciBmb3IgZmVlZCBhdXRob3IKKwkJICAgICAgIjxhdXRob3I+PG5hbWU+JG93bmVyPC9uYW1lPjwvYXV0aG9yPlxuIjsKKwkJaWYgKGRlZmluZWQgJGZhdmljb24pIHsKKwkJCXByaW50ICI8aWNvbj4iIC4gZXNjX3VybCgkZmF2aWNvbikgLiAiPC9pY29uPlxuIjsKKwkJfQorCQlpZiAoZGVmaW5lZCAkbG9nbykgeworCQkJIyBub3QgdHdpY2UgYXMgd2lkZSBhcyB0YWxsOiA3MiB4IDI3IHBpeGVscworCQkJcHJpbnQgIjxsb2dvPiIgLiBlc2NfdXJsKCRsb2dvKSAuICI8L2xvZ28+XG4iOworCQl9CisJCWlmICghICVsYXRlc3RfZGF0ZSkgeworCQkJIyBkdW1teSBkYXRlIHRvIGtlZXAgdGhlIGZlZWQgdmFsaWQgdW50aWwgY29tbWl0cyB0cmlja2xlIGluOgorCQkJcHJpbnQgIjx1cGRhdGVkPjE5NzAtMDEtMDFUMDA6MDA6MDBaPC91cGRhdGVkPlxuIjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ICI8dXBkYXRlZD4kbGF0ZXN0X2RhdGV7J2lzby04NjAxJ308L3VwZGF0ZWQ+XG4iOworCQl9CisJCXByaW50ICI8Z2VuZXJhdG9yIHZlcnNpb249JyR2ZXJzaW9uLyRnaXRfdmVyc2lvbic+Z2l0d2ViPC9nZW5lcmF0b3I+XG4iOworCX0KKworCSMgY29udGVudHMKKwlmb3IgKG15ICRpID0gMDsgJGkgPD0gJCNjb21taXRsaXN0OyAkaSsrKSB7CisJCW15ICVjbyA9ICV7JGNvbW1pdGxpc3RbJGldfTsKKwkJbXkgJGNvbW1pdCA9ICRjb3snaWQnfTsKKwkJIyB3ZSByZWFkIDE1MCwgd2UgYWx3YXlzIHNob3cgMzAgYW5kIHRoZSBvbmVzIG1vcmUgcmVjZW50IHRoYW4gNDggaG91cnMKKwkJaWYgKCgkaSA+PSAyMCkgJiYgKCh0aW1lIC0gJGNveydhdXRob3JfZXBvY2gnfSkgPiA0OCo2MCo2MCkpIHsKKwkJCWxhc3Q7CisJCX0KKwkJbXkgJWNkID0gcGFyc2VfZGF0ZSgkY297J2F1dGhvcl9lcG9jaCd9LCAkY297J2F1dGhvcl90eid9KTsKKworCQkjIGdldCBsaXN0IG9mIGNoYW5nZWQgZmlsZXMKKwkJb3BlbiBteSAkZmQsICItfCIsIGdpdF9jbWQoKSwgImRpZmYtdHJlZSIsICctcicsIEBkaWZmX29wdHMsCisJCQkkY297J3BhcmVudCd9IHx8ICItLXJvb3QiLAorCQkJJGNveydpZCd9LCAiLS0iLCAoZGVmaW5lZCAkZmlsZV9uYW1lID8gJGZpbGVfbmFtZSA6ICgpKQorCQkJb3IgbmV4dDsKKwkJbXkgQGRpZmZ0cmVlID0gbWFwIHsgY2hvbXA7ICRfIH0gPCRmZD47CisJCWNsb3NlICRmZAorCQkJb3IgbmV4dDsKKworCQkjIHByaW50IGVsZW1lbnQgKGVudHJ5LCBpdGVtKQorCQlteSAkY29fdXJsID0gaHJlZigtZnVsbD0+MSwgYWN0aW9uPT4iY29tbWl0ZGlmZiIsIGhhc2g9PiRjb21taXQpOworCQlpZiAoJGZvcm1hdCBlcSAncnNzJykgeworCQkJcHJpbnQgIjxpdGVtPlxuIiAuCisJCQkgICAgICAiPHRpdGxlPiIgLiBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gIjwvdGl0bGU+XG4iIC4KKwkJCSAgICAgICI8YXV0aG9yPiIgLiBlc2NfaHRtbCgkY297J2F1dGhvcid9KSAuICI8L2F1dGhvcj5cbiIgLgorCQkJICAgICAgIjxwdWJEYXRlPiRjZHsncmZjMjgyMid9PC9wdWJEYXRlPlxuIiAuCisJCQkgICAgICAiPGd1aWQgaXNQZXJtYUxpbms9XCJ0cnVlXCI+JGNvX3VybDwvZ3VpZD5cbiIgLgorCQkJICAgICAgIjxsaW5rPiRjb191cmw8L2xpbms+XG4iIC4KKwkJCSAgICAgICI8ZGVzY3JpcHRpb24+IiAuIGVzY19odG1sKCRjb3sndGl0bGUnfSkgLiAiPC9kZXNjcmlwdGlvbj5cbiIgLgorCQkJICAgICAgIjxjb250ZW50OmVuY29kZWQ+IiAuCisJCQkgICAgICAiPCFbQ0RBVEFbXG4iOworCQl9IGVsc2lmICgkZm9ybWF0IGVxICdhdG9tJykgeworCQkJcHJpbnQgIjxlbnRyeT5cbiIgLgorCQkJICAgICAgIjx0aXRsZSB0eXBlPVwiaHRtbFwiPiIgLiBlc2NfaHRtbCgkY297J3RpdGxlJ30pIC4gIjwvdGl0bGU+XG4iIC4KKwkJCSAgICAgICI8dXBkYXRlZD4kY2R7J2lzby04NjAxJ308L3VwZGF0ZWQ+XG4iIC4KKwkJCSAgICAgICI8YXV0aG9yPlxuIiAuCisJCQkgICAgICAiICA8bmFtZT4iIC4gZXNjX2h0bWwoJGNveydhdXRob3JfbmFtZSd9KSAuICI8L25hbWU+XG4iOworCQkJaWYgKCRjb3snYXV0aG9yX2VtYWlsJ30pIHsKKwkJCQlwcmludCAiICA8ZW1haWw+IiAuIGVzY19odG1sKCRjb3snYXV0aG9yX2VtYWlsJ30pIC4gIjwvZW1haWw+XG4iOworCQkJfQorCQkJcHJpbnQgIjwvYXV0aG9yPlxuIiAuCisJCQkgICAgICAjIHVzZSBjb21taXR0ZXIgZm9yIGNvbnRyaWJ1dG9yCisJCQkgICAgICAiPGNvbnRyaWJ1dG9yPlxuIiAuCisJCQkgICAgICAiICA8bmFtZT4iIC4gZXNjX2h0bWwoJGNveydjb21taXR0ZXJfbmFtZSd9KSAuICI8L25hbWU+XG4iOworCQkJaWYgKCRjb3snY29tbWl0dGVyX2VtYWlsJ30pIHsKKwkJCQlwcmludCAiICA8ZW1haWw+IiAuIGVzY19odG1sKCRjb3snY29tbWl0dGVyX2VtYWlsJ30pIC4gIjwvZW1haWw+XG4iOworCQkJfQorCQkJcHJpbnQgIjwvY29udHJpYnV0b3I+XG4iIC4KKwkJCSAgICAgICI8cHVibGlzaGVkPiRjZHsnaXNvLTg2MDEnfTwvcHVibGlzaGVkPlxuIiAuCisJCQkgICAgICAiPGxpbmsgcmVsPVwiYWx0ZXJuYXRlXCIgdHlwZT1cInRleHQvaHRtbFwiIGhyZWY9XCIkY29fdXJsXCIgLz5cbiIgLgorCQkJICAgICAgIjxpZD4kY29fdXJsPC9pZD5cbiIgLgorCQkJICAgICAgIjxjb250ZW50IHR5cGU9XCJ4aHRtbFwiIHhtbDpiYXNlPVwiIiAuIGVzY191cmwoJG15X3VybCkgLiAiXCI+XG4iIC4KKwkJCSAgICAgICI8ZGl2IHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPlxuIjsKKwkJfQorCQlteSAkY29tbWVudCA9ICRjb3snY29tbWVudCd9OworCQlwcmludCAiPHByZT5cbiI7CisJCWZvcmVhY2ggbXkgJGxpbmUgKEAkY29tbWVudCkgeworCQkJJGxpbmUgPSBlc2NfaHRtbCgkbGluZSk7CisJCQlwcmludCAiJGxpbmVcbiI7CisJCX0KKwkJcHJpbnQgIjwvcHJlPjx1bD5cbiI7CisJCWZvcmVhY2ggbXkgJGRpZmZ0cmVlX2xpbmUgKEBkaWZmdHJlZSkgeworCQkJbXkgJWRpZmZ0cmVlID0gcGFyc2VfZGlmZnRyZWVfcmF3X2xpbmUoJGRpZmZ0cmVlX2xpbmUpOworCQkJbmV4dCBpZiAhJGRpZmZ0cmVleydmcm9tX2lkJ307CisKKwkJCW15ICRmaWxlID0gJGRpZmZ0cmVleydmaWxlJ30gfHwgJGRpZmZ0cmVleyd0b19maWxlJ307CisKKwkJCXByaW50ICI8bGk+IiAuCisJCQkgICAgICAiWyIgLgorCQkJICAgICAgJGNnaS0+YSh7LWhyZWYgPT4gaHJlZigtZnVsbD0+MSwgYWN0aW9uPT4iYmxvYmRpZmYiLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoPT4kZGlmZnRyZWV7J3RvX2lkJ30sIGhhc2hfcGFyZW50PT4kZGlmZnRyZWV7J2Zyb21faWQnfSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaF9iYXNlPT4kY297J2lkJ30sIGhhc2hfcGFyZW50X2Jhc2U9PiRjb3sncGFyZW50J30sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGUsIGZpbGVfcGFyZW50PT4kZGlmZnRyZWV7J2Zyb21fZmlsZSd9KSwKKwkJCSAgICAgICAgICAgICAgLXRpdGxlID0+ICJkaWZmIn0sICdEJyk7CisJCQlpZiAoJGhhdmVfYmxhbWUpIHsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJibGFtZSIsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU9PiRmaWxlLCBoYXNoX2Jhc2U9PiRjb21taXQpLAorCQkJCSAgICAgICAgICAgICAgLXRpdGxlID0+ICJibGFtZSJ9LCAnQicpOworCQkJfQorCQkJIyBpZiB0aGlzIGlzIG5vdCBhIGZlZWQgb2YgYSBmaWxlIGhpc3RvcnkKKwkJCWlmICghZGVmaW5lZCAkZmlsZV9uYW1lIHx8ICRmaWxlX25hbWUgbmUgJGZpbGUpIHsKKwkJCQlwcmludCAkY2dpLT5hKHstaHJlZiA9PiBocmVmKC1mdWxsPT4xLCBhY3Rpb249PiJoaXN0b3J5IiwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZT0+JGZpbGUsIGhhc2g9PiRjb21taXQpLAorCQkJCSAgICAgICAgICAgICAgLXRpdGxlID0+ICJoaXN0b3J5In0sICdIJyk7CisJCQl9CisJCQkkZmlsZSA9IGVzY19wYXRoKCRmaWxlKTsKKwkJCXByaW50ICJdICIuCisJCQkgICAgICAiJGZpbGU8L2xpPlxuIjsKKwkJfQorCQlpZiAoJGZvcm1hdCBlcSAncnNzJykgeworCQkJcHJpbnQgIjwvdWw+XV0+XG4iIC4KKwkJCSAgICAgICI8L2NvbnRlbnQ6ZW5jb2RlZD5cbiIgLgorCQkJICAgICAgIjwvaXRlbT5cbiI7CisJCX0gZWxzaWYgKCRmb3JtYXQgZXEgJ2F0b20nKSB7CisJCQlwcmludCAiPC91bD5cbjwvZGl2PlxuIiAuCisJCQkgICAgICAiPC9jb250ZW50PlxuIiAuCisJCQkgICAgICAiPC9lbnRyeT5cbiI7CisJCX0KKwl9CisKKwkjIGVuZCBvZiBmZWVkCisJaWYgKCRmb3JtYXQgZXEgJ3JzcycpIHsKKwkJcHJpbnQgIjwvY2hhbm5lbD5cbjwvcnNzPlxuIjsKKwl9IGVsc2lmICgkZm9ybWF0IGVxICdhdG9tJykgeworCQlwcmludCAiPC9mZWVkPlxuIjsKKwl9Cit9CisKK3N1YiBnaXRfcnNzIHsKKwlnaXRfZmVlZCgncnNzJyk7Cit9CisKK3N1YiBnaXRfYXRvbSB7CisJZ2l0X2ZlZWQoJ2F0b20nKTsKK30KKworc3ViIGdpdF9vcG1sIHsKKwlteSBAbGlzdCA9IGdpdF9nZXRfcHJvamVjdHNfbGlzdCgkcHJvamVjdF9maWx0ZXIsICRzdHJpY3RfZXhwb3J0KTsKKwlpZiAoIUBsaXN0KSB7CisJCWRpZV9lcnJvcig0MDQsICJObyBwcm9qZWN0cyBmb3VuZCIpOworCX0KKworCXByaW50ICRjZ2ktPmhlYWRlcigKKwkJLXR5cGUgPT4gJ3RleHQveG1sJywKKwkJLWNoYXJzZXQgPT4gJ3V0Zi04JywKKwkJLWNvbnRlbnRfZGlzcG9zaXRpb24gPT4gJ2lubGluZTsgZmlsZW5hbWU9Im9wbWwueG1sIicpOworCisJbXkgJHRpdGxlID0gZXNjX2h0bWwoJHNpdGVfbmFtZSk7CisJbXkgJGZpbHRlciA9ICIgd2l0aGluIHN1YmRpcmVjdG9yeSAiOworCWlmIChkZWZpbmVkICRwcm9qZWN0X2ZpbHRlcikgeworCQkkZmlsdGVyIC49IGVzY19odG1sKCRwcm9qZWN0X2ZpbHRlcik7CisJfSBlbHNlIHsKKwkJJGZpbHRlciA9ICIiOworCX0KKwlwcmludCA8PFhNTDsKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8b3BtbCB2ZXJzaW9uPSIxLjAiPgorPGhlYWQ+CisgIDx0aXRsZT4kdGl0bGUgT1BNTCBFeHBvcnQkZmlsdGVyPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPG91dGxpbmUgdGV4dD0iZ2l0IFJTUyBmZWVkcyI+CitYTUwKKworCWZvcmVhY2ggbXkgJHByIChAbGlzdCkgeworCQlteSAlcHJvaiA9ICUkcHI7CisJCW15ICRoZWFkID0gZ2l0X2dldF9oZWFkX2hhc2goJHByb2p7J3BhdGgnfSk7CisJCWlmICghZGVmaW5lZCAkaGVhZCkgeworCQkJbmV4dDsKKwkJfQorCQkkZ2l0X2RpciA9ICIkcHJvamVjdHJvb3QvJHByb2p7J3BhdGgnfSI7CisJCW15ICVjbyA9IHBhcnNlX2NvbW1pdCgkaGVhZCk7CisJCWlmICghJWNvKSB7CisJCQluZXh0OworCQl9CisKKwkJbXkgJHBhdGggPSBlc2NfaHRtbChjaG9wX3N0cigkcHJvansncGF0aCd9LCAyNSwgNSkpOworCQlteSAkcnNzICA9IGhyZWYoJ3Byb2plY3QnID0+ICRwcm9qeydwYXRoJ30sICdhY3Rpb24nID0+ICdyc3MnLCAtZnVsbCA9PiAxKTsKKwkJbXkgJGh0bWwgPSBocmVmKCdwcm9qZWN0JyA9PiAkcHJvansncGF0aCd9LCAnYWN0aW9uJyA9PiAnc3VtbWFyeScsIC1mdWxsID0+IDEpOworCQlwcmludCAiPG91dGxpbmUgdHlwZT1cInJzc1wiIHRleHQ9XCIkcGF0aFwiIHRpdGxlPVwiJHBhdGhcIiB4bWxVcmw9XCIkcnNzXCIgaHRtbFVybD1cIiRodG1sXCIvPlxuIjsKKwl9CisJcHJpbnQgPDxYTUw7Cis8L291dGxpbmU+Cis8L2JvZHk+Cis8L29wbWw+CitYTUwKK30KZGlmZiAtLWdpdCBhL2dpdHdlYi9zdGF0aWMvZ2l0LWZhdmljb24ucG5nIGIvZ2l0d2ViL3N0YXRpYy9naXQtZmF2aWNvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlMzVhNwotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9zdGF0aWMvZ2l0LWZhdmljb24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dpdHdlYi9zdGF0aWMvZ2l0LWxvZ28ucG5nIGIvZ2l0d2ViL3N0YXRpYy9naXQtbG9nby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlZGUyZQotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9zdGF0aWMvZ2l0LWxvZ28ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2dpdHdlYi9zdGF0aWMvZ2l0d2ViLmNzcyBiL2dpdHdlYi9zdGF0aWMvZ2l0d2ViLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjEyNjAxCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL3N0YXRpYy9naXR3ZWIuY3NzCkBAIC0wLDAgKzEsNjg2IEBACitib2R5IHsKKwlmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKwlmb250LXNpemU6IHNtYWxsOworCWJvcmRlcjogc29saWQgI2Q5ZDhkMTsKKwlib3JkZXItd2lkdGg6IDFweDsKKwltYXJnaW46IDEwcHg7CisJYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsKKwljb2xvcjogIzAwMDAwMDsKK30KKworYSB7CisJY29sb3I6ICMwMDAwY2M7Cit9CisKK2E6aG92ZXIsIGE6dmlzaXRlZCwgYTphY3RpdmUgeworCWNvbG9yOiAjODgwMDAwOworfQorCitzcGFuLmNudHJsIHsKKwlib3JkZXI6IGRhc2hlZCAjYWFhYWFhOworCWJvcmRlci13aWR0aDogMXB4OworCXBhZGRpbmc6IDBweCAycHggMHB4IDJweDsKKwltYXJnaW46ICAwcHggMnB4IDBweCAycHg7Cit9CisKK2ltZy5sb2dvIHsKKwlmbG9hdDogcmlnaHQ7CisJYm9yZGVyLXdpZHRoOiAwcHg7Cit9CisKK2ltZy5hdmF0YXIgeworCXZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKK2ltZy5ibG9iIHsKKwltYXgtaGVpZ2h0OiAxMDAlOworCW1heC13aWR0aDogMTAwJTsKK30KKworYS5saXN0IGltZy5hdmF0YXIgeworCWJvcmRlci1zdHlsZTogbm9uZTsKK30KKworZGl2LnBhZ2VfaGVhZGVyIHsKKwloZWlnaHQ6IDI1cHg7CisJcGFkZGluZzogOHB4OworCWZvbnQtc2l6ZTogMTUwJTsKKwlmb250LXdlaWdodDogYm9sZDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZDlkOGQxOworfQorCitkaXYucGFnZV9oZWFkZXIgYTp2aXNpdGVkLCBhLmhlYWRlciB7CisJY29sb3I6ICMwMDAwY2M7Cit9CisKK2Rpdi5wYWdlX2hlYWRlciBhOmhvdmVyIHsKKwljb2xvcjogIzg4MDAwMDsKK30KKworZGl2LnBhZ2VfbmF2IHsKKwlwYWRkaW5nOiA4cHg7Cit9CisKK2Rpdi5wYWdlX25hdiBhOnZpc2l0ZWQgeworCWNvbG9yOiAjMDAwMGNjOworfQorCitkaXYucGFnZV9wYXRoIHsKKwlwYWRkaW5nOiA4cHg7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisJYm9yZGVyOiBzb2xpZCAjZDlkOGQxOworCWJvcmRlci13aWR0aDogMHB4IDBweCAxcHg7Cit9CisKK2Rpdi5wYWdlX2Zvb3RlciB7CisJaGVpZ2h0OiAyMnB4OworCXBhZGRpbmc6IDRweCA4cHg7CisJYmFja2dyb3VuZC1jb2xvcjogI2Q5ZDhkMTsKK30KKworZGl2LnBhZ2VfZm9vdGVyX3RleHQgeworCWxpbmUtaGVpZ2h0OiAyMnB4OworCWZsb2F0OiBsZWZ0OworCWNvbG9yOiAjNTU1NTU1OworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworZGl2I2dlbmVyYXRpbmdfaW5mbyB7CisJbWFyZ2luOiA0cHg7CisJZm9udC1zaXplOiBzbWFsbGVyOworCXRleHQtYWxpZ246IGNlbnRlcjsKKwljb2xvcjogIzUwNTA1MDsKK30KKworZGl2LnBhZ2VfYm9keSB7CisJcGFkZGluZzogOHB4OworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK2Rpdi50aXRsZSwgYS50aXRsZSB7CisJZGlzcGxheTogYmxvY2s7CisJcGFkZGluZzogNnB4IDhweDsKKwlmb250LXdlaWdodDogYm9sZDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWRlY2U2OworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwljb2xvcjogIzAwMDAwMDsKK30KKworZGl2LnJlYWRtZSB7CisJcGFkZGluZzogOHB4OworfQorCithLnRpdGxlOmhvdmVyIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZDlkOGQxOworfQorCitkaXYudGl0bGVfdGV4dCB7CisJcGFkZGluZzogNnB4IDBweDsKKwlib3JkZXI6IHNvbGlkICNkOWQ4ZDE7CisJYm9yZGVyLXdpZHRoOiAwcHggMHB4IDFweDsKKwlmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCitkaXYubG9nX2JvZHkgeworCXBhZGRpbmc6IDhweCA4cHggOHB4IDE1MHB4OworfQorCitzcGFuLmFnZSB7CisJcG9zaXRpb246IHJlbGF0aXZlOworCWZsb2F0OiBsZWZ0OworCXdpZHRoOiAxNDJweDsKKwlmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKK3NwYW4uc2lnbm9mZiB7CisJY29sb3I6ICM4ODg4ODg7Cit9CisKK2Rpdi5sb2dfbGluayB7CisJcGFkZGluZzogMHB4IDhweDsKKwlmb250LXNpemU6IDcwJTsKKwlmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKwlmb250LXN0eWxlOiBub3JtYWw7CisJcG9zaXRpb246IHJlbGF0aXZlOworCWZsb2F0OiBsZWZ0OworCXdpZHRoOiAxMzZweDsKK30KKworZGl2Lmxpc3RfaGVhZCB7CisJcGFkZGluZzogNnB4IDhweCA0cHg7CisJYm9yZGVyOiBzb2xpZCAjZDlkOGQxOworCWJvcmRlci13aWR0aDogMXB4IDBweCAwcHg7CisJZm9udC1zdHlsZTogaXRhbGljOworfQorCisuYXV0aG9yX2RhdGUsIC5hdXRob3IgeworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworZGl2LmF1dGhvcl9kYXRlIHsKKwlwYWRkaW5nOiA4cHg7CisJYm9yZGVyOiBzb2xpZCAjZDlkOGQxOworCWJvcmRlci13aWR0aDogMHB4IDBweCAxcHggMHB4OworfQorCithLmxpc3QgeworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwljb2xvcjogIzAwMDAwMDsKK30KKworYS5zdWJqZWN0LCBhLm5hbWUgeworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCit0YWJsZS50YWdzIGEuc3ViamVjdCB7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKworYS5saXN0OmhvdmVyIHsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKwljb2xvcjogIzg4MDAwMDsKK30KKworYS50ZXh0IHsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6ICMwMDAwY2M7Cit9CisKK2EudGV4dDp2aXNpdGVkIHsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6ICM4ODAwMDA7Cit9CisKK2EudGV4dDpob3ZlciB7CisJdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CisJY29sb3I6ICM4ODAwMDA7Cit9CisKK3RhYmxlIHsKKwlwYWRkaW5nOiA4cHggNHB4OworCWJvcmRlci1zcGFjaW5nOiAwOworfQorCit0YWJsZS5kaWZmX3RyZWUgeworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKK3RhYmxlLmNvbWJpbmVkLmRpZmZfdHJlZSB0aCB7CisJdGV4dC1hbGlnbjogY2VudGVyOworfQorCit0YWJsZS5jb21iaW5lZC5kaWZmX3RyZWUgdGQgeworCXBhZGRpbmctcmlnaHQ6IDI0cHg7Cit9CisKK3RhYmxlLmNvbWJpbmVkLmRpZmZfdHJlZSB0aC5saW5rLAordGFibGUuY29tYmluZWQuZGlmZl90cmVlIHRkLmxpbmsgeworCXBhZGRpbmc6IDBweCAycHg7Cit9CisKK3RhYmxlLmNvbWJpbmVkLmRpZmZfdHJlZSB0ZC5ub2NoYW5nZSBhIHsKKwljb2xvcjogIzY2NjZmZjsKK30KKwordGFibGUuY29tYmluZWQuZGlmZl90cmVlIHRkLm5vY2hhbmdlIGE6aG92ZXIsCit0YWJsZS5jb21iaW5lZC5kaWZmX3RyZWUgdGQubm9jaGFuZ2UgYTp2aXNpdGVkIHsKKwljb2xvcjogI2QwNjY2NjsKK30KKwordGFibGUuYmxhbWUgeworCWJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Cit9CisKK3RhYmxlLmJsYW1lIHRkIHsKKwlwYWRkaW5nOiAwcHggNXB4OworCWZvbnQtc2l6ZTogMTAwJTsKKwl2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0aCB7CisJcGFkZGluZzogMnB4IDVweDsKKwlmb250LXNpemU6IDEwMCU7CisJdGV4dC1hbGlnbjogbGVmdDsKK30KKworLyogZG8gbm90IGNoYW5nZSByb3cgc3R5bGUgb24gaG92ZXIgZm9yICdibGFtZScgdmlldyAqLwordHIubGlnaHQsCit0YWJsZS5ibGFtZSAubGlnaHQ6aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cit9CisKK3RyLmRhcmssCit0YWJsZS5ibGFtZSAuZGFyazpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjZmMDsKK30KKworLyogY3VycmVudGx5IGJvdGggdXNlIHRoZSBzYW1lLCBidXQgaXQgY2FuIGNoYW5nZSAqLwordHIubGlnaHQ6aG92ZXIsCit0ci5kYXJrOmhvdmVyIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWRlY2U2OworfQorCisvKiBib3VuZGFyeSBjb21taXRzIGluICdibGFtZScgdmlldyAqLworLyogYW5kIGNvbW1pdHMgd2l0aG91dCAicHJldmlvdXMiICovCit0ci5ib3VuZGFyeSB0ZC5zaGExLAordHIubm8tcHJldmlvdXMgdGQubGluZW5yIHsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKworLyogZm9yICdibGFtZV9pbmNyZW1lbnRhbCcsIGR1cmluZyBwcm9jZXNzaW5nICovCit0ci5jb2xvcjEgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmZmY2OyB9Cit0ci5jb2xvcjIgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmZmOyB9Cit0ci5jb2xvcjMgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmNmY2OyB9CisKK3RkIHsKKwlwYWRkaW5nOiAycHggNXB4OworCWZvbnQtc2l6ZTogMTAwJTsKKwl2ZXJ0aWNhbC1hbGlnbjogdG9wOworfQorCit0ZC5saW5rLCB0ZC5zZWxmbGluayB7CisJcGFkZGluZzogMnB4IDVweDsKKwlmb250LWZhbWlseTogc2Fucy1zZXJpZjsKKwlmb250LXNpemU6IDcwJTsKK30KKwordGQuc2VsZmxpbmsgeworCXBhZGRpbmctcmlnaHQ6IDBweDsKK30KKwordGQuc2hhMSB7CisJZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworLmVycm9yIHsKKwljb2xvcjogcmVkOworCWJhY2tncm91bmQtY29sb3I6IHllbGxvdzsKK30KKwordGQuY3VycmVudF9oZWFkIHsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKwordGQuY2F0ZWdvcnkgeworCWJhY2tncm91bmQtY29sb3I6ICNkOWQ4ZDE7CisJYm9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDAwMDA7CisJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjMDAwMDAwOworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorCit0YWJsZS5kaWZmX3RyZWUgc3Bhbi5maWxlX3N0YXR1cy5uZXcgeworCWNvbG9yOiAjMDA4MDAwOworfQorCit0YWJsZS5kaWZmX3RyZWUgc3Bhbi5maWxlX3N0YXR1cy5kZWxldGVkIHsKKwljb2xvcjogI2MwMDAwMDsKK30KKwordGFibGUuZGlmZl90cmVlIHNwYW4uZmlsZV9zdGF0dXMubW92ZWQsCit0YWJsZS5kaWZmX3RyZWUgc3Bhbi5maWxlX3N0YXR1cy5tb2RlX2NobmdlIHsKKwljb2xvcjogIzc3Nzc3NzsKK30KKwordGFibGUuZGlmZl90cmVlIHNwYW4uZmlsZV9zdGF0dXMuY29waWVkIHsKKyAgY29sb3I6ICM3MGEwNzA7Cit9CisKKy8qIG5vYWdlOiAiTm8gY29tbWl0cyIgKi8KK3RhYmxlLnByb2plY3RfbGlzdCB0ZC5ub2FnZSB7CisJY29sb3I6ICM4MDgwODA7CisJZm9udC1zdHlsZTogaXRhbGljOworfQorCisvKiBhZ2UyOiA2MCo2MCoyNCoyIDw9IGFnZSAqLwordGFibGUucHJvamVjdF9saXN0IHRkLmFnZTIsIHRhYmxlLmJsYW1lIHRkLmFnZTIgeworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworLyogYWdlMTogNjAqNjAqMiA8PSBhZ2UgPCA2MCo2MCoyNCoyICovCit0YWJsZS5wcm9qZWN0X2xpc3QgdGQuYWdlMSB7CisJY29sb3I6ICMwMDk5MDA7CisJZm9udC1zdHlsZTogaXRhbGljOworfQorCit0YWJsZS5ibGFtZSB0ZC5hZ2UxIHsKKwljb2xvcjogIzAwOTkwMDsKKwliYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKK30KKworLyogYWdlMDogYWdlIDwgNjAqNjAqMiAqLwordGFibGUucHJvamVjdF9saXN0IHRkLmFnZTAgeworCWNvbG9yOiAjMDA5OTAwOworCWZvbnQtc3R5bGU6IGl0YWxpYzsKKwlmb250LXdlaWdodDogYm9sZDsKK30KKwordGFibGUuYmxhbWUgdGQuYWdlMCB7CisJY29sb3I6ICMwMDk5MDA7CisJYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3RkLnByZSwgZGl2LnByZSwgZGl2LmRpZmYgeworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisJZm9udC1zaXplOiAxMnB4OworCXdoaXRlLXNwYWNlOiBwcmU7Cit9CisKK3RkLm1vZGUgeworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9CisKKy8qIHByb2dyZXNzIG9mIGJsYW1lX2ludGVyYWN0aXZlICovCitkaXYjcHJvZ3Jlc3NfYmFyIHsKKwloZWlnaHQ6IDJweDsKKwltYXJnaW4tYm90dG9tOiAtMnB4OworCWJhY2tncm91bmQtY29sb3I6ICNkOGQ5ZDA7Cit9CitkaXYjcHJvZ3Jlc3NfaW5mbyB7CisJZmxvYXQ6IHJpZ2h0OworCXRleHQtYWxpZ246IHJpZ2h0OworfQorCisvKiBmb3JtYXQgb2YgKG9wdGlvbmFsKSBvYmplY3RzIHNpemUgaW4gJ3RyZWUnIHZpZXcgKi8KK3RkLnNpemUgeworCWZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisJdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisKKy8qIHN0eWxpbmcgb2YgZGlmZnMgKHBhdGNoc2V0cyk6IGNvbW1pdGRpZmYgYW5kIGJsb2JkaWZmIHZpZXdzICovCitkaXYuZGlmZi5oZWFkZXIsCitkaXYuZGlmZi5leHRlbmRlZF9oZWFkZXIgeworCXdoaXRlLXNwYWNlOiBub3JtYWw7Cit9CisKK2Rpdi5kaWZmLmhlYWRlciB7CisJZm9udC13ZWlnaHQ6IGJvbGQ7CisKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWRlY2U2OworCisJbWFyZ2luLXRvcDogNHB4OworCXBhZGRpbmc6IDRweCAwcHggMnB4IDBweDsKKwlib3JkZXI6IHNvbGlkICNkOWQ4ZDE7CisJYm9yZGVyLXdpZHRoOiAxcHggMHB4IDFweCAwcHg7Cit9CisKK2Rpdi5kaWZmLmhlYWRlciBhLnBhdGggeworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCitkaXYuZGlmZi5leHRlbmRlZF9oZWFkZXIsCitkaXYuZGlmZi5leHRlbmRlZF9oZWFkZXIgYS5wYXRoLAorZGl2LmRpZmYuZXh0ZW5kZWRfaGVhZGVyIGEuaGFzaCB7CisJY29sb3I6ICM3Nzc3Nzc7Cit9CisKK2Rpdi5kaWZmLmV4dGVuZGVkX2hlYWRlciAuaW5mbyB7CisJY29sb3I6ICNiMGIwYjA7Cit9CisKK2Rpdi5kaWZmLmV4dGVuZGVkX2hlYWRlciB7CisJYmFja2dyb3VuZC1jb2xvcjogI2Y2ZjVlZTsKKwlwYWRkaW5nOiAycHggMHB4IDJweCAwcHg7Cit9CisKK2Rpdi5kaWZmIGEubGlzdCwKK2Rpdi5kaWZmIGEucGF0aCwKK2Rpdi5kaWZmIGEuaGFzaCB7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCitkaXYuZGlmZiBhLmxpc3Q6aG92ZXIsCitkaXYuZGlmZiBhLnBhdGg6aG92ZXIsCitkaXYuZGlmZiBhLmhhc2g6aG92ZXIgeworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCitkaXYuZGlmZi50b19maWxlIGEucGF0aCwKK2Rpdi5kaWZmLnRvX2ZpbGUgeworCWNvbG9yOiAjMDA3MDAwOworfQorCitkaXYuZGlmZi5hZGQgeworCWNvbG9yOiAjMDA4ODAwOworfQorCitkaXYuZGlmZi5hZGQgc3Bhbi5tYXJrZWQgeworCWJhY2tncm91bmQtY29sb3I6ICNhYWZmYWE7Cit9CisKK2Rpdi5kaWZmLmZyb21fZmlsZSBhLnBhdGgsCitkaXYuZGlmZi5mcm9tX2ZpbGUgeworCWNvbG9yOiAjYWEwMDAwOworfQorCitkaXYuZGlmZi5yZW0geworCWNvbG9yOiAjY2MwMDAwOworfQorCitkaXYuZGlmZi5yZW0gc3Bhbi5tYXJrZWQgeworCWJhY2tncm91bmQtY29sb3I6ICNmZmFhYWE7Cit9CisKK2Rpdi5kaWZmLmNodW5rX2hlYWRlciBhLAorZGl2LmRpZmYuY2h1bmtfaGVhZGVyIHsKKwljb2xvcjogIzk5MDA5OTsKK30KKworZGl2LmRpZmYuY2h1bmtfaGVhZGVyIHsKKwlib3JkZXI6IGRvdHRlZCAjZmZlMGZmOworCWJvcmRlci13aWR0aDogMXB4IDBweCAwcHggMHB4OworCW1hcmdpbi10b3A6IDJweDsKK30KKworZGl2LmRpZmYuY2h1bmtfaGVhZGVyIHNwYW4uY2h1bmtfaW5mbyB7CisJYmFja2dyb3VuZC1jb2xvcjogI2ZmZWVmZjsKK30KKworZGl2LmRpZmYuY2h1bmtfaGVhZGVyIHNwYW4uc2VjdGlvbiB7CisJY29sb3I6ICNhYTIyYWE7Cit9CisKK2Rpdi5kaWZmLmluY29tcGxldGUgeworCWNvbG9yOiAjY2NjY2NjOworfQorCitkaXYuZGlmZi5ub2RpZmZlcmVuY2VzIHsKKwlmb250LXdlaWdodDogYm9sZDsKKwljb2xvcjogIzYwMDAwMDsKK30KKworLyogc2lkZS1ieS1zaWRlIGRpZmYgKi8KK2Rpdi5jaHVua19ibG9jayB7CisJb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworZGl2LmNodW5rX2Jsb2NrIGRpdi5vbGQgeworCWZsb2F0OiBsZWZ0OworCXdpZHRoOiA1MCU7CisJb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworZGl2LmNodW5rX2Jsb2NrIGRpdi5uZXcgeworCW1hcmdpbi1sZWZ0OiA1MCU7CisJd2lkdGg6IDUwJTsKK30KKworZGl2LmNodW5rX2Jsb2NrLnJlbSBkaXYub2xkIGRpdi5kaWZmLnJlbSB7CisJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjVmNTsKK30KK2Rpdi5jaHVua19ibG9jay5hZGQgZGl2Lm5ldyBkaXYuZGlmZi5hZGQgeworCWJhY2tncm91bmQtY29sb3I6ICNmOGZmZjg7Cit9CitkaXYuY2h1bmtfYmxvY2suY2hnIGRpdiAgICAgZGl2LmRpZmYgeworCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZjA7Cit9CitkaXYuY2h1bmtfYmxvY2suY3R4IGRpdiAgICAgZGl2LmRpZmYuY3R4IHsKKwljb2xvcjogIzQwNDA0MDsKK30KKworCitkaXYuaW5kZXhfaW5jbHVkZSB7CisJYm9yZGVyOiBzb2xpZCAjZDlkOGQxOworCWJvcmRlci13aWR0aDogMHB4IDBweCAxcHg7CisJcGFkZGluZzogMTJweCA4cHg7Cit9CisKK2Rpdi5zZWFyY2ggeworCWZvbnQtc2l6ZTogMTAwJTsKKwlmb250LXdlaWdodDogbm9ybWFsOworCW1hcmdpbjogNHB4IDhweDsKKwlmbG9hdDogcmlnaHQ7CisJdG9wOiA1NnB4OworCXJpZ2h0OiAxMnB4Cit9CisKK2Rpdi5wcm9qc2VhcmNoIHsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJbWFyZ2luOiAyMHB4IDBweDsKK30KKworZGl2LnByb2pzZWFyY2ggZm9ybSB7CisJbWFyZ2luLWJvdHRvbTogMnB4OworfQorCit0ZC5saW5lbnIgeworCXRleHQtYWxpZ246IHJpZ2h0OworfQorCithLmxpbmVuciB7CisJY29sb3I6ICM5OTk5OTk7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lCit9CisKK2EucnNzX2xvZ28geworCWZsb2F0OiByaWdodDsKKwlwYWRkaW5nOiAzcHggNXB4OworCWxpbmUtaGVpZ2h0OiAxMHB4OworCWJvcmRlcjogMXB4IHNvbGlkOworCWJvcmRlci1jb2xvcjogI2ZjYzdhNSAjN2QzMzAyICMzZTFhMDEgI2ZmOTU0ZTsKKwljb2xvcjogI2ZmZmZmZjsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZmY2NjAwOworCWZvbnQtd2VpZ2h0OiBib2xkOworCWZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOworCWZvbnQtc2l6ZTogNzAlOworCXRleHQtYWxpZ246IGNlbnRlcjsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKK2EucnNzX2xvZ286aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICNlZTU1MDA7Cit9CisKK2EucnNzX2xvZ28uZ2VuZXJpYyB7CisJYmFja2dyb3VuZC1jb2xvcjogI2ZmODgwMDsKK30KKworYS5yc3NfbG9nby5nZW5lcmljOmhvdmVyIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjZWU3NzAwOworfQorCitzcGFuLnJlZnMgc3BhbiB7CisJcGFkZGluZzogMHB4IDRweDsKKwlmb250LXNpemU6IDcwJTsKKwlmb250LXdlaWdodDogbm9ybWFsOworCWJvcmRlcjogMXB4IHNvbGlkOworCWJhY2tncm91bmQtY29sb3I6ICNmZmFhZmY7CisJYm9yZGVyLWNvbG9yOiAjZmZjY2ZmICNmZjAwZWUgI2ZmMDBlZSAjZmZjY2ZmOworfQorCitzcGFuLnJlZnMgc3BhbiBhIHsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJY29sb3I6IGluaGVyaXQ7Cit9CisKK3NwYW4ucmVmcyBzcGFuIGE6aG92ZXIgeworCXRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCitzcGFuLnJlZnMgc3Bhbi5pbmRpcmVjdCB7CisJZm9udC1zdHlsZTogaXRhbGljOworfQorCitzcGFuLnJlZnMgc3Bhbi5yZWYgeworCWJhY2tncm91bmQtY29sb3I6ICNhYWFhZmY7CisJYm9yZGVyLWNvbG9yOiAjY2NjY2ZmICMwMDMzY2MgIzAwMzNjYyAjY2NjY2ZmOworfQorCitzcGFuLnJlZnMgc3Bhbi50YWcgeworCWJhY2tncm91bmQtY29sb3I6ICNmZmZmYWE7CisJYm9yZGVyLWNvbG9yOiAjZmZmZmNjICNmZmVlMDAgI2ZmZWUwMCAjZmZmZmNjOworfQorCitzcGFuLnJlZnMgc3Bhbi5oZWFkIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjYWFmZmFhOworCWJvcmRlci1jb2xvcjogI2NjZmZjYyAjMDBjYzMzICMwMGNjMzMgI2NjZmZjYzsKK30KKworc3Bhbi5hdG5pZ2h0IHsKKwljb2xvcjogI2NjMDAwMDsKK30KKworc3Bhbi5tYXRjaCB7CisJY29sb3I6ICNlMDAwMDA7Cit9CisKK2Rpdi5iaW5hcnkgeworCWZvbnQtc3R5bGU6IGl0YWxpYzsKK30KKworZGl2LnJlbW90ZSB7CisJbWFyZ2luOiAuNWVtOworCWJvcmRlcjogMXB4IHNvbGlkICNkOWQ4ZDE7CisJZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisvKiBKYXZhU2NyaXB0LWJhc2VkIHRpbWV6b25lIG1hbmlwdWxhdGlvbiAqLworCisucG9wdXAgeyAvKiB0aW1lem9uZSBzZWxlY3Rpb24gVUkgKi8KKwlwb3NpdGlvbjogYWJzb2x1dGU7CisJLyogInRvcDogMDsgcmlnaHQ6IDA7IiB3b3VsZCBiZSBiZXR0ZXIsIGlmIG5vdCBmb3IgYnVncyBpbiBicm93c2VycyAqLworCXRvcDogMDsgbGVmdDogMDsKKwlib3JkZXI6IDFweCBzb2xpZDsKKwlwYWRkaW5nOiAycHg7CisJYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDsKKwlmb250LXN0eWxlOiBub3JtYWw7CisJY29sb3I6ICMwMDAwMDA7CisJY3Vyc29yOiBhdXRvOworfQorCisuY2xvc2UtYnV0dG9uIHsgLyogY2xvc2UgdGltZXpvbmUgc2VsZWN0aW9uIFVJIHdpdGhvdXQgc2VsZWN0aW5nICovCisJLyogZmxvYXQgZG9lc24ndCB3b3JrIHdpdGhpbiBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgY29udGFpbmVyLAorCSAqIGlmIHdpZHRoIG9mIGNvbnRhaW5lciBpcyBub3Qgc2V0IGV4cGxpY2l0bHkgKi8KKwkvKiBmbG9hdDogcmlnaHQ7ICovCisJcG9zaXRpb246IGFic29sdXRlOworCXRvcDogMHB4OyByaWdodDogMHB4OworCWJvcmRlcjogIDFweCBzb2xpZCBncmVlbjsKKwltYXJnaW46ICAxcHggMXB4IDFweCAxcHg7CisJcGFkZGluZy1ib3R0b206IDJweDsKKwl3aWR0aDogICAgIDEycHg7CisJaGVpZ2h0OiAgICAxMHB4OworCWZvbnQtc2l6ZTogIDlweDsKKwlmb250LXdlaWdodDogYm9sZDsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJYmFja2dyb3VuZC1jb2xvcjogI2ZmZjBmMDsKKwljdXJzb3I6IHBvaW50ZXI7Cit9CisKKworLyogU3R5bGUgZGVmaW5pdGlvbiBnZW5lcmF0ZWQgYnkgaGlnaGxpZ2h0IDIuNC41LCBodHRwOi8vd3d3LmFuZHJlLXNpbW9uLmRlLyAqLworCisvKiBIaWdobGlnaHRpbmcgdGhlbWUgZGVmaW5pdGlvbjogKi8KKworLm51bSAgICB7IGNvbG9yOiMyOTI4ZmY7IH0KKy5lc2MgICAgeyBjb2xvcjojZmYwMGZmOyB9Cisuc3RyICAgIHsgY29sb3I6I2ZmMDAwMDsgfQorLmRzdHIgICB7IGNvbG9yOiM4MTgxMDA7IH0KKy5zbGMgICAgeyBjb2xvcjojODM4MTgzOyBmb250LXN0eWxlOml0YWxpYzsgfQorLmNvbSAgICB7IGNvbG9yOiM4MzgxODM7IGZvbnQtc3R5bGU6aXRhbGljOyB9CisuZGlyICAgIHsgY29sb3I6IzAwODIwMDsgfQorLnN5bSAgICB7IGNvbG9yOiMwMDAwMDA7IH0KKy5saW5lICAgeyBjb2xvcjojNTU1NTU1OyB9Cisua3dhICAgIHsgY29sb3I6IzAwMDAwMDsgZm9udC13ZWlnaHQ6Ym9sZDsgfQorLmt3YiAgICB7IGNvbG9yOiM4MzAwMDA7IH0KKy5rd2MgICAgeyBjb2xvcjojMDAwMDAwOyBmb250LXdlaWdodDpib2xkOyB9Cisua3dkICAgIHsgY29sb3I6IzAxMDE4MTsgfQpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3N0YXRpYy9qcy9SRUFETUUgYi9naXR3ZWIvc3RhdGljL2pzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQ2MGVkCi0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL3N0YXRpYy9qcy9SRUFETUUKQEAgLTAsMCArMSwyMCBAQAorR0lUIHdlYiBpbnRlcmZhY2UgKGdpdHdlYikgLSBKYXZhU2NyaXB0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkaXJlY3RvcnkgaG9sZHMgSmF2YVNjcmlwdCBjb2RlIHVzZWQgYnkgZ2l0d2ViIChHSVQgd2ViIGludGVyZmFjZSkuCitTY3JpcHRzIGZyb20gdGhlcmUgd291bGQgYmUgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIGluIHRoZSBvcmRlciBzcGVjaWZpZWQKK2J5IGdpdHdlYi9NYWtlZmlsZSBpbnRvIGdpdHdlYi9zdGF0aWMvZ2l0d2ViLmpzLCBkdXJpbmcgYnVpbGRpbmcgb2YKK2dpdHdlYi9naXR3ZWIuY2dpIChkdXJpbmcgZ2l0d2ViIGJ1aWxkaW5nKS4gIFRoZSByZXN1bHRpbmcgZmlsZSAob3IgaXRzCittaW5pZmljYXRpb24pIHdvdWxkIHRoZW4gYmUgaW5zdGFsbGVkIC8gZGVwbG95ZWQgdG9nZXRoZXIgd2l0aCBnaXR3ZWIuCisKK1NjcmlwdHMgaW4gJ2xpYi8nIHN1YmRpcmVjdG9yeSBjb21wb3NlIGdlbmVyaWMgSmF2YVNjcmlwdCBsaWJyYXJ5LAorcHJvdmlkaW5nIGZlYXR1cmVzIHJlcXVpcmVkIGJ5IGdpdHdlYiBidXQgaW4gbm8gd2F5IGxpbWl0ZWQgdG8gZ2l0d2ViCitvbmx5LiAgSW4gdGhlIGZ1dHVyZSB0aG9zZSBzY3JpcHRzIGNvdWxkIGJlIHJlcGxhY2VkIGJ5IHNvbWUgSmF2YVNjcmlwdAorbGlicmFyeSAvIGZyYW1ld29yaywgbGlrZSBlLmcuIGpRdWVyeSwgWVVJLCBQcm90b3R5cGUsIE1vb1Rvb2xzLCBEb2pvLAorRXh0SlMsIFNjcmlwdC5hY3Vsby51cyBvciBTcHJvdXRDb3JlLgorCitBbGwgc2NyaXB0cyB0aGF0IG1hbmlwdWxhdGUgZ2l0d2ViIG91dHB1dCBzaG91bGQgYmUgcHV0IG91dHNpZGUgJ2xpYi8nLAorZGlyZWN0bHkgaW4gdGhpcyBkaXJlY3RvcnkgKCdnaXR3ZWIvc3RhdGljL2pzLycpLiAgVGhvc2Ugc2NyaXB0cyB3b3VsZAoraGF2ZSB0byBiZSByZXdyaXR0ZW4gaWYgZ2l0d2ViIG1vdmVzIHRvIHVzaW5nIHNvbWUgSmF2YVNjcmlwdCBsaWJyYXJ5LgorCitTZWUgYWxzbyBjb21tZW50cyBpbiBnaXR3ZWIvTWFrZWZpbGUuCmRpZmYgLS1naXQgYS9naXR3ZWIvc3RhdGljL2pzL2FkanVzdC10aW1lem9uZS5qcyBiL2dpdHdlYi9zdGF0aWMvanMvYWRqdXN0LXRpbWV6b25lLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNjc3NzkKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2pzL2FkanVzdC10aW1lem9uZS5qcwpAQCAtMCwwICsxLDMzMCBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDExLCBKb2huICdXYXJ0aG9nOScgSGF3bGV5IDx3YXJ0aG9nOUBlYWdsZXNjcmFnLm5ldD4KKy8vICAgICAgICAgICAgICAgMjAxMSwgSmFrdWIgTmFyZWJza2kgPGpuYXJlYkBnbWFpbC5jb20+CisKKy8qKgorICogQGZpbGVPdmVydmlldyBNYW5pcHVsYXRlIGRhdGVzIGluIGdpdHdlYiBvdXRwdXQsIGFkanVzdGluZyB0aW1lem9uZQorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisvKioKKyAqIEdldCBjb21tb24gdGltZXpvbmUsIGFkZCBVSSBmb3IgY2hhbmdpbmcgdGltZXpvbmVzLCBhbmQgYWRqdXN0CisgKiBkYXRlcyB0byB1c2UgcmVxdWVzdGVkIGNvbW1vbiB0aW1lem9uZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgb25sb2FkIGV2ZW50IChhZGRlZCB0byB3aW5kb3cub25sb2FkKS4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gdHpEZWZhdWx0OiBkZWZhdWx0IHRpbWV6b25lLCBpZiB0aGVyZSBpcyBubyBjb29raWUKKyAqIEBwYXJhbSB7T2JqZWN0fSB0ekNvb2tpZUluZm86IG9iamVjdCBsaXRlcmFsIHdpdGggaW5mbyBhYm91dCBjb29raWUgdG8gc3RvcmUgdGltZXpvbmUKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ekNvb2tpZUluZm8ubmFtZTogbmFtZSBvZiBjb29raWUgdG8gc3RvcmUgdGltZXpvbmUKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ekNsYXNzTmFtZTogZGVub3RlcyBlbGVtZW50cyB3aXRoIGRhdGUgdG8gYmUgYWRqdXN0ZWQKKyAqLworZnVuY3Rpb24gb25sb2FkVFpTZXR1cCh0ekRlZmF1bHQsIHR6Q29va2llSW5mbywgdHpDbGFzc05hbWUpIHsKKwl2YXIgdHpDb29raWVUWiA9IGdldENvb2tpZSh0ekNvb2tpZUluZm8ubmFtZSwgdHpDb29raWVJbmZvKTsKKwl2YXIgdHogPSB0ekRlZmF1bHQ7CisKKwlpZiAodHpDb29raWVUWikgeworCQkvLyBzZXQgdGltZXpvbmUgdG8gdmFsdWUgc2F2ZWQgaW4gYSBjb29raWUKKwkJdHogPSB0ekNvb2tpZVRaOworCQkvLyByZWZyZXNoIGNvb2tpZSwgc28gaXRzIGV4cGlyYXRpb24gY291bnRzIGZyb20gbGFzdCB1c2Ugb2YgZ2l0d2ViCisJCXNldENvb2tpZSh0ekNvb2tpZUluZm8ubmFtZSwgdHpDb29raWVUWiwgdHpDb29raWVJbmZvKTsKKwl9CisKKwkvLyBhZGQgVUkgZm9yIGNoYW5naW5nIHRpbWV6b25lCisJYWRkQ2hhbmdlVFoodHosIHR6Q29va2llSW5mbywgdHpDbGFzc05hbWUpOworCisJLy8gc2VydmVyLXNpZGUgb2YgZ2l0d2ViIHByb2R1Y2VzIGRhdGV0aW1lIGluIFVUQywKKwkvLyBzbyBpZiB0eiBpcyAndXRjJyB0aGVyZSBpcyBubyBuZWVkIGZvciBjaGFuZ2VzCisJdmFyIG5vY2hhbmdlID0gdHogPT09ICd1dGMnOworCisJLy8gYWRqdXN0IGRhdGVzIHRvIHVzZSBzcGVjaWZpZWQgY29tbW9uIHRpbWV6b25lCisJZml4RGF0ZXRpbWVUWih0eiwgdHpDbGFzc05hbWUsIG5vY2hhbmdlKTsKK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBDaGFuZ2luZyBkYXRlcyB0byB1c2UgcmVxdWVzdGVkIHRpbWV6b25lICovCisKKy8qKgorICogUmVwbGFjZSBSRkMtMjgyMiBkYXRlcyBjb250YWluZWQgaW4gU1BBTiBlbGVtZW50cyB3aXRoIHR6Q2xhc3NOYW1lCisgKiBDU1MgY2xhc3Mgd2l0aCBlcXVpdmFsZW50IGRhdGVzIGluIGdpdmVuIHRpbWV6b25lLgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ejogbnVtZXJpYyB0aW1lem9uZSBpbiAnKC18KylISE1NJyBmb3JtYXQsIG9yICd1dGMnLCBvciAnbG9jYWwnCisgKiBAcGFyYW0ge1N0cmluZ30gdHpDbGFzc05hbWU6IHNwZWNpZmllcyBlbGVtZW50cyB0byBiZSBjaGFuZ2VkCisgKiBAcGFyYW0ge0Jvb2xlYW59IG5vY2hhbmdlOiBtYXJrdXAgZm9yIHRpbWV6b25lIGNoYW5nZSwgYnV0IGRvbid0IGNoYW5nZSBpdAorICovCitmdW5jdGlvbiBmaXhEYXRldGltZVRaKHR6LCB0ekNsYXNzTmFtZSwgbm9jaGFuZ2UpIHsKKwkvLyBzYW5pdHkgY2hlY2ssIG1ldGhvZCBzaG91bGQgYmUgZW5zdXJlZCBieSBjb21tb24tbGliLmpzCisJaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSB7CisJCXJldHVybjsKKwl9CisKKwkvLyB0cmFuc2xhdGUgdG8gdGltZXpvbmUgaW4gJygtfCspSEhNTScgZm9ybWF0CisJdHogPSBub3JtYWxpemVUaW1lem9uZUluZm8odHopOworCisJLy8gTk9URTogcmVzdWx0IG9mIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgc2hvdWxkIHByb2JhYmx5IGJlIGNhY2hlZAorCXZhciBjbGFzc2VzRm91bmQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHR6Q2xhc3NOYW1lLCAic3BhbiIpOworCWZvciAodmFyIGkgPSAwLCBsZW4gPSBjbGFzc2VzRm91bmQubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKwkJdmFyIGN1ckVsZW1lbnQgPSBjbGFzc2VzRm91bmRbaV07CisKKwkJY3VyRWxlbWVudC50aXRsZSA9ICdDbGljayB0byBjaGFuZ2UgdGltZXpvbmUnOworCQlpZiAoIW5vY2hhbmdlKSB7CisJCQkvLyB3ZSB1c2UgKi5maXJzdENoaWxkLmRhdGEgKFczQyBET00pIGluc3RlYWQgb2YgKi5pbm5lckhUTUwKKwkJCS8vIGFzIHRoZSBsYXR0ZXIgZG9lc24ndCBhbHdheXMgd29yayBldmVyeXdoZXJlIGluIGV2ZXJ5IGJyb3dzZXIKKwkJCXZhciBlcG9jaCA9IHBhcnNlUkZDMjgyMkRhdGUoY3VyRWxlbWVudC5maXJzdENoaWxkLmRhdGEpOworCQkJdmFyIGFkanVzdGVkID0gZm9ybWF0RGF0ZVJGQzI4ODIoZXBvY2gsIHR6KTsKKworCQkJY3VyRWxlbWVudC5maXJzdENoaWxkLmRhdGEgPSBhZGp1c3RlZDsKKwkJfQorCX0KK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBBZGRpbmcgdHJpZ2dlcnMsIGdlbmVyYXRpbmcgdGltZXpvbmUgbWVudSwgZGlzcGxheWluZyBhbmQgaGlkaW5nICovCisKKy8qKgorICogQWRkcyB0cmlnZ2VycyBmb3IgVUkgdG8gY2hhbmdlIGNvbW1vbiB0aW1lem9uZSB1c2VkIGZvciBkYXRlcyBpbgorICogZ2l0d2ViIG91dHB1dDogaXQgbWFya3MgdXAgYW5kL29yIGNyZWF0ZXMgaXRlbSB0byBjbGljayB0byBpbnZva2UKKyAqIHRpbWV6b25lIGNoYW5nZSBVSSwgY3JlYXRlcyB0aW1lem9uZSBVSSBmcmFnbWVudCB0byBiZSBhdHRhY2hlZCwKKyAqIGFuZCBpbnN0YWxscyBhcHByb3ByaWF0ZSBvbmNsaWNrIHRyaWdnZXIgKHZpYSBldmVudCBkZWxlZ2F0aW9uKS4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gdHpTZWxlY3RlZDogcHJlLXNlbGVjdGVkIHRpbWV6b25lLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1dGMnIG9yICdsb2NhbCcgb3IgJygtfCspSEhNTScKKyAqIEBwYXJhbSB7T2JqZWN0fSB0ekNvb2tpZUluZm86IG9iamVjdCBsaXRlcmFsIHdpdGggaW5mbyBhYm91dCBjb29raWUgdG8gc3RvcmUgdGltZXpvbmUKKyAqIEBwYXJhbSB7U3RyaW5nfSB0ekNsYXNzTmFtZTogc3BlY2lmaWVzIGVsZW1lbnRzIHRvIGluc3RhbGwgdHJpZ2dlcgorICovCitmdW5jdGlvbiBhZGRDaGFuZ2VUWih0elNlbGVjdGVkLCB0ekNvb2tpZUluZm8sIHR6Q2xhc3NOYW1lKSB7CisJLy8gbWFrZSBsaW5rIHRvIHRpbWV6b25lIFVJIGRpc2NvdmVyYWJsZQorCWFkZENzc1J1bGUoJy4nK3R6Q2xhc3NOYW1lICsgJzpob3ZlcicsCisJICAgICAgICAgICAndGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGN1cnNvcjogaGVscDsnKTsKKworCS8vIGNyZWF0ZSBmb3JtIGZvciBzZWxlY3RpbmcgdGltZXpvbmUgKHRvIGJlIHNhdmVkIGluIGEgY29va2llKQorCXZhciB0elNlbGVjdEZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworCXR6U2VsZWN0RnJhZ21lbnQgPSBjcmVhdGVDaGFuZ2VUWkZvcm0odHpTZWxlY3RGcmFnbWVudCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6U2VsZWN0ZWQsIHR6Q29va2llSW5mbywgdHpDbGFzc05hbWUpOworCisJLy8gZXZlbnQgZGVsZWdhdGlvbiBoYW5kbGVyIGZvciB0aW1lem9uZSBzZWxlY3Rpb24gVUkgKGNsaWNraW5nIG9uIGVudHJ5KQorCS8vIHNlZSBodHRwOi8vd3d3Lm5jem9ubGluZS5uZXQvYmxvZy8yMDA5LzA2LzMwL2V2ZW50LWRlbGVnYXRpb24taW4tamF2YXNjcmlwdC8KKwkvLyBhc3N1bWVzIHRoYXQgdGhlcmUgaXMgbm8gZXhpc3RpbmcgZG9jdW1lbnQub25jbGljayBoYW5kbGVyCisJZG9jdW1lbnQub25jbGljayA9IGZ1bmN0aW9uIG9uY2xpY2tIYW5kbGVyKGV2ZW50KSB7CisJCS8vSUUgZG9lc24ndCBwYXNzIGluIHRoZSBldmVudCBvYmplY3QKKwkJZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7CisKKwkJLy9JRSB1c2VzIHNyY0VsZW1lbnQgYXMgdGhlIHRhcmdldAorCQl2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7CisKKwkJc3dpdGNoICh0YXJnZXQuY2xhc3NOYW1lKSB7CisJCWNhc2UgdHpDbGFzc05hbWU6CisJCQkvLyBkb24ndCBkaXNwbGF5IHRpbWV6b25lIG1lbnUgaWYgaXQgaXMgYWxyZWFkeSBkaXNwbGF5ZWQKKwkJCWlmICh0elNlbGVjdEZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkgeworCQkJCWRpc3BsYXlDaGFuZ2VUWkZvcm0odGFyZ2V0LCB0elNlbGVjdEZyYWdtZW50KTsKKwkJCX0KKwkJCWJyZWFrOworCQl9IC8vIGVuZCBzd2l0Y2gKKwl9OworfQorCisvKioKKyAqIENyZWF0ZSBEb2N1bWVudEZyYWdtZW50IHdpdGggVUkgZm9yIGNoYW5naW5nIGNvbW1vbiB0aW1lem9uZSBpbgorICogd2hpY2ggZGF0ZXMgYXJlIHNob3duIGluLgorICoKKyAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gZG9jdW1lbnRGcmFnbWVudDogd2hlcmUgYXR0YWNoIFVJCisgKiBAcGFyYW0ge1N0cmluZ30gdHpTZWxlY3RlZDogZGVmYXVsdCAocHJlLXNlbGVjdGVkKSB0aW1lem9uZQorICogQHBhcmFtIHtPYmplY3R9IHR6Q29va2llSW5mbzogb2JqZWN0IGxpdGVyYWwgd2l0aCBpbmZvIGFib3V0IGNvb2tpZSB0byBzdG9yZSB0aW1lem9uZQorICogQHJldHVybnMge0RvY3VtZW50RnJhZ21lbnR9CisgKi8KK2Z1bmN0aW9uIGNyZWF0ZUNoYW5nZVRaRm9ybShkb2N1bWVudEZyYWdtZW50LCB0elNlbGVjdGVkLCB0ekNvb2tpZUluZm8sIHR6Q2xhc3NOYW1lKSB7CisJdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCWRpdi5jbGFzc05hbWUgPSAncG9wdXAnOworCisJLyogJzxkaXYgY2xhc3M9ImNsb3NlLWJ1dHRvbiIgdGl0bGU9IihjbGljayBvbiB0aGlzIGJveCB0byBjbG9zZSkiPlg8L2Rpdj4nICovCisJdmFyIGNsb3NlQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisJY2xvc2VCdXR0b24uY2xhc3NOYW1lID0gJ2Nsb3NlLWJ1dHRvbic7CisJY2xvc2VCdXR0b24udGl0bGUgPSAnKGNsaWNrIG9uIHRoaXMgYm94IHRvIGNsb3NlKSc7CisJY2xvc2VCdXR0b24uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1gnKSk7CisJY2xvc2VCdXR0b24ub25jbGljayA9IGNsb3NlVFpGb3JtSGFuZGxlcihkb2N1bWVudEZyYWdtZW50LCB0ekNsYXNzTmFtZSk7CisJZGl2LmFwcGVuZENoaWxkKGNsb3NlQnV0dG9uKTsKKworCS8qICdTZWxlY3QgdGltZXpvbmU6IDxiciBjbGVhcj0iYWxsIj4nICovCisJZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdTZWxlY3QgdGltZXpvbmU6ICcpKTsKKwl2YXIgYnIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpOworCWJyLmNsZWFyID0gJ2FsbCc7CisJZGl2LmFwcGVuZENoaWxkKGJyKTsKKworCS8qICc8c2VsZWN0IG5hbWU9InR6b2Zmc2V0Ij4KKwkgKiAgICAuLi4KKwkgKiAgICA8b3B0aW9uIHZhbHVlPSItMDcwMCI+VVRDLTA3OjAwPC9vcHRpb24+CisJICogICAgPG9wdGlvbiB2YWx1ZT0iLTA2MDAiPlVUQy0wNjowMDwvb3B0aW9uPgorCSAqICAgIC4uLgorCSAqICA8L3NlbGVjdD4nICovCisJdmFyIHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOworCXNlbGVjdC5uYW1lID0gInR6b2Zmc2V0IjsKKwkvL3NlbGVjdC5zdHlsZS5jbGVhciA9ICdhbGwnOworCXNlbGVjdC5hcHBlbmRDaGlsZChnZW5lcmF0ZVRaT3B0aW9ucyh0elNlbGVjdGVkKSk7CisJc2VsZWN0Lm9uY2hhbmdlID0gc2VsZWN0VFpIYW5kbGVyKGRvY3VtZW50RnJhZ21lbnQsIHR6Q29va2llSW5mbywgdHpDbGFzc05hbWUpOworCWRpdi5hcHBlbmRDaGlsZChzZWxlY3QpOworCisJZG9jdW1lbnRGcmFnbWVudC5hcHBlbmRDaGlsZChkaXYpOworCisJcmV0dXJuIGRvY3VtZW50RnJhZ21lbnQ7Cit9CisKKworLyoqCisgKiBIaWRlIChyZW1vdmUgZnJvbSBET00pIHRpbWV6b25lIGNoYW5nZSBVSSwgZW5zdXJpbmcgdGhhdCBpdCBpcyBub3QKKyAqIGdhcmJhZ2UgY29sbGVjdGVkIGFuZCB0aGF0IGl0IGNhbiBiZSByZS1lbmFibGVkIGxhdGVyLgorICoKKyAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gZG9jdW1lbnRGcmFnbWVudDogY29udGFpbnMgZGV0YWNoZWQgVUkKKyAqIEBwYXJhbSB7SFRNTFNlbGVjdEVsZW1lbnR9IHRhcmdldDogc2VsZWN0IGVsZW1lbnQgaW5zaWRlIG9mIFVJCisgKiBAcGFyYW0ge1N0cmluZ30gdHpDbGFzc05hbWU6IHNwZWNpZmllcyBlbGVtZW50IHdoZXJlIFVJIHdhcyBpbnN0YWxsZWQKKyAqIEByZXR1cm5zIHtEb2N1bWVudEZyYWdtZW50fSBkb2N1bWVudEZyYWdtZW50CisgKi8KK2Z1bmN0aW9uIHJlbW92ZUNoYW5nZVRaRm9ybShkb2N1bWVudEZyYWdtZW50LCB0YXJnZXQsIHR6Q2xhc3NOYW1lKSB7CisJLy8gZmluZCBjb250YWluaW5nIGVsZW1lbnQsIHdoZXJlIHdlIGFwcGVuZGVkIHRpbWV6b25lIHNlbGVjdGlvbiBVSQorCS8vIGB0YXJnZXQnIGlzIHNvbWV3aGVyZSBpbnNpZGUgdGltZXpvbmUgbWVudQorCXZhciBjb250YWluZXIgPSB0YXJnZXQucGFyZW50Tm9kZSwgcG9wdXAgPSB0YXJnZXQ7CisJd2hpbGUgKGNvbnRhaW5lciAmJgorCSAgICAgICBjb250YWluZXIuY2xhc3NOYW1lICE9PSB0ekNsYXNzTmFtZSkgeworCQlwb3B1cCA9IGNvbnRhaW5lcjsKKwkJY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7CisJfQorCS8vIHNhZmV0eSBjaGVjayBpZiB3ZSBmb3VuZCBjb3JyZWN0IGNvbnRhaW5lciwKKwkvLyBhbmQgaWYgaXQgaXNuJ3QgZGVsZXRlZCBhbHJlYWR5CisJaWYgKCFjb250YWluZXIgfHwgIXBvcHVwIHx8CisJICAgIGNvbnRhaW5lci5jbGFzc05hbWUgIT09IHR6Q2xhc3NOYW1lIHx8CisJICAgIHBvcHVwLmNsYXNzTmFtZSAgICAgIT09ICdwb3B1cCcpIHsKKwkJcmV0dXJuIGRvY3VtZW50RnJhZ21lbnQ7CisJfQorCisJLy8gdGltZXpvbmUgc2VsZWN0aW9uIFVJIHdhcyBhcHBlbmRlZCBhcyBsYXN0IGNoaWxkCisJLy8gc2VlIGFsc28gZGlzcGxheUNoYW5nZVRaRm9ybSBmdW5jdGlvbgorCXZhciByZW1vdmVkID0gcG9wdXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwb3B1cCk7CisJaWYgKGRvY3VtZW50RnJhZ21lbnQuZmlyc3RDaGlsZCAhPT0gcmVtb3ZlZCkgeyAvLyB0aGUgb25seSBjaGlsZAorCQkvLyByZS1hcHBlbmQgaXQgc28gaXQgd291bGQgYmUgYXZhaWxhYmxlIGZvciBuZXh0IHRpbWUKKwkJZG9jdW1lbnRGcmFnbWVudC5hcHBlbmRDaGlsZChyZW1vdmVkKTsKKwl9CisJLy8gYWxsIG9mIGlubGluZSBzdHlsZSB3YXMgYWRkZWQgYnkgdGhpcyBzY3JpcHQKKwkvLyBpdCBpcyBub3QgcmVhbGx5IG5lZWRlZCB0byByZW1vdmUgaXQsIGJ1dCBpdCBpcyBhIGdvb2QgcHJhY3RpY2UKKwljb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpOworCisJcmV0dXJuIGRvY3VtZW50RnJhZ21lbnQ7Cit9CisKKworLyoqCisgKiBEaXNwbGF5IFVJIGZvciBjaGFuZ2luZyBjb21tb24gdGltZXpvbmUgZm9yIGRhdGVzIGluIGdpdHdlYiBvdXRwdXQuCisgKiBUbyBiZSB1c2VkIGZyb20gJ29uY2xpY2snIGV2ZW50IGhhbmRsZXIuCisgKgorICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0OiB3aGVyZSB0byBpbnN0YWxsL2Rpc3BsYXkgVUkKKyAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gdHpTZWxlY3RGcmFnbWVudDogdGltZXpvbmUgc2VsZWN0aW9uIFVJCisgKi8KK2Z1bmN0aW9uIGRpc3BsYXlDaGFuZ2VUWkZvcm0odGFyZ2V0LCB0elNlbGVjdEZyYWdtZW50KSB7CisJLy8gZm9yIGFic29sdXRlIHBvc2l0aW9uaW5nIHRvIGJlIHJlbGF0ZWQgdG8gdGFyZ2V0IGVsZW1lbnQKKwl0YXJnZXQuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOworCXRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CisKKwkvLyBzaG93L2Rpc3BsYXkgVUkgZm9yIGNoYW5naW5nIHRpbWV6b25lCisJdGFyZ2V0LmFwcGVuZENoaWxkKHR6U2VsZWN0RnJhZ21lbnQpOworfQorCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIExpc3Qgb2YgdGltZXpvbmVzIGZvciB0aW1lem9uZSBzZWxlY3Rpb24gbWVudSAqLworCisvKioKKyAqIEdlbmVyYXRlIGxpc3Qgb2YgdGltZXpvbmVzIGZvciBjcmVhdGluZyB0aW1lem9uZSBzZWxlY3QgVUkKKyAqCisgKiBAcmV0dXJucyB7T2JqZWN0W119IGxpc3Qgb2YgZS5nLiB7IHZhbHVlOiAnKzAxMDAnLCBkZXNjcjogJ0dNVCswMTowMCcgfQorICovCitmdW5jdGlvbiBnZW5lcmF0ZVRaTGlzdCgpIHsKKwl2YXIgdGltZXpvbmVzID0gWworCQl7IHZhbHVlOiAidXRjIiwgICBkZXNjcjogIlVUQy9HTVQifSwKKwkJeyB2YWx1ZTogImxvY2FsIiwgZGVzY3I6ICJMb2NhbCAocGVyIGJyb3dzZXIpIn0KKwldOworCisJLy8gZ2VuZXJhdGUgYWxsIGZ1bGwgaG91ciB0aW1lem9uZXMgKG5vIGZyYWN0aW9uYWwgdGltZXpvbmVzKQorCWZvciAodmFyIHggPSAtMTIsIGlkeCA9IHRpbWV6b25lcy5sZW5ndGg7IHggPD0gKzE0OyB4KyssIGlkeCsrKSB7CisJCXZhciBob3VycyA9ICh4ID49IDAgPyAnKycgOiAnLScpICsgcGFkTGVmdCh4ID49MCA/IHggOiAteCwgMik7CisJCXRpbWV6b25lc1tpZHhdID0geyB2YWx1ZTogaG91cnMgKyAnMDAnLCBkZXNjcjogJ1VUQycgKyBob3VycyArICc6MDAnfTsKKwkJaWYgKHggPT09IDApIHsKKwkJCXRpbWV6b25lc1tpZHhdLmRlc2NyID0gJ1VUQ1x1MDBCMTAwOjAwJzsgLy8gJ1VUQyZwbHVzbW47MDA6MDAnCisJCX0KKwl9CisKKwlyZXR1cm4gdGltZXpvbmVzOworfQorCisvKioKKyAqIEdlbmVyYXRlIDxvcHRpb25zPiBlbGVtZW50cyBmb3IgdGltZXpvbmUgc2VsZWN0IFVJCisgKgorICogQHBhcmFtIHtTdHJpbmd9IHR6U2VsZWN0ZWQ6IGRlZmF1bHQgdGltZXpvbmUKKyAqIEByZXR1cm5zIHtEb2N1bWVudEZyYWdtZW50fSBsaXN0IG9mIG9wdGlvbnMgZWxlbWVudHMgdG8gYXBwZW5kQ2hpbGQKKyAqLworZnVuY3Rpb24gZ2VuZXJhdGVUWk9wdGlvbnModHpTZWxlY3RlZCkgeworCXZhciBlbGVtcyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKwl2YXIgdGltZXpvbmVzID0gZ2VuZXJhdGVUWkxpc3QoKTsKKworCWZvciAodmFyIGkgPSAwLCBsZW4gPSB0aW1lem9uZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKwkJdmFyIHR6b25lID0gdGltZXpvbmVzW2ldOworCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7CisJCWlmICh0em9uZS52YWx1ZSA9PT0gdHpTZWxlY3RlZCkgeworCQkJb3B0aW9uLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7CisJCX0KKwkJb3B0aW9uLnZhbHVlID0gdHpvbmUudmFsdWU7CisJCW9wdGlvbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0em9uZS5kZXNjcikpOworCisJCWVsZW1zLmFwcGVuZENoaWxkKG9wdGlvbik7CisJfQorCisJcmV0dXJuIGVsZW1zOworfQorCisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIEV2ZW50IGhhbmRsZXJzIGFuZC9vciB0aGVpciBnZW5lcmF0b3JzICovCisKKy8qKgorICogQ3JlYXRlIGV2ZW50IGhhbmRsZXIgdGhhdCBzZWxlY3QgdGltZXpvbmUgYW5kIGNsb3NlcyB0aW1lem9uZSBzZWxlY3QgVUkuCisgKiBUbyBiZSB1c2VkIGFzICQoJ3NlbGVjdFtuYW1lPSJ0enNlbGVjdCJdJykub25jaGFuZ2UgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IHR6U2VsZWN0RnJhZ21lbnQ6IHRpbWV6b25lIHNlbGVjdGlvbiBVSQorICogQHBhcmFtIHtPYmplY3R9IHR6Q29va2llSW5mbzogb2JqZWN0IGxpdGVyYWwgd2l0aCBpbmZvIGFib3V0IGNvb2tpZSB0byBzdG9yZSB0aW1lem9uZQorICogQHBhcmFtIHtTdHJpbmd9IHR6Q29va2llSW5mby5uYW1lOiBuYW1lIG9mIGNvb2tpZSB0byBzYXZlIHJlc3VsdCBvZiBzZWxlY3Rpb24KKyAqIEBwYXJhbSB7U3RyaW5nfSB0ekNsYXNzTmFtZTogc3BlY2lmaWVzIGVsZW1lbnQgd2hlcmUgVUkgd2FzIGluc3RhbGxlZAorICogQHJldHVybnMge0Z1bmN0aW9ufSBldmVudCBoYW5kbGVyCisgKi8KK2Z1bmN0aW9uIHNlbGVjdFRaSGFuZGxlcih0elNlbGVjdEZyYWdtZW50LCB0ekNvb2tpZUluZm8sIHR6Q2xhc3NOYW1lKSB7CisJLy9yZXR1cm4gZnVuY3Rpb24gc2VsZWN0VFooZXZlbnQpIHsKKwlyZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7CisJCWV2ZW50ID0gZXZlbnQgfHwgd2luZG93LmV2ZW50OworCQl2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7CisKKwkJdmFyIHNlbGVjdGVkID0gdGFyZ2V0Lm9wdGlvbnMuaXRlbSh0YXJnZXQuc2VsZWN0ZWRJbmRleCk7CisJCXJlbW92ZUNoYW5nZVRaRm9ybSh0elNlbGVjdEZyYWdtZW50LCB0YXJnZXQsIHR6Q2xhc3NOYW1lKTsKKworCQlpZiAoc2VsZWN0ZWQpIHsKKwkJCXNlbGVjdGVkLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7CisJCQlzZXRDb29raWUodHpDb29raWVJbmZvLm5hbWUsIHNlbGVjdGVkLnZhbHVlLCB0ekNvb2tpZUluZm8pOworCQkJZml4RGF0ZXRpbWVUWihzZWxlY3RlZC52YWx1ZSwgdHpDbGFzc05hbWUpOworCQl9CisJfTsKK30KKworLyoqCisgKiBDcmVhdGUgZXZlbnQgaGFuZGxlciB0aGF0IGNsb3NlcyB0aW1lem9uZSBzZWxlY3QgVUkuCisgKiBUbyBiZSB1c2VkIGUuZy4gYXMgJCgnLmNsb3NlYnV0dG9uJykub25jbGljayBoYW5kbGVyLgorICoKKyAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gdHpTZWxlY3RGcmFnbWVudDogdGltZXpvbmUgc2VsZWN0aW9uIFVJCisgKiBAcGFyYW0ge1N0cmluZ30gdHpDbGFzc05hbWU6IHNwZWNpZmllcyBlbGVtZW50IHdoZXJlIFVJIHdhcyBpbnN0YWxsZWQKKyAqIEByZXR1cm5zIHtGdW5jdGlvbn0gZXZlbnQgaGFuZGxlcgorICovCitmdW5jdGlvbiBjbG9zZVRaRm9ybUhhbmRsZXIodHpTZWxlY3RGcmFnbWVudCwgdHpDbGFzc05hbWUpIHsKKwkvL3JldHVybiBmdW5jdGlvbiBjbG9zZVRaRm9ybShldmVudCkgeworCXJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHsKKwkJZXZlbnQgPSBldmVudCB8fCB3aW5kb3cuZXZlbnQ7CisJCXZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDsKKworCQlyZW1vdmVDaGFuZ2VUWkZvcm0odHpTZWxlY3RGcmFnbWVudCwgdGFyZ2V0LCB0ekNsYXNzTmFtZSk7CisJfTsKK30KKworLyogZW5kIG9mIGFkanVzdC10aW1lem9uZS5qcyAqLwpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3N0YXRpYy9qcy9ibGFtZV9pbmNyZW1lbnRhbC5qcyBiL2dpdHdlYi9zdGF0aWMvanMvYmxhbWVfaW5jcmVtZW50YWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI2ZWI1MAotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9zdGF0aWMvanMvYmxhbWVfaW5jcmVtZW50YWwuanMKQEAgLTAsMCArMSw2OTIgQEAKKy8vIENvcHlyaWdodCAoQykgMjAwNywgRnJlZHJpayBLdWl2aW5lbiA8ZnJla3VpQGdtYWlsLmNvbT4KKy8vICAgICAgICAgICAgICAgMjAwNywgUGV0ciBCYXVkaXMgPHBhc2t5QHN1c2UuY3o+CisvLyAgICAgICAgICAyMDA4LTIwMTEsIEpha3ViIE5hcmVic2tpIDxqbmFyZWJAZ21haWwuY29tPgorCisvKioKKyAqIEBmaWxlT3ZlcnZpZXcgSmF2YVNjcmlwdCBzaWRlIG9mIEFqYXgteSAnYmxhbWVfaW5jcmVtZW50YWwnIHZpZXcgaW4gZ2l0d2ViCisgKiBAbGljZW5zZSBHUEx2MiBvciBsYXRlcgorICovCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyoKKyAqIFRoaXMgY29kZSB1c2VzIERPTSBtZXRob2RzIGluc3RlYWQgb2YgKG5vbnN0YW5kYXJkKSBpbm5lckhUTUwKKyAqIHRvIG1vZGlmeSBwYWdlLgorICoKKyAqIGlubmVySFRNTCBpcyBub24tc3RhbmRhcmQgSUUgZXh0ZW5zaW9uLCB0aG91Z2ggc3VwcG9ydGVkIGJ5IG1vc3QKKyAqIGJyb3dzZXJzOyBob3dldmVyIEZpcmVmb3ggdXAgdG8gdmVyc2lvbiAxLjUgZGlkbid0IGltcGxlbWVudCBpdCBpbgorICogYSBzdHJpY3QgbW9kZSAoYXBwbGljYXRpb24veG1sK3hodG1sIG1pbWV0eXBlKS4KKyAqCisgKiBBbHNvIG15IHNpbXBsZSBiZW5jaG1hcmtzIHNob3cgdGhhdCB1c2luZyBlbGVtLmZpcnN0Q2hpbGQuZGF0YSA9CisgKiAnY29udGVudCcgaXMgc2xpZ2h0bHkgZmFzdGVyIHRoYW4gZWxlbS5pbm5lckhUTUwgPSAnY29udGVudCcuICBJdAorICogaXMgaG93ZXZlciBtb3JlIGZyYWdpbGUgKHRleHQgZWxlbWVudCBmcmFnbWVudCBtdXN0IGV4aXN0cyksIGFuZAorICogbGVzcyBmZWF0dXJlLXJpY2ggKHdlIGNhbm5vdCBhZGQgSFRNTCkuCisgKgorICogTm90ZSB0aGF0IERPTSAyIEhUTUwgaXMgcHJlZmVycmVkIG92ZXIgZ2VuZXJpYyBET00gMiBDb3JlOyB0aGUKKyAqIGVxdWl2YWxlbnQgdXNpbmcgRE9NIDIgQ29yZSBpcyB1c3VhbGx5IHNob3duIGluIGNvbW1lbnRzLgorICovCisKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiB1dGlsaXR5L2hlbHBlciBmdW5jdGlvbnMgKGFuZCB2YXJpYWJsZXMpICovCisKK3ZhciBwcm9qZWN0VXJsOyAvLyBwYXJ0aWFsIHF1ZXJ5ICsgc2VwYXJhdG9yICgnPycgb3IgJzsnKQorCisvLyAnY29tbWl0cycgaXMgYW4gYXNzb2NpYXRpdmUgbWFwLiBJdCBtYXBzIFNIQTFzIHRvIENvbW1pdCBvYmplY3RzLgordmFyIGNvbW1pdHMgPSB7fTsKKworLyoqCisgKiBjb25zdHJ1Y3RvciBmb3IgQ29tbWl0IG9iamVjdHMsIHVzZWQgaW4gJ2JsYW1lJworICogQGNsYXNzIFJlcHJlc2VudHMgYSBibGFtZWQgY29tbWl0CisgKiBAcGFyYW0ge1N0cmluZ30gc2hhMTogU0hBLTEgaWRlbnRpZmllciBvZiBhIGNvbW1pdAorICovCitmdW5jdGlvbiBDb21taXQoc2hhMSkgeworCWlmICh0aGlzIGluc3RhbmNlb2YgQ29tbWl0KSB7CisJCXRoaXMuc2hhMSA9IHNoYTE7CisJCXRoaXMubnByZXZpb3VzID0gMDsgLyogbnVtYmVyIG9mICdwcmV2aW91cycsIGVmZmVjdGl2ZSBwYXJlbnRzICovCisJfSBlbHNlIHsKKwkJcmV0dXJuIG5ldyBDb21taXQoc2hhMSk7CisJfQorfQorCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIHByb2dyZXNzIGluZm8sIHRpbWluZywgZXJyb3IgcmVwb3J0aW5nICovCisKK3ZhciBibGFtZWRMaW5lcyA9IDA7Cit2YXIgdG90YWxMaW5lcyAgPSAnPz8/JzsKK3ZhciBkaXZfcHJvZ3Jlc3NfYmFyOwordmFyIGRpdl9wcm9ncmVzc19pbmZvOworCisvKioKKyAqIERldGVjdHMgaG93IG1hbnkgbGluZXMgZG9lcyBhIGJsYW1lZCBmaWxlIGhhdmUsCisgKiBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgaW4gcHJvZ3Jlc3MgaW5mbworICoKKyAqIEByZXR1cm5zIHtOdW1iZXJ8U3RyaW5nfSBOdW1iZXIgb2YgbGluZXMgaW4gZmlsZSwgb3Igc3RyaW5nICcuLi4nCisgKi8KK2Z1bmN0aW9uIGNvdW50TGluZXMoKSB7CisJdmFyIHRhYmxlID0KKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYW1lX3RhYmxlJykgfHwKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RhYmxlJylbMF07CisKKwlpZiAodGFibGUpIHsKKwkJcmV0dXJuIHRhYmxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0cicpLmxlbmd0aCAtIDE7IC8vIGZvciBoZWFkZXIKKwl9IGVsc2UgeworCQlyZXR1cm4gJy4uLic7CisJfQorfQorCisvKioKKyAqIHVwZGF0ZSBwcm9ncmVzcyBpbmZvIGFuZCBsZW5ndGggKHdpZHRoKSBvZiBwcm9ncmVzcyBiYXIKKyAqCisgKiBAZ2xvYmFscyBkaXZfcHJvZ3Jlc3NfaW5mbywgZGl2X3Byb2dyZXNzX2JhciwgYmxhbWVkTGluZXMsIHRvdGFsTGluZXMKKyAqLworZnVuY3Rpb24gdXBkYXRlUHJvZ3Jlc3NJbmZvKCkgeworCWlmICghZGl2X3Byb2dyZXNzX2luZm8pIHsKKwkJZGl2X3Byb2dyZXNzX2luZm8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvZ3Jlc3NfaW5mbycpOworCX0KKwlpZiAoIWRpdl9wcm9ncmVzc19iYXIpIHsKKwkJZGl2X3Byb2dyZXNzX2JhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9ncmVzc19iYXInKTsKKwl9CisJaWYgKCFkaXZfcHJvZ3Jlc3NfaW5mbyAmJiAhZGl2X3Byb2dyZXNzX2JhcikgeworCQlyZXR1cm47CisJfQorCisJdmFyIHBlcmNlbnRhZ2UgPSBNYXRoLmZsb29yKDEwMC4wKmJsYW1lZExpbmVzL3RvdGFsTGluZXMpOworCisJaWYgKGRpdl9wcm9ncmVzc19pbmZvKSB7CisJCWRpdl9wcm9ncmVzc19pbmZvLmZpcnN0Q2hpbGQuZGF0YSAgPSBibGFtZWRMaW5lcyArICcgLyAnICsgdG90YWxMaW5lcyArCisJCQknICgnICsgcGFkTGVmdFN0cihwZXJjZW50YWdlLCAzLCAnXHUwMEEwJykgKyAnJSknOworCX0KKworCWlmIChkaXZfcHJvZ3Jlc3NfYmFyKSB7CisJCS8vZGl2X3Byb2dyZXNzX2Jhci5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3dpZHRoOiAnK3BlcmNlbnRhZ2UrJyU7Jyk7CisJCWRpdl9wcm9ncmVzc19iYXIuc3R5bGUud2lkdGggPSBwZXJjZW50YWdlICsgJyUnOworCX0KK30KKworCit2YXIgdF9pbnRlcnZhbF9zZXJ2ZXIgPSAnJzsKK3ZhciBjbWRzX3NlcnZlciA9ICcnOwordmFyIHQwID0gbmV3IERhdGUoKTsKKworLyoqCisgKiB3cml0ZSBob3cgbXVjaCBpdCB0b29rIHRvIGdlbmVyYXRlIGRhdGEsIGFuZCB0byBydW4gc2NyaXB0CisgKgorICogQGdsb2JhbHMgdDAsIHRfaW50ZXJ2YWxfc2VydmVyLCBjbWRzX3NlcnZlcgorICovCitmdW5jdGlvbiB3cml0ZVRpbWVJbnRlcnZhbCgpIHsKKwl2YXIgaW5mb190aW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dlbmVyYXRpbmdfdGltZScpOworCWlmICghaW5mb190aW1lIHx8ICF0X2ludGVydmFsX3NlcnZlcikgeworCQlyZXR1cm47CisJfQorCXZhciB0MSA9IG5ldyBEYXRlKCk7CisJaW5mb190aW1lLmZpcnN0Q2hpbGQuZGF0YSArPSAnICsgKCcgKworCQl0X2ludGVydmFsX3NlcnZlciArICcgc2VjIHNlcnZlciBibGFtZV9kYXRhIC8gJyArCisJCSh0MS5nZXRUaW1lKCkgLSB0MC5nZXRUaW1lKCkpLzEwMDAgKyAnIHNlYyBjbGllbnQgSmF2YVNjcmlwdCknOworCisJdmFyIGluZm9fY21kcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnZW5lcmF0aW5nX2NtZCcpOworCWlmICghaW5mb190aW1lIHx8ICFjbWRzX3NlcnZlcikgeworCQlyZXR1cm47CisJfQorCWluZm9fY21kcy5maXJzdENoaWxkLmRhdGEgKz0gJyArICcgKyBjbWRzX3NlcnZlcjsKK30KKworLyoqCisgKiBzaG93IGFuIGVycm9yIG1lc3NhZ2UgYWxlcnQgdG8gdXNlciB3aXRoaW4gcGFnZSAoaW4gcHJvZ3Jlc3MgaW5mbyBhcmVhKQorICogQHBhcmFtIHtTdHJpbmd9IHN0cjogcGxhaW4gdGV4dCBlcnJvciBtZXNzYWdlIChubyBIVE1MKQorICoKKyAqIEBnbG9iYWxzIGRpdl9wcm9ncmVzc19pbmZvCisgKi8KK2Z1bmN0aW9uIGVycm9ySW5mbyhzdHIpIHsKKwlpZiAoIWRpdl9wcm9ncmVzc19pbmZvKSB7CisJCWRpdl9wcm9ncmVzc19pbmZvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzX2luZm8nKTsKKwl9CisJaWYgKGRpdl9wcm9ncmVzc19pbmZvKSB7CisJCWRpdl9wcm9ncmVzc19pbmZvLmNsYXNzTmFtZSA9ICdlcnJvcic7CisJCWRpdl9wcm9ncmVzc19pbmZvLmZpcnN0Q2hpbGQuZGF0YSA9IHN0cjsKKwl9Cit9CisKKy8qIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLworLyogY29sb3Jpbmcgcm93cyBkdXJpbmcgYmxhbWVfZGF0YSAoZ2l0IGJsYW1lIC0taW5jcmVtZW50YWwpIHJ1biAqLworCisvKioKKyAqIHVzZWQgdG8gZXh0cmFjdCBOIGZyb20gJ2NvbG9yTicsIHdoZXJlIE4gaXMgYSBudW1iZXIsCisgKiBAY29uc3RhbnQKKyAqLwordmFyIGNvbG9yUmUgPSAvXGJjb2xvcihbMC05XSopXGIvOworCisvKioKKyAqIHJldHVybiBOIGlmIDx0ciBjbGFzcz0iY29sb3JOIj4sIG90aGVyd2lzZSByZXR1cm4gbnVsbAorICogKHNvbWUgYnJvd3NlcnMgcmVxdWlyZSBDU1MgY2xhc3MgbmFtZXMgdG8gYmVnaW4gd2l0aCBsZXR0ZXIpCisgKgorICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdHI6IHRhYmxlIHJvdyBlbGVtZW50IHRvIGNoZWNrCisgKiBAcGFyYW0ge1N0cmluZ30gdHIuY2xhc3NOYW1lOiAnY2xhc3MnIGF0dHJpYnV0ZSBvZiB0ciBlbGVtZW50CisgKiBAcmV0dXJucyB7TnVtYmVyfG51bGx9IE4gaWYgdHIuY2xhc3NOYW1lID09ICdjb2xvck4nLCBvdGhlcndpc2UgbnVsbAorICoKKyAqIEBnbG9iYWxzIGNvbG9yUmUKKyAqLworZnVuY3Rpb24gZ2V0Q29sb3JObyh0cikgeworCWlmICghdHIpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCXZhciBjbGFzc05hbWUgPSB0ci5jbGFzc05hbWU7CisJaWYgKGNsYXNzTmFtZSkgeworCQl2YXIgbWF0Y2ggPSBjb2xvclJlLmV4ZWMoY2xhc3NOYW1lKTsKKwkJaWYgKG1hdGNoKSB7CisJCQlyZXR1cm4gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTsKKwkJfQorCX0KKwlyZXR1cm4gbnVsbDsKK30KKwordmFyIGNvbG9yc0ZyZXEgPSBbMCwgMCwgMF07CisvKioKKyAqIHJldHVybiBvbmUgb2YgZ2l2ZW4gcG9zc2libGUgY29sb3JzIChjdXJyZW50bHkgbGVhc3QgdXNlZCBvbmUpCisgKiBleGFtcGxlOiBjaG9vc2VDb2xvck5vRnJvbSgyLCAzKSByZXR1cm5zIDIgb3IgMworICoKKyAqIEBwYXJhbSB7TnVtYmVyW119IGFyZ3VtZW50czogb25lIG9yIG1vcmUgbnVtYmVycworICogICAgICAgIGFzc3VtZXMgdGhhdCAgMSA8PSBhcmd1bWVudHNbaV0gPD0gY29sb3JzRnJlcS5sZW5ndGgKKyAqIEByZXR1cm5zIHtOdW1iZXJ9IExlYXN0IHVzZWQgY29sb3IgbnVtYmVyIGZyb20gYXJndW1lbnRzCisgKiBAZ2xvYmFscyBjb2xvcnNGcmVxCisgKi8KK2Z1bmN0aW9uIGNob29zZUNvbG9yTm9Gcm9tKCkgeworCS8vIGNob29zZSB0aGUgY29sb3Igd2hpY2ggaXMgbGVhc3QgdXNlZAorCXZhciBjb2xvck5vID0gYXJndW1lbnRzWzBdOworCWZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CisJCWlmIChjb2xvcnNGcmVxW2FyZ3VtZW50c1tpXS0xXSA8IGNvbG9yc0ZyZXFbY29sb3JOby0xXSkgeworCQkJY29sb3JObyA9IGFyZ3VtZW50c1tpXTsKKwkJfQorCX0KKwljb2xvcnNGcmVxW2NvbG9yTm8tMV0rKzsKKwlyZXR1cm4gY29sb3JObzsKK30KKworLyoqCisgKiBnaXZlbiB0d28gbmVpZ2hib3IgPHRyPiBlbGVtZW50cywgZmluZCBjb2xvciB3aGljaCB3b3VsZCBiZSBkaWZmZXJlbnQKKyAqIGZyb20gY29sb3Igb2YgYm90aCBvZiBuZWlnaGJvcnM7IHVzZWQgdG8gMy1jb2xvciBibGFtZSB0YWJsZQorICoKKyAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRyX3ByZXYKKyAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRyX25leHQKKyAqIEByZXR1cm5zIHtOdW1iZXJ9IGNvbG9yIG51bWJlciBOIHN1Y2ggdGhhdAorICogY29sb3JOICE9IHRyX3ByZXYuY2xhc3NOYW1lICYmIGNvbG9yTiAhPSB0cl9uZXh0LmNsYXNzTmFtZQorICovCitmdW5jdGlvbiBmaW5kQ29sb3JObyh0cl9wcmV2LCB0cl9uZXh0KSB7CisJdmFyIGNvbG9yX3ByZXYgPSBnZXRDb2xvck5vKHRyX3ByZXYpOworCXZhciBjb2xvcl9uZXh0ID0gZ2V0Q29sb3JObyh0cl9uZXh0KTsKKworCisJLy8gbmVpdGhlciBvZiBuZWlnaGJvcnMgaGFzIGNvbG9yIHNldAorCS8vIFRIRU4gd2UgY2FuIHVzZSBhbnkgb2YgMyBwb3NzaWJsZSBjb2xvcnMKKwlpZiAoIWNvbG9yX3ByZXYgJiYgIWNvbG9yX25leHQpIHsKKwkJcmV0dXJuIGNob29zZUNvbG9yTm9Gcm9tKDEsMiwzKTsKKwl9CisKKwkvLyBlaXRoZXIgYm90aCBuZWlnaGJvcnMgaGF2ZSB0aGUgc2FtZSBjb2xvciwKKwkvLyBvciBvbmx5IG9uZSBvZiBuZWlnaGJvcnMgaGF2ZSBjb2xvciBzZXQKKwkvLyBUSEVOIHdlIGNhbiB1c2UgYW55IGNvbG9yIGV4Y2VwdCBnaXZlbgorCXZhciBjb2xvcjsKKwlpZiAoY29sb3JfcHJldiA9PT0gY29sb3JfbmV4dCkgeworCQljb2xvciA9IGNvbG9yX3ByZXY7IC8vID0gY29sb3JfbmV4dDsKKwl9IGVsc2UgaWYgKCFjb2xvcl9wcmV2KSB7CisJCWNvbG9yID0gY29sb3JfbmV4dDsKKwl9IGVsc2UgaWYgKCFjb2xvcl9uZXh0KSB7CisJCWNvbG9yID0gY29sb3JfcHJldjsKKwl9CisJaWYgKGNvbG9yKSB7CisJCXJldHVybiBjaG9vc2VDb2xvck5vRnJvbSgoY29sb3IgJSAzKSArIDEsICgoY29sb3IrMSkgJSAzKSArIDEpOworCX0KKworCS8vIG5laWdoYm9ycyBoYXZlIGRpZmZlcmVudCBjb2xvcnMKKwkvLyBUSEVOIHRoZXJlIGlzIG9ubHkgb25lIGNvbG9yIGxlZnQKKwlyZXR1cm4gKDMgLSAoKGNvbG9yX3ByZXYgKyBjb2xvcl9uZXh0KSAlIDMpKTsKK30KKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBjb2xvcmluZyByb3dzIGxpa2UgJ2JsYW1lJyBhZnRlciAnYmxhbWVfZGF0YScgZmluaXNoZXMgKi8KKworLyoqCisgKiByZXR1cm5zIHRydWUgaWYgZ2l2ZW4gcm93IGVsZW1lbnQgKHRyKSBpcyBmaXJzdCBpbiBjb21taXQgZ3JvdXAKKyAqIHRvIGJlIHVzZWQgb25seSBhZnRlciAnYmxhbWVfZGF0YScgZmluaXNoZXMgKGFmdGVyIHByb2Nlc3NpbmcpCisgKgorICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdHI6IHRhYmxlIHJvdworICogQHJldHVybnMge0Jvb2xlYW59IHRydWUgaWYgVFIgaXMgZmlyc3QgaW4gY29tbWl0IGdyb3VwCisgKi8KK2Z1bmN0aW9uIGlzU3RhcnRPZkdyb3VwKHRyKSB7CisJcmV0dXJuIHRyLmZpcnN0Q2hpbGQuY2xhc3NOYW1lID09PSAnc2hhMSc7Cit9CisKKy8qKgorICogY2hhbmdlIGNvbG9ycyB0byB1c2UgemVicmEgY29sb3JpbmcgKDIgY29sb3JzKSBpbnN0ZWFkIG9mIDMgY29sb3JzCisgKiBjb25jYXRlbmF0ZSBuZWlnaGJvciBjb21taXQgZ3JvdXBzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBjb21taXQKKyAqCisgKiBAZ2xvYmFscyBjb2xvclJlCisgKi8KK2Z1bmN0aW9uIGZpeENvbG9yc0FuZEdyb3VwcygpIHsKKwl2YXIgY29sb3JDbGFzc2VzID0gWydsaWdodCcsICdkYXJrJ107CisJdmFyIGxpbmVudW0gPSAxOworCXZhciB0ciwgcHJldl9ncm91cDsKKwl2YXIgY29sb3JDbGFzcyA9IDA7CisJdmFyIHRhYmxlID0KKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JsYW1lX3RhYmxlJykgfHwKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RhYmxlJylbMF07CisKKwl3aGlsZSAoKHRyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2wnK2xpbmVudW0pKSkgeworCS8vIGluZGV4IG9yaWdpbiBpcyAwLCB3aGljaCBpcyB0YWJsZSBoZWFkZXI7IHN0YXJ0IGZyb20gMQorCS8vd2hpbGUgKCh0ciA9IHRhYmxlLnJvd3NbbGluZW51bV0pKSB7IC8vIDwtIGl0IGlzIHNsb3dlcgorCQlpZiAoaXNTdGFydE9mR3JvdXAodHIsIGxpbmVudW0sIGRvY3VtZW50KSkgeworCQkJaWYgKHByZXZfZ3JvdXAgJiYKKwkJCSAgICBwcmV2X2dyb3VwLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ocmVmID09PQorCQkJICAgICAgICAgICAgdHIuZmlyc3RDaGlsZC5maXJzdENoaWxkLmhyZWYpIHsKKwkJCQkvLyB3ZSBoYXZlIHRvIGNvbmNhdGVuYXRlIGdyb3VwcworCQkJCXZhciBwcmV2X3Jvd3MgPSBwcmV2X2dyb3VwLmZpcnN0Q2hpbGQucm93U3BhbiB8fCAxOworCQkJCXZhciBjdXJyX3Jvd3MgPSAgICAgICAgIHRyLmZpcnN0Q2hpbGQucm93U3BhbiB8fCAxOworCQkJCXByZXZfZ3JvdXAuZmlyc3RDaGlsZC5yb3dTcGFuID0gcHJldl9yb3dzICsgY3Vycl9yb3dzOworCQkJCS8vdHIucmVtb3ZlQ2hpbGQodHIuZmlyc3RDaGlsZCk7CisJCQkJdHIuZGVsZXRlQ2VsbCgwKTsgLy8gRE9NMiBIVE1MIHdheQorCQkJfSBlbHNlIHsKKwkJCQljb2xvckNsYXNzID0gKGNvbG9yQ2xhc3MgKyAxKSAlIDI7CisJCQkJcHJldl9ncm91cCA9IHRyOworCQkJfQorCQl9CisJCXZhciB0cl9jbGFzcyA9IHRyLmNsYXNzTmFtZTsKKwkJdHIuY2xhc3NOYW1lID0gdHJfY2xhc3MucmVwbGFjZShjb2xvclJlLCBjb2xvckNsYXNzZXNbY29sb3JDbGFzc10pOworCQlsaW5lbnVtKys7CisJfQorfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogbWFpbiBwYXJ0OiBwYXJzaW5nIHJlc3BvbnNlICovCisKKy8qKgorICogRnVuY3Rpb24gY2FsbGVkIGZvciBlYWNoIGJsYW1lIGVudHJ5LCBhcyBzb29uIGFzIGl0IGZpbmlzaGVzLgorICogSXQgdXBkYXRlcyBwYWdlIHZpYSBET00gbWFuaXB1bGF0aW9uLCBhZGRpbmcgc2hhMSBpbmZvLCBldGMuCisgKgorICogQHBhcmFtIHtDb21taXR9IGNvbW1pdDogYmxhbWVkIGNvbW1pdAorICogQHBhcmFtIHtPYmplY3R9IGdyb3VwOiBvYmplY3QgcmVwcmVzZW50aW5nIGdyb3VwIG9mIGxpbmVzLAorICogICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBibGFtZSB0aGUgc2FtZSBjb21taXQgKGJsYW1lIGVudHJ5KQorICoKKyAqIEBnbG9iYWxzIGJsYW1lZExpbmVzCisgKi8KK2Z1bmN0aW9uIGhhbmRsZUxpbmUoY29tbWl0LCBncm91cCkgeworCS8qCisJICAgVGhpcyBpcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBIVE1MIGZyYWdtZW50IHdlIGFyZSB3b3JraW5nCisJICAgd2l0aDoKKworCSAgIDx0ciBpZD0ibDEyMyIgY2xhc3M9IiI+CisJICAgICA8dGQgY2xhc3M9InNoYTEiIHRpdGxlPSIiPjxhIGhyZWY9IiI+IDwvYT48L3RkPgorCSAgICAgPHRkIGNsYXNzPSJsaW5lbnIiPjxhIGNsYXNzPSJsaW5lbnIiIGhyZWY9IiI+MTIzPC9hPjwvdGQ+CisJICAgICA8dGQgY2xhc3M9InByZSI+IyB0aW1lcyAobXkgZXh0MyBkb2VzbiYjMzk7dCkuPC90ZD4KKwkgICA8L3RyPgorCSovCisKKwl2YXIgcmVzbGluZSA9IGdyb3VwLnJlc2xpbmU7CisKKwkvLyBmb3JtYXQgZGF0ZSBhbmQgdGltZSBzdHJpbmcgb25seSBvbmNlIHBlciBjb21taXQKKwlpZiAoIWNvbW1pdC5pbmZvKSB7CisJCS8qIGUuZy4gJ0theSBTaWV2ZXJzLCAyMDA1LTA4LTA3IDIxOjQ5OjQ2ICswMjAwJyAqLworCQljb21taXQuaW5mbyA9IGNvbW1pdC5hdXRob3IgKyAnLCAnICsKKwkJCWZvcm1hdERhdGVJU09Mb2NhbChjb21taXQuYXV0aG9yVGltZSwgY29tbWl0LmF1dGhvclRpbWV6b25lKTsKKwl9CisKKwkvLyBjb2xvciBkZXBlbmRzIG9uIGdyb3VwIG9mIGxpbmVzLCBub3Qgb25seSBvbiBibGFtZWQgY29tbWl0CisJdmFyIGNvbG9yTm8gPSBmaW5kQ29sb3JObygKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2wnKyhyZXNsaW5lLTEpKSwKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2wnKyhyZXNsaW5lK2dyb3VwLm51bWxpbmVzKSkKKwkpOworCisJLy8gbG9vcCBvdmVyIGxpbmVzIGluIGNvbW1pdCBncm91cAorCWZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAubnVtbGluZXM7IGkrKywgcmVzbGluZSsrKSB7CisJCXZhciB0ciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsJytyZXNsaW5lKTsKKwkJaWYgKCF0cikgeworCQkJYnJlYWs7CisJCX0KKwkJLyoKKwkJCTx0ciBpZD0ibDEyMyIgY2xhc3M9IiI+CisJCQkgIDx0ZCBjbGFzcz0ic2hhMSIgdGl0bGU9IiI+PGEgaHJlZj0iIj4gPC9hPjwvdGQ+CisJCQkgIDx0ZCBjbGFzcz0ibGluZW5yIj48YSBjbGFzcz0ibGluZW5yIiBocmVmPSIiPjEyMzwvYT48L3RkPgorCQkJICA8dGQgY2xhc3M9InByZSI+IyB0aW1lcyAobXkgZXh0MyBkb2VzbiYjMzk7dCkuPC90ZD4KKwkJCTwvdHI+CisJCSovCisJCXZhciB0ZF9zaGExICA9IHRyLmZpcnN0Q2hpbGQ7CisJCXZhciBhX3NoYTEgICA9IHRkX3NoYTEuZmlyc3RDaGlsZDsKKwkJdmFyIGFfbGluZW5yID0gdGRfc2hhMS5uZXh0U2libGluZy5maXJzdENoaWxkOworCisJCS8qIDx0ciBpZD0ibDEyMyIgY2xhc3M9IiI+ICovCisJCXZhciB0cl9jbGFzcyA9ICcnOworCQlpZiAoY29sb3JObyAhPT0gbnVsbCkgeworCQkJdHJfY2xhc3MgPSAnY29sb3InK2NvbG9yTm87CisJCX0KKwkJaWYgKGNvbW1pdC5ib3VuZGFyeSkgeworCQkJdHJfY2xhc3MgKz0gJyBib3VuZGFyeSc7CisJCX0KKwkJaWYgKGNvbW1pdC5ucHJldmlvdXMgPT09IDApIHsKKwkJCXRyX2NsYXNzICs9ICcgbm8tcHJldmlvdXMnOworCQl9IGVsc2UgaWYgKGNvbW1pdC5ucHJldmlvdXMgPiAxKSB7CisJCQl0cl9jbGFzcyArPSAnIG11bHRpcGxlLXByZXZpb3VzJzsKKwkJfQorCQl0ci5jbGFzc05hbWUgPSB0cl9jbGFzczsKKworCQkvKiA8dGQgY2xhc3M9InNoYTEiIHRpdGxlPSI/IiByb3dzcGFuPSI/Ij48YSBocmVmPSI/Ij4/PC9hPjwvdGQ+ICovCisJCWlmIChpID09PSAwKSB7CisJCQl0ZF9zaGExLnRpdGxlID0gY29tbWl0LmluZm87CisJCQl0ZF9zaGExLnJvd1NwYW4gPSBncm91cC5udW1saW5lczsKKworCQkJYV9zaGExLmhyZWYgPSBwcm9qZWN0VXJsICsgJ2E9Y29tbWl0O2g9JyArIGNvbW1pdC5zaGExOworCQkJaWYgKGFfc2hhMS5maXJzdENoaWxkKSB7CisJCQkJYV9zaGExLmZpcnN0Q2hpbGQuZGF0YSA9IGNvbW1pdC5zaGExLnN1YnN0cigwLCA4KTsKKwkJCX0gZWxzZSB7CisJCQkJYV9zaGExLmFwcGVuZENoaWxkKAorCQkJCQlkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb21taXQuc2hhMS5zdWJzdHIoMCwgOCkpKTsKKwkJCX0KKwkJCWlmIChncm91cC5udW1saW5lcyA+PSAyKSB7CisJCQkJdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOworCQkJCXZhciBiciAgID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKTsKKwkJCQl2YXIgbWF0Y2ggPSBjb21taXQuYXV0aG9yLm1hdGNoKC9cYihbQS1aXSlcQi9nKTsKKwkJCQlpZiAobWF0Y2gpIHsKKwkJCQkJdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgKKwkJCQkJCQltYXRjaC5qb2luKCcnKSk7CisJCQkJfQorCQkJCWlmIChiciAmJiB0ZXh0KSB7CisJCQkJCXZhciBlbGVtID0gZnJhZ21lbnQgfHwgdGRfc2hhMTsKKwkJCQkJZWxlbS5hcHBlbmRDaGlsZChicik7CisJCQkJCWVsZW0uYXBwZW5kQ2hpbGQodGV4dCk7CisJCQkJCWlmIChmcmFnbWVudCkgeworCQkJCQkJdGRfc2hhMS5hcHBlbmRDaGlsZChmcmFnbWVudCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvL3RyLnJlbW92ZUNoaWxkKHRkX3NoYTEpOyAvLyBET00yIENvcmUgd2F5CisJCQl0ci5kZWxldGVDZWxsKDApOyAvLyBET00yIEhUTUwgd2F5CisJCX0KKworCQkvKiA8dGQgY2xhc3M9ImxpbmVuciI+PGEgY2xhc3M9ImxpbmVuciIgaHJlZj0iPyI+MTIzPC9hPjwvdGQ+ICovCisJCXZhciBsaW5lbnJfY29tbWl0ID0KKwkJCSgncHJldmlvdXMnIGluIGNvbW1pdCA/IGNvbW1pdC5wcmV2aW91cyA6IGNvbW1pdC5zaGExKTsKKwkJdmFyIGxpbmVucl9maWxlbmFtZSA9CisJCQkoJ2ZpbGVfcGFyZW50JyBpbiBjb21taXQgPyBjb21taXQuZmlsZV9wYXJlbnQgOiBjb21taXQuZmlsZW5hbWUpOworCQlhX2xpbmVuci5ocmVmID0gcHJvamVjdFVybCArICdhPWJsYW1lX2luY3JlbWVudGFsJyArCisJCQknO2hiPScgKyBsaW5lbnJfY29tbWl0ICsKKwkJCSc7Zj0nICArIGVuY29kZVVSSUNvbXBvbmVudChsaW5lbnJfZmlsZW5hbWUpICsKKwkJCScjbCcgKyAoZ3JvdXAuc3JjbGluZSArIGkpOworCisJCWJsYW1lZExpbmVzKys7CisKKwkJLy91cGRhdGVQcm9ncmVzc0luZm8oKTsKKwl9Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqI0ArCisgKiBAY29uc3RhbnQKKyAqLwordmFyIHNoYTFSZSA9IC9eKFswLTlhLWZdezQwfSkgKFswLTldKykgKFswLTldKykgKFswLTldKykvOwordmFyIGluZm9SZSA9IC9eKFthLXotXSspID8oLiopLzsKK3ZhciBlbmRSZSAgPSAvXkVORCA/KFteIF0qKSA/KC4qKS87CisvKipALSovCisKK3ZhciBjdXJDb21taXQgPSBuZXcgQ29tbWl0KCk7Cit2YXIgY3VyR3JvdXAgID0ge307CisKKy8qKgorICogUGFyc2Ugb3V0cHV0IGZyb20gJ2dpdCBibGFtZSAtLWluY3JlbWVudGFsIFsuLi5dJywgcmVjZWl2ZWQgdmlhCisgKiBYTUxIdHRwUmVxdWVzdCBmcm9tIHNlcnZlciAoYmxhbWVkYXRhVXJsKSwgYW5kIGNhbGwgaGFuZGxlTGluZQorICogKHdoaWNoIHVwZGF0ZXMgcGFnZSkgYXMgc29vbiBhcyBibGFtZSBlbnRyeSBpcyBjb21wbGV0ZWQuCisgKgorICogQHBhcmFtIHtTdHJpbmdbXX0gbGluZXM6IG5ldyBjb21wbGV0ZSBsaW5lcyBmcm9tIGJsYW1lZGF0YSBzZXJ2ZXIKKyAqCisgKiBAZ2xvYmFscyBjb21taXRzLCBjdXJDb21taXQsIGN1ckdyb3VwLCB0X2ludGVydmFsX3NlcnZlciwgY21kc19zZXJ2ZXIKKyAqIEBnbG9iYWxzIHNoYTFSZSwgaW5mb1JlLCBlbmRSZQorICovCitmdW5jdGlvbiBwcm9jZXNzQmxhbWVMaW5lcyhsaW5lcykgeworCXZhciBtYXRjaDsKKworCWZvciAodmFyIGkgPSAwLCBsZW4gPSBsaW5lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykgeworCisJCWlmICgobWF0Y2ggPSBzaGExUmUuZXhlYyhsaW5lc1tpXSkpKSB7CisJCQl2YXIgc2hhMSA9IG1hdGNoWzFdOworCQkJdmFyIHNyY2xpbmUgID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTsKKwkJCXZhciByZXNsaW5lICA9IHBhcnNlSW50KG1hdGNoWzNdLCAxMCk7CisJCQl2YXIgbnVtbGluZXMgPSBwYXJzZUludChtYXRjaFs0XSwgMTApOworCisJCQl2YXIgYyA9IGNvbW1pdHNbc2hhMV07CisJCQlpZiAoIWMpIHsKKwkJCQljID0gbmV3IENvbW1pdChzaGExKTsKKwkJCQljb21taXRzW3NoYTFdID0gYzsKKwkJCX0KKwkJCWN1ckNvbW1pdCA9IGM7CisKKwkJCWN1ckdyb3VwLnNyY2xpbmUgPSBzcmNsaW5lOworCQkJY3VyR3JvdXAucmVzbGluZSA9IHJlc2xpbmU7CisJCQljdXJHcm91cC5udW1saW5lcyA9IG51bWxpbmVzOworCisJCX0gZWxzZSBpZiAoKG1hdGNoID0gaW5mb1JlLmV4ZWMobGluZXNbaV0pKSkgeworCQkJdmFyIGluZm8gPSBtYXRjaFsxXTsKKwkJCXZhciBkYXRhID0gbWF0Y2hbMl07CisJCQlzd2l0Y2ggKGluZm8pIHsKKwkJCWNhc2UgJ2ZpbGVuYW1lJzoKKwkJCQljdXJDb21taXQuZmlsZW5hbWUgPSB1bnF1b3RlKGRhdGEpOworCQkJCS8vICdmaWxlbmFtZScgaW5mb3JtYXRpb24gdGVybWluYXRlcyB0aGUgZW50cnkKKwkJCQloYW5kbGVMaW5lKGN1ckNvbW1pdCwgY3VyR3JvdXApOworCQkJCXVwZGF0ZVByb2dyZXNzSW5mbygpOworCQkJCWJyZWFrOworCQkJY2FzZSAnYXV0aG9yJzoKKwkJCQljdXJDb21taXQuYXV0aG9yID0gZGF0YTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2F1dGhvci10aW1lJzoKKwkJCQljdXJDb21taXQuYXV0aG9yVGltZSA9IHBhcnNlSW50KGRhdGEsIDEwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2F1dGhvci10eic6CisJCQkJY3VyQ29tbWl0LmF1dGhvclRpbWV6b25lID0gZGF0YTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3ByZXZpb3VzJzoKKwkJCQljdXJDb21taXQubnByZXZpb3VzKys7CisJCQkJLy8gc3RvcmUgb25seSBmaXJzdCAncHJldmlvdXMnIGhlYWRlcgorCQkJCWlmICghJ3ByZXZpb3VzJyBpbiBjdXJDb21taXQpIHsKKwkJCQkJdmFyIHBhcnRzID0gZGF0YS5zcGxpdCgnICcsIDIpOworCQkJCQljdXJDb21taXQucHJldmlvdXMgICAgPSBwYXJ0c1swXTsKKwkJCQkJY3VyQ29tbWl0LmZpbGVfcGFyZW50ID0gdW5xdW90ZShwYXJ0c1sxXSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnYm91bmRhcnknOgorCQkJCWN1ckNvbW1pdC5ib3VuZGFyeSA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9IC8vIGVuZCBzd2l0Y2gKKworCQl9IGVsc2UgaWYgKChtYXRjaCA9IGVuZFJlLmV4ZWMobGluZXNbaV0pKSkgeworCQkJdF9pbnRlcnZhbF9zZXJ2ZXIgPSBtYXRjaFsxXTsKKwkJCWNtZHNfc2VydmVyID0gbWF0Y2hbMl07CisKKwkJfSBlbHNlIGlmIChsaW5lc1tpXSAhPT0gJycpIHsKKwkJCS8vIG1hbGZvcm1lZCBsaW5lCisKKwkJfSAvLyBlbmQgaWYgKG1hdGNoKQorCisJfSAvLyBlbmQgZm9yIChsaW5lcykKK30KKworLyoqCisgKiBQcm9jZXNzIG5ldyBkYXRhIGFuZCByZXR1cm4gcG9pbnRlciB0byBlbmQgb2YgcHJvY2Vzc2VkIHBhcnQKKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gdW5wcm9jZXNzZWQ6IG5ldyBkYXRhIChmcm9tIG5leHRSZWFkUG9zKQorICogQHBhcmFtIHtOdW1iZXJ9IG5leHRSZWFkUG9zOiBlbmQgb2YgbGFzdCBwcm9jZXNzZWQgZGF0YQorICogQHJldHVybiB7TnVtYmVyfSBlbmQgb2YgcHJvY2Vzc2VkIGRhdGEgKG5ldyB2YWx1ZSBmb3IgbmV4dFJlYWRQb3MpCisgKi8KK2Z1bmN0aW9uIHByb2Nlc3NEYXRhKHVucHJvY2Vzc2VkLCBuZXh0UmVhZFBvcykgeworCXZhciBsYXN0TGluZUVuZCA9IHVucHJvY2Vzc2VkLmxhc3RJbmRleE9mKCdcbicpOworCWlmIChsYXN0TGluZUVuZCAhPT0gLTEpIHsKKwkJdmFyIGxpbmVzID0gdW5wcm9jZXNzZWQuc3Vic3RyaW5nKDAsIGxhc3RMaW5lRW5kKS5zcGxpdCgnXG4nKTsKKwkJbmV4dFJlYWRQb3MgKz0gbGFzdExpbmVFbmQgKyAxIC8qIDEgPT0gJ1xuJy5sZW5ndGggKi87CisKKwkJcHJvY2Vzc0JsYW1lTGluZXMobGluZXMpOworCX0gLy8gZW5kIGlmCisKKwlyZXR1cm4gbmV4dFJlYWRQb3M7Cit9CisKKy8qKgorICogSGFuZGxlIFhNTEh0dHBSZXF1ZXN0IGVycm9ycworICoKKyAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3R9IHhocjogWE1MSHR0cFJlcXVlc3Qgb2JqZWN0CisgKiBAcGFyYW0ge051bWJlcn0gW3hoci5wb2xsVGltZXJdIElEIG9mIHRoZSB0aW1lb3V0IHRvIGNsZWFyCisgKgorICogQGdsb2JhbHMgY29tbWl0cworICovCitmdW5jdGlvbiBoYW5kbGVFcnJvcih4aHIpIHsKKwllcnJvckluZm8oJ1NlcnZlciBlcnJvcjogJyArCisJCXhoci5zdGF0dXMgKyAnIC0gJyArICh4aHIuc3RhdHVzVGV4dCB8fCAnRXJyb3IgY29udGFjdGluZyBzZXJ2ZXInKSk7CisKKwlpZiAodHlwZW9mIHhoci5wb2xsVGltZXIgPT09ICJudW1iZXIiKSB7CisJCWNsZWFyVGltZW91dCh4aHIucG9sbFRpbWVyKTsKKwkJZGVsZXRlIHhoci5wb2xsVGltZXI7CisJfQorCWNvbW1pdHMgPSB7fTsgLy8gZnJlZSBtZW1vcnkKK30KKworLyoqCisgKiBDYWxsZWQgYWZ0ZXIgWE1MSHR0cFJlcXVlc3QgZmluaXNoZXMgKGxvYWRzKQorICoKKyAqIEBwYXJhbSB7WE1MSHR0cFJlcXVlc3R9IHhocjogWE1MSHR0cFJlcXVlc3Qgb2JqZWN0CisgKiBAcGFyYW0ge051bWJlcn0gW3hoci5wb2xsVGltZXJdIElEIG9mIHRoZSB0aW1lb3V0IHRvIGNsZWFyCisgKgorICogQGdsb2JhbHMgY29tbWl0cworICovCitmdW5jdGlvbiByZXNwb25zZUxvYWRlZCh4aHIpIHsKKwlpZiAodHlwZW9mIHhoci5wb2xsVGltZXIgPT09ICJudW1iZXIiKSB7CisJCWNsZWFyVGltZW91dCh4aHIucG9sbFRpbWVyKTsKKwkJZGVsZXRlIHhoci5wb2xsVGltZXI7CisJfQorCisJZml4Q29sb3JzQW5kR3JvdXBzKCk7CisJd3JpdGVUaW1lSW50ZXJ2YWwoKTsKKwljb21taXRzID0ge307IC8vIGZyZWUgbWVtb3J5Cit9CisKKy8qKgorICogaGFuZGxlciBmb3IgWE1MSHR0cFJlcXVlc3Qgb25yZWFkeXN0YXRlY2hhbmdlIGV2ZW50CisgKiBAc2VlIHN0YXJ0QmxhbWUKKyAqCisgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHI6IFhNTEh0dHBSZXF1ZXN0IG9iamVjdAorICogQHBhcmFtIHtOdW1iZXJ9IHhoci5wcmV2RGF0YUxlbmd0aDogcHJldmlvdXMgdmFsdWUgb2YgeGhyLnJlc3BvbnNlVGV4dC5sZW5ndGgKKyAqIEBwYXJhbSB7TnVtYmVyfSB4aHIubmV4dFJlYWRQb3M6IHN0YXJ0IG9mIHVucmVhZCBwYXJ0IG9mIHhoci5yZXNwb25zZVRleHQKKyAqIEBwYXJhbSB7TnVtYmVyfSBbeGhyLnBvbGxUaW1lcl0gSUQgb2YgdGhlIHRpbWVvdXQgKHRvIHJlc2V0IG9yIGNhbmNlbCkKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gZnJvbVRpbWVyOiBpZiBoYW5kbGVyIHdhcyBjYWxsZWQgZnJvbSB0aW1lcgorICovCitmdW5jdGlvbiBoYW5kbGVSZXNwb25zZSh4aHIsIGZyb21UaW1lcikgeworCisJLyoKKwkgKiB4aHIucmVhZHlTdGF0ZQorCSAqCisJICogIFZhbHVlICBDb25zdGFudCAoVzNDKSAgICBEZXNjcmlwdGlvbgorCSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogIDAgICAgICBVTlNFTlQgICAgICAgICAgICBvcGVuKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuCisJICogIDEgICAgICBPUEVORUQgICAgICAgICAgICBzZW5kKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQuCisJICogIDIgICAgICBIRUFERVJTX1JFQ0VJVkVEICBzZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBhbmQgaGVhZGVycworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHN0YXR1cyBhcmUgYXZhaWxhYmxlLgorCSAqICAzICAgICAgTE9BRElORyAgICAgICAgICAgRG93bmxvYWRpbmc7IHJlc3BvbnNlVGV4dCBob2xkcyBwYXJ0aWFsIGRhdGEuCisJICogIDQgICAgICBET05FICAgICAgICAgICAgICBUaGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLgorCSAqLworCisJaWYgKHhoci5yZWFkeVN0YXRlICE9PSA0ICYmIHhoci5yZWFkeVN0YXRlICE9PSAzKSB7CisJCXJldHVybjsKKwl9CisKKwkvLyB0aGUgc2VydmVyIHJldHVybmVkIGVycm9yCisJLy8gdHJ5IC4uLiBjYXRjaCBibG9jayBpcyB0byB3b3JrIGFyb3VuZCBidWcgaW4gSUU4CisJdHJ5IHsKKwkJaWYgKHhoci5yZWFkeVN0YXRlID09PSAzICYmIHhoci5zdGF0dXMgIT09IDIwMCkgeworCQkJcmV0dXJuOworCQl9CisJfSBjYXRjaCAoZSkgeworCQlyZXR1cm47CisJfQorCWlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCAmJiB4aHIuc3RhdHVzICE9PSAyMDApIHsKKwkJaGFuZGxlRXJyb3IoeGhyKTsKKwkJcmV0dXJuOworCX0KKworCS8vIEluIGtvbnF1ZXJvciB4aHIucmVzcG9uc2VUZXh0IGlzIHNvbWV0aW1lcyBudWxsIGhlcmUuLi4KKwlpZiAoeGhyLnJlc3BvbnNlVGV4dCA9PT0gbnVsbCkgeworCQlyZXR1cm47CisJfQorCisKKwkvLyBleHRyYWN0IG5ldyB3aG9sZSAoY29tcGxldGUpIGxpbmVzLCBhbmQgcHJvY2VzcyB0aGVtCisJaWYgKHhoci5wcmV2RGF0YUxlbmd0aCAhPT0geGhyLnJlc3BvbnNlVGV4dC5sZW5ndGgpIHsKKwkJeGhyLnByZXZEYXRhTGVuZ3RoID0geGhyLnJlc3BvbnNlVGV4dC5sZW5ndGg7CisJCXZhciB1bnByb2Nlc3NlZCA9IHhoci5yZXNwb25zZVRleHQuc3Vic3RyaW5nKHhoci5uZXh0UmVhZFBvcyk7CisJCXhoci5uZXh0UmVhZFBvcyA9IHByb2Nlc3NEYXRhKHVucHJvY2Vzc2VkLCB4aHIubmV4dFJlYWRQb3MpOworCX0KKworCS8vIGRpZCB3ZSBmaW5pc2ggd29yaz8KKwlpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHsKKwkJcmVzcG9uc2VMb2FkZWQoeGhyKTsKKwkJcmV0dXJuOworCX0KKworCS8vIGlmIHdlIGdldCBmcm9tIHRpbWVyLCB3ZSBoYXZlIHRvIHJlc3RhcnQgaXQKKwkvLyBvdGhlcndpc2Ugb25yZWFkeXN0YXRlY2hhbmdlIGdpdmVzIHVzIHBhcnRpYWwgcmVzcG9uc2UsIHRpbWVyIG5vdCBuZWVkZWQKKwlpZiAoZnJvbVRpbWVyKSB7CisJCXNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworCQkJaGFuZGxlUmVzcG9uc2UoeGhyLCB0cnVlKTsKKwkJfSwgMTAwMCk7CisKKwl9IGVsc2UgaWYgKHR5cGVvZiB4aHIucG9sbFRpbWVyID09PSAibnVtYmVyIikgeworCQljbGVhclRpbWVvdXQoeGhyLnBvbGxUaW1lcik7CisJCWRlbGV0ZSB4aHIucG9sbFRpbWVyOworCX0KK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBJbmNyZW1lbnRhbGx5IHVwZGF0ZSBsaW5lIGRhdGEgaW4gYmxhbWVfaW5jcmVtZW50YWwgdmlldyBpbiBnaXR3ZWIuCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGJsYW1lZGF0YVVybDogVVJMIHRvIHNlcnZlciBzY3JpcHQgZ2VuZXJhdGluZyBibGFtZSBkYXRhLgorICogQHBhcmFtIHtTdHJpbmd9IGJVcmw6IHBhcnRpYWwgVVJMIHRvIHByb2plY3QsIHVzZWQgdG8gZ2VuZXJhdGUgbGlua3MuCisgKgorICogQ2FsbGVkIGZyb20gJ2JsYW1lX2luY3JlbWVudGFsJyB2aWV3IGFmdGVyIGxvYWRpbmcgdGFibGUgd2l0aAorICogZmlsZSBjb250ZW50cywgYSBiYXNlIGZvciBibGFtZSB2aWV3LgorICoKKyAqIEBnbG9iYWxzIHQwLCBwcm9qZWN0VXJsLCBkaXZfcHJvZ3Jlc3NfYmFyLCB0b3RhbExpbmVzCisqLworZnVuY3Rpb24gc3RhcnRCbGFtZShibGFtZWRhdGFVcmwsIGJVcmwpIHsKKworCXZhciB4aHIgPSBjcmVhdGVSZXF1ZXN0T2JqZWN0KCk7CisJaWYgKCF4aHIpIHsKKwkJZXJyb3JJbmZvKCdFUlJPUjogWE1MSHR0cFJlcXVlc3Qgbm90IHN1cHBvcnRlZCcpOworCQlyZXR1cm47CisJfQorCisJdDAgPSBuZXcgRGF0ZSgpOworCXByb2plY3RVcmwgPSBiVXJsICsgKGJVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICc7Jyk7CisJaWYgKChkaXZfcHJvZ3Jlc3NfYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb2dyZXNzX2JhcicpKSkgeworCQkvL2Rpdl9wcm9ncmVzc19iYXIuc2V0QXR0cmlidXRlKCdzdHlsZScsICd3aWR0aDogMTAwJTsnKTsKKwkJZGl2X3Byb2dyZXNzX2Jhci5zdHlsZS5jc3NUZXh0ID0gJ3dpZHRoOiAxMDAlOyc7CisJfQorCXRvdGFsTGluZXMgPSBjb3VudExpbmVzKCk7CisJdXBkYXRlUHJvZ3Jlc3NJbmZvKCk7CisKKwkvKiBhZGQgZXh0cmEgcHJvcGVydGllcyB0byB4aHIgb2JqZWN0IHRvIGhlbHAgcHJvY2Vzc2luZyByZXNwb25zZSAqLworCXhoci5wcmV2RGF0YUxlbmd0aCA9IC0xOyAgLy8gdXNlZCB0byBkZXRlY3QgaWYgd2UgaGF2ZSBuZXcgZGF0YQorCXhoci5uZXh0UmVhZFBvcyA9IDA7ICAgICAgLy8gd2hlcmUgdW5yZWFkIHBhcnQgb2YgcmVzcG9uc2Ugc3RhcnRzCisKKwl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgeworCQloYW5kbGVSZXNwb25zZSh4aHIsIGZhbHNlKTsKKwl9OworCisJeGhyLm9wZW4oJ0dFVCcsIGJsYW1lZGF0YVVybCk7CisJeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsICd0ZXh0L3BsYWluJyk7CisJeGhyLnNlbmQobnVsbCk7CisKKwkvLyBub3QgYWxsIGJyb3dzZXJzIGNhbGwgb25yZWFkeXN0YXRlY2hhbmdlIGV2ZW50IG9uIGVhY2ggc2VydmVyIGZsdXNoCisJLy8gcG9sbCByZXNwb25zZSB1c2luZyB0aW1lciBldmVyeSBzZWNvbmQgdG8gaGFuZGxlIHRoaXMgaXNzdWUKKwl4aHIucG9sbFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisJCWhhbmRsZVJlc3BvbnNlKHhociwgdHJ1ZSk7CisJfSwgMTAwMCk7Cit9CisKKy8qIGVuZCBvZiBibGFtZV9pbmNyZW1lbnRhbC5qcyAqLwpkaWZmIC0tZ2l0IGEvZ2l0d2ViL3N0YXRpYy9qcy9qYXZhc2NyaXB0LWRldGVjdGlvbi5qcyBiL2dpdHdlYi9zdGF0aWMvanMvamF2YXNjcmlwdC1kZXRlY3Rpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyNTk2ZgotLS0gL2Rldi9udWxsCisrKyBiL2dpdHdlYi9zdGF0aWMvanMvamF2YXNjcmlwdC1kZXRlY3Rpb24uanMKQEAgLTAsMCArMSw0MyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDA3LCBGcmVkcmlrIEt1aXZpbmVuIDxmcmVrdWlAZ21haWwuY29tPgorLy8gICAgICAgICAgICAgICAyMDA3LCBQZXRyIEJhdWRpcyA8cGFza3lAc3VzZS5jej4KKy8vICAgICAgICAgIDIwMDgtMjAxMSwgSmFrdWIgTmFyZWJza2kgPGpuYXJlYkBnbWFpbC5jb20+CisKKy8qKgorICogQGZpbGVPdmVydmlldyBEZXRlY3QgaWYgSmF2YVNjcmlwdCBpcyBlbmFibGVkLCBhbmQgcGFzcyBpdCB0byBzZXJ2ZXItc2lkZQorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogTWFuaXB1bGF0aW5nIGxpbmtzICovCisKKy8qKgorICogdXNlZCB0byBjaGVjayBpZiBsaW5rIGhhcyAnanMnIHF1ZXJ5IHBhcmFtZXRlciBhbHJlYWR5IChhdCBlbmQpLAorICogYW5kIG90aGVyIHJlYXNvbnMgdG8gbm90IGFkZCAnanM9MScgcGFyYW0gYXQgdGhlIGVuZCBvZiBsaW5rCisgKiBAY29uc3RhbnQKKyAqLwordmFyIGpzRXhjZXB0aW9uc1JlID0gL1s7P11qcz1bMDFdKCMuKik/JC87CisKKy8qKgorICogQWRkICc/anM9MScgb3IgJztqcz0xJyB0byB0aGUgZW5kIG9mIGV2ZXJ5IGxpbmsgaW4gdGhlIGRvY3VtZW50CisgKiB0aGF0IGRvZXNuJ3QgaGF2ZSAnanMnIHF1ZXJ5IHBhcmFtZXRlciBzZXQgYWxyZWFkeS4KKyAqCisgKiBMaW5rcyB3aXRoICdqcz0xJyBsZWFkIHRvIEphdmFTY3JpcHQgdmVyc2lvbiBvZiBnaXZlbiBhY3Rpb24sIGlmIGl0CisgKiBleGlzdHMgKGN1cnJlbnRseSB0aGVyZSBpcyBvbmx5ICdibGFtZV9pbmNyZW1lbnRhbCcgZm9yICdibGFtZScpCisgKgorICogVG8gYmUgdXNlZCBhcyBgd2luZG93Lm9ubG9hZGAgaGFuZGxlcgorICoKKyAqIEBnbG9iYWxzIGpzRXhjZXB0aW9uc1JlCisgKi8KK2Z1bmN0aW9uIGZpeExpbmtzKCkgeworCXZhciBhbGxMaW5rcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIikgfHwgZG9jdW1lbnQubGlua3M7CisJZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFsbExpbmtzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7CisJCXZhciBsaW5rID0gYWxsTGlua3NbaV07CisJCWlmICghanNFeGNlcHRpb25zUmUudGVzdChsaW5rKSkgeworCQkJbGluay5ocmVmID0gbGluay5ocmVmLnJlcGxhY2UoLygjfCQpLywKKwkJCQkobGluay5ocmVmLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnOycpICsgJ2pzPTEkMScpOworCQl9CisJfQorfQorCisvKiBlbmQgb2YgamF2YXNjcmlwdC1kZXRlY3Rpb24uanMgKi8KZGlmZiAtLWdpdCBhL2dpdHdlYi9zdGF0aWMvanMvbGliL2NvbW1vbi1saWIuanMgYi9naXR3ZWIvc3RhdGljL2pzL2xpYi9jb21tb24tbGliLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOGJiYjcKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2pzL2xpYi9jb21tb24tbGliLmpzCkBAIC0wLDAgKzEsMjI0IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMDcsIEZyZWRyaWsgS3VpdmluZW4gPGZyZWt1aUBnbWFpbC5jb20+CisvLyAgICAgICAgICAgICAgIDIwMDcsIFBldHIgQmF1ZGlzIDxwYXNreUBzdXNlLmN6PgorLy8gICAgICAgICAgMjAwOC0yMDExLCBKYWt1YiBOYXJlYnNraSA8am5hcmViQGdtYWlsLmNvbT4KKworLyoqCisgKiBAZmlsZU92ZXJ2aWV3IEdlbmVyaWMgSmF2YVNjcmlwdCBjb2RlIChoZWxwZXIgZnVuY3Rpb25zKQorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBQYWRkaW5nICovCisKKy8qKgorICogcGFkIElOUFVUIG9uIHRoZSBsZWZ0IHdpdGggU1RSIHRoYXQgaXMgYXNzdW1lZCB0byBoYXZlIHZpc2libGUKKyAqIHdpZHRoIG9mIHNpbmdsZSBjaGFyYWN0ZXIgKGZvciBleGFtcGxlIG5vbmJyZWFrYWJsZSBzcGFjZXMpLAorICogdG8gV0lEVEggY2hhcmFjdGVycworICoKKyAqIGV4YW1wbGU6IHBhZExlZnRTdHIoMTIsIDMsICdcdTAwQTAnKSA9PSAnXHUwMEEwMTInCisgKiAgICAgICAgICAoJ1x1MDBBMCcgaXMgbm9uYnJlYWthYmxlIHNwYWNlKQorICoKKyAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30gaW5wdXQ6IG51bWJlciB0byBwYWQKKyAqIEBwYXJhbSB7TnVtYmVyfSB3aWR0aDogdmlzaWJsZSB3aWR0aCBvZiBvdXRwdXQKKyAqIEBwYXJhbSB7U3RyaW5nfSBzdHI6IHN0cmluZyB0byBwcmVmaXggdG8gc3RyaW5nLCBkZWZhdWx0cyB0byAnXHUwMEEwJworICogQHJldHVybnMge1N0cmluZ30gSU5QVVQgcHJlZml4ZWQgd2l0aCBTVFIgeCAoV0lEVEggLSBJTlBVVC5sZW5ndGgpCisgKi8KK2Z1bmN0aW9uIHBhZExlZnRTdHIoaW5wdXQsIHdpZHRoLCBzdHIpIHsKKwl2YXIgcHJlZml4ID0gJyc7CisJaWYgKHR5cGVvZiBzdHIgPT09ICd1bmRlZmluZWQnKSB7CisJCWNoID0gJ1x1MDBBMCc7IC8vIHVzaW5nICcmbmJzcDsnIGRvZXNuJ3Qgd29yayBpbiBhbGwgYnJvd3NlcnMKKwl9CisKKwl3aWR0aCAtPSBpbnB1dC50b1N0cmluZygpLmxlbmd0aDsKKwl3aGlsZSAod2lkdGggPiAwKSB7CisJCXByZWZpeCArPSBzdHI7CisJCXdpZHRoLS07CisJfQorCXJldHVybiBwcmVmaXggKyBpbnB1dDsKK30KKworLyoqCisgKiBQYWQgSU5QVVQgb24gdGhlIGxlZnQgdG8gV0lEVEgsIHVzaW5nIGdpdmVuIHBhZGRpbmcgY2hhcmFjdGVyIENILAorICogZm9yIGV4YW1wbGUgcGFkTGVmdCgnYScsIDMsICdfJykgaXMgJ19fYScKKyAqICAgICAgICAgICAgIHBhZExlZnQoNCwgMikgaXMgJzA0JyAoc2FtZSBhcyBwYWRMZWZ0KDQsIDIsICcwJykpCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGlucHV0OiBpbnB1dCB2YWx1ZSBjb252ZXJ0ZWQgdG8gc3RyaW5nLgorICogQHBhcmFtIHtOdW1iZXJ9IHdpZHRoOiBkZXNpcmVkIGxlbmd0aCBvZiBvdXRwdXQuCisgKiBAcGFyYW0ge1N0cmluZ30gY2g6IHNpbmdsZSBjaGFyYWN0ZXIgdG8gcHJlZml4IHRvIHN0cmluZywgZGVmYXVsdHMgdG8gJzAnLgorICoKKyAqIEByZXR1cm5zIHtTdHJpbmd9IE1vZGlmaWVkIHN0cmluZywgYXQgbGVhc3QgU0laRSBsZW5ndGguCisgKi8KK2Z1bmN0aW9uIHBhZExlZnQoaW5wdXQsIHdpZHRoLCBjaCkgeworCXZhciBzID0gaW5wdXQgKyAiIjsKKwlpZiAodHlwZW9mIGNoID09PSAndW5kZWZpbmVkJykgeworCQljaCA9ICcwJzsKKwl9CisKKwl3aGlsZSAocy5sZW5ndGggPCB3aWR0aCkgeworCQlzID0gY2ggKyBzOworCX0KKwlyZXR1cm4gczsKK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIEhhbmRsaW5nIGJyb3dzZXIgaW5jb21wYXRpYmlsaXRpZXMgKi8KKworLyoqCisgKiBDcmVhdGUgWE1MSHR0cFJlcXVlc3Qgb2JqZWN0IGluIGNyb3NzLWJyb3dzZXIgd2F5CisgKiBAcmV0dXJucyBYTUxIdHRwUmVxdWVzdCBvYmplY3QsIG9yIG51bGwKKyAqLworZnVuY3Rpb24gY3JlYXRlUmVxdWVzdE9iamVjdCgpIHsKKwl0cnkgeworCQlyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisJfSBjYXRjaCAoZSkge30KKwl0cnkgeworCQlyZXR1cm4gd2luZG93LmNyZWF0ZVJlcXVlc3QoKTsKKwl9IGNhdGNoIChlKSB7fQorCXRyeSB7CisJCXJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhUVFAiKTsKKwl9IGNhdGNoIChlKSB7fQorCXRyeSB7CisJCXJldHVybiBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKwl9IGNhdGNoIChlKSB7fQorCisJcmV0dXJuIG51bGw7Cit9CisKKworLyoqCisgKiBJbnNlcnQgcnVsZSBnaXZpbmcgc3BlY2lmaWVkIFNUWUxFIHRvIGdpdmVuIFNFTEVDVE9SIGF0IHRoZSBlbmQgb2YKKyAqIGZpcnN0IENTUyBzdHlsZXNoZWV0LgorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvcjogQ1NTIHNlbGVjdG9yLCBlLmcuICcuY2xhc3MnCisgKiBAcGFyYW0ge1N0cmluZ30gc3R5bGU6IHJ1bGUgY29udGVudHMsIGUuZy4gJ2JhY2tncm91bmQtY29sb3I6IHJlZDsnCisgKi8KK2Z1bmN0aW9uIGFkZENzc1J1bGUoc2VsZWN0b3IsIHN0eWxlKSB7CisJdmFyIHN0eWxlc2hlZXQgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1swXTsKKworCXZhciB0aGVSdWxlcyA9IFtdOworCWlmIChzdHlsZXNoZWV0LmNzc1J1bGVzKSB7ICAgICAvLyBXM0Mgd2F5CisJCXRoZVJ1bGVzID0gc3R5bGVzaGVldC5jc3NSdWxlczsKKwl9IGVsc2UgaWYgKHN0eWxlc2hlZXQucnVsZXMpIHsgLy8gSUUgd2F5CisJCXRoZVJ1bGVzID0gc3R5bGVzaGVldC5ydWxlczsKKwl9CisKKwlpZiAoc3R5bGVzaGVldC5pbnNlcnRSdWxlKSB7ICAgIC8vIFczQyB3YXkKKwkJc3R5bGVzaGVldC5pbnNlcnRSdWxlKHNlbGVjdG9yICsgJyB7ICcgKyBzdHlsZSArICcgfScsIHRoZVJ1bGVzLmxlbmd0aCk7CisJfSBlbHNlIGlmIChzdHlsZXNoZWV0LmFkZFJ1bGUpIHsgLy8gSUUgd2F5CisJCXN0eWxlc2hlZXQuYWRkUnVsZShzZWxlY3Rvciwgc3R5bGUpOworCX0KK30KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIFN1cHBvcnQgZm9yIGxlZ2FjeSBicm93c2VycyAqLworCisvKioKKyAqIFByb3ZpZGVzIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgbWV0aG9kLCBpZiB0aGVyZSBpcyBubyBuYXRpdmUKKyAqIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kLgorICoKKyAqIE5PVEUgdGhhdCB0aGVyZSBhcmUgbGltaXRzIGFuZCBkaWZmZXJlbmNlcyBjb21wYXJlZCB0byBuYXRpdmUKKyAqIGdldEVsZW1lbnRzQnlDbGFzc05hbWUgYXMgZGVmaW5lZCBieSBlLmcuOgorICogICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZQorICogICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9kb20uaHRtbCNkb20tZ2V0ZWxlbWVudHNieWNsYXNzbmFtZQorICogICBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9kb20uaHRtbCNkb20tZG9jdW1lbnQtZ2V0ZWxlbWVudHNieWNsYXNzbmFtZQorICoKKyAqIE5hbWVseSwgdGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBvbmx5IHNpbmdsZSBjbGFzcyBuYW1lIGFzCisgKiBhcmd1bWVudCBhbmQgbm90IHNldCBvZiBzcGFjZS1zZXBhcmF0ZWQgdG9rZW5zIHJlcHJlc2VudGluZyBjbGFzc2VzLAorICogaXQgcmV0dXJucyBBcnJheSBvZiBub2RlcyByYXRoZXIgdGhhbiBsaXZlIE5vZGVMaXN0LCBhbmQgaGFzCisgKiBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50IHdoZXJlIHlvdSBjYW4gbGltaXQgc2VhcmNoIHRvIGdpdmVuIHRhZ3MKKyAqICh2aWEgZ2V0RWxlbWVudHNCeVRhZ05hbWUpLgorICoKKyAqIEJhc2VkIG9uCisgKiAgIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nZXRlbGVtZW50c2J5Y2xhc3NuYW1lLworICogICBodHRwOi8vd3d3LmR1c3RpbmRpYXouY29tL2dldGVsZW1lbnRzYnljbGFzcy8KKyAqICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xODE4ODY1L2RvLXdlLWhhdmUtZ2V0ZWxlbWVudHNieWNsYXNzbmFtZS1pbi1qYXZhc2NyaXB0CisgKgorICogU2VlIGFsc28gaHR0cDovL2Vqb2huLm9yZy9ibG9nL2dldGVsZW1lbnRzYnljbGFzc25hbWUtc3BlZWQtY29tcGFyaXNvbi8KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gY2xhc3M6IG5hbWUgb2YgX3NpbmdsZV8gY2xhc3MgdG8gZmluZAorICogQHBhcmFtIHtTdHJpbmd9IFt0YWdoaW50XSBsaW1pdCBzZWFyY2ggdG8gZ2l2ZW4gdGFncworICogQHJldHVybnMge05vZGVbXX0gYXJyYXkgb2YgbWF0Y2hpbmcgZWxlbWVudHMKKyAqLworaWYgKCEoJ2dldEVsZW1lbnRzQnlDbGFzc05hbWUnIGluIGRvY3VtZW50KSkgeworCWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBmdW5jdGlvbiAoY2xhc3NuYW1lLCB0YWdoaW50KSB7CisJCXRhZ2hpbnQgPSB0YWdoaW50IHx8ICIqIjsKKwkJdmFyIGVsZW1lbnRzID0gKHRhZ2hpbnQgPT09ICIqIiAmJiBkb2N1bWVudC5hbGwpID8KKwkJICAgICAgICAgICAgICAgZG9jdW1lbnQuYWxsIDoKKwkJICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnaGludCk7CisJCXZhciBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgiKF58XFxzKSIgKyBjbGFzc25hbWUgKyAiKFxcc3wkKSIpOworCQl2YXIgbWF0Y2hlcz0gW107CisJCWZvciAodmFyIGkgPSAwLCBqID0gMCwgbiA9IGVsZW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykgeworCQkJdmFyIGVsPSBlbGVtZW50c1tpXTsKKwkJCWlmIChlbC5jbGFzc05hbWUgJiYgcGF0dGVybi50ZXN0KGVsLmNsYXNzTmFtZSkpIHsKKwkJCQkvLyBtYXRjaGVzLnB1c2goZWwpOworCQkJCW1hdGNoZXNbal0gPSBlbDsKKwkJCQlqKys7CisJCQl9CisJCX0KKwkJcmV0dXJuIG1hdGNoZXM7CisJfTsKK30gLy8gZW5kIGlmCisKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiB1bnF1b3RpbmcvdW5lc2NhcGluZyBmaWxlbmFtZXMgKi8KKworLyoqI0ArCisgKiBAY29uc3RhbnQKKyAqLwordmFyIGVzY0NvZGVSZSA9IC9cXChbXjAtN118WzAtN117MSwzfSkvZzsKK3ZhciBvY3RFc2NSZSA9IC9eWzAtN117MSwzfSQvOwordmFyIG1heWJlUXVvdGVkUmUgPSAvXlwiKC4qKVwiJC87CisvKiojQC0qLworCisvKioKKyAqIHVucXVvdGUgbWF5YmUgQy1xdW90ZWQgZmlsZW5hbWUgKGFzIHVzZWQgYnkgZ2l0LCBpLmUuIGl0IGlzCisgKiBpbiBkb3VibGUgcXVvdGVzICciJyBpZiB0aGVyZSBpcyBhbnkgZXNjYXBlIGNoYXJhY3RlciB1c2VkKQorICogZS5nLiAnYWEnIC0+ICdhYScsICciYVx0YSInIC0+ICdhCWEnCisgKgorICogQHBhcmFtIHtTdHJpbmd9IHN0cjogZ2l0LXF1b3RlZCBzdHJpbmcKKyAqIEByZXR1cm5zIHtTdHJpbmd9IFVucXVvdGVkIGFuZCB1bmVzY2FwZWQgc3RyaW5nCisgKgorICogQGdsb2JhbHMgZXNjQ29kZVJlLCBvY3RFc2NSZSwgbWF5YmVRdW90ZWRSZQorICovCitmdW5jdGlvbiB1bnF1b3RlKHN0cikgeworCWZ1bmN0aW9uIHVucShzZXEpIHsKKwkJdmFyIGVzID0geworCQkJLy8gY2hhcmFjdGVyIGVzY2FwZSBjb2RlcywgYWthIGVzY2FwZSBzZXF1ZW5jZXMgKGZyb20gQykKKwkJCS8vIHJlcGxhY2VtZW50cyBhcmUgdG8gc29tZSBleHRlbnQgSmF2YVNjcmlwdCBzcGVjaWZpYworCQkJdDogIlx0IiwgICAvLyB0YWIgICAgICAgICAgICAoSFQsIFRBQikKKwkJCW46ICJcbiIsICAgLy8gbmV3bGluZSAgICAgICAgKE5MKQorCQkJcjogIlxyIiwgICAvLyByZXR1cm4gICAgICAgICAoQ1IpCisJCQlmOiAiXGYiLCAgIC8vIGZvcm0gZmVlZCAgICAgIChGRikKKwkJCWI6ICJcYiIsICAgLy8gYmFja3NwYWNlICAgICAgKEJTKQorCQkJYTogIlx4MDciLCAvLyBhbGFybSAoYmVsbCkgICAoQkVMKQorCQkJZTogIlx4MUIiLCAvLyBlc2NhcGUgICAgICAgICAoRVNDKQorCQkJdjogIlx2IiAgICAvLyB2ZXJ0aWNhbCB0YWIgICAoVlQpCisJCX07CisKKwkJaWYgKHNlcS5zZWFyY2gob2N0RXNjUmUpICE9PSAtMSkgeworCQkJLy8gb2N0YWwgY2hhciBzZXF1ZW5jZQorCQkJcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoc2VxLCA4KSk7CisJCX0gZWxzZSBpZiAoc2VxIGluIGVzKSB7CisJCQkvLyBDIGVzY2FwZSBzZXF1ZW5jZSwgYWthIGNoYXJhY3RlciBlc2NhcGUgY29kZQorCQkJcmV0dXJuIGVzW3NlcV07CisJCX0KKwkJLy8gcXVvdGVkIG9yZGluYXJ5IGNoYXJhY3RlcgorCQlyZXR1cm4gc2VxOworCX0KKworCXZhciBtYXRjaCA9IHN0ci5tYXRjaChtYXliZVF1b3RlZFJlKTsKKwlpZiAobWF0Y2gpIHsKKwkJc3RyID0gbWF0Y2hbMV07CisJCS8vIHBlcmhhcHMgc3RyID0gZXZhbCgnIicrc3RyKyciJyk7IHdvdWxkIGJlIGVub3VnaD8KKwkJc3RyID0gc3RyLnJlcGxhY2UoZXNjQ29kZVJlLAorCQkJZnVuY3Rpb24gKHN1YnN0ciwgcDEsIG9mZnNldCwgcykgeyByZXR1cm4gdW5xKHAxKTsgfSk7CisJfQorCXJldHVybiBzdHI7Cit9CisKKy8qIGVuZCBvZiBjb21tb24tbGliLmpzICovCmRpZmYgLS1naXQgYS9naXR3ZWIvc3RhdGljL2pzL2xpYi9jb29raWVzLmpzIGIvZ2l0d2ViL3N0YXRpYy9qcy9saWIvY29va2llcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmI5YTA3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2l0d2ViL3N0YXRpYy9qcy9saWIvY29va2llcy5qcwpAQCAtMCwwICsxLDExNCBAQAorLyoqCisgKiBAZmlsZU92ZXJ2aWV3IEFjY2Vzc2luZyBjb29raWVzIGZyb20gSmF2YVNjcmlwdAorICogQGxpY2Vuc2UgR1BMdjIgb3IgbGF0ZXIKKyAqLworCisvKgorICogQmFzZWQgb24gc3Vic2VjdGlvbiAiQ29va2llcyBpbiBKYXZhU2NyaXB0IiBvZiAiUHJvZmVzc2lvbmFsCisgKiBKYXZhU2NyaXB0IGZvciBXZWIgRGV2ZWxvcGVycyIgYnkgTmljaG9sYXMgQy4gWmFrYXMgYW5kIGNvb2tpZQorICogcGx1Z2luIGZyb20galF1ZXJ5IChkdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgYW5kIEdQTCBsaWNlbnNlcykKKyAqLworCisKKy8qKgorICogQ3JlYXRlIGEgY29va2llIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIHZhbHVlLAorICogYW5kIG90aGVyIG9wdGlvbmFsIHBhcmFtZXRlcnMuCisgKgorICogQGV4YW1wbGUKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJyk7IC8vIHdpbGwgYmUgZGVsZXRlZCB3aGVuIGJyb3dzZXIgZXhpdHMKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJywgeyBleHBpcmVzOiBuZXcgRGF0ZShEYXRlLnBhcnNlKCdKYW4gMSwgMjAxMicpKSB9KTsKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJywgeyBleHBpcmVzOiA3IH0pOyAvLyA3IGRheXMgPSAxIHdlZWsKKyAqICAgc2V0Q29va2llKCdmb28nLCAnYmFyJywgeyBleHBpcmVzOiAxNCwgcGF0aDogJy8nIH0pOworICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBzTmFtZTogICAgVW5pcXVlIG5hbWUgb2YgYSBjb29raWUgKGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzKS4KKyAqIEBwYXJhbSB7U3RyaW5nfSBzVmFsdWU6ICAgVGhlIHN0cmluZyB2YWx1ZSBzdG9yZWQgaW4gYSBjb29raWUuCisgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIEFuIG9iamVjdCBsaXRlcmFsIGNvbnRhaW5pbmcga2V5L3ZhbHVlIHBhaXJzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHByb3ZpZGUgb3B0aW9uYWwgY29va2llIGF0dHJpYnV0ZXMuCisgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ8RGF0ZX0gW29wdGlvbnMuZXhwaXJlc10gRWl0aGVyIGxpdGVyYWwgc3RyaW5nIHRvIGJlIHVzZWQgYXMgY29va2llIGV4cGlyZXMsCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgdGhlIGV4cGlyYXRpb24gZGF0ZSBmcm9tIG5vdyBvbiBpbiBkYXlzLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBEYXRlIG9iamVjdCB0byBiZSB1c2VkIGFzIGNvb2tpZSBleHBpcmF0aW9uIGRhdGUuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBhIG5lZ2F0aXZlIHZhbHVlIGlzIHNwZWNpZmllZCBvciBhIGRhdGUgaW4gdGhlIHBhc3QpLAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvb2tpZSB3aWxsIGJlIGRlbGV0ZWQuCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gbnVsbCBvciBvbWl0dGVkLCB0aGUgY29va2llIHdpbGwgYmUgYSBzZXNzaW9uIGNvb2tpZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdpbGwgbm90IGJlIHJldGFpbmVkIHdoZW4gdGhlIGJyb3dzZXIgZXhpdHMuCisgKiBAcGFyYW0ge1N0cmluZ30gW29wdGlvbnMucGF0aF0gUmVzdHJpY3QgYWNjZXNzIG9mIGEgY29va2llIHRvIHBhcnRpY3VsYXIgZGlyZWN0b3J5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdDogcGF0aCBvZiBwYWdlIHRoYXQgY3JlYXRlZCB0aGUgY29va2llKS4KKyAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5kb21haW5dIE92ZXJyaWRlIHdoYXQgd2ViIHNpdGVzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyBjb29raWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0OiBkb21haW4gb2YgcGFnZSB0aGF0IGNyZWF0ZWQgdGhlIGNvb2tpZSkuCisgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnNlY3VyZV0gSWYgdHJ1ZSwgdGhlIHNlY3VyZSBhdHRyaWJ1dGUgb2YgdGhlIGNvb2tpZSB3aWxsIGJlIHNldAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgY29va2llIHdvdWxkIGJlIGFjY2Vzc2libGUgb25seSBmcm9tIHNlY3VyZSBzaXRlcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb29raWUgdHJhbnNtaXNzaW9uIHdpbGwgcmVxdWlyZSBzZWN1cmUgcHJvdG9jb2wgbGlrZSBIVFRQUykuCisgKi8KK2Z1bmN0aW9uIHNldENvb2tpZShzTmFtZSwgc1ZhbHVlLCBvcHRpb25zKSB7CisJb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CisJaWYgKHNWYWx1ZSA9PT0gbnVsbCkgeworCQlzVmFsdWUgPSAnJzsKKwkJb3B0aW9uLmV4cGlyZXMgPSAnZGVsZXRlJzsKKwl9CisKKwl2YXIgc0Nvb2tpZSA9IHNOYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHNWYWx1ZSk7CisKKwlpZiAob3B0aW9ucy5leHBpcmVzKSB7CisJCXZhciBvRXhwaXJlcyA9IG9wdGlvbnMuZXhwaXJlcywgc0RhdGU7CisJCWlmIChvRXhwaXJlcyA9PT0gJ2RlbGV0ZScpIHsKKwkJCXNEYXRlID0gJ1RodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UJzsKKwkJfSBlbHNlIGlmICh0eXBlb2Ygb0V4cGlyZXMgPT09ICdzdHJpbmcnKSB7CisJCQlzRGF0ZSA9IG9FeHBpcmVzOworCQl9IGVsc2UgeworCQkJdmFyIG9EYXRlOworCQkJaWYgKHR5cGVvZiBvRXhwaXJlcyA9PT0gJ251bWJlcicpIHsKKwkJCQlvRGF0ZSA9IG5ldyBEYXRlKCk7CisJCQkJb0RhdGUuc2V0VGltZShvRGF0ZS5nZXRUaW1lKCkgKyAob0V4cGlyZXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7IC8vIGRheXMgdG8gbXMKKwkJCX0gZWxzZSB7CisJCQkJb0RhdGUgPSBvRXhwaXJlczsKKwkJCX0KKwkJCXNEYXRlID0gb0RhdGUudG9HTVRTdHJpbmcoKTsKKwkJfQorCQlzQ29va2llICs9ICc7IGV4cGlyZXM9JyArIHNEYXRlOworCX0KKworCWlmIChvcHRpb25zLnBhdGgpIHsKKwkJc0Nvb2tpZSArPSAnOyBwYXRoPScgKyAob3B0aW9ucy5wYXRoKTsKKwl9CisJaWYgKG9wdGlvbnMuZG9tYWluKSB7CisJCXNDb29raWUgKz0gJzsgZG9tYWluPScgKyAob3B0aW9ucy5kb21haW4pOworCX0KKwlpZiAob3B0aW9ucy5zZWN1cmUpIHsKKwkJc0Nvb2tpZSArPSAnOyBzZWN1cmUnOworCX0KKwlkb2N1bWVudC5jb29raWUgPSBzQ29va2llOworfQorCisvKioKKyAqIEdldCB0aGUgdmFsdWUgb2YgYSBjb29raWUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KKyAqCisgKiBAcGFyYW0ge1N0cmluZ30gc05hbWU6IFVuaXF1ZSBuYW1lIG9mIGEgY29va2llIChsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlcykKKyAqIEByZXR1cm5zIHtTdHJpbmd8bnVsbH0gVGhlIHN0cmluZyB2YWx1ZSBzdG9yZWQgaW4gYSBjb29raWUKKyAqLworZnVuY3Rpb24gZ2V0Q29va2llKHNOYW1lKSB7CisJdmFyIHNSRSA9ICcoPzo7ICk/JyArIHNOYW1lICsgJz0oW147XSopOz8nOworCXZhciBvUkUgPSBuZXcgUmVnRXhwKHNSRSk7CisJaWYgKG9SRS50ZXN0KGRvY3VtZW50LmNvb2tpZSkpIHsKKwkJcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChSZWdFeHBbJyQxJ10pOworCX0gZWxzZSB7CisJCXJldHVybiBudWxsOworCX0KK30KKworLyoqCisgKiBEZWxldGUgY29va2llIHdpdGggZ2l2ZW4gbmFtZQorICoKKyAqIEBwYXJhbSB7U3RyaW5nfSBzTmFtZTogICAgVW5pcXVlIG5hbWUgb2YgYSBjb29raWUgKGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzKQorICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBBbiBvYmplY3QgbGl0ZXJhbCBjb250YWluaW5nIGtleS92YWx1ZSBwYWlycworICogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBwcm92aWRlIG9wdGlvbmFsIGNvb2tpZSBhdHRyaWJ1dGVzLgorICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnBhdGhdICAgTXVzdCBiZSB0aGUgc2FtZSBhcyB3aGVuIHNldHRpbmcgYSBjb29raWUKKyAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0aW9ucy5kb21haW5dIE11c3QgYmUgdGhlIHNhbWUgYXMgd2hlbiBzZXR0aW5nIGEgY29va2llCisgKi8KK2Z1bmN0aW9uIGRlbGV0ZUNvb2tpZShzTmFtZSwgb3B0aW9ucykgeworCW9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OworCW9wdGlvbnMuZXhwaXJlcyA9ICdkZWxldGUnOworCisJc2V0Q29va2llKHNOYW1lLCAnJywgb3B0aW9ucyk7Cit9CisKKy8qIGVuZCBvZiBjb29raWVzLmpzICovCmRpZmYgLS1naXQgYS9naXR3ZWIvc3RhdGljL2pzL2xpYi9kYXRldGltZS5qcyBiL2dpdHdlYi9zdGF0aWMvanMvbGliL2RhdGV0aW1lLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OGM2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9naXR3ZWIvc3RhdGljL2pzL2xpYi9kYXRldGltZS5qcwpAQCAtMCwwICsxLDE3NiBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDA3LCBGcmVkcmlrIEt1aXZpbmVuIDxmcmVrdWlAZ21haWwuY29tPgorLy8gICAgICAgICAgICAgICAyMDA3LCBQZXRyIEJhdWRpcyA8cGFza3lAc3VzZS5jej4KKy8vICAgICAgICAgIDIwMDgtMjAxMSwgSmFrdWIgTmFyZWJza2kgPGpuYXJlYkBnbWFpbC5jb20+CisKKy8qKgorICogQGZpbGVPdmVydmlldyBEYXRldGltZSBtYW5pcHVsYXRpb246IHBhcnNpbmcgYW5kIGZvcm1hdHRpbmcKKyAqIEBsaWNlbnNlIEdQTHYyIG9yIGxhdGVyCisgKi8KKworCisvKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gKi8KKy8qIHBhcnNpbmcgYW5kIHJldHJpZXZpbmcgZGF0ZXRpbWUgcmVsYXRlZCBpbmZvcm1hdGlvbiAqLworCisvKioKKyAqIHVzZWQgdG8gZXh0cmFjdCBob3VycyBhbmQgbWludXRlcyBmcm9tIHRpbWV6b25lIGluZm8sIGUuZyAnLTA5MDAnCisgKiBAY29uc3RhbnQKKyAqLwordmFyIHR6UmUgPSAvXihbK1wtXSkoWzAtOV1bMC05XSkoWzAtOV1bMC05XSkkLzsKKworLyoqCisgKiBjb252ZXJ0IG51bWVyaWMgdGltZXpvbmUgKy8tWlpaWiB0byBvZmZzZXQgZnJvbSBVVEMgaW4gc2Vjb25kcworICoKKyAqIEBwYXJhbSB7U3RyaW5nfSB0aW1lem9uZUluZm86IG51bWVyaWMgdGltZXpvbmUgJygrfC0pSEhNTScKKyAqIEByZXR1cm5zIHtOdW1iZXJ9IG9mZnNldCBmcm9tIFVUQyBpbiBzZWNvbmRzIGZvciB0aW1lem9uZQorICoKKyAqIEBnbG9iYWxzIHR6UmUKKyAqLworZnVuY3Rpb24gdGltZXpvbmVPZmZzZXQodGltZXpvbmVJbmZvKSB7CisJdmFyIG1hdGNoID0gdHpSZS5leGVjKHRpbWV6b25lSW5mbyk7CisJdmFyIHR6X3NpZ24gPSAobWF0Y2hbMV0gPT09ICctJyA/IC0xIDogKzEpOworCXZhciB0el9ob3VyID0gcGFyc2VJbnQobWF0Y2hbMl0sMTApOworCXZhciB0el9taW4gID0gcGFyc2VJbnQobWF0Y2hbM10sMTApOworCisJcmV0dXJuIHR6X3NpZ24qKCgodHpfaG91cio2MCkgKyB0el9taW4pKjYwKTsKK30KKworLyoqCisgKiByZXR1cm4gbG9jYWwgKGJyb3dzZXIpIHRpbWV6b25lIGFzIG9mZnNldCBmcm9tIFVUQyBpbiBzZWNvbmRzCisgKgorICogQHJldHVybnMge051bWJlcn0gb2Zmc2V0IGZyb20gVVRDIGluIHNlY29uZHMgZm9yIGxvY2FsIHRpbWV6b25lCisgKi8KK2Z1bmN0aW9uIGxvY2FsVGltZXpvbmVPZmZzZXQoKSB7CisJLy8gZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyB0aGUgdGltZS16b25lIG9mZnNldCBmcm9tIFVUQywKKwkvLyBpbiBfbWludXRlc18sIGZvciB0aGUgY3VycmVudCBsb2NhbGUKKwlyZXR1cm4gKChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpICogLTYwKTsKK30KKworLyoqCisgKiByZXR1cm4gbG9jYWwgKGJyb3dzZXIpIHRpbWV6b25lIGFzIG51bWVyaWMgdGltZXpvbmUgJygrfC0pSEhNTScKKyAqCisgKiBAcmV0dXJucyB7U3RyaW5nfSBsb2NhdCB0aW1lem9uZSBhcyAtLytaWlpaCisgKi8KK2Z1bmN0aW9uIGxvY2FsVGltZXpvbmVJbmZvKCkgeworCXZhciB0ek9mZnNldE1pbnV0ZXMgPSAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xOworCisJcmV0dXJuIGZvcm1hdFRpbWV6b25lSW5mbygwLCB0ek9mZnNldE1pbnV0ZXMpOworfQorCisKKy8qKgorICogUGFyc2UgUkZDLTI4MjIgZGF0ZSBpbnRvIGEgVW5peCB0aW1lc3RhbXAgKGludG8gZXBvY2gpCisgKgorICogQHBhcmFtIHtTdHJpbmd9IGRhdGU6IGRhdGUgaW4gUkZDLTI4MjIgZm9ybWF0LCBlLmcuICdUaHUsIDIxIERlYyAyMDAwIDE2OjAxOjA3ICswMjAwJworICogQHJldHVybnMge051bWJlcn0gZXBvY2ggaS5lLiBzZWNvbmRzIHNpbmNlICcwMDowMDowMCAxOTcwLTAxLTAxIFVUQycKKyAqLworZnVuY3Rpb24gcGFyc2VSRkMyODIyRGF0ZShkYXRlKSB7CisJLy8gRGF0ZS5wYXJzZSBhY2NlcHRzIHRoZSBJRVRGIHN0YW5kYXJkIChSRkMgMTEyMyBTZWN0aW9uIDUuMi4xNCBhbmQgZWxzZXdoZXJlKQorCS8vIGRhdGUgc3ludGF4LCB3aGljaCBpcyBkZWZpbmVkIGluIFJGQyAyODIyIChvYnNvbGV0ZXMgUkZDIDgyMikKKwkvLyBhbmQgcmV0dXJucyBudW1iZXIgb2YgX21pbGxpX3NlY29uZHMgc2luY2UgSmFudWFyeSAxLCAxOTcwLCAwMDowMDowMCBVVEMKKwlyZXR1cm4gRGF0ZS5wYXJzZShkYXRlKSAvIDEwMDA7Cit9CisKKworLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCisvKiBmb3JtYXR0aW5nIGRhdGUgKi8KKworLyoqCisgKiBmb3JtYXQgdGltZXpvbmUgb2Zmc2V0IGFzIG51bWVyaWNhbCB0aW1lem9uZSAnKCt8LSlISE1NJyBvciAnKCt8LSlISDpNTScKKyAqCisgKiBAcGFyYW0ge051bWJlcn0gaG91cnM6ICAgIG9mZnNldCBpbiBob3VycywgZS5nLiAyIGZvciAnKzAyMDAnCisgKiBAcGFyYW0ge051bWJlcn0gW21pbnV0ZXNdIG9mZnNldCBpbiBtaW51dGVzLCBlLmcuIDMwIGZvciAnLTQwMzAnOworICogICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBpcyBzcGxpdCBpbnRvIGhvdXJzIGlmIG5vdCAwIDw9IG1pbnV0ZXMgPCA2MCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGV4YW1wbGUgMTIwMCB3b3VsZCBnaXZlICcrMDEwMCc7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIDAKKyAqIEBwYXJhbSB7U3RyaW5nfSBbc2VwXSBzZXBhcmF0b3IgYmV0d2VlbiBob3VycyBhbmQgbWludXRlcyBwYXJ0LAorICogICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgaXMgJycsIG1pZ2h0IGJlICc6JyBmb3IgVzNDRFRGIChyZmMtMzMzOSkKKyAqIEByZXR1cm5zIHtTdHJpbmd9IHRpbWV6b25lIGluICcoK3wtKUhITU0nIG9yICcoK3wtKUhIOk1NJyBmb3JtYXQKKyAqLworZnVuY3Rpb24gZm9ybWF0VGltZXpvbmVJbmZvKGhvdXJzLCBtaW51dGVzLCBzZXApIHsKKwltaW51dGVzID0gbWludXRlcyB8fCAwOyAvLyB0byBiZSBhYmxlIHRvIHVzZSBmb3JtYXRUaW1lem9uZUluZm8oaGgpCisJc2VwID0gc2VwIHx8ICcnOyAvLyBkZWZhdWx0IGZvcm1hdCBpcyArLy1aWlpaCisKKwlpZiAobWludXRlcyA8IDAgfHwgbWludXRlcyA+IDU5KSB7CisJCWhvdXJzID0gbWludXRlcyA+IDAgPyBNYXRoLmZsb29yKG1pbnV0ZXMgLyA2MCkgOiBNYXRoLmNlaWwobWludXRlcyAvIDYwKTsKKwkJbWludXRlcyA9IE1hdGguYWJzKG1pbnV0ZXMgLSA2MCpob3Vycyk7IC8vIHNpZ24gb2YgbWludXRlcyBpcyBzaWduIG9mIGhvdXJzCisJCS8vIE5PVEU6IHRoaXMgd29ya3MgY29ycmVjdGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gVVRDLTAwOjMwIHRpbWV6b25lCisJfQorCisJdmFyIHR6U2lnbiA9IGhvdXJzID49IDAgPyAnKycgOiAnLSc7CisJaWYgKGhvdXJzIDwgMCkgeworCQlob3VycyA9IC1ob3VyczsgLy8gc2lnbiBpcyBzdG9yZWQgaW4gdHpTaWduCisJfQorCisJcmV0dXJuIHR6U2lnbiArIHBhZExlZnQoaG91cnMsIDIsICcwJykgKyBzZXAgKyBwYWRMZWZ0KG1pbnV0ZXMsIDIsICcwJyk7Cit9CisKKy8qKgorICogdHJhbnNsYXRlICd1dGMnIGFuZCAnbG9jYWwnIHRvIG51bWVyaWNhbCB0aW1lem9uZQorICogQHBhcmFtIHtTdHJpbmd9IHRpbWV6b25lSW5mbzogbWlnaHQgYmUgJ3V0Yycgb3IgJ2xvY2FsJyAoYnJvd3NlcikKKyAqLworZnVuY3Rpb24gbm9ybWFsaXplVGltZXpvbmVJbmZvKHRpbWV6b25lSW5mbykgeworCXN3aXRjaCAodGltZXpvbmVJbmZvKSB7CisJY2FzZSAndXRjJzoKKwkJcmV0dXJuICcrMDAwMCc7CisJY2FzZSAnbG9jYWwnOiAvLyAnbG9jYWwnIGlzIGJyb3dzZXIgdGltZXpvbmUKKwkJcmV0dXJuIGxvY2FsVGltZXpvbmVJbmZvKCk7CisJfQorCXJldHVybiB0aW1lem9uZUluZm87Cit9CisKKworLyoqCisgKiByZXR1cm4gZGF0ZSBpbiBsb2NhbCB0aW1lIGZvcm1hdHRlZCBpbiBpc28tODYwMSBsaWtlIGZvcm1hdAorICogJ3l5eXktbW0tZGQgSEg6TU06U1MgKy8tWlpaWicgZS5nLiAnMjAwNS0wOC0wNyAyMTo0OTo0NiArMDIwMCcKKyAqCisgKiBAcGFyYW0ge051bWJlcn0gZXBvY2g6IHNlY29uZHMgc2luY2UgJzAwOjAwOjAwIDE5NzAtMDEtMDEgVVRDJworICogQHBhcmFtIHtTdHJpbmd9IHRpbWV6b25lSW5mbzogbnVtZXJpYyB0aW1lem9uZSAnKCt8LSlISE1NJworICogQHJldHVybnMge1N0cmluZ30gZGF0ZSBpbiBsb2NhbCB0aW1lIGluIGlzby04NjAxIGxpa2UgZm9ybWF0CisgKi8KK2Z1bmN0aW9uIGZvcm1hdERhdGVJU09Mb2NhbChlcG9jaCwgdGltZXpvbmVJbmZvKSB7CisJLy8gZGF0ZSBjb3JyZWN0ZWQgYnkgdGltZXpvbmUKKwl2YXIgbG9jYWxEYXRlID0gbmV3IERhdGUoMTAwMCAqIChlcG9jaCArCisJCXRpbWV6b25lT2Zmc2V0KHRpbWV6b25lSW5mbykpKTsKKwl2YXIgbG9jYWxEYXRlU3RyID0gLy8gZS5nLiAnMjAwNS0wOC0wNycKKwkJbG9jYWxEYXRlLmdldFVUQ0Z1bGxZZWFyKCkgICAgICAgICAgICAgICAgICsgJy0nICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDTW9udGgoKSsxLCAyLCAnMCcpICsgJy0nICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDRGF0ZSgpLCAgICAyLCAnMCcpOworCXZhciBsb2NhbFRpbWVTdHIgPSAvLyBlLmcuICcyMTo0OTo0NicKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDSG91cnMoKSwgICAyLCAnMCcpICsgJzonICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDTWludXRlcygpLCAyLCAnMCcpICsgJzonICsKKwkJcGFkTGVmdChsb2NhbERhdGUuZ2V0VVRDU2Vjb25kcygpLCAyLCAnMCcpOworCisJcmV0dXJuIGxvY2FsRGF0ZVN0ciArICcgJyArIGxvY2FsVGltZVN0ciArICcgJyArIHRpbWV6b25lSW5mbzsKK30KKworLyoqCisgKiByZXR1cm4gZGF0ZSBpbiBsb2NhbCB0aW1lIGZvcm1hdHRlZCBpbiByZmMtMjgyMiBmb3JtYXQKKyAqIGUuZy4gJ1RodSwgMjEgRGVjIDIwMDAgMTY6MDE6MDcgKzAyMDAnCisgKgorICogQHBhcmFtIHtOdW1iZXJ9IGVwb2NoOiBzZWNvbmRzIHNpbmNlICcwMDowMDowMCAxOTcwLTAxLTAxIFVUQycKKyAqIEBwYXJhbSB7U3RyaW5nfSB0aW1lem9uZUluZm86IG51bWVyaWMgdGltZXpvbmUgJygrfC0pSEhNTScKKyAqIEBwYXJhbSB7Qm9vbGVhbn0gW3BhZERheV0gZS5nLiAnU3VuLCAwNyBBdWcnIGlmIHRydWUsICdTdW4sIDcgQXVnJyBvdGhlcndpc2UKKyAqIEByZXR1cm5zIHtTdHJpbmd9IGRhdGUgaW4gbG9jYWwgdGltZSBpbiByZmMtMjgyMiBmb3JtYXQKKyAqLworZnVuY3Rpb24gZm9ybWF0RGF0ZVJGQzI4ODIoZXBvY2gsIHRpbWV6b25lSW5mbywgcGFkRGF5KSB7CisJLy8gQSBzaG9ydCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9udGgsIHRocmVlIGxldHRlcnMKKwl2YXIgbW9udGhzID0gWyJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyJdOworCS8vIEEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiBhIGRheSwgdGhyZWUgbGV0dGVycworCXZhciBkYXlzID0gWyJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiXTsKKwkvLyBkYXRlIGNvcnJlY3RlZCBieSB0aW1lem9uZQorCXZhciBsb2NhbERhdGUgPSBuZXcgRGF0ZSgxMDAwICogKGVwb2NoICsKKwkJdGltZXpvbmVPZmZzZXQodGltZXpvbmVJbmZvKSkpOworCXZhciBsb2NhbERhdGVTdHIgPSAvLyBlLmcuICdTdW4sIDcgQXVnIDIwMDUnIG9yICdTdW4sIDA3IEF1ZyAyMDA1JworCQlkYXlzW2xvY2FsRGF0ZS5nZXRVVENEYXkoKV0gKyAnLCAnICsKKwkJKHBhZERheSA/IHBhZExlZnQobG9jYWxEYXRlLmdldFVUQ0RhdGUoKSwyLCcwJykgOiBsb2NhbERhdGUuZ2V0VVRDRGF0ZSgpKSArICcgJyArCisJCW1vbnRoc1tsb2NhbERhdGUuZ2V0VVRDTW9udGgoKV0gKyAnICcgKworCQlsb2NhbERhdGUuZ2V0VVRDRnVsbFllYXIoKTsKKwl2YXIgbG9jYWxUaW1lU3RyID0gLy8gZS5nLiAnMjE6NDk6NDYnCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ0hvdXJzKCksICAgMiwgJzAnKSArICc6JyArCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ01pbnV0ZXMoKSwgMiwgJzAnKSArICc6JyArCisJCXBhZExlZnQobG9jYWxEYXRlLmdldFVUQ1NlY29uZHMoKSwgMiwgJzAnKTsKKworCXJldHVybiBsb2NhbERhdGVTdHIgKyAnICcgKyBsb2NhbFRpbWVTdHIgKyAnICcgKyB0aW1lem9uZUluZm87Cit9CisKKy8qIGVuZCBvZiBkYXRldGltZS5qcyAqLwpkaWZmIC0tZ2l0IGEvZ3BnLWludGVyZmFjZS5jIGIvZ3BnLWludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzJmZTMKLS0tIC9kZXYvbnVsbAorKysgYi9ncGctaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwyNjAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAiZ3BnLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisKK3N0YXRpYyBjaGFyICpjb25maWd1cmVkX3NpZ25pbmdfa2V5Oworc3RhdGljIGNvbnN0IGNoYXIgKmdwZ19wcm9ncmFtID0gImdwZyI7CisKKyNkZWZpbmUgUEdQX1NJR05BVFVSRSAiLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0iCisjZGVmaW5lIFBHUF9NRVNTQUdFICItLS0tLUJFR0lOIFBHUCBNRVNTQUdFLS0tLS0iCisKK3ZvaWQgc2lnbmF0dXJlX2NoZWNrX2NsZWFyKHN0cnVjdCBzaWduYXR1cmVfY2hlY2sgKnNpZ2MpCit7CisJZnJlZShzaWdjLT5wYXlsb2FkKTsKKwlmcmVlKHNpZ2MtPmdwZ19vdXRwdXQpOworCWZyZWUoc2lnYy0+Z3BnX3N0YXR1cyk7CisJZnJlZShzaWdjLT5zaWduZXIpOworCWZyZWUoc2lnYy0+a2V5KTsKKwlzaWdjLT5wYXlsb2FkID0gTlVMTDsKKwlzaWdjLT5ncGdfb3V0cHV0ID0gTlVMTDsKKwlzaWdjLT5ncGdfc3RhdHVzID0gTlVMTDsKKwlzaWdjLT5zaWduZXIgPSBOVUxMOworCXNpZ2MtPmtleSA9IE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeworCWNoYXIgcmVzdWx0OworCWNvbnN0IGNoYXIgKmNoZWNrOworfSBzaWdjaGVja19ncGdfc3RhdHVzW10gPSB7CisJeyAnRycsICJcbltHTlVQRzpdIEdPT0RTSUcgIiB9LAorCXsgJ0InLCAiXG5bR05VUEc6XSBCQURTSUcgIiB9LAorCXsgJ1UnLCAiXG5bR05VUEc6XSBUUlVTVF9ORVZFUiIgfSwKKwl7ICdVJywgIlxuW0dOVVBHOl0gVFJVU1RfVU5ERUZJTkVEIiB9LAorfTsKKwordm9pZCBwYXJzZV9ncGdfb3V0cHV0KHN0cnVjdCBzaWduYXR1cmVfY2hlY2sgKnNpZ2MpCit7CisJY29uc3QgY2hhciAqYnVmID0gc2lnYy0+Z3BnX3N0YXR1czsKKwlpbnQgaTsKKworCS8qIEl0ZXJhdGUgb3ZlciBhbGwgc2VhcmNoIHN0cmluZ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaWdjaGVja19ncGdfc3RhdHVzKTsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmZvdW5kLCAqbmV4dDsKKworCQlpZiAoIXNraXBfcHJlZml4KGJ1Ziwgc2lnY2hlY2tfZ3BnX3N0YXR1c1tpXS5jaGVjayArIDEsICZmb3VuZCkpIHsKKwkJCWZvdW5kID0gc3Ryc3RyKGJ1Ziwgc2lnY2hlY2tfZ3BnX3N0YXR1c1tpXS5jaGVjayk7CisJCQlpZiAoIWZvdW5kKQorCQkJCWNvbnRpbnVlOworCQkJZm91bmQgKz0gc3RybGVuKHNpZ2NoZWNrX2dwZ19zdGF0dXNbaV0uY2hlY2spOworCQl9CisJCXNpZ2MtPnJlc3VsdCA9IHNpZ2NoZWNrX2dwZ19zdGF0dXNbaV0ucmVzdWx0OworCQkvKiBUaGUgdHJ1c3QgbWVzc2FnZXMgYXJlIG5vdCBmb2xsb3dlZCBieSBrZXkvc2lnbmVyIGluZm9ybWF0aW9uICovCisJCWlmIChzaWdjLT5yZXN1bHQgIT0gJ1UnKSB7CisJCQlzaWdjLT5rZXkgPSB4bWVtZHVweihmb3VuZCwgMTYpOworCQkJZm91bmQgKz0gMTc7CisJCQluZXh0ID0gc3RyY2hybnVsKGZvdW5kLCAnXG4nKTsKKwkJCXNpZ2MtPnNpZ25lciA9IHhtZW1kdXB6KGZvdW5kLCBuZXh0IC0gZm91bmQpOworCQl9CisJfQorfQorCitpbnQgY2hlY2tfc2lnbmF0dXJlKGNvbnN0IGNoYXIgKnBheWxvYWQsIHNpemVfdCBwbGVuLCBjb25zdCBjaGFyICpzaWduYXR1cmUsCisJc2l6ZV90IHNsZW4sIHN0cnVjdCBzaWduYXR1cmVfY2hlY2sgKnNpZ2MpCit7CisJc3RydWN0IHN0cmJ1ZiBncGdfb3V0cHV0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBncGdfc3RhdHVzID0gU1RSQlVGX0lOSVQ7CisJaW50IHN0YXR1czsKKworCXNpZ2MtPnJlc3VsdCA9ICdOJzsKKworCXN0YXR1cyA9IHZlcmlmeV9zaWduZWRfYnVmZmVyKHBheWxvYWQsIHBsZW4sIHNpZ25hdHVyZSwgc2xlbiwKKwkJCQkgICAgICAmZ3BnX291dHB1dCwgJmdwZ19zdGF0dXMpOworCWlmIChzdGF0dXMgJiYgIWdwZ19vdXRwdXQubGVuKQorCQlnb3RvIG91dDsKKwlzaWdjLT5wYXlsb2FkID0geG1lbWR1cHoocGF5bG9hZCwgcGxlbik7CisJc2lnYy0+Z3BnX291dHB1dCA9IHN0cmJ1Zl9kZXRhY2goJmdwZ19vdXRwdXQsIE5VTEwpOworCXNpZ2MtPmdwZ19zdGF0dXMgPSBzdHJidWZfZGV0YWNoKCZncGdfc3RhdHVzLCBOVUxMKTsKKwlwYXJzZV9ncGdfb3V0cHV0KHNpZ2MpOworCisgb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZncGdfc3RhdHVzKTsKKwlzdHJidWZfcmVsZWFzZSgmZ3BnX291dHB1dCk7CisKKwlyZXR1cm4gc2lnYy0+cmVzdWx0ICE9ICdHJyAmJiBzaWdjLT5yZXN1bHQgIT0gJ1UnOworfQorCit2b2lkIHByaW50X3NpZ25hdHVyZV9idWZmZXIoY29uc3Qgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYywgdW5zaWduZWQgZmxhZ3MpCit7CisJY29uc3QgY2hhciAqb3V0cHV0ID0gZmxhZ3MgJiBHUEdfVkVSSUZZX1JBVyA/CisJCXNpZ2MtPmdwZ19zdGF0dXMgOiBzaWdjLT5ncGdfb3V0cHV0OworCisJaWYgKGZsYWdzICYgR1BHX1ZFUklGWV9WRVJCT1NFICYmIHNpZ2MtPnBheWxvYWQpCisJCWZwdXRzKHNpZ2MtPnBheWxvYWQsIHN0ZG91dCk7CisKKwlpZiAob3V0cHV0KQorCQlmcHV0cyhvdXRwdXQsIHN0ZGVycik7Cit9CisKKy8qCisgKiBMb29rIGF0IEdQRyBzaWduZWQgY29udGVudCAoZS5nLiBhIHNpZ25lZCB0YWcgb2JqZWN0KSwgd2hvc2UKKyAqIHBheWxvYWQgaXMgZm9sbG93ZWQgYnkgYSBkZXRhY2hlZCBzaWduYXR1cmUgb24gaXQuICBSZXR1cm4gdGhlCisgKiBvZmZzZXQgd2hlcmUgdGhlIGVtYmVkZGVkIGRldGFjaGVkIHNpZ25hdHVyZSBiZWdpbnMsIG9yIHRoZSBlbmQgb2YKKyAqIHRoZSBkYXRhIHdoZW4gdGhlcmUgaXMgbm8gc3VjaCBzaWduYXR1cmUuCisgKi8KK3NpemVfdCBwYXJzZV9zaWduYXR1cmUoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJY2hhciAqZW9sOworCXNpemVfdCBsZW4gPSAwOworCXdoaWxlIChsZW4gPCBzaXplICYmICFzdGFydHNfd2l0aChidWYgKyBsZW4sIFBHUF9TSUdOQVRVUkUpICYmCisJCQkhc3RhcnRzX3dpdGgoYnVmICsgbGVuLCBQR1BfTUVTU0FHRSkpIHsKKwkJZW9sID0gbWVtY2hyKGJ1ZiArIGxlbiwgJ1xuJywgc2l6ZSAtIGxlbik7CisJCWxlbiArPSBlb2wgPyBlb2wgLSAoYnVmICsgbGVuKSArIDEgOiBzaXplIC0gbGVuOworCX0KKwlyZXR1cm4gbGVuOworfQorCit2b2lkIHNldF9zaWduaW5nX2tleShjb25zdCBjaGFyICprZXkpCit7CisJZnJlZShjb25maWd1cmVkX3NpZ25pbmdfa2V5KTsKKwljb25maWd1cmVkX3NpZ25pbmdfa2V5ID0geHN0cmR1cChrZXkpOworfQorCitpbnQgZ2l0X2dwZ19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJaWYgKCFzdHJjbXAodmFyLCAidXNlci5zaWduaW5na2V5IikpIHsKKwkJc2V0X3NpZ25pbmdfa2V5KHZhbHVlKTsKKwl9CisJaWYgKCFzdHJjbXAodmFyLCAiZ3BnLnByb2dyYW0iKSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWdwZ19wcm9ncmFtID0geHN0cmR1cCh2YWx1ZSk7CisJfQorCXJldHVybiAwOworfQorCitjb25zdCBjaGFyICpnZXRfc2lnbmluZ19rZXkodm9pZCkKK3sKKwlpZiAoY29uZmlndXJlZF9zaWduaW5nX2tleSkKKwkJcmV0dXJuIGNvbmZpZ3VyZWRfc2lnbmluZ19rZXk7CisJcmV0dXJuIGdpdF9jb21taXR0ZXJfaW5mbyhJREVOVF9TVFJJQ1R8SURFTlRfTk9fREFURSk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBkZXRhY2hlZCBzaWduYXR1cmUgZm9yIHRoZSBjb250ZW50cyBvZiAiYnVmZmVyIiBhbmQgYXBwZW5kCisgKiBpdCBhZnRlciAic2lnbmF0dXJlIjsgImJ1ZmZlciIgYW5kICJzaWduYXR1cmUiIGNhbiBiZSB0aGUgc2FtZQorICogc3RyYnVmIGluc3RhbmNlLCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgZGV0YWNoZWQgc2lnbmF0dXJlIGFwcGVuZGVkCisgKiBhdCB0aGUgZW5kLgorICovCitpbnQgc2lnbl9idWZmZXIoc3RydWN0IHN0cmJ1ZiAqYnVmZmVyLCBzdHJ1Y3Qgc3RyYnVmICpzaWduYXR1cmUsIGNvbnN0IGNoYXIgKnNpZ25pbmdfa2V5KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGdwZyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmdzWzRdOworCXNzaXplX3QgbGVuOworCXNpemVfdCBpLCBqLCBib3R0b207CisKKwlncGcuYXJndiA9IGFyZ3M7CisJZ3BnLmluID0gLTE7CisJZ3BnLm91dCA9IC0xOworCWFyZ3NbMF0gPSBncGdfcHJvZ3JhbTsKKwlhcmdzWzFdID0gIi1ic2F1IjsKKwlhcmdzWzJdID0gc2lnbmluZ19rZXk7CisJYXJnc1szXSA9IE5VTEw7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmZ3BnKSkKKwkJcmV0dXJuIGVycm9yKF8oImNvdWxkIG5vdCBydW4gZ3BnLiIpKTsKKworCS8qCisJICogV2hlbiB0aGUgdXNlcm5hbWUgc2lnbmluZ2tleSBpcyBiYWQsIHByb2dyYW0gY291bGQgYmUgdGVybWluYXRlZAorCSAqIGJlY2F1c2UgZ3BnIGV4aXRzIHdpdGhvdXQgcmVhZGluZyBhbmQgdGhlbiB3cml0ZSBnZXRzIFNJR1BJUEUuCisJICovCisJc2lnY2hhaW5fcHVzaChTSUdQSVBFLCBTSUdfSUdOKTsKKworCWlmICh3cml0ZV9pbl9mdWxsKGdwZy5pbiwgYnVmZmVyLT5idWYsIGJ1ZmZlci0+bGVuKSAhPSBidWZmZXItPmxlbikgeworCQljbG9zZShncGcuaW4pOworCQljbG9zZShncGcub3V0KTsKKwkJZmluaXNoX2NvbW1hbmQoJmdwZyk7CisJCXJldHVybiBlcnJvcihfKCJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiKSk7CisJfQorCWNsb3NlKGdwZy5pbik7CisKKwlib3R0b20gPSBzaWduYXR1cmUtPmxlbjsKKwlsZW4gPSBzdHJidWZfcmVhZChzaWduYXR1cmUsIGdwZy5vdXQsIDEwMjQpOworCWNsb3NlKGdwZy5vdXQpOworCisJc2lnY2hhaW5fcG9wKFNJR1BJUEUpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZncGcpIHx8ICFsZW4gfHwgbGVuIDwgMCkKKwkJcmV0dXJuIGVycm9yKF8oImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIpKTsKKworCS8qIFN0cmlwIENSIGZyb20gdGhlIGxpbmUgZW5kaW5ncywgaW4gY2FzZSB3ZSBhcmUgb24gV2luZG93cy4gKi8KKwlmb3IgKGkgPSBqID0gYm90dG9tOyBpIDwgc2lnbmF0dXJlLT5sZW47IGkrKykKKwkJaWYgKHNpZ25hdHVyZS0+YnVmW2ldICE9ICdccicpIHsKKwkJCWlmIChpICE9IGopCisJCQkJc2lnbmF0dXJlLT5idWZbal0gPSBzaWduYXR1cmUtPmJ1ZltpXTsKKwkJCWorKzsKKwkJfQorCXN0cmJ1Zl9zZXRsZW4oc2lnbmF0dXJlLCBqKTsKKworCXJldHVybiAwOworfQorCisvKgorICogUnVuICJncGciIHRvIHNlZSBpZiB0aGUgcGF5bG9hZCBtYXRjaGVzIHRoZSBkZXRhY2hlZCBzaWduYXR1cmUuCisgKiBncGdfb3V0cHV0LCB3aGVuIHNldCwgcmVjZWl2ZXMgdGhlIGRpYWdub3N0aWMgb3V0cHV0IGZyb20gR1BHLgorICogZ3BnX3N0YXR1cywgd2hlbiBzZXQsIHJlY2VpdmVzIHRoZSBzdGF0dXMgb3V0cHV0IGZyb20gR1BHLgorICovCitpbnQgdmVyaWZ5X3NpZ25lZF9idWZmZXIoY29uc3QgY2hhciAqcGF5bG9hZCwgc2l6ZV90IHBheWxvYWRfc2l6ZSwKKwkJCSBjb25zdCBjaGFyICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfc2l6ZSwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICpncGdfb3V0cHV0LCBzdHJ1Y3Qgc3RyYnVmICpncGdfc3RhdHVzKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGdwZyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmdzX2dwZ1tdID0ge05VTEwsICItLXN0YXR1cy1mZD0xIiwgIi0tdmVyaWZ5IiwgIkZJTEUiLCAiLSIsIE5VTEx9OworCWNoYXIgcGF0aFtQQVRIX01BWF07CisJaW50IGZkLCByZXQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmICpwYnVmID0gJmJ1ZjsKKworCWFyZ3NfZ3BnWzBdID0gZ3BnX3Byb2dyYW07CisJZmQgPSBnaXRfbWtzdGVtcChwYXRoLCBQQVRIX01BWCwgIi5naXRfdnRhZ190bXBYWFhYWFgiKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZXJyb3IoXygiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAnJXMnOiAlcyIpLAorCQkJICAgICBwYXRoLCBzdHJlcnJvcihlcnJubykpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzaWduYXR1cmUsIHNpZ25hdHVyZV9zaXplKSA8IDApCisJCXJldHVybiBlcnJvcihfKCJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJzogJXMiKSwKKwkJCSAgICAgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwljbG9zZShmZCk7CisKKwlncGcuYXJndiA9IGFyZ3NfZ3BnOworCWdwZy5pbiA9IC0xOworCWdwZy5vdXQgPSAtMTsKKwlpZiAoZ3BnX291dHB1dCkKKwkJZ3BnLmVyciA9IC0xOworCWFyZ3NfZ3BnWzNdID0gcGF0aDsKKwlpZiAoc3RhcnRfY29tbWFuZCgmZ3BnKSkgeworCQl1bmxpbmsocGF0aCk7CisJCXJldHVybiBlcnJvcihfKCJjb3VsZCBub3QgcnVuIGdwZy4iKSk7CisJfQorCisJd3JpdGVfaW5fZnVsbChncGcuaW4sIHBheWxvYWQsIHBheWxvYWRfc2l6ZSk7CisJY2xvc2UoZ3BnLmluKTsKKworCWlmIChncGdfb3V0cHV0KSB7CisJCXN0cmJ1Zl9yZWFkKGdwZ19vdXRwdXQsIGdwZy5lcnIsIDApOworCQljbG9zZShncGcuZXJyKTsKKwl9CisJaWYgKGdwZ19zdGF0dXMpCisJCXBidWYgPSBncGdfc3RhdHVzOworCXN0cmJ1Zl9yZWFkKHBidWYsIGdwZy5vdXQsIDApOworCWNsb3NlKGdwZy5vdXQpOworCisJcmV0ID0gZmluaXNoX2NvbW1hbmQoJmdwZyk7CisKKwl1bmxpbmtfb3Jfd2FybihwYXRoKTsKKworCXJldCB8PSAhc3Ryc3RyKHBidWYtPmJ1ZiwgIlxuW0dOVVBHOl0gR09PRFNJRyAiKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsgLyogbm8gbWF0dGVyIGl0IHdhcyB1c2VkIG9yIG5vdCAqLworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2dwZy1pbnRlcmZhY2UuaCBiL2dwZy1pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTY4ODg1Ci0tLSAvZGV2L251bGwKKysrIGIvZ3BnLWludGVyZmFjZS5oCkBAIC0wLDAgKzEsMzcgQEAKKyNpZm5kZWYgR1BHX0lOVEVSRkFDRV9ICisjZGVmaW5lIEdQR19JTlRFUkZBQ0VfSAorCisjZGVmaW5lIEdQR19WRVJJRllfVkVSQk9TRQkxCisjZGVmaW5lIEdQR19WRVJJRllfUkFXCQkyCisKK3N0cnVjdCBzaWduYXR1cmVfY2hlY2sgeworCWNoYXIgKnBheWxvYWQ7CisJY2hhciAqZ3BnX291dHB1dDsKKwljaGFyICpncGdfc3RhdHVzOworCisJLyoKKwkgKiBwb3NzaWJsZSAicmVzdWx0IjoKKwkgKiAwIChub3QgY2hlY2tlZCkKKwkgKiBOIChjaGVja2VkIGJ1dCBubyBmdXJ0aGVyIHJlc3VsdCkKKwkgKiBVICh1bnRydXN0ZWQgZ29vZCkKKwkgKiBHIChnb29kKQorCSAqIEIgKGJhZCkKKwkgKi8KKwljaGFyIHJlc3VsdDsKKwljaGFyICpzaWduZXI7CisJY2hhciAqa2V5OworfTsKKworZXh0ZXJuIHZvaWQgc2lnbmF0dXJlX2NoZWNrX2NsZWFyKHN0cnVjdCBzaWduYXR1cmVfY2hlY2sgKnNpZ2MpOworZXh0ZXJuIHNpemVfdCBwYXJzZV9zaWduYXR1cmUoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgcGFyc2VfZ3BnX291dHB1dChzdHJ1Y3Qgc2lnbmF0dXJlX2NoZWNrICopOworZXh0ZXJuIGludCBzaWduX2J1ZmZlcihzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIHN0cnVjdCBzdHJidWYgKnNpZ25hdHVyZSwgY29uc3QgY2hhciAqc2lnbmluZ19rZXkpOworZXh0ZXJuIGludCB2ZXJpZnlfc2lnbmVkX2J1ZmZlcihjb25zdCBjaGFyICpwYXlsb2FkLCBzaXplX3QgcGF5bG9hZF9zaXplLCBjb25zdCBjaGFyICpzaWduYXR1cmUsIHNpemVfdCBzaWduYXR1cmVfc2l6ZSwgc3RydWN0IHN0cmJ1ZiAqZ3BnX291dHB1dCwgc3RydWN0IHN0cmJ1ZiAqZ3BnX3N0YXR1cyk7CitleHRlcm4gaW50IGdpdF9ncGdfY29uZmlnKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgc2V0X3NpZ25pbmdfa2V5KGNvbnN0IGNoYXIgKik7CitleHRlcm4gY29uc3QgY2hhciAqZ2V0X3NpZ25pbmdfa2V5KHZvaWQpOworZXh0ZXJuIGludCBjaGVja19zaWduYXR1cmUoY29uc3QgY2hhciAqcGF5bG9hZCwgc2l6ZV90IHBsZW4sCisJY29uc3QgY2hhciAqc2lnbmF0dXJlLCBzaXplX3Qgc2xlbiwgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYyk7Cit2b2lkIHByaW50X3NpZ25hdHVyZV9idWZmZXIoY29uc3Qgc3RydWN0IHNpZ25hdHVyZV9jaGVjayAqc2lnYywgdW5zaWduZWQgZmxhZ3MpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2dyYXBoLmMgYi9ncmFwaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNWEwOWEKLS0tIC9kZXYvbnVsbAorKysgYi9ncmFwaC5jCkBAIC0wLDAgKzEsMTMzMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJncmFwaC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorCisvKiBJbnRlcm5hbCBBUEkgKi8KKworLyoKKyAqIE91dHB1dCBhIHBhZGRpbmcgbGluZSBpbiB0aGUgZ3JhcGguCisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ3JhcGhfbmV4dF9saW5lKCkuICBIb3dldmVyLCBpdCBpcyBndWFyYW50ZWVkIHRvCisgKiBuZXZlciBwcmludCB0aGUgY3VycmVudCBjb21taXQgbGluZS4gIEluc3RlYWQsIGlmIHRoZSBjb21taXQgbGluZSBpcworICogbmV4dCwgaXQgd2lsbCBzaW1wbHkgb3V0cHV0IGEgbGluZSBvZiB2ZXJ0aWNhbCBwYWRkaW5nLCBleHRlbmRpbmcgdGhlCisgKiBicmFuY2ggbGluZXMgZG93bndhcmRzLCBidXQgbGVhdmluZyB0aGVtIG90aGVyd2lzZSB1bmNoYW5nZWQuCisgKi8KK3N0YXRpYyB2b2lkIGdyYXBoX3BhZGRpbmdfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpOworCisvKgorICogUHJpbnQgYSBzdHJidWYgdG8gc3Rkb3V0LiAgSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBhbGwgbGluZXMgYnV0IHRoZQorICogZmlyc3Qgd2lsbCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBncmFwaCBvdXRwdXQuCisgKgorICogSWYgdGhlIHN0cmJ1ZiBlbmRzIHdpdGggYSBuZXdsaW5lLCB0aGUgb3V0cHV0IHdpbGwgZW5kIGFmdGVyIHRoaXMKKyAqIG5ld2xpbmUuICBBIG5ldyBncmFwaCBsaW5lIHdpbGwgbm90IGJlIHByaW50ZWQgYWZ0ZXIgdGhlIGZpbmFsIG5ld2xpbmUuCisgKiBJZiB0aGUgc3RyYnVmIGlzIGVtcHR5LCBubyBvdXRwdXQgd2lsbCBiZSBwcmludGVkLgorICoKKyAqIFNpbmNlIHRoZSBmaXJzdCBsaW5lIHdpbGwgbm90IGluY2x1ZGUgdGhlIGdyYXBoIG91dHB1dCwgdGhlIGNhbGxlciBpcworICogcmVzcG9uc2libGUgZm9yIHByaW50aW5nIHRoaXMgbGluZSdzIGdyYXBoIChwZXJoYXBzIHZpYQorICogZ3JhcGhfc2hvd19jb21taXQoKSBvciBncmFwaF9zaG93X29uZWxpbmUoKSkgYmVmb3JlIGNhbGxpbmcKKyAqIGdyYXBoX3Nob3dfc3RyYnVmKCkuCisgKi8KK3N0YXRpYyB2b2lkIGdyYXBoX3Nob3dfc3RyYnVmKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmIGNvbnN0ICpzYik7CisKKy8qCisgKiBUT0RPOgorICogLSBMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMsIHNpbWlsYXIgdG8gdGhlIHdheSBnaXRrIGRvZXMuCisgKiAgIElmIHdlIHJlYWNoIG1vcmUgdGhhbiBhIHNwZWNpZmllZCBudW1iZXIgb2YgY29sdW1ucywgb21pdAorICogICBzZWN0aW9ucyBvZiBzb21lIGNvbHVtbnMuCisgKi8KKworc3RydWN0IGNvbHVtbiB7CisJLyoKKwkgKiBUaGUgcGFyZW50IGNvbW1pdCBvZiB0aGlzIGNvbHVtbi4KKwkgKi8KKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJLyoKKwkgKiBUaGUgY29sb3IgdG8gKG9wdGlvbmFsbHkpIHByaW50IHRoaXMgY29sdW1uIGluLiAgVGhpcyBpcyBhbgorCSAqIGluZGV4IGludG8gY29sdW1uX2NvbG9ycy4KKwkgKi8KKwl1bnNpZ25lZCBzaG9ydCBjb2xvcjsKK307CisKK2VudW0gZ3JhcGhfc3RhdGUgeworCUdSQVBIX1BBRERJTkcsCisJR1JBUEhfU0tJUCwKKwlHUkFQSF9QUkVfQ09NTUlULAorCUdSQVBIX0NPTU1JVCwKKwlHUkFQSF9QT1NUX01FUkdFLAorCUdSQVBIX0NPTExBUFNJTkcKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICoqY29sdW1uX2NvbG9yczsKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBjb2x1bW5fY29sb3JzX21heDsKKwordm9pZCBncmFwaF9zZXRfY29sdW1uX2NvbG9ycyhjb25zdCBjaGFyICoqY29sb3JzLCB1bnNpZ25lZCBzaG9ydCBjb2xvcnNfbWF4KQoreworCWNvbHVtbl9jb2xvcnMgPSBjb2xvcnM7CisJY29sdW1uX2NvbG9yc19tYXggPSBjb2xvcnNfbWF4OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY29sdW1uX2dldF9jb2xvcl9jb2RlKHVuc2lnbmVkIHNob3J0IGNvbG9yKQoreworCXJldHVybiBjb2x1bW5fY29sb3JzW2NvbG9yXTsKK30KKworc3RhdGljIHZvaWQgc3RyYnVmX3dyaXRlX2NvbHVtbihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgc3RydWN0IGNvbHVtbiAqYywKKwkJCQljaGFyIGNvbF9jaGFyKQoreworCWlmIChjLT5jb2xvciA8IGNvbHVtbl9jb2xvcnNfbWF4KQorCQlzdHJidWZfYWRkc3RyKHNiLCBjb2x1bW5fZ2V0X2NvbG9yX2NvZGUoYy0+Y29sb3IpKTsKKwlzdHJidWZfYWRkY2goc2IsIGNvbF9jaGFyKTsKKwlpZiAoYy0+Y29sb3IgPCBjb2x1bW5fY29sb3JzX21heCkKKwkJc3RyYnVmX2FkZHN0cihzYiwgY29sdW1uX2dldF9jb2xvcl9jb2RlKGNvbHVtbl9jb2xvcnNfbWF4KSk7Cit9CisKK3N0cnVjdCBnaXRfZ3JhcGggeworCS8qCisJICogVGhlIGNvbW1pdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkCisJICovCisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCS8qIFRoZSByZXYtaW5mbyB1c2VkIGZvciB0aGUgY3VycmVudCB0cmF2ZXJzYWwgKi8KKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnM7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGludGVyZXN0aW5nIHBhcmVudHMgdGhhdCB0aGlzIGNvbW1pdCBoYXMuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGFjdHVhbCBudW1iZXIgb2YgcGFyZW50cy4KKwkgKiBUaGlzIGNvdW50IGV4Y2x1ZGVzIHBhcmVudHMgdGhhdCB3b24ndCBiZSBwcmludGVkIGluIHRoZSBncmFwaAorCSAqIG91dHB1dCwgYXMgZGV0ZXJtaW5lZCBieSBncmFwaF9pc19pbnRlcmVzdGluZygpLgorCSAqLworCWludCBudW1fcGFyZW50czsKKwkvKgorCSAqIFRoZSB3aWR0aCBvZiB0aGUgZ3JhcGggb3V0cHV0IGZvciB0aGlzIGNvbW1pdC4KKwkgKiBBbGwgcm93cyBmb3IgdGhpcyBjb21taXQgYXJlIHBhZGRlZCB0byB0aGlzIHdpZHRoLCBzbyB0aGF0CisJICogbWVzc2FnZXMgcHJpbnRlZCBhZnRlciB0aGUgZ3JhcGggb3V0cHV0IGFyZSBhbGlnbmVkLgorCSAqLworCWludCB3aWR0aDsKKwkvKgorCSAqIFRoZSBuZXh0IGV4cGFuc2lvbiByb3cgdG8gcHJpbnQKKwkgKiB3aGVuIHN0YXRlIGlzIEdSQVBIX1BSRV9DT01NSVQKKwkgKi8KKwlpbnQgZXhwYW5zaW9uX3JvdzsKKwkvKgorCSAqIFRoZSBjdXJyZW50IG91dHB1dCBzdGF0ZS4KKwkgKiBUaGlzIHRlbGxzIHVzIHdoYXQga2luZCBvZiBsaW5lIGdyYXBoX25leHRfbGluZSgpIHNob3VsZCBvdXRwdXQuCisJICovCisJZW51bSBncmFwaF9zdGF0ZSBzdGF0ZTsKKwkvKgorCSAqIFRoZSBvdXRwdXQgc3RhdGUgZm9yIHRoZSBwcmV2aW91cyBsaW5lIG9mIG91dHB1dC4KKwkgKiBUaGlzIGlzIHByaW1hcmlseSB1c2VkIHRvIGRldGVybWluZSBob3cgdGhlIGZpcnN0IG1lcmdlIGxpbmUKKwkgKiBzaG91bGQgYXBwZWFyLCBiYXNlZCBvbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBwcmV2aW91cyBjb21taXQuCisJICovCisJZW51bSBncmFwaF9zdGF0ZSBwcmV2X3N0YXRlOworCS8qCisJICogVGhlIGluZGV4IG9mIHRoZSBjb2x1bW4gdGhhdCByZWZlcnMgdG8gdGhpcyBjb21taXQuCisJICoKKwkgKiBJZiBub25lIG9mIHRoZSBpbmNvbWluZyBjb2x1bW5zIHJlZmVyIHRvIHRoaXMgY29tbWl0LAorCSAqIHRoaXMgd2lsbCBiZSBlcXVhbCB0byBudW1fY29sdW1ucy4KKwkgKi8KKwlpbnQgY29tbWl0X2luZGV4OworCS8qCisJICogVGhlIGNvbW1pdF9pbmRleCBmb3IgdGhlIHByZXZpb3VzbHkgZGlzcGxheWVkIGNvbW1pdC4KKwkgKgorCSAqIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaG93IHRoZSBmaXJzdCBsaW5lIG9mIGEgbWVyZ2UKKwkgKiBncmFwaCBvdXRwdXQgc2hvdWxkIGFwcGVhciwgYmFzZWQgb24gdGhlIGxhc3QgbGluZSBvZiB0aGUKKwkgKiBwcmV2aW91cyBjb21taXQuCisJICovCisJaW50IHByZXZfY29tbWl0X2luZGV4OworCS8qCisJICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHRoZSBjb2x1bW5zCisJICogYW5kIG5ld19jb2x1bW5zIGFycmF5cy4gIFRoaXMgaXMgYWxzbyBoYWxmIHRoZSBudW1iZXIgb2YgZW50cmllcworCSAqIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiB0aGUgbWFwcGluZyBhbmQgbmV3X21hcHBpbmcgYXJyYXlzLgorCSAqLworCWludCBjb2x1bW5fY2FwYWNpdHk7CisJLyoKKwkgKiBUaGUgbnVtYmVyIG9mIGNvbHVtbnMgKGFsc28gY2FsbGVkICJicmFuY2ggbGluZXMiIGluIHNvbWUgcGxhY2VzKQorCSAqLworCWludCBudW1fY29sdW1uczsKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbmV3X2NvbHVtbnMgYXJyYXkKKwkgKi8KKwlpbnQgbnVtX25ld19jb2x1bW5zOworCS8qCisJICogVGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBtYXBwaW5nIGFycmF5CisJICovCisJaW50IG1hcHBpbmdfc2l6ZTsKKwkvKgorCSAqIFRoZSBjb2x1bW4gc3RhdGUgYmVmb3JlIHdlIG91dHB1dCB0aGUgY3VycmVudCBjb21taXQuCisJICovCisJc3RydWN0IGNvbHVtbiAqY29sdW1uczsKKwkvKgorCSAqIFRoZSBuZXcgY29sdW1uIHN0YXRlIGFmdGVyIHdlIG91dHB1dCB0aGUgY3VycmVudCBjb21taXQuCisJICogT25seSB2YWxpZCB3aGVuIHN0YXRlIGlzIEdSQVBIX0NPTExBUFNJTkcuCisJICovCisJc3RydWN0IGNvbHVtbiAqbmV3X2NvbHVtbnM7CisJLyoKKwkgKiBBbiBhcnJheSB0aGF0IHRyYWNrcyB0aGUgY3VycmVudCBzdGF0ZSBvZiBlYWNoCisJICogY2hhcmFjdGVyIGluIHRoZSBvdXRwdXQgbGluZSBkdXJpbmcgc3RhdGUgR1JBUEhfQ09MTEFQU0lORy4KKwkgKiBFYWNoIGVudHJ5IGlzIC0xIGlmIHRoaXMgY2hhcmFjdGVyIGlzIGVtcHR5LCBvciBhIG5vbi1uZWdhdGl2ZQorCSAqIGludGVnZXIgaWYgdGhlIGNoYXJhY3RlciBjb250YWlucyBhIGJyYW5jaCBsaW5lLiAgVGhlIHZhbHVlIG9mCisJICogdGhlIGludGVnZXIgaW5kaWNhdGVzIHRoZSB0YXJnZXQgcG9zaXRpb24gZm9yIHRoaXMgYnJhbmNoIGxpbmUuCisJICogKEkuZS4sIHRoaXMgYXJyYXkgbWFwcyB0aGUgY3VycmVudCBjb2x1bW4gcG9zaXRpb25zIHRvIHRoZWlyCisJICogZGVzaXJlZCBwb3NpdGlvbnMuKQorCSAqCisJICogVGhlIG1heGltdW0gY2FwYWNpdHkgb2YgdGhpcyBhcnJheSBpcyBhbHdheXMKKwkgKiBzaXplb2YoaW50KSAqIDIgKiBjb2x1bW5fY2FwYWNpdHkuCisJICovCisJaW50ICptYXBwaW5nOworCS8qCisJICogQSB0ZW1wb3JhcnkgYXJyYXkgZm9yIGNvbXB1dGluZyB0aGUgbmV4dCBtYXBwaW5nIHN0YXRlCisJICogd2hpbGUgd2UgYXJlIG91dHB1dHRpbmcgYSBtYXBwaW5nIGxpbmUuICBUaGlzIGlzIHN0b3JlZCBhcyBwYXJ0CisJICogb2YgdGhlIGdpdF9ncmFwaCBzaW1wbHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldworCSAqIHRlbXBvcmFyeSBhcnJheSBlYWNoIHRpbWUgd2UgaGF2ZSB0byBvdXRwdXQgYSBjb2xsYXBzaW5nIGxpbmUuCisJICovCisJaW50ICpuZXdfbWFwcGluZzsKKwkvKgorCSAqIFRoZSBjdXJyZW50IGRlZmF1bHQgY29sdW1uIGNvbG9yIGJlaW5nIHVzZWQuICBUaGlzIGlzCisJICogc3RvcmVkIGFzIGFuIGluZGV4IGludG8gdGhlIGFycmF5IGNvbHVtbl9jb2xvcnMuCisJICovCisJdW5zaWduZWQgc2hvcnQgZGVmYXVsdF9jb2x1bW5fY29sb3I7Cit9OworCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiAqZGlmZl9vdXRwdXRfcHJlZml4X2NhbGxiYWNrKHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCA9IGRhdGE7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgbXNnYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlhc3NlcnQob3B0KTsKKwlhc3NlcnQoZ3JhcGgpOworCisJb3B0LT5vdXRwdXRfcHJlZml4X2xlbmd0aCA9IGdyYXBoLT53aWR0aDsKKwlzdHJidWZfcmVzZXQoJm1zZ2J1Zik7CisJZ3JhcGhfcGFkZGluZ19saW5lKGdyYXBoLCAmbXNnYnVmKTsKKwlyZXR1cm4gJm1zZ2J1ZjsKK30KKworc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGhfaW5pdChzdHJ1Y3QgcmV2X2luZm8gKm9wdCkKK3sKKwlzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBnaXRfZ3JhcGgpKTsKKworCWlmICghY29sdW1uX2NvbG9ycykKKwkJZ3JhcGhfc2V0X2NvbHVtbl9jb2xvcnMoY29sdW1uX2NvbG9yc19hbnNpLAorCQkJCQljb2x1bW5fY29sb3JzX2Fuc2lfbWF4KTsKKworCWdyYXBoLT5jb21taXQgPSBOVUxMOworCWdyYXBoLT5yZXZzID0gb3B0OworCWdyYXBoLT5udW1fcGFyZW50cyA9IDA7CisJZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPSAwOworCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1BBRERJTkc7CisJZ3JhcGgtPnByZXZfc3RhdGUgPSBHUkFQSF9QQURESU5HOworCWdyYXBoLT5jb21taXRfaW5kZXggPSAwOworCWdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA9IDA7CisJZ3JhcGgtPm51bV9jb2x1bW5zID0gMDsKKwlncmFwaC0+bnVtX25ld19jb2x1bW5zID0gMDsKKwlncmFwaC0+bWFwcGluZ19zaXplID0gMDsKKwkvKgorCSAqIFN0YXJ0IHRoZSBjb2x1bW4gY29sb3IgYXQgdGhlIG1heGltdW0gdmFsdWUsIHNpbmNlIHdlJ2xsCisJICogYWx3YXlzIGluY3JlbWVudCBpdCBmb3IgdGhlIGZpcnN0IGNvbW1pdCB3ZSBvdXRwdXQuCisJICogVGhpcyB3YXkgd2Ugc3RhcnQgYXQgMCBmb3IgdGhlIGZpcnN0IGNvbW1pdC4KKwkgKi8KKwlncmFwaC0+ZGVmYXVsdF9jb2x1bW5fY29sb3IgPSBjb2x1bW5fY29sb3JzX21heCAtIDE7CisKKwkvKgorCSAqIEFsbG9jYXRlIGEgcmVhc29uYWJseSBsYXJnZSBkZWZhdWx0IG51bWJlciBvZiBjb2x1bW5zCisJICogV2UnbGwgYXV0b21hdGljYWxseSBncm93IGNvbHVtbnMgbGF0ZXIgaWYgd2UgbmVlZCBtb3JlIHJvb20uCisJICovCisJZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSA9IDMwOworCWdyYXBoLT5jb2x1bW5zID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGNvbHVtbikgKgorCQkJCSBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlncmFwaC0+bmV3X2NvbHVtbnMgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgY29sdW1uKSAqCisJCQkJICAgICBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlncmFwaC0+bWFwcGluZyA9IHhtYWxsb2Moc2l6ZW9mKGludCkgKiAyICogZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisJZ3JhcGgtPm5ld19tYXBwaW5nID0geG1hbGxvYyhzaXplb2YoaW50KSAqIDIgKiBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKworCS8qCisJICogVGhlIGRpZmYgb3V0cHV0IHByZWZpeCBjYWxsYmFjaywgd2l0aCB0aGlzIHdlIGNhbiBtYWtlCisJICogYWxsIHRoZSBkaWZmIG91dHB1dCB0byBhbGlnbiB3aXRoIHRoZSBncmFwaCBsaW5lcy4KKwkgKi8KKwlvcHQtPmRpZmZvcHQub3V0cHV0X3ByZWZpeCA9IGRpZmZfb3V0cHV0X3ByZWZpeF9jYWxsYmFjazsKKwlvcHQtPmRpZmZvcHQub3V0cHV0X3ByZWZpeF9kYXRhID0gZ3JhcGg7CisJb3B0LT5kaWZmb3B0Lm91dHB1dF9wcmVmaXhfbGVuZ3RoID0gMDsKKworCXJldHVybiBncmFwaDsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfdXBkYXRlX3N0YXRlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBlbnVtIGdyYXBoX3N0YXRlIHMpCit7CisJZ3JhcGgtPnByZXZfc3RhdGUgPSBncmFwaC0+c3RhdGU7CisJZ3JhcGgtPnN0YXRlID0gczsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfZW5zdXJlX2NhcGFjaXR5KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBpbnQgbnVtX2NvbHVtbnMpCit7CisJaWYgKGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgPj0gbnVtX2NvbHVtbnMpCisJCXJldHVybjsKKworCWRvIHsKKwkJZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSAqPSAyOworCX0gd2hpbGUgKGdyYXBoLT5jb2x1bW5fY2FwYWNpdHkgPCBudW1fY29sdW1ucyk7CisKKwlSRUFMTE9DX0FSUkFZKGdyYXBoLT5jb2x1bW5zLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5KTsKKwlSRUFMTE9DX0FSUkFZKGdyYXBoLT5uZXdfY29sdW1ucywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSk7CisJUkVBTExPQ19BUlJBWShncmFwaC0+bWFwcGluZywgZ3JhcGgtPmNvbHVtbl9jYXBhY2l0eSAqIDIpOworCVJFQUxMT0NfQVJSQVkoZ3JhcGgtPm5ld19tYXBwaW5nLCBncmFwaC0+Y29sdW1uX2NhcGFjaXR5ICogMik7Cit9CisKKy8qCisgKiBSZXR1cm5zIDEgaWYgdGhlIGNvbW1pdCB3aWxsIGJlIHByaW50ZWQgaW4gdGhlIGdyYXBoIG91dHB1dCwKKyAqIGFuZCAwIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBncmFwaF9pc19pbnRlcmVzdGluZyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCS8qCisJICogSWYgcmV2cy0+Ym91bmRhcnkgaXMgc2V0LCBjb21taXRzIHdob3NlIGNoaWxkcmVuIGhhdmUKKwkgKiBiZWVuIHNob3duIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcsIGV2ZW4gaWYgdGhleSBoYXZlIHRoZQorCSAqIFVOSU5URVJFU1RJTkcgb3IgVFJFRVNBTUUgZmxhZ3Mgc2V0LgorCSAqLworCWlmIChncmFwaC0+cmV2cyAmJiBncmFwaC0+cmV2cy0+Ym91bmRhcnkpIHsKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ0hJTERfU0hPV04pCisJCQlyZXR1cm4gMTsKKwl9CisKKwkvKgorCSAqIE90aGVyd2lzZSwgdXNlIGdldF9jb21taXRfYWN0aW9uKCkgdG8gc2VlIGlmIHRoaXMgY29tbWl0IGlzCisJICogaW50ZXJlc3RpbmcKKwkgKi8KKwlyZXR1cm4gZ2V0X2NvbW1pdF9hY3Rpb24oZ3JhcGgtPnJldnMsIGNvbW1pdCkgPT0gY29tbWl0X3Nob3c7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0X2xpc3QgKm5leHRfaW50ZXJlc3RpbmdfcGFyZW50KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkJICAgc3RydWN0IGNvbW1pdF9saXN0ICpvcmlnKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdDsKKworCS8qCisJICogSWYgcmV2cy0+Zmlyc3RfcGFyZW50X29ubHkgaXMgc2V0LCBvbmx5IHRoZSBmaXJzdAorCSAqIHBhcmVudCBpcyBpbnRlcmVzdGluZy4gIE5vbmUgb2YgdGhlIG90aGVycyBhcmUuCisJICovCisJaWYgKGdyYXBoLT5yZXZzLT5maXJzdF9wYXJlbnRfb25seSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFJldHVybiB0aGUgbmV4dCBpbnRlcmVzdGluZyBjb21taXQgYWZ0ZXIgb3JpZworCSAqLworCWZvciAobGlzdCA9IG9yaWctPm5leHQ7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCWlmIChncmFwaF9pc19pbnRlcmVzdGluZyhncmFwaCwgbGlzdC0+aXRlbSkpCisJCQlyZXR1cm4gbGlzdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXRfbGlzdCAqZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IGdyYXBoLT5jb21taXQtPnBhcmVudHM7CisKKwkvKgorCSAqIElmIHRoaXMgY29tbWl0IGhhcyBubyBwYXJlbnRzLCBpZ25vcmUgaXQKKwkgKi8KKwlpZiAoIXBhcmVudHMpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBJZiB0aGUgZmlyc3QgcGFyZW50IGlzIGludGVyZXN0aW5nLCByZXR1cm4gaXQKKwkgKi8KKwlpZiAoZ3JhcGhfaXNfaW50ZXJlc3RpbmcoZ3JhcGgsIHBhcmVudHMtPml0ZW0pKQorCQlyZXR1cm4gcGFyZW50czsKKworCS8qCisJICogT3RoZXJ3aXNlLCBjYWxsIG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KCkgdG8gZ2V0CisJICogdGhlIG5leHQgaW50ZXJlc3RpbmcgcGFyZW50CisJICovCisJcmV0dXJuIG5leHRfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoLCBwYXJlbnRzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGdyYXBoX2dldF9jdXJyZW50X2NvbHVtbl9jb2xvcihjb25zdCBzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlpZiAoIXdhbnRfY29sb3IoZ3JhcGgtPnJldnMtPmRpZmZvcHQudXNlX2NvbG9yKSkKKwkJcmV0dXJuIGNvbHVtbl9jb2xvcnNfbWF4OworCXJldHVybiBncmFwaC0+ZGVmYXVsdF9jb2x1bW5fY29sb3I7Cit9CisKKy8qCisgKiBVcGRhdGUgdGhlIGdyYXBoJ3MgZGVmYXVsdCBjb2x1bW4gY29sb3IuCisgKi8KK3N0YXRpYyB2b2lkIGdyYXBoX2luY3JlbWVudF9jb2x1bW5fY29sb3Ioc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJZ3JhcGgtPmRlZmF1bHRfY29sdW1uX2NvbG9yID0gKGdyYXBoLT5kZWZhdWx0X2NvbHVtbl9jb2xvciArIDEpICUKKwkJY29sdW1uX2NvbG9yc19tYXg7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBncmFwaF9maW5kX2NvbW1pdF9jb2xvcihjb25zdCBzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlpZiAoZ3JhcGgtPmNvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkKKwkJCXJldHVybiBncmFwaC0+Y29sdW1uc1tpXS5jb2xvcjsKKwl9CisJcmV0dXJuIGdyYXBoX2dldF9jdXJyZW50X2NvbHVtbl9jb2xvcihncmFwaCk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkgIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkJICBpbnQgKm1hcHBpbmdfaW5kZXgpCit7CisJaW50IGk7CisKKwkvKgorCSAqIElmIHRoZSBjb21taXQgaXMgYWxyZWFkeSBpbiB0aGUgbmV3X2NvbHVtbnMgbGlzdCwgd2UgZG9uJ3QgbmVlZCB0bworCSAqIGFkZCBpdC4gIEp1c3QgdXBkYXRlIHRoZSBtYXBwaW5nIGNvcnJlY3RseS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm51bV9uZXdfY29sdW1uczsgaSsrKSB7CisJCWlmIChncmFwaC0+bmV3X2NvbHVtbnNbaV0uY29tbWl0ID09IGNvbW1pdCkgeworCQkJZ3JhcGgtPm1hcHBpbmdbKm1hcHBpbmdfaW5kZXhdID0gaTsKKwkJCSptYXBwaW5nX2luZGV4ICs9IDI7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIFRoaXMgY29tbWl0IGlzbid0IGFscmVhZHkgaW4gbmV3X2NvbHVtbnMuICBBZGQgaXQuCisJICovCisJZ3JhcGgtPm5ld19jb2x1bW5zW2dyYXBoLT5udW1fbmV3X2NvbHVtbnNdLmNvbW1pdCA9IGNvbW1pdDsKKwlncmFwaC0+bmV3X2NvbHVtbnNbZ3JhcGgtPm51bV9uZXdfY29sdW1uc10uY29sb3IgPSBncmFwaF9maW5kX2NvbW1pdF9jb2xvcihncmFwaCwgY29tbWl0KTsKKwlncmFwaC0+bWFwcGluZ1sqbWFwcGluZ19pbmRleF0gPSBncmFwaC0+bnVtX25ld19jb2x1bW5zOworCSptYXBwaW5nX2luZGV4ICs9IDI7CisJZ3JhcGgtPm51bV9uZXdfY29sdW1ucysrOworfQorCitzdGF0aWMgdm9pZCBncmFwaF91cGRhdGVfd2lkdGgoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkgICAgICAgaW50IGlzX2NvbW1pdF9pbl9leGlzdGluZ19jb2x1bW5zKQoreworCS8qCisJICogQ29tcHV0ZSB0aGUgd2lkdGggbmVlZGVkIHRvIGRpc3BsYXkgdGhlIGdyYXBoIGZvciB0aGlzIGNvbW1pdC4KKwkgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHdpZHRoIG5lZWRlZCBmb3IgYW55IHJvdy4gIEFsbCBvdGhlciByb3dzCisJICogd2lsbCBiZSBwYWRkZWQgdG8gdGhpcyB3aWR0aC4KKwkgKgorCSAqIENvbXB1dGUgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSB3aWRlc3Qgcm93OgorCSAqIENvdW50IGVhY2ggZXhpc3RpbmcgY29sdW1uIChncmFwaC0+bnVtX2NvbHVtbnMpLCBhbmQgZWFjaCBuZXcKKwkgKiBjb2x1bW4gYWRkZWQgYnkgdGhpcyBjb21taXQuCisJICovCisJaW50IG1heF9jb2xzID0gZ3JhcGgtPm51bV9jb2x1bW5zICsgZ3JhcGgtPm51bV9wYXJlbnRzOworCisJLyoKKwkgKiBFdmVuIGlmIHRoZSBjdXJyZW50IGNvbW1pdCBoYXMgbm8gcGFyZW50cyB0byBiZSBwcmludGVkLCBpdAorCSAqIHN0aWxsIHRha2VzIHVwIGEgY29sdW1uIGZvciBpdHNlbGYuCisJICovCisJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA8IDEpCisJCW1heF9jb2xzKys7CisKKwkvKgorCSAqIFdlIGFkZGVkIGEgY29sdW1uIGZvciB0aGUgY3VycmVudCBjb21taXQgYXMgcGFydCBvZgorCSAqIGdyYXBoLT5udW1fcGFyZW50cy4gIElmIHRoZSBjdXJyZW50IGNvbW1pdCB3YXMgYWxyZWFkeSBpbgorCSAqIGdyYXBoLT5jb2x1bW5zLCB0aGVuIHdlIGhhdmUgZG91YmxlIGNvdW50ZWQgaXQuCisJICovCisJaWYgKGlzX2NvbW1pdF9pbl9leGlzdGluZ19jb2x1bW5zKQorCQltYXhfY29scy0tOworCisJLyoKKwkgKiBFYWNoIGNvbHVtbiB0YWtlcyB1cCAyIHNwYWNlcworCSAqLworCWdyYXBoLT53aWR0aCA9IG1heF9jb2xzICogMjsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfdXBkYXRlX2NvbHVtbnMoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisJc3RydWN0IGNvbHVtbiAqdG1wX2NvbHVtbnM7CisJaW50IG1heF9uZXdfY29sdW1uczsKKwlpbnQgbWFwcGluZ19pZHg7CisJaW50IGksIHNlZW5fdGhpcywgaXNfY29tbWl0X2luX2NvbHVtbnM7CisKKwkvKgorCSAqIFN3YXAgZ3JhcGgtPmNvbHVtbnMgd2l0aCBncmFwaC0+bmV3X2NvbHVtbnMKKwkgKiBncmFwaC0+Y29sdW1ucyBjb250YWlucyB0aGUgc3RhdGUgZm9yIHRoZSBwcmV2aW91cyBjb21taXQsCisJICogYW5kIG5ld19jb2x1bW5zIG5vdyBjb250YWlucyB0aGUgc3RhdGUgZm9yIG91ciBjb21taXQuCisJICoKKwkgKiBXZSdsbCByZS11c2UgdGhlIG9sZCBjb2x1bW5zIGFycmF5IGFzIHN0b3JhZ2UgdG8gY29tcHV0ZSB0aGUgbmV3CisJICogY29sdW1ucyBsaXN0IGZvciB0aGUgY29tbWl0IGFmdGVyIHRoaXMgb25lLgorCSAqLworCXRtcF9jb2x1bW5zID0gZ3JhcGgtPmNvbHVtbnM7CisJZ3JhcGgtPmNvbHVtbnMgPSBncmFwaC0+bmV3X2NvbHVtbnM7CisJZ3JhcGgtPm51bV9jb2x1bW5zID0gZ3JhcGgtPm51bV9uZXdfY29sdW1uczsKKworCWdyYXBoLT5uZXdfY29sdW1ucyA9IHRtcF9jb2x1bW5zOworCWdyYXBoLT5udW1fbmV3X2NvbHVtbnMgPSAwOworCisJLyoKKwkgKiBOb3cgdXBkYXRlIG5ld19jb2x1bW5zIGFuZCBtYXBwaW5nIHdpdGggdGhlIGluZm9ybWF0aW9uIGZvciB0aGUKKwkgKiBjb21taXQgYWZ0ZXIgdGhpcyBvbmUuCisJICoKKwkgKiBGaXJzdCwgbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHJvb20uICBBdCBtb3N0LCB0aGVyZSB3aWxsCisJICogYmUgZ3JhcGgtPm51bV9jb2x1bW5zICsgZ3JhcGgtPm51bV9wYXJlbnRzIGNvbHVtbnMgZm9yIHRoZSBuZXh0CisJICogY29tbWl0LgorCSAqLworCW1heF9uZXdfY29sdW1ucyA9IGdyYXBoLT5udW1fY29sdW1ucyArIGdyYXBoLT5udW1fcGFyZW50czsKKwlncmFwaF9lbnN1cmVfY2FwYWNpdHkoZ3JhcGgsIG1heF9uZXdfY29sdW1ucyk7CisKKwkvKgorCSAqIENsZWFyIG91dCBncmFwaC0+bWFwcGluZworCSAqLworCWdyYXBoLT5tYXBwaW5nX3NpemUgPSAyICogbWF4X25ld19jb2x1bW5zOworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspCisJCWdyYXBoLT5tYXBwaW5nW2ldID0gLTE7CisKKwkvKgorCSAqIFBvcHVsYXRlIGdyYXBoLT5uZXdfY29sdW1ucyBhbmQgZ3JhcGgtPm1hcHBpbmcKKwkgKgorCSAqIFNvbWUgb2YgdGhlIHBhcmVudHMgb2YgdGhpcyBjb21taXQgbWF5IGFscmVhZHkgYmUgaW4KKwkgKiBncmFwaC0+Y29sdW1ucy4gIElmIHNvLCBncmFwaC0+bmV3X2NvbHVtbnMgc2hvdWxkIG9ubHkgY29udGFpbiBhCisJICogc2luZ2xlIGVudHJ5IGZvciBlYWNoIHN1Y2ggY29tbWl0LiAgZ3JhcGgtPm1hcHBpbmcgc2hvdWxkCisJICogY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSBlYWNoIGN1cnJlbnQgYnJhbmNoIGxpbmUgaXMKKwkgKiBzdXBwb3NlZCB0byBlbmQgdXAgYWZ0ZXIgdGhlIGNvbGxhcHNpbmcgaXMgcGVyZm9ybWVkLgorCSAqLworCXNlZW5fdGhpcyA9IDA7CisJbWFwcGluZ19pZHggPSAwOworCWlzX2NvbW1pdF9pbl9jb2x1bW5zID0gMTsKKwlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbF9jb21taXQ7CisJCWlmIChpID09IGdyYXBoLT5udW1fY29sdW1ucykgeworCQkJaWYgKHNlZW5fdGhpcykKKwkJCQlicmVhazsKKwkJCWlzX2NvbW1pdF9pbl9jb2x1bW5zID0gMDsKKwkJCWNvbF9jb21taXQgPSBncmFwaC0+Y29tbWl0OworCQl9IGVsc2UgeworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb2x1bW5zW2ldLmNvbW1pdDsKKwkJfQorCisJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKKwkJCWludCBvbGRfbWFwcGluZ19pZHggPSBtYXBwaW5nX2lkeDsKKwkJCXNlZW5fdGhpcyA9IDE7CisJCQlncmFwaC0+Y29tbWl0X2luZGV4ID0gaTsKKwkJCWZvciAocGFyZW50ID0gZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoKTsKKwkJCSAgICAgcGFyZW50OworCQkJICAgICBwYXJlbnQgPSBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50KSkgeworCQkJCS8qCisJCQkJICogSWYgdGhpcyBpcyBhIG1lcmdlLCBvciB0aGUgc3RhcnQgb2YgYSBuZXcKKwkJCQkgKiBjaGlsZGxlc3MgY29sdW1uLCBpbmNyZW1lbnQgdGhlIGN1cnJlbnQKKwkJCQkgKiBjb2xvci4KKwkJCQkgKi8KKwkJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMSB8fAorCQkJCSAgICAhaXNfY29tbWl0X2luX2NvbHVtbnMpIHsKKwkJCQkJZ3JhcGhfaW5jcmVtZW50X2NvbHVtbl9jb2xvcihncmFwaCk7CisJCQkJfQorCQkJCWdyYXBoX2luc2VydF9pbnRvX25ld19jb2x1bW5zKGdyYXBoLAorCQkJCQkJCSAgICAgIHBhcmVudC0+aXRlbSwKKwkJCQkJCQkgICAgICAmbWFwcGluZ19pZHgpOworCQkJfQorCQkJLyoKKwkJCSAqIFdlIGFsd2F5cyBuZWVkIHRvIGluY3JlbWVudCBtYXBwaW5nX2lkeCBieSBhdAorCQkJICogbGVhc3QgMiwgZXZlbiBpZiBpdCBoYXMgbm8gaW50ZXJlc3RpbmcgcGFyZW50cy4KKwkJCSAqIFRoZSBjdXJyZW50IGNvbW1pdCBhbHdheXMgdGFrZXMgdXAgYXQgbGVhc3QgMgorCQkJICogc3BhY2VzLgorCQkJICovCisJCQlpZiAobWFwcGluZ19pZHggPT0gb2xkX21hcHBpbmdfaWR4KQorCQkJCW1hcHBpbmdfaWR4ICs9IDI7CisJCX0gZWxzZSB7CisJCQlncmFwaF9pbnNlcnRfaW50b19uZXdfY29sdW1ucyhncmFwaCwgY29sX2NvbW1pdCwKKwkJCQkJCSAgICAgICZtYXBwaW5nX2lkeCk7CisJCX0KKwl9CisKKwkvKgorCSAqIFNocmluayBtYXBwaW5nX3NpemUgdG8gYmUgdGhlIG1pbmltdW0gbmVjZXNzYXJ5CisJICovCisJd2hpbGUgKGdyYXBoLT5tYXBwaW5nX3NpemUgPiAxICYmCisJICAgICAgIGdyYXBoLT5tYXBwaW5nW2dyYXBoLT5tYXBwaW5nX3NpemUgLSAxXSA8IDApCisJCWdyYXBoLT5tYXBwaW5nX3NpemUtLTsKKworCS8qCisJICogQ29tcHV0ZSBncmFwaC0+d2lkdGggZm9yIHRoaXMgY29tbWl0CisJICovCisJZ3JhcGhfdXBkYXRlX3dpZHRoKGdyYXBoLCBpc19jb21taXRfaW5fY29sdW1ucyk7Cit9CisKK3ZvaWQgZ3JhcGhfdXBkYXRlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQ7CisKKwkvKgorCSAqIFNldCB0aGUgbmV3IGNvbW1pdAorCSAqLworCWdyYXBoLT5jb21taXQgPSBjb21taXQ7CisKKwkvKgorCSAqIENvdW50IGhvdyBtYW55IGludGVyZXN0aW5nIHBhcmVudHMgdGhpcyBjb21taXQgaGFzCisJICovCisJZ3JhcGgtPm51bV9wYXJlbnRzID0gMDsKKwlmb3IgKHBhcmVudCA9IGZpcnN0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCk7CisJICAgICBwYXJlbnQ7CisJICAgICBwYXJlbnQgPSBuZXh0X2ludGVyZXN0aW5nX3BhcmVudChncmFwaCwgcGFyZW50KSkKKwl7CisJCWdyYXBoLT5udW1fcGFyZW50cysrOworCX0KKworCS8qCisJICogU3RvcmUgdGhlIG9sZCBjb21taXRfaW5kZXggaW4gcHJldl9jb21taXRfaW5kZXguCisJICogZ3JhcGhfdXBkYXRlX2NvbHVtbnMoKSB3aWxsIHVwZGF0ZSBncmFwaC0+Y29tbWl0X2luZGV4IGZvciB0aGlzCisJICogY29tbWl0LgorCSAqLworCWdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA9IGdyYXBoLT5jb21taXRfaW5kZXg7CisKKwkvKgorCSAqIENhbGwgZ3JhcGhfdXBkYXRlX2NvbHVtbnMoKSB0byB1cGRhdGUKKwkgKiBjb2x1bW5zLCBuZXdfY29sdW1ucywgYW5kIG1hcHBpbmcuCisJICovCisJZ3JhcGhfdXBkYXRlX2NvbHVtbnMoZ3JhcGgpOworCisJZ3JhcGgtPmV4cGFuc2lvbl9yb3cgPSAwOworCisJLyoKKwkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlLgorCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCBjYWxsIGdyYXBoX3VwZGF0ZV9zdGF0ZSgpIGhlcmUsIHNpbmNlCisJICogd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgZ3JhcGgtPnByZXZfc3RhdGUuICBObyBsaW5lIGZvcgorCSAqIGdyYXBoLT5zdGF0ZSB3YXMgZXZlciBwcmludGVkLgorCSAqCisJICogSWYgdGhlIHByZXZpb3VzIGNvbW1pdCBkaWRuJ3QgZ2V0IHRvIHRoZSBHUkFQSF9QQURESU5HIHN0YXRlLAorCSAqIGl0IG5ldmVyIGZpbmlzaGVkIGl0cyBvdXRwdXQuICBHb3RvIEdSQVBIX1NLSVAsIHRvIHByaW50IG91dAorCSAqIGEgbGluZSB0byBpbmRpY2F0ZSB0aGF0IHBvcnRpb24gb2YgdGhlIGdyYXBoIGlzIG1pc3NpbmcuCisJICoKKwkgKiBJZiB0aGVyZSBhcmUgMyBvciBtb3JlIHBhcmVudHMsIHdlIG1heSBuZWVkIHRvIHByaW50IGV4dHJhIHJvd3MKKwkgKiBiZWZvcmUgdGhlIGNvbW1pdCwgdG8gZXhwYW5kIHRoZSBicmFuY2ggbGluZXMgYXJvdW5kIGl0IGFuZCBtYWtlCisJICogcm9vbSBmb3IgaXQuICBXZSBuZWVkIHRvIGRvIHRoaXMgb25seSBpZiB0aGVyZSBpcyBhIGJyYW5jaCByb3cKKwkgKiAob3IgbW9yZSkgdG8gdGhlIHJpZ2h0IG9mIHRoaXMgY29tbWl0LgorCSAqCisJICogSWYgdGhlcmUgYXJlIGxlc3MgdGhhbiAzIHBhcmVudHMsIHdlIGNhbiBpbW1lZGlhdGVseSBwcmludCB0aGUKKwkgKiBjb21taXQgbGluZS4KKwkgKi8KKwlpZiAoZ3JhcGgtPnN0YXRlICE9IEdSQVBIX1BBRERJTkcpCisJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1NLSVA7CisJZWxzZSBpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID49IDMgJiYKKwkJIGdyYXBoLT5jb21taXRfaW5kZXggPCAoZ3JhcGgtPm51bV9jb2x1bW5zIC0gMSkpCisJCWdyYXBoLT5zdGF0ZSA9IEdSQVBIX1BSRV9DT01NSVQ7CisJZWxzZQorCQlncmFwaC0+c3RhdGUgPSBHUkFQSF9DT01NSVQ7Cit9CisKK3N0YXRpYyBpbnQgZ3JhcGhfaXNfbWFwcGluZ19jb3JyZWN0KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCWludCBpOworCisJLyoKKwkgKiBUaGUgbWFwcGluZyBpcyB1cCB0byBkYXRlIGlmIGVhY2ggZW50cnkgaXMgYXQgaXRzIHRhcmdldCwKKwkgKiBvciBpcyAxIGdyZWF0ZXIgdGhhbiBpdHMgdGFyZ2V0LgorCSAqIChJZiBpdCBpcyAxIGdyZWF0ZXIgdGhhbiB0aGUgdGFyZ2V0LCAnLycgd2lsbCBiZSBwcmludGVkLCBzbyBpdAorCSAqIHdpbGwgbG9vayBjb3JyZWN0IG9uIHRoZSBuZXh0IHJvdy4pCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5tYXBwaW5nX3NpemU7IGkrKykgeworCQlpbnQgdGFyZ2V0ID0gZ3JhcGgtPm1hcHBpbmdbaV07CisJCWlmICh0YXJnZXQgPCAwKQorCQkJY29udGludWU7CisJCWlmICh0YXJnZXQgPT0gKGkgLyAyKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfcGFkX2hvcml6b250YWxseShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJICAgaW50IGNoYXJzX3dyaXR0ZW4pCit7CisJLyoKKwkgKiBBZGQgYWRkaXRpb25hbCBzcGFjZXMgdG8gdGhlIGVuZCBvZiB0aGUgc3RyYnVmLCBzbyB0aGF0IGFsbAorCSAqIGxpbmVzIGZvciBhIHBhcnRpY3VsYXIgY29tbWl0IGhhdmUgdGhlIHNhbWUgd2lkdGguCisJICoKKwkgKiBUaGlzIHdheSwgZmllbGRzIHByaW50ZWQgdG8gdGhlIHJpZ2h0IG9mIHRoZSBncmFwaCB3aWxsIHJlbWFpbgorCSAqIGFsaWduZWQgZm9yIHRoZSBlbnRpcmUgY29tbWl0LgorCSAqLworCWludCBleHRyYTsKKwlpZiAoY2hhcnNfd3JpdHRlbiA+PSBncmFwaC0+d2lkdGgpCisJCXJldHVybjsKKworCWV4dHJhID0gZ3JhcGgtPndpZHRoIC0gY2hhcnNfd3JpdHRlbjsKKwlzdHJidWZfYWRkZihzYiwgIiUqcyIsIChpbnQpIGV4dHJhLCAiIik7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9wYWRkaW5nX2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJICAgICAgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IGk7CisKKwkvKgorCSAqIFdlIGNvdWxkIGNvbmNlaXZhYmxlIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBjb21taXQKKwkgKiBpZiBvdXIgY2FsbGVyIGhhcyBhIGJ1ZywgYW5kIGludm9rZXMgZ3JhcGhfbmV4dF9saW5lKCkKKwkgKiBpbW1lZGlhdGVseSBhZnRlciBncmFwaF9pbml0KCksIHdpdGhvdXQgZmlyc3QgY2FsbGluZworCSAqIGdyYXBoX3VwZGF0ZSgpLiAgUmV0dXJuIHdpdGhvdXQgb3V0cHV0dGluZyBhbnl0aGluZyBpbiB0aGlzCisJICogY2FzZS4KKwkgKi8KKwlpZiAoIWdyYXBoLT5jb21taXQpCisJCXJldHVybjsKKworCS8qCisJICogT3V0cHV0IGEgcGFkZGluZyByb3csIHRoYXQgbGVhdmVzIGFsbCBicmFuY2ggbGluZXMgdW5jaGFuZ2VkCisJICovCisJZm9yIChpID0gMDsgaSA8IGdyYXBoLT5udW1fbmV3X2NvbHVtbnM7IGkrKykgeworCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW2ldLCAnfCcpOworCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJfQorCisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGdyYXBoLT5udW1fbmV3X2NvbHVtbnMgKiAyKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X3NraXBfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJLyoKKwkgKiBPdXRwdXQgYW4gZWxsaXBzaXMgdG8gaW5kaWNhdGUgdGhhdCBhIHBvcnRpb24KKwkgKiBvZiB0aGUgZ3JhcGggaXMgbWlzc2luZy4KKwkgKi8KKwlzdHJidWZfYWRkc3RyKHNiLCAiLi4uIik7CisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIDMpOworCisJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+PSAzICYmCisJICAgIGdyYXBoLT5jb21taXRfaW5kZXggPCAoZ3JhcGgtPm51bV9jb2x1bW5zIC0gMSkpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUFJFX0NPTU1JVCk7CisJZWxzZQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTU1JVCk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX291dHB1dF9wcmVfY29tbWl0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsCisJCQkJCSBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgbnVtX2V4cGFuc2lvbl9yb3dzOworCWludCBpLCBzZWVuX3RoaXM7CisJaW50IGNoYXJzX3dyaXR0ZW47CisKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyBhIHJvdyB0aGF0IGluY3JlYXNlcyB0aGUgc3BhY2UgYXJvdW5kIGEgY29tbWl0CisJICogd2l0aCBtdWx0aXBsZSBwYXJlbnRzLCB0byBtYWtlIHJvb20gZm9yIGl0LiAgSXQgc2hvdWxkIG9ubHkgYmUKKwkgKiBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgMyBvciBtb3JlIHBhcmVudHMuCisJICoKKwkgKiBXZSBuZWVkIDIgZXh0cmEgcm93cyBmb3IgZXZlcnkgcGFyZW50IG92ZXIgMi4KKwkgKi8KKwlhc3NlcnQoZ3JhcGgtPm51bV9wYXJlbnRzID49IDMpOworCW51bV9leHBhbnNpb25fcm93cyA9IChncmFwaC0+bnVtX3BhcmVudHMgLSAyKSAqIDI7CisKKwkvKgorCSAqIGdyYXBoLT5leHBhbnNpb25fcm93IHRyYWNrcyB0aGUgY3VycmVudCBleHBhbnNpb24gcm93IHdlIGFyZSBvbi4KKwkgKiBJdCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIFswLCBudW1fZXhwYW5zaW9uX3Jvd3MgLSAxXQorCSAqLworCWFzc2VydCgwIDw9IGdyYXBoLT5leHBhbnNpb25fcm93ICYmCisJICAgICAgIGdyYXBoLT5leHBhbnNpb25fcm93IDwgbnVtX2V4cGFuc2lvbl9yb3dzKTsKKworCS8qCisJICogT3V0cHV0IHRoZSByb3cKKwkgKi8KKwlzZWVuX3RoaXMgPSAwOworCWNoYXJzX3dyaXR0ZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CisJCWlmIChjb2wtPmNvbW1pdCA9PSBncmFwaC0+Y29tbWl0KSB7CisJCQlzZWVuX3RoaXMgPSAxOworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOworCQkJc3RyYnVmX2FkZGYoc2IsICIlKnMiLCBncmFwaC0+ZXhwYW5zaW9uX3JvdywgIiIpOworCQkJY2hhcnNfd3JpdHRlbiArPSAxICsgZ3JhcGgtPmV4cGFuc2lvbl9yb3c7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+ZXhwYW5zaW9uX3JvdyA9PSAwKSkgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHByZS1jb21taXQgb3V0cHV0LgorCQkJICogSWYgdGhlIHByZXZpb3VzIGNvbW1pdCB3YXMgYSBtZXJnZSBjb21taXQgYW5kCisJCQkgKiBlbmRlZCBpbiB0aGUgR1JBUEhfUE9TVF9NRVJHRSBzdGF0ZSwgYWxsIGJyYW5jaAorCQkJICogbGluZXMgYWZ0ZXIgZ3JhcGgtPnByZXZfY29tbWl0X2luZGV4IHdlcmUKKwkJCSAqIHByaW50ZWQgYXMgIlwiIG9uIHRoZSBwcmV2aW91cyBsaW5lLiAgQ29udGludWUKKwkJCSAqIHRvIHByaW50IHRoZW0gYXMgIlwiIG9uIHRoaXMgbGluZS4gIE90aGVyd2lzZSwKKwkJCSAqIHByaW50IHRoZSBicmFuY2ggbGluZXMgYXMgInwiLgorCQkJICovCisJCQlpZiAoZ3JhcGgtPnByZXZfc3RhdGUgPT0gR1JBUEhfUE9TVF9NRVJHRSAmJgorCQkJICAgIGdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA8IGkpCisJCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnXFwnKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7CisJCQljaGFyc193cml0dGVuKys7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+ZXhwYW5zaW9uX3JvdyA+IDApKSB7CisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICdcXCcpOworCQkJY2hhcnNfd3JpdHRlbisrOworCQl9IGVsc2UgeworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOworCQkJY2hhcnNfd3JpdHRlbisrOworCQl9CisJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJY2hhcnNfd3JpdHRlbisrOworCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBjaGFyc193cml0dGVuKTsKKworCS8qCisJICogSW5jcmVtZW50IGdyYXBoLT5leHBhbnNpb25fcm93LAorCSAqIGFuZCBtb3ZlIHRvIHN0YXRlIEdSQVBIX0NPTU1JVCBpZiBuZWNlc3NhcnkKKwkgKi8KKwlncmFwaC0+ZXhwYW5zaW9uX3JvdysrOworCWlmIChncmFwaC0+ZXhwYW5zaW9uX3JvdyA+PSBudW1fZXhwYW5zaW9uX3Jvd3MpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09NTUlUKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhfb3V0cHV0X2NvbW1pdF9jaGFyKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwkvKgorCSAqIEZvciBib3VuZGFyeSBjb21taXRzLCBwcmludCAnbycKKwkgKiAoV2Ugc2hvdWxkIG9ubHkgc2VlIGJvdW5kYXJ5IGNvbW1pdHMgd2hlbiByZXZzLT5ib3VuZGFyeSBpcyBzZXQuKQorCSAqLworCWlmIChncmFwaC0+Y29tbWl0LT5vYmplY3QuZmxhZ3MgJiBCT1VOREFSWSkgeworCQlhc3NlcnQoZ3JhcGgtPnJldnMtPmJvdW5kYXJ5KTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnbycpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBnZXRfcmV2aXNpb25fbWFyaygpIGhhbmRsZXMgYWxsIG90aGVyIGNhc2VzIHdpdGhvdXQgYXNzZXJ0KCkKKwkgKi8KKwlzdHJidWZfYWRkc3RyKHNiLCBnZXRfcmV2aXNpb25fbWFyayhncmFwaC0+cmV2cywgZ3JhcGgtPmNvbW1pdCkpOworfQorCisvKgorICogRHJhdyBhbiBvY3RvcHVzIG1lcmdlIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4uCisgKi8KK3N0YXRpYyBpbnQgZ3JhcGhfZHJhd19vY3RvcHVzX21lcmdlKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwkvKgorCSAqIEhlcmUgZGFzaGxlc3NfY29tbWl0cyByZXByZXNlbnRzIHRoZSBudW1iZXIgb2YgcGFyZW50cworCSAqIHdoaWNoIGRvbid0IG5lZWQgdG8gaGF2ZSBkYXNoZXMgKGJlY2F1c2UgdGhlaXIgZWRnZXMgZml0CisJICogbmVhdGx5IHVuZGVyIHRoZSBjb21taXQpLgorCSAqLworCWNvbnN0IGludCBkYXNobGVzc19jb21taXRzID0gMjsKKwlpbnQgY29sX251bSwgaTsKKwlpbnQgbnVtX2Rhc2hlcyA9CisJCSgoZ3JhcGgtPm51bV9wYXJlbnRzIC0gZGFzaGxlc3NfY29tbWl0cykgKiAyKSAtIDE7CisJZm9yIChpID0gMDsgaSA8IG51bV9kYXNoZXM7IGkrKykgeworCQljb2xfbnVtID0gKGkgLyAyKSArIGRhc2hsZXNzX2NvbW1pdHMgKyBncmFwaC0+Y29tbWl0X2luZGV4OworCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW2NvbF9udW1dLCAnLScpOworCX0KKwljb2xfbnVtID0gKGkgLyAyKSArIGRhc2hsZXNzX2NvbW1pdHMgKyBncmFwaC0+Y29tbWl0X2luZGV4OworCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsICZncmFwaC0+bmV3X2NvbHVtbnNbY29sX251bV0sICcuJyk7CisJcmV0dXJuIG51bV9kYXNoZXMgKyAxOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfY29tbWl0X2xpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBzdHJidWYgKnNiKQoreworCWludCBzZWVuX3RoaXMgPSAwOworCWludCBpLCBjaGFyc193cml0dGVuOworCisJLyoKKwkgKiBPdXRwdXQgdGhlIHJvdyBjb250YWluaW5nIHRoaXMgY29tbWl0CisJICogSXRlcmF0ZSB1cCB0byBhbmQgaW5jbHVkaW5nIGdyYXBoLT5udW1fY29sdW1ucywKKwkgKiBzaW5jZSB0aGUgY3VycmVudCBjb21taXQgbWF5IG5vdCBiZSBpbiBhbnkgb2YgdGhlIGV4aXN0aW5nCisJICogY29sdW1ucy4gIChUaGlzIGhhcHBlbnMgd2hlbiB0aGUgY3VycmVudCBjb21taXQgZG9lc24ndCBoYXZlIGFueQorCSAqIGNoaWxkcmVuIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZC4pCisJICovCisJc2Vlbl90aGlzID0gMDsKKwljaGFyc193cml0dGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDw9IGdyYXBoLT5udW1fY29sdW1uczsgaSsrKSB7CisJCXN0cnVjdCBjb2x1bW4gKmNvbCA9ICZncmFwaC0+Y29sdW1uc1tpXTsKKwkJc3RydWN0IGNvbW1pdCAqY29sX2NvbW1pdDsKKwkJaWYgKGkgPT0gZ3JhcGgtPm51bV9jb2x1bW5zKSB7CisJCQlpZiAoc2Vlbl90aGlzKQorCQkJCWJyZWFrOworCQkJY29sX2NvbW1pdCA9IGdyYXBoLT5jb21taXQ7CisJCX0gZWxzZSB7CisJCQljb2xfY29tbWl0ID0gZ3JhcGgtPmNvbHVtbnNbaV0uY29tbWl0OworCQl9CisKKwkJaWYgKGNvbF9jb21taXQgPT0gZ3JhcGgtPmNvbW1pdCkgeworCQkJc2Vlbl90aGlzID0gMTsKKwkJCWdyYXBoX291dHB1dF9jb21taXRfY2hhcihncmFwaCwgc2IpOworCQkJY2hhcnNfd3JpdHRlbisrOworCisJCQlpZiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMikKKwkJCQljaGFyc193cml0dGVuICs9IGdyYXBoX2RyYXdfb2N0b3B1c19tZXJnZShncmFwaCwKKwkJCQkJCQkJCSAgc2IpOworCQl9IGVsc2UgaWYgKHNlZW5fdGhpcyAmJiAoZ3JhcGgtPm51bV9wYXJlbnRzID4gMikpIHsKKwkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ1xcJyk7CisJCQljaGFyc193cml0dGVuKys7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzICYmIChncmFwaC0+bnVtX3BhcmVudHMgPT0gMikpIHsKKwkJCS8qCisJCQkgKiBUaGlzIGlzIGEgMi13YXkgbWVyZ2UgY29tbWl0LgorCQkJICogVGhlcmUgaXMgbm8gR1JBUEhfUFJFX0NPTU1JVCBzdGFnZSBmb3IgMi13YXkKKwkJCSAqIG1lcmdlcywgc28gdGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvZiBvdXRwdXQKKwkJCSAqIGZvciB0aGlzIGNvbW1pdC4gIENoZWNrIHRvIHNlZSB3aGF0IHRoZSBwcmV2aW91cworCQkJICogbGluZSBvZiBvdXRwdXQgd2FzLgorCQkJICoKKwkJCSAqIElmIGl0IHdhcyBHUkFQSF9QT1NUX01FUkdFLCB0aGUgYnJhbmNoIGxpbmUKKwkJCSAqIGNvbWluZyBpbnRvIHRoaXMgY29tbWl0IG1heSBoYXZlIGJlZW4gJ1wnLAorCQkJICogYW5kIG5vdCAnfCcgb3IgJy8nLiAgSWYgc28sIG91dHB1dCB0aGUgYnJhbmNoCisJCQkgKiBsaW5lIGFzICdcJyBvbiB0aGlzIGxpbmUsIGluc3RlYWQgb2YgJ3wnLiAgVGhpcworCQkJICogbWFrZXMgdGhlIG91dHB1dCBsb29rIG5pY2VyLgorCQkJICovCisJCQlpZiAoZ3JhcGgtPnByZXZfc3RhdGUgPT0gR1JBUEhfUE9TVF9NRVJHRSAmJgorCQkJICAgIGdyYXBoLT5wcmV2X2NvbW1pdF9pbmRleCA8IGkpCisJCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnXFwnKTsKKwkJCWVsc2UKKwkJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7CisJCQljaGFyc193cml0dGVuKys7CisJCX0gZWxzZSB7CisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICd8Jyk7CisJCQljaGFyc193cml0dGVuKys7CisJCX0KKwkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQljaGFyc193cml0dGVuKys7CisJfQorCisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGNoYXJzX3dyaXR0ZW4pOworCisJLyoKKwkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlCisJICovCisJaWYgKGdyYXBoLT5udW1fcGFyZW50cyA+IDEpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUE9TVF9NRVJHRSk7CisJZWxzZSBpZiAoZ3JhcGhfaXNfbWFwcGluZ19jb3JyZWN0KGdyYXBoKSkKKwkJZ3JhcGhfdXBkYXRlX3N0YXRlKGdyYXBoLCBHUkFQSF9QQURESU5HKTsKKwllbHNlCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfQ09MTEFQU0lORyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29sdW1uICpmaW5kX25ld19jb2x1bW5fYnlfY29tbWl0KHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLAorCQkJCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX25ld19jb2x1bW5zOyBpKyspIHsKKwkJaWYgKGdyYXBoLT5uZXdfY29sdW1uc1tpXS5jb21taXQgPT0gY29tbWl0KQorCQkJcmV0dXJuICZncmFwaC0+bmV3X2NvbHVtbnNbaV07CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfcG9zdF9tZXJnZV9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgc2Vlbl90aGlzID0gMDsKKwlpbnQgaSwgaiwgY2hhcnNfd3JpdHRlbjsKKworCS8qCisJICogT3V0cHV0IHRoZSBwb3N0LW1lcmdlIHJvdworCSAqLworCWNoYXJzX3dyaXR0ZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPD0gZ3JhcGgtPm51bV9jb2x1bW5zOyBpKyspIHsKKwkJc3RydWN0IGNvbHVtbiAqY29sID0gJmdyYXBoLT5jb2x1bW5zW2ldOworCQlzdHJ1Y3QgY29tbWl0ICpjb2xfY29tbWl0OworCQlpZiAoaSA9PSBncmFwaC0+bnVtX2NvbHVtbnMpIHsKKwkJCWlmIChzZWVuX3RoaXMpCisJCQkJYnJlYWs7CisJCQljb2xfY29tbWl0ID0gZ3JhcGgtPmNvbW1pdDsKKwkJfSBlbHNlIHsKKwkJCWNvbF9jb21taXQgPSBjb2wtPmNvbW1pdDsKKwkJfQorCisJCWlmIChjb2xfY29tbWl0ID09IGdyYXBoLT5jb21taXQpIHsKKwkJCS8qCisJCQkgKiBTaW5jZSB0aGUgY3VycmVudCBjb21taXQgaXMgYSBtZXJnZSBmaW5kCisJCQkgKiB0aGUgY29sdW1ucyBmb3IgdGhlIHBhcmVudCBjb21taXRzIGluCisJCQkgKiBuZXdfY29sdW1ucyBhbmQgdXNlIHRob3NlIHRvIGZvcm1hdCB0aGUKKwkJCSAqIGVkZ2VzLgorCQkJICovCisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBOVUxMOworCQkJc3RydWN0IGNvbHVtbiAqcGFyX2NvbHVtbjsKKwkJCXNlZW5fdGhpcyA9IDE7CisJCQlwYXJlbnRzID0gZmlyc3RfaW50ZXJlc3RpbmdfcGFyZW50KGdyYXBoKTsKKwkJCWFzc2VydChwYXJlbnRzKTsKKwkJCXBhcl9jb2x1bW4gPSBmaW5kX25ld19jb2x1bW5fYnlfY29tbWl0KGdyYXBoLCBwYXJlbnRzLT5pdGVtKTsKKwkJCWFzc2VydChwYXJfY29sdW1uKTsKKworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgcGFyX2NvbHVtbiwgJ3wnKTsKKwkJCWNoYXJzX3dyaXR0ZW4rKzsKKwkJCWZvciAoaiA9IDA7IGogPCBncmFwaC0+bnVtX3BhcmVudHMgLSAxOyBqKyspIHsKKwkJCQlwYXJlbnRzID0gbmV4dF9pbnRlcmVzdGluZ19wYXJlbnQoZ3JhcGgsIHBhcmVudHMpOworCQkJCWFzc2VydChwYXJlbnRzKTsKKwkJCQlwYXJfY29sdW1uID0gZmluZF9uZXdfY29sdW1uX2J5X2NvbW1pdChncmFwaCwgcGFyZW50cy0+aXRlbSk7CisJCQkJYXNzZXJ0KHBhcl9jb2x1bW4pOworCQkJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIHBhcl9jb2x1bW4sICdcXCcpOworCQkJCXN0cmJ1Zl9hZGRjaChzYiwgJyAnKTsKKwkJCX0KKwkJCWNoYXJzX3dyaXR0ZW4gKz0gaiAqIDI7CisJCX0gZWxzZSBpZiAoc2Vlbl90aGlzKSB7CisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCBjb2wsICdcXCcpOworCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQkJY2hhcnNfd3JpdHRlbiArPSAyOworCQl9IGVsc2UgeworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgY29sLCAnfCcpOworCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQkJY2hhcnNfd3JpdHRlbiArPSAyOworCQl9CisJfQorCisJZ3JhcGhfcGFkX2hvcml6b250YWxseShncmFwaCwgc2IsIGNoYXJzX3dyaXR0ZW4pOworCisJLyoKKwkgKiBVcGRhdGUgZ3JhcGgtPnN0YXRlCisJICovCisJaWYgKGdyYXBoX2lzX21hcHBpbmdfY29ycmVjdChncmFwaCkpCisJCWdyYXBoX3VwZGF0ZV9zdGF0ZShncmFwaCwgR1JBUEhfUEFERElORyk7CisJZWxzZQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX0NPTExBUFNJTkcpOworfQorCitzdGF0aWMgdm9pZCBncmFwaF9vdXRwdXRfY29sbGFwc2luZ19saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgaTsKKwlpbnQgKnRtcF9tYXBwaW5nOworCXNob3J0IHVzZWRfaG9yaXpvbnRhbCA9IDA7CisJaW50IGhvcml6b250YWxfZWRnZSA9IC0xOworCWludCBob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ID0gLTE7CisKKwkvKgorCSAqIENsZWFyIG91dCB0aGUgbmV3X21hcHBpbmcgYXJyYXkKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKQorCQlncmFwaC0+bmV3X21hcHBpbmdbaV0gPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bWFwcGluZ19zaXplOyBpKyspIHsKKwkJaW50IHRhcmdldCA9IGdyYXBoLT5tYXBwaW5nW2ldOworCQlpZiAodGFyZ2V0IDwgMCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFNpbmNlIHVwZGF0ZV9jb2x1bW5zKCkgYWx3YXlzIGluc2VydHMgdGhlIGxlZnRtb3N0CisJCSAqIGNvbHVtbiBmaXJzdCwgZWFjaCBicmFuY2gncyB0YXJnZXQgbG9jYXRpb24gc2hvdWxkCisJCSAqIGFsd2F5cyBiZSBlaXRoZXIgaXRzIGN1cnJlbnQgbG9jYXRpb24gb3IgdG8gdGhlIGxlZnQgb2YKKwkJICogaXRzIGN1cnJlbnQgbG9jYXRpb24uCisJCSAqCisJCSAqIFdlIG5ldmVyIGhhdmUgdG8gbW92ZSBicmFuY2hlcyB0byB0aGUgcmlnaHQuICBUaGlzIG1ha2VzCisJCSAqIHRoZSBncmFwaCBtdWNoIG1vcmUgbGVnaWJsZSwgc2luY2Ugd2hlbmV2ZXIgYnJhbmNoZXMKKwkJICogY3Jvc3MsIG9ubHkgb25lIGlzIG1vdmluZyBkaXJlY3Rpb25zLgorCQkgKi8KKwkJYXNzZXJ0KHRhcmdldCAqIDIgPD0gaSk7CisKKwkJaWYgKHRhcmdldCAqIDIgPT0gaSkgeworCQkJLyoKKwkJCSAqIFRoaXMgY29sdW1uIGlzIGFscmVhZHkgaW4gdGhlCisJCQkgKiBjb3JyZWN0IHBsYWNlCisJCQkgKi8KKwkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaV0gPT0gLTEpOworCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2ldID0gdGFyZ2V0OworCQl9IGVsc2UgaWYgKGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPCAwKSB7CisJCQkvKgorCQkJICogTm90aGluZyBpcyB0byB0aGUgbGVmdC4KKwkJCSAqIE1vdmUgdG8gdGhlIGxlZnQgYnkgb25lCisJCQkgKi8KKwkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPSB0YXJnZXQ7CisJCQkvKgorCQkJICogSWYgdGhlcmUgaXNuJ3QgYWxyZWFkeSBhbiBlZGdlIG1vdmluZyBob3Jpem9udGFsbHkKKwkJCSAqIHNlbGVjdCB0aGlzIG9uZS4KKwkJCSAqLworCQkJaWYgKGhvcml6b250YWxfZWRnZSA9PSAtMSkgeworCQkJCWludCBqOworCQkJCWhvcml6b250YWxfZWRnZSA9IGk7CisJCQkJaG9yaXpvbnRhbF9lZGdlX3RhcmdldCA9IHRhcmdldDsKKwkJCQkvKgorCQkJCSAqIFRoZSB2YXJpYWJsZSB0YXJnZXQgaXMgdGhlIGluZGV4IG9mIHRoZSBncmFwaAorCQkJCSAqIGNvbHVtbiwgYW5kIHRoZXJlZm9yZSB0YXJnZXQqMiszIGlzIHRoZQorCQkJCSAqIGFjdHVhbCBzY3JlZW4gY29sdW1uIG9mIHRoZSBmaXJzdCBob3Jpem9udGFsCisJCQkJICogbGluZS4KKwkJCQkgKi8KKwkJCQlmb3IgKGogPSAodGFyZ2V0ICogMikrMzsgaiA8IChpIC0gMik7IGogKz0gMikKKwkJCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2pdID0gdGFyZ2V0OworCQkJfQorCQl9IGVsc2UgaWYgKGdyYXBoLT5uZXdfbWFwcGluZ1tpIC0gMV0gPT0gdGFyZ2V0KSB7CisJCQkvKgorCQkJICogVGhlcmUgaXMgYSBicmFuY2ggbGluZSB0byBvdXIgbGVmdAorCQkJICogYWxyZWFkeSwgYW5kIGl0IGlzIG91ciB0YXJnZXQuICBXZQorCQkJICogY29tYmluZSB3aXRoIHRoaXMgbGluZSwgc2luY2Ugd2Ugc2hhcmUKKwkJCSAqIHRoZSBzYW1lIHBhcmVudCBjb21taXQuCisJCQkgKgorCQkJICogV2UgZG9uJ3QgaGF2ZSB0byBhZGQgYW55dGhpbmcgdG8gdGhlCisJCQkgKiBvdXRwdXQgb3IgbmV3X21hcHBpbmcsIHNpbmNlIHRoZQorCQkJICogZXhpc3RpbmcgYnJhbmNoIGxpbmUgaGFzIGFscmVhZHkgdGFrZW4KKwkJCSAqIGNhcmUgb2YgaXQuCisJCQkgKi8KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyBhIGJyYW5jaCBsaW5lIHRvIG91ciBsZWZ0LAorCQkJICogYnV0IGl0IGlzbid0IG91ciB0YXJnZXQuICBXZSBuZWVkIHRvCisJCQkgKiBjcm9zcyBvdmVyIGl0LgorCQkJICoKKwkJCSAqIFRoZSBzcGFjZSBqdXN0IHRvIHRoZSBsZWZ0IG9mIHRoaXMKKwkJCSAqIGJyYW5jaCBzaG91bGQgYWx3YXlzIGJlIGVtcHR5LgorCQkJICoKKwkJCSAqIFRoZSBicmFuY2ggdG8gdGhlIGxlZnQgb2YgdGhhdCBzcGFjZQorCQkJICogc2hvdWxkIGJlIG91ciBldmVudHVhbCB0YXJnZXQuCisJCQkgKi8KKwkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDFdID4gdGFyZ2V0KTsKKwkJCWFzc2VydChncmFwaC0+bmV3X21hcHBpbmdbaSAtIDJdIDwgMCk7CisJCQlhc3NlcnQoZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAzXSA9PSB0YXJnZXQpOworCQkJZ3JhcGgtPm5ld19tYXBwaW5nW2kgLSAyXSA9IHRhcmdldDsKKwkJCS8qCisJCQkgKiBNYXJrIHRoaXMgYnJhbmNoIGFzIHRoZSBob3Jpem9udGFsIGVkZ2UgdG8KKwkJCSAqIHByZXZlbnQgYW55IG90aGVyIGVkZ2VzIGZyb20gbW92aW5nCisJCQkgKiBob3Jpem9udGFsbHkuCisJCQkgKi8KKwkJCWlmIChob3Jpem9udGFsX2VkZ2UgPT0gLTEpCisJCQkJaG9yaXpvbnRhbF9lZGdlID0gaTsKKwkJfQorCX0KKworCS8qCisJICogVGhlIG5ldyBtYXBwaW5nIG1heSBiZSAxIHNtYWxsZXIgdGhhbiB0aGUgb2xkIG1hcHBpbmcKKwkgKi8KKwlpZiAoZ3JhcGgtPm5ld19tYXBwaW5nW2dyYXBoLT5tYXBwaW5nX3NpemUgLSAxXSA8IDApCisJCWdyYXBoLT5tYXBwaW5nX3NpemUtLTsKKworCS8qCisJICogT3V0cHV0IG91dCBhIGxpbmUgYmFzZWQgb24gdGhlIG5ldyBtYXBwaW5nIGluZm8KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JhcGgtPm1hcHBpbmdfc2l6ZTsgaSsrKSB7CisJCWludCB0YXJnZXQgPSBncmFwaC0+bmV3X21hcHBpbmdbaV07CisJCWlmICh0YXJnZXQgPCAwKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCQllbHNlIGlmICh0YXJnZXQgKiAyID09IGkpCisJCQlzdHJidWZfd3JpdGVfY29sdW1uKHNiLCAmZ3JhcGgtPm5ld19jb2x1bW5zW3RhcmdldF0sICd8Jyk7CisJCWVsc2UgaWYgKHRhcmdldCA9PSBob3Jpem9udGFsX2VkZ2VfdGFyZ2V0ICYmCisJCQkgaSAhPSBob3Jpem9udGFsX2VkZ2UgLSAxKSB7CisJCQkJLyoKKwkJCQkgKiBTZXQgdGhlIG1hcHBpbmdzIGZvciBhbGwgYnV0IHRoZQorCQkJCSAqIGZpcnN0IHNlZ21lbnQgdG8gLTEgc28gdGhhdCB0aGV5CisJCQkJICogd29uJ3QgY29udGludWUgaW50byB0aGUgbmV4dCBsaW5lLgorCQkJCSAqLworCQkJCWlmIChpICE9ICh0YXJnZXQgKiAyKSszKQorCQkJCQlncmFwaC0+bmV3X21hcHBpbmdbaV0gPSAtMTsKKwkJCQl1c2VkX2hvcml6b250YWwgPSAxOworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnXycpOworCQl9IGVsc2UgeworCQkJaWYgKHVzZWRfaG9yaXpvbnRhbCAmJiBpIDwgaG9yaXpvbnRhbF9lZGdlKQorCQkJCWdyYXBoLT5uZXdfbWFwcGluZ1tpXSA9IC0xOworCQkJc3RyYnVmX3dyaXRlX2NvbHVtbihzYiwgJmdyYXBoLT5uZXdfY29sdW1uc1t0YXJnZXRdLCAnLycpOworCisJCX0KKwl9CisKKwlncmFwaF9wYWRfaG9yaXpvbnRhbGx5KGdyYXBoLCBzYiwgZ3JhcGgtPm1hcHBpbmdfc2l6ZSk7CisKKwkvKgorCSAqIFN3YXAgbWFwcGluZyBhbmQgbmV3X21hcHBpbmcKKwkgKi8KKwl0bXBfbWFwcGluZyA9IGdyYXBoLT5tYXBwaW5nOworCWdyYXBoLT5tYXBwaW5nID0gZ3JhcGgtPm5ld19tYXBwaW5nOworCWdyYXBoLT5uZXdfbWFwcGluZyA9IHRtcF9tYXBwaW5nOworCisJLyoKKwkgKiBJZiBncmFwaC0+bWFwcGluZyBpbmRpY2F0ZXMgdGhhdCBhbGwgb2YgdGhlIGJyYW5jaCBsaW5lcworCSAqIGFyZSBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IHBvc2l0aW9ucywgd2UgYXJlIGRvbmUuCisJICogT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGNvbGxhcHNlIHNvbWUgYnJhbmNoIGxpbmVzIHRvZ2V0aGVyLgorCSAqLworCWlmIChncmFwaF9pc19tYXBwaW5nX2NvcnJlY3QoZ3JhcGgpKQorCQlncmFwaF91cGRhdGVfc3RhdGUoZ3JhcGgsIEdSQVBIX1BBRERJTkcpOworfQorCitpbnQgZ3JhcGhfbmV4dF9saW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzd2l0Y2ggKGdyYXBoLT5zdGF0ZSkgeworCWNhc2UgR1JBUEhfUEFERElORzoKKwkJZ3JhcGhfb3V0cHV0X3BhZGRpbmdfbGluZShncmFwaCwgc2IpOworCQlyZXR1cm4gMDsKKwljYXNlIEdSQVBIX1NLSVA6CisJCWdyYXBoX291dHB1dF9za2lwX2xpbmUoZ3JhcGgsIHNiKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBHUkFQSF9QUkVfQ09NTUlUOgorCQlncmFwaF9vdXRwdXRfcHJlX2NvbW1pdF9saW5lKGdyYXBoLCBzYik7CisJCXJldHVybiAwOworCWNhc2UgR1JBUEhfQ09NTUlUOgorCQlncmFwaF9vdXRwdXRfY29tbWl0X2xpbmUoZ3JhcGgsIHNiKTsKKwkJcmV0dXJuIDE7CisJY2FzZSBHUkFQSF9QT1NUX01FUkdFOgorCQlncmFwaF9vdXRwdXRfcG9zdF9tZXJnZV9saW5lKGdyYXBoLCBzYik7CisJCXJldHVybiAwOworCWNhc2UgR1JBUEhfQ09MTEFQU0lORzoKKwkJZ3JhcGhfb3V0cHV0X2NvbGxhcHNpbmdfbGluZShncmFwaCwgc2IpOworCQlyZXR1cm4gMDsKKwl9CisKKwlhc3NlcnQoMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoX3BhZGRpbmdfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IGk7CisKKwlpZiAoZ3JhcGgtPnN0YXRlICE9IEdSQVBIX0NPTU1JVCkgeworCQlncmFwaF9uZXh0X2xpbmUoZ3JhcGgsIHNiKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogT3V0cHV0IHRoZSByb3cgY29udGFpbmluZyB0aGlzIGNvbW1pdAorCSAqIEl0ZXJhdGUgdXAgdG8gYW5kIGluY2x1ZGluZyBncmFwaC0+bnVtX2NvbHVtbnMsCisJICogc2luY2UgdGhlIGN1cnJlbnQgY29tbWl0IG1heSBub3QgYmUgaW4gYW55IG9mIHRoZSBleGlzdGluZworCSAqIGNvbHVtbnMuICAoVGhpcyBoYXBwZW5zIHdoZW4gdGhlIGN1cnJlbnQgY29tbWl0IGRvZXNuJ3QgaGF2ZSBhbnkKKwkgKiBjaGlsZHJlbiB0aGF0IHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQuKQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBncmFwaC0+bnVtX2NvbHVtbnM7IGkrKykgeworCQlzdHJ1Y3QgY29sdW1uICpjb2wgPSAmZ3JhcGgtPmNvbHVtbnNbaV07CisJCXN0cmJ1Zl93cml0ZV9jb2x1bW4oc2IsIGNvbCwgJ3wnKTsKKwkJaWYgKGNvbC0+Y29tbWl0ID09IGdyYXBoLT5jb21taXQgJiYgZ3JhcGgtPm51bV9wYXJlbnRzID4gMikKKwkJCXN0cmJ1Zl9hZGRjaGFycyhzYiwgJyAnLCAoZ3JhcGgtPm51bV9wYXJlbnRzIC0gMikgKiAyKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnICcpOworCX0KKworCWdyYXBoX3BhZF9ob3Jpem9udGFsbHkoZ3JhcGgsIHNiLCBncmFwaC0+bnVtX2NvbHVtbnMpOworCisJLyoKKwkgKiBVcGRhdGUgZ3JhcGgtPnByZXZfc3RhdGUgc2luY2Ugd2UgaGF2ZSBvdXRwdXQgYSBwYWRkaW5nIGxpbmUKKwkgKi8KKwlncmFwaC0+cHJldl9zdGF0ZSA9IEdSQVBIX1BBRERJTkc7Cit9CisKK2ludCBncmFwaF9pc19jb21taXRfZmluaXNoZWQoc3RydWN0IGdpdF9ncmFwaCBjb25zdCAqZ3JhcGgpCit7CisJcmV0dXJuIChncmFwaC0+c3RhdGUgPT0gR1JBUEhfUEFERElORyk7Cit9CisKK3ZvaWQgZ3JhcGhfc2hvd19jb21taXQoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpCit7CisJc3RydWN0IHN0cmJ1ZiBtc2didWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc2hvd25fY29tbWl0X2xpbmUgPSAwOworCisJaWYgKCFncmFwaCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBXaGVuIHNob3dpbmcgYSBkaWZmIG9mIGEgbWVyZ2UgYWdhaW5zdCBlYWNoIG9mIGl0cyBwYXJlbnRzLCB3ZQorCSAqIGFyZSBjYWxsZWQgb25jZSBmb3IgZWFjaCBwYXJlbnQgd2l0aG91dCBncmFwaF91cGRhdGUgaGF2aW5nIGJlZW4KKwkgKiBjYWxsZWQuICBJbiB0aGlzIGNhc2UsIHNpbXBseSBvdXRwdXQgYSBzaW5nbGUgcGFkZGluZyBsaW5lLgorCSAqLworCWlmIChncmFwaF9pc19jb21taXRfZmluaXNoZWQoZ3JhcGgpKSB7CisJCWdyYXBoX3Nob3dfcGFkZGluZyhncmFwaCk7CisJCXNob3duX2NvbW1pdF9saW5lID0gMTsKKwl9CisKKwl3aGlsZSAoIXNob3duX2NvbW1pdF9saW5lICYmICFncmFwaF9pc19jb21taXRfZmluaXNoZWQoZ3JhcGgpKSB7CisJCXNob3duX2NvbW1pdF9saW5lID0gZ3JhcGhfbmV4dF9saW5lKGdyYXBoLCAmbXNnYnVmKTsKKwkJZndyaXRlKG1zZ2J1Zi5idWYsIHNpemVvZihjaGFyKSwgbXNnYnVmLmxlbiwgc3Rkb3V0KTsKKwkJaWYgKCFzaG93bl9jb21taXRfbGluZSkKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCXN0cmJ1Zl9zZXRsZW4oJm1zZ2J1ZiwgMCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7Cit9CisKK3ZvaWQgZ3JhcGhfc2hvd19vbmVsaW5lKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBzdHJidWYgbXNnYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm47CisKKwlncmFwaF9uZXh0X2xpbmUoZ3JhcGgsICZtc2didWYpOworCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIHN0ZG91dCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7Cit9CisKK3ZvaWQgZ3JhcGhfc2hvd19wYWRkaW5nKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoKQoreworCXN0cnVjdCBzdHJidWYgbXNnYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm47CisKKwlncmFwaF9wYWRkaW5nX2xpbmUoZ3JhcGgsICZtc2didWYpOworCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIHN0ZG91dCk7CisJc3RyYnVmX3JlbGVhc2UoJm1zZ2J1Zik7Cit9CisKK2ludCBncmFwaF9zaG93X3JlbWFpbmRlcihzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZ2J1ZiA9IFNUUkJVRl9JTklUOworCWludCBzaG93biA9IDA7CisKKwlpZiAoIWdyYXBoKQorCQlyZXR1cm4gMDsKKworCWlmIChncmFwaF9pc19jb21taXRfZmluaXNoZWQoZ3JhcGgpKQorCQlyZXR1cm4gMDsKKworCWZvciAoOzspIHsKKwkJZ3JhcGhfbmV4dF9saW5lKGdyYXBoLCAmbXNnYnVmKTsKKwkJZndyaXRlKG1zZ2J1Zi5idWYsIHNpemVvZihjaGFyKSwgbXNnYnVmLmxlbiwgc3Rkb3V0KTsKKwkJc3RyYnVmX3NldGxlbigmbXNnYnVmLCAwKTsKKwkJc2hvd24gPSAxOworCisJCWlmICghZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKGdyYXBoKSkKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKwlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKKworCXJldHVybiBzaG93bjsKK30KKworCitzdGF0aWMgdm9pZCBncmFwaF9zaG93X3N0cmJ1ZihzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiBjb25zdCAqc2IpCit7CisJY2hhciAqcDsKKworCWlmICghZ3JhcGgpIHsKKwkJZndyaXRlKHNiLT5idWYsIHNpemVvZihjaGFyKSwgc2ItPmxlbiwgc3Rkb3V0KTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogUHJpbnQgdGhlIHN0cmJ1ZiBsaW5lIGJ5IGxpbmUsCisJICogYW5kIGRpc3BsYXkgdGhlIGdyYXBoIGluZm8gYmVmb3JlIGVhY2ggbGluZSBidXQgdGhlIGZpcnN0LgorCSAqLworCXAgPSBzYi0+YnVmOworCXdoaWxlIChwKSB7CisJCXNpemVfdCBsZW47CisJCWNoYXIgKm5leHRfcCA9IHN0cmNocihwLCAnXG4nKTsKKwkJaWYgKG5leHRfcCkgeworCQkJbmV4dF9wKys7CisJCQlsZW4gPSBuZXh0X3AgLSBwOworCQl9IGVsc2UgeworCQkJbGVuID0gKHNiLT5idWYgKyBzYi0+bGVuKSAtIHA7CisJCX0KKwkJZndyaXRlKHAsIHNpemVvZihjaGFyKSwgbGVuLCBzdGRvdXQpOworCQlpZiAobmV4dF9wICYmICpuZXh0X3AgIT0gJ1wwJykKKwkJCWdyYXBoX3Nob3dfb25lbGluZShncmFwaCk7CisJCXAgPSBuZXh0X3A7CisJfQorfQorCit2b2lkIGdyYXBoX3Nob3dfY29tbWl0X21zZyhzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwKKwkJCSAgIHN0cnVjdCBzdHJidWYgY29uc3QgKnNiKQoreworCWludCBuZXdsaW5lX3Rlcm1pbmF0ZWQ7CisKKwlpZiAoIWdyYXBoKSB7CisJCS8qCisJCSAqIElmIHRoZXJlJ3Mgbm8gZ3JhcGgsIGp1c3QgcHJpbnQgdGhlIG1lc3NhZ2UgYnVmZmVyLgorCQkgKgorCQkgKiBUaGUgbWVzc2FnZSBidWZmZXIgZm9yIENNSVRfRk1UX09ORUxJTkUgYW5kCisJCSAqIENNSVRfRk1UX1VTRVJGT1JNQVQgYXJlIGFscmVhZHkgbWlzc2luZyBhIHRlcm1pbmF0aW5nCisJCSAqIG5ld2xpbmUuICBBbGwgb2YgdGhlIG90aGVyIGZvcm1hdHMgc2hvdWxkIGhhdmUgaXQuCisJCSAqLworCQlmd3JpdGUoc2ItPmJ1Ziwgc2l6ZW9mKGNoYXIpLCBzYi0+bGVuLCBzdGRvdXQpOworCQlyZXR1cm47CisJfQorCisJbmV3bGluZV90ZXJtaW5hdGVkID0gKHNiLT5sZW4gJiYgc2ItPmJ1ZltzYi0+bGVuIC0gMV0gPT0gJ1xuJyk7CisKKwkvKgorCSAqIFNob3cgdGhlIGNvbW1pdCBtZXNzYWdlCisJICovCisJZ3JhcGhfc2hvd19zdHJidWYoZ3JhcGgsIHNiKTsKKworCS8qCisJICogSWYgdGhlcmUgaXMgbW9yZSBvdXRwdXQgbmVlZGVkIGZvciB0aGlzIGNvbW1pdCwgc2hvdyBpdCBub3cKKwkgKi8KKwlpZiAoIWdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChncmFwaCkpIHsKKwkJLyoKKwkJICogSWYgc2IgZG9lc24ndCBoYXZlIGEgdGVybWluYXRpbmcgbmV3bGluZSwgcHJpbnQgb25lIG5vdywKKwkJICogc28gd2UgY2FuIHN0YXJ0IHRoZSByZW1haW5kZXIgb2YgdGhlIGdyYXBoIG91dHB1dCBvbiBhCisJCSAqIG5ldyBsaW5lLgorCQkgKi8KKwkJaWYgKCFuZXdsaW5lX3Rlcm1pbmF0ZWQpCisJCQlwdXRjaGFyKCdcbicpOworCisJCWdyYXBoX3Nob3dfcmVtYWluZGVyKGdyYXBoKTsKKworCQkvKgorCQkgKiBJZiBzYiBlbmRzIHdpdGggYSBuZXdsaW5lLCBvdXIgb3V0cHV0IHNob3VsZCB0b28uCisJCSAqLworCQlpZiAobmV3bGluZV90ZXJtaW5hdGVkKQorCQkJcHV0Y2hhcignXG4nKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9ncmFwaC5oIGIvZ3JhcGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmU2MmJkCi0tLSAvZGV2L251bGwKKysrIGIvZ3JhcGguaApAQCAtMCwwICsxLDExNCBAQAorI2lmbmRlZiBHUkFQSF9ICisjZGVmaW5lIEdSQVBIX0gKKworLyogQSBncmFwaCBpcyBhIHBvaW50ZXIgdG8gdGhpcyBvcGFxdWUgc3RydWN0dXJlICovCitzdHJ1Y3QgZ2l0X2dyYXBoOworCisvKgorICogU2V0IHVwIGEgY3VzdG9tIHNjaGVtZSBmb3IgY29sdW1uIGNvbG9ycy4KKyAqCisgKiBUaGUgZGVmYXVsdCBjb2x1bW4gY29sb3Igc2NoZW1lIGluc2VydHMgQU5TSSBjb2xvciBlc2NhcGVzIHRvIGNvbG9yaXplCisgKiB0aGUgZ3JhcGguIFRoZSB2YXJpb3VzIGNvbG9yIGVzY2FwZXMgYXJlIHN0b3JlZCBpbiBhbiBhcnJheSBvZiBzdHJpbmdzCisgKiB3aGVyZSBlYWNoIGVudHJ5IGNvcnJlc3BvbmRzIHRvIGEgY29sb3IsIGV4Y2VwdCBmb3IgdGhlIGxhc3QgZW50cnksCisgKiB3aGljaCBkZW5vdGVzIHRoZSBlc2NhcGUgZm9yIHJlc2V0dGluZyB0aGUgY29sb3IgYmFjayB0byB0aGUgZGVmYXVsdC4KKyAqIFdoZW4gZ2VuZXJhdGluZyB0aGUgZ3JhcGgsIHN0cmluZ3MgZnJvbSB0aGlzIGFycmF5IGFyZSBpbnNlcnRlZCBiZWZvcmUKKyAqIGFuZCBhZnRlciB0aGUgdmFyaW91cyBjb2x1bW4gY2hhcmFjdGVycy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gZW5hYmxlIGEgY3VzdG9tIGFycmF5IG9mIGNvbG9yIGVzY2FwZXMuCisgKiBUaGUgJ2NvbG9yc19tYXgnIGFyZ3VtZW50IGlzIHRoZSBpbmRleCBvZiB0aGUgbGFzdCAicmVzZXQiIGVudHJ5LgorICoKKyAqIFRoaXMgZnVuY3Rpb25zIG11c3QgYmUgY2FsbGVkIEJFRk9SRSBncmFwaF9pbml0KCkgaXMgY2FsbGVkLgorICoKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gaXNuJ3QgdXNlZCBpbiBHaXQgb3V0c2lkZSBncmFwaC5jIGJ1dCBpdCBpcyB1c2VkCisgKiBieSBDR2l0IChodHRwOi8vZ2l0Lnp4MmM0LmNvbS9jZ2l0LykgdG8gdXNlIEhUTUwgZm9yIGNvbG9ycy4KKyAqLwordm9pZCBncmFwaF9zZXRfY29sdW1uX2NvbG9ycyhjb25zdCBjaGFyICoqY29sb3JzLCB1bnNpZ25lZCBzaG9ydCBjb2xvcnNfbWF4KTsKKworLyoKKyAqIENyZWF0ZSBhIG5ldyBzdHJ1Y3QgZ2l0X2dyYXBoLgorICovCitzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaF9pbml0KHN0cnVjdCByZXZfaW5mbyAqb3B0KTsKKworLyoKKyAqIFVwZGF0ZSBhIGdpdF9ncmFwaCB3aXRoIGEgbmV3IGNvbW1pdC4KKyAqIFRoaXMgd2lsbCBjYXVzZSB0aGUgZ3JhcGggdG8gYmVnaW4gb3V0cHV0dGluZyBsaW5lcyBmb3IgdGhlIG5ldyBjb21taXQKKyAqIHRoZSBuZXh0IHRpbWUgZ3JhcGhfbmV4dF9saW5lKCkgaXMgY2FsbGVkLgorICoKKyAqIElmIGdyYXBoX3VwZGF0ZSgpIGlzIGNhbGxlZCBiZWZvcmUgZ3JhcGhfaXNfY29tbWl0X2ZpbmlzaGVkKCkgcmV0dXJucyAxLAorICogdGhlIG5leHQgY2FsbCB0byBncmFwaF9uZXh0X2xpbmUoKSB3aWxsIG91dHB1dCBhbiBlbGxpcHNpcyAoIi4uLiIpCisgKiB0byBpbmRpY2F0ZSB0aGF0IGEgcG9ydGlvbiBvZiB0aGUgZ3JhcGggaXMgbWlzc2luZy4KKyAqLwordm9pZCBncmFwaF91cGRhdGUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgsIHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgYSBncmFwaCBoYXMgZmluaXNoZWQgb3V0cHV0dGluZyBsaW5lcyBmb3IgdGhlIGN1cnJlbnQKKyAqIGNvbW1pdC4KKyAqCisgKiBSZXR1cm5zIDEgaWYgZ3JhcGhfbmV4dF9saW5lKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGFnYWluIGJlZm9yZQorICogZ3JhcGhfdXBkYXRlKCkgc2hvdWxkIGJlIGNhbGxlZC4gIFJldHVybnMgMCBpZiBubyBtb3JlIGxpbmVzIGFyZSBuZWVkZWQKKyAqIGZvciB0aGlzIGNvbW1pdC4gIElmIDAgaXMgcmV0dXJuZWQsIGdyYXBoX25leHRfbGluZSgpIG1heSBzdGlsbCBiZQorICogY2FsbGVkIHdpdGhvdXQgY2FsbGluZyBncmFwaF91cGRhdGUoKSwgYW5kIGl0IHdpbGwgbWVyZWx5IG91dHB1dAorICogYXBwcm9wcmlhdGUgInZlcnRpY2FsIHBhZGRpbmciIGluIHRoZSBncmFwaC4KKyAqLworaW50IGdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChzdHJ1Y3QgZ2l0X2dyYXBoIGNvbnN0ICpncmFwaCk7CisKKy8qCisgKiBPdXRwdXQgdGhlIG5leHQgbGluZSBmb3IgYSBncmFwaC4KKyAqIFRoaXMgZm9ybWF0cyB0aGUgbmV4dCBncmFwaCBsaW5lIGludG8gdGhlIHNwZWNpZmllZCBzdHJidWYuICBJdCBpcyBub3QKKyAqIHRlcm1pbmF0ZWQgd2l0aCBhIG5ld2xpbmUuCisgKgorICogUmV0dXJucyAxIGlmIHRoZSBsaW5lIGluY2x1ZGVzIHRoZSBjdXJyZW50IGNvbW1pdCwgYW5kIDAgb3RoZXJ3aXNlLgorICogZ3JhcGhfbmV4dF9saW5lKCkgd2lsbCByZXR1cm4gMSBleGFjdGx5IG9uY2UgZm9yIGVhY2ggdGltZQorICogZ3JhcGhfdXBkYXRlKCkgaXMgY2FsbGVkLgorICoKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gaXNuJ3QgdXNlZCBpbiBHaXQgb3V0c2lkZSBncmFwaC5jIGJ1dCBpdCBpcyB1c2VkCisgKiBieSBDR2l0IChodHRwOi8vZ2l0Lnp4MmM0LmNvbS9jZ2l0LykgdG8gd3JhcCBIVE1MIGFyb3VuZCBncmFwaCBsaW5lcy4KKyAqLworaW50IGdyYXBoX25leHRfbGluZShzdHJ1Y3QgZ2l0X2dyYXBoICpncmFwaCwgc3RydWN0IHN0cmJ1ZiAqc2IpOworCisKKy8qCisgKiBncmFwaF9zaG93Xyo6IGhlbHBlciBmdW5jdGlvbnMgZm9yIHByaW50aW5nIHRvIHN0ZG91dAorICovCisKKworLyoKKyAqIElmIHRoZSBncmFwaCBpcyBub24tTlVMTCwgcHJpbnQgdGhlIGhpc3RvcnkgZ3JhcGggdG8gc3Rkb3V0LAorICogdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgbGluZSBjb250YWluaW5nIHRoaXMgY29tbWl0LgorICogRG9lcyBub3QgcHJpbnQgYSB0ZXJtaW5hdGluZyBuZXdsaW5lIG9uIHRoZSBsYXN0IGxpbmUuCisgKi8KK3ZvaWQgZ3JhcGhfc2hvd19jb21taXQoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBwcmludCBvbmUgbGluZSBvZiB0aGUgaGlzdG9yeSBncmFwaCB0byBzdGRvdXQuCisgKiBEb2VzIG5vdCBwcmludCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgb24gdGhlIGxhc3QgbGluZS4KKyAqLwordm9pZCBncmFwaF9zaG93X29uZWxpbmUoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBwcmludCBvbmUgbGluZSBvZiB2ZXJ0aWNhbCBncmFwaCBwYWRkaW5nIHRvCisgKiBzdGRvdXQuICBEb2VzIG5vdCBwcmludCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUgb24gdGhlIGxhc3QgbGluZS4KKyAqLwordm9pZCBncmFwaF9zaG93X3BhZGRpbmcoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogSWYgdGhlIGdyYXBoIGlzIG5vbi1OVUxMLCBwcmludCB0aGUgcmVzdCBvZiB0aGUgaGlzdG9yeSBncmFwaCBmb3IgdGhpcworICogY29tbWl0IHRvIHN0ZG91dC4gIERvZXMgbm90IHByaW50IGEgdGVybWluYXRpbmcgbmV3bGluZSBvbiB0aGUgbGFzdCBsaW5lLgorICovCitpbnQgZ3JhcGhfc2hvd19yZW1haW5kZXIoc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGgpOworCisvKgorICogUHJpbnQgYSBjb21taXQgbWVzc2FnZSBzdHJidWYgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIGdyYXBoIHRvIHN0ZG91dC4KKyAqCisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gZ3JhcGhfc2hvd19zdHJidWYoKSwgYnV0IGl0IGFsd2F5cyBwcmludHMgdGhlCisgKiByZW1haW5kZXIgb2YgdGhlIGdyYXBoLgorICoKKyAqIElmIHRoZSBzdHJidWYgZW5kcyB3aXRoIGEgbmV3bGluZSwgdGhlIG91dHB1dCBwcmludGVkIGJ5CisgKiBncmFwaF9zaG93X2NvbW1pdF9tc2coKSB3aWxsIGVuZCB3aXRoIGEgbmV3bGluZS4gIElmIHRoZSBzdHJidWYgaXMKKyAqIG1pc3NpbmcgYSB0ZXJtaW5hdGluZyBuZXdsaW5lIChpbmNsdWRpbmcgaWYgaXQgaXMgZW1wdHkpLCB0aGUgb3V0cHV0CisgKiBwcmludGVkIGJ5IGdyYXBoX3Nob3dfY29tbWl0X21zZygpIHdpbGwgYWxzbyBiZSBtaXNzaW5nIGEgdGVybWluYXRpbmcKKyAqIG5ld2xpbmUuCisgKi8KK3ZvaWQgZ3JhcGhfc2hvd19jb21taXRfbXNnKHN0cnVjdCBnaXRfZ3JhcGggKmdyYXBoLCBzdHJ1Y3Qgc3RyYnVmIGNvbnN0ICpzYik7CisKKyNlbmRpZiAvKiBHUkFQSF9IICovCmRpZmYgLS1naXQgYS9ncmVwLmMgYi9ncmVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IyYjk2YQotLS0gL2Rldi9udWxsCisrKyBiL2dyZXAuYwpAQCAtMCwwICsxLDE3OTggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImdyZXAuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorCitzdGF0aWMgaW50IGdyZXBfc291cmNlX2xvYWQoc3RydWN0IGdyZXBfc291cmNlICpncyk7CitzdGF0aWMgaW50IGdyZXBfc291cmNlX2lzX2JpbmFyeShzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKTsKKworc3RhdGljIHN0cnVjdCBncmVwX29wdCBncmVwX2RlZmF1bHRzOworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgZ3JlcF9kZWZhdWx0cyB0ZW1wbGF0ZSB3aXRoIGhhcmRjb2RlZCBkZWZhdWx0cy4KKyAqIFdlIGNvdWxkIGxldCB0aGUgY29tcGlsZXIgZG8gdGhpcywgYnV0IHdpdGhvdXQgQzk5IGluaXRpYWxpemVycworICogdGhlIGNvZGUgZ2V0cyB1bndpZWxkeSBhbmQgdW5yZWFkYWJsZSwgc28uLi4KKyAqLwordm9pZCBpbml0X2dyZXBfZGVmYXVsdHModm9pZCkKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCA9ICZncmVwX2RlZmF1bHRzOworCXN0YXRpYyBpbnQgcnVuX29uY2U7CisKKwlpZiAocnVuX29uY2UpCisJCXJldHVybjsKKwlydW5fb25jZSsrOworCisJbWVtc2V0KG9wdCwgMCwgc2l6ZW9mKCpvcHQpKTsKKwlvcHQtPnJlbGF0aXZlID0gMTsKKwlvcHQtPnBhdGhuYW1lID0gMTsKKwlvcHQtPnJlZ2ZsYWdzID0gUkVHX05FV0xJTkU7CisJb3B0LT5tYXhfZGVwdGggPSAtMTsKKwlvcHQtPnBhdHRlcm5fdHlwZV9vcHRpb24gPSBHUkVQX1BBVFRFUk5fVFlQRV9VTlNQRUNJRklFRDsKKwlvcHQtPmV4dGVuZGVkX3JlZ2V4cF9vcHRpb24gPSAwOworCWNvbG9yX3NldChvcHQtPmNvbG9yX2NvbnRleHQsICIiKTsKKwljb2xvcl9zZXQob3B0LT5jb2xvcl9maWxlbmFtZSwgIiIpOworCWNvbG9yX3NldChvcHQtPmNvbG9yX2Z1bmN0aW9uLCAiIik7CisJY29sb3Jfc2V0KG9wdC0+Y29sb3JfbGluZW5vLCAiIik7CisJY29sb3Jfc2V0KG9wdC0+Y29sb3JfbWF0Y2hfY29udGV4dCwgR0lUX0NPTE9SX0JPTERfUkVEKTsKKwljb2xvcl9zZXQob3B0LT5jb2xvcl9tYXRjaF9zZWxlY3RlZCwgR0lUX0NPTE9SX0JPTERfUkVEKTsKKwljb2xvcl9zZXQob3B0LT5jb2xvcl9zZWxlY3RlZCwgIiIpOworCWNvbG9yX3NldChvcHQtPmNvbG9yX3NlcCwgR0lUX0NPTE9SX0NZQU4pOworCW9wdC0+Y29sb3IgPSAtMTsKK30KKworc3RhdGljIGludCBwYXJzZV9wYXR0ZXJuX3R5cGVfYXJnKGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqYXJnKQoreworCWlmICghc3RyY21wKGFyZywgImRlZmF1bHQiKSkKKwkJcmV0dXJuIEdSRVBfUEFUVEVSTl9UWVBFX1VOU1BFQ0lGSUVEOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiYmFzaWMiKSkKKwkJcmV0dXJuIEdSRVBfUEFUVEVSTl9UWVBFX0JSRTsKKwllbHNlIGlmICghc3RyY21wKGFyZywgImV4dGVuZGVkIikpCisJCXJldHVybiBHUkVQX1BBVFRFUk5fVFlQRV9FUkU7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJmaXhlZCIpKQorCQlyZXR1cm4gR1JFUF9QQVRURVJOX1RZUEVfRklYRUQ7CisJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJwZXJsIikpCisJCXJldHVybiBHUkVQX1BBVFRFUk5fVFlQRV9QQ1JFOworCWRpZSgiYmFkICVzIGFyZ3VtZW50OiAlcyIsIG9wdCwgYXJnKTsKK30KKworLyoKKyAqIFJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBvbmNlIGFuZCBzdG9yZSBpdCBpbgorICogdGhlIGdyZXBfZGVmYXVsdHMgdGVtcGxhdGUuCisgKi8KK2ludCBncmVwX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCA9ICZncmVwX2RlZmF1bHRzOworCWNoYXIgKmNvbG9yID0gTlVMTDsKKworCWlmICh1c2VyZGlmZl9jb25maWcodmFyLCB2YWx1ZSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIXN0cmNtcCh2YXIsICJncmVwLmV4dGVuZGVkcmVnZXhwIikpIHsKKwkJaWYgKGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJCW9wdC0+ZXh0ZW5kZWRfcmVnZXhwX29wdGlvbiA9IDE7CisJCWVsc2UKKwkJCW9wdC0+ZXh0ZW5kZWRfcmVnZXhwX29wdGlvbiA9IDA7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImdyZXAucGF0dGVybnR5cGUiKSkgeworCQlvcHQtPnBhdHRlcm5fdHlwZV9vcHRpb24gPSBwYXJzZV9wYXR0ZXJuX3R5cGVfYXJnKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJncmVwLmxpbmVudW1iZXIiKSkgeworCQlvcHQtPmxpbmVudW0gPSBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKHZhciwgImdyZXAuZnVsbG5hbWUiKSkgeworCQlvcHQtPnJlbGF0aXZlID0gIWdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuZ3JlcCIpKQorCQlvcHQtPmNvbG9yID0gZ2l0X2NvbmZpZ19jb2xvcmJvb2wodmFyLCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5ncmVwLmNvbnRleHQiKSkKKwkJY29sb3IgPSBvcHQtPmNvbG9yX2NvbnRleHQ7CisJZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5ncmVwLmZpbGVuYW1lIikpCisJCWNvbG9yID0gb3B0LT5jb2xvcl9maWxlbmFtZTsKKwllbHNlIGlmICghc3RyY21wKHZhciwgImNvbG9yLmdyZXAuZnVuY3Rpb24iKSkKKwkJY29sb3IgPSBvcHQtPmNvbG9yX2Z1bmN0aW9uOworCWVsc2UgaWYgKCFzdHJjbXAodmFyLCAiY29sb3IuZ3JlcC5saW5lbnVtYmVyIikpCisJCWNvbG9yID0gb3B0LT5jb2xvcl9saW5lbm87CisJZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5ncmVwLm1hdGNoY29udGV4dCIpKQorCQljb2xvciA9IG9wdC0+Y29sb3JfbWF0Y2hfY29udGV4dDsKKwllbHNlIGlmICghc3RyY21wKHZhciwgImNvbG9yLmdyZXAubWF0Y2hzZWxlY3RlZCIpKQorCQljb2xvciA9IG9wdC0+Y29sb3JfbWF0Y2hfc2VsZWN0ZWQ7CisJZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5ncmVwLnNlbGVjdGVkIikpCisJCWNvbG9yID0gb3B0LT5jb2xvcl9zZWxlY3RlZDsKKwllbHNlIGlmICghc3RyY21wKHZhciwgImNvbG9yLmdyZXAuc2VwYXJhdG9yIikpCisJCWNvbG9yID0gb3B0LT5jb2xvcl9zZXA7CisJZWxzZSBpZiAoIXN0cmNtcCh2YXIsICJjb2xvci5ncmVwLm1hdGNoIikpIHsKKwkJaW50IHJjID0gMDsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlyYyB8PSBjb2xvcl9wYXJzZSh2YWx1ZSwgb3B0LT5jb2xvcl9tYXRjaF9jb250ZXh0KTsKKwkJcmMgfD0gY29sb3JfcGFyc2UodmFsdWUsIG9wdC0+Y29sb3JfbWF0Y2hfc2VsZWN0ZWQpOworCQlyZXR1cm4gcmM7CisJfQorCisJaWYgKGNvbG9yKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJcmV0dXJuIGNvbG9yX3BhcnNlKHZhbHVlLCBjb2xvcik7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogSW5pdGlhbGl6ZSBvbmUgaW5zdGFuY2Ugb2YgZ3JlcF9vcHQgYW5kIGNvcHkgdGhlCisgKiBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSB0ZW1wbGF0ZSB3ZSByZWFkIHRoZSBjb25maWd1cmF0aW9uCisgKiBpbmZvcm1hdGlvbiBpbiBhbiBlYXJsaWVyIGNhbGwgdG8gZ2l0X2NvbmZpZyhncmVwX2NvbmZpZykuCisgKi8KK3ZvaWQgZ3JlcF9pbml0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IGdyZXBfb3B0ICpkZWYgPSAmZ3JlcF9kZWZhdWx0czsKKworCW1lbXNldChvcHQsIDAsIHNpemVvZigqb3B0KSk7CisJb3B0LT5wcmVmaXggPSBwcmVmaXg7CisJb3B0LT5wcmVmaXhfbGVuZ3RoID0gKHByZWZpeCAmJiAqcHJlZml4KSA/IHN0cmxlbihwcmVmaXgpIDogMDsKKwlvcHQtPnBhdHRlcm5fdGFpbCA9ICZvcHQtPnBhdHRlcm5fbGlzdDsKKwlvcHQtPmhlYWRlcl90YWlsID0gJm9wdC0+aGVhZGVyX2xpc3Q7CisKKwlvcHQtPmNvbG9yID0gZGVmLT5jb2xvcjsKKwlvcHQtPmV4dGVuZGVkX3JlZ2V4cF9vcHRpb24gPSBkZWYtPmV4dGVuZGVkX3JlZ2V4cF9vcHRpb247CisJb3B0LT5wYXR0ZXJuX3R5cGVfb3B0aW9uID0gZGVmLT5wYXR0ZXJuX3R5cGVfb3B0aW9uOworCW9wdC0+bGluZW51bSA9IGRlZi0+bGluZW51bTsKKwlvcHQtPm1heF9kZXB0aCA9IGRlZi0+bWF4X2RlcHRoOworCW9wdC0+cGF0aG5hbWUgPSBkZWYtPnBhdGhuYW1lOworCW9wdC0+cmVnZmxhZ3MgPSBkZWYtPnJlZ2ZsYWdzOworCW9wdC0+cmVsYXRpdmUgPSBkZWYtPnJlbGF0aXZlOworCisJY29sb3Jfc2V0KG9wdC0+Y29sb3JfY29udGV4dCwgZGVmLT5jb2xvcl9jb250ZXh0KTsKKwljb2xvcl9zZXQob3B0LT5jb2xvcl9maWxlbmFtZSwgZGVmLT5jb2xvcl9maWxlbmFtZSk7CisJY29sb3Jfc2V0KG9wdC0+Y29sb3JfZnVuY3Rpb24sIGRlZi0+Y29sb3JfZnVuY3Rpb24pOworCWNvbG9yX3NldChvcHQtPmNvbG9yX2xpbmVubywgZGVmLT5jb2xvcl9saW5lbm8pOworCWNvbG9yX3NldChvcHQtPmNvbG9yX21hdGNoX2NvbnRleHQsIGRlZi0+Y29sb3JfbWF0Y2hfY29udGV4dCk7CisJY29sb3Jfc2V0KG9wdC0+Y29sb3JfbWF0Y2hfc2VsZWN0ZWQsIGRlZi0+Y29sb3JfbWF0Y2hfc2VsZWN0ZWQpOworCWNvbG9yX3NldChvcHQtPmNvbG9yX3NlbGVjdGVkLCBkZWYtPmNvbG9yX3NlbGVjdGVkKTsKKwljb2xvcl9zZXQob3B0LT5jb2xvcl9zZXAsIGRlZi0+Y29sb3Jfc2VwKTsKK30KKwordm9pZCBncmVwX2NvbW1pdF9wYXR0ZXJuX3R5cGUoZW51bSBncmVwX3BhdHRlcm5fdHlwZSBwYXR0ZXJuX3R5cGUsIHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCWlmIChwYXR0ZXJuX3R5cGUgIT0gR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQpCisJCWdyZXBfc2V0X3BhdHRlcm5fdHlwZV9vcHRpb24ocGF0dGVybl90eXBlLCBvcHQpOworCWVsc2UgaWYgKG9wdC0+cGF0dGVybl90eXBlX29wdGlvbiAhPSBHUkVQX1BBVFRFUk5fVFlQRV9VTlNQRUNJRklFRCkKKwkJZ3JlcF9zZXRfcGF0dGVybl90eXBlX29wdGlvbihvcHQtPnBhdHRlcm5fdHlwZV9vcHRpb24sIG9wdCk7CisJZWxzZSBpZiAob3B0LT5leHRlbmRlZF9yZWdleHBfb3B0aW9uKQorCQlncmVwX3NldF9wYXR0ZXJuX3R5cGVfb3B0aW9uKEdSRVBfUEFUVEVSTl9UWVBFX0VSRSwgb3B0KTsKK30KKwordm9pZCBncmVwX3NldF9wYXR0ZXJuX3R5cGVfb3B0aW9uKGVudW0gZ3JlcF9wYXR0ZXJuX3R5cGUgcGF0dGVybl90eXBlLCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwlzd2l0Y2ggKHBhdHRlcm5fdHlwZSkgeworCWNhc2UgR1JFUF9QQVRURVJOX1RZUEVfVU5TUEVDSUZJRUQ6CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBHUkVQX1BBVFRFUk5fVFlQRV9CUkU6CisJCW9wdC0+Zml4ZWQgPSAwOworCQlvcHQtPnBjcmUgPSAwOworCQlvcHQtPnJlZ2ZsYWdzICY9IH5SRUdfRVhURU5ERUQ7CisJCWJyZWFrOworCisJY2FzZSBHUkVQX1BBVFRFUk5fVFlQRV9FUkU6CisJCW9wdC0+Zml4ZWQgPSAwOworCQlvcHQtPnBjcmUgPSAwOworCQlvcHQtPnJlZ2ZsYWdzIHw9IFJFR19FWFRFTkRFRDsKKwkJYnJlYWs7CisKKwljYXNlIEdSRVBfUEFUVEVSTl9UWVBFX0ZJWEVEOgorCQlvcHQtPmZpeGVkID0gMTsKKwkJb3B0LT5wY3JlID0gMDsKKwkJb3B0LT5yZWdmbGFncyAmPSB+UkVHX0VYVEVOREVEOworCQlicmVhazsKKworCWNhc2UgR1JFUF9QQVRURVJOX1RZUEVfUENSRToKKwkJb3B0LT5maXhlZCA9IDA7CisJCW9wdC0+cGNyZSA9IDE7CisJCW9wdC0+cmVnZmxhZ3MgJj0gflJFR19FWFRFTkRFRDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGdyZXBfcGF0ICpjcmVhdGVfZ3JlcF9wYXQoY29uc3QgY2hhciAqcGF0LCBzaXplX3QgcGF0bGVuLAorCQkJCQljb25zdCBjaGFyICpvcmlnaW4sIGludCBubywKKwkJCQkJZW51bSBncmVwX3BhdF90b2tlbiB0LAorCQkJCQllbnVtIGdyZXBfaGVhZGVyX2ZpZWxkIGZpZWxkKQoreworCXN0cnVjdCBncmVwX3BhdCAqcCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpwKSk7CisJcC0+cGF0dGVybiA9IHhtZW1kdXB6KHBhdCwgcGF0bGVuKTsKKwlwLT5wYXR0ZXJubGVuID0gcGF0bGVuOworCXAtPm9yaWdpbiA9IG9yaWdpbjsKKwlwLT5ubyA9IG5vOworCXAtPnRva2VuID0gdDsKKwlwLT5maWVsZCA9IGZpZWxkOworCXJldHVybiBwOworfQorCitzdGF0aWMgdm9pZCBkb19hcHBlbmRfZ3JlcF9wYXQoc3RydWN0IGdyZXBfcGF0ICoqKnRhaWwsIHN0cnVjdCBncmVwX3BhdCAqcCkKK3sKKwkqKnRhaWwgPSBwOworCSp0YWlsID0gJnAtPm5leHQ7CisJcC0+bmV4dCA9IE5VTEw7CisKKwlzd2l0Y2ggKHAtPnRva2VuKSB7CisJY2FzZSBHUkVQX1BBVFRFUk46IC8qIGF0b20gKi8KKwljYXNlIEdSRVBfUEFUVEVSTl9IRUFEOgorCWNhc2UgR1JFUF9QQVRURVJOX0JPRFk6CisJCWZvciAoOzspIHsKKwkJCXN0cnVjdCBncmVwX3BhdCAqbmV3X3BhdDsKKwkJCXNpemVfdCBsZW4gPSAwOworCQkJY2hhciAqY3AgPSBwLT5wYXR0ZXJuICsgcC0+cGF0dGVybmxlbiwgKm5sID0gTlVMTDsKKwkJCXdoaWxlICgrK2xlbiA8PSBwLT5wYXR0ZXJubGVuKSB7CisJCQkJaWYgKCooLS1jcCkgPT0gJ1xuJykgeworCQkJCQlubCA9IGNwOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoIW5sKQorCQkJCWJyZWFrOworCQkJbmV3X3BhdCA9IGNyZWF0ZV9ncmVwX3BhdChubCArIDEsIGxlbiAtIDEsIHAtPm9yaWdpbiwKKwkJCQkJCSAgcC0+bm8sIHAtPnRva2VuLCBwLT5maWVsZCk7CisJCQluZXdfcGF0LT5uZXh0ID0gcC0+bmV4dDsKKwkJCWlmICghcC0+bmV4dCkKKwkJCQkqdGFpbCA9ICZuZXdfcGF0LT5uZXh0OworCQkJcC0+bmV4dCA9IG5ld19wYXQ7CisJCQkqbmwgPSAnXDAnOworCQkJcC0+cGF0dGVybmxlbiAtPSBsZW47CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIGFwcGVuZF9oZWFkZXJfZ3JlcF9wYXR0ZXJuKHN0cnVjdCBncmVwX29wdCAqb3B0LAorCQkJCWVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmllbGQsIGNvbnN0IGNoYXIgKnBhdCkKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnAgPSBjcmVhdGVfZ3JlcF9wYXQocGF0LCBzdHJsZW4ocGF0KSwgImhlYWRlciIsIDAsCisJCQkJCSAgICAgR1JFUF9QQVRURVJOX0hFQUQsIGZpZWxkKTsKKwlpZiAoZmllbGQgPT0gR1JFUF9IRUFERVJfUkVGTE9HKQorCQlvcHQtPnVzZV9yZWZsb2dfZmlsdGVyID0gMTsKKwlkb19hcHBlbmRfZ3JlcF9wYXQoJm9wdC0+aGVhZGVyX3RhaWwsIHApOworfQorCit2b2lkIGFwcGVuZF9ncmVwX3BhdHRlcm4oc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKnBhdCwKKwkJCSBjb25zdCBjaGFyICpvcmlnaW4sIGludCBubywgZW51bSBncmVwX3BhdF90b2tlbiB0KQoreworCWFwcGVuZF9ncmVwX3BhdChvcHQsIHBhdCwgc3RybGVuKHBhdCksIG9yaWdpbiwgbm8sIHQpOworfQorCit2b2lkIGFwcGVuZF9ncmVwX3BhdChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqcGF0LCBzaXplX3QgcGF0bGVuLAorCQkgICAgIGNvbnN0IGNoYXIgKm9yaWdpbiwgaW50IG5vLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHQpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwID0gY3JlYXRlX2dyZXBfcGF0KHBhdCwgcGF0bGVuLCBvcmlnaW4sIG5vLCB0LCAwKTsKKwlkb19hcHBlbmRfZ3JlcF9wYXQoJm9wdC0+cGF0dGVybl90YWlsLCBwKTsKK30KKworc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdF9kdXAoY29uc3Qgc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwYXQ7CisJc3RydWN0IGdyZXBfb3B0ICpyZXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgZ3JlcF9vcHQpKTsKKwkqcmV0ID0gKm9wdDsKKworCXJldC0+cGF0dGVybl9saXN0ID0gTlVMTDsKKwlyZXQtPnBhdHRlcm5fdGFpbCA9ICZyZXQtPnBhdHRlcm5fbGlzdDsKKworCWZvcihwYXQgPSBvcHQtPnBhdHRlcm5fbGlzdDsgcGF0ICE9IE5VTEw7IHBhdCA9IHBhdC0+bmV4dCkKKwl7CisJCWlmKHBhdC0+dG9rZW4gPT0gR1JFUF9QQVRURVJOX0hFQUQpCisJCQlhcHBlbmRfaGVhZGVyX2dyZXBfcGF0dGVybihyZXQsIHBhdC0+ZmllbGQsCisJCQkJCQkgICBwYXQtPnBhdHRlcm4pOworCQllbHNlCisJCQlhcHBlbmRfZ3JlcF9wYXQocmV0LCBwYXQtPnBhdHRlcm4sIHBhdC0+cGF0dGVybmxlbiwKKwkJCQkJcGF0LT5vcmlnaW4sIHBhdC0+bm8sIHBhdC0+dG9rZW4pOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGNvbXBpbGVfcmVnZXhwX2ZhaWxlZChjb25zdCBzdHJ1Y3QgZ3JlcF9wYXQgKnAsCisJCWNvbnN0IGNoYXIgKmVycm9yKQoreworCWNoYXIgd2hlcmVbMTAyNF07CisKKwlpZiAocC0+bm8pCisJCXhzbnByaW50Zih3aGVyZSwgc2l6ZW9mKHdoZXJlKSwgIkluICclcycgYXQgJWQsICIsIHAtPm9yaWdpbiwgcC0+bm8pOworCWVsc2UgaWYgKHAtPm9yaWdpbikKKwkJeHNucHJpbnRmKHdoZXJlLCBzaXplb2Yod2hlcmUpLCAiJXMsICIsIHAtPm9yaWdpbik7CisJZWxzZQorCQl3aGVyZVswXSA9IDA7CisKKwlkaWUoIiVzJyVzJzogJXMiLCB3aGVyZSwgcC0+cGF0dGVybiwgZXJyb3IpOworfQorCisjaWZkZWYgVVNFX0xJQlBDUkUKK3N0YXRpYyB2b2lkIGNvbXBpbGVfcGNyZV9yZWdleHAoc3RydWN0IGdyZXBfcGF0ICpwLCBjb25zdCBzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwljb25zdCBjaGFyICplcnJvcjsKKwlpbnQgZXJyb2Zmc2V0OworCWludCBvcHRpb25zID0gUENSRV9NVUxUSUxJTkU7CisKKwlpZiAob3B0LT5pZ25vcmVfY2FzZSkKKwkJb3B0aW9ucyB8PSBQQ1JFX0NBU0VMRVNTOworCisJcC0+cGNyZV9yZWdleHAgPSBwY3JlX2NvbXBpbGUocC0+cGF0dGVybiwgb3B0aW9ucywgJmVycm9yLCAmZXJyb2Zmc2V0LAorCQkJTlVMTCk7CisJaWYgKCFwLT5wY3JlX3JlZ2V4cCkKKwkJY29tcGlsZV9yZWdleHBfZmFpbGVkKHAsIGVycm9yKTsKKworCXAtPnBjcmVfZXh0cmFfaW5mbyA9IHBjcmVfc3R1ZHkocC0+cGNyZV9yZWdleHAsIDAsICZlcnJvcik7CisJaWYgKCFwLT5wY3JlX2V4dHJhX2luZm8gJiYgZXJyb3IpCisJCWRpZSgiJXMiLCBlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQgcGNyZW1hdGNoKHN0cnVjdCBncmVwX3BhdCAqcCwgY29uc3QgY2hhciAqbGluZSwgY29uc3QgY2hhciAqZW9sLAorCQlyZWdtYXRjaF90ICptYXRjaCwgaW50IGVmbGFncykKK3sKKwlpbnQgb3ZlY3RvclszMF0sIHJldCwgZmxhZ3MgPSAwOworCisJaWYgKGVmbGFncyAmIFJFR19OT1RCT0wpCisJCWZsYWdzIHw9IFBDUkVfTk9UQk9MOworCisJcmV0ID0gcGNyZV9leGVjKHAtPnBjcmVfcmVnZXhwLCBwLT5wY3JlX2V4dHJhX2luZm8sIGxpbmUsIGVvbCAtIGxpbmUsCisJCQkwLCBmbGFncywgb3ZlY3RvciwgQVJSQVlfU0laRShvdmVjdG9yKSk7CisJaWYgKHJldCA8IDAgJiYgcmV0ICE9IFBDUkVfRVJST1JfTk9NQVRDSCkKKwkJZGllKCJwY3JlX2V4ZWMgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZCIsIHJldCk7CisJaWYgKHJldCA+IDApIHsKKwkJcmV0ID0gMDsKKwkJbWF0Y2gtPnJtX3NvID0gb3ZlY3RvclswXTsKKwkJbWF0Y2gtPnJtX2VvID0gb3ZlY3RvclsxXTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBmcmVlX3BjcmVfcmVnZXhwKHN0cnVjdCBncmVwX3BhdCAqcCkKK3sKKwlwY3JlX2ZyZWUocC0+cGNyZV9yZWdleHApOworCXBjcmVfZnJlZShwLT5wY3JlX2V4dHJhX2luZm8pOworfQorI2Vsc2UgLyogIVVTRV9MSUJQQ1JFICovCitzdGF0aWMgdm9pZCBjb21waWxlX3BjcmVfcmVnZXhwKHN0cnVjdCBncmVwX3BhdCAqcCwgY29uc3Qgc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJZGllKCJjYW5ub3QgdXNlIFBlcmwtY29tcGF0aWJsZSByZWdleGVzIHdoZW4gbm90IGNvbXBpbGVkIHdpdGggVVNFX0xJQlBDUkUiKTsKK30KKworc3RhdGljIGludCBwY3JlbWF0Y2goc3RydWN0IGdyZXBfcGF0ICpwLCBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICplb2wsCisJCXJlZ21hdGNoX3QgKm1hdGNoLCBpbnQgZWZsYWdzKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3BjcmVfcmVnZXhwKHN0cnVjdCBncmVwX3BhdCAqcCkKK3sKK30KKyNlbmRpZiAvKiAhVVNFX0xJQlBDUkUgKi8KKworc3RhdGljIGludCBpc19maXhlZChjb25zdCBjaGFyICpzLCBzaXplX3QgbGVuKQoreworCXNpemVfdCBpOworCisJLyogcmVnY29tcCBjYW5ub3QgYWNjZXB0IHBhdHRlcm5zIHdpdGggTlVMcyBzbyB3ZQorCSAqIGNvbnNpZGVyIGFueSBwYXR0ZXJuIGNvbnRhaW5pbmcgYSBOVUwgZml4ZWQuCisJICovCisJaWYgKG1lbWNocihzLCAwLCBsZW4pKQorCQlyZXR1cm4gMTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAoaXNfcmVnZXhfc3BlY2lhbChzW2ldKSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBjb21waWxlX3JlZ2V4cChzdHJ1Y3QgZ3JlcF9wYXQgKnAsIHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCWludCBlcnI7CisKKwlwLT53b3JkX3JlZ2V4cCA9IG9wdC0+d29yZF9yZWdleHA7CisJcC0+aWdub3JlX2Nhc2UgPSBvcHQtPmlnbm9yZV9jYXNlOworCisJaWYgKG9wdC0+Zml4ZWQgfHwgaXNfZml4ZWQocC0+cGF0dGVybiwgcC0+cGF0dGVybmxlbikpCisJCXAtPmZpeGVkID0gMTsKKwllbHNlCisJCXAtPmZpeGVkID0gMDsKKworCWlmIChwLT5maXhlZCkgeworCQlpZiAob3B0LT5yZWdmbGFncyAmIFJFR19JQ0FTRSB8fCBwLT5pZ25vcmVfY2FzZSkKKwkJCXAtPmt3cyA9IGt3c2FsbG9jKHRvbG93ZXJfdHJhbnNfdGJsKTsKKwkJZWxzZQorCQkJcC0+a3dzID0ga3dzYWxsb2MoTlVMTCk7CisJCWt3c2luY3IocC0+a3dzLCBwLT5wYXR0ZXJuLCBwLT5wYXR0ZXJubGVuKTsKKwkJa3dzcHJlcChwLT5rd3MpOworCQlyZXR1cm47CisJfQorCisJaWYgKG9wdC0+cGNyZSkgeworCQljb21waWxlX3BjcmVfcmVnZXhwKHAsIG9wdCk7CisJCXJldHVybjsKKwl9CisKKwllcnIgPSByZWdjb21wKCZwLT5yZWdleHAsIHAtPnBhdHRlcm4sIG9wdC0+cmVnZmxhZ3MpOworCWlmIChlcnIpIHsKKwkJY2hhciBlcnJidWZbMTAyNF07CisJCXJlZ2Vycm9yKGVyciwgJnAtPnJlZ2V4cCwgZXJyYnVmLCAxMDI0KTsKKwkJcmVnZnJlZSgmcC0+cmVnZXhwKTsKKwkJY29tcGlsZV9yZWdleHBfZmFpbGVkKHAsIGVycmJ1Zik7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGdyZXBfZXhwciAqY29tcGlsZV9wYXR0ZXJuX29yKHN0cnVjdCBncmVwX3BhdCAqKik7CitzdGF0aWMgc3RydWN0IGdyZXBfZXhwciAqY29tcGlsZV9wYXR0ZXJuX2F0b20oc3RydWN0IGdyZXBfcGF0ICoqbGlzdCkKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJc3RydWN0IGdyZXBfZXhwciAqeDsKKworCXAgPSAqbGlzdDsKKwlpZiAoIXApCisJCXJldHVybiBOVUxMOworCXN3aXRjaCAocC0+dG9rZW4pIHsKKwljYXNlIEdSRVBfUEFUVEVSTjogLyogYXRvbSAqLworCWNhc2UgR1JFUF9QQVRURVJOX0hFQUQ6CisJY2FzZSBHUkVQX1BBVFRFUk5fQk9EWToKKwkJeCA9IHhjYWxsb2MoMSwgc2l6ZW9mIChzdHJ1Y3QgZ3JlcF9leHByKSk7CisJCXgtPm5vZGUgPSBHUkVQX05PREVfQVRPTTsKKwkJeC0+dS5hdG9tID0gcDsKKwkJKmxpc3QgPSBwLT5uZXh0OworCQlyZXR1cm4geDsKKwljYXNlIEdSRVBfT1BFTl9QQVJFTjoKKwkJKmxpc3QgPSBwLT5uZXh0OworCQl4ID0gY29tcGlsZV9wYXR0ZXJuX29yKGxpc3QpOworCQlpZiAoISpsaXN0IHx8ICgqbGlzdCktPnRva2VuICE9IEdSRVBfQ0xPU0VfUEFSRU4pCisJCQlkaWUoInVubWF0Y2hlZCBwYXJlbnRoZXNpcyIpOworCQkqbGlzdCA9ICgqbGlzdCktPm5leHQ7CisJCXJldHVybiB4OworCWRlZmF1bHQ6CisJCXJldHVybiBOVUxMOworCX0KK30KKworc3RhdGljIHN0cnVjdCBncmVwX2V4cHIgKmNvbXBpbGVfcGF0dGVybl9ub3Qoc3RydWN0IGdyZXBfcGF0ICoqbGlzdCkKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJc3RydWN0IGdyZXBfZXhwciAqeDsKKworCXAgPSAqbGlzdDsKKwlpZiAoIXApCisJCXJldHVybiBOVUxMOworCXN3aXRjaCAocC0+dG9rZW4pIHsKKwljYXNlIEdSRVBfTk9UOgorCQlpZiAoIXAtPm5leHQpCisJCQlkaWUoIi0tbm90IG5vdCBmb2xsb3dlZCBieSBwYXR0ZXJuIGV4cHJlc3Npb24iKTsKKwkJKmxpc3QgPSBwLT5uZXh0OworCQl4ID0geGNhbGxvYygxLCBzaXplb2YgKHN0cnVjdCBncmVwX2V4cHIpKTsKKwkJeC0+bm9kZSA9IEdSRVBfTk9ERV9OT1Q7CisJCXgtPnUudW5hcnkgPSBjb21waWxlX3BhdHRlcm5fbm90KGxpc3QpOworCQlpZiAoIXgtPnUudW5hcnkpCisJCQlkaWUoIi0tbm90IGZvbGxvd2VkIGJ5IG5vbiBwYXR0ZXJuIGV4cHJlc3Npb24iKTsKKwkJcmV0dXJuIHg7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGNvbXBpbGVfcGF0dGVybl9hdG9tKGxpc3QpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBncmVwX2V4cHIgKmNvbXBpbGVfcGF0dGVybl9hbmQoc3RydWN0IGdyZXBfcGF0ICoqbGlzdCkKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJc3RydWN0IGdyZXBfZXhwciAqeCwgKnksICp6OworCisJeCA9IGNvbXBpbGVfcGF0dGVybl9ub3QobGlzdCk7CisJcCA9ICpsaXN0OworCWlmIChwICYmIHAtPnRva2VuID09IEdSRVBfQU5EKSB7CisJCWlmICghcC0+bmV4dCkKKwkJCWRpZSgiLS1hbmQgbm90IGZvbGxvd2VkIGJ5IHBhdHRlcm4gZXhwcmVzc2lvbiIpOworCQkqbGlzdCA9IHAtPm5leHQ7CisJCXkgPSBjb21waWxlX3BhdHRlcm5fYW5kKGxpc3QpOworCQlpZiAoIXkpCisJCQlkaWUoIi0tYW5kIG5vdCBmb2xsb3dlZCBieSBwYXR0ZXJuIGV4cHJlc3Npb24iKTsKKwkJeiA9IHhjYWxsb2MoMSwgc2l6ZW9mIChzdHJ1Y3QgZ3JlcF9leHByKSk7CisJCXotPm5vZGUgPSBHUkVQX05PREVfQU5EOworCQl6LT51LmJpbmFyeS5sZWZ0ID0geDsKKwkJei0+dS5iaW5hcnkucmlnaHQgPSB5OworCQlyZXR1cm4gejsKKwl9CisJcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3JlcF9leHByICpjb21waWxlX3BhdHRlcm5fb3Ioc3RydWN0IGdyZXBfcGF0ICoqbGlzdCkKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJc3RydWN0IGdyZXBfZXhwciAqeCwgKnksICp6OworCisJeCA9IGNvbXBpbGVfcGF0dGVybl9hbmQobGlzdCk7CisJcCA9ICpsaXN0OworCWlmICh4ICYmIHAgJiYgcC0+dG9rZW4gIT0gR1JFUF9DTE9TRV9QQVJFTikgeworCQl5ID0gY29tcGlsZV9wYXR0ZXJuX29yKGxpc3QpOworCQlpZiAoIXkpCisJCQlkaWUoIm5vdCBhIHBhdHRlcm4gZXhwcmVzc2lvbiAlcyIsIHAtPnBhdHRlcm4pOworCQl6ID0geGNhbGxvYygxLCBzaXplb2YgKHN0cnVjdCBncmVwX2V4cHIpKTsKKwkJei0+bm9kZSA9IEdSRVBfTk9ERV9PUjsKKwkJei0+dS5iaW5hcnkubGVmdCA9IHg7CisJCXotPnUuYmluYXJ5LnJpZ2h0ID0geTsKKwkJcmV0dXJuIHo7CisJfQorCXJldHVybiB4OworfQorCitzdGF0aWMgc3RydWN0IGdyZXBfZXhwciAqY29tcGlsZV9wYXR0ZXJuX2V4cHIoc3RydWN0IGdyZXBfcGF0ICoqbGlzdCkKK3sKKwlyZXR1cm4gY29tcGlsZV9wYXR0ZXJuX29yKGxpc3QpOworfQorCitzdGF0aWMgdm9pZCBpbmRlbnQoaW50IGluKQoreworCXdoaWxlIChpbi0tID4gMCkKKwkJZnB1dGMoJyAnLCBzdGRlcnIpOworfQorCitzdGF0aWMgdm9pZCBkdW1wX2dyZXBfcGF0KHN0cnVjdCBncmVwX3BhdCAqcCkKK3sKKwlzd2l0Y2ggKHAtPnRva2VuKSB7CisJY2FzZSBHUkVQX0FORDogZnByaW50ZihzdGRlcnIsICIqYW5kKiIpOyBicmVhazsKKwljYXNlIEdSRVBfT1BFTl9QQVJFTjogZnByaW50ZihzdGRlcnIsICIqKCoiKTsgYnJlYWs7CisJY2FzZSBHUkVQX0NMT1NFX1BBUkVOOiBmcHJpbnRmKHN0ZGVyciwgIiopKiIpOyBicmVhazsKKwljYXNlIEdSRVBfTk9UOiBmcHJpbnRmKHN0ZGVyciwgIipub3QqIik7IGJyZWFrOworCWNhc2UgR1JFUF9PUjogZnByaW50ZihzdGRlcnIsICIqb3IqIik7IGJyZWFrOworCisJY2FzZSBHUkVQX1BBVFRFUk46IGZwcmludGYoc3RkZXJyLCAicGF0dGVybiIpOyBicmVhazsKKwljYXNlIEdSRVBfUEFUVEVSTl9IRUFEOiBmcHJpbnRmKHN0ZGVyciwgInBhdHRlcm5faGVhZCIpOyBicmVhazsKKwljYXNlIEdSRVBfUEFUVEVSTl9CT0RZOiBmcHJpbnRmKHN0ZGVyciwgInBhdHRlcm5fYm9keSIpOyBicmVhazsKKwl9CisKKwlzd2l0Y2ggKHAtPnRva2VuKSB7CisJZGVmYXVsdDogYnJlYWs7CisJY2FzZSBHUkVQX1BBVFRFUk5fSEVBRDoKKwkJZnByaW50ZihzdGRlcnIsICI8aGVhZCAlZD4iLCBwLT5maWVsZCk7IGJyZWFrOworCWNhc2UgR1JFUF9QQVRURVJOX0JPRFk6CisJCWZwcmludGYoc3RkZXJyLCAiPGJvZHk+Iik7IGJyZWFrOworCX0KKwlzd2l0Y2ggKHAtPnRva2VuKSB7CisJZGVmYXVsdDogYnJlYWs7CisJY2FzZSBHUkVQX1BBVFRFUk5fSEVBRDoKKwljYXNlIEdSRVBfUEFUVEVSTl9CT0RZOgorCWNhc2UgR1JFUF9QQVRURVJOOgorCQlmcHJpbnRmKHN0ZGVyciwgIiUuKnMiLCAoaW50KXAtPnBhdHRlcm5sZW4sIHAtPnBhdHRlcm4pOworCQlicmVhazsKKwl9CisJZnB1dGMoJ1xuJywgc3RkZXJyKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF9ncmVwX2V4cHJlc3Npb25fMShzdHJ1Y3QgZ3JlcF9leHByICp4LCBpbnQgaW4pCit7CisJaW5kZW50KGluKTsKKwlzd2l0Y2ggKHgtPm5vZGUpIHsKKwljYXNlIEdSRVBfTk9ERV9UUlVFOgorCQlmcHJpbnRmKHN0ZGVyciwgInRydWVcbiIpOworCQlicmVhazsKKwljYXNlIEdSRVBfTk9ERV9BVE9NOgorCQlkdW1wX2dyZXBfcGF0KHgtPnUuYXRvbSk7CisJCWJyZWFrOworCWNhc2UgR1JFUF9OT0RFX05PVDoKKwkJZnByaW50ZihzdGRlcnIsICIobm90XG4iKTsKKwkJZHVtcF9ncmVwX2V4cHJlc3Npb25fMSh4LT51LnVuYXJ5LCBpbisxKTsKKwkJaW5kZW50KGluKTsKKwkJZnByaW50ZihzdGRlcnIsICIpXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBHUkVQX05PREVfQU5EOgorCQlmcHJpbnRmKHN0ZGVyciwgIihhbmRcbiIpOworCQlkdW1wX2dyZXBfZXhwcmVzc2lvbl8xKHgtPnUuYmluYXJ5LmxlZnQsIGluKzEpOworCQlkdW1wX2dyZXBfZXhwcmVzc2lvbl8xKHgtPnUuYmluYXJ5LnJpZ2h0LCBpbisxKTsKKwkJaW5kZW50KGluKTsKKwkJZnByaW50ZihzdGRlcnIsICIpXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBHUkVQX05PREVfT1I6CisJCWZwcmludGYoc3RkZXJyLCAiKG9yXG4iKTsKKwkJZHVtcF9ncmVwX2V4cHJlc3Npb25fMSh4LT51LmJpbmFyeS5sZWZ0LCBpbisxKTsKKwkJZHVtcF9ncmVwX2V4cHJlc3Npb25fMSh4LT51LmJpbmFyeS5yaWdodCwgaW4rMSk7CisJCWluZGVudChpbik7CisJCWZwcmludGYoc3RkZXJyLCAiKVxuIik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZHVtcF9ncmVwX2V4cHJlc3Npb24oc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJc3RydWN0IGdyZXBfZXhwciAqeCA9IG9wdC0+cGF0dGVybl9leHByZXNzaW9uOworCisJaWYgKG9wdC0+YWxsX21hdGNoKQorCQlmcHJpbnRmKHN0ZGVyciwgIlthbGwtbWF0Y2hdXG4iKTsKKwlkdW1wX2dyZXBfZXhwcmVzc2lvbl8xKHgsIDApOworCWZmbHVzaChOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBncmVwX2V4cHIgKmdyZXBfdHJ1ZV9leHByKHZvaWQpCit7CisJc3RydWN0IGdyZXBfZXhwciAqeiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCp6KSk7CisJei0+bm9kZSA9IEdSRVBfTk9ERV9UUlVFOworCXJldHVybiB6OworfQorCitzdGF0aWMgc3RydWN0IGdyZXBfZXhwciAqZ3JlcF9vcl9leHByKHN0cnVjdCBncmVwX2V4cHIgKmxlZnQsIHN0cnVjdCBncmVwX2V4cHIgKnJpZ2h0KQoreworCXN0cnVjdCBncmVwX2V4cHIgKnogPSB4Y2FsbG9jKDEsIHNpemVvZigqeikpOworCXotPm5vZGUgPSBHUkVQX05PREVfT1I7CisJei0+dS5iaW5hcnkubGVmdCA9IGxlZnQ7CisJei0+dS5iaW5hcnkucmlnaHQgPSByaWdodDsKKwlyZXR1cm4gejsKK30KKworc3RhdGljIHN0cnVjdCBncmVwX2V4cHIgKnByZXBfaGVhZGVyX3BhdHRlcm5zKHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCXN0cnVjdCBncmVwX3BhdCAqcDsKKwlzdHJ1Y3QgZ3JlcF9leHByICpoZWFkZXJfZXhwcjsKKwlzdHJ1Y3QgZ3JlcF9leHByICooaGVhZGVyX2dyb3VwW0dSRVBfSEVBREVSX0ZJRUxEX01BWF0pOworCWVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmxkOworCisJaWYgKCFvcHQtPmhlYWRlcl9saXN0KQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAocCA9IG9wdC0+aGVhZGVyX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT50b2tlbiAhPSBHUkVQX1BBVFRFUk5fSEVBRCkKKwkJCWRpZSgiYnVnOiBhIG5vbi1oZWFkZXIgcGF0dGVybiBpbiBncmVwIGhlYWRlciBsaXN0LiIpOworCQlpZiAocC0+ZmllbGQgPCBHUkVQX0hFQURFUl9GSUVMRF9NSU4gfHwKKwkJICAgIEdSRVBfSEVBREVSX0ZJRUxEX01BWCA8PSBwLT5maWVsZCkKKwkJCWRpZSgiYnVnOiB1bmtub3duIGhlYWRlciBmaWVsZCAlZCIsIHAtPmZpZWxkKTsKKwkJY29tcGlsZV9yZWdleHAocCwgb3B0KTsKKwl9CisKKwlmb3IgKGZsZCA9IDA7IGZsZCA8IEdSRVBfSEVBREVSX0ZJRUxEX01BWDsgZmxkKyspCisJCWhlYWRlcl9ncm91cFtmbGRdID0gTlVMTDsKKworCWZvciAocCA9IG9wdC0+aGVhZGVyX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBncmVwX2V4cHIgKmg7CisJCXN0cnVjdCBncmVwX3BhdCAqcHAgPSBwOworCisJCWggPSBjb21waWxlX3BhdHRlcm5fYXRvbSgmcHApOworCQlpZiAoIWggfHwgcHAgIT0gcC0+bmV4dCkKKwkJCWRpZSgiYnVnOiBtYWxmb3JtZWQgaGVhZGVyIGV4cHIiKTsKKwkJaWYgKCFoZWFkZXJfZ3JvdXBbcC0+ZmllbGRdKSB7CisJCQloZWFkZXJfZ3JvdXBbcC0+ZmllbGRdID0gaDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWhlYWRlcl9ncm91cFtwLT5maWVsZF0gPSBncmVwX29yX2V4cHIoaCwgaGVhZGVyX2dyb3VwW3AtPmZpZWxkXSk7CisJfQorCisJaGVhZGVyX2V4cHIgPSBOVUxMOworCisJZm9yIChmbGQgPSAwOyBmbGQgPCBHUkVQX0hFQURFUl9GSUVMRF9NQVg7IGZsZCsrKSB7CisJCWlmICghaGVhZGVyX2dyb3VwW2ZsZF0pCisJCQljb250aW51ZTsKKwkJaWYgKCFoZWFkZXJfZXhwcikKKwkJCWhlYWRlcl9leHByID0gZ3JlcF90cnVlX2V4cHIoKTsKKwkJaGVhZGVyX2V4cHIgPSBncmVwX29yX2V4cHIoaGVhZGVyX2dyb3VwW2ZsZF0sIGhlYWRlcl9leHByKTsKKwl9CisJcmV0dXJuIGhlYWRlcl9leHByOworfQorCitzdGF0aWMgc3RydWN0IGdyZXBfZXhwciAqZ3JlcF9zcGxpY2Vfb3Ioc3RydWN0IGdyZXBfZXhwciAqeCwgc3RydWN0IGdyZXBfZXhwciAqeSkKK3sKKwlzdHJ1Y3QgZ3JlcF9leHByICp6ID0geDsKKworCXdoaWxlICh4KSB7CisJCWFzc2VydCh4LT5ub2RlID09IEdSRVBfTk9ERV9PUik7CisJCWlmICh4LT51LmJpbmFyeS5yaWdodCAmJgorCQkgICAgeC0+dS5iaW5hcnkucmlnaHQtPm5vZGUgPT0gR1JFUF9OT0RFX1RSVUUpIHsKKwkJCXgtPnUuYmluYXJ5LnJpZ2h0ID0geTsKKwkJCWJyZWFrOworCQl9CisJCXggPSB4LT51LmJpbmFyeS5yaWdodDsKKwl9CisJcmV0dXJuIHo7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBpbGVfZ3JlcF9wYXR0ZXJuc19yZWFsKHN0cnVjdCBncmVwX29wdCAqb3B0KQoreworCXN0cnVjdCBncmVwX3BhdCAqcDsKKwlzdHJ1Y3QgZ3JlcF9leHByICpoZWFkZXJfZXhwciA9IHByZXBfaGVhZGVyX3BhdHRlcm5zKG9wdCk7CisKKwlmb3IgKHAgPSBvcHQtPnBhdHRlcm5fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3dpdGNoIChwLT50b2tlbikgeworCQljYXNlIEdSRVBfUEFUVEVSTjogLyogYXRvbSAqLworCQljYXNlIEdSRVBfUEFUVEVSTl9IRUFEOgorCQljYXNlIEdSRVBfUEFUVEVSTl9CT0RZOgorCQkJY29tcGlsZV9yZWdleHAocCwgb3B0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJb3B0LT5leHRlbmRlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChvcHQtPmFsbF9tYXRjaCB8fCBoZWFkZXJfZXhwcikKKwkJb3B0LT5leHRlbmRlZCA9IDE7CisJZWxzZSBpZiAoIW9wdC0+ZXh0ZW5kZWQgJiYgIW9wdC0+ZGVidWcpCisJCXJldHVybjsKKworCXAgPSBvcHQtPnBhdHRlcm5fbGlzdDsKKwlpZiAocCkKKwkJb3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24gPSBjb21waWxlX3BhdHRlcm5fZXhwcigmcCk7CisJaWYgKHApCisJCWRpZSgiaW5jb21wbGV0ZSBwYXR0ZXJuIGV4cHJlc3Npb246ICVzIiwgcC0+cGF0dGVybik7CisKKwlpZiAoIWhlYWRlcl9leHByKQorCQlyZXR1cm47CisKKwlpZiAoIW9wdC0+cGF0dGVybl9leHByZXNzaW9uKQorCQlvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbiA9IGhlYWRlcl9leHByOworCWVsc2UgaWYgKG9wdC0+YWxsX21hdGNoKQorCQlvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbiA9IGdyZXBfc3BsaWNlX29yKGhlYWRlcl9leHByLAorCQkJCQkJCSBvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbik7CisJZWxzZQorCQlvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbiA9IGdyZXBfb3JfZXhwcihvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbiwKKwkJCQkJCSAgICAgICBoZWFkZXJfZXhwcik7CisJb3B0LT5hbGxfbWF0Y2ggPSAxOworfQorCit2b2lkIGNvbXBpbGVfZ3JlcF9wYXR0ZXJucyhzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCkKK3sKKwljb21waWxlX2dyZXBfcGF0dGVybnNfcmVhbChvcHQpOworCWlmIChvcHQtPmRlYnVnKQorCQlkdW1wX2dyZXBfZXhwcmVzc2lvbihvcHQpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3BhdHRlcm5fZXhwcihzdHJ1Y3QgZ3JlcF9leHByICp4KQoreworCXN3aXRjaCAoeC0+bm9kZSkgeworCWNhc2UgR1JFUF9OT0RFX1RSVUU6CisJY2FzZSBHUkVQX05PREVfQVRPTToKKwkJYnJlYWs7CisJY2FzZSBHUkVQX05PREVfTk9UOgorCQlmcmVlX3BhdHRlcm5fZXhwcih4LT51LnVuYXJ5KTsKKwkJYnJlYWs7CisJY2FzZSBHUkVQX05PREVfQU5EOgorCWNhc2UgR1JFUF9OT0RFX09SOgorCQlmcmVlX3BhdHRlcm5fZXhwcih4LT51LmJpbmFyeS5sZWZ0KTsKKwkJZnJlZV9wYXR0ZXJuX2V4cHIoeC0+dS5iaW5hcnkucmlnaHQpOworCQlicmVhazsKKwl9CisJZnJlZSh4KTsKK30KKwordm9pZCBmcmVlX2dyZXBfcGF0dGVybnMoc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwLCAqbjsKKworCWZvciAocCA9IG9wdC0+cGF0dGVybl9saXN0OyBwOyBwID0gbikgeworCQluID0gcC0+bmV4dDsKKwkJc3dpdGNoIChwLT50b2tlbikgeworCQljYXNlIEdSRVBfUEFUVEVSTjogLyogYXRvbSAqLworCQljYXNlIEdSRVBfUEFUVEVSTl9IRUFEOgorCQljYXNlIEdSRVBfUEFUVEVSTl9CT0RZOgorCQkJaWYgKHAtPmt3cykKKwkJCQlrd3NmcmVlKHAtPmt3cyk7CisJCQllbHNlIGlmIChwLT5wY3JlX3JlZ2V4cCkKKwkJCQlmcmVlX3BjcmVfcmVnZXhwKHApOworCQkJZWxzZQorCQkJCXJlZ2ZyZWUoJnAtPnJlZ2V4cCk7CisJCQlmcmVlKHAtPnBhdHRlcm4pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlmcmVlKHApOworCX0KKworCWlmICghb3B0LT5leHRlbmRlZCkKKwkJcmV0dXJuOworCWZyZWVfcGF0dGVybl9leHByKG9wdC0+cGF0dGVybl9leHByZXNzaW9uKTsKK30KKworc3RhdGljIGNoYXIgKmVuZF9vZl9saW5lKGNoYXIgKmNwLCB1bnNpZ25lZCBsb25nICpsZWZ0KQoreworCXVuc2lnbmVkIGxvbmcgbCA9ICpsZWZ0OworCXdoaWxlIChsICYmICpjcCAhPSAnXG4nKSB7CisJCWwtLTsKKwkJY3ArKzsKKwl9CisJKmxlZnQgPSBsOworCXJldHVybiBjcDsKK30KKworc3RhdGljIGludCB3b3JkX2NoYXIoY2hhciBjaCkKK3sKKwlyZXR1cm4gaXNhbG51bShjaCkgfHwgY2ggPT0gJ18nOworfQorCitzdGF0aWMgdm9pZCBvdXRwdXRfY29sb3Ioc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLAorCQkJIGNvbnN0IGNoYXIgKmNvbG9yKQoreworCWlmICh3YW50X2NvbG9yKG9wdC0+Y29sb3IpICYmIGNvbG9yICYmIGNvbG9yWzBdKSB7CisJCW9wdC0+b3V0cHV0KG9wdCwgY29sb3IsIHN0cmxlbihjb2xvcikpOworCQlvcHQtPm91dHB1dChvcHQsIGRhdGEsIHNpemUpOworCQlvcHQtPm91dHB1dChvcHQsIEdJVF9DT0xPUl9SRVNFVCwgc3RybGVuKEdJVF9DT0xPUl9SRVNFVCkpOworCX0gZWxzZQorCQlvcHQtPm91dHB1dChvcHQsIGRhdGEsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCBvdXRwdXRfc2VwKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyIHNpZ24pCit7CisJaWYgKG9wdC0+bnVsbF9mb2xsb3dpbmdfbmFtZSkKKwkJb3B0LT5vdXRwdXQob3B0LCAiXDAiLCAxKTsKKwllbHNlCisJCW91dHB1dF9jb2xvcihvcHQsICZzaWduLCAxLCBvcHQtPmNvbG9yX3NlcCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbmFtZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlvdXRwdXRfY29sb3Iob3B0LCBuYW1lLCBzdHJsZW4obmFtZSksIG9wdC0+Y29sb3JfZmlsZW5hbWUpOworCW9wdC0+b3V0cHV0KG9wdCwgb3B0LT5udWxsX2ZvbGxvd2luZ19uYW1lID8gIlwwIiA6ICJcbiIsIDEpOworfQorCitzdGF0aWMgaW50IGZpeG1hdGNoKHN0cnVjdCBncmVwX3BhdCAqcCwgY2hhciAqbGluZSwgY2hhciAqZW9sLAorCQkgICAgcmVnbWF0Y2hfdCAqbWF0Y2gpCit7CisJc3RydWN0IGt3c21hdGNoIGt3c207CisJc2l6ZV90IG9mZnNldCA9IGt3c2V4ZWMocC0+a3dzLCBsaW5lLCBlb2wgLSBsaW5lLCAma3dzbSk7CisJaWYgKG9mZnNldCA9PSAtMSkgeworCQltYXRjaC0+cm1fc28gPSBtYXRjaC0+cm1fZW8gPSAtMTsKKwkJcmV0dXJuIFJFR19OT01BVENIOworCX0gZWxzZSB7CisJCW1hdGNoLT5ybV9zbyA9IG9mZnNldDsKKwkJbWF0Y2gtPnJtX2VvID0gbWF0Y2gtPnJtX3NvICsga3dzbS5zaXplWzBdOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVnbWF0Y2goY29uc3QgcmVnZXhfdCAqcHJlZywgY2hhciAqbGluZSwgY2hhciAqZW9sLAorCQkgICAgcmVnbWF0Y2hfdCAqbWF0Y2gsIGludCBlZmxhZ3MpCit7CisjaWZkZWYgUkVHX1NUQVJURU5ECisJbWF0Y2gtPnJtX3NvID0gMDsKKwltYXRjaC0+cm1fZW8gPSBlb2wgLSBsaW5lOworCWVmbGFncyB8PSBSRUdfU1RBUlRFTkQ7CisjZW5kaWYKKwlyZXR1cm4gcmVnZXhlYyhwcmVnLCBsaW5lLCAxLCBtYXRjaCwgZWZsYWdzKTsKK30KKworc3RhdGljIGludCBwYXRtYXRjaChzdHJ1Y3QgZ3JlcF9wYXQgKnAsIGNoYXIgKmxpbmUsIGNoYXIgKmVvbCwKKwkJICAgIHJlZ21hdGNoX3QgKm1hdGNoLCBpbnQgZWZsYWdzKQoreworCWludCBoaXQ7CisKKwlpZiAocC0+Zml4ZWQpCisJCWhpdCA9ICFmaXhtYXRjaChwLCBsaW5lLCBlb2wsIG1hdGNoKTsKKwllbHNlIGlmIChwLT5wY3JlX3JlZ2V4cCkKKwkJaGl0ID0gIXBjcmVtYXRjaChwLCBsaW5lLCBlb2wsIG1hdGNoLCBlZmxhZ3MpOworCWVsc2UKKwkJaGl0ID0gIXJlZ21hdGNoKCZwLT5yZWdleHAsIGxpbmUsIGVvbCwgbWF0Y2gsIGVmbGFncyk7CisKKwlyZXR1cm4gaGl0OworfQorCitzdGF0aWMgaW50IHN0cmlwX3RpbWVzdGFtcChjaGFyICpib2wsIGNoYXIgKiplb2xfcCkKK3sKKwljaGFyICplb2wgPSAqZW9sX3A7CisJaW50IGNoOworCisJd2hpbGUgKGJvbCA8IC0tZW9sKSB7CisJCWlmICgqZW9sICE9ICc+JykKKwkJCWNvbnRpbnVlOworCQkqZW9sX3AgPSArK2VvbDsKKwkJY2ggPSAqZW9sOworCQkqZW9sID0gJ1wwJzsKKwkJcmV0dXJuIGNoOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqZmllbGQ7CisJc2l6ZV90IGxlbjsKK30gaGVhZGVyX2ZpZWxkW10gPSB7CisJeyAiYXV0aG9yICIsIDcgfSwKKwl7ICJjb21taXR0ZXIgIiwgMTAgfSwKKwl7ICJyZWZsb2cgIiwgNyB9LAorfTsKKworc3RhdGljIGludCBtYXRjaF9vbmVfcGF0dGVybihzdHJ1Y3QgZ3JlcF9wYXQgKnAsIGNoYXIgKmJvbCwgY2hhciAqZW9sLAorCQkJICAgICBlbnVtIGdyZXBfY29udGV4dCBjdHgsCisJCQkgICAgIHJlZ21hdGNoX3QgKnBtYXRjaCwgaW50IGVmbGFncykKK3sKKwlpbnQgaGl0ID0gMDsKKwlpbnQgc2F2ZWRfY2ggPSAwOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gYm9sOworCisJaWYgKChwLT50b2tlbiAhPSBHUkVQX1BBVFRFUk4pICYmCisJICAgICgocC0+dG9rZW4gPT0gR1JFUF9QQVRURVJOX0hFQUQpICE9IChjdHggPT0gR1JFUF9DT05URVhUX0hFQUQpKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocC0+dG9rZW4gPT0gR1JFUF9QQVRURVJOX0hFQUQpIHsKKwkJY29uc3QgY2hhciAqZmllbGQ7CisJCXNpemVfdCBsZW47CisJCWFzc2VydChwLT5maWVsZCA8IEFSUkFZX1NJWkUoaGVhZGVyX2ZpZWxkKSk7CisJCWZpZWxkID0gaGVhZGVyX2ZpZWxkW3AtPmZpZWxkXS5maWVsZDsKKwkJbGVuID0gaGVhZGVyX2ZpZWxkW3AtPmZpZWxkXS5sZW47CisJCWlmIChzdHJuY21wKGJvbCwgZmllbGQsIGxlbikpCisJCQlyZXR1cm4gMDsKKwkJYm9sICs9IGxlbjsKKwkJc3dpdGNoIChwLT5maWVsZCkgeworCQljYXNlIEdSRVBfSEVBREVSX0FVVEhPUjoKKwkJY2FzZSBHUkVQX0hFQURFUl9DT01NSVRURVI6CisJCQlzYXZlZF9jaCA9IHN0cmlwX3RpbWVzdGFtcChib2wsICZlb2wpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworIGFnYWluOgorCWhpdCA9IHBhdG1hdGNoKHAsIGJvbCwgZW9sLCBwbWF0Y2gsIGVmbGFncyk7CisKKwlpZiAoaGl0ICYmIHAtPndvcmRfcmVnZXhwKSB7CisJCWlmICgocG1hdGNoWzBdLnJtX3NvIDwgMCkgfHwKKwkJICAgIChlb2wgLSBib2wpIDwgcG1hdGNoWzBdLnJtX3NvIHx8CisJCSAgICAocG1hdGNoWzBdLnJtX2VvIDwgMCkgfHwKKwkJICAgIChlb2wgLSBib2wpIDwgcG1hdGNoWzBdLnJtX2VvKQorCQkJZGllKCJyZWdleHAgcmV0dXJuZWQgbm9uc2Vuc2UiKTsKKworCQkvKiBNYXRjaCBiZWdpbm5pbmcgbXVzdCBiZSBlaXRoZXIgYmVnaW5uaW5nIG9mIHRoZQorCQkgKiBsaW5lLCBvciBhdCB3b3JkIGJvdW5kYXJ5IChpLmUuIHRoZSBsYXN0IGNoYXIgbXVzdAorCQkgKiBub3QgYmUgYSB3b3JkIGNoYXIpLiAgU2ltaWxhcmx5LCBtYXRjaCBlbmQgbXVzdCBiZQorCQkgKiBlaXRoZXIgZW5kIG9mIHRoZSBsaW5lLCBvciBhdCB3b3JkIGJvdW5kYXJ5CisJCSAqIChpLmUuIHRoZSBuZXh0IGNoYXIgbXVzdCBub3QgYmUgYSB3b3JkIGNoYXIpLgorCQkgKi8KKwkJaWYgKCAoKHBtYXRjaFswXS5ybV9zbyA9PSAwKSB8fAorCQkgICAgICAhd29yZF9jaGFyKGJvbFtwbWF0Y2hbMF0ucm1fc28tMV0pKSAmJgorCQkgICAgICgocG1hdGNoWzBdLnJtX2VvID09IChlb2wtYm9sKSkgfHwKKwkJICAgICAgIXdvcmRfY2hhcihib2xbcG1hdGNoWzBdLnJtX2VvXSkpICkKKwkJCTsKKwkJZWxzZQorCQkJaGl0ID0gMDsKKworCQkvKiBXb3JkcyBjb25zaXN0IG9mIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIuICovCisJCWlmIChwbWF0Y2gtPnJtX3NvID09IHBtYXRjaC0+cm1fZW8pCisJCQloaXQgPSAwOworCisJCWlmICghaGl0ICYmIHBtYXRjaFswXS5ybV9zbyArIGJvbCArIDEgPCBlb2wpIHsKKwkJCS8qIFRoZXJlIGNvdWxkIGJlIG1vcmUgdGhhbiBvbmUgbWF0Y2ggb24gdGhlCisJCQkgKiBsaW5lLCBhbmQgdGhlIGZpcnN0IG1hdGNoIG1pZ2h0IG5vdCBiZQorCQkJICogc3RyaWN0IHdvcmQgbWF0Y2guICBCdXQgbGF0ZXIgb25lcyBjb3VsZCBiZSEKKwkJCSAqIEZvcndhcmQgdG8gdGhlIG5leHQgcG9zc2libGUgc3RhcnQsIGkuZS4gdGhlCisJCQkgKiBuZXh0IHBvc2l0aW9uIGZvbGxvd2luZyBhIG5vbi13b3JkIGNoYXIuCisJCQkgKi8KKwkJCWJvbCA9IHBtYXRjaFswXS5ybV9zbyArIGJvbCArIDE7CisJCQl3aGlsZSAod29yZF9jaGFyKGJvbFstMV0pICYmIGJvbCA8IGVvbCkKKwkJCQlib2wrKzsKKwkJCWVmbGFncyB8PSBSRUdfTk9UQk9MOworCQkJaWYgKGJvbCA8IGVvbCkKKwkJCQlnb3RvIGFnYWluOworCQl9CisJfQorCWlmIChwLT50b2tlbiA9PSBHUkVQX1BBVFRFUk5fSEVBRCAmJiBzYXZlZF9jaCkKKwkJKmVvbCA9IHNhdmVkX2NoOworCWlmIChoaXQpIHsKKwkJcG1hdGNoWzBdLnJtX3NvICs9IGJvbCAtIHN0YXJ0OworCQlwbWF0Y2hbMF0ucm1fZW8gKz0gYm9sIC0gc3RhcnQ7CisJfQorCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfZXhwcl9ldmFsKHN0cnVjdCBncmVwX2V4cHIgKngsIGNoYXIgKmJvbCwgY2hhciAqZW9sLAorCQkJICAgZW51bSBncmVwX2NvbnRleHQgY3R4LCBpbnQgY29sbGVjdF9oaXRzKQoreworCWludCBoID0gMDsKKwlyZWdtYXRjaF90IG1hdGNoOworCisJaWYgKCF4KQorCQlkaWUoIk5vdCBhIHZhbGlkIGdyZXAgZXhwcmVzc2lvbiIpOworCXN3aXRjaCAoeC0+bm9kZSkgeworCWNhc2UgR1JFUF9OT0RFX1RSVUU6CisJCWggPSAxOworCQlicmVhazsKKwljYXNlIEdSRVBfTk9ERV9BVE9NOgorCQloID0gbWF0Y2hfb25lX3BhdHRlcm4oeC0+dS5hdG9tLCBib2wsIGVvbCwgY3R4LCAmbWF0Y2gsIDApOworCQlicmVhazsKKwljYXNlIEdSRVBfTk9ERV9OT1Q6CisJCWggPSAhbWF0Y2hfZXhwcl9ldmFsKHgtPnUudW5hcnksIGJvbCwgZW9sLCBjdHgsIDApOworCQlicmVhazsKKwljYXNlIEdSRVBfTk9ERV9BTkQ6CisJCWlmICghbWF0Y2hfZXhwcl9ldmFsKHgtPnUuYmluYXJ5LmxlZnQsIGJvbCwgZW9sLCBjdHgsIDApKQorCQkJcmV0dXJuIDA7CisJCWggPSBtYXRjaF9leHByX2V2YWwoeC0+dS5iaW5hcnkucmlnaHQsIGJvbCwgZW9sLCBjdHgsIDApOworCQlicmVhazsKKwljYXNlIEdSRVBfTk9ERV9PUjoKKwkJaWYgKCFjb2xsZWN0X2hpdHMpCisJCQlyZXR1cm4gKG1hdGNoX2V4cHJfZXZhbCh4LT51LmJpbmFyeS5sZWZ0LAorCQkJCQkJYm9sLCBlb2wsIGN0eCwgMCkgfHwKKwkJCQltYXRjaF9leHByX2V2YWwoeC0+dS5iaW5hcnkucmlnaHQsCisJCQkJCQlib2wsIGVvbCwgY3R4LCAwKSk7CisJCWggPSBtYXRjaF9leHByX2V2YWwoeC0+dS5iaW5hcnkubGVmdCwgYm9sLCBlb2wsIGN0eCwgMCk7CisJCXgtPnUuYmluYXJ5LmxlZnQtPmhpdCB8PSBoOworCQloIHw9IG1hdGNoX2V4cHJfZXZhbCh4LT51LmJpbmFyeS5yaWdodCwgYm9sLCBlb2wsIGN0eCwgMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRpZSgiVW5leHBlY3RlZCBub2RlIHR5cGUgKGludGVybmFsIGVycm9yKSAlZCIsIHgtPm5vZGUpOworCX0KKwlpZiAoY29sbGVjdF9oaXRzKQorCQl4LT5oaXQgfD0gaDsKKwlyZXR1cm4gaDsKK30KKworc3RhdGljIGludCBtYXRjaF9leHByKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyICpib2wsIGNoYXIgKmVvbCwKKwkJICAgICAgZW51bSBncmVwX2NvbnRleHQgY3R4LCBpbnQgY29sbGVjdF9oaXRzKQoreworCXN0cnVjdCBncmVwX2V4cHIgKnggPSBvcHQtPnBhdHRlcm5fZXhwcmVzc2lvbjsKKwlyZXR1cm4gbWF0Y2hfZXhwcl9ldmFsKHgsIGJvbCwgZW9sLCBjdHgsIGNvbGxlY3RfaGl0cyk7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfbGluZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY2hhciAqYm9sLCBjaGFyICplb2wsCisJCSAgICAgIGVudW0gZ3JlcF9jb250ZXh0IGN0eCwgaW50IGNvbGxlY3RfaGl0cykKK3sKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnA7CisJcmVnbWF0Y2hfdCBtYXRjaDsKKworCWlmIChvcHQtPmV4dGVuZGVkKQorCQlyZXR1cm4gbWF0Y2hfZXhwcihvcHQsIGJvbCwgZW9sLCBjdHgsIGNvbGxlY3RfaGl0cyk7CisKKwkvKiB3ZSBkbyBub3QgY2FsbCB3aXRoIGNvbGxlY3RfaGl0cyB3aXRob3V0IGJlaW5nIGV4dGVuZGVkICovCisJZm9yIChwID0gb3B0LT5wYXR0ZXJuX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChtYXRjaF9vbmVfcGF0dGVybihwLCBib2wsIGVvbCwgY3R4LCAmbWF0Y2gsIDApKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hdGNoX25leHRfcGF0dGVybihzdHJ1Y3QgZ3JlcF9wYXQgKnAsIGNoYXIgKmJvbCwgY2hhciAqZW9sLAorCQkJICAgICAgZW51bSBncmVwX2NvbnRleHQgY3R4LAorCQkJICAgICAgcmVnbWF0Y2hfdCAqcG1hdGNoLCBpbnQgZWZsYWdzKQoreworCXJlZ21hdGNoX3QgbWF0Y2g7CisKKwlpZiAoIW1hdGNoX29uZV9wYXR0ZXJuKHAsIGJvbCwgZW9sLCBjdHgsICZtYXRjaCwgZWZsYWdzKSkKKwkJcmV0dXJuIDA7CisJaWYgKG1hdGNoLnJtX3NvIDwgMCB8fCBtYXRjaC5ybV9lbyA8IDApCisJCXJldHVybiAwOworCWlmIChwbWF0Y2gtPnJtX3NvID49IDAgJiYgcG1hdGNoLT5ybV9lbyA+PSAwKSB7CisJCWlmIChtYXRjaC5ybV9zbyA+IHBtYXRjaC0+cm1fc28pCisJCQlyZXR1cm4gMTsKKwkJaWYgKG1hdGNoLnJtX3NvID09IHBtYXRjaC0+cm1fc28gJiYgbWF0Y2gucm1fZW8gPCBwbWF0Y2gtPnJtX2VvKQorCQkJcmV0dXJuIDE7CisJfQorCXBtYXRjaC0+cm1fc28gPSBtYXRjaC5ybV9zbzsKKwlwbWF0Y2gtPnJtX2VvID0gbWF0Y2gucm1fZW87CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbmV4dF9tYXRjaChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY2hhciAqYm9sLCBjaGFyICplb2wsCisJCSAgICAgIGVudW0gZ3JlcF9jb250ZXh0IGN0eCwgcmVnbWF0Y2hfdCAqcG1hdGNoLCBpbnQgZWZsYWdzKQoreworCXN0cnVjdCBncmVwX3BhdCAqcDsKKwlpbnQgaGl0ID0gMDsKKworCXBtYXRjaC0+cm1fc28gPSBwbWF0Y2gtPnJtX2VvID0gLTE7CisJaWYgKGJvbCA8IGVvbCkgeworCQlmb3IgKHAgPSBvcHQtPnBhdHRlcm5fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCXN3aXRjaCAocC0+dG9rZW4pIHsKKwkJCWNhc2UgR1JFUF9QQVRURVJOOiAvKiBhdG9tICovCisJCQljYXNlIEdSRVBfUEFUVEVSTl9IRUFEOgorCQkJY2FzZSBHUkVQX1BBVFRFUk5fQk9EWToKKwkJCQloaXQgfD0gbWF0Y2hfbmV4dF9wYXR0ZXJuKHAsIGJvbCwgZW9sLCBjdHgsCisJCQkJCQkJICBwbWF0Y2gsIGVmbGFncyk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybiBoaXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbGluZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgY2hhciAqYm9sLCBjaGFyICplb2wsCisJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxubywgY2hhciBzaWduKQoreworCWludCByZXN0ID0gZW9sIC0gYm9sOworCWNvbnN0IGNoYXIgKm1hdGNoX2NvbG9yLCAqbGluZV9jb2xvciA9IE5VTEw7CisKKwlpZiAob3B0LT5maWxlX2JyZWFrICYmIG9wdC0+bGFzdF9zaG93biA9PSAwKSB7CisJCWlmIChvcHQtPnNob3dfaHVua19tYXJrKQorCQkJb3B0LT5vdXRwdXQob3B0LCAiXG4iLCAxKTsKKwl9IGVsc2UgaWYgKG9wdC0+cHJlX2NvbnRleHQgfHwgb3B0LT5wb3N0X2NvbnRleHQgfHwgb3B0LT5mdW5jYm9keSkgeworCQlpZiAob3B0LT5sYXN0X3Nob3duID09IDApIHsKKwkJCWlmIChvcHQtPnNob3dfaHVua19tYXJrKSB7CisJCQkJb3V0cHV0X2NvbG9yKG9wdCwgIi0tIiwgMiwgb3B0LT5jb2xvcl9zZXApOworCQkJCW9wdC0+b3V0cHV0KG9wdCwgIlxuIiwgMSk7CisJCQl9CisJCX0gZWxzZSBpZiAobG5vID4gb3B0LT5sYXN0X3Nob3duICsgMSkgeworCQkJb3V0cHV0X2NvbG9yKG9wdCwgIi0tIiwgMiwgb3B0LT5jb2xvcl9zZXApOworCQkJb3B0LT5vdXRwdXQob3B0LCAiXG4iLCAxKTsKKwkJfQorCX0KKwlpZiAob3B0LT5oZWFkaW5nICYmIG9wdC0+bGFzdF9zaG93biA9PSAwKSB7CisJCW91dHB1dF9jb2xvcihvcHQsIG5hbWUsIHN0cmxlbihuYW1lKSwgb3B0LT5jb2xvcl9maWxlbmFtZSk7CisJCW9wdC0+b3V0cHV0KG9wdCwgIlxuIiwgMSk7CisJfQorCW9wdC0+bGFzdF9zaG93biA9IGxubzsKKworCWlmICghb3B0LT5oZWFkaW5nICYmIG9wdC0+cGF0aG5hbWUpIHsKKwkJb3V0cHV0X2NvbG9yKG9wdCwgbmFtZSwgc3RybGVuKG5hbWUpLCBvcHQtPmNvbG9yX2ZpbGVuYW1lKTsKKwkJb3V0cHV0X3NlcChvcHQsIHNpZ24pOworCX0KKwlpZiAob3B0LT5saW5lbnVtKSB7CisJCWNoYXIgYnVmWzMyXTsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgbG5vKTsKKwkJb3V0cHV0X2NvbG9yKG9wdCwgYnVmLCBzdHJsZW4oYnVmKSwgb3B0LT5jb2xvcl9saW5lbm8pOworCQlvdXRwdXRfc2VwKG9wdCwgc2lnbik7CisJfQorCWlmIChvcHQtPmNvbG9yKSB7CisJCXJlZ21hdGNoX3QgbWF0Y2g7CisJCWVudW0gZ3JlcF9jb250ZXh0IGN0eCA9IEdSRVBfQ09OVEVYVF9CT0RZOworCQlpbnQgY2ggPSAqZW9sOworCQlpbnQgZWZsYWdzID0gMDsKKworCQlpZiAoc2lnbiA9PSAnOicpCisJCQltYXRjaF9jb2xvciA9IG9wdC0+Y29sb3JfbWF0Y2hfc2VsZWN0ZWQ7CisJCWVsc2UKKwkJCW1hdGNoX2NvbG9yID0gb3B0LT5jb2xvcl9tYXRjaF9jb250ZXh0OworCQlpZiAoc2lnbiA9PSAnOicpCisJCQlsaW5lX2NvbG9yID0gb3B0LT5jb2xvcl9zZWxlY3RlZDsKKwkJZWxzZSBpZiAoc2lnbiA9PSAnLScpCisJCQlsaW5lX2NvbG9yID0gb3B0LT5jb2xvcl9jb250ZXh0OworCQllbHNlIGlmIChzaWduID09ICc9JykKKwkJCWxpbmVfY29sb3IgPSBvcHQtPmNvbG9yX2Z1bmN0aW9uOworCQkqZW9sID0gJ1wwJzsKKwkJd2hpbGUgKG5leHRfbWF0Y2gob3B0LCBib2wsIGVvbCwgY3R4LCAmbWF0Y2gsIGVmbGFncykpIHsKKwkJCWlmIChtYXRjaC5ybV9zbyA9PSBtYXRjaC5ybV9lbykKKwkJCQlicmVhazsKKworCQkJb3V0cHV0X2NvbG9yKG9wdCwgYm9sLCBtYXRjaC5ybV9zbywgbGluZV9jb2xvcik7CisJCQlvdXRwdXRfY29sb3Iob3B0LCBib2wgKyBtYXRjaC5ybV9zbywKKwkJCQkgICAgIG1hdGNoLnJtX2VvIC0gbWF0Y2gucm1fc28sIG1hdGNoX2NvbG9yKTsKKwkJCWJvbCArPSBtYXRjaC5ybV9lbzsKKwkJCXJlc3QgLT0gbWF0Y2gucm1fZW87CisJCQllZmxhZ3MgPSBSRUdfTk9UQk9MOworCQl9CisJCSplb2wgPSBjaDsKKwl9CisJb3V0cHV0X2NvbG9yKG9wdCwgYm9sLCByZXN0LCBsaW5lX2NvbG9yKTsKKwlvcHQtPm91dHB1dChvcHQsICJcbiIsIDEpOworfQorCisjaWZuZGVmIE5PX1BUSFJFQURTCitpbnQgZ3JlcF91c2VfbG9ja3M7CisKKy8qCisgKiBUaGlzIGxvY2sgcHJvdGVjdHMgYWNjZXNzIHRvIHRoZSBnaXRhdHRyaWJ1dGVzIG1hY2hpbmVyeSwgd2hpY2ggaXMKKyAqIG5vdCB0aHJlYWQtc2FmZS4KKyAqLworcHRocmVhZF9tdXRleF90IGdyZXBfYXR0cl9tdXRleDsKKworc3RhdGljIGlubGluZSB2b2lkIGdyZXBfYXR0cl9sb2NrKHZvaWQpCit7CisJaWYgKGdyZXBfdXNlX2xvY2tzKQorCQlwdGhyZWFkX211dGV4X2xvY2soJmdyZXBfYXR0cl9tdXRleCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmVwX2F0dHJfdW5sb2NrKHZvaWQpCit7CisJaWYgKGdyZXBfdXNlX2xvY2tzKQorCQlwdGhyZWFkX211dGV4X3VubG9jaygmZ3JlcF9hdHRyX211dGV4KTsKK30KKworLyoKKyAqIFNhbWUgYXMgZ2l0X2F0dHJfbXV0ZXgsIGJ1dCBwcm90ZWN0aW5nIHRoZSB0aHJlYWQtdW5zYWZlIG9iamVjdCBkYiBhY2Nlc3MuCisgKi8KK3B0aHJlYWRfbXV0ZXhfdCBncmVwX3JlYWRfbXV0ZXg7CisKKyNlbHNlCisjZGVmaW5lIGdyZXBfYXR0cl9sb2NrKCkKKyNkZWZpbmUgZ3JlcF9hdHRyX3VubG9jaygpCisjZW5kaWYKKworc3RhdGljIGludCBtYXRjaF9mdW5jbmFtZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgc3RydWN0IGdyZXBfc291cmNlICpncywgY2hhciAqYm9sLCBjaGFyICplb2wpCit7CisJeGRlbWl0Y29uZl90ICp4ZWNmZyA9IG9wdC0+cHJpdjsKKwlpZiAoeGVjZmcgJiYgIXhlY2ZnLT5maW5kX2Z1bmMpIHsKKwkJZ3JlcF9zb3VyY2VfbG9hZF9kcml2ZXIoZ3MpOworCQlpZiAoZ3MtPmRyaXZlci0+ZnVuY25hbWUucGF0dGVybikgeworCQkJY29uc3Qgc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lICpwZSA9ICZncy0+ZHJpdmVyLT5mdW5jbmFtZTsKKwkJCXhkaWZmX3NldF9maW5kX2Z1bmMoeGVjZmcsIHBlLT5wYXR0ZXJuLCBwZS0+Y2ZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCXhlY2ZnID0gb3B0LT5wcml2ID0gTlVMTDsKKwkJfQorCX0KKworCWlmICh4ZWNmZykgeworCQljaGFyIGJ1ZlsxXTsKKwkJcmV0dXJuIHhlY2ZnLT5maW5kX2Z1bmMoYm9sLCBlb2wgLSBib2wsIGJ1ZiwgMSwKKwkJCQkJeGVjZmctPmZpbmRfZnVuY19wcml2KSA+PSAwOworCX0KKworCWlmIChib2wgPT0gZW9sKQorCQlyZXR1cm4gMDsKKwlpZiAoaXNhbHBoYSgqYm9sKSB8fCAqYm9sID09ICdfJyB8fCAqYm9sID09ICckJykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfZnVuY25hbWVfbGluZShzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwgc3RydWN0IGdyZXBfc291cmNlICpncywKKwkJCSAgICAgICBjaGFyICpib2wsIHVuc2lnbmVkIGxubykKK3sKKwl3aGlsZSAoYm9sID4gZ3MtPmJ1ZikgeworCQljaGFyICplb2wgPSAtLWJvbDsKKworCQl3aGlsZSAoYm9sID4gZ3MtPmJ1ZiAmJiBib2xbLTFdICE9ICdcbicpCisJCQlib2wtLTsKKwkJbG5vLS07CisKKwkJaWYgKGxubyA8PSBvcHQtPmxhc3Rfc2hvd24pCisJCQlicmVhazsKKworCQlpZiAobWF0Y2hfZnVuY25hbWUob3B0LCBncywgYm9sLCBlb2wpKSB7CisJCQlzaG93X2xpbmUob3B0LCBib2wsIGVvbCwgZ3MtPm5hbWUsIGxubywgJz0nKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X3ByZV9jb250ZXh0KHN0cnVjdCBncmVwX29wdCAqb3B0LCBzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzLAorCQkJICAgICBjaGFyICpib2wsIGNoYXIgKmVuZCwgdW5zaWduZWQgbG5vKQoreworCXVuc2lnbmVkIGN1ciA9IGxubywgZnJvbSA9IDEsIGZ1bmNuYW1lX2xubyA9IDA7CisJaW50IGZ1bmNuYW1lX25lZWRlZCA9ICEhb3B0LT5mdW5jbmFtZTsKKworCWlmIChvcHQtPmZ1bmNib2R5ICYmICFtYXRjaF9mdW5jbmFtZShvcHQsIGdzLCBib2wsIGVuZCkpCisJCWZ1bmNuYW1lX25lZWRlZCA9IDI7CisKKwlpZiAob3B0LT5wcmVfY29udGV4dCA8IGxubykKKwkJZnJvbSA9IGxubyAtIG9wdC0+cHJlX2NvbnRleHQ7CisJaWYgKGZyb20gPD0gb3B0LT5sYXN0X3Nob3duKQorCQlmcm9tID0gb3B0LT5sYXN0X3Nob3duICsgMTsKKworCS8qIFJld2luZC4gKi8KKwl3aGlsZSAoYm9sID4gZ3MtPmJ1ZiAmJgorCSAgICAgICBjdXIgPiAoZnVuY25hbWVfbmVlZGVkID09IDIgPyBvcHQtPmxhc3Rfc2hvd24gKyAxIDogZnJvbSkpIHsKKwkJY2hhciAqZW9sID0gLS1ib2w7CisKKwkJd2hpbGUgKGJvbCA+IGdzLT5idWYgJiYgYm9sWy0xXSAhPSAnXG4nKQorCQkJYm9sLS07CisJCWN1ci0tOworCQlpZiAoZnVuY25hbWVfbmVlZGVkICYmIG1hdGNoX2Z1bmNuYW1lKG9wdCwgZ3MsIGJvbCwgZW9sKSkgeworCQkJZnVuY25hbWVfbG5vID0gY3VyOworCQkJZnVuY25hbWVfbmVlZGVkID0gMDsKKwkJfQorCX0KKworCS8qIFdlIG5lZWQgdG8gbG9vayBldmVuIGZ1cnRoZXIgYmFjayB0byBmaW5kIGEgZnVuY3Rpb24gc2lnbmF0dXJlLiAqLworCWlmIChvcHQtPmZ1bmNuYW1lICYmIGZ1bmNuYW1lX25lZWRlZCkKKwkJc2hvd19mdW5jbmFtZV9saW5lKG9wdCwgZ3MsIGJvbCwgY3VyKTsKKworCS8qIEJhY2sgZm9yd2FyZC4gKi8KKwl3aGlsZSAoY3VyIDwgbG5vKSB7CisJCWNoYXIgKmVvbCA9IGJvbCwgc2lnbiA9IChjdXIgPT0gZnVuY25hbWVfbG5vKSA/ICc9JyA6ICctJzsKKworCQl3aGlsZSAoKmVvbCAhPSAnXG4nKQorCQkJZW9sKys7CisJCXNob3dfbGluZShvcHQsIGJvbCwgZW9sLCBncy0+bmFtZSwgY3VyLCBzaWduKTsKKwkJYm9sID0gZW9sICsgMTsKKwkJY3VyKys7CisJfQorfQorCitzdGF0aWMgaW50IHNob3VsZF9sb29rYWhlYWQoc3RydWN0IGdyZXBfb3B0ICpvcHQpCit7CisJc3RydWN0IGdyZXBfcGF0ICpwOworCisJaWYgKG9wdC0+ZXh0ZW5kZWQpCisJCXJldHVybiAwOyAvKiBwdW50IGZvciB0b28gY29tcGxleCBzdHVmZiAqLworCWlmIChvcHQtPmludmVydCkKKwkJcmV0dXJuIDA7CisJZm9yIChwID0gb3B0LT5wYXR0ZXJuX2xpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT50b2tlbiAhPSBHUkVQX1BBVFRFUk4pCisJCQlyZXR1cm4gMDsgLyogcHVudCBmb3IgImhlYWRlciBvbmx5IiBhbmQgc3R1ZmYgKi8KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbG9va19haGVhZChzdHJ1Y3QgZ3JlcF9vcHQgKm9wdCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyAqbGVmdF9wLAorCQkgICAgICB1bnNpZ25lZCAqbG5vX3AsCisJCSAgICAgIGNoYXIgKipib2xfcCkKK3sKKwl1bnNpZ25lZCBsbm8gPSAqbG5vX3A7CisJY2hhciAqYm9sID0gKmJvbF9wOworCXN0cnVjdCBncmVwX3BhdCAqcDsKKwljaGFyICpzcCwgKmxhc3RfYm9sOworCXJlZ29mZl90IGVhcmxpZXN0ID0gLTE7CisKKwlmb3IgKHAgPSBvcHQtPnBhdHRlcm5fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaW50IGhpdDsKKwkJcmVnbWF0Y2hfdCBtOworCisJCWhpdCA9IHBhdG1hdGNoKHAsIGJvbCwgYm9sICsgKmxlZnRfcCwgJm0sIDApOworCQlpZiAoIWhpdCB8fCBtLnJtX3NvIDwgMCB8fCBtLnJtX2VvIDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoZWFybGllc3QgPCAwIHx8IG0ucm1fc28gPCBlYXJsaWVzdCkKKwkJCWVhcmxpZXN0ID0gbS5ybV9zbzsKKwl9CisKKwlpZiAoZWFybGllc3QgPCAwKSB7CisJCSpib2xfcCA9IGJvbCArICpsZWZ0X3A7CisJCSpsZWZ0X3AgPSAwOworCQlyZXR1cm4gMTsKKwl9CisJZm9yIChzcCA9IGJvbCArIGVhcmxpZXN0OyBib2wgPCBzcCAmJiBzcFstMV0gIT0gJ1xuJzsgc3AtLSkKKwkJOyAvKiBmaW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgKi8KKwlsYXN0X2JvbCA9IHNwOworCisJZm9yIChzcCA9IGJvbDsgc3AgPCBsYXN0X2JvbDsgc3ArKykgeworCQlpZiAoKnNwID09ICdcbicpCisJCQlsbm8rKzsKKwl9CisJKmxlZnRfcCAtPSBsYXN0X2JvbCAtIGJvbDsKKwkqYm9sX3AgPSBsYXN0X2JvbDsKKwkqbG5vX3AgPSBsbm87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN0ZF9vdXRwdXQoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJZndyaXRlKGJ1Ziwgc2l6ZSwgMSwgc3Rkb3V0KTsKK30KKworc3RhdGljIGludCBmaWxsX3RleHRjb252X2dyZXAoc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyLAorCQkJICAgICAgc3RydWN0IGdyZXBfc291cmNlICpncykKK3sKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGY7CisJY2hhciAqYnVmOworCXNpemVfdCBzaXplOworCisJaWYgKCFkcml2ZXIgfHwgIWRyaXZlci0+dGV4dGNvbnYpCisJCXJldHVybiBncmVwX3NvdXJjZV9sb2FkKGdzKTsKKworCS8qCisJICogVGhlIHRleHRjb252IGludGVyZmFjZSBpcyBpbnRpbWF0ZWx5IHRpZWQgdG8gZGlmZl9maWxlc3BlY3MsIHNvIHdlCisJICogaGF2ZSB0byBwcmV0ZW5kIHRvIGJlIG9uZS4gSWYgd2UgY291bGQgdW5pZnkgdGhlIGdyZXBfc291cmNlCisJICogYW5kIGRpZmZfZmlsZXNwZWMgc3RydWN0cywgdGhpcyBtZXNzIGNvdWxkIGp1c3QgZ28gYXdheS4KKwkgKi8KKwlkZiA9IGFsbG9jX2ZpbGVzcGVjKGdzLT5wYXRoKTsKKwlzd2l0Y2ggKGdzLT50eXBlKSB7CisJY2FzZSBHUkVQX1NPVVJDRV9TSEExOgorCQlmaWxsX2ZpbGVzcGVjKGRmLCBncy0+aWRlbnRpZmllciwgMSwgMDEwMDY0NCk7CisJCWJyZWFrOworCWNhc2UgR1JFUF9TT1VSQ0VfRklMRToKKwkJZmlsbF9maWxlc3BlYyhkZiwgbnVsbF9zaGExLCAwLCAwMTAwNjQ0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGllKCJCVUc6IGF0dGVtcHQgdG8gdGV4dGNvbnYgc29tZXRoaW5nIHdpdGhvdXQgYSBwYXRoPyIpOworCX0KKworCS8qCisJICogZmlsbF90ZXh0Y29udiBpcyBub3QgcmVtb3RlbHkgdGhyZWFkLXNhZmU7IGl0IG1heSBsb2FkIG9iamVjdHMKKwkgKiBiZWhpbmQgdGhlIHNjZW5lcywgYW5kIGl0IG1vZGlmaWVzIHRoZSBnbG9iYWwgZGlmZiB0ZW1wZmlsZQorCSAqIHN0cnVjdHVyZS4KKwkgKi8KKwlncmVwX3JlYWRfbG9jaygpOworCXNpemUgPSBmaWxsX3RleHRjb252KGRyaXZlciwgZGYsICZidWYpOworCWdyZXBfcmVhZF91bmxvY2soKTsKKwlmcmVlX2ZpbGVzcGVjKGRmKTsKKworCS8qCisJICogVGhlIG5vcm1hbCBmaWxsX3RleHRjb252IHVzYWdlIGJ5IHRoZSBkaWZmIG1hY2hpbmVyeSB3b3VsZCBqdXN0IGtlZXAKKwkgKiB0aGUgdGV4dGNvbnYnZCBidWYgc2VwYXJhdGUgZnJvbSB0aGUgZGlmZl9maWxlc3BlYy4gQnV0IG11Y2ggb2YgdGhlCisJICogZ3JlcCBjb2RlIHBhc3NlcyBhcm91bmQgYSBncmVwX3NvdXJjZSBhbmQgYXNzdW1lcyB0aGF0IGl0cyAiYnVmIgorCSAqIHBvaW50ZXIgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGhpbmcgd2UgYXJlIHNlYXJjaGluZy4gU28gbGV0J3MKKwkgKiBpbnN0YWxsIG91ciB0ZXh0Y29udidkIHZlcnNpb24gaW50byB0aGUgZ3JlcF9zb3VyY2UsIHRha2luZyBjYXJlIG5vdAorCSAqIHRvIGxlYWsgYW55IGV4aXN0aW5nIGJ1ZmZlci4KKwkgKi8KKwlncmVwX3NvdXJjZV9jbGVhcl9kYXRhKGdzKTsKKwlncy0+YnVmID0gYnVmOworCWdzLT5zaXplID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdyZXBfc291cmNlXzEoc3RydWN0IGdyZXBfb3B0ICpvcHQsIHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MsIGludCBjb2xsZWN0X2hpdHMpCit7CisJY2hhciAqYm9sOworCXVuc2lnbmVkIGxvbmcgbGVmdDsKKwl1bnNpZ25lZCBsbm8gPSAxOworCXVuc2lnbmVkIGxhc3RfaGl0ID0gMDsKKwlpbnQgYmluYXJ5X21hdGNoX29ubHkgPSAwOworCXVuc2lnbmVkIGNvdW50ID0gMDsKKwlpbnQgdHJ5X2xvb2thaGVhZCA9IDA7CisJaW50IHNob3dfZnVuY3Rpb24gPSAwOworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnRleHRjb252ID0gTlVMTDsKKwllbnVtIGdyZXBfY29udGV4dCBjdHggPSBHUkVQX0NPTlRFWFRfSEVBRDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisKKwlpZiAoIW9wdC0+b3V0cHV0KQorCQlvcHQtPm91dHB1dCA9IHN0ZF9vdXRwdXQ7CisKKwlpZiAob3B0LT5wcmVfY29udGV4dCB8fCBvcHQtPnBvc3RfY29udGV4dCB8fCBvcHQtPmZpbGVfYnJlYWsgfHwKKwkgICAgb3B0LT5mdW5jYm9keSkgeworCQkvKiBTaG93IGh1bmsgbWFya3MsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0IGZpbGUuICovCisJCWlmIChvcHQtPmxhc3Rfc2hvd24pCisJCQlvcHQtPnNob3dfaHVua19tYXJrID0gMTsKKwkJLyoKKwkJICogSWYgd2UncmUgdXNpbmcgdGhyZWFkcyB0aGVuIHdlIGNhbid0IGVhc2lseSBpZGVudGlmeQorCQkgKiB0aGUgZmlyc3QgZmlsZS4gIEFsd2F5cyBwdXQgaHVuayBtYXJrcyBpbiB0aGF0IGNhc2UKKwkJICogYW5kIHNraXAgdGhlIHZlcnkgZmlyc3Qgb25lIGxhdGVyIGluIHdvcmtfZG9uZSgpLgorCQkgKi8KKwkJaWYgKG9wdC0+b3V0cHV0ICE9IHN0ZF9vdXRwdXQpCisJCQlvcHQtPnNob3dfaHVua19tYXJrID0gMTsKKwl9CisJb3B0LT5sYXN0X3Nob3duID0gMDsKKworCWlmIChvcHQtPmFsbG93X3RleHRjb252KSB7CisJCWdyZXBfc291cmNlX2xvYWRfZHJpdmVyKGdzKTsKKwkJLyoKKwkJICogV2UgbWlnaHQgc2V0IHVwIHRoZSBzaGFyZWQgdGV4dGNvbnYgY2FjaGUgZGF0YSBoZXJlLCB3aGljaAorCQkgKiBpcyBub3QgdGhyZWFkLXNhZmUuCisJCSAqLworCQlncmVwX2F0dHJfbG9jaygpOworCQl0ZXh0Y29udiA9IHVzZXJkaWZmX2dldF90ZXh0Y29udihncy0+ZHJpdmVyKTsKKwkJZ3JlcF9hdHRyX3VubG9jaygpOworCX0KKworCS8qCisJICogV2Uga25vdyB0aGUgcmVzdWx0IG9mIGEgdGV4dGNvbnYgaXMgdGV4dCwgc28gd2Ugb25seSBoYXZlIHRvIGNhcmUKKwkgKiBhYm91dCBiaW5hcnkgaGFuZGxpbmcgaWYgd2UgYXJlIG5vdCB1c2luZyBpdC4KKwkgKi8KKwlpZiAoIXRleHRjb252KSB7CisJCXN3aXRjaCAob3B0LT5iaW5hcnkpIHsKKwkJY2FzZSBHUkVQX0JJTkFSWV9ERUZBVUxUOgorCQkJaWYgKGdyZXBfc291cmNlX2lzX2JpbmFyeShncykpCisJCQkJYmluYXJ5X21hdGNoX29ubHkgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgR1JFUF9CSU5BUllfTk9NQVRDSDoKKwkJCWlmIChncmVwX3NvdXJjZV9pc19iaW5hcnkoZ3MpKQorCQkJCXJldHVybiAwOyAvKiBBc3N1bWUgdW5tYXRjaCAqLworCQkJYnJlYWs7CisJCWNhc2UgR1JFUF9CSU5BUllfVEVYVDoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGllKCJidWc6IHVua25vd24gYmluYXJ5IGhhbmRsaW5nIG1vZGUiKTsKKwkJfQorCX0KKworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCW9wdC0+cHJpdiA9ICZ4ZWNmZzsKKworCXRyeV9sb29rYWhlYWQgPSBzaG91bGRfbG9va2FoZWFkKG9wdCk7CisKKwlpZiAoZmlsbF90ZXh0Y29udl9ncmVwKHRleHRjb252LCBncykgPCAwKQorCQlyZXR1cm4gMDsKKworCWJvbCA9IGdzLT5idWY7CisJbGVmdCA9IGdzLT5zaXplOworCXdoaWxlIChsZWZ0KSB7CisJCWNoYXIgKmVvbCwgY2g7CisJCWludCBoaXQ7CisKKwkJLyoKKwkJICogbG9va19haGVhZCgpIHNraXBzIHF1aWNrbHkgdG8gdGhlIGxpbmUgdGhhdCBwb3NzaWJseQorCQkgKiBoYXMgdGhlIG5leHQgaGl0OyBkb24ndCBjYWxsIGl0IGlmIHdlIG5lZWQgdG8gZG8KKwkJICogc29tZXRoaW5nIG1vcmUgdGhhbiBqdXN0IHNraXBwaW5nIHRoZSBjdXJyZW50IGxpbmUKKwkJICogaW4gcmVzcG9uc2UgdG8gYW4gdW5tYXRjaCBmb3IgdGhlIGN1cnJlbnQgbGluZS4gIEUuZy4KKwkJICogaW5zaWRlIGEgcG9zdC1jb250ZXh0IHdpbmRvdywgd2Ugd2lsbCBzaG93IHRoZSBjdXJyZW50CisJCSAqIGxpbmUgYXMgYSBjb250ZXh0IGFyb3VuZCB0aGUgcHJldmlvdXMgaGl0IHdoZW4gaXQKKwkJICogZG9lc24ndCBoaXQuCisJCSAqLworCQlpZiAodHJ5X2xvb2thaGVhZAorCQkgICAgJiYgIShsYXN0X2hpdAorCQkJICYmIChzaG93X2Z1bmN0aW9uIHx8CisJCQkgICAgIGxubyA8PSBsYXN0X2hpdCArIG9wdC0+cG9zdF9jb250ZXh0KSkKKwkJICAgICYmIGxvb2tfYWhlYWQob3B0LCAmbGVmdCwgJmxubywgJmJvbCkpCisJCQlicmVhazsKKwkJZW9sID0gZW5kX29mX2xpbmUoYm9sLCAmbGVmdCk7CisJCWNoID0gKmVvbDsKKwkJKmVvbCA9IDA7CisKKwkJaWYgKChjdHggPT0gR1JFUF9DT05URVhUX0hFQUQpICYmIChlb2wgPT0gYm9sKSkKKwkJCWN0eCA9IEdSRVBfQ09OVEVYVF9CT0RZOworCisJCWhpdCA9IG1hdGNoX2xpbmUob3B0LCBib2wsIGVvbCwgY3R4LCBjb2xsZWN0X2hpdHMpOworCQkqZW9sID0gY2g7CisKKwkJaWYgKGNvbGxlY3RfaGl0cykKKwkJCWdvdG8gbmV4dF9saW5lOworCisJCS8qICJncmVwIC12IC1lIGZvbyAtZSBibGEiIHNob3VsZCBsaXN0IGxpbmVzCisJCSAqIHRoYXQgZG8gbm90IGhhdmUgZWl0aGVyLCBzbyBpbnZlcnNpb24gc2hvdWxkCisJCSAqIGJlIGRvbmUgb3V0c2lkZS4KKwkJICovCisJCWlmIChvcHQtPmludmVydCkKKwkJCWhpdCA9ICFoaXQ7CisJCWlmIChvcHQtPnVubWF0Y2hfbmFtZV9vbmx5KSB7CisJCQlpZiAoaGl0KQorCQkJCXJldHVybiAwOworCQkJZ290byBuZXh0X2xpbmU7CisJCX0KKwkJaWYgKGhpdCkgeworCQkJY291bnQrKzsKKwkJCWlmIChvcHQtPnN0YXR1c19vbmx5KQorCQkJCXJldHVybiAxOworCQkJaWYgKG9wdC0+bmFtZV9vbmx5KSB7CisJCQkJc2hvd19uYW1lKG9wdCwgZ3MtPm5hbWUpOworCQkJCXJldHVybiAxOworCQkJfQorCQkJaWYgKG9wdC0+Y291bnQpCisJCQkJZ290byBuZXh0X2xpbmU7CisJCQlpZiAoYmluYXJ5X21hdGNoX29ubHkpIHsKKwkJCQlvcHQtPm91dHB1dChvcHQsICJCaW5hcnkgZmlsZSAiLCAxMik7CisJCQkJb3V0cHV0X2NvbG9yKG9wdCwgZ3MtPm5hbWUsIHN0cmxlbihncy0+bmFtZSksCisJCQkJCSAgICAgb3B0LT5jb2xvcl9maWxlbmFtZSk7CisJCQkJb3B0LT5vdXRwdXQob3B0LCAiIG1hdGNoZXNcbiIsIDkpOworCQkJCXJldHVybiAxOworCQkJfQorCQkJLyogSGl0IGF0IHRoaXMgbGluZS4gIElmIHdlIGhhdmVuJ3Qgc2hvd24gdGhlCisJCQkgKiBwcmUtY29udGV4dCBsaW5lcywgd2Ugd291bGQgbmVlZCB0byBzaG93IHRoZW0uCisJCQkgKi8KKwkJCWlmIChvcHQtPnByZV9jb250ZXh0IHx8IG9wdC0+ZnVuY2JvZHkpCisJCQkJc2hvd19wcmVfY29udGV4dChvcHQsIGdzLCBib2wsIGVvbCwgbG5vKTsKKwkJCWVsc2UgaWYgKG9wdC0+ZnVuY25hbWUpCisJCQkJc2hvd19mdW5jbmFtZV9saW5lKG9wdCwgZ3MsIGJvbCwgbG5vKTsKKwkJCXNob3dfbGluZShvcHQsIGJvbCwgZW9sLCBncy0+bmFtZSwgbG5vLCAnOicpOworCQkJbGFzdF9oaXQgPSBsbm87CisJCQlpZiAob3B0LT5mdW5jYm9keSkKKwkJCQlzaG93X2Z1bmN0aW9uID0gMTsKKwkJCWdvdG8gbmV4dF9saW5lOworCQl9CisJCWlmIChzaG93X2Z1bmN0aW9uICYmIG1hdGNoX2Z1bmNuYW1lKG9wdCwgZ3MsIGJvbCwgZW9sKSkKKwkJCXNob3dfZnVuY3Rpb24gPSAwOworCQlpZiAoc2hvd19mdW5jdGlvbiB8fAorCQkgICAgKGxhc3RfaGl0ICYmIGxubyA8PSBsYXN0X2hpdCArIG9wdC0+cG9zdF9jb250ZXh0KSkgeworCQkJLyogSWYgdGhlIGxhc3QgaGl0IGlzIHdpdGhpbiB0aGUgcG9zdCBjb250ZXh0LAorCQkJICogd2UgbmVlZCB0byBzaG93IHRoaXMgbGluZS4KKwkJCSAqLworCQkJc2hvd19saW5lKG9wdCwgYm9sLCBlb2wsIGdzLT5uYW1lLCBsbm8sICctJyk7CisJCX0KKworCW5leHRfbGluZToKKwkJYm9sID0gZW9sICsgMTsKKwkJaWYgKCFsZWZ0KQorCQkJYnJlYWs7CisJCWxlZnQtLTsKKwkJbG5vKys7CisJfQorCisJaWYgKGNvbGxlY3RfaGl0cykKKwkJcmV0dXJuIDA7CisKKwlpZiAob3B0LT5zdGF0dXNfb25seSkKKwkJcmV0dXJuIDA7CisJaWYgKG9wdC0+dW5tYXRjaF9uYW1lX29ubHkpIHsKKwkJLyogV2UgZGlkIG5vdCBzZWUgYW55IGhpdCwgc28gd2Ugd2FudCB0byBzaG93IHRoaXMgKi8KKwkJc2hvd19uYW1lKG9wdCwgZ3MtPm5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisKKwl4ZGlmZl9jbGVhcl9maW5kX2Z1bmMoJnhlY2ZnKTsKKwlvcHQtPnByaXYgPSBOVUxMOworCisJLyogTkVFRFNXT1JLOgorCSAqIFRoZSByZWFsICJncmVwIC1jIGZvbyAqLmMiIGdpdmVzIG1hbnkgImJhci5jOjAiIGxpbmVzLAorCSAqIHdoaWNoIGZlZWxzIG1vc3RseSB1c2VsZXNzIGJ1dCBzb21ldGltZXMgdXNlZnVsLiAgTWF5YmUKKwkgKiBtYWtlIGl0IGFub3RoZXIgb3B0aW9uPyAgRm9yIG5vdyBzdXBwcmVzcyB0aGVtLgorCSAqLworCWlmIChvcHQtPmNvdW50ICYmIGNvdW50KSB7CisJCWNoYXIgYnVmWzMyXTsKKwkJaWYgKG9wdC0+cGF0aG5hbWUpIHsKKwkJCW91dHB1dF9jb2xvcihvcHQsIGdzLT5uYW1lLCBzdHJsZW4oZ3MtPm5hbWUpLAorCQkJCSAgICAgb3B0LT5jb2xvcl9maWxlbmFtZSk7CisJCQlvdXRwdXRfc2VwKG9wdCwgJzonKTsKKwkJfQorCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsIGNvdW50KTsKKwkJb3B0LT5vdXRwdXQob3B0LCBidWYsIHN0cmxlbihidWYpKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAhIWxhc3RfaGl0OworfQorCitzdGF0aWMgdm9pZCBjbHJfaGl0X21hcmtlcihzdHJ1Y3QgZ3JlcF9leHByICp4KQoreworCS8qIEFsbC1oaXQgbWFya2VycyBhcmUgbWVhbmluZ2Z1bCBvbmx5IGF0IHRoZSB2ZXJ5IHRvcCBsZXZlbAorCSAqIE9SIG5vZGUuCisJICovCisJd2hpbGUgKDEpIHsKKwkJeC0+aGl0ID0gMDsKKwkJaWYgKHgtPm5vZGUgIT0gR1JFUF9OT0RFX09SKQorCQkJcmV0dXJuOworCQl4LT51LmJpbmFyeS5sZWZ0LT5oaXQgPSAwOworCQl4ID0geC0+dS5iaW5hcnkucmlnaHQ7CisJfQorfQorCitzdGF0aWMgaW50IGNoa19oaXRfbWFya2VyKHN0cnVjdCBncmVwX2V4cHIgKngpCit7CisJLyogVG9wIGxldmVsIG5vZGVzIGhhdmUgaGl0IG1hcmtlcnMuICBTZWUgaWYgdGhleSBhbGwgYXJlIGhpdHMgKi8KKwl3aGlsZSAoMSkgeworCQlpZiAoeC0+bm9kZSAhPSBHUkVQX05PREVfT1IpCisJCQlyZXR1cm4geC0+aGl0OworCQlpZiAoIXgtPnUuYmluYXJ5LmxlZnQtPmhpdCkKKwkJCXJldHVybiAwOworCQl4ID0geC0+dS5iaW5hcnkucmlnaHQ7CisJfQorfQorCitpbnQgZ3JlcF9zb3VyY2Uoc3RydWN0IGdyZXBfb3B0ICpvcHQsIHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpCit7CisJLyoKKwkgKiB3ZSBkbyBub3QgaGF2ZSB0byBkbyB0aGUgdHdvLXBhc3MgZ3JlcCB3aGVuIHdlIGRvIG5vdCBjaGVjaworCSAqIGJ1ZmZlci13aWRlICJhbGwtbWF0Y2giLgorCSAqLworCWlmICghb3B0LT5hbGxfbWF0Y2gpCisJCXJldHVybiBncmVwX3NvdXJjZV8xKG9wdCwgZ3MsIDApOworCisJLyogT3RoZXJ3aXNlIHRoZSB0b3BsZXZlbCAib3IiIHRlcm1zIGhpdCBhIGJpdCBkaWZmZXJlbnRseS4KKwkgKiBXZSBmaXJzdCBjbGVhciBoaXQgbWFya2VycyBmcm9tIHRoZW0uCisJICovCisJY2xyX2hpdF9tYXJrZXIob3B0LT5wYXR0ZXJuX2V4cHJlc3Npb24pOworCWdyZXBfc291cmNlXzEob3B0LCBncywgMSk7CisKKwlpZiAoIWNoa19oaXRfbWFya2VyKG9wdC0+cGF0dGVybl9leHByZXNzaW9uKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZ3JlcF9zb3VyY2VfMShvcHQsIGdzLCAwKTsKK30KKworaW50IGdyZXBfYnVmZmVyKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlzdHJ1Y3QgZ3JlcF9zb3VyY2UgZ3M7CisJaW50IHI7CisKKwlncmVwX3NvdXJjZV9pbml0KCZncywgR1JFUF9TT1VSQ0VfQlVGLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwlncy5idWYgPSBidWY7CisJZ3Muc2l6ZSA9IHNpemU7CisKKwlyID0gZ3JlcF9zb3VyY2Uob3B0LCAmZ3MpOworCisJZ3JlcF9zb3VyY2VfY2xlYXIoJmdzKTsKKwlyZXR1cm4gcjsKK30KKwordm9pZCBncmVwX3NvdXJjZV9pbml0KHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MsIGVudW0gZ3JlcF9zb3VyY2VfdHlwZSB0eXBlLAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXRoLAorCQkgICAgICBjb25zdCB2b2lkICppZGVudGlmaWVyKQoreworCWdzLT50eXBlID0gdHlwZTsKKwlncy0+bmFtZSA9IHhzdHJkdXBfb3JfbnVsbChuYW1lKTsKKwlncy0+cGF0aCA9IHhzdHJkdXBfb3JfbnVsbChwYXRoKTsKKwlncy0+YnVmID0gTlVMTDsKKwlncy0+c2l6ZSA9IDA7CisJZ3MtPmRyaXZlciA9IE5VTEw7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEdSRVBfU09VUkNFX0ZJTEU6CisJCWdzLT5pZGVudGlmaWVyID0geHN0cmR1cChpZGVudGlmaWVyKTsKKwkJYnJlYWs7CisJY2FzZSBHUkVQX1NPVVJDRV9TSEExOgorCQlncy0+aWRlbnRpZmllciA9IHhtYWxsb2MoMjApOworCQloYXNoY3B5KGdzLT5pZGVudGlmaWVyLCBpZGVudGlmaWVyKTsKKwkJYnJlYWs7CisJY2FzZSBHUkVQX1NPVVJDRV9CVUY6CisJCWdzLT5pZGVudGlmaWVyID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgZ3JlcF9zb3VyY2VfY2xlYXIoc3RydWN0IGdyZXBfc291cmNlICpncykKK3sKKwlmcmVlKGdzLT5uYW1lKTsKKwlncy0+bmFtZSA9IE5VTEw7CisJZnJlZShncy0+cGF0aCk7CisJZ3MtPnBhdGggPSBOVUxMOworCWZyZWUoZ3MtPmlkZW50aWZpZXIpOworCWdzLT5pZGVudGlmaWVyID0gTlVMTDsKKwlncmVwX3NvdXJjZV9jbGVhcl9kYXRhKGdzKTsKK30KKwordm9pZCBncmVwX3NvdXJjZV9jbGVhcl9kYXRhKHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpCit7CisJc3dpdGNoIChncy0+dHlwZSkgeworCWNhc2UgR1JFUF9TT1VSQ0VfRklMRToKKwljYXNlIEdSRVBfU09VUkNFX1NIQTE6CisJCWZyZWUoZ3MtPmJ1Zik7CisJCWdzLT5idWYgPSBOVUxMOworCQlncy0+c2l6ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgR1JFUF9TT1VSQ0VfQlVGOgorCQkvKiBsZWF2ZSB1c2VyLXByb3ZpZGVkIGJ1ZiBpbnRhY3QgKi8KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGdyZXBfc291cmNlX2xvYWRfc2hhMShzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCWdyZXBfcmVhZF9sb2NrKCk7CisJZ3MtPmJ1ZiA9IHJlYWRfc2hhMV9maWxlKGdzLT5pZGVudGlmaWVyLCAmdHlwZSwgJmdzLT5zaXplKTsKKwlncmVwX3JlYWRfdW5sb2NrKCk7CisKKwlpZiAoIWdzLT5idWYpCisJCXJldHVybiBlcnJvcihfKCInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIpLAorCQkJICAgICBncy0+bmFtZSwKKwkJCSAgICAgc2hhMV90b19oZXgoZ3MtPmlkZW50aWZpZXIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncmVwX3NvdXJjZV9sb2FkX2ZpbGUoc3RydWN0IGdyZXBfc291cmNlICpncykKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZSA9IGdzLT5pZGVudGlmaWVyOworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgKmRhdGE7CisJc2l6ZV90IHNpemU7CisJaW50IGk7CisKKwlpZiAobHN0YXQoZmlsZW5hbWUsICZzdCkgPCAwKSB7CisJZXJyX3JldDoKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCWVycm9yKF8oIiclcyc6ICVzIiksIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIC0xOworCXNpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCWkgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisJaWYgKGkgPCAwKQorCQlnb3RvIGVycl9yZXQ7CisJZGF0YSA9IHhtYWxsb2Moc2l6ZSArIDEpOworCWlmIChzdC5zdF9zaXplICE9IHJlYWRfaW5fZnVsbChpLCBkYXRhLCBzaXplKSkgeworCQllcnJvcihfKCInJXMnOiBzaG9ydCByZWFkICVzIiksIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQljbG9zZShpKTsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuIC0xOworCX0KKwljbG9zZShpKTsKKwlkYXRhW3NpemVdID0gMDsKKworCWdzLT5idWYgPSBkYXRhOworCWdzLT5zaXplID0gc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncmVwX3NvdXJjZV9sb2FkKHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpCit7CisJaWYgKGdzLT5idWYpCisJCXJldHVybiAwOworCisJc3dpdGNoIChncy0+dHlwZSkgeworCWNhc2UgR1JFUF9TT1VSQ0VfRklMRToKKwkJcmV0dXJuIGdyZXBfc291cmNlX2xvYWRfZmlsZShncyk7CisJY2FzZSBHUkVQX1NPVVJDRV9TSEExOgorCQlyZXR1cm4gZ3JlcF9zb3VyY2VfbG9hZF9zaGExKGdzKTsKKwljYXNlIEdSRVBfU09VUkNFX0JVRjoKKwkJcmV0dXJuIGdzLT5idWYgPyAwIDogLTE7CisJfQorCWRpZSgiQlVHOiBpbnZhbGlkIGdyZXBfc291cmNlIHR5cGUiKTsKK30KKwordm9pZCBncmVwX3NvdXJjZV9sb2FkX2RyaXZlcihzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKQoreworCWlmIChncy0+ZHJpdmVyKQorCQlyZXR1cm47CisKKwlncmVwX2F0dHJfbG9jaygpOworCWlmIChncy0+cGF0aCkKKwkJZ3MtPmRyaXZlciA9IHVzZXJkaWZmX2ZpbmRfYnlfcGF0aChncy0+cGF0aCk7CisJaWYgKCFncy0+ZHJpdmVyKQorCQlncy0+ZHJpdmVyID0gdXNlcmRpZmZfZmluZF9ieV9uYW1lKCJkZWZhdWx0Iik7CisJZ3JlcF9hdHRyX3VubG9jaygpOworfQorCitzdGF0aWMgaW50IGdyZXBfc291cmNlX2lzX2JpbmFyeShzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKQoreworCWdyZXBfc291cmNlX2xvYWRfZHJpdmVyKGdzKTsKKwlpZiAoZ3MtPmRyaXZlci0+YmluYXJ5ICE9IC0xKQorCQlyZXR1cm4gZ3MtPmRyaXZlci0+YmluYXJ5OworCisJaWYgKCFncmVwX3NvdXJjZV9sb2FkKGdzKSkKKwkJcmV0dXJuIGJ1ZmZlcl9pc19iaW5hcnkoZ3MtPmJ1ZiwgZ3MtPnNpemUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9ncmVwLmggYi9ncmVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmMTk3YQotLS0gL2Rldi9udWxsCisrKyBiL2dyZXAuaApAQCAtMCwwICsxLDIxMyBAQAorI2lmbmRlZiBHUkVQX0gKKyNkZWZpbmUgR1JFUF9ICisjaW5jbHVkZSAiY29sb3IuaCIKKyNpZmRlZiBVU0VfTElCUENSRQorI2luY2x1ZGUgPHBjcmUuaD4KKyNlbHNlCit0eXBlZGVmIGludCBwY3JlOwordHlwZWRlZiBpbnQgcGNyZV9leHRyYTsKKyNlbmRpZgorI2luY2x1ZGUgImt3c2V0LmgiCisjaW5jbHVkZSAidGhyZWFkLXV0aWxzLmgiCisjaW5jbHVkZSAidXNlcmRpZmYuaCIKKworZW51bSBncmVwX3BhdF90b2tlbiB7CisJR1JFUF9QQVRURVJOLAorCUdSRVBfUEFUVEVSTl9IRUFELAorCUdSRVBfUEFUVEVSTl9CT0RZLAorCUdSRVBfQU5ELAorCUdSRVBfT1BFTl9QQVJFTiwKKwlHUkVQX0NMT1NFX1BBUkVOLAorCUdSRVBfTk9ULAorCUdSRVBfT1IKK307CisKK2VudW0gZ3JlcF9jb250ZXh0IHsKKwlHUkVQX0NPTlRFWFRfSEVBRCwKKwlHUkVQX0NPTlRFWFRfQk9EWQorfTsKKworZW51bSBncmVwX2hlYWRlcl9maWVsZCB7CisJR1JFUF9IRUFERVJfRklFTERfTUlOID0gMCwKKwlHUkVQX0hFQURFUl9BVVRIT1IgPSBHUkVQX0hFQURFUl9GSUVMRF9NSU4sCisJR1JFUF9IRUFERVJfQ09NTUlUVEVSLAorCUdSRVBfSEVBREVSX1JFRkxPRywKKworCS8qIE11c3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgZW51bSAqLworCUdSRVBfSEVBREVSX0ZJRUxEX01BWAorfTsKKworc3RydWN0IGdyZXBfcGF0IHsKKwlzdHJ1Y3QgZ3JlcF9wYXQgKm5leHQ7CisJY29uc3QgY2hhciAqb3JpZ2luOworCWludCBubzsKKwllbnVtIGdyZXBfcGF0X3Rva2VuIHRva2VuOworCWNoYXIgKnBhdHRlcm47CisJc2l6ZV90IHBhdHRlcm5sZW47CisJZW51bSBncmVwX2hlYWRlcl9maWVsZCBmaWVsZDsKKwlyZWdleF90IHJlZ2V4cDsKKwlwY3JlICpwY3JlX3JlZ2V4cDsKKwlwY3JlX2V4dHJhICpwY3JlX2V4dHJhX2luZm87CisJa3dzZXRfdCBrd3M7CisJdW5zaWduZWQgZml4ZWQ6MTsKKwl1bnNpZ25lZCBpZ25vcmVfY2FzZToxOworCXVuc2lnbmVkIHdvcmRfcmVnZXhwOjE7Cit9OworCitlbnVtIGdyZXBfZXhwcl9ub2RlIHsKKwlHUkVQX05PREVfQVRPTSwKKwlHUkVQX05PREVfTk9ULAorCUdSRVBfTk9ERV9BTkQsCisJR1JFUF9OT0RFX1RSVUUsCisJR1JFUF9OT0RFX09SCit9OworCitlbnVtIGdyZXBfcGF0dGVybl90eXBlIHsKKwlHUkVQX1BBVFRFUk5fVFlQRV9VTlNQRUNJRklFRCA9IDAsCisJR1JFUF9QQVRURVJOX1RZUEVfQlJFLAorCUdSRVBfUEFUVEVSTl9UWVBFX0VSRSwKKwlHUkVQX1BBVFRFUk5fVFlQRV9GSVhFRCwKKwlHUkVQX1BBVFRFUk5fVFlQRV9QQ1JFCit9OworCitzdHJ1Y3QgZ3JlcF9leHByIHsKKwllbnVtIGdyZXBfZXhwcl9ub2RlIG5vZGU7CisJdW5zaWduZWQgaGl0OworCXVuaW9uIHsKKwkJc3RydWN0IGdyZXBfcGF0ICphdG9tOworCQlzdHJ1Y3QgZ3JlcF9leHByICp1bmFyeTsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBncmVwX2V4cHIgKmxlZnQ7CisJCQlzdHJ1Y3QgZ3JlcF9leHByICpyaWdodDsKKwkJfSBiaW5hcnk7CisJfSB1OworfTsKKworc3RydWN0IGdyZXBfb3B0IHsKKwlzdHJ1Y3QgZ3JlcF9wYXQgKnBhdHRlcm5fbGlzdDsKKwlzdHJ1Y3QgZ3JlcF9wYXQgKipwYXR0ZXJuX3RhaWw7CisJc3RydWN0IGdyZXBfcGF0ICpoZWFkZXJfbGlzdDsKKwlzdHJ1Y3QgZ3JlcF9wYXQgKipoZWFkZXJfdGFpbDsKKwlzdHJ1Y3QgZ3JlcF9leHByICpwYXR0ZXJuX2V4cHJlc3Npb247CisJY29uc3QgY2hhciAqcHJlZml4OworCWludCBwcmVmaXhfbGVuZ3RoOworCXJlZ2V4X3QgcmVnZXhwOworCWludCBsaW5lbnVtOworCWludCBpbnZlcnQ7CisJaW50IGlnbm9yZV9jYXNlOworCWludCBzdGF0dXNfb25seTsKKwlpbnQgbmFtZV9vbmx5OworCWludCB1bm1hdGNoX25hbWVfb25seTsKKwlpbnQgY291bnQ7CisJaW50IHdvcmRfcmVnZXhwOworCWludCBmaXhlZDsKKwlpbnQgYWxsX21hdGNoOworCWludCBkZWJ1ZzsKKyNkZWZpbmUgR1JFUF9CSU5BUllfREVGQVVMVAkwCisjZGVmaW5lIEdSRVBfQklOQVJZX05PTUFUQ0gJMQorI2RlZmluZSBHUkVQX0JJTkFSWV9URVhUCTIKKwlpbnQgYmluYXJ5OworCWludCBhbGxvd190ZXh0Y29udjsKKwlpbnQgZXh0ZW5kZWQ7CisJaW50IHVzZV9yZWZsb2dfZmlsdGVyOworCWludCBwY3JlOworCWludCByZWxhdGl2ZTsKKwlpbnQgcGF0aG5hbWU7CisJaW50IG51bGxfZm9sbG93aW5nX25hbWU7CisJaW50IGNvbG9yOworCWludCBtYXhfZGVwdGg7CisJaW50IGZ1bmNuYW1lOworCWludCBmdW5jYm9keTsKKwlpbnQgZXh0ZW5kZWRfcmVnZXhwX29wdGlvbjsKKwlpbnQgcGF0dGVybl90eXBlX29wdGlvbjsKKwljaGFyIGNvbG9yX2NvbnRleHRbQ09MT1JfTUFYTEVOXTsKKwljaGFyIGNvbG9yX2ZpbGVuYW1lW0NPTE9SX01BWExFTl07CisJY2hhciBjb2xvcl9mdW5jdGlvbltDT0xPUl9NQVhMRU5dOworCWNoYXIgY29sb3JfbGluZW5vW0NPTE9SX01BWExFTl07CisJY2hhciBjb2xvcl9tYXRjaF9jb250ZXh0W0NPTE9SX01BWExFTl07CisJY2hhciBjb2xvcl9tYXRjaF9zZWxlY3RlZFtDT0xPUl9NQVhMRU5dOworCWNoYXIgY29sb3Jfc2VsZWN0ZWRbQ09MT1JfTUFYTEVOXTsKKwljaGFyIGNvbG9yX3NlcFtDT0xPUl9NQVhMRU5dOworCWludCByZWdmbGFnczsKKwl1bnNpZ25lZCBwcmVfY29udGV4dDsKKwl1bnNpZ25lZCBwb3N0X2NvbnRleHQ7CisJdW5zaWduZWQgbGFzdF9zaG93bjsKKwlpbnQgc2hvd19odW5rX21hcms7CisJaW50IGZpbGVfYnJlYWs7CisJaW50IGhlYWRpbmc7CisJdm9pZCAqcHJpdjsKKworCXZvaWQgKCpvdXRwdXQpKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisJdm9pZCAqb3V0cHV0X3ByaXY7Cit9OworCitleHRlcm4gdm9pZCBpbml0X2dyZXBfZGVmYXVsdHModm9pZCk7CitleHRlcm4gaW50IGdyZXBfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKik7CitleHRlcm4gdm9pZCBncmVwX2luaXQoc3RydWN0IGdyZXBfb3B0ICosIGNvbnN0IGNoYXIgKnByZWZpeCk7Cit2b2lkIGdyZXBfc2V0X3BhdHRlcm5fdHlwZV9vcHRpb24oZW51bSBncmVwX3BhdHRlcm5fdHlwZSwgc3RydWN0IGdyZXBfb3B0ICpvcHQpOwordm9pZCBncmVwX2NvbW1pdF9wYXR0ZXJuX3R5cGUoZW51bSBncmVwX3BhdHRlcm5fdHlwZSwgc3RydWN0IGdyZXBfb3B0ICpvcHQpOworCitleHRlcm4gdm9pZCBhcHBlbmRfZ3JlcF9wYXQoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNvbnN0IGNoYXIgKnBhdCwgc2l6ZV90IHBhdGxlbiwgY29uc3QgY2hhciAqb3JpZ2luLCBpbnQgbm8sIGVudW0gZ3JlcF9wYXRfdG9rZW4gdCk7CitleHRlcm4gdm9pZCBhcHBlbmRfZ3JlcF9wYXR0ZXJuKHN0cnVjdCBncmVwX29wdCAqb3B0LCBjb25zdCBjaGFyICpwYXQsIGNvbnN0IGNoYXIgKm9yaWdpbiwgaW50IG5vLCBlbnVtIGdyZXBfcGF0X3Rva2VuIHQpOworZXh0ZXJuIHZvaWQgYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oc3RydWN0IGdyZXBfb3B0ICosIGVudW0gZ3JlcF9oZWFkZXJfZmllbGQsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBjb21waWxlX2dyZXBfcGF0dGVybnMoc3RydWN0IGdyZXBfb3B0ICpvcHQpOworZXh0ZXJuIHZvaWQgZnJlZV9ncmVwX3BhdHRlcm5zKHN0cnVjdCBncmVwX29wdCAqb3B0KTsKK2V4dGVybiBpbnQgZ3JlcF9idWZmZXIoc3RydWN0IGdyZXBfb3B0ICpvcHQsIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworc3RydWN0IGdyZXBfc291cmNlIHsKKwljaGFyICpuYW1lOworCisJZW51bSBncmVwX3NvdXJjZV90eXBlIHsKKwkJR1JFUF9TT1VSQ0VfU0hBMSwKKwkJR1JFUF9TT1VSQ0VfRklMRSwKKwkJR1JFUF9TT1VSQ0VfQlVGLAorCX0gdHlwZTsKKwl2b2lkICppZGVudGlmaWVyOworCisJY2hhciAqYnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCWNoYXIgKnBhdGg7IC8qIGZvciBhdHRyaWJ1dGUgbG9va3VwcyAqLworCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRyaXZlcjsKK307CisKK3ZvaWQgZ3JlcF9zb3VyY2VfaW5pdChzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzLCBlbnVtIGdyZXBfc291cmNlX3R5cGUgdHlwZSwKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICAgY29uc3Qgdm9pZCAqaWRlbnRpZmllcik7Cit2b2lkIGdyZXBfc291cmNlX2NsZWFyX2RhdGEoc3RydWN0IGdyZXBfc291cmNlICpncyk7Cit2b2lkIGdyZXBfc291cmNlX2NsZWFyKHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpOwordm9pZCBncmVwX3NvdXJjZV9sb2FkX2RyaXZlcihzdHJ1Y3QgZ3JlcF9zb3VyY2UgKmdzKTsKKworCitpbnQgZ3JlcF9zb3VyY2Uoc3RydWN0IGdyZXBfb3B0ICpvcHQsIHN0cnVjdCBncmVwX3NvdXJjZSAqZ3MpOworCitleHRlcm4gc3RydWN0IGdyZXBfb3B0ICpncmVwX29wdF9kdXAoY29uc3Qgc3RydWN0IGdyZXBfb3B0ICpvcHQpOworZXh0ZXJuIGludCBncmVwX3RocmVhZHNfb2soY29uc3Qgc3RydWN0IGdyZXBfb3B0ICpvcHQpOworCisjaWZuZGVmIE5PX1BUSFJFQURTCisvKgorICogTXV0ZXggdXNlZCBhcm91bmQgYWNjZXNzIHRvIHRoZSBhdHRyaWJ1dGVzIG1hY2hpbmVyeSBpZgorICogb3B0LT51c2VfdGhyZWFkcy4gIE11c3QgYmUgaW5pdGlhbGl6ZWQvZGVzdHJveWVkIGJ5IGNhbGxlcnMhCisgKi8KK2V4dGVybiBpbnQgZ3JlcF91c2VfbG9ja3M7CitleHRlcm4gcHRocmVhZF9tdXRleF90IGdyZXBfYXR0cl9tdXRleDsKK2V4dGVybiBwdGhyZWFkX211dGV4X3QgZ3JlcF9yZWFkX211dGV4OworCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JlcF9yZWFkX2xvY2sodm9pZCkKK3sKKwlpZiAoZ3JlcF91c2VfbG9ja3MpCisJCXB0aHJlYWRfbXV0ZXhfbG9jaygmZ3JlcF9yZWFkX211dGV4KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyZXBfcmVhZF91bmxvY2sodm9pZCkKK3sKKwlpZiAoZ3JlcF91c2VfbG9ja3MpCisJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZncmVwX3JlYWRfbXV0ZXgpOworfQorCisjZWxzZQorI2RlZmluZSBncmVwX3JlYWRfbG9jaygpCisjZGVmaW5lIGdyZXBfcmVhZF91bmxvY2soKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaGFzaG1hcC5jIGIvaGFzaG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTM4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9oYXNobWFwLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBHZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIGhhc2gtYmFzZWQga2V5IHZhbHVlIG1hcHBpbmdzLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJoYXNobWFwLmgiCisKKyNkZWZpbmUgRk5WMzJfQkFTRSAoKHVuc2lnbmVkIGludCkgMHg4MTFjOWRjNSkKKyNkZWZpbmUgRk5WMzJfUFJJTUUgKCh1bnNpZ25lZCBpbnQpIDB4MDEwMDAxOTMpCisKK3Vuc2lnbmVkIGludCBzdHJoYXNoKGNvbnN0IGNoYXIgKnN0cikKK3sKKwl1bnNpZ25lZCBpbnQgYywgaGFzaCA9IEZOVjMyX0JBU0U7CisJd2hpbGUgKChjID0gKHVuc2lnbmVkIGNoYXIpICpzdHIrKykpCisJCWhhc2ggPSAoaGFzaCAqIEZOVjMyX1BSSU1FKSBeIGM7CisJcmV0dXJuIGhhc2g7Cit9CisKK3Vuc2lnbmVkIGludCBzdHJpaGFzaChjb25zdCBjaGFyICpzdHIpCit7CisJdW5zaWduZWQgaW50IGMsIGhhc2ggPSBGTlYzMl9CQVNFOworCXdoaWxlICgoYyA9ICh1bnNpZ25lZCBjaGFyKSAqc3RyKyspKSB7CisJCWlmIChjID49ICdhJyAmJiBjIDw9ICd6JykKKwkJCWMgLT0gJ2EnIC0gJ0EnOworCQloYXNoID0gKGhhc2ggKiBGTlYzMl9QUklNRSkgXiBjOworCX0KKwlyZXR1cm4gaGFzaDsKK30KKwordW5zaWduZWQgaW50IG1lbWhhc2goY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXVuc2lnbmVkIGludCBoYXNoID0gRk5WMzJfQkFTRTsKKwl1bnNpZ25lZCBjaGFyICp1Y2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopIGJ1ZjsKKwl3aGlsZSAobGVuLS0pIHsKKwkJdW5zaWduZWQgaW50IGMgPSAqdWNidWYrKzsKKwkJaGFzaCA9IChoYXNoICogRk5WMzJfUFJJTUUpIF4gYzsKKwl9CisJcmV0dXJuIGhhc2g7Cit9CisKK3Vuc2lnbmVkIGludCBtZW1paGFzaChjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJdW5zaWduZWQgaW50IGhhc2ggPSBGTlYzMl9CQVNFOworCXVuc2lnbmVkIGNoYXIgKnVjYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgYnVmOworCXdoaWxlIChsZW4tLSkgeworCQl1bnNpZ25lZCBpbnQgYyA9ICp1Y2J1ZisrOworCQlpZiAoYyA+PSAnYScgJiYgYyA8PSAneicpCisJCQljIC09ICdhJyAtICdBJzsKKwkJaGFzaCA9IChoYXNoICogRk5WMzJfUFJJTUUpIF4gYzsKKwl9CisJcmV0dXJuIGhhc2g7Cit9CisKKyNkZWZpbmUgSEFTSE1BUF9JTklUSUFMX1NJWkUgNjQKKy8qIGdyb3cgLyBzaHJpbmsgYnkgMl4yICovCisjZGVmaW5lIEhBU0hNQVBfUkVTSVpFX0JJVFMgMgorLyogbG9hZCBmYWN0b3IgaW4gcGVyY2VudCAqLworI2RlZmluZSBIQVNITUFQX0xPQURfRkFDVE9SIDgwCisKK3N0YXRpYyB2b2lkIGFsbG9jX3RhYmxlKHN0cnVjdCBoYXNobWFwICptYXAsIHVuc2lnbmVkIGludCBzaXplKQoreworCW1hcC0+dGFibGVzaXplID0gc2l6ZTsKKwltYXAtPnRhYmxlID0geGNhbGxvYyhzaXplLCBzaXplb2Yoc3RydWN0IGhhc2htYXBfZW50cnkgKikpOworCisJLyogY2FsY3VsYXRlIHJlc2l6ZSB0aHJlc2hvbGRzIGZvciBuZXcgc2l6ZSAqLworCW1hcC0+Z3Jvd19hdCA9ICh1bnNpZ25lZCBpbnQpICgodWludDY0X3QpIHNpemUgKiBIQVNITUFQX0xPQURfRkFDVE9SIC8gMTAwKTsKKwlpZiAoc2l6ZSA8PSBIQVNITUFQX0lOSVRJQUxfU0laRSkKKwkJbWFwLT5zaHJpbmtfYXQgPSAwOworCWVsc2UKKwkJLyoKKwkJICogVGhlIHNocmluay10aHJlc2hvbGQgbXVzdCBiZSBzbGlnaHRseSBzbWFsbGVyIHRoYW4KKwkJICogKGdyb3ctdGhyZXNob2xkIC8gcmVzaXplLWZhY3RvcikgdG8gcHJldmVudCBlcnJhdGljIHJlc2l6aW5nLAorCQkgKiB0aHVzIHdlIGRpdmlkZSBieSAocmVzaXplLWZhY3RvciArIDEpLgorCQkgKi8KKwkJbWFwLT5zaHJpbmtfYXQgPSBtYXAtPmdyb3dfYXQgLyAoKDEgPDwgSEFTSE1BUF9SRVNJWkVfQklUUykgKyAxKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZW50cnlfZXF1YWxzKGNvbnN0IHN0cnVjdCBoYXNobWFwICptYXAsCisJCWNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICplMSwgY29uc3Qgc3RydWN0IGhhc2htYXBfZW50cnkgKmUyLAorCQljb25zdCB2b2lkICprZXlkYXRhKQoreworCXJldHVybiAoZTEgPT0gZTIpIHx8IChlMS0+aGFzaCA9PSBlMi0+aGFzaCAmJiAhbWFwLT5jbXBmbihlMSwgZTIsIGtleWRhdGEpKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnVja2V0KGNvbnN0IHN0cnVjdCBoYXNobWFwICptYXAsCisJCWNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICprZXkpCit7CisJcmV0dXJuIGtleS0+aGFzaCAmIChtYXAtPnRhYmxlc2l6ZSAtIDEpOworfQorCitzdGF0aWMgdm9pZCByZWhhc2goc3RydWN0IGhhc2htYXAgKm1hcCwgdW5zaWduZWQgaW50IG5ld3NpemUpCit7CisJdW5zaWduZWQgaW50IGksIG9sZHNpemUgPSBtYXAtPnRhYmxlc2l6ZTsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqKm9sZHRhYmxlID0gbWFwLT50YWJsZTsKKworCWFsbG9jX3RhYmxlKG1hcCwgbmV3c2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IG9sZHNpemU7IGkrKykgeworCQlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZSA9IG9sZHRhYmxlW2ldOworCQl3aGlsZSAoZSkgeworCQkJc3RydWN0IGhhc2htYXBfZW50cnkgKm5leHQgPSBlLT5uZXh0OworCQkJdW5zaWduZWQgaW50IGIgPSBidWNrZXQobWFwLCBlKTsKKwkJCWUtPm5leHQgPSBtYXAtPnRhYmxlW2JdOworCQkJbWFwLT50YWJsZVtiXSA9IGU7CisJCQllID0gbmV4dDsKKwkJfQorCX0KKwlmcmVlKG9sZHRhYmxlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqKmZpbmRfZW50cnlfcHRyKGNvbnN0IHN0cnVjdCBoYXNobWFwICptYXAsCisJCWNvbnN0IHN0cnVjdCBoYXNobWFwX2VudHJ5ICprZXksIGNvbnN0IHZvaWQgKmtleWRhdGEpCit7CisJc3RydWN0IGhhc2htYXBfZW50cnkgKiplID0gJm1hcC0+dGFibGVbYnVja2V0KG1hcCwga2V5KV07CisJd2hpbGUgKCplICYmICFlbnRyeV9lcXVhbHMobWFwLCAqZSwga2V5LCBrZXlkYXRhKSkKKwkJZSA9ICYoKmUpLT5uZXh0OworCXJldHVybiBlOworfQorCitzdGF0aWMgaW50IGFsd2F5c19lcXVhbChjb25zdCB2b2lkICp1bnVzZWQxLCBjb25zdCB2b2lkICp1bnVzZWQyLCBjb25zdCB2b2lkICp1bnVzZWQzKQoreworCXJldHVybiAwOworfQorCit2b2lkIGhhc2htYXBfaW5pdChzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBoYXNobWFwX2NtcF9mbiBlcXVhbHNfZnVuY3Rpb24sCisJCXNpemVfdCBpbml0aWFsX3NpemUpCit7CisJdW5zaWduZWQgaW50IHNpemUgPSBIQVNITUFQX0lOSVRJQUxfU0laRTsKKwltYXAtPnNpemUgPSAwOworCW1hcC0+Y21wZm4gPSBlcXVhbHNfZnVuY3Rpb24gPyBlcXVhbHNfZnVuY3Rpb24gOiBhbHdheXNfZXF1YWw7CisKKwkvKiBjYWxjdWxhdGUgaW5pdGlhbCB0YWJsZSBzaXplIGFuZCBhbGxvY2F0ZSB0aGUgdGFibGUgKi8KKwlpbml0aWFsX3NpemUgPSAodW5zaWduZWQgaW50KSAoKHVpbnQ2NF90KSBpbml0aWFsX3NpemUgKiAxMDAKKwkJCS8gSEFTSE1BUF9MT0FEX0ZBQ1RPUik7CisJd2hpbGUgKGluaXRpYWxfc2l6ZSA+IHNpemUpCisJCXNpemUgPDw9IEhBU0hNQVBfUkVTSVpFX0JJVFM7CisJYWxsb2NfdGFibGUobWFwLCBzaXplKTsKK30KKwordm9pZCBoYXNobWFwX2ZyZWUoc3RydWN0IGhhc2htYXAgKm1hcCwgaW50IGZyZWVfZW50cmllcykKK3sKKwlpZiAoIW1hcCB8fCAhbWFwLT50YWJsZSkKKwkJcmV0dXJuOworCWlmIChmcmVlX2VudHJpZXMpIHsKKwkJc3RydWN0IGhhc2htYXBfaXRlciBpdGVyOworCQlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZTsKKwkJaGFzaG1hcF9pdGVyX2luaXQobWFwLCAmaXRlcik7CisJCXdoaWxlICgoZSA9IGhhc2htYXBfaXRlcl9uZXh0KCZpdGVyKSkpCisJCQlmcmVlKGUpOworCX0KKwlmcmVlKG1hcC0+dGFibGUpOworCW1lbXNldChtYXAsIDAsIHNpemVvZigqbWFwKSk7Cit9CisKK3ZvaWQgKmhhc2htYXBfZ2V0KGNvbnN0IHN0cnVjdCBoYXNobWFwICptYXAsIGNvbnN0IHZvaWQgKmtleSwgY29uc3Qgdm9pZCAqa2V5ZGF0YSkKK3sKKwlyZXR1cm4gKmZpbmRfZW50cnlfcHRyKG1hcCwga2V5LCBrZXlkYXRhKTsKK30KKwordm9pZCAqaGFzaG1hcF9nZXRfbmV4dChjb25zdCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBjb25zdCB2b2lkICplbnRyeSkKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqZSA9ICgoc3RydWN0IGhhc2htYXBfZW50cnkgKikgZW50cnkpLT5uZXh0OworCWZvciAoOyBlOyBlID0gZS0+bmV4dCkKKwkJaWYgKGVudHJ5X2VxdWFscyhtYXAsIGVudHJ5LCBlLCBOVUxMKSkKKwkJCXJldHVybiBlOworCXJldHVybiBOVUxMOworfQorCit2b2lkIGhhc2htYXBfYWRkKHN0cnVjdCBoYXNobWFwICptYXAsIHZvaWQgKmVudHJ5KQoreworCXVuc2lnbmVkIGludCBiID0gYnVja2V0KG1hcCwgZW50cnkpOworCisJLyogYWRkIGVudHJ5ICovCisJKChzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqKSBlbnRyeSktPm5leHQgPSBtYXAtPnRhYmxlW2JdOworCW1hcC0+dGFibGVbYl0gPSBlbnRyeTsKKworCS8qIGZpeCBzaXplIGFuZCByZWhhc2ggaWYgYXBwcm9wcmlhdGUgKi8KKwltYXAtPnNpemUrKzsKKwlpZiAobWFwLT5zaXplID4gbWFwLT5ncm93X2F0KQorCQlyZWhhc2gobWFwLCBtYXAtPnRhYmxlc2l6ZSA8PCBIQVNITUFQX1JFU0laRV9CSVRTKTsKK30KKwordm9pZCAqaGFzaG1hcF9yZW1vdmUoc3RydWN0IGhhc2htYXAgKm1hcCwgY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICprZXlkYXRhKQoreworCXN0cnVjdCBoYXNobWFwX2VudHJ5ICpvbGQ7CisJc3RydWN0IGhhc2htYXBfZW50cnkgKiplID0gZmluZF9lbnRyeV9wdHIobWFwLCBrZXksIGtleWRhdGEpOworCWlmICghKmUpCisJCXJldHVybiBOVUxMOworCisJLyogcmVtb3ZlIGV4aXN0aW5nIGVudHJ5ICovCisJb2xkID0gKmU7CisJKmUgPSBvbGQtPm5leHQ7CisJb2xkLT5uZXh0ID0gTlVMTDsKKworCS8qIGZpeCBzaXplIGFuZCByZWhhc2ggaWYgYXBwcm9wcmlhdGUgKi8KKwltYXAtPnNpemUtLTsKKwlpZiAobWFwLT5zaXplIDwgbWFwLT5zaHJpbmtfYXQpCisJCXJlaGFzaChtYXAsIG1hcC0+dGFibGVzaXplID4+IEhBU0hNQVBfUkVTSVpFX0JJVFMpOworCXJldHVybiBvbGQ7Cit9CisKK3ZvaWQgKmhhc2htYXBfcHV0KHN0cnVjdCBoYXNobWFwICptYXAsIHZvaWQgKmVudHJ5KQoreworCXN0cnVjdCBoYXNobWFwX2VudHJ5ICpvbGQgPSBoYXNobWFwX3JlbW92ZShtYXAsIGVudHJ5LCBOVUxMKTsKKwloYXNobWFwX2FkZChtYXAsIGVudHJ5KTsKKwlyZXR1cm4gb2xkOworfQorCit2b2lkIGhhc2htYXBfaXRlcl9pbml0KHN0cnVjdCBoYXNobWFwICptYXAsIHN0cnVjdCBoYXNobWFwX2l0ZXIgKml0ZXIpCit7CisJaXRlci0+bWFwID0gbWFwOworCWl0ZXItPnRhYmxlcG9zID0gMDsKKwlpdGVyLT5uZXh0ID0gTlVMTDsKK30KKwordm9pZCAqaGFzaG1hcF9pdGVyX25leHQoc3RydWN0IGhhc2htYXBfaXRlciAqaXRlcikKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqY3VycmVudCA9IGl0ZXItPm5leHQ7CisJZm9yICg7OykgeworCQlpZiAoY3VycmVudCkgeworCQkJaXRlci0+bmV4dCA9IGN1cnJlbnQtPm5leHQ7CisJCQlyZXR1cm4gY3VycmVudDsKKwkJfQorCisJCWlmIChpdGVyLT50YWJsZXBvcyA+PSBpdGVyLT5tYXAtPnRhYmxlc2l6ZSkKKwkJCXJldHVybiBOVUxMOworCisJCWN1cnJlbnQgPSBpdGVyLT5tYXAtPnRhYmxlW2l0ZXItPnRhYmxlcG9zKytdOworCX0KK30KKworc3RydWN0IHBvb2xfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwlzaXplX3QgbGVuOworCXVuc2lnbmVkIGNoYXIgZGF0YVtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBpbnQgcG9vbF9lbnRyeV9jbXAoY29uc3Qgc3RydWN0IHBvb2xfZW50cnkgKmUxLAorCQkJICBjb25zdCBzdHJ1Y3QgcG9vbF9lbnRyeSAqZTIsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleWRhdGEpCit7CisJcmV0dXJuIGUxLT5kYXRhICE9IGtleWRhdGEgJiYKKwkgICAgICAgKGUxLT5sZW4gIT0gZTItPmxlbiB8fCBtZW1jbXAoZTEtPmRhdGEsIGtleWRhdGEsIGUxLT5sZW4pKTsKK30KKworY29uc3Qgdm9pZCAqbWVtaW50ZXJuKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJc3RhdGljIHN0cnVjdCBoYXNobWFwIG1hcDsKKwlzdHJ1Y3QgcG9vbF9lbnRyeSBrZXksICplOworCisJLyogaW5pdGlhbGl6ZSBzdHJpbmcgcG9vbCBoYXNobWFwICovCisJaWYgKCFtYXAudGFibGVzaXplKQorCQloYXNobWFwX2luaXQoJm1hcCwgKGhhc2htYXBfY21wX2ZuKSBwb29sX2VudHJ5X2NtcCwgMCk7CisKKwkvKiBsb29rdXAgaW50ZXJuZWQgc3RyaW5nIGluIHBvb2wgKi8KKwloYXNobWFwX2VudHJ5X2luaXQoJmtleSwgbWVtaGFzaChkYXRhLCBsZW4pKTsKKwlrZXkubGVuID0gbGVuOworCWUgPSBoYXNobWFwX2dldCgmbWFwLCAma2V5LCBkYXRhKTsKKwlpZiAoIWUpIHsKKwkJLyogbm90IGZvdW5kOiBjcmVhdGUgaXQgKi8KKwkJZSA9IHhtYWxsb2N6KHNpemVvZihzdHJ1Y3QgcG9vbF9lbnRyeSkgKyBsZW4pOworCQloYXNobWFwX2VudHJ5X2luaXQoZSwga2V5LmVudC5oYXNoKTsKKwkJZS0+bGVuID0gbGVuOworCQltZW1jcHkoZS0+ZGF0YSwgZGF0YSwgbGVuKTsKKwkJaGFzaG1hcF9hZGQoJm1hcCwgZSk7CisJfQorCXJldHVybiBlLT5kYXRhOworfQpkaWZmIC0tZ2l0IGEvaGFzaG1hcC5oIGIvaGFzaG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNzk1OGEKLS0tIC9kZXYvbnVsbAorKysgYi9oYXNobWFwLmgKQEAgLTAsMCArMSw5OCBAQAorI2lmbmRlZiBIQVNITUFQX0gKKyNkZWZpbmUgSEFTSE1BUF9ICisKKy8qCisgKiBHZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIGhhc2gtYmFzZWQga2V5LXZhbHVlIG1hcHBpbmdzLgorICogU2VlIERvY3VtZW50YXRpb24vdGVjaG5pY2FsL2FwaS1oYXNobWFwLnR4dC4KKyAqLworCisvKiBGTlYtMSBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGludCBzdHJoYXNoKGNvbnN0IGNoYXIgKmJ1Zik7CitleHRlcm4gdW5zaWduZWQgaW50IHN0cmloYXNoKGNvbnN0IGNoYXIgKmJ1Zik7CitleHRlcm4gdW5zaWduZWQgaW50IG1lbWhhc2goY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgbWVtaWhhc2goY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2hhMWhhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwkvKgorCSAqIEVxdWl2YWxlbnQgdG8gJ3JldHVybiAqKHVuc2lnbmVkIGludCAqKXNoYTE7JywgYnV0IHNhZmUgb24KKwkgKiBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IHVuYWxpZ25lZCByZWFkcy4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwltZW1jcHkoJmhhc2gsIHNoYTEsIHNpemVvZihoYXNoKSk7CisJcmV0dXJuIGhhc2g7Cit9CisKKy8qIGRhdGEgc3RydWN0dXJlcyAqLworCitzdHJ1Y3QgaGFzaG1hcF9lbnRyeSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgKm5leHQ7CisJdW5zaWduZWQgaW50IGhhc2g7Cit9OworCit0eXBlZGVmIGludCAoKmhhc2htYXBfY21wX2ZuKShjb25zdCB2b2lkICplbnRyeSwgY29uc3Qgdm9pZCAqZW50cnlfb3Jfa2V5LAorCQljb25zdCB2b2lkICprZXlkYXRhKTsKKworc3RydWN0IGhhc2htYXAgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5ICoqdGFibGU7CisJaGFzaG1hcF9jbXBfZm4gY21wZm47CisJdW5zaWduZWQgaW50IHNpemUsIHRhYmxlc2l6ZSwgZ3Jvd19hdCwgc2hyaW5rX2F0OworfTsKKworc3RydWN0IGhhc2htYXBfaXRlciB7CisJc3RydWN0IGhhc2htYXAgKm1hcDsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSAqbmV4dDsKKwl1bnNpZ25lZCBpbnQgdGFibGVwb3M7Cit9OworCisvKiBoYXNobWFwIGZ1bmN0aW9ucyAqLworCitleHRlcm4gdm9pZCBoYXNobWFwX2luaXQoc3RydWN0IGhhc2htYXAgKm1hcCwgaGFzaG1hcF9jbXBfZm4gZXF1YWxzX2Z1bmN0aW9uLAorCQlzaXplX3QgaW5pdGlhbF9zaXplKTsKK2V4dGVybiB2b2lkIGhhc2htYXBfZnJlZShzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBpbnQgZnJlZV9lbnRyaWVzKTsKKworLyogaGFzaG1hcF9lbnRyeSBmdW5jdGlvbnMgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGhhc2htYXBfZW50cnlfaW5pdCh2b2lkICplbnRyeSwgdW5zaWduZWQgaW50IGhhc2gpCit7CisJc3RydWN0IGhhc2htYXBfZW50cnkgKmUgPSBlbnRyeTsKKwllLT5oYXNoID0gaGFzaDsKKwllLT5uZXh0ID0gTlVMTDsKK30KK2V4dGVybiB2b2lkICpoYXNobWFwX2dldChjb25zdCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBjb25zdCB2b2lkICprZXksCisJCWNvbnN0IHZvaWQgKmtleWRhdGEpOworZXh0ZXJuIHZvaWQgKmhhc2htYXBfZ2V0X25leHQoY29uc3Qgc3RydWN0IGhhc2htYXAgKm1hcCwgY29uc3Qgdm9pZCAqZW50cnkpOworZXh0ZXJuIHZvaWQgaGFzaG1hcF9hZGQoc3RydWN0IGhhc2htYXAgKm1hcCwgdm9pZCAqZW50cnkpOworZXh0ZXJuIHZvaWQgKmhhc2htYXBfcHV0KHN0cnVjdCBoYXNobWFwICptYXAsIHZvaWQgKmVudHJ5KTsKK2V4dGVybiB2b2lkICpoYXNobWFwX3JlbW92ZShzdHJ1Y3QgaGFzaG1hcCAqbWFwLCBjb25zdCB2b2lkICprZXksCisJCWNvbnN0IHZvaWQgKmtleWRhdGEpOworCitzdGF0aWMgaW5saW5lIHZvaWQgKmhhc2htYXBfZ2V0X2Zyb21faGFzaChjb25zdCBzdHJ1Y3QgaGFzaG1hcCAqbWFwLAorCQl1bnNpZ25lZCBpbnQgaGFzaCwgY29uc3Qgdm9pZCAqa2V5ZGF0YSkKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBrZXk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZrZXksIGhhc2gpOworCXJldHVybiBoYXNobWFwX2dldChtYXAsICZrZXksIGtleWRhdGEpOworfQorCisvKiBoYXNobWFwX2l0ZXIgZnVuY3Rpb25zICovCisKK2V4dGVybiB2b2lkIGhhc2htYXBfaXRlcl9pbml0KHN0cnVjdCBoYXNobWFwICptYXAsIHN0cnVjdCBoYXNobWFwX2l0ZXIgKml0ZXIpOworZXh0ZXJuIHZvaWQgKmhhc2htYXBfaXRlcl9uZXh0KHN0cnVjdCBoYXNobWFwX2l0ZXIgKml0ZXIpOworc3RhdGljIGlubGluZSB2b2lkICpoYXNobWFwX2l0ZXJfZmlyc3Qoc3RydWN0IGhhc2htYXAgKm1hcCwKKwkJc3RydWN0IGhhc2htYXBfaXRlciAqaXRlcikKK3sKKwloYXNobWFwX2l0ZXJfaW5pdChtYXAsIGl0ZXIpOworCXJldHVybiBoYXNobWFwX2l0ZXJfbmV4dChpdGVyKTsKK30KKworLyogc3RyaW5nIGludGVybmluZyAqLworCitleHRlcm4gY29uc3Qgdm9pZCAqbWVtaW50ZXJuKGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpzdHJpbnRlcm4oY29uc3QgY2hhciAqc3RyaW5nKQoreworCXJldHVybiBtZW1pbnRlcm4oc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaGVscC5jIGIvaGVscC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OTZiMzQKLS0tIC9kZXYvbnVsbAorKysgYi9oZWxwLmMKQEAgLTAsMCArMSw0NzUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgImxldmVuc2h0ZWluLmgiCisjaW5jbHVkZSAiaGVscC5oIgorI2luY2x1ZGUgImNvbW1vbi1jbWRzLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJjb2x1bW4uaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAicmVmcy5oIgorCit2b2lkIGFkZF9jbWRuYW1lKHN0cnVjdCBjbWRuYW1lcyAqY21kcywgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgY21kbmFtZSAqZW50ID0geG1hbGxvYyhzaXplb2YoKmVudCkgKyBsZW4gKyAxKTsKKworCWVudC0+bGVuID0gbGVuOworCW1lbWNweShlbnQtPm5hbWUsIG5hbWUsIGxlbik7CisJZW50LT5uYW1lW2xlbl0gPSAwOworCisJQUxMT0NfR1JPVyhjbWRzLT5uYW1lcywgY21kcy0+Y250ICsgMSwgY21kcy0+YWxsb2MpOworCWNtZHMtPm5hbWVzW2NtZHMtPmNudCsrXSA9IGVudDsKK30KKworc3RhdGljIHZvaWQgY2xlYW5fY21kbmFtZXMoc3RydWN0IGNtZG5hbWVzICpjbWRzKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBjbWRzLT5jbnQ7ICsraSkKKwkJZnJlZShjbWRzLT5uYW1lc1tpXSk7CisJZnJlZShjbWRzLT5uYW1lcyk7CisJY21kcy0+Y250ID0gMDsKKwljbWRzLT5hbGxvYyA9IDA7Cit9CisKK3N0YXRpYyBpbnQgY21kbmFtZV9jb21wYXJlKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwlzdHJ1Y3QgY21kbmFtZSAqYSA9ICooc3RydWN0IGNtZG5hbWUgKiopYV87CisJc3RydWN0IGNtZG5hbWUgKmIgPSAqKHN0cnVjdCBjbWRuYW1lICoqKWJfOworCXJldHVybiBzdHJjbXAoYS0+bmFtZSwgYi0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHVuaXEoc3RydWN0IGNtZG5hbWVzICpjbWRzKQoreworCWludCBpLCBqOworCisJaWYgKCFjbWRzLT5jbnQpCisJCXJldHVybjsKKworCWZvciAoaSA9IGogPSAxOyBpIDwgY21kcy0+Y250OyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoY21kcy0+bmFtZXNbaV0tPm5hbWUsIGNtZHMtPm5hbWVzW2otMV0tPm5hbWUpKQorCQkJZnJlZShjbWRzLT5uYW1lc1tpXSk7CisJCWVsc2UKKwkJCWNtZHMtPm5hbWVzW2orK10gPSBjbWRzLT5uYW1lc1tpXTsKKwl9CisKKwljbWRzLT5jbnQgPSBqOworfQorCit2b2lkIGV4Y2x1ZGVfY21kcyhzdHJ1Y3QgY21kbmFtZXMgKmNtZHMsIHN0cnVjdCBjbWRuYW1lcyAqZXhjbHVkZXMpCit7CisJaW50IGNpLCBjaiwgZWk7CisJaW50IGNtcDsKKworCWNpID0gY2ogPSBlaSA9IDA7CisJd2hpbGUgKGNpIDwgY21kcy0+Y250ICYmIGVpIDwgZXhjbHVkZXMtPmNudCkgeworCQljbXAgPSBzdHJjbXAoY21kcy0+bmFtZXNbY2ldLT5uYW1lLCBleGNsdWRlcy0+bmFtZXNbZWldLT5uYW1lKTsKKwkJaWYgKGNtcCA8IDApCisJCQljbWRzLT5uYW1lc1tjaisrXSA9IGNtZHMtPm5hbWVzW2NpKytdOworCQllbHNlIGlmIChjbXAgPT0gMCkgeworCQkJZWkrKzsKKwkJCWZyZWUoY21kcy0+bmFtZXNbY2krK10pOworCQl9IGVsc2UgaWYgKGNtcCA+IDApCisJCQllaSsrOworCX0KKworCXdoaWxlIChjaSA8IGNtZHMtPmNudCkKKwkJY21kcy0+bmFtZXNbY2orK10gPSBjbWRzLT5uYW1lc1tjaSsrXTsKKworCWNtZHMtPmNudCA9IGNqOworfQorCitzdGF0aWMgdm9pZCBwcmV0dHlfcHJpbnRfY21kbmFtZXMoc3RydWN0IGNtZG5hbWVzICpjbWRzLCB1bnNpZ25lZCBpbnQgY29sb3B0cykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IGNvbHVtbl9vcHRpb25zIGNvcHRzOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNtZHMtPmNudDsgaSsrKQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmxpc3QsIGNtZHMtPm5hbWVzW2ldLT5uYW1lKTsKKwkvKgorCSAqIGFsd2F5cyBlbmFibGUgY29sdW1uIGRpc3BsYXksIHdlIG9ubHkgY29uc3VsdCBjb2x1bW4uKgorCSAqIGFib3V0IGxheW91dCBzdHJhdGVneSBhbmQgc3R1ZmYKKwkgKi8KKwljb2xvcHRzID0gKGNvbG9wdHMgJiB+Q09MX0VOQUJMRV9NQVNLKSB8IENPTF9FTkFCTEVEOworCW1lbXNldCgmY29wdHMsIDAsIHNpemVvZihjb3B0cykpOworCWNvcHRzLmluZGVudCA9ICIgICI7CisJY29wdHMucGFkZGluZyA9IDI7CisJcHJpbnRfY29sdW1ucygmbGlzdCwgY29sb3B0cywgJmNvcHRzKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaXNfZXhlY3V0YWJsZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKHN0YXQobmFtZSwgJnN0KSB8fCAvKiBzdGF0LCBub3QgbHN0YXQgKi8KKwkgICAgIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCXJldHVybiAwOworCisjaWYgZGVmaW5lZChHSVRfV0lORE9XU19OQVRJVkUpCit7CS8qIGNhbm5vdCB0cnVzdCB0aGUgZXhlY3V0YWJsZSBiaXQsIHBlZWsgaW50byB0aGUgZmlsZSBpbnN0ZWFkICovCisJY2hhciBidWZbM10gPSB7IDAgfTsKKwlpbnQgbjsKKwlpbnQgZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZKTsKKwlzdC5zdF9tb2RlICY9IH5TX0lYVVNSOworCWlmIChmZCA+PSAwKSB7CisJCW4gPSByZWFkKGZkLCBidWYsIDIpOworCQlpZiAobiA9PSAyKQorCQkJLyogRE9TIGV4ZWN1dGFibGVzIHN0YXJ0IHdpdGggIk1aIiAqLworCQkJaWYgKCFzdHJjbXAoYnVmLCAiIyEiKSB8fCAhc3RyY21wKGJ1ZiwgIk1aIikpCisJCQkJc3Quc3RfbW9kZSB8PSBTX0lYVVNSOworCQljbG9zZShmZCk7CisJfQorfQorI2VuZGlmCisJcmV0dXJuIHN0LnN0X21vZGUgJiBTX0lYVVNSOworfQorCitzdGF0aWMgdm9pZCBsaXN0X2NvbW1hbmRzX2luX2RpcihzdHJ1Y3QgY21kbmFtZXMgKmNtZHMsCisJCQkJCSBjb25zdCBjaGFyICpwYXRoLAorCQkJCQkgY29uc3QgY2hhciAqcHJlZml4KQoreworCURJUiAqZGlyID0gb3BlbmRpcihwYXRoKTsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBsZW47CisKKwlpZiAoIWRpcikKKwkJcmV0dXJuOworCWlmICghcHJlZml4KQorCQlwcmVmaXggPSAiZ2l0LSI7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMvIiwgcGF0aCk7CisJbGVuID0gYnVmLmxlbjsKKworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJY29uc3QgY2hhciAqZW50OworCQlzaXplX3QgZW50bGVuOworCisJCWlmICghc2tpcF9wcmVmaXgoZGUtPmRfbmFtZSwgcHJlZml4LCAmZW50KSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9zZXRsZW4oJmJ1ZiwgbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBkZS0+ZF9uYW1lKTsKKwkJaWYgKCFpc19leGVjdXRhYmxlKGJ1Zi5idWYpKQorCQkJY29udGludWU7CisKKwkJZW50bGVuID0gc3RybGVuKGVudCk7CisJCXN0cmlwX3N1ZmZpeChlbnQsICIuZXhlIiwgJmVudGxlbik7CisKKwkJYWRkX2NtZG5hbWUoY21kcywgZW50LCBlbnRsZW4pOworCX0KKwljbG9zZWRpcihkaXIpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCit2b2lkIGxvYWRfY29tbWFuZF9saXN0KGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJc3RydWN0IGNtZG5hbWVzICptYWluX2NtZHMsCisJCXN0cnVjdCBjbWRuYW1lcyAqb3RoZXJfY21kcykKK3sKKwljb25zdCBjaGFyICplbnZfcGF0aCA9IGdldGVudigiUEFUSCIpOworCWNvbnN0IGNoYXIgKmV4ZWNfcGF0aCA9IGdpdF9leGVjX3BhdGgoKTsKKworCWlmIChleGVjX3BhdGgpIHsKKwkJbGlzdF9jb21tYW5kc19pbl9kaXIobWFpbl9jbWRzLCBleGVjX3BhdGgsIHByZWZpeCk7CisJCXFzb3J0KG1haW5fY21kcy0+bmFtZXMsIG1haW5fY21kcy0+Y250LAorCQkgICAgICBzaXplb2YoKm1haW5fY21kcy0+bmFtZXMpLCBjbWRuYW1lX2NvbXBhcmUpOworCQl1bmlxKG1haW5fY21kcyk7CisJfQorCisJaWYgKGVudl9wYXRoKSB7CisJCWNoYXIgKnBhdGhzLCAqcGF0aCwgKmNvbG9uOworCQlwYXRoID0gcGF0aHMgPSB4c3RyZHVwKGVudl9wYXRoKTsKKwkJd2hpbGUgKDEpIHsKKwkJCWlmICgoY29sb24gPSBzdHJjaHIocGF0aCwgUEFUSF9TRVApKSkKKwkJCQkqY29sb24gPSAwOworCQkJaWYgKCFleGVjX3BhdGggfHwgc3RyY21wKHBhdGgsIGV4ZWNfcGF0aCkpCisJCQkJbGlzdF9jb21tYW5kc19pbl9kaXIob3RoZXJfY21kcywgcGF0aCwgcHJlZml4KTsKKworCQkJaWYgKCFjb2xvbikKKwkJCQlicmVhazsKKwkJCXBhdGggPSBjb2xvbiArIDE7CisJCX0KKwkJZnJlZShwYXRocyk7CisKKwkJcXNvcnQob3RoZXJfY21kcy0+bmFtZXMsIG90aGVyX2NtZHMtPmNudCwKKwkJICAgICAgc2l6ZW9mKCpvdGhlcl9jbWRzLT5uYW1lcyksIGNtZG5hbWVfY29tcGFyZSk7CisJCXVuaXEob3RoZXJfY21kcyk7CisJfQorCWV4Y2x1ZGVfY21kcyhvdGhlcl9jbWRzLCBtYWluX2NtZHMpOworfQorCit2b2lkIGxpc3RfY29tbWFuZHModW5zaWduZWQgaW50IGNvbG9wdHMsCisJCSAgIHN0cnVjdCBjbWRuYW1lcyAqbWFpbl9jbWRzLCBzdHJ1Y3QgY21kbmFtZXMgKm90aGVyX2NtZHMpCit7CisJaWYgKG1haW5fY21kcy0+Y250KSB7CisJCWNvbnN0IGNoYXIgKmV4ZWNfcGF0aCA9IGdpdF9leGVjX3BhdGgoKTsKKwkJcHJpbnRmX2xuKF8oImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIpLCBleGVjX3BhdGgpOworCQlwdXRjaGFyKCdcbicpOworCQlwcmV0dHlfcHJpbnRfY21kbmFtZXMobWFpbl9jbWRzLCBjb2xvcHRzKTsKKwkJcHV0Y2hhcignXG4nKTsKKwl9CisKKwlpZiAob3RoZXJfY21kcy0+Y250KSB7CisJCXByaW50Zl9sbihfKCJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiKSk7CisJCXB1dGNoYXIoJ1xuJyk7CisJCXByZXR0eV9wcmludF9jbWRuYW1lcyhvdGhlcl9jbWRzLCBjb2xvcHRzKTsKKwkJcHV0Y2hhcignXG4nKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY21kX2dyb3VwX2NtcChjb25zdCB2b2lkICplbGVtMSwgY29uc3Qgdm9pZCAqZWxlbTIpCit7CisJY29uc3Qgc3RydWN0IGNtZG5hbWVfaGVscCAqZTEgPSBlbGVtMTsKKwljb25zdCBzdHJ1Y3QgY21kbmFtZV9oZWxwICplMiA9IGVsZW0yOworCisJaWYgKGUxLT5ncm91cCA8IGUyLT5ncm91cCkKKwkJcmV0dXJuIC0xOworCWlmIChlMS0+Z3JvdXAgPiBlMi0+Z3JvdXApCisJCXJldHVybiAxOworCXJldHVybiBzdHJjbXAoZTEtPm5hbWUsIGUyLT5uYW1lKTsKK30KKwordm9pZCBsaXN0X2NvbW1vbl9jbWRzX2hlbHAodm9pZCkKK3sKKwlpbnQgaSwgbG9uZ2VzdCA9IDA7CisJaW50IGN1cnJlbnRfZ3JwID0gLTE7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tb25fY21kcyk7IGkrKykgeworCQlpZiAobG9uZ2VzdCA8IHN0cmxlbihjb21tb25fY21kc1tpXS5uYW1lKSkKKwkJCWxvbmdlc3QgPSBzdHJsZW4oY29tbW9uX2NtZHNbaV0ubmFtZSk7CisJfQorCisJcXNvcnQoY29tbW9uX2NtZHMsIEFSUkFZX1NJWkUoY29tbW9uX2NtZHMpLAorCQlzaXplb2YoY29tbW9uX2NtZHNbMF0pLCBjbWRfZ3JvdXBfY21wKTsKKworCXB1dHMoXygiVGhlc2UgYXJlIGNvbW1vbiBHaXQgY29tbWFuZHMgdXNlZCBpbiB2YXJpb3VzIHNpdHVhdGlvbnM6IikpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29tbW9uX2NtZHMpOyBpKyspIHsKKwkJaWYgKGNvbW1vbl9jbWRzW2ldLmdyb3VwICE9IGN1cnJlbnRfZ3JwKSB7CisJCQlwcmludGYoIlxuJXNcbiIsIF8oY29tbW9uX2NtZF9ncm91cHNbY29tbW9uX2NtZHNbaV0uZ3JvdXBdKSk7CisJCQljdXJyZW50X2dycCA9IGNvbW1vbl9jbWRzW2ldLmdyb3VwOworCQl9CisKKwkJcHJpbnRmKCIgICAlcyAgICIsIGNvbW1vbl9jbWRzW2ldLm5hbWUpOworCQltcHV0X2NoYXIoJyAnLCBsb25nZXN0IC0gc3RybGVuKGNvbW1vbl9jbWRzW2ldLm5hbWUpKTsKKwkJcHV0cyhfKGNvbW1vbl9jbWRzW2ldLmhlbHApKTsKKwl9Cit9CisKK2ludCBpc19pbl9jbWRsaXN0KHN0cnVjdCBjbWRuYW1lcyAqYywgY29uc3QgY2hhciAqcykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYy0+Y250OyBpKyspCisJCWlmICghc3RyY21wKHMsIGMtPm5hbWVzW2ldLT5uYW1lKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1dG9jb3JyZWN0Oworc3RhdGljIHN0cnVjdCBjbWRuYW1lcyBhbGlhc2VzOworCitzdGF0aWMgaW50IGdpdF91bmtub3duX2NtZF9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqcDsKKworCWlmICghc3RyY21wKHZhciwgImhlbHAuYXV0b2NvcnJlY3QiKSkKKwkJYXV0b2NvcnJlY3QgPSBnaXRfY29uZmlnX2ludCh2YXIsdmFsdWUpOworCS8qIEFsc28gdXNlIGFsaWFzZXMgZm9yIGNvbW1hbmQgbG9va3VwICovCisJaWYgKHNraXBfcHJlZml4KHZhciwgImFsaWFzLiIsICZwKSkKKwkJYWRkX2NtZG5hbWUoJmFsaWFzZXMsIHAsIHN0cmxlbihwKSk7CisKKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIGludCBsZXZlbnNodGVpbl9jb21wYXJlKGNvbnN0IHZvaWQgKnAxLCBjb25zdCB2b2lkICpwMikKK3sKKwljb25zdCBzdHJ1Y3QgY21kbmFtZSAqY29uc3QgKmMxID0gcDEsICpjb25zdCAqYzIgPSBwMjsKKwljb25zdCBjaGFyICpzMSA9ICgqYzEpLT5uYW1lLCAqczIgPSAoKmMyKS0+bmFtZTsKKwlpbnQgbDEgPSAoKmMxKS0+bGVuOworCWludCBsMiA9ICgqYzIpLT5sZW47CisJcmV0dXJuIGwxICE9IGwyID8gbDEgLSBsMiA6IHN0cmNtcChzMSwgczIpOworfQorCitzdGF0aWMgdm9pZCBhZGRfY21kX2xpc3Qoc3RydWN0IGNtZG5hbWVzICpjbWRzLCBzdHJ1Y3QgY21kbmFtZXMgKm9sZCkKK3sKKwlpbnQgaTsKKwlBTExPQ19HUk9XKGNtZHMtPm5hbWVzLCBjbWRzLT5jbnQgKyBvbGQtPmNudCwgY21kcy0+YWxsb2MpOworCisJZm9yIChpID0gMDsgaSA8IG9sZC0+Y250OyBpKyspCisJCWNtZHMtPm5hbWVzW2NtZHMtPmNudCsrXSA9IG9sZC0+bmFtZXNbaV07CisJZnJlZShvbGQtPm5hbWVzKTsKKwlvbGQtPmNudCA9IDA7CisJb2xkLT5uYW1lcyA9IE5VTEw7Cit9CisKKy8qIEFuIGVtcGlyaWNhbGx5IGRlcml2ZWQgbWFnaWMgbnVtYmVyICovCisjZGVmaW5lIFNJTUlMQVJJVFlfRkxPT1IgNworI2RlZmluZSBTSU1JTEFSX0VOT1VHSCh4KSAoKHgpIDwgU0lNSUxBUklUWV9GTE9PUikKKworc3RhdGljIGNvbnN0IGNoYXIgYmFkX2ludGVycHJldGVyX2FkdmljZVtdID0KKwlOXygiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorCSJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/Iik7CisKK2NvbnN0IGNoYXIgKmhlbHBfdW5rbm93bl9jbWQoY29uc3QgY2hhciAqY21kKQoreworCWludCBpLCBuLCBiZXN0X3NpbWlsYXJpdHkgPSAwOworCXN0cnVjdCBjbWRuYW1lcyBtYWluX2NtZHMsIG90aGVyX2NtZHM7CisKKwltZW1zZXQoJm1haW5fY21kcywgMCwgc2l6ZW9mKG1haW5fY21kcykpOworCW1lbXNldCgmb3RoZXJfY21kcywgMCwgc2l6ZW9mKG90aGVyX2NtZHMpKTsKKwltZW1zZXQoJmFsaWFzZXMsIDAsIHNpemVvZihhbGlhc2VzKSk7CisKKwlnaXRfY29uZmlnKGdpdF91bmtub3duX2NtZF9jb25maWcsIE5VTEwpOworCisJbG9hZF9jb21tYW5kX2xpc3QoImdpdC0iLCAmbWFpbl9jbWRzLCAmb3RoZXJfY21kcyk7CisKKwlhZGRfY21kX2xpc3QoJm1haW5fY21kcywgJmFsaWFzZXMpOworCWFkZF9jbWRfbGlzdCgmbWFpbl9jbWRzLCAmb3RoZXJfY21kcyk7CisJcXNvcnQobWFpbl9jbWRzLm5hbWVzLCBtYWluX2NtZHMuY250LAorCSAgICAgIHNpemVvZigqbWFpbl9jbWRzLm5hbWVzKSwgY21kbmFtZV9jb21wYXJlKTsKKwl1bmlxKCZtYWluX2NtZHMpOworCisJLyogVGhpcyBhYnVzZXMgY21kbmFtZS0+bGVuIGZvciBsZXZlbnNodGVpbiBkaXN0YW5jZSAqLworCWZvciAoaSA9IDAsIG4gPSAwOyBpIDwgbWFpbl9jbWRzLmNudDsgaSsrKSB7CisJCWludCBjbXAgPSAwOyAvKiBhdm9pZCBjb21waWxlciBzdHVwaWRpdHkgKi8KKwkJY29uc3QgY2hhciAqY2FuZGlkYXRlID0gbWFpbl9jbWRzLm5hbWVzW2ldLT5uYW1lOworCisJCS8qCisJCSAqIEFuIGV4YWN0IG1hdGNoIG1lYW5zIHdlIGhhdmUgdGhlIGNvbW1hbmQsIGJ1dAorCQkgKiBmb3Igc29tZSByZWFzb24gZXhlYydpbmcgaXQgZ2F2ZSB1cyBFTk9FTlQ7IHByb2JhYmx5CisJCSAqIGl0J3MgYSBiYWQgaW50ZXJwcmV0ZXIgaW4gdGhlICMhIGxpbmUuCisJCSAqLworCQlpZiAoIXN0cmNtcChjYW5kaWRhdGUsIGNtZCkpCisJCQlkaWUoXyhiYWRfaW50ZXJwcmV0ZXJfYWR2aWNlKSwgY21kLCBjbWQpOworCisJCS8qIERvZXMgdGhlIGNhbmRpZGF0ZSBhcHBlYXIgaW4gY29tbW9uX2NtZHMgbGlzdD8gKi8KKwkJd2hpbGUgKG4gPCBBUlJBWV9TSVpFKGNvbW1vbl9jbWRzKSAmJgorCQkgICAgICAgKGNtcCA9IHN0cmNtcChjb21tb25fY21kc1tuXS5uYW1lLCBjYW5kaWRhdGUpKSA8IDApCisJCQluKys7CisJCWlmICgobiA8IEFSUkFZX1NJWkUoY29tbW9uX2NtZHMpKSAmJiAhY21wKSB7CisJCQkvKiBZZXMsIHRoaXMgaXMgb25lIG9mIHRoZSBjb21tb24gY29tbWFuZHMgKi8KKwkJCW4rKzsgLyogdXNlIHRoZSBlbnRyeSBmcm9tIGNvbW1vbl9jbWRzW10gKi8KKwkJCWlmIChzdGFydHNfd2l0aChjYW5kaWRhdGUsIGNtZCkpIHsKKwkJCQkvKiBHaXZlIHByZWZpeCBtYXRjaCBhIHZlcnkgZ29vZCBzY29yZSAqLworCQkJCW1haW5fY21kcy5uYW1lc1tpXS0+bGVuID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCW1haW5fY21kcy5uYW1lc1tpXS0+bGVuID0KKwkJCWxldmVuc2h0ZWluKGNtZCwgY2FuZGlkYXRlLCAwLCAyLCAxLCAzKSArIDE7CisJfQorCisJcXNvcnQobWFpbl9jbWRzLm5hbWVzLCBtYWluX2NtZHMuY250LAorCSAgICAgIHNpemVvZigqbWFpbl9jbWRzLm5hbWVzKSwgbGV2ZW5zaHRlaW5fY29tcGFyZSk7CisKKwlpZiAoIW1haW5fY21kcy5jbnQpCisJCWRpZShfKCJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIpKTsKKworCS8qIHNraXAgYW5kIGNvdW50IHByZWZpeCBtYXRjaGVzICovCisJZm9yIChuID0gMDsgbiA8IG1haW5fY21kcy5jbnQgJiYgIW1haW5fY21kcy5uYW1lc1tuXS0+bGVuOyBuKyspCisJCTsgLyogc3RpbGwgY291bnRpbmcgKi8KKworCWlmIChtYWluX2NtZHMuY250IDw9IG4pIHsKKwkJLyogcHJlZml4IG1hdGNoZXMgd2l0aCBldmVyeXRoaW5nPyB0aGF0IGlzIHRvbyBhbWJpZ3VvdXMgKi8KKwkJYmVzdF9zaW1pbGFyaXR5ID0gU0lNSUxBUklUWV9GTE9PUiArIDE7CisJfSBlbHNlIHsKKwkJLyogY291bnQgYWxsIHRoZSBtb3N0IHNpbWlsYXIgb25lcyAqLworCQlmb3IgKGJlc3Rfc2ltaWxhcml0eSA9IG1haW5fY21kcy5uYW1lc1tuKytdLT5sZW47CisJCSAgICAgKG4gPCBtYWluX2NtZHMuY250ICYmCisJCSAgICAgIGJlc3Rfc2ltaWxhcml0eSA9PSBtYWluX2NtZHMubmFtZXNbbl0tPmxlbik7CisJCSAgICAgbisrKQorCQkJOyAvKiBzdGlsbCBjb3VudGluZyAqLworCX0KKwlpZiAoYXV0b2NvcnJlY3QgJiYgbiA9PSAxICYmIFNJTUlMQVJfRU5PVUdIKGJlc3Rfc2ltaWxhcml0eSkpIHsKKwkJY29uc3QgY2hhciAqYXNzdW1lZCA9IG1haW5fY21kcy5uYW1lc1swXS0+bmFtZTsKKwkJbWFpbl9jbWRzLm5hbWVzWzBdID0gTlVMTDsKKwkJY2xlYW5fY21kbmFtZXMoJm1haW5fY21kcyk7CisJCWZwcmludGZfbG4oc3RkZXJyLAorCQkJICAgXygiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsICIKKwkJCSAgICAgIndoaWNoIGRvZXMgbm90IGV4aXN0LlxuIgorCQkJICAgICAiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnIiksCisJCQljbWQsIGFzc3VtZWQpOworCQlpZiAoYXV0b2NvcnJlY3QgPiAwKSB7CisJCQlmcHJpbnRmX2xuKHN0ZGVyciwgXygiaW4gJTAuMWYgc2Vjb25kcyBhdXRvbWF0aWNhbGx5Li4uIiksCisJCQkJKGZsb2F0KWF1dG9jb3JyZWN0LzEwLjApOworCQkJc2xlZXBfbWlsbGlzZWMoYXV0b2NvcnJlY3QgKiAxMDApOworCQl9CisJCXJldHVybiBhc3N1bWVkOworCX0KKworCWZwcmludGZfbG4oc3RkZXJyLCBfKCJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIiksIGNtZCk7CisKKwlpZiAoU0lNSUxBUl9FTk9VR0goYmVzdF9zaW1pbGFyaXR5KSkgeworCQlmcHJpbnRmX2xuKHN0ZGVyciwKKwkJCSAgIFFfKCJcbkRpZCB5b3UgbWVhbiB0aGlzPyIsCisJCQkgICAgICAiXG5EaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIsCisJCQkgICBuKSk7CisKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJCWZwcmludGYoc3RkZXJyLCAiXHQlc1xuIiwgbWFpbl9jbWRzLm5hbWVzW2ldLT5uYW1lKTsKKwl9CisKKwlleGl0KDEpOworfQorCitpbnQgY21kX3ZlcnNpb24oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJLyoKKwkgKiBUaGUgZm9ybWF0IG9mIHRoaXMgc3RyaW5nIHNob3VsZCBiZSBrZXB0IHN0YWJsZSBmb3IgY29tcGF0aWJpbGl0eQorCSAqIHdpdGggZXh0ZXJuYWwgcHJvamVjdHMgdGhhdCByZWx5IG9uIHRoZSBvdXRwdXQgb2YgImdpdCB2ZXJzaW9uIi4KKwkgKi8KKwlwcmludGYoImdpdCB2ZXJzaW9uICVzXG4iLCBnaXRfdmVyc2lvbl9zdHJpbmcpOworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgc2ltaWxhcl9yZWZfY2IgeworCWNvbnN0IGNoYXIgKmJhc2VfcmVmOworCXN0cnVjdCBzdHJpbmdfbGlzdCAqc2ltaWxhcl9yZWZzOworfTsKKworc3RhdGljIGludCBhcHBlbmRfc2ltaWxhcl9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzaW1pbGFyX3JlZl9jYiAqY2IgPSAoc3RydWN0IHNpbWlsYXJfcmVmX2NiICopKGNiX2RhdGEpOworCWNoYXIgKmJyYW5jaCA9IHN0cnJjaHIocmVmbmFtZSwgJy8nKSArIDE7CisJY29uc3QgY2hhciAqcmVtb3RlOworCisJLyogQSByZW1vdGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgaXMgZGVlbWVkIHNpbWlsYXIgKi8KKwlpZiAoc2tpcF9wcmVmaXgocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iLCAmcmVtb3RlKSAmJgorCSAgICAhc3RyY21wKGJyYW5jaCwgY2ItPmJhc2VfcmVmKSkKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGNiLT5zaW1pbGFyX3JlZnMsIHJlbW90ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgZ3Vlc3NfcmVmcyhjb25zdCBjaGFyICpyZWYpCit7CisJc3RydWN0IHNpbWlsYXJfcmVmX2NiIHJlZl9jYjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc2ltaWxhcl9yZWZzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKworCXJlZl9jYi5iYXNlX3JlZiA9IHJlZjsKKwlyZWZfY2Iuc2ltaWxhcl9yZWZzID0gJnNpbWlsYXJfcmVmczsKKwlmb3JfZWFjaF9yZWYoYXBwZW5kX3NpbWlsYXJfcmVmLCAmcmVmX2NiKTsKKwlyZXR1cm4gc2ltaWxhcl9yZWZzOworfQorCit2b2lkIGhlbHBfdW5rbm93bl9yZWYoY29uc3QgY2hhciAqcmVmLCBjb25zdCBjaGFyICpjbWQsIGNvbnN0IGNoYXIgKmVycm9yKQoreworCWludCBpOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzdWdnZXN0ZWRfcmVmcyA9IGd1ZXNzX3JlZnMocmVmKTsKKworCWZwcmludGZfbG4oc3RkZXJyLCBfKCIlczogJXMgLSAlcyIpLCBjbWQsIHJlZiwgZXJyb3IpOworCisJaWYgKHN1Z2dlc3RlZF9yZWZzLm5yID4gMCkgeworCQlmcHJpbnRmX2xuKHN0ZGVyciwKKwkJCSAgIFFfKCJcbkRpZCB5b3UgbWVhbiB0aGlzPyIsCisJCQkgICAgICAiXG5EaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIsCisJCQkgICAgICBzdWdnZXN0ZWRfcmVmcy5ucikpOworCQlmb3IgKGkgPSAwOyBpIDwgc3VnZ2VzdGVkX3JlZnMubnI7IGkrKykKKwkJCWZwcmludGYoc3RkZXJyLCAiXHQlc1xuIiwgc3VnZ2VzdGVkX3JlZnMuaXRlbXNbaV0uc3RyaW5nKTsKKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmc3VnZ2VzdGVkX3JlZnMsIDApOworCWV4aXQoMSk7Cit9CmRpZmYgLS1naXQgYS9oZWxwLmggYi9oZWxwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIxZDdjOQotLS0gL2Rldi9udWxsCisrKyBiL2hlbHAuaApAQCAtMCwwICsxLDM1IEBACisjaWZuZGVmIEhFTFBfSAorI2RlZmluZSBIRUxQX0gKKworc3RydWN0IGNtZG5hbWVzIHsKKwlpbnQgYWxsb2M7CisJaW50IGNudDsKKwlzdHJ1Y3QgY21kbmFtZSB7CisJCXNpemVfdCBsZW47IC8qIGFsc28gdXNlZCBmb3Igc2ltaWxhcml0eSBpbmRleCBpbiBoZWxwLmMgKi8KKwkJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworCX0gKipuYW1lczsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtcHV0X2NoYXIoY2hhciBjLCB1bnNpZ25lZCBpbnQgbnVtKQoreworCXdoaWxlKG51bS0tKQorCQlwdXRjaGFyKGMpOworfQorCitleHRlcm4gdm9pZCBsaXN0X2NvbW1vbl9jbWRzX2hlbHAodm9pZCk7CitleHRlcm4gY29uc3QgY2hhciAqaGVscF91bmtub3duX2NtZChjb25zdCBjaGFyICpjbWQpOworZXh0ZXJuIHZvaWQgbG9hZF9jb21tYW5kX2xpc3QoY29uc3QgY2hhciAqcHJlZml4LAorCQkJICAgICAgc3RydWN0IGNtZG5hbWVzICptYWluX2NtZHMsCisJCQkgICAgICBzdHJ1Y3QgY21kbmFtZXMgKm90aGVyX2NtZHMpOworZXh0ZXJuIHZvaWQgYWRkX2NtZG5hbWUoc3RydWN0IGNtZG5hbWVzICpjbWRzLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKKy8qIEhlcmUgd2UgcmVxdWlyZSB0aGF0IGV4Y2x1ZGVzIGlzIGEgc29ydGVkIGxpc3QuICovCitleHRlcm4gdm9pZCBleGNsdWRlX2NtZHMoc3RydWN0IGNtZG5hbWVzICpjbWRzLCBzdHJ1Y3QgY21kbmFtZXMgKmV4Y2x1ZGVzKTsKK2V4dGVybiBpbnQgaXNfaW5fY21kbGlzdChzdHJ1Y3QgY21kbmFtZXMgKmNtZHMsIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgbGlzdF9jb21tYW5kcyh1bnNpZ25lZCBpbnQgY29sb3B0cywgc3RydWN0IGNtZG5hbWVzICptYWluX2NtZHMsIHN0cnVjdCBjbWRuYW1lcyAqb3RoZXJfY21kcyk7CisKKy8qCisgKiBjYWxsIHRoaXMgdG8gZGllKCksIHdoZW4gaXQgaXMgc3VzcGVjdGVkIHRoYXQgdGhlIHVzZXIgbWlzdHlwZWQgYQorICogcmVmIHRvIHRoZSBjb21tYW5kLCB0byBnaXZlIHN1Z2dlc3RlZCAiY29ycmVjdCIgcmVmcy4KKyAqLworZXh0ZXJuIHZvaWQgaGVscF91bmtub3duX3JlZihjb25zdCBjaGFyICpyZWYsIGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqZXJyb3IpOworI2VuZGlmIC8qIEhFTFBfSCAqLwpkaWZmIC0tZ2l0IGEvaGV4LmMgYi9oZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTE5Zjg1Ci0tLSAvZGV2L251bGwKKysrIGIvaGV4LmMKQEAgLTAsMCArMSw5MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK2NvbnN0IHNpZ25lZCBjaGFyIGhleHZhbF90YWJsZVsyNTZdID0geworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAwMC0wNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAwOC0wZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAxMC0xNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAxOC0xZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAyMC0yNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAyOC0yZiAqLworCSAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsCQkvKiAzMC0zNyAqLworCSAgOCwgIDksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiAzOC0zZiAqLworCSAtMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgLTEsCQkvKiA0MC00NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA0OC00ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA1MC01NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA1OC01ZiAqLworCSAtMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgLTEsCQkvKiA2MC02NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA2OC02NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA3MC03NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA3OC03ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA4MC04NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA4OC04ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA5MC05NyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiA5OC05ZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBhMC1hNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBhOC1hZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBiMC1iNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBiOC1iZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBjMC1jNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBjOC1jZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBkMC1kNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBkOC1kZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBlMC1lNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBlOC1lZiAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBmMC1mNyAqLworCSAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCQkvKiBmOC1mZiAqLworfTsKKworaW50IGdldF9zaGExX2hleChjb25zdCBjaGFyICpoZXgsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IEdJVF9TSEExX1JBV1NaOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHZhbDsKKwkJLyoKKwkJICogaGV4WzFdPT0nXDAnIGlzIGNhdWdodCB3aGVuIHZhbCBpcyBjaGVja2VkIGJlbG93LAorCQkgKiBidXQgaWYgaGV4WzBdIGlzIE5VTCB3ZSBoYXZlIHRvIGF2b2lkIHJlYWRpbmcKKwkJICogcGFzdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmc6CisJCSAqLworCQlpZiAoIWhleFswXSkKKwkJCXJldHVybiAtMTsKKwkJdmFsID0gKGhleHZhbChoZXhbMF0pIDw8IDQpIHwgaGV4dmFsKGhleFsxXSk7CisJCWlmICh2YWwgJiB+MHhmZikKKwkJCXJldHVybiAtMTsKKwkJKnNoYTErKyA9IHZhbDsKKwkJaGV4ICs9IDI7CisJfQorCXJldHVybiAwOworfQorCitpbnQgZ2V0X29pZF9oZXgoY29uc3QgY2hhciAqaGV4LCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJcmV0dXJuIGdldF9zaGExX2hleChoZXgsIG9pZC0+aGFzaCk7Cit9CisKK2NoYXIgKnNoYTFfdG9faGV4X3IoY2hhciAqYnVmZmVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0YXRpYyBjb25zdCBjaGFyIGhleFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworCWNoYXIgKmJ1ZiA9IGJ1ZmZlcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBHSVRfU0hBMV9SQVdTWjsgaSsrKSB7CisJCXVuc2lnbmVkIGludCB2YWwgPSAqc2hhMSsrOworCQkqYnVmKysgPSBoZXhbdmFsID4+IDRdOworCQkqYnVmKysgPSBoZXhbdmFsICYgMHhmXTsKKwl9CisJKmJ1ZiA9ICdcMCc7CisKKwlyZXR1cm4gYnVmZmVyOworfQorCitjaGFyICpzaGExX3RvX2hleChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0YXRpYyBpbnQgYnVmbm87CisJc3RhdGljIGNoYXIgaGV4YnVmZmVyWzRdW0dJVF9TSEExX0hFWFNaICsgMV07CisJcmV0dXJuIHNoYTFfdG9faGV4X3IoaGV4YnVmZmVyWzMgJiArK2J1Zm5vXSwgc2hhMSk7Cit9CisKK2NoYXIgKm9pZF90b19oZXgoY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkKQoreworCXJldHVybiBzaGExX3RvX2hleChvaWQtPmhhc2gpOworfQpkaWZmIC0tZ2l0IGEvaHR0cC1iYWNrZW5kLmMgYi9odHRwLWJhY2tlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWM0MGVmCi0tLSAvZGV2L251bGwKKysrIGIvaHR0cC1iYWNrZW5kLmMKQEAgLTAsMCArMSw3MDMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgY29udGVudF90eXBlW10gPSAiQ29udGVudC1UeXBlIjsKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnRlbnRfbGVuZ3RoW10gPSAiQ29udGVudC1MZW5ndGgiOworc3RhdGljIGNvbnN0IGNoYXIgbGFzdF9tb2RpZmllZFtdID0gIkxhc3QtTW9kaWZpZWQiOworc3RhdGljIGludCBnZXRhbnlmaWxlID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9yZXF1ZXN0X2J1ZmZlciA9IDEwICogMTAyNCAqIDEwMjQ7CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnF1ZXJ5X3BhcmFtczsKKworc3RydWN0IHJwY19zZXJ2aWNlIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmNvbmZpZ19uYW1lOworCXVuc2lnbmVkIGJ1ZmZlcl9pbnB1dCA6IDE7CisJc2lnbmVkIGVuYWJsZWQgOiAyOworfTsKKworc3RhdGljIHN0cnVjdCBycGNfc2VydmljZSBycGNfc2VydmljZVtdID0geworCXsgInVwbG9hZC1wYWNrIiwgInVwbG9hZHBhY2siLCAxLCAxIH0sCisJeyAicmVjZWl2ZS1wYWNrIiwgInJlY2VpdmVwYWNrIiwgMCwgLTEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmdldF9wYXJhbWV0ZXJzKHZvaWQpCit7CisJaWYgKCFxdWVyeV9wYXJhbXMpIHsKKwkJY29uc3QgY2hhciAqcXVlcnkgPSBnZXRlbnYoIlFVRVJZX1NUUklORyIpOworCisJCXF1ZXJ5X3BhcmFtcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpxdWVyeV9wYXJhbXMpKTsKKwkJd2hpbGUgKHF1ZXJ5ICYmICpxdWVyeSkgeworCQkJY2hhciAqbmFtZSA9IHVybF9kZWNvZGVfcGFyYW1ldGVyX25hbWUoJnF1ZXJ5KTsKKwkJCWNoYXIgKnZhbHVlID0gdXJsX2RlY29kZV9wYXJhbWV0ZXJfdmFsdWUoJnF1ZXJ5KTsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppOworCisJCQlpID0gc3RyaW5nX2xpc3RfbG9va3VwKHF1ZXJ5X3BhcmFtcywgbmFtZSk7CisJCQlpZiAoIWkpCisJCQkJaSA9IHN0cmluZ19saXN0X2luc2VydChxdWVyeV9wYXJhbXMsIG5hbWUpOworCQkJZWxzZQorCQkJCWZyZWUoaS0+dXRpbCk7CisJCQlpLT51dGlsID0gdmFsdWU7CisJCX0KKwl9CisJcmV0dXJuIHF1ZXJ5X3BhcmFtczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9wYXJhbWV0ZXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaTsKKwlpID0gc3RyaW5nX2xpc3RfbG9va3VwKGdldF9wYXJhbWV0ZXJzKCksIG5hbWUpOworCXJldHVybiBpID8gaS0+dXRpbCA6IE5VTEw7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitzdGF0aWMgdm9pZCBmb3JtYXRfd3JpdGUoaW50IGZkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdGF0aWMgY2hhciBidWZmZXJbMTAyNF07CisKKwl2YV9saXN0IGFyZ3M7CisJdW5zaWduZWQgbjsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbiA9IHZzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlpZiAobiA+PSBzaXplb2YoYnVmZmVyKSkKKwkJZGllKCJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiKTsKKworCXdyaXRlX29yX2RpZShmZCwgYnVmZmVyLCBuKTsKK30KKworc3RhdGljIHZvaWQgaHR0cF9zdGF0dXModW5zaWduZWQgY29kZSwgY29uc3QgY2hhciAqbXNnKQoreworCWZvcm1hdF93cml0ZSgxLCAiU3RhdHVzOiAldSAlc1xyXG4iLCBjb2RlLCBtc2cpOworfQorCitzdGF0aWMgdm9pZCBoZHJfc3RyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWZvcm1hdF93cml0ZSgxLCAiJXM6ICVzXHJcbiIsIG5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgaGRyX2ludChjb25zdCBjaGFyICpuYW1lLCB1aW50bWF4X3QgdmFsdWUpCit7CisJZm9ybWF0X3dyaXRlKDEsICIlczogJSIgUFJJdU1BWCAiXHJcbiIsIG5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgaGRyX2RhdGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyB3aGVuKQoreworCWNvbnN0IGNoYXIgKnZhbHVlID0gc2hvd19kYXRlKHdoZW4sIDAsIERBVEVfTU9ERShSRkMyODIyKSk7CisJaGRyX3N0cihuYW1lLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhkcl9ub2NhY2hlKHZvaWQpCit7CisJaGRyX3N0cigiRXhwaXJlcyIsICJGcmksIDAxIEphbiAxOTgwIDAwOjAwOjAwIEdNVCIpOworCWhkcl9zdHIoIlByYWdtYSIsICJuby1jYWNoZSIpOworCWhkcl9zdHIoIkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGUsIG1heC1hZ2U9MCwgbXVzdC1yZXZhbGlkYXRlIik7Cit9CisKK3N0YXRpYyB2b2lkIGhkcl9jYWNoZV9mb3JldmVyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBub3cgPSB0aW1lKE5VTEwpOworCWhkcl9kYXRlKCJEYXRlIiwgbm93KTsKKwloZHJfZGF0ZSgiRXhwaXJlcyIsIG5vdyArIDMxNTM2MDAwKTsKKwloZHJfc3RyKCJDYWNoZS1Db250cm9sIiwgInB1YmxpYywgbWF4LWFnZT0zMTUzNjAwMCIpOworfQorCitzdGF0aWMgdm9pZCBlbmRfaGVhZGVycyh2b2lkKQoreworCXdyaXRlX29yX2RpZSgxLCAiXHJcbiIsIDIpOworfQorCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIE5PUkVUVVJOIHZvaWQgbm90X2ZvdW5kKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCisJaHR0cF9zdGF0dXMoNDA0LCAiTm90IEZvdW5kIik7CisJaGRyX25vY2FjaGUoKTsKKwllbmRfaGVhZGVycygpOworCisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCWlmIChlcnIgJiYgKmVycikKKwkJdmZwcmludGYoc3RkZXJyLCBlcnIsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJZXhpdCgwKTsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3N0YXRpYyBOT1JFVFVSTiB2b2lkIGZvcmJpZGRlbihjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCWh0dHBfc3RhdHVzKDQwMywgIkZvcmJpZGRlbiIpOworCWhkcl9ub2NhY2hlKCk7CisJZW5kX2hlYWRlcnMoKTsKKworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwlpZiAoZXJyICYmICplcnIpCisJCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCWV4aXQoMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNlbGVjdF9nZXRhbnlmaWxlKHZvaWQpCit7CisJaWYgKCFnZXRhbnlmaWxlKQorCQlmb3JiaWRkZW4oIlVuc3VwcG9ydGVkIHNlcnZpY2U6IGdldGFueWZpbGUiKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9zdHJidWYoY29uc3QgY2hhciAqdHlwZSwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWhkcl9pbnQoY29udGVudF9sZW5ndGgsIGJ1Zi0+bGVuKTsKKwloZHJfc3RyKGNvbnRlbnRfdHlwZSwgdHlwZSk7CisJZW5kX2hlYWRlcnMoKTsKKwl3cml0ZV9vcl9kaWUoMSwgYnVmLT5idWYsIGJ1Zi0+bGVuKTsKK30KKworc3RhdGljIHZvaWQgc2VuZF9sb2NhbF9maWxlKGNvbnN0IGNoYXIgKnRoZV90eXBlLCBjb25zdCBjaGFyICpuYW1lKQoreworCWNoYXIgKnAgPSBnaXRfcGF0aGR1cCgiJXMiLCBuYW1lKTsKKwlzaXplX3QgYnVmX2FsbG9jID0gODE5MjsKKwljaGFyICpidWYgPSB4bWFsbG9jKGJ1Zl9hbGxvYyk7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHNiOworCisJZmQgPSBvcGVuKHAsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlub3RfZm91bmQoIkNhbm5vdCBvcGVuICclcyc6ICVzIiwgcCwgc3RyZXJyb3IoZXJybm8pKTsKKwlpZiAoZnN0YXQoZmQsICZzYikgPCAwKQorCQlkaWVfZXJybm8oIkNhbm5vdCBzdGF0ICclcyciLCBwKTsKKworCWhkcl9pbnQoY29udGVudF9sZW5ndGgsIHNiLnN0X3NpemUpOworCWhkcl9zdHIoY29udGVudF90eXBlLCB0aGVfdHlwZSk7CisJaGRyX2RhdGUobGFzdF9tb2RpZmllZCwgc2Iuc3RfbXRpbWUpOworCWVuZF9oZWFkZXJzKCk7CisKKwlmb3IgKDs7KSB7CisJCXNzaXplX3QgbiA9IHhyZWFkKGZkLCBidWYsIGJ1Zl9hbGxvYyk7CisJCWlmIChuIDwgMCkKKwkJCWRpZV9lcnJubygiQ2Fubm90IHJlYWQgJyVzJyIsIHApOworCQlpZiAoIW4pCisJCQlicmVhazsKKwkJd3JpdGVfb3JfZGllKDEsIGJ1Ziwgbik7CisJfQorCWNsb3NlKGZkKTsKKwlmcmVlKGJ1Zik7CisJZnJlZShwKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3RleHRfZmlsZShjaGFyICpuYW1lKQoreworCXNlbGVjdF9nZXRhbnlmaWxlKCk7CisJaGRyX25vY2FjaGUoKTsKKwlzZW5kX2xvY2FsX2ZpbGUoInRleHQvcGxhaW4iLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2xvb3NlX29iamVjdChjaGFyICpuYW1lKQoreworCXNlbGVjdF9nZXRhbnlmaWxlKCk7CisJaGRyX2NhY2hlX2ZvcmV2ZXIoKTsKKwlzZW5kX2xvY2FsX2ZpbGUoImFwcGxpY2F0aW9uL3gtZ2l0LWxvb3NlLW9iamVjdCIsIG5hbWUpOworfQorCitzdGF0aWMgdm9pZCBnZXRfcGFja19maWxlKGNoYXIgKm5hbWUpCit7CisJc2VsZWN0X2dldGFueWZpbGUoKTsKKwloZHJfY2FjaGVfZm9yZXZlcigpOworCXNlbmRfbG9jYWxfZmlsZSgiYXBwbGljYXRpb24veC1naXQtcGFja2VkLW9iamVjdHMiLCBuYW1lKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X2lkeF9maWxlKGNoYXIgKm5hbWUpCit7CisJc2VsZWN0X2dldGFueWZpbGUoKTsKKwloZHJfY2FjaGVfZm9yZXZlcigpOworCXNlbmRfbG9jYWxfZmlsZSgiYXBwbGljYXRpb24veC1naXQtcGFja2VkLW9iamVjdHMtdG9jIiwgbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGh0dHBfY29uZmlnKHZvaWQpCit7CisJaW50IGksIHZhbHVlID0gMDsKKwlzdHJ1Y3Qgc3RyYnVmIHZhciA9IFNUUkJVRl9JTklUOworCisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgiaHR0cC5nZXRhbnlmaWxlIiwgJmdldGFueWZpbGUpOworCWdpdF9jb25maWdfZ2V0X3Vsb25nKCJodHRwLm1heHJlcXVlc3RidWZmZXIiLCAmbWF4X3JlcXVlc3RfYnVmZmVyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJwY19zZXJ2aWNlKTsgaSsrKSB7CisJCXN0cnVjdCBycGNfc2VydmljZSAqc3ZjID0gJnJwY19zZXJ2aWNlW2ldOworCQlzdHJidWZfYWRkZigmdmFyLCAiaHR0cC4lcyIsIHN2Yy0+Y29uZmlnX25hbWUpOworCQlpZiAoIWdpdF9jb25maWdfZ2V0X2Jvb2wodmFyLmJ1ZiwgJnZhbHVlKSkKKwkJCXN2Yy0+ZW5hYmxlZCA9IHZhbHVlOworCQlzdHJidWZfcmVzZXQoJnZhcik7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnZhcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcnBjX3NlcnZpY2UgKnNlbGVjdF9zZXJ2aWNlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY29uc3QgY2hhciAqc3ZjX25hbWU7CisJc3RydWN0IHJwY19zZXJ2aWNlICpzdmMgPSBOVUxMOworCWludCBpOworCisJaWYgKCFza2lwX3ByZWZpeChuYW1lLCAiZ2l0LSIsICZzdmNfbmFtZSkpCisJCWZvcmJpZGRlbigiVW5zdXBwb3J0ZWQgc2VydmljZTogJyVzJyIsIG5hbWUpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnBjX3NlcnZpY2UpOyBpKyspIHsKKwkJc3RydWN0IHJwY19zZXJ2aWNlICpzID0gJnJwY19zZXJ2aWNlW2ldOworCQlpZiAoIXN0cmNtcChzLT5uYW1lLCBzdmNfbmFtZSkpIHsKKwkJCXN2YyA9IHM7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghc3ZjKQorCQlmb3JiaWRkZW4oIlVuc3VwcG9ydGVkIHNlcnZpY2U6ICclcyciLCBuYW1lKTsKKworCWlmIChzdmMtPmVuYWJsZWQgPCAwKSB7CisJCWNvbnN0IGNoYXIgKnVzZXIgPSBnZXRlbnYoIlJFTU9URV9VU0VSIik7CisJCXN2Yy0+ZW5hYmxlZCA9ICh1c2VyICYmICp1c2VyKSA/IDEgOiAwOworCX0KKwlpZiAoIXN2Yy0+ZW5hYmxlZCkKKwkJZm9yYmlkZGVuKCJTZXJ2aWNlIG5vdCBlbmFibGVkOiAnJXMnIiwgc3ZjLT5uYW1lKTsKKwlyZXR1cm4gc3ZjOworfQorCisvKgorICogVGhpcyBpcyBiYXNpY2FsbHkgc3RyYnVmX3JlYWQoKSwgZXhjZXB0IHRoYXQgaWYgd2UKKyAqIGhpdCBtYXhfcmVxdWVzdF9idWZmZXIgd2UgZGllICh3ZSdkIHJhdGhlciByZWplY3QgYQorICogbWFsaWNpb3VzbHkgbGFyZ2UgcmVxdWVzdCB0aGFuIGNoZXcgdXAgaW5maW5pdGUgbWVtb3J5KS4KKyAqLworc3RhdGljIHNzaXplX3QgcmVhZF9yZXF1ZXN0KGludCBmZCwgdW5zaWduZWQgY2hhciAqKm91dCkKK3sKKwlzaXplX3QgbGVuID0gMCwgYWxsb2MgPSA4MTkyOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IHhtYWxsb2MoYWxsb2MpOworCisJaWYgKG1heF9yZXF1ZXN0X2J1ZmZlciA8IGFsbG9jKQorCQltYXhfcmVxdWVzdF9idWZmZXIgPSBhbGxvYzsKKworCXdoaWxlICgxKSB7CisJCXNzaXplX3QgY250OworCisJCWNudCA9IHJlYWRfaW5fZnVsbChmZCwgYnVmICsgbGVuLCBhbGxvYyAtIGxlbik7CisJCWlmIChjbnQgPCAwKSB7CisJCQlmcmVlKGJ1Zik7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQkvKiBwYXJ0aWFsIHJlYWQgZnJvbSByZWFkX2luX2Z1bGwgbWVhbnMgd2UgaGl0IEVPRiAqLworCQlsZW4gKz0gY250OworCQlpZiAobGVuIDwgYWxsb2MpIHsKKwkJCSpvdXQgPSBidWY7CisJCQlyZXR1cm4gbGVuOworCQl9CisKKwkJLyogb3RoZXJ3aXNlLCBncm93IGFuZCB0cnkgYWdhaW4gKGlmIHdlIGNhbikgKi8KKwkJaWYgKGFsbG9jID09IG1heF9yZXF1ZXN0X2J1ZmZlcikKKwkJCWRpZSgicmVxdWVzdCB3YXMgbGFyZ2VyIHRoYW4gb3VyIG1heGltdW0gc2l6ZSAoJWx1KTsiCisJCQkgICAgIiB0cnkgc2V0dGluZyBHSVRfSFRUUF9NQVhfUkVRVUVTVF9CVUZGRVIiLAorCQkJICAgIG1heF9yZXF1ZXN0X2J1ZmZlcik7CisKKwkJYWxsb2MgPSBhbGxvY19ucihhbGxvYyk7CisJCWlmIChhbGxvYyA+IG1heF9yZXF1ZXN0X2J1ZmZlcikKKwkJCWFsbG9jID0gbWF4X3JlcXVlc3RfYnVmZmVyOworCQlSRUFMTE9DX0FSUkFZKGJ1ZiwgYWxsb2MpOworCX0KK30KKworc3RhdGljIHZvaWQgaW5mbGF0ZV9yZXF1ZXN0KGNvbnN0IGNoYXIgKnByb2dfbmFtZSwgaW50IG91dCwgaW50IGJ1ZmZlcl9pbnB1dCkKK3sKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdW5zaWduZWQgY2hhciAqZnVsbF9yZXF1ZXN0ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIGluX2J1Zls4MTkyXTsKKwl1bnNpZ25lZCBjaGFyIG91dF9idWZbODE5Ml07CisJdW5zaWduZWQgbG9uZyBjbnQgPSAwOworCisJbWVtc2V0KCZzdHJlYW0sIDAsIHNpemVvZihzdHJlYW0pKTsKKwlnaXRfaW5mbGF0ZV9pbml0X2d6aXBfb25seSgmc3RyZWFtKTsKKworCXdoaWxlICgxKSB7CisJCXNzaXplX3QgbjsKKworCQlpZiAoYnVmZmVyX2lucHV0KSB7CisJCQlpZiAoZnVsbF9yZXF1ZXN0KQorCQkJCW4gPSAwOyAvKiBub3RoaW5nIGxlZnQgdG8gcmVhZCAqLworCQkJZWxzZQorCQkJCW4gPSByZWFkX3JlcXVlc3QoMCwgJmZ1bGxfcmVxdWVzdCk7CisJCQlzdHJlYW0ubmV4dF9pbiA9IGZ1bGxfcmVxdWVzdDsKKwkJfSBlbHNlIHsKKwkJCW4gPSB4cmVhZCgwLCBpbl9idWYsIHNpemVvZihpbl9idWYpKTsKKwkJCXN0cmVhbS5uZXh0X2luID0gaW5fYnVmOworCQl9CisKKwkJaWYgKG4gPD0gMCkKKwkJCWRpZSgicmVxdWVzdCBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBnemlwIHN0cmVhbSIpOworCQlzdHJlYW0uYXZhaWxfaW4gPSBuOworCisJCXdoaWxlICgwIDwgc3RyZWFtLmF2YWlsX2luKSB7CisJCQlpbnQgcmV0OworCisJCQlzdHJlYW0ubmV4dF9vdXQgPSBvdXRfYnVmOworCQkJc3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihvdXRfYnVmKTsKKworCQkJcmV0ID0gZ2l0X2luZmxhdGUoJnN0cmVhbSwgWl9OT19GTFVTSCk7CisJCQlpZiAocmV0ICE9IFpfT0sgJiYgcmV0ICE9IFpfU1RSRUFNX0VORCkKKwkJCQlkaWUoInpsaWIgZXJyb3IgaW5mbGF0aW5nIHJlcXVlc3QsIHJlc3VsdCAlZCIsIHJldCk7CisKKwkJCW4gPSBzdHJlYW0udG90YWxfb3V0IC0gY250OworCQkJaWYgKHdyaXRlX2luX2Z1bGwob3V0LCBvdXRfYnVmLCBuKSAhPSBuKQorCQkJCWRpZSgiJXMgYWJvcnRlZCByZWFkaW5nIHJlcXVlc3QiLCBwcm9nX25hbWUpOworCQkJY250ICs9IG47CisKKwkJCWlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKQorCQkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworZG9uZToKKwlnaXRfaW5mbGF0ZV9lbmQoJnN0cmVhbSk7CisJY2xvc2Uob3V0KTsKKwlmcmVlKGZ1bGxfcmVxdWVzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfcmVxdWVzdChjb25zdCBjaGFyICpwcm9nX25hbWUsIGludCBvdXQpCit7CisJdW5zaWduZWQgY2hhciAqYnVmOworCXNzaXplX3QgbiA9IHJlYWRfcmVxdWVzdCgwLCAmYnVmKTsKKwlpZiAobiA8IDApCisJCWRpZV9lcnJubygiZXJyb3IgcmVhZGluZyByZXF1ZXN0IGJvZHkiKTsKKwlpZiAod3JpdGVfaW5fZnVsbChvdXQsIGJ1ZiwgbikgIT0gbikKKwkJZGllKCIlcyBhYm9ydGVkIHJlYWRpbmcgcmVxdWVzdCIsIHByb2dfbmFtZSk7CisJY2xvc2Uob3V0KTsKKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHJ1bl9zZXJ2aWNlKGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgYnVmZmVyX2lucHV0KQoreworCWNvbnN0IGNoYXIgKmVuY29kaW5nID0gZ2V0ZW52KCJIVFRQX0NPTlRFTlRfRU5DT0RJTkciKTsKKwljb25zdCBjaGFyICp1c2VyID0gZ2V0ZW52KCJSRU1PVEVfVVNFUiIpOworCWNvbnN0IGNoYXIgKmhvc3QgPSBnZXRlbnYoIlJFTU9URV9BRERSIik7CisJaW50IGd6aXBwZWRfcmVxdWVzdCA9IDA7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgY2xkID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJaWYgKGVuY29kaW5nICYmICFzdHJjbXAoZW5jb2RpbmcsICJnemlwIikpCisJCWd6aXBwZWRfcmVxdWVzdCA9IDE7CisJZWxzZSBpZiAoZW5jb2RpbmcgJiYgIXN0cmNtcChlbmNvZGluZywgIngtZ3ppcCIpKQorCQlnemlwcGVkX3JlcXVlc3QgPSAxOworCisJaWYgKCF1c2VyIHx8ICEqdXNlcikKKwkJdXNlciA9ICJhbm9ueW1vdXMiOworCWlmICghaG9zdCB8fCAhKmhvc3QpCisJCWhvc3QgPSAiKG5vbmUpIjsKKworCWlmICghZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX05BTUUiKSkKKwkJYXJndl9hcnJheV9wdXNoZigmY2xkLmVudl9hcnJheSwgIkdJVF9DT01NSVRURVJfTkFNRT0lcyIsIHVzZXIpOworCWlmICghZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX0VNQUlMIikpCisJCWFyZ3ZfYXJyYXlfcHVzaGYoJmNsZC5lbnZfYXJyYXksCisJCQkJICJHSVRfQ09NTUlUVEVSX0VNQUlMPSVzQGh0dHAuJXMiLCB1c2VyLCBob3N0KTsKKworCWNsZC5hcmd2ID0gYXJndjsKKwlpZiAoYnVmZmVyX2lucHV0IHx8IGd6aXBwZWRfcmVxdWVzdCkKKwkJY2xkLmluID0gLTE7CisJY2xkLmdpdF9jbWQgPSAxOworCWlmIChzdGFydF9jb21tYW5kKCZjbGQpKQorCQlleGl0KDEpOworCisJY2xvc2UoMSk7CisJaWYgKGd6aXBwZWRfcmVxdWVzdCkKKwkJaW5mbGF0ZV9yZXF1ZXN0KGFyZ3ZbMF0sIGNsZC5pbiwgYnVmZmVyX2lucHV0KTsKKwllbHNlIGlmIChidWZmZXJfaW5wdXQpCisJCWNvcHlfcmVxdWVzdChhcmd2WzBdLCBjbGQuaW4pOworCWVsc2UKKwkJY2xvc2UoMCk7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNsZCkpCisJCWV4aXQoMSk7Cit9CisKK3N0YXRpYyBpbnQgc2hvd190ZXh0X3JlZihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJY29uc3QgY2hhciAqbmFtZV9ub25zID0gc3RyaXBfbmFtZXNwYWNlKG5hbWUpOworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IGNiX2RhdGE7CisJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdChvaWQtPmhhc2gpOworCWlmICghbykKKwkJcmV0dXJuIDA7CisKKwlzdHJidWZfYWRkZihidWYsICIlc1x0JXNcbiIsIG9pZF90b19oZXgob2lkKSwgbmFtZV9ub25zKTsKKwlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW8gPSBkZXJlZl90YWcobywgbmFtZSwgMCk7CisJCWlmICghbykKKwkJCXJldHVybiAwOworCQlzdHJidWZfYWRkZihidWYsICIlc1x0JXNee31cbiIsIHNoYTFfdG9faGV4KG8tPnNoYTEpLAorCQkJICAgIG5hbWVfbm9ucyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZXRfaW5mb19yZWZzKGNoYXIgKmFyZykKK3sKKwljb25zdCBjaGFyICpzZXJ2aWNlX25hbWUgPSBnZXRfcGFyYW1ldGVyKCJzZXJ2aWNlIik7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWhkcl9ub2NhY2hlKCk7CisKKwlpZiAoc2VydmljZV9uYW1lKSB7CisJCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHtOVUxMIC8qIHNlcnZpY2UgbmFtZSAqLywKKwkJCSItLXN0YXRlbGVzcy1ycGMiLCAiLS1hZHZlcnRpc2UtcmVmcyIsCisJCQkiLiIsIE5VTEx9OworCQlzdHJ1Y3QgcnBjX3NlcnZpY2UgKnN2YyA9IHNlbGVjdF9zZXJ2aWNlKHNlcnZpY2VfbmFtZSk7CisKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgImFwcGxpY2F0aW9uL3gtZ2l0LSVzLWFkdmVydGlzZW1lbnQiLAorCQkJc3ZjLT5uYW1lKTsKKwkJaGRyX3N0cihjb250ZW50X3R5cGUsIGJ1Zi5idWYpOworCQllbmRfaGVhZGVycygpOworCisJCXBhY2tldF93cml0ZSgxLCAiIyBzZXJ2aWNlPWdpdC0lc1xuIiwgc3ZjLT5uYW1lKTsKKwkJcGFja2V0X2ZsdXNoKDEpOworCisJCWFyZ3ZbMF0gPSBzdmMtPm5hbWU7CisJCXJ1bl9zZXJ2aWNlKGFyZ3YsIDApOworCisJfSBlbHNlIHsKKwkJc2VsZWN0X2dldGFueWZpbGUoKTsKKwkJZm9yX2VhY2hfbmFtZXNwYWNlZF9yZWYoc2hvd190ZXh0X3JlZiwgJmJ1Zik7CisJCXNlbmRfc3RyYnVmKCJ0ZXh0L3BsYWluIiwgJmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgaW50IHNob3dfaGVhZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IGNiX2RhdGE7CisKKwlpZiAoZmxhZyAmIFJFRl9JU1NZTVJFRikgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIHVudXNlZDsKKwkJY29uc3QgY2hhciAqdGFyZ2V0ID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZm5hbWUsCisJCQkJCQkJUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkJCQl1bnVzZWQuaGFzaCwgTlVMTCk7CisJCWNvbnN0IGNoYXIgKnRhcmdldF9ub25zID0gc3RyaXBfbmFtZXNwYWNlKHRhcmdldCk7CisKKwkJc3RyYnVmX2FkZGYoYnVmLCAicmVmOiAlc1xuIiwgdGFyZ2V0X25vbnMpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzXG4iLCBvaWRfdG9faGV4KG9pZCkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZXRfaGVhZChjaGFyICphcmcpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCXNlbGVjdF9nZXRhbnlmaWxlKCk7CisJaGVhZF9yZWZfbmFtZXNwYWNlZChzaG93X2hlYWRfcmVmLCAmYnVmKTsKKwlzZW5kX3N0cmJ1ZigidGV4dC9wbGFpbiIsICZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCBnZXRfaW5mb19wYWNrcyhjaGFyICphcmcpCit7CisJc2l6ZV90IG9iamRpcmxlbiA9IHN0cmxlbihnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCXNpemVfdCBjbnQgPSAwOworCisJc2VsZWN0X2dldGFueWZpbGUoKTsKKwlwcmVwYXJlX3BhY2tlZF9naXQoKTsKKwlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocC0+cGFja19sb2NhbCkKKwkJCWNudCsrOworCX0KKworCXN0cmJ1Zl9ncm93KCZidWYsIGNudCAqIDUzICsgMik7CisJZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPnBhY2tfbG9jYWwpCisJCQlzdHJidWZfYWRkZigmYnVmLCAiUCAlc1xuIiwgcC0+cGFja19uYW1lICsgb2JqZGlybGVuICsgNik7CisJfQorCXN0cmJ1Zl9hZGRjaCgmYnVmLCAnXG4nKTsKKworCWhkcl9ub2NhY2hlKCk7CisJc2VuZF9zdHJidWYoInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiLCAmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfY29udGVudF90eXBlKGNvbnN0IGNoYXIgKmFjY2VwdGVkX3R5cGUpCit7CisJY29uc3QgY2hhciAqYWN0dWFsX3R5cGUgPSBnZXRlbnYoIkNPTlRFTlRfVFlQRSIpOworCisJaWYgKCFhY3R1YWxfdHlwZSkKKwkJYWN0dWFsX3R5cGUgPSAiIjsKKworCWlmIChzdHJjbXAoYWN0dWFsX3R5cGUsIGFjY2VwdGVkX3R5cGUpKSB7CisJCWh0dHBfc3RhdHVzKDQxNSwgIlVuc3VwcG9ydGVkIE1lZGlhIFR5cGUiKTsKKwkJaGRyX25vY2FjaGUoKTsKKwkJZW5kX2hlYWRlcnMoKTsKKwkJZm9ybWF0X3dyaXRlKDEsCisJCQkiRXhwZWN0ZWQgUE9TVCB3aXRoIENvbnRlbnQtVHlwZSAnJXMnLCIKKwkJCSIgYnV0IHJlY2VpdmVkICclcycgaW5zdGVhZC5cbiIsCisJCQlhY2NlcHRlZF90eXBlLCBhY3R1YWxfdHlwZSk7CisJCWV4aXQoMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXJ2aWNlX3JwYyhjaGFyICpzZXJ2aWNlX25hbWUpCit7CisJY29uc3QgY2hhciAqYXJndltdID0ge05VTEwsICItLXN0YXRlbGVzcy1ycGMiLCAiLiIsIE5VTEx9OworCXN0cnVjdCBycGNfc2VydmljZSAqc3ZjID0gc2VsZWN0X3NlcnZpY2Uoc2VydmljZV9uYW1lKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJhcHBsaWNhdGlvbi94LWdpdC0lcy1yZXF1ZXN0Iiwgc3ZjLT5uYW1lKTsKKwljaGVja19jb250ZW50X3R5cGUoYnVmLmJ1Zik7CisKKwloZHJfbm9jYWNoZSgpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJhcHBsaWNhdGlvbi94LWdpdC0lcy1yZXN1bHQiLCBzdmMtPm5hbWUpOworCWhkcl9zdHIoY29udGVudF90eXBlLCBidWYuYnVmKTsKKworCWVuZF9oZWFkZXJzKCk7CisKKwlhcmd2WzBdID0gc3ZjLT5uYW1lOworCXJ1bl9zZXJ2aWNlKGFyZ3YsIHN2Yy0+YnVmZmVyX2lucHV0KTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKworc3RhdGljIGludCBkZWFkOworc3RhdGljIE5PUkVUVVJOIHZvaWQgZGllX3dlYmNnaShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCWlmIChkZWFkIDw9IDEpIHsKKwkJdnJlcG9ydGYoImZhdGFsOiAiLCBlcnIsIHBhcmFtcyk7CisKKwkJaHR0cF9zdGF0dXMoNTAwLCAiSW50ZXJuYWwgU2VydmVyIEVycm9yIik7CisJCWhkcl9ub2NhY2hlKCk7CisJCWVuZF9oZWFkZXJzKCk7CisJfQorCWV4aXQoMCk7IC8qIHdlIHN1Y2Nlc3NmdWxseSByZXBvcnRlZCBhIGZhaWx1cmUgOy0pICovCit9CisKK3N0YXRpYyBpbnQgZGllX3dlYmNnaV9yZWN1cnNpbmcodm9pZCkKK3sKKwlyZXR1cm4gZGVhZCsrID4gMTsKK30KKworc3RhdGljIGNoYXIqIGdldGRpcih2b2lkKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqcGF0aGluZm8gPSBnZXRlbnYoIlBBVEhfSU5GTyIpOworCWNoYXIgKnJvb3QgPSBnZXRlbnYoIkdJVF9QUk9KRUNUX1JPT1QiKTsKKwljaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIX1RSQU5TTEFURUQiKTsKKworCWlmIChyb290ICYmICpyb290KSB7CisJCWlmICghcGF0aGluZm8gfHwgISpwYXRoaW5mbykKKwkJCWRpZSgiR0lUX1BST0pFQ1RfUk9PVCBpcyBzZXQgYnV0IFBBVEhfSU5GTyBpcyBub3QiKTsKKwkJaWYgKGRhZW1vbl9hdm9pZF9hbGlhcyhwYXRoaW5mbykpCisJCQlkaWUoIiclcyc6IGFsaWFzZWQiLCBwYXRoaW5mbyk7CisJCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCByb290KTsKKwkJaWYgKHBhdGhpbmZvWzBdID09ICcvJykKKwkJCXBhdGhpbmZvKys7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcGF0aGluZm8pOworCQlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKwl9IGVsc2UgaWYgKHBhdGggJiYgKnBhdGgpIHsKKwkJcmV0dXJuIHhzdHJkdXAocGF0aCk7CisJfSBlbHNlCisJCWRpZSgiTm8gR0lUX1BST0pFQ1RfUk9PVCBvciBQQVRIX1RSQU5TTEFURUQgZnJvbSBzZXJ2ZXIiKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBzZXJ2aWNlX2NtZCB7CisJY29uc3QgY2hhciAqbWV0aG9kOworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJdm9pZCAoKmltcCkoY2hhciAqKTsKK30gc2VydmljZXNbXSA9IHsKKwl7IkdFVCIsICIvSEVBRCQiLCBnZXRfaGVhZH0sCisJeyJHRVQiLCAiL2luZm8vcmVmcyQiLCBnZXRfaW5mb19yZWZzfSwKKwl7IkdFVCIsICIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMkIiwgZ2V0X3RleHRfZmlsZX0sCisJeyJHRVQiLCAiL29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMkIiwgZ2V0X3RleHRfZmlsZX0sCisJeyJHRVQiLCAiL29iamVjdHMvaW5mby9wYWNrcyQiLCBnZXRfaW5mb19wYWNrc30sCisJeyJHRVQiLCAiL29iamVjdHMvWzAtOWEtZl17Mn0vWzAtOWEtZl17Mzh9JCIsIGdldF9sb29zZV9vYmplY3R9LAorCXsiR0VUIiwgIi9vYmplY3RzL3BhY2svcGFjay1bMC05YS1mXXs0MH1cXC5wYWNrJCIsIGdldF9wYWNrX2ZpbGV9LAorCXsiR0VUIiwgIi9vYmplY3RzL3BhY2svcGFjay1bMC05YS1mXXs0MH1cXC5pZHgkIiwgZ2V0X2lkeF9maWxlfSwKKworCXsiUE9TVCIsICIvZ2l0LXVwbG9hZC1wYWNrJCIsIHNlcnZpY2VfcnBjfSwKKwl7IlBPU1QiLCAiL2dpdC1yZWNlaXZlLXBhY2skIiwgc2VydmljZV9ycGN9Cit9OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY2hhciAqbWV0aG9kID0gZ2V0ZW52KCJSRVFVRVNUX01FVEhPRCIpOworCWNoYXIgKmRpcjsKKwlzdHJ1Y3Qgc2VydmljZV9jbWQgKmNtZCA9IE5VTEw7CisJY2hhciAqY21kX2FyZyA9IE5VTEw7CisJaW50IGk7CisKKwlnaXRfc2V0dXBfZ2V0dGV4dCgpOworCisJZ2l0X2V4dHJhY3RfYXJndjBfcGF0aChhcmd2WzBdKTsKKwlzZXRfZGllX3JvdXRpbmUoZGllX3dlYmNnaSk7CisJc2V0X2RpZV9pc19yZWN1cnNpbmdfcm91dGluZShkaWVfd2ViY2dpX3JlY3Vyc2luZyk7CisKKwlpZiAoIW1ldGhvZCkKKwkJZGllKCJObyBSRVFVRVNUX01FVEhPRCBmcm9tIHNlcnZlciIpOworCWlmICghc3RyY21wKG1ldGhvZCwgIkhFQUQiKSkKKwkJbWV0aG9kID0gIkdFVCI7CisJZGlyID0gZ2V0ZGlyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZXJ2aWNlcyk7IGkrKykgeworCQlzdHJ1Y3Qgc2VydmljZV9jbWQgKmMgPSAmc2VydmljZXNbaV07CisJCXJlZ2V4X3QgcmU7CisJCXJlZ21hdGNoX3Qgb3V0WzFdOworCisJCWlmIChyZWdjb21wKCZyZSwgYy0+cGF0dGVybiwgUkVHX0VYVEVOREVEKSkKKwkJCWRpZSgiQm9ndXMgcmVnZXggaW4gc2VydmljZSB0YWJsZTogJXMiLCBjLT5wYXR0ZXJuKTsKKwkJaWYgKCFyZWdleGVjKCZyZSwgZGlyLCAxLCBvdXQsIDApKSB7CisJCQlzaXplX3QgbjsKKworCQkJaWYgKHN0cmNtcChtZXRob2QsIGMtPm1ldGhvZCkpIHsKKwkJCQljb25zdCBjaGFyICpwcm90byA9IGdldGVudigiU0VSVkVSX1BST1RPQ09MIik7CisJCQkJaWYgKHByb3RvICYmICFzdHJjbXAocHJvdG8sICJIVFRQLzEuMSIpKSB7CisJCQkJCWh0dHBfc3RhdHVzKDQwNSwgIk1ldGhvZCBOb3QgQWxsb3dlZCIpOworCQkJCQloZHJfc3RyKCJBbGxvdyIsICFzdHJjbXAoYy0+bWV0aG9kLCAiR0VUIikgPworCQkJCQkJIkdFVCwgSEVBRCIgOiBjLT5tZXRob2QpOworCQkJCX0gZWxzZQorCQkJCQlodHRwX3N0YXR1cyg0MDAsICJCYWQgUmVxdWVzdCIpOworCQkJCWhkcl9ub2NhY2hlKCk7CisJCQkJZW5kX2hlYWRlcnMoKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJY21kID0gYzsKKwkJCW4gPSBvdXRbMF0ucm1fZW8gLSBvdXRbMF0ucm1fc287CisJCQljbWRfYXJnID0geG1lbWR1cHooZGlyICsgb3V0WzBdLnJtX3NvICsgMSwgbiAtIDEpOworCQkJZGlyW291dFswXS5ybV9zb10gPSAwOworCQkJYnJlYWs7CisJCX0KKwkJcmVnZnJlZSgmcmUpOworCX0KKworCWlmICghY21kKQorCQlub3RfZm91bmQoIlJlcXVlc3Qgbm90IHN1cHBvcnRlZDogJyVzJyIsIGRpcik7CisKKwlzZXR1cF9wYXRoKCk7CisJaWYgKCFlbnRlcl9yZXBvKGRpciwgMCkpCisJCW5vdF9mb3VuZCgiTm90IGEgZ2l0IHJlcG9zaXRvcnk6ICclcyciLCBkaXIpOworCWlmICghZ2V0ZW52KCJHSVRfSFRUUF9FWFBPUlRfQUxMIikgJiYKKwkgICAgYWNjZXNzKCJnaXQtZGFlbW9uLWV4cG9ydC1vayIsIEZfT0spICkKKwkJbm90X2ZvdW5kKCJSZXBvc2l0b3J5IG5vdCBleHBvcnRlZDogJyVzJyIsIGRpcik7CisKKwlodHRwX2NvbmZpZygpOworCW1heF9yZXF1ZXN0X2J1ZmZlciA9IGdpdF9lbnZfdWxvbmcoIkdJVF9IVFRQX01BWF9SRVFVRVNUX0JVRkZFUiIsCisJCQkJCSAgIG1heF9yZXF1ZXN0X2J1ZmZlcik7CisKKwljbWQtPmltcChjbWRfYXJnKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2h0dHAtZmV0Y2guYyBiL2h0dHAtZmV0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTNlYTEwCi0tLSAvZGV2L251bGwKKysrIGIvaHR0cC1mZXRjaC5jCkBAIC0wLDAgKzEsOTggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAiaHR0cC5oIgorI2luY2x1ZGUgIndhbGtlci5oIgorCitzdGF0aWMgY29uc3QgY2hhciBodHRwX2ZldGNoX3VzYWdlW10gPSAiZ2l0IGh0dHAtZmV0Y2ggIgorIlstY10gWy10XSBbLWFdIFstdl0gWy0tcmVjb3Zlcl0gWy13IHJlZl0gWy0tc3RkaW5dIGNvbW1pdC1pZCB1cmwiOworCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHdhbGtlciAqd2Fsa2VyOworCWludCBjb21taXRzX29uX3N0ZGluID0gMDsKKwlpbnQgY29tbWl0czsKKwljb25zdCBjaGFyICoqd3JpdGVfcmVmID0gTlVMTDsKKwljaGFyICoqY29tbWl0X2lkOworCWNoYXIgKnVybCA9IE5VTEw7CisJaW50IGFyZyA9IDE7CisJaW50IHJjID0gMDsKKwlpbnQgZ2V0X3RyZWUgPSAwOworCWludCBnZXRfaGlzdG9yeSA9IDA7CisJaW50IGdldF9hbGwgPSAwOworCWludCBnZXRfdmVyYm9zZWx5ID0gMDsKKwlpbnQgZ2V0X3JlY292ZXIgPSAwOworCisJZ2l0X3NldHVwX2dldHRleHQoKTsKKworCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisKKwl3aGlsZSAoYXJnIDwgYXJnYyAmJiBhcmd2W2FyZ11bMF0gPT0gJy0nKSB7CisJCWlmIChhcmd2W2FyZ11bMV0gPT0gJ3QnKSB7CisJCQlnZXRfdHJlZSA9IDE7CisJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICdjJykgeworCQkJZ2V0X2hpc3RvcnkgPSAxOworCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAnYScpIHsKKwkJCWdldF9hbGwgPSAxOworCQkJZ2V0X3RyZWUgPSAxOworCQkJZ2V0X2hpc3RvcnkgPSAxOworCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndicpIHsKKwkJCWdldF92ZXJib3NlbHkgPSAxOworCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAndycpIHsKKwkJCXdyaXRlX3JlZiA9ICZhcmd2W2FyZyArIDFdOworCQkJYXJnKys7CisJCX0gZWxzZSBpZiAoYXJndlthcmddWzFdID09ICdoJykgeworCQkJdXNhZ2UoaHR0cF9mZXRjaF91c2FnZSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2FyZ10sICItLXJlY292ZXIiKSkgeworCQkJZ2V0X3JlY292ZXIgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlthcmddLCAiLS1zdGRpbiIpKSB7CisJCQljb21taXRzX29uX3N0ZGluID0gMTsKKwkJfQorCQlhcmcrKzsKKwl9CisJaWYgKGFyZ2MgIT0gYXJnICsgMiAtIGNvbW1pdHNfb25fc3RkaW4pCisJCXVzYWdlKGh0dHBfZmV0Y2hfdXNhZ2UpOworCWlmIChjb21taXRzX29uX3N0ZGluKSB7CisJCWNvbW1pdHMgPSB3YWxrZXJfdGFyZ2V0c19zdGRpbigmY29tbWl0X2lkLCAmd3JpdGVfcmVmKTsKKwl9IGVsc2UgeworCQljb21taXRfaWQgPSAoY2hhciAqKikgJmFyZ3ZbYXJnKytdOworCQljb21taXRzID0gMTsKKwl9CisKKwlpZiAoZ2V0X2FsbCA9PSAwKQorCQl3YXJuaW5nKCJodHRwLWZldGNoOiB1c2Ugd2l0aG91dCAtYSBpcyBkZXByZWNhdGVkLlxuIgorCQkJIkluIGEgZnV0dXJlIHJlbGVhc2UsIC1hIHdpbGwgYmVjb21lIHRoZSBkZWZhdWx0LiIpOworCisJaWYgKGFyZ3ZbYXJnXSkKKwkJc3RyX2VuZF91cmxfd2l0aF9zbGFzaChhcmd2W2FyZ10sICZ1cmwpOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCisJaHR0cF9pbml0KE5VTEwsIHVybCwgMCk7CisJd2Fsa2VyID0gZ2V0X2h0dHBfd2Fsa2VyKHVybCk7CisJd2Fsa2VyLT5nZXRfdHJlZSA9IGdldF90cmVlOworCXdhbGtlci0+Z2V0X2hpc3RvcnkgPSBnZXRfaGlzdG9yeTsKKwl3YWxrZXItPmdldF9hbGwgPSBnZXRfYWxsOworCXdhbGtlci0+Z2V0X3ZlcmJvc2VseSA9IGdldF92ZXJib3NlbHk7CisJd2Fsa2VyLT5nZXRfcmVjb3ZlciA9IGdldF9yZWNvdmVyOworCisJcmMgPSB3YWxrZXJfZmV0Y2god2Fsa2VyLCBjb21taXRzLCBjb21taXRfaWQsIHdyaXRlX3JlZiwgdXJsKTsKKworCWlmIChjb21taXRzX29uX3N0ZGluKQorCQl3YWxrZXJfdGFyZ2V0c19mcmVlKGNvbW1pdHMsIGNvbW1pdF9pZCwgd3JpdGVfcmVmKTsKKworCWlmICh3YWxrZXItPmNvcnJ1cHRfb2JqZWN0X2ZvdW5kKSB7CisJCWZwcmludGYoc3RkZXJyLAorIlNvbWUgbG9vc2Ugb2JqZWN0IHdlcmUgZm91bmQgdG8gYmUgY29ycnVwdCwgYnV0IHRoZXkgbWlnaHQgYmUganVzdFxuIgorImEgZmFsc2UgJzQwNCBOb3QgRm91bmQnIGVycm9yIG1lc3NhZ2Ugc2VudCB3aXRoIGluY29ycmVjdCBIVFRQXG4iCisic3RhdHVzIGNvZGUuICBTdWdnZXN0IHJ1bm5pbmcgJ2dpdCBmc2NrJy5cbiIpOworCX0KKworCXdhbGtlcl9mcmVlKHdhbGtlcik7CisJaHR0cF9jbGVhbnVwKCk7CisKKwlmcmVlKHVybCk7CisKKwlyZXR1cm4gcmM7Cit9CmRpZmYgLS1naXQgYS9odHRwLXB1c2guYyBiL2h0dHAtcHVzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjM5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9odHRwLXB1c2guYwpAQCAtMCwwICsxLDIwMDMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKKyNpZmRlZiBFWFBBVF9ORUVEU19YTUxQQVJTRV9ICisjaW5jbHVkZSA8eG1scGFyc2UuaD4KKyNlbHNlCisjaW5jbHVkZSA8ZXhwYXQuaD4KKyNlbmRpZgorCitzdGF0aWMgY29uc3QgY2hhciBodHRwX3B1c2hfdXNhZ2VbXSA9CisiZ2l0IGh0dHAtcHVzaCBbLS1hbGxdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS12ZXJib3NlXSA8cmVtb3RlPiBbPGhlYWQ+Li4uXVxuIjsKKworI2lmbmRlZiBYTUxfU1RBVFVTX09LCitlbnVtIFhNTF9TdGF0dXMgeworICBYTUxfU1RBVFVTX09LID0gMSwKKyAgWE1MX1NUQVRVU19FUlJPUiA9IDAKK307CisjZGVmaW5lIFhNTF9TVEFUVVNfT0sgICAgMQorI2RlZmluZSBYTUxfU1RBVFVTX0VSUk9SIDAKKyNlbmRpZgorCisjZGVmaW5lIFBSRVZfQlVGX1NJWkUgNDA5NgorCisvKiBEQVYgbWV0aG9kcyAqLworI2RlZmluZSBEQVZfTE9DSyAiTE9DSyIKKyNkZWZpbmUgREFWX01LQ09MICJNS0NPTCIKKyNkZWZpbmUgREFWX01PVkUgIk1PVkUiCisjZGVmaW5lIERBVl9QUk9QRklORCAiUFJPUEZJTkQiCisjZGVmaW5lIERBVl9QVVQgIlBVVCIKKyNkZWZpbmUgREFWX1VOTE9DSyAiVU5MT0NLIgorI2RlZmluZSBEQVZfREVMRVRFICJERUxFVEUiCisKKy8qIERBViBsb2NrIGZsYWdzICovCisjZGVmaW5lIERBVl9QUk9QX0xPQ0tXUiAoMXUgPDwgMCkKKyNkZWZpbmUgREFWX1BST1BfTE9DS0VYICgxdSA8PCAxKQorI2RlZmluZSBEQVZfTE9DS19PSyAoMXUgPDwgMikKKworLyogREFWIFhNTCBwcm9wZXJ0aWVzICovCisjZGVmaW5lIERBVl9DVFhfTE9DS0VOVFJZICIubXVsdGlzdGF0dXMucmVzcG9uc2UucHJvcHN0YXQucHJvcC5zdXBwb3J0ZWRsb2NrLmxvY2tlbnRyeSIKKyNkZWZpbmUgREFWX0NUWF9MT0NLVFlQRV9XUklURSAiLm11bHRpc3RhdHVzLnJlc3BvbnNlLnByb3BzdGF0LnByb3Auc3VwcG9ydGVkbG9jay5sb2NrZW50cnkubG9ja3R5cGUud3JpdGUiCisjZGVmaW5lIERBVl9DVFhfTE9DS1RZUEVfRVhDTFVTSVZFICIubXVsdGlzdGF0dXMucmVzcG9uc2UucHJvcHN0YXQucHJvcC5zdXBwb3J0ZWRsb2NrLmxvY2tlbnRyeS5sb2Nrc2NvcGUuZXhjbHVzaXZlIgorI2RlZmluZSBEQVZfQUNUSVZFTE9DS19PV05FUiAiLnByb3AubG9ja2Rpc2NvdmVyeS5hY3RpdmVsb2NrLm93bmVyLmhyZWYiCisjZGVmaW5lIERBVl9BQ1RJVkVMT0NLX1RJTUVPVVQgIi5wcm9wLmxvY2tkaXNjb3ZlcnkuYWN0aXZlbG9jay50aW1lb3V0IgorI2RlZmluZSBEQVZfQUNUSVZFTE9DS19UT0tFTiAiLnByb3AubG9ja2Rpc2NvdmVyeS5hY3RpdmVsb2NrLmxvY2t0b2tlbi5ocmVmIgorI2RlZmluZSBEQVZfUFJPUEZJTkRfUkVTUCAiLm11bHRpc3RhdHVzLnJlc3BvbnNlIgorI2RlZmluZSBEQVZfUFJPUEZJTkRfTkFNRSAiLm11bHRpc3RhdHVzLnJlc3BvbnNlLmhyZWYiCisjZGVmaW5lIERBVl9QUk9QRklORF9DT0xMRUNUSU9OICIubXVsdGlzdGF0dXMucmVzcG9uc2UucHJvcHN0YXQucHJvcC5yZXNvdXJjZXR5cGUuY29sbGVjdGlvbiIKKworLyogREFWIHJlcXVlc3QgYm9keSB0ZW1wbGF0ZXMgKi8KKyNkZWZpbmUgUFJPUEZJTkRfU1VQUE9SVEVETE9DS19SRVFVRVNUICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiID8+XG48RDpwcm9wZmluZCB4bWxuczpEPVwiREFWOlwiPlxuPEQ6cHJvcCB4bWxuczpSPVwiJXNcIj5cbjxEOnN1cHBvcnRlZGxvY2svPlxuPC9EOnByb3A+XG48L0Q6cHJvcGZpbmQ+IgorI2RlZmluZSBQUk9QRklORF9BTExfUkVRVUVTVCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwidXRmLThcIiA/PlxuPEQ6cHJvcGZpbmQgeG1sbnM6RD1cIkRBVjpcIj5cbjxEOmFsbHByb3AvPlxuPC9EOnByb3BmaW5kPiIKKyNkZWZpbmUgTE9DS19SRVFVRVNUICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiID8+XG48RDpsb2NraW5mbyB4bWxuczpEPVwiREFWOlwiPlxuPEQ6bG9ja3Njb3BlPjxEOmV4Y2x1c2l2ZS8+PC9EOmxvY2tzY29wZT5cbjxEOmxvY2t0eXBlPjxEOndyaXRlLz48L0Q6bG9ja3R5cGU+XG48RDpvd25lcj5cbjxEOmhyZWY+bWFpbHRvOiVzPC9EOmhyZWY+XG48L0Q6b3duZXI+XG48L0Q6bG9ja2luZm8+IgorCisjZGVmaW5lIExPQ0tfVElNRSA2MDAKKyNkZWZpbmUgTE9DS19SRUZSRVNIIDMwCisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIExPQ0FMICAgICgxdTw8MTYpCisjZGVmaW5lIFJFTU9URSAgICgxdTw8MTcpCisjZGVmaW5lIEZFVENISU5HICgxdTw8MTgpCisjZGVmaW5lIFBVU0hJTkcgICgxdTw8MTkpCisKKy8qIFdlIGFsbG93ICJyZWN1cnNpdmUiIHN5bWJvbGljIHJlZnMuIE9ubHkgd2l0aGluIHJlYXNvbiwgdGhvdWdoICovCisjZGVmaW5lIE1BWERFUFRIIDUKKworc3RhdGljIGludCBwdXNoaW5nOworc3RhdGljIGludCBhYm9ydGVkOworc3RhdGljIHNpZ25lZCBjaGFyIHJlbW90ZV9kaXJfZXhpc3RzWzI1Nl07CisKK3N0YXRpYyBpbnQgcHVzaF92ZXJib3NlbHk7CitzdGF0aWMgaW50IHB1c2hfYWxsID0gTUFUQ0hfUkVGU19OT05FOworc3RhdGljIGludCBmb3JjZV9hbGw7CitzdGF0aWMgaW50IGRyeV9ydW47CitzdGF0aWMgaW50IGhlbHBlcl9zdGF0dXM7CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKm9iamVjdHM7CisKK3N0cnVjdCByZXBvIHsKKwljaGFyICp1cmw7CisJY2hhciAqcGF0aDsKKwlpbnQgcGF0aF9sZW47CisJaW50IGhhc19pbmZvX3JlZnM7CisJaW50IGNhbl91cGRhdGVfaW5mb19yZWZzOworCWludCBoYXNfaW5mb19wYWNrczsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja3M7CisJc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVwbyAqcmVwbzsKKworZW51bSB0cmFuc2Zlcl9zdGF0ZSB7CisJTkVFRF9GRVRDSCwKKwlSVU5fRkVUQ0hfTE9PU0UsCisJUlVOX0ZFVENIX1BBQ0tFRCwKKwlORUVEX1BVU0gsCisJUlVOX01LQ09MLAorCVJVTl9QVVQsCisJUlVOX01PVkUsCisJQUJPUlRFRCwKKwlDT01QTEVURQorfTsKKworc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgeworCXN0cnVjdCBvYmplY3QgKm9iajsKKwljaGFyICp1cmw7CisJY2hhciAqZGVzdDsKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2s7CisJc3RydWN0IGN1cmxfc2xpc3QgKmhlYWRlcnM7CisJc3RydWN0IGJ1ZmZlciBidWZmZXI7CisJZW51bSB0cmFuc2Zlcl9zdGF0ZSBzdGF0ZTsKKwlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKKwljaGFyIGVycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CisJbG9uZyBodHRwX2NvZGU7CisJdm9pZCAqdXNlckRhdGE7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3RfcXVldWVfaGVhZDsKKworc3RydWN0IHhtbF9jdHggeworCWNoYXIgKm5hbWU7CisJaW50IGxlbjsKKwljaGFyICpjZGF0YTsKKwl2b2lkICgqdXNlckZ1bmMpKHN0cnVjdCB4bWxfY3R4ICpjdHgsIGludCB0YWdfY2xvc2VkKTsKKwl2b2lkICp1c2VyRGF0YTsKK307CisKK3N0cnVjdCByZW1vdGVfbG9jayB7CisJY2hhciAqdXJsOworCWNoYXIgKm93bmVyOworCWNoYXIgKnRva2VuOworCWNoYXIgdG1wZmlsZV9zdWZmaXhbNDFdOworCXRpbWVfdCBzdGFydF90aW1lOworCWxvbmcgdGltZW91dDsKKwlpbnQgcmVmcmVzaGluZzsKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKm5leHQ7Cit9OworCisvKiBGbGFncyB0aGF0IGNvbnRyb2wgcmVtb3RlX2xzIHByb2Nlc3NpbmcgKi8KKyNkZWZpbmUgUFJPQ0VTU19GSUxFUyAoMXUgPDwgMCkKKyNkZWZpbmUgUFJPQ0VTU19ESVJTICAoMXUgPDwgMSkKKyNkZWZpbmUgUkVDVVJTSVZFICAgICAoMXUgPDwgMikKKworLyogRmxhZ3MgdGhhdCByZW1vdGVfbHMgcGFzc2VzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLworI2RlZmluZSBJU19ESVIgKDF1IDw8IDApCisKK3N0cnVjdCByZW1vdGVfbHNfY3R4IHsKKwljaGFyICpwYXRoOworCXZvaWQgKCp1c2VyRnVuYykoc3RydWN0IHJlbW90ZV9sc19jdHggKmxzKTsKKwl2b2lkICp1c2VyRGF0YTsKKwlpbnQgZmxhZ3M7CisJY2hhciAqZGVudHJ5X25hbWU7CisJaW50IGRlbnRyeV9mbGFnczsKKwlzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqcGFyZW50OworfTsKKworLyogZ2V0X2Rhdl90b2tlbl9oZWFkZXJzIG9wdGlvbnMgKi8KK2VudW0gZGF2X2hlYWRlcl9mbGFnIHsKKwlEQVZfSEVBREVSX0lGID0gKDF1IDw8IDApLAorCURBVl9IRUFERVJfTE9DSyA9ICgxdSA8PCAxKSwKKwlEQVZfSEVBREVSX1RJTUVPVVQgPSAoMXUgPDwgMikKK307CisKK3N0YXRpYyBjaGFyICp4bWxfZW50aXRpZXMoY29uc3QgY2hhciAqcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRzdHJfeG1sX3F1b3RlZCgmYnVmLCBzKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgY3VybF9zZXR1cF9odHRwX2dldChDVVJMICpjdXJsLCBjb25zdCBjaGFyICp1cmwsCisJCWNvbnN0IGNoYXIgKmN1c3RvbV9yZXEpCit7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0hUVFBHRVQsIDEpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VUkwsIHVybCk7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0NVU1RPTVJFUVVFU1QsIGN1c3RvbV9yZXEpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGVfbnVsbCk7Cit9CisKK3N0YXRpYyB2b2lkIGN1cmxfc2V0dXBfaHR0cChDVVJMICpjdXJsLCBjb25zdCBjaGFyICp1cmwsCisJCWNvbnN0IGNoYXIgKmN1c3RvbV9yZXEsIHN0cnVjdCBidWZmZXIgKmJ1ZmZlciwKKwkJY3VybF93cml0ZV9jYWxsYmFjayB3cml0ZV9mbikKK3sKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUFVULCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JTkZJTEUsIGJ1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0lORklMRVNJWkUsIGJ1ZmZlci0+YnVmLmxlbik7CisJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgZnJlYWRfYnVmZmVyKTsKKyNpZm5kZWYgTk9fQ1VSTF9JT0NUTAorCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBpb2N0bF9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9JT0NUTERBVEEsIGJ1ZmZlcik7CisjZW5kaWYKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgd3JpdGVfZm4pOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9OT0JPRFksIDApOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9DVVNUT01SRVFVRVNULCBjdXN0b21fcmVxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVBMT0FELCAxKTsKK30KKworc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpnZXRfZGF2X3Rva2VuX2hlYWRlcnMoc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrLCBlbnVtIGRhdl9oZWFkZXJfZmxhZyBvcHRpb25zKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gTlVMTDsKKworCWlmIChvcHRpb25zICYgREFWX0hFQURFUl9JRikgeworCQlzdHJidWZfYWRkZigmYnVmLCAiSWY6ICg8JXM+KSIsIGxvY2stPnRva2VuKTsKKwkJZGF2X2hlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChkYXZfaGVhZGVycywgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisJaWYgKG9wdGlvbnMgJiBEQVZfSEVBREVSX0xPQ0spIHsKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgIkxvY2stVG9rZW46IDwlcz4iLCBsb2NrLT50b2tlbik7CisJCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIGJ1Zi5idWYpOworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJfQorCWlmIChvcHRpb25zICYgREFWX0hFQURFUl9USU1FT1VUKSB7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICJUaW1lb3V0OiBTZWNvbmQtJWxkIiwgbG9jay0+dGltZW91dCk7CisJCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIGJ1Zi5idWYpOworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIGRhdl9oZWFkZXJzOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfcmVxdWVzdChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCk7CitzdGF0aWMgdm9pZCByZWxlYXNlX3JlcXVlc3Qoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpOworCitzdGF0aWMgdm9pZCBwcm9jZXNzX3Jlc3BvbnNlKHZvaWQgKmNhbGxiYWNrX2RhdGEpCit7CisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QgPQorCQkoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKiljYWxsYmFja19kYXRhOworCisJZmluaXNoX3JlcXVlc3QocmVxdWVzdCk7Cit9CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCitzdGF0aWMgdm9pZCBzdGFydF9mZXRjaF9sb29zZShzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqb2JqX3JlcTsKKworCW9ial9yZXEgPSBuZXdfaHR0cF9vYmplY3RfcmVxdWVzdChyZXBvLT51cmwsIHJlcXVlc3QtPm9iai0+c2hhMSk7CisJaWYgKG9ial9yZXEgPT0gTlVMTCkgeworCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCXJldHVybjsKKwl9CisKKwlzbG90ID0gb2JqX3JlcS0+c2xvdDsKKwlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19yZXNwb25zZTsKKwlzbG90LT5jYWxsYmFja19kYXRhID0gcmVxdWVzdDsKKwlyZXF1ZXN0LT5zbG90ID0gc2xvdDsKKwlyZXF1ZXN0LT51c2VyRGF0YSA9IG9ial9yZXE7CisKKwkvKiBUcnkgdG8gZ2V0IHRoZSByZXF1ZXN0IHN0YXJ0ZWQsIGFib3J0IHRoZSByZXF1ZXN0IG9uIGVycm9yICovCisJcmVxdWVzdC0+c3RhdGUgPSBSVU5fRkVUQ0hfTE9PU0U7CisJaWYgKCFzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBHRVQgcmVxdWVzdFxuIik7CisJCXJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKKwkJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOworCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdGFydF9ta2NvbChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwljaGFyICpoZXggPSBzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCisJcmVxdWVzdC0+dXJsID0gZ2V0X3JlbW90ZV9vYmplY3RfdXJsKHJlcG8tPnVybCwgaGV4LCAxKTsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19yZXNwb25zZTsKKwlzbG90LT5jYWxsYmFja19kYXRhID0gcmVxdWVzdDsKKwljdXJsX3NldHVwX2h0dHBfZ2V0KHNsb3QtPmN1cmwsIHJlcXVlc3QtPnVybCwgREFWX01LQ09MKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRVJST1JCVUZGRVIsIHJlcXVlc3QtPmVycm9yc3RyKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlyZXF1ZXN0LT5zbG90ID0gc2xvdDsKKwkJcmVxdWVzdC0+c3RhdGUgPSBSVU5fTUtDT0w7CisJfSBlbHNlIHsKKwkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQlmcmVlKHJlcXVlc3QtPnVybCk7CisJCXJlcXVlc3QtPnVybCA9IE5VTEw7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHN0YXJ0X2ZldGNoX3BhY2tlZChzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0OworCisJc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKmNoZWNrX3JlcXVlc3QgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisJc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxOworCisJdGFyZ2V0ID0gZmluZF9zaGExX3BhY2socmVxdWVzdC0+b2JqLT5zaGExLCByZXBvLT5wYWNrcyk7CisJaWYgKCF0YXJnZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZmV0Y2ggJXMsIHdpbGwgbm90IGJlIGFibGUgdG8gdXBkYXRlIHNlcnZlciBpbmZvIHJlZnNcbiIsIHNoYTFfdG9faGV4KHJlcXVlc3QtPm9iai0+c2hhMSkpOworCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwkJcmV0dXJuOworCX0KKworCWZwcmludGYoc3RkZXJyLAkiRmV0Y2hpbmcgcGFjayAlc1xuIiwgc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSk7CisJZnByaW50ZihzdGRlcnIsICIgd2hpY2ggY29udGFpbnMgJXNcbiIsIHNoYTFfdG9faGV4KHJlcXVlc3QtPm9iai0+c2hhMSkpOworCisJcHJlcSA9IG5ld19odHRwX3BhY2tfcmVxdWVzdCh0YXJnZXQsIHJlcG8tPnVybCk7CisJaWYgKHByZXEgPT0gTlVMTCkgeworCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJldHVybjsKKwl9CisJcHJlcS0+bHN0ID0gJnJlcG8tPnBhY2tzOworCisJLyogTWFrZSBzdXJlIHRoZXJlIGlzbid0IGFub3RoZXIgb3BlbiByZXF1ZXN0IGZvciB0aGlzIHBhY2sgKi8KKwl3aGlsZSAoY2hlY2tfcmVxdWVzdCkgeworCQlpZiAoY2hlY2tfcmVxdWVzdC0+c3RhdGUgPT0gUlVOX0ZFVENIX1BBQ0tFRCAmJgorCQkgICAgIXN0cmNtcChjaGVja19yZXF1ZXN0LT51cmwsIHByZXEtPnVybCkpIHsKKwkJCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CisJCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCQlyZXR1cm47CisJCX0KKwkJY2hlY2tfcmVxdWVzdCA9IGNoZWNrX3JlcXVlc3QtPm5leHQ7CisJfQorCisJcHJlcS0+c2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfcmVzcG9uc2U7CisJcHJlcS0+c2xvdC0+Y2FsbGJhY2tfZGF0YSA9IHJlcXVlc3Q7CisJcmVxdWVzdC0+c2xvdCA9IHByZXEtPnNsb3Q7CisJcmVxdWVzdC0+dXNlckRhdGEgPSBwcmVxOworCisJLyogVHJ5IHRvIGdldCB0aGUgcmVxdWVzdCBzdGFydGVkLCBhYm9ydCB0aGUgcmVxdWVzdCBvbiBlcnJvciAqLworCXJlcXVlc3QtPnN0YXRlID0gUlVOX0ZFVENIX1BBQ0tFRDsKKwlpZiAoIXN0YXJ0X2FjdGl2ZV9zbG90KHByZXEtPnNsb3QpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHN0YXJ0IEdFVCByZXF1ZXN0XG4iKTsKKwkJcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChwcmVxKTsKKwkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAwOworCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzdGFydF9wdXQoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJY2hhciAqaGV4ID0gc2hhMV90b19oZXgocmVxdWVzdC0+b2JqLT5zaGExKTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljaGFyIGhkcls1MF07CisJdm9pZCAqdW5wYWNrZWQ7CisJdW5zaWduZWQgbG9uZyBsZW47CisJaW50IGhkcmxlbjsKKwlzc2l6ZV90IHNpemU7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCisJdW5wYWNrZWQgPSByZWFkX3NoYTFfZmlsZShyZXF1ZXN0LT5vYmotPnNoYTEsICZ0eXBlLCAmbGVuKTsKKwloZHJsZW4gPSB4c25wcmludGYoaGRyLCBzaXplb2YoaGRyKSwgIiVzICVsdSIsIHR5cGVuYW1lKHR5cGUpLCBsZW4pICsgMTsKKworCS8qIFNldCBpdCB1cCAqLworCWdpdF9kZWZsYXRlX2luaXQoJnN0cmVhbSwgemxpYl9jb21wcmVzc2lvbl9sZXZlbCk7CisJc2l6ZSA9IGdpdF9kZWZsYXRlX2JvdW5kKCZzdHJlYW0sIGxlbiArIGhkcmxlbik7CisJc3RyYnVmX2luaXQoJnJlcXVlc3QtPmJ1ZmZlci5idWYsIHNpemUpOworCXJlcXVlc3QtPmJ1ZmZlci5wb3NuID0gMDsKKworCS8qIENvbXByZXNzIGl0ICovCisJc3RyZWFtLm5leHRfb3V0ID0gKHVuc2lnbmVkIGNoYXIgKilyZXF1ZXN0LT5idWZmZXIuYnVmLmJ1ZjsKKwlzdHJlYW0uYXZhaWxfb3V0ID0gc2l6ZTsKKworCS8qIEZpcnN0IGhlYWRlci4uICovCisJc3RyZWFtLm5leHRfaW4gPSAodm9pZCAqKWhkcjsKKwlzdHJlYW0uYXZhaWxfaW4gPSBoZHJsZW47CisJd2hpbGUgKGdpdF9kZWZsYXRlKCZzdHJlYW0sIDApID09IFpfT0spCisJCTsgLyogbm90aGluZyAqLworCisJLyogVGhlbiB0aGUgZGF0YSBpdHNlbGYuLiAqLworCXN0cmVhbS5uZXh0X2luID0gdW5wYWNrZWQ7CisJc3RyZWFtLmF2YWlsX2luID0gbGVuOworCXdoaWxlIChnaXRfZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCkgPT0gWl9PSykKKwkJOyAvKiBub3RoaW5nICovCisJZ2l0X2RlZmxhdGVfZW5kKCZzdHJlYW0pOworCWZyZWUodW5wYWNrZWQpOworCisJcmVxdWVzdC0+YnVmZmVyLmJ1Zi5sZW4gPSBzdHJlYW0udG90YWxfb3V0OworCisJc3RyYnVmX2FkZHN0cigmYnVmLCAiRGVzdGluYXRpb246ICIpOworCWFwcGVuZF9yZW1vdGVfb2JqZWN0X3VybCgmYnVmLCByZXBvLT51cmwsIGhleCwgMCk7CisJcmVxdWVzdC0+ZGVzdCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoJmJ1ZiwgcmVwby0+dXJsLCBoZXgsIDApOworCXN0cmJ1Zl9hZGQoJmJ1ZiwgcmVxdWVzdC0+bG9jay0+dG1wZmlsZV9zdWZmaXgsIDQxKTsKKwlyZXF1ZXN0LT51cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBwcm9jZXNzX3Jlc3BvbnNlOworCXNsb3QtPmNhbGxiYWNrX2RhdGEgPSByZXF1ZXN0OworCWN1cmxfc2V0dXBfaHR0cChzbG90LT5jdXJsLCByZXF1ZXN0LT51cmwsIERBVl9QVVQsCisJCQkmcmVxdWVzdC0+YnVmZmVyLCBmd3JpdGVfbnVsbCk7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcmVxdWVzdC0+c2xvdCA9IHNsb3Q7CisJCXJlcXVlc3QtPnN0YXRlID0gUlVOX1BVVDsKKwl9IGVsc2UgeworCQlyZXF1ZXN0LT5zdGF0ZSA9IEFCT1JURUQ7CisJCWZyZWUocmVxdWVzdC0+dXJsKTsKKwkJcmVxdWVzdC0+dXJsID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X21vdmUoc3RydWN0IHRyYW5zZmVyX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gTlVMTDsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19yZXNwb25zZTsKKwlzbG90LT5jYWxsYmFja19kYXRhID0gcmVxdWVzdDsKKwljdXJsX3NldHVwX2h0dHBfZ2V0KHNsb3QtPmN1cmwsIHJlcXVlc3QtPnVybCwgREFWX01PVkUpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIHJlcXVlc3QtPmRlc3QpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJPdmVyd3JpdGU6IFQiKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJlcXVlc3QtPnNsb3QgPSBzbG90OworCQlyZXF1ZXN0LT5zdGF0ZSA9IFJVTl9NT1ZFOworCX0gZWxzZSB7CisJCXJlcXVlc3QtPnN0YXRlID0gQUJPUlRFRDsKKwkJZnJlZShyZXF1ZXN0LT51cmwpOworCQlyZXF1ZXN0LT51cmwgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCByZWZyZXNoX2xvY2soc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnM7CisJaW50IHJjID0gMDsKKworCWxvY2stPnJlZnJlc2hpbmcgPSAxOworCisJZGF2X2hlYWRlcnMgPSBnZXRfZGF2X3Rva2VuX2hlYWRlcnMobG9jaywgREFWX0hFQURFUl9JRiB8IERBVl9IRUFERVJfVElNRU9VVCk7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cF9nZXQoc2xvdC0+Y3VybCwgbG9jay0+dXJsLCBEQVZfTE9DSyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkxPQ0sgSFRUUCBlcnJvciAlbGRcbiIsCisJCQkJcmVzdWx0cy5odHRwX2NvZGUpOworCQl9IGVsc2UgeworCQkJbG9jay0+c3RhcnRfdGltZSA9IHRpbWUoTlVMTCk7CisJCQlyYyA9IDE7CisJCX0KKwl9CisKKwlsb2NrLT5yZWZyZXNoaW5nID0gMDsKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdl9oZWFkZXJzKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2sgPSByZXBvLT5sb2NrczsKKwl0aW1lX3QgY3VycmVudF90aW1lID0gdGltZShOVUxMKTsKKwlpbnQgdGltZV9yZW1haW5pbmc7CisKKwl3aGlsZSAobG9jaykgeworCQl0aW1lX3JlbWFpbmluZyA9IGxvY2stPnN0YXJ0X3RpbWUgKyBsb2NrLT50aW1lb3V0IC0KKwkJCWN1cnJlbnRfdGltZTsKKwkJaWYgKCFsb2NrLT5yZWZyZXNoaW5nICYmIHRpbWVfcmVtYWluaW5nIDwgTE9DS19SRUZSRVNIKSB7CisJCQlpZiAoIXJlZnJlc2hfbG9jayhsb2NrKSkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiVW5hYmxlIHRvIHJlZnJlc2ggbG9jayBmb3IgJXNcbiIsCisJCQkJCWxvY2stPnVybCk7CisJCQkJYWJvcnRlZCA9IDE7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCWxvY2sgPSBsb2NrLT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICplbnRyeSA9IHJlcXVlc3RfcXVldWVfaGVhZDsKKworCWlmIChyZXF1ZXN0ID09IHJlcXVlc3RfcXVldWVfaGVhZCkgeworCQlyZXF1ZXN0X3F1ZXVlX2hlYWQgPSByZXF1ZXN0LT5uZXh0OworCX0gZWxzZSB7CisJCXdoaWxlIChlbnRyeS0+bmV4dCAhPSBOVUxMICYmIGVudHJ5LT5uZXh0ICE9IHJlcXVlc3QpCisJCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCQlpZiAoZW50cnktPm5leHQgPT0gcmVxdWVzdCkKKwkJCWVudHJ5LT5uZXh0ID0gZW50cnktPm5leHQtPm5leHQ7CisJfQorCisJZnJlZShyZXF1ZXN0LT51cmwpOworCWZyZWUocmVxdWVzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmlzaF9yZXF1ZXN0KHN0cnVjdCB0cmFuc2Zlcl9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCXN0cnVjdCBodHRwX3BhY2tfcmVxdWVzdCAqcHJlcTsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqb2JqX3JlcTsKKworCXJlcXVlc3QtPmN1cmxfcmVzdWx0ID0gcmVxdWVzdC0+c2xvdC0+Y3VybF9yZXN1bHQ7CisJcmVxdWVzdC0+aHR0cF9jb2RlID0gcmVxdWVzdC0+c2xvdC0+aHR0cF9jb2RlOworCXJlcXVlc3QtPnNsb3QgPSBOVUxMOworCisJLyogS2VlcCBsb2NrcyBhY3RpdmUgKi8KKwljaGVja19sb2NrcygpOworCisJaWYgKHJlcXVlc3QtPmhlYWRlcnMgIT0gTlVMTCkKKwkJY3VybF9zbGlzdF9mcmVlX2FsbChyZXF1ZXN0LT5oZWFkZXJzKTsKKworCS8qIFVSTCBpcyByZXVzZWQgZm9yIE1PVkUgYWZ0ZXIgUFVUICovCisJaWYgKHJlcXVlc3QtPnN0YXRlICE9IFJVTl9QVVQpIHsKKwkJZnJlZShyZXF1ZXN0LT51cmwpOworCQlyZXF1ZXN0LT51cmwgPSBOVUxMOworCX0KKworCWlmIChyZXF1ZXN0LT5zdGF0ZSA9PSBSVU5fTUtDT0wpIHsKKwkJaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LIHx8CisJCSAgICByZXF1ZXN0LT5odHRwX2NvZGUgPT0gNDA1KSB7CisJCQlyZW1vdGVfZGlyX2V4aXN0c1tyZXF1ZXN0LT5vYmotPnNoYTFbMF1dID0gMTsKKwkJCXN0YXJ0X3B1dChyZXF1ZXN0KTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiTUtDT0wgJXMgZmFpbGVkLCBhYm9ydGluZyAoJWQvJWxkKVxuIiwKKwkJCQlzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpLAorCQkJCXJlcXVlc3QtPmN1cmxfcmVzdWx0LCByZXF1ZXN0LT5odHRwX2NvZGUpOworCQkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQkJYWJvcnRlZCA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9QVVQpIHsKKwkJaWYgKHJlcXVlc3QtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCQlzdGFydF9tb3ZlKHJlcXVlc3QpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsCSJQVVQgJXMgZmFpbGVkLCBhYm9ydGluZyAoJWQvJWxkKVxuIiwKKwkJCQlzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpLAorCQkJCXJlcXVlc3QtPmN1cmxfcmVzdWx0LCByZXF1ZXN0LT5odHRwX2NvZGUpOworCQkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQkJYWJvcnRlZCA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9NT1ZFKSB7CisJCWlmIChyZXF1ZXN0LT5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSykgeworCQkJaWYgKHB1c2hfdmVyYm9zZWx5KQorCQkJCWZwcmludGYoc3RkZXJyLCAiICAgIHNlbnQgJXNcbiIsCisJCQkJCXNoYTFfdG9faGV4KHJlcXVlc3QtPm9iai0+c2hhMSkpOworCQkJcmVxdWVzdC0+b2JqLT5mbGFncyB8PSBSRU1PVEU7CisJCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIk1PVkUgJXMgZmFpbGVkLCBhYm9ydGluZyAoJWQvJWxkKVxuIiwKKwkJCQlzaGExX3RvX2hleChyZXF1ZXN0LT5vYmotPnNoYTEpLAorCQkJCXJlcXVlc3QtPmN1cmxfcmVzdWx0LCByZXF1ZXN0LT5odHRwX2NvZGUpOworCQkJcmVxdWVzdC0+c3RhdGUgPSBBQk9SVEVEOworCQkJYWJvcnRlZCA9IDE7CisJCX0KKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9GRVRDSF9MT09TRSkgeworCQlvYmpfcmVxID0gKHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICopcmVxdWVzdC0+dXNlckRhdGE7CisKKwkJaWYgKGZpbmlzaF9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpID09IDApCisJCQlpZiAob2JqX3JlcS0+cmVuYW1lID09IDApCisJCQkJcmVxdWVzdC0+b2JqLT5mbGFncyB8PSAoTE9DQUwgfCBSRU1PVEUpOworCisJCS8qIFRyeSBmZXRjaGluZyBwYWNrZWQgaWYgbmVjZXNzYXJ5ICovCisJCWlmIChyZXF1ZXN0LT5vYmotPmZsYWdzICYgTE9DQUwpIHsKKwkJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKKwkJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwkJfSBlbHNlCisJCQlzdGFydF9mZXRjaF9wYWNrZWQocmVxdWVzdCk7CisKKwl9IGVsc2UgaWYgKHJlcXVlc3QtPnN0YXRlID09IFJVTl9GRVRDSF9QQUNLRUQpIHsKKwkJaW50IGZhaWwgPSAxOworCQlpZiAocmVxdWVzdC0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGdldCBwYWNrIGZpbGUgJXNcbiVzIiwKKwkJCQlyZXF1ZXN0LT51cmwsIGN1cmxfZXJyb3JzdHIpOworCQl9IGVsc2UgeworCQkJcHJlcSA9IChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKilyZXF1ZXN0LT51c2VyRGF0YTsKKworCQkJaWYgKHByZXEpIHsKKwkJCQlpZiAoZmluaXNoX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpID09IDApCisJCQkJCWZhaWwgPSAwOworCQkJCXJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3QocHJlcSk7CisJCQl9CisJCX0KKwkJaWYgKGZhaWwpCisJCQlyZXBvLT5jYW5fdXBkYXRlX2luZm9fcmVmcyA9IDA7CisJCXJlbGVhc2VfcmVxdWVzdChyZXF1ZXN0KTsKKwl9Cit9CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorc3RhdGljIGludCBpc19ydW5uaW5nX3F1ZXVlOworc3RhdGljIGludCBmaWxsX2FjdGl2ZV9zbG90KHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKKworCWlmIChhYm9ydGVkIHx8ICFpc19ydW5uaW5nX3F1ZXVlKQorCQlyZXR1cm4gMDsKKworCWZvciAocmVxdWVzdCA9IHJlcXVlc3RfcXVldWVfaGVhZDsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKwkJaWYgKHJlcXVlc3QtPnN0YXRlID09IE5FRURfRkVUQ0gpIHsKKwkJCXN0YXJ0X2ZldGNoX2xvb3NlKHJlcXVlc3QpOworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAocHVzaGluZyAmJiByZXF1ZXN0LT5zdGF0ZSA9PSBORUVEX1BVU0gpIHsKKwkJCWlmIChyZW1vdGVfZGlyX2V4aXN0c1tyZXF1ZXN0LT5vYmotPnNoYTFbMF1dID09IDEpIHsKKwkJCQlzdGFydF9wdXQocmVxdWVzdCk7CisJCQl9IGVsc2UgeworCQkJCXN0YXJ0X21rY29sKHJlcXVlc3QpOworCQkJfQorCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZ2V0X3JlbW90ZV9vYmplY3RfbGlzdCh1bnNpZ25lZCBjaGFyIHBhcmVudCk7CisKK3N0YXRpYyB2b2lkIGFkZF9mZXRjaF9yZXF1ZXN0KHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKKworCWNoZWNrX2xvY2tzKCk7CisKKwkvKgorCSAqIERvbid0IGZldGNoIHRoZSBvYmplY3QgaWYgaXQncyBrbm93biB0byBleGlzdCBsb2NhbGx5CisJICogb3IgaXMgYWxyZWFkeSBpbiB0aGUgcmVxdWVzdCBxdWV1ZQorCSAqLworCWlmIChyZW1vdGVfZGlyX2V4aXN0c1tvYmotPnNoYTFbMF1dID09IC0xKQorCQlnZXRfcmVtb3RlX29iamVjdF9saXN0KG9iai0+c2hhMVswXSk7CisJaWYgKG9iai0+ZmxhZ3MgJiAoTE9DQUwgfCBGRVRDSElORykpCisJCXJldHVybjsKKworCW9iai0+ZmxhZ3MgfD0gRkVUQ0hJTkc7CisJcmVxdWVzdCA9IHhtYWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSk7CisJcmVxdWVzdC0+b2JqID0gb2JqOworCXJlcXVlc3QtPnVybCA9IE5VTEw7CisJcmVxdWVzdC0+bG9jayA9IE5VTEw7CisJcmVxdWVzdC0+aGVhZGVycyA9IE5VTEw7CisJcmVxdWVzdC0+c3RhdGUgPSBORUVEX0ZFVENIOworCXJlcXVlc3QtPm5leHQgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisJcmVxdWVzdF9xdWV1ZV9oZWFkID0gcmVxdWVzdDsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKwlzdGVwX2FjdGl2ZV9zbG90cygpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgYWRkX3NlbmRfcmVxdWVzdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0OworCisJLyogS2VlcCBsb2NrcyBhY3RpdmUgKi8KKwljaGVja19sb2NrcygpOworCisJLyoKKwkgKiBEb24ndCBwdXNoIHRoZSBvYmplY3QgaWYgaXQncyBrbm93biB0byBleGlzdCBvbiB0aGUgcmVtb3RlCisJICogb3IgaXMgYWxyZWFkeSBpbiB0aGUgcmVxdWVzdCBxdWV1ZQorCSAqLworCWlmIChyZW1vdGVfZGlyX2V4aXN0c1tvYmotPnNoYTFbMF1dID09IC0xKQorCQlnZXRfcmVtb3RlX29iamVjdF9saXN0KG9iai0+c2hhMVswXSk7CisJaWYgKG9iai0+ZmxhZ3MgJiAoUkVNT1RFIHwgUFVTSElORykpCisJCXJldHVybiAwOworCXRhcmdldCA9IGZpbmRfc2hhMV9wYWNrKG9iai0+c2hhMSwgcmVwby0+cGFja3MpOworCWlmICh0YXJnZXQpIHsKKwkJb2JqLT5mbGFncyB8PSBSRU1PVEU7CisJCXJldHVybiAwOworCX0KKworCW9iai0+ZmxhZ3MgfD0gUFVTSElORzsKKwlyZXF1ZXN0ID0geG1hbGxvYyhzaXplb2YoKnJlcXVlc3QpKTsKKwlyZXF1ZXN0LT5vYmogPSBvYmo7CisJcmVxdWVzdC0+dXJsID0gTlVMTDsKKwlyZXF1ZXN0LT5sb2NrID0gbG9jazsKKwlyZXF1ZXN0LT5oZWFkZXJzID0gTlVMTDsKKwlyZXF1ZXN0LT5zdGF0ZSA9IE5FRURfUFVTSDsKKwlyZXF1ZXN0LT5uZXh0ID0gcmVxdWVzdF9xdWV1ZV9oZWFkOworCXJlcXVlc3RfcXVldWVfaGVhZCA9IHJlcXVlc3Q7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisJc3RlcF9hY3RpdmVfc2xvdHMoKTsKKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfaW5kaWNlcyh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAocHVzaF92ZXJib3NlbHkpCisJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBwYWNrIGxpc3RcbiIpOworCisJc3dpdGNoIChodHRwX2dldF9pbmZvX3BhY2tzKHJlcG8tPnVybCwgJnJlcG8tPnBhY2tzKSkgeworCWNhc2UgSFRUUF9PSzoKKwljYXNlIEhUVFBfTUlTU0lOR19UQVJHRVQ6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC0xOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9uZV9yZW1vdGVfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJb2JqID0gbG9va3VwX29iamVjdChzaGExKTsKKwlpZiAoIW9iaikKKwkJb2JqID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCisJLyogSWdub3JlIHJlbW90ZSBvYmplY3RzIHRoYXQgZG9uJ3QgZXhpc3QgbG9jYWxseSAqLworCWlmICghb2JqKQorCQlyZXR1cm47CisKKwlvYmotPmZsYWdzIHw9IFJFTU9URTsKKwlpZiAoIW9iamVjdF9saXN0X2NvbnRhaW5zKG9iamVjdHMsIG9iaikpCisJCW9iamVjdF9saXN0X2luc2VydChvYmosICZvYmplY3RzKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2xvY2twcm9wX2N0eChzdHJ1Y3QgeG1sX2N0eCAqY3R4LCBpbnQgdGFnX2Nsb3NlZCkKK3sKKwlpbnQgKmxvY2tfZmxhZ3MgPSAoaW50ICopY3R4LT51c2VyRGF0YTsKKworCWlmICh0YWdfY2xvc2VkKSB7CisJCWlmICghc3RyY21wKGN0eC0+bmFtZSwgREFWX0NUWF9MT0NLRU5UUlkpKSB7CisJCQlpZiAoKCpsb2NrX2ZsYWdzICYgREFWX1BST1BfTE9DS0VYKSAmJgorCQkJICAgICgqbG9ja19mbGFncyAmIERBVl9QUk9QX0xPQ0tXUikpIHsKKwkJCQkqbG9ja19mbGFncyB8PSBEQVZfTE9DS19PSzsKKwkJCX0KKwkJCSpsb2NrX2ZsYWdzICY9IERBVl9MT0NLX09LOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfQ1RYX0xPQ0tUWVBFX1dSSVRFKSkgeworCQkJKmxvY2tfZmxhZ3MgfD0gREFWX1BST1BfTE9DS1dSOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfQ1RYX0xPQ0tUWVBFX0VYQ0xVU0lWRSkpIHsKKwkJCSpsb2NrX2ZsYWdzIHw9IERBVl9QUk9QX0xPQ0tFWDsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX25ld19sb2NrX2N0eChzdHJ1Y3QgeG1sX2N0eCAqY3R4LCBpbnQgdGFnX2Nsb3NlZCkKK3sKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2sgPSAoc3RydWN0IHJlbW90ZV9sb2NrICopY3R4LT51c2VyRGF0YTsKKwlnaXRfU0hBX0NUWCBzaGFfY3R4OworCXVuc2lnbmVkIGNoYXIgbG9ja190b2tlbl9zaGExWzIwXTsKKworCWlmICh0YWdfY2xvc2VkICYmIGN0eC0+Y2RhdGEpIHsKKwkJaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfQUNUSVZFTE9DS19PV05FUikpIHsKKwkJCWxvY2stPm93bmVyID0geHN0cmR1cChjdHgtPmNkYXRhKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGN0eC0+bmFtZSwgREFWX0FDVElWRUxPQ0tfVElNRU9VVCkpIHsKKwkJCWNvbnN0IGNoYXIgKmFyZzsKKwkJCWlmIChza2lwX3ByZWZpeChjdHgtPmNkYXRhLCAiU2Vjb25kLSIsICZhcmcpKQorCQkJCWxvY2stPnRpbWVvdXQgPSBzdHJ0b2woYXJnLCBOVUxMLCAxMCk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9BQ1RJVkVMT0NLX1RPS0VOKSkgeworCQkJbG9jay0+dG9rZW4gPSB4c3RyZHVwKGN0eC0+Y2RhdGEpOworCisJCQlnaXRfU0hBMV9Jbml0KCZzaGFfY3R4KTsKKwkJCWdpdF9TSEExX1VwZGF0ZSgmc2hhX2N0eCwgbG9jay0+dG9rZW4sIHN0cmxlbihsb2NrLT50b2tlbikpOworCQkJZ2l0X1NIQTFfRmluYWwobG9ja190b2tlbl9zaGExLCAmc2hhX2N0eCk7CisKKwkJCWxvY2stPnRtcGZpbGVfc3VmZml4WzBdID0gJ18nOworCQkJbWVtY3B5KGxvY2stPnRtcGZpbGVfc3VmZml4ICsgMSwgc2hhMV90b19oZXgobG9ja190b2tlbl9zaGExKSwgNDApOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBvbmVfcmVtb3RlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lKTsKKworc3RhdGljIHZvaWQKK3htbF9zdGFydF90YWcodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKiphdHRzKQoreworCXN0cnVjdCB4bWxfY3R4ICpjdHggPSAoc3RydWN0IHhtbF9jdHggKil1c2VyRGF0YTsKKwljb25zdCBjaGFyICpjID0gc3RyY2hyKG5hbWUsICc6Jyk7CisJaW50IG9sZF9uYW1lbGVuLCBuZXdfbGVuOworCisJaWYgKGMgPT0gTlVMTCkKKwkJYyA9IG5hbWU7CisJZWxzZQorCQljKys7CisKKwlvbGRfbmFtZWxlbiA9IHN0cmxlbihjdHgtPm5hbWUpOworCW5ld19sZW4gPSBvbGRfbmFtZWxlbiArIHN0cmxlbihjKSArIDI7CisKKwlpZiAobmV3X2xlbiA+IGN0eC0+bGVuKSB7CisJCWN0eC0+bmFtZSA9IHhyZWFsbG9jKGN0eC0+bmFtZSwgbmV3X2xlbik7CisJCWN0eC0+bGVuID0gbmV3X2xlbjsKKwl9CisJeHNucHJpbnRmKGN0eC0+bmFtZSArIG9sZF9uYW1lbGVuLCBjdHgtPmxlbiAtIG9sZF9uYW1lbGVuLCAiLiVzIiwgYyk7CisKKwlmcmVlKGN0eC0+Y2RhdGEpOworCWN0eC0+Y2RhdGEgPSBOVUxMOworCisJY3R4LT51c2VyRnVuYyhjdHgsIDApOworfQorCitzdGF0aWMgdm9pZAoreG1sX2VuZF90YWcodm9pZCAqdXNlckRhdGEsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHhtbF9jdHggKmN0eCA9IChzdHJ1Y3QgeG1sX2N0eCAqKXVzZXJEYXRhOworCWNvbnN0IGNoYXIgKmMgPSBzdHJjaHIobmFtZSwgJzonKTsKKwljaGFyICplcDsKKworCWN0eC0+dXNlckZ1bmMoY3R4LCAxKTsKKworCWlmIChjID09IE5VTEwpCisJCWMgPSBuYW1lOworCWVsc2UKKwkJYysrOworCisJZXAgPSBjdHgtPm5hbWUgKyBzdHJsZW4oY3R4LT5uYW1lKSAtIHN0cmxlbihjKSAtIDE7CisJKmVwID0gMDsKK30KKworc3RhdGljIHZvaWQKK3htbF9jZGF0YSh2b2lkICp1c2VyRGF0YSwgY29uc3QgWE1MX0NoYXIgKnMsIGludCBsZW4pCit7CisJc3RydWN0IHhtbF9jdHggKmN0eCA9IChzdHJ1Y3QgeG1sX2N0eCAqKXVzZXJEYXRhOworCWZyZWUoY3R4LT5jZGF0YSk7CisJY3R4LT5jZGF0YSA9IHhtZW1kdXB6KHMsIGxlbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2tfcmVtb3RlKGNvbnN0IGNoYXIgKnBhdGgsIGxvbmcgdGltZW91dCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGJ1ZmZlciBvdXRfYnVmZmVyID0geyBTVFJCVUZfSU5JVCwgMCB9OworCXN0cnVjdCBzdHJidWYgaW5fYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJY2hhciAqdXJsOworCWNoYXIgKmVwOworCWNoYXIgdGltZW91dF9oZWFkZXJbMjVdOworCXN0cnVjdCByZW1vdGVfbG9jayAqbG9jayA9IE5VTEw7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzID0gTlVMTDsKKwlzdHJ1Y3QgeG1sX2N0eCBjdHg7CisJY2hhciAqZXNjYXBlZDsKKworCXVybCA9IHhzdHJmbXQoIiVzJXMiLCByZXBvLT51cmwsIHBhdGgpOworCisJLyogTWFrZSBzdXJlIGxlYWRpbmcgZGlyZWN0b3JpZXMgZXhpc3QgZm9yIHRoZSByZW1vdGUgcmVmICovCisJZXAgPSBzdHJjaHIodXJsICsgc3RybGVuKHJlcG8tPnVybCkgKyAxLCAnLycpOworCXdoaWxlIChlcCkgeworCQljaGFyIHNhdmVkX2NoYXJhY3RlciA9IGVwWzFdOworCQllcFsxXSA9ICdcMCc7CisJCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwkJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCQljdXJsX3NldHVwX2h0dHBfZ2V0KHNsb3QtPmN1cmwsIHVybCwgREFWX01LQ09MKTsKKwkJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSyAmJgorCQkJICAgIHJlc3VsdHMuaHR0cF9jb2RlICE9IDQwNSkgeworCQkJCWZwcmludGYoc3RkZXJyLAorCQkJCQkiVW5hYmxlIHRvIGNyZWF0ZSBicmFuY2ggcGF0aCAlc1xuIiwKKwkJCQkJdXJsKTsKKwkJCQlmcmVlKHVybCk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBNS0NPTCByZXF1ZXN0XG4iKTsKKwkJCWZyZWUodXJsKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWVwWzFdID0gc2F2ZWRfY2hhcmFjdGVyOworCQllcCA9IHN0cmNocihlcCArIDEsICcvJyk7CisJfQorCisJZXNjYXBlZCA9IHhtbF9lbnRpdGllcyhpZGVudF9kZWZhdWx0X2VtYWlsKCkpOworCXN0cmJ1Zl9hZGRmKCZvdXRfYnVmZmVyLmJ1ZiwgTE9DS19SRVFVRVNULCBlc2NhcGVkKTsKKwlmcmVlKGVzY2FwZWQpOworCisJeHNucHJpbnRmKHRpbWVvdXRfaGVhZGVyLCBzaXplb2YodGltZW91dF9oZWFkZXIpLCAiVGltZW91dDogU2Vjb25kLSVsZCIsIHRpbWVvdXQpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsIHRpbWVvdXRfaGVhZGVyKTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCAiQ29udGVudC1UeXBlOiB0ZXh0L3htbCIpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX3NldHVwX2h0dHAoc2xvdC0+Y3VybCwgdXJsLCBEQVZfTE9DSywgJm91dF9idWZmZXIsIGZ3cml0ZV9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBkYXZfaGVhZGVycyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0ZJTEUsICZpbl9idWZmZXIpOworCisJbG9jayA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpsb2NrKSk7CisJbG9jay0+dGltZW91dCA9IC0xOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgPT0gQ1VSTEVfT0spIHsKKwkJCVhNTF9QYXJzZXIgcGFyc2VyID0gWE1MX1BhcnNlckNyZWF0ZShOVUxMKTsKKwkJCWVudW0gWE1MX1N0YXR1cyByZXN1bHQ7CisJCQljdHgubmFtZSA9IHhjYWxsb2MoMTAsIDEpOworCQkJY3R4LmxlbiA9IDA7CisJCQljdHguY2RhdGEgPSBOVUxMOworCQkJY3R4LnVzZXJGdW5jID0gaGFuZGxlX25ld19sb2NrX2N0eDsKKwkJCWN0eC51c2VyRGF0YSA9IGxvY2s7CisJCQlYTUxfU2V0VXNlckRhdGEocGFyc2VyLCAmY3R4KTsKKwkJCVhNTF9TZXRFbGVtZW50SGFuZGxlcihwYXJzZXIsIHhtbF9zdGFydF90YWcsCisJCQkJCSAgICAgIHhtbF9lbmRfdGFnKTsKKwkJCVhNTF9TZXRDaGFyYWN0ZXJEYXRhSGFuZGxlcihwYXJzZXIsIHhtbF9jZGF0YSk7CisJCQlyZXN1bHQgPSBYTUxfUGFyc2UocGFyc2VyLCBpbl9idWZmZXIuYnVmLAorCQkJCQkgICBpbl9idWZmZXIubGVuLCAxKTsKKwkJCWZyZWUoY3R4Lm5hbWUpOworCQkJaWYgKHJlc3VsdCAhPSBYTUxfU1RBVFVTX09LKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJYTUwgZXJyb3I6ICVzXG4iLAorCQkJCQlYTUxfRXJyb3JTdHJpbmcoCisJCQkJCQlYTUxfR2V0RXJyb3JDb2RlKHBhcnNlcikpKTsKKwkJCQlsb2NrLT50aW1lb3V0ID0gLTE7CisJCQl9CisJCQlYTUxfUGFyc2VyRnJlZShwYXJzZXIpOworCQl9CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgTE9DSyByZXF1ZXN0XG4iKTsKKwl9CisKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdl9oZWFkZXJzKTsKKwlzdHJidWZfcmVsZWFzZSgmb3V0X2J1ZmZlci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZpbl9idWZmZXIpOworCisJaWYgKGxvY2stPnRva2VuID09IE5VTEwgfHwgbG9jay0+dGltZW91dCA8PSAwKSB7CisJCWZyZWUobG9jay0+dG9rZW4pOworCQlmcmVlKGxvY2stPm93bmVyKTsKKwkJZnJlZSh1cmwpOworCQlmcmVlKGxvY2spOworCQlsb2NrID0gTlVMTDsKKwl9IGVsc2UgeworCQlsb2NrLT51cmwgPSB1cmw7CisJCWxvY2stPnN0YXJ0X3RpbWUgPSB0aW1lKE5VTEwpOworCQlsb2NrLT5uZXh0ID0gcmVwby0+bG9ja3M7CisJCXJlcG8tPmxvY2tzID0gbG9jazsKKwl9CisKKwlyZXR1cm4gbG9jazsKK30KKworc3RhdGljIGludCB1bmxvY2tfcmVtb3RlKHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IHJlbW90ZV9sb2NrICpwcmV2ID0gcmVwby0+bG9ja3M7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzOworCWludCByYyA9IDA7CisKKwlkYXZfaGVhZGVycyA9IGdldF9kYXZfdG9rZW5faGVhZGVycyhsb2NrLCBEQVZfSEVBREVSX0xPQ0spOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX3NldHVwX2h0dHBfZ2V0KHNsb3QtPmN1cmwsIGxvY2stPnVybCwgREFWX1VOTE9DSyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ID09IENVUkxFX09LKQorCQkJcmMgPSAxOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZGVyciwgIlVOTE9DSyBIVFRQIGVycm9yICVsZFxuIiwKKwkJCQlyZXN1bHRzLmh0dHBfY29kZSk7CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgVU5MT0NLIHJlcXVlc3RcbiIpOworCX0KKworCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGF2X2hlYWRlcnMpOworCisJaWYgKHJlcG8tPmxvY2tzID09IGxvY2spIHsKKwkJcmVwby0+bG9ja3MgPSBsb2NrLT5uZXh0OworCX0gZWxzZSB7CisJCXdoaWxlIChwcmV2ICYmIHByZXYtPm5leHQgIT0gbG9jaykKKwkJCXByZXYgPSBwcmV2LT5uZXh0OworCQlpZiAocHJldikKKwkJCXByZXYtPm5leHQgPSBwcmV2LT5uZXh0LT5uZXh0OworCX0KKworCWZyZWUobG9jay0+b3duZXIpOworCWZyZWUobG9jay0+dXJsKTsKKwlmcmVlKGxvY2stPnRva2VuKTsKKwlmcmVlKGxvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgcmVtb3RlX2xvY2sgKmxvY2sgPSByZXBvLT5sb2NrczsKKworCWZwcmludGYoc3RkZXJyLCAiUmVtb3ZpbmcgcmVtb3RlIGxvY2tzLi4uXG4iKTsKKwl3aGlsZSAobG9jaykgeworCQlzdHJ1Y3QgcmVtb3RlX2xvY2sgKm5leHQgPSBsb2NrLT5uZXh0OworCQl1bmxvY2tfcmVtb3RlKGxvY2spOworCQlsb2NrID0gbmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9sb2Nrc19vbl9zaWduYWwoaW50IHNpZ25vKQoreworCXJlbW92ZV9sb2NrcygpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCitzdGF0aWMgdm9pZCByZW1vdGVfbHMoY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLAorCQkgICAgICB2b2lkICgqdXNlckZ1bmMpKHN0cnVjdCByZW1vdGVfbHNfY3R4ICpscyksCisJCSAgICAgIHZvaWQgKnVzZXJEYXRhKTsKKworLyogZXh0cmFjdCBoZXggZnJvbSBzaGFyZGVkICJ4eC94ezQwfSIgZmlsZW5hbWUgKi8KK3N0YXRpYyBpbnQgZ2V0X3NoYTFfaGV4X2Zyb21fb2JqcGF0aChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNoYXIgaGV4WzQwXTsKKworCWlmIChzdHJsZW4ocGF0aCkgIT0gNDEpCisJCXJldHVybiAtMTsKKworCW1lbWNweShoZXgsIHBhdGgsIDIpOworCXBhdGggKz0gMjsKKwlwYXRoKys7IC8qIHNraXAgJy8nICovCisJbWVtY3B5KGhleCwgcGF0aCwgMzgpOworCisJcmV0dXJuIGdldF9zaGExX2hleChoZXgsIHNoYTEpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2xzX29iamVjdChzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpCit7CisJdW5zaWduZWQgaW50ICpwYXJlbnQgPSAodW5zaWduZWQgaW50ICopbHMtPnVzZXJEYXRhOworCWNvbnN0IGNoYXIgKnBhdGggPSBscy0+ZGVudHJ5X25hbWU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWlmICghc3RyY21wKGxzLT5wYXRoLCBscy0+ZGVudHJ5X25hbWUpICYmIChscy0+ZmxhZ3MgJiBJU19ESVIpKSB7CisJCXJlbW90ZV9kaXJfZXhpc3RzWypwYXJlbnRdID0gMTsKKwkJcmV0dXJuOworCX0KKworCWlmICghc2tpcF9wcmVmaXgocGF0aCwgIm9iamVjdHMvIiwgJnBhdGgpIHx8CisJICAgIGdldF9zaGExX2hleF9mcm9tX29ianBhdGgocGF0aCwgc2hhMSkpCisJCXJldHVybjsKKworCW9uZV9yZW1vdGVfb2JqZWN0KHNoYTEpOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX2xzX3JlZihzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMpCit7CisJaWYgKCFzdHJjbXAobHMtPnBhdGgsIGxzLT5kZW50cnlfbmFtZSkgJiYgKGxzLT5kZW50cnlfZmxhZ3MgJiBJU19ESVIpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiICAlc1xuIiwgbHMtPmRlbnRyeV9uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghKGxzLT5kZW50cnlfZmxhZ3MgJiBJU19ESVIpKQorCQlvbmVfcmVtb3RlX3JlZihscy0+ZGVudHJ5X25hbWUpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfcmVtb3RlX2xzX2N0eChzdHJ1Y3QgeG1sX2N0eCAqY3R4LCBpbnQgdGFnX2Nsb3NlZCkKK3sKKwlzdHJ1Y3QgcmVtb3RlX2xzX2N0eCAqbHMgPSAoc3RydWN0IHJlbW90ZV9sc19jdHggKiljdHgtPnVzZXJEYXRhOworCisJaWYgKHRhZ19jbG9zZWQpIHsKKwkJaWYgKCFzdHJjbXAoY3R4LT5uYW1lLCBEQVZfUFJPUEZJTkRfUkVTUCkgJiYgbHMtPmRlbnRyeV9uYW1lKSB7CisJCQlpZiAobHMtPmRlbnRyeV9mbGFncyAmIElTX0RJUikgeworCisJCQkJLyogZW5zdXJlIGNvbGxlY3Rpb24gbmFtZXMgZW5kIHdpdGggc2xhc2ggKi8KKwkJCQlzdHJfZW5kX3VybF93aXRoX3NsYXNoKGxzLT5kZW50cnlfbmFtZSwgJmxzLT5kZW50cnlfbmFtZSk7CisKKwkJCQlpZiAobHMtPmZsYWdzICYgUFJPQ0VTU19ESVJTKSB7CisJCQkJCWxzLT51c2VyRnVuYyhscyk7CisJCQkJfQorCQkJCWlmIChzdHJjbXAobHMtPmRlbnRyeV9uYW1lLCBscy0+cGF0aCkgJiYKKwkJCQkgICAgbHMtPmZsYWdzICYgUkVDVVJTSVZFKSB7CisJCQkJCXJlbW90ZV9scyhscy0+ZGVudHJ5X25hbWUsCisJCQkJCQkgIGxzLT5mbGFncywKKwkJCQkJCSAgbHMtPnVzZXJGdW5jLAorCQkJCQkJICBscy0+dXNlckRhdGEpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAobHMtPmZsYWdzICYgUFJPQ0VTU19GSUxFUykgeworCQkJCWxzLT51c2VyRnVuYyhscyk7CisJCQl9CisJCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9QUk9QRklORF9OQU1FKSAmJiBjdHgtPmNkYXRhKSB7CisJCQljaGFyICpwYXRoID0gY3R4LT5jZGF0YTsKKwkJCWlmICgqY3R4LT5jZGF0YSA9PSAnaCcpIHsKKwkJCQlwYXRoID0gc3Ryc3RyKHBhdGgsICIvLyIpOworCQkJCWlmIChwYXRoKSB7CisJCQkJCXBhdGggPSBzdHJjaHIocGF0aCsyLCAnLycpOworCQkJCX0KKwkJCX0KKwkJCWlmIChwYXRoKSB7CisJCQkJY29uc3QgY2hhciAqdXJsID0gcmVwby0+dXJsOworCQkJCWlmIChyZXBvLT5wYXRoKQorCQkJCQl1cmwgPSByZXBvLT5wYXRoOworCQkJCWlmIChzdHJuY21wKHBhdGgsIHVybCwgcmVwby0+cGF0aF9sZW4pKQorCQkJCQllcnJvcigiUGFyc2VkIHBhdGggJyVzJyBkb2VzIG5vdCBtYXRjaCB1cmw6ICclcyciLAorCQkJCQkgICAgICBwYXRoLCB1cmwpOworCQkJCWVsc2UgeworCQkJCQlwYXRoICs9IHJlcG8tPnBhdGhfbGVuOworCQkJCQlscy0+ZGVudHJ5X25hbWUgPSB4c3RyZHVwKHBhdGgpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmICghc3RyY21wKGN0eC0+bmFtZSwgREFWX1BST1BGSU5EX0NPTExFQ1RJT04pKSB7CisJCQlscy0+ZGVudHJ5X2ZsYWdzIHw9IElTX0RJUjsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChjdHgtPm5hbWUsIERBVl9QUk9QRklORF9SRVNQKSkgeworCQlmcmVlKGxzLT5kZW50cnlfbmFtZSk7CisJCWxzLT5kZW50cnlfbmFtZSA9IE5VTEw7CisJCWxzLT5kZW50cnlfZmxhZ3MgPSAwOworCX0KK30KKworLyoKKyAqIE5FRURTV09SSzogcmVtb3RlX2xzKCkgaWdub3JlcyBpbmZvL3JlZnMgb24gdGhlIHJlbW90ZSBzaWRlLiAgQnV0IGl0CisgKiBzaG91bGQgX29ubHlfIGhlZWQgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhhdCBmaWxlLCBpbnN0ZWFkIG9mIHRyeWluZyB0bworICogZGV0ZXJtaW5lIHRoZSByZWZzIGZyb20gdGhlIHJlbW90ZSBmaWxlIHN5c3RlbSAoYmFkbHk6IGl0IGRvZXMgbm90IGV2ZW4KKyAqIGtub3cgYWJvdXQgcGFja2VkLXJlZnMpLgorICovCitzdGF0aWMgdm9pZCByZW1vdGVfbHMoY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzLAorCQkgICAgICB2b2lkICgqdXNlckZ1bmMpKHN0cnVjdCByZW1vdGVfbHNfY3R4ICpscyksCisJCSAgICAgIHZvaWQgKnVzZXJEYXRhKQoreworCWNoYXIgKnVybCA9IHhzdHJmbXQoIiVzJXMiLCByZXBvLT51cmwsIHBhdGgpOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3Qgc3RyYnVmIGluX2J1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBidWZmZXIgb3V0X2J1ZmZlciA9IHsgU1RSQlVGX0lOSVQsIDAgfTsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnMgPSBOVUxMOworCXN0cnVjdCB4bWxfY3R4IGN0eDsKKwlzdHJ1Y3QgcmVtb3RlX2xzX2N0eCBsczsKKworCWxzLmZsYWdzID0gZmxhZ3M7CisJbHMucGF0aCA9IHhzdHJkdXAocGF0aCk7CisJbHMuZGVudHJ5X25hbWUgPSBOVUxMOworCWxzLmRlbnRyeV9mbGFncyA9IDA7CisJbHMudXNlckRhdGEgPSB1c2VyRGF0YTsKKwlscy51c2VyRnVuYyA9IHVzZXJGdW5jOworCisJc3RyYnVmX2FkZGYoJm91dF9idWZmZXIuYnVmLCBQUk9QRklORF9BTExfUkVRVUVTVCk7CisKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCAiRGVwdGg6IDEiKTsKKwlkYXZfaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGRhdl9oZWFkZXJzLCAiQ29udGVudC1UeXBlOiB0ZXh0L3htbCIpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX3NldHVwX2h0dHAoc2xvdC0+Y3VybCwgdXJsLCBEQVZfUFJPUEZJTkQsCisJCQkmb3V0X2J1ZmZlciwgZndyaXRlX2J1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmluX2J1ZmZlcik7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCA9PSBDVVJMRV9PSykgeworCQkJWE1MX1BhcnNlciBwYXJzZXIgPSBYTUxfUGFyc2VyQ3JlYXRlKE5VTEwpOworCQkJZW51bSBYTUxfU3RhdHVzIHJlc3VsdDsKKwkJCWN0eC5uYW1lID0geGNhbGxvYygxMCwgMSk7CisJCQljdHgubGVuID0gMDsKKwkJCWN0eC5jZGF0YSA9IE5VTEw7CisJCQljdHgudXNlckZ1bmMgPSBoYW5kbGVfcmVtb3RlX2xzX2N0eDsKKwkJCWN0eC51c2VyRGF0YSA9ICZsczsKKwkJCVhNTF9TZXRVc2VyRGF0YShwYXJzZXIsICZjdHgpOworCQkJWE1MX1NldEVsZW1lbnRIYW5kbGVyKHBhcnNlciwgeG1sX3N0YXJ0X3RhZywKKwkJCQkJICAgICAgeG1sX2VuZF90YWcpOworCQkJWE1MX1NldENoYXJhY3RlckRhdGFIYW5kbGVyKHBhcnNlciwgeG1sX2NkYXRhKTsKKwkJCXJlc3VsdCA9IFhNTF9QYXJzZShwYXJzZXIsIGluX2J1ZmZlci5idWYsCisJCQkJCSAgIGluX2J1ZmZlci5sZW4sIDEpOworCQkJZnJlZShjdHgubmFtZSk7CisKKwkJCWlmIChyZXN1bHQgIT0gWE1MX1NUQVRVU19PSykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiWE1MIGVycm9yOiAlc1xuIiwKKwkJCQkJWE1MX0Vycm9yU3RyaW5nKAorCQkJCQkJWE1MX0dldEVycm9yQ29kZShwYXJzZXIpKSk7CisJCQl9CisJCQlYTUxfUGFyc2VyRnJlZShwYXJzZXIpOworCQl9CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gc3RhcnQgUFJPUEZJTkQgcmVxdWVzdFxuIik7CisJfQorCisJZnJlZShscy5wYXRoKTsKKwlmcmVlKHVybCk7CisJc3RyYnVmX3JlbGVhc2UoJm91dF9idWZmZXIuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmaW5fYnVmZmVyKTsKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGRhdl9oZWFkZXJzKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3JlbW90ZV9vYmplY3RfbGlzdCh1bnNpZ25lZCBjaGFyIHBhcmVudCkKK3sKKwljaGFyIHBhdGhbXSA9ICJvYmplY3RzL1hYLyI7CisJc3RhdGljIGNvbnN0IGNoYXIgaGV4W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisJdW5zaWduZWQgaW50IHZhbCA9IHBhcmVudDsKKworCXBhdGhbOF0gPSBoZXhbdmFsID4+IDRdOworCXBhdGhbOV0gPSBoZXhbdmFsICYgMHhmXTsKKwlyZW1vdGVfZGlyX2V4aXN0c1t2YWxdID0gMDsKKwlyZW1vdGVfbHMocGF0aCwgKFBST0NFU1NfRklMRVMgfCBQUk9DRVNTX0RJUlMpLAorCQkgIHByb2Nlc3NfbHNfb2JqZWN0LCAmdmFsKTsKK30KKworc3RhdGljIGludCBsb2NraW5nX2F2YWlsYWJsZSh2b2lkKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3Qgc3RyYnVmIGluX2J1ZmZlciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBidWZmZXIgb3V0X2J1ZmZlciA9IHsgU1RSQlVGX0lOSVQsIDAgfTsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqZGF2X2hlYWRlcnMgPSBOVUxMOworCXN0cnVjdCB4bWxfY3R4IGN0eDsKKwlpbnQgbG9ja19mbGFncyA9IDA7CisJY2hhciAqZXNjYXBlZDsKKworCWVzY2FwZWQgPSB4bWxfZW50aXRpZXMocmVwby0+dXJsKTsKKwlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsIFBST1BGSU5EX1NVUFBPUlRFRExPQ0tfUkVRVUVTVCwgZXNjYXBlZCk7CisJZnJlZShlc2NhcGVkKTsKKworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJEZXB0aDogMCIpOworCWRhdl9oZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoZGF2X2hlYWRlcnMsICJDb250ZW50LVR5cGU6IHRleHQveG1sIik7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cChzbG90LT5jdXJsLCByZXBvLT51cmwsIERBVl9QUk9QRklORCwKKwkJCSZvdXRfYnVmZmVyLCBmd3JpdGVfYnVmZmVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmaW5fYnVmZmVyKTsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCQlYTUxfUGFyc2VyIHBhcnNlciA9IFhNTF9QYXJzZXJDcmVhdGUoTlVMTCk7CisJCQllbnVtIFhNTF9TdGF0dXMgcmVzdWx0OworCQkJY3R4Lm5hbWUgPSB4Y2FsbG9jKDEwLCAxKTsKKwkJCWN0eC5sZW4gPSAwOworCQkJY3R4LmNkYXRhID0gTlVMTDsKKwkJCWN0eC51c2VyRnVuYyA9IGhhbmRsZV9sb2NrcHJvcF9jdHg7CisJCQljdHgudXNlckRhdGEgPSAmbG9ja19mbGFnczsKKwkJCVhNTF9TZXRVc2VyRGF0YShwYXJzZXIsICZjdHgpOworCQkJWE1MX1NldEVsZW1lbnRIYW5kbGVyKHBhcnNlciwgeG1sX3N0YXJ0X3RhZywKKwkJCQkJICAgICAgeG1sX2VuZF90YWcpOworCQkJcmVzdWx0ID0gWE1MX1BhcnNlKHBhcnNlciwgaW5fYnVmZmVyLmJ1ZiwKKwkJCQkJICAgaW5fYnVmZmVyLmxlbiwgMSk7CisJCQlmcmVlKGN0eC5uYW1lKTsKKworCQkJaWYgKHJlc3VsdCAhPSBYTUxfU1RBVFVTX09LKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJYTUwgZXJyb3I6ICVzXG4iLAorCQkJCQlYTUxfRXJyb3JTdHJpbmcoCisJCQkJCQlYTUxfR2V0RXJyb3JDb2RlKHBhcnNlcikpKTsKKwkJCQlsb2NrX2ZsYWdzID0gMDsKKwkJCX0KKwkJCVhNTF9QYXJzZXJGcmVlKHBhcnNlcik7CisJCQlpZiAoIWxvY2tfZmxhZ3MpCisJCQkJZXJyb3IoIm5vIERBViBsb2NraW5nIHN1cHBvcnQgb24gJXMiLAorCQkJCSAgICAgIHJlcG8tPnVybCk7CisKKwkJfSBlbHNlIHsKKwkJCWVycm9yKCJDYW5ub3QgYWNjZXNzIFVSTCAlcywgcmV0dXJuIGNvZGUgJWQiLAorCQkJICAgICAgcmVwby0+dXJsLCByZXN1bHRzLmN1cmxfcmVzdWx0KTsKKwkJCWxvY2tfZmxhZ3MgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJZXJyb3IoIlVuYWJsZSB0byBzdGFydCBQUk9QRklORCByZXF1ZXN0IG9uICVzIiwgcmVwby0+dXJsKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmb3V0X2J1ZmZlci5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZpbl9idWZmZXIpOworCWN1cmxfc2xpc3RfZnJlZV9hbGwoZGF2X2hlYWRlcnMpOworCisJcmV0dXJuIGxvY2tfZmxhZ3M7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKiphZGRfb25lX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBvYmplY3RfbGlzdCAqKnApCit7CisJc3RydWN0IG9iamVjdF9saXN0ICplbnRyeSA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBvYmplY3RfbGlzdCkpOworCWVudHJ5LT5pdGVtID0gb2JqOworCWVudHJ5LT5uZXh0ID0gKnA7CisJKnAgPSBlbnRyeTsKKwlyZXR1cm4gJmVudHJ5LT5uZXh0OworfQorCitzdGF0aWMgc3RydWN0IG9iamVjdF9saXN0ICoqcHJvY2Vzc19ibG9iKHN0cnVjdCBibG9iICpibG9iLAorCQkJCQkgc3RydWN0IG9iamVjdF9saXN0ICoqcCwKKwkJCQkJIHN0cnVjdCBuYW1lX3BhdGggKnBhdGgsCisJCQkJCSBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZibG9iLT5vYmplY3Q7CisKKwlvYmotPmZsYWdzIHw9IExPQ0FMOworCisJaWYgKG9iai0+ZmxhZ3MgJiAoVU5JTlRFUkVTVElORyB8IFNFRU4pKQorCQlyZXR1cm4gcDsKKworCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwlyZXR1cm4gYWRkX29uZV9vYmplY3Qob2JqLCBwKTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3RfbGlzdCAqKnByb2Nlc3NfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwKKwkJCQkJIHN0cnVjdCBvYmplY3RfbGlzdCAqKnAsCisJCQkJCSBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJCQkgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmdHJlZS0+b2JqZWN0OworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwlzdHJ1Y3QgbmFtZV9wYXRoIG1lOworCisJb2JqLT5mbGFncyB8PSBMT0NBTDsKKworCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBTRUVOKSkKKwkJcmV0dXJuIHA7CisJaWYgKHBhcnNlX3RyZWUodHJlZSkgPCAwKQorCQlkaWUoImJhZCB0cmVlIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCisJb2JqLT5mbGFncyB8PSBTRUVOOworCW5hbWUgPSB4c3RyZHVwKG5hbWUpOworCXAgPSBhZGRfb25lX29iamVjdChvYmosIHApOworCW1lLnVwID0gcGF0aDsKKwltZS5lbGVtID0gbmFtZTsKKwltZS5lbGVtX2xlbiA9IHN0cmxlbihuYW1lKTsKKworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCB0cmVlLT5idWZmZXIsIHRyZWUtPnNpemUpOworCisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpCisJCXN3aXRjaCAob2JqZWN0X3R5cGUoZW50cnkubW9kZSkpIHsKKwkJY2FzZSBPQkpfVFJFRToKKwkJCXAgPSBwcm9jZXNzX3RyZWUobG9va3VwX3RyZWUoZW50cnkuc2hhMSksIHAsICZtZSwgbmFtZSk7CisJCQlicmVhazsKKwkJY2FzZSBPQkpfQkxPQjoKKwkJCXAgPSBwcm9jZXNzX2Jsb2IobG9va3VwX2Jsb2IoZW50cnkuc2hhMSksIHAsICZtZSwgbmFtZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIFN1YnByb2plY3QgY29tbWl0IC0gbm90IGluIHRoaXMgcmVwb3NpdG9yeSAqLworCQkJYnJlYWs7CisJCX0KKworCWZyZWVfdHJlZV9idWZmZXIodHJlZSk7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2RlbHRhKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrKQoreworCWludCBpOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3Qgb2JqZWN0X2xpc3QgKipwID0gJm9iamVjdHM7CisJaW50IGNvdW50ID0gMDsKKworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKHJldnMpKSAhPSBOVUxMKSB7CisJCXAgPSBwcm9jZXNzX3RyZWUoY29tbWl0LT50cmVlLCBwLCBOVUxMLCAiIik7CisJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IExPQ0FMOworCQlpZiAoIShjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJY291bnQgKz0gYWRkX3NlbmRfcmVxdWVzdCgmY29tbWl0LT5vYmplY3QsIGxvY2spOworCX0KKworCWZvciAoaSA9IDA7IGkgPCByZXZzLT5wZW5kaW5nLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqZW50cnkgPSByZXZzLT5wZW5kaW5nLm9iamVjdHMgKyBpOworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBlbnRyeS0+aXRlbTsKKwkJY29uc3QgY2hhciAqbmFtZSA9IGVudHJ5LT5uYW1lOworCisJCWlmIChvYmotPmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBTRUVOKSkKKwkJCWNvbnRpbnVlOworCQlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwkJCXAgPSBhZGRfb25lX29iamVjdChvYmosIHApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfVFJFRSkgeworCQkJcCA9IHByb2Nlc3NfdHJlZSgoc3RydWN0IHRyZWUgKilvYmosIHAsIE5VTEwsIG5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfQkxPQikgeworCQkJcCA9IHByb2Nlc3NfYmxvYigoc3RydWN0IGJsb2IgKilvYmosIHAsIE5VTEwsIG5hbWUpOworCQkJY29udGludWU7CisJCX0KKwkJZGllKCJ1bmtub3duIHBlbmRpbmcgb2JqZWN0ICVzICglcykiLCBzaGExX3RvX2hleChvYmotPnNoYTEpLCBuYW1lKTsKKwl9CisKKwl3aGlsZSAob2JqZWN0cykgeworCQlpZiAoIShvYmplY3RzLT5pdGVtLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJY291bnQgKz0gYWRkX3NlbmRfcmVxdWVzdChvYmplY3RzLT5pdGVtLCBsb2NrKTsKKwkJb2JqZWN0cyA9IG9iamVjdHMtPm5leHQ7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9yZW1vdGUodW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IHJlbW90ZV9sb2NrICpsb2NrKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgYnVmZmVyIG91dF9idWZmZXIgPSB7IFNUUkJVRl9JTklULCAwIH07CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzOworCisJZGF2X2hlYWRlcnMgPSBnZXRfZGF2X3Rva2VuX2hlYWRlcnMobG9jaywgREFWX0hFQURFUl9JRik7CisKKwlzdHJidWZfYWRkZigmb3V0X2J1ZmZlci5idWYsICIlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCXNsb3QtPnJlc3VsdHMgPSAmcmVzdWx0czsKKwljdXJsX3NldHVwX2h0dHAoc2xvdC0+Y3VybCwgbG9jay0+dXJsLCBEQVZfUFVULAorCQkJJm91dF9idWZmZXIsIGZ3cml0ZV9udWxsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgZGF2X2hlYWRlcnMpOworCisJaWYgKHN0YXJ0X2FjdGl2ZV9zbG90KHNsb3QpKSB7CisJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJc3RyYnVmX3JlbGVhc2UoJm91dF9idWZmZXIuYnVmKTsKKwkJaWYgKHJlc3VsdHMuY3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJQVVQgZXJyb3I6IGN1cmwgcmVzdWx0PSVkLCBIVFRQIGNvZGU9JWxkXG4iLAorCQkJCXJlc3VsdHMuY3VybF9yZXN1bHQsIHJlc3VsdHMuaHR0cF9jb2RlKTsKKwkJCS8qIFdlIHNob3VsZCBhdHRlbXB0IHJlY292ZXJ5PyAqLworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlzdHJidWZfcmVsZWFzZSgmb3V0X2J1ZmZlci5idWYpOworCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBzdGFydCBQVVQgcmVxdWVzdFxuIik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnM7CisKK3N0YXRpYyB2b2lkIG9uZV9yZW1vdGVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCBvYmplY3QgKm9iajsKKworCXJlZiA9IGFsbG9jX3JlZihyZWZuYW1lKTsKKworCWlmIChodHRwX2ZldGNoX3JlZihyZXBvLT51cmwsIHJlZikgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJVbmFibGUgdG8gZmV0Y2ggcmVmICVzIGZyb20gJXNcbiIsCisJCQlyZWZuYW1lLCByZXBvLT51cmwpOworCQlmcmVlKHJlZik7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEZldGNoIGEgY29weSBvZiB0aGUgb2JqZWN0IGlmIGl0IGRvZXNuJ3QgZXhpc3QgbG9jYWxseSAtIGl0CisJICogbWF5IGJlIHJlcXVpcmVkIGZvciB1cGRhdGluZyBzZXJ2ZXIgaW5mbyBsYXRlci4KKwkgKi8KKwlpZiAocmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgJiYgIWhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkpIHsKKwkJb2JqID0gbG9va3VwX3Vua25vd25fb2JqZWN0KHJlZi0+b2xkX3NoYTEpOworCQlpZiAob2JqKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwJIiAgZmV0Y2ggJXMgZm9yICVzXG4iLAorCQkJCXNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpLCByZWZuYW1lKTsKKwkJCWFkZF9mZXRjaF9yZXF1ZXN0KG9iaik7CisJCX0KKwl9CisKKwlyZWYtPm5leHQgPSByZW1vdGVfcmVmczsKKwlyZW1vdGVfcmVmcyA9IHJlZjsKK30KKworc3RhdGljIHZvaWQgZ2V0X2Rhdl9yZW1vdGVfaGVhZHModm9pZCkKK3sKKwlyZW1vdGVfbHMoInJlZnMvIiwgKFBST0NFU1NfRklMRVMgfCBQUk9DRVNTX0RJUlMgfCBSRUNVUlNJVkUpLCBwcm9jZXNzX2xzX3JlZiwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9yZW1vdGVfaW5mb19yZWYoc3RydWN0IHJlbW90ZV9sc19jdHggKmxzKQoreworCXN0cnVjdCBzdHJidWYgKmJ1ZiA9IChzdHJ1Y3Qgc3RyYnVmICopbHMtPnVzZXJEYXRhOworCXN0cnVjdCBvYmplY3QgKm87CisJc3RydWN0IHJlZiAqcmVmOworCisJcmVmID0gYWxsb2NfcmVmKGxzLT5kZW50cnlfbmFtZSk7CisKKwlpZiAoaHR0cF9mZXRjaF9yZWYocmVwby0+dXJsLCByZWYpICE9IDApIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiVW5hYmxlIHRvIGZldGNoIHJlZiAlcyBmcm9tICVzXG4iLAorCQkJbHMtPmRlbnRyeV9uYW1lLCByZXBvLT51cmwpOworCQlhYm9ydGVkID0gMTsKKwkJZnJlZShyZWYpOworCQlyZXR1cm47CisJfQorCisJbyA9IHBhcnNlX29iamVjdChyZWYtPm9sZF9zaGExKTsKKwlpZiAoIW8pIHsKKwkJZnByaW50ZihzdGRlcnIsCisJCQkiVW5hYmxlIHRvIHBhcnNlIG9iamVjdCAlcyBmb3IgcmVtb3RlIHJlZiAlc1xuIiwKKwkJCXNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpLCBscy0+ZGVudHJ5X25hbWUpOworCQlhYm9ydGVkID0gMTsKKwkJZnJlZShyZWYpOworCQlyZXR1cm47CisJfQorCisJc3RyYnVmX2FkZGYoYnVmLCAiJXNcdCVzXG4iLAorCQkgICAgc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSksIGxzLT5kZW50cnlfbmFtZSk7CisKKwlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW8gPSBkZXJlZl90YWcobywgbHMtPmRlbnRyeV9uYW1lLCAwKTsKKwkJaWYgKG8pCisJCQlzdHJidWZfYWRkZihidWYsICIlc1x0JXNee31cbiIsCisJCQkJICAgIHNoYTFfdG9faGV4KG8tPnNoYTEpLCBscy0+ZGVudHJ5X25hbWUpOworCX0KKwlmcmVlKHJlZik7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZW1vdGVfaW5mb19yZWZzKHN0cnVjdCByZW1vdGVfbG9jayAqbG9jaykKK3sKKwlzdHJ1Y3QgYnVmZmVyIGJ1ZmZlciA9IHsgU1RSQlVGX0lOSVQsIDAgfTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJc3RydWN0IGN1cmxfc2xpc3QgKmRhdl9oZWFkZXJzOworCisJcmVtb3RlX2xzKCJyZWZzLyIsIChQUk9DRVNTX0ZJTEVTIHwgUkVDVVJTSVZFKSwKKwkJICBhZGRfcmVtb3RlX2luZm9fcmVmLCAmYnVmZmVyLmJ1Zik7CisJaWYgKCFhYm9ydGVkKSB7CisJCWRhdl9oZWFkZXJzID0gZ2V0X2Rhdl90b2tlbl9oZWFkZXJzKGxvY2ssIERBVl9IRUFERVJfSUYpOworCisJCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwkJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCQljdXJsX3NldHVwX2h0dHAoc2xvdC0+Y3VybCwgbG9jay0+dXJsLCBEQVZfUFVULAorCQkJCSZidWZmZXIsIGZ3cml0ZV9udWxsKTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsIGRhdl9oZWFkZXJzKTsKKworCQlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJCXJ1bl9hY3RpdmVfc2xvdChzbG90KTsKKwkJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSJQVVQgZXJyb3I6IGN1cmwgcmVzdWx0PSVkLCBIVFRQIGNvZGU9JWxkXG4iLAorCQkJCQlyZXN1bHRzLmN1cmxfcmVzdWx0LCByZXN1bHRzLmh0dHBfY29kZSk7CisJCQl9CisJCX0KKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlci5idWYpOworfQorCitzdGF0aWMgaW50IHJlbW90ZV9leGlzdHMoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICp1cmwgPSB4c3RyZm10KCIlcyVzIiwgcmVwby0+dXJsLCBwYXRoKTsKKwlpbnQgcmV0OworCisKKwlzd2l0Y2ggKGh0dHBfZ2V0X3N0cmJ1Zih1cmwsIE5VTEwsIE5VTEwpKSB7CisJY2FzZSBIVFRQX09LOgorCQlyZXQgPSAxOworCQlicmVhazsKKwljYXNlIEhUVFBfTUlTU0lOR19UQVJHRVQ6CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgSFRUUF9FUlJPUjoKKwkJZXJyb3IoInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiLCB1cmwsIGN1cmxfZXJyb3JzdHIpOworCWRlZmF1bHQ6CisJCXJldCA9IC0xOworCX0KKwlmcmVlKHVybCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZmV0Y2hfc3ltcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKipzeW1yZWYsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJY2hhciAqdXJsID0geHN0cmZtdCgiJXMlcyIsIHJlcG8tPnVybCwgcGF0aCk7CisJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpuYW1lOworCisJaWYgKGh0dHBfZ2V0X3N0cmJ1Zih1cmwsICZidWZmZXIsIE5VTEwpICE9IEhUVFBfT0spCisJCWRpZSgiQ291bGRuJ3QgZ2V0ICVzIGZvciByZW1vdGUgc3ltcmVmXG4lcyIsIHVybCwKKwkJICAgIGN1cmxfZXJyb3JzdHIpOworCWZyZWUodXJsKTsKKworCWZyZWUoKnN5bXJlZik7CisJKnN5bXJlZiA9IE5VTEw7CisJaGFzaGNscihzaGExKTsKKworCWlmIChidWZmZXIubGVuID09IDApCisJCXJldHVybjsKKworCS8qIEN1dCBvZmYgdHJhaWxpbmcgbmV3bGluZS4gKi8KKwlzdHJidWZfcnRyaW0oJmJ1ZmZlcik7CisKKwkvKiBJZiBpdCdzIGEgc3ltcmVmLCBzZXQgdGhlIHJlZm5hbWU7IG90aGVyd2lzZSB0cnkgZm9yIGEgc2hhMSAqLworCWlmIChza2lwX3ByZWZpeChidWZmZXIuYnVmLCAicmVmOiAiLCAmbmFtZSkpIHsKKwkJKnN5bXJlZiA9IHhtZW1kdXB6KG5hbWUsIGJ1ZmZlci5sZW4gLSAobmFtZSAtIGJ1ZmZlci5idWYpKTsKKwl9IGVsc2UgeworCQlnZXRfc2hhMV9oZXgoYnVmZmVyLmJ1Ziwgc2hhMSk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X21lcmdlX2Jhc2UodW5zaWduZWQgY2hhciAqaGVhZF9zaGExLCBzdHJ1Y3QgcmVmICpyZW1vdGUpCit7CisJc3RydWN0IGNvbW1pdCAqaGVhZCA9IGxvb2t1cF9jb21taXRfb3JfZGllKGhlYWRfc2hhMSwgIkhFQUQiKTsKKwlzdHJ1Y3QgY29tbWl0ICpicmFuY2ggPSBsb29rdXBfY29tbWl0X29yX2RpZShyZW1vdGUtPm9sZF9zaGExLCByZW1vdGUtPm5hbWUpOworCisJcmV0dXJuIGluX21lcmdlX2Jhc2VzKGJyYW5jaCwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbnQgZGVsZXRlX3JlbW90ZV9icmFuY2goY29uc3QgY2hhciAqcGF0dGVybiwgaW50IGZvcmNlKQoreworCXN0cnVjdCByZWYgKnJlZnMgPSByZW1vdGVfcmVmczsKKwlzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF07CisJY2hhciAqc3ltcmVmID0gTlVMTDsKKwlpbnQgbWF0Y2g7CisJaW50IHBhdGxlbiA9IHN0cmxlbihwYXR0ZXJuKTsKKwlpbnQgaTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3Qgc2xvdF9yZXN1bHRzIHJlc3VsdHM7CisJY2hhciAqdXJsOworCisJLyogRmluZCB0aGUgcmVtb3RlIGJyYW5jaChlcykgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCBicmFuY2ggbmFtZSAqLworCWZvciAobWF0Y2ggPSAwOyByZWZzOyByZWZzID0gcmVmcy0+bmV4dCkgeworCQljaGFyICpuYW1lID0gcmVmcy0+bmFtZTsKKwkJaW50IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJCWlmIChuYW1lbGVuIDwgcGF0bGVuIHx8CisJCSAgICBtZW1jbXAobmFtZSArIG5hbWVsZW4gLSBwYXRsZW4sIHBhdHRlcm4sIHBhdGxlbikpCisJCQljb250aW51ZTsKKwkJaWYgKG5hbWVsZW4gIT0gcGF0bGVuICYmIG5hbWVbbmFtZWxlbiAtIHBhdGxlbiAtIDFdICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQltYXRjaCsrOworCQlyZW1vdGVfcmVmID0gcmVmczsKKwl9CisJaWYgKG1hdGNoID09IDApCisJCXJldHVybiBlcnJvcigiTm8gcmVtb3RlIGJyYW5jaCBtYXRjaGVzICVzIiwgcGF0dGVybik7CisJaWYgKG1hdGNoICE9IDEpCisJCXJldHVybiBlcnJvcigiTW9yZSB0aGFuIG9uZSByZW1vdGUgYnJhbmNoIG1hdGNoZXMgJXMiLAorCQkJICAgICBwYXR0ZXJuKTsKKworCS8qCisJICogUmVtb3RlIEhFQUQgbXVzdCBiZSBhIHN5bXJlZiAobm90IGV4YWN0bHkgZm9vbHByb29mOyBhIHJlbW90ZQorCSAqIHN5bWxpbmsgdG8gYSBzeW1yZWYgd2lsbCBsb29rIGxpa2UgYSBzeW1yZWYpCisJICovCisJZmV0Y2hfc3ltcmVmKCJIRUFEIiwgJnN5bXJlZiwgaGVhZF9zaGExKTsKKwlpZiAoIXN5bXJlZikKKwkJcmV0dXJuIGVycm9yKCJSZW1vdGUgSEVBRCBpcyBub3QgYSBzeW1yZWYiKTsKKworCS8qIFJlbW90ZSBicmFuY2ggbXVzdCBub3QgYmUgdGhlIHJlbW90ZSBIRUFEICovCisJZm9yIChpID0gMDsgc3ltcmVmICYmIGkgPCBNQVhERVBUSDsgaSsrKSB7CisJCWlmICghc3RyY21wKHJlbW90ZV9yZWYtPm5hbWUsIHN5bXJlZikpCisJCQlyZXR1cm4gZXJyb3IoIlJlbW90ZSBicmFuY2ggJXMgaXMgdGhlIGN1cnJlbnQgSEVBRCIsCisJCQkJICAgICByZW1vdGVfcmVmLT5uYW1lKTsKKwkJZmV0Y2hfc3ltcmVmKHN5bXJlZiwgJnN5bXJlZiwgaGVhZF9zaGExKTsKKwl9CisKKwkvKiBSdW4gZXh0cmEgc2FuaXR5IGNoZWNrcyBpZiBkZWxldGUgaXMgbm90IGZvcmNlZCAqLworCWlmICghZm9yY2UpIHsKKwkJLyogUmVtb3RlIEhFQUQgbXVzdCByZXNvbHZlIHRvIGEga25vd24gb2JqZWN0ICovCisJCWlmIChzeW1yZWYpCisJCQlyZXR1cm4gZXJyb3IoIlJlbW90ZSBIRUFEIHN5bXJlZnMgdG9vIGRlZXAiKTsKKwkJaWYgKGlzX251bGxfc2hhMShoZWFkX3NoYTEpKQorCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSByZW1vdGUgSEVBRCIpOworCQlpZiAoIWhhc19zaGExX2ZpbGUoaGVhZF9zaGExKSkKKwkJCXJldHVybiBlcnJvcigiUmVtb3RlIEhFQUQgcmVzb2x2ZXMgdG8gb2JqZWN0ICVzXG53aGljaCBkb2VzIG5vdCBleGlzdCBsb2NhbGx5LCBwZXJoYXBzIHlvdSBuZWVkIHRvIGZldGNoPyIsIHNoYTFfdG9faGV4KGhlYWRfc2hhMSkpOworCisJCS8qIFJlbW90ZSBicmFuY2ggbXVzdCByZXNvbHZlIHRvIGEga25vd24gb2JqZWN0ICovCisJCWlmIChpc19udWxsX3NoYTEocmVtb3RlX3JlZi0+b2xkX3NoYTEpKQorCQkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSByZW1vdGUgYnJhbmNoICVzIiwKKwkJCQkgICAgIHJlbW90ZV9yZWYtPm5hbWUpOworCQlpZiAoIWhhc19zaGExX2ZpbGUocmVtb3RlX3JlZi0+b2xkX3NoYTEpKQorCQkJcmV0dXJuIGVycm9yKCJSZW1vdGUgYnJhbmNoICVzIHJlc29sdmVzIHRvIG9iamVjdCAlc1xud2hpY2ggZG9lcyBub3QgZXhpc3QgbG9jYWxseSwgcGVyaGFwcyB5b3UgbmVlZCB0byBmZXRjaD8iLCByZW1vdGVfcmVmLT5uYW1lLCBzaGExX3RvX2hleChyZW1vdGVfcmVmLT5vbGRfc2hhMSkpOworCisJCS8qIFJlbW90ZSBicmFuY2ggbXVzdCBiZSBhbiBhbmNlc3RvciBvZiByZW1vdGUgSEVBRCAqLworCQlpZiAoIXZlcmlmeV9tZXJnZV9iYXNlKGhlYWRfc2hhMSwgcmVtb3RlX3JlZikpIHsKKwkJCXJldHVybiBlcnJvcigiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBhbiBhbmNlc3RvciAiCisJCQkJICAgICAib2YgeW91ciBjdXJyZW50IEhFQUQuXG4iCisJCQkJICAgICAiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwiCisJCQkJICAgICAiIHJ1bjpcblx0J2dpdCBodHRwLXB1c2ggLUQgJXMgJXMnIiwKKwkJCQkgICAgIHJlbW90ZV9yZWYtPm5hbWUsIHJlcG8tPnVybCwgcGF0dGVybik7CisJCX0KKwl9CisKKwkvKiBTZW5kIGRlbGV0ZSByZXF1ZXN0ICovCisJZnByaW50ZihzdGRlcnIsICJSZW1vdmluZyByZW1vdGUgYnJhbmNoICclcydcbiIsIHJlbW90ZV9yZWYtPm5hbWUpOworCWlmIChkcnlfcnVuKQorCQlyZXR1cm4gMDsKKwl1cmwgPSB4c3RyZm10KCIlcyVzIiwgcmVwby0+dXJsLCByZW1vdGVfcmVmLT5uYW1lKTsKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+cmVzdWx0cyA9ICZyZXN1bHRzOworCWN1cmxfc2V0dXBfaHR0cF9nZXQoc2xvdC0+Y3VybCwgdXJsLCBEQVZfREVMRVRFKTsKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQlmcmVlKHVybCk7CisJCWlmIChyZXN1bHRzLmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKQorCQkJcmV0dXJuIGVycm9yKCJERUxFVEUgcmVxdWVzdCBmYWlsZWQgKCVkLyVsZCkiLAorCQkJCSAgICAgcmVzdWx0cy5jdXJsX3Jlc3VsdCwgcmVzdWx0cy5odHRwX2NvZGUpOworCX0gZWxzZSB7CisJCWZyZWUodXJsKTsKKwkJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gc3RhcnQgREVMRVRFIHJlcXVlc3QiKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcnVuX3JlcXVlc3RfcXVldWUodm9pZCkKK3sKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAxOworCWZpbGxfYWN0aXZlX3Nsb3RzKCk7CisJYWRkX2ZpbGxfZnVuY3Rpb24oTlVMTCwgZmlsbF9hY3RpdmVfc2xvdCk7CisjZW5kaWYKKwlkbyB7CisJCWZpbmlzaF9hbGxfYWN0aXZlX3Nsb3RzKCk7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwkJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKyNlbmRpZgorCX0gd2hpbGUgKHJlcXVlc3RfcXVldWVfaGVhZCAmJiAhYWJvcnRlZCk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAwOworI2VuZGlmCit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqcmVxdWVzdDsKKwlzdHJ1Y3QgdHJhbnNmZXJfcmVxdWVzdCAqbmV4dF9yZXF1ZXN0OworCWludCBucl9yZWZzcGVjID0gMDsKKwljaGFyICoqcmVmc3BlYyA9IE5VTEw7CisJc3RydWN0IHJlbW90ZV9sb2NrICpyZWZfbG9jayA9IE5VTEw7CisJc3RydWN0IHJlbW90ZV9sb2NrICppbmZvX3JlZl9sb2NrID0gTlVMTDsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwlpbnQgZGVsZXRlX2JyYW5jaCA9IDA7CisJaW50IGZvcmNlX2RlbGV0ZSA9IDA7CisJaW50IG9iamVjdHNfdG9fc2VuZDsKKwlpbnQgcmMgPSAwOworCWludCBpOworCWludCBuZXdfcmVmczsKKwlzdHJ1Y3QgcmVmICpyZWYsICpsb2NhbF9yZWZzOworCisJZ2l0X3NldHVwX2dldHRleHQoKTsKKworCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisKKwlyZXBvID0geGNhbGxvYygxLCBzaXplb2YoKnJlcG8pKTsKKworCWFyZ3YrKzsKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrLCBhcmd2KyspIHsKKwkJY2hhciAqYXJnID0gKmFyZ3Y7CisKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCQkJcHVzaF9hbGwgPSBNQVRDSF9SRUZTX0FMTDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tZm9yY2UiKSkgeworCQkJCWZvcmNlX2FsbCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItLWRyeS1ydW4iKSkgeworCQkJCWRyeV9ydW4gPSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFzdHJjbXAoYXJnLCAiLS1oZWxwZXItc3RhdHVzIikpIHsKKwkJCQloZWxwZXJfc3RhdHVzID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi0tdmVyYm9zZSIpKSB7CisJCQkJcHVzaF92ZXJib3NlbHkgPSAxOworCQkJCWh0dHBfaXNfdmVyYm9zZSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItZCIpKSB7CisJCQkJZGVsZXRlX2JyYW5jaCA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIXN0cmNtcChhcmcsICItRCIpKSB7CisJCQkJZGVsZXRlX2JyYW5jaCA9IDE7CisJCQkJZm9yY2VfZGVsZXRlID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICghc3RyY21wKGFyZywgIi1oIikpCisJCQkJdXNhZ2UoaHR0cF9wdXNoX3VzYWdlKTsKKwkJfQorCQlpZiAoIXJlcG8tPnVybCkgeworCQkJY2hhciAqcGF0aCA9IHN0cnN0cihhcmcsICIvLyIpOworCQkJc3RyX2VuZF91cmxfd2l0aF9zbGFzaChhcmcsICZyZXBvLT51cmwpOworCQkJcmVwby0+cGF0aF9sZW4gPSBzdHJsZW4ocmVwby0+dXJsKTsKKwkJCWlmIChwYXRoKSB7CisJCQkJcmVwby0+cGF0aCA9IHN0cmNocihwYXRoKzIsICcvJyk7CisJCQkJaWYgKHJlcG8tPnBhdGgpCisJCQkJCXJlcG8tPnBhdGhfbGVuID0gc3RybGVuKHJlcG8tPnBhdGgpOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJcmVmc3BlYyA9IGFyZ3Y7CisJCW5yX3JlZnNwZWMgPSBhcmdjIC0gaTsKKwkJYnJlYWs7CisJfQorCisjaWZuZGVmIFVTRV9DVVJMX01VTFRJCisJZGllKCJnaXQtcHVzaCBpcyBub3QgYXZhaWxhYmxlIGZvciBodHRwL2h0dHBzIHJlcG9zaXRvcnkgd2hlbiBub3QgY29tcGlsZWQgd2l0aCBVU0VfQ1VSTF9NVUxUSSIpOworI2VuZGlmCisKKwlpZiAoIXJlcG8tPnVybCkKKwkJdXNhZ2UoaHR0cF9wdXNoX3VzYWdlKTsKKworCWlmIChkZWxldGVfYnJhbmNoICYmIG5yX3JlZnNwZWMgIT0gMSkKKwkJZGllKCJZb3UgbXVzdCBzcGVjaWZ5IG9ubHkgb25lIGJyYW5jaCBuYW1lIHdoZW4gZGVsZXRpbmcgYSByZW1vdGUgYnJhbmNoIik7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisKKwltZW1zZXQocmVtb3RlX2Rpcl9leGlzdHMsIC0xLCAyNTYpOworCisJaHR0cF9pbml0KE5VTEwsIHJlcG8tPnVybCwgMSk7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWlzX3J1bm5pbmdfcXVldWUgPSAwOworI2VuZGlmCisKKwkvKiBWZXJpZnkgREFWIGNvbXBsaWFuY2UvbG9jayBzdXBwb3J0ICovCisJaWYgKCFsb2NraW5nX2F2YWlsYWJsZSgpKSB7CisJCXJjID0gMTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCXNpZ2NoYWluX3B1c2hfY29tbW9uKHJlbW92ZV9sb2Nrc19vbl9zaWduYWwpOworCisJLyogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIGhhcyBzZXJ2ZXIgaW5mbyBmaWxlcyAqLworCXJlcG8tPmNhbl91cGRhdGVfaW5mb19yZWZzID0gMDsKKwlyZXBvLT5oYXNfaW5mb19yZWZzID0gcmVtb3RlX2V4aXN0cygiaW5mby9yZWZzIik7CisJcmVwby0+aGFzX2luZm9fcGFja3MgPSByZW1vdGVfZXhpc3RzKCJvYmplY3RzL2luZm8vcGFja3MiKTsKKwlpZiAocmVwby0+aGFzX2luZm9fcmVmcykgeworCQlpbmZvX3JlZl9sb2NrID0gbG9ja19yZW1vdGUoImluZm8vcmVmcyIsIExPQ0tfVElNRSk7CisJCWlmIChpbmZvX3JlZl9sb2NrKQorCQkJcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMgPSAxOworCQllbHNlIHsKKwkJCWVycm9yKCJjYW5ub3QgbG9jayBleGlzdGluZyBpbmZvL3JlZnMiKTsKKwkJCXJjID0gMTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCX0KKwlpZiAocmVwby0+aGFzX2luZm9fcGFja3MpCisJCWZldGNoX2luZGljZXMoKTsKKworCS8qIEdldCBhIGxpc3Qgb2YgYWxsIGxvY2FsIGFuZCByZW1vdGUgaGVhZHMgdG8gdmFsaWRhdGUgcmVmc3BlY3MgKi8KKwlsb2NhbF9yZWZzID0gZ2V0X2xvY2FsX2hlYWRzKCk7CisJZnByaW50ZihzdGRlcnIsICJGZXRjaGluZyByZW1vdGUgaGVhZHMuLi5cbiIpOworCWdldF9kYXZfcmVtb3RlX2hlYWRzKCk7CisJcnVuX3JlcXVlc3RfcXVldWUoKTsKKworCS8qIFJlbW92ZSBhIHJlbW90ZSBicmFuY2ggaWYgLWQgb3IgLUQgd2FzIHNwZWNpZmllZCAqLworCWlmIChkZWxldGVfYnJhbmNoKSB7CisJCWlmIChkZWxldGVfcmVtb3RlX2JyYW5jaChyZWZzcGVjWzBdLCBmb3JjZV9kZWxldGUpID09IC0xKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBkZWxldGUgcmVtb3RlIGJyYW5jaCAlc1xuIiwKKwkJCQlyZWZzcGVjWzBdKTsKKwkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCXByaW50ZigiZXJyb3IgJXMgY2Fubm90IHJlbW92ZVxuIiwgcmVmc3BlY1swXSk7CisJCX0KKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qIG1hdGNoIHRoZW0gdXAgKi8KKwlpZiAobWF0Y2hfcHVzaF9yZWZzKGxvY2FsX3JlZnMsICZyZW1vdGVfcmVmcywKKwkJCSAgICBucl9yZWZzcGVjLCAoY29uc3QgY2hhciAqKikgcmVmc3BlYywgcHVzaF9hbGwpKSB7CisJCXJjID0gLTE7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJaWYgKCFyZW1vdGVfcmVmcykgeworCQlmcHJpbnRmKHN0ZGVyciwgIk5vIHJlZnMgaW4gY29tbW9uIGFuZCBub25lIHNwZWNpZmllZDsgZG9pbmcgbm90aGluZy5cbiIpOworCQlpZiAoaGVscGVyX3N0YXR1cykKKwkJCXByaW50ZigiZXJyb3IgbnVsbCBubyBtYXRjaFxuIik7CisJCXJjID0gMDsKKwkJZ290byBjbGVhbnVwOworCX0KKworCW5ld19yZWZzID0gMDsKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzdHJ1Y3QgYXJndl9hcnJheSBjb21taXRfYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCQlpZiAoIXJlZi0+cGVlcl9yZWYpCisJCQljb250aW51ZTsKKworCQlpZiAoaXNfbnVsbF9zaGExKHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKSkgeworCQkJaWYgKGRlbGV0ZV9yZW1vdGVfYnJhbmNoKHJlZi0+bmFtZSwgMSkgPT0gLTEpIHsKKwkJCQllcnJvcigiQ291bGQgbm90IHJlbW92ZSAlcyIsIHJlZi0+bmFtZSk7CisJCQkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQkJCXByaW50ZigiZXJyb3IgJXMgY2Fubm90IHJlbW92ZVxuIiwgcmVmLT5uYW1lKTsKKwkJCQlyYyA9IC00OworCQkJfQorCQkJZWxzZSBpZiAoaGVscGVyX3N0YXR1cykKKwkJCQlwcmludGYoIm9rICVzXG4iLCByZWYtPm5hbWUpOworCQkJbmV3X3JlZnMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFoYXNoY21wKHJlZi0+b2xkX3NoYTEsIHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKSkgeworCQkJaWYgKHB1c2hfdmVyYm9zZWx5KQorCQkJCWZwcmludGYoc3RkZXJyLCAiJyVzJzogdXAtdG8tZGF0ZVxuIiwgcmVmLT5uYW1lKTsKKwkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCXByaW50Zigib2sgJXMgdXAgdG8gZGF0ZVxuIiwgcmVmLT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFmb3JjZV9hbGwgJiYKKwkJICAgICFpc19udWxsX3NoYTEocmVmLT5vbGRfc2hhMSkgJiYKKwkJICAgICFyZWYtPmZvcmNlKSB7CisJCQlpZiAoIWhhc19zaGExX2ZpbGUocmVmLT5vbGRfc2hhMSkgfHwKKwkJCSAgICAhcmVmX25ld2VyKHJlZi0+cGVlcl9yZWYtPm5ld19zaGExLAorCQkJCSAgICAgICByZWYtPm9sZF9zaGExKSkgeworCQkJCS8qCisJCQkJICogV2UgZG8gbm90IGhhdmUgdGhlIHJlbW90ZSByZWYsIG9yCisJCQkJICogd2Uga25vdyB0aGF0IHRoZSByZW1vdGUgcmVmIGlzIG5vdAorCQkJCSAqIGFuIGFuY2VzdG9yIG9mIHdoYXQgd2UgYXJlIHRyeWluZyB0bworCQkJCSAqIHB1c2guICBFaXRoZXIgd2F5IHRoaXMgY2FuIGJlIGxvc2luZworCQkJCSAqIGNvbW1pdHMgYXQgdGhlIHJlbW90ZSBlbmQgYW5kIGxpa2VseQorCQkJCSAqIHdlIHdlcmUgbm90IHVwIHRvIGRhdGUgdG8gYmVnaW4gd2l0aC4KKwkJCQkgKi8KKwkJCQllcnJvcigicmVtb3RlICclcycgaXMgbm90IGFuIGFuY2VzdG9yIG9mXG4iCisJCQkJICAgICAgImxvY2FsICclcycuXG4iCisJCQkJICAgICAgIk1heWJlIHlvdSBhcmUgbm90IHVwLXRvLWRhdGUgYW5kICIKKwkJCQkgICAgICAibmVlZCB0byBwdWxsIGZpcnN0PyIsCisJCQkJICAgICAgcmVmLT5uYW1lLAorCQkJCSAgICAgIHJlZi0+cGVlcl9yZWYtPm5hbWUpOworCQkJCWlmIChoZWxwZXJfc3RhdHVzKQorCQkJCQlwcmludGYoImVycm9yICVzIG5vbi1mYXN0IGZvcndhcmRcbiIsIHJlZi0+bmFtZSk7CisJCQkJcmMgPSAtMjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKTsKKwkJbmV3X3JlZnMrKzsKKworCQlmcHJpbnRmKHN0ZGVyciwgInVwZGF0aW5nICclcyciLCByZWYtPm5hbWUpOworCQlpZiAoc3RyY21wKHJlZi0+bmFtZSwgcmVmLT5wZWVyX3JlZi0+bmFtZSkpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiB1c2luZyAnJXMnIiwgcmVmLT5wZWVyX3JlZi0+bmFtZSk7CisJCWZwcmludGYoc3RkZXJyLCAiXG4gIGZyb20gJXNcbiAgdG8gICAlc1xuIiwKKwkJCXNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTEpLCBzaGExX3RvX2hleChyZWYtPm5ld19zaGExKSk7CisJCWlmIChkcnlfcnVuKSB7CisJCQlpZiAoaGVscGVyX3N0YXR1cykKKwkJCQlwcmludGYoIm9rICVzXG4iLCByZWYtPm5hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBMb2NrIHJlbW90ZSBicmFuY2ggcmVmICovCisJCXJlZl9sb2NrID0gbG9ja19yZW1vdGUocmVmLT5uYW1lLCBMT0NLX1RJTUUpOworCQlpZiAocmVmX2xvY2sgPT0gTlVMTCkgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gbG9jayByZW1vdGUgYnJhbmNoICVzXG4iLAorCQkJCXJlZi0+bmFtZSk7CisJCQlpZiAoaGVscGVyX3N0YXR1cykKKwkJCQlwcmludGYoImVycm9yICVzIGxvY2sgZXJyb3JcbiIsIHJlZi0+bmFtZSk7CisJCQlyYyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFNldCB1cCByZXZpc2lvbiBpbmZvIGZvciB0aGlzIHJlZnNwZWMgKi8KKwkJYXJndl9hcnJheV9wdXNoKCZjb21taXRfYXJndiwgIiIpOyAvKiBpZ25vcmVkICovCisJCWFyZ3ZfYXJyYXlfcHVzaCgmY29tbWl0X2FyZ3YsICItLW9iamVjdHMiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZjb21taXRfYXJndiwgc2hhMV90b19oZXgocmVmLT5uZXdfc2hhMSkpOworCQlpZiAoIXB1c2hfYWxsICYmICFpc19udWxsX3NoYTEocmVmLT5vbGRfc2hhMSkpCisJCQlhcmd2X2FycmF5X3B1c2hmKCZjb21taXRfYXJndiwgIl4lcyIsCisJCQkJCSBzaGExX3RvX2hleChyZWYtPm9sZF9zaGExKSk7CisJCWluaXRfcmV2aXNpb25zKCZyZXZzLCBzZXR1cF9naXRfZGlyZWN0b3J5KCkpOworCQlzZXR1cF9yZXZpc2lvbnMoY29tbWl0X2FyZ3YuYXJnYywgY29tbWl0X2FyZ3YuYXJndiwgJnJldnMsIE5VTEwpOworCQlyZXZzLmVkZ2VfaGludCA9IDA7IC8qIGp1c3QgaW4gY2FzZSAqLworCisJCS8qIEdlbmVyYXRlIGEgbGlzdCBvZiBvYmplY3RzIHRoYXQgbmVlZCB0byBiZSBwdXNoZWQgKi8KKwkJcHVzaGluZyA9IDA7CisJCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCQltYXJrX2VkZ2VzX3VuaW50ZXJlc3RpbmcoJnJldnMsIE5VTEwpOworCQlvYmplY3RzX3RvX3NlbmQgPSBnZXRfZGVsdGEoJnJldnMsIHJlZl9sb2NrKTsKKwkJZmluaXNoX2FsbF9hY3RpdmVfc2xvdHMoKTsKKworCQkvKiBQdXNoIG1pc3Npbmcgb2JqZWN0cyB0byByZW1vdGUsIHRoaXMgd291bGQgYmUgYQorCQkgICBjb252ZW5pZW50IHRpbWUgdG8gcGFjayB0aGVtIGZpcnN0IGlmIGFwcHJvcHJpYXRlLiAqLworCQlwdXNoaW5nID0gMTsKKwkJaWYgKG9iamVjdHNfdG9fc2VuZCkKKwkJCWZwcmludGYoc3RkZXJyLCAiICAgIHNlbmRpbmcgJWQgb2JqZWN0c1xuIiwKKwkJCQlvYmplY3RzX3RvX3NlbmQpOworCisJCXJ1bl9yZXF1ZXN0X3F1ZXVlKCk7CisKKwkJLyogVXBkYXRlIHRoZSByZW1vdGUgYnJhbmNoIGlmIGFsbCB3ZW50IHdlbGwgKi8KKwkJaWYgKGFib3J0ZWQgfHwgIXVwZGF0ZV9yZW1vdGUocmVmLT5uZXdfc2hhMSwgcmVmX2xvY2spKQorCQkJcmMgPSAxOworCisJCWlmICghcmMpCisJCQlmcHJpbnRmKHN0ZGVyciwgIiAgICBkb25lXG4iKTsKKwkJaWYgKGhlbHBlcl9zdGF0dXMpCisJCQlwcmludGYoIiVzICVzXG4iLCAhcmMgPyAib2siIDogImVycm9yIiwgcmVmLT5uYW1lKTsKKwkJdW5sb2NrX3JlbW90ZShyZWZfbG9jayk7CisJCWNoZWNrX2xvY2tzKCk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmNvbW1pdF9hcmd2KTsKKwl9CisKKwkvKiBVcGRhdGUgcmVtb3RlIHNlcnZlciBpbmZvIGlmIGFwcHJvcHJpYXRlICovCisJaWYgKHJlcG8tPmhhc19pbmZvX3JlZnMgJiYgbmV3X3JlZnMpIHsKKwkJaWYgKGluZm9fcmVmX2xvY2sgJiYgcmVwby0+Y2FuX3VwZGF0ZV9pbmZvX3JlZnMpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVXBkYXRpbmcgcmVtb3RlIHNlcnZlciBpbmZvXG4iKTsKKwkJCWlmICghZHJ5X3J1bikKKwkJCQl1cGRhdGVfcmVtb3RlX2luZm9fcmVmcyhpbmZvX3JlZl9sb2NrKTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIHVwZGF0ZSBzZXJ2ZXIgaW5mb1xuIik7CisJCX0KKwl9CisKKyBjbGVhbnVwOgorCWlmIChpbmZvX3JlZl9sb2NrKQorCQl1bmxvY2tfcmVtb3RlKGluZm9fcmVmX2xvY2spOworCWZyZWUocmVwbyk7CisKKwlodHRwX2NsZWFudXAoKTsKKworCXJlcXVlc3QgPSByZXF1ZXN0X3F1ZXVlX2hlYWQ7CisJd2hpbGUgKHJlcXVlc3QgIT0gTlVMTCkgeworCQluZXh0X3JlcXVlc3QgPSByZXF1ZXN0LT5uZXh0OworCQlyZWxlYXNlX3JlcXVlc3QocmVxdWVzdCk7CisJCXJlcXVlc3QgPSBuZXh0X3JlcXVlc3Q7CisJfQorCisJcmV0dXJuIHJjOworfQpkaWZmIC0tZ2l0IGEvaHR0cC13YWxrZXIuYyBiL2h0dHAtd2Fsa2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3MjFmMAotLS0gL2Rldi9udWxsCisrKyBiL2h0dHAtd2Fsa2VyLmMKQEAgLTAsMCArMSw1ODcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgIndhbGtlci5oIgorI2luY2x1ZGUgImh0dHAuaCIKKworc3RydWN0IGFsdF9iYXNlIHsKKwljaGFyICpiYXNlOworCWludCBnb3RfaW5kaWNlczsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja3M7CisJc3RydWN0IGFsdF9iYXNlICpuZXh0OworfTsKKworZW51bSBvYmplY3RfcmVxdWVzdF9zdGF0ZSB7CisJV0FJVElORywKKwlBQk9SVEVELAorCUFDVElWRSwKKwlDT01QTEVURQorfTsKKworc3RydWN0IG9iamVjdF9yZXF1ZXN0IHsKKwlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXI7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG87CisJZW51bSBvYmplY3RfcmVxdWVzdF9zdGF0ZSBzdGF0ZTsKKwlzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqbmV4dDsKK307CisKK3N0cnVjdCBhbHRlcm5hdGVzX3JlcXVlc3QgeworCXN0cnVjdCB3YWxrZXIgKndhbGtlcjsKKwljb25zdCBjaGFyICpiYXNlOworCXN0cnVjdCBzdHJidWYgKnVybDsKKwlzdHJ1Y3Qgc3RyYnVmICpidWZmZXI7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJaW50IGh0dHBfc3BlY2lmaWM7Cit9OworCitzdHJ1Y3Qgd2Fsa2VyX2RhdGEgeworCWNvbnN0IGNoYXIgKnVybDsKKwlpbnQgZ290X2FsdGVybmF0ZXM7CisJc3RydWN0IGFsdF9iYXNlICphbHQ7Cit9OworCitzdGF0aWMgc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmplY3RfcXVldWVfaGVhZDsKKworc3RhdGljIHZvaWQgZmV0Y2hfYWx0ZXJuYXRlcyhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKmJhc2UpOworCitzdGF0aWMgdm9pZCBwcm9jZXNzX29iamVjdF9yZXNwb25zZSh2b2lkICpjYWxsYmFja19kYXRhKTsKKworc3RhdGljIHZvaWQgc3RhcnRfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IHdhbGtlciAqd2Fsa2VyLAorCQkJCSBzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKnJlcTsKKworCXJlcSA9IG5ld19odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcG8tPmJhc2UsIG9ial9yZXEtPnNoYTEpOworCWlmIChyZXEgPT0gTlVMTCkgeworCQlvYmpfcmVxLT5zdGF0ZSA9IEFCT1JURUQ7CisJCXJldHVybjsKKwl9CisJb2JqX3JlcS0+cmVxID0gcmVxOworCisJc2xvdCA9IHJlcS0+c2xvdDsKKwlzbG90LT5jYWxsYmFja19mdW5jID0gcHJvY2Vzc19vYmplY3RfcmVzcG9uc2U7CisJc2xvdC0+Y2FsbGJhY2tfZGF0YSA9IG9ial9yZXE7CisKKwkvKiBUcnkgdG8gZ2V0IHRoZSByZXF1ZXN0IHN0YXJ0ZWQsIGFib3J0IHRoZSByZXF1ZXN0IG9uIGVycm9yICovCisJb2JqX3JlcS0+c3RhdGUgPSBBQ1RJVkU7CisJaWYgKCFzdGFydF9hY3RpdmVfc2xvdChzbG90KSkgeworCQlvYmpfcmVxLT5zdGF0ZSA9IEFCT1JURUQ7CisJCXJlbGVhc2VfaHR0cF9vYmplY3RfcmVxdWVzdChyZXEpOworCQlyZXR1cm47CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxKQoreworCWlmIChmaW5pc2hfaHR0cF9vYmplY3RfcmVxdWVzdChvYmpfcmVxLT5yZXEpKQorCQlyZXR1cm47CisKKwlpZiAob2JqX3JlcS0+cmVxLT5yZW5hbWUgPT0gMCkKKwkJd2Fsa2VyX3NheShvYmpfcmVxLT53YWxrZXIsICJnb3QgJXNcbiIsIHNoYTFfdG9faGV4KG9ial9yZXEtPnNoYTEpKTsKK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19vYmplY3RfcmVzcG9uc2Uodm9pZCAqY2FsbGJhY2tfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEgPQorCQkoc3RydWN0IG9iamVjdF9yZXF1ZXN0ICopY2FsbGJhY2tfZGF0YTsKKwlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIgPSBvYmpfcmVxLT53YWxrZXI7CisJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOworCXN0cnVjdCBhbHRfYmFzZSAqYWx0ID0gZGF0YS0+YWx0OworCisJcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSk7CisJb2JqX3JlcS0+c3RhdGUgPSBDT01QTEVURTsKKworCS8qIFVzZSBhbHRlcm5hdGVzIGlmIG5lY2Vzc2FyeSAqLworCWlmIChtaXNzaW5nX3RhcmdldChvYmpfcmVxLT5yZXEpKSB7CisJCWZldGNoX2FsdGVybmF0ZXMod2Fsa2VyLCBhbHQtPmJhc2UpOworCQlpZiAob2JqX3JlcS0+cmVwby0+bmV4dCAhPSBOVUxMKSB7CisJCQlvYmpfcmVxLT5yZXBvID0KKwkJCQlvYmpfcmVxLT5yZXBvLT5uZXh0OworCQkJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSk7CisJCQlzdGFydF9vYmplY3RfcmVxdWVzdCh3YWxrZXIsIG9ial9yZXEpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZmluaXNoX29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKmVudHJ5ID0gb2JqZWN0X3F1ZXVlX2hlYWQ7CisKKwlpZiAob2JqX3JlcS0+cmVxICE9TlVMTCAmJiBvYmpfcmVxLT5yZXEtPmxvY2FsZmlsZSAhPSAtMSkKKwkJZXJyb3IoImZkIGxlYWthZ2UgaW4gcmVsZWFzZTogJWQiLCBvYmpfcmVxLT5yZXEtPmxvY2FsZmlsZSk7CisJaWYgKG9ial9yZXEgPT0gb2JqZWN0X3F1ZXVlX2hlYWQpIHsKKwkJb2JqZWN0X3F1ZXVlX2hlYWQgPSBvYmpfcmVxLT5uZXh0OworCX0gZWxzZSB7CisJCXdoaWxlIChlbnRyeS0+bmV4dCAhPSBOVUxMICYmIGVudHJ5LT5uZXh0ICE9IG9ial9yZXEpCisJCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCQlpZiAoZW50cnktPm5leHQgPT0gb2JqX3JlcSkKKwkJCWVudHJ5LT5uZXh0ID0gZW50cnktPm5leHQtPm5leHQ7CisJfQorCisJZnJlZShvYmpfcmVxKTsKK30KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdGF0aWMgaW50IGZpbGxfYWN0aXZlX3Nsb3Qoc3RydWN0IHdhbGtlciAqd2Fsa2VyKQoreworCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqb2JqX3JlcTsKKworCWZvciAob2JqX3JlcSA9IG9iamVjdF9xdWV1ZV9oZWFkOyBvYmpfcmVxOyBvYmpfcmVxID0gb2JqX3JlcS0+bmV4dCkgeworCQlpZiAob2JqX3JlcS0+c3RhdGUgPT0gV0FJVElORykgeworCQkJaWYgKGhhc19zaGExX2ZpbGUob2JqX3JlcS0+c2hhMSkpCisJCQkJb2JqX3JlcS0+c3RhdGUgPSBDT01QTEVURTsKKwkJCWVsc2UgeworCQkJCXN0YXJ0X29iamVjdF9yZXF1ZXN0KHdhbGtlciwgb2JqX3JlcSk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgcHJlZmV0Y2goc3RydWN0IHdhbGtlciAqd2Fsa2VyLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqbmV3cmVxOworCXN0cnVjdCBvYmplY3RfcmVxdWVzdCAqdGFpbDsKKwlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CisKKwluZXdyZXEgPSB4bWFsbG9jKHNpemVvZigqbmV3cmVxKSk7CisJbmV3cmVxLT53YWxrZXIgPSB3YWxrZXI7CisJaGFzaGNweShuZXdyZXEtPnNoYTEsIHNoYTEpOworCW5ld3JlcS0+cmVwbyA9IGRhdGEtPmFsdDsKKwluZXdyZXEtPnN0YXRlID0gV0FJVElORzsKKwluZXdyZXEtPnJlcSA9IE5VTEw7CisJbmV3cmVxLT5uZXh0ID0gTlVMTDsKKworCWh0dHBfaXNfdmVyYm9zZSA9IHdhbGtlci0+Z2V0X3ZlcmJvc2VseTsKKworCWlmIChvYmplY3RfcXVldWVfaGVhZCA9PSBOVUxMKSB7CisJCW9iamVjdF9xdWV1ZV9oZWFkID0gbmV3cmVxOworCX0gZWxzZSB7CisJCXRhaWwgPSBvYmplY3RfcXVldWVfaGVhZDsKKwkJd2hpbGUgKHRhaWwtPm5leHQgIT0gTlVMTCkKKwkJCXRhaWwgPSB0YWlsLT5uZXh0OworCQl0YWlsLT5uZXh0ID0gbmV3cmVxOworCX0KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJZmlsbF9hY3RpdmVfc2xvdHMoKTsKKwlzdGVwX2FjdGl2ZV9zbG90cygpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYWx0ZXJuYXRlc19yZXNwb25zZSh2b2lkICpjYWxsYmFja19kYXRhKQoreworCXN0cnVjdCBhbHRlcm5hdGVzX3JlcXVlc3QgKmFsdF9yZXEgPQorCQkoc3RydWN0IGFsdGVybmF0ZXNfcmVxdWVzdCAqKWNhbGxiYWNrX2RhdGE7CisJc3RydWN0IHdhbGtlciAqd2Fsa2VyID0gYWx0X3JlcS0+d2Fsa2VyOworCXN0cnVjdCB3YWxrZXJfZGF0YSAqY2RhdGEgPSB3YWxrZXItPmRhdGE7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QgPSBhbHRfcmVxLT5zbG90OworCXN0cnVjdCBhbHRfYmFzZSAqdGFpbCA9IGNkYXRhLT5hbHQ7CisJY29uc3QgY2hhciAqYmFzZSA9IGFsdF9yZXEtPmJhc2U7CisJY29uc3QgY2hhciBudWxsX2J5dGUgPSAnXDAnOworCWNoYXIgKmRhdGE7CisJaW50IGkgPSAwOworCisJaWYgKGFsdF9yZXEtPmh0dHBfc3BlY2lmaWMpIHsKKwkJaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LIHx8CisJCSAgICAhYWx0X3JlcS0+YnVmZmVyLT5sZW4pIHsKKworCQkJLyogVHJ5IHJldXNpbmcgdGhlIHNsb3QgdG8gZ2V0IG5vbi1odHRwIGFsdGVybmF0ZXMgKi8KKwkJCWFsdF9yZXEtPmh0dHBfc3BlY2lmaWMgPSAwOworCQkJc3RyYnVmX3Jlc2V0KGFsdF9yZXEtPnVybCk7CisJCQlzdHJidWZfYWRkZihhbHRfcmVxLT51cmwsICIlcy9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIsCisJCQkJICAgIGJhc2UpOworCQkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwKKwkJCQkJIGFsdF9yZXEtPnVybC0+YnVmKTsKKwkJCWFjdGl2ZV9yZXF1ZXN0cysrOworCQkJc2xvdC0+aW5fdXNlID0gMTsKKwkJCWlmIChzbG90LT5maW5pc2hlZCAhPSBOVUxMKQorCQkJCSgqc2xvdC0+ZmluaXNoZWQpID0gMDsKKwkJCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJCQljZGF0YS0+Z290X2FsdGVybmF0ZXMgPSAtMTsKKwkJCQlzbG90LT5pbl91c2UgPSAwOworCQkJCWlmIChzbG90LT5maW5pc2hlZCAhPSBOVUxMKQorCQkJCQkoKnNsb3QtPmZpbmlzaGVkKSA9IDE7CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2UgaWYgKHNsb3QtPmN1cmxfcmVzdWx0ICE9IENVUkxFX09LKSB7CisJCWlmICghbWlzc2luZ190YXJnZXQoc2xvdCkpIHsKKwkJCWNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9IC0xOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZndyaXRlX2J1ZmZlcigoY2hhciAqKSZudWxsX2J5dGUsIDEsIDEsIGFsdF9yZXEtPmJ1ZmZlcik7CisJYWx0X3JlcS0+YnVmZmVyLT5sZW4tLTsKKwlkYXRhID0gYWx0X3JlcS0+YnVmZmVyLT5idWY7CisKKwl3aGlsZSAoaSA8IGFsdF9yZXEtPmJ1ZmZlci0+bGVuKSB7CisJCWludCBwb3NuID0gaTsKKwkJd2hpbGUgKHBvc24gPCBhbHRfcmVxLT5idWZmZXItPmxlbiAmJiBkYXRhW3Bvc25dICE9ICdcbicpCisJCQlwb3NuKys7CisJCWlmIChkYXRhW3Bvc25dID09ICdcbicpIHsKKwkJCWludCBva2F5ID0gMDsKKwkJCWludCBzZXJ2ZXJsZW4gPSAwOworCQkJc3RydWN0IGFsdF9iYXNlICpuZXdhbHQ7CisJCQlpZiAoZGF0YVtpXSA9PSAnLycpIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgY291bnRzCisJCQkJICogaHR0cDovL2dpdC5ob3N0L3B1Yi9zY20vbGludXguZ2l0LworCQkJCSAqIC0tLS0tLS0tLS0taGVyZV4KKwkJCQkgKiBzbyBtZW1jcHkoZHN0LCBiYXNlLCBzZXJ2ZXJsZW4pIHdpbGwKKwkJCQkgKiBjb3B5IHVwIHRvICIuLi5naXQuaG9zdCIuCisJCQkJICovCisJCQkJY29uc3QgY2hhciAqY29sb25fc3MgPSBzdHJzdHIoYmFzZSwiOi8vIik7CisJCQkJaWYgKGNvbG9uX3NzKSB7CisJCQkJCXNlcnZlcmxlbiA9IChzdHJjaHIoY29sb25fc3MgKyAzLCAnLycpCisJCQkJCQkgICAgIC0gYmFzZSk7CisJCQkJCW9rYXkgPSAxOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoIW1lbWNtcChkYXRhICsgaSwgIi4uLyIsIDMpKSB7CisJCQkJLyoKKwkJCQkgKiBSZWxhdGl2ZSBVUkw7IGNob3AgdGhlIGNvcnJlc3BvbmRpbmcKKwkJCQkgKiBudW1iZXIgb2Ygc3VicGF0aCBmcm9tIGJhc2UgKGFuZCAuLi8KKwkJCQkgKiBmcm9tIGRhdGEpLCBhbmQgY29uY2F0ZW5hdGUgdGhlIHJlc3VsdC4KKwkJCQkgKgorCQkJCSAqIFRoZSBjb2RlIGZpcnN0IGRyb3BzIC4uLyBmcm9tIGRhdGEsIGFuZAorCQkJCSAqIHRoZW4gZHJvcHMgb25lIC4uLyBmcm9tIGRhdGEgYW5kIG9uZSBwYXRoCisJCQkJICogZnJvbSBiYXNlLiAgSU9XLCBvbmUgZXh0cmEgLi4vIGlzIGRyb3BwZWQKKwkJCQkgKiBmcm9tIGRhdGEgdGhhbiBwYXRoIGlzIGRyb3BwZWQgZnJvbSBiYXNlLgorCQkJCSAqCisJCQkJICogVGhpcyBpcyBub3Qgd3JvbmcuICBUaGUgYWx0ZXJuYXRlIGluCisJCQkJICogICAgIGh0dHA6Ly9naXQuaG9zdC9wdWIvc2NtL2xpbnV4LmdpdC8KKwkJCQkgKiB0byBib3Jyb3cgZnJvbQorCQkJCSAqICAgICBodHRwOi8vZ2l0Lmhvc3QvcHViL3NjbS9saW51cy5naXQvCisJCQkJICogaXMgLi4vLi4vbGludXMuZ2l0L29iamVjdHMvLiAgWW91IG5lZWQKKwkJCQkgKiB0d28gLi4vLi4vIHRvIGJvcnJvdyBmcm9tIHlvdXIgZGlyZWN0CisJCQkJICogbmVpZ2hib3VyLgorCQkJCSAqLworCQkJCWkgKz0gMzsKKwkJCQlzZXJ2ZXJsZW4gPSBzdHJsZW4oYmFzZSk7CisJCQkJd2hpbGUgKGkgKyAyIDwgcG9zbiAmJgorCQkJCSAgICAgICAhbWVtY21wKGRhdGEgKyBpLCAiLi4vIiwgMykpIHsKKwkJCQkJZG8geworCQkJCQkJc2VydmVybGVuLS07CisJCQkJCX0gd2hpbGUgKHNlcnZlcmxlbiAmJgorCQkJCQkJIGJhc2Vbc2VydmVybGVuIC0gMV0gIT0gJy8nKTsKKwkJCQkJaSArPSAzOworCQkJCX0KKwkJCQkvKiBJZiB0aGUgc2VydmVyIGdvdCByZW1vdmVkLCBnaXZlIHVwLiAqLworCQkJCW9rYXkgPSBzdHJjaHIoYmFzZSwgJzonKSAtIGJhc2UgKyAzIDwKKwkJCQkgICAgICAgc2VydmVybGVuOworCQkJfSBlbHNlIGlmIChhbHRfcmVxLT5odHRwX3NwZWNpZmljKSB7CisJCQkJY2hhciAqY29sb24gPSBzdHJjaHIoZGF0YSArIGksICc6Jyk7CisJCQkJY2hhciAqc2xhc2ggPSBzdHJjaHIoZGF0YSArIGksICcvJyk7CisJCQkJaWYgKGNvbG9uICYmIHNsYXNoICYmIGNvbG9uIDwgZGF0YSArIHBvc24gJiYKKwkJCQkgICAgc2xhc2ggPCBkYXRhICsgcG9zbiAmJiBjb2xvbiA8IHNsYXNoKSB7CisJCQkJCW9rYXkgPSAxOworCQkJCX0KKwkJCX0KKwkJCS8qIHNraXAgIm9iamVjdHNcbiIgYXQgZW5kICovCisJCQlpZiAob2theSkgeworCQkJCXN0cnVjdCBzdHJidWYgdGFyZ2V0ID0gU1RSQlVGX0lOSVQ7CisJCQkJc3RyYnVmX2FkZCgmdGFyZ2V0LCBiYXNlLCBzZXJ2ZXJsZW4pOworCQkJCXN0cmJ1Zl9hZGQoJnRhcmdldCwgZGF0YSArIGksIHBvc24gLSBpIC0gNyk7CisJCQkJaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKKwkJCQkJZnByaW50ZihzdGRlcnIsICJBbHNvIGxvb2sgYXQgJXNcbiIsCisJCQkJCQl0YXJnZXQuYnVmKTsKKwkJCQluZXdhbHQgPSB4bWFsbG9jKHNpemVvZigqbmV3YWx0KSk7CisJCQkJbmV3YWx0LT5uZXh0ID0gTlVMTDsKKwkJCQluZXdhbHQtPmJhc2UgPSBzdHJidWZfZGV0YWNoKCZ0YXJnZXQsIE5VTEwpOworCQkJCW5ld2FsdC0+Z290X2luZGljZXMgPSAwOworCQkJCW5ld2FsdC0+cGFja3MgPSBOVUxMOworCisJCQkJd2hpbGUgKHRhaWwtPm5leHQgIT0gTlVMTCkKKwkJCQkJdGFpbCA9IHRhaWwtPm5leHQ7CisJCQkJdGFpbC0+bmV4dCA9IG5ld2FsdDsKKwkJCX0KKwkJfQorCQlpID0gcG9zbiArIDE7CisJfQorCisJY2RhdGEtPmdvdF9hbHRlcm5hdGVzID0gMTsKK30KKworc3RhdGljIHZvaWQgZmV0Y2hfYWx0ZXJuYXRlcyhzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKmJhc2UpCit7CisJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHVybCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBhbHRlcm5hdGVzX3JlcXVlc3QgYWx0X3JlcTsKKwlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmNkYXRhID0gd2Fsa2VyLT5kYXRhOworCisJLyoKKwkgKiBJZiBhbm90aGVyIHJlcXVlc3QgaGFzIGFscmVhZHkgc3RhcnRlZCBmZXRjaGluZyBhbHRlcm5hdGVzLAorCSAqIHdhaXQgZm9yIHRoZW0gdG8gYXJyaXZlIGFuZCByZXR1cm4gdG8gcHJvY2Vzc2luZyB0aGlzIHJlcXVlc3QncworCSAqIGN1cmwgbWVzc2FnZQorCSAqLworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJd2hpbGUgKGNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9PSAwKSB7CisJCXN0ZXBfYWN0aXZlX3Nsb3RzKCk7CisJfQorI2VuZGlmCisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXkndmUgYWxyZWFkeSBiZWVuIGZldGNoZWQgKi8KKwlpZiAoY2RhdGEtPmdvdF9hbHRlcm5hdGVzID09IDEpCisJCXJldHVybjsKKworCS8qIFN0YXJ0IHRoZSBmZXRjaCAqLworCWNkYXRhLT5nb3RfYWx0ZXJuYXRlcyA9IDA7CisKKwlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KQorCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgYWx0ZXJuYXRlcyBsaXN0IGZvciAlc1xuIiwgYmFzZSk7CisKKwlzdHJidWZfYWRkZigmdXJsLCAiJXMvb2JqZWN0cy9pbmZvL2h0dHAtYWx0ZXJuYXRlcyIsIGJhc2UpOworCisJLyoKKwkgKiBVc2UgYSBjYWxsYmFjayB0byBwcm9jZXNzIHRoZSByZXN1bHQsIHNpbmNlIGFub3RoZXIgcmVxdWVzdAorCSAqIG1heSBmYWlsIGFuZCBuZWVkIHRvIGhhdmUgYWx0ZXJuYXRlcyBsb2FkZWQgYmVmb3JlIGNvbnRpbnVpbmcKKwkgKi8KKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisJc2xvdC0+Y2FsbGJhY2tfZnVuYyA9IHByb2Nlc3NfYWx0ZXJuYXRlc19yZXNwb25zZTsKKwlhbHRfcmVxLndhbGtlciA9IHdhbGtlcjsKKwlzbG90LT5jYWxsYmFja19kYXRhID0gJmFsdF9yZXE7CisKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgJmJ1ZmZlcik7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHVybC5idWYpOworCisJYWx0X3JlcS5iYXNlID0gYmFzZTsKKwlhbHRfcmVxLnVybCA9ICZ1cmw7CisJYWx0X3JlcS5idWZmZXIgPSAmYnVmZmVyOworCWFsdF9yZXEuaHR0cF9zcGVjaWZpYyA9IDE7CisJYWx0X3JlcS5zbG90ID0gc2xvdDsKKworCWlmIChzdGFydF9hY3RpdmVfc2xvdChzbG90KSkKKwkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCWVsc2UKKwkJY2RhdGEtPmdvdF9hbHRlcm5hdGVzID0gLTE7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmZmVyKTsKKwlzdHJidWZfcmVsZWFzZSgmdXJsKTsKK30KKworc3RhdGljIGludCBmZXRjaF9pbmRpY2VzKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IGFsdF9iYXNlICpyZXBvKQoreworCWludCByZXQ7CisKKwlpZiAocmVwby0+Z290X2luZGljZXMpCisJCXJldHVybiAwOworCisJaWYgKHdhbGtlci0+Z2V0X3ZlcmJvc2VseSkKKwkJZnByaW50ZihzdGRlcnIsICJHZXR0aW5nIHBhY2sgbGlzdCBmb3IgJXNcbiIsIHJlcG8tPmJhc2UpOworCisJc3dpdGNoIChodHRwX2dldF9pbmZvX3BhY2tzKHJlcG8tPmJhc2UsICZyZXBvLT5wYWNrcykpIHsKKwljYXNlIEhUVFBfT0s6CisJY2FzZSBIVFRQX01JU1NJTkdfVEFSR0VUOgorCQlyZXBvLT5nb3RfaW5kaWNlcyA9IDE7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlcG8tPmdvdF9pbmRpY2VzID0gMDsKKwkJcmV0ID0gLTE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBodHRwX2ZldGNoX3BhY2soc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG8sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKKwlpbnQgcmV0OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXE7CisKKwlpZiAoZmV0Y2hfaW5kaWNlcyh3YWxrZXIsIHJlcG8pKQorCQlyZXR1cm4gLTE7CisJdGFyZ2V0ID0gZmluZF9zaGExX3BhY2soc2hhMSwgcmVwby0+cGFja3MpOworCWlmICghdGFyZ2V0KQorCQlyZXR1cm4gLTE7CisKKwlpZiAod2Fsa2VyLT5nZXRfdmVyYm9zZWx5KSB7CisJCWZwcmludGYoc3RkZXJyLCAiR2V0dGluZyBwYWNrICVzXG4iLAorCQkJc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSk7CisJCWZwcmludGYoc3RkZXJyLCAiIHdoaWNoIGNvbnRhaW5zICVzXG4iLAorCQkJc2hhMV90b19oZXgoc2hhMSkpOworCX0KKworCXByZXEgPSBuZXdfaHR0cF9wYWNrX3JlcXVlc3QodGFyZ2V0LCByZXBvLT5iYXNlKTsKKwlpZiAocHJlcSA9PSBOVUxMKQorCQlnb3RvIGFib3J0OworCXByZXEtPmxzdCA9ICZyZXBvLT5wYWNrczsKKwlwcmVxLT5zbG90LT5yZXN1bHRzID0gJnJlc3VsdHM7CisKKwlpZiAoc3RhcnRfYWN0aXZlX3Nsb3QocHJlcS0+c2xvdCkpIHsKKwkJcnVuX2FjdGl2ZV9zbG90KHByZXEtPnNsb3QpOworCQlpZiAocmVzdWx0cy5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSykgeworCQkJZXJyb3IoIlVuYWJsZSB0byBnZXQgcGFjayBmaWxlICVzXG4lcyIsIHByZXEtPnVybCwKKwkJCSAgICAgIGN1cmxfZXJyb3JzdHIpOworCQkJZ290byBhYm9ydDsKKwkJfQorCX0gZWxzZSB7CisJCWVycm9yKCJVbmFibGUgdG8gc3RhcnQgcmVxdWVzdCIpOworCQlnb3RvIGFib3J0OworCX0KKworCXJldCA9IGZpbmlzaF9odHRwX3BhY2tfcmVxdWVzdChwcmVxKTsKKwlyZWxlYXNlX2h0dHBfcGFja19yZXF1ZXN0KHByZXEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKKworYWJvcnQ6CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBhYm9ydF9vYmplY3RfcmVxdWVzdChzdHJ1Y3Qgb2JqZWN0X3JlcXVlc3QgKm9ial9yZXEpCit7CisJcmVsZWFzZV9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKK30KKworc3RhdGljIGludCBmZXRjaF9vYmplY3Qoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgYWx0X2Jhc2UgKnJlcG8sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJY2hhciAqaGV4ID0gc2hhMV90b19oZXgoc2hhMSk7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9iamVjdF9yZXF1ZXN0ICpvYmpfcmVxID0gb2JqZWN0X3F1ZXVlX2hlYWQ7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKnJlcTsKKworCXdoaWxlIChvYmpfcmVxICE9IE5VTEwgJiYgaGFzaGNtcChvYmpfcmVxLT5zaGExLCBzaGExKSkKKwkJb2JqX3JlcSA9IG9ial9yZXEtPm5leHQ7CisJaWYgKG9ial9yZXEgPT0gTlVMTCkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZG4ndCBmaW5kIHJlcXVlc3QgZm9yICVzIGluIHRoZSBxdWV1ZSIsIGhleCk7CisKKwlpZiAoaGFzX3NoYTFfZmlsZShvYmpfcmVxLT5zaGExKSkgeworCQlpZiAob2JqX3JlcS0+cmVxICE9IE5VTEwpCisJCQlhYm9ydF9odHRwX29iamVjdF9yZXF1ZXN0KG9ial9yZXEtPnJlcSk7CisJCWFib3J0X29iamVjdF9yZXF1ZXN0KG9ial9yZXEpOworCQlyZXR1cm4gMDsKKwl9CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCXdoaWxlIChvYmpfcmVxLT5zdGF0ZSA9PSBXQUlUSU5HKQorCQlzdGVwX2FjdGl2ZV9zbG90cygpOworI2Vsc2UKKwlzdGFydF9vYmplY3RfcmVxdWVzdCh3YWxrZXIsIG9ial9yZXEpOworI2VuZGlmCisKKwkvKgorCSAqIG9ial9yZXEtPnJlcSBtaWdodCBjaGFuZ2Ugd2hlbiBmZXRjaGluZyBhbHRlcm5hdGVzIGluIHRoZSBjYWxsYmFjaworCSAqIHByb2Nlc3Nfb2JqZWN0X3Jlc3BvbnNlOyB0aGVyZWZvcmUsIHRoZSAic2hvcnRjdXQiIHZhcmlhYmxlLCByZXEsCisJICogaXMgdXNlZCBvbmx5IGFmdGVyIHdlJ3JlIGRvbmUgd2l0aCBzbG90cy4KKwkgKi8KKwl3aGlsZSAob2JqX3JlcS0+c3RhdGUgPT0gQUNUSVZFKQorCQlydW5fYWN0aXZlX3Nsb3Qob2JqX3JlcS0+cmVxLT5zbG90KTsKKworCXJlcSA9IG9ial9yZXEtPnJlcTsKKworCWlmIChyZXEtPmxvY2FsZmlsZSAhPSAtMSkgeworCQljbG9zZShyZXEtPmxvY2FsZmlsZSk7CisJCXJlcS0+bG9jYWxmaWxlID0gLTE7CisJfQorCisJaWYgKG9ial9yZXEtPnN0YXRlID09IEFCT1JURUQpIHsKKwkJcmV0ID0gZXJyb3IoIlJlcXVlc3QgZm9yICVzIGFib3J0ZWQiLCBoZXgpOworCX0gZWxzZSBpZiAocmVxLT5jdXJsX3Jlc3VsdCAhPSBDVVJMRV9PSyAmJgorCQkgICByZXEtPmh0dHBfY29kZSAhPSA0MTYpIHsKKwkJaWYgKG1pc3NpbmdfdGFyZ2V0KHJlcSkpCisJCQlyZXQgPSAtMTsgLyogQmUgc2lsZW50LCBpdCBpcyBwcm9iYWJseSBpbiBhIHBhY2suICovCisJCWVsc2UKKwkJCXJldCA9IGVycm9yKCIlcyAoY3VybF9yZXN1bHQgPSAlZCwgaHR0cF9jb2RlID0gJWxkLCBzaGExID0gJXMpIiwKKwkJCQkgICAgcmVxLT5lcnJvcnN0ciwgcmVxLT5jdXJsX3Jlc3VsdCwKKwkJCQkgICAgcmVxLT5odHRwX2NvZGUsIGhleCk7CisJfSBlbHNlIGlmIChyZXEtPnpyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCXdhbGtlci0+Y29ycnVwdF9vYmplY3RfZm91bmQrKzsKKwkJcmV0ID0gZXJyb3IoIkZpbGUgJXMgKCVzKSBjb3JydXB0IiwgaGV4LCByZXEtPnVybCk7CisJfSBlbHNlIGlmIChoYXNoY21wKG9ial9yZXEtPnNoYTEsIHJlcS0+cmVhbF9zaGExKSkgeworCQlyZXQgPSBlcnJvcigiRmlsZSAlcyBoYXMgYmFkIGhhc2giLCBoZXgpOworCX0gZWxzZSBpZiAocmVxLT5yZW5hbWUgPCAwKSB7CisJCXJldCA9IGVycm9yKCJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlbmFtZSAlcyIsCisJCQkgICAgc2hhMV9maWxlX25hbWUocmVxLT5zaGExKSk7CisJfQorCisJcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KHJlcSk7CisJcmVsZWFzZV9vYmplY3RfcmVxdWVzdChvYmpfcmVxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGZldGNoKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CisJc3RydWN0IGFsdF9iYXNlICphbHRiYXNlID0gZGF0YS0+YWx0OworCisJaWYgKCFmZXRjaF9vYmplY3Qod2Fsa2VyLCBhbHRiYXNlLCBzaGExKSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGFsdGJhc2UpIHsKKwkJaWYgKCFodHRwX2ZldGNoX3BhY2sod2Fsa2VyLCBhbHRiYXNlLCBzaGExKSkKKwkJCXJldHVybiAwOworCQlmZXRjaF9hbHRlcm5hdGVzKHdhbGtlciwgZGF0YS0+YWx0LT5iYXNlKTsKKwkJYWx0YmFzZSA9IGFsdGJhc2UtPm5leHQ7CisJfQorCXJldHVybiBlcnJvcigiVW5hYmxlIHRvIGZpbmQgJXMgdW5kZXIgJXMiLCBzaGExX3RvX2hleChzaGExKSwKKwkJICAgICBkYXRhLT5hbHQtPmJhc2UpOworfQorCitzdGF0aWMgaW50IGZldGNoX3JlZihzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCByZWYgKnJlZikKK3sKKwlzdHJ1Y3Qgd2Fsa2VyX2RhdGEgKmRhdGEgPSB3YWxrZXItPmRhdGE7CisJcmV0dXJuIGh0dHBfZmV0Y2hfcmVmKGRhdGEtPmFsdC0+YmFzZSwgcmVmKTsKK30KKworc3RhdGljIHZvaWQgY2xlYW51cChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpCit7CisJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0gd2Fsa2VyLT5kYXRhOworCXN0cnVjdCBhbHRfYmFzZSAqYWx0LCAqYWx0X25leHQ7CisKKwlpZiAoZGF0YSkgeworCQlhbHQgPSBkYXRhLT5hbHQ7CisJCXdoaWxlIChhbHQpIHsKKwkJCWFsdF9uZXh0ID0gYWx0LT5uZXh0OworCisJCQlmcmVlKGFsdC0+YmFzZSk7CisJCQlmcmVlKGFsdCk7CisKKwkJCWFsdCA9IGFsdF9uZXh0OworCQl9CisJCWZyZWUoZGF0YSk7CisJCXdhbGtlci0+ZGF0YSA9IE5VTEw7CisJfQorfQorCitzdHJ1Y3Qgd2Fsa2VyICpnZXRfaHR0cF93YWxrZXIoY29uc3QgY2hhciAqdXJsKQoreworCWNoYXIgKnM7CisJc3RydWN0IHdhbGtlcl9kYXRhICpkYXRhID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHdhbGtlcl9kYXRhKSk7CisJc3RydWN0IHdhbGtlciAqd2Fsa2VyID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHdhbGtlcikpOworCisJZGF0YS0+YWx0ID0geG1hbGxvYyhzaXplb2YoKmRhdGEtPmFsdCkpOworCWRhdGEtPmFsdC0+YmFzZSA9IHhzdHJkdXAodXJsKTsKKwlmb3IgKHMgPSBkYXRhLT5hbHQtPmJhc2UgKyBzdHJsZW4oZGF0YS0+YWx0LT5iYXNlKSAtIDE7ICpzID09ICcvJzsgLS1zKQorCQkqcyA9IDA7CisKKwlkYXRhLT5hbHQtPmdvdF9pbmRpY2VzID0gMDsKKwlkYXRhLT5hbHQtPnBhY2tzID0gTlVMTDsKKwlkYXRhLT5hbHQtPm5leHQgPSBOVUxMOworCWRhdGEtPmdvdF9hbHRlcm5hdGVzID0gLTE7CisKKwl3YWxrZXItPmNvcnJ1cHRfb2JqZWN0X2ZvdW5kID0gMDsKKwl3YWxrZXItPmZldGNoID0gZmV0Y2g7CisJd2Fsa2VyLT5mZXRjaF9yZWYgPSBmZXRjaF9yZWY7CisJd2Fsa2VyLT5wcmVmZXRjaCA9IHByZWZldGNoOworCXdhbGtlci0+Y2xlYW51cCA9IGNsZWFudXA7CisJd2Fsa2VyLT5kYXRhID0gZGF0YTsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJYWRkX2ZpbGxfZnVuY3Rpb24od2Fsa2VyLCAoaW50ICgqKSh2b2lkICopKSBmaWxsX2FjdGl2ZV9zbG90KTsKKyNlbmRpZgorCisJcmV0dXJuIHdhbGtlcjsKK30KZGlmZiAtLWdpdCBhL2h0dHAuYyBiL2h0dHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGE3NmVkCi0tLSAvZGV2L251bGwKKysrIGIvaHR0cC5jCkBAIC0wLDAgKzEsMTg2MyBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImh0dHAuaCIKKyNpbmNsdWRlICJwYWNrLmgiCisjaW5jbHVkZSAic2lkZWJhbmQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInVybC5oIgorI2luY2x1ZGUgInVybG1hdGNoLmgiCisjaW5jbHVkZSAiY3JlZGVudGlhbC5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgImdldHRleHQuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKworaW50IGFjdGl2ZV9yZXF1ZXN0czsKK2ludCBodHRwX2lzX3ZlcmJvc2U7CitzaXplX3QgaHR0cF9wb3N0X2J1ZmZlciA9IDE2ICogTEFSR0VfUEFDS0VUX01BWDsKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBhMDYKKyNkZWZpbmUgTElCQ1VSTF9DQU5fSEFORExFX0FVVEhfQU5ZCisjZW5kaWYKKworc3RhdGljIGludCBtaW5fY3VybF9zZXNzaW9ucyA9IDE7CitzdGF0aWMgaW50IGN1cmxfc2Vzc2lvbl9jb3VudDsKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorc3RhdGljIGludCBtYXhfcmVxdWVzdHMgPSAtMTsKK3N0YXRpYyBDVVJMTSAqY3VybG07CisjZW5kaWYKKyNpZm5kZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorc3RhdGljIENVUkwgKmN1cmxfZGVmYXVsdDsKKyNlbmRpZgorCisjZGVmaW5lIFBSRVZfQlVGX1NJWkUgNDA5NgorI2RlZmluZSBSQU5HRV9IRUFERVJfU0laRSAzMAorCitjaGFyIGN1cmxfZXJyb3JzdHJbQ1VSTF9FUlJPUl9TSVpFXTsKKworc3RhdGljIGludCBjdXJsX3NzbF92ZXJpZnkgPSAtMTsKK3N0YXRpYyBpbnQgY3VybF9zc2xfdHJ5Oworc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9jZXJ0Oworc3RhdGljIGNvbnN0IGNoYXIgKnNzbF9jaXBoZXJsaXN0Oworc3RhdGljIGNvbnN0IGNoYXIgKnNzbF92ZXJzaW9uOworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlsb25nIHNzbF92ZXJzaW9uOworfSBzc2x2ZXJzaW9uc1tdID0geworCXsgInNzbHYyIiwgQ1VSTF9TU0xWRVJTSU9OX1NTTHYyIH0sCisJeyAic3NsdjMiLCBDVVJMX1NTTFZFUlNJT05fU1NMdjMgfSwKKwl7ICJ0bHN2MSIsIENVUkxfU1NMVkVSU0lPTl9UTFN2MSB9LAorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzIyMDAKKwl7ICJ0bHN2MS4wIiwgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzAgfSwKKwl7ICJ0bHN2MS4xIiwgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzEgfSwKKwl7ICJ0bHN2MS4yIiwgQ1VSTF9TU0xWRVJTSU9OX1RMU3YxXzIgfSwKKyNlbmRpZgorfTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2tleTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKK3N0YXRpYyBjb25zdCBjaGFyICpzc2xfY2FwYXRoOworI2VuZGlmCitzdGF0aWMgY29uc3QgY2hhciAqc3NsX2NhaW5mbzsKK3N0YXRpYyBsb25nIGN1cmxfbG93X3NwZWVkX2xpbWl0ID0gLTE7CitzdGF0aWMgbG9uZyBjdXJsX2xvd19zcGVlZF90aW1lID0gLTE7CitzdGF0aWMgaW50IGN1cmxfZnRwX25vX2Vwc3Y7CitzdGF0aWMgY29uc3QgY2hhciAqY3VybF9odHRwX3Byb3h5Oworc3RhdGljIGNvbnN0IGNoYXIgKmN1cmxfY29va2llX2ZpbGU7CitzdGF0aWMgaW50IGN1cmxfc2F2ZV9jb29raWVzOworc3RydWN0IGNyZWRlbnRpYWwgaHR0cF9hdXRoID0gQ1JFREVOVElBTF9JTklUOworc3RhdGljIGludCBodHRwX3Byb2FjdGl2ZV9hdXRoOworc3RhdGljIGNvbnN0IGNoYXIgKnVzZXJfYWdlbnQ7CisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxNzAwCisvKiBVc2UgQ1VSTE9QVF9LRVlQQVNTV0QgYXMgaXMgKi8KKyNlbGlmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDMKKyNkZWZpbmUgQ1VSTE9QVF9LRVlQQVNTV0QgQ1VSTE9QVF9TU0xLRVlQQVNTV0QKKyNlbHNlCisjZGVmaW5lIENVUkxPUFRfS0VZUEFTU1dEIENVUkxPUFRfU1NMQ0VSVFBBU1NXRAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgY3JlZGVudGlhbCBjZXJ0X2F1dGggPSBDUkVERU5USUFMX0lOSVQ7CitzdGF0aWMgaW50IHNzbF9jZXJ0X3Bhc3N3b3JkX3JlcXVpcmVkOworI2lmZGVmIExJQkNVUkxfQ0FOX0hBTkRMRV9BVVRIX0FOWQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaHR0cF9hdXRoX21ldGhvZHMgPSBDVVJMQVVUSF9BTlk7CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpwcmFnbWFfaGVhZGVyOworc3RhdGljIHN0cnVjdCBjdXJsX3NsaXN0ICpub19wcmFnbWFfaGVhZGVyOworCitzdGF0aWMgc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKmFjdGl2ZV9xdWV1ZV9oZWFkOworCitzdGF0aWMgY2hhciAqY2FjaGVkX2FjY2VwdF9sYW5ndWFnZTsKKworc2l6ZV90IGZyZWFkX2J1ZmZlcihjaGFyICpwdHIsIHNpemVfdCBlbHRzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQgKmJ1ZmZlcl8pCit7CisJc2l6ZV90IHNpemUgPSBlbHRzaXplICogbm1lbWI7CisJc3RydWN0IGJ1ZmZlciAqYnVmZmVyID0gYnVmZmVyXzsKKworCWlmIChzaXplID4gYnVmZmVyLT5idWYubGVuIC0gYnVmZmVyLT5wb3NuKQorCQlzaXplID0gYnVmZmVyLT5idWYubGVuIC0gYnVmZmVyLT5wb3NuOworCW1lbWNweShwdHIsIGJ1ZmZlci0+YnVmLmJ1ZiArIGJ1ZmZlci0+cG9zbiwgc2l6ZSk7CisJYnVmZmVyLT5wb3NuICs9IHNpemU7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworI2lmbmRlZiBOT19DVVJMX0lPQ1RMCitjdXJsaW9lcnIgaW9jdGxfYnVmZmVyKENVUkwgKmhhbmRsZSwgaW50IGNtZCwgdm9pZCAqY2xpZW50cCkKK3sKKwlzdHJ1Y3QgYnVmZmVyICpidWZmZXIgPSBjbGllbnRwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIENVUkxJT0NNRF9OT1A6CisJCXJldHVybiBDVVJMSU9FX09LOworCisJY2FzZSBDVVJMSU9DTURfUkVTVEFSVFJFQUQ6CisJCWJ1ZmZlci0+cG9zbiA9IDA7CisJCXJldHVybiBDVVJMSU9FX09LOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIENVUkxJT0VfVU5LTk9XTkNNRDsKKwl9Cit9CisjZW5kaWYKKworc2l6ZV90IGZ3cml0ZV9idWZmZXIoY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpidWZmZXJfKQoreworCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOworCXN0cnVjdCBzdHJidWYgKmJ1ZmZlciA9IGJ1ZmZlcl87CisKKwlzdHJidWZfYWRkKGJ1ZmZlciwgcHRyLCBzaXplKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc2l6ZV90IGZ3cml0ZV9udWxsKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKQoreworCXJldHVybiBlbHRzaXplICogbm1lbWI7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlZG93bl9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKK3sKKwlhY3RpdmVfcmVxdWVzdHMtLTsKKwlzbG90LT5pbl91c2UgPSAwOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfYWN0aXZlX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QpCit7CisJY2xvc2Vkb3duX2FjdGl2ZV9zbG90KHNsb3QpOworCWN1cmxfZWFzeV9nZXRpbmZvKHNsb3QtPmN1cmwsIENVUkxJTkZPX0hUVFBfQ09ERSwgJnNsb3QtPmh0dHBfY29kZSk7CisKKwlpZiAoc2xvdC0+ZmluaXNoZWQgIT0gTlVMTCkKKwkJKCpzbG90LT5maW5pc2hlZCkgPSAxOworCisJLyogU3RvcmUgc2xvdCByZXN1bHRzIHNvIHRoZXkgY2FuIGJlIHJlYWQgYWZ0ZXIgdGhlIHNsb3QgaXMgcmV1c2VkICovCisJaWYgKHNsb3QtPnJlc3VsdHMgIT0gTlVMTCkgeworCQlzbG90LT5yZXN1bHRzLT5jdXJsX3Jlc3VsdCA9IHNsb3QtPmN1cmxfcmVzdWx0OworCQlzbG90LT5yZXN1bHRzLT5odHRwX2NvZGUgPSBzbG90LT5odHRwX2NvZGU7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MGEwOAorCQljdXJsX2Vhc3lfZ2V0aW5mbyhzbG90LT5jdXJsLCBDVVJMSU5GT19IVFRQQVVUSF9BVkFJTCwKKwkJCQkgICZzbG90LT5yZXN1bHRzLT5hdXRoX2F2YWlsKTsKKyNlbHNlCisJCXNsb3QtPnJlc3VsdHMtPmF1dGhfYXZhaWwgPSAwOworI2VuZGlmCisJfQorCisJLyogUnVuIGNhbGxiYWNrIGlmIGFwcHJvcHJpYXRlICovCisJaWYgKHNsb3QtPmNhbGxiYWNrX2Z1bmMgIT0gTlVMTCkKKwkJc2xvdC0+Y2FsbGJhY2tfZnVuYyhzbG90LT5jYWxsYmFja19kYXRhKTsKK30KKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCitzdGF0aWMgdm9pZCBwcm9jZXNzX2N1cmxfbWVzc2FnZXModm9pZCkKK3sKKwlpbnQgbnVtX21lc3NhZ2VzOworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCUNVUkxNc2cgKmN1cmxfbWVzc2FnZSA9IGN1cmxfbXVsdGlfaW5mb19yZWFkKGN1cmxtLCAmbnVtX21lc3NhZ2VzKTsKKworCXdoaWxlIChjdXJsX21lc3NhZ2UgIT0gTlVMTCkgeworCQlpZiAoY3VybF9tZXNzYWdlLT5tc2cgPT0gQ1VSTE1TR19ET05FKSB7CisJCQlpbnQgY3VybF9yZXN1bHQgPSBjdXJsX21lc3NhZ2UtPmRhdGEucmVzdWx0OworCQkJc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCQkJd2hpbGUgKHNsb3QgIT0gTlVMTCAmJgorCQkJICAgICAgIHNsb3QtPmN1cmwgIT0gY3VybF9tZXNzYWdlLT5lYXN5X2hhbmRsZSkKKwkJCQlzbG90ID0gc2xvdC0+bmV4dDsKKwkJCWlmIChzbG90ICE9IE5VTEwpIHsKKwkJCQljdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoY3VybG0sIHNsb3QtPmN1cmwpOworCQkJCXNsb3QtPmN1cmxfcmVzdWx0ID0gY3VybF9yZXN1bHQ7CisJCQkJZmluaXNoX2FjdGl2ZV9zbG90KHNsb3QpOworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlJlY2VpdmVkIERPTkUgbWVzc2FnZSBmb3IgdW5rbm93biByZXF1ZXN0IVxuIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gQ1VSTCBtZXNzYWdlIHJlY2VpdmVkOiAlZFxuIiwKKwkJCQkoaW50KWN1cmxfbWVzc2FnZS0+bXNnKTsKKwkJfQorCQljdXJsX21lc3NhZ2UgPSBjdXJsX211bHRpX2luZm9fcmVhZChjdXJsbSwgJm51bV9tZXNzYWdlcyk7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgaHR0cF9vcHRpb25zKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKCJodHRwLnNzbHZlcmlmeSIsIHZhcikpIHsKKwkJY3VybF9zc2xfdmVyaWZ5ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2lwaGVybGlzdCIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmc3NsX2NpcGhlcmxpc3QsIHZhciwgdmFsdWUpOworCWlmICghc3RyY21wKCJodHRwLnNzbHZlcnNpb24iLCB2YXIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnNzbF92ZXJzaW9uLCB2YXIsIHZhbHVlKTsKKwlpZiAoIXN0cmNtcCgiaHR0cC5zc2xjZXJ0IiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfY2VydCwgdmFyLCB2YWx1ZSk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MDkwMworCWlmICghc3RyY21wKCJodHRwLnNzbGtleSIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmc3NsX2tleSwgdmFyLCB2YWx1ZSk7CisjZW5kaWYKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA4CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2FwYXRoIiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZzc2xfY2FwYXRoLCB2YXIsIHZhbHVlKTsKKyNlbmRpZgorCWlmICghc3RyY21wKCJodHRwLnNzbGNhaW5mbyIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmc3NsX2NhaW5mbywgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoImh0dHAuc3NsY2VydHBhc3N3b3JkcHJvdGVjdGVkIiwgdmFyKSkgeworCQlzc2xfY2VydF9wYXNzd29yZF9yZXF1aXJlZCA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKCJodHRwLnNzbHRyeSIsIHZhcikpIHsKKwkJY3VybF9zc2xfdHJ5ID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoImh0dHAubWluc2Vzc2lvbnMiLCB2YXIpKSB7CisJCW1pbl9jdXJsX3Nlc3Npb25zID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisjaWZuZGVmIFVTRV9DVVJMX01VTFRJCisJCWlmIChtaW5fY3VybF9zZXNzaW9ucyA+IDEpCisJCQltaW5fY3VybF9zZXNzaW9ucyA9IDE7CisjZW5kaWYKKwkJcmV0dXJuIDA7CisJfQorI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJaWYgKCFzdHJjbXAoImh0dHAubWF4cmVxdWVzdHMiLCB2YXIpKSB7CisJCW1heF9yZXF1ZXN0cyA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwlpZiAoIXN0cmNtcCgiaHR0cC5sb3dzcGVlZGxpbWl0IiwgdmFyKSkgeworCQljdXJsX2xvd19zcGVlZF9saW1pdCA9IChsb25nKWdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjbXAoImh0dHAubG93c3BlZWR0aW1lIiwgdmFyKSkgeworCQljdXJsX2xvd19zcGVlZF90aW1lID0gKGxvbmcpZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJodHRwLm5vZXBzdiIsIHZhcikpIHsKKwkJY3VybF9mdHBfbm9fZXBzdiA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghc3RyY21wKCJodHRwLnByb3h5IiwgdmFyKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZjdXJsX2h0dHBfcHJveHksIHZhciwgdmFsdWUpOworCisJaWYgKCFzdHJjbXAoImh0dHAuY29va2llZmlsZSIsIHZhcikpCisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmY3VybF9jb29raWVfZmlsZSwgdmFyLCB2YWx1ZSk7CisJaWYgKCFzdHJjbXAoImh0dHAuc2F2ZWNvb2tpZXMiLCB2YXIpKSB7CisJCWN1cmxfc2F2ZV9jb29raWVzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHR0cC5wb3N0YnVmZmVyIiwgdmFyKSkgeworCQlodHRwX3Bvc3RfYnVmZmVyID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJCWlmIChodHRwX3Bvc3RfYnVmZmVyIDwgTEFSR0VfUEFDS0VUX01BWCkKKwkJCWh0dHBfcG9zdF9idWZmZXIgPSBMQVJHRV9QQUNLRVRfTUFYOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCgiaHR0cC51c2VyYWdlbnQiLCB2YXIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnVzZXJfYWdlbnQsIHZhciwgdmFsdWUpOworCisJLyogRmFsbCBiYWNrIG9uIHRoZSBkZWZhdWx0IG9uZXMgKi8KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9jdXJsX2h0dHBfYXV0aChDVVJMICpyZXN1bHQpCit7CisJaWYgKCFodHRwX2F1dGgudXNlcm5hbWUpCisJCXJldHVybjsKKworCWNyZWRlbnRpYWxfZmlsbCgmaHR0cF9hdXRoKTsKKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzEzMDEKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9VU0VSTkFNRSwgaHR0cF9hdXRoLnVzZXJuYW1lKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9QQVNTV09SRCwgaHR0cF9hdXRoLnBhc3N3b3JkKTsKKyNlbHNlCisJeworCQlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cCA9IFNUUkJVRl9JTklUOworCQkvKgorCQkgKiBOb3RlIHRoYXQgd2UgYXNzdW1lIHdlIG9ubHkgZXZlciBoYXZlIGEgc2luZ2xlIHNldCBvZgorCQkgKiBjcmVkZW50aWFscyBpbiBhIGdpdmVuIHByb2dyYW0gcnVuLCBzbyB3ZSBkbyBub3QgaGF2ZQorCQkgKiB0byB3b3JyeSBhYm91dCB1cGRhdGluZyB0aGlzIGJ1ZmZlciwgb25seSBzZXR0aW5nIGl0cworCQkgKiBpbml0aWFsIHZhbHVlLgorCQkgKi8KKwkJaWYgKCF1cC5sZW4pCisJCQlzdHJidWZfYWRkZigmdXAsICIlczolcyIsCisJCQkJaHR0cF9hdXRoLnVzZXJuYW1lLCBodHRwX2F1dGgucGFzc3dvcmQpOworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9VU0VSUFdELCB1cC5idWYpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgaW50IGhhc19jZXJ0X3Bhc3N3b3JkKHZvaWQpCit7CisJaWYgKHNzbF9jZXJ0ID09IE5VTEwgfHwgc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgIT0gMSkKKwkJcmV0dXJuIDA7CisJaWYgKCFjZXJ0X2F1dGgucGFzc3dvcmQpIHsKKwkJY2VydF9hdXRoLnByb3RvY29sID0geHN0cmR1cCgiY2VydCIpOworCQljZXJ0X2F1dGgudXNlcm5hbWUgPSB4c3RyZHVwKCIiKTsKKwkJY2VydF9hdXRoLnBhdGggPSB4c3RyZHVwKHNzbF9jZXJ0KTsKKwkJY3JlZGVudGlhbF9maWxsKCZjZXJ0X2F1dGgpOworCX0KKwlyZXR1cm4gMTsKK30KKworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzE5MDAKK3N0YXRpYyB2b2lkIHNldF9jdXJsX2tlZXBhbGl2ZShDVVJMICpjKQoreworCWN1cmxfZWFzeV9zZXRvcHQoYywgQ1VSTE9QVF9UQ1BfS0VFUEFMSVZFLCAxKTsKK30KKworI2VsaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTAwMAorc3RhdGljIGludCBzb2Nrb3B0X2NhbGxiYWNrKHZvaWQgKmNsaWVudCwgY3VybF9zb2NrZXRfdCBmZCwgY3VybHNvY2t0eXBlIHR5cGUpCit7CisJaW50IGthID0gMTsKKwlpbnQgcmM7CisJc29ja2xlbl90IGxlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGthKTsKKworCWlmICh0eXBlICE9IENVUkxTT0NLVFlQRV9JUENYTikKKwkJcmV0dXJuIDA7CisKKwlyYyA9IHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0tFRVBBTElWRSwgKHZvaWQgKikma2EsIGxlbik7CisJaWYgKHJjIDwgMCkKKwkJd2FybmluZygidW5hYmxlIHRvIHNldCBTT19LRUVQQUxJVkUgb24gc29ja2V0ICVzIiwKKwkJCXN0cmVycm9yKGVycm5vKSk7CisKKwlyZXR1cm4gMDsgLyogQ1VSTF9TT0NLT1BUX09LIG9ubHkgZXhpc3RzIHNpbmNlIGN1cmwgNy4yMS41ICovCit9CisKK3N0YXRpYyB2b2lkIHNldF9jdXJsX2tlZXBhbGl2ZShDVVJMICpjKQoreworCWN1cmxfZWFzeV9zZXRvcHQoYywgQ1VSTE9QVF9TT0NLT1BURlVOQ1RJT04sIHNvY2tvcHRfY2FsbGJhY2spOworfQorCisjZWxzZQorc3RhdGljIHZvaWQgc2V0X2N1cmxfa2VlcGFsaXZlKENVUkwgKmMpCit7CisJLyogbm90IHN1cHBvcnRlZCBvbiBvbGRlciBjdXJsIHZlcnNpb25zICovCit9CisjZW5kaWYKKworc3RhdGljIENVUkwgKmdldF9jdXJsX2hhbmRsZSh2b2lkKQoreworCUNVUkwgKnJlc3VsdCA9IGN1cmxfZWFzeV9pbml0KCk7CisJbG9uZyBhbGxvd2VkX3Byb3RvY29scyA9IDA7CisKKwlpZiAoIXJlc3VsdCkKKwkJZGllKCJjdXJsX2Vhc3lfaW5pdCBmYWlsZWQiKTsKKworCWlmICghY3VybF9zc2xfdmVyaWZ5KSB7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCAwKTsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDApOworCX0gZWxzZSB7CisJCS8qIFZlcmlmeSBhdXRoZW50aWNpdHkgb2YgdGhlIHBlZXIncyBjZXJ0aWZpY2F0ZSAqLworCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMSk7CisJCS8qIFRoZSBuYW1lIGluIHRoZSBjZXJ0IG11c3QgbWF0Y2ggd2hvbSB3ZSB0cmllZCB0byBjb25uZWN0ICovCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAyKTsKKwl9CisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTA3CisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTkVUUkMsIENVUkxfTkVUUkNfT1BUSU9OQUwpOworI2VuZGlmCisjaWZkZWYgTElCQ1VSTF9DQU5fSEFORExFX0FVVEhfQU5ZCisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0FOWSk7CisjZW5kaWYKKworCWlmIChodHRwX3Byb2FjdGl2ZV9hdXRoKQorCQlpbml0X2N1cmxfaHR0cF9hdXRoKHJlc3VsdCk7CisKKwlpZiAoZ2V0ZW52KCJHSVRfU1NMX1ZFUlNJT04iKSkKKwkJc3NsX3ZlcnNpb24gPSBnZXRlbnYoIkdJVF9TU0xfVkVSU0lPTiIpOworCWlmIChzc2xfdmVyc2lvbiAmJiAqc3NsX3ZlcnNpb24pIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNzbHZlcnNpb25zKTsgaSsrKSB7CisJCQlpZiAoIXN0cmNtcChzc2xfdmVyc2lvbiwgc3NsdmVyc2lvbnNbaV0ubmFtZSkpIHsKKwkJCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xWRVJTSU9OLAorCQkJCQkJIHNzbHZlcnNpb25zW2ldLnNzbF92ZXJzaW9uKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHNzbHZlcnNpb25zKSkKKwkJCXdhcm5pbmcoInVuc3VwcG9ydGVkIHNzbCB2ZXJzaW9uICVzOiB1c2luZyBkZWZhdWx0IiwKKwkJCQlzc2xfdmVyc2lvbik7CisJfQorCisJaWYgKGdldGVudigiR0lUX1NTTF9DSVBIRVJfTElTVCIpKQorCQlzc2xfY2lwaGVybGlzdCA9IGdldGVudigiR0lUX1NTTF9DSVBIRVJfTElTVCIpOworCWlmIChzc2xfY2lwaGVybGlzdCAhPSBOVUxMICYmICpzc2xfY2lwaGVybGlzdCkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMX0NJUEhFUl9MSVNULAorCQkJCXNzbF9jaXBoZXJsaXN0KTsKKworCWlmIChzc2xfY2VydCAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9TU0xDRVJULCBzc2xfY2VydCk7CisJaWYgKGhhc19jZXJ0X3Bhc3N3b3JkKCkpCisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0tFWVBBU1NXRCwgY2VydF9hdXRoLnBhc3N3b3JkKTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCisJaWYgKHNzbF9rZXkgIT0gTlVMTCkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfU1NMS0VZLCBzc2xfa2V5KTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKKwlpZiAoc3NsX2NhcGF0aCAhPSBOVUxMKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9DQVBBVEgsIHNzbF9jYXBhdGgpOworI2VuZGlmCisJaWYgKHNzbF9jYWluZm8gIT0gTlVMTCkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfQ0FJTkZPLCBzc2xfY2FpbmZvKTsKKworCWlmIChjdXJsX2xvd19zcGVlZF9saW1pdCA+IDAgJiYgY3VybF9sb3dfc3BlZWRfdGltZSA+IDApIHsKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTE9XX1NQRUVEX0xJTUlULAorCQkJCSBjdXJsX2xvd19zcGVlZF9saW1pdCk7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX0xPV19TUEVFRF9USU1FLAorCQkJCSBjdXJsX2xvd19zcGVlZF90aW1lKTsKKwl9CisKKwljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMSk7CisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfTUFYUkVESVJTLCAyMCk7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MTMwMQorCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BPU1RSRURJUiwgQ1VSTF9SRURJUl9QT1NUX0FMTCk7CisjZWxpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxMTAxCisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUE9TVDMwMSwgMSk7CisjZW5kaWYKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxMzA0CisJaWYgKGlzX3RyYW5zcG9ydF9hbGxvd2VkKCJodHRwIikpCisJCWFsbG93ZWRfcHJvdG9jb2xzIHw9IENVUkxQUk9UT19IVFRQOworCWlmIChpc190cmFuc3BvcnRfYWxsb3dlZCgiaHR0cHMiKSkKKwkJYWxsb3dlZF9wcm90b2NvbHMgfD0gQ1VSTFBST1RPX0hUVFBTOworCWlmIChpc190cmFuc3BvcnRfYWxsb3dlZCgiZnRwIikpCisJCWFsbG93ZWRfcHJvdG9jb2xzIHw9IENVUkxQUk9UT19GVFA7CisJaWYgKGlzX3RyYW5zcG9ydF9hbGxvd2VkKCJmdHBzIikpCisJCWFsbG93ZWRfcHJvdG9jb2xzIHw9IENVUkxQUk9UT19GVFBTOworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1JFRElSX1BST1RPQ09MUywgYWxsb3dlZF9wcm90b2NvbHMpOworI2Vsc2UKKwlpZiAodHJhbnNwb3J0X3Jlc3RyaWN0X3Byb3RvY29scygpKQorCQl3YXJuaW5nKCJwcm90b2NvbCByZXN0cmljdGlvbnMgbm90IGFwcGxpZWQgdG8gY3VybCByZWRpcmVjdHMgYmVjYXVzZVxuIgorCQkJInlvdXIgY3VybCB2ZXJzaW9uIGlzIHRvbyBvbGQgKD49IDcuMTkuNCkiKTsKKyNlbmRpZgorCisJaWYgKGdldGVudigiR0lUX0NVUkxfVkVSQk9TRSIpKQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9WRVJCT1NFLCAxKTsKKworCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1VTRVJBR0VOVCwKKwkJdXNlcl9hZ2VudCA/IHVzZXJfYWdlbnQgOiBnaXRfdXNlcl9hZ2VudCgpKTsKKworCWlmIChjdXJsX2Z0cF9ub19lcHN2KQorCQljdXJsX2Vhc3lfc2V0b3B0KHJlc3VsdCwgQ1VSTE9QVF9GVFBfVVNFX0VQU1YsIDApOworCisjaWZkZWYgQ1VSTE9QVF9VU0VfU1NMCisJaWYgKGN1cmxfc3NsX3RyeSkKKwkJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfVVNFX1NTTCwgQ1VSTFVTRVNTTF9UUlkpOworI2VuZGlmCisKKwlpZiAoY3VybF9odHRwX3Byb3h5KSB7CisJCWN1cmxfZWFzeV9zZXRvcHQocmVzdWx0LCBDVVJMT1BUX1BST1hZLCBjdXJsX2h0dHBfcHJveHkpOworCX0KKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwYTA3CisJY3VybF9lYXN5X3NldG9wdChyZXN1bHQsIENVUkxPUFRfUFJPWFlBVVRILCBDVVJMQVVUSF9BTlkpOworI2VuZGlmCisKKwlzZXRfY3VybF9rZWVwYWxpdmUocmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9mcm9tX2Vudihjb25zdCBjaGFyICoqdmFyLCBjb25zdCBjaGFyICplbnZuYW1lKQoreworCWNvbnN0IGNoYXIgKnZhbCA9IGdldGVudihlbnZuYW1lKTsKKwlpZiAodmFsKQorCQkqdmFyID0gdmFsOworfQorCit2b2lkIGh0dHBfaW5pdChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCwgaW50IHByb2FjdGl2ZV9hdXRoKQoreworCWNoYXIgKmxvd19zcGVlZF9saW1pdDsKKwljaGFyICpsb3dfc3BlZWRfdGltZTsKKwljaGFyICpub3JtYWxpemVkX3VybDsKKwlzdHJ1Y3QgdXJsbWF0Y2hfY29uZmlnIGNvbmZpZyA9IHsgU1RSSU5HX0xJU1RfSU5JVF9EVVAgfTsKKworCWNvbmZpZy5zZWN0aW9uID0gImh0dHAiOworCWNvbmZpZy5rZXkgPSBOVUxMOworCWNvbmZpZy5jb2xsZWN0X2ZuID0gaHR0cF9vcHRpb25zOworCWNvbmZpZy5jYXNjYWRlX2ZuID0gZ2l0X2RlZmF1bHRfY29uZmlnOworCWNvbmZpZy5jYiA9IE5VTEw7CisKKwlodHRwX2lzX3ZlcmJvc2UgPSAwOworCW5vcm1hbGl6ZWRfdXJsID0gdXJsX25vcm1hbGl6ZSh1cmwsICZjb25maWcudXJsKTsKKworCWdpdF9jb25maWcodXJsbWF0Y2hfY29uZmlnX2VudHJ5LCAmY29uZmlnKTsKKwlmcmVlKG5vcm1hbGl6ZWRfdXJsKTsKKworCWlmIChjdXJsX2dsb2JhbF9pbml0KENVUkxfR0xPQkFMX0FMTCkgIT0gQ1VSTEVfT0spCisJCWRpZSgiY3VybF9nbG9iYWxfaW5pdCBmYWlsZWQiKTsKKworCWh0dHBfcHJvYWN0aXZlX2F1dGggPSBwcm9hY3RpdmVfYXV0aDsKKworCWlmIChyZW1vdGUgJiYgcmVtb3RlLT5odHRwX3Byb3h5KQorCQljdXJsX2h0dHBfcHJveHkgPSB4c3RyZHVwKHJlbW90ZS0+aHR0cF9wcm94eSk7CisKKwlwcmFnbWFfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocHJhZ21hX2hlYWRlciwgIlByYWdtYTogbm8tY2FjaGUiKTsKKwlub19wcmFnbWFfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQobm9fcHJhZ21hX2hlYWRlciwgIlByYWdtYToiKTsKKworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJeworCQljaGFyICpodHRwX21heF9yZXF1ZXN0cyA9IGdldGVudigiR0lUX0hUVFBfTUFYX1JFUVVFU1RTIik7CisJCWlmIChodHRwX21heF9yZXF1ZXN0cyAhPSBOVUxMKQorCQkJbWF4X3JlcXVlc3RzID0gYXRvaShodHRwX21heF9yZXF1ZXN0cyk7CisJfQorCisJY3VybG0gPSBjdXJsX211bHRpX2luaXQoKTsKKwlpZiAoIWN1cmxtKQorCQlkaWUoImN1cmxfbXVsdGlfaW5pdCBmYWlsZWQiKTsKKyNlbmRpZgorCisJaWYgKGdldGVudigiR0lUX1NTTF9OT19WRVJJRlkiKSkKKwkJY3VybF9zc2xfdmVyaWZ5ID0gMDsKKworCXNldF9mcm9tX2Vudigmc3NsX2NlcnQsICJHSVRfU1NMX0NFUlQiKTsKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcwOTAzCisJc2V0X2Zyb21fZW52KCZzc2xfa2V5LCAiR0lUX1NTTF9LRVkiKTsKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzA5MDgKKwlzZXRfZnJvbV9lbnYoJnNzbF9jYXBhdGgsICJHSVRfU1NMX0NBUEFUSCIpOworI2VuZGlmCisJc2V0X2Zyb21fZW52KCZzc2xfY2FpbmZvLCAiR0lUX1NTTF9DQUlORk8iKTsKKworCXNldF9mcm9tX2VudigmdXNlcl9hZ2VudCwgIkdJVF9IVFRQX1VTRVJfQUdFTlQiKTsKKworCWxvd19zcGVlZF9saW1pdCA9IGdldGVudigiR0lUX0hUVFBfTE9XX1NQRUVEX0xJTUlUIik7CisJaWYgKGxvd19zcGVlZF9saW1pdCAhPSBOVUxMKQorCQljdXJsX2xvd19zcGVlZF9saW1pdCA9IHN0cnRvbChsb3dfc3BlZWRfbGltaXQsIE5VTEwsIDEwKTsKKwlsb3dfc3BlZWRfdGltZSA9IGdldGVudigiR0lUX0hUVFBfTE9XX1NQRUVEX1RJTUUiKTsKKwlpZiAobG93X3NwZWVkX3RpbWUgIT0gTlVMTCkKKwkJY3VybF9sb3dfc3BlZWRfdGltZSA9IHN0cnRvbChsb3dfc3BlZWRfdGltZSwgTlVMTCwgMTApOworCisJaWYgKGN1cmxfc3NsX3ZlcmlmeSA9PSAtMSkKKwkJY3VybF9zc2xfdmVyaWZ5ID0gMTsKKworCWN1cmxfc2Vzc2lvbl9jb3VudCA9IDA7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlpZiAobWF4X3JlcXVlc3RzIDwgMSkKKwkJbWF4X3JlcXVlc3RzID0gREVGQVVMVF9NQVhfUkVRVUVTVFM7CisjZW5kaWYKKworCWlmIChnZXRlbnYoIkdJVF9DVVJMX0ZUUF9OT19FUFNWIikpCisJCWN1cmxfZnRwX25vX2Vwc3YgPSAxOworCisJaWYgKHVybCkgeworCQljcmVkZW50aWFsX2Zyb21fdXJsKCZodHRwX2F1dGgsIHVybCk7CisJCWlmICghc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgJiYKKwkJICAgIGdldGVudigiR0lUX1NTTF9DRVJUX1BBU1NXT1JEX1BST1RFQ1RFRCIpICYmCisJCSAgICBzdGFydHNfd2l0aCh1cmwsICJodHRwczovLyIpKQorCQkJc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgPSAxOworCX0KKworI2lmbmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCisJY3VybF9kZWZhdWx0ID0gZ2V0X2N1cmxfaGFuZGxlKCk7CisjZW5kaWYKK30KKwordm9pZCBodHRwX2NsZWFudXAodm9pZCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCisJd2hpbGUgKHNsb3QgIT0gTlVMTCkgeworCQlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqbmV4dCA9IHNsb3QtPm5leHQ7CisJCWlmIChzbG90LT5jdXJsICE9IE5VTEwpIHsKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCQkJY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKGN1cmxtLCBzbG90LT5jdXJsKTsKKyNlbmRpZgorCQkJY3VybF9lYXN5X2NsZWFudXAoc2xvdC0+Y3VybCk7CisJCX0KKwkJZnJlZShzbG90KTsKKwkJc2xvdCA9IG5leHQ7CisJfQorCWFjdGl2ZV9xdWV1ZV9oZWFkID0gTlVMTDsKKworI2lmbmRlZiBOT19DVVJMX0VBU1lfRFVQSEFORExFCisJY3VybF9lYXN5X2NsZWFudXAoY3VybF9kZWZhdWx0KTsKKyNlbmRpZgorCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwljdXJsX211bHRpX2NsZWFudXAoY3VybG0pOworI2VuZGlmCisJY3VybF9nbG9iYWxfY2xlYW51cCgpOworCisJY3VybF9zbGlzdF9mcmVlX2FsbChwcmFnbWFfaGVhZGVyKTsKKwlwcmFnbWFfaGVhZGVyID0gTlVMTDsKKworCWN1cmxfc2xpc3RfZnJlZV9hbGwobm9fcHJhZ21hX2hlYWRlcik7CisJbm9fcHJhZ21hX2hlYWRlciA9IE5VTEw7CisKKwlpZiAoY3VybF9odHRwX3Byb3h5KSB7CisJCWZyZWUoKHZvaWQgKiljdXJsX2h0dHBfcHJveHkpOworCQljdXJsX2h0dHBfcHJveHkgPSBOVUxMOworCX0KKworCWlmIChjZXJ0X2F1dGgucGFzc3dvcmQgIT0gTlVMTCkgeworCQltZW1zZXQoY2VydF9hdXRoLnBhc3N3b3JkLCAwLCBzdHJsZW4oY2VydF9hdXRoLnBhc3N3b3JkKSk7CisJCWZyZWUoY2VydF9hdXRoLnBhc3N3b3JkKTsKKwkJY2VydF9hdXRoLnBhc3N3b3JkID0gTlVMTDsKKwl9CisJc3NsX2NlcnRfcGFzc3dvcmRfcmVxdWlyZWQgPSAwOworCisJZnJlZShjYWNoZWRfYWNjZXB0X2xhbmd1YWdlKTsKKwljYWNoZWRfYWNjZXB0X2xhbmd1YWdlID0gTlVMTDsKK30KKworc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKmdldF9hY3RpdmVfc2xvdCh2b2lkKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKm5ld3Nsb3Q7CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWludCBudW1fdHJhbnNmZXJzOworCisJLyogV2FpdCBmb3IgYSBzbG90IHRvIG9wZW4gdXAgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwgKi8KKwl3aGlsZSAoYWN0aXZlX3JlcXVlc3RzID49IG1heF9yZXF1ZXN0cykgeworCQljdXJsX211bHRpX3BlcmZvcm0oY3VybG0sICZudW1fdHJhbnNmZXJzKTsKKwkJaWYgKG51bV90cmFuc2ZlcnMgPCBhY3RpdmVfcmVxdWVzdHMpCisJCQlwcm9jZXNzX2N1cmxfbWVzc2FnZXMoKTsKKwl9CisjZW5kaWYKKworCXdoaWxlIChzbG90ICE9IE5VTEwgJiYgc2xvdC0+aW5fdXNlKQorCQlzbG90ID0gc2xvdC0+bmV4dDsKKworCWlmIChzbG90ID09IE5VTEwpIHsKKwkJbmV3c2xvdCA9IHhtYWxsb2Moc2l6ZW9mKCpuZXdzbG90KSk7CisJCW5ld3Nsb3QtPmN1cmwgPSBOVUxMOworCQluZXdzbG90LT5pbl91c2UgPSAwOworCQluZXdzbG90LT5uZXh0ID0gTlVMTDsKKworCQlzbG90ID0gYWN0aXZlX3F1ZXVlX2hlYWQ7CisJCWlmIChzbG90ID09IE5VTEwpIHsKKwkJCWFjdGl2ZV9xdWV1ZV9oZWFkID0gbmV3c2xvdDsKKwkJfSBlbHNlIHsKKwkJCXdoaWxlIChzbG90LT5uZXh0ICE9IE5VTEwpCisJCQkJc2xvdCA9IHNsb3QtPm5leHQ7CisJCQlzbG90LT5uZXh0ID0gbmV3c2xvdDsKKwkJfQorCQlzbG90ID0gbmV3c2xvdDsKKwl9CisKKwlpZiAoc2xvdC0+Y3VybCA9PSBOVUxMKSB7CisjaWZkZWYgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorCQlzbG90LT5jdXJsID0gZ2V0X2N1cmxfaGFuZGxlKCk7CisjZWxzZQorCQlzbG90LT5jdXJsID0gY3VybF9lYXN5X2R1cGhhbmRsZShjdXJsX2RlZmF1bHQpOworI2VuZGlmCisJCWN1cmxfc2Vzc2lvbl9jb3VudCsrOworCX0KKworCWFjdGl2ZV9yZXF1ZXN0cysrOworCXNsb3QtPmluX3VzZSA9IDE7CisJc2xvdC0+cmVzdWx0cyA9IE5VTEw7CisJc2xvdC0+ZmluaXNoZWQgPSBOVUxMOworCXNsb3QtPmNhbGxiYWNrX2RhdGEgPSBOVUxMOworCXNsb3QtPmNhbGxiYWNrX2Z1bmMgPSBOVUxMOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9DT09LSUVGSUxFLCBjdXJsX2Nvb2tpZV9maWxlKTsKKwlpZiAoY3VybF9zYXZlX2Nvb2tpZXMpCisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9DT09LSUVKQVIsIGN1cmxfY29va2llX2ZpbGUpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBwcmFnbWFfaGVhZGVyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRVJST1JCVUZGRVIsIGN1cmxfZXJyb3JzdHIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9DVVNUT01SRVFVRVNULCBOVUxMKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUkVBREZVTkNUSU9OLCBOVUxMKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgTlVMTCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsIE5VTEwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUExPQUQsIDApOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQR0VULCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRkFJTE9ORVJST1IsIDEpOworI2lmZGVmIExJQkNVUkxfQ0FOX0hBTkRMRV9BVVRIX0FOWQorCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQQVVUSCwgaHR0cF9hdXRoX21ldGhvZHMpOworI2VuZGlmCisJaWYgKGh0dHBfYXV0aC5wYXNzd29yZCkKKwkJaW5pdF9jdXJsX2h0dHBfYXV0aChzbG90LT5jdXJsKTsKKworCXJldHVybiBzbG90OworfQorCitpbnQgc3RhcnRfYWN0aXZlX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QpCit7CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlDVVJMTWNvZGUgY3VybG1fcmVzdWx0ID0gY3VybF9tdWx0aV9hZGRfaGFuZGxlKGN1cmxtLCBzbG90LT5jdXJsKTsKKwlpbnQgbnVtX3RyYW5zZmVyczsKKworCWlmIChjdXJsbV9yZXN1bHQgIT0gQ1VSTE1fT0sgJiYKKwkgICAgY3VybG1fcmVzdWx0ICE9IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgeworCQlhY3RpdmVfcmVxdWVzdHMtLTsKKwkJc2xvdC0+aW5fdXNlID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBXZSBrbm93IHRoZXJlIG11c3QgYmUgc29tZXRoaW5nIHRvIGRvLCBzaW5jZSB3ZSBqdXN0IGFkZGVkCisJICogc29tZXRoaW5nLgorCSAqLworCWN1cmxfbXVsdGlfcGVyZm9ybShjdXJsbSwgJm51bV90cmFuc2ZlcnMpOworI2VuZGlmCisJcmV0dXJuIDE7Cit9CisKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorc3RydWN0IGZpbGxfY2hhaW4geworCXZvaWQgKmRhdGE7CisJaW50ICgqZmlsbCkodm9pZCAqKTsKKwlzdHJ1Y3QgZmlsbF9jaGFpbiAqbmV4dDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsbF9jaGFpbiAqZmlsbF9jZmc7CisKK3ZvaWQgYWRkX2ZpbGxfZnVuY3Rpb24odm9pZCAqZGF0YSwgaW50ICgqZmlsbCkodm9pZCAqKSkKK3sKKwlzdHJ1Y3QgZmlsbF9jaGFpbiAqbmV3ID0geG1hbGxvYyhzaXplb2YoKm5ldykpOworCXN0cnVjdCBmaWxsX2NoYWluICoqbGlua3AgPSAmZmlsbF9jZmc7CisJbmV3LT5kYXRhID0gZGF0YTsKKwluZXctPmZpbGwgPSBmaWxsOworCW5ldy0+bmV4dCA9IE5VTEw7CisJd2hpbGUgKCpsaW5rcCkKKwkJbGlua3AgPSAmKCpsaW5rcCktPm5leHQ7CisJKmxpbmtwID0gbmV3OworfQorCit2b2lkIGZpbGxfYWN0aXZlX3Nsb3RzKHZvaWQpCit7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QgPSBhY3RpdmVfcXVldWVfaGVhZDsKKworCXdoaWxlIChhY3RpdmVfcmVxdWVzdHMgPCBtYXhfcmVxdWVzdHMpIHsKKwkJc3RydWN0IGZpbGxfY2hhaW4gKmZpbGw7CisJCWZvciAoZmlsbCA9IGZpbGxfY2ZnOyBmaWxsOyBmaWxsID0gZmlsbC0+bmV4dCkKKwkJCWlmIChmaWxsLT5maWxsKGZpbGwtPmRhdGEpKQorCQkJCWJyZWFrOworCisJCWlmICghZmlsbCkKKwkJCWJyZWFrOworCX0KKworCXdoaWxlIChzbG90ICE9IE5VTEwpIHsKKwkJaWYgKCFzbG90LT5pbl91c2UgJiYgc2xvdC0+Y3VybCAhPSBOVUxMCisJCQkmJiBjdXJsX3Nlc3Npb25fY291bnQgPiBtaW5fY3VybF9zZXNzaW9ucykgeworCQkJY3VybF9lYXN5X2NsZWFudXAoc2xvdC0+Y3VybCk7CisJCQlzbG90LT5jdXJsID0gTlVMTDsKKwkJCWN1cmxfc2Vzc2lvbl9jb3VudC0tOworCQl9CisJCXNsb3QgPSBzbG90LT5uZXh0OworCX0KK30KKwordm9pZCBzdGVwX2FjdGl2ZV9zbG90cyh2b2lkKQoreworCWludCBudW1fdHJhbnNmZXJzOworCUNVUkxNY29kZSBjdXJsbV9yZXN1bHQ7CisKKwlkbyB7CisJCWN1cmxtX3Jlc3VsdCA9IGN1cmxfbXVsdGlfcGVyZm9ybShjdXJsbSwgJm51bV90cmFuc2ZlcnMpOworCX0gd2hpbGUgKGN1cmxtX3Jlc3VsdCA9PSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pOworCWlmIChudW1fdHJhbnNmZXJzIDwgYWN0aXZlX3JlcXVlc3RzKSB7CisJCXByb2Nlc3NfY3VybF9tZXNzYWdlcygpOworCQlmaWxsX2FjdGl2ZV9zbG90cygpOworCX0KK30KKyNlbmRpZgorCit2b2lkIHJ1bl9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCkKK3sKKyNpZmRlZiBVU0VfQ1VSTF9NVUxUSQorCWZkX3NldCByZWFkZmRzOworCWZkX3NldCB3cml0ZWZkczsKKwlmZF9zZXQgZXhjZmRzOworCWludCBtYXhfZmQ7CisJc3RydWN0IHRpbWV2YWwgc2VsZWN0X3RpbWVvdXQ7CisJaW50IGZpbmlzaGVkID0gMDsKKworCXNsb3QtPmZpbmlzaGVkID0gJmZpbmlzaGVkOworCXdoaWxlICghZmluaXNoZWQpIHsKKwkJc3RlcF9hY3RpdmVfc2xvdHMoKTsKKworCQlpZiAoc2xvdC0+aW5fdXNlKSB7CisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA+PSAweDA3MGYwNAorCQkJbG9uZyBjdXJsX3RpbWVvdXQ7CisJCQljdXJsX211bHRpX3RpbWVvdXQoY3VybG0sICZjdXJsX3RpbWVvdXQpOworCQkJaWYgKGN1cmxfdGltZW91dCA9PSAwKSB7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGN1cmxfdGltZW91dCA9PSAtMSkgeworCQkJCXNlbGVjdF90aW1lb3V0LnR2X3NlYyAgPSAwOworCQkJCXNlbGVjdF90aW1lb3V0LnR2X3VzZWMgPSA1MDAwMDsKKwkJCX0gZWxzZSB7CisJCQkJc2VsZWN0X3RpbWVvdXQudHZfc2VjICA9ICBjdXJsX3RpbWVvdXQgLyAxMDAwOworCQkJCXNlbGVjdF90aW1lb3V0LnR2X3VzZWMgPSAoY3VybF90aW1lb3V0ICUgMTAwMCkgKiAxMDAwOworCQkJfQorI2Vsc2UKKwkJCXNlbGVjdF90aW1lb3V0LnR2X3NlYyAgPSAwOworCQkJc2VsZWN0X3RpbWVvdXQudHZfdXNlYyA9IDUwMDAwOworI2VuZGlmCisKKwkJCW1heF9mZCA9IC0xOworCQkJRkRfWkVSTygmcmVhZGZkcyk7CisJCQlGRF9aRVJPKCZ3cml0ZWZkcyk7CisJCQlGRF9aRVJPKCZleGNmZHMpOworCQkJY3VybF9tdWx0aV9mZHNldChjdXJsbSwgJnJlYWRmZHMsICZ3cml0ZWZkcywgJmV4Y2ZkcywgJm1heF9mZCk7CisKKwkJCS8qCisJCQkgKiBJdCBjYW4gaGFwcGVuIHRoYXQgY3VybF9tdWx0aV90aW1lb3V0IHJldHVybnMgYSBwYXRob2xvZ2ljYWxseQorCQkJICogbG9uZyB0aW1lb3V0IHdoZW4gY3VybF9tdWx0aV9mZHNldCByZXR1cm5zIG5vIGZpbGUgZGVzY3JpcHRvcnMKKwkJCSAqIHRvIHJlYWQuICBTZWUgY29tbWl0IG1lc3NhZ2UgZm9yIG1vcmUgZGV0YWlscy4KKwkJCSAqLworCQkJaWYgKG1heF9mZCA8IDAgJiYKKwkJCSAgICAoc2VsZWN0X3RpbWVvdXQudHZfc2VjID4gMCB8fAorCQkJICAgICBzZWxlY3RfdGltZW91dC50dl91c2VjID4gNTAwMDApKSB7CisJCQkJc2VsZWN0X3RpbWVvdXQudHZfc2VjICA9IDA7CisJCQkJc2VsZWN0X3RpbWVvdXQudHZfdXNlYyA9IDUwMDAwOworCQkJfQorCisJCQlzZWxlY3QobWF4X2ZkKzEsICZyZWFkZmRzLCAmd3JpdGVmZHMsICZleGNmZHMsICZzZWxlY3RfdGltZW91dCk7CisJCX0KKwl9CisjZWxzZQorCXdoaWxlIChzbG90LT5pbl91c2UpIHsKKwkJc2xvdC0+Y3VybF9yZXN1bHQgPSBjdXJsX2Vhc3lfcGVyZm9ybShzbG90LT5jdXJsKTsKKwkJZmluaXNoX2FjdGl2ZV9zbG90KHNsb3QpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KQoreworCWNsb3NlZG93bl9hY3RpdmVfc2xvdChzbG90KTsKKwlpZiAoc2xvdC0+Y3VybCAmJiBjdXJsX3Nlc3Npb25fY291bnQgPiBtaW5fY3VybF9zZXNzaW9ucykgeworI2lmZGVmIFVTRV9DVVJMX01VTFRJCisJCWN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShjdXJsbSwgc2xvdC0+Y3VybCk7CisjZW5kaWYKKwkJY3VybF9lYXN5X2NsZWFudXAoc2xvdC0+Y3VybCk7CisJCXNsb3QtPmN1cmwgPSBOVUxMOworCQljdXJsX3Nlc3Npb25fY291bnQtLTsKKwl9CisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKKwlmaWxsX2FjdGl2ZV9zbG90cygpOworI2VuZGlmCit9CisKK3ZvaWQgZmluaXNoX2FsbF9hY3RpdmVfc2xvdHModm9pZCkKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCisJd2hpbGUgKHNsb3QgIT0gTlVMTCkKKwkJaWYgKHNsb3QtPmluX3VzZSkgeworCQkJcnVuX2FjdGl2ZV9zbG90KHNsb3QpOworCQkJc2xvdCA9IGFjdGl2ZV9xdWV1ZV9oZWFkOworCQl9IGVsc2UgeworCQkJc2xvdCA9IHNsb3QtPm5leHQ7CisJCX0KK30KKworLyogSGVscGVycyBmb3IgbW9kaWZ5aW5nIGFuZCBjcmVhdGluZyBVUkxzICovCitzdGF0aWMgaW5saW5lIGludCBuZWVkc19xdW90ZShpbnQgY2gpCit7CisJaWYgKCgoY2ggPj0gJ0EnKSAmJiAoY2ggPD0gJ1onKSkKKwkJCXx8ICgoY2ggPj0gJ2EnKSAmJiAoY2ggPD0gJ3onKSkKKwkJCXx8ICgoY2ggPj0gJzAnKSAmJiAoY2ggPD0gJzknKSkKKwkJCXx8IChjaCA9PSAnLycpCisJCQl8fCAoY2ggPT0gJy0nKQorCQkJfHwgKGNoID09ICcuJykpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgY2hhciAqcXVvdGVfcmVmX3VybChjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICpyZWYpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpjcDsKKwlpbnQgY2g7CisKKwllbmRfdXJsX3dpdGhfc2xhc2goJmJ1ZiwgYmFzZSk7CisKKwlmb3IgKGNwID0gcmVmOyAoY2ggPSAqY3ApICE9IDA7IGNwKyspCisJCWlmIChuZWVkc19xdW90ZShjaCkpCisJCQlzdHJidWZfYWRkZigmYnVmLCAiJSUlMDJ4IiwgY2gpOworCQllbHNlCisJCQlzdHJidWZfYWRkY2goJmJ1ZiwgKmNwKTsKKworCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQorCit2b2lkIGFwcGVuZF9yZW1vdGVfb2JqZWN0X3VybChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnVybCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmhleCwKKwkJCSAgICAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpCit7CisJZW5kX3VybF93aXRoX3NsYXNoKGJ1ZiwgdXJsKTsKKworCXN0cmJ1Zl9hZGRmKGJ1ZiwgIm9iamVjdHMvJS4qcy8iLCAyLCBoZXgpOworCWlmICghb25seV90d29fZGlnaXRfcHJlZml4KQorCQlzdHJidWZfYWRkZihidWYsICIlcyIsIGhleCsyKTsKK30KKworY2hhciAqZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqaGV4LAorCQkJICAgIGludCBvbmx5X3R3b19kaWdpdF9wcmVmaXgpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoJmJ1ZiwgdXJsLCBoZXgsIG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2N1cmxfcmVzdWx0KHN0cnVjdCBzbG90X3Jlc3VsdHMgKnJlc3VsdHMpCit7CisJLyoKKwkgKiBJZiB3ZSBzZWUgYSBmYWlsaW5nIGh0dHAgY29kZSB3aXRoIENVUkxFX09LLCB3ZSBoYXZlIHR1cm5lZCBvZmYKKwkgKiBGQUlMT05FUlJPUiAodG8ga2VlcCB0aGUgc2VydmVyJ3MgY3VzdG9tIGVycm9yIHJlc3BvbnNlKSwgYW5kIHNob3VsZAorCSAqIHRyYW5zbGF0ZSB0aGUgY29kZSBpbnRvIGZhaWx1cmUgaGVyZS4KKwkgKi8KKwlpZiAocmVzdWx0cy0+Y3VybF9yZXN1bHQgPT0gQ1VSTEVfT0sgJiYKKwkgICAgcmVzdWx0cy0+aHR0cF9jb2RlID49IDQwMCkgeworCQlyZXN1bHRzLT5jdXJsX3Jlc3VsdCA9IENVUkxFX0hUVFBfUkVUVVJORURfRVJST1I7CisJCS8qCisJCSAqIE5vcm1hbGx5IGN1cmwgd2lsbCBhbHJlYWR5IGhhdmUgcHV0IHRoZSAicmVhc29uIHBocmFzZSIKKwkJICogZnJvbSB0aGUgc2VydmVyIGludG8gY3VybF9lcnJvcnN0cjsgdW5mb3J0dW5hdGVseSB3aXRob3V0CisJCSAqIEZBSUxPTkVSUk9SIGl0IGlzIGxvc3QsIHNvIHdlIGNhbiBnaXZlIG9ubHkgdGhlIG51bWVyaWMKKwkJICogc3RhdHVzIGNvZGUuCisJCSAqLworCQlzbnByaW50ZihjdXJsX2Vycm9yc3RyLCBzaXplb2YoY3VybF9lcnJvcnN0ciksCisJCQkgIlRoZSByZXF1ZXN0ZWQgVVJMIHJldHVybmVkIGVycm9yOiAlbGQiLAorCQkJIHJlc3VsdHMtPmh0dHBfY29kZSk7CisJfQorCisJaWYgKHJlc3VsdHMtPmN1cmxfcmVzdWx0ID09IENVUkxFX09LKSB7CisJCWNyZWRlbnRpYWxfYXBwcm92ZSgmaHR0cF9hdXRoKTsKKwkJcmV0dXJuIEhUVFBfT0s7CisJfSBlbHNlIGlmIChtaXNzaW5nX3RhcmdldChyZXN1bHRzKSkKKwkJcmV0dXJuIEhUVFBfTUlTU0lOR19UQVJHRVQ7CisJZWxzZSBpZiAocmVzdWx0cy0+aHR0cF9jb2RlID09IDQwMSkgeworCQlpZiAoaHR0cF9hdXRoLnVzZXJuYW1lICYmIGh0dHBfYXV0aC5wYXNzd29yZCkgeworCQkJY3JlZGVudGlhbF9yZWplY3QoJmh0dHBfYXV0aCk7CisJCQlyZXR1cm4gSFRUUF9OT0FVVEg7CisJCX0gZWxzZSB7CisjaWZkZWYgTElCQ1VSTF9DQU5fSEFORExFX0FVVEhfQU5ZCisJCQlodHRwX2F1dGhfbWV0aG9kcyAmPSB+Q1VSTEFVVEhfR1NTTkVHT1RJQVRFOworI2VuZGlmCisJCQlyZXR1cm4gSFRUUF9SRUFVVEg7CisJCX0KKwl9IGVsc2UgeworI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPj0gMHgwNzBjMDAKKwkJaWYgKCFjdXJsX2Vycm9yc3RyWzBdKQorCQkJc3RybGNweShjdXJsX2Vycm9yc3RyLAorCQkJCWN1cmxfZWFzeV9zdHJlcnJvcihyZXN1bHRzLT5jdXJsX3Jlc3VsdCksCisJCQkJc2l6ZW9mKGN1cmxfZXJyb3JzdHIpKTsKKyNlbmRpZgorCQlyZXR1cm4gSFRUUF9FUlJPUjsKKwl9Cit9CisKK2ludCBydW5fb25lX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QsCisJCSBzdHJ1Y3Qgc2xvdF9yZXN1bHRzICpyZXN1bHRzKQoreworCXNsb3QtPnJlc3VsdHMgPSByZXN1bHRzOworCWlmICghc3RhcnRfYWN0aXZlX3Nsb3Qoc2xvdCkpIHsKKwkJc25wcmludGYoY3VybF9lcnJvcnN0ciwgc2l6ZW9mKGN1cmxfZXJyb3JzdHIpLAorCQkJICJmYWlsZWQgdG8gc3RhcnQgSFRUUCByZXF1ZXN0Iik7CisJCXJldHVybiBIVFRQX1NUQVJUX0ZBSUxFRDsKKwl9CisKKwlydW5fYWN0aXZlX3Nsb3Qoc2xvdCk7CisJcmV0dXJuIGhhbmRsZV9jdXJsX3Jlc3VsdChyZXN1bHRzKTsKK30KKworc3RhdGljIENVUkxjb2RlIGN1cmxpbmZvX3N0cmJ1ZihDVVJMICpjdXJsLCBDVVJMSU5GTyBpbmZvLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY2hhciAqcHRyOworCUNVUkxjb2RlIHJldDsKKworCXN0cmJ1Zl9yZXNldChidWYpOworCXJldCA9IGN1cmxfZWFzeV9nZXRpbmZvKGN1cmwsIGluZm8sICZwdHIpOworCWlmICghcmV0ICYmIHB0cikKKwkJc3RyYnVmX2FkZHN0cihidWYsIHB0cik7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENoZWNrIGZvciBhbmQgZXh0cmFjdCBhIGNvbnRlbnQtdHlwZSBwYXJhbWV0ZXIuICJyYXciCisgKiBzaG91bGQgYmUgcG9zaXRpb25lZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHBvdGVudGlhbAorICogcGFyYW1ldGVyLCB3aXRoIGFueSB3aGl0ZXNwYWNlIGFscmVhZHkgcmVtb3ZlZC4KKyAqCisgKiAibmFtZSIgaXMgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4gVGhlIHZhbHVlIGlzIGFwcGVuZGVkCisgKiB0byAib3V0Ii4KKyAqLworc3RhdGljIGludCBleHRyYWN0X3BhcmFtKGNvbnN0IGNoYXIgKnJhdywgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICpvdXQpCit7CisJc2l6ZV90IGxlbiA9IHN0cmxlbihuYW1lKTsKKworCWlmIChzdHJuY2FzZWNtcChyYXcsIG5hbWUsIGxlbikpCisJCXJldHVybiAtMTsKKwlyYXcgKz0gbGVuOworCisJaWYgKCpyYXcgIT0gJz0nKQorCQlyZXR1cm4gLTE7CisJcmF3Kys7CisKKwl3aGlsZSAoKnJhdyAmJiAhaXNzcGFjZSgqcmF3KSAmJiAqcmF3ICE9ICc7JykKKwkJc3RyYnVmX2FkZGNoKG91dCwgKnJhdysrKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEV4dHJhY3QgYSBub3JtYWxpemVkIHZlcnNpb24gb2YgdGhlIGNvbnRlbnQgdHlwZSwgd2l0aCBhbnkKKyAqIHNwYWNlcyBzdXBwcmVzc2VkLCBhbGwgbGV0dGVycyBsb3dlcmNhc2VkLCBhbmQgbm8gdHJhaWxpbmcgIjsiCisgKiBvciBwYXJhbWV0ZXJzLgorICoKKyAqIE5vdGUgdGhhdCB3ZSB3aWxsIHNpbGVudGx5IHJlbW92ZSBldmVuIGludmFsaWQgd2hpdGVzcGFjZS4gRm9yCisgKiBleGFtcGxlLCAidGV4dCAvIHBsYWluIiBpcyBzcGVjaWZpY2FsbHkgZm9yYmlkZGVuIGJ5IFJGQyAyNjE2LAorICogYnV0ICJ0ZXh0L3BsYWluIiBpcyB0aGUgb25seSByZWFzb25hYmxlIG91dHB1dCwgYW5kIHRoaXMga2VlcHMKKyAqIG91ciBjb2RlIHNpbXBsZS4KKyAqCisgKiBJZiB0aGUgImNoYXJzZXQiIGFyZ3VtZW50IGlzIG5vdCBOVUxMLCBzdG9yZSB0aGUgdmFsdWUgb2YgYW55CisgKiBjaGFyc2V0IHBhcmFtZXRlciB0aGVyZS4KKyAqCisgKiBFeGFtcGxlOgorICogICAiVEVYVC9QTEFJTjsgY2hhcnNldD11dGYtOCIgLT4gInRleHQvcGxhaW4iLCAidXRmLTgiCisgKiAgICJ0ZXh0IC8gcGxhaW4iIC0+ICJ0ZXh0L3BsYWluIgorICovCitzdGF0aWMgdm9pZCBleHRyYWN0X2NvbnRlbnRfdHlwZShzdHJ1Y3Qgc3RyYnVmICpyYXcsIHN0cnVjdCBzdHJidWYgKnR5cGUsCisJCQkJIHN0cnVjdCBzdHJidWYgKmNoYXJzZXQpCit7CisJY29uc3QgY2hhciAqcDsKKworCXN0cmJ1Zl9yZXNldCh0eXBlKTsKKwlzdHJidWZfZ3Jvdyh0eXBlLCByYXctPmxlbik7CisJZm9yIChwID0gcmF3LT5idWY7ICpwOyBwKyspIHsKKwkJaWYgKGlzc3BhY2UoKnApKQorCQkJY29udGludWU7CisJCWlmICgqcCA9PSAnOycpIHsKKwkJCXArKzsKKwkJCWJyZWFrOworCQl9CisJCXN0cmJ1Zl9hZGRjaCh0eXBlLCB0b2xvd2VyKCpwKSk7CisJfQorCisJaWYgKCFjaGFyc2V0KQorCQlyZXR1cm47CisKKwlzdHJidWZfcmVzZXQoY2hhcnNldCk7CisJd2hpbGUgKCpwKSB7CisJCXdoaWxlIChpc3NwYWNlKCpwKSB8fCAqcCA9PSAnOycpCisJCQlwKys7CisJCWlmICghZXh0cmFjdF9wYXJhbShwLCAiY2hhcnNldCIsIGNoYXJzZXQpKQorCQkJcmV0dXJuOworCQl3aGlsZSAoKnAgJiYgIWlzc3BhY2UoKnApKQorCQkJcCsrOworCX0KKworCWlmICghY2hhcnNldC0+bGVuICYmIHN0YXJ0c193aXRoKHR5cGUtPmJ1ZiwgInRleHQvIikpCisJCXN0cmJ1Zl9hZGRzdHIoY2hhcnNldCwgIklTTy04ODU5LTEiKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfYWNjZXB0X2xhbmd1YWdlKHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwkvKgorCSAqIE1BWF9ERUNJTUFMX1BMQUNFUyBtdXN0IG5vdCBiZSBsYXJnZXIgdGhhbiAzLiBJZiBpdCBpcyBsYXJnZXIgdGhhbgorCSAqIHRoYXQsIHEtdmFsdWUgd2lsbCBiZSBzbWFsbGVyIHRoYW4gMC4wMDEsIHRoZSBtaW5pbXVtIHEtdmFsdWUgdGhlCisJICogSFRUUCBzcGVjaWZpY2F0aW9uIGFsbG93cy4gU2VlCisJICogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTUuMy4xIGZvciBxLXZhbHVlLgorCSAqLworCWNvbnN0IGludCBNQVhfREVDSU1BTF9QTEFDRVMgPSAzOworCWNvbnN0IGludCBNQVhfTEFOR1VBR0VfVEFHUyA9IDEwMDA7CisJY29uc3QgaW50IE1BWF9BQ0NFUFRfTEFOR1VBR0VfSEVBREVSX1NJWkUgPSA0MDAwOworCWNoYXIgKipsYW5ndWFnZV90YWdzID0gTlVMTDsKKwlpbnQgbnVtX2xhbmdzID0gMDsKKwljb25zdCBjaGFyICpzID0gZ2V0X3ByZWZlcnJlZF9sYW5ndWFnZXMoKTsKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIHRhZyA9IFNUUkJVRl9JTklUOworCisJLyogRG9uJ3QgYWRkIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgaWYgbm8gbGFuZ3VhZ2UgaXMgcHJlZmVycmVkLiAqLworCWlmICghcykKKwkJcmV0dXJuOworCisJLyoKKwkgKiBTcGxpdCB0aGUgY29sb24tc2VwYXJhdGVkIHN0cmluZyBvZiBwcmVmZXJyZWQgbGFuZ3VhZ2VzIGludG8KKwkgKiBsYW5ndWFnZV90YWdzIGFycmF5LgorCSAqLworCWRvIHsKKwkJLyogY29sbGVjdCBsYW5ndWFnZSB0YWcgKi8KKwkJZm9yICg7ICpzICYmIChpc2FsbnVtKCpzKSB8fCAqcyA9PSAnXycpOyBzKyspCisJCQlzdHJidWZfYWRkY2goJnRhZywgKnMgPT0gJ18nID8gJy0nIDogKnMpOworCisJCS8qIHNraXAgLmNvZGVzZXQsIEBtb2RpZmllciBhbmQgYW55IG90aGVyIHVubmVjZXNzYXJ5IHBhcnRzICovCisJCXdoaWxlICgqcyAmJiAqcyAhPSAnOicpCisJCQlzKys7CisKKwkJaWYgKHRhZy5sZW4pIHsKKwkJCW51bV9sYW5ncysrOworCQkJUkVBTExPQ19BUlJBWShsYW5ndWFnZV90YWdzLCBudW1fbGFuZ3MpOworCQkJbGFuZ3VhZ2VfdGFnc1tudW1fbGFuZ3MgLSAxXSA9IHN0cmJ1Zl9kZXRhY2goJnRhZywgTlVMTCk7CisJCQlpZiAobnVtX2xhbmdzID49IE1BWF9MQU5HVUFHRV9UQUdTIC0gMSkgLyogLTEgZm9yICcqJyAqLworCQkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoKnMrKyk7CisKKwkvKiB3cml0ZSBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIGludG8gYnVmICovCisJaWYgKG51bV9sYW5ncykgeworCQlpbnQgbGFzdF9idWZfbGVuID0gMDsKKwkJaW50IG1heF9xOworCQlpbnQgZGVjaW1hbF9wbGFjZXM7CisJCWNoYXIgcV9mb3JtYXRbMzJdOworCisJCS8qIGFkZCAnKicgKi8KKwkJUkVBTExPQ19BUlJBWShsYW5ndWFnZV90YWdzLCBudW1fbGFuZ3MgKyAxKTsKKwkJbGFuZ3VhZ2VfdGFnc1tudW1fbGFuZ3MrK10gPSAiKiI7IC8qIGl0J3MgT0s7IHRoaXMgd29uJ3QgYmUgZnJlZWQgKi8KKworCQkvKiBjb21wdXRlIGRlY2ltYWxfcGxhY2VzICovCisJCWZvciAobWF4X3EgPSAxLCBkZWNpbWFsX3BsYWNlcyA9IDA7CisJCSAgICAgbWF4X3EgPCBudW1fbGFuZ3MgJiYgZGVjaW1hbF9wbGFjZXMgPD0gTUFYX0RFQ0lNQUxfUExBQ0VTOworCQkgICAgIGRlY2ltYWxfcGxhY2VzKyssIG1heF9xICo9IDEwKQorCQkJOworCisJCXhzbnByaW50ZihxX2Zvcm1hdCwgc2l6ZW9mKHFfZm9ybWF0KSwgIjtxPTAuJSUwJWRkIiwgZGVjaW1hbF9wbGFjZXMpOworCisJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiQWNjZXB0LUxhbmd1YWdlOiAiKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2xhbmdzOyBpKyspIHsKKwkJCWlmIChpID4gMCkKKwkJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIiwgIik7CisKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCBsYW5ndWFnZV90YWdzW2ldKTsKKworCQkJaWYgKGkgPiAwKQorCQkJCXN0cmJ1Zl9hZGRmKGJ1ZiwgcV9mb3JtYXQsIG1heF9xIC0gaSk7CisKKwkJCWlmIChidWYtPmxlbiA+IE1BWF9BQ0NFUFRfTEFOR1VBR0VfSEVBREVSX1NJWkUpIHsKKwkJCQlzdHJidWZfcmVtb3ZlKGJ1ZiwgbGFzdF9idWZfbGVuLCBidWYtPmxlbiAtIGxhc3RfYnVmX2xlbik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWxhc3RfYnVmX2xlbiA9IGJ1Zi0+bGVuOworCQl9CisJfQorCisJLyogZnJlZSBsYW5ndWFnZSB0YWdzIC0tIGxhc3Qgb25lIGlzIGEgc3RhdGljICcqJyAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fbGFuZ3MgLSAxOyBpKyspCisJCWZyZWUobGFuZ3VhZ2VfdGFnc1tpXSk7CisJZnJlZShsYW5ndWFnZV90YWdzKTsKK30KKworLyoKKyAqIEdldCBhbiBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHdoaWNoIGluZGljYXRlcyB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlcy4KKyAqCisgKiBFeGFtcGxlczoKKyAqICAgTEFOR1VBR0U9IC0+ICIiCisgKiAgIExBTkdVQUdFPWtvOmVuIC0+ICJBY2NlcHQtTGFuZ3VhZ2U6IGtvLCBlbjsgcT0wLjksICo7IHE9MC4xIgorICogICBMQU5HVUFHRT1rb19LUi5VVEYtODpzckBsYXRpbiAtPiAiQWNjZXB0LUxhbmd1YWdlOiBrby1LUiwgc3I7IHE9MC45LCAqOyBxPTAuMSIKKyAqICAgTEFOR1VBR0U9a28gTEFORz1lbl9VUy5VVEYtOCAtPiAiQWNjZXB0LUxhbmd1YWdlOiBrbywgKjsgcT0wLjEiCisgKiAgIExBTkdVQUdFPSBMQU5HPWVuX1VTLlVURi04IC0+ICJBY2NlcHQtTGFuZ3VhZ2U6IGVuLVVTLCAqOyBxPTAuMSIKKyAqICAgTEFOR1VBR0U9IExBTkc9QyAtPiAiIgorICovCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2FjY2VwdF9sYW5ndWFnZSh2b2lkKQoreworCWlmICghY2FjaGVkX2FjY2VwdF9sYW5ndWFnZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQl3cml0ZV9hY2NlcHRfbGFuZ3VhZ2UoJmJ1Zik7CisJCWlmIChidWYubGVuID4gMCkKKwkJCWNhY2hlZF9hY2NlcHRfbGFuZ3VhZ2UgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCX0KKworCXJldHVybiBjYWNoZWRfYWNjZXB0X2xhbmd1YWdlOworfQorCisvKiBodHRwX3JlcXVlc3QoKSB0YXJnZXRzICovCisjZGVmaW5lIEhUVFBfUkVRVUVTVF9TVFJCVUYJMAorI2RlZmluZSBIVFRQX1JFUVVFU1RfRklMRQkxCisKK3N0YXRpYyBpbnQgaHR0cF9yZXF1ZXN0KGNvbnN0IGNoYXIgKnVybCwKKwkJCXZvaWQgKnJlc3VsdCwgaW50IHRhcmdldCwKKwkJCWNvbnN0IHN0cnVjdCBodHRwX2dldF9vcHRpb25zICpvcHRpb25zKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICphY2NlcHRfbGFuZ3VhZ2U7CisJaW50IHJldDsKKworCXNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEdFVCwgMSk7CisKKwlpZiAocmVzdWx0ID09IE5VTEwpIHsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMSk7CisJfSBlbHNlIHsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCByZXN1bHQpOworCisJCWlmICh0YXJnZXQgPT0gSFRUUF9SRVFVRVNUX0ZJTEUpIHsKKwkJCWxvbmcgcG9zbiA9IGZ0ZWxsKHJlc3VsdCk7CisJCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwKKwkJCQkJIGZ3cml0ZSk7CisJCQlpZiAocG9zbiA+IDApIHsKKwkJCQlzdHJidWZfYWRkZigmYnVmLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwb3NuKTsKKwkJCQloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgYnVmLmJ1Zik7CisJCQkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQkJfQorCQl9IGVsc2UKKwkJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLAorCQkJCQkgZndyaXRlX2J1ZmZlcik7CisJfQorCisJYWNjZXB0X2xhbmd1YWdlID0gZ2V0X2FjY2VwdF9sYW5ndWFnZSgpOworCisJaWYgKGFjY2VwdF9sYW5ndWFnZSkKKwkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsIGFjY2VwdF9sYW5ndWFnZSk7CisKKwlzdHJidWZfYWRkc3RyKCZidWYsICJQcmFnbWE6Iik7CisJaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy0+bm9fY2FjaGUpCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIiBuby1jYWNoZSIpOworCWlmIChvcHRpb25zICYmIG9wdGlvbnMtPmtlZXBfZXJyb3IpCisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GQUlMT05FUlJPUiwgMCk7CisKKwloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgYnVmLmJ1Zik7CisKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCB1cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBoZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRU5DT0RJTkcsICJnemlwIik7CisKKwlyZXQgPSBydW5fb25lX3Nsb3Qoc2xvdCwgJnJlc3VsdHMpOworCisJaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy0+Y29udGVudF90eXBlKSB7CisJCXN0cnVjdCBzdHJidWYgcmF3ID0gU1RSQlVGX0lOSVQ7CisJCWN1cmxpbmZvX3N0cmJ1ZihzbG90LT5jdXJsLCBDVVJMSU5GT19DT05URU5UX1RZUEUsICZyYXcpOworCQlleHRyYWN0X2NvbnRlbnRfdHlwZSgmcmF3LCBvcHRpb25zLT5jb250ZW50X3R5cGUsCisJCQkJICAgICBvcHRpb25zLT5jaGFyc2V0KTsKKwkJc3RyYnVmX3JlbGVhc2UoJnJhdyk7CisJfQorCisJaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy0+ZWZmZWN0aXZlX3VybCkKKwkJY3VybGluZm9fc3RyYnVmKHNsb3QtPmN1cmwsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsCisJCQkJb3B0aW9ucy0+ZWZmZWN0aXZlX3VybCk7CisKKwljdXJsX3NsaXN0X2ZyZWVfYWxsKGhlYWRlcnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgImJhc2UiIHVybCB0byBhIG1vcmUgYXBwcm9wcmlhdGUgdmFsdWUsIGFzIGRlZHVjZWQgYnkKKyAqIHJlZGlyZWN0cyBzZWVuIHdoZW4gcmVxdWVzdGluZyBhIFVSTCBzdGFydGluZyB3aXRoICJ1cmwiLgorICoKKyAqIFRoZSAiYXNrZWQiIHBhcmFtZXRlciBpcyBhIFVSTCB0aGF0IHdlIGFza2VkIGN1cmwgdG8gYWNjZXNzLCBhbmQgbXVzdCBiZWdpbgorICogd2l0aCAiYmFzZSIuCisgKgorICogVGhlICJnb3QiIHBhcmFtZXRlciBpcyB0aGUgVVJMIHRoYXQgY3VybCByZXBvcnRlZCB0byB1cyBhcyB3aGVyZSB3ZSBlbmRlZAorICogdXAuCisgKgorICogUmV0dXJucyAxIGlmIHdlIHVwZGF0ZWQgdGhlIGJhc2UgdXJsLCAwIG90aGVyd2lzZS4KKyAqCisgKiBPdXIgYmFzaWMgc3RyYXRlZ3kgaXMgdG8gY29tcGFyZSAiYmFzZSIgYW5kICJhc2tlZCIgdG8gZmluZCB0aGUgYml0cworICogc3BlY2lmaWMgdG8gb3VyIHJlcXVlc3QuIFdlIHRoZW4gc3RyaXAgdGhvc2UgYml0cyBvZmYgb2YgImdvdCIgdG8geWllbGQgdGhlCisgKiBuZXcgYmFzZS4gU28gZm9yIGV4YW1wbGUsIGlmIG91ciBiYXNlIGlzICJodHRwOi8vZXhhbXBsZS5jb20vZm9vLmdpdCIsCisgKiBhbmQgd2UgYXNrIGZvciAiaHR0cDovL2V4YW1wbGUuY29tL2Zvby5naXQvaW5mby9yZWZzIiwgd2UgbWlnaHQgZW5kIHVwCisgKiB3aXRoICJodHRwczovL290aGVyLmV4YW1wbGUuY29tL2Zvby5naXQvaW5mby9yZWZzIi4gV2Ugd291bGQgd2FudCB0aGUKKyAqIG5ldyBVUkwgdG8gYmVjb21lICJodHRwczovL290aGVyLmV4YW1wbGUuY29tL2Zvby5naXQiLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgYSBzYW5lIHJlZGlyZWN0IHNjaGVtZS4gSXQncyBlbnRpcmVseSBwb3NzaWJsZQorICogaW4gdGhlIGV4YW1wbGUgYWJvdmUgdG8gZW5kIHVwIGF0IGEgVVJMIHRoYXQgZG9lcyBub3QgZXZlbiBlbmQgaW4KKyAqICJpbmZvL3JlZnMiLiAgSW4gc3VjaCBhIGNhc2Ugd2Ugc2ltcGx5IHB1bnQsIGFzIHRoZXJlIGlzIG5vdCBtdWNoIHdlIGNhbgorICogZG8gKGFuZCBzdWNoIGEgc2NoZW1lIGlzIHVubGlrZWx5IHRvIHJlcHJlc2VudCBhIHJlYWwgZ2l0IHJlcG9zaXRvcnksCisgKiB3aGljaCBtZWFucyB3ZSBhcmUgbGlrZWx5IGFib3V0IHRvIGFib3J0IGFueXdheSkuCisgKi8KK3N0YXRpYyBpbnQgdXBkYXRlX3VybF9mcm9tX3JlZGlyZWN0KHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCQkJICAgIGNvbnN0IGNoYXIgKmFza2VkLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpnb3QpCit7CisJY29uc3QgY2hhciAqdGFpbDsKKwlzaXplX3QgdGFpbF9sZW47CisKKwlpZiAoIXN0cmNtcChhc2tlZCwgZ290LT5idWYpKQorCQlyZXR1cm4gMDsKKworCWlmICghc2tpcF9wcmVmaXgoYXNrZWQsIGJhc2UtPmJ1ZiwgJnRhaWwpKQorCQlkaWUoIkJVRzogdXBkYXRlX3VybF9mcm9tX3JlZGlyZWN0OiAlcyBpcyBub3QgYSBzdXBlcnNldCBvZiAlcyIsCisJCSAgICBhc2tlZCwgYmFzZS0+YnVmKTsKKworCXRhaWxfbGVuID0gc3RybGVuKHRhaWwpOworCisJaWYgKGdvdC0+bGVuIDwgdGFpbF9sZW4gfHwKKwkgICAgc3RyY21wKHRhaWwsIGdvdC0+YnVmICsgZ290LT5sZW4gLSB0YWlsX2xlbikpCisJCXJldHVybiAwOyAvKiBpbnNhbmUgcmVkaXJlY3Qgc2NoZW1lICovCisKKwlzdHJidWZfcmVzZXQoYmFzZSk7CisJc3RyYnVmX2FkZChiYXNlLCBnb3QtPmJ1ZiwgZ290LT5sZW4gLSB0YWlsX2xlbik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgaHR0cF9yZXF1ZXN0X3JlYXV0aChjb25zdCBjaGFyICp1cmwsCisJCQkgICAgICAgdm9pZCAqcmVzdWx0LCBpbnQgdGFyZ2V0LAorCQkJICAgICAgIHN0cnVjdCBodHRwX2dldF9vcHRpb25zICpvcHRpb25zKQoreworCWludCByZXQgPSBodHRwX3JlcXVlc3QodXJsLCByZXN1bHQsIHRhcmdldCwgb3B0aW9ucyk7CisKKwlpZiAob3B0aW9ucyAmJiBvcHRpb25zLT5lZmZlY3RpdmVfdXJsICYmIG9wdGlvbnMtPmJhc2VfdXJsKSB7CisJCWlmICh1cGRhdGVfdXJsX2Zyb21fcmVkaXJlY3Qob3B0aW9ucy0+YmFzZV91cmwsCisJCQkJCSAgICAgdXJsLCBvcHRpb25zLT5lZmZlY3RpdmVfdXJsKSkgeworCQkJY3JlZGVudGlhbF9mcm9tX3VybCgmaHR0cF9hdXRoLCBvcHRpb25zLT5iYXNlX3VybC0+YnVmKTsKKwkJCXVybCA9IG9wdGlvbnMtPmVmZmVjdGl2ZV91cmwtPmJ1ZjsKKwkJfQorCX0KKworCWlmIChyZXQgIT0gSFRUUF9SRUFVVEgpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIElmIHdlIGFyZSB1c2luZyBLRUVQX0VSUk9SLCB0aGUgcHJldmlvdXMgcmVxdWVzdCBtYXkgaGF2ZQorCSAqIHB1dCBjcnVmdCBpbnRvIG91ciBvdXRwdXQgc3RyZWFtOyB3ZSBzaG91bGQgY2xlYXIgaXQgb3V0IGJlZm9yZQorCSAqIG1ha2luZyBvdXIgbmV4dCByZXF1ZXN0LiBXZSBvbmx5IGtub3cgaG93IHRvIGRvIHRoaXMgZm9yCisJICogdGhlIHN0cmJ1ZiBjYXNlLCBidXQgdGhhdCBpcyBlbm91Z2ggdG8gc2F0aXNmeSBjdXJyZW50IGNhbGxlcnMuCisJICovCisJaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy0+a2VlcF9lcnJvcikgeworCQlzd2l0Y2ggKHRhcmdldCkgeworCQljYXNlIEhUVFBfUkVRVUVTVF9TVFJCVUY6CisJCQlzdHJidWZfcmVzZXQocmVzdWx0KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGllKCJCVUc6IEhUVFBfS0VFUF9FUlJPUiBpcyBvbmx5IHN1cHBvcnRlZCB3aXRoIHN0cmJ1ZnMiKTsKKwkJfQorCX0KKworCWNyZWRlbnRpYWxfZmlsbCgmaHR0cF9hdXRoKTsKKworCXJldHVybiBodHRwX3JlcXVlc3QodXJsLCByZXN1bHQsIHRhcmdldCwgb3B0aW9ucyk7Cit9CisKK2ludCBodHRwX2dldF9zdHJidWYoY29uc3QgY2hhciAqdXJsLAorCQkgICAgc3RydWN0IHN0cmJ1ZiAqcmVzdWx0LAorCQkgICAgc3RydWN0IGh0dHBfZ2V0X29wdGlvbnMgKm9wdGlvbnMpCit7CisJcmV0dXJuIGh0dHBfcmVxdWVzdF9yZWF1dGgodXJsLCByZXN1bHQsIEhUVFBfUkVRVUVTVF9TVFJCVUYsIG9wdGlvbnMpOworfQorCisvKgorICogRG93bmxvYWRzIGEgVVJMIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiB0aGUgZ2l2ZW4gZmlsZS4KKyAqCisgKiBJZiBhIHByZXZpb3VzIGludGVycnVwdGVkIGRvd25sb2FkIGlzIGRldGVjdGVkIChpLmUuIGEgcHJldmlvdXMgdGVtcG9yYXJ5CisgKiBmaWxlIGlzIHN0aWxsIGFyb3VuZCkgdGhlIGRvd25sb2FkIGlzIHJlc3VtZWQuCisgKi8KK3N0YXRpYyBpbnQgaHR0cF9nZXRfZmlsZShjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJIHN0cnVjdCBodHRwX2dldF9vcHRpb25zICpvcHRpb25zKQoreworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiB0bXBmaWxlID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqcmVzdWx0OworCisJc3RyYnVmX2FkZGYoJnRtcGZpbGUsICIlcy50ZW1wIiwgZmlsZW5hbWUpOworCXJlc3VsdCA9IGZvcGVuKHRtcGZpbGUuYnVmLCAiYSIpOworCWlmICghcmVzdWx0KSB7CisJCWVycm9yKCJVbmFibGUgdG8gb3BlbiBsb2NhbCBmaWxlICVzIiwgdG1wZmlsZS5idWYpOworCQlyZXQgPSBIVFRQX0VSUk9SOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcmV0ID0gaHR0cF9yZXF1ZXN0X3JlYXV0aCh1cmwsIHJlc3VsdCwgSFRUUF9SRVFVRVNUX0ZJTEUsIG9wdGlvbnMpOworCWZjbG9zZShyZXN1bHQpOworCisJaWYgKHJldCA9PSBIVFRQX09LICYmIGZpbmFsaXplX29iamVjdF9maWxlKHRtcGZpbGUuYnVmLCBmaWxlbmFtZSkpCisJCXJldCA9IEhUVFBfRVJST1I7CitjbGVhbnVwOgorCXN0cmJ1Zl9yZWxlYXNlKCZ0bXBmaWxlKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaHR0cF9mZXRjaF9yZWYoY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IHJlZiAqcmVmKQoreworCXN0cnVjdCBodHRwX2dldF9vcHRpb25zIG9wdGlvbnMgPSB7MH07CisJY2hhciAqdXJsOworCXN0cnVjdCBzdHJidWYgYnVmZmVyID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IC0xOworCisJb3B0aW9ucy5ub19jYWNoZSA9IDE7CisKKwl1cmwgPSBxdW90ZV9yZWZfdXJsKGJhc2UsIHJlZi0+bmFtZSk7CisJaWYgKGh0dHBfZ2V0X3N0cmJ1Zih1cmwsICZidWZmZXIsICZvcHRpb25zKSA9PSBIVFRQX09LKSB7CisJCXN0cmJ1Zl9ydHJpbSgmYnVmZmVyKTsKKwkJaWYgKGJ1ZmZlci5sZW4gPT0gNDApCisJCQlyZXQgPSBnZXRfc2hhMV9oZXgoYnVmZmVyLmJ1ZiwgcmVmLT5vbGRfc2hhMSk7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKGJ1ZmZlci5idWYsICJyZWY6ICIpKSB7CisJCQlyZWYtPnN5bXJlZiA9IHhzdHJkdXAoYnVmZmVyLmJ1ZiArIDUpOworCQkJcmV0ID0gMDsKKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZidWZmZXIpOworCWZyZWUodXJsKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBIZWxwZXJzIGZvciBmZXRjaGluZyBwYWNrcyAqLworc3RhdGljIGNoYXIgKmZldGNoX3BhY2tfaW5kZXgodW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqYmFzZV91cmwpCit7CisJY2hhciAqdXJsLCAqdG1wOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoaHR0cF9pc192ZXJib3NlKQorCQlmcHJpbnRmKHN0ZGVyciwgIkdldHRpbmcgaW5kZXggZm9yIHBhY2sgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlX3VybCk7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIm9iamVjdHMvcGFjay9wYWNrLSVzLmlkeCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl1cmwgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzLnRlbXAiLCBzaGExX3BhY2tfaW5kZXhfbmFtZShzaGExKSk7CisJdG1wID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCWlmIChodHRwX2dldF9maWxlKHVybCwgdG1wLCBOVUxMKSAhPSBIVFRQX09LKSB7CisJCWVycm9yKCJVbmFibGUgdG8gZ2V0IHBhY2sgaW5kZXggJXMiLCB1cmwpOworCQlmcmVlKHRtcCk7CisJCXRtcCA9IE5VTEw7CisJfQorCisJZnJlZSh1cmwpOworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfYW5kX3NldHVwX3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKipwYWNrc19oZWFkLAorCXVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmJhc2VfdXJsKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpuZXdfcGFjazsKKwljaGFyICp0bXBfaWR4ID0gTlVMTDsKKwlpbnQgcmV0OworCisJaWYgKGhhc19wYWNrX2luZGV4KHNoYTEpKSB7CisJCW5ld19wYWNrID0gcGFyc2VfcGFja19pbmRleChzaGExLCBzaGExX3BhY2tfaW5kZXhfbmFtZShzaGExKSk7CisJCWlmICghbmV3X3BhY2spCisJCQlyZXR1cm4gLTE7IC8qIHBhcnNlX3BhY2tfaW5kZXgoKSBhbHJlYWR5IGlzc3VlZCBlcnJvciBtZXNzYWdlICovCisJCWdvdG8gYWRkX3BhY2s7CisJfQorCisJdG1wX2lkeCA9IGZldGNoX3BhY2tfaW5kZXgoc2hhMSwgYmFzZV91cmwpOworCWlmICghdG1wX2lkeCkKKwkJcmV0dXJuIC0xOworCisJbmV3X3BhY2sgPSBwYXJzZV9wYWNrX2luZGV4KHNoYTEsIHRtcF9pZHgpOworCWlmICghbmV3X3BhY2spIHsKKwkJdW5saW5rKHRtcF9pZHgpOworCQlmcmVlKHRtcF9pZHgpOworCisJCXJldHVybiAtMTsgLyogcGFyc2VfcGFja19pbmRleCgpIGFscmVhZHkgaXNzdWVkIGVycm9yIG1lc3NhZ2UgKi8KKwl9CisKKwlyZXQgPSB2ZXJpZnlfcGFja19pbmRleChuZXdfcGFjayk7CisJaWYgKCFyZXQpIHsKKwkJY2xvc2VfcGFja19pbmRleChuZXdfcGFjayk7CisJCXJldCA9IGZpbmFsaXplX29iamVjdF9maWxlKHRtcF9pZHgsIHNoYTFfcGFja19pbmRleF9uYW1lKHNoYTEpKTsKKwl9CisJZnJlZSh0bXBfaWR4KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLTE7CisKK2FkZF9wYWNrOgorCW5ld19wYWNrLT5uZXh0ID0gKnBhY2tzX2hlYWQ7CisJKnBhY2tzX2hlYWQgPSBuZXdfcGFjazsKKwlyZXR1cm4gMDsKK30KKworaW50IGh0dHBfZ2V0X2luZm9fcGFja3MoY29uc3QgY2hhciAqYmFzZV91cmwsIHN0cnVjdCBwYWNrZWRfZ2l0ICoqcGFja3NfaGVhZCkKK3sKKwlzdHJ1Y3QgaHR0cF9nZXRfb3B0aW9ucyBvcHRpb25zID0gezB9OworCWludCByZXQgPSAwLCBpID0gMDsKKwljaGFyICp1cmwsICpkYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCBiYXNlX3VybCk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCAib2JqZWN0cy9pbmZvL3BhY2tzIik7CisJdXJsID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCW9wdGlvbnMubm9fY2FjaGUgPSAxOworCXJldCA9IGh0dHBfZ2V0X3N0cmJ1Zih1cmwsICZidWYsICZvcHRpb25zKTsKKwlpZiAocmV0ICE9IEhUVFBfT0spCisJCWdvdG8gY2xlYW51cDsKKworCWRhdGEgPSBidWYuYnVmOworCXdoaWxlIChpIDwgYnVmLmxlbikgeworCQlzd2l0Y2ggKGRhdGFbaV0pIHsKKwkJY2FzZSAnUCc6CisJCQlpKys7CisJCQlpZiAoaSArIDUyIDw9IGJ1Zi5sZW4gJiYKKwkJCSAgICBzdGFydHNfd2l0aChkYXRhICsgaSwgIiBwYWNrLSIpICYmCisJCQkgICAgc3RhcnRzX3dpdGgoZGF0YSArIGkgKyA0NiwgIi5wYWNrXG4iKSkgeworCQkJCWdldF9zaGExX2hleChkYXRhICsgaSArIDYsIHNoYTEpOworCQkJCWZldGNoX2FuZF9zZXR1cF9wYWNrX2luZGV4KHBhY2tzX2hlYWQsIHNoYTEsCisJCQkJCQkgICAgICBiYXNlX3VybCk7CisJCQkJaSArPSA1MTsKKwkJCQlicmVhazsKKwkJCX0KKwkJZGVmYXVsdDoKKwkJCXdoaWxlIChpIDwgYnVmLmxlbiAmJiBkYXRhW2ldICE9ICdcbicpCisJCQkJaSsrOworCQl9CisJCWkrKzsKKwl9CisKK2NsZWFudXA6CisJZnJlZSh1cmwpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmVsZWFzZV9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpCit7CisJaWYgKHByZXEtPnBhY2tmaWxlICE9IE5VTEwpIHsKKwkJZmNsb3NlKHByZXEtPnBhY2tmaWxlKTsKKwkJcHJlcS0+cGFja2ZpbGUgPSBOVUxMOworCX0KKwlpZiAocHJlcS0+cmFuZ2VfaGVhZGVyICE9IE5VTEwpIHsKKwkJY3VybF9zbGlzdF9mcmVlX2FsbChwcmVxLT5yYW5nZV9oZWFkZXIpOworCQlwcmVxLT5yYW5nZV9oZWFkZXIgPSBOVUxMOworCX0KKwlwcmVxLT5zbG90ID0gTlVMTDsKKwlmcmVlKHByZXEtPnVybCk7CisJZnJlZShwcmVxKTsKK30KKworaW50IGZpbmlzaF9odHRwX3BhY2tfcmVxdWVzdChzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXEpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKipsc3Q7CisJc3RydWN0IHBhY2tlZF9naXQgKnAgPSBwcmVxLT50YXJnZXQ7CisJY2hhciAqdG1wX2lkeDsKKwlzaXplX3QgbGVuOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGlwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWNvbnN0IGNoYXIgKmlwX2FyZ3ZbOF07CisKKwljbG9zZV9wYWNrX2luZGV4KHApOworCisJZmNsb3NlKHByZXEtPnBhY2tmaWxlKTsKKwlwcmVxLT5wYWNrZmlsZSA9IE5VTEw7CisKKwlsc3QgPSBwcmVxLT5sc3Q7CisJd2hpbGUgKCpsc3QgIT0gcCkKKwkJbHN0ID0gJigoKmxzdCktPm5leHQpOworCSpsc3QgPSAoKmxzdCktPm5leHQ7CisKKwlpZiAoIXN0cmlwX3N1ZmZpeChwcmVxLT50bXBmaWxlLCAiLnBhY2sudGVtcCIsICZsZW4pKQorCQlkaWUoIkJVRzogcGFjayB0bXBmaWxlIGRvZXMgbm90IGVuZCBpbiAucGFjay50ZW1wPyIpOworCXRtcF9pZHggPSB4c3RyZm10KCIlLipzLmlkeC50ZW1wIiwgKGludClsZW4sIHByZXEtPnRtcGZpbGUpOworCisJaXBfYXJndlswXSA9ICJpbmRleC1wYWNrIjsKKwlpcF9hcmd2WzFdID0gIi1vIjsKKwlpcF9hcmd2WzJdID0gdG1wX2lkeDsKKwlpcF9hcmd2WzNdID0gcHJlcS0+dG1wZmlsZTsKKwlpcF9hcmd2WzRdID0gTlVMTDsKKworCWlwLmFyZ3YgPSBpcF9hcmd2OworCWlwLmdpdF9jbWQgPSAxOworCWlwLm5vX3N0ZGluID0gMTsKKwlpcC5ub19zdGRvdXQgPSAxOworCisJaWYgKHJ1bl9jb21tYW5kKCZpcCkpIHsKKwkJdW5saW5rKHByZXEtPnRtcGZpbGUpOworCQl1bmxpbmsodG1wX2lkeCk7CisJCWZyZWUodG1wX2lkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwl1bmxpbmsoc2hhMV9wYWNrX2luZGV4X25hbWUocC0+c2hhMSkpOworCisJaWYgKGZpbmFsaXplX29iamVjdF9maWxlKHByZXEtPnRtcGZpbGUsIHNoYTFfcGFja19uYW1lKHAtPnNoYTEpKQorCSB8fCBmaW5hbGl6ZV9vYmplY3RfZmlsZSh0bXBfaWR4LCBzaGExX3BhY2tfaW5kZXhfbmFtZShwLT5zaGExKSkpIHsKKwkJZnJlZSh0bXBfaWR4KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWluc3RhbGxfcGFja2VkX2dpdChwKTsKKwlmcmVlKHRtcF9pZHgpOworCXJldHVybiAwOworfQorCitzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKm5ld19odHRwX3BhY2tfcmVxdWVzdCgKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqdGFyZ2V0LCBjb25zdCBjaGFyICpiYXNlX3VybCkKK3sKKwlsb25nIHByZXZfcG9zbiA9IDA7CisJY2hhciByYW5nZVtSQU5HRV9IRUFERVJfU0laRV07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgaHR0cF9wYWNrX3JlcXVlc3QgKnByZXE7CisKKwlwcmVxID0geGNhbGxvYygxLCBzaXplb2YoKnByZXEpKTsKKwlwcmVxLT50YXJnZXQgPSB0YXJnZXQ7CisKKwllbmRfdXJsX3dpdGhfc2xhc2goJmJ1ZiwgYmFzZV91cmwpOworCXN0cmJ1Zl9hZGRmKCZidWYsICJvYmplY3RzL3BhY2svcGFjay0lcy5wYWNrIiwKKwkJc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSk7CisJcHJlcS0+dXJsID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCXNucHJpbnRmKHByZXEtPnRtcGZpbGUsIHNpemVvZihwcmVxLT50bXBmaWxlKSwgIiVzLnRlbXAiLAorCQlzaGExX3BhY2tfbmFtZSh0YXJnZXQtPnNoYTEpKTsKKwlwcmVxLT5wYWNrZmlsZSA9IGZvcGVuKHByZXEtPnRtcGZpbGUsICJhIik7CisJaWYgKCFwcmVxLT5wYWNrZmlsZSkgeworCQllcnJvcigiVW5hYmxlIHRvIG9wZW4gbG9jYWwgZmlsZSAlcyBmb3IgcGFjayIsCisJCSAgICAgIHByZXEtPnRtcGZpbGUpOworCQlnb3RvIGFib3J0OworCX0KKworCXByZXEtPnNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHByZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgcHJlcS0+cGFja2ZpbGUpOworCWN1cmxfZWFzeV9zZXRvcHQocHJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBmd3JpdGUpOworCWN1cmxfZWFzeV9zZXRvcHQocHJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHByZXEtPnVybCk7CisJY3VybF9lYXN5X3NldG9wdChwcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0hUVFBIRUFERVIsCisJCW5vX3ByYWdtYV9oZWFkZXIpOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBkYXRhIHByZXNlbnQgZnJvbSBhIHByZXZpb3VzIHRyYW5zZmVyIGF0dGVtcHQsCisJICogcmVzdW1lIHdoZXJlIGl0IGxlZnQgb2ZmCisJICovCisJcHJldl9wb3NuID0gZnRlbGwocHJlcS0+cGFja2ZpbGUpOworCWlmIChwcmV2X3Bvc24+MCkgeworCQlpZiAoaHR0cF9pc192ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlJlc3VtaW5nIGZldGNoIG9mIHBhY2sgJXMgYXQgYnl0ZSAlbGRcbiIsCisJCQkJc2hhMV90b19oZXgodGFyZ2V0LT5zaGExKSwgcHJldl9wb3NuKTsKKwkJeHNucHJpbnRmKHJhbmdlLCBzaXplb2YocmFuZ2UpLCAiUmFuZ2U6IGJ5dGVzPSVsZC0iLCBwcmV2X3Bvc24pOworCQlwcmVxLT5yYW5nZV9oZWFkZXIgPSBjdXJsX3NsaXN0X2FwcGVuZChOVUxMLCByYW5nZSk7CisJCWN1cmxfZWFzeV9zZXRvcHQocHJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLAorCQkJcHJlcS0+cmFuZ2VfaGVhZGVyKTsKKwl9CisKKwlyZXR1cm4gcHJlcTsKKworYWJvcnQ6CisJZnJlZShwcmVxLT51cmwpOworCWZyZWUocHJlcSk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIEhlbHBlcnMgZm9yIGZldGNoaW5nIG9iamVjdHMgKGxvb3NlKSAqLworc3RhdGljIHNpemVfdCBmd3JpdGVfc2hhMV9maWxlKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwKKwkJCSAgICAgICB2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGNoYXIgZXhwbls0MDk2XTsKKwlzaXplX3Qgc2l6ZSA9IGVsdHNpemUgKiBubWVtYjsKKwlpbnQgcG9zbiA9IDA7CisJc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEgPQorCQkoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKilkYXRhOworCWRvIHsKKwkJc3NpemVfdCByZXR2YWwgPSB4d3JpdGUoZnJlcS0+bG9jYWxmaWxlLAorCQkJCQkoY2hhciAqKSBwdHIgKyBwb3NuLCBzaXplIC0gcG9zbik7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJcmV0dXJuIHBvc247CisJCXBvc24gKz0gcmV0dmFsOworCX0gd2hpbGUgKHBvc24gPCBzaXplKTsKKworCWZyZXEtPnN0cmVhbS5hdmFpbF9pbiA9IHNpemU7CisJZnJlcS0+c3RyZWFtLm5leHRfaW4gPSAodm9pZCAqKXB0cjsKKwlkbyB7CisJCWZyZXEtPnN0cmVhbS5uZXh0X291dCA9IGV4cG47CisJCWZyZXEtPnN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoZXhwbik7CisJCWZyZXEtPnpyZXQgPSBnaXRfaW5mbGF0ZSgmZnJlcS0+c3RyZWFtLCBaX1NZTkNfRkxVU0gpOworCQlnaXRfU0hBMV9VcGRhdGUoJmZyZXEtPmMsIGV4cG4sCisJCQkJc2l6ZW9mKGV4cG4pIC0gZnJlcS0+c3RyZWFtLmF2YWlsX291dCk7CisJfSB3aGlsZSAoZnJlcS0+c3RyZWFtLmF2YWlsX2luICYmIGZyZXEtPnpyZXQgPT0gWl9PSyk7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpuZXdfaHR0cF9vYmplY3RfcmVxdWVzdChjb25zdCBjaGFyICpiYXNlX3VybCwKKwl1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHNoYTEpOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNoYXIgcHJldmZpbGVbUEFUSF9NQVhdOworCWludCBwcmV2bG9jYWw7CisJY2hhciBwcmV2X2J1ZltQUkVWX0JVRl9TSVpFXTsKKwlzc2l6ZV90IHByZXZfcmVhZCA9IDA7CisJbG9uZyBwcmV2X3Bvc24gPSAwOworCWNoYXIgcmFuZ2VbUkFOR0VfSEVBREVSX1NJWkVdOworCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXIgPSBOVUxMOworCXN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxOworCisJZnJlcSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpmcmVxKSk7CisJaGFzaGNweShmcmVxLT5zaGExLCBzaGExKTsKKwlmcmVxLT5sb2NhbGZpbGUgPSAtMTsKKworCWZpbGVuYW1lID0gc2hhMV9maWxlX25hbWUoc2hhMSk7CisJc25wcmludGYoZnJlcS0+dG1wZmlsZSwgc2l6ZW9mKGZyZXEtPnRtcGZpbGUpLAorCQkgIiVzLnRlbXAiLCBmaWxlbmFtZSk7CisKKwlzbnByaW50ZihwcmV2ZmlsZSwgc2l6ZW9mKHByZXZmaWxlKSwgIiVzLnByZXYiLCBmaWxlbmFtZSk7CisJdW5saW5rX29yX3dhcm4ocHJldmZpbGUpOworCXJlbmFtZShmcmVxLT50bXBmaWxlLCBwcmV2ZmlsZSk7CisJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZSk7CisKKwlpZiAoZnJlcS0+bG9jYWxmaWxlICE9IC0xKQorCQllcnJvcigiZmQgbGVha2FnZSBpbiBzdGFydDogJWQiLCBmcmVxLT5sb2NhbGZpbGUpOworCWZyZXEtPmxvY2FsZmlsZSA9IG9wZW4oZnJlcS0+dG1wZmlsZSwKKwkJCSAgICAgICBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOworCS8qCisJICogVGhpcyBjb3VsZCBoYXZlIGZhaWxlZCBkdWUgdG8gdGhlICJsYXp5IGRpcmVjdG9yeSBjcmVhdGlvbiI7CisJICogdHJ5IHRvIG1rZGlyIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LgorCSAqLworCWlmIChmcmVxLT5sb2NhbGZpbGUgPCAwICYmIGVycm5vID09IEVOT0VOVCkgeworCQljaGFyICpkaXIgPSBzdHJyY2hyKGZyZXEtPnRtcGZpbGUsICcvJyk7CisJCWlmIChkaXIpIHsKKwkJCSpkaXIgPSAwOworCQkJbWtkaXIoZnJlcS0+dG1wZmlsZSwgMDc3Nyk7CisJCQkqZGlyID0gJy8nOworCQl9CisJCWZyZXEtPmxvY2FsZmlsZSA9IG9wZW4oZnJlcS0+dG1wZmlsZSwKKwkJCQkgICAgICAgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19FWENMLCAwNjY2KTsKKwl9CisKKwlpZiAoZnJlcS0+bG9jYWxmaWxlIDwgMCkgeworCQllcnJvcigiQ291bGRuJ3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlICVzOiAlcyIsCisJCSAgICAgIGZyZXEtPnRtcGZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJZ2l0X2luZmxhdGVfaW5pdCgmZnJlcS0+c3RyZWFtKTsKKworCWdpdF9TSEExX0luaXQoJmZyZXEtPmMpOworCisJZnJlcS0+dXJsID0gZ2V0X3JlbW90ZV9vYmplY3RfdXJsKGJhc2VfdXJsLCBoZXgsIDApOworCisJLyoKKwkgKiBJZiBhIHByZXZpb3VzIHRlbXAgZmlsZSBpcyBwcmVzZW50LCBwcm9jZXNzIHdoYXQgd2FzIGFscmVhZHkKKwkgKiBmZXRjaGVkLgorCSAqLworCXByZXZsb2NhbCA9IG9wZW4ocHJldmZpbGUsIE9fUkRPTkxZKTsKKwlpZiAocHJldmxvY2FsICE9IC0xKSB7CisJCWRvIHsKKwkJCXByZXZfcmVhZCA9IHhyZWFkKHByZXZsb2NhbCwgcHJldl9idWYsIFBSRVZfQlVGX1NJWkUpOworCQkJaWYgKHByZXZfcmVhZD4wKSB7CisJCQkJaWYgKGZ3cml0ZV9zaGExX2ZpbGUocHJldl9idWYsCisJCQkJCQkgICAgIDEsCisJCQkJCQkgICAgIHByZXZfcmVhZCwKKwkJCQkJCSAgICAgZnJlcSkgPT0gcHJldl9yZWFkKSB7CisJCQkJCXByZXZfcG9zbiArPSBwcmV2X3JlYWQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHJldl9yZWFkID0gLTE7CisJCQkJfQorCQkJfQorCQl9IHdoaWxlIChwcmV2X3JlYWQgPiAwKTsKKwkJY2xvc2UocHJldmxvY2FsKTsKKwl9CisJdW5saW5rX29yX3dhcm4ocHJldmZpbGUpOworCisJLyoKKwkgKiBSZXNldCBpbmZsYXRlL1NIQTEgaWYgdGhlcmUgd2FzIGFuIGVycm9yIHJlYWRpbmcgdGhlIHByZXZpb3VzIHRlbXAKKwkgKiBmaWxlOyBhbHNvIHJld2luZCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb2NhbCBmaWxlLgorCSAqLworCWlmIChwcmV2X3JlYWQgPT0gLTEpIHsKKwkJbWVtc2V0KCZmcmVxLT5zdHJlYW0sIDAsIHNpemVvZihmcmVxLT5zdHJlYW0pKTsKKwkJZ2l0X2luZmxhdGVfaW5pdCgmZnJlcS0+c3RyZWFtKTsKKwkJZ2l0X1NIQTFfSW5pdCgmZnJlcS0+Yyk7CisJCWlmIChwcmV2X3Bvc24+MCkgeworCQkJcHJldl9wb3NuID0gMDsKKwkJCWxzZWVrKGZyZXEtPmxvY2FsZmlsZSwgMCwgU0VFS19TRVQpOworCQkJaWYgKGZ0cnVuY2F0ZShmcmVxLT5sb2NhbGZpbGUsIDApIDwgMCkgeworCQkJCWVycm9yKCJDb3VsZG4ndCB0cnVuY2F0ZSB0ZW1wb3JhcnkgZmlsZSAlczogJXMiLAorCQkJCQkgIGZyZXEtPnRtcGZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZ290byBhYm9ydDsKKwkJCX0KKwkJfQorCX0KKworCWZyZXEtPnNsb3QgPSBnZXRfYWN0aXZlX3Nsb3QoKTsKKworCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCBmcmVxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgZndyaXRlX3NoYTFfZmlsZSk7CisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBmcmVxLT5lcnJvcnN0cik7CisJY3VybF9lYXN5X3NldG9wdChmcmVxLT5zbG90LT5jdXJsLCBDVVJMT1BUX1VSTCwgZnJlcS0+dXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGZyZXEtPnNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgbm9fcHJhZ21hX2hlYWRlcik7CisKKwkvKgorCSAqIElmIHdlIGhhdmUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBkYXRhIGZyb20gYSBwcmV2aW91cyBmZXRjaAorCSAqIGF0dGVtcHQsIG9ubHkgZmV0Y2ggdGhlIGRhdGEgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlLgorCSAqLworCWlmIChwcmV2X3Bvc24+MCkgeworCQlpZiAoaHR0cF9pc192ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlJlc3VtaW5nIGZldGNoIG9mIG9iamVjdCAlcyBhdCBieXRlICVsZFxuIiwKKwkJCQloZXgsIHByZXZfcG9zbik7CisJCXhzbnByaW50ZihyYW5nZSwgc2l6ZW9mKHJhbmdlKSwgIlJhbmdlOiBieXRlcz0lbGQtIiwgcHJldl9wb3NuKTsKKwkJcmFuZ2VfaGVhZGVyID0gY3VybF9zbGlzdF9hcHBlbmQocmFuZ2VfaGVhZGVyLCByYW5nZSk7CisJCWN1cmxfZWFzeV9zZXRvcHQoZnJlcS0+c2xvdC0+Y3VybCwKKwkJCQkgQ1VSTE9QVF9IVFRQSEVBREVSLCByYW5nZV9oZWFkZXIpOworCX0KKworCXJldHVybiBmcmVxOworCithYm9ydDoKKwlmcmVlKGZyZXEtPnVybCk7CisJZnJlZShmcmVxKTsKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBwcm9jZXNzX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpCit7CisJaWYgKGZyZXEtPnNsb3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCWZyZXEtPmN1cmxfcmVzdWx0ID0gZnJlcS0+c2xvdC0+Y3VybF9yZXN1bHQ7CisJZnJlcS0+aHR0cF9jb2RlID0gZnJlcS0+c2xvdC0+aHR0cF9jb2RlOworCWZyZXEtPnNsb3QgPSBOVUxMOworfQorCitpbnQgZmluaXNoX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwljbG9zZShmcmVxLT5sb2NhbGZpbGUpOworCWZyZXEtPmxvY2FsZmlsZSA9IC0xOworCisJcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KGZyZXEpOworCisJaWYgKGZyZXEtPmh0dHBfY29kZSA9PSA0MTYpIHsKKwkJd2FybmluZygicmVxdWVzdGVkIHJhbmdlIGludmFsaWQ7IHdlIG1heSBhbHJlYWR5IGhhdmUgYWxsIHRoZSBkYXRhLiIpOworCX0gZWxzZSBpZiAoZnJlcS0+Y3VybF9yZXN1bHQgIT0gQ1VSTEVfT0spIHsKKwkJaWYgKHN0YXQoZnJlcS0+dG1wZmlsZSwgJnN0KSA9PSAwKQorCQkJaWYgKHN0LnN0X3NpemUgPT0gMCkKKwkJCQl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWdpdF9pbmZsYXRlX2VuZCgmZnJlcS0+c3RyZWFtKTsKKwlnaXRfU0hBMV9GaW5hbChmcmVxLT5yZWFsX3NoYTEsICZmcmVxLT5jKTsKKwlpZiAoZnJlcS0+enJldCAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGhhc2hjbXAoZnJlcS0+c2hhMSwgZnJlcS0+cmVhbF9zaGExKSkgeworCQl1bmxpbmtfb3Jfd2FybihmcmVxLT50bXBmaWxlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmcmVxLT5yZW5hbWUgPQorCQlmaW5hbGl6ZV9vYmplY3RfZmlsZShmcmVxLT50bXBmaWxlLCBzaGExX2ZpbGVfbmFtZShmcmVxLT5zaGExKSk7CisKKwlyZXR1cm4gZnJlcS0+cmVuYW1lOworfQorCit2b2lkIGFib3J0X2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpCit7CisJdW5saW5rX29yX3dhcm4oZnJlcS0+dG1wZmlsZSk7CisKKwlyZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3QoZnJlcSk7Cit9CisKK3ZvaWQgcmVsZWFzZV9odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKQoreworCWlmIChmcmVxLT5sb2NhbGZpbGUgIT0gLTEpIHsKKwkJY2xvc2UoZnJlcS0+bG9jYWxmaWxlKTsKKwkJZnJlcS0+bG9jYWxmaWxlID0gLTE7CisJfQorCWlmIChmcmVxLT51cmwgIT0gTlVMTCkgeworCQlmcmVlKGZyZXEtPnVybCk7CisJCWZyZXEtPnVybCA9IE5VTEw7CisJfQorCWlmIChmcmVxLT5zbG90ICE9IE5VTEwpIHsKKwkJZnJlcS0+c2xvdC0+Y2FsbGJhY2tfZnVuYyA9IE5VTEw7CisJCWZyZXEtPnNsb3QtPmNhbGxiYWNrX2RhdGEgPSBOVUxMOworCQlyZWxlYXNlX2FjdGl2ZV9zbG90KGZyZXEtPnNsb3QpOworCQlmcmVxLT5zbG90ID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQgYS9odHRwLmggYi9odHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlhZmUzOQotLS0gL2Rldi9udWxsCisrKyBiL2h0dHAuaApAQCAtMCwwICsxLDIyNiBAQAorI2lmbmRlZiBIVFRQX0gKKyNkZWZpbmUgSFRUUF9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorCisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisjaW5jbHVkZSA8Y3VybC9lYXN5Lmg+CisKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKworLyoKKyAqIFdlIGRldGVjdCBiYXNlZCBvbiB0aGUgY1VSTCB2ZXJzaW9uIGlmIG11bHRpLXRyYW5zZmVyIGlzCisgKiB1c2FibGUgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBhbmQgZGVmaW5lIHRoaXMgc3ltYm9sIGFjY29yZGluZ2x5LgorICogVGhpcyBzaG91bGRuJ3QgYmUgc2V0IGJ5IHRoZSBNYWtlZmlsZSBvciBieSB0aGUgdXNlciAoZS5nLiB2aWEgQ0ZMQUdTKS4KKyAqLworI3VuZGVmIFVTRV9DVVJMX01VTFRJCisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNID49IDB4MDcxMDAwCisjZGVmaW5lIFVTRV9DVVJMX01VTFRJCisjZGVmaW5lIERFRkFVTFRfTUFYX1JFUVVFU1RTIDUKKyNlbmRpZgorCisjaWYgTElCQ1VSTF9WRVJTSU9OX05VTSA8IDB4MDcwNzA0CisjZGVmaW5lIGN1cmxfZ2xvYmFsX2NsZWFudXAoKSBkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKKyNlbmRpZgorI2lmIExJQkNVUkxfVkVSU0lPTl9OVU0gPCAweDA3MDgwMAorI2RlZmluZSBjdXJsX2dsb2JhbF9pbml0KGEpIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiAoTElCQ1VSTF9WRVJTSU9OX05VTSA8IDB4MDcwYzA0KSB8fCAoTElCQ1VSTF9WRVJTSU9OX05VTSA9PSAweDA3MTAwMCkKKyNkZWZpbmUgTk9fQ1VSTF9FQVNZX0RVUEhBTkRMRQorI2VuZGlmCisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNIDwgMHgwNzBhMDMKKyNkZWZpbmUgQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUiBDVVJMRV9IVFRQX05PVF9GT1VORAorI2VuZGlmCisKKyNpZiBMSUJDVVJMX1ZFUlNJT05fTlVNIDwgMHgwNzBjMDMKKyNkZWZpbmUgTk9fQ1VSTF9JT0NUTAorI2VuZGlmCisKKy8qCisgKiBDVVJMT1BUX1VTRV9TU0wgd2FzIGtub3duIGFzIENVUkxPUFRfRlRQX1NTTCB1cCB0byA3LjE2LjQsCisgKiBhbmQgdGhlIGNvbnN0YW50cyB3ZXJlIGtub3duIGFzIENVUkxGVFBTU0xfKgorKi8KKyNpZiAhZGVmaW5lZChDVVJMT1BUX1VTRV9TU0wpICYmIGRlZmluZWQoQ1VSTE9QVF9GVFBfU1NMKQorI2RlZmluZSBDVVJMT1BUX1VTRV9TU0wgQ1VSTE9QVF9GVFBfU1NMCisjZGVmaW5lIENVUkxVU0VTU0xfVFJZIENVUkxGVFBTU0xfVFJZCisjZW5kaWYKKworc3RydWN0IHNsb3RfcmVzdWx0cyB7CisJQ1VSTGNvZGUgY3VybF9yZXN1bHQ7CisJbG9uZyBodHRwX2NvZGU7CisJbG9uZyBhdXRoX2F2YWlsOworfTsKKworc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgeworCUNVUkwgKmN1cmw7CisJaW50IGluX3VzZTsKKwlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKKwlsb25nIGh0dHBfY29kZTsKKwlpbnQgKmZpbmlzaGVkOworCXN0cnVjdCBzbG90X3Jlc3VsdHMgKnJlc3VsdHM7CisJdm9pZCAqY2FsbGJhY2tfZGF0YTsKKwl2b2lkICgqY2FsbGJhY2tfZnVuYykodm9pZCAqZGF0YSk7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKm5leHQ7Cit9OworCitzdHJ1Y3QgYnVmZmVyIHsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZjsKKwlzaXplX3QgcG9zbjsKK307CisKKy8qIEN1cmwgcmVxdWVzdCByZWFkL3dyaXRlIGNhbGxiYWNrcyAqLworZXh0ZXJuIHNpemVfdCBmcmVhZF9idWZmZXIoY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJidWYpOworZXh0ZXJuIHNpemVfdCBmd3JpdGVfYnVmZmVyKGNoYXIgKnB0ciwgc2l6ZV90IGVsdHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCAqc3RyYnVmKTsKK2V4dGVybiBzaXplX3QgZndyaXRlX251bGwoY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkICpzdHJidWYpOworI2lmbmRlZiBOT19DVVJMX0lPQ1RMCitleHRlcm4gY3VybGlvZXJyIGlvY3RsX2J1ZmZlcihDVVJMICpoYW5kbGUsIGludCBjbWQsIHZvaWQgKmNsaWVudHApOworI2VuZGlmCisKKy8qIFNsb3QgbGlmZWN5Y2xlIGZ1bmN0aW9ucyAqLworZXh0ZXJuIHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpnZXRfYWN0aXZlX3Nsb3Qodm9pZCk7CitleHRlcm4gaW50IHN0YXJ0X2FjdGl2ZV9zbG90KHN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90KTsKK2V4dGVybiB2b2lkIHJ1bl9hY3RpdmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCk7CitleHRlcm4gdm9pZCBmaW5pc2hfYWxsX2FjdGl2ZV9zbG90cyh2b2lkKTsKKworLyoKKyAqIFRoaXMgd2lsbCBydW4gb25lIHNsb3QgdG8gY29tcGxldGlvbiBpbiBhIGJsb2NraW5nIG1hbm5lciwgc2ltaWxhciB0byBob3cKKyAqIGN1cmxfZWFzeV9wZXJmb3JtIHdvdWxkIHdvcmsgKGJ1dCB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGF0LCBiZWNhdXNlCisgKiB3ZSBkbyBub3Qgd2FudCB0byBpbnRlcm1pbmdsZSBjYWxscyB0byBjdXJsX211bHRpIGFuZCBjdXJsX2Vhc3kpLgorICoKKyAqLworaW50IHJ1bl9vbmVfc2xvdChzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdCwKKwkJIHN0cnVjdCBzbG90X3Jlc3VsdHMgKnJlc3VsdHMpOworCisjaWZkZWYgVVNFX0NVUkxfTVVMVEkKK2V4dGVybiB2b2lkIGZpbGxfYWN0aXZlX3Nsb3RzKHZvaWQpOworZXh0ZXJuIHZvaWQgYWRkX2ZpbGxfZnVuY3Rpb24odm9pZCAqZGF0YSwgaW50ICgqZmlsbCkodm9pZCAqKSk7CitleHRlcm4gdm9pZCBzdGVwX2FjdGl2ZV9zbG90cyh2b2lkKTsKKyNlbmRpZgorCitleHRlcm4gdm9pZCBodHRwX2luaXQoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwsCisJCSAgICAgIGludCBwcm9hY3RpdmVfYXV0aCk7CitleHRlcm4gdm9pZCBodHRwX2NsZWFudXAodm9pZCk7CisKK2V4dGVybiBpbnQgYWN0aXZlX3JlcXVlc3RzOworZXh0ZXJuIGludCBodHRwX2lzX3ZlcmJvc2U7CitleHRlcm4gc2l6ZV90IGh0dHBfcG9zdF9idWZmZXI7CitleHRlcm4gc3RydWN0IGNyZWRlbnRpYWwgaHR0cF9hdXRoOworCitleHRlcm4gY2hhciBjdXJsX2Vycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CisKK3N0YXRpYyBpbmxpbmUgaW50IG1pc3NpbmdfX3RhcmdldChpbnQgY29kZSwgaW50IHJlc3VsdCkKK3sKKwlyZXR1cm4JLyogZmlsZTovLyBVUkwgLS0gZG8gd2UgZXZlciB1c2Ugb25lPz8/ICovCisJCShyZXN1bHQgPT0gQ1VSTEVfRklMRV9DT1VMRE5UX1JFQURfRklMRSkgfHwKKwkJLyogaHR0cDovLyBhbmQgaHR0cHM6Ly8gVVJMICovCisJCShjb2RlID09IDQwNCAmJiByZXN1bHQgPT0gQ1VSTEVfSFRUUF9SRVRVUk5FRF9FUlJPUikgfHwKKwkJLyogZnRwOi8vIFVSTCAqLworCQkoY29kZSA9PSA1NTAgJiYgcmVzdWx0ID09IENVUkxFX0ZUUF9DT1VMRE5UX1JFVFJfRklMRSkKKwkJOworfQorCisjZGVmaW5lIG1pc3NpbmdfdGFyZ2V0KGEpIG1pc3NpbmdfX3RhcmdldCgoYSktPmh0dHBfY29kZSwgKGEpLT5jdXJsX3Jlc3VsdCkKKworLyogSGVscGVycyBmb3IgbW9kaWZ5aW5nIGFuZCBjcmVhdGluZyBVUkxzICovCitleHRlcm4gdm9pZCBhcHBlbmRfcmVtb3RlX29iamVjdF91cmwoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICp1cmwsCisJCQkJICAgICBjb25zdCBjaGFyICpoZXgsCisJCQkJICAgICBpbnQgb25seV90d29fZGlnaXRfcHJlZml4KTsKK2V4dGVybiBjaGFyICpnZXRfcmVtb3RlX29iamVjdF91cmwoY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpoZXgsCisJCQkJICAgaW50IG9ubHlfdHdvX2RpZ2l0X3ByZWZpeCk7CisKKy8qIE9wdGlvbnMgZm9yIGh0dHBfZ2V0XyooKSAqLworc3RydWN0IGh0dHBfZ2V0X29wdGlvbnMgeworCXVuc2lnbmVkIG5vX2NhY2hlOjEsCisJCSBrZWVwX2Vycm9yOjE7CisKKwkvKiBJZiBub24tTlVMTCwgcmV0dXJucyB0aGUgY29udGVudC10eXBlIG9mIHRoZSByZXNwb25zZS4gKi8KKwlzdHJ1Y3Qgc3RyYnVmICpjb250ZW50X3R5cGU7CisKKwkvKgorCSAqIElmIG5vbi1OVUxMLCBhbmQgY29udGVudF90eXBlIGFib3ZlIGlzIG5vbi1OVUxMLCByZXR1cm5zCisJICogdGhlIGNoYXJzZXQgcGFyYW1ldGVyIGZyb20gdGhlIGNvbnRlbnQtdHlwZS4gSWYgbm9uZSBpcworCSAqIHByZXNlbnQsIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorCSAqLworCXN0cnVjdCBzdHJidWYgKmNoYXJzZXQ7CisKKwkvKgorCSAqIElmIG5vbi1OVUxMLCByZXR1cm5zIHRoZSBVUkwgd2UgZW5kZWQgdXAgYXQsIGluY2x1ZGluZyBhbnkKKwkgKiByZWRpcmVjdHMgd2UgZm9sbG93ZWQuCisJICovCisJc3RydWN0IHN0cmJ1ZiAqZWZmZWN0aXZlX3VybDsKKworCS8qCisJICogSWYgYm90aCBiYXNlX3VybCBhbmQgZWZmZWN0aXZlX3VybCBhcmUgbm9uLU5VTEwsIHRoZSBiYXNlIFVSTCB3aWxsCisJICogYmUgbXVuZ2VkIHRvIHJlZmxlY3QgYW55IHJlZGlyZWN0aW9ucyBnb2luZyBmcm9tIHRoZSByZXF1ZXN0ZWQgdXJsCisJICogdG8gZWZmZWN0aXZlX3VybC4gU2VlIHRoZSBkZWZpbml0aW9uIG9mIHVwZGF0ZV91cmxfZnJvbV9yZWRpcmVjdAorCSAqIGZvciBkZXRhaWxzLgorCSAqLworCXN0cnVjdCBzdHJidWYgKmJhc2VfdXJsOworfTsKKworLyogUmV0dXJuIHZhbHVlcyBmb3IgaHR0cF9nZXRfKigpICovCisjZGVmaW5lIEhUVFBfT0sJCQkwCisjZGVmaW5lIEhUVFBfTUlTU0lOR19UQVJHRVQJMQorI2RlZmluZSBIVFRQX0VSUk9SCQkyCisjZGVmaW5lIEhUVFBfU1RBUlRfRkFJTEVECTMKKyNkZWZpbmUgSFRUUF9SRUFVVEgJNAorI2RlZmluZSBIVFRQX05PQVVUSAk1CisKKy8qCisgKiBSZXF1ZXN0cyBhIFVSTCBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gYSBzdHJidWYuCisgKgorICogSWYgdGhlIHJlc3VsdCBwb2ludGVyIGlzIE5VTEwsIGEgSFRUUCBIRUFEIHJlcXVlc3QgaXMgbWFkZSBpbnN0ZWFkIG9mIEdFVC4KKyAqLworaW50IGh0dHBfZ2V0X3N0cmJ1Zihjb25zdCBjaGFyICp1cmwsIHN0cnVjdCBzdHJidWYgKnJlc3VsdCwgc3RydWN0IGh0dHBfZ2V0X29wdGlvbnMgKm9wdGlvbnMpOworCitleHRlcm4gaW50IGh0dHBfZmV0Y2hfcmVmKGNvbnN0IGNoYXIgKmJhc2UsIHN0cnVjdCByZWYgKnJlZik7CisKKy8qIEhlbHBlcnMgZm9yIGZldGNoaW5nIHBhY2tzICovCitleHRlcm4gaW50IGh0dHBfZ2V0X2luZm9fcGFja3MoY29uc3QgY2hhciAqYmFzZV91cmwsCisJc3RydWN0IHBhY2tlZF9naXQgKipwYWNrc19oZWFkKTsKKworc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0IHsKKwljaGFyICp1cmw7CisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldDsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqKmxzdDsKKwlGSUxFICpwYWNrZmlsZTsKKwljaGFyIHRtcGZpbGVbUEFUSF9NQVhdOworCXN0cnVjdCBjdXJsX3NsaXN0ICpyYW5nZV9oZWFkZXI7CisJc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3Q7Cit9OworCitleHRlcm4gc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpuZXdfaHR0cF9wYWNrX3JlcXVlc3QoCisJc3RydWN0IHBhY2tlZF9naXQgKnRhcmdldCwgY29uc3QgY2hhciAqYmFzZV91cmwpOworZXh0ZXJuIGludCBmaW5pc2hfaHR0cF9wYWNrX3JlcXVlc3Qoc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfaHR0cF9wYWNrX3JlcXVlc3Qoc3RydWN0IGh0dHBfcGFja19yZXF1ZXN0ICpwcmVxKTsKKworLyogSGVscGVycyBmb3IgZmV0Y2hpbmcgb2JqZWN0ICovCitzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCB7CisJY2hhciAqdXJsOworCWNoYXIgdG1wZmlsZVtQQVRIX01BWF07CisJaW50IGxvY2FsZmlsZTsKKwlDVVJMY29kZSBjdXJsX3Jlc3VsdDsKKwljaGFyIGVycm9yc3RyW0NVUkxfRVJST1JfU0laRV07CisJbG9uZyBodHRwX2NvZGU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBjaGFyIHJlYWxfc2hhMVsyMF07CisJZ2l0X1NIQV9DVFggYzsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJaW50IHpyZXQ7CisJaW50IHJlbmFtZTsKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKK307CisKK2V4dGVybiBzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqbmV3X2h0dHBfb2JqZWN0X3JlcXVlc3QoCisJY29uc3QgY2hhciAqYmFzZV91cmwsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIHZvaWQgcHJvY2Vzc19odHRwX29iamVjdF9yZXF1ZXN0KHN0cnVjdCBodHRwX29iamVjdF9yZXF1ZXN0ICpmcmVxKTsKK2V4dGVybiBpbnQgZmluaXNoX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpOworZXh0ZXJuIHZvaWQgYWJvcnRfaHR0cF9vYmplY3RfcmVxdWVzdChzdHJ1Y3QgaHR0cF9vYmplY3RfcmVxdWVzdCAqZnJlcSk7CitleHRlcm4gdm9pZCByZWxlYXNlX2h0dHBfb2JqZWN0X3JlcXVlc3Qoc3RydWN0IGh0dHBfb2JqZWN0X3JlcXVlc3QgKmZyZXEpOworCisjZW5kaWYgLyogSFRUUF9IICovCmRpZmYgLS1naXQgYS9pZGVudC5jIGIvaWRlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmYxYWFkCi0tLSAvZGV2L251bGwKKysrIGIvaWRlbnQuYwpAQCAtMCwwICsxLDQ0MyBAQAorLyoKKyAqIGlkZW50LmMKKyAqCisgKiBjcmVhdGUgZ2l0IGlkZW50aWZpZXIgbGluZXMgb2YgdGhlIGZvcm0gIm5hbWUgPGVtYWlsPiBkYXRlIgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBMaW51cyBUb3J2YWxkcworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RhdGljIHN0cnVjdCBzdHJidWYgZ2l0X2RlZmF1bHRfbmFtZSA9IFNUUkJVRl9JTklUOworc3RhdGljIHN0cnVjdCBzdHJidWYgZ2l0X2RlZmF1bHRfZW1haWwgPSBTVFJCVUZfSU5JVDsKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGdpdF9kZWZhdWx0X2RhdGUgPSBTVFJCVUZfSU5JVDsKKworI2RlZmluZSBJREVOVF9OQU1FX0dJVkVOIDAxCisjZGVmaW5lIElERU5UX01BSUxfR0lWRU4gMDIKKyNkZWZpbmUgSURFTlRfQUxMX0dJVkVOIChJREVOVF9OQU1FX0dJVkVOfElERU5UX01BSUxfR0lWRU4pCitzdGF0aWMgaW50IGNvbW1pdHRlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuOworc3RhdGljIGludCBhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbjsKKworI2lmZGVmIE5PX0dFQ09TX0lOX1BXRU5UCisjZGVmaW5lIGdldF9nZWNvcyhpZ25vcmVkKSAiJiIKKyNlbHNlCisjZGVmaW5lIGdldF9nZWNvcyhzdHJ1Y3RfcGFzc3dkKSAoKHN0cnVjdF9wYXNzd2QpLT5wd19nZWNvcykKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBjb3B5X2dlY29zKGNvbnN0IHN0cnVjdCBwYXNzd2QgKncsIHN0cnVjdCBzdHJidWYgKm5hbWUpCit7CisJY2hhciAqc3JjOworCisJLyogVHJhZGl0aW9uYWxseSBHRUNPUyBmaWVsZCBoYWQgb2ZmaWNlIHBob25lIG51bWJlcnMgZXRjLCBzZXBhcmF0ZWQKKwkgKiB3aXRoIGNvbW1hcy4gIEFsc28gJiBzdGFuZHMgZm9yIGNhcGl0YWxpemVkIGZvcm0gb2YgdGhlIGxvZ2luIG5hbWUuCisJICovCisKKwlmb3IgKHNyYyA9IGdldF9nZWNvcyh3KTsgKnNyYyAmJiAqc3JjICE9ICcsJzsgc3JjKyspIHsKKwkJaW50IGNoID0gKnNyYzsKKwkJaWYgKGNoICE9ICcmJykKKwkJCXN0cmJ1Zl9hZGRjaChuYW1lLCBjaCk7CisJCWVsc2UgeworCQkJLyogU29ycnksIE1yLiBNY0RvbmFsZC4uLiAqLworCQkJc3RyYnVmX2FkZGNoKG5hbWUsIHRvdXBwZXIoKnctPnB3X25hbWUpKTsKKwkJCXN0cmJ1Zl9hZGRzdHIobmFtZSwgdy0+cHdfbmFtZSArIDEpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGFkZF9tYWlsbmFtZV9ob3N0KHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlGSUxFICptYWlsbmFtZTsKKwlzdHJ1Y3Qgc3RyYnVmIG1haWxuYW1lYnVmID0gU1RSQlVGX0lOSVQ7CisKKwltYWlsbmFtZSA9IGZvcGVuKCIvZXRjL21haWxuYW1lIiwgInIiKTsKKwlpZiAoIW1haWxuYW1lKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQl3YXJuaW5nKCJjYW5ub3Qgb3BlbiAvZXRjL21haWxuYW1lOiAlcyIsCisJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoc3RyYnVmX2dldGxpbmUoJm1haWxuYW1lYnVmLCBtYWlsbmFtZSwgJ1xuJykgPT0gRU9GKSB7CisJCWlmIChmZXJyb3IobWFpbG5hbWUpKQorCQkJd2FybmluZygiY2Fubm90IHJlYWQgL2V0Yy9tYWlsbmFtZTogJXMiLAorCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZtYWlsbmFtZWJ1Zik7CisJCWZjbG9zZShtYWlsbmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisJLyogc3VjY2VzcyEgKi8KKwlzdHJidWZfYWRkYnVmKGJ1ZiwgJm1haWxuYW1lYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmbWFpbG5hbWVidWYpOworCWZjbG9zZShtYWlsbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9kb21haW5uYW1lKHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwljaGFyIGJ1ZlsxMDI0XTsKKwlzdHJ1Y3QgaG9zdGVudCAqaGU7CisKKwlpZiAoZ2V0aG9zdG5hbWUoYnVmLCBzaXplb2YoYnVmKSkpIHsKKwkJd2FybmluZygiY2Fubm90IGdldCBob3N0IG5hbWU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJc3RyYnVmX2FkZHN0cihvdXQsICIobm9uZSkiKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoc3RyY2hyKGJ1ZiwgJy4nKSkKKwkJc3RyYnVmX2FkZHN0cihvdXQsIGJ1Zik7CisJZWxzZSBpZiAoKGhlID0gZ2V0aG9zdGJ5bmFtZShidWYpKSAmJiBzdHJjaHIoaGUtPmhfbmFtZSwgJy4nKSkKKwkJc3RyYnVmX2FkZHN0cihvdXQsIGhlLT5oX25hbWUpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYob3V0LCAiJXMuKG5vbmUpIiwgYnVmKTsKK30KKworc3RhdGljIHZvaWQgY29weV9lbWFpbChjb25zdCBzdHJ1Y3QgcGFzc3dkICpwdywgc3RydWN0IHN0cmJ1ZiAqZW1haWwpCit7CisJLyoKKwkgKiBNYWtlIHVwIGEgZmFrZSBlbWFpbCBhZGRyZXNzCisJICogKG5hbWUgKyAnQCcgKyBob3N0bmFtZSBbKyAnLicgKyBkb21haW5uYW1lXSkKKwkgKi8KKwlzdHJidWZfYWRkc3RyKGVtYWlsLCBwdy0+cHdfbmFtZSk7CisJc3RyYnVmX2FkZGNoKGVtYWlsLCAnQCcpOworCisJaWYgKCFhZGRfbWFpbG5hbWVfaG9zdChlbWFpbCkpCisJCXJldHVybjsJLyogcmVhZCBmcm9tICIvZXRjL21haWxuYW1lIiAoRGViaWFuKSAqLworCWFkZF9kb21haW5uYW1lKGVtYWlsKTsKK30KKworY29uc3QgY2hhciAqaWRlbnRfZGVmYXVsdF9uYW1lKHZvaWQpCit7CisJaWYgKCFnaXRfZGVmYXVsdF9uYW1lLmxlbikgeworCQljb3B5X2dlY29zKHhnZXRwd3VpZF9zZWxmKCksICZnaXRfZGVmYXVsdF9uYW1lKTsKKwkJc3RyYnVmX3RyaW0oJmdpdF9kZWZhdWx0X25hbWUpOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfbmFtZS5idWY7Cit9CisKK2NvbnN0IGNoYXIgKmlkZW50X2RlZmF1bHRfZW1haWwodm9pZCkKK3sKKwlpZiAoIWdpdF9kZWZhdWx0X2VtYWlsLmxlbikgeworCQljb25zdCBjaGFyICplbWFpbCA9IGdldGVudigiRU1BSUwiKTsKKworCQlpZiAoZW1haWwgJiYgZW1haWxbMF0pIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmdpdF9kZWZhdWx0X2VtYWlsLCBlbWFpbCk7CisJCQljb21taXR0ZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9NQUlMX0dJVkVOOworCQkJYXV0aG9yX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwkJfSBlbHNlCisJCQljb3B5X2VtYWlsKHhnZXRwd3VpZF9zZWxmKCksICZnaXRfZGVmYXVsdF9lbWFpbCk7CisJCXN0cmJ1Zl90cmltKCZnaXRfZGVmYXVsdF9lbWFpbCk7CisJfQorCXJldHVybiBnaXRfZGVmYXVsdF9lbWFpbC5idWY7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICppZGVudF9kZWZhdWx0X2RhdGUodm9pZCkKK3sKKwlpZiAoIWdpdF9kZWZhdWx0X2RhdGUubGVuKQorCQlkYXRlc3RhbXAoJmdpdF9kZWZhdWx0X2RhdGUpOworCXJldHVybiBnaXRfZGVmYXVsdF9kYXRlLmJ1ZjsKK30KKworc3RhdGljIGludCBjcnVkKHVuc2lnbmVkIGNoYXIgYykKK3sKKwlyZXR1cm4gIGMgPD0gMzIgIHx8CisJCWMgPT0gJy4nIHx8CisJCWMgPT0gJywnIHx8CisJCWMgPT0gJzonIHx8CisJCWMgPT0gJzsnIHx8CisJCWMgPT0gJzwnIHx8CisJCWMgPT0gJz4nIHx8CisJCWMgPT0gJyInIHx8CisJCWMgPT0gJ1xcJyB8fAorCQljID09ICdcJyc7Cit9CisKKy8qCisgKiBDb3B5IG92ZXIgYSBzdHJpbmcgdG8gdGhlIGRlc3RpbmF0aW9uLCBidXQgYXZvaWQgc3BlY2lhbAorICogY2hhcmFjdGVycyAoJ1xuJywgJzwnIGFuZCAnPicpIGFuZCByZW1vdmUgY3J1ZCBhdCB0aGUgZW5kCisgKi8KK3N0YXRpYyB2b2lkIHN0cmJ1Zl9hZGRzdHJfd2l0aG91dF9jcnVkKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzcmMpCit7CisJc2l6ZV90IGksIGxlbjsKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwkvKiBSZW1vdmUgY3J1ZCBmcm9tIHRoZSBiZWdpbm5pbmcuLiAqLworCXdoaWxlICgoYyA9ICpzcmMpICE9IDApIHsKKwkJaWYgKCFjcnVkKGMpKQorCQkJYnJlYWs7CisJCXNyYysrOworCX0KKworCS8qIFJlbW92ZSBjcnVkIGZyb20gdGhlIGVuZC4uICovCisJbGVuID0gc3RybGVuKHNyYyk7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJYyA9IHNyY1tsZW4tMV07CisJCWlmICghY3J1ZChjKSkKKwkJCWJyZWFrOworCQktLWxlbjsKKwl9CisKKwkvKgorCSAqIENvcHkgdGhlIHJlc3QgdG8gdGhlIGJ1ZmZlciwgYnV0IGF2b2lkIHRoZSBzcGVjaWFsCisJICogY2hhcmFjdGVycyAnXG4nICc8JyBhbmQgJz4nIHRoYXQgYWN0IGFzIGRlbGltaXRlcnMgb24KKwkgKiBhbiBpZGVudGlmaWNhdGlvbiBsaW5lLiBXZSBjYW4gb25seSByZW1vdmUgY3J1ZCwgbmV2ZXIgYWRkIGl0LAorCSAqIHNvICdsZW4nIGlzIG91ciBtYXhpbXVtLgorCSAqLworCXN0cmJ1Zl9ncm93KHNiLCBsZW4pOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQljID0gKnNyYysrOworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnXG4nOiBjYXNlICc8JzogY2FzZSAnPic6CisJCQljb250aW51ZTsKKwkJfQorCQlzYi0+YnVmW3NiLT5sZW4rK10gPSBjOworCX0KKwlzYi0+YnVmW3NiLT5sZW5dID0gJ1wwJzsKK30KKworLyoKKyAqIFJldmVyc2Ugb2YgZm10X2lkZW50KCk7IGdpdmVuIGFuIGlkZW50IGxpbmUsIHNwbGl0IHRoZSBmaWVsZHMKKyAqIHRvIGFsbG93IHRoZSBjYWxsZXIgdG8gcGFyc2UgaXQuCisgKiBTaWduYWwgYSBzdWNjZXNzIGJ5IHJldHVybmluZyAwLCBidXQgZGF0ZS90eiBmaWVsZHMgb2YgdGhlIHJlc3VsdAorICogY2FuIHN0aWxsIGJlIE5VTEwgaWYgdGhlIGlucHV0IGxpbmUgb25seSBoYXMgdGhlIG5hbWUvZW1haWwgcGFydAorICogKGUuZy4gcmVhZGluZyBmcm9tIGEgcmVmbG9nIGVudHJ5KS4KKyAqLworaW50IHNwbGl0X2lkZW50X2xpbmUoc3RydWN0IGlkZW50X3NwbGl0ICpzcGxpdCwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbikKK3sKKwljb25zdCBjaGFyICpjcDsKKwlzaXplX3Qgc3BhbjsKKwlpbnQgc3RhdHVzID0gLTE7CisKKwltZW1zZXQoc3BsaXQsIDAsIHNpemVvZigqc3BsaXQpKTsKKworCXNwbGl0LT5uYW1lX2JlZ2luID0gbGluZTsKKwlmb3IgKGNwID0gbGluZTsgKmNwICYmIGNwIDwgbGluZSArIGxlbjsgY3ArKykKKwkJaWYgKCpjcCA9PSAnPCcpIHsKKwkJCXNwbGl0LT5tYWlsX2JlZ2luID0gY3AgKyAxOworCQkJYnJlYWs7CisJCX0KKwlpZiAoIXNwbGl0LT5tYWlsX2JlZ2luKQorCQlyZXR1cm4gc3RhdHVzOworCisJZm9yIChjcCA9IHNwbGl0LT5tYWlsX2JlZ2luIC0gMjsgbGluZSA8PSBjcDsgY3AtLSkKKwkJaWYgKCFpc3NwYWNlKCpjcCkpIHsKKwkJCXNwbGl0LT5uYW1lX2VuZCA9IGNwICsgMTsKKwkJCWJyZWFrOworCQl9CisJaWYgKCFzcGxpdC0+bmFtZV9lbmQpIHsKKwkJLyogbm8gaHVtYW4gcmVhZGFibGUgbmFtZSAqLworCQlzcGxpdC0+bmFtZV9lbmQgPSBzcGxpdC0+bmFtZV9iZWdpbjsKKwl9CisKKwlmb3IgKGNwID0gc3BsaXQtPm1haWxfYmVnaW47IGNwIDwgbGluZSArIGxlbjsgY3ArKykKKwkJaWYgKCpjcCA9PSAnPicpIHsKKwkJCXNwbGl0LT5tYWlsX2VuZCA9IGNwOworCQkJYnJlYWs7CisJCX0KKwlpZiAoIXNwbGl0LT5tYWlsX2VuZCkKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qCisJICogTG9vayBmcm9tIHRoZSBlbmQtb2YtbGluZSB0byBmaW5kIHRoZSB0cmFpbGluZyAiPiIgb2YgdGhlIG1haWwKKwkgKiBhZGRyZXNzLCBldmVuIHRob3VnaCB3ZSBzaG91bGQgYWxyZWFkeSBrbm93IGl0IGFzIHNwbGl0LT5tYWlsX2VuZC4KKwkgKiBUaGlzIGNhbiBoZWxwIGluIGNhc2VzIG9mIGJyb2tlbiBpZGVudHMgd2l0aCBhbiBleHRyYSAiPiIgc29tZXdoZXJlCisJICogaW4gdGhlIGVtYWlsIGFkZHJlc3MuICBOb3RlIHRoYXQgd2UgYXJlIGFzc3VtaW5nIHRoZSB0aW1lc3RhbXAgd2lsbAorCSAqIG5ldmVyIGhhdmUgYSAiPiIgaW4gaXQuCisJICoKKwkgKiBOb3RlIHRoYXQgd2Ugd2lsbCBhbHdheXMgZmluZCBzb21lICI+IiBiZWZvcmUgZ29pbmcgb2ZmIHRoZSBmcm9udCBvZgorCSAqIHRoZSBzdHJpbmcsIGJlY2F1c2Ugd2lsbCBhbHdheXMgaGl0IHRoZSBzcGxpdC0+bWFpbF9lbmQgY2xvc2luZworCSAqIGJyYWNrZXQuCisJICovCisJZm9yIChjcCA9IGxpbmUgKyBsZW4gLSAxOyAqY3AgIT0gJz4nOyBjcC0tKQorCQk7CisKKwlmb3IgKGNwID0gY3AgKyAxOyBjcCA8IGxpbmUgKyBsZW4gJiYgaXNzcGFjZSgqY3ApOyBjcCsrKQorCQk7CisJaWYgKGxpbmUgKyBsZW4gPD0gY3ApCisJCWdvdG8gcGVyc29uX29ubHk7CisJc3BsaXQtPmRhdGVfYmVnaW4gPSBjcDsKKwlzcGFuID0gc3Ryc3BuKGNwLCAiMDEyMzQ1Njc4OSIpOworCWlmICghc3BhbikKKwkJZ290byBwZXJzb25fb25seTsKKwlzcGxpdC0+ZGF0ZV9lbmQgPSBzcGxpdC0+ZGF0ZV9iZWdpbiArIHNwYW47CisJZm9yIChjcCA9IHNwbGl0LT5kYXRlX2VuZDsgY3AgPCBsaW5lICsgbGVuICYmIGlzc3BhY2UoKmNwKTsgY3ArKykKKwkJOworCWlmIChsaW5lICsgbGVuIDw9IGNwIHx8ICgqY3AgIT0gJysnICYmICpjcCAhPSAnLScpKQorCQlnb3RvIHBlcnNvbl9vbmx5OworCXNwbGl0LT50el9iZWdpbiA9IGNwOworCXNwYW4gPSBzdHJzcG4oY3AgKyAxLCAiMDEyMzQ1Njc4OSIpOworCWlmICghc3BhbikKKwkJZ290byBwZXJzb25fb25seTsKKwlzcGxpdC0+dHpfZW5kID0gc3BsaXQtPnR6X2JlZ2luICsgMSArIHNwYW47CisJcmV0dXJuIDA7CisKK3BlcnNvbl9vbmx5OgorCXNwbGl0LT5kYXRlX2JlZ2luID0gTlVMTDsKKwlzcGxpdC0+ZGF0ZV9lbmQgPSBOVUxMOworCXNwbGl0LT50el9iZWdpbiA9IE5VTEw7CisJc3BsaXQtPnR6X2VuZCA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICplbnZfaGludCA9CisiXG4iCisiKioqIFBsZWFzZSB0ZWxsIG1lIHdobyB5b3UgYXJlLlxuIgorIlxuIgorIlJ1blxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIFwieW91QGV4YW1wbGUuY29tXCJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyJcbiIKKyJ0byBzZXQgeW91ciBhY2NvdW50XCdzIGRlZmF1bHQgaWRlbnRpdHkuXG4iCisiT21pdCAtLWdsb2JhbCB0byBzZXQgdGhlIGlkZW50aXR5IG9ubHkgaW4gdGhpcyByZXBvc2l0b3J5LlxuIgorIlxuIjsKKworY29uc3QgY2hhciAqZm10X2lkZW50KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmVtYWlsLAorCQkgICAgICBjb25zdCBjaGFyICpkYXRlX3N0ciwgaW50IGZsYWcpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgaWRlbnQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc3RyaWN0ID0gKGZsYWcgJiBJREVOVF9TVFJJQ1QpOworCWludCB3YW50X2RhdGUgPSAhKGZsYWcgJiBJREVOVF9OT19EQVRFKTsKKwlpbnQgd2FudF9uYW1lID0gIShmbGFnICYgSURFTlRfTk9fTkFNRSk7CisKKwlpZiAod2FudF9uYW1lICYmICFuYW1lKQorCQluYW1lID0gaWRlbnRfZGVmYXVsdF9uYW1lKCk7CisJaWYgKCFlbWFpbCkKKwkJZW1haWwgPSBpZGVudF9kZWZhdWx0X2VtYWlsKCk7CisKKwlpZiAod2FudF9uYW1lICYmICEqbmFtZSkgeworCQlzdHJ1Y3QgcGFzc3dkICpwdzsKKworCQlpZiAoc3RyaWN0KSB7CisJCQlpZiAobmFtZSA9PSBnaXRfZGVmYXVsdF9uYW1lLmJ1ZikKKwkJCQlmcHV0cyhlbnZfaGludCwgc3RkZXJyKTsKKwkJCWRpZSgiZW1wdHkgaWRlbnQgbmFtZSAoZm9yIDwlcz4pIG5vdCBhbGxvd2VkIiwgZW1haWwpOworCQl9CisJCXB3ID0geGdldHB3dWlkX3NlbGYoKTsKKwkJbmFtZSA9IHB3LT5wd19uYW1lOworCX0KKworCWlmIChzdHJpY3QgJiYgZW1haWwgPT0gZ2l0X2RlZmF1bHRfZW1haWwuYnVmICYmCisJICAgIHN0cnN0cihlbWFpbCwgIihub25lKSIpKSB7CisJCWZwdXRzKGVudl9oaW50LCBzdGRlcnIpOworCQlkaWUoInVuYWJsZSB0byBhdXRvLWRldGVjdCBlbWFpbCBhZGRyZXNzIChnb3QgJyVzJykiLCBlbWFpbCk7CisJfQorCisJc3RyYnVmX3Jlc2V0KCZpZGVudCk7CisJaWYgKHdhbnRfbmFtZSkgeworCQlzdHJidWZfYWRkc3RyX3dpdGhvdXRfY3J1ZCgmaWRlbnQsIG5hbWUpOworCQlzdHJidWZfYWRkc3RyKCZpZGVudCwgIiA8Iik7CisJfQorCXN0cmJ1Zl9hZGRzdHJfd2l0aG91dF9jcnVkKCZpZGVudCwgZW1haWwpOworCWlmICh3YW50X25hbWUpCisJCQlzdHJidWZfYWRkY2goJmlkZW50LCAnPicpOworCWlmICh3YW50X2RhdGUpIHsKKwkJc3RyYnVmX2FkZGNoKCZpZGVudCwgJyAnKTsKKwkJaWYgKGRhdGVfc3RyICYmIGRhdGVfc3RyWzBdKSB7CisJCQlpZiAocGFyc2VfZGF0ZShkYXRlX3N0ciwgJmlkZW50KSA8IDApCisJCQkJZGllKCJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIsIGRhdGVfc3RyKTsKKwkJfQorCQllbHNlCisJCQlzdHJidWZfYWRkc3RyKCZpZGVudCwgaWRlbnRfZGVmYXVsdF9kYXRlKCkpOworCX0KKworCXJldHVybiBpZGVudC5idWY7Cit9CisKK2NvbnN0IGNoYXIgKmZtdF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmVtYWlsKQoreworCXJldHVybiBmbXRfaWRlbnQobmFtZSwgZW1haWwsIE5VTEwsIElERU5UX1NUUklDVCB8IElERU5UX05PX0RBVEUpOworfQorCitjb25zdCBjaGFyICpnaXRfYXV0aG9yX2luZm8oaW50IGZsYWcpCit7CisJaWYgKGdldGVudigiR0lUX0FVVEhPUl9OQU1FIikpCisJCWF1dGhvcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX05BTUVfR0lWRU47CisJaWYgKGdldGVudigiR0lUX0FVVEhPUl9FTUFJTCIpKQorCQlhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9NQUlMX0dJVkVOOworCXJldHVybiBmbXRfaWRlbnQoZ2V0ZW52KCJHSVRfQVVUSE9SX05BTUUiKSwKKwkJCSBnZXRlbnYoIkdJVF9BVVRIT1JfRU1BSUwiKSwKKwkJCSBnZXRlbnYoIkdJVF9BVVRIT1JfREFURSIpLAorCQkJIGZsYWcpOworfQorCitjb25zdCBjaGFyICpnaXRfY29tbWl0dGVyX2luZm8oaW50IGZsYWcpCit7CisJaWYgKGdldGVudigiR0lUX0NPTU1JVFRFUl9OQU1FIikpCisJCWNvbW1pdHRlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuIHw9IElERU5UX05BTUVfR0lWRU47CisJaWYgKGdldGVudigiR0lUX0NPTU1JVFRFUl9FTUFJTCIpKQorCQljb21taXR0ZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9NQUlMX0dJVkVOOworCXJldHVybiBmbXRfaWRlbnQoZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX05BTUUiKSwKKwkJCSBnZXRlbnYoIkdJVF9DT01NSVRURVJfRU1BSUwiKSwKKwkJCSBnZXRlbnYoIkdJVF9DT01NSVRURVJfREFURSIpLAorCQkJIGZsYWcpOworfQorCitzdGF0aWMgaW50IGlkZW50X2lzX3N1ZmZpY2llbnQoaW50IHVzZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbikKK3sKKyNpZm5kZWYgV0lORE9XUworCXJldHVybiAodXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuICYgSURFTlRfTUFJTF9HSVZFTik7CisjZWxzZQorCXJldHVybiAodXNlcl9pZGVudF9leHBsaWNpdGx5X2dpdmVuID09IElERU5UX0FMTF9HSVZFTik7CisjZW5kaWYKK30KKworaW50IGNvbW1pdHRlcl9pZGVudF9zdWZmaWNpZW50bHlfZ2l2ZW4odm9pZCkKK3sKKwlyZXR1cm4gaWRlbnRfaXNfc3VmZmljaWVudChjb21taXR0ZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbik7Cit9CisKK2ludCBhdXRob3JfaWRlbnRfc3VmZmljaWVudGx5X2dpdmVuKHZvaWQpCit7CisJcmV0dXJuIGlkZW50X2lzX3N1ZmZpY2llbnQoYXV0aG9yX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4pOworfQorCitpbnQgZ2l0X2lkZW50X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpkYXRhKQoreworCWlmICghc3RyY21wKHZhciwgInVzZXIubmFtZSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwkJc3RyYnVmX3Jlc2V0KCZnaXRfZGVmYXVsdF9uYW1lKTsKKwkJc3RyYnVmX2FkZHN0cigmZ2l0X2RlZmF1bHRfbmFtZSwgdmFsdWUpOworCQljb21taXR0ZXJfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9OQU1FX0dJVkVOOworCQlhdXRob3JfaWRlbnRfZXhwbGljaXRseV9naXZlbiB8PSBJREVOVF9OQU1FX0dJVkVOOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXN0cmNtcCh2YXIsICJ1c2VyLmVtYWlsIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlzdHJidWZfcmVzZXQoJmdpdF9kZWZhdWx0X2VtYWlsKTsKKwkJc3RyYnVmX2FkZHN0cigmZ2l0X2RlZmF1bHRfZW1haWwsIHZhbHVlKTsKKwkJY29tbWl0dGVyX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwkJYXV0aG9yX2lkZW50X2V4cGxpY2l0bHlfZ2l2ZW4gfD0gSURFTlRfTUFJTF9HSVZFTjsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnVmX2NtcChjb25zdCBjaGFyICphX2JlZ2luLCBjb25zdCBjaGFyICphX2VuZCwKKwkJICAgY29uc3QgY2hhciAqYl9iZWdpbiwgY29uc3QgY2hhciAqYl9lbmQpCit7CisJaW50IGFfbGVuID0gYV9lbmQgLSBhX2JlZ2luOworCWludCBiX2xlbiA9IGJfZW5kIC0gYl9iZWdpbjsKKwlpbnQgbWluID0gYV9sZW4gPCBiX2xlbiA/IGFfbGVuIDogYl9sZW47CisJaW50IGNtcDsKKworCWNtcCA9IG1lbWNtcChhX2JlZ2luLCBiX2JlZ2luLCBtaW4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisKKwlyZXR1cm4gYV9sZW4gLSBiX2xlbjsKK30KKworaW50IGlkZW50X2NtcChjb25zdCBzdHJ1Y3QgaWRlbnRfc3BsaXQgKmEsCisJICAgICAgY29uc3Qgc3RydWN0IGlkZW50X3NwbGl0ICpiKQoreworCWludCBjbXA7CisKKwljbXAgPSBidWZfY21wKGEtPm1haWxfYmVnaW4sIGEtPm1haWxfZW5kLAorCQkgICAgICBiLT5tYWlsX2JlZ2luLCBiLT5tYWlsX2VuZCk7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKworCXJldHVybiBidWZfY21wKGEtPm5hbWVfYmVnaW4sIGEtPm5hbWVfZW5kLAorCQkgICAgICAgYi0+bmFtZV9iZWdpbiwgYi0+bmFtZV9lbmQpOworfQpkaWZmIC0tZ2l0IGEvaW1hcC1zZW5kLmMgYi9pbWFwLXNlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWZhYWVhCi0tLSAvZGV2L251bGwKKysrIGIvaW1hcC1zZW5kLmMKQEAgLTAsMCArMSwxNTY3IEBACisvKgorICogZ2l0LWltYXAtc2VuZCAtIGRyb3BzIHBhdGNoZXMgaW50byBhbiBpbWFwIERyYWZ0cyBmb2xkZXIKKyAqICAgICAgICAgICAgICAgICBkZXJpdmVkIGZyb20gaXN5bmMvbWJzeW5jIC0gbWFpbGJveCBzeW5jaHJvbml6ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBNaWNoYWVsIFIuIEVsa2lucyA8bWVAbXV0dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCBPc3dhbGQgQnVkZGVuaGFnZW4gPG9zc2lAdXNlcnMuc2YubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlrZSBNY0Nvcm1hY2sKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjcmVkZW50aWFsLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBhcnNlLW9wdGlvbnMuaCIKKyNpZmRlZiBOT19PUEVOU1NMCit0eXBlZGVmIHZvaWQgKlNTTDsKKyNlbmRpZgorI2lmZGVmIFVTRV9DVVJMX0ZPUl9JTUFQX1NFTkQKKyNpbmNsdWRlICJodHRwLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoVVNFX0NVUkxfRk9SX0lNQVBfU0VORCkgJiYgZGVmaW5lZChOT19PUEVOU1NMKQorLyogb25seSBhdmFpbGFibGUgb3B0aW9uICovCisjZGVmaW5lIFVTRV9DVVJMX0RFRkFVTFQgMQorI2Vsc2UKKy8qIHN0cmljdGx5IG9wdCBpbiAqLworI2RlZmluZSBVU0VfQ1VSTF9ERUZBVUxUIDAKKyNlbmRpZgorCitzdGF0aWMgaW50IHZlcmJvc2l0eTsKK3N0YXRpYyBpbnQgdXNlX2N1cmwgPSBVU0VfQ1VSTF9ERUZBVUxUOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGltYXBfc2VuZF91c2FnZVtdID0geyAiZ2l0IGltYXAtc2VuZCBbLXZdIFstcV0gWy0tW25vLV1jdXJsXSA8IDxtYm94PiIsIE5VTEwgfTsKKworc3RhdGljIHN0cnVjdCBvcHRpb24gaW1hcF9zZW5kX29wdGlvbnNbXSA9IHsKKwlPUFRfX1ZFUkJPU0lUWSgmdmVyYm9zaXR5KSwKKwlPUFRfQk9PTCgwLCAiY3VybCIsICZ1c2VfY3VybCwgInVzZSBsaWJjdXJsIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIElNQVAgc2VydmVyIiksCisJT1BUX0VORCgpCit9OworCisjdW5kZWYgRFJWX09LCisjZGVmaW5lIERSVl9PSyAgICAgICAgICAwCisjZGVmaW5lIERSVl9NU0dfQkFEICAgICAtMQorI2RlZmluZSBEUlZfQk9YX0JBRCAgICAgLTIKKyNkZWZpbmUgRFJWX1NUT1JFX0JBRCAgIC0zCisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitzdGF0aWMgdm9pZCBpbWFwX2luZm8oY29uc3QgY2hhciAqLCAuLi4pOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3N0YXRpYyB2b2lkIGltYXBfd2Fybihjb25zdCBjaGFyICosIC4uLik7CisKK3N0YXRpYyBjaGFyICpuZXh0X2FyZyhjaGFyICoqKTsKKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSkKK3N0YXRpYyBpbnQgbmZzbnByaW50ZihjaGFyICpidWYsIGludCBibGVuLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKK3N0YXRpYyBpbnQgbmZ2YXNwcmludGYoY2hhciAqKnN0cnAsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlpbnQgbGVuOworCWNoYXIgdG1wWzgxOTJdOworCisJbGVuID0gdnNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksIGZtdCwgYXApOworCWlmIChsZW4gPCAwKQorCQlkaWUoIkZhdGFsOiBPdXQgb2YgbWVtb3J5Iik7CisJaWYgKGxlbiA+PSBzaXplb2YodG1wKSkKKwkJZGllKCJpbWFwIGNvbW1hbmQgb3ZlcmZsb3chIik7CisJKnN0cnAgPSB4bWVtZHVweih0bXAsIGxlbik7CisJcmV0dXJuIGxlbjsKK30KKworc3RydWN0IGltYXBfc2VydmVyX2NvbmYgeworCWNoYXIgKm5hbWU7CisJY2hhciAqdHVubmVsOworCWNoYXIgKmhvc3Q7CisJaW50IHBvcnQ7CisJY2hhciAqZm9sZGVyOworCWNoYXIgKnVzZXI7CisJY2hhciAqcGFzczsKKwlpbnQgdXNlX3NzbDsKKwlpbnQgc3NsX3ZlcmlmeTsKKwlpbnQgdXNlX2h0bWw7CisJY2hhciAqYXV0aF9tZXRob2Q7Cit9OworCitzdGF0aWMgc3RydWN0IGltYXBfc2VydmVyX2NvbmYgc2VydmVyID0geworCU5VTEwsCS8qIG5hbWUgKi8KKwlOVUxMLAkvKiB0dW5uZWwgKi8KKwlOVUxMLAkvKiBob3N0ICovCisJMCwJLyogcG9ydCAqLworCU5VTEwsCS8qIGZvbGRlciAqLworCU5VTEwsCS8qIHVzZXIgKi8KKwlOVUxMLAkvKiBwYXNzICovCisJMCwgICAJLyogdXNlX3NzbCAqLworCTEsICAgCS8qIHNzbF92ZXJpZnkgKi8KKwkwLCAgIAkvKiB1c2VfaHRtbCAqLworCU5VTEwsCS8qIGF1dGhfbWV0aG9kICovCit9OworCitzdHJ1Y3QgaW1hcF9zb2NrZXQgeworCWludCBmZFsyXTsKKwlTU0wgKnNzbDsKK307CisKK3N0cnVjdCBpbWFwX2J1ZmZlciB7CisJc3RydWN0IGltYXBfc29ja2V0IHNvY2s7CisJaW50IGJ5dGVzOworCWludCBvZmZzZXQ7CisJY2hhciBidWZbMTAyNF07Cit9OworCitzdHJ1Y3QgaW1hcF9jbWQ7CisKK3N0cnVjdCBpbWFwIHsKKwlpbnQgdWlkbmV4dDsgLyogZnJvbSBTRUxFQ1QgcmVzcG9uc2VzICovCisJdW5zaWduZWQgY2FwcywgcmNhcHM7IC8qIENBUEFCSUxJVFkgcmVzdWx0cyAqLworCS8qIGNvbW1hbmQgcXVldWUgKi8KKwlpbnQgbmV4dHRhZywgbnVtX2luX3Byb2dyZXNzLCBsaXRlcmFsX3BlbmRpbmc7CisJc3RydWN0IGltYXBfY21kICppbl9wcm9ncmVzcywgKippbl9wcm9ncmVzc19hcHBlbmQ7CisJc3RydWN0IGltYXBfYnVmZmVyIGJ1ZjsgLyogdGhpcyBpcyBCSUcsIHNvIHB1dCBpdCBsYXN0ICovCit9OworCitzdHJ1Y3QgaW1hcF9zdG9yZSB7CisJLyogY3VycmVudGx5IG9wZW4gbWFpbGJveCAqLworCWNvbnN0IGNoYXIgKm5hbWU7IC8qIGZvcmVpZ24hIG1heWJlIHByZXNldD8gKi8KKwlpbnQgdWlkdmFsaWRpdHk7CisJc3RydWN0IGltYXAgKmltYXA7CisJY29uc3QgY2hhciAqcHJlZml4OworfTsKKworc3RydWN0IGltYXBfY21kX2NiIHsKKwlpbnQgKCpjb250KShzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3QgaW1hcF9jbWQgKmNtZCwgY29uc3QgY2hhciAqcHJvbXB0KTsKKwl2b2lkICgqZG9uZSkoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kICpjbWQsIGludCByZXNwb25zZSk7CisJdm9pZCAqY3R4OworCWNoYXIgKmRhdGE7CisJaW50IGRsZW47CisJaW50IHVpZDsKK307CisKK3N0cnVjdCBpbWFwX2NtZCB7CisJc3RydWN0IGltYXBfY21kICpuZXh0OworCXN0cnVjdCBpbWFwX2NtZF9jYiBjYjsKKwljaGFyICpjbWQ7CisJaW50IHRhZzsKK307CisKKyNkZWZpbmUgQ0FQKGNhcCkgKGltYXAtPmNhcHMgJiAoMSA8PCAoY2FwKSkpCisKK2VudW0gQ0FQQUJJTElUWSB7CisJTk9MT0dJTiA9IDAsCisJVUlEUExVUywKKwlMSVRFUkFMUExVUywKKwlOQU1FU1BBQ0UsCisJU1RBUlRUTFMsCisJQVVUSF9DUkFNX01ENQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmNhcF9saXN0W10gPSB7CisJIkxPR0lORElTQUJMRUQiLAorCSJVSURQTFVTIiwKKwkiTElURVJBTCsiLAorCSJOQU1FU1BBQ0UiLAorCSJTVEFSVFRMUyIsCisJIkFVVEg9Q1JBTS1NRDUiLAorfTsKKworI2RlZmluZSBSRVNQX09LICAgIDAKKyNkZWZpbmUgUkVTUF9OTyAgICAxCisjZGVmaW5lIFJFU1BfQkFEICAgMgorCitzdGF0aWMgaW50IGdldF9jbWRfcmVzdWx0KHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsIHN0cnVjdCBpbWFwX2NtZCAqdGNtZCk7CisKKworI2lmbmRlZiBOT19PUEVOU1NMCitzdGF0aWMgdm9pZCBzc2xfc29ja2V0X3BlcnJvcihjb25zdCBjaGFyICpmdW5jKQoreworCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBmdW5jLCBFUlJfZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSwgTlVMTCkpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIHNvY2tldF9wZXJyb3IoY29uc3QgY2hhciAqZnVuYywgc3RydWN0IGltYXBfc29ja2V0ICpzb2NrLCBpbnQgcmV0KQoreworI2lmbmRlZiBOT19PUEVOU1NMCisJaWYgKHNvY2stPnNzbCkgeworCQlpbnQgc3NsZXJyID0gU1NMX2dldF9lcnJvcihzb2NrLT5zc2wsIHJldCk7CisJCXN3aXRjaCAoc3NsZXJyKSB7CisJCWNhc2UgU1NMX0VSUk9SX05PTkU6CisJCQlicmVhazsKKwkJY2FzZSBTU0xfRVJST1JfU1lTQ0FMTDoKKwkJCXBlcnJvcigiU1NMX2Nvbm5lY3QiKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3NsX3NvY2tldF9wZXJyb3IoIlNTTF9jb25uZWN0Iik7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZQorI2VuZGlmCisJeworCQlpZiAocmV0IDwgMCkKKwkJCXBlcnJvcihmdW5jKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRlcnIsICIlczogdW5leHBlY3RlZCBFT0ZcbiIsIGZ1bmMpOworCX0KK30KKworI2lmZGVmIE5PX09QRU5TU0wKK3N0YXRpYyBpbnQgc3NsX3NvY2tldF9jb25uZWN0KHN0cnVjdCBpbWFwX3NvY2tldCAqc29jaywgaW50IHVzZV90bHNfb25seSwgaW50IHZlcmlmeSkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlNTTCByZXF1ZXN0ZWQgYnV0IFNTTCBzdXBwb3J0IG5vdCBjb21waWxlZCBpblxuIik7CisJcmV0dXJuIC0xOworfQorCisjZWxzZQorCitzdGF0aWMgaW50IGhvc3RfbWF0Y2hlcyhjb25zdCBjaGFyICpob3N0LCBjb25zdCBjaGFyICpwYXR0ZXJuKQoreworCWlmIChwYXR0ZXJuWzBdID09ICcqJyAmJiBwYXR0ZXJuWzFdID09ICcuJykgeworCQlwYXR0ZXJuICs9IDI7CisJCWlmICghKGhvc3QgPSBzdHJjaHIoaG9zdCwgJy4nKSkpCisJCQlyZXR1cm4gMDsKKwkJaG9zdCsrOworCX0KKworCXJldHVybiAqaG9zdCAmJiAqcGF0dGVybiAmJiAhc3RyY2FzZWNtcChob3N0LCBwYXR0ZXJuKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfaG9zdG5hbWUoWDUwOSAqY2VydCwgY29uc3QgY2hhciAqaG9zdG5hbWUpCit7CisJaW50IGxlbjsKKwlYNTA5X05BTUUgKnN1Ymo7CisJY2hhciBjbmFtZVsxMDAwXTsKKwlpbnQgaSwgZm91bmQ7CisJU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSAqc3Vial9hbHRfbmFtZXM7CisKKwkvKiB0cnkgdGhlIEROUyBzdWJqZWN0QWx0TmFtZXMgKi8KKwlmb3VuZCA9IDA7CisJaWYgKChzdWJqX2FsdF9uYW1lcyA9IFg1MDlfZ2V0X2V4dF9kMmkoY2VydCwgTklEX3N1YmplY3RfYWx0X25hbWUsIE5VTEwsIE5VTEwpKSkgeworCQlpbnQgbnVtX3N1YmpfYWx0X25hbWVzID0gc2tfR0VORVJBTF9OQU1FX251bShzdWJqX2FsdF9uYW1lcyk7CisJCWZvciAoaSA9IDA7ICFmb3VuZCAmJiBpIDwgbnVtX3N1YmpfYWx0X25hbWVzOyBpKyspIHsKKwkJCUdFTkVSQUxfTkFNRSAqc3Vial9hbHRfbmFtZSA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZShzdWJqX2FsdF9uYW1lcywgaSk7CisJCQlpZiAoc3Vial9hbHRfbmFtZS0+dHlwZSA9PSBHRU5fRE5TICYmCisJCQkgICAgc3RybGVuKChjb25zdCBjaGFyICopc3Vial9hbHRfbmFtZS0+ZC5pYTUtPmRhdGEpID09IChzaXplX3Qpc3Vial9hbHRfbmFtZS0+ZC5pYTUtPmxlbmd0aCAmJgorCQkJICAgIGhvc3RfbWF0Y2hlcyhob3N0bmFtZSwgKGNvbnN0IGNoYXIgKikoc3Vial9hbHRfbmFtZS0+ZC5pYTUtPmRhdGEpKSkKKwkJCQlmb3VuZCA9IDE7CisJCX0KKwkJc2tfR0VORVJBTF9OQU1FX3BvcF9mcmVlKHN1YmpfYWx0X25hbWVzLCBHRU5FUkFMX05BTUVfZnJlZSk7CisJfQorCWlmIChmb3VuZCkKKwkJcmV0dXJuIDA7CisKKwkvKiB0cnkgdGhlIGNvbW1vbiBuYW1lICovCisJaWYgKCEoc3ViaiA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZShjZXJ0KSkpCisJCXJldHVybiBlcnJvcigiY2Fubm90IGdldCBjZXJ0aWZpY2F0ZSBzdWJqZWN0Iik7CisJaWYgKChsZW4gPSBYNTA5X05BTUVfZ2V0X3RleHRfYnlfTklEKHN1YmosIE5JRF9jb21tb25OYW1lLCBjbmFtZSwgc2l6ZW9mKGNuYW1lKSkpIDwgMCkKKwkJcmV0dXJuIGVycm9yKCJjYW5ub3QgZ2V0IGNlcnRpZmljYXRlIGNvbW1vbiBuYW1lIik7CisJaWYgKHN0cmxlbihjbmFtZSkgPT0gKHNpemVfdClsZW4gJiYgaG9zdF9tYXRjaGVzKGhvc3RuYW1lLCBjbmFtZSkpCisJCXJldHVybiAwOworCXJldHVybiBlcnJvcigiY2VydGlmaWNhdGUgb3duZXIgJyVzJyBkb2VzIG5vdCBtYXRjaCBob3N0bmFtZSAnJXMnIiwKKwkJICAgICBjbmFtZSwgaG9zdG5hbWUpOworfQorCitzdGF0aWMgaW50IHNzbF9zb2NrZXRfY29ubmVjdChzdHJ1Y3QgaW1hcF9zb2NrZXQgKnNvY2ssIGludCB1c2VfdGxzX29ubHksIGludCB2ZXJpZnkpCit7CisjaWYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMDAwMEwpCisJY29uc3QgU1NMX01FVEhPRCAqbWV0aDsKKyNlbHNlCisJU1NMX01FVEhPRCAqbWV0aDsKKyNlbmRpZgorCVNTTF9DVFggKmN0eDsKKwlpbnQgcmV0OworCVg1MDkgKmNlcnQ7CisKKwlTU0xfbGlicmFyeV9pbml0KCk7CisJU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncygpOworCisJaWYgKHVzZV90bHNfb25seSkKKwkJbWV0aCA9IFRMU3YxX21ldGhvZCgpOworCWVsc2UKKwkJbWV0aCA9IFNTTHYyM19tZXRob2QoKTsKKworCWlmICghbWV0aCkgeworCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMdjIzX21ldGhvZCIpOworCQlyZXR1cm4gLTE7CisJfQorCisJY3R4ID0gU1NMX0NUWF9uZXcobWV0aCk7CisKKwlpZiAodmVyaWZ5KQorCQlTU0xfQ1RYX3NldF92ZXJpZnkoY3R4LCBTU0xfVkVSSUZZX1BFRVIsIE5VTEwpOworCisJaWYgKCFTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhjdHgpKSB7CisJCXNzbF9zb2NrZXRfcGVycm9yKCJTU0xfQ1RYX3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyIpOworCQlyZXR1cm4gLTE7CisJfQorCXNvY2stPnNzbCA9IFNTTF9uZXcoY3R4KTsKKwlpZiAoIXNvY2stPnNzbCkgeworCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMX25ldyIpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghU1NMX3NldF9yZmQoc29jay0+c3NsLCBzb2NrLT5mZFswXSkpIHsKKwkJc3NsX3NvY2tldF9wZXJyb3IoIlNTTF9zZXRfcmZkIik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFTU0xfc2V0X3dmZChzb2NrLT5zc2wsIHNvY2stPmZkWzFdKSkgeworCQlzc2xfc29ja2V0X3BlcnJvcigiU1NMX3NldF93ZmQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworI2lmZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKKwkvKgorCSAqIFNOSSAoUkZDNDM2NikKKwkgKiBPcGVuU1NMIGRvZXMgbm90IGRvY3VtZW50IHRoaXMgZnVuY3Rpb24sIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24KKwkgKiByZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBmYWlsdXJlIGFmdGVyIGNhbGxpbmcgU1NMZXJyKCkuCisJICovCisJcmV0ID0gU1NMX3NldF90bHNleHRfaG9zdF9uYW1lKHNvY2stPnNzbCwgc2VydmVyLmhvc3QpOworCWlmIChyZXQgIT0gMSkKKwkJd2FybmluZygiU1NMX3NldF90bHNleHRfaG9zdF9uYW1lKCVzKSBmYWlsZWQuIiwgc2VydmVyLmhvc3QpOworI2VuZGlmCisKKwlyZXQgPSBTU0xfY29ubmVjdChzb2NrLT5zc2wpOworCWlmIChyZXQgPD0gMCkgeworCQlzb2NrZXRfcGVycm9yKCJTU0xfY29ubmVjdCIsIHNvY2ssIHJldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAodmVyaWZ5KSB7CisJCS8qIG1ha2Ugc3VyZSB0aGUgaG9zdG5hbWUgbWF0Y2hlcyB0aGF0IG9mIHRoZSBjZXJ0aWZpY2F0ZSAqLworCQljZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNvY2stPnNzbCk7CisJCWlmICghY2VydCkKKwkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGdldCBwZWVyIGNlcnRpZmljYXRlLiIpOworCQlpZiAodmVyaWZ5X2hvc3RuYW1lKGNlcnQsIHNlcnZlci5ob3N0KSA8IDApCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBzb2NrZXRfcmVhZChzdHJ1Y3QgaW1hcF9zb2NrZXQgKnNvY2ssIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzc2l6ZV90IG47CisjaWZuZGVmIE5PX09QRU5TU0wKKwlpZiAoc29jay0+c3NsKQorCQluID0gU1NMX3JlYWQoc29jay0+c3NsLCBidWYsIGxlbik7CisJZWxzZQorI2VuZGlmCisJCW4gPSB4cmVhZChzb2NrLT5mZFswXSwgYnVmLCBsZW4pOworCWlmIChuIDw9IDApIHsKKwkJc29ja2V0X3BlcnJvcigicmVhZCIsIHNvY2ssIG4pOworCQljbG9zZShzb2NrLT5mZFswXSk7CisJCWNsb3NlKHNvY2stPmZkWzFdKTsKKwkJc29jay0+ZmRbMF0gPSBzb2NrLT5mZFsxXSA9IC0xOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIGludCBzb2NrZXRfd3JpdGUoc3RydWN0IGltYXBfc29ja2V0ICpzb2NrLCBjb25zdCBjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IG47CisjaWZuZGVmIE5PX09QRU5TU0wKKwlpZiAoc29jay0+c3NsKQorCQluID0gU1NMX3dyaXRlKHNvY2stPnNzbCwgYnVmLCBsZW4pOworCWVsc2UKKyNlbmRpZgorCQluID0gd3JpdGVfaW5fZnVsbChzb2NrLT5mZFsxXSwgYnVmLCBsZW4pOworCWlmIChuICE9IGxlbikgeworCQlzb2NrZXRfcGVycm9yKCJ3cml0ZSIsIHNvY2ssIG4pOworCQljbG9zZShzb2NrLT5mZFswXSk7CisJCWNsb3NlKHNvY2stPmZkWzFdKTsKKwkJc29jay0+ZmRbMF0gPSBzb2NrLT5mZFsxXSA9IC0xOworCX0KKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHZvaWQgc29ja2V0X3NodXRkb3duKHN0cnVjdCBpbWFwX3NvY2tldCAqc29jaykKK3sKKyNpZm5kZWYgTk9fT1BFTlNTTAorCWlmIChzb2NrLT5zc2wpIHsKKwkJU1NMX3NodXRkb3duKHNvY2stPnNzbCk7CisJCVNTTF9mcmVlKHNvY2stPnNzbCk7CisJfQorI2VuZGlmCisJY2xvc2Uoc29jay0+ZmRbMF0pOworCWNsb3NlKHNvY2stPmZkWzFdKTsKK30KKworLyogc2ltcGxlIGxpbmUgYnVmZmVyaW5nICovCitzdGF0aWMgaW50IGJ1ZmZlcl9nZXRzKHN0cnVjdCBpbWFwX2J1ZmZlciAqYiwgY2hhciAqKnMpCit7CisJaW50IG47CisJaW50IHN0YXJ0ID0gYi0+b2Zmc2V0OworCisJKnMgPSBiLT5idWYgKyBzdGFydDsKKworCWZvciAoOzspIHsKKwkJLyogbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIGRhdGEgdG8gcmVhZCB0aGUgXHJcbiBzZXF1ZW5jZSAqLworCQlpZiAoYi0+b2Zmc2V0ICsgMSA+PSBiLT5ieXRlcykgeworCQkJaWYgKHN0YXJ0KSB7CisJCQkJLyogc2hpZnQgZG93biB1c2VkIGJ5dGVzICovCisJCQkJKnMgPSBiLT5idWY7CisKKwkJCQlhc3NlcnQoc3RhcnQgPD0gYi0+Ynl0ZXMpOworCQkJCW4gPSBiLT5ieXRlcyAtIHN0YXJ0OworCisJCQkJaWYgKG4pCisJCQkJCW1lbW1vdmUoYi0+YnVmLCBiLT5idWYgKyBzdGFydCwgbik7CisJCQkJYi0+b2Zmc2V0IC09IHN0YXJ0OworCQkJCWItPmJ5dGVzID0gbjsKKwkJCQlzdGFydCA9IDA7CisJCQl9CisKKwkJCW4gPSBzb2NrZXRfcmVhZCgmYi0+c29jaywgYi0+YnVmICsgYi0+Ynl0ZXMsCisJCQkJCSBzaXplb2YoYi0+YnVmKSAtIGItPmJ5dGVzKTsKKworCQkJaWYgKG4gPD0gMCkKKwkJCQlyZXR1cm4gLTE7CisKKwkJCWItPmJ5dGVzICs9IG47CisJCX0KKworCQlpZiAoYi0+YnVmW2ItPm9mZnNldF0gPT0gJ1xyJykgeworCQkJYXNzZXJ0KGItPm9mZnNldCArIDEgPCBiLT5ieXRlcyk7CisJCQlpZiAoYi0+YnVmW2ItPm9mZnNldCArIDFdID09ICdcbicpIHsKKwkJCQliLT5idWZbYi0+b2Zmc2V0XSA9IDA7ICAvKiB0ZXJtaW5hdGUgdGhlIHN0cmluZyAqLworCQkJCWItPm9mZnNldCArPSAyOyAvKiBuZXh0IGxpbmUgKi8KKwkJCQlpZiAoMCA8IHZlcmJvc2l0eSkKKwkJCQkJcHV0cygqcyk7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKworCQliLT5vZmZzZXQrKzsKKwl9CisJLyogbm90IHJlYWNoZWQgKi8KK30KKworc3RhdGljIHZvaWQgaW1hcF9pbmZvKGNvbnN0IGNoYXIgKm1zZywgLi4uKQoreworCXZhX2xpc3QgdmE7CisKKwlpZiAoMCA8PSB2ZXJib3NpdHkpIHsKKwkJdmFfc3RhcnQodmEsIG1zZyk7CisJCXZwcmludGYobXNnLCB2YSk7CisJCXZhX2VuZCh2YSk7CisJCWZmbHVzaChzdGRvdXQpOworCX0KK30KKworc3RhdGljIHZvaWQgaW1hcF93YXJuKGNvbnN0IGNoYXIgKm1zZywgLi4uKQoreworCXZhX2xpc3QgdmE7CisKKwlpZiAoLTIgPCB2ZXJib3NpdHkpIHsKKwkJdmFfc3RhcnQodmEsIG1zZyk7CisJCXZmcHJpbnRmKHN0ZGVyciwgbXNnLCB2YSk7CisJCXZhX2VuZCh2YSk7CisJfQorfQorCitzdGF0aWMgY2hhciAqbmV4dF9hcmcoY2hhciAqKnMpCit7CisJY2hhciAqcmV0OworCisJaWYgKCFzIHx8ICEqcykKKwkJcmV0dXJuIE5VTEw7CisJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICoqcykpCisJCSgqcykrKzsKKwlpZiAoISoqcykgeworCQkqcyA9IE5VTEw7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoKipzID09ICciJykgeworCQkrKypzOworCQlyZXQgPSAqczsKKwkJKnMgPSBzdHJjaHIoKnMsICciJyk7CisJfSBlbHNlIHsKKwkJcmV0ID0gKnM7CisJCXdoaWxlICgqKnMgJiYgIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICoqcykpCisJCQkoKnMpKys7CisJfQorCWlmICgqcykgeworCQlpZiAoKipzKQorCQkJKigqcykrKyA9IDA7CisJCWlmICghKipzKQorCQkJKnMgPSBOVUxMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5mc25wcmludGYoY2hhciAqYnVmLCBpbnQgYmxlbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKwl2YV9saXN0IHZhOworCisJdmFfc3RhcnQodmEsIGZtdCk7CisJaWYgKGJsZW4gPD0gMCB8fCAodW5zaWduZWQpKHJldCA9IHZzbnByaW50ZihidWYsIGJsZW4sIGZtdCwgdmEpKSA+PSAodW5zaWduZWQpYmxlbikKKwkJZGllKCJGYXRhbDogYnVmZmVyIHRvbyBzbWFsbC4gUGxlYXNlIHJlcG9ydCBhIGJ1Zy4iKTsKKwl2YV9lbmQodmEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW1hcF9jbWQgKmlzc3VlX2ltYXBfY21kKHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsCisJCQkJICAgICAgIHN0cnVjdCBpbWFwX2NtZF9jYiAqY2IsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGN0eC0+aW1hcDsKKwlzdHJ1Y3QgaW1hcF9jbWQgKmNtZDsKKwlpbnQgbiwgYnVmbDsKKwljaGFyIGJ1ZlsxMDI0XTsKKworCWNtZCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbWFwX2NtZCkpOworCW5mdmFzcHJpbnRmKCZjbWQtPmNtZCwgZm10LCBhcCk7CisJY21kLT50YWcgPSArK2ltYXAtPm5leHR0YWc7CisKKwlpZiAoY2IpCisJCWNtZC0+Y2IgPSAqY2I7CisJZWxzZQorCQltZW1zZXQoJmNtZC0+Y2IsIDAsIHNpemVvZihjbWQtPmNiKSk7CisKKwl3aGlsZSAoaW1hcC0+bGl0ZXJhbF9wZW5kaW5nKQorCQlnZXRfY21kX3Jlc3VsdChjdHgsIE5VTEwpOworCisJaWYgKCFjbWQtPmNiLmRhdGEpCisJCWJ1ZmwgPSBuZnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCAlc1xyXG4iLCBjbWQtPnRhZywgY21kLT5jbWQpOworCWVsc2UKKwkJYnVmbCA9IG5mc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkICVzeyVkJXN9XHJcbiIsCisJCQkJICBjbWQtPnRhZywgY21kLT5jbWQsIGNtZC0+Y2IuZGxlbiwKKwkJCQkgIENBUChMSVRFUkFMUExVUykgPyAiKyIgOiAiIik7CisKKwlpZiAoMCA8IHZlcmJvc2l0eSkgeworCQlpZiAoaW1hcC0+bnVtX2luX3Byb2dyZXNzKQorCQkJcHJpbnRmKCIoJWQgaW4gcHJvZ3Jlc3MpICIsIGltYXAtPm51bV9pbl9wcm9ncmVzcyk7CisJCWlmICghc3RhcnRzX3dpdGgoY21kLT5jbWQsICJMT0dJTiIpKQorCQkJcHJpbnRmKCI+Pj4gJXMiLCBidWYpOworCQllbHNlCisJCQlwcmludGYoIj4+PiAlZCBMT0dJTiA8dXNlcj4gPHBhc3M+XG4iLCBjbWQtPnRhZyk7CisJfQorCWlmIChzb2NrZXRfd3JpdGUoJmltYXAtPmJ1Zi5zb2NrLCBidWYsIGJ1ZmwpICE9IGJ1ZmwpIHsKKwkJZnJlZShjbWQtPmNtZCk7CisJCWZyZWUoY21kKTsKKwkJaWYgKGNiKQorCQkJZnJlZShjYi0+ZGF0YSk7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoY21kLT5jYi5kYXRhKSB7CisJCWlmIChDQVAoTElURVJBTFBMVVMpKSB7CisJCQluID0gc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgY21kLT5jYi5kYXRhLCBjbWQtPmNiLmRsZW4pOworCQkJZnJlZShjbWQtPmNiLmRhdGEpOworCQkJaWYgKG4gIT0gY21kLT5jYi5kbGVuIHx8CisJCQkgICAgc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgIlxyXG4iLCAyKSAhPSAyKSB7CisJCQkJZnJlZShjbWQtPmNtZCk7CisJCQkJZnJlZShjbWQpOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJY21kLT5jYi5kYXRhID0gTlVMTDsKKwkJfSBlbHNlCisJCQlpbWFwLT5saXRlcmFsX3BlbmRpbmcgPSAxOworCX0gZWxzZSBpZiAoY21kLT5jYi5jb250KQorCQlpbWFwLT5saXRlcmFsX3BlbmRpbmcgPSAxOworCWNtZC0+bmV4dCA9IE5VTEw7CisJKmltYXAtPmluX3Byb2dyZXNzX2FwcGVuZCA9IGNtZDsKKwlpbWFwLT5pbl9wcm9ncmVzc19hcHBlbmQgPSAmY21kLT5uZXh0OworCWltYXAtPm51bV9pbl9wcm9ncmVzcysrOworCXJldHVybiBjbWQ7Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitzdGF0aWMgaW50IGltYXBfZXhlYyhzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3QgaW1hcF9jbWRfY2IgKmNiLAorCQkgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJc3RydWN0IGltYXBfY21kICpjbWRwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJY21kcCA9IGlzc3VlX2ltYXBfY21kKGN0eCwgY2IsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKCFjbWRwKQorCQlyZXR1cm4gUkVTUF9CQUQ7CisKKwlyZXR1cm4gZ2V0X2NtZF9yZXN1bHQoY3R4LCBjbWRwKTsKK30KKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDMsIDQpKSkKK3N0YXRpYyBpbnQgaW1hcF9leGVjX20oc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kX2NiICpjYiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJc3RydWN0IGltYXBfY21kICpjbWRwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJY21kcCA9IGlzc3VlX2ltYXBfY21kKGN0eCwgY2IsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKCFjbWRwKQorCQlyZXR1cm4gRFJWX1NUT1JFX0JBRDsKKworCXN3aXRjaCAoZ2V0X2NtZF9yZXN1bHQoY3R4LCBjbWRwKSkgeworCWNhc2UgUkVTUF9CQUQ6IHJldHVybiBEUlZfU1RPUkVfQkFEOworCWNhc2UgUkVTUF9OTzogcmV0dXJuIERSVl9NU0dfQkFEOworCWRlZmF1bHQ6IHJldHVybiBEUlZfT0s7CisJfQorfQorCitzdGF0aWMgaW50IHNraXBfaW1hcF9saXN0X2woY2hhciAqKnNwLCBpbnQgbGV2ZWwpCit7CisJY2hhciAqcyA9ICpzcDsKKworCWZvciAoOzspIHsKKwkJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKnMpKQorCQkJcysrOworCQlpZiAobGV2ZWwgJiYgKnMgPT0gJyknKSB7CisJCQlzKys7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKnMgPT0gJygnKSB7CisJCQkvKiBzdWJsaXN0ICovCisJCQlzKys7CisJCQlpZiAoc2tpcF9pbWFwX2xpc3RfbCgmcywgbGV2ZWwgKyAxKSkKKwkJCQlnb3RvIGJhaWw7CisJCX0gZWxzZSBpZiAoKnMgPT0gJyInKSB7CisJCQkvKiBxdW90ZWQgc3RyaW5nICovCisJCQlzKys7CisJCQlmb3IgKDsgKnMgIT0gJyInOyBzKyspCisJCQkJaWYgKCEqcykKKwkJCQkJZ290byBiYWlsOworCQkJcysrOworCQl9IGVsc2UgeworCQkJLyogYXRvbSAqLworCQkJZm9yICg7ICpzICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpzKTsgcysrKQorCQkJCWlmIChsZXZlbCAmJiAqcyA9PSAnKScpCisJCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFsZXZlbCkKKwkJCWJyZWFrOworCQlpZiAoISpzKQorCQkJZ290byBiYWlsOworCX0KKwkqc3AgPSBzOworCXJldHVybiAwOworCitiYWlsOgorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgc2tpcF9saXN0KGNoYXIgKipzcCkKK3sKKwlza2lwX2ltYXBfbGlzdF9sKHNwLCAwKTsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY2FwYWJpbGl0eShzdHJ1Y3QgaW1hcCAqaW1hcCwgY2hhciAqY21kKQoreworCWNoYXIgKmFyZzsKKwl1bnNpZ25lZCBpOworCisJaW1hcC0+Y2FwcyA9IDB4ODAwMDAwMDA7CisJd2hpbGUgKChhcmcgPSBuZXh0X2FyZygmY21kKSkpCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNhcF9saXN0KTsgaSsrKQorCQkJaWYgKCFzdHJjbXAoY2FwX2xpc3RbaV0sIGFyZykpCisJCQkJaW1hcC0+Y2FwcyB8PSAxIDw8IGk7CisJaW1hcC0+cmNhcHMgPSBpbWFwLT5jYXBzOworfQorCitzdGF0aWMgaW50IHBhcnNlX3Jlc3BvbnNlX2NvZGUoc3RydWN0IGltYXBfc3RvcmUgKmN0eCwgc3RydWN0IGltYXBfY21kX2NiICpjYiwKKwkJCSAgICAgICBjaGFyICpzKQoreworCXN0cnVjdCBpbWFwICppbWFwID0gY3R4LT5pbWFwOworCWNoYXIgKmFyZywgKnA7CisKKwlpZiAoKnMgIT0gJ1snKQorCQlyZXR1cm4gUkVTUF9PSzsJCS8qIG5vIHJlc3BvbnNlIGNvZGUgKi8KKwlzKys7CisJaWYgKCEocCA9IHN0cmNocihzLCAnXScpKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IG1hbGZvcm1lZCByZXNwb25zZSBjb2RlXG4iKTsKKwkJcmV0dXJuIFJFU1BfQkFEOworCX0KKwkqcCsrID0gMDsKKwlhcmcgPSBuZXh0X2FyZygmcyk7CisJaWYgKCFzdHJjbXAoIlVJRFZBTElESVRZIiwgYXJnKSkgeworCQlpZiAoIShhcmcgPSBuZXh0X2FyZygmcykpIHx8ICEoY3R4LT51aWR2YWxpZGl0eSA9IGF0b2koYXJnKSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogbWFsZm9ybWVkIFVJRFZBTElESVRZIHN0YXR1c1xuIik7CisJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoIlVJRE5FWFQiLCBhcmcpKSB7CisJCWlmICghKGFyZyA9IG5leHRfYXJnKCZzKSkgfHwgIShpbWFwLT51aWRuZXh0ID0gYXRvaShhcmcpKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBtYWxmb3JtZWQgTkVYVFVJRCBzdGF0dXNcbiIpOworCQkJcmV0dXJuIFJFU1BfQkFEOworCQl9CisJfSBlbHNlIGlmICghc3RyY21wKCJDQVBBQklMSVRZIiwgYXJnKSkgeworCQlwYXJzZV9jYXBhYmlsaXR5KGltYXAsIHMpOworCX0gZWxzZSBpZiAoIXN0cmNtcCgiQUxFUlQiLCBhcmcpKSB7CisJCS8qIFJGQzIwNjAgc2F5cyB0aGF0IHRoZXNlIG1lc3NhZ2VzIE1VU1QgYmUgZGlzcGxheWVkCisJCSAqIHRvIHRoZSB1c2VyCisJCSAqLworCQlmb3IgKDsgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCk7IHArKyk7CisJCWZwcmludGYoc3RkZXJyLCAiKioqIElNQVAgQUxFUlQgKioqICVzXG4iLCBwKTsKKwl9IGVsc2UgaWYgKGNiICYmIGNiLT5jdHggJiYgIXN0cmNtcCgiQVBQRU5EVUlEIiwgYXJnKSkgeworCQlpZiAoIShhcmcgPSBuZXh0X2FyZygmcykpIHx8ICEoY3R4LT51aWR2YWxpZGl0eSA9IGF0b2koYXJnKSkgfHwKKwkJICAgICEoYXJnID0gbmV4dF9hcmcoJnMpKSB8fCAhKCooaW50ICopY2ItPmN0eCA9IGF0b2koYXJnKSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogbWFsZm9ybWVkIEFQUEVORFVJRCBzdGF0dXNcbiIpOworCQkJcmV0dXJuIFJFU1BfQkFEOworCQl9CisJfQorCXJldHVybiBSRVNQX09LOworfQorCitzdGF0aWMgaW50IGdldF9jbWRfcmVzdWx0KHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsIHN0cnVjdCBpbWFwX2NtZCAqdGNtZCkKK3sKKwlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGN0eC0+aW1hcDsKKwlzdHJ1Y3QgaW1hcF9jbWQgKmNtZHAsICoqcGNtZHA7CisJY2hhciAqY21kLCAqYXJnLCAqYXJnMTsKKwlpbnQgbiwgcmVzcCwgcmVzcDIsIHRhZzsKKworCWZvciAoOzspIHsKKwkJaWYgKGJ1ZmZlcl9nZXRzKCZpbWFwLT5idWYsICZjbWQpKQorCQkJcmV0dXJuIFJFU1BfQkFEOworCisJCWFyZyA9IG5leHRfYXJnKCZjbWQpOworCQlpZiAoKmFyZyA9PSAnKicpIHsKKwkJCWFyZyA9IG5leHRfYXJnKCZjbWQpOworCQkJaWYgKCFhcmcpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IHVuYWJsZSB0byBwYXJzZSB1bnRhZ2dlZCByZXNwb25zZVxuIik7CisJCQkJcmV0dXJuIFJFU1BfQkFEOworCQkJfQorCisJCQlpZiAoIXN0cmNtcCgiTkFNRVNQQUNFIiwgYXJnKSkgeworCQkJCS8qIHJmYzIzNDIgTkFNRVNQQUNFIHJlc3BvbnNlLiAqLworCQkJCXNraXBfbGlzdCgmY21kKTsgLyogUGVyc29uYWwgbWFpbGJveGVzICovCisJCQkJc2tpcF9saXN0KCZjbWQpOyAvKiBPdGhlcnMnIG1haWxib3hlcyAqLworCQkJCXNraXBfbGlzdCgmY21kKTsgLyogU2hhcmVkIG1haWxib3hlcyAqLworCQkJfSBlbHNlIGlmICghc3RyY21wKCJPSyIsIGFyZykgfHwgIXN0cmNtcCgiQkFEIiwgYXJnKSB8fAorCQkJCSAgICFzdHJjbXAoIk5PIiwgYXJnKSB8fCAhc3RyY21wKCJCWUUiLCBhcmcpKSB7CisJCQkJaWYgKChyZXNwID0gcGFyc2VfcmVzcG9uc2VfY29kZShjdHgsIE5VTEwsIGNtZCkpICE9IFJFU1BfT0spCisJCQkJCXJldHVybiByZXNwOworCQkJfSBlbHNlIGlmICghc3RyY21wKCJDQVBBQklMSVRZIiwgYXJnKSkgeworCQkJCXBhcnNlX2NhcGFiaWxpdHkoaW1hcCwgY21kKTsKKwkJCX0gZWxzZSBpZiAoKGFyZzEgPSBuZXh0X2FyZygmY21kKSkpIHsKKwkJCQk7IC8qCisJCQkJICAgKiBVbmhhbmRsZWQgcmVzcG9uc2UtZGF0YSB3aXRoIGF0IGxlYXN0IHR3byB3b3Jkcy4KKwkJCQkgICAqIElnbm9yZSBpdC4KKwkJCQkgICAqCisJCQkJICAgKiBORUVEU1dPUks6IFByZXZpb3VzbHkgdGhpcyBjYXNlIGhhbmRsZWQgJzxudW0+IEVYSVNUUycKKwkJCQkgICAqIGFuZCAnPG51bT4gUkVDRU5UJyBidXQgYXMgYSBwcm9iYWJseS11bmludGVuZGVkIHNpZGUKKwkJCQkgICAqIGVmZmVjdCBpdCBpZ25vcmVzIG90aGVyIHVucmVjb2duaXplZCB0d28td29yZAorCQkJCSAgICogcmVzcG9uc2VzLiAgaW1hcC1zZW5kIGRvZXNuJ3QgZXZlciB0cnkgdG8gcmVhZAorCQkJCSAgICogbWVzc2FnZXMgb3IgbWFpbGJveGVzIHRoZXNlIGRheXMsIHNvIGNvbnNpZGVyCisJCQkJICAgKiBlbGltaW5hdGluZyB0aGlzIGNhc2UuCisJCQkJICAgKi8KKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiB1bmFibGUgdG8gcGFyc2UgdW50YWdnZWQgcmVzcG9uc2VcbiIpOworCQkJCXJldHVybiBSRVNQX0JBRDsKKwkJCX0KKwkJfSBlbHNlIGlmICghaW1hcC0+aW5fcHJvZ3Jlc3MpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogdW5leHBlY3RlZCByZXBseTogJXMgJXNcbiIsIGFyZywgY21kID8gY21kIDogIiIpOworCQkJcmV0dXJuIFJFU1BfQkFEOworCQl9IGVsc2UgaWYgKCphcmcgPT0gJysnKSB7CisJCQkvKiBUaGlzIGNhbiBoYXBwZW4gb25seSB3aXRoIHRoZSBsYXN0IGNvbW1hbmQgdW5kZXJ3YXksIGFzCisJCQkgICBpdCBlbmZvcmNlcyBhIHJvdW5kLXRyaXAuICovCisJCQljbWRwID0gKHN0cnVjdCBpbWFwX2NtZCAqKSgoY2hhciAqKWltYXAtPmluX3Byb2dyZXNzX2FwcGVuZCAtCisJCQkgICAgICAgb2Zmc2V0b2Yoc3RydWN0IGltYXBfY21kLCBuZXh0KSk7CisJCQlpZiAoY21kcC0+Y2IuZGF0YSkgeworCQkJCW4gPSBzb2NrZXRfd3JpdGUoJmltYXAtPmJ1Zi5zb2NrLCBjbWRwLT5jYi5kYXRhLCBjbWRwLT5jYi5kbGVuKTsKKwkJCQlmcmVlKGNtZHAtPmNiLmRhdGEpOworCQkJCWNtZHAtPmNiLmRhdGEgPSBOVUxMOworCQkJCWlmIChuICE9IChpbnQpY21kcC0+Y2IuZGxlbikKKwkJCQkJcmV0dXJuIFJFU1BfQkFEOworCQkJfSBlbHNlIGlmIChjbWRwLT5jYi5jb250KSB7CisJCQkJaWYgKGNtZHAtPmNiLmNvbnQoY3R4LCBjbWRwLCBjbWQpKQorCQkJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogdW5leHBlY3RlZCBjb21tYW5kIGNvbnRpbnVhdGlvbiByZXF1ZXN0XG4iKTsKKwkJCQlyZXR1cm4gUkVTUF9CQUQ7CisJCQl9CisJCQlpZiAoc29ja2V0X3dyaXRlKCZpbWFwLT5idWYuc29jaywgIlxyXG4iLCAyKSAhPSAyKQorCQkJCXJldHVybiBSRVNQX0JBRDsKKwkJCWlmICghY21kcC0+Y2IuY29udCkKKwkJCQlpbWFwLT5saXRlcmFsX3BlbmRpbmcgPSAwOworCQkJaWYgKCF0Y21kKQorCQkJCXJldHVybiBEUlZfT0s7CisJCX0gZWxzZSB7CisJCQl0YWcgPSBhdG9pKGFyZyk7CisJCQlmb3IgKHBjbWRwID0gJmltYXAtPmluX3Byb2dyZXNzOyAoY21kcCA9ICpwY21kcCk7IHBjbWRwID0gJmNtZHAtPm5leHQpCisJCQkJaWYgKGNtZHAtPnRhZyA9PSB0YWcpCisJCQkJCWdvdG8gZ290dGFnOworCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiB1bmV4cGVjdGVkIHRhZyAlc1xuIiwgYXJnKTsKKwkJCXJldHVybiBSRVNQX0JBRDsKKwkJZ290dGFnOgorCQkJaWYgKCEoKnBjbWRwID0gY21kcC0+bmV4dCkpCisJCQkJaW1hcC0+aW5fcHJvZ3Jlc3NfYXBwZW5kID0gcGNtZHA7CisJCQlpbWFwLT5udW1faW5fcHJvZ3Jlc3MtLTsKKwkJCWlmIChjbWRwLT5jYi5jb250IHx8IGNtZHAtPmNiLmRhdGEpCisJCQkJaW1hcC0+bGl0ZXJhbF9wZW5kaW5nID0gMDsKKwkJCWFyZyA9IG5leHRfYXJnKCZjbWQpOworCQkJaWYgKCFzdHJjbXAoIk9LIiwgYXJnKSkKKwkJCQlyZXNwID0gRFJWX09LOworCQkJZWxzZSB7CisJCQkJaWYgKCFzdHJjbXAoIk5PIiwgYXJnKSkKKwkJCQkJcmVzcCA9IFJFU1BfTk87CisJCQkJZWxzZSAvKmlmICghc3RyY21wKCJCQUQiLCBhcmcpKSovCisJCQkJCXJlc3AgPSBSRVNQX0JBRDsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgY29tbWFuZCAnJXMnIHJldHVybmVkIHJlc3BvbnNlICglcykgLSAlc1xuIiwKKwkJCQkJIXN0YXJ0c193aXRoKGNtZHAtPmNtZCwgIkxPR0lOIikgPworCQkJCQkJCWNtZHAtPmNtZCA6ICJMT0dJTiA8dXNlcj4gPHBhc3M+IiwKKwkJCQkJCQlhcmcsIGNtZCA/IGNtZCA6ICIiKTsKKwkJCX0KKwkJCWlmICgocmVzcDIgPSBwYXJzZV9yZXNwb25zZV9jb2RlKGN0eCwgJmNtZHAtPmNiLCBjbWQpKSA+IHJlc3ApCisJCQkJcmVzcCA9IHJlc3AyOworCQkJaWYgKGNtZHAtPmNiLmRvbmUpCisJCQkJY21kcC0+Y2IuZG9uZShjdHgsIGNtZHAsIHJlc3ApOworCQkJZnJlZShjbWRwLT5jYi5kYXRhKTsKKwkJCWZyZWUoY21kcC0+Y21kKTsKKwkJCWZyZWUoY21kcCk7CisJCQlpZiAoIXRjbWQgfHwgdGNtZCA9PSBjbWRwKQorCQkJCXJldHVybiByZXNwOworCQl9CisJfQorCS8qIG5vdCByZWFjaGVkICovCit9CisKK3N0YXRpYyB2b2lkIGltYXBfY2xvc2Vfc2VydmVyKHN0cnVjdCBpbWFwX3N0b3JlICppY3R4KQoreworCXN0cnVjdCBpbWFwICppbWFwID0gaWN0eC0+aW1hcDsKKworCWlmIChpbWFwLT5idWYuc29jay5mZFswXSAhPSAtMSkgeworCQlpbWFwX2V4ZWMoaWN0eCwgTlVMTCwgIkxPR09VVCIpOworCQlzb2NrZXRfc2h1dGRvd24oJmltYXAtPmJ1Zi5zb2NrKTsKKwl9CisJZnJlZShpbWFwKTsKK30KKworc3RhdGljIHZvaWQgaW1hcF9jbG9zZV9zdG9yZShzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4KQoreworCWltYXBfY2xvc2Vfc2VydmVyKGN0eCk7CisJZnJlZShjdHgpOworfQorCisjaWZuZGVmIE5PX09QRU5TU0wKKworLyoKKyAqIGhleGNoYXIoKSBhbmQgY3JhbSgpIGZ1bmN0aW9ucyBhcmUgYmFzZWQgb24gdGhlIGNvZGUgZnJvbSB0aGUgaXN5bmMKKyAqIHByb2plY3QgKGh0dHA6Ly9pc3luYy5zZi5uZXQvKS4KKyAqLworc3RhdGljIGNoYXIgaGV4Y2hhcih1bnNpZ25lZCBpbnQgYikKK3sKKwlyZXR1cm4gYiA8IDEwID8gJzAnICsgYiA6ICdhJyArIChiIC0gMTApOworfQorCisjZGVmaW5lIEVOQ09ERURfU0laRShuKSAoNCooKG4rMikvMykpCitzdGF0aWMgY2hhciAqY3JhbShjb25zdCBjaGFyICpjaGFsbGVuZ2VfNjQsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnBhc3MpCit7CisJaW50IGksIHJlc3BfbGVuLCBlbmNvZGVkX2xlbiwgZGVjb2RlZF9sZW47CisJSE1BQ19DVFggaG1hYzsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbMTZdOworCWNoYXIgaGV4WzMzXTsKKwljaGFyICpyZXNwb25zZSwgKnJlc3BvbnNlXzY0LCAqY2hhbGxlbmdlOworCisJLyoKKwkgKiBsZW5ndGggb2YgY2hhbGxlbmdlXzY0IChpLmUuIGJhc2UtNjQgZW5jb2RlZCBzdHJpbmcpIGlzIGEgZ29vZAorCSAqIGVub3VnaCB1cHBlciBib3VuZCBmb3IgY2hhbGxlbmdlIChkZWNvZGVkIHJlc3VsdCkuCisJICovCisJZW5jb2RlZF9sZW4gPSBzdHJsZW4oY2hhbGxlbmdlXzY0KTsKKwljaGFsbGVuZ2UgPSB4bWFsbG9jKGVuY29kZWRfbGVuKTsKKwlkZWNvZGVkX2xlbiA9IEVWUF9EZWNvZGVCbG9jaygodW5zaWduZWQgY2hhciAqKWNoYWxsZW5nZSwKKwkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKWNoYWxsZW5nZV82NCwgZW5jb2RlZF9sZW4pOworCWlmIChkZWNvZGVkX2xlbiA8IDApCisJCWRpZSgiaW52YWxpZCBjaGFsbGVuZ2UgJXMiLCBjaGFsbGVuZ2VfNjQpOworCUhNQUNfSW5pdCgmaG1hYywgKHVuc2lnbmVkIGNoYXIgKilwYXNzLCBzdHJsZW4ocGFzcyksIEVWUF9tZDUoKSk7CisJSE1BQ19VcGRhdGUoJmhtYWMsICh1bnNpZ25lZCBjaGFyICopY2hhbGxlbmdlLCBkZWNvZGVkX2xlbik7CisJSE1BQ19GaW5hbCgmaG1hYywgaGFzaCwgTlVMTCk7CisJSE1BQ19DVFhfY2xlYW51cCgmaG1hYyk7CisKKwloZXhbMzJdID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQloZXhbMiAqIGldID0gaGV4Y2hhcigoaGFzaFtpXSA+PiA0KSAmIDB4Zik7CisJCWhleFsyICogaSArIDFdID0gaGV4Y2hhcihoYXNoW2ldICYgMHhmKTsKKwl9CisKKwkvKiByZXNwb25zZTogIjx1c2VyPiA8ZGlnZXN0IGluIGhleD4iICovCisJcmVzcG9uc2UgPSB4c3RyZm10KCIlcyAlcyIsIHVzZXIsIGhleCk7CisJcmVzcF9sZW4gPSBzdHJsZW4ocmVzcG9uc2UpICsgMTsKKworCXJlc3BvbnNlXzY0ID0geG1hbGxvYyhFTkNPREVEX1NJWkUocmVzcF9sZW4pICsgMSk7CisJZW5jb2RlZF9sZW4gPSBFVlBfRW5jb2RlQmxvY2soKHVuc2lnbmVkIGNoYXIgKilyZXNwb25zZV82NCwKKwkJCQkgICAgICAodW5zaWduZWQgY2hhciAqKXJlc3BvbnNlLCByZXNwX2xlbik7CisJaWYgKGVuY29kZWRfbGVuIDwgMCkKKwkJZGllKCJFVlBfRW5jb2RlQmxvY2sgZXJyb3IiKTsKKwlyZXNwb25zZV82NFtlbmNvZGVkX2xlbl0gPSAnXDAnOworCXJldHVybiAoY2hhciAqKXJlc3BvbnNlXzY0OworfQorCisjZWxzZQorCitzdGF0aWMgY2hhciAqY3JhbShjb25zdCBjaGFyICpjaGFsbGVuZ2VfNjQsIGNvbnN0IGNoYXIgKnVzZXIsIGNvbnN0IGNoYXIgKnBhc3MpCit7CisJZGllKCJJZiB5b3Ugd2FudCB0byB1c2UgQ1JBTS1NRDUgYXV0aGVudGljYXRlIG1ldGhvZCwgIgorCSAgICAieW91IGhhdmUgdG8gYnVpbGQgZ2l0LWltYXAtc2VuZCB3aXRoIE9wZW5TU0wgbGlicmFyeS4iKTsKK30KKworI2VuZGlmCisKK3N0YXRpYyBpbnQgYXV0aF9jcmFtX21kNShzdHJ1Y3QgaW1hcF9zdG9yZSAqY3R4LCBzdHJ1Y3QgaW1hcF9jbWQgKmNtZCwgY29uc3QgY2hhciAqcHJvbXB0KQoreworCWludCByZXQ7CisJY2hhciAqcmVzcG9uc2U7CisKKwlyZXNwb25zZSA9IGNyYW0ocHJvbXB0LCBzZXJ2ZXIudXNlciwgc2VydmVyLnBhc3MpOworCisJcmV0ID0gc29ja2V0X3dyaXRlKCZjdHgtPmltYXAtPmJ1Zi5zb2NrLCByZXNwb25zZSwgc3RybGVuKHJlc3BvbnNlKSk7CisJaWYgKHJldCAhPSBzdHJsZW4ocmVzcG9uc2UpKQorCQlyZXR1cm4gZXJyb3IoIklNQVAgZXJyb3I6IHNlbmRpbmcgcmVzcG9uc2UgZmFpbGVkIik7CisKKwlmcmVlKHJlc3BvbnNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGltYXBfc3RvcmUgKmltYXBfb3Blbl9zdG9yZShzdHJ1Y3QgaW1hcF9zZXJ2ZXJfY29uZiAqc3J2YywgY2hhciAqZm9sZGVyKQoreworCXN0cnVjdCBjcmVkZW50aWFsIGNyZWQgPSBDUkVERU5USUFMX0lOSVQ7CisJc3RydWN0IGltYXBfc3RvcmUgKmN0eDsKKwlzdHJ1Y3QgaW1hcCAqaW1hcDsKKwljaGFyICphcmcsICpyc3A7CisJaW50IHMgPSAtMSwgcHJlYXV0aDsKKworCWN0eCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpjdHgpKTsKKworCWN0eC0+aW1hcCA9IGltYXAgPSB4Y2FsbG9jKDEsIHNpemVvZigqaW1hcCkpOworCWltYXAtPmJ1Zi5zb2NrLmZkWzBdID0gaW1hcC0+YnVmLnNvY2suZmRbMV0gPSAtMTsKKwlpbWFwLT5pbl9wcm9ncmVzc19hcHBlbmQgPSAmaW1hcC0+aW5fcHJvZ3Jlc3M7CisKKwkvKiBvcGVuIGNvbm5lY3Rpb24gdG8gSU1BUCBzZXJ2ZXIgKi8KKworCWlmIChzcnZjLT50dW5uZWwpIHsKKwkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgdHVubmVsID0gQ0hJTERfUFJPQ0VTU19JTklUOworCisJCWltYXBfaW5mbygiU3RhcnRpbmcgdHVubmVsICclcycuLi4gIiwgc3J2Yy0+dHVubmVsKTsKKworCQlhcmd2X2FycmF5X3B1c2goJnR1bm5lbC5hcmdzLCBzcnZjLT50dW5uZWwpOworCQl0dW5uZWwudXNlX3NoZWxsID0gMTsKKwkJdHVubmVsLmluID0gLTE7CisJCXR1bm5lbC5vdXQgPSAtMTsKKwkJaWYgKHN0YXJ0X2NvbW1hbmQoJnR1bm5lbCkpCisJCQlkaWUoImNhbm5vdCBzdGFydCBwcm94eSAlcyIsIHNydmMtPnR1bm5lbCk7CisKKwkJaW1hcC0+YnVmLnNvY2suZmRbMF0gPSB0dW5uZWwub3V0OworCQlpbWFwLT5idWYuc29jay5mZFsxXSA9IHR1bm5lbC5pbjsKKworCQlpbWFwX2luZm8oIm9rXG4iKTsKKwl9IGVsc2UgeworI2lmbmRlZiBOT19JUFY2CisJCXN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpMCwgKmFpOworCQlpbnQgZ2FpOworCQljaGFyIHBvcnRzdHJbNl07CisKKwkJc25wcmludGYocG9ydHN0ciwgc2l6ZW9mKHBvcnRzdHIpLCAiJWQiLCBzcnZjLT5wb3J0KTsKKworCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKwkJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKwkJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKworCQlpbWFwX2luZm8oIlJlc29sdmluZyAlcy4uLiAiLCBzcnZjLT5ob3N0KTsKKwkJZ2FpID0gZ2V0YWRkcmluZm8oc3J2Yy0+aG9zdCwgcG9ydHN0ciwgJmhpbnRzLCAmYWkpOworCQlpZiAoZ2FpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImdldGFkZHJpbmZvOiAlc1xuIiwgZ2FpX3N0cmVycm9yKGdhaSkpOworCQkJZ290byBiYWlsOworCQl9CisJCWltYXBfaW5mbygib2tcbiIpOworCisJCWZvciAoYWkwID0gYWk7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7CisJCQljaGFyIGFkZHJbTklfTUFYSE9TVF07CisKKwkJCXMgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLAorCQkJCSAgIGFpLT5haV9wcm90b2NvbCk7CisJCQlpZiAocyA8IDApCisJCQkJY29udGludWU7CisKKwkJCWdldG5hbWVpbmZvKGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiwgYWRkciwKKwkJCQkgICAgc2l6ZW9mKGFkZHIpLCBOVUxMLCAwLCBOSV9OVU1FUklDSE9TVCk7CisJCQlpbWFwX2luZm8oIkNvbm5lY3RpbmcgdG8gWyVzXTolcy4uLiAiLCBhZGRyLCBwb3J0c3RyKTsKKworCQkJaWYgKGNvbm5lY3QocywgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSA8IDApIHsKKwkJCQljbG9zZShzKTsKKwkJCQlzID0gLTE7CisJCQkJcGVycm9yKCJjb25uZWN0Iik7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWJyZWFrOworCQl9CisJCWZyZWVhZGRyaW5mbyhhaTApOworI2Vsc2UgLyogTk9fSVBWNiAqLworCQlzdHJ1Y3QgaG9zdGVudCAqaGU7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCisJCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKwkJYWRkci5zaW5fcG9ydCA9IGh0b25zKHNydmMtPnBvcnQpOworCQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCisJCWltYXBfaW5mbygiUmVzb2x2aW5nICVzLi4uICIsIHNydmMtPmhvc3QpOworCQloZSA9IGdldGhvc3RieW5hbWUoc3J2Yy0+aG9zdCk7CisJCWlmICghaGUpIHsKKwkJCXBlcnJvcigiZ2V0aG9zdGJ5bmFtZSIpOworCQkJZ290byBiYWlsOworCQl9CisJCWltYXBfaW5mbygib2tcbiIpOworCisJCWFkZHIuc2luX2FkZHIuc19hZGRyID0gKigoaW50ICopIGhlLT5oX2FkZHJfbGlzdFswXSk7CisKKwkJcyA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisKKwkJaW1hcF9pbmZvKCJDb25uZWN0aW5nIHRvICVzOiVodS4uLiAiLCBpbmV0X250b2EoYWRkci5zaW5fYWRkciksIG50b2hzKGFkZHIuc2luX3BvcnQpKTsKKwkJaWYgKGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2YoYWRkcikpKSB7CisJCQljbG9zZShzKTsKKwkJCXMgPSAtMTsKKwkJCXBlcnJvcigiY29ubmVjdCIpOworCQl9CisjZW5kaWYKKwkJaWYgKHMgPCAwKSB7CisJCQlmcHV0cygiRXJyb3I6IHVuYWJsZSB0byBjb25uZWN0IHRvIHNlcnZlci5cbiIsIHN0ZGVycik7CisJCQlnb3RvIGJhaWw7CisJCX0KKworCQlpbWFwLT5idWYuc29jay5mZFswXSA9IHM7CisJCWltYXAtPmJ1Zi5zb2NrLmZkWzFdID0gZHVwKHMpOworCisJCWlmIChzcnZjLT51c2Vfc3NsICYmCisJCSAgICBzc2xfc29ja2V0X2Nvbm5lY3QoJmltYXAtPmJ1Zi5zb2NrLCAwLCBzcnZjLT5zc2xfdmVyaWZ5KSkgeworCQkJY2xvc2Uocyk7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaW1hcF9pbmZvKCJva1xuIik7CisJfQorCisJLyogcmVhZCB0aGUgZ3JlZXRpbmcgc3RyaW5nICovCisJaWYgKGJ1ZmZlcl9nZXRzKCZpbWFwLT5idWYsICZyc3ApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogbm8gZ3JlZXRpbmcgcmVzcG9uc2VcbiIpOworCQlnb3RvIGJhaWw7CisJfQorCWFyZyA9IG5leHRfYXJnKCZyc3ApOworCWlmICghYXJnIHx8ICphcmcgIT0gJyonIHx8IChhcmcgPSBuZXh0X2FyZygmcnNwKSkgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IGludmFsaWQgZ3JlZXRpbmcgcmVzcG9uc2VcbiIpOworCQlnb3RvIGJhaWw7CisJfQorCXByZWF1dGggPSAwOworCWlmICghc3RyY21wKCJQUkVBVVRIIiwgYXJnKSkKKwkJcHJlYXV0aCA9IDE7CisJZWxzZSBpZiAoc3RyY21wKCJPSyIsIGFyZykgIT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IHVua25vd24gZ3JlZXRpbmcgcmVzcG9uc2VcbiIpOworCQlnb3RvIGJhaWw7CisJfQorCXBhcnNlX3Jlc3BvbnNlX2NvZGUoY3R4LCBOVUxMLCByc3ApOworCWlmICghaW1hcC0+Y2FwcyAmJiBpbWFwX2V4ZWMoY3R4LCBOVUxMLCAiQ0FQQUJJTElUWSIpICE9IFJFU1BfT0spCisJCWdvdG8gYmFpbDsKKworCWlmICghcHJlYXV0aCkgeworI2lmbmRlZiBOT19PUEVOU1NMCisJCWlmICghc3J2Yy0+dXNlX3NzbCAmJiBDQVAoU1RBUlRUTFMpKSB7CisJCQlpZiAoaW1hcF9leGVjKGN0eCwgTlVMTCwgIlNUQVJUVExTIikgIT0gUkVTUF9PSykKKwkJCQlnb3RvIGJhaWw7CisJCQlpZiAoc3NsX3NvY2tldF9jb25uZWN0KCZpbWFwLT5idWYuc29jaywgMSwKKwkJCQkJICAgICAgIHNydmMtPnNzbF92ZXJpZnkpKQorCQkJCWdvdG8gYmFpbDsKKwkJCS8qIGNhcGFiaWxpdGllcyBtYXkgaGF2ZSBjaGFuZ2VkLCBzbyBnZXQgdGhlIG5ldyBjYXBhYmlsaXRpZXMgKi8KKwkJCWlmIChpbWFwX2V4ZWMoY3R4LCBOVUxMLCAiQ0FQQUJJTElUWSIpICE9IFJFU1BfT0spCisJCQkJZ290byBiYWlsOworCQl9CisjZW5kaWYKKwkJaW1hcF9pbmZvKCJMb2dnaW5nIGluLi4uXG4iKTsKKwkJaWYgKCFzcnZjLT51c2VyIHx8ICFzcnZjLT5wYXNzKSB7CisJCQljcmVkLnByb3RvY29sID0geHN0cmR1cChzcnZjLT51c2Vfc3NsID8gImltYXBzIiA6ICJpbWFwIik7CisJCQljcmVkLmhvc3QgPSB4c3RyZHVwKHNydmMtPmhvc3QpOworCisJCQlpZiAoc3J2Yy0+dXNlcikKKwkJCQljcmVkLnVzZXJuYW1lID0geHN0cmR1cChzcnZjLT51c2VyKTsKKwkJCWlmIChzcnZjLT5wYXNzKQorCQkJCWNyZWQucGFzc3dvcmQgPSB4c3RyZHVwKHNydmMtPnBhc3MpOworCisJCQljcmVkZW50aWFsX2ZpbGwoJmNyZWQpOworCisJCQlpZiAoIXNydmMtPnVzZXIpCisJCQkJc3J2Yy0+dXNlciA9IHhzdHJkdXAoY3JlZC51c2VybmFtZSk7CisJCQlpZiAoIXNydmMtPnBhc3MpCisJCQkJc3J2Yy0+cGFzcyA9IHhzdHJkdXAoY3JlZC5wYXNzd29yZCk7CisJCX0KKworCQlpZiAoQ0FQKE5PTE9HSU4pKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlNraXBwaW5nIGFjY291bnQgJXNAJXMsIHNlcnZlciBmb3JiaWRzIExPR0lOXG4iLCBzcnZjLT51c2VyLCBzcnZjLT5ob3N0KTsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCisJCWlmIChzcnZjLT5hdXRoX21ldGhvZCkgeworCQkJc3RydWN0IGltYXBfY21kX2NiIGNiOworCisJCQlpZiAoIXN0cmNtcChzcnZjLT5hdXRoX21ldGhvZCwgIkNSQU0tTUQ1IikpIHsKKwkJCQlpZiAoIUNBUChBVVRIX0NSQU1fTUQ1KSkgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIllvdSBzcGVjaWZpZWQiCisJCQkJCQkiQ1JBTS1NRDUgYXMgYXV0aGVudGljYXRpb24gbWV0aG9kLCAiCisJCQkJCQkiYnV0ICVzIGRvZXNuJ3Qgc3VwcG9ydCBpdC5cbiIsIHNydmMtPmhvc3QpOworCQkJCQlnb3RvIGJhaWw7CisJCQkJfQorCQkJCS8qIENSQU0tTUQ1ICovCisKKwkJCQltZW1zZXQoJmNiLCAwLCBzaXplb2YoY2IpKTsKKwkJCQljYi5jb250ID0gYXV0aF9jcmFtX21kNTsKKwkJCQlpZiAoaW1hcF9leGVjKGN0eCwgJmNiLCAiQVVUSEVOVElDQVRFIENSQU0tTUQ1IikgIT0gUkVTUF9PSykgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IEFVVEhFTlRJQ0FURSBDUkFNLU1ENSBmYWlsZWRcbiIpOworCQkJCQlnb3RvIGJhaWw7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gYXV0aGVudGljYXRpb24gbWV0aG9kOiVzXG4iLCBzcnZjLT5ob3N0KTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoIWltYXAtPmJ1Zi5zb2NrLnNzbCkKKwkJCQlpbWFwX3dhcm4oIioqKiBJTUFQIFdhcm5pbmcgKioqIFBhc3N3b3JkIGlzIGJlaW5nICIKKwkJCQkJICAic2VudCBpbiB0aGUgY2xlYXJcbiIpOworCQkJaWYgKGltYXBfZXhlYyhjdHgsIE5VTEwsICJMT0dJTiBcIiVzXCIgXCIlc1wiIiwgc3J2Yy0+dXNlciwgc3J2Yy0+cGFzcykgIT0gUkVTUF9PSykgeworCQkJCWZwcmludGYoc3RkZXJyLCAiSU1BUCBlcnJvcjogTE9HSU4gZmFpbGVkXG4iKTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCX0KKwl9IC8qICFwcmVhdXRoICovCisKKwlpZiAoY3JlZC51c2VybmFtZSkKKwkJY3JlZGVudGlhbF9hcHByb3ZlKCZjcmVkKTsKKwljcmVkZW50aWFsX2NsZWFyKCZjcmVkKTsKKworCS8qIGNoZWNrIHRoZSB0YXJnZXQgbWFpbGJveCBleGlzdHMgKi8KKwljdHgtPm5hbWUgPSBmb2xkZXI7CisJc3dpdGNoIChpbWFwX2V4ZWMoY3R4LCBOVUxMLCAiRVhBTUlORSBcIiVzXCIiLCBjdHgtPm5hbWUpKSB7CisJY2FzZSBSRVNQX09LOgorCQkvKiBvayAqLworCQlicmVhazsKKwljYXNlIFJFU1BfQkFEOgorCQlmcHJpbnRmKHN0ZGVyciwgIklNQVAgZXJyb3I6IGNvdWxkIG5vdCBjaGVjayBtYWlsYm94XG4iKTsKKwkJZ290byBvdXQ7CisJY2FzZSBSRVNQX05POgorCQlpZiAoaW1hcF9leGVjKGN0eCwgTlVMTCwgIkNSRUFURSBcIiVzXCIiLCBjdHgtPm5hbWUpID09IFJFU1BfT0spIHsKKwkJCWltYXBfaW5mbygiQ3JlYXRlZCBtaXNzaW5nIG1haWxib3hcbiIpOworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJJTUFQIGVycm9yOiBjb3VsZCBub3QgY3JlYXRlIG1pc3NpbmcgbWFpbGJveFxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlicmVhazsKKwl9CisKKwljdHgtPnByZWZpeCA9ICIiOworCXJldHVybiBjdHg7CisKK2JhaWw6CisJaWYgKGNyZWQudXNlcm5hbWUpCisJCWNyZWRlbnRpYWxfcmVqZWN0KCZjcmVkKTsKKwljcmVkZW50aWFsX2NsZWFyKCZjcmVkKTsKKworIG91dDoKKwlpbWFwX2Nsb3NlX3N0b3JlKGN0eCk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBJbnNlcnQgQ1IgY2hhcmFjdGVycyBhcyBuZWNlc3NhcnkgaW4gKm1zZyB0byBlbnN1cmUgdGhhdCBldmVyeSBMRgorICogY2hhcmFjdGVyIGluICptc2cgaXMgcHJlY2VkZWQgYnkgYSBDUi4KKyAqLworc3RhdGljIHZvaWQgbGZfdG9fY3JsZihzdHJ1Y3Qgc3RyYnVmICptc2cpCit7CisJY2hhciAqbmV3OworCXNpemVfdCBpLCBqOworCWNoYXIgbGFzdGM7CisKKwkvKiBGaXJzdCBwYXNzOiB0YWxseSwgaW4gaiwgdGhlIHNpemUgb2YgdGhlIG5ldyBzdHJpbmc6ICovCisJZm9yIChpID0gaiA9IDAsIGxhc3RjID0gJ1wwJzsgaSA8IG1zZy0+bGVuOyBpKyspIHsKKwkJaWYgKG1zZy0+YnVmW2ldID09ICdcbicgJiYgbGFzdGMgIT0gJ1xyJykKKwkJCWorKzsgLyogYSBDUiB3aWxsIG5lZWQgdG8gYmUgYWRkZWQgaGVyZSAqLworCQlsYXN0YyA9IG1zZy0+YnVmW2ldOworCQlqKys7CisJfQorCisJbmV3ID0geG1hbGxvYyhqICsgMSk7CisKKwkvKgorCSAqIFNlY29uZCBwYXNzOiB3cml0ZSB0aGUgbmV3IHN0cmluZy4gIE5vdGUgdGhhdCB0aGlzIGxvb3AgaXMKKwkgKiBvdGhlcndpc2UgaWRlbnRpY2FsIHRvIHRoZSBmaXJzdCBwYXNzLgorCSAqLworCWZvciAoaSA9IGogPSAwLCBsYXN0YyA9ICdcMCc7IGkgPCBtc2ctPmxlbjsgaSsrKSB7CisJCWlmIChtc2ctPmJ1ZltpXSA9PSAnXG4nICYmIGxhc3RjICE9ICdccicpCisJCQluZXdbaisrXSA9ICdccic7CisJCWxhc3RjID0gbmV3W2orK10gPSBtc2ctPmJ1ZltpXTsKKwl9CisJc3RyYnVmX2F0dGFjaChtc2csIG5ldywgaiwgaiArIDEpOworfQorCisvKgorICogU3RvcmUgbXNnIHRvIElNQVAuICBBbHNvIGRldGFjaCBhbmQgZnJlZSB0aGUgZGF0YSBmcm9tIG1zZy0+ZGF0YSwKKyAqIGxlYXZpbmcgbXNnLT5kYXRhIGVtcHR5LgorICovCitzdGF0aWMgaW50IGltYXBfc3RvcmVfbXNnKHN0cnVjdCBpbWFwX3N0b3JlICpjdHgsIHN0cnVjdCBzdHJidWYgKm1zZykKK3sKKwlzdHJ1Y3QgaW1hcCAqaW1hcCA9IGN0eC0+aW1hcDsKKwlzdHJ1Y3QgaW1hcF9jbWRfY2IgY2I7CisJY29uc3QgY2hhciAqcHJlZml4LCAqYm94OworCWludCByZXQ7CisKKwlsZl90b19jcmxmKG1zZyk7CisJbWVtc2V0KCZjYiwgMCwgc2l6ZW9mKGNiKSk7CisKKwljYi5kbGVuID0gbXNnLT5sZW47CisJY2IuZGF0YSA9IHN0cmJ1Zl9kZXRhY2gobXNnLCBOVUxMKTsKKworCWJveCA9IGN0eC0+bmFtZTsKKwlwcmVmaXggPSAhc3RyY21wKGJveCwgIklOQk9YIikgPyAiIiA6IGN0eC0+cHJlZml4OworCXJldCA9IGltYXBfZXhlY19tKGN0eCwgJmNiLCAiQVBQRU5EIFwiJXMlc1wiICIsIHByZWZpeCwgYm94KTsKKwlpbWFwLT5jYXBzID0gaW1hcC0+cmNhcHM7CisJaWYgKHJldCAhPSBEUlZfT0spCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gRFJWX09LOworfQorCitzdGF0aWMgdm9pZCB3cmFwX2luX2h0bWwoc3RydWN0IHN0cmJ1ZiAqbXNnKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RhdGljIGNoYXIgKmNvbnRlbnRfdHlwZSA9ICJDb250ZW50LVR5cGU6IHRleHQvaHRtbDtcbiI7CisJc3RhdGljIGNoYXIgKnByZV9vcGVuID0gIjxwcmU+XG4iOworCXN0YXRpYyBjaGFyICpwcmVfY2xvc2UgPSAiPC9wcmU+XG4iOworCWNvbnN0IGNoYXIgKmJvZHkgPSBzdHJzdHIobXNnLT5idWYsICJcblxuIik7CisKKwlpZiAoIWJvZHkpCisJCXJldHVybjsgLyogSGVhZGVycyBidXQgbm8gYm9keTsgbm8gd3JhcHBpbmcgbmVlZGVkICovCisKKwlib2R5ICs9IDI7CisKKwlzdHJidWZfYWRkKCZidWYsIG1zZy0+YnVmLCBib2R5IC0gbXNnLT5idWYgLSAxKTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIGNvbnRlbnRfdHlwZSk7CisJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcHJlX29wZW4pOworCXN0cmJ1Zl9hZGRzdHJfeG1sX3F1b3RlZCgmYnVmLCBib2R5KTsKKwlzdHJidWZfYWRkc3RyKCZidWYsIHByZV9jbG9zZSk7CisKKwlzdHJidWZfcmVsZWFzZShtc2cpOworCSptc2cgPSBidWY7Cit9CisKKyNkZWZpbmUgQ0hVTktTSVpFIDB4MTAwMAorCitzdGF0aWMgaW50IHJlYWRfbWVzc2FnZShGSUxFICpmLCBzdHJ1Y3Qgc3RyYnVmICphbGxfbXNncykKK3sKKwlkbyB7CisJCWlmIChzdHJidWZfZnJlYWQoYWxsX21zZ3MsIENIVU5LU0laRSwgZikgPD0gMCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKCFmZW9mKGYpKTsKKworCXJldHVybiBmZXJyb3IoZikgPyAtMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfbWVzc2FnZXMoc3RydWN0IHN0cmJ1ZiAqYWxsX21zZ3MpCit7CisJaW50IGNvdW50ID0gMDsKKwljaGFyICpwID0gYWxsX21zZ3MtPmJ1ZjsKKworCXdoaWxlICgxKSB7CisJCWlmIChzdGFydHNfd2l0aChwLCAiRnJvbSAiKSkgeworCQkJcCA9IHN0cnN0cihwKzUsICJcbkZyb206ICIpOworCQkJaWYgKCFwKSBicmVhazsKKwkJCXAgPSBzdHJzdHIocCs3LCAiXG5EYXRlOiAiKTsKKwkJCWlmICghcCkgYnJlYWs7CisJCQlwID0gc3Ryc3RyKHArNywgIlxuU3ViamVjdDogIik7CisJCQlpZiAoIXApIGJyZWFrOworCQkJcCArPSAxMDsKKwkJCWNvdW50Kys7CisJCX0KKwkJcCA9IHN0cnN0cihwKzUsICJcbkZyb20gIik7CisJCWlmICghcCkKKwkJCWJyZWFrOworCQlwKys7CisJfQorCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIENvcHkgdGhlIG5leHQgbWVzc2FnZSBmcm9tIGFsbF9tc2dzLCBzdGFydGluZyBhdCBvZmZzZXQgKm9mcywgdG8KKyAqIG1zZy4gIFVwZGF0ZSAqb2ZzIHRvIHRoZSBzdGFydCBvZiB0aGUgZm9sbG93aW5nIG1lc3NhZ2UuICBSZXR1cm4KKyAqIHRydWUgaWZmIGEgbWVzc2FnZSB3YXMgc3VjY2Vzc2Z1bGx5IGNvcGllZC4KKyAqLworc3RhdGljIGludCBzcGxpdF9tc2coc3RydWN0IHN0cmJ1ZiAqYWxsX21zZ3MsIHN0cnVjdCBzdHJidWYgKm1zZywgaW50ICpvZnMpCit7CisJY2hhciAqcCwgKmRhdGE7CisJc2l6ZV90IGxlbjsKKworCWlmICgqb2ZzID49IGFsbF9tc2dzLT5sZW4pCisJCXJldHVybiAwOworCisJZGF0YSA9ICZhbGxfbXNncy0+YnVmWypvZnNdOworCWxlbiA9IGFsbF9tc2dzLT5sZW4gLSAqb2ZzOworCisJaWYgKGxlbiA8IDUgfHwgIXN0YXJ0c193aXRoKGRhdGEsICJGcm9tICIpKQorCQlyZXR1cm4gMDsKKworCXAgPSBzdHJjaHIoZGF0YSwgJ1xuJyk7CisJaWYgKHApIHsKKwkJcCsrOworCQlsZW4gLT0gcCAtIGRhdGE7CisJCSpvZnMgKz0gcCAtIGRhdGE7CisJCWRhdGEgPSBwOworCX0KKworCXAgPSBzdHJzdHIoZGF0YSwgIlxuRnJvbSAiKTsKKwlpZiAocCkKKwkJbGVuID0gJnBbMV0gLSBkYXRhOworCisJc3RyYnVmX2FkZChtc2csIGRhdGEsIGxlbik7CisJKm9mcyArPSBsZW47CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9pbWFwX2NvbmZpZyh2b2lkKQoreworCWNvbnN0IGNoYXIgKnZhbCA9IE5VTEw7CisKKwlnaXRfY29uZmlnX2dldF9ib29sKCJpbWFwLnNzbHZlcmlmeSIsICZzZXJ2ZXIuc3NsX3ZlcmlmeSk7CisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgiaW1hcC5wcmVmb3JtYXR0ZWRodG1sIiwgJnNlcnZlci51c2VfaHRtbCk7CisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJpbWFwLmZvbGRlciIsICZzZXJ2ZXIuZm9sZGVyKTsKKworCWlmICghZ2l0X2NvbmZpZ19nZXRfdmFsdWUoImltYXAuaG9zdCIsICZ2YWwpKSB7CisJCWlmICghdmFsKSB7CisJCQlnaXRfZGllX2NvbmZpZygiaW1hcC5ob3N0IiwgIk1pc3NpbmcgdmFsdWUgZm9yICdpbWFwLmhvc3QnIik7CisJCX0gZWxzZSB7CisJCQlpZiAoc3RhcnRzX3dpdGgodmFsLCAiaW1hcDoiKSkKKwkJCQl2YWwgKz0gNTsKKwkJCWVsc2UgaWYgKHN0YXJ0c193aXRoKHZhbCwgImltYXBzOiIpKSB7CisJCQkJdmFsICs9IDY7CisJCQkJc2VydmVyLnVzZV9zc2wgPSAxOworCQkJfQorCQkJaWYgKHN0YXJ0c193aXRoKHZhbCwgIi8vIikpCisJCQkJdmFsICs9IDI7CisJCQlzZXJ2ZXIuaG9zdCA9IHhzdHJkdXAodmFsKTsKKwkJfQorCX0KKworCWdpdF9jb25maWdfZ2V0X3N0cmluZygiaW1hcC51c2VyIiwgJnNlcnZlci51c2VyKTsKKwlnaXRfY29uZmlnX2dldF9zdHJpbmcoImltYXAucGFzcyIsICZzZXJ2ZXIucGFzcyk7CisJZ2l0X2NvbmZpZ19nZXRfaW50KCJpbWFwLnBvcnQiLCAmc2VydmVyLnBvcnQpOworCWdpdF9jb25maWdfZ2V0X3N0cmluZygiaW1hcC50dW5uZWwiLCAmc2VydmVyLnR1bm5lbCk7CisJZ2l0X2NvbmZpZ19nZXRfc3RyaW5nKCJpbWFwLmF1dGhtZXRob2QiLCAmc2VydmVyLmF1dGhfbWV0aG9kKTsKK30KKworc3RhdGljIGludCBhcHBlbmRfbXNnc190b19pbWFwKHN0cnVjdCBpbWFwX3NlcnZlcl9jb25mICpzZXJ2ZXIsCisJCQkgICAgICAgc3RydWN0IHN0cmJ1ZiogYWxsX21zZ3MsIGludCB0b3RhbCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBpbWFwX3N0b3JlICpjdHggPSBOVUxMOworCWludCBvZnMgPSAwOworCWludCByOworCWludCBuID0gMDsKKworCWN0eCA9IGltYXBfb3Blbl9zdG9yZShzZXJ2ZXIsIHNlcnZlci0+Zm9sZGVyKTsKKwlpZiAoIWN0eCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBvcGVuIHN0b3JlXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCWN0eC0+bmFtZSA9IHNlcnZlci0+Zm9sZGVyOworCisJZnByaW50ZihzdGRlcnIsICJzZW5kaW5nICVkIG1lc3NhZ2Ulc1xuIiwgdG90YWwsICh0b3RhbCAhPSAxKSA/ICJzIiA6ICIiKTsKKwl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBwZXJjZW50ID0gbiAqIDEwMCAvIHRvdGFsOworCisJCWZwcmludGYoc3RkZXJyLCAiJTR1JSUgKCVkLyVkKSBkb25lXHIiLCBwZXJjZW50LCBuLCB0b3RhbCk7CisKKwkJaWYgKCFzcGxpdF9tc2coYWxsX21zZ3MsICZtc2csICZvZnMpKQorCQkJYnJlYWs7CisJCWlmIChzZXJ2ZXItPnVzZV9odG1sKQorCQkJd3JhcF9pbl9odG1sKCZtc2cpOworCQlyID0gaW1hcF9zdG9yZV9tc2coY3R4LCAmbXNnKTsKKwkJaWYgKHIgIT0gRFJWX09LKQorCQkJYnJlYWs7CisJCW4rKzsKKwl9CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworCisJaW1hcF9jbG9zZV9zdG9yZShjdHgpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBVU0VfQ1VSTF9GT1JfSU1BUF9TRU5ECitzdGF0aWMgQ1VSTCAqc2V0dXBfY3VybChzdHJ1Y3QgaW1hcF9zZXJ2ZXJfY29uZiAqc3J2YykKK3sKKwlDVVJMICpjdXJsOworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJaWYgKGN1cmxfZ2xvYmFsX2luaXQoQ1VSTF9HTE9CQUxfQUxMKSAhPSBDVVJMRV9PSykKKwkJZGllKCJjdXJsX2dsb2JhbF9pbml0IGZhaWxlZCIpOworCisJY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CisKKwlpZiAoIWN1cmwpCisJCWRpZSgiY3VybF9lYXN5X2luaXQgZmFpbGVkIik7CisKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVNFUk5BTUUsIHNlcnZlci51c2VyKTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfUEFTU1dPUkQsIHNlcnZlci5wYXNzKTsKKworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIHNlcnZlci5ob3N0KTsKKwlpZiAoIXBhdGgubGVuIHx8IHBhdGguYnVmW3BhdGgubGVuIC0gMV0gIT0gJy8nKQorCQlzdHJidWZfYWRkY2goJnBhdGgsICcvJyk7CisJc3RyYnVmX2FkZHN0cigmcGF0aCwgc2VydmVyLmZvbGRlcik7CisKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVJMLCBwYXRoLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9QT1JULCBzZXJ2ZXIucG9ydCk7CisKKwlpZiAoc2VydmVyLmF1dGhfbWV0aG9kKSB7CisJCXN0cnVjdCBzdHJidWYgYXV0aCA9IFNUUkJVRl9JTklUOworCQlzdHJidWZfYWRkc3RyKCZhdXRoLCAiQVVUSD0iKTsKKwkJc3RyYnVmX2FkZHN0cigmYXV0aCwgc2VydmVyLmF1dGhfbWV0aG9kKTsKKwkJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX0xPR0lOX09QVElPTlMsIGF1dGguYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmF1dGgpOworCX0KKworCWlmICghc2VydmVyLnVzZV9zc2wpCisJCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9VU0VfU1NMLCAobG9uZylDVVJMVVNFU1NMX1RSWSk7CisKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIHNlcnZlci5zc2xfdmVyaWZ5KTsKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIHNlcnZlci5zc2xfdmVyaWZ5KTsKKworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFERlVOQ1RJT04sIGZyZWFkX2J1ZmZlcik7CisKKwljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfVVBMT0FELCAxTCk7CisKKwlpZiAoMCA8IHZlcmJvc2l0eSB8fCBnZXRlbnYoIkdJVF9DVVJMX1ZFUkJPU0UiKSkKKwkJY3VybF9lYXN5X3NldG9wdChjdXJsLCBDVVJMT1BUX1ZFUkJPU0UsIDFMKTsKKworCXJldHVybiBjdXJsOworfQorCitzdGF0aWMgaW50IGN1cmxfYXBwZW5kX21zZ3NfdG9faW1hcChzdHJ1Y3QgaW1hcF9zZXJ2ZXJfY29uZiAqc2VydmVyLAorCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmKiBhbGxfbXNncywgaW50IHRvdGFsKSB7CisJaW50IG9mcyA9IDA7CisJaW50IG4gPSAwOworCXN0cnVjdCBidWZmZXIgbXNnYnVmID0geyBTVFJCVUZfSU5JVCwgMCB9OworCUNVUkwgKmN1cmw7CisJQ1VSTGNvZGUgcmVzID0gQ1VSTEVfT0s7CisKKwljdXJsID0gc2V0dXBfY3VybChzZXJ2ZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VSTE9QVF9SRUFEREFUQSwgJm1zZ2J1Zik7CisKKwlmcHJpbnRmKHN0ZGVyciwgInNlbmRpbmcgJWQgbWVzc2FnZSVzXG4iLCB0b3RhbCwgKHRvdGFsICE9IDEpID8gInMiIDogIiIpOworCXdoaWxlICgxKSB7CisJCXVuc2lnbmVkIHBlcmNlbnQgPSBuICogMTAwIC8gdG90YWw7CisJCWludCBwcmV2X2xlbjsKKworCQlmcHJpbnRmKHN0ZGVyciwgIiU0dSUlICglZC8lZCkgZG9uZVxyIiwgcGVyY2VudCwgbiwgdG90YWwpOworCisJCXByZXZfbGVuID0gbXNnYnVmLmJ1Zi5sZW47CisJCWlmICghc3BsaXRfbXNnKGFsbF9tc2dzLCAmbXNnYnVmLmJ1ZiwgJm9mcykpCisJCQlicmVhazsKKwkJaWYgKHNlcnZlci0+dXNlX2h0bWwpCisJCQl3cmFwX2luX2h0bWwoJm1zZ2J1Zi5idWYpOworCQlsZl90b19jcmxmKCZtc2didWYuYnVmKTsKKworCQljdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfSU5GSUxFU0laRV9MQVJHRSwKKwkJCQkgKGN1cmxfb2ZmX3QpKG1zZ2J1Zi5idWYubGVuLXByZXZfbGVuKSk7CisKKwkJcmVzID0gY3VybF9lYXN5X3BlcmZvcm0oY3VybCk7CisKKwkJaWYocmVzICE9IENVUkxFX09LKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImN1cmxfZWFzeV9wZXJmb3JtKCkgZmFpbGVkOiAlc1xuIiwKKwkJCQkJY3VybF9lYXN5X3N0cmVycm9yKHJlcykpOworCQkJYnJlYWs7CisJCX0KKworCQluKys7CisJfQorCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworCWN1cmxfZWFzeV9jbGVhbnVwKGN1cmwpOworCWN1cmxfZ2xvYmFsX2NsZWFudXAoKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGFsbF9tc2dzID0gU1RSQlVGX0lOSVQ7CisJaW50IHRvdGFsOworCWludCBub25naXRfb2s7CisKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCisJZ2l0X3NldHVwX2dldHRleHQoKTsKKworCXNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KCZub25naXRfb2spOworCWdpdF9pbWFwX2NvbmZpZygpOworCisJYXJnYyA9IHBhcnNlX29wdGlvbnMoYXJnYywgKGNvbnN0IGNoYXIgKiopYXJndiwgIiIsIGltYXBfc2VuZF9vcHRpb25zLCBpbWFwX3NlbmRfdXNhZ2UsIDApOworCisJaWYgKGFyZ2MpCisJCXVzYWdlX3dpdGhfb3B0aW9ucyhpbWFwX3NlbmRfdXNhZ2UsIGltYXBfc2VuZF9vcHRpb25zKTsKKworI2lmbmRlZiBVU0VfQ1VSTF9GT1JfSU1BUF9TRU5ECisJaWYgKHVzZV9jdXJsKSB7CisJCXdhcm5pbmcoIi0tY3VybCBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQiKTsKKwkJdXNlX2N1cmwgPSAwOworCX0KKyNlbGlmIGRlZmluZWQoTk9fT1BFTlNTTCkKKwlpZiAoIXVzZV9jdXJsKSB7CisJCXdhcm5pbmcoIi0tbm8tY3VybCBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnVpbGQiKTsKKwkJdXNlX2N1cmwgPSAxOworCX0KKyNlbmRpZgorCisJaWYgKCFzZXJ2ZXIucG9ydCkKKwkJc2VydmVyLnBvcnQgPSBzZXJ2ZXIudXNlX3NzbCA/IDk5MyA6IDE0MzsKKworCWlmICghc2VydmVyLmZvbGRlcikgeworCQlmcHJpbnRmKHN0ZGVyciwgIm5vIGltYXAgc3RvcmUgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICghc2VydmVyLmhvc3QpIHsKKwkJaWYgKCFzZXJ2ZXIudHVubmVsKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIm5vIGltYXAgaG9zdCBzcGVjaWZpZWRcbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJc2VydmVyLmhvc3QgPSAidHVubmVsIjsKKwl9CisKKwkvKiByZWFkIHRoZSBtZXNzYWdlcyAqLworCWlmIChyZWFkX21lc3NhZ2Uoc3RkaW4sICZhbGxfbXNncykpIHsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvciByZWFkaW5nIGlucHV0XG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGFsbF9tc2dzLmxlbiA9PSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAibm90aGluZyB0byBzZW5kXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJdG90YWwgPSBjb3VudF9tZXNzYWdlcygmYWxsX21zZ3MpOworCWlmICghdG90YWwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJubyBtZXNzYWdlcyB0byBzZW5kXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyogd3JpdGUgaXQgdG8gdGhlIGltYXAgc2VydmVyICovCisKKwlpZiAoc2VydmVyLnR1bm5lbCkKKwkJcmV0dXJuIGFwcGVuZF9tc2dzX3RvX2ltYXAoJnNlcnZlciwgJmFsbF9tc2dzLCB0b3RhbCk7CisKKyNpZmRlZiBVU0VfQ1VSTF9GT1JfSU1BUF9TRU5ECisJaWYgKHVzZV9jdXJsKQorCQlyZXR1cm4gY3VybF9hcHBlbmRfbXNnc190b19pbWFwKCZzZXJ2ZXIsICZhbGxfbXNncywgdG90YWwpOworI2VuZGlmCisKKwlyZXR1cm4gYXBwZW5kX21zZ3NfdG9faW1hcCgmc2VydmVyLCAmYWxsX21zZ3MsIHRvdGFsKTsKK30KZGlmZiAtLWdpdCBhL2toYXNoLmggYi9raGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NjQ3NWEKLS0tIC9kZXYvbnVsbAorKysgYi9raGFzaC5oCkBAIC0wLDAgKzEsMzI3IEBACisvKiBUaGUgTUlUIExpY2Vuc2UKKworICAgQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCAyMDExIGJ5IEF0dHJhY3RpdmUgQ2hhb3MgPGF0dHJhY3RvckBsaXZlLmNvLnVrPgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAgIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAgIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICAgQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAgIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAgIFNPRlRXQVJFLgorKi8KKworI2lmbmRlZiBfX0FDX0tIQVNIX0gKKyNkZWZpbmUgX19BQ19LSEFTSF9ICisKKyNkZWZpbmUgQUNfVkVSU0lPTl9LSEFTSF9IICIwLjIuOCIKKwordHlwZWRlZiB1aW50MzJfdCBraGludDMyX3Q7Cit0eXBlZGVmIHVpbnQ2NF90IGtoaW50NjRfdDsKKwordHlwZWRlZiBraGludDMyX3Qga2hpbnRfdDsKK3R5cGVkZWYga2hpbnRfdCBraGl0ZXJfdDsKKworI2RlZmluZSBfX2FjX2lzZW1wdHkoZmxhZywgaSkgKChmbGFnW2k+PjRdPj4oKGkmMHhmVSk8PDEpKSYyKQorI2RlZmluZSBfX2FjX2lzZGVsKGZsYWcsIGkpICgoZmxhZ1tpPj40XT4+KChpJjB4ZlUpPDwxKSkmMSkKKyNkZWZpbmUgX19hY19pc2VpdGhlcihmbGFnLCBpKSAoKGZsYWdbaT4+NF0+PigoaSYweGZVKTw8MSkpJjMpCisjZGVmaW5lIF9fYWNfc2V0X2lzZGVsX2ZhbHNlKGZsYWcsIGkpIChmbGFnW2k+PjRdJj1+KDF1bDw8KChpJjB4ZlUpPDwxKSkpCisjZGVmaW5lIF9fYWNfc2V0X2lzZW1wdHlfZmFsc2UoZmxhZywgaSkgKGZsYWdbaT4+NF0mPX4oMnVsPDwoKGkmMHhmVSk8PDEpKSkKKyNkZWZpbmUgX19hY19zZXRfaXNib3RoX2ZhbHNlKGZsYWcsIGkpIChmbGFnW2k+PjRdJj1+KDN1bDw8KChpJjB4ZlUpPDwxKSkpCisjZGVmaW5lIF9fYWNfc2V0X2lzZGVsX3RydWUoZmxhZywgaSkgKGZsYWdbaT4+NF18PTF1bDw8KChpJjB4ZlUpPDwxKSkKKworI2RlZmluZSBfX2FjX2ZzaXplKG0pICgobSkgPCAxNj8gMSA6IChtKT4+NCkKKworI2RlZmluZSBrcm91bmR1cDMyKHgpICgtLSh4KSwgKHgpfD0oeCk+PjEsICh4KXw9KHgpPj4yLCAoeCl8PSh4KT4+NCwgKHgpfD0oeCk+PjgsICh4KXw9KHgpPj4xNiwgKysoeCkpCisKK3N0YXRpYyBpbmxpbmUga2hpbnRfdCBfX2FjX1gzMV9oYXNoX3N0cmluZyhjb25zdCBjaGFyICpzKQoreworCWtoaW50X3QgaCA9IChraGludF90KSpzOworCWlmIChoKSBmb3IgKCsrcyA7ICpzOyArK3MpIGggPSAoaCA8PCA1KSAtIGggKyAoa2hpbnRfdCkqczsKKwlyZXR1cm4gaDsKK30KKworI2RlZmluZSBraF9zdHJfaGFzaF9mdW5jKGtleSkgX19hY19YMzFfaGFzaF9zdHJpbmcoa2V5KQorI2RlZmluZSBraF9zdHJfaGFzaF9lcXVhbChhLCBiKSAoc3RyY21wKGEsIGIpID09IDApCisKK3N0YXRpYyBjb25zdCBkb3VibGUgX19hY19IQVNIX1VQUEVSID0gMC43NzsKKworI2RlZmluZSBfX0tIQVNIX1RZUEUobmFtZSwga2hrZXlfdCwga2h2YWxfdCkgXAorCXR5cGVkZWYgc3RydWN0IHsgXAorCQlraGludF90IG5fYnVja2V0cywgc2l6ZSwgbl9vY2N1cGllZCwgdXBwZXJfYm91bmQ7IFwKKwkJa2hpbnQzMl90ICpmbGFnczsgXAorCQlraGtleV90ICprZXlzOyBcCisJCWtodmFsX3QgKnZhbHM7IFwKKwl9IGtoXyMjbmFtZSMjX3Q7CisKKyNkZWZpbmUgX19LSEFTSF9QUk9UT1RZUEVTKG5hbWUsIGtoa2V5X3QsIGtodmFsX3QpCSAJCQkJCVwKKwlleHRlcm4ga2hfIyNuYW1lIyNfdCAqa2hfaW5pdF8jI25hbWUodm9pZCk7CQkJCQkJCVwKKwlleHRlcm4gdm9pZCBraF9kZXN0cm95XyMjbmFtZShraF8jI25hbWUjI190ICpoKTsJCQkJCVwKKwlleHRlcm4gdm9pZCBraF9jbGVhcl8jI25hbWUoa2hfIyNuYW1lIyNfdCAqaCk7CQkJCQkJXAorCWV4dGVybiBraGludF90IGtoX2dldF8jI25hbWUoY29uc3Qga2hfIyNuYW1lIyNfdCAqaCwga2hrZXlfdCBrZXkpOyAJXAorCWV4dGVybiBpbnQga2hfcmVzaXplXyMjbmFtZShraF8jI25hbWUjI190ICpoLCBraGludF90IG5ld19uX2J1Y2tldHMpOyBcCisJZXh0ZXJuIGtoaW50X3Qga2hfcHV0XyMjbmFtZShraF8jI25hbWUjI190ICpoLCBraGtleV90IGtleSwgaW50ICpyZXQpOyBcCisJZXh0ZXJuIHZvaWQga2hfZGVsXyMjbmFtZShraF8jI25hbWUjI190ICpoLCBraGludF90IHgpOworCisjZGVmaW5lIF9fS0hBU0hfSU1QTChuYW1lLCBTQ09QRSwga2hrZXlfdCwga2h2YWxfdCwga2hfaXNfbWFwLCBfX2hhc2hfZnVuYywgX19oYXNoX2VxdWFsKSBcCisJU0NPUEUga2hfIyNuYW1lIyNfdCAqa2hfaW5pdF8jI25hbWUodm9pZCkgewkJCQkJCQlcCisJCXJldHVybiAoa2hfIyNuYW1lIyNfdCopeGNhbGxvYygxLCBzaXplb2Yoa2hfIyNuYW1lIyNfdCkpOwkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwlTQ09QRSB2b2lkIGtoX2Rlc3Ryb3lfIyNuYW1lKGtoXyMjbmFtZSMjX3QgKmgpCQkJCQkJXAorCXsJCQkJCQkJCQkJCQkJCQkJCVwKKwkJaWYgKGgpIHsJCQkJCQkJCQkJCQkJCVwKKwkJCWZyZWUoKHZvaWQgKiloLT5rZXlzKTsgZnJlZShoLT5mbGFncyk7CQkJCQlcCisJCQlmcmVlKCh2b2lkICopaC0+dmFscyk7CQkJCQkJCQkJCVwKKwkJCWZyZWUoaCk7CQkJCQkJCQkJCQkJCVwKKwkJfQkJCQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJXAorCVNDT1BFIHZvaWQga2hfY2xlYXJfIyNuYW1lKGtoXyMjbmFtZSMjX3QgKmgpCQkJCQkJXAorCXsJCQkJCQkJCQkJCQkJCQkJCVwKKwkJaWYgKGggJiYgaC0+ZmxhZ3MpIHsJCQkJCQkJCQkJCVwKKwkJCW1lbXNldChoLT5mbGFncywgMHhhYSwgX19hY19mc2l6ZShoLT5uX2J1Y2tldHMpICogc2l6ZW9mKGtoaW50MzJfdCkpOyBcCisJCQloLT5zaXplID0gaC0+bl9vY2N1cGllZCA9IDA7CQkJCQkJCQlcCisJCX0JCQkJCQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwlTQ09QRSBraGludF90IGtoX2dldF8jI25hbWUoY29uc3Qga2hfIyNuYW1lIyNfdCAqaCwga2hrZXlfdCBrZXkpIAlcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQlpZiAoaC0+bl9idWNrZXRzKSB7CQkJCQkJCQkJCQkJXAorCQkJa2hpbnRfdCBrLCBpLCBsYXN0LCBtYXNrLCBzdGVwID0gMDsgXAorCQkJbWFzayA9IGgtPm5fYnVja2V0cyAtIDE7CQkJCQkJCQkJXAorCQkJayA9IF9faGFzaF9mdW5jKGtleSk7IGkgPSBrICYgbWFzazsJCQkJCQkJXAorCQkJbGFzdCA9IGk7IFwKKwkJCXdoaWxlICghX19hY19pc2VtcHR5KGgtPmZsYWdzLCBpKSAmJiAoX19hY19pc2RlbChoLT5mbGFncywgaSkgfHwgIV9faGFzaF9lcXVhbChoLT5rZXlzW2ldLCBrZXkpKSkgeyBcCisJCQkJaSA9IChpICsgKCsrc3RlcCkpICYgbWFzazsgXAorCQkJCWlmIChpID09IGxhc3QpIHJldHVybiBoLT5uX2J1Y2tldHM7CQkJCQkJXAorCQkJfQkJCQkJCQkJCQkJCQkJCVwKKwkJCXJldHVybiBfX2FjX2lzZWl0aGVyKGgtPmZsYWdzLCBpKT8gaC0+bl9idWNrZXRzIDogaTsJCVwKKwkJfSBlbHNlIHJldHVybiAwOwkJCQkJCQkJCQkJCVwKKwl9CQkJCQkJCQkJCQkJCQkJCQlcCisJU0NPUEUgaW50IGtoX3Jlc2l6ZV8jI25hbWUoa2hfIyNuYW1lIyNfdCAqaCwga2hpbnRfdCBuZXdfbl9idWNrZXRzKSBcCisJeyAvKiBUaGlzIGZ1bmN0aW9uIHVzZXMgMC4yNSpuX2J1Y2tldHMgYnl0ZXMgb2Ygd29ya2luZyBzcGFjZSBpbnN0ZWFkIG9mIFtzaXplb2Yoa2V5X3QrdmFsX3QpKy4yNV0qbl9idWNrZXRzLiAqLyBcCisJCWtoaW50MzJfdCAqbmV3X2ZsYWdzID0gTlVMTDsJCQkJCQkJCQkJXAorCQlraGludF90IGogPSAxOwkJCQkJCQkJCQkJCQlcCisJCXsJCQkJCQkJCQkJCQkJCQkJXAorCQkJa3JvdW5kdXAzMihuZXdfbl9idWNrZXRzKTsgCQkJCQkJCQkJXAorCQkJaWYgKG5ld19uX2J1Y2tldHMgPCA0KSBuZXdfbl9idWNrZXRzID0gNDsJCQkJCVwKKwkJCWlmIChoLT5zaXplID49IChraGludF90KShuZXdfbl9idWNrZXRzICogX19hY19IQVNIX1VQUEVSICsgMC41KSkgaiA9IDA7CS8qIHJlcXVlc3RlZCBzaXplIGlzIHRvbyBzbWFsbCAqLyBcCisJCQllbHNlIHsgLyogaGFzaCB0YWJsZSBzaXplIHRvIGJlIGNoYW5nZWQgKHNocmluayBvciBleHBhbmQpOyByZWhhc2ggKi8gXAorCQkJCW5ld19mbGFncyA9IChraGludDMyX3QqKXhtYWxsb2MoX19hY19mc2l6ZShuZXdfbl9idWNrZXRzKSAqIHNpemVvZihraGludDMyX3QpKTsJXAorCQkJCWlmICghbmV3X2ZsYWdzKSByZXR1cm4gLTE7CQkJCQkJCQlcCisJCQkJbWVtc2V0KG5ld19mbGFncywgMHhhYSwgX19hY19mc2l6ZShuZXdfbl9idWNrZXRzKSAqIHNpemVvZihraGludDMyX3QpKTsgXAorCQkJCWlmIChoLT5uX2J1Y2tldHMgPCBuZXdfbl9idWNrZXRzKSB7CS8qIGV4cGFuZCAqLwkJXAorCQkJCQlSRUFMTE9DX0FSUkFZKGgtPmtleXMsIG5ld19uX2J1Y2tldHMpOyBcCisJCQkJCWlmIChraF9pc19tYXApIHsJCQkJCQkJCQlcCisJCQkJCQlSRUFMTE9DX0FSUkFZKGgtPnZhbHMsIG5ld19uX2J1Y2tldHMpOyBcCisJCQkJCX0JCQkJCQkJCQkJCQkJXAorCQkJCX0gLyogb3RoZXJ3aXNlIHNocmluayAqLwkJCQkJCQkJXAorCQkJfQkJCQkJCQkJCQkJCQkJCVwKKwkJfQkJCQkJCQkJCQkJCQkJCQlcCisJCWlmIChqKSB7IC8qIHJlaGFzaGluZyBpcyBuZWVkZWQgKi8JCQkJCQkJCVwKKwkJCWZvciAoaiA9IDA7IGogIT0gaC0+bl9idWNrZXRzOyArK2opIHsJCQkJCQlcCisJCQkJaWYgKF9fYWNfaXNlaXRoZXIoaC0+ZmxhZ3MsIGopID09IDApIHsJCQkJCVwKKwkJCQkJa2hrZXlfdCBrZXkgPSBoLT5rZXlzW2pdOwkJCQkJCQlcCisJCQkJCWtodmFsX3QgdmFsOwkJCQkJCQkJCQlcCisJCQkJCWtoaW50X3QgbmV3X21hc2s7CQkJCQkJCQkJXAorCQkJCQluZXdfbWFzayA9IG5ld19uX2J1Y2tldHMgLSAxOyAJCQkJCQlcCisJCQkJCWlmIChraF9pc19tYXApIHZhbCA9IGgtPnZhbHNbal07CQkJCQlcCisJCQkJCV9fYWNfc2V0X2lzZGVsX3RydWUoaC0+ZmxhZ3MsIGopOwkJCQkJXAorCQkJCQl3aGlsZSAoMSkgeyAvKiBraWNrLW91dCBwcm9jZXNzOyBzb3J0IG9mIGxpa2UgaW4gQ3Vja29vIGhhc2hpbmcgKi8gXAorCQkJCQkJa2hpbnRfdCBrLCBpLCBzdGVwID0gMDsgXAorCQkJCQkJayA9IF9faGFzaF9mdW5jKGtleSk7CQkJCQkJCVwKKwkJCQkJCWkgPSBrICYgbmV3X21hc2s7CQkJCQkJCQlcCisJCQkJCQl3aGlsZSAoIV9fYWNfaXNlbXB0eShuZXdfZmxhZ3MsIGkpKSBpID0gKGkgKyAoKytzdGVwKSkgJiBuZXdfbWFzazsgXAorCQkJCQkJX19hY19zZXRfaXNlbXB0eV9mYWxzZShuZXdfZmxhZ3MsIGkpOwkJCVwKKwkJCQkJCWlmIChpIDwgaC0+bl9idWNrZXRzICYmIF9fYWNfaXNlaXRoZXIoaC0+ZmxhZ3MsIGkpID09IDApIHsgLyoga2ljayBvdXQgdGhlIGV4aXN0aW5nIGVsZW1lbnQgKi8gXAorCQkJCQkJCXsga2hrZXlfdCB0bXAgPSBoLT5rZXlzW2ldOyBoLT5rZXlzW2ldID0ga2V5OyBrZXkgPSB0bXA7IH0gXAorCQkJCQkJCWlmIChraF9pc19tYXApIHsga2h2YWxfdCB0bXAgPSBoLT52YWxzW2ldOyBoLT52YWxzW2ldID0gdmFsOyB2YWwgPSB0bXA7IH0gXAorCQkJCQkJCV9fYWNfc2V0X2lzZGVsX3RydWUoaC0+ZmxhZ3MsIGkpOyAvKiBtYXJrIGl0IGFzIGRlbGV0ZWQgaW4gdGhlIG9sZCBoYXNoIHRhYmxlICovIFwKKwkJCQkJCX0gZWxzZSB7IC8qIHdyaXRlIHRoZSBlbGVtZW50IGFuZCBqdW1wIG91dCBvZiB0aGUgbG9vcCAqLyBcCisJCQkJCQkJaC0+a2V5c1tpXSA9IGtleTsJCQkJCQkJXAorCQkJCQkJCWlmIChraF9pc19tYXApIGgtPnZhbHNbaV0gPSB2YWw7CQkJXAorCQkJCQkJCWJyZWFrOwkJCQkJCQkJCQlcCisJCQkJCQl9CQkJCQkJCQkJCQkJXAorCQkJCQl9CQkJCQkJCQkJCQkJCVwKKwkJCQl9CQkJCQkJCQkJCQkJCQlcCisJCQl9CQkJCQkJCQkJCQkJCQkJXAorCQkJaWYgKGgtPm5fYnVja2V0cyA+IG5ld19uX2J1Y2tldHMpIHsgLyogc2hyaW5rIHRoZSBoYXNoIHRhYmxlICovIFwKKwkJCQlSRUFMTE9DX0FSUkFZKGgtPmtleXMsIG5ld19uX2J1Y2tldHMpOyBcCisJCQkJaWYgKGtoX2lzX21hcCkgUkVBTExPQ19BUlJBWShoLT52YWxzLCBuZXdfbl9idWNrZXRzKTsgXAorCQkJfQkJCQkJCQkJCQkJCQkJCVwKKwkJCWZyZWUoaC0+ZmxhZ3MpOyAvKiBmcmVlIHRoZSB3b3JraW5nIHNwYWNlICovCQkJCVwKKwkJCWgtPmZsYWdzID0gbmV3X2ZsYWdzOwkJCQkJCQkJCQlcCisJCQloLT5uX2J1Y2tldHMgPSBuZXdfbl9idWNrZXRzOwkJCQkJCQkJXAorCQkJaC0+bl9vY2N1cGllZCA9IGgtPnNpemU7CQkJCQkJCQkJXAorCQkJaC0+dXBwZXJfYm91bmQgPSAoa2hpbnRfdCkoaC0+bl9idWNrZXRzICogX19hY19IQVNIX1VQUEVSICsgMC41KTsgXAorCQl9CQkJCQkJCQkJCQkJCQkJCVwKKwkJcmV0dXJuIDA7CQkJCQkJCQkJCQkJCQlcCisJfQkJCQkJCQkJCQkJCQkJCQkJXAorCVNDT1BFIGtoaW50X3Qga2hfcHV0XyMjbmFtZShraF8jI25hbWUjI190ICpoLCBraGtleV90IGtleSwgaW50ICpyZXQpIFwKKwl7CQkJCQkJCQkJCQkJCQkJCQlcCisJCWtoaW50X3QgeDsJCQkJCQkJCQkJCQkJCVwKKwkJaWYgKGgtPm5fb2NjdXBpZWQgPj0gaC0+dXBwZXJfYm91bmQpIHsgLyogdXBkYXRlIHRoZSBoYXNoIHRhYmxlICovIFwKKwkJCWlmIChoLT5uX2J1Y2tldHMgPiAoaC0+c2l6ZTw8MSkpIHsJCQkJCQkJXAorCQkJCWlmIChraF9yZXNpemVfIyNuYW1lKGgsIGgtPm5fYnVja2V0cyAtIDEpIDwgMCkgeyAvKiBjbGVhciAiZGVsZXRlZCIgZWxlbWVudHMgKi8gXAorCQkJCQkqcmV0ID0gLTE7IHJldHVybiBoLT5uX2J1Y2tldHM7CQkJCQkJXAorCQkJCX0JCQkJCQkJCQkJCQkJCVwKKwkJCX0gZWxzZSBpZiAoa2hfcmVzaXplXyMjbmFtZShoLCBoLT5uX2J1Y2tldHMgKyAxKSA8IDApIHsgLyogZXhwYW5kIHRoZSBoYXNoIHRhYmxlICovIFwKKwkJCQkqcmV0ID0gLTE7IHJldHVybiBoLT5uX2J1Y2tldHM7CQkJCQkJCVwKKwkJCX0JCQkJCQkJCQkJCQkJCQlcCisJCX0gLyogVE9ETzogdG8gaW1wbGVtZW50IGF1dG9tYXRpY2FsbHkgc2hyaW5raW5nOyByZXNpemUoKSBhbHJlYWR5IHN1cHBvcnQgc2hyaW5raW5nICovIFwKKwkJewkJCQkJCQkJCQkJCQkJCQlcCisJCQlraGludF90IGssIGksIHNpdGUsIGxhc3QsIG1hc2sgPSBoLT5uX2J1Y2tldHMgLSAxLCBzdGVwID0gMDsgXAorCQkJeCA9IHNpdGUgPSBoLT5uX2J1Y2tldHM7IGsgPSBfX2hhc2hfZnVuYyhrZXkpOyBpID0gayAmIG1hc2s7IFwKKwkJCWlmIChfX2FjX2lzZW1wdHkoaC0+ZmxhZ3MsIGkpKSB4ID0gaTsgLyogZm9yIHNwZWVkIHVwICovCVwKKwkJCWVsc2UgewkJCQkJCQkJCQkJCQkJXAorCQkJCWxhc3QgPSBpOyBcCisJCQkJd2hpbGUgKCFfX2FjX2lzZW1wdHkoaC0+ZmxhZ3MsIGkpICYmIChfX2FjX2lzZGVsKGgtPmZsYWdzLCBpKSB8fCAhX19oYXNoX2VxdWFsKGgtPmtleXNbaV0sIGtleSkpKSB7IFwKKwkJCQkJaWYgKF9fYWNfaXNkZWwoaC0+ZmxhZ3MsIGkpKSBzaXRlID0gaTsJCQkJXAorCQkJCQlpID0gKGkgKyAoKytzdGVwKSkgJiBtYXNrOyBcCisJCQkJCWlmIChpID09IGxhc3QpIHsgeCA9IHNpdGU7IGJyZWFrOyB9CQkJCQlcCisJCQkJfQkJCQkJCQkJCQkJCQkJXAorCQkJCWlmICh4ID09IGgtPm5fYnVja2V0cykgewkJCQkJCQkJXAorCQkJCQlpZiAoX19hY19pc2VtcHR5KGgtPmZsYWdzLCBpKSAmJiBzaXRlICE9IGgtPm5fYnVja2V0cykgeCA9IHNpdGU7IFwKKwkJCQkJZWxzZSB4ID0gaTsJCQkJCQkJCQkJCVwKKwkJCQl9CQkJCQkJCQkJCQkJCQlcCisJCQl9CQkJCQkJCQkJCQkJCQkJXAorCQl9CQkJCQkJCQkJCQkJCQkJCVwKKwkJaWYgKF9fYWNfaXNlbXB0eShoLT5mbGFncywgeCkpIHsgLyogbm90IHByZXNlbnQgYXQgYWxsICovCQlcCisJCQloLT5rZXlzW3hdID0ga2V5OwkJCQkJCQkJCQkJXAorCQkJX19hY19zZXRfaXNib3RoX2ZhbHNlKGgtPmZsYWdzLCB4KTsJCQkJCQkJXAorCQkJKytoLT5zaXplOyArK2gtPm5fb2NjdXBpZWQ7CQkJCQkJCQkJXAorCQkJKnJldCA9IDE7CQkJCQkJCQkJCQkJCVwKKwkJfSBlbHNlIGlmIChfX2FjX2lzZGVsKGgtPmZsYWdzLCB4KSkgeyAvKiBkZWxldGVkICovCQkJCVwKKwkJCWgtPmtleXNbeF0gPSBrZXk7CQkJCQkJCQkJCQlcCisJCQlfX2FjX3NldF9pc2JvdGhfZmFsc2UoaC0+ZmxhZ3MsIHgpOwkJCQkJCQlcCisJCQkrK2gtPnNpemU7CQkJCQkJCQkJCQkJCVwKKwkJCSpyZXQgPSAyOwkJCQkJCQkJCQkJCQlcCisJCX0gZWxzZSAqcmV0ID0gMDsgLyogRG9uJ3QgdG91Y2ggaC0+a2V5c1t4XSBpZiBwcmVzZW50IGFuZCBub3QgZGVsZXRlZCAqLyBcCisJCXJldHVybiB4OwkJCQkJCQkJCQkJCQkJXAorCX0JCQkJCQkJCQkJCQkJCQkJCVwKKwlTQ09QRSB2b2lkIGtoX2RlbF8jI25hbWUoa2hfIyNuYW1lIyNfdCAqaCwga2hpbnRfdCB4KQkJCQlcCisJewkJCQkJCQkJCQkJCQkJCQkJXAorCQlpZiAoeCAhPSBoLT5uX2J1Y2tldHMgJiYgIV9fYWNfaXNlaXRoZXIoaC0+ZmxhZ3MsIHgpKSB7CQkJXAorCQkJX19hY19zZXRfaXNkZWxfdHJ1ZShoLT5mbGFncywgeCk7CQkJCQkJCVwKKwkJCS0taC0+c2l6ZTsJCQkJCQkJCQkJCQkJXAorCQl9CQkJCQkJCQkJCQkJCQkJCVwKKwl9CisKKyNkZWZpbmUgS0hBU0hfREVDTEFSRShuYW1lLCBraGtleV90LCBraHZhbF90KQkJIAkJCQkJXAorCV9fS0hBU0hfVFlQRShuYW1lLCBraGtleV90LCBraHZhbF90KSAJCQkJCQkJCVwKKwlfX0tIQVNIX1BST1RPVFlQRVMobmFtZSwga2hrZXlfdCwga2h2YWxfdCkKKworI2RlZmluZSBLSEFTSF9JTklUMihuYW1lLCBTQ09QRSwga2hrZXlfdCwga2h2YWxfdCwga2hfaXNfbWFwLCBfX2hhc2hfZnVuYywgX19oYXNoX2VxdWFsKSBcCisJX19LSEFTSF9UWVBFKG5hbWUsIGtoa2V5X3QsIGtodmFsX3QpIAkJCQkJCQkJXAorCV9fS0hBU0hfSU1QTChuYW1lLCBTQ09QRSwga2hrZXlfdCwga2h2YWxfdCwga2hfaXNfbWFwLCBfX2hhc2hfZnVuYywgX19oYXNoX2VxdWFsKQorCisjZGVmaW5lIEtIQVNIX0lOSVQobmFtZSwga2hrZXlfdCwga2h2YWxfdCwga2hfaXNfbWFwLCBfX2hhc2hfZnVuYywgX19oYXNoX2VxdWFsKSBcCisJS0hBU0hfSU5JVDIobmFtZSwgc3RhdGljIGlubGluZSwga2hrZXlfdCwga2h2YWxfdCwga2hfaXNfbWFwLCBfX2hhc2hfZnVuYywgX19oYXNoX2VxdWFsKQorCisvKiBPdGhlciBjb252ZW5pZW50IG1hY3Jvcy4uLiAqLworCisvKiEgQGZ1bmN0aW9uCisgIEBhYnN0cmFjdCAgICAgVGVzdCB3aGV0aGVyIGEgYnVja2V0IGNvbnRhaW5zIGRhdGEuCisgIEBwYXJhbSAgaCAgICAgUG9pbnRlciB0byB0aGUgaGFzaCB0YWJsZSBba2hhc2hfdChuYW1lKSpdCisgIEBwYXJhbSAgeCAgICAgSXRlcmF0b3IgdG8gdGhlIGJ1Y2tldCBba2hpbnRfdF0KKyAgQHJldHVybiAgICAgICAxIGlmIGNvbnRhaW5pbmcgZGF0YTsgMCBvdGhlcndpc2UgW2ludF0KKyAqLworI2RlZmluZSBraF9leGlzdChoLCB4KSAoIV9fYWNfaXNlaXRoZXIoKGgpLT5mbGFncywgKHgpKSkKKworLyohIEBmdW5jdGlvbgorICBAYWJzdHJhY3QgICAgIEdldCBrZXkgZ2l2ZW4gYW4gaXRlcmF0b3IKKyAgQHBhcmFtICBoICAgICBQb2ludGVyIHRvIHRoZSBoYXNoIHRhYmxlIFtraGFzaF90KG5hbWUpKl0KKyAgQHBhcmFtICB4ICAgICBJdGVyYXRvciB0byB0aGUgYnVja2V0IFtraGludF90XQorICBAcmV0dXJuICAgICAgIEtleSBbdHlwZSBvZiBrZXlzXQorICovCisjZGVmaW5lIGtoX2tleShoLCB4KSAoKGgpLT5rZXlzW3hdKQorCisvKiEgQGZ1bmN0aW9uCisgIEBhYnN0cmFjdCAgICAgR2V0IHZhbHVlIGdpdmVuIGFuIGl0ZXJhdG9yCisgIEBwYXJhbSAgaCAgICAgUG9pbnRlciB0byB0aGUgaGFzaCB0YWJsZSBba2hhc2hfdChuYW1lKSpdCisgIEBwYXJhbSAgeCAgICAgSXRlcmF0b3IgdG8gdGhlIGJ1Y2tldCBba2hpbnRfdF0KKyAgQHJldHVybiAgICAgICBWYWx1ZSBbdHlwZSBvZiB2YWx1ZXNdCisgIEBkaXNjdXNzaW9uICAgRm9yIGhhc2ggc2V0cywgY2FsbGluZyB0aGlzIHJlc3VsdHMgaW4gc2VnZmF1bHQuCisgKi8KKyNkZWZpbmUga2hfdmFsKGgsIHgpICgoaCktPnZhbHNbeF0pCisKKy8qISBAZnVuY3Rpb24KKyAgQGFic3RyYWN0ICAgICBBbGlhcyBvZiBraF92YWwoKQorICovCisjZGVmaW5lIGtoX3ZhbHVlKGgsIHgpICgoaCktPnZhbHNbeF0pCisKKy8qISBAZnVuY3Rpb24KKyAgQGFic3RyYWN0ICAgICBHZXQgdGhlIHN0YXJ0IGl0ZXJhdG9yCisgIEBwYXJhbSAgaCAgICAgUG9pbnRlciB0byB0aGUgaGFzaCB0YWJsZSBba2hhc2hfdChuYW1lKSpdCisgIEByZXR1cm4gICAgICAgVGhlIHN0YXJ0IGl0ZXJhdG9yIFtraGludF90XQorICovCisjZGVmaW5lIGtoX2JlZ2luKGgpIChraGludF90KSgwKQorCisvKiEgQGZ1bmN0aW9uCisgIEBhYnN0cmFjdCAgICAgR2V0IHRoZSBlbmQgaXRlcmF0b3IKKyAgQHBhcmFtICBoICAgICBQb2ludGVyIHRvIHRoZSBoYXNoIHRhYmxlIFtraGFzaF90KG5hbWUpKl0KKyAgQHJldHVybiAgICAgICBUaGUgZW5kIGl0ZXJhdG9yIFtraGludF90XQorICovCisjZGVmaW5lIGtoX2VuZChoKSAoKGgpLT5uX2J1Y2tldHMpCisKKy8qISBAZnVuY3Rpb24KKyAgQGFic3RyYWN0ICAgICBHZXQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGFzaCB0YWJsZQorICBAcGFyYW0gIGggICAgIFBvaW50ZXIgdG8gdGhlIGhhc2ggdGFibGUgW2toYXNoX3QobmFtZSkqXQorICBAcmV0dXJuICAgICAgIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgaGFzaCB0YWJsZSBba2hpbnRfdF0KKyAqLworI2RlZmluZSBraF9zaXplKGgpICgoaCktPnNpemUpCisKKy8qISBAZnVuY3Rpb24KKyAgQGFic3RyYWN0ICAgICBHZXQgdGhlIG51bWJlciBvZiBidWNrZXRzIGluIHRoZSBoYXNoIHRhYmxlCisgIEBwYXJhbSAgaCAgICAgUG9pbnRlciB0byB0aGUgaGFzaCB0YWJsZSBba2hhc2hfdChuYW1lKSpdCisgIEByZXR1cm4gICAgICAgTnVtYmVyIG9mIGJ1Y2tldHMgaW4gdGhlIGhhc2ggdGFibGUgW2toaW50X3RdCisgKi8KKyNkZWZpbmUga2hfbl9idWNrZXRzKGgpICgoaCktPm5fYnVja2V0cykKKworLyohIEBmdW5jdGlvbgorICBAYWJzdHJhY3QgICAgIEl0ZXJhdGUgb3ZlciB0aGUgZW50cmllcyBpbiB0aGUgaGFzaCB0YWJsZQorICBAcGFyYW0gIGggICAgIFBvaW50ZXIgdG8gdGhlIGhhc2ggdGFibGUgW2toYXNoX3QobmFtZSkqXQorICBAcGFyYW0gIGt2YXIgIFZhcmlhYmxlIHRvIHdoaWNoIGtleSB3aWxsIGJlIGFzc2lnbmVkCisgIEBwYXJhbSAgdnZhciAgVmFyaWFibGUgdG8gd2hpY2ggdmFsdWUgd2lsbCBiZSBhc3NpZ25lZAorICBAcGFyYW0gIGNvZGUgIEJsb2NrIG9mIGNvZGUgdG8gZXhlY3V0ZQorICovCisjZGVmaW5lIGtoX2ZvcmVhY2goaCwga3ZhciwgdnZhciwgY29kZSkgeyBraGludF90IF9faTsJCVwKKwlmb3IgKF9faSA9IGtoX2JlZ2luKGgpOyBfX2kgIT0ga2hfZW5kKGgpOyArK19faSkgewkJXAorCQlpZiAoIWtoX2V4aXN0KGgsX19pKSkgY29udGludWU7CQkJCQkJXAorCQkoa3ZhcikgPSBraF9rZXkoaCxfX2kpOwkJCQkJCQkJXAorCQkodnZhcikgPSBraF92YWwoaCxfX2kpOwkJCQkJCQkJXAorCQljb2RlOwkJCQkJCQkJCQkJCVwKKwl9IH0KKworLyohIEBmdW5jdGlvbgorICBAYWJzdHJhY3QgICAgIEl0ZXJhdGUgb3ZlciB0aGUgdmFsdWVzIGluIHRoZSBoYXNoIHRhYmxlCisgIEBwYXJhbSAgaCAgICAgUG9pbnRlciB0byB0aGUgaGFzaCB0YWJsZSBba2hhc2hfdChuYW1lKSpdCisgIEBwYXJhbSAgdnZhciAgVmFyaWFibGUgdG8gd2hpY2ggdmFsdWUgd2lsbCBiZSBhc3NpZ25lZAorICBAcGFyYW0gIGNvZGUgIEJsb2NrIG9mIGNvZGUgdG8gZXhlY3V0ZQorICovCisjZGVmaW5lIGtoX2ZvcmVhY2hfdmFsdWUoaCwgdnZhciwgY29kZSkgeyBraGludF90IF9faTsJCVwKKwlmb3IgKF9faSA9IGtoX2JlZ2luKGgpOyBfX2kgIT0ga2hfZW5kKGgpOyArK19faSkgewkJXAorCQlpZiAoIWtoX2V4aXN0KGgsX19pKSkgY29udGludWU7CQkJCQkJXAorCQkodnZhcikgPSBraF92YWwoaCxfX2kpOwkJCQkJCQkJXAorCQljb2RlOwkJCQkJCQkJCQkJCVwKKwl9IH0KKworI2RlZmluZSBfX2toX29pZF9jbXAoYSwgYikgKGhhc2hjbXAoYSwgYikgPT0gMCkKKworS0hBU0hfSU5JVChzaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHZvaWQgKiwgMSwgc2hhMWhhc2gsIF9fa2hfb2lkX2NtcCkKK3R5cGVkZWYga2hfc2hhMV90IGtoYXNoX3NoYTE7CisKK0tIQVNIX0lOSVQoc2hhMV9wb3MsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50LCAxLCBzaGExaGFzaCwgX19raF9vaWRfY21wKQordHlwZWRlZiBraF9zaGExX3Bvc190IGtoYXNoX3NoYTFfcG9zOworCisjZW5kaWYgLyogX19BQ19LSEFTSF9IICovCmRpZmYgLS1naXQgYS9rd3NldC5jIGIva3dzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjIzNmEwCi0tLSAvZGV2L251bGwKKysrIGIva3dzZXQuYwpAQCAtMCwwICsxLDc3MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBoYXMgYmVlbiBjb3BpZWQgZnJvbSBjb21taXQgZTdhYzcxM2ReIGluIHRoZSBHTlUgZ3JlcCBnaXQKKyAqIHJlcG9zaXRvcnkuIEEgZmV3IHNtYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gYWRhcHQgdGhlIGNvZGUgdG8KKyAqIEdpdC4KKyAqLworCisvKiBrd3NldC5jIC0gc2VhcmNoIGZvciBhbnkgb2YgYSBzZXQgb2Yga2V5d29yZHMuCisgICBDb3B5cmlnaHQgMTk4OSwgMTk5OCwgMjAwMCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICAgMDIxMTAtMTMwMSwgVVNBLiAgKi8KKworLyogV3JpdHRlbiBBdWd1c3QgMTk4OSBieSBNaWtlIEhhZXJ0ZWwuCisgICBUaGUgYXV0aG9yIG1heSBiZSByZWFjaGVkIChFbWFpbCkgYXQgdGhlIGFkZHJlc3MgbWlrZUBhaS5taXQuZWR1LAorICAgb3IgKFVTIG1haWwpIGFzIE1pa2UgSGFlcnRlbCBjL28gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAqLworCisvKiBUaGUgYWxnb3JpdGhtIGltcGxlbWVudGVkIGJ5IHRoZXNlIHJvdXRpbmVzIGJlYXJzIGEgc3RhcnRsaW5nIHJlc2VtYmxhbmNlCisgICB0byBvbmUgZGlzY292ZXJlZCBieSBCZWF0ZSBDb21tZW50ei1XYWx0ZXIsIGFsdGhvdWdoIGl0IGlzIG5vdCBpZGVudGljYWwuCisgICBTZWUgIkEgU3RyaW5nIE1hdGNoaW5nIEFsZ29yaXRobSBGYXN0IG9uIHRoZSBBdmVyYWdlLCIgVGVjaG5pY2FsIFJlcG9ydCwKKyAgIElCTS1HZXJtYW55LCBTY2llbnRpZmljIENlbnRlciBIZWlkZWxiZXJnLCBUaWVyZ2FydGVuc3RyYXNzZSAxNSwgRC02OTAwCisgICBIZWlkZWxiZXJnLCBHZXJtYW55LiAgU2VlIGFsc28gQWhvLCBBLlYuLCBhbmQgTS4gQ29yYXNpY2ssICJFZmZpY2llbnQKKyAgIFN0cmluZyBNYXRjaGluZzogIEFuIEFpZCB0byBCaWJsaW9ncmFwaGljIFNlYXJjaCwiIENBQ00gSnVuZSAxOTc1LAorICAgVm9sLiAxOCwgTm8uIDYsIHdoaWNoIGRlc2NyaWJlcyB0aGUgZmFpbHVyZSBmdW5jdGlvbiB1c2VkIGJlbG93LiAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKworI2luY2x1ZGUgImt3c2V0LmgiCisjaW5jbHVkZSAiY29tcGF0L29ic3RhY2suaCIKKworI2RlZmluZSBOQ0hBUiAoVUNIQVJfTUFYICsgMSkKKyNkZWZpbmUgb2JzdGFja19jaHVua19hbGxvYyB4bWFsbG9jCisjZGVmaW5lIG9ic3RhY2tfY2h1bmtfZnJlZSBmcmVlCisKKyNkZWZpbmUgVShjKSAoKHVuc2lnbmVkIGNoYXIpIChjKSkKKworLyogQmFsYW5jZWQgdHJlZSBvZiBlZGdlcyBhbmQgbGFiZWxzIGxlYXZpbmcgYSBnaXZlbiB0cmllIG5vZGUuICovCitzdHJ1Y3QgdHJlZQoreworICBzdHJ1Y3QgdHJlZSAqbGxpbms7CQkvKiBMZWZ0IGxpbms7IE1VU1QgYmUgZmlyc3QgZmllbGQuICovCisgIHN0cnVjdCB0cmVlICpybGluazsJCS8qIFJpZ2h0IGxpbmsgKHRvIGxhcmdlciBsYWJlbHMpLiAqLworICBzdHJ1Y3QgdHJpZSAqdHJpZTsJCS8qIFRyaWUgbm9kZSBwb2ludGVkIHRvIGJ5IHRoaXMgZWRnZS4gKi8KKyAgdW5zaWduZWQgY2hhciBsYWJlbDsJCS8qIExhYmVsIG9uIHRoaXMgZWRnZS4gKi8KKyAgY2hhciBiYWxhbmNlOwkJCS8qIERpZmZlcmVuY2UgaW4gZGVwdGhzIG9mIHN1YnRyZWVzLiAqLworfTsKKworLyogTm9kZSBvZiBhIHRyaWUgcmVwcmVzZW50aW5nIGEgc2V0IG9mIHJldmVyc2VkIGtleXdvcmRzLiAqLworc3RydWN0IHRyaWUKK3sKKyAgdW5zaWduZWQgaW50IGFjY2VwdGluZzsJLyogV29yZCBpbmRleCBvZiBhY2NlcHRlZCB3b3JkLCBvciB6ZXJvLiAqLworICBzdHJ1Y3QgdHJlZSAqbGlua3M7CQkvKiBUcmVlIG9mIGVkZ2VzIGxlYXZpbmcgdGhpcyBub2RlLiAqLworICBzdHJ1Y3QgdHJpZSAqcGFyZW50OwkJLyogUGFyZW50IG9mIHRoaXMgbm9kZS4gKi8KKyAgc3RydWN0IHRyaWUgKm5leHQ7CQkvKiBMaXN0IG9mIGFsbCB0cmllIG5vZGVzIGluIGxldmVsIG9yZGVyLiAqLworICBzdHJ1Y3QgdHJpZSAqZmFpbDsJCS8qIEFoby1Db3Jhc2ljayBmYWlsdXJlIGZ1bmN0aW9uLiAqLworICBpbnQgZGVwdGg7CQkJLyogRGVwdGggb2YgdGhpcyBub2RlIGZyb20gdGhlIHJvb3QuICovCisgIGludCBzaGlmdDsJCQkvKiBTaGlmdCBmdW5jdGlvbiBmb3Igc2VhcmNoIGZhaWx1cmVzLiAqLworICBpbnQgbWF4c2hpZnQ7CQkJLyogTWF4IHNoaWZ0IG9mIHNlbGYgYW5kIGRlc2NlbmRhbnRzLiAqLworfTsKKworLyogU3RydWN0dXJlIHJldHVybmVkIG9wYXF1ZWx5IHRvIHRoZSBjYWxsZXIsIGNvbnRhaW5pbmcgZXZlcnl0aGluZy4gKi8KK3N0cnVjdCBrd3NldAoreworICBzdHJ1Y3Qgb2JzdGFjayBvYnN0YWNrOwkvKiBPYnN0YWNrIGZvciBub2RlIGFsbG9jYXRpb24uICovCisgIGludCB3b3JkczsJCQkvKiBOdW1iZXIgb2Ygd29yZHMgaW4gdGhlIHRyaWUuICovCisgIHN0cnVjdCB0cmllICp0cmllOwkJLyogVGhlIHRyaWUgaXRzZWxmLiAqLworICBpbnQgbWluZDsJCQkvKiBNaW5pbXVtIGRlcHRoIG9mIGFuIGFjY2VwdGluZyBub2RlLiAqLworICBpbnQgbWF4ZDsJCQkvKiBNYXhpbXVtIGRlcHRoIG9mIGFueSBub2RlLiAqLworICB1bnNpZ25lZCBjaGFyIGRlbHRhW05DSEFSXTsJLyogRGVsdGEgdGFibGUgZm9yIHJhcGlkIHNlYXJjaC4gKi8KKyAgc3RydWN0IHRyaWUgKm5leHRbTkNIQVJdOwkvKiBUYWJsZSBvZiBjaGlsZHJlbiBvZiB0aGUgcm9vdC4gKi8KKyAgY2hhciAqdGFyZ2V0OwkJCS8qIFRhcmdldCBzdHJpbmcgaWYgdGhlcmUncyBvbmx5IG9uZS4gKi8KKyAgaW50IG1pbmQyOwkJCS8qIFVzZWQgaW4gQm95ZXItTW9vcmUgc2VhcmNoIGZvciBvbmUgc3RyaW5nLiAqLworICB1bnNpZ25lZCBjaGFyIGNvbnN0ICp0cmFuczsgIC8qIENoYXJhY3RlciB0cmFuc2xhdGlvbiB0YWJsZS4gKi8KK307CisKKy8qIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEga2V5d29yZCBzZXQgb2JqZWN0LCByZXR1cm5pbmcgYW4gb3BhcXVlCisgICBwb2ludGVyIHRvIGl0LiAgUmV0dXJuIE5VTEwgaWYgbWVtb3J5IGlzIG5vdCBhdmFpbGFibGUuICovCitrd3NldF90Citrd3NhbGxvYyAodW5zaWduZWQgY2hhciBjb25zdCAqdHJhbnMpCit7CisgIHN0cnVjdCBrd3NldCAqa3dzZXQ7CisKKyAga3dzZXQgPSAoc3RydWN0IGt3c2V0ICopIHhtYWxsb2Moc2l6ZW9mIChzdHJ1Y3Qga3dzZXQpKTsKKworICBvYnN0YWNrX2luaXQoJmt3c2V0LT5vYnN0YWNrKTsKKyAga3dzZXQtPndvcmRzID0gMDsKKyAga3dzZXQtPnRyaWUKKyAgICA9IChzdHJ1Y3QgdHJpZSAqKSBvYnN0YWNrX2FsbG9jKCZrd3NldC0+b2JzdGFjaywgc2l6ZW9mIChzdHJ1Y3QgdHJpZSkpOworICBpZiAoIWt3c2V0LT50cmllKQorICAgIHsKKyAgICAgIGt3c2ZyZWUoKGt3c2V0X3QpIGt3c2V0KTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAga3dzZXQtPnRyaWUtPmFjY2VwdGluZyA9IDA7CisgIGt3c2V0LT50cmllLT5saW5rcyA9IE5VTEw7CisgIGt3c2V0LT50cmllLT5wYXJlbnQgPSBOVUxMOworICBrd3NldC0+dHJpZS0+bmV4dCA9IE5VTEw7CisgIGt3c2V0LT50cmllLT5mYWlsID0gTlVMTDsKKyAga3dzZXQtPnRyaWUtPmRlcHRoID0gMDsKKyAga3dzZXQtPnRyaWUtPnNoaWZ0ID0gMDsKKyAga3dzZXQtPm1pbmQgPSBJTlRfTUFYOworICBrd3NldC0+bWF4ZCA9IC0xOworICBrd3NldC0+dGFyZ2V0ID0gTlVMTDsKKyAga3dzZXQtPnRyYW5zID0gdHJhbnM7CisKKyAgcmV0dXJuIChrd3NldF90KSBrd3NldDsKK30KKworLyogVGhpcyB1cHBlciBib3VuZCBpcyB2YWxpZCBmb3IgQ0hBUl9CSVQgPj0gNCBhbmQKKyAgIGV4YWN0IGZvciBDSEFSX0JJVCBpbiB7IDQuLjExLCAxMywgMTUsIDE3LCAxOSB9LiAqLworI2RlZmluZSBERVBUSF9TSVpFIChDSEFSX0JJVCArIENIQVJfQklULzIpCisKKy8qIEFkZCB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBjb250ZW50cyBvZiB0aGUga2V5d29yZCBzZXQuICBSZXR1cm4gTlVMTAorICAgZm9yIHN1Y2Nlc3MsIGFuIGVycm9yIG1lc3NhZ2Ugb3RoZXJ3aXNlLiAqLworY29uc3QgY2hhciAqCitrd3NpbmNyIChrd3NldF90IGt3cywgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IGxlbikKK3sKKyAgc3RydWN0IGt3c2V0ICprd3NldDsKKyAgcmVnaXN0ZXIgc3RydWN0IHRyaWUgKnRyaWU7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgbGFiZWw7CisgIHJlZ2lzdGVyIHN0cnVjdCB0cmVlICpsaW5rOworICByZWdpc3RlciBpbnQgZGVwdGg7CisgIHN0cnVjdCB0cmVlICpsaW5rc1tERVBUSF9TSVpFXTsKKyAgZW51bSB7IEwsIFIgfSBkaXJzW0RFUFRIX1NJWkVdOworICBzdHJ1Y3QgdHJlZSAqdCwgKnIsICpsLCAqcmwsICpscjsKKworICBrd3NldCA9IChzdHJ1Y3Qga3dzZXQgKikga3dzOworICB0cmllID0ga3dzZXQtPnRyaWU7CisgIHRleHQgKz0gbGVuOworCisgIC8qIERlc2NlbmQgdGhlIHRyaWUgKGJ1aWx0IG9mIHJldmVyc2VkIGtleXdvcmRzKSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyLAorICAgICBpbnN0YWxsaW5nIG5ldyBub2RlcyB3aGVuIG5lY2Vzc2FyeS4gKi8KKyAgd2hpbGUgKGxlbi0tKQorICAgIHsKKyAgICAgIGxhYmVsID0ga3dzZXQtPnRyYW5zID8ga3dzZXQtPnRyYW5zW1UoKi0tdGV4dCldIDogKi0tdGV4dDsKKworICAgICAgLyogRGVzY2VuZCB0aGUgdHJlZSBvZiBvdXRnb2luZyBsaW5rcyBmb3IgdGhpcyB0cmllIG5vZGUsCisJIGxvb2tpbmcgZm9yIHRoZSBjdXJyZW50IGNoYXJhY3RlciBhbmQga2VlcGluZyB0cmFjaworCSBvZiB0aGUgcGF0aCBmb2xsb3dlZC4gKi8KKyAgICAgIGxpbmsgPSB0cmllLT5saW5rczsKKyAgICAgIGxpbmtzWzBdID0gKHN0cnVjdCB0cmVlICopICZ0cmllLT5saW5rczsKKyAgICAgIGRpcnNbMF0gPSBMOworICAgICAgZGVwdGggPSAxOworCisgICAgICB3aGlsZSAobGluayAmJiBsYWJlbCAhPSBsaW5rLT5sYWJlbCkKKwl7CisJICBsaW5rc1tkZXB0aF0gPSBsaW5rOworCSAgaWYgKGxhYmVsIDwgbGluay0+bGFiZWwpCisJICAgIGRpcnNbZGVwdGgrK10gPSBMLCBsaW5rID0gbGluay0+bGxpbms7CisJICBlbHNlCisJICAgIGRpcnNbZGVwdGgrK10gPSBSLCBsaW5rID0gbGluay0+cmxpbms7CisJfQorCisgICAgICAvKiBUaGUgY3VycmVudCBjaGFyYWN0ZXIgZG9lc24ndCBoYXZlIGFuIG91dGdvaW5nIGxpbmsgYXQKKwkgdGhpcyB0cmllIG5vZGUsIHNvIGJ1aWxkIGEgbmV3IHRyaWUgbm9kZSBhbmQgaW5zdGFsbAorCSBhIGxpbmsgaW4gdGhlIGN1cnJlbnQgdHJpZSBub2RlJ3MgdHJlZS4gKi8KKyAgICAgIGlmICghbGluaykKKwl7CisJICBsaW5rID0gKHN0cnVjdCB0cmVlICopIG9ic3RhY2tfYWxsb2MoJmt3c2V0LT5vYnN0YWNrLAorCQkJCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgdHJlZSkpOworCSAgaWYgKCFsaW5rKQorCSAgICByZXR1cm4gIm1lbW9yeSBleGhhdXN0ZWQiOworCSAgbGluay0+bGxpbmsgPSBOVUxMOworCSAgbGluay0+cmxpbmsgPSBOVUxMOworCSAgbGluay0+dHJpZSA9IChzdHJ1Y3QgdHJpZSAqKSBvYnN0YWNrX2FsbG9jKCZrd3NldC0+b2JzdGFjaywKKwkJCQkJCSAgICAgc2l6ZW9mIChzdHJ1Y3QgdHJpZSkpOworCSAgaWYgKCFsaW5rLT50cmllKQorCSAgICB7CisJICAgICAgb2JzdGFja19mcmVlKCZrd3NldC0+b2JzdGFjaywgbGluayk7CisJICAgICAgcmV0dXJuICJtZW1vcnkgZXhoYXVzdGVkIjsKKwkgICAgfQorCSAgbGluay0+dHJpZS0+YWNjZXB0aW5nID0gMDsKKwkgIGxpbmstPnRyaWUtPmxpbmtzID0gTlVMTDsKKwkgIGxpbmstPnRyaWUtPnBhcmVudCA9IHRyaWU7CisJICBsaW5rLT50cmllLT5uZXh0ID0gTlVMTDsKKwkgIGxpbmstPnRyaWUtPmZhaWwgPSBOVUxMOworCSAgbGluay0+dHJpZS0+ZGVwdGggPSB0cmllLT5kZXB0aCArIDE7CisJICBsaW5rLT50cmllLT5zaGlmdCA9IDA7CisJICBsaW5rLT5sYWJlbCA9IGxhYmVsOworCSAgbGluay0+YmFsYW5jZSA9IDA7CisKKwkgIC8qIEluc3RhbGwgdGhlIG5ldyB0cmVlIG5vZGUgaW4gaXRzIHBhcmVudC4gKi8KKwkgIGlmIChkaXJzWy0tZGVwdGhdID09IEwpCisJICAgIGxpbmtzW2RlcHRoXS0+bGxpbmsgPSBsaW5rOworCSAgZWxzZQorCSAgICBsaW5rc1tkZXB0aF0tPnJsaW5rID0gbGluazsKKworCSAgLyogQmFjayB1cCB0aGUgdHJlZSBmaXhpbmcgdGhlIGJhbGFuY2UgZmxhZ3MuICovCisJICB3aGlsZSAoZGVwdGggJiYgIWxpbmtzW2RlcHRoXS0+YmFsYW5jZSkKKwkgICAgeworCSAgICAgIGlmIChkaXJzW2RlcHRoXSA9PSBMKQorCQktLWxpbmtzW2RlcHRoXS0+YmFsYW5jZTsKKwkgICAgICBlbHNlCisJCSsrbGlua3NbZGVwdGhdLT5iYWxhbmNlOworCSAgICAgIC0tZGVwdGg7CisJICAgIH0KKworCSAgLyogUmViYWxhbmNlIHRoZSB0cmVlIGJ5IHBvaW50ZXIgcm90YXRpb25zIGlmIG5lY2Vzc2FyeS4gKi8KKwkgIGlmIChkZXB0aCAmJiAoKGRpcnNbZGVwdGhdID09IEwgJiYgLS1saW5rc1tkZXB0aF0tPmJhbGFuY2UpCisJCQl8fCAoZGlyc1tkZXB0aF0gPT0gUiAmJiArK2xpbmtzW2RlcHRoXS0+YmFsYW5jZSkpKQorCSAgICB7CisJICAgICAgc3dpdGNoIChsaW5rc1tkZXB0aF0tPmJhbGFuY2UpCisJCXsKKwkJY2FzZSAoY2hhcikgLTI6CisJCSAgc3dpdGNoIChkaXJzW2RlcHRoICsgMV0pCisJCSAgICB7CisJCSAgICBjYXNlIEw6CisJCSAgICAgIHIgPSBsaW5rc1tkZXB0aF0sIHQgPSByLT5sbGluaywgcmwgPSB0LT5ybGluazsKKwkJICAgICAgdC0+cmxpbmsgPSByLCByLT5sbGluayA9IHJsOworCQkgICAgICB0LT5iYWxhbmNlID0gci0+YmFsYW5jZSA9IDA7CisJCSAgICAgIGJyZWFrOworCQkgICAgY2FzZSBSOgorCQkgICAgICByID0gbGlua3NbZGVwdGhdLCBsID0gci0+bGxpbmssIHQgPSBsLT5ybGluazsKKwkJICAgICAgcmwgPSB0LT5ybGluaywgbHIgPSB0LT5sbGluazsKKwkJICAgICAgdC0+bGxpbmsgPSBsLCBsLT5ybGluayA9IGxyLCB0LT5ybGluayA9IHIsIHItPmxsaW5rID0gcmw7CisJCSAgICAgIGwtPmJhbGFuY2UgPSB0LT5iYWxhbmNlICE9IDEgPyAwIDogLTE7CisJCSAgICAgIHItPmJhbGFuY2UgPSB0LT5iYWxhbmNlICE9IChjaGFyKSAtMSA/IDAgOiAxOworCQkgICAgICB0LT5iYWxhbmNlID0gMDsKKwkJICAgICAgYnJlYWs7CisJCSAgICBkZWZhdWx0OgorCQkgICAgICBhYm9ydCAoKTsKKwkJICAgIH0KKwkJICBicmVhazsKKwkJY2FzZSAyOgorCQkgIHN3aXRjaCAoZGlyc1tkZXB0aCArIDFdKQorCQkgICAgeworCQkgICAgY2FzZSBSOgorCQkgICAgICBsID0gbGlua3NbZGVwdGhdLCB0ID0gbC0+cmxpbmssIGxyID0gdC0+bGxpbms7CisJCSAgICAgIHQtPmxsaW5rID0gbCwgbC0+cmxpbmsgPSBscjsKKwkJICAgICAgdC0+YmFsYW5jZSA9IGwtPmJhbGFuY2UgPSAwOworCQkgICAgICBicmVhazsKKwkJICAgIGNhc2UgTDoKKwkJICAgICAgbCA9IGxpbmtzW2RlcHRoXSwgciA9IGwtPnJsaW5rLCB0ID0gci0+bGxpbms7CisJCSAgICAgIGxyID0gdC0+bGxpbmssIHJsID0gdC0+cmxpbms7CisJCSAgICAgIHQtPmxsaW5rID0gbCwgbC0+cmxpbmsgPSBsciwgdC0+cmxpbmsgPSByLCByLT5sbGluayA9IHJsOworCQkgICAgICBsLT5iYWxhbmNlID0gdC0+YmFsYW5jZSAhPSAxID8gMCA6IC0xOworCQkgICAgICByLT5iYWxhbmNlID0gdC0+YmFsYW5jZSAhPSAoY2hhcikgLTEgPyAwIDogMTsKKwkJICAgICAgdC0+YmFsYW5jZSA9IDA7CisJCSAgICAgIGJyZWFrOworCQkgICAgZGVmYXVsdDoKKwkJICAgICAgYWJvcnQgKCk7CisJCSAgICB9CisJCSAgYnJlYWs7CisJCWRlZmF1bHQ6CisJCSAgYWJvcnQgKCk7CisJCX0KKworCSAgICAgIGlmIChkaXJzW2RlcHRoIC0gMV0gPT0gTCkKKwkJbGlua3NbZGVwdGggLSAxXS0+bGxpbmsgPSB0OworCSAgICAgIGVsc2UKKwkJbGlua3NbZGVwdGggLSAxXS0+cmxpbmsgPSB0OworCSAgICB9CisJfQorCisgICAgICB0cmllID0gbGluay0+dHJpZTsKKyAgICB9CisKKyAgLyogTWFyayB0aGUgbm9kZSB3ZSBmaW5hbGx5IHJlYWNoZWQgYXMgYWNjZXB0aW5nLCBlbmNvZGluZyB0aGUKKyAgICAgaW5kZXggbnVtYmVyIG9mIHRoaXMgd29yZCBpbiB0aGUga2V5d29yZCBzZXQgc28gZmFyLiAqLworICBpZiAoIXRyaWUtPmFjY2VwdGluZykKKyAgICB0cmllLT5hY2NlcHRpbmcgPSAxICsgMiAqIGt3c2V0LT53b3JkczsKKyAgKytrd3NldC0+d29yZHM7CisKKyAgLyogS2VlcCB0cmFjayBvZiB0aGUgbG9uZ2VzdCBhbmQgc2hvcnRlc3Qgc3RyaW5nIG9mIHRoZSBrZXl3b3JkIHNldC4gKi8KKyAgaWYgKHRyaWUtPmRlcHRoIDwga3dzZXQtPm1pbmQpCisgICAga3dzZXQtPm1pbmQgPSB0cmllLT5kZXB0aDsKKyAgaWYgKHRyaWUtPmRlcHRoID4ga3dzZXQtPm1heGQpCisgICAga3dzZXQtPm1heGQgPSB0cmllLT5kZXB0aDsKKworICByZXR1cm4gTlVMTDsKK30KKworLyogRW5xdWV1ZSB0aGUgdHJpZSBub2RlcyByZWZlcmVuY2VkIGZyb20gdGhlIGdpdmVuIHRyZWUgaW4gdGhlCisgICBnaXZlbiBxdWV1ZS4gKi8KK3N0YXRpYyB2b2lkCitlbnF1ZXVlIChzdHJ1Y3QgdHJlZSAqdHJlZSwgc3RydWN0IHRyaWUgKipsYXN0KQoreworICBpZiAoIXRyZWUpCisgICAgcmV0dXJuOworICBlbnF1ZXVlKHRyZWUtPmxsaW5rLCBsYXN0KTsKKyAgZW5xdWV1ZSh0cmVlLT5ybGluaywgbGFzdCk7CisgICgqbGFzdCkgPSAoKmxhc3QpLT5uZXh0ID0gdHJlZS0+dHJpZTsKK30KKworLyogQ29tcHV0ZSB0aGUgQWhvLUNvcmFzaWNrIGZhaWx1cmUgZnVuY3Rpb24gZm9yIHRoZSB0cmllIG5vZGVzIHJlZmVyZW5jZWQKKyAgIGZyb20gdGhlIGdpdmVuIHRyZWUsIGdpdmVuIHRoZSBmYWlsdXJlIGZ1bmN0aW9uIGZvciB0aGVpciBwYXJlbnQgYXMKKyAgIHdlbGwgYXMgYSBsYXN0IHJlc29ydCBmYWlsdXJlIG5vZGUuICovCitzdGF0aWMgdm9pZAordHJlZWZhaWxzIChyZWdpc3RlciBzdHJ1Y3QgdHJlZSBjb25zdCAqdHJlZSwgc3RydWN0IHRyaWUgY29uc3QgKmZhaWwsCisJICAgc3RydWN0IHRyaWUgKnJlY291cnNlKQoreworICByZWdpc3RlciBzdHJ1Y3QgdHJlZSAqbGluazsKKworICBpZiAoIXRyZWUpCisgICAgcmV0dXJuOworCisgIHRyZWVmYWlscyh0cmVlLT5sbGluaywgZmFpbCwgcmVjb3Vyc2UpOworICB0cmVlZmFpbHModHJlZS0+cmxpbmssIGZhaWwsIHJlY291cnNlKTsKKworICAvKiBGaW5kLCBpbiB0aGUgY2hhaW4gb2YgZmFpbHMgZ29pbmcgYmFjayB0byB0aGUgcm9vdCwgdGhlIGZpcnN0CisgICAgIG5vZGUgdGhhdCBoYXMgYSBkZXNjZW5kYW50IG9uIHRoZSBjdXJyZW50IGxhYmVsLiAqLworICB3aGlsZSAoZmFpbCkKKyAgICB7CisgICAgICBsaW5rID0gZmFpbC0+bGlua3M7CisgICAgICB3aGlsZSAobGluayAmJiB0cmVlLT5sYWJlbCAhPSBsaW5rLT5sYWJlbCkKKwlpZiAodHJlZS0+bGFiZWwgPCBsaW5rLT5sYWJlbCkKKwkgIGxpbmsgPSBsaW5rLT5sbGluazsKKwllbHNlCisJICBsaW5rID0gbGluay0+cmxpbms7CisgICAgICBpZiAobGluaykKKwl7CisJICB0cmVlLT50cmllLT5mYWlsID0gbGluay0+dHJpZTsKKwkgIHJldHVybjsKKwl9CisgICAgICBmYWlsID0gZmFpbC0+ZmFpbDsKKyAgICB9CisKKyAgdHJlZS0+dHJpZS0+ZmFpbCA9IHJlY291cnNlOworfQorCisvKiBTZXQgZGVsdGEgZW50cmllcyBmb3IgdGhlIGxpbmtzIG9mIHRoZSBnaXZlbiB0cmVlIHN1Y2ggdGhhdAorICAgdGhlIHByZWV4aXN0aW5nIGRlbHRhIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IGRlcHRoLiAqLworc3RhdGljIHZvaWQKK3RyZWVkZWx0YSAocmVnaXN0ZXIgc3RydWN0IHRyZWUgY29uc3QgKnRyZWUsCisJICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGRlcHRoLAorCSAgIHVuc2lnbmVkIGNoYXIgZGVsdGFbXSkKK3sKKyAgaWYgKCF0cmVlKQorICAgIHJldHVybjsKKyAgdHJlZWRlbHRhKHRyZWUtPmxsaW5rLCBkZXB0aCwgZGVsdGEpOworICB0cmVlZGVsdGEodHJlZS0+cmxpbmssIGRlcHRoLCBkZWx0YSk7CisgIGlmIChkZXB0aCA8IGRlbHRhW3RyZWUtPmxhYmVsXSkKKyAgICBkZWx0YVt0cmVlLT5sYWJlbF0gPSBkZXB0aDsKK30KKworLyogUmV0dXJuIHRydWUgaWYgQSBoYXMgZXZlcnkgbGFiZWwgaW4gQi4gKi8KK3N0YXRpYyBpbnQKK2hhc2V2ZXJ5IChyZWdpc3RlciBzdHJ1Y3QgdHJlZSBjb25zdCAqYSwgcmVnaXN0ZXIgc3RydWN0IHRyZWUgY29uc3QgKmIpCit7CisgIGlmICghYikKKyAgICByZXR1cm4gMTsKKyAgaWYgKCFoYXNldmVyeShhLCBiLT5sbGluaykpCisgICAgcmV0dXJuIDA7CisgIGlmICghaGFzZXZlcnkoYSwgYi0+cmxpbmspKQorICAgIHJldHVybiAwOworICB3aGlsZSAoYSAmJiBiLT5sYWJlbCAhPSBhLT5sYWJlbCkKKyAgICBpZiAoYi0+bGFiZWwgPCBhLT5sYWJlbCkKKyAgICAgIGEgPSBhLT5sbGluazsKKyAgICBlbHNlCisgICAgICBhID0gYS0+cmxpbms7CisgIHJldHVybiAhIWE7Cit9CisKKy8qIENvbXB1dGUgYSB2ZWN0b3IsIGluZGV4ZWQgYnkgY2hhcmFjdGVyIGNvZGUsIG9mIHRoZSB0cmllIG5vZGVzCisgICByZWZlcmVuY2VkIGZyb20gdGhlIGdpdmVuIHRyZWUuICovCitzdGF0aWMgdm9pZAordHJlZW5leHQgKHN0cnVjdCB0cmVlIGNvbnN0ICp0cmVlLCBzdHJ1Y3QgdHJpZSAqbmV4dFtdKQoreworICBpZiAoIXRyZWUpCisgICAgcmV0dXJuOworICB0cmVlbmV4dCh0cmVlLT5sbGluaywgbmV4dCk7CisgIHRyZWVuZXh0KHRyZWUtPnJsaW5rLCBuZXh0KTsKKyAgbmV4dFt0cmVlLT5sYWJlbF0gPSB0cmVlLT50cmllOworfQorCisvKiBDb21wdXRlIHRoZSBzaGlmdCBmb3IgZWFjaCB0cmllIG5vZGUsIGFzIHdlbGwgYXMgdGhlIGRlbHRhCisgICB0YWJsZSBhbmQgbmV4dCBjYWNoZSBmb3IgdGhlIGdpdmVuIGtleXdvcmQgc2V0LiAqLworY29uc3QgY2hhciAqCitrd3NwcmVwIChrd3NldF90IGt3cykKK3sKKyAgcmVnaXN0ZXIgc3RydWN0IGt3c2V0ICprd3NldDsKKyAgcmVnaXN0ZXIgaW50IGk7CisgIHJlZ2lzdGVyIHN0cnVjdCB0cmllICpjdXJyOworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGNvbnN0ICp0cmFuczsKKyAgdW5zaWduZWQgY2hhciBkZWx0YVtOQ0hBUl07CisKKyAga3dzZXQgPSAoc3RydWN0IGt3c2V0ICopIGt3czsKKworICAvKiBJbml0aWFsIHZhbHVlcyBmb3IgdGhlIGRlbHRhIHRhYmxlOyB3aWxsIGJlIGNoYW5nZWQgbGF0ZXIuICBUaGUKKyAgICAgZGVsdGEgZW50cnkgZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyIGlzIHRoZSBzbWFsbGVzdCBkZXB0aCBvZiBhbnkKKyAgICAgbm9kZSBhdCB3aGljaCBhbiBvdXRnb2luZyBlZGdlIGlzIGxhYmVsZWQgYnkgdGhhdCBjaGFyYWN0ZXIuICovCisgIG1lbXNldChkZWx0YSwga3dzZXQtPm1pbmQgPCBVQ0hBUl9NQVggPyBrd3NldC0+bWluZCA6IFVDSEFSX01BWCwgTkNIQVIpOworCisgIC8qIENoZWNrIGlmIHdlIGNhbiB1c2UgdGhlIHNpbXBsZSBib3llci1tb29yZSBhbGdvcml0aG0sIGluc3RlYWQKKyAgICAgb2YgdGhlIGhhaXJ5IGNvbW1lbnR6LXdhbHRlciBhbGdvcml0aG0uICovCisgIGlmIChrd3NldC0+d29yZHMgPT0gMSAmJiBrd3NldC0+dHJhbnMgPT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFyIGM7CisKKyAgICAgIC8qIExvb2tpbmcgZm9yIGp1c3Qgb25lIHN0cmluZy4gIEV4dHJhY3QgaXQgZnJvbSB0aGUgdHJpZS4gKi8KKyAgICAgIGt3c2V0LT50YXJnZXQgPSBvYnN0YWNrX2FsbG9jKCZrd3NldC0+b2JzdGFjaywga3dzZXQtPm1pbmQpOworICAgICAgaWYgKCFrd3NldC0+dGFyZ2V0KQorCXJldHVybiAibWVtb3J5IGV4aGF1c3RlZCI7CisgICAgICBmb3IgKGkgPSBrd3NldC0+bWluZCAtIDEsIGN1cnIgPSBrd3NldC0+dHJpZTsgaSA+PSAwOyAtLWkpCisJeworCSAga3dzZXQtPnRhcmdldFtpXSA9IGN1cnItPmxpbmtzLT5sYWJlbDsKKwkgIGN1cnIgPSBjdXJyLT5saW5rcy0+dHJpZTsKKwl9CisgICAgICAvKiBCdWlsZCB0aGUgQm95ZXIgTW9vcmUgZGVsdGEuICBCb3kgdGhhdCdzIGVhc3kgY29tcGFyZWQgdG8gQ1cuICovCisgICAgICBmb3IgKGkgPSAwOyBpIDwga3dzZXQtPm1pbmQ7ICsraSkKKwlkZWx0YVtVKGt3c2V0LT50YXJnZXRbaV0pXSA9IGt3c2V0LT5taW5kIC0gKGkgKyAxKTsKKyAgICAgIC8qIEZpbmQgdGhlIG1pbmltYWwgZGVsdGEyIHNoaWZ0IHRoYXQgd2UgbWlnaHQgbWFrZSBhZnRlcgorCSBhIGJhY2t3YXJkcyBtYXRjaCBoYXMgZmFpbGVkLiAqLworICAgICAgYyA9IGt3c2V0LT50YXJnZXRba3dzZXQtPm1pbmQgLSAxXTsKKyAgICAgIGZvciAoaSA9IGt3c2V0LT5taW5kIC0gMjsgaSA+PSAwOyAtLWkpCisJaWYgKGt3c2V0LT50YXJnZXRbaV0gPT0gYykKKwkgIGJyZWFrOworICAgICAga3dzZXQtPm1pbmQyID0ga3dzZXQtPm1pbmQgLSAoaSArIDEpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHJlZ2lzdGVyIHN0cnVjdCB0cmllICpmYWlsOworICAgICAgc3RydWN0IHRyaWUgKmxhc3QsICpuZXh0W05DSEFSXTsKKworICAgICAgLyogVHJhdmVyc2UgdGhlIG5vZGVzIG9mIHRoZSB0cmllIGluIGxldmVsIG9yZGVyLCBzaW11bHRhbmVvdXNseQorCSBjb21wdXRpbmcgdGhlIGRlbHRhIHRhYmxlLCBmYWlsdXJlIGZ1bmN0aW9uLCBhbmQgc2hpZnQgZnVuY3Rpb24uICovCisgICAgICBmb3IgKGN1cnIgPSBsYXN0ID0ga3dzZXQtPnRyaWU7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KQorCXsKKwkgIC8qIEVucXVldWUgdGhlIGltbWVkaWF0ZSBkZXNjZW5kYW50cyBpbiB0aGUgbGV2ZWwgb3JkZXIgcXVldWUuICovCisJICBlbnF1ZXVlKGN1cnItPmxpbmtzLCAmbGFzdCk7CisKKwkgIGN1cnItPnNoaWZ0ID0ga3dzZXQtPm1pbmQ7CisJICBjdXJyLT5tYXhzaGlmdCA9IGt3c2V0LT5taW5kOworCisJICAvKiBVcGRhdGUgdGhlIGRlbHRhIHRhYmxlIGZvciB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2RlLiAqLworCSAgdHJlZWRlbHRhKGN1cnItPmxpbmtzLCBjdXJyLT5kZXB0aCwgZGVsdGEpOworCisJICAvKiBDb21wdXRlIHRoZSBmYWlsdXJlIGZ1bmN0aW9uIGZvciB0aGUgZGVzY2VuZGFudHMgb2YgdGhpcyBub2RlLiAqLworCSAgdHJlZWZhaWxzKGN1cnItPmxpbmtzLCBjdXJyLT5mYWlsLCBrd3NldC0+dHJpZSk7CisKKwkgIC8qIFVwZGF0ZSB0aGUgc2hpZnRzIGF0IGVhY2ggbm9kZSBpbiB0aGUgY3VycmVudCBub2RlJ3MgY2hhaW4KKwkgICAgIG9mIGZhaWxzIGJhY2sgdG8gdGhlIHJvb3QuICovCisJICBmb3IgKGZhaWwgPSBjdXJyLT5mYWlsOyBmYWlsOyBmYWlsID0gZmFpbC0+ZmFpbCkKKwkgICAgeworCSAgICAgIC8qIElmIHRoZSBjdXJyZW50IG5vZGUgaGFzIHNvbWUgb3V0Z29pbmcgZWRnZSB0aGF0IHRoZSBmYWlsCisJCSBkb2Vzbid0LCB0aGVuIHRoZSBzaGlmdCBhdCB0aGUgZmFpbCBzaG91bGQgYmUgbm8gbGFyZ2VyCisJCSB0aGFuIHRoZSBkaWZmZXJlbmNlIG9mIHRoZWlyIGRlcHRocy4gKi8KKwkgICAgICBpZiAoIWhhc2V2ZXJ5KGZhaWwtPmxpbmtzLCBjdXJyLT5saW5rcykpCisJCWlmIChjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoIDwgZmFpbC0+c2hpZnQpCisJCSAgZmFpbC0+c2hpZnQgPSBjdXJyLT5kZXB0aCAtIGZhaWwtPmRlcHRoOworCisJICAgICAgLyogSWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBhY2NlcHRpbmcgdGhlbiB0aGUgc2hpZnQgYXQgdGhlCisJCSBmYWlsIGFuZCBpdHMgZGVzY2VuZGFudHMgc2hvdWxkIGJlIG5vIGxhcmdlciB0aGFuIHRoZQorCQkgZGlmZmVyZW5jZSBvZiB0aGVpciBkZXB0aHMuICovCisJICAgICAgaWYgKGN1cnItPmFjY2VwdGluZyAmJiBmYWlsLT5tYXhzaGlmdCA+IGN1cnItPmRlcHRoIC0gZmFpbC0+ZGVwdGgpCisJCWZhaWwtPm1heHNoaWZ0ID0gY3Vyci0+ZGVwdGggLSBmYWlsLT5kZXB0aDsKKwkgICAgfQorCX0KKworICAgICAgLyogVHJhdmVyc2UgdGhlIHRyaWUgaW4gbGV2ZWwgb3JkZXIgYWdhaW4sIGZpeGluZyB1cCBhbGwgbm9kZXMgd2hvc2UKKwkgc2hpZnQgZXhjZWVkcyB0aGVpciBpbmhlcml0ZWQgbWF4c2hpZnQuICovCisgICAgICBmb3IgKGN1cnIgPSBrd3NldC0+dHJpZS0+bmV4dDsgY3VycjsgY3VyciA9IGN1cnItPm5leHQpCisJeworCSAgaWYgKGN1cnItPm1heHNoaWZ0ID4gY3Vyci0+cGFyZW50LT5tYXhzaGlmdCkKKwkgICAgY3Vyci0+bWF4c2hpZnQgPSBjdXJyLT5wYXJlbnQtPm1heHNoaWZ0OworCSAgaWYgKGN1cnItPnNoaWZ0ID4gY3Vyci0+bWF4c2hpZnQpCisJICAgIGN1cnItPnNoaWZ0ID0gY3Vyci0+bWF4c2hpZnQ7CisJfQorCisgICAgICAvKiBDcmVhdGUgYSB2ZWN0b3IsIGluZGV4ZWQgYnkgY2hhcmFjdGVyIGNvZGUsIG9mIHRoZSBvdXRnb2luZyBsaW5rcworCSBmcm9tIHRoZSByb290IG5vZGUuICovCisgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIQVI7ICsraSkKKwluZXh0W2ldID0gTlVMTDsKKyAgICAgIHRyZWVuZXh0KGt3c2V0LT50cmllLT5saW5rcywgbmV4dCk7CisKKyAgICAgIGlmICgodHJhbnMgPSBrd3NldC0+dHJhbnMpICE9IE5VTEwpCisJZm9yIChpID0gMDsgaSA8IE5DSEFSOyArK2kpCisJICBrd3NldC0+bmV4dFtpXSA9IG5leHRbVSh0cmFuc1tpXSldOworICAgICAgZWxzZQorCW1lbWNweShrd3NldC0+bmV4dCwgbmV4dCwgTkNIQVIgKiBzaXplb2Yoc3RydWN0IHRyaWUgKikpOworICAgIH0KKworICAvKiBGaXggdGhpbmdzIHVwIGZvciBhbnkgdHJhbnNsYXRpb24gdGFibGUuICovCisgIGlmICgodHJhbnMgPSBrd3NldC0+dHJhbnMpICE9IE5VTEwpCisgICAgZm9yIChpID0gMDsgaSA8IE5DSEFSOyArK2kpCisgICAgICBrd3NldC0+ZGVsdGFbaV0gPSBkZWx0YVtVKHRyYW5zW2ldKV07CisgIGVsc2UKKyAgICBtZW1jcHkoa3dzZXQtPmRlbHRhLCBkZWx0YSwgTkNIQVIpOworCisgIHJldHVybiBOVUxMOworfQorCisvKiBGYXN0IGJveWVyLW1vb3JlIHNlYXJjaC4gKi8KK3N0YXRpYyBzaXplX3QKK2JtZXhlYyAoa3dzZXRfdCBrd3MsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBzaXplKQoreworICBzdHJ1Y3Qga3dzZXQgY29uc3QgKmt3c2V0OworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGNvbnN0ICpkMTsKKyAgcmVnaXN0ZXIgY2hhciBjb25zdCAqZXAsICpzcCwgKnRwOworICByZWdpc3RlciBpbnQgZCwgZ2MsIGksIGxlbiwgbWQyOworCisgIGt3c2V0ID0gKHN0cnVjdCBrd3NldCBjb25zdCAqKSBrd3M7CisgIGxlbiA9IGt3c2V0LT5taW5kOworCisgIGlmIChsZW4gPT0gMCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKGxlbiA+IHNpemUpCisgICAgcmV0dXJuIC0xOworICBpZiAobGVuID09IDEpCisgICAgeworICAgICAgdHAgPSBtZW1jaHIgKHRleHQsIGt3c2V0LT50YXJnZXRbMF0sIHNpemUpOworICAgICAgcmV0dXJuIHRwID8gdHAgLSB0ZXh0IDogLTE7CisgICAgfQorCisgIGQxID0ga3dzZXQtPmRlbHRhOworICBzcCA9IGt3c2V0LT50YXJnZXQgKyBsZW47CisgIGdjID0gVShzcFstMl0pOworICBtZDIgPSBrd3NldC0+bWluZDI7CisgIHRwID0gdGV4dCArIGxlbjsKKworICAvKiBTaWduaWZpY2FuY2Ugb2YgMTI6IDEgKGluaXRpYWwgb2Zmc2V0KSArIDEwIChza2lwIGxvb3ApICsgMSAobWQyKS4gKi8KKyAgaWYgKHNpemUgPiAxMiAqIGxlbikKKyAgICAvKiAxMSBpcyBub3QgYSBidWcsIHRoZSBpbml0aWFsIG9mZnNldCBoYXBwZW5zIG9ubHkgb25jZS4gKi8KKyAgICBmb3IgKGVwID0gdGV4dCArIHNpemUgLSAxMSAqIGxlbjs7KQorICAgICAgeworCXdoaWxlICh0cCA8PSBlcCkKKwkgIHsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBpZiAoZCA9PSAwKQorCSAgICAgIGdvdG8gZm91bmQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGlmIChkID09IDApCisJICAgICAgZ290byBmb3VuZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICAgIGQgPSBkMVtVKHRwWy0xXSldLCB0cCArPSBkOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgaWYgKGQgPT0gMCkKKwkgICAgICBnb3RvIGZvdW5kOworCSAgICBkID0gZDFbVSh0cFstMV0pXSwgdHAgKz0gZDsKKwkgICAgZCA9IGQxW1UodHBbLTFdKV0sIHRwICs9IGQ7CisJICB9CisJYnJlYWs7CisgICAgICBmb3VuZDoKKwlpZiAoVSh0cFstMl0pID09IGdjKQorCSAgeworCSAgICBmb3IgKGkgPSAzOyBpIDw9IGxlbiAmJiBVKHRwWy1pXSkgPT0gVShzcFstaV0pOyArK2kpCisJICAgICAgOworCSAgICBpZiAoaSA+IGxlbikKKwkgICAgICByZXR1cm4gdHAgLSBsZW4gLSB0ZXh0OworCSAgfQorCXRwICs9IG1kMjsKKyAgICAgIH0KKworICAvKiBOb3cgd2UgaGF2ZSBvbmx5IGEgZmV3IGNoYXJhY3RlcnMgbGVmdCB0byBzZWFyY2guICBXZQorICAgICBjYXJlZnVsbHkgYXZvaWQgZXZlciBwcm9kdWNpbmcgYW4gb3V0LW9mLWJvdW5kcyBwb2ludGVyLiAqLworICBlcCA9IHRleHQgKyBzaXplOworICBkID0gZDFbVSh0cFstMV0pXTsKKyAgd2hpbGUgKGQgPD0gZXAgLSB0cCkKKyAgICB7CisgICAgICBkID0gZDFbVSgodHAgKz0gZClbLTFdKV07CisgICAgICBpZiAoZCAhPSAwKQorCWNvbnRpbnVlOworICAgICAgaWYgKFUodHBbLTJdKSA9PSBnYykKKwl7CisJICBmb3IgKGkgPSAzOyBpIDw9IGxlbiAmJiBVKHRwWy1pXSkgPT0gVShzcFstaV0pOyArK2kpCisJICAgIDsKKwkgIGlmIChpID4gbGVuKQorCSAgICByZXR1cm4gdHAgLSBsZW4gLSB0ZXh0OworCX0KKyAgICAgIGQgPSBtZDI7CisgICAgfQorCisgIHJldHVybiAtMTsKK30KKworLyogSGFpcnkgbXVsdGlwbGUgc3RyaW5nIHNlYXJjaC4gKi8KK3N0YXRpYyBzaXplX3QKK2N3ZXhlYyAoa3dzZXRfdCBrd3MsIGNoYXIgY29uc3QgKnRleHQsIHNpemVfdCBsZW4sIHN0cnVjdCBrd3NtYXRjaCAqa3dzbWF0Y2gpCit7CisgIHN0cnVjdCBrd3NldCBjb25zdCAqa3dzZXQ7CisgIHN0cnVjdCB0cmllICogY29uc3QgKm5leHQ7CisgIHN0cnVjdCB0cmllIGNvbnN0ICp0cmllOworICBzdHJ1Y3QgdHJpZSBjb25zdCAqYWNjZXB0OworICBjaGFyIGNvbnN0ICpiZWcsICpsaW0sICptY2gsICpsbWNoOworICByZWdpc3RlciB1bnNpZ25lZCBjaGFyIGM7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgY29uc3QgKmRlbHRhOworICByZWdpc3RlciBpbnQgZDsKKyAgcmVnaXN0ZXIgY2hhciBjb25zdCAqZW5kLCAqcWxpbTsKKyAgcmVnaXN0ZXIgc3RydWN0IHRyZWUgY29uc3QgKnRyZWU7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgY29uc3QgKnRyYW5zOworCisgIGFjY2VwdCA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSByZWdpc3RlciBjb3BpZXMgYW5kIGxvb2sgZm9yIGVhc3kgd2F5cyBvdXQuICovCisgIGt3c2V0ID0gKHN0cnVjdCBrd3NldCAqKSBrd3M7CisgIGlmIChsZW4gPCBrd3NldC0+bWluZCkKKyAgICByZXR1cm4gLTE7CisgIG5leHQgPSBrd3NldC0+bmV4dDsKKyAgZGVsdGEgPSBrd3NldC0+ZGVsdGE7CisgIHRyYW5zID0ga3dzZXQtPnRyYW5zOworICBsaW0gPSB0ZXh0ICsgbGVuOworICBlbmQgPSB0ZXh0OworICBpZiAoKGQgPSBrd3NldC0+bWluZCkgIT0gMCkKKyAgICBtY2ggPSBOVUxMOworICBlbHNlCisgICAgeworICAgICAgbWNoID0gdGV4dCwgYWNjZXB0ID0ga3dzZXQtPnRyaWU7CisgICAgICBnb3RvIG1hdGNoOworICAgIH0KKworICBpZiAobGVuID49IDQgKiBrd3NldC0+bWluZCkKKyAgICBxbGltID0gbGltIC0gNCAqIGt3c2V0LT5taW5kOworICBlbHNlCisgICAgcWxpbSA9IE5VTEw7CisKKyAgd2hpbGUgKGxpbSAtIGVuZCA+PSBkKQorICAgIHsKKyAgICAgIGlmIChxbGltICYmIGVuZCA8PSBxbGltKQorCXsKKwkgIGVuZCArPSBkIC0gMTsKKwkgIHdoaWxlICgoZCA9IGRlbHRhW2MgPSAqZW5kXSkgJiYgZW5kIDwgcWxpbSkKKwkgICAgeworCSAgICAgIGVuZCArPSBkOworCSAgICAgIGVuZCArPSBkZWx0YVtVKCplbmQpXTsKKwkgICAgICBlbmQgKz0gZGVsdGFbVSgqZW5kKV07CisJICAgIH0KKwkgICsrZW5kOworCX0KKyAgICAgIGVsc2UKKwlkID0gZGVsdGFbYyA9IChlbmQgKz0gZClbLTFdXTsKKyAgICAgIGlmIChkKQorCWNvbnRpbnVlOworICAgICAgYmVnID0gZW5kIC0gMTsKKyAgICAgIHRyaWUgPSBuZXh0W2NdOworICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZykKKwl7CisJICBtY2ggPSBiZWc7CisJICBhY2NlcHQgPSB0cmllOworCX0KKyAgICAgIGQgPSB0cmllLT5zaGlmdDsKKyAgICAgIHdoaWxlIChiZWcgPiB0ZXh0KQorCXsKKwkgIGMgPSB0cmFucyA/IHRyYW5zW1UoKi0tYmVnKV0gOiAqLS1iZWc7CisJICB0cmVlID0gdHJpZS0+bGlua3M7CisJICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUtPmxhYmVsKQorCSAgICBpZiAoYyA8IHRyZWUtPmxhYmVsKQorCSAgICAgIHRyZWUgPSB0cmVlLT5sbGluazsKKwkgICAgZWxzZQorCSAgICAgIHRyZWUgPSB0cmVlLT5ybGluazsKKwkgIGlmICh0cmVlKQorCSAgICB7CisJICAgICAgdHJpZSA9IHRyZWUtPnRyaWU7CisJICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZykKKwkJeworCQkgIG1jaCA9IGJlZzsKKwkJICBhY2NlcHQgPSB0cmllOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgYnJlYWs7CisJICBkID0gdHJpZS0+c2hpZnQ7CisJfQorICAgICAgaWYgKG1jaCkKKwlnb3RvIG1hdGNoOworICAgIH0KKyAgcmV0dXJuIC0xOworCisgbWF0Y2g6CisgIC8qIEdpdmVuIGEga25vd24gbWF0Y2gsIGZpbmQgdGhlIGxvbmdlc3QgcG9zc2libGUgbWF0Y2ggYW5jaG9yZWQKKyAgICAgYXQgb3IgYmVmb3JlIGl0cyBzdGFydGluZyBwb2ludC4gIFRoaXMgaXMgbmVhcmx5IGEgdmVyYmF0aW0KKyAgICAgY29weSBvZiB0aGUgcHJlY2VkaW5nIG1haW4gc2VhcmNoIGxvb3BzLiAqLworICBpZiAobGltIC0gbWNoID4ga3dzZXQtPm1heGQpCisgICAgbGltID0gbWNoICsga3dzZXQtPm1heGQ7CisgIGxtY2ggPSBOVUxMOworICBkID0gMTsKKyAgd2hpbGUgKGxpbSAtIGVuZCA+PSBkKQorICAgIHsKKyAgICAgIGlmICgoZCA9IGRlbHRhW2MgPSAoZW5kICs9IGQpWy0xXV0pICE9IDApCisJY29udGludWU7CisgICAgICBiZWcgPSBlbmQgLSAxOworICAgICAgaWYgKCEodHJpZSA9IG5leHRbY10pKQorCXsKKwkgIGQgPSAxOworCSAgY29udGludWU7CisJfQorICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZyAmJiBiZWcgPD0gbWNoKQorCXsKKwkgIGxtY2ggPSBiZWc7CisJICBhY2NlcHQgPSB0cmllOworCX0KKyAgICAgIGQgPSB0cmllLT5zaGlmdDsKKyAgICAgIHdoaWxlIChiZWcgPiB0ZXh0KQorCXsKKwkgIGMgPSB0cmFucyA/IHRyYW5zW1UoKi0tYmVnKV0gOiAqLS1iZWc7CisJICB0cmVlID0gdHJpZS0+bGlua3M7CisJICB3aGlsZSAodHJlZSAmJiBjICE9IHRyZWUtPmxhYmVsKQorCSAgICBpZiAoYyA8IHRyZWUtPmxhYmVsKQorCSAgICAgIHRyZWUgPSB0cmVlLT5sbGluazsKKwkgICAgZWxzZQorCSAgICAgIHRyZWUgPSB0cmVlLT5ybGluazsKKwkgIGlmICh0cmVlKQorCSAgICB7CisJICAgICAgdHJpZSA9IHRyZWUtPnRyaWU7CisJICAgICAgaWYgKHRyaWUtPmFjY2VwdGluZyAmJiBiZWcgPD0gbWNoKQorCQl7CisJCSAgbG1jaCA9IGJlZzsKKwkJICBhY2NlcHQgPSB0cmllOworCQl9CisJICAgIH0KKwkgIGVsc2UKKwkgICAgYnJlYWs7CisJICBkID0gdHJpZS0+c2hpZnQ7CisJfQorICAgICAgaWYgKGxtY2gpCisJeworCSAgbWNoID0gbG1jaDsKKwkgIGdvdG8gbWF0Y2g7CisJfQorICAgICAgaWYgKCFkKQorCWQgPSAxOworICAgIH0KKworICBpZiAoa3dzbWF0Y2gpCisgICAgeworICAgICAga3dzbWF0Y2gtPmluZGV4ID0gYWNjZXB0LT5hY2NlcHRpbmcgLyAyOworICAgICAga3dzbWF0Y2gtPm9mZnNldFswXSA9IG1jaCAtIHRleHQ7CisgICAgICBrd3NtYXRjaC0+c2l6ZVswXSA9IGFjY2VwdC0+ZGVwdGg7CisgICAgfQorICByZXR1cm4gbWNoIC0gdGV4dDsKK30KKworLyogU2VhcmNoIHRocm91Z2ggdGhlIGdpdmVuIHRleHQgZm9yIGEgbWF0Y2ggb2YgYW55IG1lbWJlciBvZiB0aGUKKyAgIGdpdmVuIGtleXdvcmQgc2V0LiAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mCisgICB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nLCBvciBOVUxMIGlmIG5vIG1hdGNoIGlzIGZvdW5kLiAgSWYgRk9VTkRMRU4KKyAgIGlzIG5vbi1OVUxMIHN0b3JlIGluIHRoZSByZWZlcmVuY2VkIGxvY2F0aW9uIHRoZSBsZW5ndGggb2YgdGhlCisgICBtYXRjaGluZyBzdWJzdHJpbmcuICBTaW1pbGFybHksIGlmIEZPVU5ESURYIGlzIG5vbi1OVUxMLCBzdG9yZQorICAgaW4gdGhlIHJlZmVyZW5jZWQgbG9jYXRpb24gdGhlIGluZGV4IG51bWJlciBvZiB0aGUgcGFydGljdWxhcgorICAga2V5d29yZCBtYXRjaGVkLiAqLworc2l6ZV90Citrd3NleGVjIChrd3NldF90IGt3cywgY2hhciBjb25zdCAqdGV4dCwgc2l6ZV90IHNpemUsCisJIHN0cnVjdCBrd3NtYXRjaCAqa3dzbWF0Y2gpCit7CisgIHN0cnVjdCBrd3NldCBjb25zdCAqa3dzZXQgPSAoc3RydWN0IGt3c2V0ICopIGt3czsKKyAgaWYgKGt3c2V0LT53b3JkcyA9PSAxICYmIGt3c2V0LT50cmFucyA9PSBOVUxMKQorICAgIHsKKyAgICAgIHNpemVfdCByZXQgPSBibWV4ZWMgKGt3cywgdGV4dCwgc2l6ZSk7CisgICAgICBpZiAoa3dzbWF0Y2ggIT0gTlVMTCAmJiByZXQgIT0gKHNpemVfdCkgLTEpCisJeworCSAga3dzbWF0Y2gtPmluZGV4ID0gMDsKKwkgIGt3c21hdGNoLT5vZmZzZXRbMF0gPSByZXQ7CisJICBrd3NtYXRjaC0+c2l6ZVswXSA9IGt3c2V0LT5taW5kOworCX0KKyAgICAgIHJldHVybiByZXQ7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIGN3ZXhlYyhrd3MsIHRleHQsIHNpemUsIGt3c21hdGNoKTsKK30KKworLyogRnJlZSB0aGUgY29tcG9uZW50cyBvZiB0aGUgZ2l2ZW4ga2V5d29yZCBzZXQuICovCit2b2lkCitrd3NmcmVlIChrd3NldF90IGt3cykKK3sKKyAgc3RydWN0IGt3c2V0ICprd3NldDsKKworICBrd3NldCA9IChzdHJ1Y3Qga3dzZXQgKikga3dzOworICBvYnN0YWNrX2ZyZWUoJmt3c2V0LT5vYnN0YWNrLCBOVUxMKTsKKyAgZnJlZShrd3MpOworfQpkaWZmIC0tZ2l0IGEva3dzZXQuaCBiL2t3c2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFhMTM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2t3c2V0LmgKQEAgLTAsMCArMSw2MyBAQAorLyogVGhpcyBmaWxlIGhhcyBiZWVuIGNvcGllZCBmcm9tIGNvbW1pdCBlN2FjNzEzZF4gaW4gdGhlIEdOVSBncmVwIGdpdAorICogcmVwb3NpdG9yeS4gQSBmZXcgc21hbGwgY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byBhZGFwdCB0aGUgY29kZSB0bworICogR2l0LgorICovCisKKy8qIGt3c2V0LmggLSBoZWFkZXIgZGVjbGFyaW5nIHRoZSBrZXl3b3JkIHNldCBsaWJyYXJ5LgorICAgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTk4LCAyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgICAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBXcml0dGVuIEF1Z3VzdCAxOTg5IGJ5IE1pa2UgSGFlcnRlbC4KKyAgIFRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgKEVtYWlsKSBhdCB0aGUgYWRkcmVzcyBtaWtlQGFpLm1pdC5lZHUsCisgICBvciAoVVMgbWFpbCkgYXMgTWlrZSBIYWVydGVsIGMvbyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICovCisKK3N0cnVjdCBrd3NtYXRjaAoreworICBpbnQgaW5kZXg7CQkJLyogSW5kZXggbnVtYmVyIG9mIG1hdGNoaW5nIGtleXdvcmQuICovCisgIHNpemVfdCBvZmZzZXRbMV07CQkvKiBPZmZzZXQgb2YgZWFjaCBzdWJtYXRjaC4gKi8KKyAgc2l6ZV90IHNpemVbMV07CQkvKiBMZW5ndGggb2YgZWFjaCBzdWJtYXRjaC4gKi8KK307CisKK3N0cnVjdCBrd3NldF90OwordHlwZWRlZiBzdHJ1Y3Qga3dzZXRfdCoga3dzZXRfdDsKKworLyogUmV0dXJuIGFuIG9wYXF1ZSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGtleXdvcmQgc2V0LCBvciBOVUxMCisgICBpZiBlbm91Z2ggbWVtb3J5IGNhbm5vdCBiZSBvYnRhaW5lZC4gIFRoZSBhcmd1bWVudCBpZiBub24tTlVMTAorICAgc3BlY2lmaWVzIGEgdGFibGUgb2YgY2hhcmFjdGVyIHRyYW5zbGF0aW9ucyB0byBiZSBhcHBsaWVkIHRvIGFsbAorICAgcGF0dGVybiBhbmQgc2VhcmNoIHRleHQuICovCitleHRlcm4ga3dzZXRfdCBrd3NhbGxvYyh1bnNpZ25lZCBjaGFyIGNvbnN0ICopOworCisvKiBJbmNyZW1lbnRhbGx5IGV4dGVuZCB0aGUga2V5d29yZCBzZXQgdG8gaW5jbHVkZSB0aGUgZ2l2ZW4gc3RyaW5nLgorICAgUmV0dXJuIE5VTEwgZm9yIHN1Y2Nlc3MsIG9yIGFuIGVycm9yIG1lc3NhZ2UuICBSZW1lbWJlciBhbiBpbmRleAorICAgbnVtYmVyIGZvciBlYWNoIGtleXdvcmQgaW5jbHVkZWQgaW4gdGhlIHNldC4gKi8KK2V4dGVybiBjb25zdCBjaGFyICprd3NpbmNyKGt3c2V0X3QsIGNoYXIgY29uc3QgKiwgc2l6ZV90KTsKKworLyogV2hlbiB0aGUga2V5d29yZCBzZXQgaGFzIGJlZW4gY29tcGxldGVseSBidWlsdCwgcHJlcGFyZSBpdCBmb3IKKyAgIHVzZS4gIFJldHVybiBOVUxMIGZvciBzdWNjZXNzLCBvciBhbiBlcnJvciBtZXNzYWdlLiAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKmt3c3ByZXAoa3dzZXRfdCk7CisKKy8qIFNlYXJjaCB0aHJvdWdoIHRoZSBnaXZlbiBidWZmZXIgZm9yIGEgbWVtYmVyIG9mIHRoZSBrZXl3b3JkIHNldC4KKyAgIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGxlZnRtb3N0IGxvbmdlc3QgbWF0Y2ggZm91bmQsIG9yIE5VTEwgaWYKKyAgIG5vIG1hdGNoIGlzIGZvdW5kLiAgSWYgZm91bmRsZW4gaXMgbm9uLU5VTEwsIHN0b3JlIHRoZSBsZW5ndGggb2YKKyAgIHRoZSBtYXRjaGluZyBzdWJzdHJpbmcgaW4gdGhlIGludGVnZXIgaXQgcG9pbnRzIHRvLiAgU2ltaWxhcmx5LAorICAgaWYgZm91bmRpbmRleCBpcyBub24tTlVMTCwgc3RvcmUgdGhlIGluZGV4IG9mIHRoZSBwYXJ0aWN1bGFyCisgICBrZXl3b3JkIGZvdW5kIHRoZXJlaW4uICovCitleHRlcm4gc2l6ZV90IGt3c2V4ZWMoa3dzZXRfdCwgY2hhciBjb25zdCAqLCBzaXplX3QsIHN0cnVjdCBrd3NtYXRjaCAqKTsKKworLyogRGVhbGxvY2F0ZSB0aGUgZ2l2ZW4ga2V5d29yZCBzZXQgYW5kIGFsbCBpdHMgYXNzb2NpYXRlZCBzdG9yYWdlLiAqLworZXh0ZXJuIHZvaWQga3dzZnJlZShrd3NldF90KTsKKwpkaWZmIC0tZ2l0IGEvbGV2ZW5zaHRlaW4uYyBiL2xldmVuc2h0ZWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMyODE1OQotLS0gL2Rldi9udWxsCisrKyBiL2xldmVuc2h0ZWluLmMKQEAgLTAsMCArMSw4NCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibGV2ZW5zaHRlaW4uaCIKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgRGFtZXJhdS1MZXZlbnNodGVpbiBhbGdvcml0aG0gdG8KKyAqIGNhbGN1bGF0ZSBhIGRpc3RhbmNlIGJldHdlZW4gc3RyaW5ncy4KKyAqCisgKiBCYXNpY2FsbHksIGl0IHNheXMgaG93IG1hbnkgbGV0dGVycyBuZWVkIHRvIGJlIHN3YXBwZWQsIHN1YnN0aXR1dGVkLAorICogZGVsZXRlZCBmcm9tLCBvciBhZGRlZCB0byBzdHJpbmcxLCBhdCBsZWFzdCwgdG8gZ2V0IHN0cmluZzIuCisgKgorICogVGhlIGlkZWEgaXMgdG8gYnVpbGQgYSBkaXN0YW5jZSBtYXRyaXggZm9yIHRoZSBzdWJzdHJpbmdzIG9mIGJvdGgKKyAqIHN0cmluZ3MuICBUbyBhdm9pZCBhIGxhcmdlIHNwYWNlIGNvbXBsZXhpdHksIG9ubHkgdGhlIGxhc3QgdGhyZWUgcm93cworICogYXJlIGtlcHQgaW4gbWVtb3J5IChpZiBzd2FwcyBoYWQgdGhlIHNhbWUgb3IgaGlnaGVyIGNvc3QgYXMgb25lIGRlbGV0aW9uCisgKiBwbHVzIG9uZSBpbnNlcnRpb24sIG9ubHkgdHdvIHJvd3Mgd291bGQgYmUgbmVlZGVkKS4KKyAqCisgKiBBdCBhbnkgc3RhZ2UsICJpICsgMSIgZGVub3RlcyB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHN1YnN0cmluZyBvZgorICogc3RyaW5nMSB0aGF0IHRoZSBkaXN0YW5jZSBpcyBjYWxjdWxhdGVkIGZvci4KKyAqCisgKiByb3cyIGhvbGRzIHRoZSBjdXJyZW50IHJvdywgcm93MSB0aGUgcHJldmlvdXMgcm93IChpLmUuIGZvciB0aGUgc3Vic3RyaW5nCisgKiBvZiBzdHJpbmcxIG9mIGxlbmd0aCAiaSIpLCBhbmQgcm93MCB0aGUgcm93IGJlZm9yZSB0aGF0LgorICoKKyAqIEluIG90aGVyIHdvcmRzLCBhdCB0aGUgc3RhcnQgb2YgdGhlIGJpZyBsb29wLCByb3cyW2ogKyAxXSBjb250YWlucyB0aGUKKyAqIERhbWVyYXUtTGV2ZW5zaHRlaW4gZGlzdGFuY2UgYmV0d2VlbiB0aGUgc3Vic3RyaW5nIG9mIHN0cmluZzEgb2YgbGVuZ3RoCisgKiAiaSIgYW5kIHRoZSBzdWJzdHJpbmcgb2Ygc3RyaW5nMiBvZiBsZW5ndGggImogKyAxIi4KKyAqCisgKiBBbGwgdGhlIGJpZyBsb29wIGRvZXMgaXMgZGV0ZXJtaW5lIHRoZSBwYXJ0aWFsIG1pbmltdW0tY29zdCBwYXRocy4KKyAqCisgKiBJdCBkb2VzIHNvIGJ5IGNhbGN1bGF0aW5nIHRoZSBjb3N0cyBvZiB0aGUgcGF0aCBlbmRpbmcgaW4gY2hhcmFjdGVycworICogaSAoaW4gc3RyaW5nMSkgYW5kIGogKGluIHN0cmluZzIpLCByZXNwZWN0aXZlbHksIGdpdmVuIHRoYXQgdGhlIGxhc3QKKyAqIG9wZXJhdGlvbiBpcyBhIHN1YnN0aXR1dGlvbiwgYSBzd2FwLCBhIGRlbGV0aW9uLCBvciBhbiBpbnNlcnRpb24uCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhbGxvd3MgdGhlIGNvc3RzIHRvIGJlIHdlaWdodGVkOgorICoKKyAqIC0gdyAoYXMgaW4gInNXYXAiKQorICogLSBzIChhcyBpbiAiU3Vic3RpdHV0aW9uIikKKyAqIC0gYSAoZm9yIGluc2VydGlvbiwgQUtBICJBZGQiKQorICogLSBkIChhcyBpbiAiRGVsZXRpb24iKQorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGFsZ29yaXRobSBjYWxjdWxhdGVzIGEgZGlzdGFuY2UgX2lmZl8gZCA9PSBhLgorICovCitpbnQgbGV2ZW5zaHRlaW4oY29uc3QgY2hhciAqc3RyaW5nMSwgY29uc3QgY2hhciAqc3RyaW5nMiwKKwkJaW50IHcsIGludCBzLCBpbnQgYSwgaW50IGQpCit7CisJaW50IGxlbjEgPSBzdHJsZW4oc3RyaW5nMSksIGxlbjIgPSBzdHJsZW4oc3RyaW5nMik7CisJaW50ICpyb3cwID0geG1hbGxvYyhzaXplb2YoaW50KSAqIChsZW4yICsgMSkpOworCWludCAqcm93MSA9IHhtYWxsb2Moc2l6ZW9mKGludCkgKiAobGVuMiArIDEpKTsKKwlpbnQgKnJvdzIgPSB4bWFsbG9jKHNpemVvZihpbnQpICogKGxlbjIgKyAxKSk7CisJaW50IGksIGo7CisKKwlmb3IgKGogPSAwOyBqIDw9IGxlbjI7IGorKykKKwkJcm93MVtqXSA9IGogKiBhOworCWZvciAoaSA9IDA7IGkgPCBsZW4xOyBpKyspIHsKKwkJaW50ICpkdW1teTsKKworCQlyb3cyWzBdID0gKGkgKyAxKSAqIGQ7CisJCWZvciAoaiA9IDA7IGogPCBsZW4yOyBqKyspIHsKKwkJCS8qIHN1YnN0aXR1dGlvbiAqLworCQkJcm93MltqICsgMV0gPSByb3cxW2pdICsgcyAqIChzdHJpbmcxW2ldICE9IHN0cmluZzJbal0pOworCQkJLyogc3dhcCAqLworCQkJaWYgKGkgPiAwICYmIGogPiAwICYmIHN0cmluZzFbaSAtIDFdID09IHN0cmluZzJbal0gJiYKKwkJCQkJc3RyaW5nMVtpXSA9PSBzdHJpbmcyW2ogLSAxXSAmJgorCQkJCQlyb3cyW2ogKyAxXSA+IHJvdzBbaiAtIDFdICsgdykKKwkJCQlyb3cyW2ogKyAxXSA9IHJvdzBbaiAtIDFdICsgdzsKKwkJCS8qIGRlbGV0aW9uICovCisJCQlpZiAocm93MltqICsgMV0gPiByb3cxW2ogKyAxXSArIGQpCisJCQkJcm93MltqICsgMV0gPSByb3cxW2ogKyAxXSArIGQ7CisJCQkvKiBpbnNlcnRpb24gKi8KKwkJCWlmIChyb3cyW2ogKyAxXSA+IHJvdzJbal0gKyBhKQorCQkJCXJvdzJbaiArIDFdID0gcm93MltqXSArIGE7CisJCX0KKworCQlkdW1teSA9IHJvdzA7CisJCXJvdzAgPSByb3cxOworCQlyb3cxID0gcm93MjsKKwkJcm93MiA9IGR1bW15OworCX0KKworCWkgPSByb3cxW2xlbjJdOworCWZyZWUocm93MCk7CisJZnJlZShyb3cxKTsKKwlmcmVlKHJvdzIpOworCisJcmV0dXJuIGk7Cit9CmRpZmYgLS1naXQgYS9sZXZlbnNodGVpbi5oIGIvbGV2ZW5zaHRlaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTA1YmYzCi0tLSAvZGV2L251bGwKKysrIGIvbGV2ZW5zaHRlaW4uaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgTEVWRU5TSFRFSU5fSAorI2RlZmluZSBMRVZFTlNIVEVJTl9ICisKK2ludCBsZXZlbnNodGVpbihjb25zdCBjaGFyICpzdHJpbmcxLCBjb25zdCBjaGFyICpzdHJpbmcyLAorCWludCBzd2FwX3BlbmFsdHksIGludCBzdWJzdGl0dXRpb25fcGVuYWx0eSwKKwlpbnQgaW5zZXJ0aW9uX3BlbmFsdHksIGludCBkZWxldGlvbl9wZW5hbHR5KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saW5lLWxvZy5jIGIvbGluZS1sb2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjZiMjJjCi0tLSAvZGV2L251bGwKKysrIGIvbGluZS1sb2cuYwpAQCAtMCwwICsxLDEyNTcgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJsaW5lLXJhbmdlLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkZWNvcmF0ZS5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAibG9nLXRyZWUuaCIKKyNpbmNsdWRlICJncmFwaC5oIgorI2luY2x1ZGUgInVzZXJkaWZmLmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKKworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X2dyb3coc3RydWN0IHJhbmdlX3NldCAqcnMsIHNpemVfdCBleHRyYSkKK3sKKwlBTExPQ19HUk9XKHJzLT5yYW5nZXMsIHJzLT5uciArIGV4dHJhLCBycy0+YWxsb2MpOworfQorCisvKiBFaXRoZXIgaW5pdGlhbGl6YXRpb24gd291bGQgYmUgZmluZSAqLworI2RlZmluZSBSQU5HRV9TRVRfSU5JVCB7MH0KKwordm9pZCByYW5nZV9zZXRfaW5pdChzdHJ1Y3QgcmFuZ2Vfc2V0ICpycywgc2l6ZV90IHByZWFsbG9jKQoreworCXJzLT5hbGxvYyA9IHJzLT5uciA9IDA7CisJcnMtPnJhbmdlcyA9IE5VTEw7CisJaWYgKHByZWFsbG9jKQorCQlyYW5nZV9zZXRfZ3JvdyhycywgcHJlYWxsb2MpOworfQorCit2b2lkIHJhbmdlX3NldF9yZWxlYXNlKHN0cnVjdCByYW5nZV9zZXQgKnJzKQoreworCWZyZWUocnMtPnJhbmdlcyk7CisJcnMtPmFsbG9jID0gcnMtPm5yID0gMDsKKwlycy0+cmFuZ2VzID0gTlVMTDsKK30KKworLyogZHN0IG11c3QgYmUgdW5pbml0aWFsaXplZCEgKi8KK3N0YXRpYyB2b2lkIHJhbmdlX3NldF9jb3B5KHN0cnVjdCByYW5nZV9zZXQgKmRzdCwgc3RydWN0IHJhbmdlX3NldCAqc3JjKQoreworCXJhbmdlX3NldF9pbml0KGRzdCwgc3JjLT5ucik7CisJbWVtY3B5KGRzdC0+cmFuZ2VzLCBzcmMtPnJhbmdlcywgc3JjLT5ucipzaXplb2Yoc3RydWN0IHJhbmdlX3NldCkpOworCWRzdC0+bnIgPSBzcmMtPm5yOworfQorc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X21vdmUoc3RydWN0IHJhbmdlX3NldCAqZHN0LCBzdHJ1Y3QgcmFuZ2Vfc2V0ICpzcmMpCit7CisJcmFuZ2Vfc2V0X3JlbGVhc2UoZHN0KTsKKwlkc3QtPnJhbmdlcyA9IHNyYy0+cmFuZ2VzOworCWRzdC0+bnIgPSBzcmMtPm5yOworCWRzdC0+YWxsb2MgPSBzcmMtPmFsbG9jOworCXNyYy0+cmFuZ2VzID0gTlVMTDsKKwlzcmMtPmFsbG9jID0gc3JjLT5uciA9IDA7Cit9CisKKy8qIHRhY2sgb24gYSBfbmV3XyByYW5nZSBfYXQgdGhlIGVuZF8gKi8KK3ZvaWQgcmFuZ2Vfc2V0X2FwcGVuZF91bnNhZmUoc3RydWN0IHJhbmdlX3NldCAqcnMsIGxvbmcgYSwgbG9uZyBiKQoreworCWFzc2VydChhIDw9IGIpOworCXJhbmdlX3NldF9ncm93KHJzLCAxKTsKKwlycy0+cmFuZ2VzW3JzLT5ucl0uc3RhcnQgPSBhOworCXJzLT5yYW5nZXNbcnMtPm5yXS5lbmQgPSBiOworCXJzLT5ucisrOworfQorCit2b2lkIHJhbmdlX3NldF9hcHBlbmQoc3RydWN0IHJhbmdlX3NldCAqcnMsIGxvbmcgYSwgbG9uZyBiKQoreworCWFzc2VydChycy0+bnIgPT0gMCB8fCBycy0+cmFuZ2VzW3JzLT5uci0xXS5lbmQgPD0gYSk7CisJcmFuZ2Vfc2V0X2FwcGVuZF91bnNhZmUocnMsIGEsIGIpOworfQorCitzdGF0aWMgaW50IHJhbmdlX2NtcChjb25zdCB2b2lkICpfciwgY29uc3Qgdm9pZCAqX3MpCit7CisJY29uc3Qgc3RydWN0IHJhbmdlICpyID0gX3I7CisJY29uc3Qgc3RydWN0IHJhbmdlICpzID0gX3M7CisKKwkvKiB0aGlzIGNvdWxkIGJlIHNpbXBseSAncmV0dXJuIHIuc3RhcnQtcy5zdGFydCcsIGJ1dCBmb3IgdGhlIHR5cGVzICovCisJaWYgKHItPnN0YXJ0ID09IHMtPnN0YXJ0KQorCQlyZXR1cm4gMDsKKwlpZiAoci0+c3RhcnQgPCBzLT5zdGFydCkKKwkJcmV0dXJuIC0xOworCXJldHVybiAxOworfQorCisvKgorICogQ2hlY2sgdGhhdCB0aGUgcmFuZ2VzIGFyZSBub24tZW1wdHksIHNvcnRlZCBhbmQgbm9uLW92ZXJsYXBwaW5nCisgKi8KK3N0YXRpYyB2b2lkIHJhbmdlX3NldF9jaGVja19pbnZhcmlhbnRzKHN0cnVjdCByYW5nZV9zZXQgKnJzKQoreworCWludCBpOworCisJaWYgKCFycykKKwkJcmV0dXJuOworCisJaWYgKHJzLT5ucikKKwkJYXNzZXJ0KHJzLT5yYW5nZXNbMF0uc3RhcnQgPCBycy0+cmFuZ2VzWzBdLmVuZCk7CisKKwlmb3IgKGkgPSAxOyBpIDwgcnMtPm5yOyBpKyspIHsKKwkJYXNzZXJ0KHJzLT5yYW5nZXNbaS0xXS5lbmQgPCBycy0+cmFuZ2VzW2ldLnN0YXJ0KTsKKwkJYXNzZXJ0KHJzLT5yYW5nZXNbaV0uc3RhcnQgPCBycy0+cmFuZ2VzW2ldLmVuZCk7CisJfQorfQorCisvKgorICogSW4tcGxhY2UgcGFzcyBvZiBzb3J0aW5nIGFuZCBtZXJnaW5nIHRoZSByYW5nZXMgaW4gdGhlIHJhbmdlIHNldCwKKyAqIHRvIGVzdGFibGlzaCB0aGUgaW52YXJpYW50cyB3aGVuIHdlIGdldCB0aGUgcmFuZ2VzIGZyb20gdGhlIHVzZXIKKyAqLwordm9pZCBzb3J0X2FuZF9tZXJnZV9yYW5nZV9zZXQoc3RydWN0IHJhbmdlX3NldCAqcnMpCit7CisJaW50IGk7CisJaW50IG8gPSAwOyAvKiBvdXRwdXQgY3Vyc29yICovCisKKwlxc29ydChycy0+cmFuZ2VzLCBycy0+bnIsIHNpemVvZihzdHJ1Y3QgcmFuZ2UpLCByYW5nZV9jbXApOworCisJZm9yIChpID0gMDsgaSA8IHJzLT5ucjsgaSsrKSB7CisJCWlmIChycy0+cmFuZ2VzW2ldLnN0YXJ0ID09IHJzLT5yYW5nZXNbaV0uZW5kKQorCQkJY29udGludWU7CisJCWlmIChvID4gMCAmJiBycy0+cmFuZ2VzW2ldLnN0YXJ0IDw9IHJzLT5yYW5nZXNbby0xXS5lbmQpIHsKKwkJCWlmIChycy0+cmFuZ2VzW28tMV0uZW5kIDwgcnMtPnJhbmdlc1tpXS5lbmQpCisJCQkJcnMtPnJhbmdlc1tvLTFdLmVuZCA9IHJzLT5yYW5nZXNbaV0uZW5kOworCQl9IGVsc2UgeworCQkJcnMtPnJhbmdlc1tvXS5zdGFydCA9IHJzLT5yYW5nZXNbaV0uc3RhcnQ7CisJCQlycy0+cmFuZ2VzW29dLmVuZCA9IHJzLT5yYW5nZXNbaV0uZW5kOworCQkJbysrOworCQl9CisJfQorCWFzc2VydChvIDw9IHJzLT5ucik7CisJcnMtPm5yID0gbzsKKworCXJhbmdlX3NldF9jaGVja19pbnZhcmlhbnRzKHJzKTsKK30KKworLyoKKyAqIFVuaW9uIG9mIHJhbmdlIHNldHMgKGkuZS4sIHNldHMgb2YgbGluZSBudW1iZXJzKS4gIFVzZWQgdG8gbWVyZ2UKKyAqIHRoZW0gd2hlbiBzZWFyY2hlcyBtZWV0IGF0IGEgY29tbW9uIGFuY2VzdG9yLgorICoKKyAqIFRoaXMgaXMgYWxzbyB3aGVyZSB0aGUgcmFuZ2VzIGFyZSBjb25zb2xpZGF0ZWQgaW50byBjYW5vbmljYWwgZm9ybToKKyAqIG92ZXJsYXBwaW5nIGFuZCBhZGphY2VudCByYW5nZXMgYXJlIG1lcmdlZCwgYW5kIGVtcHR5IHJhbmdlcyBhcmUKKyAqIHJlbW92ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHJhbmdlX3NldF91bmlvbihzdHJ1Y3QgcmFuZ2Vfc2V0ICpvdXQsCisJCQkgICAgIHN0cnVjdCByYW5nZV9zZXQgKmEsIHN0cnVjdCByYW5nZV9zZXQgKmIpCit7CisJaW50IGkgPSAwLCBqID0gMCwgbyA9IDA7CisJc3RydWN0IHJhbmdlICpyYSA9IGEtPnJhbmdlczsKKwlzdHJ1Y3QgcmFuZ2UgKnJiID0gYi0+cmFuZ2VzOworCS8qIGNhbm5vdCBtYWtlIGFuIGFsaWFzIG9mIG91dC0+cmFuZ2VzOiBpdCBtYXkgY2hhbmdlIGR1cmluZyBncm93ICovCisKKwlhc3NlcnQob3V0LT5uciA9PSAwKTsKKwl3aGlsZSAoaSA8IGEtPm5yIHx8IGogPCBiLT5ucikgeworCQlzdHJ1Y3QgcmFuZ2UgKm5ldzsKKwkJaWYgKGkgPCBhLT5uciAmJiBqIDwgYi0+bnIpIHsKKwkJCWlmIChyYVtpXS5zdGFydCA8IHJiW2pdLnN0YXJ0KQorCQkJCW5ldyA9ICZyYVtpKytdOworCQkJZWxzZSBpZiAocmFbaV0uc3RhcnQgPiByYltqXS5zdGFydCkKKwkJCQluZXcgPSAmcmJbaisrXTsKKwkJCWVsc2UgaWYgKHJhW2ldLmVuZCA8IHJiW2pdLmVuZCkKKwkJCQluZXcgPSAmcmFbaSsrXTsKKwkJCWVsc2UKKwkJCQluZXcgPSAmcmJbaisrXTsKKwkJfSBlbHNlIGlmIChpIDwgYS0+bnIpICAgICAgLyogYiBleGhhdXN0ZWQgKi8KKwkJCW5ldyA9ICZyYVtpKytdOworCQllbHNlICAgICAgICAgICAgICAgICAgICAgICAvKiBhIGV4aGF1c3RlZCAqLworCQkJbmV3ID0gJnJiW2orK107CisJCWlmIChuZXctPnN0YXJ0ID09IG5ldy0+ZW5kKQorCQkJOyAvKiBlbXB0eSByYW5nZSAqLworCQllbHNlIGlmICghbyB8fCBvdXQtPnJhbmdlc1tvLTFdLmVuZCA8IG5ldy0+c3RhcnQpIHsKKwkJCXJhbmdlX3NldF9ncm93KG91dCwgMSk7CisJCQlvdXQtPnJhbmdlc1tvXS5zdGFydCA9IG5ldy0+c3RhcnQ7CisJCQlvdXQtPnJhbmdlc1tvXS5lbmQgPSBuZXctPmVuZDsKKwkJCW8rKzsKKwkJfSBlbHNlIGlmIChvdXQtPnJhbmdlc1tvLTFdLmVuZCA8IG5ldy0+ZW5kKSB7CisJCQlvdXQtPnJhbmdlc1tvLTFdLmVuZCA9IG5ldy0+ZW5kOworCQl9CisJfQorCW91dC0+bnIgPSBvOworfQorCisvKgorICogRGlmZmVyZW5jZSBvZiByYW5nZSBzZXRzIChvdXQgPSBhIFwgYikuICBQYXNzIHRoZSAiaW50ZXJlc3RpbmciCisgKiByYW5nZXMgYXMgJ2EnIGFuZCB0aGUgdGFyZ2V0IHNpZGUgb2YgdGhlIGRpZmYgYXMgJ2InOiBpdCByZW1vdmVzCisgKiB0aGUgcmFuZ2VzIGZvciB3aGljaCB0aGUgY29tbWl0IGlzIHJlc3BvbnNpYmxlLgorICovCitzdGF0aWMgdm9pZCByYW5nZV9zZXRfZGlmZmVyZW5jZShzdHJ1Y3QgcmFuZ2Vfc2V0ICpvdXQsCisJCQkJICBzdHJ1Y3QgcmFuZ2Vfc2V0ICphLCBzdHJ1Y3QgcmFuZ2Vfc2V0ICpiKQoreworCWludCBpLCBqID0gIDA7CisJZm9yIChpID0gMDsgaSA8IGEtPm5yOyBpKyspIHsKKwkJbG9uZyBzdGFydCA9IGEtPnJhbmdlc1tpXS5zdGFydDsKKwkJbG9uZyBlbmQgPSBhLT5yYW5nZXNbaV0uZW5kOworCQl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJCXdoaWxlIChqIDwgYi0+bnIgJiYgc3RhcnQgPj0gYi0+cmFuZ2VzW2pdLmVuZCkKKwkJCQkvKgorCQkJCSAqIGE6ICAgICAgICAgfC0tLS0tLS0KKwkJCQkgKiBiOiAtLS0tLS18CisJCQkJICovCisJCQkJaisrOworCQkJaWYgKGogPj0gYi0+bnIgfHwgZW5kIDwgYi0+cmFuZ2VzW2pdLnN0YXJ0KSB7CisJCQkJLyoKKwkJCQkgKiBiIGV4aGF1c3RlZCwgb3IKKwkJCQkgKiBhOiAgLS0tLXwKKwkJCQkgKiBiOiAgICAgICAgIHwtLS0tCisJCQkJICovCisJCQkJcmFuZ2Vfc2V0X2FwcGVuZChvdXQsIHN0YXJ0LCBlbmQpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHN0YXJ0ID49IGItPnJhbmdlc1tqXS5zdGFydCkgeworCQkJCS8qCisJCQkJICogYTogICAgIHwtLT8/Pz8KKwkJCQkgKiBiOiB8LS0tLS0tfAorCQkJCSAqLworCQkJCXN0YXJ0ID0gYi0+cmFuZ2VzW2pdLmVuZDsKKwkJCX0gZWxzZSBpZiAoZW5kID4gYi0+cmFuZ2VzW2pdLnN0YXJ0KSB7CisJCQkJLyoKKwkJCQkgKiBhOiB8LS0tLS18CisJCQkJICogYjogICAgfC0tPz8/Pz8KKwkJCQkgKi8KKwkJCQlpZiAoc3RhcnQgPCBiLT5yYW5nZXNbal0uc3RhcnQpCisJCQkJCXJhbmdlX3NldF9hcHBlbmQob3V0LCBzdGFydCwgYi0+cmFuZ2VzW2pdLnN0YXJ0KTsKKwkJCQlzdGFydCA9IGItPnJhbmdlc1tqXS5lbmQ7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRpZmZfcmFuZ2VzX2luaXQoc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmKQoreworCXJhbmdlX3NldF9pbml0KCZkaWZmLT5wYXJlbnQsIDApOworCXJhbmdlX3NldF9pbml0KCZkaWZmLT50YXJnZXQsIDApOworfQorCitzdGF0aWMgdm9pZCBkaWZmX3Jhbmdlc19yZWxlYXNlKHN0cnVjdCBkaWZmX3JhbmdlcyAqZGlmZikKK3sKKwlyYW5nZV9zZXRfcmVsZWFzZSgmZGlmZi0+cGFyZW50KTsKKwlyYW5nZV9zZXRfcmVsZWFzZSgmZGlmZi0+dGFyZ2V0KTsKK30KKworc3RhdGljIHZvaWQgbGluZV9sb2dfZGF0YV9pbml0KHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyKQoreworCW1lbXNldChyLCAwLCBzaXplb2Yoc3RydWN0IGxpbmVfbG9nX2RhdGEpKTsKKwlyYW5nZV9zZXRfaW5pdCgmci0+cmFuZ2VzLCAwKTsKK30KKworc3RhdGljIHZvaWQgbGluZV9sb2dfZGF0YV9jbGVhcihzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcikKK3sKKwlyYW5nZV9zZXRfcmVsZWFzZSgmci0+cmFuZ2VzKTsKKwlpZiAoci0+cGFpcikKKwkJZGlmZl9mcmVlX2ZpbGVwYWlyKHItPnBhaXIpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2xpbmVfbG9nX2RhdGEoc3RydWN0IGxpbmVfbG9nX2RhdGEgKnIpCit7CisJd2hpbGUgKHIpIHsKKwkJc3RydWN0IGxpbmVfbG9nX2RhdGEgKm5leHQgPSByLT5uZXh0OworCQlsaW5lX2xvZ19kYXRhX2NsZWFyKHIpOworCQlmcmVlKHIpOworCQlyID0gbmV4dDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqCitzZWFyY2hfbGluZV9sb2dfZGF0YShzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqbGlzdCwgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgICBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqKmluc2VydGlvbl9wb2ludCkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcCA9IGxpc3Q7CisJaWYgKGluc2VydGlvbl9wb2ludCkKKwkJKmluc2VydGlvbl9wb2ludCA9IE5VTEw7CisJd2hpbGUgKHApIHsKKwkJaW50IGNtcCA9IHN0cmNtcChwLT5wYXRoLCBwYXRoKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gcDsKKwkJaWYgKGluc2VydGlvbl9wb2ludCAmJiBjbXAgPCAwKQorCQkJKmluc2VydGlvbl9wb2ludCA9IHA7CisJCXAgPSBwLT5uZXh0OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIE5vdGU6IHRha2VzIG93bmVyc2hpcCBvZiAncGF0aCcsIHdoaWNoIGhhcHBlbnMgdG8gYmUgd2hhdCB0aGUgb25seQorICogY2FsbGVyIG5lZWRzLgorICovCitzdGF0aWMgdm9pZCBsaW5lX2xvZ19kYXRhX2luc2VydChzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqKmxpc3QsCisJCQkJIGNoYXIgKnBhdGgsCisJCQkJIGxvbmcgYmVnaW4sIGxvbmcgZW5kKQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICppcDsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcCA9IHNlYXJjaF9saW5lX2xvZ19kYXRhKCpsaXN0LCBwYXRoLCAmaXApOworCisJaWYgKHApIHsKKwkJcmFuZ2Vfc2V0X2FwcGVuZF91bnNhZmUoJnAtPnJhbmdlcywgYmVnaW4sIGVuZCk7CisJCWZyZWUocGF0aCk7CisJCXJldHVybjsKKwl9CisKKwlwID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxpbmVfbG9nX2RhdGEpKTsKKwlwLT5wYXRoID0gcGF0aDsKKwlyYW5nZV9zZXRfYXBwZW5kKCZwLT5yYW5nZXMsIGJlZ2luLCBlbmQpOworCWlmIChpcCkgeworCQlwLT5uZXh0ID0gaXAtPm5leHQ7CisJCWlwLT5uZXh0ID0gcDsKKwl9IGVsc2UgeworCQlwLT5uZXh0ID0gKmxpc3Q7CisJCSpsaXN0ID0gcDsKKwl9Cit9CisKK3N0cnVjdCBjb2xsZWN0X2RpZmZfY2JkYXRhIHsKKwlzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmY7Cit9OworCitzdGF0aWMgaW50IGNvbGxlY3RfZGlmZl9jYihsb25nIHN0YXJ0X2EsIGxvbmcgY291bnRfYSwKKwkJCSAgIGxvbmcgc3RhcnRfYiwgbG9uZyBjb3VudF9iLAorCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY29sbGVjdF9kaWZmX2NiZGF0YSAqZCA9IGRhdGE7CisKKwlpZiAoY291bnRfYSA+PSAwKQorCQlyYW5nZV9zZXRfYXBwZW5kKCZkLT5kaWZmLT5wYXJlbnQsIHN0YXJ0X2EsIHN0YXJ0X2EgKyBjb3VudF9hKTsKKwlpZiAoY291bnRfYiA+PSAwKQorCQlyYW5nZV9zZXRfYXBwZW5kKCZkLT5kaWZmLT50YXJnZXQsIHN0YXJ0X2IsIHN0YXJ0X2IgKyBjb3VudF9iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbGxlY3RfZGlmZihtbWZpbGVfdCAqcGFyZW50LCBtbWZpbGVfdCAqdGFyZ2V0LCBzdHJ1Y3QgZGlmZl9yYW5nZXMgKm91dCkKK3sKKwlzdHJ1Y3QgY29sbGVjdF9kaWZmX2NiZGF0YSBjYmRhdGEgPSB7TlVMTH07CisJeHBwYXJhbV90IHhwcDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisJeGRlbWl0Y2JfdCBlY2I7CisKKwltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCW1lbXNldCgmeGVjZmcsIDAsIHNpemVvZih4ZWNmZykpOworCXhlY2ZnLmN0eGxlbiA9IHhlY2ZnLmludGVyaHVua2N0eGxlbiA9IDA7CisKKwljYmRhdGEuZGlmZiA9IG91dDsKKwl4ZWNmZy5odW5rX2Z1bmMgPSBjb2xsZWN0X2RpZmZfY2I7CisJbWVtc2V0KCZlY2IsIDAsIHNpemVvZihlY2IpKTsKKwllY2IucHJpdiA9ICZjYmRhdGE7CisJcmV0dXJuIHhkaV9kaWZmKHBhcmVudCwgdGFyZ2V0LCAmeHBwLCAmeGVjZmcsICZlY2IpOworfQorCisvKgorICogVGhlc2UgYXJlIGhhbmR5IGZvciBkZWJ1Z2dpbmcuICBSZW1vdmluZyB0aGVtIHdpdGggI2lmIDAgc2lsZW5jZXMKKyAqIHRoZSAidW51c2VkIGZ1bmN0aW9uIiB3YXJuaW5nLgorICovCisjaWYgMAorc3RhdGljIHZvaWQgZHVtcF9yYW5nZV9zZXQoc3RydWN0IHJhbmdlX3NldCAqcnMsIGNvbnN0IGNoYXIgKmRlc2MpCit7CisJaW50IGk7CisJcHJpbnRmKCJyYW5nZSBzZXQgJXMgKCVkIGl0ZW1zKTpcbiIsIGRlc2MsIHJzLT5ucik7CisJZm9yIChpID0gMDsgaSA8IHJzLT5ucjsgaSsrKQorCQlwcmludGYoIlx0WyVsZCwlbGRdXG4iLCBycy0+cmFuZ2VzW2ldLnN0YXJ0LCBycy0+cmFuZ2VzW2ldLmVuZCk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfbGluZV9sb2dfZGF0YShzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcikKK3sKKwljaGFyIGJ1Zls0MDk2XTsKKwl3aGlsZSAocikgeworCQlzbnByaW50ZihidWYsIDQwOTYsICJmaWxlICVzXG4iLCByLT5wYXRoKTsKKwkJZHVtcF9yYW5nZV9zZXQoJnItPnJhbmdlcywgYnVmKTsKKwkJciA9IHItPm5leHQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBkdW1wX2RpZmZfcmFuZ2VzKHN0cnVjdCBkaWZmX3JhbmdlcyAqZGlmZiwgY29uc3QgY2hhciAqZGVzYykKK3sKKwlpbnQgaTsKKwlhc3NlcnQoZGlmZi0+cGFyZW50Lm5yID09IGRpZmYtPnRhcmdldC5ucik7CisJcHJpbnRmKCJkaWZmIHJhbmdlcyAlcyAoJWQgaXRlbXMpOlxuIiwgZGVzYywgZGlmZi0+cGFyZW50Lm5yKTsKKwlwcmludGYoIlx0cGFyZW50XHR0YXJnZXRcbiIpOworCWZvciAoaSA9IDA7IGkgPCBkaWZmLT5wYXJlbnQubnI7IGkrKykgeworCQlwcmludGYoIlx0WyVsZCwlbGRdXHRbJWxkLCVsZF1cbiIsCisJCSAgICAgICBkaWZmLT5wYXJlbnQucmFuZ2VzW2ldLnN0YXJ0LAorCQkgICAgICAgZGlmZi0+cGFyZW50LnJhbmdlc1tpXS5lbmQsCisJCSAgICAgICBkaWZmLT50YXJnZXQucmFuZ2VzW2ldLnN0YXJ0LAorCQkgICAgICAgZGlmZi0+dGFyZ2V0LnJhbmdlc1tpXS5lbmQpOworCX0KK30KKyNlbmRpZgorCisKK3N0YXRpYyBpbnQgcmFuZ2VzX292ZXJsYXAoc3RydWN0IHJhbmdlICphLCBzdHJ1Y3QgcmFuZ2UgKmIpCit7CisJcmV0dXJuICEoYS0+ZW5kIDw9IGItPnN0YXJ0IHx8IGItPmVuZCA8PSBhLT5zdGFydCk7Cit9CisKKy8qCisgKiBHaXZlbiBhIGRpZmYgYW5kIHRoZSBzZXQgb2YgaW50ZXJlc3RpbmcgcmFuZ2VzLCBkZXRlcm1pbmUgYWxsIGh1bmtzCisgKiBvZiB0aGUgZGlmZiB3aGljaCB0b3VjaCAob3ZlcmxhcCkgYXQgbGVhc3Qgb25lIG9mIHRoZSBpbnRlcmVzdGluZworICogcmFuZ2VzIGluIHRoZSB0YXJnZXQuCisgKi8KK3N0YXRpYyB2b2lkIGRpZmZfcmFuZ2VzX2ZpbHRlcl90b3VjaGVkKHN0cnVjdCBkaWZmX3JhbmdlcyAqb3V0LAorCQkJCSAgICAgICBzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmYsCisJCQkJICAgICAgIHN0cnVjdCByYW5nZV9zZXQgKnJzKQoreworCWludCBpLCBqID0gMDsKKworCWFzc2VydChvdXQtPnRhcmdldC5uciA9PSAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBkaWZmLT50YXJnZXQubnI7IGkrKykgeworCQl3aGlsZSAoZGlmZi0+dGFyZ2V0LnJhbmdlc1tpXS5zdGFydCA+IHJzLT5yYW5nZXNbal0uZW5kKSB7CisJCQlqKys7CisJCQlpZiAoaiA9PSBycy0+bnIpCisJCQkJcmV0dXJuOworCQl9CisJCWlmIChyYW5nZXNfb3ZlcmxhcCgmZGlmZi0+dGFyZ2V0LnJhbmdlc1tpXSwgJnJzLT5yYW5nZXNbal0pKSB7CisJCQlyYW5nZV9zZXRfYXBwZW5kKCZvdXQtPnBhcmVudCwKKwkJCQkJIGRpZmYtPnBhcmVudC5yYW5nZXNbaV0uc3RhcnQsCisJCQkJCSBkaWZmLT5wYXJlbnQucmFuZ2VzW2ldLmVuZCk7CisJCQlyYW5nZV9zZXRfYXBwZW5kKCZvdXQtPnRhcmdldCwKKwkJCQkJIGRpZmYtPnRhcmdldC5yYW5nZXNbaV0uc3RhcnQsCisJCQkJCSBkaWZmLT50YXJnZXQucmFuZ2VzW2ldLmVuZCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBBZGp1c3QgdGhlIGxpbmUgY291bnRzIGluICdycycgdG8gYWNjb3VudCBmb3IgdGhlIGxpbmVzCisgKiBhZGRlZC9yZW1vdmVkIGluIHRoZSBkaWZmLgorICovCitzdGF0aWMgdm9pZCByYW5nZV9zZXRfc2hpZnRfZGlmZihzdHJ1Y3QgcmFuZ2Vfc2V0ICpvdXQsCisJCQkJIHN0cnVjdCByYW5nZV9zZXQgKnJzLAorCQkJCSBzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmYpCit7CisJaW50IGksIGogPSAwOworCWxvbmcgb2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgcmFuZ2UgKnNyYyA9IHJzLT5yYW5nZXM7CisJc3RydWN0IHJhbmdlICp0YXJnZXQgPSBkaWZmLT50YXJnZXQucmFuZ2VzOworCXN0cnVjdCByYW5nZSAqcGFyZW50ID0gZGlmZi0+cGFyZW50LnJhbmdlczsKKworCWZvciAoaSA9IDA7IGkgPCBycy0+bnI7IGkrKykgeworCQl3aGlsZSAoaiA8IGRpZmYtPnRhcmdldC5uciAmJiBzcmNbaV0uc3RhcnQgPj0gdGFyZ2V0W2pdLnN0YXJ0KSB7CisJCQlvZmZzZXQgKz0gKHBhcmVudFtqXS5lbmQtcGFyZW50W2pdLnN0YXJ0KQorCQkJCS0gKHRhcmdldFtqXS5lbmQtdGFyZ2V0W2pdLnN0YXJ0KTsKKwkJCWorKzsKKwkJfQorCQlyYW5nZV9zZXRfYXBwZW5kKG91dCwgc3JjW2ldLnN0YXJ0K29mZnNldCwgc3JjW2ldLmVuZCtvZmZzZXQpOworCX0KK30KKworLyoKKyAqIEdpdmVuIGEgZGlmZiBhbmQgdGhlIHNldCBvZiBpbnRlcmVzdGluZyByYW5nZXMsIG1hcCB0aGUgcmFuZ2VzCisgKiBhY3Jvc3MgdGhlIGRpZmYuICBUaGF0IGlzOiBvYnNlcnZlIHRoYXQgdGhlIHRhcmdldCBjb21taXQgdGFrZXMKKyAqIGJsYW1lIGZvciBhbGwgdGhlICsgKHRhcmdldC1zaWRlKSByYW5nZXMuICBTbyBmb3IgZXZlcnkgcGFpciBvZgorICogcmFuZ2VzIGluIHRoZSBkaWZmIHRoYXQgd2FzIHRvdWNoZWQsIHdlIHJlbW92ZSB0aGUgbGF0dGVyIGFuZCBhZGQKKyAqIGl0cyBwYXJlbnQgc2lkZS4KKyAqLworc3RhdGljIHZvaWQgcmFuZ2Vfc2V0X21hcF9hY3Jvc3NfZGlmZihzdHJ1Y3QgcmFuZ2Vfc2V0ICpvdXQsCisJCQkJICAgICAgc3RydWN0IHJhbmdlX3NldCAqcnMsCisJCQkJICAgICAgc3RydWN0IGRpZmZfcmFuZ2VzICpkaWZmLAorCQkJCSAgICAgIHN0cnVjdCBkaWZmX3JhbmdlcyAqKnRvdWNoZWRfb3V0KQoreworCXN0cnVjdCBkaWZmX3JhbmdlcyAqdG91Y2hlZCA9IHhtYWxsb2Moc2l6ZW9mKCp0b3VjaGVkKSk7CisJc3RydWN0IHJhbmdlX3NldCB0bXAxID0gUkFOR0VfU0VUX0lOSVQ7CisJc3RydWN0IHJhbmdlX3NldCB0bXAyID0gUkFOR0VfU0VUX0lOSVQ7CisKKwlkaWZmX3Jhbmdlc19pbml0KHRvdWNoZWQpOworCWRpZmZfcmFuZ2VzX2ZpbHRlcl90b3VjaGVkKHRvdWNoZWQsIGRpZmYsIHJzKTsKKwlyYW5nZV9zZXRfZGlmZmVyZW5jZSgmdG1wMSwgcnMsICZ0b3VjaGVkLT50YXJnZXQpOworCXJhbmdlX3NldF9zaGlmdF9kaWZmKCZ0bXAyLCAmdG1wMSwgZGlmZik7CisJcmFuZ2Vfc2V0X3VuaW9uKG91dCwgJnRtcDIsICZ0b3VjaGVkLT5wYXJlbnQpOworCXJhbmdlX3NldF9yZWxlYXNlKCZ0bXAxKTsKKwlyYW5nZV9zZXRfcmVsZWFzZSgmdG1wMik7CisKKwkqdG91Y2hlZF9vdXQgPSB0b3VjaGVkOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqY2hlY2tfc2luZ2xlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IG9iamVjdCAqY29tbWl0ID0gTlVMTDsKKwlpbnQgZm91bmQgPSAtMTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCByZXZzLT5wZW5kaW5nLm5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gcmV2cy0+cGVuZGluZy5vYmplY3RzW2ldLml0ZW07CisJCWlmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJCWNvbnRpbnVlOworCQl3aGlsZSAob2JqLT50eXBlID09IE9CSl9UQUcpCisJCQlvYmogPSBkZXJlZl90YWcob2JqLCBOVUxMLCAwKTsKKwkJaWYgKG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQkJZGllKCJOb24gY29tbWl0ICVzPyIsIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lKTsKKwkJaWYgKGNvbW1pdCkKKwkJCWRpZSgiTW9yZSB0aGFuIG9uZSBjb21taXQgdG8gZGlnIGZyb206ICVzIGFuZCAlcz8iLAorCQkJICAgIHJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lLAorCQkJICAgIHJldnMtPnBlbmRpbmcub2JqZWN0c1tmb3VuZF0ubmFtZSk7CisJCWNvbW1pdCA9IG9iajsKKwkJZm91bmQgPSBpOworCX0KKworCWlmICghY29tbWl0KQorCQlkaWUoIk5vIGNvbW1pdCBzcGVjaWZpZWQ/Iik7CisKKwlyZXR1cm4gKHN0cnVjdCBjb21taXQgKikgY29tbWl0OworfQorCitzdGF0aWMgdm9pZCBmaWxsX2Jsb2Jfc2hhMShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjKQoreworCXVuc2lnbmVkIG1vZGU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWlmIChnZXRfdHJlZV9lbnRyeShjb21taXQtPm9iamVjdC5zaGExLCBzcGVjLT5wYXRoLAorCQkJICAgc2hhMSwgJm1vZGUpKQorCQlkaWUoIlRoZXJlIGlzIG5vIHBhdGggJXMgaW4gdGhlIGNvbW1pdCIsIHNwZWMtPnBhdGgpOworCWZpbGxfZmlsZXNwZWMoc3BlYywgc2hhMSwgMSwgbW9kZSk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfbGluZV9lbmRzKHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpzcGVjLCBsb25nICpsaW5lcywKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKipsaW5lX2VuZHMpCit7CisJaW50IG51bSA9IDAsIHNpemUgPSA1MDsKKwlsb25nIGN1ciA9IDA7CisJdW5zaWduZWQgbG9uZyAqZW5kcyA9IE5VTEw7CisJY2hhciAqZGF0YSA9IE5VTEw7CisKKwlpZiAoZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhzcGVjLCAwKSkKKwkJZGllKCJDYW5ub3QgcmVhZCBibG9iICVzIiwgc2hhMV90b19oZXgoc3BlYy0+c2hhMSkpOworCisJZW5kcyA9IHhtYWxsb2Moc2l6ZSAqIHNpemVvZigqZW5kcykpOworCWVuZHNbY3VyKytdID0gMDsKKwlkYXRhID0gc3BlYy0+ZGF0YTsKKwl3aGlsZSAobnVtIDwgc3BlYy0+c2l6ZSkgeworCQlpZiAoZGF0YVtudW1dID09ICdcbicgfHwgbnVtID09IHNwZWMtPnNpemUgLSAxKSB7CisJCQlBTExPQ19HUk9XKGVuZHMsIChjdXIgKyAxKSwgc2l6ZSk7CisJCQllbmRzW2N1cisrXSA9IG51bTsKKwkJfQorCQludW0rKzsKKwl9CisKKwkvKiBzaHJpbmsgdGhlIGFycmF5IHRvIGZpdCB0aGUgZWxlbWVudHMgKi8KKwlSRUFMTE9DX0FSUkFZKGVuZHMsIGN1cik7CisJKmxpbmVzID0gY3VyLTE7CisJKmxpbmVfZW5kcyA9IGVuZHM7Cit9CisKK3N0cnVjdCBudGhfbGluZV9jYiB7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNwZWM7CisJbG9uZyBsaW5lczsKKwl1bnNpZ25lZCBsb25nICpsaW5lX2VuZHM7Cit9OworCitzdGF0aWMgY29uc3QgY2hhciAqbnRoX2xpbmUodm9pZCAqZGF0YSwgbG9uZyBsaW5lKQoreworCXN0cnVjdCBudGhfbGluZV9jYiAqZCA9IGRhdGE7CisJYXNzZXJ0KGQgJiYgbGluZSA8PSBkLT5saW5lcyk7CisJYXNzZXJ0KGQtPnNwZWMgJiYgZC0+c3BlYy0+ZGF0YSk7CisKKwlpZiAobGluZSA9PSAwKQorCQlyZXR1cm4gKGNoYXIgKilkLT5zcGVjLT5kYXRhOworCWVsc2UKKwkJcmV0dXJuIChjaGFyICopZC0+c3BlYy0+ZGF0YSArIGQtPmxpbmVfZW5kc1tsaW5lXSArIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqCitwYXJzZV9saW5lcyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHN0cmluZ19saXN0ICphcmdzKQoreworCWxvbmcgbGluZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgKmVuZHMgPSBOVUxMOworCXN0cnVjdCBudGhfbGluZV9jYiBjYl9kYXRhOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZXMgPSBOVUxMOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpwOworCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCBhcmdzKSB7CisJCWNvbnN0IGNoYXIgKm5hbWVfcGFydCwgKnJhbmdlX3BhcnQ7CisJCWNoYXIgKmZ1bGxfbmFtZTsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnNwZWM7CisJCWxvbmcgYmVnaW4gPSAwLCBlbmQgPSAwOworCQlsb25nIGFuY2hvcjsKKworCQluYW1lX3BhcnQgPSBza2lwX3JhbmdlX2FyZyhpdGVtLT5zdHJpbmcpOworCQlpZiAoIW5hbWVfcGFydCB8fCAqbmFtZV9wYXJ0ICE9ICc6JyB8fCAhbmFtZV9wYXJ0WzFdKQorCQkJZGllKCItTCBhcmd1bWVudCBub3QgJ3N0YXJ0LGVuZDpmaWxlJyBvciAnOmZ1bmNuYW1lOmZpbGUnOiAlcyIsCisJCQkgICAgaXRlbS0+c3RyaW5nKTsKKwkJcmFuZ2VfcGFydCA9IHhzdHJuZHVwKGl0ZW0tPnN0cmluZywgbmFtZV9wYXJ0IC0gaXRlbS0+c3RyaW5nKTsKKwkJbmFtZV9wYXJ0Kys7CisKKwkJZnVsbF9uYW1lID0gcHJlZml4X3BhdGgocHJlZml4LCBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDAsCisJCQkJCW5hbWVfcGFydCk7CisKKwkJc3BlYyA9IGFsbG9jX2ZpbGVzcGVjKGZ1bGxfbmFtZSk7CisJCWZpbGxfYmxvYl9zaGExKGNvbW1pdCwgc3BlYyk7CisJCWZpbGxfbGluZV9lbmRzKHNwZWMsICZsaW5lcywgJmVuZHMpOworCQljYl9kYXRhLnNwZWMgPSBzcGVjOworCQljYl9kYXRhLmxpbmVzID0gbGluZXM7CisJCWNiX2RhdGEubGluZV9lbmRzID0gZW5kczsKKworCQlwID0gc2VhcmNoX2xpbmVfbG9nX2RhdGEocmFuZ2VzLCBmdWxsX25hbWUsIE5VTEwpOworCQlpZiAocCAmJiBwLT5yYW5nZXMubnIpCisJCQlhbmNob3IgPSBwLT5yYW5nZXMucmFuZ2VzW3AtPnJhbmdlcy5uciAtIDFdLmVuZCArIDE7CisJCWVsc2UKKwkJCWFuY2hvciA9IDE7CisKKwkJaWYgKHBhcnNlX3JhbmdlX2FyZyhyYW5nZV9wYXJ0LCBudGhfbGluZSwgJmNiX2RhdGEsCisJCQkJICAgIGxpbmVzLCBhbmNob3IsICZiZWdpbiwgJmVuZCwKKwkJCQkgICAgZnVsbF9uYW1lKSkKKwkJCWRpZSgibWFsZm9ybWVkIC1MIGFyZ3VtZW50ICclcyciLCByYW5nZV9wYXJ0KTsKKwkJaWYgKGxpbmVzIDwgZW5kIHx8ICgobGluZXMgfHwgYmVnaW4pICYmIGxpbmVzIDwgYmVnaW4pKQorCQkJZGllKCJmaWxlICVzIGhhcyBvbmx5ICVsdSBsaW5lcyIsIG5hbWVfcGFydCwgbGluZXMpOworCQlpZiAoYmVnaW4gPCAxKQorCQkJYmVnaW4gPSAxOworCQlpZiAoZW5kIDwgMSkKKwkJCWVuZCA9IGxpbmVzOworCQliZWdpbi0tOworCQlsaW5lX2xvZ19kYXRhX2luc2VydCgmcmFuZ2VzLCBmdWxsX25hbWUsIGJlZ2luLCBlbmQpOworCisJCWZyZWVfZmlsZXNwZWMoc3BlYyk7CisJCWZyZWUoZW5kcyk7CisJCWVuZHMgPSBOVUxMOworCX0KKworCWZvciAocCA9IHJhbmdlczsgcDsgcCA9IHAtPm5leHQpCisJCXNvcnRfYW5kX21lcmdlX3JhbmdlX3NldCgmcC0+cmFuZ2VzKTsKKworCXJldHVybiByYW5nZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqbGluZV9sb2dfZGF0YV9jb3B5X29uZShzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcikKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmV0ID0geG1hbGxvYyhzaXplb2YoKnJldCkpOworCisJYXNzZXJ0KHIpOworCWxpbmVfbG9nX2RhdGFfaW5pdChyZXQpOworCXJhbmdlX3NldF9jb3B5KCZyZXQtPnJhbmdlcywgJnItPnJhbmdlcyk7CisKKwlyZXQtPnBhdGggPSB4c3RyZHVwKHItPnBhdGgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBsaW5lX2xvZ19kYXRhICoKK2xpbmVfbG9nX2RhdGFfY29weShzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcikKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqdG1wID0gTlVMTCwgKnByZXYgPSBOVUxMOworCisJYXNzZXJ0KHIpOworCXJldCA9IHRtcCA9IHByZXYgPSBsaW5lX2xvZ19kYXRhX2NvcHlfb25lKHIpOworCXIgPSByLT5uZXh0OworCXdoaWxlIChyKSB7CisJCXRtcCA9IGxpbmVfbG9nX2RhdGFfY29weV9vbmUocik7CisJCXByZXYtPm5leHQgPSB0bXA7CisJCXByZXYgPSB0bXA7CisJCXIgPSByLT5uZXh0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIG1lcmdlIHR3byByYW5nZSBzZXRzIGFjcm9zcyBmaWxlcyAqLworc3RhdGljIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpsaW5lX2xvZ19kYXRhX21lcmdlKHN0cnVjdCBsaW5lX2xvZ19kYXRhICphLAorCQkJCQkJIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpiKQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpoZWFkID0gTlVMTCwgKipwcCA9ICZoZWFkOworCisJd2hpbGUgKGEgfHwgYikgeworCQlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqc3JjOworCQlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqc3JjMiA9IE5VTEw7CisJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpkOworCQlpbnQgY21wOworCQlpZiAoIWEpCisJCQljbXAgPSAxOworCQllbHNlIGlmICghYikKKwkJCWNtcCA9IC0xOworCQllbHNlCisJCQljbXAgPSBzdHJjbXAoYS0+cGF0aCwgYi0+cGF0aCk7CisJCWlmIChjbXAgPCAwKSB7CisJCQlzcmMgPSBhOworCQkJYSA9IGEtPm5leHQ7CisJCX0gZWxzZSBpZiAoY21wID09IDApIHsKKwkJCXNyYyA9IGE7CisJCQlhID0gYS0+bmV4dDsKKwkJCXNyYzIgPSBiOworCQkJYiA9IGItPm5leHQ7CisJCX0gZWxzZSB7CisJCQlzcmMgPSBiOworCQkJYiA9IGItPm5leHQ7CisJCX0KKwkJZCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaW5lX2xvZ19kYXRhKSk7CisJCWxpbmVfbG9nX2RhdGFfaW5pdChkKTsKKwkJZC0+cGF0aCA9IHhzdHJkdXAoc3JjLT5wYXRoKTsKKwkJKnBwID0gZDsKKwkJcHAgPSAmZC0+bmV4dDsKKwkJaWYgKHNyYzIpCisJCQlyYW5nZV9zZXRfdW5pb24oJmQtPnJhbmdlcywgJnNyYy0+cmFuZ2VzLCAmc3JjMi0+cmFuZ2VzKTsKKwkJZWxzZQorCQkJcmFuZ2Vfc2V0X2NvcHkoJmQtPnJhbmdlcywgJnNyYy0+cmFuZ2VzKTsKKwl9CisKKwlyZXR1cm4gaGVhZDsKK30KKworc3RhdGljIHZvaWQgYWRkX2xpbmVfcmFuZ2Uoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKm9sZCA9IE5VTEw7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKm5ldyA9IE5VTEw7CisKKwlvbGQgPSBsb29rdXBfZGVjb3JhdGlvbigmcmV2cy0+bGluZV9sb2dfZGF0YSwgJmNvbW1pdC0+b2JqZWN0KTsKKwlpZiAob2xkICYmIHJhbmdlKSB7CisJCW5ldyA9IGxpbmVfbG9nX2RhdGFfbWVyZ2Uob2xkLCByYW5nZSk7CisJCWZyZWVfbGluZV9sb2dfZGF0YShvbGQpOworCX0gZWxzZSBpZiAocmFuZ2UpCisJCW5ldyA9IGxpbmVfbG9nX2RhdGFfY29weShyYW5nZSk7CisKKwlpZiAobmV3KQorCQlhZGRfZGVjb3JhdGlvbigmcmV2cy0+bGluZV9sb2dfZGF0YSwgJmNvbW1pdC0+b2JqZWN0LCBuZXcpOworfQorCitzdGF0aWMgdm9pZCBjbGVhcl9jb21taXRfbGluZV9yYW5nZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcjsKKwlyID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPmxpbmVfbG9nX2RhdGEsICZjb21taXQtPm9iamVjdCk7CisJaWYgKCFyKQorCQlyZXR1cm47CisJZnJlZV9saW5lX2xvZ19kYXRhKHIpOworCWFkZF9kZWNvcmF0aW9uKCZyZXZzLT5saW5lX2xvZ19kYXRhLCAmY29tbWl0LT5vYmplY3QsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IGxpbmVfbG9nX2RhdGEgKmxvb2t1cF9saW5lX3JhbmdlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJICAgICAgIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmV0ID0gTlVMTDsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqZDsKKworCXJldCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZyZXZzLT5saW5lX2xvZ19kYXRhLCAmY29tbWl0LT5vYmplY3QpOworCisJZm9yIChkID0gcmV0OyBkOyBkID0gZC0+bmV4dCkKKwkJcmFuZ2Vfc2V0X2NoZWNrX2ludmFyaWFudHMoJmQtPnJhbmdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGxpbmVfbG9nX2luaXQoc3RydWN0IHJldl9pbmZvICpyZXYsIGNvbnN0IGNoYXIgKnByZWZpeCwgc3RydWN0IHN0cmluZ19saXN0ICphcmdzKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IE5VTEw7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlOworCisJY29tbWl0ID0gY2hlY2tfc2luZ2xlX2NvbW1pdChyZXYpOworCXJhbmdlID0gcGFyc2VfbGluZXMoY29tbWl0LCBwcmVmaXgsIGFyZ3MpOworCWFkZF9saW5lX3JhbmdlKHJldiwgY29tbWl0LCByYW5nZSk7CisKKwlpZiAoIXJldi0+ZGlmZm9wdC5kZXRlY3RfcmVuYW1lKSB7CisJCWludCBpLCBjb3VudCA9IDA7CisJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyID0gcmFuZ2U7CisJCWNvbnN0IGNoYXIgKipwYXRoczsKKwkJd2hpbGUgKHIpIHsKKwkJCWNvdW50Kys7CisJCQlyID0gci0+bmV4dDsKKwkJfQorCQlwYXRocyA9IHhtYWxsb2MoKGNvdW50KzEpKnNpemVvZihjaGFyICopKTsKKwkJciA9IHJhbmdlOworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJcGF0aHNbaV0gPSB4c3RyZHVwKHItPnBhdGgpOworCQkJciA9IHItPm5leHQ7CisJCX0KKwkJcGF0aHNbY291bnRdID0gTlVMTDsKKwkJcGFyc2VfcGF0aHNwZWMoJnJldi0+ZGlmZm9wdC5wYXRoc3BlYywgMCwKKwkJCSAgICAgICBQQVRIU1BFQ19QUkVGRVJfRlVMTCwgIiIsIHBhdGhzKTsKKwkJZnJlZShwYXRocyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBtb3ZlX2RpZmZfcXVldWUoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpkc3QsCisJCQkgICAgc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpzcmMpCit7CisJYXNzZXJ0KHNyYyAhPSBkc3QpOworCW1lbWNweShkc3QsIHNyYywgc2l6ZW9mKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCkpOworCURJRkZfUVVFVUVfQ0xFQVIoc3JjKTsKK30KKworc3RhdGljIHZvaWQgZmlsdGVyX2RpZmZzX2Zvcl9wYXRocyhzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UsIGludCBrZWVwX2RlbGV0aW9ucykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3Qgb3V0cTsKKwlESUZGX1FVRVVFX0NMRUFSKCZvdXRxKTsKKworCWZvciAoaSA9IDA7IGkgPCBkaWZmX3F1ZXVlZF9kaWZmLm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldOworCQlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmcgPSBOVUxMOworCisJCWlmICghRElGRl9GSUxFX1ZBTElEKHAtPnR3bykpIHsKKwkJCWlmIChrZWVwX2RlbGV0aW9ucykKKwkJCQlkaWZmX3EoJm91dHEsIHApOworCQkJZWxzZQorCQkJCWRpZmZfZnJlZV9maWxlcGFpcihwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZvciAocmcgPSByYW5nZTsgcmc7IHJnID0gcmctPm5leHQpIHsKKwkJCWlmICghc3RyY21wKHJnLT5wYXRoLCBwLT50d28tPnBhdGgpKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChyZykKKwkJCWRpZmZfcSgmb3V0cSwgcCk7CisJCWVsc2UKKwkJCWRpZmZfZnJlZV9maWxlcGFpcihwKTsKKwl9CisJZnJlZShkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlKTsKKwlkaWZmX3F1ZXVlZF9kaWZmID0gb3V0cTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGlmZl9taWdodF9iZV9yZW5hbWUodm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKQorCQlpZiAoIURJRkZfRklMRV9WQUxJRChkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldLT5vbmUpKSB7CisJCQkvKiBmcHJpbnRmKHN0ZGVyciwgImRpZmZfbWlnaHRfYmVfcmVuYW1lIGZvdW5kIGNyZWF0aW9uIG9mOiAlc1xuIiwgKi8KKwkJCS8qIAlkaWZmX3F1ZXVlZF9kaWZmLnF1ZXVlW2ldLT50d28tPnBhdGgpOyAqLworCQkJcmV0dXJuIDE7CisJCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcXVldWVfZGlmZnMoc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlLAorCQkJc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LAorCQkJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxdWV1ZSwKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGNvbW1pdCAqcGFyZW50KQoreworCWFzc2VydChjb21taXQpOworCisJRElGRl9RVUVVRV9DTEVBUigmZGlmZl9xdWV1ZWRfZGlmZik7CisJZGlmZl90cmVlX3NoYTEocGFyZW50ID8gcGFyZW50LT50cmVlLT5vYmplY3Quc2hhMSA6IE5VTEwsCisJCQljb21taXQtPnRyZWUtPm9iamVjdC5zaGExLCAiIiwgb3B0KTsKKwlpZiAob3B0LT5kZXRlY3RfcmVuYW1lKSB7CisJCWZpbHRlcl9kaWZmc19mb3JfcGF0aHMocmFuZ2UsIDEpOworCQlpZiAoZGlmZl9taWdodF9iZV9yZW5hbWUoKSkKKwkJCWRpZmZjb3JlX3N0ZChvcHQpOworCQlmaWx0ZXJfZGlmZnNfZm9yX3BhdGhzKHJhbmdlLCAwKTsKKwl9CisJbW92ZV9kaWZmX3F1ZXVlKHF1ZXVlLCAmZGlmZl9xdWV1ZWRfZGlmZik7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfbnRoX2xpbmUobG9uZyBsaW5lLCB1bnNpZ25lZCBsb25nICplbmRzLCB2b2lkICpkYXRhKQoreworCWlmIChsaW5lID09IDApCisJCXJldHVybiAoY2hhciAqKWRhdGE7CisJZWxzZQorCQlyZXR1cm4gKGNoYXIgKilkYXRhICsgZW5kc1tsaW5lXSArIDE7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xpbmUoY29uc3QgY2hhciAqcHJlZml4LCBjaGFyIGZpcnN0LAorCQkgICAgICAgbG9uZyBsaW5lLCB1bnNpZ25lZCBsb25nICplbmRzLCB2b2lkICpkYXRhLAorCQkgICAgICAgY29uc3QgY2hhciAqY29sb3IsIGNvbnN0IGNoYXIgKnJlc2V0KQoreworCWNoYXIgKmJlZ2luID0gZ2V0X250aF9saW5lKGxpbmUsIGVuZHMsIGRhdGEpOworCWNoYXIgKmVuZCA9IGdldF9udGhfbGluZShsaW5lKzEsIGVuZHMsIGRhdGEpOworCWludCBoYWRfbmwgPSAwOworCisJaWYgKGVuZCA+IGJlZ2luICYmIGVuZFstMV0gPT0gJ1xuJykgeworCQllbmQtLTsKKwkJaGFkX25sID0gMTsKKwl9CisKKwlmcHV0cyhwcmVmaXgsIHN0ZG91dCk7CisJZnB1dHMoY29sb3IsIHN0ZG91dCk7CisJcHV0Y2hhcihmaXJzdCk7CisJZndyaXRlKGJlZ2luLCAxLCBlbmQtYmVnaW4sIHN0ZG91dCk7CisJZnB1dHMocmVzZXQsIHN0ZG91dCk7CisJcHV0Y2hhcignXG4nKTsKKwlpZiAoIWhhZF9ubCkKKwkJZnB1dHMoIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiIsIHN0ZG91dCk7Cit9CisKK3N0YXRpYyBjaGFyICpvdXRwdXRfcHJlZml4KHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwljaGFyICpwcmVmaXggPSAiIjsKKworCWlmIChvcHQtPm91dHB1dF9wcmVmaXgpIHsKKwkJc3RydWN0IHN0cmJ1ZiAqc2IgPSBvcHQtPm91dHB1dF9wcmVmaXgob3B0LCBvcHQtPm91dHB1dF9wcmVmaXhfZGF0YSk7CisJCXByZWZpeCA9IHNiLT5idWY7CisJfQorCisJcmV0dXJuIHByZWZpeDsKK30KKworc3RhdGljIHZvaWQgZHVtcF9kaWZmX2hhY2t5X29uZShzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlKQoreworCWludCBpLCBqID0gMDsKKwlsb25nIHBfbGluZXMsIHRfbGluZXM7CisJdW5zaWduZWQgbG9uZyAqcF9lbmRzID0gTlVMTCwgKnRfZW5kcyA9IE5VTEw7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIgPSByYW5nZS0+cGFpcjsKKwlzdHJ1Y3QgZGlmZl9yYW5nZXMgKmRpZmYgPSAmcmFuZ2UtPmRpZmY7CisKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQgPSAmcmV2LT5kaWZmb3B0OworCWNoYXIgKnByZWZpeCA9IG91dHB1dF9wcmVmaXgob3B0KTsKKwljb25zdCBjaGFyICpjX3Jlc2V0ID0gZGlmZl9nZXRfY29sb3Iob3B0LT51c2VfY29sb3IsIERJRkZfUkVTRVQpOworCWNvbnN0IGNoYXIgKmNfZnJhZyA9IGRpZmZfZ2V0X2NvbG9yKG9wdC0+dXNlX2NvbG9yLCBESUZGX0ZSQUdJTkZPKTsKKwljb25zdCBjaGFyICpjX21ldGEgPSBkaWZmX2dldF9jb2xvcihvcHQtPnVzZV9jb2xvciwgRElGRl9NRVRBSU5GTyk7CisJY29uc3QgY2hhciAqY19vbGQgPSBkaWZmX2dldF9jb2xvcihvcHQtPnVzZV9jb2xvciwgRElGRl9GSUxFX09MRCk7CisJY29uc3QgY2hhciAqY19uZXcgPSBkaWZmX2dldF9jb2xvcihvcHQtPnVzZV9jb2xvciwgRElGRl9GSUxFX05FVyk7CisJY29uc3QgY2hhciAqY19jb250ZXh0ID0gZGlmZl9nZXRfY29sb3Iob3B0LT51c2VfY29sb3IsIERJRkZfQ09OVEVYVCk7CisKKwlpZiAoIXBhaXIgfHwgIWRpZmYpCisJCXJldHVybjsKKworCWlmIChwYWlyLT5vbmUtPnNoYTFfdmFsaWQpCisJCWZpbGxfbGluZV9lbmRzKHBhaXItPm9uZSwgJnBfbGluZXMsICZwX2VuZHMpOworCWZpbGxfbGluZV9lbmRzKHBhaXItPnR3bywgJnRfbGluZXMsICZ0X2VuZHMpOworCisJcHJpbnRmKCIlcyVzZGlmZiAtLWdpdCBhLyVzIGIvJXMlc1xuIiwgcHJlZml4LCBjX21ldGEsIHBhaXItPm9uZS0+cGF0aCwgcGFpci0+dHdvLT5wYXRoLCBjX3Jlc2V0KTsKKwlwcmludGYoIiVzJXMtLS0gJXMlcyVzXG4iLCBwcmVmaXgsIGNfbWV0YSwKKwkgICAgICAgcGFpci0+b25lLT5zaGExX3ZhbGlkID8gImEvIiA6ICIiLAorCSAgICAgICBwYWlyLT5vbmUtPnNoYTFfdmFsaWQgPyBwYWlyLT5vbmUtPnBhdGggOiAiL2Rldi9udWxsIiwKKwkgICAgICAgY19yZXNldCk7CisJcHJpbnRmKCIlcyVzKysrIGIvJXMlc1xuIiwgcHJlZml4LCBjX21ldGEsIHBhaXItPnR3by0+cGF0aCwgY19yZXNldCk7CisJZm9yIChpID0gMDsgaSA8IHJhbmdlLT5yYW5nZXMubnI7IGkrKykgeworCQlsb25nIHBfc3RhcnQsIHBfZW5kOworCQlsb25nIHRfc3RhcnQgPSByYW5nZS0+cmFuZ2VzLnJhbmdlc1tpXS5zdGFydDsKKwkJbG9uZyB0X2VuZCA9IHJhbmdlLT5yYW5nZXMucmFuZ2VzW2ldLmVuZDsKKwkJbG9uZyB0X2N1ciA9IHRfc3RhcnQ7CisJCWludCBqX2xhc3Q7CisKKwkJd2hpbGUgKGogPCBkaWZmLT50YXJnZXQubnIgJiYgZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5lbmQgPCB0X3N0YXJ0KQorCQkJaisrOworCQlpZiAoaiA9PSBkaWZmLT50YXJnZXQubnIgfHwgZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5zdGFydCA+IHRfZW5kKQorCQkJY29udGludWU7CisKKwkJLyogU2NhbiBhaGVhZCB0byBkZXRlcm1pbmUgdGhlIGxhc3QgZGlmZiB0aGF0IGZhbGxzIGluIHRoaXMgcmFuZ2UgKi8KKwkJal9sYXN0ID0gajsKKwkJd2hpbGUgKGpfbGFzdCA8IGRpZmYtPnRhcmdldC5uciAmJiBkaWZmLT50YXJnZXQucmFuZ2VzW2pfbGFzdF0uc3RhcnQgPCB0X2VuZCkKKwkJCWpfbGFzdCsrOworCQlpZiAoal9sYXN0ID4gaikKKwkJCWpfbGFzdC0tOworCisJCS8qCisJCSAqIENvbXB1dGUgcGFyZW50IGh1bmsgaGVhZGVyczogd2Uga25vdyB0aGF0IHRoZSBkaWZmCisJCSAqIGhhcyB0aGUgY29ycmVjdCBsaW5lIG51bWJlcnMgKGJ1dCBub3QgYWxsIGh1bmtzKS4KKwkJICogU28gaXQgc3VmZmljZXMgdG8gc2hpZnQgdGhlIHN0YXJ0L2VuZCBhY2NvcmRpbmcgdG8KKwkJICogdGhlIGxpbmUgbnVtYmVycyBvZiB0aGUgZmlyc3QvbGFzdCBodW5rKHMpIHRoYXQKKwkJICogZmFsbCBpbiB0aGlzIHJhbmdlLgorCQkgKi8KKwkJaWYgKHRfc3RhcnQgPCBkaWZmLT50YXJnZXQucmFuZ2VzW2pdLnN0YXJ0KQorCQkJcF9zdGFydCA9IGRpZmYtPnBhcmVudC5yYW5nZXNbal0uc3RhcnQgLSAoZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5zdGFydC10X3N0YXJ0KTsKKwkJZWxzZQorCQkJcF9zdGFydCA9IGRpZmYtPnBhcmVudC5yYW5nZXNbal0uc3RhcnQ7CisJCWlmICh0X2VuZCA+IGRpZmYtPnRhcmdldC5yYW5nZXNbal9sYXN0XS5lbmQpCisJCQlwX2VuZCA9IGRpZmYtPnBhcmVudC5yYW5nZXNbal9sYXN0XS5lbmQgKyAodF9lbmQtZGlmZi0+dGFyZ2V0LnJhbmdlc1tqX2xhc3RdLmVuZCk7CisJCWVsc2UKKwkJCXBfZW5kID0gZGlmZi0+cGFyZW50LnJhbmdlc1tqX2xhc3RdLmVuZDsKKworCQlpZiAoIXBfc3RhcnQgJiYgIXBfZW5kKSB7CisJCQlwX3N0YXJ0ID0gLTE7CisJCQlwX2VuZCA9IC0xOworCQl9CisKKwkJLyogTm93IG91dHB1dCBhIGRpZmYgaHVuayBmb3IgdGhpcyByYW5nZSAqLworCQlwcmludGYoIiVzJXNAQCAtJWxkLCVsZCArJWxkLCVsZCBAQCVzXG4iLAorCQkgICAgICAgcHJlZml4LCBjX2ZyYWcsCisJCSAgICAgICBwX3N0YXJ0KzEsIHBfZW5kLXBfc3RhcnQsIHRfc3RhcnQrMSwgdF9lbmQtdF9zdGFydCwKKwkJICAgICAgIGNfcmVzZXQpOworCQl3aGlsZSAoaiA8IGRpZmYtPnRhcmdldC5uciAmJiBkaWZmLT50YXJnZXQucmFuZ2VzW2pdLnN0YXJ0IDwgdF9lbmQpIHsKKwkJCWludCBrOworCQkJZm9yICg7IHRfY3VyIDwgZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5zdGFydDsgdF9jdXIrKykKKwkJCQlwcmludF9saW5lKHByZWZpeCwgJyAnLCB0X2N1ciwgdF9lbmRzLCBwYWlyLT50d28tPmRhdGEsCisJCQkJCSAgIGNfY29udGV4dCwgY19yZXNldCk7CisJCQlmb3IgKGsgPSBkaWZmLT5wYXJlbnQucmFuZ2VzW2pdLnN0YXJ0OyBrIDwgZGlmZi0+cGFyZW50LnJhbmdlc1tqXS5lbmQ7IGsrKykKKwkJCQlwcmludF9saW5lKHByZWZpeCwgJy0nLCBrLCBwX2VuZHMsIHBhaXItPm9uZS0+ZGF0YSwKKwkJCQkJICAgY19vbGQsIGNfcmVzZXQpOworCQkJZm9yICg7IHRfY3VyIDwgZGlmZi0+dGFyZ2V0LnJhbmdlc1tqXS5lbmQgJiYgdF9jdXIgPCB0X2VuZDsgdF9jdXIrKykKKwkJCQlwcmludF9saW5lKHByZWZpeCwgJysnLCB0X2N1ciwgdF9lbmRzLCBwYWlyLT50d28tPmRhdGEsCisJCQkJCSAgIGNfbmV3LCBjX3Jlc2V0KTsKKwkJCWorKzsKKwkJfQorCQlmb3IgKDsgdF9jdXIgPCB0X2VuZDsgdF9jdXIrKykKKwkJCXByaW50X2xpbmUocHJlZml4LCAnICcsIHRfY3VyLCB0X2VuZHMsIHBhaXItPnR3by0+ZGF0YSwKKwkJCQkgICBjX2NvbnRleHQsIGNfcmVzZXQpOworCX0KKworCWZyZWUocF9lbmRzKTsKKwlmcmVlKHRfZW5kcyk7Cit9CisKKy8qCisgKiBORUVEU1dPUks6IG1hbnVhbGx5IGJ1aWxkaW5nIGEgZGlmZiBoZXJlIGlzIG5vdCB0aGUgUmlnaHQKKyAqIFRoaW5nKHRtKS4gIGxvZyAtTCBzaG91bGQgYmUgYnVpbHQgaW50byB0aGUgZGlmZiBwaXBlbGluZS4KKyAqLworc3RhdGljIHZvaWQgZHVtcF9kaWZmX2hhY2t5KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UpCit7CisJcHV0cyhvdXRwdXRfcHJlZml4KCZyZXYtPmRpZmZvcHQpKTsKKwl3aGlsZSAocmFuZ2UpIHsKKwkJZHVtcF9kaWZmX2hhY2t5X29uZShyZXYsIHJhbmdlKTsKKwkJcmFuZ2UgPSByYW5nZS0+bmV4dDsKKwl9Cit9CisKKy8qCisgKiBVbmxpa2UgbW9zdCBvdGhlciBmdW5jdGlvbnMsIHRoaXMgZGVzdHJ1Y3RpdmVseSBvcGVyYXRlcyBvbgorICogJ3JhbmdlJy4KKyAqLworc3RhdGljIGludCBwcm9jZXNzX2RpZmZfZmlsZXBhaXIoc3RydWN0IHJldl9pbmZvICpyZXYsCisJCQkJIHN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyLAorCQkJCSBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UsCisJCQkJIHN0cnVjdCBkaWZmX3JhbmdlcyAqKmRpZmZfb3V0KQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyZyA9IHJhbmdlOworCXN0cnVjdCByYW5nZV9zZXQgdG1wOworCXN0cnVjdCBkaWZmX3JhbmdlcyBkaWZmOworCW1tZmlsZV90IGZpbGVfcGFyZW50LCBmaWxlX3RhcmdldDsKKworCWFzc2VydChwYWlyLT50d28tPnBhdGgpOworCXdoaWxlIChyZykgeworCQlhc3NlcnQocmctPnBhdGgpOworCQlpZiAoIXN0cmNtcChyZy0+cGF0aCwgcGFpci0+dHdvLT5wYXRoKSkKKwkJCWJyZWFrOworCQlyZyA9IHJnLT5uZXh0OworCX0KKworCWlmICghcmcpCisJCXJldHVybiAwOworCWlmIChyZy0+cmFuZ2VzLm5yID09IDApCisJCXJldHVybiAwOworCisJYXNzZXJ0KHBhaXItPnR3by0+c2hhMV92YWxpZCk7CisJZGlmZl9wb3B1bGF0ZV9maWxlc3BlYyhwYWlyLT50d28sIDApOworCWZpbGVfdGFyZ2V0LnB0ciA9IHBhaXItPnR3by0+ZGF0YTsKKwlmaWxlX3RhcmdldC5zaXplID0gcGFpci0+dHdvLT5zaXplOworCisJaWYgKHBhaXItPm9uZS0+c2hhMV92YWxpZCkgeworCQlkaWZmX3BvcHVsYXRlX2ZpbGVzcGVjKHBhaXItPm9uZSwgMCk7CisJCWZpbGVfcGFyZW50LnB0ciA9IHBhaXItPm9uZS0+ZGF0YTsKKwkJZmlsZV9wYXJlbnQuc2l6ZSA9IHBhaXItPm9uZS0+c2l6ZTsKKwl9IGVsc2UgeworCQlmaWxlX3BhcmVudC5wdHIgPSAiIjsKKwkJZmlsZV9wYXJlbnQuc2l6ZSA9IDA7CisJfQorCisJZGlmZl9yYW5nZXNfaW5pdCgmZGlmZik7CisJaWYgKGNvbGxlY3RfZGlmZigmZmlsZV9wYXJlbnQsICZmaWxlX3RhcmdldCwgJmRpZmYpKQorCQlkaWUoInVuYWJsZSB0byBnZW5lcmF0ZSBkaWZmIGZvciAlcyIsIHBhaXItPm9uZS0+cGF0aCk7CisKKwkvKiBORUVEU1dPUksgc2hvdWxkIGFwcGx5IHNvbWUgaGV1cmlzdGljcyB0byBwcmV2ZW50IG1pc21hdGNoZXMgKi8KKwlmcmVlKHJnLT5wYXRoKTsKKwlyZy0+cGF0aCA9IHhzdHJkdXAocGFpci0+b25lLT5wYXRoKTsKKworCXJhbmdlX3NldF9pbml0KCZ0bXAsIDApOworCXJhbmdlX3NldF9tYXBfYWNyb3NzX2RpZmYoJnRtcCwgJnJnLT5yYW5nZXMsICZkaWZmLCBkaWZmX291dCk7CisJcmFuZ2Vfc2V0X3JlbGVhc2UoJnJnLT5yYW5nZXMpOworCXJhbmdlX3NldF9tb3ZlKCZyZy0+cmFuZ2VzLCAmdG1wKTsKKworCWRpZmZfcmFuZ2VzX3JlbGVhc2UoJmRpZmYpOworCisJcmV0dXJuICgoKmRpZmZfb3V0KS0+cGFyZW50Lm5yID4gMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqZGlmZl9maWxlcGFpcl9kdXAoc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIpCit7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKm5ldyA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaWZmX2ZpbGVwYWlyKSk7CisJbmV3LT5vbmUgPSBwYWlyLT5vbmU7CisJbmV3LT50d28gPSBwYWlyLT50d287CisJbmV3LT5vbmUtPmNvdW50Kys7CisJbmV3LT50d28tPmNvdW50Kys7CisJcmV0dXJuIG5ldzsKK30KKworc3RhdGljIHZvaWQgZnJlZV9kaWZmcXVldWVzKGludCBuLCBzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKmRxKQoreworCWludCBpLCBqOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWZvciAoaiA9IDA7IGogPCBkcVtpXS5ucjsgaisrKQorCQkJZGlmZl9mcmVlX2ZpbGVwYWlyKGRxW2ldLnF1ZXVlW2pdKTsKKwlmcmVlKGRxKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2FsbF9maWxlcyhzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqKnJhbmdlX291dCwKKwkJCSAgICAgc3RydWN0IHJldl9pbmZvICpyZXYsCisJCQkgICAgIHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcXVldWUsCisJCQkgICAgIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSkKK3sKKwlpbnQgaSwgY2hhbmdlZCA9IDA7CisKKwkqcmFuZ2Vfb3V0ID0gbGluZV9sb2dfZGF0YV9jb3B5KHJhbmdlKTsKKworCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9yYW5nZXMgKnBhaXJkaWZmID0gTlVMTDsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIgPSBxdWV1ZS0+cXVldWVbaV07CisJCWlmIChwcm9jZXNzX2RpZmZfZmlsZXBhaXIocmV2LCBwYWlyLCAqcmFuZ2Vfb3V0LCAmcGFpcmRpZmYpKSB7CisJCQkvKgorCQkJICogU3RvcmUgYXdheSB0aGUgZGlmZiBmb3IgbGF0ZXIgb3V0cHV0LiAgV2UKKwkJCSAqIHR1Y2sgaXQgaW4gdGhlIHJhbmdlcyB3ZSBnb3QgYXMgX2lucHV0XywKKwkJCSAqIHNpbmNlIHRoYXQncyB0aGUgY29tbWl0IHRoYXQgY2F1c2VkIHRoZQorCQkJICogZGlmZi4KKwkJCSAqCisJCQkgKiBORUVEU1dPUksgbm90IGVub3VnaCB3aGVuIHdlIGdldCBhcm91bmQgdG8KKwkJCSAqIGRvaW5nIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3aXRoIG1lcmdlczsKKwkJCSAqIGN1cnJlbnRseSBlYWNoIGludm9jYXRpb24gb24gYSBtZXJnZSBwYXJlbnQKKwkJCSAqIHRyYXNoZXMgdGhlIHByZXZpb3VzIG9uZSdzIGRpZmYuCisJCQkgKgorCQkJICogTkVFRFNXT1JLIHRyYW1wbGVzIG92ZXIgZGF0YSBzdHJ1Y3R1cmVzIG5vdCBvd25lZCBoZXJlCisJCQkgKi8KKwkJCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyZyA9IHJhbmdlOworCQkJY2hhbmdlZCsrOworCQkJd2hpbGUgKHJnICYmIHN0cmNtcChyZy0+cGF0aCwgcGFpci0+dHdvLT5wYXRoKSkKKwkJCQlyZyA9IHJnLT5uZXh0OworCQkJYXNzZXJ0KHJnKTsKKwkJCXJnLT5wYWlyID0gZGlmZl9maWxlcGFpcl9kdXAocXVldWUtPnF1ZXVlW2ldKTsKKwkJCW1lbWNweSgmcmctPmRpZmYsIHBhaXJkaWZmLCBzaXplb2Yoc3RydWN0IGRpZmZfcmFuZ2VzKSk7CisJCX0KKwkJZnJlZShwYWlyZGlmZik7CisJfQorCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2ludCBsaW5lX2xvZ19wcmludChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSA9IGxvb2t1cF9saW5lX3JhbmdlKHJldiwgY29tbWl0KTsKKworCXNob3dfbG9nKHJldik7CisJZHVtcF9kaWZmX2hhY2t5KHJldiwgcmFuZ2UpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcmFuZ2VzX29yZGluYXJ5X2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCQkgIHN0cnVjdCBsaW5lX2xvZ19kYXRhICpyYW5nZSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCBxdWV1ZTsKKwlzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcGFyZW50X3JhbmdlOworCWludCBjaGFuZ2VkOworCisJaWYgKGNvbW1pdC0+cGFyZW50cykKKwkJcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzLT5pdGVtOworCisJcXVldWVfZGlmZnMocmFuZ2UsICZyZXYtPmRpZmZvcHQsICZxdWV1ZSwgY29tbWl0LCBwYXJlbnQpOworCWNoYW5nZWQgPSBwcm9jZXNzX2FsbF9maWxlcygmcGFyZW50X3JhbmdlLCByZXYsICZxdWV1ZSwgcmFuZ2UpOworCWlmIChwYXJlbnQpCisJCWFkZF9saW5lX3JhbmdlKHJldiwgcGFyZW50LCBwYXJlbnRfcmFuZ2UpOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcmFuZ2VzX21lcmdlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCSAgICAgICBzdHJ1Y3QgbGluZV9sb2dfZGF0YSAqcmFuZ2UpCit7CisJc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpkaWZmcXVldWVzOworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICoqY2FuZDsKKwlzdHJ1Y3QgY29tbWl0ICoqcGFyZW50czsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJaW50IGk7CisJaW50IG5wYXJlbnRzID0gY29tbWl0X2xpc3RfY291bnQoY29tbWl0LT5wYXJlbnRzKTsKKworCWlmIChucGFyZW50cyA+IDEgJiYgcmV2LT5maXJzdF9wYXJlbnRfb25seSkKKwkJbnBhcmVudHMgPSAxOworCisJZGlmZnF1ZXVlcyA9IHhtYWxsb2MobnBhcmVudHMgKiBzaXplb2YoKmRpZmZxdWV1ZXMpKTsKKwljYW5kID0geG1hbGxvYyhucGFyZW50cyAqIHNpemVvZigqY2FuZCkpOworCXBhcmVudHMgPSB4bWFsbG9jKG5wYXJlbnRzICogc2l6ZW9mKCpwYXJlbnRzKSk7CisKKwlwID0gY29tbWl0LT5wYXJlbnRzOworCWZvciAoaSA9IDA7IGkgPCBucGFyZW50czsgaSsrKSB7CisJCXBhcmVudHNbaV0gPSBwLT5pdGVtOworCQlwID0gcC0+bmV4dDsKKwkJcXVldWVfZGlmZnMocmFuZ2UsICZyZXYtPmRpZmZvcHQsICZkaWZmcXVldWVzW2ldLCBjb21taXQsIHBhcmVudHNbaV0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBucGFyZW50czsgaSsrKSB7CisJCWludCBjaGFuZ2VkOworCQljYW5kW2ldID0gTlVMTDsKKwkJY2hhbmdlZCA9IHByb2Nlc3NfYWxsX2ZpbGVzKCZjYW5kW2ldLCByZXYsICZkaWZmcXVldWVzW2ldLCByYW5nZSk7CisJCWlmICghY2hhbmdlZCkgeworCQkJLyoKKwkJCSAqIFRoaXMgcGFyZW50IGNhbiB0YWtlIGFsbCB0aGUgYmxhbWUsIHNvIHdlCisJCQkgKiBkb24ndCBmb2xsb3cgYW55IG90aGVyIHBhdGggaW4gaGlzdG9yeQorCQkJICovCisJCQlhZGRfbGluZV9yYW5nZShyZXYsIHBhcmVudHNbaV0sIGNhbmRbaV0pOworCQkJY2xlYXJfY29tbWl0X2xpbmVfcmFuZ2UocmV2LCBjb21taXQpOworCQkJY29tbWl0X2xpc3RfYXBwZW5kKHBhcmVudHNbaV0sICZjb21taXQtPnBhcmVudHMpOworCQkJZnJlZShwYXJlbnRzKTsKKwkJCWZyZWUoY2FuZCk7CisJCQlmcmVlX2RpZmZxdWV1ZXMobnBhcmVudHMsIGRpZmZxdWV1ZXMpOworCQkJLyogTkVFRFNXT1JLIGxlYWtpbmcgbGlrZSBhIHNpZXZlICovCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qCisJICogTm8gc2luZ2xlIHBhcmVudCB0b29rIHRoZSBibGFtZS4gIFdlIGFkZCB0aGUgY2FuZGlkYXRlcworCSAqIGZyb20gdGhlIGFib3ZlIGxvb3AgdG8gdGhlIHBhcmVudHMuCisJICovCisJZm9yIChpID0gMDsgaSA8IG5wYXJlbnRzOyBpKyspIHsKKwkJYWRkX2xpbmVfcmFuZ2UocmV2LCBwYXJlbnRzW2ldLCBjYW5kW2ldKTsKKwl9CisKKwljbGVhcl9jb21taXRfbGluZV9yYW5nZShyZXYsIGNvbW1pdCk7CisJZnJlZShwYXJlbnRzKTsKKwlmcmVlKGNhbmQpOworCWZyZWVfZGlmZnF1ZXVlcyhucGFyZW50cywgZGlmZnF1ZXVlcyk7CisJcmV0dXJuIDE7CisKKwkvKiBORUVEU1dPUksgZXZpbCBtZXJnZSBkZXRlY3Rpb24gc3R1ZmYgKi8KKwkvKiBORUVEU1dPUksgbGVha2luZyBsaWtlIGEgc2lldmUgKi8KK30KKworc3RhdGljIGludCBwcm9jZXNzX3Jhbmdlc19hcmJpdHJhcnlfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGxpbmVfbG9nX2RhdGEgKnJhbmdlID0gbG9va3VwX2xpbmVfcmFuZ2UocmV2LCBjb21taXQpOworCWludCBjaGFuZ2VkID0gMDsKKworCWlmIChyYW5nZSkgeworCQlpZiAoIWNvbW1pdC0+cGFyZW50cyB8fCAhY29tbWl0LT5wYXJlbnRzLT5uZXh0KQorCQkJY2hhbmdlZCA9IHByb2Nlc3NfcmFuZ2VzX29yZGluYXJ5X2NvbW1pdChyZXYsIGNvbW1pdCwgcmFuZ2UpOworCQllbHNlCisJCQljaGFuZ2VkID0gcHJvY2Vzc19yYW5nZXNfbWVyZ2VfY29tbWl0KHJldiwgY29tbWl0LCByYW5nZSk7CisJfQorCisJaWYgKCFjaGFuZ2VkKQorCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBUUkVFU0FNRTsKKworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgZW51bSByZXdyaXRlX3Jlc3VsdCBsaW5lX2xvZ19yZXdyaXRlX29uZShzdHJ1Y3QgcmV2X2luZm8gKnJldiwgc3RydWN0IGNvbW1pdCAqKnBwKQoreworCWZvciAoOzspIHsKKwkJc3RydWN0IGNvbW1pdCAqcCA9ICpwcDsKKwkJaWYgKHAtPnBhcmVudHMgJiYgcC0+cGFyZW50cy0+bmV4dCkKKwkJCXJldHVybiByZXdyaXRlX29uZV9vazsKKwkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CisJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSkKKwkJCXJldHVybiByZXdyaXRlX29uZV9vazsKKwkJaWYgKCFwLT5wYXJlbnRzKQorCQkJcmV0dXJuIHJld3JpdGVfb25lX25vcGFyZW50czsKKwkJKnBwID0gcC0+cGFyZW50cy0+aXRlbTsKKwl9Cit9CisKK2ludCBsaW5lX2xvZ19maWx0ZXIoc3RydWN0IHJldl9pbmZvICpyZXYpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IHJldi0+Y29tbWl0czsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm91dCA9IE5VTEwsICoqcHAgPSAmb3V0OworCisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICp0b19mcmVlID0gTlVMTDsKKwkJY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJaWYgKHByb2Nlc3NfcmFuZ2VzX2FyYml0cmFyeV9jb21taXQocmV2LCBjb21taXQpKSB7CisJCQkqcHAgPSBsaXN0OworCQkJcHAgPSAmbGlzdC0+bmV4dDsKKwkJfSBlbHNlCisJCQl0b19mcmVlID0gbGlzdDsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCWZyZWUodG9fZnJlZSk7CisJfQorCSpwcCA9IE5VTEw7CisKKwlmb3IgKGxpc3QgPSBvdXQ7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorCQlyZXdyaXRlX3BhcmVudHMocmV2LCBsaXN0LT5pdGVtLCBsaW5lX2xvZ19yZXdyaXRlX29uZSk7CisKKwlyZXYtPmNvbW1pdHMgPSBvdXQ7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpbmUtbG9nLmggYi9saW5lLWxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNWMyNGUKLS0tIC9kZXYvbnVsbAorKysgYi9saW5lLWxvZy5oCkBAIC0wLDAgKzEsNjMgQEAKKyNpZm5kZWYgTElORV9MT0dfSAorI2RlZmluZSBMSU5FX0xPR19ICisKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorCitzdHJ1Y3QgcmV2X2luZm87CitzdHJ1Y3QgY29tbWl0OworCisvKiBBIHJhbmdlIFtzdGFydCxlbmRdLiAgTGluZXMgYXJlIG51bWJlcmVkIHN0YXJ0aW5nIGF0IDAsIGFuZCB0aGUKKyAqIHJhbmdlcyBpbmNsdWRlIHN0YXJ0IGJ1dCBleGNsdWRlIGVuZC4gKi8KK3N0cnVjdCByYW5nZSB7CisJbG9uZyBzdGFydCwgZW5kOworfTsKKworLyogQSBzZXQgb2YgcmFuZ2VzLiAgVGhlIHJhbmdlcyBtdXN0IGFsd2F5cyBiZSBkaXNqb2ludCBhbmQgc29ydGVkLiAqLworc3RydWN0IHJhbmdlX3NldCB7CisJaW50IGFsbG9jLCBucjsKKwlzdHJ1Y3QgcmFuZ2UgKnJhbmdlczsKK307CisKKy8qIEEgZGlmZiwgZW5jb2RlZCBhcyB0aGUgc2V0IG9mIHByZS0gYW5kIHBvc3QtaW1hZ2UgcmFuZ2VzIHdoZXJlIHRoZQorICogZmlsZXMgZGlmZmVyLiBBIHBhaXIgb2YgcmFuZ2VzIGNvcnJlc3BvbmRzIHRvIGEgaHVuay4gKi8KK3N0cnVjdCBkaWZmX3JhbmdlcyB7CisJc3RydWN0IHJhbmdlX3NldCBwYXJlbnQ7CisJc3RydWN0IHJhbmdlX3NldCB0YXJnZXQ7Cit9OworCitleHRlcm4gdm9pZCByYW5nZV9zZXRfaW5pdChzdHJ1Y3QgcmFuZ2Vfc2V0ICosIHNpemVfdCBwcmVhbGxvYyk7CitleHRlcm4gdm9pZCByYW5nZV9zZXRfcmVsZWFzZShzdHJ1Y3QgcmFuZ2Vfc2V0ICopOworLyogUmFuZ2UgaW5jbHVkZXMgc3RhcnQ7IGV4Y2x1ZGVzIGVuZCAqLworZXh0ZXJuIHZvaWQgcmFuZ2Vfc2V0X2FwcGVuZF91bnNhZmUoc3RydWN0IHJhbmdlX3NldCAqLCBsb25nIHN0YXJ0LCBsb25nIGVuZCk7CisvKiBOZXcgcmFuZ2UgbXVzdCBiZWdpbiBhdCBvciBhZnRlciBlbmQgb2YgbGFzdCBhZGRlZCByYW5nZSAqLworZXh0ZXJuIHZvaWQgcmFuZ2Vfc2V0X2FwcGVuZChzdHJ1Y3QgcmFuZ2Vfc2V0ICosIGxvbmcgc3RhcnQsIGxvbmcgZW5kKTsKKy8qCisgKiBJbi1wbGFjZSBwYXNzIG9mIHNvcnRpbmcgYW5kIG1lcmdpbmcgdGhlIHJhbmdlcyBpbiB0aGUgcmFuZ2Ugc2V0LAorICogdG8gc29ydCBhbmQgbWFrZSB0aGUgcmFuZ2VzIGRpc2pvaW50LgorICovCitleHRlcm4gdm9pZCBzb3J0X2FuZF9tZXJnZV9yYW5nZV9zZXQoc3RydWN0IHJhbmdlX3NldCAqKTsKKworLyogTGlua2VkIGxpc3Qgb2YgaW50ZXJlc3RpbmcgZmlsZXMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgcmFuZ2VzLiAgVGhlCisgKiBsaXN0IG11c3QgYmUga2VwdCBzb3J0ZWQgYnkgcGF0aC4KKyAqCisgKiBGb3Igc2ltcGxpY2l0eSwgZXZlbiB0aG91Z2ggdGhpcyBpcyBoaWdobHkgcmVkdW5kYW50LCBlYWNoCisgKiBsaW5lX2xvZ19kYXRhIG93bnMgaXRzICdwYXRoJy4KKyAqLworc3RydWN0IGxpbmVfbG9nX2RhdGEgeworCXN0cnVjdCBsaW5lX2xvZ19kYXRhICpuZXh0OworCWNoYXIgKnBhdGg7CisJY2hhciBzdGF0dXM7CisJc3RydWN0IHJhbmdlX3NldCByYW5nZXM7CisJaW50IGFyZ19hbGxvYywgYXJnX25yOworCWNvbnN0IGNoYXIgKiphcmdzOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyOworCXN0cnVjdCBkaWZmX3JhbmdlcyBkaWZmOworfTsKKworZXh0ZXJuIHZvaWQgbGluZV9sb2dfaW5pdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgY29uc3QgY2hhciAqcHJlZml4LCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmFyZ3MpOworCitleHRlcm4gaW50IGxpbmVfbG9nX2ZpbHRlcihzdHJ1Y3QgcmV2X2luZm8gKnJldik7CisKK2V4dGVybiBpbnQgbGluZV9sb2dfcHJpbnQoc3RydWN0IHJldl9pbmZvICpyZXYsIHN0cnVjdCBjb21taXQgKmNvbW1pdCk7CisKKyNlbmRpZiAvKiBMSU5FX0xPR19IICovCmRpZmYgLS1naXQgYS9saW5lLXJhbmdlLmMgYi9saW5lLXJhbmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU0ZTMyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpbmUtcmFuZ2UuYwpAQCAtMCwwICsxLDI5MCBAQAorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImxpbmUtcmFuZ2UuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ1c2VyZGlmZi5oIgorCisvKgorICogUGFyc2Ugb25lIGl0ZW0gaW4gdGhlIC1MIG9wdGlvbgorICoKKyAqICdiZWdpbicgaXMgYXBwbGljYWJsZSBvbmx5IHRvIHJlbGF0aXZlIHJhbmdlIGFuY2hvcnMuIEFic29sdXRlIGFuY2hvcnMKKyAqIGlnbm9yZSB0aGlzIHZhbHVlLgorICoKKyAqIFdoZW4gcGFyc2luZyAiLUwgQSxCIiwgcGFyc2VfbG9jKCkgaXMgY2FsbGVkIG9uY2UgZm9yIEEgYW5kIG9uY2UgZm9yIEIuCisgKgorICogV2hlbiBwYXJzaW5nIEEsICdiZWdpbicgbXVzdCBiZSBhIG5lZ2F0aXZlIG51bWJlciwgdGhlIGFic29sdXRlIHZhbHVlIG9mCisgKiB3aGljaCBpcyB0aGUgbGluZSBhdCB3aGljaCByZWxhdGl2ZSBzdGFydC1vZi1yYW5nZSBhbmNob3JzIHNob3VsZCBiZQorICogYmFzZWQuIEJlZ2lubmluZyBvZiBmaWxlIGlzIHJlcHJlc2VudGVkIGJ5IC0xLgorICoKKyAqIFdoZW4gcGFyc2luZyBCLCAnYmVnaW4nIG11c3QgYmUgdGhlIHBvc2l0aXZlIGxpbmUgbnVtYmVyIGltbWVkaWF0ZWx5CisgKiBmb2xsb3dpbmcgdGhlIGxpbmUgY29tcHV0ZWQgZm9yICdBJy4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnBhcnNlX2xvYyhjb25zdCBjaGFyICpzcGVjLCBudGhfbGluZV9mbl90IG50aF9saW5lLAorCQkJICAgICB2b2lkICpkYXRhLCBsb25nIGxpbmVzLCBsb25nIGJlZ2luLCBsb25nICpyZXQpCit7CisJY2hhciAqdGVybTsKKwljb25zdCBjaGFyICpsaW5lOworCWxvbmcgbnVtOworCWludCByZWdfZXJyb3I7CisJcmVnZXhfdCByZWdleHA7CisJcmVnbWF0Y2hfdCBtYXRjaFsxXTsKKworCS8qIEFsbG93ICItTCA8c29tZXRoaW5nPiwrMjAiIHRvIG1lYW4gc3RhcnRpbmcgYXQgPHNvbWV0aGluZz4KKwkgKiBmb3IgMjAgbGluZXMsIG9yICItTCA8c29tZXRoaW5nPiwtNSIgZm9yIDUgbGluZXMgZW5kaW5nIGF0CisJICogPHNvbWV0aGluZz4uCisJICovCisJaWYgKDEgPD0gYmVnaW4gJiYgKHNwZWNbMF0gPT0gJysnIHx8IHNwZWNbMF0gPT0gJy0nKSkgeworCQludW0gPSBzdHJ0b2woc3BlYyArIDEsICZ0ZXJtLCAxMCk7CisJCWlmICh0ZXJtICE9IHNwZWMgKyAxKSB7CisJCQlpZiAoIXJldCkKKwkJCQlyZXR1cm4gdGVybTsKKwkJCWlmIChudW0gPT0gMCkKKwkJCQlkaWUoIi1MIGludmFsaWQgZW1wdHkgcmFuZ2UiKTsKKwkJCWlmIChzcGVjWzBdID09ICctJykKKwkJCQludW0gPSAwIC0gbnVtOworCQkJaWYgKDAgPCBudW0pCisJCQkJKnJldCA9IGJlZ2luICsgbnVtIC0gMjsKKwkJCWVsc2UgaWYgKCFudW0pCisJCQkJKnJldCA9IGJlZ2luOworCQkJZWxzZQorCQkJCSpyZXQgPSBiZWdpbiArIG51bTsKKwkJCXJldHVybiB0ZXJtOworCQl9CisJCXJldHVybiBzcGVjOworCX0KKwludW0gPSBzdHJ0b2woc3BlYywgJnRlcm0sIDEwKTsKKwlpZiAodGVybSAhPSBzcGVjKSB7CisJCWlmIChyZXQpIHsKKwkJCWlmIChudW0gPD0gMCkKKwkJCQlkaWUoIi1MIGludmFsaWQgbGluZSBudW1iZXI6ICVsZCIsIG51bSk7CisJCQkqcmV0ID0gbnVtOworCQl9CisJCXJldHVybiB0ZXJtOworCX0KKworCWlmIChiZWdpbiA8IDApIHsKKwkJaWYgKHNwZWNbMF0gIT0gJ14nKQorCQkJYmVnaW4gPSAtYmVnaW47CisJCWVsc2UgeworCQkJYmVnaW4gPSAxOworCQkJc3BlYysrOworCQl9CisJfQorCisJaWYgKHNwZWNbMF0gIT0gJy8nKQorCQlyZXR1cm4gc3BlYzsKKworCS8qIGl0IGNvdWxkIGJlIGEgcmVnZXhwIG9mIGZvcm0gLy4uLi8gKi8KKwlmb3IgKHRlcm0gPSAoY2hhciAqKSBzcGVjICsgMTsgKnRlcm0gJiYgKnRlcm0gIT0gJy8nOyB0ZXJtKyspIHsKKwkJaWYgKCp0ZXJtID09ICdcXCcpCisJCQl0ZXJtKys7CisJfQorCWlmICgqdGVybSAhPSAnLycpCisJCXJldHVybiBzcGVjOworCisJLyogaW4gdGhlIHNjYW4tb25seSBjYXNlIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGUgcmVnZXggKi8KKwlpZiAoIXJldCkKKwkJcmV0dXJuIHRlcm0rMTsKKworCS8qIHRyeSBbc3BlYysxIC4uIHRlcm0tMV0gYXMgcmVnZXhwICovCisJKnRlcm0gPSAwOworCWJlZ2luLS07IC8qIGlucHV0IGlzIGluIGh1bWFuIHRlcm1zICovCisJbGluZSA9IG50aF9saW5lKGRhdGEsIGJlZ2luKTsKKworCWlmICghKHJlZ19lcnJvciA9IHJlZ2NvbXAoJnJlZ2V4cCwgc3BlYyArIDEsIFJFR19ORVdMSU5FKSkgJiYKKwkgICAgIShyZWdfZXJyb3IgPSByZWdleGVjKCZyZWdleHAsIGxpbmUsIDEsIG1hdGNoLCAwKSkpIHsKKwkJY29uc3QgY2hhciAqY3AgPSBsaW5lICsgbWF0Y2hbMF0ucm1fc287CisJCWNvbnN0IGNoYXIgKm5saW5lOworCisJCXdoaWxlIChiZWdpbisrIDwgbGluZXMpIHsKKwkJCW5saW5lID0gbnRoX2xpbmUoZGF0YSwgYmVnaW4pOworCQkJaWYgKGxpbmUgPD0gY3AgJiYgY3AgPCBubGluZSkKKwkJCQlicmVhazsKKwkJCWxpbmUgPSBubGluZTsKKwkJfQorCQkqcmV0ID0gYmVnaW47CisJCXJlZ2ZyZWUoJnJlZ2V4cCk7CisJCSp0ZXJtKysgPSAnLyc7CisJCXJldHVybiB0ZXJtOworCX0KKwllbHNlIHsKKwkJY2hhciBlcnJidWZbMTAyNF07CisJCXJlZ2Vycm9yKHJlZ19lcnJvciwgJnJlZ2V4cCwgZXJyYnVmLCAxMDI0KTsKKwkJZGllKCItTCBwYXJhbWV0ZXIgJyVzJyBzdGFydGluZyBhdCBsaW5lICVsZDogJXMiLAorCQkgICAgc3BlYyArIDEsIGJlZ2luICsgMSwgZXJyYnVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfZnVuY25hbWUoeGRlbWl0Y29uZl90ICp4ZWNmZywgY29uc3QgY2hhciAqYm9sLCBjb25zdCBjaGFyICplb2wpCit7CisJaWYgKHhlY2ZnKSB7CisJCWNoYXIgYnVmWzFdOworCQlyZXR1cm4geGVjZmctPmZpbmRfZnVuYyhib2wsIGVvbCAtIGJvbCwgYnVmLCAxLAorCQkJCQl4ZWNmZy0+ZmluZF9mdW5jX3ByaXYpID49IDA7CisJfQorCisJaWYgKGJvbCA9PSBlb2wpCisJCXJldHVybiAwOworCWlmIChpc2FscGhhKCpib2wpIHx8ICpib2wgPT0gJ18nIHx8ICpib2wgPT0gJyQnKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmZpbmRfZnVuY25hbWVfbWF0Y2hpbmdfcmVnZXhwKHhkZW1pdGNvbmZfdCAqeGVjZmcsIGNvbnN0IGNoYXIgKnN0YXJ0LAorCQkJCQkJIHJlZ2V4X3QgKnJlZ2V4cCkKK3sKKwlpbnQgcmVnX2Vycm9yOworCXJlZ21hdGNoX3QgbWF0Y2hbMV07CisJd2hpbGUgKDEpIHsKKwkJY29uc3QgY2hhciAqYm9sLCAqZW9sOworCQlyZWdfZXJyb3IgPSByZWdleGVjKHJlZ2V4cCwgc3RhcnQsIDEsIG1hdGNoLCAwKTsKKwkJaWYgKHJlZ19lcnJvciA9PSBSRUdfTk9NQVRDSCkKKwkJCXJldHVybiBOVUxMOworCQllbHNlIGlmIChyZWdfZXJyb3IpIHsKKwkJCWNoYXIgZXJyYnVmWzEwMjRdOworCQkJcmVnZXJyb3IocmVnX2Vycm9yLCByZWdleHAsIGVycmJ1ZiwgMTAyNCk7CisJCQlkaWUoIi1MIHBhcmFtZXRlcjogcmVnZXhlYygpIGZhaWxlZDogJXMiLCBlcnJidWYpOworCQl9CisJCS8qIGRldGVybWluZSBleHRlbnQgb2YgbGluZSBtYXRjaGVkICovCisJCWJvbCA9IHN0YXJ0K21hdGNoWzBdLnJtX3NvOworCQllb2wgPSBzdGFydCttYXRjaFswXS5ybV9lbzsKKwkJd2hpbGUgKGJvbCA+IHN0YXJ0ICYmICpib2wgIT0gJ1xuJykKKwkJCWJvbC0tOworCQlpZiAoKmJvbCA9PSAnXG4nKQorCQkJYm9sKys7CisJCXdoaWxlICgqZW9sICYmICplb2wgIT0gJ1xuJykKKwkJCWVvbCsrOworCQlpZiAoKmVvbCA9PSAnXG4nKQorCQkJZW9sKys7CisJCS8qIGlzIGl0IGEgZnVuY25hbWUgbGluZT8gKi8KKwkJaWYgKG1hdGNoX2Z1bmNuYW1lKHhlY2ZnLCAoY2hhciopIGJvbCwgKGNoYXIqKSBlb2wpKQorCQkJcmV0dXJuIGJvbDsKKwkJc3RhcnQgPSBlb2w7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqcGFyc2VfcmFuZ2VfZnVuY25hbWUoY29uc3QgY2hhciAqYXJnLCBudGhfbGluZV9mbl90IG50aF9saW5lX2NiLAorCQkJCQl2b2lkICpjYl9kYXRhLCBsb25nIGxpbmVzLCBsb25nIGFuY2hvciwgbG9uZyAqYmVnaW4sIGxvbmcgKmVuZCwKKwkJCQkJY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyICpwYXR0ZXJuOworCWNvbnN0IGNoYXIgKnRlcm07CisJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJ2OworCXhkZW1pdGNvbmZfdCAqeGVjZmcgPSBOVUxMOworCWNvbnN0IGNoYXIgKnN0YXJ0OworCWNvbnN0IGNoYXIgKnA7CisJaW50IHJlZ19lcnJvcjsKKwlyZWdleF90IHJlZ2V4cDsKKworCWlmICgqYXJnID09ICdeJykgeworCQlhbmNob3IgPSAxOworCQlhcmcrKzsKKwl9CisKKwlhc3NlcnQoKmFyZyA9PSAnOicpOworCXRlcm0gPSBhcmcrMTsKKwl3aGlsZSAoKnRlcm0gJiYgKnRlcm0gIT0gJzonKSB7CisJCWlmICgqdGVybSA9PSAnXFwnICYmICoodGVybSsxKSkKKwkJCXRlcm0rKzsKKwkJdGVybSsrOworCX0KKwlpZiAodGVybSA9PSBhcmcrMSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCFiZWdpbikgLyogc2tpcF9yYW5nZV9hcmcgY2FzZSAqLworCQlyZXR1cm4gdGVybTsKKworCXBhdHRlcm4gPSB4c3RybmR1cChhcmcrMSwgdGVybS0oYXJnKzEpKTsKKworCWFuY2hvci0tOyAvKiBpbnB1dCBpcyBpbiBodW1hbiB0ZXJtcyAqLworCXN0YXJ0ID0gbnRoX2xpbmVfY2IoY2JfZGF0YSwgYW5jaG9yKTsKKworCWRydiA9IHVzZXJkaWZmX2ZpbmRfYnlfcGF0aChwYXRoKTsKKwlpZiAoZHJ2ICYmIGRydi0+ZnVuY25hbWUucGF0dGVybikgeworCQljb25zdCBzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgKnBlID0gJmRydi0+ZnVuY25hbWU7CisJCXhlY2ZnID0geGNhbGxvYygxLCBzaXplb2YoKnhlY2ZnKSk7CisJCXhkaWZmX3NldF9maW5kX2Z1bmMoeGVjZmcsIHBlLT5wYXR0ZXJuLCBwZS0+Y2ZsYWdzKTsKKwl9CisKKwlyZWdfZXJyb3IgPSByZWdjb21wKCZyZWdleHAsIHBhdHRlcm4sIFJFR19ORVdMSU5FKTsKKwlpZiAocmVnX2Vycm9yKSB7CisJCWNoYXIgZXJyYnVmWzEwMjRdOworCQlyZWdlcnJvcihyZWdfZXJyb3IsICZyZWdleHAsIGVycmJ1ZiwgMTAyNCk7CisJCWRpZSgiLUwgcGFyYW1ldGVyICclcyc6ICVzIiwgcGF0dGVybiwgZXJyYnVmKTsKKwl9CisKKwlwID0gZmluZF9mdW5jbmFtZV9tYXRjaGluZ19yZWdleHAoeGVjZmcsIChjaGFyKikgc3RhcnQsICZyZWdleHApOworCWlmICghcCkKKwkJZGllKCItTCBwYXJhbWV0ZXIgJyVzJyBzdGFydGluZyBhdCBsaW5lICVsZDogbm8gbWF0Y2giLAorCQkgICAgcGF0dGVybiwgYW5jaG9yICsgMSk7CisJKmJlZ2luID0gMDsKKwl3aGlsZSAocCA+IG50aF9saW5lX2NiKGNiX2RhdGEsICpiZWdpbikpCisJCSgqYmVnaW4pKys7CisKKwlpZiAoKmJlZ2luID49IGxpbmVzKQorCQlkaWUoIi1MIHBhcmFtZXRlciAnJXMnIG1hdGNoZXMgYXQgRU9GIiwgcGF0dGVybik7CisKKwkqZW5kID0gKmJlZ2luKzE7CisJd2hpbGUgKCplbmQgPCBsaW5lcykgeworCQljb25zdCBjaGFyICpib2wgPSBudGhfbGluZV9jYihjYl9kYXRhLCAqZW5kKTsKKwkJY29uc3QgY2hhciAqZW9sID0gbnRoX2xpbmVfY2IoY2JfZGF0YSwgKmVuZCsxKTsKKwkJaWYgKG1hdGNoX2Z1bmNuYW1lKHhlY2ZnLCBib2wsIGVvbCkpCisJCQlicmVhazsKKwkJKCplbmQpKys7CisJfQorCisJcmVnZnJlZSgmcmVnZXhwKTsKKwlmcmVlKHhlY2ZnKTsKKwlmcmVlKHBhdHRlcm4pOworCisJLyogY29tcGVuc2F0ZSBmb3IgMS1iYXNlZCBudW1iZXJpbmcgKi8KKwkoKmJlZ2luKSsrOworCisJcmV0dXJuIHRlcm07Cit9CisKK2ludCBwYXJzZV9yYW5nZV9hcmcoY29uc3QgY2hhciAqYXJnLCBudGhfbGluZV9mbl90IG50aF9saW5lX2NiLAorCQkgICAgdm9pZCAqY2JfZGF0YSwgbG9uZyBsaW5lcywgbG9uZyBhbmNob3IsCisJCSAgICBsb25nICpiZWdpbiwgbG9uZyAqZW5kLCBjb25zdCBjaGFyICpwYXRoKQoreworCSpiZWdpbiA9ICplbmQgPSAwOworCisJaWYgKGFuY2hvciA8IDEpCisJCWFuY2hvciA9IDE7CisJaWYgKGFuY2hvciA+IGxpbmVzKQorCQlhbmNob3IgPSBsaW5lcyArIDE7CisKKwlpZiAoKmFyZyA9PSAnOicgfHwgKCphcmcgPT0gJ14nICYmICooYXJnICsgMSkgPT0gJzonKSkgeworCQlhcmcgPSBwYXJzZV9yYW5nZV9mdW5jbmFtZShhcmcsIG50aF9saW5lX2NiLCBjYl9kYXRhLCBsaW5lcywgYW5jaG9yLCBiZWdpbiwgZW5kLCBwYXRoKTsKKwkJaWYgKCFhcmcgfHwgKmFyZykKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCisJYXJnID0gcGFyc2VfbG9jKGFyZywgbnRoX2xpbmVfY2IsIGNiX2RhdGEsIGxpbmVzLCAtYW5jaG9yLCBiZWdpbik7CisKKwlpZiAoKmFyZyA9PSAnLCcpCisJCWFyZyA9IHBhcnNlX2xvYyhhcmcgKyAxLCBudGhfbGluZV9jYiwgY2JfZGF0YSwgbGluZXMsICpiZWdpbiArIDEsIGVuZCk7CisKKwlpZiAoKmFyZykKKwkJcmV0dXJuIC0xOworCisJaWYgKCpiZWdpbiAmJiAqZW5kICYmICplbmQgPCAqYmVnaW4pIHsKKwkJbG9uZyB0bXA7CisJCXRtcCA9ICplbmQ7ICplbmQgPSAqYmVnaW47ICpiZWdpbiA9IHRtcDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworY29uc3QgY2hhciAqc2tpcF9yYW5nZV9hcmcoY29uc3QgY2hhciAqYXJnKQoreworCWlmICgqYXJnID09ICc6JyB8fCAoKmFyZyA9PSAnXicgJiYgKihhcmcgKyAxKSA9PSAnOicpKQorCQlyZXR1cm4gcGFyc2VfcmFuZ2VfZnVuY25hbWUoYXJnLCBOVUxMLCBOVUxMLCAwLCAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCWFyZyA9IHBhcnNlX2xvYyhhcmcsIE5VTEwsIE5VTEwsIDAsIC0xLCBOVUxMKTsKKworCWlmICgqYXJnID09ICcsJykKKwkJYXJnID0gcGFyc2VfbG9jKGFyZysxLCBOVUxMLCBOVUxMLCAwLCAwLCBOVUxMKTsKKworCXJldHVybiBhcmc7Cit9CmRpZmYgLS1naXQgYS9saW5lLXJhbmdlLmggYi9saW5lLXJhbmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiYTNjMgotLS0gL2Rldi9udWxsCisrKyBiL2xpbmUtcmFuZ2UuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIExJTkVfUkFOR0VfSAorI2RlZmluZSBMSU5FX1JBTkdFX0gKKworLyoKKyAqIFBhcnNlIG9uZSBpdGVtIGluIGFuIC1MIGJlZ2luLGVuZCBvcHRpb24gdy5yLnQuIHRoZSBub3Rpb25hbCBmaWxlCisgKiBvYmplY3QgJ2NiX2RhdGEnIGNvbnNpc3Rpbmcgb2YgJ2xpbmVzJyBsaW5lcy4KKyAqCisgKiBUaGUgJ250aF9saW5lX2NiJyBjYWxsYmFjayBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgc3RhcnQgb2YgdGhlCisgKiBsaW5lICdsbm8nIGluc2lkZSB0aGUgJ2NiX2RhdGEnLiAgVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBhbHJlYWR5CisgKiBoYXZlIGEgc3VpdGFibGUgbWFwIGF0IGhhbmQgdG8gbWFrZSB0aGlzIGEgY29uc3RhbnQtdGltZSBsb29rdXAuCisgKgorICogJ2FuY2hvcicgaXMgdGhlIDEtYmFzZWQgbGluZSBhdCB3aGljaCByZWxhdGl2ZSByYW5nZSBzcGVjaWZpY2F0aW9ucworICogc2hvdWxkIGJlIGFuY2hvcmVkLiBBYnNvbHV0ZSByYW5nZXMgYXJlIHVuYWZmZWN0ZWQgYnkgdGhpcyB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zIDAgaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCAtMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuICBUaGUKKyAqIGFjdHVhbCByYW5nZSBpcyBzdG9yZWQgaW4gKmJlZ2luIGFuZCAqZW5kLiAgVGhlIGNvdW50aW5nIHN0YXJ0cworICogYXQgMSEgIEluIGNhc2Ugb2YgZXJyb3IsIHRoZSBjYWxsZXIgc2hvdWxkIHNob3cgdXNhZ2UgbWVzc2FnZS4KKyAqLworCit0eXBlZGVmIGNvbnN0IGNoYXIgKigqbnRoX2xpbmVfZm5fdCkodm9pZCAqZGF0YSwgbG9uZyBsbm8pOworCitleHRlcm4gaW50IHBhcnNlX3JhbmdlX2FyZyhjb25zdCBjaGFyICphcmcsCisJCQkgICBudGhfbGluZV9mbl90IG50aF9saW5lX2NiLAorCQkJICAgdm9pZCAqY2JfZGF0YSwgbG9uZyBsaW5lcywgbG9uZyBhbmNob3IsCisJCQkgICBsb25nICpiZWdpbiwgbG9uZyAqZW5kLAorCQkJICAgY29uc3QgY2hhciAqcGF0aCk7CisKKy8qCisgKiBTY2FuIHBhc3QgYSByYW5nZSBhcmd1bWVudCB0aGF0IGNvdWxkIGJlIHBhcnNlZCBieQorICogJ3BhcnNlX3JhbmdlX2FyZycsIHRvIGhlbHAgdGhlIGNhbGxlciBkZXRlcm1pbmUgdGhlIHN0YXJ0IG9mIHRoZQorICogZmlsZW5hbWUgaW4gJy1MIG4sbTpmaWxlJyBzeW50YXguCisgKgorICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgJ24sbScgcGFydCwgb3IKKyAqIE5VTEwgaW4gY2FzZSB0aGUgYXJndW1lbnQgaXMgb2J2aW91c2x5IG1hbGZvcm1lZC4KKyAqLworCitleHRlcm4gY29uc3QgY2hhciAqc2tpcF9yYW5nZV9hcmcoY29uc3QgY2hhciAqYXJnKTsKKworI2VuZGlmIC8qIExJTkVfUkFOR0VfSCAqLwpkaWZmIC0tZ2l0IGEvbGlzdC1vYmplY3RzLmMgYi9saXN0LW9iamVjdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTczNmQyCi0tLSAvZGV2L251bGwKKysrIGIvbGlzdC1vYmplY3RzLmMKQEAgLTAsMCArMSwyMzYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfYmxvYihzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgc3RydWN0IGJsb2IgKmJsb2IsCisJCQkgc2hvd19vYmplY3RfZm4gc2hvdywKKwkJCSBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmYmxvYi0+b2JqZWN0OworCisJaWYgKCFyZXZzLT5ibG9iX29iamVjdHMpCisJCXJldHVybjsKKwlpZiAoIW9iaikKKwkJZGllKCJiYWQgYmxvYiBvYmplY3QiKTsKKwlpZiAob2JqLT5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgU0VFTikpCisJCXJldHVybjsKKwlvYmotPmZsYWdzIHw9IFNFRU47CisJc2hvdyhvYmosIHBhdGgsIG5hbWUsIGNiX2RhdGEpOworfQorCisvKgorICogUHJvY2Vzc2luZyBhIGdpdGxpbmsgZW50cnkgY3VycmVudGx5IGRvZXMgbm90aGluZywgc2luY2UKKyAqIHdlIGRvIG5vdCByZWN1cnNlIGludG8gdGhlIHN1YnByb2plY3QuCisgKgorICogV2UgKmNvdWxkKiBldmVudHVhbGx5IGFkZCBhIGZsYWcgdGhhdCBhY3R1YWxseSBkb2VzIHRoYXQsCisgKiB3aGljaCB3b3VsZCBpbnZvbHZlOgorICogIC0gaXMgdGhlIHN1YnByb2plY3QgYWN0dWFsbHkgY2hlY2tlZCBvdXQ/CisgKiAgLSBpZiBzbywgc2VlIGlmIHRoZSBzdWJwcm9qZWN0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQKKyAqICAgIHRvIHRoZSBhbHRlcm5hdGVzIGxpc3QsIGFuZCBhZGQgaXQgaWYgbm90LgorICogIC0gcHJvY2VzcyB0aGUgY29tbWl0IChvciB0YWcpIHRoZSBnaXRsaW5rIHBvaW50cyB0bworICogICAgcmVjdXJzaXZlbHkuCisgKgorICogSG93ZXZlciwgaXQncyB1bmNsZWFyIHdoZXRoZXIgdGhlcmUgaXMgcmVhbGx5IGV2ZXIgYW55CisgKiByZWFzb24gdG8gc2VlIHN1cGVycHJvamVjdHMgYW5kIHN1YnByb2plY3RzIGFzIHN1Y2ggYQorICogInVuaWZpZWQiIG9iamVjdCBwb29sIChwb3RlbnRpYWxseSByZXN1bHRpbmcgaW4gYSB0b3RhbGx5CisgKiBodW1vbmdvdXMgcGFjayAtIGF2b2lkaW5nIHdoaWNoIHdhcyB0aGUgd2hvbGUgcG9pbnQgb2YKKyAqIGhhdmluZyBnaXRsaW5rcyBpbiB0aGUgZmlyc3QgcGxhY2UhKS4KKyAqCisgKiBTbyBmb3Igbm93LCB0aGVyZSBpcyBqdXN0IGEgbm90ZSB0aGF0IHdlICpjb3VsZCogZm9sbG93CisgKiB0aGUgbGluaywgYW5kIGhvdyB0byBkbyBpdC4gV2hldGhlciBpdCBuZWNlc3NhcmlseSBtYWtlcworICogYW55IHNlbnNlIHdoYXQtc28tZXZlciB0byBldmVyIGRvIHRoYXQgaXMgYW5vdGhlciBpc3N1ZS4KKyAqLworc3RhdGljIHZvaWQgcHJvY2Vzc19naXRsaW5rKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgIHNob3dfb2JqZWN0X2ZuIHNob3csCisJCQkgICAgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwKKwkJCSAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgIHZvaWQgKmNiX2RhdGEpCit7CisJLyogTm90aGluZyB0byBkbyAqLworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3RyZWUoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJIHN0cnVjdCB0cmVlICp0cmVlLAorCQkJIHNob3dfb2JqZWN0X2ZuIHNob3csCisJCQkgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwKKwkJCSBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSAmdHJlZS0+b2JqZWN0OworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwlzdHJ1Y3QgbmFtZV9wYXRoIG1lOworCWVudW0gaW50ZXJlc3RpbmcgbWF0Y2ggPSByZXZzLT5kaWZmb3B0LnBhdGhzcGVjLm5yID09IDAgPworCQlhbGxfZW50cmllc19pbnRlcmVzdGluZzogZW50cnlfbm90X2ludGVyZXN0aW5nOworCWludCBiYXNlbGVuID0gYmFzZS0+bGVuOworCisJaWYgKCFyZXZzLT50cmVlX29iamVjdHMpCisJCXJldHVybjsKKwlpZiAoIW9iaikKKwkJZGllKCJiYWQgdHJlZSBvYmplY3QiKTsKKwlpZiAob2JqLT5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgU0VFTikpCisJCXJldHVybjsKKwlpZiAocGFyc2VfdHJlZV9nZW50bHkodHJlZSwgcmV2cy0+aWdub3JlX21pc3NpbmdfbGlua3MpIDwgMCkgeworCQlpZiAocmV2cy0+aWdub3JlX21pc3NpbmdfbGlua3MpCisJCQlyZXR1cm47CisJCWRpZSgiYmFkIHRyZWUgb2JqZWN0ICVzIiwgc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJfQorCW9iai0+ZmxhZ3MgfD0gU0VFTjsKKwlzaG93KG9iaiwgcGF0aCwgbmFtZSwgY2JfZGF0YSk7CisJbWUudXAgPSBwYXRoOworCW1lLmVsZW0gPSBuYW1lOworCW1lLmVsZW1fbGVuID0gc3RybGVuKG5hbWUpOworCisJaWYgKCFtYXRjaCkgeworCQlzdHJidWZfYWRkc3RyKGJhc2UsIG5hbWUpOworCQlpZiAoYmFzZS0+bGVuKQorCQkJc3RyYnVmX2FkZGNoKGJhc2UsICcvJyk7CisJfQorCisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisKKwl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkgeworCQlpZiAobWF0Y2ggIT0gYWxsX2VudHJpZXNfaW50ZXJlc3RpbmcpIHsKKwkJCW1hdGNoID0gdHJlZV9lbnRyeV9pbnRlcmVzdGluZygmZW50cnksIGJhc2UsIDAsCisJCQkJCQkgICAgICAgJnJldnMtPmRpZmZvcHQucGF0aHNwZWMpOworCQkJaWYgKG1hdGNoID09IGFsbF9lbnRyaWVzX25vdF9pbnRlcmVzdGluZykKKwkJCQlicmVhazsKKwkJCWlmIChtYXRjaCA9PSBlbnRyeV9ub3RfaW50ZXJlc3RpbmcpCisJCQkJY29udGludWU7CisJCX0KKworCQlpZiAoU19JU0RJUihlbnRyeS5tb2RlKSkKKwkJCXByb2Nlc3NfdHJlZShyZXZzLAorCQkJCSAgICAgbG9va3VwX3RyZWUoZW50cnkuc2hhMSksCisJCQkJICAgICBzaG93LCAmbWUsIGJhc2UsIGVudHJ5LnBhdGgsCisJCQkJICAgICBjYl9kYXRhKTsKKwkJZWxzZSBpZiAoU19JU0dJVExJTksoZW50cnkubW9kZSkpCisJCQlwcm9jZXNzX2dpdGxpbmsocmV2cywgZW50cnkuc2hhMSwKKwkJCQkJc2hvdywgJm1lLCBlbnRyeS5wYXRoLAorCQkJCQljYl9kYXRhKTsKKwkJZWxzZQorCQkJcHJvY2Vzc19ibG9iKHJldnMsCisJCQkJICAgICBsb29rdXBfYmxvYihlbnRyeS5zaGExKSwKKwkJCQkgICAgIHNob3csICZtZSwgZW50cnkucGF0aCwKKwkJCQkgICAgIGNiX2RhdGEpOworCX0KKwlzdHJidWZfc2V0bGVuKGJhc2UsIGJhc2VsZW4pOworCWZyZWVfdHJlZV9idWZmZXIodHJlZSk7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfZWRnZV9wYXJlbnRzX3VuaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCQkgICAgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgICAgc2hvd19lZGdlX2ZuIHNob3dfZWRnZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHBhcmVudHMtPml0ZW07CisJCWlmICghKHBhcmVudC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQljb250aW51ZTsKKwkJbWFya190cmVlX3VuaW50ZXJlc3RpbmcocGFyZW50LT50cmVlKTsKKwkJaWYgKHJldnMtPmVkZ2VfaGludCAmJiAhKHBhcmVudC0+b2JqZWN0LmZsYWdzICYgU0hPV04pKSB7CisJCQlwYXJlbnQtPm9iamVjdC5mbGFncyB8PSBTSE9XTjsKKwkJCXNob3dfZWRnZShwYXJlbnQpOworCQl9CisJfQorfQorCit2b2lkIG1hcmtfZWRnZXNfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHNob3dfZWRnZV9mbiBzaG93X2VkZ2UpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0OworCWludCBpOworCisJZm9yIChsaXN0ID0gcmV2cy0+Y29tbWl0czsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKKworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQltYXJrX3RyZWVfdW5pbnRlcmVzdGluZyhjb21taXQtPnRyZWUpOworCQkJaWYgKHJldnMtPmVkZ2VfaGludF9hZ2dyZXNzaXZlICYmICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTSE9XTikpIHsKKwkJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBTSE9XTjsKKwkJCQlzaG93X2VkZ2UoY29tbWl0KTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCW1hcmtfZWRnZV9wYXJlbnRzX3VuaW50ZXJlc3RpbmcoY29tbWl0LCByZXZzLCBzaG93X2VkZ2UpOworCX0KKwlpZiAocmV2cy0+ZWRnZV9oaW50X2FnZ3Jlc3NpdmUpIHsKKwkJZm9yIChpID0gMDsgaSA8IHJldnMtPmNtZGxpbmUubnI7IGkrKykgeworCQkJc3RydWN0IG9iamVjdCAqb2JqID0gcmV2cy0+Y21kbGluZS5yZXZbaV0uaXRlbTsKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopb2JqOworCQkJaWYgKG9iai0+dHlwZSAhPSBPQkpfQ09NTUlUIHx8ICEob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpKQorCQkJCWNvbnRpbnVlOworCQkJbWFya190cmVlX3VuaW50ZXJlc3RpbmcoY29tbWl0LT50cmVlKTsKKwkJCWlmICghKG9iai0+ZmxhZ3MgJiBTSE9XTikpIHsKKwkJCQlvYmotPmZsYWdzIHw9IFNIT1dOOworCQkJCXNob3dfZWRnZShjb21taXQpOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBhZGRfcGVuZGluZ190cmVlKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IHRyZWUgKnRyZWUpCit7CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsICZ0cmVlLT5vYmplY3QsICIiKTsKK30KKwordm9pZCB0cmF2ZXJzZV9jb21taXRfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgIHNob3dfY29tbWl0X2ZuIHNob3dfY29tbWl0LAorCQkJICBzaG93X29iamVjdF9mbiBzaG93X29iamVjdCwKKwkJCSAgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IHN0cmJ1ZiBiYXNlOworCisJc3RyYnVmX2luaXQoJmJhc2UsIFBBVEhfTUFYKTsKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihyZXZzKSkgIT0gTlVMTCkgeworCQkvKgorCQkgKiBhbiB1bmludGVyZXN0aW5nIGJvdW5kYXJ5IGNvbW1pdCBtYXkgbm90IGhhdmUgaXRzIHRyZWUKKwkJICogcGFyc2VkIHlldCwgYnV0IHdlIGFyZSBub3QgZ29pbmcgdG8gc2hvdyB0aGVtIGFueXdheQorCQkgKi8KKwkJaWYgKGNvbW1pdC0+dHJlZSkKKwkJCWFkZF9wZW5kaW5nX3RyZWUocmV2cywgY29tbWl0LT50cmVlKTsKKwkJc2hvd19jb21taXQoY29tbWl0LCBkYXRhKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHJldnMtPnBlbmRpbmcubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpwZW5kaW5nID0gcmV2cy0+cGVuZGluZy5vYmplY3RzICsgaTsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gcGVuZGluZy0+aXRlbTsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHBlbmRpbmctPm5hbWU7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBwZW5kaW5nLT5wYXRoOworCQlpZiAob2JqLT5mbGFncyAmIChVTklOVEVSRVNUSU5HIHwgU0VFTikpCisJCQljb250aW51ZTsKKwkJaWYgKG9iai0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCQlvYmotPmZsYWdzIHw9IFNFRU47CisJCQlzaG93X29iamVjdChvYmosIE5VTEwsIG5hbWUsIGRhdGEpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFwYXRoKQorCQkJcGF0aCA9ICIiOworCQlpZiAob2JqLT50eXBlID09IE9CSl9UUkVFKSB7CisJCQlwcm9jZXNzX3RyZWUocmV2cywgKHN0cnVjdCB0cmVlICopb2JqLCBzaG93X29iamVjdCwKKwkJCQkgICAgIE5VTEwsICZiYXNlLCBwYXRoLCBkYXRhKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX0JMT0IpIHsKKwkJCXByb2Nlc3NfYmxvYihyZXZzLCAoc3RydWN0IGJsb2IgKilvYmosIHNob3dfb2JqZWN0LAorCQkJCSAgICAgTlVMTCwgcGF0aCwgZGF0YSk7CisJCQljb250aW51ZTsKKwkJfQorCQlkaWUoInVua25vd24gcGVuZGluZyBvYmplY3QgJXMgKCVzKSIsCisJCSAgICBzaGExX3RvX2hleChvYmotPnNoYTEpLCBuYW1lKTsKKwl9CisJb2JqZWN0X2FycmF5X2NsZWFyKCZyZXZzLT5wZW5kaW5nKTsKKwlzdHJidWZfcmVsZWFzZSgmYmFzZSk7Cit9CmRpZmYgLS1naXQgYS9saXN0LW9iamVjdHMuaCBiL2xpc3Qtb2JqZWN0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNmExZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saXN0LW9iamVjdHMuaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIExJU1RfT0JKRUNUU19ICisjZGVmaW5lIExJU1RfT0JKRUNUU19ICisKK3R5cGVkZWYgdm9pZCAoKnNob3dfY29tbWl0X2ZuKShzdHJ1Y3QgY29tbWl0ICosIHZvaWQgKik7Cit0eXBlZGVmIHZvaWQgKCpzaG93X29iamVjdF9mbikoc3RydWN0IG9iamVjdCAqLCBjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK3ZvaWQgdHJhdmVyc2VfY29tbWl0X2xpc3Qoc3RydWN0IHJldl9pbmZvICosIHNob3dfY29tbWl0X2ZuLCBzaG93X29iamVjdF9mbiwgdm9pZCAqKTsKKwordHlwZWRlZiB2b2lkICgqc2hvd19lZGdlX2ZuKShzdHJ1Y3QgY29tbWl0ICopOwordm9pZCBtYXJrX2VkZ2VzX3VuaW50ZXJlc3Rpbmcoc3RydWN0IHJldl9pbmZvICosIHNob3dfZWRnZV9mbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGwtbWVyZ2UuYyBiL2xsLW1lcmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMzODYzMAotLS0gL2Rldi9udWxsCisrKyBiL2xsLW1lcmdlLmMKQEAgLTAsMCArMSw0MDYgQEAKKy8qCisgKiBMb3cgbGV2ZWwgMy13YXkgaW4tY29yZSBmaWxlIG1lcmdlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBKdW5pbyBDIEhhbWFubworICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKworc3RydWN0IGxsX21lcmdlX2RyaXZlcjsKKwordHlwZWRlZiBpbnQgKCpsbF9tZXJnZV9mbikoY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqLAorCQkJICAgbW1idWZmZXJfdCAqcmVzdWx0LAorCQkJICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgIG1tZmlsZV90ICpvcmlnLCBjb25zdCBjaGFyICpvcmlnX25hbWUsCisJCQkgICBtbWZpbGVfdCAqc3JjMSwgY29uc3QgY2hhciAqbmFtZTEsCisJCQkgICBtbWZpbGVfdCAqc3JjMiwgY29uc3QgY2hhciAqbmFtZTIsCisJCQkgICBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyAqb3B0cywKKwkJCSAgIGludCBtYXJrZXJfc2l6ZSk7CisKK3N0cnVjdCBsbF9tZXJnZV9kcml2ZXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZGVzY3JpcHRpb247CisJbGxfbWVyZ2VfZm4gZm47CisJY29uc3QgY2hhciAqcmVjdXJzaXZlOworCXN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKm5leHQ7CisJY2hhciAqY21kbGluZTsKK307CisKKy8qCisgKiBCdWlsdC1pbiBsb3ctbGV2ZWxzCisgKi8KK3N0YXRpYyBpbnQgbGxfYmluYXJ5X21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRydl91bnVzZWQsCisJCQkgICBtbWJ1ZmZlcl90ICpyZXN1bHQsCisJCQkgICBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgbW1maWxlX3QgKm9yaWcsIGNvbnN0IGNoYXIgKm9yaWdfbmFtZSwKKwkJCSAgIG1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCSAgIG1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCSAgIGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzLAorCQkJICAgaW50IG1hcmtlcl9zaXplKQoreworCW1tZmlsZV90ICpzdG9sZW47CisJYXNzZXJ0KG9wdHMpOworCisJLyoKKwkgKiBUaGUgdGVudGF0aXZlIG1lcmdlIHJlc3VsdCBpcyB0aGUgb3IgY29tbW9uIGFuY2VzdG9yIGZvciBhbiBpbnRlcm5hbCBtZXJnZS4KKwkgKi8KKwlpZiAob3B0cy0+dmlydHVhbF9hbmNlc3RvcikgeworCQlzdG9sZW4gPSBvcmlnOworCX0gZWxzZSB7CisJCXN3aXRjaCAob3B0cy0+dmFyaWFudCkgeworCQlkZWZhdWx0OgorCQkJd2FybmluZygiQ2Fubm90IG1lcmdlIGJpbmFyeSBmaWxlczogJXMgKCVzIHZzLiAlcykiLAorCQkJCXBhdGgsIG5hbWUxLCBuYW1lMik7CisJCQkvKiBmYWxsdGhydSAqLworCQljYXNlIFhETF9NRVJHRV9GQVZPUl9PVVJTOgorCQkJc3RvbGVuID0gc3JjMTsKKwkJCWJyZWFrOworCQljYXNlIFhETF9NRVJHRV9GQVZPUl9USEVJUlM6CisJCQlzdG9sZW4gPSBzcmMyOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXN1bHQtPnB0ciA9IHN0b2xlbi0+cHRyOworCXJlc3VsdC0+c2l6ZSA9IHN0b2xlbi0+c2l6ZTsKKwlzdG9sZW4tPnB0ciA9IE5VTEw7CisKKwkvKgorCSAqIFdpdGggLVh0aGVpcnMgb3IgLVhvdXJzLCB3ZSBoYXZlIGNsZWFubHkgbWVyZ2VkOworCSAqIG90aGVyd2lzZSB3ZSBnb3QgYSBjb25mbGljdC4KKwkgKi8KKwlyZXR1cm4gKG9wdHMtPnZhcmlhbnQgPyAwIDogMSk7Cit9CisKK3N0YXRpYyBpbnQgbGxfeGRsX21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRydl91bnVzZWQsCisJCQltbWJ1ZmZlcl90ICpyZXN1bHQsCisJCQljb25zdCBjaGFyICpwYXRoLAorCQkJbW1maWxlX3QgKm9yaWcsIGNvbnN0IGNoYXIgKm9yaWdfbmFtZSwKKwkJCW1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCW1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCWNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzLAorCQkJaW50IG1hcmtlcl9zaXplKQoreworCXhtcGFyYW1fdCB4bXA7CisJYXNzZXJ0KG9wdHMpOworCisJaWYgKG9yaWctPnNpemUgPiBNQVhfWERJRkZfU0laRSB8fAorCSAgICBzcmMxLT5zaXplID4gTUFYX1hESUZGX1NJWkUgfHwKKwkgICAgc3JjMi0+c2l6ZSA+IE1BWF9YRElGRl9TSVpFIHx8CisJICAgIGJ1ZmZlcl9pc19iaW5hcnkob3JpZy0+cHRyLCBvcmlnLT5zaXplKSB8fAorCSAgICBidWZmZXJfaXNfYmluYXJ5KHNyYzEtPnB0ciwgc3JjMS0+c2l6ZSkgfHwKKwkgICAgYnVmZmVyX2lzX2JpbmFyeShzcmMyLT5wdHIsIHNyYzItPnNpemUpKSB7CisJCXJldHVybiBsbF9iaW5hcnlfbWVyZ2UoZHJ2X3VudXNlZCwgcmVzdWx0LAorCQkJCSAgICAgICBwYXRoLAorCQkJCSAgICAgICBvcmlnLCBvcmlnX25hbWUsCisJCQkJICAgICAgIHNyYzEsIG5hbWUxLAorCQkJCSAgICAgICBzcmMyLCBuYW1lMiwKKwkJCQkgICAgICAgb3B0cywgbWFya2VyX3NpemUpOworCX0KKworCW1lbXNldCgmeG1wLCAwLCBzaXplb2YoeG1wKSk7CisJeG1wLmxldmVsID0gWERMX01FUkdFX1pFQUxPVVM7CisJeG1wLmZhdm9yID0gb3B0cy0+dmFyaWFudDsKKwl4bXAueHBwLmZsYWdzID0gb3B0cy0+eGRsX29wdHM7CisJaWYgKGdpdF94bWVyZ2Vfc3R5bGUgPj0gMCkKKwkJeG1wLnN0eWxlID0gZ2l0X3htZXJnZV9zdHlsZTsKKwlpZiAobWFya2VyX3NpemUgPiAwKQorCQl4bXAubWFya2VyX3NpemUgPSBtYXJrZXJfc2l6ZTsKKwl4bXAuYW5jZXN0b3IgPSBvcmlnX25hbWU7CisJeG1wLmZpbGUxID0gbmFtZTE7CisJeG1wLmZpbGUyID0gbmFtZTI7CisJcmV0dXJuIHhkbF9tZXJnZShvcmlnLCBzcmMxLCBzcmMyLCAmeG1wLCByZXN1bHQpOworfQorCitzdGF0aWMgaW50IGxsX3VuaW9uX21lcmdlKGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmRydl91bnVzZWQsCisJCQkgIG1tYnVmZmVyX3QgKnJlc3VsdCwKKwkJCSAgY29uc3QgY2hhciAqcGF0aF91bnVzZWQsCisJCQkgIG1tZmlsZV90ICpvcmlnLCBjb25zdCBjaGFyICpvcmlnX25hbWUsCisJCQkgIG1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCSAgbW1maWxlX3QgKnNyYzIsIGNvbnN0IGNoYXIgKm5hbWUyLAorCQkJICBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2Vfb3B0aW9ucyAqb3B0cywKKwkJCSAgaW50IG1hcmtlcl9zaXplKQoreworCS8qIFVzZSB1bmlvbiBmYXZvciAqLworCXN0cnVjdCBsbF9tZXJnZV9vcHRpb25zIG87CisJYXNzZXJ0KG9wdHMpOworCW8gPSAqb3B0czsKKwlvLnZhcmlhbnQgPSBYRExfTUVSR0VfRkFWT1JfVU5JT047CisJcmV0dXJuIGxsX3hkbF9tZXJnZShkcnZfdW51c2VkLCByZXN1bHQsIHBhdGhfdW51c2VkLAorCQkJICAgIG9yaWcsIE5VTEwsIHNyYzEsIE5VTEwsIHNyYzIsIE5VTEwsCisJCQkgICAgJm8sIG1hcmtlcl9zaXplKTsKK30KKworI2RlZmluZSBMTF9CSU5BUllfTUVSR0UgMAorI2RlZmluZSBMTF9URVhUX01FUkdFIDEKKyNkZWZpbmUgTExfVU5JT05fTUVSR0UgMgorc3RhdGljIHN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgbGxfbWVyZ2VfZHJ2W10gPSB7CisJeyAiYmluYXJ5IiwgImJ1aWx0LWluIGJpbmFyeSBtZXJnZSIsIGxsX2JpbmFyeV9tZXJnZSB9LAorCXsgInRleHQiLCAiYnVpbHQtaW4gMy13YXkgdGV4dCBtZXJnZSIsIGxsX3hkbF9tZXJnZSB9LAorCXsgInVuaW9uIiwgImJ1aWx0LWluIHVuaW9uIG1lcmdlIiwgbGxfdW5pb25fbWVyZ2UgfSwKK307CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV90ZW1wKG1tZmlsZV90ICpzcmMsIGNoYXIgKnBhdGgsIHNpemVfdCBsZW4pCit7CisJaW50IGZkOworCisJeHNucHJpbnRmKHBhdGgsIGxlbiwgIi5tZXJnZV9maWxlX1hYWFhYWCIpOworCWZkID0geG1rc3RlbXAocGF0aCk7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHNyYy0+cHRyLCBzcmMtPnNpemUpICE9IHNyYy0+c2l6ZSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gd3JpdGUgdGVtcC1maWxlIik7CisJY2xvc2UoZmQpOworfQorCisvKgorICogVXNlciBkZWZpbmVkIGxvdy1sZXZlbCBtZXJnZSBkcml2ZXIgc3VwcG9ydC4KKyAqLworc3RhdGljIGludCBsbF9leHRfbWVyZ2UoY29uc3Qgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqZm4sCisJCQltbWJ1ZmZlcl90ICpyZXN1bHQsCisJCQljb25zdCBjaGFyICpwYXRoLAorCQkJbW1maWxlX3QgKm9yaWcsIGNvbnN0IGNoYXIgKm9yaWdfbmFtZSwKKwkJCW1tZmlsZV90ICpzcmMxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCW1tZmlsZV90ICpzcmMyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCWNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzLAorCQkJaW50IG1hcmtlcl9zaXplKQoreworCWNoYXIgdGVtcFs0XVs1MF07CisJc3RydWN0IHN0cmJ1ZiBjbWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmX2V4cGFuZF9kaWN0X2VudHJ5IGRpY3RbNl07CisJc3RydWN0IHN0cmJ1ZiBwYXRoX3NxID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqYXJnc1tdID0geyBOVUxMLCBOVUxMIH07CisJaW50IHN0YXR1cywgZmQsIGk7CisJc3RydWN0IHN0YXQgc3Q7CisJYXNzZXJ0KG9wdHMpOworCisJc3FfcXVvdGVfYnVmKCZwYXRoX3NxLCBwYXRoKTsKKwlkaWN0WzBdLnBsYWNlaG9sZGVyID0gIk8iOyBkaWN0WzBdLnZhbHVlID0gdGVtcFswXTsKKwlkaWN0WzFdLnBsYWNlaG9sZGVyID0gIkEiOyBkaWN0WzFdLnZhbHVlID0gdGVtcFsxXTsKKwlkaWN0WzJdLnBsYWNlaG9sZGVyID0gIkIiOyBkaWN0WzJdLnZhbHVlID0gdGVtcFsyXTsKKwlkaWN0WzNdLnBsYWNlaG9sZGVyID0gIkwiOyBkaWN0WzNdLnZhbHVlID0gdGVtcFszXTsKKwlkaWN0WzRdLnBsYWNlaG9sZGVyID0gIlAiOyBkaWN0WzRdLnZhbHVlID0gcGF0aF9zcS5idWY7CisJZGljdFs1XS5wbGFjZWhvbGRlciA9IE5VTEw7IGRpY3RbNV0udmFsdWUgPSBOVUxMOworCisJaWYgKGZuLT5jbWRsaW5lID09IE5VTEwpCisJCWRpZSgiY3VzdG9tIG1lcmdlIGRyaXZlciAlcyBsYWNrcyBjb21tYW5kIGxpbmUuIiwgZm4tPm5hbWUpOworCisJcmVzdWx0LT5wdHIgPSBOVUxMOworCXJlc3VsdC0+c2l6ZSA9IDA7CisJY3JlYXRlX3RlbXAob3JpZywgdGVtcFswXSwgc2l6ZW9mKHRlbXBbMF0pKTsKKwljcmVhdGVfdGVtcChzcmMxLCB0ZW1wWzFdLCBzaXplb2YodGVtcFsxXSkpOworCWNyZWF0ZV90ZW1wKHNyYzIsIHRlbXBbMl0sIHNpemVvZih0ZW1wWzJdKSk7CisJeHNucHJpbnRmKHRlbXBbM10sIHNpemVvZih0ZW1wWzNdKSwgIiVkIiwgbWFya2VyX3NpemUpOworCisJc3RyYnVmX2V4cGFuZCgmY21kLCBmbi0+Y21kbGluZSwgc3RyYnVmX2V4cGFuZF9kaWN0X2NiLCAmZGljdCk7CisKKwlhcmdzWzBdID0gY21kLmJ1ZjsKKwlzdGF0dXMgPSBydW5fY29tbWFuZF92X29wdChhcmdzLCBSVU5fVVNJTkdfU0hFTEwpOworCWZkID0gb3Blbih0ZW1wWzFdLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZ290byBiYWQ7CisJaWYgKGZzdGF0KGZkLCAmc3QpKQorCQlnb3RvIGNsb3NlX2JhZDsKKwlyZXN1bHQtPnNpemUgPSBzdC5zdF9zaXplOworCXJlc3VsdC0+cHRyID0geG1hbGxvYyhyZXN1bHQtPnNpemUgKyAxKTsKKwlpZiAocmVhZF9pbl9mdWxsKGZkLCByZXN1bHQtPnB0ciwgcmVzdWx0LT5zaXplKSAhPSByZXN1bHQtPnNpemUpIHsKKwkJZnJlZShyZXN1bHQtPnB0cik7CisJCXJlc3VsdC0+cHRyID0gTlVMTDsKKwkJcmVzdWx0LT5zaXplID0gMDsKKwl9CisgY2xvc2VfYmFkOgorCWNsb3NlKGZkKTsKKyBiYWQ6CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJdW5saW5rX29yX3dhcm4odGVtcFtpXSk7CisJc3RyYnVmX3JlbGVhc2UoJmNtZCk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGhfc3EpOworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qCisgKiBtZXJnZS5kZWZhdWx0IGFuZCBtZXJnZS5kcml2ZXIgY29uZmlndXJhdGlvbiBpdGVtcworICovCitzdGF0aWMgc3RydWN0IGxsX21lcmdlX2RyaXZlciAqbGxfdXNlcl9tZXJnZSwgKipsbF91c2VyX21lcmdlX3RhaWw7CitzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9sbF9tZXJnZTsKKworc3RhdGljIGludCByZWFkX21lcmdlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpmbjsKKwljb25zdCBjaGFyICprZXksICpuYW1lOworCWludCBuYW1lbGVuOworCisJaWYgKCFzdHJjbXAodmFyLCAibWVyZ2UuZGVmYXVsdCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRlZmF1bHRfbGxfbWVyZ2UsIHZhciwgdmFsdWUpOworCisJLyoKKwkgKiBXZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gYW55dGhpbmcgYnV0ICJtZXJnZS48bmFtZT4udmFyaWFibGUiOworCSAqIGVzcGVjaWFsbHksIHdlIGRvIG5vdCB3YW50IHRvIGxvb2sgYXQgdmFyaWFibGVzIHN1Y2ggYXMKKwkgKiAibWVyZ2Uuc3VtbWFyeSIsICJtZXJnZS50b29sIiwgYW5kICJtZXJnZS52ZXJib3NpdHkiLgorCSAqLworCWlmIChwYXJzZV9jb25maWdfa2V5KHZhciwgIm1lcmdlIiwgJm5hbWUsICZuYW1lbGVuLCAma2V5KSA8IDAgfHwgIW5hbWUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBGaW5kIGV4aXN0aW5nIG9uZSBhcyB3ZSBtaWdodCBiZSBwcm9jZXNzaW5nIG1lcmdlLjxuYW1lPi52YXIyCisJICogYWZ0ZXIgc2VlaW5nIG1lcmdlLjxuYW1lPi52YXIxLgorCSAqLworCWZvciAoZm4gPSBsbF91c2VyX21lcmdlOyBmbjsgZm4gPSBmbi0+bmV4dCkKKwkJaWYgKCFzdHJuY21wKGZuLT5uYW1lLCBuYW1lLCBuYW1lbGVuKSAmJiAhZm4tPm5hbWVbbmFtZWxlbl0pCisJCQlicmVhazsKKwlpZiAoIWZuKSB7CisJCWZuID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxsX21lcmdlX2RyaXZlcikpOworCQlmbi0+bmFtZSA9IHhtZW1kdXB6KG5hbWUsIG5hbWVsZW4pOworCQlmbi0+Zm4gPSBsbF9leHRfbWVyZ2U7CisJCSpsbF91c2VyX21lcmdlX3RhaWwgPSBmbjsKKwkJbGxfdXNlcl9tZXJnZV90YWlsID0gJihmbi0+bmV4dCk7CisJfQorCisJaWYgKCFzdHJjbXAoIm5hbWUiLCBrZXkpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmZuLT5kZXNjcmlwdGlvbiwgdmFyLCB2YWx1ZSk7CisKKwlpZiAoIXN0cmNtcCgiZHJpdmVyIiwga2V5KSkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGVycm9yKCIlczogbGFja3MgdmFsdWUiLCB2YXIpOworCQkvKgorCQkgKiBtZXJnZS48bmFtZT4uZHJpdmVyIHNwZWNpZmllcyB0aGUgY29tbWFuZCBsaW5lOgorCQkgKgorCQkgKgljb21tYW5kLWxpbmUKKwkJICoKKwkJICogVGhlIGNvbW1hbmQtbGluZSB3aWxsIGJlIGludGVycG9sYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcKKwkJICogdG9rZW5zIGFuZCBpcyBnaXZlbiB0byB0aGUgc2hlbGw6CisJCSAqCisJCSAqICAgICVPIC0gdGVtcG9yYXJ5IGZpbGUgbmFtZSBmb3IgdGhlIG1lcmdlIGJhc2UuCisJCSAqICAgICVBIC0gdGVtcG9yYXJ5IGZpbGUgbmFtZSBmb3Igb3VyIHZlcnNpb24uCisJCSAqICAgICVCIC0gdGVtcG9yYXJ5IGZpbGUgbmFtZSBmb3IgdGhlIG90aGVyIGJyYW5jaGVzJyB2ZXJzaW9uLgorCQkgKiAgICAlTCAtIGNvbmZsaWN0IG1hcmtlciBsZW5ndGgKKwkJICogICAgJVAgLSB0aGUgb3JpZ2luYWwgcGF0aCAoc2FmZWx5IHF1b3RlZCBmb3IgdGhlIHNoZWxsKQorCQkgKgorCQkgKiBUaGUgZXh0ZXJuYWwgbWVyZ2UgZHJpdmVyIHNob3VsZCB3cml0ZSB0aGUgcmVzdWx0cyBpbiB0aGUKKwkJICogZmlsZSBuYW1lZCBieSAlQSwgYW5kIHNpZ25hbCB0aGF0IGl0IGhhcyBkb25lIHdpdGggemVybyBleGl0CisJCSAqIHN0YXR1cy4KKwkJICovCisJCWZuLT5jbWRsaW5lID0geHN0cmR1cCh2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKworCWlmICghc3RyY21wKCJyZWN1cnNpdmUiLCBrZXkpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmZuLT5yZWN1cnNpdmUsIHZhciwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVfbGxfbWVyZ2Uodm9pZCkKK3sKKwlpZiAobGxfdXNlcl9tZXJnZV90YWlsKQorCQlyZXR1cm47CisJbGxfdXNlcl9tZXJnZV90YWlsID0gJmxsX3VzZXJfbWVyZ2U7CisJZ2l0X2NvbmZpZyhyZWFkX21lcmdlX2NvbmZpZywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpmaW5kX2xsX21lcmdlX2RyaXZlcihjb25zdCBjaGFyICptZXJnZV9hdHRyKQoreworCXN0cnVjdCBsbF9tZXJnZV9kcml2ZXIgKmZuOworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGk7CisKKwlpbml0aWFsaXplX2xsX21lcmdlKCk7CisKKwlpZiAoQVRUUl9UUlVFKG1lcmdlX2F0dHIpKQorCQlyZXR1cm4gJmxsX21lcmdlX2RydltMTF9URVhUX01FUkdFXTsKKwllbHNlIGlmIChBVFRSX0ZBTFNFKG1lcmdlX2F0dHIpKQorCQlyZXR1cm4gJmxsX21lcmdlX2RydltMTF9CSU5BUllfTUVSR0VdOworCWVsc2UgaWYgKEFUVFJfVU5TRVQobWVyZ2VfYXR0cikpIHsKKwkJaWYgKCFkZWZhdWx0X2xsX21lcmdlKQorCQkJcmV0dXJuICZsbF9tZXJnZV9kcnZbTExfVEVYVF9NRVJHRV07CisJCWVsc2UKKwkJCW5hbWUgPSBkZWZhdWx0X2xsX21lcmdlOworCX0KKwllbHNlCisJCW5hbWUgPSBtZXJnZV9hdHRyOworCisJZm9yIChmbiA9IGxsX3VzZXJfbWVyZ2U7IGZuOyBmbiA9IGZuLT5uZXh0KQorCQlpZiAoIXN0cmNtcChmbi0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gZm47CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsbF9tZXJnZV9kcnYpOyBpKyspCisJCWlmICghc3RyY21wKGxsX21lcmdlX2RydltpXS5uYW1lLCBuYW1lKSkKKwkJCXJldHVybiAmbGxfbWVyZ2VfZHJ2W2ldOworCisJLyogZGVmYXVsdCB0byB0aGUgMy13YXkgKi8KKwlyZXR1cm4gJmxsX21lcmdlX2RydltMTF9URVhUX01FUkdFXTsKK30KKworc3RhdGljIGludCBnaXRfcGF0aF9jaGVja19tZXJnZShjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgY2hlY2tbMl0pCit7CisJaWYgKCFjaGVja1swXS5hdHRyKSB7CisJCWNoZWNrWzBdLmF0dHIgPSBnaXRfYXR0cigibWVyZ2UiKTsKKwkJY2hlY2tbMV0uYXR0ciA9IGdpdF9hdHRyKCJjb25mbGljdC1tYXJrZXItc2l6ZSIpOworCX0KKwlyZXR1cm4gZ2l0X2NoZWNrX2F0dHIocGF0aCwgMiwgY2hlY2spOworfQorCitzdGF0aWMgdm9pZCBub3JtYWxpemVfZmlsZShtbWZpbGVfdCAqbW0sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBzdHJidWYgPSBTVFJCVUZfSU5JVDsKKwlpZiAocmVub3JtYWxpemVfYnVmZmVyKHBhdGgsIG1tLT5wdHIsIG1tLT5zaXplLCAmc3RyYnVmKSkgeworCQlmcmVlKG1tLT5wdHIpOworCQltbS0+c2l6ZSA9IHN0cmJ1Zi5sZW47CisJCW1tLT5wdHIgPSBzdHJidWZfZGV0YWNoKCZzdHJidWYsIE5VTEwpOworCX0KK30KKworaW50IGxsX21lcmdlKG1tYnVmZmVyX3QgKnJlc3VsdF9idWYsCisJICAgICBjb25zdCBjaGFyICpwYXRoLAorCSAgICAgbW1maWxlX3QgKmFuY2VzdG9yLCBjb25zdCBjaGFyICphbmNlc3Rvcl9sYWJlbCwKKwkgICAgIG1tZmlsZV90ICpvdXJzLCBjb25zdCBjaGFyICpvdXJfbGFiZWwsCisJICAgICBtbWZpbGVfdCAqdGhlaXJzLCBjb25zdCBjaGFyICp0aGVpcl9sYWJlbCwKKwkgICAgIGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zICpvcHRzKQoreworCXN0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgY2hlY2tbMl07CisJc3RhdGljIGNvbnN0IHN0cnVjdCBsbF9tZXJnZV9vcHRpb25zIGRlZmF1bHRfb3B0czsKKwljb25zdCBjaGFyICpsbF9kcml2ZXJfbmFtZSA9IE5VTEw7CisJaW50IG1hcmtlcl9zaXplID0gREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRTsKKwljb25zdCBzdHJ1Y3QgbGxfbWVyZ2VfZHJpdmVyICpkcml2ZXI7CisKKwlpZiAoIW9wdHMpCisJCW9wdHMgPSAmZGVmYXVsdF9vcHRzOworCisJaWYgKG9wdHMtPnJlbm9ybWFsaXplKSB7CisJCW5vcm1hbGl6ZV9maWxlKGFuY2VzdG9yLCBwYXRoKTsKKwkJbm9ybWFsaXplX2ZpbGUob3VycywgcGF0aCk7CisJCW5vcm1hbGl6ZV9maWxlKHRoZWlycywgcGF0aCk7CisJfQorCWlmICghZ2l0X3BhdGhfY2hlY2tfbWVyZ2UocGF0aCwgY2hlY2spKSB7CisJCWxsX2RyaXZlcl9uYW1lID0gY2hlY2tbMF0udmFsdWU7CisJCWlmIChjaGVja1sxXS52YWx1ZSkgeworCQkJbWFya2VyX3NpemUgPSBhdG9pKGNoZWNrWzFdLnZhbHVlKTsKKwkJCWlmIChtYXJrZXJfc2l6ZSA8PSAwKQorCQkJCW1hcmtlcl9zaXplID0gREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRTsKKwkJfQorCX0KKwlkcml2ZXIgPSBmaW5kX2xsX21lcmdlX2RyaXZlcihsbF9kcml2ZXJfbmFtZSk7CisJaWYgKG9wdHMtPnZpcnR1YWxfYW5jZXN0b3IgJiYgZHJpdmVyLT5yZWN1cnNpdmUpCisJCWRyaXZlciA9IGZpbmRfbGxfbWVyZ2VfZHJpdmVyKGRyaXZlci0+cmVjdXJzaXZlKTsKKwlyZXR1cm4gZHJpdmVyLT5mbihkcml2ZXIsIHJlc3VsdF9idWYsIHBhdGgsIGFuY2VzdG9yLCBhbmNlc3Rvcl9sYWJlbCwKKwkJCSAgb3Vycywgb3VyX2xhYmVsLCB0aGVpcnMsIHRoZWlyX2xhYmVsLAorCQkJICBvcHRzLCBtYXJrZXJfc2l6ZSk7Cit9CisKK2ludCBsbF9tZXJnZV9tYXJrZXJfc2l6ZShjb25zdCBjaGFyICpwYXRoKQoreworCXN0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHJfY2hlY2sgY2hlY2s7CisJaW50IG1hcmtlcl9zaXplID0gREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRTsKKworCWlmICghY2hlY2suYXR0cikKKwkJY2hlY2suYXR0ciA9IGdpdF9hdHRyKCJjb25mbGljdC1tYXJrZXItc2l6ZSIpOworCWlmICghZ2l0X2NoZWNrX2F0dHIocGF0aCwgMSwgJmNoZWNrKSAmJiBjaGVjay52YWx1ZSkgeworCQltYXJrZXJfc2l6ZSA9IGF0b2koY2hlY2sudmFsdWUpOworCQlpZiAobWFya2VyX3NpemUgPD0gMCkKKwkJCW1hcmtlcl9zaXplID0gREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRTsKKwl9CisJcmV0dXJuIG1hcmtlcl9zaXplOworfQpkaWZmIC0tZ2l0IGEvbGwtbWVyZ2UuaCBiL2xsLW1lcmdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0YTMxZgotLS0gL2Rldi9udWxsCisrKyBiL2xsLW1lcmdlLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIExvdyBsZXZlbCAzLXdheSBpbi1jb3JlIGZpbGUgbWVyZ2UuCisgKi8KKworI2lmbmRlZiBMTF9NRVJHRV9ICisjZGVmaW5lIExMX01FUkdFX0gKKworc3RydWN0IGxsX21lcmdlX29wdGlvbnMgeworCXVuc2lnbmVkIHZpcnR1YWxfYW5jZXN0b3IgOiAxOworCXVuc2lnbmVkIHZhcmlhbnQgOiAyOwkvKiBmYXZvciBvdXJzLCBmYXZvciB0aGVpcnMsIG9yIHVuaW9uIG1lcmdlICovCisJdW5zaWduZWQgcmVub3JtYWxpemUgOiAxOworCWxvbmcgeGRsX29wdHM7Cit9OworCitpbnQgbGxfbWVyZ2UobW1idWZmZXJfdCAqcmVzdWx0X2J1ZiwKKwkgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJICAgICBtbWZpbGVfdCAqYW5jZXN0b3IsIGNvbnN0IGNoYXIgKmFuY2VzdG9yX2xhYmVsLAorCSAgICAgbW1maWxlX3QgKm91cnMsIGNvbnN0IGNoYXIgKm91cl9sYWJlbCwKKwkgICAgIG1tZmlsZV90ICp0aGVpcnMsIGNvbnN0IGNoYXIgKnRoZWlyX2xhYmVsLAorCSAgICAgY29uc3Qgc3RydWN0IGxsX21lcmdlX29wdGlvbnMgKm9wdHMpOworCitpbnQgbGxfbWVyZ2VfbWFya2VyX3NpemUoY29uc3QgY2hhciAqcGF0aCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbG9ja2ZpbGUuYyBiL2xvY2tmaWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkMDU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2xvY2tmaWxlLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUsIEp1bmlvIEMgSGFtYW5vCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKworLyoKKyAqIHBhdGggPSBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIG5hbWUKKyAqCisgKiBSZW1vdmUgdGhlIGxhc3QgcGF0aCBuYW1lIGVsZW1lbnQgZnJvbSBwYXRoIChsZWF2aW5nIHRoZSBwcmVjZWRpbmcKKyAqICIvIiwgaWYgYW55KS4gIElmIHBhdGggaXMgZW1wdHkgb3IgdGhlIHJvb3QgZGlyZWN0b3J5ICgiLyIpLCBzZXQKKyAqIHBhdGggdG8gdGhlIGVtcHR5IHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQgdHJpbV9sYXN0X3BhdGhfY29tcG9uZW50KHN0cnVjdCBzdHJidWYgKnBhdGgpCit7CisJaW50IGkgPSBwYXRoLT5sZW47CisKKwkvKiBiYWNrIHVwIHBhc3QgdHJhaWxpbmcgc2xhc2hlcywgaWYgYW55ICovCisJd2hpbGUgKGkgJiYgcGF0aC0+YnVmW2kgLSAxXSA9PSAnLycpCisJCWktLTsKKworCS8qCisJICogdGhlbiBnbyBiYWNrd2FyZHMgdW50aWwgYSBzbGFzaCwgb3IgdGhlIGJlZ2lubmluZyBvZiB0aGUKKwkgKiBzdHJpbmcKKwkgKi8KKwl3aGlsZSAoaSAmJiBwYXRoLT5idWZbaSAtIDFdICE9ICcvJykKKwkJaS0tOworCisJc3RyYnVmX3NldGxlbihwYXRoLCBpKTsKK30KKworCisvKiBXZSBhbGxvdyAicmVjdXJzaXZlIiBzeW1ib2xpYyBsaW5rcy4gT25seSB3aXRoaW4gcmVhc29uLCB0aG91Z2ggKi8KKyNkZWZpbmUgTUFYREVQVEggNQorCisvKgorICogcGF0aCBjb250YWlucyBhIHBhdGggdGhhdCBtaWdodCBiZSBhIHN5bWxpbmsuCisgKgorICogSWYgcGF0aCBpcyBhIHN5bWxpbmssIGF0dGVtcHQgdG8gb3ZlcndyaXRlIGl0IHdpdGggYSBwYXRoIHRvIHRoZQorICogcmVhbCBmaWxlIG9yIGRpcmVjdG9yeSAod2hpY2ggbWF5IG9yIG1heSBub3QgZXhpc3QpLCBmb2xsb3dpbmcgYQorICogY2hhaW4gb2Ygc3ltbGlua3MgaWYgbmVjZXNzYXJ5LiAgT3RoZXJ3aXNlLCBsZWF2ZSBwYXRoIHVubW9kaWZpZWQuCisgKgorICogVGhpcyBpcyBhIGJlc3QtZWZmb3J0IHJvdXRpbmUuICBJZiBhbiBlcnJvciBvY2N1cnMsIHBhdGggd2lsbAorICogZWl0aGVyIGJlIGxlZnQgdW5tb2RpZmllZCBvciB3aWxsIG5hbWUgYSBkaWZmZXJlbnQgc3ltbGluayBpbiBhCisgKiBzeW1saW5rIGNoYWluIHRoYXQgc3RhcnRlZCB3aXRoIHRoZSBvcmlnaW5hbCBwYXRoLgorICovCitzdGF0aWMgdm9pZCByZXNvbHZlX3N5bWxpbmsoc3RydWN0IHN0cmJ1ZiAqcGF0aCkKK3sKKwlpbnQgZGVwdGggPSBNQVhERVBUSDsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBsaW5rID0gU1RSQlVGX0lOSVQ7CisKKwl3aGlsZSAoZGVwdGgtLSkgeworCQlpZiAoc3RyYnVmX3JlYWRsaW5rKCZsaW5rLCBwYXRoLT5idWYsIHBhdGgtPmxlbikgPCAwKQorCQkJYnJlYWs7CisKKwkJaWYgKGlzX2Fic29sdXRlX3BhdGgobGluay5idWYpKQorCQkJLyogYWJzb2x1dGUgcGF0aCBzaW1wbHkgcmVwbGFjZXMgcCAqLworCQkJc3RyYnVmX3Jlc2V0KHBhdGgpOworCQllbHNlCisJCQkvKgorCQkJICogbGluayBpcyBhIHJlbGF0aXZlIHBhdGgsIHNvIHJlcGxhY2UgdGhlCisJCQkgKiBsYXN0IGVsZW1lbnQgb2YgcCB3aXRoIGl0LgorCQkJICovCisJCQl0cmltX2xhc3RfcGF0aF9jb21wb25lbnQocGF0aCk7CisKKwkJc3RyYnVmX2FkZGJ1ZihwYXRoLCAmbGluayk7CisJfQorCXN0cmJ1Zl9yZXNldCgmbGluayk7Cit9CisKKy8qIE1ha2Ugc3VyZSBlcnJubyBjb250YWlucyBhIG1lYW5pbmdmdWwgdmFsdWUgb24gZXJyb3IgKi8KK3N0YXRpYyBpbnQgbG9ja19maWxlKHN0cnVjdCBsb2NrX2ZpbGUgKmxrLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgZmxhZ3MpCit7CisJaW50IGZkOworCXN0cnVjdCBzdHJidWYgZmlsZW5hbWUgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRzdHIoJmZpbGVuYW1lLCBwYXRoKTsKKwlpZiAoIShmbGFncyAmIExPQ0tfTk9fREVSRUYpKQorCQlyZXNvbHZlX3N5bWxpbmsoJmZpbGVuYW1lKTsKKworCXN0cmJ1Zl9hZGRzdHIoJmZpbGVuYW1lLCBMT0NLX1NVRkZJWCk7CisJZmQgPSBjcmVhdGVfdGVtcGZpbGUoJmxrLT50ZW1wZmlsZSwgZmlsZW5hbWUuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmZmlsZW5hbWUpOworCXJldHVybiBmZDsKK30KKworLyoKKyAqIENvbnN0YW50cyBkZWZpbmluZyB0aGUgZ2FwcyBiZXR3ZWVuIGF0dGVtcHRzIHRvIGxvY2sgYSBmaWxlLiBUaGUKKyAqIGZpcnN0IGJhY2tvZmYgcGVyaW9kIGlzIGFwcHJveGltYXRlbHkgSU5JVElBTF9CQUNLT0ZGX01TCisgKiBtaWxsaXNlY29uZHMuIFRoZSBsb25nZXN0IGJhY2tvZmYgcGVyaW9kIGlzIGFwcHJveGltYXRlbHkKKyAqIChCQUNLT0ZGX01BWF9NVUxUSVBMSUVSICogSU5JVElBTF9CQUNLT0ZGX01TKSBtaWxsaXNlY29uZHMuCisgKi8KKyNkZWZpbmUgSU5JVElBTF9CQUNLT0ZGX01TIDFMCisjZGVmaW5lIEJBQ0tPRkZfTUFYX01VTFRJUExJRVIgMTAwMAorCisvKgorICogVHJ5IGxvY2tpbmcgcGF0aCwgcmV0cnlpbmcgd2l0aCBxdWFkcmF0aWMgYmFja29mZiBmb3IgYXQgbGVhc3QKKyAqIHRpbWVvdXRfbXMgbWlsbGlzZWNvbmRzLiBJZiB0aW1lb3V0X21zIGlzIDAsIHRyeSBsb2NraW5nIHRoZSBmaWxlCisgKiBleGFjdGx5IG9uY2UuIElmIHRpbWVvdXRfbXMgaXMgLTEsIHRyeSBpbmRlZmluaXRlbHkuCisgKi8KK3N0YXRpYyBpbnQgbG9ja19maWxlX3RpbWVvdXQoc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgIGludCBmbGFncywgbG9uZyB0aW1lb3V0X21zKQoreworCWludCBuID0gMTsKKwlpbnQgbXVsdGlwbGllciA9IDE7CisJbG9uZyByZW1haW5pbmdfbXMgPSAwOworCXN0YXRpYyBpbnQgcmFuZG9tX2luaXRpYWxpemVkID0gMDsKKworCWlmICh0aW1lb3V0X21zID09IDApCisJCXJldHVybiBsb2NrX2ZpbGUobGssIHBhdGgsIGZsYWdzKTsKKworCWlmICghcmFuZG9tX2luaXRpYWxpemVkKSB7CisJCXNyYW5kKCh1bnNpZ25lZCBpbnQpZ2V0cGlkKCkpOworCQlyYW5kb21faW5pdGlhbGl6ZWQgPSAxOworCX0KKworCWlmICh0aW1lb3V0X21zID4gMCkKKwkJcmVtYWluaW5nX21zID0gdGltZW91dF9tczsKKworCXdoaWxlICgxKSB7CisJCWxvbmcgYmFja29mZl9tcywgd2FpdF9tczsKKwkJaW50IGZkOworCisJCWZkID0gbG9ja19maWxlKGxrLCBwYXRoLCBmbGFncyk7CisKKwkJaWYgKGZkID49IDApCisJCQlyZXR1cm4gZmQ7IC8qIHN1Y2Nlc3MgKi8KKwkJZWxzZSBpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJcmV0dXJuIC0xOyAvKiBmYWlsdXJlIG90aGVyIHRoYW4gbG9jayBoZWxkICovCisJCWVsc2UgaWYgKHRpbWVvdXRfbXMgPiAwICYmIHJlbWFpbmluZ19tcyA8PSAwKQorCQkJcmV0dXJuIC0xOyAvKiBmYWlsdXJlIGR1ZSB0byB0aW1lb3V0ICovCisKKwkJYmFja29mZl9tcyA9IG11bHRpcGxpZXIgKiBJTklUSUFMX0JBQ0tPRkZfTVM7CisJCS8qIGJhY2sgb2ZmIGZvciBiZXR3ZWVuIDAuNzUqYmFja29mZl9tcyBhbmQgMS4yNSpiYWNrb2ZmX21zICovCisJCXdhaXRfbXMgPSAoNzUwICsgcmFuZCgpICUgNTAwKSAqIGJhY2tvZmZfbXMgLyAxMDAwOworCQlzbGVlcF9taWxsaXNlYyh3YWl0X21zKTsKKwkJcmVtYWluaW5nX21zIC09IHdhaXRfbXM7CisKKwkJLyogUmVjdXJzaW9uOiAobisxKV4yID0gbl4yICsgMm4gKyAxICovCisJCW11bHRpcGxpZXIgKz0gMipuICsgMTsKKwkJaWYgKG11bHRpcGxpZXIgPiBCQUNLT0ZGX01BWF9NVUxUSVBMSUVSKQorCQkJbXVsdGlwbGllciA9IEJBQ0tPRkZfTUFYX01VTFRJUExJRVI7CisJCWVsc2UKKwkJCW4rKzsKKwl9Cit9CisKK3ZvaWQgdW5hYmxlX3RvX2xvY2tfbWVzc2FnZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZXJyLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJaWYgKGVyciA9PSBFRVhJU1QpIHsKKwkJc3RyYnVmX2FkZGYoYnVmLCAiVW5hYmxlIHRvIGNyZWF0ZSAnJXMubG9jayc6ICVzLlxuXG4iCisJCSAgICAiSWYgbm8gb3RoZXIgZ2l0IHByb2Nlc3MgaXMgY3VycmVudGx5IHJ1bm5pbmcsIHRoaXMgcHJvYmFibHkgbWVhbnMgYVxuIgorCQkgICAgImdpdCBwcm9jZXNzIGNyYXNoZWQgaW4gdGhpcyByZXBvc2l0b3J5IGVhcmxpZXIuIE1ha2Ugc3VyZSBubyBvdGhlciBnaXRcbiIKKwkJICAgICJwcm9jZXNzIGlzIHJ1bm5pbmcgYW5kIHJlbW92ZSB0aGUgZmlsZSBtYW51YWxseSB0byBjb250aW51ZS4iLAorCQkJICAgIGFic29sdXRlX3BhdGgocGF0aCksIHN0cmVycm9yKGVycikpOworCX0gZWxzZQorCQlzdHJidWZfYWRkZihidWYsICJVbmFibGUgdG8gY3JlYXRlICclcy5sb2NrJzogJXMiLAorCQkJICAgIGFic29sdXRlX3BhdGgocGF0aCksIHN0cmVycm9yKGVycikpOworfQorCitOT1JFVFVSTiB2b2lkIHVuYWJsZV90b19sb2NrX2RpZShjb25zdCBjaGFyICpwYXRoLCBpbnQgZXJyKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwl1bmFibGVfdG9fbG9ja19tZXNzYWdlKHBhdGgsIGVyciwgJmJ1Zik7CisJZGllKCIlcyIsIGJ1Zi5idWYpOworfQorCisvKiBUaGlzIHNob3VsZCByZXR1cm4gYSBtZWFuaW5nZnVsIGVycm5vIG9uIGZhaWx1cmUgKi8KK2ludCBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlX3RpbWVvdXQoc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICAgICAgaW50IGZsYWdzLCBsb25nIHRpbWVvdXRfbXMpCit7CisJaW50IGZkID0gbG9ja19maWxlX3RpbWVvdXQobGssIHBhdGgsIGZsYWdzLCB0aW1lb3V0X21zKTsKKwlpZiAoZmQgPCAwICYmIChmbGFncyAmIExPQ0tfRElFX09OX0VSUk9SKSkKKwkJdW5hYmxlX3RvX2xvY2tfZGllKHBhdGgsIGVycm5vKTsKKwlyZXR1cm4gZmQ7Cit9CisKK2NoYXIgKmdldF9sb2NrZWRfZmlsZV9wYXRoKHN0cnVjdCBsb2NrX2ZpbGUgKmxrKQoreworCXN0cnVjdCBzdHJidWYgcmV0ID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkc3RyKCZyZXQsIGdldF90ZW1wZmlsZV9wYXRoKCZsay0+dGVtcGZpbGUpKTsKKwlpZiAocmV0LmxlbiA8PSBMT0NLX1NVRkZJWF9MRU4gfHwKKwkgICAgc3RyY21wKHJldC5idWYgKyByZXQubGVuIC0gTE9DS19TVUZGSVhfTEVOLCBMT0NLX1NVRkZJWCkpCisJCWRpZSgiQlVHOiBnZXRfbG9ja2VkX2ZpbGVfcGF0aCgpIGNhbGxlZCBmb3IgbWFsZm9ybWVkIGxvY2sgb2JqZWN0Iik7CisJLyogcmVtb3ZlICIubG9jayI6ICovCisJc3RyYnVmX3NldGxlbigmcmV0LCByZXQubGVuIC0gTE9DS19TVUZGSVhfTEVOKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmcmV0LCBOVUxMKTsKK30KKworaW50IGNvbW1pdF9sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGspCit7CisJY2hhciAqcmVzdWx0X3BhdGggPSBnZXRfbG9ja2VkX2ZpbGVfcGF0aChsayk7CisKKwlpZiAoY29tbWl0X2xvY2tfZmlsZV90byhsaywgcmVzdWx0X3BhdGgpKSB7CisJCWludCBzYXZlX2Vycm5vID0gZXJybm87CisJCWZyZWUocmVzdWx0X3BhdGgpOworCQllcnJubyA9IHNhdmVfZXJybm87CisJCXJldHVybiAtMTsKKwl9CisJZnJlZShyZXN1bHRfcGF0aCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9sb2NrZmlsZS5oIGIvbG9ja2ZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDMwMTkzCi0tLSAvZGV2L251bGwKKysrIGIvbG9ja2ZpbGUuaApAQCAtMCwwICsxLDI4OSBAQAorI2lmbmRlZiBMT0NLRklMRV9ICisjZGVmaW5lIExPQ0tGSUxFX0gKKworLyoKKyAqIEZpbGUgd3JpdGUtbG9ja3MgYXMgdXNlZCBieSBHaXQuCisgKgorICogVGhlIGxvY2tmaWxlIEFQSSBzZXJ2ZXMgdHdvIHB1cnBvc2VzOgorICoKKyAqICogTXV0dWFsIGV4Y2x1c2lvbiBhbmQgYXRvbWljIGZpbGUgdXBkYXRlcy4gV2hlbiB3ZSB3YW50IHRvIGNoYW5nZQorICogICBhIGZpbGUsIHdlIGNyZWF0ZSBhIGxvY2tmaWxlIGA8ZmlsZW5hbWU+LmxvY2tgLCB3cml0ZSB0aGUgbmV3CisgKiAgIGZpbGUgY29udGVudHMgaW50byBpdCwgYW5kIHRoZW4gcmVuYW1lIHRoZSBsb2NrZmlsZSB0byBpdHMgZmluYWwKKyAqICAgZGVzdGluYXRpb24gYDxmaWxlbmFtZT5gLiBXZSBjcmVhdGUgdGhlIGA8ZmlsZW5hbWU+LmxvY2tgIGZpbGUKKyAqICAgd2l0aCBgT19DUkVBVHxPX0VYQ0xgIHNvIHRoYXQgd2UgY2FuIG5vdGljZSBhbmQgZmFpbCBpZiBzb21lYm9keQorICogICBlbHNlIGhhcyBhbHJlYWR5IGxvY2tlZCB0aGUgZmlsZSwgdGhlbiBhdG9taWNhbGx5IHJlbmFtZSB0aGUKKyAqICAgbG9ja2ZpbGUgdG8gaXRzIGZpbmFsIGRlc3RpbmF0aW9uIHRvIGNvbW1pdCB0aGUgY2hhbmdlcyBhbmQKKyAqICAgdW5sb2NrIHRoZSBmaWxlLgorICoKKyAqICogQXV0b21hdGljIGNydWZ0IHJlbW92YWwuIElmIHRoZSBwcm9ncmFtIGV4aXRzIGFmdGVyIHdlIGxvY2sgYQorICogICBmaWxlIGJ1dCBiZWZvcmUgdGhlIGNoYW5nZXMgaGF2ZSBiZWVuIGNvbW1pdHRlZCwgd2Ugd2FudCB0byBtYWtlCisgKiAgIHN1cmUgdGhhdCB3ZSByZW1vdmUgdGhlIGxvY2tmaWxlLiBUaGlzIGlzIGRvbmUgYnkgcmVtZW1iZXJpbmcgdGhlCisgKiAgIGxvY2tmaWxlcyB3ZSBoYXZlIGNyZWF0ZWQgaW4gYSBsaW5rZWQgbGlzdCBhbmQgc2V0dGluZyB1cCBhbgorICogICBgYXRleGl0KDMpYCBoYW5kbGVyIGFuZCBhIHNpZ25hbCBoYW5kbGVyIHRoYXQgY2xlYW4gdXAgdGhlCisgKiAgIGxvY2tmaWxlcy4gVGhpcyBtZWNoYW5pc20gZW5zdXJlcyB0aGF0IG91dHN0YW5kaW5nIGxvY2tmaWxlcyBhcmUKKyAqICAgY2xlYW5lZCB1cCBpZiB0aGUgcHJvZ3JhbSBleGl0cyAoaW5jbHVkaW5nIHdoZW4gYGRpZSgpYCBpcworICogICBjYWxsZWQpIG9yIGlmIHRoZSBwcm9ncmFtIGlzIHRlcm1pbmF0ZWQgYnkgYSBzaWduYWwuCisgKgorICogUGxlYXNlIG5vdGUgdGhhdCBsb2NrZmlsZXMgb25seSBibG9jayBvdGhlciB3cml0ZXJzLiBSZWFkZXJzIGRvIG5vdAorICogYmxvY2ssIGJ1dCB0aGV5IGFyZSBndWFyYW50ZWVkIHRvIHNlZSBlaXRoZXIgdGhlIG9sZCBjb250ZW50cyBvZgorICogdGhlIGZpbGUgb3IgdGhlIG5ldyBjb250ZW50cyBvZiB0aGUgZmlsZSAoYXNzdW1pbmcgdGhhdCB0aGUKKyAqIGZpbGVzeXN0ZW0gaW1wbGVtZW50cyBgcmVuYW1lKDIpYCBhdG9taWNhbGx5KS4KKyAqCisgKiBNb3N0IG9mIHRoZSBoZWF2eSBsaWZ0aW5nIGlzIGRvbmUgYnkgdGhlIHRlbXBmaWxlIG1vZHVsZSAoc2VlCisgKiAidGVtcGZpbGUuaCIpLgorICoKKyAqIENhbGxpbmcgc2VxdWVuY2UKKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBUaGUgY2FsbGVyOgorICoKKyAqICogQWxsb2NhdGVzIGEgYHN0cnVjdCBsb2NrX2ZpbGVgIGVpdGhlciBhcyBhIHN0YXRpYyB2YXJpYWJsZSBvciBvbgorICogICB0aGUgaGVhcCwgaW5pdGlhbGl6ZWQgdG8gemVyb3MuIE9uY2UgeW91IHVzZSB0aGUgc3RydWN0dXJlIHRvCisgKiAgIGNhbGwgdGhlIGBob2xkX2xvY2tfZmlsZV9mb3JfKigpYCBmYW1pbHkgb2YgZnVuY3Rpb25zLCBpdCBiZWxvbmdzCisgKiAgIHRvIHRoZSBsb2NrZmlsZSBzdWJzeXN0ZW0gYW5kIGl0cyBzdG9yYWdlIG11c3QgcmVtYWluIHZhbGlkCisgKiAgIHRocm91Z2hvdXQgdGhlIGxpZmUgb2YgdGhlIHByb2dyYW0gKGkuZS4geW91IGNhbm5vdCB1c2UgYW4KKyAqICAgb24tc3RhY2sgdmFyaWFibGUgdG8gaG9sZCB0aGlzIHN0cnVjdHVyZSkuCisgKgorICogKiBBdHRlbXB0cyB0byBjcmVhdGUgYSBsb2NrZmlsZSBieSBjYWxsaW5nIGBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKClgLgorICoKKyAqICogV3JpdGVzIG5ldyBjb250ZW50IGZvciB0aGUgZGVzdGluYXRpb24gZmlsZSBieSBlaXRoZXI6CisgKgorICogICAqIHdyaXRpbmcgdG8gdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSB0aGUKKyAqICAgICBgaG9sZF9sb2NrX2ZpbGVfZm9yXyooKWAgZnVuY3Rpb25zIChhbHNvIGF2YWlsYWJsZSB2aWEKKyAqICAgICBgbG9jay0+ZmRgKS4KKyAqCisgKiAgICogY2FsbGluZyBgZmRvcGVuX2xvY2tfZmlsZSgpYCB0byBnZXQgYSBgRklMRWAgcG9pbnRlciBmb3IgdGhlCisgKiAgICAgb3BlbiBmaWxlIGFuZCB3cml0aW5nIHRvIHRoZSBmaWxlIHVzaW5nIHN0ZGlvLgorICoKKyAqIFdoZW4gZmluaXNoZWQgd3JpdGluZywgdGhlIGNhbGxlciBjYW46CisgKgorICogKiBDbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGFuZCByZW5hbWUgdGhlIGxvY2tmaWxlIHRvIGl0cyBmaW5hbAorICogICBkZXN0aW5hdGlvbiBieSBjYWxsaW5nIGBjb21taXRfbG9ja19maWxlKClgIG9yCisgKiAgIGBjb21taXRfbG9ja19maWxlX3RvKClgLgorICoKKyAqICogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBhbmQgcmVtb3ZlIHRoZSBsb2NrZmlsZSBieSBjYWxsaW5nCisgKiAgIGByb2xsYmFja19sb2NrX2ZpbGUoKWAuCisgKgorICogKiBDbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpdGhvdXQgcmVtb3Zpbmcgb3IgcmVuYW1pbmcgdGhlCisgKiAgIGxvY2tmaWxlIGJ5IGNhbGxpbmcgYGNsb3NlX2xvY2tfZmlsZSgpYCwgYW5kIGxhdGVyIGNhbGwKKyAqICAgYGNvbW1pdF9sb2NrX2ZpbGUoKWAsIGBjb21taXRfbG9ja19maWxlX3RvKClgLAorICogICBgcm9sbGJhY2tfbG9ja19maWxlKClgLCBvciBgcmVvcGVuX2xvY2tfZmlsZSgpYC4KKyAqCisgKiBFdmVuIGFmdGVyIHRoZSBsb2NrZmlsZSBpcyBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2ssIHRoZQorICogYGxvY2tfZmlsZWAgb2JqZWN0IG11c3Qgbm90IGJlIGZyZWVkIG9yIGFsdGVyZWQgYnkgdGhlIGNhbGxlci4KKyAqIEhvd2V2ZXIsIGl0IG1heSBiZSByZXVzZWQ7IGp1c3QgcGFzcyBpdCB0byBhbm90aGVyIGNhbGwgb2YKKyAqIGBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKClgLgorICoKKyAqIElmIHRoZSBwcm9ncmFtIGV4aXRzIGJlZm9yZSBgY29tbWl0X2xvY2tfZmlsZSgpYCwKKyAqIGBjb21taXRfbG9ja19maWxlX3RvKClgLCBvciBgcm9sbGJhY2tfbG9ja19maWxlKClgIGlzIGNhbGxlZCwgdGhlCisgKiB0ZW1wZmlsZSBtb2R1bGUgd2lsbCBjbG9zZSBhbmQgcmVtb3ZlIHRoZSBsb2NrZmlsZSwgdGhlcmVieSByb2xsaW5nCisgKiBiYWNrIGFueSB1bmNvbW1pdHRlZCBjaGFuZ2VzLgorICoKKyAqIElmIHlvdSBuZWVkIHRvIGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgeW91IG9idGFpbmVkIGZyb20gYQorICogYGhvbGRfbG9ja19maWxlX2Zvcl8qKClgIGZ1bmN0aW9uIHlvdXJzZWxmLCBkbyBzbyBieSBjYWxsaW5nCisgKiBgY2xvc2VfbG9ja19maWxlKClgLiBTZWUgInRlbXBmaWxlLmgiIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqCisgKiBVbmRlciB0aGUgY292ZXJzLCBhIGxvY2tmaWxlIGlzIGp1c3QgYSB0ZW1wZmlsZSB3aXRoIGEgZmV3IGhlbHBlcgorICogZnVuY3Rpb25zLiBJbiBwYXJ0aWN1bGFyLCB0aGUgc3RhdGUgZGlhZ3JhbSBhbmQgdGhlIGNsZWFudXAKKyAqIG1hY2hpbmVyeSBhcmUgYWxsIGltcGxlbWVudGVkIGluIHRoZSB0ZW1wZmlsZSBtb2R1bGUuCisgKgorICoKKyAqIEVycm9yIGhhbmRsaW5nCisgKiAtLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBgaG9sZF9sb2NrX2ZpbGVfZm9yXyooKWAgZnVuY3Rpb25zIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvciBvbgorICogc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlICh1bmxlc3MgYExPQ0tfRElFX09OX0VSUk9SYCBpcyB1c2VkOyBzZWUKKyAqICJmbGFncyIgYmVsb3cpLiBPbiBlcnJvcnMsIGBlcnJub2AgZGVzY3JpYmVzIHRoZSByZWFzb24gZm9yCisgKiBmYWlsdXJlLiBFcnJvcnMgY2FuIGJlIHJlcG9ydGVkIGJ5IHBhc3NpbmcgYGVycm5vYCB0bworICogYHVuYWJsZV90b19sb2NrX21lc3NhZ2UoKWAgb3IgYHVuYWJsZV90b19sb2NrX2RpZSgpYC4KKyAqCisgKiBTaW1pbGFybHksIGBjb21taXRfbG9ja19maWxlYCwgYGNvbW1pdF9sb2NrX2ZpbGVfdG9gLCBhbmQKKyAqIGBjbG9zZV9sb2NrX2ZpbGVgIHJldHVybiAwIG9uIHN1Y2Nlc3MuIE9uIGZhaWx1cmUgdGhleSBzZXQgYGVycm5vYAorICogYXBwcm9wcmlhdGVseSwgZG8gdGhlaXIgYmVzdCB0byByb2xsIGJhY2sgdGhlIGxvY2tmaWxlLCBhbmQgcmV0dXJuCisgKiAtMS4KKyAqLworCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKworc3RydWN0IGxvY2tfZmlsZSB7CisJc3RydWN0IHRlbXBmaWxlIHRlbXBmaWxlOworfTsKKworLyogU3RyaW5nIGFwcGVuZGVkIHRvIGEgZmlsZW5hbWUgdG8gZGVyaXZlIHRoZSBsb2NrZmlsZSBuYW1lOiAqLworI2RlZmluZSBMT0NLX1NVRkZJWCAiLmxvY2siCisjZGVmaW5lIExPQ0tfU1VGRklYX0xFTiA1CisKKworLyoKKyAqIEZsYWdzCisgKiAtLS0tLQorICoKKyAqIFRoZSBmb2xsb3dpbmcgZmxhZ3MgY2FuIGJlIHBhc3NlZCB0byBgaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgpYC4KKyAqLworCisvKgorICogSWYgYSBsb2NrIGlzIGFscmVhZHkgdGFrZW4gZm9yIHRoZSBmaWxlLCBgZGllKClgIHdpdGggYW4gZXJyb3IKKyAqIG1lc3NhZ2UuIElmIHRoaXMgZmxhZyBpcyBub3Qgc3BlY2lmaWVkLCB0cnlpbmcgdG8gbG9jayBhIGZpbGUgdGhhdAorICogaXMgYWxyZWFkeSBsb2NrZWQgcmV0dXJucyAtMSB0byB0aGUgY2FsbGVyLgorICovCisjZGVmaW5lIExPQ0tfRElFX09OX0VSUk9SIDEKKworLyoKKyAqIFVzdWFsbHkgc3ltYm9saWMgbGlua3MgaW4gdGhlIGRlc3RpbmF0aW9uIHBhdGggYXJlIHJlc29sdmVkLiBUaGlzCisgKiBtZWFucyB0aGF0ICgxKSB0aGUgbG9ja2ZpbGUgaXMgY3JlYXRlZCBieSBhZGRpbmcgIi5sb2NrIiB0byB0aGUKKyAqIHJlc29sdmVkIHBhdGgsIGFuZCAoMikgdXBvbiBjb21taXQsIHRoZSByZXNvbHZlZCBwYXRoIGlzCisgKiBvdmVyd3JpdHRlbi4gSG93ZXZlciwgaWYgYExPQ0tfTk9fREVSRUZgIGlzIHNldCwgdGhlbiB0aGUgbG9ja2ZpbGUKKyAqIGlzIGNyZWF0ZWQgYnkgYWRkaW5nICIubG9jayIgdG8gdGhlIHBhdGggYXJndW1lbnQgaXRzZWxmLiBUaGlzCisgKiBvcHRpb24gaXMgdXNlZCwgZm9yIGV4YW1wbGUsIHdoZW4gZGV0YWNoaW5nIGEgc3ltYm9saWMgcmVmZXJlbmNlLAorICogd2hpY2ggZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHJlYXNvbnMsIGNhbiBiZSBhIHN5bWJvbGljIGxpbmsKKyAqIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlIHJlZmVycmVkLXRvLXJlZmVyZW5jZS4KKyAqLworI2RlZmluZSBMT0NLX05PX0RFUkVGIDIKKworLyoKKyAqIEF0dGVtcHQgdG8gY3JlYXRlIGEgbG9ja2ZpbGUgZm9yIHRoZSBmaWxlIGF0IGBwYXRoYCBhbmQgcmV0dXJuIGEKKyAqIGZpbGUgZGVzY3JpcHRvciBmb3Igd3JpdGluZyB0byBpdCwgb3IgLTEgb24gZXJyb3IuIElmIHRoZSBmaWxlIGlzCisgKiBjdXJyZW50bHkgbG9ja2VkLCByZXRyeSB3aXRoIHF1YWRyYXRpYyBiYWNrb2ZmIGZvciBhdCBsZWFzdAorICogdGltZW91dF9tcyBtaWxsaXNlY29uZHMuIElmIHRpbWVvdXRfbXMgaXMgMCwgdHJ5IGV4YWN0bHkgb25jZTsgaWYKKyAqIHRpbWVvdXRfbXMgaXMgLTEsIHJldHJ5IGluZGVmaW5pdGVseS4gVGhlIGZsYWdzIGFyZ3VtZW50IGFuZCBlcnJvcgorICogaGFuZGxpbmcgYXJlIGRlc2NyaWJlZCBhYm92ZS4KKyAqLworZXh0ZXJuIGludCBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlX3RpbWVvdXQoCisJCXN0cnVjdCBsb2NrX2ZpbGUgKmxrLCBjb25zdCBjaGFyICpwYXRoLAorCQlpbnQgZmxhZ3MsIGxvbmcgdGltZW91dF9tcyk7CisKKy8qCisgKiBBdHRlbXB0IHRvIGNyZWF0ZSBhIGxvY2tmaWxlIGZvciB0aGUgZmlsZSBhdCBgcGF0aGAgYW5kIHJldHVybiBhCisgKiBmaWxlIGRlc2NyaXB0b3IgZm9yIHdyaXRpbmcgdG8gaXQsIG9yIC0xIG9uIGVycm9yLiBUaGUgZmxhZ3MKKyAqIGFyZ3VtZW50IGFuZCBlcnJvciBoYW5kbGluZyBhcmUgZGVzY3JpYmVkIGFib3ZlLgorICovCitzdGF0aWMgaW5saW5lIGludCBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKAorCQlzdHJ1Y3QgbG9ja19maWxlICpsaywgY29uc3QgY2hhciAqcGF0aCwKKwkJaW50IGZsYWdzKQoreworCXJldHVybiBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlX3RpbWVvdXQobGssIHBhdGgsIGZsYWdzLCAwKTsKK30KKworLyoKKyAqIEFwcGVuZCBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIHRvIGBidWZgIGZvbGxvd2luZyB0aGUgZmFpbHVyZQorICogb2YgYGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoKWAgdG8gbG9jayBgcGF0aGAuIGBlcnJgIHNob3VsZCBiZSB0aGUKKyAqIGBlcnJub2Agc2V0IGJ5IHRoZSBmYWlsaW5nIGNhbGwuCisgKi8KK2V4dGVybiB2b2lkIHVuYWJsZV90b19sb2NrX21lc3NhZ2UoY29uc3QgY2hhciAqcGF0aCwgaW50IGVyciwKKwkJCQkgICBzdHJ1Y3Qgc3RyYnVmICpidWYpOworCisvKgorICogRW1pdCBhbiBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIGFuZCBgZGllKClgIGZvbGxvd2luZyB0aGUgZmFpbHVyZQorICogb2YgYGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUoKWAgdG8gbG9jayBgcGF0aGAuIGBlcnJgIHNob3VsZCBiZSB0aGUKKyAqIGBlcnJub2Agc2V0IGJ5IHRoZSBmYWlsaW5nCisgKiBjYWxsLgorICovCitleHRlcm4gTk9SRVRVUk4gdm9pZCB1bmFibGVfdG9fbG9ja19kaWUoY29uc3QgY2hhciAqcGF0aCwgaW50IGVycik7CisKKy8qCisgKiBBc3NvY2lhdGUgYSBzdGRpbyBzdHJlYW0gd2l0aCB0aGUgbG9ja2ZpbGUgKHdoaWNoIG11c3Qgc3RpbGwgYmUKKyAqIG9wZW4pLiBSZXR1cm4gYE5VTExgICgqd2l0aG91dCogcm9sbGluZyBiYWNrIHRoZSBsb2NrZmlsZSkgb24KKyAqIGVycm9yLiBUaGUgc3RyZWFtIGlzIGNsb3NlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYGNsb3NlX2xvY2tfZmlsZSgpYAorICogaXMgY2FsbGVkIG9yIHdoZW4gdGhlIGZpbGUgaXMgY29tbWl0dGVkIG9yIHJvbGxlZCBiYWNrLgorICovCitzdGF0aWMgaW5saW5lIEZJTEUgKmZkb3Blbl9sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGssIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJcmV0dXJuIGZkb3Blbl90ZW1wZmlsZSgmbGstPnRlbXBmaWxlLCBtb2RlKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgcGF0aCBvZiB0aGUgbG9ja2ZpbGUuIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwb2ludGVyIHRvIGEKKyAqIGZpZWxkIHdpdGhpbiB0aGUgbG9ja19maWxlIG9iamVjdCBhbmQgc2hvdWxkIG5vdCBiZSBmcmVlZC4KKyAqLworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpnZXRfbG9ja19maWxlX3BhdGgoc3RydWN0IGxvY2tfZmlsZSAqbGspCit7CisJcmV0dXJuIGdldF90ZW1wZmlsZV9wYXRoKCZsay0+dGVtcGZpbGUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfbG9ja19maWxlX2ZkKHN0cnVjdCBsb2NrX2ZpbGUgKmxrKQoreworCXJldHVybiBnZXRfdGVtcGZpbGVfZmQoJmxrLT50ZW1wZmlsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRklMRSAqZ2V0X2xvY2tfZmlsZV9mcChzdHJ1Y3QgbG9ja19maWxlICpsaykKK3sKKwlyZXR1cm4gZ2V0X3RlbXBmaWxlX2ZwKCZsay0+dGVtcGZpbGUpOworfQorCisvKgorICogUmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBmaWxlIHRoYXQgaXMgbG9ja2VkIGJ5IHRoZSBzcGVjaWZpZWQKKyAqIGxvY2tfZmlsZSBvYmplY3QuIFRoZSBjYWxsZXIgbXVzdCBmcmVlIHRoZSBtZW1vcnkuCisgKi8KK2V4dGVybiBjaGFyICpnZXRfbG9ja2VkX2ZpbGVfcGF0aChzdHJ1Y3QgbG9ja19maWxlICpsayk7CisKKy8qCisgKiBJZiB0aGUgbG9ja2ZpbGUgaXMgc3RpbGwgb3BlbiwgY2xvc2UgaXQgKGFuZCB0aGUgZmlsZSBwb2ludGVyIGlmIGl0CisgKiBoYXMgYmVlbiBvcGVuZWQgdXNpbmcgYGZkb3Blbl9sb2NrX2ZpbGUoKWApIHdpdGhvdXQgcmVuYW1pbmcgdGhlCisgKiBsb2NrZmlsZSBvdmVyIHRoZSBmaWxlIGJlaW5nIGxvY2tlZC4gUmV0dXJuIDAgdXBvbiBzdWNjZXNzLiBPbgorICogZmFpbHVyZSB0byBgY2xvc2UoMilgLCByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSBhbmQgcm9sbCBiYWNrIHRoZQorICogbG9jayBmaWxlLiBVc3VhbGx5IGBjb21taXRfbG9ja19maWxlKClgLCBgY29tbWl0X2xvY2tfZmlsZV90bygpYCwKKyAqIG9yIGByb2xsYmFja19sb2NrX2ZpbGUoKWAgc2hvdWxkIGV2ZW50dWFsbHkgYmUgY2FsbGVkIGlmCisgKiBgY2xvc2VfbG9ja19maWxlKClgIHN1Y2NlZWRzLgorICovCitzdGF0aWMgaW5saW5lIGludCBjbG9zZV9sb2NrX2ZpbGUoc3RydWN0IGxvY2tfZmlsZSAqbGspCit7CisJcmV0dXJuIGNsb3NlX3RlbXBmaWxlKCZsay0+dGVtcGZpbGUpOworfQorCisvKgorICogUmUtb3BlbiBhIGxvY2tmaWxlIHRoYXQgaGFzIGJlZW4gY2xvc2VkIHVzaW5nIGBjbG9zZV9sb2NrX2ZpbGUoKWAKKyAqIGJ1dCBub3QgeWV0IGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay4gVGhpcyBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQKKyAqIGEgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBsaWtlIHRoZSBmb2xsb3dpbmc6CisgKgorICogKiBMb2NrIGZpbGUuCisgKgorICogKiBXcml0ZSBuZXcgY29udGVudHMgdG8gbG9ja2ZpbGUsIHRoZW4gYGNsb3NlX2xvY2tfZmlsZSgpYCB0bworICogICBjYXVzZSB0aGUgY29udGVudHMgdG8gYmUgd3JpdHRlbiB0byBkaXNrLgorICoKKyAqICogUGFzcyB0aGUgbmFtZSBvZiB0aGUgbG9ja2ZpbGUgdG8gYW5vdGhlciBwcm9ncmFtIHRvIGFsbG93IGl0IChhbmQKKyAqICAgbm9ib2R5IGVsc2UpIHRvIGluc3BlY3QgdGhlIGNvbnRlbnRzIHlvdSB3cm90ZSwgd2hpbGUgc3RpbGwKKyAqICAgaG9sZGluZyB0aGUgbG9jayB5b3Vyc2VsZi4KKyAqCisgKiAqIGByZW9wZW5fbG9ja19maWxlKClgIHRvIHJlb3BlbiB0aGUgbG9ja2ZpbGUuIE1ha2UgZnVydGhlciB1cGRhdGVzCisgKiAgIHRvIHRoZSBjb250ZW50cy4KKyAqCisgKiAqIGBjb21taXRfbG9ja19maWxlKClgIHRvIG1ha2UgdGhlIGZpbmFsIHZlcnNpb24gcGVybWFuZW50LgorICovCitzdGF0aWMgaW5saW5lIGludCByZW9wZW5fbG9ja19maWxlKHN0cnVjdCBsb2NrX2ZpbGUgKmxrKQoreworCXJldHVybiByZW9wZW5fdGVtcGZpbGUoJmxrLT50ZW1wZmlsZSk7Cit9CisKKy8qCisgKiBDb21taXQgdGhlIGNoYW5nZSByZXByZXNlbnRlZCBieSBgbGtgOiBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yCisgKiBhbmQvb3IgZmlsZSBwb2ludGVyIGlmIHRoZXkgYXJlIHN0aWxsIG9wZW4gYW5kIHJlbmFtZSB0aGUgbG9ja2ZpbGUKKyAqIHRvIGl0cyBmaW5hbCBkZXN0aW5hdGlvbi4gUmV0dXJuIDAgdXBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlLCByb2xsCisgKiBiYWNrIHRoZSBsb2NrIGZpbGUgYW5kIHJldHVybiAtMSwgd2l0aCBgZXJybm9gIHNldCB0byB0aGUgdmFsdWUKKyAqIGZyb20gdGhlIGZhaWxpbmcgY2FsbCB0byBgY2xvc2UoMilgIG9yIGByZW5hbWUoMilgLiBJdCBpcyBhIGJ1ZyB0bworICogY2FsbCBgY29tbWl0X2xvY2tfZmlsZSgpYCBmb3IgYSBgbG9ja19maWxlYCBvYmplY3QgdGhhdCBpcyBub3QKKyAqIGN1cnJlbnRseSBsb2NrZWQuCisgKi8KK2V4dGVybiBpbnQgY29tbWl0X2xvY2tfZmlsZShzdHJ1Y3QgbG9ja19maWxlICpsayk7CisKKy8qCisgKiBMaWtlIGBjb21taXRfbG9ja19maWxlKClgLCBidXQgcmVuYW1lIHRoZSBsb2NrZmlsZSB0byB0aGUgcHJvdmlkZWQKKyAqIGBwYXRoYC4gYHBhdGhgIG11c3QgYmUgb24gdGhlIHNhbWUgZmlsZXN5c3RlbSBhcyB0aGUgbG9jayBmaWxlLgorICovCitzdGF0aWMgaW5saW5lIGludCBjb21taXRfbG9ja19maWxlX3RvKHN0cnVjdCBsb2NrX2ZpbGUgKmxrLCBjb25zdCBjaGFyICpwYXRoKQoreworCXJldHVybiByZW5hbWVfdGVtcGZpbGUoJmxrLT50ZW1wZmlsZSwgcGF0aCk7Cit9CisKKy8qCisgKiBSb2xsIGJhY2sgYGxrYDogY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBhbmQvb3IgZmlsZSBwb2ludGVyIGFuZAorICogcmVtb3ZlIHRoZSBsb2NrZmlsZS4gSXQgaXMgYSBOT09QIHRvIGNhbGwgYHJvbGxiYWNrX2xvY2tfZmlsZSgpYAorICogZm9yIGEgYGxvY2tfZmlsZWAgb2JqZWN0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjb21taXR0ZWQgb3Igcm9sbGVkCisgKiBiYWNrLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcm9sbGJhY2tfbG9ja19maWxlKHN0cnVjdCBsb2NrX2ZpbGUgKmxrKQoreworCWRlbGV0ZV90ZW1wZmlsZSgmbGstPnRlbXBmaWxlKTsKK30KKworI2VuZGlmIC8qIExPQ0tGSUxFX0ggKi8KZGlmZiAtLWdpdCBhL2xvZy10cmVlLmMgYi9sb2ctdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMWI1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9sb2ctdHJlZS5jCkBAIC0wLDAgKzEsODg2IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiZ3JhcGguaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKKworc3RhdGljIHN0cnVjdCBkZWNvcmF0aW9uIG5hbWVfZGVjb3JhdGlvbiA9IHsgIm9iamVjdCBuYW1lcyIgfTsKK3N0YXRpYyBpbnQgZGVjb3JhdGlvbl9sb2FkZWQ7CitzdGF0aWMgaW50IGRlY29yYXRpb25fZmxhZ3M7CisKK3N0YXRpYyBjaGFyIGRlY29yYXRpb25fY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKKwlHSVRfQ09MT1JfUkVTRVQsCisJR0lUX0NPTE9SX0JPTERfR1JFRU4sCS8qIFJFRl9MT0NBTCAqLworCUdJVF9DT0xPUl9CT0xEX1JFRCwJLyogUkVGX1JFTU9URSAqLworCUdJVF9DT0xPUl9CT0xEX1lFTExPVywJLyogUkVGX1RBRyAqLworCUdJVF9DT0xPUl9CT0xEX01BR0VOVEEsCS8qIFJFRl9TVEFTSCAqLworCUdJVF9DT0xPUl9CT0xEX0NZQU4sCS8qIFJFRl9IRUFEICovCisJR0lUX0NPTE9SX0JPTERfQkxVRSwJLyogR1JBRlRFRCAqLworfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRlY29yYXRlX2dldF9jb2xvcihpbnQgZGVjb3JhdGVfdXNlX2NvbG9yLCBlbnVtIGRlY29yYXRpb25fdHlwZSBpeCkKK3sKKwlpZiAod2FudF9jb2xvcihkZWNvcmF0ZV91c2VfY29sb3IpKQorCQlyZXR1cm4gZGVjb3JhdGlvbl9jb2xvcnNbaXhdOworCXJldHVybiAiIjsKK30KKworc3RhdGljIGludCBwYXJzZV9kZWNvcmF0ZV9jb2xvcl9zbG90KGNvbnN0IGNoYXIgKnNsb3QpCit7CisJLyoKKwkgKiBXZSdyZSBjb21wYXJpbmcgd2l0aCAnaWdub3JlLWNhc2UnIG9uCisJICogKGJlY2F1c2UgY29uZmlnLmMgc2V0cyB0aGVtIGFsbCB0b2xvd2VyKSwKKwkgKiBidXQgbGV0J3MgbWF0Y2ggdGhlIGxldHRlcnMgaW4gdGhlIGxpdGVyYWwKKwkgKiBzdHJpbmcgdmFsdWVzIGhlcmUgd2l0aCBob3cgdGhleSBhcmUKKwkgKiBkb2N1bWVudGVkIGluIERvY3VtZW50YXRpb24vY29uZmlnLnR4dCwgZm9yCisJICogY29uc2lzdGVuY3kuCisJICoKKwkgKiBXZSBsb3ZlIGJlaW5nIGNvbnNpc3RlbnQsIGRvbid0IHdlPworCSAqLworCWlmICghc3RyY2FzZWNtcChzbG90LCAiYnJhbmNoIikpCisJCXJldHVybiBERUNPUkFUSU9OX1JFRl9MT0NBTDsKKwlpZiAoIXN0cmNhc2VjbXAoc2xvdCwgInJlbW90ZUJyYW5jaCIpKQorCQlyZXR1cm4gREVDT1JBVElPTl9SRUZfUkVNT1RFOworCWlmICghc3RyY2FzZWNtcChzbG90LCAidGFnIikpCisJCXJldHVybiBERUNPUkFUSU9OX1JFRl9UQUc7CisJaWYgKCFzdHJjYXNlY21wKHNsb3QsICJzdGFzaCIpKQorCQlyZXR1cm4gREVDT1JBVElPTl9SRUZfU1RBU0g7CisJaWYgKCFzdHJjYXNlY21wKHNsb3QsICJIRUFEIikpCisJCXJldHVybiBERUNPUkFUSU9OX1JFRl9IRUFEOworCXJldHVybiAtMTsKK30KKworaW50IHBhcnNlX2RlY29yYXRlX2NvbG9yX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnNsb3RfbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IHNsb3QgPSBwYXJzZV9kZWNvcmF0ZV9jb2xvcl9zbG90KHNsb3RfbmFtZSk7CisJaWYgKHNsb3QgPCAwKQorCQlyZXR1cm4gMDsKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gY29uZmlnX2Vycm9yX25vbmJvb2wodmFyKTsKKwlyZXR1cm4gY29sb3JfcGFyc2UodmFsdWUsIGRlY29yYXRpb25fY29sb3JzW3Nsb3RdKTsKK30KKworLyoKKyAqIGxvZy10cmVlLmMgdXNlcyBESUZGX09QVF9UU1QgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdG8gdXNlIGNvbG9yCisgKiBmb3Igc2hvd2luZyB0aGUgY29tbWl0IHNoYTEsIHVzZSB0aGUgc2FtZSBjaGVjayBmb3IgLS1kZWNvcmF0ZQorICovCisjZGVmaW5lIGRlY29yYXRlX2dldF9jb2xvcl9vcHQobywgaXgpIFwKKwlkZWNvcmF0ZV9nZXRfY29sb3IoKG8pLT51c2VfY29sb3IsIGl4KQorCit2b2lkIGFkZF9uYW1lX2RlY29yYXRpb24oZW51bSBkZWNvcmF0aW9uX3R5cGUgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdCAqb2JqKQoreworCWludCBubGVuID0gc3RybGVuKG5hbWUpOworCXN0cnVjdCBuYW1lX2RlY29yYXRpb24gKnJlcyA9IHhtYWxsb2Moc2l6ZW9mKCpyZXMpICsgbmxlbiArIDEpOworCW1lbWNweShyZXMtPm5hbWUsIG5hbWUsIG5sZW4gKyAxKTsKKwlyZXMtPnR5cGUgPSB0eXBlOworCXJlcy0+bmV4dCA9IGFkZF9kZWNvcmF0aW9uKCZuYW1lX2RlY29yYXRpb24sIG9iaiwgcmVzKTsKK30KKworY29uc3Qgc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqZ2V0X25hbWVfZGVjb3JhdGlvbihjb25zdCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJcmV0dXJuIGxvb2t1cF9kZWNvcmF0aW9uKCZuYW1lX2RlY29yYXRpb24sIG9iaik7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3JlZl9kZWNvcmF0aW9uKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgICAgIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJZW51bSBkZWNvcmF0aW9uX3R5cGUgdHlwZSA9IERFQ09SQVRJT05fTk9ORTsKKworCWFzc2VydChjYl9kYXRhID09IE5VTEwpOworCisJaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsIGdpdF9yZXBsYWNlX3JlZl9iYXNlKSkgeworCQlzdHJ1Y3Qgb2JqZWN0X2lkIG9yaWdpbmFsX29pZDsKKwkJaWYgKCFjaGVja19yZXBsYWNlX3JlZnMpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGdldF9vaWRfaGV4KHJlZm5hbWUgKyBzdHJsZW4oZ2l0X3JlcGxhY2VfcmVmX2Jhc2UpLAorCQkJCSZvcmlnaW5hbF9vaWQpKSB7CisJCQl3YXJuaW5nKCJpbnZhbGlkIHJlcGxhY2UgcmVmICVzIiwgcmVmbmFtZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlvYmogPSBwYXJzZV9vYmplY3Qob3JpZ2luYWxfb2lkLmhhc2gpOworCQlpZiAob2JqKQorCQkJYWRkX25hbWVfZGVjb3JhdGlvbihERUNPUkFUSU9OX0dSQUZURUQsICJyZXBsYWNlZCIsIG9iaik7CisJCXJldHVybiAwOworCX0KKworCW9iaiA9IHBhcnNlX29iamVjdChvaWQtPmhhc2gpOworCWlmICghb2JqKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJdHlwZSA9IERFQ09SQVRJT05fUkVGX0xPQ0FMOworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIikpCisJCXR5cGUgPSBERUNPUkFUSU9OX1JFRl9SRU1PVEU7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvdGFncy8iKSkKKwkJdHlwZSA9IERFQ09SQVRJT05fUkVGX1RBRzsKKwllbHNlIGlmICghc3RyY21wKHJlZm5hbWUsICJyZWZzL3N0YXNoIikpCisJCXR5cGUgPSBERUNPUkFUSU9OX1JFRl9TVEFTSDsKKwllbHNlIGlmICghc3RyY21wKHJlZm5hbWUsICJIRUFEIikpCisJCXR5cGUgPSBERUNPUkFUSU9OX1JFRl9IRUFEOworCisJYWRkX25hbWVfZGVjb3JhdGlvbih0eXBlLCByZWZuYW1lLCBvYmopOworCXdoaWxlIChvYmotPnR5cGUgPT0gT0JKX1RBRykgeworCQlvYmogPSAoKHN0cnVjdCB0YWcgKilvYmopLT50YWdnZWQ7CisJCWlmICghb2JqKQorCQkJYnJlYWs7CisJCWlmICghb2JqLT5wYXJzZWQpCisJCQlwYXJzZV9vYmplY3Qob2JqLT5zaGExKTsKKwkJYWRkX25hbWVfZGVjb3JhdGlvbihERUNPUkFUSU9OX1JFRl9UQUcsIHJlZm5hbWUsIG9iaik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkZF9ncmFmdF9kZWNvcmF0aW9uKGNvbnN0IHN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0LCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxvb2t1cF9jb21taXQoZ3JhZnQtPm9pZC5oYXNoKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIDA7CisJYWRkX25hbWVfZGVjb3JhdGlvbihERUNPUkFUSU9OX0dSQUZURUQsICJncmFmdGVkIiwgJmNvbW1pdC0+b2JqZWN0KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBsb2FkX3JlZl9kZWNvcmF0aW9ucyhpbnQgZmxhZ3MpCit7CisJaWYgKCFkZWNvcmF0aW9uX2xvYWRlZCkgeworCisJCWRlY29yYXRpb25fbG9hZGVkID0gMTsKKwkJZGVjb3JhdGlvbl9mbGFncyA9IGZsYWdzOworCQlmb3JfZWFjaF9yZWYoYWRkX3JlZl9kZWNvcmF0aW9uLCBOVUxMKTsKKwkJaGVhZF9yZWYoYWRkX3JlZl9kZWNvcmF0aW9uLCBOVUxMKTsKKwkJZm9yX2VhY2hfY29tbWl0X2dyYWZ0KGFkZF9ncmFmdF9kZWNvcmF0aW9uLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcGFyZW50cyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGludCBhYmJyZXYpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcCA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHAtPml0ZW07CisJCXByaW50ZigiICVzIiwgZmluZF91bmlxdWVfYWJicmV2KHBhcmVudC0+b2JqZWN0LnNoYTEsIGFiYnJldikpOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19jaGlsZHJlbihzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBpbnQgYWJicmV2KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcCA9IGxvb2t1cF9kZWNvcmF0aW9uKCZvcHQtPmNoaWxkcmVuLCAmY29tbWl0LT5vYmplY3QpOworCWZvciAoIDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJcHJpbnRmKCIgJXMiLCBmaW5kX3VuaXF1ZV9hYmJyZXYocC0+aXRlbS0+b2JqZWN0LnNoYTEsIGFiYnJldikpOworCX0KK30KKworLyoKKyAqIERvIHdlIGhhdmUgSEVBRCBpbiB0aGUgb3V0cHV0LCBhbmQgYWxzbyB0aGUgYnJhbmNoIGl0IHBvaW50cyBhdD8KKyAqIElmIHNvLCBmaW5kIHRoYXQgZGVjb3JhdGlvbiBlbnRyeSBmb3IgdGhhdCBjdXJyZW50IGJyYW5jaC4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmN1cnJlbnRfcG9pbnRlZF9ieV9IRUFEKGNvbnN0IHN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmRlY29yYXRpb24pCit7CisJY29uc3Qgc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqbGlzdCwgKmhlYWQgPSBOVUxMOworCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHVudXNlZFsyMF07CisJaW50IHJydV9mbGFnczsKKworCS8qIEZpcnN0IGZpbmQgSEVBRCAqLworCWZvciAobGlzdCA9IGRlY29yYXRpb247IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorCQlpZiAobGlzdC0+dHlwZSA9PSBERUNPUkFUSU9OX1JFRl9IRUFEKSB7CisJCQloZWFkID0gbGlzdDsKKwkJCWJyZWFrOworCQl9CisJaWYgKCFoZWFkKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIE5vdyByZXNvbHZlIGFuZCBmaW5kIHRoZSBtYXRjaGluZyBjdXJyZW50IGJyYW5jaCAqLworCWJyYW5jaF9uYW1lID0gcmVzb2x2ZV9yZWZfdW5zYWZlKCJIRUFEIiwgMCwgdW51c2VkLCAmcnJ1X2ZsYWdzKTsKKwlpZiAoIShycnVfZmxhZ3MgJiBSRUZfSVNTWU1SRUYpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghc3RhcnRzX3dpdGgoYnJhbmNoX25hbWUsICJyZWZzLyIpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIE9LLCBkbyB3ZSBoYXZlIHRoYXQgcmVmIGluIHRoZSBsaXN0PyAqLworCWZvciAobGlzdCA9IGRlY29yYXRpb247IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorCQlpZiAoKGxpc3QtPnR5cGUgPT0gREVDT1JBVElPTl9SRUZfTE9DQUwpICYmCisJCSAgICAhc3RyY21wKGJyYW5jaF9uYW1lLCBsaXN0LT5uYW1lKSkgeworCQkJcmV0dXJuIGxpc3Q7CisJCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBzaG93X25hbWUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmRlY29yYXRpb24pCit7CisJaWYgKGRlY29yYXRpb25fZmxhZ3MgPT0gREVDT1JBVEVfU0hPUlRfUkVGUykKKwkJc3RyYnVmX2FkZHN0cihzYiwgcHJldHRpZnlfcmVmbmFtZShkZWNvcmF0aW9uLT5uYW1lKSk7CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKHNiLCBkZWNvcmF0aW9uLT5uYW1lKTsKK30KKworLyoKKyAqIFRoZSBjYWxsZXIgbWFrZXMgc3VyZSB0aGVyZSBpcyBubyBmdW5ueSBjb2xvciBiZWZvcmUgY2FsbGluZy4KKyAqIGZvcm1hdF9kZWNvcmF0aW9uc19leHRlbmRlZCBtYWtlcyBzdXJlIHRoZSBzYW1lIGFmdGVyIHJldHVybi4KKyAqLwordm9pZCBmb3JtYXRfZGVjb3JhdGlvbnNfZXh0ZW5kZWQoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQlpbnQgdXNlX2NvbG9yLAorCQkJY29uc3QgY2hhciAqcHJlZml4LAorCQkJY29uc3QgY2hhciAqc2VwYXJhdG9yLAorCQkJY29uc3QgY2hhciAqc3VmZml4KQoreworCWNvbnN0IHN0cnVjdCBuYW1lX2RlY29yYXRpb24gKmRlY29yYXRpb247CisJY29uc3Qgc3RydWN0IG5hbWVfZGVjb3JhdGlvbiAqY3VycmVudF9hbmRfSEVBRDsKKwljb25zdCBjaGFyICpjb2xvcl9jb21taXQgPQorCQlkaWZmX2dldF9jb2xvcih1c2VfY29sb3IsIERJRkZfQ09NTUlUKTsKKwljb25zdCBjaGFyICpjb2xvcl9yZXNldCA9CisJCWRlY29yYXRlX2dldF9jb2xvcih1c2VfY29sb3IsIERFQ09SQVRJT05fTk9ORSk7CisKKwlkZWNvcmF0aW9uID0gZ2V0X25hbWVfZGVjb3JhdGlvbigmY29tbWl0LT5vYmplY3QpOworCWlmICghZGVjb3JhdGlvbikKKwkJcmV0dXJuOworCisJY3VycmVudF9hbmRfSEVBRCA9IGN1cnJlbnRfcG9pbnRlZF9ieV9IRUFEKGRlY29yYXRpb24pOworCXdoaWxlIChkZWNvcmF0aW9uKSB7CisJCS8qCisJCSAqIFdoZW4gYm90aCBjdXJyZW50IGFuZCBIRUFEIGFyZSB0aGVyZSwgb25seQorCQkgKiBzaG93IEhFQUQtPmN1cnJlbnQgd2hlcmUgSEVBRCB3b3VsZCBoYXZlCisJCSAqIGFwcGVhcmVkLCBza2lwcGluZyB0aGUgZW50cnkgZm9yIGN1cnJlbnQuCisJCSAqLworCQlpZiAoZGVjb3JhdGlvbiAhPSBjdXJyZW50X2FuZF9IRUFEKSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBjb2xvcl9jb21taXQpOworCQkJc3RyYnVmX2FkZHN0cihzYiwgcHJlZml4KTsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbG9yX3Jlc2V0KTsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGRlY29yYXRlX2dldF9jb2xvcih1c2VfY29sb3IsIGRlY29yYXRpb24tPnR5cGUpKTsKKwkJCWlmIChkZWNvcmF0aW9uLT50eXBlID09IERFQ09SQVRJT05fUkVGX1RBRykKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAidGFnOiAiKTsKKworCQkJc2hvd19uYW1lKHNiLCBkZWNvcmF0aW9uKTsKKworCQkJaWYgKGN1cnJlbnRfYW5kX0hFQUQgJiYKKwkJCSAgICBkZWNvcmF0aW9uLT50eXBlID09IERFQ09SQVRJT05fUkVGX0hFQUQpIHsKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCBjb2xvcl9yZXNldCk7CisJCQkJc3RyYnVmX2FkZHN0cihzYiwgY29sb3JfY29tbWl0KTsKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCAiIC0+ICIpOworCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbG9yX3Jlc2V0KTsKKwkJCQlzdHJidWZfYWRkc3RyKHNiLCBkZWNvcmF0ZV9nZXRfY29sb3IodXNlX2NvbG9yLCBjdXJyZW50X2FuZF9IRUFELT50eXBlKSk7CisJCQkJc2hvd19uYW1lKHNiLCBjdXJyZW50X2FuZF9IRUFEKTsKKwkJCX0KKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbG9yX3Jlc2V0KTsKKworCQkJcHJlZml4ID0gc2VwYXJhdG9yOworCQl9CisJCWRlY29yYXRpb24gPSBkZWNvcmF0aW9uLT5uZXh0OworCX0KKwlzdHJidWZfYWRkc3RyKHNiLCBjb2xvcl9jb21taXQpOworCXN0cmJ1Zl9hZGRzdHIoc2IsIHN1ZmZpeCk7CisJc3RyYnVmX2FkZHN0cihzYiwgY29sb3JfcmVzZXQpOworfQorCit2b2lkIHNob3dfZGVjb3JhdGlvbnMoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAob3B0LT5zaG93X3NvdXJjZSAmJiBjb21taXQtPnV0aWwpCisJCXByaW50ZigiXHQlcyIsIChjaGFyICopIGNvbW1pdC0+dXRpbCk7CisJaWYgKCFvcHQtPnNob3dfZGVjb3JhdGlvbnMpCisJCXJldHVybjsKKwlmb3JtYXRfZGVjb3JhdGlvbnMoJnNiLCBjb21taXQsIG9wdC0+ZGlmZm9wdC51c2VfY29sb3IpOworCWZwdXRzKHNiLmJ1Ziwgc3Rkb3V0KTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGRpZ2l0c19pbl9udW1iZXIodW5zaWduZWQgaW50IG51bWJlcikKK3sKKwl1bnNpZ25lZCBpbnQgaSA9IDEwLCByZXN1bHQgPSAxOworCXdoaWxlIChpIDw9IG51bWJlcikgeworCQlpICo9IDEwOworCQlyZXN1bHQrKzsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBmbXRfb3V0cHV0X3N1YmplY3Qoc3RydWN0IHN0cmJ1ZiAqZmlsZW5hbWUsCisJCQljb25zdCBjaGFyICpzdWJqZWN0LAorCQkJc3RydWN0IHJldl9pbmZvICppbmZvKQoreworCWNvbnN0IGNoYXIgKnN1ZmZpeCA9IGluZm8tPnBhdGNoX3N1ZmZpeDsKKwlpbnQgbnIgPSBpbmZvLT5ucjsKKwlpbnQgc3RhcnRfbGVuID0gZmlsZW5hbWUtPmxlbjsKKwlpbnQgbWF4X2xlbiA9IHN0YXJ0X2xlbiArIEZPUk1BVF9QQVRDSF9OQU1FX01BWCAtIChzdHJsZW4oc3VmZml4KSArIDEpOworCisJaWYgKDAgPCBpbmZvLT5yZXJvbGxfY291bnQpCisJCXN0cmJ1Zl9hZGRmKGZpbGVuYW1lLCAidiVkLSIsIGluZm8tPnJlcm9sbF9jb3VudCk7CisJc3RyYnVmX2FkZGYoZmlsZW5hbWUsICIlMDRkLSVzIiwgbnIsIHN1YmplY3QpOworCisJaWYgKG1heF9sZW4gPCBmaWxlbmFtZS0+bGVuKQorCQlzdHJidWZfc2V0bGVuKGZpbGVuYW1lLCBtYXhfbGVuKTsKKwlzdHJidWZfYWRkc3RyKGZpbGVuYW1lLCBzdWZmaXgpOworfQorCit2b2lkIGZtdF9vdXRwdXRfY29tbWl0KHN0cnVjdCBzdHJidWYgKmZpbGVuYW1lLAorCQkgICAgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkgICAgICAgc3RydWN0IHJldl9pbmZvICppbmZvKQoreworCXN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCBjdHggPSB7MH07CisJc3RydWN0IHN0cmJ1ZiBzdWJqZWN0ID0gU1RSQlVGX0lOSVQ7CisKKwlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJWYiLCAmc3ViamVjdCwgJmN0eCk7CisJZm10X291dHB1dF9zdWJqZWN0KGZpbGVuYW1lLCBzdWJqZWN0LmJ1ZiwgaW5mbyk7CisJc3RyYnVmX3JlbGVhc2UoJnN1YmplY3QpOworfQorCit2b2lkIGxvZ193cml0ZV9lbWFpbF9oZWFkZXJzKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgIGNvbnN0IGNoYXIgKipzdWJqZWN0X3AsCisJCQkgICAgIGNvbnN0IGNoYXIgKipleHRyYV9oZWFkZXJzX3AsCisJCQkgICAgIGludCAqbmVlZF84Yml0X2N0ZV9wKQoreworCWNvbnN0IGNoYXIgKnN1YmplY3QgPSBOVUxMOworCWNvbnN0IGNoYXIgKmV4dHJhX2hlYWRlcnMgPSBvcHQtPmV4dHJhX2hlYWRlcnM7CisJY29uc3QgY2hhciAqbmFtZSA9IHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpOworCisJKm5lZWRfOGJpdF9jdGVfcCA9IDA7IC8qIHVua25vd24gKi8KKwlpZiAob3B0LT50b3RhbCA+IDApIHsKKwkJc3RhdGljIGNoYXIgYnVmZmVyWzY0XTsKKwkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKKwkJCSAiU3ViamVjdDogWyVzJXMlMCpkLyVkXSAiLAorCQkJIG9wdC0+c3ViamVjdF9wcmVmaXgsCisJCQkgKm9wdC0+c3ViamVjdF9wcmVmaXggPyAiICIgOiAiIiwKKwkJCSBkaWdpdHNfaW5fbnVtYmVyKG9wdC0+dG90YWwpLAorCQkJIG9wdC0+bnIsIG9wdC0+dG90YWwpOworCQlzdWJqZWN0ID0gYnVmZmVyOworCX0gZWxzZSBpZiAob3B0LT50b3RhbCA9PSAwICYmIG9wdC0+c3ViamVjdF9wcmVmaXggJiYgKm9wdC0+c3ViamVjdF9wcmVmaXgpIHsKKwkJc3RhdGljIGNoYXIgYnVmZmVyWzI1Nl07CisJCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCisJCQkgIlN1YmplY3Q6IFslc10gIiwKKwkJCSBvcHQtPnN1YmplY3RfcHJlZml4KTsKKwkJc3ViamVjdCA9IGJ1ZmZlcjsKKwl9IGVsc2UgeworCQlzdWJqZWN0ID0gIlN1YmplY3Q6ICI7CisJfQorCisJcHJpbnRmKCJGcm9tICVzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMVxuIiwgbmFtZSk7CisJZ3JhcGhfc2hvd19vbmVsaW5lKG9wdC0+Z3JhcGgpOworCWlmIChvcHQtPm1lc3NhZ2VfaWQpIHsKKwkJcHJpbnRmKCJNZXNzYWdlLUlkOiA8JXM+XG4iLCBvcHQtPm1lc3NhZ2VfaWQpOworCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJfQorCWlmIChvcHQtPnJlZl9tZXNzYWdlX2lkcyAmJiBvcHQtPnJlZl9tZXNzYWdlX2lkcy0+bnIgPiAwKSB7CisJCWludCBpLCBuOworCQluID0gb3B0LT5yZWZfbWVzc2FnZV9pZHMtPm5yOworCQlwcmludGYoIkluLVJlcGx5LVRvOiA8JXM+XG4iLCBvcHQtPnJlZl9tZXNzYWdlX2lkcy0+aXRlbXNbbi0xXS5zdHJpbmcpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkJcHJpbnRmKCIlczwlcz5cbiIsIChpID4gMCA/ICJcdCIgOiAiUmVmZXJlbmNlczogIiksCisJCQkgICAgICAgb3B0LT5yZWZfbWVzc2FnZV9pZHMtPml0ZW1zW2ldLnN0cmluZyk7CisJCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKKwl9CisJaWYgKG9wdC0+bWltZV9ib3VuZGFyeSkgeworCQlzdGF0aWMgY2hhciBzdWJqZWN0X2J1ZmZlclsxMDI0XTsKKwkJc3RhdGljIGNoYXIgYnVmZmVyWzEwMjRdOworCQlzdHJ1Y3Qgc3RyYnVmIGZpbGVuYW1lID0gIFNUUkJVRl9JTklUOworCQkqbmVlZF84Yml0X2N0ZV9wID0gLTE7IC8qIE5FVkVSICovCisJCXNucHJpbnRmKHN1YmplY3RfYnVmZmVyLCBzaXplb2Yoc3ViamVjdF9idWZmZXIpIC0gMSwKKwkJCSAiJXMiCisJCQkgIk1JTUUtVmVyc2lvbjogMS4wXG4iCisJCQkgIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyIKKwkJCSAiIGJvdW5kYXJ5PVwiJXMlc1wiXG4iCisJCQkgIlxuIgorCQkJICJUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgIgorCQkJICJmb3JtYXQuXG4iCisJCQkgIi0tJXMlc1xuIgorCQkJICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47ICIKKwkJCSAiY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkXG4iCisJCQkgIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcblxuIiwKKwkJCSBleHRyYV9oZWFkZXJzID8gZXh0cmFfaGVhZGVycyA6ICIiLAorCQkJIG1pbWVfYm91bmRhcnlfbGVhZGVyLCBvcHQtPm1pbWVfYm91bmRhcnksCisJCQkgbWltZV9ib3VuZGFyeV9sZWFkZXIsIG9wdC0+bWltZV9ib3VuZGFyeSk7CisJCWV4dHJhX2hlYWRlcnMgPSBzdWJqZWN0X2J1ZmZlcjsKKworCQlpZiAob3B0LT5udW1iZXJlZF9maWxlcykKKwkJCXN0cmJ1Zl9hZGRmKCZmaWxlbmFtZSwgIiVkIiwgb3B0LT5ucik7CisJCWVsc2UKKwkJCWZtdF9vdXRwdXRfY29tbWl0KCZmaWxlbmFtZSwgY29tbWl0LCBvcHQpOworCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpIC0gMSwKKwkJCSAiXG4tLSVzJXNcbiIKKwkJCSAiQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IgorCQkJICIgbmFtZT1cIiVzXCJcbiIKKwkJCSAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorCQkJICJDb250ZW50LURpc3Bvc2l0aW9uOiAlczsiCisJCQkgIiBmaWxlbmFtZT1cIiVzXCJcblxuIiwKKwkJCSBtaW1lX2JvdW5kYXJ5X2xlYWRlciwgb3B0LT5taW1lX2JvdW5kYXJ5LAorCQkJIGZpbGVuYW1lLmJ1ZiwKKwkJCSBvcHQtPm5vX2lubGluZSA/ICJhdHRhY2htZW50IiA6ICJpbmxpbmUiLAorCQkJIGZpbGVuYW1lLmJ1Zik7CisJCW9wdC0+ZGlmZm9wdC5zdGF0X3NlcCA9IGJ1ZmZlcjsKKwkJc3RyYnVmX3JlbGVhc2UoJmZpbGVuYW1lKTsKKwl9CisJKnN1YmplY3RfcCA9IHN1YmplY3Q7CisJKmV4dHJhX2hlYWRlcnNfcCA9IGV4dHJhX2hlYWRlcnM7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfc2lnX2xpbmVzKHN0cnVjdCByZXZfaW5mbyAqb3B0LCBpbnQgc3RhdHVzLCBjb25zdCBjaGFyICpib2wpCit7CisJY29uc3QgY2hhciAqY29sb3IsICpyZXNldCwgKmVvbDsKKworCWNvbG9yID0gZGlmZl9nZXRfY29sb3Jfb3B0KCZvcHQtPmRpZmZvcHQsCisJCQkJICAgc3RhdHVzID8gRElGRl9XSElURVNQQUNFIDogRElGRl9GUkFHSU5GTyk7CisJcmVzZXQgPSBkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgRElGRl9SRVNFVCk7CisJd2hpbGUgKCpib2wpIHsKKwkJZW9sID0gc3RyY2hybnVsKGJvbCwgJ1xuJyk7CisJCXByaW50ZigiJXMlLipzJXMlcyIsIGNvbG9yLCAoaW50KShlb2wgLSBib2wpLCBib2wsIHJlc2V0LAorCQkgICAgICAgKmVvbCA/ICJcbiIgOiAiIik7CisJCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKKwkJYm9sID0gKCplb2wpID8gKGVvbCArIDEpIDogZW9sOworCX0KK30KKworc3RhdGljIHZvaWQgc2hvd19zaWduYXR1cmUoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBheWxvYWQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNpZ25hdHVyZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZ3BnX291dHB1dCA9IFNUUkJVRl9JTklUOworCWludCBzdGF0dXM7CisKKwlpZiAocGFyc2Vfc2lnbmVkX2NvbW1pdChjb21taXQsICZwYXlsb2FkLCAmc2lnbmF0dXJlKSA8PSAwKQorCQlnb3RvIG91dDsKKworCXN0YXR1cyA9IHZlcmlmeV9zaWduZWRfYnVmZmVyKHBheWxvYWQuYnVmLCBwYXlsb2FkLmxlbiwKKwkJCQkgICAgICBzaWduYXR1cmUuYnVmLCBzaWduYXR1cmUubGVuLAorCQkJCSAgICAgICZncGdfb3V0cHV0LCBOVUxMKTsKKwlpZiAoc3RhdHVzICYmICFncGdfb3V0cHV0LmxlbikKKwkJc3RyYnVmX2FkZHN0cigmZ3BnX291dHB1dCwgIk5vIHNpZ25hdHVyZVxuIik7CisKKwlzaG93X3NpZ19saW5lcyhvcHQsIHN0YXR1cywgZ3BnX291dHB1dC5idWYpOworCisgb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZncGdfb3V0cHV0KTsKKwlzdHJidWZfcmVsZWFzZSgmcGF5bG9hZCk7CisJc3RyYnVmX3JlbGVhc2UoJnNpZ25hdHVyZSk7Cit9CisKK3N0YXRpYyBpbnQgd2hpY2hfcGFyZW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpbnQgbnRoOworCWNvbnN0IHN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50OworCisJZm9yIChudGggPSAwLCBwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5uZXh0KSB7CisJCWlmICghaGFzaGNtcChwYXJlbnQtPml0ZW0tPm9iamVjdC5zaGExLCBzaGExKSkKKwkJCXJldHVybiBudGg7CisJCW50aCsrOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgaXNfY29tbW9uX21lcmdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlyZXR1cm4gKGNvbW1pdC0+cGFyZW50cworCQkmJiBjb21taXQtPnBhcmVudHMtPm5leHQKKwkJJiYgIWNvbW1pdC0+cGFyZW50cy0+bmV4dC0+bmV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfb25lX21lcmdldGFnKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgIHN0cnVjdCBjb21taXRfZXh0cmFfaGVhZGVyICpleHRyYSwKKwkJCSAgICAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJldl9pbmZvICpvcHQgPSAoc3RydWN0IHJldl9pbmZvICopZGF0YTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCB0YWcgKnRhZzsKKwlzdHJ1Y3Qgc3RyYnVmIHZlcmlmeV9tZXNzYWdlOworCWludCBzdGF0dXMsIG50aDsKKwlzaXplX3QgcGF5bG9hZF9zaXplLCBncGdfbWVzc2FnZV9vZmZzZXQ7CisKKwloYXNoX3NoYTFfZmlsZShleHRyYS0+dmFsdWUsIGV4dHJhLT5sZW4sIHR5cGVuYW1lKE9CSl9UQUcpLCBzaGExKTsKKwl0YWcgPSBsb29rdXBfdGFnKHNoYTEpOworCWlmICghdGFnKQorCQlyZXR1cm47IC8qIGVycm9yIG1lc3NhZ2UgYWxyZWFkeSBnaXZlbiAqLworCisJc3RyYnVmX2luaXQoJnZlcmlmeV9tZXNzYWdlLCAyNTYpOworCWlmIChwYXJzZV90YWdfYnVmZmVyKHRhZywgZXh0cmEtPnZhbHVlLCBleHRyYS0+bGVuKSkKKwkJc3RyYnVmX2FkZHN0cigmdmVyaWZ5X21lc3NhZ2UsICJtYWxmb3JtZWQgbWVyZ2V0YWdcbiIpOworCWVsc2UgaWYgKGlzX2NvbW1vbl9tZXJnZShjb21taXQpICYmCisJCSAhaGFzaGNtcCh0YWctPnRhZ2dlZC0+c2hhMSwKKwkJCSAgY29tbWl0LT5wYXJlbnRzLT5uZXh0LT5pdGVtLT5vYmplY3Quc2hhMSkpCisJCXN0cmJ1Zl9hZGRmKCZ2ZXJpZnlfbWVzc2FnZSwKKwkJCSAgICAibWVyZ2VkIHRhZyAnJXMnXG4iLCB0YWctPnRhZyk7CisJZWxzZSBpZiAoKG50aCA9IHdoaWNoX3BhcmVudCh0YWctPnRhZ2dlZC0+c2hhMSwgY29tbWl0KSkgPCAwKQorCQlzdHJidWZfYWRkZigmdmVyaWZ5X21lc3NhZ2UsICJ0YWcgJXMgbmFtZXMgYSBub24tcGFyZW50ICVzXG4iLAorCQkJCSAgICB0YWctPnRhZywgdGFnLT50YWdnZWQtPnNoYTEpOworCWVsc2UKKwkJc3RyYnVmX2FkZGYoJnZlcmlmeV9tZXNzYWdlLAorCQkJICAgICJwYXJlbnQgIyVkLCB0YWdnZWQgJyVzJ1xuIiwgbnRoICsgMSwgdGFnLT50YWcpOworCWdwZ19tZXNzYWdlX29mZnNldCA9IHZlcmlmeV9tZXNzYWdlLmxlbjsKKworCXBheWxvYWRfc2l6ZSA9IHBhcnNlX3NpZ25hdHVyZShleHRyYS0+dmFsdWUsIGV4dHJhLT5sZW4pOworCXN0YXR1cyA9IC0xOworCWlmIChleHRyYS0+bGVuID4gcGF5bG9hZF9zaXplKSB7CisJCS8qIGNvdWxkIGhhdmUgYSBnb29kIHNpZ25hdHVyZSAqLworCQlpZiAoIXZlcmlmeV9zaWduZWRfYnVmZmVyKGV4dHJhLT52YWx1ZSwgcGF5bG9hZF9zaXplLAorCQkJCQkgIGV4dHJhLT52YWx1ZSArIHBheWxvYWRfc2l6ZSwKKwkJCQkJICBleHRyYS0+bGVuIC0gcGF5bG9hZF9zaXplLAorCQkJCQkgICZ2ZXJpZnlfbWVzc2FnZSwgTlVMTCkpCisJCQlzdGF0dXMgPSAwOyAvKiBnb29kICovCisJCWVsc2UgaWYgKHZlcmlmeV9tZXNzYWdlLmxlbiA8PSBncGdfbWVzc2FnZV9vZmZzZXQpCisJCQlzdHJidWZfYWRkc3RyKCZ2ZXJpZnlfbWVzc2FnZSwgIk5vIHNpZ25hdHVyZVxuIik7CisJCS8qIG90aGVyd2lzZSB3ZSBjb3VsZG4ndCB2ZXJpZnksIHdoaWNoIGlzIHNob3duIGFzIGJhZCAqLworCX0KKworCXNob3dfc2lnX2xpbmVzKG9wdCwgc3RhdHVzLCB2ZXJpZnlfbWVzc2FnZS5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZ2ZXJpZnlfbWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfbWVyZ2V0YWcoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlmb3JfZWFjaF9tZXJnZXRhZyhzaG93X29uZV9tZXJnZXRhZywgY29tbWl0LCBvcHQpOworfQorCit2b2lkIHNob3dfbG9nKHN0cnVjdCByZXZfaW5mbyAqb3B0KQoreworCXN0cnVjdCBzdHJidWYgbXNnYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGxvZ19pbmZvICpsb2cgPSBvcHQtPmxvZ2luZm87CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9nLT5jb21taXQsICpwYXJlbnQgPSBsb2ctPnBhcmVudDsKKwlpbnQgYWJicmV2X2NvbW1pdCA9IG9wdC0+YWJicmV2X2NvbW1pdCA/IG9wdC0+YWJicmV2IDogNDA7CisJY29uc3QgY2hhciAqZXh0cmFfaGVhZGVycyA9IG9wdC0+ZXh0cmFfaGVhZGVyczsKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCisJb3B0LT5sb2dpbmZvID0gTlVMTDsKKwlpZiAoIW9wdC0+dmVyYm9zZV9oZWFkZXIpIHsKKwkJZ3JhcGhfc2hvd19jb21taXQob3B0LT5ncmFwaCk7CisKKwkJaWYgKCFvcHQtPmdyYXBoKQorCQkJcHV0X3JldmlzaW9uX21hcmsob3B0LCBjb21taXQpOworCQlmcHV0cyhmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgYWJicmV2X2NvbW1pdCksIHN0ZG91dCk7CisJCWlmIChvcHQtPnByaW50X3BhcmVudHMpCisJCQlzaG93X3BhcmVudHMoY29tbWl0LCBhYmJyZXZfY29tbWl0KTsKKwkJaWYgKG9wdC0+Y2hpbGRyZW4ubmFtZSkKKwkJCXNob3dfY2hpbGRyZW4ob3B0LCBjb21taXQsIGFiYnJldl9jb21taXQpOworCQlzaG93X2RlY29yYXRpb25zKG9wdCwgY29tbWl0KTsKKwkJaWYgKG9wdC0+Z3JhcGggJiYgIWdyYXBoX2lzX2NvbW1pdF9maW5pc2hlZChvcHQtPmdyYXBoKSkgeworCQkJcHV0Y2hhcignXG4nKTsKKwkJCWdyYXBoX3Nob3dfcmVtYWluZGVyKG9wdC0+Z3JhcGgpOworCQl9CisJCXB1dGNoYXIob3B0LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24pOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBJZiB1c2VfdGVybWluYXRvciBpcyBzZXQsIHdlIGFscmVhZHkgaGFuZGxlZCBhbnkgcmVjb3JkIHRlcm1pbmF0aW9uCisJICogYXQgdGhlIGVuZCBvZiB0aGUgbGFzdCByZWNvcmQuCisJICogT3RoZXJ3aXNlLCBhZGQgYSBkaWZmb3B0LmxpbmVfdGVybWluYXRpb24gY2hhcmFjdGVyIGJlZm9yZSBhbGwKKwkgKiBlbnRyaWVzIGJ1dCB0aGUgZmlyc3QuICAoSU9XLCBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIGVudHJpZXMpCisJICovCisJaWYgKG9wdC0+c2hvd25fb25lICYmICFvcHQtPnVzZV90ZXJtaW5hdG9yKSB7CisJCS8qCisJCSAqIElmIGVudHJpZXMgYXJlIHNlcGFyYXRlZCBieSBhIG5ld2xpbmUsIHRoZSBvdXRwdXQKKwkJICogc2hvdWxkIGxvb2sgaHVtYW4tcmVhZGFibGUuICBJZiB0aGUgbGFzdCBlbnRyeSBlbmRlZAorCQkgKiB3aXRoIGEgbmV3bGluZSwgcHJpbnQgdGhlIGdyYXBoIG91dHB1dCBiZWZvcmUgdGhpcworCQkgKiBuZXdsaW5lLiAgT3RoZXJ3aXNlIGl0IHdpbGwgZW5kIHVwIGFzIGEgY29tcGxldGVseSBibGFuaworCQkgKiBsaW5lIGFuZCB3aWxsIGxvb2sgbGlrZSBhIGdhcCBpbiB0aGUgZ3JhcGguCisJCSAqCisJCSAqIElmIHRoZSBlbnRyeSBzZXBhcmF0b3IgaXMgbm90IGEgbmV3bGluZSwgdGhlIG91dHB1dCBpcworCQkgKiBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIHByb2dyYW1tYXRpYyBjb25zdW1wdGlvbiwgYW5kIHdlCisJCSAqIG5ldmVyIHdhbnQgdGhlIGV4dHJhIGdyYXBoIG91dHB1dCBiZWZvcmUgdGhlIGVudHJ5CisJCSAqIHNlcGFyYXRvci4KKwkJICovCisJCWlmIChvcHQtPmRpZmZvcHQubGluZV90ZXJtaW5hdGlvbiA9PSAnXG4nICYmCisJCSAgICAhb3B0LT5taXNzaW5nX25ld2xpbmUpCisJCQlncmFwaF9zaG93X3BhZGRpbmcob3B0LT5ncmFwaCk7CisJCXB1dGNoYXIob3B0LT5kaWZmb3B0LmxpbmVfdGVybWluYXRpb24pOworCX0KKwlvcHQtPnNob3duX29uZSA9IDE7CisKKwkvKgorCSAqIElmIHRoZSBoaXN0b3J5IGdyYXBoIHdhcyByZXF1ZXN0ZWQsCisJICogcHJpbnQgdGhlIGdyYXBoLCB1cCB0byB0aGlzIGNvbW1pdCdzIGxpbmUKKwkgKi8KKwlncmFwaF9zaG93X2NvbW1pdChvcHQtPmdyYXBoKTsKKworCS8qCisJICogUHJpbnQgaGVhZGVyIGxpbmUgb2YgaGVhZGVyLi4KKwkgKi8KKworCWlmIChvcHQtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfRU1BSUwpIHsKKwkJbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMob3B0LCBjb21taXQsICZjdHguc3ViamVjdCwgJmV4dHJhX2hlYWRlcnMsCisJCQkJCSZjdHgubmVlZF84Yml0X2N0ZSk7CisJfSBlbHNlIGlmIChvcHQtPmNvbW1pdF9mb3JtYXQgIT0gQ01JVF9GTVRfVVNFUkZPUk1BVCkgeworCQlmcHV0cyhkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgRElGRl9DT01NSVQpLCBzdGRvdXQpOworCQlpZiAob3B0LT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX09ORUxJTkUpCisJCQlmcHV0cygiY29tbWl0ICIsIHN0ZG91dCk7CisKKwkJaWYgKCFvcHQtPmdyYXBoKQorCQkJcHV0X3JldmlzaW9uX21hcmsob3B0LCBjb21taXQpOworCQlmcHV0cyhmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgYWJicmV2X2NvbW1pdCksCisJCSAgICAgIHN0ZG91dCk7CisJCWlmIChvcHQtPnByaW50X3BhcmVudHMpCisJCQlzaG93X3BhcmVudHMoY29tbWl0LCBhYmJyZXZfY29tbWl0KTsKKwkJaWYgKG9wdC0+Y2hpbGRyZW4ubmFtZSkKKwkJCXNob3dfY2hpbGRyZW4ob3B0LCBjb21taXQsIGFiYnJldl9jb21taXQpOworCQlpZiAocGFyZW50KQorCQkJcHJpbnRmKCIgKGZyb20gJXMpIiwKKwkJCSAgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYocGFyZW50LT5vYmplY3Quc2hhMSwKKwkJCQkJCSAgYWJicmV2X2NvbW1pdCkpOworCQlmcHV0cyhkaWZmX2dldF9jb2xvcl9vcHQoJm9wdC0+ZGlmZm9wdCwgRElGRl9SRVNFVCksIHN0ZG91dCk7CisJCXNob3dfZGVjb3JhdGlvbnMob3B0LCBjb21taXQpOworCQlpZiAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpIHsKKwkJCXB1dGNoYXIoJyAnKTsKKwkJfSBlbHNlIHsKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCQlncmFwaF9zaG93X29uZWxpbmUob3B0LT5ncmFwaCk7CisJCX0KKwkJaWYgKG9wdC0+cmVmbG9nX2luZm8pIHsKKwkJCS8qCisJCQkgKiBzZXR1cF9yZXZpc2lvbnMoKSBlbnN1cmVzIHRoYXQgb3B0LT5yZWZsb2dfaW5mbworCQkJICogYW5kIG9wdC0+Z3JhcGggY2Fubm90IGJvdGggYmUgc2V0LAorCQkJICogc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBwcmludGluZyB0aGUKKwkJCSAqIGdyYXBoIGluZm8gaGVyZS4KKwkJCSAqLworCQkJc2hvd19yZWZsb2dfbWVzc2FnZShvcHQtPnJlZmxvZ19pbmZvLAorCQkJCQkgICAgb3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUsCisJCQkJCSAgICAmb3B0LT5kYXRlX21vZGUsCisJCQkJCSAgICBvcHQtPmRhdGVfbW9kZV9leHBsaWNpdCk7CisJCQlpZiAob3B0LT5jb21taXRfZm9ybWF0ID09IENNSVRfRk1UX09ORUxJTkUpCisJCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKG9wdC0+c2hvd19zaWduYXR1cmUpIHsKKwkJc2hvd19zaWduYXR1cmUob3B0LCBjb21taXQpOworCQlzaG93X21lcmdldGFnKG9wdCwgY29tbWl0KTsKKwl9CisKKwlpZiAoIWdldF9jYWNoZWRfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpKQorCQlyZXR1cm47CisKKwlpZiAob3B0LT5zaG93X25vdGVzKSB7CisJCWludCByYXc7CisJCXN0cnVjdCBzdHJidWYgbm90ZWJ1ZiA9IFNUUkJVRl9JTklUOworCisJCXJhdyA9IChvcHQtPmNvbW1pdF9mb3JtYXQgPT0gQ01JVF9GTVRfVVNFUkZPUk1BVCk7CisJCWZvcm1hdF9kaXNwbGF5X25vdGVzKGNvbW1pdC0+b2JqZWN0LnNoYTEsICZub3RlYnVmLAorCQkJCSAgICAgZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKSwgcmF3KTsKKwkJY3R4Lm5vdGVzX21lc3NhZ2UgPSBub3RlYnVmLmxlbgorCQkJPyBzdHJidWZfZGV0YWNoKCZub3RlYnVmLCBOVUxMKQorCQkJOiB4Y2FsbG9jKDEsIDEpOworCX0KKworCS8qCisJICogQW5kIHRoZW4gdGhlIHByZXR0eS1wcmludGVkIG1lc3NhZ2UgaXRzZWxmCisJICovCisJaWYgKGN0eC5uZWVkXzhiaXRfY3RlID49IDAgJiYgb3B0LT5hZGRfc2lnbm9mZikKKwkJY3R4Lm5lZWRfOGJpdF9jdGUgPQorCQkJaGFzX25vbl9hc2NpaShmbXRfbmFtZShnZXRlbnYoIkdJVF9DT01NSVRURVJfTkFNRSIpLAorCQkJCQkgICAgICAgZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX0VNQUlMIikpKTsKKwljdHguZGF0ZV9tb2RlID0gb3B0LT5kYXRlX21vZGU7CisJY3R4LmRhdGVfbW9kZV9leHBsaWNpdCA9IG9wdC0+ZGF0ZV9tb2RlX2V4cGxpY2l0OworCWN0eC5hYmJyZXYgPSBvcHQtPmRpZmZvcHQuYWJicmV2OworCWN0eC5hZnRlcl9zdWJqZWN0ID0gZXh0cmFfaGVhZGVyczsKKwljdHgucHJlc2VydmVfc3ViamVjdCA9IG9wdC0+cHJlc2VydmVfc3ViamVjdDsKKwljdHgucmVmbG9nX2luZm8gPSBvcHQtPnJlZmxvZ19pbmZvOworCWN0eC5mbXQgPSBvcHQtPmNvbW1pdF9mb3JtYXQ7CisJY3R4Lm1haWxtYXAgPSBvcHQtPm1haWxtYXA7CisJY3R4LmNvbG9yID0gb3B0LT5kaWZmb3B0LnVzZV9jb2xvcjsKKwljdHgub3V0cHV0X2VuY29kaW5nID0gZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKTsKKwlpZiAob3B0LT5mcm9tX2lkZW50Lm1haWxfYmVnaW4gJiYgb3B0LT5mcm9tX2lkZW50Lm5hbWVfYmVnaW4pCisJCWN0eC5mcm9tX2lkZW50ID0gJm9wdC0+ZnJvbV9pZGVudDsKKwlwcmV0dHlfcHJpbnRfY29tbWl0KCZjdHgsIGNvbW1pdCwgJm1zZ2J1Zik7CisKKwlpZiAob3B0LT5hZGRfc2lnbm9mZikKKwkJYXBwZW5kX3NpZ25vZmYoJm1zZ2J1ZiwgMCwgQVBQRU5EX1NJR05PRkZfREVEVVApOworCisJaWYgKChjdHguZm10ICE9IENNSVRfRk1UX1VTRVJGT1JNQVQpICYmCisJICAgIGN0eC5ub3Rlc19tZXNzYWdlICYmICpjdHgubm90ZXNfbWVzc2FnZSkgeworCQlpZiAoY3R4LmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCkgeworCQkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiLS0tXG4iKTsKKwkJCW9wdC0+c2hvd25fZGFzaGVzID0gMTsKKwkJfQorCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIGN0eC5ub3Rlc19tZXNzYWdlKTsKKwl9CisKKwlpZiAob3B0LT5zaG93X2xvZ19zaXplKSB7CisJCXByaW50ZigibG9nIHNpemUgJWlcbiIsIChpbnQpbXNnYnVmLmxlbik7CisJCWdyYXBoX3Nob3dfb25lbGluZShvcHQtPmdyYXBoKTsKKwl9CisKKwkvKgorCSAqIFNldCBvcHQtPm1pc3NpbmdfbmV3bGluZSBpZiBtc2didWYgZG9lc24ndAorCSAqIGVuZCBpbiBhIG5ld2xpbmUgKGluY2x1ZGluZyBpZiBpdCBpcyBlbXB0eSkKKwkgKi8KKwlpZiAoIW1zZ2J1Zi5sZW4gfHwgbXNnYnVmLmJ1Zlttc2didWYubGVuIC0gMV0gIT0gJ1xuJykKKwkJb3B0LT5taXNzaW5nX25ld2xpbmUgPSAxOworCWVsc2UKKwkJb3B0LT5taXNzaW5nX25ld2xpbmUgPSAwOworCisJaWYgKG9wdC0+Z3JhcGgpCisJCWdyYXBoX3Nob3dfY29tbWl0X21zZyhvcHQtPmdyYXBoLCAmbXNnYnVmKTsKKwllbHNlCisJCWZ3cml0ZShtc2didWYuYnVmLCBzaXplb2YoY2hhciksIG1zZ2J1Zi5sZW4sIHN0ZG91dCk7CisJaWYgKG9wdC0+dXNlX3Rlcm1pbmF0b3IgJiYgIWNvbW1pdF9mb3JtYXRfaXNfZW1wdHkob3B0LT5jb21taXRfZm9ybWF0KSkgeworCQlpZiAoIW9wdC0+bWlzc2luZ19uZXdsaW5lKQorCQkJZ3JhcGhfc2hvd19wYWRkaW5nKG9wdC0+Z3JhcGgpOworCQlwdXRjaGFyKG9wdC0+ZGlmZm9wdC5saW5lX3Rlcm1pbmF0aW9uKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmbXNnYnVmKTsKKwlmcmVlKGN0eC5ub3Rlc19tZXNzYWdlKTsKK30KKworaW50IGxvZ190cmVlX2RpZmZfZmx1c2goc3RydWN0IHJldl9pbmZvICpvcHQpCit7CisJb3B0LT5zaG93bl9kYXNoZXMgPSAwOworCWRpZmZjb3JlX3N0ZCgmb3B0LT5kaWZmb3B0KTsKKworCWlmIChkaWZmX3F1ZXVlX2lzX2VtcHR5KCkpIHsKKwkJaW50IHNhdmVkX2ZtdCA9IG9wdC0+ZGlmZm9wdC5vdXRwdXRfZm9ybWF0OworCQlvcHQtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwkJZGlmZl9mbHVzaCgmb3B0LT5kaWZmb3B0KTsKKwkJb3B0LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgPSBzYXZlZF9mbXQ7CisJCXJldHVybiAwOworCX0KKworCWlmIChvcHQtPmxvZ2luZm8gJiYgIW9wdC0+bm9fY29tbWl0X2lkKSB7CisJCXNob3dfbG9nKG9wdCk7CisJCWlmICgob3B0LT5kaWZmb3B0Lm91dHB1dF9mb3JtYXQgJiB+RElGRl9GT1JNQVRfTk9fT1VUUFVUKSAmJgorCQkgICAgb3B0LT52ZXJib3NlX2hlYWRlciAmJgorCQkgICAgb3B0LT5jb21taXRfZm9ybWF0ICE9IENNSVRfRk1UX09ORUxJTkUgJiYKKwkJICAgICFjb21taXRfZm9ybWF0X2lzX2VtcHR5KG9wdC0+Y29tbWl0X2Zvcm1hdCkpIHsKKwkJCS8qCisJCQkgKiBXaGVuIHNob3dpbmcgYSB2ZXJib3NlIGhlYWRlciAoaS5lLiBsb2cgbWVzc2FnZSksCisJCQkgKiBhbmQgbm90IGluIC0tcHJldHR5PW9uZWxpbmUgZm9ybWF0LCB3ZSB3b3VsZCB3YW50CisJCQkgKiBhbiBleHRyYSBuZXdsaW5lIGJldHdlZW4gdGhlIGVuZCBvZiBsb2cgYW5kIHRoZQorCQkJICogZGlmZi9kaWZmc3RhdCBvdXRwdXQgZm9yIHJlYWRhYmlsaXR5LgorCQkJICovCisJCQlpbnQgcGNoID0gRElGRl9GT1JNQVRfRElGRlNUQVQgfCBESUZGX0ZPUk1BVF9QQVRDSDsKKwkJCWlmIChvcHQtPmRpZmZvcHQub3V0cHV0X3ByZWZpeCkgeworCQkJCXN0cnVjdCBzdHJidWYgKm1zZyA9IE5VTEw7CisJCQkJbXNnID0gb3B0LT5kaWZmb3B0Lm91dHB1dF9wcmVmaXgoJm9wdC0+ZGlmZm9wdCwKKwkJCQkJb3B0LT5kaWZmb3B0Lm91dHB1dF9wcmVmaXhfZGF0YSk7CisJCQkJZndyaXRlKG1zZy0+YnVmLCBtc2ctPmxlbiwgMSwgc3Rkb3V0KTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFdlIG1heSBoYXZlIHNob3duIHRocmVlLWRhc2hlcyBsaW5lIGVhcmx5CisJCQkgKiBiZXR3ZWVuIG5vdGVzIGFuZCB0aGUgbG9nIG1lc3NhZ2UsIGluIHdoaWNoCisJCQkgKiBjYXNlIHdlIG9ubHkgd2FudCBhIGJsYW5rIGxpbmUgYWZ0ZXIgdGhlCisJCQkgKiBub3RlcyB3aXRob3V0IChhbiBleHRyYSkgdGhyZWUtZGFzaGVzIGxpbmUuCisJCQkgKiBPdGhlcndpc2UsIHdlIHNob3cgdGhlIHRocmVlLWRhc2hlcyBsaW5lIGlmCisJCQkgKiB3ZSBhcmUgc2hvd2luZyB0aGUgcGF0Y2ggd2l0aCBkaWZmc3RhdCwgYnV0CisJCQkgKiBpbiB0aGF0IGNhc2UsIHRoZXJlIGlzIG5vIGV4dHJhIGJsYW5rIGxpbmUKKwkJCSAqIGFmdGVyIHRoZSB0aHJlZS1kYXNoZXMgbGluZS4KKwkJCSAqLworCQkJaWYgKCFvcHQtPnNob3duX2Rhc2hlcyAmJgorCQkJICAgIChwY2ggJiBvcHQtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCkgPT0gcGNoKQorCQkJCXByaW50ZigiLS0tIik7CisJCQlwdXRjaGFyKCdcbicpOworCQl9CisJfQorCWRpZmZfZmx1c2goJm9wdC0+ZGlmZm9wdCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZG9fZGlmZl9jb21iaW5lZChzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWRpZmZfdHJlZV9jb21iaW5lZF9tZXJnZShjb21taXQsIG9wdC0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzLCBvcHQpOworCXJldHVybiAhb3B0LT5sb2dpbmZvOworfQorCisvKgorICogU2hvdyB0aGUgZGlmZiBvZiBhIGNvbW1pdC4KKyAqCisgKiBSZXR1cm4gdHJ1ZSBpZiB3ZSBwcmludGVkIGFueSBsb2cgaW5mbyBtZXNzYWdlcworICovCitzdGF0aWMgaW50IGxvZ190cmVlX2RpZmYoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGxvZ19pbmZvICpsb2cpCit7CisJaW50IHNob3dlZF9sb2c7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCXVuc2lnbmVkIGNvbnN0IGNoYXIgKnNoYTE7CisKKwlpZiAoIW9wdC0+ZGlmZiAmJiAhRElGRl9PUFRfVFNUKCZvcHQtPmRpZmZvcHQsIEVYSVRfV0lUSF9TVEFUVVMpKQorCQlyZXR1cm4gMDsKKworCXBhcnNlX2NvbW1pdF9vcl9kaWUoY29tbWl0KTsKKwlzaGExID0gY29tbWl0LT50cmVlLT5vYmplY3Quc2hhMTsKKworCS8qIFJvb3QgY29tbWl0PyAqLworCXBhcmVudHMgPSBnZXRfc2F2ZWRfcGFyZW50cyhvcHQsIGNvbW1pdCk7CisJaWYgKCFwYXJlbnRzKSB7CisJCWlmIChvcHQtPnNob3dfcm9vdF9kaWZmKSB7CisJCQlkaWZmX3Jvb3RfdHJlZV9zaGExKHNoYTEsICIiLCAmb3B0LT5kaWZmb3B0KTsKKwkJCWxvZ190cmVlX2RpZmZfZmx1c2gob3B0KTsKKwkJfQorCQlyZXR1cm4gIW9wdC0+bG9naW5mbzsKKwl9CisKKwkvKiBNb3JlIHRoYW4gb25lIHBhcmVudD8gKi8KKwlpZiAocGFyZW50cyAmJiBwYXJlbnRzLT5uZXh0KSB7CisJCWlmIChvcHQtPmlnbm9yZV9tZXJnZXMpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAob3B0LT5jb21iaW5lX21lcmdlcykKKwkJCXJldHVybiBkb19kaWZmX2NvbWJpbmVkKG9wdCwgY29tbWl0KTsKKwkJZWxzZSBpZiAob3B0LT5maXJzdF9wYXJlbnRfb25seSkgeworCQkJLyoKKwkJCSAqIEdlbmVyYXRlIG1lcmdlIGxvZyBlbnRyeSBvbmx5IGZvciB0aGUgZmlyc3QKKwkJCSAqIHBhcmVudCwgc2hvd2luZyBzdW1tYXJ5IGRpZmYgb2YgdGhlIG90aGVycworCQkJICogd2UgbWVyZ2VkIF9pbl8uCisJCQkgKi8KKwkJCXBhcnNlX2NvbW1pdF9vcl9kaWUocGFyZW50cy0+aXRlbSk7CisJCQlkaWZmX3RyZWVfc2hhMShwYXJlbnRzLT5pdGVtLT50cmVlLT5vYmplY3Quc2hhMSwKKwkJCQkgICAgICAgc2hhMSwgIiIsICZvcHQtPmRpZmZvcHQpOworCQkJbG9nX3RyZWVfZGlmZl9mbHVzaChvcHQpOworCQkJcmV0dXJuICFvcHQtPmxvZ2luZm87CisJCX0KKworCQkvKiBJZiB3ZSBzaG93IGluZGl2aWR1YWwgZGlmZnMsIHNob3cgdGhlIHBhcmVudCBpbmZvICovCisJCWxvZy0+cGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwl9CisKKwlzaG93ZWRfbG9nID0gMDsKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHBhcmVudHMtPml0ZW07CisKKwkJcGFyc2VfY29tbWl0X29yX2RpZShwYXJlbnQpOworCQlkaWZmX3RyZWVfc2hhMShwYXJlbnQtPnRyZWUtPm9iamVjdC5zaGExLAorCQkJICAgICAgIHNoYTEsICIiLCAmb3B0LT5kaWZmb3B0KTsKKwkJbG9nX3RyZWVfZGlmZl9mbHVzaChvcHQpOworCisJCXNob3dlZF9sb2cgfD0gIW9wdC0+bG9naW5mbzsKKworCQkvKiBTZXQgdXAgdGhlIGxvZyBpbmZvIGZvciB0aGUgbmV4dCBwYXJlbnQsIGlmIGFueS4uICovCisJCXBhcmVudHMgPSBwYXJlbnRzLT5uZXh0OworCQlpZiAoIXBhcmVudHMpCisJCQlicmVhazsKKwkJbG9nLT5wYXJlbnQgPSBwYXJlbnRzLT5pdGVtOworCQlvcHQtPmxvZ2luZm8gPSBsb2c7CisJfQorCXJldHVybiBzaG93ZWRfbG9nOworfQorCitpbnQgbG9nX3RyZWVfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqb3B0LCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGxvZ19pbmZvIGxvZzsKKwlpbnQgc2hvd247CisKKwlsb2cuY29tbWl0ID0gY29tbWl0OworCWxvZy5wYXJlbnQgPSBOVUxMOworCW9wdC0+bG9naW5mbyA9ICZsb2c7CisKKwlpZiAob3B0LT5saW5lX2xldmVsX3RyYXZlcnNlKQorCQlyZXR1cm4gbGluZV9sb2dfcHJpbnQob3B0LCBjb21taXQpOworCisJaWYgKG9wdC0+dHJhY2tfbGluZWFyICYmICFvcHQtPmxpbmVhciAmJiAhb3B0LT5yZXZlcnNlX291dHB1dF9zdGFnZSkKKwkJcHJpbnRmKCJcbiVzXG4iLCBvcHQtPmJyZWFrX2Jhcik7CisJc2hvd24gPSBsb2dfdHJlZV9kaWZmKG9wdCwgY29tbWl0LCAmbG9nKTsKKwlpZiAoIXNob3duICYmIG9wdC0+bG9naW5mbyAmJiBvcHQtPmFsd2F5c19zaG93X2hlYWRlcikgeworCQlsb2cucGFyZW50ID0gTlVMTDsKKwkJc2hvd19sb2cob3B0KTsKKwkJc2hvd24gPSAxOworCX0KKwlpZiAob3B0LT50cmFja19saW5lYXIgJiYgIW9wdC0+bGluZWFyICYmIG9wdC0+cmV2ZXJzZV9vdXRwdXRfc3RhZ2UpCisJCXByaW50ZigiXG4lc1xuIiwgb3B0LT5icmVha19iYXIpOworCW9wdC0+bG9naW5mbyA9IE5VTEw7CisJbWF5YmVfZmx1c2hfb3JfZGllKHN0ZG91dCwgInN0ZG91dCIpOworCXJldHVybiBzaG93bjsKK30KZGlmZiAtLWdpdCBhL2xvZy10cmVlLmggYi9sb2ctdHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MTE2ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9sb2ctdHJlZS5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgTE9HX1RSRUVfSAorI2RlZmluZSBMT0dfVFJFRV9ICisKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorCitzdHJ1Y3QgbG9nX2luZm8geworCXN0cnVjdCBjb21taXQgKmNvbW1pdCwgKnBhcmVudDsKK307CisKK2ludCBwYXJzZV9kZWNvcmF0ZV9jb2xvcl9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICpzbG90X25hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgaW5pdF9sb2dfdHJlZV9vcHQoc3RydWN0IHJldl9pbmZvICopOworaW50IGxvZ190cmVlX2RpZmZfZmx1c2goc3RydWN0IHJldl9pbmZvICopOworaW50IGxvZ190cmVlX2NvbW1pdChzdHJ1Y3QgcmV2X2luZm8gKiwgc3RydWN0IGNvbW1pdCAqKTsKK2ludCBsb2dfdHJlZV9vcHRfcGFyc2Uoc3RydWN0IHJldl9pbmZvICosIGNvbnN0IGNoYXIgKiosIGludCk7Cit2b2lkIHNob3dfbG9nKHN0cnVjdCByZXZfaW5mbyAqb3B0KTsKK3ZvaWQgZm9ybWF0X2RlY29yYXRpb25zX2V4dGVuZGVkKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgICAgIGludCB1c2VfY29sb3IsCisJCQkgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgICAgY29uc3QgY2hhciAqc2VwYXJhdG9yLAorCQkJICAgICBjb25zdCBjaGFyICpzdWZmaXgpOworI2RlZmluZSBmb3JtYXRfZGVjb3JhdGlvbnMoc3RyYnVmLCBjb21taXQsIGNvbG9yKSBcCisJCQkgICAgIGZvcm1hdF9kZWNvcmF0aW9uc19leHRlbmRlZCgoc3RyYnVmKSwgKGNvbW1pdCksIChjb2xvciksICIgKCIsICIsICIsICIpIikKK3ZvaWQgc2hvd19kZWNvcmF0aW9ucyhzdHJ1Y3QgcmV2X2luZm8gKm9wdCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKK3ZvaWQgbG9nX3dyaXRlX2VtYWlsX2hlYWRlcnMoc3RydWN0IHJldl9pbmZvICpvcHQsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICAgY29uc3QgY2hhciAqKnN1YmplY3RfcCwKKwkJCSAgICAgY29uc3QgY2hhciAqKmV4dHJhX2hlYWRlcnNfcCwKKwkJCSAgICAgaW50ICpuZWVkXzhiaXRfY3RlX3ApOwordm9pZCBsb2FkX3JlZl9kZWNvcmF0aW9ucyhpbnQgZmxhZ3MpOworCisjZGVmaW5lIEZPUk1BVF9QQVRDSF9OQU1FX01BWCA2NAordm9pZCBmbXRfb3V0cHV0X2NvbW1pdChzdHJ1Y3Qgc3RyYnVmICosIHN0cnVjdCBjb21taXQgKiwgc3RydWN0IHJldl9pbmZvICopOwordm9pZCBmbXRfb3V0cHV0X3N1YmplY3Qoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICpzdWJqZWN0LCBzdHJ1Y3QgcmV2X2luZm8gKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWFpbGluZm8uYyBiL21haWxpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1N2NhNgotLS0gL2Rldi9udWxsCisrKyBiL21haWxpbmZvLmMKQEAgLTAsMCArMSwxMDM3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAibWFpbGluZm8uaCIKKworc3RhdGljIHZvaWQgY2xlYW51cF9zcGFjZShzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzaXplX3QgcG9zLCBjbnQ7CisJZm9yIChwb3MgPSAwOyBwb3MgPCBzYi0+bGVuOyBwb3MrKykgeworCQlpZiAoaXNzcGFjZShzYi0+YnVmW3Bvc10pKSB7CisJCQlzYi0+YnVmW3Bvc10gPSAnICc7CisJCQlmb3IgKGNudCA9IDA7IGlzc3BhY2Uoc2ItPmJ1Zltwb3MgKyBjbnQgKyAxXSk7IGNudCsrKTsKKwkJCXN0cmJ1Zl9yZW1vdmUoc2IsIHBvcyArIDEsIGNudCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zYW5lX25hbWUoc3RydWN0IHN0cmJ1ZiAqb3V0LCBzdHJ1Y3Qgc3RyYnVmICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICplbWFpbCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpzcmMgPSBuYW1lOworCWlmIChuYW1lLT5sZW4gPCAzIHx8IDYwIDwgbmFtZS0+bGVuIHx8IHN0cmNocihuYW1lLT5idWYsICdAJykgfHwKKwkJc3RyY2hyKG5hbWUtPmJ1ZiwgJzwnKSB8fCBzdHJjaHIobmFtZS0+YnVmLCAnPicpKQorCQlzcmMgPSBlbWFpbDsKKwllbHNlIGlmIChuYW1lID09IG91dCkKKwkJcmV0dXJuOworCXN0cmJ1Zl9yZXNldChvdXQpOworCXN0cmJ1Zl9hZGRidWYob3V0LCBzcmMpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9ib2d1c19mcm9tKHN0cnVjdCBtYWlsaW5mbyAqbWksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJLyogSm9obiBEb2UgPGpvaG5kb2U+ICovCisKKwljaGFyICpicmEsICprZXQ7CisJLyogVGhpcyBpcyBmYWxsYmFjaywgc28gZG8gbm90IGJvdGhlciBpZiB3ZSBhbHJlYWR5IGhhdmUgYW4KKwkgKiBlLW1haWwgYWRkcmVzcy4KKwkgKi8KKwlpZiAobWktPmVtYWlsLmxlbikKKwkJcmV0dXJuOworCisJYnJhID0gc3RyY2hyKGxpbmUtPmJ1ZiwgJzwnKTsKKwlpZiAoIWJyYSkKKwkJcmV0dXJuOworCWtldCA9IHN0cmNocihicmEsICc+Jyk7CisJaWYgKCFrZXQpCisJCXJldHVybjsKKworCXN0cmJ1Zl9yZXNldCgmbWktPmVtYWlsKTsKKwlzdHJidWZfYWRkKCZtaS0+ZW1haWwsIGJyYSArIDEsIGtldCAtIGJyYSAtIDEpOworCisJc3RyYnVmX3Jlc2V0KCZtaS0+bmFtZSk7CisJc3RyYnVmX2FkZCgmbWktPm5hbWUsIGxpbmUtPmJ1ZiwgYnJhIC0gbGluZS0+YnVmKTsKKwlzdHJidWZfdHJpbSgmbWktPm5hbWUpOworCWdldF9zYW5lX25hbWUoJm1pLT5uYW1lLCAmbWktPm5hbWUsICZtaS0+ZW1haWwpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfZnJvbShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpmcm9tKQoreworCWNoYXIgKmF0OworCXNpemVfdCBlbDsKKwlzdHJ1Y3Qgc3RyYnVmIGY7CisKKwlzdHJidWZfaW5pdCgmZiwgZnJvbS0+bGVuKTsKKwlzdHJidWZfYWRkYnVmKCZmLCBmcm9tKTsKKworCWF0ID0gc3RyY2hyKGYuYnVmLCAnQCcpOworCWlmICghYXQpIHsKKwkJcGFyc2VfYm9ndXNfZnJvbShtaSwgZnJvbSk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHdlIGFscmVhZHkgaGF2ZSBvbmUgZW1haWwsIGRvbid0IHRha2UgYW55IGNvbmZ1c2luZyBsaW5lcworCSAqLworCWlmIChtaS0+ZW1haWwubGVuICYmIHN0cmNocihhdCArIDEsICdAJykpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmYpOworCQlyZXR1cm47CisJfQorCisJLyogUGljayB1cCB0aGUgc3RyaW5nIGFyb3VuZCAnQCcsIHBvc3NpYmx5IGRlbGltaXRlZCB3aXRoIDw+CisJICogcGFpcjsgdGhhdCBpcyB0aGUgZW1haWwgcGFydC4KKwkgKi8KKwl3aGlsZSAoYXQgPiBmLmJ1ZikgeworCQljaGFyIGMgPSBhdFstMV07CisJCWlmIChpc3NwYWNlKGMpKQorCQkJYnJlYWs7CisJCWlmIChjID09ICc8JykgeworCQkJYXRbLTFdID0gJyAnOworCQkJYnJlYWs7CisJCX0KKwkJYXQtLTsKKwl9CisJZWwgPSBzdHJjc3BuKGF0LCAiIFxuXHRcclx2XGY+Iik7CisJc3RyYnVmX3Jlc2V0KCZtaS0+ZW1haWwpOworCXN0cmJ1Zl9hZGQoJm1pLT5lbWFpbCwgYXQsIGVsKTsKKwlzdHJidWZfcmVtb3ZlKCZmLCBhdCAtIGYuYnVmLCBlbCArIChhdFtlbF0gPyAxIDogMCkpOworCisJLyogVGhlIHJlbWFpbmRlciBpcyBuYW1lLiAgSXQgY291bGQgYmUKKwkgKgorCSAqIC0gIkpvaG4gRG9lIDxqb2huLmRvZUB4ej4iCQkJKGEpLCBvcgorCSAqIC0gImpvaG4uZG9lQHh6IChKb2huIERvZSkiCQkJKGIpLCBvcgorCSAqIC0gIkpvaG4gKHp6eikgRG9lIDxqb2huLmRvZUB4ej4gKENvbW1lbnQpIgkoYykKKwkgKgorCSAqIGJ1dCB3ZSBoYXZlIHJlbW92ZWQgdGhlIGVtYWlsIHBhcnQsIHNvCisJICoKKwkgKiAtIHJlbW92ZSBleHRyYSBzcGFjZXMgd2hpY2ggY291bGQgc3RheSBhZnRlciBlbWFpbCAoY2FzZSAnYycpLCBhbmQKKwkgKiAtIHRyaW0gZnJvbSBib3RoIGVuZHMsIHBvc3NpYmx5IHJlbW92aW5nIHRoZSAoKSBwYWlyIGF0IHRoZSBlbmQKKwkgKiAgIChjYXNlcyAnYScgYW5kICdiJykuCisJICovCisJY2xlYW51cF9zcGFjZSgmZik7CisJc3RyYnVmX3RyaW0oJmYpOworCWlmIChmLmJ1ZlswXSA9PSAnKCcgJiYgZi5sZW4gJiYgZi5idWZbZi5sZW4gLSAxXSA9PSAnKScpIHsKKwkJc3RyYnVmX3JlbW92ZSgmZiwgMCwgMSk7CisJCXN0cmJ1Zl9zZXRsZW4oJmYsIGYubGVuIC0gMSk7CisJfQorCisJZ2V0X3NhbmVfbmFtZSgmbWktPm5hbWUsICZmLCAmbWktPmVtYWlsKTsKKwlzdHJidWZfcmVsZWFzZSgmZik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9oZWFkZXIoc3RydWN0IHN0cmJ1ZiAqKm91dCwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlpZiAoISpvdXQpIHsKKwkJKm91dCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKTsKKwkJc3RyYnVmX2luaXQoKm91dCwgbGluZS0+bGVuKTsKKwl9IGVsc2UKKwkJc3RyYnVmX3Jlc2V0KCpvdXQpOworCisJc3RyYnVmX2FkZGJ1Zigqb3V0LCBsaW5lKTsKK30KKworLyogTk9URSBOT1RFIE5PVEUuICBXZSBkbyBub3QgY2xhaW0gd2UgZG8gZnVsbCBNSU1FLiAgV2UganVzdCBhdHRlbXB0CisgKiB0byBoYXZlIGVub3VnaCBoZXVyaXN0aWNzIHRvIGdyb2sgTUlNRSBlbmNvZGVkIHBhdGNoZXMgb2Z0ZW4gZm91bmQKKyAqIG9uIG91ciBtYWlsaW5nIGxpc3RzLiAgRm9yIGV4YW1wbGUsIHdlIGRvIG5vdCBldmVuIHRyZWF0IGhlYWRlciBsaW5lcworICogY2FzZSBpbnNlbnNpdGl2ZWx5LgorICovCisKK3N0YXRpYyBpbnQgc2x1cnBfYXR0cihjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICphdHRyKQoreworCWNvbnN0IGNoYXIgKmVuZHMsICphcCA9IHN0cmNhc2VzdHIobGluZSwgbmFtZSk7CisJc2l6ZV90IHN6OworCisJc3RyYnVmX3NldGxlbihhdHRyLCAwKTsKKwlpZiAoIWFwKQorCQlyZXR1cm4gMDsKKwlhcCArPSBzdHJsZW4obmFtZSk7CisJaWYgKCphcCA9PSAnIicpIHsKKwkJYXArKzsKKwkJZW5kcyA9ICJcIiI7CisJfQorCWVsc2UKKwkJZW5kcyA9ICI7IFx0IjsKKwlzeiA9IHN0cmNzcG4oYXAsIGVuZHMpOworCXN0cmJ1Zl9hZGQoYXR0ciwgYXAsIHN6KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2NvbnRlbnRfdHlwZShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgKmJvdW5kYXJ5ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0cmJ1ZikpOworCXN0cmJ1Zl9pbml0KGJvdW5kYXJ5LCBsaW5lLT5sZW4pOworCisJaWYgKHNsdXJwX2F0dHIobGluZS0+YnVmLCAiYm91bmRhcnk9IiwgYm91bmRhcnkpKSB7CisJCXN0cmJ1Zl9pbnNlcnQoYm91bmRhcnksIDAsICItLSIsIDIpOworCQlpZiAoKyttaS0+Y29udGVudF90b3AgPj0gJm1pLT5jb250ZW50W01BWF9CT1VOREFSSUVTXSkgeworCQkJZXJyb3IoIlRvbyBtYW55IGJvdW5kYXJpZXMgdG8gaGFuZGxlIik7CisJCQltaS0+aW5wdXRfZXJyb3IgPSAtMTsKKwkJCW1pLT5jb250ZW50X3RvcCA9ICZtaS0+Y29udGVudFtNQVhfQk9VTkRBUklFU10gLSAxOworCQkJcmV0dXJuOworCQl9CisJCSoobWktPmNvbnRlbnRfdG9wKSA9IGJvdW5kYXJ5OworCQlib3VuZGFyeSA9IE5VTEw7CisJfQorCXNsdXJwX2F0dHIobGluZS0+YnVmLCAiY2hhcnNldD0iLCAmbWktPmNoYXJzZXQpOworCisJaWYgKGJvdW5kYXJ5KSB7CisJCXN0cmJ1Zl9yZWxlYXNlKGJvdW5kYXJ5KTsKKwkJZnJlZShib3VuZGFyeSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfbWVzc2FnZV9pZChzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCWlmIChtaS0+YWRkX21lc3NhZ2VfaWQpCisJCW1pLT5tZXNzYWdlX2lkID0gc3RyZHVwKGxpbmUtPmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jb250ZW50X3RyYW5zZmVyX2VuY29kaW5nKHN0cnVjdCBtYWlsaW5mbyAqbWksCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlpZiAoc3RyY2FzZXN0cihsaW5lLT5idWYsICJiYXNlNjQiKSkKKwkJbWktPnRyYW5zZmVyX2VuY29kaW5nID0gVEVfQkFTRTY0OworCWVsc2UgaWYgKHN0cmNhc2VzdHIobGluZS0+YnVmLCAicXVvdGVkLXByaW50YWJsZSIpKQorCQltaS0+dHJhbnNmZXJfZW5jb2RpbmcgPSBURV9RUDsKKwllbHNlCisJCW1pLT50cmFuc2Zlcl9lbmNvZGluZyA9IFRFX0RPTlRDQVJFOworfQorCitzdGF0aWMgaW50IGlzX211bHRpcGFydF9ib3VuZGFyeShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgKmNvbnRlbnRfdG9wID0gKihtaS0+Y29udGVudF90b3ApOworCisJcmV0dXJuICgoY29udGVudF90b3AtPmxlbiA8PSBsaW5lLT5sZW4pICYmCisJCSFtZW1jbXAobGluZS0+YnVmLCBjb250ZW50X3RvcC0+YnVmLCBjb250ZW50X3RvcC0+bGVuKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfc3ViamVjdChzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpzdWJqZWN0KQoreworCXNpemVfdCBhdCA9IDA7CisKKwl3aGlsZSAoYXQgPCBzdWJqZWN0LT5sZW4pIHsKKwkJY2hhciAqcG9zOworCQlzaXplX3QgcmVtb3ZlOworCisJCXN3aXRjaCAoc3ViamVjdC0+YnVmW2F0XSkgeworCQljYXNlICdyJzogY2FzZSAnUic6CisJCQlpZiAoc3ViamVjdC0+bGVuIDw9IGF0ICsgMykKKwkJCQlicmVhazsKKwkJCWlmICgoc3ViamVjdC0+YnVmW2F0ICsgMV0gPT0gJ2UnIHx8CisJCQkgICAgIHN1YmplY3QtPmJ1ZlthdCArIDFdID09ICdFJykgJiYKKwkJCSAgICBzdWJqZWN0LT5idWZbYXQgKyAyXSA9PSAnOicpIHsKKwkJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCAzKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWF0Kys7CisJCQlicmVhazsKKwkJY2FzZSAnICc6IGNhc2UgJ1x0JzogY2FzZSAnOic6CisJCQlzdHJidWZfcmVtb3ZlKHN1YmplY3QsIGF0LCAxKTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdbJzoKKwkJCXBvcyA9IHN0cmNocihzdWJqZWN0LT5idWYgKyBhdCwgJ10nKTsKKwkJCWlmICghcG9zKQorCQkJCWJyZWFrOworCQkJcmVtb3ZlID0gcG9zIC0gc3ViamVjdC0+YnVmICsgYXQgKyAxOworCQkJaWYgKCFtaS0+a2VlcF9ub25fcGF0Y2hfYnJhY2tldHNfaW5fc3ViamVjdCB8fAorCQkJICAgICg3IDw9IHJlbW92ZSAmJgorCQkJICAgICBtZW1tZW0oc3ViamVjdC0+YnVmICsgYXQsIHJlbW92ZSwgIlBBVENIIiwgNSkpKQorCQkJCXN0cmJ1Zl9yZW1vdmUoc3ViamVjdCwgYXQsIHJlbW92ZSk7CisJCQllbHNlIHsKKwkJCQlhdCArPSByZW1vdmU7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgaW5wdXQgaGFkIGEgc3BhY2UgYWZ0ZXIgdGhlIF0sIGtlZXAKKwkJCQkgKiBpdC4gIFdlIGRvbid0IGJvdGhlciB3aXRoIGZpbmRpbmcgdGhlIGVuZCBvZgorCQkJCSAqIHRoZSBzcGFjZSwgc2luY2Ugd2UgbGF0ZXIgbm9ybWFsaXplIGl0CisJCQkJICogYW55d2F5LgorCQkJCSAqLworCQkJCWlmIChpc3NwYWNlKHN1YmplY3QtPmJ1ZlthdF0pKQorCQkJCQlhdCArPSAxOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJfQorCXN0cmJ1Zl90cmltKHN1YmplY3QpOworfQorCisjZGVmaW5lIE1BWF9IRFJfUEFSU0VEIDEwCitzdGF0aWMgY29uc3QgY2hhciAqaGVhZGVyW01BWF9IRFJfUEFSU0VEXSA9IHsKKwkiRnJvbSIsIlN1YmplY3QiLCJEYXRlIiwKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGNtcF9oZWFkZXIoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSwgY29uc3QgY2hhciAqaGRyKQoreworCWludCBsZW4gPSBzdHJsZW4oaGRyKTsKKwlyZXR1cm4gIXN0cm5jYXNlY21wKGxpbmUtPmJ1ZiwgaGRyLCBsZW4pICYmIGxpbmUtPmxlbiA+IGxlbiAmJgorCQkJbGluZS0+YnVmW2xlbl0gPT0gJzonICYmIGlzc3BhY2UobGluZS0+YnVmW2xlbiArIDFdKTsKK30KKworc3RhdGljIGludCBpc19mb3JtYXRfcGF0Y2hfc2VwYXJhdG9yKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgU0FNUExFW10gPQorCQkiRnJvbSBlNjgwN2YzZWZjYTI4YjMwZGVjZmVjYjE3MzJhNTZjN2RiMTEzN2VlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMVxuIjsKKwljb25zdCBjaGFyICpjcDsKKworCWlmIChsZW4gIT0gc3RybGVuKFNBTVBMRSkpCisJCXJldHVybiAwOworCWlmICghc2tpcF9wcmVmaXgobGluZSwgIkZyb20gIiwgJmNwKSkKKwkJcmV0dXJuIDA7CisJaWYgKHN0cnNwbihjcCwgIjAxMjM0NTY3ODlhYmNkZWYiKSAhPSA0MCkKKwkJcmV0dXJuIDA7CisJY3AgKz0gNDA7CisJcmV0dXJuICFtZW1jbXAoU0FNUExFICsgKGNwIC0gbGluZSksIGNwLCBzdHJsZW4oU0FNUExFKSAtIChjcCAtIGxpbmUpKTsKK30KKworc3RhdGljIHN0cnVjdCBzdHJidWYgKmRlY29kZV9xX3NlZ21lbnQoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqcV9zZWcsIGludCByZmMyMDQ3KQoreworCWNvbnN0IGNoYXIgKmluID0gcV9zZWctPmJ1ZjsKKwlpbnQgYzsKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJc3RyYnVmX2luaXQob3V0LCBxX3NlZy0+bGVuKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCWlmIChjID09ICc9JykgeworCQkJaW50IGQgPSAqaW4rKzsKKwkJCWlmIChkID09ICdcbicgfHwgIWQpCisJCQkJYnJlYWs7IC8qIGRyb3AgdHJhaWxpbmcgbmV3bGluZSAqLworCQkJc3RyYnVmX2FkZGNoKG91dCwgKGhleHZhbChkKSA8PCA0KSB8IGhleHZhbCgqaW4rKykpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJmYzIwNDcgJiYgYyA9PSAnXycpIC8qIHJmYzIwNDcgNC4yICgyKSAqLworCQkJYyA9IDB4MjA7CisJCXN0cmJ1Zl9hZGRjaChvdXQsIGMpOworCX0KKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiAqZGVjb2RlX2Jfc2VnbWVudChjb25zdCBzdHJ1Y3Qgc3RyYnVmICpiX3NlZykKK3sKKwkvKiBEZWNvZGUgaW4uLmVwLCBwb3NzaWJseSBpbi1wbGFjZSB0byBvdCAqLworCWludCBjLCBwb3MgPSAwLCBhY2MgPSAwOworCWNvbnN0IGNoYXIgKmluID0gYl9zZWctPmJ1ZjsKKwlzdHJ1Y3Qgc3RyYnVmICpvdXQgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RyYnVmKSk7CisJc3RyYnVmX2luaXQob3V0LCBiX3NlZy0+bGVuKTsKKworCXdoaWxlICgoYyA9ICppbisrKSAhPSAwKSB7CisJCWlmIChjID09ICcrJykKKwkJCWMgPSA2MjsKKwkJZWxzZSBpZiAoYyA9PSAnLycpCisJCQljID0gNjM7CisJCWVsc2UgaWYgKCdBJyA8PSBjICYmIGMgPD0gJ1onKQorCQkJYyAtPSAnQSc7CisJCWVsc2UgaWYgKCdhJyA8PSBjICYmIGMgPD0gJ3onKQorCQkJYyAtPSAnYScgLSAyNjsKKwkJZWxzZSBpZiAoJzAnIDw9IGMgJiYgYyA8PSAnOScpCisJCQljIC09ICcwJyAtIDUyOworCQllbHNlCisJCQljb250aW51ZTsgLyogZ2FyYmFnZSAqLworCQlzd2l0Y2ggKHBvcysrKSB7CisJCWNhc2UgMDoKKwkJCWFjYyA9IChjIDw8IDIpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsIChhY2MgfCAoYyA+PiA0KSkpOworCQkJYWNjID0gKGMgJiAxNSkgPDwgNDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzdHJidWZfYWRkY2gob3V0LCAoYWNjIHwgKGMgPj4gMikpKTsKKwkJCWFjYyA9IChjICYgMykgPDwgNjsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlzdHJidWZfYWRkY2gob3V0LCAoYWNjIHwgYykpOworCQkJYWNjID0gcG9zID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgY29udmVydF90b191dGY4KHN0cnVjdCBtYWlsaW5mbyAqbWksCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICpsaW5lLCBjb25zdCBjaGFyICpjaGFyc2V0KQoreworCWNoYXIgKm91dDsKKworCWlmICghbWktPm1ldGFpbmZvX2NoYXJzZXQgfHwgIWNoYXJzZXQgfHwgISpjaGFyc2V0KQorCQlyZXR1cm4gMDsKKworCWlmIChzYW1lX2VuY29kaW5nKG1pLT5tZXRhaW5mb19jaGFyc2V0LCBjaGFyc2V0KSkKKwkJcmV0dXJuIDA7CisJb3V0ID0gcmVlbmNvZGVfc3RyaW5nKGxpbmUtPmJ1ZiwgbWktPm1ldGFpbmZvX2NoYXJzZXQsIGNoYXJzZXQpOworCWlmICghb3V0KSB7CisJCW1pLT5pbnB1dF9lcnJvciA9IC0xOworCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBjb252ZXJ0IGZyb20gJXMgdG8gJXMiLAorCQkJICAgICBjaGFyc2V0LCBtaS0+bWV0YWluZm9fY2hhcnNldCk7CisJfQorCXN0cmJ1Zl9hdHRhY2gobGluZSwgb3V0LCBzdHJsZW4ob3V0KSwgc3RybGVuKG91dCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfaGVhZGVyKHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKml0KQoreworCWNoYXIgKmluLCAqZXAsICpjcDsKKwlzdHJ1Y3Qgc3RyYnVmIG91dGJ1ZiA9IFNUUkJVRl9JTklULCAqZGVjOworCXN0cnVjdCBzdHJidWYgY2hhcnNldF9xID0gU1RSQlVGX0lOSVQsIHBpZWNlYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGZvdW5kX2Vycm9yID0gMTsgLyogcGVzc2ltaXNtICovCisKKwlpbiA9IGl0LT5idWY7CisJd2hpbGUgKGluIC0gaXQtPmJ1ZiA8PSBpdC0+bGVuICYmIChlcCA9IHN0cnN0cihpbiwgIj0/IikpICE9IE5VTEwpIHsKKwkJaW50IGVuY29kaW5nOworCQlzdHJidWZfcmVzZXQoJmNoYXJzZXRfcSk7CisJCXN0cmJ1Zl9yZXNldCgmcGllY2VidWYpOworCisJCWlmIChpbiAhPSBlcCkgeworCQkJLyoKKwkJCSAqIFdlIGFyZSBhYm91dCB0byBwcm9jZXNzIGFuIGVuY29kZWQtd29yZAorCQkJICogdGhhdCBiZWdpbnMgYXQgZXAsIGJ1dCB0aGVyZSBpcyBzb21ldGhpbmcKKwkJCSAqIGJlZm9yZSB0aGUgZW5jb2RlZCB3b3JkLgorCQkJICovCisJCQljaGFyICpzY2FuOworCQkJZm9yIChzY2FuID0gaW47IHNjYW4gPCBlcDsgc2NhbisrKQorCQkJCWlmICghaXNzcGFjZSgqc2NhbikpCisJCQkJCWJyZWFrOworCisJCQlpZiAoc2NhbiAhPSBlcCB8fCBpbiA9PSBpdC0+YnVmKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBzaG91bGQgbm90IGxvc2UgdGhhdCAic29tZXRoaW5nIiwKKwkJCQkgKiB1bmxlc3Mgd2UgaGF2ZSBqdXN0IHByb2Nlc3NlZCBhbgorCQkJCSAqIGVuY29kZWQtd29yZCwgYW5kIHRoZXJlIGlzIG9ubHkgTFdTCisJCQkJICogYmVmb3JlIHRoZSBvbmUgd2UgYXJlIGFib3V0IHRvIHByb2Nlc3MuCisJCQkJICovCisJCQkJc3RyYnVmX2FkZCgmb3V0YnVmLCBpbiwgZXAgLSBpbik7CisJCQl9CisJCX0KKwkJLyogRS5nLgorCQkgKiBlcCA6ICI9P2lzby0yMDIyLWpwP0I/R3lSLi4uPz0gZm9vIgorCQkgKiBlcCA6ICI9P0lTTy04ODU5LTE/UT9Gb289RkNiYXI/PSBiYXoiCisJCSAqLworCQllcCArPSAyOworCisJCWlmIChlcCAtIGl0LT5idWYgPj0gaXQtPmxlbiB8fCAhKGNwID0gc3RyY2hyKGVwLCAnPycpKSkKKwkJCWdvdG8gcmVsZWFzZV9yZXR1cm47CisKKwkJaWYgKGNwICsgMyAtIGl0LT5idWYgPiBpdC0+bGVuKQorCQkJZ290byByZWxlYXNlX3JldHVybjsKKwkJc3RyYnVmX2FkZCgmY2hhcnNldF9xLCBlcCwgY3AgLSBlcCk7CisKKwkJZW5jb2RpbmcgPSBjcFsxXTsKKwkJaWYgKCFlbmNvZGluZyB8fCBjcFsyXSAhPSAnPycpCisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCQllcCA9IHN0cnN0cihjcCArIDMsICI/PSIpOworCQlpZiAoIWVwKQorCQkJZ290byByZWxlYXNlX3JldHVybjsKKwkJc3RyYnVmX2FkZCgmcGllY2VidWYsIGNwICsgMywgZXAgLSBjcCAtIDMpOworCQlzd2l0Y2ggKHRvbG93ZXIoZW5jb2RpbmcpKSB7CisJCWRlZmF1bHQ6CisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCQljYXNlICdiJzoKKwkJCWRlYyA9IGRlY29kZV9iX3NlZ21lbnQoJnBpZWNlYnVmKTsKKwkJCWJyZWFrOworCQljYXNlICdxJzoKKwkJCWRlYyA9IGRlY29kZV9xX3NlZ21lbnQoJnBpZWNlYnVmLCAxKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb252ZXJ0X3RvX3V0ZjgobWksIGRlYywgY2hhcnNldF9xLmJ1ZikpCisJCQlnb3RvIHJlbGVhc2VfcmV0dXJuOworCisJCXN0cmJ1Zl9hZGRidWYoJm91dGJ1ZiwgZGVjKTsKKwkJc3RyYnVmX3JlbGVhc2UoZGVjKTsKKwkJZnJlZShkZWMpOworCQlpbiA9IGVwICsgMjsKKwl9CisJc3RyYnVmX2FkZHN0cigmb3V0YnVmLCBpbik7CisJc3RyYnVmX3Jlc2V0KGl0KTsKKwlzdHJidWZfYWRkYnVmKGl0LCAmb3V0YnVmKTsKKwlmb3VuZF9lcnJvciA9IDA7CityZWxlYXNlX3JldHVybjoKKwlzdHJidWZfcmVsZWFzZSgmb3V0YnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmY2hhcnNldF9xKTsKKwlzdHJidWZfcmVsZWFzZSgmcGllY2VidWYpOworCisJaWYgKGZvdW5kX2Vycm9yKQorCQltaS0+aW5wdXRfZXJyb3IgPSAtMTsKK30KKworc3RhdGljIGludCBjaGVja19oZWFkZXIoc3RydWN0IG1haWxpbmZvICptaSwKKwkJCWNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUsCisJCQlzdHJ1Y3Qgc3RyYnVmICpoZHJfZGF0YVtdLCBpbnQgb3ZlcndyaXRlKQoreworCWludCBpLCByZXQgPSAwLCBsZW47CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJLyogc2VhcmNoIGZvciB0aGUgaW50ZXJlc3RpbmcgcGFydHMgKi8KKwlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykgeworCQlpbnQgbGVuID0gc3RybGVuKGhlYWRlcltpXSk7CisJCWlmICgoIWhkcl9kYXRhW2ldIHx8IG92ZXJ3cml0ZSkgJiYgY21wX2hlYWRlcihsaW5lLCBoZWFkZXJbaV0pKSB7CisJCQkvKiBVbndyYXAgaW5saW5lIEIgYW5kIFEgZW5jb2RpbmcsIGFuZCBvcHRpb25hbGx5CisJCQkgKiBub3JtYWxpemUgdGhlIG1ldGEgaW5mb3JtYXRpb24gdG8gdXRmOC4KKwkJCSAqLworCQkJc3RyYnVmX2FkZCgmc2IsIGxpbmUtPmJ1ZiArIGxlbiArIDIsIGxpbmUtPmxlbiAtIGxlbiAtIDIpOworCQkJZGVjb2RlX2hlYWRlcihtaSwgJnNiKTsKKwkJCWhhbmRsZV9oZWFkZXIoJmhkcl9kYXRhW2ldLCAmc2IpOworCQkJcmV0ID0gMTsKKwkJCWdvdG8gY2hlY2tfaGVhZGVyX291dDsKKwkJfQorCX0KKworCS8qIENvbnRlbnQgc3R1ZmYgKi8KKwlpZiAoY21wX2hlYWRlcihsaW5lLCAiQ29udGVudC1UeXBlIikpIHsKKwkJbGVuID0gc3RybGVuKCJDb250ZW50LVR5cGU6ICIpOworCQlzdHJidWZfYWRkKCZzYiwgbGluZS0+YnVmICsgbGVuLCBsaW5lLT5sZW4gLSBsZW4pOworCQlkZWNvZGVfaGVhZGVyKG1pLCAmc2IpOworCQlzdHJidWZfaW5zZXJ0KCZzYiwgMCwgIkNvbnRlbnQtVHlwZTogIiwgbGVuKTsKKwkJaGFuZGxlX2NvbnRlbnRfdHlwZShtaSwgJnNiKTsKKwkJcmV0ID0gMTsKKwkJZ290byBjaGVja19oZWFkZXJfb3V0OworCX0KKwlpZiAoY21wX2hlYWRlcihsaW5lLCAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyIpKSB7CisJCWxlbiA9IHN0cmxlbigiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIik7CisJCXN0cmJ1Zl9hZGQoJnNiLCBsaW5lLT5idWYgKyBsZW4sIGxpbmUtPmxlbiAtIGxlbik7CisJCWRlY29kZV9oZWFkZXIobWksICZzYik7CisJCWhhbmRsZV9jb250ZW50X3RyYW5zZmVyX2VuY29kaW5nKG1pLCAmc2IpOworCQlyZXQgPSAxOworCQlnb3RvIGNoZWNrX2hlYWRlcl9vdXQ7CisJfQorCWlmIChjbXBfaGVhZGVyKGxpbmUsICJNZXNzYWdlLUlkIikpIHsKKwkJbGVuID0gc3RybGVuKCJNZXNzYWdlLUlkOiAiKTsKKwkJc3RyYnVmX2FkZCgmc2IsIGxpbmUtPmJ1ZiArIGxlbiwgbGluZS0+bGVuIC0gbGVuKTsKKwkJZGVjb2RlX2hlYWRlcihtaSwgJnNiKTsKKwkJaGFuZGxlX21lc3NhZ2VfaWQobWksICZzYik7CisJCXJldCA9IDE7CisJCWdvdG8gY2hlY2tfaGVhZGVyX291dDsKKwl9CisKKwkvKiBmb3IgaW5ib2R5IHN0dWZmICovCisJaWYgKHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgIj5Gcm9tIikgJiYgaXNzcGFjZShsaW5lLT5idWZbNV0pKSB7CisJCXJldCA9IGlzX2Zvcm1hdF9wYXRjaF9zZXBhcmF0b3IobGluZS0+YnVmICsgMSwgbGluZS0+bGVuIC0gMSk7CisJCWdvdG8gY2hlY2tfaGVhZGVyX291dDsKKwl9CisJaWYgKHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgIltQQVRDSF0iKSAmJiBpc3NwYWNlKGxpbmUtPmJ1Zls3XSkpIHsKKwkJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKwkJCWlmICghc3RyY21wKCJTdWJqZWN0IiwgaGVhZGVyW2ldKSkgeworCQkJCWhhbmRsZV9oZWFkZXIoJmhkcl9kYXRhW2ldLCBsaW5lKTsKKwkJCQlyZXQgPSAxOworCQkJCWdvdG8gY2hlY2tfaGVhZGVyX291dDsKKwkJCX0KKwkJfQorCX0KKworY2hlY2tfaGVhZGVyX291dDoKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV90cmFuc2Zlcl9lbmNvZGluZyhzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgKnJldDsKKworCXN3aXRjaCAobWktPnRyYW5zZmVyX2VuY29kaW5nKSB7CisJY2FzZSBURV9RUDoKKwkJcmV0ID0gZGVjb2RlX3Ffc2VnbWVudChsaW5lLCAwKTsKKwkJYnJlYWs7CisJY2FzZSBURV9CQVNFNjQ6CisJCXJldCA9IGRlY29kZV9iX3NlZ21lbnQobGluZSk7CisJCWJyZWFrOworCWNhc2UgVEVfRE9OVENBUkU6CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKwlzdHJidWZfcmVzZXQobGluZSk7CisJc3RyYnVmX2FkZGJ1ZihsaW5lLCByZXQpOworCXN0cmJ1Zl9yZWxlYXNlKHJldCk7CisJZnJlZShyZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwYXRjaGJyZWFrKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc2l6ZV90IGk7CisKKwkvKiBCZWdpbm5pbmcgb2YgYSAiZGlmZiAtIiBoZWFkZXI/ICovCisJaWYgKHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgImRpZmYgLSIpKQorCQlyZXR1cm4gMTsKKworCS8qIENWUyAiSW5kZXg6ICIgbGluZT8gKi8KKwlpZiAoc3RhcnRzX3dpdGgobGluZS0+YnVmLCAiSW5kZXg6ICIpKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogIi0tLSA8ZmlsZW5hbWU+IiBzdGFydHMgcGF0Y2hlcyB3aXRob3V0IGhlYWRlcnMKKwkgKiAiLS0tPHNwPioiIGlzIGEgbWFudWFsIHNlcGFyYXRvcgorCSAqLworCWlmIChsaW5lLT5sZW4gPCA0KQorCQlyZXR1cm4gMDsKKworCWlmIChzdGFydHNfd2l0aChsaW5lLT5idWYsICItLS0iKSkgeworCQkvKiBzcGFjZSBmb2xsb3dlZCBieSBhIGZpbGVuYW1lPyAqLworCQlpZiAobGluZS0+YnVmWzNdID09ICcgJyAmJiAhaXNzcGFjZShsaW5lLT5idWZbNF0pKQorCQkJcmV0dXJuIDE7CisJCS8qIEp1c3Qgd2hpdGVzcGFjZT8gKi8KKwkJZm9yIChpID0gMzsgaSA8IGxpbmUtPmxlbjsgaSsrKSB7CisJCQl1bnNpZ25lZCBjaGFyIGMgPSBsaW5lLT5idWZbaV07CisJCQlpZiAoYyA9PSAnXG4nKQorCQkJCXJldHVybiAxOworCQkJaWYgKCFpc3NwYWNlKGMpKQorCQkJCWJyZWFrOworCQl9CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19zY2lzc29yc19saW5lKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc2l6ZV90IGksIGxlbiA9IGxpbmUtPmxlbjsKKwlpbnQgc2Npc3NvcnMgPSAwLCBnYXAgPSAwOworCWludCBmaXJzdF9ub25ibGFuayA9IC0xOworCWludCBsYXN0X25vbmJsYW5rID0gMCwgdmlzaWJsZSwgcGVyZm9yYXRpb24gPSAwLCBpbl9wZXJmb3JhdGlvbiA9IDA7CisJY29uc3QgY2hhciAqYnVmID0gbGluZS0+YnVmOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChpc3NwYWNlKGJ1ZltpXSkpIHsKKwkJCWlmIChpbl9wZXJmb3JhdGlvbikgeworCQkJCXBlcmZvcmF0aW9uKys7CisJCQkJZ2FwKys7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlsYXN0X25vbmJsYW5rID0gaTsKKwkJaWYgKGZpcnN0X25vbmJsYW5rIDwgMCkKKwkJCWZpcnN0X25vbmJsYW5rID0gaTsKKwkJaWYgKGJ1ZltpXSA9PSAnLScpIHsKKwkJCWluX3BlcmZvcmF0aW9uID0gMTsKKwkJCXBlcmZvcmF0aW9uKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoaSArIDEgPCBsZW4gJiYKKwkJICAgICghbWVtY21wKGJ1ZiArIGksICI+OCIsIDIpIHx8ICFtZW1jbXAoYnVmICsgaSwgIjg8IiwgMikgfHwKKwkJICAgICAhbWVtY21wKGJ1ZiArIGksICI+JSIsIDIpIHx8ICFtZW1jbXAoYnVmICsgaSwgIiU8IiwgMikpKSB7CisJCQlpbl9wZXJmb3JhdGlvbiA9IDE7CisJCQlwZXJmb3JhdGlvbiArPSAyOworCQkJc2Npc3NvcnMgKz0gMjsKKwkJCWkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWluX3BlcmZvcmF0aW9uID0gMDsKKwl9CisKKwkvKgorCSAqIFRoZSBtYXJrIG11c3QgYmUgYXQgbGVhc3QgOCBieXRlcyBsb25nIChlLmcuICItLSA+OCAtLSIpLgorCSAqIEV2ZW4gdGhvdWdoIHRoZXJlIGNhbiBiZSBhcmJpdHJhcnkgY3J1ZnQgb24gdGhlIHNhbWUgbGluZQorCSAqIChlLmcuICJjdXQgaGVyZSIpLCBpbiBvcmRlciB0byBhdm9pZCBtaXNpZGVudGlmaWNhdGlvbiwgdGhlCisJICogcGVyZm9yYXRpb24gbXVzdCBvY2N1cHkgbW9yZSB0aGFuIGEgdGhpcmQgb2YgdGhlIHZpc2libGUKKwkgKiB3aWR0aCBvZiB0aGUgbGluZSwgYW5kIGRhc2hlcyBhbmQgc2Npc3NvcnMgbXVzdCBvY2N1cHkgbW9yZQorCSAqIHRoYW4gaGFsZiBvZiB0aGUgcGVyZm9yYXRpb24uCisJICovCisKKwl2aXNpYmxlID0gbGFzdF9ub25ibGFuayAtIGZpcnN0X25vbmJsYW5rICsgMTsKKwlyZXR1cm4gKHNjaXNzb3JzICYmIDggPD0gdmlzaWJsZSAmJgorCQl2aXNpYmxlIDwgcGVyZm9yYXRpb24gKiAzICYmCisJCWdhcCAqIDIgPCBwZXJmb3JhdGlvbik7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IG1haWxpbmZvICptaSwgc3RydWN0IHN0cmJ1ZiAqbGluZSkKK3sKKwlhc3NlcnQoIW1pLT5maWx0ZXJfc3RhZ2UpOworCisJaWYgKG1pLT5oZWFkZXJfc3RhZ2UpIHsKKwkJaWYgKCFsaW5lLT5sZW4gfHwgKGxpbmUtPmxlbiA9PSAxICYmIGxpbmUtPmJ1ZlswXSA9PSAnXG4nKSkKKwkJCXJldHVybiAwOworCX0KKworCWlmIChtaS0+dXNlX2luYm9keV9oZWFkZXJzICYmIG1pLT5oZWFkZXJfc3RhZ2UpIHsKKwkJbWktPmhlYWRlcl9zdGFnZSA9IGNoZWNrX2hlYWRlcihtaSwgbGluZSwgbWktPnNfaGRyX2RhdGEsIDApOworCQlpZiAobWktPmhlYWRlcl9zdGFnZSkKKwkJCXJldHVybiAwOworCX0gZWxzZQorCQkvKiBPbmx5IHRyaW0gdGhlIGZpcnN0IChibGFuaykgbGluZSBvZiB0aGUgY29tbWl0IG1lc3NhZ2UKKwkJICogd2hlbiBpZ25vcmluZyBpbi1ib2R5IGhlYWRlcnMuCisJCSAqLworCQltaS0+aGVhZGVyX3N0YWdlID0gMDsKKworCS8qIG5vcm1hbGl6ZSB0aGUgbG9nIG1lc3NhZ2UgdG8gVVRGLTguICovCisJaWYgKGNvbnZlcnRfdG9fdXRmOChtaSwgbGluZSwgbWktPmNoYXJzZXQuYnVmKSkKKwkJcmV0dXJuIDA7IC8qIG1pLT5pbnB1dF9lcnJvciBhbHJlYWR5IHNldCAqLworCisJaWYgKG1pLT51c2Vfc2Npc3NvcnMgJiYgaXNfc2Npc3NvcnNfbGluZShsaW5lKSkgeworCQlpbnQgaTsKKworCQlzdHJidWZfc2V0bGVuKCZtaS0+bG9nX21lc3NhZ2UsIDApOworCQltaS0+aGVhZGVyX3N0YWdlID0gMTsKKworCQkvKgorCQkgKiBXZSBtYXkgaGF2ZSBhbHJlYWR5IHJlYWQgInNlY29uZGFyeSBoZWFkZXJzIjsgcHVyZ2UKKwkJICogdGhlbSB0byBnaXZlIG91cnNlbHZlcyBhIGNsZWFuIHJlc3RhcnQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBoZWFkZXJbaV07IGkrKykgeworCQkJaWYgKG1pLT5zX2hkcl9kYXRhW2ldKQorCQkJCXN0cmJ1Zl9yZWxlYXNlKG1pLT5zX2hkcl9kYXRhW2ldKTsKKwkJCW1pLT5zX2hkcl9kYXRhW2ldID0gTlVMTDsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocGF0Y2hicmVhayhsaW5lKSkgeworCQlpZiAobWktPm1lc3NhZ2VfaWQpCisJCQlzdHJidWZfYWRkZigmbWktPmxvZ19tZXNzYWdlLAorCQkJCSAgICAiTWVzc2FnZS1JZDogJXNcbiIsIG1pLT5tZXNzYWdlX2lkKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3RyYnVmX2FkZGJ1ZigmbWktPmxvZ19tZXNzYWdlLCBsaW5lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3BhdGNoKHN0cnVjdCBtYWlsaW5mbyAqbWksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJZndyaXRlKGxpbmUtPmJ1ZiwgMSwgbGluZS0+bGVuLCBtaS0+cGF0Y2hmaWxlKTsKKwltaS0+cGF0Y2hfbGluZXMrKzsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2ZpbHRlcihzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN3aXRjaCAobWktPmZpbHRlcl9zdGFnZSkgeworCWNhc2UgMDoKKwkJaWYgKCFoYW5kbGVfY29tbWl0X21zZyhtaSwgbGluZSkpCisJCQlicmVhazsKKwkJbWktPmZpbHRlcl9zdGFnZSsrOworCWNhc2UgMToKKwkJaGFuZGxlX3BhdGNoKG1pLCBsaW5lKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGlzX3JmYzI4MjJfaGVhZGVyKGNvbnN0IHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJLyoKKwkgKiBUaGUgc2VjdGlvbiB0aGF0IGRlZmluZXMgdGhlIGxvb3Nlc3QgcG9zc2libGUKKwkgKiBmaWVsZCBuYW1lIGlzICIzLjYuOCBPcHRpb25hbCBmaWVsZHMiLgorCSAqCisJICogb3B0aW9uYWwtZmllbGQgPSBmaWVsZC1uYW1lICI6IiB1bnN0cnVjdHVyZWQgQ1JMRgorCSAqIGZpZWxkLW5hbWUgPSAxKmZ0ZXh0CisJICogZnRleHQgPSAlZDMzLTU3IC8gJTU5LTEyNgorCSAqLworCWludCBjaDsKKwljaGFyICpjcCA9IGxpbmUtPmJ1ZjsKKworCS8qIENvdW50IG1ib3ggRnJvbSBoZWFkZXJzIGFzIGhlYWRlcnMgKi8KKwlpZiAoc3RhcnRzX3dpdGgoY3AsICJGcm9tICIpIHx8IHN0YXJ0c193aXRoKGNwLCAiPkZyb20gIikpCisJCXJldHVybiAxOworCisJd2hpbGUgKChjaCA9ICpjcCsrKSkgeworCQlpZiAoY2ggPT0gJzonKQorCQkJcmV0dXJuIDE7CisJCWlmICgoMzMgPD0gY2ggJiYgY2ggPD0gNTcpIHx8CisJCSAgICAoNTkgPD0gY2ggJiYgY2ggPD0gMTI2KSkKKwkJCWNvbnRpbnVlOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9vbmVfaGVhZGVyX2xpbmUoc3RydWN0IHN0cmJ1ZiAqbGluZSwgRklMRSAqaW4pCit7CisJc3RydWN0IHN0cmJ1ZiBjb250aW51YXRpb24gPSBTVFJCVUZfSU5JVDsKKworCS8qIEdldCB0aGUgZmlyc3QgcGFydCBvZiB0aGUgbGluZS4gKi8KKwlpZiAoc3RyYnVmX2dldGxpbmUobGluZSwgaW4sICdcbicpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSXMgaXQgYW4gZW1wdHkgbGluZSBvciBub3QgYSB2YWxpZCByZmMyODIyIGhlYWRlcj8KKwkgKiBJZiBzbywgc3RvcCBoZXJlLCBhbmQgcmV0dXJuIGZhbHNlICgibm90IGEgaGVhZGVyIikKKwkgKi8KKwlzdHJidWZfcnRyaW0obGluZSk7CisJaWYgKCFsaW5lLT5sZW4gfHwgIWlzX3JmYzI4MjJfaGVhZGVyKGxpbmUpKSB7CisJCS8qIFJlLWFkZCB0aGUgbmV3bGluZSAqLworCQlzdHJidWZfYWRkY2gobGluZSwgJ1xuJyk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogTm93IHdlIG5lZWQgdG8gZWF0IGFsbCB0aGUgY29udGludWF0aW9uIGxpbmVzLi4KKwkgKiBZdWNrLCAyODIyIGhlYWRlciAiZm9sZGluZyIKKwkgKi8KKwlmb3IgKDs7KSB7CisJCWludCBwZWVrOworCisJCXBlZWsgPSBmZ2V0Yyhpbik7IHVuZ2V0YyhwZWVrLCBpbik7CisJCWlmIChwZWVrICE9ICcgJyAmJiBwZWVrICE9ICdcdCcpCisJCQlicmVhazsKKwkJaWYgKHN0cmJ1Zl9nZXRsaW5lKCZjb250aW51YXRpb24sIGluLCAnXG4nKSkKKwkJCWJyZWFrOworCQljb250aW51YXRpb24uYnVmWzBdID0gJyAnOworCQlzdHJidWZfcnRyaW0oJmNvbnRpbnVhdGlvbik7CisJCXN0cmJ1Zl9hZGRidWYobGluZSwgJmNvbnRpbnVhdGlvbik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZjb250aW51YXRpb24pOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9ib3VuZGFyeShzdHJ1Y3QgbWFpbGluZm8gKm1pLCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXdoaWxlICghc3RyYnVmX2dldGxpbmUobGluZSwgbWktPmlucHV0LCAnXG4nKSkgeworCQlpZiAoKihtaS0+Y29udGVudF90b3ApICYmIGlzX211bHRpcGFydF9ib3VuZGFyeShtaSwgbGluZSkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2JvdW5kYXJ5KHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiBuZXdsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfYWRkY2goJm5ld2xpbmUsICdcbicpOworYWdhaW46CisJaWYgKGxpbmUtPmxlbiA+PSAoKihtaS0+Y29udGVudF90b3ApKS0+bGVuICsgMiAmJgorCSAgICAhbWVtY21wKGxpbmUtPmJ1ZiArICgqKG1pLT5jb250ZW50X3RvcCkpLT5sZW4sICItLSIsIDIpKSB7CisJCS8qIHdlIGhpdCBhbiBlbmQgYm91bmRhcnkgKi8KKwkJLyogcG9wIHRoZSBjdXJyZW50IGJvdW5kYXJ5IG9mZiB0aGUgc3RhY2sgKi8KKwkJc3RyYnVmX3JlbGVhc2UoKihtaS0+Y29udGVudF90b3ApKTsKKwkJZnJlZSgqKG1pLT5jb250ZW50X3RvcCkpOworCQkqKG1pLT5jb250ZW50X3RvcCkgPSBOVUxMOworCisJCS8qIHRlY2huaWNhbGx5IHdvbid0IGhhcHBlbiBhcyBpc19tdWx0aXBhcnRfYm91bmRhcnkoKQorCQkgICB3aWxsIGZhaWwgZmlyc3QuICBCdXQganVzdCBpbiBjYXNlLi4KKwkJICovCisJCWlmICgtLW1pLT5jb250ZW50X3RvcCA8IG1pLT5jb250ZW50KSB7CisJCQllcnJvcigiRGV0ZWN0ZWQgbWlzbWF0Y2hlZCBib3VuZGFyaWVzLCBjYW4ndCByZWNvdmVyIik7CisJCQltaS0+aW5wdXRfZXJyb3IgPSAtMTsKKwkJCW1pLT5jb250ZW50X3RvcCA9IG1pLT5jb250ZW50OworCQkJcmV0dXJuIDA7CisJCX0KKwkJaGFuZGxlX2ZpbHRlcihtaSwgJm5ld2xpbmUpOworCQlzdHJidWZfcmVsZWFzZSgmbmV3bGluZSk7CisJCWlmIChtaS0+aW5wdXRfZXJyb3IpCisJCQlyZXR1cm4gMDsKKworCQkvKiBza2lwIHRvIHRoZSBuZXh0IGJvdW5kYXJ5ICovCisJCWlmICghZmluZF9ib3VuZGFyeShtaSwgbGluZSkpCisJCQlyZXR1cm4gMDsKKwkJZ290byBhZ2FpbjsKKwl9CisKKwkvKiBzZXQgc29tZSBkZWZhdWx0cyAqLworCW1pLT50cmFuc2Zlcl9lbmNvZGluZyA9IFRFX0RPTlRDQVJFOworCXN0cmJ1Zl9yZXNldCgmbWktPmNoYXJzZXQpOworCisJLyogc2x1cnAgaW4gdGhpcyBzZWN0aW9uJ3MgaW5mbyAqLworCXdoaWxlIChyZWFkX29uZV9oZWFkZXJfbGluZShsaW5lLCBtaS0+aW5wdXQpKQorCQljaGVja19oZWFkZXIobWksIGxpbmUsIG1pLT5wX2hkcl9kYXRhLCAwKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZuZXdsaW5lKTsKKwkvKiByZXBsZW5pc2ggbGluZSAqLworCWlmIChzdHJidWZfZ2V0bGluZShsaW5lLCBtaS0+aW5wdXQsICdcbicpKQorCQlyZXR1cm4gMDsKKwlzdHJidWZfYWRkY2gobGluZSwgJ1xuJyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9ib2R5KHN0cnVjdCBtYWlsaW5mbyAqbWksIHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJc3RydWN0IHN0cmJ1ZiBwcmV2ID0gU1RSQlVGX0lOSVQ7CisKKwkvKiBTa2lwIHVwIHRvIHRoZSBmaXJzdCBib3VuZGFyeSAqLworCWlmICgqKG1pLT5jb250ZW50X3RvcCkpIHsKKwkJaWYgKCFmaW5kX2JvdW5kYXJ5KG1pLCBsaW5lKSkKKwkJCWdvdG8gaGFuZGxlX2JvZHlfb3V0OworCX0KKworCWRvIHsKKwkJLyogcHJvY2VzcyBhbnkgYm91bmRhcnkgbGluZXMgKi8KKwkJaWYgKCoobWktPmNvbnRlbnRfdG9wKSAmJiBpc19tdWx0aXBhcnRfYm91bmRhcnkobWksIGxpbmUpKSB7CisJCQkvKiBmbHVzaCBhbnkgbGVmdG92ZXIgKi8KKwkJCWlmIChwcmV2LmxlbikgeworCQkJCWhhbmRsZV9maWx0ZXIobWksICZwcmV2KTsKKwkJCQlzdHJidWZfcmVzZXQoJnByZXYpOworCQkJfQorCQkJaWYgKCFoYW5kbGVfYm91bmRhcnkobWksIGxpbmUpKQorCQkJCWdvdG8gaGFuZGxlX2JvZHlfb3V0OworCQl9CisKKwkJLyogVW53cmFwIHRyYW5zZmVyIGVuY29kaW5nICovCisJCWRlY29kZV90cmFuc2Zlcl9lbmNvZGluZyhtaSwgbGluZSk7CisKKwkJc3dpdGNoIChtaS0+dHJhbnNmZXJfZW5jb2RpbmcpIHsKKwkJY2FzZSBURV9CQVNFNjQ6CisJCWNhc2UgVEVfUVA6CisJCXsKKwkJCXN0cnVjdCBzdHJidWYgKipsaW5lcywgKippdCwgKnNiOworCisJCQkvKiBQcmVwZW5kIGFueSBwcmV2aW91cyBwYXJ0aWFsIGxpbmVzICovCisJCQlzdHJidWZfaW5zZXJ0KGxpbmUsIDAsIHByZXYuYnVmLCBwcmV2Lmxlbik7CisJCQlzdHJidWZfcmVzZXQoJnByZXYpOworCisJCQkvKgorCQkJICogVGhpcyBpcyBhIGRlY29kZWQgbGluZSB0aGF0IG1heSBjb250YWluCisJCQkgKiBtdWx0aXBsZSBuZXcgbGluZXMuICBQYXNzIG9ubHkgb25lIGNodW5rCisJCQkgKiBhdCBhIHRpbWUgdG8gaGFuZGxlX2ZpbHRlcigpCisJCQkgKi8KKwkJCWxpbmVzID0gc3RyYnVmX3NwbGl0KGxpbmUsICdcbicpOworCQkJZm9yIChpdCA9IGxpbmVzOyAoc2IgPSAqaXQpOyBpdCsrKSB7CisJCQkJaWYgKCooaXQgKyAxKSA9PSBOVUxMKSAvKiBUaGUgbGFzdCBsaW5lICovCisJCQkJCWlmIChzYi0+YnVmW3NiLT5sZW4gLSAxXSAhPSAnXG4nKSB7CisJCQkJCQkvKiBQYXJ0aWFsIGxpbmUsIHNhdmUgaXQgZm9yIGxhdGVyLiAqLworCQkJCQkJc3RyYnVmX2FkZGJ1ZigmcHJldiwgc2IpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQloYW5kbGVfZmlsdGVyKG1pLCBzYik7CisJCQl9CisJCQkvKgorCQkJICogVGhlIHBhcnRpYWwgY2h1bmsgaXMgc2F2ZWQgaW4gInByZXYiIGFuZCB3aWxsIGJlCisJCQkgKiBhcHBlbmRlZCBieSB0aGUgbmV4dCBpdGVyYXRpb24gb2YgcmVhZF9saW5lX3dpdGhfbnVsKCkuCisJCQkgKi8KKwkJCXN0cmJ1Zl9saXN0X2ZyZWUobGluZXMpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCWhhbmRsZV9maWx0ZXIobWksIGxpbmUpOworCQl9CisKKwkJaWYgKG1pLT5pbnB1dF9lcnJvcikKKwkJCWJyZWFrOworCX0gd2hpbGUgKCFzdHJidWZfZ2V0d2hvbGVsaW5lKGxpbmUsIG1pLT5pbnB1dCwgJ1xuJykpOworCitoYW5kbGVfYm9keV9vdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnByZXYpOworfQorCitzdGF0aWMgdm9pZCBvdXRwdXRfaGVhZGVyX2xpbmVzKEZJTEUgKmZvdXQsIGNvbnN0IGNoYXIgKmhkciwgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZGF0YSkKK3sKKwljb25zdCBjaGFyICpzcCA9IGRhdGEtPmJ1ZjsKKwl3aGlsZSAoMSkgeworCQljaGFyICplcCA9IHN0cmNocihzcCwgJ1xuJyk7CisJCWludCBsZW47CisJCWlmICghZXApCisJCQlsZW4gPSBzdHJsZW4oc3ApOworCQllbHNlCisJCQlsZW4gPSBlcCAtIHNwOworCQlmcHJpbnRmKGZvdXQsICIlczogJS4qc1xuIiwgaGRyLCBsZW4sIHNwKTsKKwkJaWYgKCFlcCkKKwkJCWJyZWFrOworCQlzcCA9IGVwICsgMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9pbmZvKHN0cnVjdCBtYWlsaW5mbyAqbWkpCit7CisJc3RydWN0IHN0cmJ1ZiAqaGRyOworCWludCBpOworCisJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKwkJLyogb25seSBwcmludCBpbmJvZHkgaGVhZGVycyBpZiB3ZSBvdXRwdXQgYSBwYXRjaCBmaWxlICovCisJCWlmIChtaS0+cGF0Y2hfbGluZXMgJiYgbWktPnNfaGRyX2RhdGFbaV0pCisJCQloZHIgPSBtaS0+c19oZHJfZGF0YVtpXTsKKwkJZWxzZSBpZiAobWktPnBfaGRyX2RhdGFbaV0pCisJCQloZHIgPSBtaS0+cF9oZHJfZGF0YVtpXTsKKwkJZWxzZQorCQkJY29udGludWU7CisKKwkJaWYgKCFzdHJjbXAoaGVhZGVyW2ldLCAiU3ViamVjdCIpKSB7CisJCQlpZiAoIW1pLT5rZWVwX3N1YmplY3QpIHsKKwkJCQljbGVhbnVwX3N1YmplY3QobWksIGhkcik7CisJCQkJY2xlYW51cF9zcGFjZShoZHIpOworCQkJfQorCQkJb3V0cHV0X2hlYWRlcl9saW5lcyhtaS0+b3V0cHV0LCAiU3ViamVjdCIsIGhkcik7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChoZWFkZXJbaV0sICJGcm9tIikpIHsKKwkJCWNsZWFudXBfc3BhY2UoaGRyKTsKKwkJCWhhbmRsZV9mcm9tKG1pLCBoZHIpOworCQkJZnByaW50ZihtaS0+b3V0cHV0LCAiQXV0aG9yOiAlc1xuIiwgbWktPm5hbWUuYnVmKTsKKwkJCWZwcmludGYobWktPm91dHB1dCwgIkVtYWlsOiAlc1xuIiwgbWktPmVtYWlsLmJ1Zik7CisJCX0gZWxzZSB7CisJCQljbGVhbnVwX3NwYWNlKGhkcik7CisJCQlmcHJpbnRmKG1pLT5vdXRwdXQsICIlczogJXNcbiIsIGhlYWRlcltpXSwgaGRyLT5idWYpOworCQl9CisJfQorCWZwcmludGYobWktPm91dHB1dCwgIlxuIik7Cit9CisKK2ludCBtYWlsaW5mbyhzdHJ1Y3QgbWFpbGluZm8gKm1pLCBjb25zdCBjaGFyICptc2csIGNvbnN0IGNoYXIgKnBhdGNoKQoreworCUZJTEUgKmNtaXRtc2c7CisJaW50IHBlZWs7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisKKwljbWl0bXNnID0gZm9wZW4obXNnLCAidyIpOworCWlmICghY21pdG1zZykgeworCQlwZXJyb3IobXNnKTsKKwkJcmV0dXJuIC0xOworCX0KKwltaS0+cGF0Y2hmaWxlID0gZm9wZW4ocGF0Y2gsICJ3Iik7CisJaWYgKCFtaS0+cGF0Y2hmaWxlKSB7CisJCXBlcnJvcihwYXRjaCk7CisJCWZjbG9zZShjbWl0bXNnKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1pLT5wX2hkcl9kYXRhID0geGNhbGxvYyhNQVhfSERSX1BBUlNFRCwgc2l6ZW9mKCoobWktPnBfaGRyX2RhdGEpKSk7CisJbWktPnNfaGRyX2RhdGEgPSB4Y2FsbG9jKE1BWF9IRFJfUEFSU0VELCBzaXplb2YoKihtaS0+c19oZHJfZGF0YSkpKTsKKworCWRvIHsKKwkJcGVlayA9IGZnZXRjKG1pLT5pbnB1dCk7CisJfSB3aGlsZSAoaXNzcGFjZShwZWVrKSk7CisJdW5nZXRjKHBlZWssIG1pLT5pbnB1dCk7CisKKwkvKiBwcm9jZXNzIHRoZSBlbWFpbCBoZWFkZXIgKi8KKwl3aGlsZSAocmVhZF9vbmVfaGVhZGVyX2xpbmUoJmxpbmUsIG1pLT5pbnB1dCkpCisJCWNoZWNrX2hlYWRlcihtaSwgJmxpbmUsIG1pLT5wX2hkcl9kYXRhLCAxKTsKKworCWhhbmRsZV9ib2R5KG1pLCAmbGluZSk7CisJZndyaXRlKG1pLT5sb2dfbWVzc2FnZS5idWYsIDEsIG1pLT5sb2dfbWVzc2FnZS5sZW4sIGNtaXRtc2cpOworCWZjbG9zZShjbWl0bXNnKTsKKwlmY2xvc2UobWktPnBhdGNoZmlsZSk7CisKKwloYW5kbGVfaW5mbyhtaSk7CisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworCXJldHVybiBtaS0+aW5wdXRfZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X21haWxpbmZvX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICptaV8pCit7CisJc3RydWN0IG1haWxpbmZvICptaSA9IG1pXzsKKworCWlmICghc3RhcnRzX3dpdGgodmFyLCAibWFpbGluZm8uIikpCisJCXJldHVybiBnaXRfZGVmYXVsdF9jb25maWcodmFyLCB2YWx1ZSwgTlVMTCk7CisJaWYgKCFzdHJjbXAodmFyLCAibWFpbGluZm8uc2Npc3NvcnMiKSkgeworCQltaS0+dXNlX3NjaXNzb3JzID0gZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpOworCQlyZXR1cm4gMDsKKwl9CisJLyogcGVyaGFwcyBvdGhlcnMgaGVyZSAqLworCXJldHVybiAwOworfQorCit2b2lkIHNldHVwX21haWxpbmZvKHN0cnVjdCBtYWlsaW5mbyAqbWkpCit7CisJbWVtc2V0KG1pLCAwLCBzaXplb2YoKm1pKSk7CisJc3RyYnVmX2luaXQoJm1pLT5uYW1lLCAwKTsKKwlzdHJidWZfaW5pdCgmbWktPmVtYWlsLCAwKTsKKwlzdHJidWZfaW5pdCgmbWktPmNoYXJzZXQsIDApOworCXN0cmJ1Zl9pbml0KCZtaS0+bG9nX21lc3NhZ2UsIDApOworCW1pLT5oZWFkZXJfc3RhZ2UgPSAxOworCW1pLT51c2VfaW5ib2R5X2hlYWRlcnMgPSAxOworCW1pLT5jb250ZW50X3RvcCA9IG1pLT5jb250ZW50OworCWdpdF9jb25maWcoZ2l0X21haWxpbmZvX2NvbmZpZywgJm1pKTsKK30KKwordm9pZCBjbGVhcl9tYWlsaW5mbyhzdHJ1Y3QgbWFpbGluZm8gKm1pKQoreworCWludCBpOworCisJc3RyYnVmX3JlbGVhc2UoJm1pLT5uYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmbWktPmVtYWlsKTsKKwlzdHJidWZfcmVsZWFzZSgmbWktPmNoYXJzZXQpOworCWZyZWUobWktPm1lc3NhZ2VfaWQpOworCisJZm9yIChpID0gMDsgbWktPnBfaGRyX2RhdGFbaV07IGkrKykKKwkJc3RyYnVmX3JlbGVhc2UobWktPnBfaGRyX2RhdGFbaV0pOworCWZyZWUobWktPnBfaGRyX2RhdGEpOworCWZvciAoaSA9IDA7IG1pLT5zX2hkcl9kYXRhW2ldOyBpKyspCisJCXN0cmJ1Zl9yZWxlYXNlKG1pLT5zX2hkcl9kYXRhW2ldKTsKKwlmcmVlKG1pLT5zX2hkcl9kYXRhKTsKKworCXdoaWxlIChtaS0+Y29udGVudCA8IG1pLT5jb250ZW50X3RvcCkgeworCQlmcmVlKCoobWktPmNvbnRlbnRfdG9wKSk7CisJCW1pLT5jb250ZW50X3RvcC0tOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZtaS0+bG9nX21lc3NhZ2UpOworfQpkaWZmIC0tZ2l0IGEvbWFpbGluZm8uaCBiL21haWxpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3NzZhNwotLS0gL2Rldi9udWxsCisrKyBiL21haWxpbmZvLmgKQEAgLTAsMCArMSw0MSBAQAorI2lmbmRlZiBNQUlMSU5GT19ICisjZGVmaW5lIE1BSUxJTkZPX0gKKworI2RlZmluZSBNQVhfQk9VTkRBUklFUyA1CisKK3N0cnVjdCBtYWlsaW5mbyB7CisJRklMRSAqaW5wdXQ7CisJRklMRSAqb3V0cHV0OworCUZJTEUgKnBhdGNoZmlsZTsKKworCXN0cnVjdCBzdHJidWYgbmFtZTsKKwlzdHJ1Y3Qgc3RyYnVmIGVtYWlsOworCWludCBrZWVwX3N1YmplY3Q7CisJaW50IGtlZXBfbm9uX3BhdGNoX2JyYWNrZXRzX2luX3N1YmplY3Q7CisJaW50IGFkZF9tZXNzYWdlX2lkOworCWludCB1c2Vfc2Npc3NvcnM7CisJaW50IHVzZV9pbmJvZHlfaGVhZGVyczsKKwljb25zdCBjaGFyICptZXRhaW5mb19jaGFyc2V0OworCisJc3RydWN0IHN0cmJ1ZiAqY29udGVudFtNQVhfQk9VTkRBUklFU107CisJc3RydWN0IHN0cmJ1ZiAqKmNvbnRlbnRfdG9wOworCXN0cnVjdCBzdHJidWYgY2hhcnNldDsKKwljaGFyICptZXNzYWdlX2lkOworCWVudW0gIHsKKwkJVEVfRE9OVENBUkUsIFRFX1FQLCBURV9CQVNFNjQKKwl9IHRyYW5zZmVyX2VuY29kaW5nOworCWludCBwYXRjaF9saW5lczsKKwlpbnQgZmlsdGVyX3N0YWdlOyAvKiBzdGlsbCByZWFkaW5nIGxvZyBvciBhcmUgd2UgY29weWluZyBwYXRjaD8gKi8KKwlpbnQgaGVhZGVyX3N0YWdlOyAvKiBzdGlsbCBjaGVja2luZyBpbi1ib2R5IGhlYWRlcnM/ICovCisJc3RydWN0IHN0cmJ1ZiAqKnBfaGRyX2RhdGE7CisJc3RydWN0IHN0cmJ1ZiAqKnNfaGRyX2RhdGE7CisKKwlzdHJ1Y3Qgc3RyYnVmIGxvZ19tZXNzYWdlOworCWludCBpbnB1dF9lcnJvcjsKK307CisKK2V4dGVybiB2b2lkIHNldHVwX21haWxpbmZvKHN0cnVjdCBtYWlsaW5mbyAqKTsKK2V4dGVybiBpbnQgbWFpbGluZm8oc3RydWN0IG1haWxpbmZvICosIGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqcGF0Y2gpOworZXh0ZXJuIHZvaWQgY2xlYXJfbWFpbGluZm8oc3RydWN0IG1haWxpbmZvICopOworCisjZW5kaWYgLyogTUFJTElORk9fSCAqLwpkaWZmIC0tZ2l0IGEvbWFpbG1hcC5jIGIvbWFpbG1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YTBmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9tYWlsbWFwLmMKQEAgLTAsMCArMSwzNjQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibWFpbG1hcC5oIgorCisjZGVmaW5lIERFQlVHX01BSUxNQVAgMAorI2lmIERFQlVHX01BSUxNQVAKKyNkZWZpbmUgZGVidWdfbW0oLi4uKSBmcHJpbnRmKHN0ZGVyciwgX19WQV9BUkdTX18pCisjZGVmaW5lIGRlYnVnX3N0cihYKSAoKFgpID8gKFgpIDogIihub25lKSIpCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX21tKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSB7fQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkZWJ1Z19zdHIoY29uc3QgY2hhciAqcykgeyByZXR1cm4gczsgfQorI2VuZGlmCisKK2NvbnN0IGNoYXIgKmdpdF9tYWlsbWFwX2ZpbGU7Citjb25zdCBjaGFyICpnaXRfbWFpbG1hcF9ibG9iOworCitzdHJ1Y3QgbWFpbG1hcF9pbmZvIHsKKwljaGFyICpuYW1lOworCWNoYXIgKmVtYWlsOworfTsKKworc3RydWN0IG1haWxtYXBfZW50cnkgeworCS8qIG5hbWUgYW5kIGVtYWlsIGZvciB0aGUgc2ltcGxlIG1haWwtb25seSBjYXNlICovCisJY2hhciAqbmFtZTsKKwljaGFyICplbWFpbDsKKworCS8qIG5hbWUgYW5kIGVtYWlsIGZvciB0aGUgY29tcGxleCBtYWlsIGFuZCBuYW1lIG1hdGNoaW5nIGNhc2UgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbmFtZW1hcDsKK307CisKK3N0YXRpYyB2b2lkIGZyZWVfbWFpbG1hcF9pbmZvKHZvaWQgKnAsIGNvbnN0IGNoYXIgKnMpCit7CisJc3RydWN0IG1haWxtYXBfaW5mbyAqbWkgPSAoc3RydWN0IG1haWxtYXBfaW5mbyAqKXA7CisJZGVidWdfbW0oIm1haWxtYXA6IC0tIGNvbXBsZXg6ICclcycgLT4gJyVzJyA8JXM+XG4iLAorCQkgcywgZGVidWdfc3RyKG1pLT5uYW1lKSwgZGVidWdfc3RyKG1pLT5lbWFpbCkpOworCWZyZWUobWktPm5hbWUpOworCWZyZWUobWktPmVtYWlsKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9tYWlsbWFwX2VudHJ5KHZvaWQgKnAsIGNvbnN0IGNoYXIgKnMpCit7CisJc3RydWN0IG1haWxtYXBfZW50cnkgKm1lID0gKHN0cnVjdCBtYWlsbWFwX2VudHJ5ICopcDsKKwlkZWJ1Z19tbSgibWFpbG1hcDogcmVtb3ZpbmcgZW50cmllcyBmb3IgPCVzPiwgd2l0aCAlZCBzdWItZW50cmllc1xuIiwKKwkJIHMsIG1lLT5uYW1lbWFwLm5yKTsKKwlkZWJ1Z19tbSgibWFpbG1hcDogLSBzaW1wbGU6ICclcycgPCVzPlxuIiwKKwkJIGRlYnVnX3N0cihtZS0+bmFtZSksIGRlYnVnX3N0cihtZS0+ZW1haWwpKTsKKworCWZyZWUobWUtPm5hbWUpOworCWZyZWUobWUtPmVtYWlsKTsKKworCW1lLT5uYW1lbWFwLnN0cmR1cF9zdHJpbmdzID0gMTsKKwlzdHJpbmdfbGlzdF9jbGVhcl9mdW5jKCZtZS0+bmFtZW1hcCwgZnJlZV9tYWlsbWFwX2luZm8pOworfQorCisvKgorICogT24gc29tZSBzeXN0ZW1zIChlLmcuIE1pbkdXIDQuMCksIHN0cmluZy5oIGhhcyBfb25seV8gaW5saW5lCisgKiBkZWZpbml0aW9uIG9mIHN0cmNhc2VjbXAgYW5kIG5vIG5vbi1pbmxpbmUgaW1wbGVtZW50YXRpb24gaXMKKyAqIHN1cHBsaWVkIGFueXdoZXJlLCB3aGljaCBpcywgZWgsICJ1bnVzdWFsIjsgd2UgY2Fubm90IHRha2UgYW4KKyAqIGFkZHJlc3Mgb2Ygc3VjaCBhIGZ1bmN0aW9uIHRvIHN0b3JlIGl0IGluIG5hbWVtYXAuY21wLiAgVGhpcyBpcworICogaGVyZSBhcyBhIHdvcmthcm91bmQtLS1kbyBub3QgYXNzaWduIHN0cmNhc2VjbXAgZGlyZWN0bHkgdG8KKyAqIG5hbWVtYXAuY21wIHVudGlsIHdlIGtub3cgbm8gc3lzdGVtcyB0aGF0IG1hdHRlciBoYXZlIHN1Y2ggYW4KKyAqICJ1bnVzdWFsIiBzdHJpbmcuaC4KKyAqLworc3RhdGljIGludCBuYW1lbWFwX2NtcChjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKQoreworCXJldHVybiBzdHJjYXNlY21wKGEsIGIpOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWFwcGluZyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1hcCwKKwkJCWNoYXIgKm5ld19uYW1lLCBjaGFyICpuZXdfZW1haWwsCisJCQljaGFyICpvbGRfbmFtZSwgY2hhciAqb2xkX2VtYWlsKQoreworCXN0cnVjdCBtYWlsbWFwX2VudHJ5ICptZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCWlmIChvbGRfZW1haWwgPT0gTlVMTCkgeworCQlvbGRfZW1haWwgPSBuZXdfZW1haWw7CisJCW5ld19lbWFpbCA9IE5VTEw7CisJfQorCisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChtYXAsIG9sZF9lbWFpbCk7CisJaWYgKGl0ZW0tPnV0aWwpIHsKKwkJbWUgPSAoc3RydWN0IG1haWxtYXBfZW50cnkgKilpdGVtLT51dGlsOworCX0gZWxzZSB7CisJCW1lID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG1haWxtYXBfZW50cnkpKTsKKwkJbWUtPm5hbWVtYXAuc3RyZHVwX3N0cmluZ3MgPSAxOworCQltZS0+bmFtZW1hcC5jbXAgPSBuYW1lbWFwX2NtcDsKKwkJaXRlbS0+dXRpbCA9IG1lOworCX0KKworCWlmIChvbGRfbmFtZSA9PSBOVUxMKSB7CisJCWRlYnVnX21tKCJtYWlsbWFwOiBhZGRpbmcgKHNpbXBsZSkgZW50cnkgZm9yICclcydcbiIsIG9sZF9lbWFpbCk7CisKKwkJLyogUmVwbGFjZSBjdXJyZW50IG5hbWUgYW5kIG5ldyBlbWFpbCBmb3Igc2ltcGxlIGVudHJ5ICovCisJCWlmIChuZXdfbmFtZSkgeworCQkJZnJlZShtZS0+bmFtZSk7CisJCQltZS0+bmFtZSA9IHhzdHJkdXAobmV3X25hbWUpOworCQl9CisJCWlmIChuZXdfZW1haWwpIHsKKwkJCWZyZWUobWUtPmVtYWlsKTsKKwkJCW1lLT5lbWFpbCA9IHhzdHJkdXAobmV3X2VtYWlsKTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBtYWlsbWFwX2luZm8gKm1pID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IG1haWxtYXBfaW5mbykpOworCQlkZWJ1Z19tbSgibWFpbG1hcDogYWRkaW5nIChjb21wbGV4KSBlbnRyeSBmb3IgJyVzJ1xuIiwgb2xkX2VtYWlsKTsKKwkJaWYgKG5ld19uYW1lKQorCQkJbWktPm5hbWUgPSB4c3RyZHVwKG5ld19uYW1lKTsKKwkJaWYgKG5ld19lbWFpbCkKKwkJCW1pLT5lbWFpbCA9IHhzdHJkdXAobmV3X2VtYWlsKTsKKwkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZtZS0+bmFtZW1hcCwgb2xkX25hbWUpLT51dGlsID0gbWk7CisJfQorCisJZGVidWdfbW0oIm1haWxtYXA6ICAnJXMnIDwlcz4gLT4gJyVzJyA8JXM+XG4iLAorCQkgZGVidWdfc3RyKG9sZF9uYW1lKSwgb2xkX2VtYWlsLAorCQkgZGVidWdfc3RyKG5ld19uYW1lKSwgZGVidWdfc3RyKG5ld19lbWFpbCkpOworfQorCitzdGF0aWMgY2hhciAqcGFyc2VfbmFtZV9hbmRfZW1haWwoY2hhciAqYnVmZmVyLCBjaGFyICoqbmFtZSwKKwkJCQkgIGNoYXIgKiplbWFpbCwgaW50IGFsbG93X2VtcHR5X2VtYWlsKQoreworCWNoYXIgKmxlZnQsICpyaWdodCwgKm5zdGFydCwgKm5lbmQ7CisJKm5hbWUgPSAqZW1haWwgPSBOVUxMOworCisJaWYgKChsZWZ0ID0gc3RyY2hyKGJ1ZmZlciwgJzwnKSkgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKChyaWdodCA9IHN0cmNocihsZWZ0KzEsICc+JykpID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWlmICghYWxsb3dfZW1wdHlfZW1haWwgJiYgKGxlZnQrMSA9PSByaWdodCkpCisJCXJldHVybiBOVUxMOworCisJLyogcmVtb3ZlIHdoaXRlc3BhY2UgZnJvbSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBuYW1lICovCisJbnN0YXJ0ID0gYnVmZmVyOworCXdoaWxlIChpc3NwYWNlKCpuc3RhcnQpICYmIG5zdGFydCA8IGxlZnQpCisJCSsrbnN0YXJ0OworCW5lbmQgPSBsZWZ0LTE7CisJd2hpbGUgKG5lbmQgPiBuc3RhcnQgJiYgaXNzcGFjZSgqbmVuZCkpCisJCS0tbmVuZDsKKworCSpuYW1lID0gKG5zdGFydCA8PSBuZW5kID8gbnN0YXJ0IDogTlVMTCk7CisJKmVtYWlsID0gbGVmdCsxOworCSoobmVuZCsxKSA9ICdcMCc7CisJKnJpZ2h0KysgPSAnXDAnOworCisJcmV0dXJuICgqcmlnaHQgPT0gJ1wwJyA/IE5VTEwgOiByaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfbWFpbG1hcF9saW5lKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLCBjaGFyICpidWZmZXIsCisJCQkgICAgICBjaGFyICoqcmVwb19hYmJyZXYpCit7CisJY2hhciAqbmFtZTEgPSBOVUxMLCAqZW1haWwxID0gTlVMTCwgKm5hbWUyID0gTlVMTCwgKmVtYWlsMiA9IE5VTEw7CisJaWYgKGJ1ZmZlclswXSA9PSAnIycpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgYWJicmV2W10gPSAiIyByZXBvLWFiYnJldjoiOworCQlpbnQgYWJibGVuID0gc2l6ZW9mKGFiYnJldikgLSAxOworCQlpbnQgbGVuID0gc3RybGVuKGJ1ZmZlcik7CisKKwkJaWYgKCFyZXBvX2FiYnJldikKKwkJCXJldHVybjsKKworCQlpZiAobGVuICYmIGJ1ZmZlcltsZW4gLSAxXSA9PSAnXG4nKQorCQkJYnVmZmVyWy0tbGVuXSA9IDA7CisJCWlmICghc3RybmNtcChidWZmZXIsIGFiYnJldiwgYWJibGVuKSkgeworCQkJY2hhciAqY3A7CisKKwkJCWZyZWUoKnJlcG9fYWJicmV2KTsKKworCQkJZm9yIChjcCA9IGJ1ZmZlciArIGFiYmxlbjsgaXNzcGFjZSgqY3ApOyBjcCsrKQorCQkJCTsgLyogbm90aGluZyAqLworCQkJKnJlcG9fYWJicmV2ID0geHN0cmR1cChjcCk7CisJCX0KKwkJcmV0dXJuOworCX0KKwlpZiAoKG5hbWUyID0gcGFyc2VfbmFtZV9hbmRfZW1haWwoYnVmZmVyLCAmbmFtZTEsICZlbWFpbDEsIDApKSAhPSBOVUxMKQorCQlwYXJzZV9uYW1lX2FuZF9lbWFpbChuYW1lMiwgJm5hbWUyLCAmZW1haWwyLCAxKTsKKworCWlmIChlbWFpbDEpCisJCWFkZF9tYXBwaW5nKG1hcCwgbmFtZTEsIGVtYWlsMSwgbmFtZTIsIGVtYWlsMik7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9tYWlsbWFwX2ZpbGUoc3RydWN0IHN0cmluZ19saXN0ICptYXAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJICAgICBjaGFyICoqcmVwb19hYmJyZXYpCit7CisJY2hhciBidWZmZXJbMTAyNF07CisJRklMRSAqZjsKKworCWlmICghZmlsZW5hbWUpCisJCXJldHVybiAwOworCisJZiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCWlmICghZikgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIG9wZW4gbWFpbG1hcCBhdCAlczogJXMiLAorCQkJICAgICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisKKwl3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZikgIT0gTlVMTCkKKwkJcmVhZF9tYWlsbWFwX2xpbmUobWFwLCBidWZmZXIsIHJlcG9fYWJicmV2KTsKKwlmY2xvc2UoZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfbWFpbG1hcF9zdHJpbmcoc3RydWN0IHN0cmluZ19saXN0ICptYXAsIGNoYXIgKmJ1ZiwKKwkJCQljaGFyICoqcmVwb19hYmJyZXYpCit7CisJd2hpbGUgKCpidWYpIHsKKwkJY2hhciAqZW5kID0gc3RyY2hybnVsKGJ1ZiwgJ1xuJyk7CisKKwkJaWYgKCplbmQpCisJCQkqZW5kKysgPSAnXDAnOworCisJCXJlYWRfbWFpbG1hcF9saW5lKG1hcCwgYnVmLCByZXBvX2FiYnJldik7CisJCWJ1ZiA9IGVuZDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9tYWlsbWFwX2Jsb2Ioc3RydWN0IHN0cmluZ19saXN0ICptYXAsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIGNoYXIgKipyZXBvX2FiYnJldikKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X3NoYTEobmFtZSwgc2hhMSkgPCAwKQorCQlyZXR1cm4gMDsKKworCWJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWYpCisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIHJlYWQgbWFpbG1hcCBvYmplY3QgYXQgJXMiLCBuYW1lKTsKKwlpZiAodHlwZSAhPSBPQkpfQkxPQikKKwkJcmV0dXJuIGVycm9yKCJtYWlsbWFwIGlzIG5vdCBhIGJsb2I6ICVzIiwgbmFtZSk7CisKKwlyZWFkX21haWxtYXBfc3RyaW5nKG1hcCwgYnVmLCByZXBvX2FiYnJldik7CisKKwlmcmVlKGJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK2ludCByZWFkX21haWxtYXAoc3RydWN0IHN0cmluZ19saXN0ICptYXAsIGNoYXIgKipyZXBvX2FiYnJldikKK3sKKwlpbnQgZXJyID0gMDsKKworCW1hcC0+c3RyZHVwX3N0cmluZ3MgPSAxOworCW1hcC0+Y21wID0gbmFtZW1hcF9jbXA7CisKKwlpZiAoIWdpdF9tYWlsbWFwX2Jsb2IgJiYgaXNfYmFyZV9yZXBvc2l0b3J5KCkpCisJCWdpdF9tYWlsbWFwX2Jsb2IgPSAiSEVBRDoubWFpbG1hcCI7CisKKwllcnIgfD0gcmVhZF9tYWlsbWFwX2ZpbGUobWFwLCAiLm1haWxtYXAiLCByZXBvX2FiYnJldik7CisJZXJyIHw9IHJlYWRfbWFpbG1hcF9ibG9iKG1hcCwgZ2l0X21haWxtYXBfYmxvYiwgcmVwb19hYmJyZXYpOworCWVyciB8PSByZWFkX21haWxtYXBfZmlsZShtYXAsIGdpdF9tYWlsbWFwX2ZpbGUsIHJlcG9fYWJicmV2KTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGNsZWFyX21haWxtYXAoc3RydWN0IHN0cmluZ19saXN0ICptYXApCit7CisJZGVidWdfbW0oIm1haWxtYXA6IGNsZWFyaW5nICVkIGVudHJpZXMuLi5cbiIsIG1hcC0+bnIpOworCW1hcC0+c3RyZHVwX3N0cmluZ3MgPSAxOworCXN0cmluZ19saXN0X2NsZWFyX2Z1bmMobWFwLCBmcmVlX21haWxtYXBfZW50cnkpOworCWRlYnVnX21tKCJtYWlsbWFwOiBjbGVhcmVkXG4iKTsKK30KKworLyoKKyAqIExvb2sgZm9yIGFuIGVudHJ5IGluIG1hcCB0aGF0IG1hdGNoIHN0cmluZ1swOmxlbl07IHN0cmluZ1tsZW5dCisgKiBkb2VzIG5vdCBoYXZlIHRvIGJlIE5VTCAoYnV0IGl0IGNvdWxkIGJlKS4KKyAqLworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpsb29rdXBfcHJlZml4KHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBsZW4pCit7CisJaW50IGkgPSBzdHJpbmdfbGlzdF9maW5kX2luc2VydF9pbmRleChtYXAsIHN0cmluZywgMSk7CisJaWYgKGkgPCAwKSB7CisJCS8qIGV4YWN0IG1hdGNoICovCisJCWkgPSAtMSAtIGk7CisJCWlmICghc3RyaW5nW2xlbl0pCisJCQlyZXR1cm4gJm1hcC0+aXRlbXNbaV07CisJCS8qCisJCSAqIHRoYXQgbWFwIGVudHJ5IG1hdGNoZXMgZXhhY3RseSB0byB0aGUgc3RyaW5nLCBpbmNsdWRpbmcKKwkJICogdGhlIGNydWZ0IGF0IHRoZSBlbmQgYmV5b25kICJsZW4iLiAgVGhhdCBpcyBub3QgYSBtYXRjaAorCQkgKiB3aXRoIHN0cmluZ1swOmxlbl0gdGhhdCB3ZSBhcmUgbG9va2luZyBmb3IuCisJCSAqLworCX0gZWxzZSBpZiAoIXN0cmluZ1tsZW5dKSB7CisJCS8qCisJCSAqIGFza2VkIHdpdGggdGhlIHdob2xlIHN0cmluZywgYW5kIGdvdCBub3RoaW5nLiAgTm8KKwkJICogbWF0Y2hpbmcgZW50cnkgY2FuIGV4aXN0IGluIHRoZSBtYXAuCisJCSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKgorCSAqIGkgaXMgYXQgdGhlIGV4YWN0IG1hdGNoIHRvIGFuIG92ZXJsb25nIGtleSwgb3IgbG9jYXRpb24gdGhlCisJICogb3Zlcmxvbmcga2V5IHdvdWxkIGJlIGluc2VydGVkLCB3aGljaCBtdXN0IGNvbWUgYWZ0ZXIgdGhlCisJICogcmVhbCBsb2NhdGlvbiBvZiB0aGUga2V5IGlmIG9uZSBleGlzdHMuCisJICovCisJd2hpbGUgKDAgPD0gLS1pICYmIGkgPCBtYXAtPm5yKSB7CisJCWludCBjbXAgPSBzdHJuY2FzZWNtcChtYXAtPml0ZW1zW2ldLnN0cmluZywgc3RyaW5nLCBsZW4pOworCQlpZiAoY21wIDwgMCkKKwkJCS8qCisJCQkgKiAiaSIgcG9pbnRzIGF0IGEga2V5IGRlZmluaXRlbHkgYmVsb3cgdGhlIHByZWZpeDsKKwkJCSAqIHRoZSBtYXAgZG9lcyBub3QgaGF2ZSBzdHJpbmdbMDpsZW5dIGluIGl0LgorCQkJICovCisJCQlicmVhazsKKwkJZWxzZSBpZiAoIWNtcCAmJiAhbWFwLT5pdGVtc1tpXS5zdHJpbmdbbGVuXSkKKwkJCS8qIGZvdW5kIGl0ICovCisJCQlyZXR1cm4gJm1hcC0+aXRlbXNbaV07CisJCS8qCisJCSAqIG90aGVyd2lzZSwgdGhlIHN0cmluZyBhdCAiaSIgbWF5IGJlIHN0cmluZ1swOmxlbl0KKwkJICogZm9sbG93ZWQgYnkgYSBzdHJpbmcgdGhhdCBzb3J0cyBsYXRlciB0aGFuIHN0cmluZ1tsZW46XTsKKwkJICoga2VlcCB0cnlpbmcuCisJCSAqLworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworaW50IG1hcF91c2VyKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLAorCSAgICAgY29uc3QgY2hhciAqKmVtYWlsLCBzaXplX3QgKmVtYWlsbGVuLAorCSAgICAgY29uc3QgY2hhciAqKm5hbWUsIHNpemVfdCAqbmFtZWxlbikKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgbWFpbG1hcF9lbnRyeSAqbWU7CisKKwlkZWJ1Z19tbSgibWFwX3VzZXI6IG1hcCAnJS4qcycgPCUuKnM+XG4iLAorCQkgKGludCkqbmFtZWxlbiwgZGVidWdfc3RyKCpuYW1lKSwKKwkJIChpbnQpKmVtYWlsbGVuLCBkZWJ1Z19zdHIoKmVtYWlsKSk7CisKKwlpdGVtID0gbG9va3VwX3ByZWZpeChtYXAsICplbWFpbCwgKmVtYWlsbGVuKTsKKwlpZiAoaXRlbSAhPSBOVUxMKSB7CisJCW1lID0gKHN0cnVjdCBtYWlsbWFwX2VudHJ5ICopaXRlbS0+dXRpbDsKKwkJaWYgKG1lLT5uYW1lbWFwLm5yKSB7CisJCQkvKgorCQkJICogVGhlIGl0ZW0gaGFzIG11bHRpcGxlIGl0ZW1zLCBzbyB3ZSdsbCBsb29rIHVwIG9uCisJCQkgKiBuYW1lIHRvby4gSWYgdGhlIG5hbWUgaXMgbm90IGZvdW5kLCB3ZSBjaG9vc2UgdGhlCisJCQkgKiBzaW1wbGUgZW50cnkuCisJCQkgKi8KKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdWJpdGVtOworCQkJc3ViaXRlbSA9IGxvb2t1cF9wcmVmaXgoJm1lLT5uYW1lbWFwLCAqbmFtZSwgKm5hbWVsZW4pOworCQkJaWYgKHN1Yml0ZW0pCisJCQkJaXRlbSA9IHN1Yml0ZW07CisJCX0KKwl9CisJaWYgKGl0ZW0gIT0gTlVMTCkgeworCQlzdHJ1Y3QgbWFpbG1hcF9pbmZvICptaSA9IChzdHJ1Y3QgbWFpbG1hcF9pbmZvICopaXRlbS0+dXRpbDsKKwkJaWYgKG1pLT5uYW1lID09IE5VTEwgJiYgbWktPmVtYWlsID09IE5VTEwpIHsKKwkJCWRlYnVnX21tKCJtYXBfdXNlcjogIC0tIChubyBzaW1wbGUgbWFwcGluZylcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKG1pLT5lbWFpbCkgeworCQkJCSplbWFpbCA9IG1pLT5lbWFpbDsKKwkJCQkqZW1haWxsZW4gPSBzdHJsZW4oKmVtYWlsKTsKKwkJfQorCQlpZiAobWktPm5hbWUpIHsKKwkJCQkqbmFtZSA9IG1pLT5uYW1lOworCQkJCSpuYW1lbGVuID0gc3RybGVuKCpuYW1lKTsKKwkJfQorCQlkZWJ1Z19tbSgibWFwX3VzZXI6ICB0byAnJS4qcycgPCUuKnM+XG4iLAorCQkJIChpbnQpKm5hbWVsZW4sIGRlYnVnX3N0cigqbmFtZSksCisJCQkgKGludCkqZW1haWxsZW4sIGRlYnVnX3N0cigqZW1haWwpKTsKKwkJcmV0dXJuIDE7CisJfQorCWRlYnVnX21tKCJtYXBfdXNlcjogIC0tXG4iKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21haWxtYXAuaCBiL21haWxtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDdjOTNiCi0tLSAvZGV2L251bGwKKysrIGIvbWFpbG1hcC5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgTUFJTE1BUF9ICisjZGVmaW5lIE1BSUxNQVBfSAorCitpbnQgcmVhZF9tYWlsbWFwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLCBjaGFyICoqcmVwb19hYmJyZXYpOwordm9pZCBjbGVhcl9tYWlsbWFwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwKTsKKworaW50IG1hcF91c2VyKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWFwLAorCQkJIGNvbnN0IGNoYXIgKiplbWFpbCwgc2l6ZV90ICplbWFpbGxlbiwgY29uc3QgY2hhciAqKm5hbWUsIHNpemVfdCAqbmFtZWxlbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWF0Y2gtdHJlZXMuYyBiL21hdGNoLXRyZWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlMDk1NAotLS0gL2Rldi9udWxsCisrKyBiL21hdGNoLXRyZWVzLmMKQEAgLTAsMCArMSwzNDQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKworc3RhdGljIGludCBzY29yZV9taXNzaW5nKHVuc2lnbmVkIG1vZGUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHNjb3JlOworCisJaWYgKFNfSVNESVIobW9kZSkpCisJCXNjb3JlID0gLTEwMDA7CisJZWxzZSBpZiAoU19JU0xOSyhtb2RlKSkKKwkJc2NvcmUgPSAtNTAwOworCWVsc2UKKwkJc2NvcmUgPSAtNTA7CisJcmV0dXJuIHNjb3JlOworfQorCitzdGF0aWMgaW50IHNjb3JlX2RpZmZlcnModW5zaWduZWQgbW9kZTEsIHVuc2lnbmVkIG1vZGUyLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBzY29yZTsKKworCWlmIChTX0lTRElSKG1vZGUxKSAhPSBTX0lTRElSKG1vZGUyKSkKKwkJc2NvcmUgPSAtMTAwOworCWVsc2UgaWYgKFNfSVNMTksobW9kZTEpICE9IFNfSVNMTksobW9kZTIpKQorCQlzY29yZSA9IC01MDsKKwllbHNlCisJCXNjb3JlID0gLTU7CisJcmV0dXJuIHNjb3JlOworfQorCitzdGF0aWMgaW50IHNjb3JlX21hdGNoZXModW5zaWduZWQgbW9kZTEsIHVuc2lnbmVkIG1vZGUyLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBzY29yZTsKKworCS8qIEhlaCwgd2UgZm91bmQgU0hBLTEgY29sbGlzaW9ucyBiZXR3ZWVuIGRpZmZlcmVudCBraW5kIG9mIG9iamVjdHMgKi8KKwlpZiAoU19JU0RJUihtb2RlMSkgIT0gU19JU0RJUihtb2RlMikpCisJCXNjb3JlID0gLTEwMDsKKwllbHNlIGlmIChTX0lTTE5LKG1vZGUxKSAhPSBTX0lTTE5LKG1vZGUyKSkKKwkJc2NvcmUgPSAtNTA7CisKKwllbHNlIGlmIChTX0lTRElSKG1vZGUxKSkKKwkJc2NvcmUgPSAxMDAwOworCWVsc2UgaWYgKFNfSVNMTksobW9kZTEpKQorCQlzY29yZSA9IDUwMDsKKwllbHNlCisJCXNjb3JlID0gMjUwOworCXJldHVybiBzY29yZTsKK30KKworc3RhdGljIHZvaWQgKmZpbGxfdHJlZV9kZXNjX3N0cmljdChzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLAorCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gpCit7CisJdm9pZCAqYnVmZmVyOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlidWZmZXIgPSByZWFkX3NoYTFfZmlsZShoYXNoLCAmdHlwZSwgJnNpemUpOworCWlmICghYnVmZmVyKQorCQlkaWUoInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIsIHNoYTFfdG9faGV4KGhhc2gpKTsKKwlpZiAodHlwZSAhPSBPQkpfVFJFRSkKKwkJZGllKCIlcyBpcyBub3QgYSB0cmVlIiwgc2hhMV90b19oZXgoaGFzaCkpOworCWluaXRfdHJlZV9kZXNjKGRlc2MsIGJ1ZmZlciwgc2l6ZSk7CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIGludCBiYXNlX25hbWVfZW50cmllc19jb21wYXJlKGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICphLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKmIpCit7CisJcmV0dXJuIGJhc2VfbmFtZV9jb21wYXJlKGEtPnBhdGgsIHRyZWVfZW50cnlfbGVuKGEpLCBhLT5tb2RlLAorCQkJCSBiLT5wYXRoLCB0cmVlX2VudHJ5X2xlbihiKSwgYi0+bW9kZSk7Cit9CisKKy8qCisgKiBJbnNwZWN0IHR3byB0cmVlcywgYW5kIGdpdmUgYSBzY29yZSB0aGF0IHRlbGxzIGhvdyBzaW1pbGFyIHRoZXkgYXJlLgorICovCitzdGF0aWMgaW50IHNjb3JlX3RyZWVzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gxLCBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMikKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIG9uZTsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHR3bzsKKwl2b2lkICpvbmVfYnVmID0gZmlsbF90cmVlX2Rlc2Nfc3RyaWN0KCZvbmUsIGhhc2gxKTsKKwl2b2lkICp0d29fYnVmID0gZmlsbF90cmVlX2Rlc2Nfc3RyaWN0KCZ0d28sIGhhc2gyKTsKKwlpbnQgc2NvcmUgPSAwOworCisJZm9yICg7OykgeworCQlzdHJ1Y3QgbmFtZV9lbnRyeSBlMSwgZTI7CisJCWludCBnb3RfZW50cnlfZnJvbV9vbmUgPSB0cmVlX2VudHJ5KCZvbmUsICZlMSk7CisJCWludCBnb3RfZW50cnlfZnJvbV90d28gPSB0cmVlX2VudHJ5KCZ0d28sICZlMik7CisJCWludCBjbXA7CisKKwkJaWYgKGdvdF9lbnRyeV9mcm9tX29uZSAmJiBnb3RfZW50cnlfZnJvbV90d28pCisJCQljbXAgPSBiYXNlX25hbWVfZW50cmllc19jb21wYXJlKCZlMSwgJmUyKTsKKwkJZWxzZSBpZiAoZ290X2VudHJ5X2Zyb21fb25lKQorCQkJLyogdHdvIGxhY2tzIHRoaXMgZW50cnkgKi8KKwkJCWNtcCA9IC0xOworCQllbHNlIGlmIChnb3RfZW50cnlfZnJvbV90d28pCisJCQkvKiB0d28gaGFzIG1vcmUgZW50cmllcyAqLworCQkJY21wID0gMTsKKwkJZWxzZQorCQkJYnJlYWs7CisKKwkJaWYgKGNtcCA8IDApCisJCQkvKiBwYXRoMSBkb2VzIG5vdCBhcHBlYXIgaW4gdHdvICovCisJCQlzY29yZSArPSBzY29yZV9taXNzaW5nKGUxLm1vZGUsIGUxLnBhdGgpOworCQllbHNlIGlmIChjbXAgPiAwKQorCQkJLyogcGF0aDIgZG9lcyBub3QgYXBwZWFyIGluIG9uZSAqLworCQkJc2NvcmUgKz0gc2NvcmVfbWlzc2luZyhlMi5tb2RlLCBlMi5wYXRoKTsKKwkJZWxzZSBpZiAoaGFzaGNtcChlMS5zaGExLCBlMi5zaGExKSkKKwkJCS8qIHRoZXkgYXJlIGRpZmZlcmVudCAqLworCQkJc2NvcmUgKz0gc2NvcmVfZGlmZmVycyhlMS5tb2RlLCBlMi5tb2RlLCBlMS5wYXRoKTsKKwkJZWxzZQorCQkJLyogc2FtZSBzdWJ0cmVlIG9yIGJsb2IgKi8KKwkJCXNjb3JlICs9IHNjb3JlX21hdGNoZXMoZTEubW9kZSwgZTIubW9kZSwgZTEucGF0aCk7CisJfQorCWZyZWUob25lX2J1Zik7CisJZnJlZSh0d29fYnVmKTsKKwlyZXR1cm4gc2NvcmU7Cit9CisKKy8qCisgKiBNYXRjaCBvbmUgaXRzZWxmIGFuZCBpdHMgc3VidHJlZXMgd2l0aCB0d28gYW5kIHBpY2sgdGhlIGJlc3QgbWF0Y2guCisgKi8KK3N0YXRpYyB2b2lkIG1hdGNoX3RyZWVzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gxLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaDIsCisJCQlpbnQgKmJlc3Rfc2NvcmUsCisJCQljaGFyICoqYmVzdF9tYXRjaCwKKwkJCWNvbnN0IGNoYXIgKmJhc2UsCisJCQlpbnQgcmVjdXJzZV9saW1pdCkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIG9uZTsKKwl2b2lkICpvbmVfYnVmID0gZmlsbF90cmVlX2Rlc2Nfc3RyaWN0KCZvbmUsIGhhc2gxKTsKKworCXdoaWxlIChvbmUuc2l6ZSkgeworCQljb25zdCBjaGFyICpwYXRoOworCQljb25zdCB1bnNpZ25lZCBjaGFyICplbGVtOworCQl1bnNpZ25lZCBtb2RlOworCQlpbnQgc2NvcmU7CisKKwkJZWxlbSA9IHRyZWVfZW50cnlfZXh0cmFjdCgmb25lLCAmcGF0aCwgJm1vZGUpOworCQlpZiAoIVNfSVNESVIobW9kZSkpCisJCQlnb3RvIG5leHQ7CisJCXNjb3JlID0gc2NvcmVfdHJlZXMoZWxlbSwgaGFzaDIpOworCQlpZiAoKmJlc3Rfc2NvcmUgPCBzY29yZSkgeworCQkJZnJlZSgqYmVzdF9tYXRjaCk7CisJCQkqYmVzdF9tYXRjaCA9IHhzdHJmbXQoIiVzJXMiLCBiYXNlLCBwYXRoKTsKKwkJCSpiZXN0X3Njb3JlID0gc2NvcmU7CisJCX0KKwkJaWYgKHJlY3Vyc2VfbGltaXQpIHsKKwkJCWNoYXIgKm5ld2Jhc2UgPSB4c3RyZm10KCIlcyVzLyIsIGJhc2UsIHBhdGgpOworCQkJbWF0Y2hfdHJlZXMoZWxlbSwgaGFzaDIsIGJlc3Rfc2NvcmUsIGJlc3RfbWF0Y2gsCisJCQkJICAgIG5ld2Jhc2UsIHJlY3Vyc2VfbGltaXQgLSAxKTsKKwkJCWZyZWUobmV3YmFzZSk7CisJCX0KKworCW5leHQ6CisJCXVwZGF0ZV90cmVlX2VudHJ5KCZvbmUpOworCX0KKwlmcmVlKG9uZV9idWYpOworfQorCisvKgorICogQSB0cmVlICJoYXNoMSIgaGFzIGEgc3ViZGlyZWN0b3J5IGF0ICJwcmVmaXgiLiAgQ29tZSB1cCB3aXRoIGEKKyAqIHRyZWUgb2JqZWN0IGJ5IHJlcGxhY2luZyBpdCB3aXRoIGFub3RoZXIgdHJlZSAiaGFzaDIiLgorICovCitzdGF0aWMgaW50IHNwbGljZV90cmVlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gxLAorCQkgICAgICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaDIsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHQpCit7CisJY2hhciAqc3VicGF0aDsKKwlpbnQgdG9wbGVuOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHN6OworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwl1bnNpZ25lZCBjaGFyICpyZXdyaXRlX2hlcmU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcmV3cml0ZV93aXRoOworCXVuc2lnbmVkIGNoYXIgc3VidHJlZVsyMF07CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWludCBzdGF0dXM7CisKKwlzdWJwYXRoID0gc3RyY2hybnVsKHByZWZpeCwgJy8nKTsKKwl0b3BsZW4gPSBzdWJwYXRoIC0gcHJlZml4OworCWlmICgqc3VicGF0aCkKKwkJc3VicGF0aCsrOworCisJYnVmID0gcmVhZF9zaGExX2ZpbGUoaGFzaDEsICZ0eXBlLCAmc3opOworCWlmICghYnVmKQorCQlkaWUoImNhbm5vdCByZWFkIHRyZWUgJXMiLCBzaGExX3RvX2hleChoYXNoMSkpOworCWluaXRfdHJlZV9kZXNjKCZkZXNjLCBidWYsIHN6KTsKKworCXJld3JpdGVfaGVyZSA9IE5VTEw7CisJd2hpbGUgKGRlc2Muc2l6ZSkgeworCQljb25zdCBjaGFyICpuYW1lOworCQl1bnNpZ25lZCBtb2RlOworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCisJCXNoYTEgPSB0cmVlX2VudHJ5X2V4dHJhY3QoJmRlc2MsICZuYW1lLCAmbW9kZSk7CisJCWlmIChzdHJsZW4obmFtZSkgPT0gdG9wbGVuICYmCisJCSAgICAhbWVtY21wKG5hbWUsIHByZWZpeCwgdG9wbGVuKSkgeworCQkJaWYgKCFTX0lTRElSKG1vZGUpKQorCQkJCWRpZSgiZW50cnkgJXMgaW4gdHJlZSAlcyBpcyBub3QgYSB0cmVlIiwKKwkJCQkgICAgbmFtZSwgc2hhMV90b19oZXgoaGFzaDEpKTsKKwkJCXJld3JpdGVfaGVyZSA9ICh1bnNpZ25lZCBjaGFyICopIHNoYTE7CisJCQlicmVhazsKKwkJfQorCQl1cGRhdGVfdHJlZV9lbnRyeSgmZGVzYyk7CisJfQorCWlmICghcmV3cml0ZV9oZXJlKQorCQlkaWUoImVudHJ5ICUuKnMgbm90IGZvdW5kIGluIHRyZWUgJXMiLAorCQkgICAgdG9wbGVuLCBwcmVmaXgsIHNoYTFfdG9faGV4KGhhc2gxKSk7CisJaWYgKCpzdWJwYXRoKSB7CisJCXN0YXR1cyA9IHNwbGljZV90cmVlKHJld3JpdGVfaGVyZSwgc3VicGF0aCwgaGFzaDIsIHN1YnRyZWUpOworCQlpZiAoc3RhdHVzKQorCQkJcmV0dXJuIHN0YXR1czsKKwkJcmV3cml0ZV93aXRoID0gc3VidHJlZTsKKwl9CisJZWxzZQorCQlyZXdyaXRlX3dpdGggPSBoYXNoMjsKKwloYXNoY3B5KHJld3JpdGVfaGVyZSwgcmV3cml0ZV93aXRoKTsKKwlzdGF0dXMgPSB3cml0ZV9zaGExX2ZpbGUoYnVmLCBzeiwgdHJlZV90eXBlLCByZXN1bHQpOworCWZyZWUoYnVmKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKgorICogV2UgYXJlIHRyeWluZyB0byBjb21lIHVwIHdpdGggYSBtZXJnZSBiZXR3ZWVuIG9uZSBhbmQgdHdvIHRoYXQKKyAqIHJlc3VsdHMgaW4gYSB0cmVlIHNoYXBlIHNpbWlsYXIgdG8gb25lLiAgVGhlIHRyZWUgdHdvIG1pZ2h0CisgKiBjb3JyZXNwb25kIHRvIGEgc3VidHJlZSBvZiBvbmUsIGluIHdoaWNoIGNhc2UgaXQgbmVlZHMgdG8gYmUKKyAqIHNoaWZ0ZWQgZG93biBieSBwcmVmaXhpbmcgb3RoZXJ3aXNlIGVtcHR5IGRpcmVjdG9yaWVzLiAgT24gdGhlCisgKiBvdGhlciBoYW5kLCBpdCBjb3VsZCBjb3ZlciB0cmVlIG9uZSBhbmQgd2UgbWlnaHQgbmVlZCB0byBwaWNrIGEKKyAqIHN1YnRyZWUgb2YgaXQuCisgKi8KK3ZvaWQgc2hpZnRfdHJlZShjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaDIsCisJCXVuc2lnbmVkIGNoYXIgKnNoaWZ0ZWQsCisJCWludCBkZXB0aF9saW1pdCkKK3sKKwljaGFyICphZGRfcHJlZml4OworCWNoYXIgKmRlbF9wcmVmaXg7CisJaW50IGFkZF9zY29yZSwgZGVsX3Njb3JlOworCisJLyoKKwkgKiBORUVEU1dPUks6IHRoaXMgbGltaXRzIHRoZSByZWN1cnNpb24gZGVwdGggdG8gaGFyZGNvZGVkCisJICogdmFsdWUgJzInIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBvdmVyaGVhZC4KKwkgKi8KKwlpZiAoIWRlcHRoX2xpbWl0KQorCQlkZXB0aF9saW1pdCA9IDI7CisKKwlhZGRfc2NvcmUgPSBkZWxfc2NvcmUgPSBzY29yZV90cmVlcyhoYXNoMSwgaGFzaDIpOworCWFkZF9wcmVmaXggPSB4Y2FsbG9jKDEsIDEpOworCWRlbF9wcmVmaXggPSB4Y2FsbG9jKDEsIDEpOworCisJLyoKKwkgKiBTZWUgaWYgb25lJ3Mgc3VidHJlZSByZXNlbWJsZXMgdHdvOyBpZiBzbyB3ZSBuZWVkIHRvIHByZWZpeAorCSAqIHR3byB3aXRoIGEgZmV3IGZha2UgdHJlZXMgdG8gbWF0Y2ggdGhlIHByZWZpeC4KKwkgKi8KKwltYXRjaF90cmVlcyhoYXNoMSwgaGFzaDIsICZhZGRfc2NvcmUsICZhZGRfcHJlZml4LCAiIiwgZGVwdGhfbGltaXQpOworCisJLyoKKwkgKiBTZWUgaWYgdHdvJ3Mgc3VidHJlZSByZXNlbWJsZXMgb25lOyBpZiBzbyB3ZSBuZWVkIHRvCisJICogcGljayBvbmx5IHN1YnRyZWUgb2YgdHdvLgorCSAqLworCW1hdGNoX3RyZWVzKGhhc2gyLCBoYXNoMSwgJmRlbF9zY29yZSwgJmRlbF9wcmVmaXgsICIiLCBkZXB0aF9saW1pdCk7CisKKwkvKiBBc3N1bWUgd2UgZG8gbm90IGhhdmUgdG8gZG8gYW55IHNoaWZ0aW5nICovCisJaGFzaGNweShzaGlmdGVkLCBoYXNoMik7CisKKwlpZiAoYWRkX3Njb3JlIDwgZGVsX3Njb3JlKSB7CisJCS8qIFdlIG5lZWQgdG8gcGljayBhIHN1YnRyZWUgb2YgdHdvICovCisJCXVuc2lnbmVkIG1vZGU7CisKKwkJaWYgKCEqZGVsX3ByZWZpeCkKKwkJCXJldHVybjsKKworCQlpZiAoZ2V0X3RyZWVfZW50cnkoaGFzaDIsIGRlbF9wcmVmaXgsIHNoaWZ0ZWQsICZtb2RlKSkKKwkJCWRpZSgiY2Fubm90IGZpbmQgcGF0aCAlcyBpbiB0cmVlICVzIiwKKwkJCSAgICBkZWxfcHJlZml4LCBzaGExX3RvX2hleChoYXNoMikpOworCQlyZXR1cm47CisJfQorCisJaWYgKCEqYWRkX3ByZWZpeCkKKwkJcmV0dXJuOworCisJc3BsaWNlX3RyZWUoaGFzaDEsIGFkZF9wcmVmaXgsIGhhc2gyLCBzaGlmdGVkKTsKK30KKworLyoKKyAqIFRoZSB1c2VyIHNheXMgdGhlIHRyZWVzIHdpbGwgYmUgc2hpZnRlZCBieSB0aGlzIG11Y2guCisgKiBVbmZvcnR1bmF0ZWx5IHdlIGNhbm5vdCBmdW5kYW1lbnRhbGx5IHRlbGwgd2hpY2ggb25lIHRvCisgKiBiZSBwcmVmaXhlZCwgYXMgcmVjdXJzaXZlIG1lcmdlIGNhbiB3b3JrIGluIGVpdGhlciBkaXJlY3Rpb24uCisgKi8KK3ZvaWQgc2hpZnRfdHJlZV9ieShjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoMSwKKwkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaDIsCisJCSAgIHVuc2lnbmVkIGNoYXIgKnNoaWZ0ZWQsCisJCSAgIGNvbnN0IGNoYXIgKnNoaWZ0X3ByZWZpeCkKK3sKKwl1bnNpZ25lZCBjaGFyIHN1YjFbMjBdLCBzdWIyWzIwXTsKKwl1bnNpZ25lZCBtb2RlMSwgbW9kZTI7CisJdW5zaWduZWQgY2FuZGlkYXRlID0gMDsKKworCS8qIENhbiBoYXNoMiBiZSBhIHRyZWUgYXQgc2hpZnRfcHJlZml4IGluIHRyZWUgaGFzaDE/ICovCisJaWYgKCFnZXRfdHJlZV9lbnRyeShoYXNoMSwgc2hpZnRfcHJlZml4LCBzdWIxLCAmbW9kZTEpICYmCisJICAgIFNfSVNESVIobW9kZTEpKQorCQljYW5kaWRhdGUgfD0gMTsKKworCS8qIENhbiBoYXNoMSBiZSBhIHRyZWUgYXQgc2hpZnRfcHJlZml4IGluIHRyZWUgaGFzaDI/ICovCisJaWYgKCFnZXRfdHJlZV9lbnRyeShoYXNoMiwgc2hpZnRfcHJlZml4LCBzdWIyLCAmbW9kZTIpICYmCisJICAgIFNfSVNESVIobW9kZTIpKQorCQljYW5kaWRhdGUgfD0gMjsKKworCWlmIChjYW5kaWRhdGUgPT0gMykgeworCQkvKiBCb3RoIGFyZSBwbGF1c2libGUgLS0gd2UgbmVlZCB0byBldmFsdWF0ZSB0aGUgc2NvcmUgKi8KKwkJaW50IGJlc3Rfc2NvcmUgPSBzY29yZV90cmVlcyhoYXNoMSwgaGFzaDIpOworCQlpbnQgc2NvcmU7CisKKwkJY2FuZGlkYXRlID0gMDsKKwkJc2NvcmUgPSBzY29yZV90cmVlcyhzdWIxLCBoYXNoMik7CisJCWlmIChzY29yZSA+IGJlc3Rfc2NvcmUpIHsKKwkJCWNhbmRpZGF0ZSA9IDE7CisJCQliZXN0X3Njb3JlID0gc2NvcmU7CisJCX0KKwkJc2NvcmUgPSBzY29yZV90cmVlcyhzdWIyLCBoYXNoMSk7CisJCWlmIChzY29yZSA+IGJlc3Rfc2NvcmUpCisJCQljYW5kaWRhdGUgPSAyOworCX0KKworCWlmICghY2FuZGlkYXRlKSB7CisJCS8qIE5laXRoZXIgaXMgcGxhdXNpYmxlIC0tIGRvIG5vdCBzaGlmdCAqLworCQloYXNoY3B5KHNoaWZ0ZWQsIGhhc2gyKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChjYW5kaWRhdGUgPT0gMSkKKwkJLyoKKwkJICogc2hpZnQgdHJlZTIgZG93biBieSBhZGRpbmcgc2hpZnRfcHJlZml4IGFib3ZlIGl0CisJCSAqIHRvIG1hdGNoIHRyZWUxLgorCQkgKi8KKwkJc3BsaWNlX3RyZWUoaGFzaDEsIHNoaWZ0X3ByZWZpeCwgaGFzaDIsIHNoaWZ0ZWQpOworCWVsc2UKKwkJLyoKKwkJICogc2hpZnQgdHJlZTIgdXAgYnkgcmVtb3Zpbmcgc2hpZnRfcHJlZml4IGZyb20gaXQKKwkJICogdG8gbWF0Y2ggdHJlZTEuCisJCSAqLworCQloYXNoY3B5KHNoaWZ0ZWQsIHN1YjIpOworfQpkaWZmIC0tZ2l0IGEvbWVyZ2UtYmxvYnMuYyBiL21lcmdlLWJsb2JzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FiYjg5NAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlLWJsb2JzLmMKQEAgLTAsMCArMSwxMjYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibGwtbWVyZ2UuaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAibWVyZ2UtYmxvYnMuaCIKKworc3RhdGljIGludCBmaWxsX21tZmlsZV9ibG9iKG1tZmlsZV90ICpmLCBzdHJ1Y3QgYmxvYiAqb2JqKQoreworCXZvaWQgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJYnVmID0gcmVhZF9zaGExX2ZpbGUob2JqLT5vYmplY3Quc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC0xOworCWlmICh0eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmLT5wdHIgPSBidWY7CisJZi0+c2l6ZSA9IHNpemU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbW1maWxlKG1tZmlsZV90ICpmKQoreworCWZyZWUoZi0+cHRyKTsKK30KKworc3RhdGljIHZvaWQgKnRocmVlX3dheV9maWxlbWVyZ2UoY29uc3QgY2hhciAqcGF0aCwgbW1maWxlX3QgKmJhc2UsIG1tZmlsZV90ICpvdXIsIG1tZmlsZV90ICp0aGVpciwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwlpbnQgbWVyZ2Vfc3RhdHVzOworCW1tYnVmZmVyX3QgcmVzOworCisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCBieSBjbWRfbWVyZ2VfdHJlZSwgd2hpY2gKKwkgKiBkb2VzIG5vdCByZXNwZWN0IHRoZSBtZXJnZS5jb25mbGljdHN0eWxlIG9wdGlvbi4KKwkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGEgbGFiZWwgZm9yIHRoZQorCSAqIGNvbW1vbiBhbmNlc3Rvci4KKwkgKi8KKwltZXJnZV9zdGF0dXMgPSBsbF9tZXJnZSgmcmVzLCBwYXRoLCBiYXNlLCBOVUxMLAorCQkJCW91ciwgIi5vdXIiLCB0aGVpciwgIi50aGVpciIsIE5VTEwpOworCWlmIChtZXJnZV9zdGF0dXMgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCSpzaXplID0gcmVzLnNpemU7CisJcmV0dXJuIHJlcy5wdHI7Cit9CisKK3N0YXRpYyBpbnQgY29tbW9uX291dGYodm9pZCAqcHJpdl8sIG1tYnVmZmVyX3QgKm1iLCBpbnQgbmJ1ZikKK3sKKwlpbnQgaTsKKwltbWZpbGVfdCAqZHN0ID0gcHJpdl87CisKKwlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrKSB7CisJCW1lbWNweShkc3QtPnB0ciArIGRzdC0+c2l6ZSwgbWJbaV0ucHRyLCBtYltpXS5zaXplKTsKKwkJZHN0LT5zaXplICs9IG1iW2ldLnNpemU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdlbmVyYXRlX2NvbW1vbl9maWxlKG1tZmlsZV90ICpyZXMsIG1tZmlsZV90ICpmMSwgbW1maWxlX3QgKmYyKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGYxLT5zaXplIDwgZjItPnNpemUgPyBmMS0+c2l6ZSA6IGYyLT5zaXplOworCXZvaWQgKnB0ciA9IHhtYWxsb2Moc2l6ZSk7CisJeHBwYXJhbV90IHhwcDsKKwl4ZGVtaXRjb25mX3QgeGVjZmc7CisJeGRlbWl0Y2JfdCBlY2I7CisKKwltZW1zZXQoJnhwcCwgMCwgc2l6ZW9mKHhwcCkpOworCXhwcC5mbGFncyA9IDA7CisJbWVtc2V0KCZ4ZWNmZywgMCwgc2l6ZW9mKHhlY2ZnKSk7CisJeGVjZmcuY3R4bGVuID0gMzsKKwl4ZWNmZy5mbGFncyA9IFhETF9FTUlUX0NPTU1PTjsKKwllY2Iub3V0ZiA9IGNvbW1vbl9vdXRmOworCisJcmVzLT5wdHIgPSBwdHI7CisJcmVzLT5zaXplID0gMDsKKworCWVjYi5wcml2ID0gcmVzOworCXJldHVybiB4ZGlfZGlmZihmMSwgZjIsICZ4cHAsICZ4ZWNmZywgJmVjYik7Cit9CisKK3ZvaWQgKm1lcmdlX2Jsb2JzKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBibG9iICpiYXNlLCBzdHJ1Y3QgYmxvYiAqb3VyLCBzdHJ1Y3QgYmxvYiAqdGhlaXIsIHVuc2lnbmVkIGxvbmcgKnNpemUpCit7CisJdm9pZCAqcmVzID0gTlVMTDsKKwltbWZpbGVfdCBmMSwgZjIsIGNvbW1vbjsKKworCS8qCisJICogUmVtb3ZlZCBpbiBlaXRoZXIgYnJhbmNoPworCSAqCisJICogTk9URSEgVGhpcyBkZXBlbmRzIG9uIHRoZSBjYWxsZXIgaGF2aW5nIGRvbmUgdGhlCisJICogcHJvcGVyIHdhcm5pbmcgYWJvdXQgcmVtb3ZpbmcgYSBmaWxlIHRoYXQgZ290CisJICogbW9kaWZpZWQgaW4gdGhlIG90aGVyIGJyYW5jaCEKKwkgKi8KKwlpZiAoIW91ciB8fCAhdGhlaXIpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQlpZiAoYmFzZSkKKwkJCXJldHVybiBOVUxMOworCQlpZiAoIW91cikKKwkJCW91ciA9IHRoZWlyOworCQlyZXR1cm4gcmVhZF9zaGExX2ZpbGUob3VyLT5vYmplY3Quc2hhMSwgJnR5cGUsIHNpemUpOworCX0KKworCWlmIChmaWxsX21tZmlsZV9ibG9iKCZmMSwgb3VyKSA8IDApCisJCWdvdG8gb3V0X25vX21tZmlsZTsKKwlpZiAoZmlsbF9tbWZpbGVfYmxvYigmZjIsIHRoZWlyKSA8IDApCisJCWdvdG8gb3V0X2ZyZWVfZjE7CisKKwlpZiAoYmFzZSkgeworCQlpZiAoZmlsbF9tbWZpbGVfYmxvYigmY29tbW9uLCBiYXNlKSA8IDApCisJCQlnb3RvIG91dF9mcmVlX2YyX2YxOworCX0gZWxzZSB7CisJCWlmIChnZW5lcmF0ZV9jb21tb25fZmlsZSgmY29tbW9uLCAmZjEsICZmMikgPCAwKQorCQkJZ290byBvdXRfZnJlZV9mMl9mMTsKKwl9CisJcmVzID0gdGhyZWVfd2F5X2ZpbGVtZXJnZShwYXRoLCAmY29tbW9uLCAmZjEsICZmMiwgc2l6ZSk7CisJZnJlZV9tbWZpbGUoJmNvbW1vbik7CitvdXRfZnJlZV9mMl9mMToKKwlmcmVlX21tZmlsZSgmZjIpOworb3V0X2ZyZWVfZjE6CisJZnJlZV9tbWZpbGUoJmYxKTsKK291dF9ub19tbWZpbGU6CisJcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL21lcmdlLWJsb2JzLmggYi9tZXJnZS1ibG9icy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYjU2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZS1ibG9icy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBNRVJHRV9CTE9CU19ICisjZGVmaW5lIE1FUkdFX0JMT0JTX0gKKworI2luY2x1ZGUgImJsb2IuaCIKKworZXh0ZXJuIHZvaWQgKm1lcmdlX2Jsb2JzKGNvbnN0IGNoYXIgKiwgc3RydWN0IGJsb2IgKiwgc3RydWN0IGJsb2IgKiwgc3RydWN0IGJsb2IgKiwgdW5zaWduZWQgbG9uZyAqKTsKKworI2VuZGlmIC8qIE1FUkdFX0JMT0JTX0ggKi8KZGlmZiAtLWdpdCBhL21lcmdlLXJlY3Vyc2l2ZS5jIGIvbWVyZ2UtcmVjdXJzaXZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVlNzRkOAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlLXJlY3Vyc2l2ZS5jCkBAIC0wLDAgKzEsMjA5NCBAQAorLyoKKyAqIFJlY3Vyc2l2ZSBNZXJnZSBhbGdvcml0aG0gc3RvbGVuIGZyb20gZ2l0LW1lcmdlLXJlY3Vyc2l2ZS5weSBieQorICogRnJlZHJpayBLdWl2aW5lbi4KKyAqIFRoZSB0aGlldmVzIHdlcmUgQWxleCBSaWVzZW4gYW5kIEpvaGFubmVzIFNjaGluZGVsaW4sIGluIEp1bmUvSnVseSAyMDA2CisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImFkdmljZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAiY2FjaGUtdHJlZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJidWlsdGluLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAidW5wYWNrLXRyZWVzLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJ4ZGlmZi1pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJsbC1tZXJnZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJtZXJnZS1yZWN1cnNpdmUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIHN0cnVjdCB0cmVlICpzaGlmdF90cmVlX29iamVjdChzdHJ1Y3QgdHJlZSAqb25lLCBzdHJ1Y3QgdHJlZSAqdHdvLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKnN1YnRyZWVfc2hpZnQpCit7CisJdW5zaWduZWQgY2hhciBzaGlmdGVkWzIwXTsKKworCWlmICghKnN1YnRyZWVfc2hpZnQpIHsKKwkJc2hpZnRfdHJlZShvbmUtPm9iamVjdC5zaGExLCB0d28tPm9iamVjdC5zaGExLCBzaGlmdGVkLCAwKTsKKwl9IGVsc2UgeworCQlzaGlmdF90cmVlX2J5KG9uZS0+b2JqZWN0LnNoYTEsIHR3by0+b2JqZWN0LnNoYTEsIHNoaWZ0ZWQsCisJCQkgICAgICBzdWJ0cmVlX3NoaWZ0KTsKKwl9CisJaWYgKCFoYXNoY21wKHR3by0+b2JqZWN0LnNoYTEsIHNoaWZ0ZWQpKQorCQlyZXR1cm4gdHdvOworCXJldHVybiBsb29rdXBfdHJlZShzaGlmdGVkKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKm1ha2VfdmlydHVhbF9jb21taXQoc3RydWN0IHRyZWUgKnRyZWUsIGNvbnN0IGNoYXIgKmNvbW1lbnQpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gYWxsb2NfY29tbWl0X25vZGUoKTsKKwlzdHJ1Y3QgbWVyZ2VfcmVtb3RlX2Rlc2MgKmRlc2MgPSB4bWFsbG9jKHNpemVvZigqZGVzYykpOworCisJZGVzYy0+bmFtZSA9IGNvbW1lbnQ7CisJZGVzYy0+b2JqID0gKHN0cnVjdCBvYmplY3QgKiljb21taXQ7CisJY29tbWl0LT50cmVlID0gdHJlZTsKKwljb21taXQtPnV0aWwgPSBkZXNjOworCWNvbW1pdC0+b2JqZWN0LnBhcnNlZCA9IDE7CisJcmV0dXJuIGNvbW1pdDsKK30KKworLyoKKyAqIFNpbmNlIHdlIHVzZSBnZXRfdHJlZV9lbnRyeSgpLCB3aGljaCBkb2VzIG5vdCBwdXQgdGhlIHJlYWQgb2JqZWN0IGludG8KKyAqIHRoZSBvYmplY3QgcG9vbCwgd2UgY2Fubm90IHJlbHkgb24gYSA9PSBiLgorICovCitzdGF0aWMgaW50IHNoYV9lcShjb25zdCB1bnNpZ25lZCBjaGFyICphLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiKQoreworCWlmICghYSAmJiAhYikKKwkJcmV0dXJuIDI7CisJcmV0dXJuIGEgJiYgYiAmJiBoYXNoY21wKGEsIGIpID09IDA7Cit9CisKK2VudW0gcmVuYW1lX3R5cGUgeworCVJFTkFNRV9OT1JNQUwgPSAwLAorCVJFTkFNRV9ERUxFVEUsCisJUkVOQU1FX09ORV9GSUxFX1RPX09ORSwKKwlSRU5BTUVfT05FX0ZJTEVfVE9fVFdPLAorCVJFTkFNRV9UV09fRklMRVNfVE9fT05FCit9OworCitzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8geworCWVudW0gcmVuYW1lX3R5cGUgcmVuYW1lX3R5cGU7CisJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIxOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyMjsKKwljb25zdCBjaGFyICpicmFuY2gxOworCWNvbnN0IGNoYXIgKmJyYW5jaDI7CisJc3RydWN0IHN0YWdlX2RhdGEgKmRzdF9lbnRyeTE7CisJc3RydWN0IHN0YWdlX2RhdGEgKmRzdF9lbnRyeTI7CisJc3RydWN0IGRpZmZfZmlsZXNwZWMgcmVuMV9vdGhlcjsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyByZW4yX290aGVyOworfTsKKworLyoKKyAqIFNpbmNlIHdlIHdhbnQgdG8gd3JpdGUgdGhlIGluZGV4IGV2ZW50dWFsbHksIHdlIGNhbm5vdCByZXVzZSB0aGUgaW5kZXgKKyAqIGZvciB0aGVzZSAodGVtcG9yYXJ5KSBkYXRhLgorICovCitzdHJ1Y3Qgc3RhZ2VfZGF0YSB7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbW9kZTsKKwkJdW5zaWduZWQgY2hhciBzaGFbMjBdOworCX0gc3RhZ2VzWzRdOworCXN0cnVjdCByZW5hbWVfY29uZmxpY3RfaW5mbyAqcmVuYW1lX2NvbmZsaWN0X2luZm87CisJdW5zaWduZWQgcHJvY2Vzc2VkOjE7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfcmVuYW1lX2NvbmZsaWN0X2luZm8oZW51bSByZW5hbWVfdHlwZSByZW5hbWVfdHlwZSwKKwkJCQkJICAgICAgc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIxLAorCQkJCQkgICAgICBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjIsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaDEsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKmJyYW5jaDIsCisJCQkJCSAgICAgIHN0cnVjdCBzdGFnZV9kYXRhICpkc3RfZW50cnkxLAorCQkJCQkgICAgICBzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZHN0X2VudHJ5MiwKKwkJCQkJICAgICAgc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCQkJCSAgICAgIHN0cnVjdCBzdGFnZV9kYXRhICpzcmNfZW50cnkxLAorCQkJCQkgICAgICBzdHJ1Y3Qgc3RhZ2VfZGF0YSAqc3JjX2VudHJ5MikKK3sKKwlzdHJ1Y3QgcmVuYW1lX2NvbmZsaWN0X2luZm8gKmNpID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvKSk7CisJY2ktPnJlbmFtZV90eXBlID0gcmVuYW1lX3R5cGU7CisJY2ktPnBhaXIxID0gcGFpcjE7CisJY2ktPmJyYW5jaDEgPSBicmFuY2gxOworCWNpLT5icmFuY2gyID0gYnJhbmNoMjsKKworCWNpLT5kc3RfZW50cnkxID0gZHN0X2VudHJ5MTsKKwlkc3RfZW50cnkxLT5yZW5hbWVfY29uZmxpY3RfaW5mbyA9IGNpOworCWRzdF9lbnRyeTEtPnByb2Nlc3NlZCA9IDA7CisKKwlhc3NlcnQoIXBhaXIyID09ICFkc3RfZW50cnkyKTsKKwlpZiAoZHN0X2VudHJ5MikgeworCQljaS0+ZHN0X2VudHJ5MiA9IGRzdF9lbnRyeTI7CisJCWNpLT5wYWlyMiA9IHBhaXIyOworCQlkc3RfZW50cnkyLT5yZW5hbWVfY29uZmxpY3RfaW5mbyA9IGNpOworCX0KKworCWlmIChyZW5hbWVfdHlwZSA9PSBSRU5BTUVfVFdPX0ZJTEVTX1RPX09ORSkgeworCQkvKgorCQkgKiBGb3IgZWFjaCByZW5hbWUsIHRoZXJlIGNvdWxkIGhhdmUgYmVlbgorCQkgKiBtb2RpZmljYXRpb25zIG9uIHRoZSBzaWRlIG9mIGhpc3Rvcnkgd2hlcmUgdGhhdAorCQkgKiBmaWxlIHdhcyBub3QgcmVuYW1lZC4KKwkJICovCisJCWludCBvc3RhZ2UxID0gby0+YnJhbmNoMSA9PSBicmFuY2gxID8gMyA6IDI7CisJCWludCBvc3RhZ2UyID0gb3N0YWdlMSBeIDE7CisKKwkJY2ktPnJlbjFfb3RoZXIucGF0aCA9IHBhaXIxLT5vbmUtPnBhdGg7CisJCWhhc2hjcHkoY2ktPnJlbjFfb3RoZXIuc2hhMSwgc3JjX2VudHJ5MS0+c3RhZ2VzW29zdGFnZTFdLnNoYSk7CisJCWNpLT5yZW4xX290aGVyLm1vZGUgPSBzcmNfZW50cnkxLT5zdGFnZXNbb3N0YWdlMV0ubW9kZTsKKworCQljaS0+cmVuMl9vdGhlci5wYXRoID0gcGFpcjItPm9uZS0+cGF0aDsKKwkJaGFzaGNweShjaS0+cmVuMl9vdGhlci5zaGExLCBzcmNfZW50cnkyLT5zdGFnZXNbb3N0YWdlMl0uc2hhKTsKKwkJY2ktPnJlbjJfb3RoZXIubW9kZSA9IHNyY19lbnRyeTItPnN0YWdlc1tvc3RhZ2UyXS5tb2RlOworCX0KK30KKworc3RhdGljIGludCBzaG93KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLCBpbnQgdikKK3sKKwlyZXR1cm4gKCFvLT5jYWxsX2RlcHRoICYmIG8tPnZlcmJvc2l0eSA+PSB2KSB8fCBvLT52ZXJib3NpdHkgPj0gNTsKK30KKworc3RhdGljIHZvaWQgZmx1c2hfb3V0cHV0KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvKQoreworCWlmIChvLT5vYnVmLmxlbikgeworCQlmcHV0cyhvLT5vYnVmLmJ1Ziwgc3Rkb3V0KTsKKwkJc3RyYnVmX3Jlc2V0KCZvLT5vYnVmKTsKKwl9Cit9CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpCitzdGF0aWMgdm9pZCBvdXRwdXQoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sIGludCB2LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJaWYgKCFzaG93KG8sIHYpKQorCQlyZXR1cm47CisKKwlzdHJidWZfYWRkY2hhcnMoJm8tPm9idWYsICcgJywgby0+Y2FsbF9kZXB0aCAqIDIpOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKCZvLT5vYnVmLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJc3RyYnVmX2FkZGNoKCZvLT5vYnVmLCAnXG4nKTsKKwlpZiAoIW8tPmJ1ZmZlcl9vdXRwdXQpCisJCWZsdXNoX291dHB1dChvKTsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X2NvbW1pdF90aXRsZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWludCBpOworCWZsdXNoX291dHB1dChvKTsKKwlmb3IgKGkgPSBvLT5jYWxsX2RlcHRoOyBpLS07KQorCQlmcHV0cygiICAiLCBzdGRvdXQpOworCWlmIChjb21taXQtPnV0aWwpCisJCXByaW50ZigidmlydHVhbCAlc1xuIiwgbWVyZ2VfcmVtb3RlX3V0aWwoY29tbWl0KS0+bmFtZSk7CisJZWxzZSB7CisJCXByaW50ZigiJXMgIiwgZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIERFRkFVTFRfQUJCUkVWKSk7CisJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSAhPSAwKQorCQkJcHJpbnRmKF8oIihiYWQgY29tbWl0KVxuIikpOworCQllbHNlIHsKKwkJCWNvbnN0IGNoYXIgKnRpdGxlOworCQkJY29uc3QgY2hhciAqbXNnID0gZ2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBOVUxMKTsKKwkJCWludCBsZW4gPSBmaW5kX2NvbW1pdF9zdWJqZWN0KG1zZywgJnRpdGxlKTsKKwkJCWlmIChsZW4pCisJCQkJcHJpbnRmKCIlLipzXG4iLCBsZW4sIHRpdGxlKTsKKwkJCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBtc2cpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGFkZF9jYWNoZWluZm8odW5zaWduZWQgaW50IG1vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCWNvbnN0IGNoYXIgKnBhdGgsIGludCBzdGFnZSwgaW50IHJlZnJlc2gsIGludCBvcHRpb25zKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJY2UgPSBtYWtlX2NhY2hlX2VudHJ5KG1vZGUsIHNoYTEgPyBzaGExIDogbnVsbF9zaGExLCBwYXRoLCBzdGFnZSwKKwkJCSAgICAgIChyZWZyZXNoID8gKENFX01BVENIX1JFRlJFU0ggfAorCQkJCQkgIENFX01BVENIX0lHTk9SRV9NSVNTSU5HKSA6IDAgKSk7CisJaWYgKCFjZSkKKwkJcmV0dXJuIGVycm9yKF8oImFkZGluZm9fY2FjaGUgZmFpbGVkIGZvciBwYXRoICclcyciKSwgcGF0aCk7CisJcmV0dXJuIGFkZF9jYWNoZV9lbnRyeShjZSwgb3B0aW9ucyk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdHJlZV9kZXNjX2Zyb21fdHJlZShzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwlwYXJzZV90cmVlKHRyZWUpOworCWluaXRfdHJlZV9kZXNjKGRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X21lcmdlX3RyZWVzKGludCBpbmRleF9vbmx5LAorCQkJICAgc3RydWN0IHRyZWUgKmNvbW1vbiwKKwkJCSAgIHN0cnVjdCB0cmVlICpoZWFkLAorCQkJICAgc3RydWN0IHRyZWUgKm1lcmdlKQoreworCWludCByYzsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRbM107CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zIG9wdHM7CisKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJaWYgKGluZGV4X29ubHkpCisJCW9wdHMuaW5kZXhfb25seSA9IDE7CisJZWxzZQorCQlvcHRzLnVwZGF0ZSA9IDE7CisJb3B0cy5tZXJnZSA9IDE7CisJb3B0cy5oZWFkX2lkeCA9IDI7CisJb3B0cy5mbiA9IHRocmVld2F5X21lcmdlOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisJc2V0dXBfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbigmb3B0cywgIm1lcmdlIik7CisKKwlpbml0X3RyZWVfZGVzY19mcm9tX3RyZWUodCswLCBjb21tb24pOworCWluaXRfdHJlZV9kZXNjX2Zyb21fdHJlZSh0KzEsIGhlYWQpOworCWluaXRfdHJlZV9kZXNjX2Zyb21fdHJlZSh0KzIsIG1lcmdlKTsKKworCXJjID0gdW5wYWNrX3RyZWVzKDMsIHQsICZvcHRzKTsKKwljYWNoZV90cmVlX2ZyZWUoJmFjdGl2ZV9jYWNoZV90cmVlKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCB0cmVlICp3cml0ZV90cmVlX2Zyb21fbWVtb3J5KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvKQoreworCXN0cnVjdCB0cmVlICpyZXN1bHQgPSBOVUxMOworCisJaWYgKHVubWVyZ2VkX2NhY2hlKCkpIHsKKwkJaW50IGk7CisJCWZwcmludGYoc3RkZXJyLCAiQlVHOiBUaGVyZSBhcmUgdW5tZXJnZWQgaW5kZXggZW50cmllczpcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCQlpZiAoY2Vfc3RhZ2UoY2UpKQorCQkJCWZwcmludGYoc3RkZXJyLCAiQlVHOiAlZCAlLipzXG4iLCBjZV9zdGFnZShjZSksCisJCQkJCShpbnQpY2VfbmFtZWxlbihjZSksIGNlLT5uYW1lKTsKKwkJfQorCQlkaWUoIkJ1ZyBpbiBtZXJnZS1yZWN1cnNpdmUuYyIpOworCX0KKworCWlmICghYWN0aXZlX2NhY2hlX3RyZWUpCisJCWFjdGl2ZV9jYWNoZV90cmVlID0gY2FjaGVfdHJlZSgpOworCisJaWYgKCFjYWNoZV90cmVlX2Z1bGx5X3ZhbGlkKGFjdGl2ZV9jYWNoZV90cmVlKSAmJgorCSAgICBjYWNoZV90cmVlX3VwZGF0ZSgmdGhlX2luZGV4LCAwKSA8IDApCisJCWRpZShfKCJlcnJvciBidWlsZGluZyB0cmVlcyIpKTsKKworCXJlc3VsdCA9IGxvb2t1cF90cmVlKGFjdGl2ZV9jYWNoZV90cmVlLT5zaGExKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgc2F2ZV9maWxlc19kaXJzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCXN0cnVjdCBzdHJidWYgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgsCisJCXVuc2lnbmVkIGludCBtb2RlLCBpbnQgc3RhZ2UsIHZvaWQgKmNvbnRleHQpCit7CisJaW50IGJhc2VsZW4gPSBiYXNlLT5sZW47CisJc3RydWN0IG1lcmdlX29wdGlvbnMgKm8gPSBjb250ZXh0OworCisJc3RyYnVmX2FkZHN0cihiYXNlLCBwYXRoKTsKKworCWlmIChTX0lTRElSKG1vZGUpKQorCQlzdHJpbmdfbGlzdF9pbnNlcnQoJm8tPmN1cnJlbnRfZGlyZWN0b3J5X3NldCwgYmFzZS0+YnVmKTsKKwllbHNlCisJCXN0cmluZ19saXN0X2luc2VydCgmby0+Y3VycmVudF9maWxlX3NldCwgYmFzZS0+YnVmKTsKKworCXN0cmJ1Zl9zZXRsZW4oYmFzZSwgYmFzZWxlbik7CisJcmV0dXJuIChTX0lTRElSKG1vZGUpID8gUkVBRF9UUkVFX1JFQ1VSU0lWRSA6IDApOworfQorCitzdGF0aWMgaW50IGdldF9maWxlc19kaXJzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLCBzdHJ1Y3QgdHJlZSAqdHJlZSkKK3sKKwlpbnQgbjsKKwlzdHJ1Y3QgcGF0aHNwZWMgbWF0Y2hfYWxsOworCW1lbXNldCgmbWF0Y2hfYWxsLCAwLCBzaXplb2YobWF0Y2hfYWxsKSk7CisJaWYgKHJlYWRfdHJlZV9yZWN1cnNpdmUodHJlZSwgIiIsIDAsIDAsICZtYXRjaF9hbGwsIHNhdmVfZmlsZXNfZGlycywgbykpCisJCXJldHVybiAwOworCW4gPSBvLT5jdXJyZW50X2ZpbGVfc2V0Lm5yICsgby0+Y3VycmVudF9kaXJlY3Rvcnlfc2V0Lm5yOworCXJldHVybiBuOworfQorCisvKgorICogUmV0dXJucyBhbiBpbmRleF9lbnRyeSBpbnN0YW5jZSB3aGljaCBkb2Vzbid0IGhhdmUgdG8gY29ycmVzcG9uZCB0bworICogYSByZWFsIGNhY2hlIGVudHJ5IGluIEdpdCdzIGluZGV4LgorICovCitzdGF0aWMgc3RydWN0IHN0YWdlX2RhdGEgKmluc2VydF9zdGFnZV9kYXRhKGNvbnN0IGNoYXIgKnBhdGgsCisJCXN0cnVjdCB0cmVlICpvLCBzdHJ1Y3QgdHJlZSAqYSwgc3RydWN0IHRyZWUgKmIsCisJCXN0cnVjdCBzdHJpbmdfbGlzdCAqZW50cmllcykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdGFnZV9kYXRhKSk7CisJZ2V0X3RyZWVfZW50cnkoby0+b2JqZWN0LnNoYTEsIHBhdGgsCisJCQllLT5zdGFnZXNbMV0uc2hhLCAmZS0+c3RhZ2VzWzFdLm1vZGUpOworCWdldF90cmVlX2VudHJ5KGEtPm9iamVjdC5zaGExLCBwYXRoLAorCQkJZS0+c3RhZ2VzWzJdLnNoYSwgJmUtPnN0YWdlc1syXS5tb2RlKTsKKwlnZXRfdHJlZV9lbnRyeShiLT5vYmplY3Quc2hhMSwgcGF0aCwKKwkJCWUtPnN0YWdlc1szXS5zaGEsICZlLT5zdGFnZXNbM10ubW9kZSk7CisJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChlbnRyaWVzLCBwYXRoKTsKKwlpdGVtLT51dGlsID0gZTsKKwlyZXR1cm4gZTsKK30KKworLyoKKyAqIENyZWF0ZSBhIGRpY3Rpb25hcnkgbWFwcGluZyBmaWxlIG5hbWVzIHRvIHN0YWdlX2RhdGEgb2JqZWN0cy4gVGhlCisgKiBkaWN0aW9uYXJ5IGNvbnRhaW5zIG9uZSBlbnRyeSBmb3IgZXZlcnkgcGF0aCB3aXRoIGEgbm9uLXplcm8gc3RhZ2UgZW50cnkuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmdldF91bm1lcmdlZCh2b2lkKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqdW5tZXJnZWQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RyaW5nX2xpc3QpKTsKKwlpbnQgaTsKKworCXVubWVyZ2VkLT5zdHJkdXBfc3RyaW5ncyA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJCXN0cnVjdCBzdGFnZV9kYXRhICplOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQlpZiAoIWNlX3N0YWdlKGNlKSkKKwkJCWNvbnRpbnVlOworCisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAodW5tZXJnZWQsIGNlLT5uYW1lKTsKKwkJaWYgKCFpdGVtKSB7CisJCQlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KHVubWVyZ2VkLCBjZS0+bmFtZSk7CisJCQlpdGVtLT51dGlsID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0YWdlX2RhdGEpKTsKKwkJfQorCQllID0gaXRlbS0+dXRpbDsKKwkJZS0+c3RhZ2VzW2NlX3N0YWdlKGNlKV0ubW9kZSA9IGNlLT5jZV9tb2RlOworCQloYXNoY3B5KGUtPnN0YWdlc1tjZV9zdGFnZShjZSldLnNoYSwgY2UtPnNoYTEpOworCX0KKworCXJldHVybiB1bm1lcmdlZDsKK30KKworc3RhdGljIGludCBzdHJpbmdfbGlzdF9kZl9uYW1lX2NvbXBhcmUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqb25lID0gYTsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqdHdvID0gYjsKKwlpbnQgb25lbGVuID0gc3RybGVuKG9uZS0+c3RyaW5nKTsKKwlpbnQgdHdvbGVuID0gc3RybGVuKHR3by0+c3RyaW5nKTsKKwkvKgorCSAqIEhlcmUgd2Ugb25seSBjYXJlIHRoYXQgZW50cmllcyBmb3IgRC9GIGNvbmZsaWN0cyBhcmUKKwkgKiBhZGphY2VudCwgaW4gcGFydGljdWxhciB3aXRoIHRoZSBmaWxlIG9mIHRoZSBEL0YgY29uZmxpY3QKKwkgKiBhcHBlYXJpbmcgYmVmb3JlIGZpbGVzIGJlbG93IHRoZSBjb3JyZXNwb25kaW5nIGRpcmVjdG9yeS4KKwkgKiBUaGUgb3JkZXIgb2YgdGhlIHJlc3Qgb2YgdGhlIGxpc3QgaXMgaXJyZWxldmFudCBmb3IgdXMuCisJICoKKwkgKiBUbyBhY2hpZXZlIHRoaXMsIHdlIHNvcnQgd2l0aCBkZl9uYW1lX2NvbXBhcmUgYW5kIHByb3ZpZGUKKwkgKiB0aGUgbW9kZSBTX0lGRElSIHNvIHRoYXQgRC9GIGNvbmZsaWN0cyB3aWxsIHNvcnQgY29ycmVjdGx5LgorCSAqIFdlIHVzZSB0aGUgbW9kZSBTX0lGRElSIGZvciBldmVyeXRoaW5nIGVsc2UgZm9yIHNpbXBsaWNpdHksCisJICogc2luY2UgaW4gb3RoZXIgY2FzZXMgYW55IGNoYW5nZXMgaW4gdGhlaXIgb3JkZXIgZHVlIHRvCisJICogc29ydGluZyBjYXVzZSBubyBwcm9ibGVtcyBmb3IgdXMuCisJICovCisJaW50IGNtcCA9IGRmX25hbWVfY29tcGFyZShvbmUtPnN0cmluZywgb25lbGVuLCBTX0lGRElSLAorCQkJCSAgdHdvLT5zdHJpbmcsIHR3b2xlbiwgU19JRkRJUik7CisJLyoKKwkgKiBOb3cgdGhhdCAnZm9vJyBhbmQgJ2Zvby9iYXInIGNvbXBhcmUgZXF1YWwsIHdlIGhhdmUgdG8gbWFrZSBzdXJlCisJICogdGhhdCAnZm9vJyBjb21lcyBiZWZvcmUgJ2Zvby9iYXInLgorCSAqLworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisJcmV0dXJuIG9uZWxlbiAtIHR3b2xlbjsKK30KKworc3RhdGljIHZvaWQgcmVjb3JkX2RmX2NvbmZsaWN0X2ZpbGVzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJCSAgICAgc3RydWN0IHN0cmluZ19saXN0ICplbnRyaWVzKQoreworCS8qIElmIHRoZXJlIGlzIGEgRC9GIGNvbmZsaWN0IGFuZCB0aGUgZmlsZSBmb3Igc3VjaCBhIGNvbmZsaWN0CisJICogY3VycmVudGx5IGV4aXN0IGluIHRoZSB3b3JraW5nIHRyZWUsIHdlIHdhbnQgdG8gYWxsb3cgaXQgdG8gYmUKKwkgKiByZW1vdmVkIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5IGlmIG5lZWRlZC4KKwkgKiBUaGUgZmlsZXMgdW5kZXJuZWF0aCB0aGUgZGlyZWN0b3JpZXMgb2Ygc3VjaCBEL0YgY29uZmxpY3RzIHdpbGwKKwkgKiBiZSBwcm9jZXNzZWQgYmVmb3JlIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgaW52b2x2ZWQgaW4gdGhlIEQvRgorCSAqIGNvbmZsaWN0LiAgSWYgdGhlIEQvRiBkaXJlY3RvcnkgZW5kcyB1cCBiZWluZyByZW1vdmVkIGJ5IHRoZQorCSAqIG1lcmdlLCB0aGVuIHdlIHdvbid0IGhhdmUgdG8gdG91Y2ggdGhlIEQvRiBmaWxlLiAgSWYgdGhlIEQvRgorCSAqIGRpcmVjdG9yeSBuZWVkcyB0byBiZSB3cml0dGVuIHRvIHRoZSB3b3JraW5nIGNvcHksIHRoZW4gdGhlIEQvRgorCSAqIGZpbGUgd2lsbCBzaW1wbHkgYmUgcmVtb3ZlZCAoaW4gbWFrZV9yb29tX2Zvcl9wYXRoKCkpIHRvIG1ha2UKKwkgKiByb29tIGZvciB0aGUgbmVjZXNzYXJ5IHBhdGhzLiAgTm90ZSB0aGF0IGlmIGJvdGggdGhlIGRpcmVjdG9yeQorCSAqIGFuZCB0aGUgZmlsZSBuZWVkIHRvIGJlIHByZXNlbnQsIHRoZW4gdGhlIEQvRiBmaWxlIHdpbGwgYmUKKwkgKiByZWluc3RhdGVkIHdpdGggYSBuZXcgdW5pcXVlIG5hbWUgYXQgdGhlIHRpbWUgaXQgaXMgcHJvY2Vzc2VkLgorCSAqLworCXN0cnVjdCBzdHJpbmdfbGlzdCBkZl9zb3J0ZWRfZW50cmllczsKKwljb25zdCBjaGFyICpsYXN0X2ZpbGUgPSBOVUxMOworCWludCBsYXN0X2xlbiA9IDA7CisJaW50IGk7CisKKwkvKgorCSAqIElmIHdlJ3JlIG1lcmdpbmcgbWVyZ2UtYmFzZXMsIHdlIGRvbid0IHdhbnQgdG8gYm90aGVyIHdpdGgKKwkgKiBhbnkgd29ya2luZyBkaXJlY3RvcnkgY2hhbmdlcy4KKwkgKi8KKwlpZiAoby0+Y2FsbF9kZXB0aCkKKwkJcmV0dXJuOworCisJLyogRW5zdXJlIEQvRiBjb25mbGljdHMgYXJlIGFkamFjZW50IGluIHRoZSBlbnRyaWVzIGxpc3QuICovCisJbWVtc2V0KCZkZl9zb3J0ZWRfZW50cmllcywgMCwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpuZXh0ID0gJmVudHJpZXMtPml0ZW1zW2ldOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmRmX3NvcnRlZF9lbnRyaWVzLCBuZXh0LT5zdHJpbmcpLT51dGlsID0KKwkJCQkgICBuZXh0LT51dGlsOworCX0KKwlxc29ydChkZl9zb3J0ZWRfZW50cmllcy5pdGVtcywgZW50cmllcy0+bnIsIHNpemVvZigqZW50cmllcy0+aXRlbXMpLAorCSAgICAgIHN0cmluZ19saXN0X2RmX25hbWVfY29tcGFyZSk7CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmby0+ZGZfY29uZmxpY3RfZmlsZV9zZXQsIDEpOworCWZvciAoaSA9IDA7IGkgPCBkZl9zb3J0ZWRfZW50cmllcy5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBkZl9zb3J0ZWRfZW50cmllcy5pdGVtc1tpXS5zdHJpbmc7CisJCWludCBsZW4gPSBzdHJsZW4ocGF0aCk7CisJCXN0cnVjdCBzdGFnZV9kYXRhICplID0gZGZfc29ydGVkX2VudHJpZXMuaXRlbXNbaV0udXRpbDsKKworCQkvKgorCQkgKiBDaGVjayBpZiBsYXN0X2ZpbGUgJiBwYXRoIGNvcnJlc3BvbmQgdG8gYSBEL0YgY29uZmxpY3Q7CisJCSAqIGkuZS4gd2hldGhlciBwYXRoIGlzIGxhc3RfZmlsZSsnLycrPHNvbWV0aGluZz4uCisJCSAqIElmIHNvLCByZWNvcmQgdGhhdCBpdCdzIG9rYXkgdG8gcmVtb3ZlIGxhc3RfZmlsZSB0byBtYWtlCisJCSAqIHJvb20gZm9yIHBhdGggYW5kIGZyaWVuZHMgaWYgbmVlZGVkLgorCQkgKi8KKwkJaWYgKGxhc3RfZmlsZSAmJgorCQkgICAgbGVuID4gbGFzdF9sZW4gJiYKKwkJICAgIG1lbWNtcChwYXRoLCBsYXN0X2ZpbGUsIGxhc3RfbGVuKSA9PSAwICYmCisJCSAgICBwYXRoW2xhc3RfbGVuXSA9PSAnLycpIHsKKwkJCXN0cmluZ19saXN0X2luc2VydCgmby0+ZGZfY29uZmxpY3RfZmlsZV9zZXQsIGxhc3RfZmlsZSk7CisJCX0KKworCQkvKgorCQkgKiBEZXRlcm1pbmUgd2hldGhlciBwYXRoIGNvdWxkIGV4aXN0IGFzIGEgZmlsZSBpbiB0aGUKKwkJICogd29ya2luZyBkaXJlY3RvcnkgYXMgYSBwb3NzaWJsZSBEL0YgY29uZmxpY3QuICBUaGlzCisJCSAqIHdpbGwgb25seSBvY2N1ciB3aGVuIGl0IGV4aXN0cyBpbiBzdGFnZSAyIGFzIGEKKwkJICogZmlsZS4KKwkJICovCisJCWlmIChTX0lTUkVHKGUtPnN0YWdlc1syXS5tb2RlKSB8fCBTX0lTTE5LKGUtPnN0YWdlc1syXS5tb2RlKSkgeworCQkJbGFzdF9maWxlID0gcGF0aDsKKwkJCWxhc3RfbGVuID0gbGVuOworCQl9IGVsc2UgeworCQkJbGFzdF9maWxlID0gTlVMTDsKKwkJfQorCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmZGZfc29ydGVkX2VudHJpZXMsIDApOworfQorCitzdHJ1Y3QgcmVuYW1lIHsKKwlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpcjsKKwlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqc3JjX2VudHJ5OworCXN0cnVjdCBzdGFnZV9kYXRhICpkc3RfZW50cnk7CisJdW5zaWduZWQgcHJvY2Vzc2VkOjE7Cit9OworCisvKgorICogR2V0IGluZm9ybWF0aW9uIG9mIGFsbCByZW5hbWVzIHdoaWNoIG9jY3VycmVkIGJldHdlZW4gJ29fdHJlZScgYW5kCisgKiAndHJlZScuIFdlIG5lZWQgdGhlIHRocmVlIHRyZWVzIGluIHRoZSBtZXJnZSAoJ29fdHJlZScsICdhX3RyZWUnIGFuZAorICogJ2JfdHJlZScpIHRvIGJlIGFibGUgdG8gYXNzb2NpYXRlIHRoZSBjb3JyZWN0IGNhY2hlIGVudHJpZXMgd2l0aAorICogdGhlIHJlbmFtZSBpbmZvcm1hdGlvbi4gJ3RyZWUnIGlzIGFsd2F5cyBlcXVhbCB0byBlaXRoZXIgYV90cmVlIG9yIGJfdHJlZS4KKyAqLworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCAqZ2V0X3JlbmFtZXMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCQkJICAgICAgIHN0cnVjdCB0cmVlICp0cmVlLAorCQkJCSAgICAgICBzdHJ1Y3QgdHJlZSAqb190cmVlLAorCQkJCSAgICAgICBzdHJ1Y3QgdHJlZSAqYV90cmVlLAorCQkJCSAgICAgICBzdHJ1Y3QgdHJlZSAqYl90cmVlLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmVudHJpZXMpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZW5hbWVzOworCXN0cnVjdCBkaWZmX29wdGlvbnMgb3B0czsKKworCXJlbmFtZXMgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgc3RyaW5nX2xpc3QpKTsKKwlkaWZmX3NldHVwKCZvcHRzKTsKKwlESUZGX09QVF9TRVQoJm9wdHMsIFJFQ1VSU0lWRSk7CisJRElGRl9PUFRfQ0xSKCZvcHRzLCBSRU5BTUVfRU1QVFkpOworCW9wdHMuZGV0ZWN0X3JlbmFtZSA9IERJRkZfREVURUNUX1JFTkFNRTsKKwlvcHRzLnJlbmFtZV9saW1pdCA9IG8tPm1lcmdlX3JlbmFtZV9saW1pdCA+PSAwID8gby0+bWVyZ2VfcmVuYW1lX2xpbWl0IDoKKwkJCSAgICBvLT5kaWZmX3JlbmFtZV9saW1pdCA+PSAwID8gby0+ZGlmZl9yZW5hbWVfbGltaXQgOgorCQkJICAgIDEwMDA7CisJb3B0cy5yZW5hbWVfc2NvcmUgPSBvLT5yZW5hbWVfc2NvcmU7CisJb3B0cy5zaG93X3JlbmFtZV9wcm9ncmVzcyA9IG8tPnNob3dfcmVuYW1lX3Byb2dyZXNzOworCW9wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlkaWZmX3NldHVwX2RvbmUoJm9wdHMpOworCWRpZmZfdHJlZV9zaGExKG9fdHJlZS0+b2JqZWN0LnNoYTEsIHRyZWUtPm9iamVjdC5zaGExLCAiIiwgJm9wdHMpOworCWRpZmZjb3JlX3N0ZCgmb3B0cyk7CisJaWYgKG9wdHMubmVlZGVkX3JlbmFtZV9saW1pdCA+IG8tPm5lZWRlZF9yZW5hbWVfbGltaXQpCisJCW8tPm5lZWRlZF9yZW5hbWVfbGltaXQgPSBvcHRzLm5lZWRlZF9yZW5hbWVfbGltaXQ7CisJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7ICsraSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJc3RydWN0IHJlbmFtZSAqcmU7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwYWlyID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXTsKKwkJaWYgKHBhaXItPnN0YXR1cyAhPSAnUicpIHsKKwkJCWRpZmZfZnJlZV9maWxlcGFpcihwYWlyKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJlID0geG1hbGxvYyhzaXplb2YoKnJlKSk7CisJCXJlLT5wcm9jZXNzZWQgPSAwOworCQlyZS0+cGFpciA9IHBhaXI7CisJCWl0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoZW50cmllcywgcmUtPnBhaXItPm9uZS0+cGF0aCk7CisJCWlmICghaXRlbSkKKwkJCXJlLT5zcmNfZW50cnkgPSBpbnNlcnRfc3RhZ2VfZGF0YShyZS0+cGFpci0+b25lLT5wYXRoLAorCQkJCQlvX3RyZWUsIGFfdHJlZSwgYl90cmVlLCBlbnRyaWVzKTsKKwkJZWxzZQorCQkJcmUtPnNyY19lbnRyeSA9IGl0ZW0tPnV0aWw7CisKKwkJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cChlbnRyaWVzLCByZS0+cGFpci0+dHdvLT5wYXRoKTsKKwkJaWYgKCFpdGVtKQorCQkJcmUtPmRzdF9lbnRyeSA9IGluc2VydF9zdGFnZV9kYXRhKHJlLT5wYWlyLT50d28tPnBhdGgsCisJCQkJCW9fdHJlZSwgYV90cmVlLCBiX3RyZWUsIGVudHJpZXMpOworCQllbHNlCisJCQlyZS0+ZHN0X2VudHJ5ID0gaXRlbS0+dXRpbDsKKwkJaXRlbSA9IHN0cmluZ19saXN0X2luc2VydChyZW5hbWVzLCBwYWlyLT5vbmUtPnBhdGgpOworCQlpdGVtLT51dGlsID0gcmU7CisJfQorCW9wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlkaWZmX3F1ZXVlZF9kaWZmLm5yID0gMDsKKwlkaWZmX2ZsdXNoKCZvcHRzKTsKKwlyZXR1cm4gcmVuYW1lczsKK30KKworc3RhdGljIGludCB1cGRhdGVfc3RhZ2VzKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvLAorCQkJIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICphLAorCQkJIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpiKQoreworCisJLyoKKwkgKiBOT1RFOiBJdCBpcyB1c3VhbGx5IGEgYmFkIGlkZWEgdG8gY2FsbCB1cGRhdGVfc3RhZ2VzIG9uIGEgcGF0aAorCSAqIGJlZm9yZSBjYWxsaW5nIHVwZGF0ZV9maWxlIG9uIHRoYXQgc2FtZSBwYXRoLCBzaW5jZSBpdCBjYW4KKwkgKiBzb21ldGltZXMgbGVhZCB0byBzcHVyaW91cyAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZS4uLiIKKwkgKiBtZXNzYWdlcyBmcm9tIHVwZGF0ZV9maWxlICh2aWEgbWFrZV9yb29tX2ZvciBwYXRoIHZpYQorCSAqIHdvdWxkX2xvc2VfdW50cmFja2VkKS4gIEluc3RlYWQsIHJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSBjYWxscworCSAqIChleGVjdXRpbmcgdXBkYXRlX2ZpbGUgZmlyc3QgYW5kIHRoZW4gdXBkYXRlX3N0YWdlcykuCisJICovCisJaW50IGNsZWFyID0gMTsKKwlpbnQgb3B0aW9ucyA9IEFERF9DQUNIRV9PS19UT19BREQgfCBBRERfQ0FDSEVfU0tJUF9ERkNIRUNLOworCWlmIChjbGVhcikKKwkJaWYgKHJlbW92ZV9maWxlX2Zyb21fY2FjaGUocGF0aCkpCisJCQlyZXR1cm4gLTE7CisJaWYgKG8pCisJCWlmIChhZGRfY2FjaGVpbmZvKG8tPm1vZGUsIG8tPnNoYTEsIHBhdGgsIDEsIDAsIG9wdGlvbnMpKQorCQkJcmV0dXJuIC0xOworCWlmIChhKQorCQlpZiAoYWRkX2NhY2hlaW5mbyhhLT5tb2RlLCBhLT5zaGExLCBwYXRoLCAyLCAwLCBvcHRpb25zKSkKKwkJCXJldHVybiAtMTsKKwlpZiAoYikKKwkJaWYgKGFkZF9jYWNoZWluZm8oYi0+bW9kZSwgYi0+c2hhMSwgcGF0aCwgMywgMCwgb3B0aW9ucykpCisJCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9lbnRyeShzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZW50cnksCisJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKm8sCisJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEsCisJCQkgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmIpCit7CisJZW50cnktPnByb2Nlc3NlZCA9IDA7CisJZW50cnktPnN0YWdlc1sxXS5tb2RlID0gby0+bW9kZTsKKwllbnRyeS0+c3RhZ2VzWzJdLm1vZGUgPSBhLT5tb2RlOworCWVudHJ5LT5zdGFnZXNbM10ubW9kZSA9IGItPm1vZGU7CisJaGFzaGNweShlbnRyeS0+c3RhZ2VzWzFdLnNoYSwgby0+c2hhMSk7CisJaGFzaGNweShlbnRyeS0+c3RhZ2VzWzJdLnNoYSwgYS0+c2hhMSk7CisJaGFzaGNweShlbnRyeS0+c3RhZ2VzWzNdLnNoYSwgYi0+c2hhMSk7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2ZpbGUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sIGludCBjbGVhbiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIGludCBub193ZCkKK3sKKwlpbnQgdXBkYXRlX2NhY2hlID0gby0+Y2FsbF9kZXB0aCB8fCBjbGVhbjsKKwlpbnQgdXBkYXRlX3dvcmtpbmdfZGlyZWN0b3J5ID0gIW8tPmNhbGxfZGVwdGggJiYgIW5vX3dkOworCisJaWYgKHVwZGF0ZV9jYWNoZSkgeworCQlpZiAocmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKSkKKwkJCXJldHVybiAtMTsKKwl9CisJaWYgKHVwZGF0ZV93b3JraW5nX2RpcmVjdG9yeSkgeworCQlpZiAoaWdub3JlX2Nhc2UpIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisJCQljZSA9IGNhY2hlX2ZpbGVfZXhpc3RzKHBhdGgsIHN0cmxlbihwYXRoKSwgaWdub3JlX2Nhc2UpOworCQkJaWYgKGNlICYmIGNlX3N0YWdlKGNlKSA9PSAwKQorCQkJCXJldHVybiAwOworCQl9CisJCWlmIChyZW1vdmVfcGF0aChwYXRoKSkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGFkZCBhIHN0cmluZyB0byBhIHN0cmJ1ZiwgYnV0IGNvbnZlcnRpbmcgIi8iIHRvICJfIiAqLworc3RhdGljIHZvaWQgYWRkX2ZsYXR0ZW5lZF9wYXRoKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqcykKK3sKKwlzaXplX3QgaSA9IG91dC0+bGVuOworCXN0cmJ1Zl9hZGRzdHIob3V0LCBzKTsKKwlmb3IgKDsgaSA8IG91dC0+bGVuOyBpKyspCisJCWlmIChvdXQtPmJ1ZltpXSA9PSAnLycpCisJCQlvdXQtPmJ1ZltpXSA9ICdfJzsKK30KKworc3RhdGljIGNoYXIgKnVuaXF1ZV9wYXRoKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLCBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpicmFuY2gpCit7CisJc3RydWN0IHN0cmJ1ZiBuZXdwYXRoID0gU1RSQlVGX0lOSVQ7CisJaW50IHN1ZmZpeCA9IDA7CisJc2l6ZV90IGJhc2VfbGVuOworCisJc3RyYnVmX2FkZGYoJm5ld3BhdGgsICIlc34iLCBwYXRoKTsKKwlhZGRfZmxhdHRlbmVkX3BhdGgoJm5ld3BhdGgsIGJyYW5jaCk7CisKKwliYXNlX2xlbiA9IG5ld3BhdGgubGVuOworCXdoaWxlIChzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKCZvLT5jdXJyZW50X2ZpbGVfc2V0LCBuZXdwYXRoLmJ1ZikgfHwKKwkgICAgICAgc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmby0+Y3VycmVudF9kaXJlY3Rvcnlfc2V0LCBuZXdwYXRoLmJ1ZikgfHwKKwkgICAgICAgZmlsZV9leGlzdHMobmV3cGF0aC5idWYpKSB7CisJCXN0cmJ1Zl9zZXRsZW4oJm5ld3BhdGgsIGJhc2VfbGVuKTsKKwkJc3RyYnVmX2FkZGYoJm5ld3BhdGgsICJfJWQiLCBzdWZmaXgrKyk7CisJfQorCisJc3RyaW5nX2xpc3RfaW5zZXJ0KCZvLT5jdXJyZW50X2ZpbGVfc2V0LCBuZXdwYXRoLmJ1Zik7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJm5ld3BhdGgsIE5VTEwpOworfQorCitzdGF0aWMgaW50IGRpcl9pbl93YXkoY29uc3QgY2hhciAqcGF0aCwgaW50IGNoZWNrX3dvcmtpbmdfY29weSkKK3sKKwlpbnQgcG9zOworCXN0cnVjdCBzdHJidWYgZGlycGF0aCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdGF0IHN0OworCisJc3RyYnVmX2FkZHN0cigmZGlycGF0aCwgcGF0aCk7CisJc3RyYnVmX2FkZGNoKCZkaXJwYXRoLCAnLycpOworCisJcG9zID0gY2FjaGVfbmFtZV9wb3MoZGlycGF0aC5idWYsIGRpcnBhdGgubGVuKTsKKworCWlmIChwb3MgPCAwKQorCQlwb3MgPSAtMSAtIHBvczsKKwlpZiAocG9zIDwgYWN0aXZlX25yICYmCisJICAgICFzdHJuY21wKGRpcnBhdGguYnVmLCBhY3RpdmVfY2FjaGVbcG9zXS0+bmFtZSwgZGlycGF0aC5sZW4pKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZkaXJwYXRoKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmRpcnBhdGgpOworCXJldHVybiBjaGVja193b3JraW5nX2NvcHkgJiYgIWxzdGF0KHBhdGgsICZzdCkgJiYgU19JU0RJUihzdC5zdF9tb2RlKTsKK30KKworc3RhdGljIGludCB3YXNfdHJhY2tlZChjb25zdCBjaGFyICpwYXRoKQoreworCWludCBwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBzdHJsZW4ocGF0aCkpOworCisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC0xIC0gcG9zOworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIgJiYKKwkgICAgICAgIXN0cmNtcChwYXRoLCBhY3RpdmVfY2FjaGVbcG9zXS0+bmFtZSkpIHsKKwkJLyoKKwkJICogSWYgc3RhZ2UgIzAsIGl0IGlzIGRlZmluaXRlbHkgdHJhY2tlZC4KKwkJICogSWYgaXQgaGFzIHN0YWdlICMyIHRoZW4gaXQgd2FzIHRyYWNrZWQKKwkJICogYmVmb3JlIHRoaXMgbWVyZ2Ugc3RhcnRlZC4gIEFsbCBvdGhlcgorCQkgKiBjYXNlcyB0aGUgcGF0aCB3YXMgbm90IHRyYWNrZWQuCisJCSAqLworCQlzd2l0Y2ggKGNlX3N0YWdlKGFjdGl2ZV9jYWNoZVtwb3NdKSkgeworCQljYXNlIDA6CisJCWNhc2UgMjoKKwkJCXJldHVybiAxOworCQl9CisJCXBvcysrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3b3VsZF9sb3NlX3VudHJhY2tlZChjb25zdCBjaGFyICpwYXRoKQoreworCXJldHVybiAhd2FzX3RyYWNrZWQocGF0aCkgJiYgZmlsZV9leGlzdHMocGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgbWFrZV9yb29tX2Zvcl9wYXRoKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLCBjb25zdCBjaGFyICpwYXRoKQoreworCWludCBzdGF0dXMsIGk7CisJY29uc3QgY2hhciAqbXNnID0gXygiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIpOworCisJLyogVW5saW5rIGFueSBEL0YgY29uZmxpY3QgZmlsZXMgdGhhdCBhcmUgaW4gdGhlIHdheSAqLworCWZvciAoaSA9IDA7IGkgPCBvLT5kZl9jb25mbGljdF9maWxlX3NldC5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmRmX3BhdGggPSBvLT5kZl9jb25mbGljdF9maWxlX3NldC5pdGVtc1tpXS5zdHJpbmc7CisJCXNpemVfdCBwYXRobGVuID0gc3RybGVuKHBhdGgpOworCQlzaXplX3QgZGZfcGF0aGxlbiA9IHN0cmxlbihkZl9wYXRoKTsKKwkJaWYgKGRmX3BhdGhsZW4gPCBwYXRobGVuICYmCisJCSAgICBwYXRoW2RmX3BhdGhsZW5dID09ICcvJyAmJgorCQkgICAgc3RybmNtcChwYXRoLCBkZl9wYXRoLCBkZl9wYXRobGVuKSA9PSAwKSB7CisJCQlvdXRwdXQobywgMywKKwkJCSAgICAgICBfKCJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIiksCisJCQkgICAgICAgZGZfcGF0aCk7CisJCQl1bmxpbmsoZGZfcGF0aCk7CisJCQl1bnNvcnRlZF9zdHJpbmdfbGlzdF9kZWxldGVfaXRlbSgmby0+ZGZfY29uZmxpY3RfZmlsZV9zZXQsCisJCQkJCQkJIGksIDApOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBNYWtlIHN1cmUgbGVhZGluZyBkaXJlY3RvcmllcyBhcmUgY3JlYXRlZCAqLworCXN0YXR1cyA9IHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QocGF0aCk7CisJaWYgKHN0YXR1cykgeworCQlpZiAoc3RhdHVzID09IFNDTERfRVhJU1RTKSB7CisJCQkvKiBzb21ldGhpbmcgZWxzZSBleGlzdHMgKi8KKwkJCWVycm9yKG1zZywgcGF0aCwgXygiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlkaWUobXNnLCBwYXRoLCAiIik7CisJfQorCisJLyoKKwkgKiBEbyBub3QgdW5saW5rIGEgZmlsZSBpbiB0aGUgd29yayB0cmVlIGlmIHdlIGFyZSBub3QKKwkgKiB0cmFja2luZyBpdC4KKwkgKi8KKwlpZiAod291bGRfbG9zZV91bnRyYWNrZWQocGF0aCkpCisJCXJldHVybiBlcnJvcihfKCJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciKSwKKwkJCSAgICAgcGF0aCk7CisKKwkvKiBTdWNjZXNzZnVsIHVubGluayBpcyBnb29kLi4gKi8KKwlpZiAoIXVubGluayhwYXRoKSkKKwkJcmV0dXJuIDA7CisJLyogLi4gYW5kIHNvIGlzIG5vIGV4aXN0aW5nIGZpbGUgKi8KKwlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQlyZXR1cm4gMDsKKwkvKiAuLiBidXQgbm90IHNvbWUgb3RoZXIgZXJyb3IgKHdobyByZWFsbHkgY2FyZXMgd2hhdD8pICovCisJcmV0dXJuIGVycm9yKG1zZywgcGF0aCwgXygiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIpKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2ZpbGVfZmxhZ3Moc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGEsCisJCQkgICAgICB1bnNpZ25lZCBtb2RlLAorCQkJICAgICAgY29uc3QgY2hhciAqcGF0aCwKKwkJCSAgICAgIGludCB1cGRhdGVfY2FjaGUsCisJCQkgICAgICBpbnQgdXBkYXRlX3dkKQoreworCWlmIChvLT5jYWxsX2RlcHRoKQorCQl1cGRhdGVfd2QgPSAwOworCisJaWYgKHVwZGF0ZV93ZCkgeworCQllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJCXZvaWQgKmJ1ZjsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCisJCWlmIChTX0lTR0lUTElOSyhtb2RlKSkgeworCQkJLyoKKwkJCSAqIFdlIG1heSBsYXRlciBkZWNpZGUgdG8gcmVjdXJzaXZlbHkgZGVzY2VuZCBpbnRvCisJCQkgKiB0aGUgc3VibW9kdWxlIGRpcmVjdG9yeSBhbmQgdXBkYXRlIGl0cyBpbmRleAorCQkJICogYW5kL29yIHdvcmsgdHJlZSwgYnV0IHdlIGRvIG5vdCBkbyB0aGF0IG5vdy4KKwkJCSAqLworCQkJdXBkYXRlX3dkID0gMDsKKwkJCWdvdG8gdXBkYXRlX2luZGV4OworCQl9CisKKwkJYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhLCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWJ1ZikKKwkJCWRpZShfKCJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIpLCBzaGExX3RvX2hleChzaGEpLCBwYXRoKTsKKwkJaWYgKHR5cGUgIT0gT0JKX0JMT0IpCisJCQlkaWUoXygiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIpLCBzaGExX3RvX2hleChzaGEpLCBwYXRoKTsKKwkJaWYgKFNfSVNSRUcobW9kZSkpIHsKKwkJCXN0cnVjdCBzdHJidWYgc3RyYnVmID0gU1RSQlVGX0lOSVQ7CisJCQlpZiAoY29udmVydF90b193b3JraW5nX3RyZWUocGF0aCwgYnVmLCBzaXplLCAmc3RyYnVmKSkgeworCQkJCWZyZWUoYnVmKTsKKwkJCQlzaXplID0gc3RyYnVmLmxlbjsKKwkJCQlidWYgPSBzdHJidWZfZGV0YWNoKCZzdHJidWYsIE5VTEwpOworCQkJfQorCQl9CisKKwkJaWYgKG1ha2Vfcm9vbV9mb3JfcGF0aChvLCBwYXRoKSA8IDApIHsKKwkJCXVwZGF0ZV93ZCA9IDA7CisJCQlmcmVlKGJ1Zik7CisJCQlnb3RvIHVwZGF0ZV9pbmRleDsKKwkJfQorCQlpZiAoU19JU1JFRyhtb2RlKSB8fCAoIWhhc19zeW1saW5rcyAmJiBTX0lTTE5LKG1vZGUpKSkgeworCQkJaW50IGZkOworCQkJaWYgKG1vZGUgJiAwMTAwKQorCQkJCW1vZGUgPSAwNzc3OworCQkJZWxzZQorCQkJCW1vZGUgPSAwNjY2OworCQkJZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZIHwgT19UUlVOQyB8IE9fQ1JFQVQsIG1vZGUpOworCQkJaWYgKGZkIDwgMCkKKwkJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIG9wZW4gJyVzJyIpLCBwYXRoKTsKKwkJCXdyaXRlX2luX2Z1bGwoZmQsIGJ1Ziwgc2l6ZSk7CisJCQljbG9zZShmZCk7CisJCX0gZWxzZSBpZiAoU19JU0xOSyhtb2RlKSkgeworCQkJY2hhciAqbG5rID0geG1lbWR1cHooYnVmLCBzaXplKTsKKwkJCXNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QocGF0aCk7CisJCQl1bmxpbmsocGF0aCk7CisJCQlpZiAoc3ltbGluayhsbmssIHBhdGgpKQorCQkJCWRpZV9lcnJubyhfKCJmYWlsZWQgdG8gc3ltbGluayAnJXMnIiksIHBhdGgpOworCQkJZnJlZShsbmspOworCQl9IGVsc2UKKwkJCWRpZShfKCJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIiksCisJCQkgICAgbW9kZSwgc2hhMV90b19oZXgoc2hhKSwgcGF0aCk7CisJCWZyZWUoYnVmKTsKKwl9CisgdXBkYXRlX2luZGV4OgorCWlmICh1cGRhdGVfY2FjaGUpCisJCWFkZF9jYWNoZWluZm8obW9kZSwgc2hhLCBwYXRoLCAwLCB1cGRhdGVfd2QsIEFERF9DQUNIRV9PS19UT19BREQpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZmlsZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCWludCBjbGVhbiwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYSwKKwkJCXVuc2lnbmVkIG1vZGUsCisJCQljb25zdCBjaGFyICpwYXRoKQoreworCXVwZGF0ZV9maWxlX2ZsYWdzKG8sIHNoYSwgbW9kZSwgcGF0aCwgby0+Y2FsbF9kZXB0aCB8fCBjbGVhbiwgIW8tPmNhbGxfZGVwdGgpOworfQorCisvKiBMb3cgbGV2ZWwgZmlsZSBtZXJnaW5nLCB1cGRhdGUgYW5kIHJlbW92YWwgKi8KKworc3RydWN0IG1lcmdlX2ZpbGVfaW5mbyB7CisJdW5zaWduZWQgY2hhciBzaGFbMjBdOworCXVuc2lnbmVkIG1vZGU7CisJdW5zaWduZWQgY2xlYW46MSwKKwkJIG1lcmdlOjE7Cit9OworCitzdGF0aWMgaW50IG1lcmdlXzN3YXkoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCSAgICAgIG1tYnVmZmVyX3QgKnJlc3VsdF9idWYsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICphLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYiwKKwkJICAgICAgY29uc3QgY2hhciAqYnJhbmNoMSwKKwkJICAgICAgY29uc3QgY2hhciAqYnJhbmNoMikKK3sKKwltbWZpbGVfdCBvcmlnLCBzcmMxLCBzcmMyOworCXN0cnVjdCBsbF9tZXJnZV9vcHRpb25zIGxsX29wdHMgPSB7MH07CisJY2hhciAqYmFzZV9uYW1lLCAqbmFtZTEsICpuYW1lMjsKKwlpbnQgbWVyZ2Vfc3RhdHVzOworCisJbGxfb3B0cy5yZW5vcm1hbGl6ZSA9IG8tPnJlbm9ybWFsaXplOworCWxsX29wdHMueGRsX29wdHMgPSBvLT54ZGxfb3B0czsKKworCWlmIChvLT5jYWxsX2RlcHRoKSB7CisJCWxsX29wdHMudmlydHVhbF9hbmNlc3RvciA9IDE7CisJCWxsX29wdHMudmFyaWFudCA9IDA7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChvLT5yZWN1cnNpdmVfdmFyaWFudCkgeworCQljYXNlIE1FUkdFX1JFQ1VSU0lWRV9PVVJTOgorCQkJbGxfb3B0cy52YXJpYW50ID0gWERMX01FUkdFX0ZBVk9SX09VUlM7CisJCQlicmVhazsKKwkJY2FzZSBNRVJHRV9SRUNVUlNJVkVfVEhFSVJTOgorCQkJbGxfb3B0cy52YXJpYW50ID0gWERMX01FUkdFX0ZBVk9SX1RIRUlSUzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbGxfb3B0cy52YXJpYW50ID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKSB8fAorCSAgICAoby0+YW5jZXN0b3IgIT0gTlVMTCAmJiBzdHJjbXAoYS0+cGF0aCwgb25lLT5wYXRoKSAhPSAwKSkgeworCQliYXNlX25hbWUgPSBvLT5hbmNlc3RvciA9PSBOVUxMID8gTlVMTCA6CisJCQlta3BhdGhkdXAoIiVzOiVzIiwgby0+YW5jZXN0b3IsIG9uZS0+cGF0aCk7CisJCW5hbWUxID0gbWtwYXRoZHVwKCIlczolcyIsIGJyYW5jaDEsIGEtPnBhdGgpOworCQluYW1lMiA9IG1rcGF0aGR1cCgiJXM6JXMiLCBicmFuY2gyLCBiLT5wYXRoKTsKKwl9IGVsc2UgeworCQliYXNlX25hbWUgPSBvLT5hbmNlc3RvciA9PSBOVUxMID8gTlVMTCA6CisJCQlta3BhdGhkdXAoIiVzIiwgby0+YW5jZXN0b3IpOworCQluYW1lMSA9IG1rcGF0aGR1cCgiJXMiLCBicmFuY2gxKTsKKwkJbmFtZTIgPSBta3BhdGhkdXAoIiVzIiwgYnJhbmNoMik7CisJfQorCisJcmVhZF9tbWJsb2IoJm9yaWcsIG9uZS0+c2hhMSk7CisJcmVhZF9tbWJsb2IoJnNyYzEsIGEtPnNoYTEpOworCXJlYWRfbW1ibG9iKCZzcmMyLCBiLT5zaGExKTsKKworCW1lcmdlX3N0YXR1cyA9IGxsX21lcmdlKHJlc3VsdF9idWYsIGEtPnBhdGgsICZvcmlnLCBiYXNlX25hbWUsCisJCQkJJnNyYzEsIG5hbWUxLCAmc3JjMiwgbmFtZTIsICZsbF9vcHRzKTsKKworCWZyZWUoYmFzZV9uYW1lKTsKKwlmcmVlKG5hbWUxKTsKKwlmcmVlKG5hbWUyKTsKKwlmcmVlKG9yaWcucHRyKTsKKwlmcmVlKHNyYzEucHRyKTsKKwlmcmVlKHNyYzIucHRyKTsKKwlyZXR1cm4gbWVyZ2Vfc3RhdHVzOworfQorCitzdGF0aWMgc3RydWN0IG1lcmdlX2ZpbGVfaW5mbyBtZXJnZV9maWxlXzEoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBkaWZmX2ZpbGVzcGVjICphLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYiwKKwkJCQkJICAgY29uc3QgY2hhciAqYnJhbmNoMSwKKwkJCQkJICAgY29uc3QgY2hhciAqYnJhbmNoMikKK3sKKwlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIHJlc3VsdDsKKwlyZXN1bHQubWVyZ2UgPSAwOworCXJlc3VsdC5jbGVhbiA9IDE7CisKKwlpZiAoKFNfSUZNVCAmIGEtPm1vZGUpICE9IChTX0lGTVQgJiBiLT5tb2RlKSkgeworCQlyZXN1bHQuY2xlYW4gPSAwOworCQlpZiAoU19JU1JFRyhhLT5tb2RlKSkgeworCQkJcmVzdWx0Lm1vZGUgPSBhLT5tb2RlOworCQkJaGFzaGNweShyZXN1bHQuc2hhLCBhLT5zaGExKTsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdC5tb2RlID0gYi0+bW9kZTsKKwkJCWhhc2hjcHkocmVzdWx0LnNoYSwgYi0+c2hhMSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIXNoYV9lcShhLT5zaGExLCBvbmUtPnNoYTEpICYmICFzaGFfZXEoYi0+c2hhMSwgb25lLT5zaGExKSkKKwkJCXJlc3VsdC5tZXJnZSA9IDE7CisKKwkJLyoKKwkJICogTWVyZ2UgbW9kZXMKKwkJICovCisJCWlmIChhLT5tb2RlID09IGItPm1vZGUgfHwgYS0+bW9kZSA9PSBvbmUtPm1vZGUpCisJCQlyZXN1bHQubW9kZSA9IGItPm1vZGU7CisJCWVsc2UgeworCQkJcmVzdWx0Lm1vZGUgPSBhLT5tb2RlOworCQkJaWYgKGItPm1vZGUgIT0gb25lLT5tb2RlKSB7CisJCQkJcmVzdWx0LmNsZWFuID0gMDsKKwkJCQlyZXN1bHQubWVyZ2UgPSAxOworCQkJfQorCQl9CisKKwkJaWYgKHNoYV9lcShhLT5zaGExLCBiLT5zaGExKSB8fCBzaGFfZXEoYS0+c2hhMSwgb25lLT5zaGExKSkKKwkJCWhhc2hjcHkocmVzdWx0LnNoYSwgYi0+c2hhMSk7CisJCWVsc2UgaWYgKHNoYV9lcShiLT5zaGExLCBvbmUtPnNoYTEpKQorCQkJaGFzaGNweShyZXN1bHQuc2hhLCBhLT5zaGExKTsKKwkJZWxzZSBpZiAoU19JU1JFRyhhLT5tb2RlKSkgeworCQkJbW1idWZmZXJfdCByZXN1bHRfYnVmOworCQkJaW50IG1lcmdlX3N0YXR1czsKKworCQkJbWVyZ2Vfc3RhdHVzID0gbWVyZ2VfM3dheShvLCAmcmVzdWx0X2J1Ziwgb25lLCBhLCBiLAorCQkJCQkJICBicmFuY2gxLCBicmFuY2gyKTsKKworCQkJaWYgKChtZXJnZV9zdGF0dXMgPCAwKSB8fCAhcmVzdWx0X2J1Zi5wdHIpCisJCQkJZGllKF8oIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIikpOworCisJCQlpZiAod3JpdGVfc2hhMV9maWxlKHJlc3VsdF9idWYucHRyLCByZXN1bHRfYnVmLnNpemUsCisJCQkJCSAgICBibG9iX3R5cGUsIHJlc3VsdC5zaGEpKQorCQkJCWRpZShfKCJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIiksCisJCQkJICAgIGEtPnBhdGgpOworCisJCQlmcmVlKHJlc3VsdF9idWYucHRyKTsKKwkJCXJlc3VsdC5jbGVhbiA9IChtZXJnZV9zdGF0dXMgPT0gMCk7CisJCX0gZWxzZSBpZiAoU19JU0dJVExJTksoYS0+bW9kZSkpIHsKKwkJCXJlc3VsdC5jbGVhbiA9IG1lcmdlX3N1Ym1vZHVsZShyZXN1bHQuc2hhLAorCQkJCQkJICAgICAgIG9uZS0+cGF0aCwgb25lLT5zaGExLAorCQkJCQkJICAgICAgIGEtPnNoYTEsIGItPnNoYTEsCisJCQkJCQkgICAgICAgIW8tPmNhbGxfZGVwdGgpOworCQl9IGVsc2UgaWYgKFNfSVNMTksoYS0+bW9kZSkpIHsKKwkJCWhhc2hjcHkocmVzdWx0LnNoYSwgYS0+c2hhMSk7CisKKwkJCWlmICghc2hhX2VxKGEtPnNoYTEsIGItPnNoYTEpKQorCQkJCXJlc3VsdC5jbGVhbiA9IDA7CisJCX0gZWxzZSB7CisJCQlkaWUoXygidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgaW4gdGhlIHRyZWUiKSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IG1lcmdlX2ZpbGVfaW5mbworbWVyZ2VfZmlsZV9zcGVjaWFsX21hcmtlcnMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCQkgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb25lLAorCQkJICAgY29uc3Qgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEsCisJCQkgICBjb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYiwKKwkJCSAgIGNvbnN0IGNoYXIgKmJyYW5jaDEsCisJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZTEsCisJCQkgICBjb25zdCBjaGFyICpicmFuY2gyLAorCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUyKQoreworCWNoYXIgKnNpZGUxID0gTlVMTDsKKwljaGFyICpzaWRlMiA9IE5VTEw7CisJc3RydWN0IG1lcmdlX2ZpbGVfaW5mbyBtZmk7CisKKwlpZiAoZmlsZW5hbWUxKQorCQlzaWRlMSA9IHhzdHJmbXQoIiVzOiVzIiwgYnJhbmNoMSwgZmlsZW5hbWUxKTsKKwlpZiAoZmlsZW5hbWUyKQorCQlzaWRlMiA9IHhzdHJmbXQoIiVzOiVzIiwgYnJhbmNoMiwgZmlsZW5hbWUyKTsKKworCW1maSA9IG1lcmdlX2ZpbGVfMShvLCBvbmUsIGEsIGIsCisJCQkgICBzaWRlMSA/IHNpZGUxIDogYnJhbmNoMSwgc2lkZTIgPyBzaWRlMiA6IGJyYW5jaDIpOworCWZyZWUoc2lkZTEpOworCWZyZWUoc2lkZTIpOworCXJldHVybiBtZmk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1lcmdlX2ZpbGVfb25lKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJCQkgY29uc3QgY2hhciAqcGF0aCwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9fc2hhLCBpbnQgb19tb2RlLAorCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYV9zaGEsIGludCBhX21vZGUsCisJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpiX3NoYSwgaW50IGJfbW9kZSwKKwkJCQkJIGNvbnN0IGNoYXIgKmJyYW5jaDEsCisJCQkJCSBjb25zdCBjaGFyICpicmFuY2gyKQoreworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjIG9uZSwgYSwgYjsKKworCW9uZS5wYXRoID0gYS5wYXRoID0gYi5wYXRoID0gKGNoYXIgKilwYXRoOworCWhhc2hjcHkob25lLnNoYTEsIG9fc2hhKTsKKwlvbmUubW9kZSA9IG9fbW9kZTsKKwloYXNoY3B5KGEuc2hhMSwgYV9zaGEpOworCWEubW9kZSA9IGFfbW9kZTsKKwloYXNoY3B5KGIuc2hhMSwgYl9zaGEpOworCWIubW9kZSA9IGJfbW9kZTsKKwlyZXR1cm4gbWVyZ2VfZmlsZV8xKG8sICZvbmUsICZhLCAmYiwgYnJhbmNoMSwgYnJhbmNoMik7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jaGFuZ2VfZGVsZXRlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJCSBjb25zdCBjaGFyICpwYXRoLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvX3NoYSwgaW50IG9fbW9kZSwKKwkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYV9zaGEsIGludCBhX21vZGUsCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJfc2hhLCBpbnQgYl9tb2RlLAorCQkJCSBjb25zdCBjaGFyICpjaGFuZ2UsIGNvbnN0IGNoYXIgKmNoYW5nZV9wYXN0KQoreworCWNoYXIgKnJlbmFtZWQgPSBOVUxMOworCWlmIChkaXJfaW5fd2F5KHBhdGgsICFvLT5jYWxsX2RlcHRoKSkgeworCQlyZW5hbWVkID0gdW5pcXVlX3BhdGgobywgcGF0aCwgYV9zaGEgPyBvLT5icmFuY2gxIDogby0+YnJhbmNoMik7CisJfQorCisJaWYgKG8tPmNhbGxfZGVwdGgpIHsKKwkJLyoKKwkJICogV2UgY2Fubm90IGFyYml0cmFyaWx5IGFjY2VwdCBlaXRoZXIgYV9zaGEgb3IgYl9zaGEgYXMKKwkJICogY29ycmVjdDsgc2luY2UgdGhlcmUgaXMgbm8gdHJ1ZSAibWlkZGxlIHBvaW50IiBiZXR3ZWVuCisJCSAqIHRoZW0sIHNpbXBseSByZXVzZSB0aGUgYmFzZSB2ZXJzaW9uIGZvciB2aXJ0dWFsIG1lcmdlIGJhc2UuCisJCSAqLworCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOworCQl1cGRhdGVfZmlsZShvLCAwLCBvX3NoYSwgb19tb2RlLCByZW5hbWVkID8gcmVuYW1lZCA6IHBhdGgpOworCX0gZWxzZSBpZiAoIWFfc2hhKSB7CisJCWlmICghcmVuYW1lZCkgeworCQkJb3V0cHV0KG8sIDEsIF8oIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzICIKKwkJCSAgICAgICAiYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgaW4gdHJlZS4iKSwKKwkJCSAgICAgICBjaGFuZ2UsIHBhdGgsIG8tPmJyYW5jaDEsIGNoYW5nZV9wYXN0LAorCQkJICAgICAgIG8tPmJyYW5jaDIsIG8tPmJyYW5jaDIsIHBhdGgpOworCQkJdXBkYXRlX2ZpbGUobywgMCwgYl9zaGEsIGJfbW9kZSwgcGF0aCk7CisJCX0gZWxzZSB7CisJCQlvdXRwdXQobywgMSwgXygiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgIgorCQkJICAgICAgICJhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCBpbiB0cmVlIGF0ICVzLiIpLAorCQkJICAgICAgIGNoYW5nZSwgcGF0aCwgby0+YnJhbmNoMSwgY2hhbmdlX3Bhc3QsCisJCQkgICAgICAgby0+YnJhbmNoMiwgby0+YnJhbmNoMiwgcGF0aCwgcmVuYW1lZCk7CisJCQl1cGRhdGVfZmlsZShvLCAwLCBiX3NoYSwgYl9tb2RlLCByZW5hbWVkKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghcmVuYW1lZCkgeworCQkJb3V0cHV0KG8sIDEsIF8oIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzICIKKwkJCSAgICAgICAiYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgaW4gdHJlZS4iKSwKKwkJCSAgICAgICBjaGFuZ2UsIHBhdGgsIG8tPmJyYW5jaDIsIGNoYW5nZV9wYXN0LAorCQkJICAgICAgIG8tPmJyYW5jaDEsIG8tPmJyYW5jaDEsIHBhdGgpOworCQl9IGVsc2UgeworCQkJb3V0cHV0KG8sIDEsIF8oIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzICIKKwkJCSAgICAgICAiYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgaW4gdHJlZSBhdCAlcy4iKSwKKwkJCSAgICAgICBjaGFuZ2UsIHBhdGgsIG8tPmJyYW5jaDIsIGNoYW5nZV9wYXN0LAorCQkJICAgICAgIG8tPmJyYW5jaDEsIG8tPmJyYW5jaDEsIHBhdGgsIHJlbmFtZWQpOworCQkJdXBkYXRlX2ZpbGUobywgMCwgYV9zaGEsIGFfbW9kZSwgcmVuYW1lZCk7CisJCX0KKwkJLyoKKwkJICogTm8gbmVlZCB0byBjYWxsIHVwZGF0ZV9maWxlKCkgb24gcGF0aCB3aGVuICFyZW5hbWVkLCBzaW5jZQorCQkgKiB0aGF0IHdvdWxkIG5lZWRsZXNzbHkgdG91Y2ggcGF0aC4gIFdlIGNvdWxkIGNhbGwKKwkJICogdXBkYXRlX2ZpbGVfZmxhZ3MoKSB3aXRoIHVwZGF0ZV9jYWNoZT0wIGFuZCB1cGRhdGVfd2Q9MCwKKwkJICogYnV0IHRoYXQncyBhIG5vLW9wLgorCQkgKi8KKwl9CisJZnJlZShyZW5hbWVkKTsKK30KKworc3RhdGljIHZvaWQgY29uZmxpY3RfcmVuYW1lX2RlbGV0ZShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCQkgICBzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcGFpciwKKwkJCQkgICBjb25zdCBjaGFyICpyZW5hbWVfYnJhbmNoLAorCQkJCSAgIGNvbnN0IGNoYXIgKm90aGVyX2JyYW5jaCkKK3sKKwljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqb3JpZyA9IHBhaXItPm9uZTsKKwljb25zdCBzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqZGVzdCA9IHBhaXItPnR3bzsKKwljb25zdCB1bnNpZ25lZCBjaGFyICphX3NoYSA9IE5VTEw7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYl9zaGEgPSBOVUxMOworCWludCBhX21vZGUgPSAwOworCWludCBiX21vZGUgPSAwOworCisJaWYgKHJlbmFtZV9icmFuY2ggPT0gby0+YnJhbmNoMSkgeworCQlhX3NoYSA9IGRlc3QtPnNoYTE7CisJCWFfbW9kZSA9IGRlc3QtPm1vZGU7CisJfSBlbHNlIHsKKwkJYl9zaGEgPSBkZXN0LT5zaGExOworCQliX21vZGUgPSBkZXN0LT5tb2RlOworCX0KKworCWhhbmRsZV9jaGFuZ2VfZGVsZXRlKG8sCisJCQkgICAgIG8tPmNhbGxfZGVwdGggPyBvcmlnLT5wYXRoIDogZGVzdC0+cGF0aCwKKwkJCSAgICAgb3JpZy0+c2hhMSwgb3JpZy0+bW9kZSwKKwkJCSAgICAgYV9zaGEsIGFfbW9kZSwKKwkJCSAgICAgYl9zaGEsIGJfbW9kZSwKKwkJCSAgICAgXygicmVuYW1lIiksIF8oInJlbmFtZWQiKSk7CisKKwlpZiAoby0+Y2FsbF9kZXB0aCkgeworCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKGRlc3QtPnBhdGgpOworCX0gZWxzZSB7CisJCXVwZGF0ZV9zdGFnZXMoZGVzdC0+cGF0aCwgTlVMTCwKKwkJCSAgICAgIHJlbmFtZV9icmFuY2ggPT0gby0+YnJhbmNoMSA/IGRlc3QgOiBOVUxMLAorCQkJICAgICAgcmVuYW1lX2JyYW5jaCA9PSBvLT5icmFuY2gxID8gTlVMTCA6IGRlc3QpOworCX0KKworfQorCitzdGF0aWMgc3RydWN0IGRpZmZfZmlsZXNwZWMgKmZpbGVzcGVjX2Zyb21fZW50cnkoc3RydWN0IGRpZmZfZmlsZXNwZWMgKnRhcmdldCwKKwkJCQkJCSBzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZW50cnksCisJCQkJCQkgaW50IHN0YWdlKQoreworCXVuc2lnbmVkIGNoYXIgKnNoYSA9IGVudHJ5LT5zdGFnZXNbc3RhZ2VdLnNoYTsKKwl1bnNpZ25lZCBtb2RlID0gZW50cnktPnN0YWdlc1tzdGFnZV0ubW9kZTsKKwlpZiAobW9kZSA9PSAwIHx8IGlzX251bGxfc2hhMShzaGEpKQorCQlyZXR1cm4gTlVMTDsKKwloYXNoY3B5KHRhcmdldC0+c2hhMSwgc2hhKTsKKwl0YXJnZXQtPm1vZGUgPSBtb2RlOworCXJldHVybiB0YXJnZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9maWxlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKnJlbmFtZSwKKwkJCWludCBzdGFnZSwKKwkJCXN0cnVjdCByZW5hbWVfY29uZmxpY3RfaW5mbyAqY2kpCit7CisJY2hhciAqZHN0X25hbWUgPSByZW5hbWUtPnBhdGg7CisJc3RydWN0IHN0YWdlX2RhdGEgKmRzdF9lbnRyeTsKKwljb25zdCBjaGFyICpjdXJfYnJhbmNoLCAqb3RoZXJfYnJhbmNoOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjIG90aGVyOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICphZGQ7CisKKwlpZiAoc3RhZ2UgPT0gMikgeworCQlkc3RfZW50cnkgPSBjaS0+ZHN0X2VudHJ5MTsKKwkJY3VyX2JyYW5jaCA9IGNpLT5icmFuY2gxOworCQlvdGhlcl9icmFuY2ggPSBjaS0+YnJhbmNoMjsKKwl9IGVsc2UgeworCQlkc3RfZW50cnkgPSBjaS0+ZHN0X2VudHJ5MjsKKwkJY3VyX2JyYW5jaCA9IGNpLT5icmFuY2gyOworCQlvdGhlcl9icmFuY2ggPSBjaS0+YnJhbmNoMTsKKwl9CisKKwlhZGQgPSBmaWxlc3BlY19mcm9tX2VudHJ5KCZvdGhlciwgZHN0X2VudHJ5LCBzdGFnZSBeIDEpOworCWlmIChhZGQpIHsKKwkJY2hhciAqYWRkX25hbWUgPSB1bmlxdWVfcGF0aChvLCByZW5hbWUtPnBhdGgsIG90aGVyX2JyYW5jaCk7CisJCXVwZGF0ZV9maWxlKG8sIDAsIGFkZC0+c2hhMSwgYWRkLT5tb2RlLCBhZGRfbmFtZSk7CisKKwkJcmVtb3ZlX2ZpbGUobywgMCwgcmVuYW1lLT5wYXRoLCAwKTsKKwkJZHN0X25hbWUgPSB1bmlxdWVfcGF0aChvLCByZW5hbWUtPnBhdGgsIGN1cl9icmFuY2gpOworCX0gZWxzZSB7CisJCWlmIChkaXJfaW5fd2F5KHJlbmFtZS0+cGF0aCwgIW8tPmNhbGxfZGVwdGgpKSB7CisJCQlkc3RfbmFtZSA9IHVuaXF1ZV9wYXRoKG8sIHJlbmFtZS0+cGF0aCwgY3VyX2JyYW5jaCk7CisJCQlvdXRwdXQobywgMSwgXygiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiKSwKKwkJCSAgICAgICByZW5hbWUtPnBhdGgsIG90aGVyX2JyYW5jaCwgZHN0X25hbWUpOworCQl9CisJfQorCXVwZGF0ZV9maWxlKG8sIDAsIHJlbmFtZS0+c2hhMSwgcmVuYW1lLT5tb2RlLCBkc3RfbmFtZSk7CisJaWYgKHN0YWdlID09IDIpCisJCXVwZGF0ZV9zdGFnZXMocmVuYW1lLT5wYXRoLCBOVUxMLCByZW5hbWUsIGFkZCk7CisJZWxzZQorCQl1cGRhdGVfc3RhZ2VzKHJlbmFtZS0+cGF0aCwgTlVMTCwgYWRkLCByZW5hbWUpOworCisJaWYgKGRzdF9uYW1lICE9IHJlbmFtZS0+cGF0aCkKKwkJZnJlZShkc3RfbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZsaWN0X3JlbmFtZV9yZW5hbWVfMXRvMihzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCQkJc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpjaSkKK3sKKwkvKiBPbmUgZmlsZSB3YXMgcmVuYW1lZCBpbiBib3RoIGJyYW5jaGVzLCBidXQgdG8gZGlmZmVyZW50IG5hbWVzLiAqLworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUgPSBjaS0+cGFpcjEtPm9uZTsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYSA9IGNpLT5wYWlyMS0+dHdvOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpiID0gY2ktPnBhaXIyLT50d287CisKKwlvdXRwdXQobywgMSwgXygiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiAiCisJICAgICAgICJSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiAiCisJICAgICAgICJyZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gXCIlc1wiJXMiKSwKKwkgICAgICAgb25lLT5wYXRoLCBhLT5wYXRoLCBjaS0+YnJhbmNoMSwKKwkgICAgICAgb25lLT5wYXRoLCBiLT5wYXRoLCBjaS0+YnJhbmNoMiwKKwkgICAgICAgby0+Y2FsbF9kZXB0aCA/IF8oIiAobGVmdCB1bnJlc29sdmVkKSIpIDogIiIpOworCWlmIChvLT5jYWxsX2RlcHRoKSB7CisJCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpOworCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyBvdGhlcjsKKwkJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmFkZDsKKwkJbWZpID0gbWVyZ2VfZmlsZV9vbmUobywgb25lLT5wYXRoLAorCQkJCSBvbmUtPnNoYTEsIG9uZS0+bW9kZSwKKwkJCQkgYS0+c2hhMSwgYS0+bW9kZSwKKwkJCQkgYi0+c2hhMSwgYi0+bW9kZSwKKwkJCQkgY2ktPmJyYW5jaDEsIGNpLT5icmFuY2gyKTsKKwkJLyoKKwkJICogRklYTUU6IEZvciByZW5hbWUvYWRkLXNvdXJjZSBjb25mbGljdHMgKGlmIHdlIGNvdWxkIGRldGVjdAorCQkgKiBzdWNoKSwgdGhpcyBpcyB3cm9uZy4gIFdlIHNob3VsZCBpbnN0ZWFkIGZpbmQgYSB1bmlxdWUKKwkJICogcGF0aG5hbWUgYW5kIHRoZW4gZWl0aGVyIHJlbmFtZSB0aGUgYWRkLXNvdXJjZSBmaWxlIHRvIHRoYXQKKwkJICogdW5pcXVlIHBhdGgsIG9yIHVzZSB0aGF0IHVuaXF1ZSBwYXRoIGluc3RlYWQgb2Ygc3JjIGhlcmUuCisJCSAqLworCQl1cGRhdGVfZmlsZShvLCAwLCBtZmkuc2hhLCBtZmkubW9kZSwgb25lLT5wYXRoKTsKKworCQkvKgorCQkgKiBBYm92ZSwgd2UgcHV0IHRoZSBtZXJnZWQgY29udGVudCBhdCB0aGUgbWVyZ2UtYmFzZSdzCisJCSAqIHBhdGguICBOb3cgd2UgdXN1YWxseSBuZWVkIHRvIGRlbGV0ZSBib3RoIGEtPnBhdGggYW5kCisJCSAqIGItPnBhdGguICBIb3dldmVyLCB0aGUgcmVuYW1lIG9uIGVhY2ggc2lkZSBvZiB0aGUgbWVyZ2UKKwkJICogY291bGQgYWxzbyBiZSBpbnZvbHZlZCBpbiBhIHJlbmFtZS9hZGQgY29uZmxpY3QuICBJbgorCQkgKiBzdWNoIGNhc2VzLCB3ZSBzaG91bGQga2VlcCB0aGUgYWRkZWQgZmlsZSBhcm91bmQsCisJCSAqIHJlc29sdmluZyB0aGUgY29uZmxpY3QgYXQgdGhhdCBwYXRoIGluIGl0cyBmYXZvci4KKwkJICovCisJCWFkZCA9IGZpbGVzcGVjX2Zyb21fZW50cnkoJm90aGVyLCBjaS0+ZHN0X2VudHJ5MSwgMiBeIDEpOworCQlpZiAoYWRkKQorCQkJdXBkYXRlX2ZpbGUobywgMCwgYWRkLT5zaGExLCBhZGQtPm1vZGUsIGEtPnBhdGgpOworCQllbHNlCisJCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKGEtPnBhdGgpOworCQlhZGQgPSBmaWxlc3BlY19mcm9tX2VudHJ5KCZvdGhlciwgY2ktPmRzdF9lbnRyeTIsIDMgXiAxKTsKKwkJaWYgKGFkZCkKKwkJCXVwZGF0ZV9maWxlKG8sIDAsIGFkZC0+c2hhMSwgYWRkLT5tb2RlLCBiLT5wYXRoKTsKKwkJZWxzZQorCQkJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShiLT5wYXRoKTsKKwl9IGVsc2UgeworCQloYW5kbGVfZmlsZShvLCBhLCAyLCBjaSk7CisJCWhhbmRsZV9maWxlKG8sIGIsIDMsIGNpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZsaWN0X3JlbmFtZV9yZW5hbWVfMnRvMShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCQkJc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpjaSkKK3sKKwkvKiBUd28gZmlsZXMsIGEgJiBiLCB3ZXJlIHJlbmFtZWQgdG8gdGhlIHNhbWUgdGhpbmcsIGMuICovCisJc3RydWN0IGRpZmZfZmlsZXNwZWMgKmEgPSBjaS0+cGFpcjEtPm9uZTsKKwlzdHJ1Y3QgZGlmZl9maWxlc3BlYyAqYiA9IGNpLT5wYWlyMi0+b25lOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpjMSA9IGNpLT5wYWlyMS0+dHdvOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpjMiA9IGNpLT5wYWlyMi0+dHdvOworCWNoYXIgKnBhdGggPSBjMS0+cGF0aDsgLyogPT0gYzItPnBhdGggKi8KKwlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maV9jMTsKKwlzdHJ1Y3QgbWVyZ2VfZmlsZV9pbmZvIG1maV9jMjsKKworCW91dHB1dChvLCAxLCBfKCJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6ICIKKwkgICAgICAgIlJlbmFtZSAlcy0+JXMgaW4gJXMuICIKKwkgICAgICAgIlJlbmFtZSAlcy0+JXMgaW4gJXMiKSwKKwkgICAgICAgYS0+cGF0aCwgYzEtPnBhdGgsIGNpLT5icmFuY2gxLAorCSAgICAgICBiLT5wYXRoLCBjMi0+cGF0aCwgY2ktPmJyYW5jaDIpOworCisJcmVtb3ZlX2ZpbGUobywgMSwgYS0+cGF0aCwgd291bGRfbG9zZV91bnRyYWNrZWQoYS0+cGF0aCkpOworCXJlbW92ZV9maWxlKG8sIDEsIGItPnBhdGgsIHdvdWxkX2xvc2VfdW50cmFja2VkKGItPnBhdGgpKTsKKworCW1maV9jMSA9IG1lcmdlX2ZpbGVfc3BlY2lhbF9tYXJrZXJzKG8sIGEsIGMxLCAmY2ktPnJlbjFfb3RoZXIsCisJCQkJCSAgICBvLT5icmFuY2gxLCBjMS0+cGF0aCwKKwkJCQkJICAgIG8tPmJyYW5jaDIsIGNpLT5yZW4xX290aGVyLnBhdGgpOworCW1maV9jMiA9IG1lcmdlX2ZpbGVfc3BlY2lhbF9tYXJrZXJzKG8sIGIsICZjaS0+cmVuMl9vdGhlciwgYzIsCisJCQkJCSAgICBvLT5icmFuY2gxLCBjaS0+cmVuMl9vdGhlci5wYXRoLAorCQkJCQkgICAgby0+YnJhbmNoMiwgYzItPnBhdGgpOworCisJaWYgKG8tPmNhbGxfZGVwdGgpIHsKKwkJLyoKKwkJICogSWYgbWZpX2MxLmNsZWFuICYmIG1maV9jMi5jbGVhbiwgdGhlbiBpdCBtaWdodCBtYWtlCisJCSAqIHNlbnNlIHRvIGRvIGEgdHdvLXdheSBtZXJnZSBvZiB0aG9zZSByZXN1bHRzLiAgQnV0LCBJCisJCSAqIHRoaW5rIGluIGFsbCBjYXNlcywgaXQgbWFrZXMgc2Vuc2UgdG8gaGF2ZSB0aGUgdmlydHVhbAorCQkgKiBtZXJnZSBiYXNlIGp1c3QgdW5kbyB0aGUgcmVuYW1lczsgdGhleSBjYW4gYmUgZGV0ZWN0ZWQKKwkJICogYWdhaW4gbGF0ZXIgZm9yIHRoZSBub24tcmVjdXJzaXZlIG1lcmdlLgorCQkgKi8KKwkJcmVtb3ZlX2ZpbGUobywgMCwgcGF0aCwgMCk7CisJCXVwZGF0ZV9maWxlKG8sIDAsIG1maV9jMS5zaGEsIG1maV9jMS5tb2RlLCBhLT5wYXRoKTsKKwkJdXBkYXRlX2ZpbGUobywgMCwgbWZpX2MyLnNoYSwgbWZpX2MyLm1vZGUsIGItPnBhdGgpOworCX0gZWxzZSB7CisJCWNoYXIgKm5ld19wYXRoMSA9IHVuaXF1ZV9wYXRoKG8sIHBhdGgsIGNpLT5icmFuY2gxKTsKKwkJY2hhciAqbmV3X3BhdGgyID0gdW5pcXVlX3BhdGgobywgcGF0aCwgY2ktPmJyYW5jaDIpOworCQlvdXRwdXQobywgMSwgXygiUmVuYW1pbmcgJXMgdG8gJXMgYW5kICVzIHRvICVzIGluc3RlYWQiKSwKKwkJICAgICAgIGEtPnBhdGgsIG5ld19wYXRoMSwgYi0+cGF0aCwgbmV3X3BhdGgyKTsKKwkJcmVtb3ZlX2ZpbGUobywgMCwgcGF0aCwgMCk7CisJCXVwZGF0ZV9maWxlKG8sIDAsIG1maV9jMS5zaGEsIG1maV9jMS5tb2RlLCBuZXdfcGF0aDEpOworCQl1cGRhdGVfZmlsZShvLCAwLCBtZmlfYzIuc2hhLCBtZmlfYzIubW9kZSwgbmV3X3BhdGgyKTsKKwkJZnJlZShuZXdfcGF0aDIpOworCQlmcmVlKG5ld19wYXRoMSk7CisJfQorfQorCitzdGF0aWMgaW50IHByb2Nlc3NfcmVuYW1lcyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCSAgIHN0cnVjdCBzdHJpbmdfbGlzdCAqYV9yZW5hbWVzLAorCQkJICAgc3RydWN0IHN0cmluZ19saXN0ICpiX3JlbmFtZXMpCit7CisJaW50IGNsZWFuX21lcmdlID0gMSwgaSwgajsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgYV9ieV9kc3QgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBiX2J5X2RzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJY29uc3Qgc3RydWN0IHJlbmFtZSAqc3JlOworCisJZm9yIChpID0gMDsgaSA8IGFfcmVuYW1lcy0+bnI7IGkrKykgeworCQlzcmUgPSBhX3JlbmFtZXMtPml0ZW1zW2ldLnV0aWw7CisJCXN0cmluZ19saXN0X2luc2VydCgmYV9ieV9kc3QsIHNyZS0+cGFpci0+dHdvLT5wYXRoKS0+dXRpbAorCQkJPSAodm9pZCAqKXNyZTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGJfcmVuYW1lcy0+bnI7IGkrKykgeworCQlzcmUgPSBiX3JlbmFtZXMtPml0ZW1zW2ldLnV0aWw7CisJCXN0cmluZ19saXN0X2luc2VydCgmYl9ieV9kc3QsIHNyZS0+cGFpci0+dHdvLT5wYXRoKS0+dXRpbAorCQkJPSAodm9pZCAqKXNyZTsKKwl9CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGFfcmVuYW1lcy0+bnIgfHwgaiA8IGJfcmVuYW1lcy0+bnI7KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVuYW1lczEsICpyZW5hbWVzMkRzdDsKKwkJc3RydWN0IHJlbmFtZSAqcmVuMSA9IE5VTEwsICpyZW4yID0gTlVMTDsKKwkJY29uc3QgY2hhciAqYnJhbmNoMSwgKmJyYW5jaDI7CisJCWNvbnN0IGNoYXIgKnJlbjFfc3JjLCAqcmVuMV9kc3Q7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpsb29rdXA7CisKKwkJaWYgKGkgPj0gYV9yZW5hbWVzLT5ucikgeworCQkJcmVuMiA9IGJfcmVuYW1lcy0+aXRlbXNbaisrXS51dGlsOworCQl9IGVsc2UgaWYgKGogPj0gYl9yZW5hbWVzLT5ucikgeworCQkJcmVuMSA9IGFfcmVuYW1lcy0+aXRlbXNbaSsrXS51dGlsOworCQl9IGVsc2UgeworCQkJaW50IGNvbXBhcmUgPSBzdHJjbXAoYV9yZW5hbWVzLT5pdGVtc1tpXS5zdHJpbmcsCisJCQkJCSAgICAgYl9yZW5hbWVzLT5pdGVtc1tqXS5zdHJpbmcpOworCQkJaWYgKGNvbXBhcmUgPD0gMCkKKwkJCQlyZW4xID0gYV9yZW5hbWVzLT5pdGVtc1tpKytdLnV0aWw7CisJCQlpZiAoY29tcGFyZSA+PSAwKQorCQkJCXJlbjIgPSBiX3JlbmFtZXMtPml0ZW1zW2orK10udXRpbDsKKwkJfQorCisJCS8qIFRPRE86IHJlZmFjdG9yLCBzbyB0aGF0IDEvMiBhcmUgbm90IG5lZWRlZCAqLworCQlpZiAocmVuMSkgeworCQkJcmVuYW1lczEgPSBhX3JlbmFtZXM7CisJCQlyZW5hbWVzMkRzdCA9ICZiX2J5X2RzdDsKKwkJCWJyYW5jaDEgPSBvLT5icmFuY2gxOworCQkJYnJhbmNoMiA9IG8tPmJyYW5jaDI7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcmVuYW1lICp0bXA7CisJCQlyZW5hbWVzMSA9IGJfcmVuYW1lczsKKwkJCXJlbmFtZXMyRHN0ID0gJmFfYnlfZHN0OworCQkJYnJhbmNoMSA9IG8tPmJyYW5jaDI7CisJCQlicmFuY2gyID0gby0+YnJhbmNoMTsKKwkJCXRtcCA9IHJlbjI7CisJCQlyZW4yID0gcmVuMTsKKwkJCXJlbjEgPSB0bXA7CisJCX0KKworCQlpZiAocmVuMS0+cHJvY2Vzc2VkKQorCQkJY29udGludWU7CisJCXJlbjEtPnByb2Nlc3NlZCA9IDE7CisJCXJlbjEtPmRzdF9lbnRyeS0+cHJvY2Vzc2VkID0gMTsKKwkJLyogQlVHOiBXZSBzaG91bGQgb25seSBtYXJrIHNyY19lbnRyeSBhcyBwcm9jZXNzZWQgaWYgd2UKKwkJICogYXJlIG5vdCBkZWFsaW5nIHdpdGggYSByZW5hbWUgKyBhZGQtc291cmNlIGNhc2UuCisJCSAqLworCQlyZW4xLT5zcmNfZW50cnktPnByb2Nlc3NlZCA9IDE7CisKKwkJcmVuMV9zcmMgPSByZW4xLT5wYWlyLT5vbmUtPnBhdGg7CisJCXJlbjFfZHN0ID0gcmVuMS0+cGFpci0+dHdvLT5wYXRoOworCisJCWlmIChyZW4yKSB7CisJCQkvKiBPbmUgZmlsZSByZW5hbWVkIG9uIGJvdGggc2lkZXMgKi8KKwkJCWNvbnN0IGNoYXIgKnJlbjJfc3JjID0gcmVuMi0+cGFpci0+b25lLT5wYXRoOworCQkJY29uc3QgY2hhciAqcmVuMl9kc3QgPSByZW4yLT5wYWlyLT50d28tPnBhdGg7CisJCQllbnVtIHJlbmFtZV90eXBlIHJlbmFtZV90eXBlOworCQkJaWYgKHN0cmNtcChyZW4xX3NyYywgcmVuMl9zcmMpICE9IDApCisJCQkJZGllKCJyZW4xX3NyYyAhPSByZW4yX3NyYyIpOworCQkJcmVuMi0+ZHN0X2VudHJ5LT5wcm9jZXNzZWQgPSAxOworCQkJcmVuMi0+cHJvY2Vzc2VkID0gMTsKKwkJCWlmIChzdHJjbXAocmVuMV9kc3QsIHJlbjJfZHN0KSAhPSAwKSB7CisJCQkJcmVuYW1lX3R5cGUgPSBSRU5BTUVfT05FX0ZJTEVfVE9fVFdPOworCQkJCWNsZWFuX21lcmdlID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJcmVuYW1lX3R5cGUgPSBSRU5BTUVfT05FX0ZJTEVfVE9fT05FOworCQkJCS8qIEJVRzogV2Ugc2hvdWxkIG9ubHkgcmVtb3ZlIHJlbjFfc3JjIGluCisJCQkJICogdGhlIGJhc2Ugc3RhZ2UgKHRoaW5rIG9mIHJlbmFtZSArCisJCQkJICogYWRkLXNvdXJjZSBjYXNlcykuCisJCQkJICovCisJCQkJcmVtb3ZlX2ZpbGUobywgMSwgcmVuMV9zcmMsIDEpOworCQkJCXVwZGF0ZV9lbnRyeShyZW4xLT5kc3RfZW50cnksCisJCQkJCSAgICAgcmVuMS0+cGFpci0+b25lLAorCQkJCQkgICAgIHJlbjEtPnBhaXItPnR3bywKKwkJCQkJICAgICByZW4yLT5wYWlyLT50d28pOworCQkJfQorCQkJc2V0dXBfcmVuYW1lX2NvbmZsaWN0X2luZm8ocmVuYW1lX3R5cGUsCisJCQkJCQkgICByZW4xLT5wYWlyLAorCQkJCQkJICAgcmVuMi0+cGFpciwKKwkJCQkJCSAgIGJyYW5jaDEsCisJCQkJCQkgICBicmFuY2gyLAorCQkJCQkJICAgcmVuMS0+ZHN0X2VudHJ5LAorCQkJCQkJICAgcmVuMi0+ZHN0X2VudHJ5LAorCQkJCQkJICAgbywKKwkJCQkJCSAgIE5VTEwsCisJCQkJCQkgICBOVUxMKTsKKwkJfSBlbHNlIGlmICgobG9va3VwID0gc3RyaW5nX2xpc3RfbG9va3VwKHJlbmFtZXMyRHN0LCByZW4xX2RzdCkpKSB7CisJCQkvKiBUd28gZGlmZmVyZW50IGZpbGVzIHJlbmFtZWQgdG8gdGhlIHNhbWUgdGhpbmcgKi8KKwkJCWNoYXIgKnJlbjJfZHN0OworCQkJcmVuMiA9IGxvb2t1cC0+dXRpbDsKKwkJCXJlbjJfZHN0ID0gcmVuMi0+cGFpci0+dHdvLT5wYXRoOworCQkJaWYgKHN0cmNtcChyZW4xX2RzdCwgcmVuMl9kc3QpICE9IDApCisJCQkJZGllKCJyZW4xX2RzdCAhPSByZW4yX2RzdCIpOworCisJCQljbGVhbl9tZXJnZSA9IDA7CisJCQlyZW4yLT5wcm9jZXNzZWQgPSAxOworCQkJLyoKKwkJCSAqIEJVRzogV2Ugc2hvdWxkIG9ubHkgbWFyayBzcmNfZW50cnkgYXMgcHJvY2Vzc2VkCisJCQkgKiBpZiB3ZSBhcmUgbm90IGRlYWxpbmcgd2l0aCBhIHJlbmFtZSArIGFkZC1zb3VyY2UKKwkJCSAqIGNhc2UuCisJCQkgKi8KKwkJCXJlbjItPnNyY19lbnRyeS0+cHJvY2Vzc2VkID0gMTsKKworCQkJc2V0dXBfcmVuYW1lX2NvbmZsaWN0X2luZm8oUkVOQU1FX1RXT19GSUxFU19UT19PTkUsCisJCQkJCQkgICByZW4xLT5wYWlyLAorCQkJCQkJICAgcmVuMi0+cGFpciwKKwkJCQkJCSAgIGJyYW5jaDEsCisJCQkJCQkgICBicmFuY2gyLAorCQkJCQkJICAgcmVuMS0+ZHN0X2VudHJ5LAorCQkJCQkJICAgcmVuMi0+ZHN0X2VudHJ5LAorCQkJCQkJICAgbywKKwkJCQkJCSAgIHJlbjEtPnNyY19lbnRyeSwKKwkJCQkJCSAgIHJlbjItPnNyY19lbnRyeSk7CisKKwkJfSBlbHNlIHsKKwkJCS8qIFJlbmFtZWQgaW4gMSwgbWF5YmUgY2hhbmdlZCBpbiAyICovCisJCQkvKiB3ZSBvbmx5IHVzZSBzaGExIGFuZCBtb2RlIG9mIHRoZXNlICovCisJCQlzdHJ1Y3QgZGlmZl9maWxlc3BlYyBzcmNfb3RoZXIsIGRzdF9vdGhlcjsKKwkJCWludCB0cnlfbWVyZ2U7CisKKwkJCS8qCisJCQkgKiB1bnBhY2tfdHJlZXMgbG9hZHMgZW50cmllcyBmcm9tIGNvbW1vbi1jb21taXQKKwkJCSAqIGludG8gc3RhZ2UgMSwgZnJvbSBoZWFkLWNvbW1pdCBpbnRvIHN0YWdlIDIsIGFuZAorCQkJICogZnJvbSBtZXJnZS1jb21taXQgaW50byBzdGFnZSAzLiAgV2Uga2VlcCB0cmFjaworCQkJICogb2Ygd2hpY2ggc2lkZSBjb3JyZXNwb25kcyB0byB0aGUgcmVuYW1lLgorCQkJICovCisJCQlpbnQgcmVuYW1lZF9zdGFnZSA9IGFfcmVuYW1lcyA9PSByZW5hbWVzMSA/IDIgOiAzOworCQkJaW50IG90aGVyX3N0YWdlID0gICBhX3JlbmFtZXMgPT0gcmVuYW1lczEgPyAzIDogMjsKKworCQkJLyogQlVHOiBXZSBzaG91bGQgb25seSByZW1vdmUgcmVuMV9zcmMgaW4gdGhlIGJhc2UKKwkJCSAqIHN0YWdlIGFuZCBpbiBvdGhlcl9zdGFnZSAodGhpbmsgb2YgcmVuYW1lICsKKwkJCSAqIGFkZC1zb3VyY2UgY2FzZSkuCisJCQkgKi8KKwkJCXJlbW92ZV9maWxlKG8sIDEsIHJlbjFfc3JjLAorCQkJCSAgICByZW5hbWVkX3N0YWdlID09IDIgfHwgIXdhc190cmFja2VkKHJlbjFfc3JjKSk7CisKKwkJCWhhc2hjcHkoc3JjX290aGVyLnNoYTEsIHJlbjEtPnNyY19lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXS5zaGEpOworCQkJc3JjX290aGVyLm1vZGUgPSByZW4xLT5zcmNfZW50cnktPnN0YWdlc1tvdGhlcl9zdGFnZV0ubW9kZTsKKwkJCWhhc2hjcHkoZHN0X290aGVyLnNoYTEsIHJlbjEtPmRzdF9lbnRyeS0+c3RhZ2VzW290aGVyX3N0YWdlXS5zaGEpOworCQkJZHN0X290aGVyLm1vZGUgPSByZW4xLT5kc3RfZW50cnktPnN0YWdlc1tvdGhlcl9zdGFnZV0ubW9kZTsKKwkJCXRyeV9tZXJnZSA9IDA7CisKKwkJCWlmIChzaGFfZXEoc3JjX290aGVyLnNoYTEsIG51bGxfc2hhMSkpIHsKKwkJCQlzZXR1cF9yZW5hbWVfY29uZmxpY3RfaW5mbyhSRU5BTUVfREVMRVRFLAorCQkJCQkJCSAgIHJlbjEtPnBhaXIsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBicmFuY2gxLAorCQkJCQkJCSAgIGJyYW5jaDIsCisJCQkJCQkJICAgcmVuMS0+ZHN0X2VudHJ5LAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgbywKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIE5VTEwpOworCQkJfSBlbHNlIGlmICgoZHN0X290aGVyLm1vZGUgPT0gcmVuMS0+cGFpci0+dHdvLT5tb2RlKSAmJgorCQkJCSAgIHNoYV9lcShkc3Rfb3RoZXIuc2hhMSwgcmVuMS0+cGFpci0+dHdvLT5zaGExKSkgeworCQkJCS8qCisJCQkJICogQWRkZWQgZmlsZSBvbiB0aGUgb3RoZXIgc2lkZSBpZGVudGljYWwgdG8KKwkJCQkgKiB0aGUgZmlsZSBiZWluZyByZW5hbWVkOiBjbGVhbiBtZXJnZS4KKwkJCQkgKiBBbHNvLCB0aGVyZSBpcyBubyBuZWVkIHRvIG92ZXJ3cml0ZSB0aGUKKwkJCQkgKiBmaWxlIGFscmVhZHkgaW4gdGhlIHdvcmtpbmcgY29weSwgc28gY2FsbAorCQkJCSAqIHVwZGF0ZV9maWxlX2ZsYWdzKCkgaW5zdGVhZCBvZgorCQkJCSAqIHVwZGF0ZV9maWxlKCkuCisJCQkJICovCisJCQkJdXBkYXRlX2ZpbGVfZmxhZ3MobywKKwkJCQkJCSAgcmVuMS0+cGFpci0+dHdvLT5zaGExLAorCQkJCQkJICByZW4xLT5wYWlyLT50d28tPm1vZGUsCisJCQkJCQkgIHJlbjFfZHN0LAorCQkJCQkJICAxLCAvKiB1cGRhdGVfY2FjaGUgKi8KKwkJCQkJCSAgMCAgLyogdXBkYXRlX3dkICAgICovKTsKKwkJCX0gZWxzZSBpZiAoIXNoYV9lcShkc3Rfb3RoZXIuc2hhMSwgbnVsbF9zaGExKSkgeworCQkJCWNsZWFuX21lcmdlID0gMDsKKwkJCQl0cnlfbWVyZ2UgPSAxOworCQkJCW91dHB1dChvLCAxLCBfKCJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICIKKwkJCQkgICAgICAgIiVzIGFkZGVkIGluICVzIiksCisJCQkJICAgICAgIHJlbjFfc3JjLCByZW4xX2RzdCwgYnJhbmNoMSwKKwkJCQkgICAgICAgcmVuMV9kc3QsIGJyYW5jaDIpOworCQkJCWlmIChvLT5jYWxsX2RlcHRoKSB7CisJCQkJCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpOworCQkJCQltZmkgPSBtZXJnZV9maWxlX29uZShvLCByZW4xX2RzdCwgbnVsbF9zaGExLCAwLAorCQkJCQkJCSByZW4xLT5wYWlyLT50d28tPnNoYTEsIHJlbjEtPnBhaXItPnR3by0+bW9kZSwKKwkJCQkJCQkgZHN0X290aGVyLnNoYTEsIGRzdF9vdGhlci5tb2RlLAorCQkJCQkJCSBicmFuY2gxLCBicmFuY2gyKTsKKwkJCQkJb3V0cHV0KG8sIDEsIF8oIkFkZGluZyBtZXJnZWQgJXMiKSwgcmVuMV9kc3QpOworCQkJCQl1cGRhdGVfZmlsZShvLCAwLCBtZmkuc2hhLCBtZmkubW9kZSwgcmVuMV9kc3QpOworCQkJCQl0cnlfbWVyZ2UgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWNoYXIgKm5ld19wYXRoID0gdW5pcXVlX3BhdGgobywgcmVuMV9kc3QsIGJyYW5jaDIpOworCQkJCQlvdXRwdXQobywgMSwgXygiQWRkaW5nIGFzICVzIGluc3RlYWQiKSwgbmV3X3BhdGgpOworCQkJCQl1cGRhdGVfZmlsZShvLCAwLCBkc3Rfb3RoZXIuc2hhMSwgZHN0X290aGVyLm1vZGUsIG5ld19wYXRoKTsKKwkJCQkJZnJlZShuZXdfcGF0aCk7CisJCQkJfQorCQkJfSBlbHNlCisJCQkJdHJ5X21lcmdlID0gMTsKKworCQkJaWYgKHRyeV9tZXJnZSkgeworCQkJCXN0cnVjdCBkaWZmX2ZpbGVzcGVjICpvbmUsICphLCAqYjsKKwkJCQlzcmNfb3RoZXIucGF0aCA9IChjaGFyICopcmVuMV9zcmM7CisKKwkJCQlvbmUgPSByZW4xLT5wYWlyLT5vbmU7CisJCQkJaWYgKGFfcmVuYW1lcyA9PSByZW5hbWVzMSkgeworCQkJCQlhID0gcmVuMS0+cGFpci0+dHdvOworCQkJCQliID0gJnNyY19vdGhlcjsKKwkJCQl9IGVsc2UgeworCQkJCQliID0gcmVuMS0+cGFpci0+dHdvOworCQkJCQlhID0gJnNyY19vdGhlcjsKKwkJCQl9CisJCQkJdXBkYXRlX2VudHJ5KHJlbjEtPmRzdF9lbnRyeSwgb25lLCBhLCBiKTsKKwkJCQlzZXR1cF9yZW5hbWVfY29uZmxpY3RfaW5mbyhSRU5BTUVfTk9STUFMLAorCQkJCQkJCSAgIHJlbjEtPnBhaXIsCisJCQkJCQkJICAgTlVMTCwKKwkJCQkJCQkgICBicmFuY2gxLAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgcmVuMS0+ZHN0X2VudHJ5LAorCQkJCQkJCSAgIE5VTEwsCisJCQkJCQkJICAgbywKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgIE5VTEwpOworCQkJfQorCQl9CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZhX2J5X2RzdCwgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmJfYnlfZHN0LCAwKTsKKworCXJldHVybiBjbGVhbl9tZXJnZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgKnN0YWdlX3NoYShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGEsIHVuc2lnbmVkIG1vZGUpCit7CisJcmV0dXJuIChpc19udWxsX3NoYTEoc2hhKSB8fCBtb2RlID09IDApID8gTlVMTDogKHVuc2lnbmVkIGNoYXIgKilzaGE7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9zaGExX3N0cmJ1Zihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgc3RyYnVmICpkc3QpCit7CisJdm9pZCAqYnVmOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJYnVmID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIGVycm9yKF8oImNhbm5vdCByZWFkIG9iamVjdCAlcyIpLCBzaGExX3RvX2hleChzaGExKSk7CisJaWYgKHR5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZnJlZShidWYpOworCQlyZXR1cm4gZXJyb3IoXygib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiKSwgc2hhMV90b19oZXgoc2hhMSkpOworCX0KKwlzdHJidWZfYXR0YWNoKGRzdCwgYnVmLCBzaXplLCBzaXplICsgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmxvYl91bmNoYW5nZWQoY29uc3QgdW5zaWduZWQgY2hhciAqb19zaGEsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFfc2hhLAorCQkJICBpbnQgcmVub3JtYWxpemUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiBvID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBhID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7IC8qIGFzc3VtZSBjaGFuZ2VkIGZvciBzYWZldHkgKi8KKworCWlmIChzaGFfZXEob19zaGEsIGFfc2hhKSkKKwkJcmV0dXJuIDE7CisJaWYgKCFyZW5vcm1hbGl6ZSkKKwkJcmV0dXJuIDA7CisKKwlhc3NlcnQob19zaGEgJiYgYV9zaGEpOworCWlmIChyZWFkX3NoYTFfc3RyYnVmKG9fc2hhLCAmbykgfHwgcmVhZF9zaGExX3N0cmJ1ZihhX3NoYSwgJmEpKQorCQlnb3RvIGVycm9yX3JldHVybjsKKwkvKgorCSAqIE5vdGU6IGJpbmFyeSB8IGlzIHVzZWQgc28gdGhhdCBib3RoIHJlbm9ybWFsaXphdGlvbnMgYXJlCisJICogcGVyZm9ybWVkLiAgQ29tcGFyaXNvbiBjYW4gYmUgc2tpcHBlZCBpZiBib3RoIGZpbGVzIGFyZQorCSAqIHVuY2hhbmdlZCBzaW5jZSB0aGVpciBzaGExcyBoYXZlIGFscmVhZHkgYmVlbiBjb21wYXJlZC4KKwkgKi8KKwlpZiAocmVub3JtYWxpemVfYnVmZmVyKHBhdGgsIG8uYnVmLCBvLmxlbiwgJm8pIHwKKwkgICAgcmVub3JtYWxpemVfYnVmZmVyKHBhdGgsIGEuYnVmLCBhLmxlbiwgJmEpKQorCQlyZXQgPSAoby5sZW4gPT0gYS5sZW4gJiYgIW1lbWNtcChvLmJ1ZiwgYS5idWYsIG8ubGVuKSk7CisKK2Vycm9yX3JldHVybjoKKwlzdHJidWZfcmVsZWFzZSgmbyk7CisJc3RyYnVmX3JlbGVhc2UoJmEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9tb2RpZnlfZGVsZXRlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJCSBjb25zdCBjaGFyICpwYXRoLAorCQkJCSB1bnNpZ25lZCBjaGFyICpvX3NoYSwgaW50IG9fbW9kZSwKKwkJCQkgdW5zaWduZWQgY2hhciAqYV9zaGEsIGludCBhX21vZGUsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmJfc2hhLCBpbnQgYl9tb2RlKQoreworCWhhbmRsZV9jaGFuZ2VfZGVsZXRlKG8sCisJCQkgICAgIHBhdGgsCisJCQkgICAgIG9fc2hhLCBvX21vZGUsCisJCQkgICAgIGFfc2hhLCBhX21vZGUsCisJCQkgICAgIGJfc2hhLCBiX21vZGUsCisJCQkgICAgIF8oIm1vZGlmeSIpLCBfKCJtb2RpZmllZCIpKTsKK30KKworc3RhdGljIGludCBtZXJnZV9jb250ZW50KHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkJIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgdW5zaWduZWQgY2hhciAqb19zaGEsIGludCBvX21vZGUsCisJCQkgdW5zaWduZWQgY2hhciAqYV9zaGEsIGludCBhX21vZGUsCisJCQkgdW5zaWduZWQgY2hhciAqYl9zaGEsIGludCBiX21vZGUsCisJCQkgc3RydWN0IHJlbmFtZV9jb25mbGljdF9pbmZvICpyZW5hbWVfY29uZmxpY3RfaW5mbykKK3sKKwljb25zdCBjaGFyICpyZWFzb24gPSBfKCJjb250ZW50Iik7CisJY29uc3QgY2hhciAqcGF0aDEgPSBOVUxMLCAqcGF0aDIgPSBOVUxMOworCXN0cnVjdCBtZXJnZV9maWxlX2luZm8gbWZpOworCXN0cnVjdCBkaWZmX2ZpbGVzcGVjIG9uZSwgYSwgYjsKKwl1bnNpZ25lZCBkZl9jb25mbGljdF9yZW1haW5zID0gMDsKKworCWlmICghb19zaGEpIHsKKwkJcmVhc29uID0gXygiYWRkL2FkZCIpOworCQlvX3NoYSA9ICh1bnNpZ25lZCBjaGFyICopbnVsbF9zaGExOworCX0KKwlvbmUucGF0aCA9IGEucGF0aCA9IGIucGF0aCA9IChjaGFyICopcGF0aDsKKwloYXNoY3B5KG9uZS5zaGExLCBvX3NoYSk7CisJb25lLm1vZGUgPSBvX21vZGU7CisJaGFzaGNweShhLnNoYTEsIGFfc2hhKTsKKwlhLm1vZGUgPSBhX21vZGU7CisJaGFzaGNweShiLnNoYTEsIGJfc2hhKTsKKwliLm1vZGUgPSBiX21vZGU7CisKKwlpZiAocmVuYW1lX2NvbmZsaWN0X2luZm8pIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnBhaXIxID0gcmVuYW1lX2NvbmZsaWN0X2luZm8tPnBhaXIxOworCisJCXBhdGgxID0gKG8tPmJyYW5jaDEgPT0gcmVuYW1lX2NvbmZsaWN0X2luZm8tPmJyYW5jaDEpID8KKwkJCXBhaXIxLT50d28tPnBhdGggOiBwYWlyMS0+b25lLT5wYXRoOworCQkvKiBJZiByZW5hbWVfY29uZmxpY3RfaW5mby0+cGFpcjIgIT0gTlVMTCwgd2UgYXJlIGluCisJCSAqIFJFTkFNRV9PTkVfRklMRV9UT19PTkUgY2FzZS4gIE90aGVyd2lzZSwgd2UgaGF2ZSBhCisJCSAqIG5vcm1hbCByZW5hbWUuCisJCSAqLworCQlwYXRoMiA9IChyZW5hbWVfY29uZmxpY3RfaW5mby0+cGFpcjIgfHwKKwkJCSBvLT5icmFuY2gyID09IHJlbmFtZV9jb25mbGljdF9pbmZvLT5icmFuY2gxKSA/CisJCQlwYWlyMS0+dHdvLT5wYXRoIDogcGFpcjEtPm9uZS0+cGF0aDsKKworCQlpZiAoZGlyX2luX3dheShwYXRoLCAhby0+Y2FsbF9kZXB0aCkpCisJCQlkZl9jb25mbGljdF9yZW1haW5zID0gMTsKKwl9CisJbWZpID0gbWVyZ2VfZmlsZV9zcGVjaWFsX21hcmtlcnMobywgJm9uZSwgJmEsICZiLAorCQkJCQkgby0+YnJhbmNoMSwgcGF0aDEsCisJCQkJCSBvLT5icmFuY2gyLCBwYXRoMik7CisKKwlpZiAobWZpLmNsZWFuICYmICFkZl9jb25mbGljdF9yZW1haW5zICYmCisJICAgIHNoYV9lcShtZmkuc2hhLCBhX3NoYSkgJiYgbWZpLm1vZGUgPT0gYV9tb2RlKSB7CisJCWludCBwYXRoX3JlbmFtZWRfb3V0c2lkZV9IRUFEOworCQlvdXRwdXQobywgMywgXygiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIiksIHBhdGgpOworCQkvKgorCQkgKiBUaGUgY29udGVudCBtZXJnZSByZXN1bHRlZCBpbiB0aGUgc2FtZSBmaWxlIGNvbnRlbnRzIHdlCisJCSAqIGFscmVhZHkgaGFkLiAgV2UgY2FuIHJldHVybiBlYXJseSBpZiB0aG9zZSBmaWxlIGNvbnRlbnRzCisJCSAqIGFyZSByZWNvcmRlZCBhdCB0aGUgY29ycmVjdCBwYXRoICh3aGljaCBtYXkgbm90IGJlIHRydWUKKwkJICogaWYgdGhlIG1lcmdlIGludm9sdmVzIGEgcmVuYW1lKS4KKwkJICovCisJCXBhdGhfcmVuYW1lZF9vdXRzaWRlX0hFQUQgPSAhcGF0aDIgfHwgIXN0cmNtcChwYXRoLCBwYXRoMik7CisJCWlmICghcGF0aF9yZW5hbWVkX291dHNpZGVfSEVBRCkgeworCQkJYWRkX2NhY2hlaW5mbyhtZmkubW9kZSwgbWZpLnNoYSwgcGF0aCwKKwkJCQkgICAgICAwLCAoIW8tPmNhbGxfZGVwdGgpLCAwKTsKKwkJCXJldHVybiBtZmkuY2xlYW47CisJCX0KKwl9IGVsc2UKKwkJb3V0cHV0KG8sIDIsIF8oIkF1dG8tbWVyZ2luZyAlcyIpLCBwYXRoKTsKKworCWlmICghbWZpLmNsZWFuKSB7CisJCWlmIChTX0lTR0lUTElOSyhtZmkubW9kZSkpCisJCQlyZWFzb24gPSBfKCJzdWJtb2R1bGUiKTsKKwkJb3V0cHV0KG8sIDEsIF8oIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIiksCisJCQkJcmVhc29uLCBwYXRoKTsKKwkJaWYgKHJlbmFtZV9jb25mbGljdF9pbmZvICYmICFkZl9jb25mbGljdF9yZW1haW5zKQorCQkJdXBkYXRlX3N0YWdlcyhwYXRoLCAmb25lLCAmYSwgJmIpOworCX0KKworCWlmIChkZl9jb25mbGljdF9yZW1haW5zKSB7CisJCWNoYXIgKm5ld19wYXRoOworCQlpZiAoby0+Y2FsbF9kZXB0aCkgeworCQkJcmVtb3ZlX2ZpbGVfZnJvbV9jYWNoZShwYXRoKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghbWZpLmNsZWFuKQorCQkJCXVwZGF0ZV9zdGFnZXMocGF0aCwgJm9uZSwgJmEsICZiKTsKKwkJCWVsc2UgeworCQkJCWludCBmaWxlX2Zyb21fc3RhZ2UyID0gd2FzX3RyYWNrZWQocGF0aCk7CisJCQkJc3RydWN0IGRpZmZfZmlsZXNwZWMgbWVyZ2VkOworCQkJCWhhc2hjcHkobWVyZ2VkLnNoYTEsIG1maS5zaGEpOworCQkJCW1lcmdlZC5tb2RlID0gbWZpLm1vZGU7CisKKwkJCQl1cGRhdGVfc3RhZ2VzKHBhdGgsIE5VTEwsCisJCQkJCSAgICAgIGZpbGVfZnJvbV9zdGFnZTIgPyAmbWVyZ2VkIDogTlVMTCwKKwkJCQkJICAgICAgZmlsZV9mcm9tX3N0YWdlMiA/IE5VTEwgOiAmbWVyZ2VkKTsKKwkJCX0KKworCQl9CisJCW5ld19wYXRoID0gdW5pcXVlX3BhdGgobywgcGF0aCwgcmVuYW1lX2NvbmZsaWN0X2luZm8tPmJyYW5jaDEpOworCQlvdXRwdXQobywgMSwgXygiQWRkaW5nIGFzICVzIGluc3RlYWQiKSwgbmV3X3BhdGgpOworCQl1cGRhdGVfZmlsZShvLCAwLCBtZmkuc2hhLCBtZmkubW9kZSwgbmV3X3BhdGgpOworCQlmcmVlKG5ld19wYXRoKTsKKwkJbWZpLmNsZWFuID0gMDsKKwl9IGVsc2UgeworCQl1cGRhdGVfZmlsZShvLCBtZmkuY2xlYW4sIG1maS5zaGEsIG1maS5tb2RlLCBwYXRoKTsKKwl9CisJcmV0dXJuIG1maS5jbGVhbjsKKworfQorCisvKiBQZXIgZW50cnkgbWVyZ2UgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgcHJvY2Vzc19lbnRyeShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCSBjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZW50cnkpCit7CisJaW50IGNsZWFuX21lcmdlID0gMTsKKwlpbnQgbm9ybWFsaXplID0gby0+cmVub3JtYWxpemU7CisJdW5zaWduZWQgb19tb2RlID0gZW50cnktPnN0YWdlc1sxXS5tb2RlOworCXVuc2lnbmVkIGFfbW9kZSA9IGVudHJ5LT5zdGFnZXNbMl0ubW9kZTsKKwl1bnNpZ25lZCBiX21vZGUgPSBlbnRyeS0+c3RhZ2VzWzNdLm1vZGU7CisJdW5zaWduZWQgY2hhciAqb19zaGEgPSBzdGFnZV9zaGEoZW50cnktPnN0YWdlc1sxXS5zaGEsIG9fbW9kZSk7CisJdW5zaWduZWQgY2hhciAqYV9zaGEgPSBzdGFnZV9zaGEoZW50cnktPnN0YWdlc1syXS5zaGEsIGFfbW9kZSk7CisJdW5zaWduZWQgY2hhciAqYl9zaGEgPSBzdGFnZV9zaGEoZW50cnktPnN0YWdlc1szXS5zaGEsIGJfbW9kZSk7CisKKwllbnRyeS0+cHJvY2Vzc2VkID0gMTsKKwlpZiAoZW50cnktPnJlbmFtZV9jb25mbGljdF9pbmZvKSB7CisJCXN0cnVjdCByZW5hbWVfY29uZmxpY3RfaW5mbyAqY29uZmxpY3RfaW5mbyA9IGVudHJ5LT5yZW5hbWVfY29uZmxpY3RfaW5mbzsKKwkJc3dpdGNoIChjb25mbGljdF9pbmZvLT5yZW5hbWVfdHlwZSkgeworCQljYXNlIFJFTkFNRV9OT1JNQUw6CisJCWNhc2UgUkVOQU1FX09ORV9GSUxFX1RPX09ORToKKwkJCWNsZWFuX21lcmdlID0gbWVyZ2VfY29udGVudChvLCBwYXRoLAorCQkJCQkJICAgIG9fc2hhLCBvX21vZGUsIGFfc2hhLCBhX21vZGUsIGJfc2hhLCBiX21vZGUsCisJCQkJCQkgICAgY29uZmxpY3RfaW5mbyk7CisJCQlicmVhazsKKwkJY2FzZSBSRU5BTUVfREVMRVRFOgorCQkJY2xlYW5fbWVyZ2UgPSAwOworCQkJY29uZmxpY3RfcmVuYW1lX2RlbGV0ZShvLCBjb25mbGljdF9pbmZvLT5wYWlyMSwKKwkJCQkJICAgICAgIGNvbmZsaWN0X2luZm8tPmJyYW5jaDEsCisJCQkJCSAgICAgICBjb25mbGljdF9pbmZvLT5icmFuY2gyKTsKKwkJCWJyZWFrOworCQljYXNlIFJFTkFNRV9PTkVfRklMRV9UT19UV086CisJCQljbGVhbl9tZXJnZSA9IDA7CisJCQljb25mbGljdF9yZW5hbWVfcmVuYW1lXzF0bzIobywgY29uZmxpY3RfaW5mbyk7CisJCQlicmVhazsKKwkJY2FzZSBSRU5BTUVfVFdPX0ZJTEVTX1RPX09ORToKKwkJCWNsZWFuX21lcmdlID0gMDsKKwkJCWNvbmZsaWN0X3JlbmFtZV9yZW5hbWVfMnRvMShvLCBjb25mbGljdF9pbmZvKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZW50cnktPnByb2Nlc3NlZCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSBpZiAob19zaGEgJiYgKCFhX3NoYSB8fCAhYl9zaGEpKSB7CisJCS8qIENhc2UgQTogRGVsZXRlZCBpbiBvbmUgKi8KKwkJaWYgKCghYV9zaGEgJiYgIWJfc2hhKSB8fAorCQkgICAgKCFiX3NoYSAmJiBibG9iX3VuY2hhbmdlZChvX3NoYSwgYV9zaGEsIG5vcm1hbGl6ZSwgcGF0aCkpIHx8CisJCSAgICAoIWFfc2hhICYmIGJsb2JfdW5jaGFuZ2VkKG9fc2hhLCBiX3NoYSwgbm9ybWFsaXplLCBwYXRoKSkpIHsKKwkJCS8qIERlbGV0ZWQgaW4gYm90aCBvciBkZWxldGVkIGluIG9uZSBhbmQKKwkJCSAqIHVuY2hhbmdlZCBpbiB0aGUgb3RoZXIgKi8KKwkJCWlmIChhX3NoYSkKKwkJCQlvdXRwdXQobywgMiwgXygiUmVtb3ZpbmcgJXMiKSwgcGF0aCk7CisJCQkvKiBkbyBub3QgdG91Y2ggd29ya2luZyBmaWxlIGlmIGl0IGRpZCBub3QgZXhpc3QgKi8KKwkJCXJlbW92ZV9maWxlKG8sIDEsIHBhdGgsICFhX3NoYSk7CisJCX0gZWxzZSB7CisJCQkvKiBNb2RpZnkvZGVsZXRlOyBkZWxldGVkIHNpZGUgbWF5IGhhdmUgcHV0IGEgZGlyZWN0b3J5IGluIHRoZSB3YXkgKi8KKwkJCWNsZWFuX21lcmdlID0gMDsKKwkJCWhhbmRsZV9tb2RpZnlfZGVsZXRlKG8sIHBhdGgsIG9fc2hhLCBvX21vZGUsCisJCQkJCSAgICAgYV9zaGEsIGFfbW9kZSwgYl9zaGEsIGJfbW9kZSk7CisJCX0KKwl9IGVsc2UgaWYgKCghb19zaGEgJiYgYV9zaGEgJiYgIWJfc2hhKSB8fAorCQkgICAoIW9fc2hhICYmICFhX3NoYSAmJiBiX3NoYSkpIHsKKwkJLyogQ2FzZSBCOiBBZGRlZCBpbiBvbmUuICovCisJCS8qIFtub3RoaW5nfGRpcmVjdG9yeV0gLT4gKFtub3RoaW5nfGRpcmVjdG9yeV0sIGZpbGUpICovCisKKwkJY29uc3QgY2hhciAqYWRkX2JyYW5jaDsKKwkJY29uc3QgY2hhciAqb3RoZXJfYnJhbmNoOworCQl1bnNpZ25lZCBtb2RlOworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGE7CisJCWNvbnN0IGNoYXIgKmNvbmY7CisKKwkJaWYgKGFfc2hhKSB7CisJCQlhZGRfYnJhbmNoID0gby0+YnJhbmNoMTsKKwkJCW90aGVyX2JyYW5jaCA9IG8tPmJyYW5jaDI7CisJCQltb2RlID0gYV9tb2RlOworCQkJc2hhID0gYV9zaGE7CisJCQljb25mID0gXygiZmlsZS9kaXJlY3RvcnkiKTsKKwkJfSBlbHNlIHsKKwkJCWFkZF9icmFuY2ggPSBvLT5icmFuY2gyOworCQkJb3RoZXJfYnJhbmNoID0gby0+YnJhbmNoMTsKKwkJCW1vZGUgPSBiX21vZGU7CisJCQlzaGEgPSBiX3NoYTsKKwkJCWNvbmYgPSBfKCJkaXJlY3RvcnkvZmlsZSIpOworCQl9CisJCWlmIChkaXJfaW5fd2F5KHBhdGgsICFvLT5jYWxsX2RlcHRoKSkgeworCQkJY2hhciAqbmV3X3BhdGggPSB1bmlxdWVfcGF0aChvLCBwYXRoLCBhZGRfYnJhbmNoKTsKKwkJCWNsZWFuX21lcmdlID0gMDsKKwkJCW91dHB1dChvLCAxLCBfKCJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuICIKKwkJCSAgICAgICAiQWRkaW5nICVzIGFzICVzIiksCisJCQkgICAgICAgY29uZiwgcGF0aCwgb3RoZXJfYnJhbmNoLCBwYXRoLCBuZXdfcGF0aCk7CisJCQlpZiAoby0+Y2FsbF9kZXB0aCkKKwkJCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOworCQkJdXBkYXRlX2ZpbGUobywgMCwgc2hhLCBtb2RlLCBuZXdfcGF0aCk7CisJCQlpZiAoby0+Y2FsbF9kZXB0aCkKKwkJCQlyZW1vdmVfZmlsZV9mcm9tX2NhY2hlKHBhdGgpOworCQkJZnJlZShuZXdfcGF0aCk7CisJCX0gZWxzZSB7CisJCQlvdXRwdXQobywgMiwgXygiQWRkaW5nICVzIiksIHBhdGgpOworCQkJLyogZG8gbm90IG92ZXJ3cml0ZSBmaWxlIGlmIGFscmVhZHkgcHJlc2VudCAqLworCQkJdXBkYXRlX2ZpbGVfZmxhZ3Mobywgc2hhLCBtb2RlLCBwYXRoLCAxLCAhYV9zaGEpOworCQl9CisJfSBlbHNlIGlmIChhX3NoYSAmJiBiX3NoYSkgeworCQkvKiBDYXNlIEM6IEFkZGVkIGluIGJvdGggKGNoZWNrIGZvciBzYW1lIHBlcm1pc3Npb25zKSBhbmQgKi8KKwkJLyogY2FzZSBEOiBNb2RpZmllZCBpbiBib3RoLCBidXQgZGlmZmVyZW50bHkuICovCisJCWNsZWFuX21lcmdlID0gbWVyZ2VfY29udGVudChvLCBwYXRoLAorCQkJCQkgICAgb19zaGEsIG9fbW9kZSwgYV9zaGEsIGFfbW9kZSwgYl9zaGEsIGJfbW9kZSwKKwkJCQkJICAgIE5VTEwpOworCX0gZWxzZSBpZiAoIW9fc2hhICYmICFhX3NoYSAmJiAhYl9zaGEpIHsKKwkJLyoKKwkJICogdGhpcyBlbnRyeSB3YXMgZGVsZXRlZCBhbHRvZ2V0aGVyLiBhX21vZGUgPT0gMCBtZWFucworCQkgKiB3ZSBoYWQgdGhhdCBwYXRoIGFuZCB3YW50IHRvIGFjdGl2ZWx5IHJlbW92ZSBpdC4KKwkJICovCisJCXJlbW92ZV9maWxlKG8sIDEsIHBhdGgsICFhX21vZGUpOworCX0gZWxzZQorCQlkaWUoXygiRmF0YWwgbWVyZ2UgZmFpbHVyZSwgc2hvdWxkbid0IGhhcHBlbi4iKSk7CisKKwlyZXR1cm4gY2xlYW5fbWVyZ2U7Cit9CisKK2ludCBtZXJnZV90cmVlcyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJc3RydWN0IHRyZWUgKmhlYWQsCisJCXN0cnVjdCB0cmVlICptZXJnZSwKKwkJc3RydWN0IHRyZWUgKmNvbW1vbiwKKwkJc3RydWN0IHRyZWUgKipyZXN1bHQpCit7CisJaW50IGNvZGUsIGNsZWFuOworCisJaWYgKG8tPnN1YnRyZWVfc2hpZnQpIHsKKwkJbWVyZ2UgPSBzaGlmdF90cmVlX29iamVjdChoZWFkLCBtZXJnZSwgby0+c3VidHJlZV9zaGlmdCk7CisJCWNvbW1vbiA9IHNoaWZ0X3RyZWVfb2JqZWN0KGhlYWQsIGNvbW1vbiwgby0+c3VidHJlZV9zaGlmdCk7CisJfQorCisJaWYgKHNoYV9lcShjb21tb24tPm9iamVjdC5zaGExLCBtZXJnZS0+b2JqZWN0LnNoYTEpKSB7CisJCW91dHB1dChvLCAwLCBfKCJBbHJlYWR5IHVwLXRvLWRhdGUhIikpOworCQkqcmVzdWx0ID0gaGVhZDsKKwkJcmV0dXJuIDE7CisJfQorCisJY29kZSA9IGdpdF9tZXJnZV90cmVlcyhvLT5jYWxsX2RlcHRoLCBjb21tb24sIGhlYWQsIG1lcmdlKTsKKworCWlmIChjb2RlICE9IDApIHsKKwkJaWYgKHNob3cobywgNCkgfHwgby0+Y2FsbF9kZXB0aCkKKwkJCWRpZShfKCJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiKSwKKwkJCSAgICBzaGExX3RvX2hleChoZWFkLT5vYmplY3Quc2hhMSksCisJCQkgICAgc2hhMV90b19oZXgobWVyZ2UtPm9iamVjdC5zaGExKSk7CisJCWVsc2UKKwkJCWV4aXQoMTI4KTsKKwl9CisKKwlpZiAodW5tZXJnZWRfY2FjaGUoKSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmVudHJpZXMsICpyZV9oZWFkLCAqcmVfbWVyZ2U7CisJCWludCBpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmby0+Y3VycmVudF9maWxlX3NldCwgMSk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZvLT5jdXJyZW50X2RpcmVjdG9yeV9zZXQsIDEpOworCQlnZXRfZmlsZXNfZGlycyhvLCBoZWFkKTsKKwkJZ2V0X2ZpbGVzX2RpcnMobywgbWVyZ2UpOworCisJCWVudHJpZXMgPSBnZXRfdW5tZXJnZWQoKTsKKwkJcmVjb3JkX2RmX2NvbmZsaWN0X2ZpbGVzKG8sIGVudHJpZXMpOworCQlyZV9oZWFkICA9IGdldF9yZW5hbWVzKG8sIGhlYWQsIGNvbW1vbiwgaGVhZCwgbWVyZ2UsIGVudHJpZXMpOworCQlyZV9tZXJnZSA9IGdldF9yZW5hbWVzKG8sIG1lcmdlLCBjb21tb24sIGhlYWQsIG1lcmdlLCBlbnRyaWVzKTsKKwkJY2xlYW4gPSBwcm9jZXNzX3JlbmFtZXMobywgcmVfaGVhZCwgcmVfbWVyZ2UpOworCQlmb3IgKGkgPSBlbnRyaWVzLT5uci0xOyAwIDw9IGk7IGktLSkgeworCQkJY29uc3QgY2hhciAqcGF0aCA9IGVudHJpZXMtPml0ZW1zW2ldLnN0cmluZzsKKwkJCXN0cnVjdCBzdGFnZV9kYXRhICplID0gZW50cmllcy0+aXRlbXNbaV0udXRpbDsKKwkJCWlmICghZS0+cHJvY2Vzc2VkCisJCQkJJiYgIXByb2Nlc3NfZW50cnkobywgcGF0aCwgZSkpCisJCQkJY2xlYW4gPSAwOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzLT5ucjsgaSsrKSB7CisJCQlzdHJ1Y3Qgc3RhZ2VfZGF0YSAqZSA9IGVudHJpZXMtPml0ZW1zW2ldLnV0aWw7CisJCQlpZiAoIWUtPnByb2Nlc3NlZCkKKwkJCQlkaWUoXygiVW5wcm9jZXNzZWQgcGF0aD8/PyAlcyIpLAorCQkJCSAgICBlbnRyaWVzLT5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisKKwkJc3RyaW5nX2xpc3RfY2xlYXIocmVfbWVyZ2UsIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcihyZV9oZWFkLCAwKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoZW50cmllcywgMSk7CisKKwkJZnJlZShyZV9tZXJnZSk7CisJCWZyZWUocmVfaGVhZCk7CisJCWZyZWUoZW50cmllcyk7CisJfQorCWVsc2UKKwkJY2xlYW4gPSAxOworCisJaWYgKG8tPmNhbGxfZGVwdGgpCisJCSpyZXN1bHQgPSB3cml0ZV90cmVlX2Zyb21fbWVtb3J5KG8pOworCisJcmV0dXJuIGNsZWFuOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpyZXZlcnNlX2NvbW1pdF9saXN0KHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5leHQgPSBOVUxMLCAqY3VycmVudCwgKmJhY2t1cDsKKwlmb3IgKGN1cnJlbnQgPSBsaXN0OyBjdXJyZW50OyBjdXJyZW50ID0gYmFja3VwKSB7CisJCWJhY2t1cCA9IGN1cnJlbnQtPm5leHQ7CisJCWN1cnJlbnQtPm5leHQgPSBuZXh0OworCQluZXh0ID0gY3VycmVudDsKKwl9CisJcmV0dXJuIG5leHQ7Cit9CisKKy8qCisgKiBNZXJnZSB0aGUgY29tbWl0cyBoMSBhbmQgaDIsIHJldHVybiB0aGUgcmVzdWx0aW5nIHZpcnR1YWwKKyAqIGNvbW1pdCBvYmplY3QgYW5kIGEgZmxhZyBpbmRpY2F0aW5nIHRoZSBjbGVhbm5lc3Mgb2YgdGhlIG1lcmdlLgorICovCitpbnQgbWVyZ2VfcmVjdXJzaXZlKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQkgICAgc3RydWN0IGNvbW1pdCAqaDEsCisJCSAgICBzdHJ1Y3QgY29tbWl0ICpoMiwKKwkJICAgIHN0cnVjdCBjb21taXRfbGlzdCAqY2EsCisJCSAgICBzdHJ1Y3QgY29tbWl0ICoqcmVzdWx0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqaXRlcjsKKwlzdHJ1Y3QgY29tbWl0ICptZXJnZWRfY29tbW9uX2FuY2VzdG9yczsKKwlzdHJ1Y3QgdHJlZSAqbXJ0cmVlID0gbXJ0cmVlOworCWludCBjbGVhbjsKKworCWlmIChzaG93KG8sIDQpKSB7CisJCW91dHB1dChvLCA0LCBfKCJNZXJnaW5nOiIpKTsKKwkJb3V0cHV0X2NvbW1pdF90aXRsZShvLCBoMSk7CisJCW91dHB1dF9jb21taXRfdGl0bGUobywgaDIpOworCX0KKworCWlmICghY2EpIHsKKwkJY2EgPSBnZXRfbWVyZ2VfYmFzZXMoaDEsIGgyKTsKKwkJY2EgPSByZXZlcnNlX2NvbW1pdF9saXN0KGNhKTsKKwl9CisKKwlpZiAoc2hvdyhvLCA1KSkgeworCQl1bnNpZ25lZCBjbnQgPSBjb21taXRfbGlzdF9jb3VudChjYSk7CisKKwkJb3V0cHV0KG8sIDUsIFFfKCJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IiwKKwkJCQkiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiLCBjbnQpLCBjbnQpOworCQlmb3IgKGl0ZXIgPSBjYTsgaXRlcjsgaXRlciA9IGl0ZXItPm5leHQpCisJCQlvdXRwdXRfY29tbWl0X3RpdGxlKG8sIGl0ZXItPml0ZW0pOworCX0KKworCW1lcmdlZF9jb21tb25fYW5jZXN0b3JzID0gcG9wX2NvbW1pdCgmY2EpOworCWlmIChtZXJnZWRfY29tbW9uX2FuY2VzdG9ycyA9PSBOVUxMKSB7CisJCS8qIGlmIHRoZXJlIGlzIG5vIGNvbW1vbiBhbmNlc3RvciwgdXNlIGFuIGVtcHR5IHRyZWUgKi8KKwkJc3RydWN0IHRyZWUgKnRyZWU7CisKKwkJdHJlZSA9IGxvb2t1cF90cmVlKEVNUFRZX1RSRUVfU0hBMV9CSU4pOworCQltZXJnZWRfY29tbW9uX2FuY2VzdG9ycyA9IG1ha2VfdmlydHVhbF9jb21taXQodHJlZSwgImFuY2VzdG9yIik7CisJfQorCisJZm9yIChpdGVyID0gY2E7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5uZXh0KSB7CisJCWNvbnN0IGNoYXIgKnNhdmVkX2IxLCAqc2F2ZWRfYjI7CisJCW8tPmNhbGxfZGVwdGgrKzsKKwkJLyoKKwkJICogV2hlbiB0aGUgbWVyZ2UgZmFpbHMsIHRoZSByZXN1bHQgY29udGFpbnMgZmlsZXMKKwkJICogd2l0aCBjb25mbGljdCBtYXJrZXJzLiBUaGUgY2xlYW5uZXNzIGZsYWcgaXMKKwkJICogaWdub3JlZCwgaXQgd2FzIG5ldmVyIGFjdHVhbGx5IHVzZWQsIGFzIHJlc3VsdCBvZgorCQkgKiBtZXJnZV90cmVlcyBoYXMgYWx3YXlzIG92ZXJ3cml0dGVuIGl0OiB0aGUgY29tbWl0dGVkCisJCSAqICJjb25mbGljdHMiIHdlcmUgYWxyZWFkeSByZXNvbHZlZC4KKwkJICovCisJCWRpc2NhcmRfY2FjaGUoKTsKKwkJc2F2ZWRfYjEgPSBvLT5icmFuY2gxOworCQlzYXZlZF9iMiA9IG8tPmJyYW5jaDI7CisJCW8tPmJyYW5jaDEgPSAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxIjsKKwkJby0+YnJhbmNoMiA9ICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIiOworCQltZXJnZV9yZWN1cnNpdmUobywgbWVyZ2VkX2NvbW1vbl9hbmNlc3RvcnMsIGl0ZXItPml0ZW0sCisJCQkJTlVMTCwgJm1lcmdlZF9jb21tb25fYW5jZXN0b3JzKTsKKwkJby0+YnJhbmNoMSA9IHNhdmVkX2IxOworCQlvLT5icmFuY2gyID0gc2F2ZWRfYjI7CisJCW8tPmNhbGxfZGVwdGgtLTsKKworCQlpZiAoIW1lcmdlZF9jb21tb25fYW5jZXN0b3JzKQorCQkJZGllKF8oIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIpKTsKKwl9CisKKwlkaXNjYXJkX2NhY2hlKCk7CisJaWYgKCFvLT5jYWxsX2RlcHRoKQorCQlyZWFkX2NhY2hlKCk7CisKKwlvLT5hbmNlc3RvciA9ICJtZXJnZWQgY29tbW9uIGFuY2VzdG9ycyI7CisJY2xlYW4gPSBtZXJnZV90cmVlcyhvLCBoMS0+dHJlZSwgaDItPnRyZWUsIG1lcmdlZF9jb21tb25fYW5jZXN0b3JzLT50cmVlLAorCQkJICAgICZtcnRyZWUpOworCisJaWYgKG8tPmNhbGxfZGVwdGgpIHsKKwkJKnJlc3VsdCA9IG1ha2VfdmlydHVhbF9jb21taXQobXJ0cmVlLCAibWVyZ2VkIHRyZWUiKTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGgxLCAmKCpyZXN1bHQpLT5wYXJlbnRzKTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGgyLCAmKCpyZXN1bHQpLT5wYXJlbnRzLT5uZXh0KTsKKwl9CisJZmx1c2hfb3V0cHV0KG8pOworCWlmIChzaG93KG8sIDIpKQorCQlkaWZmX3dhcm5fcmVuYW1lX2xpbWl0KCJtZXJnZS5yZW5hbWVsaW1pdCIsCisJCQkJICAgICAgIG8tPm5lZWRlZF9yZW5hbWVfbGltaXQsIDApOworCXJldHVybiBjbGVhbjsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9yZWYoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisKKwlvYmplY3QgPSBkZXJlZl90YWcocGFyc2Vfb2JqZWN0KHNoYTEpLCBuYW1lLCBzdHJsZW4obmFtZSkpOworCWlmICghb2JqZWN0KQorCQlyZXR1cm4gTlVMTDsKKwlpZiAob2JqZWN0LT50eXBlID09IE9CSl9UUkVFKQorCQlyZXR1cm4gbWFrZV92aXJ0dWFsX2NvbW1pdCgoc3RydWN0IHRyZWUqKW9iamVjdCwgbmFtZSk7CisJaWYgKG9iamVjdC0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAocGFyc2VfY29tbWl0KChzdHJ1Y3QgY29tbWl0ICopb2JqZWN0KSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIChzdHJ1Y3QgY29tbWl0ICopb2JqZWN0OworfQorCitpbnQgbWVyZ2VfcmVjdXJzaXZlX2dlbmVyaWMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZCwKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptZXJnZSwKKwkJCSAgICBpbnQgbnVtX2Jhc2VfbGlzdCwKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqYmFzZV9saXN0LAorCQkJICAgIHN0cnVjdCBjb21taXQgKipyZXN1bHQpCit7CisJaW50IGNsZWFuOworCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2sgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbG9ja19maWxlKSk7CisJc3RydWN0IGNvbW1pdCAqaGVhZF9jb21taXQgPSBnZXRfcmVmKGhlYWQsIG8tPmJyYW5jaDEpOworCXN0cnVjdCBjb21taXQgKm5leHRfY29tbWl0ID0gZ2V0X3JlZihtZXJnZSwgby0+YnJhbmNoMik7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjYSA9IE5VTEw7CisKKwlpZiAoYmFzZV9saXN0KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2Jhc2VfbGlzdDsgKytpKSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpiYXNlOworCQkJaWYgKCEoYmFzZSA9IGdldF9yZWYoYmFzZV9saXN0W2ldLCBzaGExX3RvX2hleChiYXNlX2xpc3RbaV0pKSkpCisJCQkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJyIpLAorCQkJCQlzaGExX3RvX2hleChiYXNlX2xpc3RbaV0pKTsKKwkJCWNvbW1pdF9saXN0X2luc2VydChiYXNlLCAmY2EpOworCQl9CisJfQorCisJaG9sZF9sb2NrZWRfaW5kZXgobG9jaywgMSk7CisJY2xlYW4gPSBtZXJnZV9yZWN1cnNpdmUobywgaGVhZF9jb21taXQsIG5leHRfY29tbWl0LCBjYSwKKwkJCXJlc3VsdCk7CisJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkICYmCisJICAgIHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCBsb2NrLCBDT01NSVRfTE9DSykpCisJCXJldHVybiBlcnJvcihfKCJVbmFibGUgdG8gd3JpdGUgaW5kZXguIikpOworCisJcmV0dXJuIGNsZWFuID8gMCA6IDE7Cit9CisKK3N0YXRpYyB2b2lkIG1lcmdlX3JlY3Vyc2l2ZV9jb25maWcoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8pCit7CisJZ2l0X2NvbmZpZ19nZXRfaW50KCJtZXJnZS52ZXJib3NpdHkiLCAmby0+dmVyYm9zaXR5KTsKKwlnaXRfY29uZmlnX2dldF9pbnQoImRpZmYucmVuYW1lbGltaXQiLCAmby0+ZGlmZl9yZW5hbWVfbGltaXQpOworCWdpdF9jb25maWdfZ2V0X2ludCgibWVyZ2UucmVuYW1lbGltaXQiLCAmby0+bWVyZ2VfcmVuYW1lX2xpbWl0KTsKKwlnaXRfY29uZmlnKGdpdF94bWVyZ2VfY29uZmlnLCBOVUxMKTsKK30KKwordm9pZCBpbml0X21lcmdlX29wdGlvbnMoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8pCit7CisJbWVtc2V0KG8sIDAsIHNpemVvZihzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucykpOworCW8tPnZlcmJvc2l0eSA9IDI7CisJby0+YnVmZmVyX291dHB1dCA9IDE7CisJby0+ZGlmZl9yZW5hbWVfbGltaXQgPSAtMTsKKwlvLT5tZXJnZV9yZW5hbWVfbGltaXQgPSAtMTsKKwlvLT5yZW5vcm1hbGl6ZSA9IDA7CisJbWVyZ2VfcmVjdXJzaXZlX2NvbmZpZyhvKTsKKwlpZiAoZ2V0ZW52KCJHSVRfTUVSR0VfVkVSQk9TSVRZIikpCisJCW8tPnZlcmJvc2l0eSA9CisJCQlzdHJ0b2woZ2V0ZW52KCJHSVRfTUVSR0VfVkVSQk9TSVRZIiksIE5VTEwsIDEwKTsKKwlpZiAoby0+dmVyYm9zaXR5ID49IDUpCisJCW8tPmJ1ZmZlcl9vdXRwdXQgPSAwOworCXN0cmJ1Zl9pbml0KCZvLT5vYnVmLCAwKTsKKwlzdHJpbmdfbGlzdF9pbml0KCZvLT5jdXJyZW50X2ZpbGVfc2V0LCAxKTsKKwlzdHJpbmdfbGlzdF9pbml0KCZvLT5jdXJyZW50X2RpcmVjdG9yeV9zZXQsIDEpOworCXN0cmluZ19saXN0X2luaXQoJm8tPmRmX2NvbmZsaWN0X2ZpbGVfc2V0LCAxKTsKK30KKworaW50IHBhcnNlX21lcmdlX29wdChzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqcykKK3sKKwljb25zdCBjaGFyICphcmc7CisKKwlpZiAoIXMgfHwgISpzKQorCQlyZXR1cm4gLTE7CisJaWYgKCFzdHJjbXAocywgIm91cnMiKSkKKwkJby0+cmVjdXJzaXZlX3ZhcmlhbnQgPSBNRVJHRV9SRUNVUlNJVkVfT1VSUzsKKwllbHNlIGlmICghc3RyY21wKHMsICJ0aGVpcnMiKSkKKwkJby0+cmVjdXJzaXZlX3ZhcmlhbnQgPSBNRVJHRV9SRUNVUlNJVkVfVEhFSVJTOworCWVsc2UgaWYgKCFzdHJjbXAocywgInN1YnRyZWUiKSkKKwkJby0+c3VidHJlZV9zaGlmdCA9ICIiOworCWVsc2UgaWYgKHNraXBfcHJlZml4KHMsICJzdWJ0cmVlPSIsICZhcmcpKQorCQlvLT5zdWJ0cmVlX3NoaWZ0ID0gYXJnOworCWVsc2UgaWYgKCFzdHJjbXAocywgInBhdGllbmNlIikpCisJCW8tPnhkbF9vcHRzID0gRElGRl9XSVRIX0FMRyhvLCBQQVRJRU5DRV9ESUZGKTsKKwllbHNlIGlmICghc3RyY21wKHMsICJoaXN0b2dyYW0iKSkKKwkJby0+eGRsX29wdHMgPSBESUZGX1dJVEhfQUxHKG8sIEhJU1RPR1JBTV9ESUZGKTsKKwllbHNlIGlmIChza2lwX3ByZWZpeChzLCAiZGlmZi1hbGdvcml0aG09IiwgJmFyZykpIHsKKwkJbG9uZyB2YWx1ZSA9IHBhcnNlX2FsZ29yaXRobV92YWx1ZShhcmcpOworCQlpZiAodmFsdWUgPCAwKQorCQkJcmV0dXJuIC0xOworCQkvKiBjbGVhciBvdXQgcHJldmlvdXMgc2V0dGluZ3MgKi8KKwkJRElGRl9YRExfQ0xSKG8sIE5FRURfTUlOSU1BTCk7CisJCW8tPnhkbF9vcHRzICY9IH5YREZfRElGRl9BTEdPUklUSE1fTUFTSzsKKwkJby0+eGRsX29wdHMgfD0gdmFsdWU7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAocywgImlnbm9yZS1zcGFjZS1jaGFuZ2UiKSkKKwkJby0+eGRsX29wdHMgfD0gWERGX0lHTk9SRV9XSElURVNQQUNFX0NIQU5HRTsKKwllbHNlIGlmICghc3RyY21wKHMsICJpZ25vcmUtYWxsLXNwYWNlIikpCisJCW8tPnhkbF9vcHRzIHw9IFhERl9JR05PUkVfV0hJVEVTUEFDRTsKKwllbHNlIGlmICghc3RyY21wKHMsICJpZ25vcmUtc3BhY2UtYXQtZW9sIikpCisJCW8tPnhkbF9vcHRzIHw9IFhERl9JR05PUkVfV0hJVEVTUEFDRV9BVF9FT0w7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAicmVub3JtYWxpemUiKSkKKwkJby0+cmVub3JtYWxpemUgPSAxOworCWVsc2UgaWYgKCFzdHJjbXAocywgIm5vLXJlbm9ybWFsaXplIikpCisJCW8tPnJlbm9ybWFsaXplID0gMDsKKwllbHNlIGlmIChza2lwX3ByZWZpeChzLCAicmVuYW1lLXRocmVzaG9sZD0iLCAmYXJnKSkgeworCQlpZiAoKG8tPnJlbmFtZV9zY29yZSA9IHBhcnNlX3JlbmFtZV9zY29yZSgmYXJnKSkgPT0gLTEgfHwgKmFyZyAhPSAwKQorCQkJcmV0dXJuIC0xOworCX0KKwllbHNlCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21lcmdlLXJlY3Vyc2l2ZS5oIGIvbWVyZ2UtcmVjdXJzaXZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUwOTBhMwotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlLXJlY3Vyc2l2ZS5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgTUVSR0VfUkVDVVJTSVZFX0gKKyNkZWZpbmUgTUVSR0VfUkVDVVJTSVZFX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCBtZXJnZV9vcHRpb25zIHsKKwljb25zdCBjaGFyICphbmNlc3RvcjsKKwljb25zdCBjaGFyICpicmFuY2gxOworCWNvbnN0IGNoYXIgKmJyYW5jaDI7CisJZW51bSB7CisJCU1FUkdFX1JFQ1VSU0lWRV9OT1JNQUwgPSAwLAorCQlNRVJHRV9SRUNVUlNJVkVfT1VSUywKKwkJTUVSR0VfUkVDVVJTSVZFX1RIRUlSUworCX0gcmVjdXJzaXZlX3ZhcmlhbnQ7CisJY29uc3QgY2hhciAqc3VidHJlZV9zaGlmdDsKKwl1bnNpZ25lZCBidWZmZXJfb3V0cHV0IDogMTsKKwl1bnNpZ25lZCByZW5vcm1hbGl6ZSA6IDE7CisJbG9uZyB4ZGxfb3B0czsKKwlpbnQgdmVyYm9zaXR5OworCWludCBkaWZmX3JlbmFtZV9saW1pdDsKKwlpbnQgbWVyZ2VfcmVuYW1lX2xpbWl0OworCWludCByZW5hbWVfc2NvcmU7CisJaW50IG5lZWRlZF9yZW5hbWVfbGltaXQ7CisJaW50IHNob3dfcmVuYW1lX3Byb2dyZXNzOworCWludCBjYWxsX2RlcHRoOworCXN0cnVjdCBzdHJidWYgb2J1ZjsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY3VycmVudF9maWxlX3NldDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY3VycmVudF9kaXJlY3Rvcnlfc2V0OworCXN0cnVjdCBzdHJpbmdfbGlzdCBkZl9jb25mbGljdF9maWxlX3NldDsKK307CisKKy8qIG1lcmdlX3RyZWVzKCkgYnV0IHdpdGggcmVjdXJzaXZlIGFuY2VzdG9yIGNvbnNvbGlkYXRpb24gKi8KK2ludCBtZXJnZV9yZWN1cnNpdmUoc3RydWN0IG1lcmdlX29wdGlvbnMgKm8sCisJCSAgICBzdHJ1Y3QgY29tbWl0ICpoMSwKKwkJICAgIHN0cnVjdCBjb21taXQgKmgyLAorCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICphbmNlc3RvcnMsCisJCSAgICBzdHJ1Y3QgY29tbWl0ICoqcmVzdWx0KTsKKworLyogcmVuYW1lLWRldGVjdGluZyB0aHJlZS13YXkgbWVyZ2UsIG5vIHJlY3Vyc2lvbiAqLworaW50IG1lcmdlX3RyZWVzKHN0cnVjdCBtZXJnZV9vcHRpb25zICpvLAorCQlzdHJ1Y3QgdHJlZSAqaGVhZCwKKwkJc3RydWN0IHRyZWUgKm1lcmdlLAorCQlzdHJ1Y3QgdHJlZSAqY29tbW9uLAorCQlzdHJ1Y3QgdHJlZSAqKnJlc3VsdCk7CisKKy8qCisgKiAiZ2l0LW1lcmdlLXJlY3Vyc2l2ZSIgY2FuIGJlIGZlZCB0cmVlczsgd3JhcCB0aGVtIGludG8KKyAqIHZpcnR1YWwgY29tbWl0cyBhbmQgY2FsbCBtZXJnZV9yZWN1cnNpdmUoKSBwcm9wZXIuCisgKi8KK2ludCBtZXJnZV9yZWN1cnNpdmVfZ2VuZXJpYyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1lcmdlLAorCQkJICAgIGludCBudW1fY2EsCisJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmNhLAorCQkJICAgIHN0cnVjdCBjb21taXQgKipyZXN1bHQpOworCit2b2lkIGluaXRfbWVyZ2Vfb3B0aW9ucyhzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbyk7CitzdHJ1Y3QgdHJlZSAqd3JpdGVfdHJlZV9mcm9tX21lbW9yeShzdHJ1Y3QgbWVyZ2Vfb3B0aW9ucyAqbyk7CisKK2ludCBwYXJzZV9tZXJnZV9vcHQoc3RydWN0IG1lcmdlX29wdGlvbnMgKm91dCwgY29uc3QgY2hhciAqcyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbWVyZ2UuYyBiL21lcmdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNmZjYzMgotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlLmMKQEAgLTAsMCArMSw5NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInJlc29sdmUtdW5kby5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgImRpci5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqbWVyZ2VfYXJndW1lbnQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWlmIChjb21taXQpCisJCXJldHVybiBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKTsKKwllbHNlCisJCXJldHVybiBFTVBUWV9UUkVFX1NIQTFfSEVYOworfQorCitpbnQgdHJ5X21lcmdlX2NvbW1hbmQoY29uc3QgY2hhciAqc3RyYXRlZ3ksIHNpemVfdCB4b3B0c19uciwKKwkJICAgICAgY29uc3QgY2hhciAqKnhvcHRzLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1vbiwKKwkJICAgICAgY29uc3QgY2hhciAqaGVhZF9hcmcsIHN0cnVjdCBjb21taXRfbGlzdCAqcmVtb3RlcykKK3sKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmdzID0gQVJHVl9BUlJBWV9JTklUOworCWludCBpLCByZXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpqOworCisJYXJndl9hcnJheV9wdXNoZigmYXJncywgIm1lcmdlLSVzIiwgc3RyYXRlZ3kpOworCWZvciAoaSA9IDA7IGkgPCB4b3B0c19ucjsgaSsrKQorCQlhcmd2X2FycmF5X3B1c2hmKCZhcmdzLCAiLS0lcyIsIHhvcHRzW2ldKTsKKwlmb3IgKGogPSBjb21tb247IGo7IGogPSBqLT5uZXh0KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG1lcmdlX2FyZ3VtZW50KGotPml0ZW0pKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLSIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgaGVhZF9hcmcpOworCWZvciAoaiA9IHJlbW90ZXM7IGo7IGogPSBqLT5uZXh0KQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG1lcmdlX2FyZ3VtZW50KGotPml0ZW0pKTsKKworCXJldCA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3MuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCisJZGlzY2FyZF9jYWNoZSgpOworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoXygiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIikpOworCXJlc29sdmVfdW5kb19jbGVhcigpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGNoZWNrb3V0X2Zhc3RfZm9yd2FyZChjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkLAorCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpyZW1vdGUsCisJCQkgIGludCBvdmVyd3JpdGVfaWdub3JlKQoreworCXN0cnVjdCB0cmVlICp0cmVlc1tNQVhfVU5QQUNLX1RSRUVTXTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgb3B0czsKKwlzdHJ1Y3QgdHJlZV9kZXNjIHRbTUFYX1VOUEFDS19UUkVFU107CisJaW50IGksIG5yX3RyZWVzID0gMDsKKwlzdHJ1Y3QgZGlyX3N0cnVjdCBkaXI7CisJc3RydWN0IGxvY2tfZmlsZSAqbG9ja19maWxlID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOworCisJcmVmcmVzaF9jYWNoZShSRUZSRVNIX1FVSUVUKTsKKworCWhvbGRfbG9ja2VkX2luZGV4KGxvY2tfZmlsZSwgMSk7CisKKwltZW1zZXQoJnRyZWVzLCAwLCBzaXplb2YodHJlZXMpKTsKKwltZW1zZXQoJm9wdHMsIDAsIHNpemVvZihvcHRzKSk7CisJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworCWlmIChvdmVyd3JpdGVfaWdub3JlKSB7CisJCW1lbXNldCgmZGlyLCAwLCBzaXplb2YoZGlyKSk7CisJCWRpci5mbGFncyB8PSBESVJfU0hPV19JR05PUkVEOworCQlzZXR1cF9zdGFuZGFyZF9leGNsdWRlcygmZGlyKTsKKwkJb3B0cy5kaXIgPSAmZGlyOworCX0KKworCW9wdHMuaGVhZF9pZHggPSAxOworCW9wdHMuc3JjX2luZGV4ID0gJnRoZV9pbmRleDsKKwlvcHRzLmRzdF9pbmRleCA9ICZ0aGVfaW5kZXg7CisJb3B0cy51cGRhdGUgPSAxOworCW9wdHMudmVyYm9zZV91cGRhdGUgPSAxOworCW9wdHMubWVyZ2UgPSAxOworCW9wdHMuZm4gPSB0d293YXlfbWVyZ2U7CisJc2V0dXBfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbigmb3B0cywgIm1lcmdlIik7CisKKwl0cmVlc1tucl90cmVlc10gPSBwYXJzZV90cmVlX2luZGlyZWN0KGhlYWQpOworCWlmICghdHJlZXNbbnJfdHJlZXMrK10pCisJCXJldHVybiAtMTsKKwl0cmVlc1tucl90cmVlc10gPSBwYXJzZV90cmVlX2luZGlyZWN0KHJlbW90ZSk7CisJaWYgKCF0cmVlc1tucl90cmVlcysrXSkKKwkJcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBucl90cmVlczsgaSsrKSB7CisJCXBhcnNlX3RyZWUodHJlZXNbaV0pOworCQlpbml0X3RyZWVfZGVzYyh0K2ksIHRyZWVzW2ldLT5idWZmZXIsIHRyZWVzW2ldLT5zaXplKTsKKwl9CisJaWYgKHVucGFja190cmVlcyhucl90cmVlcywgdCwgJm9wdHMpKQorCQlyZXR1cm4gLTE7CisJaWYgKHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCBsb2NrX2ZpbGUsIENPTU1JVF9MT0NLKSkKKwkJZGllKF8oInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIpKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL21lcmdlc29ydC5jIGIvbWVyZ2Vzb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVmZGYyZQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlc29ydC5jCkBAIC0wLDAgKzEsNzMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm1lcmdlc29ydC5oIgorCitzdHJ1Y3QgbWVyZ2Vzb3J0X3N1Ymxpc3QgeworCXZvaWQgKnB0cjsKKwl1bnNpZ25lZCBsb25nIGxlbjsKK307CisKK3N0YXRpYyB2b2lkICpnZXRfbnRoX25leHQodm9pZCAqbGlzdCwgdW5zaWduZWQgbG9uZyBuLAorCQkJICB2b2lkICooKmdldF9uZXh0X2ZuKShjb25zdCB2b2lkICopKQoreworCXdoaWxlIChuLS0gJiYgbGlzdCkKKwkJbGlzdCA9IGdldF9uZXh0X2ZuKGxpc3QpOworCXJldHVybiBsaXN0OworfQorCitzdGF0aWMgdm9pZCAqcG9wX2l0ZW0oc3RydWN0IG1lcmdlc29ydF9zdWJsaXN0ICpsLAorCQkgICAgICB2b2lkICooKmdldF9uZXh0X2ZuKShjb25zdCB2b2lkICopKQoreworCXZvaWQgKnAgPSBsLT5wdHI7CisJbC0+cHRyID0gZ2V0X25leHRfZm4obC0+cHRyKTsKKwlsLT5sZW4gPSBsLT5wdHIgPyAobC0+bGVuIC0gMSkgOiAwOworCXJldHVybiBwOworfQorCit2b2lkICpsbGlzdF9tZXJnZXNvcnQodm9pZCAqbGlzdCwKKwkJICAgICAgdm9pZCAqKCpnZXRfbmV4dF9mbikoY29uc3Qgdm9pZCAqKSwKKwkJICAgICAgdm9pZCAoKnNldF9uZXh0X2ZuKSh2b2lkICosIHZvaWQgKiksCisJCSAgICAgIGludCAoKmNvbXBhcmVfZm4pKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKK3sKKwl1bnNpZ25lZCBsb25nIGw7CisKKwlpZiAoIWxpc3QpCisJCXJldHVybiBOVUxMOworCWZvciAobCA9IDE7IDsgbCAqPSAyKSB7CisJCXZvaWQgKmN1cnI7CisJCXN0cnVjdCBtZXJnZXNvcnRfc3VibGlzdCBwLCBxOworCisJCXAucHRyID0gbGlzdDsKKwkJcS5wdHIgPSBnZXRfbnRoX25leHQocC5wdHIsIGwsIGdldF9uZXh0X2ZuKTsKKwkJaWYgKCFxLnB0cikKKwkJCWJyZWFrOworCQlwLmxlbiA9IHEubGVuID0gbDsKKworCQlpZiAoY29tcGFyZV9mbihwLnB0ciwgcS5wdHIpID4gMCkKKwkJCWxpc3QgPSBjdXJyID0gcG9wX2l0ZW0oJnEsIGdldF9uZXh0X2ZuKTsKKwkJZWxzZQorCQkJbGlzdCA9IGN1cnIgPSBwb3BfaXRlbSgmcCwgZ2V0X25leHRfZm4pOworCisJCXdoaWxlIChwLnB0cikgeworCQkJd2hpbGUgKHAubGVuIHx8IHEubGVuKSB7CisJCQkJdm9pZCAqcHJldiA9IGN1cnI7CisKKwkJCQlpZiAoIXAubGVuKQorCQkJCQljdXJyID0gcG9wX2l0ZW0oJnEsIGdldF9uZXh0X2ZuKTsKKwkJCQllbHNlIGlmICghcS5sZW4pCisJCQkJCWN1cnIgPSBwb3BfaXRlbSgmcCwgZ2V0X25leHRfZm4pOworCQkJCWVsc2UgaWYgKGNvbXBhcmVfZm4ocC5wdHIsIHEucHRyKSA+IDApCisJCQkJCWN1cnIgPSBwb3BfaXRlbSgmcSwgZ2V0X25leHRfZm4pOworCQkJCWVsc2UKKwkJCQkJY3VyciA9IHBvcF9pdGVtKCZwLCBnZXRfbmV4dF9mbik7CisJCQkJc2V0X25leHRfZm4ocHJldiwgY3Vycik7CisJCQl9CisJCQlwLnB0ciA9IHEucHRyOworCQkJcC5sZW4gPSBsOworCQkJcS5wdHIgPSBnZXRfbnRoX25leHQocC5wdHIsIGwsIGdldF9uZXh0X2ZuKTsKKwkJCXEubGVuID0gcS5wdHIgPyBsIDogMDsKKworCQl9CisJCXNldF9uZXh0X2ZuKGN1cnIsIE5VTEwpOworCX0KKwlyZXR1cm4gbGlzdDsKK30KZGlmZiAtLWdpdCBhL21lcmdlc29ydC5oIGIvbWVyZ2Vzb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ0Y2ZmMQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdlc29ydC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgTUVSR0VTT1JUX0gKKyNkZWZpbmUgTUVSR0VTT1JUX0gKKworLyoKKyAqIFNvcnQgbGlua2VkIGxpc3QgaW4gcGxhY2UuCisgKiAtIGdldF9uZXh0X2ZuKCkgcmV0dXJucyB0aGUgbmV4dCBlbGVtZW50IGdpdmVuIGFuIGVsZW1lbnQgb2YgYSBsaW5rZWQgbGlzdC4KKyAqIC0gc2V0X25leHRfZm4oKSB0YWtlcyB0d28gZWxlbWVudHMgQSBhbmQgQiwgYW5kIG1ha2VzIEIgdGhlICJuZXh0IiBlbGVtZW50CisgKiAgIG9mIEEgb24gdGhlIGxpc3QuCisgKiAtIGNvbXBhcmVfZm4oKSB0YWtlcyB0d28gZWxlbWVudHMgQSBhbmQgQiwgYW5kIHJldHVybnMgbmVnYXRpdmUsIDAsIHBvc2l0aXZlCisgKiAgIGFzIHRoZSBzYW1lIHNpZ24gYXMgInN1YnRyYWN0aW5nIiBCIGZyb20gQS4KKyAqLwordm9pZCAqbGxpc3RfbWVyZ2Vzb3J0KHZvaWQgKmxpc3QsCisJCSAgICAgIHZvaWQgKigqZ2V0X25leHRfZm4pKGNvbnN0IHZvaWQgKiksCisJCSAgICAgIHZvaWQgKCpzZXRfbmV4dF9mbikodm9pZCAqLCB2b2lkICopLAorCQkgICAgICBpbnQgKCpjb21wYXJlX2ZuKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvYXJheGlzIGIvbWVyZ2V0b29scy9hcmF4aXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmOTdjNQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvYXJheGlzCkBAIC0wLDAgKzEsMjAgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgLXdhaXQgLTIgIiRMT0NBTCIgIiRSRU1PVEUiID4vZGV2L251bGwgMj4mMQorfQorCittZXJnZV9jbWQgKCkgeworCXRvdWNoICIkQkFDS1VQIgorCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtd2FpdCAtbWVyZ2UgLTMgLWExIFwKKwkJCSIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiICIkTUVSR0VEIiA+L2Rldi9udWxsIDI+JjEKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtd2FpdCAtMiBcCisJCQkiJExPQ0FMIiAiJFJFTU9URSIgIiRNRVJHRUQiID4vZGV2L251bGwgMj4mMQorCWZpCisJY2hlY2tfdW5jaGFuZ2VkCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGgoKSB7CisJZWNobyBjb21wYXJlCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2JjIGIvbWVyZ2V0b29scy9iYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjMxOWQyCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9iYwpAQCAtMCwwICsxLDI1IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCXRvdWNoICIkQkFDS1VQIgorCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgIiRCQVNFIiBcCisJCQktbWVyZ2VvdXRwdXQ9IiRNRVJHRUQiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCS1tZXJnZW91dHB1dD0iJE1FUkdFRCIKKwlmaQorCWNoZWNrX3VuY2hhbmdlZAorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCWlmIHR5cGUgYmNvbXAgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbAorCXRoZW4KKwkJZWNobyBiY29tcAorCWVsc2UKKwkJZWNobyBiY29tcGFyZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2JjMyBiL21lcmdldG9vbHMvYmMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOGRkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2JjMwpAQCAtMCwwICsxIEBACisuICIkTUVSR0VfVE9PTFNfRElSL2JjIgpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9jb2RlY29tcGFyZSBiL21lcmdldG9vbHMvY29kZWNvbXBhcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwNDg2YgotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvY29kZWNvbXBhcmUKQEAgLTAsMCArMSwyNSBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKK30KKworbWVyZ2VfY21kICgpIHsKKwl0b3VjaCAiJEJBQ0tVUCIKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLU1GPSIkTE9DQUwiIC1URj0iJFJFTU9URSIgLUJGPSIkQkFTRSIgXAorCQkJLVJGPSIkTUVSR0VEIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiIC1NRj0iJExPQ0FMIiAtVEY9IiRSRU1PVEUiIFwKKwkJCS1SRj0iJE1FUkdFRCIKKwlmaQorCWNoZWNrX3VuY2hhbmdlZAorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCWlmIG1lcmdlX21vZGUKKwl0aGVuCisJCWVjaG8gQ29kZU1lcmdlCisJZWxzZQorCQllY2hvIENvZGVDb21wYXJlCisJZmkKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZGVsdGF3YWxrZXIgYi9tZXJnZXRvb2xzL2RlbHRhd2Fsa2VyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYzcxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2RlbHRhd2Fsa2VyCkBAIC0wLDAgKzEsMjEgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiID4vZGV2L251bGwgMj4mMQorfQorCittZXJnZV9jbWQgKCkgeworCSMgQWRkaW5nICQocHdkKS8gaW4gZnJvbnQgb2YgJE1FUkdFRCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4KKwkjIEhvd2V2ZXIgd2l0aG91dCBpdCwgRGVsdGFXYWxrZXIgKGF0IGxlYXN0IHYxLjkuOCBvbiBXaW5kb3dzKQorCSMgY3Jhc2hlcyB3aXRoIGEgSlJFIGV4Y2VwdGlvbi4gIFRoZSBEZWx0YVdhbGtlciB1c2VyIG1hbnVhbCwKKwkjIHNob3dzICQocHdkKS8gd2hlbmV2ZXIgdGhlICctbWVyZ2VkJyBvcHRpb25zIGlzIGdpdmVuLgorCSMgQWRkaW5nIGl0IGhlcmUgc2VlbXMgdG8gd29yayBhcm91bmQgdGhlIHByb2JsZW0uCisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAiJEJBU0UiIC1tZXJnZWQ9IiQocHdkKS8kTUVSR0VEIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiAtbWVyZ2VkPSIkKHB3ZCkvJE1FUkdFRCIKKwlmaSA+L2Rldi9udWxsIDI+JjEKK30KKwordHJhbnNsYXRlX21lcmdlX3Rvb2xfcGF0aCgpIHsKKwllY2hvIERlbHRhV2Fsa2VyCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2RpZmZtZXJnZSBiL21lcmdldG9vbHMvZGlmZm1lcmdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMzhjYjQKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2RpZmZtZXJnZQpAQCAtMCwwICsxLDE0IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiA+L2Rldi9udWxsIDI+JjEKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLS1tZXJnZSAtLXJlc3VsdD0iJE1FUkdFRCIgXAorCQkJIiRMT0NBTCIgIiRCQVNFIiAiJFJFTU9URSIKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLW1lcmdlIFwKKwkJCS0tcmVzdWx0PSIkTUVSR0VEIiAiJExPQ0FMIiAiJFJFTU9URSIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy9kaWZmdXNlIGIvbWVyZ2V0b29scy9kaWZmdXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyZTA4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2RpZmZ1c2UKQEAgLTAsMCArMSwxNyBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgfCBjYXQKK30KKworbWVyZ2VfY21kICgpIHsKKwl0b3VjaCAiJEJBQ0tVUCIKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQkJIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIiBcCisJCQkiJEJBU0UiIHwgY2F0CisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQkJIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIiB8IGNhdAorCWZpCisJY2hlY2tfdW5jaGFuZ2VkCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2VjbWVyZ2UgYi9tZXJnZXRvb2xzL2VjbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNjMmU0MwotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZWNtZXJnZQpAQCAtMCwwICsxLDE2IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIC0tZGVmYXVsdCAtLW1vZGU9ZGlmZjIgIiRMT0NBTCIgIiRSRU1PVEUiCit9CisKK21lcmdlX2NtZCAoKSB7CisJdG91Y2ggIiRCQUNLVVAiCisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiICIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCS0tZGVmYXVsdCAtLW1vZGU9bWVyZ2UzIC0tdG89IiRNRVJHRUQiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJCS0tZGVmYXVsdCAtLW1vZGU9bWVyZ2UyIC0tdG89IiRNRVJHRUQiCisJZmkKKwljaGVja191bmNoYW5nZWQKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZW1lcmdlIGIvbWVyZ2V0b29scy9lbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I4OTVmZAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZW1lcmdlCkBAIC0wLDAgKzEsMjIgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgZW1lcmdlLWZpbGVzLWNvbW1hbmQgIiRMT0NBTCIgIiRSRU1PVEUiCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJCS1mIGVtZXJnZS1maWxlcy13aXRoLWFuY2VzdG9yLWNvbW1hbmQgXAorCQkJIiRMT0NBTCIgIiRSRU1PVEUiICIkQkFTRSIgXAorCQkJIiQoYmFzZW5hbWUgIiRNRVJHRUQiKSIKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCQktZiBlbWVyZ2UtZmlsZXMtY29tbWFuZCBcCisJCQkiJExPQ0FMIiAiJFJFTU9URSIgXAorCQkJIiQoYmFzZW5hbWUgIiRNRVJHRUQiKSIKKwlmaQorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCWVjaG8gZW1hY3MKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZ3ZpbWRpZmYgYi9tZXJnZXRvb2xzL2d2aW1kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTViYjAKLS0tIC9kZXYvbnVsbAorKysgYi9tZXJnZXRvb2xzL2d2aW1kaWZmCkBAIC0wLDAgKzEgQEAKKy4gIiRNRVJHRV9UT09MU19ESVIvdmltZGlmZiIKZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZ3ZpbWRpZmYyIGIvbWVyZ2V0b29scy9ndmltZGlmZjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNWJiMAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZ3ZpbWRpZmYyCkBAIC0wLDAgKzEgQEAKKy4gIiRNRVJHRV9UT09MU19ESVIvdmltZGlmZiIKZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvZ3ZpbWRpZmYzIGIvbWVyZ2V0b29scy9ndmltZGlmZjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhNWJiMAotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvZ3ZpbWRpZmYzCkBAIC0wLDAgKzEgQEAKKy4gIiRNRVJHRV9UT09MU19ESVIvdmltZGlmZiIKZGlmZiAtLWdpdCBhL21lcmdldG9vbHMva2RpZmYzIGIvbWVyZ2V0b29scy9rZGlmZjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzZDEyOQotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMva2RpZmYzCkBAIC0wLDAgKzEsMjMgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgXAorCQktLUwxICIkTUVSR0VEIChBKSIgLS1MMiAiJE1FUkdFRCAoQikiIFwKKwkJIiRMT0NBTCIgIiRSRU1PVEUiID4vZGV2L251bGwgMj4mMQorfQorCittZXJnZV9jbWQgKCkgeworCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLWF1dG8gXAorCQkJLS1MMSAiJE1FUkdFRCAoQmFzZSkiIFwKKwkJCS0tTDIgIiRNRVJHRUQgKExvY2FsKSIgXAorCQkJLS1MMyAiJE1FUkdFRCAoUmVtb3RlKSIgXAorCQkJLW8gIiRNRVJHRUQiICIkQkFTRSIgIiRMT0NBTCIgIiRSRU1PVEUiIFwKKwkJPi9kZXYvbnVsbCAyPiYxCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLS1hdXRvIFwKKwkJCS0tTDEgIiRNRVJHRUQgKExvY2FsKSIgXAorCQkJLS1MMiAiJE1FUkdFRCAoUmVtb3RlKSIgXAorCQkJLW8gIiRNRVJHRUQiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCT4vZGV2L251bGwgMj4mMQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL2tvbXBhcmUgYi9tZXJnZXRvb2xzL2tvbXBhcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMzNjg2YwotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMva29tcGFyZQpAQCAtMCwwICsxLDcgQEAKK2Nhbl9tZXJnZSAoKSB7CisJcmV0dXJuIDEKK30KKworZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvbWVsZCBiL21lcmdldG9vbHMvbWVsZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2ViZGZiCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9tZWxkCkBAIC0wLDAgKzEsMzcgQEAKK2RpZmZfY21kICgpIHsKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiCit9CisKK21lcmdlX2NtZCAoKSB7CisJaWYgdGVzdCAteiAiJHttZWxkX2hhc19vdXRwdXRfb3B0aW9uOitzZXR9IgorCXRoZW4KKwkJY2hlY2tfbWVsZF9mb3Jfb3V0cHV0X3ZlcnNpb24KKwlmaQorCXRvdWNoICIkQkFDS1VQIgorCWlmIHRlc3QgIiRtZWxkX2hhc19vdXRwdXRfb3B0aW9uIiA9IHRydWUKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAtLW91dHB1dCAiJE1FUkdFRCIgXAorCQkJIiRMT0NBTCIgIiRCQVNFIiAiJFJFTU9URSIKKwllbHNlCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJE1FUkdFRCIgIiRSRU1PVEUiCisJZmkKKwljaGVja191bmNoYW5nZWQKK30KKworIyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCB1c2UgJ21lbGQgLS1vdXRwdXQgPGZpbGU+JworY2hlY2tfbWVsZF9mb3Jfb3V0cHV0X3ZlcnNpb24gKCkgeworCW1lbGRfcGF0aD0iJChnaXQgY29uZmlnIG1lcmdldG9vbC5tZWxkLnBhdGgpIgorCW1lbGRfcGF0aD0iJHttZWxkX3BhdGg6LW1lbGR9IgorCisJaWYgbWVsZF9oYXNfb3V0cHV0X29wdGlvbj0kKGdpdCBjb25maWcgLS1ib29sIG1lcmdldG9vbC5tZWxkLmhhc091dHB1dCkKKwl0aGVuCisJCTogdXNlIGNvbmZpZ3VyZWQgdmFsdWUKKwllbGlmICIkbWVsZF9wYXRoIiAtLWhlbHAgMj4mMSB8CisJCWdyZXAgLWUgJy0tb3V0cHV0PScgLWUgJ1xbT1BUSU9OXC5cLlwuXF0nID4vZGV2L251bGwKKwl0aGVuCisJCTogb2xkIG9uZXMgbWVudGlvbiAtLW91dHB1dCBhbmQgbmV3IG9uZXMganVzdCBzYXkgT1BUSU9OLi4uCisJCW1lbGRfaGFzX291dHB1dF9vcHRpb249dHJ1ZQorCWVsc2UKKwkJbWVsZF9oYXNfb3V0cHV0X29wdGlvbj1mYWxzZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL29wZW5kaWZmIGIvbWVyZ2V0b29scy9vcGVuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTQyYjJhCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9vcGVuZGlmZgpAQCAtMCwwICsxLDE2IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiB8IGNhdAorfQorCittZXJnZV9jbWQgKCkgeworCXRvdWNoICIkQkFDS1VQIgorCWlmICRiYXNlX3ByZXNlbnQKKwl0aGVuCisJCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIgXAorCQkJLWFuY2VzdG9yICIkQkFTRSIgLW1lcmdlICIkTUVSR0VEIiB8IGNhdAorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiICIkTE9DQUwiICIkUkVNT1RFIiBcCisJCQktbWVyZ2UgIiRNRVJHRUQiIHwgY2F0CisJZmkKKwljaGVja191bmNoYW5nZWQKK30KZGlmZiAtLWdpdCBhL21lcmdldG9vbHMvcDRtZXJnZSBiL21lcmdldG9vbHMvcDRtZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTYwOGFiCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy9wNG1lcmdlCkBAIC0wLDAgKzEsMzggQEAKK2RpZmZfY21kICgpIHsKKwllbXB0eV9maWxlPQorCisJIyBwNG1lcmdlIGRvZXMgbm90IGxpa2UgL2Rldi9udWxsCisJaWYgdGVzdCAiL2Rldi9udWxsIiA9ICIkTE9DQUwiCisJdGhlbgorCQlMT0NBTD0iJChjcmVhdGVfZW1wdHlfZmlsZSkiCisJZmkKKwlpZiB0ZXN0ICIvZGV2L251bGwiID0gIiRSRU1PVEUiCisJdGhlbgorCQlSRU1PVEU9IiQoY3JlYXRlX2VtcHR5X2ZpbGUpIgorCWZpCisKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRMT0NBTCIgIiRSRU1PVEUiCisKKwlpZiB0ZXN0IC1uICIkZW1wdHlfZmlsZSIKKwl0aGVuCisJCXJtIC1mICIkZW1wdHlfZmlsZSIKKwlmaQorfQorCittZXJnZV9jbWQgKCkgeworCXRvdWNoICIkQkFDS1VQIgorCWlmICEgJGJhc2VfcHJlc2VudAorCXRoZW4KKwkJY3AgLS0gIiRMT0NBTCIgIiRCQVNFIgorCQljcmVhdGVfdmlydHVhbF9iYXNlICIkQkFTRSIgIiRSRU1PVEUiCisJZmkKKwkiJG1lcmdlX3Rvb2xfcGF0aCIgIiRCQVNFIiAiJFJFTU9URSIgIiRMT0NBTCIgIiRNRVJHRUQiCisJY2hlY2tfdW5jaGFuZ2VkCit9CisKK2NyZWF0ZV9lbXB0eV9maWxlICgpIHsKKwllbXB0eV9maWxlPSIke1RNUERJUjotL3RtcH0vZ2l0LWRpZmZ0b29sLXA0bWVyZ2UtZW1wdHktZmlsZS4kJCIKKwk+IiRlbXB0eV9maWxlIgorCisJcHJpbnRmICIlcyIgIiRlbXB0eV9maWxlIgorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy90a2RpZmYgYi9tZXJnZXRvb2xzL3RrZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MThjNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy90a2RpZmYKQEAgLTAsMCArMSwxMiBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiAiJExPQ0FMIiAiJFJFTU9URSIKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWEgIiRCQVNFIiAtbyAiJE1FUkdFRCIgIiRMT0NBTCIgIiRSRU1PVEUiCisJZWxzZQorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLW8gIiRNRVJHRUQiICIkTE9DQUwiICIkUkVNT1RFIgorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3RvcnRvaXNlbWVyZ2UgYi9tZXJnZXRvb2xzL3RvcnRvaXNlbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4OWYxYwotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvdG9ydG9pc2VtZXJnZQpAQCAtMCwwICsxLDM0IEBACitjYW5fZGlmZiAoKSB7CisJcmV0dXJuIDEKK30KKworbWVyZ2VfY21kICgpIHsKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQl0b3VjaCAiJEJBQ0tVUCIKKwkJYmFzZW5hbWU9IiQoYmFzZW5hbWUgIiRtZXJnZV90b29sX3BhdGgiIC5leGUpIgorCQlpZiB0ZXN0ICIkYmFzZW5hbWUiID0gInRvcnRvaXNlZ2l0bWVyZ2UiCisJCXRoZW4KKwkJCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCQkJLWJhc2UgIiRCQVNFIiAtbWluZSAiJExPQ0FMIiBcCisJCQkJLXRoZWlycyAiJFJFTU9URSIgLW1lcmdlZCAiJE1FUkdFRCIKKwkJZWxzZQorCQkJIiRtZXJnZV90b29sX3BhdGgiIFwKKwkJCQktYmFzZToiJEJBU0UiIC1taW5lOiIkTE9DQUwiIFwKKwkJCQktdGhlaXJzOiIkUkVNT1RFIiAtbWVyZ2VkOiIkTUVSR0VEIgorCQlmaQorCQljaGVja191bmNoYW5nZWQKKwllbHNlCisJCWVjaG8gIiRtZXJnZV90b29sX3BhdGggY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIGJhc2UiIDE+JjIKKwkJcmV0dXJuIDEKKwlmaQorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCWlmIHR5cGUgdG9ydG9pc2VnaXRtZXJnZSA+L2Rldi9udWxsIDI+L2Rldi9udWxsCisJdGhlbgorCQllY2hvIHRvcnRvaXNlZ2l0bWVyZ2UKKwllbHNlCisJCWVjaG8gdG9ydG9pc2VtZXJnZQorCWZpCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3ZpbWRpZmYgYi9tZXJnZXRvb2xzL3ZpbWRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRkZmJmYwotLS0gL2Rldi9udWxsCisrKyBiL21lcmdldG9vbHMvdmltZGlmZgpAQCAtMCwwICsxLDQ2IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIC1SIC1mIC1kIFwKKwkJLWMgJ3dpbmNtZCBsJyAtYyAnY2QgJEdJVF9QUkVGSVgnICIkTE9DQUwiICIkUkVNT1RFIgorfQorCittZXJnZV9jbWQgKCkgeworCXRvdWNoICIkQkFDS1VQIgorCWNhc2UgIiQxIiBpbgorCWd2aW1kaWZmfHZpbWRpZmYpCisJCWlmICRiYXNlX3ByZXNlbnQKKwkJdGhlbgorCQkJIiRtZXJnZV90b29sX3BhdGgiIC1mIC1kIC1jICd3aW5jbWQgSicgXAorCQkJCSIkTUVSR0VEIiAiJExPQ0FMIiAiJEJBU0UiICIkUkVNT1RFIgorCQllbHNlCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgLWQgLWMgJ3dpbmNtZCBsJyBcCisJCQkJIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIgorCQlmaQorCQk7OworCWd2aW1kaWZmMnx2aW1kaWZmMikKKwkJIiRtZXJnZV90b29sX3BhdGgiIC1mIC1kIC1jICd3aW5jbWQgbCcgXAorCQkJIiRMT0NBTCIgIiRNRVJHRUQiICIkUkVNT1RFIgorCQk7OworCWd2aW1kaWZmM3x2aW1kaWZmMykKKwkJaWYgJGJhc2VfcHJlc2VudAorCQl0aGVuCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgLWQgLWMgJ2hpZCB8IGhpZCB8IGhpZCcgXAorCQkJCSIkTE9DQUwiICIkUkVNT1RFIiAiJEJBU0UiICIkTUVSR0VEIgorCQllbHNlCisJCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLWYgLWQgLWMgJ2hpZCB8IGhpZCcgXAorCQkJCSIkTE9DQUwiICIkUkVNT1RFIiAiJE1FUkdFRCIKKwkJZmkKKwkJOzsKKwllc2FjCisJY2hlY2tfdW5jaGFuZ2VkCit9CisKK3RyYW5zbGF0ZV9tZXJnZV90b29sX3BhdGgoKSB7CisJY2FzZSAiJDEiIGluCisJZ3ZpbWRpZmZ8Z3ZpbWRpZmYyfGd2aW1kaWZmMykKKwkJZWNobyBndmltCisJCTs7CisJdmltZGlmZnx2aW1kaWZmMnx2aW1kaWZmMykKKwkJZWNobyB2aW0KKwkJOzsKKwllc2FjCit9CmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3ZpbWRpZmYyIGIvbWVyZ2V0b29scy92aW1kaWZmMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE1YmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy92aW1kaWZmMgpAQCAtMCwwICsxIEBACisuICIkTUVSR0VfVE9PTFNfRElSL3ZpbWRpZmYiCmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3ZpbWRpZmYzIGIvbWVyZ2V0b29scy92aW1kaWZmMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGE1YmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy92aW1kaWZmMwpAQCAtMCwwICsxIEBACisuICIkTUVSR0VfVE9PTFNfRElSL3ZpbWRpZmYiCmRpZmYgLS1naXQgYS9tZXJnZXRvb2xzL3dpbm1lcmdlIGIvbWVyZ2V0b29scy93aW5tZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGE2NmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy93aW5tZXJnZQpAQCAtMCwwICsxLDM2IEBACitkaWZmX2NtZCAoKSB7CisJIiRtZXJnZV90b29sX3BhdGgiIC11IC1lICIkTE9DQUwiICIkUkVNT1RFIgorCXJldHVybiAwCit9CisKK21lcmdlX2NtZCAoKSB7CisJIyBtZXJnZXRvb2wud2lubWVyZ2UudHJ1c3RFeGl0Q29kZSBpcyBpbXBsaWNpdGx5IGZhbHNlLgorCSMgdG91Y2ggJEJBQ0tVUCBzbyB0aGF0IHdlIGNhbiBjaGVja191bmNoYW5nZWQuCisJdG91Y2ggIiRCQUNLVVAiCisJIiRtZXJnZV90b29sX3BhdGgiIC11IC1lIC1kbCBMb2NhbCAtZHIgUmVtb3RlIFwKKwkJIiRMT0NBTCIgIiRSRU1PVEUiICIkTUVSR0VEIgorCWNoZWNrX3VuY2hhbmdlZAorfQorCit0cmFuc2xhdGVfbWVyZ2VfdG9vbF9wYXRoKCkgeworCSMgVXNlIFdpbk1lcmdlVS5leGUgaWYgaXQgZXhpc3RzIGluICRQQVRICisJaWYgdHlwZSAtcCBXaW5NZXJnZVUuZXhlID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJcHJpbnRmIFdpbk1lcmdlVS5leGUKKwkJcmV0dXJuCisJZmkKKworCSMgTG9vayBmb3IgV2luTWVyZ2VVLmV4ZSBpbiB0aGUgdHlwaWNhbCBsb2NhdGlvbnMKKwl3aW5tZXJnZV9leGU9Ildpbk1lcmdlL1dpbk1lcmdlVS5leGUiCisJZm9yIGRpcmVjdG9yeSBpbiAkKGVudiB8IGdyZXAgLUVpICdeUFJPR1JBTShGSUxFUyhcKFg4NlwpKT98VzY0MzIpPScgfAorCQljdXQgLWQgJz0nIC1mIDItIHwgc29ydCAtdSkKKwlkbworCQlpZiB0ZXN0IC1uICIkZGlyZWN0b3J5IiAmJiB0ZXN0IC14ICIkZGlyZWN0b3J5LyR3aW5tZXJnZV9leGUiCisJCXRoZW4KKwkJCXByaW50ZiAnJXMnICIkZGlyZWN0b3J5LyR3aW5tZXJnZV9leGUiCisJCQlyZXR1cm4KKwkJZmkKKwlkb25lCisKKwlwcmludGYgV2luTWVyZ2VVLmV4ZQorfQpkaWZmIC0tZ2l0IGEvbWVyZ2V0b29scy94eGRpZmYgYi9tZXJnZXRvb2xzL3h4ZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWI0NDMzCi0tLSAvZGV2L251bGwKKysrIGIvbWVyZ2V0b29scy94eGRpZmYKQEAgLTAsMCArMSwyNSBAQAorZGlmZl9jbWQgKCkgeworCSIkbWVyZ2VfdG9vbF9wYXRoIiBcCisJCS1SICdBY2NlbC5TZWFyY2g6ICJDdHJsK0YiJyBcCisJCS1SICdBY2NlbC5TZWFyY2hGb3J3YXJkOiAiQ3RybC1HIicgXAorCQkiJExPQ0FMIiAiJFJFTU9URSIKK30KKworbWVyZ2VfY21kICgpIHsKKwl0b3VjaCAiJEJBQ0tVUCIKKwlpZiAkYmFzZV9wcmVzZW50CisJdGhlbgorCQkiJG1lcmdlX3Rvb2xfcGF0aCIgLVggLS1zaG93LW1lcmdlZC1wYW5lIFwKKwkJCS1SICdBY2NlbC5TYXZlQXNNZXJnZWQ6ICJDdHJsLVMiJyBcCisJCQktUiAnQWNjZWwuU2VhcmNoOiAiQ3RybCtGIicgXAorCQkJLVIgJ0FjY2VsLlNlYXJjaEZvcndhcmQ6ICJDdHJsLUciJyBcCisJCQktLW1lcmdlZC1maWxlICIkTUVSR0VEIiAiJExPQ0FMIiAiJEJBU0UiICIkUkVNT1RFIgorCWVsc2UKKwkJIiRtZXJnZV90b29sX3BhdGgiIC1YICRleHRyYSBcCisJCQktUiAnQWNjZWwuU2F2ZUFzTWVyZ2VkOiAiQ3RybC1TIicgXAorCQkJLVIgJ0FjY2VsLlNlYXJjaDogIkN0cmwrRiInIFwKKwkJCS1SICdBY2NlbC5TZWFyY2hGb3J3YXJkOiAiQ3RybC1HIicgXAorCQkJLS1tZXJnZWQtZmlsZSAiJE1FUkdFRCIgIiRMT0NBTCIgIiRSRU1PVEUiCisJZmkKKwljaGVja191bmNoYW5nZWQKK30KZGlmZiAtLWdpdCBhL25hbWUtaGFzaC5jIGIvbmFtZS1oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMyYmE5NQotLS0gL2Rldi9udWxsCisrKyBiL25hbWUtaGFzaC5jCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogbmFtZS1oYXNoLmMKKyAqCisgKiBIYXNoaW5nIG5hbWVzIGluIHRoZSBpbmRleCBzdGF0ZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBMaW51cyBUb3J2YWxkcworICovCisjZGVmaW5lIE5PX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0cnVjdCBkaXJfZW50cnkgeworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpwYXJlbnQ7CisJaW50IG5yOworCXVuc2lnbmVkIGludCBuYW1lbGVuOworCWNoYXIgbmFtZVtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBpbnQgZGlyX2VudHJ5X2NtcChjb25zdCBzdHJ1Y3QgZGlyX2VudHJ5ICplMSwKKwkJY29uc3Qgc3RydWN0IGRpcl9lbnRyeSAqZTIsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGUxLT5uYW1lbGVuICE9IGUyLT5uYW1lbGVuIHx8IHN0cm5jYXNlY21wKGUxLT5uYW1lLAorCQkJbmFtZSA/IG5hbWUgOiBlMi0+bmFtZSwgZTEtPm5hbWVsZW4pOworfQorCitzdGF0aWMgc3RydWN0IGRpcl9lbnRyeSAqZmluZF9kaXJfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCWNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBuYW1lbGVuKQoreworCXN0cnVjdCBkaXJfZW50cnkga2V5OworCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LCBtZW1paGFzaChuYW1lLCBuYW1lbGVuKSk7CisJa2V5Lm5hbWVsZW4gPSBuYW1lbGVuOworCXJldHVybiBoYXNobWFwX2dldCgmaXN0YXRlLT5kaXJfaGFzaCwgJmtleSwgbmFtZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGlyX2VudHJ5ICpoYXNoX2Rpcl9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IG5hbWVsZW4pCit7CisJLyoKKwkgKiBUaHJvdyBlYWNoIGRpcmVjdG9yeSBjb21wb25lbnQgaW4gdGhlIGhhc2ggZm9yIHF1aWNrIGxvb2t1cAorCSAqIGR1cmluZyBhIGdpdCBzdGF0dXMuIERpcmVjdG9yeSBjb21wb25lbnRzIGFyZSBzdG9yZWQgd2l0aG91dCB0aGVpcgorCSAqIGNsb3Npbmcgc2xhc2guICBEZXNwaXRlIHN1Ym1vZHVsZXMgYmVpbmcgYSBkaXJlY3RvcnksIHRoZXkgbmV2ZXIKKwkgKiByZWFjaCB0aGlzIHBvaW50LCBiZWNhdXNlIHRoZXkgYXJlIHN0b3JlZAorCSAqIGluIGluZGV4X3N0YXRlLm5hbWVfaGFzaCAoYXMgb3JkaW5hcnkgY2FjaGVfZW50cmllcykuCisJICovCisJc3RydWN0IGRpcl9lbnRyeSAqZGlyOworCisJLyogZ2V0IGxlbmd0aCBvZiBwYXJlbnQgZGlyZWN0b3J5ICovCisJd2hpbGUgKG5hbWVsZW4gPiAwICYmICFpc19kaXJfc2VwKGNlLT5uYW1lW25hbWVsZW4gLSAxXSkpCisJCW5hbWVsZW4tLTsKKwlpZiAobmFtZWxlbiA8PSAwKQorCQlyZXR1cm4gTlVMTDsKKwluYW1lbGVuLS07CisKKwkvKiBsb29rdXAgZXhpc3RpbmcgZW50cnkgZm9yIHRoYXQgZGlyZWN0b3J5ICovCisJZGlyID0gZmluZF9kaXJfZW50cnkoaXN0YXRlLCBjZS0+bmFtZSwgbmFtZWxlbik7CisJaWYgKCFkaXIpIHsKKwkJLyogbm90IGZvdW5kLCBjcmVhdGUgaXQgYW5kIGFkZCB0byBoYXNoIHRhYmxlICovCisJCWRpciA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBkaXJfZW50cnkpICsgbmFtZWxlbiArIDEpOworCQloYXNobWFwX2VudHJ5X2luaXQoZGlyLCBtZW1paGFzaChjZS0+bmFtZSwgbmFtZWxlbikpOworCQlkaXItPm5hbWVsZW4gPSBuYW1lbGVuOworCQlzdHJuY3B5KGRpci0+bmFtZSwgY2UtPm5hbWUsIG5hbWVsZW4pOworCQloYXNobWFwX2FkZCgmaXN0YXRlLT5kaXJfaGFzaCwgZGlyKTsKKworCQkvKiByZWN1cnNpdmVseSBhZGQgbWlzc2luZyBwYXJlbnQgZGlyZWN0b3JpZXMgKi8KKwkJZGlyLT5wYXJlbnQgPSBoYXNoX2Rpcl9lbnRyeShpc3RhdGUsIGNlLCBuYW1lbGVuKTsKKwl9CisJcmV0dXJuIGRpcjsKK30KKworc3RhdGljIHZvaWQgYWRkX2Rpcl9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwkvKiBBZGQgcmVmZXJlbmNlIHRvIHRoZSBkaXJlY3RvcnkgZW50cnkgKGFuZCBwYXJlbnRzIGlmIDApLiAqLworCXN0cnVjdCBkaXJfZW50cnkgKmRpciA9IGhhc2hfZGlyX2VudHJ5KGlzdGF0ZSwgY2UsIGNlX25hbWVsZW4oY2UpKTsKKwl3aGlsZSAoZGlyICYmICEoZGlyLT5ucisrKSkKKwkJZGlyID0gZGlyLT5wYXJlbnQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9kaXJfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJLyoKKwkgKiBSZWxlYXNlIHJlZmVyZW5jZSB0byB0aGUgZGlyZWN0b3J5IGVudHJ5LiBJZiAwLCByZW1vdmUgYW5kIGNvbnRpbnVlCisJICogd2l0aCBwYXJlbnQgZGlyZWN0b3J5LgorCSAqLworCXN0cnVjdCBkaXJfZW50cnkgKmRpciA9IGhhc2hfZGlyX2VudHJ5KGlzdGF0ZSwgY2UsIGNlX25hbWVsZW4oY2UpKTsKKwl3aGlsZSAoZGlyICYmICEoLS1kaXItPm5yKSkgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICpwYXJlbnQgPSBkaXItPnBhcmVudDsKKwkJaGFzaG1hcF9yZW1vdmUoJmlzdGF0ZS0+ZGlyX2hhc2gsIGRpciwgTlVMTCk7CisJCWZyZWUoZGlyKTsKKwkJZGlyID0gcGFyZW50OworCX0KK30KKworc3RhdGljIHZvaWQgaGFzaF9pbmRleF9lbnRyeShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfSEFTSEVEKQorCQlyZXR1cm47CisJY2UtPmNlX2ZsYWdzIHw9IENFX0hBU0hFRDsKKwloYXNobWFwX2VudHJ5X2luaXQoY2UsIG1lbWloYXNoKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSkpOworCWhhc2htYXBfYWRkKCZpc3RhdGUtPm5hbWVfaGFzaCwgY2UpOworCisJaWYgKGlnbm9yZV9jYXNlKQorCQlhZGRfZGlyX2VudHJ5KGlzdGF0ZSwgY2UpOworfQorCitzdGF0aWMgaW50IGNhY2hlX2VudHJ5X2NtcChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlMSwKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTIsIGNvbnN0IHZvaWQgKnJlbW92ZSkKK3sKKwkvKgorCSAqIEZvciByZW1vdmVfbmFtZV9oYXNoLCBmaW5kIHRoZSBleGFjdCBlbnRyeSAocG9pbnRlciBlcXVhbGl0eSk7IGZvcgorCSAqIGluZGV4X2ZpbGVfZXhpc3RzLCBmaW5kIGFsbCBlbnRyaWVzIHdpdGggbWF0Y2hpbmcgaGFzaCBjb2RlIGFuZAorCSAqIGRlY2lkZSB3aGV0aGVyIHRoZSBlbnRyeSBtYXRjaGVzIGluIHNhbWVfbmFtZS4KKwkgKi8KKwlyZXR1cm4gcmVtb3ZlID8gIShjZTEgPT0gY2UyKSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGxhenlfaW5pdF9uYW1lX2hhc2goc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IG5yOworCisJaWYgKGlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkKQorCQlyZXR1cm47CisJaGFzaG1hcF9pbml0KCZpc3RhdGUtPm5hbWVfaGFzaCwgKGhhc2htYXBfY21wX2ZuKSBjYWNoZV9lbnRyeV9jbXAsCisJCQlpc3RhdGUtPmNhY2hlX25yKTsKKwloYXNobWFwX2luaXQoJmlzdGF0ZS0+ZGlyX2hhc2gsIChoYXNobWFwX2NtcF9mbikgZGlyX2VudHJ5X2NtcCwgMCk7CisJZm9yIChuciA9IDA7IG5yIDwgaXN0YXRlLT5jYWNoZV9ucjsgbnIrKykKKwkJaGFzaF9pbmRleF9lbnRyeShpc3RhdGUsIGlzdGF0ZS0+Y2FjaGVbbnJdKTsKKwlpc3RhdGUtPm5hbWVfaGFzaF9pbml0aWFsaXplZCA9IDE7Cit9CisKK3ZvaWQgYWRkX25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQpCisJCWhhc2hfaW5kZXhfZW50cnkoaXN0YXRlLCBjZSk7Cit9CisKK3ZvaWQgcmVtb3ZlX25hbWVfaGFzaChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpZiAoIWlzdGF0ZS0+bmFtZV9oYXNoX2luaXRpYWxpemVkIHx8ICEoY2UtPmNlX2ZsYWdzICYgQ0VfSEFTSEVEKSkKKwkJcmV0dXJuOworCWNlLT5jZV9mbGFncyAmPSB+Q0VfSEFTSEVEOworCWhhc2htYXBfcmVtb3ZlKCZpc3RhdGUtPm5hbWVfaGFzaCwgY2UsIGNlKTsKKworCWlmIChpZ25vcmVfY2FzZSkKKwkJcmVtb3ZlX2Rpcl9lbnRyeShpc3RhdGUsIGNlKTsKK30KKworc3RhdGljIGludCBzbG93X3NhbWVfbmFtZShjb25zdCBjaGFyICpuYW1lMSwgaW50IGxlbjEsIGNvbnN0IGNoYXIgKm5hbWUyLCBpbnQgbGVuMikKK3sKKwlpZiAobGVuMSAhPSBsZW4yKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChsZW4xKSB7CisJCXVuc2lnbmVkIGNoYXIgYzEgPSAqbmFtZTErKzsKKwkJdW5zaWduZWQgY2hhciBjMiA9ICpuYW1lMisrOworCQlsZW4xLS07CisJCWlmIChjMSAhPSBjMikgeworCQkJYzEgPSB0b3VwcGVyKGMxKTsKKwkJCWMyID0gdG91cHBlcihjMik7CisJCQlpZiAoYzEgIT0gYzIpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgc2FtZV9uYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgaWNhc2UpCit7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCisJLyoKKwkgKiBBbHdheXMgZG8gZXhhY3QgY29tcGFyZSwgZXZlbiBpZiB3ZSB3YW50IGEgY2FzZS1pZ25vcmluZyBjb21wYXJpc29uOworCSAqIHdlIGRvIHRoZSBxdWljayBleGFjdCBvbmUgZmlyc3QsIGJlY2F1c2UgaXQgd2lsbCBiZSB0aGUgY29tbW9uIGNhc2UuCisJICovCisJaWYgKGxlbiA9PSBuYW1lbGVuICYmICFtZW1jbXAobmFtZSwgY2UtPm5hbWUsIGxlbikpCisJCXJldHVybiAxOworCisJaWYgKCFpY2FzZSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc2xvd19zYW1lX25hbWUobmFtZSwgbmFtZWxlbiwgY2UtPm5hbWUsIGxlbik7Cit9CisKK2ludCBpbmRleF9kaXJfZXhpc3RzKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKK3sKKwlzdHJ1Y3QgZGlyX2VudHJ5ICpkaXI7CisKKwlsYXp5X2luaXRfbmFtZV9oYXNoKGlzdGF0ZSk7CisJZGlyID0gZmluZF9kaXJfZW50cnkoaXN0YXRlLCBuYW1lLCBuYW1lbGVuKTsKKwlyZXR1cm4gZGlyICYmIGRpci0+bnI7Cit9CisKK3ZvaWQgYWRqdXN0X2Rpcm5hbWVfY2FzZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY2hhciAqbmFtZSkKK3sKKwljb25zdCBjaGFyICpzdGFydFB0ciA9IG5hbWU7CisJY29uc3QgY2hhciAqcHRyID0gc3RhcnRQdHI7CisKKwlsYXp5X2luaXRfbmFtZV9oYXNoKGlzdGF0ZSk7CisJd2hpbGUgKCpwdHIpIHsKKwkJd2hpbGUgKCpwdHIgJiYgKnB0ciAhPSAnLycpCisJCQlwdHIrKzsKKworCQlpZiAoKnB0ciA9PSAnLycpIHsKKwkJCXN0cnVjdCBkaXJfZW50cnkgKmRpcjsKKworCQkJcHRyKys7CisJCQlkaXIgPSBmaW5kX2Rpcl9lbnRyeShpc3RhdGUsIG5hbWUsIHB0ciAtIG5hbWUgKyAxKTsKKwkJCWlmIChkaXIpIHsKKwkJCQltZW1jcHkoKHZvaWQgKilzdGFydFB0ciwgZGlyLT5uYW1lICsgKHN0YXJ0UHRyIC0gbmFtZSksIHB0ciAtIHN0YXJ0UHRyKTsKKwkJCQlzdGFydFB0ciA9IHB0cjsKKwkJCX0KKwkJfQorCX0KK30KKworc3RydWN0IGNhY2hlX2VudHJ5ICppbmRleF9maWxlX2V4aXN0cyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBpY2FzZSkKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCisJbGF6eV9pbml0X25hbWVfaGFzaChpc3RhdGUpOworCisJY2UgPSBoYXNobWFwX2dldF9mcm9tX2hhc2goJmlzdGF0ZS0+bmFtZV9oYXNoLAorCQkJCSAgIG1lbWloYXNoKG5hbWUsIG5hbWVsZW4pLCBOVUxMKTsKKwl3aGlsZSAoY2UpIHsKKwkJaWYgKHNhbWVfbmFtZShjZSwgbmFtZSwgbmFtZWxlbiwgaWNhc2UpKQorCQkJcmV0dXJuIGNlOworCQljZSA9IGhhc2htYXBfZ2V0X25leHQoJmlzdGF0ZS0+bmFtZV9oYXNoLCBjZSk7CisJfQorCXJldHVybiBOVUxMOworfQorCit2b2lkIGZyZWVfbmFtZV9oYXNoKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWlmICghaXN0YXRlLT5uYW1lX2hhc2hfaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKwlpc3RhdGUtPm5hbWVfaGFzaF9pbml0aWFsaXplZCA9IDA7CisKKwloYXNobWFwX2ZyZWUoJmlzdGF0ZS0+bmFtZV9oYXNoLCAwKTsKKwloYXNobWFwX2ZyZWUoJmlzdGF0ZS0+ZGlyX2hhc2gsIDEpOworfQpkaWZmIC0tZ2l0IGEvbm90ZXMtY2FjaGUuYyBiL25vdGVzLWNhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzRlOWJiNwotLS0gL2Rldi9udWxsCisrKyBiL25vdGVzLWNhY2hlLmMKQEAgLTAsMCArMSw5NCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAibm90ZXMtY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisKK3N0YXRpYyBpbnQgbm90ZXNfY2FjaGVfbWF0Y2hfdmFsaWRpdHkoY29uc3QgY2hhciAqcmVmLCBjb25zdCBjaGFyICp2YWxpZGl0eSkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgcHJldHR5X2N0eDsKKwlzdHJ1Y3Qgc3RyYnVmIG1zZyA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisKKwlpZiAocmVhZF9yZWYocmVmLCBzaGExKSA8IDApCisJCXJldHVybiAwOworCisJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTEsIDEpOworCWlmICghY29tbWl0KQorCQlyZXR1cm4gMDsKKworCW1lbXNldCgmcHJldHR5X2N0eCwgMCwgc2l6ZW9mKHByZXR0eV9jdHgpKTsKKwlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiJXMiLCAmbXNnLCAmcHJldHR5X2N0eCk7CisJc3RyYnVmX3RyaW0oJm1zZyk7CisKKwlyZXQgPSAhc3RyY21wKG1zZy5idWYsIHZhbGlkaXR5KTsKKwlzdHJidWZfcmVsZWFzZSgmbXNnKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgbm90ZXNfY2FjaGVfaW5pdChzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgY29uc3QgY2hhciAqdmFsaWRpdHkpCit7CisJc3RydWN0IHN0cmJ1ZiByZWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZmxhZ3MgPSAwOworCisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworCWMtPnZhbGlkaXR5ID0geHN0cmR1cCh2YWxpZGl0eSk7CisKKwlzdHJidWZfYWRkZigmcmVmLCAicmVmcy9ub3Rlcy8lcyIsIG5hbWUpOworCWlmICghbm90ZXNfY2FjaGVfbWF0Y2hfdmFsaWRpdHkocmVmLmJ1ZiwgdmFsaWRpdHkpKQorCQlmbGFncyA9IE5PVEVTX0lOSVRfRU1QVFk7CisJaW5pdF9ub3RlcygmYy0+dHJlZSwgcmVmLmJ1ZiwgY29tYmluZV9ub3Rlc19vdmVyd3JpdGUsIGZsYWdzKTsKKwlzdHJidWZfcmVsZWFzZSgmcmVmKTsKK30KKworaW50IG5vdGVzX2NhY2hlX3dyaXRlKHN0cnVjdCBub3Rlc19jYWNoZSAqYykKK3sKKwl1bnNpZ25lZCBjaGFyIHRyZWVfc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciBjb21taXRfc2hhMVsyMF07CisKKwlpZiAoIWMgfHwgIWMtPnRyZWUuaW5pdGlhbGl6ZWQgfHwgIWMtPnRyZWUucmVmIHx8ICEqYy0+dHJlZS5yZWYpCisJCXJldHVybiAtMTsKKwlpZiAoIWMtPnRyZWUuZGlydHkpCisJCXJldHVybiAwOworCisJaWYgKHdyaXRlX25vdGVzX3RyZWUoJmMtPnRyZWUsIHRyZWVfc2hhMSkpCisJCXJldHVybiAtMTsKKwlpZiAoY29tbWl0X3RyZWUoYy0+dmFsaWRpdHksIHN0cmxlbihjLT52YWxpZGl0eSksIHRyZWVfc2hhMSwgTlVMTCwKKwkJCWNvbW1pdF9zaGExLCBOVUxMLCBOVUxMKSA8IDApCisJCXJldHVybiAtMTsKKwlpZiAodXBkYXRlX3JlZigidXBkYXRlIG5vdGVzIGNhY2hlIiwgYy0+dHJlZS5yZWYsIGNvbW1pdF9zaGExLCBOVUxMLAorCQkgICAgICAgMCwgVVBEQVRFX1JFRlNfUVVJRVRfT05fRVJSKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitjaGFyICpub3Rlc19jYWNoZV9nZXQoc3RydWN0IG5vdGVzX2NhY2hlICpjLCB1bnNpZ25lZCBjaGFyIGtleV9zaGExWzIwXSwKKwkJICAgICAgc2l6ZV90ICpvdXRzaXplKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnZhbHVlX3NoYTE7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgKnZhbHVlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCXZhbHVlX3NoYTEgPSBnZXRfbm90ZSgmYy0+dHJlZSwga2V5X3NoYTEpOworCWlmICghdmFsdWVfc2hhMSkKKwkJcmV0dXJuIE5VTEw7CisJdmFsdWUgPSByZWFkX3NoYTFfZmlsZSh2YWx1ZV9zaGExLCAmdHlwZSwgJnNpemUpOworCisJKm91dHNpemUgPSBzaXplOworCXJldHVybiB2YWx1ZTsKK30KKworaW50IG5vdGVzX2NhY2hlX3B1dChzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMsIHVuc2lnbmVkIGNoYXIga2V5X3NoYTFbMjBdLAorCQkgICAgY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJdW5zaWduZWQgY2hhciB2YWx1ZV9zaGExWzIwXTsKKworCWlmICh3cml0ZV9zaGExX2ZpbGUoZGF0YSwgc2l6ZSwgImJsb2IiLCB2YWx1ZV9zaGExKSA8IDApCisJCXJldHVybiAtMTsKKwlyZXR1cm4gYWRkX25vdGUoJmMtPnRyZWUsIGtleV9zaGExLCB2YWx1ZV9zaGExLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL25vdGVzLWNhY2hlLmggYi9ub3Rlcy1jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NmY4OGYKLS0tIC9kZXYvbnVsbAorKysgYi9ub3Rlcy1jYWNoZS5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgTk9URVNfQ0FDSEVfSAorI2RlZmluZSBOT1RFU19DQUNIRV9ICisKKyNpbmNsdWRlICJub3Rlcy5oIgorCitzdHJ1Y3Qgbm90ZXNfY2FjaGUgeworCXN0cnVjdCBub3Rlc190cmVlIHRyZWU7CisJY2hhciAqdmFsaWRpdHk7Cit9OworCit2b2lkIG5vdGVzX2NhY2hlX2luaXQoc3RydWN0IG5vdGVzX2NhY2hlICpjLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgIGNvbnN0IGNoYXIgKnZhbGlkaXR5KTsKK2ludCBub3Rlc19jYWNoZV93cml0ZShzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMpOworCitjaGFyICpub3Rlc19jYWNoZV9nZXQoc3RydWN0IG5vdGVzX2NhY2hlICpjLCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCBzaXplX3QKKwkJICAgICAgKm91dHNpemUpOworaW50IG5vdGVzX2NhY2hlX3B1dChzdHJ1Y3Qgbm90ZXNfY2FjaGUgKmMsIHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0sCisJCSAgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKKyNlbmRpZiAvKiBOT1RFU19DQUNIRV9IICovCmRpZmYgLS1naXQgYS9ub3Rlcy1tZXJnZS5jIGIvbm90ZXMtbWVyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2QxZGFiCi0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMtbWVyZ2UuYwpAQCAtMCwwICsxLDc1MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgImxsLW1lcmdlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJub3Rlcy1tZXJnZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgIm5vdGVzLXV0aWxzLmgiCisKK3N0cnVjdCBub3Rlc19tZXJnZV9wYWlyIHsKKwl1bnNpZ25lZCBjaGFyIG9ialsyMF0sIGJhc2VbMjBdLCBsb2NhbFsyMF0sIHJlbW90ZVsyMF07Cit9OworCit2b2lkIGluaXRfbm90ZXNfbWVyZ2Vfb3B0aW9ucyhzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbykKK3sKKwltZW1zZXQobywgMCwgc2l6ZW9mKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zKSk7CisJc3RyYnVmX2luaXQoJihvLT5jb21taXRfbXNnKSwgMCk7CisJby0+dmVyYm9zaXR5ID0gTk9URVNfTUVSR0VfVkVSQk9TSVRZX0RFRkFVTFQ7Cit9CisKK3N0YXRpYyBpbnQgcGF0aF90b19zaGExKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJY2hhciBoZXhfc2hhMVs0MF07CisJaW50IGkgPSAwOworCXdoaWxlICgqcGF0aCAmJiBpIDwgNDApIHsKKwkJaWYgKCpwYXRoICE9ICcvJykKKwkJCWhleF9zaGExW2krK10gPSAqcGF0aDsKKwkJcGF0aCsrOworCX0KKwlpZiAoKnBhdGggfHwgaSAhPSA0MCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBnZXRfc2hhMV9oZXgoaGV4X3NoYTEsIHNoYTEpOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9ub3Rlc19maWxlcGFpcihzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzd2l0Y2ggKHAtPnN0YXR1cykgeworCWNhc2UgRElGRl9TVEFUVVNfTU9ESUZJRUQ6CisJCWFzc2VydChwLT5vbmUtPm1vZGUgPT0gcC0+dHdvLT5tb2RlKTsKKwkJYXNzZXJ0KCFpc19udWxsX3NoYTEocC0+b25lLT5zaGExKSk7CisJCWFzc2VydCghaXNfbnVsbF9zaGExKHAtPnR3by0+c2hhMSkpOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX0FEREVEOgorCQlhc3NlcnQoaXNfbnVsbF9zaGExKHAtPm9uZS0+c2hhMSkpOworCQlicmVhazsKKwljYXNlIERJRkZfU1RBVFVTX0RFTEVURUQ6CisJCWFzc2VydChpc19udWxsX3NoYTEocC0+dHdvLT5zaGExKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJYXNzZXJ0KCFzdHJjbXAocC0+b25lLT5wYXRoLCBwLT50d28tPnBhdGgpKTsKKwlyZXR1cm4gcGF0aF90b19zaGExKHAtPm9uZS0+cGF0aCwgc2hhMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciAqZmluZF9ub3Rlc19tZXJnZV9wYWlyX3BvcygKKwkJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmxpc3QsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKm9iaiwKKwkJaW50IGluc2VydF9uZXcsIGludCAqb2NjdXBpZWQpCit7CisJLyoKKwkgKiBCb3RoIGRpZmZfdHJlZV9yZW1vdGUoKSBhbmQgZGlmZl90cmVlX2xvY2FsKCkgdGVuZCB0byBwcm9jZXNzCisJICogbWVyZ2VfcGFpcnMgaW4gYXNjZW5kaW5nIG9yZGVyLiBUaGVyZWZvcmUsIGNhY2hlIGxhc3QgcmV0dXJuZWQKKwkgKiBpbmRleCwgYW5kIHNlYXJjaCBzZXF1ZW50aWFsbHkgZnJvbSB0aGVyZSB1bnRpbCB0aGUgYXBwcm9wcmlhdGUKKwkgKiBwb3NpdGlvbiBpcyBmb3VuZC4KKwkgKgorCSAqIFNpbmNlIGluc2VydHMgb25seSBoYXBwZW4gZnJvbSBkaWZmX3RyZWVfcmVtb3RlKCkgKHdoaWNoIG1haW5seQorCSAqIF9hcHBlbmRzXyksIHdlIGRvbid0IGNhcmUgdGhhdCBpbnNlcnRpbmcgaW50byB0aGUgbWlkZGxlIG9mIHRoZQorCSAqIGxpc3QgaXMgZXhwZW5zaXZlICh1c2luZyBtZW1tb3ZlKCkpLgorCSAqLworCXN0YXRpYyBpbnQgbGFzdF9pbmRleDsKKwlpbnQgaSA9IGxhc3RfaW5kZXggPCBsZW4gPyBsYXN0X2luZGV4IDogbGVuIC0gMTsKKwlpbnQgcHJldl9jbXAgPSAwLCBjbXAgPSAtMTsKKwl3aGlsZSAoaSA+PSAwICYmIGkgPCBsZW4pIHsKKwkJY21wID0gaGFzaGNtcChvYmosIGxpc3RbaV0ub2JqKTsKKwkJaWYgKCFjbXApIC8qIG9iaiBiZWxvbmdzIEAgaSAqLworCQkJYnJlYWs7CisJCWVsc2UgaWYgKGNtcCA8IDAgJiYgcHJldl9jbXAgPD0gMCkgLyogb2JqIGJlbG9uZ3MgPCBpICovCisJCQlpLS07CisJCWVsc2UgaWYgKGNtcCA8IDApIC8qIG9iaiBiZWxvbmdzIGJldHdlZW4gaS0xIGFuZCBpICovCisJCQlicmVhazsKKwkJZWxzZSBpZiAoY21wID4gMCAmJiBwcmV2X2NtcCA+PSAwKSAvKiBvYmogYmVsb25ncyA+IGkgKi8KKwkJCWkrKzsKKwkJZWxzZSAvKiBpZiAoY21wID4gMCkgKi8geyAvKiBvYmogYmVsb25ncyBiZXR3ZWVuIGkgYW5kIGkrMSAqLworCQkJaSsrOworCQkJYnJlYWs7CisJCX0KKwkJcHJldl9jbXAgPSBjbXA7CisJfQorCWlmIChpIDwgMCkKKwkJaSA9IDA7CisJLyogb2JqIGJlbG9uZ3MgYXQsIG9yIGltbWVkaWF0ZWx5IHByZWNlZGluZywgaW5kZXggaSAoMCA8PSBpIDw9IGxlbikgKi8KKworCWlmICghY21wKQorCQkqb2NjdXBpZWQgPSAxOworCWVsc2UgeworCQkqb2NjdXBpZWQgPSAwOworCQlpZiAoaW5zZXJ0X25ldyAmJiBpIDwgbGVuKSB7CisJCQltZW1tb3ZlKGxpc3QgKyBpICsgMSwgbGlzdCArIGksCisJCQkJKGxlbiAtIGkpICogc2l6ZW9mKHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyKSk7CisJCQltZW1zZXQobGlzdCArIGksIDAsIHNpemVvZihzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpcikpOworCQl9CisJfQorCWxhc3RfaW5kZXggPSBpOworCXJldHVybiBsaXN0ICsgaTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdW5pbml0aWFsaXplZFsyMF0gPQorCSJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIiBcCisJIlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiOworCitzdGF0aWMgc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmRpZmZfdHJlZV9yZW1vdGUoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCQkJCQkgY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZSwKKwkJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpyZW1vdGUsCisJCQkJCQkgaW50ICpudW1fY2hhbmdlcykKK3sKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIG9wdDsKKwlzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciAqY2hhbmdlczsKKwlpbnQgaSwgbGVuID0gMDsKKworCXRyYWNlX3ByaW50ZigiXHRkaWZmX3RyZWVfcmVtb3RlKGJhc2UgPSAlLjdzLCByZW1vdGUgPSAlLjdzKVxuIiwKKwkgICAgICAgc2hhMV90b19oZXgoYmFzZSksIHNoYTFfdG9faGV4KHJlbW90ZSkpOworCisJZGlmZl9zZXR1cCgmb3B0KTsKKwlESUZGX09QVF9TRVQoJm9wdCwgUkVDVVJTSVZFKTsKKwlvcHQub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlkaWZmX3NldHVwX2RvbmUoJm9wdCk7CisJZGlmZl90cmVlX3NoYTEoYmFzZSwgcmVtb3RlLCAiIiwgJm9wdCk7CisJZGlmZmNvcmVfc3RkKCZvcHQpOworCisJY2hhbmdlcyA9IHhjYWxsb2MoZGlmZl9xdWV1ZWRfZGlmZi5uciwgc2l6ZW9mKHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlmZl9xdWV1ZWRfZGlmZi5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gZGlmZl9xdWV1ZWRfZGlmZi5xdWV1ZVtpXTsKKwkJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKm1wOworCQlpbnQgb2NjdXBpZWQ7CisJCXVuc2lnbmVkIGNoYXIgb2JqWzIwXTsKKworCQlpZiAodmVyaWZ5X25vdGVzX2ZpbGVwYWlyKHAsIG9iaikpIHsKKwkJCXRyYWNlX3ByaW50ZigiXHRcdENhbm5vdCBtZXJnZSBlbnRyeSAnJXMnICglYyk6ICIKKwkJCSAgICAgICAiJS43cyAtPiAlLjdzLiBTa2lwcGluZyFcbiIsIHAtPm9uZS0+cGF0aCwKKwkJCSAgICAgICBwLT5zdGF0dXMsIHNoYTFfdG9faGV4KHAtPm9uZS0+c2hhMSksCisJCQkgICAgICAgc2hhMV90b19oZXgocC0+dHdvLT5zaGExKSk7CisJCQljb250aW51ZTsKKwkJfQorCQltcCA9IGZpbmRfbm90ZXNfbWVyZ2VfcGFpcl9wb3MoY2hhbmdlcywgbGVuLCBvYmosIDEsICZvY2N1cGllZCk7CisJCWlmIChvY2N1cGllZCkgeworCQkJLyogV2UndmUgZm91bmQgYW4gYWRkaXRpb24vZGVsZXRpb24gcGFpciAqLworCQkJYXNzZXJ0KCFoYXNoY21wKG1wLT5vYmosIG9iaikpOworCQkJaWYgKGlzX251bGxfc2hhMShwLT5vbmUtPnNoYTEpKSB7IC8qIGFkZGl0aW9uICovCisJCQkJYXNzZXJ0KGlzX251bGxfc2hhMShtcC0+cmVtb3RlKSk7CisJCQkJaGFzaGNweShtcC0+cmVtb3RlLCBwLT50d28tPnNoYTEpOworCQkJfSBlbHNlIGlmIChpc19udWxsX3NoYTEocC0+dHdvLT5zaGExKSkgeyAvKiBkZWxldGlvbiAqLworCQkJCWFzc2VydChpc19udWxsX3NoYTEobXAtPmJhc2UpKTsKKwkJCQloYXNoY3B5KG1wLT5iYXNlLCBwLT5vbmUtPnNoYTEpOworCQkJfSBlbHNlCisJCQkJYXNzZXJ0KCEiSW52YWxpZCBleGlzdGluZyBjaGFuZ2UgcmVjb3JkZWQiKTsKKwkJfSBlbHNlIHsKKwkJCWhhc2hjcHkobXAtPm9iaiwgb2JqKTsKKwkJCWhhc2hjcHkobXAtPmJhc2UsIHAtPm9uZS0+c2hhMSk7CisJCQloYXNoY3B5KG1wLT5sb2NhbCwgdW5pbml0aWFsaXplZCk7CisJCQloYXNoY3B5KG1wLT5yZW1vdGUsIHAtPnR3by0+c2hhMSk7CisJCQlsZW4rKzsKKwkJfQorCQl0cmFjZV9wcmludGYoIlx0XHRTdG9yZWQgcmVtb3RlIGNoYW5nZSBmb3IgJXM6ICUuN3MgLT4gJS43c1xuIiwKKwkJICAgICAgIHNoYTFfdG9faGV4KG1wLT5vYmopLCBzaGExX3RvX2hleChtcC0+YmFzZSksCisJCSAgICAgICBzaGExX3RvX2hleChtcC0+cmVtb3RlKSk7CisJfQorCWRpZmZfZmx1c2goJm9wdCk7CisJZnJlZV9wYXRoc3BlYygmb3B0LnBhdGhzcGVjKTsKKworCSpudW1fY2hhbmdlcyA9IGxlbjsKKwlyZXR1cm4gY2hhbmdlczsKK30KKworc3RhdGljIHZvaWQgZGlmZl90cmVlX2xvY2FsKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkJICAgIHN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICpjaGFuZ2VzLCBpbnQgbGVuLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2UsCisJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbG9jYWwpCit7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBvcHQ7CisJaW50IGk7CisKKwl0cmFjZV9wcmludGYoIlx0ZGlmZl90cmVlX2xvY2FsKGxlbiA9ICVpLCBiYXNlID0gJS43cywgbG9jYWwgPSAlLjdzKVxuIiwKKwkgICAgICAgbGVuLCBzaGExX3RvX2hleChiYXNlKSwgc2hhMV90b19oZXgobG9jYWwpKTsKKworCWRpZmZfc2V0dXAoJm9wdCk7CisJRElGRl9PUFRfU0VUKCZvcHQsIFJFQ1VSU0lWRSk7CisJb3B0Lm91dHB1dF9mb3JtYXQgPSBESUZGX0ZPUk1BVF9OT19PVVRQVVQ7CisJZGlmZl9zZXR1cF9kb25lKCZvcHQpOworCWRpZmZfdHJlZV9zaGExKGJhc2UsIGxvY2FsLCAiIiwgJm9wdCk7CisJZGlmZmNvcmVfc3RkKCZvcHQpOworCisJZm9yIChpID0gMDsgaSA8IGRpZmZfcXVldWVkX2RpZmYubnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IGRpZmZfcXVldWVkX2RpZmYucXVldWVbaV07CisJCXN0cnVjdCBub3Rlc19tZXJnZV9wYWlyICptcDsKKwkJaW50IG1hdGNoOworCQl1bnNpZ25lZCBjaGFyIG9ialsyMF07CisKKwkJaWYgKHZlcmlmeV9ub3Rlc19maWxlcGFpcihwLCBvYmopKSB7CisJCQl0cmFjZV9wcmludGYoIlx0XHRDYW5ub3QgbWVyZ2UgZW50cnkgJyVzJyAoJWMpOiAiCisJCQkgICAgICAgIiUuN3MgLT4gJS43cy4gU2tpcHBpbmchXG4iLCBwLT5vbmUtPnBhdGgsCisJCQkgICAgICAgcC0+c3RhdHVzLCBzaGExX3RvX2hleChwLT5vbmUtPnNoYTEpLAorCQkJICAgICAgIHNoYTFfdG9faGV4KHAtPnR3by0+c2hhMSkpOworCQkJY29udGludWU7CisJCX0KKwkJbXAgPSBmaW5kX25vdGVzX21lcmdlX3BhaXJfcG9zKGNoYW5nZXMsIGxlbiwgb2JqLCAwLCAmbWF0Y2gpOworCQlpZiAoIW1hdGNoKSB7CisJCQl0cmFjZV9wcmludGYoIlx0XHRJZ25vcmluZyBsb2NhbC1vbmx5IGNoYW5nZSBmb3IgJXM6ICIKKwkJCSAgICAgICAiJS43cyAtPiAlLjdzXG4iLCBzaGExX3RvX2hleChvYmopLAorCQkJICAgICAgIHNoYTFfdG9faGV4KHAtPm9uZS0+c2hhMSksCisJCQkgICAgICAgc2hhMV90b19oZXgocC0+dHdvLT5zaGExKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWFzc2VydCghaGFzaGNtcChtcC0+b2JqLCBvYmopKTsKKwkJaWYgKGlzX251bGxfc2hhMShwLT50d28tPnNoYTEpKSB7IC8qIGRlbGV0aW9uICovCisJCQkvKgorCQkJICogRWl0aGVyIHRoaXMgaXMgYSB0cnVlIGRlbGV0aW9uICgxKSwgb3IgaXQgaXMgcGFydAorCQkJICogb2YgYW4gQS9EIHBhaXIgKDIpLCBvciBEL0EgcGFpciAoMyk6CisJCQkgKgorCQkJICogKDEpIG1wLT5sb2NhbCBpcyB1bmluaXRpYWxpemVkOyBzZXQgaXQgdG8gbnVsbF9zaGExCisJCQkgKiAoMikgbXAtPmxvY2FsIGlzIG5vdCB1bmluaXRpYWxpemVkOyBkb24ndCB0b3VjaCBpdAorCQkJICogKDMpIG1wLT5sb2NhbCBpcyB1bmluaXRpYWxpemVkOyBzZXQgaXQgdG8gbnVsbF9zaGExCisJCQkgKiAgICAgKHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgZm9sbG93aW5nIGFkZGl0aW9uKQorCQkJICovCisJCQlpZiAoIWhhc2hjbXAobXAtPmxvY2FsLCB1bmluaXRpYWxpemVkKSkKKwkJCQloYXNoY2xyKG1wLT5sb2NhbCk7CisJCX0gZWxzZSBpZiAoaXNfbnVsbF9zaGExKHAtPm9uZS0+c2hhMSkpIHsgLyogYWRkaXRpb24gKi8KKwkJCS8qCisJCQkgKiBFaXRoZXIgdGhpcyBpcyBhIHRydWUgYWRkaXRpb24gKDEpLCBvciBpdCBpcyBwYXJ0CisJCQkgKiBvZiBhbiBBL0QgcGFpciAoMiksIG9yIEQvQSBwYWlyICgzKToKKwkJCSAqCisJCQkgKiAoMSkgbXAtPmxvY2FsIGlzIHVuaW5pdGlhbGl6ZWQ7IHNldCB0byBwLT50d28tPnNoYTEKKwkJCSAqICgyKSBtcC0+bG9jYWwgaXMgdW5pbml0aWFsaXplZDsgc2V0IHRvIHAtPnR3by0+c2hhMQorCQkJICogKDMpIG1wLT5sb2NhbCBpcyBudWxsX3NoYTE7ICAgICBzZXQgdG8gcC0+dHdvLT5zaGExCisJCQkgKi8KKwkJCWFzc2VydChpc19udWxsX3NoYTEobXAtPmxvY2FsKSB8fAorCQkJICAgICAgICFoYXNoY21wKG1wLT5sb2NhbCwgdW5pbml0aWFsaXplZCkpOworCQkJaGFzaGNweShtcC0+bG9jYWwsIHAtPnR3by0+c2hhMSk7CisJCX0gZWxzZSB7IC8qIG1vZGlmaWNhdGlvbiAqLworCQkJLyoKKwkJCSAqIFRoaXMgaXMgYSB0cnVlIG1vZGlmaWNhdGlvbi4gcC0+b25lLT5zaGExIHNoYWxsCisJCQkgKiBtYXRjaCBtcC0+YmFzZSwgYW5kIG1wLT5sb2NhbCBzaGFsbCBiZSB1bmluaXRpYWxpemVkLgorCQkJICogU2V0IG1wLT5sb2NhbCB0byBwLT50d28tPnNoYTEuCisJCQkgKi8KKwkJCWFzc2VydCghaGFzaGNtcChwLT5vbmUtPnNoYTEsIG1wLT5iYXNlKSk7CisJCQlhc3NlcnQoIWhhc2hjbXAobXAtPmxvY2FsLCB1bmluaXRpYWxpemVkKSk7CisJCQloYXNoY3B5KG1wLT5sb2NhbCwgcC0+dHdvLT5zaGExKTsKKwkJfQorCQl0cmFjZV9wcmludGYoIlx0XHRTdG9yZWQgbG9jYWwgY2hhbmdlIGZvciAlczogJS43cyAtPiAlLjdzXG4iLAorCQkgICAgICAgc2hhMV90b19oZXgobXAtPm9iaiksIHNoYTFfdG9faGV4KG1wLT5iYXNlKSwKKwkJICAgICAgIHNoYTFfdG9faGV4KG1wLT5sb2NhbCkpOworCX0KKwlkaWZmX2ZsdXNoKCZvcHQpOworCWZyZWVfcGF0aHNwZWMoJm9wdC5wYXRoc3BlYyk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX25vdGVzX21lcmdlX3dvcmt0cmVlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvKQoreworCWlmICghby0+aGFzX3dvcmt0cmVlKSB7CisJCS8qCisJCSAqIE11c3QgZXN0YWJsaXNoIE5PVEVTX01FUkdFX1dPUktUUkVFLgorCQkgKiBBYm9ydCBpZiBOT1RFU19NRVJHRV9XT1JLVFJFRSBhbHJlYWR5IGV4aXN0cworCQkgKi8KKwkJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoKE5PVEVTX01FUkdFX1dPUktUUkVFKSkgJiYKKwkJICAgICFpc19lbXB0eV9kaXIoZ2l0X3BhdGgoTk9URVNfTUVSR0VfV09SS1RSRUUpKSkgeworCQkJaWYgKGFkdmljZV9yZXNvbHZlX2NvbmZsaWN0KQorCQkJCWRpZSgiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIHByZXZpb3VzICIKKwkJCQkgICAgIm5vdGVzIG1lcmdlICglcyBleGlzdHMpLlxuUGxlYXNlLCB1c2UgIgorCQkJCSAgICAiJ2dpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCcgb3IgJ2dpdCBub3RlcyAiCisJCQkJICAgICJtZXJnZSAtLWFib3J0JyB0byBjb21taXQvYWJvcnQgdGhlICIKKwkJCQkgICAgInByZXZpb3VzIG1lcmdlIGJlZm9yZSB5b3Ugc3RhcnQgYSBuZXcgIgorCQkJCSAgICAibm90ZXMgbWVyZ2UuIiwgZ2l0X3BhdGgoIk5PVEVTX01FUkdFXyoiKSk7CisJCQllbHNlCisJCQkJZGllKCJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbm90ZXMgbWVyZ2UgIgorCQkJCSAgICAiKCVzIGV4aXN0cykuIiwgZ2l0X3BhdGgoIk5PVEVTX01FUkdFXyoiKSk7CisJCX0KKworCQlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChnaXRfcGF0aCgKKwkJCQlOT1RFU19NRVJHRV9XT1JLVFJFRSAiLy50ZXN0IikpKQorCQkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIsCisJCQkJICBnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpOworCQlvLT5oYXNfd29ya3RyZWUgPSAxOworCX0gZWxzZSBpZiAoIWZpbGVfZXhpc3RzKGdpdF9wYXRoKE5PVEVTX01FUkdFX1dPUktUUkVFKSkpCisJCS8qIE5PVEVTX01FUkdFX1dPUktUUkVFIHNob3VsZCBhbHJlYWR5IGJlIGVzdGFibGlzaGVkICovCisJCWRpZSgibWlzc2luZyAnJXMnLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuIiwKKwkJICAgIGdpdF9wYXRoKE5PVEVTX01FUkdFX1dPUktUUkVFKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2J1Zl90b193b3JrdHJlZShjb25zdCB1bnNpZ25lZCBjaGFyICpvYmosCisJCQkJICBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgZmQ7CisJY2hhciAqcGF0aCA9IGdpdF9wYXRoZHVwKE5PVEVTX01FUkdFX1dPUktUUkVFICIvJXMiLCBzaGExX3RvX2hleChvYmopKTsKKwlpZiAoc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3Rvcmllc19jb25zdChwYXRoKSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgJyVzJyIsIHBhdGgpOworCWlmIChmaWxlX2V4aXN0cyhwYXRoKSkKKwkJZGllKCJmb3VuZCBleGlzdGluZyBmaWxlIGF0ICclcyciLCBwYXRoKTsKKworCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fVFJVTkMgfCBPX0NSRUFULCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oImZhaWxlZCB0byBvcGVuICclcyciLCBwYXRoKTsKKworCXdoaWxlIChzaXplID4gMCkgeworCQlsb25nIHJldCA9IHdyaXRlX2luX2Z1bGwoZmQsIGJ1Ziwgc2l6ZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQkvKiBJZ25vcmUgZXBpcGUgKi8KKwkJCWlmIChlcnJubyA9PSBFUElQRSkKKwkJCQlicmVhazsKKwkJCWRpZV9lcnJubygibm90ZXMtbWVyZ2UiKTsKKwkJfSBlbHNlIGlmICghcmV0KSB7CisJCQlkaWUoIm5vdGVzLW1lcmdlOiBkaXNrIGZ1bGw/Iik7CisJCX0KKwkJc2l6ZSAtPSByZXQ7CisJCWJ1ZiArPSByZXQ7CisJfQorCisJY2xvc2UoZmQpOworCWZyZWUocGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX25vdGVfdG9fd29ya3RyZWUoY29uc3QgdW5zaWduZWQgY2hhciAqb2JqLAorCQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGUpCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl2b2lkICpidWYgPSByZWFkX3NoYTFfZmlsZShub3RlLCAmdHlwZSwgJnNpemUpOworCisJaWYgKCFidWYpCisJCWRpZSgiY2Fubm90IHJlYWQgbm90ZSAlcyBmb3Igb2JqZWN0ICVzIiwKKwkJICAgIHNoYTFfdG9faGV4KG5vdGUpLCBzaGExX3RvX2hleChvYmopKTsKKwlpZiAodHlwZSAhPSBPQkpfQkxPQikKKwkJZGllKCJibG9iIGV4cGVjdGVkIGluIG5vdGUgJXMgZm9yIG9iamVjdCAlcyIsCisJCSAgICBzaGExX3RvX2hleChub3RlKSwgc2hhMV90b19oZXgob2JqKSk7CisJd3JpdGVfYnVmX3RvX3dvcmt0cmVlKG9iaiwgYnVmLCBzaXplKTsKKwlmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyBpbnQgbGxfbWVyZ2VfaW5fd29ya3RyZWUoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCQkJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKnApCit7CisJbW1idWZmZXJfdCByZXN1bHRfYnVmOworCW1tZmlsZV90IGJhc2UsIGxvY2FsLCByZW1vdGU7CisJaW50IHN0YXR1czsKKworCXJlYWRfbW1ibG9iKCZiYXNlLCBwLT5iYXNlKTsKKwlyZWFkX21tYmxvYigmbG9jYWwsIHAtPmxvY2FsKTsKKwlyZWFkX21tYmxvYigmcmVtb3RlLCBwLT5yZW1vdGUpOworCisJc3RhdHVzID0gbGxfbWVyZ2UoJnJlc3VsdF9idWYsIHNoYTFfdG9faGV4KHAtPm9iaiksICZiYXNlLCBOVUxMLAorCQkJICAmbG9jYWwsIG8tPmxvY2FsX3JlZiwgJnJlbW90ZSwgby0+cmVtb3RlX3JlZiwgTlVMTCk7CisKKwlmcmVlKGJhc2UucHRyKTsKKwlmcmVlKGxvY2FsLnB0cik7CisJZnJlZShyZW1vdGUucHRyKTsKKworCWlmICgoc3RhdHVzIDwgMCkgfHwgIXJlc3VsdF9idWYucHRyKQorCQlkaWUoIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIik7CisKKwl3cml0ZV9idWZfdG9fd29ya3RyZWUocC0+b2JqLCByZXN1bHRfYnVmLnB0ciwgcmVzdWx0X2J1Zi5zaXplKTsKKwlmcmVlKHJlc3VsdF9idWYucHRyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2Vfb25lX2NoYW5nZV9tYW51YWwoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCQkJICAgc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKnAsCisJCQkJICAgc3RydWN0IG5vdGVzX3RyZWUgKnQpCit7CisJY29uc3QgY2hhciAqbHJlZiA9IG8tPmxvY2FsX3JlZiA/IG8tPmxvY2FsX3JlZiA6ICJsb2NhbCB2ZXJzaW9uIjsKKwljb25zdCBjaGFyICpycmVmID0gby0+cmVtb3RlX3JlZiA/IG8tPnJlbW90ZV9yZWYgOiAicmVtb3RlIHZlcnNpb24iOworCisJdHJhY2VfcHJpbnRmKCJcdFx0XHRtZXJnZV9vbmVfY2hhbmdlX21hbnVhbChvYmogPSAlLjdzLCBiYXNlID0gJS43cywgIgorCSAgICAgICAibG9jYWwgPSAlLjdzLCByZW1vdGUgPSAlLjdzKVxuIiwKKwkgICAgICAgc2hhMV90b19oZXgocC0+b2JqKSwgc2hhMV90b19oZXgocC0+YmFzZSksCisJICAgICAgIHNoYTFfdG9faGV4KHAtPmxvY2FsKSwgc2hhMV90b19oZXgocC0+cmVtb3RlKSk7CisKKwkvKiBhZGQgIkNvbmZsaWN0czoiIHNlY3Rpb24gdG8gY29tbWl0IG1lc3NhZ2UgZmlyc3QgdGltZSB0aHJvdWdoICovCisJaWYgKCFvLT5oYXNfd29ya3RyZWUpCisJCXN0cmJ1Zl9hZGRzdHIoJihvLT5jb21taXRfbXNnKSwgIlxuXG5Db25mbGljdHM6XG4iKTsKKworCXN0cmJ1Zl9hZGRmKCYoby0+Y29tbWl0X21zZyksICJcdCVzXG4iLCBzaGExX3RvX2hleChwLT5vYmopKTsKKworCWlmIChvLT52ZXJib3NpdHkgPj0gMikKKwkJcHJpbnRmKCJBdXRvLW1lcmdpbmcgbm90ZXMgZm9yICVzXG4iLCBzaGExX3RvX2hleChwLT5vYmopKTsKKwljaGVja19ub3Rlc19tZXJnZV93b3JrdHJlZShvKTsKKwlpZiAoaXNfbnVsbF9zaGExKHAtPmxvY2FsKSkgeworCQkvKiBEL0YgY29uZmxpY3QsIGNoZWNrb3V0IHAtPnJlbW90ZSAqLworCQlhc3NlcnQoIWlzX251bGxfc2hhMShwLT5yZW1vdGUpKTsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAxKQorCQkJcHJpbnRmKCJDT05GTElDVCAoZGVsZXRlL21vZGlmeSk6IE5vdGVzIGZvciBvYmplY3QgJXMgIgorCQkJCSJkZWxldGVkIGluICVzIGFuZCBtb2RpZmllZCBpbiAlcy4gVmVyc2lvbiBmcm9tICVzICIKKwkJCQkibGVmdCBpbiB0cmVlLlxuIiwKKwkJCQlzaGExX3RvX2hleChwLT5vYmopLCBscmVmLCBycmVmLCBycmVmKTsKKwkJd3JpdGVfbm90ZV90b193b3JrdHJlZShwLT5vYmosIHAtPnJlbW90ZSk7CisJfSBlbHNlIGlmIChpc19udWxsX3NoYTEocC0+cmVtb3RlKSkgeworCQkvKiBEL0YgY29uZmxpY3QsIGNoZWNrb3V0IHAtPmxvY2FsICovCisJCWFzc2VydCghaXNfbnVsbF9zaGExKHAtPmxvY2FsKSk7CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMSkKKwkJCXByaW50ZigiQ09ORkxJQ1QgKGRlbGV0ZS9tb2RpZnkpOiBOb3RlcyBmb3Igb2JqZWN0ICVzICIKKwkJCQkiZGVsZXRlZCBpbiAlcyBhbmQgbW9kaWZpZWQgaW4gJXMuIFZlcnNpb24gZnJvbSAlcyAiCisJCQkJImxlZnQgaW4gdHJlZS5cbiIsCisJCQkJc2hhMV90b19oZXgocC0+b2JqKSwgcnJlZiwgbHJlZiwgbHJlZik7CisJCXdyaXRlX25vdGVfdG9fd29ya3RyZWUocC0+b2JqLCBwLT5sb2NhbCk7CisJfSBlbHNlIHsKKwkJLyogInJlZ3VsYXIiIGNvbmZsaWN0LCBjaGVja291dCByZXN1bHQgb2YgbGxfbWVyZ2UoKSAqLworCQljb25zdCBjaGFyICpyZWFzb24gPSAiY29udGVudCI7CisJCWlmIChpc19udWxsX3NoYTEocC0+YmFzZSkpCisJCQlyZWFzb24gPSAiYWRkL2FkZCI7CisJCWFzc2VydCghaXNfbnVsbF9zaGExKHAtPmxvY2FsKSk7CisJCWFzc2VydCghaXNfbnVsbF9zaGExKHAtPnJlbW90ZSkpOworCQlpZiAoby0+dmVyYm9zaXR5ID49IDEpCisJCQlwcmludGYoIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluIG5vdGVzIGZvciAiCisJCQkJIm9iamVjdCAlc1xuIiwgcmVhc29uLCBzaGExX3RvX2hleChwLT5vYmopKTsKKwkJbGxfbWVyZ2VfaW5fd29ya3RyZWUobywgcCk7CisJfQorCisJdHJhY2VfcHJpbnRmKCJcdFx0XHRyZW1vdmluZyBmcm9tIHBhcnRpYWwgbWVyZ2UgcmVzdWx0XG4iKTsKKwlyZW1vdmVfbm90ZSh0LCBwLT5vYmopOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2Vfb25lX2NoYW5nZShzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCSAgICBzdHJ1Y3Qgbm90ZXNfbWVyZ2VfcGFpciAqcCwgc3RydWN0IG5vdGVzX3RyZWUgKnQpCit7CisJLyoKKwkgKiBSZXR1cm4gMCBpZiBjaGFuZ2UgaXMgc3VjY2Vzc2Z1bGx5IHJlc29sdmVkIChzdG9yZWQgaW4gbm90ZXNfdHJlZSkuCisJICogUmV0dXJuIDEgaXMgY2hhbmdlIHJlc3VsdHMgaW4gYSBjb25mbGljdCAoTk9UIHN0b3JlZCBpbiBub3Rlc190cmVlLAorCSAqIGJ1dCBpbnN0ZWFkIHdyaXR0ZW4gdG8gTk9URVNfTUVSR0VfV09SS1RSRUUgd2l0aCBjb25mbGljdCBtYXJrZXJzKS4KKwkgKi8KKwlzd2l0Y2ggKG8tPnN0cmF0ZWd5KSB7CisJY2FzZSBOT1RFU19NRVJHRV9SRVNPTFZFX01BTlVBTDoKKwkJcmV0dXJuIG1lcmdlX29uZV9jaGFuZ2VfbWFudWFsKG8sIHAsIHQpOworCWNhc2UgTk9URVNfTUVSR0VfUkVTT0xWRV9PVVJTOgorCQlpZiAoby0+dmVyYm9zaXR5ID49IDIpCisJCQlwcmludGYoIlVzaW5nIGxvY2FsIG5vdGVzIGZvciAlc1xuIiwKKwkJCQkJCXNoYTFfdG9faGV4KHAtPm9iaikpOworCQkvKiBub3RoaW5nIHRvIGRvICovCisJCXJldHVybiAwOworCWNhc2UgTk9URVNfTUVSR0VfUkVTT0xWRV9USEVJUlM6CisJCWlmIChvLT52ZXJib3NpdHkgPj0gMikKKwkJCXByaW50ZigiVXNpbmcgcmVtb3RlIG5vdGVzIGZvciAlc1xuIiwKKwkJCQkJCXNoYTFfdG9faGV4KHAtPm9iaikpOworCQlpZiAoYWRkX25vdGUodCwgcC0+b2JqLCBwLT5yZW1vdGUsIGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlKSkKKwkJCWRpZSgiQlVHOiBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSBmYWlsZWQiKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBOT1RFU19NRVJHRV9SRVNPTFZFX1VOSU9OOgorCQlpZiAoby0+dmVyYm9zaXR5ID49IDIpCisJCQlwcmludGYoIkNvbmNhdGVuYXRpbmcgbG9jYWwgYW5kIHJlbW90ZSBub3RlcyBmb3IgJXNcbiIsCisJCQkJCQkJc2hhMV90b19oZXgocC0+b2JqKSk7CisJCWlmIChhZGRfbm90ZSh0LCBwLT5vYmosIHAtPnJlbW90ZSwgY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZSkpCisJCQlkaWUoImZhaWxlZCB0byBjb25jYXRlbmF0ZSBub3RlcyAiCisJCQkgICAgIihjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlKSIpOworCQlyZXR1cm4gMDsKKwljYXNlIE5PVEVTX01FUkdFX1JFU09MVkVfQ0FUX1NPUlRfVU5JUToKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAyKQorCQkJcHJpbnRmKCJDb25jYXRlbmF0aW5nIHVuaXF1ZSBsaW5lcyBpbiBsb2NhbCBhbmQgcmVtb3RlICIKKwkJCQkibm90ZXMgZm9yICVzXG4iLCBzaGExX3RvX2hleChwLT5vYmopKTsKKwkJaWYgKGFkZF9ub3RlKHQsIHAtPm9iaiwgcC0+cmVtb3RlLCBjb21iaW5lX25vdGVzX2NhdF9zb3J0X3VuaXEpKQorCQkJZGllKCJmYWlsZWQgdG8gY29uY2F0ZW5hdGUgbm90ZXMgIgorCQkJICAgICIoY29tYmluZV9ub3Rlc19jYXRfc29ydF91bmlxKSIpOworCQlyZXR1cm4gMDsKKwl9CisJZGllKCJVbmtub3duIHN0cmF0ZWd5ICglaSkuIiwgby0+c3RyYXRlZ3kpOworfQorCitzdGF0aWMgaW50IG1lcmdlX2NoYW5nZXMoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCQkgc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmNoYW5nZXMsIGludCAqbnVtX2NoYW5nZXMsCisJCQkgc3RydWN0IG5vdGVzX3RyZWUgKnQpCit7CisJaW50IGksIGNvbmZsaWN0cyA9IDA7CisKKwl0cmFjZV9wcmludGYoIlx0bWVyZ2VfY2hhbmdlcyhudW1fY2hhbmdlcyA9ICVpKVxuIiwgKm51bV9jaGFuZ2VzKTsKKwlmb3IgKGkgPSAwOyBpIDwgKm51bV9jaGFuZ2VzOyBpKyspIHsKKwkJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKnAgPSBjaGFuZ2VzICsgaTsKKwkJdHJhY2VfcHJpbnRmKCJcdFx0JS43czogJS43cyAtPiAlLjdzLyUuN3NcbiIsCisJCSAgICAgICBzaGExX3RvX2hleChwLT5vYmopLCBzaGExX3RvX2hleChwLT5iYXNlKSwKKwkJICAgICAgIHNoYTFfdG9faGV4KHAtPmxvY2FsKSwgc2hhMV90b19oZXgocC0+cmVtb3RlKSk7CisKKwkJaWYgKCFoYXNoY21wKHAtPmJhc2UsIHAtPnJlbW90ZSkpIHsKKwkJCS8qIG5vIHJlbW90ZSBjaGFuZ2U7IG5vdGhpbmcgdG8gZG8gKi8KKwkJCXRyYWNlX3ByaW50ZigiXHRcdFx0c2tpcHBpbmcgKG5vIHJlbW90ZSBjaGFuZ2UpXG4iKTsKKwkJfSBlbHNlIGlmICghaGFzaGNtcChwLT5sb2NhbCwgcC0+cmVtb3RlKSkgeworCQkJLyogc2FtZSBjaGFuZ2UgaW4gbG9jYWwgYW5kIHJlbW90ZTsgbm90aGluZyB0byBkbyAqLworCQkJdHJhY2VfcHJpbnRmKCJcdFx0XHRza2lwcGluZyAobG9jYWwgPT0gcmVtb3RlKVxuIik7CisJCX0gZWxzZSBpZiAoIWhhc2hjbXAocC0+bG9jYWwsIHVuaW5pdGlhbGl6ZWQpIHx8CisJCQkgICAhaGFzaGNtcChwLT5sb2NhbCwgcC0+YmFzZSkpIHsKKwkJCS8qIG5vIGxvY2FsIGNoYW5nZTsgYWRvcHQgcmVtb3RlIGNoYW5nZSAqLworCQkJdHJhY2VfcHJpbnRmKCJcdFx0XHRubyBsb2NhbCBjaGFuZ2UsIGFkb3B0ZWQgcmVtb3RlXG4iKTsKKwkJCWlmIChhZGRfbm90ZSh0LCBwLT5vYmosIHAtPnJlbW90ZSwKKwkJCQkgICAgIGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlKSkKKwkJCQlkaWUoIkJVRzogY29tYmluZV9ub3Rlc19vdmVyd3JpdGUgZmFpbGVkIik7CisJCX0gZWxzZSB7CisJCQkvKiBuZWVkIGZpbGUtbGV2ZWwgbWVyZ2UgYmV0d2VlbiBsb2NhbCBhbmQgcmVtb3RlICovCisJCQl0cmFjZV9wcmludGYoIlx0XHRcdG5lZWQgY29udGVudC1sZXZlbCBtZXJnZVxuIik7CisJCQljb25mbGljdHMgKz0gbWVyZ2Vfb25lX2NoYW5nZShvLCBwLCB0KTsKKwkJfQorCX0KKworCXJldHVybiBjb25mbGljdHM7Cit9CisKK3N0YXRpYyBpbnQgbWVyZ2VfZnJvbV9kaWZmcyhzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbywKKwkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxvY2FsLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlbW90ZSwgc3RydWN0IG5vdGVzX3RyZWUgKnQpCit7CisJc3RydWN0IG5vdGVzX21lcmdlX3BhaXIgKmNoYW5nZXM7CisJaW50IG51bV9jaGFuZ2VzLCBjb25mbGljdHM7CisKKwl0cmFjZV9wcmludGYoIlx0bWVyZ2VfZnJvbV9kaWZmcyhiYXNlID0gJS43cywgbG9jYWwgPSAlLjdzLCAiCisJICAgICAgICJyZW1vdGUgPSAlLjdzKVxuIiwgc2hhMV90b19oZXgoYmFzZSksIHNoYTFfdG9faGV4KGxvY2FsKSwKKwkgICAgICAgc2hhMV90b19oZXgocmVtb3RlKSk7CisKKwljaGFuZ2VzID0gZGlmZl90cmVlX3JlbW90ZShvLCBiYXNlLCByZW1vdGUsICZudW1fY2hhbmdlcyk7CisJZGlmZl90cmVlX2xvY2FsKG8sIGNoYW5nZXMsIG51bV9jaGFuZ2VzLCBiYXNlLCBsb2NhbCk7CisKKwljb25mbGljdHMgPSBtZXJnZV9jaGFuZ2VzKG8sIGNoYW5nZXMsICZudW1fY2hhbmdlcywgdCk7CisJZnJlZShjaGFuZ2VzKTsKKworCWlmIChvLT52ZXJib3NpdHkgPj0gNCkKKwkJcHJpbnRmKHQtPmRpcnR5ID8KKwkJICAgICAgICJNZXJnZSByZXN1bHQ6ICVpIHVubWVyZ2VkIG5vdGVzIGFuZCBhIGRpcnR5IG5vdGVzIHRyZWVcbiIgOgorCQkgICAgICAgIk1lcmdlIHJlc3VsdDogJWkgdW5tZXJnZWQgbm90ZXMgYW5kIGEgY2xlYW4gbm90ZXMgdHJlZVxuIiwKKwkJICAgICAgIGNvbmZsaWN0cyk7CisKKwlyZXR1cm4gY29uZmxpY3RzID8gLTEgOiAxOworfQorCitpbnQgbm90ZXNfbWVyZ2Uoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCXN0cnVjdCBub3Rlc190cmVlICpsb2NhbF90cmVlLAorCQl1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwl1bnNpZ25lZCBjaGFyIGxvY2FsX3NoYTFbMjBdLCByZW1vdGVfc2hhMVsyMF07CisJc3RydWN0IGNvbW1pdCAqbG9jYWwsICpyZW1vdGU7CisJc3RydWN0IGNvbW1pdF9saXN0ICpiYXNlcyA9IE5VTEw7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZV9zaGExLCAqYmFzZV90cmVlX3NoYTE7CisJaW50IHJlc3VsdCA9IDA7CisKKwlhc3NlcnQoby0+bG9jYWxfcmVmICYmIG8tPnJlbW90ZV9yZWYpOworCWFzc2VydCghc3RyY21wKG8tPmxvY2FsX3JlZiwgbG9jYWxfdHJlZS0+cmVmKSk7CisJaGFzaGNscihyZXN1bHRfc2hhMSk7CisKKwl0cmFjZV9wcmludGYoIm5vdGVzX21lcmdlKG8tPmxvY2FsX3JlZiA9ICVzLCBvLT5yZW1vdGVfcmVmID0gJXMpXG4iLAorCSAgICAgICBvLT5sb2NhbF9yZWYsIG8tPnJlbW90ZV9yZWYpOworCisJLyogRGVyZWZlcmVuY2Ugby0+bG9jYWxfcmVmIGludG8gbG9jYWxfc2hhMSAqLworCWlmIChyZWFkX3JlZl9mdWxsKG8tPmxvY2FsX3JlZiwgMCwgbG9jYWxfc2hhMSwgTlVMTCkpCisJCWRpZSgiRmFpbGVkIHRvIHJlc29sdmUgbG9jYWwgbm90ZXMgcmVmICclcyciLCBvLT5sb2NhbF9yZWYpOworCWVsc2UgaWYgKCFjaGVja19yZWZuYW1lX2Zvcm1hdChvLT5sb2NhbF9yZWYsIDApICYmCisJCWlzX251bGxfc2hhMShsb2NhbF9zaGExKSkKKwkJbG9jYWwgPSBOVUxMOyAvKiBsb2NhbF9zaGExID09IG51bGxfc2hhMSBpbmRpY2F0ZXMgdW5ib3JuIHJlZiAqLworCWVsc2UgaWYgKCEobG9jYWwgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShsb2NhbF9zaGExKSkpCisJCWRpZSgiQ291bGQgbm90IHBhcnNlIGxvY2FsIGNvbW1pdCAlcyAoJXMpIiwKKwkJICAgIHNoYTFfdG9faGV4KGxvY2FsX3NoYTEpLCBvLT5sb2NhbF9yZWYpOworCXRyYWNlX3ByaW50ZigiXHRsb2NhbCBjb21taXQ6ICUuN3NcbiIsIHNoYTFfdG9faGV4KGxvY2FsX3NoYTEpKTsKKworCS8qIERlcmVmZXJlbmNlIG8tPnJlbW90ZV9yZWYgaW50byByZW1vdGVfc2hhMSAqLworCWlmIChnZXRfc2hhMShvLT5yZW1vdGVfcmVmLCByZW1vdGVfc2hhMSkpIHsKKwkJLyoKKwkJICogRmFpbGVkIHRvIGdldCByZW1vdGVfc2hhMS4gSWYgby0+cmVtb3RlX3JlZiBsb29rcyBsaWtlIGFuCisJCSAqIHVuYm9ybiByZWYsIHBlcmZvcm0gdGhlIG1lcmdlIHVzaW5nIGFuIGVtcHR5IG5vdGVzIHRyZWUuCisJCSAqLworCQlpZiAoIWNoZWNrX3JlZm5hbWVfZm9ybWF0KG8tPnJlbW90ZV9yZWYsIDApKSB7CisJCQloYXNoY2xyKHJlbW90ZV9zaGExKTsKKwkJCXJlbW90ZSA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlkaWUoIkZhaWxlZCB0byByZXNvbHZlIHJlbW90ZSBub3RlcyByZWYgJyVzJyIsCisJCQkgICAgby0+cmVtb3RlX3JlZik7CisJCX0KKwl9IGVsc2UgaWYgKCEocmVtb3RlID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UocmVtb3RlX3NoYTEpKSkgeworCQlkaWUoIkNvdWxkIG5vdCBwYXJzZSByZW1vdGUgY29tbWl0ICVzICglcykiLAorCQkgICAgc2hhMV90b19oZXgocmVtb3RlX3NoYTEpLCBvLT5yZW1vdGVfcmVmKTsKKwl9CisJdHJhY2VfcHJpbnRmKCJcdHJlbW90ZSBjb21taXQ6ICUuN3NcbiIsIHNoYTFfdG9faGV4KHJlbW90ZV9zaGExKSk7CisKKwlpZiAoIWxvY2FsICYmICFyZW1vdGUpCisJCWRpZSgiQ2Fubm90IG1lcmdlIGVtcHR5IG5vdGVzIHJlZiAoJXMpIGludG8gZW1wdHkgbm90ZXMgcmVmICIKKwkJICAgICIoJXMpIiwgby0+cmVtb3RlX3JlZiwgby0+bG9jYWxfcmVmKTsKKwlpZiAoIWxvY2FsKSB7CisJCS8qIHJlc3VsdCA9PSByZW1vdGUgY29tbWl0ICovCisJCWhhc2hjcHkocmVzdWx0X3NoYTEsIHJlbW90ZV9zaGExKTsKKwkJZ290byBmb3VuZF9yZXN1bHQ7CisJfQorCWlmICghcmVtb3RlKSB7CisJCS8qIHJlc3VsdCA9PSBsb2NhbCBjb21taXQgKi8KKwkJaGFzaGNweShyZXN1bHRfc2hhMSwgbG9jYWxfc2hhMSk7CisJCWdvdG8gZm91bmRfcmVzdWx0OworCX0KKwlhc3NlcnQobG9jYWwgJiYgcmVtb3RlKTsKKworCS8qIEZpbmQgbWVyZ2UgYmFzZXMgKi8KKwliYXNlcyA9IGdldF9tZXJnZV9iYXNlcyhsb2NhbCwgcmVtb3RlKTsKKwlpZiAoIWJhc2VzKSB7CisJCWJhc2Vfc2hhMSA9IG51bGxfc2hhMTsKKwkJYmFzZV90cmVlX3NoYTEgPSBFTVBUWV9UUkVFX1NIQTFfQklOOworCQlpZiAoby0+dmVyYm9zaXR5ID49IDQpCisJCQlwcmludGYoIk5vIG1lcmdlIGJhc2UgZm91bmQ7IGRvaW5nIGhpc3RvcnktbGVzcyBtZXJnZVxuIik7CisJfSBlbHNlIGlmICghYmFzZXMtPm5leHQpIHsKKwkJYmFzZV9zaGExID0gYmFzZXMtPml0ZW0tPm9iamVjdC5zaGExOworCQliYXNlX3RyZWVfc2hhMSA9IGJhc2VzLT5pdGVtLT50cmVlLT5vYmplY3Quc2hhMTsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSA0KQorCQkJcHJpbnRmKCJPbmUgbWVyZ2UgYmFzZSBmb3VuZCAoJS43cylcbiIsCisJCQkJc2hhMV90b19oZXgoYmFzZV9zaGExKSk7CisJfSBlbHNlIHsKKwkJLyogVE9ETzogSG93IHRvIGhhbmRsZSBtdWx0aXBsZSBtZXJnZS1iYXNlcz8gKi8KKwkJYmFzZV9zaGExID0gYmFzZXMtPml0ZW0tPm9iamVjdC5zaGExOworCQliYXNlX3RyZWVfc2hhMSA9IGJhc2VzLT5pdGVtLT50cmVlLT5vYmplY3Quc2hhMTsKKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAzKQorCQkJcHJpbnRmKCJNdWx0aXBsZSBtZXJnZSBiYXNlcyBmb3VuZC4gVXNpbmcgdGhlIGZpcnN0ICIKKwkJCQkiKCUuN3MpXG4iLCBzaGExX3RvX2hleChiYXNlX3NoYTEpKTsKKwl9CisKKwlpZiAoby0+dmVyYm9zaXR5ID49IDQpCisJCXByaW50ZigiTWVyZ2luZyByZW1vdGUgY29tbWl0ICUuN3MgaW50byBsb2NhbCBjb21taXQgJS43cyB3aXRoICIKKwkJCSJtZXJnZS1iYXNlICUuN3NcbiIsIHNoYTFfdG9faGV4KHJlbW90ZS0+b2JqZWN0LnNoYTEpLAorCQkJc2hhMV90b19oZXgobG9jYWwtPm9iamVjdC5zaGExKSwKKwkJCXNoYTFfdG9faGV4KGJhc2Vfc2hhMSkpOworCisJaWYgKCFoYXNoY21wKHJlbW90ZS0+b2JqZWN0LnNoYTEsIGJhc2Vfc2hhMSkpIHsKKwkJLyogQWxyZWFkeSBtZXJnZWQ7IHJlc3VsdCA9PSBsb2NhbCBjb21taXQgKi8KKwkJaWYgKG8tPnZlcmJvc2l0eSA+PSAyKQorCQkJcHJpbnRmKCJBbHJlYWR5IHVwLXRvLWRhdGUhXG4iKTsKKwkJaGFzaGNweShyZXN1bHRfc2hhMSwgbG9jYWwtPm9iamVjdC5zaGExKTsKKwkJZ290byBmb3VuZF9yZXN1bHQ7CisJfQorCWlmICghaGFzaGNtcChsb2NhbC0+b2JqZWN0LnNoYTEsIGJhc2Vfc2hhMSkpIHsKKwkJLyogRmFzdC1mb3J3YXJkOyByZXN1bHQgPT0gcmVtb3RlIGNvbW1pdCAqLworCQlpZiAoby0+dmVyYm9zaXR5ID49IDIpCisJCQlwcmludGYoIkZhc3QtZm9yd2FyZFxuIik7CisJCWhhc2hjcHkocmVzdWx0X3NoYTEsIHJlbW90ZS0+b2JqZWN0LnNoYTEpOworCQlnb3RvIGZvdW5kX3Jlc3VsdDsKKwl9CisKKwlyZXN1bHQgPSBtZXJnZV9mcm9tX2RpZmZzKG8sIGJhc2VfdHJlZV9zaGExLCBsb2NhbC0+dHJlZS0+b2JqZWN0LnNoYTEsCisJCQkJICByZW1vdGUtPnRyZWUtPm9iamVjdC5zaGExLCBsb2NhbF90cmVlKTsKKworCWlmIChyZXN1bHQgIT0gMCkgeyAvKiBub24tdHJpdmlhbCBtZXJnZSAod2l0aCBvciB3aXRob3V0IGNvbmZsaWN0cykgKi8KKwkJLyogQ29tbWl0IChwYXJ0aWFsKSByZXN1bHQgKi8KKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gTlVMTDsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KHJlbW90ZSwgJnBhcmVudHMpOyAvKiBMSUZPIG9yZGVyICovCisJCWNvbW1pdF9saXN0X2luc2VydChsb2NhbCwgJnBhcmVudHMpOworCQljcmVhdGVfbm90ZXNfY29tbWl0KGxvY2FsX3RyZWUsIHBhcmVudHMsCisJCQkJICAgIG8tPmNvbW1pdF9tc2cuYnVmLCBvLT5jb21taXRfbXNnLmxlbiwKKwkJCQkgICAgcmVzdWx0X3NoYTEpOworCX0KKworZm91bmRfcmVzdWx0OgorCWZyZWVfY29tbWl0X2xpc3QoYmFzZXMpOworCXN0cmJ1Zl9yZWxlYXNlKCYoby0+Y29tbWl0X21zZykpOworCXRyYWNlX3ByaW50Zigibm90ZXNfbWVyZ2UoKTogcmVzdWx0ID0gJWksIHJlc3VsdF9zaGExID0gJS43c1xuIiwKKwkgICAgICAgcmVzdWx0LCBzaGExX3RvX2hleChyZXN1bHRfc2hhMSkpOworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBub3Rlc19tZXJnZV9jb21taXQoc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgKm8sCisJCSAgICAgICBzdHJ1Y3Qgbm90ZXNfdHJlZSAqcGFydGlhbF90cmVlLAorCQkgICAgICAgc3RydWN0IGNvbW1pdCAqcGFydGlhbF9jb21taXQsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHRfc2hhMSkKK3sKKwkvKgorCSAqIEl0ZXJhdGUgdGhyb3VnaCBmaWxlcyBpbiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIGFuZCBhZGQgYWxsCisJICogZm91bmQgbm90ZXMgdG8gJ3BhcnRpYWxfdHJlZScuIFdyaXRlIHRoZSB1cGRhdGVkIG5vdGVzIHRyZWUgdG8KKwkgKiB0aGUgREIsIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlIG9iamVjdCB3aGlsZSByZXVzaW5nIHRoZQorCSAqIGNvbW1pdCBtZXNzYWdlIGFuZCBwYXJlbnRzIGZyb20gJ3BhcnRpYWxfY29tbWl0Jy4KKwkgKiBGaW5hbGx5IHN0b3JlIHRoZSBuZXcgY29tbWl0IG9iamVjdCBTSEExIGludG8gJ3Jlc3VsdF9zaGExJy4KKwkgKi8KKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICplOworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmJ1ZmZlciA9IGdldF9jb21taXRfYnVmZmVyKHBhcnRpYWxfY29tbWl0LCBOVUxMKTsKKwljb25zdCBjaGFyICptc2cgPSBzdHJzdHIoYnVmZmVyLCAiXG5cbiIpOworCWludCBiYXNlbGVuOworCisJc3RyYnVmX2FkZHN0cigmcGF0aCwgZ2l0X3BhdGgoTk9URVNfTUVSR0VfV09SS1RSRUUpKTsKKwlpZiAoby0+dmVyYm9zaXR5ID49IDMpCisJCXByaW50ZigiQ29tbWl0dGluZyBub3RlcyBpbiBub3RlcyBtZXJnZSB3b3JrdHJlZSBhdCAlc1xuIiwKKwkJCXBhdGguYnVmKTsKKworCWlmICghbXNnIHx8IG1zZ1syXSA9PSAnXDAnKQorCQlkaWUoInBhcnRpYWwgbm90ZXMgY29tbWl0IGhhcyBlbXB0eSBtZXNzYWdlIik7CisJbXNnICs9IDI7CisKKwlkaXIgPSBvcGVuZGlyKHBhdGguYnVmKTsKKwlpZiAoIWRpcikKKwkJZGllX2Vycm5vKCJjb3VsZCBub3Qgb3BlbiAlcyIsIHBhdGguYnVmKTsKKworCXN0cmJ1Zl9hZGRjaCgmcGF0aCwgJy8nKTsKKwliYXNlbGVuID0gcGF0aC5sZW47CisJd2hpbGUgKChlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQl1bnNpZ25lZCBjaGFyIG9ial9zaGExWzIwXSwgYmxvYl9zaGExWzIwXTsKKworCQlpZiAoaXNfZG90X29yX2RvdGRvdChlLT5kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0cmxlbihlLT5kX25hbWUpICE9IDQwIHx8IGdldF9zaGExX2hleChlLT5kX25hbWUsIG9ial9zaGExKSkgeworCQkJaWYgKG8tPnZlcmJvc2l0eSA+PSAzKQorCQkJCXByaW50ZigiU2tpcHBpbmcgbm9uLVNIQTEgZW50cnkgJyVzJXMnXG4iLAorCQkJCQlwYXRoLmJ1ZiwgZS0+ZF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RyYnVmX2FkZHN0cigmcGF0aCwgZS0+ZF9uYW1lKTsKKwkJLyogd3JpdGUgZmlsZSBhcyBibG9iLCBhbmQgYWRkIHRvIHBhcnRpYWxfdHJlZSAqLworCQlpZiAoc3RhdChwYXRoLmJ1ZiwgJnN0KSkKKwkJCWRpZV9lcnJubygiRmFpbGVkIHRvIHN0YXQgJyVzJyIsIHBhdGguYnVmKTsKKwkJaWYgKGluZGV4X3BhdGgoYmxvYl9zaGExLCBwYXRoLmJ1ZiwgJnN0LCBIQVNIX1dSSVRFX09CSkVDVCkpCisJCQlkaWUoIkZhaWxlZCB0byB3cml0ZSBibG9iIG9iamVjdCBmcm9tICclcyciLCBwYXRoLmJ1Zik7CisJCWlmIChhZGRfbm90ZShwYXJ0aWFsX3RyZWUsIG9ial9zaGExLCBibG9iX3NoYTEsIE5VTEwpKQorCQkJZGllKCJGYWlsZWQgdG8gYWRkIHJlc29sdmVkIG5vdGUgJyVzJyB0byBub3RlcyB0cmVlIiwKKwkJCSAgICBwYXRoLmJ1Zik7CisJCWlmIChvLT52ZXJib3NpdHkgPj0gNCkKKwkJCXByaW50ZigiQWRkZWQgcmVzb2x2ZWQgbm90ZSBmb3Igb2JqZWN0ICVzOiAlc1xuIiwKKwkJCQlzaGExX3RvX2hleChvYmpfc2hhMSksIHNoYTFfdG9faGV4KGJsb2Jfc2hhMSkpOworCQlzdHJidWZfc2V0bGVuKCZwYXRoLCBiYXNlbGVuKTsKKwl9CisKKwljcmVhdGVfbm90ZXNfY29tbWl0KHBhcnRpYWxfdHJlZSwgcGFydGlhbF9jb21taXQtPnBhcmVudHMsCisJCQkgICAgbXNnLCBzdHJsZW4obXNnKSwgcmVzdWx0X3NoYTEpOworCXVudXNlX2NvbW1pdF9idWZmZXIocGFydGlhbF9jb21taXQsIGJ1ZmZlcik7CisJaWYgKG8tPnZlcmJvc2l0eSA+PSA0KQorCQlwcmludGYoIkZpbmFsaXplZCBub3RlcyBtZXJnZSBjb21taXQ6ICVzXG4iLAorCQkJc2hhMV90b19oZXgocmVzdWx0X3NoYTEpKTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJY2xvc2VkaXIoZGlyKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG5vdGVzX21lcmdlX2Fib3J0KHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvKQoreworCS8qCisJICogUmVtb3ZlIGFsbCBmaWxlcyB3aXRoaW4gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS4gV2UgZG8gbm90IHJlbW92ZQorCSAqIHRoZSAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIGRpcmVjdG9yeSBpdHNlbGYsIHNpbmNlIGl0IG1pZ2h0IGJlCisJICogdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb2YgdGhlIHVzZXIuCisJICovCisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJc3RyYnVmX2FkZHN0cigmYnVmLCBnaXRfcGF0aChOT1RFU19NRVJHRV9XT1JLVFJFRSkpOworCWlmIChvLT52ZXJib3NpdHkgPj0gMykKKwkJcHJpbnRmKCJSZW1vdmluZyBub3RlcyBtZXJnZSB3b3JrdHJlZSBhdCAlcy8qXG4iLCBidWYuYnVmKTsKKwlyZXQgPSByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KCZidWYsIFJFTU9WRV9ESVJfS0VFUF9UT1BMRVZFTCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25vdGVzLW1lcmdlLmggYi9ub3Rlcy1tZXJnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODkwNTYKLS0tIC9kZXYvbnVsbAorKysgYi9ub3Rlcy1tZXJnZS5oCkBAIC0wLDAgKzEsODAgQEAKKyNpZm5kZWYgTk9URVNfTUVSR0VfSAorI2RlZmluZSBOT1RFU19NRVJHRV9ICisKKyNpbmNsdWRlICJub3Rlcy11dGlscy5oIgorCisjZGVmaW5lIE5PVEVTX01FUkdFX1dPUktUUkVFICJOT1RFU19NRVJHRV9XT1JLVFJFRSIKKworZW51bSBub3Rlc19tZXJnZV92ZXJib3NpdHkgeworCU5PVEVTX01FUkdFX1ZFUkJPU0lUWV9ERUZBVUxUID0gMiwKKwlOT1RFU19NRVJHRV9WRVJCT1NJVFlfTUFYID0gNQorfTsKKworc3RydWN0IG5vdGVzX21lcmdlX29wdGlvbnMgeworCWNvbnN0IGNoYXIgKmxvY2FsX3JlZjsKKwljb25zdCBjaGFyICpyZW1vdGVfcmVmOworCXN0cnVjdCBzdHJidWYgY29tbWl0X21zZzsKKwlpbnQgdmVyYm9zaXR5OworCWVudW0gbm90ZXNfbWVyZ2Vfc3RyYXRlZ3kgc3RyYXRlZ3k7CisJdW5zaWduZWQgaGFzX3dvcmt0cmVlOjE7Cit9OworCit2b2lkIGluaXRfbm90ZXNfbWVyZ2Vfb3B0aW9ucyhzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbyk7CisKKy8qCisgKiBNZXJnZSBub3RlcyBmcm9tIG8tPnJlbW90ZV9yZWYgaW50byBvLT5sb2NhbF9yZWYKKyAqCisgKiBUaGUgZ2l2ZW4gbm90ZXNfdHJlZSAnbG9jYWxfdHJlZScgbXVzdCBiZSB0aGUgbm90ZXNfdHJlZSByZWZlcmVuY2VkIGJ5IHRoZQorICogby0+bG9jYWxfcmVmLiBUaGlzIGlzIHRoZSBub3Rlc190cmVlIGluIHdoaWNoIHRoZSBvYmplY3QtbGV2ZWwgbWVyZ2UgaXMKKyAqIHBlcmZvcm1lZC4KKyAqCisgKiBUaGUgY29tbWl0cyBnaXZlbiBieSB0aGUgdHdvIHJlZnMgYXJlIG1lcmdlZCwgcHJvZHVjaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgKiBvdXRjb21lczoKKyAqCisgKiAxLiBUaGUgbWVyZ2UgdHJpdmlhbGx5IHJlc3VsdHMgaW4gYW4gZXhpc3RpbmcgY29tbWl0IChlLmcuIGZhc3QtZm9yd2FyZCBvcgorICogICAgYWxyZWFkeS11cC10by1kYXRlKS4gJ2xvY2FsX3RyZWUnIGlzIHVudG91Y2hlZCwgdGhlIFNIQTEgb2YgdGhlIHJlc3VsdAorICogICAgaXMgd3JpdHRlbiBpbnRvICdyZXN1bHRfc2hhMScgYW5kIDAgaXMgcmV0dXJuZWQuCisgKiAyLiBUaGUgbWVyZ2Ugc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcywgcHJvZHVjaW5nIGEgbWVyZ2UgY29tbWl0LiBsb2NhbF90cmVlCisgKiAgICBjb250YWlucyB0aGUgdXBkYXRlZCBub3RlcyB0cmVlLCB0aGUgU0hBMSBvZiB0aGUgcmVzdWx0aW5nIGNvbW1pdCBpcworICogICAgd3JpdHRlbiBpbnRvICdyZXN1bHRfc2hhMScsIGFuZCAxIGlzIHJldHVybmVkLgorICogMy4gVGhlIG1lcmdlIHJlc3VsdHMgaW4gY29uZmxpY3RzLiBUaGlzIGlzIHNpbWlsYXIgdG8gIzIgaW4gdGhhdCB0aGUKKyAqICAgIHBhcnRpYWwgbWVyZ2UgcmVzdWx0IChpLmUuIG1lcmdlIHJlc3VsdCBtaW51cyB0aGUgdW5tZXJnZWQgZW50cmllcykKKyAqICAgIGFyZSBzdG9yZWQgaW4gJ2xvY2FsX3RyZWUnLCBhbmQgdGhlIFNIQTEgb3IgdGhlIHJlc3VsdGluZyBjb21taXQKKyAqICAgICh0byBiZSBhbWVuZGVkIHdoZW4gdGhlIGNvbmZsaWN0cyBoYXZlIGJlZW4gcmVzb2x2ZWQpIGlzIHdyaXR0ZW4gaW50bworICogICAgJ3Jlc3VsdF9zaGExJy4gVGhlIHVubWVyZ2VkIGVudHJpZXMgYXJlIHdyaXR0ZW4gaW50byB0aGUKKyAqICAgIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgZGlyZWN0b3J5IHdpdGggY29uZmxpY3QgbWFya2Vycy4KKyAqICAgIC0xIGlzIHJldHVybmVkLgorICoKKyAqIEJvdGggby0+bG9jYWxfcmVmIGFuZCBvLT5yZW1vdGVfcmVmIG11c3QgYmUgZ2l2ZW4gKG5vbi1OVUxMKSwgYnV0IGVpdGhlciByZWYKKyAqIChhbHRob3VnaCBub3QgYm90aCkgbWF5IHJlZmVyIHRvIGEgbm9uLWV4aXN0aW5nIG5vdGVzIHJlZiwgaW4gd2hpY2ggY2FzZQorICogdGhhdCBub3RlcyByZWYgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gZW1wdHkgbm90ZXMgdHJlZSwgYW5kIHRoZSBtZXJnZQorICogdHJpdmlhbGx5IHJlc3VsdHMgaW4gd2hhdCB0aGUgb3RoZXIgcmVmIHBvaW50cyB0by4KKyAqLworaW50IG5vdGVzX21lcmdlKHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQlzdHJ1Y3Qgbm90ZXNfdHJlZSAqbG9jYWxfdHJlZSwKKwkJdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEpOworCisvKgorICogRmluYWxpemUgY29uZmxpY3QgcmVzb2x1dGlvbiBmcm9tIGFuIGVhcmxpZXIgbm90ZXNfbWVyZ2UoKQorICoKKyAqIFRoZSBnaXZlbiBub3RlcyB0cmVlICdwYXJ0aWFsX3RyZWUnIG11c3QgYmUgdGhlIG5vdGVzX3RyZWUgY29ycmVzcG9uZGluZyB0bworICogdGhlIGdpdmVuICdwYXJ0aWFsX2NvbW1pdCcsIHRoZSBwYXJ0aWFsIHJlc3VsdCBjb21taXQgY3JlYXRlZCBieSBhIHByZXZpb3VzCisgKiBjYWxsIHRvIG5vdGVzX21lcmdlKCkuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGFkZCB0aGUgKG5vdyByZXNvbHZlZCkgbm90ZXMgaW4gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRQorICogdG8gJ3BhcnRpYWxfdHJlZScsIGFuZCBjcmVhdGUgYSBmaW5hbCBub3RlcyBtZXJnZSBjb21taXQsIHRoZSBTSEExIG9mIHdoaWNoCisgKiB3aWxsIGJlIHN0b3JlZCBpbiAncmVzdWx0X3NoYTEnLgorICovCitpbnQgbm90ZXNfbWVyZ2VfY29tbWl0KHN0cnVjdCBub3Rlc19tZXJnZV9vcHRpb25zICpvLAorCQkgICAgICAgc3RydWN0IG5vdGVzX3RyZWUgKnBhcnRpYWxfdHJlZSwKKwkJICAgICAgIHN0cnVjdCBjb21taXQgKnBhcnRpYWxfY29tbWl0LAorCQkgICAgICAgdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEpOworCisvKgorICogQWJvcnQgY29uZmxpY3QgcmVzb2x1dGlvbiBmcm9tIGFuIGVhcmxpZXIgbm90ZXNfbWVyZ2UoKQorICoKKyAqIFJlbW92ZXMgdGhlIG5vdGVzIG1lcmdlIHdvcmt0cmVlIGluIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUuCisgKi8KK2ludCBub3Rlc19tZXJnZV9hYm9ydChzdHJ1Y3Qgbm90ZXNfbWVyZ2Vfb3B0aW9ucyAqbyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbm90ZXMtdXRpbHMuYyBiL25vdGVzLXV0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk5ZTM0YgotLS0gL2Rldi9udWxsCisrKyBiL25vdGVzLXV0aWxzLmMKQEAgLTAsMCArMSwxNzYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJub3Rlcy11dGlscy5oIgorCit2b2lkIGNyZWF0ZV9ub3Rlc19jb21taXQoc3RydWN0IG5vdGVzX3RyZWUgKnQsIHN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cywKKwkJCSBjb25zdCBjaGFyICptc2csIHNpemVfdCBtc2dfbGVuLAorCQkJIHVuc2lnbmVkIGNoYXIgKnJlc3VsdF9zaGExKQoreworCXVuc2lnbmVkIGNoYXIgdHJlZV9zaGExWzIwXTsKKworCWFzc2VydCh0LT5pbml0aWFsaXplZCk7CisKKwlpZiAod3JpdGVfbm90ZXNfdHJlZSh0LCB0cmVlX3NoYTEpKQorCQlkaWUoIkZhaWxlZCB0byB3cml0ZSBub3RlcyB0cmVlIHRvIGRhdGFiYXNlIik7CisKKwlpZiAoIXBhcmVudHMpIHsKKwkJLyogRGVkdWNlIHBhcmVudCBjb21taXQgZnJvbSB0LT5yZWYgKi8KKwkJdW5zaWduZWQgY2hhciBwYXJlbnRfc2hhMVsyMF07CisJCWlmICghcmVhZF9yZWYodC0+cmVmLCBwYXJlbnRfc2hhMSkpIHsKKwkJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IGxvb2t1cF9jb21taXQocGFyZW50X3NoYTEpOworCQkJaWYgKHBhcnNlX2NvbW1pdChwYXJlbnQpKQorCQkJCWRpZSgiRmFpbGVkIHRvIGZpbmQvcGFyc2UgY29tbWl0ICVzIiwgdC0+cmVmKTsKKwkJCWNvbW1pdF9saXN0X2luc2VydChwYXJlbnQsICZwYXJlbnRzKTsKKwkJfQorCQkvKiBlbHNlOiB0LT5yZWYgcG9pbnRzIHRvIG5vdGhpbmcsIGFzc3VtZSByb290L29ycGhhbiBjb21taXQgKi8KKwl9CisKKwlpZiAoY29tbWl0X3RyZWUobXNnLCBtc2dfbGVuLCB0cmVlX3NoYTEsIHBhcmVudHMsIHJlc3VsdF9zaGExLCBOVUxMLCBOVUxMKSkKKwkJZGllKCJGYWlsZWQgdG8gY29tbWl0IG5vdGVzIHRyZWUgdG8gZGF0YWJhc2UiKTsKK30KKwordm9pZCBjb21taXRfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXVuc2lnbmVkIGNoYXIgY29tbWl0X3NoYTFbMjBdOworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlpZiAoIXQtPmluaXRpYWxpemVkIHx8ICF0LT5yZWYgfHwgISp0LT5yZWYpCisJCWRpZShfKCJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiKSk7CisJaWYgKCF0LT5kaXJ0eSkKKwkJcmV0dXJuOyAvKiBkb24ndCBoYXZlIHRvIGNvbW1pdCBhbiB1bmNoYW5nZWQgdHJlZSAqLworCisJLyogUHJlcGFyZSBjb21taXQgbWVzc2FnZSBhbmQgcmVmbG9nIG1lc3NhZ2UgKi8KKwlzdHJidWZfYWRkc3RyKCZidWYsIG1zZyk7CisJc3RyYnVmX2NvbXBsZXRlX2xpbmUoJmJ1Zik7CisKKwljcmVhdGVfbm90ZXNfY29tbWl0KHQsIE5VTEwsIGJ1Zi5idWYsIGJ1Zi5sZW4sIGNvbW1pdF9zaGExKTsKKwlzdHJidWZfaW5zZXJ0KCZidWYsIDAsICJub3RlczogIiwgNyk7IC8qIGNvbW1pdCBtZXNzYWdlIHN0YXJ0cyBhdCBpbmRleCA3ICovCisJdXBkYXRlX3JlZihidWYuYnVmLCB0LT5yZWYsIGNvbW1pdF9zaGExLCBOVUxMLCAwLAorCQkgICBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitpbnQgcGFyc2Vfbm90ZXNfbWVyZ2Vfc3RyYXRlZ3koY29uc3QgY2hhciAqdiwgZW51bSBub3Rlc19tZXJnZV9zdHJhdGVneSAqcykKK3sKKwlpZiAoIXN0cmNtcCh2LCAibWFudWFsIikpCisJCSpzID0gTk9URVNfTUVSR0VfUkVTT0xWRV9NQU5VQUw7CisJZWxzZSBpZiAoIXN0cmNtcCh2LCAib3VycyIpKQorCQkqcyA9IE5PVEVTX01FUkdFX1JFU09MVkVfT1VSUzsKKwllbHNlIGlmICghc3RyY21wKHYsICJ0aGVpcnMiKSkKKwkJKnMgPSBOT1RFU19NRVJHRV9SRVNPTFZFX1RIRUlSUzsKKwllbHNlIGlmICghc3RyY21wKHYsICJ1bmlvbiIpKQorCQkqcyA9IE5PVEVTX01FUkdFX1JFU09MVkVfVU5JT047CisJZWxzZSBpZiAoIXN0cmNtcCh2LCAiY2F0X3NvcnRfdW5pcSIpKQorCQkqcyA9IE5PVEVTX01FUkdFX1JFU09MVkVfQ0FUX1NPUlRfVU5JUTsKKwllbHNlCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29tYmluZV9ub3Rlc19mbiBwYXJzZV9jb21iaW5lX25vdGVzX2ZuKGNvbnN0IGNoYXIgKnYpCit7CisJaWYgKCFzdHJjYXNlY21wKHYsICJvdmVyd3JpdGUiKSkKKwkJcmV0dXJuIGNvbWJpbmVfbm90ZXNfb3ZlcndyaXRlOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKHYsICJpZ25vcmUiKSkKKwkJcmV0dXJuIGNvbWJpbmVfbm90ZXNfaWdub3JlOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKHYsICJjb25jYXRlbmF0ZSIpKQorCQlyZXR1cm4gY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZTsKKwllbHNlIGlmICghc3RyY2FzZWNtcCh2LCAiY2F0X3NvcnRfdW5pcSIpKQorCQlyZXR1cm4gY29tYmluZV9ub3Rlc19jYXRfc29ydF91bmlxOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbm90ZXNfcmV3cml0ZV9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdiwgdm9pZCAqY2IpCit7CisJc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjID0gY2I7CisJaWYgKHN0YXJ0c193aXRoKGssICJub3Rlcy5yZXdyaXRlLiIpICYmICFzdHJjbXAoaysxNCwgYy0+Y21kKSkgeworCQljLT5lbmFibGVkID0gZ2l0X2NvbmZpZ19ib29sKGssIHYpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFjLT5tb2RlX2Zyb21fZW52ICYmICFzdHJjbXAoaywgIm5vdGVzLnJld3JpdGVtb2RlIikpIHsKKwkJaWYgKCF2KQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGspOworCQljLT5jb21iaW5lID0gcGFyc2VfY29tYmluZV9ub3Rlc19mbih2KTsKKwkJaWYgKCFjLT5jb21iaW5lKSB7CisJCQllcnJvcihfKCJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciKSwgdik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFjLT5yZWZzX2Zyb21fZW52ICYmICFzdHJjbXAoaywgIm5vdGVzLnJld3JpdGVyZWYiKSkgeworCQkvKiBub3RlIHRoYXQgYSByZWZzLyBwcmVmaXggaXMgaW1wbGllZCBpbiB0aGUKKwkJICogdW5kZXJseWluZyBmb3JfZWFjaF9nbG9iX3JlZiAqLworCQlpZiAoc3RhcnRzX3dpdGgodiwgInJlZnMvbm90ZXMvIikpCisJCQlzdHJpbmdfbGlzdF9hZGRfcmVmc19ieV9nbG9iKGMtPnJlZnMsIHYpOworCQllbHNlCisJCQl3YXJuaW5nKF8oIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMiCisJCQkJIiAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiKSwgdik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCisKK3N0cnVjdCBub3Rlc19yZXdyaXRlX2NmZyAqaW5pdF9jb3B5X25vdGVzX2Zvcl9yZXdyaXRlKGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcpKTsKKwljb25zdCBjaGFyICpyZXdyaXRlX21vZGVfZW52ID0gZ2V0ZW52KEdJVF9OT1RFU19SRVdSSVRFX01PREVfRU5WSVJPTk1FTlQpOworCWNvbnN0IGNoYXIgKnJld3JpdGVfcmVmc19lbnYgPSBnZXRlbnYoR0lUX05PVEVTX1JFV1JJVEVfUkVGX0VOVklST05NRU5UKTsKKwljLT5jbWQgPSBjbWQ7CisJYy0+ZW5hYmxlZCA9IDE7CisJYy0+Y29tYmluZSA9IGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGU7CisJYy0+cmVmcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzdHJpbmdfbGlzdCkpOworCWMtPnJlZnMtPnN0cmR1cF9zdHJpbmdzID0gMTsKKwljLT5yZWZzX2Zyb21fZW52ID0gMDsKKwljLT5tb2RlX2Zyb21fZW52ID0gMDsKKwlpZiAocmV3cml0ZV9tb2RlX2VudikgeworCQljLT5tb2RlX2Zyb21fZW52ID0gMTsKKwkJYy0+Y29tYmluZSA9IHBhcnNlX2NvbWJpbmVfbm90ZXNfZm4ocmV3cml0ZV9tb2RlX2Vudik7CisJCWlmICghYy0+Y29tYmluZSkKKwkJCS8qIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgdGhlCisJCQkgICBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcyBpdHMgdmFsdWUgKi8KKwkJCWVycm9yKF8oIkJhZCAlcyB2YWx1ZTogJyVzJyIpLCBHSVRfTk9URVNfUkVXUklURV9NT0RFX0VOVklST05NRU5ULAorCQkJCQlyZXdyaXRlX21vZGVfZW52KTsKKwl9CisJaWYgKHJld3JpdGVfcmVmc19lbnYpIHsKKwkJYy0+cmVmc19mcm9tX2VudiA9IDE7CisJCXN0cmluZ19saXN0X2FkZF9yZWZzX2Zyb21fY29sb25fc2VwKGMtPnJlZnMsIHJld3JpdGVfcmVmc19lbnYpOworCX0KKwlnaXRfY29uZmlnKG5vdGVzX3Jld3JpdGVfY29uZmlnLCBjKTsKKwlpZiAoIWMtPmVuYWJsZWQgfHwgIWMtPnJlZnMtPm5yKSB7CisJCXN0cmluZ19saXN0X2NsZWFyKGMtPnJlZnMsIDApOworCQlmcmVlKGMtPnJlZnMpOworCQlmcmVlKGMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJYy0+dHJlZXMgPSBsb2FkX25vdGVzX3RyZWVzKGMtPnJlZnMpOworCXN0cmluZ19saXN0X2NsZWFyKGMtPnJlZnMsIDApOworCWZyZWUoYy0+cmVmcyk7CisJcmV0dXJuIGM7Cit9CisKK2ludCBjb3B5X25vdGVfZm9yX3Jld3JpdGUoc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjLAorCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tX29iaiwgY29uc3QgdW5zaWduZWQgY2hhciAqdG9fb2JqKQoreworCWludCByZXQgPSAwOworCWludCBpOworCWZvciAoaSA9IDA7IGMtPnRyZWVzW2ldOyBpKyspCisJCXJldCA9IGNvcHlfbm90ZShjLT50cmVlc1tpXSwgZnJvbV9vYmosIHRvX29iaiwgMSwgYy0+Y29tYmluZSkgfHwgcmV0OworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgZmluaXNoX2NvcHlfbm90ZXNfZm9yX3Jld3JpdGUoc3RydWN0IG5vdGVzX3Jld3JpdGVfY2ZnICpjLCBjb25zdCBjaGFyICptc2cpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgYy0+dHJlZXNbaV07IGkrKykgeworCQljb21taXRfbm90ZXMoYy0+dHJlZXNbaV0sIG1zZyk7CisJCWZyZWVfbm90ZXMoYy0+dHJlZXNbaV0pOworCX0KKwlmcmVlKGMtPnRyZWVzKTsKKwlmcmVlKGMpOworfQpkaWZmIC0tZ2l0IGEvbm90ZXMtdXRpbHMuaCBiL25vdGVzLXV0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1MzhlMQotLS0gL2Rldi9udWxsCisrKyBiL25vdGVzLXV0aWxzLmgKQEAgLTAsMCArMSw0NiBAQAorI2lmbmRlZiBOT1RFU19VVElMU19ICisjZGVmaW5lIE5PVEVTX1VUSUxTX0gKKworI2luY2x1ZGUgIm5vdGVzLmgiCisKKy8qCisgKiBDcmVhdGUgbmV3IG5vdGVzIGNvbW1pdCBmcm9tIHRoZSBnaXZlbiBub3RlcyB0cmVlCisgKgorICogUHJvcGVydGllcyBvZiB0aGUgY3JlYXRlZCBjb21taXQ6CisgKiAtIHRyZWU6IHRoZSByZXN1bHQgb2YgY29udmVydGluZyB0IHRvIGEgdHJlZSBvYmplY3Qgd2l0aCB3cml0ZV9ub3Rlc190cmVlKCkuCisgKiAtIHBhcmVudHM6IHRoZSBnaXZlbiBwYXJlbnRzIE9SIChpZiBOVUxMKSB0aGUgY29tbWl0IHJlZmVyZW5jZWQgYnkgdC0+cmVmLgorICogLSBhdXRob3IvY29tbWl0dGVyOiB0aGUgZGVmYXVsdCBkZXRlcm1pbmVkIGJ5IGNvbW1pdF90cmVlKCkuCisgKiAtIGNvbW1pdCBtZXNzYWdlOiBtc2cKKyAqCisgKiBUaGUgcmVzdWx0aW5nIGNvbW1pdCBTSEExIGlzIHN0b3JlZCBpbiByZXN1bHRfc2hhMS4KKyAqLwordm9pZCBjcmVhdGVfbm90ZXNfY29tbWl0KHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMsCisJCQkgY29uc3QgY2hhciAqbXNnLCBzaXplX3QgbXNnX2xlbiwgdW5zaWduZWQgY2hhciAqcmVzdWx0X3NoYTEpOworCit2b2lkIGNvbW1pdF9ub3RlcyhzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgY2hhciAqbXNnKTsKKworZW51bSBub3Rlc19tZXJnZV9zdHJhdGVneSB7CisJCU5PVEVTX01FUkdFX1JFU09MVkVfTUFOVUFMID0gMCwKKwkJTk9URVNfTUVSR0VfUkVTT0xWRV9PVVJTLAorCQlOT1RFU19NRVJHRV9SRVNPTFZFX1RIRUlSUywKKwkJTk9URVNfTUVSR0VfUkVTT0xWRV9VTklPTiwKKwkJTk9URVNfTUVSR0VfUkVTT0xWRV9DQVRfU09SVF9VTklRCit9OworCitzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgeworCXN0cnVjdCBub3Rlc190cmVlICoqdHJlZXM7CisJY29uc3QgY2hhciAqY21kOworCWludCBlbmFibGVkOworCWNvbWJpbmVfbm90ZXNfZm4gY29tYmluZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZnM7CisJaW50IHJlZnNfZnJvbV9lbnY7CisJaW50IG1vZGVfZnJvbV9lbnY7Cit9OworCitpbnQgcGFyc2Vfbm90ZXNfbWVyZ2Vfc3RyYXRlZ3koY29uc3QgY2hhciAqdiwgZW51bSBub3Rlc19tZXJnZV9zdHJhdGVneSAqcyk7CitzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmluaXRfY29weV9ub3Rlc19mb3JfcmV3cml0ZShjb25zdCBjaGFyICpjbWQpOworaW50IGNvcHlfbm90ZV9mb3JfcmV3cml0ZShzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZyb21fb2JqLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0b19vYmopOwordm9pZCBmaW5pc2hfY29weV9ub3Rlc19mb3JfcmV3cml0ZShzdHJ1Y3Qgbm90ZXNfcmV3cml0ZV9jZmcgKmMsIGNvbnN0IGNoYXIgKm1zZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbm90ZXMuYyBiL25vdGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI3NzkyMgotLS0gL2Rldi9udWxsCisrKyBiL25vdGVzLmMKQEAgLTAsMCArMSwxMzA1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJub3Rlcy5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicmVmcy5oIgorCisvKgorICogVXNlIGEgbm9uLWJhbGFuY2luZyBzaW1wbGUgMTYtdHJlZSBzdHJ1Y3R1cmUgd2l0aCBzdHJ1Y3QgaW50X25vZGUgYXMKKyAqIGludGVybmFsIG5vZGVzLCBhbmQgc3RydWN0IGxlYWZfbm9kZSBhcyBsZWFmIG5vZGVzLiBFYWNoIGludF9ub2RlIGhhcyBhCisgKiAxNi1hcnJheSBvZiBwb2ludGVycyB0byBpdHMgY2hpbGRyZW4uCisgKiBUaGUgYm90dG9tIDIgYml0cyBvZiBlYWNoIHBvaW50ZXIgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgcG9pbnRlciB0eXBlCisgKiAtIHB0ciAmIDMgPT0gMCAtIE5VTEwgcG9pbnRlciwgYXNzZXJ0KHB0ciA9PSBOVUxMKQorICogLSBwdHIgJiAzID09IDEgLSBwb2ludGVyIHRvIG5leHQgaW50ZXJuYWwgbm9kZSAtIGNhc3QgdG8gc3RydWN0IGludF9ub2RlICoKKyAqIC0gcHRyICYgMyA9PSAyIC0gcG9pbnRlciB0byBub3RlIGVudHJ5IC0gY2FzdCB0byBzdHJ1Y3QgbGVhZl9ub2RlICoKKyAqIC0gcHRyICYgMyA9PSAzIC0gcG9pbnRlciB0byBzdWJ0cmVlIGVudHJ5IC0gY2FzdCB0byBzdHJ1Y3QgbGVhZl9ub2RlICoKKyAqCisgKiBUaGUgcm9vdCBub2RlIGlzIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgc3RydWN0IGludF9ub2RlLgorICovCitzdHJ1Y3QgaW50X25vZGUgeworCXZvaWQgKmFbMTZdOworfTsKKworLyoKKyAqIExlYWYgbm9kZXMgY29tZSBpbiB0d28gdmFyaWFudHMsIG5vdGUgZW50cmllcyBhbmQgc3VidHJlZSBlbnRyaWVzLAorICogZGlzdGluZ3Vpc2hlZCBieSB0aGUgTFNiIG9mIHRoZSBsZWFmIG5vZGUgcG9pbnRlciAoc2VlIGFib3ZlKS4KKyAqIEFzIGEgbm90ZSBlbnRyeSwgdGhlIGtleSBpcyB0aGUgU0hBMSBvZiB0aGUgcmVmZXJlbmNlZCBvYmplY3QsIGFuZCB0aGUKKyAqIHZhbHVlIGlzIHRoZSBTSEExIG9mIHRoZSBub3RlIG9iamVjdC4KKyAqIEFzIGEgc3VidHJlZSBlbnRyeSwgdGhlIGtleSBpcyB0aGUgcHJlZml4IFNIQTEgKHcvdHJhaWxpbmcgTlVMcykgb2YgdGhlCisgKiByZWZlcmVuY2VkIG9iamVjdCwgdXNpbmcgdGhlIGxhc3QgYnl0ZSBvZiB0aGUga2V5IHRvIHN0b3JlIHRoZSBsZW5ndGggb2YKKyAqIHRoZSBwcmVmaXguIFRoZSB2YWx1ZSBpcyB0aGUgU0hBMSBvZiB0aGUgdHJlZSBvYmplY3QgY29udGFpbmluZyB0aGUgbm90ZXMKKyAqIHN1YnRyZWUuCisgKi8KK3N0cnVjdCBsZWFmX25vZGUgeworCXVuc2lnbmVkIGNoYXIga2V5X3NoYTFbMjBdOworCXVuc2lnbmVkIGNoYXIgdmFsX3NoYTFbMjBdOworfTsKKworLyoKKyAqIEEgbm90ZXMgdHJlZSBtYXkgY29udGFpbiBlbnRyaWVzIHRoYXQgYXJlIG5vdCBub3RlcywgYW5kIHRoYXQgZG8gbm90IGZvbGxvdworICogdGhlIG5hbWluZyBjb252ZW50aW9ucyBvZiBub3Rlcy4gVGhlcmUgYXJlIHR5cGljYWxseSBub25lL2ZldyBvZiB0aGVzZSwgYnV0CisgKiB3ZSBzdGlsbCBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlbS4gS2VlcCBhIHNpbXBsZSBsaW5rZWQgbGlzdCBzb3J0ZWQgYWxwaGEtCisgKiBiZXRpY2FsbHkgb24gdGhlIG5vbi1ub3RlIHBhdGguIFRoZSBsaXN0IGlzIHBvcHVsYXRlZCB3aGVuIHBhcnNpbmcgdHJlZQorICogb2JqZWN0cyBpbiBsb2FkX3N1YnRyZWUoKSwgYW5kIHRoZSBub24tbm90ZXMgYXJlIGNvcnJlY3RseSB3cml0dGVuIGJhY2sgaW50bworICogdGhlIHRyZWUgb2JqZWN0cyBwcm9kdWNlZCBieSB3cml0ZV9ub3Rlc190cmVlKCkuCisgKi8KK3N0cnVjdCBub25fbm90ZSB7CisJc3RydWN0IG5vbl9ub3RlICpuZXh0OyAvKiBncm91bmRlZCAobGFzdC0+bmV4dCA9PSBOVUxMKSAqLworCWNoYXIgKnBhdGg7CisJdW5zaWduZWQgaW50IG1vZGU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKK307CisKKyNkZWZpbmUgUFRSX1RZUEVfTlVMTCAgICAgMAorI2RlZmluZSBQVFJfVFlQRV9JTlRFUk5BTCAxCisjZGVmaW5lIFBUUl9UWVBFX05PVEUgICAgIDIKKyNkZWZpbmUgUFRSX1RZUEVfU1VCVFJFRSAgMworCisjZGVmaW5lIEdFVF9QVFJfVFlQRShwdHIpICAgICAgICgodWludHB0cl90KSAocHRyKSAmIDMpCisjZGVmaW5lIENMUl9QVFJfVFlQRShwdHIpICAgICAgICgodm9pZCAqKSAoKHVpbnRwdHJfdCkgKHB0cikgJiB+MykpCisjZGVmaW5lIFNFVF9QVFJfVFlQRShwdHIsIHR5cGUpICgodm9pZCAqKSAoKHVpbnRwdHJfdCkgKHB0cikgfCAodHlwZSkpKQorCisjZGVmaW5lIEdFVF9OSUJCTEUobiwgc2hhMSkgKCgoc2hhMVsobikgPj4gMV0pID4+ICgofihuKSAmIDB4MDEpIDw8IDIpKSAmIDB4MGYpCisKKyNkZWZpbmUgU1VCVFJFRV9TSEExX1BSRUZJWENNUChrZXlfc2hhMSwgc3VidHJlZV9zaGExKSBcCisJKG1lbWNtcChrZXlfc2hhMSwgc3VidHJlZV9zaGExLCBzdWJ0cmVlX3NoYTFbMTldKSkKKworc3RydWN0IG5vdGVzX3RyZWUgZGVmYXVsdF9ub3Rlc190cmVlOworCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGRpc3BsYXlfbm90ZXNfcmVmczsKK3N0YXRpYyBzdHJ1Y3Qgbm90ZXNfdHJlZSAqKmRpc3BsYXlfbm90ZXNfdHJlZXM7CisKK3N0YXRpYyB2b2lkIGxvYWRfc3VidHJlZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgc3RydWN0IGxlYWZfbm9kZSAqc3VidHJlZSwKKwkJc3RydWN0IGludF9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgbik7CisKKy8qCisgKiBTZWFyY2ggdGhlIHRyZWUgdW50aWwgdGhlIGFwcHJvcHJpYXRlIGxvY2F0aW9uIGZvciB0aGUgZ2l2ZW4ga2V5IGlzIGZvdW5kOgorICogMS4gU3RhcnQgYXQgdGhlIHJvb3Qgbm9kZSwgd2l0aCBuID0gMAorICogMi4gSWYgYVswXSBhdCB0aGUgY3VycmVudCBsZXZlbCBpcyBhIG1hdGNoaW5nIHN1YnRyZWUgZW50cnksIHVucGFjayB0aGF0CisgKiAgICBzdWJ0cmVlIGVudHJ5IGFuZCByZW1vdmUgaXQ7IHJlc3RhcnQgc2VhcmNoIGF0IHRoZSBjdXJyZW50IGxldmVsLgorICogMy4gVXNlIHRoZSBudGggbmliYmxlIG9mIHRoZSBrZXkgYXMgYW4gaW5kZXggaW50byBhOgorICogICAgLSBJZiBhW25dIGlzIGFuIGludF9ub2RlLCByZWN1cnNlIGZyb20gIzIgaW50byB0aGF0IG5vZGUgYW5kIGluY3JlbWVudCBuCisgKiAgICAtIElmIGEgbWF0Y2hpbmcgc3VidHJlZSBlbnRyeSwgdW5wYWNrIHRoYXQgc3VidHJlZSBlbnRyeSAoYW5kIHJlbW92ZSBpdCk7CisgKiAgICAgIHJlc3RhcnQgc2VhcmNoIGF0IHRoZSBjdXJyZW50IGxldmVsLgorICogICAgLSBPdGhlcndpc2UsIHdlIGhhdmUgZm91bmQgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgKiAgICAgIC0gYSBzdWJ0cmVlIGVudHJ5IHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBrZXkKKyAqICAgICAgLSBhIG5vdGUgZW50cnkgd2hpY2ggbWF5IG9yIG1heSBub3QgbWF0Y2ggdGhlIGtleQorICogICAgICAtIGFuIHVudXNlZCBsZWFmIG5vZGUgKE5VTEwpCisgKiAgICAgIEluIGFueSBjYXNlLCBzZXQgKnRyZWUgYW5kICpuLCBhbmQgcmV0dXJuIHBvaW50ZXIgdG8gdGhlIHRyZWUgbG9jYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkICoqbm90ZV90cmVlX3NlYXJjaChzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgc3RydWN0IGludF9ub2RlICoqdHJlZSwKKwkJdW5zaWduZWQgY2hhciAqbiwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5X3NoYTEpCit7CisJc3RydWN0IGxlYWZfbm9kZSAqbDsKKwl1bnNpZ25lZCBjaGFyIGk7CisJdm9pZCAqcCA9ICgqdHJlZSktPmFbMF07CisKKwlpZiAoR0VUX1BUUl9UWVBFKHApID09IFBUUl9UWVBFX1NVQlRSRUUpIHsKKwkJbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIENMUl9QVFJfVFlQRShwKTsKKwkJaWYgKCFTVUJUUkVFX1NIQTFfUFJFRklYQ01QKGtleV9zaGExLCBsLT5rZXlfc2hhMSkpIHsKKwkJCS8qIHVucGFjayB0cmVlIGFuZCByZXN1bWUgc2VhcmNoICovCisJCQkoKnRyZWUpLT5hWzBdID0gTlVMTDsKKwkJCWxvYWRfc3VidHJlZSh0LCBsLCAqdHJlZSwgKm4pOworCQkJZnJlZShsKTsKKwkJCXJldHVybiBub3RlX3RyZWVfc2VhcmNoKHQsIHRyZWUsIG4sIGtleV9zaGExKTsKKwkJfQorCX0KKworCWkgPSBHRVRfTklCQkxFKCpuLCBrZXlfc2hhMSk7CisJcCA9ICgqdHJlZSktPmFbaV07CisJc3dpdGNoIChHRVRfUFRSX1RZUEUocCkpIHsKKwljYXNlIFBUUl9UWVBFX0lOVEVSTkFMOgorCQkqdHJlZSA9IENMUl9QVFJfVFlQRShwKTsKKwkJKCpuKSsrOworCQlyZXR1cm4gbm90ZV90cmVlX3NlYXJjaCh0LCB0cmVlLCBuLCBrZXlfc2hhMSk7CisJY2FzZSBQVFJfVFlQRV9TVUJUUkVFOgorCQlsID0gKHN0cnVjdCBsZWFmX25vZGUgKikgQ0xSX1BUUl9UWVBFKHApOworCQlpZiAoIVNVQlRSRUVfU0hBMV9QUkVGSVhDTVAoa2V5X3NoYTEsIGwtPmtleV9zaGExKSkgeworCQkJLyogdW5wYWNrIHRyZWUgYW5kIHJlc3VtZSBzZWFyY2ggKi8KKwkJCSgqdHJlZSktPmFbaV0gPSBOVUxMOworCQkJbG9hZF9zdWJ0cmVlKHQsIGwsICp0cmVlLCAqbik7CisJCQlmcmVlKGwpOworCQkJcmV0dXJuIG5vdGVfdHJlZV9zZWFyY2godCwgdHJlZSwgbiwga2V5X3NoYTEpOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXJldHVybiAmKCgqdHJlZSktPmFbaV0pOworCX0KK30KKworLyoKKyAqIFRvIGZpbmQgYSBsZWFmX25vZGU6CisgKiBTZWFyY2ggdG8gdGhlIHRyZWUgbG9jYXRpb24gYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbiBrZXk6CisgKiBJZiBhIG5vdGUgZW50cnkgd2l0aCBtYXRjaGluZyBrZXksIHJldHVybiB0aGUgbm90ZSBlbnRyeSwgZWxzZSByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIHN0cnVjdCBsZWFmX25vZGUgKm5vdGVfdHJlZV9maW5kKHN0cnVjdCBub3Rlc190cmVlICp0LAorCQlzdHJ1Y3QgaW50X25vZGUgKnRyZWUsIHVuc2lnbmVkIGNoYXIgbiwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqa2V5X3NoYTEpCit7CisJdm9pZCAqKnAgPSBub3RlX3RyZWVfc2VhcmNoKHQsICZ0cmVlLCAmbiwga2V5X3NoYTEpOworCWlmIChHRVRfUFRSX1RZUEUoKnApID09IFBUUl9UWVBFX05PVEUpIHsKKwkJc3RydWN0IGxlYWZfbm9kZSAqbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIENMUl9QVFJfVFlQRSgqcCk7CisJCWlmICghaGFzaGNtcChrZXlfc2hhMSwgbC0+a2V5X3NoYTEpKQorCQkJcmV0dXJuIGw7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogSG93IHRvIGNvbnNvbGlkYXRlIGFuIGludF9ub2RlOgorICogSWYgdGhlcmUgYXJlID4gMSBub24tTlVMTCBlbnRyaWVzLCBnaXZlIHVwIGFuZCByZXR1cm4gbm9uLXplcm8uCisgKiBPdGhlcndpc2UgcmVwbGFjZSB0aGUgaW50X25vZGUgYXQgdGhlIGdpdmVuIGluZGV4IGluIHRoZSBnaXZlbiBwYXJlbnQgbm9kZQorICogd2l0aCB0aGUgb25seSBlbnRyeSAob3IgYSBOVUxMIGVudHJ5IGlmIG5vIGVudHJpZXMpIGZyb20gdGhlIGdpdmVuIHRyZWUsCisgKiBhbmQgcmV0dXJuIDAuCisgKi8KK3N0YXRpYyBpbnQgbm90ZV90cmVlX2NvbnNvbGlkYXRlKHN0cnVjdCBpbnRfbm9kZSAqdHJlZSwKKwlzdHJ1Y3QgaW50X25vZGUgKnBhcmVudCwgdW5zaWduZWQgY2hhciBpbmRleCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl2b2lkICpwID0gTlVMTDsKKworCWFzc2VydCh0cmVlICYmIHBhcmVudCk7CisJYXNzZXJ0KENMUl9QVFJfVFlQRShwYXJlbnQtPmFbaW5kZXhdKSA9PSB0cmVlKTsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWlmIChHRVRfUFRSX1RZUEUodHJlZS0+YVtpXSkgIT0gUFRSX1RZUEVfTlVMTCkgeworCQkJaWYgKHApIC8qIG1vcmUgdGhhbiBvbmUgZW50cnkgKi8KKwkJCQlyZXR1cm4gLTI7CisJCQlwID0gdHJlZS0+YVtpXTsKKwkJfQorCX0KKworCS8qIHJlcGxhY2UgdHJlZSB3aXRoIHAgaW4gcGFyZW50W2luZGV4XSAqLworCXBhcmVudC0+YVtpbmRleF0gPSBwOworCWZyZWUodHJlZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUbyByZW1vdmUgYSBsZWFmX25vZGU6CisgKiBTZWFyY2ggdG8gdGhlIHRyZWUgbG9jYXRpb24gYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbiBsZWFmX25vZGUncyBrZXk6CisgKiAtIElmIGxvY2F0aW9uIGRvZXMgbm90IGhvbGQgYSBtYXRjaGluZyBlbnRyeSwgYWJvcnQgYW5kIGRvIG5vdGhpbmcuCisgKiAtIENvcHkgdGhlIG1hdGNoaW5nIGVudHJ5J3MgdmFsdWUgaW50byB0aGUgZ2l2ZW4gZW50cnkuCisgKiAtIFJlcGxhY2UgdGhlIG1hdGNoaW5nIGxlYWZfbm9kZSB3aXRoIGEgTlVMTCBlbnRyeSAoYW5kIGZyZWUgdGhlIGxlYWZfbm9kZSkuCisgKiAtIENvbnNvbGlkYXRlIGludF9ub2RlcyByZXBlYXRlZGx5LCB3aGlsZSB3YWxraW5nIHVwIHRoZSB0cmVlIHRvd2FyZHMgcm9vdC4KKyAqLworc3RhdGljIHZvaWQgbm90ZV90cmVlX3JlbW92ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwKKwkJc3RydWN0IGludF9ub2RlICp0cmVlLCB1bnNpZ25lZCBjaGFyIG4sCisJCXN0cnVjdCBsZWFmX25vZGUgKmVudHJ5KQoreworCXN0cnVjdCBsZWFmX25vZGUgKmw7CisJc3RydWN0IGludF9ub2RlICpwYXJlbnRfc3RhY2tbMjBdOworCXVuc2lnbmVkIGNoYXIgaSwgajsKKwl2b2lkICoqcCA9IG5vdGVfdHJlZV9zZWFyY2godCwgJnRyZWUsICZuLCBlbnRyeS0+a2V5X3NoYTEpOworCisJYXNzZXJ0KEdFVF9QVFJfVFlQRShlbnRyeSkgPT0gMCk7IC8qIG5vIHR5cGUgYml0cyBzZXQgKi8KKwlpZiAoR0VUX1BUUl9UWVBFKCpwKSAhPSBQVFJfVFlQRV9OT1RFKQorCQlyZXR1cm47IC8qIHR5cGUgbWlzbWF0Y2gsIG5vdGhpbmcgdG8gcmVtb3ZlICovCisJbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIENMUl9QVFJfVFlQRSgqcCk7CisJaWYgKGhhc2hjbXAobC0+a2V5X3NoYTEsIGVudHJ5LT5rZXlfc2hhMSkpCisJCXJldHVybjsgLyoga2V5IG1pc21hdGNoLCBub3RoaW5nIHRvIHJlbW92ZSAqLworCisJLyogd2UgaGF2ZSBmb3VuZCBhIG1hdGNoaW5nIGVudHJ5ICovCisJaGFzaGNweShlbnRyeS0+dmFsX3NoYTEsIGwtPnZhbF9zaGExKTsKKwlmcmVlKGwpOworCSpwID0gU0VUX1BUUl9UWVBFKE5VTEwsIFBUUl9UWVBFX05VTEwpOworCisJLyogY29uc29saWRhdGUgdGhpcyB0cmVlIGxldmVsLCBhbmQgcGFyZW50IGxldmVscywgaWYgcG9zc2libGUgKi8KKwlpZiAoIW4pCisJCXJldHVybjsgLyogY2Fubm90IGNvbnNvbGlkYXRlIHRvcCBsZXZlbCAqLworCS8qIGZpcnN0LCBidWlsZCBzdGFjayBvZiBhbmNlc3RvcnMgYmV0d2VlbiByb290IGFuZCBjdXJyZW50IG5vZGUgKi8KKwlwYXJlbnRfc3RhY2tbMF0gPSB0LT5yb290OworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaiA9IEdFVF9OSUJCTEUoaSwgZW50cnktPmtleV9zaGExKTsKKwkJcGFyZW50X3N0YWNrW2kgKyAxXSA9IENMUl9QVFJfVFlQRShwYXJlbnRfc3RhY2tbaV0tPmFbal0pOworCX0KKwlhc3NlcnQoaSA9PSBuICYmIHBhcmVudF9zdGFja1tpXSA9PSB0cmVlKTsKKwkvKiBuZXh0LCB1bndpbmQgc3RhY2sgdW50aWwgbm90ZV90cmVlX2NvbnNvbGlkYXRlKCkgaXMgZG9uZSAqLworCXdoaWxlIChpID4gMCAmJgorCSAgICAgICAhbm90ZV90cmVlX2NvbnNvbGlkYXRlKHBhcmVudF9zdGFja1tpXSwgcGFyZW50X3N0YWNrW2kgLSAxXSwKKwkJCQkgICAgICBHRVRfTklCQkxFKGkgLSAxLCBlbnRyeS0+a2V5X3NoYTEpKSkKKwkJaS0tOworfQorCisvKgorICogVG8gaW5zZXJ0IGEgbGVhZl9ub2RlOgorICogU2VhcmNoIHRvIHRoZSB0cmVlIGxvY2F0aW9uIGFwcHJvcHJpYXRlIGZvciB0aGUgZ2l2ZW4gbGVhZl9ub2RlJ3Mga2V5OgorICogLSBJZiBsb2NhdGlvbiBpcyB1bnVzZWQgKE5VTEwpLCBzdG9yZSB0aGUgdHdlYWtlZCBwb2ludGVyIGRpcmVjdGx5IHRoZXJlCisgKiAtIElmIGxvY2F0aW9uIGhvbGRzIGEgbm90ZSBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIG5vdGUtdG8tYmUtaW5zZXJ0ZWQsIHRoZW4KKyAqICAgY29tYmluZSB0aGUgdHdvIG5vdGVzIChieSBjYWxsaW5nIHRoZSBnaXZlbiBjb21iaW5lX25vdGVzIGZ1bmN0aW9uKS4KKyAqIC0gSWYgbG9jYXRpb24gaG9sZHMgYSBub3RlIGVudHJ5IHRoYXQgbWF0Y2hlcyB0aGUgc3VidHJlZS10by1iZS1pbnNlcnRlZCwKKyAqICAgdGhlbiB1bnBhY2sgdGhlIHN1YnRyZWUtdG8tYmUtaW5zZXJ0ZWQgaW50byB0aGUgbG9jYXRpb24uCisgKiAtIElmIGxvY2F0aW9uIGhvbGRzIGEgbWF0Y2hpbmcgc3VidHJlZSBlbnRyeSwgdW5wYWNrIHRoZSBzdWJ0cmVlIGF0IHRoYXQKKyAqICAgbG9jYXRpb24sIGFuZCByZXN0YXJ0IHRoZSBpbnNlcnQgb3BlcmF0aW9uIGZyb20gdGhhdCBsZXZlbC4KKyAqIC0gRWxzZSwgY3JlYXRlIGEgbmV3IGludF9ub2RlLCBob2xkaW5nIGJvdGggdGhlIG5vZGUtYXQtbG9jYXRpb24gYW5kIHRoZQorICogICBub2RlLXRvLWJlLWluc2VydGVkLCBhbmQgc3RvcmUgdGhlIG5ldyBpbnRfbm9kZSBpbnRvIHRoZSBsb2NhdGlvbi4KKyAqLworc3RhdGljIGludCBub3RlX3RyZWVfaW5zZXJ0KHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3QgaW50X25vZGUgKnRyZWUsCisJCXVuc2lnbmVkIGNoYXIgbiwgc3RydWN0IGxlYWZfbm9kZSAqZW50cnksIHVuc2lnbmVkIGNoYXIgdHlwZSwKKwkJY29tYmluZV9ub3Rlc19mbiBjb21iaW5lX25vdGVzKQoreworCXN0cnVjdCBpbnRfbm9kZSAqbmV3X25vZGU7CisJc3RydWN0IGxlYWZfbm9kZSAqbDsKKwl2b2lkICoqcCA9IG5vdGVfdHJlZV9zZWFyY2godCwgJnRyZWUsICZuLCBlbnRyeS0+a2V5X3NoYTEpOworCWludCByZXQgPSAwOworCisJYXNzZXJ0KEdFVF9QVFJfVFlQRShlbnRyeSkgPT0gMCk7IC8qIG5vIHR5cGUgYml0cyBzZXQgKi8KKwlsID0gKHN0cnVjdCBsZWFmX25vZGUgKikgQ0xSX1BUUl9UWVBFKCpwKTsKKwlzd2l0Y2ggKEdFVF9QVFJfVFlQRSgqcCkpIHsKKwljYXNlIFBUUl9UWVBFX05VTEw6CisJCWFzc2VydCghKnApOworCQlpZiAoaXNfbnVsbF9zaGExKGVudHJ5LT52YWxfc2hhMSkpCisJCQlmcmVlKGVudHJ5KTsKKwkJZWxzZQorCQkJKnAgPSBTRVRfUFRSX1RZUEUoZW50cnksIHR5cGUpOworCQlyZXR1cm4gMDsKKwljYXNlIFBUUl9UWVBFX05PVEU6CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIFBUUl9UWVBFX05PVEU6CisJCQlpZiAoIWhhc2hjbXAobC0+a2V5X3NoYTEsIGVudHJ5LT5rZXlfc2hhMSkpIHsKKwkJCQkvKiBza2lwIGNvbmNhdGVuYXRpb24gaWYgbCA9PSBlbnRyeSAqLworCQkJCWlmICghaGFzaGNtcChsLT52YWxfc2hhMSwgZW50cnktPnZhbF9zaGExKSkKKwkJCQkJcmV0dXJuIDA7CisKKwkJCQlyZXQgPSBjb21iaW5lX25vdGVzKGwtPnZhbF9zaGExLAorCQkJCQkJICAgIGVudHJ5LT52YWxfc2hhMSk7CisJCQkJaWYgKCFyZXQgJiYgaXNfbnVsbF9zaGExKGwtPnZhbF9zaGExKSkKKwkJCQkJbm90ZV90cmVlX3JlbW92ZSh0LCB0cmVlLCBuLCBlbnRyeSk7CisJCQkJZnJlZShlbnRyeSk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBUUl9UWVBFX1NVQlRSRUU6CisJCQlpZiAoIVNVQlRSRUVfU0hBMV9QUkVGSVhDTVAobC0+a2V5X3NoYTEsCisJCQkJCQkgICAgZW50cnktPmtleV9zaGExKSkgeworCQkJCS8qIHVucGFjayAnZW50cnknICovCisJCQkJbG9hZF9zdWJ0cmVlKHQsIGVudHJ5LCB0cmVlLCBuKTsKKwkJCQlmcmVlKGVudHJ5KTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgUFRSX1RZUEVfU1VCVFJFRToKKwkJaWYgKCFTVUJUUkVFX1NIQTFfUFJFRklYQ01QKGVudHJ5LT5rZXlfc2hhMSwgbC0+a2V5X3NoYTEpKSB7CisJCQkvKiB1bnBhY2sgJ2wnIGFuZCByZXN0YXJ0IGluc2VydCAqLworCQkJKnAgPSBOVUxMOworCQkJbG9hZF9zdWJ0cmVlKHQsIGwsIHRyZWUsIG4pOworCQkJZnJlZShsKTsKKwkJCXJldHVybiBub3RlX3RyZWVfaW5zZXJ0KHQsIHRyZWUsIG4sIGVudHJ5LCB0eXBlLAorCQkJCQkJY29tYmluZV9ub3Rlcyk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJLyogbm9uLW1hdGNoaW5nIGxlYWZfbm9kZSAqLworCWFzc2VydChHRVRfUFRSX1RZUEUoKnApID09IFBUUl9UWVBFX05PVEUgfHwKKwkgICAgICAgR0VUX1BUUl9UWVBFKCpwKSA9PSBQVFJfVFlQRV9TVUJUUkVFKTsKKwlpZiAoaXNfbnVsbF9zaGExKGVudHJ5LT52YWxfc2hhMSkpIHsgLyogc2tpcCBpbnNlcnRpb24gb2YgZW1wdHkgbm90ZSAqLworCQlmcmVlKGVudHJ5KTsKKwkJcmV0dXJuIDA7CisJfQorCW5ld19ub2RlID0gKHN0cnVjdCBpbnRfbm9kZSAqKSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgaW50X25vZGUpKTsKKwlyZXQgPSBub3RlX3RyZWVfaW5zZXJ0KHQsIG5ld19ub2RlLCBuICsgMSwgbCwgR0VUX1BUUl9UWVBFKCpwKSwKKwkJCSAgICAgICBjb21iaW5lX25vdGVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCSpwID0gU0VUX1BUUl9UWVBFKG5ld19ub2RlLCBQVFJfVFlQRV9JTlRFUk5BTCk7CisJcmV0dXJuIG5vdGVfdHJlZV9pbnNlcnQodCwgbmV3X25vZGUsIG4gKyAxLCBlbnRyeSwgdHlwZSwgY29tYmluZV9ub3Rlcyk7Cit9CisKKy8qIEZyZWUgdGhlIGVudGlyZSBub3RlcyBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgZ2l2ZW4gdHJlZSAqLworc3RhdGljIHZvaWQgbm90ZV90cmVlX2ZyZWUoc3RydWN0IGludF9ub2RlICp0cmVlKQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXZvaWQgKnAgPSB0cmVlLT5hW2ldOworCQlzd2l0Y2ggKEdFVF9QVFJfVFlQRShwKSkgeworCQljYXNlIFBUUl9UWVBFX0lOVEVSTkFMOgorCQkJbm90ZV90cmVlX2ZyZWUoQ0xSX1BUUl9UWVBFKHApKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFBUUl9UWVBFX05PVEU6CisJCWNhc2UgUFRSX1RZUEVfU1VCVFJFRToKKwkJCWZyZWUoQ0xSX1BUUl9UWVBFKHApKTsKKwkJfQorCX0KK30KKworLyoKKyAqIENvbnZlcnQgYSBwYXJ0aWFsIFNIQTEgaGV4IHN0cmluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwYXJ0aWFsIFNIQTEgdmFsdWUuCisgKiAtIGhleCAgICAgIC0gUGFydGlhbCBTSEExIHNlZ21lbnQgaW4gQVNDSUkgaGV4IGZvcm1hdAorICogLSBoZXhfbGVuICAtIExlbmd0aCBvZiBhYm92ZSBzZWdtZW50LiBNdXN0IGJlIG11bHRpcGxlIG9mIDIgYmV0d2VlbiAwIGFuZCA0MAorICogLSBzaGExICAgICAtIFBhcnRpYWwgU0hBMSB2YWx1ZSBpcyB3cml0dGVuIGhlcmUKKyAqIC0gc2hhMV9sZW4gLSBNYXggI2J5dGVzIHRvIHN0b3JlIGluIHNoYTEsIE11c3QgYmUgPj0gaGV4X2xlbiAvIDIsIGFuZCA8IDIwCisgKiBSZXR1cm5zIC0xIG9uIGVycm9yIChpbnZhbGlkIGFyZ3VtZW50cyBvciBpbnZhbGlkIFNIQTEgKG5vdCBpbiBoZXggZm9ybWF0KSkuCisgKiBPdGhlcndpc2UsIHJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gc2hhMSAoaS5lLiBoZXhfbGVuIC8gMikuCisgKiBQYWRzIHNoYTEgd2l0aCBOVUxzIHVwIHRvIHNoYTFfbGVuIChub3QgaW5jbHVkZWQgaW4gcmV0dXJuZWQgbGVuZ3RoKS4KKyAqLworc3RhdGljIGludCBnZXRfc2hhMV9oZXhfc2VnbWVudChjb25zdCBjaGFyICpoZXgsIHVuc2lnbmVkIGludCBoZXhfbGVuLAorCQl1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBpbnQgc2hhMV9sZW4pCit7CisJdW5zaWduZWQgaW50IGksIGxlbiA9IGhleF9sZW4gPj4gMTsKKwlpZiAoaGV4X2xlbiAlIDIgIT0gMCB8fCBsZW4gPiBzaGExX2xlbikKKwkJcmV0dXJuIC0xOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQl1bnNpZ25lZCBpbnQgdmFsID0gKGhleHZhbChoZXhbMF0pIDw8IDQpIHwgaGV4dmFsKGhleFsxXSk7CisJCWlmICh2YWwgJiB+MHhmZikKKwkJCXJldHVybiAtMTsKKwkJKnNoYTErKyA9IHZhbDsKKwkJaGV4ICs9IDI7CisJfQorCWZvciAoOyBpIDwgc2hhMV9sZW47IGkrKykKKwkJKnNoYTErKyA9IDA7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBub25fbm90ZV9jbXAoY29uc3Qgc3RydWN0IG5vbl9ub3RlICphLCBjb25zdCBzdHJ1Y3Qgbm9uX25vdGUgKmIpCit7CisJcmV0dXJuIHN0cmNtcChhLT5wYXRoLCBiLT5wYXRoKTsKK30KKworLyogbm90ZTogdGFrZXMgb3duZXJzaGlwIG9mIHBhdGggc3RyaW5nICovCitzdGF0aWMgdm9pZCBhZGRfbm9uX25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNoYXIgKnBhdGgsCisJCXVuc2lnbmVkIGludCBtb2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBub25fbm90ZSAqcCA9IHQtPnByZXZfbm9uX25vdGUsICpuOworCW4gPSAoc3RydWN0IG5vbl9ub3RlICopIHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBub25fbm90ZSkpOworCW4tPm5leHQgPSBOVUxMOworCW4tPnBhdGggPSBwYXRoOworCW4tPm1vZGUgPSBtb2RlOworCWhhc2hjcHkobi0+c2hhMSwgc2hhMSk7CisJdC0+cHJldl9ub25fbm90ZSA9IG47CisKKwlpZiAoIXQtPmZpcnN0X25vbl9ub3RlKSB7CisJCXQtPmZpcnN0X25vbl9ub3RlID0gbjsKKwkJcmV0dXJuOworCX0KKworCWlmIChub25fbm90ZV9jbXAocCwgbikgPCAwKQorCQk7IC8qIGRvIG5vdGhpbmcgICovCisJZWxzZSBpZiAobm9uX25vdGVfY21wKHQtPmZpcnN0X25vbl9ub3RlLCBuKSA8PSAwKQorCQlwID0gdC0+Zmlyc3Rfbm9uX25vdGU7CisJZWxzZSB7CisJCS8qIG4gc29ydHMgYmVmb3JlIHQtPmZpcnN0X25vbl9ub3RlICovCisJCW4tPm5leHQgPSB0LT5maXJzdF9ub25fbm90ZTsKKwkJdC0+Zmlyc3Rfbm9uX25vdGUgPSBuOworCQlyZXR1cm47CisJfQorCisJLyogbiBzb3J0cyBlcXVhbCBvciBhZnRlciBwICovCisJd2hpbGUgKHAtPm5leHQgJiYgbm9uX25vdGVfY21wKHAtPm5leHQsIG4pIDw9IDApCisJCXAgPSBwLT5uZXh0OworCisJaWYgKG5vbl9ub3RlX2NtcChwLCBuKSA9PSAwKSB7IC8qIG4gfj0gcDsgb3ZlcndyaXRlIHAgd2l0aCBuICovCisJCWFzc2VydChzdHJjbXAocC0+cGF0aCwgbi0+cGF0aCkgPT0gMCk7CisJCXAtPm1vZGUgPSBuLT5tb2RlOworCQloYXNoY3B5KHAtPnNoYTEsIG4tPnNoYTEpOworCQlmcmVlKG4pOworCQl0LT5wcmV2X25vbl9ub3RlID0gcDsKKwkJcmV0dXJuOworCX0KKworCS8qIG4gc29ydHMgYmV0d2VlbiBwIGFuZCBwLT5uZXh0ICovCisJbi0+bmV4dCA9IHAtPm5leHQ7CisJcC0+bmV4dCA9IG47Cit9CisKK3N0YXRpYyB2b2lkIGxvYWRfc3VidHJlZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgc3RydWN0IGxlYWZfbm9kZSAqc3VidHJlZSwKKwkJc3RydWN0IGludF9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgbikKK3sKKwl1bnNpZ25lZCBjaGFyIG9iamVjdF9zaGExWzIwXTsKKwl1bnNpZ25lZCBpbnQgcHJlZml4X2xlbjsKKwl2b2lkICpidWY7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCWludCBsZW4sIHBhdGhfbGVuOworCXVuc2lnbmVkIGNoYXIgdHlwZTsKKwlzdHJ1Y3QgbGVhZl9ub2RlICpsOworCisJYnVmID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IoJmRlc2MsIHN1YnRyZWUtPnZhbF9zaGExKTsKKwlpZiAoIWJ1ZikKKwkJZGllKCJDb3VsZCBub3QgcmVhZCAlcyBmb3Igbm90ZXMtaW5kZXgiLAorCQkgICAgIHNoYTFfdG9faGV4KHN1YnRyZWUtPnZhbF9zaGExKSk7CisKKwlwcmVmaXhfbGVuID0gc3VidHJlZS0+a2V5X3NoYTFbMTldOworCWFzc2VydChwcmVmaXhfbGVuICogMiA+PSBuKTsKKwltZW1jcHkob2JqZWN0X3NoYTEsIHN1YnRyZWUtPmtleV9zaGExLCBwcmVmaXhfbGVuKTsKKwl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkgeworCQlwYXRoX2xlbiA9IHN0cmxlbihlbnRyeS5wYXRoKTsKKwkJbGVuID0gZ2V0X3NoYTFfaGV4X3NlZ21lbnQoZW50cnkucGF0aCwgcGF0aF9sZW4sCisJCQkJb2JqZWN0X3NoYTEgKyBwcmVmaXhfbGVuLCAyMCAtIHByZWZpeF9sZW4pOworCQlpZiAobGVuIDwgMCkKKwkJCWdvdG8gaGFuZGxlX25vbl9ub3RlOyAvKiBlbnRyeS5wYXRoIGlzIG5vdCBhIFNIQTEgKi8KKwkJbGVuICs9IHByZWZpeF9sZW47CisKKwkJLyoKKwkJICogSWYgb2JqZWN0IFNIQTEgaXMgY29tcGxldGUgKGxlbiA9PSAyMCksIGFzc3VtZSBub3RlIG9iamVjdAorCQkgKiBJZiBvYmplY3QgU0hBMSBpcyBpbmNvbXBsZXRlIChsZW4gPCAyMCksIGFuZCBjdXJyZW50CisJCSAqIGNvbXBvbmVudCBjb25zaXN0cyBvZiAyIGhleCBjaGFycywgYXNzdW1lIG5vdGUgc3VidHJlZQorCQkgKi8KKwkJaWYgKGxlbiA8PSAyMCkgeworCQkJdHlwZSA9IFBUUl9UWVBFX05PVEU7CisJCQlsID0gKHN0cnVjdCBsZWFmX25vZGUgKikKKwkJCQl4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbGVhZl9ub2RlKSk7CisJCQloYXNoY3B5KGwtPmtleV9zaGExLCBvYmplY3Rfc2hhMSk7CisJCQloYXNoY3B5KGwtPnZhbF9zaGExLCBlbnRyeS5zaGExKTsKKwkJCWlmIChsZW4gPCAyMCkgeworCQkJCWlmICghU19JU0RJUihlbnRyeS5tb2RlKSB8fCBwYXRoX2xlbiAhPSAyKQorCQkJCQlnb3RvIGhhbmRsZV9ub25fbm90ZTsgLyogbm90IHN1YnRyZWUgKi8KKwkJCQlsLT5rZXlfc2hhMVsxOV0gPSAodW5zaWduZWQgY2hhcikgbGVuOworCQkJCXR5cGUgPSBQVFJfVFlQRV9TVUJUUkVFOworCQkJfQorCQkJaWYgKG5vdGVfdHJlZV9pbnNlcnQodCwgbm9kZSwgbiwgbCwgdHlwZSwKKwkJCQkJICAgICBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlKSkKKwkJCQlkaWUoIkZhaWxlZCB0byBsb2FkICVzICVzIGludG8gbm90ZXMgdHJlZSAiCisJCQkJICAgICJmcm9tICVzIiwKKwkJCQkgICAgdHlwZSA9PSBQVFJfVFlQRV9OT1RFID8gIm5vdGUiIDogInN1YnRyZWUiLAorCQkJCSAgICBzaGExX3RvX2hleChsLT5rZXlfc2hhMSksIHQtPnJlZik7CisJCX0KKwkJY29udGludWU7CisKK2hhbmRsZV9ub25fbm90ZToKKwkJLyoKKwkJICogRGV0ZXJtaW5lIGZ1bGwgcGF0aCBmb3IgdGhpcyBub24tbm90ZSBlbnRyeToKKwkJICogVGhlIGZpbGVuYW1lIGlzIGFscmVhZHkgZm91bmQgaW4gZW50cnkucGF0aCwgYnV0IHRoZQorCQkgKiBkaXJlY3RvcnkgcGFydCBvZiB0aGUgcGF0aCBtdXN0IGJlIGRlZHVjZWQgZnJvbSB0aGUgc3VidHJlZQorCQkgKiBjb250YWluaW5nIHRoaXMgZW50cnkuIFdlIGFzc3VtZSBoZXJlIHRoYXQgdGhlIG92ZXJhbGwgbm90ZXMKKwkJICogdHJlZSBmb2xsb3dzIGEgc3RyaWN0IGJ5dGUtYmFzZWQgcHJvZ3Jlc3NpdmUgZmFub3V0CisJCSAqIHN0cnVjdHVyZSAoaS5lLiB1c2luZyAyLzM4LCAyLzIvMzYsIGV0Yy4gZmFub3V0cywgYW5kIG5vdAorCQkgKiBlLmcuIDQvMzYgZmFub3V0KS4gVGhpcyBtZWFucyB0aGF0IGlmIGEgbm9uLW5vdGUgaXMgZm91bmQgYXQKKwkJICogcGF0aCAiZGVhZC9iZWVmIiwgdGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgcmVnaXN0ZXIgaXQgYXMKKwkJICogYmVpbmcgZm91bmQgb24gImRlL2FkL2JlZWYiLgorCQkgKiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IHVzZSBzdWNoIG5vbi1vYnZpb3VzIG5vbi1ub3RlCisJCSAqIHBhdGhzIGluIHRoZSBtaWRkbGUgb2YgYSBub3RlcyB0cmVlLCB5b3UgZGVzZXJ2ZSB3aGF0J3MKKwkJICogY29taW5nIHRvIHlvdSA7KS4gTm90ZSB0aGF0IGZvciBub24tbm90ZXMgdGhhdCBhcmUgbm90CisJCSAqIFNIQTEtbGlrZSBhdCB0aGUgdG9wIGxldmVsLCB0aGVyZSB3aWxsIGJlIG5vIHByb2JsZW1zLgorCQkgKgorCQkgKiBUbyBjb25jbHVkZSwgaXQgaXMgc3Ryb25nbHkgYWR2aXNlZCB0byBtYWtlIHN1cmUgbm9uLW5vdGVzCisJCSAqIGhhdmUgYXQgbGVhc3Qgb25lIG5vbi1oZXggY2hhcmFjdGVyIGluIHRoZSB0b3AtbGV2ZWwgcGF0aAorCQkgKiBjb21wb25lbnQuCisJCSAqLworCQl7CisJCQlzdHJ1Y3Qgc3RyYnVmIG5vbl9ub3RlX3BhdGggPSBTVFJCVUZfSU5JVDsKKwkJCWNvbnN0IGNoYXIgKnEgPSBzaGExX3RvX2hleChzdWJ0cmVlLT5rZXlfc2hhMSk7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBwcmVmaXhfbGVuOyBpKyspIHsKKwkJCQlzdHJidWZfYWRkY2goJm5vbl9ub3RlX3BhdGgsICpxKyspOworCQkJCXN0cmJ1Zl9hZGRjaCgmbm9uX25vdGVfcGF0aCwgKnErKyk7CisJCQkJc3RyYnVmX2FkZGNoKCZub25fbm90ZV9wYXRoLCAnLycpOworCQkJfQorCQkJc3RyYnVmX2FkZHN0cigmbm9uX25vdGVfcGF0aCwgZW50cnkucGF0aCk7CisJCQlhZGRfbm9uX25vdGUodCwgc3RyYnVmX2RldGFjaCgmbm9uX25vdGVfcGF0aCwgTlVMTCksCisJCQkJICAgICBlbnRyeS5tb2RlLCBlbnRyeS5zaGExKTsKKwkJfQorCX0KKwlmcmVlKGJ1Zik7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgb3B0aW1hbCBvbi1kaXNrIGZhbm91dCBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBub3RlcyB0cmVlCisgKgorICogR2l2ZW4gYSAoc3ViKXRyZWUgYW5kIHRoZSBsZXZlbCBpbiB0aGUgaW50ZXJuYWwgdHJlZSBzdHJ1Y3R1cmUsIGRldGVybWluZQorICogd2hldGhlciBvciBub3QgdGhlIGdpdmVuIGV4aXN0aW5nIGZhbm91dCBzaG91bGQgYmUgZXhwYW5kZWQgZm9yIHRoaXMKKyAqIChzdWIpdHJlZS4KKyAqCisgKiBWYWx1ZXMgb2YgdGhlICdmYW5vdXQnIHZhcmlhYmxlOgorICogLSAwOiBObyBmYW5vdXQgKGFsbCBub3RlcyBhcmUgc3RvcmVkIGRpcmVjdGx5IGluIHRoZSByb290IG5vdGVzIHRyZWUpCisgKiAtIDE6IDIvMzggZmFub3V0CisgKiAtIDI6IDIvMi8zNiBmYW5vdXQKKyAqIC0gMzogMi8yLzIvMzQgZmFub3V0CisgKiBldGMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGRldGVybWluZV9mYW5vdXQoc3RydWN0IGludF9ub2RlICp0cmVlLCB1bnNpZ25lZCBjaGFyIG4sCisJCXVuc2lnbmVkIGNoYXIgZmFub3V0KQoreworCS8qCisJICogVGhlIGZvbGxvd2luZyBpcyBhIHNpbXBsZSBoZXVyaXN0aWMgdGhhdCB3b3JrcyB3ZWxsIGluIHByYWN0aWNlOgorCSAqIEZvciBlYWNoIGV2ZW4tbnVtYmVyZWQgMTYtdHJlZSBsZXZlbCAocmVtZW1iZXIgdGhhdCBlYWNoIG9uLWRpc2sKKwkgKiBmYW5vdXQgbGV2ZWwgY29ycmVzcG9uZHMgdG8gX3R3b18gMTYtdHJlZSBsZXZlbHMpLCBwZWVrIGF0IGFsbCAxNgorCSAqIGVudHJpZXMgYXQgdGhhdCB0cmVlIGxldmVsLiBJZiBhbGwgb2YgdGhlbSBhcmUgZWl0aGVyIGludF9ub2RlcyBvcgorCSAqIHN1YnRyZWUgZW50cmllcywgdGhlbiB0aGVyZSBhcmUgbGlrZWx5IHBsZW50eSBvZiBub3RlcyBiZWxvdyB0aGlzCisJICogbGV2ZWwsIHNvIHdlIHJldHVybiBhbiBpbmNyZW1lbnRlZCBmYW5vdXQuCisJICovCisJdW5zaWduZWQgaW50IGk7CisJaWYgKChuICUgMikgfHwgKG4gPiAyICogZmFub3V0KSkKKwkJcmV0dXJuIGZhbm91dDsKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlzd2l0Y2ggKEdFVF9QVFJfVFlQRSh0cmVlLT5hW2ldKSkgeworCQljYXNlIFBUUl9UWVBFX1NVQlRSRUU6CisJCWNhc2UgUFRSX1RZUEVfSU5URVJOQUw6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBmYW5vdXQ7CisJCX0KKwl9CisJcmV0dXJuIGZhbm91dCArIDE7Cit9CisKKy8qIGhleCBTSEExICsgMTkgKiAnLycgKyBOVUwgKi8KKyNkZWZpbmUgRkFOT1VUX1BBVEhfTUFYIDQwICsgMTkgKyAxCisKK3N0YXRpYyB2b2lkIGNvbnN0cnVjdF9wYXRoX3dpdGhfZmFub3V0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCXVuc2lnbmVkIGNoYXIgZmFub3V0LCBjaGFyICpwYXRoKQoreworCXVuc2lnbmVkIGludCBpID0gMCwgaiA9IDA7CisJY29uc3QgY2hhciAqaGV4X3NoYTEgPSBzaGExX3RvX2hleChzaGExKTsKKwlhc3NlcnQoZmFub3V0IDwgMjApOworCXdoaWxlIChmYW5vdXQpIHsKKwkJcGF0aFtpKytdID0gaGV4X3NoYTFbaisrXTsKKwkJcGF0aFtpKytdID0gaGV4X3NoYTFbaisrXTsKKwkJcGF0aFtpKytdID0gJy8nOworCQlmYW5vdXQtLTsKKwl9CisJeHNucHJpbnRmKHBhdGggKyBpLCBGQU5PVVRfUEFUSF9NQVggLSBpLCAiJXMiLCBoZXhfc2hhMSArIGopOworfQorCitzdGF0aWMgaW50IGZvcl9lYWNoX25vdGVfaGVscGVyKHN0cnVjdCBub3Rlc190cmVlICp0LCBzdHJ1Y3QgaW50X25vZGUgKnRyZWUsCisJCXVuc2lnbmVkIGNoYXIgbiwgdW5zaWduZWQgY2hhciBmYW5vdXQsIGludCBmbGFncywKKwkJZWFjaF9ub3RlX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXVuc2lnbmVkIGludCBpOworCXZvaWQgKnA7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGxlYWZfbm9kZSAqbDsKKwlzdGF0aWMgY2hhciBwYXRoW0ZBTk9VVF9QQVRIX01BWF07CisKKwlmYW5vdXQgPSBkZXRlcm1pbmVfZmFub3V0KHRyZWUsIG4sIGZhbm91dCk7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKK3JlZG86CisJCXAgPSB0cmVlLT5hW2ldOworCQlzd2l0Y2ggKEdFVF9QVFJfVFlQRShwKSkgeworCQljYXNlIFBUUl9UWVBFX0lOVEVSTkFMOgorCQkJLyogcmVjdXJzZSBpbnRvIGludF9ub2RlICovCisJCQlyZXQgPSBmb3JfZWFjaF9ub3RlX2hlbHBlcih0LCBDTFJfUFRSX1RZUEUocCksIG4gKyAxLAorCQkJCWZhbm91dCwgZmxhZ3MsIGZuLCBjYl9kYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIFBUUl9UWVBFX1NVQlRSRUU6CisJCQlsID0gKHN0cnVjdCBsZWFmX25vZGUgKikgQ0xSX1BUUl9UWVBFKHApOworCQkJLyoKKwkJCSAqIFN1YnRyZWUgZW50cmllcyBpbiB0aGUgbm90ZSB0cmVlIHJlcHJlc2VudCBwYXJ0cyBvZgorCQkJICogdGhlIG5vdGUgdHJlZSB0aGF0IGhhdmUgbm90IHlldCBiZWVuIGV4cGxvcmVkLiBUaGVyZQorCQkJICogaXMgYSBkaXJlY3QgcmVsYXRpb25zaGlwIGJldHdlZW4gc3VidHJlZSBlbnRyaWVzIGF0CisJCQkgKiBsZXZlbCAnbicgaW4gdGhlIHRyZWUsIGFuZCB0aGUgJ2Zhbm91dCcgdmFyaWFibGU6CisJCQkgKiBTdWJ0cmVlIGVudHJpZXMgYXQgbGV2ZWwgJ24gPD0gMiAqIGZhbm91dCcgc2hvdWxkIGJlCisJCQkgKiBwcmVzZXJ2ZWQsIHNpbmNlIHRoZXkgY29ycmVzcG9uZCBleGFjdGx5IHRvIGEgZmFub3V0CisJCQkgKiBkaXJlY3RvcnkgaW4gdGhlIG9uLWRpc2sgc3RydWN0dXJlLiBIb3dldmVyLCBzdWJ0cmVlCisJCQkgKiBlbnRyaWVzIGF0IGxldmVsICduID4gMiAqIGZhbm91dCcgc2hvdWxkIE5PVCBiZQorCQkJICogcHJlc2VydmVkLCBidXQgcmF0aGVyIGNvbnNvbGlkYXRlZCBpbnRvIHRoZSBhYm92ZQorCQkJICogbm90ZXMgdHJlZSBsZXZlbC4gV2UgYWNoaWV2ZSB0aGlzIGJ5IHVuY29uZGl0aW9uYWxseQorCQkJICogdW5wYWNraW5nIHN1YnRyZWUgZW50cmllcyB0aGF0IGV4aXN0IGJlbG93IHRoZQorCQkJICogdGhyZXNob2xkIGxldmVsIGF0ICduID0gMiAqIGZhbm91dCcuCisJCQkgKi8KKwkJCWlmIChuIDw9IDIgKiBmYW5vdXQgJiYKKwkJCSAgICBmbGFncyAmIEZPUl9FQUNIX05PVEVfWUlFTERfU1VCVFJFRVMpIHsKKwkJCQkvKiBpbnZva2UgY2FsbGJhY2sgd2l0aCBzdWJ0cmVlICovCisJCQkJdW5zaWduZWQgaW50IHBhdGhfbGVuID0KKwkJCQkJbC0+a2V5X3NoYTFbMTldICogMiArIGZhbm91dDsKKwkJCQlhc3NlcnQocGF0aF9sZW4gPCBGQU5PVVRfUEFUSF9NQVggLSAxKTsKKwkJCQljb25zdHJ1Y3RfcGF0aF93aXRoX2Zhbm91dChsLT5rZXlfc2hhMSwgZmFub3V0LAorCQkJCQkJCSAgIHBhdGgpOworCQkJCS8qIENyZWF0ZSB0cmFpbGluZyBzbGFzaCwgaWYgbmVlZGVkICovCisJCQkJaWYgKHBhdGhbcGF0aF9sZW4gLSAxXSAhPSAnLycpCisJCQkJCXBhdGhbcGF0aF9sZW4rK10gPSAnLyc7CisJCQkJcGF0aFtwYXRoX2xlbl0gPSAnXDAnOworCQkJCXJldCA9IGZuKGwtPmtleV9zaGExLCBsLT52YWxfc2hhMSwgcGF0aCwKKwkJCQkJIGNiX2RhdGEpOworCQkJfQorCQkJaWYgKG4gPiBmYW5vdXQgKiAyIHx8CisJCQkgICAgIShmbGFncyAmIEZPUl9FQUNIX05PVEVfRE9OVF9VTlBBQ0tfU1VCVFJFRVMpKSB7CisJCQkJLyogdW5wYWNrIHN1YnRyZWUgYW5kIHJlc3VtZSB0cmF2ZXJzYWwgKi8KKwkJCQl0cmVlLT5hW2ldID0gTlVMTDsKKwkJCQlsb2FkX3N1YnRyZWUodCwgbCwgdHJlZSwgbik7CisJCQkJZnJlZShsKTsKKwkJCQlnb3RvIHJlZG87CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQVFJfVFlQRV9OT1RFOgorCQkJbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIENMUl9QVFJfVFlQRShwKTsKKwkJCWNvbnN0cnVjdF9wYXRoX3dpdGhfZmFub3V0KGwtPmtleV9zaGExLCBmYW5vdXQsIHBhdGgpOworCQkJcmV0ID0gZm4obC0+a2V5X3NoYTEsIGwtPnZhbF9zaGExLCBwYXRoLCBjYl9kYXRhKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRyZWVfd3JpdGVfc3RhY2sgeworCXN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICpuZXh0OworCXN0cnVjdCBzdHJidWYgYnVmOworCWNoYXIgcGF0aFsyXTsgLyogcGF0aCB0byBzdWJ0cmVlIGluIG5leHQsIGlmIGFueSAqLworfTsKKworc3RhdGljIGlubGluZSBpbnQgbWF0Y2hlc190cmVlX3dyaXRlX3N0YWNrKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICp0d3MsCisJCWNvbnN0IGNoYXIgKmZ1bGxfcGF0aCkKK3sKKwlyZXR1cm4gIGZ1bGxfcGF0aFswXSA9PSB0d3MtPnBhdGhbMF0gJiYKKwkJZnVsbF9wYXRoWzFdID09IHR3cy0+cGF0aFsxXSAmJgorCQlmdWxsX3BhdGhbMl0gPT0gJy8nOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV90cmVlX2VudHJ5KHN0cnVjdCBzdHJidWYgKmJ1ZiwgdW5zaWduZWQgaW50IG1vZGUsCisJCWNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGludCBwYXRoX2xlbiwgY29uc3QKKwkJdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJidWZfYWRkZihidWYsICIlbyAlLipzJWMiLCBtb2RlLCBwYXRoX2xlbiwgcGF0aCwgJ1wwJyk7CisJc3RyYnVmX2FkZChidWYsIHNoYTEsIDIwKTsKK30KKworc3RhdGljIHZvaWQgdHJlZV93cml0ZV9zdGFja19pbml0X3N1YnRyZWUoc3RydWN0IHRyZWVfd3JpdGVfc3RhY2sgKnR3cywKKwkJY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgdHJlZV93cml0ZV9zdGFjayAqbjsKKwlhc3NlcnQoIXR3cy0+bmV4dCk7CisJYXNzZXJ0KHR3cy0+cGF0aFswXSA9PSAnXDAnICYmIHR3cy0+cGF0aFsxXSA9PSAnXDAnKTsKKwluID0gKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICopCisJCXhtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrKSk7CisJbi0+bmV4dCA9IE5VTEw7CisJc3RyYnVmX2luaXQoJm4tPmJ1ZiwgMjU2ICogKDMyICsgNDApKTsgLyogYXNzdW1lIDI1NiBlbnRyaWVzIHBlciB0cmVlICovCisJbi0+cGF0aFswXSA9IG4tPnBhdGhbMV0gPSAnXDAnOworCXR3cy0+bmV4dCA9IG47CisJdHdzLT5wYXRoWzBdID0gcGF0aFswXTsKKwl0d3MtPnBhdGhbMV0gPSBwYXRoWzFdOworfQorCitzdGF0aWMgaW50IHRyZWVfd3JpdGVfc3RhY2tfZmluaXNoX3N1YnRyZWUoc3RydWN0IHRyZWVfd3JpdGVfc3RhY2sgKnR3cykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICpuID0gdHdzLT5uZXh0OworCXVuc2lnbmVkIGNoYXIgc1syMF07CisJaWYgKG4pIHsKKwkJcmV0ID0gdHJlZV93cml0ZV9zdGFja19maW5pc2hfc3VidHJlZShuKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCXJldCA9IHdyaXRlX3NoYTFfZmlsZShuLT5idWYuYnVmLCBuLT5idWYubGVuLCB0cmVlX3R5cGUsIHMpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJc3RyYnVmX3JlbGVhc2UoJm4tPmJ1Zik7CisJCWZyZWUobik7CisJCXR3cy0+bmV4dCA9IE5VTEw7CisJCXdyaXRlX3RyZWVfZW50cnkoJnR3cy0+YnVmLCAwNDAwMDAsIHR3cy0+cGF0aCwgMiwgcyk7CisJCXR3cy0+cGF0aFswXSA9IHR3cy0+cGF0aFsxXSA9ICdcMCc7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX2VhY2hfbm90ZV9oZWxwZXIoc3RydWN0IHRyZWVfd3JpdGVfc3RhY2sgKnR3cywKKwkJY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgaW50IG1vZGUsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc2l6ZV90IHBhdGhfbGVuID0gc3RybGVuKHBhdGgpOworCXVuc2lnbmVkIGludCBuID0gMDsKKwlpbnQgcmV0OworCisJLyogRGV0ZXJtaW5lIGNvbW1vbiBwYXJ0IG9mIHRyZWUgd3JpdGUgc3RhY2sgKi8KKwl3aGlsZSAodHdzICYmIDMgKiBuIDwgcGF0aF9sZW4gJiYKKwkgICAgICAgbWF0Y2hlc190cmVlX3dyaXRlX3N0YWNrKHR3cywgcGF0aCArIDMgKiBuKSkgeworCQluKys7CisJCXR3cyA9IHR3cy0+bmV4dDsKKwl9CisKKwkvKiB0d3MgcG9pbnQgdG8gbGFzdCBtYXRjaGluZyB0cmVlX3dyaXRlX3N0YWNrIGVudHJ5ICovCisJcmV0ID0gdHJlZV93cml0ZV9zdGFja19maW5pc2hfc3VidHJlZSh0d3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBTdGFydCBzdWJ0cmVlcyBuZWVkZWQgdG8gc2F0aXNmeSBwYXRoICovCisJd2hpbGUgKDMgKiBuICsgMiA8IHBhdGhfbGVuICYmIHBhdGhbMyAqIG4gKyAyXSA9PSAnLycpIHsKKwkJdHJlZV93cml0ZV9zdGFja19pbml0X3N1YnRyZWUodHdzLCBwYXRoICsgMyAqIG4pOworCQluKys7CisJCXR3cyA9IHR3cy0+bmV4dDsKKwl9CisKKwkvKiBUaGVyZSBzaG91bGQgYmUgbm8gbW9yZSBkaXJlY3RvcnkgY29tcG9uZW50cyBpbiB0aGUgZ2l2ZW4gcGF0aCAqLworCWFzc2VydChtZW1jaHIocGF0aCArIDMgKiBuLCAnLycsIHBhdGhfbGVuIC0gKDMgKiBuKSkgPT0gTlVMTCk7CisKKwkvKiBGaW5hbGx5IGFkZCBnaXZlbiBlbnRyeSB0byB0aGUgY3VycmVudCB0cmVlIG9iamVjdCAqLworCXdyaXRlX3RyZWVfZW50cnkoJnR3cy0+YnVmLCBtb2RlLCBwYXRoICsgMyAqIG4sIHBhdGhfbGVuIC0gKDMgKiBuKSwKKwkJCSBzaGExKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3Qgd3JpdGVfZWFjaF9ub3RlX2RhdGEgeworCXN0cnVjdCB0cmVlX3dyaXRlX3N0YWNrICpyb290OworCXN0cnVjdCBub25fbm90ZSAqbmV4dF9ub25fbm90ZTsKK307CisKK3N0YXRpYyBpbnQgd3JpdGVfZWFjaF9ub25fbm90ZV91bnRpbChjb25zdCBjaGFyICpub3RlX3BhdGgsCisJCXN0cnVjdCB3cml0ZV9lYWNoX25vdGVfZGF0YSAqZCkKK3sKKwlzdHJ1Y3Qgbm9uX25vdGUgKm4gPSBkLT5uZXh0X25vbl9ub3RlOworCWludCBjbXAgPSAwLCByZXQ7CisJd2hpbGUgKG4gJiYgKCFub3RlX3BhdGggfHwgKGNtcCA9IHN0cmNtcChuLT5wYXRoLCBub3RlX3BhdGgpKSA8PSAwKSkgeworCQlpZiAobm90ZV9wYXRoICYmIGNtcCA9PSAwKQorCQkJOyAvKiBkbyBub3RoaW5nLCBwcmVmZXIgbm90ZSB0byBub24tbm90ZSAqLworCQllbHNlIHsKKwkJCXJldCA9IHdyaXRlX2VhY2hfbm90ZV9oZWxwZXIoZC0+cm9vdCwgbi0+cGF0aCwgbi0+bW9kZSwKKwkJCQkJCSAgICAgbi0+c2hhMSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJbiA9IG4tPm5leHQ7CisJfQorCWQtPm5leHRfbm9uX25vdGUgPSBuOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX2VhY2hfbm90ZShjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbm90ZV9zaGExLCBjaGFyICpub3RlX3BhdGgsCisJCXZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHdyaXRlX2VhY2hfbm90ZV9kYXRhICpkID0KKwkJKHN0cnVjdCB3cml0ZV9lYWNoX25vdGVfZGF0YSAqKSBjYl9kYXRhOworCXNpemVfdCBub3RlX3BhdGhfbGVuID0gc3RybGVuKG5vdGVfcGF0aCk7CisJdW5zaWduZWQgaW50IG1vZGUgPSAwMTAwNjQ0OworCisJaWYgKG5vdGVfcGF0aFtub3RlX3BhdGhfbGVuIC0gMV0gPT0gJy8nKSB7CisJCS8qIHN1YnRyZWUgZW50cnkgKi8KKwkJbm90ZV9wYXRoX2xlbi0tOworCQlub3RlX3BhdGhbbm90ZV9wYXRoX2xlbl0gPSAnXDAnOworCQltb2RlID0gMDQwMDAwOworCX0KKwlhc3NlcnQobm90ZV9wYXRoX2xlbiA8PSA0MCArIDE5KTsKKworCS8qIFdlYXZlIG5vbi1ub3RlIGVudHJpZXMgaW50byBub3RlIGVudHJpZXMgKi8KKwlyZXR1cm4gIHdyaXRlX2VhY2hfbm9uX25vdGVfdW50aWwobm90ZV9wYXRoLCBkKSB8fAorCQl3cml0ZV9lYWNoX25vdGVfaGVscGVyKGQtPnJvb3QsIG5vdGVfcGF0aCwgbW9kZSwgbm90ZV9zaGExKTsKK30KKworc3RydWN0IG5vdGVfZGVsZXRlX2xpc3QgeworCXN0cnVjdCBub3RlX2RlbGV0ZV9saXN0ICpuZXh0OworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7Cit9OworCitzdGF0aWMgaW50IHBydW5lX25vdGVzX2hlbHBlcihjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbm90ZV9zaGExLCBjaGFyICpub3RlX3BhdGgsCisJCXZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG5vdGVfZGVsZXRlX2xpc3QgKipsID0gKHN0cnVjdCBub3RlX2RlbGV0ZV9saXN0ICoqKSBjYl9kYXRhOworCXN0cnVjdCBub3RlX2RlbGV0ZV9saXN0ICpuOworCisJaWYgKGhhc19zaGExX2ZpbGUob2JqZWN0X3NoYTEpKQorCQlyZXR1cm4gMDsgLyogbm90aGluZyB0byBkbyBmb3IgdGhpcyBub3RlICovCisKKwkvKiBmYWlsZWQgdG8gZmluZCBvYmplY3QgPT4gcHJ1bmUgdGhpcyBub3RlICovCisJbiA9IChzdHJ1Y3Qgbm90ZV9kZWxldGVfbGlzdCAqKSB4bWFsbG9jKHNpemVvZigqbikpOworCW4tPm5leHQgPSAqbDsKKwluLT5zaGExID0gb2JqZWN0X3NoYTE7CisJKmwgPSBuOworCXJldHVybiAwOworfQorCitpbnQgY29tYmluZV9ub3Rlc19jb25jYXRlbmF0ZSh1bnNpZ25lZCBjaGFyICpjdXJfc2hhMSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEpCit7CisJY2hhciAqY3VyX21zZyA9IE5VTEwsICpuZXdfbXNnID0gTlVMTCwgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGN1cl9sZW4sIG5ld19sZW4sIGJ1Zl9sZW47CisJZW51bSBvYmplY3RfdHlwZSBjdXJfdHlwZSwgbmV3X3R5cGU7CisJaW50IHJldDsKKworCS8qIHJlYWQgaW4gYm90aCBub3RlIGJsb2Igb2JqZWN0cyAqLworCWlmICghaXNfbnVsbF9zaGExKG5ld19zaGExKSkKKwkJbmV3X21zZyA9IHJlYWRfc2hhMV9maWxlKG5ld19zaGExLCAmbmV3X3R5cGUsICZuZXdfbGVuKTsKKwlpZiAoIW5ld19tc2cgfHwgIW5ld19sZW4gfHwgbmV3X3R5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZnJlZShuZXdfbXNnKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghaXNfbnVsbF9zaGExKGN1cl9zaGExKSkKKwkJY3VyX21zZyA9IHJlYWRfc2hhMV9maWxlKGN1cl9zaGExLCAmY3VyX3R5cGUsICZjdXJfbGVuKTsKKwlpZiAoIWN1cl9tc2cgfHwgIWN1cl9sZW4gfHwgY3VyX3R5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZnJlZShjdXJfbXNnKTsKKwkJZnJlZShuZXdfbXNnKTsKKwkJaGFzaGNweShjdXJfc2hhMSwgbmV3X3NoYTEpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiB3ZSB3aWxsIHNlcGFyYXRlIHRoZSBub3RlcyBieSB0d28gbmV3bGluZXMgYW55d2F5ICovCisJaWYgKGN1cl9tc2dbY3VyX2xlbiAtIDFdID09ICdcbicpCisJCWN1cl9sZW4tLTsKKworCS8qIGNvbmNhdGVuYXRlIGN1cl9tc2cgYW5kIG5ld19tc2cgaW50byBidWYgKi8KKwlidWZfbGVuID0gY3VyX2xlbiArIDIgKyBuZXdfbGVuOworCWJ1ZiA9IChjaGFyICopIHhtYWxsb2MoYnVmX2xlbik7CisJbWVtY3B5KGJ1ZiwgY3VyX21zZywgY3VyX2xlbik7CisJYnVmW2N1cl9sZW5dID0gJ1xuJzsKKwlidWZbY3VyX2xlbiArIDFdID0gJ1xuJzsKKwltZW1jcHkoYnVmICsgY3VyX2xlbiArIDIsIG5ld19tc2csIG5ld19sZW4pOworCWZyZWUoY3VyX21zZyk7CisJZnJlZShuZXdfbXNnKTsKKworCS8qIGNyZWF0ZSBhIG5ldyBibG9iIG9iamVjdCBmcm9tIGJ1ZiAqLworCXJldCA9IHdyaXRlX3NoYTFfZmlsZShidWYsIGJ1Zl9sZW4sIGJsb2JfdHlwZSwgY3VyX3NoYTEpOworCWZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgY29tYmluZV9ub3Rlc19vdmVyd3JpdGUodW5zaWduZWQgY2hhciAqY3VyX3NoYTEsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExKQoreworCWhhc2hjcHkoY3VyX3NoYTEsIG5ld19zaGExKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbWJpbmVfbm90ZXNfaWdub3JlKHVuc2lnbmVkIGNoYXIgKmN1cl9zaGExLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFkZCB0aGUgbGluZXMgZnJvbSB0aGUgbmFtZWQgb2JqZWN0IHRvIGxpc3QsIHdpdGggdHJhaWxpbmcKKyAqIG5ld2xpbmVzIHJlbW92ZWQuCisgKi8KK3N0YXRpYyBpbnQgc3RyaW5nX2xpc3RfYWRkX25vdGVfbGluZXMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJY2hhciAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwllbnVtIG9iamVjdF90eXBlIHQ7CisKKwlpZiAoaXNfbnVsbF9zaGExKHNoYTEpKQorCQlyZXR1cm4gMDsKKworCS8qIHJlYWRfc2hhMV9maWxlIE5VTC10ZXJtaW5hdGVzICovCisJZGF0YSA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0LCAmbGVuKTsKKwlpZiAodCAhPSBPQkpfQkxPQiB8fCAhZGF0YSB8fCAhbGVuKSB7CisJCWZyZWUoZGF0YSk7CisJCXJldHVybiB0ICE9IE9CSl9CTE9CIHx8ICFkYXRhOworCX0KKworCS8qCisJICogSWYgdGhlIGxhc3QgbGluZSBvZiB0aGUgZmlsZSBpcyBFT0wtdGVybWluYXRlZCwgdGhpcyB3aWxsCisJICogYWRkIGFuIGVtcHR5IHN0cmluZyB0byB0aGUgbGlzdC4gIEJ1dCBpdCB3aWxsIGJlIHJlbW92ZWQKKwkgKiBsYXRlciwgYWxvbmcgd2l0aCBhbnkgZW1wdHkgc3RyaW5ncyB0aGF0IGNhbWUgZnJvbSBlbXB0eQorCSAqIGxpbmVzIHdpdGhpbiB0aGUgZmlsZS4KKwkgKi8KKwlzdHJpbmdfbGlzdF9zcGxpdChsaXN0LCBkYXRhLCAnXG4nLCAtMSk7CisJZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHJpbmdfbGlzdF9qb2luX2xpbmVzX2hlbHBlcihzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwKKwkJCQkJIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiAqYnVmID0gY2JfZGF0YTsKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgaXRlbS0+c3RyaW5nKTsKKwlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbWJpbmVfbm90ZXNfY2F0X3NvcnRfdW5pcSh1bnNpZ25lZCBjaGFyICpjdXJfc2hhMSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEpCit7CisJc3RydWN0IHN0cmluZ19saXN0IHNvcnRfdW5pcV9saXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gMTsKKworCS8qIHJlYWQgYm90aCBub3RlIGJsb2Igb2JqZWN0cyBpbnRvIHVuaXF1ZV9saW5lcyAqLworCWlmIChzdHJpbmdfbGlzdF9hZGRfbm90ZV9saW5lcygmc29ydF91bmlxX2xpc3QsIGN1cl9zaGExKSkKKwkJZ290byBvdXQ7CisJaWYgKHN0cmluZ19saXN0X2FkZF9ub3RlX2xpbmVzKCZzb3J0X3VuaXFfbGlzdCwgbmV3X3NoYTEpKQorCQlnb3RvIG91dDsKKwlzdHJpbmdfbGlzdF9yZW1vdmVfZW1wdHlfaXRlbXMoJnNvcnRfdW5pcV9saXN0LCAwKTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZzb3J0X3VuaXFfbGlzdCk7CisJc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoJnNvcnRfdW5pcV9saXN0LCAwKTsKKworCS8qIGNyZWF0ZSBhIG5ldyBibG9iIG9iamVjdCBmcm9tIHNvcnRfdW5pcV9saXN0ICovCisJaWYgKGZvcl9lYWNoX3N0cmluZ19saXN0KCZzb3J0X3VuaXFfbGlzdCwKKwkJCQkgc3RyaW5nX2xpc3Rfam9pbl9saW5lc19oZWxwZXIsICZidWYpKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdyaXRlX3NoYTFfZmlsZShidWYuYnVmLCBidWYubGVuLCBibG9iX3R5cGUsIGN1cl9zaGExKTsKKworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmluZ19saXN0X2NsZWFyKCZzb3J0X3VuaXFfbGlzdCwgMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzdHJpbmdfbGlzdF9hZGRfb25lX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkJICAgaW50IGZsYWcsIHZvaWQgKmNiKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmcyA9IGNiOworCWlmICghdW5zb3J0ZWRfc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhyZWZzLCByZWZuYW1lKSkKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKHJlZnMsIHJlZm5hbWUpOworCXJldHVybiAwOworfQorCisvKgorICogVGhlIGxpc3QgYXJndW1lbnQgbXVzdCBoYXZlIHN0cmR1cF9zdHJpbmdzIHNldCBvbiBpdC4KKyAqLwordm9pZCBzdHJpbmdfbGlzdF9hZGRfcmVmc19ieV9nbG9iKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqZ2xvYikKK3sKKwlhc3NlcnQobGlzdC0+c3RyZHVwX3N0cmluZ3MpOworCWlmIChoYXNfZ2xvYl9zcGVjaWFscyhnbG9iKSkgeworCQlmb3JfZWFjaF9nbG9iX3JlZihzdHJpbmdfbGlzdF9hZGRfb25lX3JlZiwgZ2xvYiwgbGlzdCk7CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaWYgKGdldF9zaGExKGdsb2IsIHNoYTEpKQorCQkJd2FybmluZygibm90ZXMgcmVmICVzIGlzIGludmFsaWQiLCBnbG9iKTsKKwkJaWYgKCF1bnNvcnRlZF9zdHJpbmdfbGlzdF9oYXNfc3RyaW5nKGxpc3QsIGdsb2IpKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIGdsb2IpOworCX0KK30KKwordm9pZCBzdHJpbmdfbGlzdF9hZGRfcmVmc19mcm9tX2NvbG9uX3NlcChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQkJCSBjb25zdCBjaGFyICpnbG9icykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3BsaXQgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWNoYXIgKmdsb2JzX2NvcHkgPSB4c3RyZHVwKGdsb2JzKTsKKwlpbnQgaTsKKworCXN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlKCZzcGxpdCwgZ2xvYnNfY29weSwgJzonLCAtMSk7CisJc3RyaW5nX2xpc3RfcmVtb3ZlX2VtcHR5X2l0ZW1zKCZzcGxpdCwgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3BsaXQubnI7IGkrKykKKwkJc3RyaW5nX2xpc3RfYWRkX3JlZnNfYnlfZ2xvYihsaXN0LCBzcGxpdC5pdGVtc1tpXS5zdHJpbmcpOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJnNwbGl0LCAwKTsKKwlmcmVlKGdsb2JzX2NvcHkpOworfQorCitzdGF0aWMgaW50IG5vdGVzX2Rpc3BsYXlfY29uZmlnKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYsIHZvaWQgKmNiKQoreworCWludCAqbG9hZF9yZWZzID0gY2I7CisKKwlpZiAoKmxvYWRfcmVmcyAmJiAhc3RyY21wKGssICJub3Rlcy5kaXNwbGF5cmVmIikpIHsKKwkJaWYgKCF2KQorCQkJY29uZmlnX2Vycm9yX25vbmJvb2woayk7CisJCXN0cmluZ19saXN0X2FkZF9yZWZzX2J5X2dsb2IoJmRpc3BsYXlfbm90ZXNfcmVmcywgdik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKmRlZmF1bHRfbm90ZXNfcmVmKHZvaWQpCit7CisJY29uc3QgY2hhciAqbm90ZXNfcmVmID0gTlVMTDsKKwlpZiAoIW5vdGVzX3JlZikKKwkJbm90ZXNfcmVmID0gZ2V0ZW52KEdJVF9OT1RFU19SRUZfRU5WSVJPTk1FTlQpOworCWlmICghbm90ZXNfcmVmKQorCQlub3Rlc19yZWYgPSBub3Rlc19yZWZfbmFtZTsgLyogdmFsdWUgb2YgY29yZS5ub3Rlc1JlZiBjb25maWcgKi8KKwlpZiAoIW5vdGVzX3JlZikKKwkJbm90ZXNfcmVmID0gR0lUX05PVEVTX0RFRkFVTFRfUkVGOworCXJldHVybiBub3Rlc19yZWY7Cit9CisKK3ZvaWQgaW5pdF9ub3RlcyhzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgY2hhciAqbm90ZXNfcmVmLAorCQljb21iaW5lX25vdGVzX2ZuIGNvbWJpbmVfbm90ZXMsIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCBvYmplY3Rfc2hhMVsyMF07CisJdW5zaWduZWQgbW9kZTsKKwlzdHJ1Y3QgbGVhZl9ub2RlIHJvb3RfdHJlZTsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJYXNzZXJ0KCF0LT5pbml0aWFsaXplZCk7CisKKwlpZiAoIW5vdGVzX3JlZikKKwkJbm90ZXNfcmVmID0gZGVmYXVsdF9ub3Rlc19yZWYoKTsKKworCWlmICghY29tYmluZV9ub3RlcykKKwkJY29tYmluZV9ub3RlcyA9IGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGU7CisKKwl0LT5yb290ID0gKHN0cnVjdCBpbnRfbm9kZSAqKSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgaW50X25vZGUpKTsKKwl0LT5maXJzdF9ub25fbm90ZSA9IE5VTEw7CisJdC0+cHJldl9ub25fbm90ZSA9IE5VTEw7CisJdC0+cmVmID0geHN0cmR1cF9vcl9udWxsKG5vdGVzX3JlZik7CisJdC0+Y29tYmluZV9ub3RlcyA9IGNvbWJpbmVfbm90ZXM7CisJdC0+aW5pdGlhbGl6ZWQgPSAxOworCXQtPmRpcnR5ID0gMDsKKworCWlmIChmbGFncyAmIE5PVEVTX0lOSVRfRU1QVFkgfHwgIW5vdGVzX3JlZiB8fAorCSAgICByZWFkX3JlZihub3Rlc19yZWYsIG9iamVjdF9zaGExKSkKKwkJcmV0dXJuOworCWlmIChnZXRfdHJlZV9lbnRyeShvYmplY3Rfc2hhMSwgIiIsIHNoYTEsICZtb2RlKSkKKwkJZGllKCJGYWlsZWQgdG8gcmVhZCBub3RlcyB0cmVlIHJlZmVyZW5jZWQgYnkgJXMgKCVzKSIsCisJCSAgICBub3Rlc19yZWYsIHNoYTFfdG9faGV4KG9iamVjdF9zaGExKSk7CisKKwloYXNoY2xyKHJvb3RfdHJlZS5rZXlfc2hhMSk7CisJaGFzaGNweShyb290X3RyZWUudmFsX3NoYTEsIHNoYTEpOworCWxvYWRfc3VidHJlZSh0LCAmcm9vdF90cmVlLCB0LT5yb290LCAwKTsKK30KKworc3RydWN0IG5vdGVzX3RyZWUgKipsb2FkX25vdGVzX3RyZWVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmcykKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlpbnQgY291bnRlciA9IDA7CisJc3RydWN0IG5vdGVzX3RyZWUgKip0cmVlczsKKwl0cmVlcyA9IHhtYWxsb2MoKHJlZnMtPm5yKzEpICogc2l6ZW9mKHN0cnVjdCBub3Rlc190cmVlICopKTsKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIHJlZnMpIHsKKwkJc3RydWN0IG5vdGVzX3RyZWUgKnQgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3Qgbm90ZXNfdHJlZSkpOworCQlpbml0X25vdGVzKHQsIGl0ZW0tPnN0cmluZywgY29tYmluZV9ub3Rlc19pZ25vcmUsIDApOworCQl0cmVlc1tjb3VudGVyKytdID0gdDsKKwl9CisJdHJlZXNbY291bnRlcl0gPSBOVUxMOworCXJldHVybiB0cmVlczsKK30KKwordm9pZCBpbml0X2Rpc3BsYXlfbm90ZXMoc3RydWN0IGRpc3BsYXlfbm90ZXNfb3B0ICpvcHQpCit7CisJY2hhciAqZGlzcGxheV9yZWZfZW52OworCWludCBsb2FkX2NvbmZpZ19yZWZzID0gMDsKKwlkaXNwbGF5X25vdGVzX3JlZnMuc3RyZHVwX3N0cmluZ3MgPSAxOworCisJYXNzZXJ0KCFkaXNwbGF5X25vdGVzX3RyZWVzKTsKKworCWlmICghb3B0IHx8IG9wdC0+dXNlX2RlZmF1bHRfbm90ZXMgPiAwIHx8CisJICAgIChvcHQtPnVzZV9kZWZhdWx0X25vdGVzID09IC0xICYmICFvcHQtPmV4dHJhX25vdGVzX3JlZnMubnIpKSB7CisJCXN0cmluZ19saXN0X2FwcGVuZCgmZGlzcGxheV9ub3Rlc19yZWZzLCBkZWZhdWx0X25vdGVzX3JlZigpKTsKKwkJZGlzcGxheV9yZWZfZW52ID0gZ2V0ZW52KEdJVF9OT1RFU19ESVNQTEFZX1JFRl9FTlZJUk9OTUVOVCk7CisJCWlmIChkaXNwbGF5X3JlZl9lbnYpIHsKKwkJCXN0cmluZ19saXN0X2FkZF9yZWZzX2Zyb21fY29sb25fc2VwKCZkaXNwbGF5X25vdGVzX3JlZnMsCisJCQkJCQkJICAgIGRpc3BsYXlfcmVmX2Vudik7CisJCQlsb2FkX2NvbmZpZ19yZWZzID0gMDsKKwkJfSBlbHNlCisJCQlsb2FkX2NvbmZpZ19yZWZzID0gMTsKKwl9CisKKwlnaXRfY29uZmlnKG5vdGVzX2Rpc3BsYXlfY29uZmlnLCAmbG9hZF9jb25maWdfcmVmcyk7CisKKwlpZiAob3B0KSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCQlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sICZvcHQtPmV4dHJhX25vdGVzX3JlZnMpCisJCQlzdHJpbmdfbGlzdF9hZGRfcmVmc19ieV9nbG9iKCZkaXNwbGF5X25vdGVzX3JlZnMsCisJCQkJCQkgICAgIGl0ZW0tPnN0cmluZyk7CisJfQorCisJZGlzcGxheV9ub3Rlc190cmVlcyA9IGxvYWRfbm90ZXNfdHJlZXMoJmRpc3BsYXlfbm90ZXNfcmVmcyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmRpc3BsYXlfbm90ZXNfcmVmcywgMCk7Cit9CisKK2ludCBhZGRfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGVfc2hhMSwgY29tYmluZV9ub3Rlc19mbiBjb21iaW5lX25vdGVzKQoreworCXN0cnVjdCBsZWFmX25vZGUgKmw7CisKKwlpZiAoIXQpCisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCWFzc2VydCh0LT5pbml0aWFsaXplZCk7CisJdC0+ZGlydHkgPSAxOworCWlmICghY29tYmluZV9ub3RlcykKKwkJY29tYmluZV9ub3RlcyA9IHQtPmNvbWJpbmVfbm90ZXM7CisJbCA9IChzdHJ1Y3QgbGVhZl9ub2RlICopIHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBsZWFmX25vZGUpKTsKKwloYXNoY3B5KGwtPmtleV9zaGExLCBvYmplY3Rfc2hhMSk7CisJaGFzaGNweShsLT52YWxfc2hhMSwgbm90ZV9zaGExKTsKKwlyZXR1cm4gbm90ZV90cmVlX2luc2VydCh0LCB0LT5yb290LCAwLCBsLCBQVFJfVFlQRV9OT1RFLCBjb21iaW5lX25vdGVzKTsKK30KKworaW50IHJlbW92ZV9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSkKK3sKKwlzdHJ1Y3QgbGVhZl9ub2RlIGw7CisKKwlpZiAoIXQpCisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCWFzc2VydCh0LT5pbml0aWFsaXplZCk7CisJaGFzaGNweShsLmtleV9zaGExLCBvYmplY3Rfc2hhMSk7CisJaGFzaGNscihsLnZhbF9zaGExKTsKKwlub3RlX3RyZWVfcmVtb3ZlKHQsIHQtPnJvb3QsIDAsICZsKTsKKwlpZiAoaXNfbnVsbF9zaGExKGwudmFsX3NoYTEpKSAvKiBubyBub3RlIHdhcyByZW1vdmVkICovCisJCXJldHVybiAxOworCXQtPmRpcnR5ID0gMTsKKwlyZXR1cm4gMDsKK30KKworY29uc3QgdW5zaWduZWQgY2hhciAqZ2V0X25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm9iamVjdF9zaGExKQoreworCXN0cnVjdCBsZWFmX25vZGUgKmZvdW5kOworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCWZvdW5kID0gbm90ZV90cmVlX2ZpbmQodCwgdC0+cm9vdCwgMCwgb2JqZWN0X3NoYTEpOworCXJldHVybiBmb3VuZCA/IGZvdW5kLT52YWxfc2hhMSA6IE5VTEw7Cit9CisKK2ludCBmb3JfZWFjaF9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LCBpbnQgZmxhZ3MsIGVhY2hfbm90ZV9mbiBmbiwKKwkJdm9pZCAqY2JfZGF0YSkKK3sKKwlpZiAoIXQpCisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCWFzc2VydCh0LT5pbml0aWFsaXplZCk7CisJcmV0dXJuIGZvcl9lYWNoX25vdGVfaGVscGVyKHQsIHQtPnJvb3QsIDAsIDAsIGZsYWdzLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCB3cml0ZV9ub3Rlc190cmVlKHN0cnVjdCBub3Rlc190cmVlICp0LCB1bnNpZ25lZCBjaGFyICpyZXN1bHQpCit7CisJc3RydWN0IHRyZWVfd3JpdGVfc3RhY2sgcm9vdDsKKwlzdHJ1Y3Qgd3JpdGVfZWFjaF9ub3RlX2RhdGEgY2JfZGF0YTsKKwlpbnQgcmV0OworCisJaWYgKCF0KQorCQl0ID0gJmRlZmF1bHRfbm90ZXNfdHJlZTsKKwlhc3NlcnQodC0+aW5pdGlhbGl6ZWQpOworCisJLyogUHJlcGFyZSBmb3IgdHJhdmVyc2FsIG9mIGN1cnJlbnQgbm90ZXMgdHJlZSAqLworCXJvb3QubmV4dCA9IE5VTEw7IC8qIGxhc3QgZm9yd2FyZCBlbnRyeSBpbiBsaXN0IGlzIGdyb3VuZGVkICovCisJc3RyYnVmX2luaXQoJnJvb3QuYnVmLCAyNTYgKiAoMzIgKyA0MCkpOyAvKiBhc3N1bWUgMjU2IGVudHJpZXMgKi8KKwlyb290LnBhdGhbMF0gPSByb290LnBhdGhbMV0gPSAnXDAnOworCWNiX2RhdGEucm9vdCA9ICZyb290OworCWNiX2RhdGEubmV4dF9ub25fbm90ZSA9IHQtPmZpcnN0X25vbl9ub3RlOworCisJLyogV3JpdGUgdHJlZSBvYmplY3RzIHJlcHJlc2VudGluZyBjdXJyZW50IG5vdGVzIHRyZWUgKi8KKwlyZXQgPSBmb3JfZWFjaF9ub3RlKHQsIEZPUl9FQUNIX05PVEVfRE9OVF9VTlBBQ0tfU1VCVFJFRVMgfAorCQkJCUZPUl9FQUNIX05PVEVfWUlFTERfU1VCVFJFRVMsCisJCQl3cml0ZV9lYWNoX25vdGUsICZjYl9kYXRhKSB8fAorCQl3cml0ZV9lYWNoX25vbl9ub3RlX3VudGlsKE5VTEwsICZjYl9kYXRhKSB8fAorCQl0cmVlX3dyaXRlX3N0YWNrX2ZpbmlzaF9zdWJ0cmVlKCZyb290KSB8fAorCQl3cml0ZV9zaGExX2ZpbGUocm9vdC5idWYuYnVmLCByb290LmJ1Zi5sZW4sIHRyZWVfdHlwZSwgcmVzdWx0KTsKKwlzdHJidWZfcmVsZWFzZSgmcm9vdC5idWYpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcHJ1bmVfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgbm90ZV9kZWxldGVfbGlzdCAqbCA9IE5VTEw7CisKKwlpZiAoIXQpCisJCXQgPSAmZGVmYXVsdF9ub3Rlc190cmVlOworCWFzc2VydCh0LT5pbml0aWFsaXplZCk7CisKKwlmb3JfZWFjaF9ub3RlKHQsIDAsIHBydW5lX25vdGVzX2hlbHBlciwgJmwpOworCisJd2hpbGUgKGwpIHsKKwkJaWYgKGZsYWdzICYgTk9URVNfUFJVTkVfVkVSQk9TRSkKKwkJCXByaW50ZigiJXNcbiIsIHNoYTFfdG9faGV4KGwtPnNoYTEpKTsKKwkJaWYgKCEoZmxhZ3MgJiBOT1RFU19QUlVORV9EUllSVU4pKQorCQkJcmVtb3ZlX25vdGUodCwgbC0+c2hhMSk7CisJCWwgPSBsLT5uZXh0OworCX0KK30KKwordm9pZCBmcmVlX25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0KQoreworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJaWYgKHQtPnJvb3QpCisJCW5vdGVfdHJlZV9mcmVlKHQtPnJvb3QpOworCWZyZWUodC0+cm9vdCk7CisJd2hpbGUgKHQtPmZpcnN0X25vbl9ub3RlKSB7CisJCXQtPnByZXZfbm9uX25vdGUgPSB0LT5maXJzdF9ub25fbm90ZS0+bmV4dDsKKwkJZnJlZSh0LT5maXJzdF9ub25fbm90ZS0+cGF0aCk7CisJCWZyZWUodC0+Zmlyc3Rfbm9uX25vdGUpOworCQl0LT5maXJzdF9ub25fbm90ZSA9IHQtPnByZXZfbm9uX25vdGU7CisJfQorCWZyZWUodC0+cmVmKTsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKHN0cnVjdCBub3Rlc190cmVlKSk7Cit9CisKKy8qCisgKiBGaWxsIHRoZSBnaXZlbiBzdHJidWYgd2l0aCB0aGUgbm90ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBvYmplY3QuCisgKgorICogSWYgdGhlIGdpdmVuIG5vdGVzX3RyZWUgc3RydWN0dXJlIGlzIG5vdCBpbml0aWFsaXplZCwgaXQgd2lsbCBiZSBhdXRvLQorICogaW5pdGlhbGl6ZWQgdG8gdGhlIGRlZmF1bHQgdmFsdWUgKHNlZSBkb2N1bWVudGF0aW9uIGZvciBpbml0X25vdGVzKCkgYWJvdmUpLgorICogSWYgdGhlIGdpdmVuIG5vdGVzX3RyZWUgaXMgTlVMTCwgdGhlIGludGVybmFsL2RlZmF1bHQgbm90ZXNfdHJlZSB3aWxsIGJlCisgKiB1c2VkIGluc3RlYWQuCisgKgorICogKHJhdyAhPSAwKSBnaXZlcyB0aGUgJU4gdXNlcmZvcm1hdDsgb3RoZXJ3aXNlLCB0aGUgbm90ZSBtZXNzYWdlIGlzIGdpdmVuCisgKiBmb3IgaHVtYW4gY29uc3VtcHRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGZvcm1hdF9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSwKKwkJCXN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpvdXRwdXRfZW5jb2RpbmcsIGludCByYXcpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgdXRmOFtdID0gInV0Zi04IjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCWNoYXIgKm1zZywgKm1zZ19wOworCXVuc2lnbmVkIGxvbmcgbGluZWxlbiwgbXNnbGVuOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCWlmICghdCkKKwkJdCA9ICZkZWZhdWx0X25vdGVzX3RyZWU7CisJaWYgKCF0LT5pbml0aWFsaXplZCkKKwkJaW5pdF9ub3Rlcyh0LCBOVUxMLCBOVUxMLCAwKTsKKworCXNoYTEgPSBnZXRfbm90ZSh0LCBvYmplY3Rfc2hhMSk7CisJaWYgKCFzaGExKQorCQlyZXR1cm47CisKKwlpZiAoIShtc2cgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJm1zZ2xlbikpIHx8IHR5cGUgIT0gT0JKX0JMT0IpIHsKKwkJZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJaWYgKG91dHB1dF9lbmNvZGluZyAmJiAqb3V0cHV0X2VuY29kaW5nICYmCisJICAgICFpc19lbmNvZGluZ191dGY4KG91dHB1dF9lbmNvZGluZykpIHsKKwkJY2hhciAqcmVlbmNvZGVkID0gcmVlbmNvZGVfc3RyaW5nKG1zZywgb3V0cHV0X2VuY29kaW5nLCB1dGY4KTsKKwkJaWYgKHJlZW5jb2RlZCkgeworCQkJZnJlZShtc2cpOworCQkJbXNnID0gcmVlbmNvZGVkOworCQkJbXNnbGVuID0gc3RybGVuKG1zZyk7CisJCX0KKwl9CisKKwkvKiB3ZSB3aWxsIGVuZCB0aGUgYW5ub3RhdGlvbiBieSBhIG5ld2xpbmUgYW55d2F5ICovCisJaWYgKG1zZ2xlbiAmJiBtc2dbbXNnbGVuIC0gMV0gPT0gJ1xuJykKKwkJbXNnbGVuLS07CisKKwlpZiAoIXJhdykgeworCQljb25zdCBjaGFyICpyZWYgPSB0LT5yZWY7CisJCWlmICghcmVmIHx8ICFzdHJjbXAocmVmLCBHSVRfTk9URVNfREVGQVVMVF9SRUYpKSB7CisJCQlzdHJidWZfYWRkc3RyKHNiLCAiXG5Ob3RlczpcbiIpOworCQl9IGVsc2UgeworCQkJaWYgKHN0YXJ0c193aXRoKHJlZiwgInJlZnMvIikpCisJCQkJcmVmICs9IDU7CisJCQlpZiAoc3RhcnRzX3dpdGgocmVmLCAibm90ZXMvIikpCisJCQkJcmVmICs9IDY7CisJCQlzdHJidWZfYWRkZihzYiwgIlxuTm90ZXMgKCVzKTpcbiIsIHJlZik7CisJCX0KKwl9CisKKwlmb3IgKG1zZ19wID0gbXNnOyBtc2dfcCA8IG1zZyArIG1zZ2xlbjsgbXNnX3AgKz0gbGluZWxlbiArIDEpIHsKKwkJbGluZWxlbiA9IHN0cmNocm51bChtc2dfcCwgJ1xuJykgLSBtc2dfcDsKKworCQlpZiAoIXJhdykKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICIgICAgIik7CisJCXN0cmJ1Zl9hZGQoc2IsIG1zZ19wLCBsaW5lbGVuKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKwl9CisKKwlmcmVlKG1zZyk7Cit9CisKK3ZvaWQgZm9ybWF0X2Rpc3BsYXlfbm90ZXMoY29uc3QgdW5zaWduZWQgY2hhciAqb2JqZWN0X3NoYTEsCisJCQkgIHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpvdXRwdXRfZW5jb2RpbmcsIGludCByYXcpCit7CisJaW50IGk7CisJYXNzZXJ0KGRpc3BsYXlfbm90ZXNfdHJlZXMpOworCWZvciAoaSA9IDA7IGRpc3BsYXlfbm90ZXNfdHJlZXNbaV07IGkrKykKKwkJZm9ybWF0X25vdGUoZGlzcGxheV9ub3Rlc190cmVlc1tpXSwgb2JqZWN0X3NoYTEsIHNiLAorCQkJICAgIG91dHB1dF9lbmNvZGluZywgcmF3KTsKK30KKworaW50IGNvcHlfbm90ZShzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwKKwkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tX29iaiwgY29uc3QgdW5zaWduZWQgY2hhciAqdG9fb2JqLAorCSAgICAgIGludCBmb3JjZSwgY29tYmluZV9ub3Rlc19mbiBjb21iaW5lX25vdGVzKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGUgPSBnZXRfbm90ZSh0LCBmcm9tX29iaik7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZXhpc3Rpbmdfbm90ZSA9IGdldF9ub3RlKHQsIHRvX29iaik7CisKKwlpZiAoIWZvcmNlICYmIGV4aXN0aW5nX25vdGUpCisJCXJldHVybiAxOworCisJaWYgKG5vdGUpCisJCXJldHVybiBhZGRfbm90ZSh0LCB0b19vYmosIG5vdGUsIGNvbWJpbmVfbm90ZXMpOworCWVsc2UgaWYgKGV4aXN0aW5nX25vdGUpCisJCXJldHVybiBhZGRfbm90ZSh0LCB0b19vYmosIG51bGxfc2hhMSwgY29tYmluZV9ub3Rlcyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBleHBhbmRfbm90ZXNfcmVmKHN0cnVjdCBzdHJidWYgKnNiKQoreworCWlmIChzdGFydHNfd2l0aChzYi0+YnVmLCAicmVmcy9ub3Rlcy8iKSkKKwkJcmV0dXJuOyAvKiB3ZSdyZSBoYXBweSAqLworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNiLT5idWYsICJub3Rlcy8iKSkKKwkJc3RyYnVmX2luc2VydChzYiwgMCwgInJlZnMvIiwgNSk7CisJZWxzZQorCQlzdHJidWZfaW5zZXJ0KHNiLCAwLCAicmVmcy9ub3Rlcy8iLCAxMSk7Cit9CmRpZmYgLS1naXQgYS9ub3Rlcy5oIGIvbm90ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTNmOTIzCi0tLSAvZGV2L251bGwKKysrIGIvbm90ZXMuaApAQCAtMCwwICsxLDI5NyBAQAorI2lmbmRlZiBOT1RFU19ICisjZGVmaW5lIE5PVEVTX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKKy8qCisgKiBGdW5jdGlvbiB0eXBlIGZvciBjb21iaW5pbmcgdHdvIG5vdGVzIGFubm90YXRpbmcgdGhlIHNhbWUgb2JqZWN0LgorICoKKyAqIFdoZW4gYWRkaW5nIGEgbmV3IG5vdGUgYW5ub3RhdGluZyB0aGUgc2FtZSBvYmplY3QgYXMgYW4gZXhpc3Rpbmcgbm90ZSwgaXQgaXMKKyAqIHVwIHRvIHRoZSBjYWxsZXIgdG8gZGVjaWRlIGhvdyB0byBjb21iaW5lIHRoZSB0d28gbm90ZXMuIFRoZSBkZWNpc2lvbiBpcworICogbWFkZSBieSBwYXNzaW5nIGluIGEgZnVuY3Rpb24gb2YgdGhlIGZvbGxvd2luZyBmb3JtLiBUaGUgZnVuY3Rpb24gYWNjZXB0cworICogdHdvIFNIQTFzIC0tIG9mIHRoZSBleGlzdGluZyBub3RlIGFuZCB0aGUgbmV3IG5vdGUsIHJlc3BlY3RpdmVseS4gVGhlCisgKiBmdW5jdGlvbiB0aGVuIGNvbWJpbmVzIHRoZSBub3RlcyBpbiB3aGF0ZXZlciB3YXkgaXQgc2VlcyBmaXQsIGFuZCB3cml0ZXMgdGhlCisgKiByZXN1bHRpbmcgU0hBMSBpbnRvIHRoZSBmaXJzdCBTSEExIGFyZ3VtZW50IChjdXJfc2hhMSkuIEEgbm9uLXplcm8gcmV0dXJuCisgKiB2YWx1ZSBpbmRpY2F0ZXMgZmFpbHVyZS4KKyAqCisgKiBUaGUgdHdvIGdpdmVuIFNIQTFzIHNoYWxsIGJvdGggYmUgbm9uLU5VTEwgYW5kIGRpZmZlcmVudCBmcm9tIGVhY2ggb3RoZXIuCisgKiBFaXRoZXIgb2YgdGhlbSAoYnV0IG5vdCBib3RoKSBtYXkgYmUgPT0gbnVsbF9zaGExLCB3aGljaCBpbmRpY2F0ZXMgYW4KKyAqIGVtcHR5L25vbi1leGlzdGVudCBub3RlLiBJZiB0aGUgcmVzdWx0aW5nIFNIQTEgKGN1cl9zaGExKSBpcyA9PSBudWxsX3NoYTEsCisgKiB0aGUgbm90ZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbm90ZXMgdHJlZS4KKyAqCisgKiBUaGUgZGVmYXVsdCBjb21iaW5lX25vdGVzIGZ1bmN0aW9uICh5b3UgZ2V0IHRoaXMgd2hlbiBwYXNzaW5nIE5VTEwpIGlzCisgKiBjb21iaW5lX25vdGVzX2NvbmNhdGVuYXRlKCksIHdoaWNoIGFwcGVuZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBuZXcgbm90ZSB0bworICogdGhlIGNvbnRlbnRzIG9mIHRoZSBleGlzdGluZyBub3RlLgorICovCit0eXBlZGVmIGludCAoKmNvbWJpbmVfbm90ZXNfZm4pKHVuc2lnbmVkIGNoYXIgKmN1cl9zaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSk7CisKKy8qIENvbW1vbiBub3RlcyBjb21iaW5hdG9ycyAqLworaW50IGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGUodW5zaWduZWQgY2hhciAqY3VyX3NoYTEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExKTsKK2ludCBjb21iaW5lX25vdGVzX292ZXJ3cml0ZSh1bnNpZ25lZCBjaGFyICpjdXJfc2hhMSwgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEpOworaW50IGNvbWJpbmVfbm90ZXNfaWdub3JlKHVuc2lnbmVkIGNoYXIgKmN1cl9zaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSk7CitpbnQgY29tYmluZV9ub3Rlc19jYXRfc29ydF91bmlxKHVuc2lnbmVkIGNoYXIgKmN1cl9zaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSk7CisKKy8qCisgKiBOb3RlcyB0cmVlIG9iamVjdAorICoKKyAqIEVuY2Fwc3VsYXRlcyB0aGUgaW50ZXJuYWwgbm90ZXMgdHJlZSBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIGEgbm90ZXMgcmVmLgorICogV2hlbmV2ZXIgYSBzdHJ1Y3Qgbm90ZXNfdHJlZSBwb2ludGVyIGlzIHJlcXVpcmVkIGJlbG93LCB5b3UgbWF5IHBhc3MgTlVMTCBpbgorICogb3JkZXIgdG8gdXNlIHRoZSBkZWZhdWx0L2ludGVybmFsIG5vdGVzIHRyZWUuIEUuZy4geW91IG9ubHkgbmVlZCB0byBwYXNzIGEKKyAqIG5vbi1OVUxMIHZhbHVlIGlmIHlvdSBuZWVkIHRvIHJlZmVyIHRvIHNldmVyYWwgZGlmZmVyZW50IG5vdGVzIHRyZWVzCisgKiBzaW11bHRhbmVvdXNseS4KKyAqLworZXh0ZXJuIHN0cnVjdCBub3Rlc190cmVlIHsKKwlzdHJ1Y3QgaW50X25vZGUgKnJvb3Q7CisJc3RydWN0IG5vbl9ub3RlICpmaXJzdF9ub25fbm90ZSwgKnByZXZfbm9uX25vdGU7CisJY2hhciAqcmVmOworCWNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3RlczsKKwlpbnQgaW5pdGlhbGl6ZWQ7CisJaW50IGRpcnR5OworfSBkZWZhdWx0X25vdGVzX3RyZWU7CisKKy8qCisgKiBSZXR1cm4gdGhlIGRlZmF1bHQgbm90ZXMgcmVmLgorICoKKyAqIFRoZSBkZWZhdWx0IG5vdGVzIHJlZiBpcyB0aGUgbm90ZXMgcmVmIHRoYXQgaXMgdXNlZCB3aGVuIG5vdGVzX3JlZiA9PSBOVUxMCisgKiBpcyBwYXNzZWQgdG8gaW5pdF9ub3RlcygpLgorICoKKyAqIFRoaXMgdGhlIGZpcnN0IG9mIHRoZSBmb2xsb3dpbmcgdG8gYmUgZGVmaW5lZDoKKyAqIDEuIFRoZSAnLS1yZWYnIG9wdGlvbiB0byAnZ2l0IG5vdGVzJywgaWYgZ2l2ZW4KKyAqIDIuIFRoZSAkR0lUX05PVEVTX1JFRiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgaWYgc2V0CisgKiAzLiBUaGUgdmFsdWUgb2YgdGhlIGNvcmUubm90ZXNSZWYgY29uZmlnIHZhcmlhYmxlLCBpZiBzZXQKKyAqIDQuIEdJVF9OT1RFU19ERUZBVUxUX1JFRiAoaS5lLiAicmVmcy9ub3Rlcy9jb21taXRzIikKKyAqLworY29uc3QgY2hhciAqZGVmYXVsdF9ub3Rlc19yZWYodm9pZCk7CisKKy8qCisgKiBGbGFncyBjb250cm9sbGluZyBiZWhhdmlvdXIgb2Ygbm90ZXMgdHJlZSBpbml0aWFsaXphdGlvbgorICoKKyAqIERlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIGluaXRpYWxpemUgdGhlIG5vdGVzIHRyZWUgZnJvbSB0aGUgdHJlZSBvYmplY3QKKyAqIHNwZWNpZmllZCBieSB0aGUgZ2l2ZW4gKG9yIGRlZmF1bHQpIG5vdGVzIHJlZi4KKyAqLworI2RlZmluZSBOT1RFU19JTklUX0VNUFRZIDEKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGdpdmVuIG5vdGVzX3RyZWUgd2l0aCB0aGUgbm90ZXMgdHJlZSBzdHJ1Y3R1cmUgYXQgdGhlIGdpdmVuCisgKiByZWYuIElmIGdpdmVuIHJlZiBpcyBOVUxMLCB0aGUgdmFsdWUgb2YgdGhlICRHSVRfTk9URVNfUkVGIGVudmlyb25tZW50CisgKiB2YXJpYWJsZSBpcyB1c2VkLCBhbmQgaWYgdGhhdCBpcyBtaXNzaW5nLCB0aGUgZGVmYXVsdCBub3RlcyByZWYgaXMgdXNlZAorICogKCJyZWZzL25vdGVzL2NvbW1pdHMiKS4KKyAqCisgKiBJZiB5b3UgbmVlZCB0byByZS1pbml0aWFsaXplIGEgbm90ZXNfdHJlZSBzdHJ1Y3R1cmUgKGUuZy4gd2hlbiBzd2l0Y2hpbmcgZnJvbQorICogb25lIG5vdGVzIHJlZiB0byBhbm90aGVyKSwgeW91IG11c3QgZmlyc3QgZGUtaW5pdGlhbGl6ZSB0aGUgbm90ZXNfdHJlZQorICogc3RydWN0dXJlIGJ5IGNhbGxpbmcgZnJlZV9ub3RlcyhzdHJ1Y3Qgbm90ZXNfdHJlZSAqKS4KKyAqCisgKiBJZiB5b3UgcGFzcyB0ID09IE5VTEwsIHRoZSBkZWZhdWx0IGludGVybmFsIG5vdGVzX3RyZWUgd2lsbCBiZSBpbml0aWFsaXplZC4KKyAqCisgKiBUaGUgY29tYmluZV9ub3RlcyBmdW5jdGlvbiB0aGF0IGlzIHBhc3NlZCBiZWNvbWVzIHRoZSBkZWZhdWx0IGNvbWJpbmVfbm90ZXMKKyAqIGZ1bmN0aW9uIGZvciB0aGUgZ2l2ZW4gbm90ZXNfdHJlZS4gSWYgTlVMTCBpcyBwYXNzZWQsIHRoZSBkZWZhdWx0CisgKiBjb21iaW5lX25vdGVzIGZ1bmN0aW9uIGlzIGNvbWJpbmVfbm90ZXNfY29uY2F0ZW5hdGUoKS4KKyAqCisgKiBQcmVjb25kaXRpb246IFRoZSBub3Rlc190cmVlIHN0cnVjdHVyZSBpcyB6ZXJvZWQgKHRoaXMgY2FuIGJlIGFjaGlldmVkIHdpdGgKKyAqIG1lbXNldCh0LCAwLCBzaXplb2Yoc3RydWN0IG5vdGVzX3RyZWUpKSkKKyAqLwordm9pZCBpbml0X25vdGVzKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCBjaGFyICpub3Rlc19yZWYsCisJCWNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3RlcywgaW50IGZsYWdzKTsKKworLyoKKyAqIEFkZCB0aGUgZ2l2ZW4gbm90ZSBvYmplY3QgdG8gdGhlIGdpdmVuIG5vdGVzX3RyZWUgc3RydWN0dXJlCisgKgorICogSWYgdGhlcmUgYWxyZWFkeSBleGlzdHMgYSBub3RlIGZvciB0aGUgZ2l2ZW4gb2JqZWN0X3NoYTEsIHRoZSBnaXZlbgorICogY29tYmluZV9ub3RlcyBmdW5jdGlvbiBpcyBpbnZva2VkIHRvIGJyZWFrIHRoZSB0aWUuIElmIG5vdCBnaXZlbiAoaS5lLgorICogY29tYmluZV9ub3RlcyA9PSBOVUxMKSwgdGhlIGRlZmF1bHQgY29tYmluZV9ub3RlcyBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuCisgKiBub3Rlc190cmVlIGlzIHVzZWQuCisgKgorICogUGFzc2luZyBub3RlX3NoYTEgPT0gbnVsbF9zaGExIGluZGljYXRlcyB0aGUgYWRkaXRpb24gb2YgYW4KKyAqIGVtcHR5L25vbi1leGlzdGVudCBub3RlLiBUaGlzIGlzIGEgKHBvdGVudGlhbGx5IGV4cGVuc2l2ZSkgbm8tb3AgdW5sZXNzCisgKiB0aGVyZSBhbHJlYWR5IGV4aXN0cyBhIG5vdGUgZm9yIHRoZSBnaXZlbiBvYmplY3Rfc2hhMSwgQU5EIGNvbWJpbmluZyB0aGF0CisgKiBub3RlIHdpdGggdGhlIGVtcHR5IG5vdGUgKHVzaW5nIHRoZSBnaXZlbiBjb21iaW5lX25vdGVzIGZ1bmN0aW9uKSByZXN1bHRzCisgKiBpbiBhIG5ldy9jaGFuZ2VkIG5vdGUuCisgKgorICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3M7IG5vbi16ZXJvIG1lYW5zIGNvbWJpbmVfbm90ZXMgZmFpbGVkLgorICoKKyAqIElNUE9SVEFOVDogVGhlIGNoYW5nZXMgbWFkZSBieSBhZGRfbm90ZSgpIHRvIHRoZSBnaXZlbiBub3Rlc190cmVlIHN0cnVjdHVyZQorICogYXJlIG5vdCBwZXJzaXN0ZW50IHVudGlsIGEgc3Vic2VxdWVudCBjYWxsIHRvIHdyaXRlX25vdGVzX3RyZWUoKSByZXR1cm5zCisgKiB6ZXJvLgorICovCitpbnQgYWRkX25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9iamVjdF9zaGExLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpub3RlX3NoYTEsIGNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3Rlcyk7CisKKy8qCisgKiBSZW1vdmUgdGhlIGdpdmVuIG5vdGUgb2JqZWN0IGZyb20gdGhlIGdpdmVuIG5vdGVzX3RyZWUgc3RydWN0dXJlCisgKgorICogSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBtYWRlIGJ5IHJlbW92ZV9ub3RlKCkgdG8gdGhlIGdpdmVuIG5vdGVzX3RyZWUKKyAqIHN0cnVjdHVyZSBhcmUgbm90IHBlcnNpc3RlbnQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gd3JpdGVfbm90ZXNfdHJlZSgpCisgKiByZXR1cm5zIHplcm8uCisgKgorICogUmV0dXJuIDAgaWYgYSBub3RlIHdhcyByZW1vdmVkOyAxIGlmIHRoZXJlIHdhcyBubyBub3RlIHRvIHJlbW92ZS4KKyAqLworaW50IHJlbW92ZV9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSk7CisKKy8qCisgKiBHZXQgdGhlIG5vdGUgb2JqZWN0IFNIQTEgY29udGFpbmluZyB0aGUgbm90ZSBkYXRhIGZvciB0aGUgZ2l2ZW4gb2JqZWN0CisgKgorICogUmV0dXJuIE5VTEwgaWYgdGhlIGdpdmVuIG9iamVjdCBoYXMgbm8gbm90ZXMuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgKmdldF9ub3RlKHN0cnVjdCBub3Rlc190cmVlICp0LAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSk7CisKKy8qCisgKiBDb3B5IGEgbm90ZSBmcm9tIG9uZSBvYmplY3QgdG8gYW5vdGhlciBpbiB0aGUgZ2l2ZW4gbm90ZXNfdHJlZS4KKyAqCisgKiBSZXR1cm5zIDEgaWYgdGhlIHRvX29iaiBhbHJlYWR5IGhhcyBhIG5vdGUgYW5kICdmb3JjZScgaXMgZmFsc2UuIE90aGVyd2lzZSwKKyAqIHJldHVybnMgbm9uLXplcm8gaWYgJ2ZvcmNlJyBpcyB0cnVlLCBidXQgdGhlIGdpdmVuIGNvbWJpbmVfbm90ZXMgZnVuY3Rpb24KKyAqIGZhaWxlZCB0byBjb21iaW5lIGZyb21fb2JqJ3Mgbm90ZSB3aXRoIHRvX29iaidzIGV4aXN0aW5nIG5vdGUuCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcy4KKyAqCisgKiBJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIG1hZGUgYnkgY29weV9ub3RlKCkgdG8gdGhlIGdpdmVuIG5vdGVzX3RyZWUgc3RydWN0dXJlCisgKiBhcmUgbm90IHBlcnNpc3RlbnQgdW50aWwgYSBzdWJzZXF1ZW50IGNhbGwgdG8gd3JpdGVfbm90ZXNfdHJlZSgpIHJldHVybnMKKyAqIHplcm8uCisgKi8KK2ludCBjb3B5X25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsCisJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZnJvbV9vYmosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRvX29iaiwKKwkgICAgICBpbnQgZm9yY2UsIGNvbWJpbmVfbm90ZXNfZm4gY29tYmluZV9ub3Rlcyk7CisKKy8qCisgKiBGbGFncyBjb250cm9sbGluZyBiZWhhdmlvdXIgb2YgZm9yX2VhY2hfbm90ZSgpCisgKgorICogRGVmYXVsdCBiZWhhdmlvdXIgb2YgZm9yX2VhY2hfbm90ZSgpIGlzIHRvIHRyYXZlcnNlIGV2ZXJ5IHNpbmdsZSBub3RlIG9iamVjdAorICogaW4gdGhlIGdpdmVuIG5vdGVzIHRyZWUsIHVucGFja2luZyBzdWJ0cmVlIGVudHJpZXMgYWxvbmcgdGhlIHdheS4KKyAqIFRoZSBmb2xsb3dpbmcgZmxhZ3MgY2FuIGJlIHVzZWQgdG8gYWx0ZXIgdGhlIGRlZmF1bHQgYmVoYXZpb3VyOgorICoKKyAqIC0gRE9OVF9VTlBBQ0tfU1VCVFJFRVMgY2F1c2VzIGZvcl9lYWNoX25vdGUoKSBOT1QgdG8gdW5wYWNrIGFuZCByZWN1cnNlIGludG8KKyAqICAgc3VidHJlZSBlbnRyaWVzIHdoaWxlIHRyYXZlcnNpbmcgdGhlIG5vdGVzIHRyZWUuIFRoaXMgY2F1c2VzIG5vdGVzIHdpdGhpbgorICogICB0aG9zZSBzdWJ0cmVlcyBOT1QgdG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjay4gVXNlIHRoaXMgZmxhZyBpZiB5b3UKKyAqICAgZG9uJ3Qgd2FudCB0byB0cmF2ZXJzZSBfYWxsXyBub3RlcywgYnV0IG9ubHkgd2FudCB0byB0cmF2ZXJzZSB0aGUgcGFydHMKKyAqICAgb2YgdGhlIG5vdGVzIHRyZWUgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiB1bnBhY2tlZCAodGhpcyBpbmNsdWRlcyBhdCBsZWFzdAorICogICBhbGwgbm90ZXMgdGhhdCBoYXZlIGJlZW4gYWRkZWQvY2hhbmdlZCkuCisgKgorICogLSBZSUVMRF9TVUJUUkVFUyBjYXVzZXMgYW55IHN1YnRyZWUgZW50cmllcyB0aGF0IGFyZSBlbmNvdW50ZXJlZCB0byBiZQorICogICBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLCBiZWZvcmUgcmVjdXJzaW5nIGludG8gdGhlbS4gU3VidHJlZSBlbnRyaWVzIGFyZQorICogICBub3Qgbm90ZSBvYmplY3RzLCBidXQgcmVwcmVzZW50IGludGVybWVkaWF0ZSBkaXJlY3RvcmllcyBpbiB0aGUgbm90ZXMKKyAqICAgdHJlZS4gV2hlbiBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLCBzdWJ0cmVlIGVudHJpZXMgd2lsbCBoYXZlIGEgdHJhaWxpbmcKKyAqICAgc2xhc2ggaW4gdGhlaXIgcGF0aCwgd2hpY2ggdGhlIGNhbGxiYWNrIG1heSB1c2UgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuCisgKiAgIG5vdGUgZW50cmllcyBhbmQgc3VidHJlZSBlbnRyaWVzLiBOb3RlIHRoYXQgYWxyZWFkeS11bnBhY2tlZCBzdWJ0cmVlCisgKiAgIGVudHJpZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBub3RlcyB0cmVlLCBhbmQgd2lsbCB0aGVyZWZvcmUgbm90IGJlIHlpZWxkZWQuCisgKiAgIElmIHRoaXMgZmxhZyBpcyB1c2VkIHRvZ2V0aGVyIHdpdGggRE9OVF9VTlBBQ0tfU1VCVFJFRVMsIGZvcl9lYWNoX25vdGUoKQorICogICB3aWxsIHlpZWxkIHRoZSBzdWJ0cmVlIGVudHJ5LCBidXQgbm90IHJlY3Vyc2UgaW50byBpdC4KKyAqLworI2RlZmluZSBGT1JfRUFDSF9OT1RFX0RPTlRfVU5QQUNLX1NVQlRSRUVTIDEKKyNkZWZpbmUgRk9SX0VBQ0hfTk9URV9ZSUVMRF9TVUJUUkVFUyAyCisKKy8qCisgKiBJbnZva2UgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBub3RlIGluIHRoZSBnaXZlbiBub3Rlc190cmVlCisgKgorICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgbm9uemVybywgdGhlIG5vdGUgd2FsayBpcyBhYm9ydGVkLCBhbmQgdGhlIHJldHVybgorICogdmFsdWUgZnJvbSB0aGUgY2FsbGJhY2sgaXMgcmV0dXJuZWQgZnJvbSBmb3JfZWFjaF9ub3RlKCkuIEhlbmNlLCBhIHplcm8KKyAqIHJldHVybiB2YWx1ZSBmcm9tIGZvcl9lYWNoX25vdGUoKSBpbmRpY2F0ZXMgdGhhdCBhbGwgbm90ZXMgd2VyZSB3YWxrZWQKKyAqIHN1Y2Nlc3NmdWxseS4KKyAqCisgKiBJTVBPUlRBTlQ6IFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBOT1QgYWxsb3dlZCB0byBjaGFuZ2UgdGhlIG5vdGVzIHRyZWUuCisgKiBJbiBvdGhlciB3b3JkcywgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY2FuIE5PVCBiZSBpbnZva2VkIChvbiB0aGUgY3VycmVudAorICogbm90ZXMgdHJlZSkgZnJvbSB3aXRoaW4gdGhlIGNhbGxiYWNrOgorICogLSBhZGRfbm90ZSgpCisgKiAtIHJlbW92ZV9ub3RlKCkKKyAqIC0gY29weV9ub3RlKCkKKyAqIC0gZnJlZV9ub3RlcygpCisgKi8KK3R5cGVkZWYgaW50IGVhY2hfbm90ZV9mbihjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3Rfc2hhMSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqbm90ZV9zaGExLCBjaGFyICpub3RlX3BhdGgsCisJCXZvaWQgKmNiX2RhdGEpOworaW50IGZvcl9lYWNoX25vdGUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIGludCBmbGFncywgZWFjaF9ub3RlX2ZuIGZuLAorCQl2b2lkICpjYl9kYXRhKTsKKworLyoKKyAqIFdyaXRlIHRoZSBnaXZlbiBub3Rlc190cmVlIHN0cnVjdHVyZSB0byB0aGUgb2JqZWN0IGRhdGFiYXNlCisgKgorICogQ3JlYXRlcyBhIG5ldyB0cmVlIG9iamVjdCBlbmNhcHN1bGF0aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBnaXZlbgorICogbm90ZXNfdHJlZSwgYW5kIHN0b3JlcyBpdHMgU0hBMSBpbnRvIHRoZSAncmVzdWx0JyBhcmd1bWVudC4KKyAqCisgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZS4KKyAqCisgKiBJTVBPUlRBTlQ6IENoYW5nZXMgbWFkZSB0byB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSBhcmUgbm90IHBlcnNpc3RlbnQgdW50aWwKKyAqIHRoaXMgZnVuY3Rpb24gaGFzIHJldHVybmVkIHplcm8uIFBsZWFzZSBhbHNvIHJlbWVtYmVyIHRvIGNyZWF0ZSBhCisgKiBjb3JyZXNwb25kaW5nIGNvbW1pdCBvYmplY3QsIGFuZCB1cGRhdGUgdGhlIGFwcHJvcHJpYXRlIG5vdGVzIHJlZi4KKyAqLworaW50IHdyaXRlX25vdGVzX3RyZWUoc3RydWN0IG5vdGVzX3RyZWUgKnQsIHVuc2lnbmVkIGNoYXIgKnJlc3VsdCk7CisKKy8qIEZsYWdzIGNvbnRyb2xsaW5nIHRoZSBvcGVyYXRpb24gb2YgcHJ1bmUgKi8KKyNkZWZpbmUgTk9URVNfUFJVTkVfVkVSQk9TRSAxCisjZGVmaW5lIE5PVEVTX1BSVU5FX0RSWVJVTiAyCisvKgorICogUmVtb3ZlIGFsbCBub3RlcyBhbm5vdGF0aW5nIG5vbi1leGlzdGluZyBvYmplY3RzIGZyb20gdGhlIGdpdmVuIG5vdGVzIHRyZWUKKyAqCisgKiBBbGwgbm90ZXMgaW4gdGhlIGdpdmVuIG5vdGVzX3RyZWUgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIG9iamVjdHMgdGhhdCBubworICogbG9uZ2VyIGV4aXN0IGluIHRoZSBkYXRhYmFzZSwgYXJlIHJlbW92ZWQgZnJvbSB0aGUgbm90ZXMgdHJlZS4KKyAqCisgKiBJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIG1hZGUgYnkgcHJ1bmVfbm90ZXMoKSB0byB0aGUgZ2l2ZW4gbm90ZXNfdHJlZQorICogc3RydWN0dXJlIGFyZSBub3QgcGVyc2lzdGVudCB1bnRpbCBhIHN1YnNlcXVlbnQgY2FsbCB0byB3cml0ZV9ub3Rlc190cmVlKCkKKyAqIHJldHVybnMgemVyby4KKyAqLwordm9pZCBwcnVuZV9ub3RlcyhzdHJ1Y3Qgbm90ZXNfdHJlZSAqdCwgaW50IGZsYWdzKTsKKworLyoKKyAqIEZyZWUgKGFuZCBkZS1pbml0aWFsaXplKSB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSBzdHJ1Y3R1cmUKKyAqCisgKiBJTVBPUlRBTlQ6IENoYW5nZXMgbWFkZSB0byB0aGUgZ2l2ZW4gbm90ZXNfdHJlZSBzaW5jZSB0aGUgbGFzdCwgc3VjY2Vzc2Z1bAorICogY2FsbCB0byB3cml0ZV9ub3Rlc190cmVlKCkgd2lsbCBiZSBsb3N0LgorICovCit2b2lkIGZyZWVfbm90ZXMoc3RydWN0IG5vdGVzX3RyZWUgKnQpOworCitzdHJ1Y3Qgc3RyaW5nX2xpc3Q7CisKK3N0cnVjdCBkaXNwbGF5X25vdGVzX29wdCB7CisJaW50IHVzZV9kZWZhdWx0X25vdGVzOworCXN0cnVjdCBzdHJpbmdfbGlzdCBleHRyYV9ub3Rlc19yZWZzOworfTsKKworLyoKKyAqIExvYWQgdGhlIG5vdGVzIG1hY2hpbmVyeSBmb3IgZGlzcGxheWluZyBzZXZlcmFsIG5vdGVzIHRyZWVzLgorICoKKyAqIElmICdvcHQnIGlzIG5vdCBOVUxMLCB0aGVuIGl0IHNwZWNpZmllcyBhZGRpdGlvbmFsIHNldHRpbmdzIGZvciB0aGUKKyAqIGRpc3BsYXlpbmc6CisgKgorICogLSBzdXBwcmVzc19kZWZhdWx0X25vdGVzIGluZGljYXRlcyB0aGF0IHRoZSBub3RlcyBmcm9tCisgKiAgIGNvcmUubm90ZXNSZWYgYW5kIG5vdGVzLmRpc3BsYXlSZWYgc2hvdWxkIG5vdCBiZSBsb2FkZWQuCisgKgorICogLSBleHRyYV9ub3Rlc19yZWZzIG1heSBjb250YWluIGEgbGlzdCBvZiBnbG9icyAoaW4gdGhlIHNhbWUgc3R5bGUKKyAqICAgYXMgbm90ZXMuZGlzcGxheVJlZikgd2hlcmUgbm90ZXMgc2hvdWxkIGJlIGxvYWRlZCBmcm9tLgorICovCit2b2lkIGluaXRfZGlzcGxheV9ub3RlcyhzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgKm9wdCk7CisKKy8qCisgKiBBcHBlbmQgbm90ZXMgZm9yIHRoZSBnaXZlbiAnb2JqZWN0X3NoYTEnIGZyb20gYWxsIHRyZWVzIHNldCB1cCBieQorICogaW5pdF9kaXNwbGF5X25vdGVzKCkgdG8gJ3NiJy4gIFRoZSAnZmxhZ3MnIGFyZSBhIGJpdHdpc2UKKyAqIGNvbWJpbmF0aW9uIG9mCisgKgorICogLSBOT1RFU19TSE9XX0hFQURFUjogYWRkIGEgJ05vdGVzIChyZWZuYW1lKTonIGhlYWRlcgorICoKKyAqIC0gTk9URVNfSU5ERU5UOiBpbmRlbnQgdGhlIG5vdGVzIGJ5IDQgcGxhY2VzCisgKgorICogWW91ICptdXN0KiBjYWxsIGluaXRfZGlzcGxheV9ub3RlcygpIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICovCit2b2lkIGZvcm1hdF9kaXNwbGF5X25vdGVzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9iamVjdF9zaGExLAorCQkJICBzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqb3V0cHV0X2VuY29kaW5nLCBpbnQgcmF3KTsKKworLyoKKyAqIExvYWQgdGhlIG5vdGVzIHRyZWUgZnJvbSBlYWNoIHJlZiBsaXN0ZWQgaW4gJ3JlZnMnLiAgVGhlIG91dHB1dCBpcworICogYW4gYXJyYXkgb2Ygbm90ZXNfdHJlZSosIHRlcm1pbmF0ZWQgYnkgYSBOVUxMLgorICovCitzdHJ1Y3Qgbm90ZXNfdHJlZSAqKmxvYWRfbm90ZXNfdHJlZXMoc3RydWN0IHN0cmluZ19saXN0ICpyZWZzKTsKKworLyoKKyAqIEFkZCBhbGwgcmVmcyB0aGF0IG1hdGNoICdnbG9iJyB0byB0aGUgJ2xpc3QnLgorICovCit2b2lkIHN0cmluZ19saXN0X2FkZF9yZWZzX2J5X2dsb2Ioc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpnbG9iKTsKKworLyoKKyAqIEFkZCBhbGwgcmVmcyBmcm9tIGEgY29sb24tc2VwYXJhdGVkIGdsb2IgbGlzdCAnZ2xvYnMnIHRvIHRoZSBlbmQgb2YKKyAqICdsaXN0Jy4gIEVtcHR5IGNvbXBvbmVudHMgYXJlIGlnbm9yZWQuICBUaGlzIGhlbHBlciBpcyB1c2VkIHRvCisgKiBwYXJzZSBHSVRfTk9URVNfRElTUExBWV9SRUYgc3R5bGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorICovCit2b2lkIHN0cmluZ19saXN0X2FkZF9yZWZzX2Zyb21fY29sb25fc2VwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJIGNvbnN0IGNoYXIgKmdsb2JzKTsKKworLyogRXhwYW5kIGlucGxhY2UgYSBub3RlIHJlZiBsaWtlICJmb28iIG9yICJub3Rlcy9mb28iIGludG8gInJlZnMvbm90ZXMvZm9vIiAqLwordm9pZCBleHBhbmRfbm90ZXNfcmVmKHN0cnVjdCBzdHJidWYgKnNiKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9vYmplY3QuYyBiL29iamVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MGFjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9vYmplY3QuYwpAQCAtMCwwICsxLDQyNyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKworc3RhdGljIHN0cnVjdCBvYmplY3QgKipvYmpfaGFzaDsKK3N0YXRpYyBpbnQgbnJfb2Jqcywgb2JqX2hhc2hfc2l6ZTsKKwordW5zaWduZWQgaW50IGdldF9tYXhfb2JqZWN0X2luZGV4KHZvaWQpCit7CisJcmV0dXJuIG9ial9oYXNoX3NpemU7Cit9CisKK3N0cnVjdCBvYmplY3QgKmdldF9pbmRleGVkX29iamVjdCh1bnNpZ25lZCBpbnQgaWR4KQoreworCXJldHVybiBvYmpfaGFzaFtpZHhdOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqb2JqZWN0X3R5cGVfc3RyaW5nc1tdID0geworCU5VTEwsCQkvKiBPQkpfTk9ORSA9IDAgKi8KKwkiY29tbWl0IiwJLyogT0JKX0NPTU1JVCA9IDEgKi8KKwkidHJlZSIsCQkvKiBPQkpfVFJFRSA9IDIgKi8KKwkiYmxvYiIsCQkvKiBPQkpfQkxPQiA9IDMgKi8KKwkidGFnIiwJCS8qIE9CSl9UQUcgPSA0ICovCit9OworCitjb25zdCBjaGFyICp0eXBlbmFtZSh1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlpZiAodHlwZSA+PSBBUlJBWV9TSVpFKG9iamVjdF90eXBlX3N0cmluZ3MpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gb2JqZWN0X3R5cGVfc3RyaW5nc1t0eXBlXTsKK30KKworaW50IHR5cGVfZnJvbV9zdHJpbmdfZ2VudGx5KGNvbnN0IGNoYXIgKnN0ciwgc3NpemVfdCBsZW4sIGludCBnZW50bGUpCit7CisJaW50IGk7CisKKwlpZiAobGVuIDwgMCkKKwkJbGVuID0gc3RybGVuKHN0cik7CisKKwlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRShvYmplY3RfdHlwZV9zdHJpbmdzKTsgaSsrKQorCQlpZiAoIXN0cm5jbXAoc3RyLCBvYmplY3RfdHlwZV9zdHJpbmdzW2ldLCBsZW4pICYmCisJCSAgICBvYmplY3RfdHlwZV9zdHJpbmdzW2ldW2xlbl0gPT0gJ1wwJykKKwkJCXJldHVybiBpOworCisJaWYgKGdlbnRsZSkKKwkJcmV0dXJuIC0xOworCisJZGllKCJpbnZhbGlkIG9iamVjdCB0eXBlIFwiJXNcIiIsIHN0cik7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBudW1lcmljYWwgaGFzaCB2YWx1ZSBiZXR3ZWVuIDAgYW5kIG4tMSBmb3IgdGhlIG9iamVjdCB3aXRoCisgKiB0aGUgc3BlY2lmaWVkIHNoYTEuICBuIG11c3QgYmUgYSBwb3dlciBvZiAyLiAgUGxlYXNlIG5vdGUgdGhhdCB0aGUKKyAqIHJldHVybiB2YWx1ZSBpcyAqbm90KiBjb25zaXN0ZW50IGFjcm9zcyBjb21wdXRlciBhcmNoaXRlY3R1cmVzLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IGhhc2hfb2JqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGludCBuKQoreworCXJldHVybiBzaGExaGFzaChzaGExKSAmIChuIC0gMSk7Cit9CisKKy8qCisgKiBJbnNlcnQgb2JqIGludG8gdGhlIGhhc2ggdGFibGUgaGFzaCwgd2hpY2ggaGFzIGxlbmd0aCBzaXplICh3aGljaAorICogbXVzdCBiZSBhIHBvd2VyIG9mIDIpLiAgT24gY29sbGlzaW9ucywgc2ltcGx5IG92ZXJmbG93IHRvIHRoZSBuZXh0CisgKiBlbXB0eSBidWNrZXQuCisgKi8KK3N0YXRpYyB2b2lkIGluc2VydF9vYmpfaGFzaChzdHJ1Y3Qgb2JqZWN0ICpvYmosIHN0cnVjdCBvYmplY3QgKipoYXNoLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaiA9IGhhc2hfb2JqKG9iai0+c2hhMSwgc2l6ZSk7CisKKwl3aGlsZSAoaGFzaFtqXSkgeworCQlqKys7CisJCWlmIChqID49IHNpemUpCisJCQlqID0gMDsKKwl9CisJaGFzaFtqXSA9IG9iajsKK30KKworLyoKKyAqIExvb2sgdXAgdGhlIHJlY29yZCBmb3IgdGhlIGdpdmVuIHNoYTEgaW4gdGhlIGhhc2ggbWFwIHN0b3JlZCBpbgorICogb2JqX2hhc2guICBSZXR1cm4gTlVMTCBpZiBpdCB3YXMgbm90IGZvdW5kLgorICovCitzdHJ1Y3Qgb2JqZWN0ICpsb29rdXBfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgaW50IGksIGZpcnN0OworCXN0cnVjdCBvYmplY3QgKm9iajsKKworCWlmICghb2JqX2hhc2gpCisJCXJldHVybiBOVUxMOworCisJZmlyc3QgPSBpID0gaGFzaF9vYmooc2hhMSwgb2JqX2hhc2hfc2l6ZSk7CisJd2hpbGUgKChvYmogPSBvYmpfaGFzaFtpXSkgIT0gTlVMTCkgeworCQlpZiAoIWhhc2hjbXAoc2hhMSwgb2JqLT5zaGExKSkKKwkJCWJyZWFrOworCQlpKys7CisJCWlmIChpID09IG9ial9oYXNoX3NpemUpCisJCQlpID0gMDsKKwl9CisJaWYgKG9iaiAmJiBpICE9IGZpcnN0KSB7CisJCS8qCisJCSAqIE1vdmUgb2JqZWN0IHRvIHdoZXJlIHdlIHN0YXJ0ZWQgdG8gbG9vayBmb3IgaXQgc28KKwkJICogdGhhdCB3ZSBkbyBub3QgbmVlZCB0byB3YWxrIHRoZSBoYXNoIHRhYmxlIHRoZSBuZXh0CisJCSAqIHRpbWUgd2UgbG9vayBmb3IgaXQuCisJCSAqLworCQlzdHJ1Y3Qgb2JqZWN0ICp0bXAgPSBvYmpfaGFzaFtpXTsKKwkJb2JqX2hhc2hbaV0gPSBvYmpfaGFzaFtmaXJzdF07CisJCW9ial9oYXNoW2ZpcnN0XSA9IHRtcDsKKwl9CisJcmV0dXJuIG9iajsKK30KKworLyoKKyAqIEluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBoYXNoIG1hcCBzdG9yZWQgaW4gb2JqX2hhc2ggdG8gdGhlIG5leHQKKyAqIHBvd2VyIG9mIDIgKGJ1dCBhdCBsZWFzdCAzMikuICBDb3B5IHRoZSBleGlzdGluZyB2YWx1ZXMgdG8gdGhlIG5ldworICogaGFzaCBtYXAuCisgKi8KK3N0YXRpYyB2b2lkIGdyb3dfb2JqZWN0X2hhc2godm9pZCkKK3sKKwlpbnQgaTsKKwkvKgorCSAqIE5vdGUgdGhhdCB0aGlzIHNpemUgbXVzdCBhbHdheXMgYmUgcG93ZXItb2YtMiB0byBtYXRjaCBoYXNoX29iagorCSAqIGFib3ZlLgorCSAqLworCWludCBuZXdfaGFzaF9zaXplID0gb2JqX2hhc2hfc2l6ZSA8IDMyID8gMzIgOiAyICogb2JqX2hhc2hfc2l6ZTsKKwlzdHJ1Y3Qgb2JqZWN0ICoqbmV3X2hhc2g7CisKKwluZXdfaGFzaCA9IHhjYWxsb2MobmV3X2hhc2hfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBvYmplY3QgKikpOworCWZvciAoaSA9IDA7IGkgPCBvYmpfaGFzaF9zaXplOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gb2JqX2hhc2hbaV07CisJCWlmICghb2JqKQorCQkJY29udGludWU7CisJCWluc2VydF9vYmpfaGFzaChvYmosIG5ld19oYXNoLCBuZXdfaGFzaF9zaXplKTsKKwl9CisJZnJlZShvYmpfaGFzaCk7CisJb2JqX2hhc2ggPSBuZXdfaGFzaDsKKwlvYmpfaGFzaF9zaXplID0gbmV3X2hhc2hfc2l6ZTsKK30KKwordm9pZCAqY3JlYXRlX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpvKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IG87CisKKwlvYmotPnBhcnNlZCA9IDA7CisJb2JqLT51c2VkID0gMDsKKwlvYmotPmZsYWdzID0gMDsKKwloYXNoY3B5KG9iai0+c2hhMSwgc2hhMSk7CisKKwlpZiAob2JqX2hhc2hfc2l6ZSAtIDEgPD0gbnJfb2JqcyAqIDIpCisJCWdyb3dfb2JqZWN0X2hhc2goKTsKKworCWluc2VydF9vYmpfaGFzaChvYmosIG9ial9oYXNoLCBvYmpfaGFzaF9zaXplKTsKKwlucl9vYmpzKys7CisJcmV0dXJuIG9iajsKK30KKwordm9pZCAqb2JqZWN0X2FzX3R5cGUoc3RydWN0IG9iamVjdCAqb2JqLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsIGludCBxdWlldCkKK3sKKwlpZiAob2JqLT50eXBlID09IHR5cGUpCisJCXJldHVybiBvYmo7CisJZWxzZSBpZiAob2JqLT50eXBlID09IE9CSl9OT05FKSB7CisJCWlmICh0eXBlID09IE9CSl9DT01NSVQpCisJCQkoKHN0cnVjdCBjb21taXQgKilvYmopLT5pbmRleCA9IGFsbG9jX2NvbW1pdF9pbmRleCgpOworCQlvYmotPnR5cGUgPSB0eXBlOworCQlyZXR1cm4gb2JqOworCX0KKwllbHNlIHsKKwkJaWYgKCFxdWlldCkKKwkJCWVycm9yKCJvYmplY3QgJXMgaXMgYSAlcywgbm90IGEgJXMiLAorCQkJICAgICAgc2hhMV90b19oZXgob2JqLT5zaGExKSwKKwkJCSAgICAgIHR5cGVuYW1lKG9iai0+dHlwZSksIHR5cGVuYW1lKHR5cGUpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdHJ1Y3Qgb2JqZWN0ICpsb29rdXBfdW5rbm93bl9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlvYmogPSBjcmVhdGVfb2JqZWN0KHNoYTEsIGFsbG9jX29iamVjdF9ub2RlKCkpOworCXJldHVybiBvYmo7Cit9CisKK3N0cnVjdCBvYmplY3QgKnBhcnNlX29iamVjdF9idWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1bnNpZ25lZCBsb25nIHNpemUsIHZvaWQgKmJ1ZmZlciwgaW50ICplYXRlbl9wKQoreworCXN0cnVjdCBvYmplY3QgKm9iajsKKwkqZWF0ZW5fcCA9IDA7CisKKwlvYmogPSBOVUxMOworCWlmICh0eXBlID09IE9CSl9CTE9CKSB7CisJCXN0cnVjdCBibG9iICpibG9iID0gbG9va3VwX2Jsb2Ioc2hhMSk7CisJCWlmIChibG9iKSB7CisJCQlpZiAocGFyc2VfYmxvYl9idWZmZXIoYmxvYiwgYnVmZmVyLCBzaXplKSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCW9iaiA9ICZibG9iLT5vYmplY3Q7CisJCX0KKwl9IGVsc2UgaWYgKHR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJc3RydWN0IHRyZWUgKnRyZWUgPSBsb29rdXBfdHJlZShzaGExKTsKKwkJaWYgKHRyZWUpIHsKKwkJCW9iaiA9ICZ0cmVlLT5vYmplY3Q7CisJCQlpZiAoIXRyZWUtPmJ1ZmZlcikKKwkJCQl0cmVlLT5vYmplY3QucGFyc2VkID0gMDsKKwkJCWlmICghdHJlZS0+b2JqZWN0LnBhcnNlZCkgeworCQkJCWlmIChwYXJzZV90cmVlX2J1ZmZlcih0cmVlLCBidWZmZXIsIHNpemUpKQorCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQkqZWF0ZW5fcCA9IDE7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKHR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0KHNoYTEpOworCQlpZiAoY29tbWl0KSB7CisJCQlpZiAocGFyc2VfY29tbWl0X2J1ZmZlcihjb21taXQsIGJ1ZmZlciwgc2l6ZSkpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpZiAoIWdldF9jYWNoZWRfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpKSB7CisJCQkJc2V0X2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWZmZXIsIHNpemUpOworCQkJCSplYXRlbl9wID0gMTsKKwkJCX0KKwkJCW9iaiA9ICZjb21taXQtPm9iamVjdDsKKwkJfQorCX0gZWxzZSBpZiAodHlwZSA9PSBPQkpfVEFHKSB7CisJCXN0cnVjdCB0YWcgKnRhZyA9IGxvb2t1cF90YWcoc2hhMSk7CisJCWlmICh0YWcpIHsKKwkJCWlmIChwYXJzZV90YWdfYnVmZmVyKHRhZywgYnVmZmVyLCBzaXplKSkKKwkJCSAgICAgICByZXR1cm4gTlVMTDsKKwkJCW9iaiA9ICZ0YWctPm9iamVjdDsKKwkJfQorCX0gZWxzZSB7CisJCXdhcm5pbmcoIm9iamVjdCAlcyBoYXMgdW5rbm93biB0eXBlIGlkICVkIiwgc2hhMV90b19oZXgoc2hhMSksIHR5cGUpOworCQlvYmogPSBOVUxMOworCX0KKwlyZXR1cm4gb2JqOworfQorCitzdHJ1Y3Qgb2JqZWN0ICpwYXJzZV9vYmplY3Rfb3JfZGllKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCWlmIChvKQorCQlyZXR1cm4gbzsKKworCWRpZShfKCJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIpLCBuYW1lID8gbmFtZSA6IHNoYTFfdG9faGV4KHNoYTEpKTsKK30KKworc3RydWN0IG9iamVjdCAqcGFyc2Vfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlpbnQgZWF0ZW47CisJY29uc3QgdW5zaWduZWQgY2hhciAqcmVwbCA9IGxvb2t1cF9yZXBsYWNlX29iamVjdChzaGExKTsKKwl2b2lkICpidWZmZXI7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJb2JqID0gbG9va3VwX29iamVjdChzaGExKTsKKwlpZiAob2JqICYmIG9iai0+cGFyc2VkKQorCQlyZXR1cm4gb2JqOworCisJaWYgKChvYmogJiYgb2JqLT50eXBlID09IE9CSl9CTE9CKSB8fAorCSAgICAoIW9iaiAmJiBoYXNfc2hhMV9maWxlKHNoYTEpICYmCisJICAgICBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpID09IE9CSl9CTE9CKSkgeworCQlpZiAoY2hlY2tfc2hhMV9zaWduYXR1cmUocmVwbCwgTlVMTCwgMCwgTlVMTCkgPCAwKSB7CisJCQllcnJvcigic2hhMSBtaXNtYXRjaCAlcyIsIHNoYTFfdG9faGV4KHJlcGwpKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXBhcnNlX2Jsb2JfYnVmZmVyKGxvb2t1cF9ibG9iKHNoYTEpLCBOVUxMLCAwKTsKKwkJcmV0dXJuIGxvb2t1cF9vYmplY3Qoc2hhMSk7CisJfQorCisJYnVmZmVyID0gcmVhZF9zaGExX2ZpbGUoc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoYnVmZmVyKSB7CisJCWlmIChjaGVja19zaGExX3NpZ25hdHVyZShyZXBsLCBidWZmZXIsIHNpemUsIHR5cGVuYW1lKHR5cGUpKSA8IDApIHsKKwkJCWZyZWUoYnVmZmVyKTsKKwkJCWVycm9yKCJzaGExIG1pc21hdGNoICVzIiwgc2hhMV90b19oZXgocmVwbCkpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlvYmogPSBwYXJzZV9vYmplY3RfYnVmZmVyKHNoYTEsIHR5cGUsIHNpemUsIGJ1ZmZlciwgJmVhdGVuKTsKKwkJaWYgKCFlYXRlbikKKwkJCWZyZWUoYnVmZmVyKTsKKwkJcmV0dXJuIG9iajsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBvYmplY3RfbGlzdCAqb2JqZWN0X2xpc3RfaW5zZXJ0KHN0cnVjdCBvYmplY3QgKml0ZW0sCisJCQkJICAgICAgIHN0cnVjdCBvYmplY3RfbGlzdCAqKmxpc3RfcCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2xpc3QgKm5ld19saXN0ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IG9iamVjdF9saXN0KSk7CisJbmV3X2xpc3QtPml0ZW0gPSBpdGVtOworCW5ld19saXN0LT5uZXh0ID0gKmxpc3RfcDsKKwkqbGlzdF9wID0gbmV3X2xpc3Q7CisJcmV0dXJuIG5ld19saXN0OworfQorCitpbnQgb2JqZWN0X2xpc3RfY29udGFpbnMoc3RydWN0IG9iamVjdF9saXN0ICpsaXN0LCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJd2hpbGUgKGxpc3QpIHsKKwkJaWYgKGxpc3QtPml0ZW0gPT0gb2JqKQorCQkJcmV0dXJuIDE7CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEEgemVyby1sZW5ndGggc3RyaW5nIHRvIHdoaWNoIG9iamVjdF9hcnJheV9lbnRyeTo6bmFtZSBjYW4gYmUKKyAqIGluaXRpYWxpemVkIHdpdGhvdXQgcmVxdWlyaW5nIGEgbWFsbG9jL2ZyZWUuCisgKi8KK3N0YXRpYyBjaGFyIG9iamVjdF9hcnJheV9zbG9wYnVmWzFdOworCit2b2lkIGFkZF9vYmplY3RfYXJyYXlfd2l0aF9wYXRoKHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQlzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSwKKwkJCQl1bnNpZ25lZCBtb2RlLCBjb25zdCBjaGFyICpwYXRoKQoreworCXVuc2lnbmVkIG5yID0gYXJyYXktPm5yOworCXVuc2lnbmVkIGFsbG9jID0gYXJyYXktPmFsbG9jOworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm9iamVjdHMgPSBhcnJheS0+b2JqZWN0czsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnRyeTsKKworCWlmIChuciA+PSBhbGxvYykgeworCQlhbGxvYyA9IChhbGxvYyArIDMyKSAqIDI7CisJCVJFQUxMT0NfQVJSQVkob2JqZWN0cywgYWxsb2MpOworCQlhcnJheS0+YWxsb2MgPSBhbGxvYzsKKwkJYXJyYXktPm9iamVjdHMgPSBvYmplY3RzOworCX0KKwllbnRyeSA9ICZvYmplY3RzW25yXTsKKwllbnRyeS0+aXRlbSA9IG9iajsKKwlpZiAoIW5hbWUpCisJCWVudHJ5LT5uYW1lID0gTlVMTDsKKwllbHNlIGlmICghKm5hbWUpCisJCS8qIFVzZSBvdXIgb3duIGVtcHR5IHN0cmluZyBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgb25lOiAqLworCQllbnRyeS0+bmFtZSA9IG9iamVjdF9hcnJheV9zbG9wYnVmOworCWVsc2UKKwkJZW50cnktPm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCWVudHJ5LT5tb2RlID0gbW9kZTsKKwlpZiAocGF0aCkKKwkJZW50cnktPnBhdGggPSB4c3RyZHVwKHBhdGgpOworCWVsc2UKKwkJZW50cnktPnBhdGggPSBOVUxMOworCWFycmF5LT5uciA9ICsrbnI7Cit9CisKK3ZvaWQgYWRkX29iamVjdF9hcnJheShzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KQoreworCWFkZF9vYmplY3RfYXJyYXlfd2l0aF9wYXRoKG9iaiwgbmFtZSwgYXJyYXksIFNfSUZJTlZBTElELCBOVUxMKTsKK30KKworLyoKKyAqIEZyZWUgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYW4gZW50cnk7IHRoZSByZXN1bHQgaXMKKyAqIGluIGFuIHVuc3BlY2lmaWVkIHN0YXRlIGFuZCBzaG91bGQgbm90IGJlIGV4YW1pbmVkLgorICovCitzdGF0aWMgdm9pZCBvYmplY3RfYXJyYXlfcmVsZWFzZV9lbnRyeShzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnQpCit7CisJaWYgKGVudC0+bmFtZSAhPSBvYmplY3RfYXJyYXlfc2xvcGJ1ZikKKwkJZnJlZShlbnQtPm5hbWUpOworCWZyZWUoZW50LT5wYXRoKTsKK30KKwordm9pZCBvYmplY3RfYXJyYXlfZmlsdGVyKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5LAorCQkJIG9iamVjdF9hcnJheV9lYWNoX2Z1bmNfdCB3YW50LCB2b2lkICpjYl9kYXRhKQoreworCXVuc2lnbmVkIG5yID0gYXJyYXktPm5yLCBzcmMsIGRzdDsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpvYmplY3RzID0gYXJyYXktPm9iamVjdHM7CisKKwlmb3IgKHNyYyA9IGRzdCA9IDA7IHNyYyA8IG5yOyBzcmMrKykgeworCQlpZiAod2FudCgmb2JqZWN0c1tzcmNdLCBjYl9kYXRhKSkgeworCQkJaWYgKHNyYyAhPSBkc3QpCisJCQkJb2JqZWN0c1tkc3RdID0gb2JqZWN0c1tzcmNdOworCQkJZHN0Kys7CisJCX0gZWxzZSB7CisJCQlvYmplY3RfYXJyYXlfcmVsZWFzZV9lbnRyeSgmb2JqZWN0c1tzcmNdKTsKKwkJfQorCX0KKwlhcnJheS0+bnIgPSBkc3Q7Cit9CisKK3ZvaWQgb2JqZWN0X2FycmF5X2NsZWFyKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+bnI7IGkrKykKKwkJb2JqZWN0X2FycmF5X3JlbGVhc2VfZW50cnkoJmFycmF5LT5vYmplY3RzW2ldKTsKKwlmcmVlKGFycmF5LT5vYmplY3RzKTsKKwlhcnJheS0+b2JqZWN0cyA9IE5VTEw7CisJYXJyYXktPm5yID0gYXJyYXktPmFsbG9jID0gMDsKK30KKworLyoKKyAqIFJldHVybiB0cnVlIGlmZiBhcnJheSBhbHJlYWR5IGNvbnRhaW5zIGFuIGVudHJ5IHdpdGggbmFtZS4KKyAqLworc3RhdGljIGludCBjb250YWluc19uYW1lKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5LCBjb25zdCBjaGFyICpuYW1lKQoreworCXVuc2lnbmVkIG5yID0gYXJyYXktPm5yLCBpOworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKm9iamVjdCA9IGFycmF5LT5vYmplY3RzOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyssIG9iamVjdCsrKQorCQlpZiAoIXN0cmNtcChvYmplY3QtPm5hbWUsIG5hbWUpKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgb2JqZWN0X2FycmF5X3JlbW92ZV9kdXBsaWNhdGVzKHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KQoreworCXVuc2lnbmVkIG5yID0gYXJyYXktPm5yLCBzcmM7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqb2JqZWN0cyA9IGFycmF5LT5vYmplY3RzOworCisJYXJyYXktPm5yID0gMDsKKwlmb3IgKHNyYyA9IDA7IHNyYyA8IG5yOyBzcmMrKykgeworCQlpZiAoIWNvbnRhaW5zX25hbWUoYXJyYXksIG9iamVjdHNbc3JjXS5uYW1lKSkgeworCQkJaWYgKHNyYyAhPSBhcnJheS0+bnIpCisJCQkJb2JqZWN0c1thcnJheS0+bnJdID0gb2JqZWN0c1tzcmNdOworCQkJYXJyYXktPm5yKys7CisJCX0gZWxzZSB7CisJCQlvYmplY3RfYXJyYXlfcmVsZWFzZV9lbnRyeSgmb2JqZWN0c1tzcmNdKTsKKwkJfQorCX0KK30KKwordm9pZCBjbGVhcl9vYmplY3RfZmxhZ3ModW5zaWduZWQgZmxhZ3MpCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaSA8IG9ial9oYXNoX3NpemU7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBvYmpfaGFzaFtpXTsKKwkJaWYgKG9iaikKKwkJCW9iai0+ZmxhZ3MgJj0gfmZsYWdzOworCX0KK30KZGlmZiAtLWdpdCBhL29iamVjdC5oIGIvb2JqZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxNjI0NwotLS0gL2Rldi9udWxsCisrKyBiL29iamVjdC5oCkBAIC0wLDAgKzEsMTQzIEBACisjaWZuZGVmIE9CSkVDVF9ICisjZGVmaW5lIE9CSkVDVF9ICisKK3N0cnVjdCBvYmplY3RfbGlzdCB7CisJc3RydWN0IG9iamVjdCAqaXRlbTsKKwlzdHJ1Y3Qgb2JqZWN0X2xpc3QgKm5leHQ7Cit9OworCitzdHJ1Y3Qgb2JqZWN0X2FycmF5IHsKKwl1bnNpZ25lZCBpbnQgbnI7CisJdW5zaWduZWQgaW50IGFsbG9jOworCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgeworCQlzdHJ1Y3Qgb2JqZWN0ICppdGVtOworCQkvKgorCQkgKiBuYW1lIG9yIE5VTEwuICBJZiBub24tTlVMTCwgdGhlIG1lbW9yeSBwb2ludGVkIHRvCisJCSAqIGlzIG93bmVkIGJ5IHRoaXMgb2JqZWN0ICpleGNlcHQqIGlmIGl0IHBvaW50cyBhdAorCQkgKiBvYmplY3RfYXJyYXlfc2xvcGJ1Ziwgd2hpY2ggaXMgYSBzdGF0aWMgY29weSBvZiB0aGUKKwkJICogZW1wdHkgc3RyaW5nLgorCQkgKi8KKwkJY2hhciAqbmFtZTsKKwkJY2hhciAqcGF0aDsKKwkJdW5zaWduZWQgbW9kZTsKKwl9ICpvYmplY3RzOworfTsKKworI2RlZmluZSBPQkpFQ1RfQVJSQVlfSU5JVCB7IDAsIDAsIE5VTEwgfQorCisjZGVmaW5lIFRZUEVfQklUUyAgIDMKKy8qCisgKiBvYmplY3QgZmxhZyBhbGxvY2F0aW9uOgorICogcmV2aXNpb24uaDogICAgICAwLS0tLS0tLS0tMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2CisgKiBmZXRjaC1wYWNrLmM6ICAgIDAtLS00CisgKiB3YWxrZXIuYzogICAgICAgIDAtMgorICogdXBsb2FkLXBhY2suYzogICAgICAgICAgICAgICAxMS0tLS0tLS0tLS0tLS0tLS0xOQorICogYnVpbHRpbi9ibGFtZS5jOiAgICAgICAgICAgICAgIDEyLTEzCisgKiBiaXNlY3QuYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYKKyAqIGJ1bmRsZS5jOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNgorICogaHR0cC1wdXNoLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LS0tLS0xOQorICogY29tbWl0LmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LS0tLS0xOQorICogc2hhMV9uYW1lLmM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwCisgKi8KKyNkZWZpbmUgRkxBR19CSVRTICAyNworCisvKgorICogVGhlIG9iamVjdCB0eXBlIGlzIHN0b3JlZCBpbiAzIGJpdHMuCisgKi8KK3N0cnVjdCBvYmplY3QgeworCXVuc2lnbmVkIHBhcnNlZCA6IDE7CisJdW5zaWduZWQgdXNlZCA6IDE7CisJdW5zaWduZWQgdHlwZSA6IFRZUEVfQklUUzsKKwl1bnNpZ25lZCBmbGFncyA6IEZMQUdfQklUUzsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworfTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnR5cGVuYW1lKHVuc2lnbmVkIGludCB0eXBlKTsKK2V4dGVybiBpbnQgdHlwZV9mcm9tX3N0cmluZ19nZW50bHkoY29uc3QgY2hhciAqc3RyLCBzc2l6ZV90LCBpbnQgZ2VudGxlKTsKKyNkZWZpbmUgdHlwZV9mcm9tX3N0cmluZyhzdHIpIHR5cGVfZnJvbV9zdHJpbmdfZ2VudGx5KHN0ciwgLTEsIDApCisKKy8qCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGJ1Y2tldHMgaW4gdGhlIG9iamVjdCBoYXNobWFwLgorICovCitleHRlcm4gdW5zaWduZWQgaW50IGdldF9tYXhfb2JqZWN0X2luZGV4KHZvaWQpOworCisvKgorICogUmV0dXJuIHRoZSBvYmplY3QgZnJvbSB0aGUgc3BlY2lmaWVkIGJ1Y2tldCBpbiB0aGUgb2JqZWN0IGhhc2htYXAuCisgKi8KK2V4dGVybiBzdHJ1Y3Qgb2JqZWN0ICpnZXRfaW5kZXhlZF9vYmplY3QodW5zaWduZWQgaW50KTsKKworLyoKKyAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2VlIGlmIHdlIGhhdmUgaGVhcmQgb2YgdGhlIG9iamVjdCBiZWZvcmUsIGJ1dAorICogaXQgY2FuIHJldHVybiAieWVzIHdlIGhhdmUsIGFuZCBoZXJlIGlzIGEgaGFsZi1pbml0aWFsaXNlZCBvYmplY3QiCisgKiBmb3IgYW4gb2JqZWN0IHRoYXQgd2UgaGF2ZW4ndCBsb2FkZWQvcGFyc2VkIHlldC4KKyAqCisgKiBXaGVuIHBhcnNpbmcgYSBjb21taXQgdG8gY3JlYXRlIGFuIGluLWNvcmUgY29tbWl0IG9iamVjdCwgaXRzCisgKiBwYXJlbnRzIGxpc3QgaG9sZHMgY29tbWl0IG9iamVjdHMgdGhhdCByZXByZXNlbnQgaXRzIHBhcmVudHMsIGJ1dAorICogdGhleSBhcmUgZXhwZWN0ZWQgdG8gYmUgbGF6aWx5IGluaXRpYWxpemVkIGFuZCBkbyBub3Qga25vdyB3aGF0CisgKiB0aGVpciB0cmVlcyBvciBwYXJlbnRzIGFyZSB5ZXQuICBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzdWNoIGEKKyAqIGhhbGYtaW5pdGlhbGlzZWQgb2JqZWN0cywgdGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBpbml0aWFsaXplIHRoZW0KKyAqIGJ5IGNhbGxpbmcgcGFyc2Vfb2JqZWN0KCkgb24gdGhlbS4KKyAqLworc3RydWN0IG9iamVjdCAqbG9va3VwX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworZXh0ZXJuIHZvaWQgKmNyZWF0ZV9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqb2JqKTsKKwordm9pZCAqb2JqZWN0X2FzX3R5cGUoc3RydWN0IG9iamVjdCAqb2JqLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsIGludCBxdWlldCk7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBvYmplY3QsIGhhdmluZyBwYXJzZWQgaXQgdG8gZmluZCBvdXQgd2hhdCBpdCBpcy4KKyAqCisgKiBSZXR1cm5zIE5VTEwgaWYgdGhlIG9iamVjdCBpcyBtaXNzaW5nIG9yIGNvcnJ1cHQuCisgKi8KK3N0cnVjdCBvYmplY3QgKnBhcnNlX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworLyoKKyAqIExpa2UgcGFyc2Vfb2JqZWN0LCBidXQgd2lsbCBkaWUoKSBpbnN0ZWFkIG9mIHJldHVybmluZyBOVUxMLiBJZiB0aGUKKyAqICJuYW1lIiBwYXJhbWV0ZXIgaXMgbm90IE5VTEwsIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBlcnJvciBtZXNzYWdlCisgKiAob3RoZXJ3aXNlLCB0aGUgc2hhMSBoZXggaXMgZ2l2ZW4pLgorICovCitzdHJ1Y3Qgb2JqZWN0ICpwYXJzZV9vYmplY3Rfb3JfZGllKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBHaXZlbiB0aGUgcmVzdWx0IG9mIHJlYWRfc2hhMV9maWxlKCksIHJldHVybnMgdGhlIG9iamVjdCBhZnRlcgorICogcGFyc2luZyBpdC4gIGVhdGVuX3AgaW5kaWNhdGVzIGlmIHRoZSBvYmplY3QgaGFzIGEgYm9ycm93ZWQgY29weQorICogb2YgYnVmZmVyIGFuZCB0aGUgY2FsbGVyIHNob3VsZCBub3QgZnJlZSgpIGl0LgorICovCitzdHJ1Y3Qgb2JqZWN0ICpwYXJzZV9vYmplY3RfYnVmZmVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgdHlwZSwgdW5zaWduZWQgbG9uZyBzaXplLCB2b2lkICpidWZmZXIsIGludCAqZWF0ZW5fcCk7CisKKy8qKiBSZXR1cm5zIHRoZSBvYmplY3QsIHdpdGggcG90ZW50aWFsbHkgZXhjZXNzIG1lbW9yeSBhbGxvY2F0ZWQuICoqLworc3RydWN0IG9iamVjdCAqbG9va3VwX3Vua25vd25fb2JqZWN0KGNvbnN0IHVuc2lnbmVkICBjaGFyICpzaGExKTsKKworc3RydWN0IG9iamVjdF9saXN0ICpvYmplY3RfbGlzdF9pbnNlcnQoc3RydWN0IG9iamVjdCAqaXRlbSwKKwkJCQkgICAgICAgc3RydWN0IG9iamVjdF9saXN0ICoqbGlzdF9wKTsKKworaW50IG9iamVjdF9saXN0X2NvbnRhaW5zKHN0cnVjdCBvYmplY3RfbGlzdCAqbGlzdCwgc3RydWN0IG9iamVjdCAqb2JqKTsKKworLyogT2JqZWN0IGFycmF5IGhhbmRsaW5nIC4uICovCit2b2lkIGFkZF9vYmplY3RfYXJyYXkoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgb2JqZWN0X2FycmF5ICphcnJheSk7Cit2b2lkIGFkZF9vYmplY3RfYXJyYXlfd2l0aF9wYXRoKHN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXksIHVuc2lnbmVkIG1vZGUsIGNvbnN0IGNoYXIgKnBhdGgpOworCit0eXBlZGVmIGludCAoKm9iamVjdF9hcnJheV9lYWNoX2Z1bmNfdCkoc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqLCB2b2lkICopOworCisvKgorICogQXBwbHkgd2FudCB0byBlYWNoIGVudHJ5IGluIGFycmF5LCByZXRhaW5pbmcgb25seSB0aGUgZW50cmllcyBmb3IKKyAqIHdoaWNoIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUuICBQcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgdGhlIGVudHJpZXMKKyAqIHRoYXQgYXJlIHJldGFpbmVkLgorICovCit2b2lkIG9iamVjdF9hcnJheV9maWx0ZXIoc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXksCisJCQkgb2JqZWN0X2FycmF5X2VhY2hfZnVuY190IHdhbnQsIHZvaWQgKmNiX2RhdGEpOworCisvKgorICogUmVtb3ZlIGZyb20gYXJyYXkgYWxsIGJ1dCB0aGUgZmlyc3QgZW50cnkgd2l0aCBhIGdpdmVuIG5hbWUuCisgKiBXYXJuaW5nOiB0aGlzIGZ1bmN0aW9uIHVzZXMgYW4gTyhOXjIpIGFsZ29yaXRobS4KKyAqLwordm9pZCBvYmplY3RfYXJyYXlfcmVtb3ZlX2R1cGxpY2F0ZXMoc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkpOworCisvKgorICogUmVtb3ZlIGFueSBvYmplY3RzIGZyb20gdGhlIGFycmF5LCBmcmVlaW5nIGFsbCB1c2VkIG1lbW9yeTsgYWZ0ZXJ3YXJkcworICogdGhlIGFycmF5IGlzIHJlYWR5IHRvIHN0b3JlIG1vcmUgb2JqZWN0cyB3aXRoIGFkZF9vYmplY3RfYXJyYXkoKS4KKyAqLwordm9pZCBvYmplY3RfYXJyYXlfY2xlYXIoc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkpOworCit2b2lkIGNsZWFyX29iamVjdF9mbGFncyh1bnNpZ25lZCBmbGFncyk7CisKKyNlbmRpZiAvKiBPQkpFQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvcGFjay1iaXRtYXAtd3JpdGUuYyBiL3BhY2stYml0bWFwLXdyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1ZDEzOAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2stYml0bWFwLXdyaXRlLmMKQEAgLTAsMCArMSw1NDkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJwYWNrLWJpdG1hcC5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAicGFjay1vYmplY3RzLmgiCisKK3N0cnVjdCBiaXRtYXBwZWRfY29tbWl0IHsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGV3YWhfYml0bWFwICpiaXRtYXA7CisJc3RydWN0IGV3YWhfYml0bWFwICp3cml0ZV9hczsKKwlpbnQgZmxhZ3M7CisJaW50IHhvcl9vZmZzZXQ7CisJdWludDMyX3QgY29tbWl0X3BvczsKK307CisKK3N0cnVjdCBiaXRtYXBfd3JpdGVyIHsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmNvbW1pdHM7CisJc3RydWN0IGV3YWhfYml0bWFwICp0cmVlczsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmJsb2JzOworCXN0cnVjdCBld2FoX2JpdG1hcCAqdGFnczsKKworCWtoYXNoX3NoYTEgKmJpdG1hcHM7CisJa2hhc2hfc2hhMSAqcmV1c2VkOworCXN0cnVjdCBwYWNraW5nX2RhdGEgKnRvX3BhY2s7CisKKwlzdHJ1Y3QgYml0bWFwcGVkX2NvbW1pdCAqc2VsZWN0ZWQ7CisJdW5zaWduZWQgaW50IHNlbGVjdGVkX25yLCBzZWxlY3RlZF9hbGxvYzsKKworCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3M7CisJaW50IHNob3dfcHJvZ3Jlc3M7CisJdW5zaWduZWQgY2hhciBwYWNrX2NoZWNrc3VtWzIwXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYml0bWFwX3dyaXRlciB3cml0ZXI7CisKK3ZvaWQgYml0bWFwX3dyaXRlcl9zaG93X3Byb2dyZXNzKGludCBzaG93KQoreworCXdyaXRlci5zaG93X3Byb2dyZXNzID0gc2hvdzsKK30KKworLyoqCisgKiBCdWlsZCB0aGUgaW5pdGlhbCB0eXBlIGluZGV4IGZvciB0aGUgcGFja2ZpbGUKKyAqLwordm9pZCBiaXRtYXBfd3JpdGVyX2J1aWxkX3R5cGVfaW5kZXgoc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaW5kZXgsCisJCQkJICAgIHVpbnQzMl90IGluZGV4X25yKQoreworCXVpbnQzMl90IGk7CisKKwl3cml0ZXIuY29tbWl0cyA9IGV3YWhfbmV3KCk7CisJd3JpdGVyLnRyZWVzID0gZXdhaF9uZXcoKTsKKwl3cml0ZXIuYmxvYnMgPSBld2FoX25ldygpOworCXdyaXRlci50YWdzID0gZXdhaF9uZXcoKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmRleF9ucjsgKytpKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gKHN0cnVjdCBvYmplY3RfZW50cnkgKilpbmRleFtpXTsKKwkJZW51bSBvYmplY3RfdHlwZSByZWFsX3R5cGU7CisKKwkJZW50cnktPmluX3BhY2tfcG9zID0gaTsKKworCQlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CisJCWNhc2UgT0JKX0NPTU1JVDoKKwkJY2FzZSBPQkpfVFJFRToKKwkJY2FzZSBPQkpfQkxPQjoKKwkJY2FzZSBPQkpfVEFHOgorCQkJcmVhbF90eXBlID0gZW50cnktPnR5cGU7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmVhbF90eXBlID0gc2hhMV9vYmplY3RfaW5mbyhlbnRyeS0+aWR4LnNoYTEsIE5VTEwpOworCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKHJlYWxfdHlwZSkgeworCQljYXNlIE9CSl9DT01NSVQ6CisJCQlld2FoX3NldCh3cml0ZXIuY29tbWl0cywgaSk7CisJCQlicmVhazsKKworCQljYXNlIE9CSl9UUkVFOgorCQkJZXdhaF9zZXQod3JpdGVyLnRyZWVzLCBpKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT0JKX0JMT0I6CisJCQlld2FoX3NldCh3cml0ZXIuYmxvYnMsIGkpOworCQkJYnJlYWs7CisKKwkJY2FzZSBPQkpfVEFHOgorCQkJZXdhaF9zZXQod3JpdGVyLnRhZ3MsIGkpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWRpZSgiTWlzc2luZyB0eXBlIGluZm9ybWF0aW9uIGZvciAlcyAoJWQvJWQpIiwKKwkJCSAgICBzaGExX3RvX2hleChlbnRyeS0+aWR4LnNoYTEpLCByZWFsX3R5cGUsIGVudHJ5LT50eXBlKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBDb21wdXRlIHRoZSBhY3R1YWwgYml0bWFwcworICovCitzdGF0aWMgc3RydWN0IG9iamVjdCAqKnNlZW5fb2JqZWN0czsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2Vlbl9vYmplY3RzX25yLCBzZWVuX29iamVjdHNfYWxsb2M7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXNoX2JpdG1hcHBlZF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgZXdhaF9iaXRtYXAgKnJldXNlZCkKK3sKKwlpZiAod3JpdGVyLnNlbGVjdGVkX25yID49IHdyaXRlci5zZWxlY3RlZF9hbGxvYykgeworCQl3cml0ZXIuc2VsZWN0ZWRfYWxsb2MgPSAod3JpdGVyLnNlbGVjdGVkX2FsbG9jICsgMzIpICogMjsKKwkJUkVBTExPQ19BUlJBWSh3cml0ZXIuc2VsZWN0ZWQsIHdyaXRlci5zZWxlY3RlZF9hbGxvYyk7CisJfQorCisJd3JpdGVyLnNlbGVjdGVkW3dyaXRlci5zZWxlY3RlZF9ucl0uY29tbWl0ID0gY29tbWl0OworCXdyaXRlci5zZWxlY3RlZFt3cml0ZXIuc2VsZWN0ZWRfbnJdLmJpdG1hcCA9IHJldXNlZDsKKwl3cml0ZXIuc2VsZWN0ZWRbd3JpdGVyLnNlbGVjdGVkX25yXS5mbGFncyA9IDA7CisKKwl3cml0ZXIuc2VsZWN0ZWRfbnIrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcmtfYXNfc2VlbihzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QpCit7CisJQUxMT0NfR1JPVyhzZWVuX29iamVjdHMsIHNlZW5fb2JqZWN0c19uciArIDEsIHNlZW5fb2JqZWN0c19hbGxvYyk7CisJc2Vlbl9vYmplY3RzW3NlZW5fb2JqZWN0c19ucisrXSA9IG9iamVjdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2FsbF9zZWVuKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHNlZW5fb2JqZWN0c19ucjsgKytpKSB7CisJCXNlZW5fb2JqZWN0c1tpXS0+ZmxhZ3MgJj0gfihTRUVOIHwgQURERUQgfCBTSE9XTik7CisJfQorCXNlZW5fb2JqZWN0c19uciA9IDA7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBmaW5kX29iamVjdF9wb3MoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICplbnRyeSA9IHBhY2tsaXN0X2ZpbmQod3JpdGVyLnRvX3BhY2ssIHNoYTEsIE5VTEwpOworCisJaWYgKCFlbnRyeSkgeworCQlkaWUoIkZhaWxlZCB0byB3cml0ZSBiaXRtYXAgaW5kZXguIFBhY2tmaWxlIGRvZXNuJ3QgaGF2ZSBmdWxsIGNsb3N1cmUgIgorCQkJIihvYmplY3QgJXMgaXMgbWlzc2luZykiLCBzaGExX3RvX2hleChzaGExKSk7CisJfQorCisJcmV0dXJuIGVudHJ5LT5pbl9wYWNrX3BvczsKK30KKworc3RhdGljIHZvaWQgc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0LCBjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJY29uc3QgY2hhciAqbGFzdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYml0bWFwICpiYXNlID0gZGF0YTsKKwliaXRtYXBfc2V0KGJhc2UsIGZpbmRfb2JqZWN0X3BvcyhvYmplY3QtPnNoYTEpKTsKKwltYXJrX2FzX3NlZW4ob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgc2hvd19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCB2b2lkICpkYXRhKQoreworCW1hcmtfYXNfc2Vlbigoc3RydWN0IG9iamVjdCAqKWNvbW1pdCk7Cit9CisKK3N0YXRpYyBpbnQKK2FkZF90b19pbmNsdWRlX3NldChzdHJ1Y3QgYml0bWFwICpiYXNlLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJa2hpdGVyX3QgaGFzaF9wb3M7CisJdWludDMyX3QgYml0bWFwX3BvcyA9IGZpbmRfb2JqZWN0X3Bvcyhjb21taXQtPm9iamVjdC5zaGExKTsKKworCWlmIChiaXRtYXBfZ2V0KGJhc2UsIGJpdG1hcF9wb3MpKQorCQlyZXR1cm4gMDsKKworCWhhc2hfcG9zID0ga2hfZ2V0X3NoYTEod3JpdGVyLmJpdG1hcHMsIGNvbW1pdC0+b2JqZWN0LnNoYTEpOworCWlmIChoYXNoX3BvcyA8IGtoX2VuZCh3cml0ZXIuYml0bWFwcykpIHsKKwkJc3RydWN0IGJpdG1hcHBlZF9jb21taXQgKmJjID0ga2hfdmFsdWUod3JpdGVyLmJpdG1hcHMsIGhhc2hfcG9zKTsKKwkJYml0bWFwX29yX2V3YWgoYmFzZSwgYmMtPmJpdG1hcCk7CisJCXJldHVybiAwOworCX0KKworCWJpdG1hcF9zZXQoYmFzZSwgYml0bWFwX3Bvcyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3Nob3VsZF9pbmNsdWRlKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqX2RhdGEpCit7CisJc3RydWN0IGJpdG1hcCAqYmFzZSA9IF9kYXRhOworCisJaWYgKCFhZGRfdG9faW5jbHVkZV9zZXQoYmFzZSwgY29tbWl0KSkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsKKworCQltYXJrX2FzX3NlZW4oKHN0cnVjdCBvYmplY3QgKiljb21taXQpOworCisJCXdoaWxlIChwYXJlbnQpIHsKKwkJCXBhcmVudC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFNFRU47CisJCQltYXJrX2FzX3NlZW4oKHN0cnVjdCBvYmplY3QgKilwYXJlbnQtPml0ZW0pOworCQkJcGFyZW50ID0gcGFyZW50LT5uZXh0OworCQl9CisKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1dGVfeG9yX29mZnNldHModm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgaW50IE1BWF9YT1JfT0ZGU0VUX1NFQVJDSCA9IDEwOworCisJaW50IGksIG5leHQgPSAwOworCisJd2hpbGUgKG5leHQgPCB3cml0ZXIuc2VsZWN0ZWRfbnIpIHsKKwkJc3RydWN0IGJpdG1hcHBlZF9jb21taXQgKnN0b3JlZCA9ICZ3cml0ZXIuc2VsZWN0ZWRbbmV4dF07CisKKwkJaW50IGJlc3Rfb2Zmc2V0ID0gMDsKKwkJc3RydWN0IGV3YWhfYml0bWFwICpiZXN0X2JpdG1hcCA9IHN0b3JlZC0+Yml0bWFwOworCQlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnRlc3RfeG9yOworCisJCWZvciAoaSA9IDE7IGkgPD0gTUFYX1hPUl9PRkZTRVRfU0VBUkNIOyArK2kpIHsKKwkJCWludCBjdXJyID0gbmV4dCAtIGk7CisKKwkJCWlmIChjdXJyIDwgMCkKKwkJCQlicmVhazsKKworCQkJdGVzdF94b3IgPSBld2FoX3Bvb2xfbmV3KCk7CisJCQlld2FoX3hvcih3cml0ZXIuc2VsZWN0ZWRbY3Vycl0uYml0bWFwLCBzdG9yZWQtPmJpdG1hcCwgdGVzdF94b3IpOworCisJCQlpZiAodGVzdF94b3ItPmJ1ZmZlcl9zaXplIDwgYmVzdF9iaXRtYXAtPmJ1ZmZlcl9zaXplKSB7CisJCQkJaWYgKGJlc3RfYml0bWFwICE9IHN0b3JlZC0+Yml0bWFwKQorCQkJCQlld2FoX3Bvb2xfZnJlZShiZXN0X2JpdG1hcCk7CisKKwkJCQliZXN0X2JpdG1hcCA9IHRlc3RfeG9yOworCQkJCWJlc3Rfb2Zmc2V0ID0gaTsKKwkJCX0gZWxzZSB7CisJCQkJZXdhaF9wb29sX2ZyZWUodGVzdF94b3IpOworCQkJfQorCQl9CisKKwkJc3RvcmVkLT54b3Jfb2Zmc2V0ID0gYmVzdF9vZmZzZXQ7CisJCXN0b3JlZC0+d3JpdGVfYXMgPSBiZXN0X2JpdG1hcDsKKworCQluZXh0Kys7CisJfQorfQorCit2b2lkIGJpdG1hcF93cml0ZXJfYnVpbGQoc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjaykKK3sKKwlzdGF0aWMgY29uc3QgZG91YmxlIFJFVVNFX0JJVE1BUF9USFJFU0hPTEQgPSAwLjI7CisKKwlpbnQgaSwgcmV1c2VfYWZ0ZXIsIG5lZWRfcmVzZXQ7CisJc3RydWN0IGJpdG1hcCAqYmFzZSA9IGJpdG1hcF9uZXcoKTsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKworCXdyaXRlci5iaXRtYXBzID0ga2hfaW5pdF9zaGExKCk7CisJd3JpdGVyLnRvX3BhY2sgPSB0b19wYWNrOworCisJaWYgKHdyaXRlci5zaG93X3Byb2dyZXNzKQorCQl3cml0ZXIucHJvZ3Jlc3MgPSBzdGFydF9wcm9ncmVzcygiQnVpbGRpbmcgYml0bWFwcyIsIHdyaXRlci5zZWxlY3RlZF9ucik7CisKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisJcmV2cy50YWdfb2JqZWN0cyA9IDE7CisJcmV2cy50cmVlX29iamVjdHMgPSAxOworCXJldnMuYmxvYl9vYmplY3RzID0gMTsKKwlyZXZzLm5vX3dhbGsgPSAwOworCisJcmV2cy5pbmNsdWRlX2NoZWNrID0gc2hvdWxkX2luY2x1ZGU7CisJcmVzZXRfcmV2aXNpb25fd2FsaygpOworCisJcmV1c2VfYWZ0ZXIgPSB3cml0ZXIuc2VsZWN0ZWRfbnIgKiBSRVVTRV9CSVRNQVBfVEhSRVNIT0xEOworCW5lZWRfcmVzZXQgPSAwOworCisJZm9yIChpID0gd3JpdGVyLnNlbGVjdGVkX25yIC0gMTsgaSA+PSAwOyAtLWkpIHsKKwkJc3RydWN0IGJpdG1hcHBlZF9jb21taXQgKnN0b3JlZDsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCisJCWtoaXRlcl90IGhhc2hfcG9zOworCQlpbnQgaGFzaF9yZXQ7CisKKwkJc3RvcmVkID0gJndyaXRlci5zZWxlY3RlZFtpXTsKKwkJb2JqZWN0ID0gKHN0cnVjdCBvYmplY3QgKilzdG9yZWQtPmNvbW1pdDsKKworCQlpZiAoc3RvcmVkLT5iaXRtYXAgPT0gTlVMTCkgeworCQkJaWYgKGkgPCB3cml0ZXIuc2VsZWN0ZWRfbnIgLSAxICYmCisJCQkgICAgKG5lZWRfcmVzZXQgfHwKKwkJCSAgICAgIWluX21lcmdlX2Jhc2VzKHdyaXRlci5zZWxlY3RlZFtpICsgMV0uY29tbWl0LAorCQkJCQkgICAgIHN0b3JlZC0+Y29tbWl0KSkpIHsKKwkJCSAgICBiaXRtYXBfcmVzZXQoYmFzZSk7CisJCQkgICAgcmVzZXRfYWxsX3NlZW4oKTsKKwkJCX0KKworCQkJYWRkX3BlbmRpbmdfb2JqZWN0KCZyZXZzLCBvYmplY3QsICIiKTsKKwkJCXJldnMuaW5jbHVkZV9jaGVja19kYXRhID0gYmFzZTsKKworCQkJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2cykpCisJCQkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCisJCQl0cmF2ZXJzZV9jb21taXRfbGlzdCgmcmV2cywgc2hvd19jb21taXQsIHNob3dfb2JqZWN0LCBiYXNlKTsKKworCQkJcmV2cy5wZW5kaW5nLm5yID0gMDsKKwkJCXJldnMucGVuZGluZy5hbGxvYyA9IDA7CisJCQlyZXZzLnBlbmRpbmcub2JqZWN0cyA9IE5VTEw7CisKKwkJCXN0b3JlZC0+Yml0bWFwID0gYml0bWFwX3RvX2V3YWgoYmFzZSk7CisJCQluZWVkX3Jlc2V0ID0gMDsKKwkJfSBlbHNlCisJCQluZWVkX3Jlc2V0ID0gMTsKKworCQlpZiAoaSA+PSByZXVzZV9hZnRlcikKKwkJCXN0b3JlZC0+ZmxhZ3MgfD0gQklUTUFQX0ZMQUdfUkVVU0U7CisKKwkJaGFzaF9wb3MgPSBraF9wdXRfc2hhMSh3cml0ZXIuYml0bWFwcywgb2JqZWN0LT5zaGExLCAmaGFzaF9yZXQpOworCQlpZiAoaGFzaF9yZXQgPT0gMCkKKwkJCWRpZSgiRHVwbGljYXRlIGVudHJ5IHdoZW4gd3JpdGluZyBpbmRleDogJXMiLAorCQkJICAgIHNoYTFfdG9faGV4KG9iamVjdC0+c2hhMSkpOworCisJCWtoX3ZhbHVlKHdyaXRlci5iaXRtYXBzLCBoYXNoX3BvcykgPSBzdG9yZWQ7CisJCWRpc3BsYXlfcHJvZ3Jlc3Mod3JpdGVyLnByb2dyZXNzLCB3cml0ZXIuc2VsZWN0ZWRfbnIgLSBpKTsKKwl9CisKKwliaXRtYXBfZnJlZShiYXNlKTsKKwlzdG9wX3Byb2dyZXNzKCZ3cml0ZXIucHJvZ3Jlc3MpOworCisJY29tcHV0ZV94b3Jfb2Zmc2V0cygpOworfQorCisvKioKKyAqIFNlbGVjdCB0aGUgY29tbWl0cyB0aGF0IHdpbGwgYmUgYml0bWFwcGVkCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG5leHRfY29tbWl0X2luZGV4KHVuc2lnbmVkIGludCBpZHgpCit7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBNSU5fQ09NTUlUUyA9IDEwMDsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IE1BWF9DT01NSVRTID0gNTAwMDsKKworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgTVVTVF9SRUdJT04gPSAxMDA7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBNSU5fUkVHSU9OID0gMjAwMDA7CisKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBuZXh0OworCisJaWYgKGlkeCA8PSBNVVNUX1JFR0lPTikKKwkJcmV0dXJuIDA7CisKKwlpZiAoaWR4IDw9IE1JTl9SRUdJT04pIHsKKwkJb2Zmc2V0ID0gaWR4IC0gTVVTVF9SRUdJT047CisJCXJldHVybiAob2Zmc2V0IDwgTUlOX0NPTU1JVFMpID8gb2Zmc2V0IDogTUlOX0NPTU1JVFM7CisJfQorCisJb2Zmc2V0ID0gaWR4IC0gTUlOX1JFR0lPTjsKKwluZXh0ID0gKG9mZnNldCA8IE1BWF9DT01NSVRTKSA/IG9mZnNldCA6IE1BWF9DT01NSVRTOworCisJcmV0dXJuIChuZXh0ID4gTUlOX0NPTU1JVFMpID8gbmV4dCA6IE1JTl9DT01NSVRTOworfQorCitzdGF0aWMgaW50IGRhdGVfY29tcGFyZShjb25zdCB2b2lkICpfYSwgY29uc3Qgdm9pZCAqX2IpCit7CisJc3RydWN0IGNvbW1pdCAqYSA9ICooc3RydWN0IGNvbW1pdCAqKilfYTsKKwlzdHJ1Y3QgY29tbWl0ICpiID0gKihzdHJ1Y3QgY29tbWl0ICoqKV9iOworCXJldHVybiAobG9uZyliLT5kYXRlIC0gKGxvbmcpYS0+ZGF0ZTsKK30KKwordm9pZCBiaXRtYXBfd3JpdGVyX3JldXNlX2JpdG1hcHMoc3RydWN0IHBhY2tpbmdfZGF0YSAqdG9fcGFjaykKK3sKKwlpZiAocHJlcGFyZV9iaXRtYXBfZ2l0KCkgPCAwKQorCQlyZXR1cm47CisKKwl3cml0ZXIucmV1c2VkID0ga2hfaW5pdF9zaGExKCk7CisJcmVidWlsZF9leGlzdGluZ19iaXRtYXBzKHRvX3BhY2ssIHdyaXRlci5yZXVzZWQsIHdyaXRlci5zaG93X3Byb2dyZXNzKTsKK30KKworc3RhdGljIHN0cnVjdCBld2FoX2JpdG1hcCAqZmluZF9yZXVzZWRfYml0bWFwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJa2hpdGVyX3QgaGFzaF9wb3M7CisKKwlpZiAoIXdyaXRlci5yZXVzZWQpCisJCXJldHVybiBOVUxMOworCisJaGFzaF9wb3MgPSBraF9nZXRfc2hhMSh3cml0ZXIucmV1c2VkLCBzaGExKTsKKwlpZiAoaGFzaF9wb3MgPj0ga2hfZW5kKHdyaXRlci5yZXVzZWQpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBraF92YWx1ZSh3cml0ZXIucmV1c2VkLCBoYXNoX3Bvcyk7Cit9CisKK3ZvaWQgYml0bWFwX3dyaXRlcl9zZWxlY3RfY29tbWl0cyhzdHJ1Y3QgY29tbWl0ICoqaW5kZXhlZF9jb21taXRzLAorCQkJCSAgdW5zaWduZWQgaW50IGluZGV4ZWRfY29tbWl0c19uciwKKwkJCQkgIGludCBtYXhfYml0bWFwcykKK3sKKwl1bnNpZ25lZCBpbnQgaSA9IDAsIGosIG5leHQ7CisKKwlxc29ydChpbmRleGVkX2NvbW1pdHMsIGluZGV4ZWRfY29tbWl0c19uciwgc2l6ZW9mKGluZGV4ZWRfY29tbWl0c1swXSksCisJICAgICAgZGF0ZV9jb21wYXJlKTsKKworCWlmICh3cml0ZXIuc2hvd19wcm9ncmVzcykKKwkJd3JpdGVyLnByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoIlNlbGVjdGluZyBiaXRtYXAgY29tbWl0cyIsIDApOworCisJaWYgKGluZGV4ZWRfY29tbWl0c19uciA8IDEwMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgaW5kZXhlZF9jb21taXRzX25yOyArK2kpCisJCQlwdXNoX2JpdG1hcHBlZF9jb21taXQoaW5kZXhlZF9jb21taXRzW2ldLCBOVUxMKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoOzspIHsKKwkJc3RydWN0IGV3YWhfYml0bWFwICpyZXVzZWRfYml0bWFwID0gTlVMTDsKKwkJc3RydWN0IGNvbW1pdCAqY2hvc2VuID0gTlVMTDsKKworCQluZXh0ID0gbmV4dF9jb21taXRfaW5kZXgoaSk7CisKKwkJaWYgKGkgKyBuZXh0ID49IGluZGV4ZWRfY29tbWl0c19ucikKKwkJCWJyZWFrOworCisJCWlmIChtYXhfYml0bWFwcyA+IDAgJiYgd3JpdGVyLnNlbGVjdGVkX25yID49IG1heF9iaXRtYXBzKSB7CisJCQl3cml0ZXIuc2VsZWN0ZWRfbnIgPSBtYXhfYml0bWFwczsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKG5leHQgPT0gMCkgeworCQkJY2hvc2VuID0gaW5kZXhlZF9jb21taXRzW2ldOworCQkJcmV1c2VkX2JpdG1hcCA9IGZpbmRfcmV1c2VkX2JpdG1hcChjaG9zZW4tPm9iamVjdC5zaGExKTsKKwkJfSBlbHNlIHsKKwkJCWNob3NlbiA9IGluZGV4ZWRfY29tbWl0c1tpICsgbmV4dF07CisKKwkJCWZvciAoaiA9IDA7IGogPD0gbmV4dDsgKytqKSB7CisJCQkJc3RydWN0IGNvbW1pdCAqY20gPSBpbmRleGVkX2NvbW1pdHNbaSArIGpdOworCisJCQkJcmV1c2VkX2JpdG1hcCA9IGZpbmRfcmV1c2VkX2JpdG1hcChjbS0+b2JqZWN0LnNoYTEpOworCQkJCWlmIChyZXVzZWRfYml0bWFwIHx8IChjbS0+b2JqZWN0LmZsYWdzICYgTkVFRFNfQklUTUFQKSAhPSAwKSB7CisJCQkJCWNob3NlbiA9IGNtOworCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlpZiAoY20tPnBhcmVudHMgJiYgY20tPnBhcmVudHMtPm5leHQpCisJCQkJCWNob3NlbiA9IGNtOworCQkJfQorCQl9CisKKwkJcHVzaF9iaXRtYXBwZWRfY29tbWl0KGNob3NlbiwgcmV1c2VkX2JpdG1hcCk7CisKKwkJaSArPSBuZXh0ICsgMTsKKwkJZGlzcGxheV9wcm9ncmVzcyh3cml0ZXIucHJvZ3Jlc3MsIGkpOworCX0KKworCXN0b3BfcHJvZ3Jlc3MoJndyaXRlci5wcm9ncmVzcyk7Cit9CisKKworc3RhdGljIGludCBzaGExd3JpdGVfZXdhaF9oZWxwZXIodm9pZCAqZiwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCS8qIHNoYTF3cml0ZSB3aWxsIGRpZSBvbiBlcnJvciAqLworCXNoYTF3cml0ZShmLCBidWYsIGxlbik7CisJcmV0dXJuIGxlbjsKK30KKworLyoqCisgKiBXcml0ZSB0aGUgYml0bWFwIGluZGV4IHRvIGRpc2sKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGR1bXBfYml0bWFwKHN0cnVjdCBzaGExZmlsZSAqZiwgc3RydWN0IGV3YWhfYml0bWFwICpiaXRtYXApCit7CisJaWYgKGV3YWhfc2VyaWFsaXplX3RvKGJpdG1hcCwgc2hhMXdyaXRlX2V3YWhfaGVscGVyLCBmKSA8IDApCisJCWRpZSgiRmFpbGVkIHRvIHdyaXRlIGJpdG1hcCBpbmRleCIpOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMV9hY2Nlc3Moc2l6ZV90IHBvcywgdm9pZCAqdGFibGUpCit7CisJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaW5kZXggPSB0YWJsZTsKKwlyZXR1cm4gaW5kZXhbcG9zXS0+c2hhMTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfc2VsZWN0ZWRfY29tbWl0c192MShzdHJ1Y3Qgc2hhMWZpbGUgKmYsCisJCQkJICAgICAgc3RydWN0IHBhY2tfaWR4X2VudHJ5ICoqaW5kZXgsCisJCQkJICAgICAgdWludDMyX3QgaW5kZXhfbnIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgd3JpdGVyLnNlbGVjdGVkX25yOyArK2kpIHsKKwkJc3RydWN0IGJpdG1hcHBlZF9jb21taXQgKnN0b3JlZCA9ICZ3cml0ZXIuc2VsZWN0ZWRbaV07CisKKwkJaW50IGNvbW1pdF9wb3MgPQorCQkJc2hhMV9wb3Moc3RvcmVkLT5jb21taXQtPm9iamVjdC5zaGExLCBpbmRleCwgaW5kZXhfbnIsIHNoYTFfYWNjZXNzKTsKKworCQlpZiAoY29tbWl0X3BvcyA8IDApCisJCQlkaWUoIkJVRzogdHJ5aW5nIHRvIHdyaXRlIGNvbW1pdCBub3QgaW4gaW5kZXgiKTsKKworCQlzaGExd3JpdGVfYmUzMihmLCBjb21taXRfcG9zKTsKKwkJc2hhMXdyaXRlX3U4KGYsIHN0b3JlZC0+eG9yX29mZnNldCk7CisJCXNoYTF3cml0ZV91OChmLCBzdG9yZWQtPmZsYWdzKTsKKworCQlkdW1wX2JpdG1hcChmLCBzdG9yZWQtPndyaXRlX2FzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2hhc2hfY2FjaGUoc3RydWN0IHNoYTFmaWxlICpmLAorCQkJICAgICBzdHJ1Y3QgcGFja19pZHhfZW50cnkgKippbmRleCwKKwkJCSAgICAgdWludDMyX3QgaW5kZXhfbnIpCit7CisJdWludDMyX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmRleF9ucjsgKytpKSB7CisJCXN0cnVjdCBvYmplY3RfZW50cnkgKmVudHJ5ID0gKHN0cnVjdCBvYmplY3RfZW50cnkgKilpbmRleFtpXTsKKwkJdWludDMyX3QgaGFzaF92YWx1ZSA9IGh0b25sKGVudHJ5LT5oYXNoKTsKKwkJc2hhMXdyaXRlKGYsICZoYXNoX3ZhbHVlLCBzaXplb2YoaGFzaF92YWx1ZSkpOworCX0KK30KKwordm9pZCBiaXRtYXBfd3JpdGVyX3NldF9jaGVja3N1bSh1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWhhc2hjcHkod3JpdGVyLnBhY2tfY2hlY2tzdW0sIHNoYTEpOworfQorCit2b2lkIGJpdG1hcF93cml0ZXJfZmluaXNoKHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKmluZGV4LAorCQkJICB1aW50MzJfdCBpbmRleF9uciwKKwkJCSAgY29uc3QgY2hhciAqZmlsZW5hbWUsCisJCQkgIHVpbnQxNl90IG9wdGlvbnMpCit7CisJc3RhdGljIGNoYXIgdG1wX2ZpbGVbUEFUSF9NQVhdOworCXN0YXRpYyB1aW50MTZfdCBkZWZhdWx0X3ZlcnNpb24gPSAxOworCXN0YXRpYyB1aW50MTZfdCBmbGFncyA9IEJJVE1BUF9PUFRfRlVMTF9EQUc7CisJc3RydWN0IHNoYTFmaWxlICpmOworCisJc3RydWN0IGJpdG1hcF9kaXNrX2hlYWRlciBoZWFkZXI7CisKKwlpbnQgZmQgPSBvZGJfbWtzdGVtcCh0bXBfZmlsZSwgc2l6ZW9mKHRtcF9maWxlKSwgInBhY2svdG1wX2JpdG1hcF9YWFhYWFgiKTsKKworCWlmIChmZCA8IDApCisJCWRpZV9lcnJubygidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIiwgdG1wX2ZpbGUpOworCWYgPSBzaGExZmQoZmQsIHRtcF9maWxlKTsKKworCW1lbWNweShoZWFkZXIubWFnaWMsIEJJVE1BUF9JRFhfU0lHTkFUVVJFLCBzaXplb2YoQklUTUFQX0lEWF9TSUdOQVRVUkUpKTsKKwloZWFkZXIudmVyc2lvbiA9IGh0b25zKGRlZmF1bHRfdmVyc2lvbik7CisJaGVhZGVyLm9wdGlvbnMgPSBodG9ucyhmbGFncyB8IG9wdGlvbnMpOworCWhlYWRlci5lbnRyeV9jb3VudCA9IGh0b25sKHdyaXRlci5zZWxlY3RlZF9ucik7CisJaGFzaGNweShoZWFkZXIuY2hlY2tzdW0sIHdyaXRlci5wYWNrX2NoZWNrc3VtKTsKKworCXNoYTF3cml0ZShmLCAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisJZHVtcF9iaXRtYXAoZiwgd3JpdGVyLmNvbW1pdHMpOworCWR1bXBfYml0bWFwKGYsIHdyaXRlci50cmVlcyk7CisJZHVtcF9iaXRtYXAoZiwgd3JpdGVyLmJsb2JzKTsKKwlkdW1wX2JpdG1hcChmLCB3cml0ZXIudGFncyk7CisJd3JpdGVfc2VsZWN0ZWRfY29tbWl0c192MShmLCBpbmRleCwgaW5kZXhfbnIpOworCisJaWYgKG9wdGlvbnMgJiBCSVRNQVBfT1BUX0hBU0hfQ0FDSEUpCisJCXdyaXRlX2hhc2hfY2FjaGUoZiwgaW5kZXgsIGluZGV4X25yKTsKKworCXNoYTFjbG9zZShmLCBOVUxMLCBDU1VNX0ZTWU5DKTsKKworCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0odG1wX2ZpbGUpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBtYWtlIHRlbXBvcmFyeSBiaXRtYXAgZmlsZSByZWFkYWJsZSIpOworCisJaWYgKHJlbmFtZSh0bXBfZmlsZSwgZmlsZW5hbWUpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byByZW5hbWUgdGVtcG9yYXJ5IGJpdG1hcCBmaWxlIHRvICclcyciLCBmaWxlbmFtZSk7Cit9CmRpZmYgLS1naXQgYS9wYWNrLWJpdG1hcC5jIGIvcGFjay1iaXRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGZjYjM0Ci0tLSAvZGV2L251bGwKKysrIGIvcGFjay1iaXRtYXAuYwpAQCAtMCwwICsxLDEwNzYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAibGlzdC1vYmplY3RzLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInBhY2stYml0bWFwLmgiCisjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorI2luY2x1ZGUgInBhY2stb2JqZWN0cy5oIgorCisvKgorICogQW4gZW50cnkgb24gdGhlIGJpdG1hcCBpbmRleCwgcmVwcmVzZW50aW5nIHRoZSBiaXRtYXAgZm9yIGEgZ2l2ZW4KKyAqIGNvbW1pdC4KKyAqLworc3RydWN0IHN0b3JlZF9iaXRtYXAgeworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IGV3YWhfYml0bWFwICpyb290OworCXN0cnVjdCBzdG9yZWRfYml0bWFwICp4b3I7CisJaW50IGZsYWdzOworfTsKKworLyoKKyAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGJpdG1hcCBpbmRleC4gQnkgZGVzaWduLCByZXBvc2l0b3JpZXMgb25seSBoYXZlCisgKiBhIHNpbmdsZSBiaXRtYXAgaW5kZXggYXZhaWxhYmxlICh0aGUgaW5kZXggZm9yIHRoZSBiaWdnZXN0IHBhY2tmaWxlIGluCisgKiB0aGUgcmVwb3NpdG9yeSksIHNpbmNlIGJpdG1hcCBpbmRleGVzIG5lZWQgZnVsbCBjbG9zdXJlLgorICoKKyAqIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYml0bWFwIGluZGV4IGF2YWlsYWJsZSAoZS5nLiBiZWNhdXNlIG9mIGFsdGVybmF0ZXMpLAorICogdGhlIGFjdGl2ZSBiaXRtYXAgaW5kZXggaXMgdGhlIGxhcmdlc3Qgb25lLgorICovCitzdGF0aWMgc3RydWN0IGJpdG1hcF9pbmRleCB7CisJLyogUGFja2ZpbGUgdG8gd2hpY2ggdGhpcyBiaXRtYXAgaW5kZXggYmVsb25ncyB0byAqLworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrOworCisJLyogcmV2ZXJzZSBpbmRleCBmb3IgdGhlIHBhY2tmaWxlICovCisJc3RydWN0IHBhY2tfcmV2aW5kZXggKnJldmVyc2VfaW5kZXg7CisKKwkvKgorCSAqIE1hcmsgdGhlIGZpcnN0IGByZXVzZV9vYmplY3RzYCBpbiB0aGUgcGFja2ZpbGUgYXMgcmV1c2VkOgorCSAqIHRoZXkgd2lsbCBiZSBzZW50IGFzLWlzIHdpdGhvdXQgdXNpbmcgdGhlbSBmb3IgcmVwYWNraW5nCisJICogY2FsY3VsYXRpb25zCisJICovCisJdWludDMyX3QgcmV1c2Vfb2JqZWN0czsKKworCS8qIG1tYXBwZWQgYnVmZmVyIG9mIHRoZSB3aG9sZSBiaXRtYXAgaW5kZXggKi8KKwl1bnNpZ25lZCBjaGFyICptYXA7CisJc2l6ZV90IG1hcF9zaXplOyAvKiBzaXplIG9mIHRoZSBtbWFwZWQgYnVmZmVyICovCisJc2l6ZV90IG1hcF9wb3M7IC8qIGN1cnJlbnQgcG9zaXRpb24gd2hlbiBsb2FkaW5nIHRoZSBpbmRleCAqLworCisJLyoKKwkgKiBUeXBlIGluZGV4ZXMuCisJICoKKwkgKiBFYWNoIGJpdG1hcCBtYXJrcyB3aGljaCBvYmplY3RzIGluIHRoZSBwYWNrZmlsZSAgYXJlIG9mIHRoZSBnaXZlbgorCSAqIHR5cGUuIFRoaXMgcHJvdmlkZXMgdHlwZSBpbmZvcm1hdGlvbiB3aGVuIHlpZWxkaW5nIHRoZSBvYmplY3RzIGZyb20KKwkgKiB0aGUgcGFja2ZpbGUgZHVyaW5nIGEgd2Fsaywgd2hpY2ggYWxsb3dzIGZvciBiZXR0ZXIgZGVsdGEgYmFzZXMuCisJICovCisJc3RydWN0IGV3YWhfYml0bWFwICpjb21taXRzOworCXN0cnVjdCBld2FoX2JpdG1hcCAqdHJlZXM7CisJc3RydWN0IGV3YWhfYml0bWFwICpibG9iczsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnRhZ3M7CisKKwkvKiBNYXAgZnJvbSBTSEExIC0+IGBzdG9yZWRfYml0bWFwYCBmb3IgYWxsIHRoZSBiaXRtYXBwZWQgY29tbWl0cyAqLworCWtoYXNoX3NoYTEgKmJpdG1hcHM7CisKKwkvKiBOdW1iZXIgb2YgYml0bWFwcGVkIGNvbW1pdHMgKi8KKwl1aW50MzJfdCBlbnRyeV9jb3VudDsKKworCS8qIE5hbWUtaGFzaCBjYWNoZSAob3IgTlVMTCBpZiBub3QgcHJlc2VudCkuICovCisJdWludDMyX3QgKmhhc2hlczsKKworCS8qCisJICogRXh0ZW5kZWQgaW5kZXguCisJICoKKwkgKiBXaGVuIHRyeWluZyB0byBwZXJmb3JtIGJpdG1hcCBvcGVyYXRpb25zIHdpdGggb2JqZWN0cyB0aGF0IGFyZSBub3QKKwkgKiBwYWNrZWQgaW4gYHBhY2tgLCB0aGVzZSBvYmplY3RzIGFyZSBhZGRlZCB0byB0aGlzICJmYWtlIGluZGV4IiBhbmQKKwkgKiBhcmUgYXNzdW1lZCB0byBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgcGFja2ZpbGUgZm9yIGFsbCBvcGVyYXRpb25zCisJICovCisJc3RydWN0IGVpbmRleCB7CisJCXN0cnVjdCBvYmplY3QgKipvYmplY3RzOworCQl1aW50MzJfdCAqaGFzaGVzOworCQl1aW50MzJfdCBjb3VudCwgYWxsb2M7CisJCWtoYXNoX3NoYTFfcG9zICpwb3NpdGlvbnM7CisJfSBleHRfaW5kZXg7CisKKwkvKiBCaXRtYXAgcmVzdWx0IG9mIHRoZSBsYXN0IHBlcmZvcm1lZCB3YWxrICovCisJc3RydWN0IGJpdG1hcCAqcmVzdWx0OworCisJLyogVmVyc2lvbiBvZiB0aGUgYml0bWFwIGluZGV4ICovCisJdW5zaWduZWQgaW50IHZlcnNpb247CisKKwl1bnNpZ25lZCBsb2FkZWQgOiAxOworCit9IGJpdG1hcF9naXQ7CisKK3N0YXRpYyBzdHJ1Y3QgZXdhaF9iaXRtYXAgKmxvb2t1cF9zdG9yZWRfYml0bWFwKHN0cnVjdCBzdG9yZWRfYml0bWFwICpzdCkKK3sKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnBhcmVudDsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmNvbXBvc2VkOworCisJaWYgKHN0LT54b3IgPT0gTlVMTCkKKwkJcmV0dXJuIHN0LT5yb290OworCisJY29tcG9zZWQgPSBld2FoX3Bvb2xfbmV3KCk7CisJcGFyZW50ID0gbG9va3VwX3N0b3JlZF9iaXRtYXAoc3QtPnhvcik7CisJZXdhaF94b3Ioc3QtPnJvb3QsIHBhcmVudCwgY29tcG9zZWQpOworCisJZXdhaF9wb29sX2ZyZWUoc3QtPnJvb3QpOworCXN0LT5yb290ID0gY29tcG9zZWQ7CisJc3QtPnhvciA9IE5VTEw7CisKKwlyZXR1cm4gY29tcG9zZWQ7Cit9CisKKy8qCisgKiBSZWFkIGEgYml0bWFwIGZyb20gdGhlIGN1cnJlbnQgcmVhZCBwb3NpdGlvbiBvbiB0aGUgbW1hcGVkCisgKiBpbmRleCwgYW5kIGluY3JlYXNlIHRoZSByZWFkIHBvc2l0aW9uIGFjY29yZGluZ2x5CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZXdhaF9iaXRtYXAgKnJlYWRfYml0bWFwXzEoc3RydWN0IGJpdG1hcF9pbmRleCAqaW5kZXgpCit7CisJc3RydWN0IGV3YWhfYml0bWFwICpiID0gZXdhaF9wb29sX25ldygpOworCisJaW50IGJpdG1hcF9zaXplID0gZXdhaF9yZWFkX21tYXAoYiwKKwkJaW5kZXgtPm1hcCArIGluZGV4LT5tYXBfcG9zLAorCQlpbmRleC0+bWFwX3NpemUgLSBpbmRleC0+bWFwX3Bvcyk7CisKKwlpZiAoYml0bWFwX3NpemUgPCAwKSB7CisJCWVycm9yKCJGYWlsZWQgdG8gbG9hZCBiaXRtYXAgaW5kZXggKGNvcnJ1cHRlZD8pIik7CisJCWV3YWhfcG9vbF9mcmVlKGIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpbmRleC0+bWFwX3BvcyArPSBiaXRtYXBfc2l6ZTsKKwlyZXR1cm4gYjsKK30KKworc3RhdGljIGludCBsb2FkX2JpdG1hcF9oZWFkZXIoc3RydWN0IGJpdG1hcF9pbmRleCAqaW5kZXgpCit7CisJc3RydWN0IGJpdG1hcF9kaXNrX2hlYWRlciAqaGVhZGVyID0gKHZvaWQgKilpbmRleC0+bWFwOworCisJaWYgKGluZGV4LT5tYXBfc2l6ZSA8IHNpemVvZigqaGVhZGVyKSArIDIwKQorCQlyZXR1cm4gZXJyb3IoIkNvcnJ1cHRlZCBiaXRtYXAgaW5kZXggKG1pc3NpbmcgaGVhZGVyIGRhdGEpIik7CisKKwlpZiAobWVtY21wKGhlYWRlci0+bWFnaWMsIEJJVE1BUF9JRFhfU0lHTkFUVVJFLCBzaXplb2YoQklUTUFQX0lEWF9TSUdOQVRVUkUpKSAhPSAwKQorCQlyZXR1cm4gZXJyb3IoIkNvcnJ1cHRlZCBiaXRtYXAgaW5kZXggZmlsZSAod3JvbmcgaGVhZGVyKSIpOworCisJaW5kZXgtPnZlcnNpb24gPSBudG9ocyhoZWFkZXItPnZlcnNpb24pOworCWlmIChpbmRleC0+dmVyc2lvbiAhPSAxKQorCQlyZXR1cm4gZXJyb3IoIlVuc3VwcG9ydGVkIHZlcnNpb24gZm9yIGJpdG1hcCBpbmRleCBmaWxlICglZCkiLCBpbmRleC0+dmVyc2lvbik7CisKKwkvKiBQYXJzZSBrbm93biBiaXRtYXAgZm9ybWF0IG9wdGlvbnMgKi8KKwl7CisJCXVpbnQzMl90IGZsYWdzID0gbnRvaHMoaGVhZGVyLT5vcHRpb25zKTsKKworCQlpZiAoKGZsYWdzICYgQklUTUFQX09QVF9GVUxMX0RBRykgPT0gMCkKKwkJCXJldHVybiBlcnJvcigiVW5zdXBwb3J0ZWQgb3B0aW9ucyBmb3IgYml0bWFwIGluZGV4IGZpbGUgIgorCQkJCSIoR2l0IHJlcXVpcmVzIEJJVE1BUF9PUFRfRlVMTF9EQUcpIik7CisKKwkJaWYgKGZsYWdzICYgQklUTUFQX09QVF9IQVNIX0NBQ0hFKSB7CisJCQl1bnNpZ25lZCBjaGFyICplbmQgPSBpbmRleC0+bWFwICsgaW5kZXgtPm1hcF9zaXplIC0gMjA7CisJCQlpbmRleC0+aGFzaGVzID0gKCh1aW50MzJfdCAqKWVuZCkgLSBpbmRleC0+cGFjay0+bnVtX29iamVjdHM7CisJCX0KKwl9CisKKwlpbmRleC0+ZW50cnlfY291bnQgPSBudG9obChoZWFkZXItPmVudHJ5X2NvdW50KTsKKwlpbmRleC0+bWFwX3BvcyArPSBzaXplb2YoKmhlYWRlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RvcmVkX2JpdG1hcCAqc3RvcmVfYml0bWFwKHN0cnVjdCBiaXRtYXBfaW5kZXggKmluZGV4LAorCQkJCQkgIHN0cnVjdCBld2FoX2JpdG1hcCAqcm9vdCwKKwkJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCQkgIHN0cnVjdCBzdG9yZWRfYml0bWFwICp4b3Jfd2l0aCwKKwkJCQkJICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0b3JlZF9iaXRtYXAgKnN0b3JlZDsKKwlraGl0ZXJfdCBoYXNoX3BvczsKKwlpbnQgcmV0OworCisJc3RvcmVkID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHN0b3JlZF9iaXRtYXApKTsKKwlzdG9yZWQtPnJvb3QgPSByb290OworCXN0b3JlZC0+eG9yID0geG9yX3dpdGg7CisJc3RvcmVkLT5mbGFncyA9IGZsYWdzOworCWhhc2hjcHkoc3RvcmVkLT5zaGExLCBzaGExKTsKKworCWhhc2hfcG9zID0ga2hfcHV0X3NoYTEoaW5kZXgtPmJpdG1hcHMsIHN0b3JlZC0+c2hhMSwgJnJldCk7CisKKwkvKiBhIDAgcmV0dXJuIGNvZGUgbWVhbnMgdGhlIGluc2VydGlvbiBzdWNjZWVkZWQgd2l0aCBubyBjaGFuZ2VzLAorCSAqIGJlY2F1c2UgdGhlIFNIQTEgYWxyZWFkeSBleGlzdGVkIG9uIHRoZSBtYXAuIHRoaXMgaXMgYmFkLCB0aGVyZQorCSAqIHNob3VsZG4ndCBiZSBkdXBsaWNhdGVkIGNvbW1pdHMgaW4gdGhlIGluZGV4ICovCisJaWYgKHJldCA9PSAwKSB7CisJCWVycm9yKCJEdXBsaWNhdGUgZW50cnkgaW4gYml0bWFwIGluZGV4OiAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJa2hfdmFsdWUoaW5kZXgtPmJpdG1hcHMsIGhhc2hfcG9zKSA9IHN0b3JlZDsKKwlyZXR1cm4gc3RvcmVkOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IHJlYWRfYmUzMihjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCAqcG9zKQoreworCXVpbnQzMl90IHJlc3VsdCA9IGdldF9iZTMyKGJ1ZmZlciArICpwb3MpOworCSgqcG9zKSArPSBzaXplb2YocmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ4X3QgcmVhZF91OChjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHNpemVfdCAqcG9zKQoreworCXJldHVybiBidWZmZXJbKCpwb3MpKytdOworfQorCisjZGVmaW5lIE1BWF9YT1JfT0ZGU0VUIDE2MAorCitzdGF0aWMgaW50IGxvYWRfYml0bWFwX2VudHJpZXNfdjEoc3RydWN0IGJpdG1hcF9pbmRleCAqaW5kZXgpCit7CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qgc3RvcmVkX2JpdG1hcCAqcmVjZW50X2JpdG1hcHNbTUFYX1hPUl9PRkZTRVRdID0geyBOVUxMIH07CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmVudHJ5X2NvdW50OyArK2kpIHsKKwkJaW50IHhvcl9vZmZzZXQsIGZsYWdzOworCQlzdHJ1Y3QgZXdhaF9iaXRtYXAgKmJpdG1hcCA9IE5VTEw7CisJCXN0cnVjdCBzdG9yZWRfYml0bWFwICp4b3JfYml0bWFwID0gTlVMTDsKKwkJdWludDMyX3QgY29tbWl0X2lkeF9wb3M7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7CisKKwkJY29tbWl0X2lkeF9wb3MgPSByZWFkX2JlMzIoaW5kZXgtPm1hcCwgJmluZGV4LT5tYXBfcG9zKTsKKwkJeG9yX29mZnNldCA9IHJlYWRfdTgoaW5kZXgtPm1hcCwgJmluZGV4LT5tYXBfcG9zKTsKKwkJZmxhZ3MgPSByZWFkX3U4KGluZGV4LT5tYXAsICZpbmRleC0+bWFwX3Bvcyk7CisKKwkJc2hhMSA9IG50aF9wYWNrZWRfb2JqZWN0X3NoYTEoaW5kZXgtPnBhY2ssIGNvbW1pdF9pZHhfcG9zKTsKKworCQliaXRtYXAgPSByZWFkX2JpdG1hcF8xKGluZGV4KTsKKwkJaWYgKCFiaXRtYXApCisJCQlyZXR1cm4gLTE7CisKKwkJaWYgKHhvcl9vZmZzZXQgPiBNQVhfWE9SX09GRlNFVCB8fCB4b3Jfb2Zmc2V0ID4gaSkKKwkJCXJldHVybiBlcnJvcigiQ29ycnVwdGVkIGJpdG1hcCBwYWNrIGluZGV4Iik7CisKKwkJaWYgKHhvcl9vZmZzZXQgPiAwKSB7CisJCQl4b3JfYml0bWFwID0gcmVjZW50X2JpdG1hcHNbKGkgLSB4b3Jfb2Zmc2V0KSAlIE1BWF9YT1JfT0ZGU0VUXTsKKworCQkJaWYgKHhvcl9iaXRtYXAgPT0gTlVMTCkKKwkJCQlyZXR1cm4gZXJyb3IoIkludmFsaWQgWE9SIG9mZnNldCBpbiBiaXRtYXAgcGFjayBpbmRleCIpOworCQl9CisKKwkJcmVjZW50X2JpdG1hcHNbaSAlIE1BWF9YT1JfT0ZGU0VUXSA9IHN0b3JlX2JpdG1hcCgKKwkJCWluZGV4LCBiaXRtYXAsIHNoYTEsIHhvcl9iaXRtYXAsIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgKnBhY2tfYml0bWFwX2ZpbGVuYW1lKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCXNpemVfdCBsZW47CisKKwlpZiAoIXN0cmlwX3N1ZmZpeChwLT5wYWNrX25hbWUsICIucGFjayIsICZsZW4pKQorCQlkaWUoIkJVRzogcGFja19uYW1lIGRvZXMgbm90IGVuZCBpbiAucGFjayIpOworCXJldHVybiB4c3RyZm10KCIlLipzLmJpdG1hcCIsIChpbnQpbGVuLCBwLT5wYWNrX25hbWUpOworfQorCitzdGF0aWMgaW50IG9wZW5fcGFja19iaXRtYXBfMShzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja2ZpbGUpCit7CisJaW50IGZkOworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgKmlkeF9uYW1lOworCisJaWYgKG9wZW5fcGFja19pbmRleChwYWNrZmlsZSkpCisJCXJldHVybiAtMTsKKworCWlkeF9uYW1lID0gcGFja19iaXRtYXBfZmlsZW5hbWUocGFja2ZpbGUpOworCWZkID0gZ2l0X29wZW5fbm9hdGltZShpZHhfbmFtZSk7CisJZnJlZShpZHhfbmFtZSk7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZnN0YXQoZmQsICZzdCkpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGJpdG1hcF9naXQucGFjaykgeworCQl3YXJuaW5nKCJpZ25vcmluZyBleHRyYSBiaXRtYXAgZmlsZTogJXMiLCBwYWNrZmlsZS0+cGFja19uYW1lKTsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gLTE7CisJfQorCisJYml0bWFwX2dpdC5wYWNrID0gcGFja2ZpbGU7CisJYml0bWFwX2dpdC5tYXBfc2l6ZSA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJYml0bWFwX2dpdC5tYXAgPSB4bW1hcChOVUxMLCBiaXRtYXBfZ2l0Lm1hcF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJYml0bWFwX2dpdC5tYXBfcG9zID0gMDsKKwljbG9zZShmZCk7CisKKwlpZiAobG9hZF9iaXRtYXBfaGVhZGVyKCZiaXRtYXBfZ2l0KSA8IDApIHsKKwkJbXVubWFwKGJpdG1hcF9naXQubWFwLCBiaXRtYXBfZ2l0Lm1hcF9zaXplKTsKKwkJYml0bWFwX2dpdC5tYXAgPSBOVUxMOworCQliaXRtYXBfZ2l0Lm1hcF9zaXplID0gMDsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvYWRfcGFja19iaXRtYXAodm9pZCkKK3sKKwlhc3NlcnQoYml0bWFwX2dpdC5tYXAgJiYgIWJpdG1hcF9naXQubG9hZGVkKTsKKworCWJpdG1hcF9naXQuYml0bWFwcyA9IGtoX2luaXRfc2hhMSgpOworCWJpdG1hcF9naXQuZXh0X2luZGV4LnBvc2l0aW9ucyA9IGtoX2luaXRfc2hhMV9wb3MoKTsKKwliaXRtYXBfZ2l0LnJldmVyc2VfaW5kZXggPSByZXZpbmRleF9mb3JfcGFjayhiaXRtYXBfZ2l0LnBhY2spOworCisJaWYgKCEoYml0bWFwX2dpdC5jb21taXRzID0gcmVhZF9iaXRtYXBfMSgmYml0bWFwX2dpdCkpIHx8CisJCSEoYml0bWFwX2dpdC50cmVlcyA9IHJlYWRfYml0bWFwXzEoJmJpdG1hcF9naXQpKSB8fAorCQkhKGJpdG1hcF9naXQuYmxvYnMgPSByZWFkX2JpdG1hcF8xKCZiaXRtYXBfZ2l0KSkgfHwKKwkJIShiaXRtYXBfZ2l0LnRhZ3MgPSByZWFkX2JpdG1hcF8xKCZiaXRtYXBfZ2l0KSkpCisJCWdvdG8gZmFpbGVkOworCisJaWYgKGxvYWRfYml0bWFwX2VudHJpZXNfdjEoJmJpdG1hcF9naXQpIDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwliaXRtYXBfZ2l0LmxvYWRlZCA9IDE7CisJcmV0dXJuIDA7CisKK2ZhaWxlZDoKKwltdW5tYXAoYml0bWFwX2dpdC5tYXAsIGJpdG1hcF9naXQubWFwX3NpemUpOworCWJpdG1hcF9naXQubWFwID0gTlVMTDsKKwliaXRtYXBfZ2l0Lm1hcF9zaXplID0gMDsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9wYWNrX2JpdG1hcCh2b2lkKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWludCByZXQgPSAtMTsKKworCWFzc2VydCghYml0bWFwX2dpdC5tYXAgJiYgIWJpdG1hcF9naXQubG9hZGVkKTsKKworCXByZXBhcmVfcGFja2VkX2dpdCgpOworCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChvcGVuX3BhY2tfYml0bWFwXzEocCkgPT0gMCkKKwkJCXJldCA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IHByZXBhcmVfYml0bWFwX2dpdCh2b2lkKQoreworCWlmIChiaXRtYXBfZ2l0LmxvYWRlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIW9wZW5fcGFja19iaXRtYXAoKSkKKwkJcmV0dXJuIGxvYWRfcGFja19iaXRtYXAoKTsKKworCXJldHVybiAtMTsKK30KKworc3RydWN0IGluY2x1ZGVfZGF0YSB7CisJc3RydWN0IGJpdG1hcCAqYmFzZTsKKwlzdHJ1Y3QgYml0bWFwICpzZWVuOworfTsKKworc3RhdGljIGlubGluZSBpbnQgYml0bWFwX3Bvc2l0aW9uX2V4dGVuZGVkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJa2hhc2hfc2hhMV9wb3MgKnBvc2l0aW9ucyA9IGJpdG1hcF9naXQuZXh0X2luZGV4LnBvc2l0aW9uczsKKwlraGl0ZXJfdCBwb3MgPSBraF9nZXRfc2hhMV9wb3MocG9zaXRpb25zLCBzaGExKTsKKworCWlmIChwb3MgPCBraF9lbmQocG9zaXRpb25zKSkgeworCQlpbnQgYml0bWFwX3BvcyA9IGtoX3ZhbHVlKHBvc2l0aW9ucywgcG9zKTsKKwkJcmV0dXJuIGJpdG1hcF9wb3MgKyBiaXRtYXBfZ2l0LnBhY2stPm51bV9vYmplY3RzOworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYml0bWFwX3Bvc2l0aW9uX3BhY2tmaWxlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJb2ZmX3Qgb2Zmc2V0ID0gZmluZF9wYWNrX2VudHJ5X29uZShzaGExLCBiaXRtYXBfZ2l0LnBhY2spOworCWlmICghb2Zmc2V0KQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gZmluZF9yZXZpbmRleF9wb3NpdGlvbihiaXRtYXBfZ2l0LnJldmVyc2VfaW5kZXgsIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgYml0bWFwX3Bvc2l0aW9uKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IHBvcyA9IGJpdG1hcF9wb3NpdGlvbl9wYWNrZmlsZShzaGExKTsKKwlyZXR1cm4gKHBvcyA+PSAwKSA/IHBvcyA6IGJpdG1hcF9wb3NpdGlvbl9leHRlbmRlZChzaGExKTsKK30KKworc3RhdGljIGludCBleHRfaW5kZXhfYWRkX29iamVjdChzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGVpbmRleCAqZWluZGV4ID0gJmJpdG1hcF9naXQuZXh0X2luZGV4OworCisJa2hpdGVyX3QgaGFzaF9wb3M7CisJaW50IGhhc2hfcmV0OworCWludCBiaXRtYXBfcG9zOworCisJaGFzaF9wb3MgPSBraF9wdXRfc2hhMV9wb3MoZWluZGV4LT5wb3NpdGlvbnMsIG9iamVjdC0+c2hhMSwgJmhhc2hfcmV0KTsKKwlpZiAoaGFzaF9yZXQgPiAwKSB7CisJCWlmIChlaW5kZXgtPmNvdW50ID49IGVpbmRleC0+YWxsb2MpIHsKKwkJCWVpbmRleC0+YWxsb2MgPSAoZWluZGV4LT5hbGxvYyArIDE2KSAqIDMgLyAyOworCQkJUkVBTExPQ19BUlJBWShlaW5kZXgtPm9iamVjdHMsIGVpbmRleC0+YWxsb2MpOworCQkJUkVBTExPQ19BUlJBWShlaW5kZXgtPmhhc2hlcywgZWluZGV4LT5hbGxvYyk7CisJCX0KKworCQliaXRtYXBfcG9zID0gZWluZGV4LT5jb3VudDsKKwkJZWluZGV4LT5vYmplY3RzW2VpbmRleC0+Y291bnRdID0gb2JqZWN0OworCQllaW5kZXgtPmhhc2hlc1tlaW5kZXgtPmNvdW50XSA9IHBhY2tfbmFtZV9oYXNoKG5hbWUpOworCQlraF92YWx1ZShlaW5kZXgtPnBvc2l0aW9ucywgaGFzaF9wb3MpID0gYml0bWFwX3BvczsKKwkJZWluZGV4LT5jb3VudCsrOworCX0gZWxzZSB7CisJCWJpdG1hcF9wb3MgPSBraF92YWx1ZShlaW5kZXgtPnBvc2l0aW9ucywgaGFzaF9wb3MpOworCX0KKworCXJldHVybiBiaXRtYXBfcG9zICsgYml0bWFwX2dpdC5wYWNrLT5udW1fb2JqZWN0czsKK30KKworc3RhdGljIHZvaWQgc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0LCBjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJY29uc3QgY2hhciAqbGFzdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYml0bWFwICpiYXNlID0gZGF0YTsKKwlpbnQgYml0bWFwX3BvczsKKworCWJpdG1hcF9wb3MgPSBiaXRtYXBfcG9zaXRpb24ob2JqZWN0LT5zaGExKTsKKworCWlmIChiaXRtYXBfcG9zIDwgMCkgeworCQljaGFyICpuYW1lID0gcGF0aF9uYW1lKHBhdGgsIGxhc3QpOworCQliaXRtYXBfcG9zID0gZXh0X2luZGV4X2FkZF9vYmplY3Qob2JqZWN0LCBuYW1lKTsKKwkJZnJlZShuYW1lKTsKKwl9CisKKwliaXRtYXBfc2V0KGJhc2UsIGJpdG1hcF9wb3MpOworfQorCitzdGF0aWMgdm9pZCBzaG93X2NvbW1pdChzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKmRhdGEpCit7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3RvX2luY2x1ZGVfc2V0KHN0cnVjdCBpbmNsdWRlX2RhdGEgKmRhdGEsCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgICAgaW50IGJpdG1hcF9wb3MpCit7CisJa2hpdGVyX3QgaGFzaF9wb3M7CisKKwlpZiAoZGF0YS0+c2VlbiAmJiBiaXRtYXBfZ2V0KGRhdGEtPnNlZW4sIGJpdG1hcF9wb3MpKQorCQlyZXR1cm4gMDsKKworCWlmIChiaXRtYXBfZ2V0KGRhdGEtPmJhc2UsIGJpdG1hcF9wb3MpKQorCQlyZXR1cm4gMDsKKworCWhhc2hfcG9zID0ga2hfZ2V0X3NoYTEoYml0bWFwX2dpdC5iaXRtYXBzLCBzaGExKTsKKwlpZiAoaGFzaF9wb3MgPCBraF9lbmQoYml0bWFwX2dpdC5iaXRtYXBzKSkgeworCQlzdHJ1Y3Qgc3RvcmVkX2JpdG1hcCAqc3QgPSBraF92YWx1ZShiaXRtYXBfZ2l0LmJpdG1hcHMsIGhhc2hfcG9zKTsKKwkJYml0bWFwX29yX2V3YWgoZGF0YS0+YmFzZSwgbG9va3VwX3N0b3JlZF9iaXRtYXAoc3QpKTsKKwkJcmV0dXJuIDA7CisJfQorCisJYml0bWFwX3NldChkYXRhLT5iYXNlLCBiaXRtYXBfcG9zKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBzaG91bGRfaW5jbHVkZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBpbmNsdWRlX2RhdGEgKmRhdGEgPSBfZGF0YTsKKwlpbnQgYml0bWFwX3BvczsKKworCWJpdG1hcF9wb3MgPSBiaXRtYXBfcG9zaXRpb24oY29tbWl0LT5vYmplY3Quc2hhMSk7CisJaWYgKGJpdG1hcF9wb3MgPCAwKQorCQliaXRtYXBfcG9zID0gZXh0X2luZGV4X2FkZF9vYmplY3QoKHN0cnVjdCBvYmplY3QgKiljb21taXQsIE5VTEwpOworCisJaWYgKCFhZGRfdG9faW5jbHVkZV9zZXQoZGF0YSwgY29tbWl0LT5vYmplY3Quc2hhMSwgYml0bWFwX3BvcykpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisKKwkJd2hpbGUgKHBhcmVudCkgeworCQkJcGFyZW50LT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKwkJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgc3RydWN0IGJpdG1hcCAqZmluZF9vYmplY3RzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkgICBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKnJvb3RzLAorCQkJCSAgIHN0cnVjdCBiaXRtYXAgKnNlZW4pCit7CisJc3RydWN0IGJpdG1hcCAqYmFzZSA9IE5VTEw7CisJaW50IG5lZWRzX3dhbGsgPSAwOworCisJc3RydWN0IG9iamVjdF9saXN0ICpub3RfbWFwcGVkID0gTlVMTDsKKworCS8qCisJICogR28gdGhyb3VnaCBhbGwgdGhlIHJvb3RzIGZvciB0aGUgd2Fsay4gVGhlIG9uZXMgdGhhdCBoYXZlIGJpdG1hcHMKKwkgKiBvbiB0aGUgYml0bWFwIGluZGV4IHdpbGwgYmUgYG9yYGVkIHRvZ2V0aGVyIHRvIGZvcm0gYW4gaW5pdGlhbAorCSAqIGdsb2JhbCByZWFjaGFiaWxpdHkgYW5hbHlzaXMuCisJICoKKwkgKiBUaGUgb25lcyB3aXRob3V0IGJpdG1hcHMgaW4gdGhlIGluZGV4IHdpbGwgYmUgc3RvcmVkIGluIHRoZQorCSAqIGBub3RfbWFwcGVkX2xpc3RgIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuCisJICovCisJd2hpbGUgKHJvb3RzKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iamVjdCA9IHJvb3RzLT5pdGVtOworCQlyb290cyA9IHJvb3RzLT5uZXh0OworCisJCWlmIChvYmplY3QtPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQkJa2hpdGVyX3QgcG9zID0ga2hfZ2V0X3NoYTEoYml0bWFwX2dpdC5iaXRtYXBzLCBvYmplY3QtPnNoYTEpOworCisJCQlpZiAocG9zIDwga2hfZW5kKGJpdG1hcF9naXQuYml0bWFwcykpIHsKKwkJCQlzdHJ1Y3Qgc3RvcmVkX2JpdG1hcCAqc3QgPSBraF92YWx1ZShiaXRtYXBfZ2l0LmJpdG1hcHMsIHBvcyk7CisJCQkJc3RydWN0IGV3YWhfYml0bWFwICpvcl93aXRoID0gbG9va3VwX3N0b3JlZF9iaXRtYXAoc3QpOworCisJCQkJaWYgKGJhc2UgPT0gTlVMTCkKKwkJCQkJYmFzZSA9IGV3YWhfdG9fYml0bWFwKG9yX3dpdGgpOworCQkJCWVsc2UKKwkJCQkJYml0bWFwX29yX2V3YWgoYmFzZSwgb3Jfd2l0aCk7CisKKwkJCQlvYmplY3QtPmZsYWdzIHw9IFNFRU47CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlvYmplY3RfbGlzdF9pbnNlcnQob2JqZWN0LCAmbm90X21hcHBlZCk7CisJfQorCisJLyoKKwkgKiBCZXN0IGNhc2Ugc2NlbmFyaW86IFdlIGZvdW5kIGJpdG1hcHMgZm9yIGFsbCB0aGUgcm9vdHMsCisJICogc28gdGhlIHJlc3VsdGluZyBgb3JgIGJpdG1hcCBoYXMgdGhlIGZ1bGwgcmVhY2hhYmlsaXR5IGFuYWx5c2lzCisJICovCisJaWYgKG5vdF9tYXBwZWQgPT0gTlVMTCkKKwkJcmV0dXJuIGJhc2U7CisKKwlyb290cyA9IG5vdF9tYXBwZWQ7CisKKwkvKgorCSAqIExldCdzIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIHJvb3RzIHRoYXQgZG9uJ3QgaGF2ZSBiaXRtYXBzIHRvCisJICogY2hlY2sgaWYgd2UgY2FuIGRldGVybWluZSB0aGVtIHRvIGJlIHJlYWNoYWJsZSBmcm9tIHRoZSBleGlzdGluZworCSAqIGdsb2JhbCBiaXRtYXAuCisJICoKKwkgKiBJZiB3ZSBjYW5ub3QgZmluZCB0aGVtIGluIHRoZSBleGlzdGluZyBnbG9iYWwgYml0bWFwLCB3ZSdsbCBuZWVkCisJICogdG8gcHVzaCB0aGVtIHRvIGFuIGFjdHVhbCB3YWxrIGFuZCBydW4gaXQgdW50aWwgd2UgY2FuIGNvbmZpcm0KKwkgKiB0aGV5IGFyZSByZWFjaGFibGUKKwkgKi8KKwl3aGlsZSAocm9vdHMpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcm9vdHMtPml0ZW07CisJCWludCBwb3M7CisKKwkJcm9vdHMgPSByb290cy0+bmV4dDsKKwkJcG9zID0gYml0bWFwX3Bvc2l0aW9uKG9iamVjdC0+c2hhMSk7CisKKwkJaWYgKHBvcyA8IDAgfHwgYmFzZSA9PSBOVUxMIHx8ICFiaXRtYXBfZ2V0KGJhc2UsIHBvcykpIHsKKwkJCW9iamVjdC0+ZmxhZ3MgJj0gflVOSU5URVJFU1RJTkc7CisJCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCAiIik7CisJCQluZWVkc193YWxrID0gMTsKKwkJfSBlbHNlIHsKKwkJCW9iamVjdC0+ZmxhZ3MgfD0gU0VFTjsKKwkJfQorCX0KKworCWlmIChuZWVkc193YWxrKSB7CisJCXN0cnVjdCBpbmNsdWRlX2RhdGEgaW5jZGF0YTsKKworCQlpZiAoYmFzZSA9PSBOVUxMKQorCQkJYmFzZSA9IGJpdG1hcF9uZXcoKTsKKworCQlpbmNkYXRhLmJhc2UgPSBiYXNlOworCQlpbmNkYXRhLnNlZW4gPSBzZWVuOworCisJCXJldnMtPmluY2x1ZGVfY2hlY2sgPSBzaG91bGRfaW5jbHVkZTsKKwkJcmV2cy0+aW5jbHVkZV9jaGVja19kYXRhID0gJmluY2RhdGE7CisKKwkJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhyZXZzKSkKKwkJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKworCQl0cmF2ZXJzZV9jb21taXRfbGlzdChyZXZzLCBzaG93X2NvbW1pdCwgc2hvd19vYmplY3QsIGJhc2UpOworCX0KKworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgdm9pZCBzaG93X2V4dGVuZGVkX29iamVjdHMoc3RydWN0IGJpdG1hcCAqb2JqZWN0cywKKwkJCQkgIHNob3dfcmVhY2hhYmxlX2ZuIHNob3dfcmVhY2gpCit7CisJc3RydWN0IGVpbmRleCAqZWluZGV4ID0gJmJpdG1hcF9naXQuZXh0X2luZGV4OworCXVpbnQzMl90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZWluZGV4LT5jb3VudDsgKytpKSB7CisJCXN0cnVjdCBvYmplY3QgKm9iajsKKworCQlpZiAoIWJpdG1hcF9nZXQob2JqZWN0cywgYml0bWFwX2dpdC5wYWNrLT5udW1fb2JqZWN0cyArIGkpKQorCQkJY29udGludWU7CisKKwkJb2JqID0gZWluZGV4LT5vYmplY3RzW2ldOworCQlzaG93X3JlYWNoKG9iai0+c2hhMSwgb2JqLT50eXBlLCAwLCBlaW5kZXgtPmhhc2hlc1tpXSwgTlVMTCwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzaG93X29iamVjdHNfZm9yX3R5cGUoCisJc3RydWN0IGJpdG1hcCAqb2JqZWN0cywKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnR5cGVfZmlsdGVyLAorCWVudW0gb2JqZWN0X3R5cGUgb2JqZWN0X3R5cGUsCisJc2hvd19yZWFjaGFibGVfZm4gc2hvd19yZWFjaCkKK3sKKwlzaXplX3QgcG9zID0gMCwgaSA9IDA7CisJdWludDMyX3Qgb2Zmc2V0OworCisJc3RydWN0IGV3YWhfaXRlcmF0b3IgaXQ7CisJZXdvcmRfdCBmaWx0ZXI7CisKKwlpZiAoYml0bWFwX2dpdC5yZXVzZV9vYmplY3RzID09IGJpdG1hcF9naXQucGFjay0+bnVtX29iamVjdHMpCisJCXJldHVybjsKKworCWV3YWhfaXRlcmF0b3JfaW5pdCgmaXQsIHR5cGVfZmlsdGVyKTsKKworCXdoaWxlIChpIDwgb2JqZWN0cy0+d29yZF9hbGxvYyAmJiBld2FoX2l0ZXJhdG9yX25leHQoJmZpbHRlciwgJml0KSkgeworCQlld29yZF90IHdvcmQgPSBvYmplY3RzLT53b3Jkc1tpXSAmIGZpbHRlcjsKKworCQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IEJJVFNfSU5fRVdPUkQ7ICsrb2Zmc2V0KSB7CisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCQkJc3RydWN0IHJldmluZGV4X2VudHJ5ICplbnRyeTsKKwkJCXVpbnQzMl90IGhhc2ggPSAwOworCisJCQlpZiAoKHdvcmQgPj4gb2Zmc2V0KSA9PSAwKQorCQkJCWJyZWFrOworCisJCQlvZmZzZXQgKz0gZXdhaF9iaXRfY3R6NjQod29yZCA+PiBvZmZzZXQpOworCisJCQlpZiAocG9zICsgb2Zmc2V0IDwgYml0bWFwX2dpdC5yZXVzZV9vYmplY3RzKQorCQkJCWNvbnRpbnVlOworCisJCQllbnRyeSA9ICZiaXRtYXBfZ2l0LnJldmVyc2VfaW5kZXgtPnJldmluZGV4W3BvcyArIG9mZnNldF07CisJCQlzaGExID0gbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShiaXRtYXBfZ2l0LnBhY2ssIGVudHJ5LT5ucik7CisKKwkJCWlmIChiaXRtYXBfZ2l0Lmhhc2hlcykKKwkJCQloYXNoID0gbnRvaGwoYml0bWFwX2dpdC5oYXNoZXNbZW50cnktPm5yXSk7CisKKwkJCXNob3dfcmVhY2goc2hhMSwgb2JqZWN0X3R5cGUsIDAsIGhhc2gsIGJpdG1hcF9naXQucGFjaywgZW50cnktPm9mZnNldCk7CisJCX0KKworCQlwb3MgKz0gQklUU19JTl9FV09SRDsKKwkJaSsrOworCX0KK30KKworc3RhdGljIGludCBpbl9iaXRtYXBwZWRfcGFjayhzdHJ1Y3Qgb2JqZWN0X2xpc3QgKnJvb3RzKQoreworCXdoaWxlIChyb290cykgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSByb290cy0+aXRlbTsKKwkJcm9vdHMgPSByb290cy0+bmV4dDsKKworCQlpZiAoZmluZF9wYWNrX2VudHJ5X29uZShvYmplY3QtPnNoYTEsIGJpdG1hcF9naXQucGFjaykgPiAwKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBwcmVwYXJlX2JpdG1hcF93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcGVuZGluZ19uciA9IHJldnMtPnBlbmRpbmcubnI7CisJc3RydWN0IG9iamVjdF9hcnJheV9lbnRyeSAqcGVuZGluZ19lID0gcmV2cy0+cGVuZGluZy5vYmplY3RzOworCisJc3RydWN0IG9iamVjdF9saXN0ICp3YW50cyA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9saXN0ICpoYXZlcyA9IE5VTEw7CisKKwlzdHJ1Y3QgYml0bWFwICp3YW50c19iaXRtYXAgPSBOVUxMOworCXN0cnVjdCBiaXRtYXAgKmhhdmVzX2JpdG1hcCA9IE5VTEw7CisKKwlpZiAoIWJpdG1hcF9naXQubG9hZGVkKSB7CisJCS8qIHRyeSB0byBvcGVuIGEgYml0bWFwcGVkIHBhY2ssIGJ1dCBkb24ndCBwYXJzZSBpdCB5ZXQKKwkJICogYmVjYXVzZSB3ZSBtYXkgbm90IG5lZWQgdG8gdXNlIGl0ICovCisJCWlmIChvcGVuX3BhY2tfYml0bWFwKCkgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBwZW5kaW5nX25yOyArK2kpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcGVuZGluZ19lW2ldLml0ZW07CisKKwkJaWYgKG9iamVjdC0+dHlwZSA9PSBPQkpfTk9ORSkKKwkJCXBhcnNlX29iamVjdF9vcl9kaWUob2JqZWN0LT5zaGExLCBOVUxMKTsKKworCQl3aGlsZSAob2JqZWN0LT50eXBlID09IE9CSl9UQUcpIHsKKwkJCXN0cnVjdCB0YWcgKnRhZyA9IChzdHJ1Y3QgdGFnICopIG9iamVjdDsKKworCQkJaWYgKG9iamVjdC0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJCW9iamVjdF9saXN0X2luc2VydChvYmplY3QsICZoYXZlcyk7CisJCQllbHNlCisJCQkJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iamVjdCwgJndhbnRzKTsKKworCQkJaWYgKCF0YWctPnRhZ2dlZCkKKwkJCQlkaWUoImJhZCB0YWciKTsKKwkJCW9iamVjdCA9IHBhcnNlX29iamVjdF9vcl9kaWUodGFnLT50YWdnZWQtPnNoYTEsIE5VTEwpOworCQl9CisKKwkJaWYgKG9iamVjdC0+ZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iamVjdCwgJmhhdmVzKTsKKwkJZWxzZQorCQkJb2JqZWN0X2xpc3RfaW5zZXJ0KG9iamVjdCwgJndhbnRzKTsKKwl9CisKKwkvKgorCSAqIGlmIHdlIGhhdmUgYSBIQVZFUyBsaXN0LCBidXQgbm9uZSBvZiB0aG9zZSBoYXZlcyBpcyBjb250YWluZWQKKwkgKiBpbiB0aGUgcGFja2ZpbGUgdGhhdCBoYXMgYSBiaXRtYXAsIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8KKwkgKiBvcHRpbWl6ZSBoZXJlCisJICovCisJaWYgKGhhdmVzICYmICFpbl9iaXRtYXBwZWRfcGFjayhoYXZlcykpCisJCXJldHVybiAtMTsKKworCS8qIGlmIHdlIGRvbid0IHdhbnQgYW55dGhpbmcsIHdlJ3JlIGRvbmUgaGVyZSAqLworCWlmICghd2FudHMpCisJCXJldHVybiAtMTsKKworCS8qCisJICogbm93IHdlJ3JlIGdvaW5nIHRvIHVzZSBiaXRtYXBzLCBzbyBsb2FkIHRoZSBhY3R1YWwgYml0bWFwIGVudHJpZXMKKwkgKiBmcm9tIGRpc2suIHRoaXMgaXMgdGhlIHBvaW50IG9mIG5vIHJldHVybjsgYWZ0ZXIgdGhpcyB0aGUgcmV2X2xpc3QKKwkgKiBiZWNvbWVzIGludmFsaWRhdGVkIGFuZCB3ZSBtdXN0IHBlcmZvcm0gdGhlIHJldndhbGsgdGhyb3VnaCBiaXRtYXBzCisJICovCisJaWYgKCFiaXRtYXBfZ2l0LmxvYWRlZCAmJiBsb2FkX3BhY2tfYml0bWFwKCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXZzLT5wZW5kaW5nLm5yID0gMDsKKwlyZXZzLT5wZW5kaW5nLmFsbG9jID0gMDsKKwlyZXZzLT5wZW5kaW5nLm9iamVjdHMgPSBOVUxMOworCisJaWYgKGhhdmVzKSB7CisJCXJldnMtPmlnbm9yZV9taXNzaW5nX2xpbmtzID0gMTsKKwkJaGF2ZXNfYml0bWFwID0gZmluZF9vYmplY3RzKHJldnMsIGhhdmVzLCBOVUxMKTsKKwkJcmVzZXRfcmV2aXNpb25fd2FsaygpOworCQlyZXZzLT5pZ25vcmVfbWlzc2luZ19saW5rcyA9IDA7CisKKwkJaWYgKGhhdmVzX2JpdG1hcCA9PSBOVUxMKQorCQkJZGllKCJCVUc6IGZhaWxlZCB0byBwZXJmb3JtIGJpdG1hcCB3YWxrIik7CisJfQorCisJd2FudHNfYml0bWFwID0gZmluZF9vYmplY3RzKHJldnMsIHdhbnRzLCBoYXZlc19iaXRtYXApOworCisJaWYgKCF3YW50c19iaXRtYXApCisJCWRpZSgiQlVHOiBmYWlsZWQgdG8gcGVyZm9ybSBiaXRtYXAgd2FsayIpOworCisJaWYgKGhhdmVzX2JpdG1hcCkKKwkJYml0bWFwX2FuZF9ub3Qod2FudHNfYml0bWFwLCBoYXZlc19iaXRtYXApOworCisJYml0bWFwX2dpdC5yZXN1bHQgPSB3YW50c19iaXRtYXA7CisKKwliaXRtYXBfZnJlZShoYXZlc19iaXRtYXApOworCXJldHVybiAwOworfQorCitpbnQgcmV1c2VfcGFydGlhbF9wYWNrZmlsZV9mcm9tX2JpdG1hcChzdHJ1Y3QgcGFja2VkX2dpdCAqKnBhY2tmaWxlLAorCQkJCSAgICAgICB1aW50MzJfdCAqZW50cmllcywKKwkJCQkgICAgICAgb2ZmX3QgKnVwX3RvKQoreworCS8qCisJICogUmV1c2UgdGhlIHBhY2tmaWxlIGNvbnRlbnQgaWYgd2UgbmVlZCBtb3JlIHRoYW4KKwkgKiA5MCUgb2YgaXRzIG9iamVjdHMKKwkgKi8KKwlzdGF0aWMgY29uc3QgZG91YmxlIFJFVVNFX1BFUkNFTlQgPSAwLjk7CisKKwlzdHJ1Y3QgYml0bWFwICpyZXN1bHQgPSBiaXRtYXBfZ2l0LnJlc3VsdDsKKwl1aW50MzJfdCByZXVzZV90aHJlc2hvbGQ7CisJdWludDMyX3QgaSwgcmV1c2Vfb2JqZWN0cyA9IDA7CisKKwlhc3NlcnQocmVzdWx0KTsKKworCWZvciAoaSA9IDA7IGkgPCByZXN1bHQtPndvcmRfYWxsb2M7ICsraSkgeworCQlpZiAocmVzdWx0LT53b3Jkc1tpXSAhPSAoZXdvcmRfdCl+MCkgeworCQkJcmV1c2Vfb2JqZWN0cyArPSBld2FoX2JpdF9jdHo2NCh+cmVzdWx0LT53b3Jkc1tpXSk7CisJCQlicmVhazsKKwkJfQorCisJCXJldXNlX29iamVjdHMgKz0gQklUU19JTl9FV09SRDsKKwl9CisKKyNpZmRlZiBHSVRfQklUTUFQX0RFQlVHCisJeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKmVudHJ5OworCisJCWVudHJ5ID0gJmJpdG1hcF9naXQucmV2ZXJzZV9pbmRleC0+cmV2aW5kZXhbcmV1c2Vfb2JqZWN0c107CisJCXNoYTEgPSBudGhfcGFja2VkX29iamVjdF9zaGExKGJpdG1hcF9naXQucGFjaywgZW50cnktPm5yKTsKKworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byByZXVzZSBhdCAlZCAoJTAxNmxseClcbiIsCisJCQlyZXVzZV9vYmplY3RzLCByZXN1bHQtPndvcmRzW2ldKTsKKwkJZnByaW50ZihzdGRlcnIsICIgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9CisjZW5kaWYKKworCWlmICghcmV1c2Vfb2JqZWN0cykKKwkJcmV0dXJuIC0xOworCisJaWYgKHJldXNlX29iamVjdHMgPj0gYml0bWFwX2dpdC5wYWNrLT5udW1fb2JqZWN0cykgeworCQliaXRtYXBfZ2l0LnJldXNlX29iamVjdHMgPSAqZW50cmllcyA9IGJpdG1hcF9naXQucGFjay0+bnVtX29iamVjdHM7CisJCSp1cF90byA9IC0xOyAvKiByZXVzZSB0aGUgZnVsbCBwYWNrICovCisJCSpwYWNrZmlsZSA9IGJpdG1hcF9naXQucGFjazsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV1c2VfdGhyZXNob2xkID0gYml0bWFwX3BvcGNvdW50KGJpdG1hcF9naXQucmVzdWx0KSAqIFJFVVNFX1BFUkNFTlQ7CisKKwlpZiAocmV1c2Vfb2JqZWN0cyA8IHJldXNlX3RocmVzaG9sZCkKKwkJcmV0dXJuIC0xOworCisJYml0bWFwX2dpdC5yZXVzZV9vYmplY3RzID0gKmVudHJpZXMgPSByZXVzZV9vYmplY3RzOworCSp1cF90byA9IGJpdG1hcF9naXQucmV2ZXJzZV9pbmRleC0+cmV2aW5kZXhbcmV1c2Vfb2JqZWN0c10ub2Zmc2V0OworCSpwYWNrZmlsZSA9IGJpdG1hcF9naXQucGFjazsKKworCXJldHVybiAwOworfQorCit2b2lkIHRyYXZlcnNlX2JpdG1hcF9jb21taXRfbGlzdChzaG93X3JlYWNoYWJsZV9mbiBzaG93X3JlYWNoYWJsZSkKK3sKKwlhc3NlcnQoYml0bWFwX2dpdC5yZXN1bHQpOworCisJc2hvd19vYmplY3RzX2Zvcl90eXBlKGJpdG1hcF9naXQucmVzdWx0LCBiaXRtYXBfZ2l0LmNvbW1pdHMsCisJCU9CSl9DT01NSVQsIHNob3dfcmVhY2hhYmxlKTsKKwlzaG93X29iamVjdHNfZm9yX3R5cGUoYml0bWFwX2dpdC5yZXN1bHQsIGJpdG1hcF9naXQudHJlZXMsCisJCU9CSl9UUkVFLCBzaG93X3JlYWNoYWJsZSk7CisJc2hvd19vYmplY3RzX2Zvcl90eXBlKGJpdG1hcF9naXQucmVzdWx0LCBiaXRtYXBfZ2l0LmJsb2JzLAorCQlPQkpfQkxPQiwgc2hvd19yZWFjaGFibGUpOworCXNob3dfb2JqZWN0c19mb3JfdHlwZShiaXRtYXBfZ2l0LnJlc3VsdCwgYml0bWFwX2dpdC50YWdzLAorCQlPQkpfVEFHLCBzaG93X3JlYWNoYWJsZSk7CisKKwlzaG93X2V4dGVuZGVkX29iamVjdHMoYml0bWFwX2dpdC5yZXN1bHQsIHNob3dfcmVhY2hhYmxlKTsKKworCWJpdG1hcF9mcmVlKGJpdG1hcF9naXQucmVzdWx0KTsKKwliaXRtYXBfZ2l0LnJlc3VsdCA9IE5VTEw7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjb3VudF9vYmplY3RfdHlwZShzdHJ1Y3QgYml0bWFwICpvYmplY3RzLAorCQkJCSAgZW51bSBvYmplY3RfdHlwZSB0eXBlKQoreworCXN0cnVjdCBlaW5kZXggKmVpbmRleCA9ICZiaXRtYXBfZ2l0LmV4dF9pbmRleDsKKworCXVpbnQzMl90IGkgPSAwLCBjb3VudCA9IDA7CisJc3RydWN0IGV3YWhfaXRlcmF0b3IgaXQ7CisJZXdvcmRfdCBmaWx0ZXI7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE9CSl9DT01NSVQ6CisJCWV3YWhfaXRlcmF0b3JfaW5pdCgmaXQsIGJpdG1hcF9naXQuY29tbWl0cyk7CisJCWJyZWFrOworCisJY2FzZSBPQkpfVFJFRToKKwkJZXdhaF9pdGVyYXRvcl9pbml0KCZpdCwgYml0bWFwX2dpdC50cmVlcyk7CisJCWJyZWFrOworCisJY2FzZSBPQkpfQkxPQjoKKwkJZXdhaF9pdGVyYXRvcl9pbml0KCZpdCwgYml0bWFwX2dpdC5ibG9icyk7CisJCWJyZWFrOworCisJY2FzZSBPQkpfVEFHOgorCQlld2FoX2l0ZXJhdG9yX2luaXQoJml0LCBiaXRtYXBfZ2l0LnRhZ3MpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KKworCXdoaWxlIChpIDwgb2JqZWN0cy0+d29yZF9hbGxvYyAmJiBld2FoX2l0ZXJhdG9yX25leHQoJmZpbHRlciwgJml0KSkgeworCQlld29yZF90IHdvcmQgPSBvYmplY3RzLT53b3Jkc1tpKytdICYgZmlsdGVyOworCQljb3VudCArPSBld2FoX2JpdF9wb3Bjb3VudDY0KHdvcmQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBlaW5kZXgtPmNvdW50OyArK2kpIHsKKwkJaWYgKGVpbmRleC0+b2JqZWN0c1tpXS0+dHlwZSA9PSB0eXBlICYmCisJCQliaXRtYXBfZ2V0KG9iamVjdHMsIGJpdG1hcF9naXQucGFjay0+bnVtX29iamVjdHMgKyBpKSkKKwkJCWNvdW50Kys7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCit2b2lkIGNvdW50X2JpdG1hcF9jb21taXRfbGlzdCh1aW50MzJfdCAqY29tbWl0cywgdWludDMyX3QgKnRyZWVzLAorCQkJICAgICAgdWludDMyX3QgKmJsb2JzLCB1aW50MzJfdCAqdGFncykKK3sKKwlhc3NlcnQoYml0bWFwX2dpdC5yZXN1bHQpOworCisJaWYgKGNvbW1pdHMpCisJCSpjb21taXRzID0gY291bnRfb2JqZWN0X3R5cGUoYml0bWFwX2dpdC5yZXN1bHQsIE9CSl9DT01NSVQpOworCisJaWYgKHRyZWVzKQorCQkqdHJlZXMgPSBjb3VudF9vYmplY3RfdHlwZShiaXRtYXBfZ2l0LnJlc3VsdCwgT0JKX1RSRUUpOworCisJaWYgKGJsb2JzKQorCQkqYmxvYnMgPSBjb3VudF9vYmplY3RfdHlwZShiaXRtYXBfZ2l0LnJlc3VsdCwgT0JKX0JMT0IpOworCisJaWYgKHRhZ3MpCisJCSp0YWdzID0gY291bnRfb2JqZWN0X3R5cGUoYml0bWFwX2dpdC5yZXN1bHQsIE9CSl9UQUcpOworfQorCitzdHJ1Y3QgYml0bWFwX3Rlc3RfZGF0YSB7CisJc3RydWN0IGJpdG1hcCAqYmFzZTsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByZzsKKwlzaXplX3Qgc2VlbjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3Rfc2hvd19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqZWN0LAorCQkJICAgICBjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJICAgICBjb25zdCBjaGFyICpsYXN0LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBiaXRtYXBfdGVzdF9kYXRhICp0ZGF0YSA9IGRhdGE7CisJaW50IGJpdG1hcF9wb3M7CisKKwliaXRtYXBfcG9zID0gYml0bWFwX3Bvc2l0aW9uKG9iamVjdC0+c2hhMSk7CisJaWYgKGJpdG1hcF9wb3MgPCAwKQorCQlkaWUoIk9iamVjdCBub3QgaW4gYml0bWFwOiAlc1xuIiwgc2hhMV90b19oZXgob2JqZWN0LT5zaGExKSk7CisKKwliaXRtYXBfc2V0KHRkYXRhLT5iYXNlLCBiaXRtYXBfcG9zKTsKKwlkaXNwbGF5X3Byb2dyZXNzKHRkYXRhLT5wcmcsICsrdGRhdGEtPnNlZW4pOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3Nob3dfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYml0bWFwX3Rlc3RfZGF0YSAqdGRhdGEgPSBkYXRhOworCWludCBiaXRtYXBfcG9zOworCisJYml0bWFwX3BvcyA9IGJpdG1hcF9wb3NpdGlvbihjb21taXQtPm9iamVjdC5zaGExKTsKKwlpZiAoYml0bWFwX3BvcyA8IDApCisJCWRpZSgiT2JqZWN0IG5vdCBpbiBiaXRtYXA6ICVzXG4iLCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisKKwliaXRtYXBfc2V0KHRkYXRhLT5iYXNlLCBiaXRtYXBfcG9zKTsKKwlkaXNwbGF5X3Byb2dyZXNzKHRkYXRhLT5wcmcsICsrdGRhdGEtPnNlZW4pOworfQorCit2b2lkIHRlc3RfYml0bWFwX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXN0cnVjdCBvYmplY3QgKnJvb3Q7CisJc3RydWN0IGJpdG1hcCAqcmVzdWx0ID0gTlVMTDsKKwlraGl0ZXJfdCBwb3M7CisJc2l6ZV90IHJlc3VsdF9wb3BjbnQ7CisJc3RydWN0IGJpdG1hcF90ZXN0X2RhdGEgdGRhdGE7CisKKwlpZiAocHJlcGFyZV9iaXRtYXBfZ2l0KCkpCisJCWRpZSgiZmFpbGVkIHRvIGxvYWQgYml0bWFwIGluZGV4ZXMiKTsKKworCWlmIChyZXZzLT5wZW5kaW5nLm5yICE9IDEpCisJCWRpZSgieW91IG11c3Qgc3BlY2lmeSBleGFjdGx5IG9uZSBjb21taXQgdG8gdGVzdCIpOworCisJZnByaW50ZihzdGRlcnIsICJCaXRtYXAgdiVkIHRlc3QgKCVkIGVudHJpZXMgbG9hZGVkKVxuIiwKKwkJYml0bWFwX2dpdC52ZXJzaW9uLCBiaXRtYXBfZ2l0LmVudHJ5X2NvdW50KTsKKworCXJvb3QgPSByZXZzLT5wZW5kaW5nLm9iamVjdHNbMF0uaXRlbTsKKwlwb3MgPSBraF9nZXRfc2hhMShiaXRtYXBfZ2l0LmJpdG1hcHMsIHJvb3QtPnNoYTEpOworCisJaWYgKHBvcyA8IGtoX2VuZChiaXRtYXBfZ2l0LmJpdG1hcHMpKSB7CisJCXN0cnVjdCBzdG9yZWRfYml0bWFwICpzdCA9IGtoX3ZhbHVlKGJpdG1hcF9naXQuYml0bWFwcywgcG9zKTsKKwkJc3RydWN0IGV3YWhfYml0bWFwICpibSA9IGxvb2t1cF9zdG9yZWRfYml0bWFwKHN0KTsKKworCQlmcHJpbnRmKHN0ZGVyciwgIkZvdW5kIGJpdG1hcCBmb3IgJXMuICVkIGJpdHMgLyAlMDh4IGNoZWNrc3VtXG4iLAorCQkJc2hhMV90b19oZXgocm9vdC0+c2hhMSksIChpbnQpYm0tPmJpdF9zaXplLCBld2FoX2NoZWNrc3VtKGJtKSk7CisKKwkJcmVzdWx0ID0gZXdhaF90b19iaXRtYXAoYm0pOworCX0KKworCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJZGllKCJDb21taXQgJXMgZG9lc24ndCBoYXZlIGFuIGluZGV4ZWQgYml0bWFwIiwgc2hhMV90b19oZXgocm9vdC0+c2hhMSkpOworCisJcmV2cy0+dGFnX29iamVjdHMgPSAxOworCXJldnMtPnRyZWVfb2JqZWN0cyA9IDE7CisJcmV2cy0+YmxvYl9vYmplY3RzID0gMTsKKworCXJlc3VsdF9wb3BjbnQgPSBiaXRtYXBfcG9wY291bnQocmVzdWx0KTsKKworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsocmV2cykpCisJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKworCXRkYXRhLmJhc2UgPSBiaXRtYXBfbmV3KCk7CisJdGRhdGEucHJnID0gc3RhcnRfcHJvZ3Jlc3MoIlZlcmlmeWluZyBiaXRtYXAgZW50cmllcyIsIHJlc3VsdF9wb3BjbnQpOworCXRkYXRhLnNlZW4gPSAwOworCisJdHJhdmVyc2VfY29tbWl0X2xpc3QocmV2cywgJnRlc3Rfc2hvd19jb21taXQsICZ0ZXN0X3Nob3dfb2JqZWN0LCAmdGRhdGEpOworCisJc3RvcF9wcm9ncmVzcygmdGRhdGEucHJnKTsKKworCWlmIChiaXRtYXBfZXF1YWxzKHJlc3VsdCwgdGRhdGEuYmFzZSkpCisJCWZwcmludGYoc3RkZXJyLCAiT0shXG4iKTsKKwllbHNlCisJCWZwcmludGYoc3RkZXJyLCAiTWlzbWF0Y2ghXG4iKTsKKworCWJpdG1hcF9mcmVlKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBpbnQgcmVidWlsZF9iaXRtYXAodWludDMyX3QgKnJlcG9zaXRpb24sCisJCQkgIHN0cnVjdCBld2FoX2JpdG1hcCAqc291cmNlLAorCQkJICBzdHJ1Y3QgYml0bWFwICpkZXN0KQoreworCXVpbnQzMl90IHBvcyA9IDA7CisJc3RydWN0IGV3YWhfaXRlcmF0b3IgaXQ7CisJZXdvcmRfdCB3b3JkOworCisJZXdhaF9pdGVyYXRvcl9pbml0KCZpdCwgc291cmNlKTsKKworCXdoaWxlIChld2FoX2l0ZXJhdG9yX25leHQoJndvcmQsICZpdCkpIHsKKwkJdWludDMyX3Qgb2Zmc2V0LCBiaXRfcG9zOworCisJCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgQklUU19JTl9FV09SRDsgKytvZmZzZXQpIHsKKwkJCWlmICgod29yZCA+PiBvZmZzZXQpID09IDApCisJCQkJYnJlYWs7CisKKwkJCW9mZnNldCArPSBld2FoX2JpdF9jdHo2NCh3b3JkID4+IG9mZnNldCk7CisKKwkJCWJpdF9wb3MgPSByZXBvc2l0aW9uW3BvcyArIG9mZnNldF07CisJCQlpZiAoYml0X3BvcyA+IDApCisJCQkJYml0bWFwX3NldChkZXN0LCBiaXRfcG9zIC0gMSk7CisJCQllbHNlIC8qIGNhbid0IHJldXNlLCB3ZSBkb24ndCBoYXZlIHRoZSBvYmplY3QgKi8KKwkJCQlyZXR1cm4gLTE7CisJCX0KKworCQlwb3MgKz0gQklUU19JTl9FV09SRDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByZWJ1aWxkX2V4aXN0aW5nX2JpdG1hcHMoc3RydWN0IHBhY2tpbmdfZGF0YSAqbWFwcGluZywKKwkJCSAgICAga2hhc2hfc2hhMSAqcmV1c2VkX2JpdG1hcHMsCisJCQkgICAgIGludCBzaG93X3Byb2dyZXNzKQoreworCXVpbnQzMl90IGksIG51bV9vYmplY3RzOworCXVpbnQzMl90ICpyZXBvc2l0aW9uOworCXN0cnVjdCBiaXRtYXAgKnJlYnVpbGQ7CisJc3RydWN0IHN0b3JlZF9iaXRtYXAgKnN0b3JlZDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKworCWtoaXRlcl90IGhhc2hfcG9zOworCWludCBoYXNoX3JldDsKKworCWlmIChwcmVwYXJlX2JpdG1hcF9naXQoKSA8IDApCisJCXJldHVybiAtMTsKKworCW51bV9vYmplY3RzID0gYml0bWFwX2dpdC5wYWNrLT5udW1fb2JqZWN0czsKKwlyZXBvc2l0aW9uID0geGNhbGxvYyhudW1fb2JqZWN0cywgc2l6ZW9mKHVpbnQzMl90KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX29iamVjdHM7ICsraSkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKmVudHJ5OworCQlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpvZTsKKworCQllbnRyeSA9ICZiaXRtYXBfZ2l0LnJldmVyc2VfaW5kZXgtPnJldmluZGV4W2ldOworCQlzaGExID0gbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShiaXRtYXBfZ2l0LnBhY2ssIGVudHJ5LT5ucik7CisJCW9lID0gcGFja2xpc3RfZmluZChtYXBwaW5nLCBzaGExLCBOVUxMKTsKKworCQlpZiAob2UpCisJCQlyZXBvc2l0aW9uW2ldID0gb2UtPmluX3BhY2tfcG9zICsgMTsKKwl9CisKKwlyZWJ1aWxkID0gYml0bWFwX25ldygpOworCWkgPSAwOworCisJaWYgKHNob3dfcHJvZ3Jlc3MpCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3MoIlJldXNpbmcgYml0bWFwcyIsIDApOworCisJa2hfZm9yZWFjaF92YWx1ZShiaXRtYXBfZ2l0LmJpdG1hcHMsIHN0b3JlZCwgeworCQlpZiAoc3RvcmVkLT5mbGFncyAmIEJJVE1BUF9GTEFHX1JFVVNFKSB7CisJCQlpZiAoIXJlYnVpbGRfYml0bWFwKHJlcG9zaXRpb24sCisJCQkJCSAgICBsb29rdXBfc3RvcmVkX2JpdG1hcChzdG9yZWQpLAorCQkJCQkgICAgcmVidWlsZCkpIHsKKwkJCQloYXNoX3BvcyA9IGtoX3B1dF9zaGExKHJldXNlZF9iaXRtYXBzLAorCQkJCQkJICAgICAgIHN0b3JlZC0+c2hhMSwKKwkJCQkJCSAgICAgICAmaGFzaF9yZXQpOworCQkJCWtoX3ZhbHVlKHJldXNlZF9iaXRtYXBzLCBoYXNoX3BvcykgPQorCQkJCQliaXRtYXBfdG9fZXdhaChyZWJ1aWxkKTsKKwkJCX0KKwkJCWJpdG1hcF9yZXNldChyZWJ1aWxkKTsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsraSk7CisJCX0KKwl9KTsKKworCXN0b3BfcHJvZ3Jlc3MoJnByb2dyZXNzKTsKKworCWZyZWUocmVwb3NpdGlvbik7CisJYml0bWFwX2ZyZWUocmVidWlsZCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9wYWNrLWJpdG1hcC5oIGIvcGFjay1iaXRtYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWRjZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvcGFjay1iaXRtYXAuaApAQCAtMCwwICsxLDU3IEBACisjaWZuZGVmIFBBQ0tfQklUTUFQX0gKKyNkZWZpbmUgUEFDS19CSVRNQVBfSAorCisjaW5jbHVkZSAiZXdhaC9ld29rLmgiCisjaW5jbHVkZSAia2hhc2guaCIKKyNpbmNsdWRlICJwYWNrLW9iamVjdHMuaCIKKworc3RydWN0IGJpdG1hcF9kaXNrX2hlYWRlciB7CisJY2hhciBtYWdpY1s0XTsKKwl1aW50MTZfdCB2ZXJzaW9uOworCXVpbnQxNl90IG9wdGlvbnM7CisJdWludDMyX3QgZW50cnlfY291bnQ7CisJdW5zaWduZWQgY2hhciBjaGVja3N1bVsyMF07Cit9OworCitzdGF0aWMgY29uc3QgY2hhciBCSVRNQVBfSURYX1NJR05BVFVSRVtdID0geydCJywgJ0knLCAnVCcsICdNJ307CisKKyNkZWZpbmUgTkVFRFNfQklUTUFQICgxdTw8MjIpCisKK2VudW0gcGFja19iaXRtYXBfb3B0cyB7CisJQklUTUFQX09QVF9GVUxMX0RBRyA9IDEsCisJQklUTUFQX09QVF9IQVNIX0NBQ0hFID0gNCwKK307CisKK2VudW0gcGFja19iaXRtYXBfZmxhZ3MgeworCUJJVE1BUF9GTEFHX1JFVVNFID0gMHgxCit9OworCit0eXBlZGVmIGludCAoKnNob3dfcmVhY2hhYmxlX2ZuKSgKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCWVudW0gb2JqZWN0X3R5cGUgdHlwZSwKKwlpbnQgZmxhZ3MsCisJdWludDMyX3QgaGFzaCwKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqZm91bmRfcGFjaywKKwlvZmZfdCBmb3VuZF9vZmZzZXQpOworCitpbnQgcHJlcGFyZV9iaXRtYXBfZ2l0KHZvaWQpOwordm9pZCBjb3VudF9iaXRtYXBfY29tbWl0X2xpc3QodWludDMyX3QgKmNvbW1pdHMsIHVpbnQzMl90ICp0cmVlcywgdWludDMyX3QgKmJsb2JzLCB1aW50MzJfdCAqdGFncyk7Cit2b2lkIHRyYXZlcnNlX2JpdG1hcF9jb21taXRfbGlzdChzaG93X3JlYWNoYWJsZV9mbiBzaG93X3JlYWNoYWJsZSk7Cit2b2lkIHRlc3RfYml0bWFwX3dhbGsoc3RydWN0IHJldl9pbmZvICpyZXZzKTsKK2ludCBwcmVwYXJlX2JpdG1hcF93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2cyk7CitpbnQgcmV1c2VfcGFydGlhbF9wYWNrZmlsZV9mcm9tX2JpdG1hcChzdHJ1Y3QgcGFja2VkX2dpdCAqKnBhY2tmaWxlLCB1aW50MzJfdCAqZW50cmllcywgb2ZmX3QgKnVwX3RvKTsKK2ludCByZWJ1aWxkX2V4aXN0aW5nX2JpdG1hcHMoc3RydWN0IHBhY2tpbmdfZGF0YSAqbWFwcGluZywga2hhc2hfc2hhMSAqcmV1c2VkX2JpdG1hcHMsIGludCBzaG93X3Byb2dyZXNzKTsKKwordm9pZCBiaXRtYXBfd3JpdGVyX3Nob3dfcHJvZ3Jlc3MoaW50IHNob3cpOwordm9pZCBiaXRtYXBfd3JpdGVyX3NldF9jaGVja3N1bSh1bnNpZ25lZCBjaGFyICpzaGExKTsKK3ZvaWQgYml0bWFwX3dyaXRlcl9idWlsZF90eXBlX2luZGV4KHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKmluZGV4LCB1aW50MzJfdCBpbmRleF9ucik7Cit2b2lkIGJpdG1hcF93cml0ZXJfcmV1c2VfYml0bWFwcyhzdHJ1Y3QgcGFja2luZ19kYXRhICp0b19wYWNrKTsKK3ZvaWQgYml0bWFwX3dyaXRlcl9zZWxlY3RfY29tbWl0cyhzdHJ1Y3QgY29tbWl0ICoqaW5kZXhlZF9jb21taXRzLAorCQl1bnNpZ25lZCBpbnQgaW5kZXhlZF9jb21taXRzX25yLCBpbnQgbWF4X2JpdG1hcHMpOwordm9pZCBiaXRtYXBfd3JpdGVyX2J1aWxkKHN0cnVjdCBwYWNraW5nX2RhdGEgKnRvX3BhY2spOwordm9pZCBiaXRtYXBfd3JpdGVyX2ZpbmlzaChzdHJ1Y3QgcGFja19pZHhfZW50cnkgKippbmRleCwKKwkJCSAgdWludDMyX3QgaW5kZXhfbnIsCisJCQkgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJICB1aW50MTZfdCBvcHRpb25zKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9wYWNrLWNoZWNrLmMgYi9wYWNrLWNoZWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhNTk1YwotLS0gL2Rldi9udWxsCisrKyBiL3BhY2stY2hlY2suYwpAQCAtMCwwICsxLDE4MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgInBhY2stcmV2aW5kZXguaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorCitzdHJ1Y3QgaWR4X2VudHJ5IHsKKwlvZmZfdCAgICAgICAgICAgICAgICBvZmZzZXQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMTsKKwl1bnNpZ25lZCBpbnQgbnI7Cit9OworCitzdGF0aWMgaW50IGNvbXBhcmVfZW50cmllcyhjb25zdCB2b2lkICplMSwgY29uc3Qgdm9pZCAqZTIpCit7CisJY29uc3Qgc3RydWN0IGlkeF9lbnRyeSAqZW50cnkxID0gZTE7CisJY29uc3Qgc3RydWN0IGlkeF9lbnRyeSAqZW50cnkyID0gZTI7CisJaWYgKGVudHJ5MS0+b2Zmc2V0IDwgZW50cnkyLT5vZmZzZXQpCisJCXJldHVybiAtMTsKKwlpZiAoZW50cnkxLT5vZmZzZXQgPiBlbnRyeTItPm9mZnNldCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjaGVja19wYWNrX2NyYyhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkgICBvZmZfdCBvZmZzZXQsIG9mZl90IGxlbiwgdW5zaWduZWQgaW50IG5yKQoreworCWNvbnN0IHVpbnQzMl90ICppbmRleF9jcmM7CisJdWludDMyX3QgZGF0YV9jcmMgPSBjcmMzMigwLCBOVUxMLCAwKTsKKworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBhdmFpbDsKKwkJdm9pZCAqZGF0YSA9IHVzZV9wYWNrKHAsIHdfY3Vycywgb2Zmc2V0LCAmYXZhaWwpOworCQlpZiAoYXZhaWwgPiBsZW4pCisJCQlhdmFpbCA9IGxlbjsKKwkJZGF0YV9jcmMgPSBjcmMzMihkYXRhX2NyYywgZGF0YSwgYXZhaWwpOworCQlvZmZzZXQgKz0gYXZhaWw7CisJCWxlbiAtPSBhdmFpbDsKKwl9IHdoaWxlIChsZW4pOworCisJaW5kZXhfY3JjID0gcC0+aW5kZXhfZGF0YTsKKwlpbmRleF9jcmMgKz0gMiArIDI1NiArIHAtPm51bV9vYmplY3RzICogKDIwLzQpICsgbnI7CisKKwlyZXR1cm4gZGF0YV9jcmMgIT0gbnRvaGwoKmluZGV4X2NyYyk7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X3BhY2tmaWxlKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJICAgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkJICAgdmVyaWZ5X2ZuIGZuLAorCQkJICAgc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgdWludDMyX3QgYmFzZV9jb3VudCkKKworeworCW9mZl90IGluZGV4X3NpemUgPSBwLT5pbmRleF9zaXplOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluZGV4X2Jhc2UgPSBwLT5pbmRleF9kYXRhOworCWdpdF9TSEFfQ1RYIGN0eDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCAqcGFja19zaWc7CisJb2ZmX3Qgb2Zmc2V0ID0gMCwgcGFja19zaWdfb2ZzID0gMDsKKwl1aW50MzJfdCBucl9vYmplY3RzLCBpOworCWludCBlcnIgPSAwOworCXN0cnVjdCBpZHhfZW50cnkgKmVudHJpZXM7CisKKwkvKiBOb3RlIHRoYXQgdGhlIHBhY2sgaGVhZGVyIGNoZWNrcyBhcmUgYWN0dWFsbHkgcGVyZm9ybWVkIGJ5CisJICogdXNlX3BhY2sgd2hlbiBpdCBmaXJzdCBvcGVucyB0aGUgcGFjayBmaWxlLiAgSWYgYW55dGhpbmcKKwkgKiBnb2VzIHdyb25nIGR1cmluZyB0aG9zZSBjaGVja3MgdGhlbiB0aGUgY2FsbCB3aWxsIGRpZSBvdXQKKwkgKiBpbW1lZGlhdGVseS4KKwkgKi8KKworCWdpdF9TSEExX0luaXQoJmN0eCk7CisJZG8geworCQl1bnNpZ25lZCBsb25nIHJlbWFpbmluZzsKKwkJdW5zaWduZWQgY2hhciAqaW4gPSB1c2VfcGFjayhwLCB3X2N1cnMsIG9mZnNldCwgJnJlbWFpbmluZyk7CisJCW9mZnNldCArPSByZW1haW5pbmc7CisJCWlmICghcGFja19zaWdfb2ZzKQorCQkJcGFja19zaWdfb2ZzID0gcC0+cGFja19zaXplIC0gMjA7CisJCWlmIChvZmZzZXQgPiBwYWNrX3NpZ19vZnMpCisJCQlyZW1haW5pbmcgLT0gKHVuc2lnbmVkIGludCkob2Zmc2V0IC0gcGFja19zaWdfb2ZzKTsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIGluLCByZW1haW5pbmcpOworCX0gd2hpbGUgKG9mZnNldCA8IHBhY2tfc2lnX29mcyk7CisJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmN0eCk7CisJcGFja19zaWcgPSB1c2VfcGFjayhwLCB3X2N1cnMsIHBhY2tfc2lnX29mcywgTlVMTCk7CisJaWYgKGhhc2hjbXAoc2hhMSwgcGFja19zaWcpKQorCQllcnIgPSBlcnJvcigiJXMgU0hBMSBjaGVja3N1bSBtaXNtYXRjaCIsCisJCQkgICAgcC0+cGFja19uYW1lKTsKKwlpZiAoaGFzaGNtcChpbmRleF9iYXNlICsgaW5kZXhfc2l6ZSAtIDQwLCBwYWNrX3NpZykpCisJCWVyciA9IGVycm9yKCIlcyBTSEExIGRvZXMgbm90IG1hdGNoIGl0cyBpbmRleCIsCisJCQkgICAgcC0+cGFja19uYW1lKTsKKwl1bnVzZV9wYWNrKHdfY3Vycyk7CisKKwkvKiBNYWtlIHN1cmUgZXZlcnl0aGluZyByZWFjaGFibGUgZnJvbSBpZHggaXMgdmFsaWQuICBTaW5jZSB3ZQorCSAqIGhhdmUgdmVyaWZpZWQgdGhhdCBucl9vYmplY3RzIG1hdGNoZXMgYmV0d2VlbiBpZHggYW5kIHBhY2ssCisJICogd2UgZG8gbm90IGRvIHNjYW4tc3RyZWFtaW5nIGNoZWNrIG9uIHRoZSBwYWNrIGZpbGUuCisJICovCisJbnJfb2JqZWN0cyA9IHAtPm51bV9vYmplY3RzOworCWVudHJpZXMgPSB4bWFsbG9jKChucl9vYmplY3RzICsgMSkgKiBzaXplb2YoKmVudHJpZXMpKTsKKwllbnRyaWVzW25yX29iamVjdHNdLm9mZnNldCA9IHBhY2tfc2lnX29mczsKKwkvKiBmaXJzdCBzb3J0IGVudHJpZXMgYnkgcGFjayBvZmZzZXQsIHNpbmNlIHVucGFja2luZyB0aGVtIGlzIG1vcmUgZWZmaWNpZW50IHRoYXQgd2F5ICovCisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQllbnRyaWVzW2ldLnNoYTEgPSBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIGkpOworCQlpZiAoIWVudHJpZXNbaV0uc2hhMSkKKwkJCWRpZSgiaW50ZXJuYWwgZXJyb3IgcGFjay1jaGVjayBudGgtcGFja2VkLW9iamVjdCIpOworCQllbnRyaWVzW2ldLm9mZnNldCA9IG50aF9wYWNrZWRfb2JqZWN0X29mZnNldChwLCBpKTsKKwkJZW50cmllc1tpXS5uciA9IGk7CisJfQorCXFzb3J0KGVudHJpZXMsIG5yX29iamVjdHMsIHNpemVvZigqZW50cmllcyksIGNvbXBhcmVfZW50cmllcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2JqZWN0czsgaSsrKSB7CisJCXZvaWQgKmRhdGE7CisJCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCisJCWlmIChwLT5pbmRleF92ZXJzaW9uID4gMSkgeworCQkJb2ZmX3Qgb2Zmc2V0ID0gZW50cmllc1tpXS5vZmZzZXQ7CisJCQlvZmZfdCBsZW4gPSBlbnRyaWVzW2krMV0ub2Zmc2V0IC0gb2Zmc2V0OworCQkJdW5zaWduZWQgaW50IG5yID0gZW50cmllc1tpXS5ucjsKKwkJCWlmIChjaGVja19wYWNrX2NyYyhwLCB3X2N1cnMsIG9mZnNldCwgbGVuLCBucikpCisJCQkJZXJyID0gZXJyb3IoImluZGV4IENSQyBtaXNtYXRjaCBmb3Igb2JqZWN0ICVzICIKKwkJCQkJICAgICJmcm9tICVzIGF0IG9mZnNldCAlIlBSSXVNQVgiIiwKKwkJCQkJICAgIHNoYTFfdG9faGV4KGVudHJpZXNbaV0uc2hhMSksCisJCQkJCSAgICBwLT5wYWNrX25hbWUsICh1aW50bWF4X3Qpb2Zmc2V0KTsKKwkJfQorCQlkYXRhID0gdW5wYWNrX2VudHJ5KHAsIGVudHJpZXNbaV0ub2Zmc2V0LCAmdHlwZSwgJnNpemUpOworCQlpZiAoIWRhdGEpCisJCQllcnIgPSBlcnJvcigiY2Fubm90IHVucGFjayAlcyBmcm9tICVzIGF0IG9mZnNldCAlIlBSSXVNQVgiIiwKKwkJCQkgICAgc2hhMV90b19oZXgoZW50cmllc1tpXS5zaGExKSwgcC0+cGFja19uYW1lLAorCQkJCSAgICAodWludG1heF90KWVudHJpZXNbaV0ub2Zmc2V0KTsKKwkJZWxzZSBpZiAoY2hlY2tfc2hhMV9zaWduYXR1cmUoZW50cmllc1tpXS5zaGExLCBkYXRhLCBzaXplLCB0eXBlbmFtZSh0eXBlKSkpCisJCQllcnIgPSBlcnJvcigicGFja2VkICVzIGZyb20gJXMgaXMgY29ycnVwdCIsCisJCQkJICAgIHNoYTFfdG9faGV4KGVudHJpZXNbaV0uc2hhMSksIHAtPnBhY2tfbmFtZSk7CisJCWVsc2UgaWYgKGZuKSB7CisJCQlpbnQgZWF0ZW4gPSAwOworCQkJZm4oZW50cmllc1tpXS5zaGExLCB0eXBlLCBzaXplLCBkYXRhLCAmZWF0ZW4pOworCQkJaWYgKGVhdGVuKQorCQkJCWRhdGEgPSBOVUxMOworCQl9CisJCWlmICgoKGJhc2VfY291bnQgKyBpKSAmIDEwMjMpID09IDApCisJCQlkaXNwbGF5X3Byb2dyZXNzKHByb2dyZXNzLCBiYXNlX2NvdW50ICsgaSk7CisJCWZyZWUoZGF0YSk7CisKKwl9CisJZGlzcGxheV9wcm9ncmVzcyhwcm9ncmVzcywgYmFzZV9jb3VudCArIGkpOworCWZyZWUoZW50cmllcyk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgdmVyaWZ5X3BhY2tfaW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJb2ZmX3QgaW5kZXhfc2l6ZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleF9iYXNlOworCWdpdF9TSEFfQ1RYIGN0eDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBlcnIgPSAwOworCisJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBpbmRleCBub3Qgb3BlbmVkIiwgcC0+cGFja19uYW1lKTsKKwlpbmRleF9zaXplID0gcC0+aW5kZXhfc2l6ZTsKKwlpbmRleF9iYXNlID0gcC0+aW5kZXhfZGF0YTsKKworCS8qIFZlcmlmeSBTSEExIHN1bSBvZiB0aGUgaW5kZXggZmlsZSAqLworCWdpdF9TSEExX0luaXQoJmN0eCk7CisJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIGluZGV4X2Jhc2UsICh1bnNpZ25lZCBpbnQpKGluZGV4X3NpemUgLSAyMCkpOworCWdpdF9TSEExX0ZpbmFsKHNoYTEsICZjdHgpOworCWlmIChoYXNoY21wKHNoYTEsIGluZGV4X2Jhc2UgKyBpbmRleF9zaXplIC0gMjApKQorCQllcnIgPSBlcnJvcigiUGFja2ZpbGUgaW5kZXggZm9yICVzIFNIQTEgbWlzbWF0Y2giLAorCQkJICAgIHAtPnBhY2tfbmFtZSk7CisJcmV0dXJuIGVycjsKK30KKworaW50IHZlcmlmeV9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCB2ZXJpZnlfZm4gZm4sCisJCXN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIHVpbnQzMl90IGJhc2VfY291bnQpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHBhY2tfd2luZG93ICp3X2N1cnMgPSBOVUxMOworCisJZXJyIHw9IHZlcmlmeV9wYWNrX2luZGV4KHApOworCWlmICghcC0+aW5kZXhfZGF0YSkKKwkJcmV0dXJuIC0xOworCisJZXJyIHw9IHZlcmlmeV9wYWNrZmlsZShwLCAmd19jdXJzLCBmbiwgcHJvZ3Jlc3MsIGJhc2VfY291bnQpOworCXVudXNlX3BhY2soJndfY3Vycyk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvcGFjay1vYmplY3RzLmMgYi9wYWNrLW9iamVjdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzk4YThhCi0tLSAvZGV2L251bGwKKysrIGIvcGFjay1vYmplY3RzLmMKQEAgLTAsMCArMSwxMDkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJwYWNrLW9iamVjdHMuaCIKKworc3RhdGljIHVpbnQzMl90IGxvY2F0ZV9vYmplY3RfZW50cnlfaGFzaChzdHJ1Y3QgcGFja2luZ19kYXRhICpwZGF0YSwKKwkJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJCSBpbnQgKmZvdW5kKQoreworCXVpbnQzMl90IGksIG1hc2sgPSAocGRhdGEtPmluZGV4X3NpemUgLSAxKTsKKworCWkgPSBzaGExaGFzaChzaGExKSAmIG1hc2s7CisKKwl3aGlsZSAocGRhdGEtPmluZGV4W2ldID4gMCkgeworCQl1aW50MzJfdCBwb3MgPSBwZGF0YS0+aW5kZXhbaV0gLSAxOworCisJCWlmICghaGFzaGNtcChzaGExLCBwZGF0YS0+b2JqZWN0c1twb3NdLmlkeC5zaGExKSkgeworCQkJKmZvdW5kID0gMTsKKwkJCXJldHVybiBpOworCQl9CisKKwkJaSA9IChpICsgMSkgJiBtYXNrOworCX0KKworCSpmb3VuZCA9IDA7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY2xvc2VzdF9wb3cyKHVpbnQzMl90IHYpCit7CisJdiA9IHYgLSAxOworCXYgfD0gdiA+PiAxOworCXYgfD0gdiA+PiAyOworCXYgfD0gdiA+PiA0OworCXYgfD0gdiA+PiA4OworCXYgfD0gdiA+PiAxNjsKKwlyZXR1cm4gdiArIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJlaGFzaF9vYmplY3RzKHN0cnVjdCBwYWNraW5nX2RhdGEgKnBkYXRhKQoreworCXVpbnQzMl90IGk7CisJc3RydWN0IG9iamVjdF9lbnRyeSAqZW50cnk7CisKKwlwZGF0YS0+aW5kZXhfc2l6ZSA9IGNsb3Nlc3RfcG93MihwZGF0YS0+bnJfb2JqZWN0cyAqIDMpOworCWlmIChwZGF0YS0+aW5kZXhfc2l6ZSA8IDEwMjQpCisJCXBkYXRhLT5pbmRleF9zaXplID0gMTAyNDsKKworCWZyZWUocGRhdGEtPmluZGV4KTsKKwlwZGF0YS0+aW5kZXggPSB4Y2FsbG9jKHBkYXRhLT5pbmRleF9zaXplLCBzaXplb2YoKnBkYXRhLT5pbmRleCkpOworCisJZW50cnkgPSBwZGF0YS0+b2JqZWN0czsKKworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+bnJfb2JqZWN0czsgaSsrKSB7CisJCWludCBmb3VuZDsKKwkJdWludDMyX3QgaXggPSBsb2NhdGVfb2JqZWN0X2VudHJ5X2hhc2gocGRhdGEsIGVudHJ5LT5pZHguc2hhMSwgJmZvdW5kKTsKKworCQlpZiAoZm91bmQpCisJCQlkaWUoIkJVRzogRHVwbGljYXRlIG9iamVjdCBpbiBoYXNoIik7CisKKwkJcGRhdGEtPmluZGV4W2l4XSA9IGkgKyAxOworCQllbnRyeSsrOworCX0KK30KKworc3RydWN0IG9iamVjdF9lbnRyeSAqcGFja2xpc3RfZmluZChzdHJ1Y3QgcGFja2luZ19kYXRhICpwZGF0YSwKKwkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgIHVpbnQzMl90ICppbmRleF9wb3MpCit7CisJdWludDMyX3QgaTsKKwlpbnQgZm91bmQ7CisKKwlpZiAoIXBkYXRhLT5pbmRleF9zaXplKQorCQlyZXR1cm4gTlVMTDsKKworCWkgPSBsb2NhdGVfb2JqZWN0X2VudHJ5X2hhc2gocGRhdGEsIHNoYTEsICZmb3VuZCk7CisKKwlpZiAoaW5kZXhfcG9zKQorCQkqaW5kZXhfcG9zID0gaTsKKworCWlmICghZm91bmQpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuICZwZGF0YS0+b2JqZWN0c1twZGF0YS0+aW5kZXhbaV0gLSAxXTsKK30KKworc3RydWN0IG9iamVjdF9lbnRyeSAqcGFja2xpc3RfYWxsb2Moc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICAgIHVpbnQzMl90IGluZGV4X3BvcykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpuZXdfZW50cnk7CisKKwlpZiAocGRhdGEtPm5yX29iamVjdHMgPj0gcGRhdGEtPm5yX2FsbG9jKSB7CisJCXBkYXRhLT5ucl9hbGxvYyA9IChwZGF0YS0+bnJfYWxsb2MgICsgMTAyNCkgKiAzIC8gMjsKKwkJUkVBTExPQ19BUlJBWShwZGF0YS0+b2JqZWN0cywgcGRhdGEtPm5yX2FsbG9jKTsKKwl9CisKKwluZXdfZW50cnkgPSBwZGF0YS0+b2JqZWN0cyArIHBkYXRhLT5ucl9vYmplY3RzKys7CisKKwltZW1zZXQobmV3X2VudHJ5LCAwLCBzaXplb2YoKm5ld19lbnRyeSkpOworCWhhc2hjcHkobmV3X2VudHJ5LT5pZHguc2hhMSwgc2hhMSk7CisKKwlpZiAocGRhdGEtPmluZGV4X3NpemUgKiAzIDw9IHBkYXRhLT5ucl9vYmplY3RzICogNCkKKwkJcmVoYXNoX29iamVjdHMocGRhdGEpOworCWVsc2UKKwkJcGRhdGEtPmluZGV4W2luZGV4X3Bvc10gPSBwZGF0YS0+bnJfb2JqZWN0czsKKworCXJldHVybiBuZXdfZW50cnk7Cit9CmRpZmYgLS1naXQgYS9wYWNrLW9iamVjdHMuaCBiL3BhY2stb2JqZWN0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYjk4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrLW9iamVjdHMuaApAQCAtMCwwICsxLDY4IEBACisjaWZuZGVmIFBBQ0tfT0JKRUNUU19ICisjZGVmaW5lIFBBQ0tfT0JKRUNUU19ICisKK3N0cnVjdCBvYmplY3RfZW50cnkgeworCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSBpZHg7CisJdW5zaWduZWQgbG9uZyBzaXplOwkvKiB1bmNvbXByZXNzZWQgc2l6ZSAqLworCXN0cnVjdCBwYWNrZWRfZ2l0ICppbl9wYWNrOwkvKiBhbHJlYWR5IGluIHBhY2sgKi8KKwlvZmZfdCBpbl9wYWNrX29mZnNldDsKKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpkZWx0YTsJLyogZGVsdGEgYmFzZSBvYmplY3QgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2VudHJ5ICpkZWx0YV9jaGlsZDsgLyogZGVsdGlmaWVkIG9iamVjdHMgd2hvIGJhc2VzIG1lICovCisJc3RydWN0IG9iamVjdF9lbnRyeSAqZGVsdGFfc2libGluZzsgLyogb3RoZXIgZGVsdGlmaWVkIG9iamVjdHMgd2hvCisJCQkJCSAgICAgKiB1c2VzIHRoZSBzYW1lIGJhc2UgYXMgbWUKKwkJCQkJICAgICAqLworCXZvaWQgKmRlbHRhX2RhdGE7CS8qIGNhY2hlZCBkZWx0YSAodW5jb21wcmVzc2VkKSAqLworCXVuc2lnbmVkIGxvbmcgZGVsdGFfc2l6ZTsJLyogZGVsdGEgZGF0YSBzaXplICh1bmNvbXByZXNzZWQpICovCisJdW5zaWduZWQgbG9uZyB6X2RlbHRhX3NpemU7CS8qIGRlbHRhIGRhdGEgc2l6ZSAoY29tcHJlc3NlZCkgKi8KKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJZW51bSBvYmplY3RfdHlwZSBpbl9wYWNrX3R5cGU7CS8qIGNvdWxkIGJlIGRlbHRhICovCisJdWludDMyX3QgaGFzaDsJCQkvKiBuYW1lIGhpbnQgaGFzaCAqLworCXVuc2lnbmVkIGludCBpbl9wYWNrX3BvczsKKwl1bnNpZ25lZCBjaGFyIGluX3BhY2tfaGVhZGVyX3NpemU7CisJdW5zaWduZWQgcHJlZmVycmVkX2Jhc2U6MTsgLyoKKwkJCQkgICAgKiB3ZSBkbyBub3QgcGFjayB0aGlzLCBidXQgaXMgYXZhaWxhYmxlCisJCQkJICAgICogdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBvYmplY3QgdG8gZGVsdGEKKwkJCQkgICAgKiBvYmplY3RzIGFnYWluc3QuCisJCQkJICAgICovCisJdW5zaWduZWQgbm9fdHJ5X2RlbHRhOjE7CisJdW5zaWduZWQgdGFnZ2VkOjE7IC8qIG5lYXIgdGhlIHZlcnkgdGlwIG9mIHJlZnMgKi8KKwl1bnNpZ25lZCBmaWxsZWQ6MTsgLyogYXNzaWduZWQgd3JpdGUtb3JkZXIgKi8KK307CisKK3N0cnVjdCBwYWNraW5nX2RhdGEgeworCXN0cnVjdCBvYmplY3RfZW50cnkgKm9iamVjdHM7CisJdWludDMyX3QgbnJfb2JqZWN0cywgbnJfYWxsb2M7CisKKwlpbnQzMl90ICppbmRleDsKKwl1aW50MzJfdCBpbmRleF9zaXplOworfTsKKworc3RydWN0IG9iamVjdF9lbnRyeSAqcGFja2xpc3RfYWxsb2Moc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICAgIHVpbnQzMl90IGluZGV4X3Bvcyk7CisKK3N0cnVjdCBvYmplY3RfZW50cnkgKnBhY2tsaXN0X2ZpbmQoc3RydWN0IHBhY2tpbmdfZGF0YSAqcGRhdGEsCisJCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgICB1aW50MzJfdCAqaW5kZXhfcG9zKTsKKworc3RhdGljIGlubGluZSB1aW50MzJfdCBwYWNrX25hbWVfaGFzaChjb25zdCBjaGFyICpuYW1lKQoreworCXVpbnQzMl90IGMsIGhhc2ggPSAwOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVGhpcyBlZmZlY3RpdmVseSBqdXN0IGNyZWF0ZXMgYSBzb3J0YWJsZSBudW1iZXIgZnJvbSB0aGUKKwkgKiBsYXN0IHNpeHRlZW4gbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycy4gTGFzdCBjaGFyYWN0ZXJzCisJICogY291bnQgIm1vc3QiLCBzbyB0aGluZ3MgdGhhdCBlbmQgaW4gIi5jIiBzb3J0IHRvZ2V0aGVyLgorCSAqLworCXdoaWxlICgoYyA9ICpuYW1lKyspICE9IDApIHsKKwkJaWYgKGlzc3BhY2UoYykpCisJCQljb250aW51ZTsKKwkJaGFzaCA9IChoYXNoID4+IDIpICsgKGMgPDwgMjQpOworCX0KKwlyZXR1cm4gaGFzaDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9wYWNrLXJldmluZGV4LmMgYi9wYWNrLXJldmluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4Mzc2ZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2stcmV2aW5kZXguYwpAQCAtMCwwICsxLDI0NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFjay1yZXZpbmRleC5oIgorCisvKgorICogUGFjayBpbmRleCBmb3IgZXhpc3RpbmcgcGFja3MgZ2l2ZSB1cyBlYXN5IGFjY2VzcyB0byB0aGUgb2Zmc2V0cyBpbnRvCisgKiBjb3JyZXNwb25kaW5nIHBhY2sgZmlsZSB3aGVyZSBlYWNoIG9iamVjdCdzIGRhdGEgc3RhcnRzLCBidXQgdGhlIGVudHJpZXMKKyAqIGRvIG5vdCBzdG9yZSB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCByZXByZXNlbnRhdGlvbiAodW5jb21wcmVzc2VkCisgKiBzaXplIGlzIGVhc2lseSBhdmFpbGFibGUgYnkgZXhhbWluaW5nIHRoZSBwYWNrIGVudHJ5IGhlYWRlcikuICBJdCBpcworICogYWxzbyByYXRoZXIgZXhwZW5zaXZlIHRvIGZpbmQgdGhlIHNoYTEgZm9yIGFuIG9iamVjdCBnaXZlbiBpdHMgb2Zmc2V0LgorICoKKyAqIFdlIGJ1aWxkIGEgaGFzaHRhYmxlIG9mIGV4aXN0aW5nIHBhY2tzIChwYWNrX3JldmluZGV4KSwgYW5kIGtlZXAgcmV2ZXJzZQorICogaW5kZXggaGVyZSAtLSBwYWNrIGluZGV4IGZpbGUgaXMgc29ydGVkIGJ5IG9iamVjdCBuYW1lIG1hcHBpbmcgdG8gb2Zmc2V0OworICogdGhpcyBwYWNrX3JldmluZGV4W10ucmV2aW5kZXggYXJyYXkgaXMgYSBsaXN0IG9mIG9mZnNldC9pbmRleF9uciBwYWlycworICogb3JkZXJlZCBieSBvZmZzZXQsIHNvIGlmIHlvdSBrbm93IHRoZSBvZmZzZXQgb2YgYW4gb2JqZWN0LCBuZXh0IG9mZnNldAorICogaXMgd2hlcmUgaXRzIHBhY2tlZCByZXByZXNlbnRhdGlvbiBlbmRzIGFuZCB0aGUgaW5kZXhfbnIgY2FuIGJlIHVzZWQgdG8KKyAqIGdldCB0aGUgb2JqZWN0IHNoYTEgZnJvbSB0aGUgbWFpbiBpbmRleC4KKyAqLworCitzdGF0aWMgc3RydWN0IHBhY2tfcmV2aW5kZXggKnBhY2tfcmV2aW5kZXg7CitzdGF0aWMgaW50IHBhY2tfcmV2aW5kZXhfaGFzaHN6OworCitzdGF0aWMgaW50IHBhY2tfcmV2aW5kZXhfaXgoc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJdW5zaWduZWQgbG9uZyB1aSA9ICh1bnNpZ25lZCBsb25nKXA7CisJaW50IGk7CisKKwl1aSA9IHVpIF4gKHVpID4+IDE2KTsgLyogZGVmZWF0IHN0cnVjdHVyZSBhbGlnbm1lbnQgKi8KKwlpID0gKGludCkodWkgJSBwYWNrX3JldmluZGV4X2hhc2hzeik7CisJd2hpbGUgKHBhY2tfcmV2aW5kZXhbaV0ucCkgeworCQlpZiAocGFja19yZXZpbmRleFtpXS5wID09IHApCisJCQlyZXR1cm4gaTsKKwkJaWYgKCsraSA9PSBwYWNrX3JldmluZGV4X2hhc2hzeikKKwkJCWkgPSAwOworCX0KKwlyZXR1cm4gLTEgLSBpOworfQorCitzdGF0aWMgdm9pZCBpbml0X3BhY2tfcmV2aW5kZXgodm9pZCkKK3sKKwlpbnQgbnVtOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJZm9yIChudW0gPSAwLCBwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpCisJCW51bSsrOworCWlmICghbnVtKQorCQlyZXR1cm47CisJcGFja19yZXZpbmRleF9oYXNoc3ogPSBudW0gKiAxMTsKKwlwYWNrX3JldmluZGV4ID0geGNhbGxvYyhwYWNrX3JldmluZGV4X2hhc2hzeiwgc2l6ZW9mKCpwYWNrX3JldmluZGV4KSk7CisJZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJbnVtID0gcGFja19yZXZpbmRleF9peChwKTsKKwkJbnVtID0gLSAxIC0gbnVtOworCQlwYWNrX3JldmluZGV4W251bV0ucCA9IHA7CisJfQorCS8qIHJldmluZGV4IGVsZW1lbnRzIGFyZSBsYXppbHkgaW5pdGlhbGl6ZWQgKi8KK30KKworLyoKKyAqIFRoaXMgaXMgYSBsZWFzdC1zaWduaWZpY2FudC1kaWdpdCByYWRpeCBzb3J0LgorICoKKyAqIEl0IHNvcnRzIGVhY2ggb2YgdGhlICJuIiBpdGVtcyBpbiAiZW50cmllcyIgYnkgaXRzIG9mZnNldCBmaWVsZC4gVGhlICJtYXgiCisgKiBwYXJhbWV0ZXIgbXVzdCBiZSBhdCBsZWFzdCBhcyBsYXJnZSBhcyB0aGUgbGFyZ2VzdCBvZmZzZXQgaW4gdGhlIGFycmF5LAorICogYW5kIGxldHMgdXMgcXVpdCB0aGUgc29ydCBlYXJseS4KKyAqLworc3RhdGljIHZvaWQgc29ydF9yZXZpbmRleChzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKmVudHJpZXMsIHVuc2lnbmVkIG4sIG9mZl90IG1heCkKK3sKKwkvKgorCSAqIFdlIHVzZSBhICJkaWdpdCIgc2l6ZSBvZiAxNiBiaXRzLiBUaGF0IGtlZXBzIG91ciBtZW1vcnkKKwkgKiB1c2FnZSByZWFzb25hYmxlLCBhbmQgd2UgY2FuIGdlbmVyYWxseSAoZm9yIGEgNEcgb3Igc21hbGxlcgorCSAqIHBhY2tmaWxlKSBxdWl0IGFmdGVyIHR3byByb3VuZHMgb2YgcmFkaXgtc29ydGluZy4KKwkgKi8KKyNkZWZpbmUgRElHSVRfU0laRSAoMTYpCisjZGVmaW5lIEJVQ0tFVFMgKDEgPDwgRElHSVRfU0laRSkKKwkvKgorCSAqIFdlIHdhbnQgdG8ga25vdyB0aGUgYnVja2V0IHRoYXQgYVtpXSB3aWxsIGdvIGludG8gd2hlbiB3ZSBhcmUgdXNpbmcKKwkgKiB0aGUgZGlnaXQgdGhhdCBpcyBOIGJpdHMgZnJvbSB0aGUgKGxlYXN0IHNpZ25pZmljYW50KSBlbmQuCisJICovCisjZGVmaW5lIEJVQ0tFVF9GT1IoYSwgaSwgYml0cykgKCgoYSlbKGkpXS5vZmZzZXQgPj4gKGJpdHMpKSAmIChCVUNLRVRTLTEpKQorCisJLyoKKwkgKiBXZSBuZWVkIE8obikgdGVtcG9yYXJ5IHN0b3JhZ2UuIFJhdGhlciB0aGFuIGRvIGFuIGV4dHJhIGNvcHkgb2YgdGhlCisJICogcGFydGlhbCByZXN1bHRzIGludG8gImVudHJpZXMiLCB3ZSBzb3J0IGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlCisJICogcmVhbCBhcnJheSBhbmQgdGVtcG9yYXJ5IHN0b3JhZ2UuIEluIGVhY2ggaXRlcmF0aW9uIG9mIHRoZSBsb29wLCB3ZQorCSAqIGtlZXAgdHJhY2sgb2YgdGhlbSB3aXRoIGFsaWFzIHBvaW50ZXJzLCBhbHdheXMgc29ydGluZyBmcm9tICJmcm9tIgorCSAqIHRvICJ0byIuCisJICovCisJc3RydWN0IHJldmluZGV4X2VudHJ5ICp0bXAgPSB4bWFsbG9jKG4gKiBzaXplb2YoKnRtcCkpOworCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqZnJvbSA9IGVudHJpZXMsICp0byA9IHRtcDsKKwlpbnQgYml0czsKKwl1bnNpZ25lZCAqcG9zID0geG1hbGxvYyhCVUNLRVRTICogc2l6ZW9mKCpwb3MpKTsKKworCS8qCisJICogSWYgKG1heCA+PiBiaXRzKSBpcyB6ZXJvLCB0aGVuIHdlIGtub3cgdGhhdCB0aGUgcmFkaXggZGlnaXQgd2UgYXJlCisJICogb24gKGFuZCBhbnkgaGlnaGVyKSB3aWxsIGJlIHplcm8gZm9yIGFsbCBlbnRyaWVzLCBhbmQgb3VyIGxvb3Agd2lsbAorCSAqIGJlIGEgbm8tb3AsIGFzIGV2ZXJ5Ym9keSBsYW5kcyBpbiB0aGUgc2FtZSB6ZXJvLXRoIGJ1Y2tldC4KKwkgKi8KKwlmb3IgKGJpdHMgPSAwOyBtYXggPj4gYml0czsgYml0cyArPSBESUdJVF9TSVpFKSB7CisJCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqc3dhcDsKKwkJdW5zaWduZWQgaTsKKworCQltZW1zZXQocG9zLCAwLCBCVUNLRVRTICogc2l6ZW9mKCpwb3MpKTsKKworCQkvKgorCQkgKiBXZSB3YW50IHBvc1tpXSB0byBzdG9yZSB0aGUgaW5kZXggb2YgdGhlIGxhc3QgZWxlbWVudCB0aGF0CisJCSAqIHdpbGwgZ28gaW4gYnVja2V0ICJpIiAoYWN0dWFsbHkgb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudCkuCisJCSAqIFRvIGRvIHRoaXMsIHdlIGZpcnN0IGNvdW50IHRoZSBpdGVtcyB0aGF0IHdpbGwgZ28gaW4gZWFjaAorCQkgKiBidWNrZXQsIHdoaWNoIGdpdmVzIHVzIGEgcmVsYXRpdmUgb2Zmc2V0IGZyb20gdGhlIGxhc3QKKwkJICogYnVja2V0LiBXZSBjYW4gdGhlbiBjdW11bGF0aXZlbHkgYWRkIHRoZSBpbmRleCBmcm9tIHRoZQorCQkgKiBwcmV2aW91cyBidWNrZXQgdG8gZ2V0IHRoZSB0cnVlIGluZGV4LgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJCXBvc1tCVUNLRVRfRk9SKGZyb20sIGksIGJpdHMpXSsrOworCQlmb3IgKGkgPSAxOyBpIDwgQlVDS0VUUzsgaSsrKQorCQkJcG9zW2ldICs9IHBvc1tpLTFdOworCisJCS8qCisJCSAqIE5vdyB3ZSBjYW4gZHJvcCB0aGUgZWxlbWVudHMgaW50byB0aGVpciBjb3JyZWN0IGJ1Y2tldHMgKGluCisJCSAqIG91ciB0ZW1wb3JhcnkgYXJyYXkpLiAgV2UgaXRlcmF0ZSB0aGUgcG9zIGNvdW50ZXIgYmFja3dhcmRzCisJCSAqIHRvIGF2b2lkIHVzaW5nIGFuIGV4dHJhIGluZGV4IHRvIGNvdW50IHVwLiBBbmQgc2luY2Ugd2UgYXJlCisJCSAqIGdvaW5nIGJhY2t3YXJkcyB0aGVyZSwgd2UgbXVzdCBhbHNvIGdvIGJhY2t3YXJkcyB0aHJvdWdoIHRoZQorCQkgKiBhcnJheSBpdHNlbGYsIHRvIGtlZXAgdGhlIHNvcnQgc3RhYmxlLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgd2UgdXNlIGFuIHVuc2lnbmVkIGl0ZXJhdG9yIHRvIG1ha2Ugc3VyZSB3ZSBjYW4KKwkJICogaGFuZGxlIDJeMzItMSBvYmplY3RzLCBldmVuIG9uIGEgMzItYml0IHN5c3RlbS4gQnV0IHRoaXMKKwkJICogbWVhbnMgd2UgY2Fubm90IHVzZSB0aGUgbW9yZSBvYnZpb3VzICJpID49IDAiIGxvb3AgY29uZGl0aW9uCisJCSAqIGZvciBjb3VudGluZyBiYWNrd2FyZHMsIGFuZCBtdXN0IGluc3RlYWQgY2hlY2sgZm9yCisJCSAqIHdyYXAtYXJvdW5kIHdpdGggVUlOVF9NQVguCisJCSAqLworCQlmb3IgKGkgPSBuIC0gMTsgaSAhPSBVSU5UX01BWDsgaS0tKQorCQkJdG9bLS1wb3NbQlVDS0VUX0ZPUihmcm9tLCBpLCBiaXRzKV1dID0gZnJvbVtpXTsKKworCQkvKgorCQkgKiBOb3cgInRvIiBjb250YWlucyB0aGUgbW9zdCBzb3J0ZWQgbGlzdCwgc28gd2Ugc3dhcCAiZnJvbSIgYW5kCisJCSAqICJ0byIgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4KKwkJICovCisJCXN3YXAgPSBmcm9tOworCQlmcm9tID0gdG87CisJCXRvID0gc3dhcDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGVuZGVkIHdpdGggb3VyIGRhdGEgaW4gdGhlIG9yaWdpbmFsIGFycmF5LCBncmVhdC4gSWYgbm90LAorCSAqIHdlIGhhdmUgdG8gbW92ZSBpdCBiYWNrIGZyb20gdGhlIHRlbXBvcmFyeSBzdG9yYWdlLgorCSAqLworCWlmIChmcm9tICE9IGVudHJpZXMpCisJCW1lbWNweShlbnRyaWVzLCB0bXAsIG4gKiBzaXplb2YoKmVudHJpZXMpKTsKKwlmcmVlKHRtcCk7CisJZnJlZShwb3MpOworCisjdW5kZWYgQlVDS0VUX0ZPUgorI3VuZGVmIEJVQ0tFVFMKKyN1bmRlZiBESUdJVF9TSVpFCit9CisKKy8qCisgKiBPcmRlcmVkIGxpc3Qgb2Ygb2Zmc2V0cyBvZiBvYmplY3RzIGluIHRoZSBwYWNrLgorICovCitzdGF0aWMgdm9pZCBjcmVhdGVfcGFja19yZXZpbmRleChzdHJ1Y3QgcGFja19yZXZpbmRleCAqcml4KQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gcml4LT5wOworCXVuc2lnbmVkIG51bV9lbnQgPSBwLT5udW1fb2JqZWN0czsKKwl1bnNpZ25lZCBpOworCWNvbnN0IGNoYXIgKmluZGV4ID0gcC0+aW5kZXhfZGF0YTsKKworCXJpeC0+cmV2aW5kZXggPSB4bWFsbG9jKHNpemVvZigqcml4LT5yZXZpbmRleCkgKiAobnVtX2VudCArIDEpKTsKKwlpbmRleCArPSA0ICogMjU2OworCisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPiAxKSB7CisJCWNvbnN0IHVpbnQzMl90ICpvZmZfMzIgPQorCQkJKHVpbnQzMl90ICopKGluZGV4ICsgOCArIHAtPm51bV9vYmplY3RzICogKDIwICsgNCkpOworCQljb25zdCB1aW50MzJfdCAqb2ZmXzY0ID0gb2ZmXzMyICsgcC0+bnVtX29iamVjdHM7CisJCWZvciAoaSA9IDA7IGkgPCBudW1fZW50OyBpKyspIHsKKwkJCXVpbnQzMl90IG9mZiA9IG50b2hsKCpvZmZfMzIrKyk7CisJCQlpZiAoIShvZmYgJiAweDgwMDAwMDAwKSkgeworCQkJCXJpeC0+cmV2aW5kZXhbaV0ub2Zmc2V0ID0gb2ZmOworCQkJfSBlbHNlIHsKKwkJCQlyaXgtPnJldmluZGV4W2ldLm9mZnNldCA9CisJCQkJCSgodWludDY0X3QpbnRvaGwoKm9mZl82NCsrKSkgPDwgMzI7CisJCQkJcml4LT5yZXZpbmRleFtpXS5vZmZzZXQgfD0KKwkJCQkJbnRvaGwoKm9mZl82NCsrKTsKKwkJCX0KKwkJCXJpeC0+cmV2aW5kZXhbaV0ubnIgPSBpOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9lbnQ7IGkrKykgeworCQkJdWludDMyX3QgaGwgPSAqKCh1aW50MzJfdCAqKShpbmRleCArIDI0ICogaSkpOworCQkJcml4LT5yZXZpbmRleFtpXS5vZmZzZXQgPSBudG9obChobCk7CisJCQlyaXgtPnJldmluZGV4W2ldLm5yID0gaTsKKwkJfQorCX0KKworCS8qIFRoaXMga25vd3MgdGhlIHBhY2sgZm9ybWF0IC0tIHRoZSAyMC1ieXRlIHRyYWlsZXIKKwkgKiBmb2xsb3dzIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBsYXN0IG9iamVjdCBkYXRhLgorCSAqLworCXJpeC0+cmV2aW5kZXhbbnVtX2VudF0ub2Zmc2V0ID0gcC0+cGFja19zaXplIC0gMjA7CisJcml4LT5yZXZpbmRleFtudW1fZW50XS5uciA9IC0xOworCXNvcnRfcmV2aW5kZXgocml4LT5yZXZpbmRleCwgbnVtX2VudCwgcC0+cGFja19zaXplKTsKK30KKworc3RydWN0IHBhY2tfcmV2aW5kZXggKnJldmluZGV4X2Zvcl9wYWNrKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWludCBudW07CisJc3RydWN0IHBhY2tfcmV2aW5kZXggKnJpeDsKKworCWlmICghcGFja19yZXZpbmRleF9oYXNoc3opCisJCWluaXRfcGFja19yZXZpbmRleCgpOworCisJbnVtID0gcGFja19yZXZpbmRleF9peChwKTsKKwlpZiAobnVtIDwgMCkKKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogcGFjayByZXZpbmRleCBmdWJhciIpOworCisJcml4ID0gJnBhY2tfcmV2aW5kZXhbbnVtXTsKKwlpZiAoIXJpeC0+cmV2aW5kZXgpCisJCWNyZWF0ZV9wYWNrX3JldmluZGV4KHJpeCk7CisKKwlyZXR1cm4gcml4OworfQorCitpbnQgZmluZF9yZXZpbmRleF9wb3NpdGlvbihzdHJ1Y3QgcGFja19yZXZpbmRleCAqcHJpZHgsIG9mZl90IG9mcykKK3sKKwlpbnQgbG8gPSAwOworCWludCBoaSA9IHByaWR4LT5wLT5udW1fb2JqZWN0cyArIDE7CisJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpbmRleCA9IHByaWR4LT5yZXZpbmRleDsKKworCWRvIHsKKwkJdW5zaWduZWQgbWkgPSBsbyArIChoaSAtIGxvKSAvIDI7CisJCWlmIChyZXZpbmRleFttaV0ub2Zmc2V0ID09IG9mcykgeworCQkJcmV0dXJuIG1pOworCQl9IGVsc2UgaWYgKG9mcyA8IHJldmluZGV4W21pXS5vZmZzZXQpCisJCQloaSA9IG1pOworCQllbHNlCisJCQlsbyA9IG1pICsgMTsKKwl9IHdoaWxlIChsbyA8IGhpKTsKKworCWVycm9yKCJiYWQgb2Zmc2V0IGZvciByZXZpbmRleCIpOworCXJldHVybiAtMTsKK30KKworc3RydWN0IHJldmluZGV4X2VudHJ5ICpmaW5kX3BhY2tfcmV2aW5kZXgoc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IG9mcykKK3sKKwlzdHJ1Y3QgcGFja19yZXZpbmRleCAqcHJpZHggPSByZXZpbmRleF9mb3JfcGFjayhwKTsKKwlpbnQgcG9zID0gZmluZF9yZXZpbmRleF9wb3NpdGlvbihwcmlkeCwgb2ZzKTsKKworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBwcmlkeC0+cmV2aW5kZXggKyBwb3M7Cit9CmRpZmYgLS1naXQgYS9wYWNrLXJldmluZGV4LmggYi9wYWNrLXJldmluZGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDczN2Y5OAotLS0gL2Rldi9udWxsCisrKyBiL3BhY2stcmV2aW5kZXguaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIFBBQ0tfUkVWSU5ERVhfSAorI2RlZmluZSBQQUNLX1JFVklOREVYX0gKKworc3RydWN0IHJldmluZGV4X2VudHJ5IHsKKwlvZmZfdCBvZmZzZXQ7CisJdW5zaWduZWQgaW50IG5yOworfTsKKworc3RydWN0IHBhY2tfcmV2aW5kZXggeworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqcmV2aW5kZXg7Cit9OworCitzdHJ1Y3QgcGFja19yZXZpbmRleCAqcmV2aW5kZXhfZm9yX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnApOworaW50IGZpbmRfcmV2aW5kZXhfcG9zaXRpb24oc3RydWN0IHBhY2tfcmV2aW5kZXggKnByaWR4LCBvZmZfdCBvZnMpOworCitzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKmZpbmRfcGFja19yZXZpbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3Qgb2ZzKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9wYWNrLXdyaXRlLmMgYi9wYWNrLXdyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMyOTNjZQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2std3JpdGUuYwpAQCAtMCwwICsxLDM3MSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFjay5oIgorI2luY2x1ZGUgImNzdW0tZmlsZS5oIgorCit2b2lkIHJlc2V0X3BhY2tfaWR4X29wdGlvbihzdHJ1Y3QgcGFja19pZHhfb3B0aW9uICpvcHRzKQoreworCW1lbXNldChvcHRzLCAwLCBzaXplb2YoKm9wdHMpKTsKKwlvcHRzLT52ZXJzaW9uID0gMjsKKwlvcHRzLT5vZmYzMl9saW1pdCA9IDB4N2ZmZmZmZmY7Cit9CisKK3N0YXRpYyBpbnQgc2hhMV9jb21wYXJlKGNvbnN0IHZvaWQgKl9hLCBjb25zdCB2b2lkICpfYikKK3sKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKmEgPSAqKHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKilfYTsKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKmIgPSAqKHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKilfYjsKKwlyZXR1cm4gaGFzaGNtcChhLT5zaGExLCBiLT5zaGExKTsKK30KKworc3RhdGljIGludCBjbXBfdWludDMyKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwl1aW50MzJfdCBhID0gKigodWludDMyX3QgKilhXyk7CisJdWludDMyX3QgYiA9ICooKHVpbnQzMl90ICopYl8pOworCisJcmV0dXJuIChhIDwgYikgPyAtMSA6IChhICE9IGIpOworfQorCitzdGF0aWMgaW50IG5lZWRfbGFyZ2Vfb2Zmc2V0KG9mZl90IG9mZnNldCwgY29uc3Qgc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqb3B0cykKK3sKKwl1aW50MzJfdCBvZnN2YWw7CisKKwlpZiAoKG9mZnNldCA+PiAzMSkgfHwgKG9wdHMtPm9mZjMyX2xpbWl0IDwgb2Zmc2V0KSkKKwkJcmV0dXJuIDE7CisJaWYgKCFvcHRzLT5hbm9tYWx5X25yKQorCQlyZXR1cm4gMDsKKwlvZnN2YWwgPSBvZmZzZXQ7CisJcmV0dXJuICEhYnNlYXJjaCgmb2ZzdmFsLCBvcHRzLT5hbm9tYWx5LCBvcHRzLT5hbm9tYWx5X25yLAorCQkJIHNpemVvZihvZnN2YWwpLCBjbXBfdWludDMyKTsKK30KKworLyoKKyAqIE9uIGVudHJ5ICpzaGExIGNvbnRhaW5zIHRoZSBwYWNrIGNvbnRlbnQgU0hBMSBoYXNoLCBvbiBleGl0IGl0IGlzCisgKiB0aGUgU0hBMSBoYXNoIG9mIHNvcnRlZCBvYmplY3QgbmFtZXMuIFRoZSBvYmplY3RzIGFycmF5IHBhc3NlZCBpbgorICogd2lsbCBiZSBzb3J0ZWQgYnkgU0hBMSBvbiBleGl0LgorICovCitjb25zdCBjaGFyICp3cml0ZV9pZHhfZmlsZShjb25zdCBjaGFyICppbmRleF9uYW1lLCBzdHJ1Y3QgcGFja19pZHhfZW50cnkgKipvYmplY3RzLAorCQkJICAgaW50IG5yX29iamVjdHMsIGNvbnN0IHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKm9wdHMsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBzaGExZmlsZSAqZjsKKwlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKipzb3J0ZWRfYnlfc2hhLCAqKmxpc3QsICoqbGFzdDsKKwlvZmZfdCBsYXN0X29ial9vZmZzZXQgPSAwOworCXVpbnQzMl90IGFycmF5WzI1Nl07CisJaW50IGksIGZkOworCXVpbnQzMl90IGluZGV4X3ZlcnNpb247CisKKwlpZiAobnJfb2JqZWN0cykgeworCQlzb3J0ZWRfYnlfc2hhID0gb2JqZWN0czsKKwkJbGlzdCA9IHNvcnRlZF9ieV9zaGE7CisJCWxhc3QgPSBzb3J0ZWRfYnlfc2hhICsgbnJfb2JqZWN0czsKKwkJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7ICsraSkgeworCQkJaWYgKG9iamVjdHNbaV0tPm9mZnNldCA+IGxhc3Rfb2JqX29mZnNldCkKKwkJCQlsYXN0X29ial9vZmZzZXQgPSBvYmplY3RzW2ldLT5vZmZzZXQ7CisJCX0KKwkJcXNvcnQoc29ydGVkX2J5X3NoYSwgbnJfb2JqZWN0cywgc2l6ZW9mKHNvcnRlZF9ieV9zaGFbMF0pLAorCQkgICAgICBzaGExX2NvbXBhcmUpOworCX0KKwllbHNlCisJCXNvcnRlZF9ieV9zaGEgPSBsaXN0ID0gbGFzdCA9IE5VTEw7CisKKwlpZiAob3B0cy0+ZmxhZ3MgJiBXUklURV9JRFhfVkVSSUZZKSB7CisJCWFzc2VydChpbmRleF9uYW1lKTsKKwkJZiA9IHNoYTFmZF9jaGVjayhpbmRleF9uYW1lKTsKKwl9IGVsc2UgeworCQlpZiAoIWluZGV4X25hbWUpIHsKKwkJCXN0YXRpYyBjaGFyIHRtcF9maWxlW1BBVEhfTUFYXTsKKwkJCWZkID0gb2RiX21rc3RlbXAodG1wX2ZpbGUsIHNpemVvZih0bXBfZmlsZSksICJwYWNrL3RtcF9pZHhfWFhYWFhYIik7CisJCQlpbmRleF9uYW1lID0geHN0cmR1cCh0bXBfZmlsZSk7CisJCX0gZWxzZSB7CisJCQl1bmxpbmsoaW5kZXhfbmFtZSk7CisJCQlmZCA9IG9wZW4oaW5kZXhfbmFtZSwgT19DUkVBVHxPX0VYQ0x8T19XUk9OTFksIDA2MDApOworCQl9CisJCWlmIChmZCA8IDApCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byBjcmVhdGUgJyVzJyIsIGluZGV4X25hbWUpOworCQlmID0gc2hhMWZkKGZkLCBpbmRleF9uYW1lKTsKKwl9CisKKwkvKiBpZiBsYXN0IG9iamVjdCdzIG9mZnNldCBpcyA+PSAyXjMxIHdlIHNob3VsZCB1c2UgaW5kZXggVjIgKi8KKwlpbmRleF92ZXJzaW9uID0gbmVlZF9sYXJnZV9vZmZzZXQobGFzdF9vYmpfb2Zmc2V0LCBvcHRzKSA/IDIgOiBvcHRzLT52ZXJzaW9uOworCisJLyogaW5kZXggdmVyc2lvbnMgMiBhbmQgYWJvdmUgbmVlZCBhIGhlYWRlciAqLworCWlmIChpbmRleF92ZXJzaW9uID49IDIpIHsKKwkJc3RydWN0IHBhY2tfaWR4X2hlYWRlciBoZHI7CisJCWhkci5pZHhfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19JRFhfU0lHTkFUVVJFKTsKKwkJaGRyLmlkeF92ZXJzaW9uID0gaHRvbmwoaW5kZXhfdmVyc2lvbik7CisJCXNoYTF3cml0ZShmLCAmaGRyLCBzaXplb2YoaGRyKSk7CisJfQorCisJLyoKKwkgKiBXcml0ZSB0aGUgZmlyc3QtbGV2ZWwgdGFibGUgKHRoZSBsaXN0IGlzIHNvcnRlZCwKKwkgKiBidXQgd2UgdXNlIGEgMjU2LWVudHJ5IGxvb2t1cCB0byBiZSBhYmxlIHRvIGF2b2lkCisJICogaGF2aW5nIHRvIGRvIGVpZ2h0IGV4dHJhIGJpbmFyeSBzZWFyY2ggaXRlcmF0aW9ucykuCisJICovCisJZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKm5leHQgPSBsaXN0OworCQl3aGlsZSAobmV4dCA8IGxhc3QpIHsKKwkJCXN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqb2JqID0gKm5leHQ7CisJCQlpZiAob2JqLT5zaGExWzBdICE9IGkpCisJCQkJYnJlYWs7CisJCQluZXh0Kys7CisJCX0KKwkJYXJyYXlbaV0gPSBodG9ubChuZXh0IC0gc29ydGVkX2J5X3NoYSk7CisJCWxpc3QgPSBuZXh0OworCX0KKwlzaGExd3JpdGUoZiwgYXJyYXksIDI1NiAqIDQpOworCisJLyoKKwkgKiBXcml0ZSB0aGUgYWN0dWFsIFNIQTEgZW50cmllcy4uCisJICovCisJbGlzdCA9IHNvcnRlZF9ieV9zaGE7CisJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKm9iaiA9ICpsaXN0Kys7CisJCWlmIChpbmRleF92ZXJzaW9uIDwgMikgeworCQkJdWludDMyX3Qgb2Zmc2V0ID0gaHRvbmwob2JqLT5vZmZzZXQpOworCQkJc2hhMXdyaXRlKGYsICZvZmZzZXQsIDQpOworCQl9CisJCXNoYTF3cml0ZShmLCBvYmotPnNoYTEsIDIwKTsKKwkJaWYgKChvcHRzLT5mbGFncyAmIFdSSVRFX0lEWF9TVFJJQ1QpICYmCisJCSAgICAoaSAmJiAhaGFzaGNtcChsaXN0Wy0yXS0+c2hhMSwgb2JqLT5zaGExKSkpCisJCQlkaWUoIlRoZSBzYW1lIG9iamVjdCAlcyBhcHBlYXJzIHR3aWNlIGluIHRoZSBwYWNrIiwKKwkJCSAgICBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKKwl9CisKKwlpZiAoaW5kZXhfdmVyc2lvbiA+PSAyKSB7CisJCXVuc2lnbmVkIGludCBucl9sYXJnZV9vZmZzZXQgPSAwOworCisJCS8qIHdyaXRlIHRoZSBjcmMzMiB0YWJsZSAqLworCQlsaXN0ID0gc29ydGVkX2J5X3NoYTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQkJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICpvYmogPSAqbGlzdCsrOworCQkJdWludDMyX3QgY3JjMzJfdmFsID0gaHRvbmwob2JqLT5jcmMzMik7CisJCQlzaGExd3JpdGUoZiwgJmNyYzMyX3ZhbCwgNCk7CisJCX0KKworCQkvKiB3cml0ZSB0aGUgMzItYml0IG9mZnNldCB0YWJsZSAqLworCQlsaXN0ID0gc29ydGVkX2J5X3NoYTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX29iamVjdHM7IGkrKykgeworCQkJc3RydWN0IHBhY2tfaWR4X2VudHJ5ICpvYmogPSAqbGlzdCsrOworCQkJdWludDMyX3Qgb2Zmc2V0OworCisJCQlvZmZzZXQgPSAobmVlZF9sYXJnZV9vZmZzZXQob2JqLT5vZmZzZXQsIG9wdHMpCisJCQkJICA/ICgweDgwMDAwMDAwIHwgbnJfbGFyZ2Vfb2Zmc2V0KyspCisJCQkJICA6IG9iai0+b2Zmc2V0KTsKKwkJCW9mZnNldCA9IGh0b25sKG9mZnNldCk7CisJCQlzaGExd3JpdGUoZiwgJm9mZnNldCwgNCk7CisJCX0KKworCQkvKiB3cml0ZSB0aGUgbGFyZ2Ugb2Zmc2V0IHRhYmxlICovCisJCWxpc3QgPSBzb3J0ZWRfYnlfc2hhOworCQl3aGlsZSAobnJfbGFyZ2Vfb2Zmc2V0KSB7CisJCQlzdHJ1Y3QgcGFja19pZHhfZW50cnkgKm9iaiA9ICpsaXN0Kys7CisJCQl1aW50NjRfdCBvZmZzZXQgPSBvYmotPm9mZnNldDsKKwkJCXVpbnQzMl90IHNwbGl0WzJdOworCisJCQlpZiAoIW5lZWRfbGFyZ2Vfb2Zmc2V0KG9mZnNldCwgb3B0cykpCisJCQkJY29udGludWU7CisJCQlzcGxpdFswXSA9IGh0b25sKG9mZnNldCA+PiAzMik7CisJCQlzcGxpdFsxXSA9IGh0b25sKG9mZnNldCAmIDB4ZmZmZmZmZmYpOworCQkJc2hhMXdyaXRlKGYsIHNwbGl0LCA4KTsKKwkJCW5yX2xhcmdlX29mZnNldC0tOworCQl9CisJfQorCisJc2hhMXdyaXRlKGYsIHNoYTEsIDIwKTsKKwlzaGExY2xvc2UoZiwgTlVMTCwgKChvcHRzLT5mbGFncyAmIFdSSVRFX0lEWF9WRVJJRlkpCisJCQkgICAgPyBDU1VNX0NMT1NFIDogQ1NVTV9GU1lOQykpOworCXJldHVybiBpbmRleF9uYW1lOworfQorCitvZmZfdCB3cml0ZV9wYWNrX2hlYWRlcihzdHJ1Y3Qgc2hhMWZpbGUgKmYsIHVpbnQzMl90IG5yX2VudHJpZXMpCit7CisJc3RydWN0IHBhY2tfaGVhZGVyIGhkcjsKKworCWhkci5oZHJfc2lnbmF0dXJlID0gaHRvbmwoUEFDS19TSUdOQVRVUkUpOworCWhkci5oZHJfdmVyc2lvbiA9IGh0b25sKFBBQ0tfVkVSU0lPTik7CisJaGRyLmhkcl9lbnRyaWVzID0gaHRvbmwobnJfZW50cmllcyk7CisJc2hhMXdyaXRlKGYsICZoZHIsIHNpemVvZihoZHIpKTsKKwlyZXR1cm4gc2l6ZW9mKGhkcik7Cit9CisKKy8qCisgKiBVcGRhdGUgcGFjayBoZWFkZXIgd2l0aCBvYmplY3RfY291bnQgYW5kIGNvbXB1dGUgbmV3IFNIQTEgZm9yIHBhY2sgZGF0YQorICogYXNzb2NpYXRlZCB0byBwYWNrX2ZkLCBhbmQgd3JpdGUgdGhhdCBTSEExIGF0IHRoZSBlbmQuICBUaGF0IG5ldyBTSEExCisgKiBpcyBhbHNvIHJldHVybmVkIGluIG5ld19wYWNrX3NoYTEuCisgKgorICogSWYgcGFydGlhbF9wYWNrX3NoYTEgaXMgbm9uIG51bGwsIHRoZW4gdGhlIFNIQTEgb2YgdGhlIGV4aXN0aW5nIHBhY2sKKyAqICh3aXRob3V0IHRoZSBoZWFkZXIgdXBkYXRlKSBpcyBjb21wdXRlZCBhbmQgdmFsaWRhdGVkIGFnYWluc3QgdGhlCisgKiBvbmUgcHJvdmlkZWQgaW4gcGFydGlhbF9wYWNrX3NoYTEuICBUaGUgdmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQgYXQKKyAqIHBhcnRpYWxfcGFja19vZmZzZXQgYnl0ZXMgaW4gdGhlIHBhY2sgZmlsZS4gIFRoZSBTSEExIG9mIHRoZSByZW1haW5pbmcKKyAqIGRhdGEgKGkuZS4gZnJvbSBwYXJ0aWFsX3BhY2tfb2Zmc2V0IHRvIHRoZSBlbmQpIGlzIHRoZW4gY29tcHV0ZWQgYW5kCisgKiByZXR1cm5lZCBpbiBwYXJ0aWFsX3BhY2tfc2hhMS4KKyAqCisgKiBOb3RlIHRoYXQgbmV3X3BhY2tfc2hhMSBpcyB1cGRhdGVkIGxhc3QsIHNvIGJvdGggbmV3X3BhY2tfc2hhMSBhbmQKKyAqIHBhcnRpYWxfcGFja19zaGExIGNhbiByZWZlciB0byB0aGUgc2FtZSBidWZmZXIgaWYgdGhlIGNhbGxlciBpcyBub3QKKyAqIGludGVyZXN0ZWQgaW4gdGhlIHJlc3VsdGluZyBTSEExIG9mIHBhY2sgZGF0YSBhYm92ZSBwYXJ0aWFsX3BhY2tfb2Zmc2V0LgorICovCit2b2lkIGZpeHVwX3BhY2tfaGVhZGVyX2Zvb3RlcihpbnQgcGFja19mZCwKKwkJCSB1bnNpZ25lZCBjaGFyICpuZXdfcGFja19zaGExLAorCQkJIGNvbnN0IGNoYXIgKnBhY2tfbmFtZSwKKwkJCSB1aW50MzJfdCBvYmplY3RfY291bnQsCisJCQkgdW5zaWduZWQgY2hhciAqcGFydGlhbF9wYWNrX3NoYTEsCisJCQkgb2ZmX3QgcGFydGlhbF9wYWNrX29mZnNldCkKK3sKKwlpbnQgYWxpZ25lZF9zeiwgYnVmX3N6ID0gOCAqIDEwMjQ7CisJZ2l0X1NIQV9DVFggb2xkX3NoYTFfY3R4LCBuZXdfc2hhMV9jdHg7CisJc3RydWN0IHBhY2tfaGVhZGVyIGhkcjsKKwljaGFyICpidWY7CisKKwlnaXRfU0hBMV9Jbml0KCZvbGRfc2hhMV9jdHgpOworCWdpdF9TSEExX0luaXQoJm5ld19zaGExX2N0eCk7CisKKwlpZiAobHNlZWsocGFja19mZCwgMCwgU0VFS19TRVQpICE9IDApCisJCWRpZV9lcnJubygiRmFpbGVkIHNlZWtpbmcgdG8gc3RhcnQgb2YgJyVzJyIsIHBhY2tfbmFtZSk7CisJaWYgKHJlYWRfaW5fZnVsbChwYWNrX2ZkLCAmaGRyLCBzaXplb2YoaGRyKSkgIT0gc2l6ZW9mKGhkcikpCisJCWRpZV9lcnJubygiVW5hYmxlIHRvIHJlcmVhZCBoZWFkZXIgb2YgJyVzJyIsIHBhY2tfbmFtZSk7CisJaWYgKGxzZWVrKHBhY2tfZmQsIDAsIFNFRUtfU0VUKSAhPSAwKQorCQlkaWVfZXJybm8oIkZhaWxlZCBzZWVraW5nIHRvIHN0YXJ0IG9mICclcyciLCBwYWNrX25hbWUpOworCWdpdF9TSEExX1VwZGF0ZSgmb2xkX3NoYTFfY3R4LCAmaGRyLCBzaXplb2YoaGRyKSk7CisJaGRyLmhkcl9lbnRyaWVzID0gaHRvbmwob2JqZWN0X2NvdW50KTsKKwlnaXRfU0hBMV9VcGRhdGUoJm5ld19zaGExX2N0eCwgJmhkciwgc2l6ZW9mKGhkcikpOworCXdyaXRlX29yX2RpZShwYWNrX2ZkLCAmaGRyLCBzaXplb2YoaGRyKSk7CisJcGFydGlhbF9wYWNrX29mZnNldCAtPSBzaXplb2YoaGRyKTsKKworCWJ1ZiA9IHhtYWxsb2MoYnVmX3N6KTsKKwlhbGlnbmVkX3N6ID0gYnVmX3N6IC0gc2l6ZW9mKGhkcik7CisJZm9yICg7OykgeworCQlzc2l6ZV90IG0sIG47CisJCW0gPSAocGFydGlhbF9wYWNrX3NoYTEgJiYgcGFydGlhbF9wYWNrX29mZnNldCA8IGFsaWduZWRfc3opID8KKwkJCXBhcnRpYWxfcGFja19vZmZzZXQgOiBhbGlnbmVkX3N6OworCQluID0geHJlYWQocGFja19mZCwgYnVmLCBtKTsKKwkJaWYgKCFuKQorCQkJYnJlYWs7CisJCWlmIChuIDwgMCkKKwkJCWRpZV9lcnJubygiRmFpbGVkIHRvIGNoZWNrc3VtICclcyciLCBwYWNrX25hbWUpOworCQlnaXRfU0hBMV9VcGRhdGUoJm5ld19zaGExX2N0eCwgYnVmLCBuKTsKKworCQlhbGlnbmVkX3N6IC09IG47CisJCWlmICghYWxpZ25lZF9zeikKKwkJCWFsaWduZWRfc3ogPSBidWZfc3o7CisKKwkJaWYgKCFwYXJ0aWFsX3BhY2tfc2hhMSkKKwkJCWNvbnRpbnVlOworCisJCWdpdF9TSEExX1VwZGF0ZSgmb2xkX3NoYTFfY3R4LCBidWYsIG4pOworCQlwYXJ0aWFsX3BhY2tfb2Zmc2V0IC09IG47CisJCWlmIChwYXJ0aWFsX3BhY2tfb2Zmc2V0ID09IDApIHsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCQlnaXRfU0hBMV9GaW5hbChzaGExLCAmb2xkX3NoYTFfY3R4KTsKKwkJCWlmIChoYXNoY21wKHNoYTEsIHBhcnRpYWxfcGFja19zaGExKSAhPSAwKQorCQkJCWRpZSgiVW5leHBlY3RlZCBjaGVja3N1bSBmb3IgJXMgIgorCQkJCSAgICAiKGRpc2sgY29ycnVwdGlvbj8pIiwgcGFja19uYW1lKTsKKwkJCS8qCisJCQkgKiBOb3cgbGV0J3MgY29tcHV0ZSB0aGUgU0hBMSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZQorCQkJICogcGFjaywgd2hpY2ggYWxzbyBtZWFucyBtYWtpbmcgcGFydGlhbF9wYWNrX29mZnNldAorCQkJICogYmlnIGVub3VnaCBub3QgdG8gbWF0dGVyIGFueW1vcmUuCisJCQkgKi8KKwkJCWdpdF9TSEExX0luaXQoJm9sZF9zaGExX2N0eCk7CisJCQlwYXJ0aWFsX3BhY2tfb2Zmc2V0ID0gfnBhcnRpYWxfcGFja19vZmZzZXQ7CisJCQlwYXJ0aWFsX3BhY2tfb2Zmc2V0IC09IE1TQihwYXJ0aWFsX3BhY2tfb2Zmc2V0LCAxKTsKKwkJfQorCX0KKwlmcmVlKGJ1Zik7CisKKwlpZiAocGFydGlhbF9wYWNrX3NoYTEpCisJCWdpdF9TSEExX0ZpbmFsKHBhcnRpYWxfcGFja19zaGExLCAmb2xkX3NoYTFfY3R4KTsKKwlnaXRfU0hBMV9GaW5hbChuZXdfcGFja19zaGExLCAmbmV3X3NoYTFfY3R4KTsKKwl3cml0ZV9vcl9kaWUocGFja19mZCwgbmV3X3BhY2tfc2hhMSwgMjApOworCWZzeW5jX29yX2RpZShwYWNrX2ZkLCBwYWNrX25hbWUpOworfQorCitjaGFyICppbmRleF9wYWNrX2xvY2tmaWxlKGludCBpcF9vdXQpCit7CisJY2hhciBwYWNrbmFtZVs0Nl07CisKKwkvKgorCSAqIFRoZSBmaXJzdCB0aGluZyB3ZSBleHBlY3QgZnJvbSBpbmRleC1wYWNrJ3Mgb3V0cHV0CisJICogaXMgInBhY2tcdCU0MHNcbiIgb3IgImtlZXBcdCU0MHNcbiIgKDQ2IGJ5dGVzKSB3aGVyZQorCSAqICU0MHMgaXMgdGhlIG5ld2x5IGNyZWF0ZWQgcGFjayBTSEExIG5hbWUuICBJbiB0aGUgImtlZXAiCisJICogY2FzZSwgd2UgbmVlZCBpdCB0byByZW1vdmUgdGhlIGNvcnJlc3BvbmRpbmcgLmtlZXAgZmlsZQorCSAqIGxhdGVyIG9uLiAgSWYgd2UgZG9uJ3QgZ2V0IHRoYXQgdGhlbiB0b3VnaCBsdWNrIHdpdGggaXQuCisJICovCisJaWYgKHJlYWRfaW5fZnVsbChpcF9vdXQsIHBhY2tuYW1lLCA0NikgPT0gNDYgJiYgcGFja25hbWVbNDVdID09ICdcbicpIHsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJcGFja25hbWVbNDVdID0gMDsKKwkJaWYgKHNraXBfcHJlZml4KHBhY2tuYW1lLCAia2VlcFx0IiwgJm5hbWUpKQorCQkJcmV0dXJuIHhzdHJmbXQoIiVzL3BhY2svcGFjay0lcy5rZWVwIiwKKwkJCQkgICAgICAgZ2V0X29iamVjdF9kaXJlY3RvcnkoKSwgbmFtZSk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogVGhlIHBlci1vYmplY3QgaGVhZGVyIGlzIGEgcHJldHR5IGRlbnNlIHRoaW5nLCB3aGljaCBpcworICogIC0gZmlyc3QgYnl0ZTogbG93IGZvdXIgYml0cyBhcmUgInNpemUiLCB0aGVuIHRocmVlIGJpdHMgb2YgInR5cGUiLAorICogICAgYW5kIHRoZSBoaWdoIGJpdCBpcyAic2l6ZSBjb250aW51ZXMiLgorICogIC0gZWFjaCBieXRlIGFmdGVyd2FyZHM6IGxvdyBzZXZlbiBiaXRzIGFyZSBzaXplIGNvbnRpbnVhdGlvbiwKKyAqICAgIHdpdGggdGhlIGhpZ2ggYml0IGJlaW5nICJzaXplIGNvbnRpbnVlcyIKKyAqLworaW50IGVuY29kZV9pbl9wYWNrX29iamVjdF9oZWFkZXIoZW51bSBvYmplY3RfdHlwZSB0eXBlLCB1aW50bWF4X3Qgc2l6ZSwgdW5zaWduZWQgY2hhciAqaGRyKQoreworCWludCBuID0gMTsKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlpZiAodHlwZSA8IE9CSl9DT01NSVQgfHwgdHlwZSA+IE9CSl9SRUZfREVMVEEpCisJCWRpZSgiYmFkIHR5cGUgJWQiLCB0eXBlKTsKKworCWMgPSAodHlwZSA8PCA0KSB8IChzaXplICYgMTUpOworCXNpemUgPj49IDQ7CisJd2hpbGUgKHNpemUpIHsKKwkJKmhkcisrID0gYyB8IDB4ODA7CisJCWMgPSBzaXplICYgMHg3ZjsKKwkJc2l6ZSA+Pj0gNzsKKwkJbisrOworCX0KKwkqaGRyID0gYzsKKwlyZXR1cm4gbjsKK30KKworc3RydWN0IHNoYTFmaWxlICpjcmVhdGVfdG1wX3BhY2tmaWxlKGNoYXIgKipwYWNrX3RtcF9uYW1lKQoreworCWNoYXIgdG1wbmFtZVtQQVRIX01BWF07CisJaW50IGZkOworCisJZmQgPSBvZGJfbWtzdGVtcCh0bXBuYW1lLCBzaXplb2YodG1wbmFtZSksICJwYWNrL3RtcF9wYWNrX1hYWFhYWCIpOworCSpwYWNrX3RtcF9uYW1lID0geHN0cmR1cCh0bXBuYW1lKTsKKwlyZXR1cm4gc2hhMWZkKGZkLCAqcGFja190bXBfbmFtZSk7Cit9CisKK3ZvaWQgZmluaXNoX3RtcF9wYWNrZmlsZShzdHJ1Y3Qgc3RyYnVmICpuYW1lX2J1ZmZlciwKKwkJCSBjb25zdCBjaGFyICpwYWNrX3RtcF9uYW1lLAorCQkJIHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKndyaXR0ZW5fbGlzdCwKKwkJCSB1aW50MzJfdCBucl93cml0dGVuLAorCQkJIHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKnBhY2tfaWR4X29wdHMsCisJCQkgdW5zaWduZWQgY2hhciBzaGExW10pCit7CisJY29uc3QgY2hhciAqaWR4X3RtcF9uYW1lOworCWludCBiYXNlbmFtZV9sZW4gPSBuYW1lX2J1ZmZlci0+bGVuOworCisJaWYgKGFkanVzdF9zaGFyZWRfcGVybShwYWNrX3RtcF9uYW1lKSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gbWFrZSB0ZW1wb3JhcnkgcGFjayBmaWxlIHJlYWRhYmxlIik7CisKKwlpZHhfdG1wX25hbWUgPSB3cml0ZV9pZHhfZmlsZShOVUxMLCB3cml0dGVuX2xpc3QsIG5yX3dyaXR0ZW4sCisJCQkJICAgICAgcGFja19pZHhfb3B0cywgc2hhMSk7CisJaWYgKGFkanVzdF9zaGFyZWRfcGVybShpZHhfdG1wX25hbWUpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBtYWtlIHRlbXBvcmFyeSBpbmRleCBmaWxlIHJlYWRhYmxlIik7CisKKwlzdHJidWZfYWRkZihuYW1lX2J1ZmZlciwgIiVzLnBhY2siLCBzaGExX3RvX2hleChzaGExKSk7CisJZnJlZV9wYWNrX2J5X25hbWUobmFtZV9idWZmZXItPmJ1Zik7CisKKwlpZiAocmVuYW1lKHBhY2tfdG1wX25hbWUsIG5hbWVfYnVmZmVyLT5idWYpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byByZW5hbWUgdGVtcG9yYXJ5IHBhY2sgZmlsZSIpOworCisJc3RyYnVmX3NldGxlbihuYW1lX2J1ZmZlciwgYmFzZW5hbWVfbGVuKTsKKworCXN0cmJ1Zl9hZGRmKG5hbWVfYnVmZmVyLCAiJXMuaWR4Iiwgc2hhMV90b19oZXgoc2hhMSkpOworCWlmIChyZW5hbWUoaWR4X3RtcF9uYW1lLCBuYW1lX2J1ZmZlci0+YnVmKSkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gcmVuYW1lIHRlbXBvcmFyeSBpbmRleCBmaWxlIik7CisKKwlzdHJidWZfc2V0bGVuKG5hbWVfYnVmZmVyLCBiYXNlbmFtZV9sZW4pOworCisJZnJlZSgodm9pZCAqKWlkeF90bXBfbmFtZSk7Cit9CmRpZmYgLS1naXQgYS9wYWNrLmggYi9wYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIyM2Y1YQotLS0gL2Rldi9udWxsCisrKyBiL3BhY2suaApAQCAtMCwwICsxLDk2IEBACisjaWZuZGVmIFBBQ0tfSAorI2RlZmluZSBQQUNLX0gKKworI2luY2x1ZGUgIm9iamVjdC5oIgorI2luY2x1ZGUgImNzdW0tZmlsZS5oIgorCisvKgorICogUGFja2VkIG9iamVjdCBoZWFkZXIKKyAqLworI2RlZmluZSBQQUNLX1NJR05BVFVSRSAweDUwNDE0MzRiCS8qICJQQUNLIiAqLworI2RlZmluZSBQQUNLX1ZFUlNJT04gMgorI2RlZmluZSBwYWNrX3ZlcnNpb25fb2sodikgKCh2KSA9PSBodG9ubCgyKSB8fCAodikgPT0gaHRvbmwoMykpCitzdHJ1Y3QgcGFja19oZWFkZXIgeworCXVpbnQzMl90IGhkcl9zaWduYXR1cmU7CisJdWludDMyX3QgaGRyX3ZlcnNpb247CisJdWludDMyX3QgaGRyX2VudHJpZXM7Cit9OworCisvKgorICogVGhlIGZpcnN0IGZvdXIgYnl0ZXMgb2YgaW5kZXggZm9ybWF0cyBsYXRlciB0aGFuIHZlcnNpb24gMSBzaG91bGQKKyAqIHN0YXJ0IHdpdGggdGhpcyBzaWduYXR1cmUsIGFzIGFsbCBvbGRlciBnaXQgYmluYXJpZXMgd291bGQgZmluZCB0aGlzCisgKiB2YWx1ZSBpbGxlZ2FsIGFuZCBhYm9ydCByZWFkaW5nIHRoZSBmaWxlLgorICoKKyAqIFRoaXMgaXMgdGhlIGNhc2UgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gYSBwYWNrZmlsZQorICogY2Fubm90IGV4Y2VlZCAxLDQzMSw2NjAsMDAwIGFzIGV2ZXJ5IG9iamVjdCB3b3VsZCBuZWVkIGF0IGxlYXN0CisgKiAzIGJ5dGVzIG9mIGRhdGEgYW5kIHRoZSBvdmVyYWxsIHBhY2tmaWxlIGNhbm5vdCBleGNlZWQgNCBHaUIgd2l0aAorICogdmVyc2lvbiAxIG9mIHRoZSBpbmRleCBmaWxlIGR1ZSB0byB0aGUgb2Zmc2V0cyBsaW1pdGVkIHRvIDMyIGJpdHMuCisgKiBDbGVhcmx5IHRoZSBzaWduYXR1cmUgZXhjZWVkcyB0aGlzIG1heGltdW0uCisgKgorICogVmVyeSBvbGQgZ2l0IGJpbmFyaWVzIHdpbGwgYWxzbyBjb21wYXJlIHRoZSBmaXJzdCA0IGJ5dGVzIHRvIHRoZQorICogbmV4dCA0IGJ5dGVzIGluIHRoZSBpbmRleCBhbmQgYWJvcnQgd2l0aCBhICJub24tbW9ub3RvbmljIGluZGV4IgorICogZXJyb3IgaWYgdGhlIHNlY29uZCA0IGJ5dGUgd29yZCBpcyBzbWFsbGVyIHRoYW4gdGhlIGZpcnN0IDQKKyAqIGJ5dGUgd29yZC4gIFRoaXMgd291bGQgYmUgdHJ1ZSBpbiB0aGUgcHJvcG9zZWQgZnV0dXJlIGluZGV4CisgKiBmb3JtYXQgYXMgaWR4X3NpZ25hdHVyZSB3b3VsZCBiZSBncmVhdGVyIHRoYW4gaWR4X3ZlcnNpb24uCisgKi8KKyNkZWZpbmUgUEFDS19JRFhfU0lHTkFUVVJFIDB4ZmY3NDRmNjMJLyogIlwzNzd0T2MiICovCisKK3N0cnVjdCBwYWNrX2lkeF9vcHRpb24geworCXVuc2lnbmVkIGZsYWdzOworCS8qIGZsYWcgYml0cyAqLworI2RlZmluZSBXUklURV9JRFhfVkVSSUZZIDAxIC8qIHZlcmlmeSBvbmx5LCBkbyBub3Qgd3JpdGUgdGhlIGlkeCBmaWxlICovCisjZGVmaW5lIFdSSVRFX0lEWF9TVFJJQ1QgMDIKKworCXVpbnQzMl90IHZlcnNpb247CisJdWludDMyX3Qgb2ZmMzJfbGltaXQ7CisKKwkvKgorCSAqIExpc3Qgb2Ygb2Zmc2V0cyB0aGF0IHdvdWxkIGZpdCB3aXRoaW4gb2ZmMzJfbGltaXQgYnV0CisJICogbmVlZCB0byBiZSB3cml0dGVuIG91dCBhcyA2NC1iaXQgZW50aXR5IGZvciBieXRlLWZvci1ieXRlCisJICogdmVyaWZpY2F0aW9uLgorCSAqLworCWludCBhbm9tYWx5X2FsbG9jLCBhbm9tYWx5X25yOworCXVpbnQzMl90ICphbm9tYWx5OworfTsKKworZXh0ZXJuIHZvaWQgcmVzZXRfcGFja19pZHhfb3B0aW9uKHN0cnVjdCBwYWNrX2lkeF9vcHRpb24gKik7CisKKy8qCisgKiBQYWNrZWQgb2JqZWN0IGluZGV4IGhlYWRlcgorICovCitzdHJ1Y3QgcGFja19pZHhfaGVhZGVyIHsKKwl1aW50MzJfdCBpZHhfc2lnbmF0dXJlOworCXVpbnQzMl90IGlkeF92ZXJzaW9uOworfTsKKworLyoKKyAqIENvbW1vbiBwYXJ0IG9mIG9iamVjdCBzdHJ1Y3R1cmUgdXNlZCBmb3Igd3JpdGVfaWR4X2ZpbGUKKyAqLworc3RydWN0IHBhY2tfaWR4X2VudHJ5IHsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXVpbnQzMl90IGNyYzMyOworCW9mZl90IG9mZnNldDsKK307CisKKworc3RydWN0IHByb2dyZXNzOwordHlwZWRlZiBpbnQgKCp2ZXJpZnlfZm4pKGNvbnN0IHVuc2lnbmVkIGNoYXIqLCBlbnVtIG9iamVjdF90eXBlLCB1bnNpZ25lZCBsb25nLCB2b2lkKiwgaW50Kik7CisKK2V4dGVybiBjb25zdCBjaGFyICp3cml0ZV9pZHhfZmlsZShjb25zdCBjaGFyICppbmRleF9uYW1lLCBzdHJ1Y3QgcGFja19pZHhfZW50cnkgKipvYmplY3RzLCBpbnQgbnJfb2JqZWN0cywgY29uc3Qgc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK2V4dGVybiBpbnQgY2hlY2tfcGFja19jcmMoc3RydWN0IHBhY2tlZF9naXQgKnAsIHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3Vycywgb2ZmX3Qgb2Zmc2V0LCBvZmZfdCBsZW4sIHVuc2lnbmVkIGludCBucik7CitleHRlcm4gaW50IHZlcmlmeV9wYWNrX2luZGV4KHN0cnVjdCBwYWNrZWRfZ2l0ICopOworZXh0ZXJuIGludCB2ZXJpZnlfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqLCB2ZXJpZnlfZm4gZm4sIHN0cnVjdCBwcm9ncmVzcyAqLCB1aW50MzJfdCk7CitleHRlcm4gb2ZmX3Qgd3JpdGVfcGFja19oZWFkZXIoc3RydWN0IHNoYTFmaWxlICpmLCB1aW50MzJfdCk7CitleHRlcm4gdm9pZCBmaXh1cF9wYWNrX2hlYWRlcl9mb290ZXIoaW50LCB1bnNpZ25lZCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdWludDMyX3QsIHVuc2lnbmVkIGNoYXIgKiwgb2ZmX3QpOworZXh0ZXJuIGNoYXIgKmluZGV4X3BhY2tfbG9ja2ZpbGUoaW50IGZkKTsKK2V4dGVybiBpbnQgZW5jb2RlX2luX3BhY2tfb2JqZWN0X2hlYWRlcihlbnVtIG9iamVjdF90eXBlLCB1aW50bWF4X3QsIHVuc2lnbmVkIGNoYXIgKik7CisKKyNkZWZpbmUgUEhfRVJST1JfRU9GCQkoLTEpCisjZGVmaW5lIFBIX0VSUk9SX1BBQ0tfU0lHTkFUVVJFCSgtMikKKyNkZWZpbmUgUEhfRVJST1JfUFJPVE9DT0wJKC0zKQorZXh0ZXJuIGludCByZWFkX3BhY2tfaGVhZGVyKGludCBmZCwgc3RydWN0IHBhY2tfaGVhZGVyICopOworCitleHRlcm4gc3RydWN0IHNoYTFmaWxlICpjcmVhdGVfdG1wX3BhY2tmaWxlKGNoYXIgKipwYWNrX3RtcF9uYW1lKTsKK2V4dGVybiB2b2lkIGZpbmlzaF90bXBfcGFja2ZpbGUoc3RydWN0IHN0cmJ1ZiAqbmFtZV9idWZmZXIsIGNvbnN0IGNoYXIgKnBhY2tfdG1wX25hbWUsIHN0cnVjdCBwYWNrX2lkeF9lbnRyeSAqKndyaXR0ZW5fbGlzdCwgdWludDMyX3QgbnJfd3JpdHRlbiwgc3RydWN0IHBhY2tfaWR4X29wdGlvbiAqcGFja19pZHhfb3B0cywgdW5zaWduZWQgY2hhciBzaGExW10pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3BhZ2VyLmMgYi9wYWdlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0MjUwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9wYWdlci5jCkBAIC0wLDAgKzEsMTc1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisKKyNpZm5kZWYgREVGQVVMVF9QQUdFUgorI2RlZmluZSBERUZBVUxUX1BBR0VSICJsZXNzIgorI2VuZGlmCisKKy8qCisgKiBUaGlzIGlzIHNwbGl0IHVwIGZyb20gdGhlIHJlc3Qgb2YgZ2l0IHNvIHRoYXQgd2UgY2FuIGRvCisgKiBzb21ldGhpbmcgZGlmZmVyZW50IG9uIFdpbmRvd3MuCisgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKnBhZ2VyX2FyZ3ZbXSA9IHsgTlVMTCwgTlVMTCB9Oworc3RhdGljIHN0cnVjdCBjaGlsZF9wcm9jZXNzIHBhZ2VyX3Byb2Nlc3MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3BhZ2VyKGludCBpbl9zaWduYWwpCit7CisJaWYgKCFpbl9zaWduYWwpIHsKKwkJZmZsdXNoKHN0ZG91dCk7CisJCWZmbHVzaChzdGRlcnIpOworCX0KKwkvKiBzaWduYWwgRU9GIHRvIHBhZ2VyICovCisJY2xvc2UoMSk7CisJY2xvc2UoMik7CisJaWYgKGluX3NpZ25hbCkKKwkJZmluaXNoX2NvbW1hbmRfaW5fc2lnbmFsKCZwYWdlcl9wcm9jZXNzKTsKKwllbHNlCisJCWZpbmlzaF9jb21tYW5kKCZwYWdlcl9wcm9jZXNzKTsKK30KKworc3RhdGljIHZvaWQgd2FpdF9mb3JfcGFnZXJfYXRleGl0KHZvaWQpCit7CisJd2FpdF9mb3JfcGFnZXIoMCk7Cit9CisKK3N0YXRpYyB2b2lkIHdhaXRfZm9yX3BhZ2VyX3NpZ25hbChpbnQgc2lnbm8pCit7CisJd2FpdF9mb3JfcGFnZXIoMSk7CisJc2lnY2hhaW5fcG9wKHNpZ25vKTsKKwlyYWlzZShzaWdubyk7Cit9CisKK2NvbnN0IGNoYXIgKmdpdF9wYWdlcihpbnQgc3Rkb3V0X2lzX3R0eSkKK3sKKwljb25zdCBjaGFyICpwYWdlcjsKKworCWlmICghc3Rkb3V0X2lzX3R0eSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwYWdlciA9IGdldGVudigiR0lUX1BBR0VSIik7CisJaWYgKCFwYWdlcikgeworCQlpZiAoIXBhZ2VyX3Byb2dyYW0pCisJCQlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7CisJCXBhZ2VyID0gcGFnZXJfcHJvZ3JhbTsKKwl9CisJaWYgKCFwYWdlcikKKwkJcGFnZXIgPSBnZXRlbnYoIlBBR0VSIik7CisJaWYgKCFwYWdlcikKKwkJcGFnZXIgPSBERUZBVUxUX1BBR0VSOworCWlmICghKnBhZ2VyIHx8ICFzdHJjbXAocGFnZXIsICJjYXQiKSkKKwkJcGFnZXIgPSBOVUxMOworCisJcmV0dXJuIHBhZ2VyOworfQorCit2b2lkIHNldHVwX3BhZ2VyKHZvaWQpCit7CisJY29uc3QgY2hhciAqcGFnZXIgPSBnaXRfcGFnZXIoaXNhdHR5KDEpKTsKKworCWlmICghcGFnZXIpCisJCXJldHVybjsKKworCS8qCisJICogZm9yY2UgY29tcHV0aW5nIHRoZSB3aWR0aCBvZiB0aGUgdGVybWluYWwgYmVmb3JlIHdlIHJlZGlyZWN0CisJICogdGhlIHN0YW5kYXJkIG91dHB1dCB0byB0aGUgcGFnZXIuCisJICovCisJKHZvaWQpIHRlcm1fY29sdW1ucygpOworCisJc2V0ZW52KCJHSVRfUEFHRVJfSU5fVVNFIiwgInRydWUiLCAxKTsKKworCS8qIHNwYXduIHRoZSBwYWdlciAqLworCXBhZ2VyX2FyZ3ZbMF0gPSBwYWdlcjsKKwlwYWdlcl9wcm9jZXNzLnVzZV9zaGVsbCA9IDE7CisJcGFnZXJfcHJvY2Vzcy5hcmd2ID0gcGFnZXJfYXJndjsKKwlwYWdlcl9wcm9jZXNzLmluID0gLTE7CisJaWYgKCFnZXRlbnYoIkxFU1MiKSkKKwkJYXJndl9hcnJheV9wdXNoKCZwYWdlcl9wcm9jZXNzLmVudl9hcnJheSwgIkxFU1M9RlJYIik7CisJaWYgKCFnZXRlbnYoIkxWIikpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmcGFnZXJfcHJvY2Vzcy5lbnZfYXJyYXksICJMVj0tYyIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcGFnZXJfcHJvY2Vzcy5lbnZfYXJyYXksICJHSVRfUEFHRVJfSU5fVVNFIik7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJnBhZ2VyX3Byb2Nlc3MpKQorCQlyZXR1cm47CisKKwkvKiBvcmlnaW5hbCBwcm9jZXNzIGNvbnRpbnVlcywgYnV0IHdyaXRlcyB0byB0aGUgcGlwZSAqLworCWR1cDIocGFnZXJfcHJvY2Vzcy5pbiwgMSk7CisJaWYgKGlzYXR0eSgyKSkKKwkJZHVwMihwYWdlcl9wcm9jZXNzLmluLCAyKTsKKwljbG9zZShwYWdlcl9wcm9jZXNzLmluKTsKKworCS8qIHRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBwYXJlbnQgdGVybWluYXRlcyBhZnRlciB0aGUgcGFnZXIgKi8KKwlzaWdjaGFpbl9wdXNoX2NvbW1vbih3YWl0X2Zvcl9wYWdlcl9zaWduYWwpOworCWF0ZXhpdCh3YWl0X2Zvcl9wYWdlcl9hdGV4aXQpOworfQorCitpbnQgcGFnZXJfaW5fdXNlKHZvaWQpCit7CisJY29uc3QgY2hhciAqZW52OworCWVudiA9IGdldGVudigiR0lUX1BBR0VSX0lOX1VTRSIpOworCXJldHVybiBlbnYgPyBnaXRfY29uZmlnX2Jvb2woIkdJVF9QQUdFUl9JTl9VU0UiLCBlbnYpIDogMDsKK30KKworLyoKKyAqIFJldHVybiBjYWNoZWQgdmFsdWUgKGlmIHNldCkgb3IgJENPTFVNTlMgZW52aXJvbm1lbnQgdmFyaWFibGUgKGlmCisgKiBzZXQgYW5kIHBvc2l0aXZlKSBvciBpb2N0bCgxLCBUSU9DR1dJTlNaKS53c19jb2wgKGlmIHBvc2l0aXZlKSwKKyAqIGFuZCBkZWZhdWx0IHRvIDgwIGlmIGFsbCBlbHNlIGZhaWxzLgorICovCitpbnQgdGVybV9jb2x1bW5zKHZvaWQpCit7CisJc3RhdGljIGludCB0ZXJtX2NvbHVtbnNfYXRfc3RhcnR1cDsKKworCWNoYXIgKmNvbF9zdHJpbmc7CisJaW50IG5fY29sczsKKworCWlmICh0ZXJtX2NvbHVtbnNfYXRfc3RhcnR1cCkKKwkJcmV0dXJuIHRlcm1fY29sdW1uc19hdF9zdGFydHVwOworCisJdGVybV9jb2x1bW5zX2F0X3N0YXJ0dXAgPSA4MDsKKworCWNvbF9zdHJpbmcgPSBnZXRlbnYoIkNPTFVNTlMiKTsKKwlpZiAoY29sX3N0cmluZyAmJiAobl9jb2xzID0gYXRvaShjb2xfc3RyaW5nKSkgPiAwKQorCQl0ZXJtX2NvbHVtbnNfYXRfc3RhcnR1cCA9IG5fY29sczsKKyNpZmRlZiBUSU9DR1dJTlNaCisJZWxzZSB7CisJCXN0cnVjdCB3aW5zaXplIHdzOworCQlpZiAoIWlvY3RsKDEsIFRJT0NHV0lOU1osICZ3cykgJiYgd3Mud3NfY29sKQorCQkJdGVybV9jb2x1bW5zX2F0X3N0YXJ0dXAgPSB3cy53c19jb2w7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gdGVybV9jb2x1bW5zX2F0X3N0YXJ0dXA7Cit9CisKKy8qCisgKiBIb3cgbWFueSBjb2x1bW5zIGRvIHdlIG5lZWQgdG8gc2hvdyB0aGlzIG51bWJlciBpbiBkZWNpbWFsPworICovCitpbnQgZGVjaW1hbF93aWR0aCh1aW50bWF4X3QgbnVtYmVyKQoreworCWludCB3aWR0aDsKKworCWZvciAod2lkdGggPSAxOyBudW1iZXIgPj0gMTA7IHdpZHRoKyspCisJCW51bWJlciAvPSAxMDsKKwlyZXR1cm4gd2lkdGg7Cit9CisKKy8qIHJldHVybnMgMCBmb3IgIm5vIHBhZ2VyIiwgMSBmb3IgInVzZSBwYWdlciIsIGFuZCAtMSBmb3IgIm5vdCBzcGVjaWZpZWQiICovCitpbnQgY2hlY2tfcGFnZXJfY29uZmlnKGNvbnN0IGNoYXIgKmNtZCkKK3sKKwlpbnQgd2FudCA9IC0xOworCXN0cnVjdCBzdHJidWYga2V5ID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqdmFsdWUgPSBOVUxMOworCXN0cmJ1Zl9hZGRmKCZrZXksICJwYWdlci4lcyIsIGNtZCk7CisJaWYgKGdpdF9jb25maWdfa2V5X2lzX3ZhbGlkKGtleS5idWYpICYmCisJICAgICFnaXRfY29uZmlnX2dldF92YWx1ZShrZXkuYnVmLCAmdmFsdWUpKSB7CisJCWludCBiID0gZ2l0X2NvbmZpZ19tYXliZV9ib29sKGtleS5idWYsIHZhbHVlKTsKKwkJaWYgKGIgPj0gMCkKKwkJCXdhbnQgPSBiOworCQllbHNlIHsKKwkJCXdhbnQgPSAxOworCQkJcGFnZXJfcHJvZ3JhbSA9IHhzdHJkdXAodmFsdWUpOworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZrZXkpOworCXJldHVybiB3YW50OworfQpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy1jYi5jIGIvcGFyc2Utb3B0aW9ucy1jYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOTg5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJzZS1vcHRpb25zLWNiLmMKQEAgLTAsMCArMSwyMjIgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKworLyotLS0tLSBzb21lIG9mdGVuIHVzZWQgb3B0aW9ucyAtLS0tLSovCisKK2ludCBwYXJzZV9vcHRfYWJicmV2X2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50IHY7CisKKwlpZiAoIWFyZykgeworCQl2ID0gdW5zZXQgPyAwIDogREVGQVVMVF9BQkJSRVY7CisJfSBlbHNlIHsKKwkJdiA9IHN0cnRvbChhcmcsIChjaGFyICoqKSZhcmcsIDEwKTsKKwkJaWYgKCphcmcpCisJCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAiZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIsIDApOworCQlpZiAodiAmJiB2IDwgTUlOSU1VTV9BQkJSRVYpCisJCQl2ID0gTUlOSU1VTV9BQkJSRVY7CisJCWVsc2UgaWYgKHYgPiA0MCkKKwkJCXYgPSA0MDsKKwl9CisJKihpbnQgKikob3B0LT52YWx1ZSkgPSB2OworCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0X2FwcHJveGlkYXRlX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgICBpbnQgdW5zZXQpCit7CisJKih1bnNpZ25lZCBsb25nICopKG9wdC0+dmFsdWUpID0gYXBwcm94aWRhdGUoYXJnKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX29wdF9leHBpcnlfZGF0ZV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICAgaW50IHVuc2V0KQoreworCXJldHVybiBwYXJzZV9leHBpcnlfZGF0ZShhcmcsICh1bnNpZ25lZCBsb25nICopb3B0LT52YWx1ZSk7Cit9CisKK2ludCBwYXJzZV9vcHRfY29sb3JfZmxhZ19jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBpbnQgdW5zZXQpCit7CisJaW50IHZhbHVlOworCisJaWYgKCFhcmcpCisJCWFyZyA9IHVuc2V0ID8gIm5ldmVyIiA6IChjb25zdCBjaGFyICopb3B0LT5kZWZ2YWw7CisJdmFsdWUgPSBnaXRfY29uZmlnX2NvbG9yYm9vbChOVUxMLCBhcmcpOworCWlmICh2YWx1ZSA8IDApCisJCXJldHVybiBvcHRlcnJvcihvcHQsCisJCQkiZXhwZWN0cyBcImFsd2F5c1wiLCBcImF1dG9cIiwgb3IgXCJuZXZlclwiIiwgMCk7CisJKihpbnQgKilvcHQtPnZhbHVlID0gdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfdmVyYm9zaXR5X2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgaW50IHVuc2V0KQoreworCWludCAqdGFyZ2V0ID0gb3B0LT52YWx1ZTsKKworCWlmICh1bnNldCkKKwkJLyogLS1uby1xdWlldCwgLS1uby12ZXJib3NlICovCisJCSp0YXJnZXQgPSAwOworCWVsc2UgaWYgKG9wdC0+c2hvcnRfbmFtZSA9PSAndicpIHsKKwkJaWYgKCp0YXJnZXQgPj0gMCkKKwkJCSgqdGFyZ2V0KSsrOworCQllbHNlCisJCQkqdGFyZ2V0ID0gMTsKKwl9IGVsc2UgeworCQlpZiAoKnRhcmdldCA8PSAwKQorCQkJKCp0YXJnZXQpLS07CisJCWVsc2UKKwkJCSp0YXJnZXQgPSAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfY29tbWl0cyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJaWYgKCFhcmcpCisJCXJldHVybiAtMTsKKwlpZiAoZ2V0X3NoYTEoYXJnLCBzaGExKSkKKwkJcmV0dXJuIGVycm9yKCJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiLCBhcmcpOworCWNvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCWlmICghY29tbWl0KQorCQlyZXR1cm4gZXJyb3IoIm5vIHN1Y2ggY29tbWl0ICVzIiwgYXJnKTsKKwljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCBvcHQtPnZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX29wdF9vYmplY3RfbmFtZShjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlpZiAodW5zZXQpIHsKKwkJc2hhMV9hcnJheV9jbGVhcihvcHQtPnZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghYXJnKQorCQlyZXR1cm4gLTE7CisJaWYgKGdldF9zaGExKGFyZywgc2hhMSkpCisJCXJldHVybiBlcnJvcihfKCJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIpLCBhcmcpOworCXNoYTFfYXJyYXlfYXBwZW5kKG9wdC0+dmFsdWUsIHNoYTEpOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0X3RlcnRpYXJ5KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJaW50ICp0YXJnZXQgPSBvcHQtPnZhbHVlOworCSp0YXJnZXQgPSB1bnNldCA/IDIgOiAxOworCXJldHVybiAwOworfQorCitpbnQgcGFyc2Vfb3B0aW9uc19jb25jYXQoc3RydWN0IG9wdGlvbiAqZHN0LCBzaXplX3QgZHN0X3NpemUsIHN0cnVjdCBvcHRpb24gKnNyYykKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBkc3Rfc2l6ZTsgaSsrKQorCQlpZiAoZHN0W2ldLnR5cGUgPT0gT1BUSU9OX0VORCkKKwkJCWJyZWFrOworCWZvciAoaiA9IDA7IGkgPCBkc3Rfc2l6ZTsgaSsrLCBqKyspIHsKKwkJZHN0W2ldID0gc3JjW2pdOworCQlpZiAoc3JjW2pdLnR5cGUgPT0gT1BUSU9OX0VORCkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK2ludCBwYXJzZV9vcHRfc3RyaW5nX2xpc3QoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnYgPSBvcHQtPnZhbHVlOworCisJaWYgKHVuc2V0KSB7CisJCXN0cmluZ19saXN0X2NsZWFyKHYsIDApOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWFyZykKKwkJcmV0dXJuIC0xOworCisJc3RyaW5nX2xpc3RfYXBwZW5kKHYsIHhzdHJkdXAoYXJnKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfbm9vcF9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIFJlY3JlYXRlcyB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiBpbiB0aGUgc3RyYnVmLgorICovCitzdGF0aWMgaW50IHJlY3JlYXRlX29wdChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LAorCQljb25zdCBjaGFyICphcmcsIGludCB1bnNldCkKK3sKKwlzdHJidWZfcmVzZXQoc2IpOworCisJaWYgKG9wdC0+bG9uZ19uYW1lKSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHVuc2V0ID8gIi0tbm8tIiA6ICItLSIpOworCQlzdHJidWZfYWRkc3RyKHNiLCBvcHQtPmxvbmdfbmFtZSk7CisJCWlmIChhcmcpIHsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJz0nKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGFyZyk7CisJCX0KKwl9IGVsc2UgaWYgKG9wdC0+c2hvcnRfbmFtZSAmJiAhdW5zZXQpIHsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnLScpOworCQlzdHJidWZfYWRkY2goc2IsIG9wdC0+c2hvcnRfbmFtZSk7CisJCWlmIChhcmcpCisJCQlzdHJidWZfYWRkc3RyKHNiLCBhcmcpOworCX0gZWxzZQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBGb3IgYW4gb3B0aW9uIG9wdCwgcmVjcmVhdGVzIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIGluIG9wdC0+dmFsdWUgd2hpY2gKKyAqIG11c3QgYmUgYW4gY2hhciogaW5pdGlhbGl6ZWQgdG8gTlVMTC4gVGhpcyBpcyB1c2VmdWwgd2hlbiB3ZSBuZWVkIHRvIHBhc3MKKyAqIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uIHRvIGFub3RoZXIgY29tbWFuZC4gU2luY2UgYW55IHByZXZpb3VzIHZhbHVlIHdpbGwgYmUKKyAqIG92ZXJ3cml0dGVuLCB0aGlzIGNhbGxiYWNrIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIG9wdGlvbnMgd2hlcmUgdGhlIGxhc3QKKyAqIG9uZSB3aW5zLgorICovCitpbnQgcGFyc2Vfb3B0X3Bhc3N0aHJ1KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljaGFyICoqb3B0X3ZhbHVlID0gb3B0LT52YWx1ZTsKKworCWlmIChyZWNyZWF0ZV9vcHQoJnNiLCBvcHQsIGFyZywgdW5zZXQpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCpvcHRfdmFsdWUpCisJCWZyZWUoKm9wdF92YWx1ZSk7CisKKwkqb3B0X3ZhbHVlID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogRm9yIGFuIG9wdGlvbiBvcHQsIHJlY3JlYXRlIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uLCBhcHBlbmRpbmcgaXQgdG8KKyAqIG9wdC0+dmFsdWUgd2hpY2ggbXVzdCBiZSBhIGFyZ3ZfYXJyYXkuIFRoaXMgaXMgdXNlZnVsIHdoZW4gd2UgbmVlZCB0byBwYXNzCisgKiB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiwgd2hpY2ggY2FuIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcywgdG8gYW5vdGhlcgorICogY29tbWFuZC4KKyAqLworaW50IHBhcnNlX29wdF9wYXNzdGhydV9hcmd2KGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgYXJndl9hcnJheSAqb3B0X3ZhbHVlID0gb3B0LT52YWx1ZTsKKworCWlmIChyZWNyZWF0ZV9vcHQoJnNiLCBvcHQsIGFyZywgdW5zZXQpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJYXJndl9hcnJheV9wdXNoKG9wdF92YWx1ZSwgc2IuYnVmKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5jIGIvcGFyc2Utb3B0aW9ucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlY2ViYTQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJzZS1vcHRpb25zLmMKQEAgLTAsMCArMSw2NzQgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworc3RhdGljIGludCBwYXJzZV9vcHRpb25zX3VzYWdlKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMsIGludCBlcnIpOworCisjZGVmaW5lIE9QVF9TSE9SVCAxCisjZGVmaW5lIE9QVF9VTlNFVCAyCisKK2ludCBvcHRidWcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICpyZWFzb24pCit7CisJaWYgKG9wdC0+bG9uZ19uYW1lKSB7CisJCWlmIChvcHQtPnNob3J0X25hbWUpCisJCQlyZXR1cm4gZXJyb3IoIkJVRzogc3dpdGNoICclYycgKC0tJXMpICVzIiwKKwkJCQkgICAgIG9wdC0+c2hvcnRfbmFtZSwgb3B0LT5sb25nX25hbWUsIHJlYXNvbik7CisJCXJldHVybiBlcnJvcigiQlVHOiBvcHRpb24gJyVzJyAlcyIsIG9wdC0+bG9uZ19uYW1lLCByZWFzb24pOworCX0KKwlyZXR1cm4gZXJyb3IoIkJVRzogc3dpdGNoICclYycgJXMiLCBvcHQtPnNob3J0X25hbWUsIHJlYXNvbik7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2FyZyhzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpwLCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCSAgIGludCBmbGFncywgY29uc3QgY2hhciAqKmFyZykKK3sKKwlpZiAocC0+b3B0KSB7CisJCSphcmcgPSBwLT5vcHQ7CisJCXAtPm9wdCA9IE5VTEw7CisJfSBlbHNlIGlmIChwLT5hcmdjID09IDEgJiYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxUKSkgeworCQkqYXJnID0gKGNvbnN0IGNoYXIgKilvcHQtPmRlZnZhbDsKKwl9IGVsc2UgaWYgKHAtPmFyZ2MgPiAxKSB7CisJCXAtPmFyZ2MtLTsKKwkJKmFyZyA9ICorK3AtPmFyZ3Y7CisJfSBlbHNlCisJCXJldHVybiBvcHRlcnJvcihvcHQsICJyZXF1aXJlcyBhIHZhbHVlIiwgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmaXhfZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICoqZmlsZSkKK3sKKwlpZiAoIWZpbGUgfHwgISpmaWxlIHx8ICFwcmVmaXggfHwgaXNfYWJzb2x1dGVfcGF0aCgqZmlsZSkKKwkgICAgfHwgIXN0cmNtcCgiLSIsICpmaWxlKSkKKwkJcmV0dXJuOworCSpmaWxlID0geHN0cmR1cChwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBzdHJsZW4ocHJlZml4KSwgKmZpbGUpKTsKK30KKworc3RhdGljIGludCBvcHRfY29tbWFuZF9tb2RlX2Vycm9yKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmFsbF9vcHRzLAorCQkJCSAgaW50IGZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBvcHRpb24gKnRoYXQ7CisJc3RydWN0IHN0cmJ1ZiBtZXNzYWdlID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB0aGF0X25hbWUgPSBTVFJCVUZfSU5JVDsKKworCS8qCisJICogRmluZCB0aGUgb3RoZXIgb3B0aW9uIHRoYXQgd2FzIHVzZWQgdG8gc2V0IHRoZSB2YXJpYWJsZQorCSAqIGFscmVhZHksIGFuZCByZXBvcnQgdGhhdCB0aGlzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggaXQuCisJICovCisJZm9yICh0aGF0ID0gYWxsX29wdHM7IHRoYXQtPnR5cGUgIT0gT1BUSU9OX0VORDsgdGhhdCsrKSB7CisJCWlmICh0aGF0ID09IG9wdCB8fAorCQkgICAgdGhhdC0+dHlwZSAhPSBPUFRJT05fQ01ETU9ERSB8fAorCQkgICAgdGhhdC0+dmFsdWUgIT0gb3B0LT52YWx1ZSB8fAorCQkgICAgdGhhdC0+ZGVmdmFsICE9ICooaW50ICopb3B0LT52YWx1ZSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0aGF0LT5sb25nX25hbWUpCisJCQlzdHJidWZfYWRkZigmdGhhdF9uYW1lLCAiLS0lcyIsIHRoYXQtPmxvbmdfbmFtZSk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKCZ0aGF0X25hbWUsICItJWMiLCB0aGF0LT5zaG9ydF9uYW1lKTsKKwkJc3RyYnVmX2FkZGYoJm1lc3NhZ2UsICI6IGluY29tcGF0aWJsZSB3aXRoICVzIiwgdGhhdF9uYW1lLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZ0aGF0X25hbWUpOworCQlvcHRlcnJvcihvcHQsIG1lc3NhZ2UuYnVmLCBmbGFncyk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZtZXNzYWdlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAiOiBpbmNvbXBhdGlibGUgd2l0aCBzb21ldGhpbmcgZWxzZSIsIGZsYWdzKTsKK30KKworc3RhdGljIGludCBnZXRfdmFsdWUoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqcCwKKwkJICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCSAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqYWxsX29wdHMsCisJCSAgICAgaW50IGZsYWdzKQoreworCWNvbnN0IGNoYXIgKnMsICphcmc7CisJY29uc3QgaW50IHVuc2V0ID0gZmxhZ3MgJiBPUFRfVU5TRVQ7CisJaW50IGVycjsKKworCWlmICh1bnNldCAmJiBwLT5vcHQpCisJCXJldHVybiBvcHRlcnJvcihvcHQsICJ0YWtlcyBubyB2YWx1ZSIsIGZsYWdzKTsKKwlpZiAodW5zZXQgJiYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9ORUcpKQorCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAiaXNuJ3QgYXZhaWxhYmxlIiwgZmxhZ3MpOworCWlmICghKGZsYWdzICYgT1BUX1NIT1JUKSAmJiBwLT5vcHQgJiYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9BUkcpKQorCQlyZXR1cm4gb3B0ZXJyb3Iob3B0LCAidGFrZXMgbm8gdmFsdWUiLCBmbGFncyk7CisKKwlzd2l0Y2ggKG9wdC0+dHlwZSkgeworCWNhc2UgT1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLOgorCQlyZXR1cm4gKCoocGFyc2Vfb3B0X2xsX2NiICopb3B0LT5jYWxsYmFjaykocCwgb3B0LCB1bnNldCk7CisKKwljYXNlIE9QVElPTl9CSVQ6CisJCWlmICh1bnNldCkKKwkJCSooaW50ICopb3B0LT52YWx1ZSAmPSB+b3B0LT5kZWZ2YWw7CisJCWVsc2UKKwkJCSooaW50ICopb3B0LT52YWx1ZSB8PSBvcHQtPmRlZnZhbDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE9QVElPTl9ORUdCSVQ6CisJCWlmICh1bnNldCkKKwkJCSooaW50ICopb3B0LT52YWx1ZSB8PSBvcHQtPmRlZnZhbDsKKwkJZWxzZQorCQkJKihpbnQgKilvcHQtPnZhbHVlICY9IH5vcHQtPmRlZnZhbDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE9QVElPTl9DT1VOVFVQOgorCQkqKGludCAqKW9wdC0+dmFsdWUgPSB1bnNldCA/IDAgOiAqKGludCAqKW9wdC0+dmFsdWUgKyAxOworCQlyZXR1cm4gMDsKKworCWNhc2UgT1BUSU9OX1NFVF9JTlQ6CisJCSooaW50ICopb3B0LT52YWx1ZSA9IHVuc2V0ID8gMCA6IG9wdC0+ZGVmdmFsOworCQlyZXR1cm4gMDsKKworCWNhc2UgT1BUSU9OX0NNRE1PREU6CisJCS8qCisJCSAqIEdpdmluZyB0aGUgc2FtZSBtb2RlIG9wdGlvbiB0d2ljZSwgYWx0aG91Z2ggaXMgdW5uZWNlc3NhcnksCisJCSAqIGlzIG5vdCBhIGdyYXZlIGVycm9yLCBzbyBsZXQgaXQgcGFzcy4KKwkJICovCisJCWlmICgqKGludCAqKW9wdC0+dmFsdWUgJiYgKihpbnQgKilvcHQtPnZhbHVlICE9IG9wdC0+ZGVmdmFsKQorCQkJcmV0dXJuIG9wdF9jb21tYW5kX21vZGVfZXJyb3Iob3B0LCBhbGxfb3B0cywgZmxhZ3MpOworCQkqKGludCAqKW9wdC0+dmFsdWUgPSBvcHQtPmRlZnZhbDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIE9QVElPTl9TVFJJTkc6CisJCWlmICh1bnNldCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gTlVMTDsKKwkJZWxzZSBpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcgJiYgIXAtPm9wdCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gKGNvbnN0IGNoYXIgKilvcHQtPmRlZnZhbDsKKwkJZWxzZQorCQkJcmV0dXJuIGdldF9hcmcocCwgb3B0LCBmbGFncywgKGNvbnN0IGNoYXIgKiopb3B0LT52YWx1ZSk7CisJCXJldHVybiAwOworCisJY2FzZSBPUFRJT05fRklMRU5BTUU6CisJCWVyciA9IDA7CisJCWlmICh1bnNldCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gTlVMTDsKKwkJZWxzZSBpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcgJiYgIXAtPm9wdCkKKwkJCSooY29uc3QgY2hhciAqKilvcHQtPnZhbHVlID0gKGNvbnN0IGNoYXIgKilvcHQtPmRlZnZhbDsKKwkJZWxzZQorCQkJZXJyID0gZ2V0X2FyZyhwLCBvcHQsIGZsYWdzLCAoY29uc3QgY2hhciAqKilvcHQtPnZhbHVlKTsKKworCQlpZiAoIWVycikKKwkJCWZpeF9maWxlbmFtZShwLT5wcmVmaXgsIChjb25zdCBjaGFyICoqKW9wdC0+dmFsdWUpOworCQlyZXR1cm4gZXJyOworCisJY2FzZSBPUFRJT05fQ0FMTEJBQ0s6CisJCWlmICh1bnNldCkKKwkJCXJldHVybiAoKm9wdC0+Y2FsbGJhY2spKG9wdCwgTlVMTCwgMSkgPyAoLTEpIDogMDsKKwkJaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9BUkcpCisJCQlyZXR1cm4gKCpvcHQtPmNhbGxiYWNrKShvcHQsIE5VTEwsIDApID8gKC0xKSA6IDA7CisJCWlmIChvcHQtPmZsYWdzICYgUEFSU0VfT1BUX09QVEFSRyAmJiAhcC0+b3B0KQorCQkJcmV0dXJuICgqb3B0LT5jYWxsYmFjaykob3B0LCBOVUxMLCAwKSA/ICgtMSkgOiAwOworCQlpZiAoZ2V0X2FyZyhwLCBvcHQsIGZsYWdzLCAmYXJnKSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuICgqb3B0LT5jYWxsYmFjaykob3B0LCBhcmcsIDApID8gKC0xKSA6IDA7CisKKwljYXNlIE9QVElPTl9JTlRFR0VSOgorCQlpZiAodW5zZXQpIHsKKwkJCSooaW50ICopb3B0LT52YWx1ZSA9IDA7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcgJiYgIXAtPm9wdCkgeworCQkJKihpbnQgKilvcHQtPnZhbHVlID0gb3B0LT5kZWZ2YWw7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoZ2V0X2FyZyhwLCBvcHQsIGZsYWdzLCAmYXJnKSkKKwkJCXJldHVybiAtMTsKKwkJKihpbnQgKilvcHQtPnZhbHVlID0gc3RydG9sKGFyZywgKGNoYXIgKiopJnMsIDEwKTsKKwkJaWYgKCpzKQorCQkJcmV0dXJuIG9wdGVycm9yKG9wdCwgImV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiLCBmbGFncyk7CisJCXJldHVybiAwOworCisJY2FzZSBPUFRJT05fTUFHTklUVURFOgorCQlpZiAodW5zZXQpIHsKKwkJCSoodW5zaWduZWQgbG9uZyAqKW9wdC0+dmFsdWUgPSAwOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKG9wdC0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHICYmICFwLT5vcHQpIHsKKwkJCSoodW5zaWduZWQgbG9uZyAqKW9wdC0+dmFsdWUgPSBvcHQtPmRlZnZhbDsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChnZXRfYXJnKHAsIG9wdCwgZmxhZ3MsICZhcmcpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoIWdpdF9wYXJzZV91bG9uZyhhcmcsIG9wdC0+dmFsdWUpKQorCQkJcmV0dXJuIG9wdGVycm9yKG9wdCwKKwkJCQkiZXhwZWN0cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdpdGggYW4gb3B0aW9uYWwgay9tL2cgc3VmZml4IiwKKwkJCQlmbGFncyk7CisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJZGllKCJzaG91bGQgbm90IGhhcHBlbiwgc29tZW9uZSBtdXN0IGJlIGhpdCBvbiB0aGUgZm9yZWhlYWQiKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfc2hvcnRfb3B0KHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKnAsIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqYWxsX29wdHMgPSBvcHRpb25zOworCWNvbnN0IHN0cnVjdCBvcHRpb24gKm51bW9wdCA9IE5VTEw7CisKKwlmb3IgKDsgb3B0aW9ucy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRpb25zKyspIHsKKwkJaWYgKG9wdGlvbnMtPnNob3J0X25hbWUgPT0gKnAtPm9wdCkgeworCQkJcC0+b3B0ID0gcC0+b3B0WzFdID8gcC0+b3B0ICsgMSA6IE5VTEw7CisJCQlyZXR1cm4gZ2V0X3ZhbHVlKHAsIG9wdGlvbnMsIGFsbF9vcHRzLCBPUFRfU0hPUlQpOworCQl9CisKKwkJLyoKKwkJICogSGFuZGxlIHRoZSBudW1lcmljYWwgb3B0aW9uIGxhdGVyLCBleHBsaWNpdCBvbmUtZGlnaXQKKwkJICogb3B0aW9ucyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBpdC4KKwkJICovCisJCWlmIChvcHRpb25zLT50eXBlID09IE9QVElPTl9OVU1CRVIpCisJCQludW1vcHQgPSBvcHRpb25zOworCX0KKwlpZiAobnVtb3B0ICYmIGlzZGlnaXQoKnAtPm9wdCkpIHsKKwkJc2l6ZV90IGxlbiA9IDE7CisJCWNoYXIgKmFyZzsKKwkJaW50IHJjOworCisJCXdoaWxlIChpc2RpZ2l0KHAtPm9wdFtsZW5dKSkKKwkJCWxlbisrOworCQlhcmcgPSB4bWVtZHVweihwLT5vcHQsIGxlbik7CisJCXAtPm9wdCA9IHAtPm9wdFtsZW5dID8gcC0+b3B0ICsgbGVuIDogTlVMTDsKKwkJcmMgPSAoKm51bW9wdC0+Y2FsbGJhY2spKG51bW9wdCwgYXJnLCAwKSA/ICgtMSkgOiAwOworCQlmcmVlKGFyZyk7CisJCXJldHVybiByYzsKKwl9CisJcmV0dXJuIC0yOworfQorCitzdGF0aWMgaW50IHBhcnNlX2xvbmdfb3B0KHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKnAsIGNvbnN0IGNoYXIgKmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucykKK3sKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICphbGxfb3B0cyA9IG9wdGlvbnM7CisJY29uc3QgY2hhciAqYXJnX2VuZCA9IHN0cmNocm51bChhcmcsICc9Jyk7CisJY29uc3Qgc3RydWN0IG9wdGlvbiAqYWJicmV2X29wdGlvbiA9IE5VTEwsICphbWJpZ3VvdXNfb3B0aW9uID0gTlVMTDsKKwlpbnQgYWJicmV2X2ZsYWdzID0gMCwgYW1iaWd1b3VzX2ZsYWdzID0gMDsKKworCWZvciAoOyBvcHRpb25zLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdGlvbnMrKykgeworCQljb25zdCBjaGFyICpyZXN0LCAqbG9uZ19uYW1lID0gb3B0aW9ucy0+bG9uZ19uYW1lOworCQlpbnQgZmxhZ3MgPSAwLCBvcHRfZmxhZ3MgPSAwOworCisJCWlmICghbG9uZ19uYW1lKQorCQkJY29udGludWU7CisKK2FnYWluOgorCQlpZiAoIXNraXBfcHJlZml4KGFyZywgbG9uZ19uYW1lLCAmcmVzdCkpCisJCQlyZXN0ID0gTlVMTDsKKwkJaWYgKG9wdGlvbnMtPnR5cGUgPT0gT1BUSU9OX0FSR1VNRU5UKSB7CisJCQlpZiAoIXJlc3QpCisJCQkJY29udGludWU7CisJCQlpZiAoKnJlc3QgPT0gJz0nKQorCQkJCXJldHVybiBvcHRlcnJvcihvcHRpb25zLCAidGFrZXMgbm8gdmFsdWUiLCBmbGFncyk7CisJCQlpZiAoKnJlc3QpCisJCQkJY29udGludWU7CisJCQlwLT5vdXRbcC0+Y3BpZHgrK10gPSBhcmcgLSAyOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKCFyZXN0KSB7CisJCQkvKiBhYmJyZXZpYXRlZD8gKi8KKwkJCWlmICghc3RybmNtcChsb25nX25hbWUsIGFyZywgYXJnX2VuZCAtIGFyZykpIHsKK2lzX2FiYnJldmlhdGVkOgorCQkJCWlmIChhYmJyZXZfb3B0aW9uKSB7CisJCQkJCS8qCisJCQkJCSAqIElmIHRoaXMgaXMgYWJicmV2aWF0ZWQsIGl0IGlzCisJCQkJCSAqIGFtYmlndW91cy4gU28gd2hlbiB0aGVyZSBpcyBubworCQkJCQkgKiBleGFjdCBtYXRjaCBsYXRlciwgd2UgbmVlZCB0bworCQkJCQkgKiBlcnJvciBvdXQuCisJCQkJCSAqLworCQkJCQlhbWJpZ3VvdXNfb3B0aW9uID0gYWJicmV2X29wdGlvbjsKKwkJCQkJYW1iaWd1b3VzX2ZsYWdzID0gYWJicmV2X2ZsYWdzOworCQkJCX0KKwkJCQlpZiAoIShmbGFncyAmIE9QVF9VTlNFVCkgJiYgKmFyZ19lbmQpCisJCQkJCXAtPm9wdCA9IGFyZ19lbmQgKyAxOworCQkJCWFiYnJldl9vcHRpb24gPSBvcHRpb25zOworCQkJCWFiYnJldl9mbGFncyA9IGZsYWdzIF4gb3B0X2ZsYWdzOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogbmVnYXRpb24gYWxsb3dlZD8gKi8KKwkJCWlmIChvcHRpb25zLT5mbGFncyAmIFBBUlNFX09QVF9OT05FRykKKwkJCQljb250aW51ZTsKKwkJCS8qIG5lZ2F0ZWQgYW5kIGFiYnJldmlhdGVkIHZlcnkgbXVjaD8gKi8KKwkJCWlmIChzdGFydHNfd2l0aCgibm8tIiwgYXJnKSkgeworCQkJCWZsYWdzIHw9IE9QVF9VTlNFVDsKKwkJCQlnb3RvIGlzX2FiYnJldmlhdGVkOworCQkJfQorCQkJLyogbmVnYXRlZD8gKi8KKwkJCWlmICghc3RhcnRzX3dpdGgoYXJnLCAibm8tIikpIHsKKwkJCQlpZiAoc3RhcnRzX3dpdGgobG9uZ19uYW1lLCAibm8tIikpIHsKKwkJCQkJbG9uZ19uYW1lICs9IDM7CisJCQkJCW9wdF9mbGFncyB8PSBPUFRfVU5TRVQ7CisJCQkJCWdvdG8gYWdhaW47CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZmxhZ3MgfD0gT1BUX1VOU0VUOworCQkJaWYgKCFza2lwX3ByZWZpeChhcmcgKyAzLCBsb25nX25hbWUsICZyZXN0KSkgeworCQkJCS8qIGFiYnJldmlhdGVkIGFuZCBuZWdhdGVkPyAqLworCQkJCWlmIChzdGFydHNfd2l0aChsb25nX25hbWUsIGFyZyArIDMpKQorCQkJCQlnb3RvIGlzX2FiYnJldmlhdGVkOworCQkJCWVsc2UKKwkJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJaWYgKCpyZXN0KSB7CisJCQlpZiAoKnJlc3QgIT0gJz0nKQorCQkJCWNvbnRpbnVlOworCQkJcC0+b3B0ID0gcmVzdCArIDE7CisJCX0KKwkJcmV0dXJuIGdldF92YWx1ZShwLCBvcHRpb25zLCBhbGxfb3B0cywgZmxhZ3MgXiBvcHRfZmxhZ3MpOworCX0KKworCWlmIChhbWJpZ3VvdXNfb3B0aW9uKQorCQlyZXR1cm4gZXJyb3IoIkFtYmlndW91cyBvcHRpb246ICVzICIKKwkJCSIoY291bGQgYmUgLS0lcyVzIG9yIC0tJXMlcykiLAorCQkJYXJnLAorCQkJKGFtYmlndW91c19mbGFncyAmIE9QVF9VTlNFVCkgPyAgIm5vLSIgOiAiIiwKKwkJCWFtYmlndW91c19vcHRpb24tPmxvbmdfbmFtZSwKKwkJCShhYmJyZXZfZmxhZ3MgJiBPUFRfVU5TRVQpID8gICJuby0iIDogIiIsCisJCQlhYmJyZXZfb3B0aW9uLT5sb25nX25hbWUpOworCWlmIChhYmJyZXZfb3B0aW9uKQorCQlyZXR1cm4gZ2V0X3ZhbHVlKHAsIGFiYnJldl9vcHRpb24sIGFsbF9vcHRzLCBhYmJyZXZfZmxhZ3MpOworCXJldHVybiAtMjsKK30KKworc3RhdGljIGludCBwYXJzZV9ub2Rhc2hfb3B0KHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKnAsIGNvbnN0IGNoYXIgKmFyZywKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKQoreworCWNvbnN0IHN0cnVjdCBvcHRpb24gKmFsbF9vcHRzID0gb3B0aW9uczsKKworCWZvciAoOyBvcHRpb25zLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdGlvbnMrKykgeworCQlpZiAoIShvcHRpb25zLT5mbGFncyAmIFBBUlNFX09QVF9OT0RBU0gpKQorCQkJY29udGludWU7CisJCWlmIChvcHRpb25zLT5zaG9ydF9uYW1lID09IGFyZ1swXSAmJiBhcmdbMV0gPT0gJ1wwJykKKwkJCXJldHVybiBnZXRfdmFsdWUocCwgb3B0aW9ucywgYWxsX29wdHMsIE9QVF9TSE9SVCk7CisJfQorCXJldHVybiAtMjsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfdHlwb3MoY29uc3QgY2hhciAqYXJnLCBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zKQoreworCWlmIChzdHJsZW4oYXJnKSA8IDMpCisJCXJldHVybjsKKworCWlmIChzdGFydHNfd2l0aChhcmcsICJuby0iKSkgeworCQllcnJvciAoImRpZCB5b3UgbWVhbiBgLS0lc2AgKHdpdGggdHdvIGRhc2hlcyA/KSIsIGFyZyk7CisJCWV4aXQoMTI5KTsKKwl9CisKKwlmb3IgKDsgb3B0aW9ucy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRpb25zKyspIHsKKwkJaWYgKCFvcHRpb25zLT5sb25nX25hbWUpCisJCQljb250aW51ZTsKKwkJaWYgKHN0YXJ0c193aXRoKG9wdGlvbnMtPmxvbmdfbmFtZSwgYXJnKSkgeworCQkJZXJyb3IgKCJkaWQgeW91IG1lYW4gYC0tJXNgICh3aXRoIHR3byBkYXNoZXMgPykiLCBhcmcpOworCQkJZXhpdCgxMjkpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwYXJzZV9vcHRpb25zX2NoZWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMpCit7CisJaW50IGVyciA9IDA7CisJY2hhciBzaG9ydF9vcHRzWzEyOF07CisKKwltZW1zZXQoc2hvcnRfb3B0cywgJ1wwJywgc2l6ZW9mKHNob3J0X29wdHMpKTsKKwlmb3IgKDsgb3B0cy0+dHlwZSAhPSBPUFRJT05fRU5EOyBvcHRzKyspIHsKKwkJaWYgKChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9MQVNUQVJHX0RFRkFVTFQpICYmCisJCSAgICAob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKSkKKwkJCWVyciB8PSBvcHRidWcob3B0cywgInVzZXMgaW5jb21wYXRpYmxlIGZsYWdzICIKKwkJCQkJIkxBU1RBUkdfREVGQVVMVCBhbmQgT1BUQVJHIik7CisJCWlmIChvcHRzLT5zaG9ydF9uYW1lKSB7CisJCQlpZiAoMHg3RiA8PSBvcHRzLT5zaG9ydF9uYW1lKQorCQkJCWVyciB8PSBvcHRidWcob3B0cywgImludmFsaWQgc2hvcnQgbmFtZSIpOworCQkJZWxzZSBpZiAoc2hvcnRfb3B0c1tvcHRzLT5zaG9ydF9uYW1lXSsrKQorCQkJCWVyciB8PSBvcHRidWcob3B0cywgInNob3J0IG5hbWUgYWxyZWFkeSB1c2VkIik7CisJCX0KKwkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCAmJgorCQkgICAgKChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpIHx8CisJCSAgICAgIShvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9OT0FSRykgfHwKKwkJICAgICAhKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PTkVHKSB8fAorCQkgICAgIG9wdHMtPmxvbmdfbmFtZSkpCisJCQllcnIgfD0gb3B0YnVnKG9wdHMsICJ1c2VzIGZlYXR1cmUgIgorCQkJCQkibm90IHN1cHBvcnRlZCBmb3IgZGFzaGxlc3Mgb3B0aW9ucyIpOworCQlzd2l0Y2ggKG9wdHMtPnR5cGUpIHsKKwkJY2FzZSBPUFRJT05fQ09VTlRVUDoKKwkJY2FzZSBPUFRJT05fQklUOgorCQljYXNlIE9QVElPTl9ORUdCSVQ6CisJCWNhc2UgT1BUSU9OX1NFVF9JTlQ6CisJCWNhc2UgT1BUSU9OX05VTUJFUjoKKwkJCWlmICgob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfT1BUQVJHKSB8fAorCQkJICAgICEob3B0cy0+ZmxhZ3MgJiBQQVJTRV9PUFRfTk9BUkcpKQorCQkJCWVyciB8PSBvcHRidWcob3B0cywgInNob3VsZCBub3QgYWNjZXB0IGFuIGFyZ3VtZW50Iik7CisJCWRlZmF1bHQ6CisJCQk7IC8qIG9rLiAodXN1YWxseSBhY2NlcHRzIGFuIGFyZ3VtZW50KSAqLworCQl9CisJCWlmIChvcHRzLT5hcmdoICYmCisJCSAgICBzdHJjc3BuKG9wdHMtPmFyZ2gsICIgXyIpICE9IHN0cmxlbihvcHRzLT5hcmdoKSkKKwkJCWVyciB8PSBvcHRidWcob3B0cywgIm11bHRpLXdvcmQgYXJnaCBzaG91bGQgdXNlIGRhc2ggdG8gc2VwYXJhdGUgd29yZHMiKTsKKwl9CisJaWYgKGVycikKKwkJZXhpdCgxMjgpOworfQorCit2b2lkIHBhcnNlX29wdGlvbnNfc3RhcnQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJIGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsIGludCBmbGFncykKK3sKKwltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOworCWN0eC0+YXJnYyA9IGFyZ2MgLSAxOworCWN0eC0+YXJndiA9IGFyZ3YgKyAxOworCWN0eC0+b3V0ICA9IGFyZ3Y7CisJY3R4LT5wcmVmaXggPSBwcmVmaXg7CisJY3R4LT5jcGlkeCA9ICgoZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9BUkdWMCkgIT0gMCk7CisJY3R4LT5mbGFncyA9IGZsYWdzOworCWlmICgoZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKSAmJgorCSAgICAoZmxhZ3MgJiBQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OKSkKKwkJZGllKCJTVE9QX0FUX05PTl9PUFRJT04gYW5kIEtFRVBfVU5LTk9XTiBkb24ndCBnbyB0b2dldGhlciIpOworCXBhcnNlX29wdGlvbnNfY2hlY2sob3B0aW9ucyk7Cit9CisKK3N0YXRpYyBpbnQgdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKiwKKwkJCQkgICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICosCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgaW50LCBpbnQpOworCitpbnQgcGFyc2Vfb3B0aW9uc19zdGVwKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCisJCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSkKK3sKKwlpbnQgaW50ZXJuYWxfaGVscCA9ICEoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9OT19JTlRFUk5BTF9IRUxQKTsKKworCS8qIHdlIG11c3QgcmVzZXQgLT5vcHQsIHVua25vd24gc2hvcnQgb3B0aW9uIGxlYXZlIGl0IGRhbmdsaW5nICovCisJY3R4LT5vcHQgPSBOVUxMOworCisJZm9yICg7IGN0eC0+YXJnYzsgY3R4LT5hcmdjLS0sIGN0eC0+YXJndisrKSB7CisJCWNvbnN0IGNoYXIgKmFyZyA9IGN0eC0+YXJndlswXTsKKworCQlpZiAoKmFyZyAhPSAnLScgfHwgIWFyZ1sxXSkgeworCQkJaWYgKHBhcnNlX25vZGFzaF9vcHQoY3R4LCBhcmcsIG9wdGlvbnMpID09IDApCisJCQkJY29udGludWU7CisJCQlpZiAoY3R4LT5mbGFncyAmIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pCisJCQkJcmV0dXJuIFBBUlNFX09QVF9OT05fT1BUSU9OOworCQkJY3R4LT5vdXRbY3R4LT5jcGlkeCsrXSA9IGN0eC0+YXJndlswXTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGFyZ1sxXSAhPSAnLScpIHsKKwkJCWN0eC0+b3B0ID0gYXJnICsgMTsKKwkJCWlmIChpbnRlcm5hbF9oZWxwICYmICpjdHgtPm9wdCA9PSAnaCcpCisJCQkJcmV0dXJuIHBhcnNlX29wdGlvbnNfdXNhZ2UoY3R4LCB1c2FnZXN0ciwgb3B0aW9ucywgMCk7CisJCQlzd2l0Y2ggKHBhcnNlX3Nob3J0X29wdChjdHgsIG9wdGlvbnMpKSB7CisJCQljYXNlIC0xOgorCQkJCXJldHVybiBwYXJzZV9vcHRpb25zX3VzYWdlKGN0eCwgdXNhZ2VzdHIsIG9wdGlvbnMsIDEpOworCQkJY2FzZSAtMjoKKwkJCQlpZiAoY3R4LT5vcHQpCisJCQkJCWNoZWNrX3R5cG9zKGFyZyArIDEsIG9wdGlvbnMpOworCQkJCWdvdG8gdW5rbm93bjsKKwkJCX0KKwkJCWlmIChjdHgtPm9wdCkKKwkJCQljaGVja190eXBvcyhhcmcgKyAxLCBvcHRpb25zKTsKKwkJCXdoaWxlIChjdHgtPm9wdCkgeworCQkJCWlmIChpbnRlcm5hbF9oZWxwICYmICpjdHgtPm9wdCA9PSAnaCcpCisJCQkJCXJldHVybiBwYXJzZV9vcHRpb25zX3VzYWdlKGN0eCwgdXNhZ2VzdHIsIG9wdGlvbnMsIDApOworCQkJCXN3aXRjaCAocGFyc2Vfc2hvcnRfb3B0KGN0eCwgb3B0aW9ucykpIHsKKwkJCQljYXNlIC0xOgorCQkJCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZShjdHgsIHVzYWdlc3RyLCBvcHRpb25zLCAxKTsKKwkJCQljYXNlIC0yOgorCQkJCQkvKiBmYWtlIGEgc2hvcnQgb3B0aW9uIHRoaW5nIHRvIGhpZGUgdGhlIGZhY3QgdGhhdCB3ZSBtYXkgaGF2ZQorCQkJCQkgKiBzdGFydGVkIHRvIHBhcnNlIGFnZ3JlZ2F0ZWQgc3R1ZmYKKwkJCQkJICoKKwkJCQkJICogVGhpcyBpcyBsZWFreSwgdG9vIGJhZC4KKwkJCQkJICovCisJCQkJCWN0eC0+YXJndlswXSA9IHhzdHJkdXAoY3R4LT5vcHQgLSAxKTsKKwkJCQkJKihjaGFyICopY3R4LT5hcmd2WzBdID0gJy0nOworCQkJCQlnb3RvIHVua25vd247CisJCQkJfQorCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIWFyZ1syXSkgeyAvKiAiLS0iICovCisJCQlpZiAoIShjdHgtPmZsYWdzICYgUEFSU0VfT1BUX0tFRVBfREFTSERBU0gpKSB7CisJCQkJY3R4LT5hcmdjLS07CisJCQkJY3R4LT5hcmd2Kys7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpbnRlcm5hbF9oZWxwICYmICFzdHJjbXAoYXJnICsgMiwgImhlbHAtYWxsIikpCisJCQlyZXR1cm4gdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKGN0eCwgdXNhZ2VzdHIsIG9wdGlvbnMsIDEsIDApOworCQlpZiAoaW50ZXJuYWxfaGVscCAmJiAhc3RyY21wKGFyZyArIDIsICJoZWxwIikpCisJCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZShjdHgsIHVzYWdlc3RyLCBvcHRpb25zLCAwKTsKKwkJc3dpdGNoIChwYXJzZV9sb25nX29wdChjdHgsIGFyZyArIDIsIG9wdGlvbnMpKSB7CisJCWNhc2UgLTE6CisJCQlyZXR1cm4gcGFyc2Vfb3B0aW9uc191c2FnZShjdHgsIHVzYWdlc3RyLCBvcHRpb25zLCAxKTsKKwkJY2FzZSAtMjoKKwkJCWdvdG8gdW5rbm93bjsKKwkJfQorCQljb250aW51ZTsKK3Vua25vd246CisJCWlmICghKGN0eC0+ZmxhZ3MgJiBQQVJTRV9PUFRfS0VFUF9VTktOT1dOKSkKKwkJCXJldHVybiBQQVJTRV9PUFRfVU5LTk9XTjsKKwkJY3R4LT5vdXRbY3R4LT5jcGlkeCsrXSA9IGN0eC0+YXJndlswXTsKKwkJY3R4LT5vcHQgPSBOVUxMOworCX0KKwlyZXR1cm4gUEFSU0VfT1BUX0RPTkU7Cit9CisKK2ludCBwYXJzZV9vcHRpb25zX2VuZChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgpCit7CisJbWVtbW92ZShjdHgtPm91dCArIGN0eC0+Y3BpZHgsIGN0eC0+YXJndiwgY3R4LT5hcmdjICogc2l6ZW9mKCpjdHgtPm91dCkpOworCWN0eC0+b3V0W2N0eC0+Y3BpZHggKyBjdHgtPmFyZ2NdID0gTlVMTDsKKwlyZXR1cm4gY3R4LT5jcGlkeCArIGN0eC0+YXJnYzsKK30KKworaW50IHBhcnNlX29wdGlvbnMoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0aW9ucywgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10sCisJCSAgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgY3R4OworCisJcGFyc2Vfb3B0aW9uc19zdGFydCgmY3R4LCBhcmdjLCBhcmd2LCBwcmVmaXgsIG9wdGlvbnMsIGZsYWdzKTsKKwlzd2l0Y2ggKHBhcnNlX29wdGlvbnNfc3RlcCgmY3R4LCBvcHRpb25zLCB1c2FnZXN0cikpIHsKKwljYXNlIFBBUlNFX09QVF9IRUxQOgorCQlleGl0KDEyOSk7CisJY2FzZSBQQVJTRV9PUFRfTk9OX09QVElPTjoKKwljYXNlIFBBUlNFX09QVF9ET05FOgorCQlicmVhazsKKwlkZWZhdWx0OiAvKiBQQVJTRV9PUFRfVU5LTk9XTiAqLworCQlpZiAoY3R4LmFyZ3ZbMF1bMV0gPT0gJy0nKSB7CisJCQllcnJvcigidW5rbm93biBvcHRpb24gYCVzJyIsIGN0eC5hcmd2WzBdICsgMik7CisJCX0gZWxzZSBpZiAoaXNhc2NpaSgqY3R4Lm9wdCkpIHsKKwkJCWVycm9yKCJ1bmtub3duIHN3aXRjaCBgJWMnIiwgKmN0eC5vcHQpOworCQl9IGVsc2UgeworCQkJZXJyb3IoInVua25vd24gbm9uLWFzY2lpIG9wdGlvbiBpbiBzdHJpbmc6IGAlcyciLAorCQkJICAgICAgY3R4LmFyZ3ZbMF0pOworCQl9CisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZXN0ciwgb3B0aW9ucyk7CisJfQorCisJcHJlY29tcG9zZV9hcmd2KGFyZ2MsIGFyZ3YpOworCXJldHVybiBwYXJzZV9vcHRpb25zX2VuZCgmY3R4KTsKK30KKworc3RhdGljIGludCB1c2FnZV9hcmdoKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMsIEZJTEUgKm91dGZpbGUpCit7CisJY29uc3QgY2hhciAqczsKKwlpbnQgbGl0ZXJhbCA9IChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFApIHx8ICFvcHRzLT5hcmdoOworCWlmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9PUFRBUkcpCisJCWlmIChvcHRzLT5sb25nX25hbWUpCisJCQlzID0gbGl0ZXJhbCA/ICJbPSVzXSIgOiAiWz08JXM+XSI7CisJCWVsc2UKKwkJCXMgPSBsaXRlcmFsID8gIlslc10iIDogIls8JXM+XSI7CisJZWxzZQorCQlzID0gbGl0ZXJhbCA/ICIgJXMiIDogIiA8JXM+IjsKKwlyZXR1cm4gdXRmOF9mcHJpbnRmKG91dGZpbGUsIHMsIG9wdHMtPmFyZ2ggPyBfKG9wdHMtPmFyZ2gpIDogXygiLi4uIikpOworfQorCisjZGVmaW5lIFVTQUdFX09QVFNfV0lEVEggMjQKKyNkZWZpbmUgVVNBR0VfR0FQICAgICAgICAgMgorCitzdGF0aWMgaW50IHVzYWdlX3dpdGhfb3B0aW9uc19pbnRlcm5hbChzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMsIGludCBmdWxsLCBpbnQgZXJyKQoreworCUZJTEUgKm91dGZpbGUgPSBlcnIgPyBzdGRlcnIgOiBzdGRvdXQ7CisKKwlpZiAoIXVzYWdlc3RyKQorCQlyZXR1cm4gUEFSU0VfT1BUX0hFTFA7CisKKwlpZiAoIWVyciAmJiBjdHggJiYgY3R4LT5mbGFncyAmIFBBUlNFX09QVF9TSEVMTF9FVkFMKQorCQlmcHJpbnRmKG91dGZpbGUsICJjYXQgPDxcXEVPRlxuIik7CisKKwlmcHJpbnRmX2xuKG91dGZpbGUsIF8oInVzYWdlOiAlcyIpLCBfKCp1c2FnZXN0cisrKSk7CisJd2hpbGUgKCp1c2FnZXN0ciAmJiAqKnVzYWdlc3RyKQorCQkvKiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisJCSAgIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbiAqLworCQlmcHJpbnRmX2xuKG91dGZpbGUsIF8oIiAgIG9yOiAlcyIpLCBfKCp1c2FnZXN0cisrKSk7CisJd2hpbGUgKCp1c2FnZXN0cikgeworCQlpZiAoKip1c2FnZXN0cikKKwkJCWZwcmludGZfbG4ob3V0ZmlsZSwgXygiICAgICVzIiksIF8oKnVzYWdlc3RyKSk7CisJCWVsc2UKKwkJCXB1dGNoYXIoJ1xuJyk7CisJCXVzYWdlc3RyKys7CisJfQorCisJaWYgKG9wdHMtPnR5cGUgIT0gT1BUSU9OX0dST1VQKQorCQlmcHV0YygnXG4nLCBvdXRmaWxlKTsKKworCWZvciAoOyBvcHRzLT50eXBlICE9IE9QVElPTl9FTkQ7IG9wdHMrKykgeworCQlzaXplX3QgcG9zOworCQlpbnQgcGFkOworCisJCWlmIChvcHRzLT50eXBlID09IE9QVElPTl9HUk9VUCkgeworCQkJZnB1dGMoJ1xuJywgb3V0ZmlsZSk7CisJCQlpZiAoKm9wdHMtPmhlbHApCisJCQkJZnByaW50ZihvdXRmaWxlLCAiJXNcbiIsIF8ob3B0cy0+aGVscCkpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFmdWxsICYmIChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9ISURERU4pKQorCQkJY29udGludWU7CisKKwkJcG9zID0gZnByaW50ZihvdXRmaWxlLCAiICAgICIpOworCQlpZiAob3B0cy0+c2hvcnRfbmFtZSkgeworCQkJaWYgKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PREFTSCkKKwkJCQlwb3MgKz0gZnByaW50ZihvdXRmaWxlLCAiJWMiLCBvcHRzLT5zaG9ydF9uYW1lKTsKKwkJCWVsc2UKKwkJCQlwb3MgKz0gZnByaW50ZihvdXRmaWxlLCAiLSVjIiwgb3B0cy0+c2hvcnRfbmFtZSk7CisJCX0KKwkJaWYgKG9wdHMtPmxvbmdfbmFtZSAmJiBvcHRzLT5zaG9ydF9uYW1lKQorCQkJcG9zICs9IGZwcmludGYob3V0ZmlsZSwgIiwgIik7CisJCWlmIChvcHRzLT5sb25nX25hbWUpCisJCQlwb3MgKz0gZnByaW50ZihvdXRmaWxlLCAiLS0lcyIsIG9wdHMtPmxvbmdfbmFtZSk7CisJCWlmIChvcHRzLT50eXBlID09IE9QVElPTl9OVU1CRVIpCisJCQlwb3MgKz0gdXRmOF9mcHJpbnRmKG91dGZpbGUsIF8oIi1OVU0iKSk7CisKKwkJaWYgKChvcHRzLT5mbGFncyAmIFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFApIHx8CisJCSAgICAhKG9wdHMtPmZsYWdzICYgUEFSU0VfT1BUX05PQVJHKSkKKwkJCXBvcyArPSB1c2FnZV9hcmdoKG9wdHMsIG91dGZpbGUpOworCisJCWlmIChwb3MgPD0gVVNBR0VfT1BUU19XSURUSCkKKwkJCXBhZCA9IFVTQUdFX09QVFNfV0lEVEggLSBwb3M7CisJCWVsc2UgeworCQkJZnB1dGMoJ1xuJywgb3V0ZmlsZSk7CisJCQlwYWQgPSBVU0FHRV9PUFRTX1dJRFRIOworCQl9CisJCWZwcmludGYob3V0ZmlsZSwgIiUqcyVzXG4iLCBwYWQgKyBVU0FHRV9HQVAsICIiLCBfKG9wdHMtPmhlbHApKTsKKwl9CisJZnB1dGMoJ1xuJywgb3V0ZmlsZSk7CisKKwlpZiAoIWVyciAmJiBjdHggJiYgY3R4LT5mbGFncyAmIFBBUlNFX09QVF9TSEVMTF9FVkFMKQorCQlmcHV0cygiRU9GXG4iLCBvdXRmaWxlKTsKKworCXJldHVybiBQQVJTRV9PUFRfSEVMUDsKK30KKwordm9pZCBOT1JFVFVSTiB1c2FnZV93aXRoX29wdGlvbnMoY29uc3QgY2hhciAqIGNvbnN0ICp1c2FnZXN0ciwKKwkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdHMpCit7CisJdXNhZ2Vfd2l0aF9vcHRpb25zX2ludGVybmFsKE5VTEwsIHVzYWdlc3RyLCBvcHRzLCAwLCAxKTsKKwlleGl0KDEyOSk7Cit9CisKK3ZvaWQgTk9SRVRVUk4gdXNhZ2VfbXNnX29wdChjb25zdCBjaGFyICptc2csCisJCSAgIGNvbnN0IGNoYXIgKiBjb25zdCAqdXNhZ2VzdHIsCisJCSAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpCit7CisJZnByaW50ZihzdGRlcnIsICIlc1xuXG4iLCBtc2cpOworCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZXN0ciwgb3B0aW9ucyk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0aW9uc191c2FnZShzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90ICpjdHgsCisJCQkgICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICp1c2FnZXN0ciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRzLCBpbnQgZXJyKQoreworCXJldHVybiB1c2FnZV93aXRoX29wdGlvbnNfaW50ZXJuYWwoY3R4LCB1c2FnZXN0ciwgb3B0cywgMCwgZXJyKTsKK30KKworI3VuZGVmIG9wdGVycm9yCitpbnQgb3B0ZXJyb3IoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICpyZWFzb24sIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBPUFRfU0hPUlQpCisJCXJldHVybiBlcnJvcigic3dpdGNoIGAlYycgJXMiLCBvcHQtPnNob3J0X25hbWUsIHJlYXNvbik7CisJaWYgKGZsYWdzICYgT1BUX1VOU0VUKQorCQlyZXR1cm4gZXJyb3IoIm9wdGlvbiBgbm8tJXMnICVzIiwgb3B0LT5sb25nX25hbWUsIHJlYXNvbik7CisJcmV0dXJuIGVycm9yKCJvcHRpb24gYCVzJyAlcyIsIG9wdC0+bG9uZ19uYW1lLCByZWFzb24pOworfQpkaWZmIC0tZ2l0IGEvcGFyc2Utb3B0aW9ucy5oIGIvcGFyc2Utb3B0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjU1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXJzZS1vcHRpb25zLmgKQEAgLTAsMCArMSwyNjMgQEAKKyNpZm5kZWYgUEFSU0VfT1BUSU9OU19ICisjZGVmaW5lIFBBUlNFX09QVElPTlNfSAorCitlbnVtIHBhcnNlX29wdF90eXBlIHsKKwkvKiBzcGVjaWFsIHR5cGVzICovCisJT1BUSU9OX0VORCwKKwlPUFRJT05fQVJHVU1FTlQsCisJT1BUSU9OX0dST1VQLAorCU9QVElPTl9OVU1CRVIsCisJLyogb3B0aW9ucyB3aXRoIG5vIGFyZ3VtZW50cyAqLworCU9QVElPTl9CSVQsCisJT1BUSU9OX05FR0JJVCwKKwlPUFRJT05fQ09VTlRVUCwKKwlPUFRJT05fU0VUX0lOVCwKKwlPUFRJT05fQ01ETU9ERSwKKwkvKiBvcHRpb25zIHdpdGggYXJndW1lbnRzICh1c3VhbGx5KSAqLworCU9QVElPTl9TVFJJTkcsCisJT1BUSU9OX0lOVEVHRVIsCisJT1BUSU9OX01BR05JVFVERSwKKwlPUFRJT05fQ0FMTEJBQ0ssCisJT1BUSU9OX0xPV0xFVkVMX0NBTExCQUNLLAorCU9QVElPTl9GSUxFTkFNRQorfTsKKworZW51bSBwYXJzZV9vcHRfZmxhZ3MgeworCVBBUlNFX09QVF9LRUVQX0RBU0hEQVNIID0gMSwKKwlQQVJTRV9PUFRfU1RPUF9BVF9OT05fT1BUSU9OID0gMiwKKwlQQVJTRV9PUFRfS0VFUF9BUkdWMCA9IDQsCisJUEFSU0VfT1BUX0tFRVBfVU5LTk9XTiA9IDgsCisJUEFSU0VfT1BUX05PX0lOVEVSTkFMX0hFTFAgPSAxNgorfTsKKworZW51bSBwYXJzZV9vcHRfb3B0aW9uX2ZsYWdzIHsKKwlQQVJTRV9PUFRfT1BUQVJHICA9IDEsCisJUEFSU0VfT1BUX05PQVJHICAgPSAyLAorCVBBUlNFX09QVF9OT05FRyAgID0gNCwKKwlQQVJTRV9PUFRfSElEREVOICA9IDgsCisJUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVCA9IDE2LAorCVBBUlNFX09QVF9OT0RBU0ggPSAzMiwKKwlQQVJTRV9PUFRfTElURVJBTF9BUkdIRUxQID0gNjQsCisJUEFSU0VfT1BUX1NIRUxMX0VWQUwgPSAyNTYKK307CisKK3N0cnVjdCBvcHRpb247Cit0eXBlZGVmIGludCBwYXJzZV9vcHRfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCk7CisKK3N0cnVjdCBwYXJzZV9vcHRfY3R4X3Q7Cit0eXBlZGVmIGludCBwYXJzZV9vcHRfbGxfY2Ioc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgaW50IHVuc2V0KTsKKworLyoKKyAqIGB0eXBlYDo6CisgKiAgIGhvbGRzIHRoZSB0eXBlIG9mIHRoZSBvcHRpb24sIHlvdSBtdXN0IGhhdmUgYW4gT1BUSU9OX0VORCBsYXN0IGluIHlvdXIKKyAqICAgYXJyYXkuCisgKgorICogYHNob3J0X25hbWVgOjoKKyAqICAgdGhlIGNoYXJhY3RlciB0byB1c2UgYXMgYSBzaG9ydCBvcHRpb24gbmFtZSwgJ1wwJyBpZiBub25lLgorICoKKyAqIGBsb25nX25hbWVgOjoKKyAqICAgdGhlIGxvbmcgb3B0aW9uIG5hbWUsIHdpdGhvdXQgdGhlIGxlYWRpbmcgZGFzaGVzLCBOVUxMIGlmIG5vbmUuCisgKgorICogYHZhbHVlYDo6CisgKiAgIHN0b3JlcyBwb2ludGVycyB0byB0aGUgdmFsdWVzIHRvIGJlIGZpbGxlZC4KKyAqCisgKiBgYXJnaGA6OgorICogICB0b2tlbiB0byBleHBsYWluIHRoZSBraW5kIG9mIGFyZ3VtZW50IHRoaXMgb3B0aW9uIHdhbnRzLiBLZWVwIGl0CisgKiAgIGhvbW9nZW5lb3VzIGFjcm9zcyB0aGUgcmVwb3NpdG9yeS4gU2hvdWxkIGJlIHdyYXBwZWQgYnkgTl8oKSBmb3IKKyAqICAgdHJhbnNsYXRpb24uCisgKgorICogYGhlbHBgOjoKKyAqICAgdGhlIHNob3J0IGhlbHAgYXNzb2NpYXRlZCB0byB3aGF0IHRoZSBvcHRpb24gZG9lcy4KKyAqICAgTXVzdCBuZXZlciBiZSBOVUxMIChleGNlcHQgZm9yIE9QVElPTl9FTkQpLgorICogICBPUFRJT05fR1JPVVAgdXNlcyB0aGlzIHBvaW50ZXIgdG8gc3RvcmUgdGhlIGdyb3VwIGhlYWRlci4KKyAqICAgU2hvdWxkIGJlIHdyYXBwZWQgYnkgTl8oKSBmb3IgdHJhbnNsYXRpb24uCisgKgorICogYGZsYWdzYDo6CisgKiAgIG1hc2sgb2YgcGFyc2Vfb3B0X29wdGlvbl9mbGFncy4KKyAqICAgUEFSU0VfT1BUX09QVEFSRzogc2F5cyB0aGF0IHRoZSBhcmd1bWVudCBpcyBvcHRpb25hbCAobm90IGZvciBCT09MRUFOcykKKyAqICAgUEFSU0VfT1BUX05PQVJHOiBzYXlzIHRoYXQgdGhpcyBvcHRpb24gZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudAorICogICBQQVJTRV9PUFRfTk9ORUc6IHNheXMgdGhhdCB0aGlzIG9wdGlvbiBjYW5ub3QgYmUgbmVnYXRlZAorICogICBQQVJTRV9PUFRfSElEREVOOiB0aGlzIG9wdGlvbiBpcyBza2lwcGVkIGluIHRoZSBkZWZhdWx0IHVzYWdlLCBhbmQKKyAqICAgICAgICAgICAgICAgICAgICAgc2hvd24gb25seSBpbiB0aGUgZnVsbCB1c2FnZS4KKyAqICAgUEFSU0VfT1BUX0xBU1RBUkdfREVGQVVMVDogc2F5cyB0aGF0IHRoaXMgb3B0aW9uIHdpbGwgdGFrZSB0aGUgZGVmYXVsdAorICoJCQkJdmFsdWUgaWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4gd2hlbiB0aGUgb3B0aW9uCisgKgkJCQlpcyBsYXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIElmIHRoZSBvcHRpb24gaXMKKyAqCQkJCW5vdCBsYXN0IGl0IHdpbGwgcmVxdWlyZSBhbiBhcmd1bWVudC4KKyAqCQkJCVNob3VsZCBub3QgYmUgdXNlZCB3aXRoIFBBUlNFX09QVF9PUFRBUkcuCisgKiAgIFBBUlNFX09QVF9OT0RBU0g6IHRoaXMgb3B0aW9uIGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIGRhc2guCisgKiAgIFBBUlNFX09QVF9MSVRFUkFMX0FSR0hFTFA6IHNheXMgdGhhdCBhcmdoIHNob3VsZG4ndCBiZSBlbmNsb3NlZCBpbiBicmFja2V0cworICoJCQkJKGkuZS4gJzxhcmdoPicpIGluIHRoZSBoZWxwIG1lc3NhZ2UuCisgKgkJCQlVc2VmdWwgZm9yIG9wdGlvbnMgd2l0aCBtdWx0aXBsZSBwYXJhbWV0ZXJzLgorICoKKyAqIGBjYWxsYmFja2A6OgorICogICBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayB0byB1c2UgZm9yIE9QVElPTl9DQUxMQkFDSyBvcgorICogICBPUFRJT05fTE9XTEVWRUxfQ0FMTEJBQ0suCisgKgorICogYGRlZnZhbGA6OgorICogICBkZWZhdWx0IHZhbHVlIHRvIGZpbGwgKCotPnZhbHVlKSB3aXRoIGZvciBQQVJTRV9PUFRfT1BUQVJHLgorICogICBPUFRJT05fe0JJVCxTRVRfSU5UfSBzdG9yZSB0aGUge21hc2ssaW50ZWdlcn0gdG8gcHV0IGluIHRoZSB2YWx1ZSB3aGVuIG1ldC4KKyAqICAgQ0FMTEJBQ0tTIGNhbiB1c2UgaXQgbGlrZSB0aGV5IHdhbnQuCisgKi8KK3N0cnVjdCBvcHRpb24geworCWVudW0gcGFyc2Vfb3B0X3R5cGUgdHlwZTsKKwlpbnQgc2hvcnRfbmFtZTsKKwljb25zdCBjaGFyICpsb25nX25hbWU7CisJdm9pZCAqdmFsdWU7CisJY29uc3QgY2hhciAqYXJnaDsKKwljb25zdCBjaGFyICpoZWxwOworCisJaW50IGZsYWdzOworCXBhcnNlX29wdF9jYiAqY2FsbGJhY2s7CisJaW50cHRyX3QgZGVmdmFsOworfTsKKworI2RlZmluZSBPUFRfRU5EKCkgICAgICAgICAgICAgICAgICAgeyBPUFRJT05fRU5EIH0KKyNkZWZpbmUgT1BUX0FSR1VNRU5UKGwsIGgpICAgICAgICAgIHsgT1BUSU9OX0FSR1VNRU5ULCAwLCAobCksIE5VTEwsIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSR30KKyNkZWZpbmUgT1BUX0dST1VQKGgpICAgICAgICAgICAgICAgIHsgT1BUSU9OX0dST1VQLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCAoaCkgfQorI2RlZmluZSBPUFRfQklUKHMsIGwsIHYsIGgsIGIpICAgICAgeyBPUFRJT05fQklULCAocyksIChsKSwgKHYpLCBOVUxMLCAoaCksIFwKKwkJCQkgICAgICBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIChiKSB9CisjZGVmaW5lIE9QVF9ORUdCSVQocywgbCwgdiwgaCwgYikgICB7IE9QVElPTl9ORUdCSVQsIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSRywgTlVMTCwgKGIpIH0KKyNkZWZpbmUgT1BUX0NPVU5UVVAocywgbCwgdiwgaCkgICAgIHsgT1BUSU9OX0NPVU5UVVAsIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSRyB9CisjZGVmaW5lIE9QVF9TRVRfSU5UKHMsIGwsIHYsIGgsIGkpICB7IE9QVElPTl9TRVRfSU5ULCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcsIE5VTEwsIChpKSB9CisjZGVmaW5lIE9QVF9CT09MKHMsIGwsIHYsIGgpICAgICAgICBPUFRfU0VUX0lOVChzLCBsLCB2LCBoLCAxKQorI2RlZmluZSBPUFRfSElEREVOX0JPT0wocywgbCwgdiwgaCkgeyBPUFRJT05fU0VUX0lOVCwgKHMpLCAobCksICh2KSwgTlVMTCwgXAorCQkJCSAgICAgIChoKSwgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX0hJRERFTiwgTlVMTCwgMX0KKyNkZWZpbmUgT1BUX0NNRE1PREUocywgbCwgdiwgaCwgaSkgIHsgT1BUSU9OX0NNRE1PREUsIChzKSwgKGwpLCAodiksIE5VTEwsIFwKKwkJCQkgICAgICAoaCksIFBBUlNFX09QVF9OT0FSR3xQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIChpKSB9CisjZGVmaW5lIE9QVF9JTlRFR0VSKHMsIGwsIHYsIGgpICAgICB7IE9QVElPTl9JTlRFR0VSLCAocyksIChsKSwgKHYpLCBOXygibiIpLCAoaCkgfQorI2RlZmluZSBPUFRfTUFHTklUVURFKHMsIGwsIHYsIGgpICAgeyBPUFRJT05fTUFHTklUVURFLCAocyksIChsKSwgKHYpLCBcCisJCQkJICAgICAgTl8oIm4iKSwgKGgpLCBQQVJTRV9PUFRfTk9ORUcgfQorI2RlZmluZSBPUFRfU1RSSU5HKHMsIGwsIHYsIGEsIGgpICAgeyBPUFRJT05fU1RSSU5HLCAgKHMpLCAobCksICh2KSwgKGEpLCAoaCkgfQorI2RlZmluZSBPUFRfU1RSSU5HX0xJU1QocywgbCwgdiwgYSwgaCkgXAorCQkJCSAgICB7IE9QVElPTl9DQUxMQkFDSywgKHMpLCAobCksICh2KSwgKGEpLCBcCisJCQkJICAgICAgKGgpLCAwLCAmcGFyc2Vfb3B0X3N0cmluZ19saXN0IH0KKyNkZWZpbmUgT1BUX1VZTihzLCBsLCB2LCBoKSAgICAgICAgIHsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCBOVUxMLCBcCisJCQkJICAgICAgKGgpLCBQQVJTRV9PUFRfTk9BUkcsICZwYXJzZV9vcHRfdGVydGlhcnkgfQorI2RlZmluZSBPUFRfREFURShzLCBsLCB2LCBoKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIE5fKCJ0aW1lIiksKGgpLCAwLAlcCisJICBwYXJzZV9vcHRfYXBwcm94aWRhdGVfY2IgfQorI2RlZmluZSBPUFRfRVhQSVJZX0RBVEUocywgbCwgdiwgaCkgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCBOXygiZXhwaXJ5LWRhdGUiKSwoaCksIDAsCVwKKwkgIHBhcnNlX29wdF9leHBpcnlfZGF0ZV9jYiB9CisjZGVmaW5lIE9QVF9DQUxMQkFDSyhzLCBsLCB2LCBhLCBoLCBmKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIChhKSwgKGgpLCAwLCAoZikgfQorI2RlZmluZSBPUFRfTlVNQkVSX0NBTExCQUNLKHYsIGgsIGYpIFwKKwl7IE9QVElPTl9OVU1CRVIsIDAsIE5VTEwsICh2KSwgTlVMTCwgKGgpLCBcCisJICBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIChmKSB9CisjZGVmaW5lIE9QVF9GSUxFTkFNRShzLCBsLCB2LCBoKSAgICB7IE9QVElPTl9GSUxFTkFNRSwgKHMpLCAobCksICh2KSwgXAorCQkJCSAgICAgICBOXygiZmlsZSIpLCAoaCkgfQorI2RlZmluZSBPUFRfQ09MT1JfRkxBRyhzLCBsLCB2LCBoKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIE5fKCJ3aGVuIiksIChoKSwgUEFSU0VfT1BUX09QVEFSRywgXAorCQlwYXJzZV9vcHRfY29sb3JfZmxhZ19jYiwgKGludHB0cl90KSJhbHdheXMiIH0KKworI2RlZmluZSBPUFRfTk9PUF9OT0FSRyhzLCBsKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCBOVUxMLCBOVUxMLCBcCisJICBOXygibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIiksCQlcCisJICBQQVJTRV9PUFRfSElEREVOIHwgUEFSU0VfT1BUX05PQVJHLCBwYXJzZV9vcHRfbm9vcF9jYiB9CisKKy8qIHBhcnNlX29wdGlvbnMoKSB3aWxsIGZpbHRlciBvdXQgdGhlIHByb2Nlc3NlZCBvcHRpb25zIGFuZCBsZWF2ZSB0aGUKKyAqIG5vbi1vcHRpb24gYXJndW1lbnRzIGluIGFyZ3ZbXS4gdXNhZ2VzdHIgc3RyaW5ncyBzaG91bGQgYmUgbWFya2VkCisgKiBmb3IgdHJhbnNsYXRpb24gd2l0aCBOXygpLgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBsZWZ0IGluIGFyZ3ZbXS4KKyAqLworZXh0ZXJuIGludCBwYXJzZV9vcHRpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGNvbnN0IHVzYWdlc3RyW10sIGludCBmbGFncyk7CisKK2V4dGVybiBOT1JFVFVSTiB2b2lkIHVzYWdlX3dpdGhfb3B0aW9ucyhjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpOworCitleHRlcm4gTk9SRVRVUk4gdm9pZCB1c2FnZV9tc2dfb3B0KGNvbnN0IGNoYXIgKm1zZywKKwkJCQkgICBjb25zdCBjaGFyICogY29uc3QgKnVzYWdlc3RyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMpOworCitleHRlcm4gaW50IG9wdGJ1Zyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKnJlYXNvbik7CitleHRlcm4gaW50IG9wdGVycm9yKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqcmVhc29uLCBpbnQgZmxhZ3MpOworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIG9wdGVycm9yKG8scixmKSAob3B0ZXJyb3IoKG8pLChyKSwoZikpLCBjb25zdF9lcnJvcigpKQorI2VuZGlmCisKKy8qLS0tLS0gaW5jcmVtZW50YWwgYWR2YW5jZWQgQVBJcyAtLS0tLSovCisKK2VudW0geworCVBBUlNFX09QVF9IRUxQID0gLTEsCisJUEFSU0VfT1BUX0RPTkUsCisJUEFSU0VfT1BUX05PTl9PUFRJT04sCisJUEFSU0VfT1BUX1VOS05PV04KK307CisKKy8qCisgKiBJdCdzIG9rYXkgZm9yIHRoZSBjYWxsZXIgdG8gY29uc3VtZSBhcmd2L2FyZ2MgaW4gdGhlIHVzdWFsIHdheS4KKyAqIE90aGVyIGZpZWxkcyBvZiB0aGF0IHN0cnVjdHVyZSBhcmUgcHJpdmF0ZSB0byBwYXJzZS1vcHRpb25zIGFuZCBzaG91bGQgbm90CisgKiBiZSBtb2RpZmllZCBpbiBhbnkgd2F5LgorICovCitzdHJ1Y3QgcGFyc2Vfb3B0X2N0eF90IHsKKwljb25zdCBjaGFyICoqYXJndjsKKwljb25zdCBjaGFyICoqb3V0OworCWludCBhcmdjLCBjcGlkeDsKKwljb25zdCBjaGFyICpvcHQ7CisJaW50IGZsYWdzOworCWNvbnN0IGNoYXIgKnByZWZpeDsKK307CisKK2V4dGVybiB2b2lkIHBhcnNlX29wdGlvbnNfc3RhcnQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4LAorCQkJCWludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsIGludCBmbGFncyk7CisKK2V4dGVybiBpbnQgcGFyc2Vfb3B0aW9uc19zdGVwKHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCisJCQkgICAgICBjb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSk7CisKK2V4dGVybiBpbnQgcGFyc2Vfb3B0aW9uc19lbmQoc3RydWN0IHBhcnNlX29wdF9jdHhfdCAqY3R4KTsKKworZXh0ZXJuIGludCBwYXJzZV9vcHRpb25zX2NvbmNhdChzdHJ1Y3Qgb3B0aW9uICpkc3QsIHNpemVfdCwgc3RydWN0IG9wdGlvbiAqc3JjKTsKKworLyotLS0tLSBzb21lIG9mdGVuIHVzZWQgb3B0aW9ucyAtLS0tLSovCitleHRlcm4gaW50IHBhcnNlX29wdF9hYmJyZXZfY2IoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IHBhcnNlX29wdF9hcHByb3hpZGF0ZV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgcGFyc2Vfb3B0X2V4cGlyeV9kYXRlX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBwYXJzZV9vcHRfY29sb3JfZmxhZ19jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgcGFyc2Vfb3B0X3ZlcmJvc2l0eV9jYihjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgcGFyc2Vfb3B0X29iamVjdF9uYW1lKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBwYXJzZV9vcHRfY29tbWl0cyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgcGFyc2Vfb3B0X3RlcnRpYXJ5KGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBwYXJzZV9vcHRfc3RyaW5nX2xpc3QoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IHBhcnNlX29wdF9ub29wX2NiKGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCBwYXJzZV9vcHRfcGFzc3RocnUoY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IHBhcnNlX29wdF9wYXNzdGhydV9hcmd2KGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgY29uc3QgY2hhciAqLCBpbnQpOworCisjZGVmaW5lIE9QVF9fVkVSQk9TRSh2YXIsIGgpICBPUFRfQ09VTlRVUCgndicsICJ2ZXJib3NlIiwgKHZhciksIChoKSkKKyNkZWZpbmUgT1BUX19RVUlFVCh2YXIsIGgpICAgIE9QVF9DT1VOVFVQKCdxJywgInF1aWV0IiwgICAodmFyKSwgKGgpKQorI2RlZmluZSBPUFRfX1ZFUkJPU0lUWSh2YXIpIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgJ3YnLCAidmVyYm9zZSIsICh2YXIpLCBOVUxMLCBOXygiYmUgbW9yZSB2ZXJib3NlIiksIFwKKwkgIFBBUlNFX09QVF9OT0FSRywgJnBhcnNlX29wdF92ZXJib3NpdHlfY2IsIDAgfSwgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAncScsICJxdWlldCIsICh2YXIpLCBOVUxMLCBOXygiYmUgbW9yZSBxdWlldCIpLCBcCisJICBQQVJTRV9PUFRfTk9BUkcsICZwYXJzZV9vcHRfdmVyYm9zaXR5X2NiLCAwIH0KKyNkZWZpbmUgT1BUX19EUllfUlVOKHZhciwgaCkgIE9QVF9CT09MKCduJywgImRyeS1ydW4iLCAodmFyKSwgKGgpKQorI2RlZmluZSBPUFRfX0ZPUkNFKHZhciwgaCkgICAgT1BUX0NPVU5UVVAoJ2YnLCAiZm9yY2UiLCAgICh2YXIpLCAoaCkpCisjZGVmaW5lIE9QVF9fQUJCUkVWKHZhcikgIFwKKwl7IE9QVElPTl9DQUxMQkFDSywgMCwgImFiYnJldiIsICh2YXIpLCBOXygibiIpLAlcCisJICBOXygidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiKSwJXAorCSAgUEFSU0VfT1BUX09QVEFSRywgJnBhcnNlX29wdF9hYmJyZXZfY2IsIDAgfQorI2RlZmluZSBPUFRfX0NPTE9SKHZhciwgaCkgXAorCU9QVF9DT0xPUl9GTEFHKDAsICJjb2xvciIsICh2YXIpLCAoaCkpCisjZGVmaW5lIE9QVF9DT0xVTU4ocywgbCwgdiwgaCkgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCBOXygic3R5bGUiKSwgKGgpLCBQQVJTRV9PUFRfT1BUQVJHLCBwYXJzZW9wdF9jb2x1bW5fY2FsbGJhY2sgfQorI2RlZmluZSBPUFRfUEFTU1RIUlUocywgbCwgdiwgYSwgaCwgZikgXAorCXsgT1BUSU9OX0NBTExCQUNLLCAocyksIChsKSwgKHYpLCAoYSksIChoKSwgKGYpLCBwYXJzZV9vcHRfcGFzc3RocnUgfQorI2RlZmluZSBPUFRfUEFTU1RIUlVfQVJHVihzLCBsLCB2LCBhLCBoLCBmKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIChzKSwgKGwpLCAodiksIChhKSwgKGgpLCAoZiksIHBhcnNlX29wdF9wYXNzdGhydV9hcmd2IH0KKyNkZWZpbmUgX09QVF9DT05UQUlOU19PUl9XSVRIKG5hbWUsIHZhcmlhYmxlLCBoZWxwLCBmbGFnKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsIG5hbWUsICh2YXJpYWJsZSksIE5fKCJjb21taXQiKSwgKGhlbHApLCBcCisJICBQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxUIHwgZmxhZywgXAorCSAgcGFyc2Vfb3B0X2NvbW1pdHMsIChpbnRwdHJfdCkgIkhFQUQiIFwKKwl9CisjZGVmaW5lIE9QVF9DT05UQUlOUyh2LCBoKSBfT1BUX0NPTlRBSU5TX09SX1dJVEgoImNvbnRhaW5zIiwgdiwgaCwgMCkKKyNkZWZpbmUgT1BUX1dJVEgodiwgaCkgX09QVF9DT05UQUlOU19PUl9XSVRIKCJ3aXRoIiwgdiwgaCwgUEFSU0VfT1BUX0hJRERFTikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9wYXRjaC1kZWx0YS5jIGIvcGF0Y2gtZGVsdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmUwYTVlCi0tLSAvZGV2L251bGwKKysrIGIvcGF0Y2gtZGVsdGEuYwpAQCAtMCwwICsxLDg2IEBACisvKgorICogcGF0Y2gtZGVsdGEuYzoKKyAqIHJlY3JlYXRlIGEgYnVmZmVyIGZyb20gYSBzb3VyY2UgYW5kIHRoZSBkZWx0YSBwcm9kdWNlZCBieSBkaWZmLWRlbHRhLmMKKyAqCisgKiAoQykgMjAwNSBOaWNvbGFzIFBpdHJlIDxuaWNvQGZsdXhuaWMubmV0PgorICoKKyAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImRlbHRhLmgiCisKK3ZvaWQgKnBhdGNoX2RlbHRhKGNvbnN0IHZvaWQgKnNyY19idWYsIHVuc2lnbmVkIGxvbmcgc3JjX3NpemUsCisJCSAgY29uc3Qgdm9pZCAqZGVsdGFfYnVmLCB1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsCisJCSAgdW5zaWduZWQgbG9uZyAqZHN0X3NpemUpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgKnRvcDsKKwl1bnNpZ25lZCBjaGFyICpkc3RfYnVmLCAqb3V0LCBjbWQ7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJaWYgKGRlbHRhX3NpemUgPCBERUxUQV9TSVpFX01JTikKKwkJcmV0dXJuIE5VTEw7CisKKwlkYXRhID0gZGVsdGFfYnVmOworCXRvcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIGRlbHRhX2J1ZiArIGRlbHRhX3NpemU7CisKKwkvKiBtYWtlIHN1cmUgdGhlIG9yaWcgZmlsZSBzaXplIG1hdGNoZXMgd2hhdCB3ZSBleHBlY3QgKi8KKwlzaXplID0gZ2V0X2RlbHRhX2hkcl9zaXplKCZkYXRhLCB0b3ApOworCWlmIChzaXplICE9IHNyY19zaXplKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIG5vdyB0aGUgcmVzdWx0IHNpemUgKi8KKwlzaXplID0gZ2V0X2RlbHRhX2hkcl9zaXplKCZkYXRhLCB0b3ApOworCWRzdF9idWYgPSB4bWFsbG9jeihzaXplKTsKKworCW91dCA9IGRzdF9idWY7CisJd2hpbGUgKGRhdGEgPCB0b3ApIHsKKwkJY21kID0gKmRhdGErKzsKKwkJaWYgKGNtZCAmIDB4ODApIHsKKwkJCXVuc2lnbmVkIGxvbmcgY3Bfb2ZmID0gMCwgY3Bfc2l6ZSA9IDA7CisJCQlpZiAoY21kICYgMHgwMSkgY3Bfb2ZmID0gKmRhdGErKzsKKwkJCWlmIChjbWQgJiAweDAyKSBjcF9vZmYgfD0gKCpkYXRhKysgPDwgOCk7CisJCQlpZiAoY21kICYgMHgwNCkgY3Bfb2ZmIHw9ICgqZGF0YSsrIDw8IDE2KTsKKwkJCWlmIChjbWQgJiAweDA4KSBjcF9vZmYgfD0gKCh1bnNpZ25lZCkgKmRhdGErKyA8PCAyNCk7CisJCQlpZiAoY21kICYgMHgxMCkgY3Bfc2l6ZSA9ICpkYXRhKys7CisJCQlpZiAoY21kICYgMHgyMCkgY3Bfc2l6ZSB8PSAoKmRhdGErKyA8PCA4KTsKKwkJCWlmIChjbWQgJiAweDQwKSBjcF9zaXplIHw9ICgqZGF0YSsrIDw8IDE2KTsKKwkJCWlmIChjcF9zaXplID09IDApIGNwX3NpemUgPSAweDEwMDAwOworCQkJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3MoY3Bfb2ZmLCBjcF9zaXplKSB8fAorCQkJICAgIGNwX29mZiArIGNwX3NpemUgPiBzcmNfc2l6ZSB8fAorCQkJICAgIGNwX3NpemUgPiBzaXplKQorCQkJCWJyZWFrOworCQkJbWVtY3B5KG91dCwgKGNoYXIgKikgc3JjX2J1ZiArIGNwX29mZiwgY3Bfc2l6ZSk7CisJCQlvdXQgKz0gY3Bfc2l6ZTsKKwkJCXNpemUgLT0gY3Bfc2l6ZTsKKwkJfSBlbHNlIGlmIChjbWQpIHsKKwkJCWlmIChjbWQgPiBzaXplKQorCQkJCWJyZWFrOworCQkJbWVtY3B5KG91dCwgZGF0YSwgY21kKTsKKwkJCW91dCArPSBjbWQ7CisJCQlkYXRhICs9IGNtZDsKKwkJCXNpemUgLT0gY21kOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIGNtZCA9PSAwIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgZW5jb2RpbmcKKwkJCSAqIGV4dGVuc2lvbnMuIEluIHRoZSBtZWFuIHRpbWUgd2UgbXVzdCBmYWlsIHdoZW4KKwkJCSAqIGVuY291bnRlcmluZyB0aGVtIChtaWdodCBiZSBkYXRhIGNvcnJ1cHRpb24pLgorCQkJICovCisJCQllcnJvcigidW5leHBlY3RlZCBkZWx0YSBvcGNvZGUgMCIpOworCQkJZ290byBiYWQ7CisJCX0KKwl9CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoZGF0YSAhPSB0b3AgfHwgc2l6ZSAhPSAwKSB7CisJCWVycm9yKCJkZWx0YSByZXBsYXkgaGFzIGdvbmUgd2lsZCIpOworCQliYWQ6CisJCWZyZWUoZHN0X2J1Zik7CisJCXJldHVybiBOVUxMOworCX0KKworCSpkc3Rfc2l6ZSA9IG91dCAtIGRzdF9idWY7CisJcmV0dXJuIGRzdF9idWY7Cit9CmRpZmYgLS1naXQgYS9wYXRjaC1pZHMuYyBiL3BhdGNoLWlkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODFiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaC1pZHMuYwpAQCAtMCwwICsxLDEwNSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAicGF0Y2gtaWRzLmgiCisKK3N0YXRpYyBpbnQgY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKmNvbW1pdCwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJICAgIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaWYgKGNvbW1pdC0+cGFyZW50cykKKwkJZGlmZl90cmVlX3NoYTEoY29tbWl0LT5wYXJlbnRzLT5pdGVtLT5vYmplY3Quc2hhMSwKKwkJICAgICAgICAgICAgICAgY29tbWl0LT5vYmplY3Quc2hhMSwgIiIsIG9wdGlvbnMpOworCWVsc2UKKwkJZGlmZl9yb290X3RyZWVfc2hhMShjb21taXQtPm9iamVjdC5zaGExLCAiIiwgb3B0aW9ucyk7CisJZGlmZmNvcmVfc3RkKG9wdGlvbnMpOworCXJldHVybiBkaWZmX2ZsdXNoX3BhdGNoX2lkKG9wdGlvbnMsIHNoYTEpOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqcGF0Y2hfaWRfYWNjZXNzKHNpemVfdCBpbmRleCwgdm9pZCAqdGFibGUpCit7CisJc3RydWN0IHBhdGNoX2lkICoqaWRfdGFibGUgPSB0YWJsZTsKKwlyZXR1cm4gaWRfdGFibGVbaW5kZXhdLT5wYXRjaF9pZDsKK30KKworc3RhdGljIGludCBwYXRjaF9wb3Moc3RydWN0IHBhdGNoX2lkICoqdGFibGUsIGludCBuciwgY29uc3QgdW5zaWduZWQgY2hhciAqaWQpCit7CisJcmV0dXJuIHNoYTFfcG9zKGlkLCB0YWJsZSwgbnIsIHBhdGNoX2lkX2FjY2Vzcyk7Cit9CisKKyNkZWZpbmUgQlVDS0VUX1NJWkUgMTkwIC8qIDE5MCAqIDIxID0gMzk5MCwgd2l0aCBzbG9wIGNsb3NlIGVub3VnaCB0byA0SyAqLworc3RydWN0IHBhdGNoX2lkX2J1Y2tldCB7CisJc3RydWN0IHBhdGNoX2lkX2J1Y2tldCAqbmV4dDsKKwlpbnQgbnI7CisJc3RydWN0IHBhdGNoX2lkIGJ1Y2tldFtCVUNLRVRfU0laRV07Cit9OworCitpbnQgaW5pdF9wYXRjaF9pZHMoc3RydWN0IHBhdGNoX2lkcyAqaWRzKQoreworCW1lbXNldChpZHMsIDAsIHNpemVvZigqaWRzKSk7CisJZGlmZl9zZXR1cCgmaWRzLT5kaWZmb3B0cyk7CisJRElGRl9PUFRfU0VUKCZpZHMtPmRpZmZvcHRzLCBSRUNVUlNJVkUpOworCWRpZmZfc2V0dXBfZG9uZSgmaWRzLT5kaWZmb3B0cyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBmcmVlX3BhdGNoX2lkcyhzdHJ1Y3QgcGF0Y2hfaWRzICppZHMpCit7CisJc3RydWN0IHBhdGNoX2lkX2J1Y2tldCAqbmV4dCwgKnBhdGNoZXM7CisKKwlmcmVlKGlkcy0+dGFibGUpOworCWZvciAocGF0Y2hlcyA9IGlkcy0+cGF0Y2hlczsgcGF0Y2hlczsgcGF0Y2hlcyA9IG5leHQpIHsKKwkJbmV4dCA9IHBhdGNoZXMtPm5leHQ7CisJCWZyZWUocGF0Y2hlcyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBhdGNoX2lkICphZGRfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgICBzdHJ1Y3QgcGF0Y2hfaWRzICppZHMsCisJCQkJICAgaW50IG5vX2FkZCkKK3sKKwlzdHJ1Y3QgcGF0Y2hfaWRfYnVja2V0ICpidWNrZXQ7CisJc3RydWN0IHBhdGNoX2lkICplbnQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgcG9zOworCisJaWYgKGNvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMtPmRpZmZvcHRzLCBzaGExKSkKKwkJcmV0dXJuIE5VTEw7CisJcG9zID0gcGF0Y2hfcG9zKGlkcy0+dGFibGUsIGlkcy0+bnIsIHNoYTEpOworCWlmICgwIDw9IHBvcykKKwkJcmV0dXJuIGlkcy0+dGFibGVbcG9zXTsKKwlpZiAobm9fYWRkKQorCQlyZXR1cm4gTlVMTDsKKworCXBvcyA9IC0xIC0gcG9zOworCisJYnVja2V0ID0gaWRzLT5wYXRjaGVzOworCWlmICghYnVja2V0IHx8IChCVUNLRVRfU0laRSA8PSBidWNrZXQtPm5yKSkgeworCQlidWNrZXQgPSB4Y2FsbG9jKDEsIHNpemVvZigqYnVja2V0KSk7CisJCWJ1Y2tldC0+bmV4dCA9IGlkcy0+cGF0Y2hlczsKKwkJaWRzLT5wYXRjaGVzID0gYnVja2V0OworCX0KKwllbnQgPSAmYnVja2V0LT5idWNrZXRbYnVja2V0LT5ucisrXTsKKwloYXNoY3B5KGVudC0+cGF0Y2hfaWQsIHNoYTEpOworCisJQUxMT0NfR1JPVyhpZHMtPnRhYmxlLCBpZHMtPm5yICsgMSwgaWRzLT5hbGxvYyk7CisJaWYgKHBvcyA8IGlkcy0+bnIpCisJCW1lbW1vdmUoaWRzLT50YWJsZSArIHBvcyArIDEsIGlkcy0+dGFibGUgKyBwb3MsCisJCQlzaXplb2YoZW50KSAqIChpZHMtPm5yIC0gcG9zKSk7CisJaWRzLT5ucisrOworCWlkcy0+dGFibGVbcG9zXSA9IGVudDsKKwlyZXR1cm4gaWRzLT50YWJsZVtwb3NdOworfQorCitzdHJ1Y3QgcGF0Y2hfaWQgKmhhc19jb21taXRfcGF0Y2hfaWQoc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCQkJCSAgICAgc3RydWN0IHBhdGNoX2lkcyAqaWRzKQoreworCXJldHVybiBhZGRfY29tbWl0KGNvbW1pdCwgaWRzLCAxKTsKK30KKworc3RydWN0IHBhdGNoX2lkICphZGRfY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCQkgICAgIHN0cnVjdCBwYXRjaF9pZHMgKmlkcykKK3sKKwlyZXR1cm4gYWRkX2NvbW1pdChjb21taXQsIGlkcywgMCk7Cit9CmRpZmYgLS1naXQgYS9wYXRjaC1pZHMuaCBiL3BhdGNoLWlkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YzdjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaC1pZHMuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIFBBVENIX0lEU19ICisjZGVmaW5lIFBBVENIX0lEU19ICisKK3N0cnVjdCBwYXRjaF9pZCB7CisJdW5zaWduZWQgY2hhciBwYXRjaF9pZFsyMF07CisJY2hhciBzZWVuOworfTsKKworc3RydWN0IHBhdGNoX2lkcyB7CisJc3RydWN0IGRpZmZfb3B0aW9ucyBkaWZmb3B0czsKKwlpbnQgbnIsIGFsbG9jOworCXN0cnVjdCBwYXRjaF9pZCAqKnRhYmxlOworCXN0cnVjdCBwYXRjaF9pZF9idWNrZXQgKnBhdGNoZXM7Cit9OworCitpbnQgaW5pdF9wYXRjaF9pZHMoc3RydWN0IHBhdGNoX2lkcyAqKTsKK2ludCBmcmVlX3BhdGNoX2lkcyhzdHJ1Y3QgcGF0Y2hfaWRzICopOworc3RydWN0IHBhdGNoX2lkICphZGRfY29tbWl0X3BhdGNoX2lkKHN0cnVjdCBjb21taXQgKiwgc3RydWN0IHBhdGNoX2lkcyAqKTsKK3N0cnVjdCBwYXRjaF9pZCAqaGFzX2NvbW1pdF9wYXRjaF9pZChzdHJ1Y3QgY29tbWl0ICosIHN0cnVjdCBwYXRjaF9pZHMgKik7CisKKyNlbmRpZiAvKiBQQVRDSF9JRFNfSCAqLwpkaWZmIC0tZ2l0IGEvcGF0aC5jIGIvcGF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NDBjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRoLmMKQEAgLTAsMCArMSwxMTk2IEBACisvKgorICogVXRpbGl0aWVzIGZvciBwYXRocyBhbmQgcGF0aG5hbWVzCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAiZGlyLmgiCisKK3N0YXRpYyBpbnQgZ2V0X3N0X21vZGVfYml0cyhjb25zdCBjaGFyICpwYXRoLCBpbnQgKm1vZGUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJaWYgKGxzdGF0KHBhdGgsICZzdCkgPCAwKQorCQlyZXR1cm4gLTE7CisJKm1vZGUgPSBzdC5zdF9tb2RlOworCXJldHVybiAwOworfQorCitzdGF0aWMgY2hhciBiYWRfcGF0aFtdID0gIi9iYWQtcGF0aC8iOworCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiAqZ2V0X3BhdGhuYW1lKHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgcGF0aG5hbWVfYXJyYXlbNF0gPSB7CisJCVNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQsIFNUUkJVRl9JTklUCisJfTsKKwlzdGF0aWMgaW50IGluZGV4OworCXN0cnVjdCBzdHJidWYgKnNiID0gJnBhdGhuYW1lX2FycmF5WzMgJiArK2luZGV4XTsKKwlzdHJidWZfcmVzZXQoc2IpOworCXJldHVybiBzYjsKK30KKworc3RhdGljIGNoYXIgKmNsZWFudXBfcGF0aChjaGFyICpwYXRoKQoreworCS8qIENsZWFuIGl0IHVwICovCisJaWYgKCFtZW1jbXAocGF0aCwgIi4vIiwgMikpIHsKKwkJcGF0aCArPSAyOworCQl3aGlsZSAoKnBhdGggPT0gJy8nKQorCQkJcGF0aCsrOworCX0KKwlyZXR1cm4gcGF0aDsKK30KKworc3RhdGljIHZvaWQgc3RyYnVmX2NsZWFudXBfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwljaGFyICpwYXRoID0gY2xlYW51cF9wYXRoKHNiLT5idWYpOworCWlmIChwYXRoID4gc2ItPmJ1ZikKKwkJc3RyYnVmX3JlbW92ZShzYiwgMCwgcGF0aCAtIHNiLT5idWYpOworfQorCitjaGFyICpta3NucGF0aChjaGFyICpidWYsIHNpemVfdCBuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJdW5zaWduZWQgbGVuOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlsZW4gPSB2c25wcmludGYoYnVmLCBuLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlpZiAobGVuID49IG4pIHsKKwkJc3RybGNweShidWYsIGJhZF9wYXRoLCBuKTsKKwkJcmV0dXJuIGJ1ZjsKKwl9CisJcmV0dXJuIGNsZWFudXBfcGF0aChidWYpOworfQorCitzdGF0aWMgaW50IGRpcl9wcmVmaXgoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICpkaXIpCit7CisJaW50IGxlbiA9IHN0cmxlbihkaXIpOworCXJldHVybiAhc3RybmNtcChidWYsIGRpciwgbGVuKSAmJgorCQkoaXNfZGlyX3NlcChidWZbbGVuXSkgfHwgYnVmW2xlbl0gPT0gJ1wwJyk7Cit9CisKKy8qICRidWYgPX4gbXwkZGlyLyskZmlsZXwgYnV0IHdpdGhvdXQgcmVnZXggKi8KK3N0YXRpYyBpbnQgaXNfZGlyX2ZpbGUoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICpkaXIsIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJaW50IGxlbiA9IHN0cmxlbihkaXIpOworCWlmIChzdHJuY21wKGJ1ZiwgZGlyLCBsZW4pIHx8ICFpc19kaXJfc2VwKGJ1ZltsZW5dKSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKGlzX2Rpcl9zZXAoYnVmW2xlbl0pKQorCQlsZW4rKzsKKwlyZXR1cm4gIXN0cmNtcChidWYgKyBsZW4sIGZpbGUpOworfQorCitzdGF0aWMgdm9pZCByZXBsYWNlX2RpcihzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBsZW4sIGNvbnN0IGNoYXIgKm5ld2RpcikKK3sKKwlpbnQgbmV3bGVuID0gc3RybGVuKG5ld2Rpcik7CisJaW50IG5lZWRfc2VwID0gKGJ1Zi0+YnVmW2xlbl0gJiYgIWlzX2Rpcl9zZXAoYnVmLT5idWZbbGVuXSkpICYmCisJCSFpc19kaXJfc2VwKG5ld2RpcltuZXdsZW4gLSAxXSk7CisJaWYgKG5lZWRfc2VwKQorCQlsZW4tLTsJIC8qIGtlZXAgb25lIGNoYXIsIHRvIGJlIHJlcGxhY2VkIHdpdGggJy8nICAqLworCXN0cmJ1Zl9zcGxpY2UoYnVmLCAwLCBsZW4sIG5ld2RpciwgbmV3bGVuKTsKKwlpZiAobmVlZF9zZXApCisJCWJ1Zi0+YnVmW25ld2xlbl0gPSAnLyc7Cit9CisKK3N0cnVjdCBjb21tb25fZGlyIHsKKwkvKiBOb3QgY29uc2lkZXJlZCBnYXJiYWdlIGZvciByZXBvcnRfbGlua2VkX2NoZWNrb3V0X2dhcmJhZ2UgKi8KKwl1bnNpZ25lZCBpZ25vcmVfZ2FyYmFnZToxOworCXVuc2lnbmVkIGlzX2RpcjoxOworCS8qIE5vdCBjb21tb24gZXZlbiB0aG91Z2ggaXRzIHBhcmVudCBpcyAqLworCXVuc2lnbmVkIGV4Y2x1ZGU6MTsKKwljb25zdCBjaGFyICpkaXJuYW1lOworfTsKKworc3RhdGljIHN0cnVjdCBjb21tb25fZGlyIGNvbW1vbl9saXN0W10gPSB7CisJeyAwLCAxLCAwLCAiYnJhbmNoZXMiIH0sCisJeyAwLCAxLCAwLCAiaG9va3MiIH0sCisJeyAwLCAxLCAwLCAiaW5mbyIgfSwKKwl7IDAsIDAsIDEsICJpbmZvL3NwYXJzZS1jaGVja291dCIgfSwKKwl7IDEsIDEsIDAsICJsb2dzIiB9LAorCXsgMSwgMSwgMSwgImxvZ3MvSEVBRCIgfSwKKwl7IDAsIDEsIDEsICJsb2dzL3JlZnMvYmlzZWN0IiB9LAorCXsgMCwgMSwgMCwgImxvc3QtZm91bmQiIH0sCisJeyAwLCAxLCAwLCAib2JqZWN0cyIgfSwKKwl7IDAsIDEsIDAsICJyZWZzIiB9LAorCXsgMCwgMSwgMSwgInJlZnMvYmlzZWN0IiB9LAorCXsgMCwgMSwgMCwgInJlbW90ZXMiIH0sCisJeyAwLCAxLCAwLCAid29ya3RyZWVzIiB9LAorCXsgMCwgMSwgMCwgInJyLWNhY2hlIiB9LAorCXsgMCwgMSwgMCwgInN2biIgfSwKKwl7IDAsIDAsIDAsICJjb25maWciIH0sCisJeyAxLCAwLCAwLCAiZ2MucGlkIiB9LAorCXsgMCwgMCwgMCwgInBhY2tlZC1yZWZzIiB9LAorCXsgMCwgMCwgMCwgInNoYWxsb3ciIH0sCisJeyAwLCAwLCAwLCBOVUxMIH0KK307CisKKy8qCisgKiBBIGNvbXByZXNzZWQgdHJpZS4gIEEgdHJpZSBub2RlIGNvbnNpc3RzIG9mIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzIHRoYXQKKyAqIGFyZSBjb21tb24gdG8gYWxsIGVsZW1lbnRzIHdpdGggdGhpcyBwcmVmaXgsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgc29tZQorICogY2hpbGRyZW4uICBJZiB2YWx1ZSBpcyBub3QgTlVMTCwgdGhlIHRyaWUgbm9kZSBpcyBhIHRlcm1pbmFsIG5vZGUuCisgKgorICogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc2V0IG9mIHN0cmluZ3M6CisgKiBhYmMKKyAqIGRlZgorICogZGVmaW5pdGUKKyAqIGRlZmluaXRpb24KKyAqCisgKiBUaGUgdHJpZSB3b3VsZCBsb29rIGxvb2sgbGlrZToKKyAqIHJvb3Q6IGxlbiA9IDAsIGNoaWxkcmVuIGEgYW5kIGQgbm9uLU5VTEwsIHZhbHVlID0gTlVMTC4KKyAqICAgIGE6IGxlbiA9IDIsIGNvbnRlbnRzID0gYmMsIHZhbHVlID0gKGRhdGEgZm9yICJhYmMiKQorICogICAgZDogbGVuID0gMiwgY29udGVudHMgPSBlZiwgY2hpbGRyZW4gaSBub24tTlVMTCwgdmFsdWUgPSAoZGF0YSBmb3IgImRlZiIpCisgKiAgICAgICBpOiBsZW4gPSAzLCBjb250ZW50cyA9IG5pdCwgY2hpbGRyZW4gZSBhbmQgaSBub24tTlVMTCwgdmFsdWUgPSBOVUxMCisgKiAgICAgICAgICAgZTogbGVuID0gMCwgY2hpbGRyZW4gYWxsIE5VTEwsIHZhbHVlID0gKGRhdGEgZm9yICJkZWZpbml0ZSIpCisgKiAgICAgICAgICAgaTogbGVuID0gMiwgY29udGVudHMgPSBvbiwgY2hpbGRyZW4gYWxsIE5VTEwsCisgKiAgICAgICAgICAgICAgdmFsdWUgPSAoZGF0YSBmb3IgImRlZmluaXRpb24iKQorICovCitzdHJ1Y3QgdHJpZSB7CisJc3RydWN0IHRyaWUgKmNoaWxkcmVuWzI1Nl07CisJaW50IGxlbjsKKwljaGFyICpjb250ZW50czsKKwl2b2lkICp2YWx1ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJpZSAqbWFrZV90cmllX25vZGUoY29uc3QgY2hhciAqa2V5LCB2b2lkICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgdHJpZSAqbmV3X25vZGUgPSB4Y2FsbG9jKDEsIHNpemVvZigqbmV3X25vZGUpKTsKKwluZXdfbm9kZS0+bGVuID0gc3RybGVuKGtleSk7CisJaWYgKG5ld19ub2RlLT5sZW4pIHsKKwkJbmV3X25vZGUtPmNvbnRlbnRzID0geG1hbGxvYyhuZXdfbm9kZS0+bGVuKTsKKwkJbWVtY3B5KG5ld19ub2RlLT5jb250ZW50cywga2V5LCBuZXdfbm9kZS0+bGVuKTsKKwl9CisJbmV3X25vZGUtPnZhbHVlID0gdmFsdWU7CisJcmV0dXJuIG5ld19ub2RlOworfQorCisvKgorICogQWRkIGEga2V5L3ZhbHVlIHBhaXIgdG8gYSB0cmllLiAgVGhlIGtleSBpcyBhc3N1bWVkIHRvIGJlIFwwLXRlcm1pbmF0ZWQuCisgKiBJZiB0aGVyZSB3YXMgYW4gZXhpc3RpbmcgdmFsdWUgZm9yIHRoaXMga2V5LCByZXR1cm4gaXQuCisgKi8KK3N0YXRpYyB2b2lkICphZGRfdG9fdHJpZShzdHJ1Y3QgdHJpZSAqcm9vdCwgY29uc3QgY2hhciAqa2V5LCB2b2lkICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgdHJpZSAqY2hpbGQ7CisJdm9pZCAqb2xkOworCWludCBpOworCisJaWYgKCEqa2V5KSB7CisJCS8qIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBrZXkgKi8KKwkJb2xkID0gcm9vdC0+dmFsdWU7CisJCXJvb3QtPnZhbHVlID0gdmFsdWU7CisJCXJldHVybiBvbGQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJvb3QtPmxlbjsgaSsrKSB7CisJCWlmIChyb290LT5jb250ZW50c1tpXSA9PSBrZXlbaV0pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBTcGxpdCB0aGlzIG5vZGU6IGNoaWxkIHdpbGwgY29udGFpbiB0aGlzIG5vZGUncworCQkgKiBleGlzdGluZyBjaGlsZHJlbi4KKwkJICovCisJCWNoaWxkID0gbWFsbG9jKHNpemVvZigqY2hpbGQpKTsKKwkJbWVtY3B5KGNoaWxkLT5jaGlsZHJlbiwgcm9vdC0+Y2hpbGRyZW4sIHNpemVvZihyb290LT5jaGlsZHJlbikpOworCisJCWNoaWxkLT5sZW4gPSByb290LT5sZW4gLSBpIC0gMTsKKwkJaWYgKGNoaWxkLT5sZW4pIHsKKwkJCWNoaWxkLT5jb250ZW50cyA9IHhzdHJuZHVwKHJvb3QtPmNvbnRlbnRzICsgaSArIDEsCisJCQkJCQkgICBjaGlsZC0+bGVuKTsKKwkJfQorCQljaGlsZC0+dmFsdWUgPSByb290LT52YWx1ZTsKKwkJcm9vdC0+dmFsdWUgPSBOVUxMOworCQlyb290LT5sZW4gPSBpOworCisJCW1lbXNldChyb290LT5jaGlsZHJlbiwgMCwgc2l6ZW9mKHJvb3QtPmNoaWxkcmVuKSk7CisJCXJvb3QtPmNoaWxkcmVuWyh1bnNpZ25lZCBjaGFyKXJvb3QtPmNvbnRlbnRzW2ldXSA9IGNoaWxkOworCisJCS8qIFRoaXMgaXMgdGhlIG5ld2x5LWFkZGVkIGNoaWxkLiAqLworCQlyb290LT5jaGlsZHJlblsodW5zaWduZWQgY2hhcilrZXlbaV1dID0KKwkJCW1ha2VfdHJpZV9ub2RlKGtleSArIGkgKyAxLCB2YWx1ZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIFdlIGhhdmUgbWF0Y2hlZCB0aGUgZW50aXJlIGNvbXByZXNzZWQgc2VjdGlvbiAqLworCWlmIChrZXlbaV0pIHsKKwkJY2hpbGQgPSByb290LT5jaGlsZHJlblsodW5zaWduZWQgY2hhcilrZXlbcm9vdC0+bGVuXV07CisJCWlmIChjaGlsZCkgeworCQkJcmV0dXJuIGFkZF90b190cmllKGNoaWxkLCBrZXkgKyByb290LT5sZW4gKyAxLCB2YWx1ZSk7CisJCX0gZWxzZSB7CisJCQljaGlsZCA9IG1ha2VfdHJpZV9ub2RlKGtleSArIHJvb3QtPmxlbiArIDEsIHZhbHVlKTsKKwkJCXJvb3QtPmNoaWxkcmVuWyh1bnNpZ25lZCBjaGFyKWtleVtyb290LT5sZW5dXSA9IGNoaWxkOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlvbGQgPSByb290LT52YWx1ZTsKKwlyb290LT52YWx1ZSA9IHZhbHVlOworCXJldHVybiBvbGQ7Cit9CisKK3R5cGVkZWYgaW50ICgqbWF0Y2hfZm4pKGNvbnN0IGNoYXIgKnVubWF0Y2hlZCwgdm9pZCAqZGF0YSwgdm9pZCAqYmF0b24pOworCisvKgorICogU2VhcmNoIGEgdHJpZSBmb3Igc29tZSBrZXkuICBGaW5kIHRoZSBsb25nZXN0IC8tb3ItXDAtdGVybWluYXRlZAorICogcHJlZml4IG9mIHRoZSBrZXkgZm9yIHdoaWNoIHRoZSB0cmllIGNvbnRhaW5zIGEgdmFsdWUuICBDYWxsIGZuCisgKiB3aXRoIHRoZSB1bm1hdGNoZWQgcG9ydGlvbiBvZiB0aGUga2V5IGFuZCB0aGUgZm91bmQgdmFsdWUsIGFuZAorICogcmV0dXJuIGl0cyByZXR1cm4gdmFsdWUuICBJZiB0aGVyZSBpcyBubyBzdWNoIHByZWZpeCwgcmV0dXJuIC0xLgorICoKKyAqIFRoZSBrZXkgaXMgcGFydGlhbGx5IG5vcm1hbGl6ZWQ6IGNvbnNlY3V0aXZlIHNsYXNoZXMgYXJlIHNraXBwZWQuCisgKgorICogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSB0cmllIGNvbnRhaW5pbmcgb25seSBbcmVmcywKKyAqIHJlZnMvd29ya3RyZWVdIChib3RoIHdpdGggdmFsdWVzKS4KKyAqCisgKiB8IGtleSAgICAgICAgICAgICB8IHVubWF0Y2hlZCAgfCB2YWwgZnJvbSBub2RlIHwgcmV0dXJuIHZhbHVlIHwKKyAqIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfAorICogfCBhICAgICAgICAgICAgICAgfCBub3QgY2FsbGVkIHwgbi9hICAgICAgICAgICB8IC0xICAgICAgICAgICB8CisgKiB8IHJlZnMgICAgICAgICAgICB8IFwwICAgICAgICAgfCByZWZzICAgICAgICAgIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgcmVmcy8gICAgICAgICAgIHwgLyAgICAgICAgICB8IHJlZnMgICAgICAgICAgfCBhcyBwZXIgZm4gICAgfAorICogfCByZWZzL3cgICAgICAgICAgfCAvdyAgICAgICAgIHwgcmVmcyAgICAgICAgICB8IGFzIHBlciBmbiAgICB8CisgKiB8IHJlZnMvd29ya3RyZWUgICB8IFwwICAgICAgICAgfCByZWZzL3dvcmt0cmVlIHwgYXMgcGVyIGZuICAgIHwKKyAqIHwgcmVmcy93b3JrdHJlZS8gIHwgLyAgICAgICAgICB8IHJlZnMvd29ya3RyZWUgfCBhcyBwZXIgZm4gICAgfAorICogfCByZWZzL3dvcmt0cmVlL2EgfCAvYSAgICAgICAgIHwgcmVmcy93b3JrdHJlZSB8IGFzIHBlciBmbiAgICB8CisgKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwKKyAqCisgKi8KK3N0YXRpYyBpbnQgdHJpZV9maW5kKHN0cnVjdCB0cmllICpyb290LCBjb25zdCBjaGFyICprZXksIG1hdGNoX2ZuIGZuLAorCQkgICAgIHZvaWQgKmJhdG9uKQoreworCWludCBpOworCWludCByZXN1bHQ7CisJc3RydWN0IHRyaWUgKmNoaWxkOworCisJaWYgKCEqa2V5KSB7CisJCS8qIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBrZXkgKi8KKwkJaWYgKHJvb3QtPnZhbHVlICYmICFyb290LT5sZW4pCisJCQlyZXR1cm4gZm4oa2V5LCByb290LT52YWx1ZSwgYmF0b24pOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJvb3QtPmxlbjsgaSsrKSB7CisJCS8qIFBhcnRpYWwgcGF0aCBub3JtYWxpemF0aW9uOiBza2lwIGNvbnNlY3V0aXZlIHNsYXNoZXMuICovCisJCWlmIChrZXlbaV0gPT0gJy8nICYmIGtleVtpKzFdID09ICcvJykgeworCQkJa2V5Kys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocm9vdC0+Y29udGVudHNbaV0gIT0ga2V5W2ldKQorCQkJcmV0dXJuIC0xOworCX0KKworCS8qIE1hdGNoZWQgdGhlIGVudGlyZSBjb21wcmVzc2VkIHNlY3Rpb24gKi8KKwlrZXkgKz0gaTsKKwlpZiAoISprZXkpCisJCS8qIEVuZCBvZiBrZXkgKi8KKwkJcmV0dXJuIGZuKGtleSwgcm9vdC0+dmFsdWUsIGJhdG9uKTsKKworCS8qIFBhcnRpYWwgcGF0aCBub3JtYWxpemF0aW9uOiBza2lwIGNvbnNlY3V0aXZlIHNsYXNoZXMgKi8KKwl3aGlsZSAoa2V5WzBdID09ICcvJyAmJiBrZXlbMV0gPT0gJy8nKQorCQlrZXkrKzsKKworCWNoaWxkID0gcm9vdC0+Y2hpbGRyZW5bKHVuc2lnbmVkIGNoYXIpKmtleV07CisJaWYgKGNoaWxkKQorCQlyZXN1bHQgPSB0cmllX2ZpbmQoY2hpbGQsIGtleSArIDEsIGZuLCBiYXRvbik7CisJZWxzZQorCQlyZXN1bHQgPSAtMTsKKworCWlmIChyZXN1bHQgPj0gMCB8fCAoKmtleSAhPSAnLycgJiYgKmtleSAhPSAwKSkKKwkJcmV0dXJuIHJlc3VsdDsKKwlpZiAocm9vdC0+dmFsdWUpCisJCXJldHVybiBmbihrZXksIHJvb3QtPnZhbHVlLCBiYXRvbik7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJpZSBjb21tb25fdHJpZTsKK3N0YXRpYyBpbnQgY29tbW9uX3RyaWVfZG9uZV9zZXR1cDsKKworc3RhdGljIHZvaWQgaW5pdF9jb21tb25fdHJpZSh2b2lkKQoreworCXN0cnVjdCBjb21tb25fZGlyICpwOworCisJaWYgKGNvbW1vbl90cmllX2RvbmVfc2V0dXApCisJCXJldHVybjsKKworCWZvciAocCA9IGNvbW1vbl9saXN0OyBwLT5kaXJuYW1lOyBwKyspCisJCWFkZF90b190cmllKCZjb21tb25fdHJpZSwgcC0+ZGlybmFtZSwgcCk7CisKKwljb21tb25fdHJpZV9kb25lX3NldHVwID0gMTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgdXBkYXRlX2NvbW1vbl9kaXI6IHJldHVybnMgMSBpZiB0aGUgZGlyCisgKiBwcmVmaXggaXMgY29tbW9uLgorICovCitzdGF0aWMgaW50IGNoZWNrX2NvbW1vbihjb25zdCBjaGFyICp1bm1hdGNoZWQsIHZvaWQgKnZhbHVlLCB2b2lkICpiYXRvbikKK3sKKwlzdHJ1Y3QgY29tbW9uX2RpciAqZGlyID0gdmFsdWU7CisKKwlpZiAoIWRpcikKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGlyLT5pc19kaXIgJiYgKHVubWF0Y2hlZFswXSA9PSAwIHx8IHVubWF0Y2hlZFswXSA9PSAnLycpKQorCQlyZXR1cm4gIWRpci0+ZXhjbHVkZTsKKworCWlmICghZGlyLT5pc19kaXIgJiYgdW5tYXRjaGVkWzBdID09IDApCisJCXJldHVybiAhZGlyLT5leGNsdWRlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jb21tb25fZGlyKHN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IGdpdF9kaXJfbGVuLAorCQkJICAgICAgY29uc3QgY2hhciAqY29tbW9uX2RpcikKK3sKKwljaGFyICpiYXNlID0gYnVmLT5idWYgKyBnaXRfZGlyX2xlbjsKKwlpbml0X2NvbW1vbl90cmllKCk7CisJaWYgKCFjb21tb25fZGlyKQorCQljb21tb25fZGlyID0gZ2V0X2dpdF9jb21tb25fZGlyKCk7CisJaWYgKHRyaWVfZmluZCgmY29tbW9uX3RyaWUsIGJhc2UsIGNoZWNrX2NvbW1vbiwgTlVMTCkgPiAwKQorCQlyZXBsYWNlX2RpcihidWYsIGdpdF9kaXJfbGVuLCBjb21tb25fZGlyKTsKK30KKwordm9pZCByZXBvcnRfbGlua2VkX2NoZWNrb3V0X2dhcmJhZ2Uodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3Qgc3RydWN0IGNvbW1vbl9kaXIgKnA7CisJaW50IGxlbjsKKworCWlmICghZ2l0X2NvbW1vbl9kaXJfZW52KQorCQlyZXR1cm47CisJc3RyYnVmX2FkZGYoJnNiLCAiJXMvIiwgZ2V0X2dpdF9kaXIoKSk7CisJbGVuID0gc2IubGVuOworCWZvciAocCA9IGNvbW1vbl9saXN0OyBwLT5kaXJuYW1lOyBwKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IHAtPmRpcm5hbWU7CisJCWlmIChwLT5pZ25vcmVfZ2FyYmFnZSkKKwkJCWNvbnRpbnVlOworCQlzdHJidWZfc2V0bGVuKCZzYiwgbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIHBhdGgpOworCQlpZiAoZmlsZV9leGlzdHMoc2IuYnVmKSkKKwkJCXJlcG9ydF9nYXJiYWdlKCJ1bnVzZWQgaW4gbGlua2VkIGNoZWNrb3V0Iiwgc2IuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIHZvaWQgYWRqdXN0X2dpdF9wYXRoKHN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IGdpdF9kaXJfbGVuKQoreworCWNvbnN0IGNoYXIgKmJhc2UgPSBidWYtPmJ1ZiArIGdpdF9kaXJfbGVuOworCWlmIChnaXRfZ3JhZnRfZW52ICYmIGlzX2Rpcl9maWxlKGJhc2UsICJpbmZvIiwgImdyYWZ0cyIpKQorCQlzdHJidWZfc3BsaWNlKGJ1ZiwgMCwgYnVmLT5sZW4sCisJCQkgICAgICBnZXRfZ3JhZnRfZmlsZSgpLCBzdHJsZW4oZ2V0X2dyYWZ0X2ZpbGUoKSkpOworCWVsc2UgaWYgKGdpdF9pbmRleF9lbnYgJiYgIXN0cmNtcChiYXNlLCAiaW5kZXgiKSkKKwkJc3RyYnVmX3NwbGljZShidWYsIDAsIGJ1Zi0+bGVuLAorCQkJICAgICAgZ2V0X2luZGV4X2ZpbGUoKSwgc3RybGVuKGdldF9pbmRleF9maWxlKCkpKTsKKwllbHNlIGlmIChnaXRfZGJfZW52ICYmIGRpcl9wcmVmaXgoYmFzZSwgIm9iamVjdHMiKSkKKwkJcmVwbGFjZV9kaXIoYnVmLCBnaXRfZGlyX2xlbiArIDcsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCWVsc2UgaWYgKGdpdF9jb21tb25fZGlyX2VudikKKwkJdXBkYXRlX2NvbW1vbl9kaXIoYnVmLCBnaXRfZGlyX2xlbiwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGRvX2dpdF9wYXRoKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCit7CisJaW50IGdpdGRpcl9sZW47CisJc3RyYnVmX2FkZHN0cihidWYsIGdldF9naXRfZGlyKCkpOworCWlmIChidWYtPmxlbiAmJiAhaXNfZGlyX3NlcChidWYtPmJ1ZltidWYtPmxlbiAtIDFdKSkKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgJy8nKTsKKwlnaXRkaXJfbGVuID0gYnVmLT5sZW47CisJc3RyYnVmX3ZhZGRmKGJ1ZiwgZm10LCBhcmdzKTsKKwlhZGp1c3RfZ2l0X3BhdGgoYnVmLCBnaXRkaXJfbGVuKTsKKwlzdHJidWZfY2xlYW51cF9wYXRoKGJ1Zik7Cit9CisKK2NoYXIgKmdpdF9wYXRoX2J1ZihzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWRvX2dpdF9wYXRoKGJ1ZiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIGJ1Zi0+YnVmOworfQorCit2b2lkIHN0cmJ1Zl9naXRfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fZ2l0X3BhdGgoc2IsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworfQorCitjb25zdCBjaGFyICpnaXRfcGF0aChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlzdHJ1Y3Qgc3RyYnVmICpwYXRobmFtZSA9IGdldF9wYXRobmFtZSgpOworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWRvX2dpdF9wYXRoKHBhdGhuYW1lLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gcGF0aG5hbWUtPmJ1ZjsKK30KKworY2hhciAqZ2l0X3BhdGhkdXAoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJdmFfbGlzdCBhcmdzOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJZG9fZ2l0X3BhdGgoJnBhdGgsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZwYXRoLCBOVUxMKTsKK30KKworY2hhciAqbWtwYXRoZHVwKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlzdHJidWZfdmFkZGYoJnNiLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlzdHJidWZfY2xlYW51cF9wYXRoKCZzYik7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKK30KKworY29uc3QgY2hhciAqbWtwYXRoKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlzdHJ1Y3Qgc3RyYnVmICpwYXRobmFtZSA9IGdldF9wYXRobmFtZSgpOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJc3RyYnVmX3ZhZGRmKHBhdGhuYW1lLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlyZXR1cm4gY2xlYW51cF9wYXRoKHBhdGhuYW1lLT5idWYpOworfQorCitzdGF0aWMgdm9pZCBkb19zdWJtb2R1bGVfcGF0aChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgICBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncykKK3sKKwljb25zdCBjaGFyICpnaXRfZGlyOworCXN0cnVjdCBzdHJidWYgZ2l0X3N1Ym1vZHVsZV9jb21tb25fZGlyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBnaXRfc3VibW9kdWxlX2RpciA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX2FkZHN0cihidWYsIHBhdGgpOworCXN0cmJ1Zl9jb21wbGV0ZShidWYsICcvJyk7CisJc3RyYnVmX2FkZHN0cihidWYsICIuZ2l0Iik7CisKKwlnaXRfZGlyID0gcmVhZF9naXRmaWxlKGJ1Zi0+YnVmKTsKKwlpZiAoZ2l0X2RpcikgeworCQlzdHJidWZfcmVzZXQoYnVmKTsKKwkJc3RyYnVmX2FkZHN0cihidWYsIGdpdF9kaXIpOworCX0KKwlzdHJidWZfYWRkY2goYnVmLCAnLycpOworCXN0cmJ1Zl9hZGRzdHIoJmdpdF9zdWJtb2R1bGVfZGlyLCBidWYtPmJ1Zik7CisKKwlzdHJidWZfdmFkZGYoYnVmLCBmbXQsIGFyZ3MpOworCisJaWYgKGdldF9jb21tb25fZGlyX25vZW52KCZnaXRfc3VibW9kdWxlX2NvbW1vbl9kaXIsIGdpdF9zdWJtb2R1bGVfZGlyLmJ1ZikpCisJCXVwZGF0ZV9jb21tb25fZGlyKGJ1ZiwgZ2l0X3N1Ym1vZHVsZV9kaXIubGVuLCBnaXRfc3VibW9kdWxlX2NvbW1vbl9kaXIuYnVmKTsKKworCXN0cmJ1Zl9jbGVhbnVwX3BhdGgoYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZnaXRfc3VibW9kdWxlX2Rpcik7CisJc3RyYnVmX3JlbGVhc2UoJmdpdF9zdWJtb2R1bGVfY29tbW9uX2Rpcik7Cit9CisKK2NoYXIgKmdpdF9wYXRoZHVwX3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWRvX3N1Ym1vZHVsZV9wYXRoKCZidWYsIHBhdGgsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworfQorCit2b2lkIHN0cmJ1Zl9naXRfcGF0aF9zdWJtb2R1bGUoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWRvX3N1Ym1vZHVsZV9wYXRoKGJ1ZiwgcGF0aCwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7Cit9CisKK2ludCB2YWxpZGF0ZV9oZWFkcmVmKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhciAqYnVmLCBidWZmZXJbMjU2XTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBmZDsKKwlzc2l6ZV90IGxlbjsKKworCWlmIChsc3RhdChwYXRoLCAmc3QpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogTWFrZSBzdXJlIGl0IGlzIGEgInJlZnMvLi4iIHN5bWxpbmsgKi8KKwlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQlsZW4gPSByZWFkbGluayhwYXRoLCBidWZmZXIsIHNpemVvZihidWZmZXIpLTEpOworCQlpZiAobGVuID49IDUgJiYgIW1lbWNtcCgicmVmcy8iLCBidWZmZXIsIDUpKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIEFueXRoaW5nIGVsc2UsIGp1c3Qgb3BlbiBpdCBhbmQgdHJ5IHRvIHNlZSBpZiBpdCBpcyBhIHN5bWJvbGljIHJlZi4KKwkgKi8KKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKwlsZW4gPSByZWFkX2luX2Z1bGwoZmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciktMSk7CisJY2xvc2UoZmQpOworCisJLyoKKwkgKiBJcyBpdCBhIHN5bWJvbGljIHJlZj8KKwkgKi8KKwlpZiAobGVuIDwgNCkKKwkJcmV0dXJuIC0xOworCWlmICghbWVtY21wKCJyZWY6IiwgYnVmZmVyLCA0KSkgeworCQlidWYgPSBidWZmZXIgKyA0OworCQlsZW4gLT0gNDsKKwkJd2hpbGUgKGxlbiAmJiBpc3NwYWNlKCpidWYpKQorCQkJYnVmKyssIGxlbi0tOworCQlpZiAobGVuID49IDUgJiYgIW1lbWNtcCgicmVmcy8iLCBidWYsIDUpKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBJcyB0aGlzIGEgZGV0YWNoZWQgSEVBRD8KKwkgKi8KKwlpZiAoIWdldF9zaGExX2hleChidWZmZXIsIHNoYTEpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBwYXNzd2QgKmdldHB3X3N0cihjb25zdCBjaGFyICp1c2VybmFtZSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcGFzc3dkICpwdzsKKwljaGFyICp1c2VybmFtZV96ID0geG1lbWR1cHoodXNlcm5hbWUsIGxlbik7CisJcHcgPSBnZXRwd25hbSh1c2VybmFtZV96KTsKKwlmcmVlKHVzZXJuYW1lX3opOworCXJldHVybiBwdzsKK30KKworLyoKKyAqIFJldHVybiBhIHN0cmluZyB3aXRoIH4gYW5kIH51c2VyIGV4cGFuZGVkIHZpYSBnZXRwdyouICBJZiBidWYgIT0gTlVMTCwKKyAqIHRoZW4gaXQgaXMgYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nLiBSZXR1cm5zIE5VTEwgb24gZ2V0cHcgZmFpbHVyZSBvcgorICogaWYgcGF0aCBpcyBOVUxMLgorICovCitjaGFyICpleHBhbmRfdXNlcl9wYXRoKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmJ1ZiB1c2VyX3BhdGggPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICp0b19jb3B5ID0gcGF0aDsKKworCWlmIChwYXRoID09IE5VTEwpCisJCWdvdG8gcmV0dXJuX251bGw7CisJaWYgKHBhdGhbMF0gPT0gJ34nKSB7CisJCWNvbnN0IGNoYXIgKmZpcnN0X3NsYXNoID0gc3RyY2hybnVsKHBhdGgsICcvJyk7CisJCWNvbnN0IGNoYXIgKnVzZXJuYW1lID0gcGF0aCArIDE7CisJCXNpemVfdCB1c2VybmFtZV9sZW4gPSBmaXJzdF9zbGFzaCAtIHVzZXJuYW1lOworCQlpZiAodXNlcm5hbWVfbGVuID09IDApIHsKKwkJCWNvbnN0IGNoYXIgKmhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKwkJCWlmICghaG9tZSkKKwkJCQlnb3RvIHJldHVybl9udWxsOworCQkJc3RyYnVmX2FkZHN0cigmdXNlcl9wYXRoLCBob21lKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwYXNzd2QgKnB3ID0gZ2V0cHdfc3RyKHVzZXJuYW1lLCB1c2VybmFtZV9sZW4pOworCQkJaWYgKCFwdykKKwkJCQlnb3RvIHJldHVybl9udWxsOworCQkJc3RyYnVmX2FkZHN0cigmdXNlcl9wYXRoLCBwdy0+cHdfZGlyKTsKKwkJfQorCQl0b19jb3B5ID0gZmlyc3Rfc2xhc2g7CisJfQorCXN0cmJ1Zl9hZGRzdHIoJnVzZXJfcGF0aCwgdG9fY29weSk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJnVzZXJfcGF0aCwgTlVMTCk7CityZXR1cm5fbnVsbDoKKwlzdHJidWZfcmVsZWFzZSgmdXNlcl9wYXRoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEZpcnN0LCBvbmUgZGlyZWN0b3J5IHRvIHRyeSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtLgorICoKKyAqICgwKSBJZiAic3RyaWN0IiBpcyBnaXZlbiwgdGhlIHBhdGggaXMgdXNlZCBhcyBnaXZlbiBhbmQgbm8gRFdJTSBpcworICogICAgIGRvbmUuIE90aGVyd2lzZToKKyAqICgxKSAifi9wYXRoIiB0byBtZWFuIHBhdGggdW5kZXIgdGhlIHJ1bm5pbmcgdXNlcidzIGhvbWUgZGlyZWN0b3J5OworICogKDIpICJ+dXNlci9wYXRoIiB0byBtZWFuIHBhdGggdW5kZXIgbmFtZWQgdXNlcidzIGhvbWUgZGlyZWN0b3J5OworICogKDMpICJyZWxhdGl2ZS9wYXRoIiB0byBtZWFuIGN3ZCByZWxhdGl2ZSBkaXJlY3Rvcnk7IG9yCisgKiAoNCkgIi9hYnNvbHV0ZS9wYXRoIiB0byBtZWFuIGFic29sdXRlIGRpcmVjdG9yeS4KKyAqCisgKiBVbmxlc3MgInN0cmljdCIgaXMgZ2l2ZW4sIHdlIGNoZWNrICIlcy8uZ2l0IiwgIiVzIiwgIiVzLmdpdC8uZ2l0IiwgIiVzLmdpdCIKKyAqIGluIHRoaXMgb3JkZXIuIFdlIHNlbGVjdCB0aGUgZmlyc3Qgb25lIHRoYXQgaXMgYSB2YWxpZCBnaXQgcmVwb3NpdG9yeSwgYW5kCisgKiBjaGRpcigpIHRvIGl0LiBJZiBub25lIG1hdGNoLCBvciB3ZSBmYWlsIHRvIGNoZGlyLCB3ZSByZXR1cm4gTlVMTC4KKyAqCisgKiBJZiBhbGwgZ29lcyB3ZWxsLCB3ZSByZXR1cm4gdGhlIGRpcmVjdG9yeSB3ZSB1c2VkIHRvIGNoZGlyKCkgKGJ1dAorICogYmVmb3JlIH51c2VyIGlzIGV4cGFuZGVkKSwgYXZvaWRpbmcgZ2V0Y3dkKCkgcmVzb2x2aW5nIHN5bWJvbGljCisgKiBsaW5rcy4gIFVzZXIgcmVsYXRpdmUgcGF0aHMgYXJlIGFsc28gcmV0dXJuZWQgYXMgdGhleSBhcmUgZ2l2ZW4sCisgKiBleGNlcHQgRFdJTSBzdWZmaXhpbmcuCisgKi8KK2NvbnN0IGNoYXIgKmVudGVyX3JlcG8oY29uc3QgY2hhciAqcGF0aCwgaW50IHN0cmljdCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB2YWxpZGF0ZWRfcGF0aCA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHVzZWRfcGF0aCA9IFNUUkJVRl9JTklUOworCisJaWYgKCFwYXRoKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghc3RyaWN0KSB7CisJCXN0YXRpYyBjb25zdCBjaGFyICpzdWZmaXhbXSA9IHsKKwkJCSIvLmdpdCIsICIiLCAiLmdpdC8uZ2l0IiwgIi5naXQiLCBOVUxMLAorCQl9OworCQljb25zdCBjaGFyICpnaXRmaWxlOworCQlpbnQgbGVuID0gc3RybGVuKHBhdGgpOworCQlpbnQgaTsKKwkJd2hpbGUgKCgxIDwgbGVuKSAmJiAocGF0aFtsZW4tMV0gPT0gJy8nKSkKKwkJCWxlbi0tOworCisJCS8qCisJCSAqIFdlIGNhbiBoYW5kbGUgYXJiaXRyYXJ5LXNpemVkIGJ1ZmZlcnMsIGJ1dCB0aGlzIHJlbWFpbnMgYXMgYQorCQkgKiBzYW5pdHkgY2hlY2sgb24gdW50cnVzdGVkIGlucHV0LgorCQkgKi8KKwkJaWYgKFBBVEhfTUFYIDw9IGxlbikKKwkJCXJldHVybiBOVUxMOworCisJCXN0cmJ1Zl9yZXNldCgmdXNlZF9wYXRoKTsKKwkJc3RyYnVmX3Jlc2V0KCZ2YWxpZGF0ZWRfcGF0aCk7CisJCXN0cmJ1Zl9hZGQoJnVzZWRfcGF0aCwgcGF0aCwgbGVuKTsKKwkJc3RyYnVmX2FkZCgmdmFsaWRhdGVkX3BhdGgsIHBhdGgsIGxlbik7CisKKwkJaWYgKHVzZWRfcGF0aC5idWZbMF0gPT0gJ34nKSB7CisJCQljaGFyICpuZXdwYXRoID0gZXhwYW5kX3VzZXJfcGF0aCh1c2VkX3BhdGguYnVmKTsKKwkJCWlmICghbmV3cGF0aCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCXN0cmJ1Zl9hdHRhY2goJnVzZWRfcGF0aCwgbmV3cGF0aCwgc3RybGVuKG5ld3BhdGgpLAorCQkJCSAgICAgIHN0cmxlbihuZXdwYXRoKSk7CisJCX0KKwkJZm9yIChpID0gMDsgc3VmZml4W2ldOyBpKyspIHsKKwkJCXN0cnVjdCBzdGF0IHN0OworCQkJc2l6ZV90IGJhc2VsZW4gPSB1c2VkX3BhdGgubGVuOworCQkJc3RyYnVmX2FkZHN0cigmdXNlZF9wYXRoLCBzdWZmaXhbaV0pOworCQkJaWYgKCFzdGF0KHVzZWRfcGF0aC5idWYsICZzdCkgJiYKKwkJCSAgICAoU19JU1JFRyhzdC5zdF9tb2RlKSB8fAorCQkJICAgIChTX0lTRElSKHN0LnN0X21vZGUpICYmIGlzX2dpdF9kaXJlY3RvcnkodXNlZF9wYXRoLmJ1ZikpKSkgeworCQkJCXN0cmJ1Zl9hZGRzdHIoJnZhbGlkYXRlZF9wYXRoLCBzdWZmaXhbaV0pOworCQkJCWJyZWFrOworCQkJfQorCQkJc3RyYnVmX3NldGxlbigmdXNlZF9wYXRoLCBiYXNlbGVuKTsKKwkJfQorCQlpZiAoIXN1ZmZpeFtpXSkKKwkJCXJldHVybiBOVUxMOworCQlnaXRmaWxlID0gcmVhZF9naXRmaWxlKHVzZWRfcGF0aC5idWYpOworCQlpZiAoZ2l0ZmlsZSkgeworCQkJc3RyYnVmX3Jlc2V0KCZ1c2VkX3BhdGgpOworCQkJc3RyYnVmX2FkZHN0cigmdXNlZF9wYXRoLCBnaXRmaWxlKTsKKwkJfQorCQlpZiAoY2hkaXIodXNlZF9wYXRoLmJ1ZikpCisJCQlyZXR1cm4gTlVMTDsKKwkJcGF0aCA9IHZhbGlkYXRlZF9wYXRoLmJ1ZjsKKwl9CisJZWxzZSB7CisJCWNvbnN0IGNoYXIgKmdpdGZpbGUgPSByZWFkX2dpdGZpbGUocGF0aCk7CisJCWlmIChnaXRmaWxlKQorCQkJcGF0aCA9IGdpdGZpbGU7CisJCWlmIChjaGRpcihwYXRoKSkKKwkJCXJldHVybiBOVUxMOworCX0KKworCWlmIChpc19naXRfZGlyZWN0b3J5KCIuIikpIHsKKwkJc2V0X2dpdF9kaXIoIi4iKTsKKwkJY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXQoKTsKKwkJcmV0dXJuIHBhdGg7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgY2FsY19zaGFyZWRfcGVybShpbnQgbW9kZSkKK3sKKwlpbnQgdHdlYWs7CisKKwlpZiAoc2hhcmVkX3JlcG9zaXRvcnkgPCAwKQorCQl0d2VhayA9IC1zaGFyZWRfcmVwb3NpdG9yeTsKKwllbHNlCisJCXR3ZWFrID0gc2hhcmVkX3JlcG9zaXRvcnk7CisKKwlpZiAoIShtb2RlICYgU19JV1VTUikpCisJCXR3ZWFrICY9IH4wMjIyOworCWlmIChtb2RlICYgU19JWFVTUikKKwkJLyogQ29weSByZWFkIGJpdHMgdG8gZXhlY3V0ZSBiaXRzICovCisJCXR3ZWFrIHw9ICh0d2VhayAmIDA0NDQpID4+IDI7CisJaWYgKHNoYXJlZF9yZXBvc2l0b3J5IDwgMCkKKwkJbW9kZSA9IChtb2RlICYgfjA3NzcpIHwgdHdlYWs7CisJZWxzZQorCQltb2RlIHw9IHR3ZWFrOworCisJcmV0dXJuIG1vZGU7Cit9CisKKworaW50IGFkanVzdF9zaGFyZWRfcGVybShjb25zdCBjaGFyICpwYXRoKQoreworCWludCBvbGRfbW9kZSwgbmV3X21vZGU7CisKKwlpZiAoIXNoYXJlZF9yZXBvc2l0b3J5KQorCQlyZXR1cm4gMDsKKwlpZiAoZ2V0X3N0X21vZGVfYml0cyhwYXRoLCAmb2xkX21vZGUpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJbmV3X21vZGUgPSBjYWxjX3NoYXJlZF9wZXJtKG9sZF9tb2RlKTsKKwlpZiAoU19JU0RJUihvbGRfbW9kZSkpIHsKKwkJLyogQ29weSByZWFkIGJpdHMgdG8gZXhlY3V0ZSBiaXRzICovCisJCW5ld19tb2RlIHw9IChuZXdfbW9kZSAmIDA0NDQpID4+IDI7CisJCW5ld19tb2RlIHw9IEZPUkNFX0RJUl9TRVRfR0lEOworCX0KKworCWlmICgoKG9sZF9tb2RlIF4gbmV3X21vZGUpICYgflNfSUZNVCkgJiYKKwkJCWNobW9kKHBhdGgsIChuZXdfbW9kZSAmIH5TX0lGTVQpKSA8IDApCisJCXJldHVybiAtMjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYXZlX3NhbWVfcm9vdChjb25zdCBjaGFyICpwYXRoMSwgY29uc3QgY2hhciAqcGF0aDIpCit7CisJaW50IGlzX2FiczEsIGlzX2FiczI7CisKKwlpc19hYnMxID0gaXNfYWJzb2x1dGVfcGF0aChwYXRoMSk7CisJaXNfYWJzMiA9IGlzX2Fic29sdXRlX3BhdGgocGF0aDIpOworCXJldHVybiAoaXNfYWJzMSAmJiBpc19hYnMyICYmIHRvbG93ZXIocGF0aDFbMF0pID09IHRvbG93ZXIocGF0aDJbMF0pKSB8fAorCSAgICAgICAoIWlzX2FiczEgJiYgIWlzX2FiczIpOworfQorCisvKgorICogR2l2ZSBwYXRoIGFzIHJlbGF0aXZlIHRvIHByZWZpeC4KKyAqCisgKiBUaGUgc3RyYnVmIG1heSBvciBtYXkgbm90IGJlIHVzZWQsIHNvIGRvIG5vdCBhc3N1bWUgaXQgY29udGFpbnMgdGhlCisgKiByZXR1cm5lZCBwYXRoLgorICovCitjb25zdCBjaGFyICpyZWxhdGl2ZV9wYXRoKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIHN0cnVjdCBzdHJidWYgKnNiKQoreworCWludCBpbl9sZW4gPSBpbiA/IHN0cmxlbihpbikgOiAwOworCWludCBwcmVmaXhfbGVuID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCWludCBpbl9vZmYgPSAwOworCWludCBwcmVmaXhfb2ZmID0gMDsKKwlpbnQgaSA9IDAsIGogPSAwOworCisJaWYgKCFpbl9sZW4pCisJCXJldHVybiAiLi8iOworCWVsc2UgaWYgKCFwcmVmaXhfbGVuKQorCQlyZXR1cm4gaW47CisKKwlpZiAoaGF2ZV9zYW1lX3Jvb3QoaW4sIHByZWZpeCkpIHsKKwkJLyogYnlwYXNzIGRvc19kcml2ZSwgZm9yICJjOiIgaXMgaWRlbnRpY2FsIHRvICJDOiIgKi8KKwkJaWYgKGhhc19kb3NfZHJpdmVfcHJlZml4KGluKSkgeworCQkJaSA9IDI7CisJCQlqID0gMjsKKwkJfQorCX0gZWxzZSB7CisJCXJldHVybiBpbjsKKwl9CisKKwl3aGlsZSAoaSA8IHByZWZpeF9sZW4gJiYgaiA8IGluX2xlbiAmJiBwcmVmaXhbaV0gPT0gaW5bal0pIHsKKwkJaWYgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkgeworCQkJd2hpbGUgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkKKwkJCQlpKys7CisJCQl3aGlsZSAoaXNfZGlyX3NlcChpbltqXSkpCisJCQkJaisrOworCQkJcHJlZml4X29mZiA9IGk7CisJCQlpbl9vZmYgPSBqOworCQl9IGVsc2UgeworCQkJaSsrOworCQkJaisrOworCQl9CisJfQorCisJaWYgKAorCSAgICAvKiAicHJlZml4IiBzZWVtcyBsaWtlIHByZWZpeCBvZiAiaW4iICovCisJICAgIGkgPj0gcHJlZml4X2xlbiAmJgorCSAgICAvKgorCSAgICAgKiBidXQgIi9mb28iIGlzIG5vdCBhIHByZWZpeCBvZiAiL2Zvb2JhciIKKwkgICAgICogKGkuZS4gcHJlZml4IG5vdCBlbmQgd2l0aCAnLycpCisJICAgICAqLworCSAgICBwcmVmaXhfb2ZmIDwgcHJlZml4X2xlbikgeworCQlpZiAoaiA+PSBpbl9sZW4pIHsKKwkJCS8qIGluPSIvYS9iIiwgcHJlZml4PSIvYS9iIiAqLworCQkJaW5fb2ZmID0gaW5fbGVuOworCQl9IGVsc2UgaWYgKGlzX2Rpcl9zZXAoaW5bal0pKSB7CisJCQkvKiBpbj0iL2EvYi9jIiwgcHJlZml4PSIvYS9iIiAqLworCQkJd2hpbGUgKGlzX2Rpcl9zZXAoaW5bal0pKQorCQkJCWorKzsKKwkJCWluX29mZiA9IGo7CisJCX0gZWxzZSB7CisJCQkvKiBpbj0iL2EvYmJiL2MiLCBwcmVmaXg9Ii9hL2IiICovCisJCQlpID0gcHJlZml4X29mZjsKKwkJfQorCX0gZWxzZSBpZiAoCisJCSAgIC8qICJpbiIgaXMgc2hvcnQgdGhhbiAicHJlZml4IiAqLworCQkgICBqID49IGluX2xlbiAmJgorCQkgICAvKiAiaW4iIG5vdCBlbmQgd2l0aCAnLycgKi8KKwkJICAgaW5fb2ZmIDwgaW5fbGVuKSB7CisJCWlmIChpc19kaXJfc2VwKHByZWZpeFtpXSkpIHsKKwkJCS8qIGluPSIvYS9iIiwgcHJlZml4PSIvYS9iL2MvIiAqLworCQkJd2hpbGUgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkKKwkJCQlpKys7CisJCQlpbl9vZmYgPSBpbl9sZW47CisJCX0KKwl9CisJaW4gKz0gaW5fb2ZmOworCWluX2xlbiAtPSBpbl9vZmY7CisKKwlpZiAoaSA+PSBwcmVmaXhfbGVuKSB7CisJCWlmICghaW5fbGVuKQorCQkJcmV0dXJuICIuLyI7CisJCWVsc2UKKwkJCXJldHVybiBpbjsKKwl9CisKKwlzdHJidWZfcmVzZXQoc2IpOworCXN0cmJ1Zl9ncm93KHNiLCBpbl9sZW4pOworCisJd2hpbGUgKGkgPCBwcmVmaXhfbGVuKSB7CisJCWlmIChpc19kaXJfc2VwKHByZWZpeFtpXSkpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICIuLi8iKTsKKwkJCXdoaWxlIChpc19kaXJfc2VwKHByZWZpeFtpXSkpCisJCQkJaSsrOworCQkJY29udGludWU7CisJCX0KKwkJaSsrOworCX0KKwlpZiAoIWlzX2Rpcl9zZXAocHJlZml4W3ByZWZpeF9sZW4gLSAxXSkpCisJCXN0cmJ1Zl9hZGRzdHIoc2IsICIuLi8iKTsKKworCXN0cmJ1Zl9hZGRzdHIoc2IsIGluKTsKKworCXJldHVybiBzYi0+YnVmOworfQorCisvKgorICogQSBzaW1wbGVyIGltcGxlbWVudGF0aW9uIG9mIHJlbGF0aXZlX3BhdGgKKyAqCisgKiBHZXQgcmVsYXRpdmUgcGF0aCBieSByZW1vdmluZyAicHJlZml4IiBmcm9tICJpbiIuIFRoaXMgZnVuY3Rpb24KKyAqIGZpcnN0IGFwcGVhcnMgaW4gdjEuNS42LTEtZzA0NGJiYmMsIGFuZCBtYWtlcyBnaXRfZGlyIHNob3J0ZXIKKyAqIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlIHdoZW4gdHJhdmVyc2luZyB0aGUgcGF0aCB0byB3b3JrX3RyZWUuCisgKi8KK2NvbnN0IGNoYXIgKnJlbW92ZV9sZWFkaW5nX3BhdGgoY29uc3QgY2hhciAqaW4sIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaSA9IDAsIGogPSAwOworCisJaWYgKCFwcmVmaXggfHwgIXByZWZpeFswXSkKKwkJcmV0dXJuIGluOworCXdoaWxlIChwcmVmaXhbaV0pIHsKKwkJaWYgKGlzX2Rpcl9zZXAocHJlZml4W2ldKSkgeworCQkJaWYgKCFpc19kaXJfc2VwKGluW2pdKSkKKwkJCQlyZXR1cm4gaW47CisJCQl3aGlsZSAoaXNfZGlyX3NlcChwcmVmaXhbaV0pKQorCQkJCWkrKzsKKwkJCXdoaWxlIChpc19kaXJfc2VwKGluW2pdKSkKKwkJCQlqKys7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmIChpbltqXSAhPSBwcmVmaXhbaV0pIHsKKwkJCXJldHVybiBpbjsKKwkJfQorCQlpKys7CisJCWorKzsKKwl9CisJaWYgKAorCSAgICAvKiAiL2ZvbyIgaXMgYSBwcmVmaXggb2YgIi9mb28iICovCisJICAgIGluW2pdICYmCisJICAgIC8qICIvZm9vIiBpcyBub3QgYSBwcmVmaXggb2YgIi9mb29iYXIiICovCisJICAgICFpc19kaXJfc2VwKHByZWZpeFtpLTFdKSAmJiAhaXNfZGlyX3NlcChpbltqXSkKKwkgICApCisJCXJldHVybiBpbjsKKwl3aGlsZSAoaXNfZGlyX3NlcChpbltqXSkpCisJCWorKzsKKworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwlpZiAoIWluW2pdKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICIuIik7CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKCZidWYsIGluICsgaik7CisJcmV0dXJuIGJ1Zi5idWY7Cit9CisKKy8qCisgKiBJdCBpcyBva2F5IGlmIGRzdCA9PSBzcmMsIGJ1dCB0aGV5IHNob3VsZCBub3Qgb3ZlcmxhcCBvdGhlcndpc2UuCisgKgorICogUGVyZm9ybXMgdGhlIGZvbGxvd2luZyBub3JtYWxpemF0aW9ucyBvbiBzcmMsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBkc3Q6CisgKiAtIEVuc3VyZXMgdGhhdCBjb21wb25lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgJy8nIChXaW5kb3dzIG9ubHkpCisgKiAtIFNxdWFzaGVzIHNlcXVlbmNlcyBvZiAnLycuCisgKiAtIFJlbW92ZXMgIi4iIGNvbXBvbmVudHMuCisgKiAtIFJlbW92ZXMgIi4uIiBjb21wb25lbnRzLCBhbmQgdGhlIGNvbXBvbmVudHMgdGhlIHByZWNlZGUgdGhlbS4KKyAqIFJldHVybnMgZmFpbHVyZSAobm9uLXplcm8pIGlmIGEgIi4uIiBjb21wb25lbnQgYXBwZWFycyBhcyBmaXJzdCBwYXRoCisgKiBjb21wb25lbnQgYW55dGltZSBkdXJpbmcgdGhlIG5vcm1hbGl6YXRpb24uIE90aGVyd2lzZSwgcmV0dXJucyBzdWNjZXNzICgwKS4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBwdXJlbHkgdGV4dHVhbC4gIEl0IGRvZXMgbm90IGZvbGxvdyBzeW1saW5rcywKKyAqIHZlcmlmeSB0aGUgZXhpc3RlbmNlIG9mIHRoZSBwYXRoLCBvciBtYWtlIGFueSBzeXN0ZW0gY2FsbHMuCisgKgorICogcHJlZml4X2xlbiAhPSBOVUxMIGlzIGZvciBhIHNwZWNpZmljIGNhc2Ugb2YgcHJlZml4X3BhdGhzcGVjKCk6CisgKiBhc3N1bWUgdGhhdCBzcmMgPT0gZHN0IGFuZCBzcmNbMC4ucHJlZml4X2xlbi0xXSBpcyBhbHJlYWR5CisgKiBub3JtYWxpemVkLCBhbnkgdGltZSAiLi4vIiBlYXRzIHVwIHRvIHRoZSBwcmVmaXhfbGVuIHBhcnQsCisgKiBwcmVmaXhfbGVuIGlzIHJlZHVjZWQuIEluIHRoZSBlbmQgcHJlZml4X2xlbiBpcyB0aGUgcmVtYWluaW5nCisgKiBwcmVmaXggdGhhdCBoYXMgbm90IGJlZW4gb3ZlcnJpZGRlbiBieSB1c2VyIHBhdGhzcGVjLgorICoKKyAqIE5FRURTV09SSzogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHBlcmZvcm0gbm9ybWFsaXphdGlvbiB3LnIudC4gdHJhaWxpbmcgJy8nLgorICogRm9yIGV2ZXJ5dGhpbmcgYnV0IHRoZSByb290IGZvbGRlciBpdHNlbGYsIHRoZSBub3JtYWxpemVkIHBhdGggc2hvdWxkIG5vdAorICogZW5kIHdpdGggYSAnLycsIHRoZW4gdGhlIGNhbGxlcnMgbmVlZCB0byBiZSBmaXhlZCB1cCBhY2NvcmRpbmdseS4KKyAqCisgKi8KK2ludCBub3JtYWxpemVfcGF0aF9jb3B5X2xlbihjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50ICpwcmVmaXhfbGVuKQoreworCWNoYXIgKmRzdDA7CisKKwlpZiAoaGFzX2Rvc19kcml2ZV9wcmVmaXgoc3JjKSkgeworCQkqZHN0KysgPSAqc3JjKys7CisJCSpkc3QrKyA9ICpzcmMrKzsKKwl9CisJZHN0MCA9IGRzdDsKKworCWlmIChpc19kaXJfc2VwKCpzcmMpKSB7CisJCSpkc3QrKyA9ICcvJzsKKwkJd2hpbGUgKGlzX2Rpcl9zZXAoKnNyYykpCisJCQlzcmMrKzsKKwl9CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgYyA9ICpzcmM7CisKKwkJLyoKKwkJICogQSBwYXRoIGNvbXBvbmVudCB0aGF0IGJlZ2lucyB3aXRoIC4gY291bGQgYmUKKwkJICogc3BlY2lhbDoKKwkJICogKDEpICIuIiBhbmQgZW5kcyAgIC0tIGlnbm9yZSBhbmQgdGVybWluYXRlLgorCQkgKiAoMikgIi4vIiAgICAgICAgICAgLS0gaWdub3JlIHRoZW0sIGVhdCBzbGFzaCBhbmQgY29udGludWUuCisJCSAqICgzKSAiLi4iIGFuZCBlbmRzICAtLSBzdHJpcCBvbmUgYW5kIHRlcm1pbmF0ZS4KKwkJICogKDQpICIuLi8iICAgICAgICAgIC0tIHN0cmlwIG9uZSwgZWF0IHNsYXNoIGFuZCBjb250aW51ZS4KKwkJICovCisJCWlmIChjID09ICcuJykgeworCQkJaWYgKCFzcmNbMV0pIHsKKwkJCQkvKiAoMSkgKi8KKwkJCQlzcmMrKzsKKwkJCX0gZWxzZSBpZiAoaXNfZGlyX3NlcChzcmNbMV0pKSB7CisJCQkJLyogKDIpICovCisJCQkJc3JjICs9IDI7CisJCQkJd2hpbGUgKGlzX2Rpcl9zZXAoKnNyYykpCisJCQkJCXNyYysrOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChzcmNbMV0gPT0gJy4nKSB7CisJCQkJaWYgKCFzcmNbMl0pIHsKKwkJCQkJLyogKDMpICovCisJCQkJCXNyYyArPSAyOworCQkJCQlnb3RvIHVwX29uZTsKKwkJCQl9IGVsc2UgaWYgKGlzX2Rpcl9zZXAoc3JjWzJdKSkgeworCQkJCQkvKiAoNCkgKi8KKwkJCQkJc3JjICs9IDM7CisJCQkJCXdoaWxlIChpc19kaXJfc2VwKCpzcmMpKQorCQkJCQkJc3JjKys7CisJCQkJCWdvdG8gdXBfb25lOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIGNvcHkgdXAgdG8gdGhlIG5leHQgJy8nLCBhbmQgZWF0IGFsbCAnLycgKi8KKwkJd2hpbGUgKChjID0gKnNyYysrKSAhPSAnXDAnICYmICFpc19kaXJfc2VwKGMpKQorCQkJKmRzdCsrID0gYzsKKwkJaWYgKGlzX2Rpcl9zZXAoYykpIHsKKwkJCSpkc3QrKyA9ICcvJzsKKwkJCXdoaWxlIChpc19kaXJfc2VwKGMpKQorCQkJCWMgPSAqc3JjKys7CisJCQlzcmMtLTsKKwkJfSBlbHNlIGlmICghYykKKwkJCWJyZWFrOworCQljb250aW51ZTsKKworCXVwX29uZToKKwkJLyoKKwkJICogZHN0MC4uZHN0IGlzIHByZWZpeCBwb3J0aW9uLCBhbmQgZHN0Wy0xXSBpcyAnLyc7CisJCSAqIGdvIHVwIG9uZSBsZXZlbC4KKwkJICovCisJCWRzdC0tOwkvKiBnbyB0byB0cmFpbGluZyAnLycgKi8KKwkJaWYgKGRzdCA8PSBkc3QwKQorCQkJcmV0dXJuIC0xOworCQkvKiBXaW5kb3dzOiBkc3RbLTFdIGNhbm5vdCBiZSBiYWNrc2xhc2ggYW55bW9yZSAqLworCQl3aGlsZSAoZHN0MCA8IGRzdCAmJiBkc3RbLTFdICE9ICcvJykKKwkJCWRzdC0tOworCQlpZiAocHJlZml4X2xlbiAmJiAqcHJlZml4X2xlbiA+IGRzdCAtIGRzdDApCisJCQkqcHJlZml4X2xlbiA9IGRzdCAtIGRzdDA7CisJfQorCSpkc3QgPSAnXDAnOworCXJldHVybiAwOworfQorCitpbnQgbm9ybWFsaXplX3BhdGhfY29weShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwlyZXR1cm4gbm9ybWFsaXplX3BhdGhfY29weV9sZW4oZHN0LCBzcmMsIE5VTEwpOworfQorCisvKgorICogcGF0aCA9IENhbm9uaWNhbCBhYnNvbHV0ZSBwYXRoCisgKiBwcmVmaXhlcyA9IHN0cmluZ19saXN0IGNvbnRhaW5pbmcgbm9ybWFsaXplZCwgYWJzb2x1dGUgcGF0aHMgd2l0aG91dAorICogdHJhaWxpbmcgc2xhc2hlcyAoZXhjZXB0IGZvciB0aGUgcm9vdCBkaXJlY3RvcnksIHdoaWNoIGlzIGRlbm90ZWQgYnkgIi8iKS4KKyAqCisgKiBEZXRlcm1pbmVzLCBmb3IgZWFjaCBwYXRoIGluIHByZWZpeGVzLCB3aGV0aGVyIHRoZSAicHJlZml4IgorICogaXMgYW4gYW5jZXN0b3IgZGlyZWN0b3J5IG9mIHBhdGguICBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGxvbmdlc3QKKyAqIGFuY2VzdG9yIGRpcmVjdG9yeSwgZXhjbHVkaW5nIGFueSB0cmFpbGluZyBzbGFzaGVzLCBvciAtMSBpZiBubyBwcmVmaXgKKyAqIGlzIGFuIGFuY2VzdG9yLiAgKE5vdGUgdGhhdCB0aGlzIG1lYW5zIDAgaXMgcmV0dXJuZWQgaWYgcHJlZml4ZXMgaXMKKyAqIFsiLyJdLikgIi9mb28iIGlzIG5vdCBjb25zaWRlcmVkIGFuIGFuY2VzdG9yIG9mICIvZm9vYmFyIi4gIERpcmVjdG9yaWVzCisgKiBhcmUgbm90IGNvbnNpZGVyZWQgdG8gYmUgdGhlaXIgb3duIGFuY2VzdG9ycy4gIHBhdGggbXVzdCBiZSBpbiBhCisgKiBjYW5vbmljYWwgZm9ybTogZW1wdHkgY29tcG9uZW50cywgb3IgIi4iIG9yICIuLiIgY29tcG9uZW50cyBhcmUgbm90CisgKiBhbGxvd2VkLgorICovCitpbnQgbG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGgoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmluZ19saXN0ICpwcmVmaXhlcykKK3sKKwlpbnQgaSwgbWF4X2xlbiA9IC0xOworCisJaWYgKCFzdHJjbXAocGF0aCwgIi8iKSkKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gMDsgaSA8IHByZWZpeGVzLT5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmNlaWwgPSBwcmVmaXhlcy0+aXRlbXNbaV0uc3RyaW5nOworCQlpbnQgbGVuID0gc3RybGVuKGNlaWwpOworCisJCWlmIChsZW4gPT0gMSAmJiBjZWlsWzBdID09ICcvJykKKwkJCWxlbiA9IDA7IC8qIHJvb3QgbWF0Y2hlcyBhbnl0aGluZywgd2l0aCBsZW5ndGggMCAqLworCQllbHNlIGlmICghc3RybmNtcChwYXRoLCBjZWlsLCBsZW4pICYmIHBhdGhbbGVuXSA9PSAnLycpCisJCQk7IC8qIG1hdGNoIG9mIGxlbmd0aCBsZW4gKi8KKwkJZWxzZQorCQkJY29udGludWU7IC8qIG5vIG1hdGNoICovCisKKwkJaWYgKGxlbiA+IG1heF9sZW4pCisJCQltYXhfbGVuID0gbGVuOworCX0KKworCXJldHVybiBtYXhfbGVuOworfQorCisvKiBzdHJpcCBhcmJpdHJhcnkgYW1vdW50IG9mIGRpcmVjdG9yeSBzZXBhcmF0b3JzIGF0IGVuZCBvZiBwYXRoICovCitzdGF0aWMgaW5saW5lIGludCBjaG9tcF90cmFpbGluZ19kaXJfc2VwKGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJd2hpbGUgKGxlbiAmJiBpc19kaXJfc2VwKHBhdGhbbGVuIC0gMV0pKQorCQlsZW4tLTsKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogSWYgcGF0aCBlbmRzIHdpdGggc3VmZml4IChjb21wbGV0ZSBwYXRoIGNvbXBvbmVudHMpLCByZXR1cm5zIHRoZQorICogcGFydCBiZWZvcmUgc3VmZml4IChzYW5zIHRyYWlsaW5nIGRpcmVjdG9yeSBzZXBhcmF0b3JzKS4KKyAqIE90aGVyd2lzZSByZXR1cm5zIE5VTEwuCisgKi8KK2NoYXIgKnN0cmlwX3BhdGhfc3VmZml4KGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKwlpbnQgcGF0aF9sZW4gPSBzdHJsZW4ocGF0aCksIHN1ZmZpeF9sZW4gPSBzdHJsZW4oc3VmZml4KTsKKworCXdoaWxlIChzdWZmaXhfbGVuKSB7CisJCWlmICghcGF0aF9sZW4pCisJCQlyZXR1cm4gTlVMTDsKKworCQlpZiAoaXNfZGlyX3NlcChwYXRoW3BhdGhfbGVuIC0gMV0pKSB7CisJCQlpZiAoIWlzX2Rpcl9zZXAoc3VmZml4W3N1ZmZpeF9sZW4gLSAxXSkpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlwYXRoX2xlbiA9IGNob21wX3RyYWlsaW5nX2Rpcl9zZXAocGF0aCwgcGF0aF9sZW4pOworCQkJc3VmZml4X2xlbiA9IGNob21wX3RyYWlsaW5nX2Rpcl9zZXAoc3VmZml4LCBzdWZmaXhfbGVuKTsKKwkJfQorCQllbHNlIGlmIChwYXRoWy0tcGF0aF9sZW5dICE9IHN1ZmZpeFstLXN1ZmZpeF9sZW5dKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKHBhdGhfbGVuICYmICFpc19kaXJfc2VwKHBhdGhbcGF0aF9sZW4gLSAxXSkpCisJCXJldHVybiBOVUxMOworCXJldHVybiB4c3RybmR1cChwYXRoLCBjaG9tcF90cmFpbGluZ19kaXJfc2VwKHBhdGgsIHBhdGhfbGVuKSk7Cit9CisKK2ludCBkYWVtb25fYXZvaWRfYWxpYXMoY29uc3QgY2hhciAqcCkKK3sKKwlpbnQgc2wsIG5kb3Q7CisKKwkvKgorCSAqIFRoaXMgcmVzdXJyZWN0cyB0aGUgYmVsdHMgYW5kIHN1c3BlbmRlcnMgcGFyYW5vaWEgY2hlY2sgYnkgSFBBCisJICogZG9uZSBpbiA8NDM1NTYwRjcuNDA4MDAwNkB6eXRvci5jb20+IHRocmVhZCwgbm93IGVudGVyX3JlcG8oKQorCSAqIGRvZXMgbm90IGRvIGdldGN3ZCgpIGJhc2VkIHBhdGggY2Fub25pY2FsaXphdGlvbi4KKwkgKgorCSAqIHNsIGJlY29tZXMgdHJ1ZSBpbW1lZGlhdGVseSBhZnRlciBzZWVpbmcgJy8nIGFuZCBjb250aW51ZXMgdG8KKwkgKiBiZSB0cnVlIGFzIGxvbmcgYXMgZG90cyBjb250aW51ZSBhZnRlciB0aGF0IHdpdGhvdXQgaW50ZXJ2ZW5pbmcKKwkgKiBub24tZG90IGNoYXJhY3Rlci4KKwkgKi8KKwlpZiAoIXAgfHwgKCpwICE9ICcvJyAmJiAqcCAhPSAnficpKQorCQlyZXR1cm4gLTE7CisJc2wgPSAxOyBuZG90ID0gMDsKKwlwKys7CisKKwl3aGlsZSAoMSkgeworCQljaGFyIGNoID0gKnArKzsKKwkJaWYgKHNsKSB7CisJCQlpZiAoY2ggPT0gJy4nKQorCQkJCW5kb3QrKzsKKwkJCWVsc2UgaWYgKGNoID09ICcvJykgeworCQkJCWlmIChuZG90IDwgMykKKwkJCQkJLyogcmVqZWN0IC8vLCAvLi8gYW5kIC8uLi8gKi8KKwkJCQkJcmV0dXJuIC0xOworCQkJCW5kb3QgPSAwOworCQkJfQorCQkJZWxzZSBpZiAoY2ggPT0gMCkgeworCQkJCWlmICgwIDwgbmRvdCAmJiBuZG90IDwgMykKKwkJCQkJLyogcmVqZWN0IC8uJCBhbmQgLy4uJCAqLworCQkJCQlyZXR1cm4gLTE7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQllbHNlCisJCQkJc2wgPSBuZG90ID0gMDsKKwkJfQorCQllbHNlIGlmIChjaCA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKGNoID09ICcvJykgeworCQkJc2wgPSAxOworCQkJbmRvdCA9IDA7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgb25seV9zcGFjZXNfYW5kX3BlcmlvZHMoY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGxlbiwgc2l6ZV90IHNraXApCit7CisJaWYgKGxlbiA8IHNraXApCisJCXJldHVybiAwOworCWxlbiAtPSBza2lwOworCXBhdGggKz0gc2tpcDsKKwl3aGlsZSAobGVuLS0gPiAwKSB7CisJCWNoYXIgYyA9ICoocGF0aCsrKTsKKwkJaWYgKGMgIT0gJyAnICYmIGMgIT0gJy4nKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitpbnQgaXNfbnRmc19kb3RnaXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgbGVuOworCisJZm9yIChsZW4gPSAwOyA7IGxlbisrKQorCQlpZiAoIW5hbWVbbGVuXSB8fCBuYW1lW2xlbl0gPT0gJ1xcJyB8fCBpc19kaXJfc2VwKG5hbWVbbGVuXSkpIHsKKwkJCWlmIChvbmx5X3NwYWNlc19hbmRfcGVyaW9kcyhuYW1lLCBsZW4sIDQpICYmCisJCQkJCSFzdHJuY2FzZWNtcChuYW1lLCAiLmdpdCIsIDQpKQorCQkJCXJldHVybiAxOworCQkJaWYgKG9ubHlfc3BhY2VzX2FuZF9wZXJpb2RzKG5hbWUsIGxlbiwgNSkgJiYKKwkJCQkJIXN0cm5jYXNlY21wKG5hbWUsICJnaXR+MSIsIDUpKQorCQkJCXJldHVybiAxOworCQkJaWYgKG5hbWVbbGVuXSAhPSAnXFwnKQorCQkJCXJldHVybiAwOworCQkJbmFtZSArPSBsZW4gKyAxOworCQkJbGVuID0gLTE7CisJCX0KK30KKworY2hhciAqeGRnX2NvbmZpZ19ob21lKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNvbnN0IGNoYXIgKmhvbWUsICpjb25maWdfaG9tZTsKKworCWFzc2VydChmaWxlbmFtZSk7CisJY29uZmlnX2hvbWUgPSBnZXRlbnYoIlhER19DT05GSUdfSE9NRSIpOworCWlmIChjb25maWdfaG9tZSAmJiAqY29uZmlnX2hvbWUpCisJCXJldHVybiBta3BhdGhkdXAoIiVzL2dpdC8lcyIsIGNvbmZpZ19ob21lLCBmaWxlbmFtZSk7CisKKwlob21lID0gZ2V0ZW52KCJIT01FIik7CisJaWYgKGhvbWUpCisJCXJldHVybiBta3BhdGhkdXAoIiVzLy5jb25maWcvZ2l0LyVzIiwgaG9tZSwgZmlsZW5hbWUpOworCXJldHVybiBOVUxMOworfQorCitHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQsICJDSEVSUllfUElDS19IRUFEIikKK0dJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfcmV2ZXJ0X2hlYWQsICJSRVZFUlRfSEVBRCIpCitHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX3NxdWFzaF9tc2csICJTUVVBU0hfTVNHIikKK0dJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfbWVyZ2VfbXNnLCAiTUVSR0VfTVNHIikKK0dJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfbWVyZ2VfcnIsICJNRVJHRV9SUiIpCitHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX21lcmdlX21vZGUsICJNRVJHRV9NT0RFIikKK0dJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfbWVyZ2VfaGVhZCwgIk1FUkdFX0hFQUQiKQorR0lUX1BBVEhfRlVOQyhnaXRfcGF0aF9mZXRjaF9oZWFkLCAiRkVUQ0hfSEVBRCIpCitHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX3NoYWxsb3csICJzaGFsbG93IikKZGlmZiAtLWdpdCBhL3BhdGhzcGVjLmMgYi9wYXRoc3BlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMDRlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRoc3BlYy5jCkBAIC0wLDAgKzEsNDk1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorCisvKgorICogRmluZHMgd2hpY2ggb2YgdGhlIGdpdmVuIHBhdGhzcGVjcyBtYXRjaCBpdGVtcyBpbiB0aGUgaW5kZXguCisgKgorICogRm9yIGVhY2ggcGF0aHNwZWMsIHNldHMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIHNlZW5bXSBhcnJheQorICogKHdoaWNoIHNob3VsZCBiZSBzcGVjcyBpdGVtcyBsb25nLCBpLmUuIHRoZSBzYW1lIHNpemUgYXMgcGF0aHNwZWMpCisgKiB0byB0aGUgbmF0dXJlIG9mIHRoZSAiY2xvc2VzdCIgKGkuZS4gbW9zdCBzcGVjaWZpYykgbWF0Y2ggZm91bmQgZm9yCisgKiB0aGF0IHBhdGhzcGVjIGluIHRoZSBpbmRleCwgaWYgaXQgd2FzIGEgY2xvc2VyIHR5cGUgb2YgbWF0Y2ggdGhhbgorICogdGhlIGV4aXN0aW5nIGVudHJ5LiAgQXMgYW4gb3B0aW1pemF0aW9uLCBtYXRjaGluZyBpcyBza2lwcGVkCisgKiBhbHRvZ2V0aGVyIGlmIHNlZW5bXSBhbHJlYWR5IG9ubHkgY29udGFpbnMgbm9uLXplcm8gZW50cmllcy4KKyAqCisgKiBJZiBzZWVuW10gaGFzIG5vdCBhbHJlYWR5IGJlZW4gd3JpdHRlbiB0bywgaXQgbWF5IG1ha2Ugc2Vuc2UKKyAqIHRvIHVzZSBmaW5kX3BhdGhzcGVjc19tYXRjaGluZ19hZ2FpbnN0X2luZGV4KCkgaW5zdGVhZC4KKyAqLwordm9pZCBhZGRfcGF0aHNwZWNfbWF0Y2hlc19hZ2FpbnN0X2luZGV4KGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkJCWNoYXIgKnNlZW4pCit7CisJaW50IG51bV91bm1hdGNoZWQgPSAwLCBpOworCisJLyoKKwkgKiBTaW5jZSB3ZSBhcmUgd2Fsa2luZyB0aGUgaW5kZXggYXMgaWYgd2Ugd2VyZSB3YWxraW5nIHRoZSBkaXJlY3RvcnksCisJICogd2UgaGF2ZSB0byBtYXJrIHRoZSBtYXRjaGVkIHBhdGhzcGVjIGFzIHNlZW47IG90aGVyd2lzZSB3ZSB3aWxsCisJICogbWlzdGFrZW5seSB0aGluayB0aGF0IHRoZSB1c2VyIGdhdmUgYSBwYXRoc3BlYyB0aGF0IGRpZCBub3QgbWF0Y2gKKwkgKiBhbnl0aGluZy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGF0aHNwZWMtPm5yOyBpKyspCisJCWlmICghc2VlbltpXSkKKwkJCW51bV91bm1hdGNoZWQrKzsKKwlpZiAoIW51bV91bm1hdGNoZWQpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJY2VfcGF0aF9tYXRjaChjZSwgcGF0aHNwZWMsIHNlZW4pOworCX0KK30KKworLyoKKyAqIEZpbmRzIHdoaWNoIG9mIHRoZSBnaXZlbiBwYXRoc3BlY3MgbWF0Y2ggaXRlbXMgaW4gdGhlIGluZGV4LgorICoKKyAqIFRoaXMgaXMgYSBvbmUtc2hvdCB3cmFwcGVyIGFyb3VuZCBhZGRfcGF0aHNwZWNfbWF0Y2hlc19hZ2FpbnN0X2luZGV4KCkKKyAqIHdoaWNoIGFsbG9jYXRlcywgcG9wdWxhdGVzLCBhbmQgcmV0dXJucyBhIHNlZW5bXSBhcnJheSBpbmRpY2F0aW5nIHRoZQorICogbmF0dXJlIG9mIHRoZSAiY2xvc2VzdCIgKGkuZS4gbW9zdCBzcGVjaWZpYykgbWF0Y2hlcyB3aGljaCBlYWNoIG9mIHRoZQorICogZ2l2ZW4gcGF0aHNwZWNzIGFjaGlldmVzIGFnYWluc3QgYWxsIGl0ZW1zIGluIHRoZSBpbmRleC4KKyAqLworY2hhciAqZmluZF9wYXRoc3BlY3NfbWF0Y2hpbmdfYWdhaW5zdF9pbmRleChjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKQoreworCWNoYXIgKnNlZW4gPSB4Y2FsbG9jKHBhdGhzcGVjLT5uciwgMSk7CisJYWRkX3BhdGhzcGVjX21hdGNoZXNfYWdhaW5zdF9pbmRleChwYXRoc3BlYywgc2Vlbik7CisJcmV0dXJuIHNlZW47Cit9CisKKy8qCisgKiBNYWdpYyBwYXRoc3BlYworICoKKyAqIFBvc3NpYmxlIGZ1dHVyZSBtYWdpYyBzZW1hbnRpY3MgaW5jbHVkZSBzdHVmZiBsaWtlOgorICoKKyAqCXsgUEFUSFNQRUNfUkVDVVJTSVZFLCAnKicsICJyZWN1cnNpdmUiIH0sCisgKgl7IFBBVEhTUEVDX1JFR0VYUCwgJ1wwJywgInJlZ2V4cCIgfSwKKyAqCisgKi8KKworc3RhdGljIHN0cnVjdCBwYXRoc3BlY19tYWdpYyB7CisJdW5zaWduZWQgYml0OworCWNoYXIgbW5lbW9uaWM7IC8qIHRoaXMgY2Fubm90IGJlICc6JyEgKi8KKwljb25zdCBjaGFyICpuYW1lOworfSBwYXRoc3BlY19tYWdpY1tdID0geworCXsgUEFUSFNQRUNfRlJPTVRPUCwgJy8nLCAidG9wIiB9LAorCXsgUEFUSFNQRUNfTElURVJBTCwgICAwLCAibGl0ZXJhbCIgfSwKKwl7IFBBVEhTUEVDX0dMT0IsICAgJ1wwJywgImdsb2IiIH0sCisJeyBQQVRIU1BFQ19JQ0FTRSwgICdcMCcsICJpY2FzZSIgfSwKKwl7IFBBVEhTUEVDX0VYQ0xVREUsICchJywgImV4Y2x1ZGUiIH0sCit9OworCitzdGF0aWMgdm9pZCBwcmVmaXhfc2hvcnRfbWFnaWMoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBwcmVmaXhsZW4sCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnRfbWFnaWMpCit7CisJaW50IGk7CisJc3RyYnVmX2FkZHN0cihzYiwgIjooIik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0aHNwZWNfbWFnaWMpOyBpKyspCisJCWlmIChzaG9ydF9tYWdpYyAmIHBhdGhzcGVjX21hZ2ljW2ldLmJpdCkgeworCQkJaWYgKHNiLT5idWZbc2ItPmxlbiAtIDFdICE9ICcoJykKKwkJCQlzdHJidWZfYWRkY2goc2IsICcsJyk7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBwYXRoc3BlY19tYWdpY1tpXS5uYW1lKTsKKwkJfQorCXN0cmJ1Zl9hZGRmKHNiLCAiLHByZWZpeDolZCkiLCBwcmVmaXhsZW4pOworfQorCisvKgorICogVGFrZSBhbiBlbGVtZW50IG9mIGEgcGF0aHNwZWMgYW5kIGNoZWNrIGZvciBtYWdpYyBzaWduYXR1cmVzLgorICogQXBwZW5kIHRoZSByZXN1bHQgdG8gdGhlIHByZWZpeC4gUmV0dXJuIHRoZSBtYWdpYyBiaXRtYXAuCisgKgorICogRm9yIG5vdywgd2Ugb25seSBwYXJzZSB0aGUgc3ludGF4IGFuZCB0aHJvdyBvdXQgYW55dGhpbmcgb3RoZXIgdGhhbgorICogInRvcCIgbWFnaWMuCisgKgorICogTkVFRFNXT1JLOiBUaGlzIG5lZWRzIHRvIGJlIHJld3JpdHRlbiB3aGVuIHdlIHN0YXJ0IG1pZ3JhdGluZworICogZ2V0X3BhdGhzcGVjKCkgdXNlcnMgdG8gdXNlIHRoZSAic3RydWN0IHBhdGhzcGVjIiBpbnRlcmZhY2UuICBGb3IKKyAqIGV4YW1wbGUsIGEgcGF0aHNwZWMgZWxlbWVudCBtYXkgYmUgbWFya2VkIGFzIGNhc2UtaW5zZW5zaXRpdmUsIGJ1dAorICogdGhlIHByZWZpeCBwYXJ0IG11c3QgYWx3YXlzIG1hdGNoIGxpdGVyYWxseSwgYW5kIGEgc2luZ2xlIHN0dXBpZAorICogc3RyaW5nIGNhbm5vdCBleHByZXNzIHN1Y2ggYSBjYXNlLgorICovCitzdGF0aWMgdW5zaWduZWQgcHJlZml4X3BhdGhzcGVjKHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLAorCQkJCXVuc2lnbmVkICpwX3Nob3J0X21hZ2ljLAorCQkJCWNvbnN0IGNoYXIgKipyYXcsIHVuc2lnbmVkIGZsYWdzLAorCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwgaW50IHByZWZpeGxlbiwKKwkJCQljb25zdCBjaGFyICplbHQpCit7CisJc3RhdGljIGludCBsaXRlcmFsX2dsb2JhbCA9IC0xOworCXN0YXRpYyBpbnQgZ2xvYl9nbG9iYWwgPSAtMTsKKwlzdGF0aWMgaW50IG5vZ2xvYl9nbG9iYWwgPSAtMTsKKwlzdGF0aWMgaW50IGljYXNlX2dsb2JhbCA9IC0xOworCXVuc2lnbmVkIG1hZ2ljID0gMCwgc2hvcnRfbWFnaWMgPSAwLCBnbG9iYWxfbWFnaWMgPSAwOworCWNvbnN0IGNoYXIgKmNvcHlmcm9tID0gZWx0LCAqbG9uZ19tYWdpY19lbmQgPSBOVUxMOworCWNoYXIgKm1hdGNoOworCWludCBpLCBwYXRoc3BlY19wcmVmaXggPSAtMTsKKworCWlmIChsaXRlcmFsX2dsb2JhbCA8IDApCisJCWxpdGVyYWxfZ2xvYmFsID0gZ2l0X2Vudl9ib29sKEdJVF9MSVRFUkFMX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgMCk7CisJaWYgKGxpdGVyYWxfZ2xvYmFsKQorCQlnbG9iYWxfbWFnaWMgfD0gUEFUSFNQRUNfTElURVJBTDsKKworCWlmIChnbG9iX2dsb2JhbCA8IDApCisJCWdsb2JfZ2xvYmFsID0gZ2l0X2Vudl9ib29sKEdJVF9HTE9CX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgMCk7CisJaWYgKGdsb2JfZ2xvYmFsKQorCQlnbG9iYWxfbWFnaWMgfD0gUEFUSFNQRUNfR0xPQjsKKworCWlmIChub2dsb2JfZ2xvYmFsIDwgMCkKKwkJbm9nbG9iX2dsb2JhbCA9IGdpdF9lbnZfYm9vbChHSVRfTk9HTE9CX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgMCk7CisKKwlpZiAoZ2xvYl9nbG9iYWwgJiYgbm9nbG9iX2dsb2JhbCkKKwkJZGllKF8oImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiKSk7CisKKworCWlmIChpY2FzZV9nbG9iYWwgPCAwKQorCQlpY2FzZV9nbG9iYWwgPSBnaXRfZW52X2Jvb2woR0lUX0lDQVNFX1BBVEhTUEVDU19FTlZJUk9OTUVOVCwgMCk7CisJaWYgKGljYXNlX2dsb2JhbCkKKwkJZ2xvYmFsX21hZ2ljIHw9IFBBVEhTUEVDX0lDQVNFOworCisJaWYgKChnbG9iYWxfbWFnaWMgJiBQQVRIU1BFQ19MSVRFUkFMKSAmJgorCSAgICAoZ2xvYmFsX21hZ2ljICYgflBBVEhTUEVDX0xJVEVSQUwpKQorCQlkaWUoXygiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSAiCisJCSAgICAgICJ3aXRoIGFsbCBvdGhlciBnbG9iYWwgcGF0aHNwZWMgc2V0dGluZ3MiKSk7CisKKwlpZiAoZmxhZ3MgJiBQQVRIU1BFQ19MSVRFUkFMX1BBVEgpCisJCWdsb2JhbF9tYWdpYyA9IDA7CisKKwlpZiAoZWx0WzBdICE9ICc6JyB8fCBsaXRlcmFsX2dsb2JhbCB8fAorCSAgICAoZmxhZ3MgJiBQQVRIU1BFQ19MSVRFUkFMX1BBVEgpKSB7CisJCTsgLyogbm90aGluZyB0byBkbyAqLworCX0gZWxzZSBpZiAoZWx0WzFdID09ICcoJykgeworCQkvKiBsb25naGFuZCAqLworCQljb25zdCBjaGFyICpuZXh0YXQ7CisJCWZvciAoY29weWZyb20gPSBlbHQgKyAyOworCQkgICAgICpjb3B5ZnJvbSAmJiAqY29weWZyb20gIT0gJyknOworCQkgICAgIGNvcHlmcm9tID0gbmV4dGF0KSB7CisJCQlzaXplX3QgbGVuID0gc3RyY3Nwbihjb3B5ZnJvbSwgIiwpIik7CisJCQlpZiAoY29weWZyb21bbGVuXSA9PSAnLCcpCisJCQkJbmV4dGF0ID0gY29weWZyb20gKyBsZW4gKyAxOworCQkJZWxzZQorCQkJCS8qIGhhbmRsZSAnKScgYW5kICdcMCcgKi8KKwkJCQluZXh0YXQgPSBjb3B5ZnJvbSArIGxlbjsKKwkJCWlmICghbGVuKQorCQkJCWNvbnRpbnVlOworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0aHNwZWNfbWFnaWMpOyBpKyspIHsKKwkJCQlpZiAoc3RybGVuKHBhdGhzcGVjX21hZ2ljW2ldLm5hbWUpID09IGxlbiAmJgorCQkJCSAgICAhc3RybmNtcChwYXRoc3BlY19tYWdpY1tpXS5uYW1lLCBjb3B5ZnJvbSwgbGVuKSkgeworCQkJCQltYWdpYyB8PSBwYXRoc3BlY19tYWdpY1tpXS5iaXQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoc3RhcnRzX3dpdGgoY29weWZyb20sICJwcmVmaXg6IikpIHsKKwkJCQkJY2hhciAqZW5kcHRyOworCQkJCQlwYXRoc3BlY19wcmVmaXggPSBzdHJ0b2woY29weWZyb20gKyA3LAorCQkJCQkJCQkgJmVuZHB0ciwgMTApOworCQkJCQlpZiAoZW5kcHRyIC0gY29weWZyb20gIT0gbGVuKQorCQkJCQkJZGllKF8oImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIpKTsKKwkJCQkJLyogImkiIHdvdWxkIGJlIHdyb25nLCBidXQgaXQgZG9lcyBub3QgbWF0dGVyICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChBUlJBWV9TSVpFKHBhdGhzcGVjX21hZ2ljKSA8PSBpKQorCQkJCWRpZShfKCJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIiksCisJCQkJICAgIChpbnQpIGxlbiwgY29weWZyb20sIGVsdCk7CisJCX0KKwkJaWYgKCpjb3B5ZnJvbSAhPSAnKScpCisJCQlkaWUoXygiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIiksIGVsdCk7CisJCWxvbmdfbWFnaWNfZW5kID0gY29weWZyb207CisJCWNvcHlmcm9tKys7CisJfSBlbHNlIHsKKwkJLyogc2hvcnRoYW5kICovCisJCWZvciAoY29weWZyb20gPSBlbHQgKyAxOworCQkgICAgICpjb3B5ZnJvbSAmJiAqY29weWZyb20gIT0gJzonOworCQkgICAgIGNvcHlmcm9tKyspIHsKKwkJCWNoYXIgY2ggPSAqY29weWZyb207CisKKwkJCWlmICghaXNfcGF0aHNwZWNfbWFnaWMoY2gpKQorCQkJCWJyZWFrOworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0aHNwZWNfbWFnaWMpOyBpKyspCisJCQkJaWYgKHBhdGhzcGVjX21hZ2ljW2ldLm1uZW1vbmljID09IGNoKSB7CisJCQkJCXNob3J0X21hZ2ljIHw9IHBhdGhzcGVjX21hZ2ljW2ldLmJpdDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJaWYgKEFSUkFZX1NJWkUocGF0aHNwZWNfbWFnaWMpIDw9IGkpCisJCQkJZGllKF8oIlVuaW1wbGVtZW50ZWQgcGF0aHNwZWMgbWFnaWMgJyVjJyBpbiAnJXMnIiksCisJCQkJICAgIGNoLCBlbHQpOworCQl9CisJCWlmICgqY29weWZyb20gPT0gJzonKQorCQkJY29weWZyb20rKzsKKwl9CisKKwltYWdpYyB8PSBzaG9ydF9tYWdpYzsKKwkqcF9zaG9ydF9tYWdpYyA9IHNob3J0X21hZ2ljOworCisJLyogLS1ub2dsb2ItcGF0aHNwZWMgYWRkcyA6KGxpdGVyYWwpIF91bmxlc3NfIDooZ2xvYikgaXMgc3BlY2lmaWVkICovCisJaWYgKG5vZ2xvYl9nbG9iYWwgJiYgIShtYWdpYyAmIFBBVEhTUEVDX0dMT0IpKQorCQlnbG9iYWxfbWFnaWMgfD0gUEFUSFNQRUNfTElURVJBTDsKKworCS8qIC0tZ2xvYi1wYXRoc3BlYyBpcyBvdmVycmlkZGVuIGJ5IDoobGl0ZXJhbCkgKi8KKwlpZiAoKGdsb2JhbF9tYWdpYyAmIFBBVEhTUEVDX0dMT0IpICYmIChtYWdpYyAmIFBBVEhTUEVDX0xJVEVSQUwpKQorCQlnbG9iYWxfbWFnaWMgJj0gflBBVEhTUEVDX0dMT0I7CisKKwltYWdpYyB8PSBnbG9iYWxfbWFnaWM7CisKKwlpZiAocGF0aHNwZWNfcHJlZml4ID49IDAgJiYKKwkgICAgKHByZWZpeGxlbiB8fCAocHJlZml4ICYmICpwcmVmaXgpKSkKKwkJZGllKCJCVUc6ICdwcmVmaXgnIG1hZ2ljIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgYXQgd29ya3RyZWUncyByb290Iik7CisKKwlpZiAoKG1hZ2ljICYgUEFUSFNQRUNfTElURVJBTCkgJiYgKG1hZ2ljICYgUEFUSFNQRUNfR0xPQikpCisJCWRpZShfKCIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIpLCBlbHQpOworCisJaWYgKHBhdGhzcGVjX3ByZWZpeCA+PSAwKSB7CisJCW1hdGNoID0geHN0cmR1cChjb3B5ZnJvbSk7CisJCXByZWZpeGxlbiA9IHBhdGhzcGVjX3ByZWZpeDsKKwl9IGVsc2UgaWYgKG1hZ2ljICYgUEFUSFNQRUNfRlJPTVRPUCkgeworCQltYXRjaCA9IHhzdHJkdXAoY29weWZyb20pOworCQlwcmVmaXhsZW4gPSAwOworCX0gZWxzZSB7CisJCW1hdGNoID0gcHJlZml4X3BhdGhfZ2VudGx5KHByZWZpeCwgcHJlZml4bGVuLCAmcHJlZml4bGVuLCBjb3B5ZnJvbSk7CisJCWlmICghbWF0Y2gpCisJCQlkaWUoXygiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IiksIGVsdCwgY29weWZyb20pOworCX0KKwkqcmF3ID0gaXRlbS0+bWF0Y2ggPSBtYXRjaDsKKwkvKgorCSAqIFByZWZpeCB0aGUgcGF0aHNwZWMgKGtlZXAgYWxsIG1hZ2ljKSBhbmQgYXNzaWduIHRvCisJICogb3JpZ2luYWwuIFVzZWZ1bCBmb3IgcGFzc2luZyB0byBhbm90aGVyIGNvbW1hbmQuCisJICovCisJaWYgKGZsYWdzICYgUEFUSFNQRUNfUFJFRklYX09SSUdJTikgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCWlmIChwcmVmaXhsZW4gJiYgIWxpdGVyYWxfZ2xvYmFsKSB7CisJCQkvKiBQcmVzZXJ2ZSB0aGUgYWN0dWFsIHByZWZpeCBsZW5ndGggb2YgZWFjaCBwYXR0ZXJuICovCisJCQlpZiAoc2hvcnRfbWFnaWMpCisJCQkJcHJlZml4X3Nob3J0X21hZ2ljKCZzYiwgcHJlZml4bGVuLCBzaG9ydF9tYWdpYyk7CisJCQllbHNlIGlmIChsb25nX21hZ2ljX2VuZCkgeworCQkJCXN0cmJ1Zl9hZGQoJnNiLCBlbHQsIGxvbmdfbWFnaWNfZW5kIC0gZWx0KTsKKwkJCQlzdHJidWZfYWRkZigmc2IsICIscHJlZml4OiVkKSIsIHByZWZpeGxlbik7CisJCQl9IGVsc2UKKwkJCQlzdHJidWZfYWRkZigmc2IsICI6KHByZWZpeDolZCkiLCBwcmVmaXhsZW4pOworCQl9CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBtYXRjaCk7CisJCWl0ZW0tPm9yaWdpbmFsID0gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCX0gZWxzZQorCQlpdGVtLT5vcmlnaW5hbCA9IGVsdDsKKwlpdGVtLT5sZW4gPSBzdHJsZW4oaXRlbS0+bWF0Y2gpOworCWl0ZW0tPnByZWZpeCA9IHByZWZpeGxlbjsKKworCWlmICgoZmxhZ3MgJiBQQVRIU1BFQ19TVFJJUF9TVUJNT0RVTEVfU0xBU0hfQ0hFQVApICYmCisJICAgIChpdGVtLT5sZW4gPj0gMSAmJiBpdGVtLT5tYXRjaFtpdGVtLT5sZW4gLSAxXSA9PSAnLycpICYmCisJICAgIChpID0gY2FjaGVfbmFtZV9wb3MoaXRlbS0+bWF0Y2gsIGl0ZW0tPmxlbiAtIDEpKSA+PSAwICYmCisJICAgIFNfSVNHSVRMSU5LKGFjdGl2ZV9jYWNoZVtpXS0+Y2VfbW9kZSkpIHsKKwkJaXRlbS0+bGVuLS07CisJCW1hdGNoW2l0ZW0tPmxlbl0gPSAnXDAnOworCX0KKworCWlmIChmbGFncyAmIFBBVEhTUEVDX1NUUklQX1NVQk1PRFVMRV9TTEFTSF9FWFBFTlNJVkUpCisJCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJCWludCBjZV9sZW4gPSBjZV9uYW1lbGVuKGNlKTsKKworCQkJaWYgKCFTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChpdGVtLT5sZW4gPD0gY2VfbGVuIHx8IG1hdGNoW2NlX2xlbl0gIT0gJy8nIHx8CisJCQkgICAgbWVtY21wKGNlLT5uYW1lLCBtYXRjaCwgY2VfbGVuKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChpdGVtLT5sZW4gPT0gY2VfbGVuICsgMSkgeworCQkJCS8qIHN0cmlwIHRyYWlsaW5nIHNsYXNoICovCisJCQkJaXRlbS0+bGVuLS07CisJCQkJbWF0Y2hbaXRlbS0+bGVuXSA9ICdcMCc7CisJCQl9IGVsc2UKKwkJCQlkaWUgKF8oIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIpLAorCQkJCSAgICAgZWx0LCBjZV9sZW4sIGNlLT5uYW1lKTsKKwkJfQorCisJaWYgKG1hZ2ljICYgUEFUSFNQRUNfTElURVJBTCkKKwkJaXRlbS0+bm93aWxkY2FyZF9sZW4gPSBpdGVtLT5sZW47CisJZWxzZSB7CisJCWl0ZW0tPm5vd2lsZGNhcmRfbGVuID0gc2ltcGxlX2xlbmd0aChpdGVtLT5tYXRjaCk7CisJCWlmIChpdGVtLT5ub3dpbGRjYXJkX2xlbiA8IHByZWZpeGxlbikKKwkJCWl0ZW0tPm5vd2lsZGNhcmRfbGVuID0gcHJlZml4bGVuOworCX0KKwlpdGVtLT5mbGFncyA9IDA7CisJaWYgKG1hZ2ljICYgUEFUSFNQRUNfR0xPQikgeworCQkvKgorCQkgKiBGSVhNRTogc2hvdWxkIHdlIGVuYWJsZSBPTkVTVEFSIGluIF9HTE9CIGZvcgorCQkgKiBwYXR0ZXJuICIqICogLyAqIC4gYyI/CisJCSAqLworCX0gZWxzZSB7CisJCWlmIChpdGVtLT5ub3dpbGRjYXJkX2xlbiA8IGl0ZW0tPmxlbiAmJgorCQkgICAgaXRlbS0+bWF0Y2hbaXRlbS0+bm93aWxkY2FyZF9sZW5dID09ICcqJyAmJgorCQkgICAgbm9fd2lsZGNhcmQoaXRlbS0+bWF0Y2ggKyBpdGVtLT5ub3dpbGRjYXJkX2xlbiArIDEpKQorCQkJaXRlbS0+ZmxhZ3MgfD0gUEFUSFNQRUNfT05FU1RBUjsKKwl9CisKKwkvKiBzYW5pdHkgY2hlY2tzLCBwYXRoc3BlYyBtYXRjaGVycyBhc3N1bWUgdGhlc2UgYXJlIHNhbmUgKi8KKwlhc3NlcnQoaXRlbS0+bm93aWxkY2FyZF9sZW4gPD0gaXRlbS0+bGVuICYmCisJICAgICAgIGl0ZW0tPnByZWZpeCAgICAgICAgIDw9IGl0ZW0tPmxlbik7CisJcmV0dXJuIG1hZ2ljOworfQorCitzdGF0aWMgaW50IHBhdGhzcGVjX2l0ZW1fY21wKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwlzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqYSwgKmI7CisKKwlhID0gKHN0cnVjdCBwYXRoc3BlY19pdGVtICopYV87CisJYiA9IChzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqKWJfOworCXJldHVybiBzdHJjbXAoYS0+bWF0Y2gsIGItPm1hdGNoKTsKK30KKworc3RhdGljIHZvaWQgTk9SRVRVUk4gdW5zdXBwb3J0ZWRfbWFnaWMoY29uc3QgY2hhciAqcGF0dGVybiwKKwkJCQkgICAgICAgdW5zaWduZWQgbWFnaWMsCisJCQkJICAgICAgIHVuc2lnbmVkIHNob3J0X21hZ2ljKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaSwgbjsKKwlmb3IgKG4gPSBpID0gMDsgaSA8IEFSUkFZX1NJWkUocGF0aHNwZWNfbWFnaWMpOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHBhdGhzcGVjX21hZ2ljICptID0gcGF0aHNwZWNfbWFnaWMgKyBpOworCQlpZiAoIShtYWdpYyAmIG0tPmJpdCkpCisJCQljb250aW51ZTsKKwkJaWYgKHNiLmxlbikKKwkJCXN0cmJ1Zl9hZGRjaCgmc2IsICcgJyk7CisJCWlmIChzaG9ydF9tYWdpYyAmIG0tPmJpdCkKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgIiclYyciLCBtLT5tbmVtb25pYyk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKCZzYiwgIiclcyciLCBtLT5uYW1lKTsKKwkJbisrOworCX0KKwkvKgorCSAqIFdlIG1heSB3YW50IHRvIHN1YnN0aXR1dGUgInRoaXMgY29tbWFuZCIgd2l0aCBhIGNvbW1hbmQKKwkgKiBuYW1lLiBFLmcuIHdoZW4gYWRkLS1pbnRlcmFjdGl2ZSBkaWVzIHdoZW4gcnVubmluZworCSAqICJjaGVja291dCAtcCIKKwkgKi8KKwlkaWUoXygiJXM6IHBhdGhzcGVjIG1hZ2ljIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21tYW5kOiAlcyIpLAorCSAgICBwYXR0ZXJuLCBzYi5idWYpOworfQorCisvKgorICogR2l2ZW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhbmQgYSBwcmVmaXgsIGNvbnZlcnQgdGhlIGlucHV0IHRvCisgKiBwYXRoc3BlYy4gZGllKCkgaWYgYW55IG1hZ2ljIGluIG1hZ2ljX21hc2sgaXMgdXNlZC4KKyAqLwordm9pZCBwYXJzZV9wYXRoc3BlYyhzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjLAorCQkgICAgdW5zaWduZWQgbWFnaWNfbWFzaywgdW5zaWduZWQgZmxhZ3MsCisJCSAgICBjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtOworCWNvbnN0IGNoYXIgKmVudHJ5ID0gYXJndiA/ICphcmd2IDogTlVMTDsKKwlpbnQgaSwgbiwgcHJlZml4bGVuLCBucl9leGNsdWRlID0gMDsKKworCW1lbXNldChwYXRoc3BlYywgMCwgc2l6ZW9mKCpwYXRoc3BlYykpOworCisJaWYgKGZsYWdzICYgUEFUSFNQRUNfTUFYREVQVEhfVkFMSUQpCisJCXBhdGhzcGVjLT5tYWdpYyB8PSBQQVRIU1BFQ19NQVhERVBUSDsKKworCS8qIE5vIGFyZ3VtZW50cywgbm8gcHJlZml4IC0+IG5vIHBhdGhzcGVjICovCisJaWYgKCFlbnRyeSAmJiAhcHJlZml4KQorCQlyZXR1cm47CisKKwlpZiAoKGZsYWdzICYgUEFUSFNQRUNfUFJFRkVSX0NXRCkgJiYKKwkgICAgKGZsYWdzICYgUEFUSFNQRUNfUFJFRkVSX0ZVTEwpKQorCQlkaWUoIkJVRzogUEFUSFNQRUNfUFJFRkVSX0NXRCBhbmQgUEFUSFNQRUNfUFJFRkVSX0ZVTEwgYXJlIGluY29tcGF0aWJsZSIpOworCisJLyogTm8gYXJndW1lbnRzIHdpdGggcHJlZml4IC0+IHByZWZpeCBwYXRoc3BlYyAqLworCWlmICghZW50cnkpIHsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKnJhd1syXTsKKworCQlpZiAoZmxhZ3MgJiBQQVRIU1BFQ19QUkVGRVJfRlVMTCkKKwkJCXJldHVybjsKKworCQlpZiAoIShmbGFncyAmIFBBVEhTUEVDX1BSRUZFUl9DV0QpKQorCQkJZGllKCJCVUc6IFBBVEhTUEVDX1BSRUZFUl9DV0QgcmVxdWlyZXMgYXJndW1lbnRzIik7CisKKwkJcGF0aHNwZWMtPml0ZW1zID0gaXRlbSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCppdGVtKSk7CisJCWl0ZW0tPm1hdGNoID0gcHJlZml4OworCQlpdGVtLT5vcmlnaW5hbCA9IHByZWZpeDsKKwkJaXRlbS0+bm93aWxkY2FyZF9sZW4gPSBpdGVtLT5sZW4gPSBzdHJsZW4ocHJlZml4KTsKKwkJaXRlbS0+cHJlZml4ID0gaXRlbS0+bGVuOworCQlyYXdbMF0gPSBwcmVmaXg7CisJCXJhd1sxXSA9IE5VTEw7CisJCXBhdGhzcGVjLT5uciA9IDE7CisJCXBhdGhzcGVjLT5fcmF3ID0gcmF3OworCQlyZXR1cm47CisJfQorCisJbiA9IDA7CisJd2hpbGUgKGFyZ3Zbbl0pCisJCW4rKzsKKworCXBhdGhzcGVjLT5uciA9IG47CisJcGF0aHNwZWMtPml0ZW1zID0gaXRlbSA9IHhtYWxsb2Moc2l6ZW9mKCppdGVtKSAqIG4pOworCXBhdGhzcGVjLT5fcmF3ID0gYXJndjsKKwlwcmVmaXhsZW4gPSBwcmVmaXggPyBzdHJsZW4ocHJlZml4KSA6IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXVuc2lnbmVkIHNob3J0X21hZ2ljOworCQllbnRyeSA9IGFyZ3ZbaV07CisKKwkJaXRlbVtpXS5tYWdpYyA9IHByZWZpeF9wYXRoc3BlYyhpdGVtICsgaSwgJnNob3J0X21hZ2ljLAorCQkJCQkJYXJndiArIGksIGZsYWdzLAorCQkJCQkJcHJlZml4LCBwcmVmaXhsZW4sIGVudHJ5KTsKKwkJaWYgKChmbGFncyAmIFBBVEhTUEVDX0xJVEVSQUxfUEFUSCkgJiYKKwkJICAgICEobWFnaWNfbWFzayAmIFBBVEhTUEVDX0xJVEVSQUwpKQorCQkJaXRlbVtpXS5tYWdpYyB8PSBQQVRIU1BFQ19MSVRFUkFMOworCQlpZiAoaXRlbVtpXS5tYWdpYyAmIFBBVEhTUEVDX0VYQ0xVREUpCisJCQlucl9leGNsdWRlKys7CisJCWlmIChpdGVtW2ldLm1hZ2ljICYgbWFnaWNfbWFzaykKKwkJCXVuc3VwcG9ydGVkX21hZ2ljKGVudHJ5LAorCQkJCQkgIGl0ZW1baV0ubWFnaWMgJiBtYWdpY19tYXNrLAorCQkJCQkgIHNob3J0X21hZ2ljKTsKKworCQlpZiAoKGZsYWdzICYgUEFUSFNQRUNfU1lNTElOS19MRUFESU5HX1BBVEgpICYmCisJCSAgICBoYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoaXRlbVtpXS5tYXRjaCwgaXRlbVtpXS5sZW4pKSB7CisJCQlkaWUoXygicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiksIGVudHJ5KTsKKwkJfQorCisJCWlmIChpdGVtW2ldLm5vd2lsZGNhcmRfbGVuIDwgaXRlbVtpXS5sZW4pCisJCQlwYXRoc3BlYy0+aGFzX3dpbGRjYXJkID0gMTsKKwkJcGF0aHNwZWMtPm1hZ2ljIHw9IGl0ZW1baV0ubWFnaWM7CisJfQorCisJaWYgKG5yX2V4Y2x1ZGUgPT0gbikKKwkJZGllKF8oIlRoZXJlIGlzIG5vdGhpbmcgdG8gZXhjbHVkZSBmcm9tIGJ5IDooZXhjbHVkZSkgcGF0dGVybnMuXG4iCisJCSAgICAgICJQZXJoYXBzIHlvdSBmb3Jnb3QgdG8gYWRkIGVpdGhlciAnOi8nIG9yICcuJyA/IikpOworCisKKwlpZiAocGF0aHNwZWMtPm1hZ2ljICYgUEFUSFNQRUNfTUFYREVQVEgpIHsKKwkJaWYgKGZsYWdzICYgUEFUSFNQRUNfS0VFUF9PUkRFUikKKwkJCWRpZSgiQlVHOiBQQVRIU1BFQ19NQVhERVBUSF9WQUxJRCBhbmQgUEFUSFNQRUNfS0VFUF9PUkRFUiBhcmUgaW5jb21wYXRpYmxlIik7CisJCXFzb3J0KHBhdGhzcGVjLT5pdGVtcywgcGF0aHNwZWMtPm5yLAorCQkgICAgICBzaXplb2Yoc3RydWN0IHBhdGhzcGVjX2l0ZW0pLCBwYXRoc3BlY19pdGVtX2NtcCk7CisJfQorfQorCisvKgorICogTi5CLiBnZXRfcGF0aHNwZWMoKSBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSAic3RydWN0IHBhdGhzcGVjIgorICogYmFzZWQgaW50ZXJmYWNlIC0gc2VlIHBhdGhzcGVjLmM6cGFyc2VfcGF0aHNwZWMoKS4KKyAqCisgKiBBcmd1bWVudHM6CisgKiAgLSBwcmVmaXggLSBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZQorICogIC0gcGF0aHNwZWMgLSBhIGxpc3Qgb2YgcGF0aHMgdW5kZXJuZWF0aCB0aGUgcHJlZml4IHBhdGgKKyAqCisgKiBJdGVyYXRlcyBvdmVyIHBhdGhzcGVjLCBwcmVwZW5kaW5nIGVhY2ggcGF0aCB3aXRoIHByZWZpeCwKKyAqIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBsaXN0LgorICoKKyAqIElmIHBhdGhzcGVjIGlzIGVtcHR5LCByZXR1cm4gYSBzaW5nbGV0b24gbGlzdCBjb250YWluaW5nIHByZWZpeC4KKyAqCisgKiBJZiBwYXRoc3BlYyBhbmQgcHJlZml4IGFyZSBib3RoIGVtcHR5LCByZXR1cm4gYW4gZW1wdHkgbGlzdC4KKyAqCisgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGJ5IGJ1aWx0LWluIGNvbW1hbmRzIHN1Y2ggYXMgYWRkLmMsIGluIG9yZGVyCisgKiB0byBub3JtYWxpemUgYXJndiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIGJ1aWx0LWluIGludG8gYSBsaXN0IG9mCisgKiBwYXRocyB0byBwcm9jZXNzLCBhbGwgcmVsYXRpdmUgdG8gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZS4KKyAqLworY29uc3QgY2hhciAqKmdldF9wYXRoc3BlYyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKipwYXRoc3BlYykKK3sKKwlzdHJ1Y3QgcGF0aHNwZWMgcHM7CisJcGFyc2VfcGF0aHNwZWMoJnBzLAorCQkgICAgICAgUEFUSFNQRUNfQUxMX01BR0lDICYKKwkJICAgICAgIH4oUEFUSFNQRUNfRlJPTVRPUCB8IFBBVEhTUEVDX0xJVEVSQUwpLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0NXRCwKKwkJICAgICAgIHByZWZpeCwgcGF0aHNwZWMpOworCXJldHVybiBwcy5fcmF3OworfQorCit2b2lkIGNvcHlfcGF0aHNwZWMoc3RydWN0IHBhdGhzcGVjICpkc3QsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqc3JjKQoreworCSpkc3QgPSAqc3JjOworCWRzdC0+aXRlbXMgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcGF0aHNwZWNfaXRlbSkgKiBkc3QtPm5yKTsKKwltZW1jcHkoZHN0LT5pdGVtcywgc3JjLT5pdGVtcywKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBwYXRoc3BlY19pdGVtKSAqIGRzdC0+bnIpOworfQorCit2b2lkIGZyZWVfcGF0aHNwZWMoc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwlmcmVlKHBhdGhzcGVjLT5pdGVtcyk7CisJcGF0aHNwZWMtPml0ZW1zID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3BhdGhzcGVjLmggYi9wYXRoc3BlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMTEyNjIKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRoc3BlYy5oCkBAIC0wLDAgKzEsMTAyIEBACisjaWZuZGVmIFBBVEhTUEVDX0gKKyNkZWZpbmUgUEFUSFNQRUNfSAorCisvKiBQYXRoc3BlYyBtYWdpYyAqLworI2RlZmluZSBQQVRIU1BFQ19GUk9NVE9QCSgxPDwwKQorI2RlZmluZSBQQVRIU1BFQ19NQVhERVBUSAkoMTw8MSkKKyNkZWZpbmUgUEFUSFNQRUNfTElURVJBTAkoMTw8MikKKyNkZWZpbmUgUEFUSFNQRUNfR0xPQgkJKDE8PDMpCisjZGVmaW5lIFBBVEhTUEVDX0lDQVNFCQkoMTw8NCkKKyNkZWZpbmUgUEFUSFNQRUNfRVhDTFVERQkoMTw8NSkKKyNkZWZpbmUgUEFUSFNQRUNfQUxMX01BR0lDCSAgXAorCShQQVRIU1BFQ19GUk9NVE9QCXwgXAorCSBQQVRIU1BFQ19NQVhERVBUSAl8IFwKKwkgUEFUSFNQRUNfTElURVJBTAl8IFwKKwkgUEFUSFNQRUNfR0xPQgkJfCBcCisJIFBBVEhTUEVDX0lDQVNFCQl8IFwKKwkgUEFUSFNQRUNfRVhDTFVERSkKKworI2RlZmluZSBQQVRIU1BFQ19PTkVTVEFSIDEJLyogdGhlIHBhdGhzcGVjIHBhdHRlcm4gc2F0aXNmaWVzIEdGTk1fT05FU1RBUiAqLworCitzdHJ1Y3QgcGF0aHNwZWMgeworCWNvbnN0IGNoYXIgKipfcmF3OyAvKiBnZXRfcGF0aHNwZWMoKSByZXN1bHQsIG5vdCBmcmVlZCBieSBmcmVlX3BhdGhzcGVjKCkgKi8KKwlpbnQgbnI7CisJdW5zaWduZWQgaW50IGhhc193aWxkY2FyZDoxOworCXVuc2lnbmVkIGludCByZWN1cnNpdmU6MTsKKwl1bnNpZ25lZCBtYWdpYzsKKwlpbnQgbWF4X2RlcHRoOworCXN0cnVjdCBwYXRoc3BlY19pdGVtIHsKKwkJY29uc3QgY2hhciAqbWF0Y2g7CisJCWNvbnN0IGNoYXIgKm9yaWdpbmFsOworCQl1bnNpZ25lZCBtYWdpYzsKKwkJaW50IGxlbiwgcHJlZml4OworCQlpbnQgbm93aWxkY2FyZF9sZW47CisJCWludCBmbGFnczsKKwl9ICppdGVtczsKK307CisKKyNkZWZpbmUgR1VBUkRfUEFUSFNQRUMocHMsIG1hc2spIFwKKwlkbyB7IFwKKwkJaWYgKChwcyktPm1hZ2ljICYgfihtYXNrKSkJICAgICAgIFwKKwkJCWRpZSgiQlVHOiVzOiVkOiB1bnN1cHBvcnRlZCBtYWdpYyAleCIsCVwKKwkJCSAgICBfX0ZJTEVfXywgX19MSU5FX18sIChwcyktPm1hZ2ljICYgfihtYXNrKSk7IFwKKwl9IHdoaWxlICgwKQorCisvKiBwYXJzZV9wYXRoc3BlYyBmbGFncyAqLworI2RlZmluZSBQQVRIU1BFQ19QUkVGRVJfQ1dEICgxPDwwKSAvKiBObyBhcmdzIG1lYW5zIG1hdGNoIGN3ZCAqLworI2RlZmluZSBQQVRIU1BFQ19QUkVGRVJfRlVMTCAoMTw8MSkgLyogTm8gYXJncyBtZWFucyBtYXRjaCBldmVyeXRoaW5nICovCisjZGVmaW5lIFBBVEhTUEVDX01BWERFUFRIX1ZBTElEICgxPDwyKSAvKiBtYXhfZGVwdGggZmllbGQgaXMgdmFsaWQgKi8KKy8qIHN0cmlwIHRoZSB0cmFpbGluZyBzbGFzaCBpZiB0aGUgZ2l2ZW4gcGF0aCBpcyBhIGdpdGxpbmsgKi8KKyNkZWZpbmUgUEFUSFNQRUNfU1RSSVBfU1VCTU9EVUxFX1NMQVNIX0NIRUFQICgxPDwzKQorLyogZGllIGlmIGEgc3ltbGluayBpcyBwYXJ0IG9mIHRoZSBnaXZlbiBwYXRoJ3MgZGlyZWN0b3J5ICovCisjZGVmaW5lIFBBVEhTUEVDX1NZTUxJTktfTEVBRElOR19QQVRIICgxPDw0KQorLyoKKyAqIFRoaXMgaXMgbGlrZSBhIGNvbWJpbmF0aW9uIG9mIC4uTEVBRElOR19QQVRIIGFuZCAuLl9TTEFTSF9DSEVBUAorICogKGJ1dCBub3QgdGhlIHNhbWUpOiBpdCBzdHJpcHMgdGhlIHRyYWlsaW5nIHNsYXNoIGlmIHRoZSBnaXZlbiBwYXRoCisgKiBpcyBhIGdpdGxpbmsgYnV0IGFsc28gY2hlY2tzIGFuZCBkaWVzIGlmIGdpdGxpbmsgaXMgcGFydCBvZiB0aGUKKyAqIGxlYWRpbmcgcGF0aCAoaS5lLiB0aGUgZ2l2ZW4gcGF0aCBnb2VzIGJleW9uZCBhIHN1Ym1vZHVsZSkuIEl0J3MKKyAqIHNhZmVyIHRoYW4gX1NMQVNIX0NIRUFQIGFuZCBhbHNvIG1vcmUgZXhwZW5zaXZlLgorICovCisjZGVmaW5lIFBBVEhTUEVDX1NUUklQX1NVQk1PRFVMRV9TTEFTSF9FWFBFTlNJVkUgKDE8PDUpCisjZGVmaW5lIFBBVEhTUEVDX1BSRUZJWF9PUklHSU4gKDE8PDYpCisjZGVmaW5lIFBBVEhTUEVDX0tFRVBfT1JERVIgKDE8PDcpCisvKgorICogRm9yIHRoZSBjYWxsZXJzIHRoYXQganVzdCBuZWVkIHB1cmUgcGF0aHMgZnJvbSBzb21ld2hlcmUgZWxzZSwgbm90CisgKiBmcm9tIGNvbW1hbmQgbGluZS4gR2xvYmFsIC0tKi1wYXRoc3BlY3Mgb3B0aW9ucyBhcmUgaWdub3JlZC4gTm8KKyAqIG1hZ2ljIGlzIHBhcnNlZCBpbiBlYWNoIHBhdGhzcGVjIGVpdGhlci4gSWYgUEFUSFNQRUNfTElURVJBTCBpcworICogYWxsb3dlZCwgdGhlbiBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IGZvciBldmVyeSBwYXRoc3BlYy4KKyAqLworI2RlZmluZSBQQVRIU1BFQ19MSVRFUkFMX1BBVEggKDE8PDgpCisKK2V4dGVybiB2b2lkIHBhcnNlX3BhdGhzcGVjKHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkgICB1bnNpZ25lZCBtYWdpY19tYXNrLAorCQkJICAgdW5zaWduZWQgZmxhZ3MsCisJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICBjb25zdCBjaGFyICoqYXJncyk7CitleHRlcm4gdm9pZCBjb3B5X3BhdGhzcGVjKHN0cnVjdCBwYXRoc3BlYyAqZHN0LCBjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnNyYyk7CitleHRlcm4gdm9pZCBmcmVlX3BhdGhzcGVjKHN0cnVjdCBwYXRoc3BlYyAqKTsKKworc3RhdGljIGlubGluZSBpbnQgcHNfc3RybmNtcChjb25zdCBzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqaXRlbSwKKwkJCSAgICAgY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3QgbikKK3sKKwlpZiAoaXRlbS0+bWFnaWMgJiBQQVRIU1BFQ19JQ0FTRSkKKwkJcmV0dXJuIHN0cm5jYXNlY21wKHMxLCBzMiwgbik7CisJZWxzZQorCQlyZXR1cm4gc3RybmNtcChzMSwgczIsIG4pOworfQorCitzdGF0aWMgaW5saW5lIGludCBwc19zdHJjbXAoY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sCisJCQkgICAgY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworCWlmIChpdGVtLT5tYWdpYyAmIFBBVEhTUEVDX0lDQVNFKQorCQlyZXR1cm4gc3RyY2FzZWNtcChzMSwgczIpOworCWVsc2UKKwkJcmV0dXJuIHN0cmNtcChzMSwgczIpOworfQorCitleHRlcm4gY2hhciAqZmluZF9wYXRoc3BlY3NfbWF0Y2hpbmdfYWdhaW5zdF9pbmRleChjb25zdCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKTsKK2V4dGVybiB2b2lkIGFkZF9wYXRoc3BlY19tYXRjaGVzX2FnYWluc3RfaW5kZXgoY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywgY2hhciAqc2Vlbik7CitleHRlcm4gY29uc3QgY2hhciAqY2hlY2tfcGF0aF9mb3JfZ2l0bGluayhjb25zdCBjaGFyICpwYXRoKTsKK2V4dGVybiB2b2lkIGRpZV9pZl9wYXRoX2JleW9uZF9zeW1saW5rKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnByZWZpeCk7CisKKyNlbmRpZiAvKiBQQVRIU1BFQ19IICovCmRpZmYgLS1naXQgYS9wZXJsLy5naXRpZ25vcmUgYi9wZXJsLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxZmMyNwotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDggQEAKK3BlcmwubWFrCitwZXJsLm1hay5vbGQKK01ZTUVUQS5qc29uCitNWU1FVEEueW1sCitibGliCitibGliZGlycworcG1fdG9fYmxpYgorUE0uc3RhbXAKZGlmZiAtLWdpdCBhL3BlcmwvR2l0LnBtIGIvcGVybC9HaXQucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllZjA4MQotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0LnBtCkBAIC0wLDAgKzEsMTY5NyBAQAorPWhlYWQxIE5BTUUKKworR2l0IC0gUGVybCBpbnRlcmZhY2UgdG8gdGhlIEdpdCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtCisKKz1jdXQKKworCitwYWNrYWdlIEdpdDsKKwordXNlIDUuMDA4OwordXNlIHN0cmljdDsKKworCitCRUdJTiB7CisKK291ciAoJFZFUlNJT04sIEBJU0EsIEBFWFBPUlQsIEBFWFBPUlRfT0spOworCisjIFRvdGFsbHkgdW5zdGFibGUgQVBJLgorJFZFUlNJT04gPSAnMC4wMSc7CisKKworPWhlYWQxIFNZTk9QU0lTCisKKyAgdXNlIEdpdDsKKworICBteSAkdmVyc2lvbiA9IEdpdDo6Y29tbWFuZF9vbmVsaW5lKCd2ZXJzaW9uJyk7CisKKyAgZ2l0X2NtZF90cnkgeyBHaXQ6OmNvbW1hbmRfbm9pc3koJ3VwZGF0ZS1zZXJ2ZXItaW5mbycpIH0KKyAgICAgICAgICAgICAgJyVzIGZhaWxlZCB3LyBjb2RlICVkJzsKKworICBteSAkcmVwbyA9IEdpdC0+cmVwb3NpdG9yeSAoRGlyZWN0b3J5ID0+ICcvc3J2L2dpdC9jb2dpdG8uZ2l0Jyk7CisKKworICBteSBAcmV2cyA9ICRyZXBvLT5jb21tYW5kKCdyZXYtbGlzdCcsICctLXNpbmNlPWxhc3QgbW9uZGF5JywgJy0tYWxsJyk7CisKKyAgbXkgKCRmaCwgJGMpID0gJHJlcG8tPmNvbW1hbmRfb3V0cHV0X3BpcGUoJ3Jldi1saXN0JywgJy0tc2luY2U9bGFzdCBtb25kYXknLCAnLS1hbGwnKTsKKyAgbXkgJGxhc3RyZXYgPSA8JGZoPjsgY2hvbXAgJGxhc3RyZXY7CisgICRyZXBvLT5jb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkYyk7CisKKyAgbXkgJGxhc3RyZXYgPSAkcmVwby0+Y29tbWFuZF9vbmVsaW5lKCBbICdyZXYtbGlzdCcsICctLWFsbCcgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVERFUlIgPT4gMCApOworCisgIG15ICRzaGExID0gJHJlcG8tPmhhc2hfYW5kX2luc2VydF9vYmplY3QoJ2ZpbGUudHh0Jyk7CisgIG15ICR0ZW1wZmlsZSA9IHRlbXBmaWxlKCk7CisgIG15ICRzaXplID0gJHJlcG8tPmNhdF9ibG9iKCRzaGExLCAkdGVtcGZpbGUpOworCis9Y3V0CisKKworcmVxdWlyZSBFeHBvcnRlcjsKKworQElTQSA9IHF3KEV4cG9ydGVyKTsKKworQEVYUE9SVCA9IHF3KGdpdF9jbWRfdHJ5KTsKKworIyBNZXRob2RzIHdoaWNoIGNhbiBiZSBjYWxsZWQgYXMgc3RhbmRhbG9uZSBmdW5jdGlvbnMgYXMgd2VsbDoKK0BFWFBPUlRfT0sgPSBxdyhjb21tYW5kIGNvbW1hbmRfb25lbGluZSBjb21tYW5kX25vaXN5CisgICAgICAgICAgICAgICAgY29tbWFuZF9vdXRwdXRfcGlwZSBjb21tYW5kX2lucHV0X3BpcGUgY29tbWFuZF9jbG9zZV9waXBlCisgICAgICAgICAgICAgICAgY29tbWFuZF9iaWRpX3BpcGUgY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUKKyAgICAgICAgICAgICAgICB2ZXJzaW9uIGV4ZWNfcGF0aCBodG1sX3BhdGggaGFzaF9vYmplY3QgZ2l0X2NtZF90cnkKKyAgICAgICAgICAgICAgICByZW1vdGVfcmVmcyBwcm9tcHQKKyAgICAgICAgICAgICAgICBnZXRfdHpfb2Zmc2V0CisgICAgICAgICAgICAgICAgY3JlZGVudGlhbCBjcmVkZW50aWFsX3JlYWQgY3JlZGVudGlhbF93cml0ZQorICAgICAgICAgICAgICAgIHRlbXBfYWNxdWlyZSB0ZW1wX2lzX2xvY2tlZCB0ZW1wX3JlbGVhc2UgdGVtcF9yZXNldCB0ZW1wX3BhdGgpOworCisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBQZXJsIHNjcmlwdHMgZWFzeSB3YXkgdG8gaW50ZXJmYWNlIHRoZSBHaXQgdmVyc2lvbiBjb250cm9sCitzeXN0ZW0uIFRoZSBtb2R1bGVzIGhhdmUgYW4gZWFzeSBhbmQgd2VsbC10ZXN0ZWQgd2F5IHRvIGNhbGwgYXJiaXRyYXJ5IEdpdAorY29tbWFuZHM7IGluIHRoZSBmdXR1cmUsIHRoZSBpbnRlcmZhY2Ugd2lsbCBhbHNvIHByb3ZpZGUgc3BlY2lhbGl6ZWQgbWV0aG9kcworZm9yIGRvaW5nIGVhc2lseSBvcGVyYXRpb25zIHdoaWNoIGFyZSBub3QgdG90YWxseSB0cml2aWFsIHRvIGRvIG92ZXIKK3RoZSBnZW5lcmljIGNvbW1hbmQgaW50ZXJmYWNlLgorCitXaGlsZSBzb21lIGNvbW1hbmRzIGNhbiBiZSBleGVjdXRlZCBvdXRzaWRlIG9mIGFueSBjb250ZXh0IChlLmcuICd2ZXJzaW9uJworb3IgJ2luaXQnKSwgbW9zdCBvcGVyYXRpb25zIHJlcXVpcmUgYSByZXBvc2l0b3J5IGNvbnRleHQsIHdoaWNoIGluIHByYWN0aWNlCittZWFucyBnZXR0aW5nIGFuIGluc3RhbmNlIG9mIHRoZSBHaXQgb2JqZWN0IHVzaW5nIHRoZSByZXBvc2l0b3J5KCkgY29uc3RydWN0b3IuCisoSW4gdGhlIGZ1dHVyZSwgd2Ugd2lsbCBhbHNvIGdldCBhIG5ld19yZXBvc2l0b3J5KCkgY29uc3RydWN0b3IuKSBBbGwgY29tbWFuZHMKK2NhbGxlZCBhcyBtZXRob2RzIG9mIHRoZSBvYmplY3QgYXJlIHRoZW4gZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlCityZXBvc2l0b3J5LgorCitQYXJ0IG9mIHRoZSAicmVwb3NpdG9yeSBzdGF0ZSIgaXMgYWxzbyBpbmZvcm1hdGlvbiBhYm91dCBwYXRoIHRvIHRoZSBhdHRhY2hlZAord29ya2luZyBjb3B5ICh1bmxlc3MgeW91IHdvcmsgd2l0aCBhIGJhcmUgcmVwb3NpdG9yeSkuIFlvdSBjYW4gYWxzbyBuYXZpZ2F0ZQoraW5zaWRlIG9mIHRoZSB3b3JraW5nIGNvcHkgdXNpbmcgdGhlIEM8d2NfY2hkaXIoKT4gbWV0aG9kLiAoTm90ZSB0aGF0Cit0aGUgcmVwb3NpdG9yeSBvYmplY3QgaXMgc2VsZi1jb250YWluZWQgYW5kIHdpbGwgbm90IGNoYW5nZSB3b3JraW5nIGRpcmVjdG9yeQorb2YgeW91ciBwcm9jZXNzLikKKworVE9ETzogSW4gdGhlIGZ1dHVyZSwgd2UgbWlnaHQgYWxzbyBkbworCisJbXkgJHJlbW90ZXJlcG8gPSAkcmVwby0+cmVtb3RlX3JlcG9zaXRvcnkgKE5hbWUgPT4gJ2NvZ2l0bycsIEJyYW5jaCA9PiAnbWFzdGVyJyk7CisJJHJlbW90ZXJlcG8gfHw9IEdpdC0+cmVtb3RlX3JlcG9zaXRvcnkgKCdodHRwOi8vZ2l0Lm9yLmN6L2NvZ2l0by5naXQvJyk7CisJbXkgQHJlZnMgPSAkcmVtb3RlcmVwby0+cmVmcygpOworCitDdXJyZW50bHksIHRoZSBtb2R1bGUgbWVyZWx5IHdyYXBzIGNhbGxzIHRvIGV4dGVybmFsIEdpdCB0b29scy4gSW4gdGhlIGZ1dHVyZSwKK2l0IHdpbGwgcHJvdmlkZSBhIG11Y2ggZmFzdGVyIHdheSB0byBpbnRlcmFjdCB3aXRoIEdpdCBieSBsaW5raW5nIGRpcmVjdGx5Cit0byBsaWJnaXQuIFRoaXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgb3BhcXVlIHRvIHRoZSB1c2VyLCB0aG91Z2ggKHBlcmZvcm1hbmNlCitpbmNyZWFzZSBub3R3aXRoc3RhbmRpbmcpLgorCis9Y3V0CisKKwordXNlIENhcnAgcXcoY2FycCBjcm9hayk7ICMgYnV0IGNyb2FrIGlzIGJhZCAtIHRocm93IGluc3RlYWQKK3VzZSBFcnJvciBxdyg6dHJ5KTsKK3VzZSBDd2QgcXcoYWJzX3BhdGggY3dkKTsKK3VzZSBJUEM6Ok9wZW4yIHF3KG9wZW4yKTsKK3VzZSBGY250bCBxdyhTRUVLX1NFVCBTRUVLX0NVUik7Cit1c2UgVGltZTo6TG9jYWwgcXcodGltZWdtKTsKK30KKworCis9aGVhZDEgQ09OU1RSVUNUT1JTCisKKz1vdmVyIDQKKworPWl0ZW0gcmVwb3NpdG9yeSAoIE9QVElPTlMgKQorCis9aXRlbSByZXBvc2l0b3J5ICggRElSRUNUT1JZICkKKworPWl0ZW0gcmVwb3NpdG9yeSAoKQorCitDb25zdHJ1Y3QgYSBuZXcgcmVwb3NpdG9yeSBvYmplY3QuCitDPE9QVElPTlM+IGFyZSBwYXNzZWQgaW4gYSBoYXNoIGxpa2UgZmFzaGlvbiwgdXNpbmcga2V5IGFuZCB2YWx1ZSBwYWlycy4KK1Bvc3NpYmxlIG9wdGlvbnMgYXJlOgorCitCPFJlcG9zaXRvcnk+IC0gUGF0aCB0byB0aGUgR2l0IHJlcG9zaXRvcnkuCisKK0I8V29ya2luZ0NvcHk+IC0gUGF0aCB0byB0aGUgYXNzb2NpYXRlZCB3b3JraW5nIGNvcHk7IG5vdCBzdHJpY3RseSByZXF1aXJlZAorYXMgbWFueSBjb21tYW5kcyB3aWxsIGhhcHBpbHkgY3J1bmNoIG9uIGEgYmFyZSByZXBvc2l0b3J5LgorCitCPFdvcmtpbmdTdWJkaXI+IC0gU3ViZGlyZWN0b3J5IGluIHRoZSB3b3JraW5nIGNvcHkgdG8gd29yayBpbnNpZGUuCitKdXN0IGxlZnQgdW5kZWZpbmVkIGlmIHlvdSBkbyBub3Qgd2FudCB0byBsaW1pdCB0aGUgc2NvcGUgb2Ygb3BlcmF0aW9ucy4KKworQjxEaXJlY3Rvcnk+IC0gUGF0aCB0byB0aGUgR2l0IHdvcmtpbmcgZGlyZWN0b3J5IGluIGl0cyB1c3VhbCBzZXR1cC4KK1RoZSBDPC5naXQ+IGRpcmVjdG9yeSBpcyBzZWFyY2hlZCBpbiB0aGUgZGlyZWN0b3J5IGFuZCBhbGwgdGhlIHBhcmVudAorZGlyZWN0b3JpZXM7IGlmIGZvdW5kLCBDPFdvcmtpbmdDb3B5PiBpcyBzZXQgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCitpdCBhbmQgQzxSZXBvc2l0b3J5PiB0byB0aGUgQzwuZ2l0PiBkaXJlY3RvcnkgaXRzZWxmLiBJZiBubyBDPC5naXQ+CitkaXJlY3Rvcnkgd2FzIGZvdW5kLCB0aGUgQzxEaXJlY3Rvcnk+IGlzIGFzc3VtZWQgdG8gYmUgYSBiYXJlIHJlcG9zaXRvcnksCitDPFJlcG9zaXRvcnk+IGlzIHNldCB0byBwb2ludCBhdCBpdCBhbmQgQzxXb3JraW5nQ29weT4gaXMgbGVmdCB1bmRlZmluZWQuCitJZiB0aGUgQzwkR0lUX0RJUj4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCB0aGluZ3MgYmVoYXZlIGFzIGV4cGVjdGVkCithcyB3ZWxsLgorCitZb3Ugc2hvdWxkIG5vdCB1c2UgYm90aCBDPERpcmVjdG9yeT4gYW5kIGVpdGhlciBvZiBDPFJlcG9zaXRvcnk+IGFuZAorQzxXb3JraW5nQ29weT4gLSB0aGUgcmVzdWx0cyBvZiB0aGF0IGFyZSB1bmRlZmluZWQuCisKK0FsdGVybmF0aXZlbHksIGEgZGlyZWN0b3J5IHBhdGggbWF5IGJlIHBhc3NlZCBhcyBhIHNpbmdsZSBzY2FsYXIgYXJndW1lbnQKK3RvIHRoZSBjb25zdHJ1Y3RvcjsgaXQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIG9ubHkgdGhlIEM8RGlyZWN0b3J5PiBvcHRpb24KK2ZpZWxkLgorCitDYWxsaW5nIHRoZSBjb25zdHJ1Y3RvciB3aXRoIG5vIG9wdGlvbnMgd2hhdHNvZXZlciBpcyBlcXVpdmFsZW50IHRvCitjYWxsaW5nIGl0IHdpdGggQzw8IERpcmVjdG9yeSA9PiAnLicgPj4uIEluIGdlbmVyYWwsIGlmIHlvdSBhcmUgYnVpbGRpbmcKK2Egc3RhbmRhcmQgcG9yY2VsYWluIGNvbW1hbmQsIHNpbXBseSBkb2luZyBDPDwgR2l0LT5yZXBvc2l0b3J5KCkgPj4gc2hvdWxkCitkbyB0aGUgcmlnaHQgdGhpbmcgYW5kIHNldHVwIHRoZSBvYmplY3QgdG8gcmVmbGVjdCBleGFjdGx5IHdoZXJlIHRoZSB1c2VyCitpcyByaWdodCBub3cuCisKKz1jdXQKKworc3ViIHJlcG9zaXRvcnkgeworCW15ICRjbGFzcyA9IHNoaWZ0OworCW15IEBhcmdzID0gQF87CisJbXkgJW9wdHMgPSAoKTsKKwlteSAkc2VsZjsKKworCWlmIChkZWZpbmVkICRhcmdzWzBdKSB7CisJCWlmICgkI2FyZ3MgJSAyICE9IDEpIHsKKwkJCSMgTm90IGEgaGFzaC4KKwkJCSQjYXJncyA9PSAwIG9yIHRocm93IEVycm9yOjpTaW1wbGUoImJhZCB1c2FnZSIpOworCQkJJW9wdHMgPSAoIERpcmVjdG9yeSA9PiAkYXJnc1swXSApOworCQl9IGVsc2UgeworCQkJJW9wdHMgPSBAYXJnczsKKwkJfQorCX0KKworCWlmIChub3QgZGVmaW5lZCAkb3B0c3tSZXBvc2l0b3J5fSBhbmQgbm90IGRlZmluZWQgJG9wdHN7V29ya2luZ0NvcHl9CisJCWFuZCBub3QgZGVmaW5lZCAkb3B0c3tEaXJlY3Rvcnl9KSB7CisJCSRvcHRze0RpcmVjdG9yeX0gPSAnLic7CisJfQorCisJaWYgKGRlZmluZWQgJG9wdHN7RGlyZWN0b3J5fSkgeworCQktZCAkb3B0c3tEaXJlY3Rvcnl9IG9yIHRocm93IEVycm9yOjpTaW1wbGUoIkRpcmVjdG9yeSBub3QgZm91bmQ6ICRvcHRze0RpcmVjdG9yeX0gJCEiKTsKKworCQlteSAkc2VhcmNoID0gR2l0LT5yZXBvc2l0b3J5KFdvcmtpbmdDb3B5ID0+ICRvcHRze0RpcmVjdG9yeX0pOworCQlteSAkZGlyOworCQl0cnkgeworCQkJJGRpciA9ICRzZWFyY2gtPmNvbW1hbmRfb25lbGluZShbJ3Jldi1wYXJzZScsICctLWdpdC1kaXInXSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RERVJSID0+IDApOworCQl9IGNhdGNoIEdpdDo6RXJyb3I6OkNvbW1hbmQgd2l0aCB7CisJCQkkZGlyID0gdW5kZWY7CisJCX07CisKKwkJaWYgKCRkaXIpIHsKKwkJCSRkaXIgPX4gbSNeLyMgb3IgJGRpciA9ICRvcHRze0RpcmVjdG9yeX0gLiAnLycgLiAkZGlyOworCQkJJG9wdHN7UmVwb3NpdG9yeX0gPSBhYnNfcGF0aCgkZGlyKTsKKworCQkJIyBJZiAtLWdpdC1kaXIgd2VudCBvaywgdGhpcyBzaG91bGRuJ3QgZGllIGVpdGhlci4KKwkJCW15ICRwcmVmaXggPSAkc2VhcmNoLT5jb21tYW5kX29uZWxpbmUoJ3Jldi1wYXJzZScsICctLXNob3ctcHJlZml4Jyk7CisJCQkkZGlyID0gYWJzX3BhdGgoJG9wdHN7RGlyZWN0b3J5fSkgLiAnLyc7CisJCQlpZiAoJHByZWZpeCkgeworCQkJCWlmIChzdWJzdHIoJGRpciwgLWxlbmd0aCgkcHJlZml4KSkgbmUgJHByZWZpeCkgeworCQkJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJyZXYtcGFyc2UgY29uZnVzZWQgbWUgLSAkZGlyIGRvZXMgbm90IGhhdmUgdHJhaWxpbmcgJHByZWZpeCIpOworCQkJCX0KKwkJCQlzdWJzdHIoJGRpciwgLWxlbmd0aCgkcHJlZml4KSkgPSAnJzsKKwkJCX0KKwkJCSRvcHRze1dvcmtpbmdDb3B5fSA9ICRkaXI7CisJCQkkb3B0c3tXb3JraW5nU3ViZGlyfSA9ICRwcmVmaXg7CisKKwkJfSBlbHNlIHsKKwkJCSMgQSBiYXJlIHJlcG9zaXRvcnk/IExldCdzIHNlZS4uLgorCQkJJGRpciA9ICRvcHRze0RpcmVjdG9yeX07CisKKwkJCXVubGVzcyAoLWQgIiRkaXIvcmVmcyIgYW5kIC1kICIkZGlyL29iamVjdHMiIGFuZCAtZSAiJGRpci9IRUFEIikgeworCQkJCSMgTWltaWMgZ2l0LXJldi1wYXJzZSAtLWdpdC1kaXIgZXJyb3IgbWVzc2FnZToKKwkJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJmYXRhbDogTm90IGEgZ2l0IHJlcG9zaXRvcnk6ICRkaXIiKTsKKwkJCX0KKwkJCW15ICRzZWFyY2ggPSBHaXQtPnJlcG9zaXRvcnkoUmVwb3NpdG9yeSA9PiAkZGlyKTsKKwkJCXRyeSB7CisJCQkJJHNlYXJjaC0+Y29tbWFuZCgnc3ltYm9saWMtcmVmJywgJ0hFQUQnKTsKKwkJCX0gY2F0Y2ggR2l0OjpFcnJvcjo6Q29tbWFuZCB3aXRoIHsKKwkJCQkjIE1pbWljIGdpdC1yZXYtcGFyc2UgLS1naXQtZGlyIGVycm9yIG1lc3NhZ2U6CisJCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiZmF0YWw6IE5vdCBhIGdpdCByZXBvc2l0b3J5OiAkZGlyIik7CisJCQl9CisKKwkJCSRvcHRze1JlcG9zaXRvcnl9ID0gYWJzX3BhdGgoJGRpcik7CisJCX0KKworCQlkZWxldGUgJG9wdHN7RGlyZWN0b3J5fTsKKwl9CisKKwkkc2VsZiA9IHsgb3B0cyA9PiBcJW9wdHMgfTsKKwlibGVzcyAkc2VsZiwgJGNsYXNzOworfQorCis9YmFjaworCis9aGVhZDEgTUVUSE9EUworCis9b3ZlciA0CisKKz1pdGVtIGNvbW1hbmQgKCBDT01NQU5EIFssIEFSR1VNRU5UUy4uLiBdICkKKworPWl0ZW0gY29tbWFuZCAoIFsgQ09NTUFORCwgQVJHVU1FTlRTLi4uIF0sIHsgT3B0ID0+IFZhbCAuLi4gfSApCisKK0V4ZWN1dGUgdGhlIGdpdmVuIEdpdCBDPENPTU1BTkQ+IChzcGVjaWZ5IGl0IHdpdGhvdXQgdGhlICdnaXQtJworcHJlZml4KSwgb3B0aW9uYWxseSB3aXRoIHRoZSBzcGVjaWZpZWQgZXh0cmEgQzxBUkdVTUVOVFM+LgorCitUaGUgc2Vjb25kIG1vcmUgZWxhYm9yYXRlIGZvcm0gY2FuIGJlIHVzZWQgaWYgeW91IHdhbnQgdG8gZnVydGhlciBhZGp1c3QKK3RoZSBjb21tYW5kIGV4ZWN1dGlvbi4gQ3VycmVudGx5LCBvbmx5IG9uZSBvcHRpb24gaXMgc3VwcG9ydGVkOgorCitCPFNUREVSUj4gLSBIb3cgdG8gZGVhbCB3aXRoIHRoZSBjb21tYW5kJ3MgZXJyb3Igb3V0cHV0LiBCeSBkZWZhdWx0IChDPHVuZGVmPikKK2l0IGlzIGRlbGl2ZXJlZCB0byB0aGUgY2FsbGVyJ3MgQzxTVERFUlI+LiBBIGZhbHNlIHZhbHVlICgwIG9yICcnKSB3aWxsIGNhdXNlCitpdCB0byBiZSB0aHJvd24gYXdheS4gSWYgeW91IHdhbnQgdG8gcHJvY2VzcyBpdCwgeW91IGNhbiBnZXQgaXQgaW4gYSBmaWxlaGFuZGxlCit5b3Ugc3BlY2lmeSwgYnV0IHlvdSBtdXN0IGJlIGV4dHJlbWVseSBjYXJlZnVsOyBpZiB0aGUgZXJyb3Igb3V0cHV0IGlzIG5vdAordmVyeSBzaG9ydCBhbmQgeW91IHdhbnQgdG8gcmVhZCBpdCBpbiB0aGUgc2FtZSBwcm9jZXNzIGFzIHdoZXJlIHlvdSBjYWxsZWQKK0M8Y29tbWFuZCgpPiwgeW91IGFyZSBzZXQgdXAgZm9yIGEgbmljZSBkZWFkbG9jayEKKworVGhlIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYW55IGluc3RhbmNlIG9yIG9uIGEgc3BlY2lmaWVkIEdpdCByZXBvc2l0b3J5CisoaW4gdGhhdCBjYXNlIHRoZSBjb21tYW5kIHdpbGwgYmUgcnVuIGluIHRoZSByZXBvc2l0b3J5IGNvbnRleHQpLgorCitJbiBzY2FsYXIgY29udGV4dCwgaXQgcmV0dXJucyBhbGwgdGhlIGNvbW1hbmQgb3V0cHV0IGluIGEgc2luZ2xlIHN0cmluZworKHZlcmJhdGltKS4KKworSW4gYXJyYXkgY29udGV4dCwgaXQgcmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIGxpbmVzIHByaW50ZWQgdG8gdGhlCitjb21tYW5kJ3Mgc3Rkb3V0ICh3aXRob3V0IHRyYWlsaW5nIG5ld2xpbmVzKS4KKworSW4gYm90aCBjYXNlcywgdGhlIGNvbW1hbmQncyBzdGRpbiBhbmQgc3RkZXJyIGFyZSB0aGUgc2FtZSBhcyB0aGUgY2FsbGVyJ3MuCisKKz1jdXQKKworc3ViIGNvbW1hbmQgeworCW15ICgkZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShAXyk7CisKKwlpZiAobm90IGRlZmluZWQgd2FudGFycmF5KSB7CisJCSMgTm90aGluZyB0byBwZXBwZXIgdGhlIHBvc3NpYmxlIGV4Y2VwdGlvbiB3aXRoLgorCQlfY21kX2Nsb3NlKCRjdHgsICRmaCk7CisKKwl9IGVsc2lmIChub3Qgd2FudGFycmF5KSB7CisJCWxvY2FsICQvOworCQlteSAkdGV4dCA9IDwkZmg+OworCQl0cnkgeworCQkJX2NtZF9jbG9zZSgkY3R4LCAkZmgpOworCQl9IGNhdGNoIEdpdDo6RXJyb3I6OkNvbW1hbmQgd2l0aCB7CisJCQkjIFBlcHBlciB3aXRoIHRoZSBvdXRwdXQ6CisJCQlteSAkRSA9IHNoaWZ0OworCQkJJEUtPnsnLW91dHB1dHJlZid9ID0gXCR0ZXh0OworCQkJdGhyb3cgJEU7CisJCX07CisJCXJldHVybiAkdGV4dDsKKworCX0gZWxzZSB7CisJCW15IEBsaW5lcyA9IDwkZmg+OworCQlkZWZpbmVkIGFuZCBjaG9tcCBmb3IgQGxpbmVzOworCQl0cnkgeworCQkJX2NtZF9jbG9zZSgkY3R4LCAkZmgpOworCQl9IGNhdGNoIEdpdDo6RXJyb3I6OkNvbW1hbmQgd2l0aCB7CisJCQlteSAkRSA9IHNoaWZ0OworCQkJJEUtPnsnLW91dHB1dHJlZid9ID0gXEBsaW5lczsKKwkJCXRocm93ICRFOworCQl9OworCQlyZXR1cm4gQGxpbmVzOworCX0KK30KKworCis9aXRlbSBjb21tYW5kX29uZWxpbmUgKCBDT01NQU5EIFssIEFSR1VNRU5UUy4uLiBdICkKKworPWl0ZW0gY29tbWFuZF9vbmVsaW5lICggWyBDT01NQU5ELCBBUkdVTUVOVFMuLi4gXSwgeyBPcHQgPT4gVmFsIC4uLiB9ICkKKworRXhlY3V0ZSB0aGUgZ2l2ZW4gQzxDT01NQU5EPiBpbiB0aGUgc2FtZSB3YXkgYXMgY29tbWFuZCgpCitkb2VzIGJ1dCBhbHdheXMgcmV0dXJuIGEgc2NhbGFyIHN0cmluZyBjb250YWluaW5nIHRoZSBmaXJzdCBsaW5lCitvZiB0aGUgY29tbWFuZCdzIHN0YW5kYXJkIG91dHB1dC4KKworPWN1dAorCitzdWIgY29tbWFuZF9vbmVsaW5lIHsKKwlteSAoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQF8pOworCisJbXkgJGxpbmUgPSA8JGZoPjsKKwlkZWZpbmVkICRsaW5lIGFuZCBjaG9tcCAkbGluZTsKKwl0cnkgeworCQlfY21kX2Nsb3NlKCRjdHgsICRmaCk7CisJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggeworCQkjIFBlcHBlciB3aXRoIHRoZSBvdXRwdXQ6CisJCW15ICRFID0gc2hpZnQ7CisJCSRFLT57Jy1vdXRwdXRyZWYnfSA9IFwkbGluZTsKKwkJdGhyb3cgJEU7CisJfTsKKwlyZXR1cm4gJGxpbmU7Cit9CisKKworPWl0ZW0gY29tbWFuZF9vdXRwdXRfcGlwZSAoIENPTU1BTkQgWywgQVJHVU1FTlRTLi4uIF0gKQorCis9aXRlbSBjb21tYW5kX291dHB1dF9waXBlICggWyBDT01NQU5ELCBBUkdVTUVOVFMuLi4gXSwgeyBPcHQgPT4gVmFsIC4uLiB9ICkKKworRXhlY3V0ZSB0aGUgZ2l2ZW4gQzxDT01NQU5EPiBpbiB0aGUgc2FtZSB3YXkgYXMgY29tbWFuZCgpCitkb2VzIGJ1dCByZXR1cm4gYSBwaXBlIGZpbGVoYW5kbGUgZnJvbSB3aGljaCB0aGUgY29tbWFuZCBvdXRwdXQgY2FuIGJlCityZWFkLgorCitUaGUgZnVuY3Rpb24gY2FuIHJldHVybiBDPCgkcGlwZSwgJGN0eCk+IGluIGFycmF5IGNvbnRleHQuCitTZWUgQzxjb21tYW5kX2Nsb3NlX3BpcGUoKT4gZm9yIGRldGFpbHMuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfb3V0cHV0X3BpcGUgeworCV9jb21tYW5kX2NvbW1vbl9waXBlKCctfCcsIEBfKTsKK30KKworCis9aXRlbSBjb21tYW5kX2lucHV0X3BpcGUgKCBDT01NQU5EIFssIEFSR1VNRU5UUy4uLiBdICkKKworPWl0ZW0gY29tbWFuZF9pbnB1dF9waXBlICggWyBDT01NQU5ELCBBUkdVTUVOVFMuLi4gXSwgeyBPcHQgPT4gVmFsIC4uLiB9ICkKKworRXhlY3V0ZSB0aGUgZ2l2ZW4gQzxDT01NQU5EPiBpbiB0aGUgc2FtZSB3YXkgYXMgY29tbWFuZF9vdXRwdXRfcGlwZSgpCitkb2VzIGJ1dCByZXR1cm4gYW4gaW5wdXQgcGlwZSBmaWxlaGFuZGxlIGluc3RlYWQ7IHRoZSBjb21tYW5kIG91dHB1dAoraXMgbm90IGNhcHR1cmVkLgorCitUaGUgZnVuY3Rpb24gY2FuIHJldHVybiBDPCgkcGlwZSwgJGN0eCk+IGluIGFycmF5IGNvbnRleHQuCitTZWUgQzxjb21tYW5kX2Nsb3NlX3BpcGUoKT4gZm9yIGRldGFpbHMuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfaW5wdXRfcGlwZSB7CisJX2NvbW1hbmRfY29tbW9uX3BpcGUoJ3wtJywgQF8pOworfQorCisKKz1pdGVtIGNvbW1hbmRfY2xvc2VfcGlwZSAoIFBJUEUgWywgQ1RYIF0gKQorCitDbG9zZSB0aGUgQzxQSVBFPiBhcyByZXR1cm5lZCBmcm9tIEM8Y29tbWFuZF8qX3BpcGUoKT4sIGNoZWNraW5nCit3aGV0aGVyIHRoZSBjb21tYW5kIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4gVGhlIG9wdGlvbmFsIEM8Q1RYPiBhcmd1bWVudAoraXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gc2VlIHRoZSBjb21tYW5kIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2UsCithbmQgaXQgaXMgdGhlIHNlY29uZCB2YWx1ZSByZXR1cm5lZCBieSBDPGNvbW1hbmRfKl9waXBlKCk+IHdoZW4KK2NhbGxlZCBpbiBhcnJheSBjb250ZXh0LiBUaGUgY2FsbCBpZGlvbSBpczoKKworCW15ICgkZmgsICRjdHgpID0gJHItPmNvbW1hbmRfb3V0cHV0X3BpcGUoJ3N0YXR1cycpOworCXdoaWxlICg8JGZoPikgeyAuLi4gfQorCSRyLT5jb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkY3R4KTsKKworTm90ZSB0aGF0IHlvdSBzaG91bGQgbm90IHJlbHkgb24gd2hhdGV2ZXIgYWN0dWFsbHkgaXMgaW4gQzxDVFg+OworY3VycmVudGx5IGl0IGlzIHNpbXBseSB0aGUgY29tbWFuZCBuYW1lIGJ1dCBpbiBmdXR1cmUgdGhlIGNvbnRleHQgbWlnaHQKK2hhdmUgbW9yZSBjb21wbGljYXRlZCBzdHJ1Y3R1cmUuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfY2xvc2VfcGlwZSB7CisJbXkgKCRzZWxmLCAkZmgsICRjdHgpID0gX21heWJlX3NlbGYoQF8pOworCSRjdHggfHw9ICc8dW5rbm93bj4nOworCV9jbWRfY2xvc2UoJGN0eCwgJGZoKTsKK30KKworPWl0ZW0gY29tbWFuZF9iaWRpX3BpcGUgKCBDT01NQU5EIFssIEFSR1VNRU5UUy4uLiBdICkKKworRXhlY3V0ZSB0aGUgZ2l2ZW4gQzxDT01NQU5EPiBpbiB0aGUgc2FtZSB3YXkgYXMgY29tbWFuZF9vdXRwdXRfcGlwZSgpCitkb2VzIGJ1dCByZXR1cm4gYm90aCBhbiBpbnB1dCBwaXBlIGZpbGVoYW5kbGUgYW5kIGFuIG91dHB1dCBwaXBlIGZpbGVoYW5kbGUuCisKK1RoZSBmdW5jdGlvbiB3aWxsIHJldHVybiByZXR1cm4gQzwoJHBpZCwgJHBpcGVfaW4sICRwaXBlX291dCwgJGN0eCk+LgorU2VlIEM8Y29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoKT4gZm9yIGRldGFpbHMuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfYmlkaV9waXBlIHsKKwlteSAoJHBpZCwgJGluLCAkb3V0KTsKKwlteSAoJHNlbGYpID0gX21heWJlX3NlbGYoQF8pOworCWxvY2FsICVFTlYgPSAlRU5WOworCW15ICRjd2Rfc2F2ZSA9IHVuZGVmOworCWlmICgkc2VsZikgeworCQlzaGlmdDsKKwkJJGN3ZF9zYXZlID0gY3dkKCk7CisJCV9zZXR1cF9naXRfY21kX2Vudigkc2VsZik7CisJfQorCSRwaWQgPSBvcGVuMigkaW4sICRvdXQsICdnaXQnLCBAXyk7CisJY2hkaXIoJGN3ZF9zYXZlKSBpZiAkY3dkX3NhdmU7CisJcmV0dXJuICgkcGlkLCAkaW4sICRvdXQsIGpvaW4oJyAnLCBAXykpOworfQorCis9aXRlbSBjb21tYW5kX2Nsb3NlX2JpZGlfcGlwZSAoIFBJRCwgUElQRV9JTiwgUElQRV9PVVQgWywgQ1RYXSApCisKK0Nsb3NlIHRoZSBDPFBJUEVfSU4+IGFuZCBDPFBJUEVfT1VUPiBhcyByZXR1cm5lZCBmcm9tIEM8Y29tbWFuZF9iaWRpX3BpcGUoKT4sCitjaGVja2luZyB3aGV0aGVyIHRoZSBjb21tYW5kIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4gVGhlIG9wdGlvbmFsIEM8Q1RYPgorYXJndW1lbnQgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gc2VlIHRoZSBjb21tYW5kIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2UsCithbmQgaXQgaXMgdGhlIGZvdXJ0aCB2YWx1ZSByZXR1cm5lZCBieSBDPGNvbW1hbmRfYmlkaV9waXBlKCk+LiAgVGhlIGNhbGwgaWRpb20KK2lzOgorCisJbXkgKCRwaWQsICRpbiwgJG91dCwgJGN0eCkgPSAkci0+Y29tbWFuZF9iaWRpX3BpcGUoJ2NhdC1maWxlIC0tYmF0Y2gtY2hlY2snKTsKKwlwcmludCAkb3V0ICIwMDAwMDAwMDBcbiI7CisJd2hpbGUgKDwkaW4+KSB7IC4uLiB9CisJJHItPmNvbW1hbmRfY2xvc2VfYmlkaV9waXBlKCRwaWQsICRpbiwgJG91dCwgJGN0eCk7CisKK05vdGUgdGhhdCB5b3Ugc2hvdWxkIG5vdCByZWx5IG9uIHdoYXRldmVyIGFjdHVhbGx5IGlzIGluIEM8Q1RYPjsKK2N1cnJlbnRseSBpdCBpcyBzaW1wbHkgdGhlIGNvbW1hbmQgbmFtZSBidXQgaW4gZnV0dXJlIHRoZSBjb250ZXh0IG1pZ2h0CitoYXZlIG1vcmUgY29tcGxpY2F0ZWQgc3RydWN0dXJlLgorCitDPFBJUEVfSU4+IGFuZCBDPFBJUEVfT1VUPiBtYXkgYmUgQzx1bmRlZj4gaWYgdGhleSBoYXZlIGJlZW4gY2xvc2VkIHByaW9yIHRvCitjYWxsaW5nIHRoaXMgZnVuY3Rpb24uICBUaGlzIG1heSBiZSB1c2VmdWwgaW4gYSBxdWVyeS1yZXNwb25zZSB0eXBlIG9mCitjb21tYW5kcyB3aGVyZSBjYWxsZXIgZmlyc3Qgd3JpdGVzIGEgcXVlcnkgYW5kIGxhdGVyIHJlYWRzIHJlc3BvbnNlLCBlZzoKKworCW15ICgkcGlkLCAkaW4sICRvdXQsICRjdHgpID0gJHItPmNvbW1hbmRfYmlkaV9waXBlKCdjYXQtZmlsZSAtLWJhdGNoLWNoZWNrJyk7CisJcHJpbnQgJG91dCAiMDAwMDAwMDAwXG4iOworCWNsb3NlICRvdXQ7CisJd2hpbGUgKDwkaW4+KSB7IC4uLiB9CisJJHItPmNvbW1hbmRfY2xvc2VfYmlkaV9waXBlKCRwaWQsICRpbiwgdW5kZWYsICRjdHgpOworCitUaGlzIGlkaW9tIG1heSBwcmV2ZW50IHBvdGVudGlhbCBkZWFkIGxvY2tzIGNhdXNlZCBieSBkYXRhIHNlbnQgdG8gdGhlIG91dHB1dAorcGlwZSBub3QgYmVpbmcgZmx1c2hlZCBhbmQgdGh1cyBub3QgcmVhY2hpbmcgdGhlIGV4ZWN1dGVkIGNvbW1hbmQuCisKKz1jdXQKKworc3ViIGNvbW1hbmRfY2xvc2VfYmlkaV9waXBlIHsKKwlsb2NhbCAkPzsKKwlteSAoJHNlbGYsICRwaWQsICRpbiwgJG91dCwgJGN0eCkgPSBfbWF5YmVfc2VsZihAXyk7CisJX2NtZF9jbG9zZSgkY3R4LCAoZ3JlcCB7IGRlZmluZWQgfSAoJGluLCAkb3V0KSkpOworCXdhaXRwaWQgJHBpZCwgMDsKKwlpZiAoJD8gPj4gOCkgeworCQl0aHJvdyBHaXQ6OkVycm9yOjpDb21tYW5kKCRjdHgsICQ/ID4+OCk7CisJfQorfQorCisKKz1pdGVtIGNvbW1hbmRfbm9pc3kgKCBDT01NQU5EIFssIEFSR1VNRU5UUy4uLiBdICkKKworRXhlY3V0ZSB0aGUgZ2l2ZW4gQzxDT01NQU5EPiBpbiB0aGUgc2FtZSB3YXkgYXMgY29tbWFuZCgpIGRvZXMgYnV0IGRvIG5vdAorY2FwdHVyZSB0aGUgY29tbWFuZCBvdXRwdXQgLSB0aGUgc3RhbmRhcmQgb3V0cHV0IGlzIG5vdCByZWRpcmVjdGVkIGFuZCBnb2VzCit0byB0aGUgc3RhbmRhcmQgb3V0cHV0IG9mIHRoZSBjYWxsZXIgYXBwbGljYXRpb24uCisKK1doaWxlIHRoZSBtZXRob2QgaXMgY2FsbGVkIGNvbW1hbmRfbm9pc3koKSwgeW91IG1pZ2h0IHdhbnQgdG8gYXMgd2VsbCB1c2UKK2l0IGZvciB0aGUgbW9zdCBzaWxlbnQgR2l0IGNvbW1hbmRzIHdoaWNoIHlvdSBrbm93IHdpbGwgbmV2ZXIgcG9sbHV0ZSB5b3VyCitzdGRvdXQgYnV0IHlvdSB3YW50IHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB0aGUgcGlwZSBzZXR1cCB3aGVuIGNhbGxpbmcgdGhlbS4KKworVGhlIGZ1bmN0aW9uIHJldHVybnMgb25seSBhZnRlciB0aGUgY29tbWFuZCBoYXMgZmluaXNoZWQgcnVubmluZy4KKworPWN1dAorCitzdWIgY29tbWFuZF9ub2lzeSB7CisJbXkgKCRzZWxmLCAkY21kLCBAYXJncykgPSBfbWF5YmVfc2VsZihAXyk7CisJX2NoZWNrX3ZhbGlkX2NtZCgkY21kKTsKKworCW15ICRwaWQgPSBmb3JrOworCWlmIChub3QgZGVmaW5lZCAkcGlkKSB7CisJCXRocm93IEVycm9yOjpTaW1wbGUoImZvcmsgZmFpbGVkOiAkISIpOworCX0gZWxzaWYgKCRwaWQgPT0gMCkgeworCQlfY21kX2V4ZWMoJHNlbGYsICRjbWQsIEBhcmdzKTsKKwl9CisJaWYgKHdhaXRwaWQoJHBpZCwgMCkgPiAwIGFuZCAkPz4+OCAhPSAwKSB7CisJCXRocm93IEdpdDo6RXJyb3I6OkNvbW1hbmQoam9pbignICcsICRjbWQsIEBhcmdzKSwgJD8gPj4gOCk7CisJfQorfQorCisKKz1pdGVtIHZlcnNpb24gKCkKKworUmV0dXJuIHRoZSBHaXQgdmVyc2lvbiBpbiB1c2UuCisKKz1jdXQKKworc3ViIHZlcnNpb24geworCW15ICR2ZXJzdHIgPSBjb21tYW5kX29uZWxpbmUoJy0tdmVyc2lvbicpOworCSR2ZXJzdHIgPX4gcy9eZ2l0IHZlcnNpb24gLy87CisJJHZlcnN0cjsKK30KKworCis9aXRlbSBleGVjX3BhdGggKCkKKworUmV0dXJuIHBhdGggdG8gdGhlIEdpdCBzdWItY29tbWFuZCBleGVjdXRhYmxlcyAodGhlIHNhbWUgYXMKK0M8Z2l0IC0tZXhlYy1wYXRoPikuIFVzZWZ1bCBtb3N0bHkgb25seSBpbnRlcm5hbGx5LgorCis9Y3V0CisKK3N1YiBleGVjX3BhdGggeyBjb21tYW5kX29uZWxpbmUoJy0tZXhlYy1wYXRoJykgfQorCisKKz1pdGVtIGh0bWxfcGF0aCAoKQorCitSZXR1cm4gcGF0aCB0byB0aGUgR2l0IGh0bWwgZG9jdW1lbnRhdGlvbiAodGhlIHNhbWUgYXMKK0M8Z2l0IC0taHRtbC1wYXRoPikuIFVzZWZ1bCBtb3N0bHkgb25seSBpbnRlcm5hbGx5LgorCis9Y3V0CisKK3N1YiBodG1sX3BhdGggeyBjb21tYW5kX29uZWxpbmUoJy0taHRtbC1wYXRoJykgfQorCisKKz1pdGVtIGdldF90el9vZmZzZXQgKCBUSU1FICkKKworUmV0dXJuIHRoZSB0aW1lIHpvbmUgb2Zmc2V0IGZyb20gR01UIGluIHRoZSBmb3JtICsvLUhITU0gd2hlcmUgSEggaXMKK3RoZSBudW1iZXIgb2YgaG91cnMgZnJvbSBHTVQgYW5kIE1NIGlzIHRoZSBudW1iZXIgb2YgbWludXRlcy4gIFRoaXMgaXMKK3RoZSBlcXVpdmFsZW50IG9mIHdoYXQgc3RyZnRpbWUoIiV6IiwgLi4uKSB3b3VsZCBwcm92aWRlIG9uIGEgR05VCitwbGF0Zm9ybS4KKworSWYgVElNRSBpcyBub3Qgc3VwcGxpZWQsIHRoZSBjdXJyZW50IGxvY2FsIHRpbWUgaXMgdXNlZC4KKworPWN1dAorCitzdWIgZ2V0X3R6X29mZnNldCB7CisJIyBzb21lIHN5c3RtZXMgZG9uJ3QgaGFuZGxlIG9yIG1pc2hhbmRsZSAleiwgc28gYmUgY3JlYXRpdmUuCisJbXkgJHQgPSBzaGlmdCB8fCB0aW1lOworCW15ICRnbSA9IHRpbWVnbShsb2NhbHRpbWUoJHQpKTsKKwlteSAkc2lnbiA9IHF3KCArICsgLSApWyAkZ20gPD0+ICR0IF07CisJcmV0dXJuIHNwcmludGYoIiVzJTAyZCUwMmQiLCAkc2lnbiwgKGdtdGltZShhYnMoJHQgLSAkZ20pKSlbMiwxXSk7Cit9CisKKworPWl0ZW0gcHJvbXB0ICggUFJPTVBUICwgSVNQQVNTV09SRCAgKQorCitRdWVyeSB1c2VyIEM8UFJPTVBUPiBhbmQgcmV0dXJuIGFuc3dlciBmcm9tIHVzZXIuCisKK0hvbm91cnMgR0lUX0FTS1BBU1MgYW5kIFNTSF9BU0tQQVNTIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgcXVlcnlpbmcKK3RoZSB1c2VyLiBJZiBubyAqX0FTS1BBU1MgdmFyaWFibGUgaXMgc2V0IG9yIGFuIGVycm9yIG9jY291cmVkLAordGhlIHRlcm1pbmFsIGlzIHRyaWVkIGFzIGEgZmFsbGJhY2suCitJZiBDPElTUEFTU1dPUkQ+IGlzIHNldCBhbmQgdHJ1ZSwgdGhlIHRlcm1pbmFsIGRpc2FibGVzIGVjaG8uCisKKz1jdXQKKworc3ViIHByb21wdCB7CisJbXkgKCRwcm9tcHQsICRpc1Bhc3N3b3JkKSA9IEBfOworCW15ICRyZXQ7CisJaWYgKGV4aXN0cyAkRU5WeydHSVRfQVNLUEFTUyd9KSB7CisJCSRyZXQgPSBfcHJvbXB0KCRFTlZ7J0dJVF9BU0tQQVNTJ30sICRwcm9tcHQpOworCX0KKwlpZiAoIWRlZmluZWQgJHJldCAmJiBleGlzdHMgJEVOVnsnU1NIX0FTS1BBU1MnfSkgeworCQkkcmV0ID0gX3Byb21wdCgkRU5WeydTU0hfQVNLUEFTUyd9LCAkcHJvbXB0KTsKKwl9CisJaWYgKCFkZWZpbmVkICRyZXQpIHsKKwkJcHJpbnQgU1RERVJSICRwcm9tcHQ7CisJCVNUREVSUi0+Zmx1c2g7CisJCWlmIChkZWZpbmVkICRpc1Bhc3N3b3JkICYmICRpc1Bhc3N3b3JkKSB7CisJCQlyZXF1aXJlIFRlcm06OlJlYWRLZXk7CisJCQlUZXJtOjpSZWFkS2V5OjpSZWFkTW9kZSgnbm9lY2hvJyk7CisJCQkkcmV0ID0gJyc7CisJCQl3aGlsZSAoZGVmaW5lZChteSAka2V5ID0gVGVybTo6UmVhZEtleTo6UmVhZEtleSgwKSkpIHsKKwkJCQlsYXN0IGlmICRrZXkgPX4gL1tcMDEyXDAxNV0vOyAjIFxuXHIKKwkJCQkkcmV0IC49ICRrZXk7CisJCQl9CisJCQlUZXJtOjpSZWFkS2V5OjpSZWFkTW9kZSgncmVzdG9yZScpOworCQkJcHJpbnQgU1RERVJSICJcbiI7CisJCQlTVERFUlItPmZsdXNoOworCQl9IGVsc2UgeworCQkJY2hvbXAoJHJldCA9IDxTVERJTj4pOworCQl9CisJfQorCXJldHVybiAkcmV0OworfQorCitzdWIgX3Byb21wdCB7CisJbXkgKCRhc2twYXNzLCAkcHJvbXB0KSA9IEBfOworCXJldHVybiB1bmxlc3MgbGVuZ3RoICRhc2twYXNzOworCSRwcm9tcHQgPX4gcy9cbi8gL2c7CisJbXkgJHJldDsKKwlvcGVuIG15ICRmaCwgIi18IiwgJGFza3Bhc3MsICRwcm9tcHQgb3IgcmV0dXJuOworCSRyZXQgPSA8JGZoPjsKKwkkcmV0ID1+IHMvW1wwMTVcMDEyXS8vZzsgIyBzdHJpcCBcclxuLCBjaG9tcCBkb2VzIG5vdCB3b3JrIG9uIGFsbCBzeXN0ZW1zIChpLmUuIHdpbmRvd3MpIGFzIGV4cGVjdGVkCisJY2xvc2UgKCRmaCk7CisJcmV0dXJuICRyZXQ7Cit9CisKKz1pdGVtIHJlcG9fcGF0aCAoKQorCitSZXR1cm4gcGF0aCB0byB0aGUgZ2l0IHJlcG9zaXRvcnkuIE11c3QgYmUgY2FsbGVkIG9uIGEgcmVwb3NpdG9yeSBpbnN0YW5jZS4KKworPWN1dAorCitzdWIgcmVwb19wYXRoIHsgJF9bMF0tPntvcHRzfS0+e1JlcG9zaXRvcnl9IH0KKworCis9aXRlbSB3Y19wYXRoICgpCisKK1JldHVybiBwYXRoIHRvIHRoZSB3b3JraW5nIGNvcHkuIE11c3QgYmUgY2FsbGVkIG9uIGEgcmVwb3NpdG9yeSBpbnN0YW5jZS4KKworPWN1dAorCitzdWIgd2NfcGF0aCB7ICRfWzBdLT57b3B0c30tPntXb3JraW5nQ29weX0gfQorCisKKz1pdGVtIHdjX3N1YmRpciAoKQorCitSZXR1cm4gcGF0aCB0byB0aGUgc3ViZGlyZWN0b3J5IGluc2lkZSBvZiBhIHdvcmtpbmcgY29weS4gTXVzdCBiZSBjYWxsZWQKK29uIGEgcmVwb3NpdG9yeSBpbnN0YW5jZS4KKworPWN1dAorCitzdWIgd2Nfc3ViZGlyIHsgJF9bMF0tPntvcHRzfS0+e1dvcmtpbmdTdWJkaXJ9IHx8PSAnJyB9CisKKworPWl0ZW0gd2NfY2hkaXIgKCBTVUJESVIgKQorCitDaGFuZ2UgdGhlIHdvcmtpbmcgY29weSBzdWJkaXJlY3RvcnkgdG8gd29yayB3aXRoaW4uIFRoZSBDPFNVQkRJUj4gaXMKK3JlbGF0aXZlIHRvIHRoZSB3b3JraW5nIGNvcHkgcm9vdCBkaXJlY3RvcnkgKG5vdCB0aGUgY3VycmVudCBzdWJkaXJlY3RvcnkpLgorTXVzdCBiZSBjYWxsZWQgb24gYSByZXBvc2l0b3J5IGluc3RhbmNlIGF0dGFjaGVkIHRvIGEgd29ya2luZyBjb3B5CithbmQgdGhlIGRpcmVjdG9yeSBtdXN0IGV4aXN0LgorCis9Y3V0CisKK3N1YiB3Y19jaGRpciB7CisJbXkgKCRzZWxmLCAkc3ViZGlyKSA9IEBfOworCSRzZWxmLT53Y19wYXRoKCkKKwkJb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgiYmFyZSByZXBvc2l0b3J5Iik7CisKKwktZCAkc2VsZi0+d2NfcGF0aCgpLicvJy4kc3ViZGlyCisJCW9yIHRocm93IEVycm9yOjpTaW1wbGUoInN1YmRpciBub3QgZm91bmQ6ICRzdWJkaXIgJCEiKTsKKwkjIE9mIGNvdXJzZSB3ZSB3aWxsIG5vdCAiaG9sZCIgdGhlIHN1YmRpcmVjdG9yeSBzbyBhbnlvbmUKKwkjIGNhbiBkZWxldGUgaXQgbm93IGFuZCB3ZSB3aWxsIG5ldmVyIGtub3cuIEJ1dCBhdCBsZWFzdCB3ZSB0cmllZC4KKworCSRzZWxmLT57b3B0c30tPntXb3JraW5nU3ViZGlyfSA9ICRzdWJkaXI7Cit9CisKKworPWl0ZW0gY29uZmlnICggVkFSSUFCTEUgKQorCitSZXRyaWV2ZSB0aGUgY29uZmlndXJhdGlvbiBDPFZBUklBQkxFPiBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgQzxjb25maWc+Citkb2VzLiBJbiBzY2FsYXIgY29udGV4dCByZXF1aXJlcyB0aGUgdmFyaWFibGUgdG8gYmUgc2V0IG9ubHkgb25lIHRpbWUKKyhleGNlcHRpb24gaXMgdGhyb3duIG90aGVyd2lzZSksIGluIGFycmF5IGNvbnRleHQgcmV0dXJucyBhbGxvd3MgdGhlCit2YXJpYWJsZSB0byBiZSBzZXQgbXVsdGlwbGUgdGltZXMgYW5kIHJldHVybnMgYWxsIHRoZSB2YWx1ZXMuCisKKz1jdXQKKworc3ViIGNvbmZpZyB7CisJcmV0dXJuIF9jb25maWdfY29tbW9uKHt9LCBAXyk7Cit9CisKKworPWl0ZW0gY29uZmlnX2Jvb2wgKCBWQVJJQUJMRSApCisKK1JldHJpZXZlIHRoZSBib29sIGNvbmZpZ3VyYXRpb24gQzxWQVJJQUJMRT4uIFRoZSByZXR1cm4gdmFsdWUKK2lzIHVzYWJsZSBhcyBhIGJvb2xlYW4gaW4gcGVybCAoYW5kIEM8dW5kZWY+IGlmIGl0J3Mgbm90IGRlZmluZWQsCitvZiBjb3Vyc2UpLgorCis9Y3V0CisKK3N1YiBjb25maWdfYm9vbCB7CisJbXkgJHZhbCA9IHNjYWxhciBfY29uZmlnX2NvbW1vbih7J2tpbmQnID0+ICctLWJvb2wnfSwgQF8pOworCisJIyBEbyBub3QgcmV3cml0ZSB0aGlzIGFzIHJldHVybiAoZGVmaW5lZCAkdmFsICYmICR2YWwgZXEgJ3RydWUnKQorCSMgYXMgc29tZSBjYWxsZXJzIGRvIGNhcmUgd2hhdCBraW5kIG9mIGZhbHNlaG9vZCB0aGV5IHJlY2VpdmUuCisJaWYgKCFkZWZpbmVkICR2YWwpIHsKKwkJcmV0dXJuIHVuZGVmOworCX0gZWxzZSB7CisJCXJldHVybiAkdmFsIGVxICd0cnVlJzsKKwl9Cit9CisKKworPWl0ZW0gY29uZmlnX3BhdGggKCBWQVJJQUJMRSApCisKK1JldHJpZXZlIHRoZSBwYXRoIGNvbmZpZ3VyYXRpb24gQzxWQVJJQUJMRT4uIFRoZSByZXR1cm4gdmFsdWUKK2lzIGFuIGV4cGFuZGVkIHBhdGggb3IgQzx1bmRlZj4gaWYgaXQncyBub3QgZGVmaW5lZC4KKworPWN1dAorCitzdWIgY29uZmlnX3BhdGggeworCXJldHVybiBfY29uZmlnX2NvbW1vbih7J2tpbmQnID0+ICctLXBhdGgnfSwgQF8pOworfQorCisKKz1pdGVtIGNvbmZpZ19pbnQgKCBWQVJJQUJMRSApCisKK1JldHJpZXZlIHRoZSBpbnRlZ2VyIGNvbmZpZ3VyYXRpb24gQzxWQVJJQUJMRT4uIFRoZSByZXR1cm4gdmFsdWUKK2lzIHNpbXBsZSBkZWNpbWFsIG51bWJlci4gIEFuIG9wdGlvbmFsIHZhbHVlIHN1ZmZpeCBvZiAnaycsICdtJywKK29yICdnJyBpbiB0aGUgY29uZmlnIGZpbGUgd2lsbCBjYXVzZSB0aGUgdmFsdWUgdG8gYmUgbXVsdGlwbGllZAorYnkgMTAyNCwgMTA0ODU3NiAoMTAyNF4yKSwgb3IgMTA3Mzc0MTgyNCAoMTAyNF4zKSBwcmlvciB0byBvdXRwdXQuCitJdCB3b3VsZCByZXR1cm4gQzx1bmRlZj4gaWYgY29uZmlndXJhdGlvbiB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZC4KKworPWN1dAorCitzdWIgY29uZmlnX2ludCB7CisJcmV0dXJuIHNjYWxhciBfY29uZmlnX2NvbW1vbih7J2tpbmQnID0+ICctLWludCd9LCBAXyk7Cit9CisKKyMgQ29tbW9uIHN1YnJvdXRpbmUgdG8gaW1wbGVtZW50IGJ1bGsgb2Ygd2hhdCB0aGUgY29uZmlnKiBmYW1pbHkgb2YgbWV0aG9kcworIyBkby4gVGhpcyBjdXJyZW50bHkgd3JhcHMgY29tbWFuZCgnY29uZmlnJykgc28gaXQgaXMgbm90IHNvIGZhc3QuCitzdWIgX2NvbmZpZ19jb21tb24geworCW15ICgkb3B0cykgPSBzaGlmdCBAXzsKKwlteSAoJHNlbGYsICR2YXIpID0gX21heWJlX3NlbGYoQF8pOworCisJdHJ5IHsKKwkJbXkgQGNtZCA9ICgnY29uZmlnJywgJG9wdHMtPnsna2luZCd9ID8gJG9wdHMtPnsna2luZCd9IDogKCkpOworCQl1bnNoaWZ0IEBjbWQsICRzZWxmIGlmICRzZWxmOworCQlpZiAod2FudGFycmF5KSB7CisJCQlyZXR1cm4gY29tbWFuZChAY21kLCAnLS1nZXQtYWxsJywgJHZhcik7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gY29tbWFuZF9vbmVsaW5lKEBjbWQsICctLWdldCcsICR2YXIpOworCQl9CisJfSBjYXRjaCBHaXQ6OkVycm9yOjpDb21tYW5kIHdpdGggeworCQlteSAkRSA9IHNoaWZ0OworCQlpZiAoJEUtPnZhbHVlKCkgPT0gMSkgeworCQkJIyBLZXkgbm90IGZvdW5kLgorCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJdGhyb3cgJEU7CisJCX0KKwl9OworfQorCis9aXRlbSBnZXRfY29sb3Jib29sICggTkFNRSApCisKK0ZpbmRzIGlmIGNvbG9yIHNob3VsZCBiZSB1c2VkIGZvciBOQU1FZCBvcGVyYXRpb24gZnJvbSB0aGUgY29uZmlndXJhdGlvbiwKK2FuZCByZXR1cm5zIGJvb2xlYW4gKHRydWUgZm9yICJ1c2UgY29sb3IiLCBmYWxzZSBmb3IgImRvIG5vdCB1c2UgY29sb3IiKS4KKworPWN1dAorCitzdWIgZ2V0X2NvbG9yYm9vbCB7CisJbXkgKCRzZWxmLCAkdmFyKSA9IEBfOworCW15ICRzdGRvdXRfdG9fdHR5ID0gKC10IFNURE9VVCkgPyAidHJ1ZSIgOiAiZmFsc2UiOworCW15ICR1c2VfY29sb3IgPSAkc2VsZi0+Y29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQtY29sb3Jib29sJywKKwkJCQkJICAgICAgICR2YXIsICRzdGRvdXRfdG9fdHR5KTsKKwlyZXR1cm4gKCR1c2VfY29sb3IgZXEgJ3RydWUnKTsKK30KKworPWl0ZW0gZ2V0X2NvbG9yICggU0xPVCwgQ09MT1IgKQorCitGaW5kcyBjb2xvciBmb3IgU0xPVCBmcm9tIHRoZSBjb25maWd1cmF0aW9uLCB3aGlsZSBkZWZhdWx0aW5nIHRvIENPTE9SLAorYW5kIHJldHVybnMgdGhlIEFOU0kgY29sb3IgZXNjYXBlIHNlcXVlbmNlOgorCisJcHJpbnQgJHJlcG8tPmdldF9jb2xvcigiY29sb3IuaW50ZXJhY3RpdmUucHJvbXB0IiwgInVuZGVybGluZSBibHVlIHdoaXRlIik7CisJcHJpbnQgInNvbWUgdGV4dCI7CisJcHJpbnQgJHJlcG8tPmdldF9jb2xvcigiIiwgIm5vcm1hbCIpOworCis9Y3V0CisKK3N1YiBnZXRfY29sb3IgeworCW15ICgkc2VsZiwgJHNsb3QsICRkZWZhdWx0KSA9IEBfOworCW15ICRjb2xvciA9ICRzZWxmLT5jb21tYW5kX29uZWxpbmUoJ2NvbmZpZycsICctLWdldC1jb2xvcicsICRzbG90LCAkZGVmYXVsdCk7CisJaWYgKCFkZWZpbmVkICRjb2xvcikgeworCQkkY29sb3IgPSAiIjsKKwl9CisJcmV0dXJuICRjb2xvcjsKK30KKworPWl0ZW0gcmVtb3RlX3JlZnMgKCBSRVBPU0lUT1JZIFssIEdST1VQUyBbLCBSRUZHTE9CUyBdIF0gKQorCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBoYXNocmVmIG9mIHJlZnMgc3RvcmVkIGluIGEgZ2l2ZW4gcmVtb3RlIHJlcG9zaXRvcnkuCitUaGUgaGFzaCBpcyBpbiB0aGUgZm9ybWF0IEM8cmVmbmFtZSA9XD4gaGFzaD4uIEZvciB0YWdzLCB0aGUgQzxyZWZuYW1lPiBlbnRyeQorY29udGFpbnMgdGhlIHRhZyBvYmplY3Qgd2hpbGUgYSBDPHJlZm5hbWVee30+IGVudHJ5IGdpdmVzIHRoZSB0YWdnZWQgb2JqZWN0cy4KKworQzxSRVBPU0lUT1JZPiBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGUgYXBwcm9wcmlhdGUgQzxnaXQtbHMtcmVtb3RlPgorYXJndW1lbnQ7IGVpdGhlciBhIFVSTCBvciBhIHJlbW90ZSBuYW1lIChpZiBjYWxsZWQgb24gYSByZXBvc2l0b3J5IGluc3RhbmNlKS4KK0M8R1JPVVBTPiBpcyBhbiBvcHRpb25hbCBhcnJheXJlZiB0aGF0IGNhbiBjb250YWluICd0YWdzJyB0byByZXR1cm4gYWxsIHRoZQordGFncyBhbmQvb3IgJ2hlYWRzJyB0byByZXR1cm4gYWxsIHRoZSBoZWFkcy4gQzxSRUZHTE9CPiBpcyBhbiBvcHRpb25hbCBhcnJheQorb2Ygc3RyaW5ncyBjb250YWluaW5nIGEgc2hlbGwtbGlrZSBnbG9iIHRvIGZ1cnRoZXIgbGltaXQgdGhlIHJlZnMgcmV0dXJuZWQgaW4KK3RoZSBoYXNoOyB0aGUgbWVhbmluZyBpcyBhZ2FpbiB0aGUgc2FtZSBhcyB0aGUgYXBwcm9wcmlhdGUgQzxnaXQtbHMtcmVtb3RlPgorYXJndW1lbnQuCisKK1RoaXMgZnVuY3Rpb24gbWF5IG9yIG1heSBub3QgYmUgY2FsbGVkIG9uIGEgcmVwb3NpdG9yeSBpbnN0YW5jZS4gSW4gdGhlIGZvcm1lcgorY2FzZSwgcmVtb3RlIG5hbWVzIGFzIGRlZmluZWQgaW4gdGhlIHJlcG9zaXRvcnkgYXJlIHJlY29nbml6ZWQgYXMgcmVwb3NpdG9yeQorc3BlY2lmaWVycy4KKworPWN1dAorCitzdWIgcmVtb3RlX3JlZnMgeworCW15ICgkc2VsZiwgJHJlcG8sICRncm91cHMsICRyZWZnbG9icykgPSBfbWF5YmVfc2VsZihAXyk7CisJbXkgQGFyZ3M7CisJaWYgKHJlZiAkZ3JvdXBzIGVxICdBUlJBWScpIHsKKwkJZm9yZWFjaCAoQCRncm91cHMpIHsKKwkJCWlmICgkXyBlcSAnaGVhZHMnKSB7CisJCQkJcHVzaCAoQGFyZ3MsICctLWhlYWRzJyk7CisJCQl9IGVsc2lmICgkXyBlcSAndGFncycpIHsKKwkJCQlwdXNoIChAYXJncywgJy0tdGFncycpOworCQkJfSBlbHNlIHsKKwkJCQkjIElnbm9yZSB1bmtub3duIGdyb3VwcyBmb3IgZnV0dXJlCisJCQkJIyBjb21wYXRpYmlsaXR5CisJCQl9CisJCX0KKwl9CisJcHVzaCAoQGFyZ3MsICRyZXBvKTsKKwlpZiAocmVmICRyZWZnbG9icyBlcSAnQVJSQVknKSB7CisJCXB1c2ggKEBhcmdzLCBAJHJlZmdsb2JzKTsKKwl9CisKKwlteSBAc2VsZiA9ICRzZWxmID8gKCRzZWxmKSA6ICgpOyAjIFVsdHJhIHRyaWNrZXJ5CisJbXkgKCRmaCwgJGN0eCkgPSBHaXQ6OmNvbW1hbmRfb3V0cHV0X3BpcGUoQHNlbGYsICdscy1yZW1vdGUnLCBAYXJncyk7CisJbXkgJXJlZnM7CisJd2hpbGUgKDwkZmg+KSB7CisJCWNob21wOworCQlteSAoJGhhc2gsICRyZWYpID0gc3BsaXQoL1x0LywgJF8sIDIpOworCQkkcmVmc3skcmVmfSA9ICRoYXNoOworCX0KKwlHaXQ6OmNvbW1hbmRfY2xvc2VfcGlwZShAc2VsZiwgJGZoLCAkY3R4KTsKKwlyZXR1cm4gXCVyZWZzOworfQorCisKKz1pdGVtIGlkZW50ICggVFlQRSB8IElERU5UU1RSICkKKworPWl0ZW0gaWRlbnRfcGVyc29uICggVFlQRSB8IElERU5UU1RSIHwgSURFTlRBUlJBWSApCisKK1RoaXMgc3VpdGUgb2YgZnVuY3Rpb25zIHJldHJpZXZlcyBhbmQgcGFyc2VzIGlkZW50IGluZm9ybWF0aW9uLCBhcyBzdG9yZWQKK2luIHRoZSBjb21taXQgYW5kIHRhZyBvYmplY3RzIG9yIHByb2R1Y2VkIGJ5IEM8dmFyIEdJVF90eXBlX0lERU5UPiAodGh1cworQzxUWVBFPiBjYW4gYmUgZWl0aGVyIEk8YXV0aG9yPiBvciBJPGNvbW1pdHRlcj47IGNhc2UgaXMgaW5zaWduaWZpY2FudCkuCisKK1RoZSBDPGlkZW50PiBtZXRob2QgcmV0cmlldmVzIHRoZSBpZGVudCBpbmZvcm1hdGlvbiBmcm9tIEM8Z2l0IHZhcj4KK2FuZCBlaXRoZXIgcmV0dXJucyBpdCBhcyBhIHNjYWxhciBzdHJpbmcgb3IgYXMgYW4gYXJyYXkgd2l0aCB0aGUgZmllbGRzIHBhcnNlZC4KK0FsdGVybmF0aXZlbHksIGl0IGNhbiB0YWtlIGEgcHJlcGFyZWQgaWRlbnQgc3RyaW5nIChlLmcuIGZyb20gdGhlIGNvbW1pdAorb2JqZWN0KSBhbmQganVzdCBwYXJzZSBpdC4KKworQzxpZGVudF9wZXJzb24+IHJldHVybnMgdGhlIHBlcnNvbiBwYXJ0IG9mIHRoZSBpZGVudCAtIG5hbWUgYW5kIGVtYWlsOworaXQgY2FuIHRha2UgdGhlIHNhbWUgYXJndW1lbnRzIGFzIEM8aWRlbnQ+IG9yIHRoZSBhcnJheSByZXR1cm5lZCBieSBDPGlkZW50Pi4KKworVGhlIHN5bm9wc2lzIGlzIGxpa2U6CisKKwlteSAoJG5hbWUsICRlbWFpbCwgJHRpbWVfdHopID0gaWRlbnQoJ2F1dGhvcicpOworCSIkbmFtZSA8JGVtYWlsPiIgZXEgaWRlbnRfcGVyc29uKCdhdXRob3InKTsKKwkiJG5hbWUgPCRlbWFpbD4iIGVxIGlkZW50X3BlcnNvbigkbmFtZSk7CisJJHRpbWVfdHogPX4gL15cZCsgWystXVxkezR9JC87CisKKz1jdXQKKworc3ViIGlkZW50IHsKKwlteSAoJHNlbGYsICR0eXBlKSA9IF9tYXliZV9zZWxmKEBfKTsKKwlteSAkaWRlbnRzdHI7CisJaWYgKGxjICR0eXBlIGVxIGxjICdjb21taXR0ZXInIG9yIGxjICR0eXBlIGVxIGxjICdhdXRob3InKSB7CisJCW15IEBjbWQgPSAoJ3ZhcicsICdHSVRfJy51YygkdHlwZSkuJ19JREVOVCcpOworCQl1bnNoaWZ0IEBjbWQsICRzZWxmIGlmICRzZWxmOworCQkkaWRlbnRzdHIgPSBjb21tYW5kX29uZWxpbmUoQGNtZCk7CisJfSBlbHNlIHsKKwkJJGlkZW50c3RyID0gJHR5cGU7CisJfQorCWlmICh3YW50YXJyYXkpIHsKKwkJcmV0dXJuICRpZGVudHN0ciA9fiAvXiguKikgPCguKik+IChcZCsgWystXVxkezR9KSQvOworCX0gZWxzZSB7CisJCXJldHVybiAkaWRlbnRzdHI7CisJfQorfQorCitzdWIgaWRlbnRfcGVyc29uIHsKKwlteSAoJHNlbGYsIEBpZGVudCkgPSBfbWF5YmVfc2VsZihAXyk7CisJJCNpZGVudCA9PSAwIGFuZCBAaWRlbnQgPSAkc2VsZiA/ICRzZWxmLT5pZGVudCgkaWRlbnRbMF0pIDogaWRlbnQoJGlkZW50WzBdKTsKKwlyZXR1cm4gIiRpZGVudFswXSA8JGlkZW50WzFdPiI7Cit9CisKKz1pdGVtIHBhcnNlX21haWxib3hlcworCitSZXR1cm4gYW4gYXJyYXkgb2YgbWFpbGJveGVzIGV4dHJhY3RlZCBmcm9tIGEgc3RyaW5nLgorCis9Y3V0CisKK3N1YiBwYXJzZV9tYWlsYm94ZXMgeworCW15ICRyZV9jb21tZW50ID0gcXIvXCgoPzpbXildKilcKS87CisJbXkgJHJlX3F1b3RlID0gcXIvIig/OlteXCJcXF18XFwuKSoiLzsKKwlteSAkcmVfd29yZCA9IHFyLyg/OlteXVsiXHMoKTw+OjtAXFwsLl18XFwuKSsvOworCisJIyBkaXZpZGUgdGhlIHN0cmluZyBpbiB0b2tlbnMgb2YgdGhlIGFib3ZlIGZvcm0KKwlteSAkcmVfdG9rZW4gPSBxci8oPzokcmVfcXVvdGV8JHJlX3dvcmR8JHJlX2NvbW1lbnR8XFMpLzsKKwlteSBAdG9rZW5zID0gbWFwIHsgJF8gPX4gL1xzKigkcmVfdG9rZW4pXHMqL2cgfSBAXzsKKworCSMgYWRkIGEgZGVsaW1pdGVyIHRvIHNpbXBsaWZ5IHRyZWF0bWVudCBmb3IgdGhlIGxhc3QgbWFpbGJveAorCXB1c2ggQHRva2VucywgIiwiOworCisJbXkgKEBhZGRyX2xpc3QsIEBwaHJhc2UsIEBhZGRyZXNzLCBAY29tbWVudCwgQGJ1ZmZlcikgPSAoKTsKKwlmb3JlYWNoIG15ICR0b2tlbiAoQHRva2VucykgeworCQlpZiAoJHRva2VuID1+IC9eWyw7XSQvKSB7CisJCQkjIGlmIGJ1ZmZlciBzdGlsbCBjb250YWlucyB1bmRldGVybWluYXRlZCBzdHJpbmdzCisJCQkjIGFwcGVuZCBpdCBhdCB0aGUgZW5kIG9mIEBhZGRyZXNzIG9yIEBwaHJhc2UKKwkJCWlmIChAYWRkcmVzcykgeworCQkJCXB1c2ggQGFkZHJlc3MsIEBidWZmZXI7CisJCQl9IGVsc2UgeworCQkJCXB1c2ggQHBocmFzZSwgQGJ1ZmZlcjsKKwkJCX0KKworCQkJbXkgJHN0cl9waHJhc2UgPSBqb2luICcgJywgQHBocmFzZTsKKwkJCW15ICRzdHJfYWRkcmVzcyA9IGpvaW4gJycsIEBhZGRyZXNzOworCQkJbXkgJHN0cl9jb21tZW50ID0gam9pbiAnICcsIEBjb21tZW50OworCisJCQkjIHF1b3RlIGFyZSBuZWNlc3NhcnkgaWYgcGhyYXNlIGNvbnRhaW5zCisJCQkjIHNwZWNpYWwgY2hhcmFjdGVycworCQkJaWYgKCRzdHJfcGhyYXNlID1+IC9bXVsoKTw+OjtAXFwsLlwwMDAtXDAzN1wxNzddLykgeworCQkJCSRzdHJfcGhyYXNlID1+IHMvKF58W15cXF0pIi8kMS9nOworCQkJCSRzdHJfcGhyYXNlID0gcXFbIiRzdHJfcGhyYXNlIl07CisJCQl9CisKKwkJCSMgYWRkICI8PiIgYXJvdW5kIHRoZSBhZGRyZXNzIGlmIG5lY2Vzc2FyeQorCQkJaWYgKCRzdHJfYWRkcmVzcyBuZSAiIiAmJiAkc3RyX3BocmFzZSBuZSAiIikgeworCQkJCSRzdHJfYWRkcmVzcyA9IHFxWzwkc3RyX2FkZHJlc3M+XTsKKwkJCX0KKworCQkJbXkgJHN0cl9tYWlsYm94ID0gIiRzdHJfcGhyYXNlICRzdHJfYWRkcmVzcyAkc3RyX2NvbW1lbnQiOworCQkJJHN0cl9tYWlsYm94ID1+IHMvXlxzKnxccyokLy9nOworCQkJcHVzaCBAYWRkcl9saXN0LCAkc3RyX21haWxib3ggaWYgKCRzdHJfbWFpbGJveCk7CisKKwkJCUBwaHJhc2UgPSBAYWRkcmVzcyA9IEBjb21tZW50ID0gQGJ1ZmZlciA9ICgpOworCQl9IGVsc2lmICgkdG9rZW4gPX4gL15cKC8pIHsKKwkJCXB1c2ggQGNvbW1lbnQsICR0b2tlbjsKKwkJfSBlbHNpZiAoJHRva2VuIGVxICI8IikgeworCQkJcHVzaCBAcGhyYXNlLCAoc3BsaWNlIEBhZGRyZXNzKSwgKHNwbGljZSBAYnVmZmVyKTsKKwkJfSBlbHNpZiAoJHRva2VuIGVxICI+IikgeworCQkJcHVzaCBAYWRkcmVzcywgKHNwbGljZSBAYnVmZmVyKTsKKwkJfSBlbHNpZiAoJHRva2VuIGVxICJAIikgeworCQkJcHVzaCBAYWRkcmVzcywgKHNwbGljZSBAYnVmZmVyKSwgIkAiOworCQl9IGVsc2lmICgkdG9rZW4gZXEgIi4iKSB7CisJCQlwdXNoIEBhZGRyZXNzLCAoc3BsaWNlIEBidWZmZXIpLCAiLiI7CisJCX0gZWxzZSB7CisJCQlwdXNoIEBidWZmZXIsICR0b2tlbjsKKwkJfQorCX0KKworCXJldHVybiBAYWRkcl9saXN0OworfQorCis9aXRlbSBoYXNoX29iamVjdCAoIFRZUEUsIEZJTEVOQU1FICkKKworQ29tcHV0ZSB0aGUgU0hBMSBvYmplY3QgaWQgb2YgdGhlIGdpdmVuIEM8RklMRU5BTUU+IGNvbnNpZGVyaW5nIGl0IGlzCitvZiB0aGUgQzxUWVBFPiBvYmplY3QgdHlwZSAoQzxibG9iPiwgQzxjb21taXQ+LCBDPHRyZWU+KS4KKworVGhlIG1ldGhvZCBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYW55IGluc3RhbmNlIG9yIG9uIGEgc3BlY2lmaWVkIEdpdCByZXBvc2l0b3J5LAoraXQgbWFrZXMgemVybyBkaWZmZXJlbmNlLgorCitUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgU0hBMSBoYXNoLgorCis9Y3V0CisKKyMgVE9ETzogU3VwcG9ydCBmb3IgcGFzc2luZyBGSUxFSEFORExFIGluc3RlYWQgb2YgRklMRU5BTUUKK3N1YiBoYXNoX29iamVjdCB7CisJbXkgKCRzZWxmLCAkdHlwZSwgJGZpbGUpID0gX21heWJlX3NlbGYoQF8pOworCWNvbW1hbmRfb25lbGluZSgnaGFzaC1vYmplY3QnLCAnLXQnLCAkdHlwZSwgJGZpbGUpOworfQorCisKKz1pdGVtIGhhc2hfYW5kX2luc2VydF9vYmplY3QgKCBGSUxFTkFNRSApCisKK0NvbXB1dGUgdGhlIFNIQTEgb2JqZWN0IGlkIG9mIHRoZSBnaXZlbiBDPEZJTEVOQU1FPiBhbmQgYWRkIHRoZSBvYmplY3QgdG8gdGhlCitvYmplY3QgZGF0YWJhc2UuCisKK1RoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBTSEExIGhhc2guCisKKz1jdXQKKworIyBUT0RPOiBTdXBwb3J0IGZvciBwYXNzaW5nIEZJTEVIQU5ETEUgaW5zdGVhZCBvZiBGSUxFTkFNRQorc3ViIGhhc2hfYW5kX2luc2VydF9vYmplY3QgeworCW15ICgkc2VsZiwgJGZpbGVuYW1lKSA9IEBfOworCisJY2FycCAiQmFkIGZpbGVuYW1lIFwiJGZpbGVuYW1lXCIiIGlmICRmaWxlbmFtZSA9fiAvW1xyXG5dLzsKKworCSRzZWxmLT5fb3Blbl9oYXNoX2FuZF9pbnNlcnRfb2JqZWN0X2lmX25lZWRlZCgpOworCW15ICgkaW4sICRvdXQpID0gKCRzZWxmLT57aGFzaF9vYmplY3RfaW59LCAkc2VsZi0+e2hhc2hfb2JqZWN0X291dH0pOworCisJdW5sZXNzIChwcmludCAkb3V0ICRmaWxlbmFtZSwgIlxuIikgeworCQkkc2VsZi0+X2Nsb3NlX2hhc2hfYW5kX2luc2VydF9vYmplY3QoKTsKKwkJdGhyb3cgRXJyb3I6OlNpbXBsZSgib3V0IHBpcGUgd2VudCBiYWQiKTsKKwl9CisKKwljaG9tcChteSAkaGFzaCA9IDwkaW4+KTsKKwl1bmxlc3MgKGRlZmluZWQoJGhhc2gpKSB7CisJCSRzZWxmLT5fY2xvc2VfaGFzaF9hbmRfaW5zZXJ0X29iamVjdCgpOworCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJpbiBwaXBlIHdlbnQgYmFkIik7CisJfQorCisJcmV0dXJuICRoYXNoOworfQorCitzdWIgX29wZW5faGFzaF9hbmRfaW5zZXJ0X29iamVjdF9pZl9uZWVkZWQgeworCW15ICgkc2VsZikgPSBAXzsKKworCXJldHVybiBpZiBkZWZpbmVkKCRzZWxmLT57aGFzaF9vYmplY3RfcGlkfSk7CisKKwkoJHNlbGYtPntoYXNoX29iamVjdF9waWR9LCAkc2VsZi0+e2hhc2hfb2JqZWN0X2lufSwKKwkgJHNlbGYtPntoYXNoX29iamVjdF9vdXR9LCAkc2VsZi0+e2hhc2hfb2JqZWN0X2N0eH0pID0KKwkJJHNlbGYtPmNvbW1hbmRfYmlkaV9waXBlKHF3KGhhc2gtb2JqZWN0IC13IC0tc3RkaW4tcGF0aHMgLS1uby1maWx0ZXJzKSk7Cit9CisKK3N1YiBfY2xvc2VfaGFzaF9hbmRfaW5zZXJ0X29iamVjdCB7CisJbXkgKCRzZWxmKSA9IEBfOworCisJcmV0dXJuIHVubGVzcyBkZWZpbmVkKCRzZWxmLT57aGFzaF9vYmplY3RfcGlkfSk7CisKKwlteSBAdmFycyA9IG1hcCB7ICdoYXNoX29iamVjdF8nIC4gJF8gfSBxdyhwaWQgaW4gb3V0IGN0eCk7CisKKwljb21tYW5kX2Nsb3NlX2JpZGlfcGlwZShAJHNlbGZ7QHZhcnN9KTsKKwlkZWxldGUgQCRzZWxme0B2YXJzfTsKK30KKworPWl0ZW0gY2F0X2Jsb2IgKCBTSEExLCBGSUxFSEFORExFICkKKworUHJpbnRzIHRoZSBjb250ZW50cyBvZiB0aGUgYmxvYiBpZGVudGlmaWVkIGJ5IEM8U0hBMT4gdG8gQzxGSUxFSEFORExFPiBhbmQKK3JldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBwcmludGVkLgorCis9Y3V0CisKK3N1YiBjYXRfYmxvYiB7CisJbXkgKCRzZWxmLCAkc2hhMSwgJGZoKSA9IEBfOworCisJJHNlbGYtPl9vcGVuX2NhdF9ibG9iX2lmX25lZWRlZCgpOworCW15ICgkaW4sICRvdXQpID0gKCRzZWxmLT57Y2F0X2Jsb2JfaW59LCAkc2VsZi0+e2NhdF9ibG9iX291dH0pOworCisJdW5sZXNzIChwcmludCAkb3V0ICRzaGExLCAiXG4iKSB7CisJCSRzZWxmLT5fY2xvc2VfY2F0X2Jsb2IoKTsKKwkJdGhyb3cgRXJyb3I6OlNpbXBsZSgib3V0IHBpcGUgd2VudCBiYWQiKTsKKwl9CisKKwlteSAkZGVzY3JpcHRpb24gPSA8JGluPjsKKwlpZiAoJGRlc2NyaXB0aW9uID1+IC8gbWlzc2luZyQvKSB7CisJCWNhcnAgIiRzaGExIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIHJlcG9zaXRvcnkiOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCRkZXNjcmlwdGlvbiAhfiAvXlswLTlhLWZBLUZdezQwfSBcUysgKFxkKykkLykgeworCQljYXJwICJVbmV4cGVjdGVkIHJlc3VsdCByZXR1cm5lZCBmcm9tIGdpdCBjYXQtZmlsZSI7CisJCXJldHVybiAtMTsKKwl9CisKKwlteSAkc2l6ZSA9ICQxOworCisJbXkgJGJsb2I7CisJbXkgJGJ5dGVzTGVmdCA9ICRzaXplOworCisJd2hpbGUgKDEpIHsKKwkJbGFzdCB1bmxlc3MgJGJ5dGVzTGVmdDsKKworCQlteSAkYnl0ZXNUb1JlYWQgPSAkYnl0ZXNMZWZ0IDwgMTAyNCA/ICRieXRlc0xlZnQgOiAxMDI0OworCQlteSAkcmVhZCA9IHJlYWQoJGluLCAkYmxvYiwgJGJ5dGVzVG9SZWFkKTsKKwkJdW5sZXNzIChkZWZpbmVkKCRyZWFkKSkgeworCQkJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiaW4gcGlwZSB3ZW50IGJhZCIpOworCQl9CisJCXVubGVzcyAocHJpbnQgJGZoICRibG9iKSB7CisJCQkkc2VsZi0+X2Nsb3NlX2NhdF9ibG9iKCk7CisJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJjb3VsZG4ndCB3cml0ZSB0byBwYXNzZWQgaW4gZmlsZWhhbmRsZSIpOworCQl9CisJCSRieXRlc0xlZnQgLT0gJHJlYWQ7CisJfQorCisJIyBTa2lwIHBhc3QgdGhlIHRyYWlsaW5nIG5ld2xpbmUuCisJbXkgJG5ld2xpbmU7CisJbXkgJHJlYWQgPSByZWFkKCRpbiwgJG5ld2xpbmUsIDEpOworCXVubGVzcyAoZGVmaW5lZCgkcmVhZCkpIHsKKwkJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJpbiBwaXBlIHdlbnQgYmFkIik7CisJfQorCXVubGVzcyAoJHJlYWQgPT0gMSAmJiAkbmV3bGluZSBlcSAiXG4iKSB7CisJCSRzZWxmLT5fY2xvc2VfY2F0X2Jsb2IoKTsKKwkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiZGlkbid0IGZpbmQgbmV3bGluZSBhZnRlciBibG9iIik7CisJfQorCisJcmV0dXJuICRzaXplOworfQorCitzdWIgX29wZW5fY2F0X2Jsb2JfaWZfbmVlZGVkIHsKKwlteSAoJHNlbGYpID0gQF87CisKKwlyZXR1cm4gaWYgZGVmaW5lZCgkc2VsZi0+e2NhdF9ibG9iX3BpZH0pOworCisJKCRzZWxmLT57Y2F0X2Jsb2JfcGlkfSwgJHNlbGYtPntjYXRfYmxvYl9pbn0sCisJICRzZWxmLT57Y2F0X2Jsb2Jfb3V0fSwgJHNlbGYtPntjYXRfYmxvYl9jdHh9KSA9CisJCSRzZWxmLT5jb21tYW5kX2JpZGlfcGlwZShxdyhjYXQtZmlsZSAtLWJhdGNoKSk7Cit9CisKK3N1YiBfY2xvc2VfY2F0X2Jsb2IgeworCW15ICgkc2VsZikgPSBAXzsKKworCXJldHVybiB1bmxlc3MgZGVmaW5lZCgkc2VsZi0+e2NhdF9ibG9iX3BpZH0pOworCisJbXkgQHZhcnMgPSBtYXAgeyAnY2F0X2Jsb2JfJyAuICRfIH0gcXcocGlkIGluIG91dCBjdHgpOworCisJY29tbWFuZF9jbG9zZV9iaWRpX3BpcGUoQCRzZWxme0B2YXJzfSk7CisJZGVsZXRlIEAkc2VsZntAdmFyc307Cit9CisKKworPWl0ZW0gY3JlZGVudGlhbF9yZWFkKCBGSUxFSEFORExFICkKKworUmVhZHMgY3JlZGVudGlhbCBrZXktdmFsdWUgcGFpcnMgZnJvbSBDPEZJTEVIQU5ETEU+LiAgUmVhZGluZyBzdG9wcyBhdCBFT0Ygb3IKK3doZW4gYW4gZW1wdHkgbGluZSBpcyBlbmNvdW50ZXJlZC4gIEVhY2ggbGluZSBtdXN0IGJlIG9mIHRoZSBmb3JtIEM8a2V5PXZhbHVlPgord2l0aCBhIG5vbi1lbXB0eSBrZXkuICBGdW5jdGlvbiByZXR1cm5zIGhhc2ggd2l0aCBhbGwgcmVhZCB2YWx1ZXMuICBBbnkgd2hpdGUKK3NwYWNlIChvdGhlciB0aGFuIG5ldy1saW5lIGNoYXJhY3RlcikgaXMgcHJlc2VydmVkLgorCis9Y3V0CisKK3N1YiBjcmVkZW50aWFsX3JlYWQgeworCW15ICgkc2VsZiwgJHJlYWRlcikgPSBfbWF5YmVfc2VsZihAXyk7CisJbXkgJWNyZWRlbnRpYWw7CisJd2hpbGUgKDwkcmVhZGVyPikgeworCQljaG9tcDsKKwkJaWYgKCRfIGVxICcnKSB7CisJCQlsYXN0OworCQl9IGVsc2lmICghL14oW149XSspPSguKikkLykgeworCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgidW5hYmxlIHRvIHBhcnNlIGdpdCBjcmVkZW50aWFsIGRhdGE6XG4kXyIpOworCQl9CisJCSRjcmVkZW50aWFseyQxfSA9ICQyOworCX0KKwlyZXR1cm4gJWNyZWRlbnRpYWw7Cit9CisKKz1pdGVtIGNyZWRlbnRpYWxfd3JpdGUoIEZJTEVIQU5ETEUsIENSRURFTlRJQUxfSEFTSFJFRiApCisKK1dyaXRlcyBjcmVkZW50aWFsIGtleS12YWx1ZSBwYWlycyBmcm9tIGhhc2ggcmVmZXJlbmNlZCBieQorQzxDUkVERU5USUFMX0hBU0hSRUY+IHRvIEM8RklMRUhBTkRMRT4uICBLZXlzIGFuZCB2YWx1ZXMgY2Fubm90IGNvbnRhaW4KK25ldy1saW5lcyBvciBOVUwgYnl0ZXMgY2hhcmFjdGVycywgYW5kIGtleSBjYW5ub3QgY29udGFpbiBlcXVhbCBzaWducyBub3IgYmUKK2VtcHR5IChpZiB0aGV5IGRvIEVycm9yOjpTaW1wbGUgaXMgdGhyb3duKS4gIEFueSB3aGl0ZSBzcGFjZSBpcyBwcmVzZXJ2ZWQuICBJZgordmFsdWUgZm9yIGEga2V5IGlzIEM8dW5kZWY+LCBpdCB3aWxsIGJlIHNraXBwZWQuCisKK0lmIEM8J3VybCc+IGtleSBleGlzdHMgaXQgd2lsbCBiZSB3cml0dGVuIGZpcnN0LiAgKEFsbCB0aGUgb3RoZXIga2V5LXZhbHVlCitwYWlycyBhcmUgd3JpdHRlbiBpbiBzb3J0ZWQgb3JkZXIgYnV0IHlvdSBzaG91bGQgbm90IGRlcGVuZCBvbiB0aGF0KS4gIE9uY2UKK2FsbCBsaW5lcyBhcmUgd3JpdHRlbiwgYW4gZW1wdHkgbGluZSBpcyBwcmludGVkLgorCis9Y3V0CisKK3N1YiBjcmVkZW50aWFsX3dyaXRlIHsKKwlteSAoJHNlbGYsICR3cml0ZXIsICRjcmVkZW50aWFsKSA9IF9tYXliZV9zZWxmKEBfKTsKKwlteSAoJGtleSwgJHZhbHVlKTsKKworCSMgQ2hlY2sgaWYgJGNyZWRlbnRpYWwgaXMgdmFsaWQgcHJpb3IgdG8gd3JpdGluZyBhbnl0aGluZworCXdoaWxlICgoJGtleSwgJHZhbHVlKSA9IGVhY2ggJSRjcmVkZW50aWFsKSB7CisJCWlmICghZGVmaW5lZCAka2V5IHx8ICFsZW5ndGggJGtleSkgeworCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgiY3JlZGVudGlhbCBrZXkgZW1wdHkgb3IgdW5kZWZpbmVkIik7CisJCX0gZWxzaWYgKCRrZXkgPX4gL1s9XG5cMF0vKSB7CisJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJjcmVkZW50aWFsIGtleSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICRrZXkiKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkdmFsdWUgJiYgJHZhbHVlID1+IC9bXG5cMF0vKSB7CisJCQl0aHJvdyBFcnJvcjo6U2ltcGxlKCJjcmVkZW50aWFsIHZhbHVlIGZvciBrZXk9JGtleSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR2YWx1ZSIpOworCQl9CisJfQorCisJZm9yICRrZXkgKHNvcnQgeworCQkjIHVybCBvdmVyd3JpdGVzIG90aGVyIGZpZWxkcywgc28gaXQgbXVzdCBjb21lIGZpcnN0CisJCXJldHVybiAtMSBpZiAkYSBlcSAndXJsJzsKKwkJcmV0dXJuICAxIGlmICRiIGVxICd1cmwnOworCQlyZXR1cm4gJGEgY21wICRiOworCX0ga2V5cyAlJGNyZWRlbnRpYWwpIHsKKwkJaWYgKGRlZmluZWQgJGNyZWRlbnRpYWwtPnska2V5fSkgeworCQkJcHJpbnQgJHdyaXRlciAka2V5LCAnPScsICRjcmVkZW50aWFsLT57JGtleX0sICJcbiI7CisJCX0KKwl9CisJcHJpbnQgJHdyaXRlciAiXG4iOworfQorCitzdWIgX2NyZWRlbnRpYWxfcnVuIHsKKwlteSAoJHNlbGYsICRjcmVkZW50aWFsLCAkb3ApID0gX21heWJlX3NlbGYoQF8pOworCW15ICgkcGlkLCAkcmVhZGVyLCAkd3JpdGVyLCAkY3R4KSA9IGNvbW1hbmRfYmlkaV9waXBlKCdjcmVkZW50aWFsJywgJG9wKTsKKworCWNyZWRlbnRpYWxfd3JpdGUgJHdyaXRlciwgJGNyZWRlbnRpYWw7CisJY2xvc2UgJHdyaXRlcjsKKworCWlmICgkb3AgZXEgImZpbGwiKSB7CisJCSUkY3JlZGVudGlhbCA9IGNyZWRlbnRpYWxfcmVhZCAkcmVhZGVyOworCX0KKwlpZiAoPCRyZWFkZXI+KSB7CisJCXRocm93IEVycm9yOjpTaW1wbGUoInVuZXhwZWN0ZWQgb3V0cHV0IGZyb20gZ2l0IGNyZWRlbnRpYWwgJG9wIHJlc3BvbnNlOlxuJF9cbiIpOworCX0KKworCWNvbW1hbmRfY2xvc2VfYmlkaV9waXBlKCRwaWQsICRyZWFkZXIsIHVuZGVmLCAkY3R4KTsKK30KKworPWl0ZW0gY3JlZGVudGlhbCggQ1JFREVOVElBTF9IQVNIUkVGIFssIE9QRVJBVElPTiBdICkKKworPWl0ZW0gY3JlZGVudGlhbCggQ1JFREVOVElBTF9IQVNIUkVGLCBDT0RFICkKKworRXhlY3V0ZXMgQzxnaXQgY3JlZGVudGlhbD4gZm9yIGEgZ2l2ZW4gc2V0IG9mIGNyZWRlbnRpYWxzIGFuZCBzcGVjaWZpZWQKK29wZXJhdGlvbi4gIEluIGJvdGggZm9ybXMgQzxDUkVERU5USUFMX0hBU0hSRUY+IG5lZWRzIHRvIGJlIGEgcmVmZXJlbmNlIHRvCithIGhhc2ggd2hpY2ggc3RvcmVzIGNyZWRlbnRpYWxzLiAgVW5kZXIgY2VydGFpbiBjb25kaXRpb25zIHRoZSBoYXNoIGNhbgorY2hhbmdlLgorCitJbiB0aGUgZmlyc3QgZm9ybSwgQzxPUEVSQVRJT04+IGNhbiBiZSBDPCdmaWxsJz4sIEM8J2FwcHJvdmUnPiBvciBDPCdyZWplY3QnPiwKK2FuZCBmdW5jdGlvbiB3aWxsIGV4ZWN1dGUgY29ycmVzcG9uZGluZyBDPGdpdCBjcmVkZW50aWFsPiBzdWItY29tbWFuZC4gIElmCitpdCdzIG9taXR0ZWQgQzwnZmlsbCc+IGlzIGFzc3VtZWQuICBJbiBjYXNlIG9mIEM8J2ZpbGwnPiB0aGUgdmFsdWVzIHN0b3JlZCBpbgorQzxDUkVERU5USUFMX0hBU0hSRUY+IHdpbGwgYmUgY2hhbmdlZCB0byB0aGUgb25lcyByZXR1cm5lZCBieSB0aGUgQzxnaXQKK2NyZWRlbnRpYWwgZmlsbD4gY29tbWFuZC4gIFRoZSB1c3VhbCB1c2FnZSB3b3VsZCBsb29rIHNvbWV0aGluZyBsaWtlOgorCisJbXkgJWNyZWQgPSAoCisJCSdwcm90b2NvbCcgPT4gJ2h0dHBzJywKKwkJJ2hvc3QnID0+ICdleGFtcGxlLmNvbScsCisJCSd1c2VybmFtZScgPT4gJ2JvYicKKwkpOworCUdpdDo6Y3JlZGVudGlhbCBcJWNyZWQ7CisJaWYgKHRyeV90b19hdXRoZW50aWNhdGUoJGNyZWR7J3VzZXJuYW1lJ30sICRjcmVkeydwYXNzd29yZCd9KSkgeworCQlHaXQ6OmNyZWRlbnRpYWwgXCVjcmVkLCAnYXBwcm92ZSc7CisJCS4uLiBkbyBtb3JlIHN0dWZmIC4uLgorCX0gZWxzZSB7CisJCUdpdDo6Y3JlZGVudGlhbCBcJWNyZWQsICdyZWplY3QnOworCX0KKworSW4gdGhlIHNlY29uZCBmb3JtLCBDPENPREU+IG5lZWRzIHRvIGJlIGEgcmVmZXJlbmNlIHRvIGEgc3Vicm91dGluZS4gIFRoZQorZnVuY3Rpb24gd2lsbCBleGVjdXRlIEM8Z2l0IGNyZWRlbnRpYWwgZmlsbD4gdG8gZmlsbCB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbAoraGFzaCwgdGhlbiBjYWxsIEM8Q09ERT4gd2l0aCBDPENSRURFTlRJQUxfSEFTSFJFRj4gYXMgdGhlIHNvbGUgYXJndW1lbnQuICBJZgorQzxDT0RFPidzIHJldHVybiB2YWx1ZSBpcyBkZWZpbmVkLCB0aGUgZnVuY3Rpb24gd2lsbCBleGVjdXRlIEM8Z2l0IGNyZWRlbnRpYWwKK2FwcHJvdmU+IChpZiByZXR1cm4gdmFsdWUgeWllbGRzIHRydWUpIG9yIEM8Z2l0IGNyZWRlbnRpYWwgcmVqZWN0PiAoaWYgcmV0dXJuCit2YWx1ZSBpcyBmYWxzZSkuICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmLCBub3RoaW5nIGF0IGFsbCBpcyBleGVjdXRlZDsKK3RoaXMgaXMgdXNlZnVsLCBmb3IgZXhhbXBsZSwgaWYgdGhlIGNyZWRlbnRpYWwgY291bGQgbmVpdGhlciBiZSB2ZXJpZmllZCBub3IKK3JlamVjdGVkIGR1ZSB0byBhbiB1bnJlbGF0ZWQgbmV0d29yayBlcnJvci4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMKK3doYXQgQzxDT0RFPiByZXR1cm5zLiAgV2l0aCB0aGlzIGZvcm0sIHRoZSB1c2FnZSBtaWdodCBsb29rIGFzIGZvbGxvd3M6CisKKwlpZiAoR2l0OjpjcmVkZW50aWFsIHsKKwkJJ3Byb3RvY29sJyA9PiAnaHR0cHMnLAorCQknaG9zdCcgPT4gJ2V4YW1wbGUuY29tJywKKwkJJ3VzZXJuYW1lJyA9PiAnYm9iJworCX0sIHN1YiB7CisJCW15ICRjcmVkID0gc2hpZnQ7CisJCXJldHVybiAhIXRyeV90b19hdXRoZW50aWNhdGUoJGNyZWQtPnsndXNlcm5hbWUnfSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY3JlZC0+eydwYXNzd29yZCd9KTsKKwl9KSB7CisJCS4uLiBkbyBtb3JlIHN0dWZmIC4uLgorCX0KKworPWN1dAorCitzdWIgY3JlZGVudGlhbCB7CisJbXkgKCRzZWxmLCAkY3JlZGVudGlhbCwgJG9wX29yX2NvZGUpID0gKF9tYXliZV9zZWxmKEBfKSwgJ2ZpbGwnKTsKKworCWlmICgnQ09ERScgZXEgcmVmICRvcF9vcl9jb2RlKSB7CisJCV9jcmVkZW50aWFsX3J1biAkY3JlZGVudGlhbCwgJ2ZpbGwnOworCQlteSAkcmV0ID0gJG9wX29yX2NvZGUtPigkY3JlZGVudGlhbCk7CisJCWlmIChkZWZpbmVkICRyZXQpIHsKKwkJCV9jcmVkZW50aWFsX3J1biAkY3JlZGVudGlhbCwgJHJldCA/ICdhcHByb3ZlJyA6ICdyZWplY3QnOworCQl9CisJCXJldHVybiAkcmV0OworCX0gZWxzZSB7CisJCV9jcmVkZW50aWFsX3J1biAkY3JlZGVudGlhbCwgJG9wX29yX2NvZGU7CisJfQorfQorCit7ICMgJVRFTVBfKiBMZXhpY2FsIENvbnRleHQKKworbXkgKCVURU1QX0ZJTEVNQVAsICVURU1QX0ZJTEVTKTsKKworPWl0ZW0gdGVtcF9hY3F1aXJlICggTkFNRSApCisKK0F0dGVtcHRzIHRvIHJldHJpZXZlIHRoZSB0ZW1wb3JhcnkgZmlsZSBtYXBwZWQgdG8gdGhlIHN0cmluZyBDPE5BTUU+LiBJZiBhbgorYXNzb2NpYXRlZCB0ZW1wIGZpbGUgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgdGhpcyBzZXNzaW9uIG9yIHdhcyBjbG9zZWQsIGl0IGlzCitjcmVhdGVkLCBjYWNoZWQsIGFuZCBzZXQgZm9yIGF1dG9mbHVzaCBhbmQgYmlubW9kZS4KKworSW50ZXJuYWxseSBsb2NrcyB0aGUgZmlsZSBtYXBwZWQgdG8gQzxOQU1FPi4gVGhpcyBsb2NrIG11c3QgYmUgcmVsZWFzZWQgd2l0aAorQzx0ZW1wX3JlbGVhc2UoKT4gd2hlbiB0aGUgdGVtcCBmaWxlIGlzIG5vIGxvbmdlciBuZWVkZWQuIFN1YnNlcXVlbnQgYXR0ZW1wdHMKK3RvIHJldHJpZXZlIHRlbXBvcmFyeSBmaWxlcyBtYXBwZWQgdG8gdGhlIHNhbWUgQzxOQU1FPiB3aGlsZSBzdGlsbCBsb2NrZWQgd2lsbAorY2F1c2UgYW4gZXJyb3IuIFRoaXMgbG9ja2luZyBtZWNoYW5pc20gcHJvdmlkZXMgYSB3ZWFrIGd1YXJhbnRlZSBhbmQgaXMgbm90Cit0aHJlYWRzYWZlLiBJdCBkb2VzIHByb3ZpZGUgc29tZSBlcnJvciBjaGVja2luZyB0byBoZWxwIHByZXZlbnQgdGVtcCBmaWxlIHJlZnMKK3dyaXRpbmcgb3ZlciBvbmUgYW5vdGhlci4KKworSW4gZ2VuZXJhbCwgdGhlIEw8RmlsZTo6SGFuZGxlPiByZXR1cm5lZCBzaG91bGQgbm90IGJlIGNsb3NlZCBieSBjb25zdW1lcnMgYXMKK2l0IGRlZmVhdHMgdGhlIHB1cnBvc2Ugb2YgdGhpcyBjYWNoaW5nIG1lY2hhbmlzbS4gSWYgeW91IG5lZWQgdG8gY2xvc2UgdGhlIHRlbXAKK2ZpbGUgaGFuZGxlLCB0aGVuIHlvdSBzaG91bGQgdXNlIEw8RmlsZTo6VGVtcD4gb3IgYW5vdGhlciB0ZW1wIGZpbGUgZmFjdWx0eQorZGlyZWN0bHkuIElmIGEgaGFuZGxlIGlzIGNsb3NlZCBhbmQgdGhlbiByZXF1ZXN0ZWQgYWdhaW4sIHRoZW4gYSB3YXJuaW5nIHdpbGwKK2lzc3VlLgorCis9Y3V0CisKK3N1YiB0ZW1wX2FjcXVpcmUgeworCW15ICR0ZW1wX2ZkID0gX3RlbXBfY2FjaGUoQF8pOworCisJJFRFTVBfRklMRVN7JHRlbXBfZmR9e2xvY2tlZH0gPSAxOworCSR0ZW1wX2ZkOworfQorCis9aXRlbSB0ZW1wX2lzX2xvY2tlZCAoIE5BTUUgKQorCitSZXR1cm5zIHRydWUgaWYgdGhlIGludGVybmFsIGxvY2sgY3JlYXRlZCBieSBhIHByZXZpb3VzIEM8dGVtcF9hY3F1aXJlKCk+CitjYWxsIHdpdGggQzxOQU1FPiBpcyBzdGlsbCBpbiBlZmZlY3QuCisKK1doZW4gdGVtcF9hY3F1aXJlIGlzIGNhbGxlZCBvbiBhIEM8TkFNRT4sIGl0IGludGVybmFsbHkgbG9ja3MgdGhlIHRlbXBvcmFyeQorZmlsZSBtYXBwZWQgdG8gQzxOQU1FPi4gIFRoYXQgbG9jayB3aWxsIG5vdCBiZSByZWxlYXNlZCB1bnRpbCBDPHRlbXBfcmVsZWFzZSgpPgoraXMgY2FsbGVkIHdpdGggZWl0aGVyIHRoZSBvcmlnaW5hbCBDPE5BTUU+IG9yIHRoZSBMPEZpbGU6OkhhbmRsZT4gdGhhdCB3YXMKK3JldHVybmVkIGZyb20gdGhlIG9yaWdpbmFsIGNhbGwgdG8gdGVtcF9hY3F1aXJlLgorCitTdWJzZXF1ZW50IGF0dGVtcHRzIHRvIGNhbGwgQzx0ZW1wX2FjcXVpcmUoKT4gd2l0aCB0aGUgc2FtZSBDPE5BTUU+IHdpbGwgZmFpbAordW5sZXNzIHRoZXJlIGhhcyBiZWVuIGFuIGludGVydmVuaW5nIEM8dGVtcF9yZWxlYXNlKCk+IGNhbGwgZm9yIHRoYXQgQzxOQU1FPgorKG9yIGl0cyBjb3JyZXNwb25kaW5nIEw8RmlsZTo6SGFuZGxlPiB0aGF0IHdhcyByZXR1cm5lZCBieSB0aGUgb3JpZ2luYWwKK0M8dGVtcF9hY3F1aXJlKCk+IGNhbGwpLgorCitJZiB0cnVlIGlzIHJldHVybmVkIGJ5IEM8dGVtcF9pc19sb2NrZWQoKT4gZm9yIGEgQzxOQU1FPiwgYW4gYXR0ZW1wdCB0bworQzx0ZW1wX2FjcXVpcmUoKT4gdGhlIHNhbWUgQzxOQU1FPiB3aWxsIGNhdXNlIGFuIGVycm9yIHVubGVzcworQzx0ZW1wX3JlbGVhc2U+IGlzIGZpcnN0IGNhbGxlZCBvbiB0aGF0IEM8TkFNRT4gKG9yIGl0cyBjb3JyZXNwb25kaW5nCitMPEZpbGU6OkhhbmRsZT4gdGhhdCB3YXMgcmV0dXJuZWQgYnkgdGhlIG9yaWdpbmFsIEM8dGVtcF9hY3F1aXJlKCk+IGNhbGwpLgorCis9Y3V0CisKK3N1YiB0ZW1wX2lzX2xvY2tlZCB7CisJbXkgKCRzZWxmLCAkbmFtZSkgPSBfbWF5YmVfc2VsZihAXyk7CisJbXkgJHRlbXBfZmQgPSBcJFRFTVBfRklMRU1BUHskbmFtZX07CisKKwlkZWZpbmVkICQkdGVtcF9mZCAmJiAkJHRlbXBfZmQtPm9wZW5lZCAmJiAkVEVNUF9GSUxFU3skJHRlbXBfZmR9e2xvY2tlZH07Cit9CisKKz1pdGVtIHRlbXBfcmVsZWFzZSAoIE5BTUUgKQorCis9aXRlbSB0ZW1wX3JlbGVhc2UgKCBGSUxFSEFORExFICkKKworUmVsZWFzZXMgYSBsb2NrIGFjcXVpcmVkIHRocm91Z2ggQzx0ZW1wX2FjcXVpcmUoKT4uIENhbiBiZSBjYWxsZWQgZWl0aGVyIHdpdGgKK3RoZSBDPE5BTUU+IG1hcHBpbmcgdXNlZCB3aGVuIGFjcXVpcmluZyB0aGUgdGVtcCBmaWxlIG9yIHdpdGggdGhlIEM8RklMRUhBTkRMRT4KK3JlZmVyZW5jaW5nIGEgbG9ja2VkIHRlbXAgZmlsZS4KKworV2FybnMgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJlbGVhc2UgYSBmaWxlIHRoYXQgaXMgbm90IGxvY2tlZC4KKworVGhlIHRlbXAgZmlsZSB3aWxsIGJlIHRydW5jYXRlZCBiZWZvcmUgYmVpbmcgcmVsZWFzZWQuIFRoaXMgY2FuIGhlbHAgdG8gcmVkdWNlCitkaXNrIEkvTyB3aGVyZSB0aGUgc3lzdGVtIGlzIHNtYXJ0IGVub3VnaCB0byBkZXRlY3QgdGhlIHRydW5jYXRpb24gd2hpbGUgZGF0YQoraXMgaW4gdGhlIG91dHB1dCBidWZmZXJzLiBCZXdhcmUgdGhhdCBhZnRlciB0aGUgdGVtcCBmaWxlIGlzIHJlbGVhc2VkIGFuZAordHJ1bmNhdGVkLCBhbnkgb3BlcmF0aW9ucyBvbiB0aGF0IGZpbGUgbWF5IGZhaWwgbWlzZXJhYmx5IHVudGlsIGl0IGlzCityZS1hY3F1aXJlZC4gQWxsIGNvbnRlbnRzIGFyZSBsb3N0IGJldHdlZW4gZWFjaCByZWxlYXNlIGFuZCBhY3F1aXJlIG1hcHBlZCB0bwordGhlIHNhbWUgc3RyaW5nLgorCis9Y3V0CisKK3N1YiB0ZW1wX3JlbGVhc2UgeworCW15ICgkc2VsZiwgJHRlbXBfZmQsICR0cnVuYykgPSBfbWF5YmVfc2VsZihAXyk7CisKKwlpZiAoZXhpc3RzICRURU1QX0ZJTEVNQVB7JHRlbXBfZmR9KSB7CisJCSR0ZW1wX2ZkID0gJFRFTVBfRklMRVN7JHRlbXBfZmR9OworCX0KKwl1bmxlc3MgKCRURU1QX0ZJTEVTeyR0ZW1wX2ZkfXtsb2NrZWR9KSB7CisJCWNhcnAgIkF0dGVtcHQgdG8gcmVsZWFzZSB0ZW1wIGZpbGUgJyIsCisJCQkkdGVtcF9mZCwgIicgdGhhdCBoYXMgbm90IGJlZW4gbG9ja2VkIjsKKwl9CisJdGVtcF9yZXNldCgkdGVtcF9mZCkgaWYgJHRydW5jIGFuZCAkdGVtcF9mZC0+b3BlbmVkOworCisJJFRFTVBfRklMRVN7JHRlbXBfZmR9e2xvY2tlZH0gPSAwOworCXVuZGVmOworfQorCitzdWIgX3RlbXBfY2FjaGUgeworCW15ICgkc2VsZiwgJG5hbWUpID0gX21heWJlX3NlbGYoQF8pOworCisJX3ZlcmlmeV9yZXF1aXJlKCk7CisKKwlteSAkdGVtcF9mZCA9IFwkVEVNUF9GSUxFTUFQeyRuYW1lfTsKKwlpZiAoZGVmaW5lZCAkJHRlbXBfZmQgYW5kICQkdGVtcF9mZC0+b3BlbmVkKSB7CisJCWlmICgkVEVNUF9GSUxFU3skJHRlbXBfZmR9e2xvY2tlZH0pIHsKKwkJCXRocm93IEVycm9yOjpTaW1wbGUoIlRlbXAgZmlsZSB3aXRoIG1vbmlrZXIgJyIgLgorCQkJCSRuYW1lIC4gIicgYWxyZWFkeSBpbiB1c2UiKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChkZWZpbmVkICQkdGVtcF9mZCkgeworCQkJIyB0aGVuIHdlJ3JlIGhlcmUgYmVjYXVzZSBvZiBhIGNsb3NlZCBoYW5kbGUuCisJCQljYXJwICJUZW1wIGZpbGUgJyIsICRuYW1lLAorCQkJCSInIHdhcyBjbG9zZWQuIE9wZW5pbmcgcmVwbGFjZW1lbnQuIjsKKwkJfQorCQlteSAkZm5hbWU7CisKKwkJbXkgJHRtcGRpcjsKKwkJaWYgKGRlZmluZWQgJHNlbGYpIHsKKwkJCSR0bXBkaXIgPSAkc2VsZi0+cmVwb19wYXRoKCk7CisJCX0KKworCQlteSAkbiA9ICRuYW1lOworCQkkbiA9fiBzL1xXL18vZzsgIyBubyBzdHJhbmdlIGNoYXJzCisKKwkJKCQkdGVtcF9mZCwgJGZuYW1lKSA9IEZpbGU6OlRlbXA6OnRlbXBmaWxlKAorCQkJIkdpdF8ke259X1hYWFhYWCIsIFVOTElOSyA9PiAxLCBESVIgPT4gJHRtcGRpciwKKwkJCSkgb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgiY291bGRuJ3Qgb3BlbiBuZXcgdGVtcCBmaWxlIik7CisKKwkJJCR0ZW1wX2ZkLT5hdXRvZmx1c2g7CisJCWJpbm1vZGUgJCR0ZW1wX2ZkOworCQkkVEVNUF9GSUxFU3skJHRlbXBfZmR9e2ZuYW1lfSA9ICRmbmFtZTsKKwl9CisJJCR0ZW1wX2ZkOworfQorCitzdWIgX3ZlcmlmeV9yZXF1aXJlIHsKKwlldmFsIHsgcmVxdWlyZSBGaWxlOjpUZW1wOyByZXF1aXJlIEZpbGU6OlNwZWM7IH07CisJJEAgYW5kIHRocm93IEVycm9yOjpTaW1wbGUoJEApOworfQorCis9aXRlbSB0ZW1wX3Jlc2V0ICggRklMRUhBTkRMRSApCisKK1RydW5jYXRlcyBhbmQgcmVzZXRzIHRoZSBwb3NpdGlvbiBvZiB0aGUgQzxGSUxFSEFORExFPi4KKworPWN1dAorCitzdWIgdGVtcF9yZXNldCB7CisJbXkgKCRzZWxmLCAkdGVtcF9mZCkgPSBfbWF5YmVfc2VsZihAXyk7CisKKwl0cnVuY2F0ZSAkdGVtcF9mZCwgMAorCQlvciB0aHJvdyBFcnJvcjo6U2ltcGxlKCJjb3VsZG4ndCB0cnVuY2F0ZSBmaWxlIik7CisJc3lzc2VlaygkdGVtcF9mZCwgMCwgU0VFS19TRVQpIGFuZCBzZWVrKCR0ZW1wX2ZkLCAwLCBTRUVLX1NFVCkKKwkJb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgiY291bGRuJ3Qgc2VlayB0byBiZWdpbm5pbmcgb2YgZmlsZSIpOworCXN5c3NlZWsoJHRlbXBfZmQsIDAsIFNFRUtfQ1VSKSA9PSAwIGFuZCB0ZWxsKCR0ZW1wX2ZkKSA9PSAwCisJCW9yIHRocm93IEVycm9yOjpTaW1wbGUoImV4cGVjdGVkIGZpbGUgcG9zaXRpb24gdG8gYmUgcmVzZXQiKTsKK30KKworPWl0ZW0gdGVtcF9wYXRoICggTkFNRSApCisKKz1pdGVtIHRlbXBfcGF0aCAoIEZJTEVIQU5ETEUgKQorCitSZXR1cm5zIHRoZSBmaWxlbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHRlbXBmaWxlLgorCis9Y3V0CisKK3N1YiB0ZW1wX3BhdGggeworCW15ICgkc2VsZiwgJHRlbXBfZmQpID0gX21heWJlX3NlbGYoQF8pOworCisJaWYgKGV4aXN0cyAkVEVNUF9GSUxFTUFQeyR0ZW1wX2ZkfSkgeworCQkkdGVtcF9mZCA9ICRURU1QX0ZJTEVNQVB7JHRlbXBfZmR9OworCX0KKwkkVEVNUF9GSUxFU3skdGVtcF9mZH17Zm5hbWV9OworfQorCitzdWIgRU5EIHsKKwl1bmxpbmsgdmFsdWVzICVURU1QX0ZJTEVNQVAgaWYgJVRFTVBfRklMRU1BUDsKK30KKworfSAjICVURU1QXyogTGV4aWNhbCBDb250ZXh0CisKKz1iYWNrCisKKz1oZWFkMSBFUlJPUiBIQU5ETElORworCitBbGwgZnVuY3Rpb25zIGFyZSBzdXBwb3NlZCB0byB0aHJvdyBQZXJsIGV4Y2VwdGlvbnMgaW4gY2FzZSBvZiBlcnJvcnMuCitTZWUgdGhlIEw8RXJyb3I+IG1vZHVsZSBvbiBob3cgdG8gY2F0Y2ggdGhvc2UuIE1vc3QgZXhjZXB0aW9ucyBhcmUgbWVyZQorTDxFcnJvcjo6U2ltcGxlPiBpbnN0YW5jZXMuCisKK0hvd2V2ZXIsIHRoZSBDPGNvbW1hbmQoKT4sIEM8Y29tbWFuZF9vbmVsaW5lKCk+IGFuZCBDPGNvbW1hbmRfbm9pc3koKT4KK2Z1bmN0aW9ucyBzdWl0ZSBjYW4gdGhyb3cgQzxHaXQ6OkVycm9yOjpDb21tYW5kPiBleGNlcHRpb25zIGFzIHdlbGw6IHRob3NlIGFyZQordGhyb3duIHdoZW4gdGhlIGV4dGVybmFsIGNvbW1hbmQgcmV0dXJucyBhbiBlcnJvciBjb2RlIGFuZCBjb250YWluIHRoZSBlcnJvcgorY29kZSBhcyB3ZWxsIGFzIGFjY2VzcyB0byB0aGUgY2FwdHVyZWQgY29tbWFuZCdzIG91dHB1dC4gVGhlIGV4Y2VwdGlvbiBjbGFzcworcHJvdmlkZXMgdGhlIHVzdWFsIEM8c3RyaW5naWZ5PiBhbmQgQzx2YWx1ZT4gKGNvbW1hbmQncyBleGl0IGNvZGUpIG1ldGhvZHMgYW5kCitpbiBhZGRpdGlvbiBhbHNvIGEgQzxjbWRfb3V0cHV0PiBtZXRob2QgdGhhdCByZXR1cm5zIGVpdGhlciBhbiBhcnJheSBvciBhCitzdHJpbmcgd2l0aCB0aGUgY2FwdHVyZWQgY29tbWFuZCBvdXRwdXQgKGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24KK2NhbGwgY29udGV4dDsgQzxjb21tYW5kX25vaXN5KCk+IHJldHVybnMgQzx1bmRlZj4pIGFuZCAkPGNtZGxpbmU+IHdoaWNoCityZXR1cm5zIHRoZSBjb21tYW5kIGFuZCBpdHMgYXJndW1lbnRzIChidXQgd2l0aG91dCBwcm9wZXIgcXVvdGluZykuCisKK05vdGUgdGhhdCB0aGUgQzxjb21tYW5kXypfcGlwZSgpPiBmdW5jdGlvbnMgY2Fubm90IHRocm93IHRoaXMgZXhjZXB0aW9uIHNpbmNlCitpdCBoYXMgbm8gaWRlYSB3aGV0aGVyIHRoZSBjb21tYW5kIGZhaWxlZCBvciBub3QuIFlvdSB3aWxsIG9ubHkgZmluZCBvdXQKK2F0IHRoZSB0aW1lIHlvdSBDPGNsb3NlPiB0aGUgcGlwZTsgaWYgeW91IHdhbnQgdG8gaGF2ZSB0aGF0IGF1dG9tYXRlZCwKK3VzZSBDPGNvbW1hbmRfY2xvc2VfcGlwZSgpPiwgd2hpY2ggY2FuIHRocm93IHRoZSBleGNlcHRpb24uCisKKz1jdXQKKworeworCXBhY2thZ2UgR2l0OjpFcnJvcjo6Q29tbWFuZDsKKworCUBHaXQ6OkVycm9yOjpDb21tYW5kOjpJU0EgPSBxdyhFcnJvcik7CisKKwlzdWIgbmV3IHsKKwkJbXkgJHNlbGYgPSBzaGlmdDsKKwkJbXkgJGNtZGxpbmUgPSAnJyAuIHNoaWZ0OworCQlteSAkdmFsdWUgPSAwICsgc2hpZnQ7CisJCW15ICRvdXRwdXRyZWYgPSBzaGlmdDsKKwkJbXkoQGFyZ3MpID0gKCk7CisKKwkJbG9jYWwgJEVycm9yOjpEZXB0aCA9ICRFcnJvcjo6RGVwdGggKyAxOworCisJCXB1c2goQGFyZ3MsICctY21kbGluZScsICRjbWRsaW5lKTsKKwkJcHVzaChAYXJncywgJy12YWx1ZScsICR2YWx1ZSk7CisJCXB1c2goQGFyZ3MsICctb3V0cHV0cmVmJywgJG91dHB1dHJlZik7CisKKwkJJHNlbGYtPlNVUEVSOjpuZXcoLXRleHQgPT4gJ2NvbW1hbmQgcmV0dXJuZWQgZXJyb3InLCBAYXJncyk7CisJfQorCisJc3ViIHN0cmluZ2lmeSB7CisJCW15ICRzZWxmID0gc2hpZnQ7CisJCW15ICR0ZXh0ID0gJHNlbGYtPlNVUEVSOjpzdHJpbmdpZnk7CisJCSRzZWxmLT5jbWRsaW5lKCkgLiAnOiAnIC4gJHRleHQgLiAnOiAnIC4gJHNlbGYtPnZhbHVlKCkgLiAiXG4iOworCX0KKworCXN1YiBjbWRsaW5lIHsKKwkJbXkgJHNlbGYgPSBzaGlmdDsKKwkJJHNlbGYtPnsnLWNtZGxpbmUnfTsKKwl9CisKKwlzdWIgY21kX291dHB1dCB7CisJCW15ICRzZWxmID0gc2hpZnQ7CisJCW15ICRyZWYgPSAkc2VsZi0+eyctb3V0cHV0cmVmJ307CisJCWRlZmluZWQgJHJlZiBvciB1bmRlZjsKKwkJaWYgKHJlZiAkcmVmIGVxICdBUlJBWScpIHsKKwkJCXJldHVybiBAJHJlZjsKKwkJfSBlbHNlIHsgIyBTQ0FMQVIKKwkJCXJldHVybiAkJHJlZjsKKwkJfQorCX0KK30KKworPW92ZXIgNAorCis9aXRlbSBnaXRfY21kX3RyeSB7IENPREUgfSBFUlJNU0cKKworVGhpcyBtYWdpY2FsIHN0YXRlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgY2F0Y2ggYW55IEM8R2l0OjpFcnJvcjo6Q29tbWFuZD4KK2V4Y2VwdGlvbnMgdGhyb3duIGJ5IEM8Q09ERT4gYW5kIG1ha2UgeW91ciBwcm9ncmFtIGRpZSB3aXRoIEM8RVJSTVNHPgorb24gaXRzIGxpcHM7IHRoZSBtZXNzYWdlIHdpbGwgaGF2ZSAlcyBzdWJzdGl0dXRlZCBmb3IgdGhlIGNvbW1hbmQgbGluZQorYW5kICVkIGZvciB0aGUgZXhpdCBzdGF0dXMuIFRoaXMgc3RhdGVtZW50IGlzIHVzZWZ1bCBtb3N0bHkgZm9yIHByb2R1Y2luZworbW9yZSB1c2VyLWZyaWVuZGx5IGVycm9yIG1lc3NhZ2VzLgorCitJbiBjYXNlIG9mIG5vIGV4Y2VwdGlvbiBjYXVnaHQgdGhlIHN0YXRlbWVudCByZXR1cm5zIEM8Q09ERT4ncyByZXR1cm4gdmFsdWUuCisKK05vdGUgdGhhdCB0aGlzIGlzIHRoZSBvbmx5IGF1dG8tZXhwb3J0ZWQgZnVuY3Rpb24uCisKKz1jdXQKKworc3ViIGdpdF9jbWRfdHJ5KCYkKSB7CisJbXkgKCRjb2RlLCAkZXJybXNnKSA9IEBfOworCW15IEByZXN1bHQ7CisJbXkgJGVycjsKKwlteSAkYXJyYXkgPSB3YW50YXJyYXk7CisJdHJ5IHsKKwkJaWYgKCRhcnJheSkgeworCQkJQHJlc3VsdCA9ICYkY29kZTsKKwkJfSBlbHNlIHsKKwkJCSRyZXN1bHRbMF0gPSAmJGNvZGU7CisJCX0KKwl9IGNhdGNoIEdpdDo6RXJyb3I6OkNvbW1hbmQgd2l0aCB7CisJCW15ICRFID0gc2hpZnQ7CisJCSRlcnIgPSAkZXJybXNnOworCQkkZXJyID1+IHMvXCVzLyRFLT5jbWRsaW5lKCkvZ2U7CisJCSRlcnIgPX4gcy9cJWQvJEUtPnZhbHVlKCkvZ2U7CisJCSMgV2UgY2FuJ3QgY3JvYWsgaGVyZSBzaW5jZSBFcnJvci5wbSB3b3VsZCBtYW5nbGUKKwkJIyB0aGF0IHRvIEVycm9yOjpTaW1wbGUuCisJfTsKKwkkZXJyIGFuZCBjcm9hayAkZXJyOworCXJldHVybiAkYXJyYXkgPyBAcmVzdWx0IDogJHJlc3VsdFswXTsKK30KKworCis9YmFjaworCis9aGVhZDEgQ09QWVJJR0hUCisKK0NvcHlyaWdodCAyMDA2IGJ5IFBldHIgQmF1ZGlzIEU8bHQ+cGFza3lAc3VzZS5jekU8Z3Q+LgorCitUaGlzIG1vZHVsZSBpcyBmcmVlIHNvZnR3YXJlOyBpdCBtYXkgYmUgdXNlZCwgY29waWVkLCBtb2RpZmllZAorYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UsCitlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCis9Y3V0CisKKworIyBUYWtlIHJhdyBtZXRob2QgYXJndW1lbnQgbGlzdCBhbmQgcmV0dXJuICgkb2JqLCBAYXJncykgaW4gY2FzZQorIyB0aGUgbWV0aG9kIHdhcyBjYWxsZWQgdXBvbiBhbiBpbnN0YW5jZSBhbmQgKHVuZGVmLCBAYXJncykgaWYKKyMgaXQgd2FzIGNhbGxlZCBkaXJlY3RseS4KK3N1YiBfbWF5YmVfc2VsZiB7CisJVU5JVkVSU0FMOjppc2EoJF9bMF0sICdHaXQnKSA/IEBfIDogKHVuZGVmLCBAXyk7Cit9CisKKyMgQ2hlY2sgaWYgdGhlIGNvbW1hbmQgaWQgaXMgc29tZXRoaW5nIHJlYXNvbmFibGUuCitzdWIgX2NoZWNrX3ZhbGlkX2NtZCB7CisJbXkgKCRjbWQpID0gQF87CisJJGNtZCA9fiAvXlthLXowLTlBLVpfLV0rJC8gb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgiYmFkIGNvbW1hbmQ6ICRjbWQiKTsKK30KKworIyBDb21tb24gYmFja2VuZCBmb3IgdGhlIHBpcGUgY3JlYXRvcnMuCitzdWIgX2NvbW1hbmRfY29tbW9uX3BpcGUgeworCW15ICRkaXJlY3Rpb24gPSBzaGlmdDsKKwlteSAoJHNlbGYsIEBwKSA9IF9tYXliZV9zZWxmKEBfKTsKKwlteSAoJW9wdHMsICRjbWQsIEBhcmdzKTsKKwlpZiAocmVmICRwWzBdKSB7CisJCSgkY21kLCBAYXJncykgPSBAe3NoaWZ0IEBwfTsKKwkJJW9wdHMgPSByZWYgJHBbMF0gPyAleyRwWzBdfSA6IEBwOworCX0gZWxzZSB7CisJCSgkY21kLCBAYXJncykgPSBAcDsKKwl9CisJX2NoZWNrX3ZhbGlkX2NtZCgkY21kKTsKKworCW15ICRmaDsKKwlpZiAoJF5PIGVxICdNU1dpbjMyJykgeworCQkjIEFjdGl2ZVN0YXRlIFBlcmwKKwkJI2RlZmluZWQgJG9wdHN7U1RERVJSfSBhbmQKKwkJIwl3YXJuICdpZ25vcmluZyBTVERFUlIgb3B0aW9uIC0gcnVubmluZyB3LyBBY3RpdmVTdGF0ZSc7CisJCSRkaXJlY3Rpb24gZXEgJy18JyBvcgorCQkJZGllICdpbnB1dCBwaXBlIGZvciBBY3RpdmVTdGF0ZSBub3QgaW1wbGVtZW50ZWQnOworCQkjIHRoZSBzdHJhbmdlIGNvbnN0cnVjdGlvbiB3aXRoICpBQ1BJUEUgaXMganVzdCB0bworCQkjIGV4cGxhaW4gdGhlIHRpZSBiZWxvdyB0aGF0IHdlIHdhbnQgdG8gYmluZCB0bworCQkjIGEgaGFuZGxlIGNsYXNzLCBub3Qgc2NhbGFyLiBJdCBpcyBub3Qga25vd24gaWYKKwkJIyBpdCBpcyBzb21ldGhpbmcgc3BlY2lmaWMgdG8gQWN0aXZlU3RhdGUgUGVybCBvcgorCQkjIGp1c3QgYSBQZXJsIHF1aXJrLgorCQl0aWUgKCpBQ1BJUEUsICdHaXQ6OmFjdGl2ZXN0YXRlX3BpcGUnLCAkY21kLCBAYXJncyk7CisJCSRmaCA9ICpBQ1BJUEU7CisKKwl9IGVsc2UgeworCQlteSAkcGlkID0gb3BlbigkZmgsICRkaXJlY3Rpb24pOworCQlpZiAobm90IGRlZmluZWQgJHBpZCkgeworCQkJdGhyb3cgRXJyb3I6OlNpbXBsZSgib3BlbiBmYWlsZWQ6ICQhIik7CisJCX0gZWxzaWYgKCRwaWQgPT0gMCkgeworCQkJaWYgKCRvcHRze1NUREVSUn0pIHsKKwkJCQlvcGVuIChTVERFUlIsICc+JicsICRvcHRze1NUREVSUn0pCisJCQkJCW9yIGRpZSAiZHVwIGZhaWxlZDogJCEiOworCQkJfSBlbHNpZiAoZGVmaW5lZCAkb3B0c3tTVERFUlJ9KSB7CisJCQkJb3BlbiAoU1RERVJSLCAnPicsICcvZGV2L251bGwnKQorCQkJCQlvciBkaWUgIm9wZW5pbmcgL2Rldi9udWxsIGZhaWxlZDogJCEiOworCQkJfQorCQkJX2NtZF9leGVjKCRzZWxmLCAkY21kLCBAYXJncyk7CisJCX0KKwl9CisJcmV0dXJuIHdhbnRhcnJheSA/ICgkZmgsIGpvaW4oJyAnLCAkY21kLCBAYXJncykpIDogJGZoOworfQorCisjIFdoZW4gYWxyZWFkeSBpbiB0aGUgc3VicHJvY2Vzcywgc2V0IHVwIHRoZSBhcHByb3ByaWF0ZSBzdGF0ZQorIyBmb3IgdGhlIGdpdmVuIHJlcG9zaXRvcnkgYW5kIGV4ZWN1dGUgdGhlIGdpdCBjb21tYW5kLgorc3ViIF9jbWRfZXhlYyB7CisJbXkgKCRzZWxmLCBAYXJncykgPSBAXzsKKwlfc2V0dXBfZ2l0X2NtZF9lbnYoJHNlbGYpOworCV9leGVjdl9naXRfY21kKEBhcmdzKTsKKwlkaWUgcXFbZXhlYyAiQGFyZ3MiIGZhaWxlZDogJCFdOworfQorCisjIHNldCB1cCB0aGUgYXBwcm9wcmlhdGUgc3RhdGUgZm9yIGdpdCBjb21tYW5kCitzdWIgX3NldHVwX2dpdF9jbWRfZW52IHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCWlmICgkc2VsZikgeworCQkkc2VsZi0+cmVwb19wYXRoKCkgYW5kICRFTlZ7J0dJVF9ESVInfSA9ICRzZWxmLT5yZXBvX3BhdGgoKTsKKwkJJHNlbGYtPnJlcG9fcGF0aCgpIGFuZCAkc2VsZi0+d2NfcGF0aCgpCisJCQlhbmQgJEVOVnsnR0lUX1dPUktfVFJFRSd9ID0gJHNlbGYtPndjX3BhdGgoKTsKKwkJJHNlbGYtPndjX3BhdGgoKSBhbmQgY2hkaXIoJHNlbGYtPndjX3BhdGgoKSk7CisJCSRzZWxmLT53Y19zdWJkaXIoKSBhbmQgY2hkaXIoJHNlbGYtPndjX3N1YmRpcigpKTsKKwl9Cit9CisKKyMgRXhlY3V0ZSB0aGUgZ2l2ZW4gR2l0IGNvbW1hbmQgKCRfWzBdKSB3aXRoIGFyZ3VtZW50cyAoJF9bMS4uXSkKKyMgYnkgc2VhcmNoaW5nIGZvciBpdCBhdCBwcm9wZXIgcGxhY2VzLgorc3ViIF9leGVjdl9naXRfY21kIHsgZXhlYygnZ2l0JywgQF8pOyB9CisKKyMgQ2xvc2UgcGlwZSB0byBhIHN1YnByb2Nlc3MuCitzdWIgX2NtZF9jbG9zZSB7CisJbXkgJGN0eCA9IHNoaWZ0IEBfOworCWZvcmVhY2ggbXkgJGZoIChAXykgeworCQlpZiAoY2xvc2UgJGZoKSB7CisJCQkjIG5vcAorCQl9IGVsc2lmICgkISkgeworCQkJIyBJdCdzIGp1c3QgY2xvc2UsIG5vIHBvaW50IGluIGZhdGFsaXRpZXMKKwkJCWNhcnAgImVycm9yIGNsb3NpbmcgcGlwZTogJCEiOworCQl9IGVsc2lmICgkPyA+PiA4KSB7CisJCQkjIFRoZSBjYWxsZXIgc2hvdWxkIHBlcHBlciB0aGlzLgorCQkJdGhyb3cgR2l0OjpFcnJvcjo6Q29tbWFuZCgkY3R4LCAkPyA+PiA4KTsKKwkJfQorCQkjIGVsc2Ugd2UgbWlnaHQgZS5nLiBjbG9zZWQgYSBsaXZlIHN0cmVhbTsgdGhlIGNvbW1hbmQKKwkJIyBkeWluZyBvZiBTSUdQSVBFIHdvdWxkIGRyaXZlIHVzIGhlcmUuCisJfQorfQorCisKK3N1YiBERVNUUk9ZIHsKKwlteSAoJHNlbGYpID0gQF87CisJJHNlbGYtPl9jbG9zZV9oYXNoX2FuZF9pbnNlcnRfb2JqZWN0KCk7CisJJHNlbGYtPl9jbG9zZV9jYXRfYmxvYigpOworfQorCisKKyMgUGlwZSBpbXBsZW1lbnRhdGlvbiBmb3IgQWN0aXZlU3RhdGUgUGVybC4KKworcGFja2FnZSBHaXQ6OmFjdGl2ZXN0YXRlX3BpcGU7Cit1c2Ugc3RyaWN0OworCitzdWIgVElFSEFORExFIHsKKwlteSAoJGNsYXNzLCBAcGFyYW1zKSA9IEBfOworCSMgRklYTUU6IFRoaXMgaXMgcHJvYmFibHkgaG9ycmlibGUgaWRlYSBhbmQgdGhlIHRoaW5nIHdpbGwgZXhwbG9kZQorCSMgYXQgdGhlIG1vbWVudCB5b3UgZ2l2ZSBpdCBhcmd1bWVudHMgdGhhdCByZXF1aXJlIHNvbWUgcXVvdGluZywKKwkjIGJ1dCBJIGhhdmUgbm8gQWN0aXZlU3RhdGUgY2x1ZS4uLiAtLXBhc2t5CisJIyBMZXQncyBqdXN0IGhvcGUgQWN0aXZlU3RhdGUgUGVybCBkb2VzIGF0IGxlYXN0IHRoZSBxdW90aW5nCisJIyBjb3JyZWN0bHkuCisJbXkgQGRhdGEgPSBxeHtnaXQgQHBhcmFtc307CisJYmxlc3MgeyBpID0+IDAsIGRhdGEgPT4gXEBkYXRhIH0sICRjbGFzczsKK30KKworc3ViIFJFQURMSU5FIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCWlmICgkc2VsZi0+e2l9ID49IHNjYWxhciBAeyRzZWxmLT57ZGF0YX19KSB7CisJCXJldHVybiB1bmRlZjsKKwl9CisJbXkgJGkgPSAkc2VsZi0+e2l9OworCWlmICh3YW50YXJyYXkpIHsKKwkJJHNlbGYtPntpfSA9ICQjeyRzZWxmLT57J2RhdGEnfX0gKyAxOworCQlyZXR1cm4gc3BsaWNlKEB7JHNlbGYtPnsnZGF0YSd9fSwgJGkpOworCX0KKwkkc2VsZi0+e2l9ID0gJGkgKyAxOworCXJldHVybiAkc2VsZi0+eydkYXRhJ30tPlsgJGkgXTsKK30KKworc3ViIENMT1NFIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCWRlbGV0ZSAkc2VsZi0+e2RhdGF9OworCWRlbGV0ZSAkc2VsZi0+e2l9OworfQorCitzdWIgRU9GIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCXJldHVybiAoJHNlbGYtPntpfSA+PSBzY2FsYXIgQHskc2VsZi0+e2RhdGF9fSk7Cit9CisKKworMTsgIyBGYW1vdXMgbGFzdCB3b3JkcwpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvSTE4Ti5wbSBiL3BlcmwvR2l0L0kxOE4ucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4OWZkNgotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0L0kxOE4ucG0KQEAgLTAsMCArMSw5OCBAQAorcGFja2FnZSBHaXQ6OkkxOE47Cit1c2UgNS4wMDg7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworQkVHSU4geworCXJlcXVpcmUgRXhwb3J0ZXI7CisJaWYgKCRdIDwgNS4wMDgwMDMpIHsKKwkJKmltcG9ydCA9IFwmRXhwb3J0ZXI6OmltcG9ydDsKKwl9IGVsc2UgeworCQkjIEV4cG9ydGVyIDUuNTcgd2hpY2ggc3VwcG9ydHMgdGhpcyBpbnZvY2F0aW9uIHdhcworCQkjIHJlbGVhc2VkIHdpdGggcGVybCA1LjguMworCQlFeHBvcnRlci0+aW1wb3J0KCdpbXBvcnQnKTsKKwl9Cit9CisKK291ciBARVhQT1JUID0gcXcoX18pOworb3VyIEBFWFBPUlRfT0sgPSBARVhQT1JUOworCitzdWIgX19ib290c3RyYXBfbG9jYWxlX21lc3NhZ2VzIHsKKwlvdXIgJFRFWFRET01BSU4gPSAnZ2l0JzsKKwlvdXIgJFRFWFRET01BSU5ESVIgPSAkRU5We0dJVF9URVhURE9NQUlORElSfSB8fCAnKytMT0NBTEVESVIrKyc7CisKKwlyZXF1aXJlIFBPU0lYOworCVBPU0lYLT5pbXBvcnQocXcoc2V0bG9jYWxlKSk7CisJIyBOb24tY29yZSBwcmVyZXF1aXNpdGUgbW9kdWxlCisJcmVxdWlyZSBMb2NhbGU6Ok1lc3NhZ2VzOworCUxvY2FsZTo6TWVzc2FnZXMtPmltcG9ydChxdyg6bG9jYWxlX2ggOmxpYmludGxfaCkpOworCisJc2V0bG9jYWxlKExDX01FU1NBR0VTKCksICcnKTsKKwlzZXRsb2NhbGUoTENfQ1RZUEUoKSwgJycpOworCXRleHRkb21haW4oJFRFWFRET01BSU4pOworCWJpbmR0ZXh0ZG9tYWluKCRURVhURE9NQUlOID0+ICRURVhURE9NQUlORElSKTsKKworCXJldHVybjsKK30KKworQkVHSU4KK3sKKwkjIFVzZWQgYnkgb3VyIHRlc3Qgc2NyaXB0IHRvIHNlZSBpZiBpdCBzaG91bGQgdGVzdCBmYWxsYmFja3Mgb3IKKwkjIG5vdC4KKwlvdXIgJF9fSEFTX0xJQlJBUlkgPSAxOworCisJbG9jYWwgJEA7CisJZXZhbCB7CisJCV9fYm9vdHN0cmFwX2xvY2FsZV9tZXNzYWdlcygpOworCQkqX18gPSBcJkxvY2FsZTo6TWVzc2FnZXM6OmdldHRleHQ7CisJCTE7CisJfSBvciBkbyB7CisJCSMgVGVsbCB0ZXN0LnBsIHRoYXQgd2UgY291bGRuJ3QgbG9hZCB0aGUgZ2V0dGV4dCBsaWJyYXJ5LgorCQkkR2l0OjpJMThOOjpfX0hBU19MSUJSQVJZID0gMDsKKworCQkjIEp1c3QgYSBmYWxsLXRocm91Z2ggbm8tb3AKKwkJKl9fID0gc3ViICgkKSB7ICRfWzBdIH07CisJfTsKK30KKworMTsKKworX19FTkRfXworCis9aGVhZDEgTkFNRQorCitHaXQ6OkkxOE4gLSBQZXJsIGludGVyZmFjZSB0byBHaXQncyBHZXR0ZXh0IGxvY2FsaXphdGlvbnMKKworPWhlYWQxIFNZTk9QU0lTCisKKwl1c2UgR2l0OjpJMThOOworCisJcHJpbnQgX18oIldlbGNvbWUgdG8gR2l0IVxuIik7CisKKwlwcmludGYgX18oIlRoZSBmb2xsb3dpbmcgZXJyb3Igb2NjdXJyZWQ6ICVzXG4iKSwgJGVycm9yOworCis9aGVhZDEgREVTQ1JJUFRJT04KKworR2l0J3MgaW50ZXJuYWwgUGVybCBpbnRlcmZhY2UgdG8gZ2V0dGV4dCB2aWEgTDxMb2NhbGU6Ok1lc3NhZ2VzPi4gSWYKK0w8TG9jYWxlOjpNZXNzYWdlcz4gY2FuJ3QgYmUgbG9hZGVkIChpdCdzIG5vdCBhIGNvcmUgbW9kdWxlKSB3ZQorcHJvdmlkZSBzdHViIHBhc3N0aHJvdWdoIGZhbGxiYWNrcy4KKworVGhpcyBpcyBhIGRpc3RpbGxlZCBpbnRlcmZhY2UgdG8gZ2V0dGV4dCwgc2VlIEM8aW5mbyAnKGdldHRleHQpUGVybCc+Citmb3IgdGhlIGZ1bGwgaW50ZXJmYWNlLiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIG9ubHkgYSBzbWFsbCBwYXJ0IG9mCitpdC4KKworPWhlYWQxIEZVTkNUSU9OUworCis9aGVhZDIgX18oJCkKKworTDxMb2NhbGU6Ok1lc3NhZ2VzPidzIGdldHRleHQgZnVuY3Rpb24gaWYgYWxsIGdvZXMgd2VsbCwgb3RoZXJ3aXNlIG91cgorcGFzc3Rocm91Z2ggZmFsbGJhY2sgZnVuY3Rpb24uCisKKz1oZWFkMSBBVVRIT1IKKworRTxBRWxpZz52YXIgQXJuZmpFPG91bWw+ckU8ZXRoPiBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisKKz1oZWFkMSBDT1BZUklHSFQKKworQ29weXJpZ2h0IDIwMTAgRTxBRWxpZz52YXIgQXJuZmpFPG91bWw+ckU8ZXRoPiBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisKKz1jdXQKZGlmZiAtLWdpdCBhL3BlcmwvR2l0L0luZGV4SW5mby5wbSBiL3BlcmwvR2l0L0luZGV4SW5mby5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDMxMDhjCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQvSW5kZXhJbmZvLnBtCkBAIC0wLDAgKzEsMzMgQEAKK3BhY2thZ2UgR2l0OjpJbmRleEluZm87Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIEdpdCBxdy9jb21tYW5kX2lucHV0X3BpcGUgY29tbWFuZF9jbG9zZV9waXBlLzsKKworc3ViIG5ldyB7CisJbXkgKCRjbGFzcykgPSBAXzsKKwlteSAoJGd1aSwgJGN0eCkgPSBjb21tYW5kX2lucHV0X3BpcGUocXcvdXBkYXRlLWluZGV4IC16IC0taW5kZXgtaW5mby8pOworCWJsZXNzIHsgZ3VpID0+ICRndWksIGN0eCA9PiAkY3R4LCBuciA9PiAwfSwgJGNsYXNzOworfQorCitzdWIgcmVtb3ZlIHsKKwlteSAoJHNlbGYsICRwYXRoKSA9IEBfOworCWlmIChwcmludCB7ICRzZWxmLT57Z3VpfSB9ICcwICcsIDAgeCA0MCwgIlx0IiwgJHBhdGgsICJcMCIpIHsKKwkJcmV0dXJuICsrJHNlbGYtPntucn07CisJfQorCXVuZGVmOworfQorCitzdWIgdXBkYXRlIHsKKwlteSAoJHNlbGYsICRtb2RlLCAkaGFzaCwgJHBhdGgpID0gQF87CisJaWYgKHByaW50IHsgJHNlbGYtPntndWl9IH0gJG1vZGUsICcgJywgJGhhc2gsICJcdCIsICRwYXRoLCAiXDAiKSB7CisJCXJldHVybiArKyRzZWxmLT57bnJ9OworCX0KKwl1bmRlZjsKK30KKworc3ViIERFU1RST1kgeworCW15ICgkc2VsZikgPSBAXzsKKwljb21tYW5kX2Nsb3NlX3BpcGUoJHNlbGYtPntndWl9LCAkc2VsZi0+e2N0eH0pOworfQorCisxOwpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOLnBtIGIvcGVybC9HaXQvU1ZOLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MmZiN2UKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4ucG0KQEAgLTAsMCArMSwyNDU4IEBACitwYWNrYWdlIEdpdDo6U1ZOOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBGY250bCBxdy86REVGQVVMVCA6c2Vlay87Cit1c2UgY29uc3RhbnQgcmV2X21hcF9mbXQgPT4gJ05INDAnOwordXNlIHZhcnMgcXcvJF9ub19tZXRhZGF0YQorICAgICAgICAgICAgJF9yZXBhY2sgJF9yZXBhY2tfZmxhZ3MgJF91c2Vfc3ZtX3Byb3BzICRfaGVhZAorICAgICAgICAgICAgJF91c2Vfc3Zuc3luY19wcm9wcyAkbm9fcmV1c2VfZXhpc3RpbmcKKwkgICAgJF91c2VfbG9nX2F1dGhvciAkX2FkZF9hdXRob3JfZnJvbSAkX2xvY2FsdGltZS87Cit1c2UgQ2FycCBxdy9jcm9hay87Cit1c2UgRmlsZTo6UGF0aCBxdy9ta3BhdGgvOwordXNlIElQQzo6T3BlbjM7Cit1c2UgTWVtb2l6ZTsgICMgY29yZSBzaW5jZSA1LjguMCwgSnVsIDIwMDIKK3VzZSBQT1NJWCBxdyg6c2lnbmFsX2gpOwordXNlIFRpbWU6OkxvY2FsOworCit1c2UgR2l0IHF3KAorICAgIGNvbW1hbmQKKyAgICBjb21tYW5kX29uZWxpbmUKKyAgICBjb21tYW5kX25vaXN5CisgICAgY29tbWFuZF9vdXRwdXRfcGlwZQorICAgIGNvbW1hbmRfY2xvc2VfcGlwZQorICAgIGdldF90el9vZmZzZXQKKyk7Cit1c2UgR2l0OjpTVk46OlV0aWxzIHF3KAorCWZhdGFsCisJY2FuX2NvbXByZXNzCisJam9pbl9wYXRocworCWNhbm9uaWNhbGl6ZV9wYXRoCisJY2Fub25pY2FsaXplX3VybAorCWFkZF9wYXRoX3RvX3VybAorKTsKKworbXkgJG1lbW9fYmFja2VuZDsKK291ciAkX2ZvbGxvd19wYXJlbnQgID0gMTsKK291ciAkX21pbmltaXplX3VybCAgID0gJ3Vuc2V0JzsKK291ciAkZGVmYXVsdF9yZXBvX2lkID0gJ3N2bic7CitvdXIgJGRlZmF1bHRfcmVmX2lkICA9ICRFTlZ7R0lUX1NWTl9JRH0gfHwgJ2dpdC1zdm4nOworCitteSAoJF9nY19uciwgJF9nY19wZXJpb2QpOworCisjIHByb3BlcnRpZXMgdGhhdCB3ZSBkbyBub3QgbG9nOgorbXkgJVNLSVBfUFJPUDsKK0JFR0lOIHsKKwklU0tJUF9QUk9QID0gbWFwIHsgJF8gPT4gMSB9IHF3L3N2bjp3YzpyYV9kYXY6dmVyc2lvbi11cmwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2bjpzcGVjaWFsIHN2bjpleGVjdXRhYmxlCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm46ZW50cnk6Y29tbWl0dGVkLXJldgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuOmVudHJ5Omxhc3QtYXV0aG9yCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdm46ZW50cnk6dXVpZAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuOmVudHJ5OmNvbW1pdHRlZC1kYXRlLzsKKworCSMgc29tZSBvcHRpb25zIGFyZSByZWFkIGdsb2JhbGx5LCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gbG9jYWxseQorCSMgcGVyIFtzdm4tcmVtb3RlICIuLi4iXSBzZWN0aW9uLiAgQ29tbWFuZC1saW5lIG9wdGlvbnMgd2lsbCAqTk9UKgorCSMgb3ZlcnJpZGUgb3B0aW9ucyBzZXQgaW4gYW4gW3N2bi1yZW1vdGUgIi4uLiJdIHNlY3Rpb24KKwlubyBzdHJpY3QgJ3JlZnMnOworCWZvciBteSAkb3B0aW9uIChxdy9mb2xsb3dfcGFyZW50IG5vX21ldGFkYXRhIHVzZV9zdm1fcHJvcHMKKwkJCSAgIHVzZV9zdm5zeW5jX3Byb3BzLykgeworCQlteSAka2V5ID0gJG9wdGlvbjsKKwkJJGtleSA9fiB0ci9fLy9kOworCQlteSAkcHJvcCA9ICItJG9wdGlvbiI7CisJCSokb3B0aW9uID0gc3ViIHsKKwkJCW15ICgkc2VsZikgPSBAXzsKKwkJCXJldHVybiAkc2VsZi0+eyRwcm9wfSBpZiBleGlzdHMgJHNlbGYtPnskcHJvcH07CisJCQlteSAkayA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0uJGtleSI7CisJCQlldmFsIHsgY29tbWFuZF9vbmVsaW5lKHF3L2NvbmZpZyAtLWdldC8sICRrKSB9OworCQkJaWYgKCRAKSB7CisJCQkJJHNlbGYtPnskcHJvcH0gPSAkeyJHaXQ6OlNWTjo6XyRvcHRpb24ifTsKKwkJCX0gZWxzZSB7CisJCQkJbXkgJHYgPSBjb21tYW5kX29uZWxpbmUocXcvY29uZmlnIC0tYm9vbC8sJGspOworCQkJCSRzZWxmLT57JHByb3B9ID0gJHYgZXEgJ2ZhbHNlJyA/IDAgOiAxOworCQkJfQorCQkJcmV0dXJuICRzZWxmLT57JHByb3B9OworCQl9CisJfQorfQorCisKK215ICglTE9DS0ZJTEVTLCAlSU5ERVhfRklMRVMpOworRU5EIHsKKwl1bmxpbmsga2V5cyAlTE9DS0ZJTEVTIGlmICVMT0NLRklMRVM7CisJdW5saW5rIGtleXMgJUlOREVYX0ZJTEVTIGlmICVJTkRFWF9GSUxFUzsKK30KKworc3ViIHJlc29sdmVfbG9jYWxfZ2xvYnMgeworCW15ICgkdXJsLCAkZmV0Y2gsICRnbG9iX3NwZWMpID0gQF87CisJcmV0dXJuIHVubGVzcyBkZWZpbmVkICRnbG9iX3NwZWM7CisJbXkgJHJlZiA9ICRnbG9iX3NwZWMtPntyZWZ9OworCW15ICRwYXRoID0gJGdsb2Jfc3BlYy0+e3BhdGh9OworCWZvcmVhY2ggKGNvbW1hbmQocXcjZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSUocmVmbmFtZSkgcmVmcy8jKSkgeworCQluZXh0IHVubGVzcyBtI14kcmVmLT57cmVnZXh9JCM7CisJCW15ICRwID0gJDE7CisJCW15ICRwYXRobmFtZSA9IGRlc2FuaXRpemVfcmVmbmFtZSgkcGF0aC0+ZnVsbF9wYXRoKCRwKSk7CisJCW15ICRyZWZuYW1lID0gZGVzYW5pdGl6ZV9yZWZuYW1lKCRyZWYtPmZ1bGxfcGF0aCgkcCkpOworCQlpZiAobXkgJGV4aXN0aW5nID0gJGZldGNoLT57JHBhdGhuYW1lfSkgeworCQkJaWYgKCRleGlzdGluZyBuZSAkcmVmbmFtZSkgeworCQkJCWRpZSAiUmVmc3BlYyBjb25mbGljdDpcbiIsCisJCQkJICAgICJleGlzdGluZzogJGV4aXN0aW5nXG4iLAorCQkJCSAgICAiIGdsb2JiZWQ6ICRyZWZuYW1lXG4iOworCQkJfQorCQkJbXkgJHUgPSAoOjpjbXRfbWV0YWRhdGEoIiRyZWZuYW1lIikpWzBdOworCQkJJHUgPX4gcyFeXFEkdXJsXEUoL3wkKSEhIG9yIGRpZQorCQkJICAiJHJlZm5hbWU6ICckdXJsJyBub3QgZm91bmQgaW4gJyR1J1xuIjsKKwkJCWlmICgkcGF0aG5hbWUgbmUgJHUpIHsKKwkJCQl3YXJuICJXOiBSZWZzcGVjIGdsb2IgY29uZmxpY3QgIiwKKwkJCQkgICAgICIocmVmOiAkcmVmbmFtZSk6XG4iLAorCQkJCSAgICAgImV4cGVjdGVkIHBhdGg6ICRwYXRobmFtZVxuIiwKKwkJCQkgICAgICIgICAgcmVhbCBwYXRoOiAkdVxuIiwKKwkJCQkgICAgICJDb250aW51aW5nIGFoZWFkIHdpdGggJHVcbiI7CisJCQkJbmV4dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCSRmZXRjaC0+eyRwYXRobmFtZX0gPSAkcmVmbmFtZTsKKwkJfQorCX0KK30KKworc3ViIHBhcnNlX3JldmlzaW9uX2FyZ3VtZW50IHsKKwlteSAoJGJhc2UsICRoZWFkKSA9IEBfOworCWlmICghZGVmaW5lZCAkOjpfcmV2aXNpb24gfHwgJDo6X3JldmlzaW9uIGVxICdCQVNFOkhFQUQnKSB7CisJCXJldHVybiAoJGJhc2UsICRoZWFkKTsKKwl9CisJcmV0dXJuICgkMSwgJDIpIGlmICgkOjpfcmV2aXNpb24gPX4gL14oXGQrKTooXGQrKSQvKTsKKwlyZXR1cm4gKCQ6Ol9yZXZpc2lvbiwgJDo6X3JldmlzaW9uKSBpZiAoJDo6X3JldmlzaW9uID1+IC9eXGQrJC8pOworCXJldHVybiAoJGhlYWQsICRoZWFkKSBpZiAoJDo6X3JldmlzaW9uIGVxICdIRUFEJyk7CisJcmV0dXJuICgkYmFzZSwgJDEpIGlmICgkOjpfcmV2aXNpb24gPX4gL15CQVNFOihcZCspJC8pOworCXJldHVybiAoJDEsICRoZWFkKSBpZiAoJDo6X3JldmlzaW9uID1+IC9eKFxkKyk6SEVBRCQvKTsKKwlkaWUgInJldmlzaW9uIGFyZ3VtZW50OiAkOjpfcmV2aXNpb24gbm90IHVuZGVyc3Rvb2QgYnkgZ2l0LXN2blxuIjsKK30KKworc3ViIGZldGNoX2FsbCB7CisJbXkgKCRyZXBvX2lkLCAkcmVtb3RlcykgPSBAXzsKKwlpZiAocmVmICRyZXBvX2lkKSB7CisJCW15ICRncyA9ICRyZXBvX2lkOworCQkkcmVwb19pZCA9IHVuZGVmOworCQkkcmVwb19pZCA9ICRncy0+e3JlcG9faWR9OworCX0KKwkkcmVtb3RlcyB8fD0gcmVhZF9hbGxfcmVtb3RlcygpOworCW15ICRyZW1vdGUgPSAkcmVtb3Rlcy0+eyRyZXBvX2lkfSBvcgorCSAgICAgICAgICAgICBkaWUgIltzdm4tcmVtb3RlIFwiJHJlcG9faWRcIl0gdW5rbm93blxuIjsKKwlteSAkZmV0Y2ggPSAkcmVtb3RlLT57ZmV0Y2h9OworCW15ICR1cmwgPSAkcmVtb3RlLT57dXJsfSBvciBkaWUgInN2bi1yZW1vdGUuJHJlcG9faWQudXJsIG5vdCBkZWZpbmVkXG4iOworCW15IChAZ3MsIEBnbG9icyk7CisJbXkgJHJhID0gR2l0OjpTVk46OlJhLT5uZXcoJHVybCk7CisJbXkgJHV1aWQgPSAkcmEtPmdldF91dWlkOworCW15ICRoZWFkID0gJHJhLT5nZXRfbGF0ZXN0X3Jldm51bTsKKworCSMgaWdub3JlIGVycm9ycywgJGhlYWQgcmV2aXNpb24gbWF5IG5vdCBldmVuIGV4aXN0IGFueW1vcmUKKwlldmFsIHsgJHJhLT5nZXRfbG9nKCIiLCAkaGVhZCwgMCwgMSwgMCwgMSwgc3ViIHsgJGhlYWQgPSAkX1sxXSB9KSB9OworCXdhcm4gIlc6ICRAXG4iIGlmICRAOworCisJbXkgJGJhc2UgPSBkZWZpbmVkICRmZXRjaCA/ICRoZWFkIDogMDsKKworCSMgcmVhZCB0aGUgbWF4IHJldnMgZm9yIHdpbGRjYXJkIGV4cGFuc2lvbiAoYnJhbmNoZXMvKiwgdGFncy8qKQorCWZvcmVhY2ggbXkgJHQgKHF3L2JyYW5jaGVzIHRhZ3MvKSB7CisJCWRlZmluZWQgJHJlbW90ZS0+eyR0fSBvciBuZXh0OworCQlwdXNoIEBnbG9icywgQHskcmVtb3RlLT57JHR9fTsKKworCQlteSAkbWF4X3JldiA9IGV2YWwgeyB0bXBfY29uZmlnKHF3Ly0taW50IC0tZ2V0LywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICJzdm4tcmVtb3RlLiRyZXBvX2lkLiR7dH0tbWF4UmV2IikgfTsKKwkJaWYgKGRlZmluZWQgJG1heF9yZXYgJiYgKCRtYXhfcmV2IDwgJGJhc2UpKSB7CisJCQkkYmFzZSA9ICRtYXhfcmV2OworCQl9IGVsc2lmICghZGVmaW5lZCAkbWF4X3JldikgeworCQkJJGJhc2UgPSAwOworCQl9CisJfQorCisJaWYgKCRmZXRjaCkgeworCQlmb3JlYWNoIG15ICRwIChzb3J0IGtleXMgJSRmZXRjaCkgeworCQkJbXkgJGdzID0gR2l0OjpTVk4tPm5ldygkZmV0Y2gtPnskcH0sICRyZXBvX2lkLCAkcCk7CisJCQlteSAkbHIgPSAkZ3MtPnJldl9tYXBfbWF4OworCQkJaWYgKGRlZmluZWQgJGxyKSB7CisJCQkJJGJhc2UgPSAkbHIgaWYgKCRsciA8ICRiYXNlKTsKKwkJCX0KKwkJCXB1c2ggQGdzLCAkZ3M7CisJCX0KKwl9CisKKwkoJGJhc2UsICRoZWFkKSA9IHBhcnNlX3JldmlzaW9uX2FyZ3VtZW50KCRiYXNlLCAkaGVhZCk7CisJJHJhLT5nc19mZXRjaF9sb29wX2NvbW1vbigkYmFzZSwgJGhlYWQsIFxAZ3MsIFxAZ2xvYnMpOworfQorCitzdWIgcmVhZF9hbGxfcmVtb3RlcyB7CisJbXkgJHIgPSB7fTsKKwlteSAkdXNlX3N2bV9wcm9wcyA9IGV2YWwgeyBjb21tYW5kX29uZWxpbmUocXcvY29uZmlnIC0tYm9vbAorCSAgICBzdm4udXNlU3ZtUHJvcHMvKSB9OworCSR1c2Vfc3ZtX3Byb3BzID0gJHVzZV9zdm1fcHJvcHMgZXEgJ3RydWUnIGlmICR1c2Vfc3ZtX3Byb3BzOworCW15ICRzdm5fcmVmc3BlYyA9IHFye1xzKiguKj8pXHMqOlxzKiguKz8pXHMqfTsKKwlmb3JlYWNoIChncmVwIHsgcy9ec3ZuLXJlbW90ZVwuLy8gfSBjb21tYW5kKHF3L2NvbmZpZyAtbC8pKSB7CisJCWlmIChtIV4oLispXC5mZXRjaD0kc3ZuX3JlZnNwZWMkISkgeworCQkJbXkgKCRyZW1vdGUsICRsb2NhbF9yZWYsICRyZW1vdGVfcmVmKSA9ICgkMSwgJDIsICQzKTsKKwkJCWRpZSgic3ZuLXJlbW90ZS4kcmVtb3RlOiByZW1vdGUgcmVmICckcmVtb3RlX3JlZicgIgorCQkJICAgIC4gIm11c3Qgc3RhcnQgd2l0aCAncmVmcy8nXG4iKQorCQkJCXVubGVzcyAkcmVtb3RlX3JlZiA9fiBte15yZWZzL307CisJCQkkbG9jYWxfcmVmID0gdXJpX2RlY29kZSgkbG9jYWxfcmVmKTsKKwkJCSRyLT57JHJlbW90ZX0tPntmZXRjaH0tPnskbG9jYWxfcmVmfSA9ICRyZW1vdGVfcmVmOworCQkJJHItPnskcmVtb3RlfS0+e3N2bX0gPSB7fSBpZiAkdXNlX3N2bV9wcm9wczsKKwkJfSBlbHNpZiAobSFeKC4rKVwudXNlc3ZtcHJvcHM9XHMqKC4qKVxzKiQhKSB7CisJCQkkci0+eyQxfS0+e3N2bX0gPSB7fTsKKwkJfSBlbHNpZiAobSFeKC4rKVwudXJsPVxzKiguKilccyokISkgeworCQkJJHItPnskMX0tPnt1cmx9ID0gY2Fub25pY2FsaXplX3VybCgkMik7CisJCX0gZWxzaWYgKG0hXiguKylcLnB1c2h1cmw9XHMqKC4qKVxzKiQhKSB7CisJCQkkci0+eyQxfS0+e3B1c2h1cmx9ID0gY2Fub25pY2FsaXplX3VybCgkMik7CisJCX0gZWxzaWYgKG0hXiguKylcLmlnbm9yZS1yZWZzPVxzKiguKilccyokISkgeworCQkJJHItPnskMX0tPntpZ25vcmVfcmVmc19yZWdleH0gPSAkMjsKKwkJfSBlbHNpZiAobSFeKC4rKVwuKGJyYW5jaGVzfHRhZ3MpPSRzdm5fcmVmc3BlYyQhKSB7CisJCQlteSAoJHJlbW90ZSwgJHQsICRsb2NhbF9yZWYsICRyZW1vdGVfcmVmKSA9CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCQxLCAkMiwgJDMsICQ0KTsKKwkJCWRpZSgic3ZuLXJlbW90ZS4kcmVtb3RlOiByZW1vdGUgcmVmICckcmVtb3RlX3JlZicgKCR0KSAiCisJCQkgICAgLiAibXVzdCBzdGFydCB3aXRoICdyZWZzLydcbiIpCisJCQkJdW5sZXNzICRyZW1vdGVfcmVmID1+IG17XnJlZnMvfTsKKwkJCSRsb2NhbF9yZWYgPSB1cmlfZGVjb2RlKCRsb2NhbF9yZWYpOworCisJCQlyZXF1aXJlIEdpdDo6U1ZOOjpHbG9iU3BlYzsKKwkJCW15ICRycyA9IHsKKwkJCSAgICB0ID0+ICR0LAorCQkJICAgIHJlbW90ZSA9PiAkcmVtb3RlLAorCQkJICAgIHBhdGggPT4gR2l0OjpTVk46Okdsb2JTcGVjLT5uZXcoJGxvY2FsX3JlZiwgMSksCisJCQkgICAgcmVmID0+IEdpdDo6U1ZOOjpHbG9iU3BlYy0+bmV3KCRyZW1vdGVfcmVmLCAwKSB9OworCQkJaWYgKGxlbmd0aCgkcnMtPntyZWZ9LT57cmlnaHR9KSAhPSAwKSB7CisJCQkJZGllICJUaGUgJyonIGdsb2IgY2hhcmFjdGVyIG11c3QgYmUgdGhlIGxhc3QgIiwKKwkJCQkgICAgImNoYXJhY3RlciBvZiAnJHJlbW90ZV9yZWYnXG4iOworCQkJfQorCQkJcHVzaCBAeyAkci0+eyRyZW1vdGV9LT57JHR9IH0sICRyczsKKwkJfQorCX0KKworCW1hcCB7CisJCWlmIChkZWZpbmVkICRyLT57JF99LT57c3ZtfSkgeworCQkJbXkgJHN2bTsKKwkJCWV2YWwgeworCQkJCW15ICRzZWN0aW9uID0gInN2bi1yZW1vdGUuJF8iOworCQkJCSRzdm0gPSB7CisJCQkJCXNvdXJjZSA9PiB0bXBfY29uZmlnKCctLWdldCcsCisJCQkJCSAgICAiJHNlY3Rpb24uc3ZtLXNvdXJjZSIpLAorCQkJCQlyZXBsYWNlID0+IHRtcF9jb25maWcoJy0tZ2V0JywKKwkJCQkJICAgICIkc2VjdGlvbi5zdm0tcmVwbGFjZSIpLAorCQkJCX0KKwkJCX07CisJCQkkci0+eyRffS0+e3N2bX0gPSAkc3ZtOworCQl9CisJfSBrZXlzICUkcjsKKworCWZvcmVhY2ggbXkgJHJlbW90ZSAoa2V5cyAlJHIpIHsKKwkJZm9yZWFjaCAoIGdyZXAgeyBkZWZpbmVkICRfIH0KKwkJCSAgbWFwIHsgJHItPnskcmVtb3RlfS0+eyRffSB9IHF3KGJyYW5jaGVzIHRhZ3MpICkgeworCQkJZm9yZWFjaCBteSAkcnMgKCBAJF8gKSB7CisJCQkJJHJzLT57aWdub3JlX3JlZnNfcmVnZXh9ID0KKwkJCQkgICAgJHItPnskcmVtb3RlfS0+e2lnbm9yZV9yZWZzX3JlZ2V4fTsKKwkJCX0KKwkJfQorCX0KKworCSRyOworfQorCitzdWIgaW5pdF92YXJzIHsKKwkkX2djX25yID0gJF9nY19wZXJpb2QgPSAxMDAwOworCWlmIChkZWZpbmVkICRfcmVwYWNrIHx8IGRlZmluZWQgJF9yZXBhY2tfZmxhZ3MpIHsKKwkgICAgICAgd2FybiAiUmVwYWNrIG9wdGlvbnMgYXJlIG9ic29sZXRlOyB0aGV5IGhhdmUgbm8gZWZmZWN0LlxuIjsKKwl9Cit9CisKK3N1YiB2ZXJpZnlfcmVtb3Rlc19zYW5pdHkgeworCXJldHVybiB1bmxlc3MgLWQgJEVOVntHSVRfRElSfTsKKwlteSAlc2VlbjsKKwlmb3JlYWNoIChjb21tYW5kKHF3L2NvbmZpZyAtbC8pKSB7CisJCWlmIChtIV5zdm4tcmVtb3RlXC4oPzouKylcLmZldGNoPS4qOnJlZnMvcmVtb3Rlcy8oXFMrKVxzKiQhKSB7CisJCQlpZiAoJHNlZW57JDF9KSB7CisJCQkJZGllICJSZW1vdGUgcmVmIHJlZnMvcmVtb3RlLyQxIGlzIHRyYWNrZWQgYnkiLAorCQkJCSAgICAiXG4gIFwiJF9cIlxuYW5kXG4gIFwiJHNlZW57JDF9XCJcbiIsCisJCQkJICAgICJQbGVhc2UgcmVzb2x2ZSB0aGlzIGFtYmlndWl0eSBpbiAiLAorCQkJCSAgICAieW91ciBnaXQgY29uZmlndXJhdGlvbiBmaWxlIGJlZm9yZSAiLAorCQkJCSAgICAiY29udGludWluZ1xuIjsKKwkJCX0KKwkJCSRzZWVueyQxfSA9ICRfOworCQl9CisJfQorfQorCitzdWIgZmluZF9leGlzdGluZ19yZW1vdGUgeworCW15ICgkdXJsLCAkcmVtb3RlcykgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJG5vX3JldXNlX2V4aXN0aW5nOworCW15ICRleGlzdGluZzsKKwlmb3JlYWNoIG15ICRyZXBvX2lkIChrZXlzICUkcmVtb3RlcykgeworCQlteSAkdSA9ICRyZW1vdGVzLT57JHJlcG9faWR9LT57dXJsfSBvciBuZXh0OworCQluZXh0IGlmICR1IG5lICR1cmw7CisJCSRleGlzdGluZyA9ICRyZXBvX2lkOworCQlsYXN0OworCX0KKwkkZXhpc3Rpbmc7Cit9CisKK3N1YiBpbml0X3JlbW90ZV9jb25maWcgeworCW15ICgkc2VsZiwgJHVybCwgJG5vX3dyaXRlKSA9IEBfOworCSR1cmwgPSBjYW5vbmljYWxpemVfdXJsKCR1cmwpOworCW15ICRyID0gcmVhZF9hbGxfcmVtb3RlcygpOworCW15ICRleGlzdGluZyA9IGZpbmRfZXhpc3RpbmdfcmVtb3RlKCR1cmwsICRyKTsKKwlpZiAoJGV4aXN0aW5nKSB7CisJCXVubGVzcyAoJG5vX3dyaXRlKSB7CisJCQlwcmludCBTVERFUlIgIlVzaW5nIGV4aXN0aW5nICIsCisJCQkJICAgICAiW3N2bi1yZW1vdGUgXCIkZXhpc3RpbmdcIl1cbiI7CisJCX0KKwkJJHNlbGYtPntyZXBvX2lkfSA9ICRleGlzdGluZzsKKwl9IGVsc2lmICgkX21pbmltaXplX3VybCkgeworCQlteSAkbWluX3VybCA9IEdpdDo6U1ZOOjpSYS0+bmV3KCR1cmwpLT5taW5pbWl6ZV91cmw7CisJCSRleGlzdGluZyA9IGZpbmRfZXhpc3RpbmdfcmVtb3RlKCRtaW5fdXJsLCAkcik7CisJCWlmICgkZXhpc3RpbmcpIHsKKwkJCXVubGVzcyAoJG5vX3dyaXRlKSB7CisJCQkJcHJpbnQgU1RERVJSICJVc2luZyBleGlzdGluZyAiLAorCQkJCQkgICAgICJbc3ZuLXJlbW90ZSBcIiRleGlzdGluZ1wiXVxuIjsKKwkJCX0KKwkJCSRzZWxmLT57cmVwb19pZH0gPSAkZXhpc3Rpbmc7CisJCX0KKwkJaWYgKCRtaW5fdXJsIG5lICR1cmwpIHsKKwkJCXVubGVzcyAoJG5vX3dyaXRlKSB7CisJCQkJcHJpbnQgU1RERVJSICJVc2luZyBoaWdoZXIgbGV2ZWwgb2YgVVJMOiAiLAorCQkJCQkgICAgICIkdXJsID0+ICRtaW5fdXJsXG4iOworCQkJfQorCQkJbXkgJG9sZF9wYXRoID0gJHNlbGYtPnBhdGg7CisJCQkkdXJsID1+IHMhXlxRJG1pbl91cmxcRSgvfCQpISE7CisJCQkkdXJsID0gam9pbl9wYXRocygkdXJsLCAkb2xkX3BhdGgpOworCQkJJHNlbGYtPnBhdGgoJHVybCk7CisJCQkkdXJsID0gJG1pbl91cmw7CisJCX0KKwl9CisJbXkgJG9yaWdfdXJsOworCWlmICghJGV4aXN0aW5nKSB7CisJCSMgdmVyaWZ5IHRoYXQgd2UgYXJlbid0IG92ZXJ3cml0aW5nIGFueXRoaW5nOgorCQkkb3JpZ191cmwgPSBldmFsIHsKKwkJCWNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywKKwkJCQkJInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS51cmwiKQorCQl9OworCQlpZiAoJG9yaWdfdXJsICYmICgkb3JpZ191cmwgbmUgJHVybCkpIHsKKwkJCWRpZSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9LnVybCBhbHJlYWR5IHNldDogIiwKKwkJCSAgICAiJG9yaWdfdXJsXG53YW50ZWQgdG8gc2V0IHRvOiAkdXJsXG4iOworCQl9CisJfQorCW15ICgkeHJlcG9faWQsICR4cGF0aCkgPSBmaW5kX3JlZigkc2VsZi0+cmVmbmFtZSk7CisJaWYgKCEkbm9fd3JpdGUgJiYgZGVmaW5lZCAkeHBhdGgpIHsKKwkJZGllICJzdm4tcmVtb3RlLiR4cmVwb19pZC5mZXRjaCBhbHJlYWR5IHNldCB0byB0cmFjayAiLAorCQkgICAgIiR4cGF0aDoiLCAkc2VsZi0+cmVmbmFtZSwgIlxuIjsKKwl9CisJdW5sZXNzICgkbm9fd3JpdGUpIHsKKwkJY29tbWFuZF9ub2lzeSgnY29uZmlnJywKKwkJCSAgICAgICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0udXJsIiwgJHVybCk7CisJCW15ICRwYXRoID0gJHNlbGYtPnBhdGg7CisJCSRwYXRoID1+IHN7Xi99e307CisJCSRwYXRoID1+IHN7JShbMC05QS1GXXsyfSl9e2NociBoZXgoJDEpfWllZzsKKwkJJHNlbGYtPnBhdGgoJHBhdGgpOworCQljb21tYW5kX25vaXN5KCdjb25maWcnLCAnLS1hZGQnLAorCQkJICAgICAgInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS5mZXRjaCIsCisJCQkgICAgICAkc2VsZi0+cGF0aC4iOiIuJHNlbGYtPnJlZm5hbWUpOworCX0KKwkkc2VsZi0+dXJsKCR1cmwpOworfQorCitzdWIgZmluZF9ieV91cmwgeyAjIHJlcG9zX3Jvb3QgYW5kLCBwYXRoIGFyZSBvcHRpb25hbAorCW15ICgkY2xhc3MsICRmdWxsX3VybCwgJHJlcG9zX3Jvb3QsICRwYXRoKSA9IEBfOworCisJJGZ1bGxfdXJsID0gY2Fub25pY2FsaXplX3VybCgkZnVsbF91cmwpOworCisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRmdWxsX3VybDsKKwlyZW1vdmVfdXNlcm5hbWUoJGZ1bGxfdXJsKTsKKwlyZW1vdmVfdXNlcm5hbWUoJHJlcG9zX3Jvb3QpIGlmIGRlZmluZWQgJHJlcG9zX3Jvb3Q7CisJbXkgJHJlbW90ZXMgPSByZWFkX2FsbF9yZW1vdGVzKCk7CisJaWYgKGRlZmluZWQgJGZ1bGxfdXJsICYmIGRlZmluZWQgJHJlcG9zX3Jvb3QgJiYgIWRlZmluZWQgJHBhdGgpIHsKKwkJJHBhdGggPSAkZnVsbF91cmw7CisJCSRwYXRoID1+IHMjXlxRJHJlcG9zX3Jvb3RcRSg/Oi98JCkjIzsKKwl9CisJZm9yZWFjaCBteSAkcmVwb19pZCAoa2V5cyAlJHJlbW90ZXMpIHsKKwkJbXkgJHUgPSAkcmVtb3Rlcy0+eyRyZXBvX2lkfS0+e3VybH0gb3IgbmV4dDsKKwkJcmVtb3ZlX3VzZXJuYW1lKCR1KTsKKwkJbmV4dCBpZiBkZWZpbmVkICRyZXBvc19yb290ICYmICRyZXBvc19yb290IG5lICR1OworCisJCW15ICRmZXRjaCA9ICRyZW1vdGVzLT57JHJlcG9faWR9LT57ZmV0Y2h9IHx8IHt9OworCQlmb3JlYWNoIG15ICR0IChxdy9icmFuY2hlcyB0YWdzLykgeworCQkJZm9yZWFjaCBteSAkZ2xvYnNwZWMgKEB7JHJlbW90ZXMtPnskcmVwb19pZH0tPnskdH19KSB7CisJCQkJcmVzb2x2ZV9sb2NhbF9nbG9icygkdSwgJGZldGNoLCAkZ2xvYnNwZWMpOworCQkJfQorCQl9CisJCW15ICRwID0gJHBhdGg7CisJCW15ICRyd3IgPSByZXdyaXRlX3Jvb3Qoe3JlcG9faWQgPT4gJHJlcG9faWR9KTsKKwkJbXkgJHN2bSA9ICRyZW1vdGVzLT57JHJlcG9faWR9LT57c3ZtfQorCQkJaWYgZGVmaW5lZCAkcmVtb3Rlcy0+eyRyZXBvX2lkfS0+e3N2bX07CisJCXVubGVzcyAoZGVmaW5lZCAkcCkgeworCQkJJHAgPSAkZnVsbF91cmw7CisJCQlteSAkeiA9ICR1OworCQkJbXkgJHByZWZpeCA9ICcnOworCQkJaWYgKCRyd3IpIHsKKwkJCQkkeiA9ICRyd3I7CisJCQkJcmVtb3ZlX3VzZXJuYW1lKCR6KTsKKwkJCX0gZWxzaWYgKGRlZmluZWQgJHN2bSkgeworCQkJCSR6ID0gJHN2bS0+e3NvdXJjZX07CisJCQkJJHByZWZpeCA9ICRzdm0tPntyZXBsYWNlfTsKKwkJCQkkcHJlZml4ID1+IHMjXlxRJHVcRSg/Oi98JCkjIzsKKwkJCQkkcHJlZml4ID1+IHMjLyQjIzsKKwkJCX0KKwkJCSRwID1+IHMjXlxRJHpcRSg/Oi98JCkjJHByZWZpeCMgb3IgbmV4dDsKKwkJfQorCisJCSMgcmVtb3RlIGZldGNoIHBhdGhzIGFyZSBub3QgVVJJIGVzY2FwZWQuICBEZWNvZGUgb3VycworCQkjIHNvIHRoZXkgbWF0Y2gKKwkJJHAgPSB1cmlfZGVjb2RlKCRwKTsKKworCQlmb3JlYWNoIG15ICRmIChrZXlzICUkZmV0Y2gpIHsKKwkJCW5leHQgaWYgJGYgbmUgJHA7CisJCQlyZXR1cm4gR2l0OjpTVk4tPm5ldygkZmV0Y2gtPnskZn0sICRyZXBvX2lkLCAkZik7CisJCX0KKwl9CisJdW5kZWY7Cit9CisKK3N1YiBpbml0IHsKKwlteSAoJGNsYXNzLCAkdXJsLCAkcGF0aCwgJHJlcG9faWQsICRyZWZfaWQsICRub193cml0ZSkgPSBAXzsKKwlteSAkc2VsZiA9IF9uZXcoJGNsYXNzLCAkcmVwb19pZCwgJHJlZl9pZCwgJHBhdGgpOworCWlmIChkZWZpbmVkICR1cmwpIHsKKwkJJHNlbGYtPmluaXRfcmVtb3RlX2NvbmZpZygkdXJsLCAkbm9fd3JpdGUpOworCX0KKwkkc2VsZjsKK30KKworc3ViIGZpbmRfcmVmIHsKKwlteSAoJHJlZl9pZCkgPSBAXzsKKwlmb3JlYWNoIChjb21tYW5kKHF3L2NvbmZpZyAtbC8pKSB7CisJCW5leHQgdW5sZXNzIG0hXnN2bi1yZW1vdGVcLiguKylcLmZldGNoPQorCQkgICAgICAgICAgICAgIFxzKiguKj8pXHMqOlxzKiguKz8pXHMqJCF4OworCQlteSAoJHJlcG9faWQsICRwYXRoLCAkcmVmKSA9ICgkMSwgJDIsICQzKTsKKwkJaWYgKCRyZWYgZXEgJHJlZl9pZCkgeworCQkJJHBhdGggPSAnJyBpZiAoJHBhdGggPX4gbSNeXC4vPyMpOworCQkJcmV0dXJuICgkcmVwb19pZCwgJHBhdGgpOworCQl9CisJfQorCSh1bmRlZiwgdW5kZWYsIHVuZGVmKTsKK30KKworc3ViIG5ldyB7CisJbXkgKCRjbGFzcywgJHJlZl9pZCwgJHJlcG9faWQsICRwYXRoKSA9IEBfOworCWlmIChkZWZpbmVkICRyZWZfaWQgJiYgIWRlZmluZWQgJHJlcG9faWQgJiYgIWRlZmluZWQgJHBhdGgpIHsKKwkJKCRyZXBvX2lkLCAkcGF0aCkgPSBmaW5kX3JlZigkcmVmX2lkKTsKKwkJaWYgKCFkZWZpbmVkICRyZXBvX2lkKSB7CisJCQlkaWUgIkNvdWxkIG5vdCBmaW5kIGEgXCJzdm4tcmVtb3RlLiouZmV0Y2hcIiBrZXkgIiwKKwkJCSAgICAiaW4gdGhlIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBtYXRjaGluZzogIiwKKwkJCSAgICAiJHJlZl9pZFxuIjsKKwkJfQorCX0KKwlteSAkc2VsZiA9IF9uZXcoJGNsYXNzLCAkcmVwb19pZCwgJHJlZl9pZCwgJHBhdGgpOworCWlmICghZGVmaW5lZCAkc2VsZi0+cGF0aCB8fCAhbGVuZ3RoICRzZWxmLT5wYXRoKSB7CisJCW15ICRmZXRjaCA9IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdm4tcmVtb3RlLiRyZXBvX2lkLmZldGNoIiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6JHJlZl9pZFwkIikgb3IKKwkJICAgICBkaWUgIkZhaWxlZCB0byByZWFkIFwic3ZuLXJlbW90ZS4kcmVwb19pZC5mZXRjaFwiICIsCisJCSAgICAgICAgICJcIjokcmVmX2lkXCRcIiBpbiBjb25maWdcbiI7CisJCW15KCRwYXRoKSA9IHNwbGl0KC9ccyo6XHMqLywgJGZldGNoKTsKKwkJJHNlbGYtPnBhdGgoJHBhdGgpOworCX0KKwl7CisJCW15ICRwYXRoID0gJHNlbGYtPnBhdGg7CisJCSRwYXRoID1+IHN7XEEvfXt9OworCQkkcGF0aCA9fiBzey9cen17fTsKKwkJJHNlbGYtPnBhdGgoJHBhdGgpOworCX0KKwlteSAkdXJsID0gY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgInN2bi1yZW1vdGUuJHJlcG9faWQudXJsIikgb3IKKyAgICAgICAgICAgICAgICAgIGRpZSAiRmFpbGVkIHRvIHJlYWQgXCJzdm4tcmVtb3RlLiRyZXBvX2lkLnVybFwiIGluIGNvbmZpZ1xuIjsKKwkkc2VsZi0+dXJsKCR1cmwpOworCSRzZWxmLT57cHVzaHVybH0gPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgInN2bi1yZW1vdGUuJHJlcG9faWQucHVzaHVybCIpIH07CisJJHNlbGYtPnJlYnVpbGQ7CisJJHNlbGY7Cit9CisKK3N1YiByZWZuYW1lIHsKKwlteSAoJHJlZm5hbWUpID0gJF9bMF0tPntyZWZfaWR9IDsKKworCSMgSXQgY2Fubm90IGVuZCB3aXRoIGEgc2xhc2ggLywgd2UnbGwgdGhyb3cgdXAgb24gdGhpcyBiZWNhdXNlCisJIyBTVk4gY2FuJ3QgaGF2ZSBkaXJlY3RvcmllcyB3aXRoIGEgc2xhc2ggaW4gdGhlaXIgbmFtZSwgZWl0aGVyOgorCWlmICgkcmVmbmFtZSA9fiBtey8kfSkgeworCQlkaWUgInJlZjogJyRyZWZuYW1lJyBlbmRzIHdpdGggYSB0cmFpbGluZyBzbGFzaDsgdGhpcyBpcyAiLAorCQkgICAgIm5vdCBwZXJtaXR0ZWQgYnkgZ2l0IG9yIFN1YnZlcnNpb25cbiI7CisJfQorCisJIyBJdCBjYW5ub3QgaGF2ZSBBU0NJSSBjb250cm9sIGNoYXJhY3RlciBzcGFjZSwgdGlsZGUgfiwgY2FyZXQgXiwKKwkjIGNvbG9uIDosIHF1ZXN0aW9uLW1hcmsgPywgYXN0ZXJpc2sgKiwgc3BhY2UsIG9yIG9wZW4gYnJhY2tldCBbCisJIyBhbnl3aGVyZS4KKwkjCisJIyBBZGRpdGlvbmFsbHksICUgbXVzdCBiZSBlc2NhcGVkIGJlY2F1c2UgaXQgaXMgdXNlZCBmb3IgZXNjYXBpbmcKKwkjIGFuZCB3ZSB3YW50IG91ciBlc2NhcGVkIHJlZm5hbWUgdG8gYmUgcmV2ZXJzaWJsZQorCSRyZWZuYW1lID1+IHN7KFsgXCV+XF46XD9cKlxbXHRdKX17c3ByaW50ZignJSUlMDJYJyxvcmQoJDEpKX1lZzsKKworCSMgbm8gc2xhc2gtc2VwYXJhdGVkIGNvbXBvbmVudCBjYW4gYmVnaW4gd2l0aCBhIGRvdCAuCisJIyAvLiogYmVjb21lcyAvJTJFKgorCSRyZWZuYW1lID1+IHN7L1wufXsvJTJFfWc7CisKKwkjIEl0IGNhbm5vdCBoYXZlIHR3byBjb25zZWN1dGl2ZSBkb3RzIC4uIGFueXdoZXJlCisJIyAuLiBiZWNvbWVzICUyRSUyRQorCSRyZWZuYW1lID1+IHN7XC5cLn17JTJFJTJFfWc7CisKKwkjIHRyYWlsaW5nIGRvdHMgYW5kIC5sb2NrIGFyZSBub3QgYWxsb3dlZAorCSMgLiQgYmVjb21lcyAlMkUgYW5kIC5sb2NrIGJlY29tZXMgJTJFbG9jaworCSRyZWZuYW1lID1+IHN7XC4oPz0kfGxvY2skKX17JTJFfTsKKworCSMgdGhlIHNlcXVlbmNlIEB7IGlzIHVzZWQgdG8gYWNjZXNzIHRoZSByZWZsb2cKKwkjIEB7IGJlY29tZXMgJTQweworCSRyZWZuYW1lID1+IHN7XEBce317JTQwXHt9ZzsKKworCXJldHVybiAkcmVmbmFtZTsKK30KKworc3ViIGRlc2FuaXRpemVfcmVmbmFtZSB7CisJbXkgKCRyZWZuYW1lKSA9IEBfOworCSRyZWZuYW1lID1+IHN7JSg/OihbMC05QS1GXXsyfSkpfXtjaHIgaGV4KCQxKX1lZzsKKwlyZXR1cm4gJHJlZm5hbWU7Cit9CisKK3N1YiBzdm1fdXVpZCB7CisJbXkgKCRzZWxmKSA9IEBfOworCXJldHVybiAkc2VsZi0+e3N2bX0tPnt1dWlkfSBpZiAkc2VsZi0+c3ZtOworCSRzZWxmLT5yYTsKKwl1bmxlc3MgKCRzZWxmLT57c3ZtfSkgeworCQlkaWUgIlNWTSBVVUlEIG5vdCBjYWNoZWQsIGFuZCByZWFkaW5nIHJlbW90ZWx5IGZhaWxlZFxuIjsKKwl9CisJJHNlbGYtPntzdm19LT57dXVpZH07Cit9CisKK3N1YiBzdm0geworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPntzdm19IGlmICRzZWxmLT57c3ZtfTsKKwlteSAkc3ZtOworCSMgc2VlIGlmIHdlIGhhdmUgaXQgaW4gb3VyIGNvbmZpZywgZmlyc3Q6CisJZXZhbCB7CisJCW15ICRzZWN0aW9uID0gInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfSI7CisJCSRzdm0gPSB7CisJCSAgc291cmNlID0+IHRtcF9jb25maWcoJy0tZ2V0JywgIiRzZWN0aW9uLnN2bS1zb3VyY2UiKSwKKwkJICB1dWlkID0+IHRtcF9jb25maWcoJy0tZ2V0JywgIiRzZWN0aW9uLnN2bS11dWlkIiksCisJCSAgcmVwbGFjZSA9PiB0bXBfY29uZmlnKCctLWdldCcsICIkc2VjdGlvbi5zdm0tcmVwbGFjZSIpLAorCQl9CisJfTsKKwlpZiAoJHN2bSAmJiAkc3ZtLT57c291cmNlfSAmJiAkc3ZtLT57dXVpZH0gJiYgJHN2bS0+e3JlcGxhY2V9KSB7CisJCSRzZWxmLT57c3ZtfSA9ICRzdm07CisJfQorCSRzZWxmLT57c3ZtfTsKK30KKworc3ViIF9zZXRfc3ZtX3ZhcnMgeworCW15ICgkc2VsZiwgJHJhKSA9IEBfOworCXJldHVybiAkcmEgaWYgJHNlbGYtPnN2bTsKKworCW15IEBlcnIgPSAoICJ1c2VTdm1Qcm9wcyBzZXQsIGJ1dCBmYWlsZWQgdG8gcmVhZCBTVk0gcHJvcGVydGllc1xuIiwKKwkJICAgICIoc3ZtOnNvdXJjZSwgc3ZtOnV1aWQpICIsCisJCSAgICAiZnJvbSB0aGUgZm9sbG93aW5nIFVSTHM6XG4iICk7CisJc3ViIHJlYWRfc3ZtX3Byb3BzIHsKKwkJbXkgKCRzZWxmLCAkcmEsICRwYXRoLCAkcikgPSBAXzsKKwkJbXkgJHByb3BzID0gKCRyYS0+Z2V0X2RpcigkcGF0aCwgJHIpKVsyXTsKKwkJbXkgJHNyYyA9ICRwcm9wcy0+eydzdm06c291cmNlJ307CisJCW15ICR1dWlkID0gJHByb3BzLT57J3N2bTp1dWlkJ307CisJCXJldHVybiB1bmRlZiBpZiAoISRzcmMgfHwgISR1dWlkKTsKKworCQljaG9tcCgkc3JjLCAkdXVpZCk7CisKKwkJJHV1aWQgPX4gbXteWzAtOWEtZlwtXXszMCx9JH1pCisJCSAgICBvciBkaWUgImRvZXNuJ3QgbG9vayByaWdodCAtIHN2bTp1dWlkIGlzICckdXVpZCdcbiI7CisKKwkJIyB0aGUgJyEnIGlzIHVzZWQgdG8gbWFyayB0aGUgcmVwb3Nfcm9vdCEvcmVsYXRpdmUvcGF0aAorCQkkc3JjID1+IHN7Lz8hLz99ey99OworCQkkc3JjID1+IHN7LyskfXt9OyAjIG5vIHRyYWlsaW5nIHNsYXNoZXMgcGxlYXNlCisJCSMgdXNlcm5hbWUgaXMgb2Ygbm8gaW50ZXJlc3QKKwkJJHNyYyA9fiBzeyheW2EtelwrXSo6Ly8pW14vQF0qQH17JDF9OworCisJCW15ICRyZXBsYWNlID0gYWRkX3BhdGhfdG9fdXJsKCRyYS0+dXJsLCAkcGF0aCk7CisKKwkJbXkgJHNlY3Rpb24gPSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9IjsKKwkJdG1wX2NvbmZpZygiJHNlY3Rpb24uc3ZtLXNvdXJjZSIsICRzcmMpOworCQl0bXBfY29uZmlnKCIkc2VjdGlvbi5zdm0tcmVwbGFjZSIsICRyZXBsYWNlKTsKKwkJdG1wX2NvbmZpZygiJHNlY3Rpb24uc3ZtLXV1aWQiLCAkdXVpZCk7CisJCSRzZWxmLT57c3ZtfSA9IHsKKwkJCXNvdXJjZSA9PiAkc3JjLAorCQkJdXVpZCA9PiAkdXVpZCwKKwkJCXJlcGxhY2UgPT4gJHJlcGxhY2UKKwkJfTsKKwl9CisKKwlteSAkciA9ICRyYS0+Z2V0X2xhdGVzdF9yZXZudW07CisJbXkgJHBhdGggPSAkc2VsZi0+cGF0aDsKKwlteSAldHJpZWQ7CisJd2hpbGUgKGxlbmd0aCAkcGF0aCkgeworCQlteSAkdHJ5ID0gYWRkX3BhdGhfdG9fdXJsKCRzZWxmLT51cmwsICRwYXRoKTsKKwkJdW5sZXNzICgkdHJpZWR7JHRyeX0pIHsKKwkJCXJldHVybiAkcmEgaWYgJHNlbGYtPnJlYWRfc3ZtX3Byb3BzKCRyYSwgJHBhdGgsICRyKTsKKwkJCSR0cmllZHskdHJ5fSA9IDE7CisJCX0KKwkJJHBhdGggPX4gcyMvP1teL10rJCMjOworCX0KKwlkaWUgIlBhdGg6ICckcGF0aCcgc2hvdWxkIGJlICcnXG4iIGlmICRwYXRoIG5lICcnOworCXJldHVybiAkcmEgaWYgJHNlbGYtPnJlYWRfc3ZtX3Byb3BzKCRyYSwgJHBhdGgsICRyKTsKKwkkdHJpZWR7IGFkZF9wYXRoX3RvX3VybCgkc2VsZi0+dXJsLCAkcGF0aCkgfSA9IDE7CisKKwlpZiAoJHJhLT57cmVwb3Nfcm9vdH0gZXEgJHNlbGYtPnVybCkgeworCQlkaWUgQGVyciwgKG1hcCB7ICIgICRfXG4iIH0ga2V5cyAldHJpZWQpLCAiXG4iOworCX0KKworCSMgbm9wZSwgbWFrZSBzdXJlIHdlJ3JlIGNvbm5lY3RlZCB0byB0aGUgcmVwb3NpdG9yeSByb290OgorCW15ICRvazsKKwlteSBAdHJpZWRfYjsKKwkkcGF0aCA9ICRyYS0+e3N2bl9wYXRofTsKKwkkcmEgPSBHaXQ6OlNWTjo6UmEtPm5ldygkcmEtPntyZXBvc19yb290fSk7CisJd2hpbGUgKGxlbmd0aCAkcGF0aCkgeworCQlteSAkdHJ5ID0gYWRkX3BhdGhfdG9fdXJsKCRyYS0+dXJsLCAkcGF0aCk7CisJCXVubGVzcyAoJHRyaWVkeyR0cnl9KSB7CisJCQkkb2sgPSAkc2VsZi0+cmVhZF9zdm1fcHJvcHMoJHJhLCAkcGF0aCwgJHIpOworCQkJbGFzdCBpZiAkb2s7CisJCQkkdHJpZWR7JHRyeX0gPSAxOworCQl9CisJCSRwYXRoID1+IHMjLz9bXi9dKyQjIzsKKwl9CisJZGllICJQYXRoOiAnJHBhdGgnIHNob3VsZCBiZSAnJ1xuIiBpZiAkcGF0aCBuZSAnJzsKKwkkb2sgfHw9ICRzZWxmLT5yZWFkX3N2bV9wcm9wcygkcmEsICRwYXRoLCAkcik7CisJJHRyaWVkeyBhZGRfcGF0aF90b191cmwoJHJhLT51cmwsICRwYXRoKSB9ID0gMTsKKwlpZiAoISRvaykgeworCQlkaWUgQGVyciwgKG1hcCB7ICIgICRfXG4iIH0ga2V5cyAldHJpZWQpLCAiXG4iOworCX0KKwlHaXQ6OlNWTjo6UmEtPm5ldygkc2VsZi0+dXJsKTsKK30KKworc3ViIHN2bnN5bmMgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPntzdm5zeW5jfSBpZiAkc2VsZi0+e3N2bnN5bmN9OworCisJaWYgKCRzZWxmLT5ub19tZXRhZGF0YSkgeworCQlkaWUgIkNhbid0IGhhdmUgYm90aCAnbm9NZXRhZGF0YScgYW5kICIsCisJCSAgICAiJ3VzZVN2bnN5bmNQcm9wcycgb3B0aW9ucyBzZXQhXG4iOworCX0KKwlpZiAoJHNlbGYtPnJld3JpdGVfcm9vdCkgeworCQlkaWUgIkNhbid0IGhhdmUgYm90aCAndXNlU3Zuc3luY1Byb3BzJyBhbmQgJ3Jld3JpdGVSb290JyAiLAorCQkgICAgIm9wdGlvbnMgc2V0IVxuIjsKKwl9CisJaWYgKCRzZWxmLT5yZXdyaXRlX3V1aWQpIHsKKwkJZGllICJDYW4ndCBoYXZlIGJvdGggJ3VzZVN2bnN5bmNQcm9wcycgYW5kICdyZXdyaXRlVVVJRCcgIiwKKwkJICAgICJvcHRpb25zIHNldCFcbiI7CisJfQorCisJbXkgJHN2bnN5bmM7CisJIyBzZWUgaWYgd2UgaGF2ZSBpdCBpbiBvdXIgY29uZmlnLCBmaXJzdDoKKwlldmFsIHsKKwkJbXkgJHNlY3Rpb24gPSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9IjsKKworCQlteSAkdXJsID0gdG1wX2NvbmZpZygnLS1nZXQnLCAiJHNlY3Rpb24uc3Zuc3luYy11cmwiKTsKKwkJKCR1cmwpID0gKCR1cmwgPX4gbXteKFthLXpcK10rOi8vXFMrKSR9KSBvcgorCQkgICBkaWUgImRvZXNuJ3QgbG9vayByaWdodCAtIHN2bjpzeW5jLWZyb20tdXJsIGlzICckdXJsJ1xuIjsKKworCQlteSAkdXVpZCA9IHRtcF9jb25maWcoJy0tZ2V0JywgIiRzZWN0aW9uLnN2bnN5bmMtdXVpZCIpOworCQkoJHV1aWQpID0gKCR1dWlkID1+IG17XihbMC05YS1mXC1dezMwLH0pJH1pKSBvcgorCQkgICBkaWUgImRvZXNuJ3QgbG9vayByaWdodCAtIHN2bjpzeW5jLWZyb20tdXVpZCBpcyAnJHV1aWQnXG4iOworCisJCSRzdm5zeW5jID0geyB1cmwgPT4gJHVybCwgdXVpZCA9PiAkdXVpZCB9CisJfTsKKwlpZiAoJHN2bnN5bmMgJiYgJHN2bnN5bmMtPnt1cmx9ICYmICRzdm5zeW5jLT57dXVpZH0pIHsKKwkJcmV0dXJuICRzZWxmLT57c3Zuc3luY30gPSAkc3Zuc3luYzsKKwl9CisKKwlteSAkZXJyID0gInVzZVN2bnN5bmNQcm9wcyBzZXQsIGJ1dCBmYWlsZWQgdG8gcmVhZCAiIC4KKwkgICAgICAgICAgInN2bnN5bmMgcHJvcGVydHk6IHN2bjpzeW5jLWZyb20tIjsKKwlteSAkcnAgPSAkc2VsZi0+cmEtPnJldl9wcm9wbGlzdCgwKTsKKworCW15ICR1cmwgPSAkcnAtPnsnc3ZuOnN5bmMtZnJvbS11cmwnfSBvciBkaWUgJGVyciAuICJ1cmxcbiI7CisJKCR1cmwpID0gKCR1cmwgPX4gbXteKFthLXpcK10rOi8vXFMrKSR9KSBvcgorCSAgICAgICAgICAgZGllICJkb2Vzbid0IGxvb2sgcmlnaHQgLSBzdm46c3luYy1mcm9tLXVybCBpcyAnJHVybCdcbiI7CisKKwlteSAkdXVpZCA9ICRycC0+eydzdm46c3luYy1mcm9tLXV1aWQnfSBvciBkaWUgJGVyciAuICJ1dWlkXG4iOworCSgkdXVpZCkgPSAoJHV1aWQgPX4gbXteKFswLTlhLWZcLV17MzAsfSkkfWkpIG9yCisJICAgICAgICAgICBkaWUgImRvZXNuJ3QgbG9vayByaWdodCAtIHN2bjpzeW5jLWZyb20tdXVpZCBpcyAnJHV1aWQnXG4iOworCisJbXkgJHNlY3Rpb24gPSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9IjsKKwl0bXBfY29uZmlnKCctLWFkZCcsICIkc2VjdGlvbi5zdm5zeW5jLXV1aWQiLCAkdXVpZCk7CisJdG1wX2NvbmZpZygnLS1hZGQnLCAiJHNlY3Rpb24uc3Zuc3luYy11cmwiLCAkdXJsKTsKKwlyZXR1cm4gJHNlbGYtPntzdm5zeW5jfSA9IHsgdXJsID0+ICR1cmwsIHV1aWQgPT4gJHV1aWQgfTsKK30KKworIyB0aGlzIGFsbG93cyB1cyB0byBtZW1vaXplIG91ciBTVk46OlJhIFVVSUQgbG9jYWxseSBhbmQgYXZvaWQgYQorIyByZW1vdGUgbG9va3VwICh1c2VmdWwgZm9yICdnaXQgc3ZuIGxvZycpLgorc3ViIHJhX3V1aWQgeworCW15ICgkc2VsZikgPSBAXzsKKwl1bmxlc3MgKCRzZWxmLT57cmFfdXVpZH0pIHsKKwkJbXkgJGtleSA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0udXVpZCI7CisJCW15ICR1dWlkID0gZXZhbCB7IHRtcF9jb25maWcoJy0tZ2V0JywgJGtleSkgfTsKKwkJaWYgKCEkQCAmJiAkdXVpZCAmJiAkdXVpZCA9fiAvXihbYS1mXGRcLV17MzAsfSkkL2kpIHsKKwkJCSRzZWxmLT57cmFfdXVpZH0gPSAkdXVpZDsKKwkJfSBlbHNlIHsKKwkJCWRpZSAicmFfdXVpZCBjYWxsZWQgd2l0aG91dCBVUkxcbiIgdW5sZXNzICRzZWxmLT51cmw7CisJCQkkc2VsZi0+e3JhX3V1aWR9ID0gJHNlbGYtPnJhLT5nZXRfdXVpZDsKKwkJCXRtcF9jb25maWcoJy0tYWRkJywgJGtleSwgJHNlbGYtPntyYV91dWlkfSk7CisJCX0KKwl9CisJJHNlbGYtPntyYV91dWlkfTsKK30KKworc3ViIF9zZXRfcmVwb3Nfcm9vdCB7CisJbXkgKCRzZWxmLCAkcmVwb3Nfcm9vdCkgPSBAXzsKKwlteSAkayA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0ucmVwb3NSb290IjsKKwkkcmVwb3Nfcm9vdCB8fD0gJHNlbGYtPnJhLT57cmVwb3Nfcm9vdH07CisJdG1wX2NvbmZpZygkaywgJHJlcG9zX3Jvb3QpOworCSRyZXBvc19yb290OworfQorCitzdWIgcmVwb3Nfcm9vdCB7CisJbXkgKCRzZWxmKSA9IEBfOworCW15ICRrID0gInN2bi1yZW1vdGUuJHNlbGYtPntyZXBvX2lkfS5yZXBvc1Jvb3QiOworCWV2YWwgeyB0bXBfY29uZmlnKCctLWdldCcsICRrKSB9IHx8ICRzZWxmLT5fc2V0X3JlcG9zX3Jvb3Q7Cit9CisKK3N1YiByYSB7CisJbXkgKCRzZWxmKSA9IHNoaWZ0OworCW15ICRyYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCRzZWxmLT51cmwpOworCSRzZWxmLT5fc2V0X3JlcG9zX3Jvb3QoJHJhLT57cmVwb3Nfcm9vdH0pOworCWlmICgkc2VsZi0+dXNlX3N2bV9wcm9wcyAmJiAhJHNlbGYtPntzdm19KSB7CisJCWlmICgkc2VsZi0+bm9fbWV0YWRhdGEpIHsKKwkJCWRpZSAiQ2FuJ3QgaGF2ZSBib3RoICdub01ldGFkYXRhJyBhbmQgIiwKKwkJCSAgICAiJ3VzZVN2bVByb3BzJyBvcHRpb25zIHNldCFcbiI7CisJCX0gZWxzaWYgKCRzZWxmLT51c2Vfc3Zuc3luY19wcm9wcykgeworCQkJZGllICJDYW4ndCBoYXZlIGJvdGggJ3VzZVN2bnN5bmNQcm9wcycgYW5kICIsCisJCQkgICAgIid1c2VTdm1Qcm9wcycgb3B0aW9ucyBzZXQhXG4iOworCQl9CisJCSRyYSA9ICRzZWxmLT5fc2V0X3N2bV92YXJzKCRyYSk7CisJCSRzZWxmLT57LXdhbnRfcmV2cHJvcHN9ID0gMTsKKwl9CisJJHJhOworfQorCisjIHByb3Bfd2FsayhQQVRILCBSRVYsIFNVQikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWN1cnNpdmVseSB0cmF2ZXJzZSBQQVRIIGF0IHJldmlzaW9uIFJFViBhbmQgaW52b2tlIFNVQiBmb3IgZWFjaAorIyBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBhIFNWTiBwcm9wZXJ0eS4gIFNVQiB3aWxsIGJlIGludm9rZWQgYXMKKyMgZm9sbG93czogICZTVUIoZ3MsIHBhdGgsIHByb3BzKTsgIHdoZXJlIGBncycgaXMgdGhpcyBpbnN0YW5jZSBvZgorIyBHaXQ6OlNWTiwgYHBhdGgnIHRoZSBwYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgdGhlIHByb3BlcnRpZXMKKyMgYHByb3BzJyB3ZXJlIGZvdW5kLiAgVGhlIGBwYXRoJyB3aWxsIGJlIHJlbGF0aXZlIHRvIHBvaW50IG9mIGNoZWNrb3V0LAorIyB0aGF0IGlzLCBpZiB1cmw6Ly9yZXBvL3RydW5rIGlzIHRoZSBjdXJyZW50IEdpdCBicmFuY2gsIGFuZCB0aGF0CisjIGRpcmVjdG9yeSBjb250YWlucyBhIHN1Yi1kaXJlY3RvcnkgYGQnLCBTVUIgd2lsbCBiZSBpbnZva2VkIHdpdGggYC9kLycKKyMgYXMgYHBhdGgnIChub3RlIHRoZSB0cmFpbGluZyBgLycpLgorc3ViIHByb3Bfd2FsayB7CisJbXkgKCRzZWxmLCAkcGF0aCwgJHJldiwgJHN1YikgPSBAXzsKKworCSRwYXRoID1+IHMjXi8jIzsKKwlteSAoJGRpcmVudCwgdW5kZWYsICRwcm9wcykgPSAkc2VsZi0+cmEtPmdldF9kaXIoJHBhdGgsICRyZXYpOworCSRwYXRoID1+IHMjXi8qIy8jZzsKKwlteSAkcCA9ICRwYXRoOworCSMgU3RyaXAgdGhlIGlycmVsZXZhbnQgcGFydCBvZiB0aGUgcGF0aC4KKwkkcCA9fiBzI14vK1xRQHtbJHNlbGYtPnBhdGhdfVxFKC98JCkjLyM7CisJIyBFbnN1cmUgdGhlIHBhdGggaXMgdGVybWluYXRlZCBieSBhIGAvJy4KKwkkcCA9fiBzIy8qJCMvIzsKKworCSMgVGhlIHByb3BlcnRpZXMgY29udGFpbiBhbGwgdGhlIGludGVybmFsIFNWTiBzdHVmZiBub2JvZHkKKwkjICh1c3VhbGx5KSBjYXJlcyBhYm91dC4KKwlteSAkaW50ZXJlc3RpbmdfcHJvcHMgPSAwOworCWZvcmVhY2ggKGtleXMgJXskcHJvcHN9KSB7CisJCSMgSWYgaXQgZG9lc24ndCBzdGFydCB3aXRoIGBzdm46JywgaXQgbXVzdCBiZSBhCisJCSMgdXNlci1kZWZpbmVkIHByb3BlcnR5LgorCQkrKyRpbnRlcmVzdGluZ19wcm9wcyBhbmQgbmV4dCBpZiAkXyAhfiAvXnN2bjovOworCQkjIEZJWE1FOiBGcmFnaWxlLCBpZiBTVk4gYWRkcyBuZXcgcHVibGljIHByb3BlcnRpZXMsCisJCSMgdGhpcyBuZWVkcyB0byBiZSB1cGRhdGVkLgorCQkrKyRpbnRlcmVzdGluZ19wcm9wcyBpZiAvXnN2bjooPzppZ25vcmV8a2V5d29yZHN8ZXhlY3V0YWJsZQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ZW9sLXN0eWxlfG1pbWUtdHlwZQorCQkJCQkJIHxleHRlcm5hbHN8bmVlZHMtbG9jaykkL3g7CisJfQorCSYkc3ViKCRzZWxmLCAkcCwgJHByb3BzKSBpZiAkaW50ZXJlc3RpbmdfcHJvcHM7CisKKwlmb3JlYWNoIChzb3J0IGtleXMgJSRkaXJlbnQpIHsKKwkJbmV4dCBpZiAkZGlyZW50LT57JF99LT57a2luZH0gIT0gJFNWTjo6Tm9kZTo6ZGlyOworCQkkc2VsZi0+cHJvcF93YWxrKCRzZWxmLT5wYXRoIC4gJHAgLiAkXywgJHJldiwgJHN1Yik7CisJfQorfQorCitzdWIgbGFzdF9yZXYgeyAoJF9bMF0tPmxhc3RfcmV2X2NvbW1pdClbMF0gfQorc3ViIGxhc3RfY29tbWl0IHsgKCRfWzBdLT5sYXN0X3Jldl9jb21taXQpWzFdIH0KKworIyByZXR1cm5zIHRoZSBuZXdlc3QgU1ZOIHJldmlzaW9uIG51bWJlciBhbmQgbmV3ZXN0IGNvbW1pdCBTSEExCitzdWIgbGFzdF9yZXZfY29tbWl0IHsKKwlteSAoJHNlbGYpID0gQF87CisJaWYgKGRlZmluZWQgJHNlbGYtPntsYXN0X3Jldn0gJiYgZGVmaW5lZCAkc2VsZi0+e2xhc3RfY29tbWl0fSkgeworCQlyZXR1cm4gKCRzZWxmLT57bGFzdF9yZXZ9LCAkc2VsZi0+e2xhc3RfY29tbWl0fSk7CisJfQorCW15ICRjID0gOjp2ZXJpZnlfcmVmKCRzZWxmLT5yZWZuYW1lLideMCcpOworCWlmICgkYyAmJiAhJHNlbGYtPnVzZV9zdm1fcHJvcHMgJiYgISRzZWxmLT5ub19tZXRhZGF0YSkgeworCQlteSAkcmV2ID0gKDo6Y210X21ldGFkYXRhKCRjKSlbMV07CisJCWlmIChkZWZpbmVkICRyZXYpIHsKKwkJCSgkc2VsZi0+e2xhc3RfcmV2fSwgJHNlbGYtPntsYXN0X2NvbW1pdH0pID0gKCRyZXYsICRjKTsKKwkJCXJldHVybiAoJHJldiwgJGMpOworCQl9CisJfQorCW15ICRtYXBfcGF0aCA9ICRzZWxmLT5tYXBfcGF0aDsKKwl1bmxlc3MgKC1lICRtYXBfcGF0aCkgeworCQkoJHNlbGYtPntsYXN0X3Jldn0sICRzZWxmLT57bGFzdF9jb21taXR9KSA9ICh1bmRlZiwgdW5kZWYpOworCQlyZXR1cm4gKHVuZGVmLCB1bmRlZik7CisJfQorCW15ICgkcmV2LCAkY29tbWl0KSA9ICRzZWxmLT5yZXZfbWFwX21heCgxKTsKKwkoJHNlbGYtPntsYXN0X3Jldn0sICRzZWxmLT57bGFzdF9jb21taXR9KSA9ICgkcmV2LCAkY29tbWl0KTsKKwlyZXR1cm4gKCRyZXYsICRjb21taXQpOworfQorCitzdWIgZ2V0X2ZldGNoX3JhbmdlIHsKKwlteSAoJHNlbGYsICRtaW4sICRtYXgpID0gQF87CisJJG1heCB8fD0gJHNlbGYtPnJhLT5nZXRfbGF0ZXN0X3Jldm51bTsKKwkkbWluIHx8PSAkc2VsZi0+cmV2X21hcF9tYXg7CisJKCsrJG1pbiwgJG1heCk7Cit9CisKK3N1YiB0bXBfY29uZmlnIHsKKwlteSAoQGFyZ3MpID0gQF87CisJbXkgJG9sZF9kZWZfY29uZmlnID0gIiRFTlZ7R0lUX0RJUn0vc3ZuL2NvbmZpZyI7CisJbXkgJGNvbmZpZyA9ICIkRU5We0dJVF9ESVJ9L3N2bi8ubWV0YWRhdGEiOworCWlmICghIC1mICRjb25maWcgJiYgLWYgJG9sZF9kZWZfY29uZmlnKSB7CisJCXJlbmFtZSAkb2xkX2RlZl9jb25maWcsICRjb25maWcgb3IKKwkJICAgICAgIGRpZSAiRmFpbGVkIHJlbmFtZSAkb2xkX2RlZl9jb25maWcgPT4gJGNvbmZpZzogJCFcbiI7CisJfQorCW15ICRvbGRfY29uZmlnID0gJEVOVntHSVRfQ09ORklHfTsKKwkkRU5We0dJVF9DT05GSUd9ID0gJGNvbmZpZzsKKwkkQCA9IHVuZGVmOworCW15IEByZXQgPSBldmFsIHsKKwkJdW5sZXNzICgtZiAkY29uZmlnKSB7CisJCQlta2ZpbGUoJGNvbmZpZyk7CisJCQlvcGVuIG15ICRmaCwgJz4nLCAkY29uZmlnIG9yCisJCQkgICAgZGllICJDYW4ndCBvcGVuICRjb25maWc6ICQhXG4iOworCQkJcHJpbnQgJGZoICI7IFRoaXMgZmlsZSBpcyB1c2VkIGludGVybmFsbHkgYnkgIiwKKwkJCSAgICAgICAgICAiZ2l0LXN2blxuIiBvciBkaWUKKwkJCQkgICJDb3VsZG4ndCB3cml0ZSB0byAkY29uZmlnOiAkIVxuIjsKKwkJCXByaW50ICRmaCAiOyBZb3Ugc2hvdWxkIG5vdCBoYXZlIHRvIGVkaXQgaXRcbiIgb3IKKwkJCSAgICAgIGRpZSAiQ291bGRuJ3Qgd3JpdGUgdG8gJGNvbmZpZzogJCFcbiI7CisJCQljbG9zZSAkZmggb3IgZGllICJDb3VsZG4ndCBjbG9zZSAkY29uZmlnOiAkIVxuIjsKKwkJfQorCQljb21tYW5kKCdjb25maWcnLCBAYXJncyk7CisJfTsKKwlteSAkZXJyID0gJEA7CisJaWYgKGRlZmluZWQgJG9sZF9jb25maWcpIHsKKwkJJEVOVntHSVRfQ09ORklHfSA9ICRvbGRfY29uZmlnOworCX0gZWxzZSB7CisJCWRlbGV0ZSAkRU5We0dJVF9DT05GSUd9OworCX0KKwlkaWUgJGVyciBpZiAkZXJyOworCXdhbnRhcnJheSA/IEByZXQgOiAkcmV0WzBdOworfQorCitzdWIgdG1wX2luZGV4X2RvIHsKKwlteSAoJHNlbGYsICRzdWIpID0gQF87CisJbXkgJG9sZF9pbmRleCA9ICRFTlZ7R0lUX0lOREVYX0ZJTEV9OworCSRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJHNlbGYtPntpbmRleH07CisJJEAgPSB1bmRlZjsKKwlteSBAcmV0ID0gZXZhbCB7CisJCW15ICgkZGlyLCAkYmFzZSkgPSAoJHNlbGYtPntpbmRleH0gPX4gbSNeKC4qPykvPyhbXi9dKykkIyk7CisJCW1rcGF0aChbJGRpcl0pIHVubGVzcyAtZCAkZGlyOworCQkmJHN1YjsKKwl9OworCW15ICRlcnIgPSAkQDsKKwlpZiAoZGVmaW5lZCAkb2xkX2luZGV4KSB7CisJCSRFTlZ7R0lUX0lOREVYX0ZJTEV9ID0gJG9sZF9pbmRleDsKKwl9IGVsc2UgeworCQlkZWxldGUgJEVOVntHSVRfSU5ERVhfRklMRX07CisJfQorCWRpZSAkZXJyIGlmICRlcnI7CisJd2FudGFycmF5ID8gQHJldCA6ICRyZXRbMF07Cit9CisKK3N1YiBhc3NlcnRfaW5kZXhfY2xlYW4geworCW15ICgkc2VsZiwgJHRyZWVpc2gpID0gQF87CisKKwkkc2VsZi0+dG1wX2luZGV4X2RvKHN1YiB7CisJCWNvbW1hbmRfbm9pc3koJ3JlYWQtdHJlZScsICR0cmVlaXNoKSB1bmxlc3MgLWUgJHNlbGYtPntpbmRleH07CisJCW15ICR4ID0gY29tbWFuZF9vbmVsaW5lKCd3cml0ZS10cmVlJyk7CisJCW15ICgkeSkgPSAoY29tbWFuZChxdy9jYXQtZmlsZSBjb21taXQvLCAkdHJlZWlzaCkgPX4KKwkJICAgICAgICAgICAvXnRyZWUgKCQ6OnNoYTEpL21vKTsKKwkJcmV0dXJuIGlmICR5IGVxICR4OworCisJCXdhcm4gIkluZGV4IG1pc21hdGNoOiAkeSAhPSAkeFxucmVyZWFkaW5nICR0cmVlaXNoXG4iOworCQl1bmxpbmsgJHNlbGYtPntpbmRleH0gb3IgZGllICJ1bmxpbmsgJHNlbGYtPntpbmRleH06ICQhXG4iOworCQljb21tYW5kX25vaXN5KCdyZWFkLXRyZWUnLCAkdHJlZWlzaCk7CisJCSR4ID0gY29tbWFuZF9vbmVsaW5lKCd3cml0ZS10cmVlJyk7CisJCWlmICgkeSBuZSAkeCkgeworCQkJZmF0YWwgInRyZWVzICgkdHJlZWlzaCkgJHkgIT0gJHhcbiIsCisJCQkgICAgICAiU29tZXRoaW5nIGlzIHNlcmlvdXNseSB3cm9uZy4uLiI7CisJCX0KKwl9KTsKK30KKworc3ViIGdldF9jb21taXRfcGFyZW50cyB7CisJbXkgKCRzZWxmLCAkbG9nX2VudHJ5KSA9IEBfOworCW15ICglc2VlbiwgQHJldCwgQHRtcCk7CisJIyBsZWdhY3kgc3VwcG9ydCBmb3IgJ3NldC10cmVlJzsgdGhpcyBpcyBvbmx5IHVzZWQgYnkgc2V0X3RyZWVfY2I6CisJaWYgKG15ICRpcCA9ICRzZWxmLT57aW5qZWN0X3BhcmVudHN9KSB7CisJCWlmIChteSAkY29tbWl0ID0gZGVsZXRlICRpcC0+eyRsb2dfZW50cnktPntyZXZpc2lvbn19KSB7CisJCQlwdXNoIEB0bXAsICRjb21taXQ7CisJCX0KKwl9CisJaWYgKG15ICRjdXIgPSA6OnZlcmlmeV9yZWYoJHNlbGYtPnJlZm5hbWUuJ14wJykpIHsKKwkJcHVzaCBAdG1wLCAkY3VyOworCX0KKwlpZiAobXkgJGlwZCA9ICRzZWxmLT57aW5qZWN0X3BhcmVudHNfZGNvbW1pdH0pIHsKKwkJaWYgKG15ICRjb21taXQgPSBkZWxldGUgJGlwZC0+eyRsb2dfZW50cnktPntyZXZpc2lvbn19KSB7CisJCQlwdXNoIEB0bXAsIEAkY29tbWl0OworCQl9CisJfQorCXB1c2ggQHRtcCwgJF8gZm9yZWFjaCAoQHskbG9nX2VudHJ5LT57cGFyZW50c319LCBAdG1wKTsKKwl3aGlsZSAobXkgJHAgPSBzaGlmdCBAdG1wKSB7CisJCW5leHQgaWYgJHNlZW57JHB9OworCQkkc2VlbnskcH0gPSAxOworCQlwdXNoIEByZXQsICRwOworCX0KKwlAcmV0OworfQorCitzdWIgcmV3cml0ZV9yb290IHsKKwlteSAoJHNlbGYpID0gQF87CisJcmV0dXJuICRzZWxmLT57LXJld3JpdGVfcm9vdH0gaWYgZXhpc3RzICRzZWxmLT57LXJld3JpdGVfcm9vdH07CisJbXkgJGsgPSAic3ZuLXJlbW90ZS4kc2VsZi0+e3JlcG9faWR9LnJld3JpdGVSb290IjsKKwlteSAkcndyID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZShxdy9jb25maWcgLS1nZXQvLCAkaykgfTsKKwlpZiAoJHJ3cikgeworCQkkcndyID1+IHMjLyskIyM7CisJCWlmICgkcndyICF+IG0jXlthLXpcK10rOi8vIykgeworCQkJZGllICIkcndyIGlzIG5vdCBhIHZhbGlkIFVSTCAoa2V5OiAkaylcbiI7CisJCX0KKwl9CisJJHNlbGYtPnstcmV3cml0ZV9yb290fSA9ICRyd3I7Cit9CisKK3N1YiByZXdyaXRlX3V1aWQgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPnstcmV3cml0ZV91dWlkfSBpZiBleGlzdHMgJHNlbGYtPnstcmV3cml0ZV91dWlkfTsKKwlteSAkayA9ICJzdm4tcmVtb3RlLiRzZWxmLT57cmVwb19pZH0ucmV3cml0ZVVVSUQiOworCW15ICRyd2lkID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZShxdy9jb25maWcgLS1nZXQvLCAkaykgfTsKKwlpZiAoJHJ3aWQpIHsKKwkJJHJ3aWQgPX4gcyMvKyQjIzsKKwkJaWYgKCRyd2lkICF+IG0jXlthLWYwLTldezh9LSg/OlthLWYwLTldezR9LSl7M31bYS1mMC05XXsxMn0kIykgeworCQkJZGllICIkcndpZCBpcyBub3QgYSB2YWxpZCBVVUlEIChrZXk6ICRrKVxuIjsKKwkJfQorCX0KKwkkc2VsZi0+ey1yZXdyaXRlX3V1aWR9ID0gJHJ3aWQ7Cit9CisKK3N1YiBtZXRhZGF0YV91cmwgeworCW15ICgkc2VsZikgPSBAXzsKKwlteSAkdXJsID0gJHNlbGYtPnJld3JpdGVfcm9vdCB8fCAkc2VsZi0+dXJsOworCXJldHVybiBjYW5vbmljYWxpemVfdXJsKCBhZGRfcGF0aF90b191cmwoICR1cmwsICRzZWxmLT5wYXRoICkgKTsKK30KKworc3ViIGZ1bGxfdXJsIHsKKwlteSAoJHNlbGYpID0gQF87CisJcmV0dXJuIGNhbm9uaWNhbGl6ZV91cmwoIGFkZF9wYXRoX3RvX3VybCggJHNlbGYtPnVybCwgJHNlbGYtPnBhdGggKSApOworfQorCitzdWIgZnVsbF9wdXNodXJsIHsKKwlteSAoJHNlbGYpID0gQF87CisJaWYgKCRzZWxmLT57cHVzaHVybH0pIHsKKwkJcmV0dXJuIGNhbm9uaWNhbGl6ZV91cmwoIGFkZF9wYXRoX3RvX3VybCggJHNlbGYtPntwdXNodXJsfSwgJHNlbGYtPnBhdGggKSApOworCX0gZWxzZSB7CisJCXJldHVybiAkc2VsZi0+ZnVsbF91cmw7CisJfQorfQorCitzdWIgc2V0X2NvbW1pdF9oZWFkZXJfZW52IHsKKwlteSAoJGxvZ19lbnRyeSkgPSBAXzsKKwlteSAlZW52OworCWZvcmVhY2ggbXkgJG5lZCAocXcvTkFNRSBFTUFJTCBEQVRFLykgeworCQlmb3JlYWNoIG15ICRhYyAocXcvQVVUSE9SIENPTU1JVFRFUi8pIHsKKwkJCSRlbnZ7IkdJVF8ke2FjfV8ke25lZH0ifSA9ICRFTlZ7IkdJVF8ke2FjfV8ke25lZH0ifTsKKwkJfQorCX0KKworCSRFTlZ7R0lUX0FVVEhPUl9OQU1FfSA9ICRsb2dfZW50cnktPntuYW1lfTsKKwkkRU5We0dJVF9BVVRIT1JfRU1BSUx9ID0gJGxvZ19lbnRyeS0+e2VtYWlsfTsKKwkkRU5We0dJVF9BVVRIT1JfREFURX0gPSAkRU5We0dJVF9DT01NSVRURVJfREFURX0gPSAkbG9nX2VudHJ5LT57ZGF0ZX07CisKKwkkRU5We0dJVF9DT01NSVRURVJfTkFNRX0gPSAoZGVmaW5lZCAkbG9nX2VudHJ5LT57Y29tbWl0X25hbWV9KQorCQkJCQkJPyAkbG9nX2VudHJ5LT57Y29tbWl0X25hbWV9CisJCQkJCQk6ICRsb2dfZW50cnktPntuYW1lfTsKKwkkRU5We0dJVF9DT01NSVRURVJfRU1BSUx9ID0gKGRlZmluZWQgJGxvZ19lbnRyeS0+e2NvbW1pdF9lbWFpbH0pCisJCQkJCQk/ICRsb2dfZW50cnktPntjb21taXRfZW1haWx9CisJCQkJCQk6ICRsb2dfZW50cnktPntlbWFpbH07CisJXCVlbnY7Cit9CisKK3N1YiByZXN0b3JlX2NvbW1pdF9oZWFkZXJfZW52IHsKKwlteSAoJGVudikgPSBAXzsKKwlmb3JlYWNoIG15ICRuZWQgKHF3L05BTUUgRU1BSUwgREFURS8pIHsKKwkJZm9yZWFjaCBteSAkYWMgKHF3L0FVVEhPUiBDT01NSVRURVIvKSB7CisJCQlteSAkayA9ICJHSVRfJHthY31fJHtuZWR9IjsKKwkJCWlmIChkZWZpbmVkICRlbnYtPnska30pIHsKKwkJCQkkRU5WeyRrfSA9ICRlbnYtPnska307CisJCQl9IGVsc2UgeworCQkJCWRlbGV0ZSAkRU5WeyRrfTsKKwkJCX0KKwkJfQorCX0KK30KKworc3ViIGdjIHsKKwljb21tYW5kX25vaXN5KCdnYycsICctLWF1dG8nKTsKK307CisKK3N1YiBkb19naXRfY29tbWl0IHsKKwlteSAoJHNlbGYsICRsb2dfZW50cnkpID0gQF87CisJbXkgJGxyID0gJHNlbGYtPmxhc3RfcmV2OworCWlmIChkZWZpbmVkICRsciAmJiAkbHIgPj0gJGxvZ19lbnRyeS0+e3JldmlzaW9ufSkgeworCQlkaWUgIkxhc3QgZmV0Y2hlZCByZXZpc2lvbiBvZiAiLCAkc2VsZi0+cmVmbmFtZSwKKwkJICAgICIgd2FzIHIkbHIsIGJ1dCB3ZSBhcmUgYWJvdXQgdG8gZmV0Y2g6ICIsCisJCSAgICAiciRsb2dfZW50cnktPntyZXZpc2lvbn0hXG4iOworCX0KKwlpZiAobXkgJGMgPSAkc2VsZi0+cmV2X21hcF9nZXQoJGxvZ19lbnRyeS0+e3JldmlzaW9ufSkpIHsKKwkJY3JvYWsgIiRsb2dfZW50cnktPntyZXZpc2lvbn0gPSAkYyBhbHJlYWR5IGV4aXN0cyEgIiwKKwkJICAgICAgIldoeSBhcmUgd2UgcmVmZXRjaGluZyBpdD9cbiI7CisJfQorCW15ICRvbGRfZW52ID0gc2V0X2NvbW1pdF9oZWFkZXJfZW52KCRsb2dfZW50cnkpOworCW15ICR0cmVlID0gJGxvZ19lbnRyeS0+e3RyZWV9OworCWlmICghZGVmaW5lZCAkdHJlZSkgeworCQkkdHJlZSA9ICRzZWxmLT50bXBfaW5kZXhfZG8oc3ViIHsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfb25lbGluZSgnd3JpdGUtdHJlZScpIH0pOworCX0KKwlkaWUgIlRyZWUgaXMgbm90IGEgdmFsaWQgc2hhMTogJHRyZWVcbiIgaWYgJHRyZWUgIX4gL14kOjpzaGExJC9vOworCisJbXkgQGV4ZWMgPSAoJ2dpdCcsICdjb21taXQtdHJlZScsICR0cmVlKTsKKwlmb3JlYWNoICgkc2VsZi0+Z2V0X2NvbW1pdF9wYXJlbnRzKCRsb2dfZW50cnkpKSB7CisJCXB1c2ggQGV4ZWMsICctcCcsICRfOworCX0KKwlkZWZpbmVkKG15ICRwaWQgPSBvcGVuMyhteSAkbXNnX2ZoLCBteSAkb3V0X2ZoLCAnPiZTVERFUlInLCBAZXhlYykpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBjcm9hayAkITsKKwliaW5tb2RlICRtc2dfZmg7CisKKwkjIHdlIGFsd2F5cyBnZXQgVVRGLTggZnJvbSBTVk4sIGJ1dCB3ZSBtYXkgd2FudCBvdXIgY29tbWl0cyBpbgorCSMgYSBkaWZmZXJlbnQgZW5jb2RpbmcuCisJaWYgKG15ICRlbmMgPSBHaXQ6OmNvbmZpZygnaTE4bi5jb21taXRlbmNvZGluZycpKSB7CisJCXJlcXVpcmUgRW5jb2RlOworCQlFbmNvZGU6OmZyb21fdG8oJGxvZ19lbnRyeS0+e2xvZ30sICdVVEYtOCcsICRlbmMpOworCX0KKwlwcmludCAkbXNnX2ZoICRsb2dfZW50cnktPntsb2d9IG9yIGNyb2FrICQhOworCXJlc3RvcmVfY29tbWl0X2hlYWRlcl9lbnYoJG9sZF9lbnYpOworCXVubGVzcyAoJHNlbGYtPm5vX21ldGFkYXRhKSB7CisJCXByaW50ICRtc2dfZmggIlxuZ2l0LXN2bi1pZDogJGxvZ19lbnRyeS0+e21ldGFkYXRhfVxuIgorCQkgICAgICAgICAgICAgIG9yIGNyb2FrICQhOworCX0KKwkkbXNnX2ZoLT5mbHVzaCA9PSAwIG9yIGNyb2FrICQhOworCWNsb3NlICRtc2dfZmggb3IgY3JvYWsgJCE7CisJY2hvbXAobXkgJGNvbW1pdCA9IGRvIHsgbG9jYWwgJC87IDwkb3V0X2ZoPiB9KTsKKwljbG9zZSAkb3V0X2ZoIG9yIGNyb2FrICQhOworCXdhaXRwaWQgJHBpZCwgMDsKKwljcm9hayAkPyBpZiAkPzsKKwlpZiAoJGNvbW1pdCAhfiAvXiQ6OnNoYTEkL28pIHsKKwkJZGllICJGYWlsZWQgdG8gY29tbWl0LCBpbnZhbGlkIHNoYTE6ICRjb21taXRcbiI7CisJfQorCisJJHNlbGYtPnJldl9tYXBfc2V0KCRsb2dfZW50cnktPntyZXZpc2lvbn0sICRjb21taXQsIDEpOworCisJJHNlbGYtPntsYXN0X3Jldn0gPSAkbG9nX2VudHJ5LT57cmV2aXNpb259OworCSRzZWxmLT57bGFzdF9jb21taXR9ID0gJGNvbW1pdDsKKwlwcmludCAiciRsb2dfZW50cnktPntyZXZpc2lvbn0iIHVubGVzcyAkOjpfcSA+IDE7CisJaWYgKGRlZmluZWQgJGxvZ19lbnRyeS0+e3N2bV9yZXZpc2lvbn0pIHsKKwkJIHByaW50ICIgKFxAJGxvZ19lbnRyeS0+e3N2bV9yZXZpc2lvbn0pIiB1bmxlc3MgJDo6X3EgPiAxOworCQkgJHNlbGYtPnJldl9tYXBfc2V0KCRsb2dfZW50cnktPntzdm1fcmV2aXNpb259LCAkY29tbWl0LAorCQkgICAgICAgICAgICAgICAgICAgMCwgJHNlbGYtPnN2bV91dWlkKTsKKwl9CisJcHJpbnQgIiA9ICRjb21taXQgKCRzZWxmLT57cmVmX2lkfSlcbiIgdW5sZXNzICQ6Ol9xID4gMTsKKwlpZiAoLS0kX2djX25yID09IDApIHsKKwkJJF9nY19uciA9ICRfZ2NfcGVyaW9kOworCQlnYygpOworCX0KKwlyZXR1cm4gJGNvbW1pdDsKK30KKworc3ViIG1hdGNoX3BhdGhzIHsKKwlteSAoJHNlbGYsICRwYXRocywgJHIpID0gQF87CisJcmV0dXJuIDEgaWYgJHNlbGYtPnBhdGggZXEgJyc7CisJaWYgKG15ICRwYXRoID0gJHBhdGhzLT57Ii8iLiRzZWxmLT5wYXRofSkgeworCQlyZXR1cm4gKCRwYXRoLT57YWN0aW9ufSBlcSAnRCcpID8gMCA6IDE7CisJfQorCSRzZWxmLT57cGF0aF9yZWdleH0gfHw9IHFye14vXFFAe1skc2VsZi0+cGF0aF19XEUvfTsKKwlpZiAoZ3JlcCAvJHNlbGYtPntwYXRoX3JlZ2V4fS8sIGtleXMgJSRwYXRocykgeworCQlyZXR1cm4gMTsKKwl9CisJbXkgJGMgPSAnJzsKKwlmb3JlYWNoIChzcGxpdCBtIy8jLCAkc2VsZi0+cGF0aCkgeworCQkkYyAuPSAiLyRfIjsKKwkJbmV4dCB1bmxlc3MgKCRwYXRocy0+eyRjfSAmJgorCQkgICAgICAgICAgICAgKCRwYXRocy0+eyRjfS0+e2FjdGlvbn0gPX4gL15bQVJdJC8pKTsKKwkJaWYgKCRzZWxmLT5yYS0+Y2hlY2tfcGF0aCgkc2VsZi0+cGF0aCwgJHIpID09CisJCSAgICAkU1ZOOjpOb2RlOjpkaXIpIHsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdWIgZmluZF9wYXJlbnRfYnJhbmNoIHsKKwlteSAoJHNlbGYsICRwYXRocywgJHJldikgPSBAXzsKKwlyZXR1cm4gdW5kZWYgdW5sZXNzICRzZWxmLT5mb2xsb3dfcGFyZW50OworCXVubGVzcyAoZGVmaW5lZCAkcGF0aHMpIHsKKwkJbXkgJGVycl9oYW5kbGVyID0gJFNWTjo6RXJyb3I6OmhhbmRsZXI7CisJCSRTVk46OkVycm9yOjpoYW5kbGVyID0gXCZHaXQ6OlNWTjo6UmE6OnNraXBfdW5rbm93bl9yZXZzOworCQkkc2VsZi0+cmEtPmdldF9sb2coWyRzZWxmLT5wYXRoXSwgJHJldiwgJHJldiwgMCwgMSwgMSwKKwkJCQkgICBzdWIgeyAkcGF0aHMgPSAkX1swXSB9KTsKKwkJJFNWTjo6RXJyb3I6OmhhbmRsZXIgPSAkZXJyX2hhbmRsZXI7CisJfQorCXJldHVybiB1bmRlZiB1bmxlc3MgZGVmaW5lZCAkcGF0aHM7CisKKwkjIGxvb2sgZm9yIGEgcGFyZW50IGZyb20gYW5vdGhlciBicmFuY2g6CisJbXkgQGJfcGF0aF9jb21wb25lbnRzID0gc3BsaXQgbSMvIywgJHNlbGYtPnBhdGg7CisJbXkgQGFfcGF0aF9jb21wb25lbnRzOworCW15ICRpOworCXdoaWxlIChAYl9wYXRoX2NvbXBvbmVudHMpIHsKKwkJJGkgPSAkcGF0aHMtPnsnLycuam9pbignLycsIEBiX3BhdGhfY29tcG9uZW50cyl9OworCQlsYXN0IGlmICRpICYmIGRlZmluZWQgJGktPntjb3B5ZnJvbV9wYXRofTsKKwkJdW5zaGlmdChAYV9wYXRoX2NvbXBvbmVudHMsIHBvcChAYl9wYXRoX2NvbXBvbmVudHMpKTsKKwl9CisJcmV0dXJuIHVuZGVmIHVubGVzcyBkZWZpbmVkICRpICYmIGRlZmluZWQgJGktPntjb3B5ZnJvbV9wYXRofTsKKwlteSAkYnJhbmNoX2Zyb20gPSAkaS0+e2NvcHlmcm9tX3BhdGh9OworCWlmIChAYV9wYXRoX2NvbXBvbmVudHMpIHsKKwkJcHJpbnQgU1RERVJSICJicmFuY2hfZnJvbTogJGJyYW5jaF9mcm9tID0+ICI7CisJCSRicmFuY2hfZnJvbSAuPSAnLycuam9pbignLycsIEBhX3BhdGhfY29tcG9uZW50cyk7CisJCXByaW50IFNUREVSUiAkYnJhbmNoX2Zyb20sICJcbiI7CisJfQorCW15ICRyID0gJGktPntjb3B5ZnJvbV9yZXZ9OworCW15ICRyZXBvc19yb290ID0gJHNlbGYtPnJhLT57cmVwb3Nfcm9vdH07CisJbXkgJHVybCA9ICRzZWxmLT5yYS0+dXJsOworCW15ICRuZXdfdXJsID0gY2Fub25pY2FsaXplX3VybCggYWRkX3BhdGhfdG9fdXJsKCAkdXJsLCAkYnJhbmNoX2Zyb20gKSApOworCXByaW50IFNUREVSUiAgIkZvdW5kIHBvc3NpYmxlIGJyYW5jaCBwb2ludDogIiwKKwkgICAgICAgICAgICAgICIkbmV3X3VybCA9PiAiLCAkc2VsZi0+ZnVsbF91cmwsICIsICRyXG4iCisJICAgICAgICAgICAgICB1bmxlc3MgJDo6X3EgPiAxOworCSRicmFuY2hfZnJvbSA9fiBzI14vIyM7CisJbXkgJGdzID0gJHNlbGYtPm90aGVyX2dzKCRuZXdfdXJsLCAkdXJsLAorCQkgICAgICAgICAgICAgICAgICRicmFuY2hfZnJvbSwgJHIsICRzZWxmLT57cmVmX2lkfSk7CisJbXkgKCRyMCwgJHBhcmVudCkgPSAkZ3MtPmZpbmRfcmV2X2JlZm9yZSgkciwgMSk7CisJeworCQlteSAoJGJhc2UsICRoZWFkKTsKKwkJaWYgKCFkZWZpbmVkICRyMCB8fCAhZGVmaW5lZCAkcGFyZW50KSB7CisJCQkoJGJhc2UsICRoZWFkKSA9IHBhcnNlX3JldmlzaW9uX2FyZ3VtZW50KDAsICRyKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgkcjAgPCAkcikgeworCQkJCSRncy0+cmEtPmdldF9sb2coWyRncy0+cGF0aF0sICRyMCArIDEsICRyLCAxLAorCQkJCQkwLCAxLCBzdWIgeyAkYmFzZSA9ICRfWzFdIC0gMSB9KTsKKwkJCX0KKwkJfQorCQlpZiAoZGVmaW5lZCAkYmFzZSAmJiAkYmFzZSA8PSAkcikgeworCQkJJGdzLT5mZXRjaCgkYmFzZSwgJHIpOworCQl9CisJCSgkcjAsICRwYXJlbnQpID0gJGdzLT5maW5kX3Jldl9iZWZvcmUoJHIsIDEpOworCX0KKwlpZiAoZGVmaW5lZCAkcjAgJiYgZGVmaW5lZCAkcGFyZW50KSB7CisJCXByaW50IFNUREVSUiAiRm91bmQgYnJhbmNoIHBhcmVudDogKCRzZWxmLT57cmVmX2lkfSkgJHBhcmVudFxuIgorCQkgICAgICAgICAgICAgdW5sZXNzICQ6Ol9xID4gMTsKKwkJbXkgJGVkOworCQlpZiAoJHNlbGYtPnJhLT5jYW5fZG9fc3dpdGNoKSB7CisJCQkkc2VsZi0+YXNzZXJ0X2luZGV4X2NsZWFuKCRwYXJlbnQpOworCQkJcHJpbnQgU1RERVJSICJGb2xsb3dpbmcgcGFyZW50IHdpdGggZG9fc3dpdGNoXG4iCisJCQkgICAgICAgICAgICAgdW5sZXNzICQ6Ol9xID4gMTsKKwkJCSMgZG9fc3dpdGNoIHdvcmtzIHdpdGggc3ZuL3RydW5rID49IHIyMjMxMiwgYnV0IHRoYXQKKwkJCSMgaXMgbm90IGluY2x1ZGVkIHdpdGggU1ZOIDEuNC4zICh0aGUgbGF0ZXN0IHZlcnNpb24KKwkJCSMgYXQgdGhlIG1vbWVudCksIHNvIHdlIGNhbid0IHJlbHkgb24gaXQKKwkJCSRzZWxmLT57bGFzdF9yZXZ9ID0gJHIwOworCQkJJHNlbGYtPntsYXN0X2NvbW1pdH0gPSAkcGFyZW50OworCQkJJGVkID0gR2l0OjpTVk46OkZldGNoZXItPm5ldygkc2VsZiwgJGdzLT5wYXRoKTsKKwkJCSRncy0+cmEtPmdzX2RvX3N3aXRjaCgkcjAsICRyZXYsICRncywKKwkJCQkJICAgICAgJHNlbGYtPmZ1bGxfdXJsLCAkZWQpCisJCQkgIG9yIGRpZSAiU1ZOIGNvbm5lY3Rpb24gZmFpbGVkIHNvbWV3aGVyZS4uLlxuIjsKKwkJfSBlbHNpZiAoJHNlbGYtPnJhLT50cmVlc19tYXRjaCgkbmV3X3VybCwgJHIwLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPmZ1bGxfdXJsLCAkcmV2KSkgeworCQkJcHJpbnQgU1RERVJSICJUcmVlcyBtYXRjaDpcbiIsCisJCQkgICAgICAgICAgICAgIiAgJG5ld191cmxcQCRyMFxuIiwKKwkJCSAgICAgICAgICAgICAiICAke1wkc2VsZi0+ZnVsbF91cmx9XEAkcmV2XG4iLAorCQkJICAgICAgICAgICAgICJGb2xsb3dpbmcgcGFyZW50IHdpdGggbm8gY2hhbmdlc1xuIgorCQkJICAgICAgICAgICAgIHVubGVzcyAkOjpfcSA+IDE7CisJCQkkc2VsZi0+dG1wX2luZGV4X2RvKHN1YiB7CisJCQkgICAgY29tbWFuZF9ub2lzeSgncmVhZC10cmVlJywgJHBhcmVudCk7CisJCQl9KTsKKwkJCSRzZWxmLT57bGFzdF9jb21taXR9ID0gJHBhcmVudDsKKwkJfSBlbHNlIHsKKwkJCXByaW50IFNUREVSUiAiRm9sbG93aW5nIHBhcmVudCB3aXRoIGRvX3VwZGF0ZVxuIgorCQkJICAgICAgICAgICAgIHVubGVzcyAkOjpfcSA+IDE7CisJCQkkZWQgPSBHaXQ6OlNWTjo6RmV0Y2hlci0+bmV3KCRzZWxmKTsKKwkJCSRzZWxmLT5yYS0+Z3NfZG9fdXBkYXRlKCRyZXYsICRyZXYsICRzZWxmLCAkZWQpCisJCQkgIG9yIGRpZSAiU1ZOIGNvbm5lY3Rpb24gZmFpbGVkIHNvbWV3aGVyZS4uLlxuIjsKKwkJfQorCQlwcmludCBTVERFUlIgIlN1Y2Nlc3NmdWxseSBmb2xsb3dlZCBwYXJlbnRcbiIgdW5sZXNzICQ6Ol9xID4gMTsKKwkJcmV0dXJuICRzZWxmLT5tYWtlX2xvZ19lbnRyeSgkcmV2LCBbJHBhcmVudF0sICRlZCwgJHIwLCAkYnJhbmNoX2Zyb20pOworCX0KKwlyZXR1cm4gdW5kZWY7Cit9CisKK3N1YiBkb19mZXRjaCB7CisJbXkgKCRzZWxmLCAkcGF0aHMsICRyZXYpID0gQF87CisJbXkgJGVkOworCW15ICgkbGFzdF9yZXYsIEBwYXJlbnRzKTsKKwlpZiAobXkgJGxjID0gJHNlbGYtPmxhc3RfY29tbWl0KSB7CisJCSMgd2UgY2FuIGhhdmUgYSBicmFuY2ggdGhhdCB3YXMgZGVsZXRlZCwgdGhlbiByZS1hZGRlZAorCQkjIHVuZGVyIHRoZSBzYW1lIG5hbWUgYnV0IGNvcGllZCBmcm9tIGFub3RoZXIgcGF0aCwgaW4KKwkJIyB3aGljaCBjYXNlIHdlJ2xsIGhhdmUgbXVsdGlwbGUgcGFyZW50cyAod2UgZG9uJ3QKKwkJIyB3YW50IHRvIGJyZWFrIHRoZSBvcmlnaW5hbCByZWYgb3IgbG9zZSBjb3B5cGF0aCBpbmZvKToKKwkJaWYgKG15ICRsb2dfZW50cnkgPSAkc2VsZi0+ZmluZF9wYXJlbnRfYnJhbmNoKCRwYXRocywgJHJldikpIHsKKwkJCXB1c2ggQHskbG9nX2VudHJ5LT57cGFyZW50c319LCAkbGM7CisJCQlyZXR1cm4gJGxvZ19lbnRyeTsKKwkJfQorCQkkZWQgPSBHaXQ6OlNWTjo6RmV0Y2hlci0+bmV3KCRzZWxmKTsKKwkJJGxhc3RfcmV2ID0gJHNlbGYtPntsYXN0X3Jldn07CisJCSRlZC0+e2N9ID0gJGxjOworCQlAcGFyZW50cyA9ICgkbGMpOworCX0gZWxzZSB7CisJCSRsYXN0X3JldiA9ICRyZXY7CisJCWlmIChteSAkbG9nX2VudHJ5ID0gJHNlbGYtPmZpbmRfcGFyZW50X2JyYW5jaCgkcGF0aHMsICRyZXYpKSB7CisJCQlyZXR1cm4gJGxvZ19lbnRyeTsKKwkJfQorCQkkZWQgPSBHaXQ6OlNWTjo6RmV0Y2hlci0+bmV3KCRzZWxmKTsKKwl9CisJdW5sZXNzICgkc2VsZi0+cmEtPmdzX2RvX3VwZGF0ZSgkbGFzdF9yZXYsICRyZXYsICRzZWxmLCAkZWQpKSB7CisJCWRpZSAiU1ZOIGNvbm5lY3Rpb24gZmFpbGVkIHNvbWV3aGVyZS4uLlxuIjsKKwl9CisJJHNlbGYtPm1ha2VfbG9nX2VudHJ5KCRyZXYsIFxAcGFyZW50cywgJGVkLCAkbGFzdF9yZXYsICRzZWxmLT5wYXRoKTsKK30KKworc3ViIG1rZW1wdHlkaXJzIHsKKwlteSAoJHNlbGYsICRyKSA9IEBfOworCisJc3ViIHNjYW4geworCQlteSAoJHIsICRlbXB0eV9kaXJzLCAkbGluZSkgPSBAXzsKKwkJaWYgKGRlZmluZWQgJHIgJiYgJGxpbmUgPX4gL15yKFxkKykkLykgeworCQkJcmV0dXJuIDAgaWYgJDEgPiAkcjsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gL14gIFwrZW1wdHlfZGlyOiAoLispJC8pIHsKKwkJCSRlbXB0eV9kaXJzLT57JDF9ID0gMTsKKwkJfSBlbHNpZiAoJGxpbmUgPX4gL14gIFwtZW1wdHlfZGlyOiAoLispJC8pIHsKKwkJCW15IEBkID0gZ3JlcCB7bVteXFEkMVxFKC98JCldfSAoa2V5cyAlJGVtcHR5X2RpcnMpOworCQkJZGVsZXRlIEAkZW1wdHlfZGlyc3tAZH07CisJCX0KKwkJMTsgIyBjb250aW51ZQorCX07CisKKwlteSAlZW1wdHlfZGlycyA9ICgpOworCW15ICRnel9maWxlID0gIiRzZWxmLT57ZGlyfS91bmhhbmRsZWQubG9nLmd6IjsKKwlpZiAoLWYgJGd6X2ZpbGUpIHsKKwkJaWYgKCFjYW5fY29tcHJlc3MoKSkgeworCQkJd2FybiAiQ29tcHJlc3M6OlpsaWIgY291bGQgbm90IGJlIGZvdW5kOyAiLAorCQkJICAgICAiZW1wdHkgZGlyZWN0b3JpZXMgaW4gJGd6X2ZpbGUgd2lsbCBub3QgYmUgcmVhZFxuIjsKKwkJfSBlbHNlIHsKKwkJCW15ICRneiA9IENvbXByZXNzOjpabGliOjpnem9wZW4oJGd6X2ZpbGUsICJyYiIpIG9yCisJCQkJZGllICJVbmFibGUgdG8gb3BlbiAkZ3pfZmlsZTogJCFcbiI7CisJCQlteSAkbGluZTsKKwkJCXdoaWxlICgkZ3otPmd6cmVhZGxpbmUoJGxpbmUpID4gMCkgeworCQkJCXNjYW4oJHIsIFwlZW1wdHlfZGlycywgJGxpbmUpIG9yIGxhc3Q7CisJCQl9CisJCQkkZ3otPmd6Y2xvc2U7CisJCX0KKwl9CisKKwlpZiAob3BlbiBteSAkZmgsICc8JywgIiRzZWxmLT57ZGlyfS91bmhhbmRsZWQubG9nIikgeworCQliaW5tb2RlICRmaCBvciBjcm9hayAiYmlubW9kZTogJCEiOworCQl3aGlsZSAoPCRmaD4pIHsKKwkJCXNjYW4oJHIsIFwlZW1wdHlfZGlycywgJF8pIG9yIGxhc3Q7CisJCX0KKwkJY2xvc2UgJGZoOworCX0KKworCW15ICRzdHJpcCA9IHFyL1xBXFFAe1skc2VsZi0+cGF0aF19XEUoPzpcL3wkKS87CisJZm9yZWFjaCBteSAkZCAoc29ydCBrZXlzICVlbXB0eV9kaXJzKSB7CisJCSRkID0gdXJpX2RlY29kZSgkZCk7CisJCSRkID1+IHMvJHN0cmlwLy87CisJCW5leHQgdW5sZXNzIGxlbmd0aCgkZCk7CisJCW5leHQgaWYgLWQgJGQ7CisJCWlmICgtZSAkZCkgeworCQkJd2FybiAiJGQgZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3RvcnlcbiI7CisJCX0gZWxzZSB7CisJCQlwcmludCAiY3JlYXRpbmcgZW1wdHkgZGlyZWN0b3J5OiAkZFxuIjsKKwkJCW1rcGF0aChbJGRdKTsKKwkJfQorCX0KK30KKworc3ViIGdldF91bnRyYWNrZWQgeworCW15ICgkc2VsZiwgJGVkKSA9IEBfOworCW15IEBvdXQ7CisJbXkgJGggPSAkZWQtPntlbXB0eX07CisJZm9yZWFjaCAoc29ydCBrZXlzICUkaCkgeworCQlteSAkYWN0ID0gJGgtPnskX30gPyAnK2VtcHR5X2RpcicgOiAnLWVtcHR5X2Rpcic7CisJCXB1c2ggQG91dCwgIiAgJGFjdDogIiAuIHVyaV9lbmNvZGUoJF8pOworCQl3YXJuICJXOiAkYWN0OiAkX1xuIjsKKwl9CisJZm9yZWFjaCBteSAkdCAocXcvZGlyX3Byb3AgZmlsZV9wcm9wLykgeworCQkkaCA9ICRlZC0+eyR0fSBvciBuZXh0OworCQlmb3JlYWNoIG15ICRwYXRoIChzb3J0IGtleXMgJSRoKSB7CisJCQlteSAkcHBhdGggPSAkcGF0aCBlcSAnJyA/ICcuJyA6ICRwYXRoOworCQkJZm9yZWFjaCBteSAkcHJvcCAoc29ydCBrZXlzICV7JGgtPnskcGF0aH19KSB7CisJCQkJbmV4dCBpZiAkU0tJUF9QUk9QeyRwcm9wfTsKKwkJCQlteSAkdiA9ICRoLT57JHBhdGh9LT57JHByb3B9OworCQkJCW15ICR0X3BwYXRoX3Byb3AgPSAiJHQ6ICIgLgorCQkJCSAgICAgICAgICAgICAgICAgICAgdXJpX2VuY29kZSgkcHBhdGgpIC4gJyAnIC4KKwkJCQkgICAgICAgICAgICAgICAgICAgIHVyaV9lbmNvZGUoJHByb3ApOworCQkJCWlmIChkZWZpbmVkICR2KSB7CisJCQkJCXB1c2ggQG91dCwgIiAgKyR0X3BwYXRoX3Byb3AgIiAuCisJCQkJCSAgICAgICAgICAgdXJpX2VuY29kZSgkdik7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHVzaCBAb3V0LCAiICAtJHRfcHBhdGhfcHJvcCI7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWZvcmVhY2ggbXkgJHQgKHF3L2Fic2VudF9maWxlIGFic2VudF9kaXJlY3RvcnkvKSB7CisJCSRoID0gJGVkLT57JHR9IG9yIG5leHQ7CisJCWZvcmVhY2ggbXkgJHBhcmVudCAoc29ydCBrZXlzICUkaCkgeworCQkJZm9yZWFjaCBteSAkcGF0aCAoc29ydCBAeyRoLT57JHBhcmVudH19KSB7CisJCQkJcHVzaCBAb3V0LCAiICAkdDogIiAuCisJCQkJICAgICAgICAgICB1cmlfZW5jb2RlKCIkcGFyZW50LyRwYXRoIik7CisJCQkJd2FybiAiVzogJHQ6ICRwYXJlbnQvJHBhdGggIiwKKwkJCQkgICAgICJJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnM/XG4iOworCQkJfQorCQl9CisJfQorCVxAb3V0OworfQorCisjIHBhcnNlX3N2bl9kYXRlKERBVEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEdpdmVuIGEgZGF0ZSAoaW4gVVRDKSBmcm9tIFN1YnZlcnNpb24sIHJldHVybiBhIHN0cmluZyBpbiB0aGUgZm9ybWF0CisjICI8VFogT2Zmc2V0PiA8bG9jYWwgZGF0ZS90aW1lPiIgdGhhdCBHaXQgd2lsbCB1c2UuCisjCisjIEJ5IGRlZmF1bHQgdGhlIHBhcnNlZCBkYXRlIHdpbGwgYmUgaW4gVVRDOyBpZiAkR2l0OjpTVk46Ol9sb2NhbHRpbWUKKyMgaXMgdHJ1ZSB3ZSdsbCBjb252ZXJ0IGl0IHRvIHRoZSBsb2NhbCB0aW1lem9uZSBpbnN0ZWFkLgorc3ViIHBhcnNlX3N2bl9kYXRlIHsKKwlteSAkZGF0ZSA9IHNoaWZ0IHx8IHJldHVybiAnKzAwMDAgMTk3MC0wMS0wMSAwMDowMDowMCc7CisJbXkgKCRZLCRtLCRkLCRILCRNLCRTKSA9ICgkZGF0ZSA9fiAvXihcZHs0fSlcLShcZFxkKVwtKFxkXGQpVAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcZFxkPylcOihcZFxkKVw6KFxkXGQpXC5cZCpaJC94KSBvcgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb2FrICJVbmFibGUgdG8gcGFyc2UgZGF0ZTogJGRhdGVcbiI7CisJbXkgJHBhcnNlZF9kYXRlOyAgICAjIFNldCBuZXh0LgorCisJaWYgKCRHaXQ6OlNWTjo6X2xvY2FsdGltZSkgeworCQkjIFRyYW5zbGF0ZSB0aGUgU3VidmVyc2lvbiBkYXRldGltZSB0byBhbiBlcG9jaCB0aW1lLgorCQkjIEJlZ2luIGJ5IHN3aXRjaGluZyBvdXJzZWx2ZXMgdG8gJGRhdGUncyB0aW1lem9uZSwgVVRDLgorCQlteSAkb2xkX2Vudl9UWiA9ICRFTlZ7VFp9OworCQkkRU5We1RafSA9ICdVVEMnOworCisJCW15ICRlcG9jaF9pbl9VVEMgPQorCQkgICAgVGltZTo6TG9jYWw6OnRpbWVsb2NhbCgkUywgJE0sICRILCAkZCwgJG0gLSAxLCAkWSAtIDE5MDApOworCisJCSMgRGV0ZXJtaW5lIG91ciBsb2NhbCB0aW1lem9uZSAoaW5jbHVkaW5nIERTVCkgYXQgdGhlCisJCSMgdGltZSBvZiAkZXBvY2hfaW5fVVRDLiAgJEdpdDo6U1ZOOjpMb2c6OlRaIHN0b3JlZCB0aGUKKwkJIyB2YWx1ZSBvZiBUWiwgaWYgYW55LCBhdCB0aGUgdGltZSB3ZSB3ZXJlIHJ1bi4KKwkJaWYgKGRlZmluZWQgJEdpdDo6U1ZOOjpMb2c6OlRaKSB7CisJCQkkRU5We1RafSA9ICRHaXQ6OlNWTjo6TG9nOjpUWjsKKwkJfSBlbHNlIHsKKwkJCWRlbGV0ZSAkRU5We1RafTsKKwkJfQorCisJCW15ICRvdXJfVFogPSBnZXRfdHpfb2Zmc2V0KCk7CisKKwkJIyBUaGlzIGNvbnZlcnRzICRlcG9jaF9pbl9VVEMgaW50byBvdXIgbG9jYWwgdGltZXpvbmUuCisJCW15ICgkc2VjLCAkbWluLCAkaG91ciwgJG1kYXksICRtb24sICR5ZWFyLAorCQkgICAgJHdkYXksICR5ZGF5LCAkaXNkc3QpID0gbG9jYWx0aW1lKCRlcG9jaF9pbl9VVEMpOworCisJCSRwYXJzZWRfZGF0ZSA9IHNwcmludGYoJyVzICUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkJywKKwkJCQkgICAgICAgJG91cl9UWiwgJHllYXIgKyAxOTAwLCAkbW9uICsgMSwKKwkJCQkgICAgICAgJG1kYXksICRob3VyLCAkbWluLCAkc2VjKTsKKworCQkjIFJlc2V0IHVzIHRvIHRoZSB0aW1lem9uZSBpbiBlZmZlY3Qgd2hlbiB3ZSBlbnRlcmVkCisJCSMgdGhpcyByb3V0aW5lLgorCQlpZiAoZGVmaW5lZCAkb2xkX2Vudl9UWikgeworCQkJJEVOVntUWn0gPSAkb2xkX2Vudl9UWjsKKwkJfSBlbHNlIHsKKwkJCWRlbGV0ZSAkRU5We1RafTsKKwkJfQorCX0gZWxzZSB7CisJCSRwYXJzZWRfZGF0ZSA9ICIrMDAwMCAkWS0kbS0kZCAkSDokTTokUyI7CisJfQorCisJcmV0dXJuICRwYXJzZWRfZGF0ZTsKK30KKworc3ViIG90aGVyX2dzIHsKKwlteSAoJHNlbGYsICRuZXdfdXJsLCAkdXJsLAorCSAgICAkYnJhbmNoX2Zyb20sICRyLCAkb2xkX3JlZl9pZCkgPSBAXzsKKwlteSAkZ3MgPSBHaXQ6OlNWTi0+ZmluZF9ieV91cmwoJG5ld191cmwsICR1cmwsICRicmFuY2hfZnJvbSk7CisJdW5sZXNzICgkZ3MpIHsKKwkJbXkgJHJlZl9pZCA9ICRvbGRfcmVmX2lkOworCQkkcmVmX2lkID1+IHMvXEBcZCstKiQvLzsKKwkJJHJlZl9pZCAuPSAiXEAkciI7CisJCSMganVzdCBncm93IGEgdGFpbCBpZiB3ZSdyZSBub3QgdW5pcXVlIGVub3VnaCA6eAorCQkkcmVmX2lkIC49ICctJyB3aGlsZSBmaW5kX3JlZigkcmVmX2lkKTsKKwkJbXkgKCR1LCAkcCwgJHJlcG9faWQpID0gKCRuZXdfdXJsLCAnJywgJHJlZl9pZCk7CisJCWlmICgkdSA9fiBzI15cUSR1cmxcRSgvfCQpIyMpIHsKKwkJCSRwID0gJHU7CisJCQkkdSA9ICR1cmw7CisJCQkkcmVwb19pZCA9ICRzZWxmLT57cmVwb19pZH07CisJCX0KKwkJd2hpbGUgKDEpIHsKKwkJCSMgSXQgaXMgcG9zc2libGUgdG8gdGFnIHR3byBkaWZmZXJlbnQgc3ViZGlyZWN0b3JpZXMgYXQKKwkJCSMgdGhlIHNhbWUgcmV2aXNpb24uICBJZiB0aGUgdXJsIGZvciBhbiBleGlzdGluZyByZWYKKwkJCSMgZG9lcyBub3QgbWF0Y2gsIHdlIG11c3QgZWl0aGVyIGZpbmQgYSByZWYgd2l0aCBhCisJCQkjIG1hdGNoaW5nIHVybCBvciBjcmVhdGUgYSBuZXcgcmVmIGJ5IGdyb3dpbmcgYSB0YWlsLgorCQkJJGdzID0gR2l0OjpTVk4tPmluaXQoJHUsICRwLCAkcmVwb19pZCwgJHJlZl9pZCwgMSk7CisJCQlteSAodW5kZWYsICRtYXhfY29tbWl0KSA9ICRncy0+cmV2X21hcF9tYXgoMSk7CisJCQlsYXN0IGlmICghJG1heF9jb21taXQpOworCQkJbXkgKCR1cmwpID0gOjpjbXRfbWV0YWRhdGEoJG1heF9jb21taXQpOworCQkJbGFzdCBpZiAoJHVybCBlcSAkZ3MtPm1ldGFkYXRhX3VybCk7CisJCQkkcmVmX2lkIC49ICctJzsKKwkJfQorCQlwcmludCBTVERFUlIgIkluaXRpYWxpemluZyBwYXJlbnQ6ICRyZWZfaWRcbiIgdW5sZXNzICQ6Ol9xID4gMTsKKwl9CisJJGdzCit9CisKK3N1YiBjYWxsX2F1dGhvcnNfcHJvZyB7CisJbXkgKCRvcmlnX2F1dGhvcikgPSBAXzsKKwkkb3JpZ19hdXRob3IgPSBjb21tYW5kX29uZWxpbmUoJ3Jldi1wYXJzZScsICctLXNxLXF1b3RlJywgJG9yaWdfYXV0aG9yKTsKKwlteSAkYXV0aG9yID0gYCQ6Ol9hdXRob3JzX3Byb2cgJG9yaWdfYXV0aG9yYDsKKwlpZiAoJD8gIT0gMCkgeworCQlkaWUgIiQ6Ol9hdXRob3JzX3Byb2cgZmFpbGVkIHdpdGggZXhpdCBjb2RlICQ/XG4iCisJfQorCWlmICgkYXV0aG9yID1+IC9eXHMqKC4rPylccyo8KC4qKT5ccyokLykgeworCQlteSAoJG5hbWUsICRlbWFpbCkgPSAoJDEsICQyKTsKKwkJJGVtYWlsID0gdW5kZWYgaWYgbGVuZ3RoICQyID09IDA7CisJCXJldHVybiBbJG5hbWUsICRlbWFpbF07CisJfSBlbHNlIHsKKwkJZGllICJBdXRob3I6ICRvcmlnX2F1dGhvcjogJDo6X2F1dGhvcnNfcHJvZyByZXR1cm5lZCAiCisJCQkuICJpbnZhbGlkIGF1dGhvciBmb3JtYXQ6ICRhdXRob3JcbiI7CisJfQorfQorCitzdWIgY2hlY2tfYXV0aG9yIHsKKwlteSAoJGF1dGhvcikgPSBAXzsKKwlpZiAoIWRlZmluZWQgJGF1dGhvciB8fCBsZW5ndGggJGF1dGhvciA9PSAwKSB7CisJCSRhdXRob3IgPSAnKG5vIGF1dGhvciknOworCX0KKwlpZiAoIWRlZmluZWQgJDo6dXNlcnN7JGF1dGhvcn0pIHsKKwkJaWYgKGRlZmluZWQgJDo6X2F1dGhvcnNfcHJvZykgeworCQkJJDo6dXNlcnN7JGF1dGhvcn0gPSBjYWxsX2F1dGhvcnNfcHJvZygkYXV0aG9yKTsKKwkJfSBlbHNpZiAoZGVmaW5lZCAkOjpfYXV0aG9ycykgeworCQkJZGllICJBdXRob3I6ICRhdXRob3Igbm90IGRlZmluZWQgaW4gJDo6X2F1dGhvcnMgZmlsZVxuIjsKKwkJfQorCX0KKwkkYXV0aG9yOworfQorCitzdWIgZmluZF9leHRyYV9zdmtfcGFyZW50cyB7CisJbXkgKCRzZWxmLCAkdGlja2V0cywgJHBhcmVudHMpID0gQF87CisJIyBhaGEhICBzdms6bWVyZ2UgcHJvcGVydHkgY2hhbmdlZC4uLgorCW15IEB0aWNrZXRzID0gc3BsaXQgIlxuIiwgJHRpY2tldHM7CisJbXkgQGtub3duX3BhcmVudHM7CisJZm9yIG15ICR0aWNrZXQgKCBAdGlja2V0cyApIHsKKwkJbXkgKCR1dWlkLCAkcGF0aCwgJHJldikgPSBzcGxpdCAvOi8sICR0aWNrZXQ7CisJCWlmICggJHV1aWQgZXEgJHNlbGYtPnJhX3V1aWQgKSB7CisJCQlteSAkcmVwb3Nfcm9vdCA9ICRzZWxmLT51cmw7CisJCQlteSAkYnJhbmNoX2Zyb20gPSAkcGF0aDsKKwkJCSRicmFuY2hfZnJvbSA9fiBze14vfXt9OworCQkJbXkgJGdzID0gJHNlbGYtPm90aGVyX2dzKGFkZF9wYXRoX3RvX3VybCggJHJlcG9zX3Jvb3QsICRicmFuY2hfZnJvbSApLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICRyZXBvc19yb290LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICRicmFuY2hfZnJvbSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAkcmV2LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICRzZWxmLT57cmVmX2lkfSk7CisJCQlpZiAoIG15ICRjb21taXQgPSAkZ3MtPnJldl9tYXBfZ2V0KCRyZXYsICR1dWlkKSApIHsKKwkJCQkjIHdhaGV5ISAgd2UgZm91bmQgaXQsIGJ1dCBpdCBtaWdodCBiZQorCQkJCSMgYW4gb2xkIG9uZSAoISkKKwkJCQlwdXNoIEBrbm93bl9wYXJlbnRzLCBbICRyZXYsICRjb21taXQgXTsKKwkJCX0KKwkJfQorCX0KKwkjIE9yZGVyaW5nIG1hdHRlcnM7IGhpZ2hlc3QtbnVtYmVyZWQgY29tbWl0IG1lcmdlIHRpY2tldHMKKwkjIGZpcnN0LCBhcyB0aGV5IG1heSBhY2NvdW50IGZvciBsYXRlciBtZXJnZSB0aWNrZXQgYWRkaXRpb25zCisJIyBvciBjaGFuZ2VzLgorCUBrbm93bl9wYXJlbnRzID0gbWFwIHskXy0+WzFdfSBzb3J0IHskYi0+WzBdIDw9PiAkYS0+WzBdfSBAa25vd25fcGFyZW50czsKKwlmb3IgbXkgJHBhcmVudCAoIEBrbm93bl9wYXJlbnRzICkgeworCQlteSBAY21kID0gKCdyZXYtbGlzdCcsICRwYXJlbnQsIG1hcCB7ICJeJF8iIH0gQCRwYXJlbnRzICk7CisJCW15ICgkbXNnX2ZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoQGNtZCk7CisJCW15ICRuZXc7CisJCXdoaWxlICggPCRtc2dfZmg+ICkgeworCQkJJG5ldz0xO2xhc3Q7CisJCX0KKwkJY29tbWFuZF9jbG9zZV9waXBlKCRtc2dfZmgsICRjdHgpOworCQlpZiAoICRuZXcgKSB7CisJCQlwcmludCBTVERFUlIKKwkJCSAgICAiRm91bmQgbWVyZ2UgcGFyZW50IChzdms6bWVyZ2UgdGlja2V0KTogJHBhcmVudFxuIjsKKwkJCXB1c2ggQCRwYXJlbnRzLCAkcGFyZW50OworCQl9CisJfQorfQorCitzdWIgbG9va3VwX3N2bl9tZXJnZSB7CisJbXkgJHV1aWQgPSBzaGlmdDsKKwlteSAkdXJsID0gc2hpZnQ7CisJbXkgJHNvdXJjZSA9IHNoaWZ0OworCW15ICRyZXZzID0gc2hpZnQ7CisKKwlteSAkcGF0aCA9ICRzb3VyY2U7CisJJHBhdGggPX4gc3teL317fTsKKwlteSAkZ3MgPSBHaXQ6OlNWTi0+ZmluZF9ieV91cmwoJHVybC4kc291cmNlLCAkdXJsLCAkcGF0aCk7CisJaWYgKCAhJGdzICkgeworCQl3YXJuICJDb3VsZG4ndCBmaW5kIHJldm1hcCBmb3IgJHVybCRzb3VyY2VcbiI7CisJCXJldHVybjsKKwl9CisJbXkgQHJhbmdlcyA9IHNwbGl0ICIsIiwgJHJldnM7CisJbXkgKCR0aXAsICR0aXBfY29tbWl0KTsKKwlteSBAbWVyZ2VkX2NvbW1pdF9yYW5nZXM7CisJIyBmaW5kIHRoZSB0aXAKKwlmb3IgbXkgJHJhbmdlICggQHJhbmdlcyApIHsKKwkJaWYgKCRyYW5nZSA9fiAvWypdJC8pIHsKKwkJCXdhcm4gIlc6IElnbm9yaW5nIHBhcnRpYWwgbWVyZ2UgaW4gc3ZuOm1lcmdlaW5mbyAiCisJCQkJLiJkaXJwcm9wOiAkc291cmNlOiRyYW5nZVxuIjsKKwkJCW5leHQ7CisJCX0KKwkJbXkgKCRib3R0b20sICR0b3ApID0gc3BsaXQgIi0iLCAkcmFuZ2U7CisJCSR0b3AgfHw9ICRib3R0b207CisJCW15ICRib3R0b21fY29tbWl0ID0gJGdzLT5maW5kX3Jldl9hZnRlciggJGJvdHRvbSwgMSwgJHRvcCApOworCQlteSAkdG9wX2NvbW1pdCA9ICRncy0+ZmluZF9yZXZfYmVmb3JlKCAkdG9wLCAxLCAkYm90dG9tICk7CisKKwkJdW5sZXNzICgkdG9wX2NvbW1pdCBhbmQgJGJvdHRvbV9jb21taXQpIHsKKwkJCXdhcm4gIlc6IHVua25vd24gcGF0aC9yZXYgaW4gc3ZuOm1lcmdlaW5mbyAiCisJCQkJLiJkaXJwcm9wOiAkc291cmNlOiRyYW5nZVxuIjsKKwkJCW5leHQ7CisJCX0KKworCQlpZiAoc2NhbGFyKGNvbW1hbmQoJ3Jldi1wYXJzZScsICIkYm90dG9tX2NvbW1pdF5AIikpKSB7CisJCQlwdXNoIEBtZXJnZWRfY29tbWl0X3JhbmdlcywKKwkJCSAgICAgIiRib3R0b21fY29tbWl0Xi4uJHRvcF9jb21taXQiOworCQl9IGVsc2UgeworCQkJcHVzaCBAbWVyZ2VkX2NvbW1pdF9yYW5nZXMsICIkdG9wX2NvbW1pdCI7CisJCX0KKworCQlpZiAoICFkZWZpbmVkICR0aXAgb3IgJHRvcCA+ICR0aXAgKSB7CisJCQkkdGlwID0gJHRvcDsKKwkJCSR0aXBfY29tbWl0ID0gJHRvcF9jb21taXQ7CisJCX0KKwl9CisJcmV0dXJuICgkdGlwX2NvbW1pdCwgQG1lcmdlZF9jb21taXRfcmFuZ2VzKTsKK30KKworc3ViIF9yZXZfbGlzdCB7CisJbXkgKCRtc2dfZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZSgKKwkJInJldi1saXN0IiwgQF8sCisJICAgICAgICk7CisJbXkgQHJ2OworCXdoaWxlICggPCRtc2dfZmg+ICkgeworCQljaG9tcDsKKwkJcHVzaCBAcnYsICRfOworCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJG1zZ19maCwgJGN0eCk7CisJQHJ2OworfQorCitzdWIgY2hlY2tfY2hlcnJ5X3BpY2syIHsKKwlteSAkYmFzZSA9IHNoaWZ0OworCW15ICR0aXAgPSBzaGlmdDsKKwlteSAkcGFyZW50cyA9IHNoaWZ0OworCW15IEByYW5nZXMgPSBAXzsKKwlteSAlY29tbWl0cyA9IG1hcCB7ICRfID0+IDEgfQorCQlfcmV2X2xpc3QoIi0tbm8tbWVyZ2VzIiwgJHRpcCwgIi0tbm90IiwgJGJhc2UsIEAkcGFyZW50cywgIi0tIik7CisJZm9yIG15ICRyYW5nZSAoIEByYW5nZXMgKSB7CisJCWRlbGV0ZSBAY29tbWl0c3tfcmV2X2xpc3QoJHJhbmdlLCAiLS0iKX07CisJfQorCWZvciBteSAkY29tbWl0IChrZXlzICVjb21taXRzKSB7CisJCWlmIChoYXNfbm9fY2hhbmdlcygkY29tbWl0KSkgeworCQkJZGVsZXRlICRjb21taXRzeyRjb21taXR9OworCQl9CisJfQorCW15IEBrID0gKGtleXMgJWNvbW1pdHMpOworCXJldHVybiAoc2NhbGFyIEBrLCAka1swXSk7Cit9CisKK3N1YiBoYXNfbm9fY2hhbmdlcyB7CisJbXkgJGNvbW1pdCA9IHNoaWZ0OworCisJbXkgQHJldnMgPSBzcGxpdCAvIC8sIGNvbW1hbmRfb25lbGluZSgKKwkJcXcocmV2LWxpc3QgLS1wYXJlbnRzIC0xIC1tKSwgJGNvbW1pdCk7CisKKwkjIENvbW1pdHMgd2l0aCBubyBwYXJlbnRzLCBlLmcuIHRoZSBzdGFydCBvZiBhIHBhcnRpYWwgYnJhbmNoLAorCSMgaGF2ZSBjaGFuZ2VzIGJ5IGRlZmluaXRpb24uCisJcmV0dXJuIDEgaWYgKEByZXZzIDwgMik7CisKKwkjIENvbW1pdHMgd2l0aCBtdWx0aXBsZSBwYXJlbnRzLCBlLmcgYSBtZXJnZSwgaGF2ZSBubyBjaGFuZ2VzCisJIyBieSBkZWZpbml0aW9uLgorCXJldHVybiAwIGlmIChAcmV2cyA+IDIpOworCisJcmV0dXJuIChjb21tYW5kX29uZWxpbmUoInJldi1wYXJzZSIsICIkY29tbWl0Xnt0cmVlfSIpIGVxCisJCWNvbW1hbmRfb25lbGluZSgicmV2LXBhcnNlIiwgIiRjb21taXR+MV57dHJlZX0iKSk7Cit9CisKK3N1YiB0aWVfZm9yX3BlcnNpc3RlbnRfbWVtb2l6YXRpb24geworCW15ICRoYXNoID0gc2hpZnQ7CisJbXkgJHBhdGggPSBzaGlmdDsKKworCXVubGVzcyAoJG1lbW9fYmFja2VuZCkgeworCQlpZiAoZXZhbCB7IHJlcXVpcmUgR2l0OjpTVk46Ok1lbW9pemU6OllBTUw7IDF9KSB7CisJCQkkbWVtb19iYWNrZW5kID0gMTsKKwkJfSBlbHNlIHsKKwkJCXJlcXVpcmUgTWVtb2l6ZTo6U3RvcmFibGU7CisJCQkkbWVtb19iYWNrZW5kID0gLTE7CisJCX0KKwl9CisKKwlpZiAoJG1lbW9fYmFja2VuZCA+IDApIHsKKwkJdGllICUkaGFzaCA9PiAnR2l0OjpTVk46Ok1lbW9pemU6OllBTUwnLCAiJHBhdGgueWFtbCI7CisJfSBlbHNlIHsKKwkJdGllICUkaGFzaCA9PiAnTWVtb2l6ZTo6U3RvcmFibGUnLCAiJHBhdGguZGIiLCAnbnN0b3JlJzsKKwl9Cit9CisKKyMgVGhlIEdJVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGFsd2F5cyBzZXQgdW50aWwgYWZ0ZXIgdGhlIGNvbW1hbmQKKyMgbGluZSBhcmd1bWVudHMgYXJlIHByb2Nlc3NlZCwgc28gd2UgY2FuJ3QgbWVtb2l6ZSBpbiBhIEJFR0lOIGJsb2NrLgoreworCW15ICRtZW1vaXplZCA9IDA7CisKKwlzdWIgbWVtb2l6ZV9zdm5fbWVyZ2VpbmZvX2Z1bmN0aW9ucyB7CisJCXJldHVybiBpZiAkbWVtb2l6ZWQ7CisJCSRtZW1vaXplZCA9IDE7CisKKwkJbXkgJGNhY2hlX3BhdGggPSAiJEVOVntHSVRfRElSfS9zdm4vLmNhY2hlcy8iOworCQlta3BhdGgoWyRjYWNoZV9wYXRoXSkgdW5sZXNzIC1kICRjYWNoZV9wYXRoOworCisJCW15ICVsb29rdXBfc3ZuX21lcmdlX2NhY2hlOworCQlteSAlY2hlY2tfY2hlcnJ5X3BpY2syX2NhY2hlOworCQlteSAlaGFzX25vX2NoYW5nZXNfY2FjaGU7CisKKwkJdGllX2Zvcl9wZXJzaXN0ZW50X21lbW9pemF0aW9uKFwlbG9va3VwX3N2bl9tZXJnZV9jYWNoZSwKKwkJICAgICIkY2FjaGVfcGF0aC9sb29rdXBfc3ZuX21lcmdlIik7CisJCW1lbW9pemUgJ2xvb2t1cF9zdm5fbWVyZ2UnLAorCQkJU0NBTEFSX0NBQ0hFID0+ICdGQVVMVCcsCisJCQlMSVNUX0NBQ0hFID0+IFsnSEFTSCcgPT4gXCVsb29rdXBfc3ZuX21lcmdlX2NhY2hlXSwKKwkJOworCisJCXRpZV9mb3JfcGVyc2lzdGVudF9tZW1vaXphdGlvbihcJWNoZWNrX2NoZXJyeV9waWNrMl9jYWNoZSwKKwkJICAgICIkY2FjaGVfcGF0aC9jaGVja19jaGVycnlfcGljazIiKTsKKwkJbWVtb2l6ZSAnY2hlY2tfY2hlcnJ5X3BpY2syJywKKwkJCVNDQUxBUl9DQUNIRSA9PiAnRkFVTFQnLAorCQkJTElTVF9DQUNIRSA9PiBbJ0hBU0gnID0+IFwlY2hlY2tfY2hlcnJ5X3BpY2syX2NhY2hlXSwKKwkJOworCisJCXRpZV9mb3JfcGVyc2lzdGVudF9tZW1vaXphdGlvbihcJWhhc19ub19jaGFuZ2VzX2NhY2hlLAorCQkgICAgIiRjYWNoZV9wYXRoL2hhc19ub19jaGFuZ2VzIik7CisJCW1lbW9pemUgJ2hhc19ub19jaGFuZ2VzJywKKwkJCVNDQUxBUl9DQUNIRSA9PiBbJ0hBU0gnID0+IFwlaGFzX25vX2NoYW5nZXNfY2FjaGVdLAorCQkJTElTVF9DQUNIRSA9PiAnRkFVTFQnLAorCQk7CisJfQorCisJc3ViIHVubWVtb2l6ZV9zdm5fbWVyZ2VpbmZvX2Z1bmN0aW9ucyB7CisJCXJldHVybiBpZiBub3QgJG1lbW9pemVkOworCQkkbWVtb2l6ZWQgPSAwOworCisJCU1lbW9pemU6OnVubWVtb2l6ZSAnbG9va3VwX3N2bl9tZXJnZSc7CisJCU1lbW9pemU6OnVubWVtb2l6ZSAnY2hlY2tfY2hlcnJ5X3BpY2syJzsKKwkJTWVtb2l6ZTo6dW5tZW1vaXplICdoYXNfbm9fY2hhbmdlcyc7CisJfQorCisJc3ViIGNsZWFyX21lbW9pemVkX21lcmdlaW5mb19jYWNoZXMgeworCQlkaWUgIk9ubHkgY2FsbCB0aGlzIG1ldGhvZCBpbiBub24tbWVtb2l6ZWQgY29udGV4dCIgaWYgKCRtZW1vaXplZCk7CisKKwkJbXkgJGNhY2hlX3BhdGggPSAiJEVOVntHSVRfRElSfS9zdm4vLmNhY2hlcy8iOworCQlyZXR1cm4gdW5sZXNzIC1kICRjYWNoZV9wYXRoOworCisJCWZvciBteSAkY2FjaGVfZmlsZSAoKCIkY2FjaGVfcGF0aC9sb29rdXBfc3ZuX21lcmdlIiwKKwkJCQkgICAgICIkY2FjaGVfcGF0aC9jaGVja19jaGVycnlfcGljayIsICMgb2xkCisJCQkJICAgICAiJGNhY2hlX3BhdGgvY2hlY2tfY2hlcnJ5X3BpY2syIiwKKwkJCQkgICAgICIkY2FjaGVfcGF0aC9oYXNfbm9fY2hhbmdlcyIpKSB7CisJCQlmb3IgbXkgJHN1ZmZpeCAocXcoeWFtbCBkYikpIHsKKwkJCQlteSAkZmlsZSA9ICIkY2FjaGVfZmlsZS4kc3VmZml4IjsKKwkJCQluZXh0IHVubGVzcyAtZSAkZmlsZTsKKwkJCQl1bmxpbmsoJGZpbGUpIG9yIGRpZSAidW5saW5rKCRmaWxlKSBmYWlsZWQ6ICQhXG4iOworCQkJfQorCQl9CisJfQorCisKKwlNZW1vaXplOjptZW1vaXplICdHaXQ6OlNWTjo6cmVwb3Nfcm9vdCc7Cit9CisKK0VORCB7CisJIyBGb3JjZSBjYWNoZSB3cml0ZW91dCBleHBsaWNpdGx5IGluc3RlYWQgb2Ygd2FpdGluZyBmb3IKKwkjIGdsb2JhbCBkZXN0cnVjdGlvbiB0byBhdm9pZCBzZWdmYXVsdCBpbiBTdG9yYWJsZToKKwkjIGh0dHA6Ly9ydC5jcGFuLm9yZy9QdWJsaWMvQnVnL0Rpc3BsYXkuaHRtbD9pZD0zNjA4NworCXVubWVtb2l6ZV9zdm5fbWVyZ2VpbmZvX2Z1bmN0aW9ucygpOworfQorCitzdWIgcGFyZW50c19leGNsdWRlIHsKKwlteSAkcGFyZW50cyA9IHNoaWZ0OworCW15IEBjb21taXRzID0gQF87CisJcmV0dXJuIHVubGVzcyBAY29tbWl0czsKKworCW15IEBleGNsdWRlZDsKKwlteSAkZXhjbHVkZWQ7CisJZG8geworCQlteSBAY21kID0gKCdyZXYtbGlzdCcsICItMSIsIEBjb21taXRzLCAiLS1ub3QiLCBAJHBhcmVudHMgKTsKKwkJJGV4Y2x1ZGVkID0gY29tbWFuZF9vbmVsaW5lKEBjbWQpOworCQlpZiAoICRleGNsdWRlZCApIHsKKwkJCW15IEBuZXc7CisJCQlteSAkZm91bmQ7CisJCQlmb3IgbXkgJGNvbW1pdCAoIEBjb21taXRzICkgeworCQkJCWlmICggJGNvbW1pdCBlcSAkZXhjbHVkZWQgKSB7CisJCQkJCXB1c2ggQGV4Y2x1ZGVkLCAkY29tbWl0OworCQkJCQkkZm91bmQrKzsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCXB1c2ggQG5ldywgJGNvbW1pdDsKKwkJCQl9CisJCQl9CisJCQlkaWUgInNhdyBjb21taXQgJyRleGNsdWRlZCcgaW4gcmV2LWxpc3Qgb3V0cHV0LCAiCisJCQkJLiJidXQgd2UgZGlkbid0IGFzayBmb3IgdGhhdCBjb21taXQgKHdhbnRlZDogQGNvbW1pdHMgLS1ub3QgQCRwYXJlbnRzKSIKKwkJCQkJdW5sZXNzICRmb3VuZDsKKwkJCUBjb21taXRzID0gQG5ldzsKKwkJfQorCX0KKwkJd2hpbGUgKCRleGNsdWRlZCBhbmQgQGNvbW1pdHMpOworCisJcmV0dXJuIEBleGNsdWRlZDsKK30KKworIyBDb21wdXRlIHdoYXQncyBuZXcgaW4gc3ZuOm1lcmdlaW5mby4KK3N1YiBtZXJnZWluZm9fY2hhbmdlcyB7CisJbXkgKCRzZWxmLCAkb2xkX3BhdGgsICRvbGRfcmV2LCAkcGF0aCwgJHJldiwgJG1lcmdlaW5mb19wcm9wKSA9IEBfOworCW15ICVtaW5mbyA9IG1hcCB7c3BsaXQgIjoiLCAkXyB9IHNwbGl0ICJcbiIsICRtZXJnZWluZm9fcHJvcDsKKwlteSAkb2xkX21pbmZvID0ge307CisKKwlteSAkcmEgPSAkc2VsZi0+cmE7CisJIyBHaXZlIHVwIGlmICRvbGRfcGF0aCBpc24ndCBpbiB0aGUgcmVwby4KKwkjIFRoaXMgaXMgcHJvYmFibHkgYSBtZXJnZSBvbiBhIHN1YnRyZWUuCisJaWYgKCRyYS0+Y2hlY2tfcGF0aCgkb2xkX3BhdGgsICRvbGRfcmV2KSAhPSAkU1ZOOjpOb2RlOjpkaXIpIHsKKwkJd2FybiAiVzogaWdub3Jpbmcgc3ZuOm1lcmdlaW5mbyBvbiAkb2xkX3BhdGgsICIsCisJCQkiZGlyZWN0b3J5IGRpZG4ndCBleGlzdCBpbiByJG9sZF9yZXZcbiI7CisJCXJldHVybiB7fTsKKwl9CisJbXkgKHVuZGVmLCB1bmRlZiwgJHByb3BzKSA9ICRyYS0+Z2V0X2Rpcigkb2xkX3BhdGgsICRvbGRfcmV2KTsKKwlpZiAoZGVmaW5lZCAkcHJvcHMtPnsic3ZuOm1lcmdlaW5mbyJ9KSB7CisJCW15ICVvbWkgPSBtYXAge3NwbGl0ICI6IiwgJF8gfSBzcGxpdCAiXG4iLAorCQkJJHByb3BzLT57InN2bjptZXJnZWluZm8ifTsKKwkJJG9sZF9taW5mbyA9IFwlb21pOworCX0KKworCW15ICVjaGFuZ2VzID0gKCk7CisJZm9yZWFjaCBteSAkcCAoa2V5cyAlbWluZm8pIHsKKwkJbXkgJGEgPSAkb2xkX21pbmZvLT57JHB9IHx8ICIiOworCQlteSAkYiA9ICRtaW5mb3skcH07CisJCSMgT21pdCBtZXJnZWQgYnJhbmNoZXMgd2hvc2UgcmFuZ2VzIGxpc3RzIGFyZSB1bmNoYW5nZWQuCisJCW5leHQgaWYgJGEgZXEgJGI7CisJCSMgUmVtb3ZlIGFueSBjb21tb24gcmFuZ2UgbGlzdCBwcmVmaXguCisJCSgkYSBeICRiKSA9fiAvXltcMF0qLzsKKwkJbXkgJGNvbW1vbl9wcmVmaXggPSByaW5kZXggJGIsICIsIiwgJCtbMF0gLSAxOworCQkkY2hhbmdlc3skcH0gPSBzdWJzdHIgJGIsICRjb21tb25fcHJlZml4ICsgMTsKKwl9CisJcHJpbnQgU1RERVJSICJDaGVja2luZyBzdm46bWVyZ2VpbmZvIGNoYW5nZXMgc2luY2UgciRvbGRfcmV2OiAiLAorCQlzY2FsYXIoa2V5cyAlbWluZm8pLCAiIHNvdXJjZXMsICIsCisJCXNjYWxhcihrZXlzICVjaGFuZ2VzKSwgIiBjaGFuZ2VkXG4iOworCisJcmV0dXJuIFwlY2hhbmdlczsKK30KKworIyBub3RlOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgdmFyaW91cyBkaXJwcm9wcworIyBoYXZlIGFjdHVhbGx5IGNoYW5nZWQKK3N1YiBmaW5kX2V4dHJhX3N2bl9wYXJlbnRzIHsKKwlteSAoJHNlbGYsICRtZXJnZWluZm8sICRwYXJlbnRzKSA9IEBfOworCSMgYWhhISAgc3ZrOm1lcmdlIHByb3BlcnR5IGNoYW5nZWQuLi4KKworCW1lbW9pemVfc3ZuX21lcmdlaW5mb19mdW5jdGlvbnMoKTsKKworCSMgV2UgZmlyc3Qgc2VhcmNoIGZvciBtZXJnZWQgdGlwcyB3aGljaCBhcmUgbm90IGluIG91cgorCSMgaGlzdG9yeS4gIFRoZW4sIHdlIGZpZ3VyZSBvdXQgd2hpY2ggZ2l0IHJldmlzaW9ucyBhcmUgaW4KKwkjIHRoYXQgdGlwLCBidXQgbm90IHRoaXMgcmV2aXNpb24uICBJZiBhbGwgb2YgdGhvc2UgcmV2aXNpb25zCisJIyBhcmUgbm93IG1hcmtlZCBhcyBtZXJnZSwgd2UgY2FuIGFkZCB0aGUgdGlwIGFzIGEgcGFyZW50LgorCW15IEBtZXJnZXMgPSBzb3J0IGtleXMgJSRtZXJnZWluZm87CisJbXkgQG1lcmdlX3RpcHM7CisJbXkgJHVybCA9ICRzZWxmLT51cmw7CisJbXkgJHV1aWQgPSAkc2VsZi0+cmFfdXVpZDsKKwlteSBAYWxsX3JhbmdlczsKKwlmb3IgbXkgJG1lcmdlICggQG1lcmdlcyApIHsKKwkJbXkgKCR0aXBfY29tbWl0LCBAcmFuZ2VzKSA9CisJCQlsb29rdXBfc3ZuX21lcmdlKCAkdXVpZCwgJHVybCwKKwkJCQkJICAkbWVyZ2UsICRtZXJnZWluZm8tPnskbWVyZ2V9ICk7CisJCXVubGVzcyAoISR0aXBfY29tbWl0IG9yCisJCQkJZ3JlcCB7ICRfIGVxICR0aXBfY29tbWl0IH0gQCRwYXJlbnRzICkgeworCQkJcHVzaCBAbWVyZ2VfdGlwcywgJHRpcF9jb21taXQ7CisJCQlwdXNoIEBhbGxfcmFuZ2VzLCBAcmFuZ2VzOworCQl9IGVsc2UgeworCQkJcHVzaCBAbWVyZ2VfdGlwcywgdW5kZWY7CisJCX0KKwl9CisKKwlteSAlZXhjbHVkZWQgPSBtYXAgeyAkXyA9PiAxIH0KKwkJcGFyZW50c19leGNsdWRlKCRwYXJlbnRzLCBncmVwIHsgZGVmaW5lZCB9IEBtZXJnZV90aXBzKTsKKworCSMgY2hlY2sgbWVyZ2UgdGlwcyBmb3IgbmV3IHBhcmVudHMKKwlteSBAbmV3X3BhcmVudHM7CisJZm9yIG15ICRtZXJnZV90aXAgKCBAbWVyZ2VfdGlwcyApIHsKKwkJbXkgJG1lcmdlID0gc2hpZnQgQG1lcmdlczsKKwkJbmV4dCB1bmxlc3MgJG1lcmdlX3RpcCBhbmQgJGV4Y2x1ZGVkeyRtZXJnZV90aXB9OworCQlteSAkc3BlYyA9ICIkbWVyZ2U6JG1lcmdlaW5mby0+eyRtZXJnZX0iOworCisJCSMgY2hlY2sgb3V0ICduZXcnIHRpcHMKKwkJbXkgJG1lcmdlX2Jhc2U7CisJCWV2YWwgeworCQkJJG1lcmdlX2Jhc2UgPSBjb21tYW5kX29uZWxpbmUoCisJCQkJIm1lcmdlLWJhc2UiLAorCQkJCUAkcGFyZW50cywgJG1lcmdlX3RpcCwKKwkJCSk7CisJCX07CisJCWlmICgkQCkgeworCQkJZGllICJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbWVyZ2UtYmFzZSIKKwkJCQl1bmxlc3MgJEAtPmlzYSgiR2l0OjpFcnJvcjo6Q29tbWFuZCIpOworCisJCQl3YXJuICJXOiBDYW5ub3QgZmluZCBjb21tb24gYW5jZXN0b3IgYmV0d2VlbiAiLgorCQkJICAgICAiQCRwYXJlbnRzIGFuZCAkbWVyZ2VfdGlwLiBJZ25vcmluZyBtZXJnZSBpbmZvLlxuIjsKKwkJCW5leHQ7CisJCX0KKworCQkjIGRvdWJsZSBjaGVjayB0aGF0IHRoZXJlIGFyZSBubyBtaXNzaW5nIG5vbi1tZXJnZSBjb21taXRzCisJCW15ICgkbmluYywgJGlmaXJzdCkgPSBjaGVja19jaGVycnlfcGljazIoCisJCQkkbWVyZ2VfYmFzZSwgJG1lcmdlX3RpcCwKKwkJCSRwYXJlbnRzLAorCQkJQGFsbF9yYW5nZXMsCisJCSAgICAgICApOworCisJCWlmICgkbmluYykgeworCQkJd2FybiAiVzogc3ZuIGNoZXJyeS1waWNrIGlnbm9yZWQgKCRzcGVjKSAtIG1pc3NpbmcgIiAuCisJCQkJIiRuaW5jIGNvbW1pdChzKSAoZWcgJGlmaXJzdClcbiI7CisJCX0gZWxzZSB7CisJCQl3YXJuICJGb3VuZCBtZXJnZSBwYXJlbnQgKCRzcGVjKTogIiwgJG1lcmdlX3RpcCwgIlxuIjsKKwkJCXB1c2ggQG5ld19wYXJlbnRzLCAkbWVyZ2VfdGlwOworCQl9CisJfQorCisJIyBjYXRlciBmb3IgbWVyZ2VzIHdoaWNoIG1lcmdlIGNvbW1pdHMgZnJvbSBtdWx0aXBsZSBicmFuY2hlcworCWlmICggQG5ld19wYXJlbnRzID4gMSApIHsKKwkJZm9yICggbXkgJGkgPSAwOyAkaSA8PSAkI25ld19wYXJlbnRzOyAkaSsrICkgeworCQkJZm9yICggbXkgJGogPSAwOyAkaiA8PSAkI25ld19wYXJlbnRzOyAkaisrICkgeworCQkJCW5leHQgaWYgJGkgPT0gJGo7CisJCQkJbmV4dCB1bmxlc3MgJG5ld19wYXJlbnRzWyRpXTsKKwkJCQluZXh0IHVubGVzcyAkbmV3X3BhcmVudHNbJGpdOworCQkJCW15ICRyZXZzID0gY29tbWFuZF9vbmVsaW5lKAorCQkJCQkicmV2LWxpc3QiLCAiLTEiLAorCQkJCQkiJG5ld19wYXJlbnRzWyRpXS4uJG5ld19wYXJlbnRzWyRqXSIsCisJCQkJICAgICAgICk7CisJCQkJaWYgKCAhJHJldnMgKSB7CisJCQkJCXVuZGVmKCRuZXdfcGFyZW50c1skal0pOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlwdXNoIEAkcGFyZW50cywgZ3JlcCB7IGRlZmluZWQgfSBAbmV3X3BhcmVudHM7Cit9CisKK3N1YiBtYWtlX2xvZ19lbnRyeSB7CisJbXkgKCRzZWxmLCAkcmV2LCAkcGFyZW50cywgJGVkLCAkcGFyZW50X3JldiwgJHBhcmVudF9wYXRoKSA9IEBfOworCW15ICR1bnRyYWNrZWQgPSAkc2VsZi0+Z2V0X3VudHJhY2tlZCgkZWQpOworCisJbXkgQHBhcmVudHMgPSBAJHBhcmVudHM7CisJbXkgJHByb3BzID0gJGVkLT57ZGlyX3Byb3B9eyRzZWxmLT5wYXRofTsKKwlpZiAoICRwcm9wcy0+eyJzdms6bWVyZ2UifSApIHsKKwkJJHNlbGYtPmZpbmRfZXh0cmFfc3ZrX3BhcmVudHMoJHByb3BzLT57InN2azptZXJnZSJ9LCBcQHBhcmVudHMpOworCX0KKwlpZiAoICRwcm9wcy0+eyJzdm46bWVyZ2VpbmZvIn0gKSB7CisJCW15ICRtaV9jaGFuZ2VzID0gJHNlbGYtPm1lcmdlaW5mb19jaGFuZ2VzCisJCQkoJHBhcmVudF9wYXRoLCAkcGFyZW50X3JldiwKKwkJCSAkc2VsZi0+cGF0aCwgJHJldiwKKwkJCSAkcHJvcHMtPnsic3ZuOm1lcmdlaW5mbyJ9KTsKKwkJJHNlbGYtPmZpbmRfZXh0cmFfc3ZuX3BhcmVudHMoJG1pX2NoYW5nZXMsIFxAcGFyZW50cyk7CisJfQorCisJb3BlbiBteSAkdW4sICc+PicsICIkc2VsZi0+e2Rpcn0vdW5oYW5kbGVkLmxvZyIgb3IgY3JvYWsgJCE7CisJcHJpbnQgJHVuICJyJHJldlxuIiBvciBjcm9hayAkITsKKwlwcmludCAkdW4gJF8sICJcbiIgZm9yZWFjaCBAJHVudHJhY2tlZDsKKwlteSAlbG9nX2VudHJ5ID0gKCBwYXJlbnRzID0+IFxAcGFyZW50cywgcmV2aXNpb24gPT4gJHJldiwKKwkgICAgICAgICAgICAgICAgICBsb2cgPT4gJycpOworCisJbXkgJGhlYWRyZXY7CisJbXkgJGxvZ2dlZCA9IGRlbGV0ZSAkc2VsZi0+e2xvZ2dlZF9yZXZfcHJvcHN9OworCWlmICghJGxvZ2dlZCB8fCAkc2VsZi0+ey13YW50X3JldnByb3BzfSkgeworCQlteSAkcnAgPSAkc2VsZi0+cmEtPnJldl9wcm9wbGlzdCgkcmV2KTsKKwkJZm9yZWFjaCAoc29ydCBrZXlzICUkcnApIHsKKwkJCW15ICR2ID0gJHJwLT57JF99OworCQkJaWYgKC9ec3ZuOihhdXRob3J8ZGF0ZXxsb2cpJC8pIHsKKwkJCQkkbG9nX2VudHJ5eyQxfSA9ICR2OworCQkJfSBlbHNpZiAoJF8gZXEgJ3N2bTpoZWFkcmV2JykgeworCQkJCSRoZWFkcmV2ID0gJHY7CisJCQl9IGVsc2UgeworCQkJCXByaW50ICR1biAiICByZXZfcHJvcDogIiwgdXJpX2VuY29kZSgkXyksICcgJywKKwkJCQkJICB1cmlfZW5jb2RlKCR2KSwgIlxuIjsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCW1hcCB7ICRsb2dfZW50cnl7JF99ID0gJGxvZ2dlZC0+eyRffSB9IGtleXMgJSRsb2dnZWQ7CisJfQorCWNsb3NlICR1biBvciBjcm9hayAkITsKKworCSRsb2dfZW50cnl7ZGF0ZX0gPSBwYXJzZV9zdm5fZGF0ZSgkbG9nX2VudHJ5e2RhdGV9KTsKKwkkbG9nX2VudHJ5e2xvZ30gLj0gIlxuIjsKKwlteSAkYXV0aG9yID0gJGxvZ19lbnRyeXthdXRob3J9ID0gY2hlY2tfYXV0aG9yKCRsb2dfZW50cnl7YXV0aG9yfSk7CisJbXkgKCRuYW1lLCAkZW1haWwpID0gZGVmaW5lZCAkOjp1c2Vyc3skYXV0aG9yfSA/IEB7JDo6dXNlcnN7JGF1dGhvcn19CisJCQkJCQkgICAgICAgOiAoJGF1dGhvciwgdW5kZWYpOworCisJbXkgKCRjb21taXRfbmFtZSwgJGNvbW1pdF9lbWFpbCkgPSAoJG5hbWUsICRlbWFpbCk7CisJaWYgKCRfdXNlX2xvZ19hdXRob3IpIHsKKwkJbXkgJG5hbWVfZmllbGQ7CisJCWlmICgkbG9nX2VudHJ5e2xvZ30gPX4gL0Zyb206XHMrKC4qXFMpXHMqXG4vaSkgeworCQkJJG5hbWVfZmllbGQgPSAkMTsKKwkJfSBlbHNpZiAoJGxvZ19lbnRyeXtsb2d9ID1+IC9TaWduZWQtb2ZmLWJ5OlxzKyguKlxTKVxzKlxuL2kpIHsKKwkJCSRuYW1lX2ZpZWxkID0gJDE7CisJCX0KKwkJaWYgKCFkZWZpbmVkICRuYW1lX2ZpZWxkKSB7CisJCQlpZiAoIWRlZmluZWQgJGVtYWlsKSB7CisJCQkJJGVtYWlsID0gJG5hbWU7CisJCQl9CisJCX0gZWxzaWYgKCRuYW1lX2ZpZWxkID1+IC8oLio/KVxzKzwoLiopPi8pIHsKKwkJCSgkbmFtZSwgJGVtYWlsKSA9ICgkMSwgJDIpOworCQl9IGVsc2lmICgkbmFtZV9maWVsZCA9fiAvKC4qKUAvKSB7CisJCQkoJG5hbWUsICRlbWFpbCkgPSAoJDEsICRuYW1lX2ZpZWxkKTsKKwkJfSBlbHNlIHsKKwkJCSgkbmFtZSwgJGVtYWlsKSA9ICgkbmFtZV9maWVsZCwgJG5hbWVfZmllbGQpOworCQl9CisJfQorCWlmIChkZWZpbmVkICRoZWFkcmV2ICYmICRzZWxmLT51c2Vfc3ZtX3Byb3BzKSB7CisJCWlmICgkc2VsZi0+cmV3cml0ZV9yb290KSB7CisJCQlkaWUgIkNhbid0IGhhdmUgYm90aCAndXNlU3ZtUHJvcHMnIGFuZCAncmV3cml0ZVJvb3QnICIsCisJCQkgICAgIm9wdGlvbnMgc2V0IVxuIjsKKwkJfQorCQlpZiAoJHNlbGYtPnJld3JpdGVfdXVpZCkgeworCQkJZGllICJDYW4ndCBoYXZlIGJvdGggJ3VzZVN2bVByb3BzJyBhbmQgJ3Jld3JpdGVVVUlEJyAiLAorCQkJICAgICJvcHRpb25zIHNldCFcbiI7CisJCX0KKwkJbXkgKCR1dWlkLCAkcikgPSAkaGVhZHJldiA9fiBte14oW2EtZlxkXC1dezMwLH0pOihcZCspJH1pOworCQkjIHdlIGRvbid0IHdhbnQgIlNWTTogaW5pdGlhbGl6aW5nIG1pcnJvciBmb3IganVuayIgLi4uCisJCXJldHVybiB1bmRlZiBpZiAkciA9PSAwOworCQlteSAkc3ZtID0gJHNlbGYtPnN2bTsKKwkJaWYgKCR1dWlkIG5lICRzdm0tPnt1dWlkfSkgeworCQkJZGllICJVVUlEIG1pc21hdGNoIG9uIFNWTSBwYXRoOlxuIiwKKwkJCSAgICAiZXhwZWN0ZWQ6ICRzdm0tPnt1dWlkfVxuIiwKKwkJCSAgICAiICAgICBnb3Q6ICR1dWlkXG4iOworCQl9CisJCW15ICRmdWxsX3VybCA9ICRzZWxmLT5mdWxsX3VybDsKKwkJJGZ1bGxfdXJsID1+IHMjXlxRJHN2bS0+e3JlcGxhY2V9XEUoL3wkKSMkc3ZtLT57c291cmNlfSQxIyBvcgorCQkgICAgICAgICAgICAgZGllICJGYWlsZWQgdG8gcmVwbGFjZSAnJHN2bS0+e3JlcGxhY2V9JyB3aXRoICIsCisJCSAgICAgICAgICAgICAgICAgIickc3ZtLT57c291cmNlfScgaW4gJGZ1bGxfdXJsXG4iOworCQkjIHRocm93IGF3YXkgdXNlcm5hbWUgZm9yIHN0b3JpbmcgaW4gcmVjb3JkcworCQlyZW1vdmVfdXNlcm5hbWUoJGZ1bGxfdXJsKTsKKwkJJGxvZ19lbnRyeXttZXRhZGF0YX0gPSAiJGZ1bGxfdXJsXEAkciAkdXVpZCI7CisJCSRsb2dfZW50cnl7c3ZtX3JldmlzaW9ufSA9ICRyOworCQkkZW1haWwgfHw9ICIkYXV0aG9yXEAkdXVpZCI7CisJCSRjb21taXRfZW1haWwgfHw9ICIkYXV0aG9yXEAkdXVpZCI7CisJfSBlbHNpZiAoJHNlbGYtPnVzZV9zdm5zeW5jX3Byb3BzKSB7CisJCW15ICRmdWxsX3VybCA9IGNhbm9uaWNhbGl6ZV91cmwoCisJCQlhZGRfcGF0aF90b191cmwoICRzZWxmLT5zdm5zeW5jLT57dXJsfSwgJHNlbGYtPnBhdGggKQorCQkpOworCQlyZW1vdmVfdXNlcm5hbWUoJGZ1bGxfdXJsKTsKKwkJbXkgJHV1aWQgPSAkc2VsZi0+c3Zuc3luYy0+e3V1aWR9OworCQkkbG9nX2VudHJ5e21ldGFkYXRhfSA9ICIkZnVsbF91cmxcQCRyZXYgJHV1aWQiOworCQkkZW1haWwgfHw9ICIkYXV0aG9yXEAkdXVpZCI7CisJCSRjb21taXRfZW1haWwgfHw9ICIkYXV0aG9yXEAkdXVpZCI7CisJfSBlbHNlIHsKKwkJbXkgJHVybCA9ICRzZWxmLT5tZXRhZGF0YV91cmw7CisJCXJlbW92ZV91c2VybmFtZSgkdXJsKTsKKwkJbXkgJHV1aWQgPSAkc2VsZi0+cmV3cml0ZV91dWlkIHx8ICRzZWxmLT5yYS0+Z2V0X3V1aWQ7CisJCSRsb2dfZW50cnl7bWV0YWRhdGF9ID0gIiR1cmxcQCRyZXYgIiAuICR1dWlkOworCQkkZW1haWwgfHw9ICIkYXV0aG9yXEAiIC4gJHV1aWQ7CisJCSRjb21taXRfZW1haWwgfHw9ICIkYXV0aG9yXEAiIC4gJHV1aWQ7CisJfQorCSRsb2dfZW50cnl7bmFtZX0gPSAkbmFtZTsKKwkkbG9nX2VudHJ5e2VtYWlsfSA9ICRlbWFpbDsKKwkkbG9nX2VudHJ5e2NvbW1pdF9uYW1lfSA9ICRjb21taXRfbmFtZTsKKwkkbG9nX2VudHJ5e2NvbW1pdF9lbWFpbH0gPSAkY29tbWl0X2VtYWlsOworCVwlbG9nX2VudHJ5OworfQorCitzdWIgZmV0Y2ggeworCW15ICgkc2VsZiwgJG1pbl9yZXYsICRtYXhfcmV2LCBAcGFyZW50cykgPSBAXzsKKwlteSAoJGxhc3RfcmV2LCAkbGFzdF9jb21taXQpID0gJHNlbGYtPmxhc3RfcmV2X2NvbW1pdDsKKwlteSAoJGJhc2UsICRoZWFkKSA9ICRzZWxmLT5nZXRfZmV0Y2hfcmFuZ2UoJG1pbl9yZXYsICRtYXhfcmV2KTsKKwkkc2VsZi0+cmEtPmdzX2ZldGNoX2xvb3BfY29tbW9uKCRiYXNlLCAkaGVhZCwgWyRzZWxmXSk7Cit9CisKK3N1YiBzZXRfdHJlZV9jYiB7CisJbXkgKCRzZWxmLCAkbG9nX2VudHJ5LCAkdHJlZSwgJHJldiwgJGRhdGUsICRhdXRob3IpID0gQF87CisJJHNlbGYtPntpbmplY3RfcGFyZW50c30gPSB7ICRyZXYgPT4gJHRyZWUgfTsKKwkkc2VsZi0+ZmV0Y2godW5kZWYsIHVuZGVmKTsKK30KKworc3ViIHNldF90cmVlIHsKKwlteSAoJHNlbGYsICR0cmVlKSA9IChzaGlmdCwgc2hpZnQpOworCW15ICRsb2dfZW50cnkgPSA6OmdldF9jb21taXRfZW50cnkoJHRyZWUpOworCXVubGVzcyAoJHNlbGYtPntsYXN0X3Jldn0pIHsKKwkJZmF0YWwoIk11c3QgaGF2ZSBhbiBleGlzdGluZyByZXZpc2lvbiB0byBjb21taXQiKTsKKwl9CisJbXkgJWVkX29wdHMgPSAoIHIgPT4gJHNlbGYtPntsYXN0X3Jldn0sCisJICAgICAgICAgICAgICAgIGxvZyA9PiAkbG9nX2VudHJ5LT57bG9nfSwKKwkgICAgICAgICAgICAgICAgcmEgPT4gJHNlbGYtPnJhLAorCSAgICAgICAgICAgICAgICB0cmVlX2EgPT4gJHNlbGYtPntsYXN0X2NvbW1pdH0sCisJICAgICAgICAgICAgICAgIHRyZWVfYiA9PiAkdHJlZSwKKwkgICAgICAgICAgICAgICAgZWRpdG9yX2NiID0+IHN1YiB7CisJCQkgICAgICAgJHNlbGYtPnNldF90cmVlX2NiKCRsb2dfZW50cnksICR0cmVlLCBAXykgfSwKKwkgICAgICAgICAgICAgICAgc3ZuX3BhdGggPT4gJHNlbGYtPnBhdGggKTsKKwlpZiAoIUdpdDo6U1ZOOjpFZGl0b3ItPm5ldyhcJWVkX29wdHMpLT5hcHBseV9kaWZmKSB7CisJCXByaW50ICJObyBjaGFuZ2VzXG5yJHNlbGYtPntsYXN0X3Jldn0gPSAkdHJlZVxuIjsKKwl9Cit9CisKK3N1YiByZWJ1aWxkX2Zyb21fcmV2X2RiIHsKKwlteSAoJHNlbGYsICRwYXRoKSA9IEBfOworCW15ICRyID0gLTE7CisJb3BlbiBteSAkZmgsICc8JywgJHBhdGggb3IgY3JvYWsgIm9wZW46ICQhIjsKKwliaW5tb2RlICRmaCBvciBjcm9hayAiYmlubW9kZTogJCEiOworCXdoaWxlICg8JGZoPikgeworCQlsZW5ndGgoJF8pID09IDQxIG9yIGNyb2FrICJpbmNvbnNpc3RlbnQgc2l6ZSBpbiAoJF8pICE9IDQxIjsKKwkJY2hvbXAoJF8pOworCQkrKyRyOworCQluZXh0IGlmICRfIGVxICgnMCcgeCA0MCk7CisJCSRzZWxmLT5yZXZfbWFwX3NldCgkciwgJF8pOworCQlwcmludCAiciRyID0gJF9cbiI7CisJfQorCWNsb3NlICRmaCBvciBjcm9hayAiY2xvc2U6ICQhIjsKKwl1bmxpbmsgJHBhdGggb3IgY3JvYWsgInVubGluazogJCEiOworfQorCisjZGVmaW5lIGEgZ2xvYmFsIGFzc29jaWF0ZSBtYXAgdG8gcmVjb3JkIHJlYnVpbGQgc3RhdHVzCitteSAlcmVidWlsZF9zdGF0dXM7CisjZGVmaW5lIGEgZ2xvYmFsIGFzc29jaWF0ZSBtYXAgdG8gcmVjb3JkIHJlYnVpbGQgdmVyaWZ5IHN0YXR1cworbXkgJXJlYnVpbGRfdmVyaWZ5X3N0YXR1czsKKworc3ViIHJlYnVpbGQgeworCW15ICgkc2VsZikgPSBAXzsKKwlteSAkbWFwX3BhdGggPSAkc2VsZi0+bWFwX3BhdGg7CisJbXkgJHBhcnRpYWwgPSAoLWUgJG1hcF9wYXRoICYmICEgLXogJG1hcF9wYXRoKTsKKwlteSAkdmVyaWZ5X2tleSA9ICRzZWxmLT5yZWZuYW1lLideMCc7CisJaWYgKCEkcmVidWlsZF92ZXJpZnlfc3RhdHVzeyR2ZXJpZnlfa2V5fSkgeworCQlteSAkdmVyaWZ5X3Jlc3VsdCA9IDo6dmVyaWZ5X3JlZigkdmVyaWZ5X2tleSk7CisJCWlmICgkdmVyaWZ5X3Jlc3VsdCkgeworCQkJJHJlYnVpbGRfdmVyaWZ5X3N0YXR1c3skdmVyaWZ5X2tleX0gPSAxOworCQl9CisJfQorCWlmICghJHJlYnVpbGRfdmVyaWZ5X3N0YXR1c3skdmVyaWZ5X2tleX0pIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoISRwYXJ0aWFsICYmICgkc2VsZi0+dXNlX3N2bV9wcm9wcyB8fCAkc2VsZi0+bm9fbWV0YWRhdGEpKSB7CisJCW15ICRyZXZfZGIgPSAkc2VsZi0+cmV2X2RiX3BhdGg7CisJCSRzZWxmLT5yZWJ1aWxkX2Zyb21fcmV2X2RiKCRyZXZfZGIpOworCQlpZiAoJHNlbGYtPnVzZV9zdm1fcHJvcHMpIHsKKwkJCW15ICRzdm1fcmV2X2RiID0gJHNlbGYtPnJldl9kYl9wYXRoKCRzZWxmLT5zdm1fdXVpZCk7CisJCQkkc2VsZi0+cmVidWlsZF9mcm9tX3Jldl9kYigkc3ZtX3Jldl9kYik7CisJCX0KKwkJJHNlbGYtPnVubGlua19yZXZfZGJfc3ltbGluazsKKwkJcmV0dXJuOworCX0KKwlwcmludCAiUmVidWlsZGluZyAkbWFwX3BhdGggLi4uXG4iIGlmICghJHBhcnRpYWwpOworCW15ICgkYmFzZV9yZXYsICRoZWFkKSA9ICgkcGFydGlhbCA/ICRzZWxmLT5yZXZfbWFwX21heF9ub3JlYnVpbGQoMSkgOgorCQkodW5kZWYsIHVuZGVmKSk7CisJbXkgJGtleV92YWx1ZSA9ICgkaGVhZCA/ICIkaGVhZC4uIiA6ICIiKSAuICRzZWxmLT5yZWZuYW1lOworCWlmIChleGlzdHMgJHJlYnVpbGRfc3RhdHVzeyRrZXlfdmFsdWV9KSB7CisJCXByaW50ICJEb25lIHJlYnVpbGRpbmcgJG1hcF9wYXRoXG4iIGlmICghJHBhcnRpYWwgfHwgISRoZWFkKTsKKwkJbXkgJHJldl9kYl9wYXRoID0gJHNlbGYtPnJldl9kYl9wYXRoOworCQlpZiAoLWYgJHNlbGYtPnJldl9kYl9wYXRoKSB7CisJCQl1bmxpbmsgJHNlbGYtPnJldl9kYl9wYXRoIG9yIGNyb2FrICJ1bmxpbms6ICQhIjsKKwkJfQorCQkkc2VsZi0+dW5saW5rX3Jldl9kYl9zeW1saW5rOworCQlyZXR1cm47CisJfQorCW15ICgkbG9nLCAkY3R4KSA9CisJCWNvbW1hbmRfb3V0cHV0X3BpcGUocXcvcmV2LWxpc3QgLS1wcmV0dHk9cmF3IC0tcmV2ZXJzZS8sCisJCQkJJGtleV92YWx1ZSwKKwkJCQknLS0nKTsKKwkkcmVidWlsZF9zdGF0dXN7JGtleV92YWx1ZX0gPSAxOworCW15ICRtZXRhZGF0YV91cmwgPSAkc2VsZi0+bWV0YWRhdGFfdXJsOworCXJlbW92ZV91c2VybmFtZSgkbWV0YWRhdGFfdXJsKTsKKwlteSAkc3ZuX3V1aWQgPSAkc2VsZi0+cmV3cml0ZV91dWlkIHx8ICRzZWxmLT5yYV91dWlkOworCW15ICRjOworCXdoaWxlICg8JGxvZz4pIHsKKwkJaWYgKCBte15jb21taXQgKCQ6OnNoYTEpJH0gKSB7CisJCQkkYyA9ICQxOworCQkJbmV4dDsKKwkJfQorCQluZXh0IHVubGVzcyBze15ccyooZ2l0LXN2bi1pZDopfXskMX07CisJCW15ICgkdXJsLCAkcmV2LCAkdXVpZCkgPSA6OmV4dHJhY3RfbWV0YWRhdGEoJF8pOworCQlyZW1vdmVfdXNlcm5hbWUoJHVybCk7CisKKwkJIyBpZ25vcmUgbWVyZ2VzIChmcm9tIHNldC10cmVlKQorCQluZXh0IGlmICghZGVmaW5lZCAkcmV2IHx8ICEkdXVpZCk7CisKKwkJIyBpZiB3ZSBtZXJnZWQgb3Igb3RoZXJ3aXNlIHN0YXJ0ZWQgZWxzZXdoZXJlLCB0aGlzIGlzCisJCSMgaG93IHdlIGJyZWFrIG91dCBvZiBpdAorCQlpZiAoKCR1dWlkIG5lICRzdm5fdXVpZCkgfHwKKwkJICAgICgkbWV0YWRhdGFfdXJsICYmICR1cmwgJiYgKCR1cmwgbmUgJG1ldGFkYXRhX3VybCkpKSB7CisJCQluZXh0OworCQl9CisJCWlmICgkcGFydGlhbCAmJiAkaGVhZCkgeworCQkJcHJpbnQgIlBhcnRpYWwtcmVidWlsZGluZyAkbWFwX3BhdGggLi4uXG4iOworCQkJcHJpbnQgIkN1cnJlbnRseSBhdCAkYmFzZV9yZXYgPSAkaGVhZFxuIjsKKwkJCSRoZWFkID0gdW5kZWY7CisJCX0KKworCQkkc2VsZi0+cmV2X21hcF9zZXQoJHJldiwgJGMpOworCQlwcmludCAiciRyZXYgPSAkY1xuIjsKKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRsb2csICRjdHgpOworCXByaW50ICJEb25lIHJlYnVpbGRpbmcgJG1hcF9wYXRoXG4iIGlmICghJHBhcnRpYWwgfHwgISRoZWFkKTsKKwlteSAkcmV2X2RiX3BhdGggPSAkc2VsZi0+cmV2X2RiX3BhdGg7CisJaWYgKC1mICRzZWxmLT5yZXZfZGJfcGF0aCkgeworCQl1bmxpbmsgJHNlbGYtPnJldl9kYl9wYXRoIG9yIGNyb2FrICJ1bmxpbms6ICQhIjsKKwl9CisJJHNlbGYtPnVubGlua19yZXZfZGJfc3ltbGluazsKK30KKworIyByZXZfbWFwOgorIyBUaWU6OkZpbGUgc2VlbXMgdG8gYmUgcHJvbmUgdG8gb2Zmc2V0IGVycm9ycyBpZiByZXZpc2lvbnMgZ2V0IHNwYXJzZSwKKyMgaXQncyBub3QgdGhhdCBmYXN0LCBlaXRoZXIuICBUaWU6OkZpbGUgaXMgYWxzbyBub3QgaW4gUGVybCA1LjYuICBTbworIyBvbmUgb2YgbXkgZmF2b3JpdGUgbW9kdWxlcyBpcyBvdXQgOjwgIE5leHQgdXAgd291bGQgYmUgb25lIG9mIHRoZSBEQk0KKyMgbW9kdWxlcywgYnV0IEknbSBub3Qgc3VyZSB3aGljaCBpcyBtb3N0IHBvcnRhYmxlLi4uCisjCisjIFRoaXMgaXMgdGhlIHJlcGxhY2VtZW50IGZvciB0aGUgcmV2X2RiIGZvcm1hdCwgd2hpY2ggd2FzIHRvbyBiaWcKKyMgYW5kIGluZWZmaWNpZW50IGZvciBsYXJnZSByZXBvc2l0b3JpZXMgd2l0aCBhIGxvdCBvZiBzcGFyc2UgaGlzdG9yeQorIyAobWFpbmx5IHRhZ3MpCisjCisjIFRoZSBmb3JtYXQgaXMgdGhpczoKKyMgICAtIDI0IGJ5dGVzIGZvciBldmVyeSByZWNvcmQsCisjICAgICAqIDQgYnl0ZXMgZm9yIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGluZyBhbiBTVk4gcmV2aXNpb24gbnVtYmVyCisjICAgICAqIDIwIGJ5dGVzIHJlcHJlc2VudGluZyB0aGUgc2hhMSBvZiBhIGdpdCBjb21taXQKKyMgICAtIE5vIGVtcHR5IHBhZGRpbmcgcmVjb3JkcyBsaWtlIHRoZSBvbGQgZm9ybWF0CisjICAgICAoZXhjZXB0IHRoZSBsYXN0IHJlY29yZCwgd2hpY2ggY2FuIGJlIG92ZXJ3cml0dGVuKQorIyAgIC0gbmV3IHJlY29yZHMgYXJlIHdyaXR0ZW4gYXBwZW5kLW9ubHkgc2luY2UgU1ZOIHJldmlzaW9uIG51bWJlcnMKKyMgICAgIGluY3JlYXNlIG1vbm90b25pY2FsbHkKKyMgICAtIGxvb2t1cHMgb24gU1ZOIHJldmlzaW9uIG51bWJlciBhcmUgZG9uZSB2aWEgYSBiaW5hcnkgc2VhcmNoCisjICAgLSBQaXBpbmcgdGhlIGZpbGUgdG8geHhkIC1jMjQgaXMgYSBnb29kIHdheSBvZiBkdW1waW5nIGl0IGZvcgorIyAgICAgdmlld2luZyBvciBlZGl0aW5nIChwaXBlZCBiYWNrIHRocm91Z2ggeHhkIC1yKSwgc2hvdWxkIHRoZSBuZWVkCisjICAgICBldmVyIGFyaXNlLgorIyAgIC0gVGhlIGxhc3QgcmVjb3JkIGNhbiBiZSBwYWRkaW5nIHJldmlzaW9uIHdpdGggYW4gYWxsLXplcm8gc2hhMQorIyAgICAgVGhpcyBpcyB1c2VkIHRvIG9wdGltaXplIGZldGNoIHBlcmZvcm1hbmNlIHdoZW4gdXNpbmcgbXVsdGlwbGUKKyMgICAgICJmZXRjaCIgZGlyZWN0aXZlcyBpbiAuZ2l0L2NvbmZpZworIworIyBUaGVzZSBmaWxlcyBhcmUgZGlzcG9zYWJsZSB1bmxlc3Mgbm9NZXRhZGF0YSBvciB1c2VTdm1Qcm9wcyBpcyBzZXQKKworc3ViIF9yZXZfbWFwX3NldCB7CisJbXkgKCRmaCwgJHJldiwgJGNvbW1pdCkgPSBAXzsKKworCWJpbm1vZGUgJGZoIG9yIGNyb2FrICJiaW5tb2RlOiAkISI7CisJbXkgJHNpemUgPSAoc3RhdCgkZmgpKVs3XTsKKwkoJHNpemUgJSAyNCkgPT0gMCBvciBjcm9hayAiaW5jb25zaXN0ZW50IHNpemU6ICRzaXplIjsKKworCW15ICR3cl9vZmZzZXQgPSAwOworCWlmICgkc2l6ZSA+IDApIHsKKwkJc3lzc2VlaygkZmgsIC0yNCwgU0VFS19FTkQpIG9yIGNyb2FrICJzZWVrOiAkISI7CisJCW15ICRyZWFkID0gc3lzcmVhZCgkZmgsIG15ICRidWYsIDI0KSBvciBjcm9hayAicmVhZDogJCEiOworCQkkcmVhZCA9PSAyNCBvciBjcm9hayAicmVhZCBvbmx5ICRyZWFkIGJ5dGVzICghPSAyNCkiOworCQlteSAoJGxhc3RfcmV2LCAkbGFzdF9jb21taXQpID0gdW5wYWNrKHJldl9tYXBfZm10LCAkYnVmKTsKKwkJaWYgKCRsYXN0X2NvbW1pdCBlcSAoJzAnIHg0MCkpIHsKKwkJCWlmICgkc2l6ZSA+PSA0OCkgeworCQkJCXN5c3NlZWsoJGZoLCAtNDgsIFNFRUtfRU5EKSBvciBjcm9hayAic2VlazogJCEiOworCQkJCSRyZWFkID0gc3lzcmVhZCgkZmgsICRidWYsIDI0KSBvcgorCQkJCSAgICBjcm9hayAicmVhZDogJCEiOworCQkJCSRyZWFkID09IDI0IG9yCisJCQkJICAgIGNyb2FrICJyZWFkIG9ubHkgJHJlYWQgYnl0ZXMgKCE9IDI0KSI7CisJCQkJKCRsYXN0X3JldiwgJGxhc3RfY29tbWl0KSA9CisJCQkJICAgIHVucGFjayhyZXZfbWFwX2ZtdCwgJGJ1Zik7CisJCQkJaWYgKCRsYXN0X2NvbW1pdCBlcSAoJzAnIHg0MCkpIHsKKwkJCQkJY3JvYWsgImluY29uc2lzdGVudCAucmV2X21hcFxuIjsKKwkJCQl9CisJCQl9CisJCQlpZiAoJGxhc3RfcmV2ID49ICRyZXYpIHsKKwkJCQljcm9hayAibGFzdF9yZXYgaXMgaGlnaGVyITogJGxhc3RfcmV2ID49ICRyZXYiOworCQkJfQorCQkJJHdyX29mZnNldCA9IC0yNDsKKwkJfQorCX0KKwlzeXNzZWVrKCRmaCwgJHdyX29mZnNldCwgU0VFS19FTkQpIG9yIGNyb2FrICJzZWVrOiAkISI7CisJc3lzd3JpdGUoJGZoLCBwYWNrKHJldl9tYXBfZm10LCAkcmV2LCAkY29tbWl0KSwgMjQpID09IDI0IG9yCisJICBjcm9hayAid3JpdGU6ICQhIjsKK30KKworc3ViIF9yZXZfbWFwX3Jlc2V0IHsKKwlteSAoJGZoLCAkcmV2LCAkY29tbWl0KSA9IEBfOworCW15ICRjID0gX3Jldl9tYXBfZ2V0KCRmaCwgJHJldik7CisJJGMgZXEgJGNvbW1pdCBvciBkaWUgIl9yZXZfbWFwX3Jlc2V0KEBfKSBjb21taXQgJGMgZG9lcyBub3QgbWF0Y2ghXG4iOworCW15ICRvZmZzZXQgPSBzeXNzZWVrKCRmaCwgMCwgU0VFS19DVVIpIG9yIGNyb2FrICJzZWVrOiAkISI7CisJdHJ1bmNhdGUgJGZoLCAkb2Zmc2V0IG9yIGNyb2FrICJ0cnVuY2F0ZTogJCEiOworfQorCitzdWIgbWtmaWxlIHsKKwlteSAoJHBhdGgpID0gQF87CisJdW5sZXNzICgtZSAkcGF0aCkgeworCQlteSAoJGRpciwgJGJhc2UpID0gKCRwYXRoID1+IG0jXiguKj8pLz8oW14vXSspJCMpOworCQlta3BhdGgoWyRkaXJdKSB1bmxlc3MgLWQgJGRpcjsKKwkJb3BlbiBteSAkZmgsICc+PicsICRwYXRoIG9yIGRpZSAiQ291bGRuJ3QgY3JlYXRlICRwYXRoOiAkIVxuIjsKKwkJY2xvc2UgJGZoIG9yIGRpZSAiQ291bGRuJ3QgY2xvc2UgKGNyZWF0ZSkgJHBhdGg6ICQhXG4iOworCX0KK30KKworc3ViIHJldl9tYXBfc2V0IHsKKwlteSAoJHNlbGYsICRyZXYsICRjb21taXQsICR1cGRhdGVfcmVmLCAkdXVpZCkgPSBAXzsKKwlkZWZpbmVkICRjb21taXQgb3IgZGllICJtaXNzaW5nIGFyZzNcbiI7CisJbGVuZ3RoICRjb21taXQgPT0gNDAgb3IgZGllICJhcmczIG11c3QgYmUgYSBmdWxsIFNIQTEgaGV4c3VtXG4iOworCW15ICRkYiA9ICRzZWxmLT5tYXBfcGF0aCgkdXVpZCk7CisJbXkgJGRiX2xvY2sgPSAiJGRiLmxvY2siOworCW15ICRzaWdtYXNrOworCSR1cGRhdGVfcmVmIHx8PSAwOworCWlmICgkdXBkYXRlX3JlZikgeworCQkkc2lnbWFzayA9IFBPU0lYOjpTaWdTZXQtPm5ldygpOworCQlteSAkc2lnbmV3ID0gUE9TSVg6OlNpZ1NldC0+bmV3KFNJR0lOVCwgU0lHSFVQLCBTSUdURVJNLAorCQkJU0lHQUxSTSwgU0lHVVNSMSwgU0lHVVNSMik7CisJCXNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJHNpZ25ldywgJHNpZ21hc2spIG9yCisJCQljcm9hayAiQ2FuJ3QgYmxvY2sgc2lnbmFsczogJCEiOworCX0KKwlta2ZpbGUoJGRiKTsKKworCSRMT0NLRklMRVN7JGRiX2xvY2t9ID0gMTsKKwlteSAkc3luYzsKKwkjIGJvdGggb2YgdGhlc2Ugb3B0aW9ucyBtYWtlIG91ciAucmV2X2RiIGZpbGUgdmVyeSwgdmVyeSBpbXBvcnRhbnQKKwkjIGFuZCB3ZSBjYW4ndCBhZmZvcmQgdG8gbG9zZSBpdCBiZWNhdXNlIHJlYnVpbGQoKSB3b24ndCB3b3JrCisJaWYgKCRzZWxmLT51c2Vfc3ZtX3Byb3BzIHx8ICRzZWxmLT5ub19tZXRhZGF0YSkgeworCQlyZXF1aXJlIEZpbGU6OkNvcHk7CisJCSRzeW5jID0gMTsKKwkJRmlsZTo6Q29weTo6Y29weSgkZGIsICRkYl9sb2NrKSBvciBkaWUgInJldl9tYXBfc2V0KEBfKTogIiwKKwkJCQkJICAgIkZhaWxlZCB0byBjb3B5OiAiLAorCQkJCQkgICAiJGRiID0+ICRkYl9sb2NrICgkISlcbiI7CisJfSBlbHNlIHsKKwkJcmVuYW1lICRkYiwgJGRiX2xvY2sgb3IgZGllICJyZXZfbWFwX3NldChAXyk6ICIsCisJCQkJCSAgICAiRmFpbGVkIHRvIHJlbmFtZTogIiwKKwkJCQkJICAgICIkZGIgPT4gJGRiX2xvY2sgKCQhKVxuIjsKKwl9CisKKwlzeXNvcGVuKG15ICRmaCwgJGRiX2xvY2ssIE9fUkRXUiB8IE9fQ1JFQVQpCisJICAgICBvciBjcm9hayAiQ291bGRuJ3Qgb3BlbiAkZGJfbG9jazogJCFcbiI7CisJaWYgKCR1cGRhdGVfcmVmIGVxICdyZXNldCcpIHsKKwkJY2xlYXJfbWVtb2l6ZWRfbWVyZ2VpbmZvX2NhY2hlcygpOworCQlfcmV2X21hcF9yZXNldCgkZmgsICRyZXYsICRjb21taXQpOworCX0gZWxzZSB7CisJCV9yZXZfbWFwX3NldCgkZmgsICRyZXYsICRjb21taXQpOworCX0KKworCWlmICgkc3luYykgeworCQkkZmgtPmZsdXNoIG9yIGRpZSAiQ291bGRuJ3QgZmx1c2ggJGRiX2xvY2s6ICQhXG4iOworCQkkZmgtPnN5bmMgb3IgZGllICJDb3VsZG4ndCBzeW5jICRkYl9sb2NrOiAkIVxuIjsKKwl9CisJY2xvc2UgJGZoIG9yIGNyb2FrICQhOworCWlmICgkdXBkYXRlX3JlZikgeworCQkkX2hlYWQgPSAkc2VsZjsKKwkJbXkgJG5vdGUgPSAiIjsKKwkJJG5vdGUgPSAiICgkdXBkYXRlX3JlZikiIGlmICgkdXBkYXRlX3JlZiAhfiAvXlxkKiQvKTsKKwkJY29tbWFuZF9ub2lzeSgndXBkYXRlLXJlZicsICctbScsICJyJHJldiRub3RlIiwKKwkJICAgICAgICAgICAgICAkc2VsZi0+cmVmbmFtZSwgJGNvbW1pdCk7CisJfQorCXJlbmFtZSAkZGJfbG9jaywgJGRiIG9yIGRpZSAicmV2X21hcF9zZXQoQF8pOiAiLCAiRmFpbGVkIHRvIHJlbmFtZTogIiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiRkYl9sb2NrID0+ICRkYiAoJCEpXG4iOworCWRlbGV0ZSAkTE9DS0ZJTEVTeyRkYl9sb2NrfTsKKwlpZiAoJHVwZGF0ZV9yZWYpIHsKKwkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICRzaWdtYXNrKSBvcgorCQkJY3JvYWsgIkNhbid0IHJlc3RvcmUgc2lnbmFsIG1hc2s6ICQhIjsKKwl9Cit9CisKKyMgSWYgd2FudF9jb21taXQsIHRoaXMgd2lsbCByZXR1cm4gYW4gYXJyYXkgb2YgKHJldiwgY29tbWl0KSB3aGVyZQorIyBjb21taXQgX211c3RfIGJlIGEgdmFsaWQgY29tbWl0IGluIHRoZSBhcmNoaXZlLgorIyBPdGhlcndpc2UsIGl0J2xsIHJldHVybiB0aGUgbWF4IHJldmlzaW9uICh3aGV0aGVyIG9yIG5vdCB0aGUKKyMgY29tbWl0IGlzIHZhbGlkIG9yIGp1c3QgYSAweDQwIHBsYWNlaG9sZGVyKS4KK3N1YiByZXZfbWFwX21heCB7CisJbXkgKCRzZWxmLCAkd2FudF9jb21taXQpID0gQF87CisJJHNlbGYtPnJlYnVpbGQ7CisJbXkgKCRyLCAkYykgPSAkc2VsZi0+cmV2X21hcF9tYXhfbm9yZWJ1aWxkKCR3YW50X2NvbW1pdCk7CisJJHdhbnRfY29tbWl0ID8gKCRyLCAkYykgOiAkcjsKK30KKworc3ViIHJldl9tYXBfbWF4X25vcmVidWlsZCB7CisJbXkgKCRzZWxmLCAkd2FudF9jb21taXQpID0gQF87CisJbXkgJG1hcF9wYXRoID0gJHNlbGYtPm1hcF9wYXRoOworCXN0YXQgJG1hcF9wYXRoIG9yIHJldHVybiAkd2FudF9jb21taXQgPyAoMCwgdW5kZWYpIDogMDsKKwlzeXNvcGVuKG15ICRmaCwgJG1hcF9wYXRoLCBPX1JET05MWSkgb3IgY3JvYWsgIm9wZW46ICQhIjsKKwliaW5tb2RlICRmaCBvciBjcm9hayAiYmlubW9kZTogJCEiOworCW15ICRzaXplID0gKHN0YXQoJGZoKSlbN107CisJKCRzaXplICUgMjQpID09IDAgb3IgY3JvYWsgImluY29uc2lzdGVudCBzaXplOiAkc2l6ZSI7CisKKwlpZiAoJHNpemUgPT0gMCkgeworCQljbG9zZSAkZmggb3IgY3JvYWsgImNsb3NlOiAkISI7CisJCXJldHVybiAkd2FudF9jb21taXQgPyAoMCwgdW5kZWYpIDogMDsKKwl9CisKKwlzeXNzZWVrKCRmaCwgLTI0LCBTRUVLX0VORCkgb3IgY3JvYWsgInNlZWs6ICQhIjsKKwlzeXNyZWFkKCRmaCwgbXkgJGJ1ZiwgMjQpID09IDI0IG9yIGNyb2FrICJyZWFkOiAkISI7CisJbXkgKCRyLCAkYykgPSB1bnBhY2socmV2X21hcF9mbXQsICRidWYpOworCWlmICgkd2FudF9jb21taXQgJiYgJGMgZXEgKCcwJyB4NDApKSB7CisJCWlmICgkc2l6ZSA8IDQ4KSB7CisJCQlyZXR1cm4gJHdhbnRfY29tbWl0ID8gKDAsIHVuZGVmKSA6IDA7CisJCX0KKwkJc3lzc2VlaygkZmgsIC00OCwgU0VFS19FTkQpIG9yIGNyb2FrICJzZWVrOiAkISI7CisJCXN5c3JlYWQoJGZoLCAkYnVmLCAyNCkgPT0gMjQgb3IgY3JvYWsgInJlYWQ6ICQhIjsKKwkJKCRyLCAkYykgPSB1bnBhY2socmV2X21hcF9mbXQsICRidWYpOworCQlpZiAoJGMgZXEgKCcwJ3g0MCkpIHsKKwkJCWNyb2FrICJQZW51bHRpbWF0ZSByZWNvcmQgaXMgYWxsLXplcm9lcyBpbiAkbWFwX3BhdGgiOworCQl9CisJfQorCWNsb3NlICRmaCBvciBjcm9hayAiY2xvc2U6ICQhIjsKKwkkd2FudF9jb21taXQgPyAoJHIsICRjKSA6ICRyOworfQorCitzdWIgcmV2X21hcF9nZXQgeworCW15ICgkc2VsZiwgJHJldiwgJHV1aWQpID0gQF87CisJbXkgJG1hcF9wYXRoID0gJHNlbGYtPm1hcF9wYXRoKCR1dWlkKTsKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIC1lICRtYXBfcGF0aDsKKworCXN5c29wZW4obXkgJGZoLCAkbWFwX3BhdGgsIE9fUkRPTkxZKSBvciBjcm9hayAib3BlbjogJCEiOworCW15ICRjID0gX3Jldl9tYXBfZ2V0KCRmaCwgJHJldik7CisJY2xvc2UoJGZoKSBvciBjcm9hayAiY2xvc2U6ICQhIjsKKwkkYworfQorCitzdWIgX3Jldl9tYXBfZ2V0IHsKKwlteSAoJGZoLCAkcmV2KSA9IEBfOworCisJYmlubW9kZSAkZmggb3IgY3JvYWsgImJpbm1vZGU6ICQhIjsKKwlteSAkc2l6ZSA9IChzdGF0KCRmaCkpWzddOworCSgkc2l6ZSAlIDI0KSA9PSAwIG9yIGNyb2FrICJpbmNvbnNpc3RlbnQgc2l6ZTogJHNpemUiOworCisJaWYgKCRzaXplID09IDApIHsKKwkJcmV0dXJuIHVuZGVmOworCX0KKworCW15ICgkbCwgJHUpID0gKDAsICRzaXplIC0gMjQpOworCW15ICgkciwgJGMsICRidWYpOworCisJd2hpbGUgKCRsIDw9ICR1KSB7CisJCW15ICRpID0gaW50KCgkbC8yNCArICR1LzI0KSAvIDIpICogMjQ7CisJCXN5c3NlZWsoJGZoLCAkaSwgU0VFS19TRVQpIG9yIGNyb2FrICJzZWVrOiAkISI7CisJCXN5c3JlYWQoJGZoLCBteSAkYnVmLCAyNCkgPT0gMjQgb3IgY3JvYWsgInJlYWQ6ICQhIjsKKwkJbXkgKCRyLCAkYykgPSB1bnBhY2socmV2X21hcF9mbXQsICRidWYpOworCisJCWlmICgkciA8ICRyZXYpIHsKKwkJCSRsID0gJGkgKyAyNDsKKwkJfSBlbHNpZiAoJHIgPiAkcmV2KSB7CisJCQkkdSA9ICRpIC0gMjQ7CisJCX0gZWxzZSB7ICMgJHIgPT0gJHJldgorCQkJcmV0dXJuICRjIGVxICgnMCcgeCA0MCkgPyB1bmRlZiA6ICRjOworCQl9CisJfQorCXVuZGVmOworfQorCisjIEZpbmRzIHRoZSBmaXJzdCBzdm4gcmV2aXNpb24gdGhhdCBleGlzdHMgb24gKGlmICRlcV9vayBpcyB0cnVlKSBvcgorIyBiZWZvcmUgJHJldiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiAgSXQgd2lsbCBub3Qgc2VhcmNoIGFueSBsb3dlcgorIyB0aGFuICRtaW5fcmV2LiAgUmV0dXJucyB0aGUgZ2l0IGNvbW1pdCBoYXNoIGFuZCBzdm4gcmV2aXNpb24gbnVtYmVyCisjIGlmIGZvdW5kLCBlbHNlICh1bmRlZiwgdW5kZWYpLgorc3ViIGZpbmRfcmV2X2JlZm9yZSB7CisJbXkgKCRzZWxmLCAkcmV2LCAkZXFfb2ssICRtaW5fcmV2KSA9IEBfOworCS0tJHJldiB1bmxlc3MgJGVxX29rOworCSRtaW5fcmV2IHx8PSAxOworCW15ICRtYXhfcmV2ID0gJHNlbGYtPnJldl9tYXBfbWF4OworCSRyZXYgPSAkbWF4X3JldiBpZiAoJHJldiA+ICRtYXhfcmV2KTsKKwl3aGlsZSAoJHJldiA+PSAkbWluX3JldikgeworCQlpZiAobXkgJGMgPSAkc2VsZi0+cmV2X21hcF9nZXQoJHJldikpIHsKKwkJCXJldHVybiAoJHJldiwgJGMpOworCQl9CisJCS0tJHJldjsKKwl9CisJcmV0dXJuICh1bmRlZiwgdW5kZWYpOworfQorCisjIEZpbmRzIHRoZSBmaXJzdCBzdm4gcmV2aXNpb24gdGhhdCBleGlzdHMgb24gKGlmICRlcV9vayBpcyB0cnVlKSBvcgorIyBhZnRlciAkcmV2IGZvciB0aGUgY3VycmVudCBicmFuY2guICBJdCB3aWxsIG5vdCBzZWFyY2ggYW55IGhpZ2hlcgorIyB0aGFuICRtYXhfcmV2LiAgUmV0dXJucyB0aGUgZ2l0IGNvbW1pdCBoYXNoIGFuZCBzdm4gcmV2aXNpb24gbnVtYmVyCisjIGlmIGZvdW5kLCBlbHNlICh1bmRlZiwgdW5kZWYpLgorc3ViIGZpbmRfcmV2X2FmdGVyIHsKKwlteSAoJHNlbGYsICRyZXYsICRlcV9vaywgJG1heF9yZXYpID0gQF87CisJKyskcmV2IHVubGVzcyAkZXFfb2s7CisJJG1heF9yZXYgfHw9ICRzZWxmLT5yZXZfbWFwX21heDsKKwl3aGlsZSAoJHJldiA8PSAkbWF4X3JldikgeworCQlpZiAobXkgJGMgPSAkc2VsZi0+cmV2X21hcF9nZXQoJHJldikpIHsKKwkJCXJldHVybiAoJHJldiwgJGMpOworCQl9CisJCSsrJHJldjsKKwl9CisJcmV0dXJuICh1bmRlZiwgdW5kZWYpOworfQorCitzdWIgX25ldyB7CisJbXkgKCRjbGFzcywgJHJlcG9faWQsICRyZWZfaWQsICRwYXRoKSA9IEBfOworCXVubGVzcyAoZGVmaW5lZCAkcmVwb19pZCAmJiBsZW5ndGggJHJlcG9faWQpIHsKKwkJJHJlcG9faWQgPSAkZGVmYXVsdF9yZXBvX2lkOworCX0KKwl1bmxlc3MgKGRlZmluZWQgJHJlZl9pZCAmJiBsZW5ndGggJHJlZl9pZCkgeworCQkjIEFjY2VzcyB0aGUgcHJlZml4IG9wdGlvbiBmcm9tIHRoZSBnaXQtc3ZuIG1haW4gcHJvZ3JhbSBpZiBpdCdzIGxvYWRlZC4KKwkJbXkgJHByZWZpeCA9IGRlZmluZWQgJjo6b3B0X3ByZWZpeCA/IDo6b3B0X3ByZWZpeCgpIDogIiI7CisJCSRfWzJdID0gJHJlZl9pZCA9CisJCSAgICAgICAgICAgICAicmVmcy9yZW1vdGVzLyRwcmVmaXgkZGVmYXVsdF9yZWZfaWQiOworCX0KKwkkX1sxXSA9ICRyZXBvX2lkOworCW15ICRkaXIgPSAiJEVOVntHSVRfRElSfS9zdm4vJHJlZl9pZCI7CisKKwkjIE9sZGVyIHJlcG9zIGltcG9ydGVkIGJ5IHVzIHVzZWQgJEdJVF9ESVIvc3ZuL2ZvbyBpbnN0ZWFkIG9mCisJIyAkR0lUX0RJUi9zdm4vcmVmcy9yZW1vdGVzL2ZvbyB3aGVuIHRyYWNraW5nIHJlZnMvcmVtb3Rlcy9mb28KKwlpZiAoJHJlZl9pZCA9fiBte15yZWZzL3JlbW90ZXMvKC4rKX0pIHsKKwkJbXkgJG9sZF9kaXIgPSAiJEVOVntHSVRfRElSfS9zdm4vJDEiOworCQlpZiAoLWQgJG9sZF9kaXIgJiYgISAtZCAkZGlyKSB7CisJCQkkZGlyID0gJG9sZF9kaXI7CisJCX0KKwl9CisKKwkkX1szXSA9ICRwYXRoID0gJycgdW5sZXNzIChkZWZpbmVkICRwYXRoKTsKKwlta3BhdGgoWyRkaXJdKTsKKwlteSAkb2JqID0gYmxlc3MgeworCQlyZWZfaWQgPT4gJHJlZl9pZCwgZGlyID0+ICRkaXIsIGluZGV4ID0+ICIkZGlyL2luZGV4IiwKKwkgICAgICAgIGNvbmZpZyA9PiAiJEVOVntHSVRfRElSfS9zdm4vY29uZmlnIiwKKwkgICAgICAgIG1hcF9yb290ID0+ICIkZGlyLy5yZXZfbWFwIiwgcmVwb19pZCA9PiAkcmVwb19pZCB9LCAkY2xhc3M7CisKKwkjIEVuc3VyZSBpdCBnZXRzIGNhbm9uaWNhbGl6ZWQKKwkkb2JqLT5wYXRoKCRwYXRoKTsKKworCXJldHVybiAkb2JqOworfQorCitzdWIgcGF0aCB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKworCWlmIChAXykgeworCQlteSAkcGF0aCA9IHNoaWZ0OworCQkkc2VsZi0+e19wYXRofSA9IGNhbm9uaWNhbGl6ZV9wYXRoKCRwYXRoKTsKKwkJcmV0dXJuOworCX0KKworCXJldHVybiAkc2VsZi0+e19wYXRofTsKK30KKworc3ViIHVybCB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKworCWlmIChAXykgeworCQlteSAkdXJsID0gc2hpZnQ7CisJCSRzZWxmLT57dXJsfSA9IGNhbm9uaWNhbGl6ZV91cmwoJHVybCk7CisJCXJldHVybjsKKwl9CisKKwlyZXR1cm4gJHNlbGYtPnt1cmx9OworfQorCisjIGZvciByZWFkLW9ubHkgYWNjZXNzIG9mIG9sZCAucmV2X2RiIGZvcm1hdHMKK3N1YiB1bmxpbmtfcmV2X2RiX3N5bWxpbmsgeworCW15ICgkc2VsZikgPSBAXzsKKwlteSAkbGluayA9ICRzZWxmLT5yZXZfZGJfcGF0aDsKKwkkbGluayA9fiBzL1wuW1x3LV0rJC8vIG9yIGNyb2FrICJtaXNzaW5nIFVVSUQgYXQgdGhlIGVuZCBvZiAkbGluayI7CisJaWYgKC1sICRsaW5rKSB7CisJCXVubGluayAkbGluayBvciBjcm9hayAidW5saW5rOiAkbGluayBmYWlsZWQhIjsKKwl9Cit9CisKK3N1YiByZXZfZGJfcGF0aCB7CisJbXkgKCRzZWxmLCAkdXVpZCkgPSBAXzsKKwlteSAkZGJfcGF0aCA9ICRzZWxmLT5tYXBfcGF0aCgkdXVpZCk7CisJJGRiX3BhdGggPX4gc3svXC5yZXZfbWFwXC59ey9cLnJldl9kYlwufQorCSAgICBvciBjcm9hayAibWFwX3BhdGg6ICRkYl9wYXRoIGRvZXMgbm90IGNvbnRhaW4gJy8ucmV2X21hcC4nICEiOworCSRkYl9wYXRoOworfQorCisjIHRoZSBuZXcgcmVwbGFjZW1lbnQgZm9yIC5yZXZfZGIKK3N1YiBtYXBfcGF0aCB7CisJbXkgKCRzZWxmLCAkdXVpZCkgPSBAXzsKKwkkdXVpZCB8fD0gJHNlbGYtPnJhX3V1aWQ7CisJIiRzZWxmLT57bWFwX3Jvb3R9LiR1dWlkIjsKK30KKworc3ViIHVyaV9lbmNvZGUgeworCW15ICgkZikgPSBAXzsKKwkkZiA9fiBzIyhbXmEtekEtWjAtOVwqIVw6X1wuL1wtXSkjc3ByaW50ZigiJSUlMDJYIixvcmQoJDEpKSNlZzsKKwkkZgorfQorCitzdWIgdXJpX2RlY29kZSB7CisJbXkgKCRmKSA9IEBfOworCSRmID1+IHMjJShbMC05YS1mQS1GXXsyfSkjY2hyKGhleCgkMSkpI2VnOworCSRmCit9CisKK3N1YiByZW1vdmVfdXNlcm5hbWUgeworCSRfWzBdID1+IHN7XihbXjpdKjovLylbXkBdK0B9eyQxfTsKK30KKworMTsKZGlmZiAtLWdpdCBhL3BlcmwvR2l0L1NWTi9FZGl0b3IucG0gYi9wZXJsL0dpdC9TVk4vRWRpdG9yLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MDE3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vRWRpdG9yLnBtCkBAIC0wLDAgKzEsNjA1IEBACitwYWNrYWdlIEdpdDo6U1ZOOjpFZGl0b3I7Cit1c2UgdmFycyBxdy9ASVNBICRfcm1kaXIgJF9jcF9zaW1pbGFyaXR5ICRfZmluZF9jb3BpZXNfaGFyZGVyICRfcmVuYW1lX2xpbWl0LzsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgU1ZOOjpDb3JlOwordXNlIFNWTjo6RGVsdGE7Cit1c2UgQ2FycCBxdy9jcm9hay87Cit1c2UgR2l0IHF3L2NvbW1hbmQgY29tbWFuZF9vbmVsaW5lIGNvbW1hbmRfbm9pc3kgY29tbWFuZF9vdXRwdXRfcGlwZQorICAgICAgICAgICBjb21tYW5kX2lucHV0X3BpcGUgY29tbWFuZF9jbG9zZV9waXBlCisgICAgICAgICAgIGNvbW1hbmRfYmlkaV9waXBlIGNvbW1hbmRfY2xvc2VfYmlkaV9waXBlLzsKK0JFR0lOIHsKKwlASVNBID0gcXcoU1ZOOjpEZWx0YTo6RWRpdG9yKTsKK30KKworc3ViIG5ldyB7CisJbXkgKCRjbGFzcywgJG9wdHMpID0gQF87CisJZm9yZWFjaCAocXcvc3ZuX3BhdGggciByYSB0cmVlX2EgdHJlZV9iIGxvZyBlZGl0b3JfY2IvKSB7CisJCWRpZSAiJF8gcmVxdWlyZWQhXG4iIHVubGVzcyAoZGVmaW5lZCAkb3B0cy0+eyRffSk7CisJfQorCisJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ldzsKKwlteSAkbW9kcyA9IGdlbmVyYXRlX2RpZmYoJG9wdHMtPnt0cmVlX2F9LCAkb3B0cy0+e3RyZWVfYn0pOworCW15ICR0eXBlcyA9IGNoZWNrX2RpZmZfcGF0aHMoJG9wdHMtPntyYX0sICRvcHRzLT57c3ZuX3BhdGh9LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9wdHMtPntyfSwgJG1vZHMpOworCisJIyAkb3B0cy0+e3JhfSBmdW5jdGlvbnMgc2hvdWxkIG5vdCBiZSB1c2VkIGFmdGVyIHRoaXM6CisJbXkgQGNlICA9ICRvcHRzLT57cmF9LT5nZXRfY29tbWl0X2VkaXRvcigkb3B0cy0+e2xvZ30sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvcHRzLT57ZWRpdG9yX2NifSwgJHBvb2wpOworCW15ICRzZWxmID0gU1ZOOjpEZWx0YTo6RWRpdG9yLT5uZXcoQGNlLCAkcG9vbCk7CisJYmxlc3MgJHNlbGYsICRjbGFzczsKKwlmb3JlYWNoIChxdy9zdm5fcGF0aCByIHRyZWVfYSB0cmVlX2IvKSB7CisJCSRzZWxmLT57JF99ID0gJG9wdHMtPnskX307CisJfQorCSRzZWxmLT57dXJsfSA9ICRvcHRzLT57cmF9LT57dXJsfTsKKwkkc2VsZi0+e21vZHN9ID0gJG1vZHM7CisJJHNlbGYtPnt0eXBlc30gPSAkdHlwZXM7CisJJHNlbGYtPntwb29sfSA9ICRwb29sOworCSRzZWxmLT57YmF0fSA9IHsgJycgPT4gJHNlbGYtPm9wZW5fcm9vdCgkc2VsZi0+e3J9LCAkc2VsZi0+e3Bvb2x9KSB9OworCSRzZWxmLT57cm19ID0geyB9OworCSRzZWxmLT57cGF0aF9wcmVmaXh9ID0gbGVuZ3RoICRzZWxmLT57c3ZuX3BhdGh9ID8KKwkgICAgICAgICAgICAgICAgICAgICAgICIkc2VsZi0+e3N2bl9wYXRofS8iIDogJyc7CisJJHNlbGYtPntjb25maWd9ID0gJG9wdHMtPntjb25maWd9OworCSRzZWxmLT57bWVyZ2VpbmZvfSA9ICRvcHRzLT57bWVyZ2VpbmZvfTsKKwlyZXR1cm4gJHNlbGY7Cit9CisKK3N1YiBnZW5lcmF0ZV9kaWZmIHsKKwlteSAoJHRyZWVfYSwgJHRyZWVfYikgPSBAXzsKKwlteSBAZGlmZl90cmVlID0gcXcoZGlmZi10cmVlIC16IC1yKTsKKwlpZiAoJF9jcF9zaW1pbGFyaXR5KSB7CisJCXB1c2ggQGRpZmZfdHJlZSwgIi1DJF9jcF9zaW1pbGFyaXR5IjsKKwl9IGVsc2UgeworCQlwdXNoIEBkaWZmX3RyZWUsICctQyc7CisJfQorCXB1c2ggQGRpZmZfdHJlZSwgJy0tZmluZC1jb3BpZXMtaGFyZGVyJyBpZiAkX2ZpbmRfY29waWVzX2hhcmRlcjsKKwlwdXNoIEBkaWZmX3RyZWUsICItbCRfcmVuYW1lX2xpbWl0IiBpZiBkZWZpbmVkICRfcmVuYW1lX2xpbWl0OworCXB1c2ggQGRpZmZfdHJlZSwgJHRyZWVfYSwgJHRyZWVfYjsKKwlteSAoJGRpZmZfZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShAZGlmZl90cmVlKTsKKwlsb2NhbCAkLyA9ICJcMCI7CisJbXkgJHN0YXRlID0gJ21ldGEnOworCW15IEBtb2RzOworCXdoaWxlICg8JGRpZmZfZmg+KSB7CisJCWNob21wICRfOyAjIHRoaXMgZ2V0cyByaWQgb2YgdGhlIHRyYWlsaW5nICJcMCIKKwkJaWYgKCRzdGF0ZSBlcSAnbWV0YScgJiYgL146KFxkezZ9KVxzKFxkezZ9KVxzCisJCQkJCSgkOjpzaGExKVxzKCQ6OnNoYTEpXHMKKwkJCQkJKFtNVENSQURdKVxkKiQveG8pIHsKKwkJCXB1c2ggQG1vZHMsIHsJbW9kZV9hID0+ICQxLCBtb2RlX2IgPT4gJDIsCisJCQkJCXNoYTFfYSA9PiAkMywgc2hhMV9iID0+ICQ0LAorCQkJCQljaGcgPT4gJDUgfTsKKwkJCWlmICgkNSA9fiAvXig/OkN8UikkLykgeworCQkJCSRzdGF0ZSA9ICdmaWxlX2EnOworCQkJfSBlbHNlIHsKKwkJCQkkc3RhdGUgPSAnZmlsZV9iJzsKKwkJCX0KKwkJfSBlbHNpZiAoJHN0YXRlIGVxICdmaWxlX2EnKSB7CisJCQlteSAkeCA9ICRtb2RzWyQjbW9kc10gb3IgY3JvYWsgIkVtcHR5IGFycmF5XG4iOworCQkJaWYgKCR4LT57Y2hnfSAhfiAvXig/OkN8UikkLykgeworCQkJCWNyb2FrICJFcnJvciBwYXJzaW5nICRfLCAkeC0+e2NoZ31cbiI7CisJCQl9CisJCQkkeC0+e2ZpbGVfYX0gPSAkXzsKKwkJCSRzdGF0ZSA9ICdmaWxlX2InOworCQl9IGVsc2lmICgkc3RhdGUgZXEgJ2ZpbGVfYicpIHsKKwkJCW15ICR4ID0gJG1vZHNbJCNtb2RzXSBvciBjcm9hayAiRW1wdHkgYXJyYXlcbiI7CisJCQlpZiAoZXhpc3RzICR4LT57ZmlsZV9hfSAmJiAkeC0+e2NoZ30gIX4gL14oPzpDfFIpJC8pIHsKKwkJCQljcm9hayAiRXJyb3IgcGFyc2luZyAkXywgJHgtPntjaGd9XG4iOworCQkJfQorCQkJaWYgKCFleGlzdHMgJHgtPntmaWxlX2F9ICYmICR4LT57Y2hnfSA9fiAvXig/OkN8UikkLykgeworCQkJCWNyb2FrICJFcnJvciBwYXJzaW5nICRfLCAkeC0+e2NoZ31cbiI7CisJCQl9CisJCQkkeC0+e2ZpbGVfYn0gPSAkXzsKKwkJCSRzdGF0ZSA9ICdtZXRhJzsKKwkJfSBlbHNlIHsKKwkJCWNyb2FrICJFcnJvciBwYXJzaW5nICRfXG4iOworCQl9CisJfQorCWNvbW1hbmRfY2xvc2VfcGlwZSgkZGlmZl9maCwgJGN0eCk7CisJXEBtb2RzOworfQorCitzdWIgY2hlY2tfZGlmZl9wYXRocyB7CisJbXkgKCRyYSwgJHBmeCwgJHJldiwgJG1vZHMpID0gQF87CisJbXkgJXR5cGVzOworCSRwZnggLj0gJy8nIGlmIGxlbmd0aCAkcGZ4OworCisJc3ViIHR5cGVfZGlmZl9wYXRocyB7CisJCW15ICgkcmEsICR0eXBlcywgJHBhdGgsICRyZXYpID0gQF87CisJCW15IEBwID0gc3BsaXQgbSMvKyMsICRwYXRoOworCQlteSAkYyA9IHNoaWZ0IEBwOworCQl1bmxlc3MgKGRlZmluZWQgJHR5cGVzLT57JGN9KSB7CisJCQkkdHlwZXMtPnskY30gPSAkcmEtPmNoZWNrX3BhdGgoJGMsICRyZXYpOworCQl9CisJCXdoaWxlIChAcCkgeworCQkJJGMgLj0gJy8nIC4gc2hpZnQgQHA7CisJCQluZXh0IGlmIGRlZmluZWQgJHR5cGVzLT57JGN9OworCQkJJHR5cGVzLT57JGN9ID0gJHJhLT5jaGVja19wYXRoKCRjLCAkcmV2KTsKKwkJfQorCX0KKworCWZvcmVhY2ggbXkgJG0gKEAkbW9kcykgeworCQlmb3JlYWNoIG15ICRmIChxdy9maWxlX2EgZmlsZV9iLykgeworCQkJbmV4dCB1bmxlc3MgZGVmaW5lZCAkbS0+eyRmfTsKKwkJCW15ICgkZGlyKSA9ICgkbS0+eyRmfSA9fiBtI14oLio/KS8/KD86W14vXSspJCMpOworCQkJaWYgKGxlbmd0aCAkcGZ4LiRkaXIgJiYgISBkZWZpbmVkICR0eXBlc3skZGlyfSkgeworCQkJCXR5cGVfZGlmZl9wYXRocygkcmEsIFwldHlwZXMsICRwZnguJGRpciwgJHJldik7CisJCQl9CisJCX0KKwl9CisJXCV0eXBlczsKK30KKworc3ViIHNwbGl0X3BhdGggeworCXJldHVybiAoJF9bMF0gPX4gbSNeKC4qPykvPyhbXi9dKykkIyk7Cit9CisKK3N1YiByZXBvX3BhdGggeworCW15ICgkc2VsZiwgJHBhdGgpID0gQF87CisJaWYgKG15ICRlbmMgPSAkc2VsZi0+e3BhdGhuYW1lZW5jb2Rpbmd9KSB7CisJCXJlcXVpcmUgRW5jb2RlOworCQlFbmNvZGU6OmZyb21fdG8oJHBhdGgsICRlbmMsICdVVEYtOCcpOworCX0KKwkkc2VsZi0+e3BhdGhfcHJlZml4fS4oZGVmaW5lZCAkcGF0aCA/ICRwYXRoIDogJycpOworfQorCitzdWIgdXJsX3BhdGggeworCW15ICgkc2VsZiwgJHBhdGgpID0gQF87CisJaWYgKCRzZWxmLT57dXJsfSA9fiBtI15odHRwcz86Ly8jKSB7CisJCSMgY2hhcmFjdGVycyBhcmUgdGFrZW4gZnJvbSBzdWJ2ZXJzaW9uL2xpYnN2bl9zdWJyL3BhdGguYworCQkkcGF0aCA9fiBzIyhbXn5hLXpBLVowLTlfLi8hJCYnKCkqKywtXSkjc3ByaW50ZigiJSUlMDJYIixvcmQoJDEpKSNlZzsKKwl9CisJJHNlbGYtPnt1cmx9IC4gJy8nIC4gJHNlbGYtPnJlcG9fcGF0aCgkcGF0aCk7Cit9CisKK3N1YiBybWRpcnMgeworCW15ICgkc2VsZikgPSBAXzsKKwlteSAkcm0gPSAkc2VsZi0+e3JtfTsKKwlkZWxldGUgJHJtLT57Jyd9OyAjIHdlIG5ldmVyIGRlbGV0ZSB0aGUgdXJsIHdlJ3JlIHRyYWNraW5nCisJcmV0dXJuIHVubGVzcyAlJHJtOworCisJZm9yZWFjaCAoa2V5cyAlJHJtKSB7CisJCW15IEBkID0gc3BsaXQgbSMvIywgJF87CisJCW15ICRjID0gc2hpZnQgQGQ7CisJCSRybS0+eyRjfSA9IDE7CisJCXdoaWxlIChAZCkgeworCQkJJGMgLj0gJy8nIC4gc2hpZnQgQGQ7CisJCQkkcm0tPnskY30gPSAxOworCQl9CisJfQorCWRlbGV0ZSAkcm0tPnskc2VsZi0+e3N2bl9wYXRofX07CisJZGVsZXRlICRybS0+eycnfTsgIyB3ZSBuZXZlciBkZWxldGUgdGhlIHVybCB3ZSdyZSB0cmFja2luZworCXJldHVybiB1bmxlc3MgJSRybTsKKworCW15ICgkZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShxdy9scy10cmVlIC0tbmFtZS1vbmx5IC1yIC16LywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPnt0cmVlX2J9KTsKKwlsb2NhbCAkLyA9ICJcMCI7CisJd2hpbGUgKDwkZmg+KSB7CisJCWNob21wOworCQlteSBAZG4gPSBzcGxpdCBtIy8jLCAkXzsKKwkJd2hpbGUgKHBvcCBAZG4pIHsKKwkJCWRlbGV0ZSAkcm0tPntqb2luICcvJywgQGRufTsKKwkJfQorCQl1bmxlc3MgKCUkcm0pIHsKKwkJCWNsb3NlICRmaDsKKwkJCXJldHVybjsKKwkJfQorCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkY3R4KTsKKworCW15ICgkciwgJHAsICRiYXQpID0gKCRzZWxmLT57cn0sICRzZWxmLT57cG9vbH0sICRzZWxmLT57YmF0fSk7CisJZm9yZWFjaCBteSAkZCAoc29ydCB7ICRiID1+IHRyIy8jLyMgPD0+ICRhID1+IHRyIy8jLyMgfSBrZXlzICUkcm0pIHsKKwkJJHNlbGYtPmNsb3NlX2RpcmVjdG9yeSgkYmF0LT57JGR9LCAkcCk7CisJCW15ICgkZG4pID0gKCRkID1+IG0jXiguKj8pLz8oPzpbXi9dKykkIyk7CisJCXByaW50ICJcdEQrXHQkZC9cbiIgdW5sZXNzICQ6Ol9xOworCQkkc2VsZi0+U1VQRVI6OmRlbGV0ZV9lbnRyeSgkZCwgJHIsICRiYXQtPnskZG59LCAkcCk7CisJCWRlbGV0ZSAkYmF0LT57JGR9OworCX0KK30KKworc3ViIG9wZW5fb3JfYWRkX2RpciB7CisJbXkgKCRzZWxmLCAkZnVsbF9wYXRoLCAkYmF0b24sICRkZWxldGlvbnMpID0gQF87CisJbXkgJHQgPSAkc2VsZi0+e3R5cGVzfS0+eyRmdWxsX3BhdGh9OworCWlmICghZGVmaW5lZCAkdCkgeworCQlkaWUgIiRmdWxsX3BhdGggbm90IGtub3duIGluIHIkc2VsZi0+e3J9IG9yIHdlIGhhdmUgYSBidWchXG4iOworCX0KKwl7CisJCW5vIHdhcm5pbmdzICdvbmNlJzsKKwkJIyBTVk46Ok5vZGU6Om5vbmUgYW5kIFNWTjo6Tm9kZTo6ZmlsZSBhcmUgdXNlZCBvbmx5IG9uY2UsCisJCSMgc28gd2UncmUgc2h1dHRpbmcgdXAgUGVybCdzIHdhcm5pbmdzIGFib3V0IHRoZW0uCisJCWlmICgkdCA9PSAkU1ZOOjpOb2RlOjpub25lIHx8IGRlZmluZWQoJGRlbGV0aW9ucy0+eyRmdWxsX3BhdGh9KSkgeworCQkJcmV0dXJuICRzZWxmLT5hZGRfZGlyZWN0b3J5KCRmdWxsX3BhdGgsICRiYXRvbiwKKwkJCSAgICB1bmRlZiwgLTEsICRzZWxmLT57cG9vbH0pOworCQl9IGVsc2lmICgkdCA9PSAkU1ZOOjpOb2RlOjpkaXIpIHsKKwkJCXJldHVybiAkc2VsZi0+b3Blbl9kaXJlY3RvcnkoJGZ1bGxfcGF0aCwgJGJhdG9uLAorCQkJICAgICRzZWxmLT57cn0sICRzZWxmLT57cG9vbH0pOworCQl9ICMgbm8gd2FybmluZ3MgJ29uY2UnCisJCXByaW50IFNUREVSUiAiJGZ1bGxfcGF0aCBhbHJlYWR5IGV4aXN0cyBpbiByZXBvc2l0b3J5IGF0ICIsCisJCSAgICAiciRzZWxmLT57cn0gYW5kIGl0IGlzIG5vdCBhIGRpcmVjdG9yeSAoIiwKKwkJICAgICgkdCA9PSAkU1ZOOjpOb2RlOjpmaWxlID8gJ2ZpbGUnIDogJ3Vua25vd24nKSwiLyR0KVxuIjsKKwl9ICMgbm8gd2FybmluZ3MgJ29uY2UnCisJZXhpdCAxOworfQorCitzdWIgZW5zdXJlX3BhdGggeworCW15ICgkc2VsZiwgJHBhdGgsICRkZWxldGlvbnMpID0gQF87CisJbXkgJGJhdCA9ICRzZWxmLT57YmF0fTsKKwlteSAkcmVwb19wYXRoID0gJHNlbGYtPnJlcG9fcGF0aCgkcGF0aCk7CisJcmV0dXJuICRiYXQtPnsnJ30gdW5sZXNzIChsZW5ndGggJHJlcG9fcGF0aCk7CisKKwlteSBAcCA9IHNwbGl0IG0jLysjLCAkcmVwb19wYXRoOworCW15ICRjID0gc2hpZnQgQHA7CisJJGJhdC0+eyRjfSB8fD0gJHNlbGYtPm9wZW5fb3JfYWRkX2RpcigkYywgJGJhdC0+eycnfSwgJGRlbGV0aW9ucyk7CisJd2hpbGUgKEBwKSB7CisJCW15ICRjMCA9ICRjOworCQkkYyAuPSAnLycgLiBzaGlmdCBAcDsKKwkJJGJhdC0+eyRjfSB8fD0gJHNlbGYtPm9wZW5fb3JfYWRkX2RpcigkYywgJGJhdC0+eyRjMH0sICRkZWxldGlvbnMpOworCX0KKwlyZXR1cm4gJGJhdC0+eyRjfTsKK30KKworIyBTdWJyb3V0aW5lIHRvIGNvbnZlcnQgYSBnbG9iYmluZyBwYXR0ZXJuIHRvIGEgcmVndWxhciBleHByZXNzaW9uLgorIyBGcm9tIHBlcmwgY29va2Jvb2suCitzdWIgZ2xvYjJwYXQgeworCW15ICRnbG9ic3RyID0gc2hpZnQ7CisJbXkgJXBhdG1hcCA9ICgnKicgPT4gJy4qJywgJz8nID0+ICcuJywgJ1snID0+ICdbJywgJ10nID0+ICddJyk7CisJJGdsb2JzdHIgPX4gc3soLil9IHsgJHBhdG1hcHskMX0gfHwgIlxRJDEiIH1nZTsKKwlyZXR1cm4gJ14nIC4gJGdsb2JzdHIgLiAnJCc7Cit9CisKK3N1YiBjaGVja19hdXRvcHJvcCB7CisJbXkgKCRzZWxmLCAkcGF0dGVybiwgJHByb3BlcnRpZXMsICRmaWxlLCAkZmJhdCkgPSBAXzsKKwkjIENvbnZlcnQgdGhlIGdsb2JiaW5nIHBhdHRlcm4gdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uCisJbXkgJHJlZ2V4ID0gZ2xvYjJwYXQoJHBhdHRlcm4pOworCSMgQ2hlY2sgaWYgdGhlIHBhdHRlcm4gbWF0Y2hlcyB0aGUgZmlsZSBuYW1lLgorCWlmKCRmaWxlID1+IG0vKCRyZWdleCkvKSB7CisJCSMgUGFyc2UgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB0byBzZXQuCisJCW15IEBwcm9wcyA9IHNwbGl0KC87LywgJHByb3BlcnRpZXMpOworCQlmb3JlYWNoIG15ICRwcm9wIChAcHJvcHMpIHsKKwkJCSMgUGFyc2UgJ25hbWU9dmFsdWUnIHN5bnRheCBhbmQgc2V0IHRoZSBwcm9wZXJ0eS4KKwkJCWlmICgkcHJvcCA9fiAvKFtePV0rKT0oLiopLykgeworCQkJCW15ICgkbiwkdikgPSAoJDEsJDIpOworCQkJCWZvciAoJG4sICR2KSB7CisJCQkJCXMvXlxzKy8vOyBzL1xzKyQvLzsKKwkJCQl9CisJCQkJJHNlbGYtPmNoYW5nZV9maWxlX3Byb3AoJGZiYXQsICRuLCAkdik7CisJCQl9CisJCX0KKwl9Cit9CisKK3N1YiBhcHBseV9hdXRvcHJvcHMgeworCW15ICgkc2VsZiwgJGZpbGUsICRmYmF0KSA9IEBfOworCW15ICRjb25mX3QgPSAkeyRzZWxmLT57Y29uZmlnfX17J2NvbmZpZyd9OworCW5vIHdhcm5pbmdzICdvbmNlJzsKKwkjIENoZWNrIFttaXNjZWxsYW55XS9lbmFibGUtYXV0by1wcm9wcyBpbiBzdm4gY29uZmlndXJhdGlvbi4KKwlpZiAoU1ZOOjpfQ29yZTo6c3ZuX2NvbmZpZ19nZXRfYm9vbCgKKwkJJGNvbmZfdCwKKwkJJFNWTjo6X0NvcmU6OlNWTl9DT05GSUdfU0VDVElPTl9NSVNDRUxMQU5ZLAorCQkkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR19PUFRJT05fRU5BQkxFX0FVVE9fUFJPUFMsCisJCTApKSB7CisJCSMgQXV0by1wcm9wcyBhcmUgZW5hYmxlZC4gIEVudW1lcmF0ZSB0aGVtIHRvIGxvb2sgZm9yIG1hdGNoZXMuCisJCW15ICRjYWxsYmFjayA9IHN1YiB7CisJCQkkc2VsZi0+Y2hlY2tfYXV0b3Byb3AoJF9bMF0sICRfWzFdLCAkZmlsZSwgJGZiYXQpOworCQl9OworCQlTVk46Ol9Db3JlOjpzdm5fY29uZmlnX2VudW1lcmF0ZSgKKwkJCSRjb25mX3QsCisJCQkkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR19TRUNUSU9OX0FVVE9fUFJPUFMsCisJCQkkY2FsbGJhY2spOworCX0KK30KKworc3ViIGNoZWNrX2F0dHIgeworCW15ICgkYXR0ciwkcGF0aCkgPSBAXzsKKwlteSAkdmFsID0gY29tbWFuZF9vbmVsaW5lKCJjaGVjay1hdHRyIiwgJGF0dHIsICItLSIsICRwYXRoKTsKKwlpZiAoJHZhbCkgeyAkdmFsID1+IHMvXlteOl0qOlxzKlteOl0qOlxzKiguKilccyokLyQxLzsgfQorCXJldHVybiAkdmFsOworfQorCitzdWIgYXBwbHlfbWFudWFscHJvcHMgeworCW15ICgkc2VsZiwgJGZpbGUsICRmYmF0KSA9IEBfOworCW15ICRwZW5kaW5nX3Byb3BlcnRpZXMgPSBjaGVja19hdHRyKCAic3ZuLXByb3BlcnRpZXMiLCAkZmlsZSApOworCWlmICgkcGVuZGluZ19wcm9wZXJ0aWVzIGVxICIiKSB7IHJldHVybjsgfQorCSMgUGFyc2UgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyB0byBzZXQuCisJbXkgQHByb3BzID0gc3BsaXQoLzsvLCAkcGVuZGluZ19wcm9wZXJ0aWVzKTsKKwkjIFRPRE86IGdldCBleGlzdGluZyBwcm9wZXJ0aWVzIHRvIGNvbXBhcmUgdG8KKwkjIC0gdGhpcyBmYWlscyBmb3IgYWRkIHNvIGN1cnJlbnRseSBub3QgZG9uZQorCSMgbXkgJGV4aXN0aW5nX3Byb3BzID0gOjpnZXRfc3ZucHJvcHMoJGZpbGUpOworCW15ICRleGlzdGluZ19wcm9wcyA9IHt9OworCSMgVE9ETzogY2FjaGluZyBzdm4gcHJvcGVydGllcyBvciBzdG9yaW5nIHRoZW0gaW4gLmdpdGF0dHJpYnV0ZXMKKwkjIHdvdWxkIG1ha2UgdGhhdCBmYXN0ZXIKKwlmb3JlYWNoIG15ICRwcm9wIChAcHJvcHMpIHsKKwkJIyBQYXJzZSAnbmFtZT12YWx1ZScgc3ludGF4IGFuZCBzZXQgdGhlIHByb3BlcnR5LgorCQlpZiAoJHByb3AgPX4gLyhbXj1dKyk9KC4qKS8pIHsKKwkJCW15ICgkbiwkdikgPSAoJDEsJDIpOworCQkJZm9yICgkbiwgJHYpIHsKKwkJCQlzL15ccysvLzsgcy9ccyskLy87CisJCQl9CisJCQlteSAkZXhpc3RpbmcgPSAkZXhpc3RpbmdfcHJvcHMtPnskbn07CisJCQlpZiAoIWRlZmluZWQoJGV4aXN0aW5nKSB8fCAkZXhpc3RpbmcgbmUgJHYpIHsKKwkJCSAgICAkc2VsZi0+Y2hhbmdlX2ZpbGVfcHJvcCgkZmJhdCwgJG4sICR2KTsKKwkJCX0KKwkJfQorCX0KK30KKworc3ViIEEgeworCW15ICgkc2VsZiwgJG0sICRkZWxldGlvbnMpID0gQF87CisJbXkgKCRkaXIsICRmaWxlKSA9IHNwbGl0X3BhdGgoJG0tPntmaWxlX2J9KTsKKwlteSAkcGJhdCA9ICRzZWxmLT5lbnN1cmVfcGF0aCgkZGlyLCAkZGVsZXRpb25zKTsKKwlteSAkZmJhdCA9ICRzZWxmLT5hZGRfZmlsZSgkc2VsZi0+cmVwb19wYXRoKCRtLT57ZmlsZV9ifSksICRwYmF0LAorCQkJCQl1bmRlZiwgLTEpOworCXByaW50ICJcdEFcdCRtLT57ZmlsZV9ifVxuIiB1bmxlc3MgJDo6X3E7CisJJHNlbGYtPmFwcGx5X2F1dG9wcm9wcygkZmlsZSwgJGZiYXQpOworCSRzZWxmLT5hcHBseV9tYW51YWxwcm9wcygkbS0+e2ZpbGVfYn0sICRmYmF0KTsKKwkkc2VsZi0+Y2hnX2ZpbGUoJGZiYXQsICRtKTsKKwkkc2VsZi0+Y2xvc2VfZmlsZSgkZmJhdCx1bmRlZiwkc2VsZi0+e3Bvb2x9KTsKK30KKworc3ViIEMgeworCW15ICgkc2VsZiwgJG0sICRkZWxldGlvbnMpID0gQF87CisJbXkgKCRkaXIsICRmaWxlKSA9IHNwbGl0X3BhdGgoJG0tPntmaWxlX2J9KTsKKwlteSAkcGJhdCA9ICRzZWxmLT5lbnN1cmVfcGF0aCgkZGlyLCAkZGVsZXRpb25zKTsKKwkjIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIHN2biBzZXJmIGJhY2tlbmQgKHYxLjguNSBhbmQgYmVsb3cpOgorCSMgc3RvcmUgdGhpcmQgYXJndW1lbnQgdG8gLT5hZGRfZmlsZSgpIGluIGEgbG9jYWwgdmFyaWFibGUsIHRvIG1ha2UgaXQKKwkjIGhhdmUgdGhlIHNhbWUgbGlmZXRpbWUgYXMgJGZiYXQKKwlteSAkdXBhID0gJHNlbGYtPnVybF9wYXRoKCRtLT57ZmlsZV9hfSk7CisJbXkgJGZiYXQgPSAkc2VsZi0+YWRkX2ZpbGUoJHNlbGYtPnJlcG9fcGF0aCgkbS0+e2ZpbGVfYn0pLCAkcGJhdCwKKwkJCQkkdXBhLCAkc2VsZi0+e3J9KTsKKwlwcmludCAiXHRDXHQkbS0+e2ZpbGVfYX0gPT4gJG0tPntmaWxlX2J9XG4iIHVubGVzcyAkOjpfcTsKKwkkc2VsZi0+YXBwbHlfbWFudWFscHJvcHMoJG0tPntmaWxlX2J9LCAkZmJhdCk7CisJJHNlbGYtPmNoZ19maWxlKCRmYmF0LCAkbSk7CisJJHNlbGYtPmNsb3NlX2ZpbGUoJGZiYXQsdW5kZWYsJHNlbGYtPntwb29sfSk7Cit9CisKK3N1YiBkZWxldGVfZW50cnkgeworCW15ICgkc2VsZiwgJHBhdGgsICRwYmF0KSA9IEBfOworCW15ICRycGF0aCA9ICRzZWxmLT5yZXBvX3BhdGgoJHBhdGgpOworCW15ICgkZGlyLCAkZmlsZSkgPSBzcGxpdF9wYXRoKCRycGF0aCk7CisJJHNlbGYtPntybX0tPnskZGlyfSA9IDE7CisJJHNlbGYtPlNVUEVSOjpkZWxldGVfZW50cnkoJHJwYXRoLCAkc2VsZi0+e3J9LCAkcGJhdCwgJHNlbGYtPntwb29sfSk7Cit9CisKK3N1YiBSIHsKKwlteSAoJHNlbGYsICRtLCAkZGVsZXRpb25zKSA9IEBfOworCW15ICgkZGlyLCAkZmlsZSkgPSBzcGxpdF9wYXRoKCRtLT57ZmlsZV9ifSk7CisJbXkgJHBiYXQgPSAkc2VsZi0+ZW5zdXJlX3BhdGgoJGRpciwgJGRlbGV0aW9ucyk7CisJIyB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBzdm4gc2VyZiBiYWNrZW5kLCBzZWUgY29tbWVudCBpbiBDKCkgYWJvdmUKKwlteSAkdXBhID0gJHNlbGYtPnVybF9wYXRoKCRtLT57ZmlsZV9hfSk7CisJbXkgJGZiYXQgPSAkc2VsZi0+YWRkX2ZpbGUoJHNlbGYtPnJlcG9fcGF0aCgkbS0+e2ZpbGVfYn0pLCAkcGJhdCwKKwkJCQkkdXBhLCAkc2VsZi0+e3J9KTsKKwlwcmludCAiXHRSXHQkbS0+e2ZpbGVfYX0gPT4gJG0tPntmaWxlX2J9XG4iIHVubGVzcyAkOjpfcTsKKwkkc2VsZi0+YXBwbHlfYXV0b3Byb3BzKCRmaWxlLCAkZmJhdCk7CisJJHNlbGYtPmFwcGx5X21hbnVhbHByb3BzKCRtLT57ZmlsZV9ifSwgJGZiYXQpOworCSRzZWxmLT5jaGdfZmlsZSgkZmJhdCwgJG0pOworCSRzZWxmLT5jbG9zZV9maWxlKCRmYmF0LHVuZGVmLCRzZWxmLT57cG9vbH0pOworCisJKCRkaXIsICRmaWxlKSA9IHNwbGl0X3BhdGgoJG0tPntmaWxlX2F9KTsKKwkkcGJhdCA9ICRzZWxmLT5lbnN1cmVfcGF0aCgkZGlyLCAkZGVsZXRpb25zKTsKKwkkc2VsZi0+ZGVsZXRlX2VudHJ5KCRtLT57ZmlsZV9hfSwgJHBiYXQpOworfQorCitzdWIgTSB7CisJbXkgKCRzZWxmLCAkbSwgJGRlbGV0aW9ucykgPSBAXzsKKwlteSAoJGRpciwgJGZpbGUpID0gc3BsaXRfcGF0aCgkbS0+e2ZpbGVfYn0pOworCW15ICRwYmF0ID0gJHNlbGYtPmVuc3VyZV9wYXRoKCRkaXIsICRkZWxldGlvbnMpOworCW15ICRmYmF0ID0gJHNlbGYtPm9wZW5fZmlsZSgkc2VsZi0+cmVwb19wYXRoKCRtLT57ZmlsZV9ifSksCisJCQkJJHBiYXQsJHNlbGYtPntyfSwkc2VsZi0+e3Bvb2x9KTsKKwlwcmludCAiXHQkbS0+e2NoZ31cdCRtLT57ZmlsZV9ifVxuIiB1bmxlc3MgJDo6X3E7CisJJHNlbGYtPmFwcGx5X21hbnVhbHByb3BzKCRtLT57ZmlsZV9ifSwgJGZiYXQpOworCSRzZWxmLT5jaGdfZmlsZSgkZmJhdCwgJG0pOworCSRzZWxmLT5jbG9zZV9maWxlKCRmYmF0LHVuZGVmLCRzZWxmLT57cG9vbH0pOworfQorCitzdWIgVCB7CisJbXkgKCRzZWxmLCAkbSwgJGRlbGV0aW9ucykgPSBAXzsKKworCSMgV29yayBhcm91bmQgc3VidmVyc2lvbiBpc3N1ZSA0MDkxOiB0b2dnbGluZyB0aGUgImlzIGEKKwkjIHN5bWxpbmsiIHByb3BlcnR5IHJlcXVpcmVzIHJlbW92aW5nIGFuZCByZS1hZGRpbmcgYQorCSMgZmlsZSBvciBlbHNlICJzdm4gdXAiIG9uIGFmZmVjdGVkIGNsaWVudHMgdHJpcHMgYW4KKwkjIGFzc2VydGlvbiBhbmQgYWJvcnRzLgorCWlmICgoJG0tPnttb2RlX2J9ID1+IC9eMTIwLyAmJiAkbS0+e21vZGVfYX0gIX4gL14xMjAvKSB8fAorCSAgICAoJG0tPnttb2RlX2J9ICF+IC9eMTIwLyAmJiAkbS0+e21vZGVfYX0gPX4gL14xMjAvKSkgeworCQkkc2VsZi0+RCh7CisJCQltb2RlX2EgPT4gJG0tPnttb2RlX2F9LCBtb2RlX2IgPT4gJzAwMDAwMCcsCisJCQlzaGExX2EgPT4gJG0tPntzaGExX2F9LCBzaGExX2IgPT4gJzAnIHggNDAsCisJCQljaGcgPT4gJ0QnLCBmaWxlX2IgPT4gJG0tPntmaWxlX2J9CisJCX0sICRkZWxldGlvbnMpOworCQkkc2VsZi0+QSh7CisJCQltb2RlX2EgPT4gJzAwMDAwMCcsIG1vZGVfYiA9PiAkbS0+e21vZGVfYn0sCisJCQlzaGExX2EgPT4gJzAnIHggNDAsIHNoYTFfYiA9PiAkbS0+e3NoYTFfYn0sCisJCQljaGcgPT4gJ0EnLCBmaWxlX2IgPT4gJG0tPntmaWxlX2J9CisJCX0sICRkZWxldGlvbnMpOworCQlyZXR1cm47CisJfQorCisJJHNlbGYtPk0oJG0sICRkZWxldGlvbnMpOworfQorCitzdWIgY2hhbmdlX2ZpbGVfcHJvcCB7CisJbXkgKCRzZWxmLCAkZmJhdCwgJHBuYW1lLCAkcHZhbCkgPSBAXzsKKwkkc2VsZi0+U1VQRVI6OmNoYW5nZV9maWxlX3Byb3AoJGZiYXQsICRwbmFtZSwgJHB2YWwsICRzZWxmLT57cG9vbH0pOworfQorCitzdWIgY2hhbmdlX2Rpcl9wcm9wIHsKKwlteSAoJHNlbGYsICRwYmF0LCAkcG5hbWUsICRwdmFsKSA9IEBfOworCSRzZWxmLT5TVVBFUjo6Y2hhbmdlX2Rpcl9wcm9wKCRwYmF0LCAkcG5hbWUsICRwdmFsLCAkc2VsZi0+e3Bvb2x9KTsKK30KKworc3ViIF9jaGdfZmlsZV9nZXRfYmxvYiAoJCQkJCkgeworCW15ICgkc2VsZiwgJGZiYXQsICRtLCAkd2hpY2gpID0gQF87CisJbXkgJGZoID0gJDo6X3JlcG9zaXRvcnktPnRlbXBfYWNxdWlyZSgiZ2l0X2Jsb2JfJHdoaWNoIik7CisJaWYgKCRtLT57Im1vZGVfJHdoaWNoIn0gPX4gL14xMjAvKSB7CisJCXByaW50ICRmaCAnbGluayAnIG9yIGNyb2FrICQhOworCQkkc2VsZi0+Y2hhbmdlX2ZpbGVfcHJvcCgkZmJhdCwnc3ZuOnNwZWNpYWwnLCcqJyk7CisJfSBlbHNpZiAoJG0tPnttb2RlX2F9ID1+IC9eMTIwLyAmJiAkbS0+eyJtb2RlXyR3aGljaCJ9ICF+IC9eMTIwLykgeworCQkkc2VsZi0+Y2hhbmdlX2ZpbGVfcHJvcCgkZmJhdCwnc3ZuOnNwZWNpYWwnLHVuZGVmKTsKKwl9CisJbXkgJGJsb2IgPSAkbS0+eyJzaGExXyR3aGljaCJ9OworCXJldHVybiAoJGZoLCkgaWYgKCRibG9iID1+IC9eMHs0MH0kLyk7CisJbXkgJHNpemUgPSAkOjpfcmVwb3NpdG9yeS0+Y2F0X2Jsb2IoJGJsb2IsICRmaCk7CisJY3JvYWsgIkZhaWxlZCB0byByZWFkIG9iamVjdCAkYmxvYiIgaWYgKCRzaXplIDwgMCk7CisJJGZoLT5mbHVzaCA9PSAwIG9yIGNyb2FrICQhOworCXNlZWsgJGZoLCAwLCAwIG9yIGNyb2FrICQhOworCisJbXkgJGV4cCA9IDo6bWQ1c3VtKCRmaCk7CisJc2VlayAkZmgsIDAsIDAgb3IgY3JvYWsgJCE7CisJcmV0dXJuICgkZmgsICRleHApOworfQorCitzdWIgY2hnX2ZpbGUgeworCW15ICgkc2VsZiwgJGZiYXQsICRtKSA9IEBfOworCWlmICgkbS0+e21vZGVfYn0gPX4gLzc1NSQvICYmICRtLT57bW9kZV9hfSAhfiAvNzU1JC8pIHsKKwkJJHNlbGYtPmNoYW5nZV9maWxlX3Byb3AoJGZiYXQsJ3N2bjpleGVjdXRhYmxlJywnKicpOworCX0gZWxzaWYgKCRtLT57bW9kZV9ifSAhfiAvNzU1JC8gJiYgJG0tPnttb2RlX2F9ID1+IC83NTUkLykgeworCQkkc2VsZi0+Y2hhbmdlX2ZpbGVfcHJvcCgkZmJhdCwnc3ZuOmV4ZWN1dGFibGUnLHVuZGVmKTsKKwl9CisJbXkgKCRmaF9hLCAkZXhwX2EpID0gX2NoZ19maWxlX2dldF9ibG9iICRzZWxmLCAkZmJhdCwgJG0sICdhJzsKKwlteSAoJGZoX2IsICRleHBfYikgPSBfY2hnX2ZpbGVfZ2V0X2Jsb2IgJHNlbGYsICRmYmF0LCAkbSwgJ2InOworCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisJbXkgJGF0ZCA9ICRzZWxmLT5hcHBseV90ZXh0ZGVsdGEoJGZiYXQsICRleHBfYSwgJHBvb2wpOworCWlmICgtcyAkZmhfYSkgeworCQlteSAkdHhzdHJlYW0gPSBTVk46OlR4RGVsdGE6Om5ldyAoJGZoX2EsICRmaF9iLCAkcG9vbCk7CisJCW15ICRyZXMgPSBTVk46OlR4RGVsdGE6OnNlbmRfdHhzdHJlYW0oJHR4c3RyZWFtLCBAJGF0ZCwgJHBvb2wpOworCQlpZiAoZGVmaW5lZCAkcmVzKSB7CisJCQlkaWUgIlVuZXhwZWN0ZWQgcmVzdWx0IGZyb20gc2VuZF90eHN0cmVhbTogJHJlc1xuIiwKKwkJCSAgICAiKFNWTjo6Q29yZTo6VkVSU0lPTjogJFNWTjo6Q29yZTo6VkVSU0lPTilcbiI7CisJCX0KKwl9IGVsc2UgeworCQlteSAkZ290ID0gU1ZOOjpUeERlbHRhOjpzZW5kX3N0cmVhbSgkZmhfYiwgQCRhdGQsICRwb29sKTsKKwkJZGllICJDaGVja3N1bSBtaXNtYXRjaFxuZXhwZWN0ZWQ6ICRleHBfYlxuZ290OiAkZ290XG4iCisJCSAgICBpZiAoJGdvdCBuZSAkZXhwX2IpOworCX0KKwlHaXQ6OnRlbXBfcmVsZWFzZSgkZmhfYiwgMSk7CisJR2l0Ojp0ZW1wX3JlbGVhc2UoJGZoX2EsIDEpOworCSRwb29sLT5jbGVhcjsKK30KKworc3ViIEQgeworCW15ICgkc2VsZiwgJG0sICRkZWxldGlvbnMpID0gQF87CisJbXkgKCRkaXIsICRmaWxlKSA9IHNwbGl0X3BhdGgoJG0tPntmaWxlX2J9KTsKKwlteSAkcGJhdCA9ICRzZWxmLT5lbnN1cmVfcGF0aCgkZGlyLCAkZGVsZXRpb25zKTsKKwlwcmludCAiXHREXHQkbS0+e2ZpbGVfYn1cbiIgdW5sZXNzICQ6Ol9xOworCSRzZWxmLT5kZWxldGVfZW50cnkoJG0tPntmaWxlX2J9LCAkcGJhdCk7Cit9CisKK3N1YiBjbG9zZV9lZGl0IHsKKwlteSAoJHNlbGYpID0gQF87CisJbXkgKCRwLCRiYXQpID0gKCRzZWxmLT57cG9vbH0sICRzZWxmLT57YmF0fSk7CisJZm9yZWFjaCAoc29ydCB7ICRiID1+IHRyIy8jLyMgPD0+ICRhID1+IHRyIy8jLyMgfSBrZXlzICUkYmF0KSB7CisJCW5leHQgaWYgJF8gZXEgJyc7CisJCSRzZWxmLT5jbG9zZV9kaXJlY3RvcnkoJGJhdC0+eyRffSwgJHApOworCX0KKwkkc2VsZi0+Y2xvc2VfZGlyZWN0b3J5KCRiYXQtPnsnJ30sICRwKTsKKwkkc2VsZi0+U1VQRVI6OmNsb3NlX2VkaXQoJHApOworCSRwLT5jbGVhcjsKK30KKworc3ViIGFib3J0X2VkaXQgeworCW15ICgkc2VsZikgPSBAXzsKKwkkc2VsZi0+U1VQRVI6OmFib3J0X2VkaXQoJHNlbGYtPntwb29sfSk7Cit9CisKK3N1YiBERVNUUk9ZIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCSRzZWxmLT5TVVBFUjo6REVTVFJPWShAXyk7CisJJHNlbGYtPntwb29sfS0+Y2xlYXI7Cit9CisKKyMgdGhpcyBkcml2ZXMgdGhlIGVkaXRvcgorc3ViIGFwcGx5X2RpZmYgeworCW15ICgkc2VsZikgPSBAXzsKKwlteSAkbW9kcyA9ICRzZWxmLT57bW9kc307CisJbXkgJW8gPSAoIEQgPT4gMCwgQyA9PiAxLCBSID0+IDIsIEEgPT4gMywgTSA9PiA0LCBUID0+IDUgKTsKKwlteSAlZGVsZXRpb25zOworCisJZm9yZWFjaCBteSAkbSAoQCRtb2RzKSB7CisJCWlmICgkbS0+e2NoZ30gZXEgIkQiKSB7CisJCQkkZGVsZXRpb25zeyRtLT57ZmlsZV9ifX0gPSAxOworCQl9CisJfQorCisJZm9yZWFjaCBteSAkbSAoc29ydCB7ICRveyRhLT57Y2hnfX0gPD0+ICRveyRiLT57Y2hnfX0gfSBAJG1vZHMpIHsKKwkJbXkgJGYgPSAkbS0+e2NoZ307CisJCWlmIChkZWZpbmVkICRveyRmfSkgeworCQkJJHNlbGYtPiRmKCRtLCBcJWRlbGV0aW9ucyk7CisJCX0gZWxzZSB7CisJCQlmYXRhbCgiSW52YWxpZCBjaGFuZ2UgdHlwZTogJGYiKTsKKwkJfQorCX0KKworCWlmIChkZWZpbmVkKCRzZWxmLT57bWVyZ2VpbmZvfSkpIHsKKwkJJHNlbGYtPmNoYW5nZV9kaXJfcHJvcCgkc2VsZi0+e2JhdH17Jyd9LCAic3ZuOm1lcmdlaW5mbyIsCisJCQkgICAgICAgICAgICAgICAkc2VsZi0+e21lcmdlaW5mb30pOworCX0KKwkkc2VsZi0+cm1kaXJzIGlmICRfcm1kaXI7CisJaWYgKEAkbW9kcyA9PSAwICYmICFkZWZpbmVkKCRzZWxmLT57bWVyZ2VpbmZvfSkpIHsKKwkJJHNlbGYtPmFib3J0X2VkaXQ7CisJfSBlbHNlIHsKKwkJJHNlbGYtPmNsb3NlX2VkaXQ7CisJfQorCXJldHVybiBzY2FsYXIgQCRtb2RzOworfQorCisxOworX19FTkRfXworCis9aGVhZDEgTkFNRQorCitHaXQ6OlNWTjo6RWRpdG9yIC0gY29tbWl0IGRyaXZlciBmb3IgImdpdCBzdm4gc2V0LXRyZWUiIGFuZCBkY29tbWl0CisKKz1oZWFkMSBTWU5PUFNJUworCisJdXNlIEdpdDo6U1ZOOjpFZGl0b3I7CisJdXNlIEdpdDo6U1ZOOjpSYTsKKworCW15ICRyYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCR1cmwpOworCW15ICVvcHRzID0gKAorCQlyID0+IDE5LAorCQlsb2cgPT4gImxvZyBtZXNzYWdlIiwKKwkJcmEgPT4gJHJhLAorCQljb25maWcgPT4gU1ZOOjpDb3JlOjpjb25maWdfZ2V0X2NvbmZpZygkc3ZuX2NvbmZpZ19kaXIpLAorCQl0cmVlX2EgPT4gIiRjb21taXReIiwKKwkJdHJlZV9iID0+ICIkY29tbWl0IiwKKwkJZWRpdG9yX2NiID0+IHN1YiB7IHByaW50ICJDb21taXR0ZWQgciRfWzBdXG4iOyB9LAorCQltZXJnZWluZm8gPT4gIi9icmFuY2hlcy9mb286MS0xMCIsCisJCXN2bl9wYXRoID0+ICJ0cnVuayIKKwkpOworCUdpdDo6U1ZOOjpFZGl0b3ItPm5ldyhcJW9wdHMpLT5hcHBseV9kaWZmIG9yIHByaW50ICJObyBjaGFuZ2VzXG4iOworCisJbXkgJHJlID0gR2l0OjpTVk46OkVkaXRvcjo6Z2xvYjJwYXQoInRydW5rLyoiKTsKKwlpZiAoJGJyYW5jaG5hbWUgPX4gLyRyZS8pIHsKKwkJcHJpbnQgIm1hdGNoZWQhXG4iOworCX0KKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgbW9kdWxlIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUgImdpdCBzdm4iIGNvbW1hbmQuCitEbyBub3QgdXNlIGl0IHVubGVzcyB5b3UgYXJlIGRldmVsb3BpbmcgZ2l0LXN2bi4KKworVGhpcyBtb2R1bGUgYWRhcHRzIHRoZSBDPFNWTjo6RGVsdGE6OkVkaXRvcj4gb2JqZWN0IHJldHVybmVkIGJ5CitDPFNWTjo6RGVsdGE6OmdldF9jb21taXRfZWRpdG9yPiBhbmQgZHJpdmVzIGl0IHRvIGNvbnZleSB0aGUKK2RpZmZlcmVuY2UgYmV0d2VlbiB0d28gZ2l0IHRyZWUgb2JqZWN0cyB0byBhIHJlbW90ZSBTdWJ2ZXJzaW9uCityZXBvc2l0b3J5LgorCitUaGUgaW50ZXJmYWNlIHdpbGwgY2hhbmdlIGFzIGdpdC1zdm4gZXZvbHZlcy4KKworPWhlYWQxIERFUEVOREVOQ0lFUworCitTdWJ2ZXJzaW9uIHBlcmwgYmluZGluZ3MsCit0aGUgY29yZSBMPENhcnA+IG1vZHVsZSwKK2FuZCBnaXQncyBMPEdpdD4gaGVscGVyIG1vZHVsZS4KKworQzxHaXQ6OlNWTjo6RWRpdG9yPiBoYXMgbm90IGJlZW4gdGVzdGVkIHVzaW5nIGNhbGxlcnMgb3RoZXIgdGhhbgorQjxnaXQtc3ZuPiBpdHNlbGYuCisKKz1oZWFkMSBTRUUgQUxTTworCitMPFNWTjo6RGVsdGE+LAorTDxHaXQ6OlNWTjo6RmV0Y2hlcj4uCisKKz1oZWFkMSBJTkNPTVBBVElCSUxJVElFUworCitOb25lIHJlcG9ydGVkLgorCis9aGVhZDEgQlVHUworCitOb25lLgpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOL0ZldGNoZXIucG0gYi9wZXJsL0dpdC9TVk4vRmV0Y2hlci5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGMyMWFkCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQvU1ZOL0ZldGNoZXIucG0KQEAgLTAsMCArMSw2MjcgQEAKK3BhY2thZ2UgR2l0OjpTVk46OkZldGNoZXI7Cit1c2UgdmFycyBxdy9ASVNBICRfaWdub3JlX3JlZ2V4ICRfaW5jbHVkZV9yZWdleCAkX3ByZXNlcnZlX2VtcHR5X2RpcnMKKyAgICAgICAgICAgICRfcGxhY2Vob2xkZXJfZmlsZW5hbWUgQGRlbGV0ZWRfZ3BhdGggJWFkZGVkX3BsYWNlaG9sZGVyCisgICAgICAgICAgICAkcmVwb19pZC87Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFNWTjo6RGVsdGE7Cit1c2UgQ2FycCBxdy9jcm9hay87Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcvZGlybmFtZS87Cit1c2UgR2l0IHF3L2NvbW1hbmQgY29tbWFuZF9vbmVsaW5lIGNvbW1hbmRfbm9pc3kgY29tbWFuZF9vdXRwdXRfcGlwZQorICAgICAgICAgICBjb21tYW5kX2lucHV0X3BpcGUgY29tbWFuZF9jbG9zZV9waXBlCisgICAgICAgICAgIGNvbW1hbmRfYmlkaV9waXBlIGNvbW1hbmRfY2xvc2VfYmlkaV9waXBlLzsKK0JFR0lOIHsKKwlASVNBID0gcXcoU1ZOOjpEZWx0YTo6RWRpdG9yKTsKK30KKworIyBmaWxlIGJhdG9uIG1lbWJlcnM6IHBhdGgsIG1vZGVfYSwgbW9kZV9iLCBwb29sLCBmaCwgYmxvYiwgYmFzZQorc3ViIG5ldyB7CisJbXkgKCRjbGFzcywgJGdpdF9zdm4sICRzd2l0Y2hfcGF0aCkgPSBAXzsKKwlteSAkc2VsZiA9IFNWTjo6RGVsdGE6OkVkaXRvci0+bmV3OworCWJsZXNzICRzZWxmLCAkY2xhc3M7CisJaWYgKGV4aXN0cyAkZ2l0X3N2bi0+e2xhc3RfY29tbWl0fSkgeworCQkkc2VsZi0+e2N9ID0gJGdpdF9zdm4tPntsYXN0X2NvbW1pdH07CisJCSRzZWxmLT57ZW1wdHlfc3ltbGlua3N9ID0KKwkJICAgICAgICAgICAgICAgICAgX21hcmtfZW1wdHlfc3ltbGlua3MoJGdpdF9zdm4sICRzd2l0Y2hfcGF0aCk7CisJfQorCisJIyBzb21lIG9wdGlvbnMgYXJlIHJlYWQgZ2xvYmFsbHksIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBsb2NhbGx5CisJIyBwZXIgW3N2bi1yZW1vdGUgIi4uLiJdIHNlY3Rpb24uICBDb21tYW5kLWxpbmUgb3B0aW9ucyB3aWxsICpOT1QqCisJIyBvdmVycmlkZSBvcHRpb25zIHNldCBpbiBhbiBbc3ZuLXJlbW90ZSAiLi4uIl0gc2VjdGlvbgorCSRyZXBvX2lkID0gJGdpdF9zdm4tPntyZXBvX2lkfTsKKwlteSAkayA9ICJzdm4tcmVtb3RlLiRyZXBvX2lkLmlnbm9yZS1wYXRocyI7CisJbXkgJHYgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLCAkaykgfTsKKwkkc2VsZi0+e2lnbm9yZV9yZWdleH0gPSAkdjsKKworCSRrID0gInN2bi1yZW1vdGUuJHJlcG9faWQuaW5jbHVkZS1wYXRocyI7CisJJHYgPSBldmFsIHsgY29tbWFuZF9vbmVsaW5lKCdjb25maWcnLCAnLS1nZXQnLCAkaykgfTsKKwkkc2VsZi0+e2luY2x1ZGVfcmVnZXh9ID0gJHY7CisKKwkkayA9ICJzdm4tcmVtb3RlLiRyZXBvX2lkLnByZXNlcnZlLWVtcHR5LWRpcnMiOworCSR2ID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywgJy0tYm9vbCcsICRrKSB9OworCWlmICgkdiAmJiAkdiBlcSAndHJ1ZScpIHsKKwkJJF9wcmVzZXJ2ZV9lbXB0eV9kaXJzID0gMTsKKwkJJGsgPSAic3ZuLXJlbW90ZS4kcmVwb19pZC5wbGFjZWhvbGRlci1maWxlbmFtZSI7CisJCSR2ID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0JywgJGspIH07CisJCSRfcGxhY2Vob2xkZXJfZmlsZW5hbWUgPSAkdjsKKwl9CisKKwkjIExvYWQgdGhlIGxpc3Qgb2YgcGxhY2Vob2xkZXIgZmlsZXMgYWRkZWQgZHVyaW5nIHByZXZpb3VzIGludm9jYXRpb25zLgorCSRrID0gInN2bi1yZW1vdGUuJHJlcG9faWQuYWRkZWQtcGxhY2Vob2xkZXIiOworCSR2ID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0LWFsbCcsICRrKSB9OworCWlmICgkX3ByZXNlcnZlX2VtcHR5X2RpcnMgJiYgJHYpIHsKKwkJIyBjb21tYW5kKCkgcHJpbnRzIGVycm9ycyB0byBzdGRlcnIsIHNvIHdlIG9ubHkgY2FsbCBpdCBpZgorCQkjIGNvbW1hbmRfb25lbGluZSgpIHN1Y2NlZWRlZC4KKwkJbXkgQHYgPSBjb21tYW5kKCdjb25maWcnLCAnLS1nZXQtYWxsJywgJGspOworCQkkYWRkZWRfcGxhY2Vob2xkZXJ7IGRpcm5hbWUoJF8pIH0gPSAkXyBmb3JlYWNoIEB2OworCX0KKworCSRzZWxmLT57ZW1wdHl9ID0ge307CisJJHNlbGYtPntkaXJfcHJvcH0gPSB7fTsKKwkkc2VsZi0+e2ZpbGVfcHJvcH0gPSB7fTsKKwkkc2VsZi0+e2Fic2VudF9kaXJ9ID0ge307CisJJHNlbGYtPnthYnNlbnRfZmlsZX0gPSB7fTsKKwlyZXF1aXJlIEdpdDo6SW5kZXhJbmZvOworCSRzZWxmLT57Z2lpfSA9ICRnaXRfc3ZuLT50bXBfaW5kZXhfZG8oc3ViIHsgR2l0OjpJbmRleEluZm8tPm5ldyB9KTsKKwkkc2VsZi0+e3BhdGhuYW1lZW5jb2Rpbmd9ID0gR2l0Ojpjb25maWcoJ3N2bi5wYXRobmFtZWVuY29kaW5nJyk7CisJJHNlbGY7Cit9CisKKyMgdGhpcyB1c2VzIHRoZSBSYSBvYmplY3QsIHNvIGl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSBkb197c3dpdGNoLHVwZGF0ZX0sCisjIG5vdCBpbnNpZGUgdGhlbSAod2hlbiB0aGUgR2l0OjpTVk46OkZldGNoZXIgb2JqZWN0IGlzIHBhc3NlZCkgdG8KKyMgZG9fe3N3aXRjaCx1cGRhdGV9CitzdWIgX21hcmtfZW1wdHlfc3ltbGlua3MgeworCW15ICgkZ2l0X3N2biwgJHN3aXRjaF9wYXRoKSA9IEBfOworCW15ICRib29sID0gR2l0Ojpjb25maWdfYm9vbCgnc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kJyk7CisJcmV0dXJuIHt9IGlmICghZGVmaW5lZCgkYm9vbCkpIHx8IChkZWZpbmVkKCRib29sKSAmJiAhICRib29sKTsKKworCW15ICVyZXQ7CisJbXkgKCRyZXYsICRjbXQpID0gJGdpdF9zdm4tPmxhc3RfcmV2X2NvbW1pdDsKKwlyZXR1cm4ge30gdW5sZXNzICgkcmV2ICYmICRjbXQpOworCisJIyBhbGxvdyB0aGUgd2FybmluZyB0byBiZSBwcmludGVkIGZvciBlYWNoIHJldmlzaW9uIHdlIGZldGNoIHRvCisJIyBlbnN1cmUgdGhlIHVzZXIgc2VlcyBpdC4gIFRoZSB1c2VyIGNhbiBhbHNvIGRpc2FibGUgdGhlIHdvcmthcm91bmQKKwkjIG9uIHRoZSByZXBvc2l0b3J5IGV2ZW4gd2hpbGUgZ2l0IHN2biBpcyBydW5uaW5nIGFuZCB0aGUgbmV4dAorCSMgcmV2aXNpb24gZmV0Y2hlZCB3aWxsIHNraXAgdGhpcyBleHBlbnNpdmUgZnVuY3Rpb24uCisJbXkgJHByaW50ZWRfd2FybmluZzsKKwljaG9tcChteSAkZW1wdHlfYmxvYiA9IGBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLXN0ZGluIDwgL2Rldi9udWxsYCk7CisJbXkgKCRscywgJGN0eCkgPSBjb21tYW5kX291dHB1dF9waXBlKHF3L2xzLXRyZWUgLXIgLXovLCAkY210KTsKKwlsb2NhbCAkLyA9ICJcMCI7CisJbXkgJHBmeCA9IGRlZmluZWQoJHN3aXRjaF9wYXRoKSA/ICRzd2l0Y2hfcGF0aCA6ICRnaXRfc3ZuLT5wYXRoOworCSRwZnggLj0gJy8nIGlmIGxlbmd0aCgkcGZ4KTsKKwl3aGlsZSAoPCRscz4pIHsKKwkJY2hvbXA7CisJCXMvXEExMDA2NDQgYmxvYiAkZW1wdHlfYmxvYlx0Ly9vIG9yIG5leHQ7CisJCXVubGVzcyAoJHByaW50ZWRfd2FybmluZykgeworCQkJcHJpbnQgU1RERVJSICJTY2FubmluZyBmb3IgZW1wdHkgc3ltbGlua3MsICIsCisJCQkgICAgICAgICAgICAgInRoaXMgbWF5IHRha2UgYSB3aGlsZSBpZiB5b3UgaGF2ZSAiLAorCQkJCSAgICAgIm1hbnkgZW1wdHkgZmlsZXNcbiIsCisJCQkJICAgICAiWW91IG1heSBkaXNhYmxlIHRoaXMgd2l0aCBgIiwKKwkJCQkgICAgICJnaXQgY29uZmlnIHN2bi5icm9rZW5TeW1saW5rV29ya2Fyb3VuZCAiLAorCQkJCSAgICAgImZhbHNlJy5cbiIsCisJCQkJICAgICAiVGhpcyBtYXkgYmUgZG9uZSBpbiBhIGRpZmZlcmVudCAiLAorCQkJCSAgICAgInRlcm1pbmFsIHdpdGhvdXQgcmVzdGFydGluZyAiLAorCQkJCSAgICAgImdpdCBzdm5cbiI7CisJCQkkcHJpbnRlZF93YXJuaW5nID0gMTsKKwkJfQorCQlteSAkcGF0aCA9ICRfOworCQlteSAodW5kZWYsICRwcm9wcykgPQorCQkgICAgICAgICAgICAgICAkZ2l0X3N2bi0+cmEtPmdldF9maWxlKCRwZnguJHBhdGgsICRyZXYsIHVuZGVmKTsKKwkJaWYgKCRwcm9wcy0+eydzdm46c3BlY2lhbCd9KSB7CisJCQkkcmV0eyRwYXRofSA9IDE7CisJCX0KKwl9CisJY29tbWFuZF9jbG9zZV9waXBlKCRscywgJGN0eCk7CisJXCVyZXQ7Cit9CisKKyMgcmV0dXJucyB0cnVlIGlmIGEgZ2l2ZW4gcGF0aCBpcyBpbnNpZGUgYSAiLmdpdCIgZGlyZWN0b3J5CitzdWIgaW5fZG90X2dpdCB7CisJJF9bMF0gPX4gbXsoPzpefC8pXC5naXQoPzovfCQpfTsKK30KKworIyByZXR1cm4gdmFsdWU6IDAgLS0gZG9uJ3QgaWdub3JlLCAxIC0tIGlnbm9yZQorIyBUaGlzIHdpbGwgYWxzbyBjaGVjayB3aGV0aGVyIHRoZSBwYXRoIGlzIGV4cGxpY2l0bHkgaW5jbHVkZWQKK3N1YiBpc19wYXRoX2lnbm9yZWQgeworCW15ICgkc2VsZiwgJHBhdGgpID0gQF87CisJcmV0dXJuIDEgaWYgaW5fZG90X2dpdCgkcGF0aCk7CisJcmV0dXJuIDEgaWYgZGVmaW5lZCgkc2VsZi0+e2lnbm9yZV9yZWdleH0pICYmCisJICAgICAgICAgICAgJHBhdGggPX4gbSEkc2VsZi0+e2lnbm9yZV9yZWdleH0hOworCXJldHVybiAwIGlmIGRlZmluZWQoJHNlbGYtPntpbmNsdWRlX3JlZ2V4fSkgJiYKKwkgICAgICAgICAgICAkcGF0aCA9fiBtISRzZWxmLT57aW5jbHVkZV9yZWdleH0hOworCXJldHVybiAwIGlmIGRlZmluZWQoJF9pbmNsdWRlX3JlZ2V4KSAmJgorCSAgICAgICAgICAgICRwYXRoID1+IG0hJF9pbmNsdWRlX3JlZ2V4ITsKKwlyZXR1cm4gMSBpZiBkZWZpbmVkKCRzZWxmLT57aW5jbHVkZV9yZWdleH0pOworCXJldHVybiAxIGlmIGRlZmluZWQoJF9pbmNsdWRlX3JlZ2V4KTsKKwlyZXR1cm4gMCB1bmxlc3MgZGVmaW5lZCgkX2lnbm9yZV9yZWdleCk7CisJcmV0dXJuIDEgaWYgJHBhdGggPX4gbSEkX2lnbm9yZV9yZWdleCFvOworCXJldHVybiAwOworfQorCitzdWIgc2V0X3BhdGhfc3RyaXAgeworCW15ICgkc2VsZiwgJHBhdGgpID0gQF87CisJJHNlbGYtPntwYXRoX3N0cmlwfSA9IHFyL15cUSRwYXRoXEUoXC98JCkvIGlmIGxlbmd0aCAkcGF0aDsKK30KKworc3ViIG9wZW5fcm9vdCB7CisJeyBwYXRoID0+ICcnIH07Cit9CisKK3N1YiBvcGVuX2RpcmVjdG9yeSB7CisJbXkgKCRzZWxmLCAkcGF0aCwgJHBiLCAkcmV2KSA9IEBfOworCXsgcGF0aCA9PiAkcGF0aCB9OworfQorCitzdWIgZ2l0X3BhdGggeworCW15ICgkc2VsZiwgJHBhdGgpID0gQF87CisJaWYgKG15ICRlbmMgPSAkc2VsZi0+e3BhdGhuYW1lZW5jb2Rpbmd9KSB7CisJCXJlcXVpcmUgRW5jb2RlOworCQlFbmNvZGU6OmZyb21fdG8oJHBhdGgsICdVVEYtOCcsICRlbmMpOworCX0KKwlpZiAoJHNlbGYtPntwYXRoX3N0cmlwfSkgeworCQkkcGF0aCA9fiBzISRzZWxmLT57cGF0aF9zdHJpcH0hISBvcgorCQkgIGRpZSAiRmFpbGVkIHRvIHN0cmlwIHBhdGggJyRwYXRoJyAoJHNlbGYtPntwYXRoX3N0cmlwfSlcbiI7CisJfQorCSRwYXRoOworfQorCitzdWIgZGVsZXRlX2VudHJ5IHsKKwlteSAoJHNlbGYsICRwYXRoLCAkcmV2LCAkcGIpID0gQF87CisJcmV0dXJuIHVuZGVmIGlmICRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJHBhdGgpOworCisJbXkgJGdwYXRoID0gJHNlbGYtPmdpdF9wYXRoKCRwYXRoKTsKKwlyZXR1cm4gdW5kZWYgaWYgKCRncGF0aCBlcSAnJyk7CisKKwkjIHJlbW92ZSBlbnRpcmUgZGlyZWN0b3JpZXMuCisJbXkgKCR0cmVlKSA9IChjb21tYW5kKCdscy10cmVlJywgJy16JywgJHNlbGYtPntjfSwgIi4vJGdwYXRoIikKKwkgICAgICAgICAgICAgICAgID1+IC9cQTA0MDAwMCB0cmVlIChbYS1mXGRdezQwfSlcdFxRJGdwYXRoXEVcMC8pOworCWlmICgkdHJlZSkgeworCQlteSAoJGxzLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUocXcvbHMtdHJlZQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXIgLS1uYW1lLW9ubHkgLXovLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICR0cmVlKTsKKwkJbG9jYWwgJC8gPSAiXDAiOworCQl3aGlsZSAoPCRscz4pIHsKKwkJCWNob21wOworCQkJbXkgJHJtcGF0aCA9ICIkZ3BhdGgvJF8iOworCQkJJHNlbGYtPntnaWl9LT5yZW1vdmUoJHJtcGF0aCk7CisJCQlwcmludCAiXHREXHQkcm1wYXRoXG4iIHVubGVzcyAkOjpfcTsKKwkJfQorCQlwcmludCAiXHREXHQkZ3BhdGgvXG4iIHVubGVzcyAkOjpfcTsKKwkJY29tbWFuZF9jbG9zZV9waXBlKCRscywgJGN0eCk7CisJfSBlbHNlIHsKKwkJJHNlbGYtPntnaWl9LT5yZW1vdmUoJGdwYXRoKTsKKwkJcHJpbnQgIlx0RFx0JGdwYXRoXG4iIHVubGVzcyAkOjpfcTsKKwl9CisJIyBEb24ndCBhZGQgdG8gQGRlbGV0ZWRfZ3BhdGggaWYgd2UncmUgZGVsZXRpbmcgYSBwbGFjZWhvbGRlciBmaWxlLgorCXB1c2ggQGRlbGV0ZWRfZ3BhdGgsICRncGF0aCB1bmxlc3MgJGFkZGVkX3BsYWNlaG9sZGVye2Rpcm5hbWUoJHBhdGgpfTsKKwkkc2VsZi0+e2VtcHR5fS0+eyRwYXRofSA9IDA7CisJdW5kZWY7Cit9CisKK3N1YiBvcGVuX2ZpbGUgeworCW15ICgkc2VsZiwgJHBhdGgsICRwYiwgJHJldikgPSBAXzsKKwlteSAoJG1vZGUsICRibG9iKTsKKworCWdvdG8gb3V0IGlmICRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJHBhdGgpOworCisJbXkgJGdwYXRoID0gJHNlbGYtPmdpdF9wYXRoKCRwYXRoKTsKKwkoJG1vZGUsICRibG9iKSA9IChjb21tYW5kKCdscy10cmVlJywgJy16JywgJHNlbGYtPntjfSwgIi4vJGdwYXRoIikKKwkgICAgICAgICAgICAgICAgICAgICA9fiAvXEEoXGR7Nn0pIGJsb2IgKFthLWZcZF17NDB9KVx0XFEkZ3BhdGhcRVwwLyk7CisJdW5sZXNzIChkZWZpbmVkICRtb2RlICYmIGRlZmluZWQgJGJsb2IpIHsKKwkJZGllICIkcGF0aCB3YXMgbm90IGZvdW5kIGluIGNvbW1pdCAkc2VsZi0+e2N9IChyJHJldilcbiI7CisJfQorCWlmICgkbW9kZSBlcSAnMTAwNjQ0JyAmJiAkc2VsZi0+e2VtcHR5X3N5bWxpbmtzfS0+eyRwYXRofSkgeworCQkkbW9kZSA9ICcxMjAwMDAnOworCX0KK291dDoKKwl7IHBhdGggPT4gJHBhdGgsIG1vZGVfYSA9PiAkbW9kZSwgbW9kZV9iID0+ICRtb2RlLCBibG9iID0+ICRibG9iLAorCSAgcG9vbCA9PiBTVk46OlBvb2wtPm5ldywgYWN0aW9uID0+ICdNJyB9OworfQorCitzdWIgYWRkX2ZpbGUgeworCW15ICgkc2VsZiwgJHBhdGgsICRwYiwgJGNwX3BhdGgsICRjcF9yZXYpID0gQF87CisJbXkgJG1vZGU7CisKKwlpZiAoISRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJHBhdGgpKSB7CisJCW15ICgkZGlyLCAkZmlsZSkgPSAoJHBhdGggPX4gbSNeKC4qPykvPyhbXi9dKykkIyk7CisJCWRlbGV0ZSAkc2VsZi0+e2VtcHR5fS0+eyRkaXJ9OworCQkkbW9kZSA9ICcxMDA2NDQnOworCisJCWlmICgkYWRkZWRfcGxhY2Vob2xkZXJ7JGRpcn0pIHsKKwkJCSMgUmVtb3ZlIG91ciBwbGFjZWhvbGRlciBmaWxlLCBpZiB3ZSBjcmVhdGVkIG9uZS4KKwkJCWRlbGV0ZV9lbnRyeSgkc2VsZiwgJGFkZGVkX3BsYWNlaG9sZGVyeyRkaXJ9KQorCQkJCXVubGVzcyAkcGF0aCBlcSAkYWRkZWRfcGxhY2Vob2xkZXJ7JGRpcn07CisJCQlkZWxldGUgJGFkZGVkX3BsYWNlaG9sZGVyeyRkaXJ9CisJCX0KKwl9CisKKwl7IHBhdGggPT4gJHBhdGgsIG1vZGVfYSA9PiAkbW9kZSwgbW9kZV9iID0+ICRtb2RlLAorCSAgcG9vbCA9PiBTVk46OlBvb2wtPm5ldywgYWN0aW9uID0+ICdBJyB9OworfQorCitzdWIgYWRkX2RpcmVjdG9yeSB7CisJbXkgKCRzZWxmLCAkcGF0aCwgJGNwX3BhdGgsICRjcF9yZXYpID0gQF87CisJZ290byBvdXQgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkcGF0aCk7CisJbXkgJGdwYXRoID0gJHNlbGYtPmdpdF9wYXRoKCRwYXRoKTsKKwlpZiAoJGdwYXRoIGVxICcnKSB7CisJCW15ICgkbHMsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShxdy9scy10cmVlCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtciAtLW5hbWUtb25seSAtei8sCisJCQkJICAgICAgICAgICAgICAgICAgICAgJHNlbGYtPntjfSk7CisJCWxvY2FsICQvID0gIlwwIjsKKwkJd2hpbGUgKDwkbHM+KSB7CisJCQljaG9tcDsKKwkJCSRzZWxmLT57Z2lpfS0+cmVtb3ZlKCRfKTsKKwkJCXByaW50ICJcdERcdCRfXG4iIHVubGVzcyAkOjpfcTsKKwkJCXB1c2ggQGRlbGV0ZWRfZ3BhdGgsICRncGF0aDsKKwkJfQorCQljb21tYW5kX2Nsb3NlX3BpcGUoJGxzLCAkY3R4KTsKKwkJJHNlbGYtPntlbXB0eX0tPnskcGF0aH0gPSAwOworCX0KKwlteSAoJGRpciwgJGZpbGUpID0gKCRwYXRoID1+IG0jXiguKj8pLz8oW14vXSspJCMpOworCWRlbGV0ZSAkc2VsZi0+e2VtcHR5fS0+eyRkaXJ9OworCSRzZWxmLT57ZW1wdHl9LT57JHBhdGh9ID0gMTsKKworCWlmICgkYWRkZWRfcGxhY2Vob2xkZXJ7JGRpcn0pIHsKKwkJIyBSZW1vdmUgb3VyIHBsYWNlaG9sZGVyIGZpbGUsIGlmIHdlIGNyZWF0ZWQgb25lLgorCQlkZWxldGVfZW50cnkoJHNlbGYsICRhZGRlZF9wbGFjZWhvbGRlcnskZGlyfSk7CisJCWRlbGV0ZSAkYWRkZWRfcGxhY2Vob2xkZXJ7JGRpcn0KKwl9CisKK291dDoKKwl7IHBhdGggPT4gJHBhdGggfTsKK30KKworc3ViIGNoYW5nZV9kaXJfcHJvcCB7CisJbXkgKCRzZWxmLCAkZGIsICRwcm9wLCAkdmFsdWUpID0gQF87CisJcmV0dXJuIHVuZGVmIGlmICRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJGRiLT57cGF0aH0pOworCSRzZWxmLT57ZGlyX3Byb3B9LT57JGRiLT57cGF0aH19IHx8PSB7fTsKKwkkc2VsZi0+e2Rpcl9wcm9wfS0+eyRkYi0+e3BhdGh9fS0+eyRwcm9wfSA9ICR2YWx1ZTsKKwl1bmRlZjsKK30KKworc3ViIGFic2VudF9kaXJlY3RvcnkgeworCW15ICgkc2VsZiwgJHBhdGgsICRwYikgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkcGF0aCk7CisJJHNlbGYtPnthYnNlbnRfZGlyfS0+eyRwYi0+e3BhdGh9fSB8fD0gW107CisJcHVzaCBAeyRzZWxmLT57YWJzZW50X2Rpcn0tPnskcGItPntwYXRofX19LCAkcGF0aDsKKwl1bmRlZjsKK30KKworc3ViIGFic2VudF9maWxlIHsKKwlteSAoJHNlbGYsICRwYXRoLCAkcGIpID0gQF87CisJcmV0dXJuIHVuZGVmIGlmICRzZWxmLT5pc19wYXRoX2lnbm9yZWQoJHBhdGgpOworCSRzZWxmLT57YWJzZW50X2ZpbGV9LT57JHBiLT57cGF0aH19IHx8PSBbXTsKKwlwdXNoIEB7JHNlbGYtPnthYnNlbnRfZmlsZX0tPnskcGItPntwYXRofX19LCAkcGF0aDsKKwl1bmRlZjsKK30KKworc3ViIGNoYW5nZV9maWxlX3Byb3AgeworCW15ICgkc2VsZiwgJGZiLCAkcHJvcCwgJHZhbHVlKSA9IEBfOworCXJldHVybiB1bmRlZiBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRmYi0+e3BhdGh9KTsKKwlpZiAoJHByb3AgZXEgJ3N2bjpleGVjdXRhYmxlJykgeworCQlpZiAoJGZiLT57bW9kZV9ifSAhPSAxMjAwMDApIHsKKwkJCSRmYi0+e21vZGVfYn0gPSBkZWZpbmVkICR2YWx1ZSA/IDEwMDc1NSA6IDEwMDY0NDsKKwkJfQorCX0gZWxzaWYgKCRwcm9wIGVxICdzdm46c3BlY2lhbCcpIHsKKwkJJGZiLT57bW9kZV9ifSA9IGRlZmluZWQgJHZhbHVlID8gMTIwMDAwIDogMTAwNjQ0OworCX0gZWxzZSB7CisJCSRzZWxmLT57ZmlsZV9wcm9wfS0+eyRmYi0+e3BhdGh9fSB8fD0ge307CisJCSRzZWxmLT57ZmlsZV9wcm9wfS0+eyRmYi0+e3BhdGh9fS0+eyRwcm9wfSA9ICR2YWx1ZTsKKwl9CisJdW5kZWY7Cit9CisKK3N1YiBhcHBseV90ZXh0ZGVsdGEgeworCW15ICgkc2VsZiwgJGZiLCAkZXhwKSA9IEBfOworCXJldHVybiB1bmRlZiBpZiAkc2VsZi0+aXNfcGF0aF9pZ25vcmVkKCRmYi0+e3BhdGh9KTsKKwlteSAkc3VmZml4ID0gMDsKKwkrKyRzdWZmaXggd2hpbGUgJDo6X3JlcG9zaXRvcnktPnRlbXBfaXNfbG9ja2VkKCJzdm5fZGVsdGFfJHskfV8kc3VmZml4Iik7CisJbXkgJGZoID0gJDo6X3JlcG9zaXRvcnktPnRlbXBfYWNxdWlyZSgic3ZuX2RlbHRhXyR7JH1fJHN1ZmZpeCIpOworCSMgJGZoIGdldHMgYXV0by1jbG9zZWQoKSBieSBTVk46OlR4RGVsdGE6OmFwcGx5KCksCisJIyAoYnV0ICRiYXNlIGRvZXMgbm90LCkgc28gZHVwKCkgaXQgZm9yIHJlYWRpbmcgaW4gY2xvc2VfZmlsZQorCW9wZW4gbXkgJGR1cCwgJzwmJywgJGZoIG9yIGNyb2FrICQhOworCW15ICRiYXNlID0gJDo6X3JlcG9zaXRvcnktPnRlbXBfYWNxdWlyZSgiZ2l0X2Jsb2JfJHskfV8kc3VmZml4Iik7CisJIyBjbG9zZV9maWxlIG1heSBjYWxsIHRlbXBfYWNxdWlyZSBvbiAnc3ZuX2hhc2gnLCBidXQgYmVjYXVzZSBvZiB0aGUKKwkjIGNhbGwgY2hhaW4sIGlmIHRoZSB0ZW1wX2FjcXVpcmUgY2FsbCBmcm9tIGNsb3NlX2ZpbGUgZW5kcyB1cCBiZWluZyB0aGUKKwkjIGNhbGwgdGhhdCBmaXJzdCBjcmVhdGVzIHRoZSAnc3ZuX2hhc2gnIHRlbXAgZmlsZSwgdGhlbiB0aGUgRmlsZUhhbmRsZQorCSMgdGhhdCdzIGNyZWF0ZWQgYXMgYSByZXN1bHQgd2lsbCBlbmQgdXAgaW4gYW4gU1ZOOjpQb29sIHRoYXQgd2UgY2xlYXIKKwkjIGluIFNWTjo6UmE6OmdzX2ZldGNoX2xvb3BfY29tbW9uLiAgQXZvaWQgdGhhdCBieSBtYWtpbmcgc3VyZSB0aGUKKwkjICdzdm5faGFzaCcgRmlsZUhhbmRsZSBpcyBhbHJlYWR5IGNyZWF0ZWQgYmVmb3JlIGNsb3NlX2ZpbGUgaXMgY2FsbGVkLgorCW15ICR0bXBfZmggPSAkOjpfcmVwb3NpdG9yeS0+dGVtcF9hY3F1aXJlKCdzdm5faGFzaCcpOworCSQ6Ol9yZXBvc2l0b3J5LT50ZW1wX3JlbGVhc2UoJHRtcF9maCwgMSk7CisKKwlpZiAoJGZiLT57YmxvYn0pIHsKKwkJbXkgKCRiYXNlX2lzX2xpbmssICRzaXplKTsKKworCQlpZiAoJGZiLT57bW9kZV9hfSBlcSAnMTIwMDAwJyAmJgorCQkgICAgISAkc2VsZi0+e2VtcHR5X3N5bWxpbmtzfS0+eyRmYi0+e3BhdGh9fSkgeworCQkJcHJpbnQgJGJhc2UgJ2xpbmsgJyBvciBkaWUgInByaW50ICQhXG4iOworCQkJJGJhc2VfaXNfbGluayA9IDE7CisJCX0KKwlyZXRyeToKKwkJJHNpemUgPSAkOjpfcmVwb3NpdG9yeS0+Y2F0X2Jsb2IoJGZiLT57YmxvYn0sICRiYXNlKTsKKwkJZGllICJGYWlsZWQgdG8gcmVhZCBvYmplY3QgJGZiLT57YmxvYn0iIGlmICgkc2l6ZSA8IDApOworCisJCWlmIChkZWZpbmVkICRleHApIHsKKwkJCXNlZWsgJGJhc2UsIDAsIDAgb3IgY3JvYWsgJCE7CisJCQlteSAkZ290ID0gOjptZDVzdW0oJGJhc2UpOworCQkJaWYgKCRnb3QgbmUgJGV4cCkgeworCQkJCW15ICRlcnIgPSAiQ2hlY2tzdW0gbWlzbWF0Y2g6ICIuCisJCQkJICAgICAgICIkZmItPntwYXRofSAkZmItPntibG9ifVxuIiAuCisJCQkJICAgICAgICJleHBlY3RlZDogJGV4cFxuIiAuCisJCQkJICAgICAgICIgICAgIGdvdDogJGdvdFxuIjsKKwkJCQlpZiAoJGJhc2VfaXNfbGluaykgeworCQkJCQl3YXJuICRlcnIsCisJCQkJCSAgICAgIlJldHJ5aW5nLi4uIChwb3NzaWJseSAiLAorCQkJCQkgICAgICJhIGJhZCBzeW1saW5rIGZyb20gU1ZOKVxuIjsKKwkJCQkJJDo6X3JlcG9zaXRvcnktPnRlbXBfcmVzZXQoJGJhc2UpOworCQkJCQkkYmFzZV9pc19saW5rID0gMDsKKwkJCQkJZ290byByZXRyeTsKKwkJCQl9CisJCQkJZGllICRlcnI7CisJCQl9CisJCX0KKwl9CisJc2VlayAkYmFzZSwgMCwgMCBvciBjcm9hayAkITsKKwkkZmItPntmaH0gPSAkZmg7CisJJGZiLT57YmFzZX0gPSAkYmFzZTsKKwlbIFNWTjo6VHhEZWx0YTo6YXBwbHkoJGJhc2UsICRkdXAsIHVuZGVmLCAkZmItPntwYXRofSwgJGZiLT57cG9vbH0pIF07Cit9CisKK3N1YiBjbG9zZV9maWxlIHsKKwlteSAoJHNlbGYsICRmYiwgJGV4cCkgPSBAXzsKKwlyZXR1cm4gdW5kZWYgaWYgJHNlbGYtPmlzX3BhdGhfaWdub3JlZCgkZmItPntwYXRofSk7CisKKwlteSAkaGFzaDsKKwlteSAkcGF0aCA9ICRzZWxmLT5naXRfcGF0aCgkZmItPntwYXRofSk7CisJaWYgKG15ICRmaCA9ICRmYi0+e2ZofSkgeworCQlpZiAoZGVmaW5lZCAkZXhwKSB7CisJCQlzZWVrKCRmaCwgMCwgMCkgb3IgY3JvYWsgJCE7CisJCQlteSAkZ290ID0gOjptZDVzdW0oJGZoKTsKKwkJCWlmICgkZ290IG5lICRleHApIHsKKwkJCQlkaWUgIkNoZWNrc3VtIG1pc21hdGNoOiAkcGF0aFxuIiwKKwkJCQkgICAgImV4cGVjdGVkOiAkZXhwXG4gICAgZ290OiAkZ290XG4iOworCQkJfQorCQl9CisJCWlmICgkZmItPnttb2RlX2J9ID09IDEyMDAwMCkgeworCQkJc3lzc2VlaygkZmgsIDAsIDApIG9yIGNyb2FrICQhOworCQkJbXkgJHJkID0gc3lzcmVhZCgkZmgsIG15ICRidWYsIDUpOworCisJCQlpZiAoIWRlZmluZWQgJHJkKSB7CisJCQkJY3JvYWsgInN5c3JlYWQ6ICQhXG4iOworCQkJfSBlbHNpZiAoJHJkID09IDApIHsKKwkJCQl3YXJuICIkcGF0aCBoYXMgbW9kZSAxMjAwMDAiLAorCQkJCSAgICAgIiBidXQgaXQgcG9pbnRzIHRvIG5vdGhpbmdcbiIsCisJCQkJICAgICAiY29udmVydGluZyB0byBhbiBlbXB0eSBmaWxlIHdpdGggbW9kZSIsCisJCQkJICAgICAiIDEwMDY0NFxuIjsKKwkJCQkkZmItPnttb2RlX2J9ID0gJzEwMDY0NCc7CisJCQl9IGVsc2lmICgkYnVmIG5lICdsaW5rICcpIHsKKwkJCQl3YXJuICIkcGF0aCBoYXMgbW9kZSAxMjAwMDAiLAorCQkJCSAgICAgIiBidXQgaXMgbm90IGEgbGlua1xuIjsKKwkJCX0gZWxzZSB7CisJCQkJbXkgJHRtcF9maCA9ICQ6Ol9yZXBvc2l0b3J5LT50ZW1wX2FjcXVpcmUoCisJCQkJCSdzdm5faGFzaCcpOworCQkJCW15ICRyZXM7CisJCQkJd2hpbGUgKCRyZXMgPSBzeXNyZWFkKCRmaCwgbXkgJHN0ciwgMTAyNCkpIHsKKwkJCQkJbXkgJG91dCA9IHN5c3dyaXRlKCR0bXBfZmgsICRzdHIsICRyZXMpOworCQkJCQlkZWZpbmVkKCRvdXQpICYmICRvdXQgPT0gJHJlcworCQkJCQkJb3IgY3JvYWsoIndyaXRlICIsCisJCQkJCQkJR2l0Ojp0ZW1wX3BhdGgoJHRtcF9maCksCisJCQkJCQkJIjogJCFcbiIpOworCQkJCX0KKwkJCQlkZWZpbmVkICRyZXMgb3IgY3JvYWsgJCE7CisKKwkJCQkoJGZoLCAkdG1wX2ZoKSA9ICgkdG1wX2ZoLCAkZmgpOworCQkJCUdpdDo6dGVtcF9yZWxlYXNlKCR0bXBfZmgsIDEpOworCQkJfQorCQl9CisKKwkJJGhhc2ggPSAkOjpfcmVwb3NpdG9yeS0+aGFzaF9hbmRfaW5zZXJ0X29iamVjdCgKKwkJCQlHaXQ6OnRlbXBfcGF0aCgkZmgpKTsKKwkJJGhhc2ggPX4gL15bYS1mXGRdezQwfSQvIG9yIGRpZSAibm90IGEgc2hhMTogJGhhc2hcbiI7CisKKwkJR2l0Ojp0ZW1wX3JlbGVhc2UoJGZiLT57YmFzZX0sIDEpOworCQlHaXQ6OnRlbXBfcmVsZWFzZSgkZmgsIDEpOworCX0gZWxzZSB7CisJCSRoYXNoID0gJGZiLT57YmxvYn0gb3IgZGllICJubyBibG9iIGluZm9ybWF0aW9uXG4iOworCX0KKwkkZmItPntwb29sfS0+Y2xlYXI7CisJJHNlbGYtPntnaWl9LT51cGRhdGUoJGZiLT57bW9kZV9ifSwgJGhhc2gsICRwYXRoKSBvciBjcm9hayAkITsKKwlwcmludCAiXHQkZmItPnthY3Rpb259XHQkcGF0aFxuIiBpZiAkZmItPnthY3Rpb259ICYmICEgJDo6X3E7CisJdW5kZWY7Cit9CisKK3N1YiBhYm9ydF9lZGl0IHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCSRzZWxmLT57bnJ9ID0gJHNlbGYtPntnaWl9LT57bnJ9OworCWRlbGV0ZSAkc2VsZi0+e2dpaX07CisJJHNlbGYtPlNVUEVSOjphYm9ydF9lZGl0KEBfKTsKK30KKworc3ViIGNsb3NlX2VkaXQgeworCW15ICRzZWxmID0gc2hpZnQ7CisKKwlpZiAoJF9wcmVzZXJ2ZV9lbXB0eV9kaXJzKSB7CisJCW15IEBlbXB0eV9kaXJzOworCisJCSMgQW55IGVudHJ5IGZsYWdnZWQgYXMgZW1wdHkgdGhhdCBhbHNvIGhhcyBhbiBhc3NvY2lhdGVkCisJCSMgZGlyX3Byb3AgcmVwcmVzZW50cyBhIG5ld2x5IGNyZWF0ZWQgZW1wdHkgZGlyZWN0b3J5LgorCQlmb3JlYWNoIG15ICRpIChrZXlzICV7JHNlbGYtPntlbXB0eX19KSB7CisJCQlwdXNoIEBlbXB0eV9kaXJzLCAkaSBpZiBleGlzdHMgJHNlbGYtPntkaXJfcHJvcH0tPnskaX07CisJCX0KKworCQkjIFNlYXJjaCBmb3IgZGlyZWN0b3JpZXMgdGhhdCBoYXZlIGJlY29tZSBlbXB0eSBkdWUgc3Vic2VxdWVudAorCQkjIGZpbGUgZGVsZXRlcy4KKwkJcHVzaCBAZW1wdHlfZGlycywgJHNlbGYtPmZpbmRfZW1wdHlfZGlyZWN0b3JpZXMoKTsKKworCQkjIEZpbmFsbHksIGFkZCBhIHBsYWNlaG9sZGVyIGZpbGUgdG8gZWFjaCBlbXB0eSBkaXJlY3RvcnkuCisJCSRzZWxmLT5hZGRfcGxhY2Vob2xkZXJfZmlsZSgkXykgZm9yZWFjaCAoQGVtcHR5X2RpcnMpOworCisJCSRzZWxmLT5zdGFzaF9wbGFjZWhvbGRlcl9saXN0KCk7CisJfQorCisJJHNlbGYtPntnaXRfY29tbWl0X29rfSA9IDE7CisJJHNlbGYtPntucn0gPSAkc2VsZi0+e2dpaX0tPntucn07CisJZGVsZXRlICRzZWxmLT57Z2lpfTsKKwkkc2VsZi0+U1VQRVI6OmNsb3NlX2VkaXQoQF8pOworfQorCitzdWIgZmluZF9lbXB0eV9kaXJlY3RvcmllcyB7CisJbXkgKCRzZWxmKSA9IEBfOworCW15IEBlbXB0eV9kaXJzOworCW15ICVkaXJzID0gbWFwIHsgZGlybmFtZSgkXykgPT4gMSB9IEBkZWxldGVkX2dwYXRoOworCisJZm9yZWFjaCBteSAkZGlyIChzb3J0IGtleXMgJWRpcnMpIHsKKwkJbmV4dCBpZiAkZGlyIGVxICIuIjsKKworCQkjIElmIHRoZXJlIGhhdmUgYmVlbiBhbnkgYWRkaXRpb25zIHRvIHRoaXMgZGlyZWN0b3J5LCB0aGVyZSBpcworCQkjIG5vIHJlYXNvbiB0byBjaGVjayBpZiBpdCBpcyBlbXB0eS4KKwkJbXkgJHNraXBfYWRkZWQgPSAwOworCQlmb3JlYWNoIG15ICR0IChxdy9kaXJfcHJvcCBmaWxlX3Byb3AvKSB7CisJCQlmb3JlYWNoIG15ICRwYXRoIChrZXlzICV7ICRzZWxmLT57JHR9IH0pIHsKKwkJCQlpZiAoZXhpc3RzICRzZWxmLT57JHR9LT57ZGlybmFtZSgkcGF0aCl9KSB7CisJCQkJCSRza2lwX2FkZGVkID0gMTsKKwkJCQkJbGFzdDsKKwkJCQl9CisJCQl9CisJCQlsYXN0IGlmICRza2lwX2FkZGVkOworCQl9CisJCW5leHQgaWYgJHNraXBfYWRkZWQ7CisKKwkJIyBVc2UgYGdpdCBscy10cmVlYCB0byBnZXQgdGhlIGZpbGVuYW1lcyBvZiB0aGlzIGRpcmVjdG9yeQorCQkjIHRoYXQgZXhpc3RlZCBwcmlvciB0byB0aGlzIHBhcnRpY3VsYXIgY29tbWl0LgorCQlteSAkbHMgPSBjb21tYW5kKCdscy10cmVlJywgJy16JywgJy0tbmFtZS1vbmx5JywKKwkJCQkgJHNlbGYtPntjfSwgIiRkaXIvIik7CisJCW15ICVmaWxlcyA9IG1hcCB7ICRfID0+IDEgfSBzcGxpdCgvXDAvLCAkbHMpOworCisJCSMgUmVtb3ZlIHRoZSBmaWxlbmFtZXMgdGhhdCB3ZXJlIGRlbGV0ZWQgZHVyaW5nIHRoaXMgY29tbWl0LgorCQlkZWxldGUgJGZpbGVzeyRffSBmb3JlYWNoIChAZGVsZXRlZF9ncGF0aCk7CisKKwkJIyBSZXBvcnQgdGhlIGRpcmVjdG9yeSBpZiB0aGVyZSBhcmUgbm8gZmlsZW5hbWVzIGxlZnQuCisJCXB1c2ggQGVtcHR5X2RpcnMsICRkaXIgdW5sZXNzIChzY2FsYXIgJWZpbGVzKTsKKwl9CisJQGVtcHR5X2RpcnM7Cit9CisKK3N1YiBhZGRfcGxhY2Vob2xkZXJfZmlsZSB7CisJbXkgKCRzZWxmLCAkZGlyKSA9IEBfOworCW15ICRwYXRoID0gIiRkaXIvJF9wbGFjZWhvbGRlcl9maWxlbmFtZSI7CisJbXkgJGdwYXRoID0gJHNlbGYtPmdpdF9wYXRoKCRwYXRoKTsKKworCW15ICRmaCA9ICQ6Ol9yZXBvc2l0b3J5LT50ZW1wX2FjcXVpcmUoJGdwYXRoKTsKKwlteSAkaGFzaCA9ICQ6Ol9yZXBvc2l0b3J5LT5oYXNoX2FuZF9pbnNlcnRfb2JqZWN0KEdpdDo6dGVtcF9wYXRoKCRmaCkpOworCUdpdDo6dGVtcF9yZWxlYXNlKCRmaCwgMSk7CisJJHNlbGYtPntnaWl9LT51cGRhdGUoJzEwMDY0NCcsICRoYXNoLCAkZ3BhdGgpIG9yIGNyb2FrICQhOworCisJIyBUaGUgZGlyZWN0b3J5IHNob3VsZCBubyBsb25nZXIgYmUgY29uc2lkZXJlZCBlbXB0eS4KKwlkZWxldGUgJHNlbGYtPntlbXB0eX0tPnskZGlyfSBpZiBleGlzdHMgJHNlbGYtPntlbXB0eX0tPnskZGlyfTsKKworCSMgS2VlcCB0cmFjayBvZiBhbnkgcGxhY2Vob2xkZXIgZmlsZXMgd2UgY3JlYXRlLgorCSRhZGRlZF9wbGFjZWhvbGRlcnskZGlyfSA9ICRwYXRoOworfQorCitzdWIgc3Rhc2hfcGxhY2Vob2xkZXJfbGlzdCB7CisJbXkgKCRzZWxmKSA9IEBfOworCW15ICRrID0gInN2bi1yZW1vdGUuJHJlcG9faWQuYWRkZWQtcGxhY2Vob2xkZXIiOworCW15ICR2ID0gZXZhbCB7IGNvbW1hbmRfb25lbGluZSgnY29uZmlnJywgJy0tZ2V0LWFsbCcsICRrKSB9OworCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICctLXVuc2V0LWFsbCcsICRrKSBpZiAkdjsKKwlmb3JlYWNoICh2YWx1ZXMgJWFkZGVkX3BsYWNlaG9sZGVyKSB7CisJCWNvbW1hbmRfbm9pc3koJ2NvbmZpZycsICctLWFkZCcsICRrLCAkXyk7CisJfQorfQorCisxOworX19FTkRfXworCis9aGVhZDEgTkFNRQorCitHaXQ6OlNWTjo6RmV0Y2hlciAtIHRyZWUgZGVsdGEgY29uc3VtZXIgZm9yICJnaXQgc3ZuIGZldGNoIgorCis9aGVhZDEgU1lOT1BTSVMKKworICAgIHVzZSBTVk46OkNvcmU7CisgICAgdXNlIFNWTjo6UmE7CisgICAgdXNlIEdpdDo6U1ZOOworICAgIHVzZSBHaXQ6OlNWTjo6RmV0Y2hlcjsKKyAgICB1c2UgR2l0OworCisgICAgbXkgJGdzID0gR2l0OjpTVk4tPmZpbmRfYnlfdXJsKCR1cmwpOworICAgIG15ICRyYSA9IFNWTjo6UmEtPm5ldyh1cmwgPT4gJHVybCk7CisgICAgbXkgJGVkaXRvciA9IEdpdDo6U1ZOOjpGZXRjaGVyLT5uZXcoJGdzKTsKKyAgICBteSAkcmVwb3J0ZXIgPSAkcmEtPmRvX3VwZGF0ZSgkU1ZOOjpDb3JlOjpJTlZBTElEX1JFVk5VTSwgJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJGVkaXRvcik7CisgICAgJHJlcG9ydGVyLT5zZXRfcGF0aCgnJywgJG9sZF9yZXYsIDApOworICAgICRyZXBvcnRlci0+ZmluaXNoX3JlcG9ydDsKKyAgICBteSAkdHJlZSA9ICRncy0+dG1wX2luZGV4X2RvKHN1YiB7IGNvbW1hbmRfb25lbGluZSgnd3JpdGUtdHJlZScpIH0pOworCisgICAgZm9yZWFjaCBteSAkcGF0aCAoa2V5cyAleyRlZGl0b3ItPntkaXJfcHJvcH0pIHsKKyAgICAgICAgbXkgJHByb3BzID0gJGVkaXRvci0+e2Rpcl9wcm9wfXskcGF0aH07CisgICAgICAgIGZvcmVhY2ggbXkgJHByb3AgKGtleXMgJSRwcm9wcykgeworICAgICAgICAgICAgcHJpbnQgInByb3BlcnR5ICRwcm9wIGF0ICRwYXRoIGNoYW5nZWQgdG8gJHByb3BzLT57JHByb3B9XG4iOworICAgICAgICB9CisgICAgfQorICAgIGZvcmVhY2ggbXkgJHBhdGggKGtleXMgJXskZWRpdG9yLT57ZW1wdHl9KSB7CisgICAgICAgIG15ICRhY3Rpb24gPSAkZWRpdG9yLT57ZW1wdHl9eyRwYXRofSA/ICdhZGRlZCcgOiAncmVtb3ZlZCc7CisgICAgICAgIHByaW50ICJlbXB0eSBkaXJlY3RvcnkgJHBhdGggJGFjdGlvblxuIjsKKyAgICB9CisgICAgZm9yZWFjaCBteSAkcGF0aCAoa2V5cyAleyRlZGl0b3ItPntmaWxlX3Byb3B9KSB7IC4uLiB9CisgICAgZm9yZWFjaCBteSAkcGFyZW50IChrZXlzICV7JGVkaXRvci0+e2Fic2VudF9kaXJ9fSkgeworICAgICAgICBteSBAY2hpbGRyZW4gPSBAeyRlZGl0b3ItPnthYnN0ZW50X2Rpcn17JHBhcmVudH19OworICAgICAgICBwcmludCAiY2Fubm90IGZldGNoIGRpcmVjdG9yeSAkcGFyZW50LyRfOiBub3QgYXV0aG9yaXplZD9cbiIKKyAgICAgICAgICAgIGZvcmVhY2ggQGNoaWxkcmVuOworICAgIH0KKyAgICBmb3JlYWNoIG15ICRwYXJlbnQgKGtleXMgJXskZWRpdG9yLT57YWJzZW50X2ZpbGV9KSB7IC4uLiB9CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIGlzIGEgc3ViY2xhc3Mgb2YgQzxTVk46OkRlbHRhOjpFZGl0b3I+LCB3aGljaCBtZWFucyBpdCBpbXBsZW1lbnRzCitjYWxsYmFja3MgdG8gYWN0IGFzIGEgY29uc3VtZXIgb2YgU3VidmVyc2lvbiB0cmVlIGRlbHRhcy4gIFRoaXMKK3BhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgY2FsbGJhY2tzIGlzIG1lYW50IHRvIHN0b3JlCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVzdWx0aW5nIGNvbnRlbnQgd2hpY2ggQjxnaXQgc3ZuIGZldGNoPiBjb3VsZAordXNlIHRvIHBvcHVsYXRlIG5ldyBjb21taXRzIGFuZCBuZXcgZW50cmllcyBmb3IgRjx1bmhhbmRsZWQubG9nPi4KK01vcmUgc3BlY2lmaWNhbGx5OgorCis9b3ZlcgorCis9aXRlbSAqIEFkZGl0aW9ucywgcmVtb3ZhbHMsIGFuZCBtb2RpZmljYXRpb25zIG9mIGZpbGVzIGFyZSBwcm9wYWdhdGVkCit0byBnaXQtc3ZuJ3MgaW5kZXggZmlsZSBGPCRHSVRfRElSL3N2bi8kcmVmbmFtZS9pbmRleD4gdXNpbmcKK0I8Z2l0IHVwZGF0ZS1pbmRleD4uCisKKz1pdGVtICogQ2hhbmdlcyBpbiBTdWJ2ZXJzaW9uIHBhdGggcHJvcGVydGllcyBhcmUgcmVjb3JkZWQgaW4gdGhlCitDPGRpcl9wcm9wPiBhbmQgQzxmaWxlX3Byb3A+IGZpZWxkcyAod2hpY2ggYXJlIGhhc2hlcykuCisKKz1pdGVtICogQWRkaXRpb24gYW5kIHJlbW92YWwgb2YgZW1wdHkgZGlyZWN0b3JpZXMgYXJlIGluZGljYXRlZCBieQorZW50cmllcyB3aXRoIHZhbHVlIDEgYW5kIDAgcmVzcGVjdGl2ZWx5IGluIHRoZSBDPGVtcHR5PiBoYXNoLgorCis9aXRlbSAqIFBhdGhzIHRoYXQgYXJlIHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb252ZXllZCAocHJlc3VtYWJseSBkdWUKK3RvIHBlcm1pc3Npb25zKSBhcmUgcmVjb3JkZWQgaW4gdGhlIEM8YWJzZW50X2ZpbGU+IGFuZAorQzxhYnNlbnRfZGlycz4gaGFzaGVzLiAgRm9yIGVhY2gga2V5LCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpcworYSBsaXN0IG9mIHBhdGhzIHVuZGVyIHRoYXQgZGlyZWN0b3J5IHRoYXQgd2VyZSBwcmVzZW50IGJ1dAorY291bGQgbm90IGJlIGNvbnZleWVkLgorCis9YmFjaworCitUaGUgaW50ZXJmYWNlIGlzIHVuc3RhYmxlLiAgRG8gbm90IHVzZSB0aGlzIG1vZHVsZSB1bmxlc3MgeW91IGFyZQorZGV2ZWxvcGluZyBnaXQtc3ZuLgorCis9aGVhZDEgREVQRU5ERU5DSUVTCisKK0w8U1ZOOjpEZWx0YT4gZnJvbSB0aGUgU3VidmVyc2lvbiBwZXJsIGJpbmRpbmdzLAordGhlIGNvcmUgTDxDYXJwPiBhbmQgTDxGaWxlOjpCYXNlbmFtZT4gbW9kdWxlcywKK2FuZCBnaXQncyBMPEdpdD4gaGVscGVyIG1vZHVsZS4KKworQzxHaXQ6OlNWTjo6RmV0Y2hlcj4gaGFzIG5vdCBiZWVuIHRlc3RlZCB1c2luZyBjYWxsZXJzIG90aGVyIHRoYW4KK0I8Z2l0LXN2bj4gaXRzZWxmLgorCis9aGVhZDEgU0VFIEFMU08KKworTDxTVk46OkRlbHRhPiwKK0w8R2l0OjpTVk46OkVkaXRvcj4uCisKKz1oZWFkMSBJTkNPTVBBVElCSUxJVElFUworCitOb25lIHJlcG9ydGVkLgorCis9aGVhZDEgQlVHUworCitOb25lLgpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOL0dsb2JTcGVjLnBtIGIvcGVybC9HaXQvU1ZOL0dsb2JTcGVjLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NWY1ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vR2xvYlNwZWMucG0KQEAgLTAsMCArMSw2MSBAQAorcGFja2FnZSBHaXQ6OlNWTjo6R2xvYlNwZWM7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCitzdWIgbmV3IHsKKwlteSAoJGNsYXNzLCAkZ2xvYiwgJHBhdHRlcm5fb2spID0gQF87CisJbXkgJHJlID0gJGdsb2I7CisJJHJlID1+IHMhLyskISFnOyAjIG5vIG5lZWQgZm9yIHRyYWlsaW5nIHNsYXNoZXMKKwlteSAoQGxlZnQsIEByaWdodCwgQHBhdHRlcm5zKTsKKwlteSAkc3RhdGUgPSAibGVmdCI7CisJbXkgJGRpZV9tc2cgPSAiT25seSBvbmUgc2V0IG9mIHdpbGRjYXJkIGRpcmVjdG9yaWVzICIgLgorCQkJCSIoZS5nLiAnKicgb3IgJyovKi8qJykgaXMgc3VwcG9ydGVkOiAnJGdsb2InXG4iOworCWZvciBteSAkcGFydCAoc3BsaXQobXwvfCwgJGdsb2IpKSB7CisJCWlmICgkcGFydCA9fiAvXCovICYmICRwYXJ0IG5lICIqIikgeworCQkJZGllICJJbnZhbGlkIHBhdHRlcm4gaW4gJyRnbG9iJzogJHBhcnRcbiI7CisJCX0gZWxzaWYgKCRwYXR0ZXJuX29rICYmICRwYXJ0ID1+IC9be31dLyAmJgorCQkJICRwYXJ0ICF+IC9eXHtbXnt9XStcfS8pIHsKKwkJCWRpZSAiSW52YWxpZCBwYXR0ZXJuIGluICckZ2xvYic6ICRwYXJ0XG4iOworCQl9CisJCWlmICgkcGFydCBlcSAiKiIpIHsKKwkJCWRpZSAkZGllX21zZyBpZiAkc3RhdGUgZXEgInJpZ2h0IjsKKwkJCSRzdGF0ZSA9ICJwYXR0ZXJuIjsKKwkJCXB1c2goQHBhdHRlcm5zLCAiW14vXSoiKTsKKwkJfSBlbHNpZiAoJHBhdHRlcm5fb2sgJiYgJHBhcnQgPX4gL15ceyguKilcfSQvKSB7CisJCQlkaWUgJGRpZV9tc2cgaWYgJHN0YXRlIGVxICJyaWdodCI7CisJCQkkc3RhdGUgPSAicGF0dGVybiI7CisJCQlteSAkcCA9IHF1b3RlbWV0YSgkMSk7CisJCQkkcCA9fiBzL1xcLC98L2c7CisJCQlwdXNoKEBwYXR0ZXJucywgIig/OiRwKSIpOworCQl9IGVsc2UgeworCQkJaWYgKCRzdGF0ZSBlcSAibGVmdCIpIHsKKwkJCQlwdXNoKEBsZWZ0LCAkcGFydCk7CisJCQl9IGVsc2UgeworCQkJCXB1c2goQHJpZ2h0LCAkcGFydCk7CisJCQkJJHN0YXRlID0gInJpZ2h0IjsKKwkJCX0KKwkJfQorCX0KKwlteSAkZGVwdGggPSBAcGF0dGVybnM7CisJaWYgKCRkZXB0aCA9PSAwKSB7CisJCWRpZSAiT25lICcqJyBpcyBuZWVkZWQgaW4gZ2xvYjogJyRnbG9iJ1xuIjsKKwl9CisJbXkgJGxlZnQgPSBqb2luKCcvJywgQGxlZnQpOworCW15ICRyaWdodCA9IGpvaW4oJy8nLCBAcmlnaHQpOworCSRyZSA9IGpvaW4oJy8nLCBAcGF0dGVybnMpOworCSRyZSA9IGpvaW4oJ1wvJywKKwkJICAgZ3JlcChsZW5ndGgsIHF1b3RlbWV0YSgkbGVmdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoJHJlKSg/PS98XCQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdGVtZXRhKCRyaWdodCkpKTsKKwlteSAkbGVmdF9yZSA9IHFyL15cL1xRJGxlZnRcRShcL3wkKS87CisJYmxlc3MgeyBsZWZ0ID0+ICRsZWZ0LCByaWdodCA9PiAkcmlnaHQsIGxlZnRfcmVnZXggPT4gJGxlZnRfcmUsCisJICAgICAgICByZWdleCA9PiBxci8kcmUvLCBnbG9iID0+ICRnbG9iLCBkZXB0aCA9PiAkZGVwdGggfSwgJGNsYXNzOworfQorCitzdWIgZnVsbF9wYXRoIHsKKwlteSAoJHNlbGYsICRwYXRoKSA9IEBfOworCXJldHVybiAobGVuZ3RoICRzZWxmLT57bGVmdH0gPyAiJHNlbGYtPntsZWZ0fS8iIDogJycpIC4KKwkgICAgICAgJHBhdGggLiAobGVuZ3RoICRzZWxmLT57cmlnaHR9ID8gIi8kc2VsZi0+e3JpZ2h0fSIgOiAnJyk7Cit9CisKKzE7CmRpZmYgLS1naXQgYS9wZXJsL0dpdC9TVk4vTG9nLnBtIGIvcGVybC9HaXQvU1ZOL0xvZy5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjQxMDUzCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9HaXQvU1ZOL0xvZy5wbQpAQCAtMCwwICsxLDQwMCBAQAorcGFja2FnZSBHaXQ6OlNWTjo6TG9nOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHaXQ6OlNWTjo6VXRpbHMgcXcoZmF0YWwpOwordXNlIEdpdCBxdyhjb21tYW5kCisgICAgICAgICAgIGNvbW1hbmRfb25lbGluZQorICAgICAgICAgICBjb21tYW5kX291dHB1dF9waXBlCisgICAgICAgICAgIGNvbW1hbmRfY2xvc2VfcGlwZQorICAgICAgICAgICBnZXRfdHpfb2Zmc2V0KTsKK3VzZSBQT1NJWCBxdy9zdHJmdGltZS87Cit1c2UgY29uc3RhbnQgY29tbWl0X2xvZ19zZXBhcmF0b3IgPT4gKCctJyB4IDcyKSAuICJcbiI7Cit1c2UgdmFycyBxdy8kVFogJGxpbWl0ICRjb2xvciAkcGFnZXIgJG5vbl9yZWN1cnNpdmUgJHZlcmJvc2UgJG9uZWxpbmUKKyAgICAgICAgICAgICVydXNlcnMgJHNob3dfY29tbWl0ICRpbmNyZW1lbnRhbC87CisKKyMgT3B0aW9uIHNldCBpbiBnaXQtc3ZuCitvdXIgJF9naXRfZm9ybWF0OworCitzdWIgY210X3Nob3dhYmxlIHsKKwlteSAoJGMpID0gQF87CisJcmV0dXJuIDEgaWYgZGVmaW5lZCAkYy0+e3J9OworCisJIyBiaWcgY29tbWl0IG1lc3NhZ2UgZ290IHRydW5jYXRlZCBieSB0aGUgMTZrIHByZXR0eSBidWZmZXIgaW4gcmV2LWxpc3QKKwlpZiAoJGMtPntsfSAmJiAkYy0+e2x9LT5bLTFdIGVxICIuLi5cbiIgJiYKKwkJCQkkYy0+e2FfcmF3fSA9fiAvXEAoW2EtZlxkXC1dKyk+JC8pIHsKKwkJQHskYy0+e2x9fSA9ICgpOworCQlteSBAbG9nID0gY29tbWFuZChxdy9jYXQtZmlsZSBjb21taXQvLCAkYy0+e2N9KTsKKworCQkjIHNoaWZ0IG9mZiB0aGUgaGVhZGVycworCQlzaGlmdCBAbG9nIHdoaWxlICgkbG9nWzBdIG5lICcnKTsKKwkJc2hpZnQgQGxvZzsKKworCQkjIFRPRE86IG1ha2UgJGMtPntsfSBub3QgaGF2ZSBhIHRyYWlsaW5nIG5ld2xpbmUgaW4gdGhlIGZ1dHVyZQorCQlAeyRjLT57bH19ID0gbWFwIHsgIiRfXG4iIH0gZ3JlcCAhL15naXQtc3ZuLWlkOiAvLCBAbG9nOworCisJCSh1bmRlZiwgJGMtPntyfSwgdW5kZWYpID0gOjpleHRyYWN0X21ldGFkYXRhKAorCQkJCShncmVwKC9eZ2l0LXN2bi1pZDogLywgQGxvZykpWy0xXSk7CisJfQorCXJldHVybiBkZWZpbmVkICRjLT57cn07Cit9CisKK3N1YiBsb2dfdXNlX2NvbG9yIHsKKwlyZXR1cm4gJGNvbG9yIHx8IEdpdC0+cmVwb3NpdG9yeS0+Z2V0X2NvbG9yYm9vbCgnY29sb3IuZGlmZicpOworfQorCitzdWIgZ2l0X3N2bl9sb2dfY21kIHsKKwlteSAoJHJfbWluLCAkcl9tYXgsIEBhcmdzKSA9IEBfOworCW15ICRoZWFkID0gJ0hFQUQnOworCW15IChAZmlsZXMsIEBsb2dfb3B0cyk7CisJZm9yZWFjaCBteSAkeCAoQGFyZ3MpIHsKKwkJaWYgKCR4IGVxICctLScgfHwgQGZpbGVzKSB7CisJCQlwdXNoIEBmaWxlcywgJHg7CisJCX0gZWxzZSB7CisJCQlpZiAoOjp2ZXJpZnlfcmVmKCIkeF4wIikpIHsKKwkJCQkkaGVhZCA9ICR4OworCQkJfSBlbHNlIHsKKwkJCQlwdXNoIEBsb2dfb3B0cywgJHg7CisJCQl9CisJCX0KKwl9CisKKwlteSAoJHVybCwgJHJldiwgJHV1aWQsICRncykgPSA6OndvcmtpbmdfaGVhZF9pbmZvKCRoZWFkKTsKKworCXJlcXVpcmUgR2l0OjpTVk47CisJJGdzIHx8PSBHaXQ6OlNWTi0+X25ldzsKKwlteSBAY21kID0gKHF3L2xvZyAtLWFiYnJldi1jb21taXQgLS1wcmV0dHk9cmF3IC0tZGVmYXVsdC8sCisJICAgICAgICAgICAkZ3MtPnJlZm5hbWUpOworCXB1c2ggQGNtZCwgJy1yJyB1bmxlc3MgJG5vbl9yZWN1cnNpdmU7CisJcHVzaCBAY21kLCBxdy8tLXJhdyAtLW5hbWUtc3RhdHVzLyBpZiAkdmVyYm9zZTsKKwlwdXNoIEBjbWQsICctLWNvbG9yJyBpZiBsb2dfdXNlX2NvbG9yKCk7CisJcHVzaCBAY21kLCBAbG9nX29wdHM7CisJaWYgKGRlZmluZWQgJHJfbWF4ICYmICRyX21heCA9PSAkcl9taW4pIHsKKwkJcHVzaCBAY21kLCAnLS1tYXgtY291bnQ9MSc7CisJCWlmIChteSAkYyA9ICRncy0+cmV2X21hcF9nZXQoJHJfbWF4KSkgeworCQkJcHVzaCBAY21kLCAkYzsKKwkJfQorCX0gZWxzaWYgKGRlZmluZWQgJHJfbWF4KSB7CisJCWlmICgkcl9tYXggPCAkcl9taW4pIHsKKwkJCSgkcl9taW4sICRyX21heCkgPSAoJHJfbWF4LCAkcl9taW4pOworCQl9CisJCW15ICh1bmRlZiwgJGNfbWF4KSA9ICRncy0+ZmluZF9yZXZfYmVmb3JlKCRyX21heCwgMSwgJHJfbWluKTsKKwkJbXkgKHVuZGVmLCAkY19taW4pID0gJGdzLT5maW5kX3Jldl9hZnRlcigkcl9taW4sIDEsICRyX21heCk7CisJCSMgSWYgdGhlcmUgYXJlIG5vIGNvbW1pdHMgaW4gdGhlIHJhbmdlLCBib3RoICRjX21heCBhbmQgJGNfbWluCisJCSMgd2lsbCBiZSB1bmRlZmluZWQuICBJZiB0aGVyZSBpcyBhdCBsZWFzdCAxIGNvbW1pdCBpbiB0aGUKKwkJIyByYW5nZSwgYm90aCB3aWxsIGJlIGRlZmluZWQuCisJCXJldHVybiAoKSBpZiAhZGVmaW5lZCAkY19taW4gfHwgIWRlZmluZWQgJGNfbWF4OworCQlpZiAoJGNfbWluIGVxICRjX21heCkgeworCQkJcHVzaCBAY21kLCAnLS1tYXgtY291bnQ9MScsICRjX21pbjsKKwkJfSBlbHNlIHsKKwkJCXB1c2ggQGNtZCwgJy0tYm91bmRhcnknLCAiJGNfbWluLi4kY19tYXgiOworCQl9CisJfQorCXJldHVybiAoQGNtZCwgQGZpbGVzKTsKK30KKworIyBhZGFwdGVkIGZyb20gcGFnZXIuYworc3ViIGNvbmZpZ19wYWdlciB7CisJaWYgKCEgLXQgKlNURE9VVCkgeworCQkkRU5We0dJVF9QQUdFUl9JTl9VU0V9ID0gJ2ZhbHNlJzsKKwkJJHBhZ2VyID0gdW5kZWY7CisJCXJldHVybjsKKwl9CisJY2hvbXAoJHBhZ2VyID0gY29tbWFuZF9vbmVsaW5lKHF3KHZhciBHSVRfUEFHRVIpKSk7CisJaWYgKCRwYWdlciBlcSAnY2F0JykgeworCQkkcGFnZXIgPSB1bmRlZjsKKwl9CisJJEVOVntHSVRfUEFHRVJfSU5fVVNFfSA9IGRlZmluZWQoJHBhZ2VyKTsKK30KKworc3ViIHJ1bl9wYWdlciB7CisJcmV0dXJuIHVubGVzcyBkZWZpbmVkICRwYWdlcjsKKwlwaXBlIG15ICgkcmZkLCAkd2ZkKSBvciByZXR1cm47CisJZGVmaW5lZChteSAkcGlkID0gZm9yaykgb3IgZmF0YWwgIkNhbid0IGZvcms6ICQhIjsKKwlpZiAoISRwaWQpIHsKKwkJb3BlbiBTVERPVVQsICc+JicsICR3ZmQgb3IKKwkJICAgICAgICAgICAgICAgICAgICAgZmF0YWwgIkNhbid0IHJlZGlyZWN0IHRvIHN0ZG91dDogJCEiOworCQlyZXR1cm47CisJfQorCW9wZW4gU1RESU4sICc8JicsICRyZmQgb3IgZmF0YWwgIkNhbid0IHJlZGlyZWN0IHN0ZGluOiAkISI7CisJJEVOVntMRVNTfSB8fD0gJ0ZSWCc7CisJJEVOVntMVn0gfHw9ICctYyc7CisJZXhlYyAkcGFnZXIgb3IgZmF0YWwgIkNhbid0IHJ1biBwYWdlcjogJCEgKCRwYWdlcikiOworfQorCitzdWIgZm9ybWF0X3N2bl9kYXRlIHsKKwlteSAkdCA9IHNoaWZ0IHx8IHRpbWU7CisJcmVxdWlyZSBHaXQ6OlNWTjsKKwlteSAkZ21vZmYgPSBnZXRfdHpfb2Zmc2V0KCR0KTsKKwlyZXR1cm4gc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTICRnbW9mZiAoJWEsICVkICViICVZKSIsIGxvY2FsdGltZSgkdCkpOworfQorCitzdWIgcGFyc2VfZ2l0X2RhdGUgeworCW15ICgkdCwgJHR6KSA9IEBfOworCSMgRGF0ZTo6UGFyc2UgaXNuJ3QgaW4gdGhlIHN0YW5kYXJkIFBlcmwgZGlzdHJvIDooCisJaWYgKCR0eiA9fiBzL15cKy8vKSB7CisJCSR0ICs9IHR6X3RvX3Nfb2Zmc2V0KCR0eik7CisJfSBlbHNpZiAoJHR6ID1+IHMvXlwtLy8pIHsKKwkJJHQgLT0gdHpfdG9fc19vZmZzZXQoJHR6KTsKKwl9CisJcmV0dXJuICR0OworfQorCitzdWIgc2V0X2xvY2FsX3RpbWV6b25lIHsKKwlpZiAoZGVmaW5lZCAkVFopIHsKKwkJJEVOVntUWn0gPSAkVFo7CisJfSBlbHNlIHsKKwkJZGVsZXRlICRFTlZ7VFp9OworCX0KK30KKworc3ViIHR6X3RvX3Nfb2Zmc2V0IHsKKwlteSAoJHR6KSA9IEBfOworCSR0eiA9fiBzLyhcZFxkKSQvLzsKKwlyZXR1cm4gKCQxICogNjApICsgKCR0eiAqIDM2MDApOworfQorCitzdWIgZ2V0X2F1dGhvcl9pbmZvIHsKKwlteSAoJGRlc3QsICRhdXRob3IsICR0LCAkdHopID0gQF87CisJJGF1dGhvciA9fiBzLyg/Ol5ccyp8XHMqJCkvL2c7CisJJGRlc3QtPnthX3Jhd30gPSAkYXV0aG9yOworCW15ICRhdTsKKwlpZiAoJDo6X2F1dGhvcnMpIHsKKwkJJGF1ID0gJHJ1c2Vyc3skYXV0aG9yfSB8fCB1bmRlZjsKKwl9CisJaWYgKCEkYXUpIHsKKwkJKCRhdSkgPSAoJGF1dGhvciA9fiAvPChbXj5dKylcQFtePl0rPiQvKTsKKwl9CisJJGRlc3QtPnt0fSA9ICR0OworCSRkZXN0LT57dHp9ID0gJHR6OworCSRkZXN0LT57YX0gPSAkYXU7CisJJGRlc3QtPnt0X3V0Y30gPSBwYXJzZV9naXRfZGF0ZSgkdCwgJHR6KTsKK30KKworc3ViIHByb2Nlc3NfY29tbWl0IHsKKwlteSAoJGMsICRyX21pbiwgJHJfbWF4LCAkZGVmZXIpID0gQF87CisJaWYgKGRlZmluZWQgJHJfbWluICYmIGRlZmluZWQgJHJfbWF4KSB7CisJCWlmICgkcl9taW4gPT0gJGMtPntyfSAmJiAkcl9taW4gPT0gJHJfbWF4KSB7CisJCQlzaG93X2NvbW1pdCgkYyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gMSBpZiAkcl9taW4gPT0gJHJfbWF4OworCQlpZiAoJHJfbWluIDwgJHJfbWF4KSB7CisJCQkjIHdlIG5lZWQgdG8gcmV2ZXJzZSB0aGUgcHJpbnQgb3JkZXIKKwkJCXJldHVybiAwIGlmIChkZWZpbmVkICRsaW1pdCAmJiAtLSRsaW1pdCA8IDApOworCQkJcHVzaCBAJGRlZmVyLCAkYzsKKwkJCXJldHVybiAxOworCQl9CisJCWlmICgkcl9taW4gIT0gJHJfbWF4KSB7CisJCQlyZXR1cm4gMSBpZiAoJHJfbWluIDwgJGMtPntyfSk7CisJCQlyZXR1cm4gMSBpZiAoJHJfbWF4ID4gJGMtPntyfSk7CisJCX0KKwl9CisJcmV0dXJuIDAgaWYgKGRlZmluZWQgJGxpbWl0ICYmIC0tJGxpbWl0IDwgMCk7CisJc2hvd19jb21taXQoJGMpOworCXJldHVybiAxOworfQorCitteSAkbF9mbXQ7CitzdWIgc2hvd19jb21taXQgeworCW15ICRjID0gc2hpZnQ7CisJaWYgKCRvbmVsaW5lKSB7CisJCW15ICR4ID0gIlxuIjsKKwkJaWYgKG15ICRsID0gJGMtPntsfSkgeworCQkJd2hpbGUgKCRsLT5bMF0gPX4gL15ccyokLykgeyBzaGlmdCBAJGwgfQorCQkJJHggPSAkbC0+WzBdOworCQl9CisJCSRsX2ZtdCB8fD0gJ0EnIC4gbGVuZ3RoKCRjLT57cn0pOworCQlwcmludCAncicscGFjaygkbF9mbXQsICRjLT57cn0pLCcgfCAnOworCQlwcmludCAiJGMtPntjfSB8ICIgaWYgJHNob3dfY29tbWl0OworCQlwcmludCAkeDsKKwl9IGVsc2UgeworCQlzaG93X2NvbW1pdF9ub3JtYWwoJGMpOworCX0KK30KKworc3ViIHNob3dfY29tbWl0X2NoYW5nZWRfcGF0aHMgeworCW15ICgkYykgPSBAXzsKKwlyZXR1cm4gdW5sZXNzICRjLT57Y2hhbmdlZH07CisJcHJpbnQgIkNoYW5nZWQgcGF0aHM6XG4iLCBAeyRjLT57Y2hhbmdlZH19OworfQorCitzdWIgc2hvd19jb21taXRfbm9ybWFsIHsKKwlteSAoJGMpID0gQF87CisJcHJpbnQgY29tbWl0X2xvZ19zZXBhcmF0b3IsICJyJGMtPntyfSB8ICI7CisJcHJpbnQgIiRjLT57Y30gfCAiIGlmICRzaG93X2NvbW1pdDsKKwlwcmludCAiJGMtPnthfSB8ICIsIGZvcm1hdF9zdm5fZGF0ZSgkYy0+e3RfdXRjfSksICcgfCAnOworCW15ICRucl9saW5lID0gMDsKKworCWlmIChteSAkbCA9ICRjLT57bH0pIHsKKwkJd2hpbGUgKCRsLT5bJCMkbF0gZXEgIlxuIiAmJiAkIyRsID4gMAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICYmICRsLT5bKCQjJGwgLSAxKV0gZXEgIlxuIikgeworCQkJcG9wIEAkbDsKKwkJfQorCQkkbnJfbGluZSA9IHNjYWxhciBAJGw7CisJCWlmICghJG5yX2xpbmUpIHsKKwkJCXByaW50ICIxIGxpbmVcblxuXG4iOworCQl9IGVsc2UgeworCQkJaWYgKCRucl9saW5lID09IDEpIHsKKwkJCQkkbnJfbGluZSA9ICcxIGxpbmUnOworCQkJfSBlbHNlIHsKKwkJCQkkbnJfbGluZSAuPSAnIGxpbmVzJzsKKwkJCX0KKwkJCXByaW50ICRucl9saW5lLCAiXG4iOworCQkJc2hvd19jb21taXRfY2hhbmdlZF9wYXRocygkYyk7CisJCQlwcmludCAiXG4iOworCQkJcHJpbnQgJF8gZm9yZWFjaCBAJGw7CisJCX0KKwl9IGVsc2UgeworCQlwcmludCAiMSBsaW5lXG4iOworCQlzaG93X2NvbW1pdF9jaGFuZ2VkX3BhdGhzKCRjKTsKKwkJcHJpbnQgIlxuIjsKKworCX0KKwlmb3JlYWNoIG15ICR4IChxdy9yYXcgc3RhdCBkaWZmLykgeworCQlpZiAoJGMtPnskeH0pIHsKKwkJCXByaW50ICJcbiI7CisJCQlwcmludCAkXyBmb3JlYWNoIEB7JGMtPnskeH19CisJCX0KKwl9Cit9CisKK3N1YiBjbWRfc2hvd19sb2cgeworCW15IChAYXJncykgPSBAXzsKKwlteSAoJHJfbWluLCAkcl9tYXgpOworCW15ICRyX2xhc3QgPSAtMTsgIyBwcmV2ZW50IGR1cGVzCisJc2V0X2xvY2FsX3RpbWV6b25lKCk7CisJaWYgKGRlZmluZWQgJDo6X3JldmlzaW9uKSB7CisJCWlmICgkOjpfcmV2aXNpb24gPX4gL14oXGQrKTooXGQrKSQvKSB7CisJCQkoJHJfbWluLCAkcl9tYXgpID0gKCQxLCAkMik7CisJCX0gZWxzaWYgKCQ6Ol9yZXZpc2lvbiA9fiAvXlxkKyQvKSB7CisJCQkkcl9taW4gPSAkcl9tYXggPSAkOjpfcmV2aXNpb247CisJCX0gZWxzZSB7CisJCQlmYXRhbCAiLXIkOjpfcmV2aXNpb24gaXMgbm90IHN1cHBvcnRlZCwgdXNlICIsCisJCQkJInN0YW5kYXJkICdnaXQgbG9nJyBhcmd1bWVudHMgaW5zdGVhZCI7CisJCX0KKwl9CisKKwljb25maWdfcGFnZXIoKTsKKwlAYXJncyA9IGdpdF9zdm5fbG9nX2NtZCgkcl9taW4sICRyX21heCwgQGFyZ3MpOworCWlmICghQGFyZ3MpIHsKKwkJcHJpbnQgY29tbWl0X2xvZ19zZXBhcmF0b3IgdW5sZXNzICRpbmNyZW1lbnRhbCB8fCAkb25lbGluZTsKKwkJcmV0dXJuOworCX0KKwlteSAkbG9nID0gY29tbWFuZF9vdXRwdXRfcGlwZShAYXJncyk7CisJcnVuX3BhZ2VyKCk7CisJbXkgKEBrLCAkYywgJGQsICRzdGF0KTsKKwlteSAkZXNjX2NvbG9yID0gcXIvKD86XDAzM1xbKD86KD86XGQrOykqXGQqKT9tKSovOworCXdoaWxlICg8JGxvZz4pIHsKKwkJaWYgKC9eJHtlc2NfY29sb3J9Y29tbWl0ICg/Oi0gKT8oJDo6c2hhMV9zaG9ydCkvbykgeworCQkJbXkgJGNtdCA9ICQxOworCQkJaWYgKCRjICYmIGNtdF9zaG93YWJsZSgkYykgJiYgJGMtPntyfSAhPSAkcl9sYXN0KSB7CisJCQkJJHJfbGFzdCA9ICRjLT57cn07CisJCQkJcHJvY2Vzc19jb21taXQoJGMsICRyX21pbiwgJHJfbWF4LCBcQGspIG9yCisJCQkJCQkJCWdvdG8gb3V0OworCQkJfQorCQkJJGQgPSB1bmRlZjsKKwkJCSRjID0geyBjID0+ICRjbXQgfTsKKwkJfSBlbHNpZiAoL14ke2VzY19jb2xvcn1hdXRob3IgKC4rKSAoXGQrKSAoW1wtXCtdP1xkKykkL28pIHsKKwkJCWdldF9hdXRob3JfaW5mbygkYywgJDEsICQyLCAkMyk7CisJCX0gZWxzaWYgKC9eJHtlc2NfY29sb3J9KD86dHJlZXxwYXJlbnR8Y29tbWl0dGVyKSAvbykgeworCQkJIyBpZ25vcmUKKwkJfSBlbHNpZiAoL14ke2VzY19jb2xvcn06XGR7Nn0gXGR7Nn0gJDo6c2hhMV9zaG9ydC9vKSB7CisJCQlwdXNoIEB7JGMtPntyYXd9fSwgJF87CisJCX0gZWxzaWYgKC9eJHtlc2NfY29sb3J9W0FDUk1EVF1cdC8pIHsKKwkJCSMgd2UgY291bGQgYWRkICRTVk4tPntzdm5fcGF0aH0gaGVyZSwgYnV0IHRoYXQgcmVxdWlyZXMKKwkJCSMgcmVtb3RlIGFjY2VzcyBhdCB0aGUgbW9tZW50IChyZXBvX3BhdGhfc3BsaXQpLi4uCisJCQlzI14oJHtlc2NfY29sb3J9KShbQUNSTURUXSlcdCMkMSAgICQyICNvOworCQkJcHVzaCBAeyRjLT57Y2hhbmdlZH19LCAkXzsKKwkJfSBlbHNpZiAoL14ke2VzY19jb2xvcn1kaWZmIC9vKSB7CisJCQkkZCA9IDE7CisJCQlwdXNoIEB7JGMtPntkaWZmfX0sICRfOworCQl9IGVsc2lmICgkZCkgeworCQkJcHVzaCBAeyRjLT57ZGlmZn19LCAkXzsKKwkJfSBlbHNpZiAoL15cIC4rXCBcfFxzKlxkK1wgJGVzY19jb2xvcltcK1wtXSoKKwkJICAgICAgICAgICRlc2NfY29sb3IqW1wrXC1dKiRlc2NfY29sb3IkL3gpIHsKKwkJCSRzdGF0ID0gMTsKKwkJCXB1c2ggQHskYy0+e3N0YXR9fSwgJF87CisJCX0gZWxzaWYgKCRzdGF0ICYmIC9eIFxkKyBmaWxlcyBjaGFuZ2VkLCBcZCsgaW5zZXJ0aW9ucy8pIHsKKwkJCXB1c2ggQHskYy0+e3N0YXR9fSwgJF87CisJCQkkc3RhdCA9IHVuZGVmOworCQl9IGVsc2lmICgvXiR7ZXNjX2NvbG9yfSAgICAoZ2l0LXN2bi1pZDouKykkL28pIHsKKwkJCSgkYy0+e3VybH0sICRjLT57cn0sIHVuZGVmKSA9IDo6ZXh0cmFjdF9tZXRhZGF0YSgkMSk7CisJCX0gZWxzaWYgKHMvXiR7ZXNjX2NvbG9yfSAgICAvL28pIHsKKwkJCXB1c2ggQHskYy0+e2x9fSwgJF87CisJCX0KKwl9CisJaWYgKCRjICYmIGRlZmluZWQgJGMtPntyfSAmJiAkYy0+e3J9ICE9ICRyX2xhc3QpIHsKKwkJJHJfbGFzdCA9ICRjLT57cn07CisJCXByb2Nlc3NfY29tbWl0KCRjLCAkcl9taW4sICRyX21heCwgXEBrKTsKKwl9CisJaWYgKEBrKSB7CisJCSgkcl9taW4sICRyX21heCkgPSAoJHJfbWF4LCAkcl9taW4pOworCQlwcm9jZXNzX2NvbW1pdCgkXywgJHJfbWluLCAkcl9tYXgpIGZvcmVhY2ggcmV2ZXJzZSBAazsKKwl9CitvdXQ6CisJY2xvc2UgJGxvZzsKKwlwcmludCBjb21taXRfbG9nX3NlcGFyYXRvciB1bmxlc3MgJGluY3JlbWVudGFsIHx8ICRvbmVsaW5lOworfQorCitzdWIgY21kX2JsYW1lIHsKKwlteSAkcGF0aCA9IHBvcDsKKworCWNvbmZpZ19wYWdlcigpOworCXJ1bl9wYWdlcigpOworCisJbXkgKCRmaCwgJGN0eCwgJHJldik7CisKKwlpZiAoJF9naXRfZm9ybWF0KSB7CisJCSgkZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZSgnYmxhbWUnLCBAXywgJHBhdGgpOworCQl3aGlsZSAobXkgJGxpbmUgPSA8JGZoPikgeworCQkJaWYgKCRsaW5lID1+IC9eXF4/KFtbOnhkaWdpdDpdXSspXHMvKSB7CisJCQkJIyBVbmNvbW1pdHRlZCBlZGl0cyBzaG93IHVwIGFzIGEgcmV2IElEIG9mCisJCQkJIyBhbGwgemVyb3MsIHdoaWNoIHdlIGNhbid0IGxvb2sgdXAgd2l0aAorCQkJCSMgY210X21ldGFkYXRhCisJCQkJaWYgKCQxICF+IC9eMCskLykgeworCQkJCQkodW5kZWYsICRyZXYsIHVuZGVmKSA9CisJCQkJCQk6OmNtdF9tZXRhZGF0YSgkMSk7CisJCQkJCSRyZXYgPSAnMCcgaWYgKCEkcmV2KTsKKwkJCQl9IGVsc2UgeworCQkJCQkkcmV2ID0gJzAnOworCQkJCX0KKwkJCQkkcmV2ID0gc3ByaW50ZignJS0xMHMnLCAkcmV2KTsKKwkJCQkkbGluZSA9fiBzL15cXj9bWzp4ZGlnaXQ6XV0rKFxzKS8kcmV2JDEvOworCQkJfQorCQkJcHJpbnQgJGxpbmU7CisJCX0KKwl9IGVsc2UgeworCQkoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUoJ2JsYW1lJywgJy1wJywgQF8sICdIRUFEJywKKwkJCQkJCSAgJy0tJywgJHBhdGgpOworCQlteSAoJHNoYTEpOworCQlteSAlYXV0aG9yczsKKwkJbXkgQGJ1ZmZlcjsKKwkJbXkgJWRzaGE7ICNkaXN0aW5jdCBzaGEga2V5cworCisJCXdoaWxlIChteSAkbGluZSA9IDwkZmg+KSB7CisJCQlwdXNoIEBidWZmZXIsICRsaW5lOworCQkJaWYgKCRsaW5lID1+IC9eKFtbOnhkaWdpdDpdXXs0MH0pXHNcZCtcc1xkKy8pIHsKKwkJCQkkZHNoYXskMX0gPSAxOworCQkJfQorCQl9CisKKwkJbXkgJHMyciA9IDo6Y210X3NoYTJyZXZfYmF0Y2goW2tleXMgJWRzaGFdKTsKKworCQlmb3JlYWNoIG15ICRsaW5lIChAYnVmZmVyKSB7CisJCQlpZiAoJGxpbmUgPX4gL14oW1s6eGRpZ2l0Ol1dezQwfSlcc1xkK1xzXGQrLykgeworCQkJCSRyZXYgPSAkczJyLT57JDF9OworCQkJCSRyZXYgPSAnMCcgaWYgKCEkcmV2KQorCQkJfQorCQkJZWxzaWYgKCRsaW5lID1+IC9eYXV0aG9yICguKikvKSB7CisJCQkJJGF1dGhvcnN7JHJldn0gPSAkMTsKKwkJCQkkYXV0aG9yc3skcmV2fSA9fiBzL1xzL18vZzsKKwkJCX0KKwkJCWVsc2lmICgkbGluZSA9fiAvXlx0KC4qKSQvKSB7CisJCQkJcHJpbnRmKCIlNnMgJTEwcyAlc1xuIiwgJHJldiwgJGF1dGhvcnN7JHJldn0sICQxKTsKKwkJCX0KKwkJfQorCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkY3R4KTsKK30KKworMTsKZGlmZiAtLWdpdCBhL3BlcmwvR2l0L1NWTi9NZW1vaXplL1lBTUwucG0gYi9wZXJsL0dpdC9TVk4vTWVtb2l6ZS9ZQU1MLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NzZiOGYKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vTWVtb2l6ZS9ZQU1MLnBtCkBAIC0wLDAgKzEsOTMgQEAKK3BhY2thZ2UgR2l0OjpTVk46Ok1lbW9pemU6OllBTUw7Cit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OwordXNlIFlBTUw6OkFueSAoKTsKKworIyBiYXNlZCBvbiBNZW1vaXplOjpTdG9yYWJsZS4KKworc3ViIFRJRUhBU0ggeworCW15ICRwYWNrYWdlID0gc2hpZnQ7CisJbXkgJGZpbGVuYW1lID0gc2hpZnQ7CisJbXkgJHRydWVoYXNoID0gKC1lICRmaWxlbmFtZSkgPyBZQU1MOjpBbnk6OkxvYWRGaWxlKCRmaWxlbmFtZSkgOiB7fTsKKwlteSAkc2VsZiA9IHtGSUxFTkFNRSA9PiAkZmlsZW5hbWUsIEggPT4gJHRydWVoYXNofTsKKwlibGVzcyAkc2VsZiA9PiAkcGFja2FnZTsKK30KKworc3ViIFNUT1JFIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCSRzZWxmLT57SH17JF9bMF19ID0gJF9bMV07Cit9CisKK3N1YiBGRVRDSCB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwkkc2VsZi0+e0h9eyRfWzBdfTsKK30KKworc3ViIEVYSVNUUyB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKwlleGlzdHMgJHNlbGYtPntIfXskX1swXX07Cit9CisKK3N1YiBERVNUUk9ZIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCVlBTUw6OkFueTo6RHVtcEZpbGUoJHNlbGYtPntGSUxFTkFNRX0sICRzZWxmLT57SH0pOworfQorCitzdWIgU0NBTEFSIHsKKwlteSAkc2VsZiA9IHNoaWZ0OworCXNjYWxhcigleyRzZWxmLT57SH19KTsKK30KKworc3ViIEZJUlNUS0VZIHsKKwknRmFrZSBoYXNoIGZyb20gR2l0OjpTVk46Ok1lbW9pemU6OllBTUwnOworfQorCitzdWIgTkVYVEtFWSB7CisJdW5kZWY7Cit9CisKKzE7CitfX0VORF9fCisKKz1oZWFkMSBOQU1FCisKK0dpdDo6U1ZOOjpNZW1vaXplOjpZQU1MIC0gc3RvcmUgTWVtb2l6ZWQgZGF0YSBpbiBZQU1MIGZvcm1hdAorCis9aGVhZDEgU1lOT1BTSVMKKworICAgIHVzZSBNZW1vaXplOworICAgIHVzZSBHaXQ6OlNWTjo6TWVtb2l6ZTo6WUFNTDsKKworICAgIHRpZSBteSAlY2FjaGUgPT4gJ0dpdDo6U1ZOOjpNZW1vaXplOjpZQU1MJywgJGZpbGVuYW1lOworICAgIG1lbW9pemUoJ3Nsb3dfZnVuY3Rpb24nLCBTQ0FMQVJfQ0FDSEUgPT4gW0hBU0ggPT4gXCVjYWNoZV0pOworICAgIHNsb3dfZnVuY3Rpb24oYXJndW1lbnRzKTsKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGEgY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCB0byB0aWUgYSBoYXNoIHRvIGEKK1lBTUwgZmlsZS4gIFRoZSBmaWxlIGlzIHJlYWQgd2hlbiB0aGUgaGFzaCBpcyBpbml0aWFsaXplZCBhbmQKK3Jld3JpdHRlbiB3aGVuIHRoZSBoYXNoIGlzIGRlc3Ryb3llZC4KKworVGhlIGludGVudCBpcyB0byBhbGxvdyBMPE1lbW9pemU+IHRvIGJhY2sgaXRzIGNhY2hlIHdpdGggYSBmaWxlIGluCitZQU1MIGZvcm1hdCwganVzdCBsaWtlIEw8TWVtb2l6ZTo6U3RvcmFibGU+IGFsbG93cyBMPE1lbW9pemU+IHRvCitiYWNrIGl0cyBjYWNoZSB3aXRoIGEgZmlsZSBpbiBTdG9yYWJsZSBmb3JtYXQuICBVbmxpa2UgdGhlIFN0b3JhYmxlCitmb3JtYXQsIHRoZSBZQU1MIGZvcm1hdCBpcyBwbGF0Zm9ybS1pbmRlcGVuZGVudCBhbmQgZmFpcmx5IHN0YWJsZS4KKworQ2FycHMgb24gZXJyb3IuCisKKz1oZWFkMSBESUFHTk9TVElDUworCitTZWUgTDxZQU1MOjpBbnk+LgorCis9aGVhZDEgREVQRU5ERU5DSUVTCisKK0w8WUFNTDo6QW55PiBmcm9tIENQQU4uCisKKz1oZWFkMSBJTkNPTVBBVElCSUxJVElFUworCitOb25lIHJlcG9ydGVkLgorCis9aGVhZDEgQlVHUworCitUaGUgZW50aXJlIGNhY2hlIGlzIHJlYWQgaW50byBhIFBlcmwgaGFzaCB3aGVuIGxvYWRpbmcgdGhlIGZpbGUsCitzbyB0aGlzIGlzIG5vdCB2ZXJ5IHNjYWxhYmxlLgpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOL01pZ3JhdGlvbi5wbSBiL3BlcmwvR2l0L1NWTi9NaWdyYXRpb24ucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2ZmZhNwotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvR2l0L1NWTi9NaWdyYXRpb24ucG0KQEAgLTAsMCArMSwyNTggQEAKK3BhY2thZ2UgR2l0OjpTVk46Ok1pZ3JhdGlvbjsKKyMgdGhlc2UgdmVyc2lvbiBudW1iZXJzIGRvIE5PVCBjb3JyZXNwb25kIHRvIGFjdHVhbCB2ZXJzaW9uIG51bWJlcnMKKyMgb2YgZ2l0IG9yIGdpdC1zdm4uICBUaGV5IGFyZSBqdXN0IHJlbGF0aXZlLgorIworIyB2MCBsYXlvdXQ6IC5naXQvJGlkL2luZm8vdXJsLCByZWZzL2hlYWRzLyRpZC1IRUFECisjCisjIHYxIGxheW91dDogLmdpdC8kaWQvaW5mby91cmwsIHJlZnMvcmVtb3Rlcy8kaWQKKyMKKyMgdjIgbGF5b3V0OiAuZ2l0L3N2bi8kaWQvaW5mby91cmwsIHJlZnMvcmVtb3Rlcy8kaWQKKyMKKyMgdjMgbGF5b3V0OiAuZ2l0L3N2bi8kaWQsIHJlZnMvcmVtb3Rlcy8kaWQKKyMgICAgICAgICAgICAtIGluZm8vdXJsIG1heSByZW1haW4gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisjICAgICAgICAgICAgLSB0aGlzIGlzIHdoYXQgd2UgbWlncmF0ZSB1cCB0byB0aGlzIGxheW91dCBhdXRvbWF0aWNhbGx5LAorIyAgICAgICAgICAgIC0gdGhpcyB3aWxsIGJlIHVzZWQgYnkgZ2l0IHN2biBpbml0IG9uIHNpbmdsZSBicmFuY2hlcworIyB2My4xIGxheW91dCAoYXV0byBtaWdyYXRlZCk6CisjICAgICAgICAgICAgLSAucmV2X2RiID0+IC5yZXZfZGIuJFVVSUQsIC5yZXZfZGIgd2lsbCByZW1haW4gYXMgYSBzeW1saW5rCisjICAgICAgICAgICAgICBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyMKKyMgdjQgbGF5b3V0OiAuZ2l0L3N2bi8kcmVwb19pZC8kaWQsIHJlZnMvcmVtb3Rlcy8kcmVwb19pZC8kaWQKKyMgICAgICAgICAgICAtIHRoaXMgaXMgb25seSBjcmVhdGVkIGZvciBuZXdseSBtdWx0aS1pbml0LWVkCisjICAgICAgICAgICAgICByZXBvc2l0b3JpZXMuICBTaW1pbGFyIGluIHNwaXJpdCB0byB0aGUKKyMgICAgICAgICAgICAgIC0tdXNlLXNlcGFyYXRlLXJlbW90ZXMgb3B0aW9uIGluIGdpdC1jbG9uZSAobm93IGRlZmF1bHQpCisjICAgICAgICAgICAgLSB3ZSBkbyBub3QgYXV0b21hdGljYWxseSBtaWdyYXRlIHRvIHRoaXMgKGZvbGxvd2luZworIyAgICAgICAgICAgICAgdGhlIGV4YW1wbGUgc2V0IGJ5IGNvcmUgZ2l0KQorIworIyB2NSBsYXlvdXQ6IC5yZXZfZGIuJFVVSUQgPT4gLnJldl9tYXAuJFVVSUQKKyMgICAgICAgICAgICAtIG5ld2VyLCBtb3JlLWVmZmljaWVudCBmb3JtYXQgdGhhdCB1c2VzIDI0LWJ5dGVzIHBlciByZWNvcmQKKyMgICAgICAgICAgICAgIHdpdGggbm8gZmlsbGVyIHNwYWNlLgorIyAgICAgICAgICAgIC0gdXNlIHh4ZCAtYzI0IDwgLnJldl9tYXAuJFVVSUQgdG8gdmlldyBhbmQgZGVidWcKKyMgICAgICAgICAgICAtIFRoaXMgaXMgYSBvbmUtd2F5IG1pZ3JhdGlvbiwgcmVwb3NpdG9yaWVzIHVwZGF0ZWQgdG8gdGhlCisjICAgICAgICAgICAgICBuZXcgZm9ybWF0IHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIG9sZCBnaXQtc3ZuIHdpdGhvdXQKKyMgICAgICAgICAgICAgIHJlYnVpbGRpbmcgdGhlIC5yZXZfZGIuICBSZWJ1aWxkaW5nIHRoZSByZXZfZGIgaXMgbm90CisjICAgICAgICAgICAgICBwb3NzaWJsZSBpZiBub01ldGFkYXRhIG9yIHVzZVN2bVByb3BzIGFyZSBzZXQ7IGJ1dCBzaG91bGQKKyMgICAgICAgICAgICAgIGJlIG5vIHByb2JsZW0gZm9yIHVzZXJzIHRoYXQgdXNlIHRoZSAoc2Vuc2libGUpIGRlZmF1bHRzLgordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBDYXJwIHF3L2Nyb2FrLzsKK3VzZSBGaWxlOjpQYXRoIHF3L21rcGF0aC87Cit1c2UgRmlsZTo6QmFzZW5hbWUgcXcvZGlybmFtZSBiYXNlbmFtZS87CisKK291ciAkX21pbmltaXplOwordXNlIEdpdCBxdygKKwljb21tYW5kCisJY29tbWFuZF9ub2lzeQorCWNvbW1hbmRfb3V0cHV0X3BpcGUKKwljb21tYW5kX2Nsb3NlX3BpcGUKKyk7CisKK3N1YiBtaWdyYXRlX2Zyb21fdjAgeworCW15ICRnaXRfZGlyID0gJEVOVntHSVRfRElSfTsKKwlyZXR1cm4gdW5kZWYgdW5sZXNzIC1kICRnaXRfZGlyOworCW15ICgkZmgsICRjdHgpID0gY29tbWFuZF9vdXRwdXRfcGlwZShxdy9yZXYtcGFyc2UgLS1zeW1ib2xpYyAtLWFsbC8pOworCW15ICRtaWdyYXRlZCA9IDA7CisJd2hpbGUgKDwkZmg+KSB7CisJCWNob21wOworCQlteSAoJGlkLCAkb3JpZ19yZWYpID0gKCRfLCAkXyk7CisJCW5leHQgdW5sZXNzICRpZCA9fiBzI15yZWZzL2hlYWRzLyguKyktSEVBRCQjJDEjOworCQluZXh0IHVubGVzcyAtZiAiJGdpdF9kaXIvJGlkL2luZm8vdXJsIjsKKwkJbXkgJG5ld19yZWYgPSAicmVmcy9yZW1vdGVzLyRpZCI7CisJCWlmICg6OnZlcmlmeV9yZWYoIiRuZXdfcmVmXjAiKSkgeworCQkJcHJpbnQgU1RERVJSICJXOiAkb3JpZ19yZWYgaXMgcHJvYmFibHkgYW4gb2xkICIsCisJCQkgICAgICAgICAgICAgImJyYW5jaCB1c2VkIGJ5IGFuIGFuY2llbnQgdmVyc2lvbiBvZiAiLAorCQkJCSAgICAgImdpdC1zdm4uXG4iLAorCQkJCSAgICAgIkhvd2V2ZXIsICRuZXdfcmVmIGFsc28gZXhpc3RzLlxuIiwKKwkJCQkgICAgICJXZSB3aWxsIG5vdCBiZSBhYmxlICIsCisJCQkJICAgICAidG8gdXNlIHRoaXMgYnJhbmNoIHVudGlsIHRoaXMgIiwKKwkJCQkgICAgICJhbWJpZ3VpdHkgaXMgcmVzb2x2ZWQuXG4iOworCQkJbmV4dDsKKwkJfQorCQlwcmludCBTVERFUlIgIk1pZ3JhdGluZyBmcm9tIHYwIGxheW91dC4uLlxuIiBpZiAhJG1pZ3JhdGVkOworCQlwcmludCBTVERFUlIgIlJlbmFtaW5nIHJlZjogJG9yaWdfcmVmID0+ICRuZXdfcmVmXG4iOworCQljb21tYW5kX25vaXN5KCd1cGRhdGUtcmVmJywgJG5ld19yZWYsICRvcmlnX3JlZik7CisJCWNvbW1hbmRfbm9pc3koJ3VwZGF0ZS1yZWYnLCAnLWQnLCAkb3JpZ19yZWYsICRvcmlnX3JlZik7CisJCSRtaWdyYXRlZCsrOworCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkY3R4KTsKKwlwcmludCBTVERFUlIgIkRvbmUgbWlncmF0aW5nIGZyb20gdjAgbGF5b3V0Li4uXG4iIGlmICRtaWdyYXRlZDsKKwkkbWlncmF0ZWQ7Cit9CisKK3N1YiBtaWdyYXRlX2Zyb21fdjEgeworCW15ICRnaXRfZGlyID0gJEVOVntHSVRfRElSfTsKKwlteSAkbWlncmF0ZWQgPSAwOworCXJldHVybiAkbWlncmF0ZWQgdW5sZXNzIC1kICRnaXRfZGlyOworCW15ICRzdm5fZGlyID0gIiRnaXRfZGlyL3N2biI7CisKKwkjIGp1c3QgaW4gY2FzZSBzb21lYm9keSB1c2VkICdzdm4nIGFzIHRoZWlyICRpZCBhdCBzb21lIHBvaW50Li4uCisJcmV0dXJuICRtaWdyYXRlZCBpZiAtZCAkc3ZuX2RpciAmJiAhIC1mICIkc3ZuX2Rpci9pbmZvL3VybCI7CisKKwlwcmludCBTVERFUlIgIk1pZ3JhdGluZyBmcm9tIGEgZ2l0LXN2biB2MSBsYXlvdXQuLi5cbiI7CisJbWtwYXRoKFskc3ZuX2Rpcl0pOworCXByaW50IFNUREVSUiAiRGF0YSBmcm9tIGEgcHJldmlvdXMgdmVyc2lvbiBvZiBnaXQtc3ZuIGV4aXN0cywgYnV0XG5cdCIsCisJICAgICAgICAgICAgICIkc3ZuX2RpclxuXHQocmVxdWlyZWQgZm9yIHRoaXMgdmVyc2lvbiAiLAorCSAgICAgICAgICAgICAiKCQ6OlZFUlNJT04pIG9mIGdpdC1zdm4pIGRvZXMgbm90IGV4aXN0LlxuIjsKKwlteSAoJGZoLCAkY3R4KSA9IGNvbW1hbmRfb3V0cHV0X3BpcGUocXcvcmV2LXBhcnNlIC0tc3ltYm9saWMgLS1hbGwvKTsKKwl3aGlsZSAoPCRmaD4pIHsKKwkJbXkgJHggPSAkXzsKKwkJbmV4dCB1bmxlc3MgJHggPX4gcyNecmVmcy9yZW1vdGVzLyMjOworCQljaG9tcCAkeDsKKwkJbmV4dCB1bmxlc3MgLWYgIiRnaXRfZGlyLyR4L2luZm8vdXJsIjsKKwkJbXkgJHUgPSBldmFsIHsgOjpmaWxlX3RvX3MoIiRnaXRfZGlyLyR4L2luZm8vdXJsIikgfTsKKwkJbmV4dCB1bmxlc3MgJHU7CisJCW15ICRkbiA9IGRpcm5hbWUoIiRnaXRfZGlyL3N2bi8keCIpOworCQlta3BhdGgoWyRkbl0pIHVubGVzcyAtZCAkZG47CisJCWlmICgkeCBlcSAnc3ZuJykgeyAjIHRoZXkgdXNlZCAnc3ZuJyBhcyBHSVRfU1ZOX0lEOgorCQkJbWtwYXRoKFsiJGdpdF9kaXIvc3ZuL3N2biJdKTsKKwkJCXByaW50IFNUREVSUiAiIC0gJGdpdF9kaXIvJHgvaW5mbyA9PiAiLAorCQkJICAgICAgICAgICAgICAgICIkZ2l0X2Rpci9zdm4vJHgvaW5mb1xuIjsKKwkJCXJlbmFtZSAiJGdpdF9kaXIvJHgvaW5mbyIsICIkZ2l0X2Rpci9zdm4vJHgvaW5mbyIgb3IKKwkJCSAgICAgICBjcm9hayAiJCE6ICR4IjsKKwkJCSMgZG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgdGhlc2UsIHRoZXkgcHJvYmFibHkKKwkJCSMgZG9uJ3QgZXhpc3Qgd2l0aCByZXBvcyB0aGlzIG9sZCAoc2F2ZSBmb3IgaW5kZXgsCisJCQkjIGFuZCB3ZSBjYW4gZWFzaWx5IHJlZ2VuZXJhdGUgdGhhdCkKKwkJCWZvcmVhY2ggbXkgJGYgKHF3L3VuaGFuZGxlZC5sb2cgaW5kZXggLnJldl9kYi8pIHsKKwkJCQlyZW5hbWUgIiRnaXRfZGlyLyR4LyRmIiwgIiRnaXRfZGlyL3N2bi8keC8kZiI7CisJCQl9CisJCX0gZWxzZSB7CisJCQlwcmludCBTVERFUlIgIiAtICRnaXRfZGlyLyR4ID0+ICRnaXRfZGlyL3N2bi8keFxuIjsKKwkJCXJlbmFtZSAiJGdpdF9kaXIvJHgiLCAiJGdpdF9kaXIvc3ZuLyR4IiBvcgorCQkJICAgICAgIGNyb2FrICIkITogJHgiOworCQl9CisJCSRtaWdyYXRlZCsrOworCX0KKwljb21tYW5kX2Nsb3NlX3BpcGUoJGZoLCAkY3R4KTsKKwlwcmludCBTVERFUlIgIkRvbmUgbWlncmF0aW5nIGZyb20gYSBnaXQtc3ZuIHYxIGxheW91dFxuIjsKKwkkbWlncmF0ZWQ7Cit9CisKK3N1YiByZWFkX29sZF91cmxzIHsKKwlteSAoJGxfbWFwLCAkcGZ4LCAkcGF0aCkgPSBAXzsKKwlteSBAZGlyOworCWZvcmVhY2ggKDwkcGF0aC8qPikgeworCQlpZiAoLXIgIiRfL2luZm8vdXJsIikgeworCQkJJHBmeCAuPSAnLycgaWYgJHBmeCAmJiAkcGZ4ICF+IG0hLyQhOworCQkJbXkgJHJlZl9pZCA9ICRwZnggLiBiYXNlbmFtZSAkXzsKKwkJCW15ICR1cmwgPSA6OmZpbGVfdG9fcygiJF8vaW5mby91cmwiKTsKKwkJCSRsX21hcC0+eyRyZWZfaWR9ID0gJHVybDsKKwkJfSBlbHNpZiAoLWQgJF8pIHsKKwkJCXB1c2ggQGRpciwgJF87CisJCX0KKwl9CisJZm9yZWFjaCAoQGRpcikgeworCQlteSAkeCA9ICRfOworCQkkeCA9fiBzIV5cUSRFTlZ7R0lUX0RJUn1cRS9zdm4vISFvOworCQlyZWFkX29sZF91cmxzKCRsX21hcCwgJHgsICRfKTsKKwl9Cit9CisKK3N1YiBtaWdyYXRlX2Zyb21fdjIgeworCW15IEBjZmcgPSBjb21tYW5kKHF3L2NvbmZpZyAtbC8pOworCXJldHVybiBpZiBncmVwIC9ec3ZuLXJlbW90ZVwuLitcLnVybD0vLCBAY2ZnOworCW15ICVsX21hcDsKKwlyZWFkX29sZF91cmxzKFwlbF9tYXAsICcnLCAiJEVOVntHSVRfRElSfS9zdm4iKTsKKwlteSAkbWlncmF0ZWQgPSAwOworCisJcmVxdWlyZSBHaXQ6OlNWTjsKKwlmb3JlYWNoIG15ICRyZWZfaWQgKHNvcnQga2V5cyAlbF9tYXApIHsKKwkJZXZhbCB7IEdpdDo6U1ZOLT5pbml0KCRsX21hcHskcmVmX2lkfSwgJycsIHVuZGVmLCAkcmVmX2lkKSB9OworCQlpZiAoJEApIHsKKwkJCUdpdDo6U1ZOLT5pbml0KCRsX21hcHskcmVmX2lkfSwgJycsICRyZWZfaWQsICRyZWZfaWQpOworCQl9CisJCSRtaWdyYXRlZCsrOworCX0KKwkkbWlncmF0ZWQ7Cit9CisKK3N1YiBtaW5pbWl6ZV9jb25uZWN0aW9ucyB7CisJcmVxdWlyZSBHaXQ6OlNWTjsKKwlyZXF1aXJlIEdpdDo6U1ZOOjpSYTsKKworCW15ICRyID0gR2l0OjpTVk46OnJlYWRfYWxsX3JlbW90ZXMoKTsKKwlteSAkbmV3X3VybHMgPSB7fTsKKwlteSAkcm9vdF9yZXBvcyA9IHt9OworCWZvcmVhY2ggbXkgJHJlcG9faWQgKGtleXMgJSRyKSB7CisJCW15ICR1cmwgPSAkci0+eyRyZXBvX2lkfS0+e3VybH0gb3IgbmV4dDsKKwkJbXkgJGZldGNoID0gJHItPnskcmVwb19pZH0tPntmZXRjaH0gb3IgbmV4dDsKKwkJbXkgJHJhID0gR2l0OjpTVk46OlJhLT5uZXcoJHVybCk7CisKKwkJIyBza2lwIGV4aXN0aW5nIGNhc2VzIHdoZXJlIHdlIGFscmVhZHkgY29ubmVjdCB0byB0aGUgcm9vdAorCQlpZiAoKCRyYS0+dXJsIGVxICRyYS0+e3JlcG9zX3Jvb3R9KSB8fAorCQkgICAgKCRyYS0+e3JlcG9zX3Jvb3R9IGVxICRyZXBvX2lkKSkgeworCQkJJHJvb3RfcmVwb3MtPnskcmEtPnVybH0gPSAkcmVwb19pZDsKKwkJCW5leHQ7CisJCX0KKworCQlteSAkcm9vdF9yYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCRyYS0+e3JlcG9zX3Jvb3R9KTsKKwkJbXkgJHJvb3RfcGF0aCA9ICRyYS0+dXJsOworCQkkcm9vdF9wYXRoID1+IHMjXlxRJHJhLT57cmVwb3Nfcm9vdH1cRSgvfCQpIyM7CisJCWZvcmVhY2ggbXkgJHBhdGggKGtleXMgJSRmZXRjaCkgeworCQkJbXkgJHJlZl9pZCA9ICRmZXRjaC0+eyRwYXRofTsKKwkJCW15ICRncyA9IEdpdDo6U1ZOLT5uZXcoJHJlZl9pZCwgJHJlcG9faWQsICRwYXRoKTsKKworCQkJIyBtYWtlIHN1cmUgd2UgY2FuIHJlYWQgd2hlbiBjb25uZWN0aW5nIHRvCisJCQkjIGEgaGlnaGVyIGxldmVsIG9mIGEgcmVwb3NpdG9yeQorCQkJbXkgKCRsYXN0X3JldiwgdW5kZWYpID0gJGdzLT5sYXN0X3Jldl9jb21taXQ7CisJCQlpZiAoIWRlZmluZWQgJGxhc3RfcmV2KSB7CisJCQkJJGxhc3RfcmV2ID0gZXZhbCB7CisJCQkJCSRyb290X3JhLT5nZXRfbGF0ZXN0X3Jldm51bTsKKwkJCQl9OworCQkJCW5leHQgaWYgJEA7CisJCQl9CisJCQlteSAkbmV3ID0gJHJvb3RfcGF0aDsKKwkJCSRuZXcgLj0gbGVuZ3RoICRwYXRoID8gIi8kcGF0aCIgOiAnJzsKKwkJCWV2YWwgeworCQkJCSRyb290X3JhLT5nZXRfbG9nKFskbmV3XSwgJGxhc3RfcmV2LCAkbGFzdF9yZXYsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDEsIHN1YiB7IH0pOworCQkJfTsKKwkJCW5leHQgaWYgJEA7CisJCQkkbmV3X3VybHMtPnskcmEtPntyZXBvc19yb290fX0tPnskbmV3fSA9CisJCQkgICAgICAgIHsgcmVmX2lkID0+ICRyZWZfaWQsCisJCQkJICBvbGRfcmVwb19pZCA9PiAkcmVwb19pZCwKKwkJCQkgIG9sZF9wYXRoID0+ICRwYXRoIH07CisJCX0KKwl9CisKKwlteSBAZW1wdGllZDsKKwlmb3JlYWNoIG15ICR1cmwgKGtleXMgJSRuZXdfdXJscykgeworCQkjIHNlZSBpZiB3ZSBjYW4gcmUtdXNlIGFuIGV4aXN0aW5nIFtzdm4tcmVtb3RlICJyZXBvX2lkIl0KKwkJIyBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEobiB1Z2x5KSBuZXcgc2VjdGlvbjoKKwkJbXkgJHJlcG9faWQgPSAkcm9vdF9yZXBvcy0+eyR1cmx9IHx8ICR1cmw7CisKKwkJbXkgJGZldGNoID0gJG5ld191cmxzLT57JHVybH07CisJCWZvcmVhY2ggbXkgJHBhdGggKGtleXMgJSRmZXRjaCkgeworCQkJbXkgJHggPSAkZmV0Y2gtPnskcGF0aH07CisJCQlHaXQ6OlNWTi0+aW5pdCgkdXJsLCAkcGF0aCwgJHJlcG9faWQsICR4LT57cmVmX2lkfSk7CisJCQlteSAkcGZ4ID0gInN2bi1yZW1vdGUuJHgtPntvbGRfcmVwb19pZH0iOworCisJCQlteSAkb2xkX2ZldGNoID0gcXVvdGVtZXRhKCIkeC0+e29sZF9wYXRofToiLgorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAiJHgtPntyZWZfaWR9Iik7CisJCQljb21tYW5kX25vaXN5KHF3L2NvbmZpZyAtLXVuc2V0LywKKwkJCSAgICAgICAgICAgICAgIiRwZnguZmV0Y2giLCAnXicuICRvbGRfZmV0Y2ggLiAnJCcpOworCQkJZGVsZXRlICRyLT57JHgtPntvbGRfcmVwb19pZH19LT4KKwkJCSAgICAgICB7ZmV0Y2h9LT57JHgtPntvbGRfcGF0aH19OworCQkJaWYgKCFrZXlzICV7JHItPnskeC0+e29sZF9yZXBvX2lkfX0tPntmZXRjaH19KSB7CisJCQkJY29tbWFuZF9ub2lzeShxdy9jb25maWcgLS11bnNldC8sCisJCQkJICAgICAgICAgICAgICAiJHBmeC51cmwiKTsKKwkJCQlwdXNoIEBlbXB0aWVkLCAkeC0+e29sZF9yZXBvX2lkfQorCQkJfQorCQl9CisJfQorCWlmIChAZW1wdGllZCkgeworCQlteSAkZmlsZSA9ICRFTlZ7R0lUX0NPTkZJR30gfHwgIiRFTlZ7R0lUX0RJUn0vY29uZmlnIjsKKwkJcHJpbnQgU1RERVJSIDw8RU9GOworVGhlIGZvbGxvd2luZyBbc3ZuLXJlbW90ZV0gc2VjdGlvbnMgaW4geW91ciBjb25maWcgZmlsZSAoJGZpbGUpIGFyZSBlbXB0eQorYW5kIGNhbiBiZSBzYWZlbHkgcmVtb3ZlZDoKK0VPRgorCQlwcmludCBTVERFUlIgIltzdm4tcmVtb3RlIFwiJF9cIl1cbiIgZm9yZWFjaCBAZW1wdGllZDsKKwl9Cit9CisKK3N1YiBtaWdyYXRpb25fY2hlY2sgeworCW1pZ3JhdGVfZnJvbV92MCgpOworCW1pZ3JhdGVfZnJvbV92MSgpOworCW1pZ3JhdGVfZnJvbV92MigpOworCW1pbmltaXplX2Nvbm5lY3Rpb25zKCkgaWYgJF9taW5pbWl6ZTsKK30KKworMTsKZGlmZiAtLWdpdCBhL3BlcmwvR2l0L1NWTi9Qcm9tcHQucG0gYi9wZXJsL0dpdC9TVk4vUHJvbXB0LnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NDBiMDgKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vUHJvbXB0LnBtCkBAIC0wLDAgKzEsMTg0IEBACitwYWNrYWdlIEdpdDo6U1ZOOjpQcm9tcHQ7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworcmVxdWlyZSBTVk46OkNvcmU7Cit1c2UgdmFycyBxdy8kX25vX2F1dGhfY2FjaGUgJF91c2VybmFtZS87CisKK3N1YiBzaW1wbGUgeworCW15ICgkY3JlZCwgJHJlYWxtLCAkZGVmYXVsdF91c2VybmFtZSwgJG1heV9zYXZlLCAkcG9vbCkgPSBAXzsKKwkkbWF5X3NhdmUgPSB1bmRlZiBpZiAkX25vX2F1dGhfY2FjaGU7CisJJGRlZmF1bHRfdXNlcm5hbWUgPSAkX3VzZXJuYW1lIGlmIGRlZmluZWQgJF91c2VybmFtZTsKKwlpZiAoZGVmaW5lZCAkZGVmYXVsdF91c2VybmFtZSAmJiBsZW5ndGggJGRlZmF1bHRfdXNlcm5hbWUpIHsKKwkJaWYgKGRlZmluZWQgJHJlYWxtICYmIGxlbmd0aCAkcmVhbG0pIHsKKwkJCXByaW50IFNUREVSUiAiQXV0aGVudGljYXRpb24gcmVhbG06ICRyZWFsbVxuIjsKKwkJCVNUREVSUi0+Zmx1c2g7CisJCX0KKwkJJGNyZWQtPnVzZXJuYW1lKCRkZWZhdWx0X3VzZXJuYW1lKTsKKwl9IGVsc2UgeworCQl1c2VybmFtZSgkY3JlZCwgJHJlYWxtLCAkbWF5X3NhdmUsICRwb29sKTsKKwl9CisJJGNyZWQtPnBhc3N3b3JkKF9yZWFkX3Bhc3N3b3JkKCJQYXNzd29yZCBmb3IgJyIgLgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY3JlZC0+dXNlcm5hbWUgLiAiJzogIiwgJHJlYWxtKSk7CisJJGNyZWQtPm1heV9zYXZlKCRtYXlfc2F2ZSk7CisJJFNWTjo6X0NvcmU6OlNWTl9OT19FUlJPUjsKK30KKworc3ViIHNzbF9zZXJ2ZXJfdHJ1c3QgeworCW15ICgkY3JlZCwgJHJlYWxtLCAkZmFpbHVyZXMsICRjZXJ0X2luZm8sICRtYXlfc2F2ZSwgJHBvb2wpID0gQF87CisJJG1heV9zYXZlID0gdW5kZWYgaWYgJF9ub19hdXRoX2NhY2hlOworCXByaW50IFNUREVSUiAiRXJyb3IgdmFsaWRhdGluZyBzZXJ2ZXIgY2VydGlmaWNhdGUgZm9yICckcmVhbG0nOlxuIjsKKwl7CisJCW5vIHdhcm5pbmdzICdvbmNlJzsKKwkJIyBBbGwgdmFyaWFibGVzIFNWTjo6QXV0aDo6U1NMOjoqIGFyZSB1c2VkIG9ubHkgb25jZSwKKwkJIyBzbyB3ZSdyZSBzaHV0dGluZyB1cCBQZXJsIHdhcm5pbmdzIGFib3V0IHRoaXMuCisJCWlmICgkZmFpbHVyZXMgJiAkU1ZOOjpBdXRoOjpTU0w6OlVOS05PV05DQSkgeworCQkJcHJpbnQgU1RERVJSICIgLSBUaGUgY2VydGlmaWNhdGUgaXMgbm90IGlzc3VlZCAiLAorCQkJICAgICJieSBhIHRydXN0ZWQgYXV0aG9yaXR5LiBVc2UgdGhlXG4iLAorCQkJICAgICIgICBmaW5nZXJwcmludCB0byB2YWxpZGF0ZSAiLAorCQkJICAgICJ0aGUgY2VydGlmaWNhdGUgbWFudWFsbHkhXG4iOworCQl9CisJCWlmICgkZmFpbHVyZXMgJiAkU1ZOOjpBdXRoOjpTU0w6OkNOTUlTTUFUQ0gpIHsKKwkJCXByaW50IFNUREVSUiAiIC0gVGhlIGNlcnRpZmljYXRlIGhvc3RuYW1lICIsCisJCQkgICAgImRvZXMgbm90IG1hdGNoLlxuIjsKKwkJfQorCQlpZiAoJGZhaWx1cmVzICYgJFNWTjo6QXV0aDo6U1NMOjpOT1RZRVRWQUxJRCkgeworCQkJcHJpbnQgU1RERVJSICIgLSBUaGUgY2VydGlmaWNhdGUgaXMgbm90IHlldCB2YWxpZC5cbiI7CisJCX0KKwkJaWYgKCRmYWlsdXJlcyAmICRTVk46OkF1dGg6OlNTTDo6RVhQSVJFRCkgeworCQkJcHJpbnQgU1RERVJSICIgLSBUaGUgY2VydGlmaWNhdGUgaGFzIGV4cGlyZWQuXG4iOworCQl9CisJCWlmICgkZmFpbHVyZXMgJiAkU1ZOOjpBdXRoOjpTU0w6Ok9USEVSKSB7CisJCQlwcmludCBTVERFUlIgIiAtIFRoZSBjZXJ0aWZpY2F0ZSBoYXMgIiwKKwkJCSAgICAiYW4gdW5rbm93biBlcnJvci5cbiI7CisJCX0KKwl9ICMgbm8gd2FybmluZ3MgJ29uY2UnCisJcHJpbnRmIFNUREVSUgorCSAgICAgICAgIkNlcnRpZmljYXRlIGluZm9ybWF0aW9uOlxuIi4KKwkgICAgICAgICIgLSBIb3N0bmFtZTogJXNcbiIuCisJICAgICAgICAiIC0gVmFsaWQ6IGZyb20gJXMgdW50aWwgJXNcbiIuCisJICAgICAgICAiIC0gSXNzdWVyOiAlc1xuIi4KKwkgICAgICAgICIgLSBGaW5nZXJwcmludDogJXNcbiIsCisJICAgICAgICBtYXAgJGNlcnRfaW5mby0+JF8sIHF3KGhvc3RuYW1lIHZhbGlkX2Zyb20gdmFsaWRfdW50aWwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVyX2RuYW1lIGZpbmdlcnByaW50KTsKKwlteSAkY2hvaWNlOworcHJvbXB0OgorCW15ICRvcHRpb25zID0gJG1heV9zYXZlID8KKwkgICAgICAiKFIpZWplY3QsIGFjY2VwdCAodCllbXBvcmFyaWx5IG9yIGFjY2VwdCAocCllcm1hbmVudGx5PyAiIDoKKwkgICAgICAiKFIpZWplY3Qgb3IgYWNjZXB0ICh0KWVtcG9yYXJpbHk/ICI7CisJU1RERVJSLT5mbHVzaDsKKwkkY2hvaWNlID0gbGMoc3Vic3RyKEdpdDo6cHJvbXB0KCJDZXJ0aWZpY2F0ZSBwcm9ibGVtLlxuIiAuICRvcHRpb25zKSB8fCAnUicsIDAsIDEpKTsKKwlpZiAoJGNob2ljZSBlcSAndCcpIHsKKwkJJGNyZWQtPm1heV9zYXZlKHVuZGVmKTsKKwl9IGVsc2lmICgkY2hvaWNlIGVxICdyJykgeworCQlyZXR1cm4gLTE7CisJfSBlbHNpZiAoJG1heV9zYXZlICYmICRjaG9pY2UgZXEgJ3AnKSB7CisJCSRjcmVkLT5tYXlfc2F2ZSgkbWF5X3NhdmUpOworCX0gZWxzZSB7CisJCWdvdG8gcHJvbXB0OworCX0KKwkkY3JlZC0+YWNjZXB0ZWRfZmFpbHVyZXMoJGZhaWx1cmVzKTsKKwkkU1ZOOjpfQ29yZTo6U1ZOX05PX0VSUk9SOworfQorCitzdWIgc3NsX2NsaWVudF9jZXJ0IHsKKwlteSAoJGNyZWQsICRyZWFsbSwgJG1heV9zYXZlLCAkcG9vbCkgPSBAXzsKKwkkbWF5X3NhdmUgPSB1bmRlZiBpZiAkX25vX2F1dGhfY2FjaGU7CisJcHJpbnQgU1RERVJSICJDbGllbnQgY2VydGlmaWNhdGUgZmlsZW5hbWU6ICI7CisJU1RERVJSLT5mbHVzaDsKKwljaG9tcChteSAkZmlsZW5hbWUgPSA8U1RESU4+KTsKKwkkY3JlZC0+Y2VydF9maWxlKCRmaWxlbmFtZSk7CisJJGNyZWQtPm1heV9zYXZlKCRtYXlfc2F2ZSk7CisJJFNWTjo6X0NvcmU6OlNWTl9OT19FUlJPUjsKK30KKworc3ViIHNzbF9jbGllbnRfY2VydF9wdyB7CisJbXkgKCRjcmVkLCAkcmVhbG0sICRtYXlfc2F2ZSwgJHBvb2wpID0gQF87CisJJG1heV9zYXZlID0gdW5kZWYgaWYgJF9ub19hdXRoX2NhY2hlOworCSRjcmVkLT5wYXNzd29yZChfcmVhZF9wYXNzd29yZCgiUGFzc3dvcmQ6ICIsICRyZWFsbSkpOworCSRjcmVkLT5tYXlfc2F2ZSgkbWF5X3NhdmUpOworCSRTVk46Ol9Db3JlOjpTVk5fTk9fRVJST1I7Cit9CisKK3N1YiB1c2VybmFtZSB7CisJbXkgKCRjcmVkLCAkcmVhbG0sICRtYXlfc2F2ZSwgJHBvb2wpID0gQF87CisJJG1heV9zYXZlID0gdW5kZWYgaWYgJF9ub19hdXRoX2NhY2hlOworCWlmIChkZWZpbmVkICRyZWFsbSAmJiBsZW5ndGggJHJlYWxtKSB7CisJCXByaW50IFNUREVSUiAiQXV0aGVudGljYXRpb24gcmVhbG06ICRyZWFsbVxuIjsKKwl9CisJbXkgJHVzZXJuYW1lOworCWlmIChkZWZpbmVkICRfdXNlcm5hbWUpIHsKKwkJJHVzZXJuYW1lID0gJF91c2VybmFtZTsKKwl9IGVsc2UgeworCQkkdXNlcm5hbWUgPSBHaXQ6OnByb21wdCgiVXNlcm5hbWU6ICIpOworCX0KKwkkY3JlZC0+dXNlcm5hbWUoJHVzZXJuYW1lKTsKKwkkY3JlZC0+bWF5X3NhdmUoJG1heV9zYXZlKTsKKwkkU1ZOOjpfQ29yZTo6U1ZOX05PX0VSUk9SOworfQorCitzdWIgX3JlYWRfcGFzc3dvcmQgeworCW15ICgkcHJvbXB0LCAkcmVhbG0pID0gQF87CisJbXkgJHBhc3N3b3JkID0gR2l0Ojpwcm9tcHQoJHByb21wdCwgMSk7CisJJHBhc3N3b3JkOworfQorCisxOworX19FTkRfXworCis9aGVhZDEgTkFNRQorCitHaXQ6OlNWTjo6UHJvbXB0IC0gYXV0aGVudGljYXRpb24gY2FsbGJhY2tzIGZvciBnaXQtc3ZuCisKKz1oZWFkMSBTWU5PUFNJUworCisgICAgdXNlIEdpdDo6U1ZOOjpQcm9tcHQgcXcoc2ltcGxlIHNzbF9jbGllbnRfY2VydCBzc2xfY2xpZW50X2NlcnRfcHcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfc2VydmVyX3RydXN0IHVzZXJuYW1lKTsKKyAgICB1c2UgU1ZOOjpDbGllbnQgKCk7CisKKyAgICBteSAkY2FjaGVkX3NpbXBsZSA9IFNWTjo6Q2xpZW50OjpnZXRfc2ltcGxlX3Byb3ZpZGVyKCk7CisgICAgbXkgJGdpdF9zaW1wbGUgPSBTVk46OkNsaWVudDo6Z2V0X3NpbXBsZV9wcm9tcHRfcHJvdmlkZXIoXCZzaW1wbGUsIDIpOworICAgIG15ICRjYWNoZWRfc3NsID0gU1ZOOjpDbGllbnQ6OmdldF9zc2xfc2VydmVyX3RydXN0X2ZpbGVfcHJvdmlkZXIoKTsKKyAgICBteSAkZ2l0X3NzbCA9IFNWTjo6Q2xpZW50OjpnZXRfc3NsX3NlcnZlcl90cnVzdF9wcm9tcHRfcHJvdmlkZXIoCisgICAgICAgIFwmc3NsX3NlcnZlcl90cnVzdCk7CisgICAgbXkgJGNhY2hlZF9jZXJ0ID0gU1ZOOjpDbGllbnQ6OmdldF9zc2xfY2xpZW50X2NlcnRfZmlsZV9wcm92aWRlcigpOworICAgIG15ICRnaXRfY2VydCA9IFNWTjo6Q2xpZW50OjpnZXRfc3NsX2NsaWVudF9jZXJ0X3Byb21wdF9wcm92aWRlcigKKyAgICAgICAgXCZzc2xfY2xpZW50X2NlcnQsIDIpOworICAgIG15ICRjYWNoZWRfY2VydF9wdyA9IFNWTjo6Q2xpZW50OjpnZXRfc3NsX2NsaWVudF9jZXJ0X3B3X2ZpbGVfcHJvdmlkZXIoKTsKKyAgICBteSAkZ2l0X2NlcnRfcHcgPSBTVk46OkNsaWVudDo6Z2V0X3NzbF9jbGllbnRfY2VydF9wd19wcm9tcHRfcHJvdmlkZXIoCisgICAgICAgIFwmc3NsX2NsaWVudF9jZXJ0X3B3LCAyKTsKKyAgICBteSAkY2FjaGVkX3VzZXJuYW1lID0gU1ZOOjpDbGllbnQ6OmdldF91c2VybmFtZV9wcm92aWRlcigpOworICAgIG15ICRnaXRfdXNlcm5hbWUgPSBTVk46OkNsaWVudDo6Z2V0X3VzZXJuYW1lX3Byb21wdF9wcm92aWRlcigKKyAgICAgICAgXCZ1c2VybmFtZSwgMik7CisKKyAgICBteSAkY3R4ID0gbmV3IFNWTjo6Q2xpZW50KAorICAgICAgICBhdXRoID0+IFsKKyAgICAgICAgICAgICRjYWNoZWRfc2ltcGxlLCAkZ2l0X3NpbXBsZSwKKyAgICAgICAgICAgICRjYWNoZWRfc3NsLCAkZ2l0X3NzbCwKKyAgICAgICAgICAgICRjYWNoZWRfY2VydCwgJGdpdF9jZXJ0LAorICAgICAgICAgICAgJGNhY2hlZF9jZXJ0X3B3LCAkZ2l0X2NlcnRfcHcsCisgICAgICAgICAgICAkY2FjaGVkX3VzZXJuYW1lLCAkZ2l0X3VzZXJuYW1lCisgICAgICAgIF0pOworCis9aGVhZDEgREVTQ1JJUFRJT04KKworVGhpcyBtb2R1bGUgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIHRoZSAiZ2l0IHN2biIgY29tbWFuZC4KK0l0IGltcGxlbWVudHMgZ2l0LXN2bidzIGF1dGhlbnRpY2F0aW9uIHBvbGljeS4gIERvIG5vdCB1c2UgaXQgdW5sZXNzCit5b3UgYXJlIGRldmVsb3BpbmcgZ2l0LXN2bi4KKworVGhlIGludGVyZmFjZSB3aWxsIGNoYW5nZSBhcyBnaXQtc3ZuIGV2b2x2ZXMuCisKKz1oZWFkMSBERVBFTkRFTkNJRVMKKworTDxTVk46OkNvcmU+LgorCis9aGVhZDEgU0VFIEFMU08KKworTDxTVk46OkNsaWVudD4uCisKKz1oZWFkMSBJTkNPTVBBVElCSUxJVElFUworCitOb25lIHJlcG9ydGVkLgorCis9aGVhZDEgQlVHUworCitOb25lLgpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOL1JhLnBtIGIvcGVybC9HaXQvU1ZOL1JhLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNDk5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vUmEucG0KQEAgLTAsMCArMSw3MDQgQEAKK3BhY2thZ2UgR2l0OjpTVk46OlJhOwordXNlIHZhcnMgcXcvQElTQSAkY29uZmlnX2RpciAkX2lnbm9yZV9yZWZzX3JlZ2V4ICRfbG9nX3dpbmRvd19zaXplLzsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgTWVtb2l6ZTsKK3VzZSBHaXQ6OlNWTjo6VXRpbHMgcXcoCisJY2Fub25pY2FsaXplX3VybAorCWNhbm9uaWNhbGl6ZV9wYXRoCisJYWRkX3BhdGhfdG9fdXJsCispOworCit1c2UgU1ZOOjpSYTsKK0JFR0lOIHsKKwlASVNBID0gcXcoU1ZOOjpSYSk7Cit9CisKK215ICgkcmFfaW52YWxpZCwgJGNhbl9kb19zd2l0Y2gsICVpZ25vcmVkX2VyciwgJFJBKTsKKworQkVHSU4geworCSMgZW5mb3JjZSB0ZW1wb3JhcnkgcG9vbCB1c2FnZSBmb3Igc29tZSBzaW1wbGUgZnVuY3Rpb25zCisJbm8gc3RyaWN0ICdyZWZzJzsKKwlmb3IgbXkgJGYgKHF3L3Jldl9wcm9wbGlzdCBnZXRfbGF0ZXN0X3Jldm51bSBnZXRfdXVpZCBnZXRfcmVwb3Nfcm9vdAorCSAgICAgICAgICAgICAgZ2V0X2ZpbGUvKSB7CisJCW15ICRTVVBFUiA9ICJTVVBFUjo6JGYiOworCQkqJGYgPSBzdWIgeworCQkJbXkgJHNlbGYgPSBzaGlmdDsKKwkJCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisJCQlteSBAcmV0ID0gJHNlbGYtPiRTVVBFUihAXywkcG9vbCk7CisJCQkkcG9vbC0+Y2xlYXI7CisJCQl3YW50YXJyYXkgPyBAcmV0IDogJHJldFswXTsKKwkJfTsKKwl9Cit9CisKKyMgc2VyZiBoYXMgYSBidWcgdGhhdCBsZWFkcyB0byBhIGNvcmVkdW1wIHVwb24gdGVybWluYXRpb24gaWYgdGhlCisjIHJlbW90ZSBhY2Nlc3Mgb2JqZWN0IGlzIGxlZnQgYXJvdW5kIChub3QgZml4ZWQgeWV0IGluIHNlcmYgMS4zLjEpLgorIyBFeHBsaWNpdGx5IGZyZWUgaXQgdG8gd29yayBhcm91bmQgdGhlIGlzc3VlLgorRU5EIHsKKwkkUkEgPSB1bmRlZjsKKwkkcmFfaW52YWxpZCA9IDE7Cit9CisKK3N1YiBfYXV0aF9wcm92aWRlcnMgKCkgeworCXJlcXVpcmUgU1ZOOjpDbGllbnQ7CisJbXkgQHJ2ID0gKAorCSAgU1ZOOjpDbGllbnQ6OmdldF9zaW1wbGVfcHJvdmlkZXIoKSwKKwkgIFNWTjo6Q2xpZW50OjpnZXRfc3NsX3NlcnZlcl90cnVzdF9maWxlX3Byb3ZpZGVyKCksCisJICBTVk46OkNsaWVudDo6Z2V0X3NpbXBsZV9wcm9tcHRfcHJvdmlkZXIoCisJICAgIFwmR2l0OjpTVk46OlByb21wdDo6c2ltcGxlLCAyKSwKKwkgIFNWTjo6Q2xpZW50OjpnZXRfc3NsX2NsaWVudF9jZXJ0X2ZpbGVfcHJvdmlkZXIoKSwKKwkgIFNWTjo6Q2xpZW50OjpnZXRfc3NsX2NsaWVudF9jZXJ0X3Byb21wdF9wcm92aWRlcigKKwkgICAgXCZHaXQ6OlNWTjo6UHJvbXB0Ojpzc2xfY2xpZW50X2NlcnQsIDIpLAorCSAgU1ZOOjpDbGllbnQ6OmdldF9zc2xfY2xpZW50X2NlcnRfcHdfZmlsZV9wcm92aWRlcigpLAorCSAgU1ZOOjpDbGllbnQ6OmdldF9zc2xfY2xpZW50X2NlcnRfcHdfcHJvbXB0X3Byb3ZpZGVyKAorCSAgICBcJkdpdDo6U1ZOOjpQcm9tcHQ6OnNzbF9jbGllbnRfY2VydF9wdywgMiksCisJICBTVk46OkNsaWVudDo6Z2V0X3VzZXJuYW1lX3Byb3ZpZGVyKCksCisJICBTVk46OkNsaWVudDo6Z2V0X3NzbF9zZXJ2ZXJfdHJ1c3RfcHJvbXB0X3Byb3ZpZGVyKAorCSAgICBcJkdpdDo6U1ZOOjpQcm9tcHQ6OnNzbF9zZXJ2ZXJfdHJ1c3QpLAorCSAgU1ZOOjpDbGllbnQ6OmdldF91c2VybmFtZV9wcm9tcHRfcHJvdmlkZXIoCisJICAgIFwmR2l0OjpTVk46OlByb21wdDo6dXNlcm5hbWUsIDIpCisJKTsKKworCSMgZWFybGllciAxLjYueCB2ZXJzaW9ucyB3b3VsZCBzZWdmYXVsdCwgYW5kIDw9IDEuNS54IGRpZG4ndCBoYXZlCisJIyB0aGlzIGZ1bmN0aW9uCisJaWYgKDo6Y29tcGFyZV9zdm5fdmVyc2lvbignMS42LjE1JykgPj0gMCkgeworCQlteSAkY29uZmlnID0gU1ZOOjpDb3JlOjpjb25maWdfZ2V0X2NvbmZpZygkY29uZmlnX2Rpcik7CisJCW15ICgkcCwgQGEpOworCQkjIGNvbmZpZ19nZXRfY29uZmlnIHJldHVybnMgYWxsIGNvbmZpZyBmaWxlcyBmcm9tCisJCSMgfi8uc3VidmVyc2lvbiwgYXV0aF9nZXRfcGxhdGZvcm1fc3BlY2lmaWNfY2xpZW50X3Byb3ZpZGVycworCQkjIGp1c3Qgd2FudHMgdGhlIGNvbmZpZyAiZmlsZSIuCisJCUBhID0gKCRjb25maWctPnsnY29uZmlnJ30sIHVuZGVmKTsKKwkJJHAgPSBTVk46OkNvcmU6OmF1dGhfZ2V0X3BsYXRmb3JtX3NwZWNpZmljX2NsaWVudF9wcm92aWRlcnMoQGEpOworCQkjIEluc2VydCB0aGUgcmV0dXJuIHZhbHVlIGZyb20KKwkJIyBhdXRoX2dldF9wbGF0Zm9ybV9zcGVjaWZpY19wcm92aWRlcnMKKwkJdW5zaGlmdCBAcnYsIEAkcDsKKwl9CisJXEBydjsKK30KKworc3ViIHByZXBhcmVfY29uZmlnX29uY2UgeworCVNWTjo6X0NvcmU6OnN2bl9jb25maWdfZW5zdXJlKCRjb25maWdfZGlyLCB1bmRlZik7CisJbXkgKCRiYXRvbiwgJGNhbGxiYWNrcykgPSBTVk46OkNvcmU6OmF1dGhfb3Blbl9oZWxwZXIoX2F1dGhfcHJvdmlkZXJzKTsKKwlteSAkY29uZmlnID0gU1ZOOjpDb3JlOjpjb25maWdfZ2V0X2NvbmZpZygkY29uZmlnX2Rpcik7CisJbXkgJGRvbnRfc3RvcmVfcGFzc3dvcmRzID0gMTsKKwlteSAkY29uZl90ID0gJGNvbmZpZy0+eydjb25maWcnfTsKKworCW5vIHdhcm5pbmdzICdvbmNlJzsKKwkjIFRoZSB1c2FnZSBvZiAkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR18qIHZhcmlhYmxlcworCSMgcHJvZHVjZXMgd2FybmluZ3MgdGhhdCB2YXJpYWJsZXMgYXJlIHVzZWQgb25seSBvbmNlLgorCSMgSSBoYWQgbm90IGZvdW5kIHRoZSBiZXR0ZXIgd2F5IHRvIHNodXQgdGhlbSB1cCwgc28KKwkjIHRoZSB3YXJuaW5ncyBvZiB0eXBlICdvbmNlJyBhcmUgZGlzYWJsZWQgaW4gdGhpcyBibG9jay4KKwlpZiAoU1ZOOjpfQ29yZTo6c3ZuX2NvbmZpZ19nZXRfYm9vbCgkY29uZl90LAorCSAgICAkU1ZOOjpfQ29yZTo6U1ZOX0NPTkZJR19TRUNUSU9OX0FVVEgsCisJICAgICRTVk46Ol9Db3JlOjpTVk5fQ09ORklHX09QVElPTl9TVE9SRV9QQVNTV09SRFMsCisJICAgIDEpID09IDApIHsKKwkJU1ZOOjpfQ29yZTo6c3ZuX2F1dGhfc2V0X3BhcmFtZXRlcigkYmF0b24sCisJCSAgICAkU1ZOOjpfQ29yZTo6U1ZOX0FVVEhfUEFSQU1fRE9OVF9TVE9SRV9QQVNTV09SRFMsCisJCSAgICBibGVzcyAoXCRkb250X3N0b3JlX3Bhc3N3b3JkcywgIl9wX3ZvaWQiKSk7CisJfQorCWlmIChTVk46Ol9Db3JlOjpzdm5fY29uZmlnX2dldF9ib29sKCRjb25mX3QsCisJICAgICRTVk46Ol9Db3JlOjpTVk5fQ09ORklHX1NFQ1RJT05fQVVUSCwKKwkgICAgJFNWTjo6X0NvcmU6OlNWTl9DT05GSUdfT1BUSU9OX1NUT1JFX0FVVEhfQ1JFRFMsCisJICAgIDEpID09IDApIHsKKwkJJEdpdDo6U1ZOOjpQcm9tcHQ6Ol9ub19hdXRoX2NhY2hlID0gMTsKKwl9CisKKwlyZXR1cm4gKCRjb25maWcsICRiYXRvbiwgJGNhbGxiYWNrcyk7Cit9ICMgbm8gd2FybmluZ3MgJ29uY2UnCisKK0lOSVQgeworCU1lbW9pemU6Om1lbW9pemUgJ19hdXRoX3Byb3ZpZGVycyc7CisJTWVtb2l6ZTo6bWVtb2l6ZSAncHJlcGFyZV9jb25maWdfb25jZSc7Cit9CisKK3N1YiBuZXcgeworCW15ICgkY2xhc3MsICR1cmwpID0gQF87CisJJHVybCA9IGNhbm9uaWNhbGl6ZV91cmwoJHVybCk7CisJcmV0dXJuICRSQSBpZiAoJFJBICYmICRSQS0+dXJsIGVxICR1cmwpOworCisJOjpfcmVxX3N2bigpOworCisJJFJBID0gdW5kZWY7CisJbXkgKCRjb25maWcsICRiYXRvbiwgJGNhbGxiYWNrcykgPSBwcmVwYXJlX2NvbmZpZ19vbmNlKCk7CisJbXkgJHNlbGYgPSBTVk46OlJhLT5uZXcodXJsID0+ICR1cmwsIGF1dGggPT4gJGJhdG9uLAorCSAgICAgICAgICAgICAgICAgICAgICBjb25maWcgPT4gJGNvbmZpZywKKwkJCSAgICAgIHBvb2wgPT4gU1ZOOjpQb29sLT5uZXcsCisJICAgICAgICAgICAgICAgICAgICAgIGF1dGhfcHJvdmlkZXJfY2FsbGJhY2tzID0+ICRjYWxsYmFja3MpOworCSRSQSA9IGJsZXNzICRzZWxmLCAkY2xhc3M7CisKKwkjIE1ha2Ugc3VyZSBpdHMgY2Fub25pY2FsaXplZAorCSRzZWxmLT51cmwoJHVybCk7CisJJHNlbGYtPntzdm5fcGF0aH0gPSAkdXJsOworCSRzZWxmLT57cmVwb3Nfcm9vdH0gPSAkc2VsZi0+Z2V0X3JlcG9zX3Jvb3Q7CisJJHNlbGYtPntzdm5fcGF0aH0gPX4gcyNeXFEkc2VsZi0+e3JlcG9zX3Jvb3R9XEUoL3wkKSMjOworCSRzZWxmLT57Y2FjaGV9ID0geyBjaGVja19wYXRoID0+IHsgciA9PiAwLCBkYXRhID0+IHt9IH0sCisJICAgICAgICAgICAgICAgICAgIGdldF9kaXIgPT4geyByID0+IDAsIGRhdGEgPT4ge30gfSB9OworCisJcmV0dXJuICRSQTsKK30KKworc3ViIHVybCB7CisJbXkgJHNlbGYgPSBzaGlmdDsKKworCWlmIChAXykgeworCQlteSAkdXJsID0gc2hpZnQ7CisJCSRzZWxmLT57dXJsfSA9IGNhbm9uaWNhbGl6ZV91cmwoJHVybCk7CisJCXJldHVybjsKKwl9CisKKwlyZXR1cm4gJHNlbGYtPnt1cmx9OworfQorCitzdWIgY2hlY2tfcGF0aCB7CisJbXkgKCRzZWxmLCAkcGF0aCwgJHIpID0gQF87CisJbXkgJGNhY2hlID0gJHNlbGYtPntjYWNoZX0tPntjaGVja19wYXRofTsKKwlpZiAoJHIgPT0gJGNhY2hlLT57cn0gJiYgZXhpc3RzICRjYWNoZS0+e2RhdGF9LT57JHBhdGh9KSB7CisJCXJldHVybiAkY2FjaGUtPntkYXRhfS0+eyRwYXRofTsKKwl9CisJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ldzsKKwlteSAkdCA9ICRzZWxmLT5TVVBFUjo6Y2hlY2tfcGF0aCgkcGF0aCwgJHIsICRwb29sKTsKKwkkcG9vbC0+Y2xlYXI7CisJaWYgKCRyICE9ICRjYWNoZS0+e3J9KSB7CisJCSV7JGNhY2hlLT57ZGF0YX19ID0gKCk7CisJCSRjYWNoZS0+e3J9ID0gJHI7CisJfQorCSRjYWNoZS0+e2RhdGF9LT57JHBhdGh9ID0gJHQ7Cit9CisKK3N1YiBnZXRfZGlyIHsKKwlteSAoJHNlbGYsICRkaXIsICRyKSA9IEBfOworCW15ICRjYWNoZSA9ICRzZWxmLT57Y2FjaGV9LT57Z2V0X2Rpcn07CisJaWYgKCRyID09ICRjYWNoZS0+e3J9KSB7CisJCWlmIChteSAkeCA9ICRjYWNoZS0+e2RhdGF9LT57JGRpcn0pIHsKKwkJCXJldHVybiB3YW50YXJyYXkgPyBAJHggOiAkeC0+WzBdOworCQl9CisJfQorCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisJbXkgKCRkLCB1bmRlZiwgJHByb3BzKTsKKworCWlmICg6OmNvbXBhcmVfc3ZuX3ZlcnNpb24oJzEuNC4wJykgPj0gMCkgeworCQkjIG4uYi4gaW4gYWRkaXRpb24gdG8gYmVpbmcgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQsCisJCSMgdGhpcyB3b3JrcyBhcm91bmQgd2hhdCBhcHBlYXJzIHRvIGJlIGEgYnVnIGluIHNvbWUKKwkJIyBTVk4gMS44IHZlcnNpb25zCisJCW15ICRraW5kID0gMTsgIyBTVk5fRElSRU5UX0tJTkQKKwkJKCRkLCB1bmRlZiwgJHByb3BzKSA9ICRzZWxmLT5nZXRfZGlyMigkZGlyLCAkciwgJGtpbmQsICRwb29sKTsKKwl9IGVsc2UgeworCQkoJGQsIHVuZGVmLCAkcHJvcHMpID0gJHNlbGYtPlNVUEVSOjpnZXRfZGlyKCRkaXIsICRyLCAkcG9vbCk7CisJfQorCW15ICVkaXJlbnRzID0gbWFwIHsgJF8gPT4geyBraW5kID0+ICRkLT57JF99LT5raW5kIH0gfSBrZXlzICUkZDsKKwkkcG9vbC0+Y2xlYXI7CisJaWYgKCRyICE9ICRjYWNoZS0+e3J9KSB7CisJCSV7JGNhY2hlLT57ZGF0YX19ID0gKCk7CisJCSRjYWNoZS0+e3J9ID0gJHI7CisJfQorCSRjYWNoZS0+e2RhdGF9LT57JGRpcn0gPSBbIFwlZGlyZW50cywgJHIsICRwcm9wcyBdOworCXdhbnRhcnJheSA/IChcJWRpcmVudHMsICRyLCAkcHJvcHMpIDogXCVkaXJlbnRzOworfQorCisjIGdldF9sb2cocGF0aHMsIHN0YXJ0LCBlbmQsIGxpbWl0LAorIyAgICAgICAgIGRpc2NvdmVyX2NoYW5nZWRfcGF0aHMsIHN0cmljdF9ub2RlX2hpc3RvcnksIHJlY2VpdmVyKQorc3ViIGdldF9sb2cgeworCW15ICgkc2VsZiwgQGFyZ3MpID0gQF87CisJbXkgJHBvb2wgPSBTVk46OlBvb2wtPm5ldzsKKworCSMgc3ZuX2xvZ19jaGFuZ2VkX3BhdGhfdCBvYmplY3RzIHBhc3NlZCB0byBnZXRfbG9nIGFyZSBsaWtlbHkgdG8gYmUKKwkjIG92ZXJ3cml0dGVuIGV2ZW4gaWYgb25seSB0aGUgcmVmcyBhcmUgY29waWVkIHRvIGFuIGV4dGVybmFsIHZhcmlhYmxlLAorCSMgc28gd2Ugc2hvdWxkIGR1cCB0aGUgc3RydWN0dXJlcyBpbiB0aGVpciBlbnRpcmV0eS4gIFVzaW5nIGFuCisJIyBleHRlcm5hbGx5IHBhc3NlZCBwb29sIChpbnN0ZWFkIG9mIG91ciB0ZW1wb3JhcnkgYW5kIHF1aWNrbHkgY2xlYXJlZAorCSMgcG9vbCBpbiBHaXQ6OlNWTjo6UmEpIGRvZXMgbm90IGhlbHAgbWF0dGVycyBhdCBhbGwuLi4KKwlteSAkcmVjZWl2ZXIgPSBwb3AgQGFyZ3M7CisJbXkgJHByZWZpeCA9ICIvIi4kc2VsZi0+e3N2bl9wYXRofTsKKwkkcHJlZml4ID1+IHMjLysoJCkjIzsKKwlteSAkcHJlZml4X3JlZ2V4ID0gcXIjXlxRJHByZWZpeFxFIzsKKwlwdXNoKEBhcmdzLCBzdWIgeworCQlteSAoJHBhdGhzKSA9ICRfWzBdOworCQlyZXR1cm4gJiRyZWNlaXZlcihAXykgdW5sZXNzICRwYXRoczsKKwkJJF9bMF0gPSAoKTsKKwkJZm9yZWFjaCBteSAkcCAoa2V5cyAlJHBhdGhzKSB7CisJCQlteSAkaSA9ICRwYXRocy0+eyRwfTsKKwkJCSMgTWFrZSBwYXRoIHJlbGF0aXZlIHRvIG91ciB1cmwsIG5vdCByZXBvc19yb290CisJCQkkcCA9fiBzLyRwcmVmaXhfcmVnZXgvLzsKKwkJCW15ICVzID0gbWFwIHsgJF8gPT4gJGktPiRfOyB9CisJCQkJcXcvY29weWZyb21fcGF0aCBjb3B5ZnJvbV9yZXYgYWN0aW9uLzsKKwkJCWlmICgkc3snY29weWZyb21fcGF0aCd9KSB7CisJCQkJJHN7J2NvcHlmcm9tX3BhdGgnfSA9fiBzLyRwcmVmaXhfcmVnZXgvLzsKKwkJCQkkc3snY29weWZyb21fcGF0aCd9ID0gY2Fub25pY2FsaXplX3BhdGgoJHN7J2NvcHlmcm9tX3BhdGgnfSk7CisJCQl9CisJCQkkX1swXXskcH0gPSBcJXM7CisJCX0KKwkJJiRyZWNlaXZlcihAXyk7CisJfSk7CisKKworCSMgdGhlIGxpbWl0IHBhcmFtZXRlciB3YXMgbm90IHN1cHBvcnRlZCBpbiBTVk4gMS4xLngsIHNvIHdlCisJIyBkcm9wIGl0LiAgVGhlcmVmb3JlLCB0aGUgcmVjZWl2ZXIgY2FsbGJhY2sgcGFzc2VkIHRvIGl0CisJIyBpcyBtYWRlIGF3YXJlIG9mIHRoaXMgbGltaXRhdGlvbiBieSBiZWluZyB3cmFwcGVkIGlmCisJIyB0aGUgbGltaXQgcGFzc2VkIHRvIGlzIGJlaW5nIHdyYXBwZWQuCisJaWYgKDo6Y29tcGFyZV9zdm5fdmVyc2lvbignMS4yLjAnKSA8PSAwKSB7CisJCW15ICRsaW1pdCA9IHNwbGljZShAYXJncywgMywgMSk7CisJCWlmICgkbGltaXQgPiAwKSB7CisJCQlteSAkcmVjZWl2ZXIgPSBwb3AgQGFyZ3M7CisJCQlwdXNoKEBhcmdzLCBzdWIgeyAmJHJlY2VpdmVyKEBfKSBpZiAoLS0kbGltaXQgPj0gMCkgfSk7CisJCX0KKwl9CisJbXkgJHJldCA9ICRzZWxmLT5TVVBFUjo6Z2V0X2xvZyhAYXJncywgJHBvb2wpOworCSRwb29sLT5jbGVhcjsKKwkkcmV0OworfQorCisjIHVuY29tbW9uLCBvbmx5IGZvciBhbmNpZW50IFNWTiAoPD0gMS40LjIpCitzdWIgdHJlZXNfbWF0Y2ggeworCXJlcXVpcmUgSU86OkZpbGU7CisJcmVxdWlyZSBTVk46OkNsaWVudDsKKwlteSAoJHNlbGYsICR1cmwxLCAkcmV2MSwgJHVybDIsICRyZXYyKSA9IEBfOworCW15ICRjdHggPSBTVk46OkNsaWVudC0+bmV3KGF1dGggPT4gX2F1dGhfcHJvdmlkZXJzKTsKKwlteSAkb3V0ID0gSU86OkZpbGUtPm5ld190bXBmaWxlOworCisJIyBvbGRlciBTVk4gKDEuMS54KSBkb2Vzbid0IHRha2UgJHBvb2wgYXMgdGhlIGxhc3QgcGFyYW1ldGVyIGZvcgorCSMgJGN0eC0+ZGlmZigpLCBzbyB3ZSdsbCBjcmVhdGUgYSBkZWZhdWx0IG9uZQorCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXdfZGVmYXVsdF9zdWI7CisKKwkkcmFfaW52YWxpZCA9IDE7ICMgdGhpcyB3aWxsIG9wZW4gYSBuZXcgU1ZOOjpSYSBjb25uZWN0aW9uIHRvICR1cmwxCisJJGN0eC0+ZGlmZihbXSwgJHVybDEsICRyZXYxLCAkdXJsMiwgJHJldjIsIDEsIDEsIDAsICRvdXQsICRvdXQpOworCSRvdXQtPmZsdXNoOworCW15ICRyZXQgPSAoKCRvdXQtPnN0YXQpWzddID09IDApOworCWNsb3NlICRvdXQgb3IgY3JvYWsgJCE7CisKKwkkcmV0OworfQorCitzdWIgZ2V0X2NvbW1pdF9lZGl0b3IgeworCW15ICgkc2VsZiwgJGxvZywgJGNiLCAkcG9vbCkgPSBAXzsKKworCW15IEBsb2NrID0gKDo6Y29tcGFyZV9zdm5fdmVyc2lvbignMS4yLjAnKSA+PSAwKSA/ICh1bmRlZiwgMCkgOiAoKTsKKwkkc2VsZi0+U1VQRVI6OmdldF9jb21taXRfZWRpdG9yKCRsb2csICRjYiwgQGxvY2ssICRwb29sKTsKK30KKworc3ViIGdzX2RvX3VwZGF0ZSB7CisJbXkgKCRzZWxmLCAkcmV2X2EsICRyZXZfYiwgJGdzLCAkZWRpdG9yKSA9IEBfOworCW15ICRuZXcgPSAoJHJldl9hID09ICRyZXZfYik7CisJbXkgJHBhdGggPSAkZ3MtPnBhdGg7CisKKwlpZiAoJG5ldyAmJiAtZSAkZ3MtPntpbmRleH0pIHsKKwkJdW5saW5rICRncy0+e2luZGV4fSBvciBkaWUKKwkJICAiQ291bGRuJ3QgdW5saW5rIGluZGV4OiAkZ3MtPntpbmRleH06ICQhXG4iOworCX0KKwlteSAkcG9vbCA9IFNWTjo6UG9vbC0+bmV3OworCSRlZGl0b3ItPnNldF9wYXRoX3N0cmlwKCRwYXRoKTsKKwlteSAoQHBjKSA9IHNwbGl0IG0jLyMsICRwYXRoOworCW15ICRyZXBvcnRlciA9ICRzZWxmLT5kb191cGRhdGUoJHJldl9iLCAoQHBjID8gc2hpZnQgQHBjIDogJycpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJGVkaXRvciwgJHBvb2wpOworCW15IEBsb2NrID0gKDo6Y29tcGFyZV9zdm5fdmVyc2lvbignMS4yLjAnKSA+PSAwKSA/ICh1bmRlZikgOiAoKTsKKworCSMgU2luY2Ugd2UgY2FuJ3QgcmVseSBvbiBzdm5fcmFfcmVwYXJlbnQgYmVpbmcgYXZhaWxhYmxlLCB3ZSdsbAorCSMganVzdCBoYXZlIHRvIGRvIHNvbWUgbWFnaWMgd2l0aCBzZXRfcGF0aCB0byBtYWtlIGl0IHNvCisJIyB3ZSBvbmx5IHdhbnQgYSBwYXJ0aWFsIHBhdGguCisJbXkgJHNwID0gJyc7CisJbXkgJGZpbmFsID0gam9pbignLycsIEBwYyk7CisJd2hpbGUgKEBwYykgeworCQkkcmVwb3J0ZXItPnNldF9wYXRoKCRzcCwgJHJldl9iLCAwLCBAbG9jaywgJHBvb2wpOworCQkkc3AgLj0gJy8nIGlmIGxlbmd0aCAkc3A7CisJCSRzcCAuPSBzaGlmdCBAcGM7CisJfQorCWRpZSAiQlVHOiAnJHNwJyAhPSAnJGZpbmFsJ1xuIiBpZiAoJHNwIG5lICRmaW5hbCk7CisKKwkkcmVwb3J0ZXItPnNldF9wYXRoKCRzcCwgJHJldl9hLCAkbmV3LCBAbG9jaywgJHBvb2wpOworCisJJHJlcG9ydGVyLT5maW5pc2hfcmVwb3J0KCRwb29sKTsKKwkkcG9vbC0+Y2xlYXI7CisJJGVkaXRvci0+e2dpdF9jb21taXRfb2t9OworfQorCisjIHRoaXMgcmVxdWlyZXMgU1ZOIDEuNC4zIG9yIGxhdGVyIChkb19zd2l0Y2ggZGlkbid0IHdvcmsgYmVmb3JlIDEuNC4zLCBhbmQKKyMgc3ZuX3JhX3JlcGFyZW50IGRpZG4ndCB3b3JrIGJlZm9yZSAxLjQpCitzdWIgZ3NfZG9fc3dpdGNoIHsKKwlteSAoJHNlbGYsICRyZXZfYSwgJHJldl9iLCAkZ3MsICR1cmxfYiwgJGVkaXRvcikgPSBAXzsKKwlteSAkcGF0aCA9ICRncy0+cGF0aDsKKwlteSAkcG9vbCA9IFNWTjo6UG9vbC0+bmV3OworCisJbXkgJG9sZF91cmwgPSAkc2VsZi0+dXJsOworCW15ICRmdWxsX3VybCA9IGFkZF9wYXRoX3RvX3VybCggJHNlbGYtPnVybCwgJHBhdGggKTsKKwlteSAoJHJhLCAkcmVwYXJlbnRlZCk7CisKKwlpZiAoJG9sZF91cmwgPX4gbSNec3ZuKFwrXHcrKT86Ly8jIHx8CisJICAgICgkZnVsbF91cmwgPX4gbSNeaHR0cHM/Oi8vIyAmJgorCSAgICAgY2Fub25pY2FsaXplX3VybCgkZnVsbF91cmwpIG5lICRmdWxsX3VybCkpIHsKKwkJJF9bMF0gPSB1bmRlZjsKKwkJJHNlbGYgPSB1bmRlZjsKKwkJJFJBID0gdW5kZWY7CisJCSRyYSA9IEdpdDo6U1ZOOjpSYS0+bmV3KCRmdWxsX3VybCk7CisJCSRyYV9pbnZhbGlkID0gMTsKKwl9IGVsc2lmICgkb2xkX3VybCBuZSAkZnVsbF91cmwpIHsKKwkJU1ZOOjpfUmE6OnN2bl9yYV9yZXBhcmVudCgKKwkJCSRzZWxmLT57c2Vzc2lvbn0sCisJCQljYW5vbmljYWxpemVfdXJsKCRmdWxsX3VybCksCisJCQkkcG9vbAorCQkpOworCQkkc2VsZi0+dXJsKCRmdWxsX3VybCk7CisJCSRyZXBhcmVudGVkID0gMTsKKwl9CisKKwkkcmEgfHw9ICRzZWxmOworCSR1cmxfYiA9IGNhbm9uaWNhbGl6ZV91cmwoJHVybF9iKTsKKwlteSAkcmVwb3J0ZXIgPSAkcmEtPmRvX3N3aXRjaCgkcmV2X2IsICcnLCAxLCAkdXJsX2IsICRlZGl0b3IsICRwb29sKTsKKwlteSBAbG9jayA9ICg6OmNvbXBhcmVfc3ZuX3ZlcnNpb24oJzEuMi4wJykgPj0gMCkgPyAodW5kZWYpIDogKCk7CisJJHJlcG9ydGVyLT5zZXRfcGF0aCgnJywgJHJldl9hLCAwLCBAbG9jaywgJHBvb2wpOworCSRyZXBvcnRlci0+ZmluaXNoX3JlcG9ydCgkcG9vbCk7CisKKwlpZiAoJHJlcGFyZW50ZWQpIHsKKwkJU1ZOOjpfUmE6OnN2bl9yYV9yZXBhcmVudCgkc2VsZi0+e3Nlc3Npb259LCAkb2xkX3VybCwgJHBvb2wpOworCQkkc2VsZi0+dXJsKCRvbGRfdXJsKTsKKwl9CisKKwkkcG9vbC0+Y2xlYXI7CisJJGVkaXRvci0+e2dpdF9jb21taXRfb2t9OworfQorCitzdWIgbG9uZ2VzdF9jb21tb25fcGF0aCB7CisJbXkgKCRnc3YsICRnbG9icykgPSBAXzsKKwlteSAlY29tbW9uOworCW15ICRjb21tb25fbWF4ID0gc2NhbGFyIEAkZ3N2OworCisJZm9yZWFjaCBteSAkZ3MgKEAkZ3N2KSB7CisJCW15IEB0bXAgPSBzcGxpdCBtIy8jLCAkZ3MtPnBhdGg7CisJCW15ICRwID0gJyc7CisJCWZvcmVhY2ggKEB0bXApIHsKKwkJCSRwIC49IGxlbmd0aCgkcCkgPyAiLyRfIiA6ICRfOworCQkJJGNvbW1vbnskcH0gfHw9IDA7CisJCQkkY29tbW9ueyRwfSsrOworCQl9CisJfQorCSRnbG9icyB8fD0gW107CisJJGNvbW1vbl9tYXggKz0gc2NhbGFyIEAkZ2xvYnM7CisJZm9yZWFjaCBteSAkZ2xvYiAoQCRnbG9icykgeworCQlteSBAdG1wID0gc3BsaXQgbSMvIywgJGdsb2ItPntwYXRofS0+e2xlZnR9OworCQlteSAkcCA9ICcnOworCQlmb3JlYWNoIChAdG1wKSB7CisJCQkkcCAuPSBsZW5ndGgoJHApID8gIi8kXyIgOiAkXzsKKwkJCSRjb21tb257JHB9IHx8PSAwOworCQkJJGNvbW1vbnskcH0rKzsKKwkJfQorCX0KKworCW15ICRsb25nZXN0X3BhdGggPSAnJzsKKwlmb3JlYWNoIChzb3J0IHtsZW5ndGggJGIgPD0+IGxlbmd0aCAkYX0ga2V5cyAlY29tbW9uKSB7CisJCWlmICgkY29tbW9ueyRffSA9PSAkY29tbW9uX21heCkgeworCQkJJGxvbmdlc3RfcGF0aCA9ICRfOworCQkJbGFzdDsKKwkJfQorCX0KKwkkbG9uZ2VzdF9wYXRoOworfQorCitzdWIgZ3NfZmV0Y2hfbG9vcF9jb21tb24geworCW15ICgkc2VsZiwgJGJhc2UsICRoZWFkLCAkZ3N2LCAkZ2xvYnMpID0gQF87CisJcmV0dXJuIGlmICgkYmFzZSA+ICRoZWFkKTsKKwkjIE1ha2Ugc3VyZSB0aGUgY2F0X2Jsb2Igb3BlbjIgRmlsZUhhbmRsZSBpcyBjcmVhdGVkIGJlZm9yZSBjYWxsaW5nCisJIyBTVk46OlBvb2w6Om5ld19kZWZhdWx0IHNvIHRoYXQgaXQgZG9lcyBub3QgaW5jb3JyZWN0bHkgZW5kIHVwIGluIHRoZSBwb29sLgorCSQ6Ol9yZXBvc2l0b3J5LT5fb3Blbl9jYXRfYmxvYl9pZl9uZWVkZWQ7CisJbXkgJGdwb29sID0gU1ZOOjpQb29sLT5uZXdfZGVmYXVsdDsKKwlteSAkcmFfdXJsID0gJHNlbGYtPnVybDsKKwlteSAkcmVsb2FkX3JhID0gc3ViIHsKKwkJJF9bMF0gPSB1bmRlZjsKKwkJJHNlbGYgPSB1bmRlZjsKKwkJJFJBID0gdW5kZWY7CisJCSRncG9vbC0+Y2xlYXI7CisJCSRzZWxmID0gR2l0OjpTVk46OlJhLT5uZXcoJHJhX3VybCk7CisJCSRyYV9pbnZhbGlkID0gdW5kZWY7CisJfTsKKwlteSAkaW5jID0gJF9sb2dfd2luZG93X3NpemU7CisJbXkgKCRtaW4sICRtYXgpID0gKCRiYXNlLCAkaGVhZCA8ICRiYXNlICsgJGluYyA/ICRoZWFkIDogJGJhc2UgKyAkaW5jKTsKKwlteSAkbG9uZ2VzdF9wYXRoID0gbG9uZ2VzdF9jb21tb25fcGF0aCgkZ3N2LCAkZ2xvYnMpOworCW15ICRmaW5kX3RyYWlsaW5nX2VkZ2U7CisJd2hpbGUgKDEpIHsKKwkJbXkgJXJldnM7CisJCW15ICRlcnI7CisJCW15ICRlcnJfaGFuZGxlciA9ICRTVk46OkVycm9yOjpoYW5kbGVyOworCQkkU1ZOOjpFcnJvcjo6aGFuZGxlciA9IHN1YiB7CisJCQkoJGVycikgPSBAXzsKKwkJCXNraXBfdW5rbm93bl9yZXZzKCRlcnIpOworCQl9OworCQlzdWIgX2NiIHsKKwkJCW15ICgkcGF0aHMsICRyLCAkYXV0aG9yLCAkZGF0ZSwgJGxvZykgPSBAXzsKKwkJCVsgJHBhdGhzLAorCQkJICB7IGF1dGhvciA9PiAkYXV0aG9yLCBkYXRlID0+ICRkYXRlLCBsb2cgPT4gJGxvZyB9IF07CisJCX0KKwkJJHNlbGYtPmdldF9sb2coWyRsb25nZXN0X3BhdGhdLCAkbWluLCAkbWF4LCAwLCAxLCAxLAorCQkgICAgICAgICAgICAgICBzdWIgeyAkcmV2c3skX1sxXX0gPSBfY2IoQF8pIH0pOworCQlpZiAoJGVycikgeworCQkJcHJpbnQgIkNoZWNrZWQgdGhyb3VnaCByJG1heFxyIjsKKwkJfSBlbHNlIHsKKwkJCSRmaW5kX3RyYWlsaW5nX2VkZ2UgPSAxOworCQl9CisJCWlmICgkZXJyIGFuZCAkZmluZF90cmFpbGluZ19lZGdlKSB7CisJCQlwcmludCBTVERFUlIgIlBhdGggJyRsb25nZXN0X3BhdGgnICIsCisJCQkJICAgICAid2FzIHByb2JhYmx5IGRlbGV0ZWQ6XG4iLAorCQkJCSAgICAgJGVyci0+ZXhwYW5kZWRfbWVzc2FnZSwKKwkJCQkgICAgICJcbldpbGwgYXR0ZW1wdCB0byBmb2xsb3cgIiwKKwkJCQkgICAgICJyZXZpc2lvbnMgciRtaW4gLi4gciRtYXggIiwKKwkJCQkgICAgICJjb21taXR0ZWQgYmVmb3JlIHRoZSBkZWxldGlvblxuIjsKKwkJCW15ICRoaSA9ICRtYXg7CisJCQl3aGlsZSAoLS0kaGkgPj0gJG1pbikgeworCQkJCW15ICRvazsKKwkJCQkkc2VsZi0+Z2V0X2xvZyhbJGxvbmdlc3RfcGF0aF0sICRtaW4sICRoaSwKKwkJCQkgICAgICAgICAgICAgICAwLCAxLCAxLCBzdWIgeworCQkJCSAgICAgICAgICAgICAgICRvayA9ICRfWzFdOworCQkJCSAgICAgICAgICAgICAgICRyZXZzeyRfWzFdfSA9IF9jYihAXykgfSk7CisJCQkJaWYgKCRvaykgeworCQkJCQlwcmludCBTVERFUlIgInIkbWluIC4uIHIkb2sgT0tcbiI7CisJCQkJCWxhc3Q7CisJCQkJfQorCQkJfQorCQkJJGZpbmRfdHJhaWxpbmdfZWRnZSA9IDA7CisJCX0KKwkJJFNWTjo6RXJyb3I6OmhhbmRsZXIgPSAkZXJyX2hhbmRsZXI7CisKKwkJbXkgJWV4aXN0cyA9IG1hcCB7ICRfLT5wYXRoID0+ICRfIH0gQCRnc3Y7CisJCWZvcmVhY2ggbXkgJHIgKHNvcnQgeyRhIDw9PiAkYn0ga2V5cyAlcmV2cykgeworCQkJbXkgKCRwYXRocywgJGxvZ2dlZCkgPSBAe2RlbGV0ZSAkcmV2c3skcn19OworCisJCQlmb3JlYWNoIG15ICRncyAoJHNlbGYtPm1hdGNoX2dsb2JzKFwlZXhpc3RzLCAkcGF0aHMsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRnbG9icywgJHIpKSB7CisJCQkJaWYgKCRncy0+cmV2X21hcF9tYXggPj0gJHIpIHsKKwkJCQkJbmV4dDsKKwkJCQl9CisJCQkJbmV4dCB1bmxlc3MgJGdzLT5tYXRjaF9wYXRocygkcGF0aHMsICRyKTsKKwkJCQkkZ3MtPntsb2dnZWRfcmV2X3Byb3BzfSA9ICRsb2dnZWQ7CisJCQkJaWYgKG15ICRsYXN0X2NvbW1pdCA9ICRncy0+bGFzdF9jb21taXQpIHsKKwkJCQkJJGdzLT5hc3NlcnRfaW5kZXhfY2xlYW4oJGxhc3RfY29tbWl0KTsKKwkJCQl9CisJCQkJbXkgJGxvZ19lbnRyeSA9ICRncy0+ZG9fZmV0Y2goJHBhdGhzLCAkcik7CisJCQkJaWYgKCRsb2dfZW50cnkpIHsKKwkJCQkJJGdzLT5kb19naXRfY29tbWl0KCRsb2dfZW50cnkpOworCQkJCX0KKwkJCQkkR2l0OjpTVk46OklOREVYX0ZJTEVTeyRncy0+e2luZGV4fX0gPSAxOworCQkJfQorCQkJZm9yZWFjaCBteSAkZyAoQCRnbG9icykgeworCQkJCW15ICRrID0gInN2bi1yZW1vdGUuJGctPntyZW1vdGV9LiIgLgorCQkJCSAgICAgICAgIiRnLT57dH0tbWF4UmV2IjsKKwkJCQlHaXQ6OlNWTjo6dG1wX2NvbmZpZygkaywgJHIpOworCQkJfQorCQkJJHJlbG9hZF9yYS0+KCkgaWYgJHJhX2ludmFsaWQ7CisJCX0KKwkJIyBwcmUtZmlsbCB0aGUgLnJldl9kYiBzaW5jZSBpdCdsbCBldmVudHVhbGx5IGdldCBmaWxsZWQgaW4KKwkJIyB3aXRoICcwJyB4NDAgaWYgc29tZXRoaW5nIG5ldyBnZXRzIGNvbW1pdHRlZAorCQlmb3JlYWNoIG15ICRncyAoQCRnc3YpIHsKKwkJCW5leHQgaWYgJGdzLT5yZXZfbWFwX21heCA+PSAkbWF4OworCQkJbmV4dCBpZiBkZWZpbmVkICRncy0+cmV2X21hcF9nZXQoJG1heCk7CisJCQkkZ3MtPnJldl9tYXBfc2V0KCRtYXgsIDAgeDQwKTsKKwkJfQorCQlmb3JlYWNoIG15ICRnIChAJGdsb2JzKSB7CisJCQlteSAkayA9ICJzdm4tcmVtb3RlLiRnLT57cmVtb3RlfS4kZy0+e3R9LW1heFJldiI7CisJCQlHaXQ6OlNWTjo6dG1wX2NvbmZpZygkaywgJG1heCk7CisJCX0KKwkJbGFzdCBpZiAkbWF4ID49ICRoZWFkOworCQkkbWluID0gJG1heCArIDE7CisJCSRtYXggKz0gJGluYzsKKwkJJG1heCA9ICRoZWFkIGlmICgkbWF4ID4gJGhlYWQpOworCisJCSRyZWxvYWRfcmEtPigpOworCX0KKwlHaXQ6OlNWTjo6Z2MoKTsKK30KKworc3ViIGdldF9kaXJfZ2xvYmJlZCB7CisJbXkgKCRzZWxmLCAkbGVmdCwgJGRlcHRoLCAkcikgPSBAXzsKKworCW15IEB4ID0gZXZhbCB7ICRzZWxmLT5nZXRfZGlyKCRsZWZ0LCAkcikgfTsKKwlyZXR1cm4gdW5sZXNzIHNjYWxhciBAeCA9PSAzOworCW15ICRkaXJlbnRzID0gJHhbMF07CisJbXkgQGZpbmFsZW50czsKKwlmb3JlYWNoIG15ICRkZSAoa2V5cyAlJGRpcmVudHMpIHsKKwkJbmV4dCBpZiAkZGlyZW50cy0+eyRkZX0tPntraW5kfSAhPSAkU1ZOOjpOb2RlOjpkaXI7CisJCWlmICgkZGVwdGggPiAxKSB7CisJCQlteSBAYXJncyA9ICgiJGxlZnQvJGRlIiwgJGRlcHRoIC0gMSwgJHIpOworCQkJZm9yZWFjaCBteSAkZGlyICgkc2VsZi0+Z2V0X2Rpcl9nbG9iYmVkKEBhcmdzKSkgeworCQkJCXB1c2ggQGZpbmFsZW50cywgIiRkZS8kZGlyIjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXB1c2ggQGZpbmFsZW50cywgJGRlOworCQl9CisJfQorCUBmaW5hbGVudHM7Cit9CisKKyMgcmV0dXJuIHZhbHVlOiAwIC0tIGRvbid0IGlnbm9yZSwgMSAtLSBpZ25vcmUKK3N1YiBpc19yZWZfaWdub3JlZCB7CisJbXkgKCRnLCAkcCkgPSBAXzsKKwlteSAkcmVmbmFtZSA9ICRnLT57cmVmfS0+ZnVsbF9wYXRoKCRwKTsKKwlyZXR1cm4gMSBpZiBkZWZpbmVkKCRnLT57aWdub3JlX3JlZnNfcmVnZXh9KSAmJgorCSAgICAgICAgICAgICRyZWZuYW1lID1+IG0hJGctPntpZ25vcmVfcmVmc19yZWdleH0hOworCXJldHVybiAwIHVubGVzcyBkZWZpbmVkKCRfaWdub3JlX3JlZnNfcmVnZXgpOworCXJldHVybiAxIGlmICRyZWZuYW1lID1+IG0hJF9pZ25vcmVfcmVmc19yZWdleCFvOworCXJldHVybiAwOworfQorCitzdWIgbWF0Y2hfZ2xvYnMgeworCW15ICgkc2VsZiwgJGV4aXN0cywgJHBhdGhzLCAkZ2xvYnMsICRyKSA9IEBfOworCisJc3ViIGdldF9kaXJfY2hlY2sgeworCQlteSAoJHNlbGYsICRleGlzdHMsICRnLCAkcikgPSBAXzsKKworCQlteSBAZGlycyA9ICRzZWxmLT5nZXRfZGlyX2dsb2JiZWQoJGctPntwYXRofS0+e2xlZnR9LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGctPntwYXRofS0+e2RlcHRofSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyKTsKKworCQlmb3JlYWNoIG15ICRkZSAoQGRpcnMpIHsKKwkJCW15ICRwID0gJGctPntwYXRofS0+ZnVsbF9wYXRoKCRkZSk7CisJCQluZXh0IGlmICRleGlzdHMtPnskcH07CisJCQluZXh0IGlmIChsZW5ndGggJGctPntwYXRofS0+e3JpZ2h0fSAmJgorCQkJCSAoJHNlbGYtPmNoZWNrX3BhdGgoJHAsICRyKSAhPQorCQkJCSAgJFNWTjo6Tm9kZTo6ZGlyKSk7CisJCQluZXh0IHVubGVzcyAkcCA9fiAvJGctPntwYXRofS0+e3JlZ2V4fS87CisJCQkkZXhpc3RzLT57JHB9ID0gR2l0OjpTVk4tPmluaXQoJHNlbGYtPnVybCwgJHAsIHVuZGVmLAorCQkJCQkgJGctPntyZWZ9LT5mdWxsX3BhdGgoJGRlKSwgMSk7CisJCX0KKwl9CisJZm9yZWFjaCBteSAkZyAoQCRnbG9icykgeworCQlpZiAobXkgJHBhdGggPSAkcGF0aHMtPnsiLyRnLT57cGF0aH0tPntsZWZ0fSJ9KSB7CisJCQlpZiAoJHBhdGgtPnthY3Rpb259ID1+IC9eW0FSXSQvKSB7CisJCQkJZ2V0X2Rpcl9jaGVjaygkc2VsZiwgJGV4aXN0cywgJGcsICRyKTsKKwkJCX0KKwkJfQorCQlmb3JlYWNoIChrZXlzICUkcGF0aHMpIHsKKwkJCWlmICgvJGctPntwYXRofS0+e2xlZnRfcmVnZXh9LyAmJgorCQkJICAgICEvJGctPntwYXRofS0+e3JlZ2V4fS8pIHsKKwkJCQluZXh0IGlmICRwYXRocy0+eyRffS0+e2FjdGlvbn0gIX4gL15bQVJdJC87CisJCQkJZ2V0X2Rpcl9jaGVjaygkc2VsZiwgJGV4aXN0cywgJGcsICRyKTsKKwkJCX0KKwkJCW5leHQgdW5sZXNzIC8kZy0+e3BhdGh9LT57cmVnZXh9LzsKKwkJCW15ICRwID0gJDE7CisJCQlteSAkcGF0aG5hbWUgPSAkZy0+e3BhdGh9LT5mdWxsX3BhdGgoJHApOworCQkJbmV4dCBpZiBpc19yZWZfaWdub3JlZCgkZywgJHApOworCQkJbmV4dCBpZiAkZXhpc3RzLT57JHBhdGhuYW1lfTsKKwkJCW5leHQgaWYgKCRzZWxmLT5jaGVja19wYXRoKCRwYXRobmFtZSwgJHIpICE9CisJCQkgICAgICAgICAkU1ZOOjpOb2RlOjpkaXIpOworCQkJJGV4aXN0cy0+eyRwYXRobmFtZX0gPSBHaXQ6OlNWTi0+aW5pdCgKKwkJCSAgICAgICAgICAgICAgICAgICAgICAkc2VsZi0+dXJsLCAkcGF0aG5hbWUsIHVuZGVmLAorCQkJICAgICAgICAgICAgICAgICAgICAgICRnLT57cmVmfS0+ZnVsbF9wYXRoKCRwKSwgMSk7CisJCX0KKwkJbXkgJGMgPSAnJzsKKwkJZm9yZWFjaCAoc3BsaXQgbSMvIywgJGctPntwYXRofS0+e2xlZnR9KSB7CisJCQkkYyAuPSAiLyRfIjsKKwkJCW5leHQgdW5sZXNzICgkcGF0aHMtPnskY30gJiYKKwkJCSAgICAgICAgICAgICAoJHBhdGhzLT57JGN9LT57YWN0aW9ufSA9fiAvXltBUl0kLykpOworCQkJZ2V0X2Rpcl9jaGVjaygkc2VsZiwgJGV4aXN0cywgJGcsICRyKTsKKwkJfQorCX0KKwl2YWx1ZXMgJSRleGlzdHM7Cit9CisKK3N1YiBtaW5pbWl6ZV91cmwgeworCW15ICgkc2VsZikgPSBAXzsKKwlyZXR1cm4gJHNlbGYtPnVybCBpZiAoJHNlbGYtPnVybCBlcSAkc2VsZi0+e3JlcG9zX3Jvb3R9KTsKKwlteSAkdXJsID0gJHNlbGYtPntyZXBvc19yb290fTsKKwlteSBAY29tcG9uZW50cyA9IHNwbGl0KG0hLyEsICRzZWxmLT57c3ZuX3BhdGh9KTsKKwlteSAkYyA9ICcnOworCWRvIHsKKwkJJHVybCA9IGFkZF9wYXRoX3RvX3VybCgkdXJsLCAkYyk7CisJCWV2YWwgeworCQkJbXkgJHJhID0gKHJlZiAkc2VsZiktPm5ldygkdXJsKTsKKwkJCW15ICRsYXRlc3QgPSAkcmEtPmdldF9sYXRlc3RfcmV2bnVtOworCQkJJHJhLT5nZXRfbG9nKCIiLCAkbGF0ZXN0LCAwLCAxLCAwLCAxLCBzdWIge30pOworCQl9OworCX0gd2hpbGUgKCRAICYmICgkYyA9IHNoaWZ0IEBjb21wb25lbnRzKSk7CisKKwlyZXR1cm4gY2Fub25pY2FsaXplX3VybCgkdXJsKTsKK30KKworc3ViIGNhbl9kb19zd2l0Y2ggeworCW15ICRzZWxmID0gc2hpZnQ7CisJdW5sZXNzIChkZWZpbmVkICRjYW5fZG9fc3dpdGNoKSB7CisJCW15ICRwb29sID0gU1ZOOjpQb29sLT5uZXc7CisJCW15ICRyZXAgPSBldmFsIHsKKwkJCSRzZWxmLT5kb19zd2l0Y2goMSwgJycsIDAsICRzZWxmLT51cmwsCisJCQkgICAgICAgICAgICAgICAgIFNWTjo6RGVsdGE6OkVkaXRvci0+bmV3LCAkcG9vbCk7CisJCX07CisJCWlmICgkQCkgeworCQkJJGNhbl9kb19zd2l0Y2ggPSAwOworCQl9IGVsc2UgeworCQkJJHJlcC0+YWJvcnRfcmVwb3J0KCRwb29sKTsKKwkJCSRjYW5fZG9fc3dpdGNoID0gMTsKKwkJfQorCQkkcG9vbC0+Y2xlYXI7CisJfQorCSRjYW5fZG9fc3dpdGNoOworfQorCitzdWIgc2tpcF91bmtub3duX3JldnMgeworCW15ICgkZXJyKSA9IEBfOworCW15ICRlcnJubyA9ICRlcnItPmFwcl9lcnIoKTsKKwkjIE1heWJlIHRoZSBicmFuY2ggd2UncmUgdHJhY2tpbmcgZGlkbid0CisJIyBleGlzdCB3aGVuIHRoZSByZXBvIHN0YXJ0ZWQsIHNvIGl0J3MKKwkjIG5vdCBhbiBlcnJvciBpZiBpdCBkb2Vzbid0LCBqdXN0IGNvbnRpbnVlCisJIworCSMgV29uZGVyZnVsbHkgY29uc2lzdGVudCBsaWJyYXJ5LCBlaD8KKwkjIDE2MDAxMyAtIHN2bjovLyBhbmQgZmlsZTovLworCSMgMTc1MDAyIC0gaHR0cChzKTovLworCSMgMTc1MDA3IC0gaHR0cChzKTovLyAodGhpcyByZXBvIHJlcXVpcmVkIGF1dGhvcml6YXRpb24sIHRvby4uLikKKwkjICAgTW9yZSBjb2RlcyBtYXkgYmUgZGlzY292ZXJlZCBsYXRlci4uLgorCWlmICgkZXJybm8gPT0gMTc1MDA3IHx8ICRlcnJubyA9PSAxNzUwMDIgfHwgJGVycm5vID09IDE2MDAxMykgeworCQlteSAkZXJyX2tleSA9ICRlcnItPmV4cGFuZGVkX21lc3NhZ2U7CisJCSMgcmV2aXNpb24gbnVtYmVycyBjaGFuZ2UgZXZlcnkgdGltZSwgZmlsdGVyIHRoZW0gb3V0CisJCSRlcnJfa2V5ID1+IHMvXGQrL1wwL2c7CisJCSRlcnJfa2V5ID0gIiRlcnJub1wwJGVycl9rZXkiOworCQl1bmxlc3MgKCRpZ25vcmVkX2VycnskZXJyX2tleX0pIHsKKwkJCXdhcm4gIlc6IElnbm9yaW5nIGVycm9yIGZyb20gU1ZOLCBwYXRoIHByb2JhYmx5ICIsCisJCQkgICAgICJkb2VzIG5vdCBleGlzdDogKCRlcnJubyk6ICIsCisJCQkgICAgICRlcnItPmV4cGFuZGVkX21lc3NhZ2UsIlxuIjsKKwkJCXdhcm4gIlc6IERvIG5vdCBiZSBhbGFybWVkIGF0IHRoZSBhYm92ZSBtZXNzYWdlICIsCisJCQkgICAgICJnaXQtc3ZuIGlzIGp1c3Qgc2VhcmNoaW5nIGFnZ3Jlc3NpdmVseSBmb3IgIiwKKwkJCSAgICAgIm9sZCBoaXN0b3J5LlxuIiwKKwkJCSAgICAgIlRoaXMgbWF5IHRha2UgYSB3aGlsZSBvbiBsYXJnZSByZXBvc2l0b3JpZXNcbiI7CisJCQkkaWdub3JlZF9lcnJ7JGVycl9rZXl9ID0gMTsKKwkJfQorCQlyZXR1cm47CisJfQorCWRpZSAiRXJyb3IgZnJvbSBTVk4sICgkZXJybm8pOiAiLCAkZXJyLT5leHBhbmRlZF9tZXNzYWdlLCJcbiI7Cit9CisKKzE7CitfX0VORF9fCisKKz1oZWFkMSBOQU1FCisKK0dpdDo6U1ZOOjpSYSAtIFN1YnZlcnNpb24gcmVtb3RlIGFjY2VzcyBmdW5jdGlvbnMgZm9yIGdpdC1zdm4KKworPWhlYWQxIFNZTk9QU0lTCisKKyAgICB1c2UgR2l0OjpTVk46OlJhOworCisgICAgbXkgJHJhID0gR2l0OjpTVk46OlJhLT5uZXcoJGJyYW5jaHVybCk7CisgICAgbXkgKCRkaXJlbnRzLCAkZmV0Y2hlZF9yZXZudW0sICRwcm9wcykgPQorICAgICAgICAkcmEtPmdldF9kaXIoJy4nLCAkU1ZOOjpDb3JlOjpJTlZBTElEX1JFVk5VTSk7CisKKz1oZWFkMSBERVNDUklQVElPTgorCitUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIEw8U1ZOOjpSYT4gbW9kdWxlIGZvciB1c2UgYnkgQjxnaXQtc3ZuPi4KK0l0IGZpbGxzIGluIHNvbWUgZGVmYXVsdCBwYXJhbWV0ZXJzIChzdWNoIGFzIHRoZSBhdXRoZW50aWNhdGlvbgorc2NoZW1lKSwgc21vb3RocyBvdmVyIGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gbGlic3ZuIHZlcnNpb25zLCBhZGRzCitjYWNoaW5nLCBhbmQgaW1wbGVtZW50cyBzb21lIGZ1bmN0aW9ucyBzcGVjaWZpYyB0byBCPGdpdC1zdm4+LgorCitEbyBub3QgdXNlIGl0IHVubGVzcyB5b3UgYXJlIGRldmVsb3BpbmcgZ2l0LXN2bi4gIFRoZSBpbnRlcmZhY2Ugd2lsbAorY2hhbmdlIGFzIGdpdC1zdm4gZXZvbHZlcy4KKworPWhlYWQxIERFUEVOREVOQ0lFUworCitTdWJ2ZXJzaW9uIHBlcmwgYmluZGluZ3MsCitMPEdpdDo6U1ZOPi4KKworQzxHaXQ6OlNWTjo6UmE+IGhhcyBub3QgYmVlbiB0ZXN0ZWQgdXNpbmcgY2FsbGVycyBvdGhlciB0aGFuCitCPGdpdC1zdm4+IGl0c2VsZi4KKworPWhlYWQxIFNFRSBBTFNPCisKK0w8U1ZOOjpSYT4uCisKKz1oZWFkMSBJTkNPTVBBVElCSUxJVElFUworCitOb25lIHJlcG9ydGVkLgorCis9aGVhZDEgQlVHUworCitOb25lLgpkaWZmIC0tZ2l0IGEvcGVybC9HaXQvU1ZOL1V0aWxzLnBtIGIvcGVybC9HaXQvU1ZOL1V0aWxzLnBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMWEwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL0dpdC9TVk4vVXRpbHMucG0KQEAgLTAsMCArMSwyMzIgQEAKK3BhY2thZ2UgR2l0OjpTVk46OlV0aWxzOworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgU1ZOOjpDb3JlOworCit1c2UgYmFzZSBxdyhFeHBvcnRlcik7CisKK291ciBARVhQT1JUX09LID0gcXcoCisJZmF0YWwKKwljYW5fY29tcHJlc3MKKwljYW5vbmljYWxpemVfcGF0aAorCWNhbm9uaWNhbGl6ZV91cmwKKwlqb2luX3BhdGhzCisJYWRkX3BhdGhfdG9fdXJsCispOworCisKKz1oZWFkMSBOQU1FCisKK0dpdDo6U1ZOOjpVdGlscyAtIHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYWNyb3NzIEdpdDo6U1ZOCisKKz1oZWFkMSBTWU5PUFNJUworCisgICAgdXNlIEdpdDo6U1ZOOjpVdGlscyBxdyhmdW5jdGlvbnMgdG8gaW1wb3J0KTsKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoaXMgbW9kdWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyB3aGljaCBhcmUgdXNlZnVsIGFjcm9zcyBtYW55IGRpZmZlcmVudAorcGFydHMgb2YgR2l0OjpTVk4uICBNb3N0bHkgaXQncyBhIHBsYWNlIHRvIHB1dCB1dGlsaXR5IGZ1bmN0aW9ucworcmF0aGVyIHRoYW4gZHVwbGljYXRlIHRoZSBjb2RlIG9yIGhhdmUgY2xhc3NlcyBncmFiYmluZyBhdCBvdGhlcgorY2xhc3Nlcy4KKworPWhlYWQxIEZVTkNUSU9OUworCitBbGwgZnVuY3Rpb25zIGNhbiBiZSBpbXBvcnRlZCBvbmx5IG9uIHJlcXVlc3QuCisKKz1oZWFkMyBmYXRhbAorCisgICAgZmF0YWwoQG1lc3NhZ2UpOworCitEaXNwbGF5IGEgbWVzc2FnZSBhbmQgZXhpdCB3aXRoIGEgZmF0YWwgZXJyb3IgY29kZS4KKworPWN1dAorCisjIE5vdGU6IG5vdCBjZXJ0YWluIHdoeSB0aGlzIGlzIGluIHVzZSBpbnN0ZWFkIG9mIGRpZS4gIFByb2JhYmx5IGJlY2F1c2UKKyMgdGhlIGV4aXQgY29kZSBvZiBkaWUgaXMgMjU1PyAgRG9lc24ndCBhcHBlYXIgdG8gYmUgdXNlZCBjb25zaXN0ZW50bHkuCitzdWIgZmF0YWwgKEApIHsgcHJpbnQgU1RERVJSICJAX1xuIjsgZXhpdCAxIH0KKworCis9aGVhZDMgY2FuX2NvbXByZXNzCisKKyAgICBteSAkY2FuX2NvbXByZXNzID0gY2FuX2NvbXByZXNzOworCitSZXR1cm5zIHRydWUgaWYgQ29tcHJlc3M6OlpsaWIgaXMgYXZhaWxhYmxlLCBmYWxzZSBvdGhlcndpc2UuCisKKz1jdXQKKworbXkgJGNhbl9jb21wcmVzczsKK3N1YiBjYW5fY29tcHJlc3MgeworCXJldHVybiAkY2FuX2NvbXByZXNzIGlmIGRlZmluZWQgJGNhbl9jb21wcmVzczsKKworCXJldHVybiAkY2FuX2NvbXByZXNzID0gZXZhbCB7IHJlcXVpcmUgQ29tcHJlc3M6OlpsaWI7IH07Cit9CisKKworPWhlYWQzIGNhbm9uaWNhbGl6ZV9wYXRoCisKKyAgICBteSAkY2Fub25jYWxpemVkX3BhdGggPSBjYW5vbmljYWxpemVfcGF0aCgkcGF0aCk7CisKK0NvbnZlcnRzICRwYXRoIGludG8gYSBjYW5vbmljYWwgZm9ybSB3aGljaCBpcyBzYWZlIHRvIHBhc3MgdG8gdGhlIFNWTgorQVBJIGFzIGEgZmlsZSBwYXRoLgorCis9Y3V0CisKKyMgVHVybiBmb28vLi4vYmFyIGludG8gYmFyCitzdWIgX2NvbGxhcHNlX2RvdGRvdCB7CisJbXkgJHBhdGggPSBzaGlmdDsKKworCTEgd2hpbGUgJHBhdGggPX4gc3svW14vXSsvK1wuXC59e307CisJMSB3aGlsZSAkcGF0aCA9fiBze1teL10rLytcLlwuL317fTsKKwkxIHdoaWxlICRwYXRoID1+IHN7W14vXSsvK1wuXC59e307CisKKwlyZXR1cm4gJHBhdGg7Cit9CisKKworc3ViIGNhbm9uaWNhbGl6ZV9wYXRoIHsKKwlteSAkcGF0aCA9IHNoaWZ0OworCW15ICRydjsKKworCSMgVGhlIDEuNyB3YXkgdG8gZG8gaXQKKwlpZiAoIGRlZmluZWQgJlNWTjo6X0NvcmU6OnN2bl9kaXJlbnRfY2Fub25pY2FsaXplICkgeworCQkkcGF0aCA9IF9jb2xsYXBzZV9kb3Rkb3QoJHBhdGgpOworCQkkcnYgPSBTVk46Ol9Db3JlOjpzdm5fZGlyZW50X2Nhbm9uaWNhbGl6ZSgkcGF0aCk7CisJfQorCSMgVGhlIDEuNiB3YXkgdG8gZG8gaXQKKwkjIFRoaXMgY2FuIHJldHVybiB1bmRlZiBvbiBzdWJ2ZXJzaW9uLXBlcmwtMS40LjItMi5lbDUgKENlbnRPUyA1LjIpCisJZWxzaWYgKCBkZWZpbmVkICZTVk46Ol9Db3JlOjpzdm5fcGF0aF9jYW5vbmljYWxpemUgKSB7CisJCSRwYXRoID0gX2NvbGxhcHNlX2RvdGRvdCgkcGF0aCk7CisJCSRydiA9IFNWTjo6X0NvcmU6OnN2bl9wYXRoX2Nhbm9uaWNhbGl6ZSgkcGF0aCk7CisJfQorCisJcmV0dXJuICRydiBpZiBkZWZpbmVkICRydjsKKworCSMgTm8gU1ZOIEFQSSBjYW5vbmljYWxpemF0aW9uIGlzIGF2YWlsYWJsZSwgb3IgdGhlIFNWTiBBUEkKKwkjIGRpZG4ndCByZXR1cm4gYSBzdWNjZXNzZnVsIHJlc3VsdCwgZG8gaXQgb3Vyc2VsdmVzCisJcmV0dXJuIF9jYW5vbmljYWxpemVfcGF0aF9vdXJzZWx2ZXMoJHBhdGgpOworfQorCisKK3N1YiBfY2Fub25pY2FsaXplX3BhdGhfb3Vyc2VsdmVzIHsKKwlteSAoJHBhdGgpID0gQF87CisJbXkgJGRvdF9zbGFzaF9hZGRlZCA9IDA7CisJaWYgKHN1YnN0cigkcGF0aCwgMCwgMSkgbmUgIi8iKSB7CisJCSRwYXRoID0gIi4vIiAuICRwYXRoOworCQkkZG90X3NsYXNoX2FkZGVkID0gMTsKKwl9CisJJHBhdGggPX4gcyMvKyMvI2c7CisJJHBhdGggPX4gcyMvXC4oPzovfCQpIy8jZzsKKwkkcGF0aCA9IF9jb2xsYXBzZV9kb3Rkb3QoJHBhdGgpOworCSRwYXRoID1+IHMjLyQjI2c7CisJJHBhdGggPX4gcyNeXC4vIyMgaWYgJGRvdF9zbGFzaF9hZGRlZDsKKwkkcGF0aCA9fiBzI15cLiQjIzsKKwlyZXR1cm4gJHBhdGg7Cit9CisKKworPWhlYWQzIGNhbm9uaWNhbGl6ZV91cmwKKworICAgIG15ICRjYW5vbmljYWxpemVkX3VybCA9IGNhbm9uaWNhbGl6ZV91cmwoJHVybCk7CisKK0NvbnZlcnRzICR1cmwgaW50byBhIGNhbm9uaWNhbCBmb3JtIHdoaWNoIGlzIHNhZmUgdG8gcGFzcyB0byB0aGUgU1ZOCitBUEkgYXMgYSBVUkwuCisKKz1jdXQKKworc3ViIGNhbm9uaWNhbGl6ZV91cmwgeworCW15ICR1cmwgPSBzaGlmdDsKKworCSMgVGhlIDEuNyB3YXkgdG8gZG8gaXQKKwlpZiAoIGRlZmluZWQgJlNWTjo6X0NvcmU6OnN2bl91cmlfY2Fub25pY2FsaXplICkgeworCQlyZXR1cm4gU1ZOOjpfQ29yZTo6c3ZuX3VyaV9jYW5vbmljYWxpemUoJHVybCk7CisJfQorCSMgVGhlcmUgd2Fzbid0IGEgMS42IHdheSB0byBkbyBpdCwgc28gd2UgZG8gaXQgb3Vyc2VsZi4KKwllbHNlIHsKKwkJcmV0dXJuIF9jYW5vbmljYWxpemVfdXJsX291cnNlbHZlcygkdXJsKTsKKwl9Cit9CisKKworc3ViIF9jYW5vbmljYWxpemVfdXJsX3BhdGggeworCW15ICgkdXJpX3BhdGgpID0gQF87CisKKwlteSBAcGFydHM7CisJZm9yZWFjaCBteSAkcGFydCAoc3BsaXQgbXsvK30sICR1cmlfcGF0aCkgeworCQkkcGFydCA9fiBzLyhbXiFcJCUmJygpKissLlwvXHc6PVxAX2B+LV18JSg/IVthLWZBLUYwLTldezJ9KSkvc3ByaW50ZigiJSUlMDJYIixvcmQoJDEpKS9lZzsKKwkJcHVzaCBAcGFydHMsICRwYXJ0OworCX0KKworCXJldHVybiBqb2luKCcvJywgQHBhcnRzKTsKK30KKworc3ViIF9jYW5vbmljYWxpemVfdXJsX291cnNlbHZlcyB7CisJbXkgKCR1cmwpID0gQF87CisJaWYgKCR1cmwgPX4gbSNeKFteOl0rKTovLyhbXi9dKikoLiopJCMpIHsKKwkJbXkgKCRzY2hlbWUsICRkb21haW4sICR1cmkpID0gKCQxLCAkMiwgX2Nhbm9uaWNhbGl6ZV91cmxfcGF0aChjYW5vbmljYWxpemVfcGF0aCgkMykpKTsKKwkJJHVybCA9ICIkc2NoZW1lOi8vJGRvbWFpbiR1cmkiOworCX0KKwkkdXJsOworfQorCisKKz1oZWFkMyBqb2luX3BhdGhzCisKKyAgICBteSAkbmV3X3BhdGggPSBqb2luX3BhdGhzKEBwYXRocyk7CisKK0FwcGVuZHMgQHBhdGhzIHRvZ2V0aGVyIGludG8gYSBzaW5nbGUgcGF0aC4gIEFueSBlbXB0eSBwYXRocyBhcmUgaWdub3JlZC4KKworPWN1dAorCitzdWIgam9pbl9wYXRocyB7CisJbXkgQHBhdGhzID0gQF87CisKKwlAcGF0aHMgPSBncmVwIHsgZGVmaW5lZCAkXyAmJiBsZW5ndGggJF8gfSBAcGF0aHM7CisKKwlyZXR1cm4gJycgdW5sZXNzIEBwYXRoczsKKwlyZXR1cm4gJHBhdGhzWzBdIGlmIEBwYXRocyA9PSAxOworCisJbXkgJG5ld19wYXRoID0gc2hpZnQgQHBhdGhzOworCSRuZXdfcGF0aCA9fiBzey8rJH17fTsKKworCW15ICRsYXN0X3BhdGggPSBwb3AgQHBhdGhzOworCSRsYXN0X3BhdGggPX4gc3teLyt9e307CisKKwlmb3IgbXkgJHBhdGggKEBwYXRocykgeworCQkkcGF0aCA9fiBze14vK317fTsKKwkJJHBhdGggPX4gc3svKyR9e307CisJCSRuZXdfcGF0aCAuPSAiLyRwYXRoIjsKKwl9CisKKwlyZXR1cm4gJG5ld19wYXRoIC49ICIvJGxhc3RfcGF0aCI7Cit9CisKKworPWhlYWQzIGFkZF9wYXRoX3RvX3VybAorCisgICAgbXkgJG5ld191cmwgPSBhZGRfcGF0aF90b191cmwoJHVybCwgJHBhdGgpOworCitBcHBlbmRzICRwYXRoIG9udG8gdGhlICR1cmwuICBJZiAkcGF0aCBpcyBlbXB0eSwgJHVybCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuCisKKz1jdXQKKworc3ViIGFkZF9wYXRoX3RvX3VybCB7CisJbXkoJHVybCwgJHBhdGgpID0gQF87CisKKwlyZXR1cm4gJHVybCBpZiAhZGVmaW5lZCAkcGF0aCBvciAhbGVuZ3RoICRwYXRoOworCisJIyBTdHJpcCB0cmFpbGluZyBhbmQgbGVhZGluZyBzbGFzaGVzIHNvIHdlIGRvbid0CisJIyB3aW5kIHVwIHdpdGggaHR0cDovL3guY29tLy8vcGF0aAorCSR1cmwgID1+IHN7LyskfXt9OworCSRwYXRoID1+IHN7Xi8rfXt9OworCisJIyBJZiBhIHBhdGggaGFzIGEgJSBpbiBpdCwgVVJJIGVzY2FwZSBpdCBzbyBpdCdzIG5vdAorCSMgbWlzdGFrZW4gZm9yIGEgVVJJIGVzY2FwZSBsYXRlci4KKwkkcGF0aCA9fiBzeyV9eyUyNX1nOworCisJcmV0dXJuIGpvaW4gJy8nLCAkdXJsLCAkcGF0aDsKK30KKworMTsKZGlmZiAtLWdpdCBhL3BlcmwvTWFrZWZpbGUgYi9wZXJsL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZDk2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL01ha2VmaWxlCkBAIC0wLDAgKzEsODkgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHBlcmwgc3VwcG9ydCBtb2R1bGVzIGFuZCByb3V0aW5lCisjCittYWtmaWxlOj1wZXJsLm1haworbW9kdWxlcyA9CisKK1BFUkxfUEFUSF9TUSA9ICQoc3Vic3QgJywnXCcnLCQoUEVSTF9QQVRIKSkKK3ByZWZpeF9TUSA9ICQoc3Vic3QgJywnXCcnLCQocHJlZml4KSkKK2xvY2FsZWRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQobG9jYWxlZGlyKSkKKworaWZuZGVmIFYKKwlRVUlFVCA9IEAKK2VuZGlmCisKK2FsbCBpbnN0YWxsIGluc3RsaWJkaXI6ICQobWFrZmlsZSkKKwkkKFFVSUVUKSQoTUFLRSkgLWYgJChtYWtmaWxlKSAkQAorCitjbGVhbjoKKwkkKFFVSUVUKXRlc3QgLWYgJChtYWtmaWxlKSAmJiAkKE1BS0UpIC1mICQobWFrZmlsZSkgJEAgfHwgZXhpdCAwCisJJChSTSkgcHBwb3J0LmgKKwkkKFJNKSAkKG1ha2ZpbGUpCisJJChSTSkgJChtYWtmaWxlKS5vbGQKKwkkKFJNKSBQTS5zdGFtcAorCiskKG1ha2ZpbGUpOiBQTS5zdGFtcAorCitpZmRlZiBOT19QRVJMX01BS0VNQUtFUgoraW5zdGRpcl9TUSA9ICQoc3Vic3QgJywnXCcnLCQocHJlZml4KS9saWIpCisKK21vZHVsZXMgKz0gR2l0Cittb2R1bGVzICs9IEdpdC9JMThOCittb2R1bGVzICs9IEdpdC9JbmRleEluZm8KK21vZHVsZXMgKz0gR2l0L1NWTgorbW9kdWxlcyArPSBHaXQvU1ZOL01lbW9pemUvWUFNTAorbW9kdWxlcyArPSBHaXQvU1ZOL0ZldGNoZXIKK21vZHVsZXMgKz0gR2l0L1NWTi9FZGl0b3IKK21vZHVsZXMgKz0gR2l0L1NWTi9HbG9iU3BlYworbW9kdWxlcyArPSBHaXQvU1ZOL0xvZworbW9kdWxlcyArPSBHaXQvU1ZOL01pZ3JhdGlvbgorbW9kdWxlcyArPSBHaXQvU1ZOL1Byb21wdAorbW9kdWxlcyArPSBHaXQvU1ZOL1JhCittb2R1bGVzICs9IEdpdC9TVk4vVXRpbHMKKworJChtYWtmaWxlKTogLi4vR0lULUNGTEFHUyBNYWtlZmlsZQorCWVjaG8gYWxsOiBwcml2YXRlLUVycm9yLnBtIEdpdC5wbSBHaXQvSTE4Ti5wbSA+ICRACisJc2V0IC1lOyBcCisJZm9yIGkgaW4gJChtb2R1bGVzKTsgXAorCWRvIFwKKwkJaWYgdGVzdCAkJGkgPSAkJHtpJS8qfTsgXAorCQl0aGVuIFwKKwkJCXN1YmRpcj07IFwKKwkJZWxzZSBcCisJCQlzdWJkaXI9LyQke2klLyp9OyBcCisJCWZpOyBcCisJCWVjaG8gJwkkKFJNKSBibGliL2xpYi8nJCRpJy5wbScgPj4gJEA7IFwKKwkJZWNobyAnCW1rZGlyIC1wIGJsaWIvbGliJyQkc3ViZGlyID4+ICRAOyBcCisJCWVjaG8gJwljcCAnJCRpJy5wbSBibGliL2xpYi8nJCRpJy5wbScgPj4gJEA7IFwKKwlkb25lCisJZWNobyAnCSQoUk0pIGJsaWIvbGliL0Vycm9yLnBtJyA+PiAkQAorCSckKFBFUkxfUEFUSF9TUSknIC1NRXJyb3IgLWUgJ2V4aXQoJCRFcnJvcjo6VkVSU0lPTiA8IDAuMTUwMDkpJyB8fCBcCisJZWNobyAnCWNwIHByaXZhdGUtRXJyb3IucG0gYmxpYi9saWIvRXJyb3IucG0nID4+ICRACisJZWNobyBpbnN0YWxsOiA+PiAkQAorCXNldCAtZTsgXAorCWZvciBpIGluICQobW9kdWxlcyk7IFwKKwlkbyBcCisJCWlmIHRlc3QgJCRpID0gJCR7aSUvKn07IFwKKwkJdGhlbiBcCisJCQlzdWJkaXI9OyBcCisJCWVsc2UgXAorCQkJc3ViZGlyPS8kJHtpJS8qfTsgXAorCQlmaTsgXAorCQllY2hvICcJJChSTSkgIiQkKERFU1RESVIpJChpbnN0ZGlyX1NRKS8nJCRpJy5wbSInID4+ICRAOyBcCisJCWVjaG8gJwlta2RpciAtcCAiJCQoREVTVERJUikkKGluc3RkaXJfU1EpJyQkc3ViZGlyJyInID4+ICRAOyBcCisJCWVjaG8gJwljcCAnJCRpJy5wbSAiJCQoREVTVERJUikkKGluc3RkaXJfU1EpLyckJGknLnBtIicgPj4gJEA7IFwKKwlkb25lCisJZWNobyAnCSQoUk0pICIkJChERVNURElSKSQoaW5zdGRpcl9TUSkvRXJyb3IucG0iJyA+PiAkQAorCSckKFBFUkxfUEFUSF9TUSknIC1NRXJyb3IgLWUgJ2V4aXQoJCRFcnJvcjo6VkVSU0lPTiA8IDAuMTUwMDkpJyB8fCBcCisJZWNobyAnCWNwIHByaXZhdGUtRXJyb3IucG0gIiQkKERFU1RESVIpJChpbnN0ZGlyX1NRKS9FcnJvci5wbSInID4+ICRACisJZWNobyBpbnN0bGliZGlyOiA+PiAkQAorCWVjaG8gJwllY2hvICQoaW5zdGRpcl9TUSknID4+ICRACitlbHNlCiskKG1ha2ZpbGUpOiBNYWtlZmlsZS5QTCAuLi9HSVQtQ0ZMQUdTCisJJChQRVJMX1BBVEgpICQ8IFBSRUZJWD0nJChwcmVmaXhfU1EpJyBJTlNUQUxMX0JBU0U9JycgLS1sb2NhbGVkaXI9JyQobG9jYWxlZGlyX1NRKScKK2VuZGlmCisKKyMgdGhpcyBpcyBqdXN0IGFkZGVkIGNvbWZvcnQgZm9yIGNhbGxpbmcgbWFrZSBkaXJlY3RseSBpbiBwZXJsIGRpcgorIyAoZXZlbiB0aG91Z2ggR0lULUNGTEFHUyBhcmVuJ3QgdXNlZCB5ZXQuIElmIGV2ZXIpCisuLi9HSVQtQ0ZMQUdTOgorCSQoTUFLRSkgLUMgLi4gR0lULUNGTEFHUwpkaWZmIC0tZ2l0IGEvcGVybC9NYWtlZmlsZS5QTCBiL3BlcmwvTWFrZWZpbGUuUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyOWJhOQotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvTWFrZWZpbGUuUEwKQEAgLTAsMCArMSw2MiBAQAordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBFeHRVdGlsczo6TWFrZU1ha2VyOwordXNlIEdldG9wdDo6TG9uZzsKK3VzZSBGaWxlOjpGaW5kOworCisjIERvbid0IGZvcmdldCB0byB1cGRhdGUgdGhlIHBlcmwvTWFrZWZpbGUsIHRvby4KKyMgRG9uJ3QgZm9yZ2V0IHRvIHRlc3Qgd2l0aCBOT19QRVJMX01BS0VNQUtFUj1ZZXNQbGVhc2UKKworIyBTYW5pdHk6IGRpZSBhdCBmaXJzdCB1bmtub3duIG9wdGlvbgorR2V0b3B0OjpMb25nOjpDb25maWd1cmUgcXcvIHBhc3NfdGhyb3VnaCAvOworCitteSAkbG9jYWxlZGlyID0gJyc7CitHZXRPcHRpb25zKCJsb2NhbGVkaXI9cyIgPT4gXCRsb2NhbGVkaXIpOworCitzdWIgTVk6OnBvc3RhbWJsZSB7CisJcmV0dXJuIDw8J01BS0VfRlJBRyc7CitpbnN0bGliZGlyOgorCUBlY2hvICckKElOU1RBTExTSVRFTElCKScKKworaWZuZXEgKCwkKERFU1RESVIpKQoraWZlcSAoMCwkKHNoZWxsIGV4cHIgJyQoTU1fVkVSU0lPTiknICc+JyA2LjEwKSkKKyQoZXJyb3IgRXh0VXRpbHM6Ok1ha2VNYWtlciB2ZXJzaW9uICIkKE1NX1ZFUlNJT04pIiBpcyBvbGRlciB0aGFuIDYuMTEgYW5kIHNvIFwKKwlpcyBsaWtlbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIERFU1RESVIgbWVjaGFuaXNtLiAgVHJ5IHNldHRpbmcgXAorCU5PX1BFUkxfTUFLRU1BS0VSPTEgaW5zdGVhZCkKK2VuZGlmCitlbmRpZgorCitNQUtFX0ZSQUcKK30KKworIyBGaW5kIGFsbCB0aGUgLnBtIGZpbGVzIGluICJHaXQvIiBhbmQgR2l0LnBtCitteSAlcG07CitmaW5kIHN1YiB7CisJcmV0dXJuIHVubGVzcyAvXC5wbSQvOworCisJIyBzb21ldGltZXMgRmlsZTo6RmluZCBwcmVwZW5kcyBhIC4vICBTdHJpcCBpdC4KKwlteSAkcG1fcGF0aCA9ICRGaWxlOjpGaW5kOjpuYW1lOworCSRwbV9wYXRoID1+IHN7XlwuL317fTsKKworCSRwbXskcG1fcGF0aH0gPSAnJChJTlNUX0xJQkRJUikvJy4kcG1fcGF0aDsKK30sICJHaXQiLCAiR2l0LnBtIjsKKworCisjIFdlIGNvbWUgd2l0aCBvdXIgb3duIGJ1bmRsZWQgRXJyb3IucG0uIEl0J3Mgbm90IGluIHRoZSBzZXQgb2YgZGVmYXVsdAorIyBQZXJsIG1vZHVsZXMgc28gaW5zdGFsbCBpdCBpZiBpdCdzIG5vdCBhdmFpbGFibGUgb24gdGhlIHN5c3RlbSB5ZXQuCitpZiAoICFldmFsIHsgcmVxdWlyZSBFcnJvciB9IHx8ICRFcnJvcjo6VkVSU0lPTiA8IDAuMTUwMDkpIHsKKwkkcG17J3ByaXZhdGUtRXJyb3IucG0nfSA9ICckKElOU1RfTElCRElSKS9FcnJvci5wbSc7Cit9CisKKyMgcmVkaXJlY3Qgc3Rkb3V0LCBvdGhlcndpc2UgdGhlIG1lc3NhZ2UgIldyaXRpbmcgcGVybC5tYWsgZm9yIEdpdCIKKyMgZGlzcnVwdHMgdGhlIG91dHB1dCBmb3IgdGhlIHRhcmdldCAnaW5zdGxpYmRpcicKK29wZW4gU1RET1VULCAiPiZTVERFUlIiOworCitXcml0ZU1ha2VmaWxlKAorCU5BTUUgICAgICAgICAgICA9PiAnR2l0JywKKwlWRVJTSU9OX0ZST00gICAgPT4gJ0dpdC5wbScsCisJUE0JCT0+IFwlcG0sCisJUE1fRklMVEVSCT0+IHFxW1wkKFBFUkwpIC1wZSAiczxcXFErK0xPQ0FMRURJUisrXFxFPjwkbG9jYWxlZGlyPiJdLAorCU1BS0VGSUxFCT0+ICdwZXJsLm1haycsCisJSU5TVEFMTFNJVEVNQU4zRElSID0+ICckKFNJVEVQUkVGSVgpL3NoYXJlL21hbi9tYW4zJworKTsKZGlmZiAtLWdpdCBhL3BlcmwvcHJpdmF0ZS1FcnJvci5wbSBiL3BlcmwvcHJpdmF0ZS1FcnJvci5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDk4MTM1Ci0tLSAvZGV2L251bGwKKysrIGIvcGVybC9wcml2YXRlLUVycm9yLnBtCkBAIC0wLDAgKzEsODI3IEBACisjIEVycm9yLnBtCisjCisjIENvcHlyaWdodCAoYykgMTk5Ny04IEdyYWhhbSBCYXJyIDxnYmFyckB0aS5jb20+LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZi4KKyMKKyMgQmFzZWQgb24gbXkgb3JpZ2luYWwgRXJyb3IucG0sIGFuZCBFeGNlcHRpb25zLnBtIGJ5IFBldGVyIFNlaWJlbAorIyA8cGV0ZXJAd2VibG9naWMuY29tPiBhbmQgYWRhcHRlZCBieSBKZXNzZSBHbGljayA8amdsaWNrQHNpZy5ic2guY29tPi4KKyMKKyMgYnV0IG1vZGlmaWVkICoqKnNpZ25pZmljYW50bHkqKioKKworcGFja2FnZSBFcnJvcjsKKwordXNlIHN0cmljdDsKK3VzZSB2YXJzIHF3KCRWRVJTSU9OKTsKK3VzZSA1LjAwNDsKKworJFZFUlNJT04gPSAiMC4xNTAwOSI7CisKK3VzZSBvdmVybG9hZCAoCisJJyIiJwkgICA9Pgknc3RyaW5naWZ5JywKKwknMCsnCSAgID0+CSd2YWx1ZScsCisJJ2Jvb2wnICAgICA9PglzdWIgeyByZXR1cm4gMTsgfSwKKwknZmFsbGJhY2snID0+CTEKKyk7CisKKyRFcnJvcjo6RGVwdGggPSAwOwkjIERlcHRoIHRvIHBhc3MgdG8gY2FsbGVyKCkKKyRFcnJvcjo6RGVidWcgPSAwOwkjIEdlbmVyYXRlIHZlcmJvc2Ugc3RhY2sgdHJhY2VzCitARXJyb3I6OlNUQUNLID0gKCk7CSMgQ2xhdXNlIHN0YWNrIGZvciB0cnkKKyRFcnJvcjo6VEhST1dOID0gdW5kZWY7CSMgbGFzdCBlcnJvciB0aHJvd24sIGEgd29ya2Fyb3VuZCB1bnRpbCBkaWUgJHJlZiB3b3JrcworCitteSAkTEFTVDsJCSMgTGFzdCBlcnJvciBjcmVhdGVkCitteSAlRVJST1I7CQkjIExhc3QgZXJyb3IgYXNzb2NpYXRlZCB3aXRoIHBhY2thZ2UKKworc3ViIHRocm93X0Vycm9yX1NpbXBsZQoreworICAgIG15ICRhcmdzID0gc2hpZnQ7CisgICAgcmV0dXJuIEVycm9yOjpTaW1wbGUtPm5ldygkYXJncy0+eyd0ZXh0J30pOworfQorCiskRXJyb3I6Ok9iamVjdGlmeUNhbGxiYWNrID0gXCZ0aHJvd19FcnJvcl9TaW1wbGU7CisKKworIyBFeHBvcnRlZCBzdWJzIGFyZSBkZWZpbmVkIGluIEVycm9yOjpzdWJzCisKK3N1YiBpbXBvcnQgeworICAgIHNoaWZ0OworICAgIGxvY2FsICRFeHBvcnRlcjo6RXhwb3J0TGV2ZWwgPSAkRXhwb3J0ZXI6OkV4cG9ydExldmVsICsgMTsKKyAgICBFcnJvcjo6c3Vicy0+aW1wb3J0KEBfKTsKK30KKworIyBJIHJlYWxseSB3YW50IHRvIHVzZSBsYXN0IGZvciB0aGUgbmFtZSBvZiB0aGlzIG1ldGhvZCwgYnV0IGl0IGlzIGEga2V5d29yZAorIyB3aGljaCBwcmV2ZW50IHRoZSBzeW50YXggIGxhc3QgRXJyb3IKKworc3ViIHByaW9yIHsKKyAgICBzaGlmdDsgIyBpZ25vcmUKKworICAgIHJldHVybiAkTEFTVCB1bmxlc3MgQF87CisKKyAgICBteSAkcGtnID0gc2hpZnQ7CisgICAgcmV0dXJuIGV4aXN0cyAkRVJST1J7JHBrZ30gPyAkRVJST1J7JHBrZ30gOiB1bmRlZgorCXVubGVzcyByZWYoJHBrZyk7CisKKyAgICBteSAkb2JqID0gJHBrZzsKKyAgICBteSAkZXJyID0gdW5kZWY7CisgICAgaWYoJG9iai0+aXNhKCdIQVNIJykpIHsKKwkkZXJyID0gJG9iai0+eydfX0Vycm9yX18nfQorCSAgICBpZiBleGlzdHMgJG9iai0+eydfX0Vycm9yX18nfTsKKyAgICB9CisgICAgZWxzaWYoJG9iai0+aXNhKCdHTE9CJykpIHsKKwkkZXJyID0gJHsqJG9ian17J19fRXJyb3JfXyd9CisJICAgIGlmIGV4aXN0cyAkeyokb2JqfXsnX19FcnJvcl9fJ307CisgICAgfQorCisgICAgJGVycjsKK30KKworc3ViIGZsdXNoIHsKKyAgICBzaGlmdDsgI2lnbm9yZQorCisgICAgdW5sZXNzIChAXykgeworICAgICAgICRMQVNUID0gdW5kZWY7CisgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG15ICRwa2cgPSBzaGlmdDsKKyAgICByZXR1cm4gdW5sZXNzIHJlZigkcGtnKTsKKworICAgIHVuZGVmICRFUlJPUnskcGtnfSBpZiBkZWZpbmVkICRFUlJPUnskcGtnfTsKK30KKworIyBSZXR1cm4gYXMgbXVjaCBpbmZvcm1hdGlvbiBhcyBwb3NzaWJsZSBhYm91dCB3aGVyZSB0aGUgZXJyb3IKKyMgaGFwcGVuZWQuIFRoZSAtc3RhY2t0cmFjZSBlbGVtZW50IG9ubHkgZXhpc3RzIGlmICRFcnJvcjo6REVCVUcKKyMgd2FzIHNldCB3aGVuIHRoZSBlcnJvciB3YXMgY3JlYXRlZAorCitzdWIgc3RhY2t0cmFjZSB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKworICAgIHJldHVybiAkc2VsZi0+eyctc3RhY2t0cmFjZSd9CisJaWYgZXhpc3RzICRzZWxmLT57Jy1zdGFja3RyYWNlJ307CisKKyAgICBteSAkdGV4dCA9IGV4aXN0cyAkc2VsZi0+eyctdGV4dCd9ID8gJHNlbGYtPnsnLXRleHQnfSA6ICJEaWVkIjsKKworICAgICR0ZXh0IC49IHNwcmludGYoIiBhdCAlcyBsaW5lICVkLlxuIiwgJHNlbGYtPmZpbGUsICRzZWxmLT5saW5lKQorCXVubGVzcygkdGV4dCA9fiAvXG4kL3MpOworCisgICAgJHRleHQ7Cit9CisKKyMgQWxsb3cgZXJyb3IgcHJvcGFnYXRpb24sIGllCisjCisjICRiZXItPmVuY29kZSguLi4pIG9yCisjICAgIHJldHVybiBFcnJvci0+cHJpb3IoJGJlciktPmFzc29jaWF0ZSgkbGRhcCk7CisKK3N1YiBhc3NvY2lhdGUgeworICAgIG15ICRlcnIgPSBzaGlmdDsKKyAgICBteSAkb2JqID0gc2hpZnQ7CisKKyAgICByZXR1cm4gdW5sZXNzIHJlZigkb2JqKTsKKworICAgIGlmKCRvYmotPmlzYSgnSEFTSCcpKSB7CisJJG9iai0+eydfX0Vycm9yX18nfSA9ICRlcnI7CisgICAgfQorICAgIGVsc2lmKCRvYmotPmlzYSgnR0xPQicpKSB7CisJJHsqJG9ian17J19fRXJyb3JfXyd9ID0gJGVycjsKKyAgICB9CisgICAgJG9iaiA9IHJlZigkb2JqKTsKKyAgICAkRVJST1J7IHJlZigkb2JqKSB9ID0gJGVycjsKKworICAgIHJldHVybjsKK30KKworc3ViIG5ldyB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBteSgkcGtnLCRmaWxlLCRsaW5lKSA9IGNhbGxlcigkRXJyb3I6OkRlcHRoKTsKKworICAgIG15ICRlcnIgPSBibGVzcyB7CisJJy1wYWNrYWdlJyA9PiAkcGtnLAorCSctZmlsZScgICAgPT4gJGZpbGUsCisJJy1saW5lJyAgICA9PiAkbGluZSwKKwlAXworICAgIH0sICRzZWxmOworCisgICAgJGVyci0+YXNzb2NpYXRlKCRlcnItPnsnLW9iamVjdCd9KQorCWlmKGV4aXN0cyAkZXJyLT57Jy1vYmplY3QnfSk7CisKKyAgICAjIFRvIGFsd2F5cyBjcmVhdGUgYSBzdGFja3RyYWNlIHdvdWxkIGJlIHZlcnkgaW5lZmZpY2llbnQsIHNvCisgICAgIyB3ZSBvbmx5IGRvIGl0IGlmICRFcnJvcjo6RGVidWcgaXMgc2V0CisKKyAgICBpZigkRXJyb3I6OkRlYnVnKSB7CisJcmVxdWlyZSBDYXJwOworCWxvY2FsICRDYXJwOjpDYXJwTGV2ZWwgPSAkRXJyb3I6OkRlcHRoOworCW15ICR0ZXh0ID0gZGVmaW5lZCgkZXJyLT57Jy10ZXh0J30pID8gJGVyci0+eyctdGV4dCd9IDogIkVycm9yIjsKKwlteSAkdHJhY2UgPSBDYXJwOjpsb25nbWVzcygkdGV4dCk7CisJIyBSZW1vdmUgdHJ5IGNhbGxzIGZyb20gdGhlIHRyYWNlCisJJHRyYWNlID1+IHMvKFxuXHMrXFMrX19BTk9OX19bXlxuXSspP1xuXHMrZXZhbFteXG5dK1xuXHMrRXJyb3I6OnN1YnM6OnRyeVteXG5dKyg/PVxuKS8vc29nOworCSR0cmFjZSA9fiBzLyhcblxzK1xTK19fQU5PTl9fW15cbl0rKT9cblxzK2V2YWxbXlxuXStcblxzK0Vycm9yOjpzdWJzOjpydW5fY2xhdXNlc1teXG5dK1xuXHMrRXJyb3I6OnN1YnM6OnRyeVteXG5dKyg/PVxuKS8vc29nOworCSRlcnItPnsnLXN0YWNrdHJhY2UnfSA9ICR0cmFjZQorICAgIH0KKworICAgICRAID0gJExBU1QgPSAkRVJST1J7JHBrZ30gPSAkZXJyOworfQorCisjIFRocm93IGFuIGVycm9yLiB0aGlzIGNvbnRhaW5zIHNvbWUgdmVyeSBnb3J5IGNvZGUuCisKK3N1YiB0aHJvdyB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBsb2NhbCAkRXJyb3I6OkRlcHRoID0gJEVycm9yOjpEZXB0aCArIDE7CisKKyAgICAjIGlmIHdlIGFyZSBub3QgcmV0aHJvdy1pbmcgdGhlbiBjcmVhdGUgdGhlIG9iamVjdCB0byB0aHJvdworICAgICRzZWxmID0gJHNlbGYtPm5ldyhAXykgdW5sZXNzIHJlZigkc2VsZik7CisKKyAgICBkaWUgJEVycm9yOjpUSFJPV04gPSAkc2VsZjsKK30KKworIyBzeW50YWN0aWMgc3VnYXIgZm9yCisjCisjICAgIGRpZSB3aXRoIEVycm9yKCAuLi4gKTsKKworc3ViIHdpdGggeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbG9jYWwgJEVycm9yOjpEZXB0aCA9ICRFcnJvcjo6RGVwdGggKyAxOworCisgICAgJHNlbGYtPm5ldyhAXyk7Cit9CisKKyMgc3ludGFjdGljIHN1Z2FyIGZvcgorIworIyAgICByZWNvcmQgRXJyb3IoIC4uLiApIGFuZCByZXR1cm47CisKK3N1YiByZWNvcmQgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgbG9jYWwgJEVycm9yOjpEZXB0aCA9ICRFcnJvcjo6RGVwdGggKyAxOworCisgICAgJHNlbGYtPm5ldyhAXyk7Cit9CisKKyMgY2F0Y2ggY2xhdXNlIGZvcgorIworIyB0cnkgeyAuLi4gfSBjYXRjaCBDTEFTUyB3aXRoIHsgLi4uIH0KKworc3ViIGNhdGNoIHsKKyAgICBteSAkcGtnID0gc2hpZnQ7CisgICAgbXkgJGNvZGUgPSBzaGlmdDsKKyAgICBteSAkY2xhdXNlcyA9IHNoaWZ0IHx8IHt9OworICAgIG15ICRjYXRjaCA9ICRjbGF1c2VzLT57J2NhdGNoJ30gfHw9IFtdOworCisgICAgdW5zaGlmdCBAJGNhdGNoLCAgJHBrZywgJGNvZGU7CisKKyAgICAkY2xhdXNlczsKK30KKworIyBPYmplY3QgcXVlcnkgbWV0aG9kcworCitzdWIgb2JqZWN0IHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIGV4aXN0cyAkc2VsZi0+eyctb2JqZWN0J30gPyAkc2VsZi0+eyctb2JqZWN0J30gOiB1bmRlZjsKK30KKworc3ViIGZpbGUgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgZXhpc3RzICRzZWxmLT57Jy1maWxlJ30gPyAkc2VsZi0+eyctZmlsZSd9IDogdW5kZWY7Cit9CisKK3N1YiBsaW5lIHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIGV4aXN0cyAkc2VsZi0+eyctbGluZSd9ID8gJHNlbGYtPnsnLWxpbmUnfSA6IHVuZGVmOworfQorCitzdWIgdGV4dCB7CisgICAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgICBleGlzdHMgJHNlbGYtPnsnLXRleHQnfSA/ICRzZWxmLT57Jy10ZXh0J30gOiB1bmRlZjsKK30KKworIyBvdmVybG9hZCBtZXRob2RzCisKK3N1YiBzdHJpbmdpZnkgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgZGVmaW5lZCAkc2VsZi0+eyctdGV4dCd9ID8gJHNlbGYtPnsnLXRleHQnfSA6ICJEaWVkIjsKK30KKworc3ViIHZhbHVlIHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIGV4aXN0cyAkc2VsZi0+eyctdmFsdWUnfSA/ICRzZWxmLT57Jy12YWx1ZSd9IDogdW5kZWY7Cit9CisKK3BhY2thZ2UgRXJyb3I6OlNpbXBsZTsKKworQEVycm9yOjpTaW1wbGU6OklTQSA9IHF3KEVycm9yKTsKKworc3ViIG5ldyB7CisgICAgbXkgJHNlbGYgID0gc2hpZnQ7CisgICAgbXkgJHRleHQgID0gIiIgLiBzaGlmdDsKKyAgICBteSAkdmFsdWUgPSBzaGlmdDsKKyAgICBteShAYXJncykgPSAoKTsKKworICAgIGxvY2FsICRFcnJvcjo6RGVwdGggPSAkRXJyb3I6OkRlcHRoICsgMTsKKworICAgIEBhcmdzID0gKCAtZmlsZSA9PiAkMSwgLWxpbmUgPT4gJDIpCisJaWYoJHRleHQgPX4gcy9ccythdFxzKyhcUyspXHMrbGluZVxzKyhcZCspKD86LFxzKjxbXj5dKj5ccytsaW5lXHMrXGQrKT9cLj9cbj8kLy9zKTsKKyAgICBwdXNoKEBhcmdzLCAnLXZhbHVlJywgMCArICR2YWx1ZSkKKwlpZiBkZWZpbmVkKCR2YWx1ZSk7CisKKyAgICAkc2VsZi0+U1VQRVI6Om5ldygtdGV4dCA9PiAkdGV4dCwgQGFyZ3MpOworfQorCitzdWIgc3RyaW5naWZ5IHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgIG15ICR0ZXh0ID0gJHNlbGYtPlNVUEVSOjpzdHJpbmdpZnk7CisgICAgJHRleHQgLj0gc3ByaW50ZigiIGF0ICVzIGxpbmUgJWQuXG4iLCAkc2VsZi0+ZmlsZSwgJHNlbGYtPmxpbmUpCisJdW5sZXNzKCR0ZXh0ID1+IC9cbiQvcyk7CisgICAgJHRleHQ7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIEluc3BpcmVkIGJ5IGNvZGUgZnJvbSBKZXNzZSBHbGljayA8amdsaWNrQHNpZy5ic2guY29tPiBhbmQKKyMgUGV0ZXIgU2VpYmVsIDxwZXRlckB3ZWJsb2dpYy5jb20+CisKK3BhY2thZ2UgRXJyb3I6OnN1YnM7CisKK3VzZSBFeHBvcnRlciAoKTsKK3VzZSB2YXJzIHF3KEBFWFBPUlRfT0sgQElTQSAlRVhQT1JUX1RBR1MpOworCitARVhQT1JUX09LICAgPSBxdyh0cnkgd2l0aCBmaW5hbGx5IGV4Y2VwdCBvdGhlcndpc2UpOworJUVYUE9SVF9UQUdTID0gKHRyeSA9PiBcQEVYUE9SVF9PSyk7CisKK0BJU0EgPSBxdyhFeHBvcnRlcik7CisKKworc3ViIGJsZXNzZWQgeworCW15ICRpdGVtID0gc2hpZnQ7CisJbG9jYWwgJEA7ICMgZG9uJ3Qga2lsbCBhbiBvdXRlciAkQAorCXJlZiAkaXRlbSBhbmQgZXZhbCB7ICRpdGVtLT5jYW4oJ2NhbicpIH07Cit9CisKKworc3ViIHJ1bl9jbGF1c2VzICgkJCRcQCkgeworICAgIG15KCRjbGF1c2VzLCRlcnIsJHdhbnRhcnJheSwkcmVzdWx0KSA9IEBfOworICAgIG15ICRjb2RlID0gdW5kZWY7CisKKyAgICAkZXJyID0gJEVycm9yOjpPYmplY3RpZnlDYWxsYmFjay0+KHsndGV4dCcgPT4kZXJyfSkgdW5sZXNzIHJlZigkZXJyKTsKKworICAgIENBVENIOiB7CisKKwkjIGNhdGNoCisJbXkgJGNhdGNoOworCWlmKGRlZmluZWQoJGNhdGNoID0gJGNsYXVzZXMtPnsnY2F0Y2gnfSkpIHsKKwkgICAgbXkgJGkgPSAwOworCisJICAgIENBVENITE9PUDoKKwkgICAgZm9yKCA7ICRpIDwgQCRjYXRjaCA7ICRpICs9IDIpIHsKKwkJbXkgJHBrZyA9ICRjYXRjaC0+WyRpXTsKKwkJdW5sZXNzKGRlZmluZWQgJHBrZykgeworCQkgICAgI2V4Y2VwdAorCQkgICAgc3BsaWNlKEAkY2F0Y2gsJGksMiwkY2F0Y2gtPlskaSsxXS0+KCkpOworCQkgICAgJGkgLT0gMjsKKwkJICAgIG5leHQgQ0FUQ0hMT09QOworCQl9CisJCWVsc2lmKGJsZXNzZWQoJGVycikgJiYgJGVyci0+aXNhKCRwa2cpKSB7CisJCSAgICAkY29kZSA9ICRjYXRjaC0+WyRpKzFdOworCQkgICAgd2hpbGUoMSkgeworCQkJbXkgJG1vcmUgPSAwOworCQkJbG9jYWwoJEVycm9yOjpUSFJPV04pOworCQkJbXkgJG9rID0gZXZhbCB7CisJCQkgICAgaWYoJHdhbnRhcnJheSkgeworCQkJCUB7JHJlc3VsdH0gPSAkY29kZS0+KCRlcnIsXCRtb3JlKTsKKwkJCSAgICB9CisJCQkgICAgZWxzaWYoZGVmaW5lZCgkd2FudGFycmF5KSkgeworCQkJICAgICAgICBAeyRyZXN1bHR9ID0gKCk7CisJCQkJJHJlc3VsdC0+WzBdID0gJGNvZGUtPigkZXJyLFwkbW9yZSk7CisJCQkgICAgfQorCQkJICAgIGVsc2UgeworCQkJCSRjb2RlLT4oJGVycixcJG1vcmUpOworCQkJICAgIH0KKwkJCSAgICAxOworCQkJfTsKKwkJCWlmKCAkb2sgKSB7CisJCQkgICAgbmV4dCBDQVRDSExPT1AgaWYgJG1vcmU7CisJCQkgICAgdW5kZWYgJGVycjsKKwkJCX0KKwkJCWVsc2UgeworCQkJICAgICRlcnIgPSBkZWZpbmVkKCRFcnJvcjo6VEhST1dOKQorCQkJCSAgICA/ICRFcnJvcjo6VEhST1dOIDogJEA7CisgICAgICAgICAgICAgICAgJGVyciA9ICRFcnJvcjo6T2JqZWN0aWZ5Q2FsbGJhY2stPih7J3RleHQnID0+JGVycn0pCisgICAgICAgICAgICAgICAgICAgIHVubGVzcyByZWYoJGVycik7CisJCQl9CisJCQlsYXN0IENBVENIOworCQkgICAgfTsKKwkJfQorCSAgICB9CisJfQorCisJIyBvdGhlcndpc2UKKwlteSAkb3dpc2U7CisJaWYoZGVmaW5lZCgkb3dpc2UgPSAkY2xhdXNlcy0+eydvdGhlcndpc2UnfSkpIHsKKwkgICAgbXkgJGNvZGUgPSAkY2xhdXNlcy0+eydvdGhlcndpc2UnfTsKKwkgICAgbXkgJG1vcmUgPSAwOworCSAgICBteSAkb2sgPSBldmFsIHsKKwkJaWYoJHdhbnRhcnJheSkgeworCQkgICAgQHskcmVzdWx0fSA9ICRjb2RlLT4oJGVycixcJG1vcmUpOworCQl9CisJCWVsc2lmKGRlZmluZWQoJHdhbnRhcnJheSkpIHsKKwkJICAgIEB7JHJlc3VsdH0gPSAoKTsKKwkJICAgICRyZXN1bHQtPlswXSA9ICRjb2RlLT4oJGVycixcJG1vcmUpOworCQl9CisJCWVsc2UgeworCQkgICAgJGNvZGUtPigkZXJyLFwkbW9yZSk7CisJCX0KKwkJMTsKKwkgICAgfTsKKwkgICAgaWYoICRvayApIHsKKwkJdW5kZWYgJGVycjsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkJJGVyciA9IGRlZmluZWQoJEVycm9yOjpUSFJPV04pCisJCQk/ICRFcnJvcjo6VEhST1dOIDogJEA7CisKKyAgICAgICAgJGVyciA9ICRFcnJvcjo6T2JqZWN0aWZ5Q2FsbGJhY2stPih7J3RleHQnID0+JGVycn0pCisgICAgICAgICAgICB1bmxlc3MgcmVmKCRlcnIpOworCSAgICB9CisJfQorICAgIH0KKyAgICAkZXJyOworfQorCitzdWIgdHJ5ICgmOyQpIHsKKyAgICBteSAkdHJ5ID0gc2hpZnQ7CisgICAgbXkgJGNsYXVzZXMgPSBAXyA/IHNoaWZ0IDoge307CisgICAgbXkgJG9rID0gMDsKKyAgICBteSAkZXJyID0gdW5kZWY7CisgICAgbXkgQHJlc3VsdCA9ICgpOworCisgICAgdW5zaGlmdCBARXJyb3I6OlNUQUNLLCAkY2xhdXNlczsKKworICAgIG15ICR3YW50YXJyYXkgPSB3YW50YXJyYXkoKTsKKworICAgIGRvIHsKKwlsb2NhbCAkRXJyb3I6OlRIUk9XTiA9IHVuZGVmOworICAgIGxvY2FsICRAID0gdW5kZWY7CisKKwkkb2sgPSBldmFsIHsKKwkgICAgaWYoJHdhbnRhcnJheSkgeworCQlAcmVzdWx0ID0gJHRyeS0+KCk7CisJICAgIH0KKwkgICAgZWxzaWYoZGVmaW5lZCAkd2FudGFycmF5KSB7CisJCSRyZXN1bHRbMF0gPSAkdHJ5LT4oKTsKKwkgICAgfQorCSAgICBlbHNlIHsKKwkJJHRyeS0+KCk7CisJICAgIH0KKwkgICAgMTsKKwl9OworCisJJGVyciA9IGRlZmluZWQoJEVycm9yOjpUSFJPV04pID8gJEVycm9yOjpUSFJPV04gOiAkQAorCSAgICB1bmxlc3MgJG9rOworICAgIH07CisKKyAgICBzaGlmdCBARXJyb3I6OlNUQUNLOworCisgICAgJGVyciA9IHJ1bl9jbGF1c2VzKCRjbGF1c2VzLCRlcnIsd2FudGFycmF5LEByZXN1bHQpCisJdW5sZXNzKCRvayk7CisKKyAgICAkY2xhdXNlcy0+eydmaW5hbGx5J30tPigpCisJaWYoZGVmaW5lZCgkY2xhdXNlcy0+eydmaW5hbGx5J30pKTsKKworICAgIGlmIChkZWZpbmVkKCRlcnIpKQorICAgIHsKKyAgICAgICAgaWYgKGJsZXNzZWQoJGVycikgJiYgJGVyci0+Y2FuKCd0aHJvdycpKQorICAgICAgICB7CisgICAgICAgICAgICB0aHJvdyAkZXJyOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgZGllICRlcnI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3YW50YXJyYXkgPyBAcmVzdWx0IDogJHJlc3VsdFswXTsKK30KKworIyBFYWNoIGNsYXVzZSBhZGRzIGEgc3ViIHRvIHRoZSBsaXN0IG9mIGNsYXVzZXMuIFRoZSBmaW5hbGx5IGNsYXVzZSBpcworIyBhbHdheXMgdGhlIGxhc3QsIGFuZCB0aGUgb3RoZXJ3aXNlIGNsYXVzZSBpcyBhbHdheXMgYWRkZWQganVzdCBiZWZvcmUKKyMgdGhlIGZpbmFsbHkgY2xhdXNlLgorIworIyBBbGwgY2xhdXNlcywgZXhjZXB0IHRoZSBmaW5hbGx5IGNsYXVzZSwgYWRkIGEgc3ViIHdoaWNoIHRha2VzIG9uZSBhcmd1bWVudAorIyB0aGlzIGFyZ3VtZW50IHdpbGwgYmUgdGhlIGVycm9yIGJlaW5nIHRocm93bi4gVGhlIHN1YiB3aWxsIHJldHVybiBhIGNvZGUgcmVmCisjIGlmIHRoYXQgY2xhdXNlIGNhbiBoYW5kbGUgdGhhdCBlcnJvciwgb3RoZXJ3aXNlIHVuZGVmIGlzIHJldHVybmVkLgorIworIyBUaGUgb3RoZXJ3aXNlIGNsYXVzZSBhZGRzIGEgc3ViIHdoaWNoIHVuY29uZGl0aW9uYWxseSByZXR1cm5zIHRoZSB1c2VycworIyBjb2RlIHJlZmVyZW5jZSwgdGhpcyBpcyB3aHkgaXQgaXMgZm9yY2VkIHRvIGJlIGxhc3QuCisjCisjIFRoZSBjYXRjaCBjbGF1c2UgaXMgZGVmaW5lZCBpbiBFcnJvci5wbSwgYXMgdGhlIHN5bnRheCBjYXVzZXMgaXQgdG8KKyMgYmUgY2FsbGVkIGFzIGEgbWV0aG9kCisKK3N1YiB3aXRoICgmOyQpIHsKKyAgICBAXworfQorCitzdWIgZmluYWxseSAoJikgeworICAgIG15ICRjb2RlID0gc2hpZnQ7CisgICAgbXkgJGNsYXVzZXMgPSB7ICdmaW5hbGx5JyA9PiAkY29kZSB9OworICAgICRjbGF1c2VzOworfQorCisjIFRoZSBleGNlcHQgY2xhdXNlIGlzIGEgYmxvY2sgd2hpY2ggcmV0dXJucyBhIGhhc2hyZWYgb3IgYSBsaXN0IG9mCisjIGtleS12YWx1ZSBwYWlycywgd2hlcmUgdGhlIGtleXMgYXJlIHRoZSBjbGFzc2VzIGFuZCB0aGUgdmFsdWVzIGFyZSBzdWJzLgorCitzdWIgZXhjZXB0ICgmOyQpIHsKKyAgICBteSAkY29kZSA9IHNoaWZ0OworICAgIG15ICRjbGF1c2VzID0gc2hpZnQgfHwge307CisgICAgbXkgJGNhdGNoID0gJGNsYXVzZXMtPnsnY2F0Y2gnfSB8fD0gW107CisKKyAgICBteSAkc3ViID0gc3ViIHsKKwlteSAkcmVmOworCW15KEBhcnJheSkgPSAkY29kZS0+KCRfWzBdKTsKKwlpZihAYXJyYXkgPT0gMSAmJiByZWYoJGFycmF5WzBdKSkgeworCSAgICAkcmVmID0gJGFycmF5WzBdOworCSAgICAkcmVmID0gWyAlJHJlZiBdCisJCWlmKFVOSVZFUlNBTDo6aXNhKCRyZWYsJ0hBU0gnKSk7CisJfQorCWVsc2UgeworCSAgICAkcmVmID0gXEBhcnJheTsKKwl9CisJQCRyZWYKKyAgICB9OworCisgICAgdW5zaGlmdCBAeyRjYXRjaH0sIHVuZGVmLCAkc3ViOworCisgICAgJGNsYXVzZXM7Cit9CisKK3N1YiBvdGhlcndpc2UgKCY7JCkgeworICAgIG15ICRjb2RlID0gc2hpZnQ7CisgICAgbXkgJGNsYXVzZXMgPSBzaGlmdCB8fCB7fTsKKworICAgIGlmKGV4aXN0cyAkY2xhdXNlcy0+eydvdGhlcndpc2UnfSkgeworCXJlcXVpcmUgQ2FycDsKKwlDYXJwOjpjcm9haygiTXVsdGlwbGUgb3RoZXJ3aXNlIGNsYXVzZXMiKTsKKyAgICB9CisKKyAgICAkY2xhdXNlcy0+eydvdGhlcndpc2UnfSA9ICRjb2RlOworCisgICAgJGNsYXVzZXM7Cit9CisKKzE7CitfX0VORF9fCisKKz1oZWFkMSBOQU1FCisKK0Vycm9yIC0gRXJyb3IvZXhjZXB0aW9uIGhhbmRsaW5nIGluIGFuIE9PLWlzaCB3YXkKKworPWhlYWQxIFNZTk9QU0lTCisKKyAgICB1c2UgRXJyb3IgcXcoOnRyeSk7CisKKyAgICB0aHJvdyBFcnJvcjo6U2ltcGxlKCAiQSBzaW1wbGUgZXJyb3IiKTsKKworICAgIHN1YiB4eXogeworICAgICAgICAuLi4KKwlyZWNvcmQgRXJyb3I6OlNpbXBsZSgiQSBzaW1wbGUgZXJyb3IiKQorCSAgICBhbmQgcmV0dXJuOworICAgIH0KKworICAgIHVubGluaygkZmlsZSkgb3IgdGhyb3cgRXJyb3I6OlNpbXBsZSgiJGZpbGU6ICQhIiwkISk7CisKKyAgICB0cnkgeworCWRvX3NvbWVfc3R1ZmYoKTsKKwlkaWUgImVycm9yISIgaWYgJGNvbmRpdGlvbjsKKwl0aHJvdyBFcnJvcjo6U2ltcGxlIC10ZXh0ID0+ICJPb3BzISIgaWYgJG90aGVyX2NvbmRpdGlvbjsKKyAgICB9CisgICAgY2F0Y2ggRXJyb3I6OklPIHdpdGggeworCW15ICRFID0gc2hpZnQ7CisJcHJpbnQgU1RERVJSICJGaWxlICIsICRFLT57Jy1maWxlJ30sICIgaGFkIGEgcHJvYmxlbVxuIjsKKyAgICB9CisgICAgZXhjZXB0IHsKKwlteSAkRSA9IHNoaWZ0OworCW15ICRnZW5lcmFsX2hhbmRsZXI9c3ViIHtzZW5kX21lc3NhZ2UgJEUtPnstZGVzY3JpcHRpb259fTsKKwlyZXR1cm4geworCSAgICBVc2VyRXhjZXB0aW9uMSA9PiAkZ2VuZXJhbF9oYW5kbGVyLAorCSAgICBVc2VyRXhjZXB0aW9uMiA9PiAkZ2VuZXJhbF9oYW5kbGVyCisJfTsKKyAgICB9CisgICAgb3RoZXJ3aXNlIHsKKwlwcmludCBTVERFUlIgIldlbGwgSSBkb24ndCBrbm93IHdoYXQgdG8gc2F5XG4iOworICAgIH0KKyAgICBmaW5hbGx5IHsKKwljbG9zZV90aGVfZ2FyYWdlX2Rvb3JfYWxyZWFkeSgpOyAjIFNob3VsZCBiZSByZWxpYWJsZQorICAgIH07ICMgRG9uJ3QgZm9yZ2V0IHRoZSB0cmFpbGluZyA7IG9yIHlvdSBtaWdodCBiZSBzdXJwcmlzZWQKKworPWhlYWQxIERFU0NSSVBUSU9OCisKK1RoZSBDPEVycm9yPiBwYWNrYWdlIHByb3ZpZGVzIHR3byBpbnRlcmZhY2VzLiBGaXJzdGx5IEM8RXJyb3I+IHByb3ZpZGVzCithIHByb2NlZHVyYWwgaW50ZXJmYWNlIHRvIGV4Y2VwdGlvbiBoYW5kbGluZy4gU2Vjb25kbHkgQzxFcnJvcj4gaXMgYQorYmFzZSBjbGFzcyBmb3IgZXJyb3JzL2V4Y2VwdGlvbnMgdGhhdCBjYW4gZWl0aGVyIGJlIHRocm93biwgZm9yCitzdWJzZXF1ZW50IGNhdGNoLCBvciBjYW4gc2ltcGx5IGJlIHJlY29yZGVkLgorCitFcnJvcnMgaW4gdGhlIGNsYXNzIEM8RXJyb3I+IHNob3VsZCBub3QgYmUgdGhyb3duIGRpcmVjdGx5LCBidXQgdGhlCit1c2VyIHNob3VsZCB0aHJvdyBlcnJvcnMgZnJvbSBhIHN1Yi1jbGFzcyBvZiBDPEVycm9yPi4KKworPWhlYWQxIFBST0NFRFVSQUwgSU5URVJGQUNFCisKK0M8RXJyb3I+IGV4cG9ydHMgc3Vicm91dGluZXMgdG8gcGVyZm9ybSBleGNlcHRpb24gaGFuZGxpbmcuIFRoZXNlIHdpbGwKK2JlIGV4cG9ydGVkIGlmIHRoZSBDPDp0cnk+IHRhZyBpcyB1c2VkIGluIHRoZSBDPHVzZT4gbGluZS4KKworPW92ZXIgNAorCis9aXRlbSB0cnkgQkxPQ0sgQ0xBVVNFUworCitDPHRyeT4gaXMgdGhlIG1haW4gc3Vicm91dGluZSBjYWxsZWQgYnkgdGhlIHVzZXIuIEFsbCBvdGhlciBzdWJyb3V0aW5lcworZXhwb3J0ZWQgYXJlIGNsYXVzZXMgdG8gdGhlIHRyeSBzdWJyb3V0aW5lLgorCitUaGUgQkxPQ0sgd2lsbCBiZSBldmFsdWF0ZWQgYW5kLCBpZiBubyBlcnJvciBpcyB0aHJvdywgdHJ5IHdpbGwgcmV0dXJuCit0aGUgcmVzdWx0IG9mIHRoZSBibG9jay4KKworQzxDTEFVU0VTPiBhcmUgdGhlIHN1YnJvdXRpbmVzIGJlbG93LCB3aGljaCBkZXNjcmliZSB3aGF0IHRvIGRvIGluIHRoZQorZXZlbnQgb2YgYW4gZXJyb3IgYmVpbmcgdGhyb3duIHdpdGhpbiBCTE9DSy4KKworPWl0ZW0gY2F0Y2ggQ0xBU1Mgd2l0aCBCTE9DSworCitUaGlzIGNsYXVzZXMgd2lsbCBjYXVzZSBhbGwgZXJyb3JzIHRoYXQgc2F0aXNmeSBDPCRlcnItRTxndD5pc2EoQ0xBU1MpPgordG8gYmUgY2F1Z2h0IGFuZCBoYW5kbGVkIGJ5IGV2YWx1YXRpbmcgQzxCTE9DSz4uCisKK0M8QkxPQ0s+IHdpbGwgYmUgcGFzc2VkIHR3byBhcmd1bWVudHMuIFRoZSBmaXJzdCB3aWxsIGJlIHRoZSBlcnJvcgorYmVpbmcgdGhyb3duLiBUaGUgc2Vjb25kIGlzIGEgcmVmZXJlbmNlIHRvIGEgc2NhbGFyIHZhcmlhYmxlLiBJZiB0aGlzCit2YXJpYWJsZSBpcyBzZXQgYnkgdGhlIGNhdGNoIGJsb2NrIHRoZW4sIG9uIHJldHVybiBmcm9tIHRoZSBjYXRjaAorYmxvY2ssIHRyeSB3aWxsIGNvbnRpbnVlIHByb2Nlc3NpbmcgYXMgaWYgdGhlIGNhdGNoIGJsb2NrIHdhcyBuZXZlcgorZm91bmQuCisKK1RvIHByb3BhZ2F0ZSB0aGUgZXJyb3IgdGhlIGNhdGNoIGJsb2NrIG1heSBjYWxsIEM8JGVyci1FPGd0PnRocm93PgorCitJZiB0aGUgc2NhbGFyIHJlZmVyZW5jZSBieSB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vdCBzZXQsIGFuZCB0aGUKK2Vycm9yIGlzIG5vdCB0aHJvd24uIFRoZW4gdGhlIGN1cnJlbnQgdHJ5IGJsb2NrIHdpbGwgcmV0dXJuIHdpdGggdGhlCityZXN1bHQgZnJvbSB0aGUgY2F0Y2ggYmxvY2suCisKKz1pdGVtIGV4Y2VwdCBCTE9DSworCitXaGVuIEM8dHJ5PiBpcyBsb29raW5nIGZvciBhIGhhbmRsZXIsIGlmIGFuIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQKK0M8QkxPQ0s+IGlzIGV2YWx1YXRlZC4gVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgYmxvY2sgc2hvdWxkIGJlIGEKK0hBU0hSRUYgb3IgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycywgd2hlcmUgdGhlIGtleXMgYXJlIGNsYXNzIG5hbWVzCithbmQgdGhlIHZhbHVlcyBhcmUgQ09ERSByZWZlcmVuY2VzIGZvciB0aGUgaGFuZGxlciBvZiBlcnJvcnMgb2YgdGhhdAordHlwZS4KKworPWl0ZW0gb3RoZXJ3aXNlIEJMT0NLCisKK0NhdGNoIGFueSBlcnJvciBieSBleGVjdXRpbmcgdGhlIGNvZGUgaW4gQzxCTE9DSz4KKworV2hlbiBldmFsdWF0ZWQgQzxCTE9DSz4gd2lsbCBiZSBwYXNzZWQgb25lIGFyZ3VtZW50LCB3aGljaCB3aWxsIGJlIHRoZQorZXJyb3IgYmVpbmcgcHJvY2Vzc2VkLgorCitPbmx5IG9uZSBvdGhlcndpc2UgYmxvY2sgbWF5IGJlIHNwZWNpZmllZCBwZXIgdHJ5IGJsb2NrCisKKz1pdGVtIGZpbmFsbHkgQkxPQ0sKKworRXhlY3V0ZSB0aGUgY29kZSBpbiBDPEJMT0NLPiBlaXRoZXIgYWZ0ZXIgdGhlIGNvZGUgaW4gdGhlIHRyeSBibG9jayBoYXMKK3N1Y2Nlc3NmdWxseSBjb21wbGV0ZWQsIG9yIGlmIHRoZSB0cnkgYmxvY2sgdGhyb3dzIGFuIGVycm9yIHRoZW4KK0M8QkxPQ0s+IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGhhbmRsZXIgaGFzIGNvbXBsZXRlZC4KKworSWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGVycm9yIHRoZW4gdGhlIGVycm9yIHdpbGwgYmUgY2F1Z2h0LCB0aGUKK2ZpbmFsbHkgYmxvY2sgd2lsbCBiZSBleGVjdXRlZCBhbmQgdGhlIGVycm9yIHdpbGwgYmUgcmUtdGhyb3duLgorCitPbmx5IG9uZSBmaW5hbGx5IGJsb2NrIG1heSBiZSBzcGVjaWZpZWQgcGVyIHRyeSBibG9jaworCis9YmFjaworCis9aGVhZDEgQ0xBU1MgSU5URVJGQUNFCisKKz1oZWFkMiBDT05TVFJVQ1RPUlMKKworVGhlIEM8RXJyb3I+IG9iamVjdCBpcyBpbXBsZW1lbnRlZCBhcyBhIEhBU0guIFRoaXMgSEFTSCBpcyBpbml0aWFsaXplZAord2l0aCB0aGUgYXJndW1lbnRzIHRoYXQgYXJlIHBhc3NlZCB0byBpdHMgY29uc3RydWN0b3IuIFRoZSBlbGVtZW50cwordGhhdCBhcmUgdXNlZCBieSwgb3IgYXJlIHJldHJpZXZhYmxlIGJ5IHRoZSBDPEVycm9yPiBjbGFzcyBhcmUgbGlzdGVkCitiZWxvdywgb3RoZXIgY2xhc3NlcyBtYXkgYWRkIHRvIHRoZXNlLgorCisJLWZpbGUKKwktbGluZQorCS10ZXh0CisJLXZhbHVlCisJLW9iamVjdAorCitJZiBDPC1maWxlPiBvciBDPC1saW5lPiBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzCit0aGVuIHRoZXNlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlciB3aGVyZQordGhlIGNvbnN0cnVjdG9yIHdhcyBjYWxsZWQgZnJvbS4KKworSWYgdGhlIGVycm9yIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBvYmplY3QgdGhlbiB0aGUgb2JqZWN0IHNob3VsZCBiZQorcGFzc2VkIGFzIHRoZSBDPC1vYmplY3Q+IGFyZ3VtZW50LiBUaGlzIHdpbGwgYWxsb3cgdGhlIEM8RXJyb3I+IHBhY2thZ2UKK3RvIGFzc29jaWF0ZSB0aGUgZXJyb3Igd2l0aCB0aGUgb2JqZWN0LgorCitUaGUgQzxFcnJvcj4gcGFja2FnZSByZW1lbWJlcnMgdGhlIGxhc3QgZXJyb3IgY3JlYXRlZCwgYW5kIGFsc28gdGhlCitsYXN0IGVycm9yIGFzc29jaWF0ZWQgd2l0aCBhIHBhY2thZ2UuIFRoaXMgY291bGQgZWl0aGVyIGJlIHRoZSBsYXN0CitlcnJvciBjcmVhdGVkIGJ5IGEgc3ViIGluIHRoYXQgcGFja2FnZSwgb3IgdGhlIGxhc3QgZXJyb3Igd2hpY2ggcGFzc2VkCithbiBvYmplY3QgYmxlc3NlZCBpbnRvIHRoYXQgcGFja2FnZSBhcyB0aGUgQzwtb2JqZWN0PiBhcmd1bWVudC4KKworPW92ZXIgNAorCis9aXRlbSB0aHJvdyAoIFsgQVJHUyBdICkKKworQ3JlYXRlIGEgbmV3IEM8RXJyb3I+IG9iamVjdCBhbmQgdGhyb3cgYW4gZXJyb3IsIHdoaWNoIHdpbGwgYmUgY2F1Z2h0CitieSBhIHN1cnJvdW5kaW5nIEM8dHJ5PiBibG9jaywgaWYgdGhlcmUgaXMgb25lLiBPdGhlcndpc2UgaXQgd2lsbCBjYXVzZQordGhlIHByb2dyYW0gdG8gZXhpdC4KKworQzx0aHJvdz4gbWF5IGFsc28gYmUgY2FsbGVkIG9uIGFuIGV4aXN0aW5nIGVycm9yIHRvIHJlLXRocm93IGl0LgorCis9aXRlbSB3aXRoICggWyBBUkdTIF0gKQorCitDcmVhdGUgYSBuZXcgQzxFcnJvcj4gb2JqZWN0IGFuZCByZXR1cm5zIGl0LiBUaGlzIGlzIGRlZmluZWQgZm9yCitzeW50YWN0aWMgc3VnYXIsIGVnCisKKyAgICBkaWUgd2l0aCBTb21lOjpFcnJvciAoIC4uLiApOworCis9aXRlbSByZWNvcmQgKCBbIEFSR1MgXSApCisKK0NyZWF0ZSBhIG5ldyBDPEVycm9yPiBvYmplY3QgYW5kIHJldHVybnMgaXQuIFRoaXMgaXMgZGVmaW5lZCBmb3IKK3N5bnRhY3RpYyBzdWdhciwgZWcKKworICAgIHJlY29yZCBTb21lOjpFcnJvciAoIC4uLiApCisJYW5kIHJldHVybjsKKworPWJhY2sKKworPWhlYWQyIFNUQVRJQyBNRVRIT0RTCisKKz1vdmVyIDQKKworPWl0ZW0gcHJpb3IgKCBbIFBBQ0tBR0UgXSApCisKK1JldHVybiB0aGUgbGFzdCBlcnJvciBjcmVhdGVkLCBvciB0aGUgbGFzdCBlcnJvciBhc3NvY2lhdGVkIHdpdGgKK0M8UEFDS0FHRT4KKworPWl0ZW0gZmx1c2ggKCBbIFBBQ0tBR0UgXSApCisKK0ZsdXNoIHRoZSBsYXN0IGVycm9yIGNyZWF0ZWQsIG9yIHRoZSBsYXN0IGVycm9yIGFzc29jaWF0ZWQgd2l0aAorQzxQQUNLQUdFPi5JdCBpcyBuZWNlc3NhcnkgdG8gY2xlYXIgdGhlIGVycm9yIHN0YWNrIGJlZm9yZSBleGl0aW5nIHRoZQorcGFja2FnZSBvciB1bmNhdWdodCBlcnJvcnMgZ2VuZXJhdGVkIHVzaW5nIEM8cmVjb3JkPiB3aWxsIGJlIHJlcG9ydGVkLgorCisgICAgICRFcnJvci0+Zmx1c2g7CisKKz1jdXQKKworPWJhY2sKKworPWhlYWQyIE9CSkVDVCBNRVRIT0RTCisKKz1vdmVyIDQKKworPWl0ZW0gc3RhY2t0cmFjZQorCitJZiB0aGUgdmFyaWFibGUgQzwkRXJyb3I6OkRlYnVnPiB3YXMgbm9uLXplcm8gd2hlbiB0aGUgZXJyb3Igd2FzCitjcmVhdGVkLCB0aGVuIEM8c3RhY2t0cmFjZT4gcmV0dXJucyBhIHN0cmluZyBjcmVhdGVkIGJ5IGNhbGxpbmcKK0M8Q2FycDo6bG9uZ21lc3M+LiBJZiB0aGUgdmFyaWFibGUgd2FzIHplcm8gdGhlIEM8c3RhY2t0cmFjZT4gcmV0dXJucwordGhlIHRleHQgb2YgdGhlIGVycm9yIGFwcGVuZGVkIHdpdGggdGhlIGZpbGVuYW1lIGFuZCBsaW5lIG51bWJlciBvZgord2hlcmUgdGhlIGVycm9yIHdhcyBjcmVhdGVkLCBwcm92aWRpbmcgdGhlIHRleHQgZG9lcyBub3QgZW5kIHdpdGggYQorbmV3bGluZS4KKworPWl0ZW0gb2JqZWN0CisKK1RoZSBvYmplY3QgdGhpcyBlcnJvciB3YXMgYXNzb2NpYXRlZCB3aXRoCisKKz1pdGVtIGZpbGUKKworVGhlIGZpbGUgd2hlcmUgdGhlIGNvbnN0cnVjdG9yIG9mIHRoaXMgZXJyb3Igd2FzIGNhbGxlZCBmcm9tCisKKz1pdGVtIGxpbmUKKworVGhlIGxpbmUgd2hlcmUgdGhlIGNvbnN0cnVjdG9yIG9mIHRoaXMgZXJyb3Igd2FzIGNhbGxlZCBmcm9tCisKKz1pdGVtIHRleHQKKworVGhlIHRleHQgb2YgdGhlIGVycm9yCisKKz1iYWNrCisKKz1oZWFkMiBPVkVSTE9BRCBNRVRIT0RTCisKKz1vdmVyIDQKKworPWl0ZW0gc3RyaW5naWZ5CisKK0EgbWV0aG9kIHRoYXQgY29udmVydHMgdGhlIG9iamVjdCBpbnRvIGEgc3RyaW5nLiBUaGlzIG1ldGhvZCBtYXkgc2ltcGx5CityZXR1cm4gdGhlIHNhbWUgYXMgdGhlIEM8dGV4dD4gbWV0aG9kLCBvciBpdCBtYXkgYXBwZW5kIG1vcmUKK2luZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSB0aGUgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlci4KKworQnkgZGVmYXVsdCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBDPC10ZXh0PiBhcmd1bWVudCB0aGF0IHdhcyBwYXNzZWQgdG8KK3RoZSBjb25zdHJ1Y3Rvciwgb3IgdGhlIHN0cmluZyBDPCJEaWVkIj4gaWYgbm9uZSB3YXMgZ2l2ZW4uCisKKz1pdGVtIHZhbHVlCisKK0EgbWV0aG9kIHRoYXQgd2lsbCByZXR1cm4gYSB2YWx1ZSB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggdGhlCitlcnJvci4gRm9yIGV4YW1wbGUgaWYgYW4gZXJyb3Igd2FzIGNyZWF0ZWQgZHVlIHRvIHRoZSBmYWlsdXJlIG9mIGEKK3N5c3RlbSBjYWxsLCB0aGVuIHRoaXMgbWF5IHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBvZiBDPCQhPiBhdCB0aGUKK3RpbWUuCisKK0J5IGRlZmF1bHQgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgQzwtdmFsdWU+IGFyZ3VtZW50IHRoYXQgd2FzIHBhc3NlZAordG8gdGhlIGNvbnN0cnVjdG9yLgorCis9YmFjaworCis9aGVhZDEgUFJFLURFRklORUQgRVJST1IgQ0xBU1NFUworCis9b3ZlciA0CisKKz1pdGVtIEVycm9yOjpTaW1wbGUKKworVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBob2xkIHNpbXBsZSBlcnJvciBzdHJpbmdzIGFuZCB2YWx1ZXMuIEl0cworY29uc3RydWN0b3IgdGFrZXMgdHdvIGFyZ3VtZW50cy4gVGhlIGZpcnN0IGlzIGEgdGV4dCB2YWx1ZSwgdGhlIHNlY29uZAoraXMgYSBudW1lcmljIHZhbHVlLiBUaGVzZSB2YWx1ZXMgYXJlIHdoYXQgd2lsbCBiZSByZXR1cm5lZCBieSB0aGUKK292ZXJsb2FkIG1ldGhvZHMuCisKK0lmIHRoZSB0ZXh0IHZhbHVlIGVuZHMgd2l0aCBDPGF0IGZpbGUgbGluZSAxPiBhcyAkQCBzdHJpbmdzIGRvLCB0aGVuCit0aGlzIGluZm9ybWF0aW9uIHdpbGwgYmUgdXNlZCB0byBzZXQgdGhlIEM8LWZpbGU+IGFuZCBDPC1saW5lPiBhcmd1bWVudHMKK29mIHRoZSBlcnJvciBvYmplY3QuCisKK1RoaXMgY2xhc3MgaXMgdXNlZCBpbnRlcm5hbGx5IGlmIGFuIGV2YWwnZCBibG9jayBkaWUncyB3aXRoIGFuIGVycm9yCit0aGF0IGlzIGEgcGxhaW4gc3RyaW5nLiAoVW5sZXNzIEM8JEVycm9yOjpPYmplY3RpZnlDYWxsYmFjaz4gaXMgbW9kaWZpZWQpCisKKz1iYWNrCisKKz1oZWFkMSAkRXJyb3I6Ok9iamVjdGlmeUNhbGxiYWNrCisKK1RoaXMgdmFyaWFibGUgaG9sZHMgYSByZWZlcmVuY2UgdG8gYSBzdWJyb3V0aW5lIHRoYXQgY29udmVydHMgZXJyb3JzIHRoYXQKK2FyZSBwbGFpbiBzdHJpbmdzIHRvIG9iamVjdHMuIEl0IGlzIHVzZWQgYnkgRXJyb3IucG0gdG8gY29udmVydCB0ZXh0dWFsCitlcnJvcnMgdG8gb2JqZWN0cywgYW5kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyLgorCitJdCBhY2NlcHRzIGEgc2luZ2xlIGFyZ3VtZW50IHdoaWNoIGlzIGEgaGFzaCByZWZlcmVuY2UgdG8gbmFtZWQgcGFyYW1ldGVycy4KK0N1cnJlbnRseSB0aGUgb25seSBuYW1lZCBwYXJhbWV0ZXIgcGFzc2VkIGlzIEM8J3RleHQnPiB3aGljaCBpcyB0aGUgdGV4dAorb2YgdGhlIGVycm9yLCBidXQgb3RoZXJzIG1heSBiZSBhdmFpbGFibGUgaW4gdGhlIGZ1dHVyZS4KKworRm9yIGV4YW1wbGUgdGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgY2F1c2UgRXJyb3IucG0gdG8gdGhyb3cgb2JqZWN0cyBvZiB0aGUKK2NsYXNzIE15RXJyb3I6OkJhciBieSBkZWZhdWx0OgorCisgICAgc3ViIHRocm93X015RXJyb3JfQmFyCisgICAgeworICAgICAgICBteSAkYXJncyA9IHNoaWZ0OworICAgICAgICBteSAkZXJyID0gTXlFcnJvcjo6QmFyLT5uZXcoKTsKKyAgICAgICAgJGVyci0+eydNeUJhclRleHQnfSA9ICRhcmdzLT57J3RleHQnfTsKKyAgICAgICAgcmV0dXJuICRlcnI7CisgICAgfQorCisgICAgeworICAgICAgICBsb2NhbCAkRXJyb3I6Ok9iamVjdGlmeUNhbGxiYWNrID0gXCZ0aHJvd19NeUVycm9yX0JhcjsKKworICAgICAgICAjIEVycm9yIGhhbmRsaW5nIGhlcmUuCisgICAgfQorCis9aGVhZDEgS05PV04gQlVHUworCitOb25lLCBidXQgdGhhdCBkb2VzIG5vdCBtZWFuIHRoZXJlIGFyZSBub3QgYW55LgorCis9aGVhZDEgQVVUSE9SUworCitHcmFoYW0gQmFyciA8Z2JhcnJAcG9ib3guY29tPgorCitUaGUgY29kZSB0aGF0IGluc3BpcmVkIG1lIHRvIHdyaXRlIHRoaXMgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieQorUGV0ZXIgU2VpYmVsIDxwZXRlckB3ZWJsb2dpYy5jb20+IGFuZCBhZGFwdGVkIGJ5IEplc3NlIEdsaWNrCis8amdsaWNrQHNpZy5ic2guY29tPi4KKworPWhlYWQxIE1BSU5UQUlORVIKKworU2hsb21pIEZpc2ggPHNobG9taWZAaWdsdS5vcmcuaWw+CisKKz1oZWFkMSBQQVNUIE1BSU5UQUlORVJTCisKK0FydW4gS3VtYXIgVSA8dV9hcnVua3VtYXJAeWFob28uY29tPgorCis9Y3V0CmRpZmYgLS1naXQgYS9wa3QtbGluZS5jIGIvcGt0LWxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmZkYjM3Ci0tLSAvZGV2L251bGwKKysrIGIvcGt0LWxpbmUuYwpAQCAtMCwwICsxLDI1MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCitjaGFyIHBhY2tldF9idWZmZXJbTEFSR0VfUEFDS0VUX01BWF07CitzdGF0aWMgY29uc3QgY2hhciAqcGFja2V0X3RyYWNlX3ByZWZpeCA9ICJnaXQiOworc3RhdGljIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2VfcGFja2V0ID0gVFJBQ0VfS0VZX0lOSVQoUEFDS0VUKTsKK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX3BhY2sgPSBUUkFDRV9LRVlfSU5JVChQQUNLRklMRSk7CisKK3ZvaWQgcGFja2V0X3RyYWNlX2lkZW50aXR5KGNvbnN0IGNoYXIgKnByb2cpCit7CisJcGFja2V0X3RyYWNlX3ByZWZpeCA9IHhzdHJkdXAocHJvZyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfdHJhY2VfcHJlZml4KHZvaWQpCit7CisJcmV0dXJuIGluX2FzeW5jKCkgPyAic2lkZWJhbmQiIDogcGFja2V0X3RyYWNlX3ByZWZpeDsKK30KKworc3RhdGljIGludCBwYWNrZXRfdHJhY2VfcGFjayhjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4sIGludCBzaWRlYmFuZCkKK3sKKwlpZiAoIXNpZGViYW5kKSB7CisJCXRyYWNlX3ZlcmJhdGltKCZ0cmFjZV9wYWNrLCBidWYsIGxlbik7CisJCXJldHVybiAxOworCX0gZWxzZSBpZiAobGVuICYmICpidWYgPT0gJ1wxJykgeworCQl0cmFjZV92ZXJiYXRpbSgmdHJhY2VfcGFjaywgYnVmICsgMSwgbGVuIC0gMSk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCS8qIGl0J3MgYW5vdGhlciBub24tcGFjayBzaWRlYmFuZCAqLworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBhY2tldF90cmFjZShjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4sIGludCB3cml0ZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgc3RyYnVmIG91dDsKKwlzdGF0aWMgaW50IGluX3BhY2ssIHNpZGViYW5kOworCisJaWYgKCF0cmFjZV93YW50KCZ0cmFjZV9wYWNrZXQpICYmICF0cmFjZV93YW50KCZ0cmFjZV9wYWNrKSkKKwkJcmV0dXJuOworCisJaWYgKGluX3BhY2spIHsKKwkJaWYgKHBhY2tldF90cmFjZV9wYWNrKGJ1ZiwgbGVuLCBzaWRlYmFuZCkpCisJCQlyZXR1cm47CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChidWYsICJQQUNLIikgfHwgc3RhcnRzX3dpdGgoYnVmLCAiXDFQQUNLIikpIHsKKwkJaW5fcGFjayA9IDE7CisJCXNpZGViYW5kID0gKmJ1ZiA9PSAnXDEnOworCQlwYWNrZXRfdHJhY2VfcGFjayhidWYsIGxlbiwgc2lkZWJhbmQpOworCisJCS8qCisJCSAqIE1ha2UgYSBub3RlIGluIHRoZSBodW1hbi1yZWFkYWJsZSB0cmFjZSB0aGF0IHRoZSBwYWNrIGRhdGEKKwkJICogc3RhcnRlZC4KKwkJICovCisJCWJ1ZiA9ICJQQUNLIC4uLiI7CisJCWxlbiA9IHN0cmxlbihidWYpOworCX0KKworCWlmICghdHJhY2Vfd2FudCgmdHJhY2VfcGFja2V0KSkKKwkJcmV0dXJuOworCisJLyogKzMyIGlzIGp1c3QgYSBndWVzcyBmb3IgaGVhZGVyICsgcXVvdGluZyAqLworCXN0cmJ1Zl9pbml0KCZvdXQsIGxlbiszMik7CisKKwlzdHJidWZfYWRkZigmb3V0LCAicGFja2V0OiAlMTJzJWMgIiwKKwkJICAgIGdldF90cmFjZV9wcmVmaXgoKSwgd3JpdGUgPyAnPicgOiAnPCcpOworCisJLyogWFhYIHdlIHNob3VsZCByZWFsbHkgaGFuZGxlIHByaW50YWJsZSB1dGY4ICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCS8qIHN1cHByZXNzIG5ld2xpbmVzICovCisJCWlmIChidWZbaV0gPT0gJ1xuJykKKwkJCWNvbnRpbnVlOworCQlpZiAoYnVmW2ldID49IDB4MjAgJiYgYnVmW2ldIDw9IDB4N2UpCisJCQlzdHJidWZfYWRkY2goJm91dCwgYnVmW2ldKTsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGYoJm91dCwgIlxcJW8iLCBidWZbaV0pOworCX0KKworCXN0cmJ1Zl9hZGRjaCgmb3V0LCAnXG4nKTsKKwl0cmFjZV9zdHJidWYoJnRyYWNlX3BhY2tldCwgJm91dCk7CisJc3RyYnVmX3JlbGVhc2UoJm91dCk7Cit9CisKKy8qCisgKiBJZiB3ZSBidWZmZXJlZCB0aGluZ3MgdXAgYWJvdmUgKHdlIGRvbid0LCBidXQgd2Ugc2hvdWxkKSwKKyAqIHdlJ2QgZmx1c2ggaXQgaGVyZQorICovCit2b2lkIHBhY2tldF9mbHVzaChpbnQgZmQpCit7CisJcGFja2V0X3RyYWNlKCIwMDAwIiwgNCwgMSk7CisJd3JpdGVfb3JfZGllKGZkLCAiMDAwMCIsIDQpOworfQorCit2b2lkIHBhY2tldF9idWZfZmx1c2goc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCXBhY2tldF90cmFjZSgiMDAwMCIsIDQsIDEpOworCXN0cmJ1Zl9hZGQoYnVmLCAiMDAwMCIsIDQpOworfQorCisjZGVmaW5lIGhleChhKSAoaGV4Y2hhclsoYSkgJiAxNV0pCitzdGF0aWMgdm9pZCBmb3JtYXRfcGFja2V0KHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpCit7CisJc3RhdGljIGNoYXIgaGV4Y2hhcltdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworCXNpemVfdCBvcmlnX2xlbiwgbjsKKworCW9yaWdfbGVuID0gb3V0LT5sZW47CisJc3RyYnVmX2FkZHN0cihvdXQsICIwMDAwIik7CisJc3RyYnVmX3ZhZGRmKG91dCwgZm10LCBhcmdzKTsKKwluID0gb3V0LT5sZW4gLSBvcmlnX2xlbjsKKworCWlmIChuID4gTEFSR0VfUEFDS0VUX01BWCkKKwkJZGllKCJwcm90b2NvbCBlcnJvcjogaW1wb3NzaWJseSBsb25nIGxpbmUiKTsKKworCW91dC0+YnVmW29yaWdfbGVuICsgMF0gPSBoZXgobiA+PiAxMik7CisJb3V0LT5idWZbb3JpZ19sZW4gKyAxXSA9IGhleChuID4+IDgpOworCW91dC0+YnVmW29yaWdfbGVuICsgMl0gPSBoZXgobiA+PiA0KTsKKwlvdXQtPmJ1ZltvcmlnX2xlbiArIDNdID0gaGV4KG4pOworCXBhY2tldF90cmFjZShvdXQtPmJ1ZiArIG9yaWdfbGVuICsgNCwgbiAtIDQsIDEpOworfQorCit2b2lkIHBhY2tldF93cml0ZShpbnQgZmQsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0YXRpYyBzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCXZhX2xpc3QgYXJnczsKKworCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWZvcm1hdF9wYWNrZXQoJmJ1ZiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJd3JpdGVfb3JfZGllKGZkLCBidWYuYnVmLCBidWYubGVuKTsKK30KKwordm9pZCBwYWNrZXRfYnVmX3dyaXRlKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlmb3JtYXRfcGFja2V0KGJ1ZiwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3BhY2tldF9kYXRhKGludCBmZCwgY2hhciAqKnNyY19idWYsIHNpemVfdCAqc3JjX3NpemUsCisJCQkgICB2b2lkICpkc3QsIHVuc2lnbmVkIHNpemUsIGludCBvcHRpb25zKQoreworCXNzaXplX3QgcmV0OworCisJaWYgKGZkID49IDAgJiYgc3JjX2J1ZiAmJiAqc3JjX2J1ZikKKwkJZGllKCJCVUc6IG11bHRpcGxlIHNvdXJjZXMgZ2l2ZW4gdG8gcGFja2V0X3JlYWQiKTsKKworCS8qIFJlYWQgdXAgdG8gInNpemUiIGJ5dGVzIGZyb20gb3VyIHNvdXJjZSwgd2hhdGV2ZXIgaXQgaXMuICovCisJaWYgKHNyY19idWYgJiYgKnNyY19idWYpIHsKKwkJcmV0ID0gc2l6ZSA8ICpzcmNfc2l6ZSA/IHNpemUgOiAqc3JjX3NpemU7CisJCW1lbWNweShkc3QsICpzcmNfYnVmLCByZXQpOworCQkqc3JjX2J1ZiArPSByZXQ7CisJCSpzcmNfc2l6ZSAtPSByZXQ7CisJfSBlbHNlIHsKKwkJcmV0ID0gcmVhZF9pbl9mdWxsKGZkLCBkc3QsIHNpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCWRpZV9lcnJubygicmVhZCBlcnJvciIpOworCX0KKworCS8qIEFuZCBjb21wbGFpbiBpZiB3ZSBkaWRuJ3QgZ2V0IGVub3VnaCBieXRlcyB0byBzYXRpc2Z5IHRoZSByZWFkLiAqLworCWlmIChyZXQgPCBzaXplKSB7CisJCWlmIChvcHRpb25zICYgUEFDS0VUX1JFQURfR0VOVExFX09OX0VPRikKKwkJCXJldHVybiAtMTsKKworCQlkaWUoIlRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5Iik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYWNrZXRfbGVuZ3RoKGNvbnN0IGNoYXIgKmxpbmVsZW4pCit7CisJaW50IG47CisJaW50IGxlbiA9IDA7CisKKwlmb3IgKG4gPSAwOyBuIDwgNDsgbisrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9IGxpbmVsZW5bbl07CisJCWxlbiA8PD0gNDsKKwkJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7CisJCQlsZW4gKz0gYyAtICcwJzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID49ICdhJyAmJiBjIDw9ICdmJykgeworCQkJbGVuICs9IGMgLSAnYScgKyAxMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID49ICdBJyAmJiBjIDw9ICdGJykgeworCQkJbGVuICs9IGMgLSAnQScgKyAxMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworaW50IHBhY2tldF9yZWFkKGludCBmZCwgY2hhciAqKnNyY19idWYsIHNpemVfdCAqc3JjX2xlbiwKKwkJY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBzaXplLCBpbnQgb3B0aW9ucykKK3sKKwlpbnQgbGVuLCByZXQ7CisJY2hhciBsaW5lbGVuWzRdOworCisJcmV0ID0gZ2V0X3BhY2tldF9kYXRhKGZkLCBzcmNfYnVmLCBzcmNfbGVuLCBsaW5lbGVuLCA0LCBvcHRpb25zKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlsZW4gPSBwYWNrZXRfbGVuZ3RoKGxpbmVsZW4pOworCWlmIChsZW4gPCAwKQorCQlkaWUoInByb3RvY29sIGVycm9yOiBiYWQgbGluZSBsZW5ndGggY2hhcmFjdGVyOiAlLjRzIiwgbGluZWxlbik7CisJaWYgKCFsZW4pIHsKKwkJcGFja2V0X3RyYWNlKCIwMDAwIiwgNCwgMCk7CisJCXJldHVybiAwOworCX0KKwlsZW4gLT0gNDsKKwlpZiAobGVuID49IHNpemUpCisJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGJhZCBsaW5lIGxlbmd0aCAlZCIsIGxlbik7CisJcmV0ID0gZ2V0X3BhY2tldF9kYXRhKGZkLCBzcmNfYnVmLCBzcmNfbGVuLCBidWZmZXIsIGxlbiwgb3B0aW9ucyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoKG9wdGlvbnMgJiBQQUNLRVRfUkVBRF9DSE9NUF9ORVdMSU5FKSAmJgorCSAgICBsZW4gJiYgYnVmZmVyW2xlbi0xXSA9PSAnXG4nKQorCQlsZW4tLTsKKworCWJ1ZmZlcltsZW5dID0gMDsKKwlwYWNrZXRfdHJhY2UoYnVmZmVyLCBsZW4sIDApOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBjaGFyICpwYWNrZXRfcmVhZF9saW5lX2dlbmVyaWMoaW50IGZkLAorCQkJCSAgICAgIGNoYXIgKipzcmMsIHNpemVfdCAqc3JjX2xlbiwKKwkJCQkgICAgICBpbnQgKmRzdF9sZW4pCit7CisJaW50IGxlbiA9IHBhY2tldF9yZWFkKGZkLCBzcmMsIHNyY19sZW4sCisJCQkgICAgICBwYWNrZXRfYnVmZmVyLCBzaXplb2YocGFja2V0X2J1ZmZlciksCisJCQkgICAgICBQQUNLRVRfUkVBRF9DSE9NUF9ORVdMSU5FKTsKKwlpZiAoZHN0X2xlbikKKwkJKmRzdF9sZW4gPSBsZW47CisJcmV0dXJuIGxlbiA/IHBhY2tldF9idWZmZXIgOiBOVUxMOworfQorCitjaGFyICpwYWNrZXRfcmVhZF9saW5lKGludCBmZCwgaW50ICpsZW5fcCkKK3sKKwlyZXR1cm4gcGFja2V0X3JlYWRfbGluZV9nZW5lcmljKGZkLCBOVUxMLCBOVUxMLCBsZW5fcCk7Cit9CisKK2NoYXIgKnBhY2tldF9yZWFkX2xpbmVfYnVmKGNoYXIgKipzcmMsIHNpemVfdCAqc3JjX2xlbiwgaW50ICpkc3RfbGVuKQoreworCXJldHVybiBwYWNrZXRfcmVhZF9saW5lX2dlbmVyaWMoLTEsIHNyYywgc3JjX2xlbiwgZHN0X2xlbik7Cit9CmRpZmYgLS1naXQgYS9wa3QtbGluZS5oIGIvcGt0LWxpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2I5ZDkxCi0tLSAvZGV2L251bGwKKysrIGIvcGt0LWxpbmUuaApAQCAtMCwwICsxLDgyIEBACisjaWZuZGVmIFBLVExJTkVfSAorI2RlZmluZSBQS1RMSU5FX0gKKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisvKgorICogV3JpdGUgYSBwYWNrZXRpemVkIHN0cmVhbSwgd2hlcmUgZWFjaCBsaW5lIGlzIHByZWNlZGVkIGJ5CisgKiBpdHMgbGVuZ3RoIChpbmNsdWRpbmcgdGhlIGhlYWRlcikgYXMgYSA0LWJ5dGUgaGV4IG51bWJlci4KKyAqIEEgbGVuZ3RoIG9mICd6ZXJvJyBtZWFucyBlbmQgb2Ygc3RyZWFtIChhbmQgYSBsZW5ndGggb2YgMS0zCisgKiB3b3VsZCBiZSBhbiBlcnJvcikuCisgKgorICogVGhpcyBpcyBhbGwgcHJldHR5IHN0dXBpZCwgYnV0IHdlIHVzZSB0aGlzIHBhY2tldGl6ZWQgbGluZQorICogZm9ybWF0IHRvIG1ha2UgYSBzdHJlYW1pbmcgZm9ybWF0IHBvc3NpYmxlIHdpdGhvdXQgZXZlcgorICogb3Zlci1ydW5uaW5nIHRoZSByZWFkIGJ1ZmZlcnMuIFRoYXQgd2F5IHdlJ2xsIG5ldmVyIHJlYWQKKyAqIGludG8gd2hhdCBtaWdodCBiZSB0aGUgcGFjayBkYXRhICh3aGljaCBzaG91bGQgZ28gdG8gYW5vdGhlcgorICogcHJvY2VzcyBlbnRpcmVseSkuCisgKgorICogVGhlIHdyaXRpbmcgc2lkZSBjb3VsZCB1c2Ugc3RkaW8sIGJ1dCBzaW5jZSB0aGUgcmVhZGluZworICogc2lkZSBjYW4ndCwgd2Ugc3RheSB3aXRoIHB1cmUgcmVhZC93cml0ZSBpbnRlcmZhY2VzLgorICovCit2b2lkIHBhY2tldF9mbHVzaChpbnQgZmQpOwordm9pZCBwYWNrZXRfd3JpdGUoaW50IGZkLCBjb25zdCBjaGFyICpmbXQsIC4uLikgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7Cit2b2lkIHBhY2tldF9idWZfZmx1c2goc3RydWN0IHN0cmJ1ZiAqYnVmKTsKK3ZvaWQgcGFja2V0X2J1Zl93cml0ZShzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKSBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKTsKKworLyoKKyAqIFJlYWQgYSBwYWNrZXRpemVkIGxpbmUgaW50byB0aGUgYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IHNpemUgYnl0ZXMKKyAqIGxvbmcuIFRoZSByZXR1cm4gdmFsdWUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpbnRvIHRoZSBidWZmZXIuCisgKgorICogSWYgc3JjX2J1ZmZlciBhbmQgKnNyY19idWZmZXIgYXJlIG5vdCBOVUxMLCBpdCBzaG91bGQgcG9pbnQgdG8gYSBidWZmZXIKKyAqIGNvbnRhaW5pbmcgdGhlIHBhY2tldCBkYXRhIHRvIHBhcnNlLCBvZiBhdCBsZWFzdCAqc3JjX2xlbiBieXRlcy4gIEFmdGVyIHRoZQorICogZnVuY3Rpb24gcmV0dXJucywgc3JjX2J1ZiB3aWxsIGJlIGluY3JlbWVudGVkIGFuZCBzcmNfbGVuIGRlY3JlbWVudGVkIGJ5IHRoZQorICogbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkLgorICoKKyAqIElmIHNyY19idWZmZXIgKG9yICpzcmNfYnVmZmVyKSBpcyBOVUxMLCB0aGVuIGRhdGEgaXMgcmVhZCBmcm9tIHRoZQorICogZGVzY3JpcHRvciAiZmQiLgorICoKKyAqIElmIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBQQUNLRVRfUkVBRF9HRU5UTEVfT05fRU9GLCB3ZSB3aWxsIGRpZSB1bmRlciBhbnkKKyAqIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiAgIDEuIFJlYWQgZXJyb3IgZnJvbSBkZXNjcmlwdG9yLgorICoKKyAqICAgMi4gUHJvdG9jb2wgZXJyb3IgZnJvbSB0aGUgcmVtb3RlIChlLmcuLCBib2d1cyBsZW5ndGggY2hhcmFjdGVycykuCisgKgorICogICAzLiBSZWNlaXZpbmcgYSBwYWNrZXQgbGFyZ2VyIHRoYW4gInNpemUiIGJ5dGVzLgorICoKKyAqICAgNC4gVHJ1bmNhdGVkIG91dHB1dCBmcm9tIHRoZSByZW1vdGUgKGUuZy4sIHdlIGV4cGVjdGVkIGEgcGFja2V0IGJ1dCBnb3QKKyAqICAgICAgRU9GLCBvciB3ZSBnb3QgYSBwYXJ0aWFsIHBhY2tldCBmb2xsb3dlZCBieSBFT0YpLgorICoKKyAqIElmIG9wdGlvbnMgZG9lcyBjb250YWluIFBBQ0tFVF9SRUFEX0dFTlRMRV9PTl9FT0YsIHdlIHdpbGwgbm90IGRpZSBvbgorICogY29uZGl0aW9uIDQgKHRydW5jYXRlZCBpbnB1dCksIGJ1dCBpbnN0ZWFkIHJldHVybiAtMS4gSG93ZXZlciwgd2Ugd2lsbCBzdGlsbAorICogZGllIGZvciB0aGUgb3RoZXIgMyBjb25kaXRpb25zLgorICoKKyAqIElmIG9wdGlvbnMgY29udGFpbnMgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSwgYSB0cmFpbGluZyBuZXdsaW5lIChpZgorICogcHJlc2VudCkgaXMgcmVtb3ZlZCBmcm9tIHRoZSBidWZmZXIgYmVmb3JlIHJldHVybmluZy4KKyAqLworI2RlZmluZSBQQUNLRVRfUkVBRF9HRU5UTEVfT05fRU9GICgxdTw8MCkKKyNkZWZpbmUgUEFDS0VUX1JFQURfQ0hPTVBfTkVXTElORSAoMXU8PDEpCitpbnQgcGFja2V0X3JlYWQoaW50IGZkLCBjaGFyICoqc3JjX2J1ZmZlciwgc2l6ZV90ICpzcmNfbGVuLCBjaGFyCisJCSpidWZmZXIsIHVuc2lnbmVkIHNpemUsIGludCBvcHRpb25zKTsKKworLyoKKyAqIENvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHBhY2tldF9yZWFkIHRoYXQgaXMgbm90IGdlbnRsZSwgYW5kIHNldHMgdGhlCisgKiBDSE9NUF9ORVdMSU5FIG9wdGlvbi4gVGhlIHJldHVybiB2YWx1ZSBpcyBOVUxMIGZvciBhIGZsdXNoIHBhY2tldCwKKyAqIGFuZCBvdGhlcndpc2UgcG9pbnRzIHRvIGEgc3RhdGljIGJ1ZmZlciAodGhhdCBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkKKyAqIHN1YnNlcXVlbnQgY2FsbHMpLiBJZiB0aGUgc2l6ZSBwYXJhbWV0ZXIgaXMgbm90IE5VTEwsIHRoZSBsZW5ndGggb2YgdGhlCisgKiBwYWNrZXQgaXMgd3JpdHRlbiB0byBpdC4KKyAqLworY2hhciAqcGFja2V0X3JlYWRfbGluZShpbnQgZmQsIGludCAqc2l6ZSk7CisKKy8qCisgKiBTYW1lIGFzIHBhY2tldF9yZWFkX2xpbmUsIGJ1dCByZWFkIGZyb20gYSBidWYgcmF0aGVyIHRoYW4gYSBkZXNjcmlwdG9yOworICogc2VlIHBhY2tldF9yZWFkIGZvciBkZXRhaWxzIG9uIGhvdyBzcmNfKiBpcyB1c2VkLgorICovCitjaGFyICpwYWNrZXRfcmVhZF9saW5lX2J1ZihjaGFyICoqc3JjX2J1Ziwgc2l6ZV90ICpzcmNfbGVuLCBpbnQgKnNpemUpOworCisjZGVmaW5lIERFRkFVTFRfUEFDS0VUX01BWCAxMDAwCisjZGVmaW5lIExBUkdFX1BBQ0tFVF9NQVggNjU1MjAKK2V4dGVybiBjaGFyIHBhY2tldF9idWZmZXJbTEFSR0VfUEFDS0VUX01BWF07CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcG8vLmdpdGlnbm9yZSBiL3BvLy5naXRpZ25vcmUKaW5kZXggZTM1OGRkMS4uNzk2Yjk2ZCAxMDA2NDQKLS0tIGEvcG8vLmdpdGlnbm9yZQorKysgYi9wby8uZ2l0aWdub3JlCkBAIC0xICsxIEBACi0qLm1zZworL2J1aWxkCmRpZmYgLS1naXQgYS9wby9SRUFETUUgYi9wby9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmNGMwZgotLS0gL2Rldi9udWxsCisrKyBiL3BvL1JFQURNRQpAQCAtMCwwICsxLDMxMSBAQAorQ29yZSBHSVQgVHJhbnNsYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBkaXJlY3RvcnkgaG9sZHMgdGhlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGNvcmUgb2YgR2l0LiBUaGlzIGRvY3VtZW50CitkZXNjcmliZXMgaG93IHlvdSBjYW4gY29udHJpYnV0ZSB0byB0aGUgZWZmb3J0IG9mIGVuaGFuY2luZyB0aGUgbGFuZ3VhZ2UKK2NvdmVyYWdlIGFuZCBtYWludGFpbmluZyB0aGUgdHJhbnNsYXRpb24uCisKK1RoZSBsb2NhbGl6YXRpb24gKGwxMG4pIGNvb3JkaW5hdG9yLCBKaWFuZyBYaW4gPHdvcmxkaGVsbG8ubmV0QGdtYWlsLmNvbT4sCitjb29yZGluYXRlcyBvdXIgbG9jYWxpemF0aW9uIGVmZm9ydCBpbiB0aGUgbDEwIGNvb3JkaW5hdG9yIHJlcG9zaXRvcnk6CisKKyAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL2dpdC1sMTBuL2dpdC1wby8KKworVGhlIHR3byBjaGFyYWN0ZXIgbGFuZ3VhZ2UgdHJhbnNsYXRpb24gY29kZXMgYXJlIGRlZmluZWQgYnkgSVNPXzYzOS0xLCBhcworc3RhdGVkIGluIHRoZSBnZXR0ZXh0KDEpIGZ1bGwgbWFudWFsLCBhcHBlbmRpeCBBLjEsIFVzdWFsIExhbmd1YWdlIENvZGVzLgorCisKK0NvbnRyaWJ1dGluZyB0byBhbiBleGlzdGluZyB0cmFuc2xhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBcyBhIGNvbnRyaWJ1dG9yIGZvciBhIGxhbmd1YWdlIFhYLCB5b3Ugc2hvdWxkIGZpcnN0IGNoZWNrIFRFQU1TIGZpbGUgaW4KK3RoaXMgZGlyZWN0b3J5IHRvIHNlZSB3aGV0aGVyIGEgZGVkaWNhdGVkIHJlcG9zaXRvcnkgZm9yIHlvdXIgbGFuZ3VhZ2UgWFgKK2V4aXN0cy4gRm9yayB0aGUgZGVkaWNhdGVkIHJlcG9zaXRvcnkgYW5kIHN0YXJ0IHRvIHdvcmsgaWYgaXQgZXhpc3RzLgorCitTb21ldGltZSwgY29udHJpYnV0b3JzIG1heSBmaW5kIHRoYXQgdGhlIHRyYW5zbGF0aW9ucyBvZiB0aGVpciBHaXQKK2Rpc3RyaWJ1dGlvbnMgYXJlIHF1aXRlIGRpZmZlcmVudCB3aXRoIHRoZSB0cmFuc2xhdGlvbnMgb2YgdGhlCitjb3JyZXNwb25kaW5nIHZlcnNpb24gZnJvbSBHaXQgb2ZmaWNpYWwuIFRoaXMgaXMgYmVjYXVzZSBzb21lIEdpdAorZGlzdHJpYnV0aW9ucyAoc3VjaCBhcyBmcm9tIFVidW50dSwgZXRjLikgaGF2ZSB0aGVpciBvd24gbDEwbiB3b3JrZmxvdy4KK0ZvciB0aGlzIGNhc2UsIHdyb25nIHRyYW5zbGF0aW9ucyBzaG91bGQgYmUgcmVwb3J0ZWQgYW5kIGZpeGVkIHRocm91Z2gKK3RoZWlyIHdvcmtmbG93cy4KKworCitDcmVhdGluZyBhIG5ldyBsYW5ndWFnZSB0cmFuc2xhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0lmIHlvdSBhcmUgdGhlIGZpcnN0IGNvbnRyaWJ1dG9yIGZvciB0aGUgbGFuZ3VhZ2UgWFgsIHBsZWFzZSBmb3JrIHRoaXMKK3JlcG9zaXRvcnksIHByZXBhcmUgYW5kL29yIHVwZGF0ZSB0aGUgdHJhbnNsYXRlZCBtZXNzYWdlIGZpbGUgcG8vWFgucG8KKyhkZXNjcmliZWQgbGF0ZXIpLCBhbmQgYXNrIHRoZSBsMTBuIGNvb3JkaW5hdG9yIHRvIHB1bGwgeW91ciB3b3JrLgorCitJZiB0aGVyZSBhcmUgbXVsdGlwbGUgY29udHJpYnV0b3JzIGZvciB0aGUgc2FtZSBsYW5ndWFnZSwgcGxlYXNlIGZpcnN0Citjb29yZGluYXRlIGFtb25nIHlvdXJzZWx2ZXMgYW5kIG5vbWluYXRlIHRoZSB0ZWFtIGxlYWRlciBmb3IgeW91cgorbGFuZ3VhZ2UsIHNvIHRoYXQgdGhlIGwxMG4gY29vcmRpbmF0b3Igb25seSBuZWVkcyB0byBpbnRlcmFjdCB3aXRoIG9uZQorcGVyc29uIHBlciBsYW5ndWFnZS4KKworCitUcmFuc2xhdGlvbiBQcm9jZXNzIEZsb3cKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIG92ZXJhbGwgZGF0YS1mbG93IGxvb2tzIGxpa2UgdGhpczoKKworICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBHaXQgc291cmNlIGNvZGUgICB8IC0tLSgxKS0tLT4gfCBMMTBuIGNvb3JkaW5hdG9yIHwKKyAgICB8IHJlcG9zaXRvcnkgICAgICAgIHwgPC0tLSg0KS0tLSB8IHJlcG9zaXRvcnkgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKyAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgXgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMikgICAgKDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMYW5ndWFnZSBUZWFtIFhYIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tKworCisgKiBUcmFuc2xhdGFibGUgc3RyaW5ncyBhcmUgbWFya2VkIGluIHRoZSBzb3VyY2UgZmlsZS4KKyAqIEwxMG4gY29vcmRpbmF0b3IgcHVsbHMgZnJvbSB0aGUgc291cmNlICgxKQorICogTDEwbiBjb29yZGluYXRvciB1cGRhdGVzIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHBvL2dpdC5wb3QKKyAqIExhbmd1YWdlIHRlYW0gcHVsbHMgZnJvbSBMMTBuIGNvb3JkaW5hdG9yICgyKQorICogTGFuZ3VhZ2UgdGVhbSB1cGRhdGVzIHRoZSBtZXNzYWdlIGZpbGUgcG8vWFgucG8KKyAqIEwxMG4gY29vcmRpbmF0b3IgcHVsbHMgZnJvbSBMYW5ndWFnZSB0ZWFtICgzKQorICogTDEwbiBjb29yZGluYXRvciBhc2tzIHRoZSByZXN1bHQgdG8gYmUgcHVsbGVkICg0KS4KKworCitNYWludGFpbmluZyB0aGUgcG8vZ2l0LnBvdCBmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhUaGlzIGlzIGRvbmUgYnkgdGhlIGwxMG4gY29vcmRpbmF0b3IpLgorCitUaGUgcG8vZ2l0LnBvdCBmaWxlIGNvbnRhaW5zIGEgbWVzc2FnZSBjYXRhbG9nIGV4dHJhY3RlZCBmcm9tIEdpdCdzCitzb3VyY2VzLiBUaGUgbDEwbiBjb29yZGluYXRvciBtYWludGFpbnMgaXQgYnkgYWRkaW5nIG5ldyB0cmFuc2xhdGlvbnMgd2l0aAorbXNnaW5pdCgxKSwgb3IgdXBkYXRlIGV4aXN0aW5nIG9uZXMgd2l0aCBtc2dtZXJnZSgxKS4gIEluIG9yZGVyIHRvIHVwZGF0ZQordGhlIEdpdCBzb3VyY2VzIHRvIGV4dHJhY3QgdGhlIG1lc3NhZ2VzIGZyb20sIHRoZSBsMTBuIGNvb3JkaW5hdG9yIGlzCitleHBlY3RlZCB0byBwdWxsIGZyb20gdGhlIG1haW4gZ2l0IHJlcG9zaXRvcnkgYXQgc3RyYXRlZ2ljIHBvaW50IGluCitoaXN0b3J5IChlLmcuIHdoZW4gYSBtYWpvciByZWxlYXNlIGFuZCByZWxlYXNlIGNhbmRpZGF0ZXMgYXJlIHRhZ2dlZCksCithbmQgdGhlbiBydW4gIm1ha2UgcG90IiBhdCB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KKworTGFuZ3VhZ2UgY29udHJpYnV0b3JzIHVzZSB0aGlzIGZpbGUgdG8gcHJlcGFyZSB0cmFuc2xhdGlvbnMgZm9yIHRoZWlyCitsYW5ndWFnZSwgYnV0IHRoZXkgYXJlIG5vdCBleHBlY3RlZCB0byBtb2RpZnkgaXQuCisKKworSW5pdGlhbGl6aW5nIGEgWFgucG8gZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoVGhpcyBpcyBkb25lIGJ5IHRoZSBsYW5ndWFnZSB0ZWFtcykuCisKK0lmIHlvdXIgbGFuZ3VhZ2UgWFggZG9lcyBub3QgaGF2ZSB0cmFuc2xhdGVkIG1lc3NhZ2UgZmlsZSBwby9YWC5wbyB5ZXQsCit5b3UgYWRkIGEgdHJhbnNsYXRpb24gZm9yIHRoZSBmaXJzdCB0aW1lIGJ5IHJ1bm5pbmc6CisKKyAgICBtc2dpbml0IC0tbG9jYWxlPVhYCisKK2luIHRoZSBwby8gZGlyZWN0b3J5LCB3aGVyZSBYWCBpcyB0aGUgbG9jYWxlLCBlLmcuICJkZSIsICJpcyIsICJwdF9CUiIsCisiemhfQ04iLCBldGMuCisKK1RoZW4gZWRpdCB0aGUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgY29weXJpZ2h0IGluZm8gaW4geW91ciBuZXcgWFgucG8KK3RvIGJlIGNvcnJlY3QsIGUuZy4gZm9yIEljZWxhbmRpYzoKKworICAgIEBAIC0xLDYgKzEsNiBAQAorICAgIC0jIEljZWxhbmRpYyB0cmFuc2xhdGlvbnMgZm9yIFBBQ0tBR0UgcGFja2FnZS4KKyAgICAtIyBDb3B5cmlnaHQgKEMpIDIwMTAgVEhFIFBBQ0tBR0UnUyBDT1BZUklHSFQgSE9MREVSCisgICAgLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIFBBQ0tBR0UgcGFja2FnZS4KKyAgICArIyBJY2VsYW5kaWMgdHJhbnNsYXRpb25zIGZvciBHaXQuCisgICAgKyMgQ29weXJpZ2h0IChDKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uIDxhdmFyYWJAZ21haWwuY29tPgorICAgICsjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyAgICAgIyDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbiA8YXZhcmFiQGdtYWlsLmNvbT4sIDIwMTAuCisKK0FuZCBjaGFuZ2UgcmVmZXJlbmNlcyB0byBQQUNLQUdFIFZFUlNJT04gaW4gdGhlIFBPIEhlYWRlciBFbnRyeSB0bworanVzdCAiR2l0IjoKKworICAgIHBlcmwgLXBpIC1lICdzLyg/PD0iUHJvamVjdC1JZC1WZXJzaW9uOiApUEFDS0FHRSBWRVJTSU9OL0dpdC8nIFhYLnBvCisKK09uY2UgeW91IGFyZSBkb25lIHRlc3RpbmcgdGhlIHRyYW5zbGF0aW9uIChzZWUgYmVsb3cpLCBjb21taXQgdGhlIHJlc3VsdAorYW5kIGFzayB0aGUgbDEwbiBjb29yZGluYXRvciB0byBwdWxsIGZyb20geW91LgorCisKK1VwZGF0aW5nIGEgWFgucG8gZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhUaGlzIGlzIGRvbmUgYnkgdGhlIGxhbmd1YWdlIHRlYW1zKS4KKworSWYgeW91IGFyZSByZXBsYWNpbmcgdHJhbnNsYXRpb24gc3RyaW5ncyBpbiBhbiBleGlzdGluZyBYWC5wbyBmaWxlIHRvCitpbXByb3ZlIHRoZSB0cmFuc2xhdGlvbiwganVzdCBlZGl0IHRoZSBmaWxlLgorCitJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIFhYLnBvIGZpbGUgZm9yIHlvdXIgbGFuZ3VhZ2UsIGJ1dCB0aGUgcmVwb3NpdG9yeQorb2YgdGhlIGwxMG4gY29vcmRpbmF0b3IgaGFzIG5ld2VyIHBvL2dpdC5wb3QgZmlsZSwgeW91IHdvdWxkIG5lZWQgdG8gZmlyc3QKK3B1bGwgZnJvbSB0aGUgbDEwbiBjb29yZGluYXRvciAoc2VlIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBkb2N1bWVudCBmb3IgaXRzCitVUkwpLCBhbmQgdGhlbiB1cGRhdGUgdGhlIGV4aXN0aW5nIHRyYW5zbGF0aW9uIGJ5IHJ1bm5pbmc6CisKKyAgICBtc2dtZXJnZSAtLWFkZC1sb2NhdGlvbiAtLWJhY2t1cD1vZmYgLVUgWFgucG8gZ2l0LnBvdAorCitpbiB0aGUgcG8vIGRpcmVjdG9yeSwgd2hlcmUgWFgucG8gaXMgdGhlIGZpbGUgeW91IHdhbnQgdG8gdXBkYXRlLgorCitPbmNlIHlvdSBhcmUgZG9uZSB0ZXN0aW5nIHRoZSB0cmFuc2xhdGlvbiAoc2VlIGJlbG93KSwgY29tbWl0IHRoZSByZXN1bHQKK2FuZCBhc2sgdGhlIGwxMG4gY29vcmRpbmF0b3IgdG8gcHVsbCBmcm9tIHlvdS4KKworCitUZXN0aW5nIHlvdXIgY2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKFRoaXMgaXMgZG9uZSBieSB0aGUgbGFuZ3VhZ2UgdGVhbXMsIGFmdGVyIGNyZWF0aW5nIG9yIHVwZGF0aW5nIFhYLnBvIGZpbGUpLgorCitCZWZvcmUgeW91IHN1Ym1pdCB5b3VyIGNoYW5nZXMgZ28gYmFjayB0byB0aGUgdG9wLWxldmVsIGFuZCBkbzoKKworICAgIG1ha2UKKworT24gc3lzdGVtcyB3aXRoIEdOVSBnZXR0ZXh0IChpLmUuIG5vdCBTb2xhcmlzKSB0aGlzIHdpbGwgY29tcGlsZSB5b3VyCitjaGFuZ2VkIFBPIGZpbGUgd2l0aCBgbXNnZm10IC0tY2hlY2tgLCB0aGUgLS1jaGVjayBvcHRpb24gZmxhZ3MgbWFueQorY29tbW9uIGVycm9ycywgZS5nLiBtaXNzaW5nIHByaW50ZiBmb3JtYXQgc3RyaW5ncywgb3IgdHJhbnNsYXRlZAorbWVzc2FnZXMgdGhhdCBkZXZpYXRlIGZyb20gdGhlIG9yaWdpbmFscyBpbiB3aGV0aGVyIHRoZXkgYmVnaW4vZW5kCit3aXRoIGEgbmV3bGluZSBvciBub3QuCisKKworTWFya2luZyBzdHJpbmdzIGZvciB0cmFuc2xhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisoVGhpcyBpcyBkb25lIGJ5IHRoZSBjb3JlIGRldmVsb3BlcnMpLgorCitCZWZvcmUgc3RyaW5ncyBjYW4gYmUgdHJhbnNsYXRlZCB0aGV5IGZpcnN0IGhhdmUgdG8gYmUgbWFya2VkIGZvcgordHJhbnNsYXRpb24uCisKK0dpdCB1c2VzIGFuIGludGVybmF0aW9uYWxpemF0aW9uIGludGVyZmFjZSB0aGF0IHdyYXBzIHRoZSBzeXN0ZW0ncworZ2V0dGV4dCBsaWJyYXJ5LCBzbyBtb3N0IG9mIHRoZSBhZHZpY2UgaW4geW91ciBnZXR0ZXh0IGRvY3VtZW50YXRpb24KKyhvbiBHTlUgc3lzdGVtcyBgaW5mbyBnZXR0ZXh0YCBpbiBhIHRlcm1pbmFsKSBhcHBsaWVzLgorCitHZW5lcmFsIGFkdmljZToKKworIC0gRG9uJ3QgbWFyayBldmVyeXRoaW5nIGZvciB0cmFuc2xhdGlvbiwgb25seSBzdHJpbmdzIHdoaWNoIHdpbGwgYmUKKyAgIHJlYWQgYnkgaHVtYW5zICh0aGUgcG9yY2VsYWluIGludGVyZmFjZSkgc2hvdWxkIGJlIHRyYW5zbGF0ZWQuCisKKyAgIFRoZSBvdXRwdXQgZnJvbSBHaXQncyBwbHVtYmluZyB1dGlsaXRpZXMgd2lsbCBwcmltYXJpbHkgYmUgcmVhZCBieQorICAgcHJvZ3JhbXMgYW5kIHdvdWxkIGJyZWFrIHNjcmlwdHMgdW5kZXIgbm9uLUMgbG9jYWxlcyBpZiBpdCB3YXMKKyAgIHRyYW5zbGF0ZWQuIFBsdW1iaW5nIHN0cmluZ3Mgc2hvdWxkIG5vdCBiZSB0cmFuc2xhdGVkLCBzaW5jZQorICAgdGhleSdyZSBwYXJ0IG9mIEdpdCdzIEFQSS4KKworIC0gQWRqdXN0IHRoZSBzdHJpbmdzIHNvIHRoYXQgdGhleSdyZSBlYXN5IHRvIHRyYW5zbGF0ZS4gTW9zdCBvZiB0aGUKKyAgIGFkdmljZSBpbiBgaW5mbyAnKGdldHRleHQpUHJlcGFyaW5nIFN0cmluZ3MnYCBhcHBsaWVzIGhlcmUuCisKKyAtIElmIHNvbWV0aGluZyBpcyB1bmNsZWFyIG9yIGFtYmlndW91cyB5b3UgY2FuIHVzZSBhICJUUkFOU0xBVE9SUyIKKyAgIGNvbW1lbnQgdG8gdGVsbCB0aGUgdHJhbnNsYXRvcnMgd2hhdCB0byBtYWtlIG9mIGl0LiBUaGVzZSB3aWxsIGJlCisgICBleHRyYWN0ZWQgYnkgeGdldHRleHQoMSkgYW5kIHB1dCBpbiB0aGUgcG8vKi5wbyBmaWxlcywgZS5nLiBmcm9tCisgICBnaXQtYW0uc2g6CisKKyAgICAgICAjIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorICAgICAgICMgaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisgICAgICAgIyBpbnB1dCBhdCB0aGlzIHBvaW50LgorICAgICAgIGdldHRleHQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsICIKKworICAgT3IgaW4gQywgZnJvbSBidWlsdGluL3JldmVydC5jOgorCisgICAgICAgLyogVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIgb3IgImNoZXJyeS1waWNrIiAqLworICAgICAgIGRpZShfKCIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIiksIGFjdGlvbl9uYW1lKG9wdHMpKTsKKworV2UgcHJvdmlkZSB3cmFwcGVycyBmb3IgQywgU2hlbGwgYW5kIFBlcmwgcHJvZ3JhbXMuIEhlcmUncyBob3cgdGhleSdyZQordXNlZDoKKworQzoKKworIC0gSW5jbHVkZSBidWlsdGluLmggYXQgdGhlIHRvcCwgaXQnbGwgcHVsbCBpbiBnZXR0ZXh0LmgsIHdoaWNoCisgICBkZWZpbmVzIHRoZSBnZXR0ZXh0IGludGVyZmFjZS4gQ29uc3VsdCB3aXRoIHRoZSBsaXN0IGlmIHlvdSBuZWVkIHRvCisgICB1c2UgZ2V0dGV4dC5oIGRpcmVjdGx5LgorCisgLSBUaGUgQyBpbnRlcmZhY2UgaXMgYSBzdWJzZXQgb2YgdGhlIG5vcm1hbCBHTlUgZ2V0dGV4dAorICAgaW50ZXJmYWNlLiBXZSBjdXJyZW50bHkgZXhwb3J0IHRoZXNlIGZ1bmN0aW9uczoKKworICAgLSBfKCkKKworICAgIE1hcmsgYW5kIHRyYW5zbGF0ZSBhIHN0cmluZy4gRS5nLjoKKworICAgICAgICBwcmludGYoXygiSEVBRCBpcyBub3cgYXQgJXMiKSwgaGV4KTsKKworICAgLSBRXygpCisKKyAgICBNYXJrIGFuZCB0cmFuc2xhdGUgYSBwbHVyYWwgc3RyaW5nLiBFLmcuOgorCisgICAgICAgIHByaW50ZihRXygiJWQgY29tbWl0IiwgIiVkIGNvbW1pdHMiLCBudW1iZXJfb2ZfY29tbWl0cykpOworCisgICAgVGhpcyBpcyBqdXN0IGEgd3JhcHBlciBmb3IgdGhlIG5nZXR0ZXh0KCkgZnVuY3Rpb24uCisKKyAgIC0gTl8oKQorCisgICAgQSBuby1vcCBwYXNzLXRocm91Z2ggbWFjcm8gZm9yIG1hcmtpbmcgc3RyaW5ncyBpbnNpZGUgc3RhdGljCisgICAgaW5pdGlhbGl6YXRpb25zLCBlLmcuOgorCisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyICpyZXNldF90eXBlX25hbWVzW10gPSB7CisgICAgICAgICAgICBOXygibWl4ZWQiKSwgTl8oInNvZnQiKSwgTl8oImhhcmQiKSwgTl8oIm1lcmdlIiksIE5fKCJrZWVwIiksIE5VTEwKKyAgICAgICAgfTsKKworICAgIEFuZCB0aGVuLCBsYXRlcjoKKworICAgICAgICBkaWUoXygiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiKSwKKyAgICAgICAgICAgICAgIF8ocmVzZXRfdHlwZV9uYW1lc1tyZXNldF90eXBlXSkpOworCisgICAgSGVyZSBfKCkgY291bGRuJ3QgaGF2ZSBzdGF0aWNhbGx5IGRldGVybWluZWQgd2hhdCB0aGUgdHJhbnNsYXRpb24KKyAgICBzdHJpbmcgd2lsbCBiZSwgYnV0IHNpbmNlIGl0IHdhcyBhbHJlYWR5IG1hcmtlZCBmb3IgdHJhbnNsYXRpb24KKyAgICB3aXRoIE5fKCkgdGhlIGxvb2stdXAgaW4gdGhlIG1lc3NhZ2UgY2F0YWxvZyB3aWxsIHN1Y2NlZWQuCisKK1NoZWxsOgorCisgLSBUaGUgR2l0IGdldHRleHQgc2hlbGwgaW50ZXJmYWNlIGlzIGp1c3QgYSB3cmFwcGVyIGZvcgorICAgZ2V0dGV4dC5zaC4gSW1wb3J0IGl0IHJpZ2h0IGFmdGVyIGdpdC1zaC1zZXR1cCBsaWtlIHRoaXM6CisKKyAgICAgICAuIGdpdC1zaC1zZXR1cAorICAgICAgIC4gZ2l0LXNoLWkxOG4KKworICAgQW5kIHRoZW4gdXNlIHRoZSBnZXR0ZXh0IG9yIGV2YWxfZ2V0dGV4dCBmdW5jdGlvbnM6CisKKyAgICAgICAjIEZvciBjb25zdGFudCBpbnRlcmZhY2UgbWVzc2FnZXM6CisgICAgICAgZ2V0dGV4dCAiQSBtZXNzYWdlIGZvciB0aGUgdXNlciI7IGVjaG8KKworICAgICAgICMgVG8gaW50ZXJwb2xhdGUgdmFyaWFibGVzOgorICAgICAgIGRldGFpbHM9Im9oIG5vZXMiCisgICAgICAgZXZhbF9nZXR0ZXh0ICJBbiBlcnJvciBvY2N1cnJlZDogXCRkZXRhaWxzIjsgZWNobworCisgICBJbiBhZGRpdGlvbiB3ZSBoYXZlIHdyYXBwZXJzIGZvciBtZXNzYWdlcyB0aGF0IGVuZCB3aXRoIGEgdHJhaWxpbmcKKyAgIG5ld2xpbmUuIEkuZS4geW91IGNvdWxkIHdyaXRlIHRoZSBhYm92ZSBhczoKKworICAgICAgICMgRm9yIGNvbnN0YW50IGludGVyZmFjZSBtZXNzYWdlczoKKyAgICAgICBnZXR0ZXh0bG4gIkEgbWVzc2FnZSBmb3IgdGhlIHVzZXIiCisKKyAgICAgICAjIFRvIGludGVycG9sYXRlIHZhcmlhYmxlczoKKyAgICAgICBkZXRhaWxzPSJvaCBub2VzIgorICAgICAgIGV2YWxfZ2V0dGV4dGxuICJBbiBlcnJvciBvY2N1cnJlZDogXCRkZXRhaWxzIgorCisgICBNb3JlIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIGludGVyZmFjZSBpcyBhdmFpbGFibGUgaW4gdGhlIEdOVSBpbmZvCisgICBwYWdlOiBgaW5mbyAnKGdldHRleHQpc2gnYC4gTG9va2luZyBhdCBnaXQtYW0uc2ggKHRoZSBmaXJzdCBzaGVsbAorICAgY29tbWFuZCB0byBiZSB0cmFuc2xhdGVkKSBmb3IgZXhhbXBsZXMgaXMgYWxzbyB1c2VmdWw6CisKKyAgICAgICBnaXQgbG9nIC0tcmV2ZXJzZSAtcCAtLWdyZXA9aTE4biBnaXQtYW0uc2gKKworUGVybDoKKworIC0gVGhlIEdpdDo6STE4TiBtb2R1bGUgcHJvdmlkZXMgYSBsaW1pdGVkIHN1YnNldCBvZiB0aGUKKyAgIExvY2FsZTo6TWVzc2FnZXMgZnVuY3Rpb25hbGl0eSwgZS5nLjoKKworICAgICAgIHVzZSBHaXQ6OkkxOE47CisgICAgICAgcHJpbnQgX18oIldlbGNvbWUgdG8gR2l0IVxuIik7CisgICAgICAgcHJpbnRmIF9fKCJUaGUgZm9sbG93aW5nIGVycm9yIG9jY3VycmVkOiAlc1xuIiksICRlcnJvcjsKKworICAgUnVuIGBwZXJsZG9jIHBlcmwvR2l0L0kxOE4ucG1gIGZvciBtb3JlIGluZm8uCisKKworVGVzdGluZyBtYXJrZWQgc3RyaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFdmVuIGlmIHlvdSd2ZSBjb3JyZWN0bHkgbWFya2VkIHBvcmNlbGFpbiBzdHJpbmdzIGZvciB0cmFuc2xhdGlvbgorc29tZXRoaW5nIGluIHRoZSB0ZXN0IHN1aXRlIG1pZ2h0IHN0aWxsIGRlcGVuZCBvbiB0aGUgVVMgRW5nbGlzaAordmVyc2lvbiBvZiB0aGUgc3RyaW5ncywgZS5nLiB0byBncmVwIHNvbWUgZXJyb3IgbWVzc2FnZSBvciBvdGhlcgorb3V0cHV0LgorCitUbyBzbW9rZSBvdXQgaXNzdWVzIGxpa2UgdGhlc2UgR2l0IGNhbiBiZSBjb21waWxlZCB3aXRoIGdldHRleHQgcG9pc29uCitzdXBwb3J0LCBhdCB0aGUgdG9wLWxldmVsOgorCisgICAgbWFrZSBHRVRURVhUX1BPSVNPTj1ZZXNQbGVhc2UKKworVGhhdCdsbCBnaXZlIHlvdSBhIGdpdCB3aGljaCBlbWl0cyBnaWJiZXJpc2ggb24gZXZlcnkgY2FsbCB0bworZ2V0dGV4dC4gSXQncyBvYnZpb3VzbHkgbm90IG1lYW50IHRvIGJlIGluc3RhbGxlZCwgYnV0IHlvdSBzaG91bGQgcnVuCit0aGUgdGVzdCBzdWl0ZSB3aXRoIGl0OgorCisgICAgY2QgdCAmJiBwcm92ZSAtaiA5IC4vdFswLTldKi5zaAorCitJZiB0ZXN0cyBicmVhayB3aXRoIGl0IHlvdSBzaG91bGQgaW5zcGVjdCB0aGVtIG1hbnVhbGx5IGFuZCBzZWUgaWYKK3doYXQgeW91J3JlIHRyYW5zbGF0aW5nIGlzIHNhbmUsIGkuZS4gdGhhdCB5b3UncmUgbm90IHRyYW5zbGF0aW5nCitwbHVtYmluZyBvdXRwdXQuCisKK0lmIG5vdCB5b3Ugc2hvdWxkIHJlcGxhY2UgY2FsbHMgdG8gZ3JlcCB3aXRoIHRlc3RfaTE4bmdyZXAsIG9yCit0ZXN0X2NtcCBjYWxscyB3aXRoIHRlc3RfaTE4bmNtcC4gSWYgdGhhdCdzIG5vdCBlbm91Z2ggeW91IGNhbiBza2lwCit0aGUgd2hvbGUgdGVzdCBieSBtYWtpbmcgaXQgZGVwZW5kIG9uIHRoZSBDX0xPQ0FMRV9PVVRQVVQKK3ByZXJlcXVpc2l0ZS4gU2VlIGV4aXN0aW5nIHRlc3QgZmlsZXMgd2l0aCB0aGlzIHByZXJlcXVpc2l0ZSBmb3IKK2V4YW1wbGVzLgpkaWZmIC0tZ2l0IGEvcG8vVEVBTVMgYi9wby9URUFNUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTFmN2UwCi0tLSAvZGV2L251bGwKKysrIGIvcG8vVEVBTVMKQEAgLTAsMCArMSw1NiBAQAorQ29yZSBHaXQgdHJhbnNsYXRpb24gbGFuZ3VhZ2UgdGVhbXMKKyhwbGVhc2Uga2VlcCB0aGUgbGlzdCBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgb24gbGFuZ3VhZ2UgZmllbGQpCisKK0xhbmd1YWdlOgliZyAoQnVsZ2FyaWFuKQorUmVwb3NpdG9yeToJaHR0cHM6Ly9naXRodWIuY29tL2dpdC1sMTBuL2dpdC1wbworTGVhZGVyOgkJQWxleGFuZGVyIFNob3BvdiA8YXNoQGthbWJhbmFyaWEub3JnPgorCitMYW5ndWFnZToJY2EgKENhdGFsYW4pCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vYWxleGhlbnJpZS9naXQtcG8KK0xlYWRlcjoJCUFsZXggSGVucmllIDxhbGV4aGVucmllMjRAZ21haWwuY29tPgorCitMYW5ndWFnZToJZGUgKEdlcm1hbikKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9yYWxmdGgvZ2l0LXBvLWRlCitMZWFkZXI6CQlSYWxmIFRoaWVsb3cgPHJhbGYudGhpZWxvd0Bnb29nbGVtYWlsLmNvbT4KK01lbWJlcnM6CVRob21hcyBSYXN0IDx0ckB0aG9tYXNyYXN0LmNoPgorCQlKYW4gS3LDvGdlciA8amtAamsuZ3M+CisJCUNocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT4KKwkJUGhpbGxpcCBTemVsYXQgPHBoaWxsaXAuc3plbGF0QGdtYWlsLmNvbT4KKwkJTWF0dGhpYXMgUsO8c3RlciA8bWF0dGhpYXMucnVlc3RlckBnbWFpbC5jb20+CisJCU1hZ251cyBHw7ZybGl0eiA8bWFnbnVzLmdvZXJsaXR6QGdvb2dsZW1haWwuY29tPgorCitMYW5ndWFnZToJZnIgKEZyZW5jaCkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9qbmF2aWxhL2dpdAorTGVhZGVyOgkJSmVhbi1Ob8OrbCBBdmlsYSA8am4uYXZpbGFAZnJlZS5mcj4KK01lbWJlcnM6CVPDqWJhc3RpZW4gSGVsbGV1IDxmbGFzaGNvZGVAZmxhc2h0dXgub3JnPgorCitMYW5ndWFnZToJaXMgKEljZWxhbmRpYykKK0xlYWRlcjoJCcOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uIDxhdmFyYWJAZ21haWwuY29tPgorCitMYW5ndWFnZToJaXQgKEl0YWxpYW4pCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vcXVpenpsby9naXQtcG8taXQvCitMZWFkZXI6CQlNYXJjbyBQYW9sb25lIDxtYXJjb3Bhb2xvbmUgQVQgZ21haWwuY29tPgorTWVtYmVyczoJU3RlZmFubyBMYXR0YXJpbmkgPHN0ZWZhbm8ubGF0dGFyaW5pIEFUIGdtYWlsLmNvbT4KKworTGFuZ3VhZ2U6CXB0X1BUIChQb3J0dWd1ZXNlIC0gUG9ydHVnYWwpCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vbWFyY29tc291c2EvZ2l0LWwxMG4tcHRfUFQvCitMZWFkZXI6CQlNYXJjbyBTb3VzYSA8bWFyY29tc291c2EgQVQgZ21haWwuY29tPgorCitMYW5ndWFnZToJcnUgKFJ1c3NpYW4pCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vREptMDBuL2dpdC1wby1ydS8KK0xlYWRlcjoJCURpbWl0cml5IFJ5YXphbnRjZXYgPERKbTAwbiBBVCBtYWlsLnJ1PgorTWVtYmVyczoJaW5zb2xvciA8aW5zb2xvciBBVCBnbWFpbC5jb20+CisKK0xhbmd1YWdlOglzdiAoU3dlZGlzaCkKK1JlcG9zaXRvcnk6CWh0dHBzOi8vZ2l0aHViLmNvbS9uYWZtby9naXQtbDEwbi1zdi8KK0xlYWRlcjoJCVBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPgorCitMYW5ndWFnZToJdmkgKFZpZXRuYW1lc2UpCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vdm53aWxkbWFuL2dpdC8KK0xlYWRlcjoJCVRy4bqnbiBOZ+G7jWMgUXXDom4gPHZud2lsZG1hbiBBVCBnbWFpbC5jb20+CitNZW1iZXJzOglOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5IDxwY2xvdWRzIEFUIGdtYWlsLmNvbT4KKworTGFuZ3VhZ2U6CXpoX0NOIChTaW1wbGlmaWVkIENoaW5lc2UpCitSZXBvc2l0b3J5OglodHRwczovL2dpdGh1Yi5jb20vamlhbmd4aW4vZ2l0LworTGVhZGVyOgkJSmlhbmcgWGluIDx3b3JsZGhlbGxvLm5ldEBnbWFpbC5jb20+CitNZW1iZXJzOglSYXkgQ2hlbiA8b2xkc2hhcnBAZ21haWwuY29tPgpkaWZmIC0tZ2l0IGEvcG8vYmcucG8gYi9wby9iZy5wbwppbmRleCA5MDlhNTY0Li4xNjRhNzY2IDEwMDY0NAotLS0gYS9wby9iZy5wbworKysgYi9wby9iZy5wbwpAQCAtMSwxNSArMSwxMTUgQEAKLSMgQnVsZ2FyaWFuIHRyYW5zbGF0aW9uIG9mIGdpdGsgcG8tZmlsZS4KKyMgQnVsZ2FyaWFuIHRyYW5zbGF0aW9uIG9mIGdpdCBwby1maWxlLgogIyBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQWxleGFuZGVyIFNob3BvdiA8YXNoQGthbWJhbmFyaWEub3JnPi4KICMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdCBwYWNrYWdlLgogIyBBbGV4YW5kZXIgU2hvcG92IDxhc2hAa2FtYmFuYXJpYS5vcmc+LCAyMDE0LCAyMDE1LgogIworIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKyMgRElDVElPTkFSWSBUTyBNRVJHRSBJTiBHSVQgR1VJCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyByYW5nZSDQuNC90YLQtdGA0LLQsNC7CisjIHVucmVhY2hhYmxlIG9iamVjdCDQvdC10LTQvtGB0YLQuNC20LjQvCDQvtCx0LXQutGCCisjIGRhbmdsaW5nIG9iamVjdHMg0L7QsdC10LrRgiDQuNC30LLRitC9INC60LvQvtC9CisjIGZhc3QtZm9yd2FyZCDRgtGA0LjQstC40LDQu9C90L4g0YHQu9C40LLQsNC90LUKKyMgc3RhbGUgcmVtb3RlINGB0YLQsNGA0L4g0YXRgNCw0L3QuNC70LjRidC1CisjIHJlYmFzZSDQv9GA0LXQsdCw0LfQuNGA0LDQvAorIyBmb3JjZSAocHVzaCkg0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC40LfRgtC70LDRgdC60LLQsNC8CisjIHN0YXNoL2luZGV4INC40L3QtNC10LrRgQorIyBzcXVhc2ggY29tbWl0cyDRgdC80LDRh9C60LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y8KKyMgcm9vdCBjb21taXQg0L3QsNGH0LDQu9C90L4g0L/QvtC00LDQstCw0L3QtQorIyBmaXh1cCDQstC60LDRgNCy0LDQvCDQv9C+0LTQsNCy0LDQvdC1INCyINC/0YDQtdC00L3QvtGC0L4g0LHQtdC3INGB0LvQtdC00LAKKyMgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCDRgdC70LXQtNGP0Ykg0LrQu9C+0L0KKyMgZ2l0IGJ1bmRsZSDQv9GA0LDRgtC60LAg0L3QsCBnaXQKKyMgYmlzZWN0INC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1CisjIGFtINC/0YDQuNC70LDQs9Cw0Lwg0L/QvtGA0LXQtNC40YbQsCDQvtGCINC60YDRitC/0LrQuAorIyB3b3JraW5nIGRpcmVjdG9yeS90cmVlIOKAlCDQstC40L3QsNCz0Lgg0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviwgZ2l0INGB0LvQtdC00Lgg0YbRj9C70L7RgtC+INC00YrRgNCy0L4sINCwINC90LUg0LTQuNGA0LXQutGC0L7RgNC40LgsINGA0LDQsdC+0YLQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPINC30LAgY3dkCisjIHN3aXRjaCB0byBicmFuY2gg0L/RgNC10LzQuNC90LDQstCw0Lwg0LrRitC8INC60LvQvtC9CisjIHNwYXJzZSBlbnRyeSDRh9Cw0YHRgtC40YfQvdC+INC40LfRgtC10LPQu9C10L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjy/Qv9GK0YIKKyMgcmV2aXNpb24gcmFuZ2Ug0LTQuNCw0L/QsNC30L7QvSDQvdCwINCy0LXRgNGB0LjQuNGC0LUKKyMgY292ZXIgbGV0dGVyINC/0YDQuNC00YDRg9C20LDQstCw0YnQviDQv9C40YHQvNC+CisjIHJlZmVyZW5jZSByZXBvc2l0b3J5INC10YLQsNC70L7QvdC90L4g0YXRgNCw0L3QuNC70LjRidC1CisjIGdyYWZ0ZWQgcmVwb3NpdG9yeSDRhdGA0LDQvdC40LvQuNGJ0LUg0YEg0L/RgNC40YHQsNC20LTQsNC90LUKKyMgdGhpbiBwYWNrINGB0YrQutGA0LDRgtC10L0g0L/QsNC60LXRggorIyBzdGF0IChhIGZpbGUpINC/0L7Qu9GD0YfQsNCy0LDQvCDQuNC90YTQvtGA0LzQsNGG0LjRjyDRh9GA0LXQtyDigJ5zdGF04oCcICjQt9CwINGE0LDQudC7KQorIyBtaXhlZCByZXNldCDRgdC80LXRgdC10L3QviDQt9Cw0L3Rg9C70Y/QstCw0L3QtSAo0LjQvdC00LXQutGB0LAg0Lgg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINCx0LXQtyDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvikKKyMgc29mdCByZXNldCDQvNC10LrQviDQt9Cw0L3Rg9C70Y/QstCw0L3QtSAo0YHQsNC80L4g0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwsINCx0LXQtyDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvikKKyMgaGFyZCByZXNldCDQv9GK0LvQvdC+INC30LDQvdGD0LvRj9Cy0LDQvdC1ICjRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCwg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4pCisjIG1lcmdlIHJlc2V0INGB0LvRj9GC0L4g0LfQsNC90YPQu9GP0LLQsNC90LUgKNGG0LXQu9C40Y8g0LjQvdC00LXQutGBINC4INC+0YLRh9Cw0YHRgtC4INGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IOKAlCDQsdC10Lcg0YTQsNC50LvQvtCy0LXRgtC1INGBINC/0YDQvtC80LXQvdC4INC80LXQttC00YMg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0Lgg0LjQvdC00LXQutGB0LApCisjIGtlZXAgcmVzZXQg0LfQsNC/0LDQt9Cy0LDRidC+INC30LDQvdGD0LvRj9Cy0LDQvdC1ICjQvtGC0YfQsNGB0YLQuCDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDigJQg0YTQsNC50LvQvtCy0LXRgtC1INGBINC/0YDQvtC80LXQvdC4INC+0YIg0L/QvtC00LDQstCw0L3QtdGC0L4g0Lgg4oCeSEVBROKAnCkKKyMgY29tbWl0LWlzaCDRg9C60LDQt9Cw0YLQtdC7INC60YrQvCDQv9C+0LTQsNCy0LDQvdC1CisjIHNlcXVlbmNlINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90L7RgdGCL9C/0L7RgNC10LTQuNGG0LAKKyMgd2hpdGVzcGFjZSBzeW1ib2wg0LfQvdCw0YbQuCDQt9CwINC40L3RgtC10YDQstCw0LvQuAorIyBzaG9ydGxvZyDRgdGK0LrRgNCw0YLQtdC90LjRjyDQttGD0YDQvdCw0LsKKyMgYmFja2luZyBzdG9yZSDQvNGP0YHRgtC+0YLQviDQt9CwINGB0YrRhdGA0LDQvdC10L3QuNC1CisjIHJlamVjdCDQvtGC0YXQstGK0YDQu9C10L3QviDQv9Cw0YDRh9C1CisjIHRvcGljIGJyYW5jaCDRgtC10LzQsNGC0LjRh9C10L0g0LrQu9C+0L0KKyMgZW1wdHkgaGVhZCDQstGA0YrRhSDQsdC10Lcg0LjRgdGC0L7RgNC40Y8KKyMgdHJlZS1pc2gg0YPQutCw0LfQsNGC0LXQuyDQutGK0Lwg0LTRitGA0LLQvgorIyB0aHJlZS13YXkgbWVyZ2Ug0YLRgNC+0LnQvdC+INGB0LvQuNCy0LDQvdC1CisjIGRpcnR5INC90LXRh9C40YHRgiwg0LzRgNGK0YHQtdC9ICjRhNCw0LnQuywg0LjQvdC00LXQutGBKQorIyBmYWxsYmFjayAg0YDQtdC30LXRgNCy0LXQvSDQstCw0YDQuNCw0L3RggorIyBwYXRoc3BlYyBtYWdpYyDQvtC/0YbQuNGPINC30LAg0LzQsNCz0LjRh9C10YHQutC4INC/0YrRgtC40YnQsAorIyBiaXRtYXAgaW5kZXgg0LjQvdC00LXQutGBINC90LAg0LHQsNC30LAg0LHQuNGC0L7QstC4INC80LDRgdC60LgKKyMgbWFyayDQvNCw0YDQutC10YAKKyMgcGx1bWJpbmcg0LrQvtC80LDQvdC00Lgg0L7RgiDRgdC40YHRgtC10LzQvdC+INC90LjQstC+CisjIHBvcmNlbGFpbiDQutC+0LzQsNC90LTQuCDQvtGCINC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC+INC90LjQstC+CisjIHBhY2sgW25vdW5dINC/0LDQutC10YLQtdC9INGE0LDQudC7IC0gZml4bWUgaW4gZ2xvc3NhcnkKKyMgbWFpbmxpbmUg0LHQsNC30L7QstC+INC/0L7QtNCw0LLQsNC90LUgLSDQv9GA0LggY2hlcnJ5LXBpY2sg0L3QsCBtZXJnZSAtINC60YrQvCDQutC+0Y8g0LLQtdGA0YHQuNGPINC00LAg0YHQtSDQuNC30YfQuNGB0LvRj9Cy0LAg0YDQsNC30LvQuNC60LDRgtCwCisjIHRva2VuINC70LXQutGB0LXQvNCwCisjIHRyYWlsZXIg0LXQv9C40LvQvtCzL9C30LDQstGK0YDRiNC10Log0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LUKKyMgY3dkINGC0LXQutGD0YnQsCDRgNCw0LHQvtGC0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjworIyB1bnRyYWNrZWQgY2FjaGUg0LrQtdGIINC30LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtQorIyBicm9rZW4vY29ycnVwdCDQv9C+0LLRgNC10LTQtdC9CisjIHJlc3RvcmUg0LLRitC30YHRgtCw0L3QvtCy0Y/QstCw0LwKKyMgLS0tLQorIyBGQUlMRUQgdG8gcGFyc2Ug0L3QtdGD0YHQv9C10YjQtdC9INCw0L3QsNC70LjQtyDQvdCwLi4uIC0+INC90LXRgNCw0LfQv9C+0LfQvdCw0YLQsCDRgdGC0L7QudC90L7RgdGCINC90LAKKyMgYmxvYiDQvtCx0LXQutGCIEJMT0IKKyMgPT09PT09PT09PT09PT09PT09PT09PT09CisjIOKAnuKAnOKApuKAlCDil4/iiavRneKGkgorIworIyBzdHJlc3NlZCBhCisjINGE0L7RgNC80LDMgNGC0LAKKyMgZGVsdGEgLSDRgNCw0LfQu9C40LrQsCDQuNC70Lgg0LTQtdC70YLQsAorIyBjb25zaXN0ZW5jeSBiZXR3ZWVuIHN0ZG91dCAtIHN0YW5kYXJkIG91dHB1dC8gc3RkaW4gLSBzdGFuZGFyZCBpbnB1dC8gc3RkZXJyIC0gc3RhbmRhcmQgZXJyb3IKKyMgbWVyZ2V0YWcg0LXRgtC40LrQtdGCINC/0YDQuCDRgdC70LjQstCw0L3QtQorIworIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKyMgUkVDSEVDSworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRklYTUUKKyMgSEVBRCBhcyBhIHJlZmVyZW5jZSB2cyBoZWFkIG9mIGEgYnJhbmNoCisjIGdpdCB1cGRhdGUtaW5kZXggLWgg0LjQt9Cy0LXQttC00LAg0YHQsNC80L4g0LXQtNC40L0g0YDQtdC0LCDQsCDQvdC1INGG0Y/Qu9Cw0YLQsCDQv9C+0LzQvtGJINC30LAg0L7Qv9GG0LjQuNGC0LUKKyMgZ2l0IGZldGNoIC0tYWwg0YDQsNCx0L7RgtC4INC/0L7QtNC+0LHQvdC+INC90LAgLS1hbGwKKyMgPT09PT09PT09PT09PT09PT09PT09PT09CisjIEdFTkVSQVRFIFNUQVRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBncmVwIF4jOiBiZy5wbyB8IGN1dCAtYzQtIHx0ciAnICcgJ1xuJ3wgc2VkIC1lICdzLzpbMC05XVswLTldKi8vJyAgLWUgJ3MlLiovJSUnIC1lICdzL1suXVteLl0qJC8vJyA+IE9VVAorIyBzb3J0IC11IE9VVCA+IFVOSVFVRQorIyBmb3IgaSBpbiBgY2F0IFVOSVFVRWA7IGRvIGVjaG8gICBgZ3JlcCAiXiRpJCIgT1VUIHwgd2MgLWxgICRpIDsgZG9uZSB8IHNvcnQgLW5yID4gU1RBVFMKKyMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09CisjIEZJTkQgTk9OIEZVTExZIFRSQU5TTEFURUQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIG1zZ2F0dHJpYiAgLS11bnRyYW5zbGF0ZWQgYmcucG8gPiB1bnRyYW5zbGF0ZWQucG8KKyMgbXNnYXR0cmliICAtLW9ubHktZnV6enkgYmcucG8gPiBmdXp6eS5wbworIyBtc2djYXQuZXhlIHVudHJhbnNsYXRlZC5wbyBmdXp6eS5wbyA+IG5ldy5wbworIyBncmVwIF4jOiBuZXcucG8gfCBjdXQgLWM0LSB8dHIgJyAnICdcbid8IHNlZCAtZSAncy86WzAtOV1bMC05XSovLycgIC1lICdzJS4qLyUlJyAtZSAncy9bLl1bXi5dKiQvLycgfCBzb3J0IC11CisjCisjID09PT09PT09PT09PT09PT09PT09PT09PQorIyBNT1NUIElNUE9SVEFOVCBuYW1lIGFzYyBvcmRlcmluZworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgYWRkLCBibGFtZSwgYnJhbmNoLCBjaGVja291dCwgY2xvbmUsIGNvbW1pdCwgY29tbW9uLWNtZHMsIGNvbmZpZywgZGlmZiwgZmV0Y2gsIGZzY2ssIGdjLCBnaXQtcmViYXNlLCBnaXQtc3Rhc2gsIGdyZXAsIGxvZywgbXYsIHBhcnNlLW9wdGlvbnMsIHB1c2gsIHJlZmxvZywgcmVtb3RlLCByZXNldCwgcmV2ZXJ0LCBybSwgd3Qtc3RhdHVzCisjCisjID09PT09PT09PT09PT09PT09PT09PT09PQorIyBJTVBPUlRBTlQgc3RyaW5ncywgbmFtZSBhc2Mgb3JkZXJpbmcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGFwcGx5LCBhcmNoaXZlLCBjaGVjay1pZ25vcmUsIGNsZWFuLCBkYXRlLCBkZXNjcmliZSwgZ2l0LWFtLCBnaXQtYmlzZWN0LCBnaXQtc3VibW9kdWxlLCBoYXNoLW9iamVjdCwgaW5pdC1kYiwgbHMtdHJlZSwgbWVyZ2UsIG1lcmdlLWJhc2UsIG1lcmdlLWZpbGUsIG1lcmdlLXJlY3Vyc2l2ZSwgbmFtZS1yZXYsIHBhdGhzcGVjLCBzaG93LXJlZiwgdGFnCiAjCiBtc2dpZCAiIgogbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrIG1hc3RlclxuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNi0yNyAyMDo0NCswMzAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0wNi0yNyAyMDo0NiswMzAwXG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQgbWFzdGVyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDctMTQgMDc6MTkrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMDctMTQgMTk6MDUrMDMwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogQWxleGFuZGVyIFNob3BvdiA8YXNoQGthbWJhbmFyaWEub3JnPlxuIgogIkxhbmd1YWdlLVRlYW06IEJ1bGdhcmlhbiA8ZGljdEBmc2EtYmcub3JnPlxuIgogIkxhbmd1YWdlOiBiZ1xuIgpAQCAtMTgsMTM0OCArMTE4LDExODQ0IEBACiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgogIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgogCi0jOiBnaXRrOjE0MAotbXNnaWQgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiIKLW1zZ3N0ciAi0KHQv9C40YHRitC60YrRgiDRgSDQvdC10YHQu9C10YLQuCDRhNCw0LnQu9C+0LLQtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC70YPRh9C10L06IgorIzogYWR2aWNlLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogJS4qc1xuIgorbXNnc3RyICLQn9C+0LTRgdC60LDQt9C60LA6ICUuKnNcbiIKIAotIzogZ2l0azoyMTIgZ2l0azoyMzgxCi1tc2dpZCAiQ29sb3Igd29yZHMiCi1tc2dzdHIgItCe0YbQstC10YLRj9Cy0LDQvdC1INC90LAg0LTRg9C80LjRgtC1IgotCi0jOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MwotbXNnaWQgIk1hcmt1cCB3b3JkcyIKLW1zZ3N0ciAi0J7RgtCx0LXQu9GP0LfQstCw0L3QtSDQvdCwINC00YPQvNC40YLQtSIKLQotIzogZ2l0azozMjQKLW1zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0YDQsNC30LHQvtGAINC90LAg0LLQtdGA0YHQuNC40YLQtToiCi0KLSM6IGdpdGs6MzgwCi1tc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDRgSDigJ4tLWFyZ3NjbWTigJwuIgotCi0jOiBnaXRrOjM5MwotbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKLW1zZ3N0ciAiIgotItCd0LUg0YHQsCDQuNC30LHRgNCw0L3QuCDRhNCw0LnQu9C+0LLQtSDigJQg0YPQutCw0LfQsNC90LAg0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1tZXJnZeKAnCwg0L3QviDQvdGP0LzQsCDQvdC10YHQu9C10YLQuCDRhNCw0LnQu9C+0LLQtS4iCi0KLSM6IGdpdGs6Mzk2CisjIFRSQU5TRkVSCisjOiBhZHZpY2UuYzo4OAogbXNnaWQgIiIKLSJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCi0ibGltaXQuIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKIG1zZ3N0ciAiIgotItCd0LUg0YHQsCDQuNC30LHRgNCw0L3QuCDRhNCw0LnQu9C+0LLQtSDigJQg0YPQutCw0LfQsNC90LAg0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1tZXJnZeKAnCwg0L3QviDQvdGP0LzQsCDQvdC10YHQu9C10YLQuCDRhNCw0LnQu9C+0LLQtSAiCi0i0LIg0L7Qs9GA0LDQvdC40YfQtdC90LjRj9GC0LAuIgorItCg0LXQtNCw0LrRgtC40YDQsNC50YLQtSDQs9C4INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+LCDQuCDRgtC+0LPQsNCy0LAg0L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBhZGQvcm0g0KTQkNCZ0JvigJxcbiIKKyLQt9CwINC00LAg0L7RgtCx0LXQu9C10LbQuNGC0LUg0LrQvtGA0LjQs9C40YDQsNC90LXRgtC+INC40LwuINCh0LvQtdC0INGC0L7QstCwINC40LfQstGK0YDRiNC10YLQtSDQv9C+0LTQsNCy0LDQvdC10YLQvi4iCiAKLSM6IGdpdGs6NDE4IGdpdGs6NTY2Ci1tc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeZ2l0IGxvZ+KAnDoiCisjOiBhcmNoaXZlLmM6MTEKK21zZ2lkICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBb0J7Qn9Cm0JjQr+KApl0g0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0JTQqtCg0JLQniBb0J/QqtCi4oCmXSIKIAotIzogZ2l0azo0MzYgZ2l0azo1ODIKLW1zZ2lkICJSZWFkaW5nIgotbXNnc3RyICLQn9GA0L7Rh9C40YLQsNC90LUiCisjOiBhcmNoaXZlLmM6MTIKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKIAotIzogZ2l0azo0OTYgZ2l0azo0NTI1Ci1tc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgotbXNnc3RyICLQn9GA0L7Rh9C40YLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y/RgtCw4oCmIgorIzogYXJjaGl2ZS5jOjEzCittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUg0KXQoNCQ0J3QmNCb0JjQqdCVIFstLWV4ZWMg0JrQntCc0JDQndCU0JBdIFvQntCf0KbQmNCv4oCmXSDQo9Ca0JDQl9CQ0KLQldCbX9Ca0KrQnF/QlNCq0KDQktCeICIKKyJb0J/QqtCi4oCmXSIKIAotIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAotbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCi1tc2dzdHIgItCd0LUg0YHQsCDQuNC30LHRgNCw0L3QuCDQv9C+0LTQsNCy0LDQvdC40Y8iCisjOiBhcmNoaXZlLmM6MTQKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSDQpdCg0JDQndCY0JvQmNCp0JUgWy0tZXhlYyDQmtCe0JzQkNCd0JTQkF0gLS1saXN0IgogCi0jOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKLW1zZ2lkICJDb21tYW5kIGxpbmUiCi1tc2dzdHIgItCa0L7QvNCw0L3QtNC10L0g0YDQtdC0IgorIzogYXJjaGl2ZS5jOjM0MiBidWlsdGluL2FkZC5jOjEzNyBidWlsdGluL2FkZC5jOjQyOCBidWlsdGluL3JtLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgItC/0YrRgtGP0YIg4oCeJXPigJwg0L3QtSDRgdGK0LLQv9Cw0LTQsCDRgSDQvdC40LrQvtC5INGE0LDQudC7IgogCi0jOiBnaXRrOjE1MTEKLW1zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCi1tc2dzdHIgItCY0LfRhdC+0LTRitGCINC+0YIg4oCeZ2l0IGxvZ+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LA6IgorIzogYXJjaGl2ZS5jOjQyNworbXNnaWQgImZtdCIKK21zZ3N0ciAi0KTQntCg0JzQkNCiIgogCi0jOiBnaXRrOjE3NDAKLW1zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgotbXNnc3RyICLQm9C40L/RgdCy0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQv9C+0LTQsNCy0LDQvdC40Y8iCisjOiBhcmNoaXZlLmM6NDI3Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgItCk0J7QoNCc0JDQoiDQvdCwINCw0YDRhdC40LLQsCIKIAotIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQotbXNnaWQgIk9LIgotbXNnc3RyICLQlNC+0LHRgNC1IgorIzogYXJjaGl2ZS5jOjQyOCBidWlsdGluL2xvZy5jOjEyMDQKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgItC/0YDQtdGE0LjQutGBIgogCi0jOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKLSM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAi0J7RgtC60LDQtyIKKyM6IGFyY2hpdmUuYzo0MjkKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0YLQvtC30Lgg0L/RgNC10YTQuNC60YEg0LrRitC8INCy0YHQtdC60Lgg0L/RitGCINCyINCw0YDRhdC40LLQsCIKIAotIzogZ2l0azoyMDY5Ci1tc2dpZCAiJlVwZGF0ZSIKLW1zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUiCisjOiBhcmNoaXZlLmM6NDMwIGJ1aWx0aW4vYXJjaGl2ZS5jOjg4IGJ1aWx0aW4vYmxhbWUuYzoyNTE2CisjOiBidWlsdGluL2JsYW1lLmM6MjUxNyBidWlsdGluL2NvbmZpZy5jOjU3IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODYKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODggYnVpbHRpbi9ncmVwLmM6NzEyIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0NiBidWlsdGluL2xzLWZpbGVzLmM6NDQ5IGJ1aWx0aW4vbm90ZXMuYzozOTQKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTcgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMDkgcGFyc2Utb3B0aW9ucy5oOjE1MAorbXNnaWQgImZpbGUiCittc2dzdHIgItGE0LDQudC7IgogCi0jOiBnaXRrOjIwNzAKLW1zZ2lkICImUmVsb2FkIgotbXNnc3RyICLQn9GA0LXQt9Cw0YDQtdC20LTQsNC90LUiCisjOiBhcmNoaXZlLmM6NDMxIGJ1aWx0aW4vYXJjaGl2ZS5jOjg5Cittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQsNGA0YXQuNCy0LAg0LIg0YLQvtC30Lgg0YTQsNC50LsiCiAKLSM6IGdpdGs6MjA3MQotbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKLW1zZ3N0ciAi0J3QsNC90L7QstC+INC/0YDQvtGH0LjRgtCw0L3QtSDQvdCwINC90LDRgdGC0YDQvtC50LrQuNGC0LUiCisjOiBhcmNoaXZlLmM6NDMzCittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwIOKAni5naXRhdHRyaWJ1dGVz4oCcINCyINGA0LDQsdC+0YLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyIKIAotIzogZ2l0azoyMDcyCi1tc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKLW1zZ3N0ciAi0JjQt9Cx0YDQvtGP0LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1IgorIzogYXJjaGl2ZS5jOjQzNAorbXNnaWQgInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCw0YDRhdC40LLQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdCw0YLQsCDQs9GA0LXRiNC60LAiCiAKLSM6IGdpdGs6MjA3NAotbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgotbXNnc3RyICLQodGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwIOKAnmdpdCBndWnigJwiCisjOiBhcmNoaXZlLmM6NDM1Cittc2dpZCAic3RvcmUgb25seSIKK21zZ3N0ciAi0YHQsNC80L4g0YHRitGF0YDQsNC90LXQvdC40LUg0LHQtdC3INC60L7QvNC/0YDQtdGB0LjRgNCw0L3QtSIKIAotIzogZ2l0azoyMDc2Ci1tc2dpZCAiJlF1aXQiCi1tc2dzdHIgItCh0L/QuNGA0LDQvdC1INC90LAg0L/RgNC+0LPRgNCw0LzQsNGC0LAiCisjOiBhcmNoaXZlLmM6NDM2Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICLQsdGK0YDQt9C+INC60L7QvNC/0YDQtdGB0LjRgNCw0L3QtSIKIAotIzogZ2l0azoyMDY4Ci1tc2dpZCAiJkZpbGUiCi1tc2dzdHIgItCk0LDQudC7IgorIzogYXJjaGl2ZS5jOjQ0NAorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAi0LTQvtCx0YDQviDQutC+0LzQv9GA0LXRgdC40YDQsNC90LUiCiAKLSM6IGdpdGs6MjA4MAotbXNnaWQgIiZQcmVmZXJlbmNlcyIKLW1zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4IgorIzogYXJjaGl2ZS5jOjQ0NworbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LTRitGA0LbQsNC90LjRgtC1INGE0L7RgNC80LDRgtC4IgogCi0jOiBnaXRrOjIwNzkKLW1zZ2lkICImRWRpdCIKLW1zZ3N0ciAi0KDQtdC00LDQutGC0LjRgNCw0L3QtSIKKyM6IGFyY2hpdmUuYzo0NDkgYnVpbHRpbi9hcmNoaXZlLmM6OTAgYnVpbHRpbi9jbG9uZS5jOjc3Cittc2dpZCAicmVwbyIKK21zZ3N0ciAi0YXRgNCw0L3QuNC70LjRidC1IgogCi0jOiBnaXRrOjIwODQKLW1zZ2lkICImTmV3IHZpZXcuLi4iCi1tc2dzdHIgItCd0L7QsiDQuNC30LPQu9C10LTigKYiCisjOiBhcmNoaXZlLmM6NDUwIGJ1aWx0aW4vYXJjaGl2ZS5jOjkxCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgItC40LfRgtC10LPQu9GP0L3QtSDQvdCwINCw0YDRhdC40LLQsCDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDQpdCg0JDQndCY0JvQmNCp0JUiCiAKLSM6IGdpdGs6MjA4NQotbXNnaWQgIiZFZGl0IHZpZXcuLi4iCi1tc2dzdHIgItCg0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDQuNC30LPQu9C10LTQsOKApiIKKyM6IGFyY2hpdmUuYzo0NTEgYnVpbHRpbi9hcmNoaXZlLmM6OTIgYnVpbHRpbi9ub3Rlcy5jOjQ3OAorbXNnaWQgImNvbW1hbmQiCittc2dzdHIgItC60L7QvNCw0L3QtNCwIgogCi0jOiBnaXRrOjIwODYKLW1zZ2lkICImRGVsZXRlIHZpZXciCi1tc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC40LfQs9C70LXQtNCwIgorIzogYXJjaGl2ZS5jOjQ1MiBidWlsdGluL2FyY2hpdmUuYzo5MworbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAi0L/RitGCINC60YrQvCDQvtGC0LTQsNC70LXRh9C10L3QsNGC0LAg0LrQvtC80LDQvdC00LAg4oCeZ2l0LXVwbG9hZC1hcmNoaXZl4oCcIgogCi0jOiBnaXRrOjIwODggZ2l0azo0MDQzCi1tc2dpZCAiJkFsbCBmaWxlcyIKLW1zZ3N0ciAi0JLRgdC40YfQutC4INGE0LDQudC70L7QstC1IgorIzogYXR0ci5jOjI2NQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorItCe0YLRgNC40YbQsNGC0LXQu9C90LjRgtC1INGI0LDQsdC70L7QvdC4INGB0LUg0LjQs9C90L7RgNC40YDQsNGCINCyINCw0YLRgNC40LHRg9GC0LjRgtC1INC90LAgZ2l0LlxuIgorItCQ0LrQviDQstC4INGC0YDRj9Cx0LLQsCDQvdCw0YfQsNC70L3QsCDRg9C00LjQstC40YLQtdC70L3QsCwg0L/QvtC70LfQstCw0LnRgtC1IOKAnlxcIeKAnC4iCiAKLSM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKLW1zZ2lkICImVmlldyIKLW1zZ3N0ciAi0JjQt9Cz0LvQtdC0IgorIzogYnJhbmNoLmM6NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICIiCisi0JrQu9C+0L3RitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC70YPQttC4INC60LDRgtC+INC40LfRgtC+0YfQvdC40Log0LfQsCDRgdC+0LHRgdGC0LLQtdC90LDRgtCwINGB0Lgg0YHQuNC90YXRgNC+0L3QuNC30LDRhtC40Y8uIgogCi0jOiBnaXRrOjIwOTMgZ2l0azoyMTAzIGdpdGs6MzAxMgotbXNnaWQgIiZBYm91dCBnaXRrIgotbXNnc3RyICLQntGC0L3QvtGB0L3QviBnaXRrIgorIzogYnJhbmNoLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisi0JrQu9C+0L3RitGCIOKAniVz4oCcINGJ0LUg0YHQu9C10LTQuCDQutC70L7QvdCwIOKAniVz4oCcINC+0YIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCDRh9GA0LXQtyAiCisi0L/RgNC10LHQsNC30LjRgNCw0L3QtS4iCiAKLSM6IGdpdGs6MjA5NCBnaXRrOjIxMDgKLW1zZ2lkICImS2V5IGJpbmRpbmdzIgotbXNnc3RyICLQmtC70LDQstC40YjQvdC4INC60L7QvNCx0LjQvdCw0YbQuNC4IgorIzogYnJhbmNoLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMuIgorbXNnc3RyICLQmtC70L7QvdGK0YIg4oCeJXPigJwg0YnQtSDRgdC70LXQtNC4INC60LvQvtC90LAg4oCeJXPigJwg0L7RgiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IOKAniVz4oCcLiIKIAotIzogZ2l0azoyMDkyIGdpdGs6MjEwNwotbXNnaWQgIiZIZWxwIgotbXNnc3RyICLQn9C+0LzQvtGJIgorIzogYnJhbmNoLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisi0JrQu9C+0L3RitGCIOKAniVz4oCcINGJ0LUg0YHQu9C10LTQuCDQutC70L7QvdCwIOKAniVz4oCcINC+0YIg0LvQvtC60LDQu9C90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDRh9GA0LXQtyDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1LiIKIAotIzogZ2l0azoyMTg1IGdpdGs6ODY1MgotbXNnaWQgIlNIQTEgSUQ6IgotbXNnc3RyICJTSEExOiIKKyM6IGJyYW5jaC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICVzLiIKK21zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINGJ0LUg0YHQu9C10LTQuCDQutC70L7QvdCwIOKAniVz4oCcINC+0YIg0LvQvtC60LDQu9C90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtS4iCiAKLSM6IGdpdGs6MjIyOQotbXNnaWQgIlJvdyIKLW1zZ3N0ciAi0KDQtdC0IgorIzogYnJhbmNoLmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINGJ0LUg0YHQu9C10LTQuCDQvtGC0LTQsNC70LXRh9C10L3QuNGPINGD0LrQsNC30LDRgtC10Lsg4oCeJXPigJwg0YfRgNC10Lcg0L/RgNC10LHQsNC30LjRgNCw0L3QtS4iCiAKLSM6IGdpdGs6MjI2NwotbXNnaWQgIkZpbmQiCi1tc2dzdHIgItCi0YrRgNGB0LXQvdC1IgorIzogYnJhbmNoLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICVzLiIKK21zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINGJ0LUg0YHQu9C10LTQuCDQvtGC0LTQsNC70LXRh9C10L3QuNGPINGD0LrQsNC30LDRgtC10Lsg4oCeJXPigJwuIgogCi0jOiBnaXRrOjIyOTUKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi0JrQu9C+0L3RitGCIOKAniVz4oCcINGJ0LUg0YHQu9C10LTQuCDQu9C+0LrQsNC70L3QuNGPINGD0LrQsNC30LDRgtC10Lsg4oCeJXPigJwg0YfRgNC10Lcg0L/RgNC10LHQsNC30LjRgNCw0L3QtS4iCisKKyM6IGJyYW5jaC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcy4iCittc2dzdHIgItCa0LvQvtC90YrRgiDigJ4lc+KAnCDRidC1INGB0LvQtdC00Lgg0LvQvtC60LDQu9C90LjRjyDRg9C60LDQt9Cw0YLQtdC7IOKAniVz4oCcLiIKKworIzogYnJhbmNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiCittc2dzdHIgItCd0Y/QvNCwINGB0LvQtdC00LXQvdC1OiDQtNCy0YPRgdC80LjRgdC70LXQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAniVz4oCcIgorCisjOiBicmFuY2guYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0L/QvtC30LLQvtC70LXQvdC+INC40LzQtSDQt9CwINC60LvQvtC9LiIKKworIzogYnJhbmNoLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLQktC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQutC70L7QvSDRgSDQuNC80LUg4oCeJXPigJwuIgorCisjOiBicmFuY2guYzoxNzUKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgItCi0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQvtCx0L3QvtCy0LXQvS4iCisKKyM6IGJyYW5jaC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAi0JfQsNC00LDQtNC10L3QuNGC0LUg0L3QsNGB0YLRgNC+0LnQutC4INC30LAg0YHQu9C10LTQtdC90LXRgtC+INGB0LAg0LPRgNC10YjQvdC4IOKAlCDQvdCw0YfQsNC70L7RgtC+IOKAniVz4oCcINC90LUg0LUg0LrQu9C+0L0uIgorCisjOiBicmFuY2guYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi0LfQsNGP0LLQtdC90LjRj9GCINC+0YLQtNCw0LvQtdGH0LXQvSDQutC70L7QvSDigJ4lc+KAnCDQvdC1INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBicmFuY2guYzoxOTkKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCittc2dzdHIgIiIKKyJcbiIKKyLQkNC60L4g0LjRgdC60LDRgtC1INC00LAg0LHQsNC30LjRgNCw0YLQtSDRgNCw0LHQvtGC0LDRgtCwINGB0Lgg0L3QsCDQutC70L7QvSDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSwg0LzQvtC20LUgXG4iCisi0LTQsCDRgdC1INC90LDQu9C+0LbQuCDQtNCwINC40LfQv9GK0LvQvdC40YLQtSDigJ5naXQgZmV0Y2jigJwsINC30LAg0LTQsCDQv9C+0LvRg9GH0LjRgtC1INC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQt9CwINC90LXQs9C+LlxuIgorIlxuIgorItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDQuNC30YLQu9Cw0YHQutCw0YLQtSDQvdC+0LIsINC70L7QutCw0LvQtdC9INC60LvQvtC9LCDQutC+0LnRgtC+INC00LAg0YHQu9C10LTQuCDQvtGC0LTQsNC70LXRh9C10L0g0LrQu9C+0L0sXG4iCisi0LzQvtC20LUg0LTQsCDQuNC30L/QvtC70LfQstCw0YLQtSDigJ5naXQgcHVzaCAtdeKAnCwg0LfQsCDQtNCwINC90LDRgdGC0YDQvtC40YLQtSDQutGK0Lwg0LrQvtC5INC60LvQvtC9INC00LAg0YHQtSAiCisi0LjQt9GC0LvQsNGB0LrQstCwLiIKKworIzogYnJhbmNoLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC90LAg0L7QsdC10LrRgjog4oCeJXPigJwiCisKKyM6IGJyYW5jaC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICLQlNCy0YPRgdC80LjRgdC70LXQvdC+INC40LzQtSDQvdCwINC+0LHQtdC60YI6IOKAniVz4oCcIgorCisjOiBicmFuY2guYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0LzRj9GB0YLQviDQt9CwINC90LDRh9Cw0LvQviDQvdCwINC60LvQvtC9OiDigJ4lc+KAnCIKKworIzogYnVuZGxlLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAi0KTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LjQt9Cz0LvQtdC20LTQsCDQtNCwINC1INC/0YDQsNGC0LrQsCDQvdCwIGdpdCDQstC10YDRgdC40Y8gMiIKKworIzogYnVuZGxlLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0LfQsNCz0LvQsNCy0L3QsCDRh9Cw0YHRgjogJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo4NyBidWlsdGluL2NvbW1pdC5jOjc2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQvtGC0LLQvtGA0LgiCisKKyM6IGJ1bmRsZS5jOjEzOQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICLQkiDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC70LjQv9GB0LLQsNGCINGB0LvQtdC00L3QuNGC0LUg0L3QtdC+0LHRhdC+0LTQuNC80Lgg0L/QvtC00LDQstCw0L3QuNGPOiIKKworIzogYnVuZGxlLmM6MTYzIHNlcXVlbmNlci5jOjY1MCBzZXF1ZW5jZXIuYzoxMTA1IGJ1aWx0aW4vYmxhbWUuYzoyNzA1CisjOiBidWlsdGluL2JyYW5jaC5jOjY1MSBidWlsdGluL2NvbW1pdC5jOjEwNDUgYnVpbHRpbi9sb2cuYzozMzAKKyM6IGJ1aWx0aW4vbG9nLmM6ODI1IGJ1aWx0aW4vbG9nLmM6MTQzMiBidWlsdGluL2xvZy5jOjE2NjYgYnVpbHRpbi9tZXJnZS5jOjM1OAorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1OAorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L3QsNGB0YLRgNC+0LnQstCw0L3QtSDQvdCwINC+0LHRhdC+0LbQtNCw0L3QtdGC0L4g0L3QsCDQstC10YDRgdC40LjRgtC1IgorCisjOiBidW5kbGUuYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gItCf0YDQsNGC0LrQsNGC0LAg0YHRitC00YrRgNC20LAg0YHQu9C10LTQvdC40Y8g0YPQutCw0LfQsNGC0LXQuzoiCittc2dzdHJbMV0gItCf0YDQsNGC0LrQsNGC0LAg0YHRitC00YrRgNC20LAg0YHQu9C10LTQvdC40YLQtSAlZCDRg9C60LDQt9Cw0YLQtdC70Lg6IgorCisjOiBidW5kbGUuYzoxOTIKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAi0J/RgNCw0YLQutCw0YLQsCDRgdGK0LTRitGA0LbQsCDQv9GK0LvQvdCwINC40YHRgtC+0YDQuNGPLiIKKworIzogYnVuZGxlLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICLQn9GA0LDRgtC60LDRgtCwINC40LfQuNGB0LrQstCwINGB0LvQtdC00L3QuNGPINGD0LrQsNC30LDRgtC10Ls6IgorbXNnc3RyWzFdICLQn9GA0LDRgtC60LDRgtCwINC40LfQuNGB0LrQstCwINGB0LvQtdC00L3QuNGC0LUgJWQg0YPQutCw0LfQsNGC0LXQu9C4OiIKKworIzogYnVuZGxlLmM6MjUxCittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBwYWNrLW9iamVjdHPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YLQsNGA0YLQuNGA0LDQvdCwIgorCisjIEZJWE1FIGJldHRlciBtZXNzYWdlCisjOiBidW5kbGUuYzoyNjkKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBwYWNrLW9iamVjdHPigJwg0L3QtSDQt9Cw0LLRitGA0YjQuCDRg9GB0L/QtdGI0L3QviIKKworIyBGSVhNRSBiZXR0ZXIgbWVzc2FnZQorIzogYnVuZGxlLmM6MzA5Cittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCByZXYtbGlzdOKAnCDQvdC1INC30LDQstGK0YDRiNC4INGD0YHQv9C10YjQvdC+IgorCisjOiBidW5kbGUuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgIiIKKyLRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4lc+KAnCDQvdC1INC1INCx0LjQuyDQstC60LvRjtGH0LXQvSDQv9C+0YDQsNC00Lgg0L7Qv9GG0LjQuNGC0LUg0LfQsNC00LDQtNC10L3QuCDQvdCwIOKAnmdpdCByZXYtbGlzdOKAnCIKKworIzogYnVuZGxlLmM6NDM3IGJ1aWx0aW4vbG9nLmM6MTUzIGJ1aWx0aW4vbG9nLmM6MTM0MiBidWlsdGluL3Nob3J0bG9nLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YIg0LDRgNCz0YPQvNC10L3RgjogJXMiCisKKyM6IGJ1bmRsZS5jOjQ0MworbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICLQodGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0L/RgNCw0LfQvdCwINC/0YDQsNGC0LrQsCDQtSDQvdC10LLRitC30LzQvtC20L3Qvi4iCisKKyM6IGJ1bmRsZS5jOjQ1MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgItCk0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIyBGSVhNRSBiZXR0ZXIgbWVzc2FnZQorIzogYnVuZGxlLmM6NDc0Cittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICLQmtC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGluZGV4LXBhY2vigJwg0L3QtSDQt9Cw0LLRitGA0YjQuCDRg9GB0L/QtdGI0L3QviIKKworIzogY29sb3IuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciB2YWx1ZTogJS4qcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwINGG0LLRj9GCOiAlLipzIgorCisjOiBjb21taXQuYzo0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCw0L3QsNC70LjQt9C40YDQsCIKKworIzogY29tbWl0LmM6NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMg0L3QtSDQtSDQv9C+0LTQsNCy0LDQvdC1ISIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICLQv9Cw0LzQtdGC0YLQsCDRgdCy0YrRgNGI0LgiCisKKyM6IGNvbmZpZy5jOjQ3NCBjb25maWcuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBmaWxlIGxpbmUgJWQgaW4gJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INGA0LXQtCAlZCDQsiDigJ4lc+KAnCIKKworIzogY29uZmlnLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIKK21zZ3N0ciAiIgorItC90LXQv9GA0LDQstC40LvQvdCwINGH0LjRgdC70L7QstCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAniVz4oCcINCyINGA0LDQt9C00LXQu9CwIOKAniVz4oCcOiAlcyIKKworIzogY29uZmlnLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YfQuNGB0LvQvtCy0LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQt9CwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeJXPigJw6ICVzIgorCisjOiBjb25maWcuYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAi0LTQvtC80LDRiNC90LDRgtCwINC/0LDQv9C60LAg0L3QsCDQv9C+0YLRgNC10LHQuNGC0LXQu9GPINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQsDog4oCeJXPigJwiCisKKyM6IGNvbmZpZy5jOjc1NyBjb25maWcuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC90LjQstC+INC90LAg0LrQvtC80L/RgNC10YHQuNGA0LDQvdC1OiAlZCIKKworIzogY29uZmlnLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YDQtdC20LjQvCDQt9CwINGB0YrQt9C00LDQstCw0L3QtdGC0L4g0L3QsCDQvtCx0LXQutGC0Lg6ICVzIgorCisjOiBjb25maWcuYzoxMjE2Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC4INC90LDRgdGC0YDQvtC50LrQuCDQvtGCINC60L7QvNCw0L3QtNC90LjRjyDRgNC10LQiCisKKyM6IGNvbmZpZy5jOjEyNzcKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAi0L3QtdC+0YfQsNC60LLQsNC90LAg0LPRgNC10YjQutCwINC/0YDQuCDQuNC30YfQuNGC0LDQvdC10YLQviDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGNvbmZpZy5jOjE2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICLQvdC10YDQsNC30L/QvtC30L3QsNGC0LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQvtGCINC60L7QvNCw0L3QtNC90LjRjyDRgNC10LQiCisKKyM6IGNvbmZpZy5jOjE2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDQvdCw0YHRgtGA0L7QudC60LAg4oCeJXPigJwg0LLRitCyINGE0LDQudC70LAg4oCeJXPigJwg0L3QsCDRgNC10LQg4oSWJWQiCisKKyM6IGNvbmZpZy5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAi0LfQsNC00LDQtNC10L3QuCDRgdCwINC90Y/QutC+0LvQutC+INGB0YLQvtC50L3QvtGB0YLQuCDQt9CwIOKAniVz4oCcIgorCisjOiBjb25uZWN0ZWQuYzo2OQorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgcmV2LWxpc3TigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfQv9GK0LvQvdC10L3QsC4iCisKKyM6IGNvbm5lY3RlZC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdDogJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0LXQvSDQt9Cw0L/QuNGBINC90LAg0YHQv9C40YHRitC60LAg0YEg0LLQtdGA0YHQuNC40YLQtTogJXMiCisKKyM6IGNvbm5lY3RlZC5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluOiAlcyIKK21zZ3N0ciAi0YHRgtCw0L3QtNCw0YDRgtC90LjRj9GCINCy0YXQvtC0INC90LAg0YHQv9C40YHRitC60LAg0YEg0LLQtdGA0YHQuNC40YLQtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNGC0LLQvtGA0LXQvTogJXMiCisKKyM6IGRhdGUuYzo5NQorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgItCyINCx0YrQtNC10YnQtdGC0L4iCisKKyM6IGRhdGUuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAi0L/RgNC10LTQuCAlbHUg0YHQtdC60YPQvdC00LAiCittc2dzdHJbMV0gItC/0YDQtdC00LggJWx1INGB0LXQutGD0L3QtNC4IgorCisjOiBkYXRlLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgbWludXRlcyBhZ28iCittc2dzdHJbMF0gItC/0YDQtdC00LggJWx1INC80LjQvdGD0YLQsCIKK21zZ3N0clsxXSAi0L/RgNC10LTQuCAlbHUg0LzQuNC90YPRgtC4IgorCisjOiBkYXRlLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGhvdXJzIGFnbyIKK21zZ3N0clswXSAi0L/RgNC10LTQuCAlbHUg0YfQsNGBIgorbXNnc3RyWzFdICLQv9GA0LXQtNC4ICVsdSDRh9Cw0YHQsCIKKworIzogZGF0ZS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGRheXMgYWdvIgorbXNnc3RyWzBdICLQv9GA0LXQtNC4ICVsdSDQtNC10L0iCittc2dzdHJbMV0gItC/0YDQtdC00LggJWx1INC00LXQvdCwIgorCisjOiBkYXRlLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHdlZWtzIGFnbyIKK21zZ3N0clswXSAi0L/RgNC10LTQuCAlbHUg0YHQtdC00LzQuNGG0LAiCittc2dzdHJbMV0gItC/0YDQtdC00LggJWx1INGB0LXQtNC80LjRhtC4IgorCisjOiBkYXRlLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICLQv9GA0LXQtNC4ICVsdSDQvNC10YHQtdGGIgorbXNnc3RyWzFdICLQv9GA0LXQtNC4ICVsdSDQvNC10YHQtdGG0LAiCisKKyM6IGRhdGUuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIiCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyIKK21zZ3N0clswXSAiJWx1INCz0L7QtNC40L3QsCIKK21zZ3N0clsxXSAiJWx1INCz0L7QtNC40L3QuCIKKworIy4gVFJBTlNMQVRPUlM6ICIlcyIgaXMgIjxuPiB5ZWFycyIKKyM6IGRhdGUuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsICVsdSBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlbHUgbW9udGhzIGFnbyIKK21zZ3N0clswXSAi0L/RgNC10LTQuCAlcyDQuCAlbHUg0LzQtdGB0LXRhiIKK21zZ3N0clsxXSAi0L/RgNC10LTQuCAlcyDQuCAlbHUg0LzQtdGB0LXRhtCwIgorCisjOiBkYXRlLmM6MTU0IGRhdGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMgYWdvIgorbXNnc3RyWzBdICLQv9GA0LXQtNC4ICVsdSDQs9C+0LTQuNC90LAiCittc2dzdHJbMV0gItC/0YDQtdC00LggJWx1INCz0L7QtNC40L3QuCIKKworIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCINGBINC/0L7QtNGA0LXQtNCx0LDRgtCwINC90LAg0YHRitC+0YLQstC10YLRgdGC0LLQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTM2Cittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgItCi0YrRgNGB0LXQvdC1INC90LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC40Y8g0L3QsCDQvtCx0LXQutGC0Lgg0YHRitGH0LXRgtCw0L3QuCDRgSDQv9GA0L7QvNC10L3QuCIKKworIzogZGlmZi5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJXMnXG4iCittc2dzdHIgIiIKKyIgINCd0LXRg9GB0L/QtdGI0L3QviDRgNCw0LfQv9C+0LfQvdCw0LLQsNC90LUg0L3QsCDigJ4lc+KAnCDQutCw0YLQviDQv9GA0L7RhtC10L3Rgi3Qv9GA0LDQsyDQt9CwINGB0YLQsNGC0LjRgdGC0LjQutCw0YLQsCDQv9C+ICIKKyLQtNC40YDQtdC60YLQvtGA0LjQuFxuIgorCisjOiBkaWZmLmM6MTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJXMnXG4iCittc2dzdHIgIiAg0J3QtdC/0L7Qt9C90LDRgiDQv9Cw0YDQsNC80LXRgtGK0YAg4oCeJXPigJwg0LfQsCDRgdGC0LDRgtC40YHRgtC40LrQsNGC0LAg0L/QviDQtNC40YDQtdC60YLQvtGA0LjQuCdcbiIKKworIzogZGlmZi5jOjIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHZhbHVlIGZvciAnZGlmZi5zdWJtb2R1bGUnIGNvbmZpZyB2YXJpYWJsZTogJyVzJyIKK21zZ3N0ciAi0J3QtdC/0L7Qt9C90LDRgtCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwg0LfQsCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmRpZmYuc3VibW9kdWxl4oCcIgorCisjOiBkaWZmLmM6MjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgorIiVzIgorbXNnc3RyICIiCisi0JPRgNC10YjQutC4INCyINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeZGlmZi5kaXJzdGF04oCcOlxuIgorIiVzIgorCisjOiBkaWZmLmM6Mjk5NworIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICIiCisi0LLRitC90YjQvdCw0YLQsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0YDQsNC30LvQuNC60Lgg0LfQsNCy0YrRgNGI0Lgg0L3QtdGD0YHQv9C10YjQvdC+LiDQodC/0LjRgNCw0L3QtSDQvdCwINGA0LDQsdC+0YLQsNGC0LAg0L/RgNC4IOKAniVz4oCcIgorCisjOiBkaWZmLmM6MzM5MworbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tLWZvbGxvd+KAnCDQuNC30LjRgdC60LLQsCDRgtC+0YfQvdC+INC10LTQuNC9INC/0YrRgiIKKworIzogZGlmZi5jOjM1NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorItCd0LXRgNCw0LfQv9C+0LfQvdCw0YIg0L/QsNGA0LDQvNC10YLRitGAINC60YrQvCDQvtC/0YbQuNGP0YLQsCDigJ4tLWRpcnN0YXQvLVjigJw6XG4iCisiJXMiCisKKyM6IGRpZmYuYzozNTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSAtLXN1Ym1vZHVsZSBvcHRpb24gcGFyYW1ldGVyOiAnJXMnIgorbXNnc3RyICLQndC10YDQsNC30L/QvtC30L3QsNGCINC/0LDRgNCw0LzQtdGC0YrRgCDQutGK0Lwg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zdWJtb2R1bGXigJw6IOKAniVz4oCcIgorCisjOiBkaXIuYzoxODUyCittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgItC40LzQtdGC0L4g0Lgg0LLQtdGA0YHQuNGP0YLQsCDQvdCwINGP0LTRgNC+0YLQviDQvdC1INCx0Y/RhdCwINC/0L7Qu9GD0YfQtdC90LgiCisKKyM6IGRpci5jOjE5NDUKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0uIgorbXNnc3RyICLQmtC10YjQsCDQt9CwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LUg0LjQt9C60LvRjtGH0LXQvSDQvdCwINGC0LDQt9C4INGB0LjRgdGC0LXQvNCwIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTI5IGdwZy1pbnRlcmZhY2UuYzoyMDAKK21zZ2lkICJjb3VsZCBub3QgcnVuIGdwZy4iCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LDRgtCwIOKAnmdwZ+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRgtCw0YDRgtC40YDQsNC90LAuIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTQxCittc2dpZCAiZ3BnIGRpZCBub3QgYWNjZXB0IHRoZSBkYXRhIgorbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNCw0YLQsCDigJ5ncGfigJwg0L3QtSDQv9GA0LjQtSDQv9C+0LTQsNC00LXQvdC40YLQtSDQtNCw0L3QvdC4LiIKKworIzogZ3BnLWludGVyZmFjZS5jOjE1MgorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAi0J/RgNC+0LPRgNCw0LzQsNGC0LAg4oCeZ3Bn4oCcINC90LUg0L/QvtC00L/QuNGB0LAg0LTQsNC90L3QuNGC0LUuIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJyVzJzogJXMiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LDRgtCwIOKAnmdwZ+KAnCDQvdC1INGD0YHQv9GPINC00LAg0YHRitC30LTQsNC00LUg0LLRgNC10LzQtdC90L3QuNGPINGE0LDQudC7IOKAniVz4oCcOiAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJzogJXMiCittc2dzdHIgItCf0YDQvtCz0YDQsNC80LDRgtCwIOKAnmdwZ+KAnCDQvdC1INGD0YHQv9GPINC00LAg0LfQsNC/0LjRiNC1INGB0LDQvNC+0YHRgtC+0Y/RgtC10LvQvdC40Y8g0L/QvtC00L/QuNGBINC60YrQvCDigJ4lc+KAnDogJXMiCisKKyM6IGdyZXAuYzoxNzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICLigJ4lc+KAnDog0YTQsNC50LvRitGCINGB0L7Rh9C10L0g0L7RgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogZ3JlcC5jOjE3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgIuKAniVz4oCcOiDigJ4lc+KAnCIKKworIzogZ3JlcC5jOjE3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCAlcyIKK21zZ3N0ciAi4oCeJXPigJw6INC40LfRh9C40YLQsNC90LXRgtC+INC90LAg4oCeJXPigJwg0LLRitGA0L3QsCDQv9C+LdC80LDQu9C60L4g0LHQsNC50YLQvtCy0LUg0L7RgiDQt9Cw0Y/QstC10L3QuNGC0LUiCisKKyM6IGhlbHAuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICLQvdCw0LvQuNGH0L3QuCDQutC+0LzQsNC90LTQuCDQvdCwIGdpdCDQvtGCIOKAniVz4oCcIgorCisjOiBoZWxwLmM6MjE0Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICLQutC+0LzQsNC90LTQuCDQvdCwIGdpdCDQvtGCINC00YDRg9Cz0Lgg0LTQuNGA0LXQutGC0L7RgNC40Lgg0L7RgiDigJ4kUEFUSOKAnCIKKworIzogaGVscC5jOjI0NgorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAi0KLQvtCy0LAg0YHQsCDQvdCw0Lkt0YfQtdGB0YLQviDQuNC30L/QvtC70LfQstCw0L3QuNGC0LUg0LrQvtC80LDQvdC00Lgg0L3QsCBHaXQ6IgorCisjOiBoZWxwLmM6MzExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiIgorItCY0LfQs9C70LXQttC00LAsINGH0LUg4oCeJXPigJwg0LUg0LrQvtC80LDQvdC00LAg0L3QsCBnaXQsINC90L4g0YLRjyDQvdC1INC80L7QttC1INC00LBcbiIKKyLQsdGK0LTQtSDQuNC30L/RitC70L3QtdC90LAuINCS0LXRgNC+0Y/RgtC90L4g0L/QsNC60LXRgtGK0YIg4oCeZ2l0LSVz4oCcINC1INC/0L7QstGA0LXQtNC10L0uIgorCisjIEZJWE1FIGJhZCBtZXNzYWdlCisjOiBoZWxwLmM6MzY4Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgItCh0YLRgNCw0L3QvdC+LCDQuNC30LPQu9C10LbQtNCwLCDRh9C1INC90LAg0YHQuNGB0YLQtdC80LDRgtCwINCy0Lgg0L3Rj9C80LAg0L3QuNGC0L4g0LXQtNC90LAg0LrQvtC80LDQvdC00LAg0L3QsCBnaXQuIgorCisjOiBoZWxwLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXQVJOSU5HOiBZb3UgY2FsbGVkIGEgR2l0IGNvbW1hbmQgbmFtZWQgJyVzJywgd2hpY2ggZG9lcyBub3QgZXhpc3QuXG4iCisiQ29udGludWluZyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHlvdSBtZWFudCAnJXMnIgorbXNnc3RyICIiCisi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0J/RgNC+0LHQstCw0YXRgtC1INC00LAg0LjQt9C/0YrQu9C90LjRgtC1INC60L7QvNCw0L3QtNCwINC90LAgR2l0INC90LAg0LjQvNC1IOKAniVz4oCcLCDQsCDRgtCw0LrQsNCy0LAgIgorItC90LVcbiIKKyLRgdGK0YnQtdGB0YLQstGD0LLQsC4g0JjQt9C/0YrQu9C90LXQvdC40LXRgtC+INCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0L/RgNC+0LTRitC70LbQsNCy0LAsINC60LDRgtC+INGB0LUg0YHRh9C40YLQsCwg0YfQtSDQuNC80LDRgtC1ICIKKyLQv9GA0LXQtNCy0LjQtCDigJ4lc+KAnCIKKworIzogaGVscC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbiAlMC4xZiBzZWNvbmRzIGF1dG9tYXRpY2FsbHkuLi4iCittc2dzdHIgItGB0LvQtdC0ICUwLjFmINGB0LXQutGD0L3QtNC44oCmIgorCisjOiBoZWxwLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdDogJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZC4gU2VlICdnaXQgLS1oZWxwJy4iCittc2dzdHIgImdpdDog4oCeJXPigJwg0L3QtSDQtSDQutC+0LzQsNC90LTQsCDQvdCwIGdpdC4g0J/QvtCz0LvQtdC00L3QtdGC0LUg0LjQt9GF0L7QtNCwINC+0YIg4oCeZ2l0IC0taGVscOKAnC4iCisKKyM6IGhlbHAuYzo0MDYgaGVscC5jOjQ2NgorbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorItCa0L7QvNCw0L3QtNCwINGBINC/0L7QtNC+0LHQvdC+INC40LzQtSDQtToiCittc2dzdHJbMV0gIiIKKyJcbiIKKyLQmtC+0LzQsNC90LTQuCDRgSDQv9C+0LTQvtCx0L3QviDQuNC80LUg0YHQsDoiCisKKyM6IGhlbHAuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIC0gJXMiCittc2dzdHIgIiVzOiAlcyDigJQgJXMiCisKKyM6IGxvY2tmaWxlLmM6MzQ1Cittc2dpZCAiQlVHOiByZW9wZW4gYSBsb2NrZmlsZSB0aGF0IGlzIHN0aWxsIG9wZW4iCittc2dzdHIgItCT0KDQldCo0JrQkCDQkiBHSVQ6INC/0YDQtdC+0YLQstCw0YDRj9C90LUg0L3QsCDRhNCw0LnQuy3QutC70Y7Rh9Cw0LvQutCwIgorCisjOiBsb2NrZmlsZS5jOjM0NworbXNnaWQgIkJVRzogcmVvcGVuIGEgbG9ja2ZpbGUgdGhhdCBoYXMgYmVlbiBjb21taXR0ZWQiCittc2dzdHIgItCT0KDQldCo0JrQkCDQkiBHSVQ6INC/0YDQtdC+0YLQstCw0YDRj9C90LUg0L3QsCDRhNCw0LnQuy3QutC70Y7Rh9Cw0LvQutCwLCDQutC+0LnRgtC+INC1INC/0L7QtNCw0LTQtdC9IgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICLQutC10YjRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBtZXJnZS5jOjk0IGJ1aWx0aW4vY2hlY2tvdXQuYzozNzYgYnVpbHRpbi9jaGVja291dC5jOjU4NworIzogYnVpbHRpbi9jbG9uZS5jOjY0NworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC30LDQv9C40YHQstCw0L3QtSDQvdCwINC90L7QstC40Y8g0LjQvdC00LXQutGBIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIijQu9C+0YjQviDQv9C+0LTQsNCy0LDQvdC1KVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5mb19jYWNoZSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeYWRkaW5mb19jYWNoZeKAnCDQt9CwINC/0YrRgtGPIOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNzAKK21zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDQuNC30LPRgNCw0LbQtNCw0L3QtSDQvdCwINC00YrRgNCy0LXRgtCw0YLQsCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC/0YrRgtGPIOKAniVz4oCcJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ4lc+KAnCwg0LfQsCDQtNCwINGB0LUg0L7RgdCy0L7QsdC+0LTQuCDQvNGP0YHRgtC+INC30LAg0L/QvtC00LTQuNGA0LXQutGC0L7RgNC40Y9cbiIKKworIyBGSVhNRSBiZXR0ZXIgbWVzc2FnZQorIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzEyIG1lcmdlLXJlY3Vyc2l2ZS5jOjczMworbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjog0LLRitC30LzQvtC20L3QviDQtSDQtNCwINC40LzQsCDQutC+0L3RhNC70LjQutGCINC00LjRgNC10LrRgtC+0YDQuNGPL9GE0LDQudC7LiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAiIgorItC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC00LXQudGB0YLQstC40LXRgtC+LCDQt9CwINC00LAg0L3QtSDRgdC1INC40LfRgtGA0LjQtSDQvdC10YHQu9C10LTQtdC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcICglcykg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCAoJXMpINGB0LUg0L7Rh9Cw0LrQstCw0YjQtSDQtNCwINC1IEJMT0IsINCwINC90LUg0LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc4OCBidWlsdGluL2Nsb25lLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L3QsCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyciCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDRgdC40LzQstC+0LvQvdCw0YLQsCDQstGA0YrQt9C60LAg4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICIiCisi0L3QtSDQtSDRj9GB0L3QviDQutCw0LrQstC+INC00LAg0YHQtSDQv9GA0LDQstC4INGBINC+0LHQtdC60YLQsCDigJ4lMiRz4oCcICglMyRzKSDRgSDQv9GA0LDQstCwINC30LAg0LTQvtGB0YLRitC/IOKAniUxJDA2b+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTM3Cittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQstGK0YLRgNC10YjQvdC+INGB0LvQuNCy0LDQvdC1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtCx0LDQstC4INCyINCx0LDQt9Cw0YLQsCDRgSDQtNCw0L3QvdC4IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NTcKK21zZ2lkICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSBpbiB0aGUgdHJlZSIKK21zZ3N0ciAi0LIg0LTRitGA0LLQvtGC0L4g0LjQvNCwINC90LXQv9C+0LTQtNGK0YDQttCw0L0g0LLQuNC0INC+0LHQtdC60YIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMzIgbWVyZ2UtcmVjdXJzaXZlLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAoJXMv0LjQt9GC0YDQuNCy0LDQvdC1KTog4oCeJXPigJwg0LUg0LjQt9GC0YDQuNGCINCyICVzLCDQsCDigJ4lc+KAnCDQsiAlcy4g0JLQtdGA0YHQuNGPICVzINC90LAg4oCeJXPigJwgIgorItC1INC+0YHRgtCw0LLQtdC90LAg0LIg0LTRitGA0LLQvtGC0L4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDM4IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKCVzL9C40LfRgtGA0LjQstCw0L3QtSk6IOKAniVz4oCcINC1INC40LfRgtGA0LjRgiDQsiAlcywg0LAg4oCeJXPigJwg0LIgJXMuINCS0LXRgNGB0LjRjyAlcyDQvdCwIOKAniVz4oCcICIKKyLQtSDQvtGB0YLQsNCy0LXQvdCwINCyINC00YrRgNCy0L7RgtC+OiAlcy4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwOTIKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgItC/0YDQtdC40LzQtdC90YPQstCw0L3QtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA5MgorbXNnaWQgInJlbmFtZWQiCittc2dzdHIgItC/0YDQtdC40LzQtdC90YPQstCw0L0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIuKAniVz4oCcINC1INC00LjRgNC10LrRgtC+0YDQuNGPINCyIOKAniVz4oCcLCDQt9Cw0YLQvtCy0LAg0YHQtSDQtNC+0LHQsNCy0Y8g0LrQsNGC0L4g4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorItCa0J7QndCk0JvQmNCa0KIgKNC/0YDQtdC40LzQtdC90YPQstCw0L3QtS/Qv9GA0LXQuNC80LXQvdGD0LLQsNC90LUpOiDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwg0LIg0LrQu9C+0L0gIgorIuKAniVz4oCcLCDQsCDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwg0LIg4oCeJXPigJwvJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTc1Cittc2dpZCAiIChsZWZ0IHVucmVzb2x2ZWQpIgorbXNnc3RyICIgKNC90LXQutC+0YDQuNCz0LjRgNCw0L0g0LrQvtC90YTQu9C40LrRgikiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAo0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1L9C/0YDQtdC40LzQtdC90YPQstCw0L3QtSk6IOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCDQsiDQutC70L7QvSAiCisi4oCeJXPigJwsINCwIOKAniVz4oCcINC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCDQsiDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIKK21zZ3N0ciAi0J/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg4oCeJXPigJwg0L3QsCDigJ4lc+KAnCwg0LAg4oCeJXPigJwg0L3QsCDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL2FkZCk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuICVzIGFkZGVkIGluICVzIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAo0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1L9C00L7QsdCw0LLRj9C90LUpOiDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC90LAg4oCeJXPigJwg0LIg0LrQu9C+0L0g4oCeJXPigJwsINCwICIKKyLigJ4lc+KAnCDQtSDQtNC+0LHQsNCy0LXQvSDQsiDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorbXNnc3RyICLQlNC+0LHQsNCy0Y/QvdC1INC90LAg0YHQu9C10YLQuNGPIOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDczIG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0LrQsNGC0L4g4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICLQvtCx0LXQutGC0YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQtSBCTE9CIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTc1Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICLQv9GA0L7QvNGP0L3QsCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NQorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICLQv9GA0L7QvNC10L3QtdC9IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTg1Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAi0YHRitC00YrRgNC20LDQvdC40LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1OTIKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1L9C00L7QsdCw0LLRj9C90LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICLQn9GA0LXRgdC60LDRh9Cw0L3QtSDQvdCwIOKAniVz4oCcICjRgdC70LXRgtC40Y/RgiDRgNC10LfRg9C70YLQsNGCINC1INC40LTQtdC90YLQuNGH0LXQvSDRgdGK0YEg0YHQtdCz0LDRiNC90LjRjykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDQgZ2l0LXN1Ym1vZHVsZS5zaDoxMTUwCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICLQn9Ce0JTQnNCe0JTQo9CbIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICLQmtCe0J3QpNCb0JjQmtCiICglcyk6INCa0L7QvdGE0LvQuNC60YIg0L/RgNC4INGB0LvQuNCy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzU2Cittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgItGE0LDQudC7L9C00LjRgNC10LrRgtC+0YDQuNGPIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzYyCittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGPL9GE0LDQudC7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gQWRkaW5nICVzIGFzICVzIgorbXNnc3RyICIiCisi0JrQntCd0KTQm9CY0JrQoiAoJXMpOiDQodGK0YnQtdGB0YLQstGD0LLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwINC40LzQtSDigJ4lc+KAnCDQsiDigJ4lc+KAnC4g0JTQvtCx0LDQstGP0L3QtSDQvdCwIOKAniVz4oCcICIKKyLQutCw0YLQviDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc3NworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDigJ4lc+KAnCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc5NAorbXNnaWQgIkZhdGFsIG1lcmdlIGZhaWx1cmUsIHNob3VsZG4ndCBoYXBwZW4uIgorbXNnc3RyICLQpNCw0YLQsNC70L3QsCDQs9GA0LXRiNC60LAg0L/RgNC4INGB0LvQuNCy0LDQvdC1LCDQsCDRgtCw0LrQsNCy0LAg0L3QtSDRgtGA0Y/QsdCy0LAg0LTQsCDQstGK0LfQvdC40LrQstCwISIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTgxMworbXNnaWQgIkFscmVhZHkgdXAtdG8tZGF0ZSEiCittc2dzdHIgItCS0LXRh9C1INC1INC+0LHQvdC+0LLQtdC90L4hIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg0LTRitGA0LLQtdGC0LDRgtCwIOKAniVz4oCcINC4IOKAniVz4oCcIgorCisjIEZJWE1FIG1lc3NhZ2UKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5wcm9jZXNzZWQgcGF0aD8/PyAlcyIKK21zZ3N0ciAiIgorItCf0YrRgtGP0YIg4oCeJXPigJwg0L3QtSDQtSDQvtCx0YDQsNCx0L7RgtC10L0sINGC0L7QstCwINC1INCz0YDQtdGI0LrQsCDQsiBHaXQsINC00L7QutC70LDQtNCy0LDQudGC0LUg0Y8g0L3QsCAiCisi0YDQsNC30YDQsNCx0L7RgtGH0LjRhtC40YLQtSwg0LrQsNGC0L4g0L/RgNCw0YLQuNGC0LUg0LUt0L/QuNGB0LzQviDQvdCwINCw0LTRgNC10YE6IOKAnmdpdEB2Z2VyLmtlcm5lbC5vcmfigJwuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTAwCittc2dpZCAiTWVyZ2luZzoiCittc2dzdHIgItCh0LvQuNCy0LDQvdC1OiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkxMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAi0L7RgtC60YDQuNGCINC1ICV1INC+0LHRiSDQv9GA0LXQtNGI0LXRgdGC0LLQtdC90LjQujoiCittc2dzdHJbMV0gItC+0YLQutGA0LjRgtC4INGB0LAgJXUg0L7QsdGJ0Lgg0L/RgNC10LTRiNC10YHRgtCy0LXQvdC40YbQuDoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5NTAKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgItGB0LvQuNCy0LDQvdC10YLQviDQvdC1INCy0YrRgNC90LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjAwNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0LXQvSDQsNC90LDQu9C40Lcg0L3QsCDQvtCx0LXQutGC0LAg4oCeJXPigJwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwMTggYnVpbHRpbi9tZXJnZS5jOjY0NQorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgItCY0L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IG5vdGVzLXV0aWxzLmM6NDEKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKyLQndC10LjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QviDQuNC70Lgg0L3QtdGA0LXRhNC10YDQuNGA0LDQvdC+INC00YrRgNCy0L4g0LfQsCDQsdC10LvQtdC20LrQuCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/QvtC00LDQtNC10L3QviIKKworIzogbm90ZXMtdXRpbHMuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDigJ5ub3Rlcy5yZXdyaXRlTW9kZeKAnDog4oCeJXPigJwiCisKKyM6IG5vdGVzLXV0aWxzLmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIiIKKyLQkdC10LvQtdC20LrQuNGC0LUg0LIg4oCeJXPigJwg0L3Rj9C80LAg0LTQsCDQsdGK0LTQsNGCINC/0YDQtdC30LDQv9C40YHQsNC90LgsINC30LDRidC+0YLQviDRgdCwINC40LfQstGK0L0g4oCecmVmcy9ub3Rlcy/igJwuIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIHRoZQorIy4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMgaXRzIHZhbHVlCisjOiBub3Rlcy11dGlscy5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgItCX0LDQtNCw0LTQtdC90LAg0LUg0LvQvtGI0LAg0YHRgtC+0LnQvdC+0YHRgiDQvdCwINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCDigJ4lc+KAnDog4oCeJXPigJwiCisKKyM6IG9iamVjdC5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC9IgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTQ2Cittc2dpZCAiLi4uIgorbXNnc3RyICLigKYiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICLRg9C/0L7RgtGA0LXQsdCwOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uCisjOiBwYXJzZS1vcHRpb25zLmM6NTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICAgICDQuNC70Lg6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NjA1Cittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLdCn0JjQodCb0J4iCisKKyM6IHBhdGhzcGVjLmM6MTMzCittc2dpZCAiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0LPQu9C+0LHQsNC70L3QuNGC0LUg0L3QsNGB0YLRgNC+0LnQutC4INC30LAg0L/RitGC0LjRidCwIOKAnmdsb2LigJwg0Lgg4oCebm9nbG9i4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBwYXRoc3BlYy5jOjE0MworbXNnaWQgIiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCittc2dzdHIgIiIKKyLQs9C70L7QsdCw0LvQvdCw0YLQsCDQvdCw0YHRgtGA0L7QudC60LAg0LfQsCDQtNC+0YHQu9C+0LLQvdC4INC/0YrRgtC40YnQsCDigJ5saXRlcmFs4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQstGB0LjRh9C60LggIgorItC00YDRg9Cz0Lgg0LPQu9C+0LHQsNC70L3QuCDQvdCw0YHRgtGA0L7QudC60Lgg0LfQsCDQv9GK0YLQuNGJ0LAiCisKKyM6IHBhdGhzcGVjLmM6MTc3Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQv9Cw0YDQsNC80LXRgtGK0YAg0LfQsCDQvtC/0YbQuNGP0YLQsCDQt9CwINC80LDQs9C40YfQtdGB0LrQuCDQv9GK0YLQuNGJ0LAg4oCecHJlZml44oCcIgorCisjOiBwYXRoc3BlYy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg0L7Qv9GG0LjRj9GC0LAg0LfQsCDQvNCw0LPQuNGH0LXRgdC60Lgg0L/RitGC0LjRidCwIOKAniUuKnPigJwg0LIg4oCeJXPigJwiCisKKyM6IHBhdGhzcGVjLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAi0JfQvdCw0LrRitGCIOKAninigJwg0LvQuNC/0YHQstCwINCyINC+0L/RhtC40Y/RgtCwINC30LAg0LzQsNCz0LjRh9C10YHQutC4INC/0YrRgtC40YnQsCDQsiDigJ4lc+KAnCIKKworIzogcGF0aHNwZWMuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgItCc0LDQs9C40YfQtdGB0LrQuNGC0LUg0L/RitGC0LjRidCwIOKAniVj4oCcINGB0LAg0LHQtdC3INGA0LXQsNC70LjQt9Cw0YbQuNGPINC30LAg4oCeJXPigJwiCisKKyM6IHBhdGhzcGVjLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlczog0L7Qv9GG0LjQuNGC0LUg4oCebGl0ZXJhbOKAnCDQuCDigJ5nbG9i4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBwYXRoc3BlYy5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzOiDigJ4lc+KAnCDQtSDQuNC30LLRitC9INGF0YDQsNC90LjQu9C40YnQtdGC0L4iCisKKyM6IHBhdGhzcGVjLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAi0J/RitGC0Y/RgiDigJ4lc+KAnCDQtSDQsiDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJS4qc+KAnCIKKworIzogcGF0aHNwZWMuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGhzcGVjIG1hZ2ljIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21tYW5kOiAlcyIKK21zZ3N0ciAiJXM6INC80LDQs9C40YfQtdGB0LrQuNGC0LUg0L/RitGC0LjRidCwINC90LUg0YHQtSDQv9C+0LTQtNGK0YDQttCw0YIg0L7RgiDQutC+0LzQsNC90LTQsNGC0LAg4oCeJXPigJwiCisKKyM6IHBhdGhzcGVjLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi0L/RitGC0Y/RgiDigJ4lc+KAnCDQtSDRgdC70LXQtCDRgdC40LzQstC+0LvQvdCwINCy0YDRitC30LrQsCIKKworIzogcGF0aHNwZWMuYzo0NDEKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBleGNsdWRlIGZyb20gYnkgOihleGNsdWRlKSBwYXR0ZXJucy5cbiIKKyJQZXJoYXBzIHlvdSBmb3Jnb3QgdG8gYWRkIGVpdGhlciAnOi8nIG9yICcuJyA/IgorbXNnc3RyICIiCisi0J3QuNGJ0L4g0L3QtSDRgdC1INC40LfQutC70Y7Rh9Cy0LAg0L7RgiDRiNCw0LHQu9C+0L3QuNGC0LUg0LfQsCDQuNC30LrQu9GO0YfQstCw0L3QtS5cbiIKKyLQotC+0LLQsCDRh9C10YHRgtC+INGB0LUg0YHQu9GD0YfQstCwLCDQsNC60L4g0YHRgtC1INC30LDQsdGA0LDQstC40LvQuCDQtNCwINC00L7QsdCw0LLQuNGC0LUg4oCeOi/igJwg0LjQu9C4IOKAni7igJwuIgorCisjOiBwcmV0dHkuYzo5NjgKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IgorbXNnc3RyICLQsNGA0LPRg9C80LXQvdGC0YrRgiDQutGK0Lwg0L7Qv9GG0LjRj9GC0LAg4oCeLS1wcmV0dHnigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwIgorCisjOiBwcm9ncmVzcy5jOjIzNgorbXNnaWQgImRvbmUiCittc2dzdHIgItC00LXQudGB0YLQstC40LXRgtC+INC30LDQstGK0YDRiNC4IgorCisjOiByZWFkLWNhY2hlLmM6MTI5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisi0JfQsNC00LDQtNC10L3QsCDQtSDQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC90LAg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5pbmRleC52ZXJzaW9u4oCcLlxuIgorItCp0LUg0YHQtSDQv9C+0LvQt9Cy0LAg0LLQtdGA0YHQuNGPICVpIgorCisjOiByZWFkLWNhY2hlLmM6MTMwNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorItCX0LDQtNCw0LTQtdC90LAg0LUg0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQvdCwINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCDQvdCwINGB0YDQtdC00LDRgtCwICIKKyLigJ5HSVRfSU5ERVhfVkVSU0lPTuKAnC5cbiIKKyLQqdC1INGB0LUg0L/QvtC70LfQstCwINCy0LXRgNGB0LjRjyAlaSIKKworIzogcmVtb3RlLmM6NzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAi0J3QtdCy0YrQt9C80L7QttC90L4g0LUg0LTQsCDRgdC1INC00L7RgdGC0LDQstGP0YIg0LXQtNC90L7QstGA0LXQvNC10L3QvdC+INC4IOKAniVz4oCcLCDQuCDigJ4lc+KAnCDQutGK0Lwg4oCeJXPigJwiCisKKyM6IHJlbW90ZS5jOjc5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvtCx0LjQutC90L7QstC10L3QviDRgdC70LXQtNC4IOKAniVz4oCcLCDQsCDQvdC1IOKAniVz4oCcIgorCisjOiByZW1vdGUuYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICLigJ4lc+KAnCDRgdC70LXQtNC4INC60LDQutGC0L4g4oCeJXPigJwsINGC0LDQutCwINC4IOKAniVz4oCcIgorCisjOiByZW1vdGUuYzo4MDgKK21zZ2lkICJJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAi0JLRitGC0YDQtdGI0L3QsCDQs9GA0LXRiNC60LAiCisKKyM6IHJlbW90ZS5jOjE3MjMgcmVtb3RlLmM6MTc2NgorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0LrQu9C+0L0iCisKKyM6IHJlbW90ZS5jOjE3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgItC90Y/QvNCwINC60LvQvtC9INC90LAg0LjQvNC1IOKAniVz4oCcIgorCisjOiByZW1vdGUuYzoxNzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQvdC1INC1INC30LDQtNCw0LTQtdC9INC60LvQvtC9LdC40LfRgtC+0YfQvdC40Log0LfQsCDQutC70L7QvdCwIOKAniVz4oCcIgorCisjOiByZW1vdGUuYzoxNzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLQutC70L7QvdGK0YIt0LjQt9GC0L7Rh9C90LjQuiDigJ4lc+KAnCDQvdC1INC1INGB0YrRhdGA0LDQvdC10L0g0LrQsNGC0L4g0YHQu9C10LTRj9GJINC60LvQvtC9IgorCisjOiByZW1vdGUuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisi0LvQuNC/0YHQstCwINC70L7QutCw0LvQtdC9INGB0LvQtdC00Y/RiSDQutC70L7QvSDQt9CwINC80LXRgdGC0L7Qv9C+0LvQvtC20LXQvdC40LXRgtC+INC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDigJ4lc+KAnCDQsiAiCisi0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnCIKKworIzogcmVtb3RlLmM6MTc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICLQvdGP0LzQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQutC70L7QvdGK0YIg4oCeJXPigJwg0LTQsCDRgdC70LXQtNC4INC90Y/QutC+0Lkg0LTRgNGD0LMiCisKKyM6IHJlbW90ZS5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQt9CwINC40LfRgtC70LDRgdC60LLQsNC90LUg0L3QsCDigJ4lc+KAnCDQvdC1INCy0LrQu9GO0YfQstCwIOKAniVz4oCcIgorCisjOiByZW1vdGUuYzoxNzk1Cittc2dpZCAicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQt9CwINC40LfRgtC70LDRgdC60LLQsNC90LUg0L3QtSDQstC60LvRjtGH0LLQsCDRhtC10LsgKOKAnnB1c2guZGVmYXVsdOKAnCDQtSDigJ5ub3RoaW5n4oCcKSIKKworIzogcmVtb3RlLmM6MTgxNworbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgItC/0YDQvtGB0YLQvtGC0L4gKHNpbXBsZSkg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdC1INGB0YrQvtGC0LLQtdGC0YHRgtCy0LAg0L3QsCDQtdC00L3QsCDRhtC10LsiCisKKyM6IHJlbW90ZS5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICLQotC+0LfQuCDQutC70L7QvSDRgdC70LXQtNC4IOKAniVz4oCcLCDQvdC+INGB0LvQtdC00LXQvdC40Y/RgiDQutC70L7QvSDQtSDQuNC30YLRgNC40YIuXG4iCisKKyM6IHJlbW90ZS5jOjIxMjgKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiICAo0LfQsCDQtNCwINC60L7RgNC40LPQuNGA0LDRgtC1INGC0L7QstCwLCDQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbeKAnClcbiIKKworIzogcmVtb3RlLmM6MjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyB1cC10by1kYXRlIHdpdGggJyVzJy5cbiIKK21zZ3N0ciAi0JrQu9C+0L3RitGCINC1INCw0LrRgtGD0LDQu9C40LfQuNGA0LDQvSDQutGK0Lwg4oCeJXPigJwuXG4iCisKKyM6IHJlbW90ZS5jOjIxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAi0JrQu9C+0L3RitGCINCy0Lgg0LUg0YEgJTIkZCDQv9C+0LTQsNCy0LDQvdC1INC/0YDQtdC0IOKAniUxJHPigJwuXG4iCittc2dzdHJbMV0gItCa0LvQvtC90YrRgiDQstC4INC1INGBICUyJGQg0L/QvtC00LDQstCw0L3QuNGPINC/0YDQtdC0IOKAniUxJHPigJwuXG4iCisKKyM6IHJlbW90ZS5jOjIxNDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgICjQv9GD0LHQu9C40LrRg9Cy0LDQudGC0LUg0LvQvtC60LDQu9C90LjRgtC1INGB0Lgg0L/RgNC+0LzQtdC90Lgg0YfRgNC10Lcg4oCeZ2l0IHB1c2jigJwpXG4iCisKKyM6IHJlbW90ZS5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAiIgorItCa0LvQvtC90YrRgiDQstC4INC1INGBICUyJGQg0L/QvtC00LDQstCw0L3QtSDQt9Cw0LQg4oCeJTEkc+KAnCDQuCDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGC0YDQuNCy0LjQsNC70L3QviDRgdC70Y/Rgi5cbiIKK21zZ3N0clsxXSAiIgorItCa0LvQvtC90YrRgiDQstC4INC1INGBICUyJGQg0L/QvtC00LDQstCw0L3QuNGPINC30LDQtCDigJ4lMSRz4oCcINC4INC80L7QttC1INC00LAg0LHRitC00LUg0YLRgNC40LLQuNCw0LvQvdC+INGB0LvRj9GCLlxuIgorCisjOiByZW1vdGUuYzoyMTUyCittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAgKNC+0LHQvdC+0LLQtdGC0LUg0LvQvtC60LDQu9C90LjRjyDRgdC4INC60LvQvtC9INGH0YDQtdC3IOKAnmdpdCBwdWxs4oCcKVxuIgorCisjOiByZW1vdGUuYzoyMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorItCi0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g0YHQtSDQtSDQvtGC0LTQtdC70LjQuyDQvtGCIOKAniVz4oCcLFxuIgorItC00LLQsNGC0LAg0LjQvNCw0YIg0YHRitC+0YLQstC10YLQvdC+INC/0L4gJWQg0LggJWQg0L3QtdGB0YrQstC/0LDQtNCw0YnQuCDQv9C+0LTQsNCy0LDQvdC40Y8uXG4iCittc2dzdHJbMV0gIiIKKyLQotC10LrRg9GJ0LjRj9GCINC60LvQvtC9INGB0LUg0LUg0L7RgtC00LXQu9C40Lsg0L7RgiDigJ4lc+KAnCxcbiIKKyLQtNCy0LDRgtCwINC40LzQsNGCINGB0YrQvtGC0LLQtdGC0L3QviDQv9C+ICVkINC4ICVkINC90LXRgdGK0LLQv9Cw0LTQsNGJ0Lgg0L/QvtC00LDQstCw0L3QuNGPLlxuIgorCisjOiByZW1vdGUuYzoyMTY1Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgICjRgdC70LXQudGC0LUg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSDQsiDQu9C+0LrQsNC70L3QuNGPINGH0YDQtdC3IOKAnmdpdCBwdWxs4oCcKVxuIgorCisjOiByZXZpc2lvbi5jOjIzNjYKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1maXJzdC1wYXJlbnTigJwg0Lgg4oCeLS1iaXNlY3TigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IHJ1bi1jb21tYW5kLmM6ODMKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQvtGC0LLQsNGA0Y/QvdC1INC90LAg4oCeL2Rldi9udWxs4oCcIgorCisjOiBydW4tY29tbWFuZC5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cDIoJWQsJWQpIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAgZHVwMiglZCwlZCkiCisKKyM6IHNlbmQtcGFjay5jOjI3MgorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICLRgdC10YDRgtC40YTQuNC60LDRgtGK0YIg0LfQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LTQv9C40YHQsNC9IgorCisjOiBzZW5kLXBhY2suYzozNzgKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgItC+0YLRgdGA0LXRidC90LDRgtCwINGB0YLRgNCw0L3QsCDQvdC1INC/0L7QtNC00YrRgNC20LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLXNpZ25lZOKAnCIKKworIzogc2VuZC1wYWNrLmM6Mzg5Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIgorbXNnc3RyICLQv9C+0LvRg9GH0LDQstCw0YnQsNGC0LAg0YHRgtGA0LDQvdCwINC90LUg0L/QvtC00LTRitGA0LbQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1INGBINC+0L/RhtC40Y/RgtCwIOKAni0tYXRvbWlj4oCcIgorCisjOiBzZXF1ZW5jZXIuYzoxNzIgYnVpbHRpbi9tZXJnZS5jOjc2MCBidWlsdGluL21lcmdlLmM6ODcxIGJ1aWx0aW4vbWVyZ2UuYzo5NzMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9INC30LAg0LfQsNC/0LjRgSIKKworIzogc2VxdWVuY2VyLmM6MTc0IGJ1aWx0aW4vbWVyZ2UuYzozNDQgYnVpbHRpbi9tZXJnZS5jOjc2MyBidWlsdGluL21lcmdlLmM6OTc1CisjOiBidWlsdGluL21lcmdlLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyMgRklYTUUgZ2l0IGFkZCA8cGF0aOKApj4gZm9yIGNvbnNpc3RlbmNlCisjOiBzZXF1ZW5jZXIuYzoxOTUKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKK21zZ3N0ciAiIgorItGB0LvQtdC0INC60L7RgNC40LPQuNGA0LDQvdC10YLQviDQvdCwINC60L7QvdGE0LvQuNC60YLQuNGC0LUsINC+0YLQsdC10LvQtdC20LXRgtC1INGB0YrQvtGC0LLQtdGC0L3QuNGC0LVcbiIKKyLQv9GK0YLQuNGJ0LAg0YEg4oCeZ2l0IGFkZCDQn9Cq0KLigKbigJwg0LjQu9C4IOKAnmdpdCBybSDQn9Cq0KLigKbigJwuIgorCisjOiBzZXF1ZW5jZXIuYzoxOTgKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorItGB0LvQtdC0INC60L7RgNC40LPQuNGA0LDQvdC10YLQviDQvdCwINC60L7QvdGE0LvQuNC60YLQuNGC0LUsINC+0YLQsdC10LvQtdC20LXRgtC1INGB0YrQvtGC0LLQtdGC0L3QuNGC0LVcbiIKKyLQv9GK0YLQuNGJ0LAg0YEg4oCeZ2l0IGFkZCDQn9Cq0KLigKbigJwg0LjQu9C4IOKAnmdpdCBybSDQn9Cq0KLigKbigJwsINGB0LvQtdC0INC60L7QtdGC0L5cbiIKKyLQv9C+0LTQsNC50YLQtSDRgNC10LfRg9C70YLQsNGC0LAg0YEg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBjb21taXQn4oCcLiIKKworIyBGSVhNRSAtIG11c3QgYmUgdGhlIHNhbWUgYXMgQ291bGQgbm90IHdyaXRlIHRvICclcycgYWJvdmUKKyM6IHNlcXVlbmNlci5jOjIxMSBzZXF1ZW5jZXIuYzo4NjEgc2VxdWVuY2VyLmM6OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC9IgorCisjIEZJWE1FIHdyYXAgdXAgYXMgZmZpbmlzaGluZyB0aGUgd29yayBvbiwgaW4gZmFjdCwgZnVsbCBzdG9wIGF0IGVuZCBmb3IgY29uc2lzdGVuY3kgd2l0aCBiZWxvdworIzogc2VxdWVuY2VyLmM6MjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzIgorbXNnc3RyICLQntCx0YDQsNCx0L7RgtC60LDRgtCwINC90LAg4oCeJXPigJwg0L3QtSDQt9Cw0LLRitGA0YjQuCDRg9GB0L/QtdGI0L3Qvi4iCisKKyM6IHNlcXVlbmNlci5jOjIyOQorbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVycnktcGljay4iCittc2dzdHIgItCb0L7QutCw0LvQvdC40YLQtSDQstC4INC/0YDQvtC80LXQvdC4INGJ0LUg0LHRitC00LDRgiDQv9GA0LXQt9Cw0L/QuNGB0LDQvdC4INC/0YDQuCDQvtGC0LHQuNGA0LDQvdC10YLQviDQvdCwINC/0L7QtNCw0LLQsNC90LjRjy4iCisKKyM6IHNlcXVlbmNlci5jOjIzMQorbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSByZXZlcnQuIgorbXNnc3RyICLQm9C+0LrQsNC70L3QuNGC0LUg0LLQuCDQv9GA0L7QvNC10L3QuCDRidC1INCx0YrQtNCw0YIg0L/RgNC10LfQsNC/0LjRgdCw0L3QuCDQv9GA0Lgg0L7RgtC80Y/QvdCw0YLQsCDQvdCwINC/0L7QtNCw0LLQsNC90LjRjy4iCisKKyM6IHNlcXVlbmNlci5jOjIzNAorbXNnaWQgIkNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAi0J/QvtC00LDQudGC0LUg0LjQu9C4INGB0LrQsNGC0LDQudGC0LUg0L/RgNC+0LzQtdC90LjRgtC1LCDQt9CwINC00LAg0L/RgNC+0LTRitC70LbQuNGC0LUiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiIG9yICJjaGVycnktcGljayIKKyM6IHNlcXVlbmNlci5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczog0L3QvtCy0LjRj9GCINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L0iCisKKyM6IHNlcXVlbmNlci5jOjMzOQorbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0XG4iCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+INGB0L7Rh9C10L3QviDQvtGCINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQvlxuIgorCisjOiBzZXF1ZW5jZXIuYzozNTkKK21zZ2lkICJVbmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWVcbiIKK21zZ3N0ciAi0JTRitGA0LLQvtGC0L4g0L3QsCDQutC10YjQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L3QvlxuIgorCisjOiBzZXF1ZW5jZXIuYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGNvbW1pdCAlc1xuIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L3QvlxuIgorCisjOiBzZXF1ZW5jZXIuYzo0MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXNcbiIKK21zZ3N0ciAi0KDQvtC00LjRgtC10LvRgdC60L7RgtC+INC/0L7QtNCw0LLQsNC90LUg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC90L5cbiIKKworIzogc2VxdWVuY2VyLmM6NDgyCittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAi0JjQvdC00LXQutGB0YrRgiDQvdC1INC1INGB0LvRj9GCLiIKKworIzogc2VxdWVuY2VyLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0LUg0YHQu9C40LLQsNC90LUsINC90L4g0L3QtSDQtSDQtNCw0LTQtdC90LAg0L7Qv9GG0LjRj9GC0LAg4oCeLW3igJwiCisKKyM6IHNlcXVlbmNlci5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC90Y/QvNCwINGA0L7QtNC40YLQtdC7ICVkIgorCisjOiBzZXF1ZW5jZXIuYzo1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFpbmxpbmUgd2FzIHNwZWNpZmllZCBidXQgY29tbWl0ICVzIGlzIG5vdCBhIG1lcmdlLiIKK21zZ3N0ciAi0KPQutCw0LfQsNC90L4g0LUg0LHQsNC30L7QstC+INC/0L7QtNCw0LLQsNC90LUsINC90L4g0L/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJwg0L3QtSDQtSDRgdC70LjQstCw0L3QtS4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSAicmV2ZXJ0IiBvcgorIy4gImNoZXJyeS1waWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEKKyM6IHNlcXVlbmNlci5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVzOiDQvdC10YDQsNC30L/QvtC30L3QsNGC0LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwINGA0L7QtNC40YLQtdC70YHQutC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzo1MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQuNC30LLQu9C40YfQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzo2MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtdGC0L4g4oCeJXPigJzigKYg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQvNC10L3QtdC90L46IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzo2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnOKApiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC40LvQvtC20LXQvdC+OiDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6NjUzCittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgItC30LDQtNCw0LTQtdC90L4g0LUg0L/RgNCw0LfQvdC+INC80L3QvtC20LXRgdGC0LLQviDQvtGCINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogc2VxdWVuY2VyLmM6NjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6INC90LXRg9GB0L/QtdGI0L3QviDQuNC30YfQuNGC0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IHNlcXVlbmNlci5jOjY2NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiDQvdC10YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogc2VxdWVuY2VyLmM6NzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKK21zZ3N0ciAi0J/QviDQstGA0LXQvNC1INC90LAg4oCeJTEkc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDigJ4lMiRz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzo3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIgorbXNnc3RyICIlZC3Rj9GCINGA0LXQtCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQsNC90LDQu9C40LfQuNGA0LAuIgorCisjOiBzZXF1ZW5jZXIuYzo3NTIKK21zZ2lkICJObyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgItCd0LjQutC+0LUg0L7RgiDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGA0LDQt9C/0L7Qt9C90LDQtS4iCisKKyMgRklYTUUgQ291bGQgbm90IG9wZW4gJXMuIC0gZnVsbCBzdG9wIGZvciBjb25zaXN0ZW5jZSB3aXRoIG5leHQgbWVzc2FnZQorIzogc2VxdWVuY2VyLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQtS4iCisKKyM6IHNlcXVlbmNlci5jOjc2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAlcy4iCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQstC+0YDQuC4iCisKKyM6IHNlcXVlbmNlci5jOjc3NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJXMiCittc2dzdHIgItCk0LDQudC70YrRgiDRgSDQvtC/0LjRgdCw0L3QuNC1INC90LAg0L/RgNC10LTRgdGC0L7Rj9GJ0LjRgtC1INC00LXQudGB0YLQstC40Y8g4oCUIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9C30LLQsCIKKworIzogc2VxdWVuY2VyLmM6ODA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0LrQu9GO0Yc6IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzo4MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeJXPigJw6IOKAniVz4oCcIgorCisjOiBzZXF1ZW5jZXIuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QviDRgdGK0LTRitGA0LbQsNC90LjQtSDQvdCwINGE0LDQudC70LAg0YEg0L7Qv9GG0LjQuDog4oCeJXPigJwiCisKKyM6IHNlcXVlbmNlci5jOjg0MgorbXNnaWQgImEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIiIKKyLQsiDQvNC+0LzQtdC90YLQsCDQstC10YfQtSDRgdC1INC40LfQstGK0YDRiNCy0LAg0L7RgtCx0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyDQuNC70Lgg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwINC60LvQvtC90LAiCisKKyM6IHNlcXVlbmNlci5jOjg0MworbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydCnigJwiCisKKyM6IHNlcXVlbmNlci5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiCittc2dzdHIgItCU0LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQt9CwINGB0LXQutCy0LXQvdGB0L7RgNCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC90LAiCisKKyM6IHNlcXVlbmNlci5jOjg2MyBzZXF1ZW5jZXIuYzo5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIgorbXNnc3RyICLQntCx0YDQsNCx0L7RgtC60LDRgtCwINC90LAg4oCeJXPigJwg0L3QtSDQt9Cw0LLRitGA0YjQuCDRg9GB0L/QtdGI0L3Qvi4iCisKKyM6IHNlcXVlbmNlci5jOjg4MiBzZXF1ZW5jZXIuYzoxMDE4Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICIiCisi0LIg0LzQvtC80LXQvdGC0LAg0L3QtSDRgdC1INC40LfQstGK0YDRiNCy0LAg0L7RgtCx0LjRgNCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyDQuNC70Lgg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwINC60LvQvtC90LAiCisKKyM6IHNlcXVlbmNlci5jOjg4NAorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+INGB0L7Rh9C10L3QviDQvtGCINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQviIKKworIzogc2VxdWVuY2VyLmM6ODg2Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIiIKKyLQtNC10LnRgdGC0LLQuNC10YLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC10YPRgdGC0LDQvdC+0LLQtdC90L4sINC60L7Qs9Cw0YLQviDRgdGC0LUg0L3QsCDQutC70L7QvSwg0LrQvtC50YLQviDRgtC10L/RitGA0LLQsCAiCisi0L/RgNC10LTRgdGC0L7QuCDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L0iCisKKyM6IHNlcXVlbmNlci5jOjkwOCBidWlsdGluL2FwcGx5LmM6NDI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L06ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo5MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L06ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo5MTIKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICLQvdC10L7Rh9Cw0LrQstCw0L0g0LrRgNCw0Lkg0L3QsCDRhNCw0LnQuyIKKworIzogc2VxdWVuY2VyLmM6OTE4CisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorItC30LDQv9Cw0LfQtdC90LjRj9GCINC/0YDQtdC00Lgg0LfQsNC/0L7Rh9Cy0LDQvdC10YLQviDQvdCwINC+0YLQsdC40YDQsNC90LXRgtC+INGE0LDQudC7INC30LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwg4oCUIOKAniVz4oCcINC1ICIKKyLQv9C+0LLRgNC10LTQtdC9IgorCisjOiBzZXF1ZW5jZXIuYzo5NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZvcm1hdCAlcy4iCittc2dzdHIgItCk0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDRhNC+0YDQvNCw0YLQuNGA0LAg0L/QviDQv9C+0LTRhdC+0LTRj9GJ0LjRjyDQvdCw0YfQuNC9LiIKKworIzogc2VxdWVuY2VyLmM6MTA4NgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXM6INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQsdC10YDQtSDigJ4lc+KAnCIKKworIzogc2VxdWVuY2VyLmM6MTA4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlczog0L3QtdC/0YDQsNCy0LjQu9C90LAg0LLQtdGA0YHQuNGPIgorCisjOiBzZXF1ZW5jZXIuYzoxMTIzCittc2dpZCAiQ2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICLQn9GK0YDQstC+0L3QsNGH0LDQu9C90L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQvNC10L3QtdC90L4iCisKKyM6IHNlcXVlbmNlci5jOjExMjQKK21zZ2lkICJDYW4ndCBjaGVycnktcGljayBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgItCf0YDQuCDQv9GA0LDQt9C10L0g0LLRgNGK0YUg0L3QtSDQvNC+0LPQsNGCINC00LAg0YHQtSDQvtGC0LHQuNGA0LDRgiDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IHNldHVwLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IHNoYTFfbmFtZS5jOjQ1MworbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorItCf0YDQuCDQvdC+0YDQvNCw0LvQvdCwINGA0LDQsdC+0YLQsCBHaXQg0L3QuNC60L7Qs9CwINC90LUg0YHRitC30LTQsNCy0LAg0YPQutCw0LfQsNGC0LXQu9C4LCDQutC+0LjRgtC+INC30LDQstGK0YDRiNCy0LDRgiDRgSA0MFxuIgorItGI0LXRgdGC0L3QsNC00LXRgdC10YLQuNGH0L3QuCDQt9C90LDQutCwLCDQt9Cw0YnQvtGC0L4g0YHRgtCw0L3QtNCw0YDRgtC90L4g0YLQtSDRidC1INCx0YrQtNCw0YIg0L/RgNC10YHQutCw0YfQsNC90LguXG4iCisi0JLRitC30LzQvtC20L3QviDQtSDRgtCw0LrQuNCy0LAg0YPQutCw0LfQsNGC0LXQu9C4INC00LAg0YHQsCDRgdGK0LfQtNCw0LTQtdC90Lgg0YHQu9GD0YfQsNC50L3Qvi4g0J3QsNC/0YDQuNC80LXRgDpcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkQlJBTkNIICQoZ2l0IHJldi1wYXJzZeKApilcbiIKKyJcbiIKKyLQutGK0LTQtdGC0L4g0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L3QsCDQv9GA0L7QvNC10L3Qu9C40LLQsNGC0LAg0L3QsCDRgdGA0LXQtNCw0YLQsCBCUkFOQ0gg0LUg0L/RgNCw0LfQvdCwLCDQv9GA0Lgg0LrQvtC10YLQviDRgdC1XG4iCisi0YHRitC30LTQsNCy0LAg0L/QvtC00L7QsdC10L0g0YPQutCw0LfQsNGC0LXQuy4g0J/RgNC10LPQu9C10LTQsNC50YLQtSDRgtC10LfQuCDRg9C60LDQt9Cw0YLQtdC70Lgg0Lgg0LPQuCDQuNC30YLRgNC40LnRgtC1LiDQnNC+0LbQtdGC0LUgIgorItC00LBcbiIKKyLRgdC/0YDQtdGC0LUg0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1INC60LDRgtC+INC40LfQv9GK0LvQvdC40YLQtSDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisi4oCeZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2XigJwiCisKKyM6IHN1Ym1vZHVsZS5jOjY0IHN1Ym1vZHVsZS5jOjk4Cittc2dpZCAiQ2Fubm90IGNoYW5nZSB1bm1lcmdlZCAuZ2l0bW9kdWxlcywgcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgZmlyc3QiCittc2dzdHIgIiIKKyLQndC10YHQu9C10YLQuNGC0LUg0YTQsNC50LvQvtCy0LUg4oCeLmdpdG1vZHVsZXPigJwg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQv9GA0L7QvNC10L3Rj9C90LguINCf0YrRgNCy0L4gIgorItC60L7RgNC40LPQuNGA0LDQudGC0LUg0LrQvtC90YTQu9C40LrRgtC40YLQtSIKKworIzogc3VibW9kdWxlLmM6Njggc3VibW9kdWxlLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAi0JLRitCyINGE0LDQudC70LAg4oCeLmdpdG1vZHVsZXPigJwg0LvQuNC/0YHQstCwINGA0LDQt9C00LXQuyDQt9CwINC00LjRgNC10LrRgtC+0YDQuNGPIOKAnnBhdGg9JXPigJwiCisKKyM6IHN1Ym1vZHVsZS5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgItCX0LDQv9C40YHRitGCIOKAniVz4oCcINCy0YrQsiDRhNCw0LnQu9CwIOKAni5naXRtb2R1bGVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7QvNC10L3QtdC9IgorCisjOiBzdWJtb2R1bGUuYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSAuZ2l0bW9kdWxlcyBlbnRyeSBmb3IgJXMiCittc2dzdHIgItCX0LDQv9C40YHRitGCIOKAniVz4oCcINCy0YrQsiDRhNCw0LnQu9CwIOKAni5naXRtb2R1bGVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IHN1Ym1vZHVsZS5jOjEyMAorbXNnaWQgInN0YWdpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L/RgNC+0LzQtdC90LXQvdC40Y8g0YTQsNC50Lsg4oCeLmdpdG1vZHVsZXPigJwg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IHN1Ym1vZHVsZS5jOjExMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBjb3JlLndvcmt0cmVlIGluICVzIgorbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmNvcmUud29ya3RyZWXigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC00LDQtNC1INCyIOKAniVz4oCcIgorCisjOiB0cmFpbGVyLmM6NDkxIHRyYWlsZXIuYzo0OTUgdHJhaWxlci5jOjQ5OSB0cmFpbGVyLmM6NTUzIHRyYWlsZXIuYzo1NTcKKyM6IHRyYWlsZXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDigJ4lc+KAnCDQt9CwINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeJXPigJwiCisKKyM6IHRyYWlsZXIuYzo1NDMgdHJhaWxlci5jOjU0OCBidWlsdGluL3JlbW90ZS5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICLRgdGC0L7QudC90L7RgdGC0YLQsCDigJ4lc+KAnCDRgdC1INC/0L7QstGC0LDRgNGPINCyINC90LDRgdGC0YDQvtC50LrQuNGC0LUiCisKKyM6IHRyYWlsZXIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAi0L/RgNCw0LfQvdCwINC30LDQstGK0YDRiNCy0LDRidCwINC70LXQutGB0LXQvNCwINCyINC10L/QuNC70L7Qs9CwIOKAniUuKnPigJwiCisKKyM6IHRyYWlsZXIuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICLQstGF0L7QtNC90LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiB0cmFpbGVyLmM6NzA0Cittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGH0LXRgtC1IgorCisjOiB1bnBhY2stdHJlZXMuYzoyMDMKK21zZ2lkICJDaGVja2luZyBvdXQgZmlsZXMiCittc2dzdHIgItCY0LfRgtC10LPQu9GP0L3QtSDQvdCwINGE0LDQudC70L7QstC1IgorCisjOiB1cmxtYXRjaC5jOjEyMAorbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGF0LXQvNCwINC30LAg0LDQtNGA0LXRgSDQuNC70Lgg0YHRg9GE0LjQutGB0YrRgiDigJ46Ly/igJwg0LvQuNC/0YHQstCwIgorCisjOiB1cmxtYXRjaC5jOjE0NCB1cmxtYXRjaC5jOjI5NyB1cmxtYXRjaC5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINC10LrRgNCw0L3QuNGA0LDRidCwINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9C90L7RgdGCIOKAniVYWOKAnCIKKworIzogdXJsbWF0Y2guYzoxNzIKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAi0L3QtSDQtSDRg9C60LDQt9Cw0L3QsCDQvNCw0YjQuNC90LAsINCwINGB0YXQtdC80LDRgtCwINC90LUg0LUg4oCeZmlsZTrigJwiCisKKyM6IHVybG1hdGNoLmM6MTg5Cittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAi0L/RgNC4INGB0YXQtdC80LAg4oCeZmlsZTrigJwg0L3QtSDQvNC+0LbQtdGC0LUg0LTQsCDRg9C60LDQt9Cy0LDRgtC1INC90L7QvNC10YAg0L3QsCDQv9C+0YDRgiIKKworIzogdXJsbWF0Y2guYzoxOTkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QuCDQt9C90LDRhtC4INCyINC40LzQtdGC0L4g0L3QsCDQvNCw0YjQuNC90LAiCisKKyM6IHVybG1hdGNoLmM6MjQ0IHVybG1hdGNoLmM6MjU1Cittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L3QvtC80LXRgCDQvdCwINC/0L7RgNGCIgorCisjOiB1cmxtYXRjaC5jOjMyMgorbXNnaWQgImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGH0LDRgdGCINC+0YIg0L/RitGC0Y8g4oCeLi7igJwiCisKKyM6IHdyYXBwZXIuYzo1MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIKK21zZ3N0ciAi0L3Rj9C80LAg0LTQvtGB0YLRitC/INC00L4g4oCeJXPigJw6ICVzIgorCisjOiB3cmFwcGVyLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAi0L3Rj9C80LAg0LTQvtGB0YLRitC/INC00L4g4oCeJXPigJwiCisKKyM6IHdyYXBwZXIuYzo1NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiCittc2dzdHIgItGC0LXQutGD0YnQuNGP0YIg0L/QvtGC0YDQtdCx0LjRgtC10Lsg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgiDQstGK0LIg0YTQsNC50LvQsCDigJ4vZXRjL3Bhc3N3ZOKAnDogJXMiCisKKyM6IHdyYXBwZXIuYzo1NTYKK21zZ2lkICJubyBzdWNoIHVzZXIiCittc2dzdHIgItGC0LDQutGK0LIg0L/QvtGC0YDQtdCx0LjRgtC10Lsg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogd3JhcHBlci5jOjU2NAorbXNnaWQgInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi0YLQtdC60YPRidCw0YLQsCDRgNCw0LHQvtGC0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQtSDQvdC10LTQvtGB0YLRitC/0L3QsCIKKworIzogd3JhcHBlci5jOjU3NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9INC30LAg0LfQsNC/0LjRgSIKKworIyBGSVhNRSAtIG11c3QgYmUgdGhlIHNhbWUgYXMgQ291bGQgbm90IHdyaXRlIHRvICclcycgYWJvdmUKKyM6IHdyYXBwZXIuYzo1ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHRvICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IHdyYXBwZXIuYzo1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNsb3NlICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQt9Cw0YLQstC+0YDQuCIKKworIzogd3Qtc3RhdHVzLmM6MTUwCittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICLQndC10YHQu9C10YLQuCDQv9GK0YLQuNGJ0LA6IgorCisjOiB3dC1zdGF0dXMuYzoxNzcgd3Qtc3RhdHVzLmM6MjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgcmVzZXQgJXMg0KTQkNCZ0JvigKbigJwsINC30LAg0LTQsCDQuNC30LLQsNC00LjRgtC1INCk0JDQmdCb0LAg0L7RgiDQuNC90LTQtdC60YHQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjE3OSB3dC1zdGF0dXMuYzoyMDYKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBybSAtLWNhY2hlZCAlcyDQpNCQ0JnQm+KApuKAnCwg0LfQsCDQtNCwINC40LfQstCw0LTQuNGC0LUg0KTQkNCZ0JvQsCDQvtGCINC40L3QtNC10LrRgdCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTgzCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYWRkINCk0JDQmdCb4oCm4oCcLCDQt9CwINC00LAg0YPQutCw0LbQtdGC0LUg0YDQsNC30YDQtdGI0LDQstCw0L3QtdGC0L4g0L3QsCDQutC+0L3RhNC70LjQutGC0LApIgorCisjOiB3dC1zdGF0dXMuYzoxODUgd3Qtc3RhdHVzLmM6MTg5Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgYWRkL3JtINCk0JDQmdCb4oCm4oCcLCDRgdC/0L7RgNC10LQg0YDQtdGI0LXQvdC40LXRgtC+LCDQutC+0LXRgtC+INC40LfQsdC40YDQsNGC0LUg0LfQsCAiCisi0LrQvtC90YTQu9C40LrRgtCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTg3Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBybSDQpNCQ0JnQm+KApuKAnCwg0LfQsCDQtNCwINGD0LrQsNC20LXRgtC1INGA0LDQt9GA0LXRiNCw0LLQsNC90LXRgtC+INC90LAg0LrQvtC90YTQu9C40LrRgtCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTk4IHd0LXN0YXR1cy5jOjg4MQorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90LgsINC60L7QuNGC0L4g0YnQtSDQsdGK0LTQsNGCINC/0L7QtNCw0LTQtdC90Lg6IgorCisjOiB3dC1zdGF0dXMuYzoyMTYgd3Qtc3RhdHVzLmM6ODkwCittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICLQn9GA0L7QvNC10L3QuCwg0LrQvtC40YLQviDQvdC1INGB0LAg0LIg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1OiIKKworIzogd3Qtc3RhdHVzLmM6MjIwCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBhZGQg0KTQkNCZ0JvigKbigJwsINC30LAg0LTQsCDQvtCx0L3QvtCy0LjRgtC1INGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUpIgorCisjOiB3dC1zdGF0dXMuYzoyMjIKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGFkZC9ybSDQpNCQ0JnQm+KApuKAnCwg0LfQsCDQtNCwINC+0LHQvdC+0LLQuNGC0LUg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSkiCisKKyM6IHd0LXN0YXR1cy5jOjIyMworbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGNoZWNrb3V0IC0tINCk0JDQmdCb4oCm4oCcLCDQt9CwINC00LAg0L7RgtGF0LLRitGA0LvQuNGC0LUg0L/RgNC+0LzQtdC90LjRgtC1INCyICIKKyLRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQvikiCisKKyM6IHd0LXN0YXR1cy5jOjIyNQorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKNC/0L7QtNCw0LnRgtC1INC40LvQuCDQvtGC0YXQstGK0YDQu9C10YLQtSDQvdC10YHQu9C10LTQtdC90L7RgtC+INC40LvQuCDQv9GA0L7QvNC10L3QtdC90L7RgtC+INGB0YrQtNGK0YDQttCw0L3QuNC1INCyICIKKyLQv9C+0LTQvNC+0LTRg9C70LjRgtC1KSIKKworIzogd3Qtc3RhdHVzLmM6MjM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgJXMg0KTQkNCZ0JvigKbigJwsINC30LAg0LTQsCDQvtC/0YDQtdC00LXQu9C40YLQtSDQutCw0LrQstC+INCy0LrQu9GO0YfQstCw0YLQtSDQsiDQv9C+0LTQsNCy0LDQvdC10YLQvikiCisKKyM6IHd0LXN0YXR1cy5jOjI1MgorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgItC40LfRgtGA0LjRgtC4INCyINC00LLQsNGC0LAg0YHQu9GD0YfQsNGPOiIKKworIzogd3Qtc3RhdHVzLmM6MjU0Cittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICLQtNC+0LHQsNCy0LXQvdC4INC+0YIg0LLQsNGBOiIKKworIzogd3Qtc3RhdHVzLmM6MjU2Cittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAi0LjQt9GC0YDQuNGC0Lgg0L7RgiDRgtGP0YU6IgorCisjOiB3dC1zdGF0dXMuYzoyNTgKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAi0LTQvtCx0LDQstC10L3QuCDQvtGCINGC0Y/RhToiCisKKyM6IHd0LXN0YXR1cy5jOjI2MAorbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICLQuNC30YLRgNC40YLQuCDQvtGCINCy0LDRgToiCisKKyM6IHd0LXN0YXR1cy5jOjI2MgorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICLQtNC+0LHQsNCy0LXQvdC4INC4INCyINC00LLQsNGC0LAg0YHQu9GD0YfQsNGPOiIKKworIzogd3Qtc3RhdHVzLmM6MjY0Cittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgItC/0YDQvtC80LXQvdC10L3QuCDQuCDQsiDQtNCy0LDRgtCwINGB0LvRg9GH0LDRjzoiCisKKyM6IHd0LXN0YXR1cy5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJidWc6IHVuaGFuZGxlZCB1bm1lcmdlZCBzdGF0dXMgJXgiCittc2dzdHIgItCz0YDQtdGI0LrQsDog0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINC/0YDQvtC80Y/QvdCw0YLQsCDigJ4leOKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdGA0LDQsdC+0YLQtdC90L4iCisKKyM6IHd0LXN0YXR1cy5jOjI3NAorbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAi0L3QvtCyINGE0LDQudC7OiIKKworIzogd3Qtc3RhdHVzLmM6Mjc2Cittc2dpZCAiY29waWVkOiIKK21zZ3N0ciAi0LrQvtC/0LjRgNCw0L06IgorCisjOiB3dC1zdGF0dXMuYzoyNzgKK21zZ2lkICJkZWxldGVkOiIKK21zZ3N0ciAi0LjQt9GC0YDQuNGCOiIKKworIzogd3Qtc3RhdHVzLmM6MjgwCittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICLQv9GA0L7QvNC10L3QtdC9OiIKKworIzogd3Qtc3RhdHVzLmM6MjgyCittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgItC/0YDQtdC40LzQtdC90YPQstCw0L06IgorCisjOiB3dC1zdGF0dXMuYzoyODQKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAi0YHQvNGP0L3QsCDQvdCwINCy0LjQtNCwOiIKKworIzogd3Qtc3RhdHVzLmM6Mjg2Cittc2dpZCAidW5rbm93bjoiCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDQv9GA0L7QvNGP0L3QsDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4OAorbXNnaWQgInVubWVyZ2VkOiIKK21zZ3N0ciAi0L3QtdGB0LvRj9GCOiIKKworIzogd3Qtc3RhdHVzLmM6MzcwCittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAi0L3QvtCy0Lgg0L/QvtC00LDQstCw0L3QuNGPLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM3MgorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAi0L/RgNC+0LzQtdC90LXQvdC+INGB0YrQtNGK0YDQttCw0L3QuNC1LCAiCisKKyM6IHd0LXN0YXR1cy5jOjM3NAorbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgItC90LXRgdC70LXQtNC10L3QviDRgdGK0LTRitGA0LbQsNC90LjQtSwgIgorCisjOiB3dC1zdGF0dXMuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgItCz0YDQtdGI0LrQsDog0YHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINC/0YDQvtC80Y/QvdCw0YLQsCDigJ4lY+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdGA0LDQsdC+0YLQtdC90L4iCisKKyM6IHd0LXN0YXR1cy5jOjc1NQorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70LjRgtC1INGB0LAg0L/RgNC+0LzQtdC90LXQvdC4LCDQvdC+INC90LUg0YHQsCDQvtCx0L3QvtCy0LXQvdC4OiIKKworIzogd3Qtc3RhdHVzLmM6NzU3Cittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90Lgg0LIg0L/QvtC00LzQvtC00YPQu9C40YLQtSDQt9CwINC/0L7QtNCw0LLQsNC90LU6IgorCisjOiB3dC1zdGF0dXMuYzo4MzgKK21zZ2lkICIiCisiRG8gbm90IHRvdWNoIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgd2lsbCBiZSByZW1vdmVkLiIKK21zZ3N0ciAiIgorItCd0LUg0L/RgNC+0LzQtdC90Y/QudGC0LUg0LPQvtGA0L3QuNGPINGA0LXQtC5cbiIKKyLQktGB0LjRh9C60L4g0L7RgtC00L7Qu9GDINGJ0LUg0LHRitC00LUg0LjQt9GC0YDQuNGC0L4uIgorCisjOiB3dC1zdGF0dXMuYzo5NDkKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgItCd0Y/QutC+0Lgg0L/RitGC0LjRidCwINC90LUg0YHQsCDRgdC70LXRgtC4LiIKKworIzogd3Qtc3RhdHVzLmM6OTUyCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICAo0LrQvtGA0LjQs9C40YDQsNC50YLQtSDQutC+0L3RhNC70LjQutGC0LjRgtC1INC4INC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgY29tbWl04oCcKSIKKworIzogd3Qtc3RhdHVzLmM6OTU1Cittc2dpZCAiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIKK21zZ3N0ciAi0JLRgdC40YfQutC4INC60L7QvdGE0LvQuNC60YLQuCDRgdCwINGA0LXRiNC10L3QuCwg0L3QviDQv9GA0L7QtNGK0LvQttCw0LLQsNGC0LUg0YHQu9C40LLQsNC90LXRgtC+LiIKKworIzogd3Qtc3RhdHVzLmM6OTU4Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIKK21zZ3N0ciAiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgY29tbWl04oCcLCDQt9CwINC00LAg0LfQsNCy0YrRgNGI0LjRgtC1INGB0LvQuNCy0LDQvdC10YLQvikiCisKKyM6IHd0LXN0YXR1cy5jOjk2OAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0L/RgNC40LvQsNCz0LDRgtC1INC/0L7RgNC10LTQuNGG0LAg0L7RgiDQutGA0YrQv9C60Lgg0YfRgNC10Lcg4oCeZ2l0IGFt4oCcLiIKKworIzogd3Qtc3RhdHVzLmM6OTcxCittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICLQotC10LrRg9GJ0LDRgtCwINC60YDRitC/0LrQsCDQtSDQv9GA0LDQt9C90LAuIgorCisjOiB3dC1zdGF0dXMuYzo5NzUKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjQutC+0YDQuNCz0LjRgNCw0LnRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUg0Lgg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCBhbSAtLWNvbnRpbnVl4oCcKSIKKworIzogd3Qtc3RhdHVzLmM6OTc3Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGFtIC0tc2tpcOKAnCwg0LfQsCDQtNCwINC/0YDQvtC/0YPRgdC90LXRgtC1INGC0LDQt9C4INC60YDRitC/0LrQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjk3OQorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGFtIC0tYWJvcnTigJwsINC30LAg0LTQsCDQstGK0LfRgdGC0LDQvdC+0LLQuNGC0LUg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC40Y8g0LrQu9C+0L0pIgorCisjOiB3dC1zdGF0dXMuYzoxMDM5IHd0LXN0YXR1cy5jOjEwNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINC/0YDQtdCx0LDQt9C40YDQsNGC0LUg0LrQu9C+0L3QsCDigJ4lc+KAnCDQstGK0YDRhdGDIOKAniVz4oCcLiIKKworIzogd3Qtc3RhdHVzLmM6MTA0NCB3dC1zdGF0dXMuYzoxMDYxCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDQv9GA0LXQsdCw0LfQuNGA0LDRgtC1LiIKKworIzogd3Qtc3RhdHVzLmM6MTA0NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjQutC+0YDQuNCz0LjRgNCw0LnRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUg0Lgg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgcmViYXNlIC0tY29udGludWXigJwpIgorCisjOiB3dC1zdGF0dXMuYzoxMDQ5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCByZWJhc2UgLS1za2lw4oCcLCDQt9CwINC00LAg0L/RgNC+0L/Rg9GB0L3QtdGC0LUg0YLQsNC30Lgg0LrRgNGK0L/QutCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTA1MQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJlYmFzZSAtLWFib3J04oCcLCDQt9CwINC00LAg0LLRitC30YHRgtCw0L3QvtCy0LjRgtC1INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGPINC60LvQvtC9KSIKKworIzogd3Qtc3RhdHVzLmM6MTA2NAorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0LLRgdC40YfQutC4INC60L7QvdGE0LvQuNC60YLQuCDRgdCwINC60L7RgNC40LPQuNGA0LDQvdC4OiDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJlYmFzZSAtLWNvbnRpbnVl4oCcKSIKKworIzogd3Qtc3RhdHVzLmM6MTA2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDRgNCw0LfQtNC10LvRj9GC0LUg0L/QvtC00LDQstCw0L3QtSDQtNC+0LrQsNGC0L4g0L/RgNC10LHQsNC30LjRgNCw0YLQtSDQutC70L7QvdCwIOKAniVz4oCcINCy0YrRgNGF0YMg4oCeJXPigJwuIgorCisjOiB3dC1zdGF0dXMuYzoxMDczCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGA0LDQt9C00LXQu9GP0YLQtSDQv9C+0LTQsNCy0LDQvdC1INC00L7QutCw0YLQviDQv9GA0LXQsdCw0LfQuNGA0LDRgtC1LiIKKworIzogd3Qtc3RhdHVzLmM6MTA3NgorbXNnaWQgIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAo0KHQu9C10LQg0LrQsNGC0L4g0YDQsNCx0L7RgtC90L7RgtC+INCy0Lgg0LTRitGA0LLQviDRgdGC0LDQvdC1INGH0LjRgdGC0L4sINC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHJlYmFzZSAtLSIKKyJjb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorItCSINC80L7QvNC10L3RgtCwINGA0LXQtNCw0LrRgtC40YDQsNGC0LUg0L/QvtC00LDQstCw0L3QtSDQtNC+0LrQsNGC0L4g0L/RgNC10LHQsNC30LjRgNCw0YLQtSDQutC70L7QvdCwIOKAniVz4oCcINCy0YrRgNGF0YMg4oCeJXPigJwuIgorCisjOiB3dC1zdGF0dXMuYzoxMDg1Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDRgNC10LTQsNC60YLQuNGA0LDRgtC1INC/0L7QtNCw0LLQsNC90LUg0LTQvtC60LDRgtC+INC/0YDQtdCx0LDQt9C40YDQsNGC0LUuIgorCisjOiB3dC1zdGF0dXMuYzoxMDg4Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGNvbW1pdCAtLWFtZW5k4oCcLCDQt9CwINC00LAg0YDQtdC00LDQutGC0LjRgNCw0YLQtSDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUpIgorCisjOiB3dC1zdGF0dXMuYzoxMDkwCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgcmViYXNlIC0tY29udGludWXigJwsINGB0LvQtdC0INC60LDRgtC+INC30LDQstGK0YDRiNC40YLQtSDQv9GA0L7QvNC10L3QuNGC0LUg0YHQuCkiCisKKyM6IHd0LXN0YXR1cy5jOjExMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0L7RgtCx0LjRgNCw0YLQtSDQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnC4iCisKKyM6IHd0LXN0YXR1cy5jOjExMDUKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0LrQvtGA0LjQs9C40YDQsNC50YLQtSDQutC+0L3RhNC70LjQutGC0LjRgtC1INC4INC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjExMDgKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKNCy0YHQuNGH0LrQuCDQutC+0L3RhNC70LjQutGC0Lgg0YHQsCDQutC+0YDQuNCz0LjRgNCw0L3QuCwg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCBjaGVycnktcGljayAtLWNvbnRpbnVl4oCcKSIKKworIzogd3Qtc3RhdHVzLmM6MTExMAorbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgY2hlcnJ5LXBpY2sgLS1hYm9ydOKAnCwg0LfQsCDQtNCwINC+0YLQvNC10L3QuNGC0LUg0LLRgdC40YfQutC4INC00LXQudGB0YLQstC40Y8g0YEgIgorItC+0YLQsdC40YDQsNC90LUpIgorCisjOiB3dC1zdGF0dXMuYzoxMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJldmVydGluZyBjb21taXQgJXMuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDQvtGC0LzQtdC90Y/RgtC1INC/0L7QtNCw0LLQsNC90LUg4oCeJXPigJwuIgorCisjOiB3dC1zdGF0dXMuYzoxMTI0Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjQutC+0YDQuNCz0LjRgNCw0LnRgtC1INC60L7QvdGE0LvQuNC60YLQuNGC0LUg0Lgg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCByZXZlcnQgLS1jb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjExMjcKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKNCy0YHQuNGH0LrQuCDQutC+0L3RhNC70LjQutGC0Lgg0YHQsCDQutC+0YDQuNCz0LjRgNCw0L3QuCwg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCByZXZlcnQgLS1jb250aW51ZeKAnCkiCisKKyM6IHd0LXN0YXR1cy5jOjExMjkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiICAo0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5naXQgcmV2ZXJ0IC0tYWJvcnTigJwsINC30LAg0LTQsCDQv9GA0LXRg9GB0YLQsNC90L7QstC40YLQtSDQvtGC0LzRj9C90LDRgtCwINC90LAgIgorItC/0L7QtNCw0LLQsNC90LUpIgorCisjOiB3dC1zdGF0dXMuYzoxMTQwCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0YLRitGA0YHQuNGC0LUg0LTQstC+0LjRh9C90L4sINC60LDRgtC+INGB0YLQtSDRgdGC0LDRgNGC0LjRgNCw0LvQuCDQvtGCINC60LvQvtC9IOKAniVz4oCcLiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGC0YrRgNGB0LjRgtC1INC00LLQvtC40YfQvdC+LiIKKworIzogd3Qtc3RhdHVzLmM6MTE0NworbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGJpc2VjdCByZXNldOKAnCwg0LfQsCDQtNCwINGB0LUg0LLRitGA0L3QtdGC0LUg0LrRitC8INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4gIgorItGB0YrRgdGC0L7Rj9C90LjQtSDQuCDQutC70L7QvSkiCisKKyM6IHd0LXN0YXR1cy5jOjEzMjQKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICLQndCwINC60LvQvtC9ICIKKworIzogd3Qtc3RhdHVzLmM6MTMzMQorbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgItC40LfQstGK0YDRiNCy0LDRgtC1INC/0YDQtdCx0LDQt9C40YDQsNC90LUg0LLRitGA0YXRgyAiCisKKyM6IHd0LXN0YXR1cy5jOjEzMzYKK21zZ2lkICJIRUFEIGRldGFjaGVkIGF0ICIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvdC1INC1INGB0LLRitGA0LfQsNC9INC4INC1INC/0YDQuCAiCisKKyM6IHd0LXN0YXR1cy5jOjEzMzgKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC90LUg0LUg0YHQstGK0YDQt9Cw0L0g0Lgg0LUg0L7RgtC00LXQu9C1zIDQvSDQvtGCICIKKworIzogd3Qtc3RhdHVzLmM6MTM0MQorbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgItCY0LfQstGK0L0g0LLRgdC40YfQutC4INC60LvQvtC90LguIgorCisjOiB3dC1zdGF0dXMuYzoxMzU4Cittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgItCf0YrRgNCy0L7QvdCw0YfQsNC70L3QviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiB3dC1zdGF0dXMuYzoxMzcyCittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLQndC10YHQu9C10LTQtdC90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IHd0LXN0YXR1cy5jOjEzNzQKK21zZ2lkICJJZ25vcmVkIGZpbGVzIgorbXNnc3RyICLQmNCz0L3QvtGA0LjRgNCw0L3QuCDRhNCw0LnQu9C+0LLQtSIKKworIzogd3Qtc3RhdHVzLmM6MTM3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisi0JHRj9GF0LAg0L3QtdC+0LHRhdC+0LTQuNC80LggJS4yZiDRgdC10LrRg9C90LTQuCDQt9CwINC40LfQsdGA0L7Rj9Cy0LDQvdC10YLQviDQvdCwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUuXG4iCisi0JTQvtCx0LDQstGP0L3QtdGC0L4g0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tdW5v4oCcINC60YrQvCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IHN0YXR1c+KAnCwg0YnQtSDRg9GB0LrQvtGA0LhcbiIKKyLQuNC30L/RitC70L3QtdC90LjQtdGC0L4sINC90L4g0L3QtSDRgtGA0Y/QsdCy0LAg0LTQsCDQt9Cw0LHRgNCw0LLRj9GC0LUg0YDRitGH0L3QviDQtNCwINC00L7QsdCw0LLRj9GC0LUg0L3QvtCy0LjRgtC1INGE0LDQudC70L7QstC1LlxuIgorItCX0LAg0L/QvtCy0LXRh9C1INC/0L7QtNGA0L7QsdC90L7RgdGC0Lgg0L/QvtCz0LvQtdC00L3QtdGC0LUg4oCeZ2l0IHN0YXR1cyBoZWxw4oCcLiIKKworIzogd3Qtc3RhdHVzLmM6MTM4NAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICLQndC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1INC90LUg0YHQsCDQuNC30LLQtdC00LXQvdC4JXMiCisKKyM6IHd0LXN0YXR1cy5jOjEzODYKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLXXigJwsINC30LAg0LTQsCDQuNC30LLQtdC00LXRgtC1INC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUpIgorCisjOiB3dC1zdGF0dXMuYzoxMzkyCittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAi0J3Rj9C80LAg0L/RgNC+0LzQtdC90LgiCisKKyM6IHd0LXN0YXR1cy5jOjEzOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyLQutGK0Lwg0LjQvdC00LXQutGB0LAg0LfQsCDQv9C+0LTQsNCy0LDQvdC1INC90LUg0YHQsCDQtNC+0LHQsNCy0LXQvdC4INC/0YDQvtC80LXQvdC4ICjQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBhZGTigJwg0Lgv0LjQu9C4ICIKKyLigJ5naXQgY29tbWl0IC1h4oCcKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNDAwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgItC60YrQvCDQuNC90LTQtdC60YHQsCDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L3QtSDRgdCwINC00L7QsdCw0LLQtdC90Lgg0L/RgNC+0LzQtdC90LhcbiIKKworIzogd3Qtc3RhdHVzLmM6MTQwMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gIgorInRyYWNrKVxuIgorbXNnc3RyICIiCisi0LrRitC8INC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INGB0LAg0LTQvtCx0LDQstC10L3QuCDQv9GA0L7QvNC10L3QuCwg0L3QviDQuNC80LAg0L3QvtCy0Lgg0YTQsNC50LvQvtCy0LUgIgorIijQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBhZGTigJwsINC30LAg0LTQsCDQt9Cw0L/QvtGH0L3QtSDRgtGP0YXQvdC+0YLQviDRgdC70LXQtNC10L3QtSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTQwNgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAi0LrRitC8INC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INGB0LAg0LTQvtCx0LDQstC10L3QuCDQv9GA0L7QvNC10L3QuCwg0L3QviDQuNC80LAg0L3QvtCy0Lgg0YTQsNC50LvQvtCy0LVcbiIKKworIzogd3Qtc3RhdHVzLmM6MTQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAiIgorItC70LjQv9GB0LLQsNGCINC60LDQutCy0LjRgtC+INC4INC00LAg0LUg0L/RgNC+0LzQtdC90LggKNGB0YrQt9C00LDQudGC0LUg0LjQu9C4INC60L7Qv9C40YDQsNC50YLQtSDRhNCw0LnQu9C+0LLQtSDQuCDQuNC30L/QvtC70LfQstCw0LnRgtC1ICIKKyLigJ5naXQgYWRk4oCcLCDQt9CwINC00LAg0LfQsNC/0L7Rh9C90LUg0YLRj9GF0L3QvtGC0L4g0YHQu9C10LTQtdC90LUpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MTIgd3Qtc3RhdHVzLmM6MTQxNworIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICLQu9C40L/RgdCy0LDRgiDQutCw0LrQstC40YLQviDQuCDQtNCwINC1INC/0YDQvtC80LXQvdC4XG4iCisKKyM6IHd0LXN0YXR1cy5jOjE0MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAiIgorItC70LjQv9GB0LLQsNGCINC60LDQutCy0LjRgtC+INC4INC00LAg0LUg0L/RgNC+0LzQtdC90LggKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLXXigJwsINC30LAg0LTQsCDRgdC1INC40LfQstC10LTQsNGCINC4ICIKKyLQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1KVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIGRpcmVjdG9yeSBjbGVhblxuIgorbXNnc3RyICLQu9C40L/RgdCy0LDRgiDQutCw0LrQstC40YLQviDQuCDQtNCwINC1INC/0YDQvtC80LXQvdC4LCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQtSDRh9C40YHRgtC+XG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MjgKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICJIRUFEICjQuNC30LLRitC9INC60LvQvtC9KSIKKworIzogd3Qtc3RhdHVzLmM6MTUzNAorbXNnaWQgIkluaXRpYWwgY29tbWl0IG9uICIKK21zZ3N0ciAi0J/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INC/0L7QtNCw0LLQsNC90LUg0L3QsCDQutC70L7QvSIKKworIzogd3Qtc3RhdHVzLmM6MTU2MQorbXNnaWQgImdvbmUiCittc2dzdHIgItC40LfRgtGA0LjRgiIKKworIzogd3Qtc3RhdHVzLmM6MTU2MyB3dC1zdGF0dXMuYzoxNTcxCittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAi0L3QsNC30LDQtCDRgSAiCisKKyM6IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguYzo1NSBidWlsdGluL2Nsb25lLmM6MzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC40LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2FkZC5jOjIyCittc2dpZCAiZ2l0IGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBhZGQgW9Ce0J/QptCY0K/igKZdIFstLV0g0J/QqtCi4oCmIgorCisjOiBidWlsdGluL2FkZC5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgItC90LXQvtGH0LDQutCy0LDQvSDQuNC30YXQvtC00LXQvSDQutC+0LQg0L/RgNC4INCz0LXQvdC10YDQuNGA0LDQvdC1INC90LAg0YDQsNC30LvQuNC60LA6ICVjIgorCisjOiBidWlsdGluL2FkZC5jOjcwIGJ1aWx0aW4vY29tbWl0LmM6Mjc3Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxMzQKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90LgsINC60L7QuNGC0L4g0Lgg0YHQu9C10LQg0L7QsdC90L7QstGP0LLQsNC90LXRgtC+INC90LAg0LjQvdC00LXQutGB0LAg0L3QtSDRgdCwINC00L7QsdCw0LLQtdC90Lgg0LrRitC8INC90LXQs9C+OiIKKworIzogYnVpbHRpbi9hZGQuYzoxOTQgYnVpbHRpbi9yZXYtcGFyc2UuYzo3OTYKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgItCY0L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICLQpNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9INC30LAg0LfQsNC/0LjRgS4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICLQmtGA0YrQv9C60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvdCwIgorCisjOiBidWlsdGluL2FkZC5jOjIxMgorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINC60YDRitC/0LrQsCIKKworIzogYnVpbHRpbi9hZGQuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70YPRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGPINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDRhNCw0LnQu9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2FkZC5jOjIxNworbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAi0J/RgNCw0LfQvdCwINC60YDRitC/0LrQsCwg0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LTQtdC50YHRgtCy0LjQtdGC0L4uIgorCisjOiBidWlsdGluL2FkZC5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAi0JrRgNGK0L/QutCw0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC40LvQvtC20LXQvdCwIgorCisjOiBidWlsdGluL2FkZC5jOjIzMgorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiIgorItCh0LvQtdC00L3QuNGC0LUg0L/RitGC0LjRidCwINGJ0LUg0LHRitC00LDRgiDQuNCz0L3QvtGA0LjRgNCw0L3QuCDRgdC/0L7RgNC10LQg0L3Rj9C60L7QuSDQvtGCINGE0LDQudC70L7QstC10YLQtSDigJ4uZ2l0aWdub3Jl4oCcOlxuIgorCisjOiBidWlsdGluL2FkZC5jOjI0OSBidWlsdGluL2NsZWFuLmM6ODc0IGJ1aWx0aW4vZmV0Y2guYzoxMDcgYnVpbHRpbi9tdi5jOjExMAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NSBidWlsdGluL3B1c2guYzo1MDggYnVpbHRpbi9yZW1vdGUuYzoxMzY5CisjOiBidWlsdGluL3JtLmM6MjY4Cittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAi0L/RgNC+0LHQvdC+INC40LfQv9GK0LvQvWXQvdC40LUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUwIGJ1aWx0aW4vYXBwbHkuYzo0NTgwIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyMiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo2MyBidWlsdGluL2ZzY2suYzo2MTYKKyM6IGJ1aWx0aW4vbG9nLmM6MTYxNyBidWlsdGluL212LmM6MTA5IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE0Cittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAi0L/QvtCy0LXRh9C1INC/0L7QtNGA0L7QsdC90L7RgdGC0LgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUyCittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAi0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+INC+0YLQsdC40YDQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuCIKKworIzogYnVpbHRpbi9hZGQuYzoyNTMgYnVpbHRpbi9jaGVja291dC5jOjEyMjEgYnVpbHRpbi9yZXNldC5jOjI4NgorbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC10L0g0LjQt9Cx0L7RgCDQvdCwINC/0LDRgNGH0LXRgtCwINC60L7QtCIKKworIzogYnVpbHRpbi9hZGQuYzoyNTQKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgItGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRgtC10LrRg9GJ0LDRgtCwINGA0LDQt9C70LjQutCwINC4INC/0YDQuNC70LDQs9Cw0L3QtSIKKworIzogYnVpbHRpbi9hZGQuYzoyNTUKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0Lgg0L3QsCDQuNC90LDRh9C1INC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9hZGQuYzoyNTYKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU3Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgcGF0aCB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICLQvtGC0LHQtdC70Y/Qt9Cy0LDQvdC1INGB0LDQvNC+INC90LAg0YTQsNC60YLQsCwg0YfQtSDQv9GK0YLRj9GCINGJ0LUg0LHRitC00LUg0LTQvtCx0LDQstC10L0g0L/Qvi3QutGK0YHQvdC+IgorCisjOiBidWlsdGluL2FkZC5jOjI1OAorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQv9GA0L7QvNC10L3QuCDQsiDRgdC70LXQtNC10L3QuNGC0LUg0Lgg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9hZGQuYzoyNjEKK21zZ2lkICJpZ25vcmUgcGF0aHMgcmVtb3ZlZCBpbiB0aGUgd29ya2luZyB0cmVlIChzYW1lIGFzIC0tbm8tYWxsKSIKK21zZ3N0ciAiIgorItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0L/RitGC0LjRidCw0YLQsCwg0LrQvtC40YLQviDRgdCwINC40LfRgtGA0LjRgtC4INC+0YIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4gKNGB0YrRidC+0YLQviDQutCw0YLQviDigJ4tLSIKKyJuby1hbGzigJwpIgorCisjOiBidWlsdGluL2FkZC5jOjI2MworbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAi0LHQtdC3INC00L7QsdCw0LLRj9C90LUg0L3QsCDQvdC+0LLQuCDRhNCw0LnQu9C+0LLQtSwg0YHQsNC80L4g0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9hZGQuYzoyNjQKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICIiCisi0L/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUsINC60L7QuNGC0L4g0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQtNC+0LHQsNCy0LXQvdC4INC/0L7RgNCw0LTQuCDQs9GA0LXRiNC60LgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY1Cittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICIiCisi0L/RgNC+0LLQtdGA0LrQsCwg0YfQtSDQv9GA0Lgg0L/RgNC+0LHQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INCy0YHQuNGH0LrQuCDRhNCw0LnQu9C+0LLQtSwg0LTQvtGA0Lgg0Lgg0LjQt9GC0YDQuNGC0LjRgtC1LCDRgdC1ICIKKyLQuNCz0L3QvtGA0LjRgNCw0YIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgItCY0LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLWbigJwsINC30LAg0LTQsCDQs9C4INC00L7QsdCw0LLQuNGC0LUg0L3QsNC40YHRgtC40L3QsC5cbiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTQKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LTQvtCx0LDQstGP0L3QtSDQvdCwINGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2FkZC5jOjMzMAorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tQeKAnCDQuCDigJ4tdeKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9hZGQuYzozMzcKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tLWlnbm9yZS1taXNzaW5n4oCcINC1INGB0YrQstC80LXRgdGC0LjQvNCwINGB0LDQvNC+INGBIOKAni0tZHJ5LXJ1buKAnCIKKworIzogYnVpbHRpbi9hZGQuYzozNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgItCd0LjRidC+INC90LUg0LUg0LfQsNC00LDQtNC10L3QviDQuCDQvdC40YnQviDQvdC1INC1INC00L7QsdCw0LLQtdC90L4uXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICLQktC10YDQvtGP0YLQvdC+INC40YHQutCw0YXRgtC1INC00LAg0LjQt9C/0L7Qu9C30LLQsNGC0LUg4oCeZ2l0IGFkZCAu4oCcP1xuIgorCisjOiBidWlsdGluL2FkZC5jOjM2NCBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MiBidWlsdGluL2NsZWFuLmM6OTE4CisjOiBidWlsdGluL2NvbW1pdC5jOjMzNSBidWlsdGluL212LmM6MTMwIGJ1aWx0aW4vcmVzZXQuYzoyMzUgYnVpbHRpbi9ybS5jOjI5OAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAi0YTQsNC50LvRitGCINGBINC40L3QtNC10LrRgdCwINC1INC/0L7QstGA0LXQtNC10L0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ3IGJ1aWx0aW4vYXBwbHkuYzo0Njc4IGJ1aWx0aW4vbXYuYzoyNzkgYnVpbHRpbi9ybS5jOjQzMAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi0J3QvtCy0LjRj9GCINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo1OQorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBb0J7Qn9Cm0JjQr+KApl0gW9Ca0KDQqtCf0JrQkOKApl0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgItC90LXQv9C+0LfQvdCw0YLQsCDQvtC/0YbQuNGPINC30LAg0LfQvdCw0YbQuNGC0LUg0LfQsCDQuNC90YLQtdGA0LLQsNC70Lgg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0L7Qv9GG0LjRjyDQt9CwINC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0LfQvdCw0YbQuNGC0LUg0LfQsCDQuNC90YLQtdGA0LLQsNC70Lgg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAi0KDQtdCz0YPQu9GP0YDQvdC40Y/RgiDQuNC30YDQsNC3INC30LAg0LLRgNC10LzQtdGC0L4g4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQt9CwINCx0YrQtNC1INC60L7QvNC/0LjQu9C40YDQsNC9IgorCisjOiBidWlsdGluL2FwcGx5LmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAi0KDQtdCz0YPQu9GP0YDQvdC40Y/RgiDQuNC30YDQsNC3INCy0YrRgNC90LAgJWQg0L/RgNC4INC/0L7QtNCw0LTQtdC90LAg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QvtGB0YIg4oCeJXPigJwg0L3QsCDQstGF0L7QtNCwIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgItCb0LjQv9GB0LLQsCDQuNC80LUg0L3QsCDRhNCw0LnQuyDQvdCwINGA0LXQtCAlZCDQvtGCINC60YDRitC/0LrQsNGC0LAiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiDQu9C+0Ygg0LjQt9GF0L7QtCDQvtGCINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtZGlmZuKAnCDigJQg0L3QsCDRgNC10LQgJTIkZCDRgdC1INC+0YfQsNC60LLQsNGI0LUg4oCeL2Rldi8iCisibnVsbOKAnCwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvSDigJ4lMSRz4oCcIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiDQu9C+0Ygg0LjQt9GF0L7QtCDQvtGCINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQtZGlmZuKAnCDigJQg0L3QsCDRgNC10LQgJWQg0LHQtSDQv9C+0LvRg9GH0LXQvdC+ICIKKyLQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQvdC+0LIg0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6INC70L7RiCDQuNC30YXQvtC0INC+0YIg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1kaWZm4oCcIOKAlCDQvdCwINGA0LXQtCAlZCDQsdC1INC/0L7Qu9GD0YfQtdC90L4gIgorItC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINGB0YLQsNGAINGE0LDQudC7IgorCisjOiBidWlsdGluL2FwcGx5LmM6OTU2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6INC70L7RiCDQuNC30YXQvtC0INC+0YIg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1kaWZm4oCcIOKAlCDQvdCwINGA0LXQtCAlZCDRgdC1INC+0YfQsNC60LLQsNGI0LUg4oCeL2Rldi8iCisibnVsbOKAnCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICLQv9GA0Lgg0L/QvtCy0YLQvtGA0L3QvtGC0L4g0L/RgNC10LHRgNC+0Y/QstCw0L3QtSDQsdC1INC/0L7Qu9GD0YfQtdC9INC90LXQvtGH0LDQutCy0LDQvSDRgNC10LQ6IOKAniUuKnPigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDc2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgItGH0LDRgdGCINC+0YIg0LrRgNGK0L/QutCwINCx0LXQtyDQt9Cw0LPQu9Cw0LLQvdCwINGH0LDRgdGCINC90LAg0YDQtdC0ICVkOiAlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQ5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisi0KHQu9C10LQg0YHRitC60YDQsNGJ0LDQstCw0L3QtdGC0L4g0L3QsCAlZC3RgtCwINGH0LDRgdGCINC+0YIg0LrQvtC80L/QvtC90LXQvdGC0LjRgtC1INC90LAg0L/RitGC0Y8sINCyINC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCICIKKyLQvdCwIOKAnmdpdCBkaWZm4oCcINC70LjQv9GB0LLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC40LzQtSDQvdCwINGE0LDQudC7ICjRgNC10LQ6ICVkKSIKK21zZ3N0clsxXSAiIgorItCh0LvQtdC0INGB0YrQutGA0LDRidCw0LLQsNC90LXRgtC+INC90LAg0L/RitGA0LLQuNGC0LUgJWQg0YfQsNGB0YLQuCDQvtGCINC60L7QvNC/0L7QvdC10L3RgtC40YLQtSDQvdCwINC/0YrRgtGPLCDQsiDQt9Cw0LPQu9Cw0LLQvdCw0YLQsCAiCisi0YfQsNGB0YIg0L3QsCDigJ5naXQgZGlmZuKAnCDQu9C40L/RgdCy0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQuNC80LUg0L3QsCDRhNCw0LnQuyAo0YDQtdC0OiAlZCkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjU5Cittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgItC90L7QstC40Y/RgiDRhNCw0LnQuyDQt9Cw0LLQuNGB0Lgg0L7RgiDRgdGC0LDRgNC+0YLQviDRgdGK0LTRitGA0LbQsNC90LjQtSDQvdCwINGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjYxCittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAi0LjQt9GC0YDQuNGC0LjRj9GCINGE0LDQudC7INC90LUg0LUg0L/RgNCw0LfQtdC9IgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY4NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQsiDQutGA0YrQv9C60LDRgtCwINC90LAg0YDQtdC0ICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyMworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi0L3QvtCy0LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC30LDQstC40YHQuCDQvtGCINGB0YLQsNGA0L7RgtC+INGB0YrQtNGK0YDQttCw0L3QuNC1INC90LAg0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAi0LjQt9GC0YDQuNGC0LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC90LUg0LUg0L/RgNCw0LfQtdC9IgorCisjIEZJWE1FIC0gZG91YmxlICoqPz8KKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIuKXj+KXjyDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDRhNCw0LnQu9GK0YIg4oCeJXPigJwg0LLQtdGH0LUg0LUg0L/RgNCw0LfQtdC9LCDQvdC+INC90LUg0LUg0LjQt9GC0YDQuNGCIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0LIg0LTQstC+0LjRh9C90LDRgtCwINC60YDRitC/0LrQsCDQvdCwINGA0LXQtCAlZDogJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLQvdC10YDQsNC30L/QvtC30L3QsNGC0LAg0LTQstC+0LjRh9C90LDRgtCwINC60YDRitC/0LrQsCDQvdCwINGA0LXQtCAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjIwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAi0LrRgNGK0L/QutCw0YLQsCDQtSDRgSDQuNC30YbRj9C70L4g0L/QvtCy0YDQtdC00LXQvdC4INC00LDQvdC90Lgg0L3QsCDRgNC10LQgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgItGB0LjQvNCy0L7Qu9C90LDRgtCwINCy0YDRitC30LrQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdCwIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBvciByZWFkICVzIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9INC40LvQuCDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2FwcGx5LmM6Mjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdC+INC90LDRh9Cw0LvQviDQvdCwINGA0LXQtDog4oCeJWPigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiIgorIiVkLdGC0L4g0L/QsNGA0YfQtSDQutC+0LQg0LHQtSDRg9GB0L/QtdGI0L3QviDQv9GA0LjQu9C+0LbQtdC90L4g0L3QsCDRgNC10LQgJWQgKNC+0YLQvNC10YHRgtCy0LDQvdC1INC+0YIgJWQg0YDQtdC0KS4iCittc2dzdHJbMV0gIiIKKyIlZC3RgtC+INC/0LDRgNGH0LUg0LrQvtC0INCx0LUg0YPRgdC/0LXRiNC90L4g0L/RgNC40LvQvtC20LXQvdC+INC90LAg0YDQtdC0ICVkICjQvtGC0LzQtdGB0YLQstCw0L3QtSDQvtGCICVkINGA0LXQtNCwKS4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIiIKKyLQmtC+0L3RgtC10LrRgdGC0YrRgiDQtSDQvdCw0LzQsNC70LXQvSDQvdCwICglbGQvJWxkKSDQt9CwINC/0YDQuNC70LDQs9Cw0L3QtdGC0L4g0L3QsCDQv9Cw0YDRh9C10YLQviDQutC+0LQg0L3QsCDRgNC10LQgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyLQv9GA0Lgg0YLRitGA0YHQtdC90LUg0LfQsDpcbiIKKyIlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICLQu9C40L/RgdCy0LDRgiDQtNCw0L3QvdC40YLQtSDQt9CwINC00LLQvtC40YfQvdCw0YLQsCDQutGA0YrQv9C60LAg0LfQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgItC00LLQvtC40YfQvdCw0YLQsCDQutGA0YrQv9C60LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQuNC70L7QttC10L3QsCDQstGK0YDRhdGDIOKAniVz4oCcIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzA0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAiIgorItC00LLQvtC40YfQvdCw0YLQsCDQutGA0YrQv9C60LAg0LfQsCDigJ4lc+KAnCDQstC+0LTQuCDQtNC+INC90LXQv9GA0LDQstC40LvQvdC4INGA0LXQt9GD0LvRgtCw0YLQuCAo0L7Rh9Cw0LrQstCw0YjQtSDRgdC1IFNIQTE6ICIKKyLigJ4lc+KAnCwg0LAg0LHQtSDQv9C+0LvRg9GH0LXQvdC+OiDigJ4lc+KAnCkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCwOiDigJ4lczolbGTigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9GC0LXQs9C70LgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjM1IGJ1aWx0aW4vYXBwbHkuYzozMjQ2IGJ1aWx0aW4vYXBwbHkuYzozMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgb2YgJXMgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0L/RgNC+0YfQuNGC0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDigJ4lc+KAnCDRgdC70LXQtCDQv9GA0L7RgdC70LXQtNGP0LLQsNC90LUg0L3QsCDRgdC40LzQstC+0LvQvdCwINCy0YDRitC30LrQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNzEgYnVpbHRpbi9hcHBseS5jOjM0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgItC+0LHQtdC60YLRitGCINGBINC/0YrRgiDigJ4lc+KAnCDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9INC40LvQuCDQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzUyIGJ1aWx0aW4vYXBwbHkuYzozNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQsiDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMzNTYgYnVpbHRpbi9hcHBseS5jOjM0OTkgYnVpbHRpbi9hcHBseS5jOjM1MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIgorbXNnc3RyICLigJ4lc+KAnDogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzYxIGJ1aWx0aW4vYXBwbHkuYzozNTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDRgdGK0L7RgtCy0LXRgtGB0YLQstCwINC90LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNDYzCittc2dpZCAicmVtb3ZhbCBwYXRjaCBsZWF2ZXMgZmlsZSBjb250ZW50cyIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDRidCw0YLQsCDQutGA0YrQv9C60LAg0L7RgdGC0LDQstGPINGE0LDQudC70LAg0L3QtdC/0YDQsNC30LXQvSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIuKAniVz4oCcOiDQvdC10L/RgNCw0LLQuNC70LXQvSDQstC40LQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAi4oCeJXPigJwg0LUg0L7RgiDQstC40LQg4oCeJW/igJwsINCwINGB0LUg0L7Rh9Cw0LrQstCw0YjQtSDigJ4lb+KAnCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2OTMgYnVpbHRpbi9hcHBseS5jOjM2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC/0YrRgjog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAi4oCeJXPigJw6INCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINCyINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc1MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIuKAniVz4oCcOiDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICLQvdC+0LLQuNGC0LUg0L/RgNCw0LLQsCDQt9CwINC00L7RgdGC0YrQvyAoJW8pINC90LAg4oCeJXPigJwg0L3QtSDRgdGK0LLQv9Cw0LTQsNGCINGB0YrRgSDRgdGC0LDRgNC40YLQtSAoJW8pIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc3OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgIiIKKyLQvdC+0LLQuNGC0LUg0L/RgNCw0LLQsCDQt9CwINC00L7RgdGC0YrQvyAoJW8pINC90LAg4oCeJXPigJwg0L3QtSDRgdGK0LLQv9Cw0LTQsNGCINGB0YrRgSDRgdGC0LDRgNC40YLQtSAoJW8pINC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLQt9Cw0YHQtdCz0L3QsNGC0LjRj9GCINGE0LDQudC7IOKAniVz4oCcINC1INGB0LvQtdC0INGB0LjQvNCy0L7Qu9C90LAg0LLRgNGK0LfQutCwIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzgwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgItCa0YDRitC/0LrQsNGC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQuNC70L7QttC10L3QsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgItCf0YDQvtCy0LXRgNGP0LLQsNC90LUg0L3QsCDQutGA0YrQv9C60LDRgtCwIOKAniVz4oCc4oCmIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzkwOSBidWlsdGluL2NoZWNrb3V0LmM6MjMzIGJ1aWx0aW4vcmVzZXQuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC30LDQv9C40YEg0LIg0LrQtdGI0LAg0YfRgNC10Lcg4oCebWFrZV9jYWNoZV9lbnRyeeKAnCDQt9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstCw0LTQuCDQvtGCINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgItC/0L7QstGA0LXQtNC10L3QsCDQutGA0YrQv9C60LAg0LfQsCDQvNC+0LTRg9C70LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/QvtC70YPRh9C4INC40L3RhNC+0YDQvNCw0YbQuNGPINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDQvdC+0LLQvtGB0YrQt9C00LDQtNC10L3QuNGPINGE0LDQudC7IOKAniVz4oCcIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAiIgorItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LAg0YHRitC30LTQsNC00LUg0LzRj9GB0YLQvtGC0L4g0LfQsCDRgdGK0YXRgNCw0L3QtdC90LjQtSDQvdCwINC90L7QstC+0YHRitC30LTQsNC00LXQvdC40Y8g0YTQsNC50Lsg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDkzIGJ1aWx0aW4vYXBwbHkuYzo0MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQtNC+0LHQsNCy0Lgg0LfQsNC/0LjRgSDQsiDQutC10YjQsCDQt9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAi0LfQsNGC0LLQsNGA0Y/QvdC1INC90LAg0YTQsNC50LvQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0LjRiNC1INGBINGA0LXQttC40Lwg0L3QsCDQtNC+0YHRgtGK0L8g4oCeJW/igJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgItCa0YDRitC/0LrQsNGC0LAg4oCeJXPigJwg0LHQtSDQv9GA0LjQu9C+0LbQtdC90LAg0YfQuNGB0YLQvi4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjcwCittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgItCy0YrRgtGA0LXRiNC90LAg0LPRgNC10YjQutCwIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDI3MworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAg4oCeJSVz4oCcINGBICVkINC+0YLRhdCy0YrRgNC70LXQvdC+INC/0LDRgNGH0LXigKYiCittc2dzdHJbMV0gItCf0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAg4oCeJSVz4oCcINGBICVkINC+0YLRhdCy0YrRgNC70LXQvdC4INC/0LDRgNGH0LXRgtCw4oCmIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDI4MworIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgItGB0YrQutGA0LDRidCw0LLQsNC90LUg0L3QsCDQuNC80LXRgtC+INC90LAg0YTQsNC50LvQsCDRgSDQvtGC0YXQstGK0YDQu9C10L3QuNGC0LUg0L/QsNGA0YfQtdGC0LAg0L3QsCDigJ4gJS4qcy5yZWrigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIiVkLdGC0L4g0L/QsNGA0YfQtSDQsdC1INGD0YHQv9C10YjQvdC+INC/0YDQuNC70L7QttC10L3Qvi4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAiJWQt0YLQviDQv9Cw0YDRh9C1INCx0LUg0L7RgtGF0LLRitGA0LvQtdC90L4uIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM5NworbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgiDQstGF0L7QtCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ0MDgKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QuNGB0LDQvSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MjUgYnVpbHRpbi9hcHBseS5jOjQ1MjggYnVpbHRpbi9jbG9uZS5jOjg1CisjOiBidWlsdGluL2ZldGNoLmM6OTIKK21zZ2lkICJwYXRoIgorbXNnc3RyICLQv9GK0YIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTI2Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAi0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQvdCw0L/QsNGB0LLQsNGJ0Lgg0L3QsCDQtNCw0LTQtdC90LjRjyDQv9GK0YIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTI5Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAi0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1INC90LDQv9Cw0YHQstCw0YnQuCDQvdCwINC00LDQtNC10L3QuNGPINC/0YrRgiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MzEKK21zZ2lkICJudW0iCittc2dzdHIgItCR0KDQntCZIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUzMgorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICLQv9GA0LXQvNCw0YXQstCw0L3QtSDQvdCwINGC0L7Qt9C4INCR0KDQntCZINCy0L7QtNC10YnQuCDQtdC70LXQvNC10L3RgtC4INC+0YIg0L/RitGC0LjRidCw0YLQsCDQsiDRgNCw0LfQu9C40LrQsNGC0LAiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTM1Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDRgNC10LTQvtCy0LXRgtC1INC00L7QsdCw0LLQtdC90Lgg0L7RgiDRgtCw0LfQuCDQutGA0YrQv9C60LAiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTM3Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtC40YHRgtC40LrQsCDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQsdC10Lcg0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCw0YLQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDEKK21zZ2lkICJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQsdGA0L7RjyDQvdCwINC00L7QsdCw0LLQtdC90LjRgtC1INC4INC40LfRgtGA0LjRgtC40YLQtSDRgNC10LTQvtCy0LUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRgtCw0YLQuNGB0YLQuNC60LAg0L3QsCDQstGF0L7QtNC90LjRgtC1INC00LDQvdC90Lgg0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQ1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LrQsCDQtNCw0LvQuCDQutGA0YrQv9C60LDRgtCwINC80L7QttC1INC00LAg0YHQtSDQv9GA0LjQu9C+0LbQuCwg0LHQtdC3INC00LXQudGB0YLQstC40YLQtdC70L3QviDQv9GA0LjQu9Cw0LPQsNC90LUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQ3Cittc2dpZCAibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICLQv9GA0L7QstC10YDQutCwINC00LDQu9C4INC60YDRitC/0LrQsNGC0LAg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LjQu9C+0LbQtdC90LAg0LrRitC8INGC0LXQutGD0YnQuNGPINC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDkKK21zZ2lkICJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0L/RgNC40LvQsNCz0LDQvdC1INC90LAg0LrRgNGK0L/QutCw0YLQsCDQsdC10Lcg0L/RgNC+0LzRj9C90LAg0L3QsCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NTEKK21zZ2lkICJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIgorbXNnc3RyICLQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQutGA0YrQv9C60LAsINC60L7Rj9GC0L4g0L/RgNC+0LzQtdC90Y8g0Lgg0YTQsNC50LvQvtCy0LUg0LjQt9Cy0YrQvSDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NTMKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAiIgorItC60YDRitC/0LrQsNGC0LAg0LTQsCDQsdGK0LTQtSDQv9GA0LjQu9C+0LbQtdC90LAuINCe0L/RhtC40Y/RgtCwINGB0LUg0LrQvtC80LHQuNC90LjRgNCwINGBIOKAni0tY2hlY2vigJwv4oCeLS1zdGF04oCcL+KAni0tIgorInN1bW1hcnnigJwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTU1Cittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAi0L/RgNC+0LHQstCw0L3QtSDRgSDRgtGA0L7QudC90L4g0YHQu9C40LLQsNC90LUsINCw0LrQviDQutGA0YrQv9C60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQuNC70L7QttC4INC00LjRgNC10LrRgtC90L4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTU3Cittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKyLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQstGA0LXQvNC10L3QtdC9INC40L3QtNC10LrRgSDQvdCwINCx0LDQt9CwINC90LAg0LLQutC70Y7Rh9C10L3QsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NTkgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5OCBidWlsdGluL2xzLWZpbGVzLmM6NDEyCittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgItGA0LDQt9C00LXQu9GP0L3QtSDQvdCwINC/0YrRgtC40YnQsNGC0LAg0YEg0L3Rg9C70LXQstC40Y8g0LfQvdCw0Log4oCeTlVM4oCcIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU2MgorbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAi0LTQsCDRgdC1INC+0YHQuNCz0YPRgNC4INC60L7QvdGC0LXQutGB0YIg0L7RgiDQv9C+0L3QtSDRgtCw0LrRitCyINCR0KDQntCZINGB0YrQstC/0LDQtNCw0YnQuCDRgNC10LTQvtCy0LUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTYzCittc2dpZCAiYWN0aW9uIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC1IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU2NAorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICLQt9Cw0YHQuNGH0LDQvdC1INC90LAg0L3QvtCy0Lgg0LjQu9C4INC/0YDQvtC80LXQvdC10L3QuCDRgNC10LTQvtCy0LUg0YEg0LPRgNC10YjQutC4INCyINC30L3QsNGG0LjRgtC1INC30LAg0LjQvdGC0LXRgNCy0LDQu9C4IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU2NyBidWlsdGluL2FwcGx5LmM6NDU3MAorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgIiIKKyLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtSDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuCDQv9GA0Lgg0L7RgtC60YDQuNCy0LDQvdC1INC90LAg0LrQvtC90YLQtdC60YHRgtCwIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3MworbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICLQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQutGA0YrQv9C60LDRgtCwINCyINC+0LHRgNCw0YLQvdCwINC/0L7RgdC+0LrQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzUKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAi0LHQtdC3INC40LfQuNGB0LrQstCw0L3QtSDQvdCwINC00L7RgNC4INC4INC10LTQuNC9INGA0LXQtCDQutC+0L3RgtC10LrRgdGCIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3NworbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICLQvtGB0YLQsNCy0Y/QvdC1INC90LAg0L7RgtGF0LLRitGA0LvQtdC90LjRgtC1INC/0LDRgNGH0LXRgtCwINCy0YrQsiDRhNCw0LnQu9C+0LLQtSDRgSDRgNCw0LfRiNC40YDQtdC90LjQtSDigJ4ucmVq4oCcIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3OQorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICLQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0LfQsNGB0YLRitC/0LLQsNGJ0Lgg0YHQtSDQv9Cw0YDRh9C10YLQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODIKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LUg0L3QsCDQvdC10L/RgNCw0LLQuNC70L3QviDQu9C40L/RgdCy0LDRiSDQt9C90LDQuiDQt9CwINC90L7QsiDRgNC10LQg0LIg0LrRgNCw0Y8g0L3QsCDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODUKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgItCx0LXQtyDQtNC+0LLQtdGA0Y/QstCw0L3QtSDQvdCwINC90L7QvNC10YDQsNGC0LAg0L3QsCDRgNC10LTQvtCy0LXRgtC1INCyINC30LDQs9C70LDQstC90LjRgtC1INGH0LDRgdGC0Lgg0L3QsCDQv9Cw0YDRh9C10YLQsNGC0LAiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTg3Cittc2dpZCAicm9vdCIKK21zZ3N0ciAi0J3QkNCn0JDQm9Cd0JBf0JTQmNCg0JXQmtCi0J7QoNCY0K8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTg4Cittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0LDQt9C4INCd0JDQp9CQ0JvQndCQX9CU0JjQoNCV0JrQotCe0KDQmNCvINC60YrQvCDQuNC80LXQvdCw0YLQsCDQvdCwINCy0YHQuNGH0LrQuCDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MTAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgItC60LDRgtC+IOKAni0tM3dheeKAnCwg0L3QviDQuNC30LLRitC9INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MTgKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICLQutCw0YLQviDigJ4tLWluZGV44oCcLCDQvdC+INC40LfQstGK0L0g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDYyMQorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICLQutCw0YLQviDigJ4tLWNhY2hlZOKAnCwg0L3QviDQuNC30LLRitC9INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnIgorbXNnc3RyICLQutGA0YrQv9C60LDRgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvdCwIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIKK21zZ2lkX3BsdXJhbCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyWzBdICLQv9GA0LXQvdC10LHRgNC10LPQvdCw0YLQsCDQtSAlZCDQs9GA0LXRiNC60LAg0LIg0LfQvdCw0YbQuNGC0LUg0LfQsCDQuNC90YLQtdGA0LLQsNC70LgiCittc2dzdHJbMV0gItC/0YDQtdC90LXQsdGA0LXQs9C90LDRgtC4INGB0LAgJWQg0LPRgNC10YjQutC4INCyINC30L3QsNGG0LjRgtC1INC30LAg0LjQvdGC0LXRgNCy0LDQu9C4IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDY2MCBidWlsdGluL2FwcGx5LmM6NDY3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCDRgNC10LQg0LTQvtCx0LDQstGPINCz0YDQtdGI0LrQuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuC4iCittc2dzdHJbMV0gIiVkINGA0LXQtNCwINC00L7QsdCw0LLRj9GCINCz0YDQtdGI0LrQuCDQsiDQt9C90LDRhtC40YLQtSDQt9CwINC40L3RgtC10YDQstCw0LvQuC4iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgItCw0YDRhdC40LLQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICLQuNC30YXQvtC00YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC10L3QsNGB0L7Rh9C10L0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6INCb0LjQv9GB0LLQsCDQsNC00YDQtdGBINC30LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NTgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IEVPRiIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6INC+0YfQsNC60LLQsNGI0LUg0YHQtSDigJ5BQ0vigJwv4oCeTkFL4oCcLCDQsCDQsdC1INC/0L7Qu9GD0YfQtdC9IOKAnkVPRuKAnCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiDQv9C+0LvRg9GH0LXQvSDQtSDigJ5OQUNL4oCcIOKAlCAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAi0L7RgtC00LDQu9C10YfQtdC90LAg0LPRgNC10YjQutCwOiAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiDQv9GA0L7RgtC+0LrQvtC70L3QsCDQs9GA0LXRiNC60LAiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiDQvtGH0LDQutCy0LDRiNC1INGB0LUg0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQsdGD0YTQtdGA0LjRgtC1INGH0YDQtdC3IOKAnmZsdXNo4oCcIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICLQuNC30LLRitGA0YjQstCw0L3QtSDQvdCwIOKAnmdpdCBiaXNlY3QgbmV4dOKAnCIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE5Cittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAiIgorItC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkJJU0VDVF9IRUFE4oCcINCy0LzQtdGB0YLQviDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMQorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFvQntCf0KbQmNCv4oCmXSBb0J7Qn9Cm0JjQr1/Ql9CQX9CS0JXQoNCh0JjQr9Ci0JDigKZdIFvQktCV0KDQodCY0K9dIFstLV0g0KTQkNCZ0JsiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNgorbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICLQntCf0KbQmNCY0YLQtV/Ql9CQX9CS0JXQoNCh0JjQr9Ci0JAg0YHQsCDQtNC+0LrRg9C80LXQvdGC0LjRgNCw0L3QuCDQsiDRgNGK0LrQvtCy0L7QtNGB0YLQstC+0YLQviBnaXQtcmV2LWxpc3QoMSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTAwCittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LDQvdC+0YLQsNGG0LjQuNGC0LUg0YEg0L3QsNC80LjRgNCw0L3QtdGC0L4g0LjQvCwg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QviIKKworIyBGSVhNRSBTSEEtMSAtPiBTSEExCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GA0LDQt9C90Lgg0YHRg9C80Lgg0L/QviBTSEExINC30LAg0LPRgNCw0L3QuNGH0L3QuNGC0LUg0L/QvtC00LDQstCw0L3QuNGPICjRgdGC0LDQvdC00LDRgNGC0L3QviDQvtC/0YbQuNGP0YLQsCAiCisi0LUg0LjQt9C60LvRjtGH0LXQvdCwKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDIKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyLQndCw0YfQsNC70L3QuNGC0LUg0L/QvtC00LDQstCw0L3QuNGPINC00LAg0L3QtSDRgdC1INGB0YfQuNGC0LDRgiDQt9CwINCz0YDQsNC90LjRh9C90LggKNGB0YLQsNC90LTQsNGA0YLQvdC+INC+0L/RhtC40Y/RgtCwINC1ICIKKyLQuNC30LrQu9GO0YfQtdC90LApIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YLQsNGC0LjRgdGC0LjQutCwINC30LAg0LjQt9Cy0YrRgNGI0LXQvdC40YLQtSDQtNC10LnRgdGC0LLQuNGPIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwNAorbXNnaWQgIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQtNC+0L/RitC70L3QuNGC0LXQu9C90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQvtC/0YDQtdC00LXQu9GP0L3QtdGC0L4g0L3QsCDQsNC90L7RgtCw0YbQuNC40YLQtSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDUKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAiIgorItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0LjQvNC1INC90LAg0YTQsNC50LsgKNGB0YLQsNC90LTQsNGA0YLQvdC+INGC0L7QstCwINC1INCw0LLRgtC+0LzQsNGC0LjRh9C90L4pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwNgorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC/0YrRgNCy0L7QvdCw0YfQsNC70L3QuNGP0YIg0L3QvtC80LXRgCDQvdCwINGA0LXQtCAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0L7Qv9GG0LjRj9GC0LAg0LUg0LjQt9C60LvRjtGH0LXQvdCwKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDcKK21zZ2lkICJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0LLRitCyINGE0L7RgNC80LDRgiDQt9CwINC/0L4t0L3QsNGC0LDRgtGK0YjQvdCwINC+0LHRgNCw0LHQvtGC0LrQsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDgKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKyLQmNC30LLQtdC20LTQsNC90LUg0LLRitCyINGE0L7RgNC80LDRgiDQt9CwINC60L7QvNCw0L3QtNC4INC+0YIg0L/QvtGC0YDQtdCx0LjRgtC10LvRgdC60L4g0L3QuNCy0L4g0YEg0LjQvdGE0L7RgNC80LDRhtC40Y8g0L3QsCDQstGB0LXQutC4ICIKKyLRgNC10LQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA5Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorItCY0LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YHRitGJ0LjRjyDRhNC+0YDQvNCw0YIg0LrQsNGC0L4g4oCeZ2l0LWFubm90YXRl4oCcICjRgdGC0LDQvdC00LDRgNGC0L3QviDQvtC/0YbQuNGP0YLQsCDQtSAiCisi0LjQt9C60LvRjtGH0LXQvdCwKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTAKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINC90LXRhNC+0YDQvNCw0YLQuNGA0LDQvdC4INCy0YDQtdC80LXQvdCwICjRgdGC0LDQvdC00LDRgNGC0L3QviDQvtC/0YbQuNGP0YLQsCDQtSDQuNC30LrQu9GO0YfQtdC90LApIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMQorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/RitC70L3QuNGC0LUg0YHRg9C80Lgg0L/QviBTSEExICjRgdGC0LDQvdC00LDRgNGC0L3QviDQvtC/0YbQuNGP0YLQsCDQtSDQuNC30LrQu9GO0YfQtdC90LApIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMgorbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgItCR0LXQtyDQuNC80LUg0L3QsCDQsNCy0YLQvtGAINC4INCy0YDQtdC80LUg0L3QsCDQv9GA0L7QvNGP0L3QsCAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0L7Qv9GG0LjRj9GC0LAg0LUg0LjQt9C60LvRjtGH0LXQvdCwKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTMKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQtS3Qv9C+0YnQsNGC0LAg0L3QsCDQsNCy0YLQvtGA0LAsINCwINC90LUg0LjQvNC10YLQviDQvNGDICjRgdGC0LDQvdC00LDRgNGC0L3QviDQvtC/0YbQuNGP0YLQsCDQtSAiCisi0LjQt9C60LvRjtGH0LXQvdCwKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTQKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAi0JHQtdC3INGA0LDQt9C70LjQutC4INCyINC30L3QsNGG0LjRgtC1INC30LAg0LjQvdGC0LXRgNCy0LDQu9C4IgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNQorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAi0JTQvtC/0YrQu9C90LjRgtC10LvQvdC4INC40LfRh9C40YHQu9C10L3QuNGPINC30LAg0L/Qvi3QtNC+0LHRgNC4INGA0LXQt9GD0LvRgtCw0YLQuCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTYKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgItCY0LfRh9C40YLQsNC90LUg0L3QsCDQstC10YDRgdC40LjRgtC1INC+0YIg0KTQkNCZ0JssINCwINC90LUg0YfRgNC10Lcg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDigJ5naXQtcmV2LWxpc3TigJwiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE3Cittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQpNCQ0JnQm9CwINC60LDRgtC+INC60YDQsNC50L3QviDQv9C+0LvQvtC20LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE4IGJ1aWx0aW4vYmxhbWUuYzoyNTE5Cittc2dpZCAic2NvcmUiCittc2dzdHIgItC90LDQv9Cw0YHQstCw0L3QtSDQvdCwINGA0LXQtNC+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE4Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiIgorItCi0YrRgNGB0LXQvdC1INC90LAg0LrQvtC/0LjRgNCw0L3QuCDRgNC10LTQvtCy0LUg0LrQsNC60YLQviDQsiDRgNCw0LzQutC40YLQtSDQvdCwINC10LTQuNC9INGE0LDQudC7LCDRgtCw0LrQsCDQuCDQvtGCINC10LTQuNC9INGE0LDQudC7ICIKKyLQutGK0Lwg0LTRgNGD0LMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE5Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiIgorItCi0YrRgNGB0LXQvdC1INC90LAg0L/RgNC10LzQtdGB0YLQtdC90Lgg0YDQtdC00L7QstC1INC60LDQutGC0L4g0LIg0YDQsNC80LrQuNGC0LUg0L3QsCDQtdC00LjQvSDRhNCw0LnQuywg0YLQsNC60LAg0Lgg0L7RgiDQtdC00LjQvSAiCisi0YTQsNC50Lsg0LrRitC8INC00YDRg9CzIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUyMAorbXNnaWQgIm4sbSIKK21zZ3N0ciAibixtIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUyMAorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICIiCisi0JjQvdGE0L7RgNC80LDRhtC40Y8g0YHQsNC80L4g0LfQsCDRgNC10LTQvtCy0LXRgtC1INCyINC40L3RgtC10YDQstCw0LvQsCDQvtGCIG4g0LTQviBtINCy0LrQu9GO0YfQuNGC0LXQu9C90L4uINCR0YDQvtC10L3QtdGC0L4gIgorItC30LDQv9C+0YfQstCwINC+0YIgMSIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUgbWF4aW11bQorIy4gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4gImdpdCBibGFtZSIKKyMuIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iLCB3aGljaAorIy4gdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdCBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mCisjLiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQgeW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yCisjLiBmZXdlciBkaXNwbGF5IGNvbHVtbnMuCisjOiBidWlsdGluL2JsYW1lLmM6MjYwMQorbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgItC/0YDQtdC00LggNCDQs9C+0LTQuNC90Lgg0LggMTEg0LzQtdGB0LXRhtCwIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFvQntCf0KbQmNCv4oCmXSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgImdpdCBicmFuY2ggW9Ce0J/QptCY0K/igKZdIFstbF0gWy1mXSDQmNCc0JVf0J3QkF/QmtCb0J7QnSBb0J3QkNCn0JDQm9CeXSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBb0J7Qn9Cm0JjQr+KApl0gWy1yXSAoLWQgfCAtRCkg0JjQnNCVX9Cd0JBf0JrQm9Ce0J3igKYiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggW9Ce0J/QptCY0K/igKZdICgtbSB8IC1NKSBb0KHQotCQ0KBf0JrQm9Ce0J1dINCd0J7Qkl/QmtCb0J7QnSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LrQu9C+0L3QsCDigJ4lc+KAnCwg0LrQvtC50YLQviDQtSDRgdC70Y/RgiDQutGK0Lwg4oCeJXPigJwsXG4iCisiICAgICAgICAg0L3QviDQvtGJ0LUg0L3QtSDQtSDRgdC70Y/RgiDQutGK0Lwg0LLRitGA0YXQsCDigJ5IRUFE4oCcLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisi0L7RgtC60LDQt9Cy0LDQvdC1INC90LAg0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LrQu9C+0L3QsCDigJ4lc+KAnCwg0LrQvtC50YLQviDQvdC1INC1INGB0LvRj9GCINC60YrQvFxuIgorIiAgICAgICAgIOKAniVz4oCcLCDQvdC+INC1INGB0LvRj9GCINC60YrQvCDQstGK0YDRhdCwIOKAnkhFQUTigJwuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgItCe0LHQtdC60YLRitGCLdC/0L7QtNCw0LLQsNC90LUg0LfQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKyLQmtC70L7QvdGK0YIg4oCeJXPigJwg0L3QtSDQtSDRgdC70Y/RgiDQvdCw0L/RitC70L3Qvi4g0JDQutC+INGB0YLQtSDRgdC40LPRg9GA0L3QuCwg0YfQtSDQuNGB0LrQsNGC0LVcbiIKKyLQtNCwINCz0L4g0LjQt9GC0YDQuNC10YLQtSwg0LjQt9C/0YrQu9C90LXRgtC1IOKAnmdpdCBicmFuY2ggLUQgJXPigJwuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4NQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGPINGE0LDQudC7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxMworbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLWHigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINC+0L/RhtC40Y/RgtCwIOKAni1k4oCcIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxOQorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAi0J7QsdC10LrRgtGK0YIt0L/QvtC00LDQstCw0L3QtSwg0YHQvtGH0LXQvSDQvtGCINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcLCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBicmFuY2ggJyVzJyB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBvbi4iCittc2dzdHIgItCd0LUg0LzQvtC20LXRgtC1INC00LAg0LjQt9GC0YDQuNC10YLQtSDQutC70L7QvdCwIOKAniVz4oCcLCDQt9Cw0YnQvtGC0L4g0LIg0LzQvtC80LXQvdGC0LAg0LUg0YLQtdC60YPRiS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLRgdC70LXQtNGP0YnQuNGP0YIg0LrQu9C+0L0g4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgItC60LvQvtC90YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC40LfRgtGA0LjQstCw0L3QtdGC0L4g0L3QsCDRgdC70LXQtNGP0YnQuNGPINC60LvQvtC9IOKAniVz4oCcIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQuNC30YLRgNC40LLQsNC90LXRgtC+INC90LAg0LrQu9C+0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICLQmNC30YLRgNC40YIg0YHQu9C10LTRj9GJINC60LvQvtC9IOKAniVz4oCcICjRgtC+0Lkg0YHQvtGH0LXRiNC1INC60YrQvCDigJ4lc+KAnCkuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICLQmNC30YLRgNC40YIg0LrQu9C+0L0g4oCeJXPigJwgKNGC0L7QuSDRgdC+0YfQtdGI0LUg0LrRitC8IOKAniVz4oCcKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgcG9pbnQgYXQgYSBjb21taXQiCittc2dzdHIgItC60LvQvtC90YrRgiDigJ4lc+KAnCDQvdC1INGB0L7Rh9C4INC60YrQvCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGdvbmVdIgorbXNnc3RyICJbJXM6INC40LfRgtGA0LjRgl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIlslc10iCittc2dzdHIgIlslc10iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYmVoaW5kICVkXSIKK21zZ3N0ciAiWyVzOiDQvdCw0LfQsNC0INGBICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2JlaGluZCAlZF0iCittc2dzdHIgIlvQvdCw0LfQsNC0INGBICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBhaGVhZCAlZF0iCittc2dzdHIgIlslczog0L3QsNC/0YDQtdC0INGBICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkXSIKK21zZ3N0ciAiW9C90LDQv9GA0LXQtCDRgSAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYWhlYWQgJWQsIGJlaGluZCAlZF0iCittc2dzdHIgIlslczog0L3QsNC/0YDQtdC0INGBICVkLCDQvdCw0LfQsNC0INGBICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICJb0L3QsNC/0YDQtdC0INGBICVkLCDQvdCw0LfQsNC0INGBICVkXSIKKworIyBGSVhNRSAqKiBob3cgbWFueT8/CisjOiBidWlsdGluL2JyYW5jaC5jOjQ4OAorbXNnaWQgIiAqKioqIGludmFsaWQgcmVmICoqKioiCittc2dzdHIgIiDil4/il4/il4/il48g0L3QtdC/0YDQsNCy0LjQu9C10L0g0YPQutCw0LfQsNGC0LXQuyDil4/il4/il4/il48iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIHJlYmFzaW5nICVzKSIKK21zZ3N0ciAiKNC40LfQstGK0L0g0LrQu9C+0L0sINC/0YDQtdCx0LDQt9C40YDQsNC90LUg0L3QsCDigJ4lc+KAnCkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uICVzKSIKK21zZ3N0ciAiKNC40LfQstGK0L0g0LrQu9C+0L0sINC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1INC+0YIg4oCeJXPigJwpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCittc2dzdHIgIijQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC90LUg0LUg0YHQstGK0YDQt9Cw0L0g0Lgg0LUg0L/RgNC4IOKAniVz4oCcKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiKEhFQUQgZGV0YWNoZWQgZnJvbSAlcykiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQtSDRgdCy0YrRgNC30LDQvSDQuCDQtSDQvtGC0LTQtdC70LXMgNC9INC+0YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTk1Cittc2dpZCAiKG5vIGJyYW5jaCkiCittc2dzdHIgIijQuNC30LLRitC9INC60LvQvtC9KSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC90LUg0YHQvtGH0Lgg0LrRitC8INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjkwCittc2dpZCAic29tZSByZWZzIGNvdWxkIG5vdCBiZSByZWFkIgorbXNnc3RyICLQvdGP0LrQvtC4INGD0LrQsNC30LDRgtC10LvQuCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC/0YDQvtGH0LXRgtC10L3QuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MDMKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorItC90LUg0LzQvtC20LXRgtC1INC00LAg0L/RgNC10LjQvNC10L3Rg9Cy0LDRgtC1INGC0LXQutGD0YnQuNGPINC60LvQvtC9LCDQt9Cw0YnQvtGC0L4g0YHRgtC1INC40LfQstGK0L0g0LrQvtC50YLQviDQuCDQtNCwINC1INC60LvQvtC9IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcxMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQutC70L7QvTog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzI4Cittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDQutC70L7QvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgItCd0LAg0LrQu9C+0L3QsCDRgSDQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg4oCeJXPigJwg0LUg0LTQsNC00LXQvdC+INGB0LvRg9C20LXQsdC90L4g0LjQvNC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczNgorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICLQmtC70L7QvdGK0YIg0LUg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvSDQvdCwIOKAniVz4oCcLCDQvdC+INGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQtSDQvtCx0L3QvtCy0LXQvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NDMKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgItCa0LvQvtC90YrRgiDQtSDQv9GA0LXQuNC80LXQvdGD0LLQsNC9LCDQvdC+INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGP0YIg0YTQsNC50Lsg0L3QtSDQtSDQvtCx0L3QvtCy0LXQvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQvtCx0LXQutGCIOKAniVz4oCcIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgYnJhbmNoIGRlc2NyaXB0aW9uIHRlbXBsYXRlOiAlcyIKK21zZ3N0ciAi0YjQsNCx0LvQvtC90YrRgiDQt9CwINC+0L/QuNGB0LDQvdC40LUg0L3QsCDQutC70L7QvSDQvdC1INCx0LUg0LfQsNC/0LjRgdCw0L06IOKAniVz4oCcIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxMAorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAi0J7QsdGJ0Lgg0L3QsNGB0YLRgNC+0LnQutC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxMgorbXNnaWQgInNob3cgaGFzaCBhbmQgc3ViamVjdCwgZ2l2ZSB0d2ljZSBmb3IgdXBzdHJlYW0gYnJhbmNoIgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YXQtdGI0LAg0Lgg0YLQtdC80LDRgtCwLiDQn9C+0LLRgtCw0YDRj9C90LXRgtC+INC90LAg0L7Qv9GG0LjRj9GC0LAg0L/RgNC40LHQsNCy0Y8g0L7RgtC00LDQu9C10YfQtdC90LjRgtC1INC60LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODEzCittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAi0LHQtdC3INC40L3RhNC+0YDQvNCw0YbQuNC+0L3QvdC4INGB0YrQvtCx0YnQtdC90LjRjyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTQKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINGA0LXQttC40LzQsCDQvdCwINGB0LvQtdC00LXQvdC1ICjQstC40LYgZ2l0LXB1bGwoMSkpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNgorbXNnaWQgImNoYW5nZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICLRgdC80Y/QvdCwINC90LAg0YHQu9C10LTQtdC90LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjAKK21zZ2lkICJ1c2UgY29sb3JlZCBvdXRwdXQiCittc2dzdHIgItGG0LLQtdGC0LXQvSDQuNC30YXQvtC0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgItC00LXQudGB0YLQstC40LUg0LLRitGA0YXRgyDRgdC70LXQtNGP0YnQuNGC0LUg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjQgYnVpbHRpbi9icmFuY2guYzo4MzAgYnVpbHRpbi9icmFuY2guYzo4NTEKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODU3IGJ1aWx0aW4vY29tbWl0LmM6MTU4MSBidWlsdGluL2NvbW1pdC5jOjE1ODIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MyBidWlsdGluL2NvbW1pdC5jOjE1ODQgYnVpbHRpbi90YWcuYzo2MTYKKyM6IGJ1aWx0aW4vdGFnLmM6NjIyCiBtc2dpZCAiY29tbWl0IgogbXNnc3RyICLQv9C+0LTQsNCy0LDQvdC1IgogCi0jOiBnaXRrOjIyOTkgZ2l0azoyMzAxIGdpdGs6NDY4NyBnaXRrOjQ3MTAgZ2l0azo0NzM0IGdpdGs6Njc1NSBnaXRrOjY4MjcKLSM6IGdpdGs6NjkxMgotbXNnaWQgImNvbnRhaW5pbmc6IgotbXNnc3RyICLRgdGK0LTRitGA0LbQsNGJ0L46IgorIzogYnVpbHRpbi9icmFuY2guYzo4MjUgYnVpbHRpbi9icmFuY2guYzo4MzEKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQutC70L7QvdC40YLQtSwg0LrQvtC40YLQviDRgdGK0LTRitGA0LbQsNGCINGC0L7QstCwINC/0L7QtNCw0LLQsNC90LUiCiAKLSM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MwotbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKLW1zZ3N0ciAi0LfQsNGB0Y/Qs9Cw0YnQviDQv9GK0YLQuNGJ0LDRgtCwOiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODM3Cittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAi0KHQv9C10YbQuNCw0LvQvdC4INC00LXQudGB0YLQstC40Y8g0L3QsCDigJ5naXQtYnJhbmNo4oCcOiIKIAotIzogZ2l0azoyMzAzIGdpdGs6NDc3NwotbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgotbXNnc3RyICLQtNC+0LHQsNCy0Y/RidC+L9C/0YDQtdC80LDRhdCy0LDRidC+INC90LjQtyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODM4Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQutCw0LrRgtC+INC90LAg0YHQu9C10LTRj9GJ0LjRgtC1LCDRgtCw0LrQsCDQuCDQvdCwINC70L7QutCw0LvQvdC40YLQtSDQutC70L7QvdC4IgogCi0jOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Ci1tc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgotbXNnc3RyICLQv9GA0L7QvNC10L3Rj9GJ0L4g0YDQtdC00L7QstC1INC90LDQv9Cw0YHQstCw0YnQuDoiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MAorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDQutC70L7QvdC4LCDQutC+0LjRgtC+INGB0LAg0L3QsNC/0YrQu9C90L4g0YHQu9C10YLQuCIKIAotIzogZ2l0azoyMzEzIGdpdGs6MjMxNSBnaXRrOjQ3NjYKLW1zZ2lkICJFeGFjdCIKLW1zZ3N0ciAi0KLQvtGH0L3QviIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQxCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC4INC90LAg0LrQu9C+0L3QuCwg0LrQvtC40YLQviDQvdC1INGB0LAg0L3QsNC/0YrQu9C90L4g0YHQu9C10YLQuCIKIAotIzogZ2l0azoyMzE1IGdpdGs6NDg1NCBnaXRrOjY3MjMKLW1zZ2lkICJJZ25DYXNlIgotbXNnc3RyICLQkdC10Lcg0YDQtdCz0LjRgdGC0YrRgCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQyCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIiIKKyLQv9GA0LXQvNC10YHRgtCy0LDQvdC1L9C/0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINC60LvQvtC9INC4INC/0YDQuNC90LDQtNC70LXQttCw0YnQuNGP0YIg0LzRgyDQttGD0YDQvdCw0Lsg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1IgogCi0jOiBnaXRrOjIzMTUgZ2l0azo0NzM2IGdpdGs6NDg1MiBnaXRrOjY3MTkKLW1zZ2lkICJSZWdleHAiCi1tc2dzdHIgItCg0LXQsy4g0LjQt9GA0LDQtyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi0L/RgNC10LzQtdGB0YLQstCw0L3QtS/Qv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDQutC70L7QvSwg0LTQvtGA0Lgg0LDQutC+INC40LzQsCDQstC10YfQtSDQutC70L7QvSDRgSDRgtCw0LrQvtCy0LAg0LjQvNC1IgogCi0jOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKLW1zZ2lkICJBbGwgZmllbGRzIgotbXNnc3RyICLQktGB0LjRh9C60Lgg0L/QvtC70LXRgtCwIgorIzogYnVpbHRpbi9icmFuY2guYzo4NDQKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvNC10L3QsNGC0LAg0L3QsCDQutC70L7QvdC40YLQtSIKIAotIzogZ2l0azoyMzE4IGdpdGs6NDg3MSBnaXRrOjQ5MDQgZ2l0azo2Nzg2Ci1tc2dpZCAiSGVhZGxpbmUiCi1tc2dzdHIgItCf0YrRgNCy0Lgg0YDQtdC0IgorIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LbRg9GA0L3QsNC70LAg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC90LAg0LrQu9C+0L3QsCIKIAotIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQotbXNnaWQgIkNvbW1lbnRzIgotbXNnc3RyICLQmtC+0LzQtdC90YLQsNGA0LgiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NworbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICLRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0L7Qv9C40YHQsNC90LjQtdGC0L4g0L3QsCDQutC70L7QvdCwIgogCi0jOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6NDg3NiBnaXRrOjQ5MTEgZ2l0azo2Nzg2IGdpdGs6NzMyNCBnaXRrOjg4MzAKLSM6IGdpdGs6ODg0NQotbXNnaWQgIkF1dGhvciIKLW1zZ3N0ciAi0JDQstGC0L7RgCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ4Cittc2dpZCAiZm9yY2UgY3JlYXRpb24sIG1vdmUvcmVuYW1lLCBkZWxldGlvbiIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INGB0YrQt9C00LDQstCw0L3QtSwg0L/RgNC10LzQtdGB0YLQstCw0L3QtSwg0L/RgNC10LjQvNC10L3Rg9Cy0LDQvdC1LCDQuNC30YLRgNC40LLQsNC90LUiCiAKLSM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NzMyNgotbXNnaWQgIkNvbW1pdHRlciIKLW1zZ3N0ciAi0J/QvtC00LDQstCw0YkiCisjOiBidWlsdGluL2JyYW5jaC5jOjg1MQorbXNnaWQgInByaW50IG9ubHkgbm90IG1lcmdlZCBicmFuY2hlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0L3QtdGB0LvQtdGC0LjRgtC1INC60LvQvtC90LgiCiAKLSM6IGdpdGs6MjM1MAotbXNnaWQgIlNlYXJjaCIKLW1zZ3N0ciAi0KLRitGA0YHQtdC90LUiCisjOiBidWlsdGluL2JyYW5jaC5jOjg1NworbXNnaWQgInByaW50IG9ubHkgbWVyZ2VkIGJyYW5jaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDRgdC70LXRgtC40YLQtSDQutC70L7QvdC4IgogCi0jOiBnaXRrOjIzNTgKLW1zZ2lkICJEaWZmIgotbXNnc3RyICLQoNCw0LfQu9C40LrQuCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODYxCittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L/QviDQutC+0LvQvtC90LgiCiAKLSM6IGdpdGs6MjM2MAotbXNnaWQgIk9sZCB2ZXJzaW9uIgotbXNnc3RyICLQodGC0LDRgNCwINCy0LXRgNGB0LjRjyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODc0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC+0YLQutGA0LjQtSDQutGK0Lwg0LrQsNC60LLQviDRgdC+0YfQuCDRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcIgogCi0jOiBnaXRrOjIzNjIKLW1zZ2lkICJOZXcgdmVyc2lvbiIKLW1zZ3N0ciAi0J3QvtCy0LAg0LLQtdGA0YHQuNGPIgorIzogYnVpbHRpbi9icmFuY2guYzo4NzggYnVpbHRpbi9jbG9uZS5jOjYyMgorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICLQkiDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCecmVmcy9oZWFkc+KAnCDQu9C40L/RgdCy0LAg0YTQsNC50Lsg4oCeSEVBROKAnCIKIAotIzogZ2l0azoyMzY0Ci1tc2dpZCAiTGluZXMgb2YgY29udGV4dCIKLW1zZ3N0ciAi0JrQvtC90YLQtdC60YHRgiDQsiDRgNC10LTQvtCy0LUiCisjOiBidWlsdGluL2JyYW5jaC5jOjkwMAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0J7Qv9GG0LjQuNGC0LUg4oCeLS1jb2x1bW7igJwg0Lgg4oCeLS12ZXJib3Nl4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgogCi0jOiBnaXRrOjIzNzQKLW1zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgotbXNnc3RyICLQn9GA0LDQt9C90LjRgtC1INC30L3QsNGG0Lgg0LHQtdC3INC30L3QsNGH0LXQvdC40LUiCisjOiBidWlsdGluL2JyYW5jaC5jOjkxMSBidWlsdGluL2JyYW5jaC5jOjk1MAorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICLQndC10L7QsdGF0L7QtNC40LzQviDQtSDQuNC80LUg0L3QsCDQutC70L7QvSIKIAotIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Ci1tc2dpZCAiTGluZSBkaWZmIgotbXNnc3RyICLQn9C+0YDQtdC00L7QstC4INGA0LDQt9C70LjQutC4IgorIzogYnVpbHRpbi9icmFuY2guYzo5MjYKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0LfQsNC00LDQtNC10YLQtSDQvtC/0LjRgdCw0L3QuNC1INC90LAg4oCeSEVBROKAnCDQuNC30LLRitC9INC60LvQvtC9IgogCi0jOiBnaXRrOjI0NDUKLW1zZ2lkICJQYXRjaCIKLW1zZ3N0ciAi0JrRgNGK0L/QutCwIgorIzogYnVpbHRpbi9icmFuY2guYzo5MzEKK21zZ2lkICJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGA0LXQtNCw0LrRgtC40YDQsNGC0LUg0L7Qv9C40YHQsNC90LjQtdGC0L4g0L3QsCDQv9C+0LLQtdGH0LUg0L7RgiDQtdC00LjQvSDQutC70L7QvSDQtdC00L3QvtCy0YDQtdC80LXQvdC90L4iCiAKLSM6IGdpdGs6MjQ0NwotbXNnaWQgIlRyZWUiCi1tc2dzdHIgItCU0YrRgNCy0L4iCisjOiBidWlsdGluL2JyYW5jaC5jOjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAi0JIg0LrQu9C+0L3QsCDigJ4lc+KAnCDQstGB0LUg0L7RidC1INC90Y/QvNCwINC/0L7QtNCw0LLQsNC90LjRjy4iCiAKLSM6IGdpdGs6MjYxNyBnaXRrOjI2MzcKLW1zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCi1tc2dzdHIgItCg0LDQt9C70LjQutC4INC80LXQttC00YMg0YLQvtCy0LAg0Lgg0LjQt9Cx0YDQsNC90L7RgtC+IgorIzogYnVpbHRpbi9icmFuY2guYzo5NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICLQm9C40L/RgdCy0LAg0LrQu9C+0L0g0L3QsCDQuNC80LUg4oCeJXPigJwuIgogCi0jOiBnaXRrOjI2MTggZ2l0azoyNjM4Ci1tc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgotbXNnc3RyICLQoNCw0LfQu9C40LrQuCDQvNC10LbQtNGDINC40LfQsdGA0LDQvdC+0YLQviDQuCDRgtC+0LLQsCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTU2Cittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIKK21zZ3N0ciAi0J/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0LrQu9C+0L3QuCDQt9CwINC/0YDQtdC40LzQtdC90YPQstCw0L3QtSIKIAotIzogZ2l0azoyNjE5IGdpdGs6MjYzOQotbXNnaWQgIk1ha2UgcGF0Y2giCi1tc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC60YDRitC/0LrQsCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTYxCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAi0J/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0LrQu9C+0L3QuCDQt9CwINC30LDQtNCw0LLQsNC90LUg0L3QsCDRgdC70LXQtNC10L3QtSIKIAotIzogZ2l0azoyNjIwIGdpdGs6OTI1NAotbXNnaWQgIkNyZWF0ZSB0YWciCi1tc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC10YLQuNC60LXRgiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3Qgc2V0IHVwc3RyZWFtIG9mIEhFQUQgdG8gJXMgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiIgorItCh0LvQtdC00LXQvdC+0YLQviDQvtGCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC00LDQtNC1INC00LAg0LUg4oCeJXPigJwsINC30LDRidC+0YLQviDRgtC+INC90LUg0YHQvtGH0Lgg0LrRitC8ICIKKyLQvdC40LrQvtC5INC60LvQvtC9LiIKIAotIzogZ2l0azoyNjIxIGdpdGs6OTM3MQotbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgotbXNnc3RyICLQl9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviDQstGK0LIg0YTQsNC50LsiCisjOiBidWlsdGluL2JyYW5jaC5jOjk2OCBidWlsdGluL2JyYW5jaC5jOjk5MCBidWlsdGluL2JyYW5jaC5jOjEwMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAi0J3Rj9C80LAg0LrQu9C+0L0g0L3QsCDQuNC80LUg4oCeJXPigJwuIgogCi0jOiBnaXRrOjI2MjIgZ2l0azo5NDI4Ci1tc2dpZCAiQ3JlYXRlIG5ldyBicmFuY2giCi1tc2dzdHIgItCh0YrQt9C00LDQstCw0L3QtSDQvdCwINC90L7QsiDQutC70L7QvSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQndC1INGB0YrRidC10YHRgtCy0YPQstCwINC60LvQvtC9INC90LAg0LjQvNC1IOKAniVz4oCcLiIKIAotIzogZ2l0azoyNjIzCi1tc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCi1tc2dzdHIgItCe0YLQsdC40YDQsNC90LUg0L3QsCDRgtC+0LLQsCDQv9C+0LTQsNCy0LDQvdC1IgorIzogYnVpbHRpbi9icmFuY2guYzo5ODQKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAi0J/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0LrQu9C+0L3QuCDQt9CwINC80LDRhdCw0L3QtSDQvdCwINGB0LvQtdC00LXQvdC1IgogCi0jOiBnaXRrOjI2MjQKLW1zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgotbXNnc3RyICLQn9GA0LjQstC10LbQtNCw0L3QtSDQvdCwINCy0YrRgNGF0LAg0L3QsCDQutC70L7QvdCwINC60YrQvCDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisjOiBidWlsdGluL2JyYW5jaC5jOjk4OAorbXNnaWQgImNvdWxkIG5vdCB1bnNldCB1cHN0cmVhbSBvZiBIRUFEIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKyLQodC70LXQtNC10L3QvtGC0L4g0L7RgiDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQvNCw0YXQvdC1LCDQt9Cw0YnQvtGC0L4g0YLQviDQvdC1INGB0L7Rh9C4INC60YrQvCDQvdC40LrQvtC5INC60LvQvtC9LiIKIAotIzogZ2l0azoyNjI1Ci1tc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKLW1zZ3N0ciAi0J7RgtCx0LXQu9GP0LfQstCw0L3QtSDQvdCwINGC0L7QstCwINC/0L7QtNCw0LLQsNC90LUiCisjOiBidWlsdGluL2JyYW5jaC5jOjk5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgItCd0Y/QvNCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC60LvQvtC90YrRgiDigJ4lc+KAnCDQtNCwINGB0LvQtdC00Lgg0L3Rj9C60L7QuSDQtNGA0YPQsyIKIAotIzogZ2l0azoyNjI2Ci1tc2dpZCAiUmV0dXJuIHRvIG1hcmsiCi1tc2dzdHIgItCS0YDRitGJ0LDQvdC1INC60YrQvCDQvtGC0LHQtdC70Y/Qt9Cw0L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAwOAorbXNnaWQgIml0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gY3JlYXRlICdIRUFEJyBtYW51YWxseSIKK21zZ3N0ciAi0J3Rj9C80LAg0L3QuNC60LDQutGK0LIg0YHQvNC40YHRitC7INGA0YrRh9C90L4g0LTQsCDRgdGK0LfQtNCw0LLQsNGC0LUg4oCeSEVBROKAnC4iCiAKLSM6IGdpdGs6MjYyNwotbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgotbXNnc3RyICLQntGC0LrRgNC40LLQsNC90LUg0Lgg0L7RgtCx0LXQu9GP0LfQstCw0L3QtSDQvdCwINC90LDRgdC70LXQtNC90LjRhtC40YLQtSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAxNAorbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni1h4oCcINC4IOKAni1y4oCcINC90LAg4oCeZ2l0IGJyYW5jaOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDRgSDQuNC80LUg0L3QsCDQutC70L7QvSIKIAotIzogZ2l0azoyNjI4Ci1tc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCi1tc2dzdHIgItCh0YDQsNCy0L3QtdC90LjQtSDRgSDQvtGC0LHQtdC70Y/Qt9Cw0L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAxNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC0tc2V0LXVwc3RyZWFtIGZsYWcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLiBDb25zaWRlciB1c2luZyAtLSIKKyJ0cmFjayBvciAtLXNldC11cHN0cmVhbS10b1xuIgorbXNnc3RyICIiCisi0J7Qv9GG0LjRj9GC0LAg4oCeLS1zZXQtdXBzdHJlYW3igJwg0LLQtdGH0LUg0LUg0L7RgdGC0LDRgNGP0LvQsCDQuCDQv9GA0LXQtNGB0YLQvtC4INC00LAg0LHRitC00LUg0LzQsNGF0L3QsNGC0LAuICIKKyLQmNC30L/QvtC70LfQstCw0LnRgtC1IOKAni0tdHJhY2vigJwg0LjQu9C4IOKAni0tc2V0LXVwc3RyZWFtLXRv4oCcXG4iCiAKLSM6IGdpdGs6MjYyOSBnaXRrOjI2NDAKLW1zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKLW1zZ3N0ciAi0KDQsNC30LvQuNC60Lgg0LzQtdC20LTRgyDRgtC+0LLQsCDQuCDQvtGC0LHQtdC70Y/Qt9Cw0L3QvtGC0L4iCi0KLSM6IGdpdGs6MjYzMCBnaXRrOjI2NDEKLW1zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKLW1zZ3N0ciAi0KDQsNC30LvQuNC60Lgg0LzQtdC20LTRgyDQvtGC0LHQtdC70Y/Qt9Cw0L3QvtGC0L4g0Lgg0YLQvtCy0LAiCi0KLSM6IGdpdGs6MjYzMQotbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKLW1zZ3N0ciAi0J7RgtC80Y/QvdCwINC90LAg0YLQvtCy0LAg0L/QvtC00LDQstCw0L3QtSIKLQotIzogZ2l0azoyNjQ3Ci1tc2dpZCAiQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIgotbXNnc3RyICLQmNC30YLQtdCz0LvRj9C90LUg0L3QsCDRgtC+0LfQuCDQutC70L7QvSIKLQotIzogZ2l0azoyNjQ4Ci1tc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgotbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDRgtC+0LfQuCDQutC70L7QvSIKLQotIzogZ2l0azoyNjQ5Ci1tc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKLW1zZ3N0ciAi0JrQvtC/0LjRgNCw0L3QtSDQvdCwINC40LzQtdGC0L4g0L3QsCDQutC70L7QvdCwIgotCi0jOiBnaXRrOjI2NTYKLW1zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCi1tc2dzdHIgItCe0YLQsdC10LvRj9C30LLQsNC90LUg0Lgg0L3QsCDRgtC+0LLQsCIKLQotIzogZ2l0azoyNjU3Ci1tc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKLW1zZ3N0ciAi0J7RgtCx0LXQu9GP0LfQstCw0L3QtSDRgdCw0LzQviDQvdCwINGC0L7QstCwIgotCi0jOiBnaXRrOjI2NTgKLW1zZ2lkICJFeHRlcm5hbCBkaWZmIgotbXNnc3RyICLQktGK0L3RiNC90LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINGA0LDQt9C70LjQutC4IgotCi0jOiBnaXRrOjI2NTkKLW1zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgotbXNnc3RyICLQkNC90L7RgtC40YDQsNC90LUg0L3QsCDRgNC+0LTQuNGC0LXQu9GB0LrQvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKLQotIzogZ2l0azoyNjYwCi1tc2dpZCAiQ29weSBwYXRoIgotbXNnc3RyICLQmtC+0L/QuNGA0LDQvdC1INC90LAg0L/RitGC0Y8iCi0KLSM6IGdpdGs6MjY2NwotbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L/RgNC+0LjQt9GF0L7QtNCwINC90LAg0YLQvtC30Lgg0YDQtdC0IgotCi0jOiBnaXRrOjI2NjgKLW1zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCi1tc2dzdHIgItCY0LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeZ2l0IGd1aSBibGFtZeKAnCDQstGK0YDRhdGDINGC0L7Qt9C4INGA0LXQtCIKLQotIzogZ2l0azozMDE0CisjOiBidWlsdGluL2JyYW5jaC5jOjEwMzQKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgotIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgotIlxuIgotIkNvcHlyaWdodCDCqSAyMDA1LTIwMTQgUGF1bCBNYWNrZXJyYXNcbiIKLSJcbiIKLSJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgotbXNnc3RyICIiCi0iXG4iCi0iR2l0ayDigJQg0LLQuNC30YPQsNC70LjQt9Cw0YbQuNGPINC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiBHaXRcbiIKLSJcbiIKLSLQkNCy0YLQvtGA0YHQutC4INC/0YDQsNCy0LA6IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgotIlxuIgotItCY0LfQv9C+0LvQt9Cy0LDQudGC0LUg0Lgg0YDQsNC30L/RgNC+0YHRgtGA0LDQvdGP0LLQsNC50YLQtSDQv9GA0Lgg0YPRgdC70L7QstC40Y/RgtCwINC90LAg0J7Qn9CbINC90LAg0JPQndCjIgotCi0jOiBnaXRrOjMwMjIgZ2l0azozMDg5IGdpdGs6OTg1NwotbXNnaWQgIkNsb3NlIgotbXNnc3RyICLQl9Cw0YLQstCw0YDRj9C90LUiCi0KLSM6IGdpdGs6MzA0MwotbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgotbXNnc3RyICLQmtC70LDQstC40YjQvdC4INC60L7QvNCx0LjQvdCw0YbQuNC4IgotCi0jOiBnaXRrOjMwNDYKLW1zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCi1tc2dzdHIgItCa0LvQsNCy0LjRiNC90Lgg0LrQvtC80LHQuNC90LDRhtC40Lg6IgotCi0jOiBnaXRrOjMwNDgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtUT5cdFx0UXVpdCIKLW1zZ3N0ciAiPCVzLVE+XHRcdNCh0L/QuNGA0LDQvdC1INC90LAg0L/RgNC+0LPRgNCw0LzQsNGC0LAiCi0KLSM6IGdpdGs6MzA0OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCi1tc2dzdHIgIjwlcy1XPlx0XHTQl9Cw0YLQstCw0YDRj9C90LUg0L3QsCDQv9GA0L7Qt9C+0YDQtdGG0LAiCi0KLSM6IGdpdGs6MzA1MAotbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKLW1zZ3N0ciAiPEhvbWU+XHRcdNCa0YrQvCDQv9GK0YDQstC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgotCi0jOiBnaXRrOjMwNTEKLW1zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgotbXNnc3RyICI8RW5kPlx0XHTQmtGK0Lwg0L/QvtGB0LvQtdC00L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKLQotIzogZ2l0azozMDUyCi1tc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgotbXNnc3RyICI8VXA+LCBwLCBrXHTQldC00L3QviDQv9C+0LTQsNCy0LDQvdC1INC90LDQs9C+0YDQtSIKLQotIzogZ2l0azozMDUzCi1tc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKLW1zZ3N0ciAiPERvd24+LCBuLCBqXHTQldC00L3QviDQv9C+0LTQsNCy0LDQvdC1INC90LDQtNC+0LvRgyIKLQotIzogZ2l0azozMDU0Ci1tc2dpZCAiPExlZnQ+LCB6LCBoXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKLW1zZ3N0ciAiPExlZnQ+LCB6LCBoXHTQndCw0LfQsNC0INCyINC40YHRgtC+0YDQuNGP0YLQsCIKLQotIzogZ2l0azozMDU1Ci1tc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCi1tc2dzdHIgIjxSaWdodD4sIHgsIGxcdNCd0LDQv9GA0LXQtCDQsiDQuNGB0YLQvtGA0LjRj9GC0LAiCi0KLSM6IGdpdGs6MzA1NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgotbXNnc3RyICI8JXMtbj5cdNCa0YrQvCBuLdGC0LjRjyDRgNC+0LTQuNGC0LXQuyDQvdCwINGC0LXQutGD0YnQvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQsiDQuNGB0YLQvtGA0LjRj9GC0LAiCi0KLSM6IGdpdGs6MzA1NwotbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8UGFnZVVwPlx00KHRgtGA0LDQvdC40YbQsCDQvdCw0LPQvtGA0LUg0LIg0YHQv9C40YHRitC60LAg0YEg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKLQotIzogZ2l0azozMDU4Ci1tc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8UGFnZURvd24+XHTQodGC0YDQsNC90LjRhtCwINC90LDQtNC+0LvRgyDQsiDRgdC/0LjRgdGK0LrQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgotCi0jOiBnaXRrOjMwNTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCi1tc2dzdHIgIjwlcy1Ib21lPlx00JrRitC8INC90LDRh9Cw0LvQvtGC0L4g0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgotCi0jOiBnaXRrOjMwNjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKLW1zZ3N0ciAiPCVzLUVuZD5cdNCa0YrQvCDQutGA0LDRjyDQvdCwINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRj9GC0LAiCi0KLSM6IGdpdGs6MzA2MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKLW1zZ3N0ciAiPCVzLVVwPlx00KDQtdC0INC90LDQs9C+0YDQtSDQsiDRgdC/0LjRgdGK0LrQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y8iCi0KLSM6IGdpdGs6MzA2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1Eb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIGxpbmUiCi1tc2dzdHIgIjwlcy1Eb3duPlx00KDQtdC0INC90LDQtNC+0LvRgyDQsiDRgdC/0LjRgdGK0LrQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y8iCi0KLSM6IGdpdGs6MzA2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCi1tc2dzdHIgIjwlcy1QYWdlVXA+XHTQodGC0YDQsNC90LjRhtCwINC90LDQs9C+0YDQtSDQsiDRgdC/0LjRgdGK0LrQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y8iCi0KLSM6IGdpdGs6MzA2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgotbXNnc3RyICI8JXMtUGFnZURvd24+XHTQodGC0YDQsNC90LjRhtCwINC90LDQtNC+0LvRgyDQsiDRgdC/0LjRgdGK0LrQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y8iCi0KLSM6IGdpdGs6MzA2NQotbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKLW1zZ3N0ciAiPFNoaWZ0LVVwPlx00KLRitGA0YHQtdC90LUg0L3QsNC30LDQtCAo0LLQuNC30YPQsNC70L3QviDQvdCw0LPQvtGA0LUsINC40YHRgtC+0YDQuNGH0LXRgdC60Lgg4oCUINC/0L7RgdC70LXQtNCy0LDRidC4KSIKLQotIzogZ2l0azozMDY2Ci1tc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCi1tc2dzdHIgIiIKLSI8U2hpZnQtRG93bj5cdNCi0YrRgNGB0LXQvdC1INC90LDQv9GA0LXQtCAo0LLQuNC30YPQsNC70L3QviDQvdCw0LTQvtC70YMsINC40YHRgtC+0YDQuNGH0LXRgdC60Lgg4oCUINC/0YDQtdC00YXQvtC20LTQsNGJ0LgpIgotCi0jOiBnaXRrOjMwNjcKLW1zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPERlbGV0ZT4sIGJcdNCh0YLRgNCw0L3QuNGG0LAg0L3QsNCz0L7RgNC1INCyINC40LfQs9C70LXQtNCwINC30LAg0YDQsNC30LvQuNC60LgiCi0KLSM6IGdpdGs6MzA2OAotbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgotbXNnc3RyICI8QmFja3NwYWNlPlx00KHRgtGA0LDQvdC40YbQsCDQvdCw0LTQvtC70YMg0LIg0LjQt9Cz0LvQtdC00LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKLQotIzogZ2l0azozMDY5Ci1tc2dpZCAiPFNwYWNlPlx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gb25lIHBhZ2UiCi1tc2dzdHIgIjxTcGFjZT5cdFx00KHRgtGA0LDQvdC40YbQsCDQvdCw0LTQvtC70YMg0LIg0LjQt9Cz0LvQtdC00LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKLQotIzogZ2l0azozMDcwCi1tc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgotbXNnc3RyICJ1XHRcdDE4INGA0LXQtNCwINC90LDQs9C+0YDQtSDQsiDQuNC30LPQu9C10LTQsCDQt9CwINGA0LDQt9C70LjQutC4IgotCi0jOiBnaXRrOjMwNzEKLW1zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKLW1zZ3N0ciAiZFx0XHQxOCDRgNC10LTQsCDQvdCw0LTQvtC70YMg0LIg0LjQt9Cz0LvQtdC00LAg0LfQsCDRgNCw0LfQu9C40LrQuCIKLQotIzogZ2l0azozMDcyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLUY+XHRcdEZpbmQiCi1tc2dzdHIgIjwlcy1GPlx0XHTQotGK0YDRgdC10L3QtSIKLQotIzogZ2l0azozMDczCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKLW1zZ3N0ciAiPCVzLUc+XHRcdNCa0YrQvCDRgdC70LXQtNCy0LDRidCw0YLQsCDQv9C+0Y/QstCwIgotCi0jOiBnaXRrOjMwNzQKLW1zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgotbXNnc3RyICI8UmV0dXJuPlx00JrRitC8INGB0LvQtdC00LLQsNGJ0LDRgtCwINC/0L7Rj9Cy0LAiCi0KLSM6IGdpdGs6MzA3NQotbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgotbXNnc3RyICJnXHRcdNCa0YrQvCDQv9C+0YHQu9C10LTQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgotCi0jOiBnaXRrOjMwNzYKLW1zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgotbXNnc3RyICIvXHRcdNCk0L7QutGD0YEg0LLRitGA0YXRgyDQv9C+0LvQtdGC0L4g0LfQsCDRgtGK0YDRgdC10L3QtSIKLQotIzogZ2l0azozMDc3Ci1tc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgotbXNnc3RyICI/XHRcdNCa0YrQvCDQv9GA0LXQtNC40YjQvdCw0YLQsCDQv9C+0Y/QstCwIgotCi0jOiBnaXRrOjMwNzgKLW1zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgotbXNnc3RyICJmXHRcdNCh0LvQtdC00LLQsNGJINGE0LDQudC7INCyINC40LfQs9C70LXQtNCwINC30LAg0YDQsNC30LvQuNC60LgiCi0KLSM6IGdpdGs6MzA3OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKLW1zZ3N0ciAiPCVzLVM+XHRcdNCi0YrRgNGB0LXQvdC1INC90LAg0YHQu9C10LTQstCw0YnQsNGC0LAg0L/QvtGP0LLQsCDQsiDQuNC30LPQu9C10LTQsCDQt9CwINGA0LDQt9C70LjQutC4IgotCi0jOiBnaXRrOjMwODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgotbXNnc3RyICI8JXMtUj5cdFx00KLRitGA0YHQtdC90LUg0L3QsCDQv9GA0LXQtNC40YjQvdCw0YLQsCDQv9C+0Y/QstCwINCyINC40LfQs9C70LXQtNCwINC30LAg0YDQsNC30LvQuNC60LgiCi0KLSM6IGdpdGs6MzA4MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1LUCs+XHTQn9C+LdCz0L7Qu9GP0Lwg0YDQsNC30LzQtdGAINC90LAg0YjRgNC40YTRgtCwIgotCi0jOiBnaXRrOjMwODIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLXBsdXM+XHTQn9C+LdCz0L7Qu9GP0Lwg0YDQsNC30LzQtdGAINC90LAg0YjRgNC40YTRgtCwIgotCi0jOiBnaXRrOjMwODMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtS1AtPlx00J/Qvi3QvNCw0LvRitC6INGA0LDQt9C80LXRgCDQvdCwINGI0YDQuNGE0YLQsCIKLQotIzogZ2l0azozMDg0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtbWludXM+XHTQn9C+LdC80LDQu9GK0Log0YDQsNC30LzQtdGAINC90LAg0YjRgNC40YTRgtCwIgotCi0jOiBnaXRrOjMwODUKLW1zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKLW1zZ3N0ciAiPEY1Plx0XHTQntCx0L3QvtCy0Y/QstCw0L3QtSIKLQotIzogZ2l0azozNTUwIGdpdGs6MzU1OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INGB0YrQt9C00LDQstCw0L3QtdGC0L4g0L3QsCDQstGA0LXQvNC10L3QvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDigJ4lc+KAnDoiCi0KLSM6IGdpdGs6MzU3MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC/0L7Qu9GD0YfQsNCy0LDQvdC10YLQviDQvdCwIOKAniVz4oCcINC+0YIgJXM6IgotCi0jOiBnaXRrOjM2MzUKLW1zZ2lkICJjb21tYW5kIGZhaWxlZDoiCi1tc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCwOiIKLQotIzogZ2l0azozNzg0Ci1tc2dpZCAiTm8gc3VjaCBjb21taXQiCi1tc2dzdHIgItCi0LDQutC+0LLQsCDQv9C+0LTQsNCy0LDQvdC1INC90Y/QvNCwIgotCi0jOiBnaXRrOjM3OTgKLW1zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCi1tc2dzdHIgIuKAnmdpdCBndWkgYmxhbWXigJw6INC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCwOiIKLQotIzogZ2l0azozODI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKLW1zZ3N0ciAi0JLRitGA0YXRitGCINC30LAg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L06ICVzIgotCi0jOiBnaXRrOjM4MzcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQv9GA0L7Rh9C40YLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsDogJXMiCi0KLSM6IGdpdGs6Mzg2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCi1tc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgYmxhbWXigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YLQsNGA0YLQuNGA0LDQvdCwOiAlcyIKLQotIzogZ2l0azozODY1IGdpdGs6Njc1NAotbXNnaWQgIlNlYXJjaGluZyIKLW1zZ3N0ciAi0KLRitGA0YHQtdC90LUiCi0KLSM6IGdpdGs6Mzg5NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQuNC30L/RitC70L3QtdC90LjQtdGC0L4g0L3QsCDigJ5naXQgYmxhbWXigJw6ICVzIgotCi0jOiBnaXRrOjM5MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgotbXNnc3RyICLQotC+0LfQuCDRgNC10LQg0LjQtNCy0LAg0L7RgiDQv9C+0LTQsNCy0LDQvdC10YLQviAlcywg0LrQvtC10YLQviDQvdC1INC1INCyINC40LfQs9C70LXQtNCwIgotCi0jOiBnaXRrOjM5MzkKLW1zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgotbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQstGK0L3RiNC90LDRgtCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDRgNCw0LfQu9C40LrQuDoiCi0KLSM6IGdpdGs6NDA3MAotbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgotbXNnc3RyICLQlNC10YTQuNC90LjRhtC40Y8g0L3QsCDQuNC30LPQu9C10LQg0LIgR2l0ayIKLQotIzogZ2l0azo0MDc0Ci1tc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgotbXNnc3RyICLQl9Cw0L/QsNC30LLQsNC90LUg0L3QsCDRgtC+0LfQuCDQuNC30LPQu9C10LQiCi0KLSM6IGdpdGs6NDA3NQotbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCi1tc2dzdHIgItCj0LrQsNC30LDRgtC10LvQuCAo0YHQv9C40YHRitC6INGBINGA0LDQt9C00LXQu9C40YLQtdC7INC40L3RgtC10YDQstCw0LspOiIKLQotIzogZ2l0azo0MDc2Ci1tc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKLW1zZ3N0ciAi0JrQu9C+0L3QuCDQuCDQtdGC0LjQutC10YLQuDoiCi0KLSM6IGdpdGs6NDA3NwotbXNnaWQgIkFsbCByZWZzIgotbXNnc3RyICLQktGB0LjRh9C60Lgg0YPQutCw0LfQsNGC0LXQu9C4IgotCi0jOiBnaXRrOjQwNzgKLW1zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKLW1zZ3N0ciAi0JLRgdC40YfQutC4ICjQu9C+0LrQsNC70L3QuCkg0LrQu9C+0L3QuCIKLQotIzogZ2l0azo0MDc5Ci1tc2dpZCAiQWxsIHRhZ3MiCi1tc2dzdHIgItCS0YHQuNGH0LrQuCDQtdGC0LjQutC10YLQuCIKLQotIzogZ2l0azo0MDgwCi1tc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKLW1zZ3N0ciAi0JLRgdC40YfQutC4INGB0LvQtdC00Y/RidC4INC60LvQvtC90LgiCi0KLSM6IGdpdGs6NDA4MQotbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCi1tc2dzdHIgItCY0L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L/QvtC00LDQstCw0L3QtSAo0YDQtdCzLiDQuNC30YAuKToiCi0KLSM6IGdpdGs6NDA4MgotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgItCQ0LLRgtC+0YA6IgotCi0jOiBnaXRrOjQwODMKLW1zZ2lkICJDb21taXR0ZXI6IgotbXNnc3RyICLQn9C+0LTQsNC7OiIKLQotIzogZ2l0azo0MDg0Ci1tc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICLQodGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LU6IgotCi0jOiBnaXRrOjQwODUKLW1zZ2lkICJNYXRjaGVzIGFsbCBDb21taXQgSW5mbyBjcml0ZXJpYSIKLW1zZ3N0ciAi0KHRitCy0L/QsNC00LXQvdC40LUg0L/QviDQstGB0LjRh9C60Lgg0YXQsNGA0LDQutGC0LXRgNC40YHRgtC40LrQuCDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+IgotCi0jOiBnaXRrOjQwODYKLW1zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgotbXNnc3RyICLQndC1INGB0YrQstC/0LDQtNCwINC/0L4g0L3QuNC60L7RjyDQvtGCINGF0LDRgNCw0LrRgtC10YDQuNGB0YLQuNC60LjRgtC1INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4iCi0KLSM6IGdpdGs6NDA4NwotbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgotbXNnc3RyICLQn9GA0L7QvNC10L3QuCDQv9C+INGE0LDQudC70L7QstC10YLQtToiCi0KLSM6IGdpdGs6NDA4OAotbXNnaWQgIkZpeGVkIFN0cmluZyIKLW1zZ3N0ciAi0JTQvtGB0LvQvtCy0LXQvSDQvdC40LciCi0KLSM6IGdpdGs6NDA4OQotbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKLW1zZ3N0ciAi0KDQtdCz0YPQu9GP0YDQtdC9INC40LfRgNCw0LciCi0KLSM6IGdpdGs6NDA5MAotbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgotbXNnc3RyICLQndC40Lcg0LfQsCDRgtGK0YDRgdC10L3QtToiCi0KLSM6IGdpdGs6NDA5MQotbXNnaWQgIiIKLSJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgotIjE1OjI3OjM4XCIpOiIKLW1zZ3N0ciAiIgotItCU0LDRgtCwINC90LAg0L/QvtC00LDQstCw0L3QtSAo4oCeMiB3ZWVrcyBhZ2/igJwgKNC/0YDQtdC00LggMiDRgdC10LTQvNC40YbQuCksIOKAnjIwMDktMDMtMTcgMTU6Mjc6MzjigJwsICIKLSLigJ5NYXJjaCAxNywgMjAwOSAxNToyNzozOOKAnCk6IgotCi0jOiBnaXRrOjQwOTIKLW1zZ2lkICJTaW5jZToiCi1tc2dzdHIgItCe0YI6IgotCi0jOiBnaXRrOjQwOTMKLW1zZ2lkICJVbnRpbDoiCi1tc2dzdHIgItCU0L46IgotCi0jOiBnaXRrOjQwOTQKLW1zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKLW1zZ3N0ciAiIgotItCe0LPRgNCw0L3QuNGH0LDQstCw0L3QtSDQuC/QuNC70Lgg0L/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDQvtC/0YDQtdC00LXQu9C10L0g0LHRgNC+0Lkg0LLQtdGA0YHQuNC4ICjQvdC10L7RgtGA0LjRhtCw0YLQtdC70L3QviDRhtGP0LvQviAiCi0i0YfQuNGB0LvQvik6IgotCi0jOiBnaXRrOjQwOTUKLW1zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCi1tc2dzdHIgItCR0YDQvtC5INC/0L7QutCw0LfQsNC90Lg6IgotCi0jOiBnaXRrOjQwOTYKLW1zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCi1tc2dzdHIgItCR0YDQvtC5INC/0YDQtdGB0LrQvtGH0LXQvdC4OiIKLQotIzogZ2l0azo0MDk3Ci1tc2dpZCAiTWlzY2VsbGFuZW91cyBvcHRpb25zOiIKLW1zZ3N0ciAi0KDQsNC30L3QuDoiCi0KLSM6IGdpdGs6NDA5OAotbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKLW1zZ3N0ciAi0J/QvtC00YDQtdC20LTQsNC90LUg0L/QviDQtNCw0YLQsCIKLQotIzogZ2l0azo0MDk5Ci1tc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCi1tc2dzdHIgItCe0YLQsdC10LvRj9C30LLQsNC90LUg0L3QsCDRgdGC0YDQsNC90LjRgtC1INC/0L4g0LrQu9C+0L3QsCIKLQotIzogZ2l0azo0MTAwCi1tc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgotbXNnc3RyICLQodCw0LzQviDQv9GK0YDQstC40Y8g0YDQvtC00LjRgtC10LsiCi0KLSM6IGdpdGs6NDEwMQotbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgotbXNnc3RyICLQntC/0YDQvtGB0YLQtdC90LAg0LjRgdGC0L7RgNC40Y8iCi0KLSM6IGdpdGs6NDEwMgotbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgotbXNnc3RyICLQlNC+0L/RitC70L3QuNGC0LXQu9C90Lgg0LDRgNCz0YPQvNC10L3RgtC4INC60YrQvCDigJ5naXQgbG9n4oCcOiIKLQotIzogZ2l0azo0MTAzCi1tc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCi1tc2dzdHIgItCS0YrQstC10LTQtdGC0LUg0YTQsNC50LvQvtCy0LXRgtC1INC4INC00LjRgNC10LrRgtC+0YDQuNC40YLQtSDQt9CwINCy0LrQu9GO0YfQstCw0L3QtSwg0L/QviDQtdC70LXQvNC10L3RgiDQvdCwINGA0LXQtCIKLQotIzogZ2l0azo0MTA0Ci1tc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCi1tc2dzdHIgIiIKLSLQmtC+0LzQsNC90LTQsCDQt9CwINCz0LXQvdC10YDQuNGA0LDQvdC10YLQviDQvdCwINC00L7Qv9GK0LvQvdC40YLQtdC70L3QuCDQv9C+0LTQsNCy0LDQvdC40Y8sINC60L7QuNGC0L4g0LTQsCDQsdGK0LTQsNGCINCy0LrQu9GO0YfQtdC90Lg6IgotCi0jOiBnaXRrOjQyMjgKLW1zZ2lkICJHaXRrOiBlZGl0IHZpZXciCi1tc2dzdHIgIkdpdGs6INGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDQuNC30LPQu9C10LQiCi0KLSM6IGdpdGs6NDIzNgotbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgotbXNnc3RyICLigJQg0LrRgNC40YLQtdGA0LjQuCDQt9CwINC40LfQsdC+0YAg0L3QsCDQstC10YDRgdC40LgiCi0KLSM6IGdpdGs6NDI0MQotbXNnaWQgIlZpZXcgTmFtZSIKLW1zZ3N0ciAi0JjQvNC1INC90LAg0LjQt9Cz0LvQtdC0IgotCi0jOiBnaXRrOjQzMTYKLW1zZ2lkICJBcHBseSAoRjUpIgotbXNnc3RyICLQn9GA0LjQu9Cw0LPQsNC90LUgKEY1KSIKLQotIzogZ2l0azo0MzU0Ci1tc2dpZCAiRXJyb3IgaW4gY29tbWl0IHNlbGVjdGlvbiBhcmd1bWVudHM6IgotbXNnc3RyICLQk9GA0LXRiNC60LAg0LIg0LDRgNCz0YPQvNC10L3RgtC40YLQtSDQt9CwINC40LfQsdC+0YAg0L3QsCDQv9C+0LTQsNCy0LDQvdC40Y86IgotCi0jOiBnaXRrOjQ0MDkgZ2l0azo0NDYyIGdpdGs6NDkyNCBnaXRrOjQ5MzggZ2l0azo2MjA4IGdpdGs6MTIzNzMgZ2l0azoxMjM3NAotbXNnaWQgIk5vbmUiCi1tc2dzdHIgItCd0Y/QvNCwIgotCi0jOiBnaXRrOjUwMjEgZ2l0azo1MDI2Ci1tc2dpZCAiRGVzY2VuZGFudCIKLW1zZ3N0ciAi0J3QsNGB0LvQtdC00L3QuNC6IgotCi0jOiBnaXRrOjUwMjIKLW1zZ2lkICJOb3QgZGVzY2VuZGFudCIKLW1zZ3N0ciAi0J3QtSDQtSDQvdCw0YHQu9C10LTQvdC40LoiCi0KLSM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKLW1zZ2lkICJBbmNlc3RvciIKLW1zZ3N0ciAi0J/RgNC10LTRiNC10YHRgtCy0LXQvdC40LoiCi0KLSM6IGdpdGs6NTAzMAotbXNnaWQgIk5vdCBhbmNlc3RvciIKLW1zZ3N0ciAi0J3QtSDQtSDQv9GA0LXQtNGI0LXRgdGC0LLQtdC90LjQuiIKLQotIzogZ2l0azo1MzI0Ci1tc2dpZCAiTG9jYWwgY2hhbmdlcyBjaGVja2VkIGluIHRvIGluZGV4IGJ1dCBub3QgY29tbWl0dGVkIgotbXNnc3RyICLQm9C+0LrQsNC70L3QuCDQv9GA0L7QvNC10L3QuCDQtNC+0LHQsNCy0LXQvdC4INC60YrQvCDQuNC90LTQtdC60YHQsCwg0L3QviDQvdC10L/QvtC00LDQtNC10L3QuCIKLQotIzogZ2l0azo1MzYwCi1tc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCi1tc2dzdHIgItCb0L7QutCw0LvQvdC4INC/0YDQvtC80LXQvdC4INC40LfQstGK0L0g0LjQvdC00LXQutGB0LAiCi0KLSM6IGdpdGs6NzEzNAotbXNnaWQgImFuZCBtYW55IG1vcmUiCi1tc2dzdHIgItC4INC+0YnQtSDQvNC90L7Qs9C+IgotCi0jOiBnaXRrOjcxMzcKLW1zZ2lkICJtYW55IgotbXNnc3RyICLQvNC90L7Qs9C+IgotCi0jOiBnaXRrOjczMjgKLW1zZ2lkICJUYWdzOiIKLW1zZ3N0ciAi0JXRgtC40LrQtdGC0Lg6IgotCi0jOiBnaXRrOjczNDUgZ2l0azo3MzUxIGdpdGs6ODgyNQotbXNnaWQgIlBhcmVudCIKLW1zZ3N0ciAi0KDQvtC00LjRgtC10LsiCi0KLSM6IGdpdGs6NzM1NgotbXNnaWQgIkNoaWxkIgotbXNnc3RyICLQlNC10YLQtSIKLQotIzogZ2l0azo3MzY1Ci1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICLQmtC70L7QvSIKLQotIzogZ2l0azo3MzY4Ci1tc2dpZCAiRm9sbG93cyIKLW1zZ3N0ciAi0KHQu9C10LTQstCwIgotCi0jOiBnaXRrOjczNzEKLW1zZ2lkICJQcmVjZWRlcyIKLW1zZ3N0ciAi0J/RgNC10LTRiNC10YHRgtCy0LAiCi0KLSM6IGdpdGs6Nzk2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC/0L7Qu9GD0YfQsNCy0LDQvdC10YLQviDQvdCwINGA0LDQt9C70LjQutC40YLQtTogJXMiCi0KLSM6IGdpdGs6ODY1MAotbXNnaWQgIkdvdG86IgotbXNnc3RyICLQmtGK0Lwg0YDQtdC0OiIKLQotIzogZ2l0azo4NjcxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCi1tc2dzdHIgItCh0YrQutGA0LDRgtC10L3QsNGC0LAg0YHRg9C80LAg0L/QviBTSEExICVzINC90LUg0LUg0LXQtNC90L7Qt9C90LDRh9C90LAiCi0KLSM6IGdpdGs6ODY3OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAi0J3QtdC/0L7Qt9C90LDRgtCwINCy0LXRgNGB0LjRjyAlcyIKLQotIzogZ2l0azo4Njg4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCi1tc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDRgdGD0LzQsCDQv9C+IFNIQTEgJXMiCi0KLSM6IGdpdGs6ODY5MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgotbXNnc3RyICLQktC10YDRgdC40Y8gJXMg0L3QtSDQtSDQsiDRgtC10LrRg9GJ0LjRjyDQuNC30LPQu9C10LQiCi0KLSM6IGdpdGs6ODgzMiBnaXRrOjg4NDcKLW1zZ2lkICJEYXRlIgotbXNnc3RyICLQlNCw0YLQsCIKLQotIzogZ2l0azo4ODM1Ci1tc2dpZCAiQ2hpbGRyZW4iCi1tc2dzdHIgItCU0LXRhtCwIgotCi0jOiBnaXRrOjg4OTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKLW1zZ3N0ciAi0JfQsNC90YPQu9GP0LLQsNC90LUg0L3QsCDQutC70L7QvdCwIOKAniVz4oCcINC60YrQvCDRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCi0KLSM6IGdpdGs6ODkwMAotbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgotbXNnc3RyICLQndC10YHQstGK0YDQt9Cw0L0g0LLRgNGK0YU6INC90LXQstGK0LfQvNC+0LbQvdC+INC30LDQvdGD0LvRj9Cy0LDQvdC1IgotCi0jOiBnaXRrOjkwMDUgZ2l0azo5MDExCi1tc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKLW1zZ3N0ciAi0J/RgNC+0L/Rg9GB0LrQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviDQvdCwINGB0LvQuNCy0LDQvdC10YLQviIKLQotIzogZ2l0azo5MDIwIGdpdGs6OTAyNQotbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQv9C+0LvRg9GH0LDQstCw0L3QtdGC0L4g0L3QsCDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNCwINC90LAgIgotCi0jOiBnaXRrOjkwMjEgZ2l0azo5MDI2Ci1tc2dpZCAiIC0gc3RvcHBpbmdcbiIKLW1zZ3N0ciAiIOKAlCDRgdC/0LjRgNCw0L3QtVxuIgotCi0jOiBnaXRrOjkwMzEgZ2l0azo5MDM0IGdpdGs6OTA0MiBnaXRrOjkwNTYgZ2l0azo5MDY1Ci1tc2dpZCAiQ29tbWl0ICIKLW1zZ3N0ciAi0J/QvtC00LDQstCw0L3QtSIKLQotIzogZ2l0azo5MDM1Ci1tc2dpZCAiIgotIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgotIiAgICAgICAiCi1tc2dzdHIgIiIKLSIg0LUg0YHRitGJ0LDRgtCwINC60YDRitC/0LrQsCDQutCw0YLQvlxuIgotIiAgICAgICAiCi0KLSM6IGdpdGs6OTA0MwotbXNnaWQgIiIKLSIgZGlmZmVycyBmcm9tXG4iCi0iICAgICAgICIKLW1zZ3N0ciAiIgotIiDRgdC1INGA0LDQt9C70LjRh9Cw0LLQsCDQvtGCXG4iCi0iICAgICAgICIKLQotIzogZ2l0azo5MDQ1Ci1tc2dpZCAiIgotIkRpZmYgb2YgY29tbWl0czpcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIG1ha2UgJyVzJyB0cmFjayAnJXMnLCBkbyB0aGlzOlxuIgogIlxuIgogbXNnc3RyICIiCi0i0KDQsNC30LvQuNC60LAg0LzQtdC20LTRgyDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwOlxuIgorIlxuIgorItCX0LAg0LTQsCDQvdCw0LrQsNGA0LDRgtC1IOKAniVz4oCcINC00LAg0YHQu9C10LTQuCDigJ4lc+KAnCwg0LjQt9C/0YrQu9C90LXRgtC1INGB0LvQtdC00L3QsNGC0LAg0LrQvtC80LDQvdC00LA6XG4iCiAiXG4iCiAKLSM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKLW1zZ3N0ciAiINC40LzQsCAlcyDQtNC10YbQsCDigJQg0YHQv9C40YDQsNC90LVcbiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAzNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgZ2l0IGJyYW5jaCAtZCAlc1xuIgorbXNnc3RyICIgICAgZ2l0IGJyYW5jaCAtZCAlc1xuIgogCi0jOiBnaXRrOjkwODUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QsNC30LLQsNC90LXRgtC+INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L4g0LLRitCyINGE0LDQudC7OiAlcyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorbXNnc3RyICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgogCi0jOiBnaXRrOjkwOTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INC40LfRh9C40YHQu9GP0LLQsNC90LXRgtC+INC90LAg0YDQsNC30LvQuNC60LjRgtC1INC80LXQttC00YMg0L/QvtC00LDQstCw0L3QuNGP0YLQsDogJXMiCisjOiBidWlsdGluL2J1bmRsZS5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAi0J/RgNCw0YLQutCw0YLQsCDigJ4lc+KAnCDQtSDQvdCw0YDQtdC0XG4iCiAKLSM6IGdpdGs6OTEzNwotbXNnaWQgIlRvcCIKLW1zZ3N0ciAi0J3QsNC5LdCz0L7RgNC1IgorIzogYnVpbHRpbi9idW5kbGUuYzo2NAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgItCX0LAg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC/0YDQsNGC0LrQsCDQtSDQvdC10L7QsdGF0L7QtNC40LzQviDRhdGA0LDQvdC40LvQuNGJ0LUuIgogCi0jOiBnaXRrOjkxMzgKLW1zZ2lkICJGcm9tIgotbXNnc3RyICLQntGCIgorIzogYnVpbHRpbi9idW5kbGUuYzo2OAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAi0JfQsCDQv9GA0LjQtdC80LDQvdC10YLQviDQvdCwINC/0YDQsNGC0LrQsCDQtSDQvdC10L7QsdGF0L7QtNC40LzQviDRhdGA0LDQvdC40LvQuNGJ0LUuIgogCi0jOiBnaXRrOjkxNDMKLW1zZ2lkICJUbyIKLW1zZ3N0ciAi0JTQviIKLQotIzogZ2l0azo5MTY3Ci1tc2dpZCAiR2VuZXJhdGUgcGF0Y2giCi1tc2dzdHIgItCT0LXQvdC10YDQuNGA0LDQvdC1INC90LAg0LrRgNGK0L/QutCwIgotCi0jOiBnaXRrOjkxNjkKLW1zZ2lkICJGcm9tOiIKLW1zZ3N0ciAi0J7RgjoiCi0KLSM6IGdpdGs6OTE3OAotbXNnaWQgIlRvOiIKLW1zZ3N0ciAi0JTQvjoiCi0KLSM6IGdpdGs6OTE4NwotbXNnaWQgIlJldmVyc2UiCi1tc2dzdHIgItCe0LHRgNGK0YnQsNC90LUiCi0KLSM6IGdpdGs6OTE4OSBnaXRrOjkzODUKLW1zZ2lkICJPdXRwdXQgZmlsZToiCi1tc2dzdHIgItCX0LDQv9Cw0LfQstCw0L3QtSDQstGK0LIg0YTQsNC50LvQsDoiCi0KLSM6IGdpdGs6OTE5NQotbXNnaWQgIkdlbmVyYXRlIgotbXNnc3RyICLQk9C10L3QtdGA0LjRgNCw0L3QtSIKLQotIzogZ2l0azo5MjMzCi1tc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgotbXNnc3RyICLQk9GA0LXRiNC60LAg0L/RgNC4INGB0YrQt9C00LDQstCw0L3QtdGC0L4g0L3QsCDQutGA0YrQv9C60LA6IgotCi0jOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAotbXNnaWQgIklEOiIKLW1zZ3N0ciAi0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YA6IgotCi0jOiBnaXRrOjkyNjUKLW1zZ2lkICJUYWcgbmFtZToiCi1tc2dzdHIgItCY0LzQtSDQvdCwINC10YLQuNC60LXRgjoiCi0KLSM6IGdpdGs6OTI2OAotbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgotbXNnc3RyICLQodGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0LXRgtC40LrQtdGCINC1INC90LXQt9Cw0LTRitC70LbQuNGC0LXQu9C90L4iCi0KLSM6IGdpdGs6OTI3MAotbXNnaWQgIlRhZyBtZXNzYWdlOiIKLW1zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC1INC30LAg0LXRgtC40LrQtdGCOiIKLQotIzogZ2l0azo5Mjc0IGdpdGs6OTQzOQotbXNnaWQgIkNyZWF0ZSIKLW1zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1IgotCi0jOiBnaXRrOjkyOTIKLW1zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCi1tc2dzdHIgItCb0LjQv9GB0LLQsCDQuNC80LUg0L3QsCDQtdGC0LjQutC10YIiCi0KLSM6IGdpdGs6OTI5NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCi1tc2dzdHIgItCV0YLQuNC60LXRgtGK0YIg4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCi0KLSM6IGdpdGs6OTMwNgotbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCi1tc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC10YLQuNC60LXRgjoiCi0KLSM6IGdpdGs6OTM4MgotbXNnaWQgIkNvbW1hbmQ6IgotbXNnc3RyICLQmtC+0LzQsNC90LTQsDoiCi0KLSM6IGdpdGs6OTM5MAotbXNnaWQgIldyaXRlIgotbXNnc3RyICLQl9Cw0L/QsNC30LLQsNC90LUiCi0KLSM6IGdpdGs6OTQwOAotbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKLW1zZ3N0ciAi0JPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QsNC30LLQsNC90LXRgtC+INC90LAg0L/QvtC00LDQstCw0L3QtdGC0L46IgotCi0jOiBnaXRrOjk0MzUKLW1zZ2lkICJOYW1lOiIKLW1zZ3N0ciAi0JjQvNC1OiIKLQotIzogZ2l0azo5NDU4Ci1tc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKLW1zZ3N0ciAi0KPQutCw0LbQtdGC0LUg0LjQvNC1INC30LAg0L3QvtCy0LjRjyDQutC70L7QvSIKLQotIzogZ2l0azo5NDYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCi1tc2dzdHIgItCa0LvQvtC90YrRgiDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4g0JTQsCDQsdGK0LTQtSDQu9C4INC/0YDQtdC30LDQv9C40YHQsNC9PyIKLQotIzogZ2l0azo5NTMwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCi1tc2dzdHIgIiIKLSLQn9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQstC10YfQtSDQtSDQstC60LvRjtGH0LXQvdC+INCyINC60LvQvtC90LAg4oCeJXPigJwg4oCUINC00LAg0LHRitC00LUg0LvQuCDQv9GA0LjQu9C+0LbQtdC90L4g0L7RgtC90L7QstC+PyIKLQotIzogZ2l0azo5NTM1Ci1tc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCi1tc2dzdHIgItCe0YLQsdC40YDQsNC90LUiCi0KLSM6IGdpdGs6OTU0NAotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jYXQtZmlsZS5jOjM2OQogbXNnaWQgIiIKLSJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIGZpbGUgJyVzJy5cbiIKLSJQbGVhc2UgY29tbWl0LCByZXNldCBvciBzdGFzaCB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdfC1zIFstLWFsbG93LXVua25vd24tdHlwZV18LWV8LXB8IgorIjx0eXBlPnwtLXRleHRjb252KSA8b2JqZWN0PiIKIG1zZ3N0ciAiIgotItCd0LXRg9GB0L/QtdGI0L3QviDQvtGC0LHQuNGA0LDQvdC1LCDQt9Cw0YnQvtGC0L4g0LLRitCyINGE0LDQudC70LAg4oCeJXPigJwg0LjQvNCwINC70L7QutCw0LvQvdC4INC/0YDQvtC80LXQvdC4LlxuIgotItCf0L7QtNCw0LnRgtC1LCDQt9Cw0L3Rg9C70LXRgtC1INC40LvQuCDQs9C4INGB0LrQsNGC0LDQudGC0LUg0Lgg0L/RgNC+0LHQstCw0LnRgtC1INC+0YLQvdC+0LLQvi4iCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXSB8IC1lIHwgLSIKKyJwIHwg0JLQmNCUIHwgLS10ZXh0Y29udikg0J7QkdCV0JrQoiIKIAotIzogZ2l0azo5NTUwCisjOiBidWlsdGluL2NhdC1maWxlLmM6MzcwCiBtc2dpZCAiIgotIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgotIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gPCA8bGlzdC1vZi0iCisib2JqZWN0cz4iCiBtc2dzdHIgIiIKLSLQndC10YPRgdC/0LXRiNC90L4g0L7RgtCx0LjRgNCw0L3QtSDQv9C+0YDQsNC00Lgg0LrQvtC90YTQu9C40LrRgtC4INC/0YDQuCDRgdC70LjQstCw0L3QtS5cbiIKLSLQmNGB0LrQsNGC0LUg0LvQuCDQtNCwINCz0Lgg0LrQvtGA0LjQs9C40YDQsNGC0LUg0YfRgNC10Lcg4oCeZ2l0IGNpdG9vbOKAnD8iCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSA8INCh0J/QmNCh0KrQml/QoV/QntCR0JXQmtCi0JgiCiAKLSM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKLW1zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKLW1zZ3N0ciAi0J3QtSDRgdCwINC/0L7QtNCw0LTQtdC90Lgg0L/RgNC+0LzQtdC90LgiCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDA3Cittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICIiCisi0JLQmNCU0YrRgiDQvNC+0LbQtSDQtNCwINC1OiDigJ5ibG9i4oCcICjQvtCx0LXQutGCIEJMT0IpLCDigJ50cmVl4oCcICjQtNGK0YDQstC+KSwg4oCeY29tbWl04oCcICjQv9C+0LTQsNCy0LDQvdC1KSwgIgorIuKAnnRhZ+KAnCAo0LXRgtC40LrQtdGCKSIKIAotIzogZ2l0azo5NTkzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCi1tc2dzdHIgItCf0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcINC90LUg0LUg0LLQutC70Y7Rh9C10L3QviDQsiDQutC70L7QvdCwIOKAniVz4oCcLiDQlNCwINCx0YrQtNC1INC70Lgg0L7RgtC80LXQvdC10L3Qvj8iCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDA4Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LLQuNC00LAg0L3QsCDQvtCx0LXQutGCIgogCi0jOiBnaXRrOjk1OTgKLW1zZ2lkICJSZXZlcnRpbmciCi1tc2dzdHIgItCe0YLQvNGP0L3QsCIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MDkKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQvNC10YDQsCDQvdCwINC+0LHQtdC60YIiCiAKLSM6IGdpdGs6OTYwNgotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQxMQorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAi0LjQt9GF0L7QtCDRgSAwLCDQutC+0LPQsNGC0L4g0L3Rj9C80LAg0LPRgNC10YjQutCwIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDEyCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgItGE0L7RgNC80LDRgtC40YDQsNC90L4g0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0L7QsdC10LrRgtCwIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDE0Cittc2dpZCAiZm9yIGJsb2Igb2JqZWN0cywgcnVuIHRleHRjb252IG9uIG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIiIKKyLQtNCwINGB0LUg0YHRgtCw0YDRgtC40YDQsCDQv9GA0L7Qs9GA0LDQvNCw0YLQsCDQt9Cw0LTQsNC00LXQvdCwINCyINC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCedGV4dGNvbnbigJwg0LfQsCDQv9GA0LXQvtCx0YDQsNC30YPQstCw0L3QtSAiCisi0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQvtCx0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MTYKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDQvtC/0YbQuNC40YLQtSDigJ4tc+KAnCDQuCDigJ4tdOKAnCDQtNCwINGA0LDQsdC+0YLRj9GCINGBINC/0L7QstGA0LXQtNC10L3QuCDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MTgKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQuCDRgdGK0LTRitGA0LbQsNC90LjQtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0L/QvtC00LDQtNC10L3QuCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MjEKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0L7QsdC10LrRgtC40YLQtSDQv9C+0LTQsNC00LXQvdC4INC90LAg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQyNAorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAiIgorItGB0LvQtdC00LLQsNC90LUg0L3QsCDRgdC40LzQstC+0LvQvdC40YLQtSDQstGA0YrQt9C60Lgg0YHQvtGH0LXRidC4INCyINC00YrRgNCy0L7RgtC+ICjQv9C+0LvQt9Cy0LAg0YHQtSDRgSDigJ4tLWJhdGNo4oCcINC40LvQuCDigJ4tLSIKKyJiYXRjaC1jaGVja+KAnCkiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjExCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCDQkNCi0KDQmNCR0KPQouKApl0gWy0tXSDQn9Cq0KLigKYiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEyCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwg0JDQotCg0JjQkdCj0KLigKZdIDwg0KHQn9CY0KHQqtCaX9ChX9Cf0KrQotCY0KnQkCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTkKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDQsNGC0YDQuNCx0YPRgtC4LCDQt9Cw0LTQsNC00LXQvdC4INCy0YrRgNGF0YMg0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIwCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YTQsNC50LvQsCDigJ4uZ2l0YXR0cmlidXRlc+KAnCDRgdCw0LzQviDQvtGCINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg0LjQvNC10L3QsNGC0LAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI0Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgItGA0LDQt9C00LXQu9GP0L3QtSDQvdCwINCy0YXQvtC00L3QuNGC0LUg0Lgg0LjQt9GF0L7QtNC90LjRgtC1INC30LDQv9C40YHQuCDRgSDQvdGD0LvQtdCy0LjRjyDQt9C90LDQuiDigJ5OVUzigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTggYnVpbHRpbi9jaGVja291dC5jOjEyMDIgYnVpbHRpbi9nYy5jOjI3OQorbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi0LHQtdC3INC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC90LDQv9GA0LXQtNGK0LrQsCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNgorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdC10YHRitCy0L/QsNC00LDRidC40YLQtSDQv9GK0YLQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjgKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAi0L/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQsCDQv9GA0Lgg0L/RgNC+0LLQtdGA0LrQsNGC0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU0Cittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1zdGRpbuKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0LjQvNC10L3QsCDQvdCwINC/0YrRgtC40YnQsCIKKworIyBGSVhNRSBvcHRpb25zCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE1NworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4teuKAnCDQuNC30LjRgdC60LLQsCDigJ4tLXN0ZGlu4oCcIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE1OQorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkIgorbXNnc3RyICLQvdC1INC1INC30LDQtNCw0LTQtdC9INC/0YrRgiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1xdWlldOKAnCDQuNC30LjRgdC60LLQsCDQtNCwINC1INC/0L7QtNCw0LTQtdC9INGC0L7Rh9C90L4g0LXQtNC40L0g0L/RitGCIgorCisjIEZJWE1FIG9wdGlvbnMKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY1Cittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tcXVpZXTigJwg0Lgg4oCeLS12ZXJib3Nl4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjIEZJWE1FIG9wdGlvbnMKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY4Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1ub24tbWF0Y2hpbmfigJwg0LjQt9C40YHQutCy0LAg4oCeLS12ZXJib3Nl4oCcIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo4Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBb0J7Qn9Cm0JjQr+KApl0g0JrQntCd0KLQkNCa0KLigKYiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjEzCittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgItGH0LXRgtC10L3QtSDQvdCwINC60L7QvdGC0LDQutGC0Lgg0Lgg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgItC60L7QvdGC0LDQutGC0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LDQvdCw0LvQuNC30LjRgNCw0L06ICVzIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0NworbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAi0L3QtSDRgdCwINGD0LrQsNC30LDQvdC4INC60L7QvdGC0LDQutGC0LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMjYKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFvQntCf0KbQmNCv4oCmXSBbLS1dIFvQpNCQ0JnQm+KApl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODgKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAi0LjQt9GC0LXQs9C70Y/QvdC1INC90LAg0LLRgdC40YfQutC4INGE0LDQudC70L7QstC1INCyINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTg5Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICLQv9GA0LXQt9Cw0L/QuNGB0LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUsINC00L7RgNC4INC4INC00LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRgiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5MQorbXNnaWQgIm5vIHdhcm5pbmcgZm9yIGV4aXN0aW5nIGZpbGVzIGFuZCBmaWxlcyBub3QgaW4gaW5kZXgiCittc2dzdHIgItCx0LXQtyDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINC/0YDQuCDQu9C40L/RgdCy0LDRidC4INGE0LDQudC70L7QstC1INC4INGE0LDQudC70L7QstC1INC90LUg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTMKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgItCx0LXQtyDQuNC30YLQtdCz0LvRj9C90LUg0L3QsCDQvdC+0LLQuCDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5NQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICLQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQv9C+0LvRg9GH0LXQvdCwINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDRhNCw0LnQu9C+0LLQtdGC0LUg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDEKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDQv9GK0YLQuNGJ0LDRgtCwINC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwMworbXNnaWQgIndyaXRlIHRoZSBjb250ZW50IHRvIHRlbXBvcmFyeSBmaWxlcyIKK21zZ3N0ciAi0LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INCy0YrQsiDQstGA0LXQvNC10L3QvdC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA0IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJzdHJpbmciCittc2dzdHIgItCd0JjQlyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwNQorbXNnaWQgIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iCittc2dzdHIgItC/0YDQuCDRgdGK0LfQtNCw0LLQsNC90LXRgtC+INC90LAg0L3QvtCy0Lgg0YTQsNC50LvQvtCy0LUg0LTQsCDRgdC1INC00L7QsdCw0LLRjyDQv9GA0LXRhNC40LrRgdCwINCd0JjQlyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwOAorbXNnaWQgImNvcHkgb3V0IHRoZSBmaWxlcyBmcm9tIG5hbWVkIHN0YWdlIgorbXNnc3RyICLQutC+0L/QuNGA0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INC+0YIg0YLQvtCy0LAg0YHRitGB0YLQvtGP0L3QuNC1INC90LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNAorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFvQntCf0KbQmNCv4oCmXSDQmtCb0J7QnSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI1Cittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgW9Ce0J/QptCY0K/igKZdIFvQmtCb0J7QnV0gLS0g0KTQkNCZ0JvigKYiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzQgYnVpbHRpbi9jaGVja291dC5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAi0LLQsNGI0LDRgtCwINCy0LXRgNGB0LjRjyDQu9C40L/RgdCy0LAg0LIg0L/RitGC0Y8g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzYgYnVpbHRpbi9jaGVja291dC5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICLRh9GD0LbQtNCw0YLQsCDQstC10YDRgdC40Y8g0LvQuNC/0YHQstCwINCyINC/0YrRgtGPIOKAniVz4oCcIgorCisjIEZJWE1FIFNBTUUgQVMgWzFdCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgItC90Y/QutC+0Y8g0L7RgiDQvdC10L7QsdGF0L7QtNC40LzQuNGC0LUg0LLQtdGA0YHQuNC4INC70LjQv9GB0LLQsCDQsiDQv9GK0YLRjyDigJ4lc+KAnCIKKworIyBGSVhNRSBTQU1FIEFTIFsxXQorIzogYnVpbHRpbi9jaGVja291dC5jOjE5NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgItC90Y/QutC+0Y8g0L7RgiDQvdC10L7QsdGF0L7QtNC40LzQuNGC0LUg0LLQtdGA0YHQuNC4INC70LjQv9GB0LLQsCDQsiDQv9GK0YLRjyDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAi0L/RitGC0Y/RgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHQu9GP0L0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgItCg0LXQt9GD0LvRgtCw0YLRitGCINC30LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0LvRj9C9IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUxIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTQgYnVpbHRpbi9jaGVja291dC5jOjI1NworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAniVz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQvtCx0L3QvtCy0Y/QstCw0L3QtdGC0L4g0L3QsCDQv9GK0YLQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjMgYnVpbHRpbi9jaGVja291dC5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAniVz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS4iCittc2dzdHIgIiIKKyLQndC10LLRitC30LzQvtC20L3QviDQtSDQtdC00L3QvtCy0YDQtdC80LXQvdC90L4g0LTQsCDQvtCx0L3QvtCy0Y/QstCw0YLQtSDQv9GK0YLQuNGJ0LAg0Lgg0LTQsCDQv9GA0LXQvNC40L3QtdGC0LUg0LrRitC8INC60LvQvtC90LAg4oCeJXPigJwuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjgwIGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzQKK21zZ2lkICJjb3JydXB0IGluZGV4IGZpbGUiCittc2dzdHIgItC/0L7QstGA0LXQtNC10L0g0YTQsNC50Lsg0L3QsCDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjM0MCBidWlsdGluL2NoZWNrb3V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAi0L/RitGC0Y/RgiDigJ4lc+KAnCDQvdC1INC1INGB0LvRj9GCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDk2Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgItC/0YrRgNCy0L4g0YLRgNGP0LHQstCwINC00LAg0LrQvtGA0LjQs9C40YDQsNGC0LUg0LjQvdC00LXQutGB0LAg0YHQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYyNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJ1xuIgorbXNnc3RyICLQltGD0YDQvdCw0LvRitGCINC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQt9CwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC9XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NjMKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQsiDQvNC+0LzQtdC90YLQsCDRgdC+0YfQuCDQutGK0LwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi0JfQsNC90YPQu9GP0LLQsNC90LUg0L3QsCDQutC70L7QvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgItCS0LXRh9C1INGB0YLQtSDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgItCf0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC60LvQvtC90LAg4oCeJXPigJwg0Lgg0LfQsNC90YPQu9GP0LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LVcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3OSBidWlsdGluL2NoZWNrb3V0LmM6MTEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLQn9GA0LXQvNC40L3QsNGF0YLQtSDQutGK0Lwg0L3QvtCy0LjRjyDQutC70L7QvSDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgItCf0YDQtdC80LjQvdCw0YXRgtC1INC60YrQvCDQutC70L7QvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAi4oCmINC4INC+0YnQtSAlZC5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczOQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgotImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKLW1zZ3N0ciAiIgotItCd0LXRg9GB0L/QtdGI0L3QsCDQvtGC0LzRj9C90LAsINC30LDRidC+0YLQviDQstGK0LIg0YTQsNC50LvQsCDigJ4lc+KAnCDQuNC80LAg0LvQvtC60LDQu9C90Lgg0L/RgNC+0LzQtdC90LguXG4iCi0i0J/QvtC00LDQudGC0LUsINC30LDQvdGD0LvQtdGC0LUg0LjQu9C4INCz0Lgg0YHQutCw0YLQsNC50YLQtSDQuCDQv9GA0L7QsdCy0LDQudGC0LUg0L7RgtC90L7QstC+LjwiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC40LfQvtGB0YLQsNCy0Y/RgtC1ICVkINC/0L7QtNCw0LLQsNC90LUsINC60L7QtdGC0L4g0L3QtSDQtSDRgdCy0YrRgNC30LDQvdC+INC60YrQvCDQvdC40LrQvtC5INC60LvQvtC9OlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMV0gIiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQuNC30L7RgdGC0LDQstGP0YLQtSAlZCDQv9C+0LTQsNCy0LDQvdC40Y8sINC60L7QuNGC0L4g0L3QtSDRgdCwINGB0LLRitGA0LfQsNC90Lgg0LrRitC8INC90LjQutC+0LkgIgorItC60LvQvtC9OlxuIgorIlxuIgorIiVzXG4iCiAKLSM6IGdpdGs6OTYxMAorIzogYnVpbHRpbi9jaGVja291dC5jOjc1OAorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgotIiBEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorItCQ0LrQviDQstGB0LUg0L/QsNC6INC40YHQutCw0YLQtSDQtNCwINC30LDQv9Cw0LfQuNGC0LUg0YLQsNC30Lgg0L/RgNC+0LzRj9C90LAg0YfRgNC10Lcg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LrQu9C+0L0sXG4iCisi0YHQtdCz0LAg0LUg0L3QsNC5LdC/0L7QtNGF0L7QtNGP0YnQuNGP0YIg0LfQsCDRgtC+0LLQsCDRh9GA0LXQtyDQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiIGdpdCBicmFuY2gg0JjQnNCVX9Cd0JBf0J3QntCS0JjQr1/QmtCb0J7QnSAlc1xuIgorIlxuIgorbXNnc3RyWzFdICIiCisi0JDQutC+INCy0YHQtSDQv9Cw0Log0LjRgdC60LDRgtC1INC00LAg0LfQsNC/0LDQt9C40YLQtSDRgtC10LfQuCDQv9GA0L7QvNC10L3QuCDRh9GA0LXQtyDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQutC70L7QvSxcbiIKKyLRgdC10LPQsCDQtSDQvdCw0Lkt0L/QvtC00YXQvtC00Y/RidC40Y/RgiDQt9CwINGC0L7QstCwINGH0YDQtdC3INC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCDQmNCc0JVf0J3QkF/QndCe0JLQmNCvX9Ca0JvQntCdICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTQKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICLQstGK0YLRgNC10YjQvdCwINCz0YDQtdGI0LrQsCDQv9GA0Lgg0L7QsdGF0L7QttC00LDQvdC10YLQviDQvdCwINCy0LXRgNGB0LjQuNGC0LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTgKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAi0J/RgNC10LTQuCDRgtC+0LLQsCDigJ5IRUFE4oCcINGB0L7Rh9C10YjQtSDQutGK0LwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4MjUgYnVpbHRpbi9jaGVja291dC5jOjExMjkKK21zZ2lkICJZb3UgYXJlIG9uIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDRgdGC0LUg0L3QsCDQutC70L7QvSwg0LrQvtC50YLQviDQv9GA0LXQtNGB0YLQvtC4INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjkzMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0LLQtdGH0LUg0LUg0LjQt9GC0LXQs9C70LXQvSDQsiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAib25seSBvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAlZCBnaXZlbi4iCittc2dzdHIgItC+0YfQsNC60LLQsNGI0LUg0YHQtSDQtdC00LjQvSDRg9C60LDQt9Cw0YLQtdC7LCDQsCDRgdGC0LUg0L/QvtC00LDQu9C4ICVkLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDRg9C60LDQt9Cw0YLQtdC7OiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Y/RgiDQvdC1INGB0L7Rh9C4INC60YrQvCDQvtCx0LXQutGCLdC00YrRgNCy0L46ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0MworbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC10YLQviDQvdCwINC/0YrRgiDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80L4g0YEg0L/RgNC10LzQuNC90LDQstCw0L3QtdGC0L4g0L7RgiDQtdC00LjQvSDQutC70L7QvSDQutGK0Lwg0LTRgNGD0LMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAniVz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQv9GA0LXQvNC40L3QsNCy0LDQvdC10YLQviDQvtGCINC10LTQuNC9INC60LvQvtC9INC60YrQvCDQtNGA0YPQsyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTQgYnVpbHRpbi9jaGVja291dC5jOjExNTcgYnVpbHRpbi9jaGVja291dC5jOjExNjIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgogbXNnc3RyICIiCi0i0J3QtdGD0YHQv9C10YjQvdC+INC+0YLQvNGP0L3QsCDQv9C+0YDQsNC00Lgg0LrQvtC90YTQu9C40LrRgtC4INC/0YDQuCDRgdC70LjQstCw0L3QtS5cbiIKLSLQmNGB0LrQsNGC0LUg0LvQuCDQtNCwINCz0Lgg0LrQvtGA0LjQs9C40YDQsNGC0LUg0YfRgNC10Lcg4oCeZ2l0IGNpdG9vbOKAnD8iCisi0JfQsCDQtNCwINC/0YDQtdC80LjQvdC10YLQtSDQutGK0Lwg0LrQu9C+0L0sINC/0L7QtNCw0LnRgtC1INGD0LrQsNC30LDRgtC10LssINC60L7QudGC0L4g0YHQvtGH0Lgg0LrRitC8INC/0L7QtNCw0LLQsNC90LUuIOKAniVz4oCcINC90LUgIgorItC1INGC0LDQutGK0LIiCiAKLSM6IGdpdGs6OTY1MwotbXNnaWQgIkNvbmZpcm0gcmVzZXQiCi1tc2dzdHIgItCf0L7RgtCy0YrRgNC20LTQsNCy0LDQvdC1INC90LAg0LfQsNC90YPQu9GP0LLQsNC90LXRgtC+IgorIzogYnVpbHRpbi9jaGVja291dC5jOjEyMDMgYnVpbHRpbi9jaGVja291dC5jOjEyMDUgYnVpbHRpbi9jbG9uZS5jOjgzCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OSBidWlsdGluL3JlbW90ZS5jOjE2MSBidWlsdGluL3dvcmt0cmVlLmM6MjgyCisjOiBidWlsdGluL3dvcmt0cmVlLmM6Mjg0Cittc2dpZCAiYnJhbmNoIgorbXNnc3RyICLQutC70L7QvSIKIAotIzogZ2l0azo5NjU1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKLW1zZ3N0ciAi0JTQsCDRgdC1INC30LDQvdGD0LvQuCDQu9C4INC60LvQvtC90YrRgiDigJ4lc+KAnCDQutGK0Lwg4oCeJXPigJw/IgorIzogYnVpbHRpbi9jaGVja291dC5jOjEyMDQKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC4INC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC90L7QsiDQutC70L7QvSIKIAotIzogZ2l0azo5NjU3Ci1tc2dpZCAiUmVzZXQgdHlwZToiCi1tc2dzdHIgItCS0LjQtCDQt9Cw0L3Rg9C70Y/QstCw0L3QtToiCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIwNgorbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtS/Qt9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwINC60LvQvtC9INC4INC/0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC90LXQs9C+IgogCi0jOiBnaXRrOjk2NjAKLW1zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKLW1zZ3N0ciAi0KHQu9Cw0LHQvjog0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0Lgg0LjQvdC00LXQutGB0LAg0L7RgdGC0LDQstCw0YIg0YHRitGJ0LjRgtC1IgorIzogYnVpbHRpbi9jaGVja291dC5jOjEyMDcKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQttGD0YDQvdCw0Lsg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC30LAg0L3QvtCyINC60LvQvtC9IgogCi0jOiBnaXRrOjk2NjMKLW1zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCi1tc2dzdHIgItCh0LzQtdGB0LXQvdC+OiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQvtGB0YLQsNCy0LAg0YHRitGJ0L7RgtC+LCDQuNC90LTQtdC60YHRitGCINGB0LUg0LfQsNC90YPQu9GP0LLQsCIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjA4Cittc2dpZCAiZGV0YWNoIHRoZSBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAi0L7RgtC00LXQu9GP0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcINC60YrQvCDRg9C60LDQt9Cw0L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKIAotIzogZ2l0azo5NjY2CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIwOQorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LrQvtC5INC60LvQvtC9INCx0LjQstCwINGB0LvQtdC00LXQvSDQv9GA0Lgg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC90L7QstC40Y8g0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjExCittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAi0J3QntCSX9Ca0JvQntCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIxMQorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAi0L3QvtCyINC60LvQvtC9INCx0LXQtyDRgNC+0LTQuNGC0LXQuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMTIKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgItC40LfRgtC10LPQu9GP0L3QtSDQvdCwINCy0LDRiNCw0YLQsCDQstC10YDRgdC40Y8g0L3QsCDQvdC10YHQu9C10YLQuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjE0Cittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgItC40LfRgtC10LPQu9GP0L3QtSDQvdCwINGH0YPQttC00LDRgtCwINCy0LXRgNGB0LjRjyDQvdCwINC90LXRgdC70LXRgtC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMTYKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC40LfRgtC10LPQu9GP0L3QtSAo0LLQsNGI0LjRgtC1INC/0YDQvtC80LXQvdC4INGJ0LUg0LHRitC00LDRgiDQt9Cw0L3Rg9C70LXQvdC4KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMTcKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0LjQt9Cy0YrRgNGI0LLQsNC90LUg0L3QsCDRgtGA0L7QudC90L4g0YHQu9C40LLQsNC90LUg0YEg0L3QvtCy0LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMTggYnVpbHRpbi9tZXJnZS5jOjIyNworbXNnaWQgInVwZGF0ZSBpZ25vcmVkIGZpbGVzIChkZWZhdWx0KSIKK21zZ3N0ciAi0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCDQuNCz0L3QvtGA0LjRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUgKNGB0YLQsNC90LTQsNGA0YLQvdC+KSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMTkgYnVpbHRpbi9sb2cuYzoxMjM5IHBhcnNlLW9wdGlvbnMuaDoyNDQKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAi0YHRgtC40LsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjIwCittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAi0LTQtdC50YHRgtCy0LjQtSDQv9GA0Lgg0LrQvtC90YTQu9C40LrRgiAo0YHQu9C40LLQsNC90LUg0LjQu9C4INGC0YDQvtC50L3QsCDRgNCw0LfQu9C40LrQsCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjIzCittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICLQsdC10Lcg0L7Qs9GA0LDQvdC40YfQsNCy0LDQvdC1INC90LAg0LjQt9Cx0YDQvtC10L3QuNGC0LUg0L/RitGC0LjRidCwINGB0LDQvNC+INC00L4g0YfQsNGB0YLQuNGH0L3QviDQuNC30YLQtdCz0LvQtdC90LjRgtC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIyNQorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICIiCisi0L7Qv9C40YIg0LfQsCDQvtGC0LPQsNGC0LLQsNC90LUg0L3QsCDQuNC80LUg0L3QsCDQutC70L7QvSDRgdC70LXQtCDQvdC10YPRgdC/0LXRiNC10L0g0L7Qv9C40YIg0YEg4oCeZ2l0IGNoZWNrb3V0ICIKKyLQndCV0KHQqtCp0JXQodCi0JLQo9CS0JDQqV/QmtCb0J7QneKAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMjcKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgItCx0LXQtyDQv9GA0L7QstC10YDQutCwINC00LDQu9C4INC00YDRg9Cz0L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviDQtNGK0YDQttC4INGD0LrQsNC30LDRgtC10LvRjyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNTIKK21zZ2lkICItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni1i4oCcLCDigJ4tQuKAnCDQuCDigJ4tLW9ycGhhbuKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDQtdC00L3QsCDRgSDQtNGA0YPQs9CwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI2OQorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS10cmFja+KAnCDQuNC30LjRgdC60LLQsCDQuNC80LUg0L3QsCDQutC70L7QvSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNzQKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgItCb0LjQv9GB0LLQsCDQuNC80LUg0L3QsCDQutC70L7QvSwg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tYuKAnCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMTAKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAi0YPQutCw0LfQsNC9INC1INC90LXQv9GA0LDQstC40LvQtdC9INC/0YrRgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMTcKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKLSIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCisiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuXG4iCisiRGlkIHlvdSBpbnRlbmQgdG8gY2hlY2tvdXQgJyVzJyB3aGljaCBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGNvbW1pdD8iCiBtc2dzdHIgIiIKLSLQodC40LvQvdC+OiDQt9Cw0L3Rg9C70Y/QstCw0L3QtSDQuCDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+LCDQuCDQvdCwINC40L3QtNC10LrRgdCwXG4iCi0iKCrQktCh0JjQp9Ca0JgqINC70L7QutCw0LvQvdC4INC/0YDQvtC80LXQvdC4INGJ0LUg0LHRitC00LDRgiDQsdC10LfQstGK0LfQstGA0LDRgtC90L4g0LfQsNCz0YPQsdC10L3QuCkiCisi0J3QtSDQvNC+0LbQtdGC0LUg0LXQtNC90L7QstGA0LXQvNC10L3QvdC+INC00LAg0L7QsdC90L7QstGP0LLQsNGC0LUg0L/RitGC0LjRidCwINC4INC00LAg0L/RgNC10LzQuNC90LXRgtC1INC60YrQvCDQutC70L7QvdCwIOKAniVz4oCcLlxuIgorItCU0LDQu9C4INC90LUg0LjRgdC60LDRgtC1INC00LAg0LjQt9GC0LXQs9C70LjRgtC1IOKAniVz4oCcLCDQutC+0LnRgtC+INC90LUg0YHQvtGH0Lgg0LrRitC8INC/0L7QtNCw0LLQsNC90LU/IgogCi0jOiBnaXRrOjk2ODMKLW1zZ2lkICJSZXNldHRpbmciCi1tc2dzdHIgItCX0LDQvdGD0LvRj9Cy0LDQvdC1IgorIzogYnVpbHRpbi9jaGVja291dC5jOjEzMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6INC+0L/RhtC40Y/RgtCwIOKAni0tZGV0YWNo4oCcINC90LUg0L/RgNC40LXQvNCwINCw0YDQs9GD0LzQtdC90YIt0L/RitGCIOKAniVz4oCcIgogCi0jOiBnaXRrOjk3NDMKLW1zZ2lkICJDaGVja2luZyBvdXQiCi1tc2dzdHIgItCY0LfRgtC10LPQu9GP0L3QtSIKLQotIzogZ2l0azo5Nzk2Ci1tc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKLW1zZ3N0ciAi0KLQtdC60YPRidC+INC40LfRgtC10LPQu9C10L3QuNGP0YIg0LrQu9C+0L0g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgiIKLQotIzogZ2l0azo5ODAyCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMyNgogbXNnaWQgIiIKLSJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCi0iUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgogbXNnc3RyICIiCi0i0J/QvtC00LDQstCw0L3QuNGP0YLQsCDQvdCwINC60LvQvtC90LAg4oCeJXPigJwg0L3QtSDRgdCwINC90LAg0L3QuNC60L7QuSDQtNGA0YPQsyDQutC70L7QvS5cbiIKLSLQndCw0LjRgdGC0LjQvdCwINC70Lgg0LTQsCDRgdC1INC40LfRgtGA0LjQtSDQutC70L7QvdGK0YIg4oCeJXPigJw/IgorImdpdCBjaGVja291dDog0L7Qv9GG0LjQuNGC0LUg4oCeLS1vdXJz4oCcL+KAni0tdGhlaXJz4oCcLCDigJ4tLWZvcmNl4oCcINC4IOKAni0tbWVyZ2XigJxcbiIKKyLRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDRgSDQuNC30YLQtdCz0LvRj9C90LUg0L7RgiDQuNC90LTQtdC60YHQsC4iCiAKLSM6IGdpdGs6OTgzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKLW1zZ3N0ciAi0JXRgtC40LrQtdGC0Lgg0Lgg0LLRitGA0YXQvtCy0LU6ICVzIgotCi0jOiBnaXRrOjk4NTAKLW1zZ2lkICJGaWx0ZXIiCi1tc2dzdHIgItCk0LjQu9GC0YDQuNGA0LDQvdC1IgotCi0jOiBnaXRrOjEwMTQ2CisjOiBidWlsdGluL2NsZWFuLmM6MjYKIG1zZ2lkICIiCi0iRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCi0idGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSDQqNCQ0JHQm9Ce0J1dIFsteCB8IC1YXSBbLS1dINCf0KrQouKApiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAi0KTQsNC50LvRitGCIOKAniVz4oCcINGJ0LUg0LHRitC00LUg0LjQt9GC0YDQuNGCXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgItCf0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgItCl0YDQsNC90LjQu9C40YnQtdGC0L4g4oCeJXPigJwg0YnQtSDQsdGK0LTQtSDQv9GA0LXRgdC60L7Rh9C10L3QvlxuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOTUKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nIgogbXNnc3RyICIiCi0i0JPRgNC10YjQutCwINC/0YDQuCDQv9GA0L7Rh9C40YLQsNC90LXRgtC+INC90LAg0YLQvtC/0L7Qu9C+0LPQuNGP0YLQsCDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAuINCY0L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQt9CwINC60LvQvtC90LAgIgotItC4INC/0YDQtdC00YjQtdGB0YLQstCw0YnQuNGC0LUv0YHQu9C10LTQstCw0YnQuNGC0LUg0LXRgtC40LrQtdGC0Lgg0YnQtSDQtSDQvdC10L/RitC70L3QsC4iCisi0J/QvtC00YHQutCw0LfQutCwOlxuIgorIjEgICAgICAgICAg4oCUINC40LfQsdC+0YAg0L3QsCDQvtCx0LXQutGCINGB0L/QvtGA0LXQtCDRgNC10LTQsFxuIgorItCf0KDQldCk0JjQmtChICAgIOKAlCDQuNC30LHQvtGAINC90LAg0LXQtNC40L3RgdGC0LLQtdC9INC+0LHQtdC60YIg0L/QviDRgtC+0LfQuCDRg9C90LjQutCw0LvQtdC9INC/0YDQtdGE0LjQutGBXG4iCisiICAgICAgICAgICDigJQgKNC/0YDQsNC30L3Qvikg0L3QuNGJ0L4g0LTQsCDQvdC1INGB0LUg0LjQt9Cx0LjRgNCwIgogCi0jOiBnaXRrOjExMTIzCi1tc2dpZCAiVGFnIgotbXNnc3RyICLQldGC0LjQutC10YIiCisjOiBidWlsdGluL2NsZWFuLmM6Mjk5Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBzaW5nbGUgaXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY3QgYSByYW5nZSBvZiBpdGVtc1xuIgorIjItMyw2LTkgICAgLSBzZWxlY3QgbXVsdGlwbGUgcmFuZ2VzXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gdW5zZWxlY3Qgc3BlY2lmaWVkIGl0ZW1zXG4iCisiKiAgICAgICAgICAtIGNob29zZSBhbGwgaXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBmaW5pc2ggc2VsZWN0aW5nIgorbXNnc3RyICIiCisi0J/QvtC00YHQutCw0LfQutCwOlxuIgorIjEgICAgICAgICAg4oCUINC40LfQsdC+0YAg0L3QsCDQtdC00LjQvSDQvtCx0LXQutGCXG4iCisiMy01ICAgICAgICDigJQg0LjQvdGC0LXRgNCy0LDQuyDQt9CwINC40LfQsdC+0YAg0L3QsCDQvtCx0LXQutGC0LhcbiIKKyIyLTMsNi05ICAgIOKAlCDQvNC90L7QttC10YHRgtCy0L4g0LjQvdGC0LXRgNCy0LDQu9C4INC30LAg0LjQt9Cx0L7RgCDQvdCwINC+0LHQtdC60YLQuFxuIgorItCf0KDQldCk0JjQmtChICAgIOKAlCDQuNC30LHQvtGAINC90LAg0LXQtNC40L3RgdGC0LLQtdC9INC+0LHQtdC60YIg0L/QviDRgtC+0LfQuCDRg9C90LjQutCw0LvQtdC9INC/0YDQtdGE0LjQutGBXG4iCisiLeKApiAgICAgICAgIOKAlCDQvtGC0LzRj9C90LAg0L3QsCDQuNC30LHQvtGA0LAg0L3QsCDQvtCx0LXQutGC0LhcbiIKKyIqICAgICAgICAgIOKAlCDQuNC30LHQuNGA0LDQvdC1INC90LAg0LLRgdC40YfQutC4INC+0LHQtdC60YLQuFxuIgorIiAgICAgICAgICAg4oCUICjQv9GA0LDQt9C90L4pINC30LDQstGK0YDRiNCy0LDQvdC1INC90LAg0LjQt9Cx0LjRgNCw0L3QtdGC0L4iCiAKLSM6IGdpdGs6MTExMjcKLW1zZ2lkICJJZCIKLW1zZ3N0ciAi0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAiCisjIEZJWE1FIFdURiBkb2VzIHRoaXMgbWVhbgorIzogYnVpbHRpbi9jbGVhbi5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT8iCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9INC40LfQsdC+0YAgKCVzKS4g0JjQt9Cx0LXRgNC10YLQtSDQvtGC0L3QvtCy0L4uIgogCi0jOiBnaXRrOjExMjEwCi1tc2dpZCAiR2l0ayBmb250IGNob29zZXIiCi1tc2dzdHIgItCY0LfQsdC+0YAg0L3QsCDRiNGA0LjRhNGCINC30LAgR2l0ayIKKyMgRklYTUUgLSBzaG91bGQgd2UgdXNlID4+IG9yIHN0aCBlbHNlCisjOiBidWlsdGluL2NsZWFuLmM6NjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAi0KjQsNCx0LvQvtC90Lgg0LfQsCDQuNCz0L3QvtGA0LjRgNCw0L3QuCDQtdC70LXQvNC10L3RgtC44omrICIKIAotIzogZ2l0azoxMTIyNwotbXNnaWQgIkIiCi1tc2dzdHIgItCnIgorIzogYnVpbHRpbi9jbGVhbi5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAi0J/QoNCV0JTQo9Cf0KDQldCW0JTQldCd0JjQlTog0J3QuNC60L7QuSDQvtCx0LXQutGCINC90LUg0L3QsNC/0LDRgdCy0LAg0L3QsCDigJ4lc+KAnCIKIAotIzogZ2l0azoxMTIzMAotbXNnaWQgIkkiCi1tc2dzdHIgItCaIgorIzogYnVpbHRpbi9jbGVhbi5jOjcxNQorbXNnaWQgIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiCittc2dzdHIgItCY0LfQsdC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0Lgg0LfQsCDQuNC30YLRgNC40LLQsNC90LUiCiAKLSM6IGdpdGs6MTEzNDgKLW1zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCi1tc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwINGB0L/QuNGB0YrQutCwINGBINC/0L7QtNCw0LLQsNC90LjRjyIKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAi0JTQsCDRgdC1INC40LfRgtGA0LjQtSDQu9C4IOKAniVz4oCcPyDigJ554oCcIOKAlCAg0LTQsCwg4oCeTuKAnCDigJQg0J3QlSIKIAotIzogZ2l0azoxMTM1MQotbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKLW1zZ3N0ciAi0JzQsNC60YHQuNC80LDQu9C90LAg0YjQuNGA0L7Rh9C40L3QsCDQvdCwINCz0YDQsNGE0LAgKNCyINGA0LXQtNC+0LLQtSkiCisjIEZJWE1FIGltcHJvdmUgbWVzc2FnZQorIzogYnVpbHRpbi9jbGVhbi5jOjc4MQorbXNnaWQgIkJ5ZS4iCittc2dzdHIgItCY0LfRhdC+0LQuIgogCi0jOiBnaXRrOjExMzU1Ci0jLCBuby10Y2wtZm9ybWF0Ci1tc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKLW1zZ3N0ciAi0JzQsNC60YHQuNC80LDQu9C90LAg0YjQuNGA0L7Rh9C40L3QsCDQvdCwINCz0YDQsNGE0LAgKCUg0L7RgiDQv9Cw0L3QtdC70LApIgorIzogYnVpbHRpbi9jbGVhbi5jOjc4OQorbXNnaWQgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gc3RhcnQgY2xlYW5pbmdcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbHVkZSBpdGVtcyBmcm9tIGRlbGV0aW9uXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGVjdCBpdGVtcyB0byBiZSBkZWxldGVkIGJ5IG51bWJlcnNcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybSBlYWNoIGRlbGV0aW9uIChsaWtlIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gc3RvcCBjbGVhbmluZ1xuIgorImhlbHAgICAgICAgICAgICAgICAgLSB0aGlzIHNjcmVlblxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBoZWxwIGZvciBwcm9tcHQgc2VsZWN0aW9uIgorbXNnc3RyICIiCisiY2xlYW4gICAgICAgICAgICAgICDigJQg0L3QsNGH0LDQu9C+INC90LAg0LjQt9GH0LjRgdGC0LLQsNC90LXRgtC+XG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICDigJQg0YjQsNCx0LvQvtC9INC30LAg0L7QsdC10LrRgtC4LCDQutC+0LjRgtC+INC00LAg0L3QtSDRgdC1INGC0YDQuNGP0YJcbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIOKAlCDQvdC+0LzQtdGA0LAg0L3QsCDQvtCx0LXQutGC0LgsINC60L7QuNGC0L4g0LTQsCDRgdC1INGC0YDQuNGP0YJcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIOKAlCDQv9C+0YLQstGK0YDQttC00LDQstCw0L3QtSDQvdCwINCy0YHRj9C60L4g0LjQt9GC0YDQuNCy0LDQvdC1ICjQv9C+0LTQvtCx0L3QviDQvdCwIOKAnnJtIC1p4oCcKVxuIgorInF1aXQgICAgICAgICAgICAgICAg4oCUINC60YDQsNC5INC90LAg0LjQt9GH0LjRgdGC0LLQsNC90LXRgtC+XG4iCisiaGVscCAgICAgICAgICAgICAgICDigJQg0YLQvtC30Lgg0LrRgNCw0LlcbiIKKyI/ICAgICAgICAgICAgICAgICAgIOKAlCDQv9C+0LTRgdC60LDQt9C60LAg0LfQsCDRiNCw0LHQu9C+0L3QuNGC0LUiCiAKLSM6IGdpdGs6MTEzNTgKLW1zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCi1tc2dzdHIgItCf0L7QutCw0LfQstCw0L3QtSDQvdCwINC70L7QutCw0LvQvdC40YLQtSDQv9GA0L7QvNC10L3QuCIKKyMgRklYTUUgaG93IG1hbnkgKioqCisjOiBidWlsdGluL2NsZWFuLmM6ODE2Cittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAi4peP4peP4pePINCa0L7QvNCw0L3QtNC4IOKXj+KXj+KXjyIKIAotIzogZ2l0azoxMTM2MQotbXNnaWQgIkF1dG8tc2VsZWN0IFNIQTEgKGxlbmd0aCkiCi1tc2dzdHIgItCQ0LLRgtC+0LzQsNGC0LjRh9C90L4g0LjQt9Cx0LjRgNCw0L3QtSDQvdCwIFNIQTEgKNC00YrQu9C20LjQvdCwKSIKKyMgRklYTUUgaW1wcm92ZSBtZXNzYWdlCisjOiBidWlsdGluL2NsZWFuLmM6ODE3Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgItCY0LfQsdC+0YAg0L3QsCDRgdC70LXQtNCy0LDRidC+INC00LXQudGB0YLQstC40LUiCiAKLSM6IGdpdGs6MTEzNjUKLW1zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgotbXNnc3RyICLQodC60YDQuNCy0LDQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90LjRgtC1INGD0LrQsNC30LDRgtC10LvQuCIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MjUKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICLQodC70LXQtNC90LjRj9GCINC+0LHQtdC60YIg0YnQtSDQsdGK0LTQtSDQuNC30YLRgNC40YI6IgorbXNnc3RyWzFdICLQodC70LXQtNC90LjRgtC1INC+0LHQtdC60YLQuCDRidC1INCx0YrQtNCw0YIg0LjQt9GC0YDQuNGC0Lg6IgogCi0jOiBnaXRrOjExMzY5Ci1tc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCi1tc2dzdHIgItCd0LDRgdGC0YDQvtC50LrQuCDQvdCwINC/0L7QutCw0LfQstCw0L3QtdGC0L4g0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUiCisjOiBidWlsdGluL2NsZWFuLmM6ODQyCittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgItCk0LDQudC70L7QstC10YLQtSDQt9CwINC40LfRh9C40YHRgtCy0LDQvdC1INGB0LLRitGA0YjQuNGF0LAuINCY0LfRhdC+0LQg0L7RgiDQv9GA0L7Qs9GA0LDQvNCw0YLQsC4iCiAKLSM6IGdpdGs6MTEzNzEKLW1zZ2lkICJUYWIgc3BhY2luZyIKLW1zZ3N0ciAi0KjQuNGA0L7Rh9C40L3QsCDQvdCwINGC0LDQsdGD0LvQsNGC0L7RgNCwIgorIzogYnVpbHRpbi9jbGVhbi5jOjg3MworbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvNC10L3QsNGC0LAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUsINC60L7QuNGC0L4g0YnQtSDQsdGK0LTQsNGCINC40LfRgtGA0LjRgtC4IgogCi0jOiBnaXRrOjExMzc0Ci1tc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKLW1zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0LHQu9C40LfQutC40YLQtSDQtdGC0LjQutC10YLQuCDQuCDQstGK0YDRhdC+0LLQtSIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NzUKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvQvdC+INC40LfRgtGA0LjQstCw0L3QtSIKIAotIzogZ2l0azoxMTM3NwotbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCi1tc2dzdHIgItCc0LDQutGB0LjQvNCw0LvQtdC9INCx0YDQvtC5INC10YLQuNC60LXRgtC4L9Cy0YrRgNGF0L7QstC1INC30LAg0L/QvtC60LDQt9Cy0LDQvdC1IgorIzogYnVpbHRpbi9jbGVhbi5jOjg3NgorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90L4g0LjQt9GC0YDQuNCy0LDQvdC1IgogCi0jOiBnaXRrOjExMzgwCi1tc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgotbXNnc3RyICLQoNCw0LfQu9C40LrQsCDRgdCw0LzQviDQsiDQuNC30LHRgNCw0L3QuNGC0LUg0L/RitGC0LjRidCwIgorIzogYnVpbHRpbi9jbGVhbi5jOjg3OAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YbQtdC70Lgg0LTQuNGA0LXQutGC0L7RgNC40LgiCiAKLSM6IGdpdGs6MTEzODMKLW1zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKLW1zZ3N0ciAi0J/QvtC00LTRgNGK0LbQutCwINC90LAg0YDQsNC30LvQuNGH0L3QuCDQutC+0LTQuNGA0LDQvdC40Y8g0LfQsCDQstGB0LXQutC4INGE0LDQudC7IgorIzogYnVpbHRpbi9jbGVhbi5jOjg3OSBidWlsdGluL2Rlc2NyaWJlLmM6NDA3IGJ1aWx0aW4vZ3JlcC5jOjcxNAorIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0MyBidWlsdGluL25hbWUtcmV2LmM6MzExIGJ1aWx0aW4vc2hvdy1yZWYuYzoxODcKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICLRiNCw0LHQu9C+0L0iCiAKLSM6IGdpdGs6MTEzODkgZ2l0azoxMTUzNgotbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKLW1zZ3N0ciAi0JLRitC90YjQtdC9INC40L3RgdGC0YDRg9C80LXQvdGCINC30LAg0YDQsNC30LvQuNC60LgiCisjOiBidWlsdGluL2NsZWFuLmM6ODgwCittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQqNCQ0JHQm9Ce0J0g0L7RgiDRhNCw0LnQu9C+0LLQtSwg0LrQvtC40YLQviDQtNCwINC90LUg0YHQtSDRgtGA0LjRj9GCIgogCi0jOiBnaXRrOjExMzkwCi1tc2dpZCAiQ2hvb3NlLi4uIgotbXNnc3RyICLQmNC30LHQvtGA4oCmIgorIzogYnVpbHRpbi9jbGVhbi5jOjg4MQorbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQuCDQvdCwINC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKIAotIzogZ2l0azoxMTM5NQorIzogYnVpbHRpbi9jbGVhbi5jOjg4MworbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDRgdCw0LzQviDQvdCwINC40LPQvdC+0YDQuNGA0LDQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTAxCittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4teOKAnCDQuCDigJ4tWOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwNQorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorItCd0LDRgdGC0YDQvtC50LrQsNGC0LAg4oCeY2xlYW4ucmVxdWlyZUZvcmNl4oCcINC1INC30LDQtNCw0LTQtdC90LAg0LrQsNGC0L4g0LjRgdGC0LjQvdCwLCDQutC+0LXRgtC+INC40LfQuNGB0LrQstCwINC90Y/QutC+0Y8gIgorItC+0YIg0L7Qv9GG0LjQuNGC0LUg4oCeLWnigJwsIOKAni1u4oCcINC40LvQuCDigJ4tZuKAnC4g0J3Rj9C80LAg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INC40LfRh9C40YHRgtCy0LDQvdC1IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA4Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyAiCisicmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKyLQndCw0YHRgtGA0L7QudC60LDRgtCwIOKAnmNsZWFuLnJlcXVpcmVGb3JjZeKAnCDQvdC1INC1INC30LDQtNCw0LTQtdC90LAsINC90L4g0YHRgtCw0L3QtNCw0YDRgtC90L4g0LUg0LjRgdGC0LjQvdCwLCAiCisi0LrQvtC10YLQviDQuNC30LjRgdC60LLQsCDQvdGP0LrQvtGPINC+0YIg0L7Qv9GG0LjQuNGC0LUg4oCeLWnigJwsIOKAni1u4oCcINC40LvQuCDigJ4tZuKAnC4g0J3Rj9C80LAg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4ICIKKyLQuNC30YfQuNGB0YLQstCw0L3QtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM3Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBb0J7Qn9Cm0JjQr+KApl0gWy0tXSDQpdCg0JDQndCY0JvQmNCp0JUgW9CU0JjQoNCV0JrQotCe0KDQmNCvXSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU3IGJ1aWx0aW4vZmV0Y2guYzoxMTEgYnVpbHRpbi9tZXJnZS5jOjIyNAorIzogYnVpbHRpbi9wdXNoLmM6NTIzCittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdCw0L/RgNC10LTRitC60LAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1OQorbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICLQsdC10Lcg0YHRitC30LTQsNCy0LDQvdC1INC90LAg0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9jbG9uZS5jOjYwIGJ1aWx0aW4vY2xvbmUuYzo2MiBidWlsdGluL2luaXQtZGIuYzo1MDMKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQvdCwINCz0L7Qu9C+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgIiIKKyLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LUt0L7Qs9C70LXQtNCw0LvQviAo0LLQutC70Y7Rh9Cy0LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1iYXJl4oCcINC30LAg0LPQvtC70L4g0YXRgNCw0L3QuNC70LjRidC1KSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY2Cittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgItC60LvQvtC90LjRgNCw0L3QtSDQvtGCINC70L7QutCw0LvQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY4Cittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgItCx0LXQtyDRgtCy0YrRgNC00Lgg0LLRgNGK0LfQutC4LCDRhNCw0LnQu9C+0LLQtdGC0LUg0LLQuNC90LDQs9C4INC00LAg0YHQtSDQutC+0L/QuNGA0LDRgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwCittc2dpZCAic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiCittc2dzdHIgItC90LDRgdGC0YDQvtC50LLQsNC90LUg0LfQsCDRgdC/0L7QtNC10LvQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL2Nsb25lLmM6NzIgYnVpbHRpbi9jbG9uZS5jOjc0Cittc2dpZCAiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIKK21zZ3N0ciAi0LjQvdC40YbQuNCw0LvQuNC30LjRgNCw0L3QtSDQvdCwINC/0L7QtNC80L7QtNGD0LvQuNGC0LUg0L/RgNC4INGC0L7QstCwINC60LvQvtC90LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1IGJ1aWx0aW4vaW5pdC1kYi5jOjUwMAorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y8g0YEg0YjQsNCx0LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NiBidWlsdGluL2luaXQtZGIuYzo1MDEKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRjywg0LrQvtGP0YLQviDRgdGK0LTRitGA0LbQsCDRiNCw0LHQu9C+0L3QuNGC0LUsINC60L7QuNGC0L4g0LTQsCDRgdC1INC/0L7Qu9C30LLQsNGCIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzgKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0LXRgtCw0LvQvtC90L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MAorbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tcmVmZXJlbmNl4oCcINC80L7QttC1INC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwINGB0LDQvNC+INC/0YDQuCDQutC70L7QvdC40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MSBidWlsdGluL2NvbHVtbi5jOjI2IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAibmFtZSIKK21zZ3N0ciAi0JjQnNCVIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODIKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YLQvtCy0LAg0JjQnNCVINCy0LzQtdGB0YLQviDigJ5vcmlnaW7igJwg0L/RgNC4INC/0YDQvtGB0LvQtdC00Y/QstCw0L3QtSDQvdCwINC60LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgItC40LfRgtC10LPQu9GP0L3QtSDQvdCwINGC0L7Qt9C4INCa0JvQntCdLCDQsCDQvdC1INGB0L7Rh9C10L3QuNGP0YIg0L7RgiDQvtGC0LTQsNC70LXRh9C10L3QuNGPINGD0LrQsNC30LDRgtC10Lsg4oCeSEVBROKAnCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAi0L/RitGCINC60YrQvCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LXVwbG9hZC1wYWNr4oCcINC90LAg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg3IGJ1aWx0aW4vZmV0Y2guYzoxMTIgYnVpbHRpbi9ncmVwLmM6NjU5Cittc2dpZCAiZGVwdGgiCittc2dzdHIgItCU0KrQm9CR0J7Qp9CY0J3QkCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICLQv9C70LjRgtC60L4g0LrQu9C+0L3QuNGA0LDQvdC1INC00L4g0YLQsNC30Lgg0JTQqtCb0JHQntCn0JjQndCQIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTAKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgIiIKKyLQutC70L7QvdC40YDQsNC90LUg0YHQsNC80L4g0L3QsCDQtdC00LjQvSDQutC70L7QvSDigJQg0LjQu9C4INGB0L7Rh9C10L3QuNGPINC+0YIg0L7RgtC00LDQu9C10YfQtdC90LjRjyDigJ5IRUFE4oCcLCDQuNC70Lgg0LjQt9GA0LjRh9C90L4gIgorItC30LDQtNCw0LTQtdC90LjRjyDRgSDigJ4tLWJyYW5jaOKAnCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxIGJ1aWx0aW4vaW5pdC1kYi5jOjUwOQorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAi0KHQm9Cj0JbQldCR0J3QkF/QlNCY0KDQldCa0KLQntCg0JjQryIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyIGJ1aWx0aW4vaW5pdC1kYi5jOjUxMAorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgItC+0YLQtNC10LvQvdCwINCh0JvQo9CW0JXQkdCd0JBf0JTQmNCg0JXQmtCi0J7QoNCY0K8g0LfQsCBnaXQg0LjQt9Cy0YrQvSDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkzCittc2dpZCAia2V5PXZhbHVlIgorbXNnc3RyICLQmtCb0K7Qpz3QodCi0J7QmdCd0J7QodCiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDQvdCw0YHRgtGA0L7QudC60LjRgtC1INC90LAg0L3QvtCy0L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICLQtdGC0LDQu9C+0L3QvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg4oCeJXPigJwg0L3QtSDQtSDQu9C+0LrQsNC70L3QviIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgItC10YLQsNC70L7QvdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCDQtSDQv9C70LjRgtC60L4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICLQtdGC0LDQu9C+0L3QvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg4oCeJXPigJwg0LUg0YEg0L/RgNC40YHQsNC20LTQsNC90LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC90LAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMTIgYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7Qu9GD0YfQtdC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICLigJ4lc+KAnCDRgdGK0YnQtdGB0YLQstGD0LLQsCDQuCDQvdC1INC1INC00LjRgNC10LrRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzI4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzXG4iCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LvRg9GH0LXQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICLQstGA0YrQt9C60LDRgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC90LAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICLRhNCw0LnQu9GK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC60L7Qv9C40YDQsNC9INC60LDRgtC+IOKAniVz4oCcIgorCisjOiBidWlsdGluL2Nsb25lLmM6Mzc3IGJ1aWx0aW4vY2xvbmUuYzo1NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAi0LTQtdC50YHRgtCy0LjQtdGC0L4g0LfQsNCy0YrRgNGI0LguXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozODkKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB0aGUgY2hlY2tvdXQgd2l0aCAnZ2l0IGNoZWNrb3V0IC1mIEhFQUQnXG4iCittc2dzdHIgIiIKKyLQmtC70L7QvdC40YDQsNC90LXRgtC+INCx0LUg0YPRgdC/0LXRiNC90L4g0LfQsCDRgNCw0LfQu9C40LrQsCDQvtGCINC/0L7QtNCz0L7RgtC+0LLQutCw0YLQsCDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+XG4iCisi0LfQsCDQvtC/0YDQtdC00LXQu9C10L0g0LrQu9C+0L0uINCS0YHQtSDQv9Cw0Log0LzQvtC20LXRgtC1INC00LAg0L/RgNC+0LLQtdGA0LjRgtC1INC60L7QuCDRhNCw0LnQu9C+0LLQtSDQuCDQvtGCINC60L7QuVxuIgorItC60LvQvtC9INCyINC80L7QvNC10L3RgtCwINGB0LAg0LjQt9GC0LXQs9C70LXQvdC4INGBINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgc3RhdHVz4oCcLiDQnNC+0LbQtdGC0LUg0LTQsFxuIgorItC30LDQstGK0YDRiNC40YLQtSDQuNC30YLQtdCz0LvRj9C90LXRgtC+INC90LAg0LrQu9C+0L3QsCDRgSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGNoZWNrb3V0IC1mIEhFQUTigJwuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIiIKKyLQmtC70L7QvdGK0YIg4oCeJXPigJwg0L7RgiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1LCDQutC+0LXRgtC+INC60LvQvtC90LjRgNCw0YLQtSxcbiIKKyLQuCDQutC+0LnRgtC+INGB0LvQtdC00LLQsCDQtNCwINCx0YrQtNC1INC40LfRgtC10LPQu9C10L0sINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAuIgorCisjIEZJWE1FIHRyYW5zbGF0b3Igbm90ZSB0aGF0IHRoZSBzcGFjZSBhdCBlbmQgaXMgbmVjZXNzc2FyeQorIzogYnVpbHRpbi9jbG9uZS5jOjU0NgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkuLi4gIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0LLRgNGK0LfQutCw0YLQsOKApiAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NDkKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAi0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDQvdC1INC40LfQv9GA0LDRgtC4INCy0YHQuNGH0LrQuCDQvdC10L7QsdGF0L7QtNC40LzQuCDQvtCx0LXQutGC0LguIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjEzCittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICIiCisi0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeSEVBROKAnCDQvtGCINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0YHQvtGH0Lgg0LrRitC8INC90LXRidC+LFxuIgorItC60L7QtdGC0L4g0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsC4g0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9GC0LXQs9C70Lgg0L7Qv9GA0LXQtNC10LvQtdC9INC60LvQvtC9LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjQ0Cittc2dpZCAidW5hYmxlIHRvIGNoZWNrb3V0IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7QtNCz0L7RgtCy0LXQvdC+IgorCisjOiBidWlsdGluL2Nsb25lLmM6NzMxCittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9Cy0YrRgNGI0Lgg0L/QsNC60LXRgtC40YDQsNC90LUg0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC10YLQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjczMworbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAi0LLRgNC10LzQtdC90L3QuNGP0YIg0YTQsNC50Lsg0LfQsCDQsNC70YLQtdGA0L3QsNGC0LjQstC90Lgg0L7QsdC10LrRgtC4INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NjMKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICLQn9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQsNGA0LPRg9C80LXQvdGC0LguIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzY3Cittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICLQotGA0Y/QsdCy0LAg0LTQsCDRg9C60LDQttC10YLQtSDQutC+0LUg0YXRgNCw0L3QuNC70LjRidC1INC40YHQutCw0YLQtSDQtNCwINC60LvQvtC90LjRgNCw0YLQtS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLWJhcmXigJwg0Lgg4oCeLS1vcmlnaW4gJXPigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LguIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzgxCittc2dpZCAiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tYmFyZeKAnCDQuCDigJ4tLXNlcGFyYXRlLWdpdC1kaXLigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LguIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzk0CisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDRhdGA0LDQvdC40LvQuNGJ0LUg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MDAgYnVpbHRpbi9mZXRjaC5jOjExNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICLQtNGK0LvQsdC+0YfQuNC90LDRgtCwINGC0YDRj9Cx0LLQsCDQtNCwINC1INC/0L7Qu9C+0LbQuNGC0LXQu9C90L4g0YbRj9C70L4g0YfQuNGB0LvQviwg0LAg0L3QtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgxMAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICLRhtC10LvQtdCy0LjRj9GCINC/0YrRgiDigJ4lc+KAnCDRgdGK0YnQtdGB0YLQstGD0LLQsCDQuCDQvdC1INC1INC/0YDQsNC30L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLQsiDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgzNSBidWlsdGluL2Nsb25lLmM6ODQ2IGJ1aWx0aW4vd29ya3RyZWUuYzoxOTMKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgItGA0L7QtNC40YLQtdC70YHQutC40YLQtSDQtNC40YDQtdC60YLQvtGA0LjQuCDQvdCwIOKAniVz4oCcINC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0YHRitC30LTQsNC00LXQvdC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODM4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnIgorbXNnc3RyICLRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQsiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvdC+LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAi0JrQu9C+0L3QuNGA0LDQvdC1INC4INGB0YrQt9C00LDQstCw0L3QtSDQvdCwINCz0L7Qu9C+INGF0YDQsNC90LjQu9C40YnQtSDQsiDigJ4lc+KAnOKAplxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgItCa0LvQvtC90LjRgNCw0L3QtSDQuCDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LUg0LIg4oCeJXPigJzigKZcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg4MworbXNnaWQgIi0tZGlzc29jaWF0ZSBnaXZlbiwgYnV0IHRoZXJlIGlzIG5vIC0tcmVmZXJlbmNlIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tLWRpc3NvY2lhdGXigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBIOKAni0tcmVmZXJlbmNl4oCcIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTAwCittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyLQn9GA0Lgg0LvQvtC60LDQu9C90L4g0LrQu9C+0L3QuNGA0LDQvdC1INC+0L/RhtC40Y/RgtCwIOKAni0tZGVwdGjigJwg0YHQtSDQuNCz0L3QvtGA0LjRgNCwLiDQn9C+0LvQt9Cy0LDQudGC0LUg0YHRhdC10LzQsNGC0LAgIgorIuKAnmZpbGU6Ly/igJwuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTAzCittc2dpZCAic291cmNlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdywgaWdub3JpbmcgLS1sb2NhbCIKK21zZ3N0ciAi0LrQu9C+0L3QuNGA0LDQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0LUg0L/Qu9C40YLQutC+LCDQt9Cw0YLQvtCy0LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1sb2NhbOKAnCDRgdC1INC40LPQvdC+0YDQuNGA0LAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MDgKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tbG9jYWzigJwg0YHQtSDQuNCz0L3QvtGA0LjRgNCwIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorbXNnc3RyICLQndC1INGB0LUg0L/QvtC00LTRitGA0LbQsCDQutC70L7QvdC40YDQsNC90LUg0L3QsCDQstGA0YrQt9C60Lgg0L7RgiDQstC40LTQsCDigJ4lc+KAnCAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjEgYnVpbHRpbi9jbG9uZS5jOjk2OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAi0J7RgtC00LDQu9C10YfQtdC90LjRj9GCINC60LvQvtC9IOKAniVz4oCcINC70LjQv9GB0LLQsCDQsiDQutC70L7QvdC40YDQsNC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3MgorbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgItCY0LfQs9C70LXQttC00LAg0LrQu9C+0L3QuNGA0LDRhdGC0LUg0L/RgNCw0LfQvdC+INGF0YDQsNC90LjQu9C40YnQtS4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6OQorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI2Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdCw0YHRgtGA0L7QudC60LjRgtC1IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vY29sdW1uLmM6MjgKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICLQutCw0Log0LTQsCDRgdC1INC/0L7QtNGA0LXQtNC4INGA0LXQt9GD0LvRgtCw0YLQsCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgItCc0LDQutGB0LjQvNCw0LvQvdCwINGI0LjRgNC+0YfQuNC90LAiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIgorbXNnc3RyICLQn9C+0LvQtSDQsiDQt9C90LDRhtC4INC+0YLQu9GP0LLQviIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICLQn9C+0LvQtSDQsiDQt9C90LDRhtC4INC+0YLQtNGP0YHQvdC+IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgItCf0L7Qu9C1INCyINC30L3QsNGG0Lgg0LzQtdC20LTRgyDQutC+0LvQvtC90LjRgtC1IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWNvbW1hbmTigJwg0YLRgNGP0LHQstCwINC00LAg0LUg0L/RitGA0LLQuNGP0YIg0LDRgNCz0YPQvNC10L3RgiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNworbXNnaWQgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFvQntCf0KbQmNCv4oCmXSBbLS1dINCf0KrQouKApiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MgorbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFvQntCf0KbQmNCv4oCmXSBbLS1dINCf0KrQouKApiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorItCY0LzQtdGC0L4g0Lgg0LDQtNGA0LXRgdGK0YIg0LfQsCDQtS3Qv9C+0YnQsCDRgdCwINC90LDRgdGC0YDQvtC10L3QuCDQsNCy0YLQvtC80LDRgtC40YfQvdC+INC90LAg0LHQsNC30LDRgtCwINC90LAg0LjQvNC10YLQviDQvdCwXG4iCisi0L/QvtGC0YDQtdCx0LjRgtC10LvRjyDQuCDQuNC80LXRgtC+INC90LAg0LzQsNGI0LjQvdCw0YLQsC4g0J/RgNC+0LLQtdGA0LXRgtC1INC00LDQu9C4INGB0LAg0LLQtdGA0L3QuC4g0JzQvtC20LXRgtC1INC00LAg0YHQv9GA0LXRgtC1XG4iCisi0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1INC60LDRgtC+INC40LfRgNC40YfQvdC+INC30LDQtNCw0LTQtdGC0LUg0YHRgtC+0LnQvdC+0YHRgtC40YLQtS4g0JjQt9C/0YrQu9C90LXRgtC1INGB0LvQtdC00L3QsNGC0LAgIgorItC60L7QvNCw0L3QtNCwXG4iCisi0Lgg0YHQu9C10LTQstCw0LnRgtC1INC40L3RgdGC0YDRg9C60YbQuNC40YLQtSDQsiDRgtC10LrRgdGC0L7QstC40Y8g0LLQuCDRgNC10LTQsNC60YLQvtGALCDQt9CwINC00LAg0YDQtdC00LDQutGC0LjRgNCw0YLQtVxuIgorItC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90L3QuNGPINGE0LDQudC7OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorItCh0LvQtdC0INC60LDRgtC+INC90LDQv9GA0LDQstC40YLQtSDRgtC+0LLQsCwg0LzQvtC20LXRgtC1INC00LAg0LrQvtGA0LjQs9C40YDQsNGC0LUg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0LDQstGC0L7RgNCwINC90LBcbiIKKyLRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0YfRgNC10Lc6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwCittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisi0JjQvNC10YLQviDQuCDQsNC00YDQtdGB0YrRgiDQt9CwINC1LdC/0L7RidCwINGB0LAg0L3QsNGB0YLRgNC+0LXQvdC4INCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0L3QsCDQsdCw0LfQsNGC0LAg0L3QsCDQuNC80LXRgtC+INC90LBcbiIKKyLQv9C+0YLRgNC10LHQuNGC0LXQu9GPINC4INC40LzQtdGC0L4g0L3QsCDQvNCw0YjQuNC90LDRgtCwLiDQn9GA0L7QstC10YDQtdGC0LUg0LTQsNC70Lgg0YHQsCDQstC10YDQvdC4LiDQnNC+0LbQtdGC0LUg0LTQsCDRgdC/0YDQtdGC0LVcbiIKKyLRgtC+0LLQsCDRgdGK0L7QsdGJ0LXQvdC40LUg0LrQsNGC0L4g0LjQt9GA0LjRh9C90L4g0LfQsNC00LDQtNC10YLQtSDRgdGC0L7QudC90L7RgdGC0LjRgtC1OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcItCS0LDRiNC10YLQviDQmNC80LVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwg0L/QtdC90YfQvkBleGFtcGxlLmNvbVxuIgorIlxuIgorItCh0LvQtdC0INC60LDRgtC+INC90LDQv9GA0LDQstC40YLQtSDRgtC+0LLQsCwg0LzQvtC20LXRgtC1INC00LAg0LrQvtGA0LjQs9C40YDQsNGC0LUg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0LDQstGC0L7RgNCwINC90LBcbiIKKyLRgtC10LrRg9GJ0L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0YfRgNC10Lc6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisi0J/QvtC40YHQutCw0YXRgtC1INC00LAg0L/QvtC/0YDQsNCy0LjRgtC1INC/0L7RgdC70LXQtNC90L7RgtC+INGB0Lgg0L/QvtC00LDQstCw0L3QtS4g0KLQvtCy0LAg0LTQtdC50YHRgtCy0LjQtSDRidC1INC/0YDQtdCy0YrRgNC90LVcbiIKKyLQv9C+0LTQsNCy0LDQvdC10YLQviDQsiDQv9GA0LDQt9C90L4uINCc0L7QttC10YLQtSDQuNC70Lgg0LTQsCDQs9C+INC/0L7QstGC0L7RgNC40YLQtSDQutCw0YLQviDRgNCw0LfRgNC10YjQuNGC0LUg0YLQsNC60LjQstCwICIKKyLQv9C+0LTQsNCy0LDQvdC40Y9cbiIKKyLRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLWFsbG93LWVtcHR54oCcLCDQuNC70Lgg0LTQsCDQs9C+INC40LfRgtGA0LjQtdGC0LUg0L7RgiDQuNGB0YLQvtGA0LjRj9GC0LAg0YEg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIuKAnmdpdCByZXNldCBIRUFEXuKAnC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NworbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisi0J/RgNC10LTQuNGI0L3QvtGC0L4g0L7RgtCx0YDQsNC90L4g0L/QvtC00LDQstCw0L3QtSDQstC10YfQtSDQtSDQv9GA0LDQt9C90L4sINC60LDRgtC+INC90LDQuS3QstC10YDQvtGP0YLQvdCw0YLQsCDQv9GA0LjRh9C40L3QsCDQtVxuIgorItC60L7RgNC10LrRhtC40Y8g0L3QsCDQutC+0L3RhNC70LjQutGCLiDQkNC60L4g0LLRgdC1INC/0LDQuiDQuNGB0LrQsNGC0LUg0LTQsCDQs9C+INC/0L7Qu9C30LLQsNGC0LUsINC40LfQv9C+0LvQt9Cy0LDQudGC0LUgIgorItC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAi0JIg0L/RgNC+0YLQuNCy0LXQvSDRgdC70YPRh9Cw0Lkg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IHJlc2V04oCcXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODcKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgcmVzZXRcbiIKKyJcbiIKKyJUaGVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB3aWxsIHJlc3VtZSBjaGVycnktcGlja2luZ1xuIgorInRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKK21zZ3N0ciAiIgorItCQ0LrQviDQuNGB0LrQsNGC0LUg0LTQsCDQv9GA0LXRgdC60L7Rh9C40YLQtSDRgtC+0LLQsCDQv9C+0LTQsNCy0LDQvdC1LCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlc2V0XG4iCisiXG4iCisi0KfRgNC10Lcg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBjaGVycnktcGljayAtLWNvbnRpbnVl4oCcINGJ0LUg0L/RgNC+0LTRitC70LbQuNGC0LUg0L7RgtCx0LjRgNCw0L3QtdGC0L4g0L3QsFxuIgorItC+0YHRgtCw0L3QsNC70LjRgtC1INC/0L7QtNCw0LLQsNC90LjRjy5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMDQKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgItCy0YrRgNGF0L7QstC+0YLQviDQtNGK0YDQstC+IChIRUFEIHRyZWUgb2JqZWN0KSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9Cy0LDQtNC10L3QviDQvtGCINC/0LDQutC10YIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzQ0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgItCy0YDQtdC80LXQvdC90LjRj9GCINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi9jb21taXQuYzozNTAKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90L4g0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+INC00L7QsdCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzYxCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiCittc2dzdHIgItC40L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2MworbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICLQstGA0LXQvNC10L3QvdC40Y/RgiDQuNC90LTQtdC60YEg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0LHQvdC+0LLQtdC9IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NQorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICLQlNGK0YDQstC+0YLQviDQvdCwINC+0YHQvdC+0LLQvdC40Y8g0LrQtdGIINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvdC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM4OSBidWlsdGluL2NvbW1pdC5jOjQxNCBidWlsdGluL2NvbW1pdC5jOjQ2MworbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAi0L3QvtCy0LjRj9GCINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ1Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICLQv9C+INCy0YDQtdC80LUg0L3QsCDRgdC70LjQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDRh9Cw0YHRgtC40YfQvdC+INC/0L7QtNCw0LLQsNC90LUuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ0NworbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAi0L/QviDQstGA0LXQvNC1INC90LAg0L7RgtCx0LjRgNCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDRh9Cw0YHRgtC40YfQvdC+INC/0L7QtNCw0LLQsNC90LUuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ1NgorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAi0LjQvdC00LXQutGB0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgItCy0YDQtdC80LXQvdC90LjRj9GCINC40L3QtNC10LrRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiCittc2dzdHIgItC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCINC30LAg0LDQstGC0L7RgCDQsiDQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQu9C40L/RgdCy0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGhhcyBtYWxmb3JtZWQgYXV0aG9yIGxpbmUiCittc2dzdHIgItC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCINC30LAg0LDQstGC0L7RgCDQsiDQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQtSDQvdC10L/RgNCw0LLQuNC70L3QsCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDEKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQv9Cw0YDQsNC80LXRgtGK0YAg0LrRitC8INC+0L/RhtC40Y/RgtCwIOKAni0tYXV0aG9y4oCcIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQvtGA0LzQsNGCINC90LAg0LTQsNGC0LA6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY1MworbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9Cx0LXRgNC1INC30L3QsNC6INC30LAg0LrQvtC80LXQvdGC0LDRgCDigJQg0LIg0YLQtdC60YPRidC+0YLQviDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQv9C+0LTQsNCy0LDQvdC1INGB0LAgIgorItC40LfQv9C+0LvQt9Cy0LDQvdC4INCy0YHQuNGH0LrQuCDQv9C+0LTQvtCx0L3QuCDQt9C90LDRhtC4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY5MCBidWlsdGluL2NvbW1pdC5jOjcyMyBidWlsdGluL2NvbW1pdC5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgItGB0LvQtdC00L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGC0L46ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwMiBidWlsdGluL3Nob3J0bG9nLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIijQuNC30YfQuNGC0LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0KVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INCx0LUg0L/RgNC+0YfQtdGC0LXQvdC+INGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmaWxlICclcyciCittc2dzdHIgItGE0LDQudC70YrRgiDRgdGK0YEg0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMwCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0YHQu9C40LLQsNC90LUgTUVSR0VfTVNHINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC90L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzM0Cittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAi0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINGB0LzQsNGH0LrQstCw0L3QtSBTUVVBU0hfTVNHINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC90L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzM4IGJ1aWx0aW4vbWVyZ2UuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9jb21taXQuYzo3ODUKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICLRiNCw0LHQu9C+0L3RitGCINC30LAg0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L0iCisKKyMgRklYTUUKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCY0LfQs9C70LXQttC00LAsINGH0LUg0L/QvtC00LDQstCw0YLQtSDRgdC70LjQstCw0L3QtS4g0JDQutC+INGC0L7QstCwINC90LUg0LUg0YLQsNC60LAsINC40LfRgtGA0LjQudGC0LUg0YTQsNC50LvQsDpcbiIKKyJcbiIKKyIgICVzXG4iCisi0Lgg0L7Qv9C40YLQsNC50YLQtSDQvtGC0L3QvtCy0L4uXG4iCisKKyMgRklYTUUKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCY0LfQs9C70LXQttC00LAsINGH0LUg0LjQt9Cy0YrRgNGI0LLQsNGC0LUg0L7RgtCx0YDQsNC90L4g0L/QvtC00LDQstCw0L3QtS4g0JDQutC+INGC0L7QstCwINC90LUg0LUg0YLQsNC60LAsINC40LfRgtGA0LjQudGC0LUgIgorItGE0LDQudC70LA6XG4iCisiXG4iCisiICAlc1xuIgorItC4INC+0L/QuNGC0LDQudGC0LUg0L7RgtC90L7QstC+LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisi0JLRitCy0LXQtNC10YLQtSDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC30LAg0L/QvtC00LDQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC40YLQtS4g0KDQtdC00L7QstC10YLQtSwg0LrQvtC40YLQviDQt9Cw0L/QvtGH0LLQsNGCXG4iCisi0YEg4oCeJWPigJwsINGJ0LUg0LHRitC00LDRgiDQv9GA0L7Qv9GD0YHQvdCw0YLQuCwg0LAg0L/RgNCw0LfQvdC+INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsCDQv9C+0LTQsNCy0LDQvdC10YLQvi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyLQktGK0LLQtdC00LXRgtC1INGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0LfQsCDQv9C+0LTQsNCy0LDQvdC1INC90LAg0L/RgNC+0LzQtdC90LjRgtC1LiDQoNC10LTQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC30LDQv9C+0YfQstCw0YJcbiIKKyLRgSDigJ4lY+KAnCwg0YHRitGJ0L4g0YnQtSDQsdGK0LTQsNGCINCy0LrQu9GO0YfQtdC90Lgg4oCUINC80L7QttC1INC00LAg0LPQuCDQuNC30YLRgNC40LXRgtC1INCy0LjQtS4g0J/RgNCw0LfQvdC+IFxuIgorItGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsCDQv9C+0LTQsNCy0LDQvdC10YLQvi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc9CQ0LLRgtC+0YA6ICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXPQlNCw0YLQsDogICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPQn9C+0LTQsNCy0LDRiTogJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODgxCittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgItCY0L3QtNC10LrRgdGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTM4Cittc2dpZCAiRXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgItCT0YDQtdGI0LrQsCDQv9GA0Lgg0LjQt9Cz0YDQsNC20LTQsNC90LUg0L3QsCDQtNGK0YDQstC10YLQsNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTUzIGJ1aWx0aW4vdGFnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAi0J/QvtC00LDQudGC0LUg0YHRitC+0LHRidC10L3QuNC10YLQviDRgSDQvdGP0LrQvtGPINC+0YIg0L7Qv9GG0LjQuNGC0LUg4oCeLW3igJwg0LjQu9C4IOKAni1G4oCcLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1hdXRob3IgJyVzJyBpcyBub3QgJ05hbWUgPGVtYWlsPicgYW5kIG1hdGNoZXMgbm8gZXhpc3RpbmcgYXV0aG9yIgorbXNnc3RyICIiCisi0J7Qv9GG0LjRj9GC0LAg4oCeLS1hdXRob3IgJyVzJ+KAnCDQvdC1INC+0YLQs9C+0LLQsNGA0Y8g0L3QsCDRhNC+0YDQvNCwzIDRgtCwIOKAntCY0LzQtSA80LUt0L/QvtGJ0LA+4oCcINC4INC90LUg0YHRitCy0L/QsNC00LAg0YEgIgorItC90LjQutC+0Lkg0LDQstGC0L7RgCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDcwIGJ1aWx0aW4vY29tbWl0LmM6MTMxMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg0LfQsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTA3Cittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLWxvbmfigJwg0Lgg4oCeLXrigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LguIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMzcKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLXJlc2V0LWF1dGhvcuKAnCDQuCDigJ4tLWF1dGhvcuKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE0NgorbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICLQndGP0LzQsCDQutCw0LrQstC+INC00LAg0LHRitC00LUg0L/QvtC/0YDQsNCy0LXQvdC+LiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTQ5Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0YHQtSDQuNC30LLRitGA0YjQstCwINGB0LvQuNCy0LDQvdC1LCDQvdC1INC80L7QttC10YLQtSDQtNCwINC/0L7Qv9GA0LDQstGP0YLQtS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE1MQorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgItCSINC80L7QvNC10L3RgtCwINGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQvtGC0LHQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtSwg0L3QtSDQvNC+0LbQtdGC0LUg0LTQsCDQv9C+0L/RgNCw0LLRj9GC0LUuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTQKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLXNxdWFzaOKAnCDQuCDigJ4tLWZpeHVw4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4LiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY0Cittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni1j4oCcLCDigJ4tQ+KAnCwg4oCeLUbigJwg0Lgg4oCeLS1maXh1cOKAnOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2NgorbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi8tLWZpeHVwLiIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLW3igJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBIOKAni1j4oCcLCDigJ4tQ+KAnCwg4oCeLUbigJwg0Lgg4oCeLS1maXh1cOKAnC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3NAorbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIiIKKyLQntC/0YbQuNGP0YLQsCDigJ4tLXJlc2V0LWF1dGhvcuKAnCDQvNC+0LbQtSDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDRgdCw0LzQviDQt9Cw0LXQtNC90L4g0YEg4oCeLUPigJwsIOKAni1j4oCcINC40LvQuFxuIgorIuKAni0tYW1lbmTigJwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTEKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyLQntC/0YbQuNC40YLQtSDigJ4tLWluY2x1ZGXigJwsIOKAni0tb25seeKAnCwg4oCeLS1hbGzigJwsIOKAni0taW50ZXJhY3RpdmXigJwg0Lgg4oCeLS1wYXRjaOKAnCDRgdCwXG4iCisi0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4LiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkzCittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLWluY2x1ZGXigJwg0Lgg4oCeLS1vbmx54oCcINC40LfQuNGB0LrQstCw0YIg0LDRgNCz0YPQvNC10L3RgtC4LiIKKworIyBGSVhNRSBiYWQgbWVzc2FnZQorIzogYnVpbHRpbi9jb21taXQuYzoxMTk1Cittc2dpZCAiQ2xldmVyLi4uIGFtZW5kaW5nIHRoZSBsYXN0IG9uZSB3aXRoIGRpcnR5IGluZGV4LiIKK21zZ3N0ciAiIgorItCn0YPQtNC10YHQvdC+INGB0YLQtSDRgdC1INGB0LXRgtC40LvQuCDQutCw0Log0LTQsCDQv9C+0L/RgNCw0LLQuNGC0LUg0YHRitC+0LHRidC10L3QuNC10YLQviDQvdCwINC/0L7RgdC70LXQtNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUgIgorItC/0YDQuFxuIgorItC/0YDQvtC80LXQvdC10L0g0LjQvdC00LXQutGBLiDQodC/0L7QtNC10LvQtdGC0LUg0Lgg0YEg0LTRgNGD0LMg0L/QvtGC0YDQtdCx0LjRgtC10Lsg0YLRgNC40LrQsCDRgSDigJ5naXQgY29tbWl0IC0tYW1lbmQgLSIKKyJv4oCcLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk3Cittc2dpZCAiRXhwbGljaXQgcGF0aHMgc3BlY2lmaWVkIHdpdGhvdXQgLWkgb3IgLW87IGFzc3VtaW5nIC0tb25seSBwYXRocy4uLiIKK21zZ3N0ciAiIgorItCX0LDQtNCw0LTQtdC90Lgg0YHQsCDQuNC30YDQuNGH0L3QuCDQv9GK0YLQuNGJ0LAg0LHQtdC3INC+0L/RhtC40LjRgtC1IOKAni1p4oCcINC40LvQuCDigJ4tb+KAnC4g0J/RgNC40LXQvNCwINGB0LUsINGH0LUg0LLRgdC1INC10LTQvdC+ICIKKyLRgdGC0LVcbiIKKyLQv9C+0LvQt9Cy0LDQu9C4INC+0L/RhtC40Y/RgtCwIOKAni0tb25seeKAnCDRgSDQn9Cq0KLQuNGJ0LDigKYiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwOSBidWlsdGluL3RhZy5jOjcyOAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAi0J3QtdGB0YrRidC10YHRgtCy0YPQstCw0Ykg0YDQtdC20LjQvCDQvdCwINC40LfRh9C40YHRgtCy0LDQvdC1IOKAniVz4oCcIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMTQKK21zZ2lkICJQYXRocyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tYeKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YHRitGBINC30LDQtNCw0LLQsNC90LXRgtC+INC90LAg0L/RitGC0LjRidCwLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI0IGJ1aWx0aW4vY29tbWl0LmM6MTYwMworbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAi0LrRgNCw0YLQutCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI2IGJ1aWx0aW4vY29tbWl0LmM6MTYwNQorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC60LvQvtC90LjRgtC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjggYnVpbHRpbi9jb21taXQuYzoxNjA3IGJ1aWx0aW4vcHVzaC5jOjUwOQorbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICLRhNC+0YDQvNCw0YIg0L3QsCDQuNC30YXQvtC00LAg0LfQsCDRh9C10YLQtdC90LUg0L7RgiDQv9GA0L7Qs9GA0LDQvNCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzEgYnVpbHRpbi9jb21taXQuYzoxNjA5Cittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICLQv9C+0LTRgNC+0LHQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YHRitGB0YLQvtGP0L3QuNC10YLQviAo0YHRgtCw0L3QtNCw0YDRgtC90L4pIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzQgYnVpbHRpbi9jb21taXQuYzoxNjEyCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgItGA0LDQt9C00LXQu9GP0L3QtSDQvdCwINC10LvQtdC80LXQvdGC0LjRgtC1INGBINC90YPQu9C10LLQuNGPINC30L3QsNC6IOKAnk5VTOKAnCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM2IGJ1aWx0aW4vY29tbWl0LmM6MTYxNSBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgwCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgzIGJ1aWx0aW4vdGFnLmM6NjAzCittc2dpZCAibW9kZSIKK21zZ3N0ciAi0YDQtdC20LjQvCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM3IGJ1aWx0aW4vY29tbWl0LmM6MTYxNQorbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUuINCS0YrQt9C80L7QttC90LjRgtC1INGA0LXQttC40LzQuCDRgdCwIOKAnmFsbOKAnCAo0L/QvtC00YDQvtCx0L3QsFxuIgorItC40L3RhNC+0YDQvNCw0YbQuNGPKSwg4oCebm9ybWFs4oCcICjQutGA0LDRgtC60LAg0LjQvdGE0L7RgNC80LDRhtC40Y8pLCDigJ5ub+KAnCAo0LHQtdC3INC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUpLlxuIgorItCh0YLQsNC90LTQsNGA0YLQvdC40Y/RgiDRgNC10LbQuNC8INC1OiDigJ5hbGzigJwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDAKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQxIHBhcnNlLW9wdGlvbnMuaDoxNTIKK21zZ2lkICJ3aGVuIgorbXNnc3RyICLQutC+0LPQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQyCittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0LIg0L/QvtC00LzQvtC00YPQu9C40YLQtS4g0J7Qv9GG0LjRjyDRgSDQvdC10LfQsNC00YrQu9C20LjRgtC10LvQvdCwINGB0YLQvtC50L3QvtGB0YIg4oCUICIKKyLQtdC00L3QsCDQvtGCXG4iCisi4oCeYWxs4oCcICjQstGB0LjRh9C60LgpLCDigJ5kaXJ0eeKAnCAo0YLQtdC30Lgg0YEg0L3QtdC/0L7QtNCw0LTQtdC90Lgg0L/RgNC+0LzQtdC90LgpLCDigJ51bnRyYWNrZWTigJwgKNC90LXRgdC70LXQtNC10L3QuCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0NAorbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LXRgdC70LXQtNC10L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LIg0LrQvtC70L7QvdC4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MzAKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICLRgtC+0LrRgyDRidC+INGB0YrQt9C00LDQtNC10L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGC0L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQzMgorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAi0YLQvtC60YMg0YnQviDRgdGK0LfQtNCw0LTQtdC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC90L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3NworbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgItC90LXRgdCy0YrRgNC30LDQvSDQstGA0YrRhSDigJ5IRUFE4oCcIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0ODAKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiICjQvdCw0YfQsNC70L3QviDQv9C+0LTQsNCy0LDQvdC1KSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTczCittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAi0LHQtdC3INC40L3RhNC+0YDQvNCw0YbQuNGPINGB0LvQtdC0INGD0YHQv9C10YjQvdC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NAorbXNnaWQgInNob3cgZGlmZiBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGA0LDQt9C70LjQutCw0YLQsCDQutGK0Lwg0YjQsNCx0LvQvtC90LAg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzYKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICLQntC/0YbQuNC4INC30LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc3IGJ1aWx0aW4vdGFnLmM6NjAxCittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAi0LLQt9C40LzQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC+0YIg0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OAorbXNnaWQgImF1dGhvciIKK21zZ3N0ciAi0LDQstGC0L7RgCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc4Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDQsNCy0YLQvtGAINC30LAg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OSBidWlsdGluL2djLmM6MjgwCittc2dpZCAiZGF0ZSIKK21zZ3N0ciAi0LTQsNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OQorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINC00LDRgtCwINC30LAg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MCBidWlsdGluL21lcmdlLmM6MjE4IGJ1aWx0aW4vbm90ZXMuYzozOTEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTQgYnVpbHRpbi90YWcuYzo1OTkKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MAorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MQorbXNnaWQgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QtSDQuCDRgNC10LTQsNC60YLQuNGA0LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQvtGCINGD0LrQsNC30LDQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODIKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi0L/RgNC10LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC+0YIg0YPQutCw0LfQsNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MworbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L7RgtC+INGB0YrQvtCx0YnQtdC90LjQtSDQv9GA0Lgg0YHQvNCw0YfQutCy0LDQvdC1INC30LAg0LLQutCw0YDQstCw0L3QtSDQvdCwICIKKyLRg9C60LDQt9Cw0L3QvtGC0L5cbiIKKyLQv9C+0LTQsNCy0LDQvdC1INCyINC/0YDQtdC00L3QvtGC0L4g0LHQtdC3INGB0LvQtdC00LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NAorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQsNCy0YLQvtC80LDRgtC40YfQvdC+0YLQviDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INGB0LzQsNGH0LrQstCw0L3QtSDQt9CwINGB0LzQsNGH0LrQstCw0L3QtSDQvdCwICIKKyLRg9C60LDQt9Cw0L3QvtGC0L5cbiIKKyLQv9C+0LTQsNCy0LDQvdC1INCyINC/0YDQtdC00L3QvtGC0L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NQorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIiIKKyLRgdC80Y/QvdCwINC90LAg0LDQstGC0L7RgNCwINC00LAg0YHRitCy0L/QsNC00LAg0YEg0L/QvtC00LDQstCw0YnQuNGPICjQuNC30L/QvtC70LfQstCwINGB0LUg0YEg4oCeLUPigJwv4oCeLWPigJwv4oCeLS1hbWVuZOKAnCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NiBidWlsdGluL2xvZy5jOjExOTEgYnVpbHRpbi9yZXZlcnQuYzo4NgorbXNnaWQgImFkZCBTaWduZWQtb2ZmLWJ5OiIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC/0L7Qu9C1INC30LAg0L/QvtC00L/QuNGBIOKAlCDigJ5TaWduZWQtb2ZmLWJ5OuKAnCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg3Cittc2dpZCAidXNlIHNwZWNpZmllZCB0ZW1wbGF0ZSBmaWxlIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGD0LrQsNC30LDQvdC40Y8g0YjQsNCx0LvQvtC90LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg4Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgItGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODkKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICLRgdGC0LDQvdC00LDRgNGC0L3QviIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg5IGJ1aWx0aW4vdGFnLmM6NjA0Cittc2dpZCAiaG93IHRvIHN0cmlwIHNwYWNlcyBhbmQgI2NvbW1lbnRzIGZyb20gbWVzc2FnZSIKK21zZ3N0ciAi0LrQvtC4INC/0YDQsNC30L3QuCDQt9C90LDRhtC4INC4ICPQutC+0LzQtdC90YLQsNGA0Lgg0LTQsCDRgdC1INC80LDRhdCw0YIg0L7RgiDRgdGK0L7QsdGJ0LXQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTAKK21zZ2lkICJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAi0LLQvNGK0LrQstCw0L3QtSDQvdCwINGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0LIg0YjQsNCx0LvQvtC90LAg0LfQsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTEgYnVpbHRpbi9tZXJnZS5jOjIyNSBidWlsdGluL3JldmVydC5jOjkyCisjOiBidWlsdGluL3RhZy5jOjYwNQorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAi0JjQlNCV0J3QotCY0KTQmNCa0JDQotCe0KBf0J3QkF/QmtCb0K7QpyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTkyIGJ1aWx0aW4vbWVyZ2UuYzoyMjYgYnVpbHRpbi9yZXZlcnQuYzo5MworbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAi0L/QvtC00L/QuNGB0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC10YLQviDRgSBHUEciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NQorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICLQntC/0YbQuNC4INC30LAg0LjQt9Cx0L7RgCDQvdCwINGE0LDQudC70L7QstC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTYKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L/RgNC+0LzQtdC90LXQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTcKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDRg9C60LDQt9Cw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0LrRitC8INC40L3QtNC10LrRgdCwINC30LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk4Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5OQorbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGNoYW5nZXMiCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L/RgNC+0LzQtdC90LgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwMAorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSDRgdCw0LzQviDQvdCwINGD0LrQsNC30LDQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjAxCittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgaG9vayIKK21zZ3N0ciAi0LHQtdC3INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg0LrRg9C60LDRgtCwINC/0YDQtdC00Lgg0L/QvtC00LDQstCw0L3QtSAocHJlLWNvbW1pdCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwMgorbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgItC+0YLQv9C10YfQsNGC0LLQsNC90LUg0L3QsCDRgtC+0LLQsCwg0LrQvtC10YLQviDQsdC4INCx0LjQu9C+INC/0L7QtNCw0LTQtdC90L4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxMworbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAi0L/QvtC/0YDQsNCy0Y/QvdC1INC90LAg0L/RgNC10LTQuNGI0L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE0Cittc2dpZCAiYnlwYXNzIHBvc3QtcmV3cml0ZSBob29rIgorbXNnc3RyICLQsdC10Lcg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutGD0LrQsNGC0LAg0YHQu9C10LQg0L/RgNC10LfQsNC/0LjRgdCy0LDQvdC1IChwb3N0LXJld3JpdGUpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTkKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICLQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0L/RgNCw0LfQvdC4INC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjIxCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyDRgSDQv9GA0LDQt9C90Lgg0YHRitC+0LHRidC10L3QuNGPIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NTAKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgItCy0YrRgNGF0L7QstC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L3QviIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjg5IGJ1aWx0aW4vbWVyZ2UuYzoxMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgItGE0LDQudC70YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvTog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY5NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICLQn9C+0LLRgNC10LTQtdC9INGE0LDQudC7INC30LAg0LLRitGA0YXQsCDQt9CwINGB0LvQuNCy0LDQvdC10YLQviDigJ5NRVJHRV9IRUFE4oCcICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTcwMworbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgItGA0LXQttC40LzRitGCINC90LAg0YHQu9C40LLQsNC90LUg4oCeTUVSR0VfTU9EReKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAi0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC/0L7QtNCw0LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L3QvjogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTczMworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgItCd0LXQuNC30LLRitGA0YjQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUg0L/QvtGA0LDQtNC4INC90LXRgNC10LTQsNC60YLQuNGA0LDQvdC+INGB0YrQvtCx0YnQtdC90LjQtS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdCBkdWUgdG8gZW1wdHkgY29tbWl0IG1lc3NhZ2UuXG4iCittc2dzdHIgItCd0LXQuNC30LLRitGA0YjQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LUg0L/QvtGA0LDQtNC4INC/0YDQsNC30L3QviDRgdGK0L7QsdGJ0LXQvdC40LUuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTc1MyBidWlsdGluL21lcmdlLmM6ODI5IGJ1aWx0aW4vbWVyZ2UuYzo4NTQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg0LfQsCDQv9C+0LTQsNCy0LDQvdC10YLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTc4NgorbXNnaWQgIiIKKyJSZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzZXQgSEVBRFwiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi0KXRgNCw0L3QuNC70LjRidC10YLQviDQtSDQvtCx0L3QvtCy0LXQvdC+LCDQvdC+INC90L7QstC40Y/RgiDRhNCw0LnQuyDQt9CwINC40L3QtNC10LrRgSDigJ5uZXdfaW5kZXjigJxcbiIKKyLQvdC1INC1INC30LDQv9C40YHQsNC9LiDQn9GA0L7QstC10YDQtdGC0LUg0LTQsNC70Lgg0LTQuNGB0LrRitGCINC90LUg0LUg0L/RgNC10L/RitC70L3QtdC9INC40LvQuCDQvdC1INGB0YLQtVxuIgorItC/0YDQtdCy0LjRiNC40LvQuCDQtNC40YHQutC+0LLQsNGC0LAg0YHQuCDQutCy0L7RgtCwLiDQodC70LXQtCDRgtC+0LLQsCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJlc2V0IEhFQUTigJwuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFvQntCf0KbQmNCv4oCmXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo1MworbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICLQnNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1INC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y8g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTQKK21zZ2lkICJ1c2UgZ2xvYmFsIGNvbmZpZyBmaWxlIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINCz0LvQvtCx0LDQu9C90LjRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC10L0g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTUKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0LjRgdGC0LXQvNC90LjRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC10L0g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTYKK21zZ2lkICJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40L7QvdC90LjRjyDRhNCw0LnQuyDQvdCwINGF0YDQsNC90LjQu9C40YnQtdGC0L4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTcKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LfQsNC00LDQtNC10L3QuNGPINC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OAorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgItC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC90LAgQkxPQiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OAorbXNnaWQgInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiCittc2dzdHIgIiIKKyLQuNC30YfQuNGC0LDQvdC1INC90LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNGP0YLQsCDQvtGCIEJMT0Ig0YEg0YLQvtC30Lgg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTkKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgItCU0LXQudGB0YLQstC40LUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjAKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRgtC+0LnQvdC+0YHRgjog0JjQnNCVIFvQoNCV0JPQo9Cb0K/QoNCV0J1f0JjQl9Cg0JDQl1/Ql9CQX9Ch0KLQntCZ0J3QntCh0KLQotCQXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MQorbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LLRgdC40YfQutC4INGB0YLQvtC50L3QvtGB0YLQuDog0LrQu9GO0YcgW9Cg0JXQk9Cj0JvQr9Cg0JXQnV/QmNCX0KDQkNCXX9CX0JBf0KHQotCe0JnQndCe0KHQotCi0JBdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYyCittc2dpZCAiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0L7QudC90L7RgdGC0LjRgtC1INC30LAg0KDQldCT0KPQm9Cv0KDQndC40Y9f0JjQl9Cg0JDQlzog0KDQldCT0KPQm9Cv0KDQldCdX9CY0JfQoNCQ0Jdf0JfQkF/QmNCc0JXQotCeICIKKyJb0KDQldCT0KPQm9Cv0KDQldCdX9CY0JfQoNCQ0Jdf0JfQkF/QodCi0J7QmdCd0J7QodCi0KLQkF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjMKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0L7QudC90L7RgdGC0YLQsCDQt9CwINGD0LrQsNC30LDQvdC40Y8g0LDQtNGA0LXRgTog0KDQkNCX0JTQldCbWy7Qn9Cg0J7QnNCV0J3Qm9CY0JLQkF0g0JDQlNCg0JXQoSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NAorbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICIiCisi0LfQsNC80Y/QvdCwINC90LAg0LLRgdC40YfQutC4INGB0YrQstC/0LDQtNCw0YnQuCDQv9GA0L7QvNC10L3Qu9C40LLQuDog0JjQnNCVINCh0KLQntCZ0J3QntCh0KIgIgorIlvQoNCV0JPQo9Cb0K/QoNCV0J1f0JjQl9Cg0JDQl1/Ql9CQX9Ch0KLQntCZ0J3QntCh0KLQotCQXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NQorbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC90L7QstCwINC/0YDQvtC80LXQvdC70LjQstCwOiDQmNCc0JUg0KHQotCe0JnQndCe0KHQoiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NgorbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC70LjQstCwOiDQmNCc0JUgW9Cg0JXQk9Cj0JvQr9Cg0JXQnV/QmNCX0KDQkNCXX9CX0JBf0KHQotCe0JnQndCe0KHQotCi0JBdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY3Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDRgdGK0LLQv9Cw0LTQsNGJ0Lg6INCY0JzQlSBb0KDQldCT0KPQm9Cv0KDQldCdX9CY0JfQoNCQ0Jdf0JfQkF/QodCi0J7QmdCd0J7QodCi0KLQkF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjgKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgItC/0YDQtdC40LzQtdC90YPQstCw0L3QtSDQvdCwINGA0LDQt9C00LXQuzog0KHQotCQ0KDQnl/QmNCc0JUg0J3QntCS0J5f0JjQnNCVIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY5Cittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YDQsNC30LTQtdC7OiDQmNCc0JUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzAKK21zZ2lkICJsaXN0IGFsbCIKK21zZ3N0ciAi0LjQt9Cx0YDQvtGP0LLQsNC90LUg0L3QsCDQstGB0LjRh9C60LgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzEKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAi0L7RgtCy0LDRgNGP0L3QtSDQvdCwINGA0LXQtNCw0LrRgtC+0YAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzIKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LfQsNC00LDQtNC10L3QuNGPINGG0LLRj9GCOiDQvdC+0LzQtdGAIFvRgdGC0LDQvdC00LDRgNGC0L3Qvl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LfQsNC00LDQtNC10L3QuNGPINGG0LLRj9GCOiDQvdC+0LzQtdGAIFvRgdGC0LDQvdC00LDRgNGC0L3QuNGP0YIg0LjQt9GF0L7QtCDQtSDRgtC10YDQvNC40L3QsNC7XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NAorbXNnaWQgIlR5cGUiCittc2dzdHIgItCS0LjQtCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NQorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAi0KHQotCe0JnQndCe0KHQotCi0JAg0LUg4oCedHJ1ZeKAnCAo0LjRgdGC0LjQvdCwKSDQuNC70Lgg4oCeZmFsc2XigJwgKNC70YrQttCwKSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NgorbXNnaWQgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIgorbXNnc3RyICLQodCi0J7QmdCd0J7QodCi0KLQkCDQtSDRhtGP0LvQviwg0LTQtdGB0LXRgtC40YfQvdC+INGH0LjRgdC70L4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzcKK21zZ2lkICJ2YWx1ZSBpcyAtLWJvb2wgb3IgLS1pbnQiCittc2dzdHIgItCh0KLQntCZ0J3QntCh0KLQotCQINC1IOKAni0tYm9vbOKAnCAo0LHRg9C70LXQstCwKSDQuNC70Lgg4oCeLS1pbnTigJwgKNC00LXRgdC10YLQuNGH0L3QviDRhtGP0LvQviDRh9C40YHQu9C+KSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OAorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgItCh0KLQntCZ0J3QntCh0KLQotCQINC1INC/0YrRgiAo0LTQviDRhNCw0LnQuyDQuNC70Lgg0LTQuNGA0LXQutGC0L7RgNC40Y8pIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc5Cittc2dpZCAiT3RoZXIiCittc2dzdHIgItCU0YDRg9Cz0LgiCisKKyMgRklYTUUgTlVMIGJ5dGUgdG8gbnVsbCBjaGFyLCB0ZXJtaW5hdGUgLT4gcmF6ZGVsaXRlbCAtIGRhIHN0YW5lIGVkbmFrdm8KKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODAKK21zZ2lkICJ0ZXJtaW5hdGUgdmFsdWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgItGA0LDQt9C00LXQu9GP0L3QtSDQvdCwINGB0YLQvtC50L3QvtGB0YLQuNGC0LUg0YEg0L3Rg9C70LXQstC40Y8g0LfQvdCw0Log4oCeTlVM4oCcIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgxCittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICLQv9GA0Lgg0YLRitGA0YHQtdC90LUg0LTQsCDRgdC1INGD0LLQsNC20LDRgiDQuCDQtNC40YDQtdC60YLQuNCy0LjRgtC1INC30LAg0LLQutC70Y7Rh9Cy0LDQvdC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjMxNgorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICLQvdC10YDQsNC30L/QvtC30L3QsNGC0LAg0YHRgtC+0LnQvdC+0YHRgiDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0YbQstGP0YIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjINCi0L7QstCwINC1INC/0L7RgtGA0LXQsdC40YLQtdC70YHQutC40Y/RgiDQstC4INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQvtC90LXQvSDRhNCw0LnQuyDQt9CwIEdpdC5cbiIKKyJbdXNlcl1cbiIKKyIjINCf0YDQvtCy0LXRgNC10YLQtSDQuCDRgNCw0LfQutC+0LzQtdC90YLQuNGA0LDQudGC0LUg0YHQu9C10LTQvdC40YLQtSDQtNCy0LAg0YDQtdC00LA6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAi0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC+0L3QvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6NTUKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo2NQorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQsNC30LzQtdGA0LjRgtC1INC90LAg0L7QsdC10LrRgtC40YLQtSDQstGK0LIg0YTQvtGA0LzQsNGCINC70LXRgdC90L4g0YfQtdGC0LjQvCDQvtGCINGF0L7RgNCwIgorCisjIEZJWE1FIC4uLiBpbnN0ZWFkIG9mICo/Pz8KKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFvQntCf0KbQmNCv4oCmXSDQo9Ca0JDQl9CQ0KLQldCbX9Ca0KrQnF/Qn9Ce0JTQkNCS0JDQndCV4oCmIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MTgKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFvQntCf0KbQmNCv4oCmXSAtLWRpcnR5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAi0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQsNC90L7RgtC40YDQsNC9INC10YLQuNC60LXRgiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICLQsiDQsNC90L7RgtC40YDQsNC90LjRjyDQtdGC0LjQutC10YIg4oCeJXPigJwg0LvQuNC/0YHQstCwINCy0LPRgNCw0LTQtdC90L4g0LjQvNC1IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgItC10YLQuNC60LXRgtGK0YIg4oCeJXPigJwg0YLRg9C6INC1INCy0YHRitGJ0L3QvtGB0YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNTAgYnVpbHRpbi9sb2cuYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQvdCwINC+0LHQtdC60YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIuKAniVz4oCcINC1INC90LXQv9GA0LDQstC40LvQtdC9INC+0LHQtdC60YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICLQvdC40LrQvtC5INC10YLQuNC60LXRgiDQvdC1INC90LDQv9Cw0YHQstCwINGC0L7Rh9C90L4g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VhcmNoaW5nIHRvIGRlc2NyaWJlICVzXG4iCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INC30LAg0L7Qv9C40YHQsNC90LjQtSDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgItGC0YrRgNGB0LXQvdC10YLQviDQv9GA0LjQutC70Y7Rh9C4INC/0YDQuCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgorbXNnc3RyICIiCisi0J3QuNC60L7QuSDQsNC90L7RgtC40YDQsNC9INC10YLQuNC60LXRgiDQvdC1INC+0L/QuNGB0LLQsCDigJ4lc+KAnC5cbiIKKyLQodGK0YnQtdGB0YLQstGD0LLQsNGCINC4INC90LXQsNC90L7RgtC40YDQsNC90Lgg0LXRgtC40LrQtdGC0LguINCf0YDQvtCx0LLQsNC50YLQtSDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tLXRhZ3PigJwuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyLQndC40LrQvtC5INC10YLQuNC60LXRgiDQvdC1INC+0L/QuNGB0LLQsCDigJ4lc+KAnC5cbiIKKyLQn9GA0L7QsdCy0LDQudGC0LUg0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLS1hbHdheXPigJwg0LjQu9C4INGB0YrQt9C00LDQudGC0LUg0LXRgtC40LrQtdGC0LguIgorCisjIEZJWE1FIC0gcGx1cmFsCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICLQv9GA0LXRgtGK0YDRgdC10L3QuCDRgdCwICVsdSDQv9C+0LTQsNCy0LDQvdC40Y9cbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyLQvtGC0LrRgNC40YLQuCDRgdCwINC90LDQtCAlaSDQtdGC0LjQutC10YLQsCwg0LjQt9Cy0LXQtNC10L3QuCDRgdCwINC/0L7RgdC70LXQtNC90LjRgtC1ICVpLFxuIgorItGC0YrRgNGB0LXQvdC10YLQviDQsdC1INC/0YDQtdC60YDQsNGC0LXQvdC+INC/0YDQuCDigJ4lc+KAnC5cbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NgorbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgItC+0YLQutGA0LjQstCw0L3QtSDQvdCwINC10YLQuNC60LXRgtCwLCDQutC+0LnRgtC+INGB0LvQtdC00LLQsCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk3Cittc2dpZCAiZGVidWcgc2VhcmNoIHN0cmF0ZWd5IG9uIHN0ZGVyciIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40L3RhNC+0YDQvNCw0YbQuNGPINC30LAg0YLRgNCw0YHQuNGA0LDQvdC1INC90LAg0YHRgtGA0LDRgtC10LPQuNGP0YLQsCDQt9CwINGC0YrRgNGB0LXQvdC1INC90LAgIgorItGB0YLQsNC90LTQsNGA0YLQvdCw0YLQsCDQs9GA0LXRiNC60LAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTgKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQv9GA0L7QuNC30LLQvtC70LXQvSDRg9C60LDQt9Cw0YLQtdC7IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk5Cittc2dpZCAidXNlIGFueSB0YWcsIGV2ZW4gdW5hbm5vdGF0ZWQiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0LLRgdC10LrQuCDQtdGC0LjQutC10YIg4oCUINCy0LrQu9GO0YfQuNGC0LXQu9C90L4g0Lgg0L3QtdCw0L3QvtGC0LjRgNCw0L3QuNGC0LUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDAKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICLQstC40L3QsNCz0Lgg0LTQsCDRgdC1INC/0L7Qu9C30LLQsCDQtNGK0LvQs9C40Y/RgiDRhNC+0YDQvNCw0YIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDEKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgItC/0YDQvtGB0LvQtdC00Y/QstCw0L3QtSDRgdCw0LzQviDQvdCwINC/0YrRgNCy0LjRjyDRgNC+0LTQuNGC0LXQuyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNAorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINGC0L7Rh9C90LjRgtC1INGB0YrQstC/0LDQtNC10L3QuNGPIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA2Cittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAi0LTQsCDRgdC1INGC0YrRgNGB0Lgg0YHQsNC80L4g0LIg0YLQvtC30Lgg0JHQoNCe0Jkg0L/QvtGB0LvQtdC00L3QuCDQtdGC0LjQutC10YLQuCAo0YHRgtCw0L3QtNCw0YDRgtC90L46IDEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwOAorbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgItC00LAg0YHQtSDRgtGK0YDRgdC4INGB0LDQvNC+INC40LfQvNC10LbQtNGDINC10YLQuNC60LXRgtC40YLQtSDQvdCw0L/QsNGB0LLQsNGJ0Lgg0YLQvtC30Lgg0KjQkNCR0JvQntCdIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDEwIGJ1aWx0aW4vbmFtZS1yZXYuYzozMTgKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YrQutGA0LDRgtC10L3QviDQuNC80LUg0L3QsCDQvtCx0LXQutGCINC60LDRgtC+INGA0LXQt9C10YDQstC10L0g0LLQsNGA0LjQsNC90YIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTEKK21zZ2lkICJtYXJrIgorbXNnc3RyICLQnNCQ0KDQmtCV0KAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTIKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDRgtCw0LrRitCyINCc0JDQoNCa0JXQoCDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+ICjRgdGC0LDQvdC00LDRgNGC0L3QviDQtSDigJ4tZGlydHnigJwpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDMwCittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni0tbG9uZ+KAnCDQuCDigJ4tLWFiYnJldj0w4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU2Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgItCd0LUg0YHQsCDQvtGC0LrRgNC40YLQuCDQuNC80LXQvdCwIOKAlCDQvdC40YnQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7Qv9C40YHQsNC90L4uIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDc2Cittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tZGlydHnigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINGD0LrQsNC30LDRgtC10Lsg0LrRitC8INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICLigJ4lc+KAnDog0L3QtSDQtSDQvdC40YLQviDQvtCx0LjQutC90L7QstC10L0g0YTQsNC50LssINC90LjRgtC+INGB0LjQvNCy0L7Qu9C90LAg0LLRgNGK0LfQutCwIgorCisjOiBidWlsdGluL2RpZmYuYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcHRpb246ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDQvtC/0YbQuNGPOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU4Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgItCd0LUg0LUg0YXRgNCw0L3QuNC70LjRidC1INC90LAgR2l0IgorCisjOiBidWlsdGluL2RpZmYuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgItC30LDQtNCw0LTQtdC9INC1INC90LXQv9GA0LDQstC40LvQtdC9INC+0LHQtdC60YIg4oCeJXPigJwuIgorCisjOiBidWlsdGluL2RpZmYuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAi0LfQsNC00LDQtNC10L3QuCDRgdCwINC/0L7QstC10YfQtSDQvtGCIDIg0L7QsdC10LrRgtCwOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9kaWZmLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgItC30LDQtNCw0LTQtdC9INC1INC90LXQv9C+0LTQtNGK0YDQttCw0L0g0L7QsdC10LrRgiDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyNAorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBb0J7Qn9Cm0JjQmF/Ql9CQX9Ch0J/QmNCh0KrQmtCQX9ChX9CS0JXQoNCh0JjQmF0iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5NzkKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICLQodGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQvdCw0L/RgNC10LTRitC60LAg0L3QsCDQstGB0LXQutC4INGC0LDQutGK0LIg0JHQoNCe0Jkg0L7QsdC10LrRgtCwIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgxCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICLQmtCw0Log0LTQsCDRgdC1INC+0LHRgNCw0LHQvtGC0LLQsNGCINC/0L7QtNC/0LjRgdCw0L3QuNGC0LUg0LXRgtC40LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODQKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIgorbXNnc3RyICLQmtCw0Log0LTQsCDRgdC1INC+0LHRgNCw0LHQvtGC0LLQsNGCINC10YLQuNC60LXRgtC40YLQtSDQvdCwINGE0LjQu9GC0YDQuNGA0LDQvdC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODcKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAi0JfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LzQsNGA0LrQtdGA0LjRgtC1INCyINGC0L7Qt9C4INGE0LDQudC7IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg5Cittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICLQktC90LDRgdGP0L3QtSDQvdCwINC80LDRgNC60LXRgNC40YLQtSDQvtGCINGC0L7Qt9C4INGE0LDQudC7IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTkxCittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgItCU0LAg0YHQtSDQuNC30L/QvtC70LfQstCwINC40LfQutGD0YHRgtCy0LXQvdC+INC40LzQtSDQvdCwINGH0L7QstC10Log0L/RgNC4INC70LjQv9GB0LAg0L3QsCDQt9Cw0LTQsNCy0LDRiSDQtdGC0LjQutC10YLQsCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5MworbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRhtGP0LvQvtGC0L4g0LTRitGA0LLQviDQt9CwINCy0YHRj9C60L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5NQorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICLQmNC30L/QvtC70LfQstCw0L3QtSDQvdCwINC80LDRgNC60LXRgCDQt9CwINC30LDQstGK0YDRiNCy0LDQvdC1INC90LAg0L/QvtGC0L7QutCwIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk2Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICLQkdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0L7QsdC10LrRgtC40YLQtSBCTE9CIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk3Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAi0YPQutCw0LfQsNGC0LXQuyDQvdCwINCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5OAorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9GPINC90LAg0LLQtdGA0YHQuNGPINC60YrQvCDQuNC30L3QtdGB0LXQvdC40YLQtSDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTkKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICLQsNC90L7QvdC40LzQuNC30LjRgNCw0L3QtSDQvdCwINC40LfQstC10LbQtNCw0L3QsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxOQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IGZldGNoIFvQntCf0KbQmNCv4oCmXSBb0KXQoNCQ0J3QmNCb0JjQqdCVIFvQo9Ca0JDQl9CQ0KLQldCb4oCmXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggW9Ce0J/QptCY0K/igKZdINCT0KDQo9Cf0JAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMQorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBb0J7Qn9Cm0JjQr+KApl0gWyjQpdCg0JDQndCY0JvQmNCp0JUgfCDQk9Cg0KPQn9CQKeKApl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMgorbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFvQntCf0KbQmNCv4oCmXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg5Cittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAi0LTQvtGB0YLQsNCy0Y/QvdC1INC+0YIg0LLRgdC40YfQutC4INC+0YLQtNCw0LvQtdGH0LXQvdC4INGF0YDQsNC90LjQu9C40YnQsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkxCittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC60YrQvCDigJ4uZ2l0L0ZFVENIX0hFQUTigJwg0LLQvNC10YHRgtC+INC30LDQvNGP0L3QsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkzCittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICLQvtGC0LTQsNC70LXRh9C10L0g0L/RitGCLCDQutGK0LTQtdGC0L4g0LTQsCDRgdC1INC60LDRh9C4INC/0LDQutC10YLRitGCIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTQKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0LvQvtC60LDQu9C90LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk2Cittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICLQtNC+0YHRgtCw0LLRj9C90LUg0L7RgiDQvNC90L7QttC10YHRgtCy0L4g0L7RgtC00LDQu9C10YfQtdC90Lgg0YXRgNCw0L3QuNC70LjRidCwIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTgKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLQtNC+0YHRgtCw0LLRj9C90LUg0L3QsCDQstGB0LjRh9C60Lgg0LXRgtC40LrQtdGC0Lgg0Lgg0L/RgNC40L3QsNC00LvQtdC20LDRidC4INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMAorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAi0LHQtdC3INC00L7RgdGC0LDQstGP0L3QtdGC0L4g0L3QsCDQstGB0LjRh9C60Lgg0LXRgtC40LrQtdGC0Lgg4oCeLS1uby10YWdz4oCcIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAyCittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgItC+0LrQsNGB0YLRgNGP0L3QtSDQvdCwINC60LvQvtC90LjRgtC1INGB0LvQtdC00Y/RidC4INCy0LXRh9C1INC90LXRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0Lgg0L7RgtC00LDQu9C10YfQtdC90Lgg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMworbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAi0L/RgNC4INC90YPQttC00LAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDQKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLRg9C/0YDQsNCy0LvQtdC90LjQtSDQvdCwINGA0LXQutGD0YDRgdC40LLQvdC+0YLQviDQtNC+0YHRgtCw0LLRj9C90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LjRgtC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA4Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC40LfRgtC10LPQu9C10L3QuNGC0LUg0L/QsNC60LXRgtC4INGBINC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMAorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICLQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0L7QsdC90L7QstGP0LLQsNC90LXRgtC+INC90LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTMKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICLQt9Cw0LTRitC70LHQvtGH0LDQstCw0L3QtSDQvdCwINC40YHRgtC+0YDQuNGP0YLQsCDQvdCwINC/0LvQuNGC0LrQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTUKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0L/RgNC10LLRgNGK0YnQsNC90LUg0LIg0L/RitC70L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTcgYnVpbHRpbi9sb2cuYzoxMjA4Cittc2dpZCAiZGlyIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOAorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDRgtC+0LLQsCDQv9GA0LXQtCDQv9GK0YLRjyDQvdCwINC/0L7QtNC80L7QtNGD0LvQsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMQorbXNnaWQgImRlZmF1bHQgbW9kZSBmb3IgcmVjdXJzaW9uIgorbXNnc3RyICLRgdGC0LDQvdC00LDRgNGC0LXQvSDRgNC10LbQuNC8INC90LAg0YDQtdC60YPRgNGB0LjRjyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMworbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAi0L/RgNC40LXQvNCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvQuCwg0LrQvtC40YLQviDQvtCx0L3QvtCy0Y/QstCw0YIg4oCeLmdpdC9zaGFsbG934oCcIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI0Cittc2dpZCAicmVmbWFwIgorbXNnc3RyICLQutCw0YDRgtCwINGBINGD0LrQsNC30LDRgtC10LvQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyNQorbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICLRg9C60LDQt9Cy0LDQvdC1INC90LAg0LrQsNGA0YLQsNGC0LAg0YEg0YPQutCw0LfQsNGC0LXQu9C4INC30LAg0LTQvtGB0YLQsNCy0Y/QvdC1IgorCisjOiBidWlsdGluL2ZldGNoLmM6Mzc3Cittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0LIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtC60YDQuNGCIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC70LjQv9GB0LLQsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ2MgorbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW9Cw0LrRgtGD0LDQu9C40LfQuNGA0LDQvV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiISAlLSpzICUtKnMgLT4gJXMgIChjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCkiCittc2dzdHIgIiEgJS0qcyAlLSpzIOKGkiAlcyAgKNCyINGC0LXQutGD0YnQuNGPINC60LvQvtC9INC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC00L7RgdGC0LDQstGPKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ3NyBidWlsdGluL2ZldGNoLmM6NTYzCittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW9C+0YLRhdCy0YrRgNC70LXQvV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0ODgKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlvQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINC10YLQuNC60LXRgtC40YLQtV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0OTAgYnVpbHRpbi9mZXRjaC5jOjUyNSBidWlsdGluL2ZldGNoLmM6NTQzCittc2dpZCAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIgorbXNnc3RyICIgICjQu9C+0LrQsNC70L3QuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0L7QsdC90L7QstC10L3QuCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MDgKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIlvQvdC+0LIg0LXRgtC40LrQtdGCXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxMQorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW9C90L7QsiDQutC70L7QvV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MTQKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIlvQvdC+0LIg0YPQutCw0LfQsNGC0LXQu10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTkKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAi0LvQvtC60LDQu9C10L0g0YPQutCw0LfQsNGC0LXQuyDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTkKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L7QsdC90L7QstGP0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NjUKK21zZ2lkICIobm9uLWZhc3QtZm9yd2FyZCkiCittc2dzdHIgIijRgdC70LjQstCw0L3QtdGC0L4g0L3QtSDQtSDRgtGA0LjQstC40LDQu9C90L4pIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTk5IGJ1aWx0aW4vZmV0Y2guYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgItGE0LDQudC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L06ICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IOKAniVz4oCcINC90LUg0LjQt9C/0YDQsNGC0Lgg0LLRgdC40YfQutC4INC90LXQvtCx0YXQvtC00LjQvNC4INC+0LHQtdC60YLQuFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjI2CisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIiIKKyLQvtGC0YXQstGK0YDQu9GP0L3QtSDQvdCwINCy0YrRgNGF0LAg4oCeJXPigJwsINC30LDRidC+0YLQviDQv9C70LjRgtC60LjRgtC1INGF0YDQsNC90LjQu9C40YnQsCDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCICIKKyLQvtCx0L3QvtCy0Y/QstCw0L3QuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcxNCBidWlsdGluL2ZldGNoLmM6Nzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICLQntGCICUuKnNcbiIKKworIyBGSVhNRSAtIGlzIHRoZSBzcGFjZSBuZWNlc3NhcnkKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorItC90Y/QutC+0Lgg0LvQvtC60LDQu9C90Lgg0YPQutCw0LfQsNGC0LXQu9C4INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0L7QsdC90L7QstC10L3QuC4g0JjQt9C/0YrQu9C90LXRgtC1INC60L7QvNCw0L3QtNCw0YLQsFxuIgorIuKAnmdpdCByZW1vdGUgcHJ1bmUgJXPigJwsINC30LAg0LTQsCDQv9GA0LXQvNCw0YXQvdC10YLQtSDQvtGB0YLQsNGA0LXQu9C40YLQtSDQutC70L7QvdC4LCDQutC+0LjRgtC+XG4iCisi0L/RgNC10LTQuNC30LLQuNC60LLQsNGCINC60L7QvdGE0LvQuNC60YLQsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAo0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0YnQtSDRgdC1INC+0LrQsNC20LUg0LjQt9Cy0YrQvSDQutC70L7QvSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAo0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0LLQtdGH0LUg0LUg0LjQt9Cy0YrQvSDQutC70L7QvSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MDIKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIlvQuNC30YLRgNC40YJdIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODAzIGJ1aWx0aW4vcmVtb3RlLmM6MTA1NworbXNnaWQgIihub25lKSIKK21zZ3N0ciAiKNC90LjRidC+KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDQuNC30YLQtdCz0LvRj9GC0LUg0LIg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0g4oCeJXPigJwg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LUsINC60L7QtdGC0L4g0L3QtSDQtSDQs9C+0LvQviIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg0MQorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICLQodGC0L7QudC90L7RgdGC0YLQsCDigJ4lMiRz4oCcINC30LAg0L7Qv9GG0LjRj9GC0LAg4oCeJTEkc+KAnCDQvdC1INC1INGB0YrQstC80LXRgdGC0LjQvNCwINGBIOKAniUzJHPigJwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4lc+KAnCDRgdC1INC40LPQvdC+0YDQuNGA0LAg0L/RgNC4IOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gZmV0Y2ggZnJvbSAlcyIKK21zZ3N0ciAi0J3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAg0LTQvtGB0YLQsNCy0Y/QvdC1INC+0YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgItCU0L7RgdGC0LDQstGP0L3QtSDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDY1IGJ1aWx0aW4vcmVtb3RlLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQtNC+0YHRgtCw0LLQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwODMKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorItCd0LUg0YHRgtC1INGD0LrQsNC30LDQu9C4INC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtS4g0JfQsNC00LDQudGC0LUg0LjQu9C4INCw0LTRgNC10YEsINC40LvQuCDQuNC80LVcbiIKKyLQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSwg0L7RgtC60YrQtNC10YLQviDQtNCwINGB0LUg0LTQvtGB0YLQsNCy0Y/RgiDQvdC+0LLQuNGC0LUg0LLQtdGA0YHQuNC4LiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMDYKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICLQotGA0Y/QsdCy0LAg0LTQsCDRg9C60LDQttC10YLQtSDQuNC80LUg0L3QsCDQtdGC0LjQutC10YIuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE0OAorbXNnaWQgIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLWRlcHRo4oCcINC4IOKAni0tdW5zaGFsbG934oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1MAorbXNnaWQgIi0tdW5zaGFsbG93IG9uIGEgY29tcGxldGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLQvdC1INC80L7QttC10YLQtSDQtNCwINC40LfQv9C+0LvQt9Cy0LDRgtC1INC+0L/RhtC40Y/RgtCwIOKAni0tdW5zaGFsbG934oCcINCy0YrRgNGF0YMg0L/RitC70L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTczCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgItC60YrQvCDigJ5naXQgZmV0Y2ggLS1hbGzigJwg0L3QtSDQvNC+0LbQtdGC0LUg0LTQsCDQtNC+0LHQsNCy0LjRgtC1INCw0YDQs9GD0LzQtdC90YIg4oCUINGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNzUKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKyLQutGK0Lwg4oCeZ2l0IGZldGNoIC0tYWxs4oCcINC90LUg0LzQvtC20LXRgtC1INC00LAg0LTQvtCx0LDQstC40YLQtSDQsNGA0LPRg9C80LXQvdGCIOKAlCDRg9C60LDQt9Cw0YLQtdC7INC90LAg0LLQtdGA0YHQuNGPIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICLQndGP0LzQsCDQvdC40YLQviDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUsINC90LjRgtC+INCz0YDRg9C/0LAg0L7RgiDRhdGA0LDQvdC40LvQuNGJ0LAg0L3QsCDQuNC80LUg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTk0Cittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLQo9C60LDQt9Cy0LDQvdC10YLQviDQvdCwINCz0YDRg9C/0LAg0Lgg0YPQutCw0LfQstCw0L3QtdGC0L4g0L3QsCDQstC10YDRgdC40Y8g0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjEzCittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0g0KHQqtCe0JHQqdCV0J3QmNCVXSBbLS1sb2dbPdCR0KDQntCZXSB8IC0tbm8tbG9nXSBbLS1maWxlINCk0JDQmdCbXSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjY4IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MSBidWlsdGluL2dyZXAuYzo2OTgKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTggYnVpbHRpbi9yZXBhY2suYzoxNzggYnVpbHRpbi9yZXBhY2suYzoxODIKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjQgYnVpbHRpbi9zaG93LXJlZi5jOjE4MCBidWlsdGluL3RhZy5jOjU5MAorIzogcGFyc2Utb3B0aW9ucy5oOjEzMSBwYXJzZS1vcHRpb25zLmg6MjM4Cittc2dpZCAibiIKK21zZ3N0ciAi0JHQoNCe0JkiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY2OQorbXNnaWQgInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIKK21zZ3N0ciAiIgorItCy0LzRitC60LLQsNC90LUg0L3QsCDQttGD0YDQvdCw0Lsg0YHRitGB0YLQvtGP0Ykg0YHQtSDQvtGCINC90LUg0L/QvtCy0LXRh9C1INC+0YIg0JHQoNCe0Jkg0LfQsNC/0LjRgdCwINC+0YIg0YHRitC60YDQsNGC0LXQvdC40Y8gIgorItC20YPRgNC90LDQuyIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcyCittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAi0YHQuNC90L7QvdC40Lwg0L3QsCDigJ4tLWxvZ+KAnCAo0L7RgdGC0LDRgNGP0LvQvikiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NQorbXNnaWQgInRleHQiCittc2dzdHIgItCi0JXQmtCh0KIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NgorbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAi0LfQsCDQvdCw0YfQsNC70L4g0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0KLQldCa0KHQoiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc3Cittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgItGE0LDQudC7LCDQvtGCINC60L7QudGC0L4g0LTQsCDRgdC1INGH0LXRgtC1IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjY4NworbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQiCittc2dzdHIgItGE0L7RgNC80LDRgtGK0YIg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INCw0L3QsNC70LjQt9C40YDQsNC9IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjEwODMKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIgorbXNnc3RyICJnaXQgZm9yLWVhY2gtcmVmIFvQntCf0KbQmNCv4oCmXSBb0KjQkNCR0JvQntCdXSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMDk4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBzaGVsbHMiCittc2dzdHIgItGG0LjRgtC40YDQsNC90LUg0L/QvtC00YXQvtC00Y/RidC+INC30LAg0LrQvtC80LDQvdC00L3QuCDQuNC90YLQtdGA0L/RgNC10YLQsNGC0L7RgNC4INC90LAg0L7QsdCy0LjQstC60LDRgtCwIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExMDAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgItGG0LjRgtC40YDQsNC90LUg0L/QvtC00YXQvtC00Y/RidC+INC30LAgcGVybCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMTAyCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgItGG0LjRgtC40YDQsNC90LUg0L/QvtC00YXQvtC00Y/RidC+INC30LAgcHl0aG9uIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExMDQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAi0YbQuNGC0LjRgNCw0L3QtSDQv9C+0LTRhdC+0LTRj9GJ0L4g0LfQsCB0Y2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEwNworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDRgtC+0LfQuCDQkdCg0J7QmSDQvdCw0L/QsNGB0L3QsNGC0Lgg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjExMDggYnVpbHRpbi9yZXBsYWNlLmM6NDM4Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICLQpNCe0KDQnNCQ0KIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MTEwOAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgItCk0J7QoNCc0JDQoiDQt9CwINC40LfRhdC+0LTQsCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMTA5Cittc2dpZCAia2V5IgorbXNnc3RyICLQutC70Y7RhyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoxMTEwCittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICLQuNC80LUg0L3QsCDQv9C+0LvQtdGC0L4sINC/0L4g0LrQvtC10YLQviDQtNCwINC1INC/0L7QtNGA0LXQtNCx0LDRgtCwIgorCisjOiBidWlsdGluL2ZzY2suYzoxNDcgYnVpbHRpbi9wcnVuZS5jOjEzNworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINCy0YDRitC30LrQsNGC0LAiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU0OAorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQvdCwINC00LjRgNC10LrRgtC+0YDQuNC40YLQtSDRgSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYxMQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFvQntCf0KbQmNCv4oCmXSBb0J7QkdCV0JrQouKApl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYxNworbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L3QtdC00L7RgdGC0LjQttC40LzQuNGC0LUg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL2ZzY2suYzo2MTgKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0LjQt9Cy0YrQvSDQutC70L7QvdC40YLQtSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjE5Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC10YLQuNC60LXRgtC40YLQtSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjIwCittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC60L7RgNC10L3QvtCy0LjRgtC1INCy0YrQt9C70LgiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyMQorbXNnaWQgIm1ha2UgaW5kZXggb2JqZWN0cyBoZWFkIG5vZGVzIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0L7QsdC10LrRgtC4INC+0YIg0LjQvdC00LXQutGB0LAg0LTQsCDRgdCwINC60L7RgNC10L3QvtCy0LgiCisKKyMgRklYTUUgYmFkIG1lc3NhZ2UKKyM6IGJ1aWx0aW4vZnNjay5jOjYyMgorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAi0L/RgNC+0YHQu9C10LTRj9Cy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQvtGCINC20YPRgNC90LDQu9CwINC60LDRgtC+INCz0LvQsNCy0LggKNGB0YLQsNC90LTQsNGA0YLQvdC+KSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjIzCittc2dpZCAiYWxzbyBjb25zaWRlciBwYWNrcyBhbmQgYWx0ZXJuYXRlIG9iamVjdHMiCittc2dzdHIgItC00L7Qv9GK0LvQvdC40YLQtdC70L3QviDQtNCwINGB0LUg0L/RgNC+0LLQtdGA0Y/QstCw0YIg0L/QsNC60LXRgtC40YLQtSDQuCDQsNC70YLQtdGA0L3QsNGC0LjQstC90LjRgtC1INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjI0Cittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICLQv9C+LdGB0YLRgNC+0LPQuCDQv9GA0L7QstC10YDQutC4IgorCisjOiBidWlsdGluL2ZzY2suYzo2MjYKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSDQuNC30LLRitC9INC60LvQvtC90LjRgtC1INCyINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4uZ2l0L2xvc3QtZm91bmTigJwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYyNyBidWlsdGluL3BydW5lLmM6MTA3Cittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0L3QsNC/0YDQtdC00YrQutCwIgorCisjOiBidWlsdGluL2ZzY2suYzo2NzcKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC90LAg0L7QsdC10LrRgtC40YLQtSIKKworIyBGSVhNRSBwbHVyYWwgd2l0aCAuLi4KKyM6IGJ1aWx0aW4vZ2MuYzoyNAorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFvQntCf0KbQmNCv4oCmXSIKKworIzogYnVpbHRpbi9nYy5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgJXM6ICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9ICVzOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9nYy5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIG9iamVjdCBkaXJlY3RvcnkgJS4qcyIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC00YrQu9Cz0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0YEg0L7QsdC10LrRgtC4IOKAniUuKnPigJwiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyODEKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAi0L7QutCw0YHRgtGA0Y/QvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSwg0LrRitC8INC60L7QuNGC0L4g0L3QuNGJ0L4g0L3QtSDRgdC+0YfQuCIKKworIzogYnVpbHRpbi9nYy5jOjI4MworbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAi0LjQt9GH0LXRgNC/0LDRgtC10LvQvdC+INGC0YrRgNGB0LXQvdC1INC90LAg0LHQvtC60LvRg9C60LAgKNC30LAg0YHQvNC10YLQutCwINC90LAg0L/QvtCy0LXRh9C1INCy0YDQtdC80LUg0YDQsNCx0L7RgtCwKSIKKworIzogYnVpbHRpbi9nYy5jOjI4NAorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgItCy0LrQu9GO0YfQstCw0L3QtSDQvdCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L7RgtC+INGB0YrQsdC40YDQsNC90LUg0L3QsCDQsdC+0LrQu9GD0LrQsCAoYXV0by1nYykiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyODUKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAiIgorItC40LfRgNC40YfQvdC+INGB0YLQsNGA0YLQuNGA0LDQvdC1INC90LAg0YHRitCx0LjRgNCw0L3QtdGC0L4g0L3QsCDQsdC+0LrQu9GD0LrQsCwg0LTQvtGA0Lgg0Lgg0LDQutC+INCy0LXRh9C1INGA0LDQsdC+0YLQuCDQtNGA0YPQs9C+ICIKKyLRgdGK0LHQuNGA0LDQvdC1IgorCisjOiBidWlsdGluL2djLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisi0JDQstGC0L7QvNCw0YLQuNGH0L3QviDQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINC30LDQtNC10L0g0YTQvtC9INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviDQt9CwINC/0L4t0LTQvtCx0YDQsCAiCisi0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70L3QvtGB0YIuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQvdC+INC/0LDQutC10YLQuNGA0LDQvdC1INC90LAg0YXRgNCw0L3QuNC70LjRidC10YLQviDQt9CwINC/0L4t0LTQvtCx0YDQsCDQv9GA0L7QuNC30LLQvtC00LjRgtC10LvQvdC+0YHRgi5cbiIKKworIzogYnVpbHRpbi9nYy5jOjMzMAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICIiCisi0J/QvtCz0LvQtdC00L3QtdGC0LUg0YDRitC60L7QstC+0LTRgdGC0LLQvtGC0L4g0LfQsCDQv9C+0LLQtdGH0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LrQsNC6INC00LAg0LjQt9C/0YrQu9C90LjRgtC1IOKAnmdpdCBoZWxwICIKKyJnY+KAnC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjM0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2MgaXMgYWxyZWFkeSBydW5uaW5nIG9uIG1hY2hpbmUgJyVzJyBwaWQgJTxQUkl1TUFYPiAodXNlIC0tZm9yY2UgaWYgbm90KSIKK21zZ3N0ciAiIgorItGB0YrQsdC40YDQsNC90LXRgtC+INC90LAg0LHQvtC60LvRg9C60LAg0LLQtdGH0LUg0LUg0YHRgtCw0YDRgtC40YDQsNC90L4g0L3QsCDQvNCw0YjQuNC90LDRgtCwIOKAniVz4oCcINGBINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC90LBcbiIKKyLQv9GA0L7RhtC10YHQsDogJTxQUkl1TUFYPiAo0LDQutC+INGB0YLQtSDRgdC40LPRg9GA0L3QuCwg0YfQtSDRgtC+0LLQsCDQvdC1INC1INCy0Y/RgNC90L4sINGC0L7QstCwINC40LfQv9C+0LvQt9Cy0LDQudGC0LVcbiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLWZvcmNl4oCcKSIKKworIzogYnVpbHRpbi9nYy5jOjM3NgorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorItCY0LzQsCDQv9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQvdC10LTQvtGB0YLQuNC20LjQvNC4LCDQvdC10L/QsNC60LXRgtC40YDQsNC90Lgg0L7QsdC10LrRgtC4LlxuIgorItCY0LfQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IHBydW5l4oCcLCDQt9CwINC00LAg0LPQuCDQvtC60LDRgdGC0YDQuNGC0LUuIgorCisjIEZJWE1FIHBsdXJhbCAuLi4gb3B0aW9ucworIzogYnVpbHRpbi9ncmVwLmM6MjMKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFvQntCf0KbQmNCv4oCmXSBbLWVdINCo0JDQkdCb0J7QnSBb0JLQldCg0KHQmNCv4oCmXSBbWy0tXSDQn9Cq0KLigKZdIgorCisjOiBidWlsdGluL2dyZXAuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiDQvdC10YPRgdC/0LXRiNC90L4g0YHRitC30LTQsNCy0LDQvdC1INC90LAg0L3QuNGI0LrQsDogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ0MSBidWlsdGluL2dyZXAuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICLQtNGK0YDQstC+0YLQviDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvdC+ICglcykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RitC70L3QuCDigJ5ncmVw4oCcINC+0YIg0L7QsdC10LrRgiDQvtGCINCy0LjQtNCwICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeJWPigJwg0L7Rh9Cw0LrQstCwINGH0LjRgdC70L4g0LfQsCDQsNGA0LPRg9C80LXQvdGCIgorCisjOiBidWlsdGluL2dyZXAuYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBidWlsdGluL2dyZXAuYzo2MzgKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICLRgtGK0YDRgdC10L3QtSDQsiDQuNC90LTQtdC60YHQsCwg0LAg0L3QtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQwCittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgItGC0YrRgNGB0LXQvdC1INC4INCy0YrQsiDRhNCw0LnQu9C+0LLQtdGC0LUsINC60L7QuNGC0L4g0L3QtSDRgdCwINC/0L7QtCDRg9C/0YDQsNCy0LvQtdC90LjQtdGC0L4g0L3QsCBnaXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0MgorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi0YLRitGA0YHQtdC90LUg0Lgg0LIg0YHQu9C10LTQtdC90LjRgtC1LCDQuCDQsiDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2dyZXAuYzo2NDQKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INGD0LrQsNC30LDQvdC4INCyIOKAni5naXRpZ25vcmXigJwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0NworbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNC10LTQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC90LUg0YHRitCy0L/QsNC00LDRgiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQ5Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAi0LHQtdC3INC30L3QsNGH0LXQvdC40LUg0L3QsCDRgNC10LPQuNGB0YLRitGA0LAg0L3QsCDQsdGD0LrQstC40YLQtSAo0LPQu9Cw0LLQvdC4L9C80LDQu9C60LgpIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTEKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAi0L3QsNC/0LDRgdCy0LDQvdC1INC90LAg0YjQsNCx0LvQvtC90LjRgtC1INGB0LDQvNC+INC/0L4g0LPRgNCw0L3QuNGG0LjRgtC1INC90LAg0LTRg9C80LjRgtC1IgorCisjOiBidWlsdGluL2dyZXAuYzo2NTMKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICLQvtCx0YDQsNCx0L7RgtCy0LDQvdC1INC90LAg0LTQstC+0LjRh9C90LjRgtC1INGE0LDQudC70L7QstC1INC60LDRgtC+INGC0LXQutGB0YLQvtCy0LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1NQorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAi0L/RgNC10YHQutCw0YfQsNC90LUg0L3QsCDQtNCy0L7QuNGH0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1OAorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAiIgorItC+0LHRgNCw0LHQvtGC0LLQsNC90LUg0L3QsCDQtNCy0L7QuNGH0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0YfRgNC10Lcg0YTQuNC70YLRgNC4INC30LAg0L/RgNC10L7QsdGA0LDQt9GD0LLQsNC90LUg0LrRitC8INGC0LXQutGB0YIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY2MAorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAi0L3QsNCy0LvQuNC30LDQvdC1INC80LDQutGB0LjQvNCw0LvQvdC+INC90LAg0YLQsNC30Lgg0JTQqtCb0JHQntCn0JjQndCQINCyINC00YrRgNCy0L7RgtC+IgorCisjOiBidWlsdGluL2dyZXAuYzo2NjQKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAi0YDQsNC30YjQuNGA0LXQvdC4INGA0LXQs9GD0LvRj9GA0L3QuCDQuNC30YDQsNC30Lgg0L/QviBQT1NJWCIKKworIzogYnVpbHRpbi9ncmVwLmM6NjY3Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICLQvtGB0L3QvtCy0L3QuCDRgNC10LPRg9C70Y/RgNC90Lgg0LjQt9GA0LDQt9C4INC/0L4gUE9TSVggKNGB0YLQsNC90LTQsNGA0YLQvdC+KSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjcwCittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgItGI0LDQsdC70L7QvdC40YLQtSDRgdCwINC00L7RgdC70L7QstC90Lgg0L3QuNC30L7QstC1IgorCisjOiBidWlsdGluL2dyZXAuYzo2NzMKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgItGA0LXQs9GD0LvRj9GA0L3QuCDQuNC30YDQsNC30Lgg0L3QsCBQZXJsIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzYKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QvtC80LXRgNCw0YLQsCDQvdCwINGA0LXQtNC+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY3NworbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvNC10L3QsNGC0LAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY3OAorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjgwCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC+0YLQvdC+0YHQuNGC0LXQu9C90LjRgtC1INC40LzQtdC90LAg0L3QsCDRhNCw0LnQu9C+0LLQtdGC0LUg0YHQv9GA0Y/QvNC+INC+0YHQvdC+0LLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwICIKKyLRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IgorCisjOiBidWlsdGluL2dyZXAuYzo2ODIKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC40LzQtdC90LDRgtCwINC90LAg0YTQsNC50LvQvtCy0LXRgtC1INCx0LXQtyDQvdCw0L/QsNGB0LLQsNGJ0LjRgtC1INGA0LXQtNC+0LLQtSIKKworIzogYnVpbHRpbi9ncmVwLmM6Njg0Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgItGB0LjQvdC+0L3QuNC8INC90LAg4oCeLS1maWxlcy13aXRoLW1hdGNoZXPigJwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4NworbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC40LzQtdC90LDRgtCwINC90LAg0YTQsNC50LvQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC90LUg0YHRitC00YrRgNC20LDRgiDRgNC10LQsINC90LDQv9Cw0YHQstCw0Ykg0L3QsCAiCisi0YjQsNCx0LvQvtC90LAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4OQorbXNnaWQgInByaW50IE5VTCBhZnRlciBmaWxlbmFtZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90YPQu9C10LLQuNGPINC30L3QsNC6IOKAnk5VTOKAnCDRgdC70LXQtCDQstGB0Y/QutC+INC40LzQtSDQvdCwINGE0LDQudC7IgorCisjOiBidWlsdGluL2dyZXAuYzo2OTEKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQsdGA0L7RjyDQvdCwINGB0YrQstC/0LDQtNC10L3QuNGP0YLQsCDQstC80LXRgdGC0L4g0L3QsNC/0LDRgdCy0LDRidC40YLQtSDRgNC10LTQvtCy0LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5MgorbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICLQvtGG0LLQtdGC0Y/QstCw0L3QtSDQvdCwINC90LDQv9Cw0YHQstCw0L3QuNGP0YLQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6Njk0Cittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC/0YDQsNC30LXQvSDRgNC10LQg0LzQtdC20LTRgyDQvdCw0L/QsNGB0LLQsNC90LjRj9GC0LAg0L7RgiDRgNCw0LfQu9C40YfQvdC4INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2dyZXAuYzo2OTYKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvNC10YLQviDQvdCwINGE0LDQudC70LAg0YHQsNC80L4g0LLQtdC00L3RitC2INC30LAg0LLRgdC40YfQutC4INC90LDQv9Cw0YHQstCw0L3QuNGPINC+0YIg0YLQvtC30Lgg0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5OQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgtCw0LrRitCyINCR0KDQntCZINGA0LXQtNC+0LLQtSDQv9GA0LXQtNC4INC4INGB0LvQtdC0INC90LDQv9Cw0YHQstCw0L3QuNGP0YLQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzAyCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YLQsNC60YrQsiDQkdCg0J7QmSDRgNC10LTQvtCy0LUg0L/RgNC10LTQuCDQvdCw0L/QsNGB0LLQsNC90LjRj9GC0LAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwNAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YLQsNC60YrQsiDQkdCg0J7QmSDRgNC10LTQvtCy0LUg0YHQu9C10LQg0L3QsNC/0LDRgdCy0LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDUKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICLRgdC40L3QvtC90LjQvCDQvdCwIOKAni1DINCR0KDQntCZ4oCcIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDgKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNC10LQg0YEg0LjQvNC10YLQviDQvdCwINGE0YPQvdC60YbQuNGP0YLQsCwg0LIg0LrQvtGP0YLQviDQtSDQvdCw0L/QsNGB0L3QsNGCINGI0LDQsdC70L7QvdCwIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTAKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L7QsdGF0LLQsNGJ0LDRidCw0YLQsCDRhNGD0L3QutGG0LjRjyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzEzCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDRiNCw0LHQu9C+0L3QuNGC0LUg0L7RgiDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzE1Cittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLQvdCw0L/QsNGB0LLQsNC90LUg0L3QsCDQqNCQ0JHQm9Ce0J0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNworbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgItC60L7QvNCx0LjQvdC40YDQsNC90LUg0L3QsCDRiNCw0LHQu9C+0L3QuNGC0LUg0YPQutCw0LfQsNC90Lgg0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLWXigJwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcyOQorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICIiCisi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LjQt9GF0L7QtC4g0JjQt9GF0L7QtNC90LjRj9GCINC60L7QtCDRg9C60LDQt9Cy0LAg0L3QsNC70LjRh9C40LXRgtC+INC90LAgIgorItC90LDQv9Cw0YHQstCw0L3QtSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMxCittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAiIgorItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LXQtNC+0LLQtSDRgdCw0LzQviDQvtGCINGE0LDQudC70L7QstC10YLQtSwg0LrQvtC40YLQviDQvdCw0L/QsNGB0LLQsNGCINC90LAg0LLRgdC40YfQutC4INGI0LDQsdC70L7QvdC4IgorCisjOiBidWlsdGluL2dyZXAuYzo3MzMKK21zZ2lkICJzaG93IHBhcnNlIHRyZWUgZm9yIGdyZXAgZXhwcmVzc2lvbiIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LTRitGA0LLQvtGC0L4g0LfQsCDQsNC90LDQu9C40Lcg0L3QsCDRgNC10LPRg9C70Y/RgNC90LjRjyDQuNC30YDQsNC3IgorCisjOiBidWlsdGluL2dyZXAuYzo3MzcKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAi0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQtdCz0LvQtdC0INC/0L4g0YHRgtGA0LDQvdC40YbQuCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM3Cittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YrQstC/0LDQtNCw0YnQuNGC0LUg0YTQsNC50LvQvtCy0LUg0LIg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQtdCz0LvQtdC0INC/0L4g0YHRgtGA0LDQvdC40YbQuCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQwCittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICIiCisi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINGB0YLQsNGA0YLQuNGA0LDQvdC10YLQviDQvdCwIGdyZXAoMSkgKNGC0LXQutGD0YnQuNGP0YIg0LrQvtC80L/QuNC70LDRgiDQv9GA0LXQvdC10LHRgNC10LPQstCwINGC0LDQt9C4ICIKKyLQvtC/0YbQuNGPKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQxIGJ1aWx0aW4vc2hvdy1yZWYuYzoxODkKK21zZ2lkICJzaG93IHVzYWdlIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdCw0YfQuNC90LAg0L3QsCDRg9C/0L7RgtGA0LXQsdCwINC90LAg0LrQvtC80LDQvdC00LDRgtCwIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDgKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuLiIKK21zZ3N0ciAi0LvQuNC/0YHQstCwINGI0LDQsdC70L7QvS4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NgorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiIgorItC+0L/RhtC40Y/RgtCwIOKAni0tb3Blbi1maWxlcy1pbi1wYWdlcuKAnCDQtSDRgdGK0LLQvNC10YHRgtC40LzQsCDRgdCw0LzQviDRgSDRgtGK0YDRgdC10L3QtSDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4LiIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1jYWNoZWTigJwg0Lgg4oCeLS11bnRyYWNrZWTigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80Lgg0YEg4oCeLS1uby1pbmRleOKAnC4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NworbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzLiIKK21zZ3N0ciAiIgorItC+0L/RhtC40LjRgtC1IOKAni0tY2FjaGVk4oCcINC4IOKAni0tdW50cmFja2Vk4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4INGBINGC0YrRgNGB0LXQvdC1INCy0YrQsiDQstC10YDRgdC40LguIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDAKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cy4iCittc2dzdHIgIiIKKyLQvtC/0YbQuNC40YLQtSDigJ4tLShuby0pZXhjbHVkZS1zdGFuZGFyZOKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCDRgSDRgtGK0YDRgdC10L3QtSDQv9C+INGB0LvQtdC00LXQvdC4ICIKKyLRhNCw0LnQu9C+0LLQtS4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwOAorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbi4iCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni0tY2FjaGVk4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgdGK0YEg0LfQsNC00LDQstCw0L3QtSDQvdCwINC00YrRgNCy0L4uIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODAKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10INCS0JjQlF0gWy13XSBbLS1wYXRoPdCk0JDQmdCbIHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gWy0tXSAiCisi0KTQkNCZ0JvigKYiCisKKyMgRklYTUUgLSBsaXN0IG9mIHBhdGhzIG9yIHBhdGguLi4KKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4MQorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIDwg0J/QqtCi4oCmIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTIgYnVpbHRpbi90YWcuYzo2MTIKK21zZ2lkICJ0eXBlIgorbXNnc3RyICLQktCY0JQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5MgorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICLQstC40LQg0L3QsCDQvtCx0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5MworbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLQt9Cw0L/QuNGB0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LAg0LIg0LHQsNC30LDRgtCwINC+0YIg0LTQsNC90L3QuCDQt9CwINC+0LHQtdC60YLQuNGC0LUiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg0L7QsdC10LrRgtCwINC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk3Cittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINGE0LDQudC70LAg0LrQsNC60YLQviDQtSDigJQg0LHQtdC3INGE0LjQu9GC0YDQuCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAiIgorItGB0YrQt9C00LDQstCw0L3QtSDQuCDRhdC10YjQuNGA0LDQvdC1INC90LAg0L/RgNC+0LjQt9Cy0L7Qu9C90Lgg0LTQsNC90L3QuCDQt9CwINC/0L7QstGA0LXQtNC10L3QuCDQvtCx0LXQutGC0Lgg0LfQsCDRgtGA0LDRgdC40YDQsNC90LUg0L3QsCAiCisiR2l0IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAi0L7QsdGA0LDQsdC+0YLQstCw0L3QtSDQvdCwINGE0LDQudC70LAg0LLRgdC1INC10LTQvdC+INC1INGBINGC0L7Qt9C4INC/0YrRgiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDEKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICLQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L3QsNC70LjRh9C90Lgg0LrQvtC80LDQvdC00LgiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQyCittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LLQsNC90LUg0L3QsCDRgdC/0LjRgdGK0Log0YEg0L/RitGC0LXQstC+0LTQuNGC0LXQu9C4IgorCisjOiBidWlsdGluL2hlbHAuYzo0MworbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINGB0YLRgNCw0L3QuNGG0LAg0L7RgiDRgNGK0LrQvtCy0L7QtNGB0YLQstC+0YLQviIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0YHRgtGA0LDQvdC40YbQsCDQvtGCINGA0YrQutC+0LLQvtC00YHRgtCy0L7RgtC+INCyINGD0LXQsSDQsdGA0LDRg9C30YrRgCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cy0LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90LAg0YHRgtGA0LDQvdC40YbQsCIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFvQmtCe0JzQkNCd0JTQkF0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINGE0L7RgNC80LDRgiDQvdCwINC/0L7QvNC+0YnRgtCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2hlbHAuYzo5MQorbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdGC0LDRgNGC0LjRgNCw0L3QtSDQvdCwIOKAnmVtYWNzY2xpZW504oCcLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICLQktC10YDRgdC40Y/RgtCwINC90LAg4oCeZW1hY3NjbGllbnTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LDQvdCw0LvQuNC30LjRgNCwLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgItCf0YDQtdC60LDQu9C10L3QviDRgdGC0LDRgNCwINCy0LXRgNGB0LjRjyDQvdCwIOKAnmVtYWNzY2xpZW504oCcIOKAlCAlZCAoPCAyMikuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMzAgYnVpbHRpbi9oZWxwLmM6MTU4IGJ1aWx0aW4vaGVscC5jOjE2NyBidWlsdGluL2hlbHAuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJzogJXMiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQvdCwIOKAniVz4oCcOiAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBwYXRoIGZvciB1bnN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIgorbXNnc3RyICIiCisi4oCeJXPigJw6INC/0YrRgiDQutGK0Lwg0L3QtdC/0L7QtNC00YrRgNC20LDQvdCwINC/0YDQvtCz0YDQsNC80LAg0LfQsCDQv9GA0LXQs9C70LXQtCDQvdCwXG4iCisiINGA0YrQutC+0LLQvtC00YHRgtCy0L7RgtC+LiDQktC80LXRgdGC0L4g0L3QtdGPINC/0YDQvtCx0LLQsNC50YLQtSDigJ5tYW4uPHRvb2w+LmNtZOKAnC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogY21kIGZvciBzdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4ucGF0aCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyLigJ4lc+KAnDog0LrQvtC80LDQvdC00LAg0LfQsCDQv9C+0LTQtNGK0YDQttCw0L3QsCDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0L/RgNC10LPQu9C10LQg0L3QsFxuIgorIiDRgNGK0LrQvtCy0L7QtNGB0YLQstC+0YLQvi4g0JLQvNC10YHRgtC+INC90LXRjyDQv9GA0L7QsdCy0LDQudGC0LUg4oCebWFuLjx0b29sPi5wYXRo4oCcLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIuKAniVz4oCcOiDQvdC10L/QvtC30L3QsNGC0LAg0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQtdCz0LvQtdC0INC90LAg0YDRitC60L7QstC+0LTRgdGC0LLQvtGC0L4uIgorCisjOiBidWlsdGluL2hlbHAuYzozNzEKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgItC90LjQutC+0Y8g0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0YDQtdCz0LvQtdC0INC90LAg0YDRitC60L7QstC+0LTRgdGC0LLQviDQvdC1INGD0YHQv9GPINC00LAg0L7QsdGA0LDQsdC+0YLQuCDQt9Cw0Y/QstC60LDRgtCwIgorCisjOiBidWlsdGluL2hlbHAuYzozNzkKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICIiCisi0L3QuNC60L7RjyDQv9GA0L7Qs9GA0LDQvNCwINC30LAg0L/RgNC10LPQu9C10LQg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3QuNGC0LUg0YHRgtGA0LDQvdC40YbQuCDQvdC1INGD0YHQv9GPINC00LAg0L7QsdGA0LDQsdC+0YLQuCAiCisi0LfQsNGP0LLQutCw0YLQsCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDI4Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAi0KPQutCw0LfQstCw0L3QtSDQvdCwINCw0YLRgNC40LHRg9GC0Lgg0LrRitC8INC/0YrRgiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDI5Cittc2dpZCAiRXZlcnlkYXkgR2l0IFdpdGggMjAgQ29tbWFuZHMgT3IgU28iCittc2dzdHIgItCV0LbQtdC00L3QtdCy0LjQtdGC0L4g0LIgR2l0INCyINGA0LDQvNC60LjRgtC1INC90LAgMjAt0LjQvdCwINC60L7QvNCw0L3QtNC4IgorCisjOiBidWlsdGluL2hlbHAuYzo0MzAKK21zZ2lkICJBIEdpdCBnbG9zc2FyeSIKK21zZ3N0ciAi0KDQtdGH0L3QuNC6INGBINGC0LXRgNC80LjQvdC40YLQtSDQvdCwIEdpdCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMxCittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAi0KPQutCw0LfQstCw0L3QtSDQvdCwINC90LXRgdC70LXQtNC10L3QuCDRhNCw0LnQu9C+0LLQtSwg0LrQvtC40YLQviDQtNCwINCx0YrQtNCw0YIg0L3QsNGA0L7Rh9C90L4g0L/RgNC10L3QtdCx0YDQtdCz0LLQsNC90LgiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMgorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICLQlNC10YTQuNC90LjRgNCw0L3QtSDQvdCwINGB0LLQvtC50YHRgtCy0LDRgtCwINC90LAg0L/QvtC00LzQvtC00YPQu9C40YLQtSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMzCittc2dpZCAiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IgorbXNnc3RyICLQo9C60LDQt9Cy0LDQvdC1INC90LAg0LLQtdGA0YHQuNC4INC4INC40L3RgtC10YDQstCw0LvQuCDQsiBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNAorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCAoZm9yIHZlcnNpb24gMS41LjEgb3IgbmV3ZXIpIgorbXNnc3RyICLQktGK0LLQtdC20LTQsNGJINGD0YDQvtC6INC30LAgR2l0ICjQstC10YDRgdC40Lgg0L/QvtC90LUgMS41LjEpIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzUKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgItCe0LHRiSDQv9GA0LXQs9C70LXQtCDQvdCwINC/0YDQtdC/0L7RgNGK0YfQstCw0L3QuNGC0LUg0L3QsNGH0LjQvdC4INC30LAg0YDQsNCx0L7RgtCwINGBIEdpdCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ3Cittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZTpcbiIKK21zZ3N0ciAi0J/QvtC/0YPQu9GP0YDQvdC40YLQtSDQv9GK0YLQtdCy0L7QtNC40YLQtdC70Lgg0LIgR2l0INGB0LA6XG4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2OCBidWlsdGluL2hlbHAuYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgItGD0L/QvtGC0YDQtdCx0LA6ICVzJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJgZ2l0ICVzJyBpcyBhbGlhc2VkIHRvIGAlcyciCittc2dzdHIgIuKAnmdpdCAlc+KAnCDQtSDRgdC40L3QvtC90LjQvCDQvdCwIOKAniVz4oCcIgorCisjIEZJWE1FIG1lcmdlIHdpdGggbmV4dD8KKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC9IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCy0LjQtCDQvdCwINC+0LHQtdC60YLQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgItC+0YfQsNC60LLQsNC90LjRj9GCINC+0LHQtdC60YIg4oCeJXPigJwg0L3QtSDQsdC1INC/0L7Qu9GD0YfQtdC9IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzOiBleHBlY3RlZCB0eXBlICVzLCBmb3VuZCAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LLQuNC0INC90LAg0L7QsdC10LrRgtCwIOKAniVz4oCcOiDQvtGH0LDQutCy0LDRiNC1INGB0LUg4oCeJXPigJwsINCwINCx0LUg0L/QvtC70YPRh9C10L0g4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNC/0YrQu9C90LggJWQg0LHQsNC50YIiCittc2dzdHJbMV0gItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQv9GK0LvQvdGP0YIgJWQg0LHQsNC50YLQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc2Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICLQvdC10L7Rh9Cw0LrQstCw0L0g0LrRgNCw0Lkg0L3QsCDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc3Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAi0LPRgNC10YjQutCwINC/0YDQuCDRh9C10YLQtdC90LUg0L3QsCDQstGF0L7QtNC90LjRgtC1INC00LDQvdC90LgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI4OQorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QuCDRgdCwINC/0L7QstC10YfQtSDQvtGCINC90LDQu9C40YfQvdC40YLQtSDQsdCw0LnRgtC+0LLQtSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjk2Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAi0L/QsNC60LXRgtC90LjRj9GCINGE0LDQudC7INC1INC/0YDQtdC60LDQu9C10L3QviDQs9C+0LvRj9C8INC30LAg0YLQtdC60YPRidCw0YLQsCDRgdGC0L7QudC90L7RgdGCINC90LAg0YLQuNC/0LAg4oCeb2ZmX3TigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgItC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuIHBhY2tmaWxlICclcyciCittc2dzdHIgItC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMzMQorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICLQvdC10YHRitC+0YLQstC10YLRgdGC0LLQuNC1INCyINC/0L7QtNC/0LjRgdCwINC60YrQvCDQv9Cw0LrQtdGC0L3QuNGPINGE0LDQudC7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAi0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAg0L/QsNC60LXRgtC40YDQsNC90LUg0LJl0YDRgdC40Y8g4oCeJTxQUkl1MzI+4oCcIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJWx1OiAlcyIKK21zZ3N0ciAi0L/QvtCy0YDQtdC00LXQvSDQvtCx0LXQutGCINCyINC/0LDQutC10YLQvdC40Y8g0YTQsNC50Lsg0L/RgNC4INC+0YLQvNC10YHRgtCy0LDQvdC1ICVsdTogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ3MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICLQtNC10LrQvtC80L/RgNC10YHQuNGA0LDQvdC10YLQviDRgSDigJ5pbmZsYXRl4oCcINCy0YrRgNC90LAgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUyMQorbXNnaWQgIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiCittc2dzdHIgItGB0YLQvtC50L3QvtGB0YLRgtCwINC90LAg0L7RgtC80LXRgdGC0LLQsNC90LXRgtC+INC30LAg0L7QsdC10LrRgtCwLdGA0LDQt9C70LjQutCwINCy0L7QtNC4INC00L4g0L/RgNC10L/RitC70LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUyOQorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIKK21zZ3N0ciAi0YHRgtC+0LnQvdC+0YHRgtGC0LAg0L3QsCDQvtGC0LzQtdGB0YLQstCw0L3QtdGC0L4g0LfQsCDQvtCx0LXQutGC0LAt0YDQsNC30LvQuNC60LAg0LUg0LjQt9Cy0YrQvSDQtNC40LDQv9Cw0LfQvtC90LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGCINCy0LjQtCDQvtCx0LXQutGCICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjgKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICLQv9Cw0LrQtdGC0L3QuNGP0YIg0YTQsNC50Lsg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU3MAorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICLQvdC10L7Rh9Cw0LrQstCw0L0g0LrRgNCw0Lkg0L3QsCDRhNCw0LnQuywg0LvQuNC/0YHQstCwICVsdSDQsdCw0LnRgiIKK21zZ3N0clsxXSAi0L3QtdC+0YfQsNC60LLQsNC9INC60YDQsNC5INC90LAg0YTQsNC50LssINC70LjQv9GB0LLQsNGCICVsdSDQsdCw0LnRgtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTYKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAi0YHQtdGA0LjQvtC30L3QsCDQs9GA0LXRiNC60LAg0L/RgNC4INC00LXQutC+0LzQv9GA0LXRgdC40YDQsNC90LUg0YEg4oCeaW5mbGF0ZeKAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQyIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0OCBidWlsdGluL2luZGV4LXBhY2suYzo3NzEKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwNSBidWlsdGluL2luZGV4LXBhY2suYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICIiCisi0KHQqtCS0J/QkNCU0JXQndCY0JUg0J3QkCDQodCi0J7QmdCd0J7QodCi0JjQotCVINCX0JAg0KHQo9Cc0JjQotCVINCX0JAgU0hBMTog4oCeJXPigJwg0J3QkCDQlNCS0JAg0KDQkNCX0JvQmNCn0J3QmCDQntCR0JXQmtCi0JAhIgorCisjIEZJWE1FIG1lcmdlIHdpdGggbmV4dD8KKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE2MgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgItC+0LHQtdC60YLRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICLRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0LjRj9GCINC+0LHQtdC60YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70LXQvSDQvtCx0LXQutGCIEJMT0Ig4oCeJXPigJwiCisKKyMgRklYTUUgcGVyaGFwcyBpbnZhbGlkIG9iamVjdAorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODM5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC+0LHQtdC60YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MworbXNnaWQgIkVycm9yIGluIG9iamVjdCIKK21zZ3N0ciAi0JPRgNC10YjQutCwINCyINC+0LHQtdC60YLQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICLQndGP0LrQvtC4INC+0LHQtdC60YLQuCwg0L3QsNGB0LvQtdC00L3QuNGG0Lgg0L3QsCDigJ4lc+KAnCwg0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQtNC+0YHRgtC40LPQvdCw0YLQuCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTE3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk0OAorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAi0YDQsNC30LvQuNC60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0LjQu9C+0LbQtdC90LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0J/QvtC70YPRh9Cw0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICLQmNC90LTQtdC60YHQuNGA0LDQvdC1INC90LAg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTUwCittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICLQv9Cw0LrQtdGC0L3QuNGP0YIg0YTQsNC50Lsg0LUg0L/QvtCy0YDQtdC00LXQvSAo0L3QtdC10LTQvdCw0LrQstC4INGB0YPQvNC4INC/0L4gU0hBMSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTUKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9GD0YfQuCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0LDQutC10YLQvdC40Y8g0YTQsNC50Lsg0YEg4oCeZnN0YXTigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTgKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgItCyINC60YDQsNGPINC90LAg0L/QsNC60LXRgtC90LjRjyDRhNCw0LnQuyDQuNC80LAg0L/QvtCy0YDQtdC00LXQvdC4INC00LDQvdC90LgiCisKKyMgRklYTUUgV1RGIG1lc3NhZ2UKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjkKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICIiCisi0YTQsNGC0LDQu9C90LAg0LPRgNC10YjQutCwINCy0YrQsiDRhNGD0L3QutGG0LjRj9GC0LAg4oCecGFyc2VfcGFja19vYmplY3Rz4oCcLiDQotC+0LLQsCDQtSDQs9GA0LXRiNC60LAg0LIgR2l0LCAiCisi0LTQvtC60LvQsNC00LLQsNC50YLQtSDRjyDQvdCwINGA0LDQt9GA0LDQsdC+0YLRh9C40YbQuNGC0LUsINC60LDRgtC+INC/0YDQsNGC0LjRgtC1INC1LdC/0LjRgdC80L4g0L3QsCDQsNC00YDQtdGBOiDigJ5naXRAdmdlci4iCisia2VybmVsLm9yZ+KAnC4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExOTQKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICLQntGC0LrRgNC40LLQsNC90LUg0L3QsCDRgdGK0L7RgtCy0LXRgtC90LjRgtC1INGA0LDQt9C70LjQutC4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHRitC30LTQsNC00LUg0L3QuNGI0LrQsDogJXMiCisKKyMgRklYTUUgV1RGIG1lc3NhZ2UKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDcKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICIiCisi0YTQsNGC0LDQu9C90LAg0LPRgNC10YjQutCwINCy0YrQsiDRhNGD0L3QutGG0LjRj9GC0LAg4oCeY29uY2x1ZGVfcGFja+KAnC4g0KLQvtCy0LAg0LUg0LPRgNC10YjQutCwINCyIEdpdCwgIgorItC00L7QutC70LDQtNCy0LDQudGC0LUg0Y8g0L3QsCDRgNCw0LfRgNCw0LHQvtGC0YfQuNGG0LjRgtC1LCDQutCw0YLQviDQv9GA0LDRgtC40YLQtSDQtS3Qv9C40YHQvNC+INC90LAg0LDQtNGA0LXRgTog4oCeZ2l0QHZnZXIuIgorImtlcm5lbC5vcmfigJwuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdHMiCittc2dzdHIgItC00LXQudGB0YLQstC40LXRgtC+INC30LDQstGK0YDRiNC4INGBICVkINC70L7QutCw0LvQvdC4INC+0LHQtdC60YLQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHRhaWwgY2hlY2tzdW0gZm9yICVzIChkaXNrIGNvcnJ1cHRpb24/KSIKK21zZ3N0ciAiIgorItCd0LXQvtGH0LDQutCy0LDQvdCwINC/0L7RgdC70LXQtNCy0LDRidCwINGB0YPQvNCwINC30LAg0LPRgNC10YjQutC4INC30LAg4oCeJXPigJwgKNC/0YDQuNGH0LjQvdCw0YLQsCDQvNC+0LbQtSDQtNCwINC1INCz0YDQtdGI0LrQsCDQsiAiCisi0LTQuNGB0LrQsCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gItCyINC/0LDQutC10YLQsCDQuNC80LAgJWQg0L3QtdC90LDQv9Cw0YHQstCw0YnQsCDRgNCw0LfQu9C40LrQsCIKK21zZ3N0clsxXSAi0LIg0L/QsNC60LXRgtCwINC40LzQsCAlZCDQvdC10L3QsNC/0LDRgdCy0LDRidC4INGA0LDQt9C70LjQutC4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICLQtNC+0LHQsNCy0LXQvdC40Y/RgiDQvtCx0LXQutGCINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC60L7QvNC/0YDQtdGB0LjRgNCwINGBIOKAnmRlZmxhdGXigJw6ICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICLQu9C+0LrQsNC70L3QuNGP0YIg0L7QsdC10LrRgiDigJ4lc+KAnCDQtSDQv9C+0LLRgNC10LTQtdC9IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzkxCittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQv9GA0Lgg0LfQsNGC0LLQsNGA0Y/QvdC10YLQviDQvdCwINC/0LDQutC10YLQvdC40Y8g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlIGtlZXAgZmlsZSAnJXMnIgorbXNnc3RyICIiCisi0LPRgNC10YjQutCwINC/0YDQuCDQt9Cw0L/QuNGB0LLQsNC90LXRgtC+INC90LAg0YTQsNC50LvQsCDigJ4lc+KAnCwg0L7RgdC40LPRg9GA0Y/QstCw0Ykg0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4ga2VlcCBmaWxlICclcyciCittc2dzdHIgIiIKKyLQs9GA0LXRiNC60LAg0L/RgNC4INC30LDRgtCy0LDRgNGP0L3QtdGC0L4g0L3QsCDQt9Cw0L/QuNGB0LDQvdC40Y8g0YTQsNC50Lsg4oCeJXPigJwsINC+0YHQuNCz0YPRgNGP0LLQsNGJINC30LDQv9Cw0LfQstCw0L3QtSDQvdCwICIKKyLQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQyNQorbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgItC/0LDQutC10YLQvdC40Y/RgiDRhNCw0LnQuyDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzYKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAi0YTQsNC50LvRitGCINC30LAg0LjQvdC00LXQutGB0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrRhdGA0LDQvdC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAi0LfQsNC00LDQtNC10L3QsCDQtSDQvdC10L/RgNCw0LLQuNC70L3QsCDQstC10YDRgdC40Y8g0L/QsNC60LXRgtC40YDQsNC90LU6IOKAnnBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPuKAnCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIgorbXNnc3RyICLQt9Cw0LTQsNC00LXQvSDQtSDQvdC10L/RgNCw0LLQuNC70LXQvSDQsdGA0L7QuSDQvdC40YjQutC4OiAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3OSBidWlsdGluL2luZGV4LXBhY2suYzoxNjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgItC70LjQv9GB0LLQsCDQv9C+0LTQtNGA0YrQttC60LAg0LfQsCDQvdC40YjQutC4LiDigJ4lc+KAnCDRidC1INGB0LUg0L/RgNC10L3QtdCx0YDQtdCz0L3QtSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIKK21zZ3N0ciAi0KHRitGJ0LXRgdGC0LLRg9Cy0LDRidC40Y/RgiDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAi0KHRitGJ0LXRgdGC0LLRg9Cy0LDRidC40Y/RgiDQuNC90LTQtdC60YEg0LfQsCDQv9Cw0LrQtdGC0L3QuNGPINGE0LDQudC7IOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICIlZCDQvtCx0LXQutGCINC90LUg0LUg0YDQsNC30LvQuNC60LAiCittc2dzdHJbMV0gIiVkINC+0LHQtdC60YLQsCDQvdC1INGB0LAg0YDQsNC30LvQuNC60LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAi0LTRitC70LbQuNC90LDRgtCwINC90LAg0LLQtdGA0LjQs9Cw0YLQsCDQtSAlZDogJWx1INC+0LHQtdC60YIiCittc2dzdHJbMV0gItC00YrQu9C20LjQvdCw0YLQsCDQvdCwINCy0LXRgNC40LPQsNGC0LAg0LUgJWQ6ICVsdSDQvtCx0LXQutGC0LAiCisKKyMgRklYTUUgaXQgaXMgbm90IHRoZSBjd2QgaXQgaXMgdGhlIHByZXZpb3VzIGN3ZAorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTYyMgorbXNnaWQgIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIgorbXNnc3RyICLQn9GA0L7RhtC10YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INCy0YrRgNC90LUg0LrRitC8INC/0YDQtdC00LjRiNC90LDRgtCwINGA0LDQsdC+0YLQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjcwIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NzMKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2ODUgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINGB0YLQvtC50L3QvtGB0YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MDMKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1maXgtdGhpbuKAnCDQuNC30LjRgdC60LLQsCDigJ4tLXN0ZGlu4oCcIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzA3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgItC40LzQtdGC0L4g0L3QsCDQv9Cw0LrQtdGC0L3QuNGPINGE0LDQudC7IOKAniVz4oCcINC90LUg0LfQsNCy0YrRgNGI0LLQsCDQvdCwIOKAni5wYWNr4oCcIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzI0Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLXZlcmlmeeKAnCDQuNC30LjRgdC60LLQsCDQuNC80LUg0L3QsCDQv9Cw0LrQtdGC0LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgItCd0LUg0LzQvtCz0LDRgiDQtNCwINGB0LUg0LTQsNC00LDRgiDQv9GA0LDQstCwINC30LAg0LfQsNC/0LjRgSDQsiDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QsCDQs9GA0YPQv9Cw0YLQsCIKKworIyBGSVhNRSAtIGJhZCB3b3JkaW5nIGluc2FuZWx5CisjOiBidWlsdGluL2luaXQtZGIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIG5hbWUgJXMiCittc2dzdHIgItGC0LLRitGA0LTQtSDQtNGK0LvQs9C+INC40LzQtSDQvdCwINGI0LDQsdC70L7QvTog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9GD0YfQuCDQuNC90YTQvtGA0LzQsNGG0LjRjyDRh9GA0LXQtyDigJ5zdGF04oCcINC30LAg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9C+0LvRg9GH0Lgg0LjQvdGE0L7RgNC80LDRhtC40Y8g0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwINGI0LDQsdC70L7QvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbmRpciAnJXMnIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQstC+0YDQtdC90LAiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICLQstGA0YrQt9C60LDRgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC90LAiCisKKyMgRklYTUUgLSBiYWQgd29yZGluZyBpbnNhbmVseQorIzogYnVpbHRpbi9pbml0LWRiLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIgorbXNnc3RyICLRgtCy0YrRgNC00LUg0LTRitC70LPQviDQuNC80LUg0L3QsCDRgdC40LzQstC+0LvQvdCwINCy0YDRitC30LrQsDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGB0YrQt9C00LDQtNC1INGB0LjQvNCy0L7Qu9C90LAg0LLRgNGK0LfQutCwIOKAniVz4oCcINCyIOKAniVz4oCcIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQutC+0L/QuNGA0LAg0LIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDRiNCw0LHQu9C+0L3QsCDigJ4lc+KAnCIKKworIyBGSVhNRSBiYWQgd29yZCBpbnNhbmVseQorIzogYnVpbHRpbi9pbml0LWRiLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgcGF0aCAlcyIKK21zZ3N0ciAi0YLQstGK0YDQtNC1INC00YrQu9GK0LMg0L/RitGCINC60YrQvCDRiNCw0LHQu9C+0L06IOKAniVz4oCcIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCAlcyIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINGBINGI0LDQsdC70L7QvdC40YLQtSDQvdC1INC1INC+0YLQutGA0LjRgtCwOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBvZiBhIHdyb25nIGZvcm1hdCB2ZXJzaW9uICVkIGZyb20gJyVzJyIKK21zZ3N0ciAiIgorItGI0LDQsdC70L7QvdC40YLQtSDRgSDQvdC10L/RgNCw0LLQuNC70LXQvSDQvdC+0LzQtdGAINC90LAg0YTQvtGA0LzQsNGC0LAgJWQg0L3Rj9C80LAg0LTQsCDQsdGK0LTQsNGCINC60L7Qv9C40YDQsNC90Lgg0L7RgiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBnaXQgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLRgtCy0YrRgNC00LUg0LTRitC70LPQviDQuNC80LUg0L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwIEdpdDog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM0MyBidWlsdGluL2luaXQtZGIuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgItCU0LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6Mzc0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICLRhNCw0LnQu9C+0LLQtSDQvtGCINCy0LjQtCAlZCDQvdC1INGB0LUg0L/QvtC00LTRitGA0LbQsNGCIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC/0YDQtdC80LXRgdGC0Lgg0LIg4oCeJXPigJwiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJyVzJyBpcyBlaXRoZXIgIlJlaW5pdGlhbGl6ZWQKKyMuIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gIiIsIGFuZCB0aGUgbGFzdCAnJXMlcycgaXMgdGhlIHZlcmJhdGltIGRpcmVjdG9yeSBuYW1lLgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzINGF0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdCDQsiDigJ4lcyVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCittc2dzdHIgItCd0LDQvdC+0LLQviDQuNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC+LCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0L4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNAorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICLQmNC90LjRhtC40LDQu9C40LfQuNGA0LDQvdC+INC/0YDQsNC30L3QviIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDM1Cittc2dpZCAiIHNoYXJlZCIKK21zZ3N0ciAiLCDRgdC/0L7QtNC10LvQtdC90L4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4MgorbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT3QlNCY0KDQldCa0KLQntCg0JjQr1/QoV/QqNCQ0JHQm9Ce0J3QmF0gWy0tIgorInNoYXJlZFs90J/QoNCQ0JLQkF1dIFvQlNCY0KDQldCa0KLQntCg0JjQr10iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUwNQorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICLQv9GA0LDQstCwIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MDYKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgIiIKKyLRg9C60LDQt9Cy0LDQvdC1LCDRh9C1INGF0YDQsNC90LjQu9C40YnQtdGC0L4g0L3QsCBHaXQg0YnQtSDQsdGK0LTQtSDRgdC/0L7QtNC10LvQtdC90L4g0L7RgiDQv9C+0LLQtdGH0LUg0L7RgiDQtdC00LjQvSAiCisi0L/QvtGC0YDQtdCx0LjRgtC10LsiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUwOCBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU3IGJ1aWx0aW4vcmVwYWNrLmM6MTcxCittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgItCx0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTQwIGJ1aWx0aW4vaW5pdC1kYi5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgItC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvdCwIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQstC70LXQt9C1INCyINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKyIlcyAo0LjQu9C4IC0td29yay10cmVlPdCU0JjQoNCV0JrQotCe0KDQmNCvKSDQuNC30LjRgdC60LLQsCDRg9C60LDQt9Cy0LDQvdC10YLQviDQvdCwICVzICjQuNC70LggLS1naXQtIgorImRpcj3QlNCY0KDQldCa0KLQntCg0JjQrykiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU5OAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICLQoNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDQsiDigJ4lc+KAnCDQtSDQvdC10LTQvtGB0YLRitC/0L3QviIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNQorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyIDx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dICIKKyJbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIg0JvQldCa0KHQldCc0JBbKD18OinQodCi0J7QmdCd0J7QodCiXSnigKZdICIKKyJb0KTQkNCZ0JvigKZdIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI1Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAi0LjQt9GH0LjRgdGC0LLQsNC90LUg0L3QsCDQv9GA0LDQt9C90LjRgtC1INC10L/QuNC70L7Qt9C4IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI2Cittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAi0LXQv9C40LvQvtCzIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI3Cittc2dpZCAidHJhaWxlcihzKSB0byBhZGQiCittc2dzdHIgItC10L/QuNC70L7QsyjQt9C4KSDQt9CwINC00L7QsdCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDEKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbG9nIFvQntCf0KbQmNCv4oCmXSBb0JTQmNCQ0J/QkNCX0J7QnV/QndCQX9CS0JXQoNCh0JjQmNCi0JVdIFtbLS1dINCf0KrQouKApl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDIKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgW9Ce0J/QptCY0K/igKZdINCe0JHQldCa0KLigKYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINC+0L/RhtC40Y8g4oCeLS1kZWNvcmF0ZeKAnDogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI3Cittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgItCx0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI4Cittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LfRhdC+0LTQvdC40Y8g0LrQvtC0IgorCisjOiBidWlsdGluL2xvZy5jOjEyOQorbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICIiCisi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRhNCw0LnQuyDQt9CwINGB0YrQvtGC0LLQtdGC0YHRgtCy0LjRj9GC0LAg0L3QsCDQuNC80LXQvdCw0YLQsCDQuCDQsNC00YDQtdGB0LjRgtC1INC90LAg0LUt0L/QvtGJ0LAgKOKAni4iCisibWFpbG1hcOKAnCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMwCittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAi0L3QsNGB0YLRgNC+0LnQutC4INC90LAg0YTQvtGA0LzQsMyA0YLQsCDQvdCwINC40LfQstC10LbQtNCw0L3QsNGC0LAg0LjQvdGE0L7RgNC80LDRhtC40Y8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzCittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIiIKKyLQntCx0YDQsNCx0L7RgtCy0LDQvdC1INGB0LDQvNC+INC90LAg0YDQtdC00L7QstC10YLQtSDQstGK0LIg0YTQsNC50LvQsCDQsiDQuNC90YLQtdGA0LLQsNC70LAg0L7RgiBuINC00L4gbSDQstC60LvRjtGH0LjRgtC10LvQvdC+LiAiCisi0JHRgNC+0LXQvdC10YLQviDQt9Cw0L/QvtGH0LLQsCDQvtGCIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAi0KDQtdC30YPQu9GC0LDRgjogJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHNob3cgJXM6IGJhZCBmaWxlIgorbXNnc3RyICJnaXQgc2hvdyAlczog0L/QvtCy0YDQtdC00LXQvSDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9sb2cuYzo0NzIgYnVpbHRpbi9sb2cuYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICLQntCx0LXQutGC0YrRgiDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvTogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdHlwZTogJWQiCittc2dzdHIgItCd0LXQuNC30LLQtdGB0YLQtdC9INCy0LjQtDogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6Njg5Cittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAi0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdCwINGB0YLQvtC50L3QvtGB0YIg0L3QsCDigJ5mb3JtYXQuaGVhZGVyc+KAnCIKKworIzogYnVpbHRpbi9sb2cuYzo3NzMKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgItC/0YDQtdC60LDQu9C10L3QviDQtNGK0LvQs9C+INC40LzQtSDQvdCwINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQt9CwINC40LfRhdC+0LTQvdCw0YLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyIKKworIzogYnVpbHRpbi9sb2cuYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAi0KTQsNC50LvRitGCLdC60YDRitC/0LrQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7RgtCy0L7RgNC10L0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODAzCittc2dpZCAiTmVlZCBleGFjdGx5IG9uZSByYW5nZS4iCittc2dzdHIgItCi0YDRj9Cx0LLQsCDQtNCwINC30LDQtNCw0LTQtdGC0LUg0YLQvtGH0L3QviDQtdC00LjQvSDQtNC40LDQv9Cw0LfQvtC9LiIKKworIzogYnVpbHRpbi9sb2cuYzo4MTMKK21zZ2lkICJOb3QgYSByYW5nZS4iCittc2dzdHIgItCd0LUg0LUg0LTQuNCw0L/QsNC30L7QvS4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTE5Cittc2dpZCAiQ292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAi0J/RgNC40LTRgNGD0LbQsNCy0LDRidC+0YLQviDQv9C40YHQvNC+INGC0YDRj9Cx0LLQsCDQtNCwINC1INGE0L7RgNC80LDRgtC40YDQsNC90L4g0LrQsNGC0L4g0LUt0L/QuNGB0LzQviIKKworIyBGSVhNRSBiYWQgd29yZGluZyBpbnNhbmVseQorIzogYnVpbHRpbi9sb2cuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0YTQvtGA0LzQsNGCINC90LAg0LfQsNCz0LvQsNCy0L3QsNGC0LAg0YfQsNGB0YIg0LfQsCDQvtGC0LPQvtCy0L7RgCDigJ5pbi1yZXBseS10b+KAnDogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTAyNgorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBb0J7Qn9Cm0JjQr+KApl0gW9Ce0KIgfCDQlNCY0JDQn9CQ0JfQntCdX9Cd0JBf0JLQldCg0KHQmNCY0KLQlV0iCisKKyMgRklYTUUgbWVzc2FnZSBXVEYgd2h5IGFzayBpdAorIzogYnVpbHRpbi9sb2cuYzoxMDcxCittc2dpZCAiVHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgItCc0L7QttC10YLQtSDQtNCwINGD0LrQsNC20LXRgtC1INC80LDQutGB0LjQvNGD0Lwg0LXQtNC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0LfQsCDQuNC30YXQvtC0LiIKKworIzogYnVpbHRpbi9sb2cuYzoxMTg2Cittc2dpZCAidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAi0L3QvtC80LXRgNCw0YbQuNGPIOKAnltQQVRDSCBuL21d4oCcINC00L7RgNC4INC4INC/0YDQuCDQtdC00LjQvdGB0YLQstC10L3QsCDQutGA0YrQv9C60LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE4OQorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICLQvdC+0LzQtdGA0LDRhtC40Y8g4oCeW1BBVENIXeKAnCDQtNC+0YDQuCDQuCDQv9GA0Lgg0LzQvdC+0LbQtdGB0YLQstC+INC60YDRitC/0LrQuCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTkzCittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC60YDRitC/0LrQuNGC0LUg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINC40LfRhdC+0LQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE5NQorbXNnaWQgImdlbmVyYXRlIGEgY292ZXIgbGV0dGVyIgorbXNnc3RyICLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQv9GA0LjQtNGA0YPQttCw0LLQsNGJ0L4g0L/QuNGB0LzQviIKKworIzogYnVpbHRpbi9sb2cuYzoxMTk3Cittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICLQv9GA0L7RgdGC0LAg0YfQuNGB0LvQvtCy0LAg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70L3QvtGB0YIg0LfQsCDQuNC80LXQvdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtS3QutGA0YrQv9C60LgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE5OAorbXNnaWQgInNmeCIKK21zZ3N0ciAi0JfQndCQ0KbQmCIKKworIzogYnVpbHRpbi9sb2cuYzoxMTk5Cittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YLQtdC30Lgg0JfQndCQ0KbQmCDQt9CwINGB0YPRhNC40LrRgSDQstC80LXRgdGC0L4g4oCeLnBhdGNo4oCcIgorCisjOiBidWlsdGluL2xvZy5jOjEyMDEKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICLQvdC+0LzQtdGA0LjRgNCw0L3QtdGC0L4g0L3QsCDQutGA0YrQv9C60LjRgtC1INC00LAg0LfQsNC/0L7Rh9Cy0LAg0L7RgiDRgtC+0LfQuCDQkdCg0J7QmSwg0LAg0L3QtSDRgSAxIgorCisjOiBidWlsdGluL2xvZy5jOjEyMDMKK21zZ2lkICJtYXJrIHRoZSBzZXJpZXMgYXMgTnRoIHJlLXJvbGwiCittc2dzdHIgItC+0YLQsdC10LvRj9C30LLQsNC90LUsINGH0LUg0YLQvtCy0LAg0LUgTi3RgtCw0YLQsCDQv9C+0YDQtdC00L3QsCDRgNC10LTQsNC60YbQuNGPINC90LAg0L/QvtGA0LXQtNC40YbQsNGC0LAg0L7RgiDQutGA0YrQv9C60LgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIwNQorbXNnaWQgIlVzZSBbPHByZWZpeD5dIGluc3RlYWQgb2YgW1BBVENIXSIKK21zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgtC+0LfQuCDigJ5b0J/QoNCV0KTQmNCa0KFd4oCcINCy0LzQtdGB0YLQviDigJ5bUEFUQ0hd4oCcIgorCisjOiBidWlsdGluL2xvZy5jOjEyMDgKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC40LfRhdC+0LTQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQsiDRgtCw0LfQuCDQlNCY0KDQldCa0KLQntCg0JjQryIKKworIzogYnVpbHRpbi9sb2cuYzoxMjExCittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgItCx0LXQtyDQtNC+0LHQsNCy0Y/QvdC1L9C80LDRhdCw0L3QtSDQvdCwINC/0YDQtdGE0LjQutGB0LAg4oCeW1BBVENIXeKAnCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE0Cittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LDQt9C70LjQutC4INC80LXQttC00YMg0LTQstC+0LjRh9C90Lgg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxNgorbXNnaWQgImRvbid0IGluY2x1ZGUgYSBwYXRjaCBtYXRjaGluZyBhIGNvbW1pdCB1cHN0cmVhbSIKK21zZ3N0ciAi0LTQsCDQvdC1INGB0LUg0LLQutC70Y7Rh9Cy0LDRgiDQutGA0YrQv9C60LgsINC60L7QuNGC0L4g0L/RgNC40YHRitGB0YLQstCw0YIg0LIg0YHQu9C10LTQtdC90LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE4Cittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INCy0YrQsiDRhNC+0YDQvNCw0YIg0LfQsCDQutGA0YrQv9C60LgsINCwINC90LAg0LIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyAo0LrRgNGK0L/QutCwINC4INGB0YLQsNGC0LjRgdGC0LjQutCwKSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIwCittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICLQntC/0YbQuNC4INC/0YDQuCDQuNC30L/RgNCw0YnQsNC90LUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMQorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAi0JfQkNCT0JvQkNCS0J3QkF/Qp9CQ0KHQoiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIyCittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGC0LDQt9C4INCX0JDQk9Cb0JDQktCd0JBf0KfQkNCh0KIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMyBidWlsdGluL2xvZy5jOjEyMjUKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAi0JUt0J/QntCp0JAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMworbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LfQsNCz0LvQsNCy0L3QsCDRh9Cw0YHRgiDigJ5UbzrigJwgKNC00L4pIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjUKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC30LDQs9C70LDQstC90LAg0YfQsNGB0YIg4oCeQ2M64oCcICjQuCDQtNC+KSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI3Cittc2dpZCAiaWRlbnQiCittc2dzdHIgItCY0JTQldCd0KLQmNCn0J3QntCh0KIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyOAorbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgIiIKKyLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0LDQtNGA0LXRgdCwINCyINC30LDQs9C70LDQstC90LDRgtCwINGH0LDRgdGCIOKAnkZyb23igJwg0LTQsCDQtSDRgtCw0LfQuCDQmNCU0JXQndCi0JjQp9Cd0J7QodCiLiDQkNC60L4g0L3QtSDQtSAiCisi0LfQsNC00LDQtNC10L3QsCDRgtCw0LrQsNCy0LAsINGB0LUg0LLQt9C40LzQsCDQsNC00YDQtdGB0LAg0L3QsCDQv9C+0LTQsNCy0LDRidC40Y8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzMAorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgItCY0JTQldCd0KLQmNCk0JjQmtCQ0KLQntCgX9Cd0JBf0KHQqtCe0JHQqdCV0J3QmNCVIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzEKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgIiIKKyLQv9GK0YDQstC+0YLQviDRgdGK0L7QsdGJ0LXQvdC40LUg0LTQsCDQtSDQsiDQvtGC0LPQvtCy0L7RgCDQvdCwINC1LdC/0LjRgdC80L7RgtC+INGBINGC0L7Qt9C4ICIKKyLQmNCU0JXQndCi0JjQpNCY0JrQkNCi0J7QoF/QndCQX9Ch0KrQntCR0KnQldCd0JjQlSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjMyIGJ1aWx0aW4vbG9nLmM6MTIzNQorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICLQs9GA0LDQvdC40YbQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjMzCittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAi0L/RgNC40LrRgNC10L/Rj9C90LUg0L3QsCDQutGA0YrQv9C60LDRgtCwIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzYKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICLQstC60LvRjtGH0LLQsNC90LUg0L3QsCDQutGA0YrQv9C60LDRgtCwINCyINGC0LXQutGB0YLQsCDQvdCwINC/0LjRgdC80LDRgtCwIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDAKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiIgorItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0L3QuNGI0LrQuCDQt9CwINGB0YrQvtCx0YnQtdC90LjRj9GC0LAuINCh0YLQuNC70YrRgiDQtSDigJ5zaGFsbG934oCcICjQv9C70LjRgtGK0LopINC40LvQuCAiCisi4oCeZGVlcOKAnCAo0LTRitC70LHQvtC6KSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQyCittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICLQv9C+0LTQv9C40YEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0MworbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC/0L7Qu9C1INC30LAg0L/QvtC00L/QuNGBIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDUKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQv9C+0LTQv9C40YEg0L7RgiDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ2Cittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINC40LzQtdC90LDRgtCwINC90LAg0LrRgNGK0L/QutC40YLQtSIKKworIzogYnVpbHRpbi9sb2cuYzoxMzIwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJXMiCittc2dzdHIgItCz0YDQtdGI0L3QsCDQuNC00LXQvdGC0LjRh9C90L7RgdGCOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzM1Cittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tbuKAnCDQuCDigJ4ta+KAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzNworbXNnaWQgIi0tc3ViamVjdC1wcmVmaXggYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICLQvtC/0YbQuNC40YLQtSDigJ4tLXN1YmplY3QtcHJlZml44oCcINC4IOKAni1r4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4LiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzQ1Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1uYW1lLW9ubHnigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINCz0LXQvdC10YDQuNGA0LDQvdC10YLQviDQvdCwINC60YDRitC/0LrQuCIKKworIzogYnVpbHRpbi9sb2cuYzoxMzQ3Cittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLW5hbWUtc3RhdHVz4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDQs9C10L3QtdGA0LjRgNCw0L3QtdGC0L4g0L3QsCDQutGA0YrQv9C60LgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM0OQorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1jaGVja+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0LPQtdC90LXRgNC40YDQsNC90LXRgtC+INC90LAg0LrRgNGK0L/QutC4IgorCisjOiBidWlsdGluL2xvZy5jOjEzNzIKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAiIgorItC40LfRhdC+0LTRitGCINC80L7QttC1INC00LAg0LjQu9C4INGB0YLQsNC90LTQsNGA0YLQvdC40Y/Rgiwg0LjQu9C4INC00LAg0LUg0LIg0LTQuNGA0LXQutGC0L7RgNC40Y8sINC90L4g0L3QtSDQuCDQtNCy0LXRgtC1LiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgItCU0LjRgNC10LrRgtC+0YDQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvdCwIgorCisjOiBidWlsdGluL2xvZy5jOjE0NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINGBINC/0L7QtNC/0LjRgSDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTM1Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgItCY0LfRhdC+0LTQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINGB0YrQt9C00LDQtNC10L3QuCIKKworIzogYnVpbHRpbi9sb2cuYzoxNTgzCittc2dpZCAiZ2l0IGNoZXJyeSBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsaW1pdD5dXV0iCittc2dzdHIgImdpdCBjaGVycnkgWy12XSBb0J7QotCU0JDQm9CV0KfQldCdX9Ca0JvQntCdIFvQktCg0KrQpSBb0J/QoNCV0JTQldCbXV1dIgorCisjOiBidWlsdGluL2xvZy5jOjE2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICIiCisi0KHQu9C10LTQtdC90LjRj9GCINC+0YLQtNCw0LvQtdGH0LXQvSDQutC70L7QvSDQvdC1INCx0LUg0L7RgtC60YDQuNGCLCDQt9Cw0YLQvtCy0LAg0LjQt9GA0LjRh9C90L4g0LfQsNC00LDQudGC0LUgIgorItCe0KLQlNCQ0JvQldCn0JXQnV/QmtCb0J7QnS5cbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjQ4IGJ1aWx0aW4vbG9nLmM6MTY1MCBidWlsdGluL2xvZy5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21taXQgJXMiCittc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQviDQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6MzU4Cittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgW9Ce0J/QptCY0K/igKZdIFvQpNCQ0JnQm+KApl0iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTUKK21zZ2lkICJpZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0YWdzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INGBINC10LTQvdC+0LHRg9C60LLQtdC90Lgg0YTQu9Cw0LPQvtCy0LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTcKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIKK21zZ3N0ciAi0LzQsNC70LrQuCDQsdGD0LrQstC4INC30LAg0YTQsNC50LvQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC00LAg0YHQtSDRgdGH0LXRgtCw0YIg0LfQsCDQvdC10L/RgNC+0LzQtdC90LXQvdC4IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDE5Cittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC60LXRiNC40YDQsNC90LjRgtC1INGE0LDQudC70L7QstC1ICjRgdGC0LDQvdC00LDRgNGC0L3QvikiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjEKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQt9GC0YDQuNGC0LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDIzCittc2dpZCAic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QtdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDI1Cittc2dpZCAic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQtNGA0YPQs9C40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyNworbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNCz0L3QvtGA0LjRgNCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzAKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvNC10YLQviDQvdCwINC+0LHQtdC60YLQsCDQt9CwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDMyCittc2dpZCAic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1LCDQutC+0LjRgtC+INGC0YDRj9Cx0LLQsCDQtNCwINCx0YrQtNCw0YIg0LjQt9GC0YDQuNGC0LgiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzQKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWVzIG9ubHkiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC40LzQtdGC0L4g0L3QsCDQtNGA0YPQs9C40YLQtSAo0L3QtdGB0LvQtdC00LXQvdC40YLQtSkg0LTQuNGA0LXQutGC0L7RgNC40LgiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzcKK21zZ2lkICJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/RgNCw0LfQvdC40YLQtSDQtNC40YDQtdC60YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0MAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QtdGB0LvQtdGC0LjRgtC1INGE0LDQudC70L7QstC1IgorCisjIEZJWE1FIG5vdCBjbGVhciBhYm91dCB3aGF0IHRoaXMgb3B0aW9uIGRvZXMKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDIKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC30LAg0L7RgtC80Y/QvdCwINC90LAg0YDQsNC30YDQtdGI0LXQvdC40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDQKK21zZ2lkICJza2lwIGZpbGVzIG1hdGNoaW5nIHBhdHRlcm4iCittc2dzdHIgItC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INC90LDQv9Cw0YHQstCw0YnQuCDQqNCQ0JHQm9Ce0J3QsCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0NworbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgItGI0LDQsdC70L7QvdC40YLQtSDQt9CwINC40LPQvdC+0YDQuNGA0LDQvdC1INC00LAg0YHQtSDQv9GA0L7Rh9C10YLQsNGCINC+0YIg0YLQvtC30Lgg0KTQkNCZ0JsiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTAKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAiIgorItC40LfRh9C40YLQsNC90LUg0L3QsCDQtNC+0L/RitC70L3QuNGC0LXQu9C90LjRgtC1INGI0LDQsdC70L7QvdC4INC30LAg0LjQs9C90L7RgNC40YDQsNC90LUg0L/QviDQtNC40YDQtdC60YLQvtGA0LjRjyDQvtGCINGC0L7Qt9C4INCk0JDQmdCbIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDUyCittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC+INC40LPQvdC+0YDQuNGA0LDQvdC40YLQtSDQvtGCIEdpdCDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1NQorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLQv9GK0YLQuNGJ0LDRgtCwINC00LAg0YHQsCDQvtGC0L3QvtGB0LjRgtC10LvQvdC4INGB0L/RgNGP0LzQviDQvtGB0L3QvtCy0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QsCDQv9GA0L7QtdC60YLQsCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1OAorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAi0LPRgNC10YjQutCwLCDQsNC60L4g0L3Rj9C60L7QuSDQvtGCINGC0LXQt9C4INCk0JDQmdCb0L7QstC1INC90LUg0LUg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTkKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAi0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0JTQqtCg0JLQniIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ2MAorbXNnaWQgInByZXRlbmQgdGhhdCBwYXRocyByZW1vdmVkIHNpbmNlIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIiIKKyLRgdGH0LjRgtCw0L3QtSwg0YfQtSDQv9GK0YLQuNGJ0LDRgtCwINC40LfRgtGA0LjRgtC4INGB0LvQtdC0INCj0JrQkNCX0JDQotCV0JvRj1/QmtCq0Jxf0JTQqtCg0JLQniDQstGB0LUg0L7RidC1INGB0YrRidC10YHRgtCy0YPQstCw0YIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjIKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MjgKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBb0J7Qn9Cm0JjQr+KApl0g0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0JTQqtCg0JLQniBb0J/QqtCi4oCmXSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI3Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0YHQsNC80L4g0L3QsCDQtNGK0YDQstC10YLQsCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI5Cittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICLRgNC10LrRg9GA0YHQuNCy0L3QviDQvtCx0YXQvtC20LTQsNC90LUg0L/QvtC00LTRitGA0LLQtdGC0LDRgtCwIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzEKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQtNGK0YDQstC10YLQsNGC0LAg0L/RgNC4INGA0LXQutGD0YDRgdC40LLQvdC+0YLQviDQvtCx0YXQvtC20LTQsNC90LUiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNAorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgItGA0LDQt9C00LXQu9GP0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0YEg0L3Rg9C70LXQstC40Y8g0LfQvdCw0Log4oCeTlVM4oCcIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJpbmNsdWRlIG9iamVjdCBzaXplIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQvNC10YDQsCDQvdCwINC+0LHQtdC60YLQsCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM3IGJ1aWx0aW4vbHMtdHJlZS5jOjEzOQorbXNnaWQgImxpc3Qgb25seSBmaWxlbmFtZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQuNC80LXQvdCw0YLQsCDQvdCwINGE0LDQudC70L7QstC10YLQtSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQyCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQv9GK0LvQvdC40YLQtSDQuNC80LXQvdCwINC90LAg0L/RitGC0LjRidCw0YLQsCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ0Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YbRj9C70L7RgtC+INC00YrRgNCy0L4sINC90LUg0YHQsNC80L4g0L3QsCDRgtC10LrRg9GJ0LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPICjQstC60LvRjtGH0LLQsCDQvtC/0YbQuNGP0YLQsCAiCisi4oCeLS1mdWxsLW5hbWXigJwpIgorCisjOiBidWlsdGluL21lcmdlLmM6NDUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFvQntCf0KbQmNCv4oCmXSBb0J/QntCU0JDQktCQ0J3QleKApl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NgorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSA8bXNnPiBIRUFEIDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UgW9Ce0J/QptCY0K/igKZdINCh0KrQntCR0KnQldCd0JjQlSBIRUFEINCf0J7QlNCQ0JLQkNCd0JUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NworbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIyBGSVhNRSAtbSByYXRoZXIgdGhhbiBqdXN0IG0KKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDAKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgItC+0L/RhtC40Y/RgtCwIOKAni1t4oCcINC40LfQuNGB0LrQstCwINGB0YLQvtC50L3QvtGB0YIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAi0J3Rj9C80LAg0YLQsNC60LDQstCwINGB0YLRgNCw0YLQtdCz0LjRjyDQt9CwINGB0LvQuNCy0LDQvdC1OiDigJ4lc+KAnC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICLQndCw0LvQuNGH0L3QuNGC0LUg0YHRgtGA0LDRgtC10LPQuNC4INGB0LA6IgorCisjOiBidWlsdGluL21lcmdlLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICLQlNC+0L/RitC70L3QuNGC0LXQu9C90LjRgtC1INGB0YLRgNCw0YLQtdCz0LjQuCDRgdCwOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5MworbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgItCx0LXQtyDQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGC0LDRgtC40YHRgtC40LrQsNGC0LAg0YHQu9C10LQg0LfQsNCy0YrRgNGI0LLQsNC90LUg0L3QsCDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NgorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRgtCw0YLQuNGB0YLQuNC60LDRgtCwINGB0LvQtdC0INC30LDQstGK0YDRiNCy0LDQvdC1INC90LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTcKK21zZ2lkICIoc3lub255bSB0byAtLXN0YXQpIgorbXNnc3RyICIo0YHQuNC90L7QvdC40Lwg0L3QsCDigJ4tLXN0YXTigJwpIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk5Cittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisi0LTQvtCx0LDQstGP0L3QtSAo0L3QsCDQvNCw0LrRgdC40LzRg9C8INGC0LDQutGK0LIg0JHQoNCe0JkpINC30LDQv9C40YHQuCDQvtGCINGB0YrQutGA0LDRgtC10L3QuNGPINC20YPRgNC90LDQuyDQsiDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+ICIKKyLQt9CwINC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDIKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC90LAg0LXQtNC90L4g0L/QvtC00LDQstCw0L3QtSDQstC80LXRgdGC0L4g0LjQt9Cy0YrRgNGI0LLQsNC90LUg0L3QsCDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAi0LjQt9Cy0YrRgNGI0LLQsNC90LUg0L3QsCDQv9C+0LTQsNCy0LDQvdC1INC/0YDQuCDRg9GB0L/QtdGI0L3QviDRgdC70LjQstCw0L3QtSAo0YHRgtCw0L3QtNCw0YDRgtC90L4g0LTQtdC50YHRgtCy0LjQtSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDYKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgItGA0LXQtNCw0LrRgtC40YDQsNC90LUg0L3QsCDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQtdC00Lgg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNworbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgItC/0L7Qt9Cy0L7Qu9GP0LLQsNC90LUg0L3QsCDRgtGA0LjQstC40LDQu9C90L4g0YHQu9C40LLQsNC90LUgKNGB0YLQsNC90LTQsNGA0YLQvdC+INC00LXQudGB0YLQstC40LUpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA5Cittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAi0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1LCDQsNC60L4g0YHQu9C40LLQsNC90LXRgtC+INC90LUg0LUg0YLRgNC40LLQuNCw0LvQvdC+IgorCisjOiBidWlsdGluL21lcmdlLmM6MjEzCittc2dpZCAiVmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwLCDRh9C1INC40LzQtdC90YPQstCw0L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSDQtSDRgSDQv9GA0LDQstC40LvQtdC9INC/0L7QtNC/0LjRgSDQvdCwIEdQRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNCBidWlsdGluL25vdGVzLmM6NzUzIGJ1aWx0aW4vcmV2ZXJ0LmM6ODkKK21zZ2lkICJzdHJhdGVneSIKK21zZ3N0ciAi0YHRgtGA0LDRgtC10LPQuNGPIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE1Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICLRgdGC0YDQsNGC0LXQs9C40Y8g0LfQsCDRgdC70LjQstCw0L3QtSwg0LrQvtGP0YLQviDQtNCwINGB0LUg0L/QvtC70LfQstCwIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE2Cittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICLQvtC/0YbQuNGPPdGB0YLQvtC50L3QvtGB0YIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTcKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLQvtC/0YbQuNGPINC30LAg0LjQt9Cx0YDQsNC90LDRgtCwINGB0YLRgNCw0YLQtdCz0LjRjyDQt9CwINGB0LvQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL21lcmdlLmM6MjE5Cittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICLRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LXRgtC+INGB0YrRgSDRgdC70LjQstCw0L3QtSAo0L/RgNC4INC90LXRgtGA0LjQstC40LDQu9C90Lgg0YHQu9C40LLQsNC90LjRjykiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMjMKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAi0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YLQtdC60YPRidC+0YLQviDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MQorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICLQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDRgdC60LDRgtCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTYKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdC60LDRgtCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C10L0g0L7QsdC10LrRgjog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODAgYnVpbHRpbi9tZXJnZS5jOjI5NworbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQv9GA0L7Rh9C40YLQsNC90LUg0L3QsCDQvtCx0LXQutGCLdC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMjcKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiICjQvdGP0LzQsCDQutCw0LrQstC+INC00LAg0YHQtSDRgdC80LDRh9C60LApIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtSDRgdGK0YEg0YHQvNCw0YfQutCy0LDQvdC1IOKAlCDRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5IRUFE4oCcINC90Y/QvNCwINC00LAg0LHRitC00LUg0L7QsdC90L7QstC10L1cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM3MgorbXNnaWQgIldyaXRpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAi0JfQsNC/0LjRgdCy0LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINGB0LzQsNGH0LrQstCw0L3QtSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzc0Cittc2dpZCAiRmluaXNoaW5nIFNRVUFTSF9NU0ciCittc2dzdHIgItCX0LDQstGK0YDRiNCy0LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINGB0LzQsNGH0LrQstCw0L3QtSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiIgorItCb0LjQv9GB0LLQsCDRgdGK0L7QsdGJ0LXQvdC40LUg0L/RgNC4INC/0L7QtNCw0LLQsNC90LUg4oCUINGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3Rj9C80LAg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvVxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIuKAniVz4oCcINC90LUg0YHQvtGH0Lgg0LrRitC8INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0L3QuNC3INC30LAg0L3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5icmFuY2guJXMubWVyZ2VvcHRpb25z4oCcOiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjYzMgorbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgd3JpdGUtdHJlZeKAnCDQvdC1INGD0YHQv9GPINC00LAg0LfQsNC/0LjRiNC1INC+0LHQtdC60YIt0LTRitGA0LLQviIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY1NgorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgItCf0L7QtNC00YrRgNC20LAg0YHQtSDRgdCw0LzQviDRgdC70LjQstCw0L3QtSDQvdCwINGC0L7Rh9C90L4g0LTQstC1INC40YHRgtC+0YDQuNC4LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICLQndC10L/QvtC30L3QsNGC0LAg0L7Qv9GG0LjRjyDQt9CwINGA0LXQutGD0YDRgdC40LLQvdC+0YLQviDRgdC70LjQstCw0L3QtSDigJ5tZXJnZS1yZWN1cnNpdmXigJw6IOKAni1YJXPigJwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LjRgdCw0L0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICLQntGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGH0LXRgtC1IgorCisjOiBidWlsdGluL21lcmdlLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorItCh0LvQuNCy0LDQvdC10YLQviDQvdGP0LzQsCDQtNCwINCx0YrQtNC1INC/0L7QtNCw0LTQtdC90L4uINCX0LAg0LfQsNCy0YrRgNGI0LLQsNC90LXRgtC+INC80YMg0Lgg0L/QvtC00LDQstCw0L3QtdGC0L4g0LzRgyAiCisi0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGNvbW1pdOKAnC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorIlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyLQkiDRgdGK0L7QsdGJ0LXQvdC40LXRgtC+INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1INC00L7QsdCw0LLQtdGC0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDQv9GA0LjRh9C40L3QsNGC0LAg0LfQsFxuIgorItGB0LvQuNCy0LDQvdC10YLQviwg0L7RgdC+0LHQtdC90L4g0LDQutC+INGB0LvQuNCy0LDRgtC1INC+0LHQvdC+0LLQtdC9INC+0YLQtNCw0LvQtdGH0LXQvSDQutC70L7QvSDQsiDRgtC10LzQsNGC0LjRh9C10L0g0LrQu9C+0L0uXG4iCisiXG4iCisi0KDQtdC00L7QstC10YLQtSwg0LrQvtC40YLQviDQt9Cw0L/QvtGH0LLQsNGCINGBIOKAniVj4oCcINGJ0LUg0LHRitC00LDRgiDQv9GA0L7Qv9GD0YHQvdCw0YLQuCwg0LAg0L/RgNCw0LfQvdC+INGB0YrQvtCx0YnQtdC90LjQtVxuIgorItC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCwINC/0L7QtNCw0LLQsNC90LXRgtC+LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODExCittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICLQn9GA0LDQt9C90L4g0YHRitC+0LHRidC10L3QuNC1INC/0YDQuCDQv9C+0LTQsNCy0LDQvdC1LiIKKworIyBGSVhNRSAtIFdURiBpcyB3b25kZXJmdWwuCisjOiBidWlsdGluL21lcmdlLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAi0J/RitGA0LLQuNGP0YIg0LXRgtCw0L8g0L3QsCDRgtGA0LjQstC40LDQu9C90L7RgtC+INGB0LvQuNCy0LDQvdC1INC30LDQstGK0YDRiNC4LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDRgdC70LjQstCw0L3QtSDigJQg0LrQvtGA0LjQs9C40YDQsNC50YLQtSDQutC+0L3RhNC70LjQutGC0LjRgtC1INC4INC/0L7QtNCw0LnRgtC1INGA0LXQt9GD0LvRgtCw0YLQsC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQtSDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBidWlsdGluL21lcmdlLmM6OTM1Cittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICLQndGP0LzQsCDRgtC10LrRg9GJINC60LvQvtC9LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkzNworbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi0KLQtdC60YPRidC40Y/RgiDQutC70L7QvSDQvdC1INGB0LvQtdC00Lgg0L3QuNC60L7QuS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzkKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgItCi0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g0L3QtSDRgdC70LXQtNC4INC90LjQutC+0Lkg0LrQu9C+0L0uIgorCisjOiBidWlsdGluL21lcmdlLmM6OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgItCd0LjQutC+0Lkg0LrQu9C+0L0g0L3QtSDRgdC70LXQtNC4INC60LvQvtC90LAg4oCeJXPigJwg0L7RgiDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+IOKAniVz4oCcIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LfQsNGC0LLQvtGA0LgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjA4Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICIiCisi0J3QtSDQvNC+0LbQtSDQtNCwINC/0YDQtdGD0YHRgtCw0L3QvtCy0LjRgtC1INGB0LvQuNCy0LDQvdC1LCDQt9Cw0YnQvtGC0L4g0LIg0LzQvtC80LXQvdGC0LAg0L3QtSDRgdC1INC40LfQstGK0YDRiNCy0LAg0YLQsNC60L7QstCwICIKKyIo0LvQuNC/0YHQstCwINGD0LrQsNC30LDRgtC10Lsg4oCeTUVSR0VfSEVBROKAnCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIyNAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLQndC1INGB0YLQtSDQt9Cw0LLRitGA0YjQuNC70Lgg0YHQu9C40LLQsNC90LUuICjQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5NRVJHRV9IRUFE4oCcINGB0YrRidC10YHRgtCy0YPQstCwKS5cbiIKKyLQn9C+0LTQsNC50YLQtSDQv9GA0L7QvNC10L3QuNGC0LUg0YHQuCwg0L/RgNC10LTQuCDQtNCwINC30LDQv9C+0YfQvdC10YLQtSDQvdC+0LLQviDRgdC70LjQstCw0L3QtS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjI3IGdpdC1wdWxsLnNoOjc0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICLQndC1INGB0YLQtSDQt9Cw0LLRitGA0YjQuNC70Lgg0YHQu9C40LLQsNC90LUuICjQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ5NRVJHRV9IRUFE4oCcINGB0YrRidC10YHRgtCy0YPQstCwKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjMxCittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorItCd0LUg0YHRgtC1INC30LDQstGK0YDRiNC40LvQuCDQvtGC0LHQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtSAo0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeQ0hFUlJZX1BJQ0tfSEVBROKAnFxuIgorItGB0YrRidC10YHRgtCy0YPQstCwKS4g0J/QvtC00LDQudGC0LUg0L/RgNC+0LzQtdC90LjRgtC1INGB0LgsINC/0YDQtdC00Lgg0LTQsCDQt9Cw0L/QvtGH0L3QtdGC0LUg0L3QvtCy0L4g0YHQu9C40LLQsNC90LUuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzNAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiIgorItCd0LUg0YHRgtC1INC30LDQstGK0YDRiNC40LvQuCDQvtGC0LHQuNGA0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QtSAo0YPQutCw0LfQsNGC0LXQu9GP0YIg4oCeQ0hFUlJZX1BJQ0tfSEVBROKAnFxuIgorItGB0YrRidC10YHRgtCy0YPQstCwKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjQzCittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAni0tc3F1YXNo4oCcINC1INC90LXRgdGK0LLQvNC10YHRgtC40LzQsCDRgSDigJ4tLW5vLWZm4oCcLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNTEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiIgorItCd0LUg0LUg0YPQutCw0LfQsNC90L4g0L/QvtC00LDQstCw0L3QtSDQuCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnm1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFt4oCcINC90LUg0LUg0LfQsNC00LDQtNC10L3QsC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjY4Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgItCf0L7QtNCw0LLQsNC90LUg0YHRitGBINGB0LzQsNGH0LrQstCw0L3QtSDQstGK0LIg0LLRgNGK0YUg0LHQtdC3INC40YHRgtC+0YDQuNGPINCy0YHQtSDQvtGJ0LUg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjcwCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKyLQn9C+0L3QtdC20LUg0LLRitGA0YXRitGCINC1INCx0LXQtyDQuNGB0YLQvtGA0LjRjywg0LLRgdC40YfQutC4INGB0LvQuNCy0LDQvdC40Y8g0YHQsCDRgtGA0LjQstC40LDQu9C90LgsINC90LUg0LzQvtC20LUg0LTQsCDRgdC1ICIKKyLQuNC30LLRitGA0YjQuCDQvdC10YLRgNC40LLQuNCw0LvQvdC+INGB0LvQuNCy0LDQvdC1INC40LfQuNGB0LrQstCw0L3QviDQvtGCINC+0L/RhtC40Y/RgtCwIOKAni0tbm8tZmbigJwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIuKAniVz4oCcIOKAlCDQvdC1INC1INC90LXRidC+LCDQutC+0LXRgtC+INC80L7QttC1INC00LAg0YHQtSDRgdC70LXQtSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNzgKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICLQnNC+0LbQtdGC0LUg0LTQsCDRgdC70LXQtdGC0LUg0YLQvtGH0L3QviDQtdC00L3QviDQv9C+0LTQsNCy0LDQvdC1INCy0YrQsiDQstGA0YrRhSDQsdC10Lcg0LjRgdGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiIKKyLQn9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQtSDRgSDQvdC10LTQvtCy0LXRgNC10L0g0L/QvtC00L/QuNGBINC+0YIgR1BHLCDQutC+0LnRgtC+INGC0LLRitGA0LTQuCwg0YfQtSDQtSDQvdCwIOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiIKKyLQn9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQtSDRgSDQvdC10L/RgNCw0LLQuNC70LXQvSDQv9C+0LTQv9C40YEg0L7RgiBHUEcsINC60L7QudGC0L4g0YLQstGK0YDQtNC4LCDRh9C1INC1INC90LAg4oCeJXPigJwuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQtSDQsdC10Lcg0L/QvtC00L/QuNGBINC+0YIgR1BHLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSBieSAlc1xuIgorbXNnc3RyICLQn9C+0LTQsNCy0LDQvdC10YLQviDigJ4lc+KAnCDQtSDRgSDQutC+0YDQtdC60YLQtdC9INC/0L7QtNC/0LjRgSDQvtGCIEdQRyDQvdCwIOKAniVz4oCcLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQyMworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAi0J7QsdC90L7QstGP0LLQsNC90LUg4oCeJXMuLiVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICLQn9GA0L7QsdCwINGBINC90LDQuS3RgtGA0LjQstC40LDQu9C90L7RgtC+INGB0LvQuNCy0LDQvdC1INCyINGA0LDQvNC60LjRgtC1INC90LAg0LjQvdC00LXQutGB0LDigKZcbiIKKworIyBGSVhNRSBXVEYgbWVzc2FnZQorIzogYnVpbHRpbi9tZXJnZS5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGB0LvQuNCy0LDQvdC1LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUwMQorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4INGC0YDQuNCy0LjQsNC70L3QviDRgdC70LjQstCw0L3QtSwg0L/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LTQtdC50YHRgtCy0LjQtdGC0L4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUyNCBidWlsdGluL21lcmdlLmM6MTYwMworIywgYy1mb3JtYXQKK21zZ2lkICJSZXdpbmRpbmcgdGhlIHRyZWUgdG8gcHJpc3RpbmUuLi5cbiIKK21zZ3N0ciAi0J/RgNC40LLQtdC20LTQsNC90LUg0L3QsCDQtNGK0YDQstC+0YLQviDQutGK0Lwg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQvuKAplxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAi0J/RgNC+0LHQstCw0L3QtSDRgdGK0YEg0YHRgtGA0LDRgtC10LPQuNGP0YLQsCDQt9CwINGB0LvQuNCy0LDQvdC1IOKAniVz4oCc4oCmXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICLQndC40LrQvtGPINGB0YLRgNCw0YLQtdCz0LjRjyDQt9CwINGB0LvQuNCy0LDQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQuNC30LLRitGA0YjQuCDRgdC70LjQstCw0L3QtdGC0L4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHQu9C40LLQsNC90LUg0YHRitGBINGB0YLRgNCw0YLQtdCz0LjRjyDigJ4lc+KAnC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIiIKKyLQn9C+0LvQt9Cy0LAg0YHQtSDRgdGC0YDQsNGC0LXQs9C40Y/RgtCwIOKAniVz4oCcLCDQutC+0Y/RgtC+INGJ0LUg0L/QvtC00LPQvtGC0LLQuCDQtNGK0YDQstC+0YLQviDQt9CwINC60L7RgNC40LPQuNGA0LDQvdC1INC90LAgIgorItGA0YrQutCwLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisi0JDQstGC0L7QvNCw0YLQuNGH0L3QvtGC0L4g0YHQu9C40LLQsNC90LUg0LfQsNCy0YrRgNGI0Lgg0YPRgdC/0LXRiNC90L4uINCh0LDQvNC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INC90LUg0LUg0LjQt9Cy0YrRgNGI0LXQvdC+LCAiCisi0LfQsNGJ0L7RgtC+INCx0LUg0LfQsNC00LDQtNC10L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLW5vLWNvbW1pdOKAnC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjkKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSDQn9Ce0JTQkNCS0JDQndCVINCf0J7QlNCQ0JLQkNCd0JXigKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMwCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyDQn9Ce0JTQkNCS0JDQndCV4oCmIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQg0J/QntCU0JDQktCQ0J3QleKApiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yINCf0J7QlNCQ0JLQkNCd0JVfMSDQn9Ce0JTQkNCS0JDQndCVXzIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCDQo9Ca0JDQl9CQ0KLQldCbIFvQn9Ce0JTQkNCS0JDQndCVXSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE0Cittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L7QsdGJ0Lgg0L/RgNC10LTRiNC10YHRgtCy0LXQvdC40YbQuCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE2Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICIiCisi0L7RgtC60YDQuNCy0LDQvdC1INC90LAg0L/RgNC10LTRiNC10YHRgtCy0LXQvdC40YbQuNGC0LUg0LfQsCDQtdC00L3QvtC60YDQsNGC0L3QviDRgdC70LjQstCw0L3QtSDQvdCwINC80L3QvtC20LXRgdGC0LLQviDQuNGB0YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE4Cittc2dpZCAibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LXQtNC+0YHRgtC40LbQuNC80LjRgtC1INC+0YIg0LTRgNGD0LPQuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjAKK21zZ2lkICJpcyB0aGUgZmlyc3Qgb25lIGFuY2VzdG9yIG9mIHRoZSBvdGhlcj8iCittc2dzdHIgItCf0J7QlNCQ0JLQkNCd0JVfMSDQv9GA0LXQtNGI0LXRgdGC0LLQtdC90LjQuiDQu9C4INC1INC90LAg0J/QntCU0JDQktCQ0J3QlV8yPyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjIyCittc2dpZCAiZmluZCB3aGVyZSA8Y29tbWl0PiBmb3JrZWQgZnJvbSByZWZsb2cgb2YgPHJlZj4iCittc2dzdHIgItC+0YLQutGA0LjQstCw0L3QtSDQutGK0LTQtSDQn9Ce0JTQkNCS0JDQndCV0YLQviDRgdC1INC1INC+0YLQutC70L7QvdC40LvQviDQvtGCINC40YHRgtC+0YDQuNGP0YLQsCDQvdCwINCj0JrQkNCX0JDQotCV0JvRjyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6OAorbXNnaWQgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5hbWUxPiBbLUwgPG9yaWc+IFstTCA8bmFtZTI+XV1dIDxmaWxlMT4gIgorIjxvcmlnLWZpbGU+IDxmaWxlMj4iCittc2dzdHIgIiIKKyJnaXQgbWVyZ2UtZmlsZSBb0J7Qn9Cm0JjQr+KApl0gWy1MINCY0JzQlV8xIFstTCDQntCg0JjQk9CY0J3QkNCbIFstTCDQmNCc0JVfMl1dXSDQpNCQ0JnQm18xINCe0KDQmNCTX9Ck0JDQmdCbICIKKyLQpNCQ0JnQm18yIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozMworbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGA0LXQt9GD0LvRgtCw0YLQuNGC0LUg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINC40LfRhdC+0LQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM0Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgItGB0LvQuNCy0LDQvdC1INC90LAg0LHQsNC30LDRgtCwINC90LAg4oCeZGlmZjPigJwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM1Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICLQv9GA0Lgg0LrQvtC90YTQu9C40LrRgtC4INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0LvQvtC60LDQu9C90LDRgtCwINCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAi0L/RgNC4INC60L7QvdGE0LvQuNC60YLQuCDQtNCwINGB0LUg0L/QvtC70LfQstCwINGH0YPQttC00LDRgtCwINCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICLQv9GA0Lgg0LrQvtC90YTQu9C40LrRgtC4INC00LAg0YHQtSDQv9C+0LvQt9Cy0LAg0L7QsdC10LTQuNC90LXQvdCwINCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDIKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAi0L/RgNC4INC60L7QvdGE0LvQuNC60YLQuCDQtNCwINGB0LUg0L/QvtC70LfQstCwINC80LDRgNC60LXRgCDRgSDRgtCw0LrRitCyINCR0KDQntCZINC30L3QsNGG0LgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQzCittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICLQsdC10Lcg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjRjyDQv9GA0Lgg0LrQvtC90YTQu9C40LrRgtC4IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAi0LfQsNC00LDQstCw0L3QtSDQvdCwINC10YLQuNC60LXRgtC4INC30LAg0KTQkNCZ0JtfMS/QntCg0JjQk9CY0J3QkNCbL9Ck0JDQmdCbXzIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjQKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICLQstGF0L7QtNC90LjRgtC1INC30LDQv9C40YHQuCDRgdCwINGA0LDQt9C00LXQu9C10L3QuCDRgSDQvdGD0LvQtdCy0LjRjyDQt9C90LDQuiDigJ5OVUzigJwiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUxIGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI0Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICLRgNCw0LfRgNC10YjQsNCy0LDQvdC1INC90LAg0LvQuNC/0YHQstCw0YnQuCDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUyCittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICLRgNCw0LfRgNC10YjQsNCy0LDQvdC1INC90LAg0YHRitC30LTQsNCy0LDQvdC10YLQviDQvdCwINC/0L7QstC10YfQtSDQvtGCINC10LTQvdC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxNQorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgW9Ce0J/QptCY0K/igKZdINCe0JHQldCa0KLigKYg0KbQldCbIgorCisjIEZJWE1FIG1lc3NhZ2U8CisjOiBidWlsdGluL212LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICLQlNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0LUg0LIg0LjQvdC00LXQutGB0LAsINC90L4g0L3QtSDQtSDQv9C+0LTQvNC+0LTRg9C7IgorCisjOiBidWlsdGluL212LmM6NzEKK21zZ2lkICJQbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorItCX0LAg0LTQsCDQv9GA0L7QtNGK0LvQttC40YLQtSwg0LjQu9C4INCy0LrQsNGA0LDQudGC0LUg0L/RgNC+0LzQtdC90LjRgtC1INC/0L4g0YTQsNC50LvQsCDigJ4uZ2l0bW9kdWxlc+KAnCDQsiDQuNC90LTQtdC60YHQsCxcbiIKKyLQuNC70Lgg0LPQuCDRgdC60LDRgtCw0LnRgtC1IgorCisjIEZJWE1FIG1lc3NhZ2UKKyM6IGJ1aWx0aW4vbXYuYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICIlLipzIGlzIGluIGluZGV4IgorbXNnc3RyICLigJ4lLipz4oCcINCy0LXRh9C1INC1INCyINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL212LmM6MTExCittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L/RgNC10LzQtdGB0YLQstCw0L3QtS/Qv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0LTQvtGA0Lgg0YbQtdC70YLQsCDQtNCwINGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBidWlsdGluL212LmM6MTEyCittc2dpZCAic2tpcCBtb3ZlL3JlbmFtZSBlcnJvcnMiCittc2dzdHIgItC/0YDQtdGB0LrQsNGH0LDQvdC1INC90LAg0LPRgNC10YjQutC40YLQtSDQv9GA0Lgg0L/RgNC10LzQtdGB0YLQstCw0L3QtS/Qv9GA0LXQuNC80LXQvdGD0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gJyVzJyBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgItGG0LXQu9GC0LAg4oCeJXPigJwg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0Lgg0L3QtSDQtSDQtNC40YDQtdC60YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9tdi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0L3QsCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LXRgtC+INC90LAg0L7QsdC10LrRgiDQvtGCIOKAniVz4oCcINC90LAg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9tdi5jOjE2NgorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INC+0LHQtdC60YIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRjyDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQvNC10YHRgtC4INCyINGB0LXQsdC1INGB0LgiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzIKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRjyDQvdC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQvNC10YHRgtC4INCy0YrRgNGF0YMg0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODEKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICLQv9GK0YDQstC+0L3QsNGH0LDQu9C90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC1INC/0YDQsNC30L3QsCIKKworIzogYnVpbHRpbi9tdi5jOjIwNgorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgItC90LUg0LUg0L/QvtC0INC60L7QvdGC0YDQvtC70LAg0L3QsCBHaXQiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMDkKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgItGG0LXQu9GC0LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAi0L/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjAKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICLQn9GA0LXQt9Cw0L/QuNGB0LLQsNC90LXRgtC+INC1INC90LXQstGK0LfQvNC+0LbQvdC+IgorCisjOiBidWlsdGluL212LmM6MjIzCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICLQvNC90L7QttC10YHRgtCy0L4g0LjQt9GC0L7Rh9C90LjRhtC4INC30LAg0LXQtNC90LAg0YbQtdC7IgorCisjOiBidWlsdGluL212LmM6MjI1Cittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLRhtC10LvQtdCy0LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC90LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCDQvtCx0LXQutGCOiDigJ4lc+KAnCwg0YbQtdC7OiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9tdi5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICLQn9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDigJ4lc+KAnCDQvdCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTYgYnVpbHRpbi9yZW1vdGUuYzo3MjUgYnVpbHRpbi9yZXBhY2suYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjI1NQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFvQntCf0KbQmNCv4oCmXSDQn9Ce0JTQkNCS0JDQndCV4oCmIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjU2Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgW9Ce0J/QptCY0K/igKZdIC0tYWxsIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjU3Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgImdpdCBuYW1lLXJldiBb0J7Qn9Cm0JjQr+KApl0gLS1zdGRpbiIKKworIyBGSVhNRSBzaGEKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMDkKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC40LzQtdC90LDRgtCwICjQsdC10Lcg0YHRg9C80LjRgtC1INC/0L4gU0hBMSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTAKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INGB0LDQvNC+INC90LAg0LXRgtC40LrQtdGC0LjRgtC1INC30LAg0LjQvNC10L3Rg9Cy0LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxMgorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDRgdCw0LzQviDQvdCwINGI0LDQsdC70L7QvdC40YLQtSDQvdCw0L/QsNGB0LLQsNGJ0Lgg0L3QsCDQqNCQ0JHQm9Ce0J3QsCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxNAorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0L/QvtC00LDQstCw0L3QuNGPLCDQutC+0LjRgtC+INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC00L7RgdGC0LjQs9C90LDRgtC4INC+0YIg0LLRgdC40YfQutC4ICIKKyLRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTUKK21zZ2lkICJyZWFkIGZyb20gc3RkaW4iCittc2dzdHIgItGH0LXRgtC10L3QtSDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTYKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgItC00LAg0YHQtSDQuNC30LLQtdC20LTQsNGCINC4INC90LXQtNC10YTQuNC90LjRgNCw0L3QuNGC0LUg0LjQvNC10L3QsCAo0YHRgtCw0L3QtNCw0YDRgtC90LAg0YHRgtC+0LnQvdC+0YHRgiDQvdCwINC+0L/RhtC40Y/RgtCwKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMyMgorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNC40YLQtSDQvdCwINC+0LHQtdC60YLQuC3QtdGC0LjQutC10YLQuCAo0LfQsCDQstGK0YLRgNC10YjQvdC4INC90YPQttC00LgpIgorCisjOiBidWlsdGluL25vdGVzLmM6MjQKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIFtsaXN0IFvQntCR0JXQmtCiXV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYg0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQXSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tINCh0KrQntCR0KnQldCd0JjQlSAiCisifCAtRiDQpNCQ0JnQmyB8ICgtYyB8IC1DKSDQntCR0JXQmtCiXSBb0J7QkdCV0JrQol0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNgorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGNvcHkgWy1mXSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIGNvcHkgWy1mXSDQntCR0JXQmtCiX9CY0JfQotCe0KfQndCY0Jog0J7QkdCV0JrQol/QptCV0JsiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNworbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiB8ICIKKyIoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmINCj0JrQkNCX0JDQotCV0Jtf0JfQkF/QkdCV0JvQldCW0JrQkF0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0g0KHQqtCe0JHQqdCV0J3QmNCVIHwgIgorIi1GINCk0JDQmdCbIHwgKC1jIHwgLUMpINCe0JHQldCa0KJdIFvQntCR0JXQmtCiXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIGVkaXQgWy0tYWxsb3ctZW1wdHldIFvQntCR0JXQmtCiXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmINCj0JrQkNCX0JDQotCV0Jtf0JfQkF/QkdCV0JvQldCW0JrQkF0gc2hvdyBb0J7QkdCV0JrQol0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JBdIG1lcmdlIFstdiB8IC1xXSBbLXMg0KHQotCg0JDQotCV0JPQmNCvXSAiCisi0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQIgorCisjOiBidWlsdGluL25vdGVzLmM6MzEKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYg0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQXSByZW1vdmUgW9Ce0JHQldCa0KLigKZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW4gfCAtdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYg0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQXSBwcnVuZSBbLW4gfCAtdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYg0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQXSBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6NDAKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbbGlzdCBb0J7QkdCV0JrQol1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDUKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgW9Ce0J/QptCY0K/igKZdIFvQntCR0JXQmtCiXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUwCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgW9Ce0J/QptCY0K/igKZdINCe0JHQldCa0KJf0JjQl9Ci0J7Qp9Cd0JjQmiDQntCR0JXQmtCiX9Cm0JXQmyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gW9Ce0JHQldCa0KJf0JjQl9Ci0J7Qp9Cd0JjQmiDQntCR0JXQmtCiX9Cm0JXQm13igKYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NgorbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBb0J7Qn9Cm0JjQr+KApl0gW9Ce0JHQldCa0KJdIgorCisjOiBidWlsdGluL25vdGVzLmM6NjEKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBb0J7QkdCV0JrQol0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NgorbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFvQntCR0JXQmtCiXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcxCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgW9Ce0J/QptCY0K/igKZdINCj0JrQkNCX0JDQotCV0Jtf0JfQkF/QkdCV0JvQldCW0JrQkCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL25vdGVzLmM6NzMKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL25vdGVzLmM6NzgKK21zZ2lkICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyByZW1vdmUgW9Ce0JHQldCa0KJdIgorCisjOiBidWlsdGluL25vdGVzLmM6ODMKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OAorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAi0LTQtdC50YHRgtCy0LjQtdGC0L4g4oCec2hvd+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30L/RitC70L3QuCDQt9CwINC+0LHQtdC60YIg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTAKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICLQuNC30LLQtdC00LXQvdCw0YLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQvtGCINC00LXQudGB0YLQstC40LXRgtC+IOKAnnNob3figJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC+0YfQtdGC0LUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC10YLQviDigJ5zaG934oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC30LDQstGK0YDRiNC4INC30LAg0L7QsdC10LrRgiDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE3MyBidWlsdGluL3RhZy5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC9IgorCisjOiBidWlsdGluL25vdGVzLmM6MTkyCittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICLQl9Cw0LTQsNC50YLQtSDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQsdC10LvQtdC20LrQsNGC0LAg0YEg0L3Rj9C60L7RjyDQvtGCINC+0L/RhtC40LjRgtC1IOKAni1t4oCcINC40LvQuCDigJ4tRuKAnCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwMQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAi0L7QsdC10LrRgtGK0YIt0LHQtdC70LXQttC60LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC9IgorCisjOiBidWlsdGluL25vdGVzLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBub3RlIGNvbnRlbnRzIGhhdmUgYmVlbiBsZWZ0IGluICVzIgorbXNnc3RyICLQodGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQsdC10LvQtdC20LrQsNGC0LAg0LUg0LLRitCyINGE0LDQudC70LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMzEgYnVpbHRpbi90YWcuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL25vdGVzLmM6MjMzIGJ1aWx0aW4vdGFnLmM6Njk2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LLQvtGA0LXQvSDQuNC70Lgg0L/RgNC+0YfQtdGC0LXQvSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1MiBidWlsdGluL25vdGVzLmM6MzAzIGJ1aWx0aW4vbm90ZXMuYzozMDUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNjUgYnVpbHRpbi9ub3Rlcy5jOjQyMCBidWlsdGluL25vdGVzLmM6NTA2CisjOiBidWlsdGluL25vdGVzLmM6NTExIGJ1aWx0aW4vbm90ZXMuYzo1ODkgYnVpbHRpbi9ub3Rlcy5jOjY1MgorIzogYnVpbHRpbi9ub3Rlcy5jOjg1NCBidWlsdGluL3RhZy5jOjcwOQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L7RgtC60YDQuNC1INC60YrQvCDQutCw0LrQstC+INGB0L7Rh9C4IOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgItCe0LHQtdC60YLRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9LiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKyLQodGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDQsdC10LvQtdC20LrQsCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQstC30LXQvNC1INC+0YIg0L7QsdC10LrRgiwg0LrQvtC50YLQviDQvdC1INC1IEJMT0I6IOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5OQorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgItCU0LDQtNC10L3QuNGP0YIg0LLRhdC+0LTQtdC9INGA0LXQtCDQtSDRgSDQvdC10L/RgNCw0LLQuNC70LXQvSDRhNC+0YDQvNCw0YI6IOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxNAorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAi0JHQtdC70LXQttC60LDRgtCwINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC60L7Qv9C40YDQsCDQvtGCIOKAniVz4oCcINC60YrQvCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1OCBidWlsdGluL25vdGVzLmM6NDEzIGJ1aWx0aW4vbm90ZXMuYzo0ODkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDEgYnVpbHRpbi9ub3Rlcy5jOjU3NyBidWlsdGluL25vdGVzLmM6NjQ1CisjOiBidWlsdGluL25vdGVzLmM6OTE5Cittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC80L3QvtCz0L4g0L/QsNGA0LDQvNC10YLRgNC4IgorCisjOiBidWlsdGluL25vdGVzLmM6MzcxIGJ1aWx0aW4vbm90ZXMuYzo2NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAi0J3Rj9C80LAg0LHQtdC70LXQttC60Lgg0LfQsCDQvtCx0LXQutGC0LAg4oCeJXPigJwuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzkyIGJ1aWx0aW4vbm90ZXMuYzo1NTUKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICLQvdC40LcsINC60L7QudGC0L4g0LUg0YHRitC00YrRgNC20LDQvdC40LXRgtC+INC90LAg0LHQtdC70LXQttC60LDRgtCwIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzk1IGJ1aWx0aW4vbm90ZXMuYzo1NTgKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAi0YTQsNC50Lsg0YHRitGBINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINCx0LXQu9C10LbQutCw0YLQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5NyBidWlsdGluL25vdGVzLmM6NDAwIGJ1aWx0aW4vbm90ZXMuYzo1NjAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NjMgYnVpbHRpbi90YWcuYzo2MjgKK21zZ2lkICJvYmplY3QiCittc2dzdHIgItC+0LHQtdC60YIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTggYnVpbHRpbi9ub3Rlcy5jOjU2MQorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAi0L/RgNC10LjQt9C/0L7Qu9C30LLQsNC90LUg0Lgg0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINGD0LrQsNC30LDQvdC40Y8g0L7QsdC10LrRgi3QsdC10LvQtdC20LrQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwMSBidWlsdGluL25vdGVzLmM6NTY0Cittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGD0LrQsNC30LDQvdC40Y8g0L7QsdC10LrRgi3QsdC10LvQtdC20LrQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwNCBidWlsdGluL25vdGVzLmM6NTY3Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICLQv9GA0LjQtdC80LDQvdC1INC4INC90LAg0L/RgNCw0LfQvdC4INCx0LXQu9C10LbQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6NDA1IGJ1aWx0aW4vbm90ZXMuYzo0NzYKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLQt9Cw0LzRj9C90LAg0L3QsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0LjRgtC1INCx0LXQu9C10LbQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6NDMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LTQvtCx0LDQstC4INCx0LXQu9C10LbQutCwLCDQt9Cw0YnQvtGC0L4g0YLQsNC60LDQstCwINCy0LXRh9C1INGB0YrRidC10YHRgtCy0YPQstCwINC30LAg0L7QsdC10LrRgtCwIOKAniVz4oCcLiAiCisi0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tZuKAnCwg0LfQsCDQtNCwINC/0YDQtdC30LDQv9C40YjQtdGC0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC4INCx0LXQu9C10LbQutC4LiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ0NSBidWlsdGluL25vdGVzLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAi0J/RgNC10LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC40YLQtSDQsdC10LvQtdC20LrQuCDQt9CwINC+0LHQtdC60YLQsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDU2IGJ1aWx0aW4vbm90ZXMuYzo2MTcgYnVpbHRpbi9ub3Rlcy5jOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LHQtdC70LXQttC60LDRgtCwINC30LAg0L7QsdC10LrRgtCwIOKAniVz4oCcXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NzcKK21zZ2lkICJyZWFkIG9iamVjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0IgorCisjIEZJWE1FIGltcG9ydmUgbWVzc2FnZQorIzogYnVpbHRpbi9ub3Rlcy5jOjQ3OQorbXNnaWQgImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzIC0tc3RkaW4pIgorbXNnc3RyICIiCisi0LfQsNGA0LXQttC00LDQvdC1INC90LAg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDQt9CwINCa0J7QnNCQ0J3QlNCQ0YLQsCwg0LrQvtGP0YLQviDQv9GA0LXQt9Cw0L/QuNGB0LLQsCDQv9C+0LTQsNCy0LDQvdC40Y8gKNCy0LrQu9GO0YfQstCwICIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLXN0ZGlu4oCcKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5NworbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAi0L/RgNC10LrQsNC70LXQvdC+INC80LDQu9C60L4g0L/QsNGA0LDQvNC10YLRgNC4IgorCisjOiBidWlsdGluL25vdGVzLmM6NTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC60L7Qv9C40YDQsCDQsdC10LvQtdC20LrQsCwg0LfQsNGJ0L7RgtC+INGC0LDQutCw0LLQsCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQt9CwINC+0LHQtdC60YLQsCDigJ4lc+KAnC4gIgorItCY0LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLWbigJwsINC30LAg0LTQsCDQv9GA0LXQt9Cw0L/QuNGI0LXRgtC1INGB0YrRidC10YHRgtCy0YPQstCw0YnQuCDQsdC10LvQtdC20LrQuC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIiIKKyLQndC1INC80L7QttC1INC00LAg0YHQtSDQutC+0L/QuNGA0LAg0LHQtdC70LXQttC60LAsINC60L7Rj9GC0L4g0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDigJQg0L3Rj9C80LAg0LHQtdC70LXQttC60Lgg0LfQsCDQvtCx0LXQutGC0LAtIgorItC40LfRgtC+0YfQvdC40Log4oCeJXPigJwuIgorCisjOiBidWlsdGluL25vdGVzLmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyLQl9Cw0LTQsNCy0LDQvdC10YLQviDQvdCwINC+0L/RhtC40LjRgtC1IOKAni1t4oCcL+KAni1G4oCcL+KAni1j4oCcL+KAni1D4oCcINGBINC60L7QvNCw0L3QtNCw0YLQsCDigJ5lZGl04oCcINCy0LXRh9C1INC1ICIKKyLQvtGB0YLQsNGA0Y/Qu9C+LlxuIgorItCS0LzQtdGB0YLQviDRgtC+0LLQsCDQs9C4INC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0YEg0LrQvtC80LDQvdC00LDRgtCwIOKAnmFkZOKAnDog4oCeZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tIgorIkPigJwuXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NTAKIG1zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCi1tc2dzdHIgItCe0LHRidC4INC90LDRgdGC0YDQvtC50LrQuCIKK21zZ3N0ciAi0J7QsdGJ0Lgg0L7Qv9GG0LjQuCIKIAotIzogZ2l0azoxMTM5OAotbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKLW1zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgtC10LzQsCDQt9CwINCz0YDQsNGE0LjRh9C90LjRgtC1INC+0LHQtdC60YLQuCIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NTIKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICLQntC/0YbQuNC4INC/0YDQuCDRgdC70LjQstCw0L3QtSIKIAotIzogZ2l0azoxMTQwMAotbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCi1tc2dzdHIgIijQv9GA0L7QvNGP0L3QsNGC0LAg0LjQt9C40YHQutCy0LAg0YDQtdGB0YLQsNGA0YLQuNGA0LDQvdC1INC90LAgR2l0aykiCi0KLSM6IGdpdGs6MTE0MDIKLW1zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKLW1zZ3N0ciAiKNCyINC80L7QvNC10L3RgtCwINC90LXQtNC+0YHRgtGK0L/QvdC+KSIKLQotIzogZ2l0azoxMTQxMwotbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgotbXNnc3RyICLQptCy0LXRgtC+0LLQtTog0LjQt9Cx0LjRgNCwINGB0LUg0YEg0L3QsNGC0LjRgdC60LDQvdC1IgotCi0jOiBnaXRrOjExNDE2Ci1tc2dpZCAiSW50ZXJmYWNlIgotbXNnc3RyICLQmNC90YLQtdGA0YTQtdC50YEiCi0KLSM6IGdpdGs6MTE0MTcKLW1zZ2lkICJpbnRlcmZhY2UiCi1tc2dzdHIgItC40L3RgtC10YDRhNC10LnRgSIKLQotIzogZ2l0azoxMTQyMAotbXNnaWQgIkJhY2tncm91bmQiCi1tc2dzdHIgItCk0L7QvSIKLQotIzogZ2l0azoxMTQyMSBnaXRrOjExNDUxCi1tc2dpZCAiYmFja2dyb3VuZCIKLW1zZ3N0ciAi0YTQvtC9IgotCi0jOiBnaXRrOjExNDI0Ci1tc2dpZCAiRm9yZWdyb3VuZCIKLW1zZ3N0ciAi0JfQvdCw0YbQuCIKLQotIzogZ2l0azoxMTQyNQotbXNnaWQgImZvcmVncm91bmQiCi1tc2dzdHIgItC30L3QsNGG0LgiCi0KLSM6IGdpdGs6MTE0MjgKLW1zZ2lkICJEaWZmOiBvbGQgbGluZXMiCi1tc2dzdHIgItCg0LDQt9C70LjQutCwOiDRgdGC0LDRgNC4INGA0LXQtNC+0LLQtSIKLQotIzogZ2l0azoxMTQyOQotbXNnaWQgImRpZmYgb2xkIGxpbmVzIgotbXNnc3RyICLRgNCw0LfQu9C40LrQsCwg0YHRgtCw0YDQuCDRgNC10LTQvtCy0LUiCi0KLSM6IGdpdGs6MTE0MzMKLW1zZ2lkICJEaWZmOiBuZXcgbGluZXMiCi1tc2dzdHIgItCg0LDQt9C70LjQutCwOiDQvdC+0LLQuCDRgNC10LTQvtCy0LUiCi0KLSM6IGdpdGs6MTE0MzQKLW1zZ2lkICJkaWZmIG5ldyBsaW5lcyIKLW1zZ3N0ciAi0YDQsNC30LvQuNC60LAsINC90L7QstC4INGA0LXQtNC+0LLQtSIKLQotIzogZ2l0azoxMTQzOAotbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgotbXNnc3RyICLQoNCw0LfQu9C40LrQsDog0L3QsNGH0LDQu9C+INC90LAg0L/QsNGA0YfQtSIKLQotIzogZ2l0azoxMTQ0MAotbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCi1tc2dzdHIgItGA0LDQt9C70LjQutCwLCDQvdCw0YfQsNC70L4g0L3QsCDQv9Cw0YDRh9C1IgotCi0jOiBnaXRrOjExNDQ0Ci1tc2dpZCAiTWFya2VkIGxpbmUgYmciCi1tc2dzdHIgItCk0L7QvSDQvdCwINC+0YLQsdC10LvRj9C30LDQvSDRgNC10LQiCi0KLSM6IGdpdGs6MTE0NDYKLW1zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgotbXNnc3RyICLRhNC+0L0g0L3QsCDQvtGC0LHQtdC70Y/Qt9Cw0L0g0YDQtdC0IgotCi0jOiBnaXRrOjExNDUwCi1tc2dpZCAiU2VsZWN0IGJnIgotbXNnc3RyICLQmNC30LHQvtGAINC90LAg0YTQvtC9IgotCi0jOiBnaXRrOjExNDU5Ci1tc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKLW1zZ3N0ciAi0KjRgNC40YTRgtC+0LLQtTog0LjQt9Cx0LjRgNCwINGB0LUg0YEg0L3QsNGC0LjRgdC60LDQvdC1IgotCi0jOiBnaXRrOjExNDYxCi1tc2dpZCAiTWFpbiBmb250IgotbXNnc3RyICLQntGB0L3QvtCy0LXQvSDRiNGA0LjRhNGCIgotCi0jOiBnaXRrOjExNDYyCi1tc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCi1tc2dzdHIgItCo0YDQuNGE0YIg0LfQsCDRgNCw0LfQu9C40LrQuNGC0LUiCi0KLSM6IGdpdGs6MTE0NjMKLW1zZ2lkICJVc2VyIGludGVyZmFjZSBmb250IgotbXNnc3RyICLQqNGA0LjRhNGCINC90LAg0LjQvdGC0LXRgNGE0LXQudGB0LAiCi0KLSM6IGdpdGs6MTE0ODUKLW1zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgotbXNnc3RyICLQndCw0YHRgtGA0L7QudC60Lgg0L3QsCBHaXRrIgotCi0jOiBnaXRrOjExNDk0Ci1tc2dpZCAiR2VuZXJhbCIKLW1zZ3N0ciAi0J7QsdGJ0LgiCi0KLSM6IGdpdGs6MTE0OTUKLW1zZ2lkICJDb2xvcnMiCi1tc2dzdHIgItCm0LLQtdGC0L7QstC1IgotCi0jOiBnaXRrOjExNDk2Ci1tc2dpZCAiRm9udHMiCi1tc2dzdHIgItCo0YDQuNGE0YLQvtCy0LUiCi0KLSM6IGdpdGs6MTE1NDYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJHaXRrOiBjaG9vc2UgY29sb3IgZm9yICVzIgotbXNnc3RyICJHaXRrOiDQuNC30LHQvtGAINC90LAg0YbQstGP0YIg0L3QsCDigJ4lc+KAnCIKLQotIzogZ2l0azoxMjA1OQorIzogYnVpbHRpbi9ub3Rlcy5jOjc1NAogbXNnaWQgIiIKLSJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKLSIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCiBtc2dzdHIgIiIKLSLQotCw0LfQuCDQstC10YDRgdC40Y8g0L3QsCBUY2wvVGsg0L3QtSDRgdC1INC/0L7QtNC00YrRgNC20LAg0L7RgiBHaXRrLlxuIgotIiDQndC10L7QsdGF0L7QtNC40LzQsCDQstC4INC1INC/0L7QvdC1IFRjbC9UayA4LjQuIgorItC60L7RgNC40LPQuNGA0LDQvdC1INC90LAg0LrQvtC90YTQu9C40LrRgtC40YLQtSDQv9GA0Lgg0YHQu9C40LLQsNC90LUg0L3QsCDQsdC10LvQtdC20LrQuNGC0LUg0YfRgNC10Lcg0YLQsNC30Lgg0YHRgtGA0LDRgtC10LPQuNGPIOKAlCAiCisi4oCebWFudWFs4oCcICjRgNGK0YfQvdC+KSwg4oCeb3Vyc+KAnCAo0LLQsNGI0LDRgtCwINCy0LXRgNGB0LjRjyksIOKAnnRoZWlyc+KAnCAo0YfRg9C20LTQsNGC0LAg0LLQtdGA0YHQuNGPKSwgIgorIuKAnnVuaW9u4oCcICjQvtCx0LXQtNC40L3Rj9Cy0LDQvdC1KSwg4oCeY2F0X3NvcnRfdW5pceKAnCAo0L7QsdC10LTQuNC90Y/QstCw0L3QtSwg0L/QvtC00YDQtdC20LTQsNC90LUsINGD0L3QuNC60LDQu9C90LggIgorItGA0LXQt9GD0LvRgtCw0YLQuCkiCiAKLSM6IGdpdGs6MTIyNjkKLW1zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgotbXNnc3RyICLQotGD0Log0LvQuNC/0YHQstCwINGF0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdC4iCisjOiBidWlsdGluL25vdGVzLmM6NzU2Cittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtSDQvdCwINC90LXRgdC70LXRgtC4INCx0LXQu9C10LbQutC4IgogCi0jOiBnaXRrOjEyMzE2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgotbXNnc3RyICLQndC10LXQtNC90L7Qt9C90LDRh9C10L0g0LDRgNCz0YPQvNC10L3RgiDigJ4lc+KAnDog0LjQvNCwINC4INGC0LDQutCw0LLQsCDQstC10YDRgdC40Y8sINC4INGC0LDQutGK0LIg0YTQsNC50LsiCisjOiBidWlsdGluL25vdGVzLmM6NzU4Cittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAi0LfQsNCy0YrRgNGI0LLQsNC90LUg0L3QsCDRgdC70LjQstCw0L3QtdGC0L4g0YfRgNC10Lcg0L/QvtC00LDQstCw0L3QtSDQvdCwINC90LXRgdC70LXRgtC4INCx0LXQu9C10LbQutC4IgogCi0jOiBnaXRrOjEyMzI4Ci1tc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKLW1zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90Lgg0LDRgNCz0YPQvNC10L3RgtC4INC90LAgZ2l0azoiCisjOiBidWlsdGluL25vdGVzLmM6NzYwCittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAi0J/RgNC10YPRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LrQvtGA0LXQutGG0LjRj9GC0LAg0L/RgNC4INGB0LvQuNCy0LDQvdC10YLQviDQvdCwINCx0LXQu9C10LbQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6NzYyCittc2dpZCAiYWJvcnQgbm90ZXMgbWVyZ2UiCittc2dzdHIgItC/0YDQtdGD0YHRgtCw0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGB0LvQuNCy0LDQvdC10YLQviDQvdCwINCx0LXQu9C10LbQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6ODU3CisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICLQndGP0LzQsCDQsdC10LvQtdC20LrQuCDQt9CwINC+0LHQtdC60YLQsCDigJ4lc+KAnFxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODY5Cittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICLQvtC/0LjRgtGK0YIg0LfQsCDQuNC30YLRgNC40LLQsNC90LXRgtC+INC90LAg0L3QtdGB0YrRidC10YHRgtCy0YPQstCw0YnQsCDQsdC10LvQtdC20LrQsCDQvdC1INGB0LUg0YHRh9C40YLQsCDQt9CwINCz0YDQtdGI0LrQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg3MgorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg0LjQvNC10L3QsNGC0LAg0L3QsCDQvtCx0LXQutGC0LjRgtC1INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk1MworbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAi0KPQmtCQ0JfQkNCi0JXQm1/Ql9CQX9CR0JXQm9CV0JbQmtCQIgorCisjOiBidWlsdGluL25vdGVzLmM6OTU0Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgItC00LAg0YHQtSDQuNC30L/QvtC70LfQstCwINCx0LXQu9C10LbQutCw0YLQsCDRgdC+0YfQtdC90LAg0L7RgiDRgtC+0LfQuCDQo9Ca0JDQl9CQ0KLQldCbX9CX0JBf0JHQldCb0JXQltCa0JAiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5ODkgYnVpbHRpbi9yZW1vdGUuYzoxNjE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgItCd0LXQv9C+0LfQvdCw0YLQsCDQv9C+0LTQutC+0LzQsNC90LTQsDogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgKK21zZ2lkICJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFtvcHRpb25zLi4uXSBbPCByZWYtbGlzdCB8IDwgb2JqZWN0LWxpc3RdIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBb0J7Qn9Cm0JjQr+KApl0gWzwg0KHQn9CY0KHQqtCaX9ChX9CS0JXQoNCh0JjQmCB8IDwg0KHQn9CY0KHQqtCaX9ChX9Ce0JHQldCa0KLQmF0iCisKKyMgRklYTUUgW29wdGlvbnNdIHZzIFtvcHRpb25zLi4uXQorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOQorbXNnaWQgImdpdCBwYWNrLW9iamVjdHMgW29wdGlvbnMuLi5dIGJhc2UtbmFtZSBbPCByZWYtbGlzdCB8IDwgb2JqZWN0LWxpc3RdIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyBb0J7Qn9Cm0JjQr+KApl0g0J/QoNCV0KTQmNCa0KFf0J3QkF/QmNCc0JXQotCeIFs8INCh0J/QmNCh0KrQml/QoV/QktCV0KDQodCY0JggfCA8ICIKKyLQodCf0JjQodCq0Jpf0KFf0J7QkdCV0JrQotCYXSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICLQs9GA0LXRiNC60LAg0L/RgNC4INC00LXQutC+0LzQv9GA0LXRgdC40YDQsNC90LUg0YEg4oCeZGVmbGF0ZeKAnCAoJWQpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc3MQorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0JfQsNC/0LjRgdCy0LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDExCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIiIKKyLQuNC30LrQu9GO0YfQstCw0L3QtSDQvdCwINC30LDQv9C40YHQstCw0L3QtdGC0L4g0L3QsCDQsdC40YLQvtCy0LDRgtCwINC80LDRgdC60LAsINC30LDRidC+0YLQviDQvdGP0LrQvtC4INC+0LHQtdC60YLQuCDQvdGP0LzQsCDQtNCwINGB0LUgIgorItC/0LDQutC10YLQuNGA0LDRgiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTcxCittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi0JrQvtC80L/RgNC10YHQuNGA0LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgItC90LXQv9C+0LTQtNGK0YDQttCw0L3QsCDQstC10YDRgdC40Y8g0L3QsCDQuNC90LTQtdC60YHQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQvdCwINCy0LXRgNGB0LjRjyDQvdCwINC40L3QtNC10LrRgdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICVzIGRvZXMgbm90IGFjY2VwdCBuZWdhdGl2ZSBmb3JtIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQvdC1INC/0YDQuNGC0LXQttCw0LLQsCDQvtGC0YDQuNGG0LDRgtC10LvQvdCwINCy0LXRgNGB0LjRjyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTk5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSB2YWx1ZSAnJXMnIGZvciBvcHRpb24gJXMiCittc2dzdHIgItC90LXRgNCw0LfQv9C+0LfQvdCw0YLQsCDRgdGC0L7QudC90L7RgdGCIOKAniVz4oCcINC30LAg0L7Qv9GG0LjRj9GC0LAg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxOQorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L3QsNC/0YDQtdC00YrQutCwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjEKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdCw0L/RgNC10LTRitC60LAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyMworbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQvdCw0L/RgNC10LTRitC60LAg0LLRitCyINGE0LDQt9Cw0YLQsCDQvdCwINC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC+0LHQtdC60YLQuNGC0LUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyNgorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAiIgorItGB0YrRidC+0YLQviDQtNC10LnRgdGC0LLQuNC1INC60LDRgtC+INC+0L/RhtC40Y/RgtCwIOKAni0tYWxsLXByb2dyZXNz4oCcINC/0YDQuCDQuNC30LLQtdC20LTQsNC90LXRgtC+INC90LAg0L3QsNC/0YDQtdC00YrQutCwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjcKK21zZ2lkICJ2ZXJzaW9uWyxvZmZzZXRdIgorbXNnc3RyICLQktCV0KDQodCY0K9bLNCe0KLQnNCV0KHQotCS0JDQndCVXSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjI4Cittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwINC90LAg0L/QsNC60LXRgtC90LjRgtC1INGE0LDQudC70L7QstC1INCy0YrQsiDRhNC+0YDQvNCwzIDRgtCwINGBINGD0LrQsNC30LDQvdCw0YLQsCDQstC10YDRgdC40Y8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzMQorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgItC80LDQutGB0LjQvNCw0LvQtdC9INGA0LDQt9C80LXRgCDQvdCwINCy0YHQtdC60Lgg0L/QsNC60LXRgtC10L0g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzMworbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1INC30LDQtdGC0Lgg0L7RgiDQtNGA0YPQs9C4INGF0YDQsNC90LjQu9C40YnQsCDQvdCwINC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjM1Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNCw0L3QtSDQvdCwINC/0LDQutC10YLQuNGA0LDQvdC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzNworbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LDQstCw0L3QtSDQvdCwINC/0YDQvtC30L7RgNC10YbQsCDQt9CwINC/0LDQutC10YLQuNGA0LDQvdC1INC/0L4g0LHRgNC+0Lkg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzkKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICIiCisi0L7Qs9GA0LDQvdC40YfQsNCy0LDQvdC1INC90LAg0L/RgNC+0LfQvtGA0LXRhtCwINC30LAg0L/QsNC60LXRgtC40YDQsNC90LUg0Lgg0L/QviDQv9Cw0LzQtdGCINC+0YHQstC10L0g0L/QviDQsdGA0L7QuSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0MQorbXNnaWQgIm1heGltdW0gbGVuZ3RoIG9mIGRlbHRhIGNoYWluIGFsbG93ZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrIgorbXNnc3RyICIiCisi0LzQsNC60YHQuNC80LDQu9C90LAg0LTRitC70LbQuNC90LAg0L3QsCDQstC10YDQuNCz0LDRgtCwINC+0YIg0YDQsNC30LvQuNC60LgsINC60L7Rj9GC0L4g0LUg0L/QvtC30LLQvtC70LXQvdCwINCyINC/0LDQutC10YLQvdC40Y8g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0MworbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAi0L/RgNC10LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0LjRgtC1INGA0LDQt9C70LjQutC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDUKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICLQv9GA0LXQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQuNGC0LUg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDcKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgItC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0L7QsdC10LrRgtC4IOKAnk9GU19ERUxUQeKAnCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQ5Cittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAiIgorItGB0YLQsNGA0YLQuNGA0LDQvdC1INC90LAg0L3QuNGI0LrQuCDQt9CwINC/0YDQtdGC0YrRgNGB0LLQsNC90LUg0L3QsCDQvdCw0Lkt0LTQvtCx0YDQuNGC0LUg0YHRitCy0L/QsNC00LXQvdC40Y8g0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1MQorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgItCx0LXQtyDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDQv9GA0LDQt9C10L0g0L/QsNC60LXRgtC10L0g0YTQsNC50LsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1MworbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDQstC10YDRgdC40LjRgtC1INC+0YIg0YHRgtCw0L3QtNCw0YDRgtC90LjRjyDQstGF0L7QtCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU1Cittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgItC+0LPRgNCw0L3QuNGH0LDQstCw0L3QtSDQtNC+INCy0YHQtSDQvtGJ0LUg0L3QtdC/0LDQutC10YLQuNGA0LDQvdC40YLQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSBhbnkgcmVmZXJlbmNlIgorbXNnc3RyICIiCisi0LLQutC70Y7Rh9Cy0LDQvdC1INC90LAg0LLRgdC40YfQutC4INC+0LHQtdC60YLQuCwg0LrQvtC40YLQviDQvNC+0LPQsNGCINC00LAg0YHQtSDQtNC+0YHRgtC40LPQvdCw0YIg0L7RgiDQv9GA0L7QuNC30LLQvtC70LXQvSAiCisi0YPQutCw0LfQsNGC0LXQuyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjYxCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICLQstC60LvRjtGH0LLQsNC90LUg0Lgg0L3QsCDQvtCx0LXQutGC0LjRgtC1INGB0L7Rh9C10L3QuCDQvtGCINC30LDQv9C40YHQuNGC0LUg0LIg0LbRg9GA0L3QsNC70LAg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjQKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhlIGluZGV4IgorbXNnc3RyICLQstC60LvRjtGH0LLQsNC90LUg0Lgg0L3QsCDQvtCx0LXQutGC0LjRgtC1INGB0L7Rh9C10L3QuCDQvtGCINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjcKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC/0LDQutC10YLQsCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LjQt9GF0L7QtCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY5Cittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICIiCisi0LLQutC70Y7Rh9Cy0LDQvdC1INC4INC90LAg0L7QsdC10LrRgtC40YLQtS3QtdGC0LjQutC10YLQuCwg0LrQvtC40YLQviDRgdC+0YfQsNGCINC60YrQvCDQvtCx0LXQutGC0LjRgtC1LCDQutC+0LjRgtC+INGJ0LUg0LHRitC00LDRgiAiCisi0L/QsNC60LXRgtC40YDQsNC90LgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY3MQorbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0L3QtdC00L7RgdGC0LjQttC40LzQuNGC0LUg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NzIgcGFyc2Utb3B0aW9ucy5oOjEzOQorbXNnaWQgInRpbWUiCittc2dzdHIgItCS0KDQldCc0JUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY3MworbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICLRgNCw0LfQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINC90LXQtNC+0YHRgtC40LbQuNC80LjRgtC1INC+0LHQtdC60YLQuCwg0LrQvtC40YLQviDRgdCwINC/0L4t0L3QvtCy0Lgg0L7RgiDRgtC+0LLQsCDQktCg0JXQnNCVIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NzYKK21zZ2lkICJjcmVhdGUgdGhpbiBwYWNrcyIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC90LAg0YHRitC60YDQsNGC0LXQvdC4INC/0LDQutC10YLQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjc4Cittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgItC/0LDQutC10YLQuNGA0LDQvdC1INC/0L7QtNGF0L7QtNGP0YnQviDQt9CwINC/0LvQuNGC0LrQviDQtNC+0YHRgtCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY4MAorbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0L/QsNC60LXRgtC40YLQtSwg0LrQvtC40YLQviDRgdCwINC/0YDQuNC00YDRg9C20LXQvdC4INC+0YIg0YTQsNC50Lsg4oCeLmtlZXDigJwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY4MgorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgItC90LjQstC+INC90LAg0LrQvtC80L/RgNC10YHQuNGA0LDQvdC1INC/0YDQuCDQv9Cw0LrQtdGC0LjRgNCw0L3QtSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjg0Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgIiIKKyLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQstGB0LjRh9C60Lgg0YDQvtC00LjRgtC10LvQuCDigJQg0LTQvtGA0Lgg0Lgg0YLQtdC30LgsINC60L7QuNGC0L4g0L3QvtGA0LzQsNC70L3QviDRgdCwINGB0LrRgNC40YLQuCDQv9GA0LggIgorItC/0YDQuNGB0LDQttC00LDQvdC40Y/RgtCwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2ODYKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKyLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQuCDQuNC90LTQtdC60YHQuCDQvdCwINCx0LDQt9CwINCx0LjRgtC+0LLQuCDQvNCw0YHQutC4INC30LAg0YPRgdC60L7RgNGP0LLQsNC90LUg0L3QsCAiCisi0L/RgNC10LHRgNC+0Y/QstCw0L3QtdGC0L4g0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2ODgKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICIiCisi0LfQsNC/0LDQt9Cy0LDQvdC1INC4INC90LAg0LjQvdC00LXQutGBINC90LAg0LHQsNC30LAg0L/QvtCx0LjRgtC+0LLQsCDQvNCw0YHQutCwLCDQt9Cw0LXQtNC90L4g0YEg0LjQvdC00LXQutGB0LAg0LfQsCDQv9Cw0LrQtdGC0LAiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc3OQorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgItCf0YDQtdCx0YDQvtGP0LLQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjYKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFvQntCf0KbQmNCv4oCmXSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNAorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAi0L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQstGB0LjRh9C60L4iCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTUKK21zZ2lkICJwcnVuZSBsb29zZSByZWZzIChkZWZhdWx0KSIKK21zZ3N0ciAi0L7QutCw0YHRgtGA0Y/QvdC1INC90LAg0L3QtdC00L7RgdGC0LjQttC40LzQuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4ICjRgdGC0LDQvdC00LDRgNGC0L3QvikiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NworbXNnaWQgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKK21zZ3N0ciAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjQwCittc2dpZCAiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINC/0L7QstGC0LDRgNGP0YnQuNGC0LUg0YHQtSDQvtCx0LXQutGC0LgiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMQorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1leHBpcmUg0JLQoNCV0JzQlV0gWy0tXSBb0JLQoNCq0KXigKZdIgorCisjOiBidWlsdGluL3BydW5lLmM6MTA1IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTIKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgItGB0LDQvNC+INC40LfQstC10LbQtNCw0L3QtSDQsdC10Lcg0LTQtdC50YHRgtCy0LjRgtC10LvQvdC+INC+0LrQsNGB0YLRgNGP0L3QtSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwNiBidWlsdGluL3dvcmt0cmVlLmM6MTEzCittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC+0LrQsNGB0YLRgNC10L3QuNGC0LUg0L7QsdC10LrRgtC4IgorCisjOiBidWlsdGluL3BydW5lLmM6MTA5IGJ1aWx0aW4vd29ya3RyZWUuYzoxMTUKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAi0L7QutCw0YHRgtGA0Y/QvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSDQv9C+LdGB0YLQsNGA0Lgg0L7RgiDRgtC+0LLQsCDQktCg0JXQnNCVIgorCisjOiBidWlsdGluL3B1c2guYzoxNAorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBb0J7Qn9Cm0JjQr+KApl0gW9Cl0KDQkNCd0JjQm9CY0KnQlSBb0KPQmtCQ0JfQkNCi0JXQm1/QndCQX9CS0JXQoNCh0JjQr+KApl1dIgorCisjOiBidWlsdGluL3B1c2guYzo4NQorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAi0YHRitC60YDQsNGJ0LXQvdC40LUg0LfQsCDQtdGC0LjQutC10YIg0LHQtdC3INCV0KLQmNCa0JXQoiIKKworIzogYnVpbHRpbi9wdXNoLmM6OTUKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1kZWxldGXigJwg0L/RgNC40LXQvNCwINC30LAg0YbQtdC7INGB0LDQvNC+INC/0YDQvtGB0YLQuCDQuNC80LXQvdCwINC90LAg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBidWlsdGluL3B1c2guYzoxMzkKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisi0JfQsCDQtNCwINCy0LrQu9GO0YfQuNGC0LUg0YLQsNC30Lgg0L7Qv9GG0LjRjyDQt9CwINC/0L7RgdGC0L7Rj9C90L3Qviwg0L/QvtCz0LvQtdC00L3QtdGC0LUg0LTQvtC60YPQvNC10L3RgtCw0YbQuNGP0YLQsCDQt9CwICIKKyLQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnnB1c2guZGVmYXVsdOKAnCDQsiDigJ5naXQgaGVscCBjb25maWfigJwuIgorCisjOiBidWlsdGluL3B1c2guYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorbXNnc3RyICIiCisi0JjQvNC10YLQviDQvdCwINGC0LXQutGD0YnQuNGPINC60LvQvtC9INGB0LUg0YDQsNC30LvQuNGH0LDQstCwINC+0YIg0LjQvNC10YLQviDQvdCwINC60LvQvtC90LAsINC60L7QudGC0L4g0YLQvtC5INGB0LvQtdC00LguXG4iCisi0JfQsCDQtNCwINC40LfRgtC70LDRgdC60LDRgtC1INC60YrQvCDRgdC70LXQtNC10L3QuNGPINC60LvQvtC9INC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisi0JfQsCDQtNCwINC40LfRgtC70LDRgdC60LDRgtC1INC60YrQvCDQvtGC0LTQsNC70LXRh9C10L3QuNGPINC60LvQvtC9INGBINC40LzQtSDQutCw0YLQviDQu9C+0LrQsNC70L3QuNGPLCDQuNC30L/QvtC70LfQstCw0LnRgtC1ICIKKyLQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzICVzXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKyLQkiDQvNC+0LzQtdC90YLQsCDQvdC1INGB0YLQtSDQvdCwINC90LjQutC+0Lkg0LrQu9C+0L0uINCX0LAg0LTQsCDQuNC30YLQu9Cw0YHQutCw0YLQtSDQuNGB0YLQvtGA0LjRj9GC0LAg0LTQviDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+LFxuIgorItGB0L7Rh9C10L3QviDQsiDQvNC+0LzQtdC90YLQsCDQvtGCINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcLCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDrQmNCc0JVf0J3QkF/QntCi0JTQkNCb0JXQp9CV0J3QmNCvX9Ca0JvQntCdXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorItCd0LUg0LUg0LfQsNC00LDQtNC10L0g0L7RgtC00LDQu9C10YfQtdC9INC60LvQvtC9LCDQutC+0LnRgtC+INGC0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g4oCeJXPigJwg0LTQsCDRgdC70LXQtNC4LlxuIgorItCX0LAg0LTQsCDQuNC30YLQu9Cw0YHQutCw0YLQtSDQu9C+0LrQsNC70L3QuNGPINC60LvQvtC9INC60YrQvCDQvtGC0LTQsNC70LXRh9C10L0g0Lgg0YHRitGJ0LXQstGA0LXQvNC10L3QvdC+INC00LAg0LfQsNC00LDQtNC10YLQtVxuIgorItCy0YLQvtGA0LjRjyDQutCw0YLQviDRgtC+0LfQuCwg0LrQvtC50YLQviDQv9GK0YDQstC40Y/RgiDRgdC70LXQtNC4LCDQuNC30L/QvtC70LfQstCw0LnRgtC1INC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICIiCisi0KLQtdC60YPRidC40Y/RgiDQutC70L7QvSDigJ4lc+KAnCDRgdC70LXQtNC4INC90Y/QutC+0LvQutC+INC+0YLQtNCw0LvQtdGH0LXQvdC4INC60LvQvtC90LAsINC90LUg0LzQvtC20LXRgtC1INC/0YDQvtGB0YLQviDQtNCwICIKKyLQuNC30YLQu9Cw0YHQutCw0YLQtS4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisi0JjQt9GC0LvQsNGB0LrQstCw0YLQtSDQutGK0Lwg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSDigJ4lc+KAnCwg0LrQvtC50YLQviDQvdC1INC1INGB0LvQtdC00LXQvSDQvtGCINGC0LXQutGD0YnQuNGPINC60LvQvtC9ICIKKyLigJ4lc+KAnC5cbiIKKyLQotGA0Y/QsdCy0LAg0LTQsCDRg9C60LDQttC10YLQtSDQutC+0Y8g0LLQtdGA0YHQuNGPINC00LAg0YHQtSDQuNC30YLQu9Cw0YHQutCwLCDQt9CwINC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90LjRjyAiCisi0LrQu9C+0L0uIgorCisjOiBidWlsdGluL3B1c2guYzoyMDUKK21zZ2lkICIiCisicHVzaC5kZWZhdWx0IGlzIHVuc2V0OyBpdHMgaW1wbGljaXQgdmFsdWUgaGFzIGNoYW5nZWQgaW5cbiIKKyJHaXQgMi4wIGZyb20gJ21hdGNoaW5nJyB0byAnc2ltcGxlJy4gVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2VcbiIKKyJhbmQgbWFpbnRhaW4gdGhlIHRyYWRpdGlvbmFsIGJlaGF2aW9yLCB1c2U6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBtYXRjaGluZ1xuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBhZG9wdCB0aGUgbmV3IGJlaGF2aW9yIG5vdywgdXNlOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisiXG4iCisiV2hlbiBwdXNoLmRlZmF1bHQgaXMgc2V0IHRvICdtYXRjaGluZycsIGdpdCB3aWxsIHB1c2ggbG9jYWwgYnJhbmNoZXNcbiIKKyJ0byB0aGUgcmVtb3RlIGJyYW5jaGVzIHRoYXQgYWxyZWFkeSBleGlzdCB3aXRoIHRoZSBzYW1lIG5hbWUuXG4iCisiXG4iCisiU2luY2UgR2l0IDIuMCwgR2l0IGRlZmF1bHRzIHRvIHRoZSBtb3JlIGNvbnNlcnZhdGl2ZSAnc2ltcGxlJ1xuIgorImJlaGF2aW9yLCB3aGljaCBvbmx5IHB1c2hlcyB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGNvcnJlc3BvbmRpbmdcbiIKKyJyZW1vdGUgYnJhbmNoIHRoYXQgJ2dpdCBwdWxsJyB1c2VzIHRvIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiU2VlICdnaXQgaGVscCBjb25maWcnIGFuZCBzZWFyY2ggZm9yICdwdXNoLmRlZmF1bHQnIGZvciBmdXJ0aGVyICIKKyJpbmZvcm1hdGlvbi5cbiIKKyIodGhlICdzaW1wbGUnIG1vZGUgd2FzIGludHJvZHVjZWQgaW4gR2l0IDEuNy4xMS4gVXNlIHRoZSBzaW1pbGFyIG1vZGVcbiIKKyInY3VycmVudCcgaW5zdGVhZCBvZiAnc2ltcGxlJyBpZiB5b3Ugc29tZXRpbWVzIHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQpIgorbXNnc3RyICIiCisi0J3QsNGB0YLRgNC+0LnQutCw0YLQsCDigJ5wdXNoLmRlZmF1bHTigJwg0L3QtSDQtSDQt9Cw0LTQsNC00LXQvdCwLiDQodGC0L7QudC90L7RgdGC0YLQsCDRnSDQv9C+INC/0L7QtNGA0LDQt9Cx0LjRgNCw0L3QtSDQtSAiCisi0YHQvNC10L3QtdC90LBcbiIKKyLQsiBHaXQgMi4wINC+0YIg4oCebWF0Y2hpbmfigJwgKNCy0YHQuNGH0LrQuCDRgdGK0LLQv9Cw0LTQsNGJ0Lgg0LrQu9C+0L3QuCkg0L3QsCDigJ5zaW1wbGXigJwgKNGB0LDQvNC+INGC0LXQutGD0YnQuNGPXG4iCisi0LrQu9C+0L0pLiDQl9CwINC00LAg0L/QvtC00YLQuNGB0L3QtdGC0LUg0YLQvtCy0LAg0YHRitC+0LHRidC10L3QuNC1INC4INC00LAg0LjQt9C/0L7Qu9C30LLQsNGC0LUg0YLRgNCw0LTQuNGG0LjQvtC90L3QvtGC0L4gIgorItC/0L7QstC10LTQtdC90LjQtVxuIgorItC90LAgR2l0IDEueCwg0LjQt9C/0YrQu9C90LXRgtC1INC60L7QvNCw0L3QtNCw0YLQsDpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisiXG4iCisi0JfQsCDQtNCwINC/0L7QtNGC0LjRgdC90LXRgtC1INGC0L7QstCwINGB0YrQvtCx0YnQtdC90LjQtSDQuCDQtNCwINC40LfQv9C+0LvQt9Cy0LDRgtC1INC90L7QstC+0YLQviDQv9C+0LLQtdC00LXQvdC40LUg0L3QsCBHaXQgMi4iCisieCxcbiIKKyLQuNC30L/RitC70L3QtdGC0LUg0LrQvtC80LDQvdC00LDRgtCwOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisiXG4iCisi0JrQvtCz0LDRgtC+INC90LDRgdGC0YDQvtC50LrQsNGC0LAg4oCecHVzaC5kZWZhdWx04oCcINC1IOKAnm1hdGNoaW5n4oCcLCBnaXQg0YnQtSDQuNC30YLQu9Cw0YHQutCwINCy0YHQuNGH0LrQuCAiCisi0LvQvtC60LDQu9C90LhcbiIKKyLQutC70L7QvdC4LCDQutC+0LjRgtC+INC40LzQsNGCINC+0YLQtNCw0LvQtdGH0LXQvSDQsNC90LDQu9C+0LMg0YHRitGBINGB0YrRidC+0YLQviDQuNC80LUuXG4iCisiXG4iCisi0J7RgiDQstC10YDRgdC40Y8gMi4wIEdpdCDRgdGC0LDQvdC00LDRgNGC0L3QviDQt9Cw0L/QvtGH0LLQsCDQtNCwINC/0L7Qu9C30LLQsCDQv9C+LdC60L7QvdGB0LXRgNCy0LDRgtC40LLQvdC40Y8g0LLQsNGA0LjQsNC90YJcbiIKKyLigJ5zaW1wbGXigJwsINC/0YDQuCDQutC+0LnRgtC+IOKAnnB1c2jigJwg0LjQt9GC0LvQsNGB0LrQstCwINGB0LDQvNC+INGC0LXQutGD0YnQuNGPINC60LvQvtC9INC60YrQvCDQvtGC0LTQsNC70LXRh9C10L3QuNGPLCAiCisi0YHQu9C10LTQtdC9XG4iCisi0LrQu9C+0L0g4oCUINGB0YrRidC40Y8sINC60L7QudGC0L4g4oCeZ2l0IHB1bGzigJwg0LjQt9C/0L7Qu9C30LLQsCwg0LfQsCDQtNCwINC+0LHQvdC+0LLQuCDRgtC10LrRg9GJ0LjRjy5cbiIKKyJcbiIKKyLQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9C+0LPQu9C10LTQvdC10YLQtSDigJ5naXQgaGVscCBjb25maWfigJwg0Lgg0L/QvtGC0YrRgNGB0LXRgtC1IOKAnnB1c2guIgorImRlZmF1bHTigJwuXG4iCisi0J3QvtCy0LDRgtCwINGB0YLQvtC50L3QvtGB0YIg4oCec2ltcGxl4oCcINCx0LUg0LLRitCy0LXQtNC10L3QsCDRgSDQstC10YDRgdC40Y8gMS43LjExINC90LAgR2l0LiDQkNC60L4g0L/QvtC90Y/QutC+0LPQsFxuIgorItC/0L7Qu9C30LLQsNGC0LUg0YHRgtCw0YDQuCDQstC10YDRgdC40Lgg0L3QsCBHaXQsINC30LDQtNCw0LnRgtC1INGB0YLQvtC50L3QvtGB0YIg4oCeY3VycmVudOKAnCDQstC80LXRgdGC0L4g4oCec2ltcGxl4oCcLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjcyCittc2dpZCAiIgorIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kIHB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iCittc2dzdHIgIiIKKyLQndC1INGB0YLQtSDRg9C60LDQt9Cw0LvQuCDQstC10YDRgdC40Y8g0LfQsCDQv9C+0LTQsNCy0LDQvdC1LCDQsCDQvdCw0YHRgtGA0L7QudC60LDRgtCwIOKAnnB1c2guZGVmYXVsdOKAnCDQtSAiCisi4oCebm90aGluZ+KAnCAo0L3QuNGJ0L4g0LHQtdC3INC40LfRgNC40YfQvdC+INGD0LrQsNC30LDQvdCwINCy0LXRgNGB0LjRjyDQtNCwINC90LUg0YHQtSDQuNC30YLQu9Cw0YHQutCy0LApIgorCisjOiBidWlsdGluL3B1c2guYzoyNzkKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLQntCx0L3QvtCy0Y/QstCw0L3QtdGC0L4g0LUg0L7RgtGF0LLRitGA0LvQtdC90L4sINC30LDRidC+0YLQviDQstGK0YDRhdGK0YIg0L3QsCDRgtC10LrRg9GJ0LjRjyDQstC4INC60LvQvtC9INC1INC/0YDQtdC00Lgg0LLRitGA0YXQsCAiCisi0L3QsFxuIgorItC+0YLQtNCw0LvQtdGH0LXQvdC40Y8g0LrQu9C+0L0uINCS0L3QtdGB0LXRgtC1INC+0YLQtNCw0LvQtdGH0LXQvdC40YLQtSDQv9GA0L7QvNC10L3QuCAo0L3QsNC/0YAuINGBINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgIgorInB1bGzigKbigJwpLFxuIgorItC/0YDQtdC00Lgg0L7RgtC90L7QstC+INC00LAg0LjQt9GC0LvQsNGB0LrQsNGC0LUg0L/RgNC+0LzQtdC90LjRgtC1LiDQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQstC40LbRgtC1INGA0LDQt9C00LXQu9CwXG4iCisi4oCeTm90ZSBhYm91dCBmYXN0LWZvcndhcmRz4oCcINCyINGB0YLRgNCw0L3QuNGG0LDRgtCwINC+0YIg0YDRitC60L7QstC+0LTRgdGC0LLQvtGC0L4g4oCeZ2l0IHB1c2ggLS1oZWxw4oCcLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg1Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisi0J7QsdC90L7QstGP0LLQsNC90LXRgtC+INC1INC+0YLRhdCy0YrRgNC70LXQvdC+LCDQt9Cw0YnQvtGC0L4g0LLRitGA0YXRitGCINC90LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QuNGPINC60LvQvtC9INC1INC/0YDQtdC00Lgg0LLRitGA0YXQsFxuIgorItC90LAg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvS4g0J/RgNC+0LLQtdGA0LXRgtC1INC60LvQvtC90LAg0Lgg0LLQvdC10YHQtdGC0LUg0L7RgtC00LDQu9C10YfQtdC90LjRgtC1INC/0YDQvtC80LXQvdC4ICjQvdCw0L/RgC5cbiIKKyLRgSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IHB1bGzigKbigJwpLCDQv9GA0LXQtNC4INC+0YLQvdC+0LLQviDQtNCwINC40LfRgtC70LDRgdC60LDRgtC1INC/0YDQvtC80LXQvdC40YLQtS4g0JfQsCDQv9C+0LLQtdGH0LVcbiIKKyLQuNC90YTQvtGA0LzQsNGG0LjRjyDQv9C+0LPQu9C10LTQvdC10YLQtSDRgNCw0LfQtNC10LvQsCDigJ5Ob3RlIGFib3V0IGZhc3QtZm9yd2FyZHPigJwg0LIg0YHRgtGA0LDQvdC40YbQsNGC0LAg0L7RglxuIgorItGA0YrQutC+0LLQvtC00YHRgtCy0L7RgtC+IOKAnmdpdCBwdXNoIC0taGVscOKAnC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5MQorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGNvbnRhaW5zIHdvcmsgdGhhdCB5b3UgZG9cbiIKKyJub3QgaGF2ZSBsb2NhbGx5LiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFub3RoZXIgcmVwb3NpdG9yeSBwdXNoaW5nXG4iCisidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLQntCx0L3QvtCy0Y/QstCw0L3QtdGC0L4g0LUg0L7RgtGF0LLRitGA0LvQtdC90L4sINC30LDRidC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+LCDQutGK0Lwg0LrQvtC10YLQviDQuNC30YLQu9Cw0YHQutCy0LDRgtC1LCAiCisi0YHRitC00YrRgNC20LBcbiIKKyLQv9GA0L7QvNC10L3QuCwg0LrQvtC40YLQviDQu9C40L/RgdCy0LDRgiDQsiDQu9C+0LrQsNC70L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1LiDQndCw0Lkt0YfQtdGB0YLQsNGC0LAg0L/RgNC40YfQuNC90LAg0LfQsCDRgtC+0LLQsCAiCisi0LUsXG4iCisi0YfQtSDQvdGP0LrQvtC5INC00YDRg9CzINC1INC40LfRgtC70LDRgdC60LLQsNC7INC60YrQvCDRgdGK0YnQuNGPINC60LvQvtC9LiDQn9GK0YDQstC+INCy0L3QtdGB0LXRgtC1INC+0YLQtNCw0LvQtdGH0LXQvdC40YLQtSAiCisi0L/RgNC+0LzQtdC90LhcbiIKKyIo0L3QsNC/0YAuINGBINC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgcHVsbOKApuKAnCksINC/0YDQtdC00Lgg0L7RgtC90L7QstC+INC00LAg0LjQt9GC0LvQsNGB0LrQsNGC0LUg0L/RgNC+0LzQtdC90LjRgtC1LlxuIgorItCX0LAg0L/QvtCy0LXRh9C1INC40L3RhNC+0YDQvNCw0YbQuNGPINC/0L7Qs9C70LXQtNC90LXRgtC1INGA0LDQt9C00LXQu9CwIOKAnk5vdGUgYWJvdXQgZmFzdC1mb3J3YXJkc+KAnCDQsiAiCisi0YHRgtGA0LDQvdC40YbQsNGC0LBcbiIKKyLQvtGCINGA0YrQutC+0LLQvtC00YHRgtCy0L7RgtC+IOKAnmdpdCBwdXNoIC0taGVscOKAnC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5OAorbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCittc2dzdHIgIiIKKyLQmNC30YLQu9Cw0YHQutCy0LDQvdC10YLQviDQtSDQvtGC0YXQstGK0YDQu9C10L3Qviwg0LfQsNGJ0L7RgtC+INCyINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAgIgorItC10YLQuNC60LXRgixcbiIKKyLQutC+0LnRgtC+INGJ0LUg0L/RgNC40L/QvtC60YDQuNC10YLQtSDRgSDQtdGC0LjQutC10YIg0L7RgiDQstCw0YjQtdGC0L4g0YXRgNCw0L3QuNC70LjRidC1LiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzAxCittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyLQkdC10Lcg0LTQsCDRg9C60LDQttC10YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tLWZvcmNl4oCcLCDQvdC1INC80L7QttC1INC00LAg0L7QsdC90L7QstC40YLQtSDQvtGC0LTQsNC70LXRh9C10L1cbiIKKyLRg9C60LDQt9Cw0YLQtdC7LCDQutC+0LnRgtC+INCy0LXRh9C1INGB0L7Rh9C4INC60YrQvCDQvtCx0LXQutGCLCDQutC+0LnRgtC+INC90LUg0LUg0L/QvtC00LDQstCw0L3QtSwg0LrQsNC60YLQviDQuCDRgtC10L/RitGA0LLQsFxuIgorItC00LAg0LPQviDQv9GA0L7QvNC10L3QuNGC0LUg0LTQsCDRgdC+0YfQuCDQutGK0Lwg0L/QvtC00L7QsdC10L0g0L7QsdC10LrRgi5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzYwCisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgdG8gJXNcbiIKK21zZ3N0ciAi0JjQt9GC0LvQsNGB0LrQstCw0L3QtSDQutGK0Lwg4oCeJXPigJxcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICLRh9Cw0YHRgiDQvtGCINGD0LrQsNC30LDRgtC10LvQuNGC0LUg0L3QtSDQsdGP0YXQsCDQuNC30YLQu9Cw0YHQutCw0L3QuCDQutGK0Lwg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDRg9C60LDQt9Cw0L3QviDRhdGA0LDQvdC40LvQuNGJ0LUg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NQorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisi0J3QtSDQtSDRg9C60LDQt9Cw0L3QviDRhdGA0LDQvdC40LvQuNGJ0LUsINC60YrQvCDQutC+0LXRgtC+INC00LAg0YHQtSDQuNC30YLQu9Cw0YHQutCy0LAuXG4iCisi0JjQu9C4INGD0LrQsNC20LXRgtC1INCw0LTRgNC10YHQsCDQvdCwINC60L7QvNCw0L3QtNC90LjRjyDRgNC10LQsINC40LvQuCDQvdCw0YHRgtGA0L7QudGC0LUg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1INGBICIKKyLQutC+0LzQsNC90LTQsNGC0LA6XG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkINCY0JzQlSDQkNCU0KDQldChXG4iCisiXG4iCisi0Lgg0YHQu9C10LQg0YLQvtCy0LAg0LjQt9GC0LvQsNGB0LrQsNC50YLQtSwg0LrQsNGC0L4g0YPQutCw0LbQtdGC0LUg0LjQvNC10YLQviDQvdCwINC+0YLQtNCw0LvQtdGH0LXQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LU6XG4iCisiXG4iCisiICAgIGdpdCBwdXNoINCY0JzQlVxuIgorCisjOiBidWlsdGluL3B1c2guYzo0MTAKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tYWxs4oCcINC4IOKAni0tdGFnc+KAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9wdXNoLmM6NDExCittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1hbGzigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINGD0LrQsNC30LLQsNC90LXRgtC+INC90LAg0LLQtdGA0YHQuNGPIgorCisjOiBidWlsdGluL3B1c2guYzo0MTYKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgItC+0L/RhtC40LjRgtC1IOKAni0tbWlycm9y4oCcINC4IOKAni0tdGFnc+KAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuCIKKworIzogYnVpbHRpbi9wdXNoLmM6NDE3Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAi0L7Qv9GG0LjRj9GC0LAg4oCeLS1taXJyb3LigJwg0LUg0L3QtdGB0YrQstC80LXRgdGC0LjQvNCwINGBINGD0LrQsNC30LLQsNC90LXRgtC+INC90LAg0LLQtdGA0YHQuNGPIgorCisjOiBidWlsdGluL3B1c2guYzo0MjIKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1hbGzigJwg0Lgg4oCeLS1taXJyb3LigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUwMgorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgItGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTAzCittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAi0LjQt9GC0LvQsNGB0LrQstCw0L3QtSDQvdCwINCy0YHQuNGH0LrQuCDRg9C60LDQt9Cw0YLQtdC70LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUwNAorbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAi0L7Qs9C70LXQtNCw0LvQvdC+INC60L7Qv9C40LUg0L3QsCDQstGB0LjRh9C60Lgg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBidWlsdGluL3B1c2guYzo1MDYKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTA3Cittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICLQuNC30YLQu9Cw0YHQutCy0LDQvdC1INC90LAg0LXRgtC40LrQtdGC0LjRgtC1ICjQvdC10YHRitCy0LzQtdGB0YLQuNC80L4g0YEg0L7Qv9GG0LjQuNGC0LUg4oCeLS1hbGzigJwg0Lgg4oCeLS1taXJyb3LigJwpIgorCisjOiBidWlsdGluL3B1c2guYzo1MTAKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0L7QsdC90L7QstGP0LLQsNC90LUiCisKKyMgRklYTUUgZG91YmxlIGNoZWNrIHRoaXMKKyM6IGJ1aWx0aW4vcHVzaC5jOjUxMgorbXNnaWQgInJlZm5hbWU+OjxleHBlY3QiCittc2dzdHIgItCj0JrQkNCX0JDQotCV0Js+OjzQntCn0JDQmtCS0JDQndCQX9Ch0KLQntCZ0J3QntCh0KIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUxMworbXNnaWQgInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIgorbXNnc3RyICLQo9Ca0JDQl9CQ0KLQldCb0Y/RgiDRgtGA0Y/QsdCy0LAg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INC00LAg0LUg0YEg0YLQsNC30Lgg0J7Qp9CQ0JrQktCQ0J3QkF/QodCi0J7QmdCd0J7QodCiIgorCisjOiBidWlsdGluL3B1c2guYzo1MTYKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgItGD0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0YDQtdC60YPRgNGB0LjQstC90L7RgtC+INC40LfRgtC70LDRgdC60LLQsNC90LUg0L3QsCDQv9C+0LTQvNC+0LTRg9C70LjRgtC1IgorCisjOiBidWlsdGluL3B1c2guYzo1MTgKK21zZ2lkICJ1c2UgdGhpbiBwYWNrIgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGB0YrQutGA0LDRgtC10L3QuCDQv9Cw0LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUxOSBidWlsdGluL3B1c2guYzo1MjAKK21zZ2lkICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIKK21zZ3N0ciAi0L/RgNC+0LPRgNCw0LzQsCDQt9CwINC/0L7Qu9GD0YfQsNCy0LDQvdC10YLQviDQvdCwINC/0LDQutC10YLQuCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTIxCittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INC30LAg0LrQvtC80LDQvdC00LjRgtC1IOKAnmdpdCBwdWxsL3N0YXR1c+KAnCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTI0Cittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgItC+0LrQsNGB0YLRgNGP0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvQuNGC0LUsINC60L7QuNGC0L4g0YHQsCDQv9GA0LXQvNCw0YXQvdCw0YLQuCDQvtGCINC70L7QutCw0LvQvdC+0YLQviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUyNgorbXNnaWQgImJ5cGFzcyBwcmUtcHVzaCBob29rIgorbXNnc3RyICLQsdC10Lcg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutGD0LrQsNGC0LAg0L/RgNC10LTQuCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1IChwcmUtcHVzaCkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUyNworbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAiIgorItC40LfRgtC70LDRgdC60LLQsNC90LUg0L3QsCDQu9C40L/RgdCy0LDRidC40YLQtSDQsiDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1LCDQvdC+INGB0LLRitGA0LfQsNC90Lgg0YEg0YLQtdC60YPRidC+0YLQviAiCisi0LjQt9GC0LvQsNGB0LrQstCw0L3QtSwg0LXRgtC40LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUyOQorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICLQv9C+0LTQv9C40YHQstCw0L3QtSDQvdCwINC40LfRgtC70LDRgdC60LLQsNC90LXRgtC+INGBIEdQRyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTMwCittc2dpZCAicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiCittc2dzdHIgItC40LfQuNGB0LrQstCw0L3QtSDQvdCwINCw0YLQvtC80LDRgNC90Lgg0L7Qv9C10YDQsNGG0LjQuCDQvtGCINC+0YLRgdGA0LXRidC90LDRgtCwINGB0YLRgNCw0L3QsCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTM5Cittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIiIKKyLQvtC/0YbQuNGP0YLQsCDigJ4tLWRlbGV0ZeKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0L7Qv9GG0LjQuNGC0LUgIOKAni0tYWxs4oCcLCDigJ4tLW1pcnJvcuKAnCDQuCDigJ4tLXRhZ3PigJwiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MQorbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLWRlbGV0ZeKAnCDQuNC30LjRgdC60LLQsCDQv9C+0L3QtSDQtdC00LjQvSDRg9C60LDQt9Cw0YLQtdC7INC90LAg0LLQtdGA0YHQuNGPIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjM3Cittc2dpZCAiIgorImdpdCByZWFkLXRyZWUgW1stbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4Pl0gIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9PGZpbGU+XSAoLS1lbXB0eSB8IDx0cmVlLWlzaDE+IFs8dHJlZS1pc2gyPiBbPHRyZWUtaXNoMz5dXSkiCittc2dzdHIgIiIKKyJnaXQgcmVhZC10cmVlIFtbLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg90J/QoNCV0KTQmNCa0KFdICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PdCk0JDQmdCbX9ChX9CY0JfQmtCb0K7Qp9CV0J3QmNCvXSB8IC1pXV0gWy0tbm8tc3BhcnNlLSIKKyJjaGVja291dF0gWy0taW5kZXgtb3V0cHV0PdCk0JDQmdCbXSAoLS1lbXB0eSB8INCj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9CU0KrQoNCS0J5fMSAiCisiW9Cj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9CU0KrQoNCS0J5fMiBb0KPQmtCQ0JfQkNCi0JXQm1/QmtCq0Jxf0JTQqtCg0JLQnl8zXV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExMAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgItC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwINCyINGC0L7Qt9C4INCk0JDQmdCbIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExMworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICLRgdCw0LzQviDQt9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExNQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgItCh0LvQuNCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExNworbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgItC00LAg0YHQtSDQuNC30LLRitGA0YjQuCDQuCDRgdC70LjQstCw0L3QtSDRgdC70LXQtCDQvtGB0LLQtdC9INC40LfRh9C40YLQsNC90LXRgtC+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExOQorbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAi0YLRgNC+0LnQvdC+INGB0LvQuNCy0LDQvdC1LCDQsNC60L4g0L3QtSDRgdC1INC90LDQu9Cw0LPQsCDQv9C+0YTQsNC50LvQvtCy0L4g0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIxCittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAi0YLRgNC+0LnQvdC+INGB0LvQuNCy0LDQvdC1INC/0YDQuCDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LTQvtCx0LDQstGP0L3QtSDQuCDQuNC30YLRgNC40LLQsNC90LUg0L3QsCDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjMKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICLRgdGK0YnQvtGC0L4g0LrQsNGC0L4g0L7Qv9GG0LjRj9GC0LAg4oCeLW3igJwsINC90L4g0L3QtdGB0LvQtdGC0LjRgtC1INC+0LHQtdC60YLQuCDRgdC1INC/0YDQtdC90LXQsdGA0LXQs9Cy0LDRgiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjQKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgItCf0J7QlNCU0JjQoNCV0JrQotCe0KDQmNCvLyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjUKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAi0LjQt9GH0LjRgtCw0L3QtSDQvdCwINC00YrRgNCy0L7RgtC+INC60YrQvCDQuNC90LTQtdC60YHQsCDQutCw0YLQviDQtNCwINC1INCyINGC0LDQt9C4INCf0J7QlNCU0JjQoNCV0JrQotCe0KDQmNCvLyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IgorbXNnc3RyICLQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INGBINGA0LXQt9GD0LvRgtCw0YLQsCDQvtGCINGB0LvQuNCy0LDQvdC10YLQviIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzAKK21zZ2lkICJnaXRpZ25vcmUiCittc2dzdHIgItCk0JDQmdCbX9ChX9CY0JfQmtCb0K7Qp9CV0J3QmNCvIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINC/0YDQtdC30LDQv9C40YHQstCw0L3QtdGC0L4g0L3QsCDQuNC30YDQuNGH0L3QviDQv9GA0LXQvdC10LHRgNC10LPQstCw0L3QuNGC0LUg0YTQsNC50LvQvtCy0LUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICLQsdC10Lcg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INGB0LvQtdC0INGB0LvQuNCy0LDQvdC10YLQviIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzUKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgItCx0LXQtyDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQuCDQvdCwINC40L3QtNC10LrRgdCwLCDQuCDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAi0LHQtdC3INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINGE0LjQu9GC0YrRgNCwINC30LAg0YfQsNGB0YLQuNGH0L3QviDQuNC30YLQtdCz0LvRj9C90LUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM5Cittc2dpZCAiZGVidWcgdW5wYWNrLXRyZWVzIgorbXNnc3RyICLQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCDQsiDQutC+0LzQsNC90LTQsNGC0LAg4oCedW5wYWNrLXRyZWVz4oCcIgorCisjIEZJWE1FCisjOiBidWlsdGluL3JlZmxvZy5jOjQzMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC1INC/0YDQsNCy0LjQu9C90LAg0YHRgtC+0LnQvdC+0YHRgiDQt9CwINCy0YDQtdC80LUg0LfQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo1NDcgYnVpbHRpbi9yZWZsb2cuYzo1NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg0LLRgNC10LzQtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzCittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQg0JrQm9Ce0J1dIFstbSDQntCh0J3QntCS0JXQnV/QmtCb0J7QnV0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0g0JjQnNCVINCQ0JTQoNCV0KEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQgYnVpbHRpbi9yZW1vdGUuYzozMworbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSDQodCi0JDQoNCeX9CY0JzQlSDQndCe0JLQnl/QmNCc0JUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUgYnVpbHRpbi9yZW1vdGUuYzozOAorbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW1vdmUg0JjQnNCVIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2IGJ1aWx0aW4vcmVtb3RlLmM6NDMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkINCY0JzQlSAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwg0JrQm9Ce0J0pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0g0JjQnNCVIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dINCY0JzQlSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOQorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFso0JPQoNCj0J/QkCB8ICIKKyLQntCi0JTQkNCb0JXQp9CV0J3Qnl/QpdCg0JDQndCY0JvQmNCp0JUp4oCmXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdINCY0JzQlSDQmtCb0J7QneKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMSBidWlsdGluL3JlbW90ZS5jOjY5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0g0JjQnNCVINCd0J7Qkl/QkNCU0KDQldChIFvQodCi0JDQoF/QkNCU0KDQldChXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMiBidWlsdGluL3JlbW90ZS5jOjcwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkINCY0JzQlSDQndCe0JJf0JDQlNCg0JXQoSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMyBidWlsdGluL3JlbW90ZS5jOjcxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlINCY0JzQlSDQkNCU0KDQldChIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI4Cittc2dpZCAiZ2l0IHJlbW90ZSBhZGQgWzxvcHRpb25zPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBb0J7Qn9Cm0JjQr+KApl0g0JjQnNCVINCQ0JTQoNCV0KEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzINCY0JzQlSDQmtCb0J7QneKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQg0JjQnNCVINCa0JvQntCd4oCmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU0Cittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFvQntCf0KbQmNCv4oCmXSDQmNCc0JUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTkKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBb0J7Qn9Cm0JjQr+KApl0g0JjQnNCVIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY0Cittc2dpZCAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iCittc2dzdHIgImdpdCByZW1vdGUgdXBkYXRlIFvQntCf0KbQmNCv4oCmXSBb0JPQoNCj0J/QkCB8INCe0KLQlNCQ0JvQldCn0JXQndCeX9Cl0KDQkNCd0JjQm9CY0KnQlV3igKYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg4oCeJXPigJwiCisKKyMgRklYTUUgdGFidWxhdG9yCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMAorbXNnaWQgIiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgIiIKKyLQmNC30L/QvtC70LfQstCw0L3QtdGC0L4g0YHQsNC80L4g0L3QsCDigJ4tLW1pcnJvcuKAnCDQtSDQvtC/0LDRgdC90L4uINCS0LzQtdGB0YLQviDRgtC+0LLQsFxuIgorItC/0L7Qu9C30LLQsNC50YLQtSDigJ4tLW1pcnJvcj1mZXRjaOKAnCDQuNC70Lgg4oCeLS1taXJyb3I9cHVzaOKAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QsCDRgdGC0L7QudC90L7RgdGCINC30LAg4oCeLS1taXJyb3LigJw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MworbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgItC+0YLQtNCw0LvQtdGH0LXQvdC40YLQtSDQutC70L7QvdC4INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LTQvtGB0YLQsNCy0LXQvdC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgItCy0L3QsNGB0Y/QvdC1INC90LAg0LLRgdC40YfQutC4INC10YLQuNC60LXRgtC4INC4INC/0YDQuNC90LDQtNC70LXQttCw0YnQuNGC0LUg0LjQvCDQvtCx0LXQutGC0Lgg0L/RgNC4INC00L7RgdGC0LDQstGP0L3QtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTgKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgItC80L7QttC1INC4INC00LAg0L3QtSDRgdC1INC00L7RgdGC0LDQstGP0YIg0L3QuNC60LDQutCy0Lgg0LXRgtC40LrQtdGC0LggKNGH0YDQtdC3INC+0L/RhtC40Y/RgtCwIOKAni0tbm8tdGFnc+KAnCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYwCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAi0LrQu9C+0L0v0Lgg0LfQsCDRgdC70LXQtNC10L3QtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICLQvtGB0L3QvtCy0LXQvSDQutC70L7QvSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjIKK21zZ2lkICJwdXNofGZldGNoIgorbXNnc3RyICLQuNC30LTRitGA0L/QstCw0L3QtXzQtNC+0YHRgtCw0LLRj9C90LUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYzCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIiIKKyLQvdCw0YHRgtGA0L7QudCy0LDQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1LCDQvtGCINC60L7QtdGC0L4g0LTQsCDRgdC1INC40LfQtNGK0YDQv9Cy0LAg0LjQu9C4INC00L7RgdGC0LDQstGPIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3NQorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgIiIKKyLQvdGP0LzQsCDRgdC80LjRgdGK0Lsg0LTQsCDRgdC1INGD0LrQsNC30LLQsCDQvtGB0L3QvtCy0LXQvSDQutC70L7QvSDQv9GA0Lgg0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLW1pcnJvcuKAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzcKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICIiCisi0YPQutCw0LfQstCw0L3QtdGC0L4g0L3QsCDRgdC70LXQtNC10L3QuCDQutC70L7QvdC4INC1INGB0LzQuNGB0LvQtdC90L4g0YHQsNC80L4g0LfQsCDQvtGC0LTQsNC70LXRh9C10L3QuCDRhdGA0LDQvdC40LvQuNGJ0LAsINC+0YIgIgorItC60L7QuNGC0L4g0YHQtSDQtNC+0YHRgtCw0LLRjyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODcgYnVpbHRpbi9yZW1vdGUuYzo2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1INGBINC40LzQtSDigJ4lc+KAnC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkxIGJ1aWx0aW4vcmVtb3RlLmM6NjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIuKAniVz4oCcINC1INC90LXQv9GA0LDQstC40LvQvdC+INC40LzQtSDQt9CwINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICLQntGB0L3QvtCy0L3QuNGP0YIg0LrQu9C+0L0g4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC90LDRgdGC0YDQvtC10L0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICLQntCx0LXQutGC0LjRgtC1INC30LAg0LTQvtGB0YLQsNCy0Y/QvdC1INC30LAg0YPQutCw0LfQsNGC0LXQu9GPIOKAniVz4oCcINC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0L/QvtC70YPRh9C10L3QuCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0MzYgYnVpbHRpbi9yZW1vdGUuYzo0NDQKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIo0YHRitCy0L/QsNC00LDRidC4KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDgKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKNC30LAg0LjQt9GC0YDQuNCy0LDQvdC1KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1ODkgYnVpbHRpbi9yZW1vdGUuYzo1OTUgYnVpbHRpbi9yZW1vdGUuYzo2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIHRvICclcyciCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDRgdC1INC00L7QsdCw0LLQuCDQutGK0Lwg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjMzIGJ1aWx0aW4vcmVtb3RlLmM6NzkyIGJ1aWx0aW4vcmVtb3RlLmM6ODkyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAlcyIKK21zZ3N0ciAi0KLQsNC60L7QstCwINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQvdGP0LzQsDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICLQoNCw0LfQtNC10LvRitGCIOKAniVz4oCcINCyINC90LDRgdGC0YDQvtC50LrQuNGC0LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQtdC40LzQtdC90YPQstCw0L0g0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTYgYnVpbHRpbi9yZW1vdGUuYzo4NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICLQoNCw0LfQtNC10LvRitGCIOKAniVz4oCcINCyINC90LDRgdGC0YDQvtC50LrQuNGC0LUg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgiIKKworIyBGSVhNRSB0YWJ1bGF0b3IKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorItCd0LXRgdGC0LDQvdC00LDRgNGC0L3QuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4INC30LAg0LTQvtGB0YLQsNCy0Y/QvdC1INC90Y/QvNCwINC00LAg0LHRitC00LDRgiDQvtCx0L3QvtCy0LXQvdC4XG4iCisiICAgICVzXG4iCisiICDQn9GA0L7QvNC10L3QtdGC0LUg0L3QsNGB0YLRgNC+0LnQutC40YLQtSDRgNGK0YfQvdC+LCDQsNC60L4g0LUg0L3QtdC+0LHRhdC+0LTQuNC80L4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcyciCittc2dzdHIgItCg0LDQt9C00LXQu9GK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC00L7QsdCw0LLQtdC9INCyINC90LDRgdGC0YDQvtC50LrQuNGC0LUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgJyVzJyIKK21zZ3N0ciAi0KDQsNC30LTQtdC70YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC00LDQtNC10L0g0LIg0L3QsNGB0YLRgNC+0LnQutC40YLQtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBicmFuY2ggJXMiCittc2dzdHIgItCa0LvQvtC90YrRgiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0YDQuNGCIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgzMAorbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCisi0JHQtdC70LXQttC60LA6INCa0LvQvtC9INC40LfQstGK0L0g0LnQtdGA0LDRgNGF0LjRj9GC0LAg4oCecmVmcy9yZW1vdGVzL+KAnCDQvdC1INCx0LUg0LjQt9GC0YDQuNGCLlxuIgorItCY0LfRgtGA0LjQudGC0LUg0LPQviDRh9GA0LXQtyDQutC+0LzQsNC90LTQsNGC0LA6IgorbXNnc3RyWzFdICIiCisi0JHQtdC70LXQttC60LA6INCd0Y/QutC+0LvQutC+INC60LvQvtC90LAg0LjQt9Cy0YrQvSDQudC10YDQsNGA0YXQuNGP0YLQsCDigJ5yZWZzL3JlbW90ZXMv4oCcINC90LUg0LHRj9GF0LAg0LjQt9GC0YDQuNGC0LguXG4iCisi0JjQt9GC0YDQuNC50YLQtSDQs9C4INGH0YDQtdC3INC60L7QvNCw0L3QtNCw0YLQsDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiINC90L7QsiAo0YHQu9C10LTQstCw0YnQvtGC0L4g0LTQvtGB0YLQsNCy0Y/QvdC1INGJ0LUg0LPQviDRgNCw0LfQv9C+0LvQvtC20Lgg0LIg4oCecmVtb3Rlcy8lc+KAnCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTQ4Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDRgdC70LXQtNC10L0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTUwCittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiDRgdGC0LDRgCAo0LjQt9GC0YDQuNC50YLQtSDRh9GA0LXQtyDigJ5naXQgcmVtb3RlIHBydW5l4oCcKSIKKworIyBGSVhNRQorIzogYnVpbHRpbi9yZW1vdGUuYzo5NTIKK21zZ2lkICIgPz8/IgorbXNnc3RyICIg0L3QtdGP0YHQvdC+INGB0YrRgdGC0L7Rj9C90LjQtSIKKworIyBDSEVDSworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICIiCisi0L3QtdC/0YDQsNCy0LjQu9C10L0g0LrQu9C+0L0g0LfQsCDRgdC70LjQstCw0L3QtSDigJ4lc+KAnC4g0J3QtdCy0YrQt9C80L7QttC90L4g0LUg0LTQsCDQv9GA0LXQsdCw0LfQuNGA0LDRgtC1INCy0YrRgNGF0YMg0L/QvtCy0LXRh9C1INC+0YIgIgorIjEg0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICLQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INCy0YrRgNGF0YMg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiDRgdC70LjQstCw0L3QtSDRgSDQvtGC0LTQsNC70LXRh9C10L3QuNGPINC60LvQvtC9IOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDQKK21zZ2lkICIgICAgYW5kIHdpdGggcmVtb3RlIgorbXNnc3RyICIgICAg0Lgg0YEg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAi0YHQu9C40LLQsNC90LUg0YEg0L7RgtC00LDQu9C10YfQtdC90LjRjyDQutC70L7QvSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDA3Cittc2dpZCAiICAgYW5kIHdpdGggcmVtb3RlIgorbXNnc3RyICIgICDQuCDRgSDQvtGC0LTQsNC70LXRh9C10L3QuNGPINC60LvQvtC9IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTMKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgItGB0YrQt9C00LDQtNC10L0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NgorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAi0LjQt9GC0YDQuNGCIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjAKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICLQsNC60YLRg9Cw0LvQtdC9IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjMKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICLQvNC+0LbQtSDQtNCwINGB0LUg0YHQu9C10LUg0YLRgNC40LLQuNCw0LvQvdC+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjYKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAi0LvQvtC60LDQu9C90LjRj9GCINC1INC40LfQvtGB0YLQsNC90LDQuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDczCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzINC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQuNC30YLQu9Cw0YHQutCy0LAg0LrRitC8ICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzINC40LfRgtC70LDRgdC60LLQsCDQutGK0LwgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4g0LjQt9GC0LvQsNGB0LrQstCwINC60YrQvCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMg0LjQt9GC0LvQsNGB0LrQstCwINC60YrQvCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTUxCittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgItCx0LXQtyDQt9Cw0Y/QstC60Lgg0LrRitC8INC+0YLQtNCw0LvQtdGH0LXQvdC40YLQtSDRhdGA0LDQvdC40LvQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAi4pePINC+0YLQtNCw0LvQtdGH0LXQvdC+INGF0YDQsNC90LjQu9C40YnQtSDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmV0Y2ggVVJMOiAlcyIKK21zZ3N0ciAiICDQkNC00YDQtdGBINC30LAg0LTQvtGB0YLQsNCy0Y/QvdC1OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTgwIGJ1aWx0aW4vcmVtb3RlLmM6MTMzMQorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIo0LHQtdC3INCw0LTRgNC10YEpIgorCisjIEZJWE1FIHNwYWNlcyBiZXR3ZW4gUHVzaCBhbmQgVVJMCisjOiBidWlsdGluL3JlbW90ZS5jOjExODkgYnVpbHRpbi9yZW1vdGUuYzoxMTkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiICDQkNC00YDQtdGBINC30LAg0LjQt9GC0LvQsNGB0LrQstCw0L3QtTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5MyBidWlsdGluL3JlbW90ZS5jOjExOTUgYnVpbHRpbi9yZW1vdGUuYzoxMTk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgINC60LvQvtC9INGB0L7Rh9C10L0g0L7RgiBIRUFEOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiIKKyIgINC60LvQvtC90YrRgiDRgdC+0YfQtdC9INC+0YIgSEVBRCAo0LrQu9C+0L3RitGCINGD0LrQsNC30LDQvSDQstGK0LIg0YTQsNC50LvQsCBIRUFEINC+0YIg0L7RgtC00LDQu9C10YfQtdC90L7RgtC+ICIKKyLRhdGA0LDQvdC40LvQuNGJ0LUg0LVcbiIKKyIgINC90LXQtdC00L3QvtC30L3QsNGH0LXQvSDQuCDQtSDQvdGP0LrQvtC5INC+0YIg0YHQu9C10LTQvdC40YLQtSk6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgINCe0YLQtNCw0LvQtdGH0LXQvSDQutC70L7QvTolcyIKK21zZ3N0clsxXSAiICDQntGC0LTQsNC70LXRh9C10L3QuCDQutC70L7QvdC4OiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTQgYnVpbHRpbi9yZW1vdGUuYzoxMjQxCittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKNGB0YrRgdGC0L7Rj9C90LjQtdGC0L4g0L3QtSDQsdC1INC/0YDQvtCy0LXRgNC10L3QvikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIyMworbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgINCb0L7QutCw0LvQtdC9INC60LvQvtC9INC90LDRgdGC0YDQvtC10L0g0LfQsCDQuNC30LTRitGA0L/QstCw0L3QtSDRh9GA0LXQtyDigJ5naXQgcHVsbOKAnDoiCittc2dzdHJbMV0gIiAg0JvQvtC60LDQu9C90Lgg0LrQu9C+0L3QuCDQvdCw0YHRgtGA0L7QtdC90Lgg0LfQsCDQuNC30LTRitGA0L/QstCw0L3QtSDRh9GA0LXQtyDigJ5naXQgcHVsbOKAnDoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzMQorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAg0JvQvtC60LDQu9C90LjRgtC1INGD0LrQsNC30LDRgtC10LvQuCDRidC1INCx0YrQtNCw0YIg0L/RgNC10L3QtdGB0LXQvdC4INGH0YDQtdC3IOKAniBwdXNo4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAg0JvQvtC60LDQu9C90LjRj9GCINGD0LrQsNC30LDRgtC10LssINC90LDRgdGC0YDQvtC10L0g0LfQsCDigJ5naXQgcHVzaOKAnCVzOiIKK21zZ3N0clsxXSAiICDQm9C+0LrQsNC70L3QuNGC0LUg0YPQutCw0LfQsNGC0LXQu9C4LCDQvdCw0YHRgtGA0L7QtdC90Lgg0LfQsCDigJ5naXQgcHVzaOKAnCVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU5Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAgcmVmcy9yZW1vdGVzL9CY0JzQlS9IRUFEINGB0L/QvtGA0LXQtCDQvtGC0LTQsNC70LXRh9C10L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjEKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCByZWZzL3JlbW90ZXMv0JjQnNCVL0hFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NgorbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INGD0YHRgtCw0L3QvtCy0Lgg0L7RgtC00LDQu9C10YfQtdC90LjRj9GCINCy0YDRitGFIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzgKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiIgorItCc0L3QvtC20LXRgdGC0LLQviDQutC70L7QvdC4INGBINCy0YrRgNGF0L7QstC1LiDQmNC30LHQtdGA0LXRgtC1INC40LfRgNC40YfQvdC+INC90Y/QutC+0Lkg0L7RgiDRgtGP0YUg0YfRgNC10Lcg0LrQvtC80LDQvdC00LDRgtCwOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIuKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70LXQvSDRg9C60LDQt9Cw0YLQtdC7OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAi4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L3QsNGB0YLRgNC+0LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMxNgorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICLigJ4lc+KAnCDRidC1INGB0LUg0L/RgNC10LLRitGA0L3QtSDQsiDQvtCx0LXQutGCINC40LfQstGK0L0g0LrQu9C+0L3QuNGC0LUhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICLigJ4lc+KAnCDRgdC1INC/0YDQtdCy0YrRgNC90LAg0LIg0L7QsdC10LrRgiDQuNC30LLRitC9INC60LvQvtC90LjRgtC1ISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI3CisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgItCe0LrQsNGB0YLRgNGP0L3QtSDQvdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAi0LDQtNGA0LXRgTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIg4pePIFvRidC1INCx0YrQtNC1INC+0LrQsNGB0YLRgNC10L3Qvl0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM1NAorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiIOKXjyBb0L7QutCw0YHRgtGA0LXQvdC+XSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzk5Cittc2dpZCAicHJ1bmUgcmVtb3RlcyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAi0L7QutCw0YHRgtGA0Y/QvdC1INC90LAg0L7Qs9C70LXQtNCw0LvQsNGC0LAg0L3QsCDQvtGC0LTQsNC70LXRh9C10L3QuNGC0LUg0YXRgNCw0L3QuNC70LjRidCwINGB0LvQtdC0INC00L7RgdGC0LDQstGP0L3QtSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDY1IGJ1aWx0aW4vcmVtb3RlLmM6MTUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICLQndGP0LzQsCDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCDQuNC80LUg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4NQorbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQutC70L7QvSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDkyCittc2dpZCAibm8gcmVtb3RlIHNwZWNpZmllZCIKK21zZ3N0ciAi0L3QtSDQtSDRg9C60LDQt9Cw0L3QviDQvtGC0LTQsNC70LXRh9C10L3QviDRhdGA0LDQvdC40LvQuNGJ0LUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUxNAorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICLQv9GA0L7QvNGP0L3QsCDQvdCwINCw0LTRgNC10YHQuNGC0LUg0LfQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MTYKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LDQtNGA0LXRgdC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MTgKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LDQtNGA0LXRgdC4IgorCisjIEZJWE1FIG1lc3NhZ2UgLSBpbmNvbXBhdGlibGUKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUyNQorbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLS1hZGTigJwg0Lgg4oCeLS1kZWxldGXigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU2NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9ICjRgdGC0LDRgCkg0YTQvtGA0LzQsNGCINC30LAg0LDQtNGA0LXRgTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU3MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgItCi0LDQutGK0LIg0LDQtNGA0LXRgSDQvdC1INC1INC+0YLQutGA0LjRgjogJXMiCisKKyMgRklYTUUgQ0hFQ0sgTUVBTklORworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTc1Cittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICLQndC40LrQvtC5INC+0YIg0LDQtNGA0LXRgdC40YLQtSwg0LrQvtC40YLQviDQvdC1INGB0LAg0LfQsCDQuNC30YLQu9Cw0YHQutCy0LDQvdC1LCDQvdGP0LzQsCDQtNCwINGB0LUg0LjQt9GC0YDQuNC1IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1ODkKK21zZ2lkICJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIgorbXNnc3RyICLQv9C+0LLQtdGH0LUg0L/QvtC00YDQvtCx0L3QvtGB0YLQuC4g0J/QvtGB0YLQsNCy0Y8g0YHQtSDQv9GA0LXQtCDQv9C+0LTQutC+0LzQsNC90LTQsCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgW9Ce0J/QptCY0K/igKZdIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE1OQorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICLQv9Cw0LrQtdGC0LjRgNCw0L3QtSDQvdCwINCy0YHQuNGH0LrQviDQsiDQv9Cw0LrQtdGCIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2MQorbXNnaWQgInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiCittc2dzdHIgIiIKKyLRgdGK0YnQvtGC0L4g0LrQsNGC0L4g0L7Qv9GG0LjRj9GC0LAg4oCeLWHigJwuINCU0L7Qv9GK0LvQvdC40YLQtdC70L3QviDigJQg0L3QtdC00L7RgdGC0LjQttC40LzQuNGC0LUg0L7QsdC10LrRgtC4INC00LAg0YHRgtCw0L3QsNGCICIKKyLQvdC10L/QsNC60LXRgtC40YDQsNC90LgiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTY0Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICIiCisi0L/RgNC10LzQsNGF0LLQsNC90LUg0L3QsCDQvdC10L3Rg9C20L3QuNGC0LUg0L/QsNC60LXRgtC40YDQsNC90Lgg0YTQsNC50LvQvtCy0LUg0Lgg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LSIKKyJwcnVuZS1wYWNrZWTigJwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTY2Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgItC/0L7QtNCw0LLQsNC90LUg0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tLW5vLXJldXNlLWRlbHRh4oCcINC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1wYWNrLW9iamVjdHPigJwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTY4Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLW9iamVjdCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICIiCisi0L/QvtC00LDQstCw0L3QtSDQvdCwINC+0L/RhtC40Y/RgtCwIOKAni0tbm8tcmV1c2Utb2JqZWN04oCcINC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1wYWNrLW9iamVjdHPigJwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTcwCittc2dpZCAiZG8gbm90IHJ1biBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorbXNnc3RyICLQsdC10Lcg0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mb+KAnCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzMKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAi0L/QvtC00LDQstCw0L3QtSDQvdCwINC+0L/RhtC40Y/RgtCwIOKAni0tbG9jYWzigJwg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0LXBhY2stb2JqZWN0c+KAnCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzUKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQuCDQt9Cw0L/QuNGB0LLQsNC90LUg0L3QsCDQuNC90LTQtdC60YHQuCDQvdCwINCx0LDQt9CwINCx0LjRgtC+0LLQuCDQvNCw0YHQutC4IgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3NgorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICLQtdCy0YDQuNGB0YLQuNGH0L3QsCDQtNCw0YLQsCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzcKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICIiCisi0L/RgNC4INC60L7QvNCx0LjQvdC40YDQsNC90LXRgtC+INGBINC+0L/RhtC40Y/RgtCwIOKAni1B4oCcIOKAlCDQsdC10Lcg0YDQsNC30L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1INC/0L4g0YHRgtCw0YDQuCDQvtGCICIKKyLRgtC+0LLQsCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzkKK21zZ2lkICJzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCBmb3IgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgItGA0LDQt9C80LXRgCDQvdCwINC/0YDQvtC30L7RgNC10YbQsCDQt9CwINC00LXQu9GC0LAg0LrQvtC80L/RgNC10YHQuNGP0YLQsCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODAgYnVpbHRpbi9yZXBhY2suYzoxODQKK21zZ2lkICJieXRlcyIKK21zZ3N0ciAi0LHQsNC50YLQvtCy0LUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgxCittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgIiIKKyLRgdGK0YnQvtGC0L4g0LrQsNGC0L4g0LPQvtGA0L3QsNGC0LAg0L7Qv9GG0LjRjywg0L3QviDQvtCz0YDQsNC90LjRh9C10L3QuNC10YLQviDQtNCwINC1INC/0L4g0YDQsNC30LzQtdGAINC90LAg0L/QsNC80LXRgtGC0LAsINCwINC90LUgIgorItC/0L4g0LHRgNC+0Y8g0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4MworbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aCIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQsNCy0LDQvdC1INC90LAg0LzQsNC60YHQuNC80LDQu9C90LDRgtCwINC00YrQu9Cx0L7Rh9C40L3QsCDQvdCwINC00LXQu9GC0LDRgtCwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4NQorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70LXQvSDRgNCw0LfQvNC10YAg0L3QsCDQstGB0LXQutC4INC/0LDQutC10YIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTg3Cittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgItC/0YDQtdC/0LDQutC10YLQuNGA0LDQvdC1INC90LAg0L7QsdC10LrRgtC40YLQtSDQsiDQv9Cw0LrQtdGC0Lgg0LHQtdC70Y/Qt9Cw0L3QuCDRgSDigJ4ua2VlcOKAnCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgItC90LXRg9GB0L/QtdGI0L3QviDQuNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTkKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0g0J7QkdCV0JrQoiDQl9CQ0JzQr9Cd0JAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIwCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0INCe0JHQldCa0KIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCDQn9Ce0JTQkNCS0JDQndCVIFvQoNCe0JTQmNCi0JXQm+KApl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kINCe0JHQldCa0KLigKYiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ90KTQntCg0JzQkNCiXSBbLWwgW9Co0JDQkdCb0J7QnV1dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjUgYnVpbHRpbi9yZXBsYWNlLmM6MzYzIGJ1aWx0aW4vcmVwbGFjZS5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C90L4g0LjQvNC1INC90LAg0L7QsdC10LrRgjog4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgItC10YLQuNC60LXRgtGK0YIg0L/RgNC4INGB0LvQuNCy0LDQvdC1INCyINC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcIGUg0L3QtdC/0YDQsNCy0LjQu9C10L0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgItC10YLQuNC60LXRgtGK0YIg0L/RgNC4INGB0LvQuNCy0LDQvdC1INCyINC/0L7QtNCw0LLQsNC90LXRgtC+IOKAniVz4oCcIGUg0L3QtdC/0YDQsNCy0LjQu9C10L0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisi0J/RitGA0LLQvtC90LDRh9Cw0LvQvdC+0YLQviDQv9C+0LTQsNCy0LDQvdC1IOKAniVz4oCcINGB0YrQtNGK0YDQttCwINC10YLQuNC60LXRgtCwINC/0YDQuCDRgdC70LjQstCw0L3QtSDigJ4lc+KAnCwg0LrQvtC50YLQviDQtSAiCisi0LjQt9GF0LLRitGA0LvQtdC9LCDQt9Cw0YLQvtCy0LAg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tLWVkaXTigJwsINCwINC90LUg4oCeLS1ncmFmdOKAnC4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZS4iCittc2dzdHIgItCf0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0L/QvtC00LDQstCw0L3QtSDigJ4lc+KAnCDQtSDRgSDQv9C+0LTQv9C40YEg0L3QsCBHUEcuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDIKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAi0J/QvtC00L/QuNGB0YrRgiDRidC1INCx0YrQtNC1INC/0YDQtdC80LDRhdC90LDRgiDQsiDQt9Cw0LzQtdC90Y/RidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1ISIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICLQt9Cw0LzQtdC90Y/RidC+0YLQviDQv9C+0LTQsNCy0LDQvdC1INC30LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC90L4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzMgorbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC30LAg0LfQsNC80Y/QvdCwIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzMKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1INC30LAg0LfQsNC80Y/QvdCwIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzQKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAi0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0Ykg0L7QsdC10LrRgiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM1Cittc2dpZCAiY2hhbmdlIGEgY29tbWl0J3MgcGFyZW50cyIKK21zZ3N0ciAi0YHQvNGP0L3QsCDQvdCwINGA0L7QtNC40YLQtdC70LjRgtC1INC90LAg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM2Cittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAi0LfQsNC80Y/QvdCwINC90LAg0YPQutCw0LfQsNGC0LXQu9GPLCDQsNC60L4g0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNworbXNnaWQgImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIKK21zZ3N0ciAi0LHQtdC3INGE0L7RgNC80LDRgtC40YDQsNC90L4g0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitC00YrRgNC20LDQvdC40LXRgtC+IOKAlCDQt9CwINC+0L/RhtC40Y/RgtCwIOKAni0tZWRpdOKAnCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM4Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICLQuNC30L/QvtC70LfQstCw0L3QtSDQvdCwINGC0L7Qt9C4INCk0J7QoNCc0JDQoiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMgorbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0INCf0KrQouKApiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NTcKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAi0YDQtdCz0LjRgdGC0YDQuNGA0LDQvdC1INC90LAg0YfQuNGB0YLQuCDQutC+0YDQtdC60YbQuNC4INC90LAg0LrQvtC90YTQu9C40LrRgtC4INCyINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjYKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBb0J/QntCU0JDQktCQ0J3QlV0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNworbXNnaWQgImdpdCByZXNldCBbLXFdIDx0cmVlLWlzaD4gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSDQo9Ca0JDQl9CQ0KLQldCbX9Ca0KrQnF/QlNCq0KDQktCeIFstLV0g0J/QqtCi0JjQqdCQ4oCmIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjgKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFvQo9Ca0JDQl9CQ0KLQldCbX9Ca0KrQnF/QlNCq0KDQktCeXSBbLS1dIFvQn9Cq0KLQmNCp0JDigKZdIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAi0YHQvNC10YHQtdC90L4gKG1peGVkKSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAic29mdCIKK21zZ3N0ciAi0LzQtdC60L4gKHNvZnQpIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJoYXJkIgorbXNnc3RyICLQv9GK0LvQvdC+IChoYXJkKSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAibWVyZ2UiCittc2dzdHIgItGB0LvRj9GC0L4gKG1lcmdlKSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAia2VlcCIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDRidC+IChrZWVwKSIKKworIzogYnVpbHRpbi9yZXNldC5jOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0LUg0L/QvtCy0YDQtdC00LXQvS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo3NgorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iCittc2dzdHIgItCU0YrRgNCy0L7RgtC+LCDRgdC+0YfQtdC90L4g0L7RgiDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtC+LiIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICLQlNGK0YDQstC+0YLQviwg0YHQvtGH0LXQvdC+INC+0YIg4oCeJXPigJwsINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtGC0LrRgNC40YLQvi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0YHQvtGH0Lgg0LrRitC8IOKAniVz4oCcIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDRgdC1INC40LfQstGK0YDRiNC4ICVzINC30LDQvdGD0LvRj9Cy0LDQvdC1INC/0L4g0LLRgNC10LzQtSDQvdCwINGB0LvQuNCy0LDQvdC1LiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3NgorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgItC/0L4t0LzQsNC70LrQviDQv9C+0LTRgNC+0LHQvdC+0YHRgtC4LCDQtNCwINGB0LUg0LjQt9Cy0LXQttC00LDRgiDRgdCw0LzQviDQs9GA0LXRiNC60LjRgtC1IgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjc4Cittc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgItC40L3QtNC10LrRgdCwINC4INGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcLCDQsdC10Lcg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNzkKK21zZ2lkICJyZXNldCBvbmx5IEhFQUQiCittc2dzdHIgItGB0LDQvNC+INGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcLCDQsdC10Lcg0LjQvdC00LXQutGB0LAg0Lgg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyMgRklYTUUgdnMgbWFuIHBhZ2UKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyODEgYnVpbHRpbi9yZXNldC5jOjI4MworbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcLCDQuNC90LTQtdC60YHQsCDQuCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIyBGSVhNRSB2cyBtYW4gcGFnZQorIzogYnVpbHRpbi9yZXNldC5jOjI4NQorbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAi0LfQsNC90YPQu9GP0LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCwg0L3QviDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQu9C+0LrQsNC70L3QuNGC0LUg0L/RgNC+0LzQtdC90LgiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyODgKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHJlbW92ZWQgcGF0aHMgd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiIgorItC+0YLQsdC10LvRj9C30LLQsNC90LUg0YHQsNC80L4g0L3QsCDRhNCw0LrRgtCwLCDRh9C1INC40LfRgtGA0LjRgtC40YLQtSDQv9GK0YLQuNGJ0LAg0YnQtSDQsdGK0LTQsNGCINC00L7QsdCw0LLQtdC90Lgg0L/Qvi3QutGK0YHQvdC+IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgItCh0YLQvtC50L3QvtGB0YLRgtCwIOKAniVz4oCcINC90LUg0LUg0YDQsNC30L/QvtC30L3QsNGC0LAg0LrQsNGC0L4g0YHRitGJ0LXRgdGC0LLRg9Cy0LDRidCwINCy0LXRgNGB0LjRjy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDggYnVpbHRpbi9yZXNldC5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC1INGA0LDQt9C/0L7Qt9C90LDRgiDQutCw0YLQviDQvtCx0LXQutGCLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIuKAniVz4oCcINC90LUg0LUg0YDQsNC30L/QvtC30L3QsNGCINC60LDRgtC+INC00YrRgNCy0L4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIyCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICIiCisi0L7Qv9GG0LjRj9GC0LAg4oCeLS1wYXRjaOKAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg0LLRgdGP0LrQsCDQvtGCINC+0L/RhtC40LjRgtC1IOKAni0taGFyZC8tLW1peGVkLy0tc29mdOKAnCIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzMQorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorItC+0L/RhtC40Y/RgtCwIOKAni0tbWl4ZWTigJwg0L3QtSDQsdC40LLQsCDQtNCwINGB0LUg0LjQt9C/0L7Qu9C30LLQsCDQt9Cw0LXQtNC90L4g0YEg0L/RitGC0LjRidCwLiDQktC80LXRgdGC0L4g0YLQvtCy0LAgIgorItC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgcmVzZXQgLS0g0J/QqtCi4oCm4oCcLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDQuNC30LLRitGA0YjQuNGC0LUgJXMg0LfQsNC90YPQu9GP0LLQsNC90LUsINC60L7Qs9Cw0YLQviDRgdGC0LUg0LfQsNC00LDQu9C4INCf0KrQoi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgItCSINCz0L7Qu9C+INGF0YDQsNC90LjQu9C40YnQtSDQvdC1INC80L7QttC1INC00LAg0LjQt9Cy0YrRgNGI0LjRgtC1ICVzINC30LDQvdGD0LvRj9Cy0LDQvdC1IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQ3Cittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAni1O4oCcINC1INGB0YrQstC80LXRgdGC0LjQvNCwINGB0LDQvNC+INGBIOKAni0tbWl4ZWTigJwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjQKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAi0J/RgNC+0LzQtdC90Lgg0LjQt9Cy0YrQvSDQuNC90LTQtdC60YHQsCDRgdC70LXQtCDQt9Cw0L3Rg9C70Y/QstCw0L3QtdGC0L46IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICLQmNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L3Rg9C70LXQvSDQutGK0Lwg0LLQtdGA0YHQuNGPIOKAniVz4oCcLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3NAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgItCd0L7QstC40Y/RgiDQuNC90LTQtdC60YEg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9C40YHQsNC9LiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzozNjEKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBb0J7Qn9Cm0JjQr+KApl0gLS0gW9CQ0KDQk9Cj0JzQldCd0KLigKZdIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2NgorbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAi0LfQsNC00LDQtNC10L3QuNGP0YIg0L3QuNC3IOKAni0t4oCcINC00LAg0YHQtSDRgtGK0LvQutGD0LLQsCDQutCw0YLQviDQsNGA0LPRg9C80LXQvdGCIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2OAorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAi0YHQv9C40YDQsNC90LUg0L3QsCDQsNC90LDQu9C40LfQsCDRgdC70LXQtCDQv9GK0YDQstC40Y8g0LDRgNCz0YPQvNC10L3Rgiwg0LrQvtC50YLQviDQvdC1INC1INC+0L/RhtC40Y8iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzcxCittc2dpZCAib3V0cHV0IGluIHN0dWNrIGxvbmcgZm9ybSIKK21zZ3N0ciAi0LjQt9GF0L7QtCDQsiDQtNGK0LvQs9C40Y8g0YTQvtGA0LzQsNGCIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjQ5OQorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBb0J7Qn9Cm0JjQr+KApl0gLS0gW9CQ0KDQk9Cj0JzQldCd0KLigKZdXG4iCisiICAg0LjQu9C4OiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgW9CQ0KDQk9Cj0JzQldCd0KLigKZdXG4iCisiICAg0LjQu9C4OiBnaXQgcmV2LXBhcnNlIFvQntCf0KbQmNCv4oCmXSBb0JDQoNCT0KPQnNCV0J3QouKApl1cbiIKKyJcbiIKKyLQl9CwINC/0L7QstC10YfQtSDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0YrRgNCy0LjRjyDQstCw0YDQuNCw0L3RgiDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0iCisiaOKAnCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMgorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFvQntCf0KbQmNCv4oCmXSDQo9Ca0JDQl9CQ0KLQldCbX9Ca0KrQnF/Qn9Ce0JTQkNCS0JDQndCV4oCmIgorCisjOiBidWlsdGluL3JldmVydC5jOjIzCittc2dpZCAiZ2l0IHJldmVydCA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCByZXZlcnQg0J/QntCU0JrQntCc0JDQndCU0JAiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjgKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgW9Ce0J/QptCY0K/igKZdINCj0JrQkNCX0JDQotCV0Jtf0JrQqtCcX9Cf0J7QlNCQ0JLQkNCd0JXigKYiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjkKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sg0J/QntCU0JrQntCc0JDQndCU0JAiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzOiDQvtC/0YbQuNGP0YLQsCDigJ4lc+KAnCDQtSDQvdC10YHRitCy0LzQtdGB0YLQuNC80LAg0YEg4oCeJXPigJwiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODAKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICLQt9Cw0LLRitGA0YjQstCw0L3QtSDQvdCwINC/0L7RgNC10LTQuNGG0LAg0L7RgiDQvtGC0LHQuNGA0LDQvdC40Y8g0LjQu9C4INC+0YLQvNC10L3QuCDQvdCwINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MQorbXNnaWQgInJlc3VtZSByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgItC30LDQstGK0YDRiNCy0LDQvdC1INC90LAg0L/QvtGA0LXQtNC40YbQsCDQvtGCINC+0YLQsdC40YDQsNC90LjRjyDQuNC70Lgg0L7RgtC80LXQvdC4INC90LAg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JldmVydC5jOjgyCittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi0L7RgtC80Y/QvdCwINC90LAg0L/QvtGA0LXQtNC40YbQsCDQvtGCINC+0YLQsdC40YDQsNC90LjRjyDQuNC70Lgg0L7RgtC80LXQvdC4INC90LAg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JldmVydC5jOjgzCittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgItCx0LXQtyDQsNCy0YLQvtC80LDRgtC40YfQvdC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODQKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0YDQtdC00LDQutGC0LjRgNCw0L3QtSDQvdCwINGB0YrQvtCx0YnQtdC90LjQtdGC0L4g0L/RgNC4INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODcKK21zZ2lkICJwYXJlbnQgbnVtYmVyIgorbXNnc3RyICLQvdC+0LzQtdGAINC90LAg0YDQvtC00LjRgtC10LvRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4OQorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICLRgdGC0YDQsNGC0LXQs9C40Y8g0L3QsCDRgdC70LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MAorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAi0L7Qv9GG0LjRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MQorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgItC+0L/RhtC40Y8g0LfQsCDRgdGC0YDQsNGC0LXQs9C40Y/RgtCwINC90LAg0YHQu9C40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA0Cittc2dpZCAiYXBwZW5kIGNvbW1pdCBuYW1lIgorbXNnc3RyICLQtNC+0LHQsNCy0Y/QvdC1INC90LAg0LjQvNC10YLQviDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNQorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi0L/QvtC30LLQvtC70Y/QstCw0L3QtSDQvdCwINGC0YDQuNCy0LjQsNC70L3QuCDRgdC70LjQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNgorbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICLQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQv9GK0YDQstC+0L3QsNGH0LDQu9C90L4g0L/RgNCw0LfQvdC40YLQtSDQv9C+0LTQsNCy0LDQvdC40Y8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA3Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICLQv9C+0LfQstC+0LvRj9Cy0LDQvdC1INC90LAg0L/RgNCw0LfQvdC4INGB0YrQvtCx0YnQtdC90LjRjyDQv9GA0Lgg0L/QvtC00LDQstCw0L3QtSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDgKK21zZ2lkICJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAi0LfQsNC/0LDQt9Cy0LDQvdC1INC90LAg0LjQt9C70LjRiNC90LjRgtC1LCDQv9GA0LDQt9C90Lgg0L/QvtC00LDQstCw0L3QuNGPIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInByb2dyYW0gZXJyb3IiCittc2dzdHIgItCz0YDQtdGI0LrQsCDQsiDQv9GA0L7Qs9GA0LDQvNCw0YLQsCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxOTcKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICLQvdC10YPRgdC/0LXRiNC90LAg0L7RgtC80Y/QvdCwIgorCisjOiBidWlsdGluL3JldmVydC5jOjIxMgorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAi0L3QtdGD0YHQv9C10YjQvdC+INC+0YLQsdC40YDQsNC90LUiCisKKyM6IGJ1aWx0aW4vcm0uYzoxNworbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFvQntCf0KbQmNCv4oCmXSBbLS1dINCk0JDQmdCb4oCmIgorCisjOiBidWlsdGluL3JtLmM6NjUKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgKG9yIG9uZSBvZiBpdHMgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisidXNlcyBhIC5naXQgZGlyZWN0b3J5OiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgc3VibW9kdWxlcyAob3Igb25lIG9mIHRoZWlyIG5lc3RlZCBzdWJtb2R1bGVzKVxuIgorInVzZSBhIC5naXQgZGlyZWN0b3J5OiIKK21zZ3N0clswXSAiIgorItGB0LvQtdC00L3QuNGP0YIg0L/QvtC00LzQvtC00YPQuyDQuNC70Lgg0L3Rj9C60L7QuSDQvtGCINC90LXQs9C+0LLQuNGC0LUg0L/QvtC00LzQvtC00YPQu9C4INC40LfQv9C+0LvQt9Cy0LDRgiDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwICIKKyLQuNC80LVcbiIKKyLigJ4uZ2l04oCcOiIKK21zZ3N0clsxXSAiIgorItGB0LvQtdC00L3QuNGC0LUg0L/QvtC00LzQvtC00YPQu9C4INC40LvQuCDQvdGP0LrQvtC4INC+0YIg0YLQtdGF0L3QuNGC0LUg0L/QvtC00LzQvtC00YPQu9C4INC40LfQv9C+0LvQt9Cy0LDRgiDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwICIKKyLQuNC80LVcbiIKKyLigJ4uZ2l04oCcOiIKKworIzogYnVpbHRpbi9ybS5jOjcxCittc2dpZCAiIgorIlxuIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIlxuIgorIijQsNC60L4g0LjRgdC60LDRgtC1INC00LAg0LPQuCDQuNC30YLRgNC40LXRgtC1INC30LDQtdC00L3QviDRgSDRhtGP0LvQsNGC0LAg0LjQvCDQuNGB0YLQvtGA0LjRjywg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ5ybSAtcmbigJwpIgorCisjOiBidWlsdGluL3JtLmM6MjMwCittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIiIKKyLRgdC70LXQtNC90LjRj9GCINGE0LDQudC7INC1INGB0YrRgSDRgdGK0LTRitGA0LbQsNC90LjQtSDQsiDQuNC90LTQtdC60YHQsCDRgNCw0LfQu9C40YfQvdC+INC+0YIg0YLQtdC60YPRidC+0YLQviDQvNGDINGB0YrQtNGK0YDQttCw0L3QuNC1ICIKKyLQuFxuIgorItGA0LDQt9C70LjRh9C90L4g0L7RgiDRgdGK0L7RgtCy0LXRgtGB0YLQstCw0YnQvtGC0L4g0L3QsCBIRUFEOiIKK21zZ3N0clsxXSAiIgorItGB0LvQtdC00L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0YHQsCDRgdGK0YEg0YHRitC00YrRgNC20LDQvdC40LUg0LIg0LjQvdC00LXQutGB0LAg0YDQsNC30LvQuNGH0L3QviDQvtGCINGC0LXQutGD0YnQvtGC0L4g0LjQvCAiCisi0YHRitC00YrRgNC20LDQvdC40LUg0LhcbiIKKyLRgNCw0LfQu9C40YfQvdC+INC+0YIg0YHRitC+0YLQstC10YLRgdGC0LLQsNGJ0L7RgtC+INC90LAgSEVBRDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzUKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIijQt9CwINC/0YDQuNC90YPQtNC40YLQtdC70L3QviDQuNC30YLRgNC40LLQsNC90LUg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tZuKAnCkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzkKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICLRgdC70LXQtNC90LjRj9GCINGE0LDQudC7INC1INGBINC/0YDQvtC80LXQvdC10L3QviDRgdGK0LTRitGA0LbQsNC90LjQtSDQsiDQuNC90LTQtdC60YHQsDoiCittc2dzdHJbMV0gItGB0LvQtdC00L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0YHQsCDRgSDQv9GA0L7QvNC10L3QtdC90L4g0YHRitC00YrRgNC20LDQvdC40LUg0LIg0LjQvdC00LXQutGB0LA6IgorCisjOiBidWlsdGluL3JtLmM6MjQzIGJ1aWx0aW4vcm0uYzoyNTQKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIijQt9CwINC30LDQv9Cw0LfQstCw0L3QtSDQvdCwINGE0LDQudC70LAg0LjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tLWNhY2hlZOKAnCwg0LAg0LfQsCDQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L5cbiIKKyLQuNC30YLRgNC40LLQsNC90LUg4oCUIOKAni1m4oCcKSIKKworIzogYnVpbHRpbi9ybS5jOjI1MQorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ3N0clswXSAi0YHQu9C10LTQvdC40Y/RgiDRhNCw0LnQuyDQtSDRgSDQv9GA0L7QvNC10L3QtdC90L4g0YHRitC00YrRgNC20LDQvdC40LUiCittc2dzdHJbMV0gItGB0LvQtdC00L3QuNGC0LUg0YTQsNC50LvQvtCy0LUg0YHQsCDRgSDQv9GA0L7QvNC10L3QtdC90L4g0YHRitC00YrRgNC20LDQvdC40LUiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNjkKK21zZ2lkICJkbyBub3QgbGlzdCByZW1vdmVkIGZpbGVzIgorbXNnc3RyICLQtNCwINC90LUg0YHQtSDQuNC30LLQtdC20LTQsNGCINC40LfRgtGA0LjRgtC40YLQtSDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi9ybS5jOjI3MAorbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0YHQsNC80L4g0L7RgiDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9ybS5jOjI3MQorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICLQstGK0L/RgNC10LrQuCDQv9GA0L7QstC10YDQutCw0YLQsCDQt9CwINCw0LrRgtGD0LDQu9C90L7RgdGC0YLQsCDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviIKKworIzogYnVpbHRpbi9ybS5jOjI3MgorbXNnaWQgImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIgorbXNnc3RyICLRgNC10LrRg9GA0YHQuNCy0L3QviDQuNC30YLRgNC40LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzQKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAiIgorItC40LfRhdC+0LTQvdC40Y/RgiDQutC+0LQg0LTQsCDQtSAwLCDQtNC+0YDQuCDQsNC60L4g0L3QuNC60L7QuSDRhNCw0LnQuyDQvWUgZSDQvdCw0L/QsNGB0L3QsNC7INGBINGI0LDQsdC70L7QvdCwINC30LAgIgorItC40LfRgtGA0LjQstCw0L3QtSIKKworIzogYnVpbHRpbi9ybS5jOjMxNworbXNnaWQgIlBsZWFzZSwgc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorItCX0LAg0LTQsCDQv9GA0L7QtNGK0LvQttC40YLQtSwg0LjQu9C4INCy0LrQsNGA0LDQudGC0LUg0L/RgNC+0LzQtdC90LjRgtC1INC/0L4g0YTQsNC50LvQsCDigJ4uZ2l0bW9kdWxlc+KAnCDQsiDQuNC90LTQtdC60YHQsCxcbiIKKyLQuNC70Lgg0LPQuCDRgdC60LDRgtCw0LnRgtC1IgorCisjOiBidWlsdGluL3JtLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgItCx0LXQtyDQuNC30L/QvtC70LfQstCw0L3QtdGC0L4g0L3QsCDQvtC/0YbQuNGP0YLQsCDigJ4tcuKAnCDigJ4lc+KAnCDQvdGP0LzQsCDQtNCwINGB0LUg0LjQt9GC0YDQuNC1INGA0LXQutGD0YDRgdC40LLQvdC+IgorCisjOiBidWlsdGluL3JtLmM6Mzc0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtOiDigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30YLRgNC40LUiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxMworbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICJnaXQgc2hvcnRsb2cgW9Ce0J/QptCY0K/igKZdIFvQlNCY0JDQn9CQ0JfQntCdX9Cd0JBf0JLQldCg0KHQmNCY0KLQlV0gW1stLV0gW9Cf0KrQouKApl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgYXV0aG9yOiAlcyIKK21zZ3N0ciAi0JDQstGC0L7RgNGK0YIg0LvQuNC/0YHQstCwOiAlcyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzMAorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAi0L/QvtC00YDQtdC00LHQsCDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0L/QviDQsdGA0L7RjyDQv9C+0LTQsNCy0LDQvdC40Y8g0L7RgiDQsNCy0YLQvtGAIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjMyCittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgItCR0LXQtyDQvtC/0LjRgdCw0L3QuNGPINC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDigJQg0LTQsCDRgdC1INC/0L7QutCw0LfQstCwINGB0LDQvNC+INCx0YDQvtGPINC/0L7QtNCw0LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzNAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgItCY0LfQstC10LbQtNCw0L3QtSDQvdCwINCw0LTRgNC10YHQsCDQvdCwINC1LdC/0L7RidCwINC30LAg0LLRgdC10LrQuCDQsNCy0YLQvtGAIgorCisjIEZJWE1FIHdoeSBpcyB0aGlzIHNvIHNob3J0CisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjM1Cittc2dpZCAid1ssaTFbLGkyXV0iCittc2dzdHIgItCo0JjQoNCe0KfQmNCd0JBbLNCe0KLQodCi0KrQn18xWyzQntCi0KHQotCq0J9fMl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjM2Cittc2dpZCAiTGluZXdyYXAgb3V0cHV0IgorbXNnc3RyICIiCisi0J/RgNC10L3QsNGB0Y/QvdC1INC90LAg0YDQtdC00L7QstC10YLQtSDQtNC+INGC0LDQt9C4INC+0LHRidCwINCo0JjQoNCe0KfQmNCd0JAgKDc2KSwg0YEg0J7QotCh0KLQqtCfXzEgKDYpINC30LAg0L/RitGA0LLQuNGPICIKKyLRgNC10LQg0Lgg0J7QotCh0KLQqtCfXzIgKDkpINC30LAg0L7RgdGC0LDQvdCw0LvQuNGC0LUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo5Cittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiICAgIFstLWN1cnJlbnRdIFstLWNvbG9yWz3QmtCe0JPQkF0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiICAgIFstLW1vcmU90JHQoNCe0JkgfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIiAgICBbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyjQoNCV0JLQmNCX0JjQryB8INCj0JrQkNCX0JDQotCV0Jsp4oCmXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEzCittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz3QkdCg0J7QmVss0JHQkNCX0JBdXSBbLS1saXN0XSBb0KPQmtCQ0JfQkNCi0JXQm10iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTkKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0LvQtdC00Y/RidC40YLQtSDQuCDQu9C+0LrQsNC70L3QuNGC0LUg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdC70LXQtNGP0YnQuNGC0LUg0LrQu9C+0L3QuCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MworbXNnaWQgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giCittc2dzdHIgItC+0YbQstC10YLRj9Cy0LDQvdC1INC90LAg4oCeKiErLeKAnCDRgdC/0L7RgNC10LQg0LrQu9C+0L3QuNGC0LUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjUKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YLQsNC60YrQsiDQkdCg0J7QmSDQv9C+0LTQsNCy0LDQvdC40Y8g0L7RgiDQvtCx0YnQuNGPINC/0YDQtdC00YjQtdGB0YLQstC10L3QuNC6IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICLRgdC40L3QvtC90LjQvCDQvdCwIOKAnm1vcmU9LTHigJwiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAi0LHQtdC3INC90LjQt9C+0LLQtSDQt9CwINC40LzQtdC90LDRgtCwINC90LAg0LrQu9C+0L3QuNGC0LUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzAKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAi0LLQutC70Y7Rh9Cy0LDQvdC1INC4INC90LAg0YLQtdC60YPRidC40Y8g0LrQu9C+0L0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzIKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgItC40LzQtdC90YPQstCw0L3QtSDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAg0YEg0LjQvNC10L3QsNGC0LAg0LjQvCDQvdCwINC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCy0YrQt9C80L7QttC90LjRgtC1INCx0LDQt9C4INC30LAg0YHQu9C40LLQsNC90LjRjyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NgorbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINC90LXQtNC+0YHRgtC40LbQuNC80LjRgtC1INGD0LrQsNC30LDRgtC10LvQuCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3OAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/QvtC00LDQstCw0L3QuNGP0YLQsCDQsiDRgtC+0L/QvtC70L7Qs9C40YfQtdGB0LrQsCDQv9C+0LTRgNC10LTQsdCwIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjgxCittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC/0L7QtNCw0LLQsNC90LjRj9GC0LAsINC60L7QuNGC0L4g0L3QtSDRgdCwINC+0YIg0L/RitGA0LLQuNGPINC60LvQvtC9IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjgzCittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdC70LjQstCw0L3QuNGP0YLQsCwg0LrQvtC40YLQviDQvNC+0LPQsNGCINC00LAg0YHQtSDQtNC+0YHRgtC40LPQvdCw0YIg0YHQsNC80L4g0L7RgiDQtdC00LjQvSDQstGA0YrRhSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4NQorbXNnaWQgInRvcG9sb2dpY2FsbHkgc29ydCwgbWFpbnRhaW5pbmcgZGF0ZSBvcmRlciB3aGVyZSBwb3NzaWJsZSIKK21zZ3N0ciAiIgorItGC0L7Qv9C+0LvQvtCz0LjRh9C10YHQutCwINC/0L7QtNGA0LXQtNCx0LAsINC/0YDQuCDQt9Cw0L/QsNC30LLQsNC90LUg0L3QsCDQv9C+0LTRgNC10LTQsdCw0YLQsCDQv9C+INC00LDRgtCwLCDQtNC+0LrQvtC70LrQvtGC0L4g0LVcbiIKKyLQstGK0LfQvNC+0LbQvdC+IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njg4Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICLQkdCg0J7QmVss0JHQkNCX0JBdIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njg5Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgItC/0L7QutCw0LfQstCw0L3QtSDQvdCwINC90LDQuS3QvNC90L7Qs9C+INCR0KDQntCZINC20YPRgNC90LDQu9C90Lgg0LfQsNC/0LjRgdCwINGBINC90LDRh9Cw0LvQviDRgdGK0L7RgtCy0LXRgtC90LDRgtCwINCR0JDQl9CQIgorCisjIEZJWE1FICogLT4gLi4uCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTAKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPdCn0JjQodCb0J5dXSBbLS1hYmJyZXZbPdCn0JjQodCb0J5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBb0KjQkNCR0JvQntCd4oCmXSIKKworIyBGSVhNRSBwYXR0ZXJuICYgcmVmLWxpc3QgbXVzdCBiZSBpbiA8PgorIzogYnVpbHRpbi9zaG93LXJlZi5jOjExCittc2dpZCAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9cGF0dGVybl0gPCByZWYtbGlzdCIKK21zZ3N0ciAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s90KjQkNCR0JvQntCdXSA8INCh0J/QmNCh0KrQml/QoV/Qo9Ca0JDQl9CQ0KLQldCb0JgiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzAKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQtdGC0LjQutC10YLQuNGC0LUgKNC80L7QttC1INC00LAg0YHQtSDQutC+0LzQsdC40L3QuNGA0LAg0YEg0LLRitGA0YXQvtCy0LXRgtC1KSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MQorbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINCy0YrRgNGF0L7QstC10YLQtSAo0LzQvtC20LUg0LTQsCDRgdC1INC60L7QvNCx0LjQvdC40YDQsCDRgSDQtdGC0LjQutC10YLQuNGC0LUpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcyCittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAi0YHRgtGA0L7Qs9CwINC/0YDQvtCy0LXRgNC60LAg0L3QsCDRg9C60LDQt9Cw0YLQtdC70LjRgtC1LCDQuNC30LjRgdC60LLQsCDRgdC1INGD0LrQsNC30LDRgtC10Lsg0YEg0L/RitC70LXQvSDQv9GK0YIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzUgYnVpbHRpbi9zaG93LXJlZi5jOjE3NworbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAi0LfQsNC00YrQu9C20LjRgtC10LvQvdC+INC40LfQstC10LbQtNCw0L3QtSDQuCDQvdCwINGD0LrQsNC30LDRgtC10LvRjyBIRUFEIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgItC00LAg0YHQtSDQuNC30LLQtdC20LTQsNGCINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0LjRgtC1INC90LAg0L7QsdC10LrRgtC40YLQtS3QtdGC0LjQutC10YLQuCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4MQorbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0YLQvtC30Lgg0JHQoNCe0Jkg0YbQuNGE0YDQuCDQvtGCINCy0YHRj9C60LAg0YHRg9C80LAg0L/QviBTSEExIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTg1Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIiIKKyLQsdC10Lcg0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQtdC30YPQu9GC0LDRgtC40YLQtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQgKNC/0L7Qu9C10LfQvdC+INGBINC+0L/RhtC40Y/RgtCwIOKAni0tIgorInZlcmlmeeKAnCkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODcKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQv9GA0LjQtdGC0Lgg0L7RgiDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINCy0YXQvtC0LCDQutC+0LjRgtC+INC70LjQv9GB0LLQsNGCINCyICIKKyLQu9C+0LrQsNC70L3QvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjcKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFvQntCf0KbQmNCv4oCmXSDQmNCc0JUgW9Cj0JrQkNCX0JDQotCV0JtdIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPG5hbWU+IgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0g0JjQnNCVIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAi0LHQtdC3INC40LfQstC10LbQtNCw0L3QtSDQvdCwINCz0YDQtdGI0LrQsCDQt9CwINC90LXRgdCy0YrRgNC30LDQvdC4ICjQvdC10YHQuNC80LLQvtC70L3QuCkg0YPQutCw0LfQsNGC0LXQu9C4IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAi0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0YHQuNC80LLQvtC70LXQvSDRg9C60LDQt9Cw0YLQtdC7IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICLQutGA0LDRgtC60LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDRg9C60LDQt9Cw0YLQtdC70Y8iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzU4Cittc2dpZCAicmVhc29uIgorbXNnc3RyICLQv9GA0LjRh9C40L3QsCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNTgKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAi0L/RgNC40YfQuNC90LAg0LfQsCDQvtCx0L3QvtCy0Y/QstCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjIKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl0gPHRhZ25hbWU+ICIKKyJbPGhlYWQ+XSIKK21zZ3N0ciAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSDQmNCU0JXQndCi0JjQpNCY0JrQkNCi0J7QoF/QndCQX9Ca0JvQrtCnXSBbLWZdIFstbSDQodCq0J7QkdCp0JXQndCY0JUgfCAtRiDQpNCQ0JnQm10gIgorItCV0KLQmNCa0JXQoiBb0JLQoNCq0KVdIgorCisjOiBidWlsdGluL3RhZy5jOjIzCittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQg0JXQotCY0JrQldCi4oCmIgorCisjIEZJWE1FIHRhYnVsYXRvcgorIzogYnVpbHRpbi90YWcuYzoyNAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyAtbCBbLW7QkdCg0J7QmV0gWy0tY29udGFpbnMg0J/QntCU0JDQktCQ0J3QlV0gWy0tcG9pbnRzLWF0INCe0JHQldCa0KJdIFxuIgorIiAgICAgICAgICAgW9Co0JDQkdCb0J7QneKApl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjYKK21zZ2lkICJnaXQgdGFnIC12IDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtdiDQldCi0JjQmtCV0KLigKYiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICLQvtCx0LXQutGCINGB0YrRgSDRgdCz0YDQtdGI0LXQvSDRhNC+0YDQvNCw0YIg0L/RgNC4IOKAniVz4oCcIgorCisjOiBidWlsdGluL3RhZy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIKK21zZ3N0ciAi0LjQvNC10YLQviDQvdCwINC10YLQuNC60LXRgtCwINC1INGC0LLRitGA0LTQtSDQtNGK0LvQs9C+OiDigJ4lLipz4oCc4oCmIgorCisjOiBidWlsdGluL3RhZy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLQtdGC0LjQutC10YLRitGCIOKAniVz4oCcINC90LUg0LUg0L7RgtC60YDQuNGCLiIKKworIzogYnVpbHRpbi90YWcuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICLQmNC30YLRgNC40YIg0LUg0LXRgtC40LrQtdGC0YrRgiDigJ4lc+KAnCAo0LHQtSDigJ4lc+KAnClcbiIKKworIzogYnVpbHRpbi90YWcuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHZlcmlmeSB0aGUgdGFnICclcyciCittc2dzdHIgItC10YLQuNC60LXRgtGK0YIg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtCy0LXRgNC10L0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZC5cbiIKK21zZ3N0ciAiIgorIlxuIgorItCS0YrQstC10LTQtdGC0LUg0YHRitC+0LHRidC10L3QuNC1INC30LAg0LXRgtC40LrQtdGC0LAuXG4iCisiICAlc1xuIgorItCg0LXQtNC+0LLQtdGC0LUsINC60L7QuNGC0L4g0LfQsNC/0L7Rh9Cy0LDRgiDRgSDigJ4lY+KAnCwg0YnQtSDQsdGK0LTQsNGCINC/0YDQvtC/0YPRgdC90LDRgtC4LlxuIgorCisjOiBidWlsdGluL3RhZy5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorbXNnc3RyICIiCisiXG4iCisi0JLRitCy0LXQtNC10YLQtSDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQtdGC0LjQutC10YIuXG4iCisiICAlc1xuIgorItCg0LXQtNC+0LLQtdGC0LUsINC60L7QuNGC0L4g0LfQsNC/0L7Rh9Cy0LDRgiDRgSDigJ4lY+KAnCwg0YHRitGJ0L4g0YnQtSDQsdGK0LTQsNGCINCy0LrQu9GO0YfQtdC90Lgg4oCUINC80L7QttC1INC00LAg0LPQuCAiCisi0LjQt9GC0YDQuNC10YLQtSDQstC40LUuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHNvcnQgc3BlY2lmaWNhdGlvbiAnJXMnIgorbXNnc3RyICLQt9Cw0LTQsNC00LXQvdCwINC1INC90LXQv9C+0LTQtNGK0YDQttCw0L3QsCDQv9C+0LTRgNC10LTQsdCwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3RhZy5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBzb3J0IHNwZWNpZmljYXRpb24gJyVzJyBpbiB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICLQt9Cw0LTQsNC00LXQvdCwINC1INC90LXQv9C+0LTQtNGK0YDQttCw0L3QsCDQv9C+0LTRgNC10LTQsdCwIOKAniVz4oCcINCyINC/0YDQvtC80LXQvdC70LjQstCw0YLQsCDigJ4lc+KAnCIKKworIzogYnVpbHRpbi90YWcuYzo0MjgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICLQtdGC0LjQutC10YLRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9C+0LTQv9C40YHQsNC9IgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAi0YTQsNC50LvRitGCINC30LAg0LXRgtC40LrQtdGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC9IgorCisjOiBidWlsdGluL3RhZy5jOjQ1NQorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgItC90LXQv9GA0LDQstC40LvQtdC9INCy0LjQtCDQvtCx0LXQutGCLiIKKworIzogYnVpbHRpbi90YWcuYzo0NjgKK21zZ2lkICJ0YWcgaGVhZGVyIHRvbyBiaWcuIgorbXNnc3RyICLQt9Cw0LPQu9Cw0LLQvdCw0YLQsCDRh9Cw0YHRgiDQvdCwINC10YLQuNC60LXRgtCwINC1INC/0YDQtdC60LDQu9C10L3QviDQtNGK0LvQs9CwLiIKKworIyBGSVhNRSAtIHdoeSB0aGUgPyAtIGVpdGhlciB3ZSBuZWVkIHRvIHNwZWNpZnkgb3Igbm90IG9yIGl0IGlzIGdvb2QgdG8gc3BlY2lmeQorIzogYnVpbHRpbi90YWcuYzo1MDQKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgItC70LjQv9GB0LLQsCDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQtdGC0LjQutC10YLQsCIKKworIzogYnVpbHRpbi90YWcuYzo1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAi0KHRitC+0LHRidC10L3QuNC10YLQviDQt9CwINC10YLQuNC60LXRgtCwINC1INC30LDQv9Cw0LfQtdC90L4g0LLRitCyINGE0LDQudC70LAg4oCeJXPigJxcbiIKKworIyBGSVhNRSAtIHRoZSBuYW1lIG9mIHRoZSBvcHRpb24gJy0tcG9pbnRzLWF0JworIzogYnVpbHRpbi90YWcuYzo1NTkKK21zZ2lkICJzd2l0Y2ggJ3BvaW50cy1hdCcgcmVxdWlyZXMgYW4gb2JqZWN0IgorbXNnc3RyICLQvtC/0YbQuNGP0YLQsCDigJ4tLXBvaW50cy1hdOKAnCDQuNC30LjRgdC60LLQsCDQsNGA0LPRg9C80LXQvdGCLdC+0LHQtdC60YIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0L3QsCDQvtCx0LXQutGCIOKAniVz4oCcIgorCisjOiBidWlsdGluL3RhZy5jOjU4OQorbXNnaWQgImxpc3QgdGFnIG5hbWVzIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDQuNC80LXQvdCw0YLQsCDQvdCwINC10YLQuNC60LXRgtC40YLQtSIKKworIzogYnVpbHRpbi90YWcuYzo1OTEKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YLQvtC30Lgg0JHQoNCe0Jkg0YDQtdC00L7QstC1INC+0YIg0LLRgdGP0LrQviDRgdGK0L7QsdGJ0LXQvdC40LUg0LfQsCDQtdGC0LjQutC10YIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTkzCittc2dpZCAiZGVsZXRlIHRhZ3MiCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwINC10YLQuNC60LXRgtC4IgorCisjOiBidWlsdGluL3RhZy5jOjU5NAorbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICLQv9GA0L7QstC10YDQutCwINC90LAg0LXRgtC40LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTk2Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgItCe0L/RhtC40Lgg0L/RgNC4INGB0YrQt9C00LDQstCw0L3QtdGC0L4g0L3QsCDQtdGC0LjQutC10YLQuCIKKworIzogYnVpbHRpbi90YWcuYzo1OTgKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgItCw0L3QvtGC0LjRgNCw0L3QtdGC0L4g0L3QsCDQtdGC0LjQutC10YLQuCDQuNC30LjRgdC60LLQsCDRgdGK0L7QsdGJ0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAwCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgItGB0YrQvtCx0YnQtdC90LjQtSDQt9CwINC10YLQuNC60LXRgiIKKworIzogYnVpbHRpbi90YWcuYzo2MDIKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICLQsNC90L7RgtC40YDQsNC9INC10YLQuNC60LXRgiDRgSDQv9C+0LTQv9C40YEg0L/QviBHUEciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjA2Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAi0LjQt9C/0L7Qu9C30LLQsNC90LUg0L3QsCDQtNGA0YPQsyDQutC70Y7RhyDQt9CwINC/0L7QtNC/0LjRgdCy0LDQvdC10YLQviDQvdCwINC10YLQuNC60LXRgiIKKworIzogYnVpbHRpbi90YWcuYzo2MDcKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICLQt9Cw0LzRj9C90LAg0L3QsCDQtdGC0LjQutC10YLQsCwg0LDQutC+INGB0YrRidC10YHRgtCy0YPQstCwIgorCisjOiBidWlsdGluL3RhZy5jOjYwOQorbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgItCe0L/RhtC40Lgg0LfQsCDQuNC30LLQtdC20LTQsNC90LXRgtC+INC90LAg0LXRgtC40LrQtdGC0LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjEwCittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICLQuNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdC/0LjRgdGK0LrQsCDQvdCwINC10YLQuNC60LXRgtC40YLQtSDQv9C+INC60L7Qu9C+0L3QuCIKKworIzogYnVpbHRpbi90YWcuYzo2MTIKK21zZ2lkICJzb3J0IHRhZ3MiCittc2dzdHIgItC/0L7QtNGA0LXQttC00LDQvdC1INC90LAg0LXRgtC40LrQtdGC0LjRgtC1IgorCisjOiBidWlsdGluL3RhZy5jOjYxNyBidWlsdGluL3RhZy5jOjYyMworbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INGB0LDQvNC+INC90LAg0LXRgtC40LrQtdGC0LjRgtC1LCDQutC+0LjRgtC+INGB0YrQtNGK0YDQttCw0YIg0L/QvtC00LDQstCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjI5Cittc2dpZCAicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINC10YLQuNC60LXRgtC40YLQtSDQvdCwINC+0LHQtdC60YLQsCIKKworIzogYnVpbHRpbi90YWcuYzo2NTUKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0J7Qv9GG0LjQuNGC0LUg4oCeLS1jb2x1bW7igJwg0Lgg4oCeLW7igJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjY3Cittc2dpZCAiLS1zb3J0IGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLWxvbmfigJwg0Lgg4oCeLW7igJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Njc0Cittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLW7igJwg0LjQt9C40YHQutCy0LAg0L7Qv9GG0LjRj9GC0LAg4oCeLWzigJwuIgorCisjOiBidWlsdGluL3RhZy5jOjY3NgorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAi0J7Qv9GG0LjRj9GC0LAg4oCeLWNvbnRhaW5z4oCcINC40LfQuNGB0LrQstCwINC+0L/RhtC40Y/RgtCwIOKAni1s4oCcLiIKKworIzogYnVpbHRpbi90YWcuYzo2NzgKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICLQntC/0YbQuNGP0YLQsCDigJ4tcG9pbnRzLWF04oCcINC40LfQuNGB0LrQstCwINC+0L/RhtC40Y/RgtCwIOKAni1s4oCcLiIKKworIyBGSVhNRSBtZXNzYWdlIHBhdHRlcm4KKyM6IGJ1aWx0aW4vdGFnLmM6Njg2Cittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tRuKAnCDQuCDigJ4tbeKAnCDRgdCwINC90LXRgdGK0LLQvNC10YHRgtC40LzQuC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzA2Cittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICLQn9GA0LXQutCw0LvQtdC90L4g0LzQvdC+0LPQviDQsNGA0LPRg9C80LXQvdGC0LgiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzEyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICLigJ4lc+KAnCDQtSDQvdC10L/RgNCw0LLQuNC70L3QviDQuNC80LUg0LfQsCDQtdGC0LjQutC10YIuIgorCisjOiBidWlsdGluL3RhZy5jOjcxNworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi0LXRgtC40LrQtdGC0YrRgiDigJ4lc+KAnCDQstC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi90YWcuYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICLQntCx0L3QvtCy0LXQvSDQtdGC0LjQutC10YIg4oCeJXPigJwgKNCx0LUg4oCeJXPigJwpXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo0ODkKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0KDQsNC30L/QsNC60LXRgtC40YDQsNC90LUg0L3QsCDQvtCx0LXQutGC0LjRgtC1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INGB0YrQt9C00LDQtNC10L3QsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0L7Qu9GD0YfQtdC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y8g0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwIOKAniVz4oCcIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC9IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZmlsZSAlcyIKK21zZ3N0ciAi0YTQsNC50LvRitGCIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxIGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJXPigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC40LfRgtGA0LjRgtCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nICIKK21zZ3N0ciAi0J/RgNC+0LHQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMzYKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAiIgorItC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQv9C+0LvRg9GH0LXQvdCwINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0L3QtSDRgdC1INC/0YDQvtC80LXQvdGPINGB0LvQtdC0ICIKKyLQtNC+0LHQsNCy0Y/QvdC10YLQviDQvdCwINC90L7QsiDRhNCw0LnQuyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDkKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisi0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC/0L7Qu9GD0YfQtdC90LAg0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdC1INGB0LUg0L/RgNC+0LzQtdC90Y8g0YHQu9C10LQgIgorItC00L7QsdCw0LLRj9C90LXRgtC+INC90LAg0L3QvtCy0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTYyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorItC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQv9C+0LvRg9GH0LXQvdCwINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0YHQtSDQv9GA0L7QvNC10L3RjyDRgdC70LXQtCAiCisi0L7QsdC90L7QstGP0LLQsNC90LXRgtC+INC90LAg0L3QvtCyINGE0LDQudC7IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE3MworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciBhZGRpbmcgYSBmaWxlIGluc2lkZSBzdWJkaXJlY3RvcnkiCittc2dzdHIgIiIKKyLQuNC90YTQvtGA0LzQsNGG0LjRj9GC0LAg0L/QvtC70YPRh9C10L3QsCDRh9GA0LXQtyDigJ5zdGF04oCcINC30LAg0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwINGB0LUg0L/RgNC+0LzQtdC90Y8g0YHQu9C10LQg0LTQvtCx0LDQstGP0L3QtdGC0L4gIgorItC90LAg0YTQsNC50Lsg0LIg0L/QvtC00LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTg0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisi0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC/0L7Qu9GD0YfQtdC90LAg0YfRgNC10Lcg4oCec3RhdOKAnCDQt9CwINC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQvdC1INGB0LUg0L/RgNC+0LzQtdC90Y8g0YHQu9C10LQgIgorItC40LfRgtGA0LjQstCw0L3QtdGC0L4g0L3QsCDRhNCw0LnQuyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxOTcKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorItC40L3RhNC+0YDQvNCw0YbQuNGP0YLQsCDQv9C+0LvRg9GH0LXQvdCwINGH0YDQtdC3IOKAnnN0YXTigJwg0LfQsCDQtNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0L3QtSDRgdC1INC/0YDQvtC80LXQvdGPINGB0LvQtdC0ICIKKyLQuNC30YLRgNC40LLQsNC90LXRgtC+INC90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjA0Cittc2dpZCAiIE9LIgorbXNnc3RyICIg0JTQvtCx0YDQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1NjQKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggW9Ce0J/QptCY0K/igKZdIFstLV0gW9Ck0JDQmdCb4oCmXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MTgKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgIiIKKyLQv9GA0L7QtNGK0LvQttCw0LLQsNC90LUg0YEg0L7QsdC90L7QstGP0LLQsNC90LXRgtC+LCDQtNC+0YDQuCDQutC+0LPQsNGC0L4g0LjQvdC00LXQutGB0YrRgiDRgtGA0Y/QsdCy0LAg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MjEKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAi0L/QvtC00LzQvtC00YPQu9C40YLQtSDQtNCwINGB0LUg0LjQs9C90L7RgNC40YDQsNGCINC/0YDQuCDQvtCx0L3QvtCy0Y/QstCw0L3QtdGC0L4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI0Cittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgItC90L7QstC40YLQtSDRhNCw0LnQu9C+0LLQtSDQtNCwINC90LUg0YHQtSDQuNCz0L3QvtGA0LjRgNCw0YIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI2Cittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgItGE0LDQudC70L7QstC1INC00LAg0LzQvtCz0LDRgiDQtNCwINC30LDQvNC10L3Rj9GCINC00LjRgNC10LrRgtC+0YDQuNC4INC4INC+0LHRgNCw0YLQvdC+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyOAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgItC/0YDQtdC00YPQv9GA0LXQttC00LDQstCw0L3QtSDQv9GA0Lgg0LvQuNC/0YHQstCw0YnQuCDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDRhNCw0LnQu9C+0LLQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzAKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAi0L7QsdC90L7QstGP0LLQsNC90LUg0LTQvtGA0Lgg0Lgg0LjQvdC00LXQutGB0YrRgiDQtNCwINGB0YrQtNGK0YDQttCwINC90LXRgdC70LXRgtC4INC+0LHQtdC60YLQuCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzMKK21zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dzdHIgItC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINC+0YIg0YTRg9C90LrRhtC40Y/RgtCwIOKAnnN0YXTigJwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTM3Cittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICIiCisi0LrQsNGC0L4g0L7Qv9GG0LjRj9GC0LAg4oCeLS1yZWZyZXNo4oCcLCDQvdC+INC00LAg0YHQtSDQv9GA0L7QstC10YDRj9GCINC4INC+0LHQtdC60YLQuNGC0LUsINC60L7QuNGC0L4g0YHQsCDQsdC40LvQuCDQv9GA0LjQtdGC0LggIgorItC30LAg0L3QtdC/0YDQvtC80LXQvdC10L3QuCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NDEKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICLQoNCV0JbQmNCcLNCe0JHQldCa0KIs0J/QqtCiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0MgorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0LTQvtCx0LDQstGP0L3QtSDQvdCwINC40LfQsdGA0L7QtdC90LjRgtC1INC+0LHQtdC60YLQuCDQutGK0Lwg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQ2Cittc2dpZCAiKCsvLSl4IgorbXNnc3RyICIoKy8tKXgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQ3Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgItC40LfRgNC40YfQvdC+INC30LDQtNCw0LLQsNC90LUg0L3QsCDRgdGC0L7QudC90L7RgdGC0YLQsCDQvdCwINGE0LvQsNCz0LAg0LTQsNC70Lgg0YTQsNC50LvRitGCINC1INC40LfQv9GK0LvQvdC40LwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTUxCittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICLQt9Cw0LTQsNCy0LDQvdC1INC90LAg0YTQu9Cw0LMsINGH0LUg0YTQsNC50LvRitGCINC90LUg0YHQtSDQv9GA0L7QvNC10L3RjyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NTQKK21zZ2lkICJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiCittc2dzdHIgItC40LfRh9C40YHRgtCy0LDQvdC1INC90LAg0YTQu9Cw0LPQsCwg0YfQtSDRhNCw0LnQu9GK0YIg0L3QtSDRgdC1INC/0YDQvtC80LXQvdGPIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1NworbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgItC30LDQtNCw0LLQsNC90LUg0L3QsCDRhNC70LDQsywg0YfQtSDRhNCw0LnQu9C+0LLQtdGC0LUg0YHQsCDRgdCw0LzQviDQt9CwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2MAorbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICLQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINGE0LvQsNCz0LAsICDRh9C1INGE0LDQudC70L7QstC10YLQtSDRgdCwINGB0LDQvNC+INC30LAg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTYzCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0YHQsNC80L4g0LrRitC8INC40L3QtNC10LrRgdCwINCx0LXQtyDQtNC+0LHQsNCy0Y/QvdC1INC60YrQvCDQsdCw0LfQsNGC0LAg0L7RgiDQtNCw0L3QvdC4INC30LAg0L7QsdC10LrRgtC40YLQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjUKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICLQuNC30YLRgNC40LLQsNC90LUg0L3QsCDRg9C60LDQt9Cw0L3QuNGC0LUg0L/RitGC0LjRidCwLCDQtNC+0YDQuCDQuCDQtNCwINGB0YrRidC10YHRgtCy0YPQstCw0YIg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY3Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICIiCisi0L/RgNC4INC60L7QvNCx0LjQvdC40YDQsNC90LUg0YEg0L7Qv9GG0LjRj9GC0LAg4oCeLS1zdGRpbuKAnCDigJQg0LLRhdC+0LTQvdC40YLQtSDRgNC10LTQvtCy0LUg0YHQsCDRgNCw0LfQtNC10LvQtdC90Lgg0YEg0L3Rg9C70LXQstC40Y8gIgorItCx0LDQudGCIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2OQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC40LfRh9C40YLQsNC90LUg0L3QsCDRgdC/0LjRgdGK0LrQsCDRgSDQv9GK0YLQuNGJ0LAg0LfQsCDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTczCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0L3QsCDQtdC70LXQvNC10L3RgtC40YLQtSDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQg0LrRitC8INC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiIgorItCy0YrQt9GB0YLQsNC90L7QstGP0LLQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC/0YDQtdC00Lgg0YHQu9C40LLQsNC90LUg0LjQu9C4INC90YPQttC00LAg0L7RgiDQvtCx0L3QvtCy0Y/QstCw0L3QtSDQt9CwICIKKyLQuNC30LHRgNC+0LXQvdC40YLQtSDQv9GK0YLQuNGJ0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgxCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgItC00L7QsdCw0LLRj9C90LUg0YHQsNC80L4g0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4sINC60L7QtdGC0L4g0YHQtSDRgNCw0LfQu9C40YfQsNCy0LAg0L7RgiDRgtC+0LLQsCDQsiDigJ5IRUFE4oCcIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NQorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1LCDQutC+0LjRgtC+INC70LjQv9GB0LLQsNGCINCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4OAorbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0LTQtdC50YHRgtCy0LjRj9GC0LAg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3QuNGPINC40LfRhdC+0LQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkwCittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIiIKKyLQt9Cw0LHRgNCw0LLRj9C90LUg0L3QsCDQt9Cw0L/QuNGB0LDQvdCw0YLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC90LXRgNCw0LfRgNC10YjQtdC90Lgg0LrQvtC90YTQu9C40LrRgtC4IOKAlCDQt9CwINC60L7QvNCw0L3QtNC40YLQtSAiCisi0L7RgiDQv9C+0YLRgNC10LHQuNGC0LXQu9GB0LrQviDQvdC40LLQviIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTQKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAi0LfQsNC/0LjRgdCy0LDQvdC1INC90LAg0LjQvdC00LXQutGB0LAg0LIg0YLQvtC30Lgg0YTQvtGA0LzQsNGCIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NgorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICLQstC60LvRjtGH0LLQsNC90LUg0LjQu9C4INC40LfQutC70Y7Rh9Cy0LDQvdC1INC90LAg0YDQsNC30LTQtdC70Y/QvdC10YLQviDQvdCwINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAi0LLQutC70Y7Rh9Cy0LDQvdC1L9C40LfQutC70Y7Rh9Cy0LDQvdC1INC90LAg0LrQtdGI0LAg0LfQsCDQvdC10YHQu9C10LTQtdC90LjRgtC1INGE0LDQudC70L7QstC1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDAKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiIgorItCy0LrQu9GO0YfQstCw0L3QtSDQvdCwINC60LXRiNCwINC30LAg0L3QtdGB0LvQtdC00LXQvdC40YLQtSDRhNCw0LnQu9C+0LLQtSDQsdC10Lcg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINGE0LDQudC70L7QstCw0YLQsCDRgdC40YHRgtC10LzQsCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6OQorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC1kIDxyZWZuYW1lPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgW9Ce0J/QptCY0K/igKZdIC1kINCY0JzQlV/QndCQX9Cj0JrQkNCX0JDQotCV0JsgW9Ch0KLQkNCg0JBf0KHQotCe0JnQndCe0KHQol0iCisKKyMgRklYTUUgc3BhY2VzIC0gbm90IG5lZWRlZCBpbiBvcmlnaW5hbAorIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBb0J7Qn9Cm0JjQr+KApl0g0JjQnNCVX9Cd0JBf0KPQmtCQ0JfQkNCi0JXQmyDQndCe0JLQkF/QodCi0J7QmdCd0J7QodCiIFvQodCi0JDQoNCQX9Ch0KLQntCZ0J3QntCh0KJdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMQorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgW9Ce0J/QptCY0K/igKZdIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzU5Cittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgItC40LfRgtGA0LjQstCw0L3QtSDQvdCwINGD0LrQsNC30LDRgtC10LvRjyIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYxCittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgItC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0JjQnNCV0YLQvl/QndCQX9Cj0JrQkNCX0JDQotCV0JvRjywg0LAg0L3QtSDRgtC+0LLQsCwg0LrRitC8INC60L7QtdGC0L4g0YHQvtGH0LgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MgorbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgIiIKKyLQvdGP0LrQvtC4INC+0YIg0LXQu9C10LzQtdC90YLQuNGC0LUg0L/QvtC00LDQtNC10L3QuCDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQg0LfQsNCy0YrRgNGI0LLQsNGCINGBINC90YPQu9C10LLQuNGPINC30L3QsNC6ICIKKyLigJ5OVUzigJwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgInJlYWQgdXBkYXRlcyBmcm9tIHN0ZGluIgorbXNnc3RyICLQuNC30YfQuNGC0LDQvdC1INC90LAg0YPQutCw0LfQsNGC0LXQu9C40YLQtSDQvtGCINGB0YLQsNC90LTQsNGA0YLQvdC40Y8g0LLRhdC+0LQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NgorbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNAorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgItC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LjQvdGE0L7RgNC80LDRhtC40L7QvdC90LjRgtC1INGE0LDQudC70L7QstC1INC+0YIg0L3Rg9C70LDRgtCwIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxNworbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0g0J/QntCU0JDQktCQ0J3QleKApiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NzUKK21zZ2lkICJwcmludCBjb21taXQgY29udGVudHMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINC/0L7QtNCw0LLQsNC90LXRgtC+IgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTQKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0g0J/QkNCa0JXQouKApiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY0Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0L/QvtC00YDQvtCx0L3QsCDQuNC90YTQvtGA0LzQsNGG0LjRjyIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY2Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDRgdCw0LzQviDQvdCwINGB0YLQsNGC0LjRgdGC0LjQutCw0YLQsCIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTcKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdINCV0KLQmNCa0JXQouKApiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6NzMKK21zZ2lkICJwcmludCB0YWcgY29udGVudHMiCittc2dzdHIgItC40LfQstC10LbQtNCw0L3QtSDQvdCwINGB0YrQtNGK0YDQttCw0L3QuNC10YLQviDQvdCwINCV0KLQmNCa0JXQotC4IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTEKK21zZ2lkICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGFkZCBb0J7Qn9Cm0JjQr+KApl0g0J/QqtCiINCa0JvQntCdIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTIKK21zZ2lkICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBwcnVuZSBb0J7Qn9Cm0JjQr+KApl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAi0JjQt9GC0YDQuNCy0LDQvdC1INC90LAg4oCed29ya3RyZWVzLyVz4oCcOiDQvdC1INC1INC/0YDQsNCy0LjQu9C90LAg0L/QvtC00LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ53b3JrdHJlZXMvJXPigJw6INGE0LDQudC70YrRgiDigJ5naXRkaXLigJwg0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjM4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAiIgorItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAnndvcmt0cmVlcy8lc+KAnDog0YTQsNC50LvRitGCIOKAnmdpdGRpcuKAnCAoJXMpINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQv9GA0L7Rh9C10YLQtdC9IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICLQmNC30YLRgNC40LLQsNC90LUg0L3QsCDigJ53b3JrdHJlZXMvJXPigJw6INC90LXQv9GA0LDQstC40LvQtdC9INGE0LDQudC7IOKAnmdpdGRpcuKAnCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIKK21zZ3N0ciAiIgorItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwIOKAnndvcmt0cmVlcy8lc+KAnDog0YTQsNC50LvRitGCIOKAnmdpdGRpcuKAnCDRgdC+0YfQuCDQvdC10YHRitGJ0LXRgdGC0LLRg9Cy0LDRidC+ICIKKyLQvNC10YHRgtC+0L/QvtC70L7QttC10L3QuNC1IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmU6ICVzIgorbXNnc3RyICLigJ4lc+KAnCDQvdC1INC80L7QttC1INC00LAg0YHQtSDQuNC30YLRgNC40LUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi4oCeJXPigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAi0LTQuNGA0LXQutGC0L7RgNC40Y/RgtCwIOKAniVz4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDRgdGK0LfQtNCw0LTQtdC90LAiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDEKK21zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBIRUFEIgorbXNnc3RyICLRgdC+0YfQtdC90L7RgtC+INC+0YIg0YPQutCw0LfQsNGC0LXQu9GPIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC+0YLQutGA0LjRgtC+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVudGVyICVzIChpZGVudGlmaWVyICVzKSIKK21zZ3N0ciAi0JLRitCy0LXQtNC10YLQtSAlcyAo0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAgJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjgxCittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICLQmNC30YLQtdCz0LvRj9C90LUg0JrQm9Ce0J3QsCwg0LTQvtGA0Lgg0Lgg0LTQsCDQtSDQuNC30YLQtdCz0LvQtdC9INCyINC00YDRg9Cz0L4g0YDQsNCx0L7RgtC90L4g0LTRitGA0LLQviIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI4MworbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgItGB0YrQt9C00LDQstCw0L3QtSDQvdCwINC90L7QsiDQutC70L7QvSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI4NQorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAi0YHRitC30LTQsNCy0LDQvdC1INC40LvQuCDQt9Cw0L3Rg9C70Y/QstCw0L3QtSDQvdCwINC60LvQvtC90LgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyODYKK21zZ2lkICJkZXRhY2ggSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgItC+0YLQtNC10LvRj9C90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCDQutGK0Lwg0YPQutCw0LfQsNC90L7RgtC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyOTIKK21zZ2lkICItYiBhbmQgLUIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAi0L7Qv9GG0LjQuNGC0LUg4oCeLWLigJwg0Lgg4oCeLULigJwg0YHQsCDQvdC10YHRitCy0LzQtdGB0YLQuNC80LgiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjEzCittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD3Qn9Cg0JXQpNCY0JrQoS9dIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyNgorbXNnaWQgIjxwcmVmaXg+LyIKK21zZ3N0ciAi0J/QoNCV0KTQmNCa0KEvIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyNworbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAi0LfQsNC/0LjRgSDQvdCwINC+0LHQtdC60YIt0LTRitGA0LLQviDQt9CwINC/0L7QtNC00LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQt9Cw0L/QvtGH0LLQsNGJ0LAg0YEg0YLQsNC30Lgg0J/QoNCV0KTQmNCa0KEiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMwCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAi0YHQsNC80L4g0LfQsCDQuNC30YfQuNGB0YLQstCw0L3QtSDQvdCwINCz0YDQtdGI0LrQuCIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjY3Cittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAi0LjQt9Cy0LXQttC00LDQvdC1INC90LAg0YHRitC+0LHRidC10L3QuNGP0YLQsCDQt9CwINGC0YDQsNGB0LjRgNCw0L3QtSDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdCw0YLQsCDQs9GA0LXRiNC60LAiCisKKyM6IGdpdC5jOjE0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC4iCittc2dzdHIgIiIKKyLigJ5naXQgaGVscCAtYeKAnCDQuNC30LLQtdC20LTQsCDQvdCw0LvQuNGH0L3QuNGC0LUg0L/QvtC00LrQvtC80LDQvdC00LgsINCwIOKAnmdpdCBoZWxwIC1n4oCcINC40LfQstC10LbQtNCwICIKKyLQvdCw0LvQuNGH0L3QuNGC0LVcbiIKKyLRgNGK0LrQvtCy0L7QtNGB0YLQstCwLiDQl9CwINC/0L7QvNC+0Ykg0LfQsCDRgdC/0LXRhtC40YTQuNGH0L3QsCDQmtCe0JzQkNCd0JTQkCDQv9C+0LvQt9Cy0LDQudGC0LUg4oCeZ2l0IGhlbHAg0JrQntCc0JDQndCU0JDigJwsINCwICIKKyLQt9CwXG4iCisi0L3Rj9C60L7QtSDQvtC/0YDQtdC00LXQu9C10L3QviDQn9Ce0J3Qr9Ci0JjQlSDQuNC30L/QvtC70LfQstCw0LnRgtC1IOKAnmdpdCBoZWxwINCf0J7QndCv0KLQmNCV4oCcLiIKKworIzogY29tbW9uLWNtZHMuaDoxMAorbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICLRgdGK0LfQtNCw0LLQsNC90LUg0L3QsCDRgNCw0LHQvtGC0L3QviDQtNGK0YDQstC+ICjQv9C+0LPQu9C10LTQvdC10YLQtTog4oCeZ2l0IGhlbHAgdHV0b3JpYWzigJwpIgorCisjOiBjb21tb24tY21kcy5oOjExCittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgItGA0LDQsdC+0YLQsCDQv9C+INGC0LXQutGD0YnQsNGC0LAg0L/RgNC+0LzRj9C90LAgKNC/0L7Qs9C70LXQtNC90LXRgtC1OiDigJ5naXQgaGVscCBldmVyeWRheeKAnCkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTIKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgItC/0YDQtdCz0LvQtdC0INC90LAg0LjRgdGC0L7RgNC40Y/RgtCwINC4INGB0YrRgdGC0L7Rj9C90LjQtdGC0L4gKNC/0L7Qs9C70LXQtNC90LXRgtC1OiDigJ5naXQgaGVscCByZXZpc2lvbnPigJwpIgorCisjOiBjb21tb24tY21kcy5oOjEzCittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAi0YPQstC10LvQuNGH0LDQstCw0L3QtSwg0L7RgtCx0LXQu9GP0LfQstCw0L3QtSDQuCDQv9GA0L7QvNGP0L3QsCDQvdCwINC+0LHRidCw0YLQsCDQuNGB0YLQvtGA0LjRjyIKKworIzogY29tbW9uLWNtZHMuaDoxNAorbXNnaWQgImNvbGxhYm9yYXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKK21zZ3N0ciAi0YHRitCy0LzQtdGB0YLQvdCwINGA0LDQsdC+0YLQsCAo0L/QvtCz0LvQtdC00L3QtdGC0LU6IOKAnmdpdCBoZWxwIHdvcmtmbG93c+KAnCkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTgKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgItCU0L7QsdCw0LLRj9C90LUg0L3QsCDRgdGK0LTRitGA0LbQsNC90LjQtdGC0L4g0L3QsCDRhNCw0LnQu9CwINC60YrQvCDQuNC90LTQtdC60YHQsCIKKworIzogY29tbW9uLWNtZHMuaDoxOQorbXNnaWQgIkZpbmQgYnkgYmluYXJ5IHNlYXJjaCB0aGUgY2hhbmdlIHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAi0JTQstC+0LjRh9C90L4g0YLRitGA0YHQtdC90LUg0L3QsCDQv9GA0L7QvNGP0L3QsNGC0LAsINC60L7Rj9GC0L4g0LUg0L/RgNC40YfQuNC90LjQu9CwINCz0YDQtdGI0LrQsCIKKworIyBGSVhNRSAtIHNob3VsZCBiZSBzaW1pbGFyIHRvIHRhZworIzogY29tbW9uLWNtZHMuaDoyMAorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUsINGB0YrQt9C00LDQstCw0L3QtSwg0LjQt9GC0YDQuNCy0LDQvdC1INC90LAg0LrQu9C+0L3QuCIKKworIzogY29tbW9uLWNtZHMuaDoyMQorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiIgorItCf0YDQtdC80LjQvdCw0LLQsNC90LUg0LrRitC8INC00YDRg9CzINC60LvQvtC9INC40LvQuCDQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1INC90LAg0YTQsNC50LvQvtCy0LXRgtC1INCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+IgorCisjOiBjb21tb24tY21kcy5oOjIyCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICLQmtC70L7QvdC40YDQsNC90LUg0L3QsCDRhdGA0LDQvdC40LvQuNGJ0LUg0LIg0L3QvtCy0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0J/QvtC00LDQstCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC4INCyINGF0YDQsNC90LjQu9C40YnQtdGC0L4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjQKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRgNCw0LfQu9C40LrQuNGC0LUg0LzQtdC20LTRgyDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwLCDQstC10YDRgdC40LjRgtC1LCDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviIKKworIzogY29tbW9uLWNtZHMuaDoyNQorbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgItCY0LfRgtC10LPQu9GP0L3QtSDQvdCwINC+0LHQtdC60YLQuCDQuCDRg9C60LDQt9Cw0YLQtdC70Lgg0L7RgiDQtNGA0YPQs9C+INGF0YDQsNC90LjQu9C40YnQtSIKKworIzogY29tbW9uLWNtZHMuaDoyNgorbXNnaWQgIlByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybiIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQtdC00L7QstC10YLQtSDQvdCw0L/QsNGB0LLQsNGJ0Lgg0L3QsCDRiNCw0LHQu9C+0L0iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjcKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAi0KHRitC30LTQsNCy0LDQvdC1INC90LAg0L/RgNCw0LfQvdC+INGF0YDQsNC90LjQu9C40YnQtSDQvdCwIEdpdCDQuNC70Lgg0LfQsNC90YPQu9GP0LLQsNC90LUg0L3QsCDRgdGK0YnQtdGB0YLQstGD0LLQsNGJ0L4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjgKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDQttGD0YDQvdCw0LvQsCDRgSDQv9C+0LTQsNCy0LDQvdC40Y/RgtCwIgorCisjOiBjb21tb24tY21kcy5oOjI5Cittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgItCh0LvQuNCy0LDQvdC1INC90LAg0LTQstC1INC40LvQuCDQv9C+0LLQtdGH0LUg0L/QvtGA0LXQtNC40YbQuC/QuNGB0YLQvtGA0LjQuCDQvtGCINC/0YDQvtC80LXQvdC4IgorCisjOiBjb21tb24tY21kcy5oOjMwCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICLQn9GA0LXQvNC10YHRgtCy0LDQvdC1INC40LvQuCDQv9GA0LXQuNC80LXQvdGD0LLQsNC90LUg0L3QsCDRhNCw0LnQuywg0LTQuNGA0LXQutGC0L7RgNC40Y8g0LjQu9C4INGB0LjQvNCy0L7Qu9C90LAg0LLRgNGK0LfQutCwIgorCisjOiBjb21tb24tY21kcy5oOjMxCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgaW50ZWdyYXRlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICLQlNC+0YHRgtCw0LLRj9C90LUg0Lgg0LjQvdGC0LXQs9GA0LjRgNCw0L3QtdGC0L4g0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUg0L7RgiDQtNGA0YPQs9C+INGF0YDQsNC90LjQu9C40YnQtSDQuNC70Lgg0LrQu9C+0L0iCisKKyM6IGNvbW1vbi1jbWRzLmg6MzIKK21zZ2lkICJVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgItCe0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0L7RgtC00LDQu9C10YfQtdC90LjRgtC1INGD0LrQsNC30LDRgtC10LvQuCDQuCDRgdCy0YrRgNC30LDQvdC40YLQtSDRgSDRgtGP0YUg0L7QsdC10LrRgtC4IgorCisjOiBjb21tb24tY21kcy5oOjMzCittc2dpZCAiRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCIKK21zZ3N0ciAi0J/RgNC10LHQsNC30LjRgNCw0L3QtSDQvdCwINC/0YDQvtC80LXQvdC4INC60YrQvCDQvdC+0LLQsCDQvtGB0L3QvtCy0LAiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzQKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAi0J/RgNC40LLQtdC20LTQsNC90LUg0L3QsCDRg9C60LDQt9Cw0YLQtdC70Y8g4oCeSEVBROKAnCDQutGK0Lwg0LfQsNC00LDQtNC10L3QvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1IgorCisjOiBjb21tb24tY21kcy5oOjM1Cittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgItCY0LfRgtGA0LjQstCw0L3QtSDQvdCwINGE0LDQudC70L7QstC1INC+0YIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0Lgg0LjQvdC00LXQutGB0LAiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzYKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1INC90LAg0YDQsNC30LvQuNGH0L3QuNGC0LUg0LLQuNC00L7QstC1INC+0LHQtdC60YLQuCDQsiBHaXQiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzcKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICLQmNC30LLQtdC20LTQsNC90LUg0L3QsCDRgdGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4iCisKKyMgRklYTUUgLSBzaG91bGQgYmUgc2ltaWxhciB0byBicmFuY2gKKyM6IGNvbW1vbi1jbWRzLmg6MzgKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAi0JjQt9Cy0LXQttC00LDQvdC1LCDRgdGK0LfQtNCw0LLQsNC90LUsINC40LfRgtGA0LjQstCw0L3QtSwg0L/RgNC+0LLQtdGA0LrQsCDQvdCwINC10YLQuNC60LXRgtC4INC/0L7QtNC/0LjRgdCw0L3QuCDRgSBHUEciCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNDIKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAi0L/QtdGA0LjQvtC0INC90LAg0LLQsNC70LjQtNC90L7RgdGCL9C30LDQv9Cw0LfQstCw0L3QtSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE1NworbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAi0L3Rg9C70LXQstCwINC+0L/QtdGA0LDRhtC40Y8gKNC30LAg0YHRitCy0LzQtdGB0YLQuNC80L7RgdGCINGBINC/0YDQtdC00LjRiNC90Lgg0LLQtdGA0YHQuNC4KSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIzMQorbXNnaWQgImJlIG1vcmUgdmVyYm9zZSIKK21zZ3N0ciAi0L/QvtCy0LXRh9C1INC/0L7QtNGA0L7QsdC90L7RgdGC0LgiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzMKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICLQv9C+LdC80LDQu9C60L4g0L/QvtC00YDQvtCx0L3QvtGB0YLQuCIKKworIyBGSVhNRSBTSEEtMSAtPiBTSEExCisjOiBwYXJzZS1vcHRpb25zLmg6MjM5Cittc2dpZCAidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiCittc2dzdHIgItC00LAg0YHQtSDQv9C+0LrQsNC30LLQsNGCINGC0LDQutGK0LIg0JHQoNCe0Jkg0YbQuNGE0YDQuCDQvtGCINGB0YPQvNC40YLQtSDQv9C+IFNIQTEiCisKKyM6IHJlcmVyZS5oOjI3Cittc2dpZCAidXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlIgorbXNnc3RyICIiCisi0L/RgNC4INCy0YrQt9C80L7QttC90L7RgdGCINC/0YDQtdC40LfQv9C+0LvQt9Cy0LDQvdC1INC90LAg0YDQtdGI0LXQvdC40LXRgtC+INC90LAg0LrQvtC90YTQu9C40LrRgtCwINC30LAg0L7QsdC90L7QstGP0LLQsNC90LUg0L3QsCAiCisi0LjQvdC00LXQutGB0LAiCisKKyM6IGdpdC1hbS5zaDo1MworbXNnaWQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgorbXNnc3RyICLQn9GK0YDQstC+INGC0YDRj9Cx0LLQsCDQtNCwINC30LDQtNCw0LTQtdGC0LUg0LjQvdGE0L7RgNC80LDRhtC40Y8g0LfQsCDRgdC10LHQtSDRgdC4IgorCisjOiBnaXQtYW0uc2g6MTAwCittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyLQmNC30LPQu9C10LbQtNCwINGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0LUg0L/RgNC+0LzQtdC90LXQvSDQuCDQvdC1INGB0L7Rh9C4INC60YrQvCDRgdGK0YnQuNGPINC+0LHQtdC60YIg0LrQsNC60YLQviDQv9C+ICIKKyLQstGA0LXQvNC10YLQvlxuIgorItC90LAg0L/QvtGB0LvQtdC00L3QvtGC0L4g0L3QtdGD0YHQv9C10YjQvdC+INC40LfQv9GK0LvQvdC10L3QuNC1INC90LAg4oCeZ2l0IGFt4oCcLiDQo9C60LDQt9Cw0YLQtdC70Y/RgiDRgdC1INC30LDQtNCw0LLQsCDQtNCwINGB0L7Rh9C4ICIKKyLQutGK0LxcbiIKKyLigJ5PUklHX0hFQUTigJwiCisKKyM6IGdpdC1hbS5zaDoxMTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJGNtZGxpbmUgLS1jb250aW51ZVwiLlxuIgorIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIkY21kbGluZSAtLXNraXBcIiBpbnN0ZWFkLlxuIgorIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorItCh0LvQtdC0INC60L7RgNC40LPQuNGA0LDQvdC10YLQviDQvdCwINGC0L7Qt9C4INC/0YDQvtCx0LvQtdC8INC40LfQv9GK0LvQvdC10YLQtSDQutC+0LzQsNC90LTQsNGC0LAg4oCeJGNtZGxpbmUgLS0iCisiY29udGludWXigJwuXG4iCisi0JfQsCDQtNCwINC/0YDQtdGB0LrQvtGH0LjRgtC1INGC0LDQt9C4INC60YDRitC/0LrQsCwg0LjQt9C/0YrQu9C90LXRgtC1INC60L7QvNCw0L3QtNCw0YLQsCDigJ4kY21kbGluZSAtLXNraXDigJwuXG4iCisi0JfQsCDQtNCwINCy0YrQt9GB0YLQsNC90L7QstC40YLQtSDQv9GK0YDQstC+0L3QsNGH0LDQu9C90L7RgtC+INGB0YrRgdGC0L7Rj9C90LjQtSDQuCDQtNCwINC/0YDQtdGD0YHRgtCw0L3QvtCy0LjRgtC1INC/0YDQuNC70LDQs9Cw0L3QtdGC0L4gIgorItC90LAgXG4iCisi0LrRgNGK0L/QutC4LCDQuNC30L/RitC70L3QtdGC0LUg0LrQvtC80LDQvdC00LDRgtCwIOKAniRjbWRsaW5lIC0tYWJvcnTigJwuIgorCisjOiBnaXQtYW0uc2g6MTI2Cittc2dpZCAiQ2Fubm90IGZhbGwgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQtSDQv9GA0LXQvNC40L3QtSDQutGK0Lwg0YLRgNC+0LnQvdC+INGB0LvQuNCy0LDQvdC1LiIKKworIzogZ2l0LWFtLnNoOjE0MgorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKyLQkiDRhdGA0LDQvdC40LvQuNGJ0LXRgtC+INC70LjQv9GB0LLQsNGCINC90LXQvtCx0YXQvtC00LjQvNC40YLQtSDQvtCx0LXQutGC0LggQkxPQiwg0LfQsCDQtNCwINGB0LUg0L/RgNC10LzQuNC90LUg0LrRitC8INGC0YDQvtC50L3QviAiCisi0YHQu9C40LLQsNC90LUuIgorCisjOiBnaXQtYW0uc2g6MTQ0Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAi0JHQsNC30L7QstC+0YLQviDQtNGK0YDQstC+INGB0LUg0YDQtdC60L7QvdGB0YLRgNGD0LjRgNCwINC+0YIg0LjQvdGE0L7RgNC80LDRhtC40Y/RgtCwINCyINC40L3QtNC10LrRgdCw4oCmIgorCisjOiBnaXQtYW0uc2g6MTU5Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorItCa0YDRitC/0LrQsNGC0LAg0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L/RgNC40LvQvtC20Lgg0LrRitC8INC+0LHQtdC60YLQuNGC0LUgQkxPQiDQsiDQuNC90LTQtdC60YHQsC5cbiIKKyLQlNCwINC90LUg0LHQuCDQtNCwINGB0YLQtSDRjyDRgNC10LTQsNC60YLQuNGA0LDQu9C4INC90LAg0YDRitC60LA/IgorCisjOiBnaXQtYW0uc2g6MTY4Cittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICLQn9GA0LXQvNC40L3QsNCy0LDQvdC1INC60YrQvCDQv9GA0LjQu9Cw0LPQsNC90LUg0L3QsCDQutGA0YrQv9C60LAg0LrRitC8INCx0LDQt9Cw0YLQsCDQuCDRgtGA0L7QudC90L4g0YHQu9C40LLQsNC90LXigKYiCisKKyM6IGdpdC1hbS5zaDoxODUKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHQu9C40LLQsNC90LUg0L3QsCDQv9GA0L7QvNC10L3QuNGC0LUuIgorCisjOiBnaXQtYW0uc2g6MjgwCittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIiIKKyLQodCw0LzQviDQtdC00L3QsCDRgdC10YDQuNGPINC60YDRitC/0LrQuCDQvtGCIOKAnlN0R0lU4oCcINC80L7QttC1INC00LAg0LHRitC00LUg0L/RgNC40LvQsNCz0LDQvdCwINCyINC00LDQtNC10L0g0LzQvtC80LXQvdGCIgorCisjOiBnaXQtYW0uc2g6MzY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJQYXRjaCBmb3JtYXQgJHBhdGNoX2Zvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIKK21zZ3N0ciAi0J3QtdC/0L7QtNC00YrRgNC20LDQvSDRhNC+0YDQvNCw0YIg0L3QsCDQutGA0YrQv9C60Lg6IOKAniRwYXRjaF9mb3JtYXTigJwuIgorCisjOiBnaXQtYW0uc2g6MzY5Cittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICLQpNC+0YDQvNCw0YLRitGCINC90LAg0LrRgNGK0L/QutCw0YLQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0L7Qv9GA0LXQtNC10LvQtdC9LiIKKworIzogZ2l0LWFtLnNoOjQwNworbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorItCe0L/RhtC40LjRgtC1IOKAni1i4oCcL+KAni0tYmluYXJ54oCcINC+0YLQtNCw0LLQvdCwINC90LUg0L/RgNCw0LLRj9GCINC90LjRidC+INC4XG4iCisi0YnQtSDQsdGK0LTQsNGCINC/0YDQtdC80LDRhdC90LDRgtC4INCyINCx0YrQtNC10YnQtS4g0J3QtSDQs9C4INC/0L7Qu9C30LLQsNC50YLQtS4iCisKKyM6IGdpdC1hbS5zaDo1MDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJGRvdGVzdCBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICIiCisi0L/RgNC10LTQuNGI0L3QsNGC0LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0LfQsCDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1IOKAniRkb3Rlc3TigJwg0LLRgdC1INC+0YnQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCwg0LAg0LUgIgorItC30LDQtNCw0LTQtdC9INGE0LDQudC7IOKAnm1ib3jigJwuIgorCisjIEZJWE1FIGJldHRlciBtZXNzYWdlCisjOiBnaXQtYW0uc2g6NTEyCittc2dpZCAiUGxlYXNlIG1ha2UgdXAgeW91ciBtaW5kLiAtLXNraXAgb3IgLS1hYm9ydD8iCittc2dzdHIgItCe0L/RhtC40LjRgtC1IOKAni0tc2tpcOKAnCDQuCDigJ4tLWFib3J04oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4LiIKKworIzogZ2l0LWFtLnNoOjU2MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN0cmF5ICRkb3Rlc3QgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorItCe0YLQutGA0LjRgtCwINC1INC40LfQu9C40YjQvdCwINC00LjRgNC10LrRgtC+0YDQuNGPIOKAniRkb3Rlc3TigJwuXG4iCisi0JzQvtC20LXRgtC1INC00LAg0Y8g0LjQt9GC0YDQuNC10YLQtSDRgSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGFtIC0tYWJvcnTigJwuIgorCisjOiBnaXQtYW0uc2g6NTY4Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAi0JIg0LzQvtC80LXQvdGC0LAg0L3QtSDRgtC10YfQtSDQvtC/0LXRgNCw0YbQuNGPINC/0L4g0LrQvtGA0LjQs9C40YDQsNC90LUg0Lgg0L3Rj9C80LAg0LrQsNC6INC00LAg0YHQtSDQv9GA0L7QtNGK0LvQttC4LiIKKworIzogZ2l0LWFtLnNoOjYzNQorIywgc2gtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJGZpbGVzKSIKK21zZ3N0ciAiIgorItCY0L3QtNC10LrRgdGK0YIg0L3QtSDQtSDRh9C40YHRgjog0LrRgNGK0L/QutC40YLQtSDQvdC1INC80L7Qs9Cw0YIg0LTQsCDQsdGK0LTQsNGCINC/0YDQuNC70L7QttC10L3QuCAo0LfQsNC80YrRgNGB0LXQvdC4INGB0LA6ICIKKyIkZmlsZXMpIgorCisjIEZJWE1FIHNwYWNlcworIzogZ2l0LWFtLnNoOjc0NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlBhdGNoIGlzIGVtcHR5LiAgV2FzIGl0IHNwbGl0IHdyb25nP1xuIgorIklmIHlvdSB3b3VsZCBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBpbnN0ZWFkIHJ1biBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZyBydW4gXCIkY21kbGluZSAtLWFib3J0XCIuIgorbXNnc3RyICIiCisi0JrRgNGK0L/QutCw0YLQsCDQtSDQv9GA0LDQt9C90LAuINCn0LXRgdGC0LAg0L/RgNC40YfQuNC90LAg0LfQsCDRgtC+0LLQsCDQtSDQvdC10L/RgNCw0LLQuNC70L3QviDRgNCw0LfQtNC10LvRj9C90LUg0L3QsCDQutGA0YrQv9C60LguXG4iCisi0JfQsCDQtNCwINC/0YDQtdGB0LrQvtGH0LjRgtC1INGC0LDQt9C4INC60YDRitC/0LrQsCwg0LjQt9C/0YrQu9C90LXRgtC1INC60L7QvNCw0L3QtNCw0YLQsCDigJ4kY21kbGluZSAtLXNraXDigJwuXG4iCisi0JfQsCDQtNCwINCy0YrQt9GB0YLQsNC90L7QstC40YLQtSDQv9GK0YDQstC+0L3QsNGH0LDQu9C90L7RgtC+INGB0YrRgdGC0L7Rj9C90LjQtSDQuCDQtNCwINC/0YDQtdGD0YHRgtCw0L3QvtCy0LjRgtC1INC/0YDQuNC70LDQs9Cw0L3QtdGC0L4gIgorItC90LAgXG4iCisi0LrRgNGK0L/QutC4LCDQuNC30L/RitC70L3QtdGC0LUg0LrQvtC80LDQvdC00LDRgtCwIOKAniRjbWRsaW5lIC0tYWJvcnTigJwuIgorCisjOiBnaXQtYW0uc2g6Nzc0Cittc2dpZCAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKK21zZ3N0ciAi0JrRgNGK0L/QutCw0YLQsCDQvdC1INGB0YrQtNGK0YDQttCwINCy0LDQu9C40LTQtdC9INCw0LTRgNC10YEg0LfQsCDQtS3Qv9C+0YnQsC4iCisKKyM6IGdpdC1hbS5zaDo4MjEKK21zZ2lkICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iCittc2dzdHIgIiIKKyLQl9CwINC40L3RgtC10YDQsNC60YLQuNCy0L3QviDQuNC30L/RitC70L3QtdC90LjQtSDQtSDQvdC10L7QsdGF0L7QtNC40LzQviDRgdGC0LDQvdC00LDRgNGC0L3QuNGP0YJcbiIKKyLQuNC30YXQvtC0INC00LAg0LUg0YHQstGK0YDQt9Cw0L0g0YEg0YLQtdGA0LzQuNC90LDQuywg0LAg0LIg0LzQvtC80LXQvdGC0LAg0L3QtSDQtS4iCisKKyM6IGdpdC1hbS5zaDo4MjUKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgItCi0Y/Qu9C+0YLQviDQvdCwINC60YDRitC/0LrQsNGC0LAg0LfQsCDQv9GA0LjQu9Cw0LPQsNC90LUg0LU6IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1hbS5zaDo4MzIKK21zZ2lkICJBcHBseT8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbCAiCittc2dzdHIgIiIKKyLQn9GA0LjQu9Cw0LPQsNC90LU/IOKAnnnigJwg4oCUINC00LAv4oCebuKAnCDigJQg0L3QtS/igJ5l4oCcIOKAlCDRgNC10LTQsNC60YLQuNGA0LDQvdC1L+KAnnbigJwg4oCUINC/0YDQtdCz0LvQtdC0L+KAnmHigJwg4oCUINC/0YDQuNC10LzQsNC90LUgIgorItC90LAg0LLRgdC40YfQutC+IgorCisjOiBnaXQtYW0uc2g6ODY4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJEZJUlNUTElORSIKK21zZ3N0ciAi0J/RgNC40LvQsNCz0LDQvdC1OiAkRklSU1RMSU5FIgorCisjOiBnaXQtYW0uc2g6ODg5Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisi0JHQtdC3INC/0YDQvtC80LXQvdC4IOKAlCDQstGK0LfQvNC+0LbQvdC+INC1INC00LAg0L3QtSDRgdGC0LUg0LjQt9C/0YrQu9C90LjQu9C4IOKAnmdpdCBhZGTigJwuXG4iCisi0JDQutC+INC90Y/QvNCwINC00YDRg9Cz0LAg0L/RgNC+0LzRj9C90LAg0LfQsCDQstC60LvRjtGH0LLQsNC90LUg0LIg0LjQvdC00LXQutGB0LAsINC90LDQuS3QstC10YDQvtGP0YLQvdC+INC90Y/QutC+0Y8g0LTRgNGD0LPQsFxuIgorItC60YDRitC/0LrQsCDQtSDQtNC+0LLQtdC70LAg0LTQviDRgdGK0YnQuNGC0LUg0L/RgNC+0LzQtdC90Lgg0Lgg0LIg0YLQsNC60YrQsiDRgdC70YPRh9Cw0Lkg0L/RgNC+0YHRgtC+INC/0YDQvtC/0YPRgdC90LXRgtC1INGC0LDQt9C4LiIKKworIzogZ2l0LWFtLnNoOjg5NworbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4XG4iCisiZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz8iCittc2dzdHIgIiIKKyLQmNC90LTQtdC60YHRitGCINCy0YHQtSDQvtGJ0LUg0YHRitC00YrRgNC20LAg0L3QtdGB0LvQtdGC0Lgg0L/RgNC+0LzQtdC90Lgg4oCUINCy0YrQt9C80L7QttC90L4g0LUg0LTQsCDQvdC1INGB0YLQtSDQuNC30L/RitC70L3QuNC70LggIgorIuKAnmdpdCBhZGTigJwuIgorCisjOiBnaXQtYW0uc2g6OTEzCittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICLQkdC10Lcg0L/RgNC+0LzQtdC90Lgg4oCUINC60YDRitC/0LrQsNGC0LAg0LLQtdGH0LUg0LUg0L/RgNC40LvQvtC20LXQvdCwLiIKKworIzogZ2l0LWFtLnNoOjkyMworIywgc2gtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICRtc2dudW0gJEZJUlNUTElORSIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INC/0YDQuNC70LDQs9Cw0L3QtSDQvdCwINC60YDRitC/0LrQsNGC0LAg4oCeJG1zZ251beKAnDog4oCeJEZJUlNUTElOReKAnCIKKworIzogZ2l0LWFtLnNoOjkyNgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjb3B5IG9mIHRoZSBwYXRjaCB0aGF0IGZhaWxlZCBpcyBmb3VuZCBpbjpcbiIKKyIgICAkZG90ZXN0L3BhdGNoIgorbXNnc3RyICIiCisi0JTRg9Cx0LvQuNC60LDRgiDQvdCwINC/0YDQvtCx0LvQtdC80L3QsNGC0LAg0LrRgNGK0L/QutCwINGB0LUg0L3QsNC80LjRgNCwINCyOlxuIgorIiAgICRkb3Rlc3QvcGF0Y2giCisKKyM6IGdpdC1hbS5zaDo5NDUKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICLQv9GA0LjQu9Cw0LPQsNC90LUg0LLRitGA0YXRgyDQv9GA0LDQt9C90LAg0LjRgdGC0L7RgNC40Y8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDgKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAi0JfQsNC/0L7Rh9C90LXRgtC1INC60LDRgtC+INC40LfQv9GK0LvQvdC40YLQtSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGJpc2VjdCBzdGFydOKAnCIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICLQlNCwINGB0LUg0LjQt9Cy0YrRgNGI0Lgg0LvQuCDQsNCy0YLQvtC80LDRgtC40YfQvdC+PyDigJ5Z4oCcIOKAlCAg0JTQkCwg4oCebuKAnCDigJQg0L3QtSIKKworIzogZ2l0LWJpc2VjdC5zaDo5NQorIywgc2gtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRhcmcnIgorbXNnc3RyICLQvdC10L/QvtC30L3QsNGC0LAg0L7Qv9GG0LjRjyDigJ4kYXJn4oCcIgorCisjOiBnaXQtYmlzZWN0LnNoOjk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIuKAniRhcmfigJwg0L3QtSDQuNC30LPQu9C10LbQtNCwINC60LDRgtC+INGD0LrQsNC30LDRgtC10Lsg0LrRitC8INCy0LXRgNGB0LjRjyIKKworIyBGSVhNRSAtIEkgPz8/IHRoZSBtZXNzYWdlIGRvZXMgbm90IGNvbnZleSB3aGF0IGlzIGFjdHVhbGx5IHdyb25nIC0gdGhhdCB0aGUgIkhFQUQiIHBvaW50cyB0byBzdGggdGhhdCBpcyB1bnBhcnNhYmxlCisjOiBnaXQtYmlzZWN0LnNoOjExNworbXNnaWQgIkJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAi0KLQtdC60YPRidC40Y/RgiDRg9C60LDQt9Cw0YLQtdC7IOKAnkhFQUTigJwg0LUg0L3QtdC/0YDQsNCy0LjQu9C10L0uIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNoZWNraW5nIG91dCAnJHN0YXJ0X2hlYWQnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0L/RgNC10LzQuNC90LDQstCw0L3QtSDQutGK0Lwg4oCeJHN0YXJ0X2hlYWTigJwuINCY0LfQv9GK0LvQvdC10YLQtSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGJpc2VjdCAiCisicmVzZXQg0KHQqtCp0JXQodCi0JLQo9CS0JDQqV/QmtCb0J7QneKAnC4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MTQwCittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAiIgorItC90LUg0LzQvtC20LUg0LTQsCDRgdC1INGC0YrRgNGB0Lgg0LTQstC+0LjRh9C90L4sINC60L7Qs9Cw0YLQviDQtSDQuNC30L/RitC70L3QtdC90LAg0LrQvtC80LDQvdC00LDRgtCwIOKAnmNnLXNlZWvigJwg0L7RgiAiCisi4oCeY29naXRv4oCcIgorCisjOiBnaXQtYmlzZWN0LnNoOjE0NAorbXNnaWQgIkJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQtdC9INGD0LrQsNC30LDRgtC10Lsg4oCeSEVBROKAnCIKKworIzogZ2l0LWJpc2VjdC5zaDoxODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICRzdGF0ZSIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9C10L0g0LDRgNCz0YPQvNC10L3RgiDQvdCwINGE0YPQvdC60YbQuNGP0YLQsCDigJ5iaXNlY3Rfd3JpdGXigJw6IOKAniRzdGF0ZeKAnCIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvQvdCwINCy0LXRgNGB0LjRjzog4oCeJGFyZ+KAnCIKKworIzogZ2l0LWJpc2VjdC5zaDoyMzIKK21zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCittc2dzdHIgItCk0YPQvdC60YbQuNGP0YLQsCDigJ5iaXNlY3Rfc3RhdGXigJwg0LjQt9C40YHQutCy0LAg0L/QvtC90LUg0LXQtNC40L0g0LDRgNCz0YPQvNC10L3Rgi4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70L3QsCDQstC10YDRgdC40Y86IOKAniRyZXbigJwiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUzCittc2dpZCAiJ2dpdCBiaXNlY3QgYmFkJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgItCa0L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgYmlzZWN0IGJhZOKAnCDQv9GA0LjQtdC80LAg0YHQsNC80L4g0LXQtNC40L0g0LDRgNCz0YPQvNC10L3Rgi4iCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjc2Cittc2dpZCAiV2FybmluZzogYmlzZWN0aW5nIG9ubHkgd2l0aCBhIGJhZCBjb21taXQuIgorbXNnc3RyICLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQtNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtSDRgdCw0LzQviDQv9C+INC70L7RiNC+INC/0L7QtNCw0LLQsNC90LUuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6MjgyCittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgItCU0LAg0YHQtSDQv9GA0L7QtNGK0LvQttC4INC70Lg/IOKAnlnigJwg4oCUICDQlNCQLCDigJ5u4oCcIOKAlCDQvdC1IgorCisjIEZJWE1FIG1lPworIzogZ2l0LWJpc2VjdC5zaDoyOTIKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgZ29vZCBhbmQgb25lIGJhZCByZXZpc2lvbi5cbiIKKyIoWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0IGJhZFwiIGFuZCBcImdpdCBiaXNlY3QgZ29vZFwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyLQotGA0Y/QsdCy0LAg0LTQsCDQt9Cw0LTQsNC00LXRgtC1INC/0L7QvdC1INC10LTQvdCwINC00L7QsdGA0LAg0Lgg0LXQtNC90LAg0LvQvtGI0LAg0LLQtdGA0YHQuNGPLiAo0KLQvtCy0LAg0LzQvtC20LUg0LTQsCDRgdC1XG4iCisi0L3QsNC/0YDQsNCy0Lgg0YHRitC+0YLQstC10YLQvdC+INC4INGH0YDQtdC3INC60L7QvNCw0L3QtNC40YLQtSDigJ5naXQgYmlzZWN0IGJhZOKAnCDQuCDigJ5naXQgYmlzZWN0IGdvb2TigJwuKSIKKworIyBGSVhNRSBtZQorIzogZ2l0LWJpc2VjdC5zaDoyOTUKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSBnb29kIGFuZCBvbmUgYmFkIHJldmlzaW9uLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgYmFkXCIgYW5kIFwiZ2l0IGJpc2VjdCBnb29kXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorItCi0YDRj9Cx0LLQsCDQtNCwINC30LDQv9C+0YfQvdC10YLQtSDQtNCy0L7QuNGH0L3QvtGC0L4g0YLRitGA0YHQtdC90LUg0YfRgNC10Lcg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBiaXNlY3Qgc3RhcnTigJwuXG4iCisi0YLRgNGP0LHQstCwINC00LAg0LfQsNC00LDQtNC10YLQtSDQv9C+0L3QtSDQtdC00L3QsCDQtNC+0LHRgNCwINC4INC10LTQvdCwINC70L7RiNCwINCy0LXRgNGB0LjRjy4gKNCi0L7QstCwINC80L7QttC1INC00LAg0YHQtVxuIgorItC90LDQv9GA0LDQstC4INGB0YrQvtGC0LLQtdGC0L3QviDQuCDRh9GA0LXQtyDQutC+0LzQsNC90LTQuNGC0LUg4oCeZ2l0IGJpc2VjdCBiYWTigJwg0Lgg4oCeZ2l0IGJpc2VjdCBnb29k4oCcLikiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzY2IGdpdC1iaXNlY3Quc2g6NDkzCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICLQkiDQvNC+0LzQtdC90YLQsCDQvdC1INGB0LUg0LjQt9Cy0YrRgNGI0LLQsCDQtNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtS4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzczCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAi4oCeJGludmFsaWTigJwg0LUg0L3QtdC/0YDQsNCy0LjQu9C90L4g0L/QvtC00LDQstCw0L3QtSIKKworIzogZ2l0LWJpc2VjdC5zaDozODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyRicmFuY2gnLlxuIgorIlRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisi0J/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INGD0LrQsNC30LDQvdC40Y/RgiDQutC70L7QvSDigJ4kYnJhbmNo4oCcINCyINGD0LrQsNC30LDRgtC10LvRjyDigJ5IRUFE4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtVxuIgorItC40LfRgtC10LPQu9C10L0uINCf0YDQvtCx0LLQsNC50YLQtSDQtNCwINC40LfQv9GK0LvQvdC40YLQtSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGJpc2VjdCByZXNldCDQn9Ce0JTQkNCS0JDQndCV4oCcLiIKKworIzogZ2l0LWJpc2VjdC5zaDo0MDkKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICLQndC1INC1INC30LDQtNCw0LTQtdC9INC20YPRgNC90LDQu9C10L0g0YTQsNC50LsiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICIiCisi0JbRg9GA0L3QsNC70L3QuNGP0YIg0YTQsNC50Lsg4oCeJGZpbGXigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0sINC30LAg0LTQsCDRgdC1INC40LfQv9GK0LvQvdGP0YIgIgorItC60L7QvNCw0L3QtNC40YLQtSDQvtGCINC90LXQs9C+INC90LDQvdC+0LLQviIKKworIyBGSVhNRSBXVEYKKyM6IGdpdC1iaXNlY3Quc2g6NDI3Cittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICIiCisi0J3QtdC/0L7Qt9C90LDRgtCwINC60L7QvNCw0L3QtNCwLiDQktGK0LfQvNC+0LbQvdC40YLQtSDQstCw0YDQuNCw0L3RgtC4INGB0LA6IOKAnnN0YXJ04oCcLCDigJ5nb29k4oCcLCDigJ5iYWTigJwsIOKAnnNraXDigJwiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICLQuNC30L/RitC70L3QtdC90LjQtSDQvdCwINC60L7QvNCw0L3QtNCw0YLQsCDigJ4kY29tbWFuZOKAnCIKKworIzogZ2l0LWJpc2VjdC5zaDo0NDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyJleGl0IGNvZGUgJHJlcyBmcm9tICckY29tbWFuZCcgaXMgPCAwIG9yID49IDEyOCIKK21zZ3N0ciAiIgorItC90LXRg9GB0L/QtdGI0L3QviDQtNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtTpcbiIKKyLQuNC30YXQvtC00L3QuNGP0YIg0LrQvtC0INC+0YIg0LrQvtC80LDQvdC00LDRgtCwIOKAniRjb21tYW5k4oCcINC1ICRyZXMg4oCUINGC0L7QstCwINC1INC40LfQstGK0L0g0LjQvdGC0LXRgNCy0LDQu9CwIFswLCAiCisiMTI4KSIKKworIzogZ2l0LWJpc2VjdC5zaDo0NzIKK21zZ2lkICJiaXNlY3QgcnVuIGNhbm5vdCBjb250aW51ZSBhbnkgbW9yZSIKK21zZ3N0ciAi0LTQstC+0LjRh9C90L7RgtC+INGC0YrRgNGB0LXQvdC1INC90LUg0LzQvtC20LUg0LTQsCDQv9GA0L7QtNGK0LvQttC4IgorCisjIEZJWE1FIGluaXRpYWwgc3BhY2UKKyM6IGdpdC1iaXNlY3Quc2g6NDc4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAiIgorItC90LXRg9GB0L/QtdGI0L3QviDQtNCy0L7QuNGH0L3QviDRgtGK0YDRgdC10L3QtTpcbiIKKyLRhNGD0L3QutGG0LjRj9GC0LAg4oCeYmlzZWN0X3N0YXRlICRzdGF0ZeKAnCDQt9Cw0LLRitGA0YjQuCDRgSDQutC+0LQg0LfQsCDQs9GA0LXRiNC60LAgJHJlcyIKKworIzogZ2l0LWJpc2VjdC5zaDo0ODUKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgItGD0YHQv9C10YjQvdC+INC00LLQvtC40YfQvdC+INGC0YrRgNGB0LXQvdC1IgorCisjOiBnaXQtcHVsbC5zaDo2MQorbXNnaWQgIiIKKyJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLlxuIgorIlBsZWFzZSwgZml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgorbXNnc3RyICIiCisi0J3QtdCy0YrQt9C80L7QttC90L4g0LUg0LTQsCDQuNC30LTRitGA0L/QstCw0YLQtSDQsiDQvNC+0LzQtdC90YLQsCwg0LfQsNGJ0L7RgtC+INC90Y/QutC+0Lgg0YTQsNC50LvQvtCy0LUg0L3QtSDRgdCwINGB0LvQtdGC0LguICIKKyLQotGA0Y/QsdCy0LBcbiIKKyLQtNCwINCz0Lgg0L/RgNC10LPQu9C10LTQsNGC0LUsINC60L7RgNC40LPQuNGA0LDRgtC1LCDQsNC60L4g0LUg0L3QtdC+0LHRhdC+0LTQuNC80L4g0Lgg0LTQsCDQs9C4INC00L7QsdCw0LLQuNGC0LUg0LjQu9C4INC40LfQstCw0LTQuNGC0LUgIgorItC+0YJcbiIKKyLQuNC90LTQtdC60YHQsCDRgSDQutC+0LzQsNC90LTQsNGC0LAg4oCeZ2l0IGFkZC9ybSDQpNCQ0JnQm+KAnCwg0YHQu9C10LQg0LrQvtC10YLQviDRgtGA0Y/QsdCy0LAg0LTQsCDQv9C+0LTQsNC00LXRgtC1ICIKKyLQv9GA0L7QvNC10L3QuNGC0LUuIgorCisjOiBnaXQtcHVsbC5zaDo2NQorbXNnaWQgIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorbXNnc3RyICIiCisi0J3QtdCy0YrQt9C80L7QttC90L4g0LUg0LTQsCDQuNC30LTRitGA0L/QstCw0YLQtSDQsiDQvNC+0LzQtdC90YLQsCwg0LfQsNGJ0L7RgtC+INC90Y/QutC+0Lgg0YTQsNC50LvQvtCy0LUg0L3QtSDRgdCwINGB0LvQtdGC0LguIgorCisjOiBnaXQtcHVsbC5zaDo3MQorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIgorbXNnc3RyICIiCisi0J3QtSDRgdGC0LUg0LfQsNCy0YrRgNGI0LjQu9C4INGB0LvQuNCy0LDQvdC1LiAo0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeTUVSR0VfSEVBROKAnCDRgdGK0YnQtdGB0YLQstGD0LLQsCkuXG4iCisi0J/QvtC00LDQudGC0LUg0L/RgNC+0LzQtdC90LjRgtC1INGB0LgsINC/0YDQtdC00Lgg0LTQsCDQt9Cw0L/QvtGH0L3QtdGC0LUg0L3QvtCy0L4g0YHQu9C40LLQsNC90LUuIgorCisjOiBnaXQtcHVsbC5zaDoyODUKK21zZ2lkICJ1cGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXgiCittc2dzdHIgItC+0LHQvdC+0LLRj9Cy0LDQvdC1INC90LAg0LLRgdC1INC+0YnQtSDQvdC10YHRitC30LTQsNC00LXQvSDQutC70L7QvSDRgSDQv9GA0L7QvNC10L3QuNGC0LUg0L7RgiDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0LXB1bGwuc2g6MzExCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJXYXJuaW5nOiBmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorIldhcm5pbmc6IGNvbW1pdCAkb3JpZ19oZWFkLiIKK21zZ3N0ciAiIgorItCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6INC00L7RgdGC0LDQstGP0L3QtdGC0L4g0L7QsdC90L7QstC4INCy0YrRgNGF0LAg0L3QsCDRgtC10LrRg9GJ0LjRjyDQutC70L7QvS4g0KDQsNCx0L7RgtC90L7RgtC+INCy0LhcbiIKKyLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQutC+0L/QuNC1INCx0LUg0YLRgNC40LLQuNCw0LvQvdC+INGB0LvRj9GC0L4g0L7RgiDQv9C+0LTQsNCy0LDQvdC1IOKAniRvcmlnX2hlYWTigJwuIgorCisjOiBnaXQtcHVsbC5zaDozMzYKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICLQndC1INC80L7QttC1INC00LAg0YHQu9C40LLQsNGC0LUg0LzQvdC+0LbQtdGB0YLQstC+INC60LvQvtC90Lgg0LIg0L/RgNCw0LfQtdC9INCy0YrRgNGF0L7QsiDRg9C60LDQt9Cw0YLQtdC7IgorCisjOiBnaXQtcHVsbC5zaDozNDAKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMiCittc2dzdHIgItCd0LUg0LzQvtC20LUg0LTQsCDQv9GA0LXQsdCw0LfQuNGA0LDRgtC1INCy0YrRgNGF0YMg0L/QvtCy0LXRh9C1INC+0YIg0LXQtNC40L0g0LrQu9C+0L0iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTcKK21zZ2lkICIiCisiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiIGluc3RlYWQuXG4iCisiVG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcmViYXNpbmcsIHJ1biBcImdpdCByZWJhc2UgLS1hYm9ydCIKKyJcIi4iCittc2dzdHIgIiIKKyLQodC70LXQtCDQutC+0YDQuNCz0LjRgNCw0L3QtdGC0L4g0L3QsCDRgtC+0LfQuCDQv9GA0L7QsdC70LXQvCDQuNC30L/RitC70L3QtdGC0LUg4oCeZ2l0IHJlYmFzZSAtLWNvbnRpbnVl4oCcLlxuIgorItCQ0LrQviDQv9GA0LXQtNC/0L7Rh9C40YLQsNGC0LUg0LTQsCDQv9GA0LXRgdC60L7Rh9C40YLQtSDRgtCw0LfQuCDQutGA0YrQv9C60LAsINC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgcmViYXNlIC0tc2tpcOKAnC5cbiIKKyLQl9CwINC00LAg0L7RgtC60LDQttC10YLQtSDQv9GA0LXQsdCw0LfQuNGA0LDQvdC10YLQviDQuCDQtNCwINGB0LUg0LLRitGA0L3QtdGC0LUg0LrRitC8INC/0YrRgNCy0L7QvdCw0YfQsNC70L3QvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1LFxuIgorItC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgcmViYXNlIC0tYWJvcnTigJwuIgorCisjOiBnaXQtcmViYXNlLnNoOjE2NQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAi0JDQstGC0L7QvNCw0YLQuNGH0L3QviDRgdC60LDRgtCw0L3QvtGC0L4g0LUg0L/RgNC40LvQvtC20LXQvdC+LiIKKworIzogZ2l0LXJlYmFzZS5zaDoxNjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAkc3Rhc2hfc2hhMSIKK21zZ3N0ciAi4oCeJHN0YXNoX3NoYTHigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC30LDQv9Cw0LfQtdC9IgorCisjOiBnaXQtcmViYXNlLnNoOjE2OQorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisi0J/RgNC40LvQsNCz0LDQvdC10YLQviDQvdCwINCw0LLRgtC+0LzQsNGC0LjRh9C90L4g0YHQutCw0YLQsNC90L7RgtC+INC00L7QstC10LTQtSDQtNC+INC60L7QvdGE0LvQuNC60YLQuC4g0J/RgNC+0LzQtdC90LjRgtC1INCy0Lgg0YHQsFxuIgorItC90LDQtNC10LbQtNC90L4g0YHQutCw0YLQsNC90LguINCc0L7QttC10YLQtSDQtNCwINC/0YDQvtCx0LLQsNGC0LUg0LTQsCDQs9C4INC/0YDQuNC70L7QttC40YLQtSDRh9GA0LXQtyDigJ5naXQgc3Rhc2ggcG9w4oCcXG4iCisi0LjQu9C4INC00LAg0LPQuCDQuNC30YXQstGK0YDQu9C40YLQtSDRh9GA0LXQtyDigJ5naXQgc3Rhc2ggZHJvcOKAnCwg0LrQvtCz0LDRgtC+INC/0L7QuNGB0LrQsNGC0LUuXG4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjA4Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgItCa0YPQutCw0YLQsCDQt9CwINC40LfQv9GK0LvQvdC10L3QuNC1INC/0YDQtdC00Lgg0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQvtGC0YXQstGK0YDQu9C4INC/0YDQtdCx0LDQt9C40YDQsNC90LXRgtC+LiIKKworIzogZ2l0LXJlYmFzZS5zaDoyMTMKK21zZ2lkICJJdCBsb29rcyBsaWtlIGdpdC1hbSBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIiIKKyLQmNC30LPQu9C10LbQtNCwLCDRh9C1INGB0LXQs9CwINGB0LUg0L/RgNC40LvQsNCz0LDRgiDQutGA0YrQv9C60Lgg0YfRgNC10Lcg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdC1hbeKAnC4g0J3QtSDQvNC+0LbQtSDQtNCwICIKKyLQv9GA0LXQsdCw0LfQuNGA0LDRgtC1INCyINC80L7QvNC10L3RgtCwLiIKKworIzogZ2l0LXJlYmFzZS5zaDozNTEKK21zZ2lkICJUaGUgLS1leGVjIG9wdGlvbiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24iCittc2dzdHIgItCe0L/RhtC40Y/RgtCwIOKAni0tZXhlY+KAnCDQt9Cw0LTRitC70LbQuNGC0LXQu9C90L4g0LjQt9C40YHQutCy0LAg0L7Qv9GG0LjRj9GC0LAg4oCeLS1pbnRlcmFjdGl2ZeKAnCIKKworIyBGSVhNRSBtZXNzYWdlCisjOiBnaXQtcmViYXNlLnNoOjM1NgorbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgItCY0LfQs9C70LXQttC00LAg0LIg0LzQvtC80LXQvdGC0LAg0L3QtSDRgtC10YfQtSDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1IgorCisjOiBnaXQtcmViYXNlLnNoOjM2NworbXNnaWQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIKK21zZ3N0ciAiIgorItCe0L/RhtC40Y/RgtCwIOKAni0tZWRpdC10b2Rv4oCcINC1INC00L7RgdGC0YrQv9C90LAg0YHQsNC80L4g0L/QviDQstGA0LXQvNC1INC90LAg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+INC/0YDQtdCx0LDQt9C40YDQsNC90LUuIgorCisjOiBnaXQtcmViYXNlLnNoOjM3NAorbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0L3QtSDQvNC+0LbQtSDQtNCwINCx0YrQtNC1INC/0YDQvtGH0LXRgtC10L0iCisKKyM6IGdpdC1yZWJhc2Uuc2g6Mzc3Cittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisi0KLRgNGP0LHQstCwINC00LAg0YDQtdC00LDQutGC0LjRgNCw0YLQtSDQstGB0LjRh9C60Lgg0LrQvtC90YTQu9C40LrRgtC4INC/0YDQuCDRgdC70LjQstCw0L3QtdGC0L4uINCh0LvQtdC0INGC0L7QstCwXG4iCisi0L7RgtCx0LXQu9C10LbQtdGC0LUg0LrQvtGA0LjQs9C40YDQsNC90LXRgtC+INC40Lwg0YfRgNC10Lcg0LrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBhZGTigJwiCisKKyM6IGdpdC1yZWJhc2Uuc2g6Mzk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbW92ZSBiYWNrIHRvICRoZWFkX25hbWUiCittc2dzdHIgItCS0YDRitGJ0LDQvdC10YLQviDQutGK0Lwg4oCeJGhlYWRfbmFtZeKAnCDQtSDQvdC10LLRitC30LzQvtC20L3QviIKKworIyBGSVhNRSB0YWJ1bGF0b3JzLCBJLCBkb3VibGUgc3BhY2VzCisjOiBnaXQtcmViYXNlLnNoOjQxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICRzdGF0ZV9kaXJfYmFzZSBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS4iCittc2dzdHIgIiIKKyLQktC10YfQtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDigJ4kc3RhdGVfZGlyX2Jhc2UgZGlyZWN0b3J54oCcLiDQktGK0LfQvNC+0LbQvdC+INC70Lgg0LUg0LTQsCAiCisi0YHRgtC1XG4iCisi0LIg0L/RgNC+0YbQtdGBINC90LAg0LTRgNGD0LPQviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1PyDQkNC60L4g0YLQvtCy0LAg0LUg0YLQsNC60LAsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyIgICAgJGNtZF9saXZlX3JlYmFzZVxuIgorItCQ0LrQviDQvdC1INGB0YLQtSDQsiDQv9GA0L7RhtC10YEg0L3QsCDQtNGA0YPQs9C+INC/0YDQtdCx0LDQt9C40YDQsNC90LUsINC40LfQv9GK0LvQvdC10YLQtTpcbiIKKyIgICAgJGNtZF9jbGVhcl9zdGFsZV9yZWJhc2VcbiIKKyLQuCDQvtGC0L3QvtCy0L4g0LfQsNC/0L7Rh9C90LXRgtC1INC/0YDQtdCx0LDQt9C40YDQsNC90LXRgtC+LiDQotC10LrRg9GJ0L7RgtC+INC/0YDQtdCx0LDQt9C40YDQsNC90LUg0YHQtSDQv9GA0LXRg9GB0YLQsNC90L7QstGP0LLQsCwg0LfQsFxuIgorItC00LAg0L3QtSDQt9Cw0LPRg9Cx0LjRgtC1INGB0LvRg9GH0LDQudC90L4g0L/RgNC+0LzQtdC90LguIgorCisjOiBnaXQtcmViYXNlLnNoOjQ2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAkdXBzdHJlYW1fbmFtZSIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9C90LAg0L7RgdC90L7QstCwINC30LAg0YHRgNCw0LLQvdC10L3QuNC1IOKAniR1cHN0cmVhbV9uYW1l4oCcIgorCisjOiBnaXQtcmViYXNlLnNoOjQ4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIiIKKyLRg9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4kb250b19uYW1l4oCcINC80L7QttC1INC00LAg0YHQvtGH0Lgg0LrRitC8INC/0L7QstC10YfQtSDQvtGCINC10LTQvdCwINC+0YHQvdC+0LLQsCDQt9CwICIKKyLQv9GA0LXQsdCw0LfQuNGA0LDQvdC10YLQviIKKworIzogZ2l0LXJlYmFzZS5zaDo0OTIgZ2l0LXJlYmFzZS5zaDo0OTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGlzIG5vIG1lcmdlIGJhc2UiCittc2dzdHIgItGD0LrQsNC30LDRgtC10LvRj9GCIOKAniRvbnRvX25hbWXigJwg0L3QtSDRgdC+0YfQuCDQutGK0Lwg0L3QuNC60LDQutCy0LAg0L7RgdC90L7QstCwINC30LAg0L/RgNC10LHQsNC30LjRgNCw0L3QtdGC0L4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdDogJG9udG9fbmFtZSIKK21zZ3N0ciAi0KPQutCw0LfQsNGC0LXQu9GP0YIg4oCeJG9udG9fbmFtZeKAnCDQvdC1INGB0L7Rh9C4INC60YrQvCDQv9C+0LTQsNCy0LDQvdC1IgorCisjOiBnaXQtcmViYXNlLnNoOjUyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiZmF0YWw6IG5vIHN1Y2ggYnJhbmNoOiAkYnJhbmNoX25hbWUiCittc2dzdHIgItGE0LDRgtCw0LvQvdCwINCz0YDQtdGI0LrQsDog0L3QtSDRgdGK0YnQtdGB0YLQstGD0LLQsCDQutC70L7QvSDigJ4kYnJhbmNoX25hbWXigJwiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTU3Cittc2dpZCAiQ2Fubm90IGF1dG9zdGFzaCIKK21zZ3N0ciAi0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0YHQutCw0YLQsNC1INCw0LLRgtC+0LzQsNGC0LjRh9C90L4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTYyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJHN0YXNoX2FiYnJldiIKK21zZ3N0ciAi0JDQstGC0L7QvNCw0YLQuNGH0L3QviDRgdC60LDRgtCw0L3Qvjog4oCeJHN0YXNoX2FiYnJlduKAnCIKKworIzogZ2l0LXJlYmFzZS5zaDo1NjYKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICLQn9GA0L7QvNC10L3QuNGC0LUg0YLRgNGP0LHQstCwINC40LvQuCDQtNCwINGB0LUg0L/QvtC00LDQtNCw0YIsINC40LvQuCDQtNCwINGB0LUg0YHQutCw0YLQsNGP0YIuIgorCisjOiBnaXQtcmViYXNlLnNoOjU4NgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICLQotC10LrRg9GJ0LjRj9GCINC60LvQvtC9IOKAniRicmFuY2hfbmFtZeKAnCDQtSDQvdCw0L/RitC70L3QviDQsNC60YLRg9Cw0LvQtdC9LiIKKworIzogZ2l0LXJlYmFzZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiIgorItCi0LXQutGD0YnQuNGP0YIg0LrQu9C+0L0g4oCeJGJyYW5jaF9uYW1l4oCcINC1INC90LDQv9GK0LvQvdC+INCw0LrRgtGD0LDQu9C10L0uINCf0YDQtdCx0LDQt9C40YDQsNC90LXRgtC+INC1ICIKKyLQv9GA0LjQvdGD0LTQuNGC0LXQu9C90L4uIgorCisjOiBnaXQtcmViYXNlLnNoOjYwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICRtYiB0byAkb250bzoiCittc2dzdHIgItCf0YDQvtC80LXQvdC40YLQtSDQvtGCIOKAniRtYuKAnCDQutGK0Lwg4oCeJG9udG/igJw6IgorCisjOiBnaXQtcmViYXNlLnNoOjYxMAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKK21zZ3N0ciAiIgorItCf0YrRgNCy0L4sINGD0LrQsNC30LDRgtC10LvRj9GCIOKAnkhFQUTigJwg0LfQsNC/0L7Rh9Cy0LAg0LTQsCDRgdC+0YfQuCDQutGK0Lwg0LHQsNC30LDRgtCwLCDQstGK0YDRhdGDINC60L7Rj9GC0L4g0L/RgNC10LHQsNC30LjRgNCw0YLQteKApiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICRicmFuY2hfbmFtZSB0byAkb250b19uYW1lLiIKK21zZ3N0ciAi0KLRgNC40LLQuNCw0LvQvdC+INGB0LvQuNCy0LDQvdC1INC90LAg4oCeJGJyYW5jaF9uYW1l4oCcINCy0YrRgNGF0YMg4oCeJG9udG9fbmFtZeKAnC4iCisKKyMgRklYTUUgLSBzaG91bGQgJ2NsZWFyJyBub3QgdGFrZSBwYXJhbWV0ZXJzIGluIHByaW5jaXBsZT8KKyM6IGdpdC1zdGFzaC5zaDo1MQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAi0JrQvtC80LDQvdC00LDRgtCwIOKAnmdpdCBzdGFzaCBjbGVhcuKAnCDQvdC1INC/0L7QtNC00YrRgNC20LAg0LDRgNCz0YPQvNC10L3RgtC4IgorCisjOiBnaXQtc3Rhc2guc2g6NzQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIKK21zZ3N0ciAi0JLRgdC1INC+0YnQtSDQu9C40L/RgdCy0LAg0L/RitGA0LLQvtC90LDRh9Cw0LvQvdC+INC/0L7QtNCw0LLQsNC90LUiCisKKyM6IGdpdC1zdGFzaC5zaDo4OQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICLQodGK0YHRgtC+0Y/QvdC40LXRgtC+INC90LAg0YLQtdC60YPRidC40Y8g0LjQvdC00LXQutGBINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QsNC30LXQvdC+IgorCisjOiBnaXQtc3Rhc2guc2g6MTI0IGdpdC1zdGFzaC5zaDoxMzcKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAi0KHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QsNC30LXQvdC+IgorCisjOiBnaXQtc3Rhc2guc2g6MTQxCittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAi0J3QtSDRgdCwINC40LfQsdGA0LDQvdC4INC90LjQutCw0LrQstC4INC/0YDQvtC80LXQvdC4IgorCisjIEZJWE1FIGNhbid0IGhhcHBlbj8/PyDQvNC+0LbQtSwg0LzQvtC20LUKKyM6IGdpdC1zdGFzaC5zaDoxNDQKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAi0JLRgNC10LzQtdC90L3QuNGP0YIg0LjQvdC00LXQutGBINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YIiCisKKyM6IGdpdC1zdGFzaC5zaDoxNTcKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAi0KHRitGB0YLQvtGP0L3QuNC10YLQviDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QsNC30LXQvdC+IgorCisjOiBnaXQtc3Rhc2guc2g6MTkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIiIKKyLQo9C60LDQt9Cw0YLQtdC70Y/RgiDigJ4kcmVmX3N0YXNo4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvSDQtNCwINGB0L7Rh9C4INC60YrQvCDigJ4kd19jb21taXTigJwiCisKKyMuIFRSQU5TTEFUT1JTOiAkb3B0aW9uIGlzIGFuIGludmFsaWQgb3B0aW9uLCBsaWtlCisjLiBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMuIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKyMuIHVwIHRoZSBzZWNvbmQgbGluZSB3aXRoIGhvd2V2ZXIgbWFueSBjaGFyYWN0ZXJzIHRoZQorIy4gdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKyMuIEVuZ2xpc2ggdGhpcyBpczoKKyMuCisjLiAkIGdpdCBzdGFzaCBzYXZlIC0tYmxhaC1ibGFoIDI+JjEgfCBoZWFkIC1uIDIKKyMuIGVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAtLWJsYWgtYmxhaAorIy4gVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnLS1ibGFoLWJsYWgnCisjOiBnaXQtc3Rhc2guc2g6MjQxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyIgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCittc2dzdHIgIiIKKyLQs9GA0LXRiNC60LA6INC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgc3Rhc2ggc2F2ZeKAnCDQvdC1INC/0L7QtNC00YrRgNC20LAg0L7Qv9GG0LjRjyDigJ4kb3B0aW9u4oCcXG4iCisiICAgICAgICDQl9CwINC00LAg0LfQsNC00LDQtNC10YLQtSDRgdGK0L7QsdGJ0LXQvdC40LUsINC40LfQv9GK0LvQvdC10YLQtSDigJ5naXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbifigJwiCisKKyM6IGdpdC1zdGFzaC5zaDoyNjIKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgItCd0Y/QvNCwINC90LjQutCw0LrQstC4INC70L7QutCw0LvQvdC4INC/0YDQvtC80LXQvdC4INC30LAg0YHQutCw0YLQsNCy0LDQvdC1IgorCisjOiBnaXQtc3Rhc2guc2g6MjY2Cittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgItCh0LrQsNGC0LDQstCw0L3QtdGC0L4g0L3QtSDQvNC+0LbQtSDQtNCwINGB0YLQsNGA0YLQuNGA0LAiCisKKyM6IGdpdC1zdGFzaC5zaDoyNzAKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgItCi0LXQutGD0YnQvtGC0L4g0YHRitGB0YLQvtGP0L3QuNC1INC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQt9Cw0L/QsNC30LXQvdC+IgorCisjOiBnaXQtc3Rhc2guc2g6Mjg4Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICLQn9GA0L7QvNC10L3QuNGC0LUg0LIg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L3QtSDQvNC+0LPQsNGCINC00LAg0LHRitC00LDRgiDQt9Cw0L3Rg9C70LXQvdC4IgorCisjOiBnaXQtc3Rhc2guc2g6Mzg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAi0L3QtdC/0L7Qt9C90LDRgtCwINC+0L/RhtC40Y86ICRvcHQiCisKKyM6IGdpdC1zdGFzaC5zaDozOTkKK21zZ2lkICJObyBzdGFzaCBmb3VuZC4iCittc2dzdHIgItCd0LUg0LUg0L7RgtC60YDQuNGC0L4g0L3QuNGJ0L4g0YHQutCw0YLQsNC90L4uIgorCisjOiBnaXQtc3Rhc2guc2g6NDA2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QuCDRgdCwINC/0YDQtdC60LDQu9C10L3QviDQvNC90L7Qs9C+INCy0LXRgNGB0LjQuDog4oCeJFJFVuKAnCIKKworIzogZ2l0LXN0YXNoLnNoOjQxMgorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgItCj0LrQsNC30LDRgtC10LvRj9GCIOKAniRyZWZlcmVuY2XigJwg0LUg0LPRgNC10YjQtdC9IgorCisjOiBnaXQtc3Rhc2guc2g6NDQwCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICLigJ4kYXJnc+KAnCDQvdC1INC1INC/0L7QtNCw0LLQsNC90LUsINC/0YDQuNC70LjRh9Cw0YnQviDQvdCwINC90LXRidC+INGB0LrQsNGC0LDQvdC+IgorCisjOiBnaXQtc3Rhc2guc2g6NDUxCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAi4oCeJGFyZ3PigJwg0L3QtSDQtSDRg9C60LDQt9Cw0YLQtdC7INC60YrQvCDQvdC10YnQviDRgdC60LDRgtCw0L3QviIKKworIzogZ2l0LXN0YXNoLnNoOjQ1OQorbXNnaWQgInVuYWJsZSB0byByZWZyZXNoIGluZGV4IgorbXNnc3RyICLQuNC90LTQtdC60YHRitGCINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQvtCx0L3QvtCy0LXQvSIKKworIzogZ2l0LXN0YXNoLnNoOjQ2MworbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAi0J/QviDQstGA0LXQvNC1INC90LAg0YHQu9C40LLQsNC90LUg0L3QtSDQvNC+0LbQtSDQtNCwINC/0YDQuNC70L7QttC40YLQtSDQvdC10YnQviDRgdC60LDRgtCw0L3QviIKKworIzogZ2l0LXN0YXNoLnNoOjQ3MQorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIiIKKyLQkiDQuNC90LTQtdC60YHQsCDQuNC80LAg0LrQvtC90YTQu9C40LrRgtC4LiDQn9GA0L7QsdCy0LDQudGC0LUg0LTQsCDQuNC30L/RitC70L3QuNGC0LUg0LrQvtC80LDQvdC00LDRgtCwINCx0LXQtyDQvtC/0YbQuNGP0YLQsCDigJ4tLSIKKyJpbmRleOKAnC4iCisKKyM6IGdpdC1zdGFzaC5zaDo0NzMKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICLQlNGK0YDQstC+0YLQviDRgdC+0YfQtdC90L4g0L7RgiDQuNC90LTQtdC60YHQsCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LfQsNC/0LDQt9C10L3QviIKKworIzogZ2l0LXN0YXNoLnNoOjUwNworbXNnaWQgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgorbXNnc3RyICLQn9GA0L7QvNC10L3QtdC90LjRgtC1INGE0LDQudC70L7QstC1INC90LUg0LzQvtCz0LDRgiDQtNCwINCx0YrQtNCw0YIg0LjQt9Cy0LDQtNC10L3QuCDQvtGCINC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtc3Rhc2guc2g6NTIyCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICLQmNC90LTQtdC60YHRitGCINC90LUg0LUg0YHQutCw0YLQsNC9LiIKKworIzogZ2l0LXN0YXNoLnNoOjU0NQorIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAi0JjQt9GC0YDQuNGC0L4g0LUg0YHQutCw0YLQsNC90L7RgtC+IOKAniR7UkVWfeKAnCAoJHMpIgorCisjOiBnaXQtc3Rhc2guc2g6NTQ2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICLQodC60LDRgtCw0L3QvtGC0L4g4oCeJHtSRVZ94oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSDQuNC30YLRgNC40YLQviIKKworIzogZ2l0LXN0YXNoLnNoOjU1NAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAi0J3QtSDQtSDRg9C60LDQt9Cw0L3QviDQuNC80LUg0L3QsCDQutC70L7QvSIKKworIzogZ2l0LXN0YXNoLnNoOjYyNgorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiKNCX0LAg0LTQsCDQs9C4INCy0YrQt9GB0YLQsNC90L7QstC40YLQtSwg0LjQt9C/0YrQu9C90LXRgtC1INC60L7QvNCw0L3QtNCw0YLQsCDigJ5naXQgc3Rhc2ggYXBwbHnigJwpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICckcmVtb3RldXJsJyIKK21zZ3N0ciAi0L3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0LzQsNGF0L3QtSDQutC+0LzQv9C+0L3QtdC90YIg0L7RgiDQsNC00YDQtdGB0LAg4oCeJHJlbW90ZXVybOKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIk5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICckc21fcGF0aCciCittc2dzdHIgItCS0YrQsiDRhNCw0LnQu9CwIOKAni5naXRtb2R1bGVz4oCcINC70LjQv9GB0LLQsCDQuNC90YTQvtGA0LzQsNGG0LjRjyDQt9CwINC/0YrRgtGPIOKAniRzbV9wYXRo4oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4NworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBmYWlsZWQiCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQutC70L7QvdC40YDQsNC90LUg0L3QsCDQsNC00YDQtdGB0LAg4oCeJHVybOKAnCDQsiDQv9GK0YLRjyDigJ4kc21fcGF0aOKAnCDQutCw0YLQviDQv9C+0LTQvNC+0LTRg9C7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI5NgorIywgc2gtZm9ybWF0Cittc2dpZCAiR2l0ZGlyICckYScgaXMgcGFydCBvZiB0aGUgc3VibW9kdWxlIHBhdGggJyRiJyBvciB2aWNlIHZlcnNhIgorbXNnc3RyICLQlNC40YDQtdC60YLQvtGA0LjRj9GC0LAg0LIgR2l0IOKAniRh4oCcINC1INGH0LDRgdGCINC+0YIg0L/RitGC0Y8g0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJGLigJwg0LjQu9C4INC+0LHRgNCw0YLQvdC+IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQwNgorbXNnaWQgIlJlbGF0aXZlIHBhdGggY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisi0J7RgtC90L7RgdC40YLQtdC70LXQvSDQv9GK0YIg0LzQvtC20LUg0LTQsCDRgdC1INC/0L7Qu9C30LLQsCDRgdCw0LzQviDQvtGCINC+0YHQvdC+0LLQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwINGA0LDQsdC+0YLQvdC+0YLQviAiCisi0LTRitGA0LLQviIKKworIyBGSVhNRSAtIHdoYXQgaXMgdGhpcyByZWdleD8KKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDE2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICIiCisi0LDQtNGA0LXRgSDQvdCwINGF0YDQsNC90LjQu9C40YnQtTog4oCeJHJlcG/igJwg0YLRgNGP0LHQstCwINC40LvQuCDQtNCwINC1INCw0LHRgdC+0LvRjtGC0LXQvSwg0LjQu9C4INC00LAg0LfQsNC/0L7Rh9Cy0LAg0YEg4oCeLi/igJwgIgorItC40LvQuCDigJ4uLi/igJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDMzCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAi4oCeJHNtX3BhdGjigJwg0LLQtdGH0LUg0YHRitGJ0LXRgdGC0LLRg9Cy0LAg0LIg0LjQvdC00LXQutGB0LAiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBwYXRoIGlzIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKKyIkc21fcGF0aFxuIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIGl0LiIKK21zZ3N0ciAiIgorItCh0LvQtdC00L3QuNGP0YIg0L/RitGCINGB0LUg0LjQs9C90L7RgNC40YDQsCDQv9C+0YDQsNC00Lgg0L3Rj9C60L7QuSDQvtGCINGE0LDQudC70L7QstC10YLQtSDigJ4uZ2l0aWdub3Jl4oCcOlxuIgorIiRzbV9wYXRoXG4iCisi0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDQvtC/0YbQuNGP0YLQsCDigJ4tZuKAnCwg0LDQutC+INC30LAg0LTQsCDQs9C+INC00L7QsdCw0LLQuNGC0LUg0L3QsNC40YHRgtC40L3QsC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi0JTQvtCx0LDQstGP0L3QtSDQvdCwINGB0YrRidC10YHRgtCy0YPQstCw0YnQvtGC0L4g0YXRgNCw0L3QuNC70LjRidC1INCyIOKAniRzbV9wYXRo4oCcINC60YrQvCDQuNC90LTQtdC60YHQsCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICLigJ4kc21fcGF0aOKAnCDRgdGK0YnQtdGB0YLQstGD0LLQsCwg0LAg0L3QtSDQtSDRhdGA0LDQvdC40LvQuNGJ0LUg0L3QsCBHaXQiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDY1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgIiIKKyLQntGC0LrRgNC40YLQsCDQtSDQu9C+0LrQsNC70L3QsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdCwIEdpdCDigJQg4oCeJHNtX25hbWXigJwsINC60L7Rj9GC0L4g0YHQvtGH0Lgg0LrRitC8ICIKKyLQvtGC0LTQsNC70LXRh9C10L3QuNGC0LUg0YXRgNCw0L3QuNC70LjRidCwOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb20iCittc2dzdHIgIiIKKyLQkNC60L4g0LjRgdC60LDRgtC1INC00LAg0L/RgNC10LjQt9C/0L7Qu9C30LLQsNGC0LUg0YLQsNC30Lgg0LvQvtC60LDQu9C90LAg0LTQuNGA0LXQutGC0L7RgNC40Y8g0L3QsCBHaXQg0LLQvNC10YHRgtC+INC00LAg0L7RgtC90L7QstC+ICIKKyLQtNCwINC60LvQvtC90LjRgNCw0YLQtToiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgcmVwbyIKK21zZ3N0ciAiIgorItC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0L7Qv9GG0LjRj9GC0LAg4oCeLS1mb3JjZeKAnC4g0JDQutC+INC70L7QutCw0LvQvdCw0YLQsCDQtNC40YDQtdC60YLQvtGA0LjRjyDQvdC1INGB0L7Rh9C4INC60YrQvCAiCisi0L/RgNCw0LLQuNC70L3QvtGC0L4g0L7RgtC00LDQu9C10YfQtdC90L4g0YXRgNCw0L3QuNC70LjRidC1IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyJvcHRpb24uIgorbXNnc3RyICIiCisi0LjQu9C4INC90LUg0YHRgtC1INGB0LjQs9GD0YDQvdC4INC60LDQutCy0L4g0L7Qt9C90LDRh9Cw0LLQsCDQstGB0LjRh9C60L4g0YLQvtCy0LAsINC/0YDQvtGB0YLQviDQt9Cw0LTQsNC50YLQtSDQtNGA0YPQs9C+INC40LzQtSDQutCw0YLQviAiCisi0LDRgNCz0YPQvNC10L3RgiDQvdCwINC+0L/RhtC40Y/RgtCwIOKAni0tbmFtZeKAnC4iCisKKyMgRklYTUUg0LDQutGC0LjQstC40YDQsNC90LUgLSDQutCw0LrQstC+INCy0YHRitGJ0L3QvtGB0YIg0YHRgtCw0LLQsAorIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgItCQ0LrRgtC40LLQuNGA0LDQvdC1INC90LAg0LvQvtC60LDQu9C90L7RgtC+INGF0YDQsNC90LjQu9C40YnQtSDQt9CwINC/0L7QtNC80L7QtNGD0LvQsCDigJ4kc21fbmFtZeKAnCDQvdCw0L3QvtCy0L4uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ4NAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70YrRgiDigJ4kc21fcGF0aOKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0LjQt9GC0LXQs9C70LXQvSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQtNC+0LHQsNCy0Y/QvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniRzbV9wYXRo4oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ5OAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YDQtdCz0LjRgdGC0YDQuNGA0LDQvdC1INC90LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniRzbV9wYXRo4oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyRwcmVmaXgkZGlzcGxheXBhdGgnIgorbXNnc3RyICLQktC70LjQt9Cw0L3QtSDQsiDigJ4kcHJlZml4JGRpc3BsYXlwYXRo4oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU2MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBpbmcgYXQgJyRwcmVmaXgkZGlzcGxheXBhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKK21zZ3N0ciAiIgorItCh0L/QuNGA0LDQvdC1INC/0YDQuCDigJ4kcHJlZml4JGRpc3BsYXlwYXRo4oCcIOKAlCDQuNC30YXQvtC00L3QuNGP0YIg0LrQvtC0INC+0YIg0YHQutGA0LjQv9GC0LAg0LHQtSDRgNCw0LfQu9C40YfQtdC9INC+0YIgIgorIjAuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiIgorItCS0YrQsiDRhNCw0LnQu9CwIOKAni5naXRtb2R1bGVz4oCcINC90LUg0LUg0L7RgtC60YDQuNGCINCw0LTRgNC10YEg0LfQsCDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4kZGlzcGxheXBhdGjigJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0J3QtdGD0YHQv9C10YjQvdC+INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QtSDQvdCwINCw0LTRgNC10YEg0LfQsCDQv9GK0YLRjyDQutGK0Lwg0L/QvtC00LzQvtC00YPQuyDigJ4kZGlzcGxheXBhdGjigJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorItCg0LXQs9C40YHRgtGA0LjRgNCw0L0g0LUg0L/QvtC00LzQvtC00YPQuyDigJ4kbmFtZeKAnCwg0YHQvtGH0LXRiSDQutGK0Lwg0LDQtNGA0LXRgSDigJ4kdXJs4oCcLCDQt9CwINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7ICIKKyLigJ4kZGlzcGxheXBhdGjigJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisi0J3QtdGD0YHQv9C10YjQvdC+INGA0LXQs9C40YHRgtGA0LjRgNCw0L3QtSDQvdCwINGA0LXQttC40LzQsCDQvdCwINC+0LHQvdC+0LLRj9Cy0LDQvdC1INC30LAg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0LsgIgorIuKAniRkaXNwbGF5cGF0aOKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVzZSAnLicgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAi0JjQt9C/0L7Qu9C30LLQsNC50YLQtSDigJ4u4oCcLCDQt9CwINC00LAg0L/RgNC10LzQsNGF0L3QtdGC0LUg0LLRgdC40YfQutC4INC/0L7QtNC80L7QtNGD0LvQuCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorItCf0YrRgtGP0YIg0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJGRpc3BsYXlwYXRo4oCcINCyINGA0LDQsdC+0YLQvdC+0YLQviDQtNGK0YDQstC+INGB0YrQtNGK0YDQttCwINC00LjRgNC10LrRgtC+0YDQuNGPIOKAni5naXTigJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjkyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiKHVzZSAncm0gLXJmJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIgorbXNnc3RyICIiCisiKNC40LfQv9C+0LvQt9Cy0LDQudGC0LUg0LrQvtC80LDQvdC00LDRgtCwIOKAnnJtIC1yZuKAnCwg0LfQsCDQtNCwINCz0L4g0LjQt9GC0YDQuNC10YLQtSDQt9Cw0LXQtNC90L4g0YEg0YbRj9C70LDRgtCwINC80YMgIgorItC40YHRgtC+0YDQuNGPKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICckZGlzcGxheXBhdGgnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvICIKKyJkaXNjYXJkIHRoZW0iCittc2dzdHIgIiIKKyLQn9GK0YLRj9GCINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniRkaXNwbGF5cGF0aOKAnCDQsiDRgNCw0LHQvtGC0L3QvtGC0L4g0LTRitGA0LLQviDRgdGK0LTRitGA0LbQsCDQu9C+0LrQsNC70L3QuCDQv9GA0L7QvNC10L3QuC4gIgorItCc0L7QttC10YLQtSDQtNCwINCz0Lgg0L/RgNC10L3QtdCx0YDQtdCz0L3QtdGC0LUg0Lgg0L7RgtC80LXQvdC40YLQtSDRgSDQvtC/0YbQuNGP0YLQsCDigJ4tZuKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQlNC40YDQtdC60YLQvtGA0LjRj9GC0LAg4oCeJGRpc3BsYXlwYXRo4oCcINC1INC40LfRh9C40YHRgtC10L3QsCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgc3VibW9kdWxlIHdvcmsgdHJlZSAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorItCU0LjRgNC10LrRgtC+0YDQuNGP0YLQsCDQutGK0Lwg0YDQsNCx0L7RgtC90L7RgtC+INC00YrRgNCy0L4g0L3QsCDQv9C+0LTQvNC+0LTRg9C70LAg4oCeJGRpc3BsYXlwYXRo4oCcINC90LUg0LzQvtC20LUg0LTQsCDQsdGK0LTQtSAiCisi0LjQt9GC0YDQuNGC0LAiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGVtcHR5IHN1Ym1vZHVsZSBkaXJlY3RvcnkgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyLQn9GA0LDQt9C90LDRgtCwINC00LjRgNC10LrRgtC+0YDQuNGPINC30LAg0L/QvtC00LzQvtC00YPQu9CwIOKAniRkaXNwbGF5cGF0aOKAnCDQvdC1INC80L7QttC1INC00LAg0LHRitC00LUg0YHRitC30LTQsNC00LXQvdCwIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorItCf0YDQtdC80LDRhdC90LDRgtCwINC1INGA0LXQs9C40YHRgtGA0LDRhtC40Y/RgtCwINC90LAg0L/QvtC00LzQvtC00YPQuyDigJ4kbmFtZeKAnCwg0YHQvtGH0LXRiSDQutGK0Lwg0LDQtNGA0LXRgSDigJ4kdXJs4oCcLCDQt9CwICIKKyLQv9GK0YLRjyDigJ4kZGlzcGxheXBhdGjigJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIiIKKyLQn9GK0YLRj9GCINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniRkaXNwbGF5cGF0aOKAnCDQvdC1INC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQsNC9LlxuIgorItCf0YDQvtCx0LLQsNC50YLQtSDRgSDQutC+0LzQsNC90LTQsNGC0LAg4oCedXBkYXRlIC0taW5pdOKAnC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQotC10LrRg9GJ0LDRgtCwINCy0LXRgNGB0LjRjyDQt9CwINC/0L7QtNC80L7QtNGD0LvQsCDQsiDigJ4kZGlzcGxheXBhdGjigJwg0LvQuNC/0YHQstCwIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg1MgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQtNC+0YHRgtCw0LLRj9C90LUg0LIg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJHNtX3BhdGjigJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODc2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QviDQtNC+0YHRgtCw0LLRj9C90LUg0LIg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJGRpc3BsYXlwYXRo4oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0LjQt9GC0LXQs9C70Y/QvdC1INC90LAg0LLQtdGA0YHQuNGPIOKAniRzaGEx4oCcINCyINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniRkaXNwbGF5cGF0aOKAnCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAi0J/RitGCINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniRkaXNwbGF5cGF0aOKAnDog0LjQt9GC0LXQs9C70LXQvdCwINC1INCy0LXRgNGB0LjRjyDigJ4kc2hhMeKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorItCd0LXRg9GB0L/QtdGI0L3QviDQv9GA0LXQsdCw0LfQuNGA0LDQvdC1INC90LAg0LLQtdGA0YHQuNGPIOKAniRzaGEx4oCcINCyINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniRkaXNwbGF5cGF0aOKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAi0J/RitGCINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniRkaXNwbGF5cGF0aOKAnDog0L/RgNC10LHQsNC30LjRgNCw0L3QtSDQstGK0YDRhdGDINCy0LXRgNGB0LjRjyDigJ4kc2hhMeKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQndC10YPRgdC/0LXRiNC90L4g0YHQu9C40LLQsNC90LUg0L3QsCDQstC10YDRgdC40Y8g4oCeJHNoYTHigJwg0LIg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJGRpc3BsYXlwYXRo4oCcIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwMgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICLQn9GK0YIg0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJGRpc3BsYXlwYXRo4oCcOiDRgdC70LjQstCw0L3QtSDRgSDQstC10YDRgdC40Y8g4oCeJHNoYTHigJwiCisKKyMgRklYTUUgc3BhY2VzCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgIHBhdGggJyRwcmVmaXgkc21fcGF0aCciCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90L4g0LjQt9C/0YrQu9C90LXQvdC40LUg0L3QsCDQutC+0LzQsNC90LTQsNGC0LAg4oCeJGNvbW1hbmQgJHNoYTHigJwg0LIg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0LsgIgorIuKAniRwcmVmaXgkc21fcGF0aOKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckcHJlZml4JHNtX3BhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICLQn9GK0YIg0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJHByZWZpeCRzbV9wYXRo4oCcOiDigJ4kY29tbWFuZCAkc2hhMeKAnCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyLQndC10YPRgdC/0LXRiNC90LAg0L7QsdGA0LDQsdC+0YLQutCwINC90LAg0L/QvtC00LTQuNGA0LXQutGC0L7RgNC40LjRgtC1INCyINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniRkaXNwbGF5cGF0aOKAnCIKKworIyBGSVhNRSBtZXNzYWdlCisjOiBnaXQtc3VibW9kdWxlLnNoOjEwNDYKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICLQntC/0YbQuNC40YLQtSDigJ4tLWNhY2hlZOKAnCDQuCDigJ4tLWZpbGVz4oCcINGB0LAg0L3QtdGB0YrQstC80LXRgdGC0LjQvNC4IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEwOTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAi0L3QtdC+0YfQsNC60LLQsNC9INGA0LXQttC40Lwg4oCeJG1vZF9kc3TigJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTExOAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgINCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6IOKAniRkaXNwbGF5X25hbWXigJwg0L3QtSDRgdGK0LTRitGA0LbQsCDQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4kc2hhMV9zcmPigJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgINCf0KDQldCU0KPQn9Cg0JXQltCU0JXQndCY0JU6IOKAniRkaXNwbGF5X25hbWXigJwg0L3QtSDRgdGK0LTRitGA0LbQsCDQv9C+0LTQsNCy0LDQvdC10YLQviDigJ4kc2hhMV9kc3TigJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTEyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXRzICRzaGExX3NyYyBhbmQgJHNoYTFfZHN0IgorbXNnc3RyICIiCisiICDQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDigJ4kZGlzcGxheV9uYW1l4oCcINC90LUg0YHRitC00YrRgNC20LAg0L3QuNC60L7QtSDQvtGCINC/0L7QtNCw0LLQsNC90LjRj9GC0LAgIgorIuKAniRzaGExX3NyY+KAnCDQuCDigJ4kc2hhMV9kc3TigJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTE0OQorbXNnaWQgImJsb2IiCittc2dzdHIgItC+0LHQtdC60YIgQkxPQiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMjY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgItCd0LXRg9GB0L/QtdGI0L3QsCDQvtCx0YDQsNCx0L7RgtC60LAg0L3QsCDQv9C+0LTQtNC40YDQtdC60YLQvtGA0LjQuNGC0LUg0LIg0L/RitGC0Y8g0LrRitC8INC/0L7QtNC80L7QtNGD0Lsg4oCeJHNtX3BhdGjigJwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTMzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0KHQuNC90YXRgNC+0L3QuNC30LjRgNCw0L3QtSDQvdCwINCw0LTRgNC10YHQsCDQt9CwINC/0YrRgtGPINC60YrQvCDQv9C+0LTQvNC+0LTRg9C7IOKAniRkaXNwbGF5cGF0aOKAnCIKZGlmZiAtLWdpdCBhL3BvL2NhLnBvIGIvcG8vY2EucG8KaW5kZXggNWFkMDY2Zi4uYzkyYTE4YyAxMDA2NDQKLS0tIGEvcG8vY2EucG8KKysrIGIvcG8vY2EucG8KQEAgLTEsMTUgKzEsMTQgQEAKLSMgVHJhbnNsYXRpb24gb2YgZ2l0awotIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhcwotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgotIyBBbGV4IEhlbnJpZSA8YWxleGhlbnJpZTI0QGdtYWlsLmNvbT4sIDIwMTUuCi0jCisjIENhdGFsYW4gdHJhbnNsYXRpb25zIGZvciBHaXQuCisjIENvcHlyaWdodCAoQykgMjAxNCBBbGV4IEhlbnJpZSA8YWxleGhlbnJpZTI0QGdtYWlsLmNvbT4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdpdCBwYWNrYWdlLgorIyBBbGV4IEhlbnJpZSA8YWxleGhlbnJpZTI0QGdtYWlsLmNvbT4sIDIwMTQuCiAjCiBtc2dpZCAiIgogbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnaXRrXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTEwLTA1IDIyOjIzLTA2MDBcbiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdpdFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA5LTE1IDA2OjQ1KzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTA5LTE0IDIxOjA1LTA2MDBcbiIKICJMYXN0LVRyYW5zbGF0b3I6IEFsZXggSGVucmllIDxhbGV4aGVucmllMjRAZ21haWwuY29tPlxuIgogIkxhbmd1YWdlLVRlYW06IENhdGFsYW5cbiIKICJMYW5ndWFnZTogY2FcbiIKQEAgLTE3LDEzNTMgKzE2LDExOTAyIEBACiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgogIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgotIlgtR2VuZXJhdG9yOiBQb2VkaXQgMS44LjVcbiIKKyJYLUdlbmVyYXRvcjogUG9lZGl0IDEuOC40XG4iCiAKLSM6IGdpdGs6MTQwCi1tc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgotbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgbGEgbGxpc3RhIGRlIGZpdHhlcnMgbm8gZnVzaW9uYXRzOiIKKyM6IGFkdmljZS5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6ICUuKnNcbiIKK21zZ3N0ciAicGlzdGE6ICUuKnNcbiIKIAotIzogZ2l0azoyMTIgZ2l0azoyMzgxCi1tc2dpZCAiQ29sb3Igd29yZHMiCi1tc2dzdHIgIkNvbG9yYSBsZXMgcGFyYXVsZXMiCi0KLSM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjAgZ2l0azo4MjUzCi1tc2dpZCAiTWFya3VwIHdvcmRzIgotbXNnc3RyICJNYXJjYSBsZXMgcGFyYXVsZXMiCi0KLSM6IGdpdGs6MzI0Ci1tc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgotbXNnc3RyICJFcnJvciBlbiBhbmFsaXR6YXIgbGVzIHJldmlzaW9uczoiCi0KLSM6IGdpdGs6MzgwCi1tc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKLW1zZ3N0ciAiRXJyb3IgZW4gZXhlY3V0YXIgbCdvcmRyZSAtLWFyZ3NjbWQ6IgotCi0jOiBnaXRrOjM5MwotbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKLW1zZ3N0ciAiIgotIk5vIGhpIGhhIGZpdHhlcnMgc2VsZWNjaW9uYXRzOiBzJ2hhIGVzcGVjaWZpY2F0IC0tbWVyZ2UgcGVyw7IgY2FwIGZpdHhlciBlc3TDoCAiCi0ic2Vuc2UgZnVzaW9uYXIuIgotCi0jOiBnaXRrOjM5NgorIzogYWR2aWNlLmM6ODgKIG1zZ2lkICIiCi0iTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgotImxpbWl0LiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCiBtc2dzdHIgIiIKLSJObyBoaSBoYSBmaXR4ZXJzIHNlbGVjY2lvbmF0czogcydoYSBlc3BlY2lmaWNhdCAtLW1lcmdlIHBlcsOyIGNhcCBmaXR4ZXIgIgotInNlbnNlIGZ1c2lvbmFyIGVzdMOgIGRpbnMgZGVsIGzDrW1pdCBkZSBmaXR4ZXJzLiIKKyJBcnJlZ2xldS1sb3MgZW4gbCdhcmJyZSBkZSB0cmViYWxsLCBpIGRlc3Byw6lzIHVzZXVcbiIKKyInZ2l0IGFkZC9ybSA8Zml0eGVyPicgc2Vnb25zIHNpZ3VpIGFwcm9waWF0IHBlciBhIG1hcmNhciBsYVxuIgorInJlc29sdWNpw7MgaSBmZXUgdW5hIGNvbWlzc2nDsy4iCiAKLSM6IGdpdGs6NDE4IGdpdGs6NTY2Ci1tc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgotbXNnc3RyICJFcnJvciBlbiBleGVjdXRhciBnaXQgbG9nOiIKKyM6IGFkdmljZS5jOjEwMSBidWlsdGluL21lcmdlLmM6MTIyNworbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiTm8gaGV1IGNvbmNsw7JzIGxhIHZvc3RyYSBmdXNpw7MgKE1FUkdFX0hFQUQgZXhpc3RlaXgpLiIKIAotIzogZ2l0azo0MzYgZ2l0azo1ODIKLW1zZ2lkICJSZWFkaW5nIgotbXNnc3RyICJMbGVnaW50IgorIzogYWR2aWNlLmM6MTAzCittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiU2kgdXMgcGxhdSwgY29tZXRldSBlbHMgdm9zdHJlcyBjYW52aXMgYWJhbnMgZGUgZnVzaW9uYXIuIgogCi0jOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKLW1zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCi1tc2dzdHIgIkxsZWdpbnQgbGVzIHJldmlzaW9ucy4uLiIKKyM6IGFkdmljZS5jOjEwNAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIKK21zZ3N0ciAiU29ydGludCBhIGNhdXNhIGQndW5hIGZ1c2nDsyBubyB0ZXJtaW5hZGEuIgogCi0jOiBnaXRrOjQ5OSBnaXRrOjE2MzcgZ2l0azo0NTI4Ci1tc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKLW1zZ3N0ciAiQ2FwIGNvbWlzc2nDsyBzZWxlY2Npb25hZGEiCisjOiBhcmNoaXZlLmM6MTIKK21zZ2lkICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBbPG9wY2lvbnM+XSA8YXJicmU+IFs8Y2Ftw60+Li4uXSIKIAotIzogZ2l0azoxNDQ1IGdpdGs6NDA0NSBnaXRrOjEyNDMyCi1tc2dpZCAiQ29tbWFuZCBsaW5lIgotbXNnc3RyICJMw61uaWEgZCdvcmRyZXMiCisjOiBhcmNoaXZlLmM6MTMKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKIAotIzogZ2l0azoxNTExCi1tc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgotbXNnc3RyICJObyBlcyBwb3QgYW5hbGl0emFyIGxhIHNvcnRpZGEgZGVsIGdpdCBsb2c6IgorIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPGRpcMOyc2l0PiBbLS1leGVjIDxvcmRyZT5dIFs8b3BjaW9ucz5dIDxhcmJyZT4gIgorIls8Y2Ftw60+Li4uXSIKIAotIzogZ2l0azoxNzQwCi1tc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKLW1zZ3N0ciAiQ2FwIGluZm9ybWFjacOzIGRlIGNvbWlzc2nDsyBkaXNwb25pYmxlIgorIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPGRpcMOyc2l0PiBbLS1leGVjIDxvcmRyZT5dIC0tbGlzdCIKIAotIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQotbXNnaWQgIk9LIgotbXNnc3RyICJEJ2Fjb3JkIgorIzogYXJjaGl2ZS5jOjM0MyBidWlsdGluL2FkZC5jOjEzNyBidWlsdGluL2FkZC5jOjQyNiBidWlsdGluL3JtLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgIkwnZXNwZWNpZmljYWNpw7MgZGUgY2Ftw60gJyVzJyBubyBoYSBjb2luY2lkaXQgYW1iIGNhcCBmaXR4ZXIiCiAKLSM6IGdpdGs6MTkzNCBnaXRrOjQzMTcgZ2l0azo5MTk2IGdpdGs6OTI3NSBnaXRrOjkzOTEgZ2l0azo5NDQwIGdpdGs6OTY3MQotIzogZ2l0azoxMTI0MiBnaXRrOjExNTIyCi1tc2dpZCAiQ2FuY2VsIgotbXNnc3RyICJDYW5jZWzCt2xhIgorIzogYXJjaGl2ZS5jOjQyOAorbXNnaWQgImZtdCIKK21zZ3N0ciAiZm9ybWF0IgogCi0jOiBnaXRrOjIwNjkKLW1zZ2lkICImVXBkYXRlIgotbXNnc3RyICJBY3R1YWxpdHphIgorIzogYXJjaGl2ZS5jOjQyOAorbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICJmb3JtYXQgZCdhcnhpdSIKIAotIzogZ2l0azoyMDcwCi1tc2dpZCAiJlJlbG9hZCIKLW1zZ3N0ciAiUmVjYXJyZWdhIgorIzogYXJjaGl2ZS5jOjQyOSBidWlsdGluL2xvZy5jOjEyMjkKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgInByZWZpeCIKIAotIzogZ2l0azoyMDcxCi1tc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgotbXNnc3RyICJSZWxsZWdlaXggbGVzIHJlZmVyw6huY2llcyIKKyM6IGFyY2hpdmUuYzo0MzAKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICJhbnRlcG9zYSBlbCBwcmVmaXggYSBjYWRhIG5vbSBkZSBjYW3DrSBlbiBsJ2FyeGl1IgogCi0jOiBnaXRrOjIwNzIKLW1zZ2lkICImTGlzdCByZWZlcmVuY2VzIgotbXNnc3RyICJMbGlzdGEgbGVzIHJlZmVyw6huY2llcyIKKyM6IGFyY2hpdmUuYzo0MzEgYnVpbHRpbi9hcmNoaXZlLmM6ODggYnVpbHRpbi9ibGFtZS5jOjI1MTYgYnVpbHRpbi9ibGFtZS5jOjI1MTcKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTggYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4NyBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg5CisjOiBidWlsdGluL2dyZXAuYzo3MTIgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDYKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDkgYnVpbHRpbi9ub3Rlcy5jOjM5NSBidWlsdGluL25vdGVzLmM6NTU4CisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEwOSBwYXJzZS1vcHRpb25zLmg6MTUzCittc2dpZCAiZmlsZSIKK21zZ3N0ciAiZml0eGVyIgogCi0jOiBnaXRrOjIwNzQKLW1zZ2lkICJTdGFydCBnaXQgJmd1aSIKLW1zZ3N0ciAiSW5pY2lhIGVsIGdpdCBndWkiCisjOiBhcmNoaXZlLmM6NDMyIGJ1aWx0aW4vYXJjaGl2ZS5jOjg5Cittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJlc2NyaXUgbCdhcnhpdSBhIGFxdWVzdCBmaXR4ZXIiCiAKLSM6IGdpdGs6MjA3NgotbXNnaWQgIiZRdWl0IgotbXNnc3RyICJTdXJ0IgorIzogYXJjaGl2ZS5jOjQzNAorbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgImxsZWdlaXggLmdpdGF0dHJpYnV0ZXMgZW4gZWwgZGlyZWN0b3JpIGRlIHRyZWJhbGwiCiAKLSM6IGdpdGs6MjA2OAotbXNnaWQgIiZGaWxlIgotbXNnc3RyICJGaXR4ZXIiCisjOiBhcmNoaXZlLmM6NDM1Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAiaW5mb3JtYSBkZSBmaXR4ZXJzIGFyeGl2YXRzIGVuIHN0ZGVyciIKIAotIzogZ2l0azoyMDgwCi1tc2dpZCAiJlByZWZlcmVuY2VzIgotbXNnc3RyICJQcmVmZXLDqG5jaWVzIgorIzogYXJjaGl2ZS5jOjQzNgorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgIm5vbcOpcyBlbW1hZ2F0emVtYSIKIAotIzogZ2l0azoyMDc5Ci1tc2dpZCAiJkVkaXQiCi1tc2dzdHIgIkVkaXRhIgorIzogYXJjaGl2ZS5jOjQzNworbXNnaWQgImNvbXByZXNzIGZhc3RlciIKK21zZ3N0ciAiY29tcHJpbWVpeCBtw6lzIHLDoHBpZCIKIAotIzogZ2l0azoyMDg0Ci1tc2dpZCAiJk5ldyB2aWV3Li4uIgotbXNnc3RyICJWaXN0YSBub3ZhLi4uIgorIzogYXJjaGl2ZS5jOjQ0NQorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAiY29tcHJpbWVpeCBtaWxsb3IiCiAKLSM6IGdpdGs6MjA4NQotbXNnaWQgIiZFZGl0IHZpZXcuLi4iCi1tc2dzdHIgIkVkaXRhIGxhIHZpc3RhLi4uIgorIzogYXJjaGl2ZS5jOjQ0OAorbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAiYWxsaXN0YSBlbHMgZm9ybWF0cyBkJ2FyeGl1IGFkbWVzb3MiCiAKLSM6IGdpdGs6MjA4NgotbXNnaWQgIiZEZWxldGUgdmlldyIKLW1zZ3N0ciAiU3VwcmltZWl4IGxhIHZpc3RhIgorIzogYXJjaGl2ZS5jOjQ1MCBidWlsdGluL2FyY2hpdmUuYzo5MCBidWlsdGluL2Nsb25lLmM6NzcKK21zZ2lkICJyZXBvIgorbXNnc3RyICJkaXDDsnNpdCIKIAotIzogZ2l0azoyMDg4IGdpdGs6NDA0MwotbXNnaWQgIiZBbGwgZmlsZXMiCi1tc2dzdHIgIlRvdHMgZWxzIGZpdHhlcnMiCisjOiBhcmNoaXZlLmM6NDUxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkxCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgInJlY3VwZXJhIGwnYXJ4aXUgZGVsIGRpcMOyc2l0IHJlbW90IDxkaXDDsnNpdD4iCiAKLSM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKLW1zZ2lkICImVmlldyIKLW1zZ3N0ciAiVmlzdGEiCisjOiBhcmNoaXZlLmM6NDUyIGJ1aWx0aW4vYXJjaGl2ZS5jOjkyIGJ1aWx0aW4vbm90ZXMuYzo0NzkKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICJvcmRyZSIKIAotIzogZ2l0azoyMDkzIGdpdGs6MjEwMyBnaXRrOjMwMTIKLW1zZ2lkICImQWJvdXQgZ2l0ayIKLW1zZ3N0ciAiUXVhbnQgYWwgZ2l0ayIKKyM6IGFyY2hpdmUuYzo0NTMgYnVpbHRpbi9hcmNoaXZlLmM6OTMKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgImNhbcOtIGEgbCdvcmRyZSBnaXQtdXBsb2FkLWFyY2hpdmUgcmVtb3QiCiAKLSM6IGdpdGs6MjA5NCBnaXRrOjIxMDgKLW1zZ2lkICImS2V5IGJpbmRpbmdzIgotbXNnc3RyICJBc3NvY2lhY2lvbnMgZGUgdGVjbGVzIgorIzogYXR0ci5jOjI2NQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorIkVscyBwYXRyb25zIG5lZ2F0aXVzIHMnaWdub3JlbiBlbiBlbHMgYXRyaWJ1dHMgZGUgZ2l0XG4iCisiVXNldSAnXFwhJyBwZXIgZXhjbGFtYWNpw7MgY2FwZGF2YW50ZXJhIGxpdGVyYWwuIgogCi0jOiBnaXRrOjIwOTIgZ2l0azoyMTA3Ci1tc2dpZCAiJkhlbHAiCi1tc2dzdHIgIkFqdWRhIgorIzogYnJhbmNoLmM6NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICJObyBlc3RhYmxpbnQgbGEgYnJhbmNhICVzIGNvbSBhIGxhIHNldmEgcHLDsnBpYSBmb250LiIKIAotIzogZ2l0azoyMTg1IGdpdGs6ODY1MgotbXNnaWQgIlNIQTEgSUQ6IgotbXNnc3RyICJJRCBTSEExOiIKKyM6IGJyYW5jaC5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAlcyBmcm9tICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSAlcyBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBzZWd1aXIgbGEgYnJhbmNhIHJlbW90YSAlcyBkZSAlcyBwZXIgIgorInJlYmFzYXIuIgogCi0jOiBnaXRrOjIyMjkKLW1zZ2lkICJSb3ciCi1tc2dzdHIgIkZpbGEiCisjOiBicmFuY2guYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJXMgZnJvbSAlcy4iCittc2dzdHIgIkxhIGJyYW5jYSAlcyBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBzZWd1aXIgbGEgYnJhbmNhIHJlbW90YSAlcyBkZSAlcy4iCiAKLSM6IGdpdGs6MjI2NwotbXNnaWQgIkZpbmQiCi1tc2dzdHIgIkNlcmNhIgorIzogYnJhbmNoLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTGEgYnJhbmNhICVzIGVzdMOgIGNvbmZpZ3VyYWRhIHBlciBhIHNlZ3VpciBsYSBicmFuY2EgbG9jYWwgJXMgcGVyIHJlYmFzYXIuIgogCi0jOiBnaXRrOjIyOTUKKyM6IGJyYW5jaC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICVzLiIKK21zZ3N0ciAiTGEgYnJhbmNhICVzIGVzdMOgIGNvbmZpZ3VyYWRhIHBlciBhIHNlZ3VpciBsYSBicmFuY2EgbG9jYWwgJXMuIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTGEgYnJhbmNhICVzIGVzdMOgIGNvbmZpZ3VyYWRhIHBlciBhIHNlZ3VpciBsYSByZWZlcsOobmNpYSByZW1vdGEgJXMgcGVyICIKKyJyZWJhc2FyLiIKKworIzogYnJhbmNoLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICVzLiIKK21zZ3N0ciAiTGEgYnJhbmNhICVzIGVzdMOgIGNvbmZpZ3VyYWRhIHBlciBhIHNlZ3VpciBsYSByZWZlcsOobmNpYSByZW1vdGEgJXMuIgorCisjOiBicmFuY2guYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJMYSBicmFuY2EgJXMgZXN0w6AgY29uZmlndXJhZGEgcGVyIGEgc2VndWlyIGxhIHJlZmVyw6huY2lhIGxvY2FsICVzIHBlciAiCisicmViYXNhci4iCisKKyM6IGJyYW5jaC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcy4iCittc2dzdHIgIkxhIGJyYW5jYSAlcyBlc3TDoCBjb25maWd1cmFkYSBwZXIgYSBzZWd1aXIgbGEgcmVmZXLDqG5jaWEgbG9jYWwgJXMuIgorCisjOiBicmFuY2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiTm8gc2VndWludDogaW5mb3JtYWNpw7MgYW1iaWd1YSBwZXIgYSBsYSByZWZlcsOobmNpYSAlcyIKKworIzogYnJhbmNoLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIgorbXNnc3RyICInJXMnIG5vIMOpcyB1biBub20gZGUgYnJhbmNhIHbDoGxpZC4iCisKKyM6IGJyYW5jaC5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiVW5hIGJyYW5jYSBhbWIgbm9tICclcycgamEgZXhpc3RlaXguIgorCisjOiBicmFuY2guYzoxNzUKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5vIGVzIHBvdCBhY3R1YWxpdHphciBsYSBicmFuY2EgYWN0dWFsIGEgbGEgZm9yw6dhLiIKKworIzogYnJhbmNoLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICIiCisiTm8gZXMgcG90IGNvbmZpZ3VyYXIgbGEgaW5mb3JtYWNpw7MgZGUgc2VndWltZW50OyBlbCBwdW50IGluaWNpYWwgJyVzJyBubyDDqXMgIgorInVuYSBicmFuY2EuIgorCisjOiBicmFuY2guYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAibGEgYnJhbmNhIGZvbnQgZGVtYW5hZGEgJyVzJyBubyBleGlzdGVpeCIKKworIzogYnJhbmNoLmM6MTk5Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgorbXNnc3RyICIiCisiXG4iCisiU2kgdGVuaXUgcGVuc2F0IGJhc2FyIGVsIHZvc3RyZSB0cmViYWxsIGVuIHVuYSBicmFuY2FcbiIKKyJmb250IHF1ZSBqYSBleGlzdGVpeCBhbCByZW1vdCwgcG90IHNlciBxdWUgbmVjZXNzaXRldVxuIgorImV4ZWN1dGFyIFwiZ2l0IGZldGNoXCIgcGVyIGEgb2J0ZW5pci1sYS5cbiIKKyJcbiIKKyJTaSB0ZW5pdSBwZW5zYXQgcHVqYXIgdW5hIGJyYW5jYSBsb2NhbCBub3ZhIHF1ZSBzZWd1aXLDoFxuIgorImxhIHNldmEgY29udHJhcGFydCByZW1vdGEsIHBvdCBzZXIgcXVlIHZ1bGd1ZXUgdXNhclxuIgorIlwiZ2l0IHB1c2ggLXVcIiBwZXIgYSBlc3RhYmxpciBsYSBjb25maWd1cmFjacOzIGZvbnRcbiIKKyJtZW50cmUgcHVnZXUuIgorCisjOiBicmFuY2guYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJObyDDqXMgdW4gbm9tIGQnb2JqZWN0ZSB2w6BsaWQ6ICclcycuIgorCisjOiBicmFuY2guYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiTm9tIGQnb2JqZWN0ZSBhbWJpZ3U6ICclcycuIgorCisjOiBicmFuY2guYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIKK21zZ3N0ciAiTm8gw6lzIHVuIHB1bnQgZGUgcmFtaWZpY2FjacOzIHbDoGxpZDogJyVzJy4iCisKKyM6IGJyYW5jaC5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJyBqYSBzJ2hhIGFnYWZhdCBhICclcyciCisKKyM6IGJ1bmRsZS5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIiclcycgbm8gc2VtYmxhIHVuIGZpdHhlciBkZSBmYXJjZWxsIHYyIgorCisjOiBidW5kbGUuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgImNhcMOnYWxlcmEgbm8gcmVjb25lZ3VkYTogJXMlcyAoJWQpIgorCisjOiBidW5kbGUuYzo4NyBidWlsdGluL2NvbW1pdC5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyICclcyciCisKKyM6IGJ1bmRsZS5jOjEzOQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICJBbCBkaXDDsnNpdCBsaSBtYW5xdWVuIGFxdWVzdGVzIGNvbWlzc2lvbnMgcHJlcmVxdWlzaXRzOiIKKworIzogYnVuZGxlLmM6MTYzIHNlcXVlbmNlci5jOjYzNiBzZXF1ZW5jZXIuYzoxMDgzIGJ1aWx0aW4vYmxhbWUuYzoyNzA4CisjOiBidWlsdGluL2JyYW5jaC5jOjY1MiBidWlsdGluL2NvbW1pdC5jOjEwNDQgYnVpbHRpbi9sb2cuYzozMzQKKyM6IGJ1aWx0aW4vbG9nLmM6ODUwIGJ1aWx0aW4vbG9nLmM6MTQ1NyBidWlsdGluL2xvZy5jOjE2OTAgYnVpbHRpbi9tZXJnZS5jOjM1OAorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1OAorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICJsYSBjb25maWd1cmFjacOzIGRlbCBwYXNzZWlnIHBlciByZXZpc2lvbnMgaGEgZmFsbGF0IgorCisjOiBidW5kbGUuYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkVsIGZhcmNlbGwgY29udMOpIGFxdWVzdGEgcmVmZXLDqG5jaWE6IgorbXNnc3RyWzFdICJFbCBmYXJjZWxsIGNvbnTDqSBhcXVlc3RlcyAlZCByZWZlcsOobmNpZXM6IgorCisjOiBidW5kbGUuYzoxOTIKK21zZ2lkICJUaGUgYnVuZGxlIHJlY29yZHMgYSBjb21wbGV0ZSBoaXN0b3J5LiIKK21zZ3N0ciAiRWwgZmFyY2VsbCByZWdpc3RyYSB1bmEgaGlzdMOycmlhIGNvbXBsZXRhLiIKKworIzogYnVuZGxlLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJFbCBmYXJjZWxsIHJlcXVlcmVpeCBhcXVlc3RhIHJlZmVyw6huY2lhOiIKK21zZ3N0clsxXSAiRWwgZmFyY2VsbCByZXF1ZXJlaXggYXF1ZXN0ZXMgJWQgcmVmZXLDqG5jaWVzOiIKKworIzogYnVuZGxlLmM6MjUzCittc2dpZCAiQ291bGQgbm90IHNwYXduIHBhY2stb2JqZWN0cyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBleGVjdXRhciBlbCBwYWNrLW9iamVjdHMiCisKKyM6IGJ1bmRsZS5jOjI2NAorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICJFbCBwYWNrLW9iamVjdHMgcydoYSBtb3J0IgorCisjOiBidW5kbGUuYzozMDQKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICJFbCByZXYtbGlzdCBzJ2hhIG1vcnQiCisKKyM6IGJ1bmRsZS5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAibGVzIG9wY2lvbnMgZGUgbGEgbGxpc3RhIGRlIHJldmlzaW9ucyBleGNsb3VlbiBsYSByZWZlcsOobmNpYSAnJXMnIgorCisjOiBidW5kbGUuYzo0NDMgYnVpbHRpbi9sb2cuYzoxNTcgYnVpbHRpbi9sb2cuYzoxMzY3IGJ1aWx0aW4vc2hvcnRsb2cuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSBubyByZWNvbmVndXQ6ICVzIgorCisjOiBidW5kbGUuYzo0NDkKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAiUmVmdXNhbnQgY3JlYXIgdW4gZmFyY2VsbCBidWl0LiIKKworIzogYnVuZGxlLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGNyZWFyICclcyciCisKKyM6IGJ1bmRsZS5jOjQ4MAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiTCdpbmRleC1wYWNrIHMnaGEgbW9ydCIKKworIzogY29sb3IuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciB2YWx1ZTogJS4qcyIKK21zZ3N0ciAidmFsb3IgZGUgY29sb3Igbm8gdsOgbGlkOiAlLipzIgorCisjOiBjb21taXQuYzo0MCBidWlsdGluL2FtLmM6NDUxIGJ1aWx0aW4vYW0uYzo0ODcgYnVpbHRpbi9hbS5jOjE1MTYKKyM6IGJ1aWx0aW4vYW0uYzoyMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgJXMiCisKKyM6IGNvbW1pdC5jOjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIG5vIMOpcyB1bmEgY29taXNzacOzISIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtZW3DsnJpYSBlc2dvdGFkYSIKKworIzogY29uZmlnLmM6NDc0IGNvbmZpZy5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGZpbGUgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAibMOtbmlhIGRlIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGRvbGVudGEgJWQgZW4gJXMiCisKKyM6IGNvbmZpZy5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgInZhbG9yIGRlIGNvbmZpZ3VyYWNpw7MgbnVtw6hyaWNhIGRvbGVudCAnJXMnIHBlciAnJXMnIGVuICVzOiAlcyIKKworIzogY29uZmlnLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAidmFsb3IgZGUgY29uZmlndXJhY2nDsyBudW3DqHJpY2EgZG9sZW50ICclcycgcGVyICclcyc6ICVzIgorCisjOiBjb25maWcuYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAicydoYSBmYWxsYXQgZW4gZXhwYW5kaXIgZWwgZGlyZWN0b3JpIGQndXN1YXJpIGVuICclcyciCisKKyM6IGNvbmZpZy5jOjc1NyBjb25maWcuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIm5pdmVsbCBkZSBjb21wcmVzc2nDsyBkZSB6bGliIGRvbGVudCAlZCIKKworIzogY29uZmlnLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAibW9kZSBkZSBjcmVhY2nDsyBkJ29iamVjdGUgbm8gdsOgbGlkOiAlcyIKKworIzogY29uZmlnLmM6MTIxNgorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb25maWd1cmFjacOzIGRlIGxhIGzDrW5pYSBkJ29yZHJlcyIKKworIzogY29uZmlnLmM6MTI3NworbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIgorbXNnc3RyICJoYSBvY29ycmVndXQgdW4gZXJyb3IgZGVzY29uZWd1dCBlbiBsbGVnaXIgZWxzIGZpdHhlcnMgZGUgY29uZmlndXJhY2nDsyIKKworIzogY29uZmlnLmM6MTYwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyICclcycgZGUgbGEgY29uZmlndXJhY2nDsyBkZSBsYSBsw61uaWEgZCdvcmRyZXMiCisKKyM6IGNvbmZpZy5jOjE2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICJ2YXJpYWJsZSBkZSBjb25maWd1cmFjacOzIGRvbGVudGEgJyVzJyBlbiBlbCBmaXR4ZXIgJyVzJyBhIGxhIGzDrW5pYSAlZCIKKworIzogY29uZmlnLmM6MTY2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgbXVsdGlwbGUgdmFsdWVzIgorbXNnc3RyICIlcyB0w6kgbcO6bHRpcGxlcyB2YWxvcnMiCisKKyM6IGNvbm5lY3RlZC5jOjY5Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBleGVjdXRhciAnZ2l0IHJldi1saXN0JyIKKworIzogY29ubmVjdGVkLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0OiAlcyIKK21zZ3N0ciAiZXNjcmlwdHVyYSBmYWxsYWRhIGFsIHJldi1saXN0OiAlcyIKKworIzogY29ubmVjdGVkLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW46ICVzIgorbXNnc3RyICJzJ2hhIGZhbGxhdCBlbiB0YW5jYXIgbCdzdGRpbiBkZWwgcmV2LWxpc3Q6ICVzIgorCisjOiBkYXRlLmM6OTUKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJlbiBlbCBmdXR1ciIKKworIzogZGF0ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICJmYSAlbHUgc2Vnb24iCittc2dzdHJbMV0gImZhICVsdSBzZWdvbnMiCisKKyM6IGRhdGUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiZmEgJWx1IG1pbnV0IgorbXNnc3RyWzFdICJmYSAlbHUgbWludXRzIgorCisjOiBkYXRlLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGhvdXJzIGFnbyIKK21zZ3N0clswXSAiZmEgJWx1IGhvcmEiCittc2dzdHJbMV0gImZhICVsdSBob3JlcyIKKworIzogZGF0ZS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGRheXMgYWdvIgorbXNnc3RyWzBdICJmYSAlbHUgZGlhIgorbXNnc3RyWzFdICJmYSAlbHUgZGllcyIKKworIzogZGF0ZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSB3ZWVrcyBhZ28iCittc2dzdHJbMF0gImZhICVsdSBzZXRtYW5hIgorbXNnc3RyWzFdICJmYSAlbHUgc2V0bWFuZXMiCisKKyM6IGRhdGUuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gImZhICVsdSBtZXMiCittc2dzdHJbMV0gImZhICVsdSBtZXNvcyIKKworIzogZGF0ZS5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgeWVhciIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIgorbXNnc3RyWzBdICIlbHUgYW55IgorbXNnc3RyWzFdICIlbHUgYW55cyIKKworIy4gVFJBTlNMQVRPUlM6ICIlcyIgaXMgIjxuPiB5ZWFycyIKKyM6IGRhdGUuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsICVsdSBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlbHUgbW9udGhzIGFnbyIKK21zZ3N0clswXSAiZmEgJXMgaSAlbHUgbWVzIgorbXNnc3RyWzFdICJmYSAlcyBpICVsdSBtZXNvcyIKKworIzogZGF0ZS5jOjE1NCBkYXRlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIGFnbyIKK21zZ3N0clswXSAiZmEgJWx1IGFueSIKK21zZ3N0clsxXSAiZmEgJWx1IGFueXMiCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIGxsZWdpciBlbCBmaXR4ZXIgZCdvcmRyZXMgJyVzJyIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTM2Cittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIlJlYWxpdHphbnQgZGV0ZWNjacOzIGluZXhhY3RhIGRlIGNhbnZpcyBkZSBub20iCisKKyM6IGRpZmYuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIgIFMnaGEgZmFsbGF0IGVuIGFuYWxpdHphciBlbCBwZXJjZW50YXRnZSBsaW1pdGFudCBkZSBkaXJzdGF0ICclcydcbiIKKworIzogZGlmZi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIFBhcsOgbWV0cmUgZGUgZGlyc3RhdCBkZXNjb25lZ3V0ICclcydcbiIKKworIzogZGlmZi5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHZhbHVlIGZvciAnZGlmZi5zdWJtb2R1bGUnIGNvbmZpZyB2YXJpYWJsZTogJyVzJyIKK21zZ3N0ciAiIgorIlZhbG9yIGRlc2NvbmVndXQgZGUgbGEgdmFyaWFibGUgZGUgY29uZmlndXJhY2nDsyBkZSAnZGlmZi5zdWJtb2R1bGUnOiAnJXMnIgorCisjOiBkaWZmLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgorIiVzIgorbXNnc3RyICIiCisiRXJyb3JzIHRyb2JhdHMgZW4gbGEgdmFyaWFibGUgZGUgY29uZmlndXJhY2nDsyAnZGlmZi5kaXJzdGF0JzpcbiIKKyIlcyIKKworIzogZGlmZi5jOjI5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAiRWwgZGlmZiBleHRlcm5hbCBzJ2hhIG1vcnQsIGF0dXJhbnQgYSAlcyIKKworIzogZGlmZi5jOjMzOTQKK21zZ2lkICItLWZvbGxvdyByZXF1aXJlcyBleGFjdGx5IG9uZSBwYXRoc3BlYyIKK21zZ3N0ciAiLS1mb2xsb3cgcmVxdWVyZWl4IGV4YWN0YW1lbnQgdW5hIGVzcGVjaWZpY2FjacOzIGRlIGNhbcOtIgorCisjOiBkaWZmLmM6MzU1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisiUydoYSBmYWxsYXQgZW4gYW5hbGl0emFyIGVsIHBhcsOgbWV0cmUgZCdvcGNpw7MgZGUgLS1kaXJzdGF0Ly1YOlxuIgorIiVzIgorCisjOiBkaWZmLmM6MzU3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAiUydoYSBmYWxsYXQgZW4gYW5hbGl0emFyIGVsIHBhcsOgbWV0cmUgZCdvcGNpw7MgZGUgLS1zdWJtb2R1bGU6ICVzIgorCisjOiBkaXIuYzoxODUzCittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIG9idGVuaXIgZWwgbm9tYnJlIGkgbGEgaW5mb3JtYWNpw7MgZGVsIG51Y2xpIgorCisjOiBkaXIuYzoxOTM2Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGlzIGRpc2FibGVkIG9uIHRoaXMgc3lzdGVtLiIKK21zZ3N0ciAiTGEgbWVtw7JyaWEgY2F1IG5vIHNlZ3VpZGEgZXN0w6AgZGVzaGFiaWxpdGFkYSBlbiBhcXVlc3Qgc2lzdGVtYS4iCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoxNjYgZ3BnLWludGVyZmFjZS5jOjIzNworbXNnaWQgImNvdWxkIG5vdCBydW4gZ3BnLiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBleGVjdXRhciBlbCBncGcuIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTc4Cittc2dpZCAiZ3BnIGRpZCBub3QgYWNjZXB0IHRoZSBkYXRhIgorbXNnc3RyICJFbCBncGcgbm8gaGEgYWNjZXB0YXQgbGVzIGRhZGVzIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTg5Cittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcgaGEgZmFsbGF0IGVuIGZpcm1hciBsZXMgZGFkZXMiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBlbCBmaXR4ZXIgdGVtcG9yYWwgJyVzJzogJXMiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyc6ICVzIgorbXNnc3RyICJzJ2hhIGZhbGxhdCBlbiBlc2NyaXVyZSBsYSBmaXJtYSBzZXBhcmFkYSBhICclcyc6ICVzIgorCisjOiBncmVwLmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJzogbm8gcydoYSBwb2d1dCBsbGVnaXIgJXMiCisKKyM6IGdyZXAuYzoxNzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6ICVzIgorbXNnc3RyICInJXMnOiAlcyIKKworIzogZ3JlcC5jOjE3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCAlcyIKK21zZ3N0ciAiJyVzJzogbGVjdHVyYSBjdXJ0YSAlcyIKKworIzogaGVscC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgIm9yZHJlcyBkZSBnaXQgZGlzcG9uaWJsZXMgZW4gJyVzJyIKKworIzogaGVscC5jOjIxNAorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAib3JkcmVzIGRlIGdpdCBkaXNwb25pYmxlcyBkJ2FsdHJlcyBsbG9jcyBlbiBlbCB2b3N0cmUgJFBBVEgiCisKKyM6IGhlbHAuYzoyNDYKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIkFxdWVzdHMgc8OzbiBvcmRyZXMgZGVsIEdpdCBjb211bmFtZW50IHVzYXRzIGVuIGRpdmVyc2VzIHNpdHVhY2lvbnM6IgorCisjOiBoZWxwLmM6MzExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiIgorIiclcycgc2VtYmxhIHVuYSBvcmRyZSBnaXQsIHBlcsOyIG5vIGhlbSBwb2d1dFxuIgorImV4ZWN1dGFyLWxhLiBQb3Qgc2VyIHF1ZSBnaXQtJXMgZXN0aWd1aSBlc3Ryb3BlamF0PyIKKworIzogaGVscC5jOjM2OAorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICJBaS4gRWwgdm9zdHJlIHNpc3RlbWEgbm8gaW5mb3JtYSBkZSBjYXAgb3JkcmUgZGUgR2l0LiIKKworIzogaGVscC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LlxuIgorIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJyIKK21zZ3N0ciAiIgorIkFWw41TOiBIZXUgaW52b2NhdCB1bmEgb3JkcmUgZGUgR2l0IGFtYiBub20gJyVzJywgbGEgcXVhbCBubyBleGlzdGVpeC5cbiIKKyJDb250aW51YW50IHNvdGEgbCdhc3N1bXBjacOzIHF1ZSB2b2zDrWV1IGRpciAnJXMnIgorCisjOiBoZWxwLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluICUwLjFmIHNlY29uZHMgYXV0b21hdGljYWxseS4uLiIKK21zZ3N0ciAiZW4gJTAuMWYgc2Vnb25zIGF1dG9tw6B0aWNhbWVudC4uLiIKKworIzogaGVscC5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6ICclcycgbm8gw6lzIHVuYSBvcmRyZSBkZSBnaXQuIFZlZ2V1ICdnaXQgLS1oZWxwJy4iCisKKyM6IGhlbHAuYzo0MDYgaGVscC5jOjQ2NgorbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorIlZvbMOtZXUgZGlyIGFpeMOyPyIKK21zZ3N0clsxXSAiIgorIlxuIgorIlZvbMOtZXUgZGlyIHVuIGQnYXF1ZXN0cz8iCisKKyM6IGhlbHAuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIC0gJXMiCittc2dzdHIgIiVzOiAlcyAtICVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICJzJ2hhIGZhbGxhdCBlbiBsbGVnaXIgbGEgbWVtw7JyaWEgY2F1IgorCisjOiBtZXJnZS5jOjk0IGJ1aWx0aW4vYW0uYzoyMDAxIGJ1aWx0aW4vYW0uYzoyMDM2IGJ1aWx0aW4vY2hlY2tvdXQuYzozNzUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1ODYgYnVpbHRpbi9jbG9uZS5jOjcxNQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSB1biBmaXR4ZXIgZCfDrW5kZXggbm91IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIihjb21pc3Npw7MgZG9sZW50YSlcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZm9fY2FjaGUgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgImFkZGluZm9fY2FjaGUgaGEgZmFsbGF0IHBlciBhbCBjYW3DrSAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNzAKK21zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiZXJyb3IgZW4gY29uc3RydWlyIGFyYnJlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIGNyZWFyIGVsIGNhbcOtICclcycgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICJFbGltaW5hbnQgJXMgcGVyIGEgZmVyIGVzcGFpIHBlciBhbCBzdWJkaXJlY3RvcmlcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzEyIG1lcmdlLXJlY3Vyc2l2ZS5jOjczMworbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjogcG90c2VyIHVuIGNvbmZsaWN0ZSBEL0Y/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICJyZWZ1c2FudCBwZXJkcmUgZWwgZml0eGVyIG5vIHNlZ3VpdCBhICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc2MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciBsJ29iamVjdGUgJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgImJsb2IgZXNwZXJhdCBwZXIgYSAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3ODggYnVpbHRpbi9jbG9uZS5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJzJ2hhIGZhbGxhdCBlbiBvYnJpciAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJyIKK21zZ3N0ciAicydoYSBmYWxsYXQgZW4gZmVyIGwnZW5sbGHDpyBzaW1iw7JsaWMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIm5vIHNlIHNhcCBxdcOoIGZlciBhbWIgJTA2byAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MzcKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiUydoYSBmYWxsYXQgZW4gZXhlY3V0YXIgbGEgZnVzacOzIGludGVybmEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFmZWdpciAlcyBhIGxhIGJhc2UgZGUgZGFkZXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk1NworbXNnaWQgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlIGluIHRoZSB0cmVlIgorbXNnc3RyICJ0aXB1cyBkJ29iamVjdGUgbm8gY29tcGF0aWJsZSBlbiBsJ2FyYnJlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDMyIG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorIkNPTkZMSUNURTogKCVzL3N1cHJlc3Npw7MpOiAlcyBzdXByaW1pdCBlbiAlcyBpICVzIGVuICVzLiBMYSB2ZXJzacOzICVzIGRlICVzICIKKyJzJ2hhIGRlaXhhdCBlbiBsJ2FyYnJlLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAzOCBtZXJnZS1yZWN1cnNpdmUuYzoxMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJDT05GTElDVEU6ICglcy9zdXByZXNzacOzKTogJXMgc3VwcmltaXQgZW4gJXMgaSAlcyBlbiAlcy4gTGEgdmVyc2nDsyAlcyBkZSAlcyAiCisicydoYSBkZWl4YXQgZW4gbCdhcmJyZSBhICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA5MgorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAiY2FudmlhIGRlIG5vbSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA5MgorbXNnaWQgInJlbmFtZWQiCittc2dzdHIgImNhbnZpYXQgZGUgbm9tIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIlcyDDqXMgdW4gZGlyZWN0b3JpIGVuICVzOyBhZmVnaW50IGNvbSBhICVzIGVuIGxsb2MiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorIkNPTkZMSUNURSAoY2FudmkgZGUgbm9tL2NhbnZpIGRlIG5vbSk6IENhbnZpIGRlIG5vbSBcIiVzXCItPlwiJXNcIiBlbiBsYSAiCisiYnJhbmNhIFwiJXNcIiBjYW52aSBkZSBub20gXCIlc1wiLT5cIiVzXCIgZW4gXCIlc1wiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNzUKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAoZGVpeGF0IHNlbnNlIHJlc29sdWNpw7MpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSUNURSAoY2FudmkgZGUgbm9tL2NhbnZpIGRlIG5vbSk6IENhbnZpIGRlIG5vbSAlcy0+JXMgZW4gJXMuIENhbnZpIGRlICIKKyJub20gJXMtPiVzIGVuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzIGFuZCAlcyB0byAlcyBpbnN0ZWFkIgorbXNnc3RyICJDYW52aWFudCBlbCBub20gZGUgJXMgYSAlcyBpICVzIGEgJXMgZW4gbGxvYyBkJ2FpeMOyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gJXMgYWRkZWQgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElDVEUgKGNhbnZpIGRlIG5vbS9hZmVnaW1lbnQpOiBDYW52aSBkZSBub20gJXMtPiVzIGVuICVzLiAlcyBhZmVnaXQgZW4gIgorIiVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBtZXJnZWQgJXMiCittc2dzdHIgIkFmZWdpbnQgJXMgZnVzaW9uYXQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NzMgbWVyZ2UtcmVjdXJzaXZlLmM6MTY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiQWZlZ2ludCBjb20gYSAlcyBlbiBsbG9jIGQnYWl4w7IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJubyBlcyBwb3QgbGxlZ2lyIGwnb2JqZWN0ZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAiTCdvYmplY3RlICVzIG5vIMOpcyB1biBibG9iIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTc1Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICJtb2RpZmljYSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NQorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICJtb2RpZmljYXQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODUKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICJjb250aW5ndXQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1OTIKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICJhZmVnaW1lbnQvYWZlZ2ltZW50IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIKK21zZ3N0ciAiJXMgc2FsdGF0IChlbCBmdXNpb25hdCDDqXMgaWd1YWwgYSBsJ2V4aXN0ZW50KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvLW1lcmdpbmcgJXMiCittc2dzdHIgIkF1dG9mdXNpb25hbnQgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDQgZ2l0LXN1Ym1vZHVsZS5zaDoxMTUwCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJzdWJtw7JkdWwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIkNPTkZMSUNURSAoJXMpOiBDb25mbGljdGUgZGUgZnVzacOzIGVuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICJFbGltaW5hbnQgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NTYKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAiZml0eGVyL2RpcmVjdG9yaSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2MgorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICJkaXJlY3RvcmkvZml0eGVyIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IFRoZXJlIGlzIGEgZGlyZWN0b3J5IHdpdGggbmFtZSAlcyBpbiAlcy4gQWRkaW5nICVzIGFzICVzIgorbXNnc3RyICIiCisiQ09ORkxJQ1RFICglcyk6IEhpIGhhIHVuIGRpcmVjdG9yaSBhbWIgbm9tICVzIGVuICVzLiBBZmVnaW50ICVzIGNvbSBhICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiQWZlZ2ludCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc5NAorbXNnaWQgIkZhdGFsIG1lcmdlIGZhaWx1cmUsIHNob3VsZG4ndCBoYXBwZW4uIgorbXNnc3RyICJGYWxsYXQgZGUgZnVzacOzIGZhdGFsOyBhaXjDsiBubyBoYSBkZSBwYXNzYXIuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODEzCittc2dpZCAiQWxyZWFkeSB1cC10by1kYXRlISIKK21zZ3N0ciAiSmEgYWwgZGlhISIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgImxhIGZ1c2nDsyBkZWxzIGFyYnJlcyAlcyBpICVzIGhhIGZhbGxhdCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnByb2Nlc3NlZCBwYXRoPz8/ICVzIgorbXNnc3RyICJDYW3DrSBubyBwcm9jZXNzYXQ/Pz8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5MDAKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiRnVzaW9uYW50OiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkxMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAicydoYSB0cm9iYXQgJXUgYXZhbnRwYXNzYXQ6IgorbXNnc3RyWzFdICJzJ2hhbiB0cm9iYXQgJXUgYXZhbnRwYXNzYXRzOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTk1MAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAibGEgZnVzacOzIG5vIGhhIHJldG9ybmF0IGNhcCBjb21pc3Npw7MiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ29iamVjdGUgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjAxOCBidWlsdGluL21lcmdlLmM6NjQ1Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc2NyaXVyZSBsJ8OtbmRleC4iCisKKyM6IG5vdGVzLXV0aWxzLmM6NDEKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIk5vIGVzIHBvdCBjb21ldHJlIHVuIGFyYnJlIGRlIG5vdGVzIG5vIGluaWNpYWxpdHphdCAvIG5vIHJlZmVyZW5jaWF0IgorCisjOiBub3Rlcy11dGlscy5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIlZhbG9yIGRlIG5vdGVzLnJld3JpdGVNb2RlIGRvbGVudDogJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIlJlZnVzYW50IHJlZXNjcml1cmUgbGVzIG5vdGVzIGVuICVzIChmb3JhIGRlIHJlZnMvbm90ZXMvKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiB0aGUKKyMuIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzIGl0cyB2YWx1ZQorIzogbm90ZXMtdXRpbHMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICJWYWxvciBkb2xlbnQgZGUgJXM6ICclcyciCisKKyM6IG9iamVjdC5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbCdvYmplY3RlOiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjU2MworbXNnaWQgIi4uLiIKK21zZ3N0ciAiLi4uIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAiw7pzOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uCisjOiBwYXJzZS1vcHRpb25zLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiIG86ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NjIyCittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLU5VTSIKKworIzogcGF0aHNwZWMuYzoxMzMKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisiZWxzIGFqdXN0cyBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtICdnbG9iJyBpICdub2dsb2InIGdsb2JhbHMgc8OzbiAiCisiaW5jb21wYXRpYmxlcyIKKworIzogcGF0aHNwZWMuYzoxNDMKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICIiCisibCdhanVzdCBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtICdsaXRlcmFsJyBnbG9iYWwgw6lzIGluY29tcGF0aWJsZSBhbWIgdG90cyAiCisiZWxzIGFsdHJlcyBhanVzdHMgZCdlc3BlY2lmaWNhY2nDsyBkZSBjYW3DrSBnbG9iYWxzIgorCisjOiBwYXRoc3BlYy5jOjE3NworbXNnaWQgImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIKK21zZ3N0ciAicGFyw6BtZXRyZSBubyB2w6BsaWQgcGVyIGEgbGEgbcOgZ2lhIGQnZXNwZWNpZmljYWNpw7MgZGUgY2Ftw60gJ3ByZWZpeCciCisKKyM6IHBhdGhzcGVjLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIk3DoGdpYSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIG5vIHbDoGxpZGEgJyUuKnMnIGVuICclcyciCisKKyM6IHBhdGhzcGVjLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAiJyknIG1hbmNhbnQgYWwgZmluYWwgZGUgbGEgbcOgZ2lhIGQnZXNwZWNpZmljYWNpw7MgZGUgY2Ftw60gZW4gJyVzJyIKKworIzogcGF0aHNwZWMuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIk3DoGdpYSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtIG5vIGltcGxlbWVudGFkYSAnJWMnIGVuICclcyciCisKKyM6IHBhdGhzcGVjLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlczogJ2xpdGVyYWwnIGkgJ2dsb2InIHPDs24gaW5jb21wYXRpYmxlcyIKKworIzogcGF0aHNwZWMuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICIlczogJyVzJyDDqXMgZm9yYSBkZWwgZGlww7JzaXQiCisKKyM6IHBhdGhzcGVjLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAiTCdlc3BlY2lmaWNhY2nDsyAnJXMnIMOpcyBlbiBlbCBzdWJtw7JkdWwgJyUuKnMnIgorCisjOiBwYXRoc3BlYy5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIiCisiJXM6IGFxdWVzdGEgb3JkcmUgbm8gw6lzIGNvbXBhdGlibGUgYW1iIGxhIG3DoGdpYSBkJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtOiAlcyIKKworIzogcGF0aHNwZWMuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJsJ2VzcGVjaWZpY2FjacOzIGRlIGNhbcOtICclcycgw6lzIG3DqXMgZW5sbMOgIGQndW4gZW5sbGHDpyBzaW1iw7JsaWMiCisKKyM6IHBhdGhzcGVjLmM6NDQxCittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gZXhjbHVkZSBmcm9tIGJ5IDooZXhjbHVkZSkgcGF0dGVybnMuXG4iCisiUGVyaGFwcyB5b3UgZm9yZ290IHRvIGFkZCBlaXRoZXIgJzovJyBvciAnLicgPyIKK21zZ3N0ciAiIgorIk5vIGhpIGhhIHJlcyBhIGV4Y2xvdXJlIHBlciBwYXRyb25zIDooZXhjbHVzacOzKS5cbiIKKyJQb3RzZXIgaGV1IG9ibGlkYXQgYWZlZ2lyIG8gJzovJyBvICcuJyA/IgorCisjOiBwcmV0dHkuYzo5NjkKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBlbCBmb3JtYXQgLS1wcmV0dHkiCisKKyM6IHByb2dyZXNzLmM6MjM2Cittc2dpZCAiZG9uZSIKK21zZ3N0ciAiZmV0IgorCisjOiByZWFkLWNhY2hlLmM6MTI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiaW5kZXgudmVyc2lvbiBlc3RhYmxlcnQsIHBlcsOyIGVsIHZhbG9yIG5vIMOpcyB2w6BsaWQuXG4iCisiVXNhbnQgbGEgdmVyc2nDsyAlaSIKKworIzogcmVhZC1jYWNoZS5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBlc3RhYmxlcnQsIHBlcsOyIGVsIHZhbG9yIG5vIMOpcyB2w6BsaWQuXG4iCisiVXNhbnQgbGEgdmVyc2nDsyAlaSIKKworIzogcmVmcy5jOjI5NDEgYnVpbHRpbi9tZXJnZS5jOjc2MCBidWlsdGluL21lcmdlLmM6ODcxIGJ1aWx0aW4vbWVyZ2UuYzo5NzMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciAnJXMnIHBlciBhIGVzY3JpcHR1cmEiCisKKyM6IHJlZnMuYzozMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBzdXByaW1pciBsYSByZWZlcsOobmNpYSAlczogJXMiCisKKyM6IHJlZnMuYzozMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgc3VwcmltaXIgbGVzIHJlZmVyw6huY2llczogJXMiCisKKyM6IHJlZnMuYzozMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVsaW1pbmFyIGxhIHJlZmVyw6huY2lhICVzIgorCisjOiByZWYtZmlsdGVyLmM6NjYwCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgZWwgZm9ybWF0IgorCisjOiByZW1vdGUuYzo3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICJObyBlcyBwb3Qgb2J0ZW5pciBhbWJkw7NzICVzIGkgJXMgYSAlcyIKKworIzogcmVtb3RlLmM6Nzk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHVzdWFsbHkgdHJhY2tzICVzLCBub3QgJXMiCittc2dzdHIgIiVzIGdlbmVyYWxtZW50IHNlZ3VlaXggJXMsIG5vICVzIgorCisjOiByZW1vdGUuYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyBzZWd1ZWl4IGFtYmTDs3MgJXMgaSAlcyIKKworIzogcmVtb3RlLmM6ODA4Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIkVycm9yIGludGVybiIKKworIzogcmVtb3RlLmM6MTcyMyByZW1vdGUuYzoxNzY2Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCBubyBhc3NlbnlhbGEgY2FwIGJyYW5jYSIKKworIzogcmVtb3RlLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAibm8gaGkgaGEgdGFsIGJyYW5jYTogJyVzJyIKKworIzogcmVtb3RlLmM6MTczNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiY2FwIGZvbnQgY29uZmlndXJhZGEgcGVyIGEgbGEgYnJhbmNhICclcyciCisKKyM6IHJlbW90ZS5jOjE3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgIkxhIGJyYW5jYSBmb250ICclcycgbm8gcydlbW1hZ2F0emVtYSBjb20gYSBicmFuY2EgYW1iIHNlZ3VpbWVudCByZW1vdCIKKworIzogcmVtb3RlLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorImVsIGRlc3TDrSBkZSBwdWphZGEgJyVzJyBlbiBlbCByZW1vdCAnJXMnIG5vIHTDqSBjYXAgYnJhbmNhIHNlZ3VpZG9yYSBsb2NhbCIKKworIzogcmVtb3RlLmM6MTc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICJsYSBicmFuY2EgJyVzJyBubyB0w6kgY2FwIHJlbW90IGFsIHF1YWwgcHVqYXIiCisKKyM6IHJlbW90ZS5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICJsZXMgZXNwZWNpZmljYWNpb25zIGRlIHJlZmVyw6huY2lhIGRlICclcycgbm8gaW5jbG91ZW4gJyVzJyIKKworIzogcmVtb3RlLmM6MTc5NQorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAicHVzaCBubyB0w6kgZGVzdMOtIChwdXNoLmRlZmF1bHQgw6lzICdub3RoaW5nJykiCisKKyM6IHJlbW90ZS5jOjE4MTcKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICJubyBlcyBwb3QgcmVzb2xkcmUgdW5hIHB1amFkYSAnc2ltcGxlJyBhIHVuIHNvbCBkZXN0w60iCisKKyM6IHJlbW90ZS5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJMYSB2b3N0cmEgYnJhbmNhIGVzdMOgIGJhc2FkYSBlbiAnJXMnLCBwZXLDsiBsYSBmb250IG5vIGhpIMOpcy5cbiIKKworIzogcmVtb3RlLmM6MjEyOAorbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgcGVyIGEgYXJyZWdsYXIpXG4iCisKKyM6IHJlbW90ZS5jOjIxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAtdG8tZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIkxhIHZvc3RyYSBicmFuY2EgZXN0w6AgYWwgZGlhIGFtYiAnJXMnLlxuIgorCisjOiByZW1vdGUuYzoyMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIkxhIHZvc3RyYSBicmFuY2EgZXN0w6AgZGF2YW50IGRlICclcycgcGVyICVkIGNvbWlzc2nDsy5cbiIKK21zZ3N0clsxXSAiTGEgdm9zdHJhIGJyYW5jYSBlc3TDoCBkYXZhbnQgZGUgJyVzJyBwZXIgJWQgY29taXNzaW9ucy5cbiIKKworIzogcmVtb3RlLmM6MjE0MQorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgcHVzaFwiIHBlciBhIHB1YmxpY2FyIGxlcyB2b3N0cmVzIGNvbWlzc2lvbnMgbG9jYWxzKVxuIgorCisjOiByZW1vdGUuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJMYSB2b3N0cmEgYnJhbmNhIGVzdMOgIGRhcnJlcmUgZGUgJyVzJyBwZXIgJWQgY29taXNzacOzLCBpIHBvdCBhdmFuw6dhci1zZSAiCisicsOgcGlkYW1lbnQuXG4iCittc2dzdHJbMV0gIiIKKyJMYSB2b3N0cmEgYnJhbmNhIGVzdMOgIGRhcnJlcmUgZGUgJyVzJyBwZXIgJWQgY29taXNzaW9ucywgaSBwb3QgYXZhbsOnYXItc2UgIgorInLDoHBpZGFtZW50LlxuIgorCisjOiByZW1vdGUuYzoyMTUyCittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAodXNldSBcImdpdCBwdWxsXCIgcGVyIGEgYWN0dWFsaXR6YXIgbGEgdm9zdHJhIGJyYW5jYSBsb2NhbClcbiIKKworIzogcmVtb3RlLmM6MjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKKyJMYSB2b3N0cmEgYnJhbmNhIGkgJyVzJyBzJ2hhbiBkaXZlcmdpdCxcbiIKKyJpIHRlbmVuICVkIGkgJWQgY29taXNzacOzIGRpc3RpbnRhIGNhZGEgdW5hLCByZXNwZWN0aXZhbWVudC5cbiIKK21zZ3N0clsxXSAiIgorIkxhIHZvc3RyYSBicmFuY2EgaSAnJXMnIHMnaGFuIGRpdmVyZ2l0LFxuIgorImkgdGVuZW4gJWQgaSAlZCBjb21pc3Npb25zIGRpc3RpbnRlcyBjYWRhIHVuYSwgcmVzcGVjdGl2YW1lbnQuXG4iCisKKyM6IHJlbW90ZS5jOjIxNjUKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpXG4iCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgcHVsbFwiIHBlciBhIGZ1c2lvbmFyIGxhIGJyYW5jYSByZW1vdGEgYSBsYSB2b3N0cmEpXG4iCisKKyM6IHJldmlzaW9uLmM6MjE5OAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgImxhIHZvc3RyYSBicmFuY2EgYWN0dWFsIHNlbWJsYSB0cmVuY2FkYSIKKworIzogcmV2aXNpb24uYzoyMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAibGEgdm9zdHJhIGJyYW5jYSBhY3R1YWwgJyVzJyBlbmNhcmEgbm8gdMOpIGNhcCBjb21pc3Npw7MiCisKKyM6IHJldmlzaW9uLmM6MjM5NQorbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnc3RyICItLWZpcnN0LXBhcmVudCDDqXMgaW5jb21wYXRpYmxlIGFtYiAtLWJpc2VjdCIKKworIzogcnVuLWNvbW1hbmQuYzo4MworbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAicydoYSBmYWxsYXQgZW4gb2JyaXIgL2Rldi9udWxsIgorCisjOiBydW4tY29tbWFuZC5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cDIoJWQsJWQpIGZhaWxlZCIKK21zZ3N0ciAiZHVwMiglZCwlZCkgaGEgZmFsbGF0IgorCisjOiBzZW5kLXBhY2suYzoyOTUKK21zZ2lkICJmYWlsZWQgdG8gc2lnbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSIKK21zZ3N0ciAicydoYSBmYWxsYXQgZW4gZmlybWFyIGVsIGNlcnRpZmljYXQgZGUgcHVqYWRhIgorCisjOiBzZW5kLXBhY2suYzo0MDQKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIHB1c2giCittc2dzdHIgImVsIGRlc3TDrSByZWNlcHRvciBubyBhZG1ldCBwdWphciAtLXNpZ25lZCIKKworIzogc2VuZC1wYWNrLmM6NDA2Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisibm8gZW52aWFudCB1bmEgY2VydGlmaWNhY2nDsyBkZSBwdWphZGEgcGVycXXDqCBlbCBkZXN0w60gcmVjZXB0b3Igbm8gYWRtZXQgIgorInB1amFyIC0tc2lnbmVkIgorCisjOiBzZW5kLXBhY2suYzo0MTgKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgImVsIGRlc3TDrSByZWNlcHRvciBubyBhZG1ldCBwdWphciAtLWF0b21pYyIKKworIzogc2VxdWVuY2VyLmM6MTgzCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyJkZXNwcsOpcyBkZSByZXNvbGRyZSBlbHMgY29uZmxpY3RlcywgbWFycXVldSBlbHMgY2FtaW5zXG4iCisiY29ycmVnaXRzIGFtYiAnZ2l0IGFkZCA8Y2FtaW5zPicgbyAnZ2l0IHJtIDxjYW1pbnM+JyIKKworIzogc2VxdWVuY2VyLmM6MTg2Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyJkZXNwcsOpcyBkZSByZXNvbGRyZSBlbHMgY29uZmxpY3RlcywgbWFycXVldSBlbHMgY2FtaW5zXG4iCisiY29ycmVnaXRzIGFtYiAnZ2l0IGFkZCA8Y2FtaW5zPicgbyAnZ2l0IHJtIDxjYW1pbnM+J1xuIgorImkgY29tZXRldSBlbCByZXN1bHRhdCBhbWIgJ2dpdCBjb21taXQnIgorCisjOiBzZXF1ZW5jZXIuYzoxOTkgc2VxdWVuY2VyLmM6ODQyIHNlcXVlbmNlci5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXNjcml1cmUgYSAlcyIKKworIzogc2VxdWVuY2VyLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzIgorbXNnc3RyICJFcnJvciBlbiBmaW5hbGl0emFyICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMTcKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJFbHMgdm9zdHJlcyBjYW52aXMgbG9jYWxzIHNlIHNvYnJlZXNjcml1cmllbiBwZWwgcmVjdWxsIGRlIGNpcmVyZXMuIgorCisjOiBzZXF1ZW5jZXIuYzoyMTkKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgcmV2ZXJ0LiIKK21zZ3N0ciAiRWxzIHZvc3RyZXMgY2FudmlzIGxvY2FscyBzZSBzb2JyZWVzY3JpdXJpZW4gcGVyIGxhIHJldmVyc2nDsy4iCisKKyM6IHNlcXVlbmNlci5jOjIyMgorbXNnaWQgIkNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiQ29tZXRldSBlbHMgdm9zdHJlcyBjYW52aXMgbyBlbW1hZ2F0emVtZXUtbG9zIHBlciBhIHByb2NlZGlyLiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIgb3IgImNoZXJyeS1waWNrIgorIzogc2VxdWVuY2VyLmM6MzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiVzOiBObyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIHVuIGZpdHhlciBkJ8OtbmRleCBub3UiCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0XG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgcmVzb2xkcmUgbGEgY29taXNzacOzIEhFQURcbiIKKworIzogc2VxdWVuY2VyLmM6MzQ3Cittc2dpZCAiVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYWN0dWFsaXR6YXIgbCdhcmJyZSBjYXVcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXNcbiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbGEgY29taXNzacOzICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjQwNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlc1xuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb21pc3Npw7MgbWFyZSAlc1xuIgorCisjOiBzZXF1ZW5jZXIuYzo0NjkKK21zZ2lkICJZb3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICJFbCB2b3N0cmUgZml0eGVyIGQnw61uZGV4IGVzdMOgIHNlbnNlIGZ1c2lvbmFyLiIKKworIzogc2VxdWVuY2VyLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAiTGEgY29taXNzacOzICVzIMOpcyB1bmEgZnVzacOzIHBlcsOyIG5vIHMnaGEgZG9uYXQgY2FwIG9wY2nDsyAtbS4iCisKKyM6IHNlcXVlbmNlci5jOjQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIkxhIGNvbWlzc2nDsyAlcyBubyB0w6kgbWFyZSAlZCIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCittc2dzdHIgIiIKKyJTJ2hhIGVzcGVjaWZpY2F0IGxhIGzDrW5pYSBwcmluY2lwYWwgcGVyw7IgbGEgY29taXNzacOzICVzIG5vIMOpcyB1bmEgZnVzacOzLiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlICJyZXZlcnQiIG9yCisjLiAiY2hlcnJ5LXBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMQorIzogc2VxdWVuY2VyLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6IG5vIGVzIHBvdCBhbmFsaXR6YXIgbGEgY29taXNzacOzIG1hcmUgJXMiCisKKyM6IHNlcXVlbmNlci5jOjUxNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IG9idGVuaXIgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzIGRlICVzIgorCisjOiBzZXF1ZW5jZXIuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCByZXZlcnRpciAlcy4uLiVzIgorCisjOiBzZXF1ZW5jZXIuYzo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFwbGljYXIgJXMuLi4lcyIKKworIzogc2VxdWVuY2VyLmM6NjM5Cittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgImNvbmp1bnQgZGUgY29taXNzaW9ucyBidWl0IHBhc3NhdCIKKworIzogc2VxdWVuY2VyLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IHMnaGEgZmFsbGF0IGVuIGxsZWdpciBsJ8OtbmRleCIKKworIzogc2VxdWVuY2VyLmM6NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IHMnaGEgZmFsbGF0IGVuIGFjdHVhbGl0emFyIGwnw61uZGV4IgorCisjOiBzZXF1ZW5jZXIuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICVzIGR1cmluZyBhICVzIgorbXNnc3RyICJObyBlcyBwb3QgJXMgZHVyYW50IHVuICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBsw61uaWEgJWQuIgorCisjOiBzZXF1ZW5jZXIuYzo3MzgKK21zZ2lkICJObyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIkNhcCBjb21pc3Npw7MgYW5hbGl0emFkYS4iCisKKyM6IHNlcXVlbmNlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBvYnJpciAlcyIKKworIzogc2VxdWVuY2VyLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBsbGVnaXIgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICVzIgorbXNnc3RyICJGdWxsIGQnaW5zdHJ1Y2Npb25zIGludXNhYmxlOiAlcyIKKworIzogc2VxdWVuY2VyLmM6NzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAiQ2xhdSBubyB2w6BsaWRhOiAlcyIKKworIzogc2VxdWVuY2VyLmM6Nzk0IGJ1aWx0aW4vcHVsbC5jOjQ3IGJ1aWx0aW4vcHVsbC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiVmFsb3Igbm8gdsOgbGlkIHBlciBhICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAlcyIKK21zZ3N0ciAiRnVsbCBkJ29wY2lvbnMgbWFsIGZvcm1hdDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgImEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgInVuIHJlY3VsbCBkZSBjaXJlcmVzIG8gdW5hIHJldmVyc2nDsyBqYSBlc3TDoCBlbiBjdXJzIgorCisjOiBzZXF1ZW5jZXIuYzo4MjQKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KVwiIgorbXNnc3RyICJpbnRlbnRldSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY3JlYXIgZWwgZGlyZWN0b3JpIGRlIHNlccO8ZW5jaWFkb3IgJXMiCisKKyM6IHNlcXVlbmNlci5jOjg0NCBzZXF1ZW5jZXIuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIgorbXNnc3RyICJFcnJvciBlbiBmaW5hbGl0emFyICVzLiIKKworIzogc2VxdWVuY2VyLmM6ODYzIHNlcXVlbmNlci5jOjk5NgorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAibmkgaGkgaGEgY2FwIHJlY3VsbCBkZSBjaXJlcmVzIG5pIGNhcCByZXZlcnNpw7MgZW4gY3VycyIKKworIzogc2VxdWVuY2VyLmM6ODY1Cittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAibm8gZXMgcG90IHJlc29sZHJlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjg2NworbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJubyBlcyBwb3QgYXZvcnRhciBkZXMgZCd1bmEgYnJhbmNhIHF1ZSBlbmNhcmEgaGEgZGUgbsOgaXhlciIKKworIzogc2VxdWVuY2VyLmM6ODg3IGJ1aWx0aW4vYXBwbHkuYzo0MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAibm8gZXMgcG90IG9icmlyICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICVzOiAlcyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjg5MQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgImZpbmFsIGRlIGZpdHhlciBpbmVzcGVyYXQiCisKKyM6IHNlcXVlbmNlci5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgImVsIGZpdHhlciBIRUFEIGVtbWFnYXR6ZW1hdCBhYmFucyBkZWwgcmVjdWxsIGRlIGNpcmVyZXMgJyVzJyDDqXMgbWFsbcOocyIKKworIzogc2VxdWVuY2VyLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGZvcm1hdGFyICVzLiIKKworIzogc2VxdWVuY2VyLmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiJXM6IG5vIGVzIHBvdCByZWNvbGxpciBjb20gYSBjaXJlcmEgdW4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjEwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGJhZCByZXZpc2lvbiIKK21zZ3N0ciAiJXM6IHJldmlzacOzIGRvbGVudGEiCisKKyM6IHNlcXVlbmNlci5jOjExMDEKK21zZ2lkICJDYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIk5vIGVzIHBvdCByZXZlcnRpciBjb20gYSBjb21pc3Npw7MgaW5pY2lhbCIKKworIzogc2VxdWVuY2VyLmM6MTEwMgorbXNnaWQgIkNhbid0IGNoZXJyeS1waWNrIGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiTm8gZXMgcG90IHJlY29sbGlyIGNpcmVyZXMgZW4gdW4gY2FwIGJ1aXQiCisKKyM6IHNldHVwLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICJzJ2hhIGZhbGxhdCBlbiBsbGVnaXIgJXMiCisKKyM6IHNoYTFfbmFtZS5jOjQ1MworbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkdpdCBub3JtYWxtZW50IG1haSBjcmVhIHVuYSByZWZlcsOobmNpYSBxdWUgYWNhYmkgYW1iIDQwIGNhcsOgY3RlcnNcbiIKKyJoZXhhZGVjaW1hbHMgcGVycXXDqCBzJ2lnbm9yYXLDoCBxdWFuIG5vbcOpcyBlc3BlY2lmaXF1ZXUgNDAgY2Fyw6BjdGVyc1xuIgorImhleGFkZWNpbWFscy4gQXF1ZXN0ZXMgcmVmZXLDqG5jaWVzIGVzIHBvZGVuIGNyZWFyIHBlciBlcnJvci4gUGVyXG4iCisiZXhlbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJvbiBcIiRiclwiIMOpcyBkJ2FsZ3VuYSBtYW5lcmEgYnVpdCBpIHVuYSByZWZlcsOobmNpYSBkZSA0MCBjYXLDoGN0ZXJzXG4iCisiaGV4YWRlY2ltYWxzLiBTaSB1cyBwbGF1LCBleGFtaW5ldSBhcXVlc3RlcyByZWZlcsOobmNpZXMgaSBwb3RzZXJcbiIKKyJzdXByaW1pdS1sZXMuIERlc2FjdGl2ZXUgYXF1ZXN0IG1pc3NhdGdlIGV4ZWN1dGFudFxuIgorIlwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKKworIzogc3VibW9kdWxlLmM6NjEgc3VibW9kdWxlLmM6OTUKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAiIgorIk5vIGVzIHBvdCBjYW52aWFyIHVuIC5naXRtb2R1bGVzIG5vIGZ1c2lvbmF0LCBwcmltZXIgcmVzb2xkcmV1IGVscyAiCisiY29uZmxpY3RlcyBkZSBmdXNpw7MiCisKKyM6IHN1Ym1vZHVsZS5jOjY1IHN1Ym1vZHVsZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCB0cm9iYXIgbGEgc2VjY2nDsyBlbiAuZ2l0bW9kdWxlcyBvbiBwYXRoPSVzIgorCisjOiBzdWJtb2R1bGUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFjdHVhbGl0emFyIGwnZW50cmFkYSBkZSAuZ2l0bW9kdWxlcyAlcyIKKworIzogc3VibW9kdWxlLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVsaW1pbmFyIGwnZW50cmFkYSBkZSAuZ2l0bW9kdWxlcyBwZXIgYSAlcyIKKworIzogc3VibW9kdWxlLmM6MTE3Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAiTCdhbGxpc3RhbWVudCBkZWwgLmdpdG1vZHVsZXMgYWN0dWFsaXR6YXQgaGEgZmFsbGF0IgorCisjOiBzdWJtb2R1bGUuYzoxMDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgY29yZS53b3JrdHJlZSBpbiAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc3RhYmxpciBjb3JlLndvcmt0cmVlIGVuICVzIgorCisjOiB0cmFpbGVyLmM6NDkxIHRyYWlsZXIuYzo0OTUgdHJhaWxlci5jOjQ5OSB0cmFpbGVyLmM6NTUzIHRyYWlsZXIuYzo1NTcKKyM6IHRyYWlsZXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAidmFsb3IgZGVzY29uZWd1dCAnJXMnIHBlciBhIGxhIGNsYXUgJyVzJyIKKworIzogdHJhaWxlci5jOjU0MyB0cmFpbGVyLmM6NTQ4IGJ1aWx0aW4vcmVtb3RlLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIm3DqXMgZCd1biAlcyIKKworIzogdHJhaWxlci5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICJmaXR4YSBkZSByZW1vbGMgYnVpZGEgZW4gZWwgcmVtb2xjICclLipzJyIKKworIzogdHJhaWxlci5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGZpdHhlciBkJ2VudHJhZGEgJyVzJyIKKworIzogdHJhaWxlci5jOjcwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgbGxlZ2lyIGRlcyBkJ3N0ZGluIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgbGxlZ2lyIGxhIHJlZmVyw6huY2lhICVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyMDMKK21zZ2lkICJDaGVja2luZyBvdXQgZmlsZXMiCittc2dzdHIgIkFnYWZhbnQgZml0eGVycyIKKworIzogdXJsbWF0Y2guYzoxMjAKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAibCdlc3F1ZW1hIGQnVVJMIG5vIMOpcyB2w6BsaWRhIG8gbGkgbWFuY2EgZWwgc3VmaXggJzovLyciCisKKyM6IHVybG1hdGNoLmM6MTQ0IHVybG1hdGNoLmM6Mjk3IHVybG1hdGNoLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAic2Vxw7zDqG5jaWEgZCdlc2NhcGFtZW50ICVYWCBubyB2w6BsaWRhIgorCisjOiB1cmxtYXRjaC5jOjE3MgorbXNnaWQgIm1pc3NpbmcgaG9zdCBhbmQgc2NoZW1lIGlzIG5vdCAnZmlsZTonIgorbXNnc3RyICJtYW5jYSBsYSBtw6BxdWluYSBpIGwnZXNxdWVtYSBubyDDqXMgJ2ZpbGU6JyIKKworIzogdXJsbWF0Y2guYzoxODkKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJ1biBVUkwgJ2ZpbGU6JyBubyBwb3QgdGVuaXIgbsO6bWVybyBkZSBwb3J0IgorCisjOiB1cmxtYXRjaC5jOjE5OQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUiCittc2dzdHIgImhpIGhhIGNhcsOgY3RlcnMgbm8gdsOgbGlkcyBlbiBlbCBub20gZGUgbcOgcXVpbmEiCisKKyM6IHVybG1hdGNoLmM6MjQ0IHVybG1hdGNoLmM6MjU1Cittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAibsO6bWVybyBkZSBwb3J0IG5vIHbDoGxpZCIKKworIzogdXJsbWF0Y2guYzozMjIKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICJzZWdtZW50IGRlIGNhbcOtICcuLicgbm8gdsOgbGlkIgorCisjOiB3cmFwcGVyLmM6MjE5IHdyYXBwZXIuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciAnJXMnIHBlciBhIGxlY3R1cmEgaSBlc2NyaXB0dXJhIgorCisjOiB3cmFwcGVyLmM6MjIxIHdyYXBwZXIuYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciAnJXMnIHBlciBhIGVzY3JpcHR1cmEiCisKKyM6IHdyYXBwZXIuYzoyMjMgd3JhcHBlci5jOjM2NiBidWlsdGluL2FtLmM6MzM3IGJ1aWx0aW4vY29tbWl0LmM6MTY4OAorIzogYnVpbHRpbi9tZXJnZS5jOjEwNzYgYnVpbHRpbi9wdWxsLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgJyVzJyBwZXIgYSBsZWN0dXJhIgorCisjOiB3cmFwcGVyLmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWNjZWRpciBhICclcyc6ICVzIgorCisjOiB3cmFwcGVyLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhY2NlZGlyIGEgJyVzJyIKKworIzogd3JhcHBlci5jOjYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCBjdXJyZW50IHVzZXIgaW4gdGhlIHBhc3N3ZCBmaWxlOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB0cm9iYXIgbCd1c3VhcmkgYWN0dWFsIGVuIGVsIGZpdHhlciBwYXNzd2Q6ICVzIgorCisjOiB3cmFwcGVyLmM6NjEyCittc2dpZCAibm8gc3VjaCB1c2VyIgorbXNnc3RyICJubyBoaSBoYSB0YWwgdXN1YXJpIgorCisjOiB3cmFwcGVyLmM6NjIwCittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9idGVuaXIgZWwgZGlyZWN0b3JpIGRlIHRyZWJhbGwgYWN0dWFsIgorCisjOiB3cmFwcGVyLmM6NjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyICclcycgcGVyIGEgZXNjcmlwdHVyYSIKKworIzogd3JhcHBlci5jOjY0MiBidWlsdGluL2FtLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBhICVzIgorCisjOiB3cmFwcGVyLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB0YW5jYXIgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE0OQorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiQ2FtaW5zIHNlbnNlIGZ1c2lvbmFyOiIKKworIzogd3Qtc3RhdHVzLmM6MTc2IHd0LXN0YXR1cy5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgcmVzZXQgJXMgPGZpdHhlcj4uLi5cIiBwZXIgYSBkZXNhbGxpc3RhcikiCisKKyM6IHd0LXN0YXR1cy5jOjE3OCB3dC1zdGF0dXMuYzoyMDUKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgcm0gLS1jYWNoZWQgPGZpdHhlcj4uLi5cIiBwZXIgYSBkZXNhbGxpc3RhcikiCisKKyM6IHd0LXN0YXR1cy5jOjE4MgorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCBhZGQgPGZpdHhlcj4uLi5cIiBwZXIgYSBzZW55YWxhciByZXNvbHVjacOzKSIKKworIzogd3Qtc3RhdHVzLmM6MTg0IHd0LXN0YXR1cy5jOjE4OAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKHVzZXUgXCJnaXQgYWRkL3JtIDxmaXR4ZXI+Li4uXCIgc2Vnb25zIHNpZ3VpIGFwcm9waWF0IHBlciBhIHNlbnlhbGFyICIKKyJyZXNvbHVjacOzKSIKKworIzogd3Qtc3RhdHVzLmM6MTg2Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgcm0gPGZpdHhlcj4uLi5cIiBwZXIgYSBzZW55YWxhciByZXNvbHVjacOzKSIKKworIzogd3Qtc3RhdHVzLmM6MTk3IHd0LXN0YXR1cy5jOjg4MAorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiQ2FudmlzIGEgY29tZXRyZToiCisKKyM6IHd0LXN0YXR1cy5jOjIxNSB3dC1zdGF0dXMuYzo4ODkKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIkNhbnZpcyBubyBhbGxpc3RhdHMgcGVyIGEgY29tZXRyZToiCisKKyM6IHd0LXN0YXR1cy5jOjIxOQorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IGFkZCA8Zml0eGVyPi4uLlwiIHBlciBhIGFjdHVhbGl0emFyIHF1w6ggZXMgY29tZXRyw6ApIgorCisjOiB3dC1zdGF0dXMuYzoyMjEKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCBhZGQvcm0gPGZpdHhlcj4uLi5cIiBwZXIgYSBhY3R1YWxpdHphciBxdcOoIGVzIGNvbWV0csOgKSIKKworIzogd3Qtc3RhdHVzLmM6MjIyCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAodXNldSBcImdpdCBjaGVja291dCAtLSA8Zml0eGVyPi4uLlwiIHBlciBhIGRlc2NhcnRhciBlbHMgY2FudmlzIGVuIGVsICIKKyJkaXJlY3RvcmkgZGUgdHJlYmFsbCkiCisKKyM6IHd0LXN0YXR1cy5jOjIyNAorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKGNvbWV0ZXUgbyBkZXNjYXJ0ZXUgZWwgY29udGluZ3V0IG1vZGlmaWNhdCBvIG5vIHNlZ3VpdCBlbiBlbHMgc3VibcOyZHVscykiCisKKyM6IHd0LXN0YXR1cy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCAlcyA8Zml0eGVyPi4uLlwiIHBlciBhIGluY2xvdXJlLWhvIGVuIHF1w6ggZXMgY29tZXRyw6ApIgorCisjOiB3dC1zdGF0dXMuYzoyNTEKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICJzdXByaW1pdCBwZXIgYW1iZMOzczoiCisKKyM6IHd0LXN0YXR1cy5jOjI1MworbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAiYWZlZ2l0IHBlciBub3NhbHRyZXM6IgorCisjOiB3dC1zdGF0dXMuYzoyNTUKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICJzdXByaW1pdCBwZXIgZWxsczoiCisKKyM6IHd0LXN0YXR1cy5jOjI1NworbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICJhZmVnaXQgcGVyIGVsbHM6IgorCisjOiB3dC1zdGF0dXMuYzoyNTkKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAic3VwcmltaXQgcGVyIG5vc2FsdHJlczoiCisKKyM6IHd0LXN0YXR1cy5jOjI2MQorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICJhZmVnaXQgcGVyIGFtYmTDs3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNjMKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAibW9kaWZpY2F0IHBlciBhbWJkw7NzOiIKKworIzogd3Qtc3RhdHVzLmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJ1ZzogdW5oYW5kbGVkIHVubWVyZ2VkIHN0YXR1cyAleCIKK21zZ3N0ciAiYnVnOiBlc3RhdCBubyBmdXNpb25hdCBubyBnZXN0aW9uYXQgJXgiCisKKyM6IHd0LXN0YXR1cy5jOjI3MworbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAiZml0eGVyIG5vdToiCisKKyM6IHd0LXN0YXR1cy5jOjI3NQorbXNnaWQgImNvcGllZDoiCittc2dzdHIgImNvcGlhdDoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NworbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICJzdXByaW1pdDoiCisKKyM6IHd0LXN0YXR1cy5jOjI3OQorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAibW9kaWZpY2F0OiIKKworIzogd3Qtc3RhdHVzLmM6MjgxCittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgImNhbnZpYXQgZGUgbm9tOiIKKworIzogd3Qtc3RhdHVzLmM6MjgzCittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgImNhbnZpYXQgZGUgdGlwdXM6IgorCisjOiB3dC1zdGF0dXMuYzoyODUKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAiZGVzY29uZWd1dDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4NworbXNnaWQgInVubWVyZ2VkOiIKK21zZ3N0ciAic2Vuc2UgZnVzaW9uYXI6IgorCisjOiB3dC1zdGF0dXMuYzozNjkKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICJjb21pc3Npb25zIG5vdmVzLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM3MQorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAiY29udGluZ3V0IG1vZGlmaWNhdCwgIgorCisjOiB3dC1zdGF0dXMuYzozNzMKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICJjb250aW5ndXQgbm8gc2VndWl0LCAiCisKKyM6IHd0LXN0YXR1cy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJidWc6IHVuaGFuZGxlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiYnVnOiBlc3RhdCBkZSBkaWZlcsOobmNpYSBubyBnZXN0aW9uYXQgJWMiCisKKyM6IHd0LXN0YXR1cy5jOjc1NAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICJTdWJtw7JkdWxzIGNhbnZpYXRzIHBlcsOyIG5vIGFjdHVhbGl0emF0czoiCisKKyM6IHd0LXN0YXR1cy5jOjc1NgorbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIkNhbnZpcyBkZSBzdWJtw7JkdWwgYSBjb21ldHJlOiIKKworIzogd3Qtc3RhdHVzLmM6ODM3Cittc2dpZCAiIgorIkRvIG5vdCB0b3VjaCB0aGUgbGluZSBhYm92ZS5cbiIKKyJFdmVyeXRoaW5nIGJlbG93IHdpbGwgYmUgcmVtb3ZlZC4iCittc2dzdHIgIiIKKyJObyB0b3F1ZXUgbGEgbMOtbmlhIGRlIHNvYnJlLlxuIgorIlRvdCBlbCBxdWUgaGkgaGEgYSBzb3RhIHMnZWxpbWluYXLDoC4iCisKKyM6IHd0LXN0YXR1cy5jOjk0OAorbXNnaWQgIllvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLiIKK21zZ3N0ciAiVGVuaXUgY2FtaW5zIHNlbnNlIGZ1c2lvbmFyLiIKKworIzogd3Qtc3RhdHVzLmM6OTUxCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICAoYXJyZWdsZXUgZWxzIGNvbmZsaWN0ZXMgaSBleGVjdXRldSBcImdpdCBjb21taXRcIikiCisKKyM6IHd0LXN0YXR1cy5jOjk1NAorbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIlRvdHMgZWxzIGNvbmZsaWN0ZXMgZXN0YW4gYXJyZWdsYXRzIHBlcsOyIGVuY2FyYSBlc3RldSBmdXNpb25hbnQuIgorCisjOiB3dC1zdGF0dXMuYzo5NTcKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IGNvbW1pdFwiIHBlciBhIGNvbmNsb3VyZSBsYSBmdXNpw7MpIgorCisjOiB3dC1zdGF0dXMuYzo5NjcKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iCittc2dzdHIgIkVzdGV1IGVubWlnIGQndW5hIHNlc3Npw7MgYW0uIgorCisjOiB3dC1zdGF0dXMuYzo5NzAKK21zZ2lkICJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIkVsIHBlZGHDpyBhY3R1YWwgZXN0w6AgYnVpdC4iCisKKyM6IHd0LXN0YXR1cy5jOjk3NAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKGFycmVnbGV1IGVscyBjb25mbGljdGVzIGkgZGVzcHLDqXMgZXhlY3V0ZXUgXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6OTc2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgYW0gLS1za2lwXCIgcGVyIGEgb21ldHJlIGFxdWVzdCBwZWRhw6cpIgorCisjOiB3dC1zdGF0dXMuYzo5NzgKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgYW0gLS1hYm9ydFwiIHBlciBhIHJlc3RhdXJhciBsYSBicmFuY2Egb3JpZ2luYWwpIgorCisjOiB3dC1zdGF0dXMuYzoxMTA1Cittc2dpZCAiTm8gY29tbWFuZHMgZG9uZS4iCittc2dzdHIgIk5vIHMnaGEgZmV0IGNhcCBvcmRyZS4iCisKKyM6IHd0LXN0YXR1cy5jOjExMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAiw5psdGltIG9yZHJlIGZldCAoJWQgb3JkcmUgZmV0KToiCittc2dzdHJbMV0gIsOabHRpbXMgb3JkcmVzIGZldHMgKCVkIG9yZHJlcyBmZXRzKToiCisKKyM6IHd0LXN0YXR1cy5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiCittc2dzdHIgIiAgKHZlZ2V1IG3DqXMgZW4gZWwgZml0eGVyICVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTEyNAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIk5vIG1hbmNhIGNhcCBvcmRyZS4iCisKKyM6IHd0LXN0YXR1cy5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IgorbXNnaWRfcGx1cmFsICJOZXh0IGNvbW1hbmRzIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZHMpOiIKK21zZ3N0clswXSAiT3JkcmUgc2Vnw7xlbnQgYSBmZXIgKG1hbmNhICVkIG9yZHJlKToiCittc2dzdHJbMV0gIk9yZHJlcyBzZWfDvGVudHMgYSBmZXIgKG1hbnF1ZW4gJWQgb3JkcmVzKToiCisKKyM6IHd0LXN0YXR1cy5jOjExMzUKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgdG8gdmlldyBhbmQgZWRpdCkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgcGVyIGEgdmV1cmUgaSBlZGl0YXIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICJBY3R1YWxtZW50IGVzdGV1IHJlYmFzYW50IGxhIGJyYW5jYSAnJXMnIGVuICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMTUzCittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcuIgorbXNnc3RyICJBY3R1YWxtZW50IGVzdGV1IHJlYmFzYW50LiIKKworIzogd3Qtc3RhdHVzLmM6MTE2NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAoYXJyZWdsZXUgZWxzIGNvbmZsaWN0ZXMgaSBkZXNwcsOpcyBleGVjdXRldSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTE2OQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAodXNldSBcImdpdCByZWJhc2UgLS1za2lwXCIgcGVyIGEgc2FsdGFyIGFxdWVzdCBwZWRhw6cpIgorCisjOiB3dC1zdGF0dXMuYzoxMTcxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1c2V1IFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgcGVyIGEgYWdhZmFyIGxhIGJyYW5jYSBvcmlnaW5hbCkiCisKKyM6IHd0LXN0YXR1cy5jOjExNzcKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHRvdHMgZWxzIGNvbmZsaWN0ZXMgYXJyZWdsYXRzOiBleGVjdXRldSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisiQWN0dWFsbWVudCBlc3RldSBkaXZpZGludCB1bmEgY29taXNzacOzIG1lbnRyZSByZWJhc2V1IGxhIGJyYW5jYSAnJXMnIGVuICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMTg2Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkFjdHVhbG1lbnQgZXN0ZXUgZGl2aWRpbnQgdW5hIGNvbWlzc2nDsyBkdXJhbnQgdW4gcmViYXNhbWVudC4iCisKKyM6IHd0LXN0YXR1cy5jOjExODkKK21zZ2lkICIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKFVuYSB2ZWdhZGEgcXVlIGVsIHZvc3RyZSBkaXJlY3RvcmkgZGUgdHJlYmFsbCBzaWd1aSBuZXQsIGV4ZWN1dGV1IFwiZ2l0ICIKKyJyZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTE5MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisiQWN0dWFsbWVudCBlc3RldSBlZGl0YW50IHVuYSBjb21pc3Npw7MgbWVudHJlIHJlYmFzZXUgbGEgYnJhbmNhICclcycgZW4gJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjExOTgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIkFjdHVhbG1lbnQgZXN0ZXUgZWRpdGFudCB1bmEgY29taXNzacOzIGR1cmFudCB1biByZWJhc2FtZW50LiIKKworIzogd3Qtc3RhdHVzLmM6MTIwMQorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiBwZXIgYSBlc21lbmFyIGxhIGNvbWlzc2nDsyBhY3R1YWwpIgorCisjOiB3dC1zdGF0dXMuYzoxMjAzCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpIgorbXNnc3RyICIiCisiICAodXNldSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIHVuYSB2ZWdhZGEgcXVlIGVzdGV1IHNhdGlzZmV0IGFtYiBlbHMgIgorInZvc3RyZXMgY2FudmlzKSIKKworIzogd3Qtc3RhdHVzLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICJBY3R1YWxtZW50IGVzdGV1IHJlY29sbGludCBjb20gYSBjaXJlcmEgbGEgY29taXNzacOzICVzLiIKKworIzogd3Qtc3RhdHVzLmM6MTIxOAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChhcnJlZ2xldSBlbHMgY29uZmxpY3RlcyBpIGV4ZWN1dGV1IFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEyMjEKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKHRvdHMgZWxzIGNvbmZsaWN0ZXMgYXJyZWdsYXRzOiBleGVjdXRldSBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMjIzCittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKyIgICh1c2V1IFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiBwZXIgYSBjYW5jZWzCt2xhciBsJ29wZXJhY2nDsyBkZSByZWN1bGwgZGUgIgorImNpcmVyZXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJldmVydGluZyBjb21taXQgJXMuIgorbXNnc3RyICJBY3R1YWxtZW50IGVzdGV1IHJldmVydGludCBsYSBjb21pc3Npw7MgJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxMjM3Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChhcnJlZ2xldSBlbHMgY29uZmxpY3RlcyBpIGV4ZWN1dGV1IFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMjQwCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAodG90cyBlbHMgY29uZmxpY3RlcyBlc3RhbiBhcnJlZ2xhdHM6IGV4ZWN1dGV1IFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMjQyCittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorIiAgKHVzZXUgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiBwZXIgYSBjYW5jZWzCt2xhciBsJ29wZXJhY2nDsyBkZSByZXZlcnNpw7MpIgorCisjOiB3dC1zdGF0dXMuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAiQWN0dWFsbWVudCBlc3RldSBiaXNlY2FudCwgaGV1IGNvbWVuw6dhdCBkZXMgZGUgbGEgYnJhbmNhICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMjU3Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAiQWN0dWFsbWVudCBlc3RldSBiaXNlY2FudC4iCisKKyM6IHd0LXN0YXR1cy5jOjEyNjAKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKHVzZXUgXCJnaXQgYmlzZWN0IHJlc2V0XCIgcGVyIGEgdG9ybmFyIGEgbGEgYnJhbmNhIG9yaWdpbmFsKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIk9uIGJyYW5jaCAiCittc2dzdHIgIkVuIGxhIGJyYW5jYSAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDUKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJyZWJhc2FtZW50IGludGVyYWN0aXUgZW4gcHJvZ3LDqXM7IHNvYnJlICIKKworIzogd3Qtc3RhdHVzLmM6MTQ0NworbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgInJlYmFzYW1lbnQgZW4gcHJvZ3LDqXM7IHNvYnJlICIKKworIzogd3Qtc3RhdHVzLmM6MTQ1MgorbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEIHNlcGFyYXQgYSAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NTQKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIHNlcGFyYXQgZGUgIgorCisjOiB3dC1zdGF0dXMuYzoxNDU3Cittc2dpZCAiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiQWN0dWFsbWVudCBubyBlbiBjYXAgYnJhbmNhLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ3NAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICJDb21pc3Npw7MgaW5pY2lhbCIKKworIzogd3Qtc3RhdHVzLmM6MTQ4OAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiRml0eGVycyBubyBzZWd1aXRzIgorCisjOiB3dC1zdGF0dXMuYzoxNDkwCittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiRml0eGVycyBpZ25vcmF0cyIKKworIzogd3Qtc3RhdHVzLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisiUydoYSB0cmlnYXQgJS4yZiBzZWdvbnMgYSBlbnVtZXJhciBmaXR4ZXJzIG5vIHNlZ3VpdHMuXG4iCisiJ3N0YXR1cyAtdW5vJyBwb3QgYWNjZWxlcmFyLWhvLCBwZXLDsiBoZXUgZCdhbmFyIGFtYiBjb21wdGUgZGUgbm9cbiIKKyJvYmxpZGFyLXZvcyBkJ2FmZWdpciBmaXR4ZXJzIG5vdXMgcGVyIHbDs3MgbWF0ZWl4ICh2ZWdldVxuIgorIidnaXQgaGVscCBzdGF0dXMnKS4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAiRWxzIGZpdHhlcnMgbm8gc2VndWl0cyBubyBlc3RhbiBsbGlzdGF0cyVzIgorCisjOiB3dC1zdGF0dXMuYzoxNTAyCittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiICh1c2V1IGwnb3BjacOzIC11IHBlciBhIG1vc3RyYXIgZWxzIGZpdHhlcnMgbm8gc2VndWl0cykiCisKKyM6IHd0LXN0YXR1cy5jOjE1MDgKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICJTZW5zZSBjYW52aXMiCisKKyM6IHd0LXN0YXR1cy5jOjE1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyJubyBoaSBoYSBjYW52aXMgYWZlZ2l0cyBhIGNvbWV0cmUgKHVzZXUgXCJnaXQgYWRkXCIgbyBcImdpdCBjb21taXQgLWFcIilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIgorbXNnc3RyICJubyBoaSBoYSBjYW52aXMgYWZlZ2l0cyBhIGNvbWV0cmVcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gIgorInRyYWNrKVxuIgorbXNnc3RyICIiCisibm8gaGkgaGEgcmVzIGFmZWdpdCBhIGNvbWV0cmUgcGVyw7IgZml0eGVycyBubyBzZWd1aXRzIGVzdGFuIHByZXNlbnRzICh1c2V1ICIKKyJcImdpdCBhZGRcIiBwZXIgYSBzZWd1aXItbG9zKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICJubyBoaSBoYSByZXMgYWZlZ2l0IGEgY29tZXRyZSBwZXLDsiBmaXR4ZXJzIG5vIHNlZ3VpdHMgZXN0YW4gcHJlc2VudHNcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAiIgorIm5vIGhpIGhhIHJlcyBhIGNvbWV0cmUgKGNyZWV1L2NvcGlldSBmaXR4ZXJzIGkgdXNldSBcImdpdCBhZGRcIiBwZXIgYSBzZWd1aXItIgorImxvcylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUyOCB3dC1zdGF0dXMuYzoxNTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgIm5vIGhpIGhhIHJlcyBhIGNvbWV0cmVcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIgorbXNnc3RyICIiCisibm8gaGkgaGEgcmVzIGEgY29tZXRyZSAodXNldSAtdSBwZXIgYSBtb3N0cmFyIGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgZGlyZWN0b3J5IGNsZWFuXG4iCittc2dzdHIgIm5vIGhpIGhhIHJlcyBhIGNvbWV0cmUsIGRpcmVjdG9yaSBkZSB0cmViYWxsIG5ldFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjQ0Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAoc2Vuc2UgYnJhbmNhKSIKKworIzogd3Qtc3RhdHVzLmM6MTY1MAorbXNnaWQgIkluaXRpYWwgY29tbWl0IG9uICIKK21zZ3N0ciAiQ29taXNzacOzIGluaWNpYWwgZW4gIgorCisjOiB3dC1zdGF0dXMuYzoxNjc3Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAibm8gaGkgw6lzIgorCisjOiB3dC1zdGF0dXMuYzoxNjc5IHd0LXN0YXR1cy5jOjE2ODcKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJkYXJyZXJlICIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU1IGJ1aWx0aW4vY2xvbmUuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICJzJ2hhIGZhbGxhdCBlbiBkZXNlbmxsYcOnYXIgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyMgorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgYWRkIFs8b3BjaW9ucz5dIFstLV0gPGVzcGVjaWZpY2FjacOzLWRlLWNhbcOtPi4uLiIKKworIzogYnVpbHRpbi9hZGQuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICJlc3RhdCBkZSBkaWZmIGluZXNwZXJhdCAlYyIKKworIzogYnVpbHRpbi9hZGQuYzo3MCBidWlsdGluL2NvbW1pdC5jOjI3NworbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAicydoYSBmYWxsYXQgZW4gYWN0dWFsaXR6YXIgZWxzIGZpdHhlcnMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAiZWxpbWluYSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTM0Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIkNhbnZpcyBubyBhbGxpc3RhdHMgZGVzcHLDqXMgZCdhY3R1YWxpdHphciBsJ8OtbmRleDoiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTk0IGJ1aWx0aW4vcmV2LXBhcnNlLmM6Nzk5Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGxsZWdpciBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9hZGQuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2JyaXIgJyVzJyBwZXIgYSBlc2NyaXB0dXJhLiIKKworIzogYnVpbHRpbi9hZGQuYzoyMDkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgcGVkYcOnIgorCisjOiBidWlsdGluL2FkZC5jOjIxMgorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICJsJ2VkaWNpw7MgZGVsIHBlZGHDpyBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZmVyIHN0YXQgYSAnJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjIxNworbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiRWwgcGVkYcOnIMOpcyBidWl0LiBBdm9ydGF0LiIKKworIzogYnVpbHRpbi9hZGQuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICclcyciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgYXBsaWNhciAnJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjIzMgorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiIgorIkVscyBjYW1pbnMgc2Vnw7xlbnRzIHMnaWdub3JlbiBwZXIgdW4gZGVscyB2b3N0cmVzIGZpdHhlcnMgLmdpdGlnbm9yZTpcbiIKKworIzogYnVpbHRpbi9hZGQuYzoyNDkgYnVpbHRpbi9jbGVhbi5jOjg5NiBidWlsdGluL2ZldGNoLmM6MTA4IGJ1aWx0aW4vbXYuYzoxMTAKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTUgYnVpbHRpbi9wdWxsLmM6MTgyIGJ1aWx0aW4vcHVzaC5jOjU0NQorIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM5IGJ1aWx0aW4vcm0uYzoyNjggYnVpbHRpbi9zZW5kLXBhY2suYzoxNjIKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICJtYXJ4YSBlbiBzZWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUwIGJ1aWx0aW4vYXBwbHkuYzo0NTgwIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyMSBidWlsdGluL2NvdW50LW9iamVjdHMuYzo2MyBidWlsdGluL2ZzY2suYzo2MzYKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MSBidWlsdGluL212LmM6MTA5IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE0Cittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAic2lndWVzIGRldGFsbGF0IgorCisjOiBidWlsdGluL2FkZC5jOjI1MgorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgInJlY3VsbCBpbnRlcmFjdGl1IgorCisjOiBidWlsdGluL2FkZC5jOjI1MyBidWlsdGluL2NoZWNrb3V0LmM6MTE1MiBidWlsdGluL3Jlc2V0LmM6Mjg2Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgInNlbGVjY2lvbmEgZWxzIHRyb3Nzb3MgaW50ZXJhY3RpdmFtZW50IgorCisjOiBidWlsdGluL2FkZC5jOjI1NAorbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAiZWRpdGEgbGEgZGlmZXLDqG5jaWEgYWN0dWFsIGkgYXBsaWNhLWxhIgorCisjOiBidWlsdGluL2FkZC5jOjI1NQorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAicGVybWV0IGFmZWdpciBmaXR4ZXJzIHF1ZSBkJ2FsdHJhIG1hbmVyYSBzJ2lnbm9yZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU2Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgImFjdHVhbGl0emEgZWxzIGZpdHhlcnMgc2VndWl0cyIKKworIzogYnVpbHRpbi9hZGQuYzoyNTcKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgInJlZ2lzdHJhIG5vbcOpcyBlbCBmZXQgcXVlIGVsIGNhbcOtIHMnYWZlZ2lyw6AgbcOpcyB0YXJkIgorCisjOiBidWlsdGluL2FkZC5jOjI1OAorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiYWZlZ2VpeCBlbHMgY2FudmlzIGRlIHRvdHMgZWxzIGZpdHhlcnMgc2VndWl0cyBpIG5vIHNlZ3VpdHMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYxCittc2dpZCAiaWdub3JlIHBhdGhzIHJlbW92ZWQgaW4gdGhlIHdvcmtpbmcgdHJlZSAoc2FtZSBhcyAtLW5vLWFsbCkiCittc2dzdHIgIiIKKyJpZ25vcmEgZWxzIGNhbWlucyBlbGltaW5hdHMgZW4gbCdhcmJyZSBkZSB0cmViYWxsIChlbCBtYXRlaXggcXVlIC0tbm8tYWxsKSIKKworIzogYnVpbHRpbi9hZGQuYzoyNjMKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgIm5vIGFmZWdlaXhpcywgbm9tw6lzIGFjdHVhbGl0emEgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY0Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAibm9tw6lzIG9tZXQgZWxzIGZpdHhlcnMgcXVlIG5vIGVzIHBvZGVuIGFmZWdpciBhIGNhdXNhIGQnZXJyb3JzIgorCisjOiBidWlsdGluL2FkZC5jOjI2NQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAiIgorImNvbXByb3ZldSBzaSBlbHMgZml0eGVycyAtIGZpbnMgaSB0b3QgZWxzIGFic2VudHMgLSBzJ2lnbm9yZW4gZW4gbWFyeGEgZW4gc2VjIgorCisjOiBidWlsdGluL2FkZC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICJVc2V1IC1mIHNpIHJlYWxtZW50IGVscyB2b2xldSBhZmVnaXIuXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk0Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAibCdhZmVnaW1lbnQgZGUgZml0eGVycyBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMwCittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BIGkgLXUgc8OzbiBtdXR1YWxtZW50IGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM3Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiTCdvcGNpw7MgLS1pZ25vcmUtbWlzc2luZyBub23DqXMgZXMgcG90IHVzYXIganVudCBhbWIgLS1kcnktcnVuIgorCisjOiBidWlsdGluL2FkZC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiUmVzIGVzcGVjaWZpY2F0LCByZXMgYWZlZ2l0LlxuIgorCisjOiBidWlsdGluL2FkZC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAiUG90c2VyIHZvbMOtZXUgZGlyICdnaXQgYWRkIC4nP1xuIgorCisjOiBidWlsdGluL2FkZC5jOjM2NCBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MiBidWlsdGluL2NsZWFuLmM6OTQwCisjOiBidWlsdGluL2NvbW1pdC5jOjMzNiBidWlsdGluL212LmM6MTMwIGJ1aWx0aW4vcmVzZXQuYzoyMzUgYnVpbHRpbi9ybS5jOjI5OAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiZml0eGVyIGQnw61uZGV4IG1hbG3DqHMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ1IGJ1aWx0aW4vYXBwbHkuYzo0Njc4IGJ1aWx0aW4vbXYuYzoyNzkgYnVpbHRpbi9ybS5jOjQzMAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSB1biBmaXR4ZXIgZCfDrW5kZXggbm91IgorCisjOiBidWlsdGluL2FtLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZmVyIHN0YXQgYSAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6MjcwIGJ1aWx0aW4vYW0uYzoxMzQ1IGJ1aWx0aW4vY29tbWl0LmM6NzM3IGJ1aWx0aW4vbWVyZ2UuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyICclcyciCisKKyM6IGJ1aWx0aW4vYW0uYzo0NDQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgYXV0aG9yIHNjcmlwdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbCdzY3JpcHQgZCdhdXRvciIKKworIzogYnVpbHRpbi9hbS5jOjUyMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICJzJ2hhIHN1cHJpbWl0ICclcycgcGVyIGVsIGdhbnhvIGFwcGx5cGF0Y2gtbXNnIgorCisjOiBidWlsdGluL2FtLmM6NTYyIGJ1aWx0aW4vbm90ZXMuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJMw61uaWEgZCdlbnRyYWRhIG1hbCBmb3JtYWRhOiAnJXMnLiIKKworIzogYnVpbHRpbi9hbS5jOjU5OSBidWlsdGluL25vdGVzLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJTJ2hhIGZhbGxhdCBlbiBjb3BpYXIgbGVzIG5vdGVzIGRlICclcycgYSAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6NjI1Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICJmc2VlayBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vYW0uYzo3ODYgYnVpbHRpbi9hbS5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciAnJXMnIHBlciBhIGxlY3R1cmE6ICVzIgorCisjOiBidWlsdGluL2FtLmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyICclcycgcGVyIGEgZXNjcmlwdHVyYTogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzo4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGVsIHBlZGHDpyAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6ODY3Cittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIm5vbcOpcyB1bmEgc8OocmllIGRlIHBlZGHDp29zIFN0R0lUIGVzIHBvdCBhcGxpY2FyIGEgbGEgdmVnYWRhIgorCisjOiBidWlsdGluL2FtLmM6OTE1Cittc2dpZCAiaW52YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIm1hcmNhIGRlIHRlbXBzIG5vIHbDoGxpZGEiCisKKyM6IGJ1aWx0aW4vYW0uYzo5MTggYnVpbHRpbi9hbS5jOjkyNgorbXNnaWQgImludmFsaWQgRGF0ZSBsaW5lIgorbXNnc3RyICJsw61uaWEgRGF0ZSBubyB2w6BsaWRhIgorCisjOiBidWlsdGluL2FtLmM6OTIzCittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgImRlc3BsYcOnYW1lbnQgZGUgem9uYSBkZSB0ZW1wcyBubyB2w6BsaWQiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDEwCittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJMYSBkZXRlY2Npw7MgZGUgZm9ybWF0IGRlIHBlZGHDpyBoYSBmYWxsYXQuIgorCisjOiBidWlsdGluL2FtLmM6MTAxNSBidWlsdGluL2Nsb25lLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIGNyZWFyIGVsIGRpcmVjdG9yaSAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6MTAxOQorbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAiUydoYSBmYWxsYXQgZW4gZGl2aWRpciBlbHMgcGVkYcOnb3MuIgorCisjOiBidWlsdGluL2FtLmM6MTE1MSBidWlsdGluL2NvbW1pdC5jOjM2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIGZpdHhlciBkJ8OtbmRleCIKKworIzogYnVpbHRpbi9hbS5jOjEyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgIlF1YW4gaMOgZ2l1IHJlc29sdCBhcXVlc3QgcHJvYmxlbWEsIGV4ZWN1dGV1IFwiJXMgLS1jb250aW51ZVwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICJTaSBwcmVmZXJpdSBzYWx0YXIgYXF1ZXN0IHBlZGHDpywgZXhlY3V0ZXUgXCIlcyAtLXNraXBcIiBlbiBsbG9jLiIKKworIzogYnVpbHRpbi9hbS5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICIiCisiUGVyIGEgcmVzdGF1cmFyIGxhIGJyYW5jYSBvcmlnaW5hbCBpIGRlaXhhciBkJ2FwZWRhw6dhciwgZXhlY3V0ZXUgXCIlcyAtLWFib3J0IgorIlwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEzMzkKK21zZ2lkICJQYXRjaCBpcyBlbXB0eS4gV2FzIGl0IHNwbGl0IHdyb25nPyIKK21zZ3N0ciAiRWwgcGVkYcOnIMOpcyBidWl0LiBTJ2hhIGRpdmlkaXQgbWFsYW1lbnQ/IgorCisjOiBidWlsdGluL2FtLmM6MTQxMyBidWlsdGluL2xvZy5jOjEzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAibMOtbmlhIGQnaWRlbnRpdGF0IG5vIHbDoGxpZGE6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb21pc3Npw7MgJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjE0Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIkFsIGRpcMOyc2l0IGxpIG1hbnF1ZW4gZWxzIGJsb2JzIG5lY2Vzc2FyaXMgcGVyIGEgcmV0cm9jZWRpciBhIHVuYSBmdXNpw7MgZGUgMyAiCisidmllcy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjE2Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiVXNhbnQgbGEgaW5mb3JtYWNpw7MgZCfDrW5kZXggcGVyIGEgcmVjb25zdHJ1aXIgdW4gYXJicmUgYmFzZS4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE2MzUKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiSGV1IGVkaXRhdCBlbCB2b3N0cmUgcGVkYcOnIGEgbcOgP1xuIgorIk5vIHMnYXBsaWNhIGFscyBibG9icyByZWNvcmRhdHMgZW4gZWwgc2V1IMOtbmRleC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjQxCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICJSZXRyb2NlZGludCBhIGFwZWRhw6dhciBsYSBiYXNlIGkgZnVzaW9uYXIgZGUgMyB2aWVzLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTY2NgorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgIlMnaGEgZmFsbGF0IGVuIGZ1c2lvbmFyIGVscyBjYW52aXMuIgorCisjOiBidWlsdGluL2FtLmM6MTY5MSBidWlsdGluL21lcmdlLmM6NjMyCittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgaGEgZmFsbGF0IGVuIGVzY3JpdXJlIHVuIGFyYnJlIgorCisjOiBidWlsdGluL2FtLmM6MTY5OAorbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgImFwbGljYW50IGEgdW5hIGhpc3TDsnJpYSBidWlkYSIKKworIzogYnVpbHRpbi9hbS5jOjE3MTEgYnVpbHRpbi9jb21taXQuYzoxNzUyIGJ1aWx0aW4vbWVyZ2UuYzo4MjkKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NTQKK21zZ2lkICJmYWlsZWQgdG8gd3JpdGUgY29tbWl0IG9iamVjdCIKK21zZ3N0ciAicydoYSBmYWxsYXQgZW4gZXNjcml1cmUgbCdvYmplY3RlIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9hbS5jOjE3NDMgYnVpbHRpbi9hbS5jOjE3NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJubyBlcyBwb3QgcmVwcmVuZHJlOiAlcyBubyBleGlzdGVpeC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzYzCittc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorbXNnc3RyICIiCisibm8gZXMgcG90IHNlciBpbnRlcmFjdGl1IHNlbnNlIHF1ZSBzdGRpbiBzaWd1aSBjb25uZWN0YXQgYSB1biB0ZXJtaW5hbC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY4Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICJFbCBjb3MgZGUgbGEgY29taXNzacOzIMOpczoiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNzc4Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKK21zZ3N0ciAiIgorIlZvbGV1IGFwbGljYXItbG8/IFt5XWVzL1tuXW8vW2VdZGl0YS9bdl1pc3VhbGl0emEgZWwgcGVkYcOnL1thXWNjZXB0YSdscyAiCisidG90czogIgorCisjOiBidWlsdGluL2FtLmM6MTgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAlcykiCittc2dzdHIgIsONbmRleCBicnV0OiBubyBlcyBwb3QgYXBsaWNhciBwZWRhw6dvcyAoYnJ1dHM6ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE4NjMgYnVpbHRpbi9hbS5jOjE5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgIkFwbGljYW50OiAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTg3OQorbXNnaWQgIk5vIGNoYW5nZXMgLS0gUGF0Y2ggYWxyZWFkeSBhcHBsaWVkLiIKK21zZ3N0ciAiU2Vuc2UgY2FudmlzIC0tIEVsIHBlZGHDpyBqYSBzJ2hhIGFwbGljYXQuIgorCisjOiBidWlsdGluL2FtLmM6MTg4NworIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAiRWwgcGVkYcOnIGhhIGZhbGxhdCBhICVzICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjb3B5IG9mIHRoZSBwYXRjaCB0aGF0IGZhaWxlZCBpcyBmb3VuZCBpbjogJXMiCittc2dzdHIgIkxhIGPDsnBpYSBkZWwgcGVkYcOnIHF1ZSBoYSBmYWxsYXQgZXMgdHJvYmEgZW46ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTkzNworbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorIkNhcCBjYW52aSAtIGhldSBvYmxpZGF0IGQndXNhciAnZ2l0IGFkZCc/XG4iCisiU2kgbm8gaGkgaGEgcmVzIGEgYWxsaXN0YXIsIHByb2JhYmxlbWVudCBhbGd1bmEgYWx0cmEgY29zYVxuIgorImphIGhhIGludHJvZHXDr3QgZWxzIG1hdGVpeG9zIGNhbnZpczsgcG90c2VyIHZvbGV1IG9tZXRyZSBhcXVlc3QgcGVkYcOnLiIKKworIzogYnVpbHRpbi9hbS5jOjE5NDQKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJEaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnPyIKK21zZ3N0ciAiIgorIkVuY2FyYSB0ZW5pdSBjYW1pbnMgc2Vuc2UgZnVzaW9uYXIgZW4gZWwgdm9zdHJlIMOtbmRleC5cbiIKKyJIZXUgb2JsaWRhdCBkJ3VzYXIgJ2dpdCBhZGQnPyIKKworIzogYnVpbHRpbi9hbS5jOjIwNTIgYnVpbHRpbi9hbS5jOjIwNTYgYnVpbHRpbi9hbS5jOjIwNjggYnVpbHRpbi9yZXNldC5jOjMwOAorIzogYnVpbHRpbi9yZXNldC5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsJ29iamVjdGUgJyVzJy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTA0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICJzJ2hhIGZhbGxhdCBlbiBuZXRlamFyIGwnw61uZGV4IgorCisjOiBidWlsdGluL2FtLmM6MjEzOAorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiU2VtYmxhIHF1ZSBoZXUgbW9ndXQgSEVBRCBkZXNwcsOpcyBkZSBsJ8O6bHRpbWEgZmFsbGFkYSBkZSAnYW0nLlxuIgorIk5vIHJlYm9iaW5hbnQgYSBPUklHX0hFQUQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIKK21zZ3N0ciAiVmFsb3Igbm8gdsOgbGlkIHBlciBhIC0tcGF0Y2gtZm9ybWF0OiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjIyMjEKK21zZ2lkICJnaXQgYW0gW29wdGlvbnNdIFsoPG1ib3g+fDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gW29wY2lvbnNdIFsoPGLDunN0aWE+fDxkaXJlY3RvcmktZGUtY29ycmV1PikuLi5dIgorCisjOiBidWlsdGluL2FtLmM6MjIyMgorbXNnaWQgImdpdCBhbSBbb3B0aW9uc10gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFtvcGNpb25zXSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjIyOAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJleGVjdXRhIGludGVyYWN0aXZhbWVudCIKKworIzogYnVpbHRpbi9hbS5jOjIyMzAKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAib3BjacOzIGhpc3TDsnJpY2EgLS0gbm8tb3AiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMyCittc2dpZCAiYWxsb3cgZmFsbCBiYWNrIG9uIDN3YXkgbWVyZ2luZyBpZiBuZWVkZWQiCittc2dzdHIgInBlcm1ldCByZXRyb2NlZGlyIGEgdW5hIGZ1c2nDsyBkZSAzIHZpZXMgc2kgw6lzIG5lY2Vzc2FyaSIKKworIzogYnVpbHRpbi9hbS5jOjIyMzMgYnVpbHRpbi9pbml0LWRiLmM6NTA5IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTcKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTcxCittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgImNhbGxhIgorCisjOiBidWlsdGluL2FtLmM6MjIzNQorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImFmZWdlaXggdW5hIGzDrW5pYSBTaWduZWQtb2ZmLWJ5IGFsIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9hbS5jOjIyMzgKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAicmVjb2RpZmljYSBlbiB1dGY4IChwZXIgZGVmZWN0ZSkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQwCittc2dpZCAicGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAicGFzc2EgbGEgYmFuZGVyYSAtayBhbCBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQyCittc2dpZCAicGFzcyAtYiBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAicGFzc2EgbGEgYmFuZGVyYSAtYiBhbCBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ0Cittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAicGFzc2EgbGEgYmFuZGVyYSAtbSBhbCBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ2Cittc2dpZCAicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIKK21zZ3N0ciAicGFzc2EgbGEgYmFuZGVyYSAtLWtlZXAtY3IgYWwgZ2l0LW1haWxzcGxpdCBwZWwgZm9ybWF0IG1ib3giCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ5Cittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgIiIKKyJubyBwYXNzaXMgbGEgYmFuZGVyYSAtLWtlZXAtY3IgYWwgZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBkZSBhbS5rZWVwY3IiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUyCittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICJkZXNwdWxsYSB0b3QgYWJhbnMgZCd1bmEgbMOtbmlhIGRlIHRpc3NvcmVzIgorCisjOiBidWlsdGluL2FtLmM6MjI1MyBidWlsdGluL2FwcGx5LmM6NDU2MworbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiYWNjacOzIgorCisjOiBidWlsdGluL2FtLmM6MjI1NCBidWlsdGluL2FtLmM6MjI1NyBidWlsdGluL2FtLmM6MjI2MCBidWlsdGluL2FtLmM6MjI2MworIzogYnVpbHRpbi9hbS5jOjIyNjYgYnVpbHRpbi9hbS5jOjIyNjkgYnVpbHRpbi9hbS5jOjIyNzIgYnVpbHRpbi9hbS5jOjIyNzUKKyM6IGJ1aWx0aW4vYW0uYzoyMjgxCittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAicGFzc2EtaG8gYSB0cmF2w6lzIGRlbCBnaXQtYXBwbHkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYyIGJ1aWx0aW4vYXBwbHkuYzo0NTg3Cittc2dpZCAicm9vdCIKK21zZ3N0ciAiYXJyZWwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjY1IGJ1aWx0aW4vYW0uYzoyMjY4IGJ1aWx0aW4vYXBwbHkuYzo0NTI1CisjOiBidWlsdGluL2FwcGx5LmM6NDUyOCBidWlsdGluL2Nsb25lLmM6ODUgYnVpbHRpbi9mZXRjaC5jOjkzCisjOiBidWlsdGluL3B1bGwuYzoxNjcKK21zZ2lkICJwYXRoIgorbXNnc3RyICJjYW3DrSIKKworIzogYnVpbHRpbi9hbS5jOjIyNzEgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjY5IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MgorIzogYnVpbHRpbi9ncmVwLmM6Njk4IGJ1aWx0aW4vbWVyZ2UuYzoxOTggYnVpbHRpbi9wdWxsLmM6MTI3CisjOiBidWlsdGluL3JlcGFjay5jOjE3OCBidWlsdGluL3JlcGFjay5jOjE4MiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0CisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTgwIGJ1aWx0aW4vdGFnLmM6NTkxIHBhcnNlLW9wdGlvbnMuaDoxMzIKKyM6IHBhcnNlLW9wdGlvbnMuaDoxMzQgcGFyc2Utb3B0aW9ucy5oOjI0MworbXNnaWQgIm4iCittc2dzdHIgIm4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc0IGJ1aWx0aW4vYXBwbHkuYzo0NTMxCittc2dpZCAibnVtIgorbXNnc3RyICJuw7ptZXJvIgorCisjOiBidWlsdGluL2FtLmM6MjI3NyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0IGJ1aWx0aW4vcmVwbGFjZS5jOjQzOAorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAiZm9ybWF0IgorCisjOiBidWlsdGluL2FtLmM6MjI3OAorbXNnaWQgImZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbiIKK21zZ3N0ciAiZWwgZm9ybWF0IGVuIGVsIHF1YWwgZXN0YW4gZWxzIHBlZGHDp29zIgorCisjOiBidWlsdGluL2FtLmM6MjI4NAorbXNnaWQgIm92ZXJyaWRlIGVycm9yIG1lc3NhZ2Ugd2hlbiBwYXRjaCBmYWlsdXJlIG9jY3VycyIKK21zZ3N0ciAiIgorInBhc3NhIHBlciBhbHQgZWwgbWlzc2F0Z2UgZCdlcnJvciBxdWFuIHMnb2NvcnJlIHVuYSBmYWxsYWRhIGVuIGFwZWRhw6dhciIKKworIzogYnVpbHRpbi9hbS5jOjIyODYKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICJzZWd1ZWl4IGFwbGljYW50IHBlZGHDp29zIGRlc3Byw6lzIGRlIHJlc29sZHJlIHVuIGNvbmZsaWN0ZSIKKworIzogYnVpbHRpbi9hbS5jOjIyODkKK21zZ2lkICJzeW5vbnltcyBmb3IgLS1jb250aW51ZSIKK21zZ3N0ciAic2luw7JuaW1zIGRlIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjkyCittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAic2FsdGEgZWwgcGVkYcOnIGFjdHVhbCIKKworIzogYnVpbHRpbi9hbS5jOjIyOTUKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICJyZXN0YXVyYSBsYSBicmFuY2Egb3JpZ2luYWwgaSBhdm9ydGEgbCdvcGVyYWNpw7MgZCdhcGVkYcOnYW1lbnQuIgorCisjOiBidWlsdGluL2FtLmM6MjI5OQorbXNnaWQgImxpZSBhYm91dCBjb21taXR0ZXIgZGF0ZSIKK21zZ3N0ciAibWVudGVpeCBzb2JyZSBsYSBkYXRhIGRlbCBjb21pdGVudCIKKworIzogYnVpbHRpbi9hbS5jOjIzMDEKK21zZ2lkICJ1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlIgorbXNnc3RyICJ1c2EgZWwgbWFyYyBkZSB0ZW1wcyBhY3R1YWwgcGVyIGxhIGRhdGEgZCdhdXRvciIKKworIzogYnVpbHRpbi9hbS5jOjIzMDMgYnVpbHRpbi9jb21taXQuYzoxNTkwIGJ1aWx0aW4vbWVyZ2UuYzoyMjUKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1NSBidWlsdGluL3JldmVydC5jOjkyIGJ1aWx0aW4vdGFnLmM6NjA2Cittc2dpZCAia2V5LWlkIgorbXNnc3RyICJJRCBkZSBjbGF1IgorCisjOiBidWlsdGluL2FtLmM6MjMwNAorbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgImZpcm1hIGxlcyBjb21pc3Npb25zIGFtYiBHUEciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzA3Cittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIijDunMgaW50ZXJuIHBlciBhbCBnaXQtcmViYXNlKSIKKworIzogYnVpbHRpbi9hbS5jOjIzMjIKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyJGYSBtb2x0IHF1ZSBsJ29wY2nDsyAtYi8tLWJpbmFyeSBubyBoYSBmZXQgcmVzLCBpXG4iCisicydlbGltaW5hcsOgLiBTaSB1cyBwbGF1LCBubyBsJ3VzZXUgbcOpcy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI5Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJzJ2hhIGZhbGxhdCBlbiBsbGVnaXIgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJXMgc3RpbGwgZXhpc3RzIGJ1dCBtYm94IGdpdmVuLiIKK21zZ3N0ciAiIgorInVuIGRpcmVjdG9yaSBkZSByZWJhc2FtZW50IGFudGVyaW9yICVzIGVuY2FyYSBleGlzdGVpeCBwZXLDsiBzJ2hhIGRvbmF0IHVuYSAiCisiYsO6c3RpYS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisiRGlyZWN0b3JpICVzIGV4dHJhdmlhdCB0cm9iYXQuXG4iCisiVXNldSBcImdpdCBhbSAtLWFib3J0XCIgcGVyIGEgZWxpbWluYXItbG8uIgorCisjOiBidWlsdGluL2FtLmM6MjM3NAorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIk9wZXJhY2nDsyBkZSByZXNvbHVjacOzIG5vIGVuIGN1cnM7IG5vIHJlcHJlbmVtLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjU5Cittc2dpZCAiZ2l0IGFwcGx5IFs8b3B0aW9ucz5dIFs8cGF0Y2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGFwcGx5IFs8b3BjaW9ucz5dIFs8cGVkYcOnPi4uLl0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgIm9wY2nDsyBkJ2VzcGFpIGVuIGJsYW5jICclcycgbm8gcmVjb25lZ3VkYSIKKworIzogYnVpbHRpbi9hcHBseS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIm9wY2nDsyBkJ2lnbm9yYWwgZCdlc3BhaSBlbiBibGFuYyAnJXMnIG5vIHJlY29uZWd1ZGEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiTm8gZXMgcG90IHByZXBhcmFyIGwnZXhwcmVzc2nDsyByZWd1bGFyIGRlIG1hcmNhIGRlIHRlbXBzICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAicmVnZXhlYyBoYSByZXRvcm5hdCAlZCBwZXIgbCdlbnRyYWRhOiAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHRyb2JhciBlbCBub20gZGUgZml0eGVyIGVuIGVsIHBlZGHDpyBhIGxhIGzDrW5pYSAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGRvbGVudCAtIC9kZXYvbnVsbCBlc3BlcmF0LCAlcyByZWJ1dCBlbiBsYSBsw61uaWEgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGRvbGVudCAtIG5vbSBkZSBmaXR4ZXIgbm91IGluY29uc2lzdGVudCBlbiBsYSBsw61uaWEgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIGRvbGVudCAtIG5vbSBkZSBmaXR4ZXIgYW50aWMgaW5jb25zaXN0ZW50IGVuIGxhIGzDrW5pYSAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk1NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGdpdC1kaWZmIGRvbGVudCAtIC9kZXYvbnVsbCBlc3BlcmF0IGVuIGxhIGzDrW5pYSAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvbXB0ZTogbMOtbmlhIGluZXNwZXJhZGE6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDc2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImZyYWdtZW50IGRlIHBlZGHDpyBzZW5zZSBjYXDDp2FsZXJhIGEgbGEgbMOtbmlhICVkOiAlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQ5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisiYSBsYSBjYXDDp2FsZXJhIGRlIGdpdCBkaWZmIGxpIG1hbmNhIGluZm9ybWFjacOzIGRlIG5vbSBkZSBmaXR4ZXIgZW4gZWxpbWluYXIgIgorIiVkIGNvbXBvbmVudCBkZSBub20gZGUgY2Ftw60gaW5pY2lhbCAobMOtbmlhICVkKSIKK21zZ3N0clsxXSAiIgorImEgbGEgY2Fww6dhbGVyYSBkZSBnaXQgZGlmZiBsaSBtYW5jYSBpbmZvcm1hY2nDsyBkZSBub20gZGUgZml0eGVyIGVuIGVsaW1pbmFyICIKKyIlZCBjb21wb25lbnRzIGRlIG5vbSBkZSBjYW3DrSBpbmljaWFsIChsw61uaWEgJWQpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY1OQorbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJlbCBmaXR4ZXIgbm91IGRlcMOobiBkZWxzIGNvbnRpbmd1dHMgYW50aWNzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY2MQorbXNnaWQgImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgImVsIGZpdHhlciBzdXByaW1pdCBlbmNhcmEgdMOpIGNvbnRpbmd1dHMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiZWwgcGVkYcOnIMOpcyBtYWxtw6hzIGEgbGEgbMOtbmlhICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyMworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAiZWwgZml0eGVyIG5vdSAlcyBkZXDDqG4gZGVscyBjb250aW5ndXRzIGFudGljcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiZWwgZml0eGVyIHN1cHJpbWl0ICVzIGVuY2FyYSB0w6kgY29udGluZ3V0cyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiogYXbDrXM6IGVsIGZpdHhlciAlcyBxdWVkYSBidWl0IHBlcsOyIG5vIHNlIHN1cHJpbWVpeCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAicGVkYcOnIGJpbmFyaSBtYWxtw6hzIGEgbGEgbMOtbmlhICVkOiAlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTkwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInBlZGHDpyBiaW5hcmkgbm8gcmVjb25lZ3V0IGEgbGEgbMOtbmlhICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICJwZWRhw6cgYW1iIG5vbcOpcyBlc2NvbWJyYXJpZXMgYSBsYSBsw61uaWEgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGwnZW5sbGHDpyBzaW1iw7JsaWMgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgb2JyaXIgbyBsbGVnaXIgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAiaW5pY2kgZGUgbMOtbmlhIG5vIHbDoGxpZDogJyVjJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICJFbCB0cm9zICMlZCBoYSB0aW5ndXQgw6h4aXQgYSAlZCAoZGVzcGxhw6dhbWVudCAlZCBsw61uaWEpLiIKK21zZ3N0clsxXSAiRWwgdHJvcyAjJWQgaGEgdGluZ3V0IMOoeGl0IGEgJWQgKGRlc3BsYcOnYW1lbnQgJWQgbMOtbmllcykuIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICJFbCBjb250ZXh0IHMnaGEgcmVkdcOvdCBhICglbGQvJWxkKSBwZXIgYSBhcGxpY2FyIGVsIGZyYWdtZW50IGEgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJ0b3QgY2VyY2FudDpcbiIKKyIlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICJtYW5xdWVuIGxlcyBkYWRlcyBkZSBwZWRhw6cgYmluYXJpIGRlICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJlbCBwZWRhw6cgYmluYXJpIG5vIHMnYXBsaWNhIGEgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyJlbCBwZWRhw6cgYmluYXJpIGEgJyVzJyBjcmVhIHVuIHJlc3VsdGF0IGluY29ycmVjdGUgKGVzcGVyYW50ICVzLCAlcyByZWJ1dCkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICJlbCBwZWRhw6cgaGEgZmFsbGF0OiAlczolbGQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAibm8gZXMgcG90IGFnYWZhciAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyMzUgYnVpbHRpbi9hcHBseS5jOjMyNDYgYnVpbHRpbi9hcHBseS5jOjMyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBvZiAlcyBmYWlsZWQiCittc2dzdHIgImxhIGxlY3R1cmEgZGUgJXMgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI0MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJsbGVnaW50IGRlICclcycgbcOpcyBlbmxsw6AgZCd1biBlbmxsYcOnIHNpbWLDsmxpYyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNzEgYnVpbHRpbi9hcHBseS5jOjM0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgImVsIGNhbcOtICVzIHMnaGEgY2FudmlhdCBkZSBub20gLyBzJ2hhIHN1cHJpbWl0IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM1MiBidWlsdGluL2FwcGx5LmM6MzUwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBubyBleGlzdGVpeCBlbiBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMzNTYgYnVpbHRpbi9hcHBseS5jOjM0OTkgYnVpbHRpbi9hcHBseS5jOjM1MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIgorbXNnc3RyICIlczogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzYxIGJ1aWx0aW4vYXBwbHkuYzozNTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXM6IG5vIGNvaW5jaWRlaXggYW1iIGwnw61uZGV4IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzQ2MworbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgImVsIHBlZGHDpyBkJ2VsaW1pbmFjacOzIGRlaXhhIGVscyBjb250aW5ndXRzIGRlbHMgZml0eGVycyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiB0aXB1cyBlcnJvbmkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgw6lzIGRlbCB0aXB1cyAlbywgcydlc3BlcmF2YSAlbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2OTMgYnVpbHRpbi9hcHBseS5jOjM2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgImNhbcOtIG5vIHbDoGxpZDogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IGphIGV4aXN0ZWl4IGVuIGwnw61uZGV4IgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc1MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVzOiBqYSBleGlzdGVpeCBlbiBlbCBkaXJlY3RvcmkgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICJlbCBtb2RlIG5vdSAoJW8pIGRlICVzIG5vIGNvaW5jaWRlaXggYW1iIGVsIG1vZGUgYW50aWMgKCVvKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICJlbCBtb2RlIG5vdSAoJW8pIGRlICVzIG5vIGNvaW5jaWRlaXggYW1iIGVsIG1vZGUgYW50aWMgKCVvKSBkZSAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImVsIGZpdHhlciBhZmVjdGF0ICclcycgw6lzIG3DqXMgZW5sbMOgIGQndW4gZW5sbGHDpyBzaW1iw7JsaWMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXM6IGVsIHBlZGHDpyBubyBzJ2FwbGljYSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIkNvbXByb3ZhbnQgZWwgcGVkYcOnICVzLi4uIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzkwOSBidWlsdGluL2NoZWNrb3V0LmM6MjMyIGJ1aWx0aW4vcmVzZXQuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAibWFrZV9jYWNoZV9lbnRyeSBoYSBmYWxsYXQgcGVyIGFsIGNhbcOtICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlbGltaW5hciAlcyBkZSBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJwZWRhw6cgbWFsbcOocyBwZXIgYWwgc3VibcOyZHVsICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBmZXIgc3RhdCBhbCBmaXR4ZXIgbm92YW1lbnQgY3JlYXQgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgIiIKKyJubyBzJ2hhIHBvZ3V0IGNyZWFyIHVuIG1hZ2F0emVtIGRlIHJlY29semFtZW50IHBlciBhbCBmaXR4ZXIgbm92YW1lbnQgY3JlYXQgIgorIiVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA5MyBidWlsdGluL2FwcGx5LmM6NDIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhZmVnaXIgdW5hIGVudHJhZGEgZGUgY2F1IHBlciBhICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAidGFuY2FudCBlbCBmaXR4ZXIgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIGZpdHhlciAnJXMnIG1vZGUgJW8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIkVsIHBlZGHDpyAlcyBzJ2hhIGFwbGljYXQgbmV0YW1lbnQuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDI3MAorbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICJlcnJvciBpbnRlcm4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiQXBsaWNhbnQgZWwgcGVkYcOnICUlcyBhbWIgJWQgcmVidWlnIgorbXNnc3RyWzFdICJBcGxpY2FudCBlbCBwZWRhw6cgJSVzIGFtYiAlZCByZWJ1aXRqb3MiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAidHJ1bmNhbnQgZWwgbm9tIGRlbCBmaXR4ZXIgLnJlaiBhICUuKnMucmVqIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICJFbCB0cm9zICMlZCBzJ2hhIGFwbGljYXQgbmV0YW1lbnQuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIlMnaGEgcmVidXRqYXQgZWwgdHJvcyAjJWQuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM5NworbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAiZW50cmFkYSBubyByZWNvbmVndWRhIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDQwOAorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgZWwgZml0eGVyIGQnw61uZGV4IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUyNgorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIm5vIGFwbGlxdWlzIGVscyBjYW52aXMgcXVlIGNvaW5jaWRlaXhpbiBhbWIgZWwgY2Ftw60gZG9uYXQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTI5Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAiYXBsaWNhIGVscyBjYW52aXMgcXVlIGNvaW5jaWRlaXhpbiBhbWIgZWwgY2Ftw60gZG9uYXQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTMyCittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgIiIKKyJlbGltaW5hIDxub21icmU+IGJhcnJlcyBvYmxpccO8ZXMgaW5pY2lhbHMgZGVscyBjYW1pbnMgZGUgZGlmZXLDqG5jaWEgIgorInRyYWRpY2lvbmFscyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MzUKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJpZ25vcmEgYWZlZ2ltZW50cyBmZXRzIHBlbCBwZWRhw6ciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTM3Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICIiCisiZW4gbGxvYyBkJ2FwbGljYXIgZWwgcGVkYcOnLCBlbWV0IGxlcyBlc3RhZMOtc3RpcXVlcyBkZSBkaWZlcsOobmNpYSBkZSBsJ2VudHJhZGEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQxCittc2dpZCAic2hvdyBudW1iZXIgb2YgYWRkZWQgYW5kIGRlbGV0ZWQgbGluZXMgaW4gZGVjaW1hbCBub3RhdGlvbiIKK21zZ3N0ciAibW9zdHJhIGVsIG5vbWJyZSBkZSBsw61uaWVzIGFmZWdpZGVzIGkgc3VwcmltaWRlcyBlbiBub3RhY2nDsyBkZWNpbWFsIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0MworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgImVuIGxsb2MgZCdhcGxpY2FyIGVsIHBlZGHDpywgZW1ldCB1biByZXN1bSBkZSBsJ2VudHJhZGEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQ1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAiZW4gbGxvYyBkJ2FwbGljYXIgZWwgcGVkYcOnLCB2ZWdlcyBzaSBlbCBwZWRhw6cgw6lzIGFwbGljYWJsZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDcKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgImFzc2VndXJhIHF1ZSBlbCBwZWRhw6cgc2lndWkgYXBsaWNhYmxlIGEgbCfDrW5kZXggYWN0dWFsIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0OQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJhcGxpY2EgdW4gcGVkYcOnIHNlbnNlIHRvY2FyIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NTEKK21zZ2lkICJhY2NlcHQgYSBwYXRjaCB0aGF0IHRvdWNoZXMgb3V0c2lkZSB0aGUgd29ya2luZyBhcmVhIgorbXNnc3RyICJhY2NlcHRhIHVuIHBlZGHDpyBxdWUgdG9xdWkgZm9yYSBkZSBsJ8OgcmVhIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTUzCittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgImFwbGljYSBlbCBwZWRhw6cgdGFtYsOpICh1c2V1IGFtYiAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1NQorbXNnaWQgImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgImludGVudGEgdW5hIGZ1c2nDsyBkZSB0cmVzIHZpZXMgc2kgZWwgcGVkYcOnIG5vIHMnYXBsaWNhIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1NworbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICJjb25zdHJ1ZWl4IHVuIMOtbmRleCB0ZW1wb3JhbCBiYXNhdCBlbiBsYSBpbmZvcm1hY2nDsyBkJ8OtbmRleCBpbmNydXN0YWRhIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1OSBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTk4IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTIKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiZWxzIGNhbWlucyBzZSBzZXBhcmVuIGFtYiBlbCBjYXLDoGN0ZXIgTlVMIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU2MgorbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAiYXNzZWd1cmEndCBxdWUgYWxtZW55cyA8bj4gbMOtbmllcyBkZSBjb250ZXh0IGNvaW5jaWRlaXhpbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NjQKK21zZ2lkICJkZXRlY3QgbmV3IG9yIG1vZGlmaWVkIGxpbmVzIHRoYXQgaGF2ZSB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0ciAiIgorImRldGVjdGEgbGVzIGzDrW5pZXMgbm92ZXMgbyBtb2RpZmljYWRlcyBxdWUgdGluZ3VpbiBlcnJvcnMgZCdlc3BhaSBlbiBibGFuYyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NjcgYnVpbHRpbi9hcHBseS5jOjQ1NzAKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICJpZ25vcmEgZWxzIGNhbnZpcyBkJ2VzcGFpIGVuIGJsYW5jIGVuIGNlcmNhciBjb250ZXh0IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3MworbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICJhcGxpY2EgZWwgcGVkYcOnIGFsIHJldsOpcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzUKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAibm8gZXNwZXJpcyBhbG1lbnlzIHVuYSBsw61uaWEgZGUgY29udGV4dCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzcKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAiZGVpeGEgZWxzIHRyb3Nzb3MgcmVidXRqYXRzIGVuIGZpdHhlcnMgKi5yZWcgY29yZXNzcG9uZGVudHMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTc5Cittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgInBlcm1ldCB0cm9zc29zIGVuY2F2YWxjYW50cyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODIKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAidG9sZXJhIHVuYSBsw61uaWEgbm92YSBpbmNvcnJlY3RhbWVudCBkZXRlY3RhZGEgYWwgZmluYWwgZGVsIGZpdHhlciIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODUKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgIm5vIGNvbmZpw69zIGVuIGVscyByZWNvbXB0ZXMgZGUgbMOtbmlhIGVuIGxlcyBjYXDDp2FsZXJlcyBkZWxzIHRyb3Nzb3MiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTg4Cittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAiYW50ZXBvc2EgPGFycmVsPiBhIHRvdHMgZWxzIG5vbXMgZGUgZml0eGVyIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDYxMAorbXNnaWQgIi0tM3dheSBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS0zd2F5IGZvcmEgZCd1biBkaXDDsnNpdCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MTgKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IGZvcmEgZCd1biBkaXDDsnNpdCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MjEKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQgZm9yYSBkJ3VuIGRpcMOyc2l0IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW4ndCBvcGVuIHBhdGNoICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBvYnJpciBlbCBwZWRhw6cgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAiJWQgZXJyb3IgZCdlc3BhaSBlbiBibGFuYyBvbcOocyIKK21zZ3N0clsxXSAiJWQgZXJyb3JzIGQnZXNwYWkgZW4gYmxhbmMgb21lc29zIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDY2MCBidWlsdGluL2FwcGx5LmM6NDY3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCBsw61uaWEgYWZlZ2VpeCBlcnJvcnMgZCdlc3BhaSBlbiBibGFuYy4iCittc2dzdHJbMV0gIiVkIGzDrW5pZXMgYWZlZ2VpeGVuIGVycm9ycyBkJ2VzcGFpIGVuIGJsYW5jLiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGNyZWFyIGVsIGZpdHhlciBkJ2FyeGl1ICclcyciCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCByZWRpcmlnaXIgbGEgc29ydGlkYSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogUmVtb3Qgc2Vuc2UgVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo1OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogQUNLL05BSyBlc3BlcmF0LCBFT0YgcmVidXQiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogJXMgTkFDSyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAiZXJyb3IgcmVtb3Q6ICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGVycm9yIGRlIHByb3RvY29sIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogcmVudGFkYSBlc3BlcmFkYSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCittc2dzdHIgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE3Cittc2dpZCAicGVyZm9ybSAnZ2l0IGJpc2VjdCBuZXh0JyIKK21zZ3N0ciAicmVhbGl0emEgJ2dpdCBiaXNlY3QgbmV4dCciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxOQorbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgImFjdHVhbGl0emEgQklTRUNUX0hFQUQgZW4gbGxvYyBkJ2FnYWZhciBsYSBjb21pc3Npw7MgYWN0dWFsIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzIKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgImdpdCBibGFtZSBbPG9wY2lvbnM+XSBbPG9wY2lvbnMtZGUtcmV2aXNpw7M+XSBbPHJldmlzacOzPl0gWy0tXSBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNworbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICJlcyBkb2N1bWVudGVuIGxlcyA8b3BjaW9ucy1kZS1yZXZpc2nDsz4gZW4gZ2l0LXJldi1saXN0KDEpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIk1vc3RyYSBsZXMgZW50cmFkZXMgZGUgY3VscGEgbWVudHJlIGxlcyB0cm9iZW0sIGluY3JlbWVudGFsbWVudCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDEKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiTW9zdHJhIHVuIFNIQS0xIGVuIGJsYW5jIHBlciBsZXMgY29taXNzaW9ucyBkZSBmcm9udGVyYSAoUGVyIGRlZmVjdGU6ICIKKyJkZXNhY3RpdmF0KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDIKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJObyB0cmFjdGlzIGxlcyBjb21pc3Npb25zIGQnYXJyZWwgY29tIGEgbMOtbWl0cyAoUGVyIGRlZmVjdGU6IGRlc2FjdGl2YXQpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIk1vc3RyYSBsZXMgZXN0YWTDrXN0aXF1ZXMgZGUgcHJldSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwNAorbXNnaWQgIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIgorbXNnc3RyICJNb3N0cmEgbGEgcHVudHVhY2nDsyBkZSBzb3J0aWRhIGRlIGxlcyBlbnRyYWRlcyBkZSBjdWxwYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDUKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAiTW9zdHJhIGVsIG5vbSBkZSBmaXR4ZXIgb3JpZ2luYWwgKFBlciBkZWZlY3RlOiBhdXRvbcOgdGljKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDYKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYSBlbCBuw7ptZXJvIGRlIGzDrW5pYSBvcmlnaW5hbCAoUGVyIGRlZmVjdGU6IGRlc2FjdGl2YXQpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwNworbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIlByZXNlbnRhIGVuIHVuIGZvcm1hdCBkaXNzZW55YXQgcGVyIGNvbnN1bXBjacOzIHBlciBtw6BxdWluYSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDgKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIk1vc3RyYSBlbCBmb3JtYXQgZGUgcG9yY2VsbGFuYSBhbWIgaW5mb3JtYWNpw7MgZGUgY29taXNzacOzIHBlciBsw61uaWEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA5Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIlVzYSBlbCBtYXRlaXggbW9kZSBkZSBzb3J0aWRhIHF1ZSBnaXQtYW5ub3RhdGUgKFBlciBkZWZlY3RlOiBkZXNhY3RpdmF0KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTAKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vc3RyYSBsYSBtYXJjYSBkZSB0ZW1wcyBjcnVhIChQZXIgZGVmZWN0ZTogZGVzYWN0aXZhdCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTExCittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJNb3N0cmEgbCdTSEExIGRlIGNvbWlzc2nDsyBsbGFyZyAoUGVyIGRlZmVjdGU6IGRlc2FjdGl2YXQpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMgorbXNnaWQgIlN1cHByZXNzIGF1dGhvciBuYW1lIGFuZCB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk9tZXQgZWwgbm9tIGQnYXV0b3IgaSBsYSBtYXJjYSBkZSB0ZW1wcyAoUGVyIGRlZmVjdGU6IGRlc2FjdGl2YXQpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMworbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIk1vc3RyYSBsJ2FkcmXDp2EgZGUgY29ycmV1IGVsZWN0csOybmljIGRlIGwnYXV0b3IgZW4gbGxvYyBkZWwgbm9tIChQZXIgIgorImRlZmVjdGU6IGRlc2FjdGl2YXQpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNAorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICJJZ25vcmEgbGVzIGRpZmVyw6huY2llcyBkJ2VzcGFpIGVuIGJsYW5jIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNQorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiR2FzdGEgY2ljbGVzIGV4dHJlcyBwZXIgYSB0cm9iYXIgdW5hIGNvaW5jaWTDqG5jaWEgbWlsbG9yIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNgorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAiVXNhIGxlcyByZXZpc2lvbnMgZGUgPGZpdHhlcj4gZW4gbGxvYyBkJ2ludm9jYXIgZ2l0LXJldi1saXN0IgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNworbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIlVzYSBlbHMgY29udGluZ3V0cyBkZSA8Zml0eGVyPiBjb20gYSBsYSBpbWF0Z2UgZmluYWwiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE4IGJ1aWx0aW4vYmxhbWUuYzoyNTE5Cittc2dpZCAic2NvcmUiCittc2dzdHIgInB1bnR1YWNpw7MiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE4Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiVHJvYmEgY8OycGllcyBkZSBsw61uaWEgZGlucyBpIGEgdHJhdsOpcyBkZWxzIGZpdHhlcnMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE5Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiVHJvYmEgbW92aW1lbnRzIGRlIGzDrW5pYSBkaW5zIGkgYSB0cmF2w6lzIGRlbHMgZml0eGVycyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MjAKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MjAKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiUHJvY2Vzc2Egbm9tw6lzIGVsIHJhbmcgZGUgbMOtbmllcyBuLG0sIGNvbXB0YW50IGRlcyBkJzEiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlIG1heGltdW0KKyMuIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluICJnaXQgYmxhbWUiCisjLiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMSBtb250aHMgYWdvIiwgd2hpY2gKKyMuIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QgYW1vbmcgdmFyaW91cyBmb3JtcyBvZgorIy4gcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0IHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvcgorIy4gZmV3ZXIgZGlzcGxheSBjb2x1bW5zLgorIzogYnVpbHRpbi9ibGFtZS5jOjI2MDEKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICJmYSA0IGFueXMgaSAxMSBtZXNvcyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcGNpb25zPl0gWy1sXSBbLWZdIDxub20tZGUtYnJhbmNhPiBbPHB1bnQtaW5pY2lhbD5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3BjaW9ucz5dIFstcl0gKC1kIHwgLUQpIDxub20tZGUtYnJhbmNhPi4uLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPG9wY2lvbnM+XSAoLW0gfCAtTSkgWzxicmFuY2EtYW50aWdhPl0gPGJyYW5jYS1ub3ZhPiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisic3VwcmltaW50IGxhIGJyYW5jYSAnJXMnIHF1ZSBzJ2hhIGZ1c2lvbmF0IGFcbiIKKyIgICAgICAgICAnJXMnLCBwZXLDsiBlbmNhcmEgbm8gcydoYSBmdXNpb25hdFxuIgorIiAgICAgICAgIGEgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIm5vIHN1cHJpbWludCBsYSBicmFuY2EgJyVzJyBxdWUgZW5jYXJhIG5vIHMnaGFcbiIKKyIgICAgICAgICBmdXNpb25hdCBhICclcycsIGVuY2FyYSBxdWUgZXN0w6BcbiIKKyIgICAgICAgICBmdXNpb25hZGEgYSBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRyb2JhciBsJ29iamVjdGUgZGUgY29taXNzacOzIGRlICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jYSAnJXMnIG5vIGVzdMOgIHRvdGFsbWVudCBmdXNpb25hZGEuXG4iCisiU2kgZXN0ZXUgc2VndXIgcXVlIGxhIHZvbGV1IHN1cHJpbWlyLCBleGVjdXRldSAnZ2l0IGJyYW5jaCAtRCAlcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4NQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIkwnYWN0dWFsaXR6YWNpw7MgZGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTMKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgIm5vIGVzIHBvdCB1c2FyIC1hIGFtYiAtZCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTkKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgdHJvYmFyIGwnb2JqZWN0ZSBkZSBjb21pc3Npw7MgZGUgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgYnJhbmNoICclcycgd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgb24uIgorbXNnc3RyICJObyBlcyBwb3Qgc3VwcmltaXIgbGEgYnJhbmNhICclcycsIGVuIGxhIHF1YWwgc291IGFjdHVhbG1lbnQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAibm8gcydoYSB0cm9iYXQgbGEgYnJhbmNhIGFtYiBzZWd1aW1lbnQgcmVtb3QgJyVzJy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIm5vIHMnaGEgdHJvYmF0IGxhIGJyYW5jYSAnJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJFcnJvciBlbiBzdXByaW1pciBsYSBicmFuY2EgYW1iIHNlZ3VpbWVudCByZW1vdCAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRXJyb3IgZW4gc3VwcmltaXIgbGEgYnJhbmNhICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiUydoYSBzdXByaW1pdCBsYSBicmFuY2EgYW1iIHNlZ3VpbWVudCByZW1vdCAlcyAoZXJhICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIlMnaGEgc3VwcmltaXQgbGEgYnJhbmNhICVzIChlcmEgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBwb2ludCBhdCBhIGNvbW1pdCIKK21zZ3N0ciAibGEgYnJhbmNhICclcycgbm8gYXNzZW55YWxhIGNhcCBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogZ29uZV0iCittc2dzdHIgIlslczogbm8gaGkgw6lzXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzXSIKK21zZ3N0ciAiWyVzXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBiZWhpbmQgJWRdIgorbXNnc3RyICJbJXM6IGRhcnJlcmUgcGVyICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2JlaGluZCAlZF0iCittc2dzdHIgIltkYXJyZXJlIGRlICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBhaGVhZCAlZF0iCittc2dzdHIgIlslczogZGF2YW50IHBlciAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlthaGVhZCAlZF0iCittc2dzdHIgIltkYXZhbnQgZGUgJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGFoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICJbJXM6IGRhdmFudCBwZXIgJWQsIGRhcnJlcmUgcGVyICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICJbZGF2YW50ICVkLCBkYXJyZXJlICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODkKK21zZ2lkICIgKioqKiBpbnZhbGlkIHJlZiAqKioqIgorbXNnc3RyICIgKioqKiByZWZlcsOobmNpYSBubyB2w6BsaWRhICoqKioiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIHJlYmFzaW5nICVzKSIKK21zZ3N0ciAiKGNhcCBicmFuY2EsIHJlYmFzYW50ICVzKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKG5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMpIgorbXNnc3RyICIoY2FwIGJyYW5jYSwgYmlzZWNjacOzIGNvbWVuw6dhZGEgZW4gJXMpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCittc2dzdHIgIihIRUFEIHNlcGFyYXQgYSAlcykiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIihIRUFEIGRldGFjaGVkIGZyb20gJXMpIgorbXNnc3RyICIoSEVBRCBzZXBhcmF0IGRlICVzKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTYKK21zZ2lkICIobm8gYnJhbmNoKSIKK21zZ3N0ciAiKGNhcCBicmFuY2EpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAibCdvYmplY3RlICclcycgbm8gYXNzZW55YWxhIGNhcCBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjkxCittc2dpZCAic29tZSByZWZzIGNvdWxkIG5vdCBiZSByZWFkIgorbXNnc3RyICJubyBzJ2hhbiBwb2d1dCBsbGVnaXIgYWxndW5lcyByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIm5vIGVzIHBvdCBjYW52aWFyIGVsIG5vbSBkZSBsYSBicmFuY2EgYWN0dWFsIG1lbnRyZSBubyBzJ8OpcyBhIGNhcC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIk5vbSBkZSBicmFuY2Egbm8gdsOgbGlkOiAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyOQorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICJFbCBjYW52aSBkZSBub20gZGUgYnJhbmNhIGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIlMnaGEgY2FudmlhdCBlbCBub20gZGUgbGEgYnJhbmNhIG1hbGFub21lbmFkYSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICJTJ2hhIGNhbnZpYXQgZWwgbm9tIGRlIGxhIGJyYW5jYSBhICVzLCBwZXLDsiBIRUFEIG5vIGVzdMOgIGFjdHVhbGl0emF0ISIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NDQKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKyJMYSBicmFuY2EgZXN0w6AgY2FudmlhZGEgZGUgbm9tLCBwZXLDsiBsJ2FjdHVhbGl0emFjacOzIGRlbCBmaXR4ZXIgZGUgIgorImNvbmZpZ3VyYWNpw7MgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIm5vbSBkJ29iamVjdGUgJXMgbWFsIGZvcm1hdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZW1wbGF0ZTogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgbGEgcGxhbnRpbGxhIGRlIGRlc2NyaXBjacOzIGRlIGJyYW5jYTogJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODExCittc2dpZCAiR2VuZXJpYyBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGdlbsOocmlxdWVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxMworbXNnaWQgInNob3cgaGFzaCBhbmQgc3ViamVjdCwgZ2l2ZSB0d2ljZSBmb3IgdXBzdHJlYW0gYnJhbmNoIgorbXNnc3RyICJtb3N0cmEgZWwgaGFzaCBpIGwnYXNzdW1wdGUsIGRvbmV1IGR1ZXMgdmVnYWRlcyBwZXIgbGEgYnJhbmNhIGZvbnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODE0Cittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAib21ldCBlbHMgbWlzc2F0Z2VzIGluZm9ybWF0aXVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNQorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJjb25maWd1cmEgZWwgbW9kZSBkZSBzZWd1aW1lbnQgKHZlZ2V1IGdpdC1wdWxsKDEpKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTcKK21zZ2lkICJjaGFuZ2UgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiY2FudmlhIGxhIGluZm9ybWFjacOzIGRlIGZvbnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJ1c2Egc29ydGlkYSBjb2xvcmFkYSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjIKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJhY3R1YSBlbiBicmFucXVlcyBhbWIgc2VndWltZW50IHJlbW90IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNSBidWlsdGluL2JyYW5jaC5jOjgzMSBidWlsdGluL2JyYW5jaC5jOjg1MgorIzogYnVpbHRpbi9icmFuY2guYzo4NTggYnVpbHRpbi9jb21taXQuYzoxNTgwIGJ1aWx0aW4vY29tbWl0LmM6MTU4MQorIzogYnVpbHRpbi9jb21taXQuYzoxNTgyIGJ1aWx0aW4vY29tbWl0LmM6MTU4MyBidWlsdGluL3RhZy5jOjYxOAorIzogYnVpbHRpbi90YWcuYzo2MjQKIG1zZ2lkICJjb21taXQiCiBtc2dzdHIgImNvbWlzc2nDsyIKIAotIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3Ci0jOiBnaXRrOjY5MTIKLW1zZ2lkICJjb250YWluaW5nOiIKLW1zZ3N0ciAicXVlIGNvbnRpbmd1aToiCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNiBidWlsdGluL2JyYW5jaC5jOjgzMgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIGJyYW5xdWVzIHF1ZSBjb250aW5ndWluIGxhIGNvbWlzc2nDsyIKIAotIzogZ2l0azoyMzAyIGdpdGs6MzUyNiBnaXRrOjM1MzEgZ2l0azo0NzYzCi1tc2dpZCAidG91Y2hpbmcgcGF0aHM6IgotbXNnc3RyICJxdWUgdG9xdWkgZWxzIGNhbWluczoiCisjOiBidWlsdGluL2JyYW5jaC5jOjgzOAorbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIkFjY2lvbnMgZGUgZ2l0LWJyYW5jaCBlc3BlY8OtZmlxdWVzOiIKIAotIzogZ2l0azoyMzAzIGdpdGs6NDc3NwotbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgotbXNnc3RyICJxdWUgYWZlZ2VpeGkvZWxpbWluaSBsYSBjYWRlbmE6IgorIzogYnVpbHRpbi9icmFuY2guYzo4MzkKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAibGxpc3RhIGxlcyBicmFucXVlcyBhbWIgc2VndWltZW50IHJlbW90IGkgbGVzIGxvY2FscyIKIAotIzogZ2l0azoyMzA0IGdpdGs6NDc3OQotbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKLW1zZ3N0ciAicXVlIHRpbmd1aSBsw61uaWVzIGNhbnZpYWRlcyBjb2luY2lkZW50cyBhbWI6IgorIzogYnVpbHRpbi9icmFuY2guYzo4NDEKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAic3VwcmltZWl4IGxhIGJyYW5jYSBzaSBlc3TDoCBjb21wbGV0YW1lbnQgZnVzaW9uYWRhIgogCi0jOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDc2NgotbXNnaWQgIkV4YWN0IgotbXNnc3RyICJFeGFjdGUiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MgorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgInN1cHJpbWVpeCBsYSBicmFuY2EgKGVuY2FyYSBxdWUgbm8gZXN0aWd1aSBmdXNpb25hZGEpIgogCi0jOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMwotbXNnaWQgIklnbkNhc2UiCi1tc2dzdHIgIklnbm9yYSBtYWrDunNjdWxhIGkgbWluw7pzY3VsYSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIm1vdS9jYW52aWEgZGUgbm9tIHVuYSBicmFuY2EgaSBlbCBzZXUgcmVnaXN0cmUgZGUgcmVmZXLDqG5jaWEiCiAKLSM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQotbXNnaWQgIlJlZ2V4cCIKLW1zZ3N0ciAiUmVnZXhwIgorIzogYnVpbHRpbi9icmFuY2guYzo4NDQKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJtb3UvY2FudmlhIGRlIG5vbSB1bmEgYnJhbmNhLCBlbmNhcmEgcXVlIGVsIGRlc3TDrSBleGlzdGVpeGkiCiAKLSM6IGdpdGs6MjMxNyBnaXRrOjIzMTggZ2l0azo0ODc0IGdpdGs6NDkwNCBnaXRrOjQ5MTEgZ2l0azo2ODQ4IGdpdGs6NjkxNgotbXNnaWQgIkFsbCBmaWVsZHMiCi1tc2dzdHIgIlRvdHMgZWxzIGNhbXBzIgorIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAibGxpc3RhIGVscyBub21zIGRlIGJyYW5jYSIKIAotIzogZ2l0azoyMzE4IGdpdGs6NDg3MSBnaXRrOjQ5MDQgZ2l0azo2Nzg2Ci1tc2dpZCAiSGVhZGxpbmUiCi1tc2dzdHIgIlRpdHVsYXIiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NgorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJjcmVhIGVsIHJlZ2lzdHJlIGRlIHJlZmVyw6huY2lhIGRlIGxhIGJyYW5jYSIKIAotIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQotbXNnaWQgIkNvbW1lbnRzIgotbXNnc3RyICJDb21lbnRhcmlzIgorIzogYnVpbHRpbi9icmFuY2guYzo4NDgKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAiZWRpdGEgbGEgZGVzY3JpcGNpw7MgZGUgbGEgYnJhbmNhIgogCi0jOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6NDg3NiBnaXRrOjQ5MTEgZ2l0azo2Nzg2IGdpdGs6NzMyNCBnaXRrOjg4MzAKLSM6IGdpdGs6ODg0NQotbXNnaWQgIkF1dGhvciIKLW1zZ3N0ciAiQXV0b3IiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0OQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgImZvcsOnYSBjcmVhY2nDsywgbW92aW1lbnQvY2FudmkgZGUgbm9tLCBzdXByZXNzacOzIgogCi0jOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKLW1zZ2lkICJDb21taXR0ZXIiCi1tc2dzdHIgIkNvbWl0ZW50IgorIzogYnVpbHRpbi9icmFuY2guYzo4NTIKK21zZ2lkICJwcmludCBvbmx5IG5vdCBtZXJnZWQgYnJhbmNoZXMiCittc2dzdHIgImltcHJpbWVpeCBub23DqXMgbGVzIGJyYW5xdWVzIHNlbnNlIGZ1c2lvbmFyIgogCi0jOiBnaXRrOjIzNTAKLW1zZ2lkICJTZWFyY2giCi1tc2dzdHIgIkNlcmNhIgorIzogYnVpbHRpbi9icmFuY2guYzo4NTgKK21zZ2lkICJwcmludCBvbmx5IG1lcmdlZCBicmFuY2hlcyIKK21zZ3N0ciAiaW1wcmltZWl4IG5vbcOpcyBsZXMgYnJhbnF1ZXMgZnVzaW9uYWRlcyIKIAotIzogZ2l0azoyMzU4Ci1tc2dpZCAiRGlmZiIKLW1zZ3N0ciAiRGlmZXLDqG5jaWEiCisjOiBidWlsdGluL2JyYW5jaC5jOjg2MgorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAibGxpc3RhIGxlcyBicmFucXVlcyBlbiBjb2x1bW5lcyIKIAotIzogZ2l0azoyMzYwCi1tc2dpZCAiT2xkIHZlcnNpb24iCi1tc2dzdHIgIlZlcnNpw7MgYW50aWdhIgorIzogYnVpbHRpbi9icmFuY2guYzo4NzUKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiUydoYSBmYWxsYXQgZW4gcmVzb2xkcmUgSEVBRCBjb20gYSByZWZlcsOobmNpYSB2w6BsaWRhLiIKIAotIzogZ2l0azoyMzYyCi1tc2dpZCAiTmV3IHZlcnNpb24iCi1tc2dzdHIgIlZlcnNpw7Mgbm92YSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODc5IGJ1aWx0aW4vY2xvbmUuYzo2OTAKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiSEVBRCBubyB0cm9iYXQgc290YSByZWZzL2hlYWRzISIKIAotIzogZ2l0azoyMzY0Ci1tc2dpZCAiTGluZXMgb2YgY29udGV4dCIKLW1zZ3N0ciAiTMOtbmllcyBkZSBjb250ZXh0IgorIzogYnVpbHRpbi9icmFuY2guYzo5MDEKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIGkgLS12ZXJib3NlIHPDs24gaW5jb21wYXRpYmxlcyIKIAotIzogZ2l0azoyMzc0Ci1tc2dpZCAiSWdub3JlIHNwYWNlIGNoYW5nZSIKLW1zZ3N0ciAiSWdub3JhIGNhbnZpcyBkJ2VzcGFpIgorIzogYnVpbHRpbi9icmFuY2guYzo5MTIgYnVpbHRpbi9icmFuY2guYzo5NTEKK21zZ2lkICJicmFuY2ggbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAiY2FsIGVsIG5vbSBkZSBicmFuY2EiCiAKLSM6IGdpdGs6MjM3OCBnaXRrOjIzODAgZ2l0azo3OTU5IGdpdGs6ODIwNgotbXNnaWQgIkxpbmUgZGlmZiIKLW1zZ3N0ciAiRGlmZXLDqG5jaWEgZGUgbMOtbmllcyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTI3Cittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiTm8gZXMgcG90IGRvbmFyIGRlc2NyaXBjacOzIGEgdW4gSEVBRCBzZXBhcmF0IgogCi0jOiBnaXRrOjI0NDUKLW1zZ2lkICJQYXRjaCIKLW1zZ3N0ciAiUGVkYcOnIgorIzogYnVpbHRpbi9icmFuY2guYzo5MzIKK21zZ2lkICJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIKK21zZ3N0ciAibm8gZXMgcG90IGVkaXRhciBsYSBkZXNjcmlwY2nDsyBkZSBtw6lzIGQndW5hIGJyYW5jYSIKIAotIzogZ2l0azoyNDQ3Ci1tc2dpZCAiVHJlZSIKLW1zZ3N0ciAiQXJicmUiCisjOiBidWlsdGluL2JyYW5jaC5jOjkzOQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAiRW5jYXJhIG5vIGhpIGhhIGNvbWlzc2nDsyBlbiBsYSBicmFuY2EgJyVzJy4iCiAKLSM6IGdpdGs6MjYxNyBnaXRrOjI2MzcKLW1zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCi1tc2dzdHIgIkRpZmVyZW5jaWEgYXF1ZXN0YSAtPiBsYSBzZWxlY2Npb25hZGEiCisjOiBidWlsdGluL2JyYW5jaC5jOjk0MgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgIk5vIGhpIGhhIGJyYW5jYSBhbWIgbm9tICclcycuIgogCi0jOiBnaXRrOjI2MTggZ2l0azoyNjM4Ci1tc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgotbXNnc3RyICJEaWZlcmVuY2lhIGxhIHNlbGVjY2lvbmFkYSAtPiBhcXVlc3RhIgorIzogYnVpbHRpbi9icmFuY2guYzo5NTcKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSByZW5hbWUgb3BlcmF0aW9uIgorbXNnc3RyICJoaSBoYSBtYXNzYSBicmFucXVlcyBwZXIgYSB1bmEgb3BlcmFjacOzIGRlIGNhbnZpIGRlIG5vbSIKIAotIzogZ2l0azoyNjE5IGdpdGs6MjYzOQotbXNnaWQgIk1ha2UgcGF0Y2giCi1tc2dzdHIgIkZlcyBwZWRhw6ciCisjOiBidWlsdGluL2JyYW5jaC5jOjk2MgorbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIHRvIHNldCBuZXcgdXBzdHJlYW0iCittc2dzdHIgImhpIGhhIG1hc3NhIGJyYW5xdWVzIHBlciBhIGVzdGFibGlyIHVuYSBub3ZhIGZvbnQiCiAKLSM6IGdpdGs6MjYyMCBnaXRrOjkyNTQKLW1zZ2lkICJDcmVhdGUgdGFnIgotbXNnc3RyICJDcmVhIGV0aXF1ZXRhIgorIzogYnVpbHRpbi9icmFuY2guYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisibm8gcydoYSBwb2d1dCBlc3RhYmxpciBsYSBmb250IGRlIEhFQUQgY29tIGEgJXMgcXVhbiBubyBhc3NlbnlhbGEgY2FwIGJyYW5jYS4iCiAKLSM6IGdpdGs6MjYyMSBnaXRrOjkzNzEKLW1zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKLW1zZ3N0ciAiRXNjcml1IGxhIGNvbWlzc2nDsyBhIHVuIGZpdHhlciIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTY5IGJ1aWx0aW4vYnJhbmNoLmM6OTkxIGJ1aWx0aW4vYnJhbmNoLmM6MTAxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICJubyBoaSBoYSB0YWwgYnJhbmNhICclcyciCiAKLSM6IGdpdGs6MjYyMiBnaXRrOjk0MjgKLW1zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKLW1zZ3N0ciAiQ3JlYSB1bmEgYnJhbmNhIG5vdmEiCisjOiBidWlsdGluL2JyYW5jaC5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAibGEgYnJhbmNhICclcycgbm8gZXhpc3RlaXgiCiAKLSM6IGdpdGs6MjYyMwotbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgotbXNnc3RyICJSZWN1bGwgYXF1ZXN0YSBjb21pc3Npw7MgY29tIGEgY2lyZXJhIgorIzogYnVpbHRpbi9icmFuY2guYzo5ODUKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAiaGkgaGEgbWFzc2EgYnJhbnF1ZXMgcGVyIGEgZGVzZXN0YWJsaXIgbGEgZm9udCIKIAotIzogZ2l0azoyNjI0Ci1tc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKLW1zZ3N0ciAiUmVzdGFibGVpeCBsYSBicmFuY2EgSEVBRCBhcXXDrSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTg5Cittc2dpZCAiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiIgorIm5vIHMnaGEgcG9ndXQgZGVzZXN0YWJsaXIgbGEgZm9udCBkZSBIRUFEIHBlcnF1w6ggbm8gYXNzZW55YWxhIGNhcCBicmFuY2EuIgogCi0jOiBnaXRrOjI2MjUKLW1zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgotbXNnc3RyICJNYXJjYSBhcXVlc3RhIGNvbWlzc2nDsyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiTGEgYnJhbmNhICclcycgbm8gdMOpIGluZm9ybWFjacOzIGRlIGZvbnQiCiAKLSM6IGdpdGs6MjYyNgotbXNnaWQgIlJldHVybiB0byBtYXJrIgotbXNnc3RyICJUb3JuYSBhIGxhIG1hcmNhIgorIzogYnVpbHRpbi9icmFuY2guYzoxMDA5Cittc2dpZCAiaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBjcmVhdGUgJ0hFQUQnIG1hbnVhbGx5IgorbXNnc3RyICJubyB0w6kgc2VudGl0IGNyZWFyICdIRUFEJyBtYW51YWxtZW50IgogCi0jOiBnaXRrOjI2MjcKLW1zZ2lkICJGaW5kIGRlc2NlbmRhbnQgb2YgdGhpcyBhbmQgbWFyayIKLW1zZ3N0ciAiVHJvYmEgbGEgZGVzY2VuZGVudCBkJ2FxdWVzdGEgaSBtYXJjYS1sYSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAxNQorbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKyJsZXMgb3BjaW9ucyAtYSBpIC1yIGEgJ2dpdCBicmFuY2gnIG5vIHRlbmVuIHNlbnRpdCBhbWIgdW4gbm9tIGRlIGJyYW5jYSIKIAotIzogZ2l0azoyNjI4Ci1tc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCi1tc2dzdHIgIkNvbXBhcmEgYW1iIGxhIGNvbWlzc2nDsyBtYXJjYWRhIgorIzogYnVpbHRpbi9icmFuY2guYzoxMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tIgorInRyYWNrIG9yIC0tc2V0LXVwc3RyZWFtLXRvXG4iCittc2dzdHIgIiIKKyJMYSBiYW5kZXJhIC0tc2V0LXVwc3RyZWFtIGVzdMOgIGRlc2Fwcm92YWRhIGkgcydlbGltaW5hcsOgLiBDb25zaWRlcmV1IHVzYXIgLS0iCisidHJhY2sgbyAtLXNldC11cHN0cmVhbS10b1xuIgogCi0jOiBnaXRrOjI2MjkgZ2l0azoyNjQwCi1tc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCi1tc2dzdHIgIkRpZmVyZW5jaWEgYXF1ZXN0YSAtPiBsYSBjb21pc3Npw7MgbWFyY2FkYSIKLQotIzogZ2l0azoyNjMwIGdpdGs6MjY0MQotbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgotbXNnc3RyICJEaWZlcmVuY2lhIGxhIGNvbWlzc2nDsyBzZWxlY2Npb25hZGEgLT4gYXF1ZXN0YSIKLQotIzogZ2l0azoyNjMxCi1tc2dpZCAiUmV2ZXJ0IHRoaXMgY29tbWl0IgotbXNnc3RyICJSZXZlcnRlaXggYXF1ZXN0YSBjb21pc3Npw7MiCi0KLSM6IGdpdGs6MjY0NwotbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKLW1zZ3N0ciAiQWdhZmEgYXF1ZXN0YSBicmFuY2EiCi0KLSM6IGdpdGs6MjY0OAotbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKLW1zZ3N0ciAiRWxpbWluYSBhcXVlc3RhIGJyYW5jYSIKLQotIzogZ2l0azoyNjQ5Ci1tc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKLW1zZ3N0ciAiQ29waWEgZWwgbm9tIGRlIGJyYW5jYSIKLQotIzogZ2l0azoyNjU2Ci1tc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgotbXNnc3RyICJSZXNzYWx0YSBhcXVlc3QgdGFtYsOpIgotCi0jOiBnaXRrOjI2NTcKLW1zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgotbXNnc3RyICJSZXNzYWx0YSBub23DqXMgYXF1ZXN0IgotCi0jOiBnaXRrOjI2NTgKLW1zZ2lkICJFeHRlcm5hbCBkaWZmIgotbXNnc3RyICJEaWZlcsOobmNpYSBleHRlcm5hIgotCi0jOiBnaXRrOjI2NTkKLW1zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgotbXNnc3RyICJDdWxwYWJpbGl0YXQgZGUgbGEgY29taXNzacOzIG1hcmUiCi0KLSM6IGdpdGs6MjY2MAotbXNnaWQgIkNvcHkgcGF0aCIKLW1zZ3N0ciAiQ29waWEgZWwgY2Ftw60iCi0KLSM6IGdpdGs6MjY2NwotbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKLW1zZ3N0ciAiTW9zdHJhIGwnb3JpZ2VuIGQnYXF1ZXN0YSBsw61uaWEiCi0KLSM6IGdpdGs6MjY2OAotbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKLW1zZ3N0ciAiRXhlY3V0YSBnaXQgZ3VpIGJsYW1lIGVuIGFxdWVzdGEgbMOtbmlhIgotCi0jOiBnaXRrOjMwMTQKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAzNQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCi0iR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCi0iXG4iCi0iQ29weXJpZ2h0IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgotIlxuIgotIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCi1tc2dzdHIgIiIKLSJcbiIKLSJHaXRrIC0gdmlzdWFsaXR6YWRvciBkZSBjb21pc3Npb25zIHBlciBhbCBnaXRcbiIKLSJcbiIKLSJDb3B5cmlnaHQgwqkgMjAwNS0yMDE0IFBhdWwgTWFja2VycmFzXG4iCi0iXG4iCi0iVXNldS1sbyBpIHJlZGlzdHJpYnXDr3UtbG8gc290YSBlbHMgdGVybWVzIGRlIGxhIExsaWPDqG5jaWEgUMO6YmxpY2EgR2VuZXJhbCBHTlUiCi0KLSM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Ci1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgIlRhbmNhIgotCi0jOiBnaXRrOjMwNDMKLW1zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKLW1zZ3N0ciAiQXNzb2NpYWNpb25zIGRlIHRlY2xlcyBkZWwgR2l0ayIKLQotIzogZ2l0azozMDQ2Ci1tc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgotbXNnc3RyICJBc3NvY2lhY2lvbnMgZGUgdGVjbGVzIGRlbCBHaXRrOiIKLQotIzogZ2l0azozMDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVE+XHRcdFF1aXQiCi1tc2dzdHIgIjwlcy1RPlx0XHRTdXJ0IgotCi0jOiBnaXRrOjMwNDkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgotbXNnc3RyICI8JXMtVz5cdFx0VGFuY2EgbGEgZmluZXN0cmEiCi0KLSM6IGdpdGs6MzA1MAotbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKLW1zZ3N0ciAiPEluaWNpPlx0XHRWw6lzIGEgbGEgcHJpbWVyYSBjb21pc3Npw7MiCi0KLSM6IGdpdGs6MzA1MQotbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCi1tc2dzdHIgIjxGaT5cdFx0VsOpcyBhIGwnw7psdGltYSBjb21pc3Npw7MiCi0KLSM6IGdpdGs6MzA1MgotbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKLW1zZ3N0ciAiPEFtdW50PiwgcCwga1x0TW91LXRlIGNhcCBhbXVudCBwZXIgdW5hIGNvbWlzc2nDsyIKLQotIzogZ2l0azozMDUzCi1tc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKLW1zZ3N0ciAiPEF2YWxsPiwgbiwgalx0TW91LXRlIGNhcCBhdmFsbCBwZXIgdW5hIGNvbWlzc2nDsyIKLQotIzogZ2l0azozMDU0Ci1tc2dpZCAiPExlZnQ+LCB6LCBoXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKLW1zZ3N0ciAiPEVzcXVlcnJhPiwgeiwgaFx0UmV0cm9jZWRlaXggZW4gbGEgbGxpc3RhIGQnaGlzdMOycmlhIgotCi0jOiBnaXRrOjMwNTUKLW1zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKLW1zZ3N0ciAiPERyZXRhPiwgeCwgbFx0QXZhbsOnYSBlbiBsYSBsbGlzdGEgZCdoaXN0w7JyaWEiCi0KLSM6IGdpdGs6MzA1NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgotbXNnc3RyICIiCi0iPCVzLW4+XHRWw6lzIGEgbCdlbsOoc2ltYSBtYXJlIGRlIGxhIGNvbWlzc2nDsyBhY3R1YWwgZW4gbGEgbGxpc3RhIGQnaGlzdMOycmlhIgotCi0jOiBnaXRrOjMwNTcKLW1zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKLW1zZ3N0ciAiPFJlUMOgZz5cdE1vdS10ZSBjYXAgYW11bnQgcGVyIHVuYSBww6BnaW5hIGVuIGxhIGxsaXN0YSBkZSBjb21pc3Npb25zIgotCi0jOiBnaXRrOjMwNTgKLW1zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCi1tc2dzdHIgIjxBdlDDoGc+XHRNb3UtdGUgY2FwIGF2YWxsIHBlciB1bmEgcMOgZ2luYSBlbiBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyIKLQotIzogZ2l0azozMDU5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8JXMtSW5pY2k+XHREZXNwbGHDp2EndCBhIGxhIHBhcnQgc3VwZXJpb3IgZGUgbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMiCi0KLSM6IGdpdGs6MzA2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8JXMtRmk+XHREZXNwbGHDp2EndCBhIGxhIHBhcnQgaW5mZXJpb3IgZGUgbGEgbGxpc3RhIGRlIGNvbWlzc2lvbnMiCi0KLSM6IGdpdGs6MzA2MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKLW1zZ3N0ciAiPCVzLUFtdW50Plx0RGVzcGxhw6dhIGxhIGxsaXN0YSBkZSBjb21pc3Npb25zIGNhcCBhbXVudCBwZXIgdW5hIGzDrW5pYSIKLQotIzogZ2l0azozMDYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKLW1zZ3N0ciAiPCVzLUF2YWxsPlx0RGVzcGxhw6dhIGxhIGxsaXN0YSBkZSBjb21pc3Npb25zIGNhcCBhdmFsbCBwZXIgdW5hIGzDrW5pYSIKLQotIzogZ2l0azozMDYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPCVzLVJlUMOgZz5cdERlc3BsYcOnYSBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyBjYXAgYW11bnQgcGVyIHVuYSBww6BnaW5hIgotCi0jOiBnaXRrOjMwNjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKLW1zZ3N0ciAiPCVzLUF2UMOgZz5cdERlc3BsYcOnYSBsYSBsbGlzdGEgZGUgY29taXNzaW9ucyBjYXAgYXZhbGwgcGVyIHVuYSBww6BnaW5hIgotCi0jOiBnaXRrOjMwNjUKLW1zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCi1tc2dzdHIgIjxNYWotQW11bnQ+XHRDZXJjYSBjYXAgZW5yZXJlIChjYXAgYW11bnQsIGxlcyBjb21pc3Npb25zIG3DqXMgbm92ZXMpIgotCi0jOiBnaXRrOjMwNjYKLW1zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKLW1zZ3N0ciAiPE1hai1BdmFsbD5cdENlcmNhIGNhcCBlbmRhdmFudCAoY2FwIGF2YWxsLCBsZXMgY29taXNzaW9ucyBtw6lzIHZlbGxlcykiCi0KLSM6IGdpdGs6MzA2NwotbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgotbXNnc3RyICI8U3Vwcj4sIGJcdERlc3BsYcOnYSBsYSB2aXN0YSBkZSBkaWZlcsOobmNpYSBjYXAgYW11bnQgcGVyIHVuYSBww6BnaW5hIgotCi0jOiBnaXRrOjMwNjgKLW1zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPFJldHJvY8Opcz5cdERlc3BsYcOnYSBsYSB2aXN0YSBkZSBkaWZlcsOobmNpYSBjYXAgYW11bnQgcGVyIHVuYSBww6BnaW5hIgotCi0jOiBnaXRrOjMwNjkKLW1zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKLW1zZ3N0ciAiPEVzcGFpPlx0XHREZXNwbGHDp2EgbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEgY2FwIGF2YWxsIHBlciB1bmEgcMOgZ2luYSIKLQotIzogZ2l0azozMDcwCi1tc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgotbXNnc3RyICJ1XHRcdERlc3BsYcOnYSBsYSB2aXN0YSBkZSBkaWZlcsOobmNpYSBjYXAgYW11bnQgcGVyIDE4IGzDrW5pZXMiCi0KLSM6IGdpdGs6MzA3MQotbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgotbXNnc3RyICJkXHRcdERlc3BsYcOnYSBsYSB2aXN0YSBkZSBkaWZlcsOobmNpYSBjYXAgYXZhbGwgcGVyIDE4IGzDrW5pZXMiCi0KLSM6IGdpdGs6MzA3MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgotbXNnc3RyICI8JXMtRj5cdFx0Q2VyY2EiCi0KLSM6IGdpdGs6MzA3MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCi1tc2dzdHIgIjwlcy1HPlx0XHRNb3UtdGUgYSBsYSBwcm9wZXJhIGNvaW5jaWTDqG5jaWEgZGUgbGEgY2VyY2EiCi0KLSM6IGdpdGs6MzA3NAotbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCi1tc2dzdHIgIjxSZXRvcm4+XHRNb3UtdGUgYSBsYSBwcm9wZXJhIGNvaW5jaWTDqG5jaWEgZGUgbGEgY2VyY2EiCi0KLSM6IGdpdGs6MzA3NQotbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgotbXNnc3RyICJnXHRcdFbDqXMgYSBsJ8O6bHRpbWEgY29taXNzacOzIgotCi0jOiBnaXRrOjMwNzYKLW1zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgotbXNnc3RyICIvXHRcdFBvc2EgZWwgZm9jdXMgYSBsYSBjYWl4YSBkZSBjZXJjYSIKLQotIzogZ2l0azozMDc3Ci1tc2dpZCAiP1x0XHRNb3ZlIHRvIHByZXZpb3VzIGZpbmQgaGl0IgotbXNnc3RyICI/XHRcdE1vdSBhIGxhIGNvaW5jaWTDqG5jaWEgcHLDqHZpYSBkZSBsYSBjZXJjYSIKLQotIzogZ2l0azozMDc4Ci1tc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKLW1zZ3N0ciAiZlx0XHREZXNwbGHDp2EgbGEgdmlzdGEgZGUgZGlmZXLDqG5jaWEgYWwgcHJvcGVyIGZpdHhlciIKLQotIzogZ2l0azozMDc5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgotbXNnc3RyICI8JXMtUz5cdFx0Q2VyY2EgbGEgcHJvcGVyYSBjb2luY2lkw6huY2lhIGVuIGxhIHZpc3RhIGRlIGRpZmVyw6huY2lhIgotCi0jOiBnaXRrOjMwODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgotbXNnc3RyICI8JXMtUj5cdFx0Q2VyY2EgbGEgY29pbmNpZMOobmNpYSBwcsOodmlhIGVuIGxhIHZpc3RhIGRlIGRpZmVyw6huY2lhIgotCi0jOiBnaXRrOjMwODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtS1ArPlx0QXVnbWVudGEgbGEgbWlkYSBkZSBsbGV0cmEiCi0KLSM6IGdpdGs6MzA4MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtbcOpcz5cdEF1Z21lbnRhIGxhIG1pZGEgZGUgbGxldHJhIgotCi0jOiBnaXRrOjMwODMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtS1AtPlx0RGlzbWludWVpeCBsYSBtaWRhIGRlIGxsZXRyYSIKLQotIzogZ2l0azozMDg0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtbWVueXM+XHREaXNtaW51ZWl4IGxhIG1pZGEgZGUgbGxldHJhIgotCi0jOiBnaXRrOjMwODUKLW1zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKLW1zZ3N0ciAiPEY1Plx0XHRBY3R1YWxpdHphIgotCi0jOiBnaXRrOjM1NTAgZ2l0azozNTU5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCi1tc2dzdHIgIkVycm9yIGVuIGNyZWFyIGVsIGRpcmVjdG9yaSB0ZW1wb3JhbCAlczoiCi0KLSM6IGdpdGs6MzU3MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgotbXNnc3RyICJFcnJvciBlbiBvYnRlbmlyIFwiJXNcIiBkZSAlczoiCi0KLSM6IGdpdGs6MzYzNQotbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKLW1zZ3N0ciAibCdvcmRyZSBoYSBmYWxsYXQ6IgotCi0jOiBnaXRrOjM3ODQKLW1zZ2lkICJObyBzdWNoIGNvbW1pdCIKLW1zZ3N0ciAiQ2FwIGNvbWlzc2nDsyBhaXjDrSIKLQotIzogZ2l0azozNzk4Ci1tc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgotbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiBsJ29yZHJlIGhhIGZhbGxhdDoiCi0KLSM6IGdpdGs6MzgyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCi1tc2dzdHIgIk5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIGNhcCBkZSBmdXNpw7M6ICVzIgotCi0jOiBnaXRrOjM4MzcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKLW1zZ3N0ciAiRXJyb3IgZW4gbGxlZ2lyIGwnw61uZGV4OiAlcyIKLQotIzogZ2l0azozODYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKLW1zZ3N0ciAiTm8gcydoYSBwb2d1dCBpbmljaWFyIGVsIGdpdCBibGFtZTogJXMiCi0KLSM6IGdpdGs6Mzg2NSBnaXRrOjY3NTQKLW1zZ2lkICJTZWFyY2hpbmciCi1tc2dzdHIgIkNlcmNhbnQiCi0KLSM6IGdpdGs6Mzg5NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKLW1zZ3N0ciAiRXJyb3IgZW4gZXhlY3V0YXIgZWwgZ2l0IGJsYW1lOiAlcyIKLQotIzogZ2l0azozOTI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKLW1zZ3N0ciAiIgotIkFxdWVsbGEgbMOtbmlhIHZlIGRlIGxhIGNvbWlzc2nDsyAlcywgbGEgcXVhbCBubyDDqXMgZW4gYXF1ZXN0YSB2aXN1YWxpdHphY2nDsyIKLQotIzogZ2l0azozOTM5Ci1tc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKLW1zZ3N0ciAiRWwgdmlzdWFsaXR6YWRvciBkZSBkaWZlcsOobmNpYSBleHRlcm4gaGEgZmFsbGF0OiIKLQotIzogZ2l0azo0MDcwCi1tc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCi1tc2dzdHIgIkRlZmluaWNpw7MgZGUgdmlzdGEgZGVsIEdpdGsiCi0KLSM6IGdpdGs6NDA3NAotbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKLW1zZ3N0ciAiUmVjb3JkYSBhcXVlc3RhIHZpc3RhIgotCi0jOiBnaXRrOjQwNzUKLW1zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgotbXNnc3RyICJSZWZlcsOobmNpZXMgKGxsaXN0YSBzZXBhcmFkYSBwZXIgZXNwYWlzKSIKLQotIzogZ2l0azo0MDc2Ci1tc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKLW1zZ3N0ciAiQnJhbnF1ZXMgaSBldGlxdWV0ZXM6IgotCi0jOiBnaXRrOjQwNzcKLW1zZ2lkICJBbGwgcmVmcyIKLW1zZ3N0ciAiVG90ZXMgbGVzIHJlZmVyw6huY2llcyIKLQotIzogZ2l0azo0MDc4Ci1tc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCi1tc2dzdHIgIlRvdGVzIGxlcyBicmFucXVlcyAobG9jYWxzKSIKLQotIzogZ2l0azo0MDc5Ci1tc2dpZCAiQWxsIHRhZ3MiCi1tc2dzdHIgIlRvdGVzIGxlcyBldGlxdWV0ZXMiCi0KLSM6IGdpdGs6NDA4MAotbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCi1tc2dzdHIgIlRvdGVzIGxlcyBicmFucXVlcyBhbWIgc2VndWltZW50IHJlbW90IgotCi0jOiBnaXRrOjQwODEKLW1zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgotbXNnc3RyICJJbmZvcm1hY2nDsyBkZSBjb21pc3Npw7MgKGV4cHJlc3Npb25zIHJlZ3VsYXJzKToiCi0KLSM6IGdpdGs6NDA4MgotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgIkF1dG9yOiIKLQotIzogZ2l0azo0MDgzCi1tc2dpZCAiQ29tbWl0dGVyOiIKLW1zZ3N0ciAiQ29taXRlbnQ6IgotCi0jOiBnaXRrOjQwODQKLW1zZ2lkICJDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIk1pc3NhdGdlIGRlIGNvbWlzc2nDszoiCi0KLSM6IGdpdGs6NDA4NQotbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgotbXNnc3RyICJDb2luY2lkZWl4IGFtYiB0b3RzIGVscyBjcml0ZXJpcyBkJ2luZm9ybWFjacOzIGRlIGNvbWlzc2nDsyIKLQotIzogZ2l0azo0MDg2Ci1tc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKLW1zZ3N0ciAiTm8gY29pbmNpZGVpeCBhbWIgY2FwIGNyaXRlcmkgZCdpbmZvcm1hY2nDsyBkZSBjb21pc3Npw7MiCi0KLSM6IGdpdGs6NDA4NwotbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgotbXNnc3RyICJDYW52aXMgYWxzIGZpdHhlcnM6IgotCi0jOiBnaXRrOjQwODgKLW1zZ2lkICJGaXhlZCBTdHJpbmciCi1tc2dzdHIgIkNhZGVuYSBmaXhhIgotCi0jOiBnaXRrOjQwODkKLW1zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCi1tc2dzdHIgIkV4cHJlc3Npw7MgcmVndWxhciIKLQotIzogZ2l0azo0MDkwCi1tc2dpZCAiU2VhcmNoIHN0cmluZzoiCi1tc2dzdHIgIkNhZGVuYSBkZSBjZXJjYToiCi0KLSM6IGdpdGs6NDA5MQotbXNnaWQgIiIKLSJDb21taXQgRGF0ZXMgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsIDIwMDkgIgotIjE1OjI3OjM4XCIpOiIKLW1zZ3N0ciAiIgotIkRhdGVzIGRlIGNvbWlzc2nDsyAoXCJmYSAyIHNldG1hbmVzXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIjE3IGFiciAyMDA5ICIKLSIxNToyNzozOFwiKToiCi0KLSM6IGdpdGs6NDA5MgotbXNnaWQgIlNpbmNlOiIKLW1zZ3N0ciAiRGVzIGRlOiIKLQotIzogZ2l0azo0MDkzCi1tc2dpZCAiVW50aWw6IgotbXNnc3RyICJGaW5zOiIKLQotIzogZ2l0azo0MDk0Ci1tc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCi1tc2dzdHIgIkxpbWl0YSBvIHNhbHRhIHVuIG5vbWJyZSBkZSByZXZpc2lvbnMgKG5vbWJyZSBlbnRlciBwb3NpdGl1KSIKLQotIzogZ2l0azo0MDk1Ci1tc2dpZCAiTnVtYmVyIHRvIHNob3c6IgotbXNnc3RyICJOb21icmUgYSBtb3N0cmFyOiIKLQotIzogZ2l0azo0MDk2Ci1tc2dpZCAiTnVtYmVyIHRvIHNraXA6IgotbXNnc3RyICJOb21icmUgYSBzYWx0YXI6IgotCi0jOiBnaXRrOjQwOTcKLW1zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgotbXNnc3RyICJPcGNpb25zIG1pc2NlbMK3bMOgbmllczoiCi0KLSM6IGdpdGs6NDA5OAotbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKLW1zZ3N0ciAiT3JkZW5hIGVzdHJpY3RhbWVudCBwZXIgZGF0YSIKLQotIzogZ2l0azo0MDk5Ci1tc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCi1tc2dzdHIgIk1hcmNhIGVscyBjb3N0YXRzIGRlIGxlcyBicmFucXVlcyIKLQotIzogZ2l0azo0MTAwCi1tc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgotbXNnc3RyICJMaW1pdGEgYSBsYSBwcmltZXJhIG1hcmUiCi0KLSM6IGdpdGs6NDEwMQotbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgotbXNnc3RyICJIaXN0w7JyaWEgc2VuemlsbGEiCi0KLSM6IGdpdGs6NDEwMgotbXNnaWQgIkFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIGdpdCBsb2c6IgotbXNnc3RyICJQYXLDoG1ldHJlcyBhZGRpY2lvbmFscyBhbCBnaXQgbG9nOiIKLQotIzogZ2l0azo0MTAzCi1tc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCi1tc2dzdHIgIkludHJvZHXDr3UgZWxzIGZpdHhlcnMgaSBkaXJlY3RvcmlzIGEgaW5jbG91cmUsIHVuIHBlciBsw61uaWE6IgotCi0jOiBnaXRrOjQxMDQKLW1zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKLW1zZ3N0ciAiT3JkcmUgcGVyIGEgZ2VuZXJhciBtw6lzIGNvbWlzc2lvbnMgYSBpbmNsb3VyZToiCi0KLSM6IGdpdGs6NDIyOAotbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKLW1zZ3N0ciAiR2l0azogdmlzdGEgZCdlZGljacOzIgotCi0jOiBnaXRrOjQyMzYKLW1zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKLW1zZ3N0ciAiLS0gY3JpdGVyaXMgcGVyIGEgc2VsZWNjaW9uYXIgbGVzIHJldmlzaW9ucyIKLQotIzogZ2l0azo0MjQxCi1tc2dpZCAiVmlldyBOYW1lIgotbXNnc3RyICJOb20gZGUgdmlzdGEiCi0KLSM6IGdpdGs6NDMxNgotbXNnaWQgIkFwcGx5IChGNSkiCi1tc2dzdHIgIkFwbGljYSAoRjUpIgotCi0jOiBnaXRrOjQzNTQKLW1zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCi1tc2dzdHIgIkVycm9yIGVuIGVscyBwYXLDoG1ldHJlcyBkZSBzZWxlY2Npw7MgZGUgY29taXNzaW9uczoiCi0KLSM6IGdpdGs6NDQwOSBnaXRrOjQ0NjIgZ2l0azo0OTI0IGdpdGs6NDkzOCBnaXRrOjYyMDggZ2l0azoxMjM3MyBnaXRrOjEyMzc0Ci1tc2dpZCAiTm9uZSIKLW1zZ3N0ciAiQ2FwIgotCi0jOiBnaXRrOjUwMjEgZ2l0azo1MDI2Ci1tc2dpZCAiRGVzY2VuZGFudCIKLW1zZ3N0ciAiRGVzY2VuZGVudCIKLQotIzogZ2l0azo1MDIyCi1tc2dpZCAiTm90IGRlc2NlbmRhbnQiCi1tc2dzdHIgIk5vIGRlc2NlbmRlbnQiCi0KLSM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKLW1zZ2lkICJBbmNlc3RvciIKLW1zZ3N0ciAiQXZhbnRwYXNzYXQiCi0KLSM6IGdpdGs6NTAzMAotbXNnaWQgIk5vdCBhbmNlc3RvciIKLW1zZ3N0ciAiTm8gYXZhbnRwYXNzYXQiCi0KLSM6IGdpdGs6NTMyNAotbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKLW1zZ3N0ciAiQ2FudmlzIGxvY2FscyByZWdpc3RyYXRzIGVuIGwnw61uZGV4IHBlcsOyIG5vIGNvbWVzb3MiCi0KLSM6IGdpdGs6NTM2MAotbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgotbXNnc3RyICJDYW52aXMgbG9jYWxzIHNlbnNlIGNvbWV0cmUsIG5vIHJlZ2lzdHJhdHMgZW4gbCfDrW5kZXgiCi0KLSM6IGdpdGs6NzEzNAotbXNnaWQgImFuZCBtYW55IG1vcmUiCi1tc2dzdHIgImkgbW9sdGVzIG3DqXMiCi0KLSM6IGdpdGs6NzEzNwotbXNnaWQgIm1hbnkiCi1tc2dzdHIgIm1vbHRlcyIKLQotIzogZ2l0azo3MzI4Ci1tc2dpZCAiVGFnczoiCi1tc2dzdHIgIkV0aXF1ZXRlczoiCi0KLSM6IGdpdGs6NzM0NSBnaXRrOjczNTEgZ2l0azo4ODI1Ci1tc2dpZCAiUGFyZW50IgotbXNnc3RyICJNYXJlIgotCi0jOiBnaXRrOjczNTYKLW1zZ2lkICJDaGlsZCIKLW1zZ3N0ciAiRmlsbGEiCi0KLSM6IGdpdGs6NzM2NQotbXNnaWQgIkJyYW5jaCIKLW1zZ3N0ciAiQnJhbmNhIgotCi0jOiBnaXRrOjczNjgKLW1zZ2lkICJGb2xsb3dzIgotbXNnc3RyICJTZWd1ZWl4IgotCi0jOiBnaXRrOjczNzEKLW1zZ2lkICJQcmVjZWRlcyIKLW1zZ3N0ciAiUHJlY2VkZWl4IgotCi0jOiBnaXRrOjc5NjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKLW1zZ3N0ciAiRXJyb3IgZW4gb2J0ZW5pciBsZXMgZGlmZXLDqG5jaWVzOiAlcyIKLQotIzogZ2l0azo4NjUwCi1tc2dpZCAiR290bzoiCi1tc2dzdHIgIlbDqXMgYToiCi0KLSM6IGdpdGs6ODY3MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgotbXNnc3RyICJMJ2lkIFNIQTEgY3VydGEgJXMgw6lzIGFtYmlndWEiCi0KLSM6IGdpdGs6ODY3OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAiTGEgcmV2aXNpw7MgJXMgw6lzIGRlc2NvbmVndWRhIgotCi0jOiBnaXRrOjg2ODgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAiTCdpZCBTSEExICVzIMOpcyBkZXNjb25lZ3VkYSIKLQotIzogZ2l0azo4NjkwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCi1tc2dzdHIgIkxhIHJldmlzacOzICVzIG5vIMOpcyBlbiBsYSB2aXN0YSBhY3R1YWwiCi0KLSM6IGdpdGs6ODgzMiBnaXRrOjg4NDcKLW1zZ2lkICJEYXRlIgotbXNnc3RyICJEYXRhIgotCi0jOiBnaXRrOjg4MzUKLW1zZ2lkICJDaGlsZHJlbiIKLW1zZ3N0ciAiRmlsbGVzIgotCi0jOiBnaXRrOjg4OTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKLW1zZ3N0ciAiUmVzdGFibGVpeCBsYSBicmFuY2EgJXMgYXF1w60iCi0KLSM6IGdpdGs6ODkwMAotbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgotbXNnc3RyICJDYXAgc2VwYXJhdDogbm8gZXMgcG90IHJlc3RhYmxpciIKLQotIzogZ2l0azo5MDA1IGdpdGs6OTAxMQotbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCi1tc2dzdHIgIlNhbHRhbnQgbGEgY29taXNzacOzIGRlIGZ1c2nDsyAiCi0KLSM6IGdpdGs6OTAyMCBnaXRrOjkwMjUKLW1zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCi1tc2dzdHIgIkVycm9yIGVuIG9idGVuaXIgbCdJRCBkZSBwZWRhw6cgZGUgIgotCi0jOiBnaXRrOjkwMjEgZ2l0azo5MDI2Ci1tc2dpZCAiIC0gc3RvcHBpbmdcbiIKLW1zZ3N0ciAiIC0gYXR1cmFudFxuIgotCi0jOiBnaXRrOjkwMzEgZ2l0azo5MDM0IGdpdGs6OTA0MiBnaXRrOjkwNTYgZ2l0azo5MDY1Ci1tc2dpZCAiQ29tbWl0ICIKLW1zZ3N0ciAiQ29taXNzacOzICIKLQotIzogZ2l0azo5MDM1Ci1tc2dpZCAiIgotIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgotIiAgICAgICAiCi1tc2dzdHIgIiIKLSIgw6lzIGVsIG1hdGVpeCBwZWRhw6cgcXVlXG4iCi0iICAgICAgICIKLQotIzogZ2l0azo5MDQzCi1tc2dpZCAiIgotIiBkaWZmZXJzIGZyb21cbiIKLSIgICAgICAgIgotbXNnc3RyICIiCi0iIGRpZmVyZWl4IGRlXG4iCi0iICAgICAgICIKLQotIzogZ2l0azo5MDQ1Ci1tc2dpZCAiIgotIkRpZmYgb2YgY29tbWl0czpcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIG1ha2UgJyVzJyB0cmFjayAnJXMnLCBkbyB0aGlzOlxuIgogIlxuIgogbXNnc3RyICIiCi0iRGlmZXLDqG5jaWEgZW50cmUgY29taXNzaW9uczpcbiIKKyJcbiIKKyJTaSB2b2zDrWV1IGZlciAnJXMnIHNlZ3VpciAnJXMnLCBmZXUgYWl4w7I6XG4iCiAiXG4iCiAKLSM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKLW1zZ3N0ciAiIHTDqSAlcyBmaWxsZXMgLSBhdHVyYW50XG4iCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIKK21zZ3N0ciAiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIKIAotIzogZ2l0azo5MDg1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCi1tc2dzdHIgIkVycm9yIGVuIGVzY3JpdXJlIGxhIGNvbWlzc2nDsyBhbCBmaXR4ZXI6ICVzIgorIzogYnVpbHRpbi9icmFuY2guYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvICVzXG4iCittc2dzdHIgIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvICVzXG4iCiAKLSM6IGdpdGs6OTA5MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCi1tc2dzdHIgIkVycm9yIGVuIGRpZmVyZW5jaWFyIGxlcyBjb21pc3Npb25zOiAlcyIKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyBlc3TDoCBiw6lcbiIKIAotIzogZ2l0azo5MTM3Ci1tc2dpZCAiVG9wIgotbXNnc3RyICJQYXJ0IHN1cGVyaW9yIgorIzogYnVpbHRpbi9idW5kbGUuYzo2NAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIkNhbCB1biBkaXDDsnNpdCBwZXIgYSBmZXIgdW4gZmFyY2VsbC4iCiAKLSM6IGdpdGs6OTEzOAotbXNnaWQgIkZyb20iCi1tc2dzdHIgIkRlIgorIzogYnVpbHRpbi9idW5kbGUuYzo2OAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAiQ2FsIHVuIGRpcMOyc2l0IHBlciBhIGRlc2ZlciB1biBmYXJjZWxsLiIKIAotIzogZ2l0azo5MTQzCi1tc2dpZCAiVG8iCi1tc2dzdHIgIkEiCi0KLSM6IGdpdGs6OTE2NwotbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgotbXNnc3RyICJHZW5lcmEgcGVkYcOnIgotCi0jOiBnaXRrOjkxNjkKLW1zZ2lkICJGcm9tOiIKLW1zZ3N0ciAiRGU6IgotCi0jOiBnaXRrOjkxNzgKLW1zZ2lkICJUbzoiCi1tc2dzdHIgIkE6IgotCi0jOiBnaXRrOjkxODcKLW1zZ2lkICJSZXZlcnNlIgotbXNnc3RyICJJbnZlcnRlaXgiCi0KLSM6IGdpdGs6OTE4OSBnaXRrOjkzODUKLW1zZ2lkICJPdXRwdXQgZmlsZToiCi1tc2dzdHIgIkZpdHhlciBkZSBzb3J0aWRhOiIKLQotIzogZ2l0azo5MTk1Ci1tc2dpZCAiR2VuZXJhdGUiCi1tc2dzdHIgIkdlbmVyYSIKLQotIzogZ2l0azo5MjMzCi1tc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgotbXNnc3RyICJFcnJvciBlbiBjcmVhciBlbCBwZWRhw6c6IgotCi0jOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAotbXNnaWQgIklEOiIKLW1zZ3N0ciAiSUQ6IgotCi0jOiBnaXRrOjkyNjUKLW1zZ2lkICJUYWcgbmFtZToiCi1tc2dzdHIgIk5vbSBkJ2V0aXF1ZXRhOiIKLQotIzogZ2l0azo5MjY4Ci1tc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCi1tc2dzdHIgIkVsIG1pc3NhdGdlIGQnZXRpcXVldGEgw6lzIG9wY2lvbmFsIgotCi0jOiBnaXRrOjkyNzAKLW1zZ2lkICJUYWcgbWVzc2FnZToiCi1tc2dzdHIgIk1pc3NhdGdlIGQnZXRpcXVldGE6IgotCi0jOiBnaXRrOjkyNzQgZ2l0azo5NDM5Ci1tc2dpZCAiQ3JlYXRlIgotbXNnc3RyICJDcmVhIgotCi0jOiBnaXRrOjkyOTIKLW1zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCi1tc2dzdHIgIk5vIHMnaGEgZXNwZWNpZmljYXQgY2FwIG5vbSBkJ2V0aXF1ZXRhIgotCi0jOiBnaXRrOjkyOTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgotbXNnc3RyICJMJ2V0aXF1ZXRhIFwiJXNcIiBqYSBleGlzdGVpeCIKLQotIzogZ2l0azo5MzA2Ci1tc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKLW1zZ3N0ciAiRXJyb3IgZW4gY3JlYXIgbCdldGlxdWV0YToiCi0KLSM6IGdpdGs6OTM4MgotbXNnaWQgIkNvbW1hbmQ6IgotbXNnc3RyICJPcmRyZToiCi0KLSM6IGdpdGs6OTM5MAotbXNnaWQgIldyaXRlIgotbXNnc3RyICJFc2NyaXUiCi0KLSM6IGdpdGs6OTQwOAotbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKLW1zZ3N0ciAiRXJyb3IgZW4gZXNjcml1cmUgbGEgY29taXNzacOzOiIKLQotIzogZ2l0azo5NDM1Ci1tc2dpZCAiTmFtZToiCi1tc2dzdHIgIk5vbToiCi0KLSM6IGdpdGs6OTQ1OAotbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCi1tc2dzdHIgIlNpIHVzIHBsYXUsIGVzcGVjaWZpcXVldSB1biBub20gcGVyIGEgbGEgYnJhbmNhIG5vdmEiCi0KLSM6IGdpdGs6OTQ2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkJyYW5jaCAnJXMnIGFscmVhZHkgZXhpc3RzLiBPdmVyd3JpdGU/IgotbXNnc3RyICJMYSBicmFuY2EgJyVzJyBqYSBleGlzdGVpeC4gVm9sZXUgc29icmVlc2NyaXVyZT8iCi0KLSM6IGdpdGs6OTUzMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgotbXNnc3RyICIiCi0iTGEgY29taXNzacOzICVzIGphIGVzdMOgIGluY2xvc2EgZW4gbGEgYnJhbmNhICVzIC0tIHJlYWxtZW50IHZvbGV1IHRvcm5hciBhICIKLSJhcGxpY2FyLWxhPyIKLQotIzogZ2l0azo5NTM1Ci1tc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCi1tc2dzdHIgIlJlY29sbGludCBjaXJlcmVzIgotCi0jOiBnaXRrOjk1NDQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MjgKIG1zZ2lkICIiCi0iQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCi0iUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdfC1lfC1wfCIKKyI8dHlwZT58LS10ZXh0Y29udikgPG9iamVjdD4iCiBtc2dzdHIgIiIKLSJFbCByZWN1bGwgZGUgY2lyZXJlcyBoYSBmYWxsYXQgYSBjYXVzYSBkZSBjYW52aXMgbG9jYWxzIGFsIGZpdHhlciAnJXMnLlxuIgotIlNpIHVzIHBsYXUsIGNvbWV0ZXUsIHJlc3RhYmxpdSBvIGVtbWFnYXR6ZW1ldSBlbHMgdm9zdHJlcyBjYW52aXMgaSB0b3JuZXUgYSAiCi0iaW50ZW50YXIuIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdfC1lfC1wfCIKKyI8dGlwdXM+fC0tdGV4dGNvbnYpIDxvYmplY3RlPiIKIAotIzogZ2l0azo5NTUwCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDI5CiBtc2dpZCAiIgotIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgotIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gPCA8bGlzdC1vZi0iCisib2JqZWN0cz4iCiBtc2dzdHIgIiIKLSJFbCByZWN1bGwgZGUgY2lyZXJlcyBoYSBmYWxsYXQgYSBjYXVzYSBkJ3VuIGNvbmZsaWN0ZSBkZSBmdXNpw7MuXG4iCi0iVm9sZXUgZXhlY3V0YXIgZWwgZ2l0IGNpdG9vbCBwZXIgYSByZXNvbGRyZSdsPyIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIDwgPGxsaXN0YS0iCisiZCdvYmplY3Rlcz4iCiAKLSM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKLW1zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKLW1zZ3N0ciAiQ2FwIGNhbnZpIGNvbcOocyIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NjYKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIjx0aXB1cz4gcG90IHNlciB1biBkZTogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCiAKLSM6IGdpdGs6OTU5MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ2NworbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIm1vc3RyYSBlbCB0aXB1cyBkZSBsJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NjgKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICJtb3N0cmEgbGEgbWlkYSBkZSBsJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzAKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgInN1cnQgYW1iIHplcm8gcXVhbiBubyBoaSBoYSBlcnJvciIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3MQorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJpbXByaW1laXggYmVsbGFtZW50IGVsIGNvbnRpbmd1dCBkZSBsJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzMKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiZW4gZWxzIG9iamVjdGVzIGRlIGJsb2IsIGV4ZWN1dGEgdGV4dGNvbnYgZW4gZWwgY29udGluZ3V0IGRlIGwnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3NQorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAicGVybWV0IHF1ZSAtcyBpIC10IGZ1bmNpb25pbiBhbWIgb2JqZWN0ZXMgdHJlbmNhdHMvbWFsbWVzb3MiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzYKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgInBvc2EgbGEgc29ydGlkYSBkZSAtLWJhdGNoIGVuIG1lbcOycmlhIGludGVybcOoZGlhIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDc4Cittc2dpZCAic2hvdyBpbmZvIGFuZCBjb250ZW50IG9mIG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgogbXNnc3RyICIiCi0iTGEgY29taXNzacOzICVzIG5vIHMnaW5jbG91IGVuIGxhIGJyYW5jYSAlcyAtLSByZWFsbWVudCB2b2xldSByZXZlcnRpci1sYT8iCisibW9zdHJhIGxhIGluZm9ybWFjacOzIGkgY29udGluZ3V0IGRlbHMgb2JqZWN0ZXMgcmVidXRzIGRlIGwnZW50cmFkYSBlc3TDoG5kYXJkIgogCi0jOiBnaXRrOjk1OTgKLW1zZ2lkICJSZXZlcnRpbmciCi1tc2dzdHIgIlJldmVydGludCIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0ODEKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIm1vc3RyYSBpbmZvcm1hY2nDsyBzb2JyZSBlbHMgb2JqZWN0ZXMgcmVidXRzIGRlIGwnZW50cmFkYSBlc3TDoG5kYXJkIgogCi0jOiBnaXRrOjk2MDYKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0ODQKK21zZ2lkICJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiCittc2dzdHIgIiIKKyJzZWd1ZWl4IGVscyBlbmxsYcOnb3Mgc2ltYsOybGljcyBlbiBsJ2FyYnJlIChzJ3VzYSBhbWIgLS1iYXRjaCBvIC0tYmF0Y2gtY2hlY2spIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDg2Cittc2dpZCAic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIKK21zZ3N0ciAibW9zdHJhIHRvdHMgZWxzIG9iamVjdGVzIGFtYiAtLWJhdGNoIG8gLS1iYXRjaC1jaGVjayIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTEKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHJpYnV0Pi4uLl0gWy0tXSA8bm9tLWRlLWNhbcOtPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTIKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIDwgPGxpc3Qtb2YtcGF0aHM+IgorbXNnc3RyICIiCisiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0cmlidXQ+Li4uXSA8IDxsbGlzdGEtZGUtY2FtaW5zPiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTkKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgImluZm9ybWEgZGUgdG90cyBlbHMgYXRyaWJ1dHMgZXN0YWJsZXJ0cyBlbiBlbCBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIwCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgInVzYSAuZ2l0YXR0cmlidXRlcyBub23DqXMgZGVzIGRlIGwnw61uZGV4IgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsbGVnZWl4IGVscyBub21zIGRlIGZpdHhlciBkJ3N0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMyBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI0Cittc2dpZCAidGVybWluYXRlIGlucHV0IGFuZCBvdXRwdXQgcmVjb3JkcyBieSBhIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgImFjYWJhIGVscyByZWdpc3RyZXMgZCdlbnRyYWRhIGkgZGUgc29ydGlkYSBhbWIgdW4gY2Fyw6BjdGVyIE5VTCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxOCBidWlsdGluL2NoZWNrb3V0LmM6MTEzMyBidWlsdGluL2djLmM6MjY3Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJvbWV0IGVsIHJlcG9ydGF0Z2UgZGUgcHJvZ3LDqXMiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjYKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIKK21zZ3N0ciAibW9zdHJhIGVscyBjYW1pbnMgZCdlbnRyYWRhIHF1ZSBubyBjb2luY2lkZWl4aW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjgKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAiaWdub3JhIGwnw61uZGV4IGVuIGNvbXByb3ZhciIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNTQKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICJubyBlcyBwb3QgZXNwZWNpZmljYXIgbm9tcyBkZSBjYW3DrSBhbWIgLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNTcKK21zZ2lkICIteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiLXogbm9tw6lzIHTDqSBzZW50aXQgYW1iIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU5Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgImNhcCBjYW3DrSBlc3BlY2lmaWNhdCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiLS1xdWlldCBub23DqXMgw6lzIHbDoGxpZCBhbWIgdW4gc29sIG5vbSBkZSBjYW3DrSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjUKK21zZ2lkICJjYW5ub3QgaGF2ZSBib3RoIC0tcXVpZXQgYW5kIC0tdmVyYm9zZSIKK21zZ3N0ciAibm8gZXMgcG90IHRlbmlyIGFtYmTDs3MgLS1xdWlldCBpIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyDDqXMgdsOgbGlkIG5vbcOpcyBhbWIgLS12ZXJib3NlIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo4Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBbPG9wY2lvbnM+XSA8Y29udGFjdGU+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoxMworbXNnaWQgImFsc28gcmVhZCBjb250YWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJ0YW1iw6kgbGxlZ2VpeCBlbHMgY29udGFjdGVzIGRlcyBkJ3N0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYW5hbGl0emFyIGVsIGNvbnRhY3RlOiAlcyIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6NDcKK21zZ2lkICJubyBjb250YWN0cyBzcGVjaWZpZWQiCittc2dzdHIgIm5vIGhpIGhhIGNvbnRhY3RlcyBlc3BlY2lmaWNhdHMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMjYKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3BjaW9ucz5dIFstLV0gWzxmaXR4ZXI+Li4uXSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4OAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJhZ2FmYSB0b3RzIGVscyBmaXR4ZXJzIGVuIGwnw61uZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTg5Cittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGV4aXN0aW5nIGZpbGVzIgorbXNnc3RyICJmb3LDp2EgbGEgc29icmVlc2NyaXB0dXJhIGRlIGZpdHhlcnMgZXhpc3RlbnRzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTkxCittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAiY2FwIGF2w61zIHBlciBhIGZpdHhlcnMgZXhpc3RlbnRzIGkgZml0eGVycyBubyBlbiBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5MworbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAibm8gYWdhZmlzIGZpdHhlcnMgbm91cyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5NQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICJhY3R1YWxpdHphIGxhIGluZm9ybWFjacOzIGQnZXN0YWTDrXN0aXF1ZXMgZW4gZWwgZml0eGVyIGQnw61uZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAxCittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsbGVnZWl4IGxhIGxsaXN0YSBkZSBjYW1pbnMgZGVzIGRlIGwnZW50cmFkYSBlc3TDoG5kYXJkIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICJlc2NyaXUgZWwgY29udGluZ3V0IGEgZml0eGVycyB0ZW1wb3JhbHMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDQgYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAiY2FkZW5hIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA1Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAiZW4gY3JlYXIgZml0eGVycywgYW50ZXBvc2EgPGNhZGVuYT4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDgKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAiY29waWEgZWxzIGZpdHhlcnMgZGVzIGRlIGwnZXRhcGEgYW5vbWVuYWRhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPG9wY2lvbnM+XSA8YnJhbmNhPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2Cittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxvcGNpb25zPl0gWzxicmFuY2E+XSAtLSA8Zml0eGVyPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMyBidWlsdGluL2NoZWNrb3V0LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJlbCBjYW3DrSAnJXMnIG5vIHTDqSBsYSB2ZXJzacOzIG5vc3RyYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNSBidWlsdGluL2NoZWNrb3V0LmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgImVsIGNhbcOtICclcycgbm8gdMOpIGxhIHZlcnNpw7Mgc2V2YSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJlbCBjYW3DrSAnJXMnIG5vIHTDqSB0b3RlcyBsZXMgdmVyc2lvbnMgbmVjZXNzw6ByaWVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAiZWwgY2Ftw60gJyVzJyBubyB0w6kgbGVzIHZlcnNpb25zIG5lY2Vzc8OgcmllcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAiY2Ftw60gJyVzJzogbm8gZXMgcG90IGZ1c2lvbmFyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFmZWdpciBlbCByZXN1bHRhdCBkZSBmdXNpw7MgcGVyIGEgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI1MCBidWlsdGluL2NoZWNrb3V0LmM6MjUzIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTYKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICInJXMnIG5vIGVzIHBvdCB1c2FyIGFtYiBhY3R1YWxpdHphY2nDsyBkZSBjYW1pbnMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjIgYnVpbHRpbi9jaGVja291dC5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycgbm8gZXMgcG90IHVzYXIgYW1iICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiIgorIk5vIGVzIHBvdCBhY3R1YWxpdHphciBlbHMgY2FtaW5zIGkgY2FudmlhciBhIGxhIGJyYW5jYSAnJXMnIGEgbGEgdmVnYWRhLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3OSBidWlsdGluL2NoZWNrb3V0LmM6NDczCittc2dpZCAiY29ycnVwdCBpbmRleCBmaWxlIgorbXNnc3RyICJmaXR4ZXIgZCfDrW5kZXggbWFsbcOocyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMzOSBidWlsdGluL2NoZWNrb3V0LmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAiZWwgY2Ftw60gJyVzJyBlc3TDoCBzZW5zZSBmdXNpb25hciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ5NQorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJoZXUgZGUgcmVzb2xkcmUgZWwgdm9zdHJlIMOtbmRleCBhY3R1YWwgcHJpbWVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJObyBlcyBwb3QgZmVyIHJlZmxvZyBwZXIgYSAnJXMnOiAlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjYwCittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQgYXJhIMOpcyBhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlJlc3RhYmxlaXggbGEgYnJhbmNhICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAiSmEgZW4gJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJTJ2hhIGFnYWZhdCBpIHJlc3RhYmxlcnQgbGEgYnJhbmNhICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3NiBidWlsdGluL2NoZWNrb3V0LmM6MTA2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJTJ2hhIGFnYWZhdCBsYSBicmFuY2Egbm92YSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUydoYSBhZ2FmYXQgbGEgYnJhbmNhICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIgLi4uIGkgJWQgbcOpcy5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczNgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgotImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKLW1zZ3N0ciAiIgotIkxhIHJldmVyc2nDsyBoYSBmYWxsYXQgYSBjYXVzYSBkZSBjYW52aXMgbG9jYWxzIGFscyBmaXR4ZXJzIHNlZ8O8ZW50czolcyBTaSB1cyAiCi0icGxhdSwgY29tZXRldSwgcmVzdGFibGl1IG8gZW1tYWdhdHplbWV1IGVscyB2b3N0cmVzIGNhbnZpcyBpIHRvcm5ldS1obyBhICIKLSJpbnRlbnRhci4iCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorIkF2w61zOiBlc3RldSBkZWl4YW50IGVucmVyZSAlZCBjb21pc3Npw7MsIG5vIGNvbm5lY3RhZGEgYVxuIgorImNhcCBkZSBsZXMgdm9zdHJlcyBicmFucXVlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzFdICIiCisiQXbDrXM6IGVzdGV1IGRlaXhhbnQgZW5yZXJlICVkIGNvbWlzc2lvbnMsIG5vIGNvbm5lY3RhZGVzIGFcbiIKKyJjYXAgZGUgbGVzIHZvc3RyZXMgYnJhbnF1ZXM6XG4iCisiXG4iCisiJXNcbiIKIAotIzogZ2l0azo5NjEwCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzU1CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCi0iIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgotbXNnc3RyICIiCi0iTGEgcmV2ZXJzacOzIGhhIGZhbGxhdCBhIGNhdXNhIGQndW4gY29uZmxpY3RlIGRlIGZ1c2nDsy5cbiIKLSIgVm9sZXUgZXhlY3V0YXIgZWwgZ2l0IGNpdG9vbCBwZXIgYSByZXNvbGRyZSdsPyIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorIlNpIGxhIHZvbGV1IHJldGVuaXIgY3JlYW50IHVuYSBicmFuY2Egbm92YSwgYXJhIHBvdCBzZXIgdW4gYm9uIG1vbWVudFxuIgorInBlciBhIGZlci1obyBhbWI6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5vbS1kZS1icmFuY2Etbm92YT4gJXNcbiIKKyJcbiIKK21zZ3N0clsxXSAiIgorIlNpIGxlcyB2b2xldSByZXRlbmlyIGNyZWFudCB1bmEgYnJhbmNhIG5vdmEsIGFyYSBwb3Qgc2VyIHVuIGJvbiBtb21lbnRcbiIKKyJwZXIgYSBmZXItaG8gYW1iOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxub20tZGUtYnJhbmNhLW5vdmE+ICVzXG4iCisiXG4iCiAKLSM6IGdpdGs6OTY1MwotbXNnaWQgIkNvbmZpcm0gcmVzZXQiCi1tc2dzdHIgIkNvbmZpcm1hIGVsIHJlc3RhYmxpbWVudCIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTEKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICJlcnJvciBpbnRlcm4gZW4gZWwgcGFzc2VpZyBwZXIgcmV2aXNpb25zIgogCi0jOiBnaXRrOjk2NTUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgotbXNnc3RyICJWb2xldSByZXN0YWJsaXIgbGEgYnJhbmNhICVzIGEgJXM/IgorIzogYnVpbHRpbi9jaGVja291dC5jOjc5NQorbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICJMYSBwb3NpY2nDsyBkZSBIRUFEIGFudGVyaW9yIGVyYSIKIAotIzogZ2l0azo5NjU3Ci1tc2dpZCAiUmVzZXQgdHlwZToiCi1tc2dzdHIgIlRpcHVzIGRlIHJlc3RhYmxpbWVudDoiCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODIyIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDYwCittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiU291IGVuIHVuYSBicmFuY2EgcXVlIGVuY2FyYSBoYSBkZSBuw6BpeGVyIgogCi0jOiBnaXRrOjk2NjAKLW1zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKLW1zZ3N0ciAiU3VhdTogRGVpeGEgbCdhcmJyZSBkZSB0cmViYWxsIGkgbCfDrW5kZXggc2Vuc2UgdG9jYXIiCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIgorbXNnc3RyICJub23DqXMgdW5hIHJlZmVyw6huY2lhIGVzcGVyYWRhLCAlZCBkb25hZGVzLiIKIAotIzogZ2l0azo5NjYzCi1tc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgotbXNnc3RyICJNaXh0OiBEZWl4YSBsJ2FyYnJlIGRlIHRyZWJhbGwgc2Vuc2UgdG9jYXIsIHJlc3RhYmxlaXggbCfDrW5kZXgiCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwNiBidWlsdGluL3dvcmt0cmVlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAicmVmZXLDqG5jaWEgbm8gdsOgbGlkYTogJXMiCiAKLSM6IGdpdGs6OTY2NgorIzogYnVpbHRpbi9jaGVja291dC5jOjEwMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICJsYSByZWZlcsOobmNpYSBubyDDqXMgdW4gYXJicmU6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3NAorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICJlbHMgY2FtaW5zIG5vIGVzIHBvZGVuIHVzYXIgYW1iIGNhbnZpIGRlIGJyYW5jYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzcgYnVpbHRpbi9jaGVja291dC5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiJyVzJyBubyBlcyBwb3QgdXNhciBhbWIgY2FudmkgZGUgYnJhbmNhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA4NSBidWlsdGluL2NoZWNrb3V0LmM6MTA4OCBidWlsdGluL2NoZWNrb3V0LmM6MTA5MworIzogYnVpbHRpbi9jaGVja291dC5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiclcycgbm8gZXMgcG90IHVzYXIgYW1iICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICJObyBlcyBwb3QgY2FudmlhciBsYSBicmFuY2EgYSBsYSBubyBjb21pc3Npw7MgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzQgYnVpbHRpbi9jaGVja291dC5jOjExMzYgYnVpbHRpbi9jbG9uZS5jOjgzCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OSBidWlsdGluL3JlbW90ZS5jOjE2MSBidWlsdGluL3dvcmt0cmVlLmM6MzE3CisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzE5Cittc2dpZCAiYnJhbmNoIgorbXNnc3RyICJicmFuY2EiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM1Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgImNyZWEgaSBhZ2FmYSB1bmEgYnJhbmNhIG5vdmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAiY3JlYS9yZXN0YWJsZWl4IGkgYWdhZmEgdW5hIGJyYW5jYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzgKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmVhIHVuIHJlZ2lzdHJlIGRlIHJlZmVyw6huY2lhIHBlciBhIGxhIGJyYW5jYSBub3ZhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzOQorbXNnaWQgImRldGFjaCB0aGUgSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgInNlcGFyYSBlbCBIRUFEIGEgbGEgY29taXNzacOzIGFub21lbmFkYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDAKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiZXN0YWJsZWl4IGxhIGluZm9ybWFjacOzIGRlIGZvbnQgZGUgbGEgYnJhbmNhIG5vdmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQyCittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAiYnJhbmNhLW5vdmEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQyCittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICJicmFuY2Egw7JyZmVuYSBub3ZhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0MworbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiYWdhZmEgbGEgdmVyc2nDsyBub3N0cmEgZGVscyBmaXR4ZXJzIHNlbnNlIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0NQorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICJhZ2FmYSBsYSB2ZXJzacOzIHNldmEgZGVscyBmaXR4ZXJzIHNlbnNlIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0NworbXNnaWQgImZvcmNlIGNoZWNrb3V0ICh0aHJvdyBhd2F5IGxvY2FsIG1vZGlmaWNhdGlvbnMpIgorbXNnc3RyICJhZ2FmYSBhIGxhIGZvcsOnYSAoZGVzY2FydGEgcXVhbHNldnVsbGEgbW9kaWZpY2FjacOzIGxvY2FsKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDgKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAicmVhbGl0emEgdW5hIGZ1c2nDsyBkZSAzIHZpZXMgYW1iIGxhIGJyYW5jYSBub3ZhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0OSBidWlsdGluL21lcmdlLmM6MjI3Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICJhY3R1YWxpdHphIGVscyBmaXR4ZXJzIGlnbm9yYXRzIChwZXIgZGVmZWN0ZSkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTUwIGJ1aWx0aW4vbG9nLmM6MTI2NCBwYXJzZS1vcHRpb25zLmg6MjQ5Cittc2dpZCAic3R5bGUiCittc2dzdHIgImVzdGlsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1MQorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgImVzdGlsIGRlIGNvbmZsaWN0ZSAoZnVzacOzIG8gZGlmZjMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1NAorbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAibm8gbGltaXRpcyBsZXMgZXNwZWNpZmljYWNpb25zIGRlIGNhbcOtIG5vbcOpcyBhIGVudHJhZGVzIGRpc3BlcnNlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTYKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCA8bm8tc3VjaC1icmFuY2g+JyIKK21zZ3N0ciAiZHVidGEgJ2dpdCBjaGVja291dCA8Y2FwLWJyYW5jYS1haXjDrT4nIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1OAorbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAibm8gY29tcHJvdmlzIHNpIGFsdHJlIGFyYnJlIGRlIHRyZWJhbGwgdMOpIGxhIHJlZmVyw6huY2lhIGRvbmFkYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExODEKK21zZ2lkICItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiBpIC0tb3JwaGFuIHPDs24gbXV0dWFsbWVudCBleGNsdXNpdXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTk4Cittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXRyYWNrIG5lY2Vzc2l0YSB1biBub20gZGUgYnJhbmNhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIwMworbXNnaWQgIk1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAiTWFuY2EgZWwgbm9tIGRlIGJyYW5jYTsgcHJvdmV1IC1iIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIzOQorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICJlc3BlY2lmaWNhY2nDsyBkZSBjYW3DrSBubyB2w6BsaWRhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI0NgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgotIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKKyJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS5cbiIKKyJEaWQgeW91IGludGVuZCB0byBjaGVja291dCAnJXMnIHdoaWNoIGNhbiBub3QgYmUgcmVzb2x2ZWQgYXMgY29tbWl0PyIKIG1zZ3N0ciAiIgotIkR1cjogUmVzdGFibGVpeCBsJ2FyYnJlIGRlIHRyZWJhbGwgaSBsJ8OtbmRleFxuIgotIihkZXNjYXJ0YSBUT1RTIGVscyBjYW52aXMgbG9jYWxzKSIKKyJObyBlcyBwb2RlbiBhY3R1YWxpdHphciBlbHMgY2FtaW5zIGkgY2FudmlhciBhIGxhIGJyYW5jYSAnJXMnIGEgbGEgdmVnYWRhLlxuIgorIlZvbMOtZXUgYWdhZmFyICclcycsIGxhIHF1YWwgbm8gZXMgcG90IHJlc29sZHJlIGNvbSBhIGNvbWlzc2nDsz8iCiAKLSM6IGdpdGs6OTY4MwotbXNnaWQgIlJlc2V0dGluZyIKLW1zZ3N0ciAiUmVzdGFibGludCIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBubyBhY2NlcHRhIHVuIHBhcsOgbWV0cmUgZGUgY2Ftw60gJyVzJyIKIAotIzogZ2l0azo5NzQzCi1tc2dpZCAiQ2hlY2tpbmcgb3V0IgotbXNnc3RyICJBZ2FmYW50IgotCi0jOiBnaXRrOjk3OTYKLW1zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgotbXNnc3RyICJObyBlcyBwb3Qgc3VwcmltaXIgbGEgYnJhbmNhIGFjdHVhbG1lbnQgYWdhZmFkYSIKLQotIzogZ2l0azo5ODAyCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI1NQogbXNnaWQgIiIKLSJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCi0iUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgogbXNnc3RyICIiCi0iTGVzIGNvbWlzc2lvbnMgZW4gbGEgYnJhbmNhICVzIG5vIHPDs24gZW4gY2FwIGFsdHJhIGJyYW5jYS5cbiIKLSJSZWFsbWVudCB2b2xldSBzdXByaW1pciBsYSBicmFuY2EgJXM/IgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGkgLS1tZXJnZSBzw7NuIGluY29tcGF0aWJsZXMgZW5cbiIKKyJhZ2FmYXIgZGUgbCfDrW5kZXguIgogCi0jOiBnaXRrOjk4MzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCi1tc2dzdHIgIkV0aXF1ZXRlcyBpIGNhcHM6ICVzIgotCi0jOiBnaXRrOjk4NTAKLW1zZ2lkICJGaWx0ZXIiCi1tc2dzdHIgIkZpbHRyZSIKLQotIzogZ2l0azoxMDE0NgorIzogYnVpbHRpbi9jbGVhbi5jOjI1CiBtc2dpZCAiIgotIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgotInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKIG1zZ3N0ciAiIgotIkVycm9yIGVuIGxsZWdpciBsYSBpbmZvcm1hY2nDsyBkZSB0b3BvbG9naWEgZGUgY29taXNzacOzOyBsYSBpbmZvcm1hY2nDsyBzb2JyZSAiCi0iYnJhbnF1ZXMgaSBldGlxdWV0ZXMgcHJlY2VkZW50cy9zZWfDvGVudHMgc2Vyw6AgaW5jb21wbGV0YS4iCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHLDsz5dIFsteCB8IC1YXSBbLS1dIDxjYW1pbnM+Li4uIgogCi0jOiBnaXRrOjExMTIzCi1tc2dpZCAiVGFnIgotbXNnc3RyICJFdGlxdWV0YSIKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlc1xuIgorbXNnc3RyICJFbGltaW5hbnQgJXNcbiIKIAotIzogZ2l0azoxMTEyNwotbXNnaWQgIklkIgotbXNnc3RyICJJZCIKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiRWxpbWluYXJpYSAlc1xuIgogCi0jOiBnaXRrOjExMjEwCi1tc2dpZCAiR2l0ayBmb250IGNob29zZXIiCi1tc2dzdHIgIlNlbGVjdG9yIGRlIHRpcHVzIGRlIGxsZXRyYSBkZWwgR2l0ayIKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIlNhbHRhbnQgZWwgZGlww7JzaXQgJXNcbiIKIAotIzogZ2l0azoxMTIyNwotbXNnaWQgIkIiCi1tc2dzdHIgIkIiCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIlNhbHRhcmlhIGVsIGRpcMOyc2l0ICVzXG4iCiAKLSM6IGdpdGs6MTEyMzAKLW1zZ2lkICJJIgotbXNnc3RyICJJIgorIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIGVsaW1pbmFyICVzIgogCi0jOiBnaXRrOjExMzQ4Ci1tc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgotbXNnc3RyICJPcGNpb25zIGRlIHZpc3VhbGl0emFjacOzIGRlIGxhIGxsaXN0YSBkZSBjb21pc3Npb25zIgorIzogYnVpbHRpbi9jbGVhbi5jOjMxNworbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmciCittc2dzdHIgIiIKKyJBanVkYSBkJ2F2w61zOlxuIgorIjEgICAgICAgICAgLSBzZWxlY2Npb25hIHVuIMOtdGVtIG51bWVyYXRcbiIKKyJmb28gICAgICAgIC0gc2VsZWNjaW9uYSB1biDDrXRlbSBiYXNhdCBlbiB1biBwcmVmaXggw7puaWNcbiIKKyIgICAgICAgICAgIC0gKGJ1aXQpIG5vIHNlbGVjY2lvbmlzIHJlcyIKIAotIzogZ2l0azoxMTM1MQotbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKLW1zZ3N0ciAiQW1wbGFkYSBtw6B4aW1hIGRlbCBncsOgZmljIChsw61uaWVzKSIKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMjEKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXNcbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIi0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXNcbiIKKyIqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtc1xuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIiIKKyJBanVkYSBkJ2F2w61zOlxuIgorIjEgICAgICAgICAgLSBzZWxlY2Npb25hIHVuIHNvbCDDrXRlbVxuIgorIjMtNSAgICAgICAgLSBzZWxlY2Npb25hIHVuIHJhbmcgZCfDrXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWNjaW9uYSBtw7psdGlwbGVzIHJhbmdzXG4iCisiZm9vICAgICAgICAtIHNlbGVjY2lvbmEgdW4gw610ZW0gYmFzYXQgZW4gdW4gcHJlZml4IMO6bmljXG4iCisiLS4uLiAgICAgICAtIGRlc3NlbGVjY2lvbmEgZWxzIMOtdGVtcyBzZWxlY2Npb25hdHNcbiIKKyIqICAgICAgICAgIC0gdHJpYSB0b3RzIGVscyDDrXRlbXNcbiIKKyIgICAgICAgICAgIC0gKGJ1aXQpIGZpbmFsaXR6YSBsYSBzZWxlY2Npw7MiCiAKLSM6IGdpdGs6MTEzNTUKLSMsIG5vLXRjbC1mb3JtYXQKLW1zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgotbXNnc3RyICJBbXBsYWRhIG3DoHhpbWEgZGVsIGdyw6BmaWMgKCUgZGVsIHBhbmVsbCkiCisjOiBidWlsdGluL2NsZWFuLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAiUGVyZMOzICglcyk/IgogCi0jOiBnaXRrOjExMzU4Ci1tc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgotbXNnc3RyICJNb3N0cmEgZWxzIGNhbnZpcyBsb2NhbHMiCisjOiBidWlsdGluL2NsZWFuLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAiSW50cm9kdcOvdSBlbHMgcGF0cm9ucyBhIGlnbm9yYXI+PiAiCiAKLSM6IGdpdGs6MTEzNjEKLW1zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgotbXNnc3RyICJTZWxlY2Npb25hIGF1dG9tw6B0aWNhbWVudCBsJ1NIQTEgKGxvbmdpdHVkKSIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiCittc2dzdHIgIkFWw41TOiBObyBlcyBwb3QgdHJvYmFyIMOtdGVtcyBxdWUgY29pbmNpZGVpeGluIGFtYjogJXMiCiAKLSM6IGdpdGs6MTEzNjUKLW1zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgotbXNnc3RyICJBbWFnYSBsZXMgcmVmZXLDqG5jaWVzIHJlbW90ZXMiCisjOiBidWlsdGluL2NsZWFuLmM6NzM3Cittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAiU2VsZWNjaW9uYSBlbHMgw610ZW1zIGEgc3VwcmltaXIiCiAKLSM6IGdpdGs6MTEzNjkKLW1zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKLW1zZ3N0ciAiT3BjaW9ucyBkZSB2aXN1YWxpdHphY2nDsyBkZSBkaWZlcsOobmNpYSIKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc3OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiVm9sZXUgZWxpbWluYXIgJXMgW3kvTl0/ICIKIAotIzogZ2l0azoxMTM3MQotbXNnaWQgIlRhYiBzcGFjaW5nIgotbXNnc3RyICJFc3BhaWF0IGRlIHRhYnVsYWNpw7MiCisjOiBidWlsdGluL2NsZWFuLmM6ODAzCittc2dpZCAiQnllLiIKK21zZ3N0ciAiQWTDqXUuIgogCi0jOiBnaXRrOjExMzc0Ci1tc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKLW1zZ3N0ciAiTW9zdHJhIGV0aXF1ZXRlcy9jYXBzIHByb3BlcnMiCisjOiBidWlsdGluL2NsZWFuLmM6ODExCittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gY29tZW7Dp2EgYSBuZXRlamFyXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2xvdSDDrXRlbXMgZGUgc3VwcmVzc2nDs1xuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY2Npb25hIMOtdGVtcyBhIHN1cHJpbWlyIHBlciBuw7ptZXJvc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtYSBjYWRhIHN1cHJlc3Npw7MgKGNvbSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIGRlaXhhIGRlIG5ldGVqYXJcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gYXF1ZXN0YSBwYW50YWxsYVxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBhanVkYSBkZSBzZWxlY2Npw7MgZGUgbCdhdsOtcyIKIAotIzogZ2l0azoxMTM3NwotbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCi1tc2dzdHIgIk5vbWJyZSBtw6B4aW0gZCdldGlxdWV0ZXMvY2FwcyBhIG1vc3RyYXIiCisjOiBidWlsdGluL2NsZWFuLmM6ODM4Cittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAiKioqIE9yZHJlcyAqKioiCiAKLSM6IGdpdGs6MTEzODAKLW1zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCi1tc2dzdHIgIkxpbWl0YSBsZXMgZGlmZXLDqG5jaWVzIGFscyBjYW1pbnMgbGxpc3RhdHMiCisjOiBidWlsdGluL2NsZWFuLmM6ODM5Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIkkgYXJhIHF1w6giCiAKLSM6IGdpdGs6MTEzODMKLW1zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKLW1zZ3N0ciAiQWRtZXQgY29kaWZpY2FjaW9ucyBlc3BlY8OtZmlxdWVzIHBlciBhIGNhZGEgZml0eGVyIgorIzogYnVpbHRpbi9jbGVhbi5jOjg0NworbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIkVsaW1pbmFyaWEgbCfDrXRlbSBzZWfDvGVudDoiCittc2dzdHJbMV0gIkVsaW1pbmFyaWEgZWxzIMOtdGVtcyBzZWfDvGVudHM6IgogCi0jOiBnaXRrOjExMzg5IGdpdGs6MTE1MzYKLW1zZ2lkICJFeHRlcm5hbCBkaWZmIHRvb2wiCi1tc2dzdHIgIkVpbmEgZGUgZGlmZXLDqG5jaWEgZXh0ZXJuYSIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NjQKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiTm8gaGkgaGEgbcOpcyBmaXR4ZXJzIGEgbmV0ZWphcjsgc29ydGludC4iCiAKLSM6IGdpdGs6MTEzOTAKLW1zZ2lkICJDaG9vc2UuLi4iCi1tc2dzdHIgIlRyaWV1Li4uIgorIzogYnVpbHRpbi9jbGVhbi5jOjg5NQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJubyBpbXByaW1laXhpcyBlbHMgbm9tcyBkZWxzIGZpdHhlcnMgZWxpbWluYXRzIgogCi0jOiBnaXRrOjExMzk1CisjOiBidWlsdGluL2NsZWFuLmM6ODk3Cittc2dpZCAiZm9yY2UiCittc2dzdHIgImZvcsOnYSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg5OAorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICJuZXRlamEgaW50ZXJhY3RpdmEiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDAKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgImVsaW1pbmEgZGlyZWN0b3JpcyBzZW5jZXJzIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTAxIGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDcgYnVpbHRpbi9ncmVwLmM6NzE0CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQzIGJ1aWx0aW4vbmFtZS1yZXYuYzozMTEgYnVpbHRpbi9zaG93LXJlZi5jOjE4NworbXNnaWQgInBhdHRlcm4iCittc2dzdHIgInBhdHLDsyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwMgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICJhZmVnaXUgPHBhdHLDsz4gcGVyIGEgaWdub3JhciBsZXMgcmVnbGVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTAzCittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAiZWxpbWluYSBlbHMgZml0eGVycyBpZ25vcmF0cywgdGFtYsOpIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA1Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiZWxpbWluYSBub23DqXMgZWxzIGZpdHhlcnMgaWdub3JhdHMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MjMKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IGkgLVggbm8gZXMgcG9kZW4gdXNhciBqdW50cyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkyNworbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBlc3TDoCBlc3RhYmxlcnRhIGEgdmVyaXRhdCBpIG5pIC1pLCAtbiBuaSAtZiBzJ2hhIGRvbmF0OyAiCisicmVmdXNhbnQgbmV0ZWphciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzMAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIMOpcyBwZXIgZGVmZWN0ZSB2ZXJpdGF0IGkgbmkgLWksIC1uIG5pIC1mIHMnaGEgZG9uYXQ7ICIKKyJyZWZ1c2FudCBuZXRlamFyIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzcKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs8b3BjaW9ucz5dIFstLV0gPGRpcMOyc2l0PiBbPGRpcmVjdG9yaT5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTcgYnVpbHRpbi9mZXRjaC5jOjExMiBidWlsdGluL21lcmdlLmM6MjI0CisjOiBidWlsdGluL3B1bGwuYzoxMDkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY4Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJmb3LDp2EgbCdpbmZvcm1lIGRlIHByb2dyw6lzIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTkKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAibm8gZmFjaXMgY2FwIGFnYWZhZGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MCBidWlsdGluL2Nsb25lLmM6NjIgYnVpbHRpbi9pbml0LWRiLmM6NTA0Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJjcmVhIHVuIGRpcMOyc2l0IG51IgorCisjOiBidWlsdGluL2Nsb25lLmM6NjQKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAiY3JlYSB1biBkaXDDsnNpdCByZWZsZWN0aXQgKGltcGxpY2EgYmFyZSkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NgorbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJwZXIgYSBjbG9uYXIgZGVzIGQndW4gZGlww7JzaXQgbG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2OAorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICJubyB1c2lzIGVubGxhw6dvcyBkdXJzIGxvY2Fscywgc2VtcHJlIGNvcGlhIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzAKK21zZ2lkICJzZXR1cCBhcyBzaGFyZWQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY29uZmlndXJhIGNvbSBhIGRpcMOyc2l0IGNvbXBhcnRpdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcyIGJ1aWx0aW4vY2xvbmUuYzo3NAorbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgImluaWNpYWxpdHphIGVscyBzdWJtw7JkdWxzIGVuIGVsIGNsb24iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NSBidWlsdGluL2luaXQtZGIuYzo1MDEKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgImRpcmVjdG9yaS1kZS1wbGFudGlsbGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NiBidWlsdGluL2luaXQtZGIuYzo1MDIKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICJkaXJlY3RvcmkgZGVsIHF1YWwgbGVzIHBsYW50aWxsZXMgcyd1c2FyYW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3OAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICJkaXDDsnNpdCBkZSByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwCittc2dpZCAidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIKK21zZ3N0ciAidXNhIC0tcmVmZXJlbmNlIG5vbcOpcyBlbiBjbG9uYXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MSBidWlsdGluL2NvbHVtbi5jOjI2IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAibmFtZSIKK21zZ3N0ciAibm9tIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODIKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgInVzYSA8bm9tPiBlbiBsbG9jIGRlICdvcmlnaW4nIHBlciBhIHNlZ3VpciBsYSBmb250IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODQKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIgorbXNnc3RyICJhZ2FmYSA8YnJhbmNhPiBlbiBsbG9jIGRlbCBIRUFEIGRlbCByZW1vdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAiY2Ftw60gYSBnaXQtdXBsb2FkLXBhY2sgZW4gZWwgcmVtb3QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NyBidWlsdGluL2ZldGNoLmM6MTEzIGJ1aWx0aW4vZ3JlcC5jOjY1OSBidWlsdGluL3B1bGwuYzoxODYKK21zZ2lkICJkZXB0aCIKK21zZ3N0ciAicHJvZnVuZGl0YXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4OAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAiY3JlYSB1biBjbG9uIHN1cGVyZmljaWFsIGRlIHRhbCBwcm9mdW5kaXRhdCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwCittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICJjbG9uYSBub23DqXMgdW5hIGJyYW5jYSwgSEVBRCBvIC0tYnJhbmNoIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTEgYnVpbHRpbi9pbml0LWRiLmM6NTEwCittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICJkaXJlY3RvcmkgZGUgZ2l0IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTIgYnVpbHRpbi9pbml0LWRiLmM6NTExCittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAic2VwYXJhIGVsIGRpcmVjdG9yaSBkZSBnaXQgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgImNsYXU9dmFsb3IiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAiZXN0YWJsZWl4IGxhIGNvbmZpZ3VyYWNpw7MgZGlucyBkZWwgZGlww7JzaXQgbm91IgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgImVsIGRpcMOyc2l0IGRlIHJlZmVyw6huY2lhICclcycgbm8gw6lzIHVuIGRpcMOyc2l0IGxvY2FsLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgImVsIGRpcMOyc2l0IGRlIHJlZmVyw6huY2lhICclcycgw6lzIHN1cGVyZmljaWFsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAiZWwgZGlww7JzaXQgZGUgcmVmZXLDqG5jaWEgJyVzJyDDqXMgZW1wZWx0YXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzAgYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAicydoYSBmYWxsYXQgZW4gZmVyIHN0YXQgYSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyBleGlzdGVpeCBpIG5vIMOpcyBkaXJlY3RvcmkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAicydoYSBmYWxsYXQgZW4gZmVyIHN0YXQgYSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIGNyZWFyIGwnZW5sbGHDpyAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAicydoYSBmYWxsYXQgZW4gY29waWFyIGVsIGZpdHhlciBhICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzUgYnVpbHRpbi9jbG9uZS5jOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICJmZXQuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NDcKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB0aGUgY2hlY2tvdXQgd2l0aCAnZ2l0IGNoZWNrb3V0IC1mIEhFQUQnXG4iCittc2dzdHIgIiIKKyJMYSBjbG9uYWNpw7MgaGEgdGluZ3V0IMOoeGl0LCBwZXLDsiBsJ2FnYWZhZGEgaGEgZmFsbGF0LlxuIgorIlBvZGV1IGluc3BlY2Npb25hciBxdcOoIHMnaGEgYWdhZmF0IGFtYiAnZ2l0IHN0YXR1cycgaVxuIgorInRvcm5hciBhIGludGVudGFyIGwnYWdhZmFkYSBhbWIgJ2dpdCBjaGVja291dCAtZiBIRUFEJ1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSBicmFuY2EgcmVtb3RhICVzIHBlciBhIGNsb25hci4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uICIKK21zZ3N0ciAiUHJvdmFudCBjb25uZWN0aXZpdGF0Li4uICIKKworIzogYnVpbHRpbi9jbG9uZS5jOjYxNworbXNnaWQgInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIgorbXNnc3RyICJlbCByZW1vdCBubyBoYSBlbnZpYXQgdG90cyBlbHMgb2JqZWN0ZXMgbmVjZXNzYXJpcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY4MQorbXNnaWQgInJlbW90ZSBIRUFEIHJlZmVycyB0byBub25leGlzdGVudCByZWYsIHVuYWJsZSB0byBjaGVja291dC5cbiIKK21zZ3N0ciAiIgorImVsIEhFQUQgcmVtb3QgZXMgcmVmZXJlaXggYSB1bmEgcmVmZXLDqG5jaWEgcXVlIG5vIGV4aXN0ZWl4OyBubyBzJ2hhIHBvZ3V0ICIKKyJhZ2FmYXIuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MTIKK21zZ2lkICJ1bmFibGUgdG8gY2hlY2tvdXQgd29ya2luZyB0cmVlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFnYWZhciBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3OTkKK21zZ2lkICJjYW5ub3QgcmVwYWNrIHRvIGNsZWFuIHVwIgorbXNnc3RyICJubyBlcyBwb3QgcmVlbXBhcXVldGFyIHBlciBhIG5ldGVqYXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MDEKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCBkZXNlbmxsYcOnYXIgZWwgZml0eGVyIGQnYWx0ZXJuYXRpdmVzIHRlbXBvcmFsIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODMxCittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiSGkgaGEgbWFzc2EgcGFyw6BtZXRyZXMuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODM1Cittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICJIZXUgZCdlc3BlY2lmaWNhciB1biBkaXDDsnNpdCBwZXIgYSBjbG9uYXIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAibGVzIG9wY2lvbnMgLS1iYXJlIGkgLS1vcmlnaW4gJXMgc8OzbiBpbmNvbXBhdGlibGVzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0OQorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICItLWJhcmUgaSAtLXNlcGFyYXRlLWdpdC1kaXIgc8OzbiBpbmNvbXBhdGlibGVzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImVsIGRpcMOyc2l0ICclcycgbm8gZXhpc3RlaXgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NjggYnVpbHRpbi9mZXRjaC5jOjExNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICJsYSBwcm9mdW5kaXRhdCAlcyBubyDDqXMgbm9tYnJlIHBvc2l0aXUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAiZWwgY2Ftw60gZGVzdMOtICclcycgamEgZXhpc3RlaXggaSBubyDDqXMgdW4gZGlyZWN0b3JpIGJ1aXQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAibCdhcmJyZSBkZSB0cmViYWxsICclcycgamEgZXhpc3RlaXguIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTAzIGJ1aWx0aW4vY2xvbmUuYzo5MTQgYnVpbHRpbi93b3JrdHJlZS5jOjIxOAorIzogYnVpbHRpbi93b3JrdHJlZS5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBlbHMgZGlyZWN0b3JpcyBpbmljaWFscyBkZSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIGRpcmVjdG9yaSBkJ2FyYnJlIGRlIHRyZWJhbGwgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAiQ2xvbmFudCBhbCBkaXDDsnNpdCBudSAnJXMnLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiQ2xvbmFudCBhICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk1MQorbXNnaWQgIi0tZGlzc29jaWF0ZSBnaXZlbiwgYnV0IHRoZXJlIGlzIG5vIC0tcmVmZXJlbmNlIgorbXNnc3RyICJzJ2hhIGRvbmF0IC0tZGlzc29jaWF0ZSwgcGVyw7Igbm8gaGkgaGEgLS1yZWZlcmVuY2UiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjgKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCBzJ2lnbm9yYSBlbiBlbHMgY2xvbnMgbG9jYWxzOyB1c2V1IGZpbGU6Ly8gZW4gbGxvYyBkJ2FpeMOyLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3MQorbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgImVsIGRpcMOyc2l0IGZvbnQgw6lzIHN1cGVyZmljaWFsLCBpZ25vcmFudCAtLWxvY2FsIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc2Cittc2dpZCAiLS1sb2NhbCBpcyBpZ25vcmVkIgorbXNnc3RyICItLWxvY2FsIHMnaWdub3JhIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorbXNnc3RyICJObyBzZSBzYXAgY29tIGNsb25hciAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMjkgYnVpbHRpbi9jbG9uZS5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIkxhIGJyYW5jYSByZW1vdGEgJXMgbm8gZXMgdHJvYmEgZW4gbGEgZm9udCAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDAKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJTZW1ibGEgcXVlIGhldSBjbG9uYXQgdW4gZGlww7JzaXQgYnVpdC4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6OQorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjYKK21zZ2lkICJsb29rdXAgY29uZmlnIHZhcnMiCittc2dzdHIgImNlcmNhIGxlcyB2YXJpYWJsZXMgZGUgY29uZmlndXJhY2nDsyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNyBidWlsdGluL2NvbHVtbi5jOjI4Cittc2dpZCAibGF5b3V0IHRvIHVzZSIKK21zZ3N0ciAiZGlzcG9zaWNpw7MgYSB1c2FyIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI5Cittc2dpZCAiTWF4aW11bSB3aWR0aCIKK21zZ3N0ciAiQW1wbGFkYSBtw6B4aW1hIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAiRXNwYWkgZCdlbmNvaXhpbmFkYSBlbiBlbCBtYXJnZSBlc3F1ZXJyZSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICJFc3BhaSBkJ2VuY29peGluYWRhIGVuIGVsIG1hcmdlIGRyZXQiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAiRXNwYWkgZCdlbmNvaXhpbmFkYSBlbnRyZSBjb2x1bW5lcyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb21tYW5kIGhhIGRlIHNlciBlbCBwcmltZXIgcGFyw6BtZXRyZSIKKworIzogYnVpbHRpbi9jb21taXQuYzozNworbXNnaWQgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFs8b3BjaW9ucz5dIFstLV0gPGVzcGVjaWZpY2FjacOzLWRlLWNhbcOtPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MgorbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFs8b3BjaW9ucz5dIFstLV0gPGVzcGVjaWZpY2FjacOzLWRlLWNhbcOtPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIlMnaGFuIGNvbmZpZ3VyYXQgZWwgdm9zdHJlIG5vbSBpIGFkcmXDp2EgZGUgY29ycmV1IGVsZWN0csOybmljXG4iCisiYXV0b23DoHRpY2FtZW50IGJhc2F0cyBlbiBlbCB2b3N0cmUgbm9tIGQndXN1YXJpIGkgbm9tIGRlIG3DoHF1aW5hLiBTaVxuIgorInVzIHBsYXUsIGNvbXByb3ZldSBxdWUgc2lndWluIGNvcnJlY3Rlcy4gUG9kZXUgc3VwcmltaXIgYXF1ZXN0XG4iCisibWlzc2F0Z2UgZXN0YWJsaW50LWxvcyBleHBsw61jaXRhbWVudC4gRXhlY3V0ZXUgbCdvcmRyZSBzZWfDvGVudCBpXG4iCisic2VndWl1IGxlcyBpbnN0cnVjY2lvbnMgZW4gZWwgdm9zdHJlIGVkaXRvciBwZXIgZWRpdGFyIGVsIHZvc3RyZVxuIgorImZpdHhlciBkZSBjb25maWd1cmFjacOzOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIkRlc3Byw6lzIGRlIGZlciBhaXjDsiwgcG9kZXUgYXJyZWdsYXIgbGEgaWRlbnRpdGF0IHVzYWRhIHBlciBhIGFxdWVzdGFcbiIKKyJjb21pc3Npw7MgYW1iOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIlMnaGFuIGNvbmZpZ3VyYXQgZWwgdm9zdHJlIG5vbSBpIGFkcmXDp2EgZGUgY29ycmV1IGVsZWN0csOybmljXG4iCisiYXV0b23DoHRpY2FtZW50IGJhc2F0cyBlbiBlbCB2b3N0cmUgbm9tIGQndXN1YXJpIGkgbm9tIGRlIG3DoHF1aW5hLiBTaVxuIgorInVzIHBsYXUsIGNvbXByb3ZldSBxdWUgc2lndWluIGNvcnJlY3Rlcy4gUG9kZXUgc3VwcmltaXIgYXF1ZXN0XG4iCisibWlzc2F0Z2UgZXN0YWJsaW50LWxvcyBleHBsw61jaXRhbWVudDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJFbCBWb3N0cmUgTm9tXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHR1QGV4YW1wbGUuY29tXG4iCisiXG4iCisiRGVzcHLDqXMgZGUgZmVyIGFpeMOyLCBwb2RldSBhcnJlZ2xhciBsYSBpZGVudGl0YXQgdXNhZGEgcGVyIGEgYXF1ZXN0YVxuIgorImNvbWlzc2nDsyBhbWI6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisiSGV1IGRlbWFuYXQgZXNtZW5hciBsYSBjb21pc3Npw7MgbcOpcyByZWNlbnQsIHBlcsOyIGZlciBhaXjDsiBsYVxuIgorImRlaXhhcmlhIGJ1aWRhLiBQb2RldSByZXBldGlyIGxhIHZvc3RyYSBvcmRyZSBhbWIgLS1hbGxvdy1lbXB0eSwgb1xuIgorInBvZGV1IGVsaW1pbmFyIGxhIGNvbWlzc2nDsyBwZXIgY29tcGxldCBhbWIgXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NworbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisiRWwgcmVjdWxsIGRlIGNpcmVyZXMgcHJldmkgamEgZXN0w6AgYnVpdCwgcG9zc2libGVtZW50IGEgY2F1c2EgZGUgcmVzb2x1Y2nDsyAiCisiZGUgY29uZmxpY3RlLlxuIgorIlNpIGVsIHZvbGV1IGNvbWV0cmUgZGUgdG90ZXMgbWFuZXJlcywgdXNldTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAiRCdhbHRyYSBtYW5lcmEsIHNpIHVzIHBsYXUsIHVzZXUgJ2dpdCByZXNldCdcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NworbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIlRoZW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHdpbGwgcmVzdW1lIGNoZXJyeS1waWNraW5nXG4iCisidGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorbXNnc3RyICIiCisiU2kgdm9sZXUgb21ldHJlIGFxdWVzdGEgY29taXNzacOzLCB1c2V1OlxuIgorIlxuIgorIiAgICBnaXQgcmVzZXRcbiIKKyJcbiIKKyJMbGF2b3JzIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiByZXByZW5kcsOgIHJlY29sbGludFxuIgorImNvbSBhIGNpcmVyZXMgbGVzIGNvbWlzc2lvbnMgcmVzdGFudHMuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzA0Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICJzJ2hhIGZhbGxhdCBlbiBkZXNlbXBhcXVldGFyIGwnb2JqZWN0ZSBkJ2FyYnJlIEhFQUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzQ1Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgdW4gw61uZGV4IHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImwnYWZlZ2ltZW50IGludGVyYWN0aXUgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjdHVhbGl0emFyIGwnw61uZGV4IHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NgorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICJTJ2hhIGZhbGxhdCBlbiBhY3R1YWxpdHphciBsJ2FyYnJlIHByaW5jaXBhbCBkZSBtZW3DsnJpYSBjYXUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzkwIGJ1aWx0aW4vY29tbWl0LmM6NDEzIGJ1aWx0aW4vY29tbWl0LmM6NDYyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGVsIGZpdHhlciBuZXdfaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ0Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIHVuYSBjb21pc3Npw7MgcGFyY2lhbCBkdXJhbnQgdW5hIGZ1c2nDsy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ2Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIHVuYSBjb21pc3Npw7MgcGFyY2lhbCBkdXJhbnQgdW4gcmVjdWxsIGRlIGNpcmVyZXMuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ1NQorbXNnaWQgImNhbm5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgdW4gZml0eGVyIGQnw61uZGV4IHRlbXBvcmFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICJhIGxhIGNvbWlzc2nDsyAnJXMnIGxpIG1hbmNhIGxhIGNhcMOnYWxlcmEgZCdhdXRvciIKKworIzogYnVpbHRpbi9jb21taXQuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAibGEgY29taXNzacOzICclcycgdMOpIHVuYSBsw61uaWEgZCdhdXRvciBtYWwgZm9ybWFkYSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDAKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICJwYXLDoG1ldHJlIC0tYXV0aG9yIG1hbCBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICJmb3JtYXQgZGUgZGF0YSBubyB2w6BsaWQ6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY1MgorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisibm8gZXMgcG90IHNlbGVjY2lvbmFyIHVuIGNhcsOgY3RlciBkZSBjb21lbnRhcmkgcXVlXG4iCisibm8gc2lndWkgdXNhdCBlbiBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgYWN0dWFsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4OSBidWlsdGluL2NvbW1pdC5jOjcyMiBidWlsdGluL2NvbW1pdC5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgdHJvYmFyIGxhIGNvbWlzc2nDsyAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDEgYnVpbHRpbi9zaG9ydGxvZy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIobGxlZ2ludCBlbCBtaXNzYXRnZSBkZSByZWdpc3RyZSBkZXMgZGUgbCdlbnRyYWRhIGVzdMOgbmRhcmQpXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzAzCittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgbGxlZ2lyIGVsIHJlZ2lzdHJlIGRlcyBkZSBsJ2VudHJhZGEgZXN0w6BuZGFyZCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgZml0eGVyIGRlIHJlZ2lzdHJlICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzI5Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMzCittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3ODQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGxhIHBsYW50aWxsYSBkZSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlbWJsYSBxdWUgcG9kZXUgZXN0YXIgY29tZXRlbnQgdW5hIGZ1c2nDsy5cbiIKKyJTaSBhaXjDsiBubyDDqXMgY29ycmVjdGUsIHNpIHVzIHBsYXUsIGVsaW1pbmV1IGVsIGZpdHhlclxuIgorIlx0JXNcbiIKKyJpIGludGVudGV1LWhvIGRlIG5vdS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiU2VtYmxhIHF1ZSBwb2RldSBlc3RhciBjb21ldGVudCB1biByZWN1bGwgZGUgY2lyZXJlcy5cbiIKKyJTaSBhaXjDsiBubyDDqXMgY29ycmVjdGUsIHNpIHVzIHBsYXUgZWxpbWluZXUgZWwgZml0eGVyXG4iCisiXHQlc1xuIgorImkgaW50ZW50ZXUtaG8gZGUgbm91LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiU2kgdXMgcGxhdSwgaW50cm9kdcOvdSBlbCBtaXNzYXRnZSBkZSBjb21pc3Npw7MgZGVscyB2b3N0cmVzIGNhbnZpcy5cbiIKKyJTJ2lnbm9yYXJhbiBsZXMgbMOtbmllcyBjb21lbsOnYW50IGFtYiAnJWMnLCBpIHVuIG1pc3NhdGdlIGRlXG4iCisiY29taXNzacOzIGJ1aXQgYXZvcnRhIGxhIGNvbWlzc2nDsy5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJTaSB1cyBwbGF1LCBpbnRyb2R1w691IGVsIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyBkZWxzIHZvc3RyZXMgY2FudmlzLlxuIgorIkVzIHJldGluZHJhbiBsZXMgbMOtbmllcyBjb21lbsOnYW50cyBhbWIgJyVjJzsgcG9kZXUgZWxpbWluYXItbGVzIHBlciB2w7NzXG4iCisibWF0ZWl4IHNpIHZvbGV1LiBVbiBtaXNzYXRnZSBidWl0IGF2b3J0YSBsYSBjb21pc3Npw7MuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNBdXRvcjogICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNEYXRhOiAgICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzQ29taXRlbnQ6ICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg4MAorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICJObyBlcyBwb3QgbGxlZ2lyIGwnw61uZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkzNworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJFcnJvciBlbiBjb25zdHJ1aXIgYXJicmVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk1MiBidWlsdGluL3RhZy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIlNpIHVzIHBsYXUsIHByb3Zlw691IGVsIG1pc3NhdGdlIHBlciB1c2FyIG8gbCdvcGNpw7MgLW0gbyBsJ29wY2nDsyAtRi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiIgorIi0tYXV0aG9yICclcycgbm8gw6lzICdOb20gPGFkcmXDp2EtZGUtY29ycmV1LWVsZWN0csOybmljPicgaSBubyBjb2luY2lkZWl4IGFtYlxuIgorImNhcCBhdXRvciBleGlzdGVudCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY5IGJ1aWx0aW4vY29tbWl0LmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIk1vZGUgZGUgZml0eGVycyBubyBzZWd1aXRzIG5vIHbDoGxpZCAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMDYKK21zZ2lkICItLWxvbmcgYW5kIC16IGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tbG9uZyBpIC16IHPDs24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTM2Cittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiVXNhciBhbWJkw7NzIC0tcmVzZXQtYXV0aG9yIGkgLS1hdXRob3Igbm8gdMOpIHNlbnRpdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTQ1Cittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIk5vIHRlbml1IHJlcyBhIGVzbWVuYXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNDgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJFc3RldSBlbm1pZyBkJ3VuYSBmdXNpw7MgLS0gbm8gZXMgcG90IGVzbWVuYXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTAKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJFc3RldSBlbm1pZyBkJ3VuIHJlY3VsbCBkZSBjaXJlcmVzIC0tIG5vIGVzIHBvdCBlc21lbmFyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTUzCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiTGVzIG9wY2lvbnMgLS1zcXVhc2ggaSAtLWZpeHVwIG5vIGVzIHBvZGVuIHVzYXIganVudGVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjMKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiTm9tw6lzIHVuIGRlIC1jLy1DLy1GLy0tZml4dXAgZXMgcG90IHVzYXIuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjUKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYvLS1maXh1cC4iCittc2dzdHIgIkwnb3BjacOzIC1tIG5vIGVzIHBvdCBjb21iaW5hciBhbWIgLWMvLUMvLUYvLS1maXh1cC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3MworbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIG5vbcOpcyBlcyBwb3QgdXNhciBhbWIgLUMsIC1jIG8gLS1hbWVuZC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5MAorbXNnaWQgIk9ubHkgb25lIG9mIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiTm9tw6lzIHVuIGRlIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIGVzIHBvdCB1c2FyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkyCittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICItLWluY2x1ZGUvLS1vbmx5IG5vIHTDqSBzZW50aXQgc2Vuc2UgY2Ftw60uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTQKK21zZ2lkICJDbGV2ZXIuLi4gYW1lbmRpbmcgdGhlIGxhc3Qgb25lIHdpdGggZGlydHkgaW5kZXguIgorbXNnc3RyICJJbnRlbMK3bGlnZW50Li4uIGVzbWVuYW50IGwnw7psdGltIGFtYiDDrW5kZXggYnJ1dC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5NgorbXNnaWQgIkV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG9yIC1vOyBhc3N1bWluZyAtLW9ubHkgcGF0aHMuLi4iCittc2dzdHIgIiIKKyJTJ2hhbiBlc3BlY2lmaWNhdCBjYW1pbnMgZXhwbMOtY2l0cyBzZW5zZSAtaSBvIC1vOyBwcmVzdW1pbnQgY2FtaW5zIC0tb25seS4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjA4IGJ1aWx0aW4vdGFnLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICJNb2RlIGRlIG5ldGVqYSBubyB2w6BsaWQgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIxMworbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIi1hIG5vIHTDqSBzZW50aXQgYW1iIGNhbWlucy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyMyBidWlsdGluL2NvbW1pdC5jOjE2MDIKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgIm1vc3RyYSBsJ2VzdGF0IGNvbmNpc2FtZW50IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjUgYnVpbHRpbi9jb21taXQuYzoxNjA0Cittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIm1vc3RyYSBsYSBpbmZvcm1hY2nDsyBkZSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNyBidWlsdGluL2NvbW1pdC5jOjE2MDYgYnVpbHRpbi9wdXNoLmM6NTQ2Cittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgInNvcnRpZGEgbGxlZ2libGUgcGVyIG3DoHF1aW5hIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzAgYnVpbHRpbi9jb21taXQuYzoxNjA4Cittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICJtb3N0cmEgbCdlc3RhdCBlbiBmb3JtYXQgbGxhcmcgKHBlciBkZWZlY3RlKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzMzIGJ1aWx0aW4vY29tbWl0LmM6MTYxMQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIgorbXNnc3RyICJhY2FiYSBsZXMgZW50cmFkZXMgYW1iIE5VTCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM1IGJ1aWx0aW4vY29tbWl0LmM6MTYxNCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgxCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg0IGJ1aWx0aW4vdGFnLmM6NjA0Cittc2dpZCAibW9kZSIKK21zZ3N0ciAibW9kZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM2IGJ1aWx0aW4vY29tbWl0LmM6MTYxNAorbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorIm1vc3RyYSBlbHMgZml0eGVycyBubyBzZWd1aXRzLCBtb2RlcyBvcGNpb25hbHM6IGFsbCwgbm9ybWFsLCBuby4gKFBlciAiCisiZGVmZWN0ZTogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM5Cittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJtb3N0cmEgZWxzIGZpdHhlcnMgaWdub3JhdHMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MCBwYXJzZS1vcHRpb25zLmg6MTU1Cittc2dpZCAid2hlbiIKK21zZ3N0ciAicXVhbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQxCittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisiaWdub3JhIGVscyBjYW52aXMgYWxzIHN1Ym3DsmR1bHMsIG9wY2lvbmFsIHF1YW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gKFBlciAiCisiZGVmZWN0ZTogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQzCittc2dpZCAibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAibW9zdHJhIGVscyBmaXR4ZXJzIG5vIHNlZ3VpdHMgZW4gY29sdW1uZXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQyOQorbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgdHJvYmFyIGxhIGNvbWlzc2nDsyBub3ZhbWVudCBjcmVhZGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQzMQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgbGEgY29taXNzacOzIG5vdmFtZW50IGNyZWFkYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc2Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiSEVBRCBzZXBhcmF0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzkKK21zZ2lkICIgKHJvb3QtY29tbWl0KSIKK21zZ3N0ciAiIChjb21pc3Npw7MgZCdhcnJlbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3MgorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgIm9tZXQgZWwgcmVzdW0gZGVzcHLDqXMgZCd1bmEgY29taXNzacOzIHJlZWl4aWRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzMKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIm1vc3RyYSBsYSBkaWZlcsOobmNpYSBlbiBsYSBwbGFudGlsbGEgZGUgbWlzc2F0Z2UgZGUgY29taXNzacOzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzUKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGRlIG1pc3NhdGdlIGRlIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc2IGJ1aWx0aW4vdGFnLmM6NjAyCittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAibGxlZ2l1IGVsIG1pc3NhdGdlIGRlcyBkJ3VuIGZpdHhlciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc3Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICJhdXRvciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc3Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgImF1dG9yIGNvcnJlZ2l0IGRlIGxhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc4IGJ1aWx0aW4vZ2MuYzoyNjgKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzgKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgImRhdGEgY29ycmVnaWRhIGRlIGxhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc5IGJ1aWx0aW4vbWVyZ2UuYzoyMTggYnVpbHRpbi9ub3Rlcy5jOjM5MgorIzogYnVpbHRpbi9ub3Rlcy5jOjU1NSBidWlsdGluL3RhZy5jOjYwMAorbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgIm1pc3NhdGdlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzkKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAibWlzc2F0Z2UgZGUgY29taXNzacOzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODAKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAicmV1c2EgaSBlZGl0YSBlbCBtaXNzYXRnZSBkZSBsYSBjb21pc3Npw7MgZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODEKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAicmV1c2EgZWwgbWlzc2F0Z2UgZGUgbGEgY29taXNzacOzIGVzcGVjaWZpY2FkYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTgyCittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorInVzYSBlbCBtaXNzYXRnZSBmb3JtYXRhdCBkJ2FpeGFmYWRhIGF1dG9tw6B0aWNhIHBlciBhIGFycmVnbGFyIGxhIGNvbWlzc2nDsyAiCisiZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODMKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorInVzYSBlbCBtaXNzYXRnZSBmb3JtYXRhdCBkJ2FpeGFmYWRhIGF1dG9tw6B0aWNhIHBlciBhIGFpeGFmYXIgbGEgY29taXNzacOzICIKKyJlc3BlY2lmaWNhZGEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NAorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgImwnYXV0b3IgZGUgbGEgY29taXNzacOzIGphIHPDs2Mgam8gKHMndXNhIGFtYiAtQy8tYy8tLWFtZW5kKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg1IGJ1aWx0aW4vbG9nLmM6MTIxNiBidWlsdGluL3JldmVydC5jOjg2Cittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICJhZmVnZWl4IFNpZ25lZC1vZmYtYnk6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODYKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgInVzYSBlbCBmaXR4ZXIgZGUgcGxhbnRpbGxhIGVzcGVjaWZpY2F0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODcKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiZm9yw6dhIGwnZWRpY2nDsyBkZSBsYSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgInBlciBkZWZlY3RlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODggYnVpbHRpbi90YWcuYzo2MDUKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICJjb20gZGVzcHVsbGFyIGVscyBlc3BhaXMgaSAjY29tZW50YXJpcyBkZWwgbWlzc2F0Z2UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OQorbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJpbmNsb3UgbCdlc3RhdCBlbiBsYSBwbGFudGlsbGEgZGUgbWlzc2F0Z2UgZGUgY29taXNzacOzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTEgYnVpbHRpbi9tZXJnZS5jOjIyNiBidWlsdGluL3B1bGwuYzoxNTYKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTMKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgImZpcm1hIGxhIGNvbWlzc2nDsyBhbWIgR1BHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTQKK21zZ2lkICJDb21taXQgY29udGVudHMgb3B0aW9ucyIKK21zZ3N0ciAiT3BjaW9ucyBkZWxzIGNvbnRpbmd1dHMgZGUgbGVzIGNvbWlzc2lvbnMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NQorbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiY29tZXQgdG90cyBlbHMgZml0eGVycyBjYW52aWF0cyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk2Cittc2dpZCAiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IgorbXNnc3RyICJhZmVnZWl4IGVscyBmaXR4ZXJzIGVzcGVjaWZpY2F0cyBhIGwnw61uZGV4IHBlciBhIGNvbWV0cmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NworbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICJhZmVnZWl4IGVscyBmaXR4ZXJzIGludGVyYWN0aXZhbWVudCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk4Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAiYWZlZ2VpeCBlbHMgY2FudmlzIGludGVyYWN0aXZhbWVudCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk5Cittc2dpZCAiY29tbWl0IG9ubHkgc3BlY2lmaWVkIGZpbGVzIgorbXNnc3RyICJjb21ldCBub23DqXMgZWxzIGZpdHhlcnMgZXNwZWNpZmljYXRzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDAKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBob29rIgorbXNnc3RyICJldml0YSBlbCBnYW54byBkZSBwcmVjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwMQorbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgIm1vc3RyYSBxdcOoIGVzIGNvbWV0cmlhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTIKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgImVzbWVuYSBsYSBjb21pc3Npw7MgYW50ZXJpb3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxMworbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAiZXZpdGEgZWwgZ2FueG8gZGUgcG9zdHJlZXNjcml1cmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxOAorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgImVzdMOgIGLDqSByZWdpc3RyYXIgdW4gY2FudmkgYnVpdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjIwCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiZXN0w6AgYsOpIHJlZ2lzdHJhciB1biBjYW52aSBhbWIgbWlzc2F0Z2UgYnVpdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQ5Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFuYWxpdHphciBsYSBjb21pc3Npw7MgSEVBRCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIkZpdHhlciBNRVJHRV9IRUFEIG1hbG3DqHMgKCVzKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzAyCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTU9ERSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAiQXZvcnRhbnQgbGEgY29taXNzacOzOyBubyBoZXUgZWRpdGF0IGVsIG1pc3NhdGdlLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAiQXZvcnRhbnQgbGEgY29taXNzacOzIGEgY2F1c2EgZCd1biBtaXNzYXRnZSBkZSBjb21pc3Npw7MgYnVpdC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzg1Cittc2dpZCAiIgorIlJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJTJ2hhIGFjdHVhbGl0emF0IGVsIGRpcMOyc2l0LCBwZXLDsiBubyBlcyBwb3QgZXNjcml1cmUgZWxcbiIKKyJmaXR4ZXIgbmV3X2luZGV4LiBDb21wcm92ZXUgcXVlIGVsIGRpc2Mgbm8gZXN0aWd1aSBwbGUgaVxuIgorInF1ZSBsYSBxdW90YSBubyBlc3RpZ3VpIGV4Y2VkaWRhLCBpIGRlc3Byw6lzXG4iCisiXCJnaXQgcmVzZXQgSEVBRFwiIHBlciBhIHJlY3VwZXJhci4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6OAorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTQKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiVWJpY2FjacOzIGRlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NQorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgInVzYSBlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyBnbG9iYWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTYKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1c2EgZWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgZGVsIHNpc3RlbWEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTcKK21zZ2lkICJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhIGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGRlbCBkaXDDsnNpdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OAorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAidXNhIGVsIGZpdHhlciBkZSBjb25maWd1cmFjacOzIGRvbmF0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU5Cittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAiSUQgZGUgYmxvYiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OQorbXNnaWQgInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiCittc2dzdHIgImxsZWdlaXggbGEgY29uZmlndXJhY2nDsyBkZSBsJ29iamVjdGUgZGUgYmxvYiBkb25hdCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MAorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAiQWNjacOzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idMOpbiB2YWxvcjogbm9tIFtyZWdleC1kZS12YWxvcnNdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYyCittc2dpZCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJvYnTDqW4gdG90cyBlbHMgdmFsb3JzOiBjbGF1IFtyZWdleC1kZS12YWxvcnNdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzCittc2dpZCAiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idMOpbiB2YWxvcnMgZGUgcmVnZXhwOiByZWdleC1kZS1ub21zIFtyZWdleC1kZS12YWxvcnNdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY0Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAib2J0w6luIGVsIHZhbG9yIGVzcGVjw61maWMgcGVyIGEgbCdVUkw6IHNlY2Npw7NbLnZhcmlhYmxlXSBVUkwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjUKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAiIgorInJlZW1wbGHDp2EgdG90ZXMgbGVzIHZhcmlhYmxlcyBxdWUgY29pbmNpZGVpeGVuOiBub20gdmFsb3IgW3JlZ2V4X2RlX3ZhbG9yc10iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjYKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgImFmZWdlaXggdW5hIHZhcmlhYmxlIG5vdmE6IG5vbSB2YWxvciIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NworbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImVsaW1pbmEgdW5hIHZhcmlhYmxlOiBub20gW3JlZ2V4LWRlLXZhbG9yc10iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjgKK21zZ2lkICJyZW1vdmUgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiZWxpbWluYSB0b3RlcyBsZXMgY29pbmNpZMOobmNpZXM6IG5vbSBbcmVnZXgtZGUtdmFsb3JzXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OQorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAiY2FudmlhIGVsIG5vbSBkZSBzZWNjacOzOiBub20tYW50aWMgbm9tLW5vdSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MAorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgImVsaW1pbmEgdW5hIHNlY2Npw7M6IG5vbSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MQorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJsbGlzdGEgdG90cyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MgorbXNnaWQgIm9wZW4gYW4gZWRpdG9yIgorbXNnc3RyICJvYnJlIHVuIGVkaXRvciIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MworbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICJ0cm9iYSBlbCBjb2xvciBjb25maWd1cmF0OiByYW51cmEgW3BlciBkZWZlY3RlXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NAorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICJ0cm9iYSBsJ2FqdXN0IGRlIGNvbG9yOiByYW51cmEgW3N0ZG91dC3DqXMtdHR5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NQorbXNnaWQgIlR5cGUiCittc2dzdHIgIlRpcHVzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICJlbCB2YWxvciDDqXMgXCJ0cnVlXCIgbyBcImZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzcKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAiZWwgdmFsb3Igw6lzIHVuIG5vbWJyZSBkZWNpbWFsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4Cittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICJlbCB2YWxvciDDqXMgLS1ib29sIG8gLS1pbnQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzkKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICJlbCB2YWxvciDDqXMgdW4gY2Ftw60gKG5vbSBkZSBmaXR4ZXIgbyBkaXJlY3RvcmkpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgwCittc2dpZCAiT3RoZXIiCittc2dzdHIgIkFsdHJlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgxCittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJhY2FiYSBlbHMgdmFsb3JzIGFtYiB1biBvY3RldCBOVUwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODIKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgIm1vc3RyYSBub23DqXMgZWxzIG5vbXMgZGUgdmFyaWFibGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODMKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgInJlc3BlY3RhIGxlcyBkaXJlY3RpdmVzIGQnaW5jbHVzacOzIGVuIGNlcmNhciIKKworIzogYnVpbHRpbi9jb25maWcuYzozMTEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBhbmFsaXR6YXIgZWwgdmFsb3IgZGUgY29sb3IgcGVyIGRlZmVjdGUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjIEFpeMOyIMOpcyBlbCBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyBkZWwgR2l0IGRlIGwndXN1YXJpLlxuIgorIlt1c2VyXVxuIgorIiMgU2kgdXMgcGxhdSwgYWRhcHRldSBpIGRlc2NvbWVudGV1IGxlcyBsw61uaWVzIHNlZ8O8ZW50czpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJubyBlcyBwb3QgY3JlYXIgZWwgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MgJyVzJyIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6NTUKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo2NQorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAiaW1wcmltZWl4IGxlcyBtaWRlcyBlbiB1biBmb3JtYXQgbGxlZ2libGUgcGVscyBodW1hbnMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFtvcGNpb25zXSBbPGNvbWlzc2nDsz4uLi5dIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MTgKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8b3BjaW9ucz5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICJsJ2V0aXF1ZXRhIGFub3RhZGEgJXMgbm8gw6lzIGRpc3BvbmlibGUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAibCdldGlxdWV0YSBhbm90YWRhICVzIG5vIHTDqSBub20gaW5jcnVzdGF0IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgImwnZXRpcXVldGEgJyVzJyByZWFsbWVudCDDqXMgJyVzJyBhcXXDrSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI1MCBidWlsdGluL2xvZy5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiJXMgbm8gw6lzIHVuIG5vbSBkJ29iamVjdGUgdsOgbGlkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIlcyBubyDDqXMgdW4gb2JqZWN0ZSBkZSAnJXMnIHbDoGxpZCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgImNhcCBldGlxdWV0YSBjb2luY2lkZWl4IGV4YWN0YW1lbnQgYW1iICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VhcmNoaW5nIHRvIGRlc2NyaWJlICVzXG4iCittc2dzdHIgImNlcmNhbnQgcGVyIGEgZGVzY3JpdXJlICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgInMnaGEgZmluYWxpdHphdCBsYSBjZXJjYSBhICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyJDYXAgZXRpcXVldGEgYW5vdGFkYSBwb3QgZGVzY3JpdXJlICclcycuXG4iCisiTm8gb2JzdGFudCwgaGkgaGF2aWEgZXRpcXVldGVzIG5vIGFub3RhZGVzOiBwcm92ZXUgLS10YWdzLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisiQ2FwIGV0aXF1ZXRhIHBvdCBkZXNjcml1cmUgJyVzJy5cbiIKKyJQcm92ZXUgLS1hbHdheXMsIG8gY3JlZXUgYWxndW5lcyBldGlxdWV0ZXMuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICIlbHUgY29taXNzaW9ucyB0cmF2ZXNzYWRlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorInMnaGFuIHRyb2JhdCBtw6lzIGRlICVpIGV0aXF1ZXRlczogcydoYW4gbGxpc3RhdCBsZXMgJWkgbcOpcyByZWNlbnRzXG4iCisicydoYSByZW51bmNpYXQgbGEgY2VyY2EgYSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk2Cittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAidHJvYmEgbCdldGlxdWV0YSBxdWUgdmluZ3VpIGRlc3Byw6lzIGRlIGxhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NworbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgImVzdHJhdMOoZ2lhIGRlIGNlcmNhIGRlIGRlcHVyYWNpw7MgZW4gc3RkZXJyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk4Cittc2dpZCAidXNlIGFueSByZWYiCittc2dzdHIgInVzYSBxdWFsc2V2dWxsYSByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5OQorbXNnaWQgInVzZSBhbnkgdGFnLCBldmVuIHVuYW5ub3RhdGVkIgorbXNnc3RyICJ1c2EgcXVhbHNldnVsbGEgZXRpcXVldGEsIGZpbnMgaSB0b3QgYXF1ZWxsZXMgc2Vuc2UgYW5vdGFyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDAwCittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAic2VtcHJlIHVzYSBlbCBmb3JtYXQgbGxhcmciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDEKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgIm5vbcOpcyBzZWd1ZWl4IGxhIHByaW1lcmEgbWFyZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNAorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgImVtZXQgbm9tw6lzIGNvaW5jaWTDqG5jaWVzIGV4YWN0ZXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDYKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICJjb25zaWRlcmEgbGVzIDxuPiBldGlxdWV0ZXMgbcOpcyByZWNlbnRzIChwZXIgZGVmZWN0ZTogMTApIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA4Cittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAibm9tw6lzIGNvbnNpZGVyYSBsZXMgZXRpcXVldGVzIHF1ZSBjb2luY2lkZWl4ZW4gYW1iIDxwYXRyw7M+IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDEwIGJ1aWx0aW4vbmFtZS1yZXYuYzozMTgKK21zZ2lkICJzaG93IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2siCittc2dzdHIgIm1vc3RyYSBsJ29iamVjdGUgZGUgY29taXNzacOzIGFicmV2aWF0IGNvbSBhIHJldHJvY2VkaW1lbnQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTEKK21zZ2lkICJtYXJrIgorbXNnc3RyICJtYXJjYSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMgorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAiYW5uZXhhIDxtYXJjYT4gZW4gbCdhcmJyZSBkZSB0cmViYWxsIGJydXQgKHBlciBkZWZlY3RlOiBcIi1kaXJ0eVwiKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQzMAorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICItLWxvbmcgw6lzIGluY29tcGF0aWJsZSBhbWIgLS1hYmJyZXY9MCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1NgorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICJDYXAgbm9tIHRyb2JhdCwgbm8gZXMgcG90IGRlc2NyaXVyZSByZXMuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDc2Cittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tZGlydHkgw6lzIGluY29tcGF0aWJsZSBhbWIgbGVzIGNvbWlzc2lvbnMiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICInJXMnOiBubyDDqXMgbmkgZml0eGVyIHJlZ3VsYXIgbmkgZW5sbGHDpyBzaW1iw7JsaWMiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIm9wY2nDsyBubyB2w6BsaWRhOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU4Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIk5vIMOpcyB1biBkaXDDsnNpdCBkZSBnaXQiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAicydoYSBkb25hdCB1biBvYmplY3RlIG5vIHbDoGxpZCAnJXMnLiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgInMnaGEgZG9uYXQgbcOpcyBkZSBkb3MgYmxvYnM6ICclcyIKKworIzogYnVpbHRpbi9kaWZmLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgInMnaGEgZG9uYXQgbCdvYmplY3RlIG5vIGdlc3Rpb25hdCAnJXMnLiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjI1Cittc2dpZCAiZ2l0IGZhc3QtZXhwb3J0IFtyZXYtbGlzdC1vcHRzXSIKK21zZ3N0ciAiZ2l0IGZhc3QtZXhwb3J0IFtvcGNpb25zLWRlLWxsaXN0YS1kZS1yZXZpc2lvbnNdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgwCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhIGVsIHByb2dyw6lzIGRlc3Byw6lzIGRlIDxuPiBvYmplY3RlcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4MgorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAic2VsZWNjaW9uYSBsYSBnZXN0acOzIGRlIGxlcyBldGlxdWV0ZXMgZmlybWFkZXMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODUKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIgorbXNnc3RyICJzZWxlY2Npb25hIGxhIGdlc3Rpw7MgZGUgbGVzIGV0aXF1ZXRlcyBxdWUgZXRpcXVldGluIG9iamVjdGVzIGZpbHRyYXRzIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg4Cittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIkJvbGNhIGxlcyBtYXJxdWVzIGEgYXF1ZXN0IGZpdHhlciIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5MAorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIKK21zZ3N0ciAiSW1wb3J0YSBsZXMgbWFycXVlcyBkJ2FxdWVzdCBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTIKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAiRmluZ2VpeCB1biBldGlxdWV0YWRvciBxdWFuIGVscyBlbiBtYW5jYSB1biBhIGxlcyBldGlxdWV0ZXMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTQKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiSW1wcmltZWl4IGwnYXJicmUgY29tcGxldCBkZSBjYWRhIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5NgorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICJVc2EgbGEgY2FyYWN0ZXLDrXN0aWNhIGRvbmUgcGVyIGEgYWNhYmFyIGVsIGNvcnJlbnQiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTcKK21zZ2lkICJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiCittc2dzdHIgIlNhbHRhIGwnZW1pc3Npw7MgZGUgZGFkZXMgZGUgYmxvYiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5OAorbXNnaWQgInJlZnNwZWMiCittc2dzdHIgImVzcGVjaWZpY2FjacOzIGRlIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk5Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICJBcGxpY2EgbCdlc3BlY2lmaWNhY2nDsyBkZSByZWZlcsOobmNpYSBhIGxlcyByZWZlcsOobmNpZXMgZXhwb3J0YWRlcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwMDAKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICJhbm9uaW1pdHphIGxhIHNvcnRpZGEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8b3BjaW9ucz5dIFs8ZGlww7JzaXQ+IFs8ZXNwZWNpZmljYWNpw7MtZGUtcmVmZXLDqG5jaWE+Li4uXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzxvcGNpb25zPl0gPGdydXA+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MjIKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcGNpb25zPl0gWyg8ZGlww7JzaXQ+IHwgPGdydXA+KS4uLl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMworbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTAgYnVpbHRpbi9wdWxsLmM6MTYyCittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAib2J0w6luIGRlIHRvdHMgZWxzIHJlbW90cyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkyIGJ1aWx0aW4vcHVsbC5jOjE2NQorbXNnaWQgImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIKK21zZ3N0ciAiYW5uZXhhIGEgLmdpdC9GRVRDSF9IRUFEIGVuIGxsb2MgZGUgc29icmVlc2NyaXVyZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk0IGJ1aWx0aW4vcHVsbC5jOjE2OAorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAiY2Ftw60gYWwgcXVhbCBwdWphciBlbCBwYXF1ZXQgYWwgY29zdGF0IHJlbW90IgorCisjOiBidWlsdGluL2ZldGNoLmM6OTUgYnVpbHRpbi9wdWxsLmM6MTcwCittc2dpZCAiZm9yY2Ugb3ZlcndyaXRlIG9mIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiZm9yw6dhIGxhIHNvYnJlZXNjcmlwdHVyYSBkZSBsYSBicmFuY2EgbG9jYWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NworbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAib2J0w6luIGRlIG3Dumx0aXBsZXMgcmVtb3RzIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTkgYnVpbHRpbi9wdWxsLmM6MTcyCittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAib2J0w6luIHRvdGVzIGxlcyBldGlxdWV0ZXMgaSB0b3RzIGVscyBvYmplY3RlcyBhc3NvY2lhdHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDEKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIm5vIG9idGluZ3VpcyBsZXMgZXRpcXVldGVzICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAzIGJ1aWx0aW4vcHVsbC5jOjE3NQorbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICJwb2RhIGxlcyBicmFucXVlcyBhbWIgc2VndWltZW50IHJlbW90IHF1ZSBqYSBubyBlc3RpZ3VpbiBlbiBlbCByZW1vdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNCBidWlsdGluL3B1bGwuYzoxNzgKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgInNvdGEgZGVtYW5kYSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNSBidWlsdGluL3B1bGwuYzoxNzkKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250cm9sYSBsJ29idGVuY2nDsyByZWN1cnNpdmEgZGUgc3VibcOyZHVscyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwOSBidWlsdGluL3B1bGwuYzoxODQKK21zZ2lkICJrZWVwIGRvd25sb2FkZWQgcGFjayIKK21zZ3N0ciAicmV0w6luIGVsIHBhcXVldCBiYWl4YXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTEKK21zZ2lkICJhbGxvdyB1cGRhdGluZyBvZiBIRUFEIHJlZiIKK21zZ3N0ciAicGVybWV0IGwnYWN0dWFsaXR6YWNpw7MgZGUgbGEgcmVmZXLDqG5jaWEgSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNCBidWlsdGluL3B1bGwuYzoxODcKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICJhcHJvZnVuZGVpeCBsYSBoaXN0w7JyaWEgZCd1biBjbG9uIHN1cGVyZmljaWFsIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2IGJ1aWx0aW4vcHVsbC5jOjE5MAorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICJjb252ZXJ0ZWl4IGVuIHVuIGRpcMOyc2l0IGNvbXBsZXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTggYnVpbHRpbi9sb2cuYzoxMjMzCittc2dpZCAiZGlyIgorbXNnc3RyICJkaXJlY3RvcmkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTkKK21zZ2lkICJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IgorbXNnc3RyICJhbnRlcG9zYSBhaXjDsiBhIGxhIHNvcnRpZGEgZGUgY2Ftw60gZGVsIHN1Ym3DsmR1bCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMgorbXNnaWQgImRlZmF1bHQgbW9kZSBmb3IgcmVjdXJzaW9uIgorbXNnc3RyICJtb2RlIGRlIHJlY3Vyc2l2aXRhdCBwZXIgZGVmZWN0ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyNCBidWlsdGluL3B1bGwuYzoxOTMKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgImFjY2VwdGEgbGVzIHJlZmVyw6huY2llcyBxdWUgYWN0dWFsaXR6aW4gLmdpdC9zaGFsbG93IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI1IGJ1aWx0aW4vcHVsbC5jOjE5NQorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAibWFwYSBkZSByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjYgYnVpbHRpbi9wdWxsLmM6MTk2Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgIm1vc3RyYSBlbCBtYXBhIGRlIHJlZmVyw6huY2llcyBkJ29idGVuY2nDsyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM3OAorbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRyb2JhciBsYSByZWZlcsOobmNpYSBIRUFEIHJlbW90YSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICJvYmplY3RlICVzIG5vIHRyb2JhdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ2MworbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW2FsIGRpYV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiISAlLSpzICUtKnMgLT4gJXMgIChjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCkiCittc2dzdHIgIiEgJS0qcyAlLSpzIC0+ICVzICAobm8gZXMgcG90IG9idGVuaXIgZW4gbGEgYnJhbmNhIGFjdHVhbCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NzggYnVpbHRpbi9mZXRjaC5jOjU2NAorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltyZWJ1dGphdF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0ODkKK21zZ2lkICJbdGFnIHVwZGF0ZV0iCittc2dzdHIgIlthY3R1YWxpdHphY2nDsyBkJ2V0aXF1ZXRhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ5MSBidWlsdGluL2ZldGNoLmM6NTI2IGJ1aWx0aW4vZmV0Y2guYzo1NDQKK21zZ2lkICIgICh1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZikiCittc2dzdHIgIiAgKG5vIHMnaGEgcG9ndXQgYWN0dWFsaXR6YXIgbGEgcmVmZXLDqG5jaWEgbG9jYWwpIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTA5Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJbZXRpcXVldGEgbm92YV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MTIKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIlticmFuY2Egbm92YV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MTUKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIltyZWZlcsOobmNpYSBub3ZhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU2MAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFjdHVhbGl0emFyIGxhIHJlZmVyw6huY2lhIGxvY2FsIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTYwCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiYWN0dWFsaXR6YWNpw7MgZm9yw6dhZGEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NjYKK21zZ2lkICIobm9uLWZhc3QtZm9yd2FyZCkiCittc2dzdHIgIihzZW5zZSBhdmFuw6cgcsOgcGlkKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwMCBidWlsdGluL2ZldGNoLmM6ODQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJubyBlcyBwb3Qgb2JyaXIgJXM6ICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyBubyBoYSBlbnZpYXQgdG90cyBlbHMgb2JqZWN0ZXMgbmVjZXNzYXJpc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIiIKKyJyZWJ1dGphICVzIHBlcnF1w6ggbm8gZXMgcGVybWV0IHF1ZSBsZXMgYXJyZWxzIHN1cGVyZmljaWFscyBzJ2FjdHVhbGl0emluIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzE1IGJ1aWx0aW4vZmV0Y2guYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIkRlICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisiYWxndW5lcyByZWZlcsOobmNpZXMgbG9jYWxzIG5vIHMnaGFuIHBvZ3V0IGFjdHVhbGl0emFyO1xuIgorIiBpbnRlbnRldSBleGVjdXRhciAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgcGVyIGEgZWxpbWluYXJcbiIKKyIgcXVhbHNldnVsbGEgYnJhbmNhIGFudGlnYSBvIGNvbmZsaWN0aXZhIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBlcyB0b3JuYXLDoCBwZW5qYW50KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBzJ2hhIHRvcm5hdCBwZW5qYW50KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMQorbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW3N1cHJpbWl0XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMiBidWlsdGluL3JlbW90ZS5jOjEwMzQKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIihjYXApIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVmdXNhbnQgb2J0ZW5pciBlbiBsYSBicmFuY2EgYWN0dWFsICVzIGQndW4gZGlww7JzaXQgbm8gbnUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiTCdvcGNpw7MgXCIlc1wiIGFtYiB2YWxvciBcIiVzXCIgbm8gw6lzIHbDoGxpZGEgcGVyIGEgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICJTJ2lnbm9yYSBsJ29wY2nDsyBcIiVzXCIgcGVyIGEgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIgorbXNnc3RyICJObyBzZSBzYXAgY29tIG9idGVuaXIgZGUgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIk9idGVuaW50ICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDczIGJ1aWx0aW4vcmVtb3RlLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDkxCittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJDYXAgZGlww7JzaXQgcmVtb3QgZXNwZWNpZmljYXQuIFNpIHVzIHBsYXUsIGVzcGVjaWZpcXVldSBvIHVuIFVSTCBvXG4iCisidW4gbm9tIHJlbW90IGRlbCBxdWFsIGVzIGRldWVuIG9idGVuaXIgbGVzIHJldmlzaW9ucyBub3Zlcy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTE0Cittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiTmVjZXNzaXRldSBlc3BlY2lmaWNhciB1biBub20gZCdldGlxdWV0YS4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU2Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi0tZGVwdGggaSAtLXVuc2hhbGxvdyBubyBlcyBwb2RlbiB1c2FyIGp1bnRzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1OAorbXNnaWQgIi0tdW5zaGFsbG93IG9uIGEgY29tcGxldGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXVuc2hhbGxvdyBlbiB1biBkaXDDsnNpdCBjb21wbGV0IG5vIHTDqSBzZW50aXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgxCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgImZldGNoIC0tYWxsIG5vIGFjY2VwdGEgdW4gcGFyw6BtZXRyZSBkZSBkaXDDsnNpdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExODMKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgImZldGNoIC0tYWxsIG5vIHTDqSBzZW50aXQgYW1iIGVzcGVjaWZpY2FjaW9ucyBkZSByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiTm8gaGkgaGEgdGFsIHJlbW90IG5pIHRhbCBncnVwIHJlbW90OiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMDIKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIk9idGVuaXIgdW4gZ3J1cCBpIGVzcGVjaWZpY2FyIHJlZmVyw6huY2llcyBubyB0w6kgc2VudGl0IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxNAorbXNnaWQgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtaXNzYXRnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaXR4ZXI+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcwCittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICJlbXBsZW5hIGVsIHJlZ2lzdHJlIGFtYiA8bj4gZW50cmFkZXMgZGVsIHJlZ2lzdHJlIGN1cnQgY29tIGEgbcOgeGltIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzMKK21zZ2lkICJhbGlhcyBmb3IgLS1sb2cgKGRlcHJlY2F0ZWQpIgorbXNnc3RyICLDoGxpZXMgcGVyIC0tbG9nIChkZXNhcHJvdmF0KSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc2Cittc2dpZCAidGV4dCIKK21zZ3N0ciAidGV4dCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc3Cittc2dpZCAidXNlIDx0ZXh0PiBhcyBzdGFydCBvZiBtZXNzYWdlIgorbXNnc3RyICJ1c2EgPHRleHQ+IGNvbSBhIGluaWNpIGRlIG1pc3NhdGdlIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzgKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAiZml0eGVyIGRlbCBxdWFsIGxsZWdpciIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo5Cittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wY2lvbnM+XSBbPHBhdHLDsz5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI0Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBzaGVsbHMiCittc2dzdHIgIiIKKyJwb3NhIGVscyBtYXJjYWRvcnMgZGUgcG9zaWNpw7MgZW50cmUgY29tZXRlcyBkZSBmb3JtYSBhZGVxdWFkYSBwZXIgYSAiCisiaW50w6hycHJldHMgZCdvcmRyZXMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjYKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgInBvc2EgZWxzIG1hcmNhZG9ycyBkZSBwb3NpY2nDsyBlbnRyZSBjb21ldGVzIGFkZXF1YWRlcyBwZXIgYWwgcGVybCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICJwb3NhIGVscyBtYXJjYWRvcnMgZGUgcG9zaWNpw7MgZW50cmUgY29tZXRlcyBhZGVxdWFkZXMgcGVyIGFsIHB5dGhvbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIgorbXNnc3RyICJwb3NhIGVscyBtYXJjYWRvcnMgZGUgcG9zaWNpw7MgZW50cmUgY29tZXRlcyBhZGVxdWFkZXMgcGVyIGFsIFRjbCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIDxuPiByZWZlcsOobmNpZXMgY29pbmNpZGVudHMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICJmb3JtYXQgYSB1c2FyIGVuIGxhIHNvcnRpZGEiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzUKK21zZ2lkICJrZXkiCittc2dzdHIgImNsYXUiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzYKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgIm5vbSBkZSBjYW1wIGVuIGVsIHF1YWwgb3JkZW5hciIKKworIzogYnVpbHRpbi9mc2NrLmM6MTYzIGJ1aWx0aW4vcHJ1bmUuYzoxMzcKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkiCittc2dzdHIgIkNvbXByb3ZhbnQgY29ubmVjdGl2aXRhdCIKKworIzogYnVpbHRpbi9mc2NrLmM6NTY4Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yaWVzIgorbXNnc3RyICJDb21wcm92YW50IGVscyBkaXJlY3RvcmlzIGQnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjMxCittc2dpZCAiZ2l0IGZzY2sgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IGZzY2sgWzxvcGNpb25zPl0gWzxvYmplY3RlPi4uLl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzNworbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhIGVscyBvYmplY3RlcyBpbmFiYXN0YWJsZXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzOAorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAibW9zdHJhIGVscyBvYmplY3RlcyBwZW5qYW50cyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM5Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgImluZm9ybWEgZGUgbGVzIGV0aXF1ZXRlcyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQwCittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgImluZm9ybWEgZGVscyBub2RlcyBkJ2FycmVsIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDEKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiZmVzIGVscyBvYmplY3RlcyBkJ8OtbmRleCBub2RlcyBkZSBjYXAiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MgorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiZmVzIHF1ZSBlbHMgcmVnaXN0cmVzIGRlIHJlZmVyw6huY2llcyBzaWd1aW4gbm9kZXMgZGUgY2FwIChwZXIgZGVmZWN0ZSkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MworbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJ0YW1iw6kgY29uc2lkZXJhIGVscyBwYXF1ZXRzIGkgZWxzIG9iamVjdGVzIGFsdGVybmF0aXVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDQKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiY29tcHJvdmEgbm9tw6lzIGxhIGNvbm5lY3Rpdml0YXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NQorbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAiaGFiaWxpdGEgbGEgY29tcHJvdmFjacOzIG3DqXMgZXN0cmljdGEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NworbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICJlc2NyaXUgb2JqZWN0ZXMgcGVuamFudHMgYSAuZ2l0L2xvc3QtZm91bmQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0OCBidWlsdGluL3BydW5lLmM6MTA3Cittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAibW9zdHJhIGVsIHByb2dyw6lzIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDcKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICJDb21wcm92YW50IGVscyBvYmplY3RlcyIKKworIzogYnVpbHRpbi9nYy5jOjI1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzxvcGNpb25zPl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIlcyBubyB2w6BsaWQ6ICVzIgorCisjOiBidWlsdGluL2djLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgb2JqZWN0IGRpcmVjdG9yeSAlLipzIgorbXNnc3RyICJkaXJlY3RvcmkgZCdvYmplY3RlcyBpbmNyZcOvYmxlbWVudCBsbGFyZyAlLipzIgorCisjOiBidWlsdGluL2djLmM6MjY5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgInBvZGEgb2JqZWN0ZXMgc2Vuc2UgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNzEKK21zZ2lkICJiZSBtb3JlIHRob3JvdWdoIChpbmNyZWFzZWQgcnVudGltZSkiCittc2dzdHIgInNpZ3VlcyBtw6lzIGV4aGF1c3RpdSAoZWwgdGVtcHMgZCdleGVjdWNpw7MgYXVnbWVudGEpIgorCisjOiBidWlsdGluL2djLmM6MjcyCittc2dpZCAiZW5hYmxlIGF1dG8tZ2MgbW9kZSIKK21zZ3N0ciAiaGFiaWxpdGEgZWwgbW9kZSBkZSByZWNvbGxpZGEgZCdlc2NvbWJyYXJpZXMgYXV0b23DoHRpY2EiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNzMKK21zZ2lkICJmb3JjZSBydW5uaW5nIGdjIGV2ZW4gaWYgdGhlcmUgbWF5IGJlIGFub3RoZXIgZ2MgcnVubmluZyIKK21zZ3N0ciAiZm9yw6dhIGwnZXhlY3VjacOzIGRlIGdjIGVuY2FyYSBxdWUgaGkgcHVndWkgaGF2ZXIgdW4gYWx0cmUgZ2MgZXhlY3V0YW50IgorCisjOiBidWlsdGluL2djLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisiRW1wYXF1ZXRhbnQgYXV0b23DoHRpY2FtZW50IGVsIGRpcMOyc2l0IGVuIGVsIGZvbnMgcGVyIHJlbmRpbWVudCDDsnB0aW0uXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICJFbXBhcXVldGFudCBhdXRvbcOgdGljYW1lbnQgZWwgZGlww7JzaXQgcGVyIHJlbmRpbWVudCDDsnB0aW0uXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAiVmVnZXUgXCJnaXQgaGVscCBnY1wiIHBlciBuZXRlamEgbWFudWFsLlxuIgorCisjOiBidWlsdGluL2djLmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICIiCisiZ2MgamEgZXN0w6AgZXhlY3V0YW50IGVuIGxhIG3DoHF1aW5hICclcycgcGlkICU8UFJJdU1BWD4gKHVzZXUgLS1mb3JjZSBzaSBubykiCisKKyM6IGJ1aWx0aW4vZ2MuYzozNjQKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIiIKKyJIaSBoYSBtYXNzYSBvYmplY3RlcyBzb2x0cyBpbmFiYXN0YWJsZXM7IGV4ZWN1dGV1ICdnaXQgcHJ1bmUnIHBlciBhIGVsaW1pbmFyLSIKKyJsb3MuIgorCisjOiBidWlsdGluL2dyZXAuYzoyMworbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGdyZXAgWzxvcGNpb25zPl0gWy1lXSA8cGF0csOzPiBbPHJldmlzacOzPi4uLl0gW1stLV0gPGNhbcOtPi4uLl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6IHMnaGEgZmFsbGF0IGVuIGNyZWFyIGZpbDogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ0MSBidWlsdGluL2dyZXAuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBsJ2FyYnJlICglcykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIGdyZXAgZGVzIGQndW4gb2JqZWN0ZSBkZSB0aXB1cyAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgImwnb3BjacOzIGAlYycgZXNwZXJhIHVuIHZhbG9yIG51bcOocmljIgorCisjOiBidWlsdGluL2dyZXAuYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IG9icmlyICclcyciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjYzOAorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgImNlcmNhIGVuIGwnw61uZGV4IGVuIGxsb2MgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBidWlsdGluL2dyZXAuYzo2NDAKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAiY2VyY2EgZW4gY29udGluZ3V0cyBubyBnZXN0aW9uYXRzIHBlciBnaXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0MgorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiY2VyY2EgdGFudCBlbiBmaXR4ZXJzIHNlZ3VpdHMgY29tIGVuIG5vIHNlZ3VpdHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0NAorbXNnaWQgImlnbm9yZSBmaWxlcyBzcGVjaWZpZWQgdmlhICcuZ2l0aWdub3JlJyIKK21zZ3N0ciAiaWdub3JhIGVscyBmaXR4ZXJzIGVzcGVjaWZpY2F0cyBtaXRqYW7Dp2FudCAnLmdpdGlnbm9yZSciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0NworbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJtb3N0cmEgbGVzIGzDrW5pZXMgbm8gY29pbmNpZGVudHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0OQorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgImNvaW5jaWTDqG5jaWEgaW5zZW5zaWJsZSBhIG1hasO6c2N1bGEgaSBtaW7DunNjdWxhIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTEKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAiY29pbmNpZGVpeCBhbWIgZWxzIHBhdHJvbnMgbm9tw6lzIGFscyBsw61taXRzIGRlIHBhcmF1bGEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgInByb2Nlc3NhIGVscyBmaXR4ZXJzIGJpbmFyaXMgY29tIGEgdGV4dCIKKworIzogYnVpbHRpbi9ncmVwLmM6NjU1Cittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICJubyBjb2luY2lkZWl4aXMgYW1iIGVscyBwYXRyb25zIGVuIGVscyBmaXR4ZXJzIGJpbmFyaXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1OAorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAicHJvY2Vzc2EgZWxzIGZpdHhlcnMgYmluYXJpcyBhbWIgZmlsdHJlcyBkZSB0ZXh0Y29udiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjYwCittc2dpZCAiZGVzY2VuZCBhdCBtb3N0IDxkZXB0aD4gbGV2ZWxzIgorbXNnc3RyICJkZXNjZW5kZWl4IGNvbSBhIG3DoHhpbSA8cHJvZnVuZGl0YXQ+IG5pdmVsbHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY2NAorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJ1c2EgbGVzIGV4cHJlc3Npb25zIHJlZ3VsYXJzIFBPU0lYIGVzdGVzZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY2NworbXNnaWQgInVzZSBiYXNpYyBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIChkZWZhdWx0KSIKK21zZ3N0ciAidXNhIGxlcyBleHByZXNzaW9ucyByZWd1bGFycyBQT1NJWCBiw6BzaXF1ZXMgKHBlciBkZWZlY3RlKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjcwCittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgImludGVycHJldGEgZWxzIHBhdHJvbnMgY29tIGEgY2FkZW5lcyBmaXhlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NjczCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJ1c2EgbGVzIGV4cHJlc3Npb25zIHJlZ3VsYXJzIGNvbXBhdGlibGVzIGFtYiBQZXJsIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzYKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAibW9zdHJhIGVscyBuw7ptZXJvcyBkZSBsw61uaWEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY3NworbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJubyBtb3N0cmlzIGVscyBub21zIGRlIGZpdHhlciIKKworIzogYnVpbHRpbi9ncmVwLmM6Njc4Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIm1vc3RyYSBlbHMgbm9tcyBkZSBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIm1vc3RyYSBlbHMgbm9tcyBkZSBmaXR4ZXIgcmVsYXRpdXMgYWwgZGlyZWN0b3JpIHN1cGVyaW9yIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODIKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIm1vc3RyYSBub23DqXMgZWxzIG5vbXMgZGUgZml0eGVyIGVuIGxsb2MgZGUgbGVzIGzDrW5pZXMgY29pbmNpZGVudHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICJzaW7Dsm5pbSBkZSAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Njg3Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIGVscyBub21zIGRlbHMgZml0eGVycyBzZW5zZSBjb2luY2lkw6huY2lhIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODkKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICJpbXByaW1laXggTlVMIGRlc3Byw6lzIGRlbHMgbm9tcyBkZSBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5MQorbXNnaWQgInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIm1vc3RyYSBlbCBub21icmUgZGUgY29pbmNpZMOobmNpZXMgZW4gbGxvYyBkZSBsZXMgbMOtbmllcyBjb2luY2lkZW50cyIKKworIzogYnVpbHRpbi9ncmVwLmM6NjkyCittc2dpZCAiaGlnaGxpZ2h0IG1hdGNoZXMiCittc2dzdHIgInJlc3NhbHRhIGxlcyBjb2luY2lkw6huY2llcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Njk0Cittc2dpZCAicHJpbnQgZW1wdHkgbGluZSBiZXR3ZWVuIG1hdGNoZXMgZnJvbSBkaWZmZXJlbnQgZmlsZXMiCittc2dzdHIgImltcHJpbWVpeCB1bmEgbMOtbmlhIGJ1aWRhIGVudHJlIGNvaW5jaWTDqG5jaWVzIGRlIGZpdHhlcnMgZGlzdGludHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5NgorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgIiIKKyJtb3N0cmEgZWwgbm9tIGRlIGZpdHhlciBub23DqXMgdW5hIHZlZ2FkYSBhIGRhbHQgZGUgbGVzIGNvaW5jaWTDqG5jaWVzIGRlbCAiCisibWF0ZWl4IGZpdHhlciIKKworIzogYnVpbHRpbi9ncmVwLmM6Njk5Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYSA8bj4gbMOtbmllcyBkZSBjb250ZXh0IGFiYW5zIGkgZGVzcHLDqXMgZCd1bmEgY29pbmNpZMOobmNpYSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzAyCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAibW9zdHJhIDxuPiBsw61uaWVzIGRlIGNvbnRleHQgYWJhbnMgZCd1bmEgY29pbmNpZMOobmNpYSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzA0Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICJtb3N0cmEgPG4+IGzDrW5pZXMgZGUgY29udGV4dCBkZXNwcsOpcyBkJ3VuYSBjb2luY2lkw6huY2lhIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDUKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICJkcmVjZXJhIHBlciAtQyBOVU0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwOAorbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIm1vc3RyYSB1bmEgbMOtbmlhIGFtYiBlbCBub20gZGUgZnVuY2nDsyBhYmFucyBkZSBsZXMgY29pbmNpZMOobmNpZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxMAorbXNnaWQgInNob3cgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIgorbXNnc3RyICJtb3N0cmEgbGEgZnVuY2nDsyBjaXJjdW1kYW50IgorCisjOiBidWlsdGluL2dyZXAuYzo3MTMKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAibGxlZ2VpeCBlbHMgcGF0cm9ucyBkZXMgZCd1biBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNQorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiY29pbmNpZGVpeCBhbWIgPHBhdHLDsz4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNworbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgImNvbWJpbmEgZWxzIHBhdHJvbnMgZXNwZWNpZmljYXRzIGFtYiAtZSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzI5Cittc2dpZCAiaW5kaWNhdGUgaGl0IHdpdGggZXhpdCBzdGF0dXMgd2l0aG91dCBvdXRwdXQiCittc2dzdHIgImluZGljYSBjb2luY2lkw6huY2lhIGFtYiBlc3RhdCBkZSBzb3J0aWRhIHNlbnNlIHNvcnRpZGEgdGV4dHVhbCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMxCittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAiIgorIm1vc3RyYSBub23DqXMgbGVzIGNvaW5jaWTDqG5jaWVzIGRlbHMgZml0eGVycyBxdWUgY29pbmNpZGVpeGluIGFtYiB0b3RzIGVscyAiCisicGF0cm9ucyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMzCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgIm1vc3RyYSBsJ2FyYnJlIGQnYW7DoGxpc2lzIGRlIGwnZXhwcmVzc2nDsyBkZSBncmVwIgorCisjOiBidWlsdGluL2dyZXAuYzo3MzcKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAicGFnaW5hZG9yIgorCisjOiBidWlsdGluL2dyZXAuYzo3MzcKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAibW9zdHJhIGVscyBmaXR4ZXJzIGNvaW5jaWRlbnRzIGVuIGVsIHBhZ2luYWRvciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQwCittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICJwZXJtZXQgbGEgaW52b2NhY2nDsyBkZSBncmVwKDEpIChpZ25vcmF0IHBlciBhcXVlc3RhIGNvbXBpbGFjacOzKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQxIGJ1aWx0aW4vc2hvdy1yZWYuYzoxODkKK21zZ2lkICJzaG93IHVzYWdlIgorbXNnc3RyICJtb3N0cmEgbCfDunMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwOAorbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4uIgorbXNnc3RyICJjYXAgcGF0csOzIGRvbmF0LiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY2Cittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgbm9tw6lzIGZ1bmNpb25hIGVuIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4LiIKK21zZ3N0ciAiLS1jYWNoZWQgbyAtLXVudHJhY2tlZCBubyBlcyBwb3QgdXNhciBhbWIgLS1uby1pbmRleC4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5NworbXNnaWQgIi0tbm8taW5kZXggb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCByZXZzLiIKK21zZ3N0ciAiLS1uby1pbmRleCBvIC0tdW50cmFja2VkIG5vIGVzIHBvdCB1c2FyIGFtYiByZXZpc2lvbnMuIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDAKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cy4iCittc2dzdHIgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIG5vIGVzIHBvdCB1c2FyIHBlciBhbHMgY29udGluZ3V0cyBzZWd1aXRzLiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA4Cittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuLiIKK21zZ3N0ciAicydoYW4gZG9uYXQgYW1iZMOzcyAtLWNhY2hlcyBpIGFyYnJlcy4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4MAorbXNnaWQgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDx0eXBlPl0gWy13XSBbLS1wYXRoPTxmaWxlPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHRpcHVzPl0gWy13XSBbLS1wYXRoPTxmaXR4ZXI+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpdHhlcj4uLi4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4MQorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIDwgPGxsaXN0YS1kZS1jYW1pbnM+IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTIgYnVpbHRpbi90YWcuYzo2MTQKK21zZ2lkICJ0eXBlIgorbXNnc3RyICJ0aXB1cyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjkyCittc2dpZCAib2JqZWN0IHR5cGUiCittc2dzdHIgInRpcHVzIGQnb2JqZWN0ZSIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjkzCittc2dpZCAid3JpdGUgdGhlIG9iamVjdCBpbnRvIHRoZSBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgImVzY3JpdSBsJ29iamVjdGUgYSBsYSBiYXNlIGRlIGRhZGVzIGQnb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICJsbGVnZWl4IGwnb2JqZWN0ZSBkZXMgZCdzdGRpbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk3Cittc2dpZCAic3RvcmUgZmlsZSBhcyBpcyB3aXRob3V0IGZpbHRlcnMiCittc2dzdHIgImVtbWFnYXR6ZW1hIGVsIGZpdHhlciB0YWwgY29tIMOpcyBzZW5zZSBmaWx0cmVzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICIiCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICIiCisibm9tw6lzIHN1bWEgcXVhbHNldnVsbGEgYnJvc3NhIGFsZWF0w7JyaWEgcGVyIGEgY3JlYXIgb2JqZWN0ZXMgbWFsbWVzb3MgcGVyIGEgIgorImRlcHVyYXIgYWwgR2l0IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAicHJvY2Vzc2EgZWwgZml0eGVyIGNvbSBzaSBmb3MgZCdhcXVlc3QgY2Ftw60iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQxCittc2dpZCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIKK21zZ3N0ciAiaW1wcmltZWl4IHRvdGVzIGxlcyBvcmRyZXMgZGlzcG9uaWJsZXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQyCittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICJpbXByaW1laXggbGEgbGxpc3RhIGRlIGd1aWVzIMO6dGlscyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJtb3N0cmEgbGEgcMOgZ2luYSBkZSBtYW51YWwiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0Cittc2dpZCAic2hvdyBtYW51YWwgaW4gd2ViIGJyb3dzZXIiCittc2dzdHIgIm1vc3RyYSBsYSBww6BnaW5hIGRlIG1hbnVhbCBlbiBlbCBuYXZlZ2Fkb3Igd2ViIgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICJtb3N0cmEgbGEgcMOgZ2luYSBkJ2luZm9ybWFjacOzIgorCisjOiBidWlsdGluL2hlbHAuYzo1MgorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxvcmRyZT5dIgorCisjOiBidWlsdGluL2hlbHAuYzo2NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVscCBmb3JtYXQgJyVzJyIKK21zZ3N0ciAiZm9ybWF0IGQnYWp1ZGEgbm8gcmVjb25lZ3V0ICclcyciCisKKyM6IGJ1aWx0aW4vaGVscC5jOjkxCittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiUydoYSBmYWxsYXQgZW4gaW5pY2lhciBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwNAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiUydoYSBmYWxsYXQgZW4gYW5hbGl0emFyIGxhIHZlcnNpw7MgZCdlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJsYSB2ZXJzacOzIGQnZW1hY3NjbGllbnQgJyVkJyDDqXMgbWFzc2EgdmVsbGEgKDwgMjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTMwIGJ1aWx0aW4vaGVscC5jOjE1OCBidWlsdGluL2hlbHAuYzoxNjcgYnVpbHRpbi9oZWxwLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyc6ICVzIgorbXNnc3RyICJzJ2hhIGZhbGxhdCBlbiBleGVjdXRhciAnJXMnOiAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBwYXRoIGZvciB1bnN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzogY2Ftw60gYSB1biB2aXN1YWxpdHphZG9yIGRlIG1hbnVhbHMgbm8gY29tcGF0aWJsZS5cbiIKKyJTaSB1cyBwbGF1LCBjb25zaWRlcmV1IHVzYXIgJ21hbi48ZWluYT4uY21kJyBlbiBsbG9jIGQnYWl4w7IuIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzogb3JkcmUgcGVyIGEgdW4gdmlzdWFsaXR6YWRvciBkZSBtYW51YWxzIGNvbXBhdGlibGUuXG4iCisiU2kgdXMgcGxhdSwgY29uc2lkZXJldSB1c2FyICdtYW4uPGVpbmE+LnBhdGgnIGVuIGxsb2MgZCdhaXjDsi4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICInJXMnOiB2aXN1YWxpdHphZG9yIGRlIG1hbnVhbHMgZGVzY29uZWd1dCIKKworIzogYnVpbHRpbi9oZWxwLmM6MzcxCittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJjYXAgdmlzdWFsaXR6YWRvciBkZSBtYW51YWxzIGhhIGdlc3Rpb25hdCBsYSBzb2zCt2xpY2l0dWQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3OQorbXNnaWQgIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImNhcCB2aXN1YWxpdHphZG9yIGQnaW5mb3JtYWNpw7MgaGEgZ2VzdGlvbmF0IGxhIHNvbMK3bGljaXR1ZCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDI4Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAiTGEgZGVmaW5pY2nDsyBkJ2F0cmlidXRzIHBlciBjYW3DrSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDI5Cittc2dpZCAiRXZlcnlkYXkgR2l0IFdpdGggMjAgQ29tbWFuZHMgT3IgU28iCittc2dzdHIgIkdpdCBxdW90aWRpw6AgYW1iIG3DqXMgbyBtZW55cyAyMCBvcmRyZXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMAorbXNnaWQgIkEgR2l0IGdsb3NzYXJ5IgorbXNnc3RyICJVbiBnbG9zc2FyaSBkZSBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMQorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIkVzcGVjaWZpY2EgZWxzIGZpdHhlcnMgaW50ZW5jaW9uYWxtZW50IG5vIHNlZ3VpdHMgYSBpZ25vcmFyIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzIKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiTGEgZGVmaW5pY2nDsyBkZSBsZXMgcHJvcGlldGF0cyBkZSBzdWJtw7JkdWxzIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzMKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIkwnZXNwZWNpZmljYWNpw7MgZGUgcmV2aXNpb25zIGkgcmFuZ3MgcGVyIGFsIEdpdCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDM0Cittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0IChmb3IgdmVyc2lvbiAxLjUuMSBvciBuZXdlcikiCittc2dzdHIgIlVuYSBpbnRyb2R1Y2Npw7MgdHV0b3JpYWwgYWwgR2l0IChwZXIgYSBsYSB2ZXJzacOzIDEuNS4xIG8gbcOpcyBub3UpIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzUKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgIlVuYSB2aXNpw7MgZGUgY29uanVudCBkZSBmbHV4b3MgZGUgdHJlYmFsbCByZWNvbWFuYXRzIGFtYiBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0NworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6XG4iCittc2dzdHIgIkxlcyBndWllcyBkZSBHaXQgY29tdW5lcyBzw7NuOlxuIgorCisjOiBidWlsdGluL2hlbHAuYzo0NjggYnVpbHRpbi9oZWxwLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICLDunM6ICVzJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJgZ2l0ICVzJyBpcyBhbGlhc2VkIHRvIGAlcyciCittc2dzdHIgImBnaXQgJXMnIMOpcyB1biDDoGxpZXMgZGUgYCVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IG9icmlyICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgImhpIGhhIHVuYSBkaXNjb3JkYW7Dp2EgZGUgdGlwdXMgZCdvYmplY3RlIGEgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHJlY2VpdmUgZXhwZWN0ZWQgb2JqZWN0ICVzIgorbXNnc3RyICJubyBzJ2hhIHJlYnV0IGwnb2JqZWN0ZSBlc3BlcmF0ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzOiBleHBlY3RlZCB0eXBlICVzLCBmb3VuZCAlcyIKK21zZ3N0ciAib2JqZWN0ZSAlczogdGlwdXMgJXMgZXNwZXJhdCwgJXMgdHJvYmF0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gIm5vIGVzIHBvdCBvbXBsaXIgJWQgb2N0ZXQiCittc2dzdHJbMV0gIm5vIGVzIHBvdCBvbXBsaXIgJWQgb2N0ZXRzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNzcKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgIkVPRiBwcmVtYXR1ciIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc4Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiZXJyb3IgZGUgbGVjdHVyYSBkJ2VudHJhZGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MAorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICJzJ2hhbiB1c2F0IG3DqXMgb2N0ZXRzIHF1ZSBoaSBoYXZpYSBkaXNwb25pYmxlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjk3Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAicGFxdWV0IG1hc3NhIGdyYW4gcGVyIGEgbGEgZGVmaW5pY2nDsyBhY3R1YWwgZCdvZmZfdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGNyZWFyICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3Qgb2JyaXIgZWwgZml0eGVyIGRlIHBhcXVldCAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMzIKK21zZ2lkICJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIKK21zZ3N0ciAiaGkgaGEgdW5hIGRpc2NvcmRhbsOnYSBkZSBmaXJtYSBkZSBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICJsYSB2ZXJzacOzIGRlIHBhcXVldCAlPFBSSXUzMj4gbm8gw6lzIGNvbXBhdGlibGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlbHU6ICVzIgorbXNnc3RyICJlbCBwYXF1ZXQgdMOpIHVuIG9iamVjdGUgZG9sZW50IGEgbGEgcG9zaWNpw7MgJWx1OiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgImluZmxhdGUgcmV0dXJuZWQgJWQiCittc2dzdHIgImxhIGluZmxhY2nDsyBoYSByZXRvcm5hdCAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIyCittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAiZGVzYm9yZGFtZW50IGRlIHZhbG9yIGRlIGRlc3BsYcOnYW1lbnQgcGVyIGEgbCdvYmplY3RlIGJhc2UgZGUgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIKK21zZ3N0ciAiZWwgZGVzcGxhw6dhbWVudCBkZSBiYXNlIGRlIGRlbHRhIGVzdMOgIGZvcmEgZGUgbMOtbWl0cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgInRpcHVzIGQnb2JqZWN0ZSBkZXNjb25lZ3V0ICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjkKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICJubyBlcyBwb3QgZmVyIHByZWFkIGVuIGVsIGZpdHhlciBkZSBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJmaW5hbCBwcmVtYXR1ciBkZSBmaXR4ZXIgZGUgcGFxdWV0LCBtYW5jYSAlbHUgb2N0ZXQiCittc2dzdHJbMV0gImZpbmFsIHByZW1hdHVyIGRlIGZpdHhlciBkZSBwYXF1ZXQsIG1hbnF1ZW4gJWx1IG9jdGV0cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTk3Cittc2dpZCAic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiCittc2dzdHIgImhpIGhhIHVuYSBpbmNvbnNpc3TDqG5jaWEgc2VyaW9zYSBkJ2luZmxhY2nDsyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0OSBidWlsdGluL2luZGV4LXBhY2suYzo3NzIKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwNiBidWlsdGluL2luZGV4LXBhY2suYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICJTJ0hBIFRST0JBVCBVTkEgQ09MwrdMSVNJw5MgU0hBMSBBTUIgJXMgISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTYyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgIm5vIGVzIHBvdCBsbGVnaXIgbCdvYmplY3RlIGV4aXN0ZW50ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAib2JqZWN0ZSBkZSBibG9iIG5vIHbDoGxpZCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIiVzIG5vIHbDoGxpZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQzCittc2dpZCAiRXJyb3IgaW4gb2JqZWN0IgorbXNnc3RyICJFcnJvciBlbiBvYmplY3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIk5vIHRvdHMgZWxzIG9iamVjdGVzIGZpbGxzIGRlICVzIHPDs24gYWJhc3RhYmxlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTE3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk0OAorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAicydoYSBmYWxsYXQgZW4gYXBsaWNhciBsYSBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICJSZWJlbnQgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICJJbmRleGFudCBvYmplY3RlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1MAorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAiZWwgcGFxdWV0IMOpcyBtYWxtw6hzIChkaXNjb3JkYW7Dp2EgU0hBMSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTUKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCBmZXIgZnN0YXQgZW4gZWwgZml0eGVyIGRlIHBhcXVldCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1OAorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAiZWwgcGFxdWV0IHTDqSBicm9zc2EgYWwgc2V1IGZpbmFsIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTY5Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKK21zZ3N0ciAiY29uZnVzacOzIG3DqXMgZW5sbMOgIGRlIGxhIGJvZ2VyaWEgZW4gcGFyc2VfcGFja19vYmplY3RzKCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExOTQKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICJSZXNvbGVudCBsZXMgZGVsdGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjA1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBjcmVhciBmaWw6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ3Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAiY29uZnVzacOzIG3DqXMgZW5sbMOgIGRlIGxhIGJvZ2VyaWEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0ciAicydoYSBjb21wbGV0YXQgYW1iICVkIG9iamVjdGVzIGxvY2FscyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHRhaWwgY2hlY2tzdW0gZm9yICVzIChkaXNrIGNvcnJ1cHRpb24/KSIKK21zZ3N0ciAiU3VtYSBkZSB2ZXJpZmljYWNpw7MgZmluYWwgbm8gZXNwZXJhZGEgcGVyIGEgJXMgKGNvcnJ1cGNpw7MgZGUgZGlzYz8pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICJFbCBwYXF1ZXQgdMOpICVkIGRlbHRhIG5vIHJlc29sdGEiCittc2dzdHJbMV0gIkVsIHBhcXVldCB0w6kgJWQgZGVsdGVzIG5vIHJlc29sdGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGRlc2luZmxhciBsJ29iamVjdGUgYW5uZXhhdCAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICJsJ29iamVjdGUgbG9jYWwgJXMgw6lzIG1hbG3DqHMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzOTEKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAiZXJyb3IgZW4gdGFuY2FyIGVsIGZpdHhlciBkZSBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlIGtlZXAgZmlsZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgZXNjcml1cmUgZWwgZml0eGVyIGEgcmV0ZW5pciAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjbG9zZSB3cml0dGVuIGtlZXAgZmlsZSAnJXMnIgorbXNnc3RyICJubyBlcyBwb3QgdGFuY2FyIGVsIGZpdHhlciBlc2NyaXQgYSByZXRlbmlyICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MjUKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJubyBlcyBwb3QgZW1tYWdhdHplbWFyIGVsIGZpdHhlciBkZSBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzYKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAibm8gZXMgcG90IGVtbWFnYXR6ZW1hciBlbCBmaXR4ZXIgZCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAicGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IGRvbGVudCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG51bWJlciBvZiB0aHJlYWRzIHNwZWNpZmllZCAoJWQpIgorbXNnc3RyICJzJ2hhIGVzcGVjaWZpY2F0IHVuIG5vbWJyZSBkZSBmaWxzIG5vIHbDoGxpZCAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAibm8gaGkgaGEgc3Vwb3J0IGRlIGZpbHMsIGlnbm9yYW50ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJObyBlcyBwb3Qgb2JyaXIgZWwgZml0eGVyIGRlIHBhcXVldCBleGlzdGVudCAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIk5vIGVzIHBvdCBvYnJpciBlbCBmaXR4ZXIgZCfDrW5kZXggZGUgcGFxdWV0cyBleGlzdGVudCBkZSAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gInNlbnNlIGRlbHRhOiAlZCBvYmplY3RlIgorbXNnc3RyWzFdICJzZW5zZSBkZWx0YTogJWQgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAibG9uZ2l0dWQgZGUgY2FkZW5hID0gJWQ6ICVsdSBvYmplY3RlIgorbXNnc3RyWzFdICJsb25naXR1ZCBkZSBjYWRlbmEgPSAlZDogJWx1IG9iamVjdGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjIzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIk5vIGVzIHBvdCB0b3JuYXIgYWwgZGlyZWN0b3JpIGRlIHRyZWJhbGwgYWN0dWFsIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjc1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NzgKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2OTAgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgIiVzIGRvbGVudCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcwOAorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIG5vIGVzIHBvdCB1c2FyIHNlbnNlIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MTIgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAiZWwgbm9tIGRlIGZpdHhlciBkZSBwYXF1ZXQgJyVzJyBubyBhY2FiYSBhbWIgJy5wYWNrJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyOQorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAicydoYSBkb25hdCAtLXZlcmlmeSBzZW5zZSBub20gZGUgZml0eGVyIGRlIHBhcXVldCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZmVyICVzIGVzY3JpdmlibGUgcGVsIGdydXAiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgbmFtZSAlcyIKK21zZ3N0ciAibm9tIGRlIHBsYW50aWxsYSBpbmNyZcOvYmxlbWVudCBsbGFyZyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGZlciBzdGF0IGVuICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgIm5vIGVzIHBvdCBmZXIgc3RhdCBlbiBsYSBwbGFudGlsbGEgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGZlciBvcGVuZGlyIGVuIGVsIGRpcmVjdG9yaSAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGZlciByZWFkbGluayBlbiAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIgorbXNnc3RyICJlbmxsYcOnIHNpbWLDsmxpYyBpbmNyZcOvYmxlbWVudCBsbGFyZyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGZlciBzeW1saW5rIGVuICclcycgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGNvcGlhciAnJXMnIGEgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICJpZ25vcmFudCBsYSBwbGFudGlsbGEgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIHBhdGggJXMiCittc2dzdHIgImNhbcOtIGRlIHBsYW50aWxsYSBpbmNyZcOvYmxlbWVudCBsbGFyZyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgJXMiCittc2dzdHIgIm5vIHMnaGFuIHRyb2JhdCBsZXMgcGxhbnRpbGxlcyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBvZiBhIHdyb25nIGZvcm1hdCB2ZXJzaW9uICVkIGZyb20gJyVzJyIKK21zZ3N0ciAibm8gY29waWFudCBwbGFudGlsbGVzIGQndW5hIHZlcnNpw7MgZGUgZm9ybWF0IGVycsOybmlhICVkIGRlICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgZ2l0IGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiZGlyZWN0b3JpIGRlIGdpdCBib2lnICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNDQgYnVpbHRpbi9pbml0LWRiLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIlcyBqYSBleGlzdGVpeCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGdlc3Rpb25hciBlbCB0aXB1cyBkZSBmaXR4ZXIgJWQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBtb3VyZSAlcyBhICVzIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCisjLiBleGlzdGluZyIgb3IgIkluaXRpYWxpemVkIGVtcHR5IiwgdGhlIHNlY29uZCAiIHNoYXJlZCIgb3IKKyMuICIiLCBhbmQgdGhlIGxhc3QgJyVzJXMnIGlzIHRoZSB2ZXJiYXRpbSBkaXJlY3RvcnkgbmFtZS4KKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyVzIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiJXMgZGlww7JzaXQgZGUgR2l0JXMgYSAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNQorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCittc2dzdHIgIlMnaGEgcmVpbmljaWFsaXR6YXQgdW4gZXhpc3RlbnQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNQorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICJTJ2hhIGluaWNpYWxpdHphdCB1biBidWl0IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MzYKK21zZ2lkICIgc2hhcmVkIgorbXNnc3RyICIgY29tcGFydGl0IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0ODMKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PGRpcmVjdG9yaS1kZS1wbGFudGlsbGE+XSBbLS0iCisic2hhcmVkWz08cGVybWlzb3M+XV0gWzxkaXJlY3Rvcmk+XSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTA2Cittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgInBlcm1pc29zIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MDcKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgImVzcGVjaWZpY2EgcXVlIGVsIGRpcMOyc2l0IGRlIGdpdCBlcyBjb21wYXJ0aXLDoCBlbnRyZSBkaXZlcnNvcyB1c3VhcmlzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NDEgYnVpbHRpbi9pbml0LWRiLmM6NTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAibm8gZXMgcG90IG1rZGlyICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICJubyBlcyBwb3QgY2hkaXIgYSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKyJubyBlcyBwZXJtZXQgJXMgKG8gLS13b3JrLXRyZWU9PGRpcmVjdG9yaT4pIHNlbnNlIGVzcGVjaWZpY2FyICVzIChvIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yaT4pIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiTm8gZXMgcG90IGFjY2VkaXIgYSBsJ2FyYnJlIGRlIHRyZWJhbGwgJyVzJyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNQorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyIDx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dICIKKyJbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgPGZpdHhhPlsoPXw6KTx2YWxvcj5dKS4uLl0gIgorIls8Zml0eGVyPi4uLl0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MjUKK21zZ2lkICJ0cmltIGVtcHR5IHRyYWlsZXJzIgorbXNnc3RyICJlc2N1csOnYSBlbHMgcmVtb2xjcyBidWl0cyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoyNgorbXNnaWQgInRyYWlsZXIiCittc2dzdHIgInJlbW9sYyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoyNworbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICJyZW1vbGNzIGEgYWZlZ2lyIgorCisjOiBidWlsdGluL2xvZy5jOjQzCittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBbPG9wY2lvbnM+XSBbPHJhbmctZGUtcmV2aXNpb25zPl0gW1stLV0gPGNhbcOtPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDQKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxvcGNpb25zPl0gPG9iamVjdGU+Li4uIgorCisjOiBidWlsdGluL2xvZy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICJvcGNpw7MgLS1kZWNvcmF0ZSBubyB2w6BsaWRhOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzEKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAib21ldCBsYSBzb3J0aWRhIGRlIGRpZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzIKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAibW9zdHJhIGxhIGZvbnQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzCittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgIlVzYSBlbCBmaXR4ZXIgZGUgbWFwYSBkZSBjb3JyZXUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM0Cittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAib3BjaW9ucyBkZSBkZWNvcmFjacOzIgorCisjOiBidWlsdGluL2xvZy5jOjEzNworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJQcm9jZXNzYSBlbCByYW5nIGRlIGzDrW5pZXMgbixtIGVuIGVsIGZpdHhlciwgY29tcHRhbnQgZGVzIGQnMSIKKworIzogYnVpbHRpbi9sb2cuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJTb3J0aWRhIGZpbmFsOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiBmaXR4ZXIgZG9sZW50IgorCisjOiBidWlsdGluL2xvZy5jOjQ3OSBidWlsdGluL2xvZy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIk5vIGVzIHBvdCBsbGVnaXIgbCdvYmplY3RlICVzIgorCisjOiBidWlsdGluL2xvZy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHR5cGU6ICVkIgorbXNnc3RyICJUaXB1cyBkZXNjb25lZ3V0OiAlZCIKKworIzogYnVpbHRpbi9sb2cuYzo3MTQKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyBzZW5zZSB2YWxvciIKKworIzogYnVpbHRpbi9sb2cuYzo3OTgKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgImVsIG5vbSBkZWwgZGlyZWN0b3JpIGRlIHNvcnRpZGEgw6lzIG1hc3NhIGxsYXJnIgorCisjOiBidWlsdGluL2xvZy5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICJObyBlcyBwb3Qgb2JyaXIgZWwgZml0eGVyIGRlIHBlZGHDpyAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo4MjgKK21zZ2lkICJOZWVkIGV4YWN0bHkgb25lIHJhbmdlLiIKK21zZ3N0ciAiQ2FsIGV4YWN0YW1lbnQgdW4gcmFuZy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODM4Cittc2dpZCAiTm90IGEgcmFuZ2UuIgorbXNnc3RyICJObyDDqXMgdW4gcmFuZy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTQ0Cittc2dpZCAiQ292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAiTGEgY2FydGEgZGUgcHJlc2VudGFjacOzIG5lY2Vzc2l0YSBlbCBmb3JtYXQgZGUgY29ycmV1IGVsZWN0csOybmljIgorCisjOiBidWlsdGluL2xvZy5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAiaW4tcmVwbHktdG8gYm9pZzogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA1MQorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wY2lvbnM+XSBbPGRlcy1kZT4gfCA8cmFuZy1kZS1yZXZpc2lvbnM+XSIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk2Cittc2dpZCAiVHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgIkRvcyBkaXJlY3RvcmlzIGRlIHNvcnRpZGE/IgorCisjOiBidWlsdGluL2xvZy5jOjEyMTEKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICJ1c2EgW1BBVENIIG4vbV0gZmlucyBpIHRvdCBhbWIgdW4gc29sIHBlZGHDpyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE0Cittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgInVzYSBbUEFUQ0hdIGZpbnMgaSB0b3QgYW1iIG3Dumx0aXBsZXMgcGVkYcOnb3MiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxOAorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICJpbXByaW1laXggZWxzIHBlZGHDp29zIGEgbGEgc29ydGlkYSBlc3TDoG5kYXJkIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjAKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAiZ2VuZXJhIHVuYSBjYXJ0YSBkZSBwcmVzZW50YWNpw7MiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMgorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAidXNhIHVuYSBzZXHDvMOobmNpYSBkZSBuw7ptZXJvcyBwZXIgYWxzIG5vbXMgZGVscyBmaXR4ZXJzIGRlIHNvcnRpZGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMworbXNnaWQgInNmeCIKK21zZ3N0ciAic3VmaXgiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyNAorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICJ1c2EgPHN1Zml4PiBlbiBsbG9jIGRlICcucGF0Y2gnIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjYKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICJjb21lbsOnYSBudW1lcmFudCBlbHMgcGVkYcOnb3MgYSA8bj4gZW4gbGxvYyBkJzEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyOAorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAibWFyY2EgbGEgc8OocmllIGNvbSBhIGwnZW7DqHNpbWEgbGxhbsOnYWRhIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzAKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIlVzYSBbPHByZWZpeD5dIGVuIGxsb2MgZGUgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjMzCittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICJlbW1hZ2F0emVtYSBlbHMgZml0eGVycyByZXN1bHRhbnRzIGEgPGRpcmVjdG9yaT4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzNgorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICJubyBkZXNwdWxsaXMvYWZlZ2VpeGlzIFtQQVRDSF0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzOQorbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgIm5vIGVtZXRpcyBkaWZlcsOobmNpZXMgYmluw6ByaWVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDEKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgIm5vIGluY2xvZ3VpcyBwZWRhw6dvcyBxdWUgY29pbmNpZGVpeGluIGFtYiBjb21pc3Npb25zIGEgbGEgZm9udCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQzCittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICIiCisibW9zdHJhIGVsIGZvcm1hdCBkZSBwZWRhw6cgZW4gbGxvYyBkZWwgcGVyIGRlZmVjdGUgKHBlZGHDpyArIGVzdGFkw61zdGlxdWVzKSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ1Cittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICJNaXNzYXRnZXJpYSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ2Cittc2dpZCAiaGVhZGVyIgorbXNnc3RyICJjYXDDp2FsZXJhIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDcKK21zZ2lkICJhZGQgZW1haWwgaGVhZGVyIgorbXNnc3RyICJhZmVnZWl4IHVuYSBjYXDDp2FsZXJhIGRlIGNvcnJldSBlbGVjdHLDsm5pYyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ4IGJ1aWx0aW4vbG9nLmM6MTI1MAorbXNnaWQgImVtYWlsIgorbXNnc3RyICJjb3JyZXUgZWxlY3Ryw7JuaWMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0OAorbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICJhZmVnZWl4IGxhIGNhcMOnYWxlcmEgVG86IgorCisjOiBidWlsdGluL2xvZy5jOjEyNTAKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiYWZlZ2VpeCBsYSBjYXDDp2FsZXJhIENjOiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjUyCittc2dpZCAiaWRlbnQiCittc2dzdHIgImlkZW50aXRhdCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjUzCittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAiIgorImVzdGFibGVpeCBsJ2FkcmXDp2EgRnJvbSBhIDxpZGVudGl0YXQ+IChvIGxhIGlkZW50aXRhdCBkZWwgY29taXRlbnQgc2kgbWFuY2EpIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTUKK21zZ2lkICJtZXNzYWdlLWlkIgorbXNnc3RyICJJRCBkZSBtaXNzYXRnZSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU2Cittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICJmZXMgZGVsIHByaW1lciBtaXNzYXRnZSB1bmEgcmVzcG9zdGEgYSA8SUQgZGUgbWlzc2F0Z2U+IgorCisjOiBidWlsdGluL2xvZy5jOjEyNTcgYnVpbHRpbi9sb2cuYzoxMjYwCittc2dpZCAiYm91bmRhcnkiCittc2dzdHIgImzDrW1pdCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU4Cittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAiYWp1bnRhIGVsIHBlZGHDpyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjYxCittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAicG9zYSBlbCBwZWRhw6cgZW4gZWwgY29zIgorCisjOiBidWlsdGluL2xvZy5jOjEyNjUKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiaGFiaWxpdGEgbCdlbmZpbGFkYSBkZSBtaXNzYXRnZXMsIGVzdGlsczogc2hhbGxvdywgZGVlcCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjY3Cittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICJmaXJtYSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjY4Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICJhZmVnZWl4IHVuYSBmaXJtYSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjcwCittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICJhZmVnZWl4IHVuYSBmaXJtYSBkZXMgZCd1biBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI3MQorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgIm5vIGltcHJpbWVpeGlzIGVscyBub21zIGRlIGZpdHhlciBkZWwgcGVkYcOnIgorCisjOiBidWlsdGluL2xvZy5jOjEzNjAKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIi1uIGkgLWsgc8OzbiBtdXR1YWxtZW50IGV4Y2x1c2l1cy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM2MgorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXggYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItLXN1YmplY3QtcHJlZml4IGkgLWsgc8OzbiBtdXR1YWxtZW50IGV4Y2x1c2l1cy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3MAorbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1vbmx5IG5vIHTDqSBzZW50aXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3MgorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLXN0YXR1cyBubyB0w6kgc2VudGl0IgorCisjOiBidWlsdGluL2xvZy5jOjEzNzQKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sgbm8gdMOpIHNlbnRpdCIKKworIzogYnVpbHRpbi9sb2cuYzoxMzk3Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgInNvcnRpZGEgZXN0w6BuZGFyZCBvIGRpcmVjdG9yaSwgcXVpbiBkZWxzIGRvcz8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIGRpcmVjdG9yaSAnJXMnIgorCisjOiBidWlsdGluL2xvZy5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgZml0eGVyIGRlIGZpcm1hICclcyciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTU1OQorbXNnaWQgIkZhaWxlZCB0byBjcmVhdGUgb3V0cHV0IGZpbGVzIgorbXNnc3RyICJTJ2hhIGZhbGxhdCBlbiBjcmVhciBlbHMgZml0eGVycyBkZSBzb3J0aWRhIgorCisjOiBidWlsdGluL2xvZy5jOjE2MDcKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs8Zm9udD4gWzxjYXA+IFs8bMOtbWl0Pl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgdHJvYmFyIHVuYSBicmFuY2EgcmVtb3RhIHNlZ3VpZGEuIFNpIHVzIHBsYXUsIGVzcGVjaWZpcXVldSAiCisiPGZvbnQ+IG1hbnVhbG1lbnQuXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY3MiBidWlsdGluL2xvZy5jOjE2NzQgYnVpbHRpbi9sb2cuYzoxNjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICJDb21pc3Npw7MgZGVzY29uZWd1ZGEgJXMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzozNTgKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBscy1maWxlcyBbPG9wY2lvbnM+XSBbPGZpdHhlcj4uLi5dIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDE1Cittc2dpZCAiaWRlbnRpZnkgdGhlIGZpbGUgc3RhdHVzIHdpdGggdGFncyIKK21zZ3N0ciAiaWRlbnRpZmljYSBsJ2VzdGF0IGRlIGZpdHhlciBhbWIgZXRpcXVldGVzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDE3Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgInVzYSBsbGV0cmVzIG1pbsO6c2N1bGVzIHBlciBhbHMgZml0eGVycyAnYXNzdW1lIHVuY2hhbmdlZCciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTkKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAiIgorIm1vc3RyYSBlbiBsYSBzb3J0aWRhIGVscyBmaXR4ZXJzIGRlc2F0cyBlbiBsYSBtZW3DsnJpYSBjYXUgKHBlciBkZWZlY3RlKSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyMQorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmEgZW4gbGEgc29ydGlkYSBlbHMgZml0eGVycyBzdXByaW1pdHMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjMKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYSBlbiBsYSBzb3J0aWRhIGVscyBmaXR4ZXJzIG1vZGlmaWNhdHMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjUKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm1vc3RyYSBlbiBsYSBzb3J0aWRhIGVscyBhbHRyZXMgZml0eGVycyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyNworbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmEgZW4gbGEgc29ydGlkYSBlbHMgZml0eGVycyBpZ25vcmF0cyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzMAorbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJtb3N0cmEgZW4gbGEgc29ydGlkYSBlbCBub20gZCdvYmplY3RlIGRlbHMgY29udGluZ3V0cyBhbGxpc3RhdHMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzIKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICJtb3N0cmEgZWxzIGZpdHhlcnMgZW4gZWwgc2lzdGVtYSBkZSBmaXR4ZXJzIHF1ZSBzJ2hhbiBkJ2VsaW1pbmFyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDM0Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIGVscyBub21zIGRlbHMgZGlyZWN0b3JpcyAnb3RoZXInIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDM3Cittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAibm8gbW9zdHJpcyBlbHMgZGlyZWN0b3JpcyBidWl0cyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0MAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAibW9zdHJhIGVuIGxhIHNvcnRpZGEgZWxzIGZpdHhlcnMgc2Vuc2UgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDIKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAibW9zdHJhIGxhIGluZm9ybWFjacOzIGRlIHJlc29sdWNpw7MgZGUgZGVzZmV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQ0Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICJzYWx0YSBlbHMgZml0eGVycyBjb2luY2lkZW50cyBhbWIgZWwgcGF0csOzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQ3Cittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAiZWxzIHBhdHJvbnMgZCdleGNsdXNpw7MgZXMgbGxlZ2VpeGVuIGRlIDxmaXR4ZXI+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDUwCittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgImxsZWdlaXggZWxzIHBhdHJvbnMgYWRkaWNpb25hbHMgZCdleGNsdXNpw7MgcGVyIGRpcmVjdG9yaSBlbiA8Zml0eGVyPiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1MgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgImFmZWdlaXggbGVzIGV4Y2x1c2lvbnMgZXN0w6BuZGFyZHMgZGUgZ2l0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDU1Cittc2dpZCAibWFrZSB0aGUgb3V0cHV0IHJlbGF0aXZlIHRvIHRoZSBwcm9qZWN0IHRvcCBkaXJlY3RvcnkiCittc2dzdHIgImZlcyBxdWUgbGEgc29ydGlkYSBzaWd1aSByZWxhdGl2YSBhbCBkaXJlY3Rvcmkgc3VwZXJpb3IgZGVsIHByb2plY3RlIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDU4Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICJzaSBxdWFsc2V2b2wgPGZpdHhlcj4gbm8gw6lzIGVuIGwnw61uZGV4LCB0cmFjdGEgYWl4w7IgY29tIGEgZXJyb3IiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTkKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiYXJicmUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjAKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisicHJldMOpbiBxdWUgZWxzIGNhbWlucyBlbGltaW5hdHMgZGVzcHLDqXMgZGUgPGFyYnJlPiBlbmNhcmEgc2lndWluIHByZXNlbnRzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYyCittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAibW9zdHJhIGxlcyBkYWRlcyBkZSBkZXB1cmFjacOzIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoyOAorbXNnaWQgImdpdCBscy10cmVlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBscy10cmVlIFs8b3BjaW9ucz5dIDxhcmJyZT4gWzxjYW3DrT4uLi5dIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgIm1vc3RyYSBub23DqXMgZWxzIGFyYnJlcyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI5Cittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICJyZWN1cnNhIGFscyBzdWJhcmJyZXMiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMQorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgIm1vc3RyYSBlbHMgYXJicmVzIGVuIHJlY3Vyc2FyIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzQKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJhY2FiYSBsZXMgZW50cmFkZXMgYW1iIHVuIG9jdGV0IE5VTCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAibWlkYSBkZSBsJ29iamVjdGUgZCdpbmNsdXNpw7MiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNyBidWlsdGluL2xzLXRyZWUuYzoxMzkKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICJsbGlzdGEgbm9tw6lzIGVscyBub21zIGRlIGZpdHhlciIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQyCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAidXNhIGVscyBub21zIGRlIGNhbcOtIGNvbXBsZXRzIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDQKK21zZ2lkICJsaXN0IGVudGlyZSB0cmVlOyBub3QganVzdCBjdXJyZW50IGRpcmVjdG9yeSAoaW1wbGllcyAtLWZ1bGwtbmFtZSkiCittc2dzdHIgIiIKKyJsbGlzdGEgbCdhcmJyZSBzZW5jZXI7IG5vIG5vbcOpcyBlbCBkaXJlY3RvcmkgYWN0dWFsIChpbXBsaWNhIC0tZnVsbC1uYW1lKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ1Cittc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIFs8Y29tbWl0Pi4uLl0iCittc2dzdHIgImdpdCBtZXJnZSBbPG9wY2lvbnM+XSBbPGNvbWlzc2nDsz4uLi5dIgorCisjOiBidWlsdGluL21lcmdlLmM6NDYKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gPG1zZz4gSEVBRCA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs8b3BjaW9ucz5dIDxtaXNzYXRnZT4gSEVBRCA8Y29taXNzacOzPiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ3Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6MTAwCittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJsJ29wY2nDsyBgbScgcmVxdWVyZWl4IHVuIHZhbG9yIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgdHJvYmFyIGwnZXN0cmF0w6hnaWEgZGUgZnVzacOzICclcycuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiTGVzIGVzdHJhdMOoZ2llcyBkaXNwb25pYmxlcyBzw7NuOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiTGVzIGVzdHJhdMOoZ2llcyBwZXJzb25hbGl0emFkZXMgZGlzcG9uaWJsZXMgc8OzbjoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTMgYnVpbHRpbi9wdWxsLmM6MTE5Cittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAibm8gbW9zdHJpcyBsZXMgZXN0YWTDrXN0aXF1ZXMgZGUgZGlmZXLDqG5jaWEgYWwgZmluYWwgZGUgbGEgZnVzacOzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk2IGJ1aWx0aW4vcHVsbC5jOjEyMgorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAibW9zdHJhIGxlcyBlc3RhZMOtc3RpcXVlcyBkZSBkaWZlcsOobmNpYSBhbCBmaW5hbCBkZSBsYSBmdXNpw7MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTcgYnVpbHRpbi9wdWxsLmM6MTI1Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiKHNpbsOybmltIGRlIC0tc3RhdCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTkgYnVpbHRpbi9wdWxsLmM6MTI4Cittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisiYWZlZ2VpeCAoY29tIGEgbcOgeGltIDxuPikgZW50cmFkZXMgZGVsIHJlZ2lzdHJlIGN1cnQgYWwgbWlzc2F0Z2UgZGUgY29taXNzacOzICIKKyJkZSBmdXNpw7MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDIgYnVpbHRpbi9wdWxsLmM6MTMxCittc2dpZCAiY3JlYXRlIGEgc2luZ2xlIGNvbW1pdCBpbnN0ZWFkIG9mIGRvaW5nIGEgbWVyZ2UiCittc2dzdHIgImNyZWEgdW5hIMO6bmljYSBjb21pc3Npw7MgZW4gbGxvYyBkZSBmdXNpb25hciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNCBidWlsdGluL3B1bGwuYzoxMzQKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgInJlYWxpdHphIHVuYSBjb21pc3Npw7Mgc2kgbGEgZnVzacOzIHTDqSDDqHhpdCAocGVyIGRlZmVjdGUpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA2IGJ1aWx0aW4vcHVsbC5jOjEzNworbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAiZWRpdGEgZWwgbWlzc2F0Z2UgYWJhbnMgZGUgY29tZXRyZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNworbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCAoZGVmYXVsdCkiCittc2dzdHIgInBlcm1ldCBsJ2F2YW7DpyByw6BwaWQgKHBlciBkZWZlY3RlKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwOSBidWlsdGluL3B1bGwuYzoxNDMKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICJhdm9ydGEgc2kgbCdhdmFuw6cgcsOgcGlkIG5vIMOpcyBwb3NzaWJsZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxMworbXNnaWQgIlZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAiVmVyaWZpY2EgcXVlIGxhIGNvbWlzc2nDsyBhbm9tZW5hZGEgdGluZ3VpIHVuYSBmaXJtYSBHUEcgdsOgbGlkYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNCBidWlsdGluL25vdGVzLmM6NzY3IGJ1aWx0aW4vcHVsbC5jOjE0OAorIzogYnVpbHRpbi9yZXZlcnQuYzo4OQorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICJlc3RyYXTDqGdpYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNSBidWlsdGluL3B1bGwuYzoxNDkKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgImVzdHJhdMOoZ2lhIGRlIGZ1c2nDsyBhIHVzYXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTYgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJvcGNpw7M9dmFsb3IiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTcgYnVpbHRpbi9wdWxsLmM6MTUzCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAib3BjacOzIHBlciBhIGwnZXN0cmF0w6hnaWEgZGUgZnVzacOzIHNlbGVjY2lvbmFkYSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxOQorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAibWlzc2F0Z2UgZGUgY29taXNzacOzIGRlIGZ1c2nDsyAocGVyIGEgdW5hIGZ1c2nDsyBubyBkJ2F2YW7DpyByw6BwaWQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjIzCittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImF2b3J0YSBsYSBmdXNpw7MgZW4gY3VycyBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTEKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBleGVjdXRhciBzdGFzaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTYKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgImwnZW1tYWdhdHplbWFtZW50IGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICJubyDDqXMgdW4gb2JqZWN0ZSB2w6BsaWQ6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgwIGJ1aWx0aW4vbWVyZ2UuYzoyOTcKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICJyZWFkLXRyZWUgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL21lcmdlLmM6MzI3Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiAocmVzIGEgYWl4YWZhcikiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJDb21pc3Npw7MgZCdhaXhhZmFkYSAtLSBubyBhY3R1YWxpdHphbnQgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQ0IGJ1aWx0aW4vbWVyZ2UuYzo3NjMgYnVpbHRpbi9tZXJnZS5jOjk3NQorIzogYnVpbHRpbi9tZXJnZS5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc2NyaXVyZSBhbCAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6MzcyCittc2dpZCAiV3JpdGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICJFc2NyaXZpbnQgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM3NAorbXNnaWQgIkZpbmlzaGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICJGaW5hbGl0emFudCBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiQ2FwIG1pc3NhdGdlIGRlIGZ1c2nDsyAtLSBubyBhY3R1YWxpdHphbnQgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcycgbm8gYXNzZW55YWxhIHVuYSBjb21pc3Npw7MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiQ2FkZW5hIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgZG9sZW50YTogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NTYKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJObyBnZXN0aW9uYW50IHJlcyBhIHBhcnQgZGUgbGEgZnVzacOzIGRlIGRvcyBjYXBzLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJPcGNpw7MgZGVzY29uZWd1ZGEgZGUgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgbGxlZ2lyIGRlICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICJObyBjb21ldGVudCBsYSBmdXNpw7M7IHVzZXUgJ2dpdCBjb21taXQnIHBlciBhIGNvbXBsZXRhciBsYSBmdXNpw7MuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiU2kgdXMgcGxhdSwgaW50cm9kdcOvdSB1biBtaXNzYXRnZSBkZSBjb21pc3Npw7MgcGVyIGEgZXhwbGljYXIgcGVyIHF1w6hcbiIKKyJhcXVlc3RhIGZ1c2nDsyDDqXMgbmVjZXNzw6ByaWEsIGVzcGVjaWFsbWVudCBzaSBmdXNpb25hIHVuYSBmb250XG4iCisiYWN0dWFsaXR6YWRhIGEgdW5hIGJyYW5jYSB0ZW3DoHRpY2EuXG4iCisiXG4iCisiUydpZ25vcmFyYW4gbGVzIGzDrW5pZXMgcXVlIGNvbWVuY2luIGFtYiAnJWMnLCBpIHVuIG1pc3NhdGdlIGJ1aXRcbiIKKyJhdm9ydGEgbGEgY29taXNzacOzLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODExCittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICJNaXNzYXRnZSBkZSBjb21pc3Npw7MgYnVpdC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICJNZXJhdmVsbMOzcy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICIiCisiTGEgZnVzacOzIGF1dG9tw6B0aWNhIGhhIGZhbGxhdDsgYXJyZWdsZXUgZWxzIGNvbmZsaWN0ZXMgaSBkZXNwcsOpcyBjb21ldGV1IGVsICIKKyJyZXN1bHRhdC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBubyDDqXMgdW5hIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkzNQorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiQ2FwIGJyYW5jYSBhY3R1YWwuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM3Cittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJObyBoaSBoYSBjYXAgcmVtb3QgcGVyIGEgbGEgYnJhbmNhIGFjdHVhbC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzkKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5vIGhpIGhhIGNhcCBmb250IHBlciBkZWZlY3RlIGRlZmluaWRhIHBlciBhIGxhIGJyYW5jYSBhY3R1YWwuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIk5vIGhpIGhhIGNhcCBicmFuY2EgYW1iIHNlZ3VpbWVudCByZW1vdCBwZXIgYSAlcyBkZSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNsb3NlICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgdGFuY2FyICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjA4Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJObyBoaSBoYSBmdXNpw7MgYSBhdm9ydGFyIChtYW5jYSBNRVJHRV9IRUFEKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjI0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIk5vIGhldSBjb25jbMOycyBsYSB2b3N0cmEgZnVzacOzIChNRVJHRV9IRUFEIGV4aXN0ZWl4KS5cbiIKKyJTaSB1cyBwbGF1LCBjb21ldGV1IGVscyB2b3N0cmVzIGNhbnZpcyBhYmFucyBkZSBmdXNpb25hci4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjMxCittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAiIgorIk5vIGhldSBjb25jbMOycyBlbCB2b3N0cmUgcmVjdWxsIGRlIGNpcmVyZXMgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RlaXgpLlxuIgorIlNpIHVzIHBsYXUsIGNvbWV0ZXUgZWxzIHZvc3RyZXMgY2FudmlzIGFiYW5zIGRlIGZ1c2lvbmFyLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIiIKKyJObyBoZXUgY29uY2zDsnMgZWwgdm9zdHJlIHJlY3VsbCBkZSBjaXJlcmVzIChDSEVSUllfUElDS19IRUFEIGV4aXN0ZWl4KS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjQzCittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIk5vIHBvZGV1IGNvbWJpbmFyIC0tc3F1YXNoIGFtYiAtLW5vLWZmLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNTEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiIgorIk5vIGhpIGhhIHVuYSBjb21pc3Npw7MgZXNwZWNpZmljYWRhIGkgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm8gZXN0w6AgIgorImVzdGFibGVydC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjY4Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIkFpeGFmYXIgdW5hIGNvbWlzc2nDsyBhIHVuIGNhcCBidWl0IGVuY2FyYSBubyBlcyBwZXJtZXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjcwCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIlVuYSBjb21pc3Npw7Mgbm8gZCdhdmFuw6cgcsOgcGlkIG5vIHTDqSBzZW50aXQgYSB1biBjYXAgYnVpdCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBubyDDqXMgdW5hIGNvc2EgcXVlIHB1Z3VlbSBmdXNpb25hciIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNzgKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICJFcyBwb3QgZnVzaW9uYXIgbm8gbcOpcyBkJ2V4YWN0YW1lbnQgdW5hIGNvbWlzc2nDsyBhIHVuIGNhcCBidWl0IgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzMworIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGFuIHVudHJ1c3RlZCBHUEcgc2lnbmF0dXJlLCBhbGxlZ2VkbHkgYnkgJXMuIgorbXNnc3RyICJMYSBjb21pc3Npw7MgJXMgdMOpIHVuYSBmaXJtYSBHUEcgbm8gZmlhYmxlLCBzdXBvc2FkYW1lbnQgZGUgJXMuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiTGEgY29taXNzacOzICVzIHTDqSB1bmEgZmlybWEgR1BHIGRvbGVudGEgc3Vwb3NhZGFtZW50IGRlICVzLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlLiIKK21zZ3N0ciAiTGEgY29taXNzacOzICVzIG5vIHTDqSBmaXJtYSBHUEcuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iCittc2dzdHIgIkxhIGNvbWlzc2nDsyAlcyB0w6kgdW5hIGZpcm1hIEdQRyBib25hIGRlICVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICJBY3R1YWxpdHphbnQgJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICJJbnRlbnRhbnQgdW5hIGZ1c2nDsyBtb2x0IHRyaXZpYWwgZW4gbCfDrW5kZXguLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAiTm8uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTAxCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICJObyDDqXMgcG9zc2libGUgYXZhbsOnYXIgcsOgcGlkYW1lbnQsIGF2b3J0YW50LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MjQgYnVpbHRpbi9tZXJnZS5jOjE2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIlJlYm9iaW5hbnQgbCdhcmJyZSBhIGxhIHByaXN0aW5hLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICJJbnRlbnRhbnQgbCdlc3RyYXTDqGdpYSBkZSBmdXNpw7MgJXMuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIkNhcCBlc3RyYXTDqGdpYSBkZSBmdXNpw7MgaGEgZ2VzdGlvbmF0IGxhIGZ1c2nDsy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIkwnZXN0cmF0w6hnaWEgZGUgZnVzacOzICVzIGhhIGZhbGxhdC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIlVzYW50IGVsICVzIHBlciBhIHByZXBhcmFyIGxhIHJlc29sdWNpw7MgYSBtw6AuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIiIKKyJMYSBmdXNpw7MgYXV0b23DoHRpY2EgaGEgc29ydGl0IGLDqTsgcydoYSBhdHVyYXQgYWJhbnMgZGUgY29tZXRyZSB0YWwgaSBjb20gIgorInMnaGF2aWEgZGVtYW5hdFxuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyOQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxjb21pc3Npw7M+IDxjb21pc3Npw7M+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPGNvbWlzc2nDsz4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMxCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29taXNzacOzPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21pc3Npw7M+IDxjb21pc3Npw7M+IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMworbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmVmPiBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZmVyw6huY2lhPiBbPGNvbWlzc2nDsz5dIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMTQKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgImVtZXQgdG90cyBlbHMgYXZhbnRwYXNzYXRzIGNvbXVucyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE2Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICJ0cm9iYSBlbHMgYXZhbnRwYXNzYXRzIHBlciBhIHVuYSBzb2xhIGZ1c2nDsyBkJ24gdmllcyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE4Cittc2dpZCAibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiCittc2dzdHIgImxsaXN0YSBsZXMgcmV2aXNpb25zIG5vIGFiYXN0YWJsZXMgZCdhbHRyZXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyMAorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAiw6lzIGxhIHByaW1lcmEgdW4gYXZhbnRwYXNzYXQgZGUgbCdhbHRyZT8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyMgorbXNnaWQgImZpbmQgd2hlcmUgPGNvbW1pdD4gZm9ya2VkIGZyb20gcmVmbG9nIG9mIDxyZWY+IgorbXNnc3RyICIiCisidHJvYmEgb24gPGNvbWlzc2nDsz4gcydoYSBiaWZ1cmNhdCBkZWwgcmVnaXN0cmUgZGUgcmVmZXLDqG5jaWVzIGRlIDxyZWZlcsOobmNpYT4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjgKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgorbXNnc3RyICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcGNpb25zPl0gWy1MIDxub20xPiBbLUwgPG9yaWdpbmFsPiBbLUwgPG5vbTI+XV1dIDxmaXR4ZXIxPiAiCisiPGZpdHhlci1vcmlnaW5hbD4gPGZpdHhlcjI+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozMworbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImVudmlhIGVscyByZXN1bHRhdHMgYSBsYSBzb3J0aWRhIGVzdMOgbmRhcmQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM0Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgInVzYSB1bmEgZnVzacOzIGJhc2FkYSBlbiBkaWZmMyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgImVuIGNvbmZsaWN0ZXMsIHVzYSBsYSB2ZXJzacOzIG5vc3RyYSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiZW4gY29uZmxpY3RlcywgdXNhIGxhIHZlcnNpw7Mgc2V2YSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICJlbiBjb25mbGljdGVzLCB1c2EgdW5hIHZlcnNpw7MgZCd1bmnDsyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDIKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAiZW4gY29uZmxpY3RlcywgdXNhIGFxdWVzdGEgbWlkYSBkZSBtYXJjYWRvciIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDMKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgIm5vIGF2aXNpcyBkZSBjb25mbGljdGVzIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAiZXN0YWJsZWl4IGxlcyBldGlxdWV0ZXMgcGVyIGEgZml0eGVyMS9maXR4ZXItb3JpZ2luYWwvZml0eGVyMiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NAorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUwCittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgImwnZW50cmFkYSDDqXMgYWNhYmFkYSBhbWIgTlVMIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNAorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAicGVybWV0IGVscyBvYmplY3RlcyBhYnNlbnRzIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAicGVybWV0IGxhIGNyZWFjacOzIGRlIG3DqXMgZCd1biBhcmJyZSIKKworIzogYnVpbHRpbi9tdi5jOjE1Cittc2dpZCAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgImdpdCBtdiBbPG9wY2lvbnM+XSA8Zm9udD4uLi4gPGRlc3TDrT4iCisKKyM6IGJ1aWx0aW4vbXYuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIkVsIGRpcmVjdG9yaSAlcyDDqXMgZW4gbCfDrW5kZXggaSBubyBoaSBoYSBjYXAgc3VibcOyZHVsPyIKKworIzogYnVpbHRpbi9tdi5jOjcxCittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJTaSB1cyBwbGF1LCBhbGxpc3RldSBlbHMgdm9zdHJlcyBjYW52aXMgYSAuZ2l0bW9kdWxlcyBvIGVtbWFnYXR6ZW1ldS1sb3MgcGVyICIKKyJhIHByb2NlZGlyIgorCisjOiBidWlsdGluL212LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyDDqXMgZW4gbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTEKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgImZvcsOnYSBlbCBtb3ZpbWVudCAvIGNhbnZpIGRlIG5vbSBlbmNhcmEgcXVlIGVsIGRlc3TDrSBleGlzdGVpeGkiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTIKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAib21ldCBlbHMgZXJyb3JzIGRlIG1vdmltZW50IC8gY2FudmkgZGUgbm9tIgorCisjOiBidWlsdGluL212LmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJlbCBkZXN0w60gJyVzJyBubyDDqXMgdW4gZGlyZWN0b3JpIgorCisjOiBidWlsdGluL212LmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAiQ29tcHJvdmFudCBlbCBjYW52aSBkZSBub20gZGUgJyVzJyBhICclcydcbiIKKworIzogYnVpbHRpbi9tdi5jOjE2NgorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgImZvbnQgZG9sZW50YSIKKworIzogYnVpbHRpbi9tdi5jOjE2OQorbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIm5vIGVzIHBvdCBtb3VyZSB1biBkaXJlY3RvcmkgYSBkaW5zIGQnZWxsIG1hdGVpeCIKKworIzogYnVpbHRpbi9tdi5jOjE3MgorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIm5vIGVzIHBvdCBtb3VyZSB1biBkaXJlY3Rvcmkgc29icmUgdW4gZml0eGVyIgorCisjOiBidWlsdGluL212LmM6MTgxCittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAiZWwgZGlyZWN0b3JpIGZvbnQgZXN0w6AgYnVpdCIKKworIzogYnVpbHRpbi9tdi5jOjIwNgorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgIm5vIGVzdMOgIHNvdGEgY29udHJvbCBkZSB2ZXJzaW9ucyIKKworIzogYnVpbHRpbi9tdi5jOjIwOQorbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAiZWwgZGVzdMOtIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL212LmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgInNvYnJlZXNjcml2aW50ICclcyciCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjAKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJObyBlcyBwb3Qgc29icmVlc2NyaXVyZSIKKworIzogYnVpbHRpbi9tdi5jOjIyMworbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAibcO6bHRpcGxlcyBmb250cyBwZXIgYWwgbWF0ZWl4IGRlc3TDrSIKKworIzogYnVpbHRpbi9tdi5jOjIyNQorbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZWwgZGlyZWN0b3JpIGRlc3TDrSBubyBleGlzdGVpeCIKKworIzogYnVpbHRpbi9tdi5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXMsIG9yaWdlbj0lcywgZGVzdMOtPSVzIgorCisjOiBidWlsdGluL212LmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIkNhbnZpYW50IGVsIG5vbSBkZSAlcyBhICVzXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTYgYnVpbHRpbi9yZW1vdGUuYzo3MjIgYnVpbHRpbi9yZXBhY2suYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImVsIGNhbnZpIGRlbCBub20gZGUgJyVzJyBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyNTUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wY2lvbnM+XSA8Y29taXNzacOzPi4uLiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjI1NgorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8b3BjaW9ucz5dIC0tYWxsIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjU3Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wY2lvbnM+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzA5Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGVscyBub21zIChzZW5zZSBTSEEtMSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTAKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgIm5vbcOpcyB1c2EgbGVzIGV0aXF1ZXRlcyBwZXIgYSBhbm9tZW5hciBsZXMgY29taXNzaW9ucyIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxMgorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJub23DqXMgdXNhIGxlcyByZWZlcsOobmNpZXMgcXVlIGNvaW5jaWRlaXhpbiBhbWIgPHBhdHLDsz4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTQKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICJsbGlzdGEgdG90ZXMgbGVzIGNvbWlzc2lvbnMgYWJhc3RhYmxlcyBkZSB0b3RlcyBsZXMgcmVmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzE1Cittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJsbGVnZWl4IGQnc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTYKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgInBlcm1ldCBpbXByaW1pciBlbHMgbm9tcyBgdW5kZWZpbmVkYCAocGVyIGRlZmVjdGUpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzIyCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgImRlcmVmZXJlbmNpYSBsZXMgZXRpcXVldGVzIGVuIGwnZW50cmFkYSAow7pzIGludGVybikiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcsOobmNpYS1kZS1ub3Rlcz5dIFtsbGlzdGEgWzxvYmplY3RlPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiAiCisifCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcsOobmNpYS1kZS1ub3Rlcz5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gIgorIjxtaXNzYXRnZT4gfCAtRiA8Zml0eGVyPiB8ICgtYyB8IC1DKSA8b2JqZWN0ZT5dIFs8b2JqZWN0ZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyw6huY2lhLWRlLW5vdGVzPl0gY29weSBbLWZdIDxkJ29iamVjdGU+IDxhLW9iamVjdGU+IgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAiCisiKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSAiCisiPG1pc3NhdGdlPiB8IC1GIDxmaXR4ZXI+IHwgKC1jIHwgLUMpIDxvYmplY3RlPl0gWzxvYmplY3RlPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcsOobmNpYS1kZS1ub3Rlcz5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0ZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzAKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyw6huY2lhLWRlLW5vdGVzPl0gc2hvdyBbPG9iamVjdGU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxyZWZlcsOobmNpYS1kZS1ub3Rlcz5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPGVzdHJhdMOoZ2lhPl0gIgorIjxyZWZlcsOobmNpYS1kZS1ub3Rlcz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+XSByZW1vdmUgWzxvYmplY3RlPi4uLl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbiB8IC12XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+XSBwcnVuZSBbLW4gfCAtdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHJlZmVyw6huY2lhLWRlLW5vdGVzPl0gZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxCittc2dpZCAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgW2xsaXN0YSBbPG9iamVjdGU+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NgorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPG9wY2lvbnM+XSBbPG9iamVjdGU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGQnb2JqZWN0ZT4gPGEtb2JqZWN0ZT4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MgorbXNnaWQgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIgorbXNnc3RyICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZCdvYmplY3RlPiA8YS1vYmplY3RlPl0uLi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NworbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wY2lvbnM+XSBbPG9iamVjdGU+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYyCittc2dpZCAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3RlPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NworbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0ZT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBbPG9wY2lvbnM+XSA8cmVmZXLDqG5jaWEtZGUtbm90ZXM+IgorCisjOiBidWlsdGluL25vdGVzLmM6NzMKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wY2lvbnM+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc0Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkKK21zZ2lkICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3RlPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NAorbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHBydW5lIFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODkKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgaW5pY2lhciAnc2hvdycgcGVyIGEgbCdvYmplY3RlICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGxsZWdpciBsYSBzb3J0aWRhIGRlICdzaG93JyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZmluaXNoICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIGZpbmFsaXR6YXIgJ3Nob3cnIHBlciBhIGwnb2JqZWN0ZSAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTc0IGJ1aWx0aW4vdGFnLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIGZpdHhlciAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTkzCittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICIiCisiU2kgdXMgcGxhdSwgcHJvdmXDr3UgZWxzIGNvbnRpbmd1dHMgZGUgbGEgbm90YSBmZW50IHNlcnZpciBsJ29wY2nDsyAtbSBvICIKKyJsJ29wY2nDsyAtRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwMgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBlc2NyaXVyZSBsJ29iamVjdGUgZGUgbm90YSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAiRWxzIGNvbnRpbmd1dHMgZGUgbGEgbm90YSBzJ2hhbiBkZWl4YXQgZW4gJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMzIgYnVpbHRpbi90YWcuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjM0IGJ1aWx0aW4vdGFnLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBvYnJpciBvIGxsZWdpciAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUzIGJ1aWx0aW4vbm90ZXMuYzozMDQgYnVpbHRpbi9ub3Rlcy5jOjMwNgorIzogYnVpbHRpbi9ub3Rlcy5jOjM2NiBidWlsdGluL25vdGVzLmM6NDIxIGJ1aWx0aW4vbm90ZXMuYzo1MDcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTIgYnVpbHRpbi9ub3Rlcy5jOjU5MCBidWlsdGluL25vdGVzLmM6NjUzCisjOiBidWlsdGluL25vdGVzLmM6ODc3IGJ1aWx0aW4vdGFnLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJTJ2hhIGZhbGxhdCBlbiByZXNvbGRyZSAnJXMnIGNvbSBhIHJlZmVyw6huY2lhIHbDoGxpZGEuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiUydoYSBmYWxsYXQgZW4gbGxlZ2lyIGwnb2JqZWN0ZSAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgIk5vIGVzIHBvdCBsbGVnaXIgbGVzIGRhZGVzIGRlIG5vZGUgZGUgbCdvYmplY3RlIG5vIGRlIGJsb2IgJyVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTkgYnVpbHRpbi9ub3Rlcy5jOjQxNCBidWlsdGluL25vdGVzLmM6NDkwCisjOiBidWlsdGluL25vdGVzLmM6NTAyIGJ1aWx0aW4vbm90ZXMuYzo1NzggYnVpbHRpbi9ub3Rlcy5jOjY0NgorIzogYnVpbHRpbi9ub3Rlcy5jOjk0MgorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgIm1hc3NhIHBhcsOgbWV0cmVzIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcyIGJ1aWx0aW4vbm90ZXMuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAiTm8gcydoYSB0cm9iYXQgY2FwIG5vdGEgcGVyIGEgbCdvYmplY3RlICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5MyBidWlsdGluL25vdGVzLmM6NTU2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAiYW5vdGEgZWxzIGNvbnRpbmd1dHMgY29tIGEgY2FkZW5hIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzk2IGJ1aWx0aW4vbm90ZXMuYzo1NTkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAiYW5vdGEgZWxzIGNvbnRpbmd1dHMgZW4gdW4gZml0eGVyIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzk4IGJ1aWx0aW4vbm90ZXMuYzo0MDEgYnVpbHRpbi9ub3Rlcy5jOjU2MQorIzogYnVpbHRpbi9ub3Rlcy5jOjU2NCBidWlsdGluL3RhZy5jOjYzMAorbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAib2JqZWN0ZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5OSBidWlsdGluL25vdGVzLmM6NTYyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJyZXVzYSBpIGVkaXRhIGwnb2JqZWN0ZSBkZSBub3RhIGVzcGVjaWZpY2F0IgorCisjOiBidWlsdGluL25vdGVzLmM6NDAyIGJ1aWx0aW4vbm90ZXMuYzo1NjUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgInJldXNhIGwnb2JqZWN0ZSBkZSBub3RhIGVzcGVjaWZpY2F0IgorCisjOiBidWlsdGluL25vdGVzLmM6NDA1IGJ1aWx0aW4vbm90ZXMuYzo1NjgKK21zZ2lkICJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiCittc2dzdHIgInBlcm1ldCBsJ2VtbWFnYXR6ZW1hdGdlIGQndW5hIG5vdGEgYnVpZGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDYgYnVpbHRpbi9ub3Rlcy5jOjQ3NworbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgInJlZW1wbGHDp2EgbGVzIG5vdGVzIGV4aXN0ZW50cyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIk5vIGVzIHBvdCBhZmVnaXIgbGVzIG5vdGVzLiBTJ2hhbiB0cm9iYXQgbm90ZXMgZXhpc3RlbnRzIGRlIGwnb2JqZWN0ZSAlcy4gIgorIlVzZXUgJy1mJyBwZXIgYSBzb2JyZWVzY3JpdXJlIGxlcyBub3RlcyBleGlzdGVudHMuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ2IGJ1aWx0aW4vbm90ZXMuYzo1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICJTb2JyZWVzY3JpdmludCBsZXMgbm90ZXMgZXhpc3RlbnRzIGRlIGwnb2JqZWN0ZSAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDU3IGJ1aWx0aW4vbm90ZXMuYzo2MTggYnVpbHRpbi9ub3Rlcy5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiRWxpbWluYW50IGxhIG5vdGEgZGUgbCdvYmplY3RlICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NzgKK21zZ2lkICJyZWFkIG9iamVjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGxlZ2VpeCBlbHMgb2JqZWN0ZXMgZGVzIGQnc3RkaW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0ODAKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAiIgorImNhcnJlZ2EgbGEgY29uZmlndXJhY2nDsyBkZSByZWVzY3JpcHR1cmEgcGVyIGEgPG9yZHJlPiAoaW1wbGljYSAtLXN0ZGluKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OAorbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAiaGkgaGEgbWFzc2EgcG9jcyBwYXLDoG1ldHJlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJObyBlcyBwb3QgY29waWFyIGxlcyBub3Rlcy4gUydoYW4gdHJvYmF0IG5vdGVzIGV4aXN0ZW50cyBkZSBsJ29iamVjdGUgJXMuICIKKyJVc2V1ICctZicgcGVyIGEgc29icmVlc2NyaXVyZSBsZXMgbm90ZXMgZXhpc3RlbnRzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCBjb3B5LiIKK21zZ3N0ciAiTWFucXVlbiBub3RlcyBhIGwnb2JqZWN0ZSBmb250ICVzLiBObyBlcyBwb3QgY29waWFyLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisiUydoYW4gZGVzYXByb3ZhdCBsZXMgb3BjaW9ucyAtbS8tRi8tYy8tQyBlbiBmYXZvciBkZWwgc3Vib3JkcmUgJ2VkaXQnLlxuIgorIlNpIHVzIHBsYXUsIHVzZXUgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGVuIGxsb2MgZCdhaXjDsi5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2NAogbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKIG1zZ3N0ciAiT3BjaW9ucyBnZW5lcmFscyIKIAotIzogZ2l0azoxMTM5OAotbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKLW1zZ3N0ciAiVXNhIGVscyBnaW55cyB0ZW1hdGl0emF0cyIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjYKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGRlIGZ1c2nDsyIKIAotIzogZ2l0azoxMTQwMAotbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCi1tc2dzdHIgIihlbCBjYW52aSByZXF1ZXJlaXggcmVpbmljaWFyKSIKLQotIzogZ2l0azoxMTQwMgotbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgotbXNnc3RyICIoYWN0dWFsbWVudCBubyBkaXNwb25pYmxlKSIKLQotIzogZ2l0azoxMTQxMwotbXNnaWQgIkNvbG9yczogcHJlc3MgdG8gY2hvb3NlIgotbXNnc3RyICJDb2xvcnM6IHByZXNzaW9uYSBwZXIgYSB0cmlhciIKLQotIzogZ2l0azoxMTQxNgotbXNnaWQgIkludGVyZmFjZSIKLW1zZ3N0ciAiSW50ZXJmw61jaWUiCi0KLSM6IGdpdGs6MTE0MTcKLW1zZ2lkICJpbnRlcmZhY2UiCi1tc2dzdHIgImludGVyZsOtY2llIgotCi0jOiBnaXRrOjExNDIwCi1tc2dpZCAiQmFja2dyb3VuZCIKLW1zZ3N0ciAiRm9ucyIKLQotIzogZ2l0azoxMTQyMSBnaXRrOjExNDUxCi1tc2dpZCAiYmFja2dyb3VuZCIKLW1zZ3N0ciAiZm9ucyIKLQotIzogZ2l0azoxMTQyNAotbXNnaWQgIkZvcmVncm91bmQiCi1tc2dzdHIgIlByaW1lciBwbGEiCi0KLSM6IGdpdGs6MTE0MjUKLW1zZ2lkICJmb3JlZ3JvdW5kIgotbXNnc3RyICJwcmltZXIgcGxhIgotCi0jOiBnaXRrOjExNDI4Ci1tc2dpZCAiRGlmZjogb2xkIGxpbmVzIgotbXNnc3RyICJEaWZlcsOobmNpYTogbMOtbmllcyB2ZWxsZXMiCi0KLSM6IGdpdGs6MTE0MjkKLW1zZ2lkICJkaWZmIG9sZCBsaW5lcyIKLW1zZ3N0ciAiZGlmZXJlbmNpYSBsZXMgbMOtbmllcyB2ZWxsZXMiCi0KLSM6IGdpdGs6MTE0MzMKLW1zZ2lkICJEaWZmOiBuZXcgbGluZXMiCi1tc2dzdHIgIkRpZmVyw6huY2lhOiBsw61uaWVzIG5vdmVzIgotCi0jOiBnaXRrOjExNDM0Ci1tc2dpZCAiZGlmZiBuZXcgbGluZXMiCi1tc2dzdHIgImRpZmVyZW5jaWEgbGVzIGzDrW5pZXMgbm92ZXMiCi0KLSM6IGdpdGs6MTE0MzgKLW1zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKLW1zZ3N0ciAiRGlmZXLDqG5jaWE6IGNhcMOnYWxlcmEgZGUgdHJvcyIKLQotIzogZ2l0azoxMTQ0MAotbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCi1tc2dzdHIgImRpZmVyZW5jaWEgbGEgY2Fww6dhbGVyYSBkZSB0cm9zIgotCi0jOiBnaXRrOjExNDQ0Ci1tc2dpZCAiTWFya2VkIGxpbmUgYmciCi1tc2dzdHIgIkZvbnMgZGUgbGEgbMOtbmlhIG1hcmNhZGEiCi0KLSM6IGdpdGs6MTE0NDYKLW1zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgotbXNnc3RyICJmb25zIGRlIGxhIGzDrW5pYSBtYXJjYWRhIgotCi0jOiBnaXRrOjExNDUwCi1tc2dpZCAiU2VsZWN0IGJnIgotbXNnc3RyICJGb25zIGRlIGxhIHNlbGVjY2nDsyIKLQotIzogZ2l0azoxMTQ1OQotbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCi1tc2dzdHIgIlRpcHVzIGRlIGxsZXRyYTogcHJlc3Npb25hIHBlciBhIHRyaWFyIgotCi0jOiBnaXRrOjExNDYxCi1tc2dpZCAiTWFpbiBmb250IgotbXNnc3RyICJUaXB1cyBkZSBsbGV0cmEgcHJpbmNpcGFsIgotCi0jOiBnaXRrOjExNDYyCi1tc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCi1tc2dzdHIgIlRpcHVzIGRlIGxsZXRyYSBkZSB2aXN1YWxpdHphY2nDsyBkZSBkaWZlcsOobmNpYSIKLQotIzogZ2l0azoxMTQ2MwotbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCi1tc2dzdHIgIlRpcHVzIGRlIGxsZXRyYSBkZSBsYSBpbnRlcmbDrWNpZSBkJ3VzdWFyaSIKLQotIzogZ2l0azoxMTQ4NQotbXNnaWQgIkdpdGsgcHJlZmVyZW5jZXMiCi1tc2dzdHIgIlByZWZlcsOobmNpZXMgZGVsIEdpdGsiCi0KLSM6IGdpdGs6MTE0OTQKLW1zZ2lkICJHZW5lcmFsIgotbXNnc3RyICJHZW5lcmFsIgotCi0jOiBnaXRrOjExNDk1Ci1tc2dpZCAiQ29sb3JzIgotbXNnc3RyICJDb2xvcnMiCi0KLSM6IGdpdGs6MTE0OTYKLW1zZ2lkICJGb250cyIKLW1zZ3N0ciAiVGlwdXMgZGUgbGxldHJhIgotCi0jOiBnaXRrOjExNTQ2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKLW1zZ3N0ciAiR2l0azogdHJpYSBlbCBjb2xvciBwZXIgYSAlcyIKLQotIzogZ2l0azoxMjA1OQorIzogYnVpbHRpbi9ub3Rlcy5jOjc2OAogbXNnaWQgIiIKLSJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKLSIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCiBtc2dzdHIgIiIKLSJQZXJkw7MsIGVsIGdpdGsgbm8gcG90IGV4ZWN1dGFyLXNlIGFtYiBhcXVlc3RhIHZlcnNpw7MgZGUgVGNsL1RrLlxuIgotIiBFbCBHaXRrIHJlcXVlcmVpeCBjb20gYSBtw61uaW0gZWwgVGNsL1RrIDguNC4iCisicmVzb2wgZWxzIGNvbmZsaWN0ZXMgZGUgbm90YSB1c2FudCBsJ2VzdHJhdMOoZ2lhIGRvbmFkYSAobWFudWFsL291cnMvdGhlaXJzLyIKKyJ1bmlvbi9jYXRfc29ydF91bmlxKSIKIAotIzogZ2l0azoxMjI2OQotbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCi1tc2dzdHIgIk5vIGVzIHBvdCB0cm9iYXIgY2FwIGRpcMOyc2l0IGRlIGdpdCBhcXXDrS4iCisjOiBidWlsdGluL25vdGVzLmM6NzcwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiQ29tZXRlbnQgbGVzIG5vdGVzIHNlbnNlIGZ1c2lvbmFyIgogCi0jOiBnaXRrOjEyMzE2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgotbXNnc3RyICJQYXLDoG1ldHJlIGFtYmlndSAnJXMnOiDDqXMgdGFudCByZXZpc2nDsyBjb20gbm9tIGRlIGZpdHhlciIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzIKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJmaW5hbGl0emEgbGEgZnVzacOzIGRlIG5vdGVzIGNvbWV0ZW50IGxlcyBub3RlcyBzZW5zZSBmdXNpb25hciIKIAotIzogZ2l0azoxMjMyOAotbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCi1tc2dzdHIgIlBhcsOgbWV0cmVzIGRvbGVudHMgYWwgZ2l0azoiCisjOiBidWlsdGluL25vdGVzLmM6Nzc0Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAiQXZvcnRhbnQgbGEgcmVzb2x1Y2nDsyBkZSBmdXNpw7MgZGUgbm90ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAiYXZvcnRhIGxhIGZ1c2nDsyBkZSBub3RlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJBIG5vdGVzIG1lcmdlIGludG8gJXMgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCAlcyIKK21zZ3N0ciAiVW5hIGZ1c2nDsyBkZSBub3RlcyBhICVzIGphIGVzdMOgIGVuIGN1cnMgYSAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiTCdvYmplY3RlICVzIG5vIHTDqSBjYXAgbm90YVxuIgorCisjOiBidWlsdGluL25vdGVzLmM6ODkyCittc2dpZCAiYXR0ZW1wdCB0byByZW1vdmUgbm9uLWV4aXN0ZW50IG5vdGUgaXMgbm90IGFuIGVycm9yIgorbXNnc3RyICJsJ2ludGVudCBkJ2VsaW1pbmFyIHVuYSBub3RhIG5vIGV4aXN0ZW50IG5vIMOpcyB1biBlcnJvciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5NQorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsbGVnZWl4IGVscyBub21zIGQnb2JqZWN0ZSBkZXMgZGUgbCdlbnRyYWRhIGVzdMOgbmRhcmQiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NzYKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgInJlZmVyw6huY2lhIGRlIG5vdGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6OTc3Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgInVzYSBsZXMgbm90ZXMgZGUgPHJlZmVyw6huY2lhLWRlLW5vdGVzPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwMTIgYnVpbHRpbi9yZW1vdGUuYzoxNTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIlN1Ym9yZHJlIGRlc2NvbmVndXQ6ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4Cittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3BjaW9ucz4uLi5dIFs8IDxsbGlzdGEtZGUtcmVmZXLDqG5jaWVzPiB8IDwgIgorIjxsbGlzdGEtZGUtb2JqZWN0ZXM+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOQorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wY2lvbnM+Li4uXSA8bm9tLWJhc2U+IFs8IDxsbGlzdGEtZGUtcmVmZXLDqG5jaWVzPiB8IDwgIgorIjxsbGlzdGEtZGUtb2JqZWN0ZXM+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJlcnJvciBkZSBkZWZsYWNpw7MgKCVkKSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3NzEKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgIkVzY3JpdmludCBlbHMgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTAxMQorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICIiCisiaW5oYWJpbGl0YW50IGwnZXNjcmlwdHVyYSBkZSBtYXBlcyBkZSBiaXRzLCBwZXJxdcOoIGFsZ3VucyBvYmplY3RlcyBubyAiCisicydlc3RhbiBlbXBhcXVldGFudCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTcxCittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiQ29tcHJpbWludCBvYmplY3RlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgInZlcnNpw7MgZCfDrW5kZXggbm8gY29tcGF0aWJsZSAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgInZlcnNpw7MgZCfDrW5kZXggZG9sZW50YSAnJXMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDIKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAibm8gbW9zdHJpcyBsJ2luZGljYWRvciBkZSBwcm9ncsOpcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjA0Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAibW9zdHJhIGwnaW5kaWNhZG9yIGRlIHByb2dyw6lzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDYKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAibW9zdHJhIGwnaW5kaWNhZG9yIGRlIHByb2dyw6lzIGR1cmFudCBsYSBmYXNlIGQnZXNjcmlwdHVyYSBkJ29iamVjdGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDkKK21zZ2lkICJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iCittc2dzdHIgInNpbWlsYXIgYSAtLWFsbC1wcm9ncmVzcyBxdWFuIGwnaW5kaWNhZG9yIGRlIHByb2dyw6lzIGVzIG1vc3RyYSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjEwCittc2dpZCAidmVyc2lvblssb2Zmc2V0XSIKK21zZ3N0ciAidmVyc2nDs1ssZGVzcGxhw6dhbWVudF0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxMQorbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIiIKKyJlc2NyaXUgZWwgZml0eGVyIGQnw61uZGV4IGRlIHBhcXVldCBlbiBsYSB2ZXJzacOzIGRlIGZvcm1hdCBkJ8OtbmRleCAiCisiZXNwZWNpZmljYWRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICJtaWRhIG3DoHhpbWEgZGUgY2FkYSBmaXR4ZXIgZGUgcGFxdWV0IGRlIHNvcnRpZGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxNgorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiIgorImlnbm9yYSBlbHMgb2JqZWN0ZXMgcHJlc3RhdHMgZCd1biBlbW1hZ2F0emVtYW1lbnQgZCdvYmplY3RlcyBhbHRlcm5hdGl1IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTgKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgImlnbm9yYSBlbHMgb2JqZWN0ZXMgZW1wYXF1ZXRhdHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyMAorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgImxpbWl0YSBsYSBmaW5lc3RyYSBkJ2VtcGFxdWV0YW1lbnQgcGVyIG9iamVjdGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjIKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICIiCisibGltaXRhIGxhIGZpbmVzdHJhIGQnZW1wYXF1ZXRhbWVudCBwZXIgbWVtw7JyaWEgYSBtw6lzIGRlbCBsw61taXQgZCdvYmplY3RlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjI0Cittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgImxvbmdpdHVkIG3DoHhpbWEgZGUgbGEgY2FkZW5hIGRlIGRlbHRlcyBwZXJtZXNhIGVuIGVsIHBhcXVldCByZXN1bHRhbnQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyNgorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAicmV1c2EgbGVzIGRlbHRlcyBleGlzdGVudHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyOAorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgInJldXNhIGVscyBvYmplY3RlcyBleGlzdGVudHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzMAorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAidXNhIG9iamVjdGVzIE9GU19ERUxUQSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjMyCittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAidXNhIGZpbHMgZW4gY2VyY2FyIGxlcyBtaWxsb3JlcyBjb2luY2lkw6huY2llcyBkZSBkZWx0YSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjM0Cittc2dpZCAiZG8gbm90IGNyZWF0ZSBhbiBlbXB0eSBwYWNrIG91dHB1dCIKK21zZ3N0ciAibm8gY3Jlw69zIHVuYSBlbWlzc2nDsyBkZSBwYXF1ZXQgYnVpZGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzNgorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImxsZWdlaXggZWxzIHBhcsOgbWV0cmVzIGRlIHJldmlzacOzIGRlcyBkZSBsJ2VudHJhZGEgZXN0w6BuZGFyZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjM4Cittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgImxpbWl0YSBlbHMgb2JqZWN0ZXMgYWxzIHF1YWxzIGVuY2FyYSBubyBzJ2hhZ2luIGVtcGFxdWV0YXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0MQorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSBhbnkgcmVmZXJlbmNlIgorbXNnc3RyICJpbmNsb3UgZWxzIG9iamVjdGVzIGFiYXN0YWJsZXMgZGUgcXVhbHNldnVsbGEgcmVmZXLDqG5jaWEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0NAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIKK21zZ3N0ciAiIgorImluY2xvdSBlbHMgb2JqZWN0ZXMgYWxzIHF1YWxzIGZhY2luIHJlZmVyw6huY2lhIGxlcyBlbnRyYWRlcyBkZWwgcmVnaXN0cmUgZGUgIgorInJlZmVyw6huY2llcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQ3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAiaW5jbG91IGVscyBvYmplY3RlcyBhbHMgcXVhbHMgZmFjaSByZWZlcsOobmNpYSBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjUwCittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICJlbWV0IGVsIHBhcXVldCBhIHN0ZG91dCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjUyCittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICIiCisiaW5jbG91IGVscyBvYmplY3RlcyBkJ2V0aXF1ZXRhIHF1ZSBmYWNpbiByZWZlcsOobmNpYSBhbHMgb2JqZWN0ZXMgYSBlbXBhcXVldGFyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTQKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInJldMOpbiBlbHMgb2JqZWN0ZXMgaW5hYmFzdGFibGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTUgcGFyc2Utb3B0aW9ucy5oOjE0MgorbXNnaWQgInRpbWUiCittc2dzdHIgImhvcmEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1NgorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJkZXNlbXBhcXVldGEgZWxzIG9iamVjdGVzIGluYWJhc3RhYmxlcyBtw6lzIG5vdXMgcXVlIDxob3JhPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU5Cittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgImNyZWEgcGFxdWV0cyBwcmltcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjYxCittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgImNyZWEgcGFxdWV0cyBhZGVxdWF0cyBwZXIgYSBsZXMgb2J0ZW5jaW9ucyBzdXBlcmZpY2lhbHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2MworbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgImlnbm9yYSBlbHMgcGFxdWV0cyBxdWUgdGluZ3VpbiB1biBmaXR4ZXIgLmtlZXAgY29ycmVzcG9uZW50IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjUKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICJuaXZlbGwgZGUgY29tcHJlc3Npw7MgZGUgcGFxdWV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjcKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAibm8gYW1hZ3VpcyBsZXMgY29taXNzaW9ucyBwZXIgZW1wZWx0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjkKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKyJ1c2EgdW4gw61uZGV4IGRlIG1hcGEgZGUgYml0cywgc2kgZXN0w6AgZGlzcG9uaWJsZSwgcGVyIGEgYWNjZWxlcmFyIGVsICIKKyJyZWNvbXB0ZSBkJ29iamVjdGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NzEKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICJlc2NyaXUgdW4gw61uZGV4IGRlIG1hcGEgZGUgYml0cyBqdW50IGFtYiBsJ8OtbmRleCBkZSBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc2MgorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIkNvbXB0YW50IGVscyBvYmplY3RlcyIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo2Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHBhY2stcmVmcyBbPG9wY2lvbnM+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNAorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAiZW1wYXF1ZXRhLWhvIHRvdCIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNQorbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICJwb2RhIGxlcyByZWZlcsOobmNpZXMgc29sdGVzIChwZXIgZGVmZWN0ZSkiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NworbXNnaWQgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKK21zZ3N0ciAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjQwCittc2dpZCAiUmVtb3ZpbmcgZHVwbGljYXRlIG9iamVjdHMiCittc2dzdHIgIkVsaW1pbmFudCBvYmplY3RlcyBkdXBsaWNhdHMiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMQorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1leHBpcmUgPGhvcmE+XSBbLS1dIFs8Y2FwPi4uLl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMDUgYnVpbHRpbi93b3JrdHJlZS5jOjEyMQorbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAibm8gZWxpbWluaXMsIG5vbcOpcyBtb3N0cmEiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMDYgYnVpbHRpbi93b3JrdHJlZS5jOjEyMgorbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAiaW5mb3JtYSBkJ29iamVjdGVzIHBvZGF0cyIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwOSBidWlsdGluL3dvcmt0cmVlLmM6MTI0Cittc2dpZCAiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImZlcyBjYWR1Y2FyIGVscyBvYmplY3RlcyBtw6lzIHZlbGxzIHF1ZSA8aG9yYT4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY5Cittc2dpZCAiZ2l0IHB1bGwgW29wdGlvbnNdIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbb3BjaW9uc10gWzxkaXDDsnNpdD4gWzxlc3BlY2lmaWNhY2nDsy1kZS1yZWZlcsOobmNpYT4uLi5dXSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTEzCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIk9wY2lvbnMgcmVsYWNpb25hZGVzIGFtYiBmdXNpb25hciIKKworIzogYnVpbHRpbi9wdWxsLmM6MTE2Cittc2dpZCAiaW5jb3Jwb3JhdGUgY2hhbmdlcyBieSByZWJhc2luZyByYXRoZXIgdGhhbiBtZXJnaW5nIgorbXNnc3RyICJpbmNvcnBvcmEgZWxzIGNhbnZpcyBwZXIgcmViYXNhciBlbiBsbG9jIGRlIGZ1c2lvbmFyIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDAgYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgInBlcm1ldCBsJ2F2YW7DpyByw6BwaWQiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NgorbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAidmVyaWZpY2EgcXVlIGxhIGNvbWlzc2nDsyBhbm9tZW5hZGEgdGluZ3VpIHVuYSBmaXJtYSBHUEcgdsOgbGlkYSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTYwCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICJPcGNpb25zIHJlbGFjaW9uYWRlcyBhbWIgb2J0ZW5pciIKKworIzogYnVpbHRpbi9wdWxsLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICJWYWxvciBubyB2w6BsaWQgcGVyIGEgcHVsbC5mZjogJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjM1MgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiTm8gZXMgcG90IGJhaXhhciBhbWIgcmViYXNhbWVudDogVGVuaXUgY2FudmlzIG5vIGFsbGlzdGF0cy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjM1OAorbXNnaWQgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiQWRkaWNpb25hbG1lbnQsIGVsIHZvc3RyZSDDrW5kZXggY29udMOpIGNhbnZpcyBzZW5zZSBjb21ldHJlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6MzYwCittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJObyBlcyBwb3QgYmFpeGFyIGFtYiByZWJhc2FtZW50OiBFbCB2b3N0cmUgw61uZGV4IGNvbnTDqSBjYW52aXMgc2Vuc2UgY29tZXRyZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNgorbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJObyBoaSBoYSBjYXAgY2FuZGlkYXQgc29icmUgZWwgcXVhbCByZWJhc2FyIGVudHJlIGxlcyByZWZlcsOobmNpZXMgcXVlIGFjYWJldSAiCisiZCdvYnRlbmlyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM4Cittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJObyBoaSBoYSBjYW5kaWRhdHMgcGVyIGEgZnVzaW9uYXIgZW50cmUgbGVzIHJlZmVyw6huY2llcyBxdWUgYWNhYmV1IGRlICIKKyJvYnRlbmlyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5Cittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorIkdlbmVyYWxtZW50IGFpeMOyIHZvbCBkaXIgcXVlIGhldSBwcm92ZcOvdCB1bmEgZXNwZWNpZmljYWNpw7MgZGVcbiIKKyJyZWZlcsOobmNpYSBkZSBjb21vZMOtIHF1ZSBubyB0ZW5pYSBjYXAgY29pbmNpZMOobmNpYSBlbiBlbCBjb3N0YXQgcmVtb3QuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBwdWxsIGZyb20gdGhlIHJlbW90ZSAnJXMnLCBidXQgZGlkIG5vdCBzcGVjaWZ5XG4iCisiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGVcbiIKKyJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiIgorIkhldSBkZW1hbmF0IGJhaXhhciBkZWwgcmVtb3QgJyVzJywgcGVyw7Igbm8gaGV1IGVzcGVjaWZpY2F0IGNhcCBicmFuY2EuXG4iCisiUGVycXXDqCBhcXVlc3Qgbm8gw6lzIGVsIHJlbW90IGNvbmZpZ3VyYXQgcGVyIGRlZmVjdGUgcGVyIGEgbGEgdm9zdHJhXG4iCisiYnJhbmNhIGFjdHVhbCwgaGV1IGRlIGVzcGVjaWZpY2FyIHVuYSBicmFuY2EgZW4gbGEgbMOtbmlhIGQnb3JkcmVzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ3Cittc2dpZCAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKK21zZ3N0ciAiQWN0dWFsbWVudCBubyBzb3UgZW4gY2FwIGJyYW5jYS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0OSBidWlsdGluL3B1bGwuYzo0NjQKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gcmViYXNlIGFnYWluc3QuIgorbXNnc3RyICJTaSB1cyBwbGF1LCBlc3BlY2lmaXF1ZXUgc29icmUgcXXDqCBicmFuY2Egdm9sZXUgcmViYXNhci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MSBidWlsdGluL3B1bGwuYzo0NjYKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgIlNpIHVzIHBsYXUsIGVzcGVjaWZpcXVldSBhbWIgcXXDqCBicmFuY2Egdm9sZXUgZnVzaW9uYXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9wdWxsLmM6NDY3Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiVmVnZXUgZ2l0LXB1bGwoMSkgcGVyIGRldGFsbHMuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NjIKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTm8gaGkgaGEgY2FwIGluZm9ybWFjacOzIGRlIHNlZ3VpbWVudCBwZXIgYSBsYSBicmFuY2EgYWN0dWFsLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorbXNnc3RyICIiCisiU2kgdm9sZXUgZXN0YWJsaXIgaW5mb3JtYWNpw7MgZGUgc2VndWltZW50IHBlciBhIGFxdWVzdGEgYnJhbmNhLCBwb2RldSBmZXItaG8gIgorImFtYjpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNhPiAlc1xuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJMYSB2b3N0cmEgY29uZmlndXJhY2nDsyBlc3BlY2lmaWNhIGZ1c2lvbmFyIGFtYiBsYSByZWZlcsOobmNpYSAnJXMnXG4iCisiZGVsIHJlbW90LCBwZXLDsiBubyBzJ2hhIG9idGluZ3V0IHRhbCByZWZlcsOobmNpYS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjgzMAorbXNnaWQgIlVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleC4iCittc2dzdHIgIkFjdHVhbGl0emFudCB1bmEgYnJhbmNhIG5vIG5hc2N1ZGEgYW1iIGNhbnZpcyBhZmVnaXRzIGEgbCfDrW5kZXguIgorCisjOiBidWlsdGluL3B1bGwuYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICIiCisibCdvYnRlbmNpw7MgaGEgYWN0dWFsaXR6YXQgZWwgY2FwIGRlIGxhIGJyYW5jYSBhY3R1YWwuXG4iCisiYXZhbsOnYW50IHLDoHBpZGFtZW50IGVsIHZvc3RyZSBhcmJyZSBkZSB0cmViYWxsIGRlcyBkZVxuIgorImxhIGNvbWlzc2nDsyAlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJObyBlcyBwb3QgYXZhbsOnYXIgcsOgcGlkYW1lbnQgZWwgdm9zdHJlIGFyYnJlIGRlIHRyZWJhbGwuXG4iCisiRGVzcHLDqHMgZCdhc3NlZ3VyYXIgcXVlIGjDoGdpdSBkZXNhdCBxdWFsc2V2dWxsYSBjb3NzYSBwcmVjaW9zYSBkZSBsYSBzb3J0aWRhICIKKyJkZVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJleGVjdXRldVxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInBlciBhIHJlY3VwZXJhci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg3OQorbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQuIgorbXNnc3RyICJObyBlcyBwb3QgZnVzaW9uYXIgbcO6bHRpcGxlcyBicmFucXVlcyBhIHVuIGNhcCBidWl0LiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODgzCittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAiTm8gZXMgcG90IHJlYmFzYXIgc29icmUgbcO6bHRpcGxlcyBicmFucXVlcy4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE1Cittc2dpZCAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBwdXNoIFs8b3BjaW9ucz5dIFs8ZGlww7JzaXQ+IFs8ZXNwZWNpZmljYWNpw7MtZGUtcmVmZXLDqG5jaWE+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjg2Cittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJhYnJldmlhdHVyYSBkJ2V0aXF1ZXRhIHNlbnNlIDx0YWc+IgorCisjOiBidWlsdGluL3B1c2guYzo5NgorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICItLWRlbGV0ZSBub23DqXMgYWNjZXB0YSBub21zIGRlIHJlZmVyw6huY2lhIGRlIGRlc3TDrSBzZW56aWxscyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQwCittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiIgorIlxuIgorIlBlciBhIHRyaWFyIHF1YWxzZXZ1bGxhIG9wY2nDsyBwZXJtYW5lbnRtZW50LCB2ZWdldSBwdXNoLmRlZmF1bHQgYSAnZ2l0IGhlbHAgIgorImNvbmZpZycuIgorCisjOiBidWlsdGluL3B1c2guYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorbXNnc3RyICIiCisiTGEgYnJhbmNhIGZvbnQgZGUgbGEgdm9zdHJhIGJyYW5jYSBhY3R1YWwgbm8gY29pbmNpZGVpeFxuIgorImFtYiBlbCBub20gZGUgbGEgdm9zdHJhIGJyYW5jYSBhY3R1YWwuIFBlciBhIHB1amFyLWxhIGEgbGFcbiIKKyJicmFuY2EgZm9udCBlbiBlbCByZW1vdCwgdXNldVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiUGVyIGEgcHVqYXIgYSBsYSBicmFuY2EgZGVsIG1hdGVpeCBub20gZW4gZWwgcmVtb3QsIHVzZXVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIkFjdHVhbG1lbnQgbm8gc291IGVuIGNhcCBicmFuY2EuXG4iCisiUGVyIGEgcHVqYXIgbGEgaGlzdMOycmlhIHF1ZSBjb25kdWVpeCBhIGwnZXN0YXQgYWN0dWFsXG4iCisiKEhFQUQgc2VwYXJhdCkgYXJhLCB1c2V1XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5vbS1kZS1icmFuY2EtcmVtb3RhPlxuIgorCisjOiBidWlsdGluL3B1c2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgIiIKKyJMYSBicmFuY2EgYWN0dWFsICVzIG5vIHTDqSBjYXAgYnJhbmNhIGZvbnQuXG4iCisiUGVyIGEgcHVqYXIgbGEgYnJhbmNhIGFjdHVhbCBpIGVzdGFibGlyIGVsIHJlbW90IGNvbSBhIGZvbnQsIHVzZXVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICJMYSBicmFuY2EgYWN0dWFsICVzIHTDqSBtw7psdGlwbGVzIGJyYW5xdWVzIGZvbnRzLCByZWZ1c2FudCBwdWphci4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiRXN0ZXUgcHVqYW50IGFsIHJlbW90ICclcycsIHF1ZSBubyDDqXMgbGEgZm9udCBkZSBsYSB2b3N0cmFcbiIKKyJicmFuY2EgYWN0dWFsICclcycsIHNlbnNlIGRpci1tZSBxdcOoIHB1amFyIHBlciBhIGFjdHVhbGl0emFyXG4iCisicXVpbmEgYnJhbmNhIHJlbW90YS4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwNgorbXNnaWQgIiIKKyJwdXNoLmRlZmF1bHQgaXMgdW5zZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSBoYXMgY2hhbmdlZCBpblxuIgorIkdpdCAyLjAgZnJvbSAnbWF0Y2hpbmcnIHRvICdzaW1wbGUnLiBUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZVxuIgorImFuZCBtYWludGFpbiB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3IsIHVzZTpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igbm93LCB1c2U6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyJcbiIKKyJXaGVuIHB1c2guZGVmYXVsdCBpcyBzZXQgdG8gJ21hdGNoaW5nJywgZ2l0IHdpbGwgcHVzaCBsb2NhbCBicmFuY2hlc1xuIgorInRvIHRoZSByZW1vdGUgYnJhbmNoZXMgdGhhdCBhbHJlYWR5IGV4aXN0IHdpdGggdGhlIHNhbWUgbmFtZS5cbiIKKyJcbiIKKyJTaW5jZSBHaXQgMi4wLCBHaXQgZGVmYXVsdHMgdG8gdGhlIG1vcmUgY29uc2VydmF0aXZlICdzaW1wbGUnXG4iCisiYmVoYXZpb3IsIHdoaWNoIG9ubHkgcHVzaGVzIHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgY29ycmVzcG9uZGluZ1xuIgorInJlbW90ZSBicmFuY2ggdGhhdCAnZ2l0IHB1bGwnIHVzZXMgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJTZWUgJ2dpdCBoZWxwIGNvbmZpZycgYW5kIHNlYXJjaCBmb3IgJ3B1c2guZGVmYXVsdCcgZm9yIGZ1cnRoZXIgIgorImluZm9ybWF0aW9uLlxuIgorIih0aGUgJ3NpbXBsZScgbW9kZSB3YXMgaW50cm9kdWNlZCBpbiBHaXQgMS43LjExLiBVc2UgdGhlIHNpbWlsYXIgbW9kZVxuIgorIidjdXJyZW50JyBpbnN0ZWFkIG9mICdzaW1wbGUnIGlmIHlvdSBzb21ldGltZXMgdXNlIG9sZGVyIHZlcnNpb25zIG9mIEdpdCkiCittc2dzdHIgIiIKKyJwdXNoLmRlZmF1bHQgbm8gZXN0w6AgZXN0YWJsZXJ0OyBlbCBzZXUgdmFsb3IgaW1wbMOtY2l0IHMnaGFcbiIKKyJjYW52aWF0IGVuIGVsIEdpdCAyLjAgZGUgJ21hdGNoaW5nJyBhICdzaW1wbGUnLiBQZXIgYSBzdXByaW1pclxuIgorImFxdWVzdCBtaXNzYXRnZSBpIG1hbnRlbmlyIGVsIGNvbXBvcnRhbWVudCB0cmFkaWNpb25hbCxcbiIKKyJ1c2V1OlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyJcbiIKKyJQZXIgYSBzdXByaW1pciBhcXVlc3QgbWlzc2F0Z2UgaSBhZG9wdGFyIGVsIGNvbXBvcnRhbWVudCBub3UgYXJhLCB1c2V1OlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisiXG4iCisiUXVhbiBwdXNoLmRlZmF1bHQgw6lzICdtYXRjaGluZycsIGdpdCBwdWphcsOgIGxlcyBicmFucXVlcyBsb2NhbHMgYSBsZXNcbiIKKyJicmFucXVlcyByZW1vdGVzIHF1ZSBqYSBleGlzdGVpeGVuIGFtYiBlbCBtYXRlaXggbm9tLlxuIgorIlxuIgorIkRlcyBkZWwgR2l0IDIuMCwgZWwgR2l0IHBlciBkZWZlY3RlIHTDqSBlbCBjb21wb3J0YW1lbnQgbcOpc1xuIgorImNvbnNlcnZhdGl1ICdzaW1wbGUnLCBxdWUgbm9tw6lzIHB1amEgbGEgYnJhbmNhIGFjdHVhbCBhIGxhIGJyYW5jYVxuIgorImNvcnJlc3BvbmVudCBxdWUgJ2dpdCBwdWxsJyB1c2EgcGVyIGEgYWN0dWFsaXR6YXIgbGEgYnJhbmNhIGFjdHVhbC5cbiIKKyJcbiIKKyJWZWdldSAnZ2l0IGhlbHAgY29uZmlnJyBpIGNlcnF1ZXUgJ3B1c2guZGVmYXVsdCcgcGVyIGEgbcOpcyBpbmZvcm1hY2nDsy5cbiIKKyIocydoYSBpbnRyb2R1w690IGVsIG1vZGUgJ3NpbXBsZScgZW4gZWwgR2l0IDEuNy4xMS4gVXNldSBlbCBtb2RlIHNpbWlsYXJcbiIKKyInY3VycmVudCcgZW4gbGxvYyBkZSAnc2ltcGxlJyBzaSBhIHZlZ2FkZXMgdXNldSB2ZXJzaW9ucyBtw6lzIGFudGlndWVzXG4iCisiZGVsIEdpdCkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MworbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisiTm8gaGV1IGVzcGVjaWZpY2F0IGNhcCBlc3BlY2lmaWNhY2nDsyBkZSByZWZlcsOobmNpYSBhIHB1amFyLCBpIHB1c2guZGVmYXVsdCAiCisiw6lzIFwibm90aGluZ1wiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjgwCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiUydoYW4gcmVidXRqYXQgbGVzIGFjdHVhbGl0emFjaW9ucyBwZXJxdcOoIGVsIHB1bnQgZGUgbGEgdm9zdHJhIGJyYW5jYVxuIgorImFjdHVhbCBlc3TDoCBkYXJyZXJlIGRlIGxhIHNldmEgYnJhbmNhIHJlbW90YSBjb3JyZXNwb25lbnQuIEludGVncmV1XG4iCisiZWxzIGNhbnZpcyByZW1vdHMgKHBlciBleGVtcGxlLCAnZ2l0IHB1bGwgLi4uJykgYWJhbnMgZGUgcHVqYXIgZGUgbm91LlxuIgorIlZlZ2V1IGxhICdOb3RhIHNvYnJlIGF2YW7Dp29zIHLDoHBpZHMnIGEgJ2dpdCBwdXNoIC0taGVscCcgcGVyIGRldGFsbHMuIgorCisjOiBidWlsdGluL3B1c2guYzoyODYKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJTJ2hhbiByZWJ1dGphdCBsZXMgYWN0dWFsaXR6YWNpb25zIHBlcnF1w6ggdW4gcHVudCBkZSBicmFuY2EgcHVqYWRhXG4iCisiZXN0w6AgZGFycmVyZSBkZSBsYSBzZXZhIGJyYW5jYSByZW1vdGEgY29ycmVzcG9uZW50LiBBZ2FmZXUgYXF1ZXN0YVxuIgorImJyYW5jYSBpIGludGVncmV1IGVscyBjYW52aXMgcmVtb3RzIChwZXIgZXhlbXBsZSwgJ2dpdCBwdWxsIC4uLicpXG4iCisiYWJhbnMgZGUgcHVqYXIgZGUgbm91LlxuIgorIlZlZ2V1IGxhICdOb3RhIHNvYnJlIGF2YW7Dp29zIHLDoHBpZHMnIGEgJ2dpdCBwdXNoIC0taGVscCcgcGVyIGRldGFsbHMuIgorCisjOiBidWlsdGluL3B1c2guYzoyOTIKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlbW90ZSBjb250YWlucyB3b3JrIHRoYXQgeW91IGRvXG4iCisibm90IGhhdmUgbG9jYWxseS4gVGhpcyBpcyB1c3VhbGx5IGNhdXNlZCBieSBhbm90aGVyIHJlcG9zaXRvcnkgcHVzaGluZ1xuIgorInRvIHRoZSBzYW1lIHJlZi4gWW91IG1heSB3YW50IHRvIGZpcnN0IGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiUydoYW4gcmVidXRqYXQgbGVzIGFjdHVhbGl0emFjaW9ucyBwZXJxdcOoIGVsIHJlbW90IGNvbnTDqSB0cmViYWxsXG4iCisicXVlIG5vIHRlbml1IGxvY2FsbWVudC4gQWl4w7IgdXN1YWxtZW50IMOpcyBjYXVzYXQgcGVyIHVuIGFsdHJlIGRpcMOyc2l0XG4iCisicXVlIGhhIHB1amF0IGEgbGEgbWF0ZWl4YSByZWZlcsOobmNpYS4gUG90IHNlciBxdWUgcHJpbWVyIHZ1bGd1ZXVcbiIKKyJpbnRlZ3JhciBlbHMgY2FudmlzIHJlbW90cyAocGVyIGV4ZW1wbGUsICdnaXQgcHVsbCAuLi4nKSBhYmFucyBkZVxuIgorInB1amFyIGRlIG5vdS5cbiIKKyJWZWdldSBsYSAnTm90YSBzb2JyZSBhdmFuw6dvcyByw6BwaWRzJyBhICdnaXQgcHVzaCAtLWhlbHAnIHBlciBkZXRhbGxzLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiIgorIlMnaGFuIHJlYnV0amF0IGxlcyBhY3R1YWxpdHphY2lvbnMgcGVycXXDqCBsJ2V0aXF1ZXRhIGphIGV4aXN0ZWl4IGVuIGVsIHJlbW90LiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzAyCittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyJObyBwb2RldSBhY3R1YWxpdHphciB1bmEgcmVmZXLDqG5jaWEgcmVtb3RhIHF1ZSBhc3NlbnlhbGEgdW5cbiIKKyJvYmplY3RlIG5vIGRlIGNvbWlzc2nDsywgbmkgYWN0dWFsaXR6YXIgdW5hIHJlZmVyw6huY2lhIHJlbW90YSBwZXJcbiIKKyJmZXIgcXVlIGFzc2VueWFsaSB1biBvYmplY3RlIG5vIGRlIGNvbWlzc2nDsywgc2Vuc2UgdXNhciBsJ29wY2nDs1xuIgorIictLWZvcmNlJy5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgdG8gJXNcbiIKK21zZ3N0ciAiUHVqYW50IGEgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICJzJ2hhIGZhbGxhdCBlbiBwdWphciBhbGd1bmVzIHJlZmVyw6huY2llcyBhICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICJkaXDDsnNpdCBkb2xlbnQgJyVzJyIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzk2Cittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgIgorInJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgIiIKKyJDYXAgZGVzdMOtIGRlIHB1amFkYSBjb25maWd1cmFkYS5cbiIKKyJFc3BlY2lmaXF1ZXUgbCdVUkwgZGVzIGRlIGxhIGzDrW5pYSBkJ29yZHJlcyBvIGLDqSBjb25maWd1cmV1IHVuIGRpcMOyc2l0IHJlbW90ICIKKyJmZW50IHNlcnZpclxuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bm9tPiA8dXJsPlxuIgorIlxuIgorImkgZGVzcHLDqXMgcHVnZXUgZmVudCBzZXJ2aXIgZWwgbm9tIHJlbW90XG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxub20+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxMQorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgaSAtLXRhZ3Mgc8OzbiBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3B1c2guYzo0MTIKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLWFsbCBubyBlcyBwb3QgY29tYmluYXIgYW1iIGVzcGVjaWZpY2FjaW9ucyBkZSByZWZlcsOobmNpYSIKKworIzogYnVpbHRpbi9wdXNoLmM6NDE3Cittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLW1pcnJvciBpIC0tdGFncyBzw7NuIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxOAorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yIG5vIGVzIHBvdCBjb21iaW5hciBhbWIgZXNwZWNpZmljYWNpb25zIGRlIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL3B1c2guYzo0MjMKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgaSAtLW1pcnJvciBzw7NuIGluY29tcGF0aWJsZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUzOQorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgImRpcMOyc2l0IgorCisjOiBidWlsdGluL3B1c2guYzo1NDAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICJwdWphIHRvdGVzIGxlcyByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MSBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAicmVmbGVjdGVpeCB0b3RlcyBsZXMgcmVmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NDMKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAic3VwcmltZWl4IGxlcyByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NAorbXNnaWQgInB1c2ggdGFncyAoY2FuJ3QgYmUgdXNlZCB3aXRoIC0tYWxsIG9yIC0tbWlycm9yKSIKK21zZ3N0ciAicHVqYSBsZXMgZXRpcXVldGVzIChubyBlcyBwb3QgdXNhciBhbWIgLS1hbGwgbyAtLW1pcnJvcikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NyBidWlsdGluL3NlbmQtcGFjay5jOjE2NAorbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgImZvcsOnYSBsZXMgYWN0dWFsaXR6YWNpb25zIgorCisjOiBidWlsdGluL3B1c2guYzo1NDkgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzUKK21zZ2lkICJyZWZuYW1lPjo8ZXhwZWN0IgorbXNnc3RyICJub20tZGUtcmVmZXLDqG5jaWE+Ojxlc3BlcmF0IgorCisjOiBidWlsdGluL3B1c2guYzo1NTAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAicmVxdWVyZWl4IHF1ZSBlbCB2YWxvciBhbnRpYyBkZSBsYSByZWZlcsOobmNpYSBzaWd1aSBkJ2FxdWVzdCB2YWxvciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUzCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJjb250cm9sYSBsYSBwdWphZGEgcmVjdXJzaXZhIGRlbHMgc3VibcOyZHVscyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU1IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY5Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAidXNhIGVsIHBhcXVldCBwcmltIgorCisjOiBidWlsdGluL3B1c2guYzo1NTYgYnVpbHRpbi9wdXNoLmM6NTU3IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTU4CisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE1OQorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICJwcm9ncmFtYSBxdWUgcmVwIGVscyBwYXF1ZXRzIgorCisjOiBidWlsdGluL3B1c2guYzo1NTgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAiZXN0YWJsZWl4IGxhIGZvbnQgcGVyIGEgZ2l0IHB1bGwvc3RhdHVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NjEKK21zZ2lkICJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIKK21zZ3N0ciAicG9kYSBsZXMgcmVmZXLDqG5jaWVzIGVsaW1pbmFkZXMgbG9jYWxtZW50IgorCisjOiBidWlsdGluL3B1c2guYzo1NjMKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiZXZpdGEgZWwgZ2FueG8gZGUgcHJlcHVqYWRhIgorCisjOiBidWlsdGluL3B1c2guYzo1NjQKK21zZ2lkICJwdXNoIG1pc3NpbmcgYnV0IHJlbGV2YW50IHRhZ3MiCittc2dzdHIgInB1amEgbGVzIGV0aXF1ZXRlcyBhYnNlbnRzIHBlcsOyIHJlbGxldmFudHMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NyBidWlsdGluL3NlbmQtcGFjay5jOjE2NgorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICJmaXJtYSBsYSBwdWphZGEgYW1iIEdQRyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcwCittc2dpZCAicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiCittc2dzdHIgImRlbWFuYSB1bmEgdHJhbnNhY2Npw7MgYXTDsm1pY2EgYWwgY29zdGF0IHJlbW90IgorCisjOiBidWlsdGluL3B1c2guYzo1NzkKK21zZ2lkICItLWRlbGV0ZSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFsbCwgLS1taXJyb3IgYW5kIC0tdGFncyIKK21zZ3N0ciAiLS1kZWxldGUgw6lzIGluY29tcGF0aWJsZSBhbWIgLS1hbGwsIC0tbWlycm9yIGkgLS10YWdzIgorCisjOiBidWlsdGluL3B1c2guYzo1ODEKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUgbm8gdMOpIHNlbnRpdCBzZW5zZSByZWZlcsOobmNpZXMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MzcKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4PikgIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGlnbm9yYWwtZGUtZ2l0Pl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gIgorIlstLWluZGV4LW91dHB1dD08Zml0eGVyPl0gKC0tZW1wdHkgfCA8YXJicmUxPiBbPGFyYnJlMj4gWzxhcmJyZTM+XV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExMAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgImVzY3JpdSBsJ8OtbmRleCByZXN1bHRhbnQgYWwgPGZpdHhlcj4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTEzCittc2dpZCAib25seSBlbXB0eSB0aGUgaW5kZXgiCittc2dzdHIgIm5vbcOpcyBidWlkYSBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTUKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICJGdXNpb25hbnQiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE3Cittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAicmVhbGl0emEgdW5hIGZ1c2nDsyBhIG3DqXMgZCd1bmEgbGVjdHVyYSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTkKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgImZ1c2nDsyBkZSAzIHZpZXMgc2kgbm8gY2FsIGZ1c2nDsyBhIG5pdmVsbCBkZSBmaXR4ZXJzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgImZ1c2nDsyBkZSAzIHZpZXMgZW4gcHJlc8OobmNpYSBkJ2FmZWdpbWVudHMgaSBlbGltaW5hY2lvbnMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCittc2dpZCAic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiZWwgbWF0ZWl4IHF1ZSAtbSwgcGVyw7IgZGVzY2FydGEgbGVzIGVudHJhZGVzIG5vIGZ1c2lvbmFkZXMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAiPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICI8c3ViZGlyZWN0b3JpPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI1Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgImxsZWdpdSBsJ2FyYnJlIGEgbCfDrW5kZXggc290YSA8c3ViZGlyZWN0b3JpPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAiYWN0dWFsaXR6YSBsJ2FyYnJlIGRlIHRyZWJhbGwgYW1iIGVsIHJlc3VsdGF0IGRlIGZ1c2nDsyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzAKK21zZ2lkICJnaXRpZ25vcmUiCittc2dzdHIgImlnbm9yYWwgZGUgZ2l0IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAicGVybWV0IHF1ZSBlbHMgZml0eGVycyBleHBsw61jaXRhbWVudCBpZ25vcmF0cyBzZSBzb2JyZWVzY3JpZ3VpbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzQKK21zZ2lkICJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciCittc2dzdHIgIm5vIGNvbXByb3ZpcyBsJ2FyYnJlIGRlIHRyZWJhbGwgZGVzcHLDqXMgZGUgZnVzaW9uYXIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICJubyBhY3R1YWxpdHppcyBsJ8OtbmRleCBuaSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM3Cittc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnc3RyICJzYWx0YSBsJ2FwbGljYWNpw7MgZGVsIGZpbHRyZSBkJ2FnYWZhbWVudCBkaXNwZXJzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiZGVwdXJhIHVucGFjay10cmVlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiclcycgcGVyIGEgJyVzJyBubyDDqXMgdW5hIG1hcmNhIGRlIHRlbXBzIHbDoGxpZGEiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTQ5IGJ1aWx0aW4vcmVmbG9nLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIG5vIMOpcyB1bmEgbWFyY2EgZGUgdGVtcHMgdsOgbGlkYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzCittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jYT5dIFstbSA8bWVzdHJhPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5vbT4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQgYnVpbHRpbi9yZW1vdGUuYzozMworbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA8YW50aWM+IDxub3U+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1IGJ1aWx0aW4vcmVtb3RlLmM6MzgKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDxub20+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2IGJ1aWx0aW4vcmVtb3RlLmM6NDMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDxub20+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNhPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOQorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdydXA+IHwgPHJlbW90PikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5vbT4gPGJyYW5jYT4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEgYnVpbHRpbi9yZW1vdGUuYzo2OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxub20+IDx1cmwtbm91PiBbPHVybC1hbnRpYz5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyIGJ1aWx0aW4vcmVtb3RlLmM6NzAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5vbT4gPHVybC1ub3U+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzIGJ1aWx0aW4vcmVtb3RlLmM6NzEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5vbT4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjgKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs8b3BjaW9ucz5dIDxub20+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ4Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bm9tPiA8YnJhbmNhPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5vbT4gPGJyYW5jYT4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTQKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzxvcGNpb25zPl0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTkKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wY2lvbnM+XSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NAorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wY2lvbnM+XSBbPGdydXA+IHwgPHJlbW90Pl0uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIkFjdHVhbGl0emFudCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Igw6lzIHBlcmlsbMOzcyBpIGRlc2Fwcm92YXQ7IHNpIHVzXG4iCisiXHQgcGxhdSwgdXNldSAtLW1pcnJvcj1mZXRjaCBvXG4iCisiXHQgLS1taXJyb3I9cHVzaCBlbiBsbG9jIGQnYWl4w7IiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAicGFyw6BtZXRyZSBkZSByZWZsZXhpw7MgZGVzY29uZWd1dDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzCittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAib2J0w6luIGxlcyBicmFucXVlcyByZW1vdGVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgImVuIG9idGVuaXIsIGltcG9ydGEgdG90ZXMgbGVzIGV0aXF1ZXRlcyBpIHRvdHMgZWxzIG9iamVjdGVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAibyBubyBvYnRpbmd1aXMgY2FwIGV0aXF1ZXRhICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MAorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgImJyYW5xdWVzIGEgc2VndWlyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MQorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgImJyYW5jYSBtZXN0cmEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYyCittc2dpZCAicHVzaHxmZXRjaCIKK21zZ3N0ciAicHVzaHxmZXRjaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjMKK21zZ2lkICJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIKK21zZ3N0ciAiZXN0YWJsZWl4IGVsIHJlbW90IGNvbSBhIG1pcmFsbCBhbCBxdWFsIHB1amFyIG8gZGVsIHF1YWwgb2J0ZW5pciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICJlc3BlY2lmaWNhciB1bmEgYnJhbmNhIG1lc3RyYSBubyB0w6kgc2VudGl0IGFtYiAtLW1pcnJvciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzcKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICIiCisiZXNwZWNpZmljYXIgbGVzIGJyYW5xdWVzIGEgc2VndWlyIHTDqSBzZW50aXQgbm9tw6lzIGFtYiBtaXJhbGxzIGQnb2J0ZW5jacOzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NyBidWlsdGluL3JlbW90ZS5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJlbCByZW1vdCAlcyBqYSBleGlzdGVpeC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkxIGJ1aWx0aW4vcmVtb3RlLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycgbm8gw6lzIHVuIG5vbSBkZSByZW1vdCB2w6BsaWQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBjb25maWd1cmFyIGxhIG1lc3RyYSAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAiIgorIk5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbCBtYXBhIGQnb2J0ZW5jacOzIGRlIGwnZXNwZWNpZmljYWNpw7MgZGUgcmVmZXLDqG5jaWEgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDM2IGJ1aWx0aW4vcmVtb3RlLmM6NDQ0Cittc2dpZCAiKG1hdGNoaW5nKSIKK21zZ3N0ciAiKGNvaW5jaWRlbnQpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0OAorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIoc3VwcmltaXIpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU4OCBidWlsdGluL3JlbW90ZS5jOjU5NCBidWlsdGluL3JlbW90ZS5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcycgdG8gJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhbm5leGFyICclcycgYSAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYzMCBidWlsdGluL3JlbW90ZS5jOjc2OSBidWlsdGluL3JlbW90ZS5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJXMiCittc2dzdHIgIk5vIGhpIGhhIHRhbCByZW1vdDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNhbnZpYXIgZWwgbm9tIGRlIGxhIHNlY2Npw7MgZGUgY29uZmlndXJhY2nDsyAnJXMnIGEgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMgYnVpbHRpbi9yZW1vdGUuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGVsaW1pbmFyIGxhIHNlY2Npw7MgZGUgY29uZmlndXJhY2nDsyAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlZnNwZWNcbiIKKyJcdCVzXG4iCisiXHRQbGVhc2UgdXBkYXRlIHRoZSBjb25maWd1cmF0aW9uIG1hbnVhbGx5IGlmIG5lY2Vzc2FyeS4iCittc2dzdHIgIiIKKyJObyBhY3R1YWxpdHphbnQgbCdlc3BlY2lmaWNhY2nDsyBkZSByZWZlcsOobmNpZXMgZCdvYnRlbmNpw7Mgbm8gcGVyIGRlZmVjdGVcbiIKKyJcdCVzXG4iCisiXHRTaSB1cyBwbGF1LCBhY3R1YWxpdHpldSBsYSBjb25maWd1cmFjacOzIG1hbnVhbG1lbnQgc2kgw6lzIG5lY2Vzc2FyaS4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhbm5leGFyICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgJyVzJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlc3RhYmxpciAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibGEgc3VwcmVzc2nDsyBkZSAnJXMnIGhhIGZhbGxhdCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImxhIGNyZWFjacOzIGRlICclcycgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwNworbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICIiCisiTm90YTogVW5hIGJyYW5jYSBmb3JhIGRlIGxhIGplcmFycXVpYSByZWZzL3JlbW90ZXMvIG5vIHMnaGEgZWxpbWluYXQ7XG4iCisicGVyIGEgc3VwcmltaXItbGEsIHVzZXU6IgorbXNnc3RyWzFdICIiCisiTm90YTogQWxndW5lcyBicmFucXVlcyBmb3JhIGRlIGxhIGplcmFycXVpYSByZWZzL3JlbW90ZXMvIG5vIHMnaGFuICIKKyJlbGltaW5hdDtcbiIKKyJwZXIgYSBzdXByaW1pci1sZXMsIHVzZXU6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBub3UgKGxhIHByw7J4aW1hIG9idGVuY2nDsyBlbW1hZ2F0emVtYXLDoCBhIHJlbW90ZXMvJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyNQorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIgc2VndWl0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyNworbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIgZXN0YW5jYXQgKHVzZXUgJ2dpdCByZW1vdGUgcHJ1bmUnIHBlciBhIGVsaW1pbmFyKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjkKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgImJyYW5jaC4lcy5tZXJnZSBubyB2w6BsaWQ7IG5vIGVzIHBvdCByZWJhc2FyIHNvYnJlID4gMSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgImVzIHJlYmFzYSBzb2JyZSBlbCByZW1vdCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiZXMgZnVzaW9uYSBhbWIgZWwgcmVtb3QgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgxCittc2dpZCAiICAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAgIGkgYW1iIGVsIHJlbW90IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgImVzIGZ1c2lvbmEgYW1iIGVsIHJlbW90ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4NAorbXNnaWQgIiAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAgaSBhbWIgZWwgcmVtb3QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzMAorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAiY3JlYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDMzCittc2dpZCAiZGVsZXRlIgorbXNnc3RyICJzdXByaW1laXgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzNworbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgImFsIGRpYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQwCittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAiYXZhbsOnIHLDoHBpZCBwb3NzaWJsZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQzCittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgImxvY2FsIG5vIGFjdHVhbGl0emF0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgZm9yw6dhIGEgJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgcHVqYSBhICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgZm9yw6dhIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIHB1amEgYSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTI4Cittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgIm5vIGNvbnN1bHRpcyBlbHMgcmVtb3RzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiogcmVtb3QgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIGQnb2J0ZW5jacOzOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU3IGJ1aWx0aW4vcmVtb3RlLmM6MTMwOAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIoc2Vuc2UgVVJMKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTY2IGJ1aWx0aW4vcmVtb3RlLmM6MTE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIGRlIHB1amFkYTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MCBidWlsdGluL3JlbW90ZS5jOjExNzIgYnVpbHRpbi9yZW1vdGUuYzoxMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIEJyYW5jYSBkZSBIRUFEOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiIKKyIgIEJyYW5jYSBkZSBIRUFEIChlbCBIRUFEIHJlbW90IMOpcyBhbWJpZ3UsIHBvdCBzZXIgdW4gZGVscyBzZWfDvGVudHMpOlxuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBSZW1vdGUgYnJhbmNoOiVzIgorbXNnaWRfcGx1cmFsICIgIFJlbW90ZSBicmFuY2hlczolcyIKK21zZ3N0clswXSAiICBCcmFuY2EgcmVtb3RhOiVzIgorbXNnc3RyWzFdICIgIEJyYW5xdWVzIHJlbW90ZXM6JXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5MSBidWlsdGluL3JlbW90ZS5jOjEyMTgKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiAoZXN0YXQgbm8gY29uc3VsdGF0KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjAwCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAgQnJhbmNhIGxvY2FsIGNvbmZpZ3VyYWRhIHBlciBhICdnaXQgcHVsbCc6IgorbXNnc3RyWzFdICIgIEJyYW5xdWVzIGxvY2FscyBjb25maWd1cmFkZXMgcGVyIGEgJ2dpdCBwdWxsJzoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwOAorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAgJ2dpdCBwdXNoJyByZWZsZWN0aXLDoCBsZXMgcmVmZXLDqG5jaWVzIGxvY2FscyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIgIFJlZmVyw6huY2lhIGxvY2FsIGNvbmZpZ3VyYWRhIHBlciBhICdnaXQgcHVzaCclczoiCittc2dzdHJbMV0gIiAgUmVmZXLDqG5jaWVzIGxvY2FscyBjb25maWd1cmFkZXMgcGVyIGEgJ2dpdCBwdXNoJyVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM2Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICJlc3RhYmxlaXggcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIHNlZ29ucyBlbCByZW1vdCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM4Cittc2dpZCAiZGVsZXRlIHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIKK21zZ3N0ciAic3VwcmltZWl4IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzCittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiTm8gZXMgcG90IGRldGVybWluYXIgZWwgSEVBRCByZW1vdCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU1Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIiIKKyJNw7psdGlwbGVzIGJyYW5xdWVzIGRlIEhFQUQgcmVtb3Rlcy4gU2kgdXMgcGxhdSwgdHJpZXUtbmUgdW5hIGV4cGzDrWNpdGFtZW50ICIKKyJhbWI6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBzdXByaW1pciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgIk5vIMOpcyB1bmEgcmVmZXLDqG5jaWEgdsOgbGlkYTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgY29uZmlndXJhciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBlcyB0b3JuYXLDoCBwZW5qYW50ISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIHMnaGEgdG9ybmF0IHBlbmphbnQhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiUG9kYW50ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFtwb2RhcmlhXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIgKiBbcG9kYXRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNjkKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJwb2RhIGVscyByZW1vdHMgZGVzcHLDqXMgZCdvYnRlbmlyLWxvcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDM1IGJ1aWx0aW4vcmVtb3RlLmM6MTUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICJObyBoaSBoYSB0YWwgcmVtb3QgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDU1Cittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAiYWZlZ2VpeCBicmFuY2EiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MgorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgImNhcCByZW1vdCBlc3BlY2lmaWNhdCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDg0Cittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIm1hbmlwdWxhIGVscyBVUkwgZGUgcHVqYWRhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODYKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICJhZmVnZWl4IFVSTCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDg4Cittc2dpZCAiZGVsZXRlIFVSTHMiCittc2dzdHIgInN1cHJpbWVpeCBVUkxzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTUKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tYWRkIC0tZGVsZXRlIG5vIHTDqSBzZW50aXQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIlBhdHLDsyBkJ1VSTCBhbnRpYyBubyB2w6BsaWQ6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICJObyBzJ2hhIHRyb2JhdCB0YWwgVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQ1Cittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICJObyBzZSBzdXByaW1pcmFuIHRvdHMgZWxzIFVSTCBubyBkZSBwdWphZGEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1OQorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgInNpZ3VlcyBkZXRhbGxhdDsgcydoYSBkZSBjb2zCt2xvY2FyIGFiYW5zIGQndW4gc3Vib3JkcmUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTcKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmVwYWNrIFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE1OQorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICJlbXBhcXVldGEtaG8gdG90IGVuIHVuIMO6bmljIHBhcXVldCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjEKK21zZ2lkICJzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlIgorbXNnc3RyICJlbCBtYXRlaXggcXVlIC1hLCBpIHNvbHRhIGVscyBvYmplY3RlcyBpbmFiYXN0YWJsZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTY0Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICJlbGltaW5hIGVscyBwYXF1ZXRzIHJlZHVuZGFudHMsIGkgZXhlY3V0ZXUgZ2l0LXBydW5lLXBhY2tlZCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjYKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzc2EgLS1uby1yZXVzZS1kZWx0YSBhIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTY4Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLW9iamVjdCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNzYSAtLW5vLXJldXNlLW9iamVjdCBhIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTcwCittc2dpZCAiZG8gbm90IHJ1biBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorbXNnc3RyICJubyBleGVjdXRpcyBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3MworbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNzYSAtLWxvY2FsIGEgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzUKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgImVzY3JpdSDDrW5kZXggZGUgbWFwYSBkZSBiaXRzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3NgorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICJkYXRhIGFwcm94aW1hZGEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc3Cittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAiYW1iIC1BLCBubyBzb2x0aXMgZWxzIG9iamVjdGVzIG3DqXMgdmVsbHMgcXVlIGFxdWVzdCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzkKK21zZ2lkICJzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCBmb3IgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgIm1pZGEgZGUgbGEgZmluZXN0cmEgcXVlIHMndXNhIHBlciBhIGNvbXByZXNzacOzIGRlIGRlbHRlcyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODAgYnVpbHRpbi9yZXBhY2suYzoxODQKK21zZ2lkICJieXRlcyIKK21zZ3N0ciAib2N0ZXRzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4MQorbXNnaWQgInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IgorbXNnc3RyICIiCisiZWwgbWF0ZWl4IHF1ZSBsJ2FudGVyaW9yLCBwZXLDsiBsaW1pdGEgbGEgbWlkYSBkZSBtZW3DsnJpYSBlbiBsbG9jIGRlbCBub21icmUgIgorImQnZW50cmFkZXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgzCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJsaW1pdGEgbGEgcHJvZnVuZGl0YXQgbcOgeGltYSBkZSBsZXMgZGVsdGVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4NQorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICJtaWRhIG3DoHhpbWEgZGUgY2FkYSBmaXR4ZXIgZGUgcGFxdWV0IgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4NworbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICJyZWVtcGFxdWV0YSBlbHMgb2JqZWN0ZXMgZW4gcGFxdWV0cyBtYXJjYXRzIGFtYiAua2VlcCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImwnZWxpbWluYWNpw7MgZGUgJyVzJyBoYSBmYWxsYXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE5Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3RlPiA8cmVlbXBsYcOnYW1lbnQ+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMAorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDxvYmplY3Q+IgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0ZT4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29taXNzacOzPiBbPG1hcmU+Li4uXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdGU+Li4uIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXRyw7M+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNSBidWlsdGluL3JlcGxhY2UuYzozNjMgYnVpbHRpbi9yZXBsYWNlLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICJObyDDqXMgdW4gbm9tIGQnb2JqZWN0ZSB2w6BsaWQ6ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgImV0aXF1ZXRhIGRlIGZ1c2nDsyBkb2xlbnRhIGVuIGxhIGNvbWlzc2nDsyAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJldGlxdWV0YSBkZSBmdXNpw7MgbWFsIGZvcm1hZGEgZW4gbGEgY29taXNzacOzICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisibGEgY29taXNzacOzIG9yaWdpbmFsICclcycgY29udMOpIGwnZXRpcXVldGEgZGUgZnVzacOzICclcycgcXVlIGVzIGRlc2NhcnRhOyAiCisidXNldSAtLWVkaXQgZW4gbGxvYyBkZSAtLWdyYWZ0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUuIgorbXNnc3RyICJsYSBjb21pc3Npw7Mgb3JpZ2luYWwgJyVzJyB0w6kgdW5hIGZpcm1hIGdwZy4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwMgorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICJsYSBmaXJtYSBzJ2VsaW1pbmFyw6AgZW4gbGEgY29taXNzacOzIGRlIHJlZW1wbGHDp2FtZW50ISIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGVzY3JpdXJlIGxhIGNvbWlzc2nDsyBkZSByZWVtcGxhw6dhbWVudCBwZXIgYTogJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMyCittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgImxsaXN0YSBsZXMgcmVmZXLDqG5jaWVzIHJlZW1wbGHDp2FkZXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzMworbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgInN1cHJpbWVpeCBsZXMgcmVmZXLDqG5jaWVzIHJlZW1wbGHDp2FkZXMiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNAorbXNnaWQgImVkaXQgZXhpc3Rpbmcgb2JqZWN0IgorbXNnc3RyICJlZGl0YSB1biBvYmplY3RlIGV4aXN0ZW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzUKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICJjYW52aWEgbGVzIG1hcmVzIGQndW5hIGNvbWlzc2nDsyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM2Cittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAicmVlbXBsYcOnYSBsYSByZWZlcsOobmNpYSBzaSBleGlzdGVpeCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM3Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICJubyBpbXByaW1laXhpcyBiZWxsYW1lbnQgZWxzIGNvbnRpbmd1dHMgcGVyIGEgLS1lZGl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzgKK21zZ2lkICJ1c2UgdGhpcyBmb3JtYXQiCittc2dzdHIgInVzYSBhcXVlc3QgZm9ybWF0IgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEyCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPGNhbcOtPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NTcKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAicmVnaXN0cmEgbGVzIHJlc29sdWNpb25zIG5ldGVzIGVuIGwnw61uZGV4IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjYKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbWlzc2nDsz5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjcKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSA8dHJlZS1pc2g+IFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gPGFyYnJlPiBbLS1dIDxjYW1pbnM+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjgKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs8YXJicmU+XSBbLS1dIFs8Y2FtaW5zPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgIm1peGVkIgorbXNnc3RyICJtaXh0IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJzb2Z0IgorbXNnc3RyICJzdWF1IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJoYXJkIgorbXNnc3RyICJkdXIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgIm1lcmdlIgorbXNnc3RyICJmdXNpw7MiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgImtlZXAiCittc2dzdHIgInJldGVuaW1lbnQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo3NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICJObyB0ZW5pdSB1biBIRUFEIHbDoGxpZC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo3NgorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iCittc2dzdHIgIlMnaGEgZmFsbGF0IGVuIHRyb2JhciBsJ2FyYnJlIGRlIEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIlMnaGEgZmFsbGF0IGVuIHRyb2JhciBsJ2FyYnJlIGRlICVzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCBhcmEgw6lzIGEgJXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiTm8gZXMgcG90IGZlciB1biByZXN0YWJsaW1lbnQgZGUgJXMgZW5taWcgZCd1bmEgZnVzacOzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3NgorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgImNhbGxhLCBub23DqXMgaW5mb3JtYSBkJ2Vycm9ycyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3OAorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICJyZXN0YWJsZWl4IEhFQUQgaSBsJ8OtbmRleCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3OQorbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAicmVzdGFibGVpeCBub23DqXMgSEVBRCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4MSBidWlsdGluL3Jlc2V0LmM6MjgzCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAicmVzdGFibGVpeCBIRUFELCBsJ8OtbmRleCBpIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4NQorbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAicmVzdGFibGVpeCBIRUFEIHBlcsOyIHJldMOpbiBlbHMgY2FudmlzIGxvY2FscyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4OAorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICJyZWdpc3RyYSBub23DqXMgZWwgZmV0IGRlIHF1ZSBlbHMgY2FtaW5zIGVsaW1pbmF0cyBzJ2FmZWdpcmFuIGRlc3Byw6lzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgIlMnaGEgZmFsbGF0IGVuIHJlc29sZHJlICclcycgY29tIGEgcmV2aXNpw7MgdsOgbGlkYS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIgorbXNnc3RyICJTJ2hhIGZhbGxhdCBlbiByZXNvbGRyZSAnJXMnIGNvbSBhIGFyYnJlIHbDoGxpZC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjIKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggw6lzIGluY29tcGF0aWJsZSBhbWIgLS17aGFyZCxtaXhlZCxzb2Z0fSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzMQorbXNnaWQgIi0tbWl4ZWQgd2l0aCBwYXRocyBpcyBkZXByZWNhdGVkOyB1c2UgJ2dpdCByZXNldCAtLSA8cGF0aHM+JyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tbWl4ZWQgYW1iIGNhbWlucyBlc3TDoCBkZXNhcHJvdmF0OyB1c2V1ICdnaXQgcmVzZXQgLS0gPGNhbWlucz4nIGVuIGxsb2MgIgorImQnYWl4w7IuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAiTm8gZXMgcG90IHJlc3RhYmxpciBkZSAlcyBhbWIgY2FtaW5zLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiZWwgcmVzdGFibGltZW50IGRlICVzIG5vIGVzIHBlcm1ldCBlbiB1biBkaXDDsnNpdCBudSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0NworbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICItTiBub23DqXMgZXMgcG90IHVzYXIgYW1iIC0tbWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjQKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiQ2FudmlzIG5vIGFsbGlzdGF0cyBkZXNwcsOpcyBkZSByZXN0YWJsaW1lbnQ6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHJlc3RhYmxpciBlbCBmaXR4ZXIgZCfDrW5kZXggYSBsYSByZXZpc2nDsyAnJXMnLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3NAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgZml0eGVyIGQnw61uZGV4IG5vdS4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzozNTQKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgImVsIHJldi1saXN0IG5vIHBlcm1ldCBtb3N0cmFyIG5vdGVzIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2MQorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3BjaW9ucz5dIC0tIFs8cGFyw6BtZXRyZXM+Li4uXSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzozNjYKK21zZ2lkICJrZWVwIHRoZSBgLS1gIHBhc3NlZCBhcyBhbiBhcmciCittc2dzdHIgInJldMOpbiBlbCBgLS1gIHBhc3NhdCBjb20gYSBwYXLDoG1ldHJlIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2OAorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiZGVpeGEgZCdhbmFsaXR6YXIgZGVzcHLDqXMgZGVsIHByaW1lciBwYXLDoG1ldHJlIG5vIGQnb3BjacOzIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM3MQorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgImVtZXQgZW4gZm9ybWEgbGxhcmdhIGVuZ2FueGFkYSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1MDIKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcGNpb25zPl0gLS0gWzxwYXLDoG1ldHJlcz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPHBhcsOgbWV0cmU+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3BjaW9ucz5dIFs8cGFyw6BtZXRyZT4uLi5dXG4iCisiXG4iCisiRXhlY3V0ZXUgXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBwZXIgbcOpcyBpbmZvcm1hY2nDsyBzb2JyZSBsJ8O6cyAiCisiaW5pY2lhbC4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjIKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbPG9wY2lvbnM+XSA8Y29taXNzacOzPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMworbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDxzdWJvcmRyZT4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjgKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzxvcGNpb25zPl0gPGNvbWlzc2nDsz4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjkKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPHN1Ym9yZHJlPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJXM6ICVzIG5vIGVzIHBvdCB1c2FyIGFtYiAlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MAorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImFjYWJhIGxhIHNlccO8w6huY2lhIGRlIHJldmVyc2nDsyBvIGVsIHJlY3VsbCBkZSBjaXJlcmVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjgxCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAicmVwcsOobiBsYSBzZXHDvMOobmNpYSBkZSByZXZlcnNpw7MgbyBlbCByZWN1bGwgZGUgY2lyZXJlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MgorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImNhbmNlbMK3bGEgbGEgc2Vxw7zDqG5jaWEgZGUgcmV2ZXJzacOzIG8gZWwgcmVjdWxsIGRlIGNpcmVyZXMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODMKK21zZ2lkICJkb24ndCBhdXRvbWF0aWNhbGx5IGNvbW1pdCIKK21zZ3N0ciAibm8gY29tZXRpcyBhdXRvbcOgdGljYW1lbnQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODQKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiZWRpdGEgZWwgbWlzc2F0Z2UgZGUgY29taXNzacOzIgorCisjOiBidWlsdGluL3JldmVydC5jOjg3Cittc2dpZCAicGFyZW50IG51bWJlciIKK21zZ3N0ciAibsO6bWVybyBkZSBtYXJlIgorCisjOiBidWlsdGluL3JldmVydC5jOjg5Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgImVzdHJhdMOoZ2lhIGRlIGZ1c2nDsyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MAorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAib3BjacOzIgorCisjOiBidWlsdGluL3JldmVydC5jOjkxCittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAib3BjacOzIGQnZXN0cmF0w6hnaWEgZGUgZnVzacOzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAibm9tIGRlIGxhIGNvbWlzc2nDsyBhIGFubmV4YXIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA2Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgInByZXNlcnZhIGxlcyBjb21pc3Npb25zIGluaWNpYWxtZW50IGJ1aWRlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgInBlcm1ldCBsZXMgY29taXNzaW9ucyBhbWIgbWlzc2F0Z2VzIGJ1aXRzIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICJyZXTDqW4gbGVzIGNvbWlzc2lvbnMgcmVkdW5kYW50cyBpIGJ1aWRlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJwcm9ncmFtIGVycm9yIgorbXNnc3RyICJlcnJvciBkZSBwcm9ncmFtYSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxOTcKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJsYSByZXZlcnNpw7MgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL3JldmVydC5jOjIxMgorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAiZWwgcmVjdWxsIGRlIGNpcmVyZXMgaGEgZmFsbGF0IgorCisjOiBidWlsdGluL3JtLmM6MTcKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPG9wY2lvbnM+XSBbLS1dIDxmaXR4ZXI+Li4uIgorCisjOiBidWlsdGluL3JtLmM6NjUKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgKG9yIG9uZSBvZiBpdHMgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisidXNlcyBhIC5naXQgZGlyZWN0b3J5OiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgc3VibW9kdWxlcyAob3Igb25lIG9mIHRoZWlyIG5lc3RlZCBzdWJtb2R1bGVzKVxuIgorInVzZSBhIC5naXQgZGlyZWN0b3J5OiIKK21zZ3N0clswXSAiIgorImVsIHN1Ym3DsmR1bCBzZWfDvGVudCAobyB1biBkZWxzIHNldXMgc3VibcOyZHVscyBuaWF0cylcbiIKKyJ1c2EgdW4gZGlyZWN0b3JpIC5naXQ6IgorbXNnc3RyWzFdICIiCisiZWxzIHN1Ym3DsmR1bHMgc2Vnw7xlbnRzIChvIHVuIGRlbHMgc2V1cyBzdWJtw7JkdWxzIG5pYXRzKVxuIgorInVzYSB1biBkaXJlY3RvcmkgLmdpdDoiCisKKyM6IGJ1aWx0aW4vcm0uYzo3MQorbXNnaWQgIiIKKyJcbiIKKyIodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyJcbiIKKyIodXNldSAncm0gLXJmJyBzaSByZWFsbWVudCB2b2xldSBlbGltaW5hci1sbywgaW5jbG9lbnQgdG90YSBsYSBzZXZhIGhpc3TDsnJpYSkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzAKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorImVsIGZpdHhlciBzZWfDvGVudCB0w6kgY29udGluZ3V0IGFsbGlzdGF0IGRpZmVyZW50IGQnYW1iZMOzcyBlbFxuIgorImZpdHhlciBpIGVsIEhFQUQ6IgorbXNnc3RyWzFdICIiCisiZWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHRlbmVuIGNvbnRpbmd1dCBhbGxpc3RhdCBkaWZlcmVudCBkJ2FtYmTDs3NcbiIKKyJlbCBmaXR4ZXIgaSBlbCBIRUFEOiIKKworIzogYnVpbHRpbi9ybS5jOjIzNQorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKHVzZXUgLWYgcGVyIGEgZm9yw6dhciBsJ2VsaW1pbmFjacOzKSIKKworIzogYnVpbHRpbi9ybS5jOjIzOQorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gImVsIGZpdHhlciBzZWfDvGVudCB0w6kgY2FudmlzIGFsbGlzdGF0cyBlbiBsJ8OtbmRleDoiCittc2dzdHJbMV0gImVscyBmaXR4ZXJzIHNlZ8O8ZW50cyB0ZW5lbiBjYW52aXMgYWxsaXN0YXRzIGVuIGwnw61uZGV4OiIKKworIzogYnVpbHRpbi9ybS5jOjI0MyBidWlsdGluL3JtLmM6MjU0Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIodXNldSAtLWNhY2hlZCBwZXIgYSByZXRlbmlyIGVsIGZpdHhlciwgbyAtZiBwZXIgYSBmb3LDp2FyIGwnZWxpbWluYWNpw7MpIgorCisjOiBidWlsdGluL3JtLmM6MjUxCittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICJlbCBmaXR4ZXIgc2Vnw7xlbnQgdMOpIG1vZGlmaWNhY2lvbnMgbG9jYWxzOiIKK21zZ3N0clsxXSAiZWxzIGZpdHhlcnMgc2Vnw7xlbnRzIHRlbmVuIG1vZGlmaWNhY2lvbnMgbG9jYWxzOiIKKworIzogYnVpbHRpbi9ybS5jOjI2OQorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgIm5vIGxsaXN0aXMgZWxzIGZpdHhlcnMgZWxpbWluYXRzIgorCisjOiBidWlsdGluL3JtLmM6MjcwCittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIm5vbcOpcyBlbGltaW5hIGRlIGwnw61uZGV4IgorCisjOiBidWlsdGluL3JtLmM6MjcxCittc2dpZCAib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siCittc2dzdHIgInBhc3NhIHBlciBhbHQgbGEgY29tcHJvdmFjacOzIGQnYWN0dWFsaXRhdCIKKworIzogYnVpbHRpbi9ybS5jOjI3MgorbXNnaWQgImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIgorbXNnc3RyICJwZXJtZXQgbCdlbGltaW5hY2nDsyByZWN1cnNpdmEiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzQKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAic3VydCBhbWIgZXN0YXQgemVybyBlbmNhcmEgcXVlIHJlcyBoYWdpIGNvaW5jaWRpdCIKKworIzogYnVpbHRpbi9ybS5jOjMxNworbXNnaWQgIlBsZWFzZSwgc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorIlNpIHVzIHBsYXUsIGFsbGlzdGV1IGVscyB2b3N0cmVzIGNhbnZpcyBhIC5naXRtb2R1bGVzIG8gZW1tYWdhdHplbWV1LWxvcyBwZXIgIgorImEgcHJvY2VkaXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAibm8gZWxpbWluYW50ICclcycgcmVjdXJzaXZhbWVudCBzZW5zZSAtciIKKworIzogYnVpbHRpbi9ybS5jOjM3NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybTogbm8gcydoYSBwb2d1dCBlbGltaW5hciAlcyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxOAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtIgorInBhY2s9PHBhcXVldC1kZWwtZ2l0LXJlY2VpdmU+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdICIKKyJbPG3DoHF1aW5hPjpdPGRpcmVjdG9yaT4gWzxyZWZlcsOobmNpYT4uLi5dXG4iCisiICAtLWFsbCBpIGVzcGVjaWZpY2FjacOzIDxyZWZlcsOobmNpYT4gZXhwbMOtY2l0YSBzw7NuIG11dHVhbG1lbnQgZXhjbHVzaXVzLiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjAKK21zZ2lkICJyZW1vdGUgbmFtZSIKK21zZ3N0ciAibm9tIGRlbCByZW1vdCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzEKK21zZ2lkICJ1c2Ugc3RhdGVsZXNzIFJQQyBwcm90b2NvbCIKK21zZ3N0ciAidXNhIGVsIHByb3RvY29sIFJQQyBzZW5zZSBlc3RhdCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGxlZ2VpeCBsZXMgcmVmZXLDqG5jaWVzIGRlcyBkJ3N0ZGluIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgImltcHJpbWVpeCBsJ2VzdGF0IGRlcyBkZWwgYWp1ZGFudCByZW1vdCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjEzCittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgImdpdCBzaG9ydGxvZyBbPG9wY2lvbnM+XSBbPHJhbmctZGUtcmV2aXNpb25zPl0gW1stLV0gWzxjYW3DrT4uLi5dXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGF1dGhvcjogJXMiCittc2dzdHIgIk1hbmNhIGwnYXV0b3I6ICVzIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjMwCittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICJvcmRlbmEgbGEgc29ydGlkYSBzZWdvbnMgZWwgbm9tYnJlIGRlIGNvbWlzc2lvbnMgcGVyIGF1dG9yIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjMyCittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgIiIKKyJPbWV0IGxlcyBkZXNjcmlwY2lvbnMgZGUgY29taXNzacOzLCBub23DqXMgcHJvdmVlaXggZWwgcmVjb21wdGUgZGUgY29taXNzaW9ucyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzNAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIk1vc3RyYSBsJ2FkcmXDp2EgZGUgY29ycmV1IGVsZWN0csOybmljIGRlIGNhZGEgYXV0b3IiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzUKK21zZ2lkICJ3WyxpMVssaTJdXSIKK21zZ3N0ciAid1ssaTFbLGkyXV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzYKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIkFqdXN0YSBsZXMgbMOtbmllcyBkZSBsYSBzb3J0aWRhIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6OQorbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHQgICAgICAgWy0tY3VycmVudF0gWy0tY29sb3JbPTxxdWFuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdCAgICAgICBbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdCAgICAgICBbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2aXNpw7M+IHwgPGdsb2I+KS4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMworbXNnaWQgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZmVyw6huY2lhPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTkKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIm1vc3RyYSBsZXMgYnJhbnF1ZXMgYW1iIHNlZ3VpbWVudCByZW1vdCBpIGxlcyBsb2NhbHMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjEKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAibW9zdHJhIGxlcyBicmFucXVlcyBhbWIgc2VndWltZW50IHJlbW90IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYzCittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiY29sb3JhICcqISstJyBjb3JyZXNwb25lbnQgYSBsYSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjUKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAibW9zdHJhIDxuPiBjb21pc3Npb25zIGRlc3Byw6lzIGRlIGwnYXZhbnRwYXNzYXQgY29tw7oiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjcKK21zZ2lkICJzeW5vbnltIHRvIG1vcmU9LTEiCittc2dzdHIgInNpbsOybmltIGRlIG1vcmU9LTEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAib21ldCBsJ2Fub21lbmFtZW50IGRlIGNhZGVuZXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzAKK21zZ2lkICJpbmNsdWRlIHRoZSBjdXJyZW50IGJyYW5jaCIKK21zZ3N0ciAiaW5jbG91IGxhIGJyYW5jYSBhY3R1YWwiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzIKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgImFub21lbmEgbGVzIGNvbWlzc2lvbnMgYW1iIGVscyBzZXVzIG5vbXMgZCdvYmplY3RlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc0Cittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAibW9zdHJhIGxlcyBiYXNlcyBkZSBmdXNpw7MgcG9zc2libGVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc2Cittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAibW9zdHJhIGxlcyByZWZlcsOobmNpZXMgaW5hYmFzdGFibGVzIGRlIHF1YWxzZXZ1bGxhIGFsdHJhIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc4Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICJtb3N0cmEgbGVzIGNvbWlzc2lvbnMgZW4gb3JkcmUgdG9wb2zDsmdpYyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4MQorbXNnaWQgInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIGxlcyBjb21pc3Npb25zIHF1ZSBubyBzaWd1aW4gZW4gbGEgcHJpbWVyYSBicmFuY2EiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODMKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgIm1vc3RyYSBsZXMgZnVzaW9ucyBhYmFzdGFibGVzIGRlIG5vbcOpcyB1bmEgcHVudGEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODUKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgIm9yZGVuYSB0b3BvbMOyZ2ljYW1lbnQsIG1hbnRlbmludCBsJ29yZHJlIGRlIGRhdGVzIG9uIHNpZ3VpIHBvc3NpYmxlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njg4Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICI8bj5bLDxiYXNlPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODkKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAibW9zdHJhIGxlcyA8bj4gZW50cmFkZXMgbcOpcyByZWNlbnRzIGNvbWVuw6dhbnQgYSBsYSBiYXNlIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTAKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXRyw7M+Li4uXSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjExCittc2dpZCAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSA8IDxyZWYtbGlzdD4iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXRyw7M+XSA8IDxsbGlzdGEtZGUtcmVmZXLDqG5jaWVzPiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MAorbXNnaWQgIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiCittc2dzdHIgIm1vc3RyYSBub23DqXMgbGVzIGV0aXF1ZXRlcyAoZXMgcG90IGNvbWJpbmFyIGFtYiBoZWFkcykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICJtb3N0cmEgbm9tw6lzIGVscyBjYXBzIChlcyBwb3QgY29tYmluYXIgYW1iIHRhZ3MpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcyCittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAiIgorImNvbXByb3ZhY2nDsyBkZSByZWZlcsOobmNpYSBtw6lzIGVzdHJpY3RhLCByZXF1ZXJlaXggZWwgY2Ftw60gZGUgcmVmZXLDqG5jaWEgIgorImV4YWN0ZSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NSBidWlsdGluL3Nob3ctcmVmLmM6MTc3Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICJtb3N0cmEgbGEgcmVmZXLDqG5jaWEgSEVBRCwgZW5jYXJhIHF1ZSBlcyBmaWx0csOpcyIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICJkZXJlZmVyZW5jaWEgbGVzIGV0aXF1ZXRlcyBhIElEcyBkJ29iamVjdGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODEKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgIm1vc3RyYSBlbCBoYXNoIFNIQTEgdXNhbnQgbm9tw6lzIDxuPiB4aWZyZXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODUKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAibm8gaW1wcmltZWl4aXMgZWxzIHJlc3VsdGF0cyBhIHN0ZG91dCAow7p0aWwgYW1iIC0tdmVyaWZ5KSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4NworbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIm1vc3RyYSBsZXMgcmVmZXLDqG5jaWVzIGQnc3RkaW4gcXVlIG5vIHNpZ3VpbiBlbiBlbCBkaXDDsnNpdCBsb2NhbCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo3Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wdGlvbnM+XSA8bmFtZT4gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiBbPG9wY2lvbnM+XSA8bm9tPiBbPHJlZmVyw6huY2lhPl0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bm9tPiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIm9tZXQgZWwgbWlzc2F0Z2UgZCdlcnJvciBkZSByZWZlcsOobmNpZXMgbm8gc2ltYsOybGlxdWVzIChzZXBhcmFkZXMpIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAic3VwcmltZWl4IGxhIHJlZmVyw6huY2lhIHNpbWLDsmxpY2EiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgImVzY3Vyw6dhIGxhIHNvcnRpZGEgZGUgcmVmZXLDqG5jaWVzIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MgorbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAicmHDsyIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjIKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAicmHDsyBkZSBsJ2FjdHVhbGl0emFjacOzIgorCisjOiBidWlsdGluL3RhZy5jOjIyCittc2dpZCAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dIDx0YWduYW1lPiAiCisiWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGlkLWRlLWNsYXU+XSBbLWZdIFstbSA8bWlzc2F0Z2U+IHwgLUYgPGZpdHhlcj5dIDxub20tIgorImQnZXRpcXVldGE+IFs8Y2FwPl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCA8bm9tLWQnZXRpcXVldGE+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjI0Cittc2dpZCAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLXBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0WzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIC1sIFstbls8bm9tYnJlPl1dIFstLWNvbnRhaW5zIDxjb21pc3Npw7M+XVxuIgorIlx0XHRbLS1wb2ludHMtYXQgPG9iamVjdGU+XSBbPHBhdHLDsz4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjI2Cittc2dpZCAiZ2l0IHRhZyAtdiA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgPG5vbS1kJ2V0aXF1ZXRhPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IGF0ICclcyciCittc2dzdHIgIm9iamVjdGUgbWFsIGZvcm1hdCBhICclcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorbXNnc3RyICJub20gZCdldGlxdWV0YSBtYXNzYSBsbGFyZzogJS4qcy4uLiIKKworIzogYnVpbHRpbi90YWcuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiZXRpcXVldGEgJyVzJyBubyB0cm9iYWRhLiIKKworIzogYnVpbHRpbi90YWcuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJMJ2V0aXF1ZXRhICclcycgcydoYSBzdXByaW1pdCAoZXJhICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdmVyaWZ5IHRoZSB0YWcgJyVzJyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCB2ZXJpZmljYXIgbCdldGlxdWV0YSAnJXMnIgorCisjOiBidWlsdGluL3RhZy5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFc2NyaXZpdSBlbCBtaXNzYXRnZSBkZSBsJ2V0aXF1ZXRhOlxuIgorIiAgJXNcbiIKKyJMZXMgbMOtbmllcyBxdWUgY29tZW5jaW4gYW1iICclYycgcydpZ25vcmFyYW4uXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFc2NyaXZpdSBlbCBtaXNzYXRnZSBkZSBsJ2V0aXF1ZXRhOlxuIgorIiAgJXNcbiIKKyJMZXMgbMOtbmllcyBxdWUgY29tZW5jaW4gYW1iICclYycgZXMgcmV0aW5kcmFuOyBwb2RldSBlbGltaW5hci1sZXMgcGVyIHbDs3MgIgorIm1hdGVpeCBzaSB2b2xldS5cbiIKKworIzogYnVpbHRpbi90YWcuYzozNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgc29ydCBzcGVjaWZpY2F0aW9uICclcyciCittc2dzdHIgImVzcGVjaWZpY2FjacOzIGQnb3JkZW5hY2nDsyAnJXMnIG5vIGFkbWVzYSIKKworIzogYnVpbHRpbi90YWcuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgc29ydCBzcGVjaWZpY2F0aW9uICclcycgaW4gdmFyaWFibGUgJyVzJyIKK21zZ3N0ciAiZXNwZWNpZmljYWNpw7MgZCdvcmRlbmFjacOzICclcycgbm8gYWRtZXNhIGVuIGxhIHZhcmlhYmxlICclcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAibm8gcydoYSBwb2d1dCBmaXJtYXIgbCdldGlxdWV0YSIKKworIzogYnVpbHRpbi90YWcuYzo0MzAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgZXNjcml1cmUgZWwgZml0eGVyIGQnZXRpcXVldGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDU1Cittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAidGlwdXMgZCdvYmplY3RlIGRvbGVudC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDY4Cittc2dpZCAidGFnIGhlYWRlciB0b28gYmlnLiIKK21zZ3N0ciAiY2Fww6dhbGVyYSBkJ2V0aXF1ZXRhIG1hc3NhIGdyYW4uIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAiY2FwIG1pc3NhdGdlIGQnZXRpcXVldGE/IgorCisjOiBidWlsdGluL3RhZy5jOjUxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICJTJ2hhIGRlaXhhdCBlbCBtaXNzYXRnZSBkZSBsJ2V0aXF1ZXRhIGVuICVzXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTU5Cittc2dpZCAic3dpdGNoICdwb2ludHMtYXQnIHJlcXVpcmVzIGFuIG9iamVjdCIKK21zZ3N0ciAibCdvcGNpw7MgJ3BvaW50cy1hdCcgcmVxdWVyZWl4IHVuIG9iamVjdGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJub20gZCdvYmplY3RlIG1hbCBmb3JtYXQgJyVzJyIKKworIzogYnVpbHRpbi90YWcuYzo1OTAKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAibGxpc3RhIGVscyBub21zIGQnZXRpcXVldGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTkyCittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgImltcHJpbWVpeCA8bj4gbMOtbmllcyBkZSBjYWRhIG1pc3NhdGdlIGQnZXRpcXVldGEiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTk0Cittc2dpZCAiZGVsZXRlIHRhZ3MiCittc2dzdHIgInN1cHJpbWVpeCBsZXMgZXRpcXVldGVzIgorCisjOiBidWlsdGluL3RhZy5jOjU5NQorbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICJ2ZXJpZmljYSBsZXMgZXRpcXVldGVzIgorCisjOiBidWlsdGluL3RhZy5jOjU5NworbXNnaWQgIlRhZyBjcmVhdGlvbiBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGRlIGNyZWFjacOzIGQnZXRpcXVldGVzIgorCisjOiBidWlsdGluL3RhZy5jOjU5OQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAiZXRpcXVldGEgYW5vdGFkYSwgbmVjZXNzaXRhIHVuIG1pc3NhdGdlIgorCisjOiBidWlsdGluL3RhZy5jOjYwMQorbXNnaWQgInRhZyBtZXNzYWdlIgorbXNnc3RyICJtaXNzYXRnZSBkJ2V0aXF1ZXRhIgorCisjOiBidWlsdGluL3RhZy5jOjYwMworbXNnaWQgImFubm90YXRlZCBhbmQgR1BHLXNpZ25lZCB0YWciCittc2dzdHIgImV0aXF1ZXRhIGFub3RhZGEgaSBmaXJtYWRhIHBlciBHUEciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjA3Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAidXNhIHVuYSBhbHRyYSBjbGF1IHBlciBhIGZpcm1hciBsJ2V0aXF1ZXRhIgorCisjOiBidWlsdGluL3RhZy5jOjYwOAorbXNnaWQgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiCittc2dzdHIgInJlZW1wbGHDp2EgbCdldGlxdWV0YSBzaSBleGlzdGVpeCIKKworIzogYnVpbHRpbi90YWcuYzo2MDkgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICJjcmVhIHVuIHJlZ2lzdHJlIGRlIHJlZmVyw6huY2llcyIKKworIzogYnVpbHRpbi90YWcuYzo2MTEKK21zZ2lkICJUYWcgbGlzdGluZyBvcHRpb25zIgorbXNnc3RyICJPcGNpb25zIGRlIGxsaXN0YXQgZCdldGlxdWV0ZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjEyCittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICJtb3N0cmEgbGEgbGxpc3RhIGQnZXRpcXVldGVzIGVuIGNvbHVtbmVzIgorCisjOiBidWlsdGluL3RhZy5jOjYxNAorbXNnaWQgInNvcnQgdGFncyIKK21zZ3N0ciAib3JkZW5hIGxlcyBldGlxdWV0ZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjE5IGJ1aWx0aW4vdGFnLmM6NjI1Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBldGlxdWV0ZXMgcXVlIGNvbnRpbmd1aW4gbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL3RhZy5jOjYzMQorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJpbXByaW1laXggbm9tw6lzIGxlcyBldGlxdWV0ZXMgZGUgbCdvYmplY3RlIgorCisjOiBidWlsdGluL3RhZy5jOjY1NworbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiBpIC1uIHPDs24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi90YWcuYzo2NjkKK21zZ2lkICItLXNvcnQgYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tc29ydCBpIC1uIHPDs24gaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi90YWcuYzo2NzYKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJlcyBwZXJtZXQgbCdvcGNpw7MgLW4gbm9tw6lzIGFtYiAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Njc4Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJlcyBwZXJtZXQgbCdvcGNpw7MgLS1jb250YWlucyBub23DqXMgYW1iIC1sLiIKKworIzogYnVpbHRpbi90YWcuYzo2ODAKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJlcyBwZXJtZXQgLS1wb2ludHMtYXQgb3B0aW9uIG5vbcOpcyBhbWIgLWwuIgorCisjOiBidWlsdGluL3RhZy5jOjY4OAorbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAibm9tw6lzIGVzIHBlcm1ldCB1bmEgb3BjacOzIC1GIG8gLW0uIgorCisjOiBidWlsdGluL3RhZy5jOjcwOAorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAibWFzc2EgcGFyw6BtZXRyZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICInJXMnIG5vIMOpcyB1biBub20gZCdldGlxdWV0YSB2w6BsaWQuIgorCisjOiBidWlsdGluL3RhZy5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAibCdldGlxdWV0YSAnJXMnIGphIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL3RhZy5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIkV0aXF1ZXRhICclcycgYWN0dWFsaXR6YWRhIChlcmEgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo0OTAKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiRGVzZW1wYXF1ZXRhbnQgb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIGNyZWFyIGVsIGRpcmVjdG9yaSAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAicydoYSBmYWxsYXQgZW4gZmVyIHN0YXQgYSAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIGNyZWFyIGVsIGZpdHhlciAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGZpbGUgJXMiCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIHN1cHJpbWlyIGVsIGZpdHhlciAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDEgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIHN1cHJpbWlyIGVsIGRpcmVjdG9yaSAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGVzdGluZyAiCittc2dzdHIgIlByb3ZhbnQgIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEzNgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICIiCisibGEgaW5mb3JtYWNpw7MgZCdzdGF0IGRlIGRpcmVjdG9yaSBubyBjYW52aWEgZGVzcHLDqXMgZCdhZmVnaXIgdW4gZml0eGVyIG5vdSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDkKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisibGEgaW5mb3JtYWNpw7MgZCdzdGF0IGRlIGRpcmVjdG9yaSBubyBjYW52aWEgZGVzcHLDqXMgZCdhZmVnaXIgdW4gZGlyZWN0b3JpIG5vdSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisibGEgaW5mb3JtYWNpw7MgZCdzdGF0IGRlIGRpcmVjdG9yaSBjYW52aWEgZGVzcHLDqXMgZCdhY3R1YWxpdHphciB1biBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTczCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImxhIGluZm9ybWFjacOzIGQnc3RhdCBkZSBkaXJlY3RvcmkgY2FudmlhIGRlc3Byw6lzIGQnYWZlZ2lyIHVuIGZpdHhlciBkaW5zICIKKyJkJ3VuIHN1YmRpcmVjdG9yaSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxODQKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgIiIKKyJsYSBpbmZvcm1hY2nDsyBkJ3N0YXQgZGUgZGlyZWN0b3JpIG5vIGNhbnZpYSBkZXNwcsOpcyBkZSBzdXByaW1pciB1biBmaXR4ZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTk3Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJsYSBpbmZvcm1hY2nDsyBkJ3N0YXQgZGUgZGlyZWN0b3JpIG5vIGNhbnZpYSBkZXNwcsOpcyBkZSBzdXByaW1pciB1biBkaXJlY3RvcmkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjA0Cittc2dpZCAiIE9LIgorbXNnc3RyICIgRCdhY29yZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1NjQKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggWzxvcGNpb25zPl0gWy0tXSBbPGZpdHhlcj4uLi5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkxOAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiIgorImNvbnRpbnVhIGwnYWN0dWFsaXR6YWNpw7MgZW5jYXJhIHF1ZSBsJ8OtbmRleCBuZWNlc3NpdGkgdW5hIGFjdHVhbGl0emFjacOzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyMQorbXNnaWQgInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIgorbXNnc3RyICJhY3R1YWxpdHphOiBpZ25vcmEgZWxzIHN1Ym3DsmR1bHMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI0Cittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgIm5vIGlnbm9yaXMgZWxzIGZpdHhlcnMgbm91cyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MjYKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAiZGVpeGEgcXVlIGVscyBmaXR4ZXJzIHJlZW1wbGFjaW4gZWxzIGRpcmVjdG9yaXMgaSB2aWNldmVyc2EiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI4Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAidGluZ3VlcyBlbiBjb21wdGUgZWxzIGZpdHhlcnMgYWJzZW50cyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTMwCittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgImFjdHVhbGl0emEgZW5jYXJhIHF1ZSBsJ8OtbmRleCBjb250aW5ndWkgZW50cmFkZXMgbm8gZnVzaW9uYWRlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzMKK21zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dzdHIgImFjdHVhbGl0emEgbGEgaW5mb3JtYWNpw7MgZCdlc3RhZMOtc3RpcXVlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzcKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgImNvbSAtLXJlZnJlc2gsIHBlcsOyIGlnbm9yYSBsJ2FqdXN0IGFzc3VtZS11bmNoYW5nZWQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQxCittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiPG1vZGU+LDxvYmplY3RlPiw8Y2Ftw60+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0MgorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiYWZlZ2VpeCBsJ2VudHJhZGEgZXNwZWNpZmljYWRhIGEgbCfDrW5kZXgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQ2Cittc2dpZCAiKCsvLSl4IgorbXNnc3RyICIoKy8tKXgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQ3Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgInBhc3NhIHBlciBhbHQgZWwgYml0IGV4ZWN1dGFibGUgZGVscyBmaXR4ZXJzIGxsaXN0YXRzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1MQorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAibWFyY2EgZWxzIGZpdHhlcnMgY29tIGEgXCJubyBjYW52aWFudFwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1NAorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAibmV0ZWphIGVsIGJpdCBhc3N1bWVkLXVuY2hhbmdlZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NTcKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIgorbXNnc3RyICJtYXJjYSBlbHMgZml0eGVycyBjb20gYSBcIm5vbcOpcyDDrW5kZXhcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjAKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAibmV0ZWphIGVsIGJpdCBza2lwLXdvcmt0cmVlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2MworbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisibm9tw6lzIGFmZWdlaXggYSBsJ8OtbmRleDsgbm8gYWZlZ2VpeGlzIGVsIGNvbnRpbmd1dCBhIGxhIGJhc2UgZGUgZGFkZXMgIgorImQnb2JqZWN0ZXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY1Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAiIgorImVsaW1pbmEgZWxzIGNhbWlucyBhbm9tZW5hdHMgZW5jYXJhIHF1ZSBlc3RpZ3VpbiBwcmVzZW50cyBlbiBsJ2FyYnJlIGRlICIKKyJ0cmViYWxsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2NworbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAiYW1iIC0tc3RkaW46IGxlcyBsw61uaWVzIGQnZW50cmFkYSBhY2FiZW4gYW1iIG9jdGV0cyBudWxzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2OQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImxsZWdlaXggbGEgbGxpc3RhIGRlIGNhbWlucyBhIGFjdHVhbGl0emFyIGRlcyBkZSBsJ2VudHJhZGEgZXN0w6BuZGFyZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzMKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiYWZlZ2VpeCBsZXMgZW50cmFkZXMgZGUgbCdlbnRyYWRhIGVzdMOgbmRhcmQgYSBsJ8OtbmRleCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzcKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgInJlZW1wbGVuYSBsZXMgZXRhcGVzICMyIGkgIzMgcGVyIGFscyBjYW1pbnMgbGxpc3RhdHMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgxCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgIm5vbcOpcyBhY3R1YWxpdHphIGxlcyBlbnRyYWRlcyBxdWUgZGlmZXJlaXhpbiBkZSBIRUFEIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NQorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImlnbm9yYSBlbHMgZml0eGVycyBhYnNlbnRzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODgKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImluZm9ybWEgZGUgbGVzIGFjY2lvbnMgZW4gbGEgc29ydGlkYSBlc3TDoG5kYXJkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5MAorbXNnaWQgIihmb3IgcG9yY2VsYWlucykgZm9yZ2V0IHNhdmVkIHVucmVzb2x2ZWQgY29uZmxpY3RzIgorbXNnc3RyICIocGVyIGEgcG9yY2VsbGFuZXMpIG9ibGlkYSd0IGRlbHMgY29uZmxpY3RlcyBubyByZXNvbHRzIG5pIGRlc2F0cyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTQKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiZXNjcml1IGwnw61uZGV4IGVuIGFxdWVzdCBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk2Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgImhhYmlsaXRhIG8gaW5oYWJpbGl0YSBsJ8OtbmRleCBkaXZpZGl0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiaGFiaWxpdGEvaW5oYWJpbGl0YSBsYSBtZW3DsnJpYSBjYXUgbm8gc2VndWlkYSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAwCittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgImhhYmlsaXRhIGxhIG1lbcOycmlhIGNhdSBubyBzZWd1aWRhIHNlbnNlIHByb3ZhciBlbCBzaXN0ZW1hIGRlIGZpdHhlcnMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjkKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8b3BjaW9ucz5dIC1kIDxub20tZGUtcmVmZXLDqG5jaWE+IFs8dmFsb3ItYW50aWM+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICIiCisiZ2l0IHVwZGF0ZS1yZWYgWzxvcGNpb25zPl0gICAgPG5vbS1kZS1yZWZlcsOobmNpYT4gPHZhbG9yLW5vdT4gWzx2YWxvci1hbnRpYz5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMQorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxvcGNpb25zPl0gLS1zdGRpbiBbLXpdIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjMKK21zZ2lkICJkZWxldGUgdGhlIHJlZmVyZW5jZSIKK21zZ3N0ciAic3VwcmltZWl4IGxhIHJlZmVyw6huY2lhIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjUKK21zZ2lkICJ1cGRhdGUgPHJlZm5hbWU+IG5vdCB0aGUgb25lIGl0IHBvaW50cyB0byIKK21zZ3N0ciAiYWN0dWFsaXR6YSA8bm9tIGRlIHJlZmVyw6huY2lhPiwgbm8gbGEgcXVlIGFzc2VueWFsaSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY2Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAic3RkaW4gdMOpIHBhcsOgbWV0cmVzIGFjYWJhdHMgYW1iIE5VTCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgImxsZWdlaXggbGVzIGFjdHVhbGl0emFjaW9ucyBkZXMgZCdzdGRpbiIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo2Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE0Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAiYWN0dWFsaXR6YSBlbHMgZml0eGVycyBkJ2luZm9ybWFjacOzIGRlcyBkZSB6ZXJvIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxNworbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbWlzc2nDsz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjcyCittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICJpbXByaW1laXggZWxzIGNvbnRpbmd1dHMgZGUgbGEgY29taXNzacOzIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo3MyBidWlsdGluL3ZlcmlmeS10YWcuYzo4NAorbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiaW1wcmltZWl4IGxhIHNvcnRpZGEgY3J1YSBkZSBsJ2VzdGF0IGdwZyIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU0Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYXF1ZXQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjQKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICJkZXRhbGxhdCIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY2Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgIm1vc3RyYSBub23DqXMgZXN0YWTDrXN0aXF1ZXMiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjE3Cittc2dpZCAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSA8dGFnPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS10YWcgWy12IHwgLS12ZXJib3NlXSA8ZXRpcXVldGE+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzo4MworbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAiaW1wcmltZWl4IGVscyBjb250aW5ndXRzIGRlIGwnZXRpcXVldGEiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IDxicmFuY2g+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFs8b3BjaW9ucz5dIDxjYW3DrT4gPGJyYW5jYT4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNAorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3BjaW9ucz5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIkVsaW1pbmFjacOzIGRlIHdvcmt0cmVlcy8lczogbm8gw6lzIHVuIGRpcmVjdG9yaSB2w6BsaWQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJFbGltaW5hY2nDsyBkZSB3b3JrdHJlZXMvJXM6IGVsIGZpdHhlciBnaXRkaXIgbm8gZXhpc3RlaXgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiCittc2dzdHIgIkVsaW1pbmFjacOzIGRlIHdvcmt0cmVlcy8lczogbm8gcydoYSBwb2d1dCBsbGVnaXIgZWwgZml0eGVyIGdpdGRpciAoJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICJFbGltaW5hY2nDsyBkZSB3b3JrdHJlZXMvJXM6IGZpdHhlciBnaXRkaXIgbm8gdsOgbGlkIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICIiCisiRWxpbWluYWNpw7MgZGUgd29ya3RyZWVzLyVzOiBlbCBmaXR4ZXIgZ2l0ZGlyIGVzIHJlZmVyZWl4IGEgdW5hIHViaWNhY2nDsyBubyAiCisiZXhpc3RlbnQiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZTogJXMiCittc2dzdHIgInMnaGEgZmFsbGF0IGVuIGVsaW1pbmFyOiAlcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE5OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICInJXMnIGphIGV4aXN0ZWl4IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IG9mICclcyciCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgY3JlYXIgZGlyZWN0b3JpIGRlICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nICVzIChpZGVudGlmaWVyICVzKSIKK21zZ3N0ciAiUHJlcGFyYW50ICVzIChpZGVudGlmaWNhZG9yICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMxNgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAiYWdhZmEgPGJyYW5jYT4gZW5jYXJhIHF1ZSBzaWd1aSBhZ2FmYWRhIGVuIGFsdHJlIGFyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMTgKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICJjcmVhIHVuYSBicmFuY2Egbm92YSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyMAorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAiY3JlYSBvIHJlc3RhYmxlaXggdW5hIGJyYW5jYSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyMQorbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAic2VwYXJhIGVsIEhFQUQgYSBsYSBjb21pc3Npw7MgYW5vbWVuYWRhIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzI4Cittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CIGkgLS1kZXRhY2ggc8OzbiBtdXR1YWxtZW50IGV4Y2x1c2l1cyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTMKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICI8cHJlZml4Pi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI3Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICJlc2NyaXUgbCdvYmplY3RlIGQnYXJicmUgcGVyIGEgdW4gc3ViZGlyZWN0b3JpIDxwcmVmaXg+IgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMAorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgIm5vbcOpcyDDunRpbCBwZXIgYSBsYSBkZXB1cmFjacOzIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyNTUKK21zZ2lkICJwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gc3RkZXJyIgorbXNnc3RyICJpbXByaW1laXggZWxzIG1pc3NhdGdlcyBkZSBkZXB1cmFjacOzIGEgc3RkZXJyIgorCisjOiBnaXQuYzoxNAorbXNnaWQgIiIKKyInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisiY29uY2VwdCBndWlkZXMuIFNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBvciAnZ2l0IGhlbHAgPGNvbmNlcHQ+J1xuIgorInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuIgorbXNnc3RyICIiCisiJ2dpdCBoZWxwIC1hJyBpICdnaXQgaGVscCAtZycgbGxpc3RlbiBzdWJvcmRyZXMgZGlzcG9uaWJsZXMgaVxuIgorImFsZ3VuZXMgZ3VpZXMgZGUgY29uY2VwdGUuIFZlZ2V1ICdnaXQgaGVscCA8b3JkcmU+JyBvXG4iCisiJ2dpdCBoZWxwIDxjb25jZXB0ZT4nIHBlciBhIGxsZWdpciBzb2JyZSB1bmEgc3Vib3JkcmUgbyBjb25jZXB0ZVxuIgorImVzcGVjw61maWMuIgorCisjOiBjb21tb24tY21kcy5oOjkKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAiY29tZW7Dp2FyIHVuYSDDoHJlYSBkZSB0cmViYWxsICh2ZWdldSB0YW1iw6k6IGdpdCBoZWxwIHR1dG9yaWFsKSIKKworIzogY29tbW9uLWNtZHMuaDoxMAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICJ0cmViYWxsYXIgZW4gZWwgY2FudmkgYWN0dWFsICh2ZWdldSB0YW1iw6k6IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKKworIzogY29tbW9uLWNtZHMuaDoxMQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAiZXhhbWluYXIgbGEgaGlzdMOycmlhIGkgbCdlc3RhdCAodmVnZXUgdGFtYsOpOiBnaXQgaGVscCByZXZpc2lvbnMpIgorCisjOiBjb21tb24tY21kcy5oOjEyCittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAiZmVyIGNyw6lpeGVyLCBtYXJjYXIgaSBhanVzdGFyIGxhIHZvc3RyYSBoaXN0w7JyaWEgY29tdW5hIgorCisjOiBjb21tb24tY21kcy5oOjEzCittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICJjb2zCt2xhYm9yYXIgKHZlZ2V1IHRhbWLDqTogZ2l0IGhlbHAgd29ya2Zsb3cpIgorCisjOiBjb21tb24tY21kcy5oOjE3Cittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICJBZmVnZWl4IGVscyBjb250aW5ndXRzIGRlbHMgZml0eGVycyBhIGwnw61uZGV4IgorCisjOiBjb21tb24tY21kcy5oOjE4Cittc2dpZCAiVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAiVHJvYmEgcGVyIGNlcmNhIGJpbsOgcmlhIGVsIGNhbnZpIHF1ZSBoYWdpIGludHJvZHXDr3QgdW4gZGVmZWN0ZSIKKworIzogY29tbW9uLWNtZHMuaDoxOQorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICJMbGlzdGEsIGNyZWEgbyBzdXByaW1laXggYnJhbnF1ZXMiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjAKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIkNhbnZpYSBkZSBicmFuY2EgbyByZXN0YXVyYSBlbHMgZml0eGVycyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjEKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIkNsb25hIHVuIGRpcMOyc2l0IGEgdW4gZGlyZWN0b3JpIG5vdSIKKworIzogY29tbW9uLWNtZHMuaDoyMgorbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJSZWdpc3RyYSBlbHMgY2FudmlzIGFsIGRpcMOyc2l0IgorCisjOiBjb21tb24tY21kcy5oOjIzCittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiIgorIk1vc3RyYSBlbHMgY2FudmlzIGVudHJlIGNvbWlzc2lvbnMsIGxhIGNvbWlzc2nDsyBpIGwnYXJicmUgZGUgdHJlYmFsbCwgZXRjLiIKKworIzogY29tbW9uLWNtZHMuaDoyNAorbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIkJhaXhhIG9iamVjdGVzIGkgcmVmZXLDqG5jaWVzIGQndW4gYWx0cmUgZGlww7JzaXQiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjUKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIkltcHJpbWVpeCBsZXMgbMOtbmllcyBjb2luY2lkZW50cyBhbWIgdW4gcGF0csOzIgorCisjOiBjb21tb24tY21kcy5oOjI2Cittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIkNyZWEgdW4gZGlww7JzaXQgZGUgR2l0IGJ1aXQgbyByZWluaWNpYWxpdHphIHVuIGV4aXN0ZW50IgorCisjOiBjb21tb24tY21kcy5oOjI3Cittc2dpZCAiU2hvdyBjb21taXQgbG9ncyIKK21zZ3N0ciAiTW9zdHJhIGVscyByZWdpc3RyZXMgZGUgY29taXNzacOzIgorCisjOiBjb21tb24tY21kcy5oOjI4Cittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIlVuZWl4IGR1ZXMgbyBtw6lzIGhpc3TDsnJpZXMgZGUgZGVzZW52b2x1cGFtZW50IgorCisjOiBjb21tb24tY21kcy5oOjI5Cittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJNb3UgbyBjYW52aWEgZGUgbm9tIGEgdW4gZml0eGVyLCBkaXJlY3RvcmkgbyBlbmxsYcOnIHNpbWLDsmxpYyIKKworIzogY29tbW9uLWNtZHMuaDozMAorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiT2J0w6luIGRlIGkgaW50ZWdyYSBhbWIgdW4gYWx0cmUgZGlww7JzaXQgbyB1bmEgYnJhbmNhIGxvY2FsIgorCisjOiBjb21tb24tY21kcy5oOjMxCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICIiCisiQWN0dWFsaXR6YSBsZXMgcmVmZXLDqG5jaWVzIHJlbW90ZXMganVudGFtZW50IGFtYiBlbHMgb2JqZWN0ZXMgYXNzb2NpYXRzIgorCisjOiBjb21tb24tY21kcy5oOjMyCittc2dpZCAiRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCIKK21zZ3N0ciAiQXZhbsOnYSBsZXMgY29taXNzaW9ucyBsb2NhbHMgYWwgY2FwIGZvbnQgYWN0dWFsaXR6YXQiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzMKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiUmVzdGFibGVpeCBlbCBIRUFEIGFjdHVhbCBhIGwnZXN0YXQgZXNwZWNpZmljYXQiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzQKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiRWxpbWluYSBmaXR4ZXJzIGRlIGwnYXJicmUgZGUgdHJlYmFsbCBpIGRlIGwnw61uZGV4IgorCisjOiBjb21tb24tY21kcy5oOjM1Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIk1vc3RyYSBkaXZlcnNvcyB0aXB1cyBkJ29iamVjdGVzIgorCisjOiBjb21tb24tY21kcy5oOjM2Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiTW9zdHJhIGwnZXN0YXQgZGUgbCdhcmJyZSBkZSB0cmViYWxsIgorCisjOiBjb21tb24tY21kcy5oOjM3Cittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIiIKKyJDcmVhLCBsbGlzdGEsIHN1cHJpbWVpeCBvIHZlcmlmaWNhIHVuIG9iamVjdGUgZCdldGlxdWV0YSBmaXJtYXQgYW1iIEdQRyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE0NQorbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJkYXRhLWRlLWNhZHVjaXRhdCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE2MAorbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAib3BlcmFjacOzIG51bMK3bGEgKHBlciBhIGNvbXBhdGliaWxpdGF0IGFtYiB2ZXJzaW9ucyBhbnRlcmlvcnMpIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjM2Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICJzaWd1ZXMgbcOpcyBkZXRhbGxhdCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIzOAorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgInNpZ3VlcyBtw6lzIGNhbGxhdCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjI0NAorbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICJ1c2EgPG4+IHhpZnJlcyBwZXIgcHJlc2VudGFyIGVscyBTSEEtMSIKKworIzogcmVyZXJlLmg6MjgKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgIiIKKyJhY3R1YWxpdHphIGwnw61uZGV4IGFtYiBsYSByZXNvbHVjacOzIGRlIGNvbmZsaWN0ZSByZXVzYWRhIHNpIMOpcyBwb3NzaWJsZSIKKworIzogZ2l0LWJpc2VjdC5zaDo1MAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICJDYWwgY29tZW7Dp2FyIHBlciBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjU2Cittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICJWb2xldSBxdWUgaG8gZmFjaSBwZXIgdsOzcyBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJGFyZyciCittc2dzdHIgIm9wY2nDsyBubyByZWNvbmVndWRhOiAnJGFyZyciCisKKyM6IGdpdC1iaXNlY3Quc2g6MTAzCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdmFsaWQgcmV2aXNpb24iCittc2dzdHIgIickYXJnJyBubyBzZW1ibGEgdW5hIHJldmlzacOzIHbDoGxpZGEiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMyCittc2dpZCAiQmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICJIRUFEIGRvbGVudCAtIENhbCB1biBIRUFEIgorCisjOiBnaXQtYmlzZWN0LnNoOjE0NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNoZWNraW5nIG91dCAnJHN0YXJ0X2hlYWQnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgIiIKKyJMJ2FnYWZhbWVudCBkZSAnJHN0YXJ0X2hlYWQnIGhhIGZhbGxhdC4gUHJvdmV1ICdnaXQgYmlzZWN0IHJlc2V0IDxicmFuY2EtIgorInbDoGxpZGE+Jy4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MTU1Cittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAibm8gZXMgYmlzZWNhcsOgIGVuIHVuIGFyYnJlIGVuIGVsIHF1YWwgcydoYSBmZXQgY2ctc2VlayIKKworIzogZ2l0LWJpc2VjdC5zaDoxNTkKK21zZ2lkICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICJIRUFEIGRvbGVudCAtIHJlZmVyw6huY2lhIHNpbWLDsmxpY2EgZXN0cmFueWEiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAkc3RhdGUiCittc2dzdHIgIlBhcsOgbWV0cmUgYmlzZWN0X3dyaXRlIGRvbGVudDogJHN0YXRlIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAiSW50cm9kdWNjacOzIGRlIHJldmlzacOzIGRvbGVudGE6ICRhcmciCisKKyM6IGdpdC1iaXNlY3Quc2g6MjU1Cittc2dpZCAiUGxlYXNlIGNhbGwgJ2Jpc2VjdF9zdGF0ZScgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIgorbXNnc3RyICJTaSB1cyBwbGF1LCBpbnZvcXVldSAnYmlzZWN0X3N0YXRlJyBhbWIgYWxtZW55cyB1biBwYXLDoG1ldHJlLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIkludHJvZHVjY2nDsyBkZSByZXZpc2nDsyBkb2xlbnRhOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgcG90IGFjY2VwdGFyIG5vbcOpcyB1biBwYXLDoG1ldHJlLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJpc2VjdGluZyBvbmx5IHdpdGggYSAkVEVSTV9CQUQgY29tbWl0LiIKK21zZ3N0ciAiQXbDrXM6IGJpc2VjYW50IGFtYiBub23DqXMgY29taXNzacOzICRURVJNX0JBRC4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDozMDUKK21zZ2lkICJBcmUgeW91IHN1cmUgW1kvbl0/ICIKK21zZ3N0ciAiTidlc3RldSBzZWd1ciBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjMxNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICRiYWRfc3luIGFuZCBvbmUgJGdvb2Rfc3luIHJldmlzaW9uLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBhbmQgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyJDYWwgZG9uYXItbWUgYWxtZW55cyB1bmEgcmV2aXNpw7MgJGJhZF9zeW4gaSB1bmEgJGdvb2Rfc3luLlxuIgorIihQb2RldSB1c2FyIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGkgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIHBlciBhaXjDsi4pIgorCisjOiBnaXQtYmlzZWN0LnNoOjMyMAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJGdvb2Rfc3luIGFuZCBvbmUgJGJhZF9zeW4gcmV2aXNpb24uXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGFuZCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIkNhbCBjb21lbsOnYXIgYW1iIFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIkRlc3Byw6lzIGNhbCBkb25hci1tZSBhbG1lbnlzIHVuYSByZXZpc2nDsyAkZ29vZF9zeW4gaSB1bmEgJGJhZF9zeW4uXG4iCisiKFBvZGV1IHVzYXIgXCJnaXQgYmlzZWN0ICRiYWRfc3luXCIgaSBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgcGVyIGFpeMOyLikiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzkxIGdpdC1iaXNlY3Quc2g6NTIxCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICJObyBlc3RlbSBiaXNlY2FudC4iCisKKyM6IGdpdC1iaXNlY3Quc2g6Mzk4CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiJyRpbnZhbGlkJyBubyDDqXMgdW5hIGNvbWlzc2nDsyB2w6BsaWRhIgorCisjOiBnaXQtYmlzZWN0LnNoOjQwNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJGJyYW5jaCcuXG4iCisiVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKyJObyBzJ2hhIHBvZ3V0IGFnYWZhciBlbCBIRUFEIG9yaWdpbmFsICckYnJhbmNoJy5cbiIKKyJQcm92ZXUgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbWlzc2nDsz4nLiIKKworIzogZ2l0LWJpc2VjdC5zaDo0MzUKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJDYXAgZml0eGVyIGRlIHJlZ2lzdHJlIGRvbmF0IgorCisjOiBnaXQtYmlzZWN0LnNoOjQzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAibm8gZXMgcG90IGxsZWdpciAkZmlsZSBwZXIgYSByZXByb2R1Y2Npw7MiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDU1Cittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyBkZSBxdcOoIHBhcmxldT8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICJleGVjdXRhbnQgJGNvbW1hbmQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyJlbCBwYXMgZGUgYmlzZWNjacOzIGhhIGZhbGxhdDpcbiIKKyJlbCBjb2RpIGRlIHNvcnRpZGEgJHJlcyBkZSAnJGNvbW1hbmQnIMOpcyA8IDAgbyA+PSAxMjgiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTAwCittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgImVsIHBhcyBkZSBiaXNlY2Npw7Mgbm8gcG90IGNvbnRpbnVhciBtw6lzIgorCisjOiBnaXQtYmlzZWN0LnNoOjUwNgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJlbCBwYXMgZGUgYmlzZWNjacOzIGhhIGZhbGxhdDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgaGEgc3VydCBhbWIgZWwgY29kaSBkJ2Vycm9yICRyZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTEzCittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICJwYXMgZGUgYmlzZWNjacOzIHJlZWl4aXQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAkVEVSTV9CQUQvJFRFUk1fR09PRCBiaXNlY3QuIgorbXNnc3RyICJPcmRyZSBpbnbDoGxpZGE6IGFjdHVhbG1lbnQgZXN0ZXUgZW4gdW5hIGJpc2VjY2nDsyAkVEVSTV9CQUQvJFRFUk1fR09PRCIKKworIzogZ2l0LXJlYmFzZS5zaDo1NworbXNnaWQgIiIKKyJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyJUbyBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCByZWJhc2luZywgcnVuIFwiZ2l0IHJlYmFzZSAtLWFib3J0IgorIlwiLiIKK21zZ3N0ciAiIgorIlF1YW4gaMOgZ2l1IHJlc29sdCBhcXVlc3QgcHJvYmxlbWEsIGV4ZWN1dGV1IFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiU2kgcHJlZmVyaXUgc2FsdGFyIGFxdWVzdCBwZWRhw6csIGV4ZWN1dGV1IFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBlbiBsbG9jLlxuIgorIlBlciBhIGFnYWZhciBsYSBicmFuY2Egb3JpZ2luYWwgaSBkZWl4YXIgZGUgcmViYXNhciwgZXhlY3V0ZXUgXCJnaXQgcmViYXNlIC0tIgorImFib3J0XCIuIgorCisjOiBnaXQtcmViYXNlLnNoOjE2NQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAiUydoYSBhcGxpY2F0IGVsIG1hZ2F0emVtIGF1dG9tw6B0aWMuIgorCisjOiBnaXQtcmViYXNlLnNoOjE2OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICRzdGFzaF9zaGExIgorbXNnc3RyICJObyBlcyBwb3QgZW1tYWdhdHplbWFyICRzdGFzaF9zaGExIgorCisjOiBnaXQtcmViYXNlLnNoOjE2OQorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisiTCdhcGxpY2FjacOzIGRlbCBtYWdhdHplbSBhdXRvbcOgdGljIGhhIHJlc3VsdGF0IGVuIGNvbmZsaWN0ZXMuXG4iCisiRWxzIHZvc3RyZXMgY2FudmlzIGVzdGFuIHNlZ3VycyBlbiBlbCBtYWdhdHplbS5cbiIKKyJQb2RldSBleGVjdXRhciBcImdpdCBzdGFzaCBwb3BcIiBvIFwiZ2l0IHN0YXNoIGRyb3BcIiBlbiBxdWFsc2V2b2wgbW9tZW50LlxuIgorCisjOiBnaXQtcmViYXNlLnNoOjIwOAorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICJFbCBnYW54byBkZSBwcmVyZWJhc2FtZW50IGhhIHJlZnVzYXQgcmViYXNhci4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjEzCittc2dpZCAiSXQgbG9va3MgbGlrZSBnaXQtYW0gaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICJTZW1ibGEgcXVlIGdpdC1hbSBlc3TDoCBlbiBjdXJzLiBObyBlcyBwb3QgcmViYXNhci4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzUxCittc2dpZCAiVGhlIC0tZXhlYyBvcHRpb24gbXVzdCBiZSB1c2VkIHdpdGggdGhlIC0taW50ZXJhY3RpdmUgb3B0aW9uIgorbXNnc3RyICJMJ29wY2nDsyAtLWV4ZWMgcydoYSBkJ3VzYXIgYW1iIGwnb3BjacOzIC0taW50ZXJhY3RpdmUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzU2Cittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiTm8gaGkgaGEgcmViYXNhbWVudCBlbiBjdXJzPyIKKworIzogZ2l0LXJlYmFzZS5zaDozNjcKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIiIKKyJMJ2FjY2nDsyAtLWVkaXQtdG9kbyBub23DqXMgZXMgcG90IHVzYXIgZHVyYW50IHVuIHJlYmFzYW1lbnQgaW50ZXJhY3RpdmEuIgorCisjOiBnaXQtcmViYXNlLnNoOjM3NAorbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIk5vIGVzIHBvdCBsbGVnaXIgSEVBRCIKKworIzogZ2l0LXJlYmFzZS5zaDozNzcKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyJIZXUgZCdlZGl0YXIgdG90cyBlbHMgY29uZmxpY3RlcyBkZSBmdXNpw7MgaSBkZXNwcsOpc1xuIgorIm1hcmNhci1sb3MgY29tIGEgcmVzb2x0cyBmZW50IHNlcnZpciBnaXQgYWRkIgorCisjOiBnaXQtcmViYXNlLnNoOjM5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IHRvcm5hciBhICRoZWFkX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJHN0YXRlX2Rpcl9iYXNlIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JGNtZF9jbGVhcl9zdGFsZV9yZWJhc2VcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLiIKK21zZ3N0ciAiIgorIlNlbWJsYSBxdWUgamEgaGkgaGEgdW4gZGlyZWN0b3JpICRzdGF0ZV9kaXJfYmFzZSwgaVxuIgorImVtIHByZWd1bnRvIHNpIGVzdGV1IGVubWlnIGQndW4gYWx0cmUgcmViYXNhbWVudC4gU2kgYXF1ZXN0IMOpcyBlbFxuIgorImNhcywgc2kgdXMgcGxhdSwgcHJvdmV1XG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisiU2kgbm8gw6lzIGVsIGNhcywgc2kgdXMgcGxhdSxcbiIKKyJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisiaSBleGVjdXRldS1tZSBkZSBub3UuIE0nYXR1cm8gcGVyIHNpIGVuY2FyYSBoaSB0ZW5pdSBhbGd1bmEgY29zYVxuIgorImRlIHZhbG9yLiIKKworIzogZ2l0LXJlYmFzZS5zaDo0NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJHVwc3RyZWFtX25hbWUiCittc2dzdHIgImZvbnQgbm8gdsOgbGlkYSAkdXBzdHJlYW1fbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo0ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIgorbXNnc3RyICIkb250b19uYW1lOiBqYSBoaSBoYSBtw6lzIGQndW5hIGJhc2UgZGUgZnVzacOzIgorCisjOiBnaXQtcmViYXNlLnNoOjQ5MiBnaXQtcmViYXNlLnNoOjQ5NgorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJG9udG9fbmFtZTogbm8gaGkgaGEgY2FwIGJhc2UgZGUgZnVzacOzIgorCisjOiBnaXQtcmViYXNlLnNoOjUwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6ICRvbnRvX25hbWUiCittc2dzdHIgIk5vIGFzc2VueWFsYSB1bmEgY29taXNzacOzIHbDoGxpZGE6ICRvbnRvX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2g6ICRicmFuY2hfbmFtZSIKK21zZ3N0ciAiZmF0YWw6IG5vIGhpIGhhIHRhbCBicmFuY2E6ICRicmFuY2hfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo1NTcKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICJObyBlcyBwb3QgZW1tYWdhdHplbWFyIGF1dG9tw6B0aWNhbWVudCIKKworIzogZ2l0LXJlYmFzZS5zaDo1NjIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAkc3Rhc2hfYWJicmV2IgorbXNnc3RyICJTJ2hhIGNyZWF0IHVuIG1hZ2F0emVtIGF1dG9tw6B0aWM6ICRzdGFzaF9hYmJyZXYiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTY2Cittc2dpZCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAiU2kgdXMgcGxhdSwgY29tZXRldS1sb3MgbyBlbW1hZ2F0emVtZXUtbG9zLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1ODYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAiTGEgYnJhbmNhIGFjdHVhbCAkYnJhbmNoX25hbWUgZXN0w6AgYWwgZGlhLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiTGEgYnJhbmNhIGFjdHVhbCAkYnJhbmNoX25hbWUgZXN0w6AgYWwgZGlhOyByZWJhc2FtZW50IGZvcsOnYWRhLiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAkbWIgdG8gJG9udG86IgorbXNnc3RyICJDYW52aXMgZGUgJG1iIGEgJG9udG86IgorCisjOiBnaXQtcmViYXNlLnNoOjYxMAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKK21zZ3N0ciAiIgorIlByaW1lciwgcmVib2JpbmFudCBlbCBjYXAgcGVyIGEgcmVwcm9kdWlyIGVsIHZvc3RyZSB0cmViYWxsIGFsIGRhbXVudC4uLiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICRicmFuY2hfbmFtZSB0byAkb250b19uYW1lLiIKK21zZ3N0ciAiUydoYSBhdmFuw6dhdCAkYnJhbmNoX25hbWUgcsOgcGlkYW1lbnQgYSAkb250b19uYW1lIgorCisjOiBnaXQtc3Rhc2guc2g6NTEKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciBhbWIgcGFyw6BtZXRyZXMgbm8gZXN0w6AgaW1wbGVtZW50YXQiCisKKyM6IGdpdC1zdGFzaC5zaDo3NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICJFbmNhcmEgbm8gdGVuaXUgbGEgY29taXNzacOzIGluaWNpYWwiCisKKyM6IGdpdC1zdGFzaC5zaDo4OQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICJObyBlcyBwb3QgZGVzYXIgbCdlc3RhdCBkJ8OtbmRleCBhY3R1YWwiCisKKyM6IGdpdC1zdGFzaC5zaDoxMjQgZ2l0LXN0YXNoLnNoOjEzNworbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICJObyBlcyBwb3QgZGVzYXIgbCdlc3RhdCBkJ2FyYnJlIGRlIHRyZWJhbGwgYWN0dWFsIgorCisjOiBnaXQtc3Rhc2guc2g6MTQxCittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAiTm8gaGkgaGEgY2FudmlzIHNlbGVjY2lvbmF0cyIKKworIzogZ2l0LXN0YXNoLnNoOjE0NAorbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICJObyBlcyBwb3QgZWxpbWluYXIgbCfDrW5kZXggdGVtcG9yYWwgKGFpeMOyIG5vIHBvdCBwYXNzYXIpIgorCisjOiBnaXQtc3Rhc2guc2g6MTU3Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIk5vIGVzIHBvdCByZWdpc3RyYXIgbCdlc3RhdCBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGdpdC1zdGFzaC5zaDoxODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgJHJlZl9zdGFzaCB3aXRoICR3X2NvbW1pdCIKK21zZ3N0ciAiTm8gZXMgcG90IGFjdHVhbGl0emFyICRyZWZfc3Rhc2ggYW1iICR3X2NvbW1pdCIKKworIy4gVFJBTlNMQVRPUlM6ICRvcHRpb24gaXMgYW4gaW52YWxpZCBvcHRpb24sIGxpa2UKKyMuIGAtLWJsYWgtYmxhaCcuIFRoZSA3IHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQorIy4gc2Vjb25kIGxpbmUgY29ycmVzcG9uZCB0byAiZXJyb3I6ICIuIFNvIHlvdSBzaG91bGQgbGluZQorIy4gdXAgdGhlIHNlY29uZCBsaW5lIHdpdGggaG93ZXZlciBtYW55IGNoYXJhY3RlcnMgdGhlCisjLiB0cmFuc2xhdGlvbiBvZiAiZXJyb3I6ICIgdGFrZXMgaW4geW91ciBsYW5ndWFnZS4gRS5nLiBpbgorIy4gRW5nbGlzaCB0aGlzIGlzOgorIy4KKyMuICQgZ2l0IHN0YXNoIHNhdmUgLS1ibGFoLWJsYWggMj4mMSB8IGhlYWQgLW4gMgorIy4gZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6IC0tYmxhaC1ibGFoCisjLiBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICctLWJsYWgtYmxhaCcKKyM6IGdpdC1zdGFzaC5zaDoyMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorIiAgICAgICBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKK21zZ3N0ciAiIgorImVycm9yOiBvcGNpw7MgZGVzY29uZWd1ZGEgZGUgJ3N0YXNoIHNhdmUnOiAkb3B0aW9uXG4iCisiICAgICAgIFBlciBhIHByb3ZlaXIgdW4gbWlzc2F0Z2UsIHVzZXUgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorCisjOiBnaXQtc3Rhc2guc2g6MjYwCittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICJObyBoaSBoYSBjYW52aXMgbG9jYWxzIGEgZGVzYXIiCisKKyM6IGdpdC1zdGFzaC5zaDoyNjQKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiTm8gZXMgcG90IGluaWNpYWxpdHphciBlbCBtYWdhdHplbSIKKworIzogZ2l0LXN0YXNoLnNoOjI2OAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAiTm8gZXMgcG90IGRlc2FyIGwnZXN0YXQgYWN0dWFsIgorCisjOiBnaXQtc3Rhc2guc2g6Mjg2Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJObyBlcyBwb3QgZWxpbWluYXIgZWxzIGNhbnZpcyBkZSBsJ2FyYnJlIGRlIHRyZWJhbGwiCisKKyM6IGdpdC1zdGFzaC5zaDozODcKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICJvcGNpw7MgZGVzY29uZWd1ZGE6ICRvcHQiCisKKyM6IGdpdC1zdGFzaC5zaDozOTcKK21zZ2lkICJObyBzdGFzaCBmb3VuZC4iCittc2dzdHIgIkNhcCBtYWdhdHplbSB0cm9iYXQuIgorCisjOiBnaXQtc3Rhc2guc2g6NDA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICJNYXNzYSByZXZpc2lvbnMgZXNwZWNpZmljYWRlczogJFJFViIKKworIzogZ2l0LXN0YXNoLnNoOjQxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiRyZWZlcmVuY2Ugbm8gw6lzIHVuYSByZWZlcsOobmNpYSB2w6BsaWRhIgorCisjOiBnaXQtc3Rhc2guc2g6NDM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJGFyZ3MnIG5vIMOpcyB1bmEgY29taXNzacOzIGRlIHRpcHVzIG1hZ2F0emVtIgorCisjOiBnaXQtc3Rhc2guc2g6NDQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZSIKK21zZ3N0ciAiJyRhcmdzJyBubyDDqXMgdW5hIHJlZmVyw6huY2lhIGRlIG1hZ2F0emVtIgorCisjOiBnaXQtc3Rhc2guc2g6NDU3Cittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgIm5vIHMnaGEgcG9ndXQgYWN0dWFsaXR6YXIgbCfDrW5kZXgiCisKKyM6IGdpdC1zdGFzaC5zaDo0NjEKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIk5vIGVzIHBvdCBhcGxpY2FyIHVuIG1hZ2F0emVtIGVubWlnIGQndW5hIGZ1c2nDsyIKKworIzogZ2l0LXN0YXNoLnNoOjQ2OQorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIkhpIGhhIGNvbmZsaWN0ZXMgZW4gbCfDrW5kZXguIFByb3ZldS1obyBzZW5zZSAtLWluZGV4LiIKKworIzogZ2l0LXN0YXNoLnNoOjQ3MQorbXNnaWQgIkNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgZGVzYXIgbCdhcmJyZSBkJ8OtbmRleCIKKworIzogZ2l0LXN0YXNoLnNoOjUwNQorbXNnaWQgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgorbXNnc3RyICJObyBlcyBwb3QgZGVzYWxsaXN0YXIgZml0eGVycyBtb2RpZmljYXRzIgorCisjOiBnaXQtc3Rhc2guc2g6NTIwCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICJMJ8OtbmRleCBubyBlc3RhdmEgc2Vuc2UgZW1tYWdhdHplbWFyLiIKKworIzogZ2l0LXN0YXNoLnNoOjU0MworIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiJHtSRVZ9ICgkcykgZGVzY2FydGFkYSIKKworIzogZ2l0LXN0YXNoLnNoOjU0NAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiBObyBzJ2hhIHBvZ3V0IGRlc2NhcnRhciBsJ2VudHJhZGEgZGUgbWFnYXR6ZW0iCisKKyM6IGdpdC1zdGFzaC5zaDo1NTIKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIkNhcCBub20gZGUgYnJhbmNhIGVzcGVjaWZpY2F0IgorCisjOiBnaXQtc3Rhc2guc2g6NjI0Cittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIoUGVyIHJlc3RhdXJhci1sZXMgdGVjbGVnZXUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyRyZW1vdGV1cmwnIgorbXNnc3RyICJubyBlcyBwb3QgZGVzcHVsbGFyIHVuIGNvbXBvbmVudCBkZSBsJ3VybCAnJHJlbW90ZXVybCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisiTm8gcydoYSB0cm9iYXQgY2FwIG1hcGF0Z2UgZGUgc3VibcOyZHVsIGEgLmdpdG1vZHVsZXMgcGVyIGFsIGNhbcOtICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjg3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDbG9uZSBvZiAnJHVybCcgaW50byBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIGZhaWxlZCIKK21zZ3N0ciAiRWwgY2xvbmF0Z2UgZGUgJyR1cmwnIGFsIGNhbcOtIGRlIHN1Ym3DsmR1bCAnJHNtX3BhdGgnIGhhIGZhbGxhdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyOTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkdpdGRpciAnJGEnIGlzIHBhcnQgb2YgdGhlIHN1Ym1vZHVsZSBwYXRoICckYicgb3IgdmljZSB2ZXJzYSIKK21zZ3N0ciAiRWwgZGlyZWN0b3JpIGRlIGdpdCAnJGEnIMOpcyBwYXJ0IGRlbCBjYW3DrSBkZSBzdWJtw7JkdWwgJyRiJyBvIHZpY2V2ZXJzYSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MDYKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIkVsIGNhbcOtIHJlbGF0aXUgbm9tw6lzIGVzIHBvdCB1c2FyIGRlcyBkZWwgbml2ZWxsIHN1cGVyaW9yIGRlIGwnYXJicmUgZGUgIgorInRyZWJhbGwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDE2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICJVUkwgZGUgZGlww7JzaXQ6ICckcmVwbycgaGEgZGUgc2VyIGFic29sdXQgbyBjb21lbsOnYXIgYW1iIC4vfC4uLyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICInJHNtX3BhdGgnIGphIGV4aXN0ZWl4IGVuIGwnw61uZGV4IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQzNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgIiIKKyJFbCBjYW3DrSBzZWfDvGVudCBzJ2lnbm9yYSBwZXIgdW4gZGVscyB2b3N0cmVzIGZpdHhlcnMgLmdpdGlnbm9yZTpcbiIKKyIkc21fcGF0aFxuIgorIlVzZXUgLWYgc2kgcmVhbG1lbnQgdm9sZXUgYWZlZ2lyLWxvLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICJBZmVnaW50IGVsIGRpcMOyc2l0IGV4aXN0ZW50IGEgJyRzbV9wYXRoJyBhIGwnw61uZGV4IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ1NworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIickc21fcGF0aCcgamEgZXhpc3RlaXggaSBubyDDqXMgdW4gZGlww7JzaXQgZGUgZ2l0IHbDoGxpZCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiIgorIkVzIHRyb2JhIHVuIGRpcmVjdG9yaSBkZSBnaXQgcGVyIGEgJyRzbV9uYW1lJyBsb2NhbG1lbnQgYW1iIGVscyByZW1vdHM6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbSIKK21zZ3N0ciAiIgorIlNpIHZvbGV1IHRvcm5hciBhIHVzYXIgYXF1ZXN0IGRpcmVjdG9yaSBkZSBnaXQgbG9jYWwgZW4gbGxvYyBkZSBjbG9uYXIgZGUgIgorIm5vdSBkZXMgZGUiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgcmVwbyIKK21zZ3N0ciAiIgorInVzZXUgbCdvcGNpw7MgJy0tZm9yY2UnLiBTaSBlbCBkaXJlY3RvcmkgZGUgZ2l0IGxvY2FsIG5vIMOpcyBlbCBkaXDDsnNpdCAiCisiY29ycmVjdGUiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIiIKKyJvIGVzdGV1IGluc2VndXIgZGUgcXXDqCB2b2wgZGlyIGFpeMOyLCB0cmlldSB1biBhbHRyZSBub20gYW1iIGwnb3BjacOzICctLW5hbWUnLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIlJlYWN0aXZhbnQgZWwgZGlyZWN0b3JpIGRlIGdpdCBsb2NhbCBwZXIgYWwgc3VibcOyZHVsICckc21fbmFtZScuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ4NAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IGFnYWZhciBlbCBzdWJtw7JkdWwgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIlMnaGEgZmFsbGF0IGVuIGFmZWdpciBlbCBzdWJtw7JkdWwgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0OTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiUydoYSBmYWxsYXQgZW4gcmVnaXN0cmFyIGVsIHN1Ym3DsmR1bCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU0MgorIywgc2gtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyRwcmVmaXgkZGlzcGxheXBhdGgnIgorbXNnc3RyICJFbnRyYW50IGEgJyRwcmVmaXgkZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU2MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBpbmcgYXQgJyRwcmVmaXgkZGlzcGxheXBhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKK21zZ3N0ciAiIgorIkF0dXJhbnQgYSAnJHByZWZpeCRkaXNwbGF5cGF0aCc7IGwnc2NyaXB0IGhhIHJldG9ybmF0IHVuIGVzdGF0IG5vIHplcm8uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiIgorIk5vIHMnaGEgdHJvYmF0IGNhcCB1cmwgcGVyIGFsIGNhbcOtIGRlIHN1Ym3DsmR1bCAnJGRpc3BsYXlwYXRoJyBhIC5naXRtb2R1bGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIlMnaGEgZmFsbGF0IGVuIHJlZ2lzdHJhciBsJ3VybCBwZXIgYWwgY2Ftw60gZGUgc3VibcOyZHVsICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIlMnaGEgcmVnaXN0cmF0IGVsIHN1Ym3DsmR1bCAnJG5hbWUnICgkdXJsKSBwZXIgYWwgY2Ftw60gJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiUydoYSBmYWxsYXQgZW4gcmVnaXN0cmFyIGVsIG1vZGUgZCdhY3R1YWxpdHphY2nDsyBwZXIgYWwgY2Ftw60gZGUgc3VibcOyZHVsICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVzZSAnLicgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiVXNldSAnLicgc2kgcmVhbG1lbnQgdm9sZXUgZGVzaW5pY2lhbGl0emFyIHRvdHMgZWxzIHN1Ym3DsmR1bHMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgd29yayB0cmVlICckZGlzcGxheXBhdGgnIGNvbnRhaW5zIGEgLmdpdCBkaXJlY3RvcnkiCittc2dzdHIgIkwnYXJicmUgZGUgdHJlYmFsbCBkZSBzdWJtw7JkdWwgJyRkaXNwbGF5cGF0aCcgY29udMOpIHVuIGRpcmVjdG9yaSAuZ2l0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIih1c2V1ICdybSAtcmYnIHNpIHJlYWxtZW50IHZvbGV1IGVsaW1pbmFyLWxvIGluY2xvZW50IHRvdGEgbGEgc2V2YSBoaXN0w7JyaWEpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5OAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gIgorImRpc2NhcmQgdGhlbSIKK21zZ3N0ciAiIgorIkwnYXJicmUgZGUgdHJlYmFsbCBkZSBzdWJtw7JkdWwgJyRkaXNwbGF5cGF0aCcgY29udMOpIG1vZGlmaWNhY2lvbnMgbG9jYWxzOyAiCisidXNldSAnLWYnIHBlciBhIGRlc2NhcnRhci1sZXMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDbGVhcmVkIGRpcmVjdG9yeSAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiUydoYSBuZXRlamF0IGVsIGRpcmVjdG9yaSAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgc3VibW9kdWxlIHdvcmsgdHJlZSAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBlbGltaW5hciBsJ2FyYnJlIGRlIHRyZWJhbGwgZGUgc3VibcOyZHVsICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IGNyZWFyIGVsIGRpcmVjdG9yaSBkZSBzdWJtw7JkdWwgYnVpdCAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIlN1Ym3DsmR1bCAnJG5hbWUnICgkdXJsKSBubyByZWdpc3RyYXQgcGVyIGFsIGNhbcOtICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjgzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIG5vdCBpbml0aWFsaXplZFxuIgorIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICIiCisiQ2Ftw60gZGUgc3VibcOyZHVsICckZGlzcGxheXBhdGgnIG5vIGluaWNpYWxpdHphdFxuIgorIlBvdHNlciB2b2xldSB1c2FyICd1cGRhdGUgLS1pbml0Jz8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiTm8gcydoYSBwb2d1dCB0cm9iYXIgbGEgcmV2aXNpw7MgYWN0dWFsIGVuIGVsIGNhbcOtIGRlIHN1Ym3DsmR1bCAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJObyBzJ2hhIHBvZ3V0IG9idGVuaXIgZW4gZWwgY2Ftw60gZGUgc3VibcOyZHVsICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODc2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIk5vIHMnaGEgcG9ndXQgb2J0ZW5pciBlbiBlbCBjYW3DrSBkZSBzdWJtw7JkdWwgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBhZ2FmYXIgJyRzaGExJyBlbiBlbCBjYW3DrSBkZSBzdWJtw7JkdWwgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAiQ2Ftw60gZGUgc3VibcOyZHVsICckZGlzcGxheXBhdGgnOiBzJ2hhIGFnYWZhdCAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJubyBzJ2hhIHBvZ3V0IHJlYmFzYXIgJyRzaGExJyBlbiBlbCBjYW3DrSBkZSBzdWJtw7JkdWwgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIkNhbcOtIGRlIHN1Ym3DsmR1bCAnJGRpc3BsYXlwYXRoJzogcydoYSByZWJhc2F0IGVuICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiTm8gcydoYSBwb2d1dCBmdXNpb25hciAnJHNoYTEnIGVuIGVsIGNhbcOtIGRlIHN1Ym3DsmR1bCAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBtZXJnZWQgaW4gJyRzaGExJyIKK21zZ3N0ciAiQ2Ftw60gZGUgc3VibcOyZHVsICckZGlzcGxheXBhdGgnOiBzJ2hhIGZ1c2lvbmF0IGVuICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckcHJlZml4JHNtX3BhdGgnIgorbXNnc3RyICIiCisiTCdleGVjdWNpw7MgZGUgJyRjb21tYW5kICRzaGExJyBoYSBmYWxsYXQgZW4gZWwgY2Ftw60gZGUgc3VibcOyZHVsICckcHJlZml4IgorIiRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckcHJlZml4JHNtX3BhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICJDYW3DrSBkZSBzdWJtw7JkdWwgJyRwcmVmaXgkc21fcGF0aCc6ICckY29tbWFuZCAkc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJTJ2hhIGZhbGxhdCBlbiByZWN1cnNhciBhbCBjYW3DrSBkZSBzdWJtw7JkdWwgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA0NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIkwnb3BjacOzIC0tY2FjaGVkIG5vIGVzIHBvdCB1c2FyIGFtYiBsJ29wY2nDsyAtLWZpbGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEwOTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAibW9kZSBpbmVzcGVyYXQgJG1vZF9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTExOAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIEF2w61zOiAkZGlzcGxheV9uYW1lIG5vIGNvbnTDqSBsYSBjb21pc3Npw7MgJHNoYTFfc3JjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICBBdsOtczogJGRpc3BsYXlfbmFtZSBubyBjb250w6kgbGEgY29taXNzacOzICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiAgQXbDrXM6ICRkaXNwbGF5X25hbWUgbm8gY29udMOpIGxlcyBjb21pc3Npb25zICRzaGExX3NyYyBpICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTQ5Cittc2dpZCAiYmxvYiIKK21zZ3N0ciAiYmxvYiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMjY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIlMnaGEgZmFsbGF0IGVuIHJlY3Vyc2FyIGFsIGNhbcOtIGRlIHN1Ym3DsmR1bCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEzMzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIlNpbmNyb25pdHphbnQgbCd1cmwgZGUgc3VibcOyZHVsIHBlciBhICckZGlzcGxheXBhdGgnIgpkaWZmIC0tZ2l0IGEvcG8vZGUucG8gYi9wby9kZS5wbwppbmRleCBkOWJhNDA1Li5jNjgyYWFmIDEwMDY0NAotLS0gYS9wby9kZS5wbworKysgYi9wby9kZS5wbwpAQCAtMSwxNDAwICsxLDEyNjMwIEBACi0jIFRyYW5zbGF0aW9uIG9mIGdpdGsgdG8gR2VybWFuLgotIyBDb3B5cmlnaHQgKEMpIDIwMDcgUGF1bCBNYWNrZXJyYXMuCi0jIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXRrIHBhY2thZ2UuCisjIEdlcm1hbiB0cmFuc2xhdGlvbnMgZm9yIEdpdC4KKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTUgUmFsZiBUaGllbG93IDxyYWxmLnRoaWVsb3dAZ21haWwuY29tPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIFJhbGYgVGhpZWxvdyA8cmFsZi50aGllbG93QGdtYWlsLmNvbT4sIDIwMTAtMjAxNS4KICMKLSMgQ2hyaXN0aWFuIFN0aW1taW5nIDxzdGltbWluZ0B0dWhoLmRlPiwgMjAwNy4KLSMgRnJlZGVyaWsgU2Nod2FyemVyIDxzY2h3YXJ6ZXJmQGdtYWlsLmNvbT4sIDIwMDguCiBtc2dpZCAiIgogbXNnc3RyICIiCi0iUHJvamVjdC1JZC1WZXJzaW9uOiBnaXQtZ3VpXG4iCi0iUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgotIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDE1LTA1LTE3IDE0OjMyKzEwMDBcbiIKLSJQTy1SZXZpc2lvbi1EYXRlOiAyMDE1LTEwLTIwIDE0OjIwKzAyMDBcbiIKLSJMYXN0LVRyYW5zbGF0b3I6IENocmlzdGlhbiBTdGltbWluZyA8c3RpbW1pbmdAdHVoaC5kZT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBHZXJtYW5cbiIKLSJMYW5ndWFnZTogXG4iCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wOS0xNSAwNjo0NSswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0wMS0yMSAxNTowMSswODAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBSYWxmIFRoaWVsb3cgPHJhbGYudGhpZWxvd0BnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogR2VybWFuIDw+XG4iCisiTGFuZ3VhZ2U6IGRlXG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0yOyBwbHVyYWw9KG4hPTEpO1xuIgogCi0jOiBnaXRrOjE0MAotbXNnaWQgIkNvdWxkbid0IGdldCBsaXN0IG9mIHVubWVyZ2VkIGZpbGVzOiIKLW1zZ3N0ciAiTGlzdGUgZGVyIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlbiBEYXRlaWVuIG5pY2h0IGdlZnVuZGVuOiIKKyM6IGFkdmljZS5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6ICUuKnNcbiIKK21zZ3N0ciAiSGlud2VpczogJS4qc1xuIgogCi0jOiBnaXRrOjIxMiBnaXRrOjIzODEKLW1zZ2lkICJDb2xvciB3b3JkcyIKLW1zZ3N0ciAiIgotCi0jOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MwotbXNnaWQgIk1hcmt1cCB3b3JkcyIKLW1zZ3N0ciAiIgotCi0jOiBnaXRrOjMyNAotbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gTGFkZW4gZGVyIFZlcnNpb25lbjoiCi0KLSM6IGdpdGs6MzgwCi1tc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiBkZXMgLS1hcmdzY21kLUtvbW1hbmRvczoiCi0KLSM6IGdpdGs6MzkzCi1tc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgotbXNnc3RyICIiCi0iS2VpbmUgRGF0ZWllbiBhdXNnZXfDpGhsdDogRXMgd3VyZGUgLS1tZXJnZSBhbmdlZ2ViZW4sIGFiZXIgZXMgZXhpc3RpZXJlbiAiCi0ia2VpbmUgbmljaHQgenVzYW1tZW5nZWbDvGhydGVuIERhdGVpZW4uIgotCi0jOiBnaXRrOjM5NgorIzogYWR2aWNlLmM6ODgKIG1zZ2lkICIiCi0iTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgotImxpbWl0LiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCiBtc2dzdHIgIiIKLSJLZWluZSBEYXRlaWVuIGF1c2dld8OkaGx0OiBFcyB3dXJkZSAtLW1lcmdlIGFuZ2VnZWJlbiwgYWJlciBlcyBzaW5kIGtlaW5lICIKLSJuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZW4gRGF0ZWllbiBpbiBkZXIgRGF0ZWlhdXN3YWhsLiIKKyJLb3JyaWdpZXJlbiBTaWUgZGllcyBpbSBBcmJlaXRzdmVyemVpY2huaXMsIHVuZCBiZW51dHplbiBTaWVcbiIKKyJkYW5uICdnaXQgYWRkL3JtIDxEYXRlaT4nLCB1bSBkaWUgQXVmbMO2c3VuZyBlbnRzcHJlY2hlbmQgenUgbWFya2llcmVuXG4iCisidW5kIHp1IGNvbW1pdHRlbi4iCiAKLSM6IGdpdGs6NDE4IGdpdGs6NTY2Ci1tc2dpZCAiRXJyb3IgZXhlY3V0aW5nIGdpdCBsb2c6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBBdXNmw7xocmVuIHZvbiDCu2dpdCBsb2fCqzoiCisjOiBhZHZpY2UuYzoxMDEgYnVpbHRpbi9tZXJnZS5jOjEyMjcKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIlNpZSBoYWJlbiBJaHJlbiBNZXJnZSBuaWNodCBhYmdlc2NobG9zc2VuIChNRVJHRV9IRUFEIGV4aXN0aWVydCkuIgogCi0jOiBnaXRrOjQzNiBnaXRrOjU4MgotbXNnaWQgIlJlYWRpbmciCi1tc2dzdHIgIkxlc2VuIgorIzogYWR2aWNlLmM6MTAzCittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiQml0dGUgY29tbWl0dGVuIFNpZSBJaHJlIMOEbmRlcnVuZ2VuLCBiZXZvciBTaWUgZGVuIE1lcmdlIGF1c2bDvGhyZW4uIgogCi0jOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKLW1zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCi1tc2dzdHIgIlZlcnNpb25lbiB3ZXJkZW4gZ2VsZXNlbiAuLi4iCisjOiBhZHZpY2UuYzoxMDQKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgIkJlZW5kZSB3ZWdlbiBuaWNodCBhYmdlc2NobG9zc2VuZW0gTWVyZ2UuIgogCi0jOiBnaXRrOjQ5OSBnaXRrOjE2MzcgZ2l0azo0NTI4Ci1tc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKLW1zZ3N0ciAiS2VpbmUgVmVyc2lvbmVuIGF1c2dld8OkaGx0IgorIzogYXJjaGl2ZS5jOjEyCittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzxPcHRpb25lbj5dIDxDb21taXQtUmVmZXJlbno+IFs8UGZhZD4uLi5dIgogCi0jOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKLW1zZ2lkICJDb21tYW5kIGxpbmUiCi1tc2dzdHIgIktvbW1hbmRvemVpbGUiCisjOiBhcmNoaXZlLmM6MTMKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKIAotIzogZ2l0azoxNTExCi1tc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgotbXNnc3RyICJBdXNnYWJlIHZvbiDCu2dpdCBsb2fCqyBrYW5uIG5pY2h0IGVya2FubnQgd2VyZGVuOiIKKyM6IGFyY2hpdmUuYzoxNAorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxSZXBvc2l0b3J5PiBbLS1leGVjIDxQcm9ncmFtbT5dIFs8T3B0aW9uZW4+XSA8Q29tbWl0LSIKKyJSZWZlcmVuej4gWzxQZmFkPi4uLl0iCiAKLSM6IGdpdGs6MTc0MAotbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCi1tc2dzdHIgIktlaW5lIFZlcnNpb25zaW5mb3JtYXRpb24gdmVyZsO8Z2JhciIKKyM6IGFyY2hpdmUuYzoxNQorbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxSZXBvc2l0b3J5PiBbLS1leGVjIDxQcm9ncmFtbT5dIC0tbGlzdCIKIAotIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQotbXNnaWQgIk9LIgotbXNnc3RyICJPayIKKyM6IGFyY2hpdmUuYzozNDMgYnVpbHRpbi9hZGQuYzoxMzcgYnVpbHRpbi9hZGQuYzo0MjYgYnVpbHRpbi9ybS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICJQZmFkc3BlemlmaWthdGlvbiAnJXMnIHN0aW1tdCBtaXQga2VpbmVuIERhdGVpZW4gw7xiZXJlaW4iCiAKLSM6IGdpdGs6MTkzNCBnaXRrOjQzMTcgZ2l0azo5MTk2IGdpdGs6OTI3NSBnaXRrOjkzOTEgZ2l0azo5NDQwIGdpdGs6OTY3MQotIzogZ2l0azoxMTI0MiBnaXRrOjExNTIyCi1tc2dpZCAiQ2FuY2VsIgotbXNnc3RyICJBYmJyZWNoZW4iCisjOiBhcmNoaXZlLmM6NDI4Cittc2dpZCAiZm10IgorbXNnc3RyICJGb3JtYXQiCiAKLSM6IGdpdGs6MjA2OQotbXNnaWQgIiZVcGRhdGUiCi1tc2dzdHIgIiZBa3R1YWxpc2llcmVuIgorIzogYXJjaGl2ZS5jOjQyOAorbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICJBcmNoaXZmb3JtYXQiCiAKLSM6IGdpdGs6MjA3MAotbXNnaWQgIiZSZWxvYWQiCi1tc2dzdHIgIiZOZXUgbGFkZW4iCisjOiBhcmNoaXZlLmM6NDI5IGJ1aWx0aW4vbG9nLmM6MTIyOQorbXNnaWQgInByZWZpeCIKK21zZ3N0ciAiUHLDpGZpeCIKIAotIzogZ2l0azoyMDcxCi1tc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgotbXNnc3RyICImWndlaWdlIG5ldSBsYWRlbiIKKyM6IGFyY2hpdmUuYzo0MzAKK21zZ2lkICJwcmVwZW5kIHByZWZpeCB0byBlYWNoIHBhdGhuYW1lIGluIHRoZSBhcmNoaXZlIgorbXNnc3RyICJlaW5lbiBQcsOkZml4IHZvciBqZWRlbiBQZmFkbmFtZW4gaW4gZGVtIEFyY2hpdiBzdGVsbGVuIgogCi0jOiBnaXRrOjIwNzIKLW1zZ2lkICImTGlzdCByZWZlcmVuY2VzIgotbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuIGF1ZiZsaXN0ZW4iCisjOiBhcmNoaXZlLmM6NDMxIGJ1aWx0aW4vYXJjaGl2ZS5jOjg4IGJ1aWx0aW4vYmxhbWUuYzoyNTE2CisjOiBidWlsdGluL2JsYW1lLmM6MjUxNyBidWlsdGluL2NvbmZpZy5jOjU4IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODcKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODkgYnVpbHRpbi9ncmVwLmM6NzEyIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0NiBidWlsdGluL2xzLWZpbGVzLmM6NDQ5IGJ1aWx0aW4vbm90ZXMuYzozOTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTggYnVpbHRpbi9yZWFkLXRyZWUuYzoxMDkgcGFyc2Utb3B0aW9ucy5oOjE1MworbXNnaWQgImZpbGUiCittc2dzdHIgIkRhdGVpIgogCi0jOiBnaXRrOjIwNzQKLW1zZ2lkICJTdGFydCBnaXQgJmd1aSIKLW1zZ3N0ciAiwrtnaXQgJmd1acKrIHN0YXJ0ZW4iCisjOiBhcmNoaXZlLmM6NDMyIGJ1aWx0aW4vYXJjaGl2ZS5jOjg5Cittc2dpZCAid3JpdGUgdGhlIGFyY2hpdmUgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJkYXMgQXJjaGl2IGluIGRpZXNlIERhdGVpIHNjaHJlaWJlbiIKIAotIzogZ2l0azoyMDc2Ci1tc2dpZCAiJlF1aXQiCi1tc2dzdHIgIiZCZWVuZGVuIgorIzogYXJjaGl2ZS5jOjQzNAorbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIi5naXRhdHRyaWJ1dGVzIGF1cyBkZW0gQXJiZWl0c3ZlcnplaWNobmlzIGxlc2VuIgogCi0jOiBnaXRrOjIwNjgKLW1zZ2lkICImRmlsZSIKLW1zZ3N0ciAiJkRhdGVpIgorIzogYXJjaGl2ZS5jOjQzNQorbXNnaWQgInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiCittc2dzdHIgImFyY2hpdmllcnRlIERhdGVpZW4gaW4gZGVyIFN0YW5kYXJkLUZlaGxlcmF1c2dhYmUgYXVzZ2ViZW4iCiAKLSM6IGdpdGs6MjA4MAotbXNnaWQgIiZQcmVmZXJlbmNlcyIKLW1zZ3N0ciAiJkVpbnN0ZWxsdW5nZW4iCisjOiBhcmNoaXZlLmM6NDM2Cittc2dpZCAic3RvcmUgb25seSIKK21zZ3N0ciAibnVyIHNwZWljaGVybiIKIAotIzogZ2l0azoyMDc5Ci1tc2dpZCAiJkVkaXQiCi1tc2dzdHIgIiZCZWFyYmVpdGVuIgorIzogYXJjaGl2ZS5jOjQzNworbXNnaWQgImNvbXByZXNzIGZhc3RlciIKK21zZ3N0ciAic2NobmVsbGVyIGtvbXByaW1pZXJlbiIKIAotIzogZ2l0azoyMDg0Ci1tc2dpZCAiJk5ldyB2aWV3Li4uIgotbXNnc3RyICImTmV1ZSBBbnNpY2h0IC4uLiIKKyM6IGFyY2hpdmUuYzo0NDUKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgImJlc3NlciBrb21wcmltaWVyZW4iCiAKLSM6IGdpdGs6MjA4NQotbXNnaWQgIiZFZGl0IHZpZXcuLi4iCi1tc2dzdHIgIkFuc2ljaHQgJmJlYXJiZWl0ZW4gLi4uIgorIzogYXJjaGl2ZS5jOjQ0OAorbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAidW50ZXJzdMO8dHp0ZSBBcmNoaXZmb3JtYXRlIGF1Zmxpc3RlbiIKIAotIzogZ2l0azoyMDg2Ci1tc2dpZCAiJkRlbGV0ZSB2aWV3IgotbXNnc3RyICJBbnNpY2h0ICZlbnRmZXJuZW4iCisjOiBhcmNoaXZlLmM6NDUwIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwIGJ1aWx0aW4vY2xvbmUuYzo3NworbXNnaWQgInJlcG8iCittc2dzdHIgIlJlcG9zaXRvcnkiCiAKLSM6IGdpdGs6MjA4OCBnaXRrOjQwNDMKLW1zZ2lkICImQWxsIGZpbGVzIgotbXNnc3RyICImQWxsZSBEYXRlaWVuIgorIzogYXJjaGl2ZS5jOjQ1MSBidWlsdGluL2FyY2hpdmUuYzo5MQorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICJBcmNoaXYgdm9tIFJlbW90ZS1SZXBvc2l0b3J5IDxSZXBvc2l0b3J5PiBhYnJ1ZmVuIgogCi0jOiBnaXRrOjIwODMgZ2l0azo0MDY3Ci1tc2dpZCAiJlZpZXciCi1tc2dzdHIgIiZBbnNpY2h0IgorIzogYXJjaGl2ZS5jOjQ1MiBidWlsdGluL2FyY2hpdmUuYzo5MiBidWlsdGluL25vdGVzLmM6NDc5Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAiUHJvZ3JhbW0iCiAKLSM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCi1tc2dpZCAiJkFib3V0IGdpdGsiCi1tc2dzdHIgIsOcYmVyICZnaXRrIgorIzogYXJjaGl2ZS5jOjQ1MyBidWlsdGluL2FyY2hpdmUuYzo5MworbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAiUGZhZCB6dW0gZXh0ZXJuZW4gXCJnaXQtdXBsb2FkLWFyY2hpdmVcIi1Qcm9ncmFtbSIKIAotIzogZ2l0azoyMDk0IGdpdGs6MjEwOAotbXNnaWQgIiZLZXkgYmluZGluZ3MiCi1tc2dzdHIgIiZUYXN0ZW5rw7xyemVsIgorIzogYXR0ci5jOjI2NQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorIlZlcm5laW5lbmRlIE11c3RlciB3ZXJkZW4gaW4gR2l0LUF0dHJpYnV0ZW4gaWdub3JpZXJ0LlxuIgorIkJlbnV0emVuIFNpZSAnXFwhJyBmw7xyIGbDvGhyZW5kZSBBdXNydWZlemVpY2hlbi4iCiAKLSM6IGdpdGs6MjA5MiBnaXRrOjIxMDcKLW1zZ2lkICImSGVscCIKLW1zZ3N0ciAiJkhpbGZlIgorIzogYnJhbmNoLmM6NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICJCcmFuY2ggJXMga2FubiBuaWNodCBzZWluIGVpZ2VuZXIgVXBzdHJlYW0tQnJhbmNoIHNlaW4uIgogCi0jOiBnaXRrOjIxODUgZ2l0azo4NjUyCi1tc2dpZCAiU0hBMSBJRDoiCi1tc2dzdHIgIlNIQTEgSUQ6IgorIzogYnJhbmNoLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiQnJhbmNoICVzIGtvbmZpZ3VyaWVydCB6dW0gRm9sZ2VuIHZvbiBSZW1vdGUtQnJhbmNoICVzIHZvbiAlcyBkdXJjaCBSZWJhc2UuIgogCi0jOiBnaXRrOjIyMjkKLW1zZ2lkICJSb3ciCi1tc2dzdHIgIlplaWxlIgorIzogYnJhbmNoLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMuIgorbXNnc3RyICJCcmFuY2ggJXMga29uZmlndXJpZXJ0IHp1bSBGb2xnZW4gdm9uIFJlbW90ZS1CcmFuY2ggJXMgdm9uICVzLiIKIAotIzogZ2l0azoyMjY3Ci1tc2dpZCAiRmluZCIKLW1zZ3N0ciAiU3VjaGUiCisjOiBicmFuY2guYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAlcyBieSByZWJhc2luZy4iCittc2dzdHIgIkJyYW5jaCAlcyBrb25maWd1cmllcnQgenVtIEZvbGdlbiB2b24gbG9rYWxlbSBCcmFuY2ggJXMgZHVyY2ggUmViYXNlLiIKIAotIzogZ2l0azoyMjk1CisjOiBicmFuY2guYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAlcy4iCittc2dzdHIgIkJyYW5jaCAlcyBrb25maWd1cmllcnQgenVtIEZvbGdlbiB2b24gbG9rYWxlbSBCcmFuY2ggJXMuIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICJCcmFuY2ggJXMga29uZmlndXJpZXJ0IHp1bSBGb2xnZW4gdm9uIFJlbW90ZS1SZWZlcmVueiAlcyBkdXJjaCBSZWJhc2UuIgorCisjOiBicmFuY2guYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJXMuIgorbXNnc3RyICJCcmFuY2ggJXMga29uZmlndXJpZXJ0IHp1bSBGb2xnZW4gdm9uIFJlbW90ZS1SZWZlcmVueiAlcy4iCisKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkJyYW5jaCAlcyBrb25maWd1cmllcnQgenVtIEZvbGdlbiB2b24gbG9rYWxlciBSZWZlcmVueiAlcyBkdXJjaCBSZWJhc2UuIgorCisjOiBicmFuY2guYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJXMuIgorbXNnc3RyICJCcmFuY2ggJXMga29uZmlndXJpZXJ0IHp1bSBGb2xnZW4gdm9uIGxva2FsZXIgUmVmZXJlbnogJXMuIgorCisjOiBicmFuY2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiIgorIktvbmZpZ3VyYXRpb24genVtIEZvbGdlbiB2b24gQnJhbmNoIG5pY2h0IGVpbmdlcmljaHRldC4gUmVmZXJlbnogJXMgaXN0ICIKKyJtZWhyZGV1dGlnLiIKKworIzogYnJhbmNoLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIgorbXNnc3RyICInJXMnIGlzdCBrZWluIGfDvGx0aWdlciBCcmFuY2huYW1lLiIKKworIzogYnJhbmNoLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJCcmFuY2ggJyVzJyBleGlzdGllcnQgYmVyZWl0cy4iCisKKyM6IGJyYW5jaC5jOjE3NQorbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2FubiBBa3R1YWxpc2llcnVuZyBkZXMgYWt0dWVsbGVuIEJyYW5jaGVzIG5pY2h0IGVyendpbmdlbi4iCisKKyM6IGJyYW5jaC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAiIgorIkthbm4gVHJhY2tpbmctSW5mb3JtYXRpb25lbiBuaWNodCBlaW5yaWNodGVuOyBTdGFydHB1bmt0ICclcycgaXN0IGtlaW4gIgorIkJyYW5jaC4iCisKKyM6IGJyYW5jaC5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJkZXIgYW5nZWZvcmRlcnRlIFVwc3RyZWFtLUJyYW5jaCAnJXMnIGV4aXN0aWVydCBuaWNodCIKKworIzogYnJhbmNoLmM6MTk5Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgorbXNnc3RyICIiCisiXG4iCisiRmFsbHMgU2llIHZvcmhhYmVuLCBJaHJlIEFyYmVpdCBhdWYgZWluZW0gYmVyZWl0cyBleGlzdGllcmVuZGVuXG4iCisiVXBzdHJlYW0tQnJhbmNoIGF1Znp1YmF1ZW4sIHNvbGx0ZW4gU2llIFwiZ2l0IGZldGNoXCJcbiIKKyJhdXNmw7xocmVuLCB1bSBkaWVzZW4gYWJ6dXJ1ZmVuLlxuIgorIlxuIgorIkZhbGxzIFNpZSB2b3JoYWJlbiwgZWluZW4gbmV1ZW4gbG9rYWxlbiBCcmFuY2ggenUgdmVyc2VuZGVuXG4iCisiZGVyIHNlaW5lbSBleHRlcm5lbiBHZWdlbnN0w7xjayBmb2xnZW4gc29sbCwga8O2bm5lbiBTaWVcbiIKKyJcImdpdCBwdXNoIC11XCIgdmVyd2VuZGVuLCB1bSBkZW4gVXBzdHJlYW0tQnJhbmNoIGJlaW0gXCJwdXNoXCJcbiIKKyJ6dSBrb25maWd1cmllcmVuLiIKKworIzogYnJhbmNoLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgT2JqZWt0LU5hbWU6ICclcyciCisKKyM6IGJyYW5jaC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJtZWhyZGV1dGlnZXIgT2JqZWt0LU5hbWU6ICclcyciCisKKyM6IGJyYW5jaC5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICJVbmfDvGx0aWdlciBCcmFuY2hwdW5rdDogJyVzJyIKKworIzogYnJhbmNoLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICInJXMnIGlzdCBiZXJlaXRzIGluICclcycgYXVzZ2VjaGVja3QiCisKKyM6IGJ1bmRsZS5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIiclcycgc2llaHQgbmljaHQgd2llIGVpbmUgdjIgUGFrZXRkYXRlaSBhdXMiCisKKyM6IGJ1bmRsZS5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVyIEtvcGZiZXJlaWNoOiAlcyVzICglZCkiCisKKyM6IGJ1bmRsZS5jOjg3IGJ1aWx0aW4vY29tbWl0LmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1bmRsZS5jOjEzOQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICJEZW0gUmVwb3NpdG9yeSBmZWhsZW4gZm9sZ2VuZGUgdm9yYXVzZ2VzZXR6dGUgQ29tbWl0czoiCisKKyM6IGJ1bmRsZS5jOjE2MyBzZXF1ZW5jZXIuYzo2MzYgc2VxdWVuY2VyLmM6MTA4MyBidWlsdGluL2JsYW1lLmM6MjcwOAorIzogYnVpbHRpbi9icmFuY2guYzo2NTIgYnVpbHRpbi9jb21taXQuYzoxMDQ0IGJ1aWx0aW4vbG9nLmM6MzM0CisjOiBidWlsdGluL2xvZy5jOjg1MCBidWlsdGluL2xvZy5jOjE0NTcgYnVpbHRpbi9sb2cuYzoxNjkwIGJ1aWx0aW4vbWVyZ2UuYzozNTgKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNTgKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAiRWlucmljaHR1bmcgZGVzIFJldmlzaW9uc2dhbmdzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidW5kbGUuYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkRhcyBQYWtldCBlbnRow6RsdCBkaWVzZSBSZWZlcmVuejoiCittc2dzdHJbMV0gIkRhcyBQYWtldCBlbnRow6RsdCBkaWVzZSAlZCBSZWZlcmVuemVuOiIKKworIzogYnVuZGxlLmM6MTkyCittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIkRhcyBQYWtldCBzcGVpY2hlcnQgZWluZSBrb21wbGV0dGUgSGlzdG9yaWUuIgorCisjOiBidW5kbGUuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkRhcyBQYWtldCBiZW7DtnRpZ3QgZGllc2UgUmVmZXJlbno6IgorbXNnc3RyWzFdICJEYXMgUGFrZXQgYmVuw7Z0aWd0IGRpZXNlICVkIFJlZmVyZW56ZW46IgorCisjOiBidW5kbGUuYzoyNTMKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICJLb25udGUgUGFrZXRvYmpla3RlIG5pY2h0IGVyc3RlbGxlbiIKKworIzogYnVuZGxlLmM6MjY0Cittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgIkVyc3RlbGx1bmcgZGVyIFBha2V0b2JqZWt0ZSBhYmdlYnJvY2hlbiIKKworIzogYnVuZGxlLmM6MzA0Cittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAiXCJyZXYtbGlzdFwiIGFiZ2Vicm9jaGVuIgorCisjOiBidW5kbGUuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgIlJlZmVyZW56ICclcycgd2lyZCBkdXJjaCBcInJldi1saXN0XCIgT3B0aW9uZW4gYXVzZ2VzY2hsb3NzZW4iCisKKyM6IGJ1bmRsZS5jOjQ0MyBidWlsdGluL2xvZy5jOjE1NyBidWlsdGluL2xvZy5jOjEzNjcgYnVpbHRpbi9zaG9ydGxvZy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJuaWNodCBlcmthbm50ZXMgQXJndW1lbnQ6ICVzIgorCisjOiBidW5kbGUuYzo0NDkKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAiRXJzdGVsbHVuZyBlaW5lcyBsZWVyZW4gUGFrZXRzIHp1csO8Y2tnZXdpZXNlbi4iCisKKyM6IGJ1bmRsZS5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgImthbm4gJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1bmRsZS5jOjQ4MAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiRXJzdGVsbHVuZyBkZXIgUGFrZXRpbmRleGRhdGVpIGFiZ2Vicm9jaGVuIgorCisjOiBjb2xvci5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICJVbmfDvGx0aWdlciBGYXJid2VydDogJS4qcyIKKworIzogY29tbWl0LmM6NDAgYnVpbHRpbi9hbS5jOjQ1MSBidWlsdGluL2FtLmM6NDg3IGJ1aWx0aW4vYW0uYzoxNTE2CisjOiBidWlsdGluL2FtLmM6MjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgJXMiCittc2dzdHIgImtvbm50ZSAlcyBuaWNodCBwYXJzZW4iCisKKyM6IGNvbW1pdC5jOjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIGlzdCBrZWluIENvbW1pdCEiCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiU3BlaWNoZXIgdmVyYnJhdWNodCIKKworIzogY29uZmlnLmM6NDc0IGNvbmZpZy5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIGZpbGUgbGluZSAlZCBpbiAlcyIKK21zZ3N0ciAiWmVpbGUgJWQgaW4gS29uZmlndXJhdGlvbnNkYXRlaSAlcyBpc3QgdW5nw7xsdGlnLiIKKworIzogY29uZmlnLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgbnVtZXJpc2NoZXIgV2VydCAnJXMnIGbDvHIgS29uZmlndXJhdGlvbiAnJXMnIGluICVzOiAlcyIKKworIzogY29uZmlnLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgbnVtZXJpc2NoZXIgV2VydCAnJXMnIGbDvHIgS29uZmlndXJhdGlvbiAnJXMnOiAlcyIKKworIzogY29uZmlnLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEVyd2VpdGVybiBkZXMgTnV0emVydmVyemVpY2huaXNzZXMgaW46ICclcyciCisKKyM6IGNvbmZpZy5jOjc1NyBjb25maWcuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgInVuZ8O8bHRpZ2VyIHpsaWIgS29tcHJpbWllcnVuZ3NncmFkICVkIgorCisjOiBjb25maWcuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBNb2R1cyBmw7xyIE9iamVrdGVyc3RlbGx1bmc6ICVzIgorCisjOiBjb25maWcuYzoxMjE2Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIiIKKyJLb25udGUgZGllIMO8YmVyIGRpZSBLb21tYW5kb3plaWxlIGFuZ2VnZWJlbmUgS29uZmlndXJhdGlvbiBuaWNodCBwYXJzZW4uIgorCisjOiBjb25maWcuYzoxMjc3Cittc2dpZCAidW5rbm93biBlcnJvciBvY2N1cmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgIiIKKyJFcyB0cmF0IGVpbiB1bmJla2FubnRlciBGZWhsZXIgYmVpbSBMZXNlbiBkZXIgS29uZmlndXJhdGlvbnNkYXRlaWVuIGF1Zi4iCisKKyM6IGNvbmZpZy5jOjE2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICIiCisiS29ubnRlIFdlcnQgJyVzJyBhdXMgZGVyIMO8YmVyIGRpZSBLb21tYW5kb3plaWxlIGFuZ2VnZWJlbmVuXG4iCisiS29uZmlndXJhdGlvbiBuaWNodCBwYXJzZW4uIgorCisjOiBjb25maWcuYzoxNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyBpbiBmaWxlICclcycgYXQgbGluZSAlZCIKK21zZ3N0ciAidW5nw7xsdGlnZSBLb25maWd1cmF0aW9uc3ZhcmlhYmxlICclcycgaW4gRGF0ZWkgJyVzJyBiZWkgWmVpbGUgJWQiCisKKyM6IGNvbmZpZy5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMgaGF0IG1laHJlcmUgV2VydGUiCisKKyM6IGNvbm5lY3RlZC5jOjY5Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiS29ubnRlICdnaXQgcmV2LWxpc3QnIG5pY2h0IGF1c2bDvGhyZW4iCisKKyM6IGNvbm5lY3RlZC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdDogJXMiCittc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBuYWNoIHJldi1saXN0OiAlcyIKKworIzogY29ubmVjdGVkLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW46ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hsaWXDn2VuIHZvbiByZXYtbGlzdCdzIFN0YW5kYXJkLUVpbmdhYmU6ICVzIgorCisjOiBkYXRlLmM6OTUKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJpbiBkZXIgWnVrdW5mdCIKKworIzogZGF0ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICJ2b3IgJWx1IFNla3VuZGUiCittc2dzdHJbMV0gInZvciAlbHUgU2VrdW5kZW4iCisKKyM6IGRhdGUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAidm9yICVsdSBNaW51dGUiCittc2dzdHJbMV0gInZvciAlbHUgTWludXRlbiIKKworIzogZGF0ZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBob3VycyBhZ28iCittc2dzdHJbMF0gInZvciAlbHUgU3R1bmRlIgorbXNnc3RyWzFdICJ2b3IgJWx1IFN0dW5kZW4iCisKKyM6IGRhdGUuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBkYXlzIGFnbyIKK21zZ3N0clswXSAidm9yICVsdSBUYWciCittc2dzdHJbMV0gInZvciAlbHUgVGFnZW4iCisKKyM6IGRhdGUuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHdlZWsgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgd2Vla3MgYWdvIgorbXNnc3RyWzBdICJ2b3IgJWx1IFdvY2hlIgorbXNnc3RyWzFdICJ2b3IgJWx1IFdvY2hlbiIKKworIzogZGF0ZS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgbW9udGhzIGFnbyIKK21zZ3N0clswXSAidm9yICVsdSBNb25hdCIKK21zZ3N0clsxXSAidm9yICVsdSBNb25hdGVuIgorCisjOiBkYXRlLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMiCittc2dzdHJbMF0gInZvciAlbHUgSmFociIKK21zZ3N0clsxXSAidm9yICVsdSBKYWhyZW4iCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzLCB1bmQgJWx1IE1vbmF0IgorbXNnc3RyWzFdICIlcywgdW5kICVsdSBNb25hdGVuIgorCisjOiBkYXRlLmM6MTU0IGRhdGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMgYWdvIgorbXNnc3RyWzBdICJ2b3IgJWx1IEphaHIiCittc2dzdHJbMV0gInZvciAlbHUgSmFocmVuIgorCisjOiBkaWZmY29yZS1vcmRlci5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkIG9yZGVyZmlsZSAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMZXNlbiBkZXIgUmVpaGVuZm9sZ2VkYXRlaSAnJXMnLiIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTM2Cittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIkbDvGhyZSBFcmtlbm51bmcgZsO8ciB1bmdlbmF1ZSBVbWJlbmVubnVuZyBhdXMiCisKKyM6IGRpZmYuYzoxMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyVzJ1xuIgorbXNnc3RyICIiCisiICBGZWhsZXIgYmVpbSBQYXJzZW4gZGVzIGFiZ2VzY2huaXR0ZW5lbiBcImRpcnN0YXRcIiBQcm96ZW50c2F0emVzICclcydcbiIKKworIzogZGlmZi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIFVuYmVrYW5udGVyIFwiZGlyc3RhdFwiIFBhcmFtZXRlciAnJXMnXG4iCisKKyM6IGRpZmYuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIlVuYmVrYW5udGVyIFdlcnQgaW4gS29uZmlndXJhdGlvbnN2YXJpYWJsZSAnZGlmZi5kaXJzdGF0JzogJyVzJyIKKworIzogZGlmZi5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkZlaGxlciBpbiAnZGlmZi5kaXJzdGF0JyBLb25maWd1cmF0aW9uc3ZhcmlhYmxlIGdlZnVuZGVuOlxuIgorIiVzIgorCisjOiBkaWZmLmM6Mjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICJleHRlcm5lcyBEaWZmLVByb2dyYW1tIHVuZXJ3YXJ0ZXQgYmVlbmRldCwgYW5nZWhhbHRlbiBiZWkgJXMiCisKKyM6IGRpZmYuYzozMzk0Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IGVyZm9yZGVydCBnZW5hdSBlaW5lIFBmYWRzcGV6aWZpa2F0aW9uIgorCisjOiBkaWZmLmM6MzU1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisiRmVobGVyIGJlaW0gUGFyc2VuIGRlcyAtLWRpcnN0YXQvLVggT3B0aW9uc3BhcmFtZXRlcnM6XG4iCisiJXMiCisKKyM6IGRpZmYuYzozNTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSAtLXN1Ym1vZHVsZSBvcHRpb24gcGFyYW1ldGVyOiAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBQYXJzZW4gZGVzIC0tc3VibW9kdWxlIE9wdGlvbnNwYXJhbWV0ZXJzOiAnJXMnIgorCisjOiBkaXIuYzoxODUzCittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgIkZlaGxlciBiZWltIFNhbW1lbG4gdm9uIE5hbWVuIHVuZCBJbmZvcm1hdGlvbmVuIHp1bSBLZXJuZWwiCisKKyM6IGRpci5jOjE5MzYKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0uIgorbXNnc3RyICJDYWNoZSBmw7xyIHVudmVyc2lvbmllcnRlIERhdGVpZW4gaXN0IGF1ZiBkaWVzZW0gU3lzdGVtIGRlYWt0aXZpZXJ0LiIKKworIzogZ3BnLWludGVyZmFjZS5jOjE2NiBncGctaW50ZXJmYWNlLmM6MjM3Cittc2dpZCAiY291bGQgbm90IHJ1biBncGcuIgorbXNnc3RyICJrb25udGUgZ3BnIG5pY2h0IGF1c2bDvGhyZW4iCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoxNzgKK21zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCittc2dzdHIgImdwZyBoYXQgZGllIERhdGVuIG5pY2h0IGFremVwdGllcnQiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoxODkKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyBiZWltIFNpZ25pZXJlbiBkZXIgRGF0ZW4gZmVobGdlc2NobGFnZW4iCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAia29ubnRlIHRlbXBvcsOkcmUgRGF0ZWkgJyVzJyBuaWNodCBlcnN0ZWxsZW46ICVzIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2NocmVpYmVuIGRlciBTaWduYXR1ciBuYWNoICclcyc6ICVzIgorCisjOiBncmVwLmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJzoga29ubnRlIG5pY2h0IGxlc2VuICVzIgorCisjOiBncmVwLmM6MTczNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiAlcyIKK21zZ3N0ciAiJyVzJzogJXMiCisKKyM6IGdyZXAuYzoxNzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQgJXMiCittc2dzdHIgIiclcyc6IHJlYWQoKSB6dSBrdXJ6ICVzIgorCisjOiBoZWxwLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiVm9yaGFuZGVuZSBHaXQtS29tbWFuZG9zIGluICclcyciCisKKyM6IGhlbHAuYzoyMTQKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgIlZvcmhhbmRlbmUgR2l0LUtvbW1hbmRvcyBhbmRlcnN3byBpbiBJaHJlbSAkUEFUSCIKKworIzogaGVscC5jOjI0NgorbXNnaWQgIlRoZXNlIGFyZSBjb21tb24gR2l0IGNvbW1hbmRzIHVzZWQgaW4gdmFyaW91cyBzaXR1YXRpb25zOiIKK21zZ3N0ciAiQWxsZ2VtZWluZSBHaXQtS29tbWFuZG9zLCB2ZXJ3ZW5kZXQgaW4gdmVyc2NoaWVkZW5lbiBTaXR1YXRpb25lbjoiCisKKyM6IGhlbHAuYzozMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisiJyVzJyBzY2hlaW50IGVpbiBnaXQtS29tbWFuZG8genUgc2Vpbiwga29ubnRlIGFiZXJcbiIKKyJuaWNodCBhdXNnZWbDvGhydCB3ZXJkZW4uIFZpZWxsZWljaHQgaXN0IGdpdC0lcyBmZWhsZXJoYWZ0PyIKKworIzogaGVscC5jOjM2OAorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICJVaCBvaC4gS2VpbmUgR2l0LUtvbW1hbmRvcyBhdWYgSWhyZW0gU3lzdGVtIHZvcmhhbmRlbi4iCisKKyM6IGhlbHAuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC5cbiIKKyJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcyciCittc2dzdHIgIiIKKyJXYXJudW5nOiBTaWUgaGFiZW4gZGFzIG5pY2h0IGV4aXN0aWVyZW5kZSBHaXQtS29tbWFuZG8gJyVzJyBhdXNnZWbDvGhydC5cbiIKKyJTZXR6ZSBmb3J0IHVudGVyIGRlciBBbm5haG1lLCBkYXNzIFNpZSAnJXMnIGdlbWVpbnQgaGFiZW4uIgorCisjOiBoZWxwLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluICUwLjFmIHNlY29uZHMgYXV0b21hdGljYWxseS4uLiIKK21zZ3N0ciAiQXV0b21hdGlzY2hlIEF1c2bDvGhydW5nIGluICUwLjFmIFNla3VuZGVuIC4uLiIKKworIzogaGVscC5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6ICclcycgaXN0IGtlaW4gR2l0LUtvbW1hbmRvLiBTaWVoZSAnZ2l0IC0taGVscCcuIgorCisjOiBoZWxwLmM6NDA2IGhlbHAuYzo0NjYKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKKyJcbiIKKyJIYWJlbiBTaWUgZGFzIGdlbWVpbnQ/IgorbXNnc3RyWzFdICIiCisiXG4iCisiSGFiZW4gU2llIGVpbmVzIHZvbiBkaWVzZW4gZ2VtZWludD8iCisKKyM6IGhlbHAuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIC0gJXMiCittc2dzdHIgIiVzOiAlcyAtICVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICJMZXNlbiBkZXMgWndpc2NoZW5zcGVpY2hlcnMgZmVobGdlc2NobGFnZW4iCisKKyM6IG1lcmdlLmM6OTQgYnVpbHRpbi9hbS5jOjIwMDEgYnVpbHRpbi9hbS5jOjIwMzYgYnVpbHRpbi9jaGVja291dC5jOjM3NQorIzogYnVpbHRpbi9jaGVja291dC5jOjU4NiBidWlsdGluL2Nsb25lLmM6NzE1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgbmV1ZSBJbmRleC1EYXRlaSBuaWNodCBzY2hyZWliZW4uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIih1bmfDvGx0aWdlciBDb21taXQpXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmZvX2NhY2hlIGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJhZGRpbmZvX2NhY2hlIGbDvHIgUGZhZCAnJXMnIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNzAKK21zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlciBcIlRyZWVcIi1PYmpla3RlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoICclcyclcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJzdGVsbGVuIGRlcyBQZmFkZXMgJyVzJyVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiRW50ZmVybmUgJXMsIHVtIFBsYXR6IGbDvHIgVW50ZXJ2ZXJ6ZWljaG5pcyB6dSBzY2hhZmZlblxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3MTIgbWVyZ2UtcmVjdXJzaXZlLmM6NzMzCittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiB2aWVsbGVpY2h0IGVpbiBWZXJ6ZWljaG5pcy9EYXRlaS1Lb25mbGlrdD8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciCittc2dzdHIgInZlcndlaWdlcmUsIGRhIHVudmVyc2lvbmllcnRlIERhdGVpZW4gaW4gJyVzJyB2ZXJsb3JlbiBnZWhlbiB3w7xyZGVuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgImthbm4gT2JqZWt0ICVzICclcycgbmljaHQgbGVzZW4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICJCbG9iIGVyd2FydGV0IGbDvHIgJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzg4IGJ1aWx0aW4vY2xvbmUuYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gw5ZmZm5lbiB2b24gJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBlaW5lciBzeW1ib2xpc2NoZW4gVmVya27DvHBmdW5nIGbDvHIgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIndlacOfIG5pY2h0IHdhcyBtaXQgJTA2byAlcyAnJXMnIHp1IG1hY2hlbiBpc3QiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkzNworbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICJGZWhsZXIgYmVpIEF1c2bDvGhydW5nIGRlcyBpbnRlcm5lbiBNZXJnZXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgenVyIERhdGVuYmFuayBoaW56dWbDvGdlbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTU3Cittc2dpZCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgaW4gdGhlIHRyZWUiCittc2dzdHIgIm5pY2h0IHVudGVyc3TDvHR6dGVyIE9iamVrdHR5cCBpbSBWZXJ6ZWljaG5pcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAzMiBtZXJnZS1yZWN1cnNpdmUuYzoxMDQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZS4iCittc2dzdHIgIiIKKyJLT05GTElLVCAoJXMvbMO2c2NoZW4pOiAlcyBnZWzDtnNjaHQgaW4gJXMgdW5kICVzIGluICVzLiBTdGFuZCAlcyB2b24gJXMgd3VyZGUgIgorImltIEFyYmVpdHNiZXJlaWNoIGdlbGFzc2VuLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAzOCBtZXJnZS1yZWN1cnNpdmUuYzoxMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJLT05GTElLVCAoJXMvbMO2c2NoZW4pOiAlcyBnZWzDtnNjaHQgaW4gJXMgdW5kICVzIGluICVzLiBTdGFuZCAlcyB2b24gJXMgd3VyZGUgIgorImltIEFyYmVpdHNiZXJlaWNoIGJlaSAlcyBnZWxhc3Nlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwOTIKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgInVtYmVuZW5uZW4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwOTIKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICJ1bWJlbmFubnQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIGlzdCBlaW4gVmVyemVpY2huaXMgaW4gJXMsIGbDvGdlIGVzIHN0YXR0ZGVzc2VuIGFscyAlcyBoaW56dSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKHVtYmVuZW5uZW4vdW1iZW5lbm5lbik6IEJlbmVubmUgdW0gXCIlc1wiLT5cIiVzXCIgaW4gQnJhbmNoIFwiJXNcIiAiCisidW5kIFwiJXNcIi0+XCIlc1wiIGluIEJyYW5jaCBcIiVzXCIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE3NQorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIChibGVpYnQgdW5hdWZnZWzDtnN0KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAodW1iZW5lbm5lbi91bWJlbmVubmVuKTogQmVuZW5uZSB1bSAlcy0+JXMgaW4gJXMuIEJlbmVubmUgdW0gJXMtPiVzICIKKyJpbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIKK21zZ3N0ciAiQmVuZW5uZSBzdGF0dGRlc3NlbiAlcyBuYWNoICVzIHVuZCAlcyBuYWNoICVzIHVtIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gJXMgYWRkZWQgaW4gJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAodW1iZW5lbm5lbi9oaW56dWbDvGdlbik6IEJlbmVubmUgdW0gJXMtPiVzIGluICVzLiAlcyBoaW56dWdlZsO8Z3QgaW4gIgorIiVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBtZXJnZWQgJXMiCittc2dzdHIgIkbDvGdlIHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpICVzIGhpbnp1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDczIG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIkbDvGdlIHN0YXR0ZGVzc2VuIGFscyAlcyBoaW56dSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgImthbm4gT2JqZWt0ICVzIG5pY2h0IGxlc2VuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICJPYmpla3QgJXMgaXN0IGtlaW4gQmxvYiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NQorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAiw6RuZGVybiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NQorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICJnZcOkbmRlcnQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODUKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICJJbmhhbHQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1OTIKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICJoaW56dWbDvGdlbi9oaW56dWbDvGdlbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIiVzIGF1c2dlbGFzc2VuIChFcmdlYm5pcyBkZXMgTWVyZ2VzIGV4aXN0aWVydCBiZXJlaXRzKSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvLW1lcmdpbmcgJXMiCittc2dzdHIgImF1dG9tYXRpc2NoZXIgTWVyZ2Ugdm9uICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQ0IGdpdC1zdWJtb2R1bGUuc2g6MTE1MAorbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAiU3VibW9kdWwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIktPTkZMSUtUICglcyk6IE1lcmdlLUtvbmZsaWt0IGluICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIgorbXNnc3RyICJFbnRmZXJuZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc1NgorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICJEYXRlaS9WZXJ6ZWljaG5pcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2MgorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICJWZXJ6ZWljaG5pcy9EYXRlaSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2NworIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIktPTkZMSUtUICglcyk6IEVzIGV4aXN0aWVydCBiZXJlaXRzIGVpbiBWZXJ6ZWljaG5pcyAlcyBpbiAlcy4gRsO8Z2UgJXMgYWxzICVzICIKKyJoaW56dS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICJGw7xnZSAlcyBoaW56dSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc5NAorbXNnaWQgIkZhdGFsIG1lcmdlIGZhaWx1cmUsIHNob3VsZG4ndCBoYXBwZW4uIgorbXNnc3RyICJGYXRhbGVyIE1lcmdlLUZlaGxlci4gU29sbHRlIG5pY2h0IHBhc3NpZXJlbi4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MTMKK21zZ2lkICJBbHJlYWR5IHVwLXRvLWRhdGUhIgorbXNnc3RyICJCZXJlaXRzIGFrdHVlbGwhIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAiWnVzYW1tZW5mw7xocmVuIGRlciBcIlRyZWVcIi1PYmpla3RlICVzIHVuZCAlcyBmZWhsZ2VzY2hsYWdlbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnByb2Nlc3NlZCBwYXRoPz8/ICVzIgorbXNnc3RyICJ1bnZlcmFyYmVpdGV0ZXIgUGZhZD8/PyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkwMAorbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICJNZXJnZToiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gIiV1IGdlbWVpbnNhbWVuIFZvcmfDpG5nZXItQ29tbWl0IGdlZnVuZGVuIgorbXNnc3RyWzFdICIldSBnZW1laW5zYW1lIFZvcmfDpG5nZXItQ29tbWl0cyBnZWZ1bmRlbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTk1MAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAiTWVyZ2UgaGF0IGtlaW5lbiBDb21taXQgenVyw7xja2dlZ2ViZW4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJLb25udGUgT2JqZWt0ICclcycgbmljaHQgcGFyc2VuLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjAxOCBidWlsdGluL21lcmdlLmM6NjQ1Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiS29ubnRlIEluZGV4IG5pY2h0IHNjaHJlaWJlbi4iCisKKyM6IG5vdGVzLXV0aWxzLmM6NDEKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKyJLYW5uIHVuaW5pdGlhbGlzaWVydGVzL3VucmVmZXJlbnppZXJ0ZSBOb3Rpei1WZXJ6ZWljaG5pcyBuaWNodCBjb21taXR0ZW4uIgorCisjOiBub3Rlcy11dGlscy5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyIG5vdGVzLnJld3JpdGVNb2RlIFdlcnQ6ICclcyciCisKKyM6IG5vdGVzLXV0aWxzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICIiCisiVW1zY2hyZWliZW4gZGVyIE5vdGl6ZW4gaW4gJXMgenVyw7xja2dld2llc2VuIChhdcOfZXJoYWxiIHZvbiByZWZzL25vdGVzLykiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgdGhlCisjLiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcyBpdHMgdmFsdWUKKyM6IG5vdGVzLXV0aWxzLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgJXMgV2VydDogJyVzJyIKKworIzogb2JqZWN0LmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICJLb25udGUgT2JqZWt0ICclcycgbmljaHQgcGFyc2VuLiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjU2MworbXNnaWQgIi4uLiIKK21zZ3N0ciAiLi4uIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAiVmVyd2VuZHVuZzogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbgorIzogcGFyc2Utb3B0aW9ucy5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIiAgICAgIG9kZXI6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NjIyCittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLU5VTSIKKworIzogcGF0aHNwZWMuYzoxMzMKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisiR2xvYmFsZSBFaW5zdGVsbHVuZ2VuIHp1ciBQZmFkc3BlemlmaWthdGlvbiAnZ2xvYicgdW5kICdub2dsb2InIHNpbmQgIgorImlua29tcGF0aWJlbC4iCisKKyM6IHBhdGhzcGVjLmM6MTQzCittc2dpZCAiIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKK21zZ3N0ciAiIgorIkdsb2JhbGUgRWluc3RlbGx1bmcgenVyIFBmYWRzcGV6aWZpa2F0aW9uICdsaXRlcmFsJyBpc3QgaW5rb21wYXRpYmVsXG4iCisibWl0IGFsbGVuIGFuZGVyZW4gT3B0aW9uZW4uIgorCisjOiBwYXRoc3BlYy5jOjE3NworbXNnaWQgImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIKK21zZ3N0ciAidW5nw7xsdGlnZXIgUGFyYW1ldGVyIGbDvHIgUGZhZHNwZXppZmlrYXRpb25zYW5nYWJlICdwcmVmaXgnIgorCisjOiBwYXRoc3BlYy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICJ1bmfDvGx0aWdlIFBmYWRzcGV6aWZpa2F0aW9uc2FuZ2FiZSAnJS4qcycgaW4gJyVzJyIKKworIzogcGF0aHNwZWMuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICJGZWhsZW5kZXMgJyknIGFtIEVuZGUgZGVyIFBmYWRzcGV6aWZpa2F0aW9uc2FuZ2FiZSBpbiAnJXMnIgorCisjOiBwYXRoc3BlYy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIKK21zZ3N0ciAibmljaHQgdW50ZXJzdMO8dHp0ZSBQZmFkc3BlemlmaWthdGlvbnNhbmdhYmUgJyVjJyBpbiAnJXMnIgorCisjOiBwYXRoc3BlYy5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiJXM6ICdsaXRlcmFsJyB1bmQgJ2dsb2InIHNpbmQgaW5rb21wYXRpYmVsIgorCisjOiBwYXRoc3BlYy5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzOiAnJXMnIGxpZWd0IGF1w59lcmhhbGIgZGVzIFJlcG9zaXRvcmllcyIKKworIzogcGF0aHNwZWMuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICJQZmFkc3BlemlmaWthdGlvbiAnJXMnIGJlZmluZGV0IHNpY2ggaW4gU3VibW9kdWwgJyUuKnMnIgorCisjOiBwYXRoc3BlYy5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIiCisiJXM6IFBmYWRzcGV6aWZpa2F0aW9uc2FuZ2FiZSB3aXJkIHZvbiBkaWVzZW0gS29tbWFuZG8gbmljaHQgdW50ZXJzdMO8dHp0OiAlcyIKKworIzogcGF0aHNwZWMuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJQZmFkc3BlemlmaWthdGlvbiAnJXMnIGlzdCBoaW50ZXIgZWluZXIgc3ltYm9saXNjaGVuIFZlcmtuw7xwZnVuZyIKKworIzogcGF0aHNwZWMuYzo0NDEKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBleGNsdWRlIGZyb20gYnkgOihleGNsdWRlKSBwYXR0ZXJucy5cbiIKKyJQZXJoYXBzIHlvdSBmb3Jnb3QgdG8gYWRkIGVpdGhlciAnOi8nIG9yICcuJyA/IgorbXNnc3RyICIiCisiOihleGNsdWRlKSBNdXN0ZXIsIGFiZXIga2VpbmUgYW5kZXJlbiBQZmFkc3BlemlmaWthdGlvbmVuIGFuZ2VnZWJlbi5cbiIKKyJWaWVsbGVpY2h0IGhhYmVuIFNpZSB2ZXJnZXNzZW4gZW50d2VkZXIgJzovJyBvZGVyICcuJyBoaW56dXp1ZsO8Z2VuPyIKKworIzogcHJldHR5LmM6OTY5Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAiS29ubnRlIC0tcHJldHR5IEZvcm1hdCBuaWNodCBwYXJzZW4uIgorCisjOiBwcm9ncmVzcy5jOjIzNgorbXNnaWQgImRvbmUiCittc2dzdHIgIkZlcnRpZyIKKworIzogcmVhZC1jYWNoZS5jOjEyOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorImluZGV4LnZlcnNpb24gZ2VzZXR6dCwgYWJlciBXZXJ0IHVuZ8O8bHRpZy5cbiIKKyJWZXJ3ZW5kZSBWZXJzaW9uICVpIgorCisjOiByZWFkLWNhY2hlLmM6MTMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIGdlc2V0enQsIGFiZXIgV2VydCB1bmfDvGx0aWcuXG4iCisiVmVyd2VuZGUgVmVyc2lvbiAlaSIKKworIzogcmVmcy5jOjI5NDEgYnVpbHRpbi9tZXJnZS5jOjc2MCBidWlsdGluL21lcmdlLmM6ODcxIGJ1aWx0aW4vbWVyZ2UuYzo5NzMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgenVtIFNjaHJlaWJlbiDDtmZmbmVuLiIKKworIzogcmVmcy5jOjMwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICJLb25udGUgUmVmZXJlbnogJXMgbmljaHQgZW50ZmVybmVuOiAlcyIKKworIzogcmVmcy5jOjMwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAiS29ubnRlIFJlZmVyZW56ZW4gbmljaHQgZW50ZmVybmVuOiAlcyIKKworIzogcmVmcy5jOjMwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgIktvbm50ZSBSZWZlcmVueiAlcyBuaWNodCBsw7ZzY2hlbiIKKworIzogcmVmLWZpbHRlci5jOjY2MAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQiCittc2dzdHIgIktvbm50ZSBGb3JtYXQgbmljaHQgcGFyc2VuLiIKKworIzogcmVtb3RlLmM6NzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAiS2FubiAnZmV0Y2gnIG5pY2h0IGbDvHIgc293b2hsICVzIGFscyBhdWNoICVzIG5hY2ggJXMgYXVzZsO8aHJlbi4iCisKKyM6IHJlbW90ZS5jOjc5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIgorbXNnc3RyICIlcyBmb2xndCDDvGJsaWNoZXJ3ZWlzZSAlcywgbmljaHQgJXMiCisKKyM6IHJlbW90ZS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiVzIGZvbGd0IHNvd29obCAlcyBhbHMgYXVjaCAlcyIKKworIzogcmVtb3RlLmM6ODA4Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIkludGVybmVyIEZlaGxlciIKKworIzogcmVtb3RlLmM6MTcyMyByZW1vdGUuYzoxNzY2Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCB6ZWlndCBhdWYga2VpbmVuIEJyYW5jaCIKKworIzogcmVtb3RlLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAiS2VpbiBzb2xjaGVyIEJyYW5jaDogJyVzJyIKKworIzogcmVtb3RlLmM6MTczNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiS2VpbiBVcHN0cmVhbS1CcmFuY2ggZsO8ciBCcmFuY2ggJyVzJyBrb25maWd1cmllcnQuIgorCisjOiByZW1vdGUuYzoxNzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICJVcHN0cmVhbS1CcmFuY2ggJyVzJyBuaWNodCBhbHMgUmVtb3RlLVRyYWNraW5nLUJyYW5jaCBnZXNwZWljaGVydCIKKworIzogcmVtb3RlLmM6MTc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIGRlc3RpbmF0aW9uICclcycgb24gcmVtb3RlICclcycgaGFzIG5vIGxvY2FsIHRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorIlppZWwgZsO8ciBcInB1c2hcIiAnJXMnIGF1ZiBSZW1vdGUtUmVwb3NpdG9yeSAnJXMnIGhhdCBrZWluZW4gbG9rYWwgZ2Vmb2xndGVuICIKKyJCcmFuY2giCisKKyM6IHJlbW90ZS5jOjE3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgaGFzIG5vIHJlbW90ZSBmb3IgcHVzaGluZyIKK21zZ3N0ciAiQnJhbmNoICclcycgaGF0IGtlaW5lbiBVcHN0cmVhbS1CcmFuY2ggZ2VzZXR6dCIKKworIzogcmVtb3RlLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgIlB1c2gtUmVmc3BlY3MgZsO8ciAnJXMnIGJlaW5oYWx0ZW4gbmljaHQgJyVzJyIKKworIzogcmVtb3RlLmM6MTc5NQorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAia2VpbiBaaWVsIGbDvHIgXCJwdXNoXCIgKHB1c2guZGVmYXVsdCBpc3QgJ25vdGhpbmcnKSIKKworIzogcmVtb3RlLmM6MTgxNworbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgImthbm4gZWluemVsbmVzIFppZWwgZsO8ciBcInB1c2hcIiBpbSBNb2R1cyAnc2ltcGxlJyBuaWNodCBhdWZsw7ZzZW4iCisKKyM6IHJlbW90ZS5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICIiCisiSWhyIEJyYW5jaCBiYXNpZXJ0IGF1ZiAnJXMnLCBhYmVyIGRlciBVcHN0cmVhbS1CcmFuY2ggd3VyZGUgZW50ZmVybnQuXG4iCisKKyM6IHJlbW90ZS5jOjIxMjgKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgenVtIEJlaGViZW4pXG4iCisKKyM6IHJlbW90ZS5jOjIxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAtdG8tZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIklociBCcmFuY2ggaXN0IGF1ZiBkZW0gc2VsYmVuIFN0YW5kIHdpZSAnJXMnLlxuIgorCisjOiByZW1vdGUuYzoyMTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIklociBCcmFuY2ggaXN0IHZvciAnJXMnIHVtICVkIENvbW1pdC5cbiIKK21zZ3N0clsxXSAiSWhyIEJyYW5jaCBpc3Qgdm9yICclcycgdW0gJWQgQ29tbWl0cy5cbiIKKworIzogcmVtb3RlLmM6MjE0MQorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKGJlbnV0emVuIFNpZSBcImdpdCBwdXNoXCIsIHVtIGxva2FsZSBDb21taXRzIHp1IHB1YmxpemllcmVuKVxuIgorCisjOiByZW1vdGUuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dzdHJbMF0gIiIKKyJJaHIgQnJhbmNoIGlzdCB6dSAnJXMnIHVtICVkIENvbW1pdCBoaW50ZXJoZXIsIHVuZCBrYW5uIHZvcmdlc3B1bHQgd2VyZGVuLlxuIgorbXNnc3RyWzFdICIiCisiSWhyIEJyYW5jaCBpc3QgenUgJyVzJyB1bSAlZCBDb21taXRzIGhpbnRlcmhlciwgdW5kIGthbm4gdm9yZ2VzcHVsdCB3ZXJkZW4uXG4iCisKKyM6IHJlbW90ZS5jOjIxNTIKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBwdWxsXCIsIHVtIElocmVuIGxva2FsZW4gQnJhbmNoIHp1IGFrdHVhbGlzaWVyZW4pXG4iCisKKyM6IHJlbW90ZS5jOjIxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisiSWhyIEJyYW5jaCB1bmQgJyVzJyBzaW5kIGRpdmVyZ2llcnQsXG4iCisidW5kIGhhYmVuIGpld2VpbHMgJWQgdW5kICVkIHVudGVyc2NoaWVkbGljaGUgQ29tbWl0cy5cbiIKK21zZ3N0clsxXSAiIgorIklociBCcmFuY2ggdW5kICclcycgc2luZCBkaXZlcmdpZXJ0LFxuIgorInVuZCBoYWJlbiBqZXdlaWxzICVkIHVuZCAlZCB1bnRlcnNjaGllZGxpY2hlIENvbW1pdHMuXG4iCisKKyM6IHJlbW90ZS5jOjIxNjUKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpXG4iCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgcHVsbFwiLCB1bSBJaHJlbiBCcmFuY2ggbWl0IGRlbSBSZW1vdGUtQnJhbmNoICIKKyJ6dXNhbW1lbnp1ZsO8aHJlbilcbiIKKworIzogcmV2aXNpb24uYzoyMTk4Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAiSWhyIGFrdHVlbGxlciBCcmFuY2ggc2NoZWludCBmZWhsZXJoYWZ0IHp1IHNlaW4uIgorCisjOiByZXZpc2lvbi5jOjIyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICJJaHIgYWt0dWVsbGVyIEJyYW5jaCAnJXMnIGhhdCBub2NoIGtlaW5lIENvbW1pdHMuIgorCisjOiByZXZpc2lvbi5jOjIzOTUKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC0tZmlyc3QtcGFyZW50IHVuZCAtLWJpc2VjdCBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IHJ1bi1jb21tYW5kLmM6ODMKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgIsOWZmZuZW4gdm9uIC9kZXYvbnVsbCBmZWhsZ2VzY2hsYWdlbiIKKworIzogcnVuLWNvbW1hbmQuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXAyKCVkLCVkKSBmYWlsZWQiCittc2dzdHIgImR1cDIoJWQsJWQpIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBzZW5kLXBhY2suYzoyOTUKK21zZ2lkICJmYWlsZWQgdG8gc2lnbiB0aGUgcHVzaCBjZXJ0aWZpY2F0ZSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gU2lnbmllcmVuIGRlcyBcInB1c2hcIi1aZXJ0aWZpa2F0ZXMiCisKKyM6IHNlbmQtcGFjay5jOjQwNAorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorImRpZSBHZWdlbnNlaXRlIHVudGVyc3TDvHR6dCBrZWluZW4gc2lnbmllcnRlbiBWZXJzYW5kIChcIi0tc2lnbmVkIHB1c2hcIikiCisKKyM6IHNlbmQtcGFjay5jOjQwNgorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorImtlaW4gVmVyc2FuZCBkZXMgXCJwdXNoXCItWmVydGlmaWthdGVzLCBkYSBkaWUgR2VnZW5zZWl0ZSBrZWluZW4gc2lnbmllcnRlblxuIgorIlZlcnNhbmQgKFwiLS1zaWduZWQgcHVzaFwiKSB1bnRlcnN0w7x0enQiCisKKyM6IHNlbmQtcGFjay5jOjQxOAorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAiZGllIEdlZ2Vuc2VpdGUgdW50ZXJzdMO8dHp0IGtlaW5lbiBhdG9tYXJlbiBWZXJzYW5kIChcIi0tYXRvbWljIHB1c2hcIikiCisKKyM6IHNlcXVlbmNlci5jOjE4MworbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisibmFjaCBBdWZsw7ZzdW5nIGRlciBLb25mbGlrdGUsIG1hcmtpZXJlbiBTaWUgZGllIGtvcnJpZ2llcnRlbiBQZmFkZVxuIgorIm1pdCAnZ2l0IGFkZCA8UGZhZGU+JyBvZGVyICdnaXQgcm0gPFBmYWRlPiciCisKKyM6IHNlcXVlbmNlci5jOjE4NgorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisibmFjaCBBdWZsw7ZzdW5nIGRlciBLb25mbGlrdGUsIG1hcmtpZXJlbiBTaWUgZGllIGtvcnJpZ2llcnRlbiBQZmFkZVxuIgorIm1pdCAnZ2l0IGFkZCA8UGZhZGU+JyBvZGVyICdnaXQgcm0gPFBmYWRlPid1bmQgdHJhZ2VuIFNpZSBkYXMgRXJnZWJuaXMgbWl0XG4iCisiJ2dpdCBjb21taXQnIGVpbiIKKworIzogc2VxdWVuY2VyLmM6MTk5IHNlcXVlbmNlci5jOjg0MiBzZXF1ZW5jZXIuYzo5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICVzIgorbXNnc3RyICJLb25udGUgbmljaHQgbmFjaCAlcyBzY2hyZWliZW4iCisKKyM6IHNlcXVlbmNlci5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaSBOYWNoYmVyZWl0dW5nIHZvbiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjE3Cittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiIgorIklocmUgbG9rYWxlbiDDhG5kZXJ1bmdlbiB3w7xyZGVuIHZvbiBcImNoZXJyeS1waWNrXCIgw7xiZXJzY2hyaWViZW4gd2VyZGVuLiIKKworIzogc2VxdWVuY2VyLmM6MjE5Cittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHJldmVydC4iCittc2dzdHIgIklocmUgbG9rYWxlbiDDhG5kZXJ1bmdlbiB3w7xyZGVuIHZvbiBcInJldmVydFwiIMO8YmVyc2NocmllYmVuIHdlcmRlbi4iCisKKyM6IHNlcXVlbmNlci5jOjIyMgorbXNnaWQgIkNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiIgorIkNvbW1pdHRlbiBTaWUgSWhyZSDDhG5kZXJ1bmdlbiBvZGVyIGJlbnV0emVuIFNpZSBcInN0YXNoXCIsIHVtIGZvcnR6dWZhaHJlbi4iCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiIG9yICJjaGVycnktcGljayIKKyM6IHNlcXVlbmNlci5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczogS29ubnRlIG5ldWUgSW5kZXgtRGF0ZWkgbmljaHQgc2NocmVpYmVuIgorCisjOiBzZXF1ZW5jZXIuYzozMjcKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIGNvbW1pdFxuIgorbXNnc3RyICJLb25udGUgQ29tbWl0IHZvbiBIRUFEIG5pY2h0IGF1ZmzDtnNlblxuIgorCisjOiBzZXF1ZW5jZXIuYzozNDcKK21zZ2lkICJVbmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWVcbiIKK21zZ3N0ciAiS29ubnRlIENhY2hlLVZlcnplaWNobmlzIG5pY2h0IGFrdHVhbGlzaWVyZW5cbiIKKworIzogc2VxdWVuY2VyLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXNcbiIKK21zZ3N0ciAiS29ubnRlIENvbW1pdCAlcyBuaWNodCBwYXJzZW5cbiIKKworIzogc2VxdWVuY2VyLmM6NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzXG4iCittc2dzdHIgIktvbm50ZSBFbHRlcm4tQ29tbWl0ICVzIG5pY2h0IHBhcnNlblxuIgorCisjOiBzZXF1ZW5jZXIuYzo0NjkKK21zZ2lkICJZb3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICJJaHJlIEluZGV4LURhdGVpIGlzdCBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0LiIKKworIzogc2VxdWVuY2VyLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAiQ29tbWl0ICVzIGlzdCBlaW4gTWVyZ2UsIGFiZXIgZGllIE9wdGlvbiAtbSB3dXJkZSBuaWNodCBhbmdlZ2ViZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIgorbXNnc3RyICJDb21taXQgJXMgaGF0IGtlaW5lbiBFbHRlcm50ZWlsICVkIgorCisjOiBzZXF1ZW5jZXIuYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFpbmxpbmUgd2FzIHNwZWNpZmllZCBidXQgY29tbWl0ICVzIGlzIG5vdCBhIG1lcmdlLiIKK21zZ3N0ciAiSGF1cHRsaW5pZSB3dXJkZSBzcGV6aWZpemllcnQsIGFiZXIgQ29tbWl0ICVzIGlzdCBrZWluIE1lcmdlLiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlICJyZXZlcnQiIG9yCisjLiAiY2hlcnJ5LXBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMQorIzogc2VxdWVuY2VyLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXM6IGthbm4gRWx0ZXJuLUNvbW1pdCAlcyBuaWNodCBwYXJzZW4iCisKKyM6IHNlcXVlbmNlci5jOjUxNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiS2FubiBrZWluZSBDb21taXQtQmVzY2hyZWlidW5nIGbDvHIgJXMgYmVrb21tZW4iCisKKyM6IHNlcXVlbmNlci5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICJLb25udGUgXCJyZXZlcnRcIiBuaWNodCBhdWYgJXMuLi4gKCVzKSBhdXNmw7xocmVuIgorCisjOiBzZXF1ZW5jZXIuYzo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICJLb25udGUgJXMuLi4gKCVzKSBuaWNodCBhbndlbmRlbiIKKworIzogc2VxdWVuY2VyLmM6NjM5Cittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgImxlZXJlIE1lbmdlIHZvbiBDb21taXRzIMO8YmVyZ2ViZW4iCisKKyM6IHNlcXVlbmNlci5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBGZWhsZXIgYmVpbSBMZXNlbiBkZXMgSW5kZXgiCisKKyM6IHNlcXVlbmNlci5jOjY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBGZWhsZXIgYmVpbSBBa3R1YWxpc2llcmVuIGRlcyBJbmRleCIKKworIzogc2VxdWVuY2VyLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKK21zZ3N0ciAiS2FubiAlcyBuaWNodCB3w6RocmVuZCBlaW5lcyAlcyBkdXJjaGbDvGhyZW4iCisKKyM6IHNlcXVlbmNlci5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgbGluZSAlZC4iCittc2dzdHIgIktvbm50ZSBaZWlsZSAlZCBuaWNodCBwYXJzZW4uIgorCisjOiBzZXF1ZW5jZXIuYzo3MzgKK21zZ2lkICJObyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIktlaW5lIENvbW1pdHMgZ2VwYXJzdC4iCisKKyM6IHNlcXVlbmNlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAlcyIKK21zZ3N0ciAiS29ubnRlICVzIG5pY2h0IMO2ZmZuZW4iCisKKyM6IHNlcXVlbmNlci5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAlcy4iCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBsZXNlbi4iCisKKyM6IHNlcXVlbmNlci5jOjc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJXMiCittc2dzdHIgIlVuYmVudXR6YmFyZXMgSW5zdHJ1a3Rpb25zYmxhdHQ6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlciBTY2hsw7xzc2VsOiAlcyIKKworIzogc2VxdWVuY2VyLmM6Nzk0IGJ1aWx0aW4vcHVsbC5jOjQ3IGJ1aWx0aW4vcHVsbC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgV2VydCBmw7xyICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAlcyIKK21zZ3N0ciAiRmVobGVyaGFmdGVzIE9wdGlvbnNibGF0dDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjgyMworbXNnaWQgImEgY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIlwiY2hlcnJ5LXBpY2tcIiBvZGVyIFwicmV2ZXJ0XCIgaXN0IGJlcmVpdHMgaW0gR2FuZyIKKworIzogc2VxdWVuY2VyLmM6ODI0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKK21zZ3N0ciAidmVyc3VjaGVuIFNpZSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiCittc2dzdHIgIktvbm50ZSBcInNlcXVlbmNlclwiLVZlcnplaWNobmlzICVzIG5pY2h0IGVyc3RlbGxlbiIKKworIzogc2VxdWVuY2VyLmM6ODQ0IHNlcXVlbmNlci5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcy4iCittc2dzdHIgIkZlaGxlciBiZWltIEVpbnBhY2tlbiB2b24gJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo4NjMgc2VxdWVuY2VyLmM6OTk2Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJrZWluIFwiY2hlcnJ5LXBpY2tcIiBvZGVyIFwicmV2ZXJ0XCIgaW0gR2FuZyIKKworIzogc2VxdWVuY2VyLmM6ODY1Cittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAia2FubiBIRUFEIG5pY2h0IGF1ZmzDtnNlbiIKKworIzogc2VxdWVuY2VyLmM6ODY3Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgImthbm4gbmljaHQgYWJicmVjaGVuOiBiaW4gYXVmIGVpbmVtIEJyYW5jaCwgZGVyIG5vY2ggZ2Vib3JlbiB3aXJkIgorCisjOiBzZXF1ZW5jZXIuYzo4ODcgYnVpbHRpbi9hcHBseS5jOjQyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJLYW5uICVzIG5pY2h0IMO2ZmZuZW46ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJLYW5uICVzIG5pY2h0IGxlc2VuOiAlcyIKKworIzogc2VxdWVuY2VyLmM6ODkxCittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiVW5lcndhcnRldGVzIERhdGVpZW5kZSIKKworIzogc2VxdWVuY2VyLmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAiZ2VzcGVpY2hlcnRlIFwicHJlLWNoZXJyeS1waWNrXCIgSEVBRCBEYXRlaSAnJXMnIGlzdCBiZXNjaMOkZGlndCIKKworIzogc2VxdWVuY2VyLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgZm9ybWF0aWVyZW4uIgorCisjOiBzZXF1ZW5jZXIuYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIgorbXNnc3RyICIlczogJXMga2FubiBuaWNodCBpbiBcImNoZXJyeS1waWNrXCIgYmVudXR6dCB3ZXJkZW4iCisKKyM6IHNlcXVlbmNlci5jOjEwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGJhZCByZXZpc2lvbiIKK21zZ3N0ciAiJXM6IHVuZ8O8bHRpZ2VyIENvbW1pdCIKKworIzogc2VxdWVuY2VyLmM6MTEwMQorbXNnaWQgIkNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiS2FubiBuaWNodCBhbHMgYWxsZXJlcnN0ZW4gQ29tbWl0IGVpbmVuIFJldmVydCBhdXNmw7xocmVuLiIKKworIzogc2VxdWVuY2VyLmM6MTEwMgorbXNnaWQgIkNhbid0IGNoZXJyeS1waWNrIGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiS2FubiBuaWNodCBhbHMgYWxsZXJlcnN0ZW4gQ29tbWl0IGVpbmVuIENoZXJyeS1QaWNrIGF1c2bDvGhyZW4uIgorCisjOiBzZXR1cC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gdm9uICVzIgorCisjOiBzaGExX25hbWUuYzo0NTMKK21zZ2lkICIiCisiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKyJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCisibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgIiIKKyJHaXQgZXJ6ZXVndCBub3JtYWxlcndlaXNlIGtlaW5lIFJlZmVyZW56ZW4gZGllIG1pdFxuIgorIjQwIEhleC1aZWljaGVuIGVuZGVuLCBkYSBkaWVzZSBpZ25vcmllcnQgd2VyZGVuIHdlbm5cbiIKKyJTaWUgZGllc2UgYW5nZWJlbi4gRGllc2UgUmVmZXJlbnplbiBrw7ZubnRlbiBhdXMgVmVyc2VoZW5cbiIKKyJlcnpldWd0IHdvcmRlbiBzZWluLiBadW0gQmVpc3BpZWwsXG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid29iZWkgXCIkYnJcIiBsZWVyIGlzdCB1bmQgZWluZSA0MC1IZXgtUmVmZXJlbnogZXJ6ZXVndFxuIgorInd1cmRlLiBCaXR0ZSBwcsO8ZmVuIFNpZSBkaWVzZSBSZWZlcmVuemVuIHVuZCBsw7ZzY2hlblxuIgorIlNpZSBzaWUgZ2VnZWJlbmVuZmFsbHMuIFVudGVyZHLDvGNrZW4gU2llIGRpZXNlIE1lbGR1bmdcbiIKKyJpbmRlbSBTaWUgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiXG4iCisiYXVzZsO8aHJlbi4iCisKKyM6IHN1Ym1vZHVsZS5jOjYxIHN1Ym1vZHVsZS5jOjk1Cittc2dpZCAiQ2Fubm90IGNoYW5nZSB1bm1lcmdlZCAuZ2l0bW9kdWxlcywgcmVzb2x2ZSBtZXJnZSBjb25mbGljdHMgZmlyc3QiCittc2dzdHIgIiIKKyJLYW5uIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIC5naXRtb2R1bGVzLURhdGVpIG5pY2h0IMOkbmRlcm4sIGzDtnNlblxuIgorIlNpZSB6dWVyc3QgZGllIEtvbmZsaWt0ZSBhdWYiCisKKyM6IHN1Ym1vZHVsZS5jOjY1IHN1Ym1vZHVsZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAiS29ubnRlIGtlaW5lIFNla3Rpb24gaW4gLmdpdG1vZHVsZXMgbWl0IFBmYWQgXCIlc1wiIGZpbmRlbiIKKworIzogc3VibW9kdWxlLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHVwZGF0ZSAuZ2l0bW9kdWxlcyBlbnRyeSAlcyIKK21zZ3N0ciAiS29ubnRlIEVpbnRyYWcgJyVzJyBpbiAuZ2l0bW9kdWxlcyBuaWNodCBha3R1YWxpc2llcmVuIgorCisjOiBzdWJtb2R1bGUuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSAuZ2l0bW9kdWxlcyBlbnRyeSBmb3IgJXMiCittc2dzdHIgIktvbm50ZSBFaW50cmFnICclcycgbmljaHQgYXVzIC5naXRtb2R1bGVzIGVudGZlcm5lbiIKKworIzogc3VibW9kdWxlLmM6MTE3Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAiS29ubnRlIGFrdHVhbGlzaWVydGUgLmdpdG1vZHVsZXMtRGF0ZWkgbmljaHQgenVtIENvbW1pdCB2b3JtZXJrZW4iCisKKyM6IHN1Ym1vZHVsZS5jOjEwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBjb3JlLndvcmt0cmVlIGluICVzIgorbXNnc3RyICJLb25udGUgY29yZS53b3JrdHJlZSBpbiAnJXMnIG5pY2h0IHNldHplbi4iCisKKyM6IHRyYWlsZXIuYzo0OTEgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NDk5IHRyYWlsZXIuYzo1NTMgdHJhaWxlci5jOjU1NworIzogdHJhaWxlci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICJ1bmJla2FubnRlciBXZXJ0ICclcycgZsO8ciBTY2hsw7xzc2VsICVzIgorCisjOiB0cmFpbGVyLmM6NTQzIHRyYWlsZXIuYzo1NDggYnVpbHRpbi9yZW1vdGUuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAibWVociBhbHMgZWluICVzIgorCisjOiB0cmFpbGVyLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgImxlZXJlciBBbmhhbmctVG9rZW4gaW4gQW5oYW5nICclLipzJyIKKworIzogdHJhaWxlci5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgIktvbm50ZSBFaW5nYWJlLURhdGVpICclcycgbmljaHQgbGVzZW4iCisKKyM6IHRyYWlsZXIuYzo3MDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJrb25udGUgbmljaHQgdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgIktvbm50ZSBSZWZlcmVueiAlcyBuaWNodCBsZXNlbi4iCisKKyM6IHVucGFjay10cmVlcy5jOjIwMworbXNnaWQgIkNoZWNraW5nIG91dCBmaWxlcyIKK21zZ3N0ciAiQ2hlY2tlIERhdGVpZW4gYXVzIgorCisjOiB1cmxtYXRjaC5jOjEyMAorbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICJVbmfDvGx0aWdlcyBVUkwtU2NoZW1hIG9kZXIgU3VmZml4ICc6Ly8nIGZlaGx0IgorCisjOiB1cmxtYXRjaC5jOjE0NCB1cmxtYXRjaC5jOjI5NyB1cmxtYXRjaC5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgInVuZ8O8bHRpZ2UgRXNjYXBlLVNlcXVlbnogJVhYIgorCisjOiB1cmxtYXRjaC5jOjE3MgorbXNnaWQgIm1pc3NpbmcgaG9zdCBhbmQgc2NoZW1lIGlzIG5vdCAnZmlsZTonIgorbXNnc3RyICJmZWhsZW5kZXIgSG9zdCB1bmQgU2NoZW1hIGlzdCBuaWNodCAnZmlsZTonIgorCisjOiB1cmxtYXRjaC5jOjE4OQorbXNnaWQgImEgJ2ZpbGU6JyBVUkwgbWF5IG5vdCBoYXZlIGEgcG9ydCBudW1iZXIiCittc2dzdHIgImVpbmUgJ2ZpbGU6JyBVUkwgZGFyZiBrZWluZSBQb3J0bnVtbWVyIGVudGhhbHRlbiIKKworIzogdXJsbWF0Y2guYzoxOTkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJIb3N0bmFtZSBlbnRow6RsdCB1bmfDvGx0aWdlIFplaWNoZW4iCisKKyM6IHVybG1hdGNoLmM6MjQ0IHVybG1hdGNoLmM6MjU1Cittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAidW5nw7xsdGlnZSBQb3J0bnVtbWVyIgorCisjOiB1cmxtYXRjaC5jOjMyMgorbXNnaWQgImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiCittc2dzdHIgInVuZ8O8bHRpZ2VzICcuLicgUGZhZHNlZ21lbnQiCisKKyM6IHdyYXBwZXIuYzoyMTkgd3JhcHBlci5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCB6dW0gTGVzZW4gdW5kIFNjaHJlaWJlbiDDtmZmbmVuLiIKKworIzogd3JhcHBlci5jOjIyMSB3cmFwcGVyLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBTY2hyZWliZW4gw7ZmZm5lbi4iCisKKyM6IHdyYXBwZXIuYzoyMjMgd3JhcHBlci5jOjM2NiBidWlsdGluL2FtLmM6MzM3IGJ1aWx0aW4vY29tbWl0LmM6MTY4OAorIzogYnVpbHRpbi9tZXJnZS5jOjEwNzYgYnVpbHRpbi9wdWxsLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBMZXNlbiDDtmZmbmVuLiIKKworIzogd3JhcHBlci5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICJrb25udGUgbmljaHQgYXVmICclcycgenVncmVpZmVuOiAlcyIKKworIzogd3JhcHBlci5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyciCittc2dzdHIgImtvbm50ZSBuaWNodCBhdWYgJyVzJyB6dWdyZWlmZW4iCisKKyM6IHdyYXBwZXIuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiCittc2dzdHIgImtvbm50ZSBha3R1ZWxsZW4gQmVudXR6ZXIgbmljaHQgaW4gUGFzc3dvcnQtRGF0ZWkgZmluZGVuOiAlcyIKKworIzogd3JhcHBlci5jOjYxMgorbXNnaWQgIm5vIHN1Y2ggdXNlciIKK21zZ3N0ciAia2VpbiBzb2xjaGVyIEJlbnV0emVyIgorCisjOiB3cmFwcGVyLmM6NjIwCittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJLb25udGUgYWt0dWVsbGVzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBuaWNodCBiZWtvbW1lbi4iCisKKyM6IHdyYXBwZXIuYzo2MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBTY2hyZWliZW4gw7ZmZm5lbi4iCisKKyM6IHdyYXBwZXIuYzo2NDIgYnVpbHRpbi9hbS5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdG8gJXMiCittc2dzdHIgIktvbm50ZSBuaWNodCBuYWNoICclcycgc2NocmVpYmVuLiIKKworIzogd3JhcHBlci5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJXMiCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHNjaGxpZcOfZW4uIgorCisjOiB3dC1zdGF0dXMuYzoxNDkKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgIk5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIFBmYWRlOiIKKworIzogd3Qtc3RhdHVzLmM6MTc2IHd0LXN0YXR1cy5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgcmVzZXQgJXMgPERhdGVpPi4uLlwiIHp1bSBFbnRmZXJuZW4gYXVzIGRlciBTdGFnaW5nLSIKKyJBcmVhKSIKKworIzogd3Qtc3RhdHVzLmM6MTc4IHd0LXN0YXR1cy5jOjIwNQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBybSAtLWNhY2hlZCA8RGF0ZWk+Li4uXCIgenVtIEVudGZlcm5lbiBhdXMgZGVyIFN0YWdpbmctIgorIkFyZWEpIgorCisjOiB3dC1zdGF0dXMuYzoxODIKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgYWRkL3JtIDxEYXRlaT4uLi5cIiwgdW0gZGllIEF1ZmzDtnN1bmcgenUgbWFya2llcmVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTg0IHd0LXN0YXR1cy5jOjE4OAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBhZGQvcm0gPERhdGVpPi4uLlwiLCB1bSBkaWUgQXVmbMO2c3VuZyBlbnRzcHJlY2hlbmQgenUgIgorIm1hcmtpZXJlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE4NgorbXNnaWQgIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGFkZC9ybSA8RGF0ZWk+Li4uXCIsIHVtIGRpZSBBdWZsw7ZzdW5nIHp1IG1hcmtpZXJlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE5NyB3dC1zdGF0dXMuYzo4ODAKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgInp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW46IgorCisjOiB3dC1zdGF0dXMuYzoyMTUgd3Qtc3RhdHVzLmM6ODg5Cittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICLDhG5kZXJ1bmdlbiwgZGllIG5pY2h0IHp1bSBDb21taXQgdm9yZ2VtZXJrdCBzaW5kOiIKKworIzogd3Qtc3RhdHVzLmM6MjE5Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgYWRkIDxEYXRlaT4uLi5cIiwgdW0gZGllIMOEbmRlcnVuZ2VuIHp1bSBDb21taXQgIgorInZvcnp1bWVya2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MjIxCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgYWRkL3JtIDxEYXRlaT4uLi5cIiwgdW0gZGllIMOEbmRlcnVuZ2VuIHp1bSBDb21taXQgIgorInZvcnp1bWVya2VuKSIKKworIzogd3Qtc3RhdHVzLmM6MjIyCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGNoZWNrb3V0IC0tIDxEYXRlaT4uLi5cIiwgdW0gZGllIMOEbmRlcnVuZ2VuIGltICIKKyJBcmJlaXRzdmVyemVpY2huaXMgenUgdmVyd2VyZmVuKSIKKworIzogd3Qtc3RhdHVzLmM6MjI0Cittc2dpZCAiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIgorbXNnc3RyICIiCisiICAoY29tbWl0dGVuIG9kZXIgdmVyd2VyZmVuIFNpZSBkZW4gdW52ZXJzaW9uaWVydGVuIG9kZXIgZ2XDpG5kZXJ0ZW4gSW5oYWx0ICIKKyJpbiBkZW4gU3VibW9kdWxlbikiCisKKyM6IHd0LXN0YXR1cy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCAlcyA8RGF0ZWk+Li4uXCIsIHVtIGRpZSDDhG5kZXJ1bmdlbiB6dW0gQ29tbWl0ICIKKyJ2b3J6dW1lcmtlbikiCisKKyM6IHd0LXN0YXR1cy5jOjI1MQorbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgImJlaWRlIGdlbMO2c2NodDoiCisKKyM6IHd0LXN0YXR1cy5jOjI1MworbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAidm9uIHVucyBoaW56dWdlZsO8Z3Q6IgorCisjOiB3dC1zdGF0dXMuYzoyNTUKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICJ2b24gZGVuZW4gZ2Vsw7ZzY2h0OiIKKworIzogd3Qtc3RhdHVzLmM6MjU3Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgInZvbiBkZW5lbiBoaW56dWdlZsO8Z3Q6IgorCisjOiB3dC1zdGF0dXMuYzoyNTkKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAidm9uIHVucyBnZWzDtnNjaHQ6IgorCisjOiB3dC1zdGF0dXMuYzoyNjEKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAidm9uIGJlaWRlbiBoaW56dWdlZsO8Z3Q6IgorCisjOiB3dC1zdGF0dXMuYzoyNjMKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAidm9uIGJlaWRlbiBnZcOkbmRlcnQ6IgorCisjOiB3dC1zdGF0dXMuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4IgorbXNnc3RyICJCdWc6IHVuYmVoYW5kZWx0ZXIgVW5tZXJnZWQtU3RhdHVzICV4IgorCisjOiB3dC1zdGF0dXMuYzoyNzMKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgIm5ldWUgRGF0ZWk6IgorCisjOiB3dC1zdGF0dXMuYzoyNzUKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICJrb3BpZXJ0OiIKKworIzogd3Qtc3RhdHVzLmM6Mjc3Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgImdlbMO2c2NodDoiCisKKyM6IHd0LXN0YXR1cy5jOjI3OQorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAiZ2XDpG5kZXJ0OiIKKworIzogd3Qtc3RhdHVzLmM6MjgxCittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgInVtYmVuYW5udDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MworbXNnaWQgInR5cGVjaGFuZ2U6IgorbXNnc3RyICJUeXDDpG5kZXJ1bmc6IgorCisjOiB3dC1zdGF0dXMuYzoyODUKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAidW5iZWthbm50OiIKKworIzogd3Qtc3RhdHVzLmM6Mjg3Cittc2dpZCAidW5tZXJnZWQ6IgorbXNnc3RyICJuaWNodCBnZW1lcmdlZDoiCisKKyM6IHd0LXN0YXR1cy5jOjM2OQorbXNnaWQgIm5ldyBjb21taXRzLCAiCittc2dzdHIgIm5ldWUgQ29tbWl0cywgIgorCisjOiB3dC1zdGF0dXMuYzozNzEKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgImdlw6RuZGVydGVyIEluaGFsdCwgIgorCisjOiB3dC1zdGF0dXMuYzozNzMKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICJ1bnZlcnNpb25pZXJ0ZXIgSW5oYWx0LCAiCisKKyM6IHd0LXN0YXR1cy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJidWc6IHVuaGFuZGxlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiRmVobGVyOiB1bmJlaGFuZGVsdGVyIERpZmZlcmVuei1TdGF0dXMgJWMiCisKKyM6IHd0LXN0YXR1cy5jOjc1NAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICJTdWJtb2R1bGUgZ2XDpG5kZXJ0LCBhYmVyIG5pY2h0IGFrdHVhbGlzaWVydDoiCisKKyM6IHd0LXN0YXR1cy5jOjc1NgorbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIsOEbmRlcnVuZ2VuIGluIFN1Ym1vZHVsIHp1bSBDb21taXR0ZW46IgorCisjOiB3dC1zdGF0dXMuYzo4MzcKK21zZ2lkICIiCisiRG8gbm90IHRvdWNoIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgd2lsbCBiZSByZW1vdmVkLiIKK21zZ3N0ciAiIgorIsOEbmRlcm4gU2llIG5pY2h0IGRpZSBvYmlnZSBaZWlsZS5cbiIKKyJBbGxlcyB1bnRlcmhhbGIgdm9uIGlociB3aXJkIGVudGZlcm50LiIKKworIzogd3Qtc3RhdHVzLmM6OTQ4Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICJTaWUgaGFiZW4gbmljaHQgenVzYW1tZW5nZWbDvGhydGUgUGZhZGUuIgorCisjOiB3dC1zdGF0dXMuYzo5NTEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgKGJlaGViZW4gU2llIGRpZSBLb25mbGlrdGUgdW5kIGbDvGhyZW4gU2llIFwiZ2l0IGNvbW1pdFwiIGF1cykiCisKKyM6IHd0LXN0YXR1cy5jOjk1NAorbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIkFsbGUgS29uZmxpa3RlIHNpbmQgYmVob2JlbiwgYWJlciBTaWUgc2luZCBpbW1lciBub2NoIGJlaW0gTWVyZ2UuIgorCisjOiB3dC1zdGF0dXMuYzo5NTcKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgIChiZW51dHplbiBTaWUgXCJnaXQgY29tbWl0XCIsIHVtIGRlbiBNZXJnZSBhYnp1c2NobGllw59lbikiCisKKyM6IHd0LXN0YXR1cy5jOjk2NworbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAiRWluZSBcImFtXCItU2l0enVuZyBpc3QgaW0gR2FuZ2UuIgorCisjOiB3dC1zdGF0dXMuYzo5NzAKK21zZ2lkICJUaGUgY3VycmVudCBwYXRjaCBpcyBlbXB0eS4iCittc2dzdHIgIkRlciBha3R1ZWxsZSBQYXRjaCBpc3QgbGVlci4iCisKKyM6IHd0LXN0YXR1cy5jOjk3NAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChiZWhlYmVuIFNpZSBkaWUgS29uZmxpa3RlIHVuZCBmw7xocmVuIFNpZSBkYW5uIFwiZ2l0IGFtIC0tY29udGludWVcIiBhdXMpIgorCisjOiB3dC1zdGF0dXMuYzo5NzYKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGFtIC0tc2tpcFwiLCB1bSBkaWVzZW4gUGF0Y2ggYXVzenVsYXNzZW4pIgorCisjOiB3dC1zdGF0dXMuYzo5NzgKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgYW0gLS1hYm9ydFwiLCB1bSBkZW4gdXJzcHLDvG5nbGljaGVuIEJyYW5jaCAiCisid2llZGVyaGVyenVzdGVsbGVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTEwNQorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICJLZWluZSBLb21tYW5kb3MgYXVzZ2Vmw7xocnQuIgorCisjOiB3dC1zdGF0dXMuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIKK21zZ2lkX3BsdXJhbCAiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiCittc2dzdHJbMF0gIkxldHp0ZXMgS29tbWFuZG8gYXVzZ2Vmw7xocnQgKCVkIEtvbW1hbmRvIGF1c2dlZsO8aHJ0KToiCittc2dzdHJbMV0gIkxldHp0ZSBLb21tYW5kb3MgYXVzZ2Vmw7xocnQgKCVkIEtvbW1hbmRvcyBhdXNnZWbDvGhydCk6IgorCisjOiB3dC1zdGF0dXMuYzoxMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHNlZSBtb3JlIGluIGZpbGUgJXMpIgorbXNnc3RyICIgIChtZWhyIEluZm9ybWF0aW9uZW4gaW4gRGF0ZWkgJXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMTI0Cittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAiS2VpbmUgS29tbWFuZG9zIHZlcmJsZWliZW5kLiIKKworIzogd3Qtc3RhdHVzLmM6MTEyNworIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICJOw6RjaHN0ZXMgYXVzenVmw7xocmVuZGVzIEtvbW1hbmRvICglZCBLb21tYW5kbyB2ZXJibGVpYmVuZCk6IgorbXNnc3RyWzFdICJOw6RjaHN0ZSBhdXN6dWbDvGhyZW5kZSBLb21tYW5kb3MgKCVkIEtvbW1hbmRvcyB2ZXJibGVpYmVuZCk6IgorCisjOiB3dC1zdGF0dXMuYzoxMTM1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgIChiZW51dHplbiBTaWUgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgenVtIEFuc2VoZW4gdW5kIEJlYXJiZWl0ZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICJTaWUgc2luZCBnZXJhZGUgYmVpbSBSZWJhc2Ugdm9uIEJyYW5jaCAnJXMnIGF1ZiAnJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTE1MworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nLiIKK21zZ3N0ciAiU2llIHNpbmQgZ2VyYWRlIGJlaW0gUmViYXNlLiIKKworIzogd3Qtc3RhdHVzLmM6MTE2NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAoYmVoZWJlbiBTaWUgZGllIEtvbmZsaWt0ZSB1bmQgZsO8aHJlbiBTaWUgZGFubiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiICIKKyJhdXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMTY5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIChiZW51dHplbiBTaWUgXCJnaXQgcmViYXNlIC0tc2tpcFwiLCB1bSBkaWVzZW4gUGF0Y2ggYXVzenVsYXNzZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMTcxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIsIHVtIGRlbiB1cnNwcsO8bmdsaWNoZW4gQnJhbmNoICIKKyJhdXN6dWNoZWNrZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxMTc3Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChhbGxlIEtvbmZsaWt0ZSBiZWhvYmVuOiBmw7xocmVuIFNpZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIGF1cykiCisKKyM6IHd0LXN0YXR1cy5jOjExODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIlNpZSB0ZWlsZW4gZ2VyYWRlIGVpbmVuIENvbW1pdCBhdWYsIHfDpGhyZW5kIGVpbiBSZWJhc2Ugdm9uIEJyYW5jaCAnJXMnIGF1ZiAiCisiJyVzJyBpbSBHYW5nZSBpc3QuIgorCisjOiB3dC1zdGF0dXMuYzoxMTg2Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIlNpZSB0ZWlsZW4gZ2VyYWRlIGVpbmVuIENvbW1pdCB3w6RocmVuZCBlaW5lcyBSZWJhc2UgYXVmLiIKKworIzogd3Qtc3RhdHVzLmM6MTE4OQorbXNnaWQgIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAoU29iYWxkIElociBBcmJlaXRzdmVyemVpY2huaXMgdW52ZXLDpG5kZXJ0IGlzdCwgZsO8aHJlbiBTaWUgXCJnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlXCIgYXVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTE5MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisiU2llIGVkaXRpZXJlbiBnZXJhZGUgZWluZW4gQ29tbWl0IHfDpGhyZW5kIGVpbmVzIFJlYmFzZSB2b24gQnJhbmNoICclcycgYXVmICIKKyInJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTE5OAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiU2llIGVkaXRpZXJlbiBnZXJhZGUgZWluZW4gQ29tbWl0IHfDpGhyZW5kIGVpbmVzIFJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEyMDEKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIsIHVtIGRlbiBha3R1ZWxsZW4gQ29tbWl0ICIKKyJuYWNoenViZXNzZXJuKSIKKworIzogd3Qtc3RhdHVzLmM6MTIwMworbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIHNvYmFsZCBJaHJlIMOEbmRlcnVuZ2VuICIKKyJhYmdlc2NobG9zc2VuIHNpbmQpIgorCisjOiB3dC1zdGF0dXMuYzoxMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIlNpZSBmw7xocmVuIGdlcmFkZSBcImNoZXJyeS1waWNrXCIgdm9uIENvbW1pdCAlcyBhdXMuIgorCisjOiB3dC1zdGF0dXMuYzoxMjE4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChiZWhlYmVuIFNpZSBkaWUgS29uZmxpa3RlIHVuZCBmw7xocmVuIFNpZSBkYW5uIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUiCisiXCIgYXVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTIyMQorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAoYWxsZSBLb25mbGlrdGUgYmVob2JlbjogZsO8aHJlbiBTaWUgXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIGF1cykiCisKKyM6IHd0LXN0YXR1cy5jOjEyMjMKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorIiAgKGJlbnV0emVuIFNpZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIsIHVtIGRpZSBDaGVycnktUGljay1PcGVyYXRpb24gIgorImFienVicmVjaGVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiU2llIHNpbmQgZ2VyYWRlIGFuIGVpbmVtIFJldmVydCB2b24gQ29tbWl0ICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMjM3Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAoYmVoZWJlbiBTaWUgZGllIEtvbmZsaWt0ZSB1bmQgZsO8aHJlbiBTaWUgZGFubiBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiICIKKyJhdXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMjQwCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChhbGxlIEtvbmZsaWt0ZSBiZWhvYmVuOiBmw7xocmVuIFNpZSBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiIGF1cykiCisKKyM6IHd0LXN0YXR1cy5jOjEyNDIKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pIgorbXNnc3RyICIiCisiICAoYmVudXR6ZW4gU2llIFwiZ2l0IHJldmVydCAtLWFib3J0XCIsIHVtIGRpZSBSZXZlcnQtT3BlcmF0aW9uIGFienVicmVjaGVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgIlNpZSBzaW5kIGdlcmFkZSBiZWkgZWluZXIgYmluw6RyZW4gU3VjaGUsIGdlc3RhcnRldCB2b24gQnJhbmNoICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMjU3Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLiIKK21zZ3N0ciAiU2llIHNpbmQgZ2VyYWRlIGJlaSBlaW5lciBiaW7DpHJlbiBTdWNoZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEyNjAKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiIKKyIgIChiZW51dHplbiBTaWUgXCJnaXQgYmlzZWN0IHJlc2V0XCIsIHVtIHp1bSB1cnNwcsO8bmdsaWNoZW4gQnJhbmNoICIKKyJ6dXLDvGNrenVrZWhyZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiQXVmIEJyYW5jaCAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDUKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJpbnRlcmFrdGl2ZXMgUmViYXNlIGltIEdhbmdlOyBhdWYgIgorCisjOiB3dC1zdGF0dXMuYzoxNDQ3Cittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAiUmViYXNlIGltIEdhbmdlOyBhdWYgIgorCisjOiB3dC1zdGF0dXMuYzoxNDUyCittc2dpZCAiSEVBRCBkZXRhY2hlZCBhdCAiCittc2dzdHIgIkhFQUQgbG9zZ2Vsw7ZzdCBiZWkgIgorCisjOiB3dC1zdGF0dXMuYzoxNDU0Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBmcm9tICIKK21zZ3N0ciAiSEVBRCBsb3NnZWzDtnN0IHZvbiAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NTcKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICJJbSBNb21lbnQgYXVmIGtlaW5lbSBCcmFuY2guIgorCisjOiB3dC1zdGF0dXMuYzoxNDc0Cittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgIkluaXRpYWxlciBDb21taXQiCisKKyM6IHd0LXN0YXR1cy5jOjE0ODgKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIlVudmVyc2lvbmllcnRlIERhdGVpZW4iCisKKyM6IHd0LXN0YXR1cy5jOjE0OTAKK21zZ2lkICJJZ25vcmVkIGZpbGVzIgorbXNnc3RyICJJZ25vcmllcnRlIERhdGVpZW4iCisKKyM6IHd0LXN0YXR1cy5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorIkVzIGRhdWVydGUgJS4yZiBTZWt1bmRlbiBkaWUgdW52ZXJzaW9uaWVydGVuIERhdGVpZW4genUgYmVzdGltbWVuLlxuIgorIidzdGF0dXMgLXVubycga8O2bm50ZSBkYXMgYmVzY2hsZXVuaWdlbiwgYWJlciBTaWUgbcO8c3NlbiBkYXJhdWYgYWNodGVuLFxuIgorIm5ldWUgRGF0ZWllbiBzZWxic3RzdMOkbmRpZyBoaW56dXp1ZsO8Z2VuIChzaWVoZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorCisjOiB3dC1zdGF0dXMuYzoxNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIlVudmVyc2lvbmllcnRlIERhdGVpZW4gbmljaHQgYXVmZ2VsaXN0ZXQlcyIKKworIzogd3Qtc3RhdHVzLmM6MTUwMgorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiAoYmVudXR6ZW4gU2llIGRpZSBPcHRpb24gLXUsIHVtIHVudmVyc2lvbmllcnRlIERhdGVpZW4gYW56dXplaWdlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE1MDgKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICJLZWluZSDDhG5kZXJ1bmdlbiIKKworIzogd3Qtc3RhdHVzLmM6MTUxMworIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlIFwiZ2l0IGFkZFwiIGFuZC9vciBcImdpdCBjb21taXQgLWFcIilcbiIKK21zZ3N0ciAiIgorImtlaW5lIMOEbmRlcnVuZ2VuIHp1bSBDb21taXQgdm9yZ2VtZXJrdCAoYmVudXR6ZW4gU2llIFwiZ2l0IGFkZFwiIHVuZC9vZGVyICIKKyJcImdpdCBjb21taXQgLWFcIilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIgorbXNnc3RyICJrZWluZSDDhG5kZXJ1bmdlbiB6dW0gQ29tbWl0IHZvcmdlbWVya3RcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gIgorInRyYWNrKVxuIgorbXNnc3RyICIiCisibmljaHRzIHp1bSBDb21taXQgdm9yZ2VtZXJrdCwgYWJlciBlcyBnaWJ0IHVudmVyc2lvbmllcnRlIERhdGVpZW4gKGJlbnV0emVuICIKKyJTaWUgXCJnaXQgYWRkXCIgenVtIFZlcnNpb25pZXJlbilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAibmljaHRzIHp1bSBDb21taXQgdm9yZ2VtZXJrdCwgYWJlciBlcyBnaWJ0IHVudmVyc2lvbmllcnRlIERhdGVpZW5cbiIKKworIzogd3Qtc3RhdHVzLmM6MTUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAiIgorIm5pY2h0cyB6dSBjb21taXR0ZW4gKEVyc3RlbGxlbi9Lb3BpZXJlbiBTaWUgRGF0ZWllbiB1bmQgYmVudXR6ZW4gU2llIFwiZ2l0ICIKKyJhZGRcIiB6dW0gVmVyc2lvbmllcmVuKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTI4IHd0LXN0YXR1cy5jOjE1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAibmljaHRzIHp1IGNvbW1pdHRlblxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpXG4iCittc2dzdHIgIiIKKyJuaWNodHMgenUgY29tbWl0dGVuIChiZW51dHplbiBTaWUgZGllIE9wdGlvbiAtdSwgdW0gdW52ZXJzaW9uaWVydGUgRGF0ZWllbiAiCisiYW56dXplaWdlbilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyBkaXJlY3RvcnkgY2xlYW5cbiIKK21zZ3N0ciAibmljaHRzIHp1IGNvbW1pdHRlbiwgQXJiZWl0c3ZlcnplaWNobmlzIHVudmVyw6RuZGVydFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjQ0Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAoa2VpbiBCcmFuY2gpIgorCisjOiB3dC1zdGF0dXMuYzoxNjUwCittc2dpZCAiSW5pdGlhbCBjb21taXQgb24gIgorbXNnc3RyICJJbml0aWFsZXIgQ29tbWl0IGF1ZiAiCisKKyM6IHd0LXN0YXR1cy5jOjE2NzcKK21zZ2lkICJnb25lIgorbXNnc3RyICJlbnRmZXJudCIKKworIzogd3Qtc3RhdHVzLmM6MTY3OSB3dC1zdGF0dXMuYzoxNjg3Cittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAiaGludGVyaGVyICIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU1IGJ1aWx0aW4vY2xvbmUuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBlbnRmZXJuZW4uIgorCisjOiBidWlsdGluL2FkZC5jOjIyCittc2dpZCAiZ2l0IGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBhZGQgWzxPcHRpb25lbj5dIFstLV0gPFBmYWRzcGV6aWZpa2F0aW9uPi4uLiIKKworIzogYnVpbHRpbi9hZGQuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICJ1bmVyd2FydGV0ZXIgRGlmZmVyZW56LVN0YXR1cyAlYyIKKworIzogYnVpbHRpbi9hZGQuYzo3MCBidWlsdGluL2NvbW1pdC5jOjI3NworbXNnaWQgInVwZGF0aW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiQWt0dWFsaXNpZXJ1bmcgZGVyIERhdGVpZW4gZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAibMO2c2NoZSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTM0Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIiIKKyJOaWNodCB6dW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuIG5hY2ggQWt0dWFsaXNpZXJ1bmcgZGVyIFN0YWdpbmctQXJlYToiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTk0IGJ1aWx0aW4vcmV2LXBhcnNlLmM6Nzk5Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJLb25udGUgZGVuIEluZGV4IG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2FkZC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgenVtIFNjaHJlaWJlbiDDtmZmbmVuLiIKKworIzogYnVpbHRpbi9hZGQuYzoyMDkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIktvbm50ZSBQYXRjaCBuaWNodCBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjEyCittc2dpZCAiZWRpdGluZyBwYXRjaCBmYWlsZWQiCittc2dzdHIgIkJlYXJiZWl0dW5nIGRlcyBQYXRjaGVzIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL2FkZC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJLb25udGUgVmVyemVpY2huaXMgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9hZGQuYzoyMTcKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIkxlZXJlciBQYXRjaC4gQWJnZWJyb2NoZW4uIgorCisjOiBidWlsdGluL2FkZC5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYW53ZW5kZW4uIgorCisjOiBidWlsdGluL2FkZC5jOjIzMgorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiIgorIkRpZSBmb2xnZW5kZW4gUGZhZGUgd2VyZGVuIGR1cmNoIGVpbmUgSWhyZXIgXCIuZ2l0aWdub3JlXCIgRGF0ZWllbiAiCisiaWdub3JpZXJ0OlxuIgorCisjOiBidWlsdGluL2FkZC5jOjI0OSBidWlsdGluL2NsZWFuLmM6ODk2IGJ1aWx0aW4vZmV0Y2guYzoxMDggYnVpbHRpbi9tdi5jOjExMAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NSBidWlsdGluL3B1bGwuYzoxODIgYnVpbHRpbi9wdXNoLmM6NTQ1CisjOiBidWlsdGluL3JlbW90ZS5jOjEzMzkgYnVpbHRpbi9ybS5jOjI2OCBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgImRyeSBydW4iCittc2dzdHIgIlByb2JlbGF1ZiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTAgYnVpbHRpbi9hcHBseS5jOjQ1ODAgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxOQorIzogYnVpbHRpbi9jb21taXQuYzoxMzIxIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjYzIGJ1aWx0aW4vZnNjay5jOjYzNgorIzogYnVpbHRpbi9sb2cuYzoxNjQxIGJ1aWx0aW4vbXYuYzoxMDkgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTQKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJlcndlaXRlcnRlIEF1c2dhYmVuIgorCisjOiBidWlsdGluL2FkZC5jOjI1MgorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgImludGVyYWt0aXZlcyBBdXN3w6RobGVuIgorCisjOiBidWlsdGluL2FkZC5jOjI1MyBidWlsdGluL2NoZWNrb3V0LmM6MTE1MiBidWlsdGluL3Jlc2V0LmM6Mjg2Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgIkJsw7Zja2UgaW50ZXJha3RpdiBhdXN3w6RobGVuIgorCisjOiBidWlsdGluL2FkZC5jOjI1NAorbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAiYWt0dWVsbGUgVW50ZXJzY2hpZWRlIGVkaXRpZXJlbiB1bmQgYW53ZW5kZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU1Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJkYXMgSGluenVmw7xnZW4gYW5kZXJuZmFsbHMgaWdub3JpZXJ0ZXIgRGF0ZWllbiBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTYKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAidmVyc2lvbmllcnRlIERhdGVpZW4gYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTcKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIm51ciBzcGVpY2hlcm4sIGRhc3MgZGVyIFBmYWQgc3DDpHRlciBoaW56dWdlZsO8Z3Qgd2VyZGVuIHNvbGwiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU4Cittc2dpZCAiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICIiCisiw4RuZGVydW5nZW4gdm9uIGFsbGVuIHZlcnNpb25pZXJ0ZW4gdW5kIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2FkZC5jOjI2MQorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICJnZWzDtnNjaHRlIFBmYWRlIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyBpZ25vcmllcmVuIChnZW5hdSB3aWUgLS1uby1hbGwpIgorCisjOiBidWlsdGluL2FkZC5jOjI2MworbXNnaWQgImRvbid0IGFkZCwgb25seSByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAibmljaHRzIGhpbnp1ZsO8Z2VuLCBudXIgZGVuIEluZGV4IGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY0Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAiIgorIkRhdGVpZW4gw7xiZXJzcHJpbmdlbiwgZGllIGF1ZmdydW5kIHZvbiBGZWhsZXJuIG5pY2h0IGhpbnp1Z2Vmw7xndCB3ZXJkZW4gIgorImtvbm50ZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY1Cittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICJwcsO8ZmVuIG9iIC0gYXVjaCBmZWhsZW5kZSAtIERhdGVpZW4gaW0gUHJvYmVsYXVmIGlnbm9yaWVydCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgIlZlcndlbmRlbiBTaWUgLWYgd2VubiBTaWUgZGllc2Ugd2lya2xpY2ggaGluenVmw7xnZW4gbcO2Y2h0ZW4uXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk0Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiSGluenVmw7xnZW4gdm9uIERhdGVpZW4gZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMwCittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIkRpZSBPcHRpb25lbiAtQSB1bmQgLXUgc2luZCB6dWVpbmFuZGVyIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM3Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBrYW5uIG51ciB6dXNhbW1lbiBtaXQgLS1kcnktcnVuIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2FkZC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiTmljaHRzIHNwZXppZml6aWVydCwgbmljaHRzIGhpbnp1Z2Vmw7xndC5cbiIKKworIzogYnVpbHRpbi9hZGQuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIk1laW50ZW4gU2llIHZpZWxsZWljaHQgJ2dpdCBhZGQgLic/XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzY0IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTcyIGJ1aWx0aW4vY2xlYW4uYzo5NDAKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzM2IGJ1aWx0aW4vbXYuYzoxMzAgYnVpbHRpbi9yZXNldC5jOjIzNSBidWlsdGluL3JtLmM6Mjk4Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICJJbmRleC1EYXRlaSBiZXNjaMOkZGlndCIKKworIzogYnVpbHRpbi9hZGQuYzo0NDUgYnVpbHRpbi9hcHBseS5jOjQ2NzggYnVpbHRpbi9tdi5jOjI3OSBidWlsdGluL3JtLmM6NDMwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgbmV1ZSBJbmRleC1EYXRlaSBuaWNodCBzY2hyZWliZW4uIgorCisjOiBidWlsdGluL2FtLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJXMiCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2FtLmM6MjcwIGJ1aWx0aW4vYW0uYzoxMzQ1IGJ1aWx0aW4vY29tbWl0LmM6NzM3CisjOiBidWlsdGluL21lcmdlLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9hbS5jOjQ0NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IgorbXNnc3RyICJrb25udGUgQXV0b3ItU2tyaXB0IG5pY2h0IHBhcnNlbiIKKworIzogYnVpbHRpbi9hbS5jOjUyMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICInJXMnIHd1cmRlIGR1cmNoIGRlbiBhcHBseXBhdGNoLW1zZyBIb29rIGVudGZlcm50IgorCisjOiBidWlsdGluL2FtLmM6NTYyIGJ1aWx0aW4vbm90ZXMuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICJGZWhsZXJoYWZ0ZSBFaW5nYWJlemVpbGU6ICclcycuIgorCisjOiBidWlsdGluL2FtLmM6NTk5IGJ1aWx0aW4vbm90ZXMuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEtvcGllcmVuIGRlciBOb3RpemVuIHZvbiAnJXMnIG5hY2ggJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjYyNQorbXNnaWQgImZzZWVrIGZhaWxlZCIKK21zZ3N0ciAiXCJmc2Vla1wiIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL2FtLmM6Nzg2IGJ1aWx0aW4vYW0uYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHp1bSBMZXNlbiDDtmZmbmVuOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgenVtIFNjaHJlaWJlbiDDtmZmbmVuOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAia29ubnRlIFBhdGNoICclcycgbmljaHQgcGFyc2VuIgorCisjOiBidWlsdGluL2FtLmM6ODY3Cittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIkVzIGthbm4gbnVyIGVpbmUgU3RHSVQgUGF0Y2gtU2VyaWUgYXVmIGVpbm1hbCBhbmdld2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzo5MTUKK21zZ2lkICJpbnZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAidW5nw7xsdGlnZXIgWmVpdHN0ZW1wZWwiCisKKyM6IGJ1aWx0aW4vYW0uYzo5MTggYnVpbHRpbi9hbS5jOjkyNgorbXNnaWQgImludmFsaWQgRGF0ZSBsaW5lIgorbXNnc3RyICJVbmfDvGx0aWdlIFwiRGF0ZVwiLVplaWxlIgorCisjOiBidWlsdGluL2FtLmM6OTIzCittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIE9mZnNldCBpbiBkZXIgWmVpdHpvbmUiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDEwCittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJQYXRjaC1Gb3JtYXRlcmtlbm51bmcgZmVobGdlc2NobGFnZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTAxNSBidWlsdGluL2Nsb25lLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiB2b24gVmVyemVpY2huaXMgJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjEwMTkKK21zZ2lkICJGYWlsZWQgdG8gc3BsaXQgcGF0Y2hlcy4iCittc2dzdHIgIkZlaGxlciBiZWltIEF1ZnRlaWxlbiBkZXIgUGF0Y2hlcy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTUxIGJ1aWx0aW4vY29tbWl0LmM6MzYyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiCittc2dzdHIgIktvbm50ZSBJbmRleC1EYXRlaSBuaWNodCBzY2hyZWliZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAiIgorIldlbm4gU2llIGRhcyBQcm9ibGVtIGF1ZmdlbMO2c3QgaGFiZW4sIGbDvGhyZW4gU2llIFwiJXMgLS1jb250aW51ZVwiIGF1cy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIkZhbGxzIFNpZSBkaWVzZW4gUGF0Y2ggYXVzbGFzc2VuIG3DtmNodGVuLCBmw7xocmVuIFNpZSBzdGF0dGRlc3NlbiBcIiVzIC0tc2tpcCIKKyJcIiBhdXMuIgorCisjOiBidWlsdGluL2FtLmM6MTIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiVzIC0tYWJvcnRcIi4iCittc2dzdHIgIiIKKyJVbSBkZW4gdXJzcHLDvG5nbGljaGVuIEJyYW5jaCB3aWVkZXJoZXJ6dXN0ZWxsZW4gdW5kIGRpZSBBbndlbmR1bmcgZGVyICIKKyJQYXRjaGVzIGFienVicmVjaGVuLCBmw7xocmVuIFNpZSBcIiVzIC0tYWJvcnRcIiBhdXMuIgorCisjOiBidWlsdGluL2FtLmM6MTMzOQorbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiBXYXMgaXQgc3BsaXQgd3Jvbmc/IgorbXNnc3RyICJQYXRjaCBpc3QgbGVlci4gV2FyIGRlc3NlbiBBdWZ0ZWlsdW5nIGZhbHNjaD8iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDEzIGJ1aWx0aW4vbG9nLmM6MTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlIElkZW50aWZpa2F0aW9uc3plaWxlOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjE0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAiS29ubnRlIENvbW1pdCAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjE0Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIkRlbSBSZXBvc2l0b3J5IGZlaGxlbiBub3R3ZW5kaWdlIEJsb2JzIHVtIGF1ZiBlaW5lbiAzLVdlZ2UtTWVyZ2UgIgorInp1csO8Y2t6dWZhbGxlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjE2Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiIgorIlZlcndlbmRlIEluZm9ybWF0aW9uZW4gYXVzIGRlciBTdGFnaW5nLUFyZWEsIHVtIGVpbiBCYXNpc3ZlcnplaWNobmlzICIKKyJuYWNoenVzdGVsbGVuIC4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE2MzUKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiSGFiZW4gU2llIGRlbiBQYXRjaCBwZXIgSGFuZCBlZGl0aWVydD9cbiIKKyJFciBrYW5uIG5pY2h0IGF1ZiBkaWUgQmxvYnMgaW4gc2VpbmVyICdpbmRleCcgWmVpbGUgYW5nZXdlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2FtLmM6MTY0MQorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiRmFsbGUgenVyw7xjayB6dW0gUGF0Y2hlbiBkZXIgQmFzaXMgdW5kIHp1bSAzLVdlZ2UtTWVyZ2UgLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTY2NgorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgIk1lcmdlIGRlciDDhG5kZXJ1bmdlbiBmZWhsZ2VzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjkxIGJ1aWx0aW4vbWVyZ2UuYzo2MzIKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJcImdpdCB3cml0ZS10cmVlXCIgc2NobHVnIGJlaW0gU2NocmVpYmVuIGVpbmVzIFwiVHJlZVwiLU9iamVrdGVzIGZlaGwiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjk4Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAiYXVmIGxlZXJlIEhpc3RvcmllIGFud2VuZGVuIgorCisjOiBidWlsdGluL2FtLmM6MTcxMSBidWlsdGluL2NvbW1pdC5jOjE3NTIgYnVpbHRpbi9tZXJnZS5jOjgyOQorIzogYnVpbHRpbi9tZXJnZS5jOjg1NAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVzIENvbW1pdC1PYmpla3Rlcy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQzIGJ1aWx0aW4vYW0uYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiS2FubiBuaWNodCBmb3J0c2V0emVuOiAlcyBleGlzdGllcnQgbmljaHQiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzYzCittc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorbXNnc3RyICIiCisiS2FubiBuaWNodCBpbnRlcmFrdGl2IHNlaW4sIG9obmUgZGFzcyBkaWUgU3RhbmRhcmQtRWluZ2FiZSBtaXQgZWluZW0gIgorIlRlcm1pbmFsIHZlcmJ1bmRlbiBpc3QuIgorCisjOiBidWlsdGluL2FtLmM6MTc2OAorbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAiQ29tbWl0LUJlc2NocmVpYnVuZyBpc3Q6IgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTc3OAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIkFud2VuZGVuPyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAiR2XDpG5kZXJ0ZXIgSW5kZXg6IGthbm4gUGF0Y2hlcyBuaWNodCBhbndlbmRlbiAoZ2XDpG5kZXJ0OiAlcykiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODYzIGJ1aWx0aW4vYW0uYzoxOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICJXZW5kZSBhbjogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE4NzkKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIktlaW5lIMOEbmRlcnVuZ2VuIC0tIFBhdGNoZXMgYmVyZWl0cyBhbmdld2VuZGV0LiIKKworIzogYnVpbHRpbi9hbS5jOjE4ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICVzICUuKnMiCittc2dzdHIgIkFud2VuZHVuZyBkZXMgUGF0Y2hlcyBmZWhsZ2VzY2hsYWdlbiBiZWkgJXMgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE4OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGNvcHkgb2YgdGhlIHBhdGNoIHRoYXQgZmFpbGVkIGlzIGZvdW5kIGluOiAlcyIKK21zZ3N0ciAiRGllIEtvcGllIGRlcyBmZWhsZ2VzY2hsYWdlbmVuIFBhdGNoZXMgYmVmaW5kZXQgc2ljaCBpbjogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTM3Cittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiS2VpbmUgw4RuZGVydW5nZW4gLSBoYWJlbiBTaWUgdmVyZ2Vzc2VuICdnaXQgYWRkJyB6dSBiZW51dHplbj9cbiIKKyJXZW5uIGtlaW5lIMOEbmRlcnVuZ2VuIG1laHIgenVtIENvbW1pdCB2b3J6dW1lcmtlbiBzaW5kLCBrw7ZubnRlblxuIgorImRpZXNlIGJlcmVpdHMgYW5kZXJ3ZWl0aWcgZWluZ2Vmw7xndCB3b3JkZW4gc2VpbjsgU2llIGvDtm5udGVuIGRpZXNlbiBQYXRjaFxuIgorImF1c2xhc3Nlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTQ0Cittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiRGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz8iCittc2dzdHIgIiIKKyJTaWUgaGFiZW4gaW1tZXIgbm9jaCBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBQZmFkZSBpbSBJbmRleC5cbiIKKyJIYWJlbiBTaWUgdmVyZ2Vzc2VuICdnaXQgYWRkJyB6dSBiZW51dHplbj8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDUyIGJ1aWx0aW4vYW0uYzoyMDU2IGJ1aWx0aW4vYW0uYzoyMDY4IGJ1aWx0aW4vcmVzZXQuYzozMDgKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiS29ubnRlIE9iamVrdCAnJXMnIG5pY2h0IHBhcnNlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTA0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICJGZWhsZXIgYmVpbSBCZXJlaW5pZ2VuIGRlcyBJbmRleCIKKworIzogYnVpbHRpbi9hbS5jOjIxMzgKK21zZ2lkICIiCisiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFEIHNpbmNlIHRoZSBsYXN0ICdhbScgZmFpbHVyZS5cbiIKKyJOb3QgcmV3aW5kaW5nIHRvIE9SSUdfSEVBRCIKK21zZ3N0ciAiIgorIlNpZSBzY2hlaW5lbiBzZWl0IGRlbSBsZXR6dGVuIGdlc2NoZWl0ZXJ0ZW4gJ2FtJyBIRUFEIGdlw6RuZGVydCB6dSBoYWJlbi5cbiIKKyJLZWluZSBadXLDvGNrc2V0enVuZyB6dSBPUklHX0hFQUQuIgorCisjOiBidWlsdGluL2FtLmM6MjE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFdlcnQgZsO8ciAtLXBhdGNoLWZvcm1hdDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAiZ2l0IGFtIFtvcHRpb25zXSBbKDxtYm94Pnw8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFtPcHRpb25lbl0gWyg8bWJveD58PEUtTWFpbC1WZXJ6ZWljaG5pcz4pLi4uXSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjIKK21zZ2lkICJnaXQgYW0gW29wdGlvbnNdICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbT3B0aW9uZW5dICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI4Cittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgImludGVyYWt0aXYgYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzAKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAiaGlzdG9yaXNjaGUgT3B0aW9uIC0tIGtlaW4gRWZmZWt0IgorCisjOiBidWlsdGluL2FtLmM6MjIzMgorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICJlcmxhdWJlLCBmYWxscyBub3R3ZW5kaWcsIGRhcyBadXLDvGNrZmFsbGVuIGF1ZiBlaW5lbiAzLVdlZ2UtTWVyZ2UiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMzIGJ1aWx0aW4vaW5pdC1kYi5jOjUwOSBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU3CisjOiBidWlsdGluL3JlcGFjay5jOjE3MQorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICJ3ZW5pZ2VyIEF1c2dhYmVuIgorCisjOiBidWlsdGluL2FtLmM6MjIzNQorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgImRlciBDb21taXQtQmVzY2hyZWlidW5nIGVpbmUgU2lnbmVkLW9mZi1ieSBaZWlsZSBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzgKK21zZ2lkICJyZWNvZGUgaW50byB1dGY4IChkZWZhdWx0KSIKK21zZ3N0ciAibmFjaCBVVEYtOCB1bWtvZGllcmVuIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQwCittc2dpZCAicGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiLWsgYW4gZ2l0LW1haWxpbmZvIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQyCittc2dpZCAicGFzcyAtYiBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiLWIgYW4gZ2l0LW1haWxpbmZvIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ0Cittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiLW0gYW4gZ2l0LW1haWxpbmZvIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ2Cittc2dpZCAicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIKK21zZ3N0ciAiLS1rZWVwLWNyIGFuIGdpdC1tYWlsc3BsaXQgZsO8ciBtYm94LUZvcm1hdCDDvGJlcmdlYmVuIgorCisjOiBidWlsdGluL2FtLmM6MjI0OQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICJrZWluIC0ta2VlcC1jciBhbiBnaXQtbWFpbHNwbGl0IMO8YmVyZ2ViZW4sIHVuYWJow6RuZ2lnIHZvbiBhbS5rZWVwY3IiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUyCittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICJhbGxlcyB2b3IgZWluZXIgU2NoZXJlbi1aZWlsZSBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUzIGJ1aWx0aW4vYXBwbHkuYzo0NTYzCittc2dpZCAiYWN0aW9uIgorbXNnc3RyICJBa3Rpb24iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjU0IGJ1aWx0aW4vYW0uYzoyMjU3IGJ1aWx0aW4vYW0uYzoyMjYwIGJ1aWx0aW4vYW0uYzoyMjYzCisjOiBidWlsdGluL2FtLmM6MjI2NiBidWlsdGluL2FtLmM6MjI2OSBidWlsdGluL2FtLmM6MjI3MiBidWlsdGluL2FtLmM6MjI3NQorIzogYnVpbHRpbi9hbS5jOjIyODEKK21zZ2lkICJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IgorbXNnc3RyICJhbiBnaXQtYXBwbHkgw7xiZXJnZWJlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyNjIgYnVpbHRpbi9hcHBseS5jOjQ1ODcKK21zZ2lkICJyb290IgorbXNnc3RyICJXdXJ6ZWx2ZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9hbS5jOjIyNjUgYnVpbHRpbi9hbS5jOjIyNjggYnVpbHRpbi9hcHBseS5jOjQ1MjUKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTI4IGJ1aWx0aW4vY2xvbmUuYzo4NSBidWlsdGluL2ZldGNoLmM6OTMKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2NworbXNnaWQgInBhdGgiCittc2dzdHIgIlBmYWQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjcxIGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY2OSBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5OCBidWlsdGluL21lcmdlLmM6MTk4IGJ1aWx0aW4vcHVsbC5jOjEyNworIzogYnVpbHRpbi9yZXBhY2suYzoxNzggYnVpbHRpbi9yZXBhY2suYzoxODIgYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NAorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4MCBidWlsdGluL3RhZy5jOjU5MSBwYXJzZS1vcHRpb25zLmg6MTMyCisjOiBwYXJzZS1vcHRpb25zLmg6MTM0IHBhcnNlLW9wdGlvbnMuaDoyNDMKK21zZ2lkICJuIgorbXNnc3RyICJBbnphaGwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc0IGJ1aWx0aW4vYXBwbHkuYzo0NTMxCittc2dpZCAibnVtIgorbXNnc3RyICJBbnphaGwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQgYnVpbHRpbi9yZXBsYWNlLmM6NDM4Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICJGb3JtYXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc4Cittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICJQYXRjaC1Gb3JtYXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg0Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICJNZWxkdW5nIGJlaSBmZWhsZXJoYWZ0ZXIgUGF0Y2gtQW53ZW5kdW5nIMO8YmVyc2NocmVpYmVuIgorCisjOiBidWlsdGluL2FtLmM6MjI4NgorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgIkFud2VuZHVuZyBkZXIgUGF0Y2hlcyBuYWNoIEF1ZmzDtnN1bmcgZWluZXMgS29uZmxpa3RlcyBmb3J0c2V0emVuIgorCisjOiBidWlsdGluL2FtLmM6MjI4OQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICJTeW5vbnltZSBmw7xyIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjkyCittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAiZGVuIGFrdHVlbGxlbiBQYXRjaCBhdXNsYXNzZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk1Cittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAiIgorInVyc3Byw7xuZ2xpY2hlbiBCcmFuY2ggd2llZGVyaGVyc3RlbGxlbiB1bmQgQW53ZW5kdW5nIGRlciBQYXRjaGVzIGFiYnJlY2hlbiIKKworIzogYnVpbHRpbi9hbS5jOjIyOTkKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgIkF1dG9yLURhdHVtIGFscyBDb21taXQtRGF0dW0gdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2FtLmM6MjMwMQorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgImFrdHVlbGxlbiBaZWl0c3RlbXBlbCBhbHMgQXV0b3ItRGF0dW0gdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2FtLmM6MjMwMyBidWlsdGluL2NvbW1pdC5jOjE1OTAgYnVpbHRpbi9tZXJnZS5jOjIyNQorIzogYnVpbHRpbi9wdWxsLmM6MTU1IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIgYnVpbHRpbi90YWcuYzo2MDYKK21zZ2lkICJrZXktaWQiCittc2dzdHIgIkdQRy1TY2hsw7xzc2Vsa2VubnVuZyIKKworIzogYnVpbHRpbi9hbS5jOjIzMDQKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICJDb21taXRzIG1pdCBHUEcgc2lnbmllcmVuIgorCisjOiBidWlsdGluL2FtLmM6MjMwNworbXNnaWQgIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIgorbXNnc3RyICIoaW50ZXJuIGbDvHIgZ2l0LXJlYmFzZSB2ZXJ3ZW5kZXQpIgorCisjOiBidWlsdGluL2FtLmM6MjMyMgorbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorIkRpZSAtYi8tLWJpbmFyeSBPcHRpb24gaGF0IHNlaXQgTGFuZ2VtIGtlaW5lbiBFZmZla3QgdW5kIHdpcmRcbiIKKyJlbnRmZXJudC4gQml0dGUgdmVyd2VuZGVuIFNpZSBkaWVzZSBuaWNodCBtZWhyLiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjkKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlcyBJbmRleCIKKworIzogYnVpbHRpbi9hbS5jOjIzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICJWb3JoZXJpZ2VzIFJlYmFzZS1WZXJ6ZWljaG5pcyAlcyBleGlzdGllcnQgbm9jaCwgYWJlciBtYm94IGdlZ2ViZW4uIgorCisjOiBidWlsdGluL2FtLmM6MjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorIlN0cmF5ICVzIFZlcnplaWNobmlzIGdlZnVuZGVuLlxuIgorIkJlbnV0emVuIFNpZSBcImdpdCBhbSAtLWFib3J0XCIsIHVtIGVzIHp1IGVudGZlcm5lbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzc0Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiRXMgaXN0IGtlaW5lIEF1ZmzDtnN1bmcgaW0gR2FuZ2UsIGVzIHdpcmQgbmljaHQgZm9ydGdlc2V0enQuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NTkKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzxPcHRpb25lbj5dIFs8UGF0Y2g+Li4uXSIKKworIzogYnVpbHRpbi9hcHBseS5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAibmljaHQgZXJrYW5udGUgV2hpdGVzcGFjZS1PcHRpb246ICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2UgaWdub3JlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJuaWNodCBlcmthbm50ZSBPcHRpb24genVtIElnbm9yaWVyZW4gdm9uIFdoaXRlc3BhY2U6ICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHByZXBhcmUgdGltZXN0YW1wIHJlZ2V4cCAlcyIKK21zZ3N0ciAiS2FubiByZWd1bMOkcmVuIEF1c2RydWNrIGbDvHIgWmVpdHN0ZW1wZWwgJXMgbmljaHQgdmVyYXJiZWl0ZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJBdXNmw7xocnVuZyBkZXMgcmVndWzDpHJlbiBBdXNkcnVja3MgZ2FiICVkIHp1csO8Y2suIEVpbmdhYmU6ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIktvbm50ZSBrZWluZW4gRGF0ZWluYW1lbiBpbiBaZWlsZSAlZCBkZXMgUGF0Y2hlcyBmaW5kZW4uIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseTogdW5nw7xsdGlnZXMgJ2dpdC1kaWZmJyAtIGVyd2FydGV0ZSAvZGV2L251bGwsIGVyaGllbHQgJXMgaW4gWmVpbGUgIgorIiVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiB1bmfDvGx0aWdlcyAnZ2l0LWRpZmYnIC0gSW5rb25zaXN0ZW50ZXIgbmV1ZXIgRGF0ZWluYW1lIGluIFplaWxlICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5OiB1bmfDvGx0aWdlcyAnZ2l0LWRpZmYnIC0gSW5rb25zaXN0ZW50ZXIgYWx0ZXIgRGF0ZWluYW1lIGluIFplaWxlICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTU2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogdW5nw7xsdGlnZXMgJ2dpdC1kaWZmJyAtIGVyd2FydGV0ZSAvZGV2L251bGwgaW4gWmVpbGUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb3VudDogdW5lcndhcnRldGUgWmVpbGU6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDc2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIlBhdGNoLUZyYWdtZW50IG9obmUgS29wZmJlcmVpY2ggYmVpIFplaWxlICVkOiAlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQ5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisiRGVtIEtvcGZiZXJlaWNoIHZvbiBcImdpdCBkaWZmXCIgZmVobGVuIEluZm9ybWF0aW9uZW4genVtIERhdGVpbmFtZW4sIHdlbm4gIgorIiVkIHZvcmFuZ2VzdGVsbHRlciBUZWlsIGRlcyBQZmFkZXMgZW50ZmVybnQgd2lyZCAoWmVpbGUgJWQpIgorbXNnc3RyWzFdICIiCisiRGVtIEtvcGZiZXJlaWNoIHZvbiBcImdpdCBkaWZmXCIgZmVobGVuIEluZm9ybWF0aW9uZW4genVtIERhdGVpbmFtZW4sIHdlbm4gIgorIiVkIHZvcmFuZ2VzdGVsbHRlIFRlaWxlIGRlcyBQZmFkZXMgZW50ZmVybnQgd2VyZGVuIChaZWlsZSAlZCkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjU5Cittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIm5ldWUgRGF0ZWkgaMOkbmd0IHZvbiBhbHRlbiBJbmhhbHRlbiBhYiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2NjEKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJlbnRmZXJudGUgRGF0ZWkgaGF0IG5vY2ggSW5oYWx0ZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJmZWhsZXJoYWZ0ZXIgUGF0Y2ggYmVpIFplaWxlICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyMworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAibmV1ZSBEYXRlaSAlcyBow6RuZ3Qgdm9uIGFsdGVuIEluaGFsdGVuIGFiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJlbnRmZXJudGUgRGF0ZWkgJXMgaGF0IG5vY2ggSW5oYWx0ZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiogV2FybnVuZzogRGF0ZWkgJXMgd2lyZCBsZWVyLCBhYmVyIG5pY2h0IGVudGZlcm50LiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAiZmVobGVyaGFmdGVyIEJpbsOkci1QYXRjaCBiZWkgWmVpbGUgJWQ6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxOTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAibmljaHQgZXJrYW5udGVyIEJpbsOkci1QYXRjaCBiZWkgWmVpbGUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgIlBhdGNoIG1pdCBudXR6bG9zZW4gSW5mb3JtYXRpb25lbiBiZWkgWmVpbGUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImtvbm50ZSBzeW1ib2xpc2NoZSBWZXJrbsO8cGZ1bmcgJXMgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgImtvbm50ZSAlcyBuaWNodCDDtmZmbmVuIG9kZXIgbGVzZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgWmVpbGVuYW5mYW5nOiAnJWMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIlBhdGNoLUJlcmVpY2ggIyVkIGVyZm9sZ3JlaWNoIGFuZ2V3ZW5kZXQgYmVpICVkICglZCBaZWlsZSB2ZXJzZXR6dCkiCittc2dzdHJbMV0gIiIKKyJQYXRjaC1CZXJlaWNoICMlZCBlcmZvbGdyZWljaCBhbmdld2VuZGV0IGJlaSAlZCAoJWQgWmVpbGVuIHZlcnNldHp0KSIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGV4dCByZWR1Y2VkIHRvICglbGQvJWxkKSB0byBhcHBseSBmcmFnbWVudCBhdCAlZCIKK21zZ3N0ciAiS29udGV4dCByZWR1emllcnQgenUgKCVsZC8lbGQpLCB1bSBQYXRjaC1CZXJlaWNoIGJlaSAlZCBhbnp1d2VuZGVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICIiCisiYmVpIGRlciBTdWNoZSBuYWNoOlxuIgorIiUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgImtlaW5lIERhdGVuIGluIEJpbsOkci1QYXRjaCBmw7xyICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJLb25udGUgQmluw6RyLVBhdGNoIG5pY2h0IGF1ZiAnJXMnIGFud2VuZGVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzA0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAiIgorIkJpbsOkci1QYXRjaCBmw7xyICclcycgZXJ6ZXVndCBmYWxzY2hlcyBFcmdlYm5pcyAoZXJ3YXJ0ZXRlICVzLCBiZWthbSAlcykiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICJBbndlbmR1bmcgZGVzIFBhdGNoZXMgZmVobGdlc2NobGFnZW46ICVzOiVsZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICJrYW5uICVzIG5pY2h0IGF1c2NoZWNrZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjM1IGJ1aWx0aW4vYXBwbHkuYzozMjQ2IGJ1aWx0aW4vYXBwbHkuYzozMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgb2YgJXMgZmFpbGVkIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIiclcycgaXN0IGhpbnRlciBlaW5lciBzeW1ib2xpc2NoZW4gVmVya27DvHBmdW5nIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI3MSBidWlsdGluL2FwcGx5LmM6MzQ5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAiUGZhZCAlcyB3dXJkZSB1bWJlbmFubnQvZ2Vsw7ZzY2h0IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM1MiBidWlsdGluL2FwcGx5LmM6MzUwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzIGlzdCBuaWNodCBpbSBJbmRleCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMzNTYgYnVpbHRpbi9hcHBseS5jOjM0OTkgYnVpbHRpbi9hcHBseS5jOjM1MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIgorbXNnc3RyICIlczogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzYxIGJ1aWx0aW4vYXBwbHkuYzozNTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXMgZW50c3ByaWNodCBuaWNodCBkZXIgVmVyc2lvbiBpbSBJbmRleCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM0NjMKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICJMw7ZzY2gtUGF0Y2ggaGludGVybMOkc3N0IERhdGVpaW5oYWx0ZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiBmYWxzY2hlciBUeXAiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgaXN0IHZvbSBUeXAgJW8sIGVyd2FydGV0ZSAlbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2OTMgYnVpbHRpbi9hcHBseS5jOjM2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFBmYWQgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlcyBpc3QgYmVyZWl0cyBiZXJlaXRnZXN0ZWxsdCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlcyBleGlzdGllcnQgYmVyZWl0cyBpbSBBcmJlaXRzdmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzczCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSIKK21zZ3N0ciAibmV1ZXIgTW9kdXMgKCVvKSB2b24gJXMgZW50c3ByaWNodCBuaWNodCBkZW0gYWx0ZW4gTW9kdXMgKCVvKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICJuZXVlciBNb2R1cyAoJW8pIHZvbiAlcyBlbnRzcHJpY2h0IG5pY2h0IGRlbSBhbHRlbiBNb2R1cyAoJW8pIHZvbiAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImJldHJvZmZlbmUgRGF0ZWkgJyVzJyBpc3QgaGludGVyIGVpbmVyIHN5bWJvbGlzY2hlbiBWZXJrbsO8cGZ1bmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXM6IFBhdGNoIGtvbm50ZSBuaWNodCBhbmdld2VuZGV0IHdlcmRlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIlByw7xmZSBQYXRjaCAlcyAuLi4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTA5IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzIgYnVpbHRpbi9yZXNldC5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJtYWtlX2NhY2hlX2VudHJ5IGbDvHIgUGZhZCAnJXMnIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgImtvbm50ZSAlcyBuaWNodCBhdXMgZGVtIEluZGV4IGVudGZlcm5lbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJmZWhsZXJoYWZ0ZXIgUGF0Y2ggZsO8ciBTdWJtb2R1bCAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgImtvbm50ZSBuZXUgZXJzdGVsbHRlIERhdGVpICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDkwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICJrYW5uIGludGVybmVuIFNwZWljaGVyIGbDvHIgZWJlbiBlcnN0ZWxsdGUgRGF0ZWkgJXMgbmljaHQgZXJ6ZXVnZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDkzIGJ1aWx0aW4vYXBwbHkuYzo0MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICJrYW5uIGbDvHIgJXMga2VpbmVuIEVpbnRyYWcgaW4gZGVuIFp3aXNjaGVuc3BlaWNoZXIgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICJzY2hsaWXDn2UgRGF0ZWkgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICJrb25udGUgRGF0ZWkgJyVzJyBtaXQgTW9kdXMgJW8gbmljaHQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICJQYXRjaCAlcyBzYXViZXIgYW5nZXdlbmRldCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyNzAKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiaW50ZXJuZXIgRmVobGVyIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDI3MworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIldlbmRlIFBhdGNoICUlcyBtaXQgJWQgWnVyw7xja3dlaXN1bmcgYW4uLi4iCittc2dzdHJbMV0gIldlbmRlIFBhdGNoICUlcyBtaXQgJWQgWnVyw7xja3dlaXN1bmdlbiBhbi4uLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICJWZXJrw7xyemUgTmFtZSB2b24gLnJlaiBEYXRlaSB6dSAlLipzLnJlaiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiUGF0Y2gtQmVyZWljaCAjJWQgc2F1YmVyIGFuZ2V3ZW5kZXQuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwNworIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIlBhdGNoLUJsb2NrICMlZCB6dXLDvGNrZ2V3aWVzZW4uIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM5NworbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAibmljaHQgZXJrYW5udGUgRWluZ2FiZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ0MDgKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgSW5kZXgtRGF0ZWkgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTI2Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAia2VpbmUgw4RuZGVydW5nZW4gaW0gYW5nZWdlYmVuZW4gUGZhZCBhbndlbmRlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MjkKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLDhG5kZXJ1bmdlbiBudXIgaW0gYW5nZWdlYmVuZW4gUGZhZCBhbndlbmRlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MzIKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAiIgorIjxBbnphaGw+IHZvcmFuZ2VzdGVsbHRlIFNjaHLDpGdzdHJpY2hlIHZvbiBoZXJrw7ZtbWxpY2hlbiBEaWZmZXJlbnpwZmFkZW4gIgorImVudGZlcm5lbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MzUKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJoaW56dWdlZsO8Z3RlIFplaWxlbiBkZXMgUGF0Y2hlcyBpZ25vcmllcmVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUzNworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiIgorImFuc3RhdHQgZGVyIEFud2VuZHVuZyBkZXMgUGF0Y2hlcywgZGVuIFwiZGlmZnN0YXRcIiBmw7xyIGRpZSBFaW5nYWJlICIKKyJhdXNnZWdlYmVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0MQorbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIiIKKyJkaWUgQW56YWhsIHZvbiBoaW56dWdlZsO8Z3Rlbi9lbnRmZXJudGVuIFplaWxlbiBpbiBEZXppbWFsbm90YXRpb24gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiIgorImFuc3RhdHQgZGVyIEFud2VuZHVuZyBkZXMgUGF0Y2hlcywgZWluZSBadXNhbW1lbmZhc3N1bmcgZsO8ciBkaWUgRWluZ2FiZSAiCisiYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQ1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAiIgorImFuc3RhdHQgZGVyIEFud2VuZHVuZyBkZXMgUGF0Y2hlcywgemVpZ2Ugb2IgUGF0Y2ggYW5nZXdlbmRldCB3ZXJkZW4ga2FubiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDcKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgIiIKKyJzaWNoZXJzdGVsbGVuLCBkYXNzIGRlciBQYXRjaCBtaXQgZGVtIGFrdHVlbGxlbiBJbmRleCBhbmdld2VuZGV0IHdlcmRlbiBrYW5uIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0OQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICJQYXRjaCBhbndlbmRlbiwgb2huZSDDhG5kZXJ1bmdlbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgdm9yenVuZWhtZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTUxCittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAiIgorIlBhdGNoIGFud2VuZGVuLCBkZXIgw4RuZGVydW5nZW4gYXXDn2VyaGFsYiBkZXMgQXJiZWl0c3ZlcnplaWNobmlzc2VzIHZvcm5pbW10IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1MworbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICJQYXRjaCBhbndlbmRlbiAoQmVudXR6dW5nIG1pdCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1NQorbXNnaWQgImF0dGVtcHQgdGhyZWUtd2F5IG1lcmdlIGlmIGEgcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgInZlcnN1Y2hlIDMtV2VnZS1NZXJnZSwgd2VubiBkZXIgUGF0Y2ggbmljaHQgYW5nZXdlbmRldCB3ZXJkZW4ga29ubnRlIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1NworbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisiZWluZW4gdGVtcG9yw6RyZW4gSW5kZXgsIGJhc2llcmVuZCBhdWYgZGVuIGludGVncmllcnRlbiBJbmRleC1JbmZvcm1hdGlvbmVuLCAiCisiZXJzdGVsbGVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1OSBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTk4IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTIKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiUGZhZGUgc2luZCBnZXRyZW5udCBkdXJjaCBOVUwgWmVpY2hlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NjIKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgIiIKKyJzaWNoZXIgc3RlbGxlbiwgZGFzcyBtaW5kZXN0ZW5zIDxuPiBaZWlsZW4gZGVzIEtvbnRleHRlcyDDvGJlcmVpbnN0aW1tZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTY0Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIm5ldWUgb2RlciBnZcOkbmRlcnRlIFplaWxlbiwgZGllIFdoaXRlc3BhY2UtRmVobGVyIGhhYmVuLCBlcm1pdHRlbG4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTY3IGJ1aWx0aW4vYXBwbHkuYzo0NTcwCittc2dpZCAiaWdub3JlIGNoYW5nZXMgaW4gd2hpdGVzcGFjZSB3aGVuIGZpbmRpbmcgY29udGV4dCIKK21zZ3N0ciAiw4RuZGVydW5nZW4gaW0gV2hpdGVzcGFjZSBiZWkgZGVyIFN1Y2hlIGRlcyBLb250ZXh0ZXMgaWdub3JpZXJlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzMKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiZGVuIFBhdGNoIGluIHVtZ2VrZWhydGVyIFJlaWhlbmZvbGdlIGFud2VuZGVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3NQorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICJrZWluZW4gS29udGV4dCBlcndhcnRlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzcKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAiIgorInp1csO8Y2tnZXdpZXNlbmUgUGF0Y2gtQmzDtmNrZSBpbiBlbnRzcHJlY2hlbmRlbiAqLnJlaiBEYXRlaWVuIGhpbnRlcmxhc3NlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzkKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAic2ljaCDDvGJlcmxhcHBlbmRlIFBhdGNoLUJsw7Zja2UgZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTgyCittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgImZlaGxlcmhhZnQgZXJrYW5udGVuIGZlaGxlbmRlbiBaZWlsZW51bWJydWNoIGFtIERhdGVpZW5kZSB0b2xlcmllcmVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU4NQorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAiZGVuIFplaWxlbm51bW1lcm4gaW0gS29wZiBkZXMgUGF0Y2gtQmxvY2tzIG5pY2h0IHZlcnRyYXVlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODgKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICI8V3VyemVsdmVyemVpY2huaXM+IHZvciBhbGxlIERhdGVpbmFtZW4gc3RlbGxlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MTAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uIC0tM3dheSBrYW5uIG5pY2h0IGF1w59lcmhhbGIgZWluZXMgUmVwb3NpdG9yaWVzIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDYxOAorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uIC0taW5kZXgga2FubiBuaWNodCBhdcOfZXJoYWxiIGVpbmVzIFJlcG9zaXRvcmllcyB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MjEKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb24gLS1jYWNoZWQga2FubiBuaWNodCBhdcOfZXJoYWxiIGVpbmVzIFJlcG9zaXRvcmllcyB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnIgorbXNnc3RyICJrYW5uIFBhdGNoICclcycgbmljaHQgw7ZmZm5lbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAidW50ZXJkcsO8Y2t0ZSAlZCBXaGl0ZXNwYWNlLUZlaGxlciIKK21zZ3N0clsxXSAidW50ZXJkcsO8Y2t0ZSAlZCBXaGl0ZXNwYWNlLUZlaGxlciIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2NjAgYnVpbHRpbi9hcHBseS5jOjQ2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgWmVpbGUgZsO8Z3QgV2hpdGVzcGFjZS1GZWhsZXIgaGluenUuIgorbXNnc3RyWzFdICIlZCBaZWlsZW4gZsO8Z2VuIFdoaXRlc3BhY2UtRmVobGVyIGhpbnp1LiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIEFyY2hpdi1EYXRlaSAnJXMnIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAiS29ubnRlIEF1c2dhYmUgbmljaHQgdW1sZWl0ZW4uIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzozNworbXNnaWQgImdpdCBhcmNoaXZlOiBSZW1vdGUgd2l0aCBubyBVUkwiCittc2dzdHIgImdpdCBhcmNoaXZlOiBFeHRlcm5lcyBBcmNoaXYgb2huZSBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjU4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBFT0YiCittc2dzdHIgImdpdCBhcmNoaXZlOiBoYWJlIEFDSy9OQUsgZXJ3YXJ0ZXQsIGFiZXIgRU9GIGJla29tbWVuIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgIkZlaGxlciBhbSBhbmRlcmVuIEVuZGU6ICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IFByb3Rva29sbGZlaGxlciIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGVyd2FydGV0ZSBlaW5lIFNww7xsdW5nIChmbHVzaCkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNworbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgIidnaXQgYmlzZWN0IG5leHQnIGF1c2bDvGhyZW4iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxOQorbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgIkJJU0VDVF9IRUFEIGFrdHVhbGlzaWVyZW4sIGFuc3RhdHQgZGVuIGFrdHVlbGxlbiBDb21taXQgYXVzenVjaGVja2VuIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzIKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgImdpdCBibGFtZSBbPE9wdGlvbmVuPl0gWzxyZXYtb3B0cz5dIFs8Q29tbWl0Pl0gWy0tXSA8RGF0ZWk+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzcKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiPHJldi1vcHRzPiBzaW5kIGRva3VtZW50aWVydCBpbiBnaXQtcmV2LWxpc3QoMSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTAwCittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAiXCJibGFtZVwiLUVpbnRyw6RnZSBzY2hyaXR0d2Vpc2UgYW56ZWlnZW4sIHfDpGhyZW5kIHdpciBzaWUgZ2VuZXJpZXJlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDEKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJsZWVyZSBTSEEtMSBmw7xyIEdyZW56LUNvbW1pdHMgYW56ZWlnZW4gKFN0YW5kYXJkOiBhdXMpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVXJzcHJ1bmdzLUNvbW1pdCBuaWNodCBhbHMgR3JlbnplbiBiZWhhbmRlbG4gKFN0YW5kYXJkOiBhdXMpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIlN0YXRpc3Rpa2VuIHp1bSBBcmJlaXRzYXVmd2FuZCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDQKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAiQXVzZ2FiZWJld2VydHVuZyBmw7xyIFwiYmxhbWVcIi1FaW50csOkZ2UgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA1Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgInVyc3Byw7xuZ2xpY2hlbiBEYXRlaW5hbWVuIGFuemVpZ2VuIChTdGFuZGFyZDogYXV0bykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA2Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJ1cnNwcsO8bmdsaWNoZSBaZWlsZW5udW1tZXIgYW56ZWlnZW4gKFN0YW5kYXJkOiBhdXMpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwNworbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIkFuemVpZ2UgaW4gZWluZW0gRm9ybWF0IGbDvHIgbWFzY2hpbmVsbGUgQXVzd2VydHVuZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDgKK21zZ2lkICJTaG93IHBvcmNlbGFpbiBmb3JtYXQgd2l0aCBwZXItbGluZSBjb21taXQgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKyJBbnplaWdlIGluIEZvcm1hdCBmw7xyIEZyZW1kcHJvZ3JhbW1lIG1pdCBDb21taXQtSW5mb3JtYXRpb25lbiBwcm8gWmVpbGUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA5Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIkRlbiBnbGVpY2hlbiBBdXNnYWJlbW9kdXMgYmVudXR6ZW4gd2llIFwiZ2l0LWFubm90YXRlXCIgKFN0YW5kYXJkOiBhdXMpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMAorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVW5iZWFyYmVpdGV0ZW4gWmVpdHN0ZW1wZWwgYW56ZWlnZW4gKFN0YW5kYXJkOiBhdXMpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMQorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiTGFuZ2VuIENvbW1pdC1TSEExIGFuemVpZ2VuIChTdGFuZGFyZDogYXVzKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTIKK21zZ2lkICJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJEZW4gTmFtZW4gZGVzIEF1dG9ycyB1bmQgZGVuIFplaXRzdGVtcGVsIHVudGVyZHLDvGNrZW4gKFN0YW5kYXJkOiBhdXMpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMworbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorIkFuc3RhdHQgZGVzIE5hbWVucyBkaWUgRS1NYWlsLUFkcmVzc2UgZGVzIEF1dG9ycyBhbnplaWdlbiAoU3RhbmRhcmQ6IGF1cykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE0Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIlVudGVyc2NoaWVkZSBpbSBXaGl0ZXNwYWNlIGlnbm9yaWVyZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE1Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICJMw6RuZ2VyIGFyYmVpdGVuLCB1bSBiZXNzZXJlIMOcYmVyZWluc3RpbW11bmdlbiB6dSBmaW5kZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE2Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICJDb21taXRzIHZvbiA8RGF0ZWk+IGJlbnV0emVuLCBhbnN0YXR0IFwiZ2l0LXJldi1saXN0XCIgYXVmenVydWZlbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTcKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICJJbmhhbHRlIGRlciA8RGF0ZWk+ZW4gYWxzIGVuZGfDvGx0aWdlcyBBYmJpbGQgYmVudXR6ZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE4IGJ1aWx0aW4vYmxhbWUuYzoyNTE5Cittc2dpZCAic2NvcmUiCittc2dzdHIgIkJld2VydHVuZyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTgKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJrb3BpZXJ0ZSBaZWlsZW4gaW5uZXJoYWxiIG9kZXIgendpc2NoZW4gRGF0ZWllbiBmaW5kZW4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE5Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAidmVyc2Nob2JlbmUgWmVpbGVuIGlubmVyaGFsYiBvZGVyIHp3aXNjaGVuIERhdGVpZW4gZmluZGVuIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUyMAorbXNnaWQgIm4sbSIKK21zZ3N0ciAibixtIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUyMAorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICJudXIgWmVpbGVuIGltIEJlcmVpY2ggbixtIHZlcmFyYmVpdGVuLCBnZXrDpGhsdCB2b24gMSIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUgbWF4aW11bQorIy4gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4gImdpdCBibGFtZSIKKyMuIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iLCB3aGljaAorIy4gdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdCBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mCisjLiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQgeW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yCisjLiBmZXdlciBkaXNwbGF5IGNvbHVtbnMuCisjOiBidWlsdGluL2JsYW1lLmM6MjYwMQorbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgInZvciA0IEphaHJlbiwgdW5kIDExIE1vbmF0ZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxPcHRpb25lbj5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjUKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstbF0gWy1mXSA8YnJhbmNoLW5hbWU+IFs8c3RhcnQtcG9pbnQ+XSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPE9wdGlvbmVuPl0gWy1sXSBbLWZdIDxCcmFuY2huYW1lPiBbPFN0YXJ0cHVua3Q+XSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNgorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPGJyYW5jaC1uYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPE9wdGlvbmVuPl0gWy1yXSAoLWQgfCAtRCkgPEJyYW5jaG5hbWU+Li4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8T3B0aW9uZW4+XSAoLW0gfCAtTSkgWzxhbHRlci1CcmFuY2g+XSA8bmV1ZXItQnJhbmNoPiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisiZW50ZmVybmUgQnJhbmNoICclcycsIGRlciB6dXNhbW1lbmdlZsO8aHJ0IHd1cmRlIG1pdFxuIgorIiAgICAgICAgICclcycsIGFiZXIgbm9jaCBuaWNodCBtaXQgSEVBRCB6dXNhbW1lbmdlZsO8aHJ0IHd1cmRlLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisiZW50ZmVybmUgQnJhbmNoICclcycgbmljaHQsIGRlciBub2NoIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnQgd3VyZGUgbWl0XG4iCisiICAgICAgICAgJyVzJywgb2J3b2hsIGVyIG1pdCBIRUFEIHp1c2FtbWVuZ2Vmw7xocnQgd3VyZGUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIktvbm50ZSBDb21taXQtT2JqZWt0IGbDvHIgJyVzJyBuaWNodCBuYWNoc2NobGFnZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKyJEZXIgQnJhbmNoICclcycgaXN0IG5pY2h0IHZvbGxzdMOkbmRpZyB6dXNhbW1lbmdlZsO8aHJ0LlxuIgorIldlbm4gU2llIHNpY2hlciBzaW5kIGRpZXNlbiBCcmFuY2ggenUgZW50ZmVybmVuLCBmw7xocmVuIFNpZSAnZ2l0IGJyYW5jaCAtRCAiCisiJXMnIGF1cy4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTg1Cittc2dpZCAiVXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiQWt0dWFsaXNpZXJ1bmcgZGVyIEtvbmZpZ3VyYXRpb25zZGF0ZWkgZmVobGdlc2NobGFnZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxMworbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAia2FubiAtYSBuaWNodCBtaXQgLWQgYmVudXR6ZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE5Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICJLb25udGUgQ29tbWl0LU9iamVrdCBmw7xyIEhFQUQgbmljaHQgbmFjaHNjaGxhZ2VuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgYnJhbmNoICclcycgd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgb24uIgorbXNnc3RyICIiCisiS2FubiBCcmFuY2ggJyVzJyBuaWNodCBlbnRmZXJuZW4sIGRhIFNpZSBzaWNoIGdlcmFkZSBhdWYgZGllc2VtIGJlZmluZGVuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIlJlbW90ZS1UcmFja2luZy1CcmFuY2ggJyVzJyBuaWNodCBnZWZ1bmRlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiQnJhbmNoICclcycgbmljaHQgZ2VmdW5kZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkZlaGxlciBiZWltIEVudGZlcm5lbiBkZXMgUmVtb3RlLVRyYWNraW5nLUJyYW5jaGVzICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBFbnRmZXJuZW4gZGVzIEJyYW5jaGVzICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiUmVtb3RlLVRyYWNraW5nLUJyYW5jaCAlcyBlbnRmZXJudCAod2FyICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIkJyYW5jaCAlcyBlbnRmZXJudCAod2FyICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgcG9pbnQgYXQgYSBjb21taXQiCittc2dzdHIgIkJyYW5jaCAnJXMnIHplaWd0IGF1ZiBrZWluZW4gQ29tbWl0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGdvbmVdIgorbXNnc3RyICJbJXM6IGVudGZlcm50XSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzXSIKK21zZ3N0ciAiWyVzXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBiZWhpbmQgJWRdIgorbXNnc3RyICJbJXM6ICVkIGhpbnRlcmhlcl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIltiZWhpbmQgJWRdIgorbXNnc3RyICJbJWQgaGludGVyaGVyXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBhaGVhZCAlZF0iCittc2dzdHIgIlslczogJWQgdm9yYXVzXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkXSIKK21zZ3N0ciAiWyVkIHZvcmF1c10iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYWhlYWQgJWQsIGJlaGluZCAlZF0iCittc2dzdHIgIlslczogJWQgdm9yYXVzLCAlZCBoaW50ZXJoZXJdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJbYWhlYWQgJWQsIGJlaGluZCAlZF0iCittc2dzdHIgIlslZCB2b3JhdXMsICVkIGhpbnRlcmhlcl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDg5Cittc2dpZCAiICoqKiogaW52YWxpZCByZWYgKioqKiIKK21zZ3N0ciAiICoqKiogdW5nw7xsdGlnZSBSZWZlcmVueiAqKioqIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCByZWJhc2luZyAlcykiCittc2dzdHIgIihrZWluIEJyYW5jaCwgUmViYXNlIHZvbiBCcmFuY2ggJXMgaW0gR2FuZ2UpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcykiCittc2dzdHIgIihrZWluIEJyYW5jaCwgYmluw6RyZSBTdWNoZSBiZWdvbm5lbiBiZWkgJXMpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCittc2dzdHIgIihIRUFEIGxvc2dlbMO2c3QgYmVpICVzKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiKEhFQUQgZGV0YWNoZWQgZnJvbSAlcykiCittc2dzdHIgIihIRUFEIGxvc2dlbMO2c3Qgdm9uICVzKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTYKK21zZ2lkICIobm8gYnJhbmNoKSIKK21zZ3N0ciAiKGtlaW4gQnJhbmNoKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIk9iamVrdCAnJXMnIHplaWd0IGF1ZiBrZWluZW4gQ29tbWl0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY5MQorbXNnaWQgInNvbWUgcmVmcyBjb3VsZCBub3QgYmUgcmVhZCIKK21zZ3N0ciAiS29ubnRlIGVpbmlnZSBSZWZlcmVuemVuIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwNAorbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICIiCisiS2FubiBha3R1ZWxsZW4gQnJhbmNoIG5pY2h0IHVtYmVuZW5uZW4sIHNvbGFuZ2UgU2llIHNpY2ggYXVmIGtlaW5lbSBiZWZpbmRlbi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEJyYW5jaG5hbWU6ICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzI5Cittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIlVtYmVuZW5udW5nIGRlcyBCcmFuY2hlcyBmZWhsZ2VzY2hsYWdlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgImZhbHNjaCBiZW5hbm50ZW4gQnJhbmNoICclcycgdW1iZW5hbm50IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICJCcmFuY2ggdW1iZW5hbm50IHp1ICVzLCBhYmVyIEhFQUQgaXN0IG5pY2h0IGFrdHVhbGlzaWVydCEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzQ0Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisiQnJhbmNoIGlzdCB1bWJlbmFubnQsIGFiZXIgZGllIEFrdHVhbGlzaWVydW5nIGRlciBLb25maWd1cmF0aW9uc2RhdGVpIGlzdCAiCisiZmVobGdlc2NobGFnZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIk1pc3NnZWJpbGRldGVyIE9iamVrdG5hbWUgJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBicmFuY2ggZGVzY3JpcHRpb24gdGVtcGxhdGU6ICVzIgorbXNnc3RyICJLb25udGUgQmVzY2hyZWlidW5nc3ZvcmxhZ2UgZsO8ciBCcmFuY2ggbmljaHQgc2NocmVpYmVuOiAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTEKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgIkFsbGdlbWVpbmUgT3B0aW9uZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODEzCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgIkhhc2ggdW5kIEJldHJlZmYgYW56ZWlnZW47IC12djogenVzw6R0emxpY2ggVXBzdHJlYW0tQnJhbmNoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNAorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgIkluZm9ybWF0aW9uc21lbGR1bmdlbiB1bnRlcmRyw7xja2VuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNQorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJkZW4gw5xiZXJuYWhtZW1vZHVzIGVpbnN0ZWxsZW4gKHNpZWhlIGdpdC1wdWxsKDEpKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTcKK21zZ2lkICJjaGFuZ2UgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiSW5mb3JtYXRpb25lbiB6dW0gVXBzdHJlYW0tQnJhbmNoIMOkbmRlcm4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJmYXJiaWdlIEF1c2dhYmVuIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjIKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJhdWYgUmVtb3RlLVRyYWNraW5nLUJyYW5jaGVzIHdpcmtlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjUgYnVpbHRpbi9icmFuY2guYzo4MzEgYnVpbHRpbi9icmFuY2guYzo4NTIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODU4IGJ1aWx0aW4vY29tbWl0LmM6MTU4MCBidWlsdGluL2NvbW1pdC5jOjE1ODEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MiBidWlsdGluL2NvbW1pdC5jOjE1ODMgYnVpbHRpbi90YWcuYzo2MTgKKyM6IGJ1aWx0aW4vdGFnLmM6NjI0CiBtc2dpZCAiY29tbWl0IgotbXNnc3RyICJWZXJzaW9uIG5hY2giCittc2dzdHIgIkNvbW1pdCIKIAotIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3Ci0jOiBnaXRrOjY5MTIKLW1zZ2lkICJjb250YWluaW5nOiIKLW1zZ3N0ciAiQmVzY2hyZWlidW5nOiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODI2IGJ1aWx0aW4vYnJhbmNoLmM6ODMyCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAibnVyIEJyYW5jaGVzIGF1c2dlYmVuLCB3ZWxjaGUgZGllc2VuIENvbW1pdCBiZWluaGFsdGVuIgogCi0jOiBnaXRrOjIzMDIgZ2l0azozNTI2IGdpdGs6MzUzMSBnaXRrOjQ3NjMKLW1zZ2lkICJ0b3VjaGluZyBwYXRoczoiCi1tc2dzdHIgIkRhdGVpZW46IgorIzogYnVpbHRpbi9icmFuY2guYzo4MzgKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICJzcGV6aWZpc2NoZSBBa3Rpb25lbiBmw7xyIFwiZ2l0LWJyYW5jaFwiOiIKIAotIzogZ2l0azoyMzAzIGdpdGs6NDc3NwotbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgotbXNnc3RyICLDhG5kZXJ1bmdlbjoiCisjOiBidWlsdGluL2JyYW5jaC5jOjgzOQorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJSZW1vdGUtVHJhY2tpbmcgdW5kIGxva2FsZSBCcmFuY2hlcyBhdWZsaXN0ZW4iCiAKLSM6IGdpdGs6MjMwNCBnaXRrOjQ3NzkKLW1zZ2lkICJjaGFuZ2luZyBsaW5lcyBtYXRjaGluZzoiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICJ2b2xsc3TDpG5kaWcgenVzYW1tZW5nZWbDvGhydGVuIEJyYW5jaCBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQyCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAiQnJhbmNoIGzDtnNjaGVuIChhdWNoIHdlbm4gbmljaHQgenVzYW1tZW5nZWbDvGhydCkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImVpbmVuIEJyYW5jaCB1bmQgZGVzc2VuIFJlZmxvZyB2ZXJzY2hpZWJlbi91bWJlbmVubmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NAorbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoLCBldmVuIGlmIHRhcmdldCBleGlzdHMiCiBtc2dzdHIgIiIKKyJlaW5lbiBCcmFuY2ggdmVyc2NoaWViZW4vdW1iZW5lbm5lbiwgYXVjaCB3ZW5uIGRhcyBaaWVsIGJlcmVpdHMgZXhpc3RpZXJ0IgogCi0jOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDc2NgotbXNnaWQgIkV4YWN0IgotbXNnc3RyICJFeGFrdCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ1Cittc2dpZCAibGlzdCBicmFuY2ggbmFtZXMiCittc2dzdHIgIkJyYW5jaG5hbWVuIGF1Zmxpc3RlbiIKIAotIzogZ2l0azoyMzE1IGdpdGs6NDg1NCBnaXRrOjY3MjMKLW1zZ2lkICJJZ25DYXNlIgotbXNnc3RyICJLZWluIEdyb8OfL0tsZWluIgorIzogYnVpbHRpbi9icmFuY2guYzo4NDYKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAiZGFzIFJlZmxvZyBkZXMgQnJhbmNoZXMgZXJ6ZXVnZW4iCiAKLSM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQotbXNnaWQgIlJlZ2V4cCIKLW1zZ3N0ciAiUmVnZXhwIgorIzogYnVpbHRpbi9icmFuY2guYzo4NDgKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAiZGllIEJlc2NocmVpYnVuZyBmw7xyIGRlbiBCcmFuY2ggYmVhcmJlaXRlbiIKIAotIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzQgZ2l0azo0OTA0IGdpdGs6NDkxMSBnaXRrOjY4NDggZ2l0azo2OTE2Ci1tc2dpZCAiQWxsIGZpZWxkcyIKLW1zZ3N0ciAiQWxsZSBGZWxkZXIiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0OQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgIkVyc3RlbGx1bmcsIFZlcnNjaGllYnVuZy9VbWJlbmVubnVuZyBvZGVyIEzDtnNjaHVuZyBlcnp3aW5nZW4iCiAKLSM6IGdpdGs6MjMxOCBnaXRrOjQ4NzEgZ2l0azo0OTA0IGdpdGs6Njc4NgotbXNnaWQgIkhlYWRsaW5lIgotbXNnc3RyICLDnGJlcnNjaHJpZnQiCisjOiBidWlsdGluL2JyYW5jaC5jOjg1MgorbXNnaWQgInByaW50IG9ubHkgbm90IG1lcmdlZCBicmFuY2hlcyIKK21zZ3N0ciAibnVyIEJyYW5jaGVzIGF1c2dlYmVuLCBkaWUgbmljaHQgenVzYW1tZW5nZWbDvGhydCBzaW5kIgogCi0jOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjY5MTYgZ2l0azo3Mzg5Ci1tc2dpZCAiQ29tbWVudHMiCi1tc2dzdHIgIkJlc2NocmVpYnVuZyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODU4Cittc2dpZCAicHJpbnQgb25seSBtZXJnZWQgYnJhbmNoZXMiCittc2dzdHIgIm51ciBCcmFuY2hlcyBhdXNnZWJlbiwgZGllIHp1c2FtbWVuZ2Vmw7xocnQgc2luZCIKIAotIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjQ4NzYgZ2l0azo0OTExIGdpdGs6Njc4NiBnaXRrOjczMjQgZ2l0azo4ODMwCi0jOiBnaXRrOjg4NDUKLW1zZ2lkICJBdXRob3IiCi1tc2dzdHIgIkF1dG9yIgorIzogYnVpbHRpbi9icmFuY2guYzo4NjIKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgIkJyYW5jaGVzIGluIFNwYWx0ZW4gYXVmbGlzdGVuIgogCi0jOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKLW1zZ2lkICJDb21taXR0ZXIiCi1tc2dzdHIgIkVpbnRyYWdlbmRlciIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODc1Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIktvbm50ZSBIRUFEIG5pY2h0IGFscyBnw7xsdGlnZSBSZWZlcmVueiBhdWZsw7ZzZW4uIgogCi0jOiBnaXRrOjIzNTAKLW1zZ2lkICJTZWFyY2giCi1tc2dzdHIgIlN1Y2hlbiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODc5IGJ1aWx0aW4vY2xvbmUuYzo2OTAKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiSEVBRCB3dXJkZSBuaWNodCB1bnRlciBcInJlZnMvaGVhZHNcIiBnZWZ1bmRlbiEiCiAKLSM6IGdpdGs6MjM1OAotbXNnaWQgIkRpZmYiCi1tc2dzdHIgIlZlcmdsZWljaCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTAxCittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1jb2x1bW4gdW5kIC0tdmVyYm9zZSBzaW5kIGlua29tcGF0aWJlbC4iCiAKLSM6IGdpdGs6MjM2MAotbXNnaWQgIk9sZCB2ZXJzaW9uIgotbXNnc3RyICJBbHRlIFZlcnNpb24iCisjOiBidWlsdGluL2JyYW5jaC5jOjkxMiBidWlsdGluL2JyYW5jaC5jOjk1MQorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJCcmFuY2huYW1lIGVyZm9yZGVybGljaCIKIAotIzogZ2l0azoyMzYyCi1tc2dpZCAiTmV3IHZlcnNpb24iCi1tc2dzdHIgIk5ldWUgVmVyc2lvbiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTI3Cittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAienUgbG9zZ2Vsw7ZzdGVtIEhFQUQga2FubiBrZWluZSBCZXNjaHJlaWJ1bmcgaGludGVybGVndCB3ZXJkZW4iCiAKLSM6IGdpdGs6MjM2NAotbXNnaWQgIkxpbmVzIG9mIGNvbnRleHQiCi1tc2dzdHIgIktvbnRleHR6ZWlsZW4iCisjOiBidWlsdGluL2JyYW5jaC5jOjkzMgorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICJCZXNjaHJlaWJ1bmcgdm9uIG1laHIgYWxzIGVpbmVtIEJyYW5jaCBrYW5uIG5pY2h0IGJlYXJiZWl0ZXQgd2VyZGVuIgogCi0jOiBnaXRrOjIzNzQKLW1zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgotbXNnc3RyICJMZWVyemVpY2hlbsOkbmRlcnVuZ2VuIGlnbm9yaWVyZW4iCisjOiBidWlsdGluL2JyYW5jaC5jOjkzOQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAiTm9jaCBrZWluIENvbW1pdCBpbiBCcmFuY2ggJyVzJy4iCiAKLSM6IGdpdGs6MjM3OCBnaXRrOjIzODAgZ2l0azo3OTU5IGdpdGs6ODIwNgotbXNnaWQgIkxpbmUgZGlmZiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAiQnJhbmNoICclcycgbmljaHQgdm9yaGFuZGVuLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo5NTcKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyBmb3IgYSByZW5hbWUgb3BlcmF0aW9uIgorbXNnc3RyICJ6dSB2aWVsZSBCcmFuY2hlcyBmw7xyIGVpbmUgVW1iZW5lbm5lbi1PcGVyYXRpb24gYW5nZWdlYmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjk2MgorbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIHRvIHNldCBuZXcgdXBzdHJlYW0iCittc2dzdHIgInp1IHZpZWxlIEJyYW5jaGVzIGFuZ2VnZWJlbiwgdW0gVXBzdHJlYW0tQnJhbmNoIHp1IHNldHplbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgogbXNnc3RyICIiCisiS29ubnRlIGtlaW5lbiBuZXVlbiBVcHN0cmVhbS1CcmFuY2ggdm9uIEhFQUQgenUgJXMgc2V0emVuLCBkYSBkaWVzZXIgYXVmXG4iCisia2VpbmVuIEJyYW5jaCB6ZWlndC4iCiAKLSM6IGdpdGs6MjQ0NQotbXNnaWQgIlBhdGNoIgotbXNnc3RyICJQYXRjaCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTY5IGJ1aWx0aW4vYnJhbmNoLmM6OTkxIGJ1aWx0aW4vYnJhbmNoLmM6MTAxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICJLZWluIHNvbGNoZXIgQnJhbmNoICclcyciCiAKLSM6IGdpdGs6MjQ0NwotbXNnaWQgIlRyZWUiCi1tc2dzdHIgIkJhdW0iCisjOiBidWlsdGluL2JyYW5jaC5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiQnJhbmNoICclcycgZXhpc3RpZXJ0IG5pY2h0IgogCi0jOiBnaXRrOjI2MTcgZ2l0azoyNjM3Ci1tc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgotbXNnc3RyICJWZXJnbGVpY2g6IGRpZXNlIC0+IGdld8OkaGx0ZSIKLQotIzogZ2l0azoyNjE4IGdpdGs6MjYzOAotbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKLW1zZ3N0ciAiVmVyZ2xlaWNoOiBnZXfDpGhsdGUgLT4gZGllc2UiCi0KLSM6IGdpdGs6MjYxOSBnaXRrOjI2MzkKLW1zZ2lkICJNYWtlIHBhdGNoIgotbXNnc3RyICJQYXRjaCBlcnN0ZWxsZW4iCi0KLSM6IGdpdGs6MjYyMCBnaXRrOjkyNTQKLW1zZ2lkICJDcmVhdGUgdGFnIgotbXNnc3RyICJNYXJraWVydW5nIGVyc3RlbGxlbiIKLQotIzogZ2l0azoyNjIxIGdpdGs6OTM3MQotbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgotbXNnc3RyICJWZXJzaW9uIGluIERhdGVpIHNjaHJlaWJlbiIKLQotIzogZ2l0azoyNjIyIGdpdGs6OTQyOAotbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgotbXNnc3RyICJOZXVlbiBad2VpZyBlcnN0ZWxsZW4iCi0KLSM6IGdpdGs6MjYyMwotbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgotbXNnc3RyICJEaWVzZSBWZXJzaW9uIHBmbMO8Y2tlbiIKLQotIzogZ2l0azoyNjI0Ci1tc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKLW1zZ3N0ciAiSEVBRC1ad2VpZyBhdWYgZGllc2UgVmVyc2lvbiB6dXLDvGNrc2V0emVuIgotCi0jOiBnaXRrOjI2MjUKLW1zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgotbXNnc3RyICJMZXNlemVpY2hlbiBzZXR6ZW4iCi0KLSM6IGdpdGs6MjYyNgotbXNnaWQgIlJldHVybiB0byBtYXJrIgotbXNnc3RyICJadW0gTGVzZXplaWNoZW4iCi0KLSM6IGdpdGs6MjYyNwotbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgotbXNnc3RyICJBYmvDtm1tbGluZyB2b24gTGVzZXplaWNoZW4gdW5kIGRpZXNlciBWZXJzaW9uIGZpbmRlbiIKLQotIzogZ2l0azoyNjI4Ci1tc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCi1tc2dzdHIgIk1pdCBMZXNlemVpY2hlbiB2ZXJnbGVpY2hlbiIKLQotIzogZ2l0azoyNjI5IGdpdGs6MjY0MAotIywgZnV6enkKLW1zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKLW1zZ3N0ciAiVmVyZ2xlaWNoOiBkaWVzZSAtPiBnZXfDpGhsdGUiCi0KLSM6IGdpdGs6MjYzMCBnaXRrOjI2NDEKLSMsIGZ1enp5Ci1tc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCi1tc2dzdHIgIlZlcmdsZWljaDogZ2V3w6RobHRlIC0+IGRpZXNlIgotCi0jOiBnaXRrOjI2MzEKLSMsIGZ1enp5Ci1tc2dpZCAiUmV2ZXJ0IHRoaXMgY29tbWl0IgotbXNnc3RyICJMZXNlemVpY2hlbiBzZXR6ZW4iCi0KLSM6IGdpdGs6MjY0NwotbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKLW1zZ3N0ciAiQXVmIGRpZXNlbiBad2VpZyB1bXN0ZWxsZW4iCi0KLSM6IGdpdGs6MjY0OAotbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKLW1zZ3N0ciAiWndlaWcgbMO2c2NoZW4iCi0KLSM6IGdpdGs6MjY0OQotbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCisjOiBidWlsdGluL2JyYW5jaC5jOjk4NQorbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIHRvIHVuc2V0IHVwc3RyZWFtIgogbXNnc3RyICIiCisienUgdmllbGUgQnJhbmNoZXMgYW5nZWdlYmVuLCB1bSBLb25maWd1cmF0aW9uIHp1IFVwc3RyZWFtLUJyYW5jaCB6dSBlbnRmZXJuZW4iCiAKLSM6IGdpdGs6MjY1NgotbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKLW1zZ3N0ciAiRGllc2VuIGF1Y2ggaGVydm9yaGViZW4iCi0KLSM6IGdpdGs6MjY1NwotbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCi1tc2dzdHIgIk51ciBkaWVzZW4gaGVydm9yaGViZW4iCi0KLSM6IGdpdGs6MjY1OAotbXNnaWQgIkV4dGVybmFsIGRpZmYiCi1tc2dzdHIgIkV4dGVybmVzIERpZmYtUHJvZ3JhbW0iCi0KLSM6IGdpdGs6MjY1OQotbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCi1tc2dzdHIgIkFubm90aWVyZW4gZGVyIEVsdGVybnZlcnNpb24iCi0KLSM6IGdpdGs6MjY2MAotbXNnaWQgIkNvcHkgcGF0aCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTg5Cittc2dpZCAiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKIG1zZ3N0ciAiIgorIktvbm50ZSBLb25maWd1cmF0aW9uIHp1IFVwc3RyZWFtLUJyYW5jaCB2b24gSEVBRCBuaWNodCBlbnRmZXJuZW4sIGRhIGRpZXNlclxuIgorImF1ZiBrZWluZW4gQnJhbmNoIHplaWd0LiIKIAotIzogZ2l0azoyNjY3Ci1tc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgotbXNnc3RyICJIZXJrdW5mdCBkaWVzZXIgWmVpbGUgYW56ZWlnZW4iCisjOiBidWlsdGluL2JyYW5jaC5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIkJyYW5jaCAnJXMnIGhhdCBrZWluZW4gVXBzdHJlYW0tQnJhbmNoIGdlc2V0enQiCiAKLSM6IGdpdGs6MjY2OAotbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKLW1zZ3N0ciAiRGllc2UgWmVpbGUgYW5ub3RpZXJlbiAowrtnaXQgZ3VpIGJsYW1lwqspIgorIzogYnVpbHRpbi9icmFuY2guYzoxMDA5Cittc2dpZCAiaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBjcmVhdGUgJ0hFQUQnIG1hbnVhbGx5IgorbXNnc3RyICInSEVBRCcgZGFyZiBuaWNodCBtYW51ZWxsIGVyc3RlbGx0IHdlcmRlbiIKIAotIzogZ2l0azozMDE0Ci0jLCBmdXp6eQorIzogYnVpbHRpbi9icmFuY2guYzoxMDE1Cittc2dpZCAiLWEgYW5kIC1yIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCBtYWtlIHNlbnNlIHdpdGggYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb25lbiAtYSB1bmQgLXIgYmVpICdnaXQgYnJhbmNoJyBrw7ZubmVuIG5pY2h0IGdlbWVpbXNhbSBtaXQgZWluZW0gIgorIkJyYW5jaG5hbWVuIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtLXNldC11cHN0cmVhbSBmbGFnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gQ29uc2lkZXIgdXNpbmcgLS0iCisidHJhY2sgb3IgLS1zZXQtdXBzdHJlYW0tdG9cbiIKK21zZ3N0ciAiIgorIkRpZSAtLXNldC11cHN0cmVhbSBPcHRpb24gaXN0IHZlcmFsdGV0IHVuZCB3aXJkIGVudGZlcm50LiBCZW51dHplbiBTaWUgLS0iCisidHJhY2sgb2RlciAtLXNldC11cHN0cmVhbS10b1xuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMzUKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgotIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgorIklmIHlvdSB3YW50ZWQgdG8gbWFrZSAnJXMnIHRyYWNrICclcycsIGRvIHRoaXM6XG4iCiAiXG4iCi0iQ29weXJpZ2h0IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgotIlxuIgotIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCiBtc2dzdHIgIiIKICJcbiIKLSJHaXRrIC0gZWluZSBWaXN1YWxpc2llcnVuZyBkZXIgR2l0LUhpc3RvcmllXG4iCi0iXG4iCi0iQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCi0iXG4iCi0iQmVudXR6dW5nIHVuZCBXZWl0ZXJ2ZXJicmVpdHVuZyBnZW3DpMOfIGRlbiBCZWRpbmd1bmdlbiBkZXIgR05VIEdlbmVyYWwgUHVibGljICIKLSJMaWNlbnNlIgorIldlbm4gU2llIHdvbGx0ZW4sIGRhc3MgJyVzJyBkZW4gQnJhbmNoICclcycgYWxzIFVwc3RyZWFtLUJyYW5jaCBoYXQsIGbDvGhyZW4gIgorIlNpZSBhdXM6XG4iCiAKLSM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Ci1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgIlNjaGxpZcOfZW4iCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIKK21zZ3N0ciAiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIKIAotIzogZ2l0azozMDQzCi1tc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCi1tc2dzdHIgIkdpdGstVGFzdGF0dXJiZWxlZ3VuZyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorbXNnc3RyICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgogCi0jOiBnaXRrOjMwNDYKLW1zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCi1tc2dzdHIgIkdpdGstVGFzdGF0dXJiZWxlZ3VuZzoiCisjOiBidWlsdGluL2J1bmRsZS5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAiJXMgaXN0IGluIE9yZG51bmdcbiIKIAotIzogZ2l0azozMDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVE+XHRcdFF1aXQiCi1tc2dzdHIgIjwlcy1RPlx0XHRCZWVuZGVuIgorIzogYnVpbHRpbi9idW5kbGUuYzo2NAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIlVtIGVpbiBQYWtldCB6dSBlcnN0ZWxsZW4gd2lyZCBlaW4gUmVwb3NpdG9yeSBiZW7DtnRpZ3QuIgogCi0jOiBnaXRrOjMwNDkKLSMsIGZ1enp5LCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVc+XHRcdENsb3NlIHdpbmRvdyIKLW1zZ3N0ciAiPCVzLUY+XHRcdFN1Y2hlbiIKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjgKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIlp1bSBFbnRwYWNrZW4gd2lyZCBlaW4gUmVwb3NpdG9yeSBiZW7DtnRpZ3QuIgogCi0jOiBnaXRrOjMwNTAKLW1zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCi1tc2dzdHIgIjxQb3MxPlx0XHRadXIgbmV1ZXN0ZW4gVmVyc2lvbiBzcHJpbmdlbiIKLQotIzogZ2l0azozMDUxCi1tc2dpZCAiPEVuZD5cdFx0TW92ZSB0byBsYXN0IGNvbW1pdCIKLW1zZ3N0ciAiPEVuZGU+XHRcdFp1ciDDpGx0ZXN0ZW4gVmVyc2lvbiBzcHJpbmdlbiIKLQotIzogZ2l0azozMDUyCi0jLCBmdXp6eQotbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKLW1zZ3N0ciAiPEhvY2g+LCBwLCBpXHROw6RjaHN0ZSBuZXVlcmUgVmVyc2lvbiIKLQotIzogZ2l0azozMDUzCi0jLCBmdXp6eQotbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCi1tc2dzdHIgIjxSdW50ZXI+LCBuLCBrXHROw6RjaHN0ZSDDpGx0ZXJlIFZlcnNpb24iCi0KLSM6IGdpdGs6MzA1NAotIywgZnV6enkKLW1zZ2lkICI8TGVmdD4sIHosIGhcdEdvIGJhY2sgaW4gaGlzdG9yeSBsaXN0IgotbXNnc3RyICI8TGlua3M+LCB6LCBqXHRFaW5lIFZlcnNpb24genVyw7xja2dlaGVuIgotCi0jOiBnaXRrOjMwNTUKLW1zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKLW1zZ3N0ciAiPFJlY2h0cz4sIHgsIGxcdEVpbmUgVmVyc2lvbiB3ZWl0ZXJnZWhlbiIKLQotIzogZ2l0azozMDU2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDI4Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdfC1lfC1wfCIKKyI8dHlwZT58LS10ZXh0Y29udikgPG9iamVjdD4iCiBtc2dzdHIgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV18LXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwtZXwtcHwiCisiPEFydD58LS10ZXh0Y29udikgPE9iamVrdD4iCiAKLSM6IGdpdGs6MzA1NwotbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8QmlsZEhvY2g+XHRFaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCi0KLSM6IGdpdGs6MzA1OAotbXNnaWQgIjxQYWdlRG93bj5cdE1vdmUgZG93biBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKLW1zZ3N0ciAiPEJpbGRSdW50ZXI+XHRFaW5lIFNlaXRlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgotCi0jOiBnaXRrOjMwNTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCi1tc2dzdHIgIjwlcy1Qb3MxPlx0WnVtIG9iZXJlbiBFbmRlIGRlciBWZXJzaW9uc2xpc3RlIGJsw6R0dGVybiIKLQotIzogZ2l0azozMDYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCi1tc2dzdHIgIjwlcy1FbmRlPlx0WnVtIHVudGVyZW4gRW5kZSBkZXIgVmVyc2lvbnNsaXN0ZSBibMOkdHRlcm4iCi0KLSM6IGdpdGs6MzA2MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKLW1zZ3N0ciAiPCVzLUhvY2g+XHRWZXJzaW9uc2xpc3RlIGVpbmUgWmVpbGUgbmFjaCBvYmVuIGJsw6R0dGVybiIKLQotIzogZ2l0azozMDYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKLW1zZ3N0ciAiPCVzLVJ1bnRlcj5cdFZlcnNpb25zbGlzdGUgZWluZSBaZWlsZSBuYWNoIHVudGVuIGJsw6R0dGVybiIKLQotIzogZ2l0azozMDYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPCVzLUJpbGRIb2NoPlx0VmVyc2lvbnNsaXN0ZSBlaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCi0KLSM6IGdpdGs6MzA2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgotbXNnc3RyICI8JXMtQmlsZFJ1bnRlcj5cdFZlcnNpb25zbGlzdGUgZWluZSBTZWl0ZSBuYWNoIHVudGVuIGJsw6R0dGVybiIKLQotIzogZ2l0azozMDY1Ci1tc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgotbXNnc3RyICI8VW1zY2hhbHQtSG9jaD5cdFLDvGNrd8OkcnRzIHN1Y2hlbiAobmFjaCBvYmVuOyBuZXVlcmUgVmVyc2lvbmVuKSIKLQotIzogZ2l0azozMDY2Ci1tc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCi1tc2dzdHIgIjxVbXNjaGFsdC1SdW50ZXI+IFN1Y2hlbiAobmFjaCB1bnRlbjsgw6RsdGVyZSBWZXJzaW9uZW4pIgotCi0jOiBnaXRrOjMwNjcKLW1zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPEVudGY+LCBiXHRcdFZlcmdsZWljaCBlaW5lIFNlaXRlIG5hY2ggb2JlbiBibMOkdHRlcm4iCi0KLSM6IGdpdGs6MzA2OAotbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgotbXNnc3RyICI8TMO2c2NodGFzdGU+XHRWZXJnbGVpY2ggZWluZSBTZWl0ZSBuYWNoIG9iZW4gYmzDpHR0ZXJuIgotCi0jOiBnaXRrOjMwNjkKLW1zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKLW1zZ3N0ciAiPExlZXJ0YXN0ZT5cdFZlcmdsZWljaCBlaW5lIFNlaXRlIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgotCi0jOiBnaXRrOjMwNzAKLW1zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCi1tc2dzdHIgInVcdFx0VmVyZ2xlaWNoIHVtIDE4IFplaWxlbiBuYWNoIG9iZW4gYmzDpHR0ZXJuIgotCi0jOiBnaXRrOjMwNzEKLW1zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKLW1zZ3N0ciAiZFx0XHRWZXJnbGVpY2ggdW0gMTggWmVpbGVuIG5hY2ggdW50ZW4gYmzDpHR0ZXJuIgotCi0jOiBnaXRrOjMwNzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtRj5cdFx0RmluZCIKLW1zZ3N0ciAiPCVzLUY+XHRcdFN1Y2hlbiIKLQotIzogZ2l0azozMDczCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKLW1zZ3N0ciAiPCVzLUc+XHRcdFdlaXRlcnN1Y2hlbiIKLQotIzogZ2l0azozMDc0Ci1tc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKLW1zZ3N0ciAiPEVpbmdhYmV0YXN0ZT5cdFdlaXRlcnN1Y2hlbiIKLQotIzogZ2l0azozMDc1Ci0jLCBmdXp6eQotbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgotbXNnc3RyICI8RW5kZT5cdFx0WnVyIMOkbHRlc3RlbiBWZXJzaW9uIHNwcmluZ2VuIgotCi0jOiBnaXRrOjMwNzYKLW1zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgotbXNnc3RyICIvXHRcdFRhc3RhdHVyZm9rdXMgaW5zIFN1Y2hmZWxkIgotCi0jOiBnaXRrOjMwNzcKLW1zZ2lkICI/XHRcdE1vdmUgdG8gcHJldmlvdXMgZmluZCBoaXQiCi1tc2dzdHIgIj9cdFx0UsO8Y2t3w6RydHMgd2VpdGVyc3VjaGVuIgotCi0jOiBnaXRrOjMwNzgKLW1zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgotbXNnc3RyICJmXHRcdFZlcmdsZWljaCB6dXIgbsOkY2hzdGVuIERhdGVpIGJsw6R0dGVybiIKLQotIzogZ2l0azozMDc5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgotbXNnc3RyICI8JXMtUz5cdFx0V2VpdGVyc3VjaGVuIGltIFZlcmdsZWljaCIKLQotIzogZ2l0azozMDgwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKLW1zZ3N0ciAiPCVzLVI+XHRcdFLDvGNrd8OkcnRzIHdlaXRlcnN1Y2hlbiBpbSBWZXJnbGVpY2giCi0KLSM6IGdpdGs6MzA4MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1OdW1tZXJibG9jay1QbHVzPlx0U2NocmlmdCB2ZXJncsO2w59lcm4iCi0KLSM6IGdpdGs6MzA4MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtUGx1cz5cdFNjaHJpZnQgdmVyZ3LDtsOfZXJuIgotCi0jOiBnaXRrOjMwODMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtTnVtbWVybmJsb2NrLU1pbnVzPiBTY2hyaWZ0IHZlcmtsZWluZXJuIgotCi0jOiBnaXRrOjMwODQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1NaW51cz5cdFNjaHJpZnQgdmVya2xlaW5lcm4iCi0KLSM6IGdpdGs6MzA4NQotbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgotbXNnc3RyICI8RjU+XHRcdEFrdHVhbGlzaWVyZW4iCi0KLSM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gRXJ6ZXVnZW4gZGVzIHRlbXBvcsOkcmVuIFZlcnplaWNobmlzc2VzIMK7JXPCqzoiCi0KLSM6IGdpdGs6MzU3MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBIb2xlbiB2b24gwrslc8KrIHZvbiDCuyVzwqs6IgotCi0jOiBnaXRrOjM2MzUKLW1zZ2lkICJjb21tYW5kIGZhaWxlZDoiCi1tc2dzdHIgIktvbW1hbmRvIGZlaGxnZXNjaGxhZ2VuOiIKLQotIzogZ2l0azozNzg0Ci1tc2dpZCAiTm8gc3VjaCBjb21taXQiCi1tc2dzdHIgIlZlcnNpb24gbmljaHQgZ2VmdW5kZW4iCi0KLSM6IGdpdGs6Mzc5OAotbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKLW1zZ3N0ciAiZ2l0IGd1aSBibGFtZTogS29tbWFuZG8gZmVobGdlc2NobGFnZW46IgotCi0jOiBnaXRrOjM4MjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgotbXNnc3RyICJadXNhbW1lbmbDvGhydW5ncy1TcGl0emUga29ubnRlIG5pY2h0IGdlbGVzZW4gd2VyZGVuOiAlcyIKLQotIzogZ2l0azozODM3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCi1tc2dzdHIgIkZlaGxlciBiZWltIExlc2VuIGRlciBCZXJlaXRzdGVsbHVuZyAowrtpbmRleMKrKTogJXMiCi0KLSM6IGdpdGs6Mzg2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCi1tc2dzdHIgIsK7Z2l0IGJsYW1lwqsga29ubnRlIG5pY2h0IGdlc3RhcnRldCB3ZXJkZW46ICVzIgotCi0jOiBnaXRrOjM4NjUgZ2l0azo2NzU0Ci1tc2dpZCAiU2VhcmNoaW5nIgotbXNnc3RyICJTdWNoZW4iCi0KLSM6IGdpdGs6Mzg5NwotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIHJ1bm5pbmcgZ2l0IGJsYW1lOiAlcyIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gwrtnaXQgYmxhbWXCqzogJXMiCi0KLSM6IGdpdGs6MzkyNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDI5Cittc2dpZCAiIgorImdpdCBjYXQtZmlsZSAoLS1iYXRjaCB8IC0tYmF0Y2gtY2hlY2spIFstLWZvbGxvdy1zeW1saW5rc10gPCA8bGlzdC1vZi0iCisib2JqZWN0cz4iCiBtc2dzdHIgIiIKLSJEaWVzZSBaZWlsZSBzdGFtbXQgYXVzIFZlcnNpb24gJXMsIGRpZSBuaWNodCBpbiBkaWVzZXIgQW5zaWNodCBnZXplaWd0IHdpcmQiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSA8IDxMaXN0ZS12b24tIgorIk9iamVrdGVuIgogCi0jOiBnaXRrOjM5MzkKLW1zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgotbXNnc3RyICJFeHRlcm5lcyBEaWZmLVByb2dyYW1tIGZlaGxnZXNjaGxhZ2VuOiIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NjYKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIjxBcnQ+IGthbm4gc2VpbjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCiAKLSM6IGdpdGs6NDA3MAotbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgotbXNnc3RyICJHaXRrLUFuc2ljaHRlbiIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NjcKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICJPYmpla3RhcnQgYW56ZWlnZW4iCiAKLSM6IGdpdGs6NDA3NAotbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKLW1zZ3N0ciAiRGllc2UgQW5zaWNodCBzcGVpY2hlcm4iCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDY4Cittc2dpZCAic2hvdyBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiT2JqZWt0Z3LDtsOfZSBhbnplaWdlbiIKIAotIzogZ2l0azo0MDc1Ci1tc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKLW1zZ3N0ciAiWndlaWdlL01hcmtpZXJ1bmdlbiAoZHVyY2ggTGVlcnplaWNoZW4gZ2V0cmVubnRlIExpc3RlKToiCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDcwCittc2dpZCAiZXhpdCB3aXRoIHplcm8gd2hlbiB0aGVyZSdzIG5vIGVycm9yIgorbXNnc3RyICJtaXQgUsO8Y2tnYWJld2VydCAwIGJlZW5kZW4sIHdlbm4ga2VpbiBGZWhsZXIgYXVmZ2V0cmV0ZW4gaXN0IgogCi0jOiBnaXRrOjQwNzYKLW1zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgotbXNnc3RyICJad2VpZ2UvTWFya2llcnVuZ2VuOiIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzEKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiYW5zcHJlY2hlbmRlIEFuemVpZ2UgZGVzIE9iamVrdGluaGFsdGVzIgogCi0jOiBnaXRrOjQwNzcKLW1zZ2lkICJBbGwgcmVmcyIKLW1zZ3N0ciAiQWxsZSBNYXJraWVydW5nZW4gdW5kIFp3ZWlnZSIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzMKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiZWluZSBUZXh0a29udmVydGllcnVuZyBhdWYgZGVuIEluaGFsdCB2b24gQmxvYi1PYmpla3RlbiBhdXNmw7xocmVuIgogCi0jOiBnaXRrOjQwNzgKLW1zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKLW1zZ3N0ciAiQWxsZSAobG9rYWxlbikgWndlaWdlIgorIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3NQorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAiLXMgdW5kIC10IG1pdCBiZXNjaMOkZGlndGVuIE9iamVrdGVuIGVybGF1YmVuIgogCi0jOiBnaXRrOjQwNzkKLW1zZ2lkICJBbGwgdGFncyIKLW1zZ3N0ciAiQWxsZSBNYXJraWVydW5nZW4iCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDc2Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICJBdXNnYWJlIHZvbiAtLWJhdGNoIHB1ZmZlcm4iCiAKLSM6IGdpdGs6NDA4MAotbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCi1tc2dzdHIgIkFsbGUgw5xiZXJuYWhtZXp3ZWlnZSIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzgKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKyJBbnplaWdlIHZvbiBJbmZvcm1hdGlvbmVuIHVuZCBJbmhhbHQgdm9uIE9iamVrdGVuLCBnZWxlc2VuIHZvbiBkZXIgU3RhbmRhcmQtIgorIkVpbmdhYmUiCiAKLSM6IGdpdGs6NDA4MQotbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCi1tc2dzdHIgIlZlcnNpb25zaW5mb3JtYXRpb25lbiAocmVndWzDpHJlIEF1c2Ryw7xja2UpOiIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0ODEKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKyJBbnplaWdlIHZvbiBJbmZvcm1hdGlvbmVuIMO8YmVyIE9iamVrdGUsIGdlbGVzZW4gdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIgogCi0jOiBnaXRrOjQwODIKLW1zZ2lkICJBdXRob3I6IgotbXNnc3RyICJBdXRvcjoiCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDg0Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICIiCisic3ltYm9saXNjaGVuIFZlcmtuw7xwZnVuZ2VuIGlubmVyaGFsYiBkZXMgUmVwb3NpdG9yaWVzIGZvbGdlbiAodmVyd2VuZGV0IG1pdCAiCisiLS1iYXRjaCBvZGVyIC0tYmF0Y2gtY2hlY2spIgogCi0jOiBnaXRrOjQwODMKLW1zZ2lkICJDb21taXR0ZXI6IgotbXNnc3RyICJFaW50cmFnZW5kZXI6IgorIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ4NgorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgImFsbGUgT2JqZWt0ZSBtaXQgLS1iYXRjaCBvZGVyIC0tYmF0Y2gtY2hlY2sgYW56ZWlnZW4iCiAKLSM6IGdpdGs6NDA4NAotbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAiVmVyc2lvbnNiZXNjaHJlaWJ1bmc6IgorIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTEKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxBdHRyaWJ1dD4uLi5dIFstLV0gPFBmYWRuYW1lPi4uLiIKIAotIzogZ2l0azo0MDg1Ci1tc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCi1tc2dzdHIgIkFsbGUgVmVyc2lvbnNpbmZvcm1hdGlvbmVuLUtyaXRlcmllbiBlcmbDvGxsZW4iCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMgorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gPCA8bGlzdC1vZi1wYXRocz4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8QXR0cmlidXQ+Li4uXSA8IDxMaXN0ZS12b24tUGZhZGVuPiIKIAotIzogZ2l0azo0MDg2Ci0jLCBmdXp6eQotbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCi1tc2dzdHIgIkFsbGUgVmVyc2lvbnNpbmZvcm1hdGlvbmVuLUtyaXRlcmllbiBlcmbDvGxsZW4iCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxOQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAiYWxsZSBBdHRyaWJ1dGUgZWluZXIgRGF0ZWkgYXVzZ2ViZW4iCiAKLSM6IGdpdGs6NDA4NwotbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgotbXNnc3RyICJEYXRlaWVuOiIKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIwCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIm51ciAuZ2l0YXR0cmlidXRlcyB2b20gSW5kZXggdmVyd2VuZGVuIgogCi0jOiBnaXRrOjQwODgKLW1zZ2lkICJGaXhlZCBTdHJpbmciCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICJEYXRlaW5hbWVuIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNAorbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJFaW50csOkZ2Ugdm9uIEVpbi0gdW5kIEF1c2dhYmUgbWl0IE5VTC1aZWljaGVuIGFic2NobGllw59lbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxOCBidWlsdGluL2NoZWNrb3V0LmM6MTEzMyBidWlsdGluL2djLmM6MjY3Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJGb3J0c2Nocml0dHNhbnplaWdlIHVudGVyZHLDvGNrZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjYKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBpbnB1dCBwYXRocyIKK21zZ3N0ciAiRWluZ2FiZS1QZmFkZSBvaG5lIMOcYmVyZWluc3RpbW11bmdlbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOAorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICJJbmRleCBiZWkgZGVyIFByw7xmdW5nIGlnbm9yaWVyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU0Cittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiQW5nYWJlIHZvbiBQZmFkbmFtZW4ga2FubiBuaWNodCBnZW1laW5zYW0gbWl0IC0tc3RkaW4gdmVyd2VuZGV0IHdlcmRlbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNTcKK21zZ2lkICIteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiRGllIE9wdGlvbiAteiBrYW5uIG51ciBtaXQgLS1zdGRpbiB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNTkKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAia2VpbiBQZmFkIGFuZ2VnZWJlbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLXF1aWV0IGlzdCBudXIgbWl0IGVpbmVtIGVpbnplbG5lbiBQZmFkbmFtZW4gZ8O8bHRpZy4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY1Cittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLS1xdWlldCB1bmQgLS12ZXJib3NlIGvDtm5uZW4gbmljaHQgZ2VtZWluc2FtIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2OAorbXNnaWQgIi0tbm9uLW1hdGNoaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXZlcmJvc2UiCittc2dzdHIgIi0tbm9uLW1hdGNoaW5nIGlzdCBudXIgbWl0IC0tdmVyYm9zZSB6dWzDpHNzaWciCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjgKK21zZ2lkICJnaXQgY2hlY2stbWFpbG1hcCBbPG9wdGlvbnM+XSA8Y29udGFjdD4uLi4iCittc2dzdHIgImdpdCBjaGVjay1tYWlsbWFwIFs8T3B0aW9uZW4+XSA8S29udGFrdD4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjEzCittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgImViZW5mYWxscyBLb250YWt0ZSB2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAiS29ubnRlIEtvbnRha3QgJyVzJyBuaWNodCBwYXJzZW4uIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0NworbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAia2VpbmUgS29udGFrdGUgYW5nZWdlYmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTI2Cittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPE9wdGlvbmVuPl0gWy0tXSBbPERhdGVpPi4uLl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODgKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiYWxsZSBEYXRlaWVuIGltIEluZGV4IGF1c2NoZWNrZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODkKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgImRhcyDDnGJlcnNjaHJlaWJlbiBiZXJlaXRzIGV4aXN0aWVyZW5kZXIgRGF0ZWllbiBlcnp3aW5nZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTEKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICIiCisia2VpbmUgV2FybnVuZyBmw7xyIGV4aXN0aWVyZW5kZSBEYXRlaWVuLCB1bmQgRGF0ZWllbiwgZGllIHNpY2ggbmljaHQgaW0gSW5kZXggIgorImJlZmluZGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTkzCittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICJrZWluZSBuZXVlbiBEYXRlaWVuIGF1c2NoZWNrZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTUKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiRGF0ZWlpbmZvcm1hdGlvbmVuIGluIGRlciBJbmRleC1EYXRlaSBha3R1YWxpc2llcmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAxCittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJlaW5lIExpc3RlIHZvbiBQZmFkZW4gdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICJkZW4gSW5oYWx0IGluIHRlbXBvcsOkcmUgRGF0ZWllbiBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDQgYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgInN0cmluZyIKIG1zZ3N0ciAiWmVpY2hlbmtldHRlIgogCi0jOiBnaXRrOjQwODkKLW1zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCi1tc2dzdHIgIlJlZ3Vsw6RyZXIgQXVzZHJ1Y2siCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA1Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAiIgorIndlbm4gRGF0ZWllbiBlcnpldWd0IHdlcmRlbiwgc3RlbGxlIDxaZWljaGVua2V0dGU+IGRlbSBEYXRlaW5hbWVuIHZvcmFuIgogCi0jOiBnaXRrOjQwOTAKLW1zZ2lkICJTZWFyY2ggc3RyaW5nOiIKLW1zZ3N0ciAiU3VjaGF1c2RydWNrOiIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDgKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAiRGF0ZWllbiB2b24gZGVtIGJlbmFubnRlbiBTdGFuZCBrb3BpZXJlbiIKIAotIzogZ2l0azo0MDkxCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPE9wdGlvbmVuPl0gPEJyYW5jaD4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8T3B0aW9uZW4+XSBbPEJyYW5jaD5dIC0tIDxEYXRlaT4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzMgYnVpbHRpbi9jaGVja291dC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAiUGZhZCAnJXMnIGhhdCBuaWNodCB1bnNlcmUgVmVyc2lvbi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzUgYnVpbHRpbi9jaGVja291dC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJQZmFkICclcycgaGF0IG5pY2h0IGRlcmVuIFZlcnNpb24uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIlBmYWQgJyVzJyBoYXQgbmljaHQgYWxsZSBub3R3ZW5kaWdlbiBWZXJzaW9uZW4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAiUGZhZCAnJXMnIGhhdCBuaWNodCBkaWUgbm90d2VuZGlnZW4gVmVyc2lvbmVuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAiUGZhZCAnJXMnOiBrYW5uIG5pY2h0IHp1c2FtbWVuZsO8aHJlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiS29ubnRlIE1lcmdlLUVyZ2VibmlzIHZvbiAnJXMnIG5pY2h0IGhpbnp1ZsO8Z2VuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI1MCBidWlsdGluL2NoZWNrb3V0LmM6MjUzIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTYKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICInJXMnIGthbm4gbmljaHQgbWl0IGRlciBBa3R1YWxpc2llcnVuZyB2b24gUGZhZGVuIHZlcndlbmRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjIgYnVpbHRpbi9jaGVja291dC5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiclcycga2FubiBuaWNodCBtaXQgJyVzJyB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAiIgorIkthbm4gbmljaHQgZ2xlaWNoemVpdGlnIFBmYWRlIGFrdHVhbGlzaWVyZW4gdW5kIHp1IEJyYW5jaCAnJXMnIHdlY2hzZWxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjc5IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzMKK21zZ2lkICJjb3JydXB0IGluZGV4IGZpbGUiCittc2dzdHIgImJlc2Now6RkaWd0ZSBJbmRleC1EYXRlaSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMzOSBidWlsdGluL2NoZWNrb3V0LmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAiUGZhZCAnJXMnIGlzdCBuaWNodCB6dXNhbW1lbmdlZsO8aHJ0LiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ5NQorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJTaWUgbcO8c3NlbiB6dWVyc3QgZGllIEtvbmZsaWt0ZSBpbiBJaHJlbSBha3R1ZWxsZW4gSW5kZXggYXVmbMO2c2VuLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiS2FubiBcInJlZmxvZ1wiIGbDvHIgJyVzJyBuaWNodCBkdXJjaGbDvGhyZW46ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NjAKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCBpc3QgamV0enQgYmVpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlNldHplIEJyYW5jaCAnJXMnIG5ldVxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJCZXJlaXRzIGF1ZiAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIlp1IHVtZ2VzZXR6dGVtIEJyYW5jaCAnJXMnIGdld2VjaHNlbHRcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3NiBidWlsdGluL2NoZWNrb3V0LmM6MTA2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJadSBuZXVlbSBCcmFuY2ggJyVzJyBnZXdlY2hzZWx0XG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiWnUgQnJhbmNoICclcycgZ2V3ZWNoc2VsdFxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gdW5kICVkIHdlaXRlcmUuXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCi0iMTU6Mjc6MzhcIik6IgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyJXYXJudW5nOiBTaWUgbGFzc2VuICVkIENvbW1pdCB6dXLDvGNrLiBGb2xnZW5kZXIgQ29tbWl0IGlzdCBpblxuIgorImtlaW5lbSBJaHJlciBCcmFuY2hlcyBlbnRoYWx0ZW46XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clsxXSAiIgorIldhcm51bmc6IFNpZSBsYXNzZW4gJWQgQ29tbWl0cyB6dXLDvGNrLiBGb2xnZW5kZSBDb21taXRzIHNpbmQgaW5cbiIKKyJrZWluZW0gSWhyZXIgQnJhbmNoZXMgZW50aGFsdGVuOlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisiV2VubiBTaWUgZGllc2UgZHVyY2ggZWluZW4gbmV1ZW4gQnJhbmNoIGJlaGFsdGVuIG3DtmNodGVuLCBkYW5uIGvDtm5udGUgamV0enRcbiIKKyJlaW4gZ3V0ZXIgWmVpdHB1bmt0IHNlaW4gZGllcyB6dSB0dW4gbWl0OlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXVlci1CcmFuY2huYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzFdICIiCisiV2VubiBTaWUgZGllc2UgZHVyY2ggZWluZW4gbmV1ZW4gQnJhbmNoIGJlaGFsdGVuIG3DtmNodGVuLCBkYW5uIGvDtm5udGUgamV0enRcbiIKKyJlaW4gZ3V0ZXIgWmVpdHB1bmt0IHNlaW4gZGllcyB6dSB0dW4gbWl0OlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXVlci1CcmFuY2huYW1lPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzkxCittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAiaW50ZXJuZXIgRmVobGVyIGltIFJldmlzaW9uc2dhbmciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTUKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiVm9yaGVyaWdlIFBvc2l0aW9uIHZvbiBIRUFEIHdhciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgyMiBidWlsdGluL2NoZWNrb3V0LmM6MTA2MAorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIlNpZSBzaW5kIGF1ZiBlaW5lbSBCcmFuY2gsIGRlciBub2NoIGdlYm9yZW4gd2lyZCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk2NworIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAibnVyIGVpbmUgUmVmZXJlbnogZXJ3YXJ0ZXQsICVkIGdlZ2ViZW4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwNiBidWlsdGluL3dvcmt0cmVlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZSBSZWZlcmVuejogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAiUmVmZXJlbnogaXN0IGtlaW4gXCJUcmVlXCItT2JqZWt0OiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzQKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiUGZhZGUga8O2bm5lbiBuaWNodCBiZWltIFdlY2hzZWxuIHZvbiBCcmFuY2hlcyB2ZXJ3ZW5kZXQgd2VyZGVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3NyBidWlsdGluL2NoZWNrb3V0LmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICInJXMnIGthbm4gbmljaHQgYmVpbSBXZWNoc2VsbiB2b24gQnJhbmNoZXMgdmVyd2VuZGV0IHdlcmRlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwODUgYnVpbHRpbi9jaGVja291dC5jOjEwODggYnVpbHRpbi9jaGVja291dC5jOjEwOTMKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIgorbXNnc3RyICInJXMnIGthbm4gbmljaHQgbWl0ICclcycgdmVyd2VuZGV0IHdlcmRlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgIkthbm4gQnJhbmNoIG5pY2h0IHp1IE5pY2h0LUNvbW1pdCAnJXMnIHdlY2hzZWxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzNCBidWlsdGluL2NoZWNrb3V0LmM6MTEzNiBidWlsdGluL2Nsb25lLmM6ODMKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5IGJ1aWx0aW4vcmVtb3RlLmM6MTYxIGJ1aWx0aW4vd29ya3RyZWUuYzozMTcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMTkKK21zZ2lkICJicmFuY2giCittc2dzdHIgIkJyYW5jaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzUKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAiZWluZW4gbmV1ZW4gQnJhbmNoIGVyemV1Z2VuIHVuZCBhdXNjaGVja2VuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzNworbXNnaWQgImNyZWF0ZS9yZXNldCBhbmQgY2hlY2tvdXQgYSBicmFuY2giCittc2dzdHIgImVpbmVuIEJyYW5jaCBlcnN0ZWxsZW4vdW1zZXR6ZW4gdW5kIGF1c2NoZWNrZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM4Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiZGFzIFJlZmxvZyBmw7xyIGRlbiBuZXVlbiBCcmFuY2ggZXJ6ZXVnZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM5Cittc2dpZCAiZGV0YWNoIHRoZSBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiSEVBRCB6dSBiZW5hbm50ZW0gQ29tbWl0IHNldHplbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDAKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiSW5mb3JtYXRpb25lbiB6dW0gVXBzdHJlYW0tQnJhbmNoIGbDvHIgZGVuIG5ldWVuIEJyYW5jaCBzZXR6ZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQyCittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAibmV1ZXIgQnJhbmNoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0MgorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAibmV1ZXIgQnJhbmNoIG9obmUgRWx0ZXJuLUNvbW1pdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDMKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgInVuc2VyZSBWYXJpYW50ZSBmw7xyIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4gYXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDUKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAiaWhyZSBWYXJpYW50ZSBmw7xyIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4gYXVzY2hlY2tlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDcKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAiQXVzY2hlY2tlbiBlcnp3aW5nZW4gKHZlcndpcmZ0IGxva2FsZSDDhG5kZXJ1bmdlbikiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ4Cittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgImVpbmVuIDMtV2VnZS1NZXJnZSBtaXQgZGVtIG5ldWVuIEJyYW5jaCBhdXNmw7xocmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0OSBidWlsdGluL21lcmdlLmM6MjI3Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICJpZ25vcmllcnRlIERhdGVpZW4gYWt0dWFsaXNpZXJlbiAoU3RhbmRhcmQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1MCBidWlsdGluL2xvZy5jOjEyNjQgcGFyc2Utb3B0aW9ucy5oOjI0OQorbXNnaWQgInN0eWxlIgorbXNnc3RyICJTdGlsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1MQorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgIktvbmZsaWt0c3RpbCAobWVyZ2Ugb2RlciBkaWZmMykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTU0Cittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICJrZWluZSBFaW5zY2hyw6Rua3VuZyBiZWkgUGZhZHNwZXppZmlrYXRpb25lbiB6dW0gcGFydGllbGxlbiBBdXNjaGVja2VuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1NgorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCA8bm8tc3VjaC1icmFuY2g+JyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTgKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCiBtc2dzdHIgIiIKLSJEYXR1bSAowrsyIHdlZWtzIGFnb8KrLCDCuzIwMDktMDMtMTcgMTU6Mjc6MzjCqywgwrtNYXJjaCAxNywgMjAwOSAxNToyNzozOMKrKSIKKyJQcsO8ZnVuZywgb2IgZGllIFJlZmVyZW56IGJlcmVpdHMgaW4gZWluZW0gYW5kZXJlbiBBcmJlaXRzdmVyemVpY2huaXMgIgorImF1c2dlY2hlY2t0IHd1cmRlLCBkZWFrdGl2aWVyZW4iCiAKLSM6IGdpdGs6NDA5MgotbXNnaWQgIlNpbmNlOiIKLW1zZ3N0ciAiVm9uOiIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTgxCittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLWIsIC1CIHVuZCAtLW9ycGhhbiBzY2hsaWXDn2VuIHNpY2ggZ2VnZW5zZWl0aWcgYXVzLiIKIAotIzogZ2l0azo0MDkzCi1tc2dpZCAiVW50aWw6IgotbXNnc3RyICJCaXM6IgorIzogYnVpbHRpbi9jaGVja291dC5jOjExOTgKK21zZ2lkICItLXRyYWNrIG5lZWRzIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIkJlaSBkZXIgT3B0aW9uIC0tdHJhY2sgbXVzcyBlaW4gQnJhbmNobmFtZSBhbmdlZ2ViZW4gd2VyZGVuLiIKIAotIzogZ2l0azo0MDk0Ci1tc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCi1tc2dzdHIgIlZlcnNpb25zYW56YWhsIGJlZ3JlbnplbiBvZGVyIGVpbmlnZSDDvGJlcnNwcmluZ2VuIChnYW56emFobGlnZXIgV2VydCk6IgorIzogYnVpbHRpbi9jaGVja291dC5jOjEyMDMKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIlZlcm1pc3NlIEJyYW5jaG5hbWVuOyB2ZXJzdWNoZW4gU2llIC1iIgogCi0jOiBnaXRrOjQwOTUKLW1zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCi1tc2dzdHIgIkFuemVpZ2VuOiIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjM5Cittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgInVuZ8O8bHRpZ2UgUGZhZHNwZXppZmlrYXRpb24iCiAKLSM6IGdpdGs6NDA5NgotbXNnaWQgIk51bWJlciB0byBza2lwOiIKLW1zZ3N0ciAiw5xiZXJzcHJpbmdlbjoiCi0KLSM6IGdpdGs6NDA5NwotbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCi1tc2dzdHIgIlNvbnN0aWdlczoiCi0KLSM6IGdpdGs6NDA5OAotbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKLW1zZ3N0ciAiU3RyZW5nIG5hY2ggRGF0dW0gc29ydGllcmVuIgotCi0jOiBnaXRrOjQwOTkKLW1zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKLW1zZ3N0ciAiWndlaWctU2VpdGVuIG1hcmtpZXJlbiIKLQotIzogZ2l0azo0MTAwCi1tc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgotbXNnc3RyICJBdWYgZXJzdGUgRWx0ZXJudmVyc2lvbiBiZXNjaHLDpG5rZW4iCi0KLSM6IGdpdGs6NDEwMQotbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgotbXNnc3RyICJFaW5mYWNoZSBIaXN0b3JpZSIKLQotIzogZ2l0azo0MTAyCi1tc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCi1tc2dzdHIgIlp1c8OkdHpsaWNoZSBBcmd1bWVudGUgZsO8ciDCu2dpdCBsb2fCqzoiCi0KLSM6IGdpdGs6NDEwMwotbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgotbXNnc3RyICJGb2xnZW5kZSBEYXRlaWVuIHVuZCBWZXJ6ZWljaG5pc3NlIGFuemVpZ2VuIChlaW5lIHBybyBaZWlsZSk6IgotCi0jOiBnaXRrOjQxMDQKLW1zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKLW1zZ3N0ciAiVmVyc2lvbnNsaXN0ZSBkdXJjaCBmb2xnZW5kZXMgS29tbWFuZG8gZXJ6ZXVnZW4gbGFzc2VuOiIKLQotIzogZ2l0azo0MjI4Ci1tc2dpZCAiR2l0azogZWRpdCB2aWV3IgotbXNnc3RyICJHaXRrOiBBbnNpY2h0IGJlYXJiZWl0ZW4iCi0KLSM6IGdpdGs6NDIzNgotbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgotbXNnc3RyICItLSBBdXN3YWhsIGRlciBhbmdlemVpZ3RlbiBWZXJzaW9uZW4iCi0KLSM6IGdpdGs6NDI0MQotbXNnaWQgIlZpZXcgTmFtZSIKLW1zZ3N0ciAiQW5zaWNodHNuYW1lIgotCi0jOiBnaXRrOjQzMTYKLW1zZ2lkICJBcHBseSAoRjUpIgotbXNnc3RyICJBbndlbmRlbiAoRjUpIgotCi0jOiBnaXRrOjQzNTQKLW1zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCi1tc2dzdHIgIkZlaGxlciBpbiBkZW4gYXVzZ2V3w6RobHRlbiBWZXJzaW9uZW46IgotCi0jOiBnaXRrOjQ0MDkgZ2l0azo0NDYyIGdpdGs6NDkyNCBnaXRrOjQ5MzggZ2l0azo2MjA4IGdpdGs6MTIzNzMgZ2l0azoxMjM3NAotbXNnaWQgIk5vbmUiCi1tc2dzdHIgIktlaW5lIgotCi0jOiBnaXRrOjUwMjEgZ2l0azo1MDI2Ci1tc2dpZCAiRGVzY2VuZGFudCIKLW1zZ3N0ciAiQWJrw7ZtbWxpbmciCi0KLSM6IGdpdGs6NTAyMgotbXNnaWQgIk5vdCBkZXNjZW5kYW50IgotbXNnc3RyICJLZWluIEFia8O2bW1saW5nIgotCi0jOiBnaXRrOjUwMjkgZ2l0azo1MDM0Ci1tc2dpZCAiQW5jZXN0b3IiCi1tc2dzdHIgIlZvcmfDpG5nZXIiCi0KLSM6IGdpdGs6NTAzMAotbXNnaWQgIk5vdCBhbmNlc3RvciIKLW1zZ3N0ciAiS2VpbiBWb3Jnw6RuZ2VyIgotCi0jOiBnaXRrOjUzMjQKLW1zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCi1tc2dzdHIgIkxva2FsZSDDhG5kZXJ1bmdlbiBiZXJlaXRnZXN0ZWxsdCwgYWJlciBuaWNodCBlaW5nZXRyYWdlbiIKLQotIzogZ2l0azo1MzYwCi1tc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCi1tc2dzdHIgIkxva2FsZSDDhG5kZXJ1bmdlbiwgbmljaHQgYmVyZWl0Z2VzdGVsbHQiCi0KLSM6IGdpdGs6NzEzNAotbXNnaWQgImFuZCBtYW55IG1vcmUiCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuXG4iCisiRGlkIHlvdSBpbnRlbmQgdG8gY2hlY2tvdXQgJyVzJyB3aGljaCBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGNvbW1pdD8iCiBtc2dzdHIgIiIKKyJLYW5uIG5pY2h0IGdsZWljaHplaXRpZyBQZmFkZSBha3R1YWxpc2llcmVuIHVuZCB6dSBCcmFuY2ggJyVzJyB3ZWNoc2Vsbi5cbiIKKyJIYWJlbiBTaWUgYmVhYnNpY2h0aWd0ICclcycgYXVzenVjaGVja2VuLCB3ZWxjaGVyIG5pY2h0IGFscyBDb21taXQgYXVmZ2Vsw7ZzdCAiCisid2VyZGVuIGthbm4/IgogCi0jOiBnaXRrOjcxMzcKLW1zZ2lkICJtYW55IgotbXNnc3RyICJ2aWVsZSIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBuaW1tdCBrZWluIFBmYWQtQXJndW1lbnQgJyVzJyIKIAotIzogZ2l0azo3MzI4Ci1tc2dpZCAiVGFnczoiCi1tc2dzdHIgIk1hcmtpZXJ1bmdlbjoiCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI1NQorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIHVuZCAtLW1lcmdlIHNpbmQgaW5rb21wYXRpYmVsIHdlbm5cbiIKKyJTaWUgYXVzIGRlbSBJbmRleCBhdXNjaGVja2VuLiIKIAotIzogZ2l0azo3MzQ1IGdpdGs6NzM1MSBnaXRrOjg4MjUKLW1zZ2lkICJQYXJlbnQiCi1tc2dzdHIgIkVsdGVybiIKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyNQorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8TXVzdGVyPl0gWy14IHwgLVhdIFstLV0gPFBmYWRlPi4uLiIKIAotIzogZ2l0azo3MzU2Ci1tc2dpZCAiQ2hpbGQiCi1tc2dzdHIgIktpbmQiCisjOiBidWlsdGluL2NsZWFuLmM6MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiTMO2c2NoZSAlc1xuIgogCi0jOiBnaXRrOjczNjUKLW1zZ2lkICJCcmFuY2giCi1tc2dzdHIgIlp3ZWlnIgorIzogYnVpbHRpbi9jbGVhbi5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICJXw7xyZGUgJXMgbMO2c2NoZW5cbiIKIAotIzogZ2l0azo3MzY4Ci1tc2dpZCAiRm9sbG93cyIKLW1zZ3N0ciAiRm9sZ3QgYXVmIgorIzogYnVpbHRpbi9jbGVhbi5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiw5xiZXJzcHJpbmdlIFJlcG9zaXRvcnkgJXNcbiIKIAotIzogZ2l0azo3MzcxCi1tc2dpZCAiUHJlY2VkZXMiCi1tc2dzdHIgIlZvcmfDpG5nZXIgdm9uIgorIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJXw7xyZGUgUmVwb3NpdG9yeSAlcyDDvGJlcnNwcmluZ2VuXG4iCiAKLSM6IGdpdGs6Nzk2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgotbXNnc3RyICJGZWhsZXIgYmVpbSBMYWRlbiBkZXMgVmVyZ2xlaWNoczogJXMiCisjOiBidWlsdGluL2NsZWFuLmM6MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTMO2c2NoZW4gdm9uICVzIgogCi0jOiBnaXRrOjg2NTAKLW1zZ2lkICJHb3RvOiIKLW1zZ3N0ciAiR2VoZSB6dToiCisjOiBidWlsdGluL2NsZWFuLmM6MzE3Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIKK21zZ3N0ciAiIgorIkVpbmdhYmVoaWxmZTpcbiIKKyIxICAgICAgICAgIC0gbnVtbWVyaWVydGVzIEVsZW1lbnQgYXVzd8OkaGxlblxuIgorImZvbyAgICAgICAgLSBFbGVtZW50IGFuaGFuZCBlaW5lcyBlaW5kZXV0aWdlbiBQcsOkZml4IGF1c3fDpGhsZW5cbiIKKyIgICAgICAgICAgIC0gKGxlZXIpIG5pY2h0cyBhdXN3w6RobGVuIgogCi0jOiBnaXRrOjg2NzEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTaG9ydCBTSEExIGlkICVzIGlzIGFtYmlndW91cyIKLW1zZ3N0ciAiS3VyemVyIFNIQTEtSGFzaHdlcnQgwrslc8KrIGlzdCBtZWhyZGV1dGlnIgorIzogYnVpbHRpbi9jbGVhbi5jOjMyMQorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZyIKK21zZ3N0ciAiIgorIkVpbmdhYmVoaWxmZTpcbiIKKyIxICAgICAgICAgIC0gZWluemVsbmVzIEVsZW1lbnQgYXVzd8OkaGxlblxuIgorIjMtNSAgICAgICAgLSBCZXJlaWNoIHZvbiBFbGVtZW50ZW4gYXVzd8OkaGxlblxuIgorIjItMyw2LTkgICAgLSBtZWhyZXJlIEJlcmVpY2hlIGF1c3fDpGhsZW5cbiIKKyJmb28gICAgICAgIC0gRWxlbWVudCBhbmhhbmQgZWluZXMgZWluZGV1dGlnZW4gUHLDpGZpeCBhdXN3w6RobGVuXG4iCisiLS4uLiAgICAgICAtIGFuZ2VnZWJlbmVzIEVsZW1lbnQgYWJ3w6RobGVuXG4iCisiKiAgICAgICAgICAtIGFsbGUgRWxlbWVudGUgYXVzd8OkaGxlblxuIgorIiAgICAgICAgICAgLSAobGVlcikgQXVzd2FobCBiZWVuZGVuIgogCi0jOiBnaXRrOjg2NzgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCi1tc2dzdHIgIlZlcnNpb24gwrslc8KrIGlzdCB1bmJla2FubnQiCisjOiBidWlsdGluL2NsZWFuLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAiV2llIGJpdHRlICglcyk/IgogCi0jOiBnaXRrOjg2ODgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAiU0hBMS1IYXNod2VydCDCuyVzwqsgaXN0IHVuYmVrYW5udCIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICJJZ25vcmllci1NdXN0ZXIgZWluZ2ViZW4+PiAiCiAKLSM6IGdpdGs6ODY5MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgotbXNnc3RyICJWZXJzaW9uIMK7JXPCqyB3aXJkIGluIGRlciBha3R1ZWxsZW4gQW5zaWNodCBuaWNodCBhbmdlemVpZ3QiCisjOiBidWlsdGluL2NsZWFuLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICJXQVJOVU5HOiBLYW5uIGtlaW5lIEVpbnRyw6RnZSBmaW5kZW4gZGllIE11c3RlciBlbnRzcHJlY2hlbjogJXMiCiAKLSM6IGdpdGs6ODgzMiBnaXRrOjg4NDcKLW1zZ2lkICJEYXRlIgorIzogYnVpbHRpbi9jbGVhbi5jOjczNworbXNnaWQgIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiCittc2dzdHIgIlfDpGhsZW4gU2llIEVpbnRyw6RnZSB6dW0gTMO2c2NoZW4iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc3OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiJyVzJyBsw7ZzY2hlbiBbeS9OXT8gIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODAzCittc2dpZCAiQnllLiIKK21zZ3N0ciAiVHNjaMO8c3MuIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODExCittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gQ2xlYW4gc3RhcnRlblxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBFaW50csOkZ2Ugdm9uIEzDtnNjaHVuZyBhdXNzY2hsaWXDn2VuXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIEF1c3dhaGwgdm9uIEVpbnRyw6RnZW4gw7xiZXIgTnVtbWVyblxuIgorImFzayBlYWNoICAgICAgICAgICAgLSBqZWRlIEzDtnNjaHVuZyBiZXN0w6R0aWdlbiAod2llIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gQ2xlYW4gYmVlbmRlblxuIgorImhlbHAgICAgICAgICAgICAgICAgLSBkaWVzZSBNZWxkdW5nIGFuemVpZ2VuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIEhpbGZlIHp1ciBBdXN3YWhsIG1pdHRlbHMgRWluZ2FiZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzOAorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiBLb21tYW5kb3MgKioqIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODM5Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIldhcyBudW4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICJXw7xyZGUgZGFzIGZvbGdlbmRlIEVsZW1lbnQgZW50ZmVybmVuOiIKK21zZ3N0clsxXSAiV8O8cmRlIGRpZSBmb2xnZW5kZW4gRWxlbWVudGUgZW50ZmVybmVuOiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg2NAorbXNnaWQgIk5vIG1vcmUgZmlsZXMgdG8gY2xlYW4sIGV4aXRpbmcuIgorbXNnc3RyICJLZWluZSBEYXRlaWVuIG1laHIgenVtIEzDtnNjaGVuLCBiZWVuZGUuIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODk1Cittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgImtlaW5lIE5hbWVuIHZvbiBnZWzDtnNjaHRlbiBEYXRlaWVuIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODk3Cittc2dpZCAiZm9yY2UiCittc2dzdHIgIkFrdGlvbiBlcnp3aW5nZW4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4OTgKK21zZ2lkICJpbnRlcmFjdGl2ZSBjbGVhbmluZyIKK21zZ3N0ciAiaW50ZXJha3RpdmVzIENsZWFuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTAwCittc2dpZCAicmVtb3ZlIHdob2xlIGRpcmVjdG9yaWVzIgorbXNnc3RyICJnYW56ZSBWZXJ6ZWljaG5pc3NlIGzDtnNjaGVuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTAxIGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDcgYnVpbHRpbi9ncmVwLmM6NzE0CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQzIGJ1aWx0aW4vbmFtZS1yZXYuYzozMTEgYnVpbHRpbi9zaG93LXJlZi5jOjE4NworbXNnaWQgInBhdHRlcm4iCittc2dzdHIgIk11c3RlciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwMgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICI8TXVzdGVyPiB6dSBkZW4gUmVnZWxuIGbDvHIgaWdub3JpZXJ0ZSBQZmFkZSBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwMworbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgImF1Y2ggaWdub3JpZXJ0ZSBEYXRlaWVuIGzDtnNjaGVuIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA1Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAibnVyIGlnbm9yaWVydGUgRGF0ZWllbiBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkyMworbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC14IHVuZCAtWCBrw7ZubmVuIG5pY2h0IGdlbWVpbnNhbSB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkyNworbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBhdWYgXCJ0cnVlXCIgZ2VzZXR6dCB1bmQgd2VkZXIgLWksIC1uIG5vY2ggLWYgZ2VnZWJlbjsgIgorIlwiY2xlYW5cIiB2ZXJ3ZWlnZXJ0IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTMwCittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyAiCisicmVmdXNpbmcgdG8gY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc3RhbmRhcmRtw6TDn2lnIGF1ZiBcInRydWVcIiBnZXNldHp0IHVuZCB3ZWRlciAtaSwgLW4gbm9jaCAtIgorImYgZ2VnZWJlbjsgXCJjbGVhblwiIHZlcndlaWdlcnQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNworbXNnaWQgImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorbXNnc3RyICJnaXQgY2xvbmUgWzxPcHRpb25lbj5dIFstLV0gPFJlcG9zaXRvcnk+IFs8VmVyemVpY2huaXM+XSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU3IGJ1aWx0aW4vZmV0Y2guYzoxMTIgYnVpbHRpbi9tZXJnZS5jOjIyNAorIzogYnVpbHRpbi9wdWxsLmM6MTA5IGJ1aWx0aW4vcHVzaC5jOjU2MCBidWlsdGluL3NlbmQtcGFjay5jOjE2OAorbXNnaWQgImZvcmNlIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiRm9ydHNjaHJpdHRzYW56ZWlnZSBlcnp3aW5nZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1OQorbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICJrZWluIEF1c2NoZWNrZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MCBidWlsdGluL2Nsb25lLmM6NjIgYnVpbHRpbi9pbml0LWRiLmM6NTA0Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJlaW4gQmFyZS1SZXBvc2l0b3J5IGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgImVpbiBTcGllZ2VsYXJjaGl2IGVyc3RlbGxlbiAoaW1wbGl6aWVydCAtLWJhcmUpIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjYKK21zZ2lkICJ0byBjbG9uZSBmcm9tIGEgbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAidm9uIGVpbmVtIGxva2FsZW4gUmVwb3NpdG9yeSBrbG9uZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2OAorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICJsb2thbCBrZWluZSBoYXJ0ZW4gVmVyd2Vpc2UgdmVyd2VuZGVuLCBpbW1lciBLb3BpZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICJhbHMgdmVydGVpbHRlcyBSZXBvc2l0b3J5IGVpbnJpY2h0ZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MiBidWlsdGluL2Nsb25lLmM6NzQKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICJTdWJtb2R1bGUgaW0gS2xvbiBpbml0aWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1IGJ1aWx0aW4vaW5pdC1kYi5jOjUwMQorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAiVm9ybGFnZW52ZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc2IGJ1aWx0aW4vaW5pdC1kYi5jOjUwMgorbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgIlZlcnplaWNobmlzLCB2b24gd2VsY2hlbSBkaWUgVm9ybGFnZW4gdmVyd2VuZGV0IHdlcmRlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc4Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgIlJlcG9zaXRvcnkgcmVmZXJlbnppZXJlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwCittc2dpZCAidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIKK21zZ3N0ciAiLS1yZWZlcmVuY2UgbnVyIHfDpGhyZW5kIGRlcyBLbG9uZW5zIGJlbnV0emVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODEgYnVpbHRpbi9jb2x1bW4uYzoyNiBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorbXNnaWQgIm5hbWUiCittc2dzdHIgIk5hbWUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MgorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAiPE5hbWU+IHN0YXR0ICdvcmlnaW4nIGbDvHIgVXBzdHJlYW0tUmVwb3NpdG9yeSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgIjxCcmFuY2g+IGF1c2NoZWNrZW4sIGFuc3RhdHQgSEVBRCBkZXMgUmVtb3RlLVJlcG9zaXRvcmllcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAiUGZhZCB6dSBcImdpdC11cGxvYWQtcGFja1wiIGF1ZiBkZXIgR2VnZW5zZWl0ZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg3IGJ1aWx0aW4vZmV0Y2guYzoxMTMgYnVpbHRpbi9ncmVwLmM6NjU5CisjOiBidWlsdGluL3B1bGwuYzoxODYKK21zZ2lkICJkZXB0aCIKK21zZ3N0ciAiVGllZmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4OAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAiIgorImVpbmVuIEtsb24gbWl0IHVudm9sbHN0w6RuZGlnZXIgSGlzdG9yaWUgKHNoYWxsb3cpIGluIGRpZXNlciBUaWVmZSBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MAorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAibnVyIGVpbmVuIEJyYW5jaCBrbG9uZW4sIEhFQUQgb2RlciAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxIGJ1aWx0aW4vaW5pdC1kYi5jOjUxMAorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiLmdpdC1WZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyIGJ1aWx0aW4vaW5pdC1kYi5jOjUxMQorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgIkdpdC1WZXJ6ZWljaG5pcyB2b20gQXJiZWl0c3ZlcnplaWNobmlzIHNlcGFyaWVyZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MworbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAiU2NobMO8c3NlbD1XZXJ0IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgIktvbmZpZ3VyYXRpb24gaW5uZXJoYWxiIGRlcyBuZXVlbiBSZXBvc2l0b3JpZXMgc2V0emVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIlJlZmVyZW56aWVydGVzIFJlcG9zaXRvcnkgJyVzJyBpc3Qga2VpbiBsb2thbGVzIFJlcG9zaXRvcnkuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgc2hhbGxvdyIKK21zZ3N0ciAiIgorIlJlZmVyZW56aWVydGVzIFJlcG9zaXRvcnkgJyVzJyBoYXQgZWluZSB1bnZvbGxzdMOkbmRpZ2UgSGlzdG9yaWUgKHNoYWxsb3cpLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIGdyYWZ0ZWQiCittc2dzdHIgIiIKKyJSZWZlcmVuemllcnRlcyBSZXBvc2l0b3J5ICclcycgaXN0IG1pdCBrw7xuc3RsaWNoZW4gVm9yZ8Okbmdlcm4gKFwiZ3JhZnRzXCIpICIKKyJlaW5nZWjDpG5ndC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzAgYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIGV4aXN0aWVydCB1bmQgaXN0IGtlaW4gVmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAiS29ubnRlICVzIG5pY2h0IGxlc2VuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgIktvbm50ZSBWZXJ3ZWlzICclcycgbmljaHQgZXJzdGVsbGVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAiS29ubnRlIERhdGVpIG5pY2h0IG5hY2ggJyVzJyBrb3BpZXJlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzNSBidWlsdGluL2Nsb25lLmM6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgIkZlcnRpZy5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0NworbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHRoZSBjaGVja291dCB3aXRoICdnaXQgY2hlY2tvdXQgLWYgSEVBRCdcbiIKK21zZ3N0ciAiIgorIktsb25lbiBlcmZvbGdyZWljaCwgQXVzY2hlY2tlbiBpc3QgYWJlciBmZWhsZ2VzY2hsYWdlbi5cbiIKKyJTaWUga8O2bm5lbiBtaXQgJ2dpdCBzdGF0dXMnIHByw7xmZW4sIHdhcyBhdXNnZWNoZWNrdCB3b3JkZW4gaXN0XG4iCisidW5kIGRhcyBBdXNjaGVja2VuIG1pdCAnZ2l0IGNoZWNrb3V0IC1mIEhFQUQnIGVybmV1dCB2ZXJzdWNoZW4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIktvbm50ZSB6dSBrbG9uZW5kZW4gUmVtb3RlLUJyYW5jaCAlcyBuaWNodCBmaW5kZW4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eS4uLiAiCittc2dzdHIgIlByw7xmZSBLb25uZWt0aXZpdMOkdCAuLi4gIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjE3Cittc2dpZCAicmVtb3RlIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHMiCittc2dzdHIgIlJlbW90ZS1SZXBvc2l0b3J5IGhhdCBuaWNodCBhbGxlIGVyZm9yZGVybGljaGVuIE9iamVrdGUgZ2VzZW5kZXQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjgxCittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICIiCisiRXh0ZXJuZXIgSEVBRCBiZXppZWh0IHNpY2ggYXVmIGVpbmUgbmljaHQgZXhpc3RpZXJlbmRlIFJlZmVyZW56IHVuZCBrYW5uICIKKyJuaWNodCBhdXNnZWNoZWNrdCB3ZXJkZW4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MTIKK21zZ2lkICJ1bmFibGUgdG8gY2hlY2tvdXQgd29ya2luZyB0cmVlIgorbXNnc3RyICJBcmJlaXRzdmVyemVpY2huaXMga29ubnRlIG5pY2h0IGF1c2dlY2hlY2t0IHdlcmRlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc5OQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgIkthbm4gXCJyZXBhY2tcIiB6dW0gQXVmcsOkdW1lbiBuaWNodCBhdWZydWZlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwMQorbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAiS2FubiB0ZW1wb3LDpHJlIFwiYWx0ZXJuYXRlc1wiLURhdGVpIG5pY2h0IGVudGZlcm5lbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgzMQorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgIlp1IHZpZWxlIEFyZ3VtZW50ZS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MzUKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIlNpZSBtw7xzc2VuIGVpbiBSZXBvc2l0b3J5IHp1bSBLbG9uZW4gYW5nZWJlbi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1iYXJlIHVuZCAtLW9yaWdpbiAlcyBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NDkKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiRGllIE9wdGlvbmVuIC0tYmFyZSB1bmQgLS1zZXBhcmF0ZS1naXQtZGlyIHNpbmQgaW5rb21wYXRpYmVsLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIlJlcG9zaXRvcnkgJyVzJyBleGlzdGllcnQgbmljaHQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODY4IGJ1aWx0aW4vZmV0Y2guYzoxMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiVGllZmUgJXMgaXN0IGtlaW5lIHBvc2l0aXZlIFphaGwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAiWmllbHBmYWQgJyVzJyBleGlzdGllcnQgYmVyZWl0cyB1bmQgaXN0IGtlaW4gbGVlcmVzIFZlcnplaWNobmlzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkFyYmVpdHN2ZXJ6ZWljaG5pcyAnJXMnIGV4aXN0aWVydCBiZXJlaXRzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwMyBidWlsdGluL2Nsb25lLmM6OTE0IGJ1aWx0aW4vd29ya3RyZWUuYzoyMTgKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgIktvbm50ZSBmw7xocmVuZGUgVmVyemVpY2huaXNzZSB2b24gJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnIgorbXNnc3RyICJLb25udGUgQXJiZWl0c3ZlcnplaWNobmlzICclcycgbmljaHQgZXJzdGVsbGVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJLbG9uZSBpbiBCYXJlLVJlcG9zaXRvcnkgJyVzJyAuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICJLbG9uZSBuYWNoICclcycgLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NTEKK21zZ2lkICItLWRpc3NvY2lhdGUgZ2l2ZW4sIGJ1dCB0aGVyZSBpcyBubyAtLXJlZmVyZW5jZSIKK21zZ3N0ciAiLS1kaXNzb2NpYXRlIG9obmUgLS1yZWZlcmVuY2UgYW5nZWdlYmVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTY4Cittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uIC0tZGVwdGggd2lyZCBpbiBsb2thbGVuIEtsb25lbiBpZ25vcmllcnQ7IGJlbnV0emVuIFNpZSAiCisic3RhdHRkZXNzZW4gZmlsZTovLyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3MQorbXNnaWQgInNvdXJjZSByZXBvc2l0b3J5IGlzIHNoYWxsb3csIGlnbm9yaW5nIC0tbG9jYWwiCittc2dzdHIgIiIKKyJRdWVsbGUgaXN0IGVpbiBSZXBvc2l0b3J5IG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSxpZ25vcmllcmUgLS0iCisibG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzYKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwgd2lyZCBpZ25vcmllcnQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gY2xvbmUgJXMiCittc2dzdHIgIldlacOfIG5pY2h0IHdpZSAlcyB6dSBrbG9uZW4gaXN0LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMjkgYnVpbHRpbi9jbG9uZS5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIlJlbW90ZS1CcmFuY2ggJXMgbmljaHQgaW0gVXBzdHJlYW0tUmVwb3NpdG9yeSAlcyBnZWZ1bmRlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDAKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJTaWUgc2NoZWluZW4gZWluIGxlZXJlcyBSZXBvc2l0b3J5IGdla2xvbnQgenUgaGFiZW4uIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjkKK21zZ2lkICJnaXQgY29sdW1uIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29sdW1uIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNgorbXNnaWQgImxvb2t1cCBjb25maWcgdmFycyIKK21zZ3N0ciAiS29uZmlndXJhdGlvbnN2YXJpYWJsZW4gbmFjaHNjaGxhZ2VuIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vY29sdW1uLmM6MjgKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICJ6dSB2ZXJ3ZW5kZW5kZSBBbm9yZG51bmciCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICJtYXhpbWFsZSBCcmVpdGUiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIgorbXNnc3RyICJBYnN0YW5kIHp1bSBsaW5rZW4gUmFuZCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICJBYnN0YW5kIHp1ciByZWNodGVuIFJhbmQiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAiQWJzdGFuZCB6d2lzY2hlbiBTcGFsdGVuIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICJEaWUgT3B0aW9uIC0tY29tbWFuZCBtdXNzIGFuIGVyc3RlciBTdGVsbGUgc3RlaGVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNworbXNnaWQgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgY29tbWl0IFs8T3B0aW9uZW4+XSBbLS1dIDxQZmFkc3BlemlmaWthdGlvbj4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDIKK21zZ2lkICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHN0YXR1cyBbPE9wdGlvbmVuPl0gWy0tXSA8UGZhZHNwZXppZmlrYXRpb24+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiSWhyIE5hbWUgdW5kIEUtTWFpbCBBZHJlc3NlIHd1cmRlbiBhdXRvbWF0aXNjaCBhdWYgQmFzaXNcbiIKKyJJaHJlcyBCZW51dHplci0gdW5kIFJlY2huZXJuYW1lbnMga29uZmlndXJpZXJ0LiBCaXR0ZSBwcsO8ZmVuIFNpZSwgZGFzc1xuIgorImRpZXNlIHp1dHJlZmZlbmQgc2luZC4gU2llIGvDtm5uZW4gZGllc2UgTWVsZHVuZyB1bnRlcmRyw7xja2VuLCBpbmRlbSBTaWVcbiIKKyJkaWVzZSBleHBsaXppdCBzZXR6ZW4uIEbDvGhyZW4gU2llIGRhenUgZGFzIGZvbGdlbmRlIEtvbW1hbmRvIGF1cyB1bmQgZm9sZ2VuXG4iCisiU2llIGRlbiBBbndlaXN1bmdlbiBpbiBJaHJlbSBFZGl0b3IsIHVtIGRpZSBLb25maWd1cmF0aW9uc2RhdGVpIHp1ICIKKyJiZWFyYmVpdGVuOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIk5hY2hkZW0gU2llIGRhcyBnZXRhbiBoYWJlbiwga8O2bm5lbiBTaWUgSWhyZSBJZGVudGl0w6R0IGbDvHIgZGllc2VuIENvbW1pdFxuIgorIsOkbmRlcm4gbWl0OlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIklociBOYW1lIHVuZCBFLU1haWwgQWRyZXNzZSB3dXJkZW4gYXV0b21hdGlzY2ggYXVmIEJhc2lzXG4iCisiSWhyZXMgQmVudXR6ZXItIHVuZCBSZWNobmVybmFtZW5zIGtvbmZpZ3VyaWVydC4gQml0dGUgcHLDvGZlbiBTaWUsIGRhc3NcbiIKKyJkaWVzZSB6dXRyZWZmZW5kIHNpbmQuIFNpZSBrw7ZubmVuIGRpZXNlIE1lbGR1bmcgdW50ZXJkcsO8Y2tlbiwgaW5kZW0gU2llXG4iCisiZGllc2UgZXhwbGl6aXQgc2V0emVuOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIklociBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIGlocmVAZW1haWxhZHJlc3NlLmRlXG4iCisiXG4iCisiTmFjaGRlbSBTaWUgZGFzIGdldGFuIGhhYmVuLCBrw7ZubmVuIFNpZSBJaHJlIElkZW50aXTDpHQgZsO8ciBkaWVzZW4gQ29tbWl0ICIKKyLDpG5kZXJuOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MgorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKK21zZ3N0ciAiIgorIlNpZSBmcmFndGVuIGRlbiBqw7xuZ3N0ZW4gQ29tbWl0IG5hY2h6dWJlc3Nlcm4sIGFiZXIgZGFzIHfDvHJkZSBkaWVzZW4gbGVlclxuIgorIm1hY2hlbi4gU2llIGvDtm5uZW4gSWhyIEtvbW1hbmRvIG1pdCAtLWFsbG93LWVtcHR5IHdpZWRlcmhvbGVuLCBvZGVyIGRpZXNlblxuIgorIkNvbW1pdCBtaXQgXCJnaXQgcmVzZXQgSEVBRF5cIiB2b2xsc3TDpG5kaWcgZW50ZmVybmVuLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3Cittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCittc2dzdHIgIiIKKyJEZXIgbGV0enRlIFwiY2hlcnJ5LXBpY2tcIiBpc3QgamV0enQgbGVlciwgbcO2Z2xpY2hlcndlaXNlIGR1cmNoIGVpbmUgIgorIktvbmZsaWt0YXVmbMO2c3VuZy5cbiIKKyJXZW5uIFNpZSBkaWVzIHRyb3R6ZGVtIGNvbW1pdHRlbiB3b2xsZW4sIGJlbnV0emVuIFNpZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAiQW5kZXJuZmFsbHMgYmVudXR6ZW4gU2llIGJpdHRlICdnaXQgcmVzZXQnXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODcKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgcmVzZXRcbiIKKyJcbiIKKyJUaGVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB3aWxsIHJlc3VtZSBjaGVycnktcGlja2luZ1xuIgorInRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKK21zZ3N0ciAiIgorIldlbm4gU2llIGRpZXNlbiBDb21taXQgYXVzbGFzc2VuIG3DtmNodGVuLCBiZW51dHplbiBTaWU6XG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIkJlbnV0emVuIFNpZSBhbnNjaGxpZcOfZW5kIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiwgdW0gZGllXG4iCisiQ2hlcnJ5LVBpY2stT3BlcmF0aW9uIG1pdCBkZW4gdmVyYmxlaWJlbmRlbiBDb21taXRzIGZvcnR6dXNldHplbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMDQKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgIkZlaGxlciBiZWltIEVudHBhY2tlbiBkZXMgXCJUcmVlXCItT2JqZWt0ZXMgdm9uIEhFQUQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM0NQorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJLb25udGUgdGVtcG9yw6RyZW4gSW5kZXggbmljaHQgZXJzdGVsbGVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNTEKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICJpbnRlcmFrdGl2ZXMgSGluenVmw7xnZW4gZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIktvbm50ZSB0ZW1wb3LDpHJlbiBJbmRleCBuaWNodCBha3R1YWxpc2llcmVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjYKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAiS29ubnRlIEhhdXB0LUNhY2hlLVZlcnplaWNobmlzIG5pY2h0IGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzkwIGJ1aWx0aW4vY29tbWl0LmM6NDEzIGJ1aWx0aW4vY29tbWl0LmM6NDYyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgbmV3X2luZGV4IERhdGVpIG5pY2h0IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NDQKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgIkthbm4ga2VpbmVuIFRlaWwtQ29tbWl0IGR1cmNoZsO8aHJlbiwgd8OkaHJlbmQgZWluIE1lcmdlIGltIEdhbmdlIGlzdC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ2Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisiS2FubiBrZWluZW4gVGVpbC1Db21taXQgZHVyY2hmw7xocmVuLCB3w6RocmVuZCBcImNoZXJyeS1waWNrXCIgaW0gR2FuZ2UgaXN0LiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NTUKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIkthbm4gSW5kZXggbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICJLb25udGUgdGVtcG9yw6RyZSBJbmRleC1EYXRlaSBuaWNodCBzY2hyZWliZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICJDb21taXQgJyVzJyBmZWhsdCBBdXRvci1Lb3BmYmVyZWljaCIKKworIzogYnVpbHRpbi9jb21taXQuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAiQ29tbWl0ICclcycgaGF0IGZlaGxlcmhhZnRlIEF1dG9yLVplaWxlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwMAorbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgIkZlaGxlcmhhZnRlciAtLWF1dGhvciBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlcyBEYXR1bXNmb3JtYXQ6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY1MgorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisiS29ubnRlIGtlaW4gS29tbWVudGFyLVplaWNoZW4gYXVzd8OkaGxlbiwgZGFzIG5pY2h0IGluXG4iCisiZGVyIGFrdHVlbGxlbiBDb21taXQtQmVzY2hyZWlidW5nIHZlcndlbmRldCB3aXJkLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2ODkgYnVpbHRpbi9jb21taXQuYzo3MjIgYnVpbHRpbi9jb21taXQuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICJLb25udGUgQ29tbWl0ICVzIG5pY2h0IG5hY2hzY2hsYWdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDEgYnVpbHRpbi9zaG9ydGxvZy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIobGVzZSBMb2ctTmFjaHJpY2h0IHZvbiBTdGFuZGFyZC1FaW5nYWJlKVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwMworbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJLb25udGUgTG9nIG5pY2h0IHZvbiBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAiS29ubnRlIExvZy1EYXRlaSAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyOQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAiS29ubnRlIE1FUkdFX01TRyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICJLb25udGUgU1FVQVNIX01TRyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3ODQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICJLb25udGUgQ29tbWl0LVZvcmxhZ2UgbmljaHQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJFcyBzaWVodCBzbyBhdXMsIGFscyBjb21taXR0ZW4gU2llIGVpbmVuIE1lcmdlLlxuIgorIkZhbGxzIGRhcyBuaWNodCBrb3JyZWt0IGlzdCwgbMO2c2NoZW4gU2llIGJpdHRlIGRpZSBEYXRlaVxuIgorIlx0JXNcbiIKKyJ1bmQgdmVyc3VjaGVuIFNpZSBlcyBlcm5ldXQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkVzIHNpZWh0IHNvIGF1cywgYWxzIGNvbW1pdHRlbiBTaWUgZWluZW4gXCJjaGVycnktcGlja1wiLlxuIgorIkZhbGxzIGRhcyBuaWNodCBrb3JyZWt0IGlzdCwgbMO2c2NoZW4gU2llIGJpdHRlIGRpZSBEYXRlaVxuIgorIlx0JXNcbiIKKyJ1bmQgdmVyc3VjaGVuIFNpZSBlcyBlcm5ldXQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJCaXR0ZSBnZWJlbiBTaWUgZWluZSBDb21taXQtQmVzY2hyZWlidW5nIGbDvHIgSWhyZSDDhG5kZXJ1bmdlbiBlaW4uIFplaWxlbixcbiIKKyJkaWUgbWl0ICclYycgYmVnaW5uZW4sIHdlcmRlbiBpZ25vcmllcnQsIHVuZCBlaW5lIGxlZXJlIEJlc2NocmVpYnVuZ1xuIgorImJyaWNodCBkZW4gQ29tbWl0IGFiLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkJpdHRlIGdlYmVuIFNpZSBlaW5lIENvbW1pdC1CZXNjaHJlaWJ1bmcgZsO8ciBJaHJlIMOEbmRlcnVuZ2VuIGVpbi4gWmVpbGVuLCAiCisiZGllXG4iCisibWl0ICclYycgYmVnaW5uZW4sIHdlcmRlbiBiZWliZWhhbHRlbjsgd2VubiBTaWUgbcO2Y2h0ZW4sIGvDtm5uZW4gU2llIGRpZXNlICIKKyJlbnRmZXJuZW4uXG4iCisiRWluZSBsZWVyZSBCZXNjaHJlaWJ1bmcgYnJpY2h0IGRlbiBDb21taXQgYWIuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNBdXRvcjogICAgICAgICAgICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVzRGF0dW06ICAgICAgICAgICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNDb21taXQtRXJzdGVsbGVyOiAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4ODAKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiS2FubiBJbmRleCBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5MzcKK21zZ2lkICJFcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gRXJ6ZXVnZW4gZGVyIFwiVHJlZVwiLU9iamVrdGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTUyIGJ1aWx0aW4vdGFnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIkJpdHRlIGxpZWZlcm4gU2llIGVpbmUgQmVzY2hyZWlidW5nIGVudHdlZGVyIG1pdCBkZXIgT3B0aW9uIC1tIG9kZXIgLUYuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKyItLWF1dGhvciAnJXMnIGlzdCBuaWNodCBpbSBGb3JtYXQgJ05hbWUgPEUtTWFpbD4nIHVuZCBzdGltbXQgbWl0IGtlaW5lbSAiCisidm9yaGFuZGVuZW4gQXV0b3Igw7xiZXJlaW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2OSBidWlsdGluL2NvbW1pdC5jOjEzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciBNb2R1cyAnJXMnIGbDvHIgdW52ZXJzaW9uaWVydGUgRGF0ZWllbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTA2Cittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1sb25nIHVuZCAteiBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEzNgorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLS1yZXNldC1hdXRob3IgdW5kIC0tYXV0aG9yIGvDtm5uZW4gbmljaHQgZ2VtZWluc2FtIHZlcndlbmRldCAiCisid2VyZGVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTQ1Cittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIlNpZSBoYWJlbiBuaWNodHMgZsO8ciBcIi0tYW1lbmRcIi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE0OAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIkVpbiBNZXJnZSBpc3QgaW0gR2FuZ2UgLS0ga2FubiBcIi0tYW1lbmRcIiBuaWNodCBhdXNmw7xocmVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTUwCittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hlcnJ5LXBpY2sgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiXCJjaGVycnktcGlja1wiIGlzdCBpbSBHYW5nZSAtLSBrYW5uIFwiLS1hbWVuZFwiIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTMKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC0tc3F1YXNoIHVuZCAtLWZpeHVwIGvDtm5uZW4gbmljaHQgZ2VtZWluc2FtIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjMKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiRXMga2FubiBudXIgZWluZSBPcHRpb24gdm9uIC1jLy1DLy1GLy0tZml4dXAgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2NQorbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi8tLWZpeHVwLiIKK21zZ3N0ciAiRGllIE9wdGlvbiAtbSBrYW5uIG5pY2h0IG1pdCAtYy8tQy8tRi8tLWZpeHVwIGtvbWJpbmllcnQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTczCittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiIgorIkRpZSBPcHRpb24gLS1yZXNldC0tYXV0aG9yIGthbm4gbnVyIG1pdCAtQywgLWMgb2RlciAtLWFtZW5kIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTAKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJFcyBrYW5uIG51ciBlaW5lIE9wdGlvbiB2b24gLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggIgorInZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTIKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLS1pbmNsdWRlIHVuZCAtLW9ubHkga8O2bm5lbiBudXIgbWl0IGRlciBBbmdhYmUgdm9uIFBmYWRlbiAiCisidmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5NAorbXNnaWQgIkNsZXZlci4uLiBhbWVuZGluZyB0aGUgbGFzdCBvbmUgd2l0aCBkaXJ0eSBpbmRleC4iCittc2dzdHIgIktsdWcgLi4uIGRlbiBsZXR6dGVuIENvbW1pdCBtaXQgZWluZW0gZ2XDpG5kZXJ0ZW4gSW5kZXggbmFjaGJlc3Nlcm4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTYKK21zZ2lkICJFeHBsaWNpdCBwYXRocyBzcGVjaWZpZWQgd2l0aG91dCAtaSBvciAtbzsgYXNzdW1pbmcgLS1vbmx5IHBhdGhzLi4uIgorbXNnc3RyICJFeHBsaXppdGUgUGZhZGUgb2huZSAtaSBvZGVyIC1vIGFuZ2VnZWJlbjsgbmVobWUgLS1vbmx5IGFuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDggYnVpbHRpbi90YWcuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFwiY2xlYW51cFwiIE1vZHVzICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMTMKK21zZ2lkICJQYXRocyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICJEaWUgT3B0aW9uIC1hIGthbm4gbmljaHQgbWl0IGRlciBBbmdhYmUgdm9uIFBmYWRlbiB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzIzIGJ1aWx0aW4vY29tbWl0LmM6MTYwMgorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAiU3RhdHVzIGltIEt1cnpmb3JtYXQgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNSBidWlsdGluL2NvbW1pdC5jOjE2MDQKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiQnJhbmNoaW5mb3JtYXRpb25lbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI3IGJ1aWx0aW4vY29tbWl0LmM6MTYwNiBidWlsdGluL3B1c2guYzo1NDYKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAibWFzY2hpbmVubGVzYmFyZSBBdXNnYWJlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzAgYnVpbHRpbi9jb21taXQuYzoxNjA4Cittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICJTdGF0dXMgaW0gTGFuZ2Zvcm1hdCBhbnplaWdlbiAoU3RhbmRhcmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzMgYnVpbHRpbi9jb21taXQuYzoxNjExCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgIkVpbnRyw6RnZSBtaXQgTlVMLVplaWNoZW4gYWJzY2hsaWXDn2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzUgYnVpbHRpbi9jb21taXQuYzoxNjE0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODEKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODQgYnVpbHRpbi90YWcuYzo2MDQKK21zZ2lkICJtb2RlIgorbXNnc3RyICJNb2R1cyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM2IGJ1aWx0aW4vY29tbWl0LmM6MTYxNAorbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorInVudmVyc2lvbmllcnRlIERhdGVpZW4gYW56ZWlnZW4sIG9wdGlvbmFsZSBNb2RpOiBhbGwsIG5vcm1hbCwgbm8uIChTdGFuZGFyZDogIgorImFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzOQorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiaWdub3JpZXJ0ZSBEYXRlaWVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDAgcGFyc2Utb3B0aW9ucy5oOjE1NQorbXNnaWQgIndoZW4iCittc2dzdHIgIndhbm4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MQorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorIsOEbmRlcnVuZ2VuIGluIFN1Ym1vZHVsZW4gaWdub3JpZXJlbiwgb3B0aW9uYWwgd2VubjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKFN0YW5kYXJkOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDMKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJ1bnZlcnNpb25pZXJ0ZSBEYXRlaWVuIGluIFNwYWx0ZW4gYXVmbGlzdGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MjkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJLb25udGUgbmV1IGVyc3RlbGx0ZW4gQ29tbWl0IG5pY2h0IG5hY2hzY2hsYWdlbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQzMQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiS29ubnRlIG5ldWxpY2ggZXJzdGVsbHRlbiBDb21taXQgbmljaHQgYW5hbHlzaWVyZW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzYKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJsb3NnZWzDtnN0ZXIgSEVBRCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc5Cittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAoQmFzaXMtQ29tbWl0KSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTcyCittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAiWnVzYW1tZW5mYXNzdW5nIG5hY2ggZXJmb2xncmVpY2hlbSBDb21taXQgdW50ZXJkcsO8Y2tlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTczCittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICJVbnRlcnNjaGllZGUgaW4gQ29tbWl0LUJlc2NocmVpYnVuZ3N2b3JsYWdlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzUKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJPcHRpb25lbiBmw7xyIENvbW1pdC1CZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NiBidWlsdGluL3RhZy5jOjYwMgorbXNnaWQgInJlYWQgbWVzc2FnZSBmcm9tIGZpbGUiCittc2dzdHIgIkJlc2NocmVpYnVuZyB2b24gRGF0ZWkgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NworbXNnaWQgImF1dGhvciIKK21zZ3N0ciAiQXV0b3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NworbXNnaWQgIm92ZXJyaWRlIGF1dGhvciBmb3IgY29tbWl0IgorbXNnc3RyICJBdXRvciBlaW5lcyBDb21taXRzIMO8YmVyc2NocmVpYmVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzggYnVpbHRpbi9nYy5jOjI2OAorbXNnaWQgImRhdGUiCiBtc2dzdHIgIkRhdHVtIgogCi0jOiBnaXRrOjg4MzUKLW1zZ2lkICJDaGlsZHJlbiIKLW1zZ3N0ciAiS2luZGVyIgorIzogYnVpbHRpbi9jb21taXQuYzoxNTc4Cittc2dpZCAib3ZlcnJpZGUgZGF0ZSBmb3IgY29tbWl0IgorbXNnc3RyICJEYXR1bSBlaW5lcyBDb21taXRzIMO8YmVyc2NocmVpYmVuIgogCi0jOiBnaXRrOjg4OTgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCAlcyBicmFuY2ggdG8gaGVyZSIKLW1zZ3N0ciAiWndlaWcgwrslc8KrIGhpZXJoZXIgenVyw7xja3NldHplbiIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OSBidWlsdGluL21lcmdlLmM6MjE4IGJ1aWx0aW4vbm90ZXMuYzozOTIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTUgYnVpbHRpbi90YWcuYzo2MDAKK21zZ2lkICJtZXNzYWdlIgorbXNnc3RyICJCZXNjaHJlaWJ1bmciCiAKLSM6IGdpdGs6ODkwMAotbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgotbXNnc3RyICJad2VpZ3NwaXR6ZSBpc3QgYWJnZXRyZW5udDogWnVyw7xja3NldHplbiBuaWNodCBtw7ZnbGljaCIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OQorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJDb21taXQtQmVzY2hyZWlidW5nIgogCi0jOiBnaXRrOjkwMDUgZ2l0azo5MDExCi1tc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKLW1zZ3N0ciAiw5xiZXJzcHJpbmdlIFp1c2FtbWVuZsO8aHJ1bmdzLVZlcnNpb24gIgorIzogYnVpbHRpbi9jb21taXQuYzoxNTgwCittc2dpZCAicmV1c2UgYW5kIGVkaXQgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIkJlc2NocmVpYnVuZyBkZXMgYW5nZWdlYmVuZW4gQ29tbWl0cyB3aWVkZXJ2ZXJ3ZW5kZW4gdW5kIGVkaXRpZXJlbiIKIAotIzogZ2l0azo5MDIwIGdpdGs6OTAyNQotbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gSG9sZW4gZGVyIFBhdGNoLUlEIGbDvHIgIgorIzogYnVpbHRpbi9jb21taXQuYzoxNTgxCittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIkJlc2NocmVpYnVuZyBkZXMgYW5nZWdlYmVuZW4gQ29tbWl0cyB3aWVkZXJ2ZXJ3ZW5kZW4iCiAKLSM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKLW1zZ2lkICIgLSBzdG9wcGluZ1xuIgotbXNnc3RyICIgLSBBYmJydWNoLlxuIgotCi0jOiBnaXRrOjkwMzEgZ2l0azo5MDM0IGdpdGs6OTA0MiBnaXRrOjkwNTYgZ2l0azo5MDY1Ci1tc2dpZCAiQ29tbWl0ICIKLW1zZ3N0ciAiVmVyc2lvbiAiCi0KLSM6IGdpdGs6OTAzNQotbXNnaWQgIiIKLSIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKLSIgICAgICAgIgorIzogYnVpbHRpbi9jb21taXQuYzoxNTgyCittc2dpZCAidXNlIGF1dG9zcXVhc2ggZm9ybWF0dGVkIG1lc3NhZ2UgdG8gZml4dXAgc3BlY2lmaWVkIGNvbW1pdCIKIG1zZ3N0ciAiIgotIiBpc3QgZGFzIGdsZWljaGUgUGF0Y2ggd2llXG4iCi0iICAgICAgICIKKyJlaW5lIGF1dG9tYXRpc2NoIHp1c2FtbWVuZ2VzZXR6dGUgQmVzY2hyZWlidW5nIHp1bSBOYWNoYmVzc2VybiBkZXMgIgorImFuZ2VnZWJlbmVuIENvbW1pdHMgdmVyd2VuZGVuIgogCi0jOiBnaXRrOjkwNDMKLW1zZ2lkICIiCi0iIGRpZmZlcnMgZnJvbVxuIgotIiAgICAgICAiCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODMKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKIG1zZ3N0ciAiIgotIiBpc3QgdW50ZXJzY2hpZWRsaWNoIHZvblxuIgotIiAgICAgICAiCisiZWluZSBhdXRvbWF0aXNjaCB6dXNhbW1lbmdlc2V0enRlIEJlc2NocmVpYnVuZyBiZWltIFwic3F1YXNoXCIgZGVzICIKKyJhbmdlZ2ViZW5lbiBDb21taXRzIHZlcndlbmRlbiIKIAotIzogZ2l0azo5MDQ1CisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODQKK21zZ2lkICJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIgorbXNnc3RyICJTaWUgYWxzIEF1dG9yIGRlcyBDb21taXRzIHNldHplbiAodmVyd2VuZGV0IG1pdCAtQy8tYy8tLWFtZW5kKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg1IGJ1aWx0aW4vbG9nLmM6MTIxNiBidWlsdGluL3JldmVydC5jOjg2Cittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICInU2lnbmVkLW9mZi1ieTonLVplaWxlIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODYKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgImFuZ2VnZWJlbmUgVm9ybGFnZW5kYXRlaSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NworbXNnaWQgImZvcmNlIGVkaXQgb2YgY29tbWl0IgorbXNnc3RyICJCZWFyYmVpdHVuZyBkZXMgQ29tbWl0cyBlcnp3aW5nZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIlN0YW5kYXJkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODggYnVpbHRpbi90YWcuYzo2MDUKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICIiCisid2llIExlZXJ6ZWljaGVuIHVuZCAjS29tbWVudGFyZSB2b24gZGVyIEJlc2NocmVpYnVuZyBnZXRyZW5udCB3ZXJkZW4gc29sbGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODkKK21zZ2lkICJpbmNsdWRlIHN0YXR1cyBpbiBjb21taXQgbWVzc2FnZSB0ZW1wbGF0ZSIKK21zZ3N0ciAiU3RhdHVzIGluIGRpZSBDb21taXQtQmVzY2hyZWlidW5nc3ZvcmxhZ2UgZWluZsO8Z2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTEgYnVpbHRpbi9tZXJnZS5jOjIyNiBidWlsdGluL3B1bGwuYzoxNTYKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTMKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgIkNvbW1pdCBtaXQgR1BHIHNpZ25pZXJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk0Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbmVuIGbDvHIgQ29tbWl0LUluaGFsdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk1Cittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJhbGxlIGdlw6RuZGVydGVuIERhdGVpZW4gY29tbWl0dGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTYKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgImRpZSBhbmdlZ2ViZW5lbiBEYXRlaWVuIHp1c8OkdHpsaWNoIHp1bSBDb21taXQgdm9ybWVya2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTcKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAiaW50ZXJha3RpdmVzIEhpbnp1ZsO8Z2VuIHZvbiBEYXRlaWVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTgKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICJpbnRlcmFrdGl2ZXMgSGluenVmw7xnZW4gdm9uIMOEbmRlcnVuZ2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTkKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgIm51ciBkaWUgYW5nZWdlYmVuZW4gRGF0ZWllbiBjb21taXR0ZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwMAorbXNnaWQgImJ5cGFzcyBwcmUtY29tbWl0IGhvb2siCittc2dzdHIgIlwicHJlLWNvbW1pdCBob29rXCIgdW1nZWhlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjAxCittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAiYW56ZWlnZW4sIHdhcyBjb21taXR0ZXQgd2VyZGVuIHfDvHJkZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjEyCittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICJ2b3JoZXJpZ2VuIENvbW1pdCDDpG5kZXJuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTMKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgIlwicG9zdC1yZXdyaXRlIGhvb2tcIiB1bWdlaGVuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTgKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICJBdWZ6ZWljaG51bmcgZWluZXIgbGVlcmVuIMOEbmRlcnVuZyBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjIwCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiQXVmemVpY2hudW5nIGVpbmVyIMOEbmRlcnVuZyBtaXQgZWluZXIgbGVlcmVuIEJlc2NocmVpYnVuZyBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjQ5Cittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICJLb25udGUgQ29tbWl0IHZvbiBIRUFEIG5pY2h0IGFuYWx5c2llcmVuLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIkJlc2Now6RkaWd0ZSBNRVJHRV9IRUFELURhdGVpICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTcwMgorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIktvbm50ZSBNRVJHRV9NT0RFIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICJLb25udGUgQ29tbWl0LUJlc2NocmVpYnVuZyBuaWNodCBsZXNlbjogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIkNvbW1pdCBhYmdlYnJvY2hlbjsgU2llIGhhYmVuIGRpZSBCZXNjaHJlaWJ1bmcgbmljaHQgZWRpdGllcnQuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTczNworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJDb21taXQgYXVmZ3J1bmQgbGVlcmVyIEJlc2NocmVpYnVuZyBhYmdlYnJvY2hlbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzg1CiBtc2dpZCAiIgotIkRpZmYgb2YgY29tbWl0czpcbiIKKyJSZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzZXQgSEVBRFwiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiRGFzIFJlcG9zaXRvcnkgd3VyZGUgYWt0dWFsaXNpZXJ0LCBhYmVyIGRpZSBcIm5ld19pbmRleFwiLURhdGVpXG4iCisia29ubnRlIG5pY2h0IGdlc2NocmllYmVuIHdlcmRlbi4gUHLDvGZlbiBTaWUsIGRhc3MgSWhyZSBGZXN0cGxhdHRlIG5pY2h0XG4iCisidm9sbCB1bmQgSWhyIEtvbnRpbmdlbnQgbmljaHQgYXVmZ2VicmF1Y2h0IGlzdCB1bmQgZsO8aHJlbiBTaWVcbiIKKyJhbnNjaGxpZcOfZW5kIFwiZ2l0IHJlc2V0IEhFQURcIiB6dSBXaWVkZXJoZXJzdGVsbHVuZyBhdXMuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NAorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICJPcnQgZGVyIEtvbmZpZ3VyYXRpb25zZGF0ZWkiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTUKK21zZ2lkICJ1c2UgZ2xvYmFsIGNvbmZpZyBmaWxlIgorbXNnc3RyICJnbG9iYWxlIEtvbmZpZ3VyYXRpb25zZGF0ZWkgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU2Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAic3lzdGVtd2VpdGUgS29uZmlndXJhdGlvbnNkYXRlaSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTcKK21zZ2lkICJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIKK21zZ3N0ciAiS29uZmlndXJhdGlvbnNkYXRlaSBkZXMgUmVwb3NpdG9yaWVzIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OAorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAiZGllIGFuZ2VnZWJlbmUgS29uZmlndXJhdGlvbnNkYXRlaSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTkKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICJCbG9iLUlkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU5Cittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAiS29uZmlndXJhdGlvbiB2b24gYW5nZWdlYmVuZW0gQmxvYi1PYmpla3QgbGVzZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjAKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgIkFrdGlvbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MQorbXNnaWQgImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJXZXJ0IHp1csO8Y2tnZWJlbjogTmFtZSBbV2VydC1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjIKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImFsbGUgV2VydGUgenVyw7xja2dlYmVuOiBTY2hsw7xzc2VsIFtXZXJ0LXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MworbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJXZXJ0ZSBmw7xyIGRlbiByZWd1bMOkcmVuIEF1c2RydWNrIHp1csO8Y2tnZWJlbjogTmFtZS1yZWdleCBbV2VydC1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjQKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICJXZXJ0IHNwZXppZmlzY2ggZsO8ciBlaW5lIFVSTCB6dXLDvGNrZ2ViZW46IHNlY3Rpb25bLnZhcl0gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgImFsbGUgcGFzc2VuZGVuIFZhcmlhYmxlbiBlcnNldHplbjogTmFtZSBXZXJ0IFtXZXJ0LXJlZ2V4XSAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjYKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgIm5ldWUgVmFyaWFibGUgaGluenVmw7xnZW46IE5hbWUgV2VydCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NworbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImVpbmUgVmFyaWFibGUgZW50ZmVybmVuOiBOYW1lIFtXZXJ0LXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OAorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJhbGxlIMOcYmVyZWluc3RpbW11bmdlbiBlbnRmZXJuZW46IE5hbWUgW1dlcnQtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY5Cittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICJlaW5lIFNla3Rpb24gdW1iZW5lbm5lbjogYWx0ZXItTmFtZSBuZXVlci1OYW1lIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcwCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAiZWluZSBTZWt0aW9uIGVudGZlcm5lbjogTmFtZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MQorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJhbGxlcyBhdWZsaXN0ZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzIKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAiZWluZW4gRWRpdG9yIMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAiZGllIGtvbmZpZ3VyaWVydGUgRmFyYmUgZmluZGVuOiBTbG90IFtTdGFuZGFyZF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAiZGllIEZhcmJlaW5zdGVsbHVuZyBmaW5kZW46IFNsb3QgW1N0YW5kYXJkLUF1c2dhYmUtaXN0LVRlcm1pbmFsXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NQorbXNnaWQgIlR5cGUiCittc2dzdHIgIlR5cCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NgorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAiV2VydCBpc3QgXCJ0cnVlXCIgb2RlciBcImZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzcKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAiV2VydCBpc3QgZWluZSBEZXppbWFsemFobCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OAorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAiV2VydCBpc3QgLS1ib29sIG9kZXIgLS1pbnQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzkKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICJXZXJ0IGlzdCBlaW4gUGZhZCAoRGF0ZWkgb2RlciBWZXJ6ZWljaG5pc25hbWUpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgwCittc2dpZCAiT3RoZXIiCittc2dzdHIgIlNvbnN0aWdlcyIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MQorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAic2NobGllw590IFdlcnRlIG1pdCBOVUwtQnl0ZSBhYiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MgorbXNnaWQgInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIKK21zZ3N0ciAibnVyIFZhcmlhYmxlbm5hbWVuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgzCittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICJiZWFjaHRldCBcImluY2x1ZGVcIi1EaXJla3RpdmVuIGJlaW0gTmFjaHNjaGxhZ2VuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjMxMQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICJrb25udGUgU3RhbmRhcmQtRmFyYndlcnQgbmljaHQgcGFyc2VuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIiCisiIyBEYXMgaXN0IEdpdCdzIGJlbnV0emVyc3BlemlmaXNjaGUgS29uZmlndXJhaW9uc2RhdGVpLlxuIgorIlt1c2VyXVxuIgorIiMgQml0dGUgcGFzc2VuIFNpZSBkaWUgZm9sZ2VuZGVuIFplaWxlbiBhbiB1bmQga29tbWVudGllcmVuIFNpZSBkaWVzZSBhdXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyIKK21zZ3N0ciAiS29ubnRlIEtvbmZpZ3VyYXRpb25zZGF0ZWkgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo1NQorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjY1Cittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICJnaWJ0IEdyw7bDn2VuYW5nYWJlbiBpbiBtZW5zY2hlbmxlc2JhcmVuIEZvcm1hdCBhdXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8T3B0aW9uZW4+XSBbPENvbW1pdC1BbmdhYmU+Li4uXSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjE4Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgImdpdCBkZXNjcmliZSBbPE9wdGlvbmVuPl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgImFubm90aWVydGVzIFRhZyAlcyBpc3QgbmljaHQgdmVyZsO8Z2JhciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICJhbm5vdGllcnRlcyBUYWcgJXMgaGF0IGtlaW5lbiBlaW5nZWJldHRldGVuIE5hbWVuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgIlRhZyAnJXMnIGlzdCBlaWdlbnRsaWNoICclcycgaGllciIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI1MCBidWlsdGluL2xvZy5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiJXMgaXN0IGtlaW4gZ8O8bHRpZ2VyIE9iamVrdC1OYW1lIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIlcyBpc3Qga2VpbiBnw7xsdGlnZXMgJyVzJyBPYmpla3QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICJrZWluIFRhZyBlbnRzcHJpY2h0IGV4YWt0ICclcyciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VhcmNoaW5nIHRvIGRlc2NyaWJlICVzXG4iCittc2dzdHIgInN1Y2hlIHp1ciBCZXNjaHJlaWJ1bmcgdm9uICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgImJlZW5kZXRlIFN1Y2hlIGJlaSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgorbXNnc3RyICIiCisiS2VpbmUgYW5ub3RpZXJ0ZW4gVGFncyBrw7ZubmVuICclcycgYmVzY2hyZWliZW4uXG4iCisiSmVkb2NoIGdhYiBlcyBuaWNodC1hbm5vdGllcnRlIFRhZ3M6IHZlcnN1Y2hlbiBTaWUgLS10YWdzLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisiS2VpbmUgVGFncyBrw7ZubmVuICclcycgYmVzY2hyZWliZW4uXG4iCisiVmVyc3VjaGVuIFNpZSAtLWFsd2F5cyBvZGVyIGVyc3RlbGxlbiBTaWUgZWluaWdlIFRhZ3MuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICIlbHUgQ29tbWl0cyBkdXJjaGxhdWZlblxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorIm1laHIgYWxzICVpIFRhZ3MgZ2VmdW5kZW47IEbDvGhyZSBkaWUgZXJzdGVuICVpIGF1ZlxuIgorIlN1Y2hlIGJlaSAlcyBhdWZnZWdlYmVuXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTYKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICJkYXMgVGFnIGZpbmRlbiwgZGFzIG5hY2ggZGVtIENvbW1pdCBrb21tdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NworbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgImRpZSBTdWNoc3RyYXRlZ2llIGluIGRlciBTdGFuZGFyZC1GZWhsZXJhdXNnYWJlIHByb3Rva29sbGllcmVuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk4Cittc2dpZCAidXNlIGFueSByZWYiCittc2dzdHIgImFsbGUgUmVmZXJlbnplbiB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTkKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAiamVkZXMgVGFnIHZlcndlbmRlbiwgYXVjaCBuaWNodC1hbm5vdGllcnRlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDAwCittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAiaW1tZXIgbGFuZ2VzIEZvcm1hdCB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDEKK21zZ2lkICJvbmx5IGZvbGxvdyBmaXJzdCBwYXJlbnQiCittc2dzdHIgIm51ciBlcnN0ZW0gRWx0ZXJudGVpbCBmb2xnZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDQKK21zZ2lkICJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIgorbXNnc3RyICJudXIgZXhha3RlIMOcYmVyZWluc3RpbW11bmdlbiBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNgorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgImRpZSBqw7xuZ3N0ZW4gPG4+IFRhZ3MgYmV0cmFjaHRlbiAoU3RhbmRhcmQ6IDEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwOAorbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgIm51ciBUYWdzLCBkaWUgPE11c3Rlcj4gZW50c3ByZWNoZW4sIGJldHJhY2h0ZW4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTAgYnVpbHRpbi9uYW1lLXJldi5jOjMxOAorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAiZ2Vrw7xyenRlcyBDb21taXQtT2JqZWt0IGFuemVpZ2VuLCB3ZW5uIHNvbnN0IG5pY2h0cyB6dXRyaWZmdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMQorbXNnaWQgIm1hcmsiCittc2dzdHIgIktlbm56ZWljaGVuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDEyCittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICIiCisiPEtlbm56ZWljaGVuPiBiZWkgZ2XDpG5kZXJ0ZW0gQXJiZWl0c3ZlcnplaWNobmlzIGhpbnp1ZsO8Z2VuIChTdGFuZGFyZDogXCItIgorImRpcnR5XCIpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDMwCittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIkRpZSBPcHRpb25lbiAtLWxvbmcgdW5kIC0tYWJicmV2PTAgc2luZCBpbmtvbXBhdGliZWwuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU2Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIktlaW5lIE5hbWVuIGdlZnVuZGVuLCBrYW5uIG5pY2h0cyBiZXNjaHJlaWJlbi4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NzYKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLWRpcnR5IGthbm4gbmljaHQgbWl0IENvbW1pdHMgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICInJXMnOiBrZWluZSByZWd1bMOkcmUgRGF0ZWkgb2RlciBzeW1ib2xpc2NoZSBWZXJrbsO8cGZ1bmciCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2UgT3B0aW9uOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU4Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIktlaW4gR2l0LVJlcG9zaXRvcnkiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAiT2JqZWt0ICclcycgaXN0IHVuZ8O8bHRpZy4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICJNZWhyIGFscyB6d2VpIEJsb2JzIGFuZ2VnZWJlbjogJyVzJyIKKworIzogYnVpbHRpbi9kaWZmLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgInVuYmVoYW5kZWx0ZXMgT2JqZWt0ICclcycgYW5nZWdlYmVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjUKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgwCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAiRm9ydHNjaHJpdHQgbmFjaCA8bj4gT2JqZWt0ZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODIKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgIkJlaGFuZGx1bmcgdm9uIHNpZ25pZXJ0ZW4gVGFncyB3w6RobGVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg1Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAiQmVoYW5kbHVuZyB2b24gVGFncyB3w6RobGVuLCBkaWUgZ2VmaWx0ZXJ0ZSBPYmpla3RlIG1hcmtpZXJlbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4OAorbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJLZW5uemVpY2hlbiBpbiBkaWVzZSBEYXRlaSBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTAKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIktlbm56ZWljaGVuIHZvbiBkaWVzZXIgRGF0ZWkgaW1wb3J0aWVyZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTIKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAia8O8bnN0bGljaCBlaW5lbiBUYWctRXJzdGVsbGVyIGVyemV1Z2VuLCB3ZW5uIGRhcyBUYWcga2VpbmVuIGhhdCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5NAorbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICJmw7xyIGplZGVuIENvbW1pdCBkYXMgZ2VzYW10ZSBWZXJ6ZWljaG5pcyBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5NgorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICJkaWUgXCJkb25lXCItRnVua3Rpb24gYmVudXR6ZW4sIHVtIGRlbiBEYXRlbnN0cm9tIGFienVzY2hsaWXDn2VuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk3Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICJBdXNnYWJlIHZvbiBCbG9iLURhdGVuIMO8YmVyc3ByaW5nZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTgKK21zZ2lkICJyZWZzcGVjIgorbXNnc3RyICJSZWZzcGVjIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk5Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICJSZWZzcGVjIGF1ZiBleHBvcnRpZXJ0ZSBSZWZlcmVuemVuIGFud2VuZGVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAwMAorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgIkF1c2dhYmUgYW5vbnltaXNpZXJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwCittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzxPcHRpb25lbj5dIFs8UmVwb3NpdG9yeT4gWzxSZWZzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjEKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8T3B0aW9uZW4+XSA8R3J1cHBlPiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIyCittc2dpZCAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8cmVwb3NpdG9yeT4gfCA8Z3JvdXA+KS4uLl0iCittc2dzdHIgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8T3B0aW9uZW4+XSBbKDxSZXBvc2l0b3J5PiB8IDxHcnVwcGU+KS4uLl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMworbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkwIGJ1aWx0aW4vcHVsbC5jOjE2MgorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgImZvcmRlcnQgdm9uIGFsbGVuIFJlbW90ZS1SZXBvc2l0b3JpZXMgYW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MiBidWlsdGluL3B1bGwuYzoxNjUKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgImFuIC5naXQvRkVUQ0hfSEVBRCBhbmjDpG5nZW4sIGFuc3RhdHQgenUgw7xiZXJzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NCBidWlsdGluL3B1bGwuYzoxNjgKK21zZ2lkICJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiCittc2dzdHIgIlBmYWQgZGVzIFByb2dyYW1tcyB6dW0gSG9jaGxhZGVuIHZvbiBQYWtldGVuIGF1ZiBkZXIgR2VnZW5zZWl0ZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk1IGJ1aWx0aW4vcHVsbC5jOjE3MAorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgImRhcyDDnGJlcnNjaHJlaWJlbiB2b24gbG9rYWxlbiBCcmFuY2hlcyBlcnp3aW5nZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NworbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAidm9uIG1laHJlcmVuIFJlbW90ZS1SZXBvc2l0b3JpZXMgYW5mb3JkZXJuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTkgYnVpbHRpbi9wdWxsLmM6MTcyCittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiYWxsZSBUYWdzIHVuZCB2ZXJidW5kZW5lIE9iamVrdGUgYW5mb3JkZXJuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAxCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICJuaWNodCBhbGxlIFRhZ3MgYW5mb3JkZXJuICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAzIGJ1aWx0aW4vcHVsbC5jOjE3NQorbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICIiCisiUmVtb3RlLVRyYWNraW5nLUJyYW5jaGVzIGVudGZlcm5lbiwgZGllIHNpY2ggbmljaHQgbWVociBpbSBSZW1vdGUtUmVwb3NpdG9yeSAiCisiYmVmaW5kZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDQgYnVpbHRpbi9wdWxsLmM6MTc4Cittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICJiZWktQmVkYXJmIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA1IGJ1aWx0aW4vcHVsbC5jOjE3OQorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgInJla3Vyc2l2ZSBBbmZvcmRlcnVuZ2VuIHZvbiBTdWJtb2R1bGVuIGtvbnRyb2xsaWVyZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDkgYnVpbHRpbi9wdWxsLmM6MTg0Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgImhlcnVudGVyZ2VsYWRlbmVzIFBha2V0IGJlaGFsdGVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTExCittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgIkFrdHVhbGlzaWVydW5nIGRlciBcIkhFQURcIi1SZWZlcmVueiBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNCBidWlsdGluL3B1bGwuYzoxODcKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICIiCisiZGllIEhpc3RvcmllIGVpbmVzIEtsb25zIG1pdCB1bnZvbGxzdMOkbmRpZ2VyIEhpc3RvcmllIChzaGFsbG93KSB2ZXJ0aWVmZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTYgYnVpbHRpbi9wdWxsLmM6MTkwCittc2dpZCAiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiCittc2dzdHIgInp1IGVpbmVtIHZvbGxzdMOkbmRpZ2VuIFJlcG9zaXRvcnkga29udmVydGllcmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4IGJ1aWx0aW4vbG9nLmM6MTIzMworbXNnaWQgImRpciIKK21zZ3N0ciAiVmVyemVpY2huaXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTkKK21zZ2lkICJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IgorbXNnc3RyICJkaWVzIGFuIGRpZSBBdXNnYWJlIGRlciBTdWJtb2R1bC1QZmFkZSB2b3JhbnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjIKK21zZ2lkICJkZWZhdWx0IG1vZGUgZm9yIHJlY3Vyc2lvbiIKK21zZ3N0ciAiU3RhbmRhcmQtTW9kdXMgZsO8ciBSZWt1cnNpb24iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjQgYnVpbHRpbi9wdWxsLmM6MTkzCittc2dpZCAiYWNjZXB0IHJlZnMgdGhhdCB1cGRhdGUgLmdpdC9zaGFsbG93IgorbXNnc3RyICJSZWZlcmVuemVuLCBkaWUgLmdpdC9zaGFsbG93IGFrdHVhbGlzaWVyZW4sIGFremVwdGllcmVuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI1IGJ1aWx0aW4vcHVsbC5jOjE5NQorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAiUmVmbWFwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI2IGJ1aWx0aW4vcHVsbC5jOjE5NgorbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICJSZWZtYXAgZsO8ciAnZmV0Y2gnIGFuZ2ViZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNzgKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiS29ubnRlIFJlbW90ZS1SZWZlcmVueiB2b24gSEVBRCBuaWNodCBmaW5kZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIk9iamVrdCAlcyBuaWNodCBnZWZ1bmRlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ2MworbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW2FrdHVlbGxdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiEgJS0qcyAlLSpzIC0+ICVzICAoY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2gpIgorbXNnc3RyICIiCisiISAlLSpzICUtKnMgLT4gJXMgIChrYW5uIFwiZmV0Y2hcIiBpbSBha3R1ZWxsZW4gQnJhbmNoIG5pY2h0IGF1c2bDvGhyZW4pIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDc4IGJ1aWx0aW4vZmV0Y2guYzo1NjQKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJbenVyw7xja2dld2llc2VuXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ4OQorbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiW1RhZyBBa3R1YWxpc2llcnVuZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0OTEgYnVpbHRpbi9mZXRjaC5jOjUyNiBidWlsdGluL2ZldGNoLmM6NTQ0Cittc2dpZCAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIgorbXNnc3RyICIgIChrYW5uIGxva2FsZSBSZWZlcmVueiBuaWNodCBha3R1YWxpc2llcmVuKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUwOQorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW25ldWVzIFRhZ10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MTIKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIltuZXVlciBCcmFuY2hdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTE1Cittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJbbmV1ZSBSZWZlcmVuel0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NjAKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAia2FubiBsb2thbGUgUmVmZXJlbnogbmljaHQgYWt0dWFsaXNpZXJlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU2MAorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgIkFrdHVhbGlzaWVydW5nIGVyend1bmdlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU2NgorbXNnaWQgIihub24tZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiKGtlaW4gVm9yc3B1bGVuKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwMCBidWlsdGluL2ZldGNoLmM6ODQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJrYW5uICVzIG5pY2h0IMO2ZmZuZW46ICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIlcyBoYXQgbmljaHQgYWxsZSBlcmZvcmRlcmxpY2hlbiBPYmpla3RlIGdlc2VuZGV0XG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIKK21zZ3N0ciAiIgorIiVzIHd1cmRlIHp1csO8Y2tnZXdpZXNlbiwgZGEgVXJzcHJ1bmdzLUNvbW1pdHMgdm9uIFJlcG9zaXRvcmllc21pdCAiCisidW52b2xsc3TDpG5kaWdlciBIaXN0b3JpZSAoc2hhbGxvdykgbmljaHQgYWt0dWFsaXNpZXJ0IHdlcmRlbiBkw7xyZmVuLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcxNSBidWlsdGluL2ZldGNoLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICJWb24gJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKyJFaW5pZ2UgbG9rYWxlIFJlZmVyZW56ZW4ga29ubnRlbiBuaWNodCBha3R1YWxpc2llcnQgd2VyZGVuOyB2ZXJzdWNoZW4gU2llXG4iCisiJ2dpdCByZW1vdGUgcHJ1bmUgJXMnLCB1bSBqZWRlbiDDpGx0ZXJlbiwgd2lkZXJzcHLDvGNobGljaGVuIEJyYW5jaCB6dSBsw7ZzY2hlbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIHdpcmQgdW5yZWZlcmVuemllcnQpIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIHd1cmRlIHVucmVmZXJlbnppZXJ0KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMQorbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW2dlbMO2c2NodF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MTIgYnVpbHRpbi9yZW1vdGUuYzoxMDM0Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIobmljaHRzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJEZXIgXCJmZXRjaFwiIGluIGRlbiBha3R1ZWxsZW4gQnJhbmNoICVzIHZvbiBlaW5lbSBuaWNodC1CYXJlLVJlcG9zaXRvcnkgIgorInd1cmRlIHZlcndlaWdlcnQuIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIk9wdGlvbiBcIiVzXCIgV2VydCBcIiVzXCIgaXN0IG5pY2h0IGfDvGx0aWcgZsO8ciAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg1NAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIk9wdGlvbiBcIiVzXCIgd2lyZCBpZ25vcmllcnQgZsO8ciAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGZldGNoIGZyb20gJXMiCittc2dzdHIgIldlacOfIG5pY2h0IHdpZSB2b24gJXMgYW5nZWZvcmRlcnQgd2lyZC4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIkZvcmRlcmUgYW4gdm9uICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDczIGJ1aWx0aW4vcmVtb3RlLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICJLb25udGUgbmljaHQgdm9uICVzIGFuZm9yZGVybiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwOTEKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIktlaW4gUmVtb3RlLVJlcG9zaXRvcnkgYW5nZWdlYmVuLiBCaXR0ZSBnZWJlbiBTaWUgZW50d2VkZXIgZWluZSBVUkxcbiIKKyJvZGVyIGRlbiBOYW1lbiBkZXMgUmVtb3RlLVJlcG9zaXRvcmllcyBhbiwgdm9uIHdlbGNoZW0gbmV1ZVxuIgorIkNvbW1pdHMgYW5nZWZvcmRlcnQgd2VyZGVuIHNvbGxlbi4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTE0Cittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiU2llIG3DvHNzZW4gZGVuIE5hbWVuIGRlcyBUYWdzIGFuZ2ViZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1NgorbXNnaWQgIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC0tZGVwdGggdW5kIC0tdW5zaGFsbG93IGvDtm5uZW4gbmljaHQgZ2VtZWluc2FtIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1OAorbXNnaWQgIi0tdW5zaGFsbG93IG9uIGEgY29tcGxldGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLXVuc2hhbGxvdyBrYW5uIG5pY2h0IGluIGVpbmVtIFJlcG9zaXRvcnkgbWl0IHVudm9sbHN0w6RuZGlnZXIgIgorIkhpc3RvcmllIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4MQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCBha3plcHRpZXJ0IGtlaW4gUmVwb3NpdG9yeSBhbHMgQXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgzCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCBrYW5uIG5pY2h0IG1pdCBSZWZzcGVjcyB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiS2VpbiBSZW1vdGUtUmVwb3NpdG9yeSAoZWluemVsbiBvZGVyIEdydXBwZSk6ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwMgorbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorIkRhcyBBYmhvbGVuIGVpbmVyIEdydXBwZSB2b24gUmVtb3RlLVJlcG9zaXRvcmllcyBrYW5uIG5pY2h0IG1pdCBkZXIgQW5nYWJlXG4iCisidm9uIFJlZnNwZWNzIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxNAorbXNnaWQgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxCZXNjaHJlaWJ1bmc+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSAiCisiPERhdGVpPl0iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MAorbXNnaWQgInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIKK21zZ3N0ciAiSGlzdG9yaWUgbWl0IGjDtmNoc3RlbnMgPG4+IEVpbnRyw6RnZW4gdm9uIFwic2hvcnRsb2dcIiBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczCittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiQWxpYXMgZsO8ciAtLWxvZyAodmVyYWx0ZXQpIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzYKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICJUZXh0IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzcKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgIjxUZXh0PiBhbHMgQmVzY2hyZWlidW5nc2FuZmFuZyB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OAorbXNnaWQgImZpbGUgdG8gcmVhZCBmcm9tIgorbXNnc3RyICJEYXRlaSB6dW0gRWlubGVzZW4iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6OQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzxPcHRpb25lbj5dIFs8TXVzdGVyPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiUGxhdHpoYWx0ZXIgYWxzIFNoZWxsLVN0cmluZyBmb3JtYXRpZXJlbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyNgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAiUGxhdHpoYWx0ZXIgYWxzIFBlcmwtU3RyaW5nIGZvcm1hdGllcmVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgIlBsYXR6aGFsdGVyIGFscyBQeXRob24tU3RyaW5nIGZvcm1hdGllcmVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBUY2wiCittc2dzdHIgIlBsYXR6aGFsdGVyIGFscyBUY2wtU3RyaW5nIGZvcm1hdGllcmVuIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMzCittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgIm51ciA8bj4gcGFzc2VuZGUgUmVmZXJlbnplbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgImbDvHIgZGllIEF1c2dhYmUgenUgdmVyd2VuZGVuZGVzIEZvcm1hdCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNQorbXNnaWQgImtleSIKK21zZ3N0ciAiU2Now7xzc2VsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM2Cittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICJzb3J0aWVyZSBuYWNoIGRpZXNlbSBGZWxkIgorCisjOiBidWlsdGluL2ZzY2suYzoxNjMgYnVpbHRpbi9wcnVuZS5jOjEzNworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiUHLDvGZlIEtvbm5la3Rpdml0w6R0IgorCisjOiBidWlsdGluL2ZzY2suYzo1NjgKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIlByw7xmZSBPYmpla3QtVmVyemVpY2huaXNzZSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjMxCittc2dpZCAiZ2l0IGZzY2sgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IGZzY2sgWzxPcHRpb25lbj5dIFs8T2JqZWt0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzNworbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAidW5lcnJlaWNoYmFyZSBPYmpla3RlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzgKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgInVucmVmZXJlbnppZXJ0ZSBPYmpla3RlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzkKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAiVGFncyBtZWxkZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICJIYXVwdHd1cnplbG4gbWVsZGVuIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDEKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiSW5kZXgtT2JqZWt0ZSBpbiBFcnJlaWNoYmFya2VpdHNwcsO8ZnVuZyBlaW5iZXppZWhlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQyCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICJSZWZsb2dzIGluIEVycmVpY2hiYXJrZWl0c3Byw7xmdW5nIGVpbmJlemllaGVuIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MworbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJlYmVuc28gUGFrZXRlIHVuZCBhbHRlcm5hdGl2ZSBPYmpla3RlIGJldHJhY2h0ZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NAorbXNnaWQgImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IgorbXNnc3RyICJudXIgS29ubmVrdGl2aXTDpHQgcHLDvGZlbiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQ1Cittc2dpZCAiZW5hYmxlIG1vcmUgc3RyaWN0IGNoZWNraW5nIgorbXNnc3RyICJnZW5hdWVyZSBQcsO8ZnVuZyBha3RpdmllcmVuIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDcKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAidW5yZWZlcmVuemllcnRlIE9iamVrdGUgbmFjaCAuZ2l0L2xvc3QtZm91bmQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDggYnVpbHRpbi9wcnVuZS5jOjEwNworbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgIkZvcnRzY2hyaXR0c2FuemVpZ2UgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwNworbXNnaWQgIkNoZWNraW5nIG9iamVjdHMiCittc2dzdHIgIlByw7xmZSBPYmpla3RlIgorCisjOiBidWlsdGluL2djLmM6MjUKK21zZ2lkICJnaXQgZ2MgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBnYyBbPE9wdGlvbmVuPl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICJVbmfDvGx0aWdlciAlczogJyVzJyIKKworIzogYnVpbHRpbi9nYy5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIG9iamVjdCBkaXJlY3RvcnkgJS4qcyIKK21zZ3N0ciAienUgbGFuZ2VzIE9iamVrdC1WZXJ6ZWljaG5pcyAlLipzIgorCisjOiBidWlsdGluL2djLmM6MjY5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgInVucmVmZXJlbnppZXJ0ZSBPYmpla3RlIGVudGZlcm5lbiIKKworIzogYnVpbHRpbi9nYy5jOjI3MQorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAibWVociBHcsO8bmRsaWNoa2VpdCAoZXJow7ZodCBMYXVmemVpdCkiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNzIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICJcImF1dG8tZ2NcIiBNb2R1cyBha3RpdmllcmVuIgorCisjOiBidWlsdGluL2djLmM6MjczCittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCittc2dzdHIgIiIKKyJBdXNmw7xocnVuZyB2b24gXCJnaXQgZ2NcIiBlcnd6aW5nZW4sIHNlbGJzdCB3ZW5uIGVpbiBhbmRlcmVzXG4iCisiXCJnaXQgZ2NcIiBiZXJlaXRzIGF1c2dlZsO8aHJ0IHdpcmQiCisKKyM6IGJ1aWx0aW4vZ2MuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKyJEaWUgRGF0ZW5iYW5rIGRlcyBSZXBvc2l0b3JpZXMgd2lyZCBmw7xyIGVpbmUgb3B0aW1hbGUgUGVyZm9ybWFuY2UgaW1cbiIKKyJIaW50ZXJncnVuZCBrb21wcmltaWVydC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKyJEaWUgRGF0ZW5iYW5rIGRlcyBQcm9qZWt0YXJjaGl2cyB3aXJkIGbDvHIgZWluZSBvcHRpbWFsZSBQZXJmb3JtYW5jZSAiCisia29tcHJpbWllcnQuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAiU2llaGUgXCJnaXQgaGVscCBnY1wiIGbDvHIgbWFudWVsbGVzIEF1ZnLDpHVtZW4uXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKyJcImdpdCBnY1wiIHdpcmQgYmVyZWl0cyBhdWYgTWFzY2hpbmUgJyVzJyBwaWQgJTxQUkl1TUFYPiBhdXNnZWbDvGhydFxuIgorIihiZW51dHplbiBTaWUgLS1mb3JjZSBmYWxscyBuaWNodCkiCisKKyM6IGJ1aWx0aW4vZ2MuYzozNjQKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIiIKKyJFcyBnaWJ0IHp1IHZpZWxlIHVuZXJyZWljaGJhcmUgbG9zZSBPYmpla3RlOyBmw7xocmVuIFNpZSAnZ2l0IHBydW5lJyBhdXMsIHVtICIKKyJkaWVzZSB6dSBsw7ZzY2hlbi4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIzCittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZ3JlcCBbPE9wdGlvbmVuPl0gWy1lXSA8TXVzdGVyPiBbPENvbW1pdD4uLi5dIFtbLS1dIDxQZmFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6IEZlaGxlciBiZWltIEVyemV1Z2VuIGVpbmVzIFRocmVhZDogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ0MSBidWlsdGluL2dyZXAuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICJrb25udGUgXCJUcmVlXCItT2JqZWt0ICglcykgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICJrYW5uIFwiZ3JlcFwiIG5pY2h0IG1pdCBPYmpla3RlbiBkZXMgVHlwcyAlcyBkdXJjaGbDvGhyZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJTY2hhbHRlciAnJWMnIGVyd2FydGV0IGVpbmVuIG51bWVyaXNjaGVuIFdlcnQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJrYW5uICclcycgbmljaHQgw7ZmZm5lbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjM4Cittc2dpZCAic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiaW0gSW5kZXggYW5zdGF0dCBpbSBBcmJlaXRzdmVyemVpY2huaXMgc3VjaGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo2NDAKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAiYXVjaCBpbiBJbmhhbHRlbiBmaW5kZW4sIGRpZSBuaWNodCB2b24gR2l0IHZlcndhbHRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0MgorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiaW4gdmVyc2lvbmllcnRlbiB1bmQgdW52ZXJzaW9uaWVydGVuIERhdGVpZW4gc3VjaGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo2NDQKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgIkRhdGVpZW4sIGRpZSDDvGJlciAnLmdpdGlnbm9yZScgYW5nZWdlYmVuIHNpbmQsIGlnbm9yaWVyZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0NworbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJaZWlsZW4gb2huZSDDnGJlcmVpbnN0aW1tdW5nZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0OQorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgIsOcYmVyZWluc3RpbW11bmdlbiB1bmFiaMOkbmdpZyB2b24gR3Jvw58tIHVuZCBLbGVpbnNjaHJlaWJ1bmcgZmluZGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTEKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAibnVyIGdhbnplIFfDtnJ0ZXIgc3VjaGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTMKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICJiaW7DpHJlIERhdGVpZW4gYWxzIFRleHQgdmVyYXJiZWl0ZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1NQorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAia2VpbmUgTXVzdGVyIGluIEJpbsOkcmRhdGVpZW4gZmluZGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTgKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgImJpbsOkcmUgRGF0ZWllbiBtaXQgXCJ0ZXh0Y29udlwiLUZpbHRlcm4gdmVyYXJiZWl0ZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY2MAorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAiaMO2Y2hzdGVucyA8VGllZmU+IEViZW5lbiBkdXJjaGxhdWZlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjY0Cittc2dpZCAidXNlIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgImVyd2VpdGVydGUgcmVndWzDpHJlIEF1c2Ryw7xja2UgYXVzIFBPU0lYIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjY3Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJncnVuZGxlZ2VuZGUgcmVndWzDpHJlIEF1c2Ryw7xja2UgYXVzIFBPU0lYIHZlcndlbmRlbiAoU3RhbmRhcmQpIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzAKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAiTXVzdGVyIGFscyBmZXN0ZSBaZWljaGVua2V0dGVuIGludGVycHJldGllcmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzMKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgIlBlcmwta29tcGF0aWJsZSByZWd1bMOkcmUgQXVzZHLDvGNrZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY3NgorbXNnaWQgInNob3cgbGluZSBudW1iZXJzIgorbXNnc3RyICJaZWlsZW5udW1tZXJuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzcKK21zZ2lkICJkb24ndCBzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAia2VpbmUgRGF0ZWluYW1lbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6Njc4Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIkRhdGVpbmFtZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgIkRhdGVpbmFtZW4gcmVsYXRpdiB6dW0gUHJvamVrdHZlcnplaWNobmlzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODIKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIm51ciBEYXRlaW5hbWVuIGFuemVpZ2VuIGFuc3RhdHQgw7xiZXJlaW5zdGltbWVuZGUgWmVpbGVuIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODQKK21zZ2lkICJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKK21zZ3N0ciAiU3lub255bSBmw7xyIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODcKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgIm51ciBkaWUgRGF0ZWluYW1lbiBvaG5lIMOcYmVyZWluc3RpbW11bmdlbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6Njg5Cittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAiTlVMLVplaWNoZW4gbmFjaCBEYXRlaW5hbWVuIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo2OTEKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJhbnN0YXR0IGRlciBaZWlsZW4sIGRpZSBBbnphaGwgZGVyIMO8YmVyZWluc3RpbW1lbmRlbiBaZWlsZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5MgorbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICLDnGJlcmVpbnN0aW1tdW5nZW4gaGVydm9yaGViZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5NAorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICIiCisiZWluZSBMZWVyemVpbGUgendpc2NoZW4gw5xiZXJlaW5zdGltbXVuZ2VuIGluIHZlcnNjaGllZGVuZW4gRGF0ZWllbiBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6Njk2Cittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAiIgorImRlbiBEYXRlaW5hbWVuIG51ciBlaW5tYWwgb2JlcmhhbGIgZGVyIMOcYmVyZWluc3RpbW11bmdlbiBhdXMgZGllc2VyIERhdGVpICIKKyJhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6Njk5Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIjxuPiBaZWlsZW4gdm9yIHVuZCBuYWNoIGRlbiDDnGJlcmVpbnN0aW1tdW5nZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwMgorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIjxuPiBaZWlsZW4gdm9yIGRlbiDDnGJlcmVpbnN0aW1tdW5nZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwNAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAiPG4+IFplaWxlbiBuYWNoIGRlbiDDnGJlcmVpbnN0aW1tdW5nZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwNQorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgIkt1cnpmb3JtIGbDvHIgLUMgTlVNIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDgKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICJlaW5lIFplaWxlIG1pdCBkZW0gRnVua3Rpb25zbmFtZW4gdm9yIMOcYmVyZWluc3RpbW11bmdlbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzEwCittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgImRpZSB1bWdlYmVuZGUgRnVua3Rpb24gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxMworbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICJNdXN0ZXIgdm9uIGVpbmVyIERhdGVpIGxlc2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTUKK21zZ2lkICJtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIjxNdXN0ZXI+IGZpbmRlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzE3Cittc2dpZCAiY29tYmluZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCAtZSIKK21zZ3N0ciAiTXVzdGVyIGtvbWJpbmllcmVuLCBkaWUgbWl0IC1lIGFuZ2VnZWJlbiB3dXJkZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcyOQorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICLDnGJlcmVpbnN0aW1tdW5nZW4gbnVyIGR1cmNoIEJlZW5kaWd1bmdzc3RhdHVzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo3MzEKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICIiCisibnVyIMOcYmVyZWluc3RpbW11bmdlbiB2b24gRGF0ZWllbiBhbnplaWdlbiwgZGllIGFsbGVuIE11c3Rlcm4gZW50c3ByZWNoZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczMworbXNnaWQgInNob3cgcGFyc2UgdHJlZSBmb3IgZ3JlcCBleHByZXNzaW9uIgorbXNnc3RyICJnZXBhcnN0ZXMgVmVyemVpY2huaXMgZsO8ciBcImdyZXBcIi1BdXNkcnVjayBhbnplaWdlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM3Cittc2dpZCAicGFnZXIiCittc2dzdHIgIkFuemVpZ2Vwcm9ncmFtbSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM3Cittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgIkRhdGVpZW4gbWl0IMOcYmVyZWluc3RpbW11bmdlbiBpbSBBbnplaWdlcHJvZ3JhbW0gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc0MAorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAiZGVuIEF1ZnJ1ZiB2b24gZ3JlcCgxKSBlcmxhdWJlbiAodm9uIGRpZXNlciBQcm9ncmFtbXZlcnNpb24gaWdub3JpZXJ0KSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQxIGJ1aWx0aW4vc2hvdy1yZWYuYzoxODkKK21zZ2lkICJzaG93IHVzYWdlIgorbXNnc3RyICJWZXJ3ZW5kdW5nIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDgKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuLiIKK21zZ3N0ciAia2VpbmUgTXVzdGVyIGFuZ2VnZWJlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY2Cittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLW9wZW4tZmlsZXMtaW4tcGFnZXIga2FubiBudXIgaW5uZXJoYWxiIGRlcyAiCisiQXJiZWl0c3ZlcnplaWNobmlzc2VzIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTIKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXguIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC0tY2FjaGVkIHVuZCAtLXVudHJhY2tlZCBrw7ZubmVuIG5pY2h0IG1pdCAtLW5vLWluZGV4IHZlcndlbmRldCAiCisid2VyZGVuLiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk3Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMuIgorbXNnc3RyICIiCisiRGllIE9wdGlvbmVuIC0tbm8taW5kZXggdW5kIC0tdW50cmFja2VkIGvDtm5uZW4gbmljaHQgbWl0IENvbW1pdHMgdmVyd2VuZGV0ICIKKyJ3ZXJkZW4uIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDAKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cy4iCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uIC0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGthbm4gbmljaHQgbWl0IHZlcnNpb25pZXJ0ZW4gSW5oYWx0ZW4gIgorInZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDgKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tY2FjaGVkIGthbm4gbmljaHQgbWl0IFwiVHJlZVwiLU9iamVrdGVuIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODAKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDxBcnQ+XSBbLXddIFstLXBhdGg9PERhdGVpPiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dICIKKyJbLS1dIDxEYXRlaT4uLi4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4MQorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIDwgPExpc3RlLXZvbi1QZmFkZW4+IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTIgYnVpbHRpbi90YWcuYzo2MTQKK21zZ2lkICJ0eXBlIgorbXNnc3RyICJBcnQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5MgorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICJBcnQgZGVzIE9iamVrdGVzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTMKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiZGFzIE9iamVrdCBpbiBkaWUgT2JqZWt0ZGF0ZW5iYW5rIHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk1Cittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgImRhcyBPYmpla3Qgdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTcKK21zZ2lkICJzdG9yZSBmaWxlIGFzIGlzIHdpdGhvdXQgZmlsdGVycyIKK21zZ3N0ciAiRGF0ZWkgd2llIHNpZSBpc3Qgc3BlaWNoZXJuLCBvaG5lIEZpbHRlciIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAiIgorIkhhc2ggw7xiZXIgenVmw6RsbGlnZSBEYXRlbiwgenVyIEVyemV1Z3VuZyB2b24gYmVzY2jDpGRpZ3RlbiBPYmpla3RlbiB6dXJcbiIKKyJGZWhsZXJzdWNoZSBpbiBHaXQsIGVyemV1Z2VuIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAiRGF0ZWkgdmVyYXJiZWl0ZW4sIGFscyBvYiBzaWUgdm9uIGRpZXNlbSBQZmFkIHfDpHJlIgorCisjOiBidWlsdGluL2hlbHAuYzo0MQorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgImFsbGUgdm9yaGFuZGVuZW4gS29tbWFuZG9zIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2hlbHAuYzo0MgorbXNnaWQgInByaW50IGxpc3Qgb2YgdXNlZnVsIGd1aWRlcyIKK21zZ3N0ciAiTGlzdGUgdm9uIGFsbGdlbWVpbiB2ZXJ3ZW5kZXRlbiBBbmxlaXR1bmdlbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJIYW5kYnVjaCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAiSGFuZGJ1Y2ggaW4gZWluZW0gV2ViYnJvd3NlciBhbnplaWdlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAiSW5mby1TZWl0ZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8S29tbWFuZG8+XSIKKworIzogYnVpbHRpbi9oZWxwLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgIm5pY2h0IGVya2FubnRlcyBIaWxmZWZvcm1hdDogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjkxCittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiS29ubnRlIGVtYWNzY2xpZW50IG5pY2h0IHN0YXJ0ZW4uIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi4iCittc2dzdHIgIktvbm50ZSBWZXJzaW9uIGRlcyBlbWFjc2NsaWVudCBuaWNodCBwYXJzZW4uIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAiVmVyc2lvbiBkZXMgZW1hY3NjbGllbnQgJyVkJyBpc3QgenUgYWx0ICg8IDIyKS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEzMCBidWlsdGluL2hlbHAuYzoxNTggYnVpbHRpbi9oZWxwLmM6MTY3IGJ1aWx0aW4vaGVscC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnOiAlcyIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gJyVzJzogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IFBmYWQgZsO8ciBuaWNodCB1bnRlcnN0w7x0enRlbiBIYW5kYnVjaGJldHJhY2h0ZXIuXG4iCisiU2llIGvDtm5udGVuIHN0YXR0ZGVzc2VuICdtYW4uPFdlcmt6ZXVnPi5jbWQnIGJlbnV0emVuLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IEtvbW1hbmRvIGbDvHIgdW50ZXJzdMO8dHp0ZW4gSGFuZGJ1Y2hiZXRyYWNodGVyLlxuIgorIlNpZSBrw7ZubnRlbiBzdGF0dGRlc3NlbiAnbWFuLjxXZXJremV1Zz4ucGF0aCcgYmVudXR6ZW4uIgorCisjOiBidWlsdGluL2hlbHAuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiJyVzJzogdW5iZWthbm50ZXIgSGFuZGJ1Y2gtQmV0cmFjaHRlci4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3MQorbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAia2VpbiBIYW5kYnVjaC1CZXRyYWNodGVyIGtvbm50ZSBtaXQgZGllc2VyIEFuZnJhZ2UgdW1nZWhlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzc5Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAia2VpbiBJbmZvcm1hdGlvbnMtQmV0cmFjaHRlciBrb25udGUgbWl0IGRpZXNlciBBbmZyYWdlIHVtZ2VoZW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQyOAorbXNnaWQgIkRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgiCittc2dzdHIgIkRlZmluaXRpb24gdm9uIEF0dHJpYnV0ZW4gcHJvIFBmYWQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQyOQorbXNnaWQgIkV2ZXJ5ZGF5IEdpdCBXaXRoIDIwIENvbW1hbmRzIE9yIFNvIgorbXNnc3RyICJUw6RnbGljaGUgQmVudXR6dW5nIHZvbiBHaXQgbWl0IHVuZ2Vmw6RociAyMCBLb21tYW5kb3MiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMAorbXNnaWQgIkEgR2l0IGdsb3NzYXJ5IgorbXNnc3RyICJFaW4gR2l0LUdsb3NzYXIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMQorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIlNwZXppZmlrYXRpb24gdm9uIGJld3Vzc3QgaWdub3JpZXJ0ZW4sIHVudmVyc2lvbmllcnRlbiBEYXRlaWVuIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzIKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiRGVmaW5pdGlvbiB2b24gU3VibW9kdWwtRWlnZW5zY2hhZnRlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMzCittc2dpZCAiU3BlY2lmeWluZyByZXZpc2lvbnMgYW5kIHJhbmdlcyBmb3IgR2l0IgorbXNnc3RyICJTcGV6aWZpa2F0aW9uIHZvbiBDb21taXRzIHVuZCBCZXJlaWNoZW4gZsO8ciBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNAorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCAoZm9yIHZlcnNpb24gMS41LjEgb3IgbmV3ZXIpIgorbXNnc3RyICJFaW5lIGVpbmbDvGhyZW5kZSBBbmxlaXR1bmcgenUgR2l0IChmw7xyIFZlcnNpb24gMS41LjEgb2RlciBuZXVlcikiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNQorbXNnaWQgIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIKK21zZ3N0ciAiRWluZSDDnGJlcnNpY2h0IMO8YmVyIGVtcGZvaGxlbmUgQXJiZWl0c2FibMOkdWZlIG1pdCBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0NworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6XG4iCittc2dzdHIgIkRpZSBhbGxnZW1laW4gdmVyd2VuZGV0ZW4gR2l0LUFubGVpdHVuZ2VuIHNpbmQ6XG4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2OCBidWlsdGluL2hlbHAuYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgIlZlcndlbmR1bmc6ICVzJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJgZ2l0ICVzJyBpcyBhbGlhc2VkIHRvIGAlcyciCittc2dzdHIgImbDvHIgYGdpdCAlcycgd3VyZGUgZGVyIEFsaWFzIGAlcycgYW5nZWxlZ3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAia2FubiAlcyBuaWNodCDDtmZmbmVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgIk9iamVrdC1UeXBlbiBwYXNzZW4gYmVpICVzIG5pY2h0IHp1c2FtbWVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAia29ubnRlIGVyd2FydGV0ZXMgT2JqZWt0ICVzIG5pY2h0IGVtcGZhbmdlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIk9iamVrdCAlczogZXJ3YXJ0ZXRlciBUeXAgJXMsICVzIGdlZnVuZGVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gImthbm4gJWQgQnl0ZSBuaWNodCBsZXNlbiIKK21zZ3N0clsxXSAia2FubiAlZCBCeXRlcyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc3Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICJ6dSBmcsO8aGVzIERhdGVpZW5kZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc4Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gZGVyIEVpbmdhYmUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MAorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICJ2ZXJ3ZW5kZXRlIG1laHIgQnl0ZXMgYWxzIHZlcmbDvGdiYXIgd2FyZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5NworbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgIlBha2V0IGlzdCB6dSBncm/DnyBmw7xyIGRpZSBha3R1ZWxsZSBEZWZpbml0aW9uIHZvbiBvZmZfdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAia29ubnRlICclcycgbmljaHQgZXJzdGVsbGVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAiS2FubiBQYWtldGRhdGVpICclcycgbmljaHQgw7ZmZm5lbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzMyCittc2dpZCAicGFjayBzaWduYXR1cmUgbWlzbWF0Y2giCittc2dzdHIgIlBha2V0c2lnbmF0dXIgc3RpbW10IG5pY2h0IMO8YmVyZWluIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAiUGFrZXR2ZXJzaW9uICU8UFJJdTMyPiBuaWNodCB1bnRlcnN0w7x0enQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlbHU6ICVzIgorbXNnc3RyICJQYWtldCBoYXQgZWluIHVuZ8O8bHRpZ2VzIE9iamVrdCBiZWkgVmVyc2F0eiAlbHU6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAiRGVrb21wcmltaWVydW5nIGdhYiAlZCB6dXLDvGNrIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MjIKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICJXZXJ0IGbDvHIgVmVyc2F0eiBiZWkgRGlmZmVyZW56b2JqZWt0IMO8YmVyZ2VsYXVmZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzMAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIKK21zZ3N0ciAiIgorIldlcnQgZsO8ciBWZXJzYXR6IGJlaSBEaWZmZXJlbnpvYmpla3QgbGllZ3QgYXXDn2VyaGFsYiBkZXMgZ8O8bHRpZ2VuIEJlcmVpY2hzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAiVW5iZWthbm50ZXIgT2JqZWt0LVR5cCAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY5Cittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAiS2FubiBQYWtldGRhdGVpICVzIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAiZnLDvGh6ZWl0aWdlcyBFbmRlIGRlciBQYWtldGRhdGVpLCB2ZXJtaXNzZSAlbHUgQnl0ZSIKK21zZ3N0clsxXSAiZnLDvGh6ZWl0aWdlcyBFbmRlIGRlciBQYWtldGRhdGVpLCB2ZXJtaXNzZSAlbHUgQnl0ZXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU5NworbXNnaWQgInNlcmlvdXMgaW5mbGF0ZSBpbmNvbnNpc3RlbmN5IgorbXNnc3RyICJlcm5zdGhhZnRlIElua29uc2lzdGVueiBuYWNoIERla29tcHJpbWllcnVuZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0OSBidWlsdGluL2luZGV4LXBhY2suYzo3NzIKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwNiBidWlsdGluL2luZGV4LXBhY2suYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICJTSEExIEtPTExJU0lPTiBNSVQgJXMgR0VGVU5ERU4gISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTYyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAia2FubiAlcyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAiS2FubiBleGlzdGllcmVuZGVzIE9iamVrdCAlcyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBCbG9iLU9iamVrdCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIE9iamVrdC1UeXAgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MworbXNnaWQgIkVycm9yIGluIG9iamVjdCIKK21zZ3N0ciAiRmVobGVyIGluIE9iamVrdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICJOaWNodCBhbGxlIEtpbmQtT2JqZWt0ZSB2b24gJXMgc2luZCBlcnJlaWNoYmFyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTcgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTQ4Cittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICJLb25udGUgRGF0ZWl1bnRlcnNjaGllZCBuaWNodCBhbndlbmRlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICJFbXBmYW5nZSBPYmpla3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE4Cittc2dpZCAiSW5kZXhpbmcgb2JqZWN0cyIKK21zZ3N0ciAiSW5kaXppZXJlIE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTAKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgIlBha2V0IGlzdCBiZXNjaMOkZGlndCAoU0hBMSB1bnRlcnNjaGllZGxpY2gpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU1Cittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICJrYW5uIFBha2V0ZGF0ZWkgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTgKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgIlBha2V0ZW5kZSBlbnRow6RsdCBuaWNodCB2ZXJ3ZW5kYmFyZW4gSW5oYWx0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTY5Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSBpbiBwYXJzZV9wYWNrX29iamVjdHMoKSIKK21zZ3N0ciAiRmVobGVyIGJlaW0gQXVzZsO8aHJlbiB2b24gXCJwYXJzZV9wYWNrX29iamVjdHMoKVwiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk0Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAiTMO2c2UgVW50ZXJzY2hpZWRlIGF1ZiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImthbm4gVGhyZWFkIG5pY2h0IGVyemV1Z2VuOiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI0NworbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgIkZlaGxlciBiZWltIEF1ZmzDtnNlbiBkZXIgVW50ZXJzY2hpZWRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdHMiCittc2dzdHIgImFiZ2VzY2hsb3NzZW4gbWl0ICVkIGxva2FsZW4gT2JqZWt0ZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIlVuZXJ3YXJ0ZXRlIFByw7xmc3VtbWUgZsO8ciAlcyAoRmVzdHBsYXR0ZW5mZWhsZXI/KSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAiUGFrZXQgaGF0ICVkIHVuYXVmZ2Vsw7ZzdGUgVW50ZXJzY2hpZWQiCittc2dzdHJbMV0gIlBha2V0IGhhdCAlZCB1bmF1ZmdlbMO2c3RlIFVudGVyc2NoaWVkZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAiS29ubnRlIGFuZ2Vow6RuZ3RlcyBPYmpla3QgKCVkKSBuaWNodCBrb21wcmltaWVyZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgImxva2FsZXMgT2JqZWt0ICVzIGlzdCBiZXNjaMOkZGlndCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5MQorbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hsaWXDn2VuIGRlciBQYWtldGRhdGVpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAiS2FubiBQYWtldGJlc2NocmVpYnVuZ3NkYXRlaSAnJXMnIG5pY2h0IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAiS2FubiBlYmVuIGVyc3RlbGx0ZSBQYWtldGJlc2NocmVpYnVuZ3NkYXRlaSAnJXMnIG5pY2h0IHNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MjUKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICJLYW5uIFBha2V0ZGF0ZWkgbmljaHQgc3BlaWNoZXJuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM2Cittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgIkthbm4gSW5kZXhkYXRlaSBuaWNodCBzcGVpY2hlcm4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAiXCJwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj5cIiBpc3QgdW5nw7xsdGlnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgInVuZ8O8bHRpZ2UgQW56YWhsIHZvbiBUaHJlYWRzIGFuZ2VnZWJlbiAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAia2VpbmUgVW50ZXJzdMO8dHp1bmcgdm9uIFRocmVhZHMsICclcycgd2lyZCBpZ25vcmllcnQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIkthbm4gZXhpc3RpZXJlbmRlIFBha2V0ZGF0ZWkgJyVzJyBuaWNodCDDtmZmbmVuIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIkthbm4gZXhpc3RpZXJlbmRlIEluZGV4ZGF0ZWkgZsO8ciBQYWtldCAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAia2VpbiBVbnRlcnNjaGllZDogJWQgT2JqZWt0IgorbXNnc3RyWzFdICJrZWluIFVudGVyc2NoaWVkOiAlZCBPYmpla3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gIkzDpG5nZSBkZXIgT2JqZWt0LUxpc3RlID0gJWQ6ICVsdSBPYmpla3QiCittc2dzdHJbMV0gIkzDpG5nZSBkZXIgT2JqZWt0LUxpc3RlID0gJWQ6ICVsdSBPYmpla3RlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjIzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIkthbm4gbmljaHQgenVyw7xjayB6dSBBcmJlaXRzdmVyemVpY2huaXMgd2VjaHNlbG4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY3OAorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY5MCBidWlsdGluL2luZGV4LXBhY2suYzoxNjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAiJXMgaXN0IHVuZ8O8bHRpZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcwOAorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tZml4LXRoaW4ga2FubiBuaWNodCBvaG5lIC0tc3RkaW4gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MTIgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAiTmFtZSBkZXIgUGFrZXRkYXRlaSAnJXMnIGVuZGV0IG5pY2h0IG1pdCAnLnBhY2snIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzI5Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tdmVyaWZ5IHd1cmRlIG9obmUgTmFtZW4gZGVyIFBha2V0ZGF0ZWkgYW5nZWdlYmVuLiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1ha2UgJXMgd3JpdGFibGUgYnkgZ3JvdXAiCittc2dzdHIgIktvbm50ZSBHcnVwcGVuc2NocmVpYnJlY2h0IGbDvHIgJXMgbmljaHQgc2V0emVuLiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBuYW1lICVzIgorbXNnc3RyICJ6dSBsYW5nZXIgVm9ybGFnZW4tTmFtZSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiS2FubiAnJXMnIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICJrYW5uIFZvcmxhZ2UgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAia2FubiBWZXJ6ZWljaG5pcyAnJXMnIG5pY2h0IMO2ZmZuZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICJrYW5uIFZlcndlaXMgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgc3ltbGluayAlcyIKK21zZ3N0ciAienUgbGFuZ2Ugc3ltYm9saXNjaGUgVmVya27DvHBmdW5nICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICJrYW5uIHN5bWJvbGlzY2hlIFZlcmtuw7xwZnVuZyAnJXMnIGF1ZiAnJXMnIG5pY2h0IGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAia2FubiAnJXMnIG5pY2h0IG5hY2ggJyVzJyBrb3BpZXJlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICJpZ25vcmllcmUgVm9ybGFnZSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgcGF0aCAlcyIKK21zZ3N0ciAienUgbGFuZ2VyIFZvcmxhZ2VuLVBmYWQgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ0ZW1wbGF0ZXMgbm90IGZvdW5kICVzIgorbXNnc3RyICJrZWluZSBWb3JsYWdlbiBpbiAnJXMnIGdlZnVuZGVuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIG9mIGEgd3JvbmcgZm9ybWF0IHZlcnNpb24gJWQgZnJvbSAnJXMnIgorbXNnc3RyICJrb3BpZXJlIGtlaW5lIFZvcmxhZ2VuIG1pdCBlaW5lciBmYWxzY2hlbiBGb3JtYXR2ZXJzaW9uICVkIHZvbiAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGdpdCBkaXJlY3RvcnkgJXMiCittc2dzdHIgInVuZ8O8bHRpZ2VzIEdpdC1WZXJ6ZWljaG5pcyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzQ0IGJ1aWx0aW4vaW5pdC1kYi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgZXhpc3RpZXJ0IGJlcmVpdHMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAia2FubiBuaWNodCBtaXQgRGF0ZWl0eXAgJWQgdW1nZWhlbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICJLb25udGUgJXMgbmljaHQgbmFjaCAlcyB2ZXJzY2hpZWJlbiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAnJXMnIGlzIGVpdGhlciAiUmVpbml0aWFsaXplZAorIy4gZXhpc3RpbmciIG9yICJJbml0aWFsaXplZCBlbXB0eSIsIHRoZSBzZWNvbmQgIiBzaGFyZWQiIG9yCisjLiAiIiwgYW5kIHRoZSBsYXN0ICclcyVzJyBpcyB0aGUgdmVyYmF0aW0gZGlyZWN0b3J5IG5hbWUuCisjOiBidWlsdGluL2luaXQtZGIuYzo0MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMlcyBHaXQgcmVwb3NpdG9yeSBpbiAlcyVzXG4iCittc2dzdHIgIiVzJXMgR2l0LVJlcG9zaXRvcnkgaW4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MzUKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorbXNnc3RyICJSZWluaXRpYWxpc2llcnRlIGV4aXN0aWVyZW5kZXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNQorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICJJbml0aWFsaXNpZXJ0ZSBsZWVyZXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNgorbXNnaWQgIiBzaGFyZWQiCittc2dzdHIgIiBnZW1laW5zYW1lcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDgzCittc2dpZCAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS0iCisic2hhcmVkWz08cGVybWlzc2lvbnM+XV0gWzxkaXJlY3Rvcnk+XSIKK21zZ3N0ciAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTxWb3JsYWdlbnZlcnplaWNobmlzPl0gWy0tIgorInNoYXJlZFs9PEJlcmVjaHRpZ3VuZ2VuPl1dIFs8VmVyemVpY2huaXM+XSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTA2Cittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgIkJlcmVjaHRpZ3VuZ2VuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MDcKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgImFuZ2ViZW4sIGRhc3MgZGFzIEdpdC1SZXBvc2l0b3J5IG1pdCBtZWhyZXJlbiBCZW51dHplcm4gZ2V0ZWlsdCB3aXJkIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NDEgYnVpbHRpbi9pbml0LWRiLmM6NTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAia2FubiBWZXJ6ZWljaG5pcyAlcyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgImthbm4gbmljaHQgaW4gVmVyemVpY2huaXMgJXMgd2VjaHNlbG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisiJXMgKG9kZXIgLS13b3JrLXRyZWU9PFZlcnplaWNobmlzPikgbmljaHQgZXJsYXVidCBvaG5lIFNwZXppZml6aWVydW5nIHZvbiAlcyAiCisiKG9kZXIgLS1naXQtZGlyPTxWZXJ6ZWljaG5pcz4pIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiS2FubiBuaWNodCBhdWYgQXJiZWl0c3ZlcnplaWNobmlzICclcycgenVncmVpZmVuLiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNQorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyIDx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dICIKKyJbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgPFRva2VuPlsoPXw6KTxXZXJ0Pl0pLi4uXSAiCisiWzxEYXRlaT4uLi5dIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI1Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAia8O8cnp0IGxlZXJlIEFuaMOkbmdlIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI2Cittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAiQW5oYW5nIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI3Cittc2dpZCAidHJhaWxlcihzKSB0byBhZGQiCittc2dzdHIgIkFuaGFuZy9BbmjDpG5nZSBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9sb2cuYzo0MworbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzxPcHRpb25lbj5dIFs8Q29tbWl0YmVyZWljaD5dIFtbLS1dIDxQZmFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDQKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxPcHRpb25lbj5dIDxPYmpla3Q+Li4uIgorCisjOiBidWlsdGluL2xvZy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICJVbmfDvGx0aWdlIE9wdGlvbiBmw7xyIC0tZGVjb3JhdGU6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEzMQorbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICJBdXNnYWJlIGRlciBVbnRlcnNjaGllZGUgdW50ZXJkcsO8Y2tlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzIKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAiUXVlbGxlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xvZy5jOjEzMworbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICJcIm1haWxtYXBcIi1EYXRlaSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM0Cittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAiZGVjb3JhdGUtT3B0aW9uZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3Cittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIlZlcmFyYmVpdGV0IG51ciBaZWlsZW4gaW0gQmVyZWljaCBuLG0gaW4gZGVyIERhdGVpLCBnZXrDpGhsdCB2b24gMSIKKworIzogYnVpbHRpbi9sb2cuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJsZXR6dGUgQXVzZ2FiZTogJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHNob3cgJXM6IGJhZCBmaWxlIgorbXNnc3RyICJnaXQgc2hvdyAlczogdW5nw7xsdGlnZSBEYXRlaSIKKworIzogYnVpbHRpbi9sb2cuYzo0NzkgYnVpbHRpbi9sb2cuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJLYW5uIE9iamVrdCAlcyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdHlwZTogJWQiCittc2dzdHIgIlVuYmVrYW5udGVyIFR5cDogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NzE0Cittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAiZm9ybWF0LmhlYWRlcnMgb2huZSBXZXJ0IgorCisjOiBidWlsdGluL2xvZy5jOjc5OAorbXNnaWQgIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIKK21zZ3N0ciAiTmFtZSBkZXMgQXVzZ2FiZXZlcnplaWNobmlzc2VzIGlzdCB6dSBsYW5nLiIKKworIzogYnVpbHRpbi9sb2cuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiS2FubiBQYXRjaC1EYXRlaSAlcyBuaWNodCDDtmZmbmVuIgorCisjOiBidWlsdGluL2xvZy5jOjgyOAorbXNnaWQgIk5lZWQgZXhhY3RseSBvbmUgcmFuZ2UuIgorbXNnc3RyICJCcmF1Y2hlIGdlbmF1IGVpbmVuIENvbW1pdC1CZXJlaWNoLiIKKworIzogYnVpbHRpbi9sb2cuYzo4MzgKK21zZ2lkICJOb3QgYSByYW5nZS4iCittc2dzdHIgIktlaW4gQ29tbWl0LUJlcmVpY2guIgorCisjOiBidWlsdGluL2xvZy5jOjk0NAorbXNnaWQgIkNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIkFuc2NocmVpYmVuIGJlbsO2dGlndCBFLU1haWwtRm9ybWF0IgorCisjOiBidWlsdGluL2xvZy5jOjEwMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAidW5nw7xsdGlnZXMgaW4tcmVwbHktdG86ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEwNTEKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzxPcHRpb25lbj5dIFs8c2VpdD4gfCA8Q29tbWl0YmVyZWljaD5dIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTYKK21zZ2lkICJUd28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAiWndlaSBBdXNnYWJldmVyemVpY2huaXNzZT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxMQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgIltQQVRDSCBuL21dIGF1Y2ggbWl0IGVpbnplbG5lbSBQYXRjaCB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxNAorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICJbUEFUQ0hdIGF1Y2ggbWl0IG1laHJlcmVuIFBhdGNoZXMgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2xvZy5jOjEyMTgKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAiQXVzZ2FiZSBkZXIgUGF0Y2hlcyBpbiBTdGFuZGFyZC1BdXNnYWJlIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjAKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAiZWluIERlY2tibGF0dCBlcnpldWdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIyCittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICJlaW5mYWNoZSBOdW1tZXJuZm9sZ2UgZsO8ciBkaWUgTmFtZW4gZGVyIEF1c2dhYmVkYXRlaWVuIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIzCittc2dpZCAic2Z4IgorbXNnc3RyICJEYXRlaWVuZHVuZyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI0Cittc2dpZCAidXNlIDxzZng+IGluc3RlYWQgb2YgJy5wYXRjaCciCittc2dzdHIgIjxEYXRlaWVuZHVuZz4gYW5zdGF0dCAnLnBhdGNoJyB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyNgorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgImRpZSBOdW1tZXJpZXJ1bmcgZGVyIFBhdGNoZXMgYmVpIDxuPiBhbnN0YXR0IGJlaSAxIGJlZ2lubmVuIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjgKK21zZ2lkICJtYXJrIHRoZSBzZXJpZXMgYXMgTnRoIHJlLXJvbGwiCittc2dzdHIgImRpZSBTZXJpZSBhbHMgbi10ZSBGYXNzdW5nIGtlbm56ZWljaG5lbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjMwCittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICJbPFByw6RmaXg+XSBhbnN0YXR0IFtQQVRDSF0gdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzMKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgImVyemV1Z3RlIERhdGVpZW4gaW4gPFZlcnplaWNobmlzPiBzcGVpY2hlcm4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzNgorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICJbUEFUQ0hdIG5pY2h0IGVudGZlcm5lbi9oaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjM5Cittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAia2VpbmUgYmluw6RyZW4gVW50ZXJzY2hpZWRlIGF1c2dlYmVuIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDEKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgIiIKKyJrZWluZSBQYXRjaGVzIGVpbnNjaGxpZcOfZW4sIGRpZSBlaW5lbSBDb21taXQgaW0gVXBzdHJlYW0tQnJhbmNoIGVudHNwcmVjaGVuIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDMKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgIlBhdGNoZm9ybWF0IGFuc3RhdHQgZGVzIFN0YW5kYXJkcyBhbnplaWdlbiAoUGF0Y2ggKyBadXNhbW1lbmZhc3N1bmcpIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDUKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIkUtTWFpbC1FaW5zdGVsbHVuZ2VuIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDYKK21zZ2lkICJoZWFkZXIiCittc2dzdHIgIkhlYWRlciIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ3Cittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAiRS1NYWlsLUhlYWRlciBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ4IGJ1aWx0aW4vbG9nLmM6MTI1MAorbXNnaWQgImVtYWlsIgorbXNnc3RyICJFLU1haWwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0OAorbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICJcIlRvOlwiLUhlYWRlciBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjUwCittc2dpZCAiYWRkIENjOiBoZWFkZXIiCittc2dzdHIgIlwiQ2M6XCItSGVhZGVyIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTIKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAiSWRlbnQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MworbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgIiIKKyJcIkZyb21cIi1BZHJlc3NlIGF1ZiA8SWRlbnQ+IHNldHplbiAob2RlciBJZGVudCBkZXMgQ29tbWl0LUVyc3RlbGxlcnMsIHdlbm4gIgorImZlaGxlbmQpIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTUKK21zZ2lkICJtZXNzYWdlLWlkIgorbXNnc3RyICJtZXNzYWdlLWlkIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTYKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgImF1cyBlcnN0ZXIgRS1NYWlsIGVpbmUgQW50d29ydCB6dSA8bWVzc2FnZS1pZD4gbWFjaGVuIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTcgYnVpbHRpbi9sb2cuYzoxMjYwCittc2dpZCAiYm91bmRhcnkiCittc2dzdHIgIkdyZW56ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU4Cittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAiZGVuIFBhdGNoIGFuaMOkbmdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjYxCittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAiZGVuIFBhdGNoIGRpcmVrdCBpbiBkaWUgTmFjaHJpY2h0IGVpbmbDvGdlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjY1Cittc2dpZCAiZW5hYmxlIG1lc3NhZ2UgdGhyZWFkaW5nLCBzdHlsZXM6IHNoYWxsb3csIGRlZXAiCittc2dzdHIgIk5hY2hyaWNodGVudmVya2V0dHVuZyBha3RpdmllcmVuLCBTdGlsZTogc2hhbGxvdywgZGVlcCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjY3Cittc2dpZCAic2lnbmF0dXJlIgorbXNnc3RyICJTaWduYXR1ciIKKworIzogYnVpbHRpbi9sb2cuYzoxMjY4Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICJlaW5lIFNpZ25hdHVyIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2xvZy5jOjEyNzAKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUgZnJvbSBhIGZpbGUiCittc2dzdHIgImVpbmUgU2lnbmF0dXIgYXVzIGVpbmVyIERhdGVpIGhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL2xvZy5jOjEyNzEKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICJrZWluZSBEYXRlaW5hbWVuIGRlciBQYXRjaGVzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xvZy5jOjEzNjAKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIkRpZSBPcHRpb25lbiAtbiB1bmQgLWsgc2NobGllw59lbiBzaWNoIGdlZ2Vuc2VpdGlnIGF1cy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM2MgorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXggYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1zdWJqZWN0LXByZWZpeCB1bmQgLWsgc2NobGllw59lbiBzaWNoIGdlZ2Vuc2VpdGlnIGF1cy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3MAorbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIkRpZSBPcHRpb24gLS1uYW1lLW9ubHkga2FubiBuaWNodCB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzcyCittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tbmFtZS1zdGF0dXMga2FubiBuaWNodCB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzc0Cittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tY2hlY2sga2FubiBuaWNodCB2ZXJ3ZW5kZXQgd2VyZGVuLiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzk3Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgIlN0YW5kYXJkLUF1c2dhYmUgb2RlciBWZXJ6ZWljaG5pcywgd2VsY2hlcyB2b24gYmVpZGVtPyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIktvbm50ZSBWZXJ6ZWljaG5pcyAnJXMnIG5pY2h0IGVyc3RlbGxlbi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzaWduYXR1cmUgZmlsZSAnJXMnIgorbXNnc3RyICJLb25udGUgU2lnbmF0dXItRGF0ZWkgJyVzJyBuaWNodCBsZXNlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTU5Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiBkZXIgQXVzZ2FiZWRhdGVpZW4uIgorCisjOiBidWlsdGluL2xvZy5jOjE2MDcKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs8VXBzdHJlYW0+IFs8QnJhbmNoPiBbPExpbWl0Pl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiIgorIktvbm50ZSBnZWZvbGd0ZW4gUmVtb3RlLUJyYW5jaCBuaWNodCBmaW5kZW4sIGJpdHRlIGdlYmVuIFNpZSA8VXBzdHJlYW0+ICIKKyJtYW51ZWxsIGFuLlxuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzIgYnVpbHRpbi9sb2cuYzoxNjc0IGJ1aWx0aW4vbG9nLmM6MTY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiVW5iZWthbm50ZXIgQ29tbWl0ICVzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6MzU4Cittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgWzxPcHRpb25lbj5dIFs8RGF0ZWk+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQxNQorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgImRlbiBEYXRlaXN0YXR1cyBtaXQgVGFncyBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQxNworbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICIiCisiS2xlaW5idWNoc3RhYmVuIGbDvHIgRGF0ZWllbiBtaXQgJ2Fzc3VtZSB1bmNoYW5nZWQnIE1hcmtpZXJ1bmcgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDE5Cittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgInp3aXNjaGVuZ2VzcGVpY2hlcnRlIERhdGVpZW4gaW4gZGVyIEF1c2dhYmUgYW56ZWlnZW4gKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyMQorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJlbnRmZXJudGUgRGF0ZWllbiBpbiBkZXIgQXVzZ2FiZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyMworbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiZ2XDpG5kZXJ0ZSBEYXRlaWVuIGluIGRlciBBdXNnYWJlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDI1Cittc2dpZCAic2hvdyBvdGhlciBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJzb25zdGlnZSBEYXRlaWVuIGluIGRlciBBdXNnYWJlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDI3Cittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImlnbm9yaWVydGUgRGF0ZWllbiBpbiBkZXIgQXVzZ2FiZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzMAorbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisiT2JqZWt0bmFtZW4gdm9uIEluaGFsdGVuLCBkaWUgenVtIENvbW1pdCB2b3JnZW1lcmt0IHNpbmQsIGluIGRlciBBdXNnYWJlICIKKyJhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzMgorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgIkRhdGVpZW4gaW0gRGF0ZWlzeXN0ZW0sIGRpZSBnZWzDtnNjaHQgd2VyZGVuIG3DvHNzZW4sIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDM0Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICJudXIgTmFtZW4gdm9uICdzb25zdGlnZW4nIFZlcnplaWNobmlzc2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDM3Cittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAia2VpbmUgbGVlcmVuIFZlcnplaWNobmlzc2UgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDAKK21zZ2lkICJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIm5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIERhdGVpZW4gaW4gZGVyIEF1c2dhYmUgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDIKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiJ3Jlc29sdmUtdW5kbycgSW5mb3JtYXRpb25lbiBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0NAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAiRGF0ZWllbiBhdXNsYXNzZW4sIGRpZSBlaW5lbSBNdXN0ZXIgZW50c3ByZWNoZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDcKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICJNdXN0ZXIsIGdlbGVzZW4gdm9uIDxEYXRlaT4sIGF1c3NjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTAKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAienVzw6R0emxpY2hlIHByby1WZXJ6ZWljaG5pcyBBdXNjaGx1c3NtdXN0ZXIgYXVzIDxEYXRlaT4gYXVzbGVzZW4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTIKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICJkaWUgc3RhbmRhcmRtw6TDn2lnZW4gR2l0LUF1c3NjaGzDvHNzZSBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1NQorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJBdXNnYWJlIHJlbGF0aXYgenVtIFByb2pla3R2ZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1OAorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAiYWxzIEZlaGxlciBiZWhhbmRlbG4sIHdlbm4gc2ljaCBlaW5lIDxEYXRlaT4gbmljaHQgaW0gSW5kZXggYmVmaW5kZXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTkKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAiQ29tbWl0LVJlZmVyZW56IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYwCittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiIgorInZvcmdlYmVuLCBkYXNzIFBmYWRlLCBkaWUgc2VpdCA8Q29tbWl0LVJlZmVyZW56PiBnZWzDtnNjaHQgd3VyZGVuLCBpbW1lciBub2NoICIKKyJ2b3JoYW5kZW4gc2luZCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ2MgorbXNnaWQgInNob3cgZGVidWdnaW5nIGRhdGEiCittc2dzdHIgIkF1c2dhYmVuIHp1ciBGZWhsZXJzdWNoZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MjgKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPE9wdGlvbmVuPl0gPENvbW1pdC1SZWZlcmVuej4gWzxQZmFkPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAibnVyIFZlcnplaWNobmlzc2UgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOQorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAiUmVrdXJzaW9uIGluIFVudGVydmVyemVpY2huaXNzZW4gZHVyY2hmw7xocmVuIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzEKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICJWZXJ6ZWljaG5pc3NlIGJlaSBSZWt1cnNpb24gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNAorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgIkVpbnRyw6RnZSBtaXQgTlVMLUJ5dGUgYWJzY2hsaWXDn2VuIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJpbmNsdWRlIG9iamVjdCBzaXplIgorbXNnc3RyICJPYmpla3RncsO2w59lIGVpbnNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNyBidWlsdGluL2xzLXRyZWUuYzoxMzkKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICJudXIgRGF0ZWluYW1lbiBhdWZsaXN0ZW4iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MgorbXNnaWQgInVzZSBmdWxsIHBhdGggbmFtZXMiCittc2dzdHIgInZvbGxzdMOkbmRpZ2UgUGZhZG5hbWVuIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ0Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICIiCisiZGFzIGdlc2FtdGUgVmVyemVpY2huaXMgYXVmbGlzdGVuOyBuaWNodCBudXIgZGFzIGFrdHVlbGxlIFZlcnplaWNobmlzICIKKyIoaW1wbGl6aWVydCAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzxPcHRpb25lbj5dIFs8Q29tbWl0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NgorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSA8bXNnPiBIRUFEIDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UgWzxPcHRpb25lbj5dIDxCZXNjaHJlaWJ1bmc+IEhFQUQgPENvbW1pdD4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NworbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwMAorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiU2NoYWx0ZXIgJ20nIGVyZm9yZGVydCBlaW5lbiBXZXJ0LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIgorbXNnc3RyICJLb25udGUgTWVyZ2UtU3RyYXRlZ2llICclcycgbmljaHQgZmluZGVuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIlZlcmbDvGdiYXJlIFN0cmF0ZWdpZW4gc2luZDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIlZlcmbDvGdiYXJlIGJlbnV0emVyZGVmaW5pZXJ0ZSBTdHJhdGVnaWVuIHNpbmQ6IgorCisjOiBidWlsdGluL21lcmdlLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjExOQorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgImtlaW5lIFp1c2FtbWVuZmFzc3VuZyBkZXIgVW50ZXJzY2hpZWRlIGFtIFNjaGx1c3MgZGVzIE1lcmdlcyBhbnplaWdlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NiBidWlsdGluL3B1bGwuYzoxMjIKK21zZ2lkICJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgImVpbmUgWnVzYW1tZW5mYXNzdW5nIGRlciBVbnRlcnNjaGllZGUgYW0gU2NobHVzcyBkZXMgTWVyZ2VzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk3IGJ1aWx0aW4vcHVsbC5jOjEyNQorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIihTeW5vbnltIGbDvHIgLS1zdGF0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5OSBidWlsdGluL3B1bGwuYzoxMjgKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyIoaMO2Y2hzdGVucyA8bj4pIEVpbnRyw6RnZSB2b24gXCJzaG9ydGxvZ1wiIHp1ciBCZXNjaHJlaWJ1bmcgZGVzIE1lcmdlLUNvbW1pdHMgIgorImhpbnp1ZsO8Z2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjAyIGJ1aWx0aW4vcHVsbC5jOjEzMQorbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICJlaW5lbiBlaW56ZWxuZW4gQ29tbWl0IGFuc3RhdHQgZWluZXMgTWVyZ2VzIGVyemV1Z2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA0IGJ1aWx0aW4vcHVsbC5jOjEzNAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAiZWluZW4gQ29tbWl0IGR1cmNoZsO8aHJlbiwgd2VubiBkZXIgTWVyZ2UgZXJmb2xncmVpY2ggd2FyIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDYgYnVpbHRpbi9wdWxsLmM6MTM3Cittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICJCZWFyYmVpdHVuZyBkZXIgQmVzY2hyZWlidW5nIHZvciBkZW0gQ29tbWl0IgorCisjOiBidWlsdGluL21lcmdlLmM6MjA3Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAiVm9yc3B1bGVuIGVybGF1YmVuIChTdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDkgYnVpbHRpbi9wdWxsLmM6MTQzCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAiYWJicmVjaGVuLCB3ZW5uIGtlaW4gVm9yc3B1bGVuIG3DtmdsaWNoIGlzdCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxMworbXNnaWQgIlZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAiZGVuIGdlbmFubnRlbiBDb21taXQgYXVmIGVpbmUgZ8O8bHRpZ2UgR1BHLVNpZ25hdHVyIMO8YmVycHLDvGZlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNCBidWlsdGluL25vdGVzLmM6NzY3IGJ1aWx0aW4vcHVsbC5jOjE0OAorIzogYnVpbHRpbi9yZXZlcnQuYzo4OQorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICJTdHJhdGVnaWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTUgYnVpbHRpbi9wdWxsLmM6MTQ5Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICJ6dSB2ZXJ3ZW5kZW5kZSBNZXJnZS1TdHJhdGVnaWUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTYgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJPcHRpb249V2VydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNyBidWlsdGluL3B1bGwuYzoxNTMKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJPcHRpb24gZsO8ciBhdXNnZXfDpGhsdGUgTWVyZ2UtU3RyYXRlZ2llIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE5Cittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICIiCisiQ29tbWl0LUJlc2NocmVpYnVuZyB6dXNhbW1lbmbDvGhyZW4gKGbDvHIgZWluZW4gTWVyZ2UsIGRlciBrZWluIFZvcnNwdWxlbiB3YXIpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjIzCittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImRlbiBzaWNoIGltIEdhbmdlIGJlZmluZGxpY2hlbiBNZXJnZSBhYmJyZWNoZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTEKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAiS29ubnRlIFwic3Rhc2hcIiBuaWNodCBhdXNmw7xocmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NgorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAiXCJzdGFzaFwiIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgImtlaW4gZ8O8bHRpZ2VzIE9iamVrdDogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODAgYnVpbHRpbi9tZXJnZS5jOjI5NworbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgInJlYWQtdHJlZSBmZWhsZ2VzY2hsYWdlbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMyNworbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKG5pY2h0cyB6dSBxdWV0c2NoZW4pIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiUXVldHNjaGUgQ29tbWl0IC0tIEhFQUQgd2lyZCBuaWNodCBha3R1YWxpc2llcnRcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM0NCBidWlsdGluL21lcmdlLmM6NzYzIGJ1aWx0aW4vbWVyZ2UuYzo5NzUKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgIktvbm50ZSBuaWNodCBuYWNoICclcycgc2NocmVpYmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM3MgorbXNnaWQgIldyaXRpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAiU2NocmVpYmUgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM3NAorbXNnaWQgIkZpbmlzaGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICJTY2hsaWXDn2UgU1FVQVNIX01TRyBhYiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM5NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIktlaW5lIE1lcmdlLUNvbW1pdC1CZXNjaHJlaWJ1bmcgLS0gSEVBRCB3aXJkIG5pY2h0IGFrdHVhbGlzaWVydFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcycgemVpZ3QgYXVmIGtlaW5lbiBDb21taXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiVW5nw7xsdGlnZXIgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBTdHJpbmc6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NjU2Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiRXMgd2lyZCBudXIgZGVyIE1lcmdlIHZvbiB6d2VpIEJyYW5jaGVzIGJlaGFuZGVsdC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiVW5iZWthbm50ZSBPcHRpb24gZsO8ciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICJrb25udGUgJXMgbmljaHQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL21lcmdlLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAia29ubnRlIG5pY2h0IHZvbiAnJXMnIGxlc2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIk1lcmdlIHd1cmRlIG5pY2h0IGNvbW1pdHRldDsgYmVudXR6ZW4gU2llICdnaXQgY29tbWl0JywgdW0gZGVuIE1lcmdlICIKKyJhYnp1c2NobGllw59lbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgogIlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCiBtc2dzdHIgIiIKLSJWZXJnbGVpY2ggZGVyIFZlcnNpb25lbjpcbiIKKyJCaXR0ZSBnZWJlbiBTaWUgZWluZSBDb21taXQtQmVzY2hyZWlidW5nIGVpbiwgdW0genUgZXJrbMOkcmVuLCB3YXJ1bSBkaWVzZXJcbiIKKyJNZXJnZSBlcmZvcmRlcmxpY2ggaXN0LCBpbnNiZXNvbmRlcmUgd2VubiBlcyBlaW5lbiBha3R1YWxpc2llcnRlblxuIgorIlVwc3RyZWFtLUJyYW5jaCBtaXQgZWluZW0gVGhlbWEtQnJhbmNoIHp1c2FtbWVuZsO8aHJ0LlxuIgogIlxuIgorIlplaWxlbiBiZWdpbm5lbmQgbWl0ICclYycgd2VyZGVuIGlnbm9yaWVydCwgdW5kIGVpbmUgbGVlcmUgQmVzY2hyZWlidW5nXG4iCisiYnJpY2h0IGRlbiBDb21taXQgYWIuXG4iCiAKLSM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKLW1zZ3N0ciAiIGhhdCAlcyBLaW5kZXIuIEFiYnJ1Y2hcbiIKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MTEKK21zZ2lkICJFbXB0eSBjb21taXQgbWVzc2FnZS4iCittc2dzdHIgIkxlZXJlIENvbW1pdC1CZXNjaHJlaWJ1bmciCiAKLSM6IGdpdGs6OTA4NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgotbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIFZlcnNpb24gaW4gRGF0ZWk6ICVzIgorIzogYnVpbHRpbi9tZXJnZS5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIld1bmRlcmJhci5cbiIKIAotIzogZ2l0azo5MDkxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKLW1zZ3N0ciAiRmVobGVyIGJlaW0gVmVyZ2xlaWNoZW4gZGVyIFZlcnNpb25lbjogJXMiCi0KLSM6IGdpdGs6OTEzNwotbXNnaWQgIlRvcCIKLW1zZ3N0ciAiT2JlbiIKLQotIzogZ2l0azo5MTM4Ci1tc2dpZCAiRnJvbSIKLW1zZ3N0ciAiVm9uIgotCi0jOiBnaXRrOjkxNDMKLW1zZ2lkICJUbyIKLW1zZ3N0ciAiYmlzIgotCi0jOiBnaXRrOjkxNjcKLW1zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKLW1zZ3N0ciAiUGF0Y2ggZXJzdGVsbGVuIgotCi0jOiBnaXRrOjkxNjkKLW1zZ2lkICJGcm9tOiIKLW1zZ3N0ciAiVm9uOiIKLQotIzogZ2l0azo5MTc4Ci1tc2dpZCAiVG86IgotbXNnc3RyICJiaXM6IgotCi0jOiBnaXRrOjkxODcKLW1zZ2lkICJSZXZlcnNlIgotbXNnc3RyICJVbWdla2VocnQiCi0KLSM6IGdpdGs6OTE4OSBnaXRrOjkzODUKLW1zZ2lkICJPdXRwdXQgZmlsZToiCi1tc2dzdHIgIkF1c2dhYmVkYXRlaToiCi0KLSM6IGdpdGs6OTE5NQotbXNnaWQgIkdlbmVyYXRlIgotbXNnc3RyICJFcnpldWdlbiIKLQotIzogZ2l0azo5MjMzCi1tc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBFcnpldWdlbiBkZXMgUGF0Y2hlczoiCi0KLSM6IGdpdGs6OTI1NiBnaXRrOjkzNzMgZ2l0azo5NDMwCi1tc2dpZCAiSUQ6IgotbXNnc3RyICJJRDoiCi0KLSM6IGdpdGs6OTI2NQotbXNnaWQgIlRhZyBuYW1lOiIKLW1zZ3N0ciAiTWFya2llcnVuZ3NuYW1lOiIKLQotIzogZ2l0azo5MjY4Ci1tc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCi1tc2dzdHIgIkVpbmUgTWFya2llcnVuZ3NiZXNjaHJlaWJ1bmcgaXN0IG9wdGlvbmFsIgotCi0jOiBnaXRrOjkyNzAKLW1zZ2lkICJUYWcgbWVzc2FnZToiCi1tc2dzdHIgIk1hcmtpZXJ1bmdzYmVzY2hyZWlidW5nOiIKLQotIzogZ2l0azo5Mjc0IGdpdGs6OTQzOQotbXNnaWQgIkNyZWF0ZSIKLW1zZ3N0ciAiRXJzdGVsbGVuIgotCi0jOiBnaXRrOjkyOTIKLW1zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCi1tc2dzdHIgIktlaW4gTWFya2llcnVuZ3NuYW1lIGFuZ2VnZWJlbiIKLQotIzogZ2l0azo5Mjk2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKLW1zZ3N0ciAiTWFya2llcnVuZyDCuyVzwqsgZXhpc3RpZXJ0IGJlcmVpdHMuIgotCi0jOiBnaXRrOjkzMDYKLW1zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgotbXNnc3RyICJGZWhsZXIgYmVpbSBFcnN0ZWxsZW4gZGVyIE1hcmtpZXJ1bmc6IgotCi0jOiBnaXRrOjkzODIKLW1zZ2lkICJDb21tYW5kOiIKLW1zZ3N0ciAiS29tbWFuZG86IgotCi0jOiBnaXRrOjkzOTAKLW1zZ2lkICJXcml0ZSIKLW1zZ3N0ciAiU2NocmVpYmVuIgotCi0jOiBnaXRrOjk0MDgKLW1zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCi1tc2dzdHIgIkZlaGxlciBiZWltIFNjaHJlaWJlbiBkZXIgVmVyc2lvbjoiCi0KLSM6IGdpdGs6OTQzNQotbXNnaWQgIk5hbWU6IgotbXNnc3RyICJOYW1lOiIKLQotIzogZ2l0azo5NDU4Ci1tc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKLW1zZ3N0ciAiQml0dGUgZ2ViZW4gU2llIGVpbmVuIE5hbWVuIGbDvHIgZGVuIG5ldWVuIFp3ZWlnIGFuLiIKLQotIzogZ2l0azo5NDYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCi1tc2dzdHIgIlp3ZWlnIMK7JXPCqyBleGlzdGllcnQgYmVyZWl0cy4gU29sbCBlciDDvGJlcnNjaHJpZWJlbiB3ZXJkZW4/IgotCi0jOiBnaXRrOjk1MzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKIG1zZ3N0ciAiIgotIlZlcnNpb24gwrslc8KrIGlzdCBiZXJlaXRzIGltIFp3ZWlnIMK7JXPCqyBlbnRoYWx0ZW4gLS0gdHJvdHpkZW0gZXJuZXV0ICIKLSJlaW50cmFnZW4/IgorIkF1dG9tYXRpc2NoZXIgTWVyZ2UgZmVobGdlc2NobGFnZW47IGJlaGViZW4gU2llIGRpZSBLb25mbGlrdGUgdW5kIGNvbW1pdHRlbiAiCisiU2llIGRhbm4gZGFzIEVyZ2VibmlzLlxuIgogCi0jOiBnaXRrOjk1MzUKLW1zZ2lkICJDaGVycnktcGlja2luZyIKLW1zZ3N0ciAiVmVyc2lvbiBwZmzDvGNrZW4iCisjOiBidWlsdGluL21lcmdlLmM6ODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IgorbXNnc3RyICInJXMnIGlzdCBrZWluIENvbW1pdCIKIAotIzogZ2l0azo5NTQ0Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL21lcmdlLmM6OTM1Cittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICJTaWUgYmVmaW5kZW4gc2ljaCBhdWYga2VpbmVtIEJyYW5jaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzcKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIktlaW4gUmVtb3RlLVJlcG9zaXRvcnkgZsO8ciBkZW4gYWt0dWVsbGVuIEJyYW5jaC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzkKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKyJFcyBpc3Qga2VpbiBTdGFuZGFyZC1VcHN0cmVhbS1CcmFuY2ggZsO8ciBkZW4gYWt0dWVsbGVuIEJyYW5jaCBkZWZpbmllcnQuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIktlaW4gUmVtb3RlLVRyYWNraW5nLUJyYW5jaCBmw7xyICVzIHZvbiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNsb3NlICclcyciCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IHNjaGxpZcOfZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjA4Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICJFcyBnaWJ0IGtlaW5lbiBNZXJnZSB6dW0gQWJicmVjaGVuIChNRVJHRV9IRUFEIGZlaGx0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMjQKIG1zZ2lkICIiCi0iQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCi0iUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKIG1zZ3N0ciAiIgotIlBmbMO8Y2tlbiBmZWhsZ2VzY2hsYWdlbiwgZGEgbm9jaCBsb2thbGUgw4RuZGVydW5nZW4gaW4gRGF0ZWkgwrslc8KrXG4iCi0idm9ybGllZ2VuLiBCaXR0ZSBkaWVzZSDDhG5kZXJ1bmdlbiBlaW50cmFnZW4sIHp1csO8Y2tzZXR6ZW4gb2RlclxuIgotInp3aXNjaGVuc3BlaWNoZXJuICjCu2dpdCBzdGFzaMKrKSB1bmQgZGFubiBlcm5ldXQgdmVyc3VjaGVuLiIKKyJTaWUgaGFiZW4gSWhyZW4gTWVyZ2UgbmljaHQgYWJnZXNjaGxvc3NlbiAoTUVSR0VfSEVBRCBleGlzdGllcnQpLlxuIgorIkJpdHRlIGNvbW1pdHRlbiBTaWUgSWhyZSDDhG5kZXJ1bmdlbiwgYmV2b3IgU2llIGRlbiBNZXJnZSBhdXNmw7xocmVuLiIKIAotIzogZ2l0azo5NTUwCisjOiBidWlsdGluL21lcmdlLmM6MTIzMQogbXNnaWQgIiIKLSJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKLSJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCiBtc2dzdHIgIiIKLSJQZmzDvGNrZW4gZmVobGdlc2NobGFnZW4sIGRhIGVpbiBadXNhbW1lbmbDvGhydW5ncy1Lb25mbGlrdCBhdWZnZXRyZXRlblxuIgotImlzdC4gU29sbCBkYXMgWnVzYW1tZW5mw7xocnVuZ3MtV2Vya3pldWcgKMK7Z2l0IGNpdG9vbMKrKSBhdWZnZXJ1ZmVuXG4iCi0id2VyZGVuLCB1bSBkaWVzZW4gS29uZmxpa3QgYXVmenVsw7ZzZW4/IgorIlNpZSBoYWJlbiBcImNoZXJyeS1waWNrXCIgbmljaHQgYWJnZXNjaGxvc3NlbiAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdGllcnQpLlxuIgorIkJpdHRlIGNvbW1pdHRlbiBTaWUgSWhyZSDDhG5kZXJ1bmdlbiwgYmV2b3IgU2llIGRlbiBNZXJnZSBhdXNmw7xocmVuLiIKIAotIzogZ2l0azo5NTY2IGdpdGs6OTYyNAotbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgotbXNnc3RyICJLZWluZSDDhG5kZXJ1bmdlbiBlaW5nZXRyYWdlbiIKLQotIzogZ2l0azo5NTkzCi0jLCBmdXp6eSwgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgorIzogYnVpbHRpbi9tZXJnZS5jOjEyMzQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCiBtc2dzdHIgIiIKLSJWZXJzaW9uIMK7JXPCqyBpc3QgYmVyZWl0cyBpbSBad2VpZyDCuyVzwqsgZW50aGFsdGVuIC0tIHRyb3R6ZGVtIGVybmV1dCAiCi0iZWludHJhZ2VuPyIKKyJTaWUgaGFiZW4gXCJjaGVycnktcGlja1wiIG5pY2h0IGFiZ2VzY2hsb3NzZW4gKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RpZXJ0KS4iCiAKLSM6IGdpdGs6OTU5OAotIywgZnV6enkKLW1zZ2lkICJSZXZlcnRpbmciCi1tc2dzdHIgIlp1csO8Y2tzZXR6ZW4iCisjOiBidWlsdGluL21lcmdlLmM6MTI0MworbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICJTaWUga8O2bm5lbiAtLXNxdWFzaCBuaWNodCBtaXQgLS1uby1mZiBrb21iaW5pZXJlbi4iCiAKLSM6IGdpdGs6OTYwNgotIywgZnV6enksIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjUxCittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIktlaW4gQ29tbWl0IGFuZ2VnZWJlbiB1bmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gaXN0IG5pY2h0IGdlc2V0enQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI2OAorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICIiCisiQmluIGF1ZiBlaW5lbSBDb21taXQsIGRlciBub2NoIGdlYm9yZW4gd2lyZDsga2FubiBcInNxdWFzaFwiIG5pY2h0IGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3MAorbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisiTmljaHQgdm9yenVzcHVsZW5kZXIgQ29tbWl0IGthbm4gbmljaHQgaW4gZWluZW0gbGVlcmVuIEJyYW5jaCB2ZXJ3ZW5kZXQgIgorIndlcmRlbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiVzIC0gbmljaHRzIHdhcyB3aXIgenVzYW1tZW5mw7xocmVuIGvDtm5uZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjc4Cittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiS2FubiBudXIgZXhha3QgZWluZW4gQ29tbWl0IGluIGVpbmVtIGxlZXJlbiBCcmFuY2ggenVzYW1tZW5mw7xocmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiIgorIkNvbW1pdCAlcyBoYXQgZWluZSBuaWNodCB2ZXJ0cmF1ZW5zd8O8cmRpZ2UgR1BHLVNpZ25hdHVyLCBhbmdlYmxpY2ggdm9uICVzLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIkNvbW1pdCAlcyBoYXQgZWluZSB1bmfDvGx0aWdlIEdQRy1TaWduYXR1ciwgYW5nZWJsaWNoIHZvbiAlcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIkNvbW1pdCAlcyBoYXQga2VpbmUgR1BHLVNpZ25hdHVyLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSBieSAlc1xuIgorbXNnc3RyICJDb21taXQgJXMgaGF0IGVpbmUgZ8O8bHRpZ2UgR1BHLVNpZ25hdHVyIHZvbiAlc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQyMworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiUHJvYmllcmUgd2lya2xpY2ggdHJpdmlhbGVuIFwiaW4taW5kZXhcIi1NZXJnZSAuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAiTmVpbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MDEKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIlZvcnNwdWxlbiBuaWNodCBtw7ZnbGljaCwgYnJlY2hlIGFiLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MjQgYnVpbHRpbi9tZXJnZS5jOjE2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIlLDvGNrbGF1ZiBkZXMgVmVyemVpY2huaXNzZXMgYmlzIHp1bSBVcnNwcnVuZyAuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIlByb2JpZXJlIE1lcmdlLVN0cmF0ZWdpZSAlcyAuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIktlaW5lIE1lcmdlLVN0cmF0ZWdpZSBiZWhhbmRlbHQgZGllc2VuIE1lcmdlLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiTWVyZ2UgbWl0IFN0cmF0ZWdpZSAlcyBmZWhsZ2VzY2hsYWdlbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIkJlbnV0emVuIFNpZSBcIiVzXCIsIHVtIGRpZSBBdWZsw7ZzdW5nIHBlciBIYW5kIHZvcnp1YmVyZWl0ZW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIiIKKyJBdXRvbWF0aXNjaGVyIE1lcmdlIGFiZ2VzY2hsb3NzZW47IGhhbHRlLCB3aWUgZ2V3w7xuc2NodCwgdm9yIGRlbSBDb21taXQgYW5cbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjkKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Q29tbWl0PiA8Q29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzAKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxDb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPENvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMyCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Q29tbWl0PiA8Q29tbWl0PiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxSZWZlcmVuej4gWzxDb21taXQ+XSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE0Cittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICJBdXNnYWJlIGFsbGVyIGdlbWVpbnNhbWVuIFZvcmfDpG5nZXItQ29tbWl0cyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE2Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICJWb3Jnw6RuZ2VyLUNvbW1pdHMgZsO8ciBlaW5lbiBlaW56ZWxuZW4gbi1XZWdlLU1lcmdlIGZpbmRlbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE4Cittc2dpZCAibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiCittc2dzdHIgIkNvbW1pdHMgYXVmbGlzdGVuLCBkaWUgbmljaHQgZHVyY2ggQW5kZXJlIGVycmVpY2hiYXIgc2luZCIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjIwCittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICJpc3QgZGVyIEVyc3RlIGVpbiBWb3Jnw6RuZ2VyLUNvbW1pdCB2b24gZGVtIEFuZGVyZW4/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjIKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAiPENvbW1pdD4gZmluZGVuLCB2b24gd28gUmVmbG9nIHZvbiA8UmVmZXJlbno+IGFiZ2VzcGFsdGVuIHd1cmRlIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo4CiBtc2dpZCAiIgotIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKLSJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgogbXNnc3RyICIiCi0iUGZsw7xja2VuIGZlaGxnZXNjaGxhZ2VuLCBkYSBub2NoIGxva2FsZSDDhG5kZXJ1bmdlbiBpbiBEYXRlaSDCuyVzwqtcbiIKLSJ2b3JsaWVnZW4uIEJpdHRlIGRpZXNlIMOEbmRlcnVuZ2VuIGVpbnRyYWdlbiwgenVyw7xja3NldHplbiBvZGVyXG4iCi0iendpc2NoZW5zcGVpY2hlcm4gKMK7Z2l0IHN0YXNowqspIHVuZCBkYW5uIGVybmV1dCB2ZXJzdWNoZW4uIgorImdpdCBtZXJnZS1maWxlIFs8T3B0aW9uZW4+XSBbLUwgPE5hbWUxPiBbLUwgPG9yaWc+IFstTCA8TmFtZTI+XV1dIDxEYXRlaTE+ICIKKyI8b3JpZy1EYXRlaT4gPERhdGVpMj4iCiAKLSM6IGdpdGs6OTYxMAotIywgZnV6enkKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjMzCittc2dpZCAic2VuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiRXJnZWJuaXNzZSB6dXIgU3RhbmRhcmQtQXVzZ2FiZSBzZW5kZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM0Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgImVpbmVuIGRpZmYzIGJhc2llcnRlbiBNZXJnZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM1Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJiZWkgS29uZmxpa3RlbiB1bnNlcmUgVmFyaWFudGUgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNworbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJiZWkgS29uZmxpa3RlbiBpaHJlIFZhcmlhbnRlIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICJiZWkgS29uZmxpa3RlbiBlaW5lIGdlbWVpbnNhbWUgVmFyaWFudGUgdmVyd2VuZGVuIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MgorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGlzIG1hcmtlciBzaXplIgorbXNnc3RyICJiZWkgS29uZmxpa3RlbiBkaWVzZSBLZW5uemVpY2hudW5nc2zDpG5nZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQzCittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICJrZWluZSBXYXJudW5nIGJlaSBLb25mbGlrdGVuIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0NQorbXNnaWQgInNldCBsYWJlbHMgZm9yIGZpbGUxL29yaWctZmlsZS9maWxlMiIKK21zZ3N0ciAiQmVzY2hyaWZ0dW5nIGbDvHIgRGF0ZWkxL29yaWctRGF0ZWkvRGF0ZWkyIHNldHplbiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NAorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUwCittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgIkVpbmdhYmUgaXN0IGR1cmNoIE5VTC1aZWljaGVuIGFiZ2VzY2hsb3NzZW4iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUxIGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI0Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJmZWhsZW5kZSBPYmpla3RlIGVybGF1YmVuIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAiZGllIEVyc3RlbGx1bmcgdm9uIG1laHIgYWxzIGVpbmVtIFwiVHJlZVwiLU9iamVrdCBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9tdi5jOjE1Cittc2dpZCAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgImdpdCBtdiBbPE9wdGlvbmVuPl0gPFF1ZWxsZT4uLi4gPFppZWw+IgorCisjOiBidWlsdGluL212LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICJWZXJ6ZWljaG5pcyAlcyBpc3QgenVtIENvbW1pdCB2b3JnZW1lcmt0IHVuZCBrZWluIFN1Ym1vZHVsPyIKKworIzogYnVpbHRpbi9tdi5jOjcxCittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJCaXR0ZSBtZXJrZW4gU2llIElocmUgw4RuZGVydW5nZW4gaW4gLmdpdG1vZHVsZXMgenVtIENvbW1pdCB2b3Igb2RlciAiCisiYmVudXR6ZW5cbiIKKyJTaWUgXCJzdGFzaFwiLCB1bSBmb3J0enVmYWhyZW4uIgorCisjOiBidWlsdGluL212LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyBpc3QgenVtIENvbW1pdCB2b3JnZW1lcmt0IgorCisjOiBidWlsdGluL212LmM6MTExCittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJWZXJzY2hpZWJlbi9VbWJlbmVubmVuIGVyendpbmdlbiwgYXVjaCB3ZW5uIGRhcyBaaWVsIGV4aXN0aWVydCIKKworIzogYnVpbHRpbi9tdi5jOjExMgorbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJzY2hpZWJlbiBvZGVyIFVtYmVuZW5uZW4gw7xiZXJzcHJpbmdlbiIKKworIzogYnVpbHRpbi9tdi5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiWmllbCAnJXMnIGlzdCBrZWluIFZlcnplaWNobmlzIgorCisjOiBidWlsdGluL212LmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAiUHLDvGZlIFVtYmVuZW5udW5nIHZvbiAnJXMnIG5hY2ggJyVzJ1xuIgorCisjOiBidWlsdGluL212LmM6MTY2Cittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAidW5nw7xsdGlnZSBRdWVsbGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICJrYW5uIFZlcnplaWNobmlzIG5pY2h0IGluIHNpY2ggc2VsYnN0IHZlcnNjaGllYmVuIgorCisjOiBidWlsdGluL212LmM6MTcyCittc2dpZCAiY2Fubm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZmlsZSIKK21zZ3N0ciAia2FubiBWZXJ6ZWljaG5pcyBuaWNodCDDvGJlciBEYXRlaSB2ZXJzY2hpZWJlbiIKKworIzogYnVpbHRpbi9tdi5jOjE4MQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgIlF1ZWxsdmVyemVpY2huaXMgaXN0IGxlZXIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMDYKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICJuaWNodCB1bnRlciBWZXJzaW9uc2tvbnRyb2xsZSIKKworIzogYnVpbHRpbi9tdi5jOjIwOQorbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAiWmllbCBleGlzdGllcnQgYmVyZWl0cyIKKworIzogYnVpbHRpbi9tdi5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICLDvGJlcnNjaHJlaWJlICclcyciCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjAKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJLYW5uIG5pY2h0IMO8YmVyc2NocmVpYmVuIgorCisjOiBidWlsdGluL212LmM6MjIzCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICJtZWhyZXJlIFF1ZWxsZW4gZsO8ciBkYXMgc2VsYmUgWmllbCIKKworIzogYnVpbHRpbi9tdi5jOjIyNQorbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiWmllbHZlcnplaWNobmlzIGV4aXN0aWVydCBuaWNodCIKKworIzogYnVpbHRpbi9tdi5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXMsIFF1ZWxsZT0lcywgWmllbD0lcyIKKworIzogYnVpbHRpbi9tdi5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICJCZW5lbm5lICVzIG5hY2ggJXMgdW1cbiIKKworIzogYnVpbHRpbi9tdi5jOjI1NiBidWlsdGluL3JlbW90ZS5jOjcyMiBidWlsdGluL3JlcGFjay5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiVW1iZW5lbm51bmcgdm9uICclcycgZmVobGdlc2NobGFnZW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyNTUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPE9wdGlvbmVuPl0gPENvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyNTYKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1hbGwiCittc2dzdHIgImdpdCBuYW1lLXJldiBbPE9wdGlvbmVuPl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyNTcKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8T3B0aW9uZW4+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzA5Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJudXIgTmFtZW4gYW56ZWlnZW4gKGtlaW5lIFNIQS0xKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxMAorbXNnaWQgIm9ubHkgdXNlIHRhZ3MgdG8gbmFtZSB0aGUgY29tbWl0cyIKK21zZ3N0ciAibnVyIFRhZ3MgdmVyd2VuZGVuLCB1bSBkaWUgQ29tbWl0cyB6dSBiZW5lbm5lbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxMgorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJudXIgUmVmZXJlbnplbiB2ZXJ3ZW5kZW4gZGllIDxNdXN0ZXI+IGVudHNwcmVjaGVuIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzE0Cittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAiYWxsZSBDb21taXRzIGF1Zmxpc3RlbiwgZGllIHZvbiBhbGxlbiBSZWZlcmVuemVuIGVycmVpY2hiYXIgc2luZCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxNQorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAidm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGxlc2VuIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzE2Cittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICJBdXNnYWJlIHZvbiBgdW5kZWZpbmllcnRlbmAgTmFtZW4gZXJsYXViZW4gKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMyMgorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICJUYWdzIGluIGRlciBFaW5nYWJlIGRlcmVmZXJlbnppZXJlbiAoaW50ZXJuZSBWZXJ3ZW5kdW5nKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gW2xpc3QgWzxPYmpla3Q+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNgogbXNnaWQgIiIKLSJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCi0iIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gIgorInwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgogbXNnc3RyICIiCi0iUGZsw7xja2VuIGZlaGxnZXNjaGxhZ2VuLCBkYSBlaW4gWnVzYW1tZW5mw7xocnVuZ3MtS29uZmxpa3QgYXVmZ2V0cmV0ZW5cbiIKLSJpc3QuIFNvbGwgZGFzIFp1c2FtbWVuZsO8aHJ1bmdzLVdlcmt6ZXVnICjCu2dpdCBjaXRvb2zCqykgYXVmZ2VydWZlblxuIgotIndlcmRlbiwgdW0gZGllc2VuIEtvbmZsaWt0IGF1Znp1bMO2c2VuPyIKKyJnaXQgbm90ZXMgWy0tcmVmIDxOb3Rpei1SZWZlcmVuej5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gIgorIjxCZXNjaHJlaWJ1bmc+IHwgLUYgPERhdGVpPiB8ICgtYyB8IC1DKSA8T2JqZWt0Pl0gWzxPYmpla3Q+XSIKIAotIzogZ2l0azo5NjUzCi1tc2dpZCAiQ29uZmlybSByZXNldCIKLW1zZ3N0ciAiWnVyw7xja3NldHplbiBiZXN0w6R0aWdlbiIKLQotIzogZ2l0azo5NjU1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKLW1zZ3N0ciAiWndlaWcgwrslc8KrIGF1ZiDCuyVzwqsgenVyw7xja3NldHplbj8iCi0KLSM6IGdpdGs6OTY1NwotbXNnaWQgIlJlc2V0IHR5cGU6IgotbXNnc3RyICJBcnQgZGVzIFp1csO8Y2tzZXR6ZW5zOiIKLQotIzogZ2l0azo5NjYwCi1tc2dpZCAiU29mdDogTGVhdmUgd29ya2luZyB0cmVlIGFuZCBpbmRleCB1bnRvdWNoZWQiCi1tc2dzdHIgIkhhcm1sb3M6IEFyYmVpdHNrb3BpZSB1bmQgQmVyZWl0c3RlbGx1bmcgdW52ZXLDpG5kZXJ0IgotCi0jOiBnaXRrOjk2NjMKLW1zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCisjOiBidWlsdGluL25vdGVzLmM6MjcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKIG1zZ3N0ciAiIgotIkdlbWlzY2h0OiBBcmJlaXRza29waWUgdW52ZXLDpG5kZXJ0LFxuIgotIkJlcmVpdHN0ZWxsdW5nIHp1csO8Y2tnZXNldHp0IgorImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gY29weSBbLWZdIDx2b24tT2JqZWt0PiA8bmFjaC1PYmpla3Q+IgogCi0jOiBnaXRrOjk2NjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOAogbXNnaWQgIiIKLSJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCi0iKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgIgorIigtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKIG1zZ3N0ciAiIgotIkhhcnQ6IEFyYmVpdHNrb3BpZSB1bmQgQmVyZWl0c3RlbGx1bmdcbiIKLSIoQWxsZSBsb2thbGVuIMOEbmRlcnVuZ2VuIHdlcmRlbiBnZWzDtnNjaHQpIgorImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPEJlc2NocmVpYnVuZz4gIgorInwgLUYgPERhdGVpPiB8ICgtYyB8IC1DKSA8T2JqZWt0Pl0gWzxPYmpla3Q+XSIKIAotIzogZ2l0azo5NjgzCi1tc2dpZCAiUmVzZXR0aW5nIgotbXNnc3RyICJadXLDvGNrc2V0emVuIgorIzogYnVpbHRpbi9ub3Rlcy5jOjI5Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8Tm90aXotUmVmZXJlbno+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPE9iamVrdD5dIgogCi0jOiBnaXRrOjk3NDMKLW1zZ2lkICJDaGVja2luZyBvdXQiCi1tc2dzdHIgIlVtc3RlbGxlbiIKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8Tm90aXotUmVmZXJlbno+XSBzaG93IFs8T2JqZWt0Pl0iCiAKLSM6IGdpdGs6OTc5NgotbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGN1cnJlbnRseSBjaGVja2VkLW91dCBicmFuY2giCi1tc2dzdHIgIiIKLSJEZXIgWndlaWcsIGF1ZiBkZW4gZGllIEFyYmVpdHNrb3BpZSBtb21lbnRhbiB1bWdlc3RlbGx0IGlzdCwga2FubiBuaWNodCAiCi0iZ2Vsw7ZzY2h0IHdlcmRlbi4iCi0KLSM6IGdpdGs6OTgwMgotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9ub3Rlcy5jOjMxCiBtc2dpZCAiIgotIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKLSJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKIG1zZ3N0ciAiIgotIkRpZSBWZXJzaW9uZW4gYXVmIFp3ZWlnIMK7JXPCqyBleGlzdGllcmVuIGF1ZiBrZWluZW0gYW5kZXJlbiBad2VpZy5cbiIKLSJad2VpZyDCuyVzwqsgdHJvdHpkZW0gbMO2c2NoZW4/IgorImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8U3RyYXRlZ2llPl0gPE5vdGl6LSIKKyJSZWZlcmVuej4iCiAKLSM6IGdpdGs6OTgzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKLW1zZ3N0ciAiTWFya2llcnVuZ2VuIHVuZCBad2VpZ2U6ICVzIgorIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKIAotIzogZ2l0azo5ODUwCi1tc2dpZCAiRmlsdGVyIgotbXNnc3RyICJGaWx0ZXJuIgorIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCiAKLSM6IGdpdGs6MTAxNDYKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxOb3Rpei1SZWZlcmVuej5dIHJlbW92ZSBbPE9iamVrdD4uLi5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW4gfCAtdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPE5vdGl6LVJlZmVyZW56Pl0gcHJ1bmUgWy1uIHwgLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxOb3Rpei1SZWZlcmVuej5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MQorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFs8T2JqZWt0Pl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDYKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgWzxPcHRpb25lbj5dIFs8T2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MQorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IFs8T3B0aW9uZW4+XSA8dm9uLU9iamVrdD4gPG5hY2gtT2JqZWt0PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUyCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0Pl0uLi4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzx2b24tT2JqZWt0PiA8bmFjaC1PYmpla3Q+XS4uLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU3Cittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFs8T3B0aW9uZW4+XSBbPE9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjIKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPE9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjcKK21zZ2lkICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgc2hvdyBbPE9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBbPE9wdGlvbmVuPl0gPE5vdGl6LVJlZmVyZW56PiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjczCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkKK21zZ2lkICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyByZW1vdmUgWzxPYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg0Cittc2dpZCAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgcHJ1bmUgWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODkKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImtvbm50ZSAnc2hvdycgZsO8ciBPYmpla3QgJyVzJyBuaWNodCBzdGFydGVuIgorCisjOiBidWlsdGluL25vdGVzLmM6MTUxCittc2dpZCAiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIKK21zZ3N0ciAiS29ubnRlIEF1c2dhYmUgdm9uICdzaG93JyBuaWNodCBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJrb25udGUgJ3Nob3cnIGbDvHIgT2JqZWt0ICclcycgbmljaHQgYWJzY2hsaWXDn2VuIgorCisjOiBidWlsdGluL25vdGVzLmM6MTc0IGJ1aWx0aW4vdGFnLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICJrb25udGUgRGF0ZWkgJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxOTMKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBub3RlIGNvbnRlbnRzIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24iCittc2dzdHIgIiIKKyJCaXR0ZSBsaWVmZXJuIFNpZSBkZW4gTm90aXotSW5oYWx0IHVudGVyIFZlcndlbmR1bmcgZGVyIE9wdGlvbiAtbSBvZGVyIC1GLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwMgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAiS29ubnRlIE5vdGl6LU9iamVrdCBuaWNodCBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG5vdGUgY29udGVudHMgaGF2ZSBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgIkRpZSBOb3Rpei1JbmhhbHRlIHd1cmRlbiBpbiAlcyBiZWxhc3NlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIzMiBidWlsdGluL3RhZy5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICJrYW5uICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMzQgYnVpbHRpbi90YWcuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICJrb25udGUgJyVzJyBuaWNodCDDtmZmbmVuIG9kZXIgbGVzZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTMgYnVpbHRpbi9ub3Rlcy5jOjMwNCBidWlsdGluL25vdGVzLmM6MzA2CisjOiBidWlsdGluL25vdGVzLmM6MzY2IGJ1aWx0aW4vbm90ZXMuYzo0MjEgYnVpbHRpbi9ub3Rlcy5jOjUwNworIzogYnVpbHRpbi9ub3Rlcy5jOjUxMiBidWlsdGluL25vdGVzLmM6NTkwIGJ1aWx0aW4vbm90ZXMuYzo2NTMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzcgYnVpbHRpbi90YWcuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGFscyBnw7xsdGlnZSBSZWZlcmVueiBhdWZsw7ZzZW4uIgorCisjOiBidWlsdGluL25vdGVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiRmVobGVyIGJlaW0gTGVzZW4gZGVzIE9iamVrdGVzICclcycuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZWFkIG5vdGUgZGF0YSBmcm9tIG5vbi1ibG9iIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiS2FubiBOb3Rpei1EYXRlbiBuaWNodCB2b24gTmljaHQtQmxvYiBPYmpla3QgJyVzJyBsZXNlbi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTkgYnVpbHRpbi9ub3Rlcy5jOjQxNCBidWlsdGluL25vdGVzLmM6NDkwCisjOiBidWlsdGluL25vdGVzLmM6NTAyIGJ1aWx0aW4vbm90ZXMuYzo1NzggYnVpbHRpbi9ub3Rlcy5jOjY0NgorIzogYnVpbHRpbi9ub3Rlcy5jOjk0MgorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgInp1IHZpZWxlIFBhcmFtZXRlciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3MiBidWlsdGluL25vdGVzLmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgIktlaW5lIE5vdGl6IGbDvHIgT2JqZWt0ICVzIGdlZnVuZGVuLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5MyBidWlsdGluL25vdGVzLmM6NTU2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAiTm90aXppbmhhbHRlIGFscyBaZWljaGVua2V0dGUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTYgYnVpbHRpbi9ub3Rlcy5jOjU1OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICJOb3RpemluaGFsdGUgaW4gZWluZXIgRGF0ZWkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTggYnVpbHRpbi9ub3Rlcy5jOjQwMSBidWlsdGluL25vdGVzLmM6NTYxCisjOiBidWlsdGluL25vdGVzLmM6NTY0IGJ1aWx0aW4vdGFnLmM6NjMwCittc2dpZCAib2JqZWN0IgorbXNnc3RyICJPYmpla3QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTkgYnVpbHRpbi9ub3Rlcy5jOjU2MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiV2llZGVydmVyd2VuZHVuZyB1bmQgQmVhcmJlaXR1bmcgZGVzIGFuZ2VnZWJlbmVuIE5vdGl6LU9iamVrdGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NDAyIGJ1aWx0aW4vbm90ZXMuYzo1NjUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIldpZWRlcnZlcndlbmR1bmcgZGVzIGFuZ2VnZWJlbmVuIE5vdGl6LU9iamVrdGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NDA1IGJ1aWx0aW4vbm90ZXMuYzo1NjgKK21zZ2lkICJhbGxvdyBzdG9yaW5nIGVtcHR5IG5vdGUiCittc2dzdHIgIlNwZWljaGVybiBsZWVyZXIgTm90aXogZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDYgYnVpbHRpbi9ub3Rlcy5jOjQ3NworbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgImV4aXN0aWVyZW5kZSBOb3RpemVuIGVyc2V0emVuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDMxCisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKLSJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgogbXNnc3RyICIiCi0iRmVobGVyIGJlaW0gTGVzZW4gZGVyIFN0cnVrdHVyaW5mb3JtYXRpb25lbjsgWndlaWdlIHVuZCBJbmZvcm1hdGlvbmVuIHp1ICIKLSJWb3Jnw6RuZ2VyL05hY2hmb2xnZXIgd2VyZGVuIHVudm9sbHN0w6RuZGlnIHNlaW4uIgorIktvbm50ZSBOb3RpemVuIG5pY2h0IGhpbnp1ZsO8Z2VuLiBFeGlzdGllcmVuZGUgTm90aXplbiBmw7xyIE9iamVrdCAlcyAiCisiZ2VmdW5kZW4uIFZlcndlbmRlbiBTaWUgJy1mJywgdW0gZGllIGV4aXN0aWVyZW5kZW4gTm90aXplbiB6dSDDvGJlcnNjaHJlaWJlbi4iCiAKLSM6IGdpdGs6MTExMjMKLW1zZ2lkICJUYWciCi1tc2dzdHIgIk1hcmtpZXJ1bmciCisjOiBidWlsdGluL25vdGVzLmM6NDQ2IGJ1aWx0aW4vbm90ZXMuYzo1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICLDnGJlcnNjaHJlaWJlIGV4aXN0aWVyZW5kZSBOb3RpemVuIGbDvHIgT2JqZWt0ICVzXG4iCiAKLSM6IGdpdGs6MTExMjcKLW1zZ2lkICJJZCIKLW1zZ3N0ciAiSWQiCisjOiBidWlsdGluL25vdGVzLmM6NDU3IGJ1aWx0aW4vbm90ZXMuYzo2MTggYnVpbHRpbi9ub3Rlcy5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiRW50ZmVybmUgTm90aXogZsO8ciBPYmpla3QgJXNcbiIKIAotIzogZ2l0azoxMTIxMAotbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgotbXNnc3RyICJHaXRrLVNjaHJpZnRlbiB3w6RobGVuIgorIzogYnVpbHRpbi9ub3Rlcy5jOjQ3OAorbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJPYmpla3RlIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKIAotIzogZ2l0azoxMTIyNwotbXNnaWQgIkIiCi1tc2dzdHIgIkYiCi0KLSM6IGdpdGs6MTEyMzAKLW1zZ2lkICJJIgotbXNnc3RyICJLIgotCi0jOiBnaXRrOjExMzQ4Ci1tc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgotbXNnc3RyICJBbnplaWdlIGRlciBWZXJzaW9uc2xpc3RlIgotCi0jOiBnaXRrOjExMzUxCi1tc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgotbXNnc3RyICJNYXhpbWFsZSBHcmFwaGVuYnJlaXRlIChaZWlsZW4pIgotCi0jOiBnaXRrOjExMzU1Ci0jLCBuby10Y2wtZm9ybWF0Ci1tc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKLW1zZ3N0ciAiTWF4aW1hbGUgR3JhcGhlbmJyZWl0ZSAoJSBkZXMgRmVuc3RlcnMpIgotCi0jOiBnaXRrOjExMzU4Ci1tc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgotbXNnc3RyICJMb2thbGUgw4RuZGVydW5nZW4gYW56ZWlnZW4iCi0KLSM6IGdpdGs6MTEzNjEKLSMsIGZ1enp5Ci1tc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKLW1zZ3N0ciAiU0hBMS1IYXNod2VydCBhdXRvbWF0aXNjaCBhdXN3w6RobGVuIgotCi0jOiBnaXRrOjExMzY1Ci1tc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKLW1zZ3N0ciAiRW50ZmVybnRlIFp3ZWlnZS9NYXJraWVydW5nZW4gYXVzYmxlbmRlbiIKLQotIzogZ2l0azoxMTM2OQotbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgotbXNnc3RyICJBbnplaWdlIGRlcyBWZXJnbGVpY2hzIgotCi0jOiBnaXRrOjExMzcxCi1tc2dpZCAiVGFiIHNwYWNpbmciCi1tc2dzdHIgIlRhYnVsYXRvcmJyZWl0ZSIKLQotIzogZ2l0azoxMTM3NAotIywgZnV6enkKLW1zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgotbXNnc3RyICJOYWhlbGllZ2VuZGUgTWFya2llcnVuZ2VuIGFuemVpZ2VuIgotCi0jOiBnaXRrOjExMzc3Ci1tc2dpZCAiTWF4aW11bSAjIHRhZ3MvaGVhZHMgdG8gc2hvdyIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0ODAKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKIG1zZ3N0ciAiIgorIktvbmZpZ3VyYXRpb24gZsO8ciA8S29tbWFuZG8+IGJlaW0gVW1zY2hyZWliZW4gdm9uIFZlcnNpb25lbiBsYWRlbiAiCisiKGltcGxpemllcnQgLS1zdGRpbikiCiAKLSM6IGdpdGs6MTEzODAKLW1zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCi1tc2dzdHIgIlZlcmdsZWljaCBudXIgZsO8ciBhbmdlemVpZ3RlIFBmYWRlIgorIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OAorbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAienUgd2VuaWcgUGFyYW1ldGVyIgogCi0jOiBnaXRrOjExMzgzCi1tc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCi1tc2dzdHIgIlplaWNoZW5rb2RpZXJ1bmcgcHJvIERhdGVpIGVybWl0dGVsbiIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiS2FubiBOb3RpemVuIG5pY2h0IGtvcGllcmVuLiBFeGlzdGllcmVuZGUgTm90aXplbiBmw7xyIE9iamVrdCAlcyBnZWZ1bmRlbi4gIgorIlZlcndlbmRlbiBTaWUgJy1mJywgdW0gZGllIGV4aXN0aWVyZW5kZW4gTm90aXplbiB6dSDDvGJlcnNjaHJlaWJlbi4iCiAKLSM6IGdpdGs6MTEzODkgZ2l0azoxMTUzNgotbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKLW1zZ3N0ciAiRXh0ZXJuZXMgRGlmZi1Qcm9ncmFtbSIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIktlaW5lIE5vdGl6ZW4gZsO8ciBRdWVsbC1PYmpla3QgJXMuIEtvcGllIG5pY2h0IG3DtmdsaWNoLiIKIAotIzogZ2l0azoxMTM5MAotbXNnaWQgIkNob29zZS4uLiIKLW1zZ3N0ciAiV8OkaGxlbiAuLi4iCisjOiBidWlsdGluL25vdGVzLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLW0vLUYvLWMvLUMgc2luZCBmw7xyIGRhcyBVbnRlcmtvbW1hbmRvICdlZGl0JyB2ZXJhbHRldC5cbiIKKyJCaXR0ZSBiZW51dHplbiBTaWUgc3RhdHRkZXNzZW4gJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnLlxuIgogCi0jOiBnaXRrOjExMzk1CisjOiBidWlsdGluL25vdGVzLmM6NzY0CiBtc2dpZCAiR2VuZXJhbCBvcHRpb25zIgogbXNnc3RyICJBbGxnZW1laW5lIE9wdGlvbmVuIgogCi0jOiBnaXRrOjExMzk4Ci1tc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgotbXNnc3RyICJBdXNzZWhlbiBkZXIgQmVudXR6ZXJvYmVyZmzDpGNoZSBkdXJjaCBUaGVtYSBiZXN0aW1tZW4iCisjOiBidWlsdGluL25vdGVzLmM6NzY2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiTWVyZ2UtT3B0aW9uZW4iCiAKLSM6IGdpdGs6MTE0MDAKLW1zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgotbXNnc3RyICIow4RuZGVydW5nZW4gd2VyZGVuIGVyc3QgbmFjaCBOZXVzdGFydCB3aXJrc2FtKSIKLQotIzogZ2l0azoxMTQwMgotbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgotbXNnc3RyICIoTW9tZW50YW4gbmljaHQgdmVyZsO8Z2JhcikiCi0KLSM6IGdpdGs6MTE0MTMKLW1zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKLW1zZ3N0ciAiRmFyYmVuOiBLbGlja2VuIHp1bSBXw6RobGVuIgotCi0jOiBnaXRrOjExNDE2Ci1tc2dpZCAiSW50ZXJmYWNlIgotbXNnc3RyICJCZW51dHplcm9iZXJmbMOkY2hlIgotCi0jOiBnaXRrOjExNDE3Ci1tc2dpZCAiaW50ZXJmYWNlIgotbXNnc3RyICJCZW51dHplcm9iZXJmbMOkY2hlIgotCi0jOiBnaXRrOjExNDIwCi1tc2dpZCAiQmFja2dyb3VuZCIKLW1zZ3N0ciAiSGludGVyZ3J1bmQiCi0KLSM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQotbXNnaWQgImJhY2tncm91bmQiCi1tc2dzdHIgIkhpbnRlcmdydW5kIgotCi0jOiBnaXRrOjExNDI0Ci1tc2dpZCAiRm9yZWdyb3VuZCIKLW1zZ3N0ciAiVm9yZGVyZ3J1bmQiCi0KLSM6IGdpdGs6MTE0MjUKLW1zZ2lkICJmb3JlZ3JvdW5kIgotbXNnc3RyICJWb3JkZXJncnVuZCIKLQotIzogZ2l0azoxMTQyOAotbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKLW1zZ3N0ciAiVmVyZ2xlaWNoOiBBbHRlIFplaWxlbiIKLQotIzogZ2l0azoxMTQyOQotbXNnaWQgImRpZmYgb2xkIGxpbmVzIgotbXNnc3RyICJWZXJnbGVpY2ggLSBBbHRlIFplaWxlbiIKLQotIzogZ2l0azoxMTQzMwotbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKLW1zZ3N0ciAiVmVyZ2xlaWNoOiBOZXVlIFplaWxlbiIKLQotIzogZ2l0azoxMTQzNAotbXNnaWQgImRpZmYgbmV3IGxpbmVzIgotbXNnc3RyICJWZXJnbGVpY2ggLSBOZXVlIFplaWxlbiIKLQotIzogZ2l0azoxMTQzOAotbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgotbXNnc3RyICJWZXJnbGVpY2g6IMOEbmRlcnVuZ3N0aXRlbCIKLQotIzogZ2l0azoxMTQ0MAotbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCi1tc2dzdHIgIlZlcmdsZWljaCAtIMOEbmRlcnVuZ3N0aXRlbCIKLQotIzogZ2l0azoxMTQ0NAotbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgotbXNnc3RyICJIaW50ZXJncnVuZCBmw7xyIG1hcmtpZXJ0ZSBaZWlsZSIKLQotIzogZ2l0azoxMTQ0NgotbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCi1tc2dzdHIgIkhpbnRlcmdydW5kIGbDvHIgbWFya2llcnRlIFplaWxlIgotCi0jOiBnaXRrOjExNDUwCi1tc2dpZCAiU2VsZWN0IGJnIgotbXNnc3RyICJIaW50ZXJncnVuZGZhcmJlIGF1c3fDpGhsZW4iCi0KLSM6IGdpdGs6MTE0NTkKLW1zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgotbXNnc3RyICJTY2hyaWZ0YXJ0OiBLbGlja2VuIHp1bSBXw6RobGVuIgotCi0jOiBnaXRrOjExNDYxCi1tc2dpZCAiTWFpbiBmb250IgotbXNnc3RyICJQcm9ncmFtbXNjaHJpZnRhcnQiCi0KLSM6IGdpdGs6MTE0NjIKLW1zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKLW1zZ3N0ciAiU2NocmlmdGFydCBmw7xyIFZlcmdsZWljaCIKLQotIzogZ2l0azoxMTQ2MwotbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCi1tc2dzdHIgIkJlc2NocmlmdHVuZ2VuIgotCi0jOiBnaXRrOjExNDg1Ci1tc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKLW1zZ3N0ciAiR2l0ay1FaW5zdGVsbHVuZ2VuIgotCi0jOiBnaXRrOjExNDk0Ci0jLCBmdXp6eQotbXNnaWQgIkdlbmVyYWwiCi1tc2dzdHIgIkVyemV1Z2VuIgotCi0jOiBnaXRrOjExNDk1Ci1tc2dpZCAiQ29sb3JzIgotbXNnc3RyICIiCi0KLSM6IGdpdGs6MTE0OTYKLW1zZ2lkICJGb250cyIKLW1zZ3N0ciAiIgotCi0jOiBnaXRrOjExNTQ2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKLW1zZ3N0ciAiR2l0azogRmFyYmUgd8OkaGxlbiBmw7xyICVzIgotCi0jOiBnaXRrOjEyMDU5CisjOiBidWlsdGluL25vdGVzLmM6NzY4CiBtc2dpZCAiIgotIlNvcnJ5LCBnaXRrIGNhbm5vdCBydW4gd2l0aCB0aGlzIHZlcnNpb24gb2YgVGNsL1RrLlxuIgotIiBHaXRrIHJlcXVpcmVzIGF0IGxlYXN0IFRjbC9UayA4LjQuIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKIG1zZ3N0ciAiIgorImzDtnN0IEtvbmZsaWt0ZSBiZWkgTm90aXplbiBtaXQgZGVyIGFuZ2VnZWJlbmVuIFN0cmF0ZWdpZSBhdWYgKG1hbnVhbC9vdXJzLyIKKyJ0aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiCiAKLSM6IGdpdGs6MTIyNjkKLW1zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgotbXNnc3RyICJLZWluIEdpdC1Qcm9qZWt0YXJjaGl2IGdlZnVuZGVuLiIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzAKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJuaWNodCB6dXNhbW1lbmdlZsO8aHJ0ZSBOb3RpemVuIGVpbnRyYWdlbiIKIAotIzogZ2l0azoxMjMxNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKLW1zZ3N0ciAiTWVocmRldXRpZ2UgQW5nYWJlIMK7JXPCqzogU293b2hsIFZlcnNpb24gYWxzIGF1Y2ggRGF0ZWluYW1lIGV4aXN0aWVydC4iCisjOiBidWlsdGluL25vdGVzLmM6NzcyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiIgorIk1lcmdlIHZvbiBOb3RpemVuIGFic2NobGllw59lbiwgaW4gZGVtIG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIE5vdGl6ZW4gIgorImNvbW1pdHRldCB3ZXJkZW4iCiAKLSM6IGdpdGs6MTIzMjgKLW1zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgotbXNnc3RyICJGYWxzY2hlIEtvbW1hbmRvemVpbGVuLVBhcmFtZXRlciBmw7xyIGdpdGs6IgorIzogYnVpbHRpbi9ub3Rlcy5jOjc3NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIktvbmZsaWt0YXVmbMO2c3VuZyBiZWltIE1lcmdlIHZvbiBOb3RpemVuIGFiYnJlY2hlbiIKIAotI34gbXNnaWQgIm1jIgotI34gbXNnc3RyICJtYyIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAiTWVyZ2Ugdm9uIE5vdGl6ZW4gYWJicmVjaGVuIgogCi0jfiBtc2dpZCAibmV4dCIKLSN+IG1zZ3N0ciAibsOkY2hzdGUiCisjOiBidWlsdGluL25vdGVzLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICJFaW4gTWVyZ2Ugdm9uIE5vdGl6ZW4gbmFjaCAlcyBpc3QgYmVyZWl0cyBpbSBHYW5nZSBiZWkgJXMiCiAKLSN+IG1zZ2lkICJwcmV2IgotI34gbXNnc3RyICJ2b3JpZ2UiCisjOiBidWlsdGluL25vdGVzLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICJPYmpla3QgJXMgaGF0IGtlaW5lIE5vdGl6XG4iCiAKLSN+IG1zZ2lkICJDRGF0ZSIKLSN+IG1zZ3N0ciAiRWludHJhZ2VkYXR1bSIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OTIKK21zZ2lkICJhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgbm90ZSBpcyBub3QgYW4gZXJyb3IiCittc2dzdHIgImRlciBWZXJzdWNoLCBlaW5lIG5pY2h0IGV4aXN0aWVyZW5kZSBOb3RpeiB6dSBsw7ZzY2hlbiwgaXN0IGtlaW4gRmVobGVyIgogCi0jfiBtc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKLSN+IG1zZ3N0ciAiR2l0LVZlcnplaWNobmlzIMK7JXPCqyB3dXJkZSBuaWNodCBnZWZ1bmRlbi4iCisjOiBidWlsdGluL25vdGVzLmM6ODk1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIk9iamVrdG5hbWVuIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3NgorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAiTm90aXotUmVmZXJlbnoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NzcKK21zZ2lkICJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiTm90aXplbiB2b24gPE5vdGl6LVJlZmVyZW56PiB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDEyIGJ1aWx0aW4vcmVtb3RlLmM6MTU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJVbmJla2FubnRlcyBVbnRlcmtvbW1hbmRvOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOAorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3B0aW9ucz4uLi5dIFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPE9wdGlvbmVuPi4uLl0gWzwgPFJlZmVyZW56bGlzdGU+IHwgPCAiCisiPE9iamVrdGxpc3RlPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wdGlvbnM+Li4uXSA8YmFzZS1uYW1lPiBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxPcHRpb25lbj4uLi5dIDxCYXNpcy1OYW1lPiBbPCA8UmVmZXJlbnpsaXN0ZT4gfCA8ICIKKyI8T2JqZWt0bGlzdGU+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJGZWhsZXIgYmVpbSBLb21wcmltaWVyZW4gKCVkKSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3NzEKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgIlNjaHJlaWJlIE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTAxMQorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICIiCisiRGVha3RpdmllcmUgU2NocmVpYmVuIGRlcyBCaXRtYXAtSW5kZXgsIGRhIGVpbmlnZSBPYmpla3RlIG5pY2h0IGluXG4iCisiZWluZSBQYWNrLURhdGVpIGdlc2NocmllYmVuIHd1cmRlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTcxCittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiS29tcHJpbWllcmUgT2JqZWt0ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgIk5pY2h0IHVudGVyc3TDvHR6dGUgSW5kZXgtVmVyc2lvbiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2UgSW5kZXgtVmVyc2lvbiAnJXMnIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDIKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAia2VpbmUgRm9ydHNjaHJpdHRzYW56ZWlnZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjA0Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAiRm9ydHNjaHJpdHRzYW56ZWlnZSBhbnplaWdlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjA2Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgIiIKKyJGb3JzY2hyaXR0c2FuemVpZ2Ugd8OkaHJlbmQgZGVyIFBoYXNlIGRlcyBTY2hyZWliZW5zIGRlciBPYmpla3RlIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDkKK21zZ2lkICJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iCittc2dzdHIgIsOkaG5saWNoIHp1IC0tYWxsLXByb2dyZXNzIHdlbm4gRm9ydHNjaHJpdHRzYW56ZWlnZSBkYXJzdGVsbHQgd2lyZCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjEwCittc2dpZCAidmVyc2lvblssb2Zmc2V0XSIKK21zZ3N0ciAidmVyc2lvblssb2Zmc2V0XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjExCittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAiIgorImRpZSBJbmRleC1EYXRlaSBkZXMgUGFrZXRlcyBpbiBkZXIgYW5nZWdlYmVuZW4gSW5kZXhmb3JtYXQtVmVyc2lvbiBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgIm1heGltYWxlIEdyw7bDn2UgZsO8ciBqZWRlIGF1c2dlZ2ViZW5lIFBha2V0ZGF0ZWkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxNgorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiZ2VsaWVoZW5lIE9iamVrdGUgdm9uIGFsdGVybmF0aXZlbSBPYmpla3RzcGVpY2hlciBpZ25vcmllcmVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTgKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgImdlcGFja3RlIE9iamVrdGUgaWdub3JpZXJlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjIwCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAiUGFrZXRmZW5zdGVyIGR1cmNoIE9iamVrdGUgYmVncmVuemVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjIKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICIiCisiUGFrZXRmZW5zdGVyLCB6dXPDpHR6bGljaCB6dXIgT2JqZWt0YmVncmVuenVuZywgZHVyY2ggU3BlaWNoZXIgYmVncmVuemVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjQKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAiIgorIm1heGltYWxlIEzDpG5nZSBkZXIgZXJsYXVidGVuIERpZmZlcmVuenZlcmtldHR1bmcgaW0gcmVzdWx0aWVyZW5kZW4gUGFrZXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyNgorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAiZXhpc3RpZXJlbmRlIFVudGVyc2NoaWVkZSB3aWVkZXJ2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyOAorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgImV4aXN0aWVyZW5kZSBPYmpla3RlIHdpZWRlcnZlcndlbmRlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjMwCittc2dpZCAidXNlIE9GU19ERUxUQSBvYmplY3RzIgorbXNnc3RyICJPRlNfREVMVEEgT2JqZWt0ZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzMgorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgIiIKKyJUaHJlYWRzIGJlaSBkZXIgU3VjaGUgbmFjaCBkZW4gYmVzdGVuIMOcYmVyZWluc3RpbW11bmdlbiBiZWkgVW50ZXJzY2hpZWRlbiAiCisidmVyd2VuZGVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzQKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICJrZWluZSBsZWVyZW4gUGFrZXRlIGVyemV1Z2VuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzYKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJBcmd1bWVudGUgYmV6w7xnbGljaCBDb21taXRzIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjM4Cittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgImRpZSBPYmpla3RlIHp1IHNvbGNoZW4sIGRpZSBub2NoIG5pY2h0IGdlcGFja3Qgd3VyZGVuLCBiZWdyZW56ZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0MQorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSBhbnkgcmVmZXJlbmNlIgorbXNnc3RyICJPYmpla3RlIGVpbnNjaGxpZcOfZW4sIGRpZSB2b24gamVkZXIgUmVmZXJlbnogZXJyZWljaGJhciBzaW5kIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDQKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgIiIKKyJPYmpla3RlIGVpbnNjaGxpZcOfZW4sIGRpZSB2b24gRWludHLDpGdlbiBkZXMgUmVmbG9ncyByZWZlcmVuemllcnQgd2VyZGVuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhlIGluZGV4IgorbXNnc3RyICJPYmpla3RlIGVpbnNjaGxpZcOfZW4sIGRpZSB2b20gSW5kZXggcmVmZXJlbnppZXJ0IHdlcmRlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjUwCittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICJQYWtldCBpbiBkaWUgU3RhbmRhcmQtQXVzZ2FiZSBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1MgorbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAiVGFnLU9iamVrdGUgZWluc2NobGllw59lbiwgZGllIGF1ZiBnZXBhY2t0ZSBPYmpla3RlIHJlZmVyZW56aWVyZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1NAorbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAibmljaHQgZXJyZWljaGJhcmUgT2JqZWt0ZSBiZWhhbHRlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU1IHBhcnNlLW9wdGlvbnMuaDoxNDIKK21zZ2lkICJ0aW1lIgorbXNnc3RyICJaZWl0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTYKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAibmljaHQgZXJyZWljaGJhcmUgT2JqZWt0ZSBlbnRwYWNrZW4sIGRpZSBuZXVlciBhbHMgPFplaXQ+IHNpbmQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICJkw7xubmVyZSBQYWtldGUgZXJ6ZXVnZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2MQorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICIiCisiUGFrZXRlIGdlZWlnbmV0IGbDvHIgQWJob2x1bmcgbWl0IHVudm9sbHN0w6RuZGlnZXIgSGlzdG9yaWUgKHNoYWxsb3cpIGVyemV1Z2VuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjMKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICJQYWtldGUgaWdub3JpZXJlbiwgZGllIC5rZWVwIERhdGVpZW4gaGFiZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2NQorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIktvbXByaW1pZXJ1bmdzZ3JhZCBmw7xyIFBha2V0aWVydW5nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjcKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAia2VpbmUga8O8bnN0bGljaGVuIFZvcmfDpG5nZXItQ29tbWl0cyAoXCJncmFmdHNcIikgdmVyYmVyZ2VuIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjkKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKyJCaXRtYXAtSW5kZXggKGZhbGxzIHZlcmbDvGdiYXIpIHp1ciBPcHRpbWllcnVuZyBkZXIgT2JqZWt0esOkaGx1bmcgYmVudXR6ZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY3MQorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgIkJpdG1hcC1JbmRleCB6dXNhbW1lbiBtaXQgUGFjay1JbmRleCBzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc2MgorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIlrDpGhsZSBPYmpla3RlIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjYKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFs8T3B0aW9uZW4+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNAorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAiYWxsZXMgcGFja2VuIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE1Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgImxvc2UgUmVmZXJlbnplbiBlbnRmZXJuZW4gKFN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDAKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAiTMO2c2NoZSBkb3BwZWx0ZSBPYmpla3RlIgorCisjOiBidWlsdGluL3BydW5lLmM6MTEKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tZXhwaXJlIDxaZWl0Pl0gWy0tXSBbPGhlYWQ+Li4uXSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwNSBidWlsdGluL3dvcmt0cmVlLmM6MTIxCittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICJuaWNodCBsw7ZzY2hlbiwgbnVyIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3BydW5lLmM6MTA2IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjIKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgImdlbMO2c2NodGUgT2JqZWt0ZSBtZWxkZW4iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMDkgYnVpbHRpbi93b3JrdHJlZS5jOjEyNAorbXNnaWQgImV4cGlyZSBvYmplY3RzIG9sZGVyIHRoYW4gPHRpbWU+IgorbXNnc3RyICJPYmpla3RlIMOkbHRlciBhbHMgPFplaXQ+IHZlcmZhbGxlbiBsYXNzZW4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY5Cittc2dpZCAiZ2l0IHB1bGwgW29wdGlvbnNdIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPE9wdGlvbmVuPl0gWzxSZXBvc2l0b3J5PiBbPFJlZnNwZWM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjExMworbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICJPcHRpb25lbiBiZXpvZ2VuIGF1ZiBNZXJnZSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTE2Cittc2dpZCAiaW5jb3Jwb3JhdGUgY2hhbmdlcyBieSByZWJhc2luZyByYXRoZXIgdGhhbiBtZXJnaW5nIgorbXNnc3RyICJJbnRlZ3JhdGlvbiB2b24gw4RuZGVydW5nZW4gZHVyY2ggUmViYXNlIHN0YXR0IE1lcmdlIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDAgYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgIlZvcnNwdWxlbiBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQ2Cittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICJkZW4gZ2VuYW5udGVuIENvbW1pdCBhdWYgZWluZSBnw7xsdGlnZSBHUEctU2lnbmF0dXIgw7xiZXJwcsO8ZmVuIgorCisjOiBidWlsdGluL3B1bGwuYzoxNjAKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIk9wdGlvbmVuIGJlem9nZW4gYXVmIEZldGNoIgorCisjOiBidWlsdGluL3B1bGwuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIFdlcnQgZsO8ciBwdWxsLmZmOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6MzUyCittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiS2FubiBcInB1bGxcIiBtaXQgXCJyZWJhc2VcIiBuaWNodCBhdXNmw7xocmVuOiBTaWUgaGFiZW4gw4RuZGVydW5nZW4sIGRpZSAiCisibmljaHQgenVtIENvbW1pdCB2b3JnZW1lcmt0IHNpbmQuIgorCisjOiBidWlsdGluL3B1bGwuYzozNTgKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIlp1c8OkdHpsaWNoIGJlaW5oYWx0ZXQgZGllIFN0YWdpbmctQXJlYSBuaWNodCBjb21taXR0ZXRlIMOEbmRlcnVuZ2VuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6MzYwCittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJLYW5uIFwicHVsbFwiIG1pdCBcInJlYmFzZVwiIG5pY2h0IGF1c2bDvGhyZW46IERpZSBTdGFnaW5nLUFyZWEgYmVpbmhhbHRldCAiCisibmljaHQgY29tbWl0dGV0ZSDDhG5kZXJ1bmdlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNgorbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJFcyBnaWJ0IGtlaW5lbiBLYW5kaWRhdGVuIGbDvHIgUmViYXNlIGlubmVyaGFsYiBkZXIgUmVmZXJlbnplbiwgZGllIGViZW4gIgorImFuZ2Vmb3JkZXJ0IHd1cmRlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICIiCisiRXMgZ2lidCBrZWluZSBLYW5kaWRhdGVuIGbDvHIgTWVyZ2UgaW5uZXJoYWxiIGRlciBSZWZlcmVuemVuLCBkaWUgZWJlbiAiCisiYW5nZWZvcmRlcnQgd3VyZGVuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5Cittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorIkltIEFsbGdlbWVpbmVuIGJlZGV1dGV0IGRhcywgZGFzcyBTaWUgZWluZW4gUmVmc3BlYyBtaXQgV2lsZGNhcmRzIGFuZ2VnZWJlblxuIgorImhhYmVuLCBkZXIgYXVmIGRlciBHZWdlbnNlaXRlIG1pdCBrZWluZW4gUmVmZXJlbnplbiDDvGJlcmVpbnN0aW1tdC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisiU2llIGbDvGhydGVuIFwicHVsbFwiIHZvbiBSZW1vdGUtUmVwb3NpdG9yeSAnJXMnIGF1cywgb2huZSBlaW5lblxuIgorIkJyYW5jaCBhbnp1Z2ViZW4uIERhIGRhcyBuaWNodCBkYXMga29uZmlndXJpZXJ0ZSBTdGFuZGFyZC1SZW1vdGUtXG4iCisiUmVwb3NpdG9yeSBmw7xyIGRlbiBha3R1ZWxsZW4gQnJhbmNoIGlzdCwgbcO8c3NlbiBTaWUgZWluZW4gQnJhbmNoIGF1ZlxuIgorImRlciBLb21tYW5kb3plaWxlIGFuZ2ViZW4uIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDcKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICJJbSBNb21lbnQgYXVmIGtlaW5lbSBCcmFuY2guIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDkgYnVpbHRpbi9wdWxsLmM6NDY0Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAiIgorIkJpdHRlIGdlYmVuIFNpZSBkZW4gQnJhbmNoIGFuLCBnZWdlbiB3ZWxjaGVuIFNpZSBcInJlYmFzZVwiIGF1c2bDvGhyZW4gIgorIm3DtmNodGVuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUxIGJ1aWx0aW4vcHVsbC5jOjQ2NgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAiQml0dGUgZ2ViZW4gU2llIGRlbiBCcmFuY2ggYW4sIHdlbGNoZW4gU2llIHp1c2FtbWVuZsO8aHJlbiBtw7ZjaHRlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MiBidWlsdGluL3B1bGwuYzo0NjcKK21zZ2lkICJTZWUgZ2l0LXB1bGwoMSkgZm9yIGRldGFpbHMuIgorbXNnc3RyICJTaWVoZSBnaXQtcHVsbCgxKSBmw7xyIHdlaXRlcmUgRGV0YWlscy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2MgorbXNnaWQgIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJFcyBnaWJ0IGtlaW5lIFRyYWNraW5nLUluZm9ybWF0aW9uZW4gZsO8ciBkZW4gYWt0dWVsbGVuIEJyYW5jaC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2V0IHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGlzIGJyYW5jaCB5b3UgY2FuIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMvPGJyYW5jaD4gJXNcbiIKK21zZ3N0ciAiIgorIldlbm4gU2llIFRyYWNraW5nLUluZm9ybWF0aW9uZW4gZsO8ciBkaWVzZW4gQnJhbmNoIHNldHplbiBtw7ZjaHRlbiwga8O2bm5lbiAiCisiU2llXG4iCisiZGllcyB0dW4gbWl0OlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxCcmFuY2g+ICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBjb25maWd1cmF0aW9uIHNwZWNpZmllcyB0byBtZXJnZSB3aXRoIHRoZSByZWYgJyVzJ1xuIgorImZyb20gdGhlIHJlbW90ZSwgYnV0IG5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIklocmUgS29uZmlndXJhdGlvbiBnaWJ0IGFuLCBkZW4gTWVyZ2UgbWl0IFJlZmVyZW56ICclcydcbiIKKyJkZXMgUmVtb3RlLVJlcG9zaXRvcmllcyBkdXJjaHp1ZsO8aHJlbiwgYWJlciBkaWVzZSBSZWZlcmVuelxuIgorInd1cmRlIG5pY2h0IGFuZ2Vmb3JkZXJ0LiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODMwCittc2dpZCAiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorIkFrdHVhbGlzaWVyZSBlaW5lbiB1bmdlYm9yZW5lbiBCcmFuY2ggbWl0IMOEbmRlcnVuZ2VuLCBkaWUgenVtIENvbW1pdCAiCisidm9yZ2VtZXJrdCBzaW5kLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorIlwiZmV0Y2hcIiBha3R1YWxpc2llcnRlIGRpZSBTcGl0emUgZGVzIGFrdHVlbGxlbiBCcmFuY2hlcy5cbiIKKyJTcHVsZSBJaHIgQXJiZWl0c3ZlcnplaWNobmlzIHZvbiBDb21taXQgJXMgdm9yLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIkFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb21cbiIKKyIkIGdpdCBkaWZmICVzXG4iCisib3V0cHV0LCBydW5cbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIkthbm4gQXJiZWl0c3ZlcnplaWNobmlzIG5pY2h0IHZvcnNwdWxlbi5cbiIKKyJOYWNoZGVtIFNpZSBzaWNoZXJnZXN0ZWxsdCBoYWJlbiwgYWxsZXMgU2Now7x0emVuc3dlcnRlIGRlciBBdXNnYWJlIHZvblxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJnZXNwZWljaGVydCB6dSBoYWJlbi4gRsO8aHJlbiBTaWVcbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ6dXIgV2llZGVyaGVyc3RlbGx1bmcgYXVzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODc5Cittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIkthbm4gbmljaHQgbWVocmVyZSBCcmFuY2hlcyBpbiBlaW5lbiBsZWVyZW4gQnJhbmNoIHp1c2FtbWVuZsO8aHJlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg4MworbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iCittc2dzdHIgIkthbm4gUmViYXNlIG5pY2h0IGF1ZiBtZWhyZXJlIEJyYW5jaGVzIGF1c2bDvGhyZW4uIgorCisjOiBidWlsdGluL3B1c2guYzoxNQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBbPE9wdGlvbmVuPl0gWzxSZXBvc2l0b3J5PiBbPFJlZnNwZWM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjg2Cittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJLdXJ6c2NocmlmdCBmw7xyIFRhZyBvaG5lIDxUYWc+IgorCisjOiBidWlsdGluL3B1c2guYzo5NgorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tZGVsZXRlIGFremVwdGllcnQgbnVyIHJlaW5lIFJlZmVyZW56bmFtZW4gYWxzIFppZWwuIgorCisjOiBidWlsdGluL3B1c2guYzoxNDAKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisiVW0gZWluZSBWYXJpYW50ZSBwZXJtYW5lbnQgenUgdmVyd2VuZGVuLCBzaWVoZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwICIKKyJjb25maWcnLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkRlciBOYW1lIGRlcyBVcHN0cmVhbS1CcmFuY2hlcyBzdGltbXQgbmljaHQgbWl0IGRlbSBOYW1lbiBJaHJlc1xuIgorImFrdHVlbGxlbiBCcmFuY2hlcyDDvGJlcmVpbi4gVW0gYXVmIGRlbiBVcHN0cmVhbS1CcmFuY2ggaW4gZGVtIFJlbW90ZS1cbiIKKyJSZXBvc2l0b3J5IHp1IHZlcnNlbmRlbiwgYmVudXR6ZW4gU2llOlxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVW0gYXVmIGRlbiBCcmFuY2ggbWl0IGRlbSBzZWxiZW4gTmFtZW4gaW0gUmVtb3RlLVJlcG9zaXRvcnkgenUgdmVyc2VuZGVuLFxuIgorImJlbnV0emVuIFNpZTpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIlNpZSBiZWZpbmRlbiBzaWNoIGltIE1vbWVudCBhdWYga2VpbmVtIEJyYW5jaC5cbiIKKyJVbSBkaWUgSGlzdG9yaWUsIGbDvGhyZW5kIHp1bSBha3R1ZWxsZW4gKGxvc2dlbMO2c3RlciBIRUFEKVxuIgorIlN0YXR1cyB6dSB2ZXJzZW5kZW4sIGJlbnV0emVuIFNpZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxOYW1lLWRlcy1SZW1vdGUtQnJhbmNoZXM+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorIkRlciBha3R1ZWxsZSBCcmFuY2ggJXMgaGF0IGtlaW5lbiBVcHN0cmVhbS1CcmFuY2guXG4iCisiVW0gZGVuIGFrdHVlbGxlbiBCcmFuY2ggenUgdmVyc2VuZGVuIHVuZCBkZW4gUmVtb3RlLUJyYW5jaFxuIgorImFscyBVcHN0cmVhbS1CcmFuY2ggenUgc2V0emVuLCBiZW51dHplbiBTaWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICIiCisiRGVyIGFrdHVlbGxlIEJyYW5jaCAlcyBoYXQgbWVocmVyZSBVcHN0cmVhbS1CcmFuY2hlcywgXCJwdXNoXCIgdmVyd2VpZ2VydC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiU2llIHZlcnNlbmRlbiBuYWNoICclcycsIHdlbGNoZXMga2VpbiBVcHN0cmVhbS1SZXBvc2l0b3J5IElocmVzIGFrdHVlbGxlblxuIgorIkJyYW5jaGVzICclcycgaXN0LCBvaG5lIGFuenVnZWJlbiwgd2FzIHZlcnNlbmRldCB3ZXJkZW4gc29sbCwgdW0gd2VsY2hlblxuIgorIlJlbW90ZS1CcmFuY2ggenUgYWt0dWFsaXNpZXJlbi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwNgorbXNnaWQgIiIKKyJwdXNoLmRlZmF1bHQgaXMgdW5zZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSBoYXMgY2hhbmdlZCBpblxuIgorIkdpdCAyLjAgZnJvbSAnbWF0Y2hpbmcnIHRvICdzaW1wbGUnLiBUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZVxuIgorImFuZCBtYWludGFpbiB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3IsIHVzZTpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igbm93LCB1c2U6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyJcbiIKKyJXaGVuIHB1c2guZGVmYXVsdCBpcyBzZXQgdG8gJ21hdGNoaW5nJywgZ2l0IHdpbGwgcHVzaCBsb2NhbCBicmFuY2hlc1xuIgorInRvIHRoZSByZW1vdGUgYnJhbmNoZXMgdGhhdCBhbHJlYWR5IGV4aXN0IHdpdGggdGhlIHNhbWUgbmFtZS5cbiIKKyJcbiIKKyJTaW5jZSBHaXQgMi4wLCBHaXQgZGVmYXVsdHMgdG8gdGhlIG1vcmUgY29uc2VydmF0aXZlICdzaW1wbGUnXG4iCisiYmVoYXZpb3IsIHdoaWNoIG9ubHkgcHVzaGVzIHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgY29ycmVzcG9uZGluZ1xuIgorInJlbW90ZSBicmFuY2ggdGhhdCAnZ2l0IHB1bGwnIHVzZXMgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJTZWUgJ2dpdCBoZWxwIGNvbmZpZycgYW5kIHNlYXJjaCBmb3IgJ3B1c2guZGVmYXVsdCcgZm9yIGZ1cnRoZXIgIgorImluZm9ybWF0aW9uLlxuIgorIih0aGUgJ3NpbXBsZScgbW9kZSB3YXMgaW50cm9kdWNlZCBpbiBHaXQgMS43LjExLiBVc2UgdGhlIHNpbWlsYXIgbW9kZVxuIgorIidjdXJyZW50JyBpbnN0ZWFkIG9mICdzaW1wbGUnIGlmIHlvdSBzb21ldGltZXMgdXNlIG9sZGVyIHZlcnNpb25zIG9mIEdpdCkiCittc2dzdHIgIiIKKyIncHVzaC5kZWZhdWx0JyBpc3QgbmljaHQgZ2VzZXR6dDsgZGVyIGltcGxpeml0IGdlc2V0enRlIFdlcnRcbiIKKyJ3dXJkZSBpbiBHaXQgMi4wIHZvbiAnbWF0Y2hpbmcnIG5hY2ggJ3NpbXBsZScgZ2XDpG5kZXJ0LiBVbSBkaWVzZSBNZWxkdW5nIHp1XG4iCisidW50ZXJkcsO8Y2tlbiB1bmQgZGFzIGFrdHVlbGxlIFZlcmhhbHRlbiBuYWNoIMOEbmRlcnVuZyBkZXMgU3RhbmRhcmR3ZXJ0ZXNcbiIKKyJiZWl6dWJlaGFsdGVuLCBiZW51dHplbiBTaWU6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBtYXRjaGluZ1xuIgorIlxuIgorIlVtIGRpZXNlIE1lbGR1bmcgenUgdW50ZXJkcsO8Y2tlbiB1bmQgZGFzIG5ldWUgVmVyaGFsdGVuIGpldHp0IHp1IMO8YmVybmVobWVuLCAiCisiYmVudXR6ZW4gU2llOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisiXG4iCisiV2VubiAncHVzaC5kZWZhdWx0JyBhdWYgZGVuIFdlcnQgJ21hdGNoaW5nJyBnZXNldHp0IGlzdCwgd2VyZGVuIGxva2FsZVxuIgorIkJyYW5jaGVzIHp1IGRlbiBSZW1vdGUtQnJhbmNoZXMgbWl0IGRlbiBzZWxiZW4gTmFtZW4gdmVyc2VuZGV0LlxuIgorIlxuIgorIkluIEdpdCAyLjAgd3VyZGUgZGFzIFN0YW5kYXJkdmVyaGFsdGVuIHp1ICdzaW1wbGUnIGdlw6RuZGVydC4gSGllcmJlaSB3aXJkXG4iCisiZGVyIGFrdHVlbGxlIEJyYW5jaCB6dSBkZW0gZW50c3ByZWNoZW5kZW4gUmVtb3RlLUJyYW5jaCB2ZXJzZW5kZXQsIGRlblxuIgorIidnaXQgcHVsbCcgenVyIEFrdHVhbGlzaWVydW5nIGRlcyBha3R1ZWxsZW4gQnJhbmNoZXMgdmVyd2VuZGV0LlxuIgorIlxuIgorIkbDvGhyZW4gU2llICdnaXQgaGVscCBjb25maWcnIGF1cyB1bmQgc3VjaGVuIFNpZSBuYWNoICdwdXNoLmRlZmF1bHQnIGbDvHJcbiIKKyJ3ZWl0ZXJlIEluZm9ybWF0aW9uZW4uXG4iCisiKERlciBNb2R1cyAnc2ltcGxlJyB3dXJkZSBpbiBHaXQgMS43LjExIGVpbmdlZsO8aHJ0LiBCZW51dHplbiBTaWUgZGVuICIKKyLDpGhubGljaGVuXG4iCisiTW9kdXMgJ2N1cnJlbnQnIGFuc3RhdHQgJ3NpbXBsZScsIGZhbGxzIFNpZSBnZWxlZ2VudGxpY2ggw6RsdGVyZSBWZXJzaW9uZW4gIgorInZvblxuIgorIkdpdCBiZW51dHplbi4pIgorCisjOiBidWlsdGluL3B1c2guYzoyNzMKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorIlNpZSBoYWJlbiBrZWluZSBSZWZzcGVjIGbDvHIgXCJwdXNoXCIgYW5nZWdlYmVuLCB1bmQgcHVzaC5kZWZhdWx0IGlzdCAiCisiXCJub3RoaW5nXCIuIgorCisjOiBidWlsdGluL3B1c2guYzoyODAKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJBa3R1YWxpc2llcnVuZ2VuIHd1cmRlbiB6dXLDvGNrZ2V3aWVzZW4sIHdlaWwgZGllIFNwaXR6ZSBJaHJlcyBha3R1ZWxsZW5cbiIKKyJCcmFuY2hlcyBoaW50ZXIgc2VpbmVtIGV4dGVybmVuIEdlZ2Vuc3TDvGNrIHp1csO8Y2tnZWZhbGxlbiBpc3QuIEbDvGhyZW4gU2llXG4iCisiZGllIGV4dGVybmVuIMOEbmRlcnVuZ2VuIHp1c2FtbWVuICh6LkIuICdnaXQgcHVsbCAuLi4nKSBiZXZvciBTaWUgXCJwdXNoXCJcbiIKKyJlcm5ldXQgYXVzZsO8aHJlbi5cbiIKKyJTaWVoZSBhdWNoIGRpZSBTZWt0aW9uICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnXG4iCisiZsO8ciB3ZWl0ZXJlIERldGFpbHMuIgorCisjOiBidWlsdGluL3B1c2guYzoyODYKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJBa3R1YWxpc2llcnVuZ2VuIHd1cmRlbiB6dXLDvGNrZ2V3aWVzZW4sIHdlaWwgZGllIFNwaXR6ZSBlaW5lcyB2ZXJzZW5kZXRlblxuIgorIkJyYW5jaGVzIGhpbnRlciBzZWluZW0gZXh0ZXJuZW4gR2VnZW5zdMO8Y2sgenVyw7xja2dlZmFsbGVuIGlzdC4gQ2hlY2tlbiBTaWVcbiIKKyJkaWVzZW4gQnJhbmNoIGF1cyB1bmQgZsO8aHJlbiBTaWUgZGllIGV4dGVybmVuIMOEbmRlcnVuZ2VuIHp1c2FtbWVuXG4iCisiKHouQi4gJ2dpdCBwdWxsIC4uLicpIGJldm9yIFNpZSBlcm5ldXQgXCJwdXNoXCIgYXVzZsO8aHJlbi5cbiIKKyJTaWVoZSBhdWNoIGRpZSBTZWt0aW9uICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnXG4iCisiZsO8ciB3ZWl0ZXJlIERldGFpbHMuIgorCisjOiBidWlsdGluL3B1c2guYzoyOTIKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlbW90ZSBjb250YWlucyB3b3JrIHRoYXQgeW91IGRvXG4iCisibm90IGhhdmUgbG9jYWxseS4gVGhpcyBpcyB1c3VhbGx5IGNhdXNlZCBieSBhbm90aGVyIHJlcG9zaXRvcnkgcHVzaGluZ1xuIgorInRvIHRoZSBzYW1lIHJlZi4gWW91IG1heSB3YW50IHRvIGZpcnN0IGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiQWt0dWFsaXNpZXJ1bmdlbiB3dXJkZW4genVyw7xja2dld2llc2VuLCB3ZWlsIGRhcyBSZW1vdGUtUmVwb3NpdG9yeSBDb21taXRzICIKKyJlbnRow6RsdCxcbiIKKyJkaWUgbG9rYWwgbmljaHQgdm9yaGFuZGVuIHNpbmQuIERhcyB3aXJkIMO8YmxpY2hlcndlaXNlIGR1cmNoIGVpbmVuIFwicHVzaFwiICIKKyJ2b25cbiIKKyJDb21taXRzIGF1ZiBkaWVzZWxiZSBSZWZlcmVueiB2b24gZWluZW0gYW5kZXJlbiBSZXBvc2l0b3J5IGF1cyB2ZXJ1cnNhY2h0LlxuIgorIlZpZWxsZWljaHQgbcO8c3NlbiBTaWUgZGllIGV4dGVybmVuIMOEbmRlcnVuZ2VuIHp1c2FtbWVuenVmw7xocmVuICh6LkIuICdnaXQgIgorInB1bGwgLi4uJylcbiIKKyJiZXZvciBTaWUgZXJuZXV0IFwicHVzaFwiIGF1c2bDvGhyZW4uXG4iCisiU2llaGUgYXVjaCBkaWUgU2VrdGlvbiAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJ1xuIgorImbDvHIgd2VpdGVyZSBEZXRhaWxzLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiIgorIkFrdHVhbGlzaWVydW5nZW4gd3VyZGVuIHp1csO8Y2tnZXdpZXNlbiwgd2VpbCBkYXMgVGFnIGJlcmVpdHNcbiIKKyJpbSBSZW1vdGUtUmVwb3NpdG9yeSBleGlzdGllcnQuIgorCisjOiBidWlsdGluL3B1c2guYzozMDIKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIlNpZSBrw7ZubmVuIGtlaW5lIFJlbW90ZS1SZWZlcmVueiBha3R1YWxpc2llcmVuLCBkaWUgYXVmIGVpbiBPYmpla3QgemVpZ3QsXG4iCisiZGFzIGtlaW4gQ29tbWl0IGlzdCwgb2RlciBlcyBhdWYgZWluIHNvbGNoZXMgT2JqZWt0IHplaWdlbiBsYXNzZW4sIG9obmVcbiIKKyJkaWUgT3B0aW9uICctLWZvcmNlJyB6dSB2ZXJ3ZW5kZW4uXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIlZlcnNlbmRlIG5hY2ggJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBwdXNoIHNvbWUgcmVmcyB0byAnJXMnIgorbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJzZW5kZW4gZWluaWdlciBSZWZlcmVuemVuIG5hY2ggJyVzJyIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgInVuZ8O8bHRpZ2VzIFJlcG9zaXRvcnkgJyVzJyIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzk2Cittc2dpZCAiIgorIk5vIGNvbmZpZ3VyZWQgcHVzaCBkZXN0aW5hdGlvbi5cbiIKKyJFaXRoZXIgc3BlY2lmeSB0aGUgVVJMIGZyb20gdGhlIGNvbW1hbmQtbGluZSBvciBjb25maWd1cmUgYSByZW1vdGUgIgorInJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgIiIKKyJLZWluIFppZWwgZsO8ciBcInB1c2hcIiBrb25maWd1cmllcnQuXG4iCisiRW50d2VkZXIgc3BlemlmaXppZXJlbiBTaWUgZGllIFVSTCB2b24gZGVyIEtvbW1hbmRvemVpbGUgb2RlciBrb25maWd1cmllcmVuICIKKyJlaW4gUmVtb3RlLVJlcG9zaXRvcnkgdW50ZXIgQmVudXR6dW5nIHZvblxuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8TmFtZT4gPFVSTD5cbiIKKyJcbiIKKyJ1bmQgZsO8aHJlbiBcInB1c2hcIiBkYW5uIHVudGVyIEJlbnV0enVuZyBkaWVzZXMgTmFtZW5zIGF1c1xuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8TmFtZT5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDExCittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1hbGwgdW5kIC0tdGFncyBzaW5kIGlua29tcGF0aWJlbC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxMgorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIkRpZSBPcHRpb24gLS1hbGwga2FubiBuaWNodCBtaXQgUmVmc3BlY3Mga29tYmluaWVydCB3ZXJkZW4uIgorCisjOiBidWlsdGluL3B1c2guYzo0MTcKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIkRpZSBPcHRpb25lbiAtLW1pcnJvciB1bmQgLS10YWdzIHNpbmQgaW5rb21wYXRpYmVsLiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDE4Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiRGllIE9wdGlvbiAtLW1pcnJvciBrYW5uIG5pY2h0IG1pdCBSZWZzcGVjcyBrb21iaW5pZXJ0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQyMworbXNnaWQgIi0tYWxsIGFuZCAtLW1pcnJvciBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJEaWUgT3B0aW9uZW4gLS1hbGwgdW5kIC0tbWlycm9yIHNpbmQgaW5rb21wYXRpYmVsLiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTM5Cittc2dpZCAicmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVwb3NpdG9yeSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAiYWxsZSBSZWZlcmVuemVuIHZlcnNlbmRlbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQxIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICJhbGxlIFJlZmVyZW56ZW4gc3BpZWdlbG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MworbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICJSZWZlcmVuemVuIGzDtnNjaGVuIgorCisjOiBidWlsdGluL3B1c2guYzo1NDQKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIlRhZ3MgdmVyc2VuZGVuIChrYW5uIG5pY2h0IG1pdCAtLWFsbCBvZGVyIC0tbWlycm9yIHZlcndlbmRldCB3ZXJkZW4pIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICJBa3R1YWxpc2llcnVuZyBlcnp3aW5nZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0OSBidWlsdGluL3NlbmQtcGFjay5jOjE3NQorbXNnaWQgInJlZm5hbWU+OjxleHBlY3QiCittc2dzdHIgIlJlZmVyZW56bmFtZT46PEVyd2FydHVuZ3N3ZXJ0IgorCisjOiBidWlsdGluL3B1c2guYzo1NTAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAiUmVmZXJlbnogbXVzcyBzaWNoIGF1ZiBkZW0gYW5nZWdlYmVuZW4gV2VydCBiZWZpbmRlbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUzCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJyZWt1cnNpdmVuIFwicHVzaFwiIHZvbiBTdWJtb2R1bGVuIHN0ZXVlcm4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NSBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgImtsZWluZXJlIFBha2V0ZSB2ZXJ3ZW5kZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NiBidWlsdGluL3B1c2guYzo1NTcgYnVpbHRpbi9zZW5kLXBhY2suYzoxNTgKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTU5Cittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgIidyZWNlaXZlIHBhY2snIFByb2dyYW1tIgorCisjOiBidWlsdGluL3B1c2guYzo1NTgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAiVXBzdHJlYW0gZsO8ciBcImdpdCBwdWxsL3N0YXR1c1wiIHNldHplbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxCittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgImxva2FsIGdlbMO2c2NodGUgUmVmZXJlbnplbiBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2MworbXNnaWQgImJ5cGFzcyBwcmUtcHVzaCBob29rIgorbXNnc3RyICJcInByZS1wdXNoIGhvb2tcIiB1bWdlaGVuIgorCisjOiBidWlsdGluL3B1c2guYzo1NjQKK21zZ2lkICJwdXNoIG1pc3NpbmcgYnV0IHJlbGV2YW50IHRhZ3MiCittc2dzdHIgImZlaGxlbmRlLCBhYmVyIHJlbGV2YW50ZSBUYWdzIHZlcnNlbmRlbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY3IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAiR1BHIHNpZ24gdGhlIHB1c2giCittc2dzdHIgInNpZ25pZXJ0IFwicHVzaFwiIG1pdCBHUEciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2OSBidWlsdGluL3NlbmQtcGFjay5jOjE3MAorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICJSZWZlcmVuemVuIGF0b21hciB2ZXJzZW5kZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3OQorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICJEaWUgT3B0aW9uIC0tZGVsZXRlIGlzdCBpbmtvbXBhdGliZWwgbWl0IC0tYWxsLCAtLW1pcnJvciB1bmQgLS10YWdzLiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTgxCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIkRpZSBPcHRpb24gLS1kZWxldGUga2FubiBudXIgbWl0IFJlZmVyZW56ZW4gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MzcKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08UHLDpGZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxEYXRlaT5dICgtLWVtcHR5IHwgPENvbW1pdC1SZWZlcmVuejE+IFs8Q29tbWl0LVJlZmVyZW56Mj4gIgorIls8Q29tbWl0LVJlZmVyZW56Mz5dXSkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTEwCittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAicmVzdWx0aWVyZW5kZW4gSW5kZXggbmFjaCA8RGF0ZWk+IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTMKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAibnVyIGRlbiBJbmRleCBsZWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE1Cittc2dpZCAiTWVyZ2luZyIKK21zZ3N0ciAiTWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE3Cittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAiZWluZW4gTWVyZ2UsIHp1c8OkdHpsaWNoIHp1bSBMZXNlbiwgYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTkKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIjMtV2VnZS1NZXJnZSwgd2VubiBrZWluIE1lcmdlIGF1ZiBEYXRlaWViZW5lIGVyZm9yZGVybGljaCBpc3QiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIxCittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAiMy1XZWdlLU1lcmdlIGJlaSBWb3JoYW5kZW5zZWluIHZvbiBoaW56dWdlZsO8Z3Rlbi9lbnRmZXJudGVuIFplaWxlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjMKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJnZW5hdSB3aWUgLW0sIGFiZXIgbmljaHQgenVzYW1tZW5nZWbDvGhydGUgRWludHLDpGdlIHZlcndlcmZlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjQKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjxVbnRlcnZlcnplaWNobmlzPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI1Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgImRhcyBWZXJ6ZWljaG5pcyBpbiBkZW4gSW5kZXggdW50ZXIgPFVudGVydmVyemVpY2huaXM+LyBsZXNlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IgorbXNnc3RyICJBcmJlaXRzdmVyemVpY2huaXMgbWl0IGRlbSBFcmdlYm5pcyBkZXMgTWVyZ2VzIGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMwCittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMxCittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICJleHBsaXppdCBpZ25vcmllcnRlIERhdGVpZW4genUgw7xiZXJzY2hyZWliZW4gZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICJkYXMgQXJiZWl0c3ZlcnplaWNobmlzIG5hY2ggZGVtIE1lcmdlIG5pY2h0IHByw7xmZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM1Cittc2dpZCAiZG9uJ3QgdXBkYXRlIHRoZSBpbmRleCBvciB0aGUgd29yayB0cmVlIgorbXNnc3RyICJ3ZWRlciBkZW4gSW5kZXgsIG5vY2ggZGFzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBha3R1YWxpc2llcmVuIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiQW53ZW5kdW5nIGRlcyBGaWx0ZXJzIGbDvHIgc3DDpHJsaWNoZXMgQXVzY2hlY2tlbiDDvGJlcnNwcmluZ2VuIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiRW50cGFja2VuIGRlciBCw6R1bWUgcHJvdG9rb2xsaWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIGlzdCBrZWluIGfDvGx0aWdlciBaZWl0c3RlbXBlbCBmw7xyICclcyciCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTQ5IGJ1aWx0aW4vcmVmbG9nLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIGlzdCBrZWluIGfDvGx0aWdlciBaZWl0c3RlbXBlbCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzCittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPEJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPE5hbWU+IDxVUkw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0IGJ1aWx0aW4vcmVtb3RlLmM6MzMKK21zZ2lkICJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW5hbWUgPGFsdD4gPG5ldT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUgYnVpbHRpbi9yZW1vdGUuYzozOAorbXNnaWQgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW1vdmUgPE5hbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2IGJ1aWx0aW4vcmVtb3RlLmM6NDMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDxOYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPEJyYW5jaD4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPE5hbWU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbLW4gfCAtLWRyeS1ydW5dIDxOYW1lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOQorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPEdydXBwZT4gfCA8UmVtb3RlPikuLi5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPE5hbWU+IDxCcmFuY2g+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIxIGJ1aWx0aW4vcmVtb3RlLmM6NjkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5hbWU+IDxuZXd1cmw+IFs8b2xkdXJsPl0iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8TmFtZT4gPG5ldWVVUkw+IFs8YWx0ZVVSTD5dIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyIGJ1aWx0aW4vcmVtb3RlLmM6NzAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPE5hbWU+IDxuZXVlVVJMPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMyBidWlsdGluL3JlbW90ZS5jOjcxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxOYW1lPiA8VVJMPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOAorbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgWzxPcHRpb25lbj5dIDxOYW1lPiA8VVJMPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0OAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPE5hbWU+IDxCcmFuY2g+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8TmFtZT4gPEJyYW5jaD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTQKK21zZ2lkICJnaXQgcmVtb3RlIHNob3cgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNob3cgWzxPcHRpb25lbj5dIDxOYW1lPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OQorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFs8T3B0aW9uZW4+XSA8TmFtZT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxPcHRpb25lbj5dIFs8R3J1cHBlPiB8IDxleHRlcm5lc1JlcG9zaXRvcnk+XS4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAiQWt0dWFsaXNpZXJlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMAorbXNnaWQgIiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgIiIKKyItLW1pcnJvciBpc3QgZ2Vmw6RocmxpY2ggdW5kIHZlcmFsdGV0OyBiaXR0ZVxuIgorIlx0IGJlbnV0emVuIFNpZSBzdGF0dGRlc3NlbiAtLW1pcnJvcj1mZXRjaCBvZGVyIC0tbWlycm9yPXB1c2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAidW5iZWthbm50ZXMgQXJndW1lbnQgZsO8ciBPcHRpb24gLS1taXJyb3I6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MworbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgImRpZSBSZW1vdGUtQnJhbmNoZXMgYW5mb3JkZXJuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgImFsbGUgVGFncyB1bmQgdmVyYnVuZGVuZSBPYmpla3RlIGJlaW0gQW5mb3JkZXJuIGltcG9ydGllcmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAib2RlciBmb3JkZXJlIGdhciBrZWluZSBad2VpZ2UgYW4gKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYwCittc2dpZCAiYnJhbmNoKGVzKSB0byB0cmFjayIKK21zZ3N0ciAiQnJhbmNoKGVzKSB6dXIgw5xiZXJuYWhtZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICJIYXVwdGJyYW5jaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjIKK21zZ2lkICJwdXNofGZldGNoIgorbXNnc3RyICJwdXNofGZldGNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICIiCisiQXVmc2V0emVuIGRlcyBSZW1vdGUtUmVwb3NpdG9yaWVzIGFscyBTcGllZ2VsLVJlcG9zaXRvcnkgZsO8ciBcInB1c2hcIiB1bmQgIgorIlwiZmV0Y2hcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICIiCisiRGllIE9wdGlvbiAtLW1pcnJvciBrYW5uIG5pY2h0IG1pdCBkZXIgQW5nYWJlIGVpbmVzIEhhdXB0YnJhbmNoZXMgdmVyd2VuZGV0ICIKKyJ3ZXJkZW4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3NworbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgIiIKKyJEaWUgQW5nYWJlIHZvbiB6dSBmb2xnZW5kZW4gQnJhbmNoZXMga2FubiBudXIgbWl0IGRlbSBBbmZvcmRlcm4gdm9uICIKKyJTcGllZ2VsYXJjaGl2ZW4gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3IGJ1aWx0aW4vcmVtb3RlLmM6NjM3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgImV4dGVybmVzIFJlcG9zaXRvcnkgJXMgZXhpc3RpZXJ0IGJlcmVpdHMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkxIGJ1aWx0aW4vcmVtb3RlLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycgaXN0IGtlaW4gZ8O8bHRpZ2VyIE5hbWUgZsO8ciBlaW4gUmVtb3RlLVJlcG9zaXRvcnkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiS29ubnRlIHN5bWJvbGlzY2hlIFJlZmVyZW56IGbDvHIgSGF1cHRicmFuY2ggdm9uICclcycgbmljaHQgZWlucmljaHRlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIktvbm50ZSBGZXRjaC1NYXAgZsO8ciBSZWZzcGVjICVzIG5pY2h0IGJla29tbWVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQzNiBidWlsdGluL3JlbW90ZS5jOjQ0NAorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIijDvGJlcmVpbnN0aW1tZW5kKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDgKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKGzDtnNjaGUpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU4OCBidWlsdGluL3JlbW90ZS5jOjU5NCBidWlsdGluL3JlbW90ZS5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcycgdG8gJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYW4gJyVzJyBhbmjDpG5nZW4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYzMCBidWlsdGluL3JlbW90ZS5jOjc2OSBidWlsdGluL3JlbW90ZS5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJXMiCittc2dzdHIgIktlaW4gc29sY2hlcyBSZW1vdGUtUmVwb3NpdG9yeTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICJLb25udGUgU2VrdGlvbiAnJXMnIGluIEtvbmZpZ3VyYXRpb24gbmljaHQgbmFjaCAnJXMnIHVtYmVuZW5uZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjUzIGJ1aWx0aW4vcmVtb3RlLmM6ODIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiS29ubnRlIFNla3Rpb24gJyVzJyBuaWNodCBhdXMgS29uZmlndXJhdGlvbiBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorIktlaW5lIEFrdHVhbGlzaWVydW5nIGRlciBuaWNodCBzdGFuZGFyZG3DpMOfaWdlbiBSZWZzcGVjIGbDvHIgXCJmZXRjaFwiXG4iCisiXHQlc1xuIgorIlx0Qml0dGUgYWt0dWFsaXNpZXJlbiBTaWUsIGZhbGxzIG5vdHdlbmRpZywgZGllIEtvbmZpZ3VyYXRpb24gbWFudWVsbC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgYW5ow6RuZ2VuLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBzZXR6ZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzA3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGVyc3RlbGxlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDcKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIkhpbndlaXM6IEVpbiBCcmFuY2ggYXXDn2VyaGFsYiBkZXIgcmVmcy9yZW1vdGVzLyBIaWVyYWNoaWUgd3VyZGUgbmljaHQgIgorImdlbMO2c2NodDtcbiIKKyJ1bSBkaWVzZW4genUgbMO2c2NoZW4sIGJlbnV0emVuIFNpZToiCittc2dzdHJbMV0gIiIKKyJIaW53ZWlzOiBFaW5pZ2UgQnJhbmNoZXMgYXXDn2VyIGRlciByZWZzL3JlbW90ZXMvIEhpZXJhcmNoaWUgd3VyZGVuIG5pY2h0ICIKKyJlbnRmZXJudDtcbiIKKyJ1bSBkaWVzZSB6dSBlbnRmZXJuZW4sIGJlbnV0emVuIFNpZToiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBuZXcgKG5leHQgZmV0Y2ggd2lsbCBzdG9yZSBpbiByZW1vdGVzLyVzKSIKK21zZ3N0ciAiIG5ldSAod2lyZCBiZWkgbsOkY2hzdGVtIFwiZmV0Y2hcIiBpbiByZW1vdGVzLyVzIGdlc3BlaWNoZXJ0KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjUKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIGdlZm9sZ3QiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI3Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiB2ZXJhbHRldCAoYmVudXR6ZW4gU2llICdnaXQgcmVtb3RlIHBydW5lJyB6dW0gTMO2c2NoZW4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyOQorbXNnaWQgIiA/Pz8iCittc2dzdHIgIiA/Pz8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIKK21zZ3N0ciAidW5nw7xsdGlnZXMgYnJhbmNoLiVzLm1lcmdlOyBrYW5uIFJlYmFzZSBuaWNodCBhdWYgPiAxIEJyYW5jaCBhdXNmw7xocmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJSZWJhc2UgYXVmIFJlbW90ZS1CcmFuY2ggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiBmw7xocnQgbWl0IFJlbW90ZS1CcmFuY2ggJXMgenVzYW1tZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgxCittc2dpZCAiICAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAgIHVuZCBtaXQgUmVtb3RlLUJyYW5jaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICJmw7xocnQgbWl0IFJlbW90ZS1CcmFuY2ggJXMgenVzYW1tZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg0Cittc2dpZCAiICAgYW5kIHdpdGggcmVtb3RlIgorbXNnc3RyICIgICB1bmQgbWl0IFJlbW90ZS1CcmFuY2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzMAorbXNnaWQgImNyZWF0ZSIKK21zZ3N0ciAiZXJzdGVsbHQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzMworbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAiZ2Vsw7ZzY2h0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzcKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICJha3R1ZWxsIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDAKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICJ2b3JzcHVsYmFyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDMKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAibG9rYWwgbmljaHQgYWt0dWVsbCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIGVyendpbmd0IFZlcnNhbmR0IG5hY2ggJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgdmVyc2VuZGV0IG5hY2ggJS0qcyAoJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyBlcnp3aW5ndCBWZXJzYW5kIG5hY2ggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIHZlcnNlbmRldCBuYWNoICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjgKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAia2VpbmUgQWJmcmFnZSB2b24gUmVtb3RlLVJlcG9zaXRvcmllcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIFJlbW90ZS1SZXBvc2l0b3J5ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCB6dW0gQWJob2xlbjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NyBidWlsdGluL3JlbW90ZS5jOjEzMDgKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKGtlaW5lIFVSTCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE2NiBidWlsdGluL3JlbW90ZS5jOjExNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBQdXNoICBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCB6dW0gVmVyc2VuZGVuOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcwIGJ1aWx0aW4vcmVtb3RlLmM6MTE3MiBidWlsdGluL3JlbW90ZS5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgSGF1cHRicmFuY2g6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiIgorIiAgSGF1cHRicmFuY2ggKGV4dGVybmVyIEhFQUQgaXN0IG1laHJkZXV0aWcsIGvDtm5udGUgZWluZXIgZGVyIGZvbGdlbmRlbiAiCisic2Vpbik6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIFJlbW90ZS1CcmFuY2g6JXMiCittc2dzdHJbMV0gIiAgUmVtb3RlLUJyYW5jaGVzOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTEgYnVpbHRpbi9yZW1vdGUuYzoxMjE4Cittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKFp1c3RhbmQgbmljaHQgYWJnZWZyYWd0KSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjAwCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAgTG9rYWxlciBCcmFuY2gga29uZmlndXJpZXJ0IGbDvHIgJ2dpdCBwdWxsJzoiCittc2dzdHJbMV0gIiAgTG9rYWxlIEJyYW5jaGVzIGtvbmZpZ3VyaWVydCBmw7xyICdnaXQgcHVsbCc6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDgKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIgIExva2FsZSBSZWZlcmVuemVuIHdlcmRlbiB2b24gJ2dpdCBwdXNoJyBnZXNwaWVnZWx0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgTG9rYWxlIFJlZmVyZW56IGtvbmZpZ3VyaWVydCBmw7xyICdnaXQgcHVzaCclczoiCittc2dzdHJbMV0gIiAgTG9rYWxlIFJlZmVyZW56ZW4ga29uZmlndXJpZXJ0IGbDvHIgJ2dpdCBwdXNoJyVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM2Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICJzZXR6dCByZWZzL3JlbW90ZXMvPE5hbWU+L0hFQUQgZ2Vtw6TDnyBkZW0gUmVtb3RlLVJlcG9zaXRvcnkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzOAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgImVudGZlcm50IHJlZnMvcmVtb3Rlcy88TmFtZT4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzCittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiS2FubiBIRUFEIGRlcyBSZW1vdGUtUmVwb3NpdG9yaWVzIG5pY2h0IGJlc3RpbW1lbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU1Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIiIKKyJNZWhyZXJlIEhhdXB0YnJhbmNoZXMgaW0gUmVtb3RlLVJlcG9zaXRvcnkuIEJpdHRlIHfDpGhsZW4gU2llIGV4cGxpeml0IGVpbmVuICIKKyJhdXMgbWl0OiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBlbnRmZXJuZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJrZWluZSBnw7xsdGlnZSBSZWZlcmVuejogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIktvbm50ZSAlcyBuaWNodCBlaW5yaWNodGVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIHdpcmQgdW5yZWZlcmVuemllcnQhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgd3VyZGUgdW5yZWZlcmVuemllcnQhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiZW50ZmVybmUgdmVyYWx0ZXRlIEJyYW5jaGVzIHZvbiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMQorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiBbd8O8cmRlIHZlcmFsdGV0ZW4gQnJhbmNoIGVudGZlcm5lbl0gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiKiBbdmVyYWx0ZXRlbiBCcmFuY2ggZW50ZmVybnRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNjkKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJlbnRmZXJuZSB2ZXJhbHRldGUgQnJhbmNoZXMgaW0gUmVtb3RlLVJlcG9zaXRvcnkgbmFjaCBcImZldGNoXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNSBidWlsdGluL3JlbW90ZS5jOjE1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiS2VpbiBzb2xjaGVzIFJlbW90ZS1SZXBvc2l0b3J5ICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ1NQorbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgIkJyYW5jaCBoaW56dWbDvGdlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDYyCittc2dpZCAibm8gcmVtb3RlIHNwZWNpZmllZCIKK21zZ3N0ciAia2VpbiBSZW1vdGUtUmVwb3NpdG9yeSBhbmdlZ2ViZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4NAorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICJVUkxzIGbDvHIgXCJwdXNoXCIgbWFuaXB1bGllcmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODYKK21zZ2lkICJhZGQgVVJMIgorbXNnc3RyICJVUkwgaGluenVmw7xnZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4OAorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICJVUkxzIGzDtnNjaGVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTUKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLS1hZGQgdW5kIC0tZGVsZXRlIGvDtm5uZW4gbmljaHQgZ2VtZWluc2FtIHZlcndlbmRldCB3ZXJkZW4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJ1bmfDvGx0aWdlcyBhbHRlcyBVUkwgRm9ybWF0OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiS2VpbmUgc29sY2hlIFVSTCBnZWZ1bmRlbjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU0NQorbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiV2VyZGUga2VpbmUgVVJMcyBlbnRmZXJuZW4sIGRpZSBuaWNodCBmw7xyIFwicHVzaFwiIGJlc3RpbW10IHNpbmQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1OQorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgImVyd2VpdGVydGUgQXVzZ2FiZW47IG11c3Mgdm9yIGVpbmVtIFVudGVya29tbWFuZG8gYW5nZWdlYmVuIHdlcmRlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNworbXNnaWQgImdpdCByZXBhY2sgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCByZXBhY2sgWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE1OQorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICJhbGxlcyBpbiBlaW5lIGVpbnppZ2UgUGFjay1EYXRlaSBwYWNrZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTYxCittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAiZ2VuYXUgd2llIC1hLCB1bmVycmVpY2hiYXJlIE9iamVrdGUgd2VyZGVuIGFiZXIgbmljaHQgZ2Vsw7ZzY2h0IgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2NAorbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAicmVkdW5kYW50ZSBQYWtldGUgZW50ZmVybmVuIHVuZCBcImdpdC1wcnVuZS1wYWNrZWRcIiBhdXNmw7xocmVuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2NgorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICItLW5vLXJldXNlLWRlbHRhIGFuIGdpdC1wYWNrLW9iamVjdHMgw7xiZXJnZWJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjgKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIi0tbm8tcmV1c2Utb2JqZWN0IGFuIGdpdC1wYWNrLW9iamVjdHMgw7xiZXJnZWJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzAKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgImdpdC11cGRhdGUtc2VydmVyLWluZm8gbmljaHQgYXVzZsO8aHJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzMKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiLS1sb2NhbCBhbiBnaXQtcGFjay1vYmplY3RzIMO8YmVyZ2ViZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc1Cittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICJCaXRtYXAtSW5kZXggc2NocmVpYmVuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3NgorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICJEYXR1bXNhbmdhYmUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc3Cittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAibWl0IC1BLCBrZWluZSBPYmpla3RlIMOkbHRlciBhbHMgZGllc2VzIERhdHVtIGzDtnNjaGVuIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3OQorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiR3LDtsOfZSBkZXMgRmVuc3RlcnMgZsO8ciBkaWUgRGVsdGEtS29tcHJlc3Npb24iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgwIGJ1aWx0aW4vcmVwYWNrLmM6MTg0Cittc2dpZCAiYnl0ZXMiCittc2dzdHIgIkJ5dGVzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4MQorbXNnaWQgInNhbWUgYXMgdGhlIGFib3ZlLCBidXQgbGltaXQgbWVtb3J5IHNpemUgaW5zdGVhZCBvZiBlbnRyaWVzIGNvdW50IgorbXNnc3RyICIiCisiZ2xlaWNoZXMgd2llIG9iZW4sIGFiZXIgZGllIFNwZWljaGVyZ3LDtsOfZSBhbnN0YXR0IGRlclxuIgorIkFuemFobCBkZXIgRWludHLDpGdlIGxpbWl0aWVyZW4iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgzCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJkaWUgbWF4aW1hbGUgRGVsdGEtVGllZmUgbGltaXRpZXJlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODUKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAibWF4aW1hbGUgR3LDtsOfZSBmw7xyIGplZGUgUGFrZXRkYXRlaSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODcKK21zZ2lkICJyZXBhY2sgb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcCIKK21zZ3N0ciAiIgorIk9iamVrdGUgdW1wYWNrZW4sIGRpZSBzaWNoIGluIG1pdCAua2VlcCBtYXJraWVydGVuIFBhY2stRGF0ZWllbiBiZWZpbmRlbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIkzDtnNjaGVuIHZvbiAnJXMnIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxOQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSA8T2JqZWt0PiA8RXJzZXR6dW5nPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjAKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPE9iamVrdD4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Q29tbWl0PiBbPEVsdGVybi1Db21taXQ+Li4uXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPE9iamVrdD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PEZvcm1hdD5dIFstbCBbPE11c3Rlcj5dXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzI1IGJ1aWx0aW4vcmVwbGFjZS5jOjM2MyBidWlsdGluL3JlcGxhY2UuYzozOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcyciCittc2dzdHIgIlVuZ8O8bHRpZ2VyIE9iamVrdC1OYW1lOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJ1bmfDvGx0aWdlciBNZXJnZS1UYWcgaW4gQ29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgImZlaGxlcmhhZnRlciBNZXJnZS1UYWcgaW4gQ29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisiRGVyIHVyc3Byw7xuZ2xpY2hlIENvbW1pdCAnJXMnIGVudGjDpGx0IE1lcmdlLVRhZyAnJXMnLCBkZXIgdmVyd29yZmVuXG4iCisid2lyZDsgYmVudXR6ZW4gU2llIC0tZWRpdCBhbnN0YXR0IC0tZ3JhZnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZS4iCittc2dzdHIgIkRlciB1cnNwcsO8bmdsaWNoZSBDb21taXQgJyVzJyBoYXQgZWluZSBHUEctU2lnbmF0dXIuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDIKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAiRGllIFNpZ25hdHVyIHdpcmQgaW4gZGVtIEVyc2V0enVuZ3MtQ29tbWl0IGVudGZlcm50ISIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICJLb25udGUgRXJzZXR6dW5ncy1Db21taXQgZsO8ciAnJXMnIG5pY2h0IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMyCittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgImVyc2V0emVuZGUgUmVmZXJlbnplbiBhdWZsaXN0ZW4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzMworbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgImVyc2V0emVuZGUgUmVmZXJlbnplbiBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM0Cittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgImV4aXN0aWVyZW5kZXMgT2JqZWt0IGJlYXJiZWl0ZW4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNQorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgIkVsdGVybi1Db21taXRzIGVpbmVzIENvbW1pdHMgw6RuZGVybiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM2Cittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiZGllIFJlZmVyZW56IGVyc2V0emVuLCB3ZW5uIHNpZSBleGlzdGllcnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNworbXNnaWQgImRvIG5vdCBwcmV0dHktcHJpbnQgY29udGVudHMgZm9yIC0tZWRpdCIKK21zZ3N0ciAia2VpbmUgYW5zcHJlY2hlbmRlIEFuemVpZ2UgZGVzIE9iamVrdGluaGFsdGVzIGbDvHIgLS1lZGl0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzgKK21zZ2lkICJ1c2UgdGhpcyBmb3JtYXQiCittc2dzdHIgImRhcyBhbmdlZ2ViZW5lIEZvcm1hdCBiZW51dHplbiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMgorbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgImdpdCByZXJlcmUgW2NsZWFuIHwgZm9yZ2V0IDxQZmFkPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NTcKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAic2F1YmVyZSBBdWZsw7ZzdW5nZW4gaW0gSW5kZXggcmVnaXN0cmllcmVuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjYKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPENvbW1pdD5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjcKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSA8dHJlZS1pc2g+IFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gPENvbW1pdC1SZWZlcmVuej4gWy0tXSA8UGZhZGU+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjgKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs8Q29tbWl0LVJlZmVyZW56Pl0gWy0tXSBbPFBmYWRlPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgIm1peGVkIgorbXNnc3RyICJtaXhlZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAic29mdCIKK21zZ3N0ciAic29mdCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiaGFyZCIKK21zZ3N0ciAiaGFyZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAibWVyZ2UiCittc2dzdHIgInp1c2FtbWVuZsO8aHJlbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAia2VlcCIKK21zZ3N0ciAia2VlcCIKKworIzogYnVpbHRpbi9yZXNldC5jOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIlNpZSBoYWJlbiBrZWluZW4gZ8O8bHRpZ2VuIEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzYKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBGaW5kZW4gZGVzIFwiVHJlZVwiLU9iamVrdGVzIHZvbiBIRUFELiIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICJGZWhsZXIgYmVpbSBGaW5kZW4gZGVzIFwiVHJlZVwiLU9iamVrdGVzIHZvbiAlcy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSEVBRCBpcyBub3cgYXQgJXMiCittc2dzdHIgIkhFQUQgaXN0IGpldHp0IGJlaSAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICJLYW5uIGtlaW5lbiAnJXMnLVJlc2V0IGR1cmNoZsO8aHJlbiwgd8OkaHJlbmQgZWluIE1lcmdlIGltIEdhbmdlIGlzdC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNzYKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICJ3ZW5pZ2VyIEF1c2dhYmVuLCBtZWxkZXQgbnVyIEZlaGxlciIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3OAorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICJIRUFEIHVuZCBJbmRleCB1bXNldHplbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3OQorbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAibnVyIEhFQUQgdW1zZXR6ZW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyODEgYnVpbHRpbi9yZXNldC5jOjI4MworbXNnaWQgInJlc2V0IEhFQUQsIGluZGV4IGFuZCB3b3JraW5nIHRyZWUiCittc2dzdHIgIkhFQUQsIEluZGV4IHVuZCBBcmJlaXRzdmVyemVpY2huaXMgdW1zZXR6ZW4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyODUKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIkhFQUQgdW1zZXR6ZW4sIGFiZXIgbG9rYWxlIMOEbmRlcnVuZ2VuIGJlaGFsdGVuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjg4Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCByZW1vdmVkIHBhdGhzIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIm51ciBzcGVpY2hlcm4sIGRhc3MgZ2Vsw7ZzY2h0ZSBQZmFkZSBzcMOkdGVyIGhpbnp1Z2Vmw7xndCB3ZXJkZW4gc29sbGVuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgIktvbm50ZSAnJXMnIG5pY2h0IGFscyBnw7xsdGlnZW4gQ29tbWl0IGF1ZmzDtnNlbi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIgorbXNnc3RyICJLb25udGUgJyVzJyBuaWNodCBhbHMgZ8O8bHRpZ2VzIFwiVHJlZVwiLU9iamVrdCBhdWZsw7ZzZW4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIyCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICItLXBhdGNoIGlzdCBpbmtvbXBhdGliZWwgbWl0IC0te2hhcmQsbWl4ZWQsc29mdH0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzEKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLW1peGVkIG1pdCBQZmFkZW4gaXN0IHZlcmFsdGV0OyBiZW51dHplbiBTaWUgc3RhdHRkZXNzZW4gJ2dpdCByZXNldCAtLSAiCisiPFBmYWRlPicuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAiRWluICclcyctUmVzZXQgbWl0IFBmYWRlbiBpc3QgbmljaHQgbcO2Z2xpY2guIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICInJXMnLVJlc2V0IGlzdCBpbiBlaW5lbSBCYXJlLVJlcG9zaXRvcnkgbmljaHQgZXJsYXVidCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0NworbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICItTiBrYW5uIG51ciBtaXQgLW1peGVkIGJlbnV0enQgd2VyZGVuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzY0Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIk5pY2h0IHp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW4gbmFjaCBadXLDvGNrc2V0enVuZzoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIktvbm50ZSBJbmRleC1EYXRlaSBuaWNodCB6dSBDb21taXQgJyVzJyBzZXR6ZW4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzc0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAiS29ubnRlIG5ldWUgSW5kZXgtRGF0ZWkgbmljaHQgc2NocmVpYmVuLiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjM1NAorbXNnaWQgInJldi1saXN0IGRvZXMgbm90IHN1cHBvcnQgZGlzcGxheSBvZiBub3RlcyIKK21zZ3N0ciAicmV2LWxpc3QgdW50ZXJzdMO8dHp0IGtlaW5lIEFuemVpZ2Ugdm9uIE5vdGl6ZW4iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzYxCittc2dpZCAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dIgorbXNnc3RyICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxPcHRpb25lbj5dIC0tIFs8QXJndW1lbnRlPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzY2Cittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICJgLS1gIGFscyBBcmd1bWVudCBsYXNzZW4iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzY4Cittc2dpZCAic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IgorbXNnc3RyICJkYXMgUGFyc2VuIG5hY2ggZGVtIGVyc3RlbiBBcmd1bWVudCwgd2FzIGtlaW5lIE9wdGlvbiBpc3QsIHN0b3BwZW4iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzcxCittc2dpZCAib3V0cHV0IGluIHN0dWNrIGxvbmcgZm9ybSIKK21zZ3N0ciAiIgorIkF1c2dhYmUgaW4gTGFuZ2Zvcm0gbWl0IEFyZ3VtZW50ZW4gYW4gZGVuIE9wdGlvbmVuIChnZXRyZW5udCBkdXJjaCAnPScpIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjUwMgorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPE9wdGlvbmVuPl0gLS0gWzxBcmd1bWVudGU+Li4uXVxuIgorIiAgIG9kZXI6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPEFyZ3VtZW50ZT4uLi5dXG4iCisiICAgb2RlcjogZ2l0IHJldi1wYXJzZSBbPE9wdGlvbmVuPl0gWzxBcmd1bWVudGU+Li4uXVxuIgorIlxuIgorIkbDvGhyZW4gU2llIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZsO8ciB3ZWl0ZXJlIEluZm9ybWF0aW9uZW4gYmVpICIKKyJlcnN0ZXIgVmVyd2VuZHVuZyBhdXMuIgorCisjOiBidWlsdGluL3JldmVydC5jOjIyCittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgWzxPcHRpb25lbj5dIDxDb21taXQtQW5nYWJlPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMworbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDxVbnRlcmtvbW1hbmRvPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyOAorbXNnaWQgImdpdCBjaGVycnktcGljayBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCBjaGVycnktcGljayBbPE9wdGlvbmVuPl0gPENvbW1pdC1BbmdhYmU+Li4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjI5Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIDxVbnRlcmtvbW1hbmRvPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJXM6ICVzIGthbm4gbmljaHQgbWl0ICVzIHZlcndlbmRldCB3ZXJkZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODAKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJcInJldmVydFwiIG9kZXIgXCJjaGVycnktcGlja1wiIEFibGF1ZiBiZWVuZGVuIgorCisjOiBidWlsdGluL3JldmVydC5jOjgxCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiXCJyZXZlcnRcIiBvZGVyIFwiY2hlcnJ5LXBpY2tcIiBBYmxhdWYgZm9ydHNldHplbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MgorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIlwicmV2ZXJ0XCIgb2RlciBcImNoZXJyeS1waWNrXCIgQWJsYXVmIGFiYnJlY2hlbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICJuaWNodCBhdXRvbWF0aXNjaCBjb21taXR0ZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODQKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiQ29tbWl0LUJlc2NocmVpYnVuZyBiZWFyYmVpdGVuIgorCisjOiBidWlsdGluL3JldmVydC5jOjg3Cittc2dpZCAicGFyZW50IG51bWJlciIKK21zZ3N0ciAiTnVtbWVyIGRlcyBFbHRlcm50ZWlscyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4OQorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJNZXJnZS1TdHJhdGVnaWUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTAKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIk9wdGlvbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MQorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIk9wdGlvbiBmw7xyIE1lcmdlLVN0cmF0ZWdpZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJhcHBlbmQgY29tbWl0IG5hbWUiCittc2dzdHIgIkNvbW1pdC1OYW1lbiBhbmjDpG5nZW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA2Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgInVyc3Byw7xuZ2xpY2hlLCBsZWVyZSBDb21taXRzIGVyaGFsdGVuIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAiQ29tbWl0cyBtaXQgbGVlcmVyIEJlc2NocmVpYnVuZyBlcmxhdWJlbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDgKK21zZ2lkICJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAicmVkdW5kYW50ZSwgbGVlcmUgQ29tbWl0cyBiZWhhbHRlbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJwcm9ncmFtIGVycm9yIgorbXNnc3RyICJQcm9ncmFtbWZlaGxlciIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxOTcKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJcInJldmVydFwiIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL3JldmVydC5jOjIxMgorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAiXCJjaGVycnktcGlja1wiIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBidWlsdGluL3JtLmM6MTcKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPE9wdGlvbmVuPl0gWy0tXSA8RGF0ZWk+Li4uIgorCisjOiBidWlsdGluL3JtLmM6NjUKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgKG9yIG9uZSBvZiBpdHMgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisidXNlcyBhIC5naXQgZGlyZWN0b3J5OiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgc3VibW9kdWxlcyAob3Igb25lIG9mIHRoZWlyIG5lc3RlZCBzdWJtb2R1bGVzKVxuIgorInVzZSBhIC5naXQgZGlyZWN0b3J5OiIKK21zZ3N0clswXSAiIgorImRhcyBmb2xnZW5kZSBTdWJtb2R1bCAob2RlciBlaW4gZ2VzY2hhY2h0ZWx0ZXMgU3VibW9kdWwgaGllcnZvbilcbiIKKyJiZW51dHp0IGVpbiAuZ2l0LVZlcnplaWNobmlzOiIKK21zZ3N0clsxXSAiIgorImRpZSBmb2xnZW5kZW4gU3VibW9kdWxlIChvZGVyIGVpbiBnZXNjaGFjaHRlbHRlcyBTdWJtb2R1bCBoaWVydm9uKVxuIgorImJlbnV0emVuIGVpbiAuZ2l0LVZlcnplaWNobmlzOiIKKworIzogYnVpbHRpbi9ybS5jOjcxCittc2dpZCAiIgorIlxuIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIlxuIgorIihiZW51dHplbiBTaWUgJ3JtIC1yZicgd2VubiBTaWUgZGllc2VzIFN1Ym1vZHVsIHdpcmtsaWNoIG1pdHNhbXRcbiIKKyJzZWluZXIgSGlzdG9yaWUgbMO2c2NoZW4gbcO2Y2h0ZW4pIgorCisjOiBidWlsdGluL3JtLmM6MjMwCittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIiIKKyJkaWUgZm9sZ2VuZGUgRGF0ZWkgaGF0IHp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW4gdW50ZXJzY2hpZWRsaWNoXG4iCisienUgZGVyIERhdGVpIHVuZCBIRUFEOiIKK21zZ3N0clsxXSAiIgorImRpZSBmb2xnZW5kZW4gRGF0ZWllbiBoYWJlbiB6dW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuICIKKyJ1bnRlcnNjaGllZGxpY2hcbiIKKyJ6dSBkZXIgRGF0ZWkgdW5kIEhFQUQ6IgorCisjOiBidWlsdGluL3JtLmM6MjM1Cittc2dpZCAiIgorIlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIoYmVudXR6ZW4gU2llIC1mLCB1bSBkaWUgTMO2c2NodW5nIHp1IGVyendpbmdlbikiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzkKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICJkaWUgZm9sZ2VuZGUgRGF0ZWkgaGF0IHp1bSBDb21taXQgdm9yZ2VtZXJrdGUgw4RuZGVydW5nZW46IgorbXNnc3RyWzFdICJkaWUgZm9sZ2VuZGVuIERhdGVpZW4gaGFiZW4genVtIENvbW1pdCB2b3JnZW1lcmt0ZSDDhG5kZXJ1bmdlbjoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDMgYnVpbHRpbi9ybS5jOjI1NAorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKGJlbnV0emVuIFNpZSAtLWNhY2hlZCwgdW0gZGllIERhdGVpIHp1IGJlaGFsdGVuLCBvZGVyIC1mLCB1bSBkaWUgRW50ZmVybnVuZyAiCisienUgZXJ6d2luZ2VuKSIKKworIzogYnVpbHRpbi9ybS5jOjI1MQorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ3N0clswXSAiZGllIGZvbGdlbmRlIERhdGVpIGhhdCBsb2thbGUgw4RuZGVydW5nZW46IgorbXNnc3RyWzFdICJkaWUgZm9sZ2VuZGVuIERhdGVpZW4gaGFiZW4gbG9rYWxlIMOEbmRlcnVuZ2VuOiIKKworIzogYnVpbHRpbi9ybS5jOjI2OQorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgImtlaW5lIGdlbMO2c2NodGVuIERhdGVpZW4gYXVmbGlzdGVuIgorCisjOiBidWlsdGluL3JtLmM6MjcwCittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIm51ciBhdXMgZGVtIEluZGV4IGVudGZlcm5lbiIKKworIzogYnVpbHRpbi9ybS5jOjI3MQorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICJkaWUgXCJ1cC10by1kYXRlXCIgUHLDvGZ1bmcgw7xiZXJzY2hyZWliZW4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzIKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAicmVrdXJzaXZlIEVudGZlcm51bmcgZXJsYXViZW4iCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzQKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAibWl0IFLDvGNrZ2FiZXdlcnQgMCBiZWVuZGVuLCB3ZW5uIGtlaW5lIMOcYmVyZWluc3RpbW11bmcgZ2VmdW5kZW4gd3VyZGUiCisKKyM6IGJ1aWx0aW4vcm0uYzozMTcKK21zZ2lkICJQbGVhc2UsIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJCaXR0ZSBtZXJrZW4gU2llIElocmUgw4RuZGVydW5nZW4gaW4gLmdpdG1vZHVsZXMgenVtIENvbW1pdCB2b3Igb2RlciAiCisiYmVudXR6ZW5cbiIKKyJTaWUgXCJzdGFzaFwiLCB1bSBmb3J0enVmYWhyZW4uIgorCisjOiBidWlsdGluL3JtLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgIiclcycgd2lyZCBuaWNodCBvaG5lIC1yIHJla3Vyc2l2IGVudGZlcm50IgorCisjOiBidWlsdGluL3JtLmM6Mzc0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtOiBrb25udGUgJXMgbmljaHQgbMO2c2NoZW4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPEhvc3Q+Ol08VmVyemVpY2huaXM+ICIKKyJbPFJlZmVyZW56Pi4uLl1cbiIKKyIgIC0tYWxsIHVuZCBkaWUgZXhwbGl6aXRlIEFuZ2FiZSBlaW5lciA8UmVmZXJlbno+IHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyAiCisiYXVzLiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjAKK21zZ2lkICJyZW1vdGUgbmFtZSIKK21zZ3N0ciAiTmFtZSBkZXMgUmVtb3RlLVJlcG9zaXRvcmllcyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzEKK21zZ2lkICJ1c2Ugc3RhdGVsZXNzIFJQQyBwcm90b2NvbCIKK21zZ3N0ciAienVzdGFuZHNsb3NlcyBSUEMtUHJvdG9rb2xsIHZlcndlbmRlbiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiUmVmZXJlbnplbiB2b24gZGVyIFN0YW5kYXJkLUVpbmdhYmUgbGVzZW4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTczCittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAiU3RhdHVzIGRlcyBSZW1vdGUtSGVscGVycyBhdXNnZWJlbiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjEzCittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgImdpdCBzaG9ydGxvZyBbPE9wdGlvbmVuPl0gWzxDb21taXRiZXJlaWNoPl0gW1stLV0gWzxQZmFkPi4uLl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgYXV0aG9yOiAlcyIKK21zZ3N0ciAiZmVobGVuZGVyIEF1dG9yOiAlcyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzMAorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAiZGllIEF1c2dhYmUgZW50c3ByZWNoZW5kIGRlciBBbnphaGwgdm9uIENvbW1pdHMgcHJvIEF1dG9yIHNvcnRpZXJlbiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzMgorbXNnaWQgIlN1cHByZXNzIGNvbW1pdCBkZXNjcmlwdGlvbnMsIG9ubHkgcHJvdmlkZXMgY29tbWl0IGNvdW50IgorbXNnc3RyICJDb21taXQtQmVzY2hyZWlidW5nZW4gdW50ZXJkcsO8Y2tlbiwgbnVyIEFuemFobCBkZXIgQ29tbWl0cyBsaWVmZXJuIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjM0Cittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAiZGllIEUtTWFpbC1BZHJlc3NlIHZvbiBqZWRlbSBBdXRvciBhbnplaWdlbiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzNQorbXNnaWQgIndbLGkxWyxpMl1dIgorbXNnc3RyICJ3WyxpMVssaTJdXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzNgorbXNnaWQgIkxpbmV3cmFwIG91dHB1dCIKK21zZ3N0ciAiQXVzZ2FiZSBtaXQgWmVpbGVudW1icsO8Y2hlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjkKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTxXYW5uPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPENvbW1pdD4gfCA8Z2xvYj4pLi4uXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEzCittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxCYXNpcz5dXSBbLS1saXN0XSBbPFJlZmVyZW56Pl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTkKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIlJlbW90ZS1UcmFja2luZyB1bmQgbG9rYWxlIEJyYW5jaGVzIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYxCittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIlJlbW90ZS1UcmFja2luZy1CcmFuY2hlcyBhbnplaWdlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MworbXNnaWQgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giCittc2dzdHIgIicqISstJyBlbnRzcHJlY2hlbmQgZGVzIEJyYW5jaGVzIGVpbmbDpHJiZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjUKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAiPG4+IHdlaXRlcmUgQ29tbWl0cyBuYWNoIGRlbSBnZW1laW5zYW1lbiBWb3Jnw6RuZ2VyLUNvbW1pdCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAiU3lub255bSBmw7xyIG1vcmU9LTEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAiTmFtZW4gdW50ZXJkcsO8Y2tlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MAorbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJkZW4gYWt0dWVsbGVuIEJyYW5jaCBlaW5iZXppZWhlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MgorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAiQ29tbWl0cyBuYWNoIGlocmVuIE9iamVrdG5hbWVuIGJlbmVubmVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc0Cittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAibcO2Z2xpY2hlIE1lcmdlLUJhc2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc2Cittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAiIgorIlJlZmVyZW56ZW4sIGRpZSB1bmVycmVpY2hiYXIgdm9uIGFsbGVuIGFuZGVyZW4gUmVmZXJlbnplbiBzaW5kLCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3OAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiQ29tbWl0cyBpbiB0b3BvbG9naXNjaGVyIE9yZG51bmcgYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODEKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAibnVyIENvbW1pdHMgYW56ZWlnZW4sIGRpZSBzaWNoIG5pY2h0IGltIGVyc3RlbiBCcmFuY2ggYmVmaW5kZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODMKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgIk1lcmdlcyBhbnplaWdlbiwgZGllIG51ciB2b24gZWluZW0gQnJhbmNoIGF1cyBlcnJlaWNoYmFyIHNpbmQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODUKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgInRvcG9sb2dpc2NoZSBTb3J0aWVydW5nLCBCZWliZWhhbHR1bmcgRGF0dW1zb3JkbnVuZyB3byBtw7ZnbGljaCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4OAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8QmFzaXM+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4OQorbXNnaWQgInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCBiYXNlIgorbXNnc3RyICJkaWUgPG4+IGrDvG5nc3RlbiBFaW50csOkZ2UgaW0gUmVmbG9nLCBiZWdpbm5lbmQgYW4gZGVyIEJhc2lzLCBhbnplaWdlbiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEwCittc2dpZCAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8TXVzdGVyPi4uLl0gIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTEKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIDwgPHJlZi1saXN0PiIKK21zZ3N0ciAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PE11c3Rlcj5dIDwgPFJlZmVyZW56bGlzdGU+IgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcwCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAibnVyIFRhZ3MgYW56ZWlnZW4gKGthbm4gbWl0IFwiaGVhZHNcIiBrb21iaW5pZXJ0IHdlcmRlbikiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICJudXIgQnJhbmNoZXMgYW56ZWlnZW4gKGthbm4gbWl0IFwidGFnc1wiIGtvbWJpbmllcnQgd2VyZGVuKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MgorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgInN0cmVuZ2VyZSBSZWZlcmVuenByw7xmdW5nLCBlcmZvcmRlcnQgZXhha3RlbiBSZWZlcmVuenBmYWQiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzUgYnVpbHRpbi9zaG93LXJlZi5jOjE3NworbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAiIgorImRpZSBIRUFELVJlZmVyZW56IGFuemVpZ2VuLCBzZWxic3Qgd2VubiBkaWVzZSBhdXNnZWZpbHRlcnQgd2VyZGVuIHfDvHJkZSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICJUYWdzIGluIE9iamVrdC1JZGVudGlmaWthdGlvbmVuIGRlcmVmZXJlbnppZXJlbiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4MQorbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAibnVyIFNIQTEgSGFzaCBtaXQgPG4+IFppZmZlcm4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODUKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAiIgorImtlaW5lIEF1c2dhYmUgZGVyIEVyZ2Vibmlzc2UgaW4gZGllIFN0YW5kYXJkLUF1c2dhYmUgKG7DvHR6bGljaCBtaXQgLS12ZXJpZnkpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTg3Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorIlJlZmVyZW56ZW4gdm9uIGRlciBTdGFuZGFyZC1FaW5nYWJlIGFuemVpZ2VuLCBkaWUgc2ljaCBuaWNodCBpbSBsb2thbGVuICIKKyJSZXBvc2l0b3J5IGJlZmluZGVuIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjcKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFs8T3B0aW9uZW4+XSA8TmFtZT4gWzxSZWZlcmVuej5dIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPG5hbWU+IgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPE5hbWU+IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAiIgorIkZlaGxlcm1lbGR1bmdlbiBmw7xyIG5pY2h0LXN5bWJvbGlzY2hlIChsb3NnZWzDtnN0ZSkgUmVmZXJlbnplbiB1bnRlcmRyw7xja2VuIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAic3ltYm9saXNjaGUgUmVmZXJlbnplbiBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MgorbXNnaWQgInNob3J0ZW4gcmVmIG91dHB1dCIKK21zZ3N0ciAidmVya8O8cnp0ZSBBdXNnYWJlIGRlciBSZWZlcmVuemVuIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MgorbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAiR3J1bmQiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYyCittc2dpZCAicmVhc29uIG9mIHRoZSB1cGRhdGUiCittc2dzdHIgIkdydW5kIGbDvHIgZGllIEFrdHVhbGlzaWVydW5nIgorCisjOiBidWlsdGluL3RhZy5jOjIyCittc2dpZCAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dIDx0YWduYW1lPiAiCisiWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPFNjaGzDvHNzZWwtaWQ+XSBbLWZdIFstbSA8QmVzY2hyZWlidW5nPiB8IC1GIDxEYXRlaT5dICIKKyI8VGFnbmFtZT4gWzxDb21taXQ+XSIKKworIzogYnVpbHRpbi90YWcuYzoyMworbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC1kIDxUYWduYW1lPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyNAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyAtbCBbLW5bPE51bW1lcj5dXSBbLS1jb250YWlucyA8Q29tbWl0Pl0gWy0tcG9pbnRzLWF0IDxPYmpla3Q+XVxuIgorIlx0XHRbPE11c3Rlcj4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjI2Cittc2dpZCAiZ2l0IHRhZyAtdiA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgPFRhZ25hbWU+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAiZmVobGVyaGFmdGVzIE9iamVrdCBiZWkgJyVzJyIKKworIzogYnVpbHRpbi90YWcuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnIG5hbWUgdG9vIGxvbmc6ICUuKnMuLi4iCittc2dzdHIgIlRhZ25hbWUgenUgbGFuZzogJS4qcy4uLiIKKworIzogYnVpbHRpbi90YWcuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiVGFnICclcycgbmljaHQgZ2VmdW5kZW4uIgorCisjOiBidWlsdGluL3RhZy5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRhZyAnJXMnIGdlbMO2c2NodCAod2FyICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdmVyaWZ5IHRoZSB0YWcgJyVzJyIKK21zZ3N0ciAiS29ubnRlIFRhZyAnJXMnIG5pY2h0IHZlcmlmaXppZXJlbiIKKworIzogYnVpbHRpbi90YWcuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiR2ViZW4gU2llIGVpbmUgQmVzY2hyZWlidW5nIGbDvHIgVGFnXG4iCisiICAlc1xuIgorImVpbi4gWmVpbGVuLCBkaWUgbWl0ICclYycgYmVnaW5uZW4sIHdlcmRlbiBpZ25vcmllcnQuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3UgIgorIndhbnQgdG8uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJHZWJlbiBTaWUgZWluZSBCZXNjaHJlaWJ1bmcgZsO8ciBUYWdcbiIKKyIgICVzXG4iCisiZWluLiBaZWlsZW4sIGRpZSBtaXQgJyVjJyBiZWdpbm5lbiwgd2VyZGVuIGJlaGFsdGVuOyBTaWUgZMO8cmZlbiBkaWVzZVxuIgorInNlbGJzdCBlbnRmZXJuZW4gd2VubiBTaWUgbcO2Y2h0ZW4uXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHNvcnQgc3BlY2lmaWNhdGlvbiAnJXMnIgorbXNnc3RyICJOaWNodCB1bnRlcnN0w7x0enRlIEFuZ2FiZSBmw7xyIFwiLS1zb3J0XCIgJyVzJyIKKworIzogYnVpbHRpbi90YWcuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgc29ydCBzcGVjaWZpY2F0aW9uICclcycgaW4gdmFyaWFibGUgJyVzJyIKK21zZ3N0ciAiTmljaHQgdW50ZXJzdMO8dHp0ZSBBbmdhYmUgZsO8ciBcIi0tc29ydFwiICclcycgaW4gVmFyaWFibGUgJyVzJyIKKworIzogYnVpbHRpbi90YWcuYzo0MjgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJrb25udGUgVGFnIG5pY2h0IHNpZ25pZXJlbiIKKworIzogYnVpbHRpbi90YWcuYzo0MzAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgImtvbm50ZSBUYWctRGF0ZWkgbmljaHQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL3RhZy5jOjQ1NQorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgInVuZ8O8bHRpZ2VyIE9iamVrdC1UeXAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDY4Cittc2dpZCAidGFnIGhlYWRlciB0b28gYmlnLiIKK21zZ3N0ciAiVGFnLUtvcGYgenUgZ3Jvw58uIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAia2VpbmUgVGFnLUJlc2NocmVpYnVuZz8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIkRpZSBUYWctQmVzY2hyZWlidW5nIHd1cmRlIGdlbGFzc2VuIGluICVzXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTU5Cittc2dpZCAic3dpdGNoICdwb2ludHMtYXQnIHJlcXVpcmVzIGFuIG9iamVjdCIKK21zZ3N0ciAiT3B0aW9uICdwb2ludHMtYXQnIGVyZm9yZGVydCBlaW4gT2JqZWt0IgorCisjOiBidWlsdGluL3RhZy5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAiZmVobGVyaGFmdGVyIE9iamVrdC1OYW1lICclcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTkwCittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgIlRhZ25hbWVuIGF1Zmxpc3RlbiIKKworIzogYnVpbHRpbi90YWcuYzo1OTIKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiPG4+IFplaWxlbiBqZWRlciBUYWctQmVzY2hyZWlidW5nIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjU5NAorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICJUYWdzIGzDtnNjaGVuIgorCisjOiBidWlsdGluL3RhZy5jOjU5NQorbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICJUYWdzIMO8YmVycHLDvGZlbiIKKworIzogYnVpbHRpbi90YWcuYzo1OTcKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9uZW4gZsO8ciBFcnN0ZWxsdW5nIHZvbiBUYWdzIgorCisjOiBidWlsdGluL3RhZy5jOjU5OQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAiYW5ub3RpZXJ0ZXMgVGFnLCBiZW7DtnRpZ3QgZWluZSBCZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAxCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgIlRhZy1CZXNjaHJlaWJ1bmciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAzCittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAiYW5ub3RpZXJ0ZXMgdW5kIEdQRy1zaWduaWVydGVzIFRhZyIKKworIzogYnVpbHRpbi90YWcuYzo2MDcKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJlaW5lbiBhbmRlcmVuIFNjaGzDvHNzZWwgdmVyd2VuZGVuLCB1bSBkYXMgVGFnIHp1IHNpZ25pZXJlbiIKKworIzogYnVpbHRpbi90YWcuYzo2MDgKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICJkYXMgVGFnIGVyc2V0emVuLCB3ZW5uIGVzIGV4aXN0aWVydCIKKworIzogYnVpbHRpbi90YWcuYzo2MDkgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICJSZWZsb2cgZXJzdGVsbGVuIgorCisjOiBidWlsdGluL3RhZy5jOjYxMQorbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbmVuIGbDvHIgQXVmbGlzdHVuZyBkZXIgVGFncyIKKworIzogYnVpbHRpbi90YWcuYzo2MTIKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgIkxpc3RlIGRlciBUYWdzIGluIFNwYWx0ZW4gYW56ZWlnZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjE0Cittc2dpZCAic29ydCB0YWdzIgorbXNnc3RyICJUYWdzIHNvcnRpZXJlbiIKKworIzogYnVpbHRpbi90YWcuYzo2MTkgYnVpbHRpbi90YWcuYzo2MjUKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIm51ciBUYWdzIGF1c2dlYmVuLCBkaWUgZGllc2VuIENvbW1pdCBiZWluaGFsdGVuIgorCisjOiBidWlsdGluL3RhZy5jOjYzMQorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICJudXIgVGFncyB2b24gZGVtIE9iamVrdCBhdXNnZWJlbiIKKworIzogYnVpbHRpbi90YWcuYzo2NTcKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gdW5kIC1uIHNpbmQgaW5rb21wYXRpYmVsIgorCisjOiBidWlsdGluL3RhZy5jOjY2OQorbXNnaWQgIi0tc29ydCBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1zb3J0IHVuZCAtbiBzaW5kIGlua29tcGF0aWJlbCIKKworIzogYnVpbHRpbi90YWcuYzo2NzYKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICItbiBPcHRpb24gaXN0IG51ciBlcmxhdWJ0IG1pdCAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Njc4Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICItLWNvbnRhaW5zIE9wdGlvbiBpc3QgbnVyIGVybGF1YnQgbWl0IC1sLiIKKworIzogYnVpbHRpbi90YWcuYzo2ODAKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICItLXBvaW50cy1hdCBPcHRpb24gaXN0IG51ciBlcmxhdWJ0IG1pdCAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Njg4Cittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJudXIgZWluZSAtRiBvZGVyIC1tIE9wdGlvbiBpc3QgZXJsYXVidC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzA4Cittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICJ6dSB2aWVsZSBQYXJhbWV0ZXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICInJXMnIGlzdCBrZWluIGfDvGx0aWdlciBUYWduYW1lLiIKKworIzogYnVpbHRpbi90YWcuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlRhZyAnJXMnIGV4aXN0aWVydCBiZXJlaXRzIgorCisjOiBidWlsdGluL3RhZy5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRhZyAnJXMnIGFrdHVhbGlzaWVydCAod2FyICVzKVxuIgorCisjOiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NDkwCittc2dpZCAiVW5wYWNraW5nIG9iamVjdHMiCittc2dzdHIgIkVudHBhY2tlIE9iamVrdGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIkZlaGxlciBiZWltIEVyc3RlbGxlbiB2b24gVmVyemVpY2huaXMgJyVzJyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAiS29ubnRlICclcycgbmljaHQgbGVzZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICJLb25udGUgRGF0ZWkgJyVzJyBuaWNodCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIgorbXNnc3RyICJLb25udGUgRGF0ZWkgJyVzJyBuaWNodCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDEgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIktvbm50ZSBWZXJ6ZWljaG5pcyAnJXMnIG5pY2h0IGzDtnNjaGVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nICIKK21zZ3N0ciAiUHLDvGZlICIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMzYKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAiIgorIlZlcnplaWNobmlzaW5mb3JtYXRpb25lbiBoYWJlbiBzaWNoIG5hY2ggSGluenVmw7xnZW4gZWluZXIgbmV1ZW4gRGF0ZWkgbmljaHQgIgorImdlw6RuZGVydCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDkKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiVmVyemVpY2huaXNpbmZvcm1hdGlvbmVuIGhhYmVuIHNpY2ggbmFjaCBIaW56dWbDvGdlbiBlaW5lcyBuZXVlbiAiCisiVmVyemVpY2huaXNzZXMgbmljaHQgZ2XDpG5kZXJ0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2MgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgIiIKKyJWZXJ6ZWljaG5pc2luZm9ybWF0aW9uZW4gaGFiZW4gc2ljaCBuYWNoIEFrdHVhbGlzaWVydW5nIGVpbmVyIERhdGVpIGdlw6RuZGVydCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNzMKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICIiCisiVmVyemVpY2huaXNpbmZvcm1hdGlvbmVuIGhhYmVuIHNpY2ggbmFjaCBIaW56dWbDvGdlbiBlaW5lciBEYXRlaSBpbiBlaW4gIgorIlVudGVydmVyemVpY2huaXMgZ2XDpG5kZXJ0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE4NAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorIlZlcnplaWNobmlzaW5mb3JtYXRpb25lbiBoYWJlbiBzaWNoIG5hY2ggZGVtIEzDtnNjaGVuIGVpbmVyIERhdGVpIG5pY2h0ICIKKyJnZcOkbmRlcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTk3Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiCittc2dzdHIgIiIKKyJWZXJ6ZWljaG5pc2luZm9ybWF0aW9uZW4gaGFiZW4gc2ljaCBuYWNoIGRlbSBMw7ZzY2hlbiBlaW5lcyBWZXJ6ZWljaG5pc3NlcyAiCisibmljaHQgZ2XDpG5kZXJ0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIwNAorbXNnaWQgIiBPSyIKK21zZ3N0ciAiIE9LIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjU2NAorbXNnaWQgImdpdCB1cGRhdGUtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1pbmRleCBbPE9wdGlvbmVuPl0gWy0tXSBbPERhdGVpPi4uLl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTE4Cittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICIiCisiQWt0dWFsaXNpZXJ1bmcgZm9ydHNldHplbiwgYXVjaCB3ZW5uIGRlciBJbmRleCBha3R1YWxpc2llcnQgd2VyZGVuIG11c3MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTIxCittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgIkFrdHVhbGlzaWVydW5nOiBpZ25vcmllcnQgU3VibW9kdWxlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyNAorbXNnaWQgImRvIG5vdCBpZ25vcmUgbmV3IGZpbGVzIgorbXNnc3RyICJrZWluZSBuZXVlbiBEYXRlaWVuIGlnbm9yaWVyZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI2Cittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgIkRhdGVpZW4gVmVyemVpY2huaXNzZSBlcnNldHplbiBsYXNzZW4sIHVuZCB1bWdlZHJlaHQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI4Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiZmVobGVuZGUgRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgYmVhY2h0ZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTMwCittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIiIKKyJha3R1YWxpc2llcmVuLCBhdWNoIHdlbm4gZGVyIEluZGV4IG5pY2h0IHp1c2FtbWVuZ2Vmw7xocnRlIEVpbnRyw6RnZSBiZWluaGFsdGV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkzMworbXNnaWQgInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiRGF0ZWlpbmZvcm1hdGlvbmVuIGFrdHVhbGlzaWVyZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTM3Cittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICJ3aWUgLS1yZWZyZXNoLCBpZ25vcmllcnQgYWJlciBcImFzc3VtZS11bmNoYW5nZWRcIiBFaW5zdGVsbHVuZyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NDEKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICI8TW9kdXM+LDxPYmpla3Q+LDxQZmFkPiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NDIKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgImRlbiBhbmdlZ2ViZW5lbiBFaW50cmFnIHp1bSBDb21taXQgdm9ybWVya2VuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NgorbXNnaWQgIigrLy0peCIKK21zZ3N0ciAiKCsvLSl4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NworbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICJkYXMgXCJhdXNmw7xocmJhclwiLUJpdCBkZXIgYXVmZ2VsaXN0ZXRlbiBEYXRlaWVuIMO8YmVyc2NocmVpYmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1MQorbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJub3QgY2hhbmdpbmdcIiIKK21zZ3N0ciAiZGllc2UgRGF0ZWkgaW1tZXIgYWxzIHVudmVyw6RuZGVydCBiZXRyYWNodGVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1NAorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAiXCJhc3N1bWVkLXVuY2hhbmdlZFwiLUJpdCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NTcKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwiaW5kZXgtb25seVwiIgorbXNnc3RyICJEYXRlaWVuIGFscyBcImluZGV4LW9ubHlcIiBtYXJraWVyZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTYwCittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgIlwic2tpcC13b3JrdHJlZVwiLUJpdCBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjMKK21zZ2lkICJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiIgorImRpZSDDhG5kZXJ1bmdlbiBudXIgenVtIENvbW1pdCB2b3JtZXJrZW47IEluaGFsdCB3aXJkIG5pY2h0IGRlciBPYmpla3QtIgorIkRhdGVuYmFuayBoaW56dWdlZsO8Z3QiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY1Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAiIgorImJlbmFubnRlIFBmYWRlIGzDtnNjaGVuLCBhdWNoIHdlbm4gc2llIHNpY2ggaW0gQXJiZWl0c3ZlcnplaWNobmlzIGJlZmluZGVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2NworbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAibWl0IC0tc3RkaW46IGVpbmdlZ2ViZW5lIFplaWxlbiBzaW5kIGR1cmNoIE5VTC1CeXRlcyBhYmdlc2NobG9zc2VuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2OQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIkxpc3RlIGRlciB6dSBha3R1YWxpc2llcmVuZGVuIFBmYWRlIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzMKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiRWludHLDpGdlIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSB6dW0gQ29tbWl0IHZvcm1lcmtlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzcKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgIiIKKyJ3aWVkZXJob2x0ZXMgRWlucGZsZWdlbiBkZXIgWnVzdMOkbmRlICMyIHVuZCAjMyBmw7xyIGRpZSBhdWZnZWxpc3RldGVuIFBmYWRlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MQorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICJudXIgRWludHLDpGdlIGFrdHVhbGlzaWVyZW4sIGRpZSB1bnRlcnNjaGllZGxpY2ggenUgSEVBRCBzaW5kIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NQorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImZlaGxlbmRlIERhdGVpZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzIGlnbm9yaWVyZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg4Cittc2dpZCAicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJkaWUgQWt0aW9uZW4gaW4gZGVyIFN0YW5kYXJkLUF1c2dhYmUgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkwCittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIihmw7xyIEZyZW1kcHJvZ3JhbW1lKSBrZWluZSBnZXNwZWljaGVydGVuLCBuaWNodCBhdWZnZWzDtnN0ZSBLb25mbGlrdGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk0Cittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgIkluZGV4LURhdGVpIGluIGRpZXNlbSBGb3JtYXQgc2NocmVpYmVuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NgorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICJTcGxpdHRpbmcgZGVzIEluZGV4IGFrdGl2aWVyZW4gb2RlciBkZWFrdGl2aWVyZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk4Cittc2dpZCAiZW5hYmxlL2Rpc2FibGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICJDYWNoZSBmw7xyIHVudmVyc2lvbmllcnRlIERhdGVpZW4gYWt0aXZpZXJlbiBvZGVyIGRlYWt0aXZpZXJlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAwCittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgIiIKKyJDYWNoZSBmw7xyIHVudmVyc2lvbmllcnRlIERhdGVpZW4gb2huZSBQcsO8ZnVuZyBkZXMgRGF0ZWlzeXN0ZW1zIGFrdGl2aWVyZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjkKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8T3B0aW9uZW4+XSAtZCA8UmVmZXJlbnpuYW1lPiBbPGFsdGVyLVdlcnQ+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICIiCisiZ2l0IHVwZGF0ZS1yZWYgWzxPcHRpb25lbj5dICAgIDxSZWZlcmVuem5hbWU+IDxuZXVlci1XZXJ0PiBbPGFsdGVyLVdlcnQ+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8T3B0aW9uZW4+XSAtLXN0ZGluIFstel0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICJkaWVzZSBSZWZlcmVueiBsw7ZzY2hlbiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY1Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgIjxSZWZlcmVuem5hbWU+IGFrdHVhbGlzaWVyZW4sIG5pY2h0IGRlbiBWZXJ3ZWlzIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjYKK21zZ2lkICJzdGRpbiBoYXMgTlVMLXRlcm1pbmF0ZWQgYXJndW1lbnRzIgorbXNnc3RyICJTdGFuZGFyZC1FaW5nYWJlIGhhdCBkdXJjaCBOVUwtWmVpY2hlbiBhYmdlc2NobG9zc2VuZSBBcmd1bWVudGUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NworbXNnaWQgInJlYWQgdXBkYXRlcyBmcm9tIHN0ZGluIgorbXNnc3RyICJBa3R1YWxpc2llcnVuZ2VuIHZvbiBkZXIgU3RhbmRhcmQtRWluZ2FiZSBsZXNlbiIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo2Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE0Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAiZGllIEluZm9ybWF0aW9uc2RhdGVpZW4gdm9uIEdydW5kIGF1ZiBha3R1YWxpc2llcmVuIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxNworbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPENvbW1pdD4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjcyCittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICJDb21taXQtSW5oYWx0ZSBhdXNnZWJlbiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NzMgYnVpbHRpbi92ZXJpZnktdGFnLmM6ODQKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgInVuYmVhcmJlaXRldGUgQXVzZ2FiZSBkZXMgU3RhdHVzIHZvbiBncGcgYXVzZ2ViZW4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NAorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8UGFrZXQ+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjQKK21zZ2lkICJ2ZXJib3NlIgorbXNnc3RyICJlcndlaXRlcnRlIEF1c2dhYmVuIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjYKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAibnVyIFN0YXRpc3Rpa2VuIGFuemVpZ2VuIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxNworbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gPHRhZz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gPFRhZz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjgzCittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICJUYWctSW5oYWx0ZSBhdXNnZWJlbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEzCittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gPGJyYW5jaD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzxPcHRpb25lbj5dIDxQZmFkPiA8QnJhbmNoPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE0Cittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxPcHRpb25lbj5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIkzDtnNjaGUgd29ya3RyZWVzLyVzOiBrZWluIGfDvGx0aWdlcyBWZXJ6ZWljaG5pcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIkzDtnNjaGUgd29ya3RyZWVzLyVzOiBnaXRkaXItRGF0ZWkgZXhpc3RpZXJ0IG5pY2h0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICJMw7ZzY2hlIHdvcmt0cmVlcy8lczoga29ubnRlIGdpdGRpci1EYXRlaSAoJXMpIG5pY2h0IGxlc2VuIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBpbnZhbGlkIGdpdGRpciBmaWxlIgorbXNnc3RyICJMw7ZzY2hlIHdvcmt0cmVlcy8lczogdW5nw7xsdGlnZSBnaXRkaXItRGF0ZWkiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgIkzDtnNjaGUgd29ya3RyZWVzLyVzOiBnaXRkaXItRGF0ZWkgdmVyd2Vpc3QgYXVmIG5pY2h0IGV4aXN0aWVyZW5kZW4gT3J0IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmU6ICVzIgorbXNnc3RyICJGZWhsZXIgYmVpbSBMw7ZzY2hlbjogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyBleGlzdGllcnQgYmVyZWl0cyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJLb25udGUgVmVyemVpY2huaXMgJyVzJyBuaWNodCBlcnN0ZWxsZW4uIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyAlcyAoaWRlbnRpZmllciAlcykiCittc2dzdHIgIkJlcmVpdGUgJXMgdm9yIChJZGVudGlmaWthdGlvbiAlcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMTYKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBldmVuIGlmIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4gb3RoZXIgd29ya3RyZWUiCittc2dzdHIgIiIKKyI8QnJhbmNoPiBhdXNjaGVja2VuLCBhdWNoIHdlbm4gZGllc2VyIGJlcmVpdHMgaW4gZWluZW0gYW5kZXJlbiAiCisiQXJiZWl0c3ZlcnplaWNobmlzIGF1c2dlY2hlY2t0IGlzdCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMxOAorbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgIm5ldWVuIEJyYW5jaCBlcnN0ZWxsZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMjAKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgIkJyYW5jaCBlcnN0ZWxsZW4gb2RlciB1bXNldHplbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyMQorbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAiSEVBRCBiZWkgYmVuYW5udGVtIENvbW1pdCBsb3Nsw7ZzZW4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMjgKK21zZ2lkICItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIgdW5kIC0tZGV0YWNoIHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjEzCittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08UHLDpGZpeD4vXSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIjxQcsOkZml4Pi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI3Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICJkYXMgXCJUcmVlXCItT2JqZWt0IGbDvHIgZWluIFVudGVydmVyemVpY2huaXMgPFByw6RmaXg+IHNjaHJlaWJlbiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzAKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICJudXIgbsO8dHpsaWNoIGbDvHIgRmVobGVyc3VjaGUiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjI1NQorbXNnaWQgInByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0byBzdGRlcnIiCittc2dzdHIgIk1lbGR1bmdlbiB6dXIgRmVobGVyc3VjaGUgaW4gU3RhbmRhcmQtRmVobGVyYXVzZ2FiZSBhdXNnZWJlbiIKKworIzogZ2l0LmM6MTQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LiIKK21zZ3N0ciAiIgorIidnaXQgaGVscCAtYScgdW5kICdnaXQgaGVscCAtZycgbGlzdGV0IHZlcmbDvGdiYXJlIFVudGVya29tbWFuZG9zIHVuZFxuIgorImVpbmlnZSBBbmxlaXR1bmdlbiB6dSBHaXQtS29uemVwdGVuIGF1Zi4gQmVudXR6ZW4gU2llICdnaXQgaGVscCA8S29tbWFuZG8+J1xuIgorIm9kZXIgJ2dpdCBoZWxwIDxLb256ZXB0PicsIHVtIG1laHIgw7xiZXIgZWluIHNwZXppZmlzY2hlcyBLb21tYW5kbyBvZGVyXG4iCisiS29uemVwdCB6dSBlcmZhaHJlbi4iCisKKyM6IGNvbW1vbi1jbWRzLmg6OQorbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICJBcmJlaXRzdmVyemVpY2huaXMgYW5sZWdlbiAoc2llaGUgYXVjaDogZ2l0IGhlbHAgdHV0b3JpYWwpIgorCisjOiBjb21tb24tY21kcy5oOjEwCittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgImFuIGFrdHVlbGxlbiDDhG5kZXJ1bmdlbiBhcmJlaXRlbiAoc2llaGUgYXVjaDogZ2l0IGhlbHAgZXZlcnlkYXkpIgorCisjOiBjb21tb24tY21kcy5oOjExCittc2dpZCAiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIgorbXNnc3RyICJIaXN0b3JpZSB1bmQgU3RhdHVzIHVudGVyc3VjaGVuIChzaWVoZSBhdWNoOiBnaXQgaGVscCByZXZpc2lvbnMpIgorCisjOiBjb21tb24tY21kcy5oOjEyCittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAiSGlzdG9yaWUgZXJ3ZWl0ZXJuIHVuZCBiZWFyYmVpdGVuIgorCisjOiBjb21tb24tY21kcy5oOjEzCittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICJtaXQgYW5kZXJlbiB6dXNhbW1lbmFyYmVpdGVuIChzaWVoZSBhdWNoOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorCisjOiBjb21tb24tY21kcy5oOjE3Cittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICJEYXRlaWluaGFsdGUgenVtIENvbW1pdCB2b3JtZXJrZW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MTgKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICIiCisiQmluw6Ryc3VjaGUgdmVyd2VuZGVuLCB1bSBkZW4gQ29tbWl0IHp1IGZpbmRlbiwgZGVyIGVpbmVuIEZlaGxlciB2ZXJ1cnNhY2h0ICIKKyJoYXQiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTkKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAiQnJhbmNoZXMgYW56ZWlnZW4sIGVyc3RlbGxlbiBvZGVyIGVudGZlcm5lbiIKKworIzogY29tbW9uLWNtZHMuaDoyMAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiQnJhbmNoZXMgd2VjaHNlbG4gb2RlciBEYXRlaWVuIGltIEFyYmVpdHN2ZXJ6ZWljaG5pcyB3aWVkZXJoZXJzdGVsbGVuIgorCisjOiBjb21tb24tY21kcy5oOjIxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJlaW4gUmVwb3NpdG9yeSBpbiBlaW5lbSBuZXVlbiBWZXJ6ZWljaG5pcyBrbG9uZW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjIKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiw4RuZGVydW5nZW4gaW4gZGFzIFJlcG9zaXRvcnkgZWludHJhZ2VuIgorCisjOiBjb21tb24tY21kcy5oOjIzCittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiIgorIsOEbmRlcnVuZ2VuIHp3aXNjaGVuIENvbW1pdHMsIENvbW1pdCB1bmQgQXJiZWl0c3ZlcnplaWNobmlzLCBldGMuIGFuemVpZ2VuIgorCisjOiBjb21tb24tY21kcy5oOjI0Cittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiT2JqZWt0ZSB1bmQgUmVmZXJlbnplbiB2b24gZWluZW0gYW5kZXJlbiBSZXBvc2l0b3J5IGhlcnVudGVybGFkZW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjUKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIlplaWxlbiBkYXJzdGVsbGVuLCBkaWUgZWluZW0gTXVzdGVyIGVudHNwcmVjaGVuIgorCisjOiBjb21tb24tY21kcy5oOjI2Cittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIiIKKyJlaW4gbGVlcmVzIEdpdC1SZXBvc2l0b3J5IGVyc3RlbGxlbiBvZGVyIGVpbiBiZXN0ZWhlbmRlcyBuZXVpbml0aWFsaXNpZXJlbiIKKworIzogY29tbW9uLWNtZHMuaDoyNworbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIkNvbW1pdC1IaXN0b3JpZSBhbnplaWdlbiIKKworIzogY29tbW9uLWNtZHMuaDoyOAorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICJ6d2VpIG9kZXIgbWVociBFbnR3aWNrbHVuZ3N6d2VpZ2UgenVzYW1tZW5mw7xocmVuIgorCisjOiBjb21tb24tY21kcy5oOjI5Cittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICIiCisiZWluZSBEYXRlaSwgZWluIFZlcnplaWNobmlzLCBvZGVyIGVpbmUgc3ltYm9saXNjaGUgVmVya27DvHBmdW5nIHZlcnNjaGllYmVuICIKKyJvZGVyIHVtYmVuZW5uZW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MzAKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIiIKKyJPYmpla3RlIHZvbiBlaW5lbSBleHRlcm5lbiBSZXBvc2l0b3J5IGFuZm9yZGVybiB1bmQgc2llIG1pdCBlaW5lbSBhbmRlcmVuICIKKyJSZXBvc2l0b3J5IG9kZXIgZWluZW0gbG9rYWxlbiBCcmFuY2ggenVzYW1tZW5mw7xocmVuIgorCisjOiBjb21tb24tY21kcy5oOjMxCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJSZW1vdGUtUmVmZXJlbnplbiBtaXRzYW10IGRlbiB2ZXJidW5kZW5lbiBPYmpla3RlbiBha3R1YWxpc2llcmVuIgorCisjOiBjb21tb24tY21kcy5oOjMyCittc2dpZCAiRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCIKK21zZ3N0ciAibG9rYWxlIENvbW1pdHMgYXVmIGVpbmVtIGFrdHVlbGxlcmVtIFVwc3RyZWFtLUJyYW5jaCBuZXUgYXVmYmF1ZW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MzMKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiYWt0dWVsbGVuIEhFQUQgenUgZWluZW0gc3BlemlmaXppZXJ0ZW4gWnVzdGFuZCBzZXR6ZW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MzQKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiRGF0ZWllbiBpbSBBcmJlaXRzdmVyemVpY2huaXMgdW5kIHZvbSBJbmRleCBsw7ZzY2hlbiIKKworIzogY29tbW9uLWNtZHMuaDozNQorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICJ2ZXJzY2hpZWRlbmUgQXJ0ZW4gdm9uIE9iamVrdGVuIGFuemVpZ2VuIgorCisjOiBjb21tb24tY21kcy5oOjM2Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiZGVuIFp1c3RhbmQgZGVzIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyBhbnplaWdlbiIKKworIzogY29tbW9uLWNtZHMuaDozNworbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHIgorbXNnc3RyICIiCisiZWluIG1pdCBHUEcgc2lnbmllcnRlcyBUYWctT2JqZWt0IGVyemV1Z2VuLCBhdWZsaXN0ZW4sIGzDtnNjaGVuIG9kZXIgIgorInZlcmlmaXppZXJlbi4iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNDUKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAiVmVyZmFsbHNkYXR1bSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE2MAorbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAiS2VpbiBFZmZla3QgKFLDvGNrd8OkcnRza29tcGF0aWJpbGl0w6R0KSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIzNgorbXNnaWQgImJlIG1vcmUgdmVyYm9zZSIKK21zZ3N0ciAiZXJ3ZWl0ZXJ0ZSBBdXNnYWJlbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIzOAorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgIndlbmlnZXIgQXVzZ2FiZW4iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyNDQKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAiYmVudXR6ZSA8bj4gWmlmZmVybiB6dXIgQW56ZWlnZSB2b24gU0hBLTFzIgorCisjOiByZXJlcmUuaDoyOAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiIgorIkluZGV4LCB3ZW5uIG3DtmdsaWNoLCBtaXQgd2llZGVydmVyd2VuZGV0ZXIgS29uZmxpa3RhdWZsw7ZzdW5nIGFrdHVhbGlzaWVyZW4iCisKKyM6IGdpdC1iaXNlY3Quc2g6NTAKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiU2llIG3DvHNzZW4gbWl0IFwiZ2l0IGJpc2VjdCBzdGFydFwiIGJlZ2lubmVuLiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjU2Cittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICJXb2xsZW4gU2llLCBkYXNzIGljaCBlcyBmw7xyIFNpZSBtYWNoZSBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJGFyZyciCittc2dzdHIgIm5pY2h0IGVya2FubnRlIE9wdGlvbjogJyRhcmcnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEwMworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmcnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICInJGFyZycgc2NoZWludCBrZWluIGfDvGx0aWdlciBDb21taXQgenUgc2VpbiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzIKK21zZ2lkICJCYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEhFQUQgLSBIRUFEIHdpcmQgYmVuw7Z0aWd0IgorCisjOiBnaXQtYmlzZWN0LnNoOjE0NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNoZWNraW5nIG91dCAnJHN0YXJ0X2hlYWQnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgIiIKKyJBdXNjaGVja2VuIHZvbiAnJHN0YXJ0X2hlYWQnIGZlaGxnZXNjaGxhZ2VuLiBWZXJzdWNoZW4gU2llICdnaXQgYmlzZWN0IHJlc2V0ICIKKyI8Z8O8bHRpZ2VyLUJyYW5jaD4nLiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNTUKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gY2ctc2VlaydlZCB0cmVlIgorbXNnc3RyICIiCisiYmluw6RyZSBTdWNoZSBhdWYgZWluZW0gZHVyY2ggJ2NnLXNlZWsnIGdlw6RuZGVydGVtIFZlcnplaWNobmlzIG5pY2h0IG3DtmdsaWNoIgorCisjOiBnaXQtYmlzZWN0LnNoOjE1OQorbXNnaWQgIkJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIlVuZ8O8bHRpZ2VyIEhFQUQgLSBtZXJrd8O8cmRpZ2Ugc3ltYm9saXNjaGUgUmVmZXJlbnoiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAkc3RhdGUiCittc2dzdHIgIlVuZ8O8bHRpZ2VzIFwiYmlzZWN0X3dyaXRlXCIgQXJndW1lbnQ6ICRzdGF0ZSIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIlVuZ8O8bHRpZ2UgUmVmZXJlbnotRWluZ2FiZTogJGFyZyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTUKK21zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIkJpdHRlIHJ1ZmVuIFNpZSAnYmlzZWN0X3N0YXRlJyBtaXQgbWluZGVzdGVucyBlaW5lbSBBcmd1bWVudCBhdWYuIgorCisjOiBnaXQtYmlzZWN0LnNoOjI2NworIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJHJldiIKK21zZ3N0ciAiVW5nw7xsdGlnZSBSZWZlcmVuei1FaW5nYWJlOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcga2FubiBudXIgZWluIEFyZ3VtZW50IGVudGdlZ2VubmVobWVuLiIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJpc2VjdGluZyBvbmx5IHdpdGggYSAkVEVSTV9CQUQgY29tbWl0LiIKK21zZ3N0ciAiV2FybnVuZzogYmluw6RyZSBTdWNoZSBudXIgbWl0IGVpbmVtICRURVJNX0JBRCBDb21taXQuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6MzA1Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIlNpbmQgU2llIHNpY2hlciBbWS9uXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjMxNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICRiYWRfc3luIGFuZCBvbmUgJGdvb2Rfc3luIHJldmlzaW9uLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBhbmQgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyJTaWUgbcO8c3NlbiBtaW5kZXN0ZW5zIGVpbmVuIFwiJGJhZF9zeW5cIiB1bmQgZWluZW4gXCIkZ29vZF9zeW5cIiBDb21taXQgIgorImFuZ2ViZW4uXG4iCisiKFNpZSBrw7ZubmVuIGRhZsO8ciBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiB1bmQgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiICIKKyJiZW51dHplbi4pIgorCisjOiBnaXQtYmlzZWN0LnNoOjMyMAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJGdvb2Rfc3luIGFuZCBvbmUgJGJhZF9zeW4gcmV2aXNpb24uXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGFuZCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIlNpZSBtw7xzc2VuIG1pdCBcImdpdCBiaXNlY3Qgc3RhcnRcIiBiZWdpbm5lbi5cbiIKKyJEYW5hY2ggbcO8c3NlbiBTaWUgbWluZGVzdGVucyBlaW5lbiBcIiRnb29kX3N5blwiIHVuZCBlaW5lbiBcIiRiYWRfc3luXCIgIgorIkNvbW1pdCBhbmdlYmVuLlxuIgorIihTaWUga8O2bm5lbiBkYWbDvHIgXCJnaXQgYmlzZWN0ICRiYWRfc3luXCIgdW5kIFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiAiCisiYmVudXR6ZW4uKSIKKworIzogZ2l0LWJpc2VjdC5zaDozOTEgZ2l0LWJpc2VjdC5zaDo1MjEKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy4iCittc2dzdHIgImtlaW5lIGJpbsOkcmUgU3VjaGUgaW0gR2FuZ2UiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mzk4CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiJyRpbnZhbGlkJyBpc3Qga2VpbiBnw7xsdGlnZXIgQ29tbWl0IgorCisjOiBnaXQtYmlzZWN0LnNoOjQwNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJGJyYW5jaCcuXG4iCisiVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKyJLb25udGUgZGVuIHVyc3Byw7xuZ2xpY2hlbiBIRUFEICckYnJhbmNoJyBuaWNodCBhdXNjaGVja2VuLlxuIgorIlZlcnN1Y2hlbiBTaWUgJ2dpdCBiaXNlY3QgcmVzZXQgPENvbW1pdD4nLiIKKworIzogZ2l0LWJpc2VjdC5zaDo0MzUKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJLZWluZSBMb2ctRGF0ZWkgZ2VnZWJlbiIKKworIzogZ2l0LWJpc2VjdC5zaDo0MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgImthbm4gJGZpbGUgbmljaHQgZsO8ciBkYXMgQWJzcGllbGVuIGxlc2VuIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1NQorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8gV2FzIHJlZGVuIFNpZSBkYT8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICJmw7xocmUgJGNvbW1hbmQgYXVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisiJ2Jpc2VjdCBydW4nIGZlaGxnZXNjaGxhZ2VuOlxuIgorIlLDvGNra2VocndlcnQgJHJlcyB2b24gJyRjb21tYW5kJyBpc3QgPCAwIG9kZXIgPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjUwMAorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICInYmlzZWN0IHJ1bicga2FubiBuaWNodCBtZWhyIGZvcnRnZXNldHp0IHdlcmRlbiIKKworIzogZ2l0LWJpc2VjdC5zaDo1MDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisiJ2Jpc2VjdCBydW4nIGZlaGxnZXNjaGxhZ2VuOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyB3dXJkZSBtaXQgRmVobGVyd2VydCAkcmVzIGJlZW5kZXQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTEzCittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICInYmlzZWN0IHJ1bicgZXJmb2xncmVpY2ggYXVzZ2Vmw7xocnQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAkVEVSTV9CQUQvJFRFUk1fR09PRCBiaXNlY3QuIgorbXNnc3RyICIiCisiVW5nw7xsdGlnZXMgS29tbWFuZG86IFNpZSBzaW5kIGdlcmFkZSBiZWkgZWluZXIgYmluw6RyZW4gJFRFUk1fQkFELyRURVJNX0dPT0QgIgorIlN1Y2hlLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1NworbXNnaWQgIiIKKyJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyJUbyBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCByZWJhc2luZywgcnVuIFwiZ2l0IHJlYmFzZSAtLWFib3J0IgorIlwiLiIKK21zZ3N0ciAiIgorIldlbm4gU2llIGRhcyBQcm9ibGVtIGF1ZmdlbMO2c3QgaGFiZW4sIGbDvGhyZW4gU2llIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgIgorImF1cy5cbiIKKyJGYWxscyBTaWUgZGllc2VuIFBhdGNoIGF1c2xhc3NlbiBtw7ZjaHRlbiwgZsO8aHJlbiBTaWUgc3RhdHRkZXNzZW4gXCJnaXQgIgorInJlYmFzZSAtLXNraXBcIiBhdXMuXG4iCisiVW0gZGVuIHVyc3Byw7xuZ2xpY2hlbiBCcmFuY2ggd2llZGVyaGVyenVzdGVsbGVuIHVuZCBkZW4gUmViYXNlIGFienVicmVjaGVuLFxuIgorImbDvGhyZW4gU2llIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgYXVzLiIKKworIzogZ2l0LXJlYmFzZS5zaDoxNjUKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC4iCittc2dzdHIgIlwiYXV0b3N0YXNoXCIgYW5nZXdlbmRldC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTY4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIkthbm4gJHN0YXNoX3NoYTEgbmljaHQgc3BlaWNoZXJuLiIKKworIzogZ2l0LXJlYmFzZS5zaDoxNjkKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorIkFud2VuZHVuZyB2b24gXCJhdXRvc3Rhc2hcIiByZXN1bHRpZXJ0ZSBpbiBLb25mbGlrdGVuLlxuIgorIklocmUgw4RuZGVydW5nZW4gc2luZCBpbSBTdGFzaCBzaWNoZXIuXG4iCisiU2llIGvDtm5uZW4gamVkZXJ6ZWl0IFwiZ2l0IHN0YXNoIHBvcFwiIG9kZXIgXCJnaXQgc3Rhc2ggZHJvcFwiIGF1c2bDvGhyZW4uXG4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjA4Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIkRlciBcInByZS1yZWJhc2UgaG9va1wiIGhhdCBkZW4gUmViYXNlIHp1csO8Y2tnZXdpZXNlbi4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjEzCittc2dpZCAiSXQgbG9va3MgbGlrZSBnaXQtYW0gaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICJcImdpdC1hbVwiIHNjaGVpbnQgaW0gR2FuZ2UgenUgc2Vpbi4gS2FubiBSZWJhc2UgbmljaHQgZHVyY2hmw7xocmVuLiIKKworIzogZ2l0LXJlYmFzZS5zaDozNTEKK21zZ2lkICJUaGUgLS1leGVjIG9wdGlvbiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24iCittc2dzdHIgIkRpZSBPcHRpb24gLS1leGVjIG11c3MgbWl0IC0taW50ZXJhY3RpdmUgdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzU2Cittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiS2VpbiBSZWJhc2UgaW0gR2FuZ2U/IgorCisjOiBnaXQtcmViYXNlLnNoOjM2NworbXNnaWQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIKK21zZ3N0ciAiIgorIkRpZSAtLWVkaXQtdG9kbyBBa3Rpb24ga2FubiBudXIgd8OkaHJlbmQgZWluZXMgaW50ZXJha3RpdmVuIFJlYmFzZSB2ZXJ3ZW5kZXQgIgorIndlcmRlbi4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6Mzc0Cittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiS2FubiBIRUFEIG5pY2h0IGxlc2VuIgorCisjOiBnaXQtcmViYXNlLnNoOjM3NworbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorIlNpZSBtw7xzc2VuIGFsbGUgTWVyZ2UtS29uZmxpa3RlIGVkaXRpZXJlbiB1bmQgZGllc2UgZGFublxuIgorIm1pdHRlbHMgXCJnaXQgYWRkXCIgYWxzIGF1ZmdlbMO2c3QgbWFya2llcmVuIgorCisjOiBnaXQtcmViYXNlLnNoOjM5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorbXNnc3RyICJLb25udGUgbmljaHQgenUgJGhlYWRfbmFtZSB6dXLDvGNrZ2VoZW4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJHN0YXRlX2Rpcl9iYXNlIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JGNtZF9jbGVhcl9zdGFsZV9yZWJhc2VcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLiIKK21zZ3N0ciAiIgorIkVzIHNpZWh0IHNvIGF1cywgYWxzIG9iIGVzIGRhcyBWZXJ6ZWljaG5pcyAkc3RhdGVfZGlyX2Jhc2UgYmVyZWl0cyBnaWJ0XG4iCisidW5kIGVzIGvDtm5udGUgZWluIGFuZGVyZXIgUmViYXNlIGltIEdhbmdlIHNlaW4uIFdlbm4gZGFzIGRlciBGYWxsIGlzdCxcbiIKKyJwcm9iaWVyZW4gU2llIGJpdHRlXG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisiV2VubiBkYXMgbmljaHQgZGVyIEZhbGwgaXN0LCBwcm9iaWVyZW4gU2llIGJpdHRlXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorInVuZCBmw7xocmVuIFNpZSBkaWVzZXMgS29tbWFuZG8gbm9jaG1hbCBhdXMuIEVzIHdpcmQgYW5nZWhhbHRlbiwgZmFsbHMgbm9jaFxuIgorImV0d2FzIFNjaMO8dHplbnN3ZXJ0ZXMgdm9yaGFuZGVuIGlzdC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDY1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICR1cHN0cmVhbV9uYW1lIgorbXNnc3RyICJ1bmfDvGx0aWdlciBVcHN0cmVhbS1CcmFuY2ggJHVwc3RyZWFtX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkb250b19uYW1lOiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAiJG9udG9fbmFtZTogZXMgZ2lidCBtZWhyIGFscyBlaW5lIE1lcmdlLUJhc2lzIgorCisjOiBnaXQtcmViYXNlLnNoOjQ5MiBnaXQtcmViYXNlLnNoOjQ5NgorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJG9udG9fbmFtZTogZXMgZ2lidCBrZWluZSBNZXJnZS1CYXNpcyIKKworIzogZ2l0LXJlYmFzZS5zaDo1MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0OiAkb250b19uYW1lIgorbXNnc3RyICIkb250b19uYW1lIHplaWd0IGF1ZiBrZWluZW4gZ8O8bHRpZ2VuIENvbW1pdCIKKworIzogZ2l0LXJlYmFzZS5zaDo1MjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaDogJGJyYW5jaF9uYW1lIgorbXNnc3RyICJmYXRhbDogQnJhbmNoICRicmFuY2hfbmFtZSBuaWNodCBnZWZ1bmRlbiIKKworIzogZ2l0LXJlYmFzZS5zaDo1NTcKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICJLYW5uIFwiYXV0b3N0YXNoXCIgbmljaHQgYXVzZsO8aHJlbi4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTYyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJHN0YXNoX2FiYnJldiIKK21zZ3N0ciAiXCJhdXRvc3Rhc2hcIiBlcnpldWd0OiAkc3Rhc2hfYWJicmV2IgorCisjOiBnaXQtcmViYXNlLnNoOjU2NgorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIkJpdHRlIGNvbW1pdHRlbiBTaWUgZGllIMOEbmRlcnVuZ2VuIG9kZXIgYmVudXR6ZW4gU2llIFwic3Rhc2hcIi4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTg2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkFrdHVlbGxlciBCcmFuY2ggJGJyYW5jaF9uYW1lIGlzdCBhdWYgZGVtIG5ldWVzdGVuIFN0YW5kLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiIgorIkFrdHVlbGxlciBCcmFuY2ggJGJyYW5jaF9uYW1lIGlzdCBhdWYgZGVtIG5ldWVzdGVuIFN0YW5kLCBSZWJhc2UgZXJ6d3VuZ2VuLiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAkbWIgdG8gJG9udG86IgorbXNnc3RyICLDhG5kZXJ1bmdlbiB2b24gJG1iIHp1ICRvbnRvOiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MTAKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi4iCittc2dzdHIgIiIKKyJadW7DpGNoc3Qgd2lyZCBkZXIgQnJhbmNoIHp1csO8Y2tnZXNwdWx0LCB1bSBJaHJlIMOEbmRlcnVuZ2VuXG4iCisiZGFyYXVmIG5ldSBhbnp1d2VuZGVuIC4uLiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICRicmFuY2hfbmFtZSB0byAkb250b19uYW1lLiIKK21zZ3N0ciAiJGJyYW5jaF9uYW1lIHp1ICRvbnRvX25hbWUgdm9yZ2VzcHVsdC4iCisKKyM6IGdpdC1zdGFzaC5zaDo1MQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIG1pdCBQYXJhbWV0ZXJuIGlzdCBuaWNodCBpbXBsZW1lbnRpZXJ0IgorCisjOiBnaXQtc3Rhc2guc2g6NzQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIKK21zZ3N0ciAiU2llIGhhYmVuIGJpc2hlciBub2NoIGtlaW5lbiBpbml0aWFsZW4gQ29tbWl0IgorCisjOiBnaXQtc3Rhc2guc2g6ODkKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiS2FubiBkZW4gYWt0dWVsbGVuIFp1c3RhbmQgZGVzIEluZGV4IG5pY2h0IHNwZWljaGVybiIKKworIzogZ2l0LXN0YXNoLnNoOjEyNCBnaXQtc3Rhc2guc2g6MTM3Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIkthbm4gZGVuIGFrdHVlbGxlbiBadXN0YW5kIGRlcyBBcmJlaXRzdmVyemVpY2huaXNzZXMgbmljaHQgc3BlaWNoZXJuIgorCisjOiBnaXQtc3Rhc2guc2g6MTQxCittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAiS2VpbmUgw4RuZGVydW5nZW4gYXVzZ2V3w6RobHQiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDQKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiS2FubiB0ZW1wb3LDpHJlbiBJbmRleCBuaWNodCBsw7ZzY2hlbiAoa2FubiBuaWNodCBwYXNzaWVyZW4pIgorCisjOiBnaXQtc3Rhc2guc2g6MTU3Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIkthbm4gWnVzdGFuZCBkZXMgQXJiZWl0c3ZlcnplaWNobmlzc2VzIG5pY2h0IGF1ZnplaWNobmVuIgorCisjOiBnaXQtc3Rhc2guc2g6MTg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIkthbm4gJHJlZl9zdGFzaCBuaWNodCBtaXQgJHdfY29tbWl0IGFrdHVhbGlzaWVyZW4uIgorCisjLiBUUkFOU0xBVE9SUzogJG9wdGlvbiBpcyBhbiBpbnZhbGlkIG9wdGlvbiwgbGlrZQorIy4gYC0tYmxhaC1ibGFoJy4gVGhlIDcgc3BhY2VzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisjLiBzZWNvbmQgbGluZSBjb3JyZXNwb25kIHRvICJlcnJvcjogIi4gU28geW91IHNob3VsZCBsaW5lCisjLiB1cCB0aGUgc2Vjb25kIGxpbmUgd2l0aCBob3dldmVyIG1hbnkgY2hhcmFjdGVycyB0aGUKKyMuIHRyYW5zbGF0aW9uIG9mICJlcnJvcjogIiB0YWtlcyBpbiB5b3VyIGxhbmd1YWdlLiBFLmcuIGluCisjLiBFbmdsaXNoIHRoaXMgaXM6CisjLgorIy4gJCBnaXQgc3Rhc2ggc2F2ZSAtLWJsYWgtYmxhaCAyPiYxIHwgaGVhZCAtbiAyCisjLiBlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogLS1ibGFoLWJsYWgKKyMuIFRvIHByb3ZpZGUgYSBtZXNzYWdlLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJy0tYmxhaC1ibGFoJworIzogZ2l0LXN0YXNoLnNoOjIzOQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAkb3B0aW9uXG4iCisiICAgICAgIFRvIHByb3ZpZGUgYSBtZXNzYWdlLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorbXNnc3RyICIiCisiRmVobGVyOiB1bmJla2FubnRlIE9wdGlvbiBmw7xyICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorIiAgICAgICAgVW0gZWluZSBCZXNjaHJlaWJ1bmcgYW56dWdlYmVuLCBiZW51dHplbiBTaWUgXCJnaXQgc3Rhc2ggc2F2ZSAtLSAiCisiJyRvcHRpb24nXCIiCisKKyM6IGdpdC1zdGFzaC5zaDoyNjAKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgIktlaW5lIGxva2FsZW4gw4RuZGVydW5nZW4genVtIFNwZWljaGVybiIKKworIzogZ2l0LXN0YXNoLnNoOjI2NAorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICJLYW5uIFwic3Rhc2hcIiBuaWNodCBpbml0aWFsaXNpZXJlbiIKKworIzogZ2l0LXN0YXNoLnNoOjI2OAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAiS2FubiBkZW4gYWt0dWVsbGVuIFN0YXR1cyBuaWNodCBzcGVpY2hlcm4iCisKKyM6IGdpdC1zdGFzaC5zaDoyODYKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIkthbm4gw4RuZGVydW5nZW4gaW0gQXJiZWl0c3ZlcnplaWNobmlzIG5pY2h0IGzDtnNjaGVuIgorCisjOiBnaXQtc3Rhc2guc2g6Mzg3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9wdGlvbjogJG9wdCIKK21zZ3N0ciAidW5iZWthbm50ZSBPcHRpb246ICRvcHQiCisKKyM6IGdpdC1zdGFzaC5zaDozOTcKK21zZ2lkICJObyBzdGFzaCBmb3VuZC4iCittc2dzdHIgIktlaW4gXCJzdGFzaFwiIGdlZnVuZGVuLiIKKworIzogZ2l0LXN0YXNoLnNoOjQwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiWnUgdmllbGUgQ29tbWl0cyBhbmdlZ2ViZW46ICRSRVYiCisKKyM6IGdpdC1zdGFzaC5zaDo0MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIkcmVmZXJlbmNlIGlzdCBrZWluZSBnw7xsdGlnZSBSZWZlcmVueiIKKworIzogZ2l0LXN0YXNoLnNoOjQzOAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiJyRhcmdzJyBpc3Qga2VpbiBcInN0YXNoXCItYXJ0aWdlciBDb21taXQiCisKKyM6IGdpdC1zdGFzaC5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJGFyZ3MnIGlzdCBrZWluZSBcInN0YXNoXCItUmVmZXJlbnoiCisKKyM6IGdpdC1zdGFzaC5zaDo0NTcKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAidW5mw6RoaWcgZGVuIEluZGV4IHp1IGFrdHVhbGlzaWVyZW4iCisKKyM6IGdpdC1zdGFzaC5zaDo0NjEKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIkthbm4gXCJzdGFzaFwiIG5pY2h0IGFud2VuZGVuLCBzb2xhbmcgZWluIE1lcmdlIGltIEdhbmdlIGlzdCIKKworIzogZ2l0LXN0YXNoLnNoOjQ2OQorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIktvbmZsaWt0ZSBpbSBJbmRleC4gVmVyc3VjaGVuIFNpZSBlcyBvaG5lIC0taW5kZXguIgorCisjOiBnaXQtc3Rhc2guc2g6NDcxCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiS29ubnRlIEluZGV4LVZlcnplaWNobmlzIG5pY2h0IHNwZWljaGVybiIKKworIzogZ2l0LXN0YXNoLnNoOjUwNQorbXNnaWQgIkNhbm5vdCB1bnN0YWdlIG1vZGlmaWVkIGZpbGVzIgorbXNnc3RyICJLYW5uIGdlw6RuZGVydGUgRGF0ZWllbiBuaWNodCBhdXMgZGVtIEluZGV4IGVudGZlcm5lbiIKKworIzogZ2l0LXN0YXNoLnNoOjUyMAorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAiSW5kZXggd3VyZGUgbmljaHQgYXVzIGRlbSBTdGFzaCB6dXLDvGNrZ2VsYWRlbi4iCisKKyM6IGdpdC1zdGFzaC5zaDo1NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIkdlbMO2c2NodCAke1JFVn0gKCRzKSIKKworIzogZ2l0LXN0YXNoLnNoOjU0NAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiBLb25udGUgXCJzdGFzaFwiLUVpbnRyYWcgbmljaHQgbMO2c2NoZW4iCisKKyM6IGdpdC1zdGFzaC5zaDo1NTIKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgIktlaW4gQnJhbmNobmFtZSBzcGV6aWZpemllcnQiCisKKyM6IGdpdC1zdGFzaC5zaDo2MjQKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIihadXIgV2llZGVyaGVyc3RlbGx1bmcgZ2ViZW4gU2llIFwiZ2l0IHN0YXNoIGFwcGx5XCIgZWluKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJHJlbW90ZXVybCciCittc2dzdHIgIkthbm4gZWluZSBLb21wb25lbnRlIHZvbiBVUkwgJyRyZW1vdGV1cmwnIG5pY2h0IGV4dHJhaGllcmVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjIzNworIywgc2gtZm9ybWF0Cittc2dpZCAiTm8gc3VibW9kdWxlIG1hcHBpbmcgZm91bmQgaW4gLmdpdG1vZHVsZXMgZm9yIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiS2VpbmUgU3VibW9kdWwtWnVvcmRudW5nIGluIC5naXRtb2R1bGVzIGbDvHIgUGZhZCAnJHNtX3BhdGgnIGdlZnVuZGVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4NworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBmYWlsZWQiCittc2dzdHIgIktsb25lbiB2b24gJyR1cmwnIGluIFN1Ym1vZHVsLVBmYWQgJyRzbV9wYXRoJyBmZWhsZ2VzY2hsYWdlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyOTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkdpdGRpciAnJGEnIGlzIHBhcnQgb2YgdGhlIHN1Ym1vZHVsZSBwYXRoICckYicgb3IgdmljZSB2ZXJzYSIKK21zZ3N0ciAiR2l0LVZlcnplaWNobmlzICckYScgaXN0IFRlaWwgZGVzIFN1Ym1vZHVsLVBmYWRlcyAnJGInLCBvZGVyIHVtZ2VrZWhydCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MDYKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIlJlbGF0aXZlIFBmYWRlIGvDtm5uZW4gbnVyIHZvbiBkZXIgb2JlcnN0ZW4gRWJlbmUgZGVzIEFyYmVpdHN2ZXJ6ZWljaG5pc3NlcyAiCisiYmVudXR6dCB3ZXJkZW4uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQxNgorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAicmVwbyBVUkw6ICckcmVwbycgbXVzcyBhYnNvbHV0IHNlaW4gb2RlciBtaXQgLi98Li4vIGJlZ2lubmVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQzMworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIickc21fcGF0aCcgaXN0IGJlcmVpdHMgenVtIENvbW1pdCB2b3JnZW1lcmt0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQzNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgIiIKKyJEZXIgZm9sZ2VuZGUgUGZhZCB3aXJkIGR1cmNoIGVpbmUgSWhyZXIgXCIuZ2l0aWdub3JlXCIgRGF0ZWllbiBpZ25vcmllcnQ6XG4iCisiJHNtX3BhdGhcbiIKKyJCZW51dHplbiBTaWUgLWYgd2VubiBTaWUgZGllc2VuIHdpcmtsaWNoIGhpbnp1ZsO8Z2VuIG3DtmNodGVuLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICJGw7xnZSBleGlzdGllcmVuZGVzIFJlcG9zaXRvcnkgaW4gJyRzbV9wYXRoJyBkZW0gSW5kZXggaGluenUuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ1NworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIickc21fcGF0aCcgZXhpc3RpZXJ0IGJlcmVpdHMgdW5kIGlzdCBrZWluIGfDvGx0aWdlcyBHaXQtUmVwb3NpdG9yeSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiIgorIkVpbiBHaXQtVmVyemVpY2huaXMgZsO8ciAnJHNtX25hbWUnIHd1cmRlIGxva2FsIGdlZnVuZGVuIG1pdCBkZW4gUmVtb3RlLSIKKyJSZXBvc2l0b3JpZXM6IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbSIKK21zZ3N0ciAiIgorIldlbm4gU2llIGRpZXNlcyBsb2thbGUgR2l0LVZlcnplaWNobmlzIHdpZWRlcnZlcndlbmRlbiBtw7ZjaHRlc3QsIGFuc3RhdHQgIgorImVybmV1dCB6dSBrbG9uZW4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisidXNlIHRoZSAnLS1mb3JjZScgb3B0aW9uLiBJZiB0aGUgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpcyBub3QgdGhlIGNvcnJlY3QgcmVwbyIKK21zZ3N0ciAiIgorImJlbnV0emVuIFNpZSBkaWUgT3B0aW9uICctLWZvcmNlJy4gV2VubiBkYXMgbG9rYWxlIEdpdC1WZXJ6ZWljaG5pcyBuaWNodCBkYXMgIgorImtvcnJla3RlIFJlcG9zaXRvcnkgaXN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyJvcHRpb24uIgorbXNnc3RyICIiCisib2RlciBTaWUgc2ljaCB1bnNpY2hlciBzaW5kLCB3YXMgZGFzIGJlZGV1dGV0LCB3w6RobGVuIFNpZSBlaW5lbiBhbmRlcmVuICIKKyJOYW1lbm1pdCBkZXIgT3B0aW9uICctLW5hbWUnLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIlJlYWt0aXZpZXJlIGxva2FsZXMgR2l0LVZlcnplaWNobmlzIGbDvHIgU3VibW9kdWwgJyRzbV9uYW1lJy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDg0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkthbm4gU3VibW9kdWwgJyRzbV9wYXRoJyBuaWNodCBhdXNjaGVja2VuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiSGluenVmw7xnZW4gdm9uIFN1Ym1vZHVsICckc21fcGF0aCcgZmVobGdlc2NobGFnZW4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDk4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkZlaGxlciBiZWltIEVpbnRyYWdlbiB2b24gU3VibW9kdWwgJyRzbV9wYXRoJyBpbiBkaWUgS29uZmlndXJhdGlvbi4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTQyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJHByZWZpeCRkaXNwbGF5cGF0aCciCittc2dzdHIgIkJldHJldGUgJyRwcmVmaXgkZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU2MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBpbmcgYXQgJyRwcmVmaXgkZGlzcGxheXBhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKK21zZ3N0ciAiU3RvcHBlIGJlaSAnJHByZWZpeCRkaXNwbGF5cGF0aCc7IFNrcmlwdCBnYWIgbmljaHQtTnVsbCBTdGF0dXMgenVyw7xjay4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICJLZWluZSBVUkwgZsO8ciBTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnIGluIC5naXRtb2R1bGVzIGdlZnVuZGVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJGZWhsZXIgYmVpbSBFaW50cmFnZW4gZGVyIFVSTCBmw7xyIFN1Ym1vZHVsLVBmYWQgJyRkaXNwbGF5cGF0aCcgaW4gZGllICIKKyJLb25maWd1cmF0aW9uLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSByZWdpc3RlcmVkIGZvciBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiU3VibW9kdWwgJyRuYW1lJyAoJHVybCkgZsO8ciBQZmFkICckZGlzcGxheXBhdGgnIGluIGRpZSBLb25maWd1cmF0aW9uICIKKyJlaW5nZXRyYWdlbi4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiRmVobGVyIGJlaSDDhG5kZXJ1bmcgZGVzIEFrdHVhbGlzaWVydW5nc21vZHVzIGbDvHIgU3VibW9kdWwtUGZhZCAiCisiJyRkaXNwbGF5cGF0aCcgaW4gZGVyIEtvbmZpZ3VyYXRpb24uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiVXNlICcuJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisiVmVyd2VuZGVuIFNpZSAnLicgd2VubiBTaWUgd2lya2xpY2ggYWxsZSBTdWJtb2R1bGVcbiIKKyJkZWluaXRpYWxpc2llcmVuIG3DtmNodGVuLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorIkFyYmVpdHN2ZXJ6ZWljaG5pcyBkZXMgU3VibW9kdWxzIGluICckZGlzcGxheXBhdGgnIGVudGjDpGx0IGVpbiAuZ2l0LSIKKyJWZXJ6ZWljaG5pcyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyIodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyIoYmVudXR6ZW4gU2llICdybSAtcmYnIHdlbm4gU2llIGRpZXNlcyBTdWJtb2R1bCB3aXJrbGljaCBtaXRzYW10XG4iCisic2VpbmVyIEhpc3RvcmllIGzDtnNjaGVuIG3DtmNodGVuKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICckZGlzcGxheXBhdGgnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvICIKKyJkaXNjYXJkIHRoZW0iCittc2dzdHIgIiIKKyJBcmJlaXRzdmVyemVpY2huaXMgdm9uIFN1Ym1vZHVsIGluICckZGlzcGxheXBhdGgnIGVudGjDpGx0IGxva2FsZSDDhG5kZXJ1bmdlbjsgIgorInZlcndlbmRlbiBTaWUgJy1mJywgdW0gZGllc2UgenUgdmVyd2VyZmVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIlZlcnplaWNobmlzICckZGlzcGxheXBhdGgnIGJlcmVpbmlndC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJLb25udGUgQXJiZWl0c3ZlcnplaWNobmlzIGRlcyBTdWJtb2R1bHMgaW4gJyRkaXNwbGF5cGF0aCcgbmljaHQgbMO2c2NoZW4uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiS29ubnRlIGtlaW4gbGVlcmVzIFZlcnplaWNobmlzIGbDvHIgU3VibW9kdWwgaW4gJyRkaXNwbGF5cGF0aCcgZXJzdGVsbGVuLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJTdWJtb2R1bCAnJG5hbWUnICgkdXJsKSBmw7xyIFBmYWQgJyRkaXNwbGF5cGF0aCcgd3VyZGUgYXVzIGRlciBLb25maWd1cmF0aW9uICIKKyJlbnRmZXJudC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIiIKKyJTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnIGlzdCBuaWNodCBpbml0aWFsaXNpZXJ0LlxuIgorIlZpZWxsZWljaHQgbcO2Y2h0ZW4gU2llICd1cGRhdGUgLS1pbml0JyBiZW51dHplbj8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJLb25udGUgYWt0dWVsbGVuIENvbW1pdCBpbiBTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnIG5pY2h0IGZpbmRlbi4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODUyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiS29ubnRlIFwiZmV0Y2hcIiBpbiBTdWJtb2R1bC1QZmFkICckc21fcGF0aCcgbmljaHQgYXVzZsO8aHJlbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiS29ubnRlIFwiZmV0Y2hcIiBpbiBTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnIG5pY2h0IGF1c2bDvGhyZW4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiS29ubnRlICckc2hhMScgaW4gU3VibW9kdWwtUGZhZCAnJGRpc3BsYXlwYXRoJyBuaWNodCBhdXNjaGVja2VuLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICJTdWJtb2R1bC1QZmFkOiAnJGRpc3BsYXlwYXRoJzogJyRzaGExJyBhdXNnZWNoZWNrdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiUmViYXNlIGF1ZiAnJHNoYTEnIGluIFN1Ym1vZHVsLVBmYWQgJyRkaXNwbGF5cGF0aCcgbmljaHQgbcO2Z2xpY2giCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIlN1Ym1vZHVsLVBmYWQgJyRkaXNwbGF5cGF0aCc6IFJlYmFzZSBhdWYgJyRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJNZXJnZSB2b24gJyRzaGExJyBpbiBTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnIGZlaGxnZXNjaGxhZ2VuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwMgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICJTdWJtb2R1bC1QZmFkICckZGlzcGxheXBhdGgnOiB6dXNhbW1lbmdlZsO8aHJ0IGluICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiRXhlY3V0aW9uIG9mICckY29tbWFuZCAkc2hhMScgZmFpbGVkIGluIHN1Ym1vZHVsZSBwYXRoICckcHJlZml4JHNtX3BhdGgnIgorbXNnc3RyICIiCisiQXVzZsO8aHJ1bmcgdm9uICckY29tbWFuZCAkc2hhMScgaW4gU3VibW9kdWwtUGZhZCAnJHByZWZpeCRzbV9wYXRoJyAiCisiZmVobGdlc2NobGFnZW4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHByZWZpeCRzbV9wYXRoJzogJyRjb21tYW5kICRzaGExJyIKK21zZ3N0ciAiU3VibW9kdWwtUGZhZCAnJHByZWZpeCRzbV9wYXRoJzogJyRjb21tYW5kICRzaGExJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkZlaGxlciBiZWkgUmVrdXJzaW9uIGluIFN1Ym1vZHVsLVBmYWQgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA0NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIiIKKyJEaWUgT3B0aW9uZW4gLS1jYWNoZWQgdW5kIC0tZmlsZXMga8O2bm5lbiBuaWNodCBnZW1laW5zYW0gdmVyd2VuZGV0IHdlcmRlbi4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA5OAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJ1bmVyd2FydGV0ZXIgTW9kdXMgJG1vZF9kc3QiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTExOAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfc3JjIgorbXNnc3RyICIgIFdhcm51bmc6ICRkaXNwbGF5X25hbWUgYmVpbmhhbHRldCBuaWNodCBDb21taXQgJHNoYTFfc3JjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICBXYXJudW5nOiAkZGlzcGxheV9uYW1lIGJlaW5oYWx0ZXQgbmljaHQgQ29tbWl0ICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKyIgIFdhcm51bmc6ICRkaXNwbGF5X25hbWUgYmVpbmhhbHRldCBuaWNodCBkaWUgQ29tbWl0cyAkc2hhMV9zcmMgdW5kICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTQ5Cittc2dpZCAiYmxvYiIKK21zZ3N0ciAiQmxvYiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMjY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIkZlaGxlciBiZWkgUmVrdXJzaW9uIGluIFN1Ym1vZHVsLVBmYWQgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMzMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJTeW5jaHJvbmlzaWVyZSBTdWJtb2R1bC1VUkwgZsO8ciAnJGRpc3BsYXlwYXRoJyIKKworI34gbXNnaWQgImZhbHNlfHRydWV8cHJlc2VydmUiCisjfiBtc2dzdHIgImZhbHNlfHRydWV8cHJlc2VydmUiCisKKyN+IG1zZ2lkICJCVUc6IHJlb3BlbiBhIGxvY2tmaWxlIHRoYXQgaXMgc3RpbGwgb3BlbiIKKyN+IG1zZ3N0ciAiRkVITEVSOiBXaWVkZXLDtmZmbmVuIGVpbmVyIGJlcmVpdHMgZ2XDtmZmbmV0ZW4gTG9jay1EYXRlaSIKKworI34gbXNnaWQgIkJVRzogcmVvcGVuIGEgbG9ja2ZpbGUgdGhhdCBoYXMgYmVlbiBjb21taXR0ZWQiCisjfiBtc2dzdHIgIkZFSExFUjogV2llZGVyw7ZmZm5lbiBlaW5lciBiZXJlaXRzIGNvbW1pdHRldGVuIExvY2stRGF0ZWkiCisKKyN+IG1zZ2lkICJvcHRpb24gJXMgZG9lcyBub3QgYWNjZXB0IG5lZ2F0aXZlIGZvcm0iCisjfiBtc2dzdHIgIk9wdGlvbiAlcyBha3plcHRpZXJ0IGtlaW5lIG5lZ2F0aXZlIEZvcm0iCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gcGFyc2UgdmFsdWUgJyVzJyBmb3Igb3B0aW9uICVzIgorI34gbXNnc3RyICJrb25udGUgV2VydCAnJXMnIGbDvHIgT3B0aW9uICVzIG5pY2h0IHBhcnNlbiIKKworI34gbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQiCisjfiBtc2dzdHIgIktvbm50ZSBIRUFEIG5pY2h0IGF1ZmzDtnNlbi4iCisKKyN+IG1zZ2lkICItYiBhbmQgLUIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKKyN+IG1zZ3N0ciAiLWIgdW5kIC1CIHNjaGxpZcOfZW4gc2ljaCBnZWdlbnNlaXRpZyBhdXMiCisKKyN+IG1zZ2lkICJZb3UgbmVlZCB0byBzZXQgeW91ciBjb21taXR0ZXIgaW5mbyBmaXJzdCIKKyN+IG1zZ3N0ciAiU2llIG3DvHNzZW4genVlcnN0IGRpZSBJbmZvcm1hdGlvbmVuIHp1bSBDb21taXQtRXJzdGVsbGVyIHNldHplbi4iCisKKyN+IG1zZ2lkICIiCisjfiAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiRjbWRsaW5lIC0tY29udGludWVcIi5cbiIKKyN+ICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyN+ICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnQiCisjfiAiXCIuIgorI34gbXNnc3RyICIiCisjfiAiV2VubiBTaWUgZGFzIFByb2JsZW0gZ2Vsw7ZzdCBoYWJlbiwgZsO8aHJlbiBTaWUgXCIkY21kbGluZSAtLWNvbnRpbnVlXCIgIgorI34gImF1cy5cbiIKKyN+ICJGYWxscyBTaWUgZGllc2VuIFBhdGNoIGF1c2xhc3NlbiBtw7ZjaHRlbiwgZsO8aHJlbiBTaWUgc3RhdHRkZXNzZW5cbiIKKyN+ICJcIiRjbWRsaW5lIC0tc2tpcFwiIGF1cy5cbiIKKyN+ICJVbSBkZW4gdXJzcHLDvG5nbGljaGVuIEJyYW5jaCB3aWVkZXJoZXJ6dXN0ZWxsZW4gdW5kIGRpZSBBbndlbmR1bmcgZGVyXG4iCisjfiAiUGF0Y2hlcyBhYnp1YnJlY2hlbiwgZsO8aHJlbiBTaWUgXCIkY21kbGluZSAtLWFib3J0XCIgYXVzLiIKKworI34gbXNnaWQgIlBhdGNoIGZvcm1hdCAkcGF0Y2hfZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIgorI34gbXNnc3RyICJQYXRjaC1Gb3JtYXQgJHBhdGNoX2Zvcm1hdCB3aXJkIG5pY2h0IHVudGVyc3TDvHR6dC4iCisKKyN+IG1zZ2lkICJQbGVhc2UgbWFrZSB1cCB5b3VyIG1pbmQuIC0tc2tpcCBvciAtLWFib3J0PyIKKyN+IG1zZ3N0ciAiQml0dGUgd2VyZGVuIFNpZSBzaWNoIGtsYXIuIC0tc2tpcCBvZGVyIC0tYWJvcnQ/IgorCisjfiBtc2dpZCAiIgorI34gIlBhdGNoIGlzIGVtcHR5LiAgV2FzIGl0IHNwbGl0IHdyb25nP1xuIgorI34gIklmIHlvdSB3b3VsZCBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBpbnN0ZWFkIHJ1biBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorI34gIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZyBydW4gXCIkY21kbGluZSAtLWFib3J0XCIuIgorI34gbXNnc3RyICIiCisjfiAiUGF0Y2ggaXN0IGxlZXIuIFd1cmRlIGVyIGZhbHNjaCBhdWZnZXRlaWx0P1xuIgorI34gIldlbm4gU2llIGRpZXNlbiBQYXRjaCBhdXNsYXNzZW4gbcO2Y2h0ZW4sIGbDvGhyZW4gU2llIHN0YXR0ZGVzc2VuXG4iCisjfiAiXCIkY21kbGluZSAtLXNraXBcIiBhdXMuXG4iCisjfiAiVW0gZGVuIHVyc3Byw7xuZ2xpY2hlbiBCcmFuY2ggd2llZGVyaGVyenVzdGVsbGVuIHVuZCBkaWUgQW53ZW5kdW5nIGRlciAiCisjfiAiUGF0Y2hlc1xuIgorI34gImFienVicmVjaGVuLCBmw7xocmVuIFNpZSBcIiRjbWRsaW5lIC0tYWJvcnRcIiBhdXMuIgorCisjfiBtc2dpZCAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKKyN+IG1zZ3N0ciAiUGF0Y2ggZW50aMOkbHQga2VpbmUgZ8O8bHRpZ2UgRS1NYWlsLUFkcmVzc2UuIgorCisjfiBtc2dpZCAiQXBwbHlpbmc6ICRGSVJTVExJTkUiCisjfiBtc2dzdHIgIldlbmRlIGFuOiAkRklSU1RMSU5FIgorCisjfiBtc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICRtc2dudW0gJEZJUlNUTElORSIKKyN+IG1zZ3N0ciAiQW53ZW5kdW5nIGRlcyBQYXRjaGVzIGZlaGxnZXNjaGxhZ2VuIGJlaSAkbXNnbnVtICRGSVJTVExJTkUiCisKKyN+IG1zZ2lkICIiCisjfiAiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy5cbiIKKyN+ICJQbGVhc2UsIGZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisjfiAiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKKyN+IG1zZ3N0ciAiIgorI34gIlwicHVsbFwiIGlzdCBuaWNodCBtw7ZnbGljaCwgd2VpbCBTaWUgbmljaHQgenVzYW1tZW5nZWbDvGhydGUgRGF0ZWllbiAiCisjfiAiaGFiZW4uXG4iCisjfiAiQml0dGUga29ycmlnaWVyZW4gU2llIGRpZXMgaW0gQXJiZWl0c3ZlcnplaWNobmlzIHVuZCBiZW51dHplbiBTaWUgZGFublxuIgorI34gIidnaXQgYWRkL3JtIDxEYXRlaT4nLCB1bSBkaWUgQXVmbMO2c3VuZyBlbnRzcHJlY2hlbmQgenUgbWFya2llcmVuIHVuZCB6dVxuIgorI34gImNvbW1pdHRlbi4iCisKKyN+IG1zZ2lkICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKKyN+IG1zZ3N0ciAiIgorI34gIlwicHVsbFwiIGlzdCBuaWNodCBtw7ZnbGljaCwgd2VpbCBTaWUgbmljaHQgenVzYW1tZW5nZWbDvGhydGUgRGF0ZWllbiBoYWJlbi4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisjfiAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKKyN+IG1zZ3N0ciAiIgorI34gIlNpZSBoYWJlbiBJaHJlbiBNZXJnZSBuaWNodCBhYmdlc2NobG9zc2VuIChNRVJHRV9IRUFEIGV4aXN0aWVydCkuXG4iCisjfiAiQml0dGUgY29tbWl0dGVuIFNpZSBJaHJlIMOEbmRlcnVuZ2VuLCBiZXZvciBTaWUgXCJtZXJnZVwiIGF1c2bDvGhyZW4ga8O2bm5lbi4iCisKKyN+IG1zZ2lkICJubyBicmFuY2ggc3BlY2lmaWVkIgorI34gbXNnc3RyICJLZWluIEJyYW5jaCBzcGV6aWZpemllcnQiCisKKyN+IG1zZ2lkICJjaGVjayBhIGJyYW5jaCBvdXQgaW4gYSBzZXBhcmF0ZSB3b3JraW5nIGRpcmVjdG9yeSIKKyN+IG1zZ3N0ciAiQnJhbmNoIGluIHNlcGFyYXRlbSBBcmJlaXRzdmVyemVpY2huaXMgYXVzY2hlY2tlbiIKKworI34gbXNnaWQgInBydW5lIC5naXQvd29ya3RyZWVzIgorI34gbXNnc3RyICIiCisjfiAiSW5mb3JtYXRpb25lbiB6dSBuaWNodCBtZWhyIGV4aXN0aWVyZW5kZW4gQXJiZWl0c3ZlcnplaWNobmlzc2VuIGluIC5naXQvIgorI34gIndvcmt0cmVlcyBlbnRmZXJuZW4iCisKKyN+IG1zZ2lkICItLXdvcmt0cmVlcyBkb2VzIG5vdCB0YWtlIGV4dHJhIGFyZ3VtZW50cyIKKyN+IG1zZ3N0ciAiLS13b3JrdHJlZXMgYWt6ZXB0aWVydCBrZWluZSB3ZWl0ZXJlbiBBcmd1bWVudGUiCisKKyN+IG1zZ2lkICJUaGUgbW9zdCBjb21tb25seSB1c2VkIGdpdCBjb21tYW5kcyBhcmU6IgorI34gbXNnc3RyICJEaWUgYWxsZ2VtZWluIHZlcndlbmRldGVuIEdpdC1Lb21tYW5kb3Mgc2luZDoiCisKKyN+IG1zZ2lkICJObyBzdWNoIGJyYW5jaDogJyVzJyIKKyN+IG1zZ3N0ciAiS2VpbiBzb2xjaGVyIEJyYW5jaCAnJXMnIgorCisjfiBtc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBnaXQgbGluayAlcyIKKyN+IG1zZ3N0ciAiS29ubnRlIGdpdC1WZXJ3ZWlzICVzIG5pY2h0IGVyc3RlbGxlbiIKKworI34gbXNnaWQgIkludmFsaWQgZ2MucHJ1bmVleHBpcmU6ICclcyciCisjfiBtc2dzdHIgIlVuZ8O8bHRpZ2VzIFdlcnQgZsO8ciBcImdjLnBydW5lZXhwaXJlXCI6ICclcyciCisKKyN+IG1zZ2lkICIoZGV0YWNoZWQgZnJvbSAlcykiCisjfiBtc2dzdHIgIihsb3NnZWzDtnN0IHZvbiAlcykiCisKKyN+IG1zZ2lkICJzZWFyY2ggYWxzbyBpbiBpZ25vcmVkIGZpbGVzIgorI34gbXNnc3RyICJhdWNoIGluIGlnbm9yaWVydGVuIERhdGVpZW4gc3VjaGVuIgorCisjfiBtc2dpZCAiTm8gZXhpc3RpbmcgYXV0aG9yIGZvdW5kIHdpdGggJyVzJyIKKyN+IG1zZ3N0ciAiS2VpbiBleGlzdGllcmVuZGVyIEF1dG9yIG1pdCAnJXMnIGdlZnVuZGVuLiIKKworI34gbXNnaWQgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfDxicmFuY2g+KSIKKyN+IG1zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8TmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxCcmFuY2g+KSIKKworI34gbXNnaWQgIm5vIGZpbGVzIGFkZGVkIgorI34gbXNnc3RyICJrZWluZSBEYXRlaWVuIGhpbnp1Z2Vmw7xndCIKKworI34gbXNnaWQgImZvcmNlIGNyZWF0aW9uICh3aGVuIGFscmVhZHkgZXhpc3RzKSIKKyN+IG1zZ3N0ciAiQnJhbmNoIGF1Y2ggZXJ6ZXVnZW4sIHdlbm4gZGllc2VyIGJlcmVpdHMgZXhpc3RpZXJ0IgorCisjfiBtc2dpZCAiTWFsZm9ybWVkIGlkZW50IHN0cmluZzogJyVzJyIKKyN+IG1zZ3N0ciAiRmVobGVyaGFmdGVyIElkZW50LVN0cmluZzogJyVzJyIKKworI34gbXNnaWQgInNsb3QiCisjfiBtc2dzdHIgIlNsb3QiCisKKyN+IG1zZ2lkICJjaGVjayIKKyN+IG1zZ3N0ciAiY2hlY2t8b24tZGVtYW5kIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIGxvY2sgcmVmIGZvciB1cGRhdGUiCisjfiBtc2dzdHIgIkZlaGxlciBiZWltIFNwZXJyZW4gZGVyIFJlZmVyZW56IHp1ciBBa3R1YWxpc2llcnVuZy4iCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gd3JpdGUgcmVmIgorI34gbXNnc3RyICJGZWhsZXIgYmVpbSBTY2hyZWliZW4gZGVyIFJlZmVyZW56LiIKKworI34gbXNnaWQgIkZhaWxlZCB0byBsb2NrIEhFQUQgZHVyaW5nIGZhc3RfZm9yd2FyZF90byIKKyN+IG1zZ3N0ciAiRmVobGVyIGJlaW0gU3BlcnJlbiB2b24gSEVBRCB3w6RocmVuZCBmYXN0X2ZvcndhcmRfdG8iCisKKyN+IG1zZ2lkICJpbnZhbGlkIGNvbW1pdDogJXMiCisjfiBtc2dzdHIgIlVuZ8O8bHRpZ2VyIENvbW1pdDogJXMiCisKKyN+IG1zZ2lkICJjYW5ub3QgbG9jayBIRUFEIHJlZiIKKyN+IG1zZ3N0ciAiS2FubiBSZWZlcmVueiB2b24gSEVBRCBuaWNodCBzcGVycmVuLiIKKworI34gbXNnaWQgImNhbm5vdCB1cGRhdGUgSEVBRCByZWYiCisjfiBtc2dzdHIgIkthbm4gUmVmZXJlbnogdm9uIEhFQUQgbmljaHQgYWt0dWFsaXNpZXJlbi4iCisKKyN+IG1zZ2lkICJjYW5ub3QgdGVsbCBjd2QiCisjfiBtc2dzdHIgImthbm4gYWt0dWVsbGVzIEFyYmVpdHN2ZXJ6ZWljaG5pcyBuaWNodCBlcm1pdHRlbG4iCisKKyN+IG1zZ2lkICIlczogY2Fubm90IGxvY2sgdGhlIHJlZiIKKyN+IG1zZ3N0ciAiJXM6IGthbm4gUmVmZXJlbnogbmljaHQgc3BlcnJlbiIKKworI34gbXNnaWQgIiVzOiBjYW5ub3QgdXBkYXRlIHRoZSByZWYiCisjfiBtc2dzdHIgIiVzOiBrYW5uIFJlZmVyZW56IG5pY2h0IGFrdHVhbGlzaWVyZW4iCisKKyN+IG1zZ2lkICJjb21taXQgaGFzIGVtcHR5IG1lc3NhZ2UiCisjfiBtc2dzdHIgIkNvbW1pdCBoYXQgZWluZSBsZWVyZSBCZXNjaHJlaWJ1bmciCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gY2hkaXI6ICVzIgorI34gbXNnc3RyICJGZWhsZXIgYmVpbSBWZXJ6ZWljaG5pc3dlY2hzZWw6ICVzIgorCisjfiBtc2dpZCAia2V5IGlkIgorI34gbXNnc3RyICJTY2hsw7xzc2VsLUlEIgorCisjfiBtc2dpZCAiVHJhY2tpbmcgbm90IHNldCB1cDogbmFtZSB0b28gbG9uZzogJXMiCisjfiBtc2dzdHIgIiIKKyN+ICJLb25maWd1cmF0aW9uIHp1bSBGb2xnZW4gdm9uIEJyYW5jaCBuaWNodCBlaW5nZXJpY2h0ZXQuIE5hbWUgenUgbGFuZzogJXMiCisKKyN+IG1zZ2lkICJidWciCisjfiBtc2dzdHIgIkZlaGxlciIKKworI34gbXNnaWQgImFoZWFkICIKKyN+IG1zZ3N0ciAidm9yYXVzICIKKworI34gbXNnaWQgIiwgYmVoaW5kICIKKyN+IG1zZ3N0ciAiLCBoaW50ZXJoZXIgIgorCisjfiBtc2dpZCAiY291bGQgbm90IGZpbmQgLmdpdG1vZHVsZXMgaW4gaW5kZXgiCisjfiBtc2dzdHIgIktvbm50ZSAuZ2l0bW9kdWxlcyBuaWNodCBpbiBkZXIgU3RhZ2luZy1BcmVhIGZpbmRlbiIKKworI34gbXNnaWQgInJlYWRpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCisjfiBtc2dzdHIgIkxlc2VuIGRlciBha3R1YWxpc2llcnRlbiAuZ2l0bW9kdWxlcy1EYXRlaSBmZWhsZ2VzY2hsYWdlbiIKKworI34gbXNnaWQgInVuYWJsZSB0byBzdGF0IHVwZGF0ZWQgLmdpdG1vZHVsZXMiCisjfiBtc2dzdHIgIktvbm50ZSBha3R1YWxpc2llcnRlIC5naXRtb2R1bGVzLURhdGVpIG5pY2h0IGxlc2VuIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAuZ2l0bW9kdWxlcyBmcm9tIGluZGV4IgorI34gbXNnc3RyICJLb25udGUgLmdpdG1vZHVsZXMgbmljaHQgYXVzIGRlciBTdGFnaW5nLUFyZWEgZW50ZmVybmVuIgorCisjfiBtc2dpZCAiYWRkaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorI34gbXNnc3RyICJLb25udGUgYWt0dWFsaXNpZXJ0ZSAuZ2l0bW9kdWxlcy1EYXRlaSBuaWNodCBoaW56dWbDvGdlbiIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgYmVoYXZpb3Igb2YgJ2dpdCBhZGQgJXMgKG9yICVzKScgd2l0aCBubyBwYXRoIGFyZ3VtZW50IGZyb20gYVxuIgorI34gInN1YmRpcmVjdG9yeSBvZiB0aGUgdHJlZSB3aWxsIGNoYW5nZSBpbiBHaXQgMi4wIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgIgorI34gImFueW1vcmUuXG4iCisjfiAiVG8gYWRkIGNvbnRlbnQgZm9yIHRoZSB3aG9sZSB0cmVlLCBydW46XG4iCisjfiAiXG4iCisjfiAiICBnaXQgYWRkICVzIDovXG4iCisjfiAiICAob3IgZ2l0IGFkZCAlcyA6LylcbiIKKyN+ICJcbiIKKyN+ICJUbyByZXN0cmljdCB0aGUgY29tbWFuZCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnksIHJ1bjpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBhZGQgJXMgLlxuIgorI34gIiAgKG9yIGdpdCBhZGQgJXMgLilcbiIKKyN+ICJcbiIKKyN+ICJXaXRoIHRoZSBjdXJyZW50IEdpdCB2ZXJzaW9uLCB0aGUgY29tbWFuZCBpcyByZXN0cmljdGVkIHRvIHRoZSBjdXJyZW50ICIKKyN+ICJkaXJlY3RvcnkuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJEYXMgVmVyaGFsdGVuIHZvbiAnZ2l0IGFkZCAlcyAob2RlciAlcyknIG9obmUgZWluIFBmYWQtQXJndW1lbnQgdm9uXG4iCisjfiAiZWluZW0gVW50ZXJ2ZXJ6ZWljaG5pcyBhdXMgd2lyZCBpbiBHaXQgMi4wIGdlw6RuZGVydCB1bmQgc29sbHRlIG5pY2h0XG4iCisjfiAibWVociB2ZXJ3ZW5kZXQgd2VyZGVuLlxuIgorI34gIlVtIERhdGVpZW4gZGVzIGdlc2FtdGVuIFByb2pla3R2ZXJ6ZWljaG5pc3NlcyBoaW56dXp1ZsO8Z2VuLCBmw7xocmVuIFNpZSAiCisjfiAiYXVzOlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGFkZCAlcyA6L1xuIgorI34gIiAgKG9kZXIgZ2l0IGFkZCAlcyA6LylcbiIKKyN+ICJcbiIKKyN+ICJadXIgRWluc2NocsOkbmt1bmcgYXVmIGRhcyBha3R1ZWxsZSBWZXJ6ZWljaG5pcyBmw7xocmVuIFNpZSBhdXM6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgYWRkICVzIC5cbiIKKyN+ICIgIChvZGVyIGdpdCBhZGQgJXMgLilcbiIKKyN+ICJcbiIKKyN+ICJNaXQgZGVyIGFrdHVlbGxlbiBWZXJzaW9uIHZvbiBHaXQgaXN0IGRhcyBLb21tYW5kbyBhdWYgZGFzIGFrdHVlbGxlXG4iCisjfiAiVmVyemVpY2huaXMgYmVzY2hyw6Rua3QuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJhbiAnZ2l0IGFkZCcgd2l0aCBuZWl0aGVyICctQSAoLS1hbGwpJyBvciAnLS1pZ25vcmUtcmVtb3ZhbCcsXG4iCisjfiAid2hvc2UgYmVoYXZpb3VyIHdpbGwgY2hhbmdlIGluIEdpdCAyLjAgd2l0aCByZXNwZWN0IHRvIHBhdGhzIHlvdSAiCisjfiAicmVtb3ZlZC5cbiIKKyN+ICJQYXRocyBsaWtlICclcycgdGhhdCBhcmVcbiIKKyN+ICJyZW1vdmVkIGZyb20geW91ciB3b3JraW5nIHRyZWUgYXJlIGlnbm9yZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgR2l0LlxuIgorI34gIlxuIgorI34gIiogJ2dpdCBhZGQgLS1pZ25vcmUtcmVtb3ZhbCA8cGF0aHNwZWM+Jywgd2hpY2ggaXMgdGhlIGN1cnJlbnQgZGVmYXVsdCxcbiIKKyN+ICIgIGlnbm9yZXMgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyN+ICJcbiIKKyN+ICIqICdnaXQgYWRkIC0tYWxsIDxwYXRoc3BlYz4nIHdpbGwgbGV0IHlvdSBhbHNvIHJlY29yZCB0aGUgcmVtb3ZhbHMuXG4iCisjfiAiXG4iCisjfiAiUnVuICdnaXQgc3RhdHVzJyB0byBjaGVjayB0aGUgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlNpZSBoYWJlbiAnZ2l0IGFkZCcgd2VkZXIgbWl0ICctQSAoLS1hbGwpJyBub2NoIG1pdCAnLS1pZ25vcmUtcmVtb3ZhbCdcbiIKKyN+ICJhdXNnZWbDvGhydC4gRGFzIFZlcmhhbHRlbiBkZXMgS29tbWFuZG9zIMOkbmRlcnQgc2ljaCBpbiBHaXQgMi4wIGR1cmNoXG4iCisjfiAiQmVyw7xja3NpY2h0aWd1bmcgZGVyIGdlbMO2c2NodGVuIFBmYWRlLlxuIgorI34gIlBmYWRlIHdpZSAnJXMnLCBkaWUgaW0gQXJiZWl0c3ZlcnplaWNobmlzIGdlbMO2c2NodCB3dXJkZW4sIHdlcmRlbiBpblxuIgorI34gImRpZXNlciBWZXJzaW9uIHZvbiBHaXQgaWdub3JpZXJ0LlxuIgorI34gIlxuIgorI34gIiogJ2dpdCBhZGQgLS1pZ25vcmUtcmVtb3ZhbCA8UGZhZHNwZXppZmlrYXRpb24+Jywgd2FzIGRlciBha3R1ZWxsZVxuIgorI34gIiAgU3RhbmRhcmR3ZXJ0IGlzdCwgaWdub3JpZXJ0IGdlbMO2c2NodGUgUGZhZGUgaW0gQXJiZWl0c3ZlcnplaWNobmlzLlxuIgorI34gIiogJ2dpdCBhZGQgLS1hbGwgPFBmYWRzcGV6aWZpa2F0aW9uPicgYmVyw7xja3NpY2h0aWd0IGViZW5mYWxscyBnZWzDtnNjaHRlXG4iCisjfiAiICBQZmFkZS5cbiIKKyN+ICJGw7xocmVuIFNpZSAnZ2l0IHN0YXR1cycgYXVzLCB1bSBkaWUgZ2Vsw7ZzY2h0ZW4gUGZhZGUgenUgw7xiZXJwcsO8ZmVuLlxuIgorCisjfiBtc2dpZCAiIgorI34gIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS4gWW91IG1heSBhbHNvXG4iCisjfiAicnVuIFwiZ2l0IGdjXCIgbWFudWFsbHkuIFNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJEaWUgRGF0ZW5iYW5rIGRlcyBSZXBvc2l0b3JpZXMgd2lyZCBmw7xyIGVpbmUgb3B0aW1hbGUgUGVyZm9ybWFuY2VcbiIKKyN+ICJrb21wcmltaWVydC4gU2llIGvDtm5uZW4gYXVjaCBcImdpdCBnY1wiIG1hbnVlbGwgYXVzZsO8aHJlbi5cbiIKKyN+ICJTaWVoZSBcImdpdCBoZWxwIGdjXCIgZsO8ciB3ZWl0ZXJlIEluZm9ybWF0aW9uZW4uXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorI34gImNvdW50ZXJwYXJ0LiBJZiB5b3UgZGlkIG5vdCBpbnRlbmQgdG8gcHVzaCB0aGF0IGJyYW5jaCwgeW91IG1heSB3YW50IHRvXG4iCisjfiAic3BlY2lmeSBicmFuY2hlcyB0byBwdXNoIG9yIHNldCB0aGUgJ3B1c2guZGVmYXVsdCcgY29uZmlndXJhdGlvbiAiCisjfiAidmFyaWFibGVcbiIKKyN+ICJ0byAnc2ltcGxlJywgJ2N1cnJlbnQnIG9yICd1cHN0cmVhbScgdG8gcHVzaCBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaC4iCisjfiBtc2dzdHIgIiIKKyN+ICJBa3R1YWxpc2llcnVuZ2VuIHd1cmRlbiB6dXLDvGNrZ2V3aWVzZW4sIHdlaWwgZGllIFNwaXR6ZSBlaW5lcyAiCisjfiAidmVyc2VuZGV0ZW5cbiIKKyN+ICJCcmFuY2hlcyBoaW50ZXIgc2VpbmVtIGV4dGVybmVuIEdlZ2Vuc3TDvGNrIHp1csO8Y2tnZWZhbGxlbiBpc3QuIFdlbm4gU2llICIKKyN+ICJuaWNodFxuIgorI34gImJlYWJzaWNodGlndCBoYWJlbiwgZGllc2VuIEJyYW5jaCB6dSB2ZXJzZW5kZW4sIGvDtm5uZW4gU2llIGF1Y2ggZGVuIHp1ICIKKyN+ICJ2ZXJzZW5kZW5kZW5cbiIKKyN+ICJCcmFuY2ggc3BlemlmaXppZXJlbiBvZGVyIGRpZSBLb25maWd1cmF0aW9uc3ZhcmlhYmxlICdwdXNoLmRlZmF1bHQnIHp1ICIKKyN+ICInc2ltcGxlJywgJ2N1cnJlbnQnXG4iCisjfiAib2RlciAndXBzdHJlYW0nIHNldHplbiwgdW0gbnVyIGRlbiBha3R1ZWxsZW4gQnJhbmNoIHp1IHZlcnNlbmRlbi4iCisKKyN+IG1zZ2lkICJjb3BpZWQ6ICAgICAlcyAtPiAlcyIKKyN+IG1zZ3N0ciAia29waWVydDogICAgICVzIC0+ICVzIgorCisjfiBtc2dpZCAiZGVsZXRlZDogICAgJXMiCisjfiBtc2dzdHIgImdlbMO2c2NodDogICAgJXMiCisKKyN+IG1zZ2lkICJtb2RpZmllZDogICAlcyIKKyN+IG1zZ3N0ciAiZ2XDpG5kZXJ0OiAgICVzIgorCisjfiBtc2dpZCAicmVuYW1lZDogICAgJXMgLT4gJXMiCisjfiBtc2dzdHIgInVtYmVuYW5udDogICAgJXMgLT4gJXMiCisKKyN+IG1zZ2lkICJ1bm1lcmdlZDogICAlcyIKKyN+IG1zZ3N0ciAibmljaHQgenVzYW1tZW5nZWbDvGhydDogICAlcyIKKworI34gbXNnaWQgImlucHV0IHBhdGhzIGFyZSB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBjaGFyYWN0ZXIiCisjfiBtc2dzdHIgIkVpbmdhYmVwZmFkZSBzaW5kIGR1cmNoIGVpbiBOVUwgWmVpY2hlbiBhYmdlc2NobG9zc2VuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIGZpbGVzIHdvdWxkIE5PVCBiZSBzYXZlZCBidXQgbmVlZCB0byBiZSByZW1vdmVkICIKKyN+ICJieSBzdGFzaCBzYXZlOiIKKyN+IG1zZ3N0ciAiIgorI34gIkRpZSBmb2xnZW5kZW4gdW5iZW9iYWNodGV0ZW4gRGF0ZWllbiB3w7xyZGVuIE5JQ0hUIGdlc3BlaWNoZXJ0IHdlcmRlbixcbiIKKyN+ICJtw7xzc2VuIGFiZXIgZHVyY2ggXCJzdGFzaCBzYXZlXCIgZW50ZmVybnQgd2VyZGVuOiIKKworI34gbXNnaWQgIiIKKyN+ICJBYm9ydGluZy4gQ29uc2lkZXIgdXNpbmcgZWl0aGVyIHRoZSAtLWZvcmNlIG9yIC0taW5jbHVkZS11bnRyYWNrZWQgb3B0aW9uLiIKKyN+IG1zZ3N0ciAiIgorI34gIkFiZ2Vicm9jaGVuLiBCZW51dHplbiBTaWUgZW50d2VkZXIgZGllIE9wdGlvbiAtLWZvcmNlIG9kZXIgLS1pbmNsdWRlLSIKKyN+ICJ1bnRyYWNrZWQuIgorCisjfiBtc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1yZXNvbHZlZFwiKSIKKyN+IG1zZ3N0ciAiIgorI34gIiAgKGJlaGViZW4gU2llIGRpZSBLb25mbGlrdGUgdW5kIGbDvGhyZW4gU2llIGRhbm4gXCJnaXQgYW0gLS1yZXNvbHZlZFwiICIKKyN+ICJhdXMpIgorCisjfiBtc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNvbW1pdFwiKSIKKyN+IG1zZ3N0ciAiICAoYWxsZSBLb25mbGlrdGUgYmVob2JlbjogZsO8aHJlbiBTaWUgXCJnaXQgY29tbWl0XCIgYXVzKSIKKworI34gbXNnaWQgIm1vcmUgdGhhbiAlZCB0cmVlcyBnaXZlbjogJyVzJyIKKyN+IG1zZ3N0ciAiTWVociBhbHMgJWQgXCJUcmVlXCItT2JqZWt0ZSBhbmdlZ2ViZW46ICclcyciCisKKyN+IG1zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1uby1mZiB3aXRoIC0tZmYtb25seS4iCisjfiBtc2dzdHIgIlNpZSBrw7ZubmVuIC0tbm8tZmYgbmljaHQgbWl0IC0tZmYtLW9ubHkga29tYmluaWVyZW4uIgorCisjfiBtc2dpZCAiIgorI34gInN1Ym1vZHVsZSAnJXMnIChvciBvbmUgb2YgaXRzIG5lc3RlZCBzdWJtb2R1bGVzKSB1c2VzIGEgLmdpdCBkaXJlY3RvcnlcbiIKKyN+ICIodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgIgorI34gImhpc3RvcnkpIgorI34gbXNnc3RyICIiCisjfiAiU3VibW9kdWwgJyVzJyAob2RlciBlaW4gZ2VzY2hhY2h0ZWx0ZXMgU3VibW9kdWwgaGllcnZvbikgdmVyd2VuZGV0XG4iCisjfiAiZWluIC5naXQtVmVyemVpY2huaXMgKGJlbnV0emVuIFNpZSAncm0gLXJmJyB3ZW5uIFNpZSBkaWVzZXMgd2lya2xpY2ggIgorI34gIm1pdHNhbXRcbiIKKyN+ICJzZWluZXIgSGlzdG9yaWUgbMO2c2NoZW4gbcO2Y2h0ZW4pIgorCisjfiBtc2dpZCAiIgorI34gIiclcycgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleFxuIgorI34gIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCisjfiBtc2dzdHIgIiIKKyN+ICInJXMnIGhhdCB6dW0gQ29tbWl0IHZvcmdlbWVya3RlIMOEbmRlcnVuZ2VuXG4iCisjfiAiKGJlbnV0emVuIFNpZSAtLWNhY2hlZCB1bSBkaWUgRGF0ZWkgenUgYmVoYWx0ZW4sIG9kZXIgLWYgdW0gZGllICIKKyN+ICJFbnRmZXJudW5nIHp1IGVyendpbmdlbikiCisKKyN+IG1zZ2lkICJzaG93IGNvbW1pdHMgd2hlcmUgbm8gcGFyZW50IGNvbWVzIGJlZm9yZSBpdHMgY2hpbGRyZW4iCisjfiBtc2dzdHIgIiIKKyN+ICJ6ZWlndCBDb21taXRzLCBiZWkgZGVuZW4ga2VpbiBFbHRlcm4tQ29tbWl0IHZvciBzZWluZW0gS2luZC1Db21taXQga29tbXQiCisKKyN+IG1zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSIKKyN+IG1zZ3N0ciAiemVpZ3QgUmVmZXJlbnogdm9uIEhFQUQiCisKKyN+IG1zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRwcmVmaXgkc21fcGF0aCciCisjfiBtc2dzdHIgIktvbm50ZSBcImZldGNoXCIgaW4gU3VibW9kdWwtUGZhZCAnJHByZWZpeCRzbV9wYXRoJyBuaWNodCBhdXNmw7xocmVuIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJHByZWZpeCRzbV9wYXRoJyIKKyN+IG1zZ3N0ciAiRmVobGVyIGJlaSBSZWt1cnNpb24gaW4gU3VibW9kdWwtUGZhZCAnJHByZWZpeCRzbV9wYXRoJyIKKworI34gbXNnaWQgIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICAnc3RhdHVzIC11bm8nIgorI34gbXNnc3RyICIiCisjfiAiRXMgZGF1ZXJ0ZSAlLjJmIFNla3VuZGVuIGRpZSB1bmJlb2JhY2h0ZXRlbiBEYXRlaWVuIHp1IGJlc3RpbW1lbi4nc3RhdHVzIC0iCisjfiAidW5vJyIKKworI34gbXNnaWQgIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGQiCisjfiBtc2dzdHIgImvDtm5udGUgZGFzIGJlc2NobGV1bmlnZW4sIGFiZXIgU2llIG3DvHNzZW4gZGFyYXVmIGFjaHRlbiwgbmV1ZSIKKworI34gbXNnaWQgIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCisjfiBtc2dzdHIgIkRhdGVpZW4gc2VsYnN0c3TDpG5kaWcgaGluenV6dWbDvGdlbiAoc2llaGUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKKworI34gbXNnaWQgImdpdCBzaG9ydGxvZyBbLW5dIFstc10gWy1lXSBbLXddIFtyZXYtb3B0c10gWy0tXSBbPGNvbW1pdC1pZD4uLi4gXSIKKyN+IG1zZ3N0ciAiIgorI34gImdpdCBzaG9ydGxvZyBbLW5dIFstc10gWy1lXSBbLXddIFtyZXYtb3B0c10gWy0tXSAiCisjfiAiWzxWZXJzaW9uc2lkZW50aWZpa2F0aW9uPi4uLiBdIgorCisjfiBtc2dpZCAiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJTaWVoZSAnZ2l0IGhlbHAgPEtvbW1hbmRvPicgZsO8ciB3ZWl0ZXJlIEluZm9ybWF0aW9uZW4genUgZWluZW0gIgorI34gInNwZXppZmlzY2hlbiBLb21tYW5kbyIKKworI34gbXNnaWQgInVzZSBhbnkgcmVmIGluIC5naXQvcmVmcyIKKyN+IG1zZ3N0ciAidmVyd2VuZGV0IGFsbGUgUmVmZXJlbnplbiBpbiAuZ2l0L3JlZnMiCisKKyN+IG1zZ2lkICJ1c2UgYW55IHRhZyBpbiAuZ2l0L3JlZnMvdGFncyIKKyN+IG1zZ3N0ciAidmVyd2VuZGV0IGFsbGUgTWFya2llcnVuZ2VuIGluIC5naXQvcmVmcy90YWdzIgorCisjfiBtc2dpZCAiYmFkIG9iamVjdCAlcyIKKyN+IG1zZ3N0ciAidW5nw7xsdGlnZXMgT2JqZWt0ICVzIgorCisjfiBtc2dpZCAiYm9ndXMgY29tbWl0dGVyIGluZm8gJXMiCisjfiBtc2dzdHIgInVuZWNodGUgRWlucmVpY2hlci1JbmZvcm1hdGlvbmVuICVzIgorCisjfiBtc2dpZCAiY2FuJ3QgZmRvcGVuICdzaG93JyBvdXRwdXQgZmQiCisjfiBtc2dzdHIgImtvbm50ZSBEYXRlaS1EZXNrcmlwdG9yIGbDvHIgQXVzZ2FiZSB2b24gJ3Nob3cnIG5pY2h0IMO2ZmZuZW4iCisKKyN+IG1zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorI34gbXNnc3RyICIiCisjfiAiU2NobGllw59lbiBkZXIgVmVyYmluZHVuZyB6dSAnc2hvdycgaXN0IGbDvHIgT2JqZWt0ICclcycgZmVobGdlc2NobGFnZW4uIgorCisjfiBtc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRCIKKyN+IG1zZ3N0ciAiU2llIGhhYmVuIGtlaW5lIGfDvGx0aWdlIFp3ZWlnc3BpdHplIChIRUFEKSIKKworI34gbXNnaWQgIm9vcHMiCisjfiBtc2dzdHIgIlVwcyIKKworI34gbXNnaWQgIldvdWxkIG5vdCByZW1vdmUgJXNcbiIKKyN+IG1zZ3N0ciAiV8O8cmRlICclcycgbmljaHQgbMO2c2NoZW5cbiIKKworI34gbXNnaWQgIk5vdCByZW1vdmluZyAlc1xuIgorI34gbXNnc3RyICJFbnRmZXJuZSBuaWNodCAlc1xuIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHJlYWQgaW5kZXgiCisjfiBtc2dzdHIgIktvbm50ZSBCZXJlaXRzdGVsbHVuZyBuaWNodCBsZXNlbiIKKworI34gbXNnaWQgIiAwIGZpbGVzIGNoYW5nZWQiCisjfiBtc2dzdHIgIiAwIERhdGVpZW4gZ2XDpG5kZXJ0IgorCisjfiBtc2dpZCAiICVkIGZpbGUgY2hhbmdlZCIKKyN+IG1zZ2lkX3BsdXJhbCAiICVkIGZpbGVzIGNoYW5nZWQiCisjfiBtc2dzdHJbMF0gIiAlZCBEYXRlaSBnZcOkbmRlcnQiCisjfiBtc2dzdHJbMV0gIiAlZCBEYXRlaWVuIGdlw6RuZGVydCIKKworI34gbXNnaWQgIiwgJWQgaW5zZXJ0aW9uKCspIgorI34gbXNnaWRfcGx1cmFsICIsICVkIGluc2VydGlvbnMoKykiCisjfiBtc2dzdHJbMF0gIiwgJWQgWmVpbGUgaGluenVnZWbDvGd0KCspIgorI34gbXNnc3RyWzFdICIsICVkIFplaWxlbiBoaW56dWdlZsO8Z3QoKykiCisKKyN+IG1zZ2lkICIsICVkIGRlbGV0aW9uKC0pIgorI34gbXNnaWRfcGx1cmFsICIsICVkIGRlbGV0aW9ucygtKSIKKyN+IG1zZ3N0clswXSAiLCAlZCBaZWlsZSBlbnRmZXJudCgtKSIKKyN+IG1zZ3N0clsxXSAiLCAlZCBaZWlsZW4gZW50ZmVybnQoLSkiCisKKyN+IG1zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtZCB8IDxicmFuY2g+XSkiCisjfiBtc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPE5hbWU+ICgtYSB8IC1kIHwgPFp3ZWlnPl0pIgorCisjfiBtc2dpZCAiICh1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spIgorI34gbXNnc3RyICIgKGJlbnV0emUgXCJnaXQgYWRkXCIgenVtIEJlb2JhY2h0ZW4pIgorCisjfiBtc2dpZCAiLS1kZXRhY2ggY2Fubm90IGJlIHVzZWQgd2l0aCAtYi8tQi8tLW9ycGhhbiIKKyN+IG1zZ3N0ciAiLS1kZXRhY2gga2FubiBuaWNodCBtaXQgLWIvLUIvLS1vcnBoYW4gYmVudXR6dCB3ZXJkZW4iCisKKyN+IG1zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorI34gbXNnc3RyICItLWRldGFjaCBrYW5uIG5pY2h0IG1pdCAtdCBiZW51dHp0IHdlcmRlbiIKKworI34gbXNnaWQgIi0tb3JwaGFuIGFuZCAtYnwtQiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorI34gbXNnc3RyICItLW9ycGhhbiB1bmQgLWJ8LUIgc2luZCBnZWdlbnNlaXRpZyBleGtsdXNpdiIKKworI34gbXNnaWQgIi0tb3JwaGFuIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCisjfiBtc2dzdHIgIi0tb3JwaGFuIGthbm4gbmljaHQgbWl0IC10IGJlbnV0enQgd2VyZGVuIgorCisjfiBtc2dpZCAiZ2l0IGNoZWNrb3V0OiAtZiBhbmQgLW0gYXJlIGluY29tcGF0aWJsZSIKKyN+IG1zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtZiB1bmQgLW0gc2luZCBpbmtvbXBhdGliZWwiCisKKyN+IG1zZ2lkICIiCisjfiAiZ2l0IGNoZWNrb3V0OiB1cGRhdGluZyBwYXRocyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuIgorI34gbXNnc3RyICIiCisjfiAiZ2l0IGNoZWNrb3V0OiBEaWUgQWt0dWFsaXNpZXJ1bmcgdm9uIFBmYWRlbiBpc3QgaW5rb21wYXRpYmVsIG1pdCBkZW0gIgorI34gIldlY2hzZWwgdm9uIFp3ZWlnZW4uIgorCisjfiBtc2dpZCAiZGlmZiBzZXR1cCBmYWlsZWQiCisjfiBtc2dzdHIgImRpZmZfc2V0dXBfZG9uZSBmZWhsZ2VzY2hsYWdlbiIKKworI34gbXNnaWQgIm1lcmdlLXJlY3Vyc2l2ZTogZGlzayBmdWxsPyIKKyN+IG1zZ3N0ciAibWVyZ2UtcmVjdXJzaXZlOiBGZXN0cGxhdHRlIHZvbGw/IgorCisjfiBtc2dpZCAiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIKKyN+IG1zZ3N0ciAiZGlmZl9zZXR1cF9kb25lIGZlaGxnZXNjaGxhZ2VuIgorCisjfiBtc2dpZCAiLWQgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBEbyBub3QgdXNlLiIKKyN+IG1zZ3N0ciAiLWQgT3B0aW9uIHdpcmQgbmljaHQgbMOkbmdlciB1bnRlcnN0w7x0enQuIE5pY2h0IGJlbnV0emVuLiIKKworI34gbXNnaWQgIiVzOiBoYXMgYmVlbiBkZWxldGVkL3JlbmFtZWQiCisjfiBtc2dzdHIgIiVzIHd1cmRlIGdlbMO2c2NodC91bWJlbmFubnQiCisKKyN+IG1zZ2lkICInJXMnOiBub3QgYSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4iCisjfiBtc2dzdHIgIiclcycgaXN0IGtlaW4gRG9rdW1lbnRhdGlvbnN2ZXJ6ZWljaG5pcyIKKworI34gbXNnaWQgIi0tIgorI34gbXNnc3RyICItLSIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBleHRyYWN0IGVtYWlsIGZyb20gY29tbWl0dGVyIGlkZW50aXR5LiIKKyN+IG1zZ3N0ciAiS29ubnRlIEUtTWFpbC1BZHJlc3NlIGRlcyBFaW5yZWljaGVycyBuaWNodCBleHRyYWhpZXJlbi4iCisKKyN+IG1zZ2lkICJjaGVycnktcGljayIKKyN+IG1zZ3N0ciAiY2hlcnJ5LXBpY2siCisKKyN+IG1zZ2lkICIiCisjfiAiVG8gcHJldmVudCB5b3UgZnJvbSBsb3NpbmcgaGlzdG9yeSwgbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGVzIHdlcmUgIgorI34gInJlamVjdGVkXG4iCisjfiAiTWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuICdnaXQgcHVsbCcpIGJlZm9yZSBwdXNoaW5nIGFnYWluLiAgU2VlICIKKyN+ICJ0aGVcbiIKKyN+ICInTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBzZWN0aW9uIG9mICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLlxuIgorI34gbXNnc3RyICIiCisjfiAiVW0gZGljaCB2b3IgVmVybHVzdCB2b24gSGlzdG9yaWUgenUgYmV3YWhyZW4sIHd1cmRlbiBuaWNodCB2b3J6dXNwdWxlbmRlICIKKyN+ICJBa3R1YWxpc2llcnVuZ2VuIHp1csO8Y2tnZXdpZXNlbi5cbiIKKyN+ICJGw7xocmUgZGllIGV4dGVybmVuIMOEbmRlcnVuZ2VuIHp1c2FtbWVuICh6LkIuICdnaXQgcHVsbCcpIGJldm9yIGR1IGVybmV1dCAiCisjfiAidmVyc2VuZGVzdC4gU2llaGUgYXVjaCBkaWUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgU2VrdGlvbiB2b24gXG4iCisjfiAiJ2dpdCBwdXNoIC0taGVscCcgZsO8ciB3ZWl0ZXJlIERldGFpbHMuXG4iCmRpZmYgLS1naXQgYS9wby9mci5wbyBiL3BvL2ZyLnBvCmluZGV4IDgwZjcyZmIuLjU4MTE2N2YgMTAwNjQ0Ci0tLSBhL3BvL2ZyLnBvCisrKyBiL3BvL2ZyLnBvCkBAIC0xLDE0MTkgKzEsMTI0MTQgQEAKLSMgRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBnaXRrIHBhY2thZ2UKLSMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggUGF1bCBNYWNrZXJyYXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgotIyBUcmFuc2xhdG9yczoKLSMgRW1tYW51ZWwgVHJpbGxhdWQgPGV0cmlsbGF1ZEBnbWFpbC5jb20+CisjIEZyZW5jaCB0cmFuc2xhdGlvbnMgZm9yIEdpdC4KKyMgQ29weXJpZ2h0IChDKSAyMDE1IEplYW4tTm/Dq2wgQXZpbGEgPGpuLmF2aWxhQGZyZWUuZnI+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMgSmVhbi1Ob8OrbCBBdmlsYSA8am4uYXZpbGFAZnJlZS5mcj4sIDIwMTUuCisjIFPDqWJhc3RpZW4gSGVsbGV1IDxmbGFzaGNvZGVAZmxhc2h0dXgub3JnPiwgMjAxMy4KKyMKKyMgRnJlbmNoIHRyYW5zbGF0aW9ucyBvZiBjb21tb24gR2l0IHdvcmRzIHVzZWQgaW4gdGhpcyBmaWxlOgorIworIyAgIEVuZ2xpc2ggICAgICAgICAgfCAgRnJlbmNoCisjICAgLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgMy13YXkgbWVyZ2UgICAgICB8ICBmdXNpb24gw6AgMyBwb2ludHMKKyMgICAjTk4gICAgICAgICAgICAgIHwgIG7CsE5OCisjICAgYSBjb21taXQgICAgICAgICB8ICB1biBjb21taXQKKyMgICBiYWNrd2FyZCAgICAgICAgIHwKKyMgICAgIGNvbXBhdGliaWxpdHkgIHwgIHLDqXRyb2NvbXBhdGliaWxpdMOpCisjICAgYmFyZSByZXBvc2l0b3J5ICB8ICBkw6lww7R0IG51CisjICAgYmlzZWN0ICAgICAgICAgICB8ICBiaXNzZWN0aW9uCisjICAgYmxvYiAgICAgICAgICAgICB8ICBibG9iCisjICAgYnVnICAgICAgICAgICAgICB8ICBib2d1ZQorIyAgIGJ1bmRsZSAgICAgICAgICAgfCAgY29saXMKKyMgICBieXBhc3MgICAgICAgICAgIHwgIMOpdml0ZXIgZCd1dGlsaXNlcgorIyAgIHRvIGNoZWNrb3V0ICAgICAgfCAgZXh0cmFpcmUKKyMgICBjaGVycnktcGljayAgICAgIHwgIHBpY29yZXIKKyMgICB0byBjb21taXQgICAgICAgIHwgIHZhbGlkZXIKKyMgICBjb21taXQtaXNoICAgICAgIHwgIGNvbW1pdCBvdSBhcHBhcmVudMOpCisjICAgY29uZmlnIGZpbGUgICAgICB8ICBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24KKyMgICBkYW5nbGluZyAgICAgICAgIHwgIGVuIHN1c3BlbnMKKyMgICB0byBkZWJ1ZyAgICAgICAgIHwgIGTDqWJvZ3VlcgorIyAgIGRlYnVnZ2luZyAgICAgICAgfCAgZMOpYm9nYWdlCisjICAgdG8gZGVmbGF0ZSAgICAgICB8ICBjb21wcmVzc2VyCisjICAgZW1haWwgICAgICAgICAgICB8ICBlLW1haWwKKyMgICBlbnRyeSAgICAgICAgICAgIHwgIMOpbMOpbWVudAorIyAgIGZhc3QtZm9yd2FyZCAgICAgfCAgYXZhbmNlIHJhcGlkZQorIyAgIGZhc3QtZm9yd2FyZGVkICAgfCAgbWlzIMOgIGpvdXIgZW4gYXZhbmNlIHJhcGlkZQorIyAgIHRvIGZldGNoICAgICAgICAgfCAgcmFwYXRyaWVyCisjICAgZml4IGNvbmZsaWN0cyAgICB8ICByw6lnbGV6IGxlcyBjb25mbGl0cworIyAgIHRvIGZvcm1hdCAgICAgICAgfCAgZm9ybWF0ZXIKKyMgICBnbG9iICAgICAgICAgICAgIHwgIGdsb2IKKyMgICBoYXNoICAgICAgICAgICAgIHwgIGhhY2hhZ2UKKyMgICBIRUFEICAgICAgICAgICAgIHwgIEhFQUQgKGdlbnJlIGbDqW1pbmluKQorIyAgIGhvb2sgICAgICAgICAgICAgfCAgY3JvY2hldAorIyAgIGh1bmsgICAgICAgICAgICAgfCAgc2VjdGlvbgorIyAgIHRvIGluZmxhdGUgICAgICAgfCAgZMOpY29tcHJlc3NlcgorIyAgIHRvIGxpc3QgICAgICAgICAgfCAgYWZmaWNoZXIKKyMgICBtYXBwaW5nICAgICAgICAgIHwgIG1pc2UgZW4gY29ycmVzcG9uZGFuY2UKKyMgICBtZXJnZSAgICAgICAgICAgIHwgIGZ1c2lvbgorIyAgIHBhY2sgICAgICAgICAgICAgfCAgcGFxdWV0CisjICAgcGF0Y2hlcyAgICAgICAgICB8ICBwYXRjaHMKKyMgICBwYXR0ZXJuICAgICAgICAgIHwgIG1vdGlmCisjICAgdG8gcHJ1bmUgICAgICAgICB8ICDDqWxpbWluZXIKKyMgICB0byBwdXNoICAgICAgICAgIHwgIHBvdXNzZXIKKyMgICB0byByZWJhc2UgICAgICAgIHwgIHJlYmFzZXIKKyMgICByZXBvc2l0b3J5ICAgICAgIHwgIGTDqXDDtHQKKyMgICByZW1vdGUgICAgICAgICAgIHwgIGRpc3RhbnRlIChvdSBzZXJ2ZXVyIGRpc3RhbnQpCisjICAgcmV2aXNpb24gICAgICAgICB8ICByw6l2aXNpb24KKyMgICBzaGFsbG93ICAgICAgICAgIHwgIHN1cGVyZmljaWVsCisjICAgc2hlbGwgICAgICAgICAgICB8ICBpbnRlcnByw6l0ZXVyIGRlIGNvbW1hbmRlcworIyAgIHN0YXNoICAgICAgICAgICAgfCAgcmVtaXNhZ2UKKyMgICB0byBzdGFzaCAgICAgICAgIHwgIHJlbWlzZXIKKyMgICB0YWcgICAgICAgICAgICAgIHwgIMOpdGlxdWV0dGUKKyMgICB0ZW1wbGF0ZSAgICAgICAgIHwgIG1vZMOobGUKKyMgICB0aHJlYWQgICAgICAgICAgIHwgIGZpbAorIyAgIHRvIHRyYWNrICAgICAgICAgfCAgc3VpdnJlCisjICAgdHJlZSAgICAgICAgICAgICB8ICBhcmJyZQorIyAgIHRyZWUtaXNoICAgICAgICAgfCAgYXJicmUgb3UgYXBwYXJlbnTDqQorIyAgIHRvIHVuc3RhZ2UgICAgICAgfCAgZMOpc2luZGV4ZXIKKyMgICB1cHN0cmVhbSAgICAgICAgIHwgIGFtb250CisjICAgdmlld2VyICAgICAgICAgICB8ICB2aXN1YWxpc2V1cgorIyAgIHdvcmt0cmVlIC8gICAgICAgfAorIyAgIHdvcmsoaW5nKSB0cmVlICAgfCAgY29waWUgZGUgdHJhdmFpbAogIwogbXNnaWQgIiIKIG1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0a1xuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAxNDozMisxMDAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0xMS0xOSAyMjoxMyswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBFbW1hbnVlbCBUcmlsbGF1ZCA8ZXRyaWxsYXVkQGdtYWlsLmNvbT5cbiIKLSJMYW5ndWFnZS1UZWFtOiBnaXRAdmdlci5rZXJuZWwub3JnXG4iCi0iTGFuZ3VhZ2U6IFxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDktMTUgMDY6NDUrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMDktMTUgMjA6MjArMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogSmVhbi1Ob8OrbCBBdmlsYSA8am4uYXZpbGFAZnJlZS5mcj5cbiIKKyJMYW5ndWFnZS1UZWFtOiBKZWFuLU5vw6tsIEF2aWxhIDxqbi5hdmlsYUBmcmVlLmZyPlxuIgorIkxhbmd1YWdlOiBmclxuIgogIk1JTUUtVmVyc2lvbjogMS4wXG4iCiAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCiAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgotIlgtUG9lZGl0LUxhbmd1YWdlOiBGcmVuY2hcbiIKLSJYLVBvZWRpdC1Db3VudHJ5OiBGUkFOQ0VcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD1uPD0xID8wIDogMTtcbiIKIAotIzogZ2l0azoxNDAKLW1zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCi1tc2dzdHIgIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGEgbGlzdGUgZGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzIDoiCisjOiBhZHZpY2UuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiAlLipzXG4iCittc2dzdHIgImFzdHVjZTogJS4qc1xuIgogCi0jOiBnaXRrOjIxMiBnaXRrOjIzODEKLW1zZ2lkICJDb2xvciB3b3JkcyIKLW1zZ3N0ciAiIgotCi0jOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MwotbXNnaWQgIk1hcmt1cCB3b3JkcyIKLW1zZ3N0ciAiIgotCi0jOiBnaXRrOjMyNAotbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKLW1zZ3N0ciAiRXJyZXVyIGxvcnMgZHUgcGFyY291cnMgZGVzIHLDqXZpc2lvbnMgOiIKLQotIzogZ2l0azozODAKLW1zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgotbXNnc3RyICJFcnJldXIgw6AgbCdleMOpY3V0aW9uIGRlIGxhIGNvbW1hbmRlIC0tYXJnc2NtZCA6IgotCi0jOiBnaXRrOjM5MwotbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKLW1zZ3N0ciAiIgotIkF1Y3VuIGZpY2hpZXIgc8OpbGVjdGlvbm7DqSA6IC0tbWVyZ2UgcHLDqWNpc8OpLCBtYWlzIHRvdXMgbGVzIGZpY2hpZXJzIHNvbnQgIgotImZ1c2lvbm7DqXMuIgotCi0jIEZJWE1FIDogYW3DqWxpb3JlciBsYSB0cmFkdWN0aW9uIGRlICdmaWxlIGxpbWl0ZScKLSM6IGdpdGs6Mzk2Ci0jLCBmdXp6eQorIzogYWR2aWNlLmM6ODgKIG1zZ2lkICIiCi0iTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgotImxpbWl0LiIKKyJGaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCiBtc2dzdHIgIiIKLSJBdWN1biBmaWNoaWVyIHPDqWxlY3Rpb25uw6kgOiAtLW1lcmdlIHByw6ljaXPDqSBtYWlzIGF1Y3VuIGZpY2hpZXIgbm9uIGZ1c2lvbm7DqSAiCi0ibidlc3QgZGFucyBsYSBsaW1pdGUgZGVzIGZpY2hpZXJzLiIKKyJDb3JyaWdlei1sZXMgcHVpcyBsYW5jZXogJ2dpdCBhZGQvcm0gPGZpY2hpZXI+J1xuIgorInNpIG7DqWNlc3NhaXJlIHBvdXIgbWFycXVlciBsYSByw6lzb2x1dGlvbiBldCB2YWxpZGVyLiIKIAotIzogZ2l0azo0MTggZ2l0azo1NjYKLW1zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCi1tc2dzdHIgIkVycmV1ciDDoCBsJ2V4w6ljdXRpb24gZGUgZ2l0IGxvZyA6IgorIzogYWR2aWNlLmM6MTAxIGJ1aWx0aW4vbWVyZ2UuYzoxMjI3Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICJWb3VzIG4nYXZleiBwYXMgdGVybWluw6kgdm90cmUgZnVzaW9uIChNRVJHRV9IRUFEIGV4aXN0ZSkuIgogCi0jOiBnaXRrOjQzNiBnaXRrOjU4MgotbXNnaWQgIlJlYWRpbmciCi1tc2dzdHIgIkxlY3R1cmUgZW4gY291cnMiCisjOiBhZHZpY2UuYzoxMDMKK21zZ2lkICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIgorbXNnc3RyICJWZXVpbGxleiB2YWxpZGVyIHZvcyBjaGFuZ2VtZW50cyBhdmFudCBkZSBwb3V2b2lyIGZ1c2lvbm5lci4iCiAKLSM6IGdpdGs6NDk2IGdpdGs6NDUyNQotbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKLW1zZ3N0ciAiTGVjdHVyZSBkZXMgY29tbWl0cy4uLiIKKyM6IGFkdmljZS5jOjEwNAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIKK21zZ3N0ciAiQWJhbmRvbiDDoCBjYXVzZSBkJ3VuZSBmdXNpb24gbm9uIHRlcm1pbsOpZS4iCiAKLSM6IGdpdGs6NDk5IGdpdGs6MTYzNyBnaXRrOjQ1MjgKLW1zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgotbXNnc3RyICJBdWN1biBjb21taXQgc8OpbGVjdGlvbm7DqSIKKyM6IGFyY2hpdmUuYzoxMgorbXNnaWQgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDxhcmJyZSBvdSBhcHBhcmVudMOpPiBbPGNoZW1pbj4uLi5dIgogCi0jOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKLW1zZ2lkICJDb21tYW5kIGxpbmUiCi1tc2dzdHIgIkxpZ25lIGRlIGNvbW1hbmRlIgorIzogYXJjaGl2ZS5jOjEzCittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCiAKLSM6IGdpdGs6MTUxMQotbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIGxhIHNvcnRpZSBkZSBnaXQgbG9nIDoiCisjOiBhcmNoaXZlLmM6MTQKK21zZ2lkICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8ZMOpcMO0dD4gWy0tZXhlYyA8Y29tbWFuZGU+XSBbPG9wdGlvbnM+XSA8YXJicmUgb3UgIgorImFwcGFyZW50w6k+IFs8Y2hlbWluPi4uLl0iCiAKLSM6IGdpdGs6MTc0MAotbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCi1tc2dzdHIgIkF1Y3VuZSBpbmZvcm1hdGlvbiBkaXNwb25pYmxlIHN1ciBsZSBjb21taXQiCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8ZMOpcMO0dD4gWy0tZXhlYyA8Y29tbWFuZGU+XSAtLWxpc3QiCiAKLSM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKLW1zZ2lkICJPSyIKLW1zZ3N0ciAiT0siCisjOiBhcmNoaXZlLmM6MzQzIGJ1aWx0aW4vYWRkLmM6MTM3IGJ1aWx0aW4vYWRkLmM6NDI2IGJ1aWx0aW4vcm0uYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAibGUgY2hlbWluICclcycgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBmaWNoaWVyIgogCi0jOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKLSM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAiQW5udWxlciIKKyM6IGFyY2hpdmUuYzo0MjgKK21zZ2lkICJmbXQiCittc2dzdHIgImZtdCIKIAotIzogZ2l0azoyMDY5Ci1tc2dpZCAiJlVwZGF0ZSIKLW1zZ3N0ciAiTWlzZSDDoCBqb3VyIgorIzogYXJjaGl2ZS5jOjQyOAorbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICJmb3JtYXQgZCdhcmNoaXZlIgogCi0jOiBnaXRrOjIwNzAKLW1zZ2lkICImUmVsb2FkIgotbXNnc3RyICJSZWNoYXJnZXIiCisjOiBhcmNoaXZlLmM6NDI5IGJ1aWx0aW4vbG9nLmM6MTIyOQorbXNnaWQgInByZWZpeCIKK21zZ3N0ciAicHLDqWZpeGUiCiAKLSM6IGdpdGs6MjA3MQotbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKLW1zZ3N0ciAiUmVsaXJlIGxlcyByw6lmw6lyZW5jZXMiCisjOiBhcmNoaXZlLmM6NDMwCittc2dpZCAicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIKK21zZ3N0ciAicHLDqWZpeGVyIGNoYXF1ZSBjaGVtaW4gZGUgZmljaGllciBkYW5zIGwnYXJjaGl2ZSIKIAotIzogZ2l0azoyMDcyCi1tc2dpZCAiJkxpc3QgcmVmZXJlbmNlcyIKLW1zZ3N0ciAiTGlzdGVyIGxlcyByw6lmw6lyZW5jZXMiCisjOiBhcmNoaXZlLmM6NDMxIGJ1aWx0aW4vYXJjaGl2ZS5jOjg4IGJ1aWx0aW4vYmxhbWUuYzoyNTE2IGJ1aWx0aW4vYmxhbWUuYzoyNTE3CisjOiBidWlsdGluL2NvbmZpZy5jOjU4IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODcgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4OQorIzogYnVpbHRpbi9ncmVwLmM6NzEyIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OSBidWlsdGluL2xzLWZpbGVzLmM6NDQ2CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQ5IGJ1aWx0aW4vbm90ZXMuYzozOTUgYnVpbHRpbi9ub3Rlcy5jOjU1OAorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMDkgcGFyc2Utb3B0aW9ucy5oOjE1MworbXNnaWQgImZpbGUiCittc2dzdHIgImZpY2hpZXIiCiAKLSM6IGdpdGs6MjA3NAotbXNnaWQgIlN0YXJ0IGdpdCAmZ3VpIgotbXNnc3RyICJEw6ltYXJyZXIgZ2l0IGd1aSIKKyM6IGFyY2hpdmUuYzo0MzIgYnVpbHRpbi9hcmNoaXZlLmM6ODkKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgIsOpY3JpcmUgbCdhcmNoaXZlIGRhbnMgY2UgZmljaGllciIKIAotIzogZ2l0azoyMDc2Ci1tc2dpZCAiJlF1aXQiCi1tc2dzdHIgIlF1aXR0ZXIiCisjOiBhcmNoaXZlLmM6NDM0Cittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAibGlyZSAuZ2l0YXR0cmlidXRlcyBkYW5zIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwiCiAKLSM6IGdpdGs6MjA2OAotbXNnaWQgIiZGaWxlIgotbXNnc3RyICJGaWNoaWVyIgorIzogYXJjaGl2ZS5jOjQzNQorbXNnaWQgInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiCittc2dzdHIgImFmZmljaGVyIGxlcyBmaWNoaWVycyBhcmNoaXbDqXMgc3VyIHN0ZGVyciIKIAotIzogZ2l0azoyMDgwCi1tc2dpZCAiJlByZWZlcmVuY2VzIgotbXNnc3RyICJQcsOpZsOpcmVuY2VzIgorIzogYXJjaGl2ZS5jOjQzNgorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgInN0b2NrYWdlIHNldWxlbWVudCIKIAotIzogZ2l0azoyMDc5Ci1tc2dpZCAiJkVkaXQiCi1tc2dzdHIgIsOJZGl0ZXIiCisjOiBhcmNoaXZlLmM6NDM3Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICJjb21wcmVzc2lvbiByYXBpZGUiCiAKLSM6IGdpdGs6MjA4NAotbXNnaWQgIiZOZXcgdmlldy4uLiIKLW1zZ3N0ciAiTm91dmVsbGUgdnVlLi4uIgorIzogYXJjaGl2ZS5jOjQ0NQorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAiY29tcHJlc3Npb24gZWZmaWNhY2UiCiAKLSM6IGdpdGs6MjA4NQotbXNnaWQgIiZFZGl0IHZpZXcuLi4iCi1tc2dzdHIgIsOJZGl0ZXIgbGEgdnVlLi4uIgorIzogYXJjaGl2ZS5jOjQ0OAorbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZvcm1hdHMgZCdhcmNoaXZlIHN1cHBvcnTDqXMiCiAKLSM6IGdpdGs6MjA4NgotbXNnaWQgIiZEZWxldGUgdmlldyIKLW1zZ3N0ciAiU3VwcHJpbWVyIGxhIHZ1ZSIKKyM6IGFyY2hpdmUuYzo0NTAgYnVpbHRpbi9hcmNoaXZlLmM6OTAgYnVpbHRpbi9jbG9uZS5jOjc3Cittc2dpZCAicmVwbyIKK21zZ3N0ciAiZMOpcMO0dCIKIAotIzogZ2l0azoyMDg4IGdpdGs6NDA0MwotbXNnaWQgIiZBbGwgZmlsZXMiCi1tc2dzdHIgIlRvdXMgbGVzIGZpY2hpZXJzIgorIzogYXJjaGl2ZS5jOjQ1MSBidWlsdGluL2FyY2hpdmUuYzo5MQorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICJyw6ljdXDDqXJlciBsJ2FyY2hpdmUgZGVwdWlzIGxlIGTDqXDDtHQgZGlzdGFudCA8ZMOpcMO0dD4iCiAKLSM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKLW1zZ2lkICImVmlldyIKLW1zZ3N0ciAiVnVlIgorIzogYXJjaGl2ZS5jOjQ1MiBidWlsdGluL2FyY2hpdmUuYzo5MiBidWlsdGluL25vdGVzLmM6NDc5Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAiY29tbWFuZGUiCiAKLSM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCi1tc2dpZCAiJkFib3V0IGdpdGsiCi1tc2dzdHIgIsOAIHByb3BvcyBkZSBnaXRrIgorIzogYXJjaGl2ZS5jOjQ1MyBidWlsdGluL2FyY2hpdmUuYzo5MworbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAiY2hlbWluIHZlcnMgbGEgY29tbWFuZGUgZGlzdGFudGUgZ2l0LXVwbG9hZC1hcmNoaXZlIgogCi0jOiBnaXRrOjIwOTQgZ2l0azoyMTA4Ci1tc2dpZCAiJktleSBiaW5kaW5ncyIKLW1zZ3N0ciAiUmFjY291cmNpcyBjbGF2aWVyIgorIzogYXR0ci5jOjI2NQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorIkxlcyBtb3RpZnMgZGUgbsOpZ2F0aW9uIHNvbnQgaWdub3LDqXMgZGFucyBsZXMgYXR0cmlidXRzIGdpdFxuIgorIlV0aWxpc2V6ICdcXCEnIHBvdXIgdW4gcG9pbnQgZCdleGNsYW1hdGlvbiBsaXR0w6lyYWwuIgogCi0jOiBnaXRrOjIwOTIgZ2l0azoyMTA3Ci1tc2dpZCAiJkhlbHAiCi1tc2dzdHIgIkFpZGUiCisjOiBicmFuY2guYzo2MAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3Qgc2V0dGluZyBicmFuY2ggJXMgYXMgaXRzIG93biB1cHN0cmVhbS4iCittc2dzdHIgIkxhIGJyYW5jaGUgJXMgbmUgcGV1dCBwYXMgw6p0cmUgc2EgcHJvcHJlIGJyYW5jaGUgYW1vbnQuIgogCi0jOiBnaXRrOjIxODUgZ2l0azo4NjUyCi1tc2dpZCAiU0hBMSBJRDoiCi1tc2dzdHIgIklkIFNIQTEgOiIKKyM6IGJyYW5jaC5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAlcyBmcm9tICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgJXMgZXN0IHBhcmFtw6l0csOpZSBwb3VyIHN1aXZyZSBsYSBicmFuY2hlIGRpc3RhbnRlICVzIGRlICVzIGVuICIKKyJyZWJhc2FudC4iCiAKLSM6IGdpdGs6MjIyOQotbXNnaWQgIlJvdyIKLW1zZ3N0ciAiQ29sb25uZSIKKyM6IGJyYW5jaC5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAlcyBmcm9tICVzLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgJXMgZXN0IHBhcmFtw6l0csOpZSBwb3VyIHN1aXZyZSBsYSBicmFuY2hlIGRpc3RhbnRlICVzIGRlcHVpcyAlcy4iCiAKLSM6IGdpdGs6MjI2NwotbXNnaWQgIkZpbmQiCi1tc2dzdHIgIlJlY2hlcmNoZSIKKyM6IGJyYW5jaC5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgJXMgZXN0IHBhcmFtw6l0csOpZSBwb3VyIHN1aXZyZSBsYSBicmFuY2hlIGxvY2FsZSAlcyBlbiByZWJhc2FudC4iCiAKLSM6IGdpdGs6MjI5NQorIzogYnJhbmNoLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJXMuIgorbXNnc3RyICJMYSBicmFuY2hlICVzIGVzdCBwYXJhbcOpdHLDqWUgcG91ciBzdWl2cmUgbGEgYnJhbmNoZSBsb2NhbGUgJXMuIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSAlcyBlc3QgcGFyYW3DqXRyw6llIHBvdXIgc3VpdnJlIGxhIHLDqWbDqXJlbmNlIGRpc3RhbnRlICVzIGVuICIKKyJyZWJhc2FudC4iCisKKyM6IGJyYW5jaC5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAlcy4iCittc2dzdHIgIkxhIGJyYW5jaGUgJXMgZXN0IHBhcmFtw6l0csOpZSBwb3VyIHN1aXZyZSBsYSByw6lmw6lyZW5jZSBkaXN0YW50ZSAlcy4iCisKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgJXMgZXN0IHBhcmFtw6l0csOpZSBwb3VyIHN1aXZyZSBsYSByw6lmw6lyZW5jZSBsb2NhbGUgJXMgZW4gcmViYXNhbnQuIgorCisjOiBicmFuY2guYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJXMuIgorbXNnc3RyICJMYSBicmFuY2hlICVzIGVzdCBwYXJhbcOpdHLDqWUgcG91ciBzdWl2cmUgbGEgcsOpZsOpcmVuY2UgbG9jYWxlICVzLiIKKworIzogYnJhbmNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiCittc2dzdHIgIlBhcyBkZSBzdWl2aSA6IGluZm9ybWF0aW9uIGFtYmlndcOrIHBvdXIgbGEgcsOpZsOpcmVuY2UgJXMiCisKKyM6IGJyYW5jaC5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiJyVzJyBuJ2VzdCBwYXMgdW4gbm9tIGRlIGJyYW5jaGUgdmFsaWRlLiIKKworIzogYnJhbmNoLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJVbmUgYnJhbmNoZSBub21tw6llICclcycgZXhpc3RlIGTDqWrDoC4iCisKKyM6IGJyYW5jaC5jOjE3NQorbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmb3JjZXIgbGEgbWlzZSDDoCBqb3VyIGRlIGxhIGJyYW5jaGUgY291cmFudGUuIgorCisjOiBicmFuY2guYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHBhcmFtw6l0cmVyIGxlIHN1aXZpIGRlIGJyYW5jaGUgOyBsZSBwb2ludCBkZSBkw6lwYXJ0ICclcycgbidlc3QgIgorInBhcyB1bmUgYnJhbmNoZS4iCisKKyM6IGJyYW5jaC5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJsYSBicmFuY2hlIGFtb250IGRlbWFuZMOpZSAnJXMnIG4nZXhpc3RlIHBhcyIKKworIzogYnJhbmNoLmM6MTk5Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgorbXNnc3RyICIiCisiXG4iCisiU2kgdm91cyBjb21wdGV6IGJhc2VyIHZvdHJlIHRyYXZhaWwgc3VyIHVuZSBicmFuY2hlXG4iCisiYW1vbnQgcXVpIGV4aXN0ZSBkw6lqw6Agc3VyIGxlIHNlcnZldXIgZGlzdGFudCwgdm91cyBwb3V2ZXpcbiIKKyJsYW5jZXIgXCJnaXQgZmV0Y2hcIiBwb3VyIGxhIHLDqWN1cMOpcmVyLlxuIgorIlxuIgorIlNpIHZvdXMgY29tcHRleiBwb3Vzc2VyIHVuZSBub3V2ZWxsZSBicmFuY2hlIGxvY2FsZSBxdWkgc3VpdnJhXG4iCisic2EganVtZWxsZSBkaXN0YW50ZSwgdm91cyBwb3V2ZXogdXRpbGlzZXIgXCJnaXQgcHVzaCAtdVwiXG4iCisicG91ciBwYXJhbcOpdHJlciBsZSBzdWl2aSBkaXN0YW50IGVuIG3Dqm1lIHRlbXBzIHF1ZSB2b3VzIHBvdXNzZXouIgorCisjOiBicmFuY2guYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJOb20gZCdvYmpldCBpbnZhbGlkZSA6ICclcycuIgorCisjOiBicmFuY2guYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiTm9tIGQnb2JqZXQgYW1iaWd1IDogJyVzJy4iCisKKyM6IGJyYW5jaC5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBicmFuY2ggcG9pbnQ6ICclcycuIgorbXNnc3RyICJQb2ludCBkJ2VtYnJhbmNoZW1lbnQgaW52YWxpZGUgOiAnJXMnLiIKKworIzogYnJhbmNoLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICInJXMnIGVzdCBkw6lqw6AgZXh0cmFpdCBkYW5zICclcyciCisKKyM6IGJ1bmRsZS5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIiclcycgbmUgc2VtYmxlIHBhcyDDqnRyZSB1biBmaWNoaWVyIGJ1bmRsZSB2MiIKKworIzogYnVuZGxlLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICJlbi10w6p0ZSBub24gcmVjb25udSA6ICVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6ODcgYnVpbHRpbi9jb21taXQuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciAnJXMnIgorCisjOiBidW5kbGUuYzoxMzkKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAiTGUgZMOpcMO0dCBuZSBkaXNwb3NlIHBhcyBkZXMgY29tbWl0cyBwcsOpcmVxdWlzIHN1aXZhbnRzIDoiCisKKyM6IGJ1bmRsZS5jOjE2MyBzZXF1ZW5jZXIuYzo2MzYgc2VxdWVuY2VyLmM6MTA4MyBidWlsdGluL2JsYW1lLmM6MjcwOAorIzogYnVpbHRpbi9icmFuY2guYzo2NTIgYnVpbHRpbi9jb21taXQuYzoxMDQ0IGJ1aWx0aW4vbG9nLmM6MzM0CisjOiBidWlsdGluL2xvZy5jOjg1MCBidWlsdGluL2xvZy5jOjE0NTcgYnVpbHRpbi9sb2cuYzoxNjkwIGJ1aWx0aW4vbWVyZ2UuYzozNTgKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNTgKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIHByw6lwYXJhdGlvbiBkdSBwYXJjb3VycyBkZXMgcsOpdmlzaW9ucyIKKworIzogYnVuZGxlLmM6MTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJMZSBjb2xpcyBjb250aWVudCBjZXR0ZSByw6lmw6lyZW5jZSA6IgorbXNnc3RyWzFdICJMZSBjb2xpcyBjb250aWVudCBjZXMgJWQgcsOpZsOpcmVuY2VzIDoiCisKKyM6IGJ1bmRsZS5jOjE5MgorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICJMZSBjb2xpcyBlbnJlZ2lzdHJlIGwnaGlzdG9yaXF1ZSBjb21wbGV0LiIKKworIzogYnVuZGxlLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICJMZSBjb2xpcyBleGlnZSBjZXR0ZSByw6lmw6lyZW5jZSA6IgorbXNnc3RyWzFdICJMZSBjb2xpcyBleGlnZSBjZXMgJWQgcsOpZsOpcmVuY2VzIDoiCisKKyM6IGJ1bmRsZS5jOjI1MworbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIkltcG9zc2libGUgZGUgY3LDqWVyIGRlcyBvYmpldHMgZ3JvdXDDqXMiCisKKyM6IGJ1bmRsZS5jOjI2NAorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICJsZXMgb2JqZXRzIGdyb3Vww6lzIG9udCBkaXNwYXJ1IgorCisjOiBidW5kbGUuYzozMDQKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICJyZXYtbGlzdCBhIGRpc3BhcnUiCisKKyM6IGJ1bmRsZS5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAibGEgcsOpZsOpcmVuY2UgJyVzJyBlc3QgZXhjbHVlIHBhciBsZXMgb3B0aW9ucyBkZSByZXYtbGlzdCIKKworIzogYnVuZGxlLmM6NDQzIGJ1aWx0aW4vbG9nLmM6MTU3IGJ1aWx0aW4vbG9nLmM6MTM2NyBidWlsdGluL3Nob3J0bG9nLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50IG5vbiByZWNvbm51IDogJXMiCisKKyM6IGJ1bmRsZS5jOjQ0OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICJSZWZ1cyBkZSBjcsOpZXIgdW4gY29saXMgdmlkZS4iCisKKyM6IGJ1bmRsZS5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyICclcyciCisKKyM6IGJ1bmRsZS5jOjQ4MAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAibCdpbmRleCBkZSBncm91cGUgYSBkaXNwYXJ1IgorCisjOiBjb2xvci5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICJWYWxldXIgaW52YWxpZGUgZGUgY291bGV1ciA6ICUuKnMiCisKKyM6IGNvbW1pdC5jOjQwIGJ1aWx0aW4vYW0uYzo0NTEgYnVpbHRpbi9hbS5jOjQ4NyBidWlsdGluL2FtLmM6MTUxNgorIzogYnVpbHRpbi9hbS5jOjIxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgJXMiCisKKyM6IGNvbW1pdC5jOjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIG4nZXN0IHBhcyB1biBjb21taXQgISIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJwbHVzIGRlIG3DqW1vaXJlIgorCisjOiBjb25maWcuYzo0NzQgY29uZmlnLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgZmlsZSBsaW5lICVkIGluICVzIgorbXNnc3RyICJsaWduZSAlZCBkZSBmaWNoaWVyIGRlIGNvbmZpZyBpbmNvcnJlY3RlIGRhbnMgJXMiCisKKyM6IGNvbmZpZy5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgIiIKKyJ2YWxldXIgbnVtw6lyaXF1ZSBkZSBjb25maWd1cmF0aW9uIGluY29ycmVjdGUgJyVzJyBwb3VyICclcycgZGFucyAlc8KgOiAlcyIKKworIzogY29uZmlnLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAidmFsZXVyIG51bcOpcmlxdWUgZGUgY29uZmlndXJhdGlvbiBpbnZhbGlkZSAnJXMnIHBvdXIgJyVzJyA6ICVzIgorCisjOiBjb25maWcuYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpdGVuZHJlIGxlIHLDqXBlcnRvaXJlIHV0aWxpc2F0ZXVyIGRhbnMgOiAnJXMnIgorCisjOiBjb25maWcuYzo3NTcgY29uZmlnLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICJuaXZlYXUgZGUgY29tcHJlc3Npb24gemxpYiBpbmNvcnJlY3QgJWQiCisKKyM6IGNvbmZpZy5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIm1vZGUgaW52YWxpZGUgcG91ciBsYSBjcsOpYXRpb24gZCdvYmpldCA6ICVzIgorCisjOiBjb25maWcuYzoxMjE2Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgImxlY3R1cmUgZGUgbGEgY29uZmlndXJhdGlvbiBkZSBsaWduZSBkZSBjb21tYW5kZSBpbXBvc3NpYmxlIgorCisjOiBjb25maWcuYzoxMjc3Cittc2dpZCAidW5rbm93biBlcnJvciBvY2N1cmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgImVycmV1ciBpbmNvbm51ZSBwZW5kYW50IGxhIGxlY3R1cmUgZGVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24iCisKKyM6IGNvbmZpZy5jOjE2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyICclcycgZGVwdWlzIGxlIGNvbmZpZ3VyYXRpb24gZW4gbGlnbmUgZGUgY29tbWFuZGUiCisKKyM6IGNvbmZpZy5jOjE2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICIiCisidmFyaWFibGUgZGUgY29uZmlndXJhdGlvbiAnJXMnIGluY29ycmVjdGUgZGFucyBsZSBmaWNoaWVyICclcycgw6AgbGEgbGlnbmUgJWQiCisKKyM6IGNvbmZpZy5jOjE2NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIG11bHRpcGxlIHZhbHVlcyIKK21zZ3N0ciAiJXMgYSBkZXMgdmFsZXVycyBtdWx0aXBsZXMiCisKKyM6IGNvbm5lY3RlZC5jOjY5Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsYW5jZXIgJ2dpdCByZXYtbGlzdCciCisKKyM6IGNvbm5lY3RlZC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdDogJXMiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGRhbnMgbGEgcmV2LWxpc3QgOiAlcyIKKworIzogY29ubmVjdGVkLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW46ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZlcm1lciBsJ2VudHLDqWUgc3RhbmRhcmQgZHUgcmV2LWxpc3QgOiAlcyIKKworIzogZGF0ZS5jOjk1Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAiZGFucyBsZSBmdXR1ciIKKworIzogZGF0ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICJpbCB5IGEgJWx1IHNlY29uZGUiCittc2dzdHJbMV0gImlsIHkgYSAlbHUgc2Vjb25kZXMiCisKKyM6IGRhdGUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiaWwgeSBhICVsdSBtaW51dGUiCittc2dzdHJbMV0gImlsIHkgYSAlbHUgbWludXRlcyIKKworIzogZGF0ZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBob3VycyBhZ28iCittc2dzdHJbMF0gImlsIHkgYSAlbHUgaGV1cmUiCittc2dzdHJbMV0gImlsIHkgYSAlbHUgaGV1cmVzIgorCisjOiBkYXRlLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgZGF5cyBhZ28iCittc2dzdHJbMF0gImlsIHkgYSAlbHUgam91ciIKK21zZ3N0clsxXSAiaWwgeSBhICVsdSBqb3VycyIKKworIzogZGF0ZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSB3ZWVrcyBhZ28iCittc2dzdHJbMF0gImlsIHkgYSAlbHUgc2VtYWluZSIKK21zZ3N0clsxXSAiaWwgeSBhICVsdSBzZW1haW5lcyIKKworIzogZGF0ZS5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgbW9udGhzIGFnbyIKK21zZ3N0clswXSAiaWwgeSBhICVsdSBtb2lzIgorbXNnc3RyWzFdICJpbCB5IGEgJWx1IG1vaXMiCisKKyM6IGRhdGUuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIiCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyIKK21zZ3N0clswXSAiJWx1IGFuIgorbXNnc3RyWzFdICIlbHUgYW5zIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICJpbCB5IGEgJXMgZXQgJWx1IG1vaXMiCittc2dzdHJbMV0gImlsIHkgYSAlcyBldCAlbHUgbW9pcyIKKworIzogZGF0ZS5jOjE1NCBkYXRlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIGFnbyIKK21zZ3N0clswXSAiaWwgeSBhICVsdSBhbiIKK21zZ3N0clsxXSAiaWwgeSBhICVsdSBhbnMiCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBmaWNoaWVyIGRlIGNvbW1hbmRlICclcyciCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjUzNgorbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICJEw6l0ZWN0aW9uIGRlIHJlbm9tbWFnZSBpbmV4YWN0IGVuIGNvdXJzIgorCisjOiBkaWZmLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiIgorIiAgSW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxlIHBvdXJjZW50YWdlIGRlIG1vZGlmaWNhdGlvbiBkZSBkaXJzdGF0ICclcydcbiIKKworIzogZGlmZi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIFBhcmFtw6h0cmUgZGlyc3RhdCBpbmNvbm51ICclcydcbiIKKworIzogZGlmZi5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHZhbHVlIGZvciAnZGlmZi5zdWJtb2R1bGUnIGNvbmZpZyB2YXJpYWJsZTogJyVzJyIKK21zZ3N0ciAiIgorIlZhbGV1ciBpbmNvbm51ZSBwb3VyIGxhIHZhcmlhYmxlIGRlIGNvbmZpZ3VyYXRpb24gJ2RpZmYuc3VibW9kdWxlJyA6ICclcyciCisKKyM6IGRpZmYuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJFcnJldXJzIGRhbnMgbGEgdmFyaWFibGUgZGUgY29uZmlndXJhdGlvbiAnZGlmZi5kaXJzdGF0JyA6XG4iCisiJXMiCisKKyM6IGRpZmYuYzoyOTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgJXMiCittc2dzdHIgImwnYXBwbGljYXRpb24gZGUgZGlmZiBleHRlcm5lIGEgZGlzcGFydSwgYXJyw6p0IMOgICVzIgorCisjOiBkaWZmLmM6MzM5NAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICItLWZvbGxvdyBhIGJlc29pbiBkJ3VuZSBzcMOpY2lmaWNhdGlvbiBkZSBjaGVtaW4gdW5pcXVlIgorCisjOiBkaWZmLmM6MzU1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxlIHBhcmFtw6h0cmUgZGUgbCdvcHRpb24gLS1kaXJzdGF0Ly1YIDpcbiIKKyIlcyIKKworIzogZGlmZi5jOjM1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdhbmFseXNlciBsZSBwYXJhbcOodHJlIGRlIGwnb3B0aW9uIC0tc3VibW9kdWxlIDogJyVzJyIKKworIzogZGlyLmM6MTg1MworbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICJlY2hlYyBkZSBsJ29idGVudGlvbiBkJ2luZm9ybWF0aW9uIGRlIGtlcm5lbCIKKworIzogZGlyLmM6MTkzNgorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbS4iCittc2dzdHIgIkxlIGNhY2hlIG5vbiBzdWl2aSBlc3QgZMOpc2FjdGl2w6kgc3VyIGNlIHN5c3TDqG1lLiIKKworIzogZ3BnLWludGVyZmFjZS5jOjE2NiBncGctaW50ZXJmYWNlLmM6MjM3Cittc2dpZCAiY291bGQgbm90IHJ1biBncGcuIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxhbmNlciBncGcuIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTc4Cittc2dpZCAiZ3BnIGRpZCBub3QgYWNjZXB0IHRoZSBkYXRhIgorbXNnc3RyICJncGcgbidhIHBhcyBhY2NlcHTDqSBsZXMgZG9ubsOpZXMiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoxODkKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyBuJ2EgcGFzIHB1IHNpZ25lciBsZXMgZG9ubsOpZXMiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgdW4gZmljaGllciB0ZW1wb3JhaXJlICclcycgOiAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJzogJXMiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxhIHNpZ25hdHVyZSBkw6l0YWNow6llIGRhbnMgJyVzJyA6ICVzIgorCisjOiBncmVwLmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJyA6IGxlY3R1cmUgZGUgJXMgaW1wb3NzaWJsZSIKKworIzogZ3JlcC5jOjE3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgIiclcycgOiAlcyIKKworIzogZ3JlcC5jOjE3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCAlcyIKK21zZ3N0ciAiJyVzJyA6IGxlY3R1cmUgdHJvbnF1w6llICVzIgorCisjOiBoZWxwLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiY29tbWFuZGVzIGdpdCBkaXNwb25pYmxlcyBkYW5zICclcyciCisKKyM6IGhlbHAuYzoyMTQKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgImNvbW1hbmRlcyBnaXQgZGlzcG9uaWJsZXMgZGVwdWlzIHVuIGF1dHJlIGVuZHJvaXQgZGUgdm90cmUgJFBBVEgiCisKKyM6IGhlbHAuYzoyNDYKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIkNpLWRlc3NvdXMgbGVzIGNvbW1hbmRlcyBHaXQgaGFiaXR1ZWxsZXMgZGFucyBkaXZlcnNlcyBzaXR1YXRpb25zwqA6IgorCisjOiBoZWxwLmM6MzExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiIgorIiclcycgc2VtYmxlIMOqdHJlIHVuZSBjb21tYW5kZSBnaXQsIG1haXMgZWxsZSBuJ2EgcGFzIHB1XG4iCisiw6p0cmUgZXjDqWN1dMOpZS4gUGV1dC3DqnRyZSBnaXQtJXMgZXN0LWVsbGUgY2Fzc8OpZSA/IgorCisjOiBoZWxwLmM6MzY4Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIkFoZW0uIFZvdHJlIHN5c3TDqG1lIG4naW5kaXF1ZSBhdWN1bmUgY29tbWFuZGUgR2l0LiIKKworIzogaGVscC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LlxuIgorIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJyIKK21zZ3N0ciAiIgorIkFUVEVOVElPTiA6IHZvdXMgYXZleiBpbnZvcXXDqSB1bmUgY29tbWFuZGUgR2l0IG5vbW3DqWUgJyVzJyBxdWkgbidleGlzdGUgIgorInBhcy5cbiIKKyJDb250aW51b25zIGVuIHN1cHBvc2FudCBxdWUgdm91cyBhdmV6IHZvdWx1IGRpcmUgJyVzJyIKKworIzogaGVscC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbiAlMC4xZiBzZWNvbmRzIGF1dG9tYXRpY2FsbHkuLi4iCittc2dzdHIgImRhbnMgJTAuMWYgc2Vjb25kZXMgYXV0b21hdGlxdWVtZW50Li4uIgorCisjOiBoZWxwLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdDogJyVzJyBpcyBub3QgYSBnaXQgY29tbWFuZC4gU2VlICdnaXQgLS1oZWxwJy4iCittc2dzdHIgImdpdCA6ICclcycgbidlc3QgcGFzIHVuZSBjb21tYW5kZSBnaXQuIFZvaXIgJ2dpdCAtLWhlbHAnLiIKKworIzogaGVscC5jOjQwNiBoZWxwLmM6NDY2Cittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCisiXG4iCisiVm91bGllei12b3VzIGRpcmUgY2VsYSA/IgorbXNnc3RyWzFdICIiCisiXG4iCisiVm91bGllei12b3VzIGRpcmUgdW4gZGUgY2V1eC1sw6AgPyIKKworIzogaGVscC5jOjQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXM6ICVzIC0gJXMiCisKKyM6IG1lcmdlLmM6NDEKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsZSBjYWNoZSIKKworIzogbWVyZ2UuYzo5NCBidWlsdGluL2FtLmM6MjAwMSBidWlsdGluL2FtLmM6MjAzNiBidWlsdGluL2NoZWNrb3V0LmM6Mzc1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTg2IGJ1aWx0aW4vY2xvbmUuYzo3MTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIG5vdXZlYXUgZmljaGllciBkJ2luZGV4IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIihtYXV2YWlzIGNvbW1pdClcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZm9fY2FjaGUgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIsOpY2hlYyBkZSBhZGRpbmZvX2NhY2hlIHBvdXIgbGUgY2hlbWluICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjI3MAorbXNnaWQgImVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJlcnJldXIgZGUgY29uc3RydWN0aW9uIGRlcyBhcmJyZXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSBjaGVtaW4gJyVzJyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgIlN1cHByZXNzaW9uIGRlICVzIHBvdXIgZmFpcmUgZGUgbGEgcGxhY2UgcG91ciBsZSBzb3VzLXLDqXBlcnRvaXJlXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjcxMiBtZXJnZS1yZWN1cnNpdmUuYzo3MzMKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICI6IHBldXQtw6p0cmUgdW4gY29uZmxpdCBEL0YgPyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAicmVmdXMgZGUgcGVyZHJlIGxlIGZpY2hpZXIgbm9uIHN1aXZpICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc2MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgJXMgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgImJsb2IgYXR0ZW5kdSBwb3VyICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc4OCBidWlsdGluL2Nsb25lLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgIsOpY2hlYyDDoCBsJ291dmVydHVyZSBkZSAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIMOgIGxhIGNyw6lhdGlvbiBkdSBsaWVuIHN5bWJvbGlxdWUgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIm5lIHNhaXQgcGFzIHRyYWl0ZXIgJTA2byAlcyAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MzcKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiw4ljaGVjIMOgIGwnZXjDqWN1dGlvbiBkZSBsYSBmdXNpb24gaW50ZXJuZSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgIkltcG9zc2libGUgZCdham91dGVyICVzIMOgIGxhIGJhc2UgZGUgZG9ubsOpZXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk1NworbXNnaWQgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlIGluIHRoZSB0cmVlIgorbXNnc3RyICJ0eXBlIGQnb2JqZXQgbm9uIHN1cHBvcnTDqSBkYW5zIGwnYXJicmUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMzIgbWVyZ2UtcmVjdXJzaXZlLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisiQ09ORkxJVCAoJXMvc3VwcHJlc3Npb24pIDogJXMgc3VwcHJpbcOpIGRhbnMgJXMgZXQgJXMgZGFucyAlcy4gVmVyc2lvbiAlcyBkZSAiCisiJXMgbGFpc3PDqWUgZGFucyBsJ2FyYnJlLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAzOCBtZXJnZS1yZWN1cnNpdmUuYzoxMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyJDT05GTElUICglcy9zdXBwcmVzc2lvbikgOiAlcyBzdXBwcmltw6kgZGFucyAlcyBldCAlcyBkYW5zICVzLiBWZXJzaW9uICVzIGRlICIKKyIlcyBsYWlzc8OpZSBkYW5zIGwnYXJicmUgZGFucyBsZSBmaWNoaWVyICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA5MgorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAicmVub21tYWdlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDkyCittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAicmVub21tw6kiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIGVzdCB1biByw6lwZXJ0b2lyZSBkYW5zICVzIGFqb3V0w6kgcGx1dMO0dCBjb21tZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisiQ09ORkxJVCAocmVub21tYWdlL3Jlbm9tbWFnZSkgOiBSZW5vbW1hZ2UgZGUgXCIlc1wiLT5cIiVzXCIgZGFucyBsYSBicmFuY2hlICIKKyJcIiVzXCIgZXQgcmVub21tYWdlIFwiJXNcIi0+XCIlc1wiIGRhbnMgXCIlc1wiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNzUKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAobGFpc3PDqSBub24gcsOpc29sdSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisiQ09ORkxJVCAocmVub21tYWdlL3Jlbm9tbWFnZSkgOiByZW5vbW1hZ2UgJyVzJy0+JyVzJyBkYW5zICVzLiBSZW5vbW1hZ2UgJyVzJy0iCisiPiclcycgZGFucyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIKK21zZ3N0ciAiUmVub21tYWdlIGRlICVzIGVuICVzIGV0IGRlICVzIGVuICVzIMOgIGxhIHBsYWNlIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gJXMgYWRkZWQgaW4gJXMiCittc2dzdHIgIiIKKyJDT05GTElUIChyZW5vbW1hZ2UvYWpvdXQpIDogUmVub21tYWdlIGRlICVzLT4lcyBkYW5zICVzLiAlcyBham91dMOpIGRhbnMgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIG1lcmdlZCAlcyIKK21zZ3N0ciAiQWpvdXQgZGUgJXMgZnVzaW9ubsOpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDczIG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIkFqb3V0IHBsdXTDtHQgY29tbWUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbCdvYmpldCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAibCdvYmpldCAlcyBuJ2VzdCBwYXMgdW4gYmxvYiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NQorbXNnaWQgIm1vZGlmeSIKK21zZ3N0ciAibW9kaWZpY2F0aW9uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTc1Cittc2dpZCAibW9kaWZpZWQiCittc2dzdHIgIm1vZGlmacOpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTg1Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAiY29udGVudSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU5MgorbXNnaWQgImFkZC9hZGQiCittc2dzdHIgImFqb3V0L2Fqb3V0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwZWQgJXMgKG1lcmdlZCBzYW1lIGFzIGV4aXN0aW5nKSIKK21zZ3N0ciAiJXMgc2F1dMOpIChmdXNpb24gaWRlbnRpcXVlIMOgIGwnZXhpc3RhbnQpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiRnVzaW9uIGF1dG9tYXRpcXVlIGRlICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQ0IGdpdC1zdWJtb2R1bGUuc2g6MTE1MAorbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAic291cy1tb2R1bGUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIkNPTkZMSVQgKCVzKSA6IENvbmZsaXQgZGUgZnVzaW9uIGRhbnMgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIlN1cHByZXNzaW9uIGRlICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzU2Cittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgImZpY2hpZXIvcsOpcGVydG9pcmUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NjIKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAicsOpcGVydG9pcmUvZmljaGllciIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2NworIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIkNPTkZMSVQgKCVzKSA6IElsIHkgYSB1biByw6lwZXJ0b2lyZSBub21tw6kgJXMgZGFucyAlcy4gQWpvdXQgZGUgJXMgY29tbWUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICJBam91dCBkZSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc5NAorbXNnaWQgIkZhdGFsIG1lcmdlIGZhaWx1cmUsIHNob3VsZG4ndCBoYXBwZW4uIgorbXNnc3RyICLDiWNoZWMgZmF0YWwgZGUgZnVzaW9uLCBxdWkgbmUgZGV2cmFpdCBqYW1haXMgYXJyaXZlci4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MTMKK21zZ2lkICJBbHJlYWR5IHVwLXRvLWRhdGUhIgorbXNnc3RyICJEw6lqw6Agw6Agam91ciAhIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGZ1c2lvbiBkZXMgYXJicmVzICVzIGV0ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVucHJvY2Vzc2VkIHBhdGg/Pz8gJXMiCittc2dzdHIgIkNoZW1pbiBub24gdHJhaXTDqSA/Pz8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5MDAKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAiRnVzaW9uIDoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gIiV1IGFuY8OqdHJlIGNvbW11biB0cm91dsOpIDoiCittc2dzdHJbMV0gIiV1IGFuY8OqdHJlcyBjb21tdW5zIHRyb3V2w6lzIDoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5NTAKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgImxhIGZ1c2lvbiBuJ2EgcGFzIHJldG91cm7DqSBkZSBjb21taXQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYW5hbHlzZXIgbCdvYmpldCAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDE4IGJ1aWx0aW4vbWVyZ2UuYzo2NDUKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnw6ljcmlyZSBsJ2luZGV4LiIKKworIzogbm90ZXMtdXRpbHMuYzo0MQorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB2YWxpZGVyIHVuIGFyYnJlIGRlIG5vdGVzIG5vbiBpbml0aWFsaXPDqS9yw6lmw6lyZW5jw6kiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiTWF1dmFpc2UgdmFsZXVyIGRlIG5vdGVzLnJld3JpdGVNb2RlIDogJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIlJlZnVzIGRlIHLDqcOpY3JpcmUgZGVzIG5vdGVzIGRhbnMgJXMgKGhvcnMgZGUgcmVmcy9ub3Rlcy8pIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIHRoZQorIy4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMgaXRzIHZhbHVlCisjOiBub3Rlcy11dGlscy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIk1hdXZhaXNlIHZhbGV1ciBkZSAlcyA6ICclcyciCisKKyM6IG9iamVjdC5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGwnb2JqZXQgOiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjU2MworbXNnaWQgIi4uLiIKK21zZ3N0ciAiLi4uIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAidXNhZ2UgOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uCisjOiBwYXJzZS1vcHRpb25zLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICAgb3UgOiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiAgICAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjYyMgorbXNnaWQgIi1OVU0iCittc2dzdHIgIi1OVU0iCisKKyM6IHBhdGhzcGVjLmM6MTMzCittc2dpZCAiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorImxlcyByw6lnbGFnZXMgZGUgc3DDqWNpZmljYXRldXJzIGRlIGNoZW1pbiBnw6luw6lyYXV4ICdnbG9iJyBldCAnbm9nbG9iJyBzb250ICIKKyJpbmNvbXBhdGlibGVzIgorCisjOiBwYXRoc3BlYy5jOjE0MworbXNnaWQgIiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCittc2dzdHIgIiIKKyJsZSByw6lnbGFnZSBnbG9iYWwgZGUgc3DDqWNpZmljYXRldXIgZGUgY2hlbWluICdsaXRlcmFsJyBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgIgorInRvdXMgbGVzIGF1dHJlcyByw6lnbGFnZXMgZ2xvYmF1eCBkZSBzcMOpY2lmaWNhdGV1ciBkZSBjaGVtaW4iCisKKyM6IHBhdGhzcGVjLmM6MTc3Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICJwYXJhbcOodHJlIGludmFsaWRlIHBvdXIgbGUgc3DDqWNpZmljYXRldXIgbWFnaXF1ZSBkZSBjaGVtaW4gJ3ByZWZpeCciCisKKyM6IHBhdGhzcGVjLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIkxhIHNww6ljaWZpY2F0aW9uIG1hZ2lxdWUgZGUgY2hlbWluICclLipzJyBlc3QgaW52YWxpZGUgZGFucyAnJXMnIgorCisjOiBwYXRoc3BlYy5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcpJyBhdCB0aGUgZW5kIG9mIHBhdGhzcGVjIG1hZ2ljIGluICclcyciCittc2dzdHIgIicpJyBtYW5xdWFudGUgw6AgbGEgZmluIGR1IHNww6ljaWZpY2F0ZXVyIG1hZ2lxdWUgZGUgY2hlbWluIGRhbnMgJyVzJyIKKworIzogcGF0aHNwZWMuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIlNww6ljaWZpY2F0ZXVyIG1hZ2lxdWUgJyVjJyBub24gaW1wbMOpbWVudMOpIGRhbnMgJyVzJyIKKworIzogcGF0aHNwZWMuYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVzIDogJ2xpdGVyYWwnIGV0ICdnbG9iJyBzb250IGluY29tcGF0aWJsZXMiCisKKyM6IHBhdGhzcGVjLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXMgOiAnJXMnIGVzdCBob3JzIGR1IGTDqXDDtHQiCisKKyM6IHBhdGhzcGVjLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAiTGUgY2hlbWluICclcycgZXN0IGRhbnMgbGUgc291cy1tb2R1bGUgJyUuKnMnIgorCisjOiBwYXRoc3BlYy5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIiCisiJXMgOiBsZSBzcMOpY2lmaWNhdGV1ciBtYWdpcXVlIGRlIGNoZW1pbiBuJ2VzdCBwYXMgc3VwcG9ydMOpIHBhciBjZXR0ZSAiCisiY29tbWFuZGUgOiAlcyIKKworIzogcGF0aHNwZWMuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBlc3QgYXUtZGVsw6AgZCd1biBsaWVuIHN5bWJvbGlxdWUiCisKKyM6IHBhdGhzcGVjLmM6NDQxCittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gZXhjbHVkZSBmcm9tIGJ5IDooZXhjbHVkZSkgcGF0dGVybnMuXG4iCisiUGVyaGFwcyB5b3UgZm9yZ290IHRvIGFkZCBlaXRoZXIgJzovJyBvciAnLicgPyIKK21zZ3N0ciAiIgorIklsIG4neSBhIHJpZW4gZG9udCBpbCBmYXV0IGV4Y2x1cmUgcGFyIGRlcyBtb3RpZnMgOihleGNsdXJlKS5cbiIKKyJQZXV0LcOqdHJlIGF2ZXotdm91cyBvdWJsacOpIGQnYWpvdXRlciAnOi8nIG91ICcuJyA/IgorCisjOiBwcmV0dHkuYzo5NjkKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgZm9ybWF0IC0tcHJldHR5IgorCisjOiBwcm9ncmVzcy5jOjIzNgorbXNnaWQgImRvbmUiCittc2dzdHIgImZhaXQiCisKKyM6IHJlYWQtY2FjaGUuYzoxMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbmRleC52ZXJzaW9uIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyJ2ZXJzaW9uIGQnaW5kZXggcmVuc2VpZ27DqWUsIG1haXMgbGEgdmFsZXVyIGVzdCBpbnZhbGlkZS5cbiIKKyJVdGlsaXNhdGlvbiBkZSBsYSB2ZXJzaW9uICVpIgorCisjOiByZWFkLWNhY2hlLmM6MTMwNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuXG4iCisiVXNpbmcgdmVyc2lvbiAlaSIKK21zZ3N0ciAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIGVzdCByZW5zZWlnbsOpLCBtYWlzIGxhIHZhbGV1ciBlc3QgaW52YWxpZGUuXG4iCisiVXRpbGlzYXRpb24gZGUgbGEgdmVyc2lvbiAlaSIKKworIzogcmVmcy5jOjI5NDEgYnVpbHRpbi9tZXJnZS5jOjc2MCBidWlsdGluL21lcmdlLmM6ODcxIGJ1aWx0aW4vbWVyZ2UuYzo5NzMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ291dnJpciAnJXMnIGVuIMOpY3JpdHVyZSIKKworIzogcmVmcy5jOjMwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsYSByw6lmw6lyZW5jZSAlc8KgOiAlcyIKKworIzogcmVmcy5jOjMwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGVzIHLDqWbDqXJlbmNlc8KgOiAlcyIKKworIzogcmVmcy5jOjMwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgc3VwcHJpbWVyIGxhIHLDqWbDqXJlbmNlICVzIgorCisjOiByZWYtZmlsdGVyLmM6NjYwCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxlIGZvcm1hdCIKKworIzogcmVtb3RlLmM6NzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciDDoCBsYSBmb2lzICVzIGV0ICVzIHBvdXIgJXMiCisKKyM6IHJlbW90ZS5jOjc5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIgorbXNnc3RyICIlcyBzdWl0IGhhYml0dWVsbGVtZW50ICVzLCBwYXMgJXMiCisKKyM6IHJlbW90ZS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiVzIHN1aXQgw6AgbGEgZm9pcyAlcyBldCAlcyIKKworIzogcmVtb3RlLmM6ODA4Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIkVycmV1ciBpbnRlcm5lIgorCisjOiByZW1vdGUuYzoxNzIzIHJlbW90ZS5jOjE3NjYKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIG5lIHBvaW50ZSBwYXMgc3VyIHVuZSBicmFuY2hlIgorCisjOiByZW1vdGUuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICJwYXMgZGUgYnJhbmNoZSAnJXMnIgorCisjOiByZW1vdGUuYzoxNzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHVwc3RyZWFtIGNvbmZpZ3VyZWQgZm9yIGJyYW5jaCAnJXMnIgorbXNnc3RyICJhdWN1bmUgYnJhbmNoZSBhbW9udCBjb25maWd1csOpZSBwb3VyIGxhIGJyYW5jaGUgJyVzJyIKKworIzogcmVtb3RlLmM6MTc0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAibGEgYnJhbmNoZSBhbW9udCAnJXMnIG4nZXN0IHBhcyBzdG9ja8OpZSBjb21tZSBicmFuY2hlIGRlIHN1aXZpIgorCisjOiByZW1vdGUuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisibGEgZGVzdGluYXRpb24gZGUgcG91c3PDqWUgJyVzJyBzdXIgbGUgc2VydmV1ciBkaXN0YW50ICclcycgbidhIHBhcyBkZSAiCisiYnJhbmNoZSBsb2NhbGUgZGUgc3VpdmkiCisKKyM6IHJlbW90ZS5jOjE3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgaGFzIG5vIHJlbW90ZSBmb3IgcHVzaGluZyIKK21zZ3N0ciAibGEgYnJhbmNoZSAnJXMnIG4nYSBhdWN1bmUgYnJhbmNoZSBkaXN0YW50ZSBkZSBwb3Vzc8OpZSIKKworIzogcmVtb3RlLmM6MTc4MgorIywgYy1mb3JtYXQKK21zZ2lkICJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciCittc2dzdHIgImxlcyByw6lmw6lyZW5jZXMgZGUgc3BlYyBwb3VyICclcycgbidpbmNsdWVudCBwYXMgJyVzJyIKKworIzogcmVtb3RlLmM6MTc5NQorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAibGEgcG91c3PDqWUgbidhIHBhcyBkZSBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IHZhdXQgJ25vdGhpbmcnKSIKKworIzogcmVtb3RlLmM6MTgxNworbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgIiIKKyJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSB1bmUgcG91c3PDqWUgJ3NpbXBsZScgcG91ciB1bmUgZGVzdGluYXRpb24gdW5pcXVlIgorCisjOiByZW1vdGUuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAiVm90cmUgYnJhbmNoZSBlc3QgYmFzw6llIHN1ciAnJXMnLCBtYWlzIGxhIGJyYW5jaGUgYW1vbnQgYSBkaXNwYXJ1LlxuIgorCisjOiByZW1vdGUuYzoyMTI4Cittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgcG91ciBjb3JyaWdlcilcbiIKKworIzogcmVtb3RlLmM6MjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyB1cC10by1kYXRlIHdpdGggJyVzJy5cbiIKK21zZ3N0ciAiVm90cmUgYnJhbmNoZSBlc3Qgw6Agam91ciBhdmVjICclcycuXG4iCisKKyM6IHJlbW90ZS5jOjIxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAiVm90cmUgYnJhbmNoZSBlc3QgZW4gYXZhbmNlIHN1ciAnJXMnIGRlICVkIGNvbW1pdC5cbiIKK21zZ3N0clsxXSAiVm90cmUgYnJhbmNoZSBlc3QgZW4gYXZhbmNlIHN1ciAnJXMnIGRlICVkIGNvbW1pdHMuXG4iCisKKyM6IHJlbW90ZS5jOjIxNDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBwdXNoXCIgcG91ciBwdWJsaWVyIHZvcyBjb21taXRzIGxvY2F1eClcbiIKKworIzogcmVtb3RlLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCisiVm90cmUgYnJhbmNoZSBlc3QgZW4gcmV0YXJkIHN1ciAnJXMnIGRlICVkIGNvbW1pdCwgZXQgcGV1dCDDqnRyZSBtaXNlIMOgIGpvdXIgIgorImVuIGF2YW5jZSByYXBpZGUuXG4iCittc2dzdHJbMV0gIiIKKyJWb3RyZSBicmFuY2hlIGVzdCBlbiByZXRhcmQgc3VyICclcycgZGUgJWQgY29tbWl0cywgZXQgcGV1dCDDqnRyZSBtaXNlIMOgIGpvdXIgIgorImVuIGF2YW5jZSByYXBpZGUuXG4iCisKKyM6IHJlbW90ZS5jOjIxNTIKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgcHVsbFwiIHBvdXIgbWV0dHJlIMOgIGpvdXIgdm90cmUgYnJhbmNoZSBsb2NhbGUpXG4iCisKKyM6IHJlbW90ZS5jOjIxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisiVm90cmUgYnJhbmNoZSBldCAnJXMnIG9udCBkaXZlcmfDqSxcbiIKKyJldCBvbnQgJWQgZXQgJWQgY29tbWl0IGRpZmbDqXJlbnQgY2hhY3VuZSByZXNwZWN0aXZlbWVudC5cbiIKK21zZ3N0clsxXSAiIgorIlZvdHJlIGJyYW5jaGUgZXQgJyVzJyBvbnQgZGl2ZXJnw6ksXG4iCisiZXQgb250ICVkIGV0ICVkIGNvbW1pdHMgZGlmZsOpcmVudHMgY2hhY3VuZSByZXNwZWN0aXZlbWVudC5cbiIKKworIzogcmVtb3RlLmM6MjE2NQorbXNnaWQgIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycylcbiIKK21zZ3N0ciAiIgorIiAgKHV0aWxpc2V6IFwiZ2l0IHB1bGxcIiBwb3VyIGZ1c2lvbm5lciBsYSBicmFuY2hlIGRpc3RhbnRlIGRhbnMgbGEgdsO0dHJlKVxuIgorCisjOiByZXZpc2lvbi5jOjIxOTgKK21zZ2lkICJ5b3VyIGN1cnJlbnQgYnJhbmNoIGFwcGVhcnMgdG8gYmUgYnJva2VuIgorbXNnc3RyICJ2b3RyZSBicmFuY2hlIGFjdHVlbGxlIHNlbWJsZSBjYXNzw6llIgorCisjOiByZXZpc2lvbi5jOjIyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICJ2b3RyZSBicmFuY2hlIGFjdHVlbGxlICclcycgbmUgY29udGllbnQgZW5jb3JlIGF1Y3VuIGNvbW1pdCIKKworIzogcmV2aXNpb24uYzoyMzk1Cittc2dpZCAiLS1maXJzdC1wYXJlbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1iaXNlY3QiCittc2dzdHIgIi0tZmlyc3QtcGFyZW50IGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLWJpc2VjdCIKKworIzogcnVuLWNvbW1hbmQuYzo4MworbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnb3V2ZXJ0dXJlIGRlIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXAyKCVkLCVkKSBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBkdXAyKCVkLCVkKSIKKworIzogc2VuZC1wYWNrLmM6Mjk1Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgImltcG9zc2libGUgZGUgc2lnbmVyIGxlIGNlcnRpZmljYXQgZGUgcG91c3PDqWUiCisKKyM6IHNlbmQtcGFjay5jOjQwNAorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIKK21zZ3N0ciAiTGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIGxlcyBwb3Vzc8OpZXMgYXZlYyAtLXNpZ25lZCIKKworIzogc2VuZC1wYWNrLmM6NDA2Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisicGFzIGQnZW52b2kgZGUgY2VydGlmaWNhdCBkZSBwb3Vzc8OpZSBjYXIgbGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIGxlcyAiCisicG91c3PDqWVzIGF2ZWMgLS1zaWduZWQiCisKKyM6IHNlbmQtcGFjay5jOjQxOAorbXNnaWQgInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1hdG9taWMgcHVzaCIKK21zZ3N0ciAiTGUgcmVjZXZldXIgbmUgZ8OocmUgcGFzIGxlcyBwb3Vzc8OpZXMgYXZlYyAtLWF0b21pYyIKKworIzogc2VxdWVuY2VyLmM6MTgzCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyJhcHLDqHMgcsOpc29sdXRpb24gZGVzIGNvbmZsaXRzLCBtYXJxdWV6IGxlcyBjaGVtaW5zIGNvcnJpZ8Opc1xuIgorImF2ZWMgJ2dpdCBhZGQgPGNoZW1pbnM+JyBvdSAnZ2l0IHJtIDxjaGVtaW5zPiciCisKKyM6IHNlcXVlbmNlci5jOjE4NgorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisiYXByw6hzIHLDqXNvbHV0aW9uIGRlcyBjb25mbGl0cywgbWFycXVleiBsZXMgY2hlbWlucyBjb3JyaWfDqXNcbiIKKyJhdmVjICdnaXQgYWRkIDxjaGVtaW5zPicgb3UgJ2dpdCBybSA8Y2hlbWlucz4nXG4iCisicHVpcyB2YWxpZGV6IGxlIHLDqXN1bHRhdCBhdmVjICdnaXQgY29tbWl0JyIKKworIzogc2VxdWVuY2VyLmM6MTk5IHNlcXVlbmNlci5jOjg0MiBzZXF1ZW5jZXIuYzo5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnw6ljcmlyZSBkYW5zICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMiCittc2dzdHIgIkVycmV1ciDDoCBsJ2VtYmFsbGFnZSBkZSAlcyIKKworIzogc2VxdWVuY2VyLmM6MjE3Cittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiVm9zIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyBzZXJhaWVudCDDqWNyYXPDqWVzIHBhciBjaGVycnktcGljay4iCisKKyM6IHNlcXVlbmNlci5jOjIxOQorbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSByZXZlcnQuIgorbXNnc3RyICJWb3MgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIHNlcmFpZW50IMOpY3Jhc8OpZXMgcGFyIHJldmVydC4iCisKKyM6IHNlcXVlbmNlci5jOjIyMgorbXNnaWQgIkNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiVmFsaWRleiB2b3MgbW9kaWZpY2F0aW9ucyBvdSBsZXMgcmVtaXNlciBwb3VyIGNvbnRpbnVlci4iCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiIG9yICJjaGVycnktcGljayIKKyM6IHNlcXVlbmNlci5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczogSW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgbm91dmVhdSBmaWNoaWVyIGluZGV4IgorCisjOiBzZXF1ZW5jZXIuYzozMjcKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIGNvbW1pdFxuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBsZSBjb21taXQgSEVBRFxuIgorCisjOiBzZXF1ZW5jZXIuYzozNDcKK21zZ2lkICJVbmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWVcbiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciBsJ2FyYnJlIGRlIGNhY2hlXG4iCisKKyM6IHNlcXVlbmNlci5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzXG4iCittc2dzdHIgIkltcG9zc2libGUgZCdhbmFseXNlciBsZSBjb21taXQgJXNcbiIKKworIzogc2VxdWVuY2VyLmM6NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzXG4iCittc2dzdHIgIkltcG9zc2libGUgZCdhbmFseXNlciBsZSBjb21taXQgcGFyZW50ICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjQ2OQorbXNnaWQgIllvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgIlZvdHJlIGZpY2hpZXIgZCdpbmRleCBuJ2VzdCBwYXMgZnVzaW9ubsOpLiIKKworIzogc2VxdWVuY2VyLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAiTGUgY29tbWl0ICVzIGVzdCB1bmUgZnVzaW9uIG1haXMgbCdvcHRpb24gLW0gbidhIHBhcyDDqXTDqSBzcMOpY2lmacOpZS4iCisKKyM6IHNlcXVlbmNlci5jOjQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIkxlIGNvbW1pdCAlcyBuJ2EgcGFzIGxlIHBhcmVudCAlZCIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCittc2dzdHIgIiIKKyJVbmUgYnJhbmNoZSBwcmluY2lwYWxlIGEgw6l0w6kgc3DDqWNpZmnDqWUgbWFpcyBsZSBjb21taXQgJXMgbidlc3QgcGFzIHVuZSAiCisiZnVzaW9uLiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlICJyZXZlcnQiIG9yCisjLiAiY2hlcnJ5LXBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMQorIzogc2VxdWVuY2VyLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiJXMgOiBpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgY29tbWl0IHBhcmVudCAlcyIKKworIzogc2VxdWVuY2VyLmM6NTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb2J0ZW5pciB1biBtZXNzYWdlIGRlIHZhbGlkYXRpb24gcG91ciAlcyIKKworIzogc2VxdWVuY2VyLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbm51bGVyICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzo2MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGFwcGx5ICVzLi4uICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYXBwbGlxdWVyICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzo2MzkKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAibCdlbnNlbWJsZSBkZSBjb21taXRzIHNww6ljaWZpw6kgZXN0IHZpZGUiCisKKyM6IHNlcXVlbmNlci5jOjY0NworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzIDogw6ljaGVjIMOgIGxhIGxlY3R1cmUgZGUgbCdpbmRleCIKKworIzogc2VxdWVuY2VyLmM6NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXMgOiDDqWNoZWMgZHUgcmFmcmHDrmNoaXNzZW1lbnQgZGUgbCdpbmRleCIKKworIzogc2VxdWVuY2VyLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSAlcyBwZW5kYW50IHVuICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGEgbGlnbmUgJWQuIgorCisjOiBzZXF1ZW5jZXIuYzo3MzgKK21zZ2lkICJObyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIkF1Y3VuIGNvbW1pdCBhbmFseXPDqS4iCisKKyM6IHNlcXVlbmNlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ291dnJpciAlcyIKKworIzogc2VxdWVuY2VyLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlICVzLiIKKworIzogc2VxdWVuY2VyLmM6NzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAlcyIKK21zZ3N0ciAiRmV1aWxsZSBkJ2luc3RydWN0aW9uIGludXRpbGlzYWJsZSA6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICJDbMOpIGludmFsaWRlOiAlcyIKKworIzogc2VxdWVuY2VyLmM6Nzk0IGJ1aWx0aW4vcHVsbC5jOjQ3IGJ1aWx0aW4vcHVsbC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiVmFsZXVyIGludmFsaWRlIHBvdXIgJXMgOiAlcyIKKworIzogc2VxdWVuY2VyLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAlcyIKK21zZ3N0ciAiRmV1aWxsZSBkJ29wdGlvbnMgbWFsZm9ybcOpZSA6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJ1biBwaWNvcmFnZSBvdSB1biByZXRvdXIgZXN0IGTDqWrDoCBlbiBjb3VycyIKKworIzogc2VxdWVuY2VyLmM6ODI0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKK21zZ3N0ciAiZXNzYXlleiBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZXwtLXF1aXR8LS0gYWJvcnQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgY3LDqWVyIGxlIHLDqXBlcnRvaXJlIGRlIHPDqXF1ZW5jZXVyICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4NDQgc2VxdWVuY2VyLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzLiIKK21zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbCdlbWJhbGxhZ2UgZGUgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo4NjMgc2VxdWVuY2VyLmM6OTk2Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJhdWN1biBwaWNvcmFnZSBvdSByZXRvdXIgZW4gY291cnMiCisKKyM6IHNlcXVlbmNlci5jOjg2NQorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgImltcG9zc2libGUgZGUgcsOpc291ZHJlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjg2NworbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWJhbmRvbm5lciBkZXB1aXMgdW5lIGJyYW5jaGUgbm9uIGVuY29yZSBjcsOpw6llIgorCisjOiBzZXF1ZW5jZXIuYzo4ODcgYnVpbHRpbi9hcHBseS5jOjQyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyICVzIDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSAlcyA6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4OTEKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICJmaW4gZGUgZmljaGllciBpbmF0dGVuZHVlIgorCisjOiBzZXF1ZW5jZXIuYzo4OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICJsZSBmaWNoaWVyIEhFQUQgZGUgcHLDqXBhcmF0aW9uIGRlIHBpY29yYWdlICclcycgZXN0IGNvcnJvbXB1IgorCisjOiBzZXF1ZW5jZXIuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZvcm1hdCAlcy4iCittc2dzdHIgIkltcG9zc2libGUgZGUgZm9ybWF0ZXIgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIgorbXNnc3RyICIlcyA6IGltcG9zc2libGUgZGUgcGljb3JlciB1biAlcyIKKworIzogc2VxdWVuY2VyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlcyA6IG1hdXZhaXNlIHLDqXZpc2lvbiIKKworIzogc2VxdWVuY2VyLmM6MTEwMQorbXNnaWQgIkNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2FubnVsZXIgZW4gdGFudCBxdWUgY29tbWl0IGluaXRpYWwiCisKKyM6IHNlcXVlbmNlci5jOjExMDIKK21zZ2lkICJDYW4ndCBjaGVycnktcGljayBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIkltcG9zc2libGUgZGUgcGljb3JlciB2ZXJzIHVuZSBIRUFEIHZpZGUiCisKKyM6IHNldHVwLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgbGVjdHVyZSBkZSAlcyIKKworIzogc2hhMV9uYW1lLmM6NDUzCittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IGNoZWNrb3V0IC1iICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIndoZXJlIFwiJGJyXCIgaXMgc29tZWhvdyBlbXB0eSBhbmQgYSA0MC1oZXggcmVmIGlzIGNyZWF0ZWQuIFBsZWFzZVxuIgorImV4YW1pbmUgdGhlc2UgcmVmcyBhbmQgbWF5YmUgZGVsZXRlIHRoZW0uIFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieVxuIgorInJ1bm5pbmcgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorbXNnc3RyICIiCisiR2l0IG5lIGNyw6nDqSBub3JtYWxlbWVudCBqYW1haXMgZGUgcsOpZsOpcmVuY2UgcXVpIHNlIHRlcm1pbmUgcGFyIDQwIGNhcmFjdMOocmVzICIKKyJoZXhhXG4iCisiY2FyIGVsbGUgc2VyYWl0IGlnbm9yw6llIHNpIHZvdXMgc3DDqWNpZmlpZXogNDAtaGV4YS4gQ2VzIHLDqWbDqXJlbmNlc1xuIgorInBldXZlbnQgw6p0cmUgY3LDqcOpZXMgcGFyIGVycmV1ci4gUGFyIGV4ZW1wbGUsXG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisib8O5IFwiJGJyXCIgZXN0IGQndW5lIG1hbmnDqHJlIG91IGQndW5lIGF1dHJlIHZpZGUgZXQgdW5lIHLDqWbDqXJlbmNlIDQwLWhleGEgIgorImVzdCBjcsOpw6llLlxuIgorIlZldWlsbGV6IGV4YW1pbmVyIGNlcyByw6lmw6lyZW5jZXMgZXQgcGV1dC3DqnRyZSBsZXMgc3VwcHJpbWVyLiBEw6lzYWN0aXZleiBjZSAiCisibWVzc2FnZVxuIgorImVuIGxhbsOnYW50IFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKKworIzogc3VibW9kdWxlLmM6NjEgc3VibW9kdWxlLmM6OTUKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAiIgorIk1vZGlmaWNhdGlvbiBpbXBvc3NpYmxlIGRlIC5naXRtb2R1bGVzIG5vbiBmdXNpb25uw6ksIHLDqXNvbHZleiBsZXMgY29uZmxpdHMgIgorImQnYWJvcmQiCisKKyM6IHN1Ym1vZHVsZS5jOjY1IHN1Ym1vZHVsZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIHVuZSBzZWN0aW9uIG/DuSBwYXRoPSVzIGRhbnMgLmdpdG1vZHVsZXMiCisKKyM6IHN1Ym1vZHVsZS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgbWV0dHJlIMOgIGpvdXIgbCfDqWzDqW1lbnQgJXMgZGUgLmdpdG1vZHVsZXMiCisKKyMgaWNpICVzIGVzdCB1biBjaGVtaW4KKyM6IHN1Ym1vZHVsZS5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbCfDqWzDqW1lbnQgZGUgLmdpdG1vZHVsZXMgcG91ciAlcyIKKworIzogc3VibW9kdWxlLmM6MTE3Cittc2dpZCAic3RhZ2luZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIG1pc2UgZW4gaW5kZXggZHUgLmdpdG1vZHVsZXMgbWlzIMOgIGpvdXIiCisKKyM6IHN1Ym1vZHVsZS5jOjEwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBjb3JlLndvcmt0cmVlIGluICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHBhcmFtw6l0cmVyIGNvcmUud29ya3RyZWUgZGFucyAlcyIKKworIzogdHJhaWxlci5jOjQ5MSB0cmFpbGVyLmM6NDk1IHRyYWlsZXIuYzo0OTkgdHJhaWxlci5jOjU1MyB0cmFpbGVyLmM6NTU3CisjOiB0cmFpbGVyLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gdmFsdWUgJyVzJyBmb3Iga2V5ICclcyciCittc2dzdHIgInZhbGV1ciBpbmNvbm51ZSAnJXMnIHBvdXIgbGEgY2zDqSAnJXMnIgorCisjOiB0cmFpbGVyLmM6NTQzIHRyYWlsZXIuYzo1NDggYnVpbHRpbi9yZW1vdGUuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAicGx1cyBkJ3VuICVzIgorCisjOiB0cmFpbGVyLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgInN5bWJvbGUgdmlkZSBkYW5zIGxhIGxpZ25lIGRlIGZpbiAnJS4qcyciCisKKyM6IHRyYWlsZXIuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgZmljaGllciBkJ2VudHLDqWUgJyVzJyIKKworIzogdHJhaWxlci5jOjcwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgIkltcG9zc2libGUgZGUgbGlyZSBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsYSByw6lmICVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyMDMKK21zZ2lkICJDaGVja2luZyBvdXQgZmlsZXMiCittc2dzdHIgIkV4dHJhY3Rpb24gZGVzIGZpY2hpZXJzIgorCisjOiB1cmxtYXRjaC5jOjEyMAorbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICJub20gZGUgc2Now6ltYSBkJ1VSTCBpbnZhbGlkZSBvdSBzdWZmaXhlICc6Ly8nIG1hbnF1YW50IgorCisjOiB1cmxtYXRjaC5jOjE0NCB1cmxtYXRjaC5jOjI5NyB1cmxtYXRjaC5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgInPDqXF1ZW5jZSBkJ8OpY2hhcHBlbWVudCAlWFggaW52YWxpZGUiCisKKyM6IHVybG1hdGNoLmM6MTcyCittc2dpZCAibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciCittc2dzdHIgImjDtHRlIG1hbnF1YW50IGV0IGxlIHNjaMOpbWEgbidlc3QgcGFzICdmaWxlOiciCisKKyM6IHVybG1hdGNoLmM6MTg5Cittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAidW5lIFVSTCAnZmlsZTonIG5lIHBldXQgcGFzIGNvbnRlbmlyIGRlIG51bcOpcm8gZGUgcG9ydCIKKworIzogdXJsbWF0Y2guYzoxOTkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJjYXJhY3TDqHJlcyBpbnZhbGlkZXMgZGFucyBsZSBub20gZCdow7R0ZSIKKworIzogdXJsbWF0Y2guYzoyNDQgdXJsbWF0Y2guYzoyNTUKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJudW3DqXJvIGRlIHBvcnQgaW52YWxpZGUiCisKKyM6IHVybG1hdGNoLmM6MzIyCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAic2VnbWVudCBkZSBjaGVtaW4gJy4uJyBpbnZhbGlkZSIKKworIzogd3JhcHBlci5jOjIxOSB3cmFwcGVyLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJyVzJyBlbiBsZWN0dXJlL8OpY3JpdHVyZSIKKworIzogd3JhcHBlci5jOjIyMSB3cmFwcGVyLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJyVzJyBlbiDDqWNyaXR1cmUiCisKKyM6IHdyYXBwZXIuYzoyMjMgd3JhcHBlci5jOjM2NiBidWlsdGluL2FtLmM6MzM3IGJ1aWx0aW4vY29tbWl0LmM6MTY4OAorIzogYnVpbHRpbi9tZXJnZS5jOjEwNzYgYnVpbHRpbi9wdWxsLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJyVzJyBlbiBsZWN0dXJlIgorCisjOiB3cmFwcGVyLmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhY2PDqWRlciDDoCAnJXMnIDogJXMiCisKKyM6IHdyYXBwZXIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYWNjw6lkZXIgw6AgJyVzJyIKKworIzogd3JhcHBlci5jOjYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCBjdXJyZW50IHVzZXIgaW4gdGhlIHBhc3N3ZCBmaWxlOiAlcyIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZGUgcmVjaGVyY2hlciBsJ3V0aWxpc2F0ZXVyIGFjdHVlbCBkYW5zIGxlIGZpY2hpZXIgZGUgbW90cyBkZSAiCisicGFzc2UgOiAlcyIKKworIzogd3JhcHBlci5jOjYxMgorbXNnaWQgIm5vIHN1Y2ggdXNlciIKK21zZ3N0ciAidXRpbGlzYXRldXIgaW5jb25udSIKKworIzogd3JhcHBlci5jOjYyMAorbXNnaWQgInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FjY8OpZGVyIGF1IHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwgY291cmFudCIKKworIzogd3JhcHBlci5jOjYzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ291dnJpciAnJXMnIGVuIMOpY3JpdHVyZSIKKworIzogd3JhcHBlci5jOjY0MiBidWlsdGluL2FtLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ8OpY3JpcmUgZGFucyAlcyIKKworIzogd3JhcHBlci5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgZmVybWVyICVzIgorCisjOiB3dC1zdGF0dXMuYzoxNDkKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgIkNoZW1pbnMgbm9uIGZ1c2lvbm7DqXMgOiIKKworIzogd3Qtc3RhdHVzLmM6MTc2IHd0LXN0YXR1cy5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJlc2V0ICVzIDxmaWNoaWVyPi4uLlwiIHBvdXIgZMOpc2luZGV4ZXIpIgorCisjOiB3dC1zdGF0dXMuYzoxNzggd3Qtc3RhdHVzLmM6MjA1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBybSAtLWNhY2hlZCA8ZmljaGllcj4uLi5cIiBwb3VyIGTDqXNpbmRleGVyKSIKKworIzogd3Qtc3RhdHVzLmM6MTgyCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBhZGQgPGZpY2hpZXI+Li4uXCIgcG91ciBtYXJxdWVyIGNvbW1lIHLDqXNvbHUpIgorCisjOiB3dC1zdGF0dXMuYzoxODQgd3Qtc3RhdHVzLmM6MTg4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAodXRpbGlzZXogXCJnaXQgYWRkL3JtIDxmaWNoaWVyPi4uLlwiIHNpIG7DqWNlc3NhaXJlIHBvdXIgbWFycXVlciBjb21tZSAiCisicsOpc29sdSkiCisKKyM6IHd0LXN0YXR1cy5jOjE4NgorbXNnaWQgIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBybSA8ZmljaGllcj4uLi5cIiBwb3VyIG1hcnF1ZXIgY29tbWUgcsOpc29sdSkiCisKKyM6IHd0LXN0YXR1cy5jOjE5NyB3dC1zdGF0dXMuYzo4ODAKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIk1vZGlmaWNhdGlvbnMgcXVpIHNlcm9udCB2YWxpZMOpZXMgOiIKKworIzogd3Qtc3RhdHVzLmM6MjE1IHd0LXN0YXR1cy5jOjg4OQorbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAiTW9kaWZpY2F0aW9ucyBxdWkgbmUgc2Vyb250IHBhcyB2YWxpZMOpZXMgOiIKKworIzogd3Qtc3RhdHVzLmM6MjE5Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgICh1dGlsaXNleiBcImdpdCBhZGQgPGZpY2hpZXI+Li4uXCIgcG91ciBtZXR0cmUgw6Agam91ciBjZSBxdWkgc2VyYSB2YWxpZMOpKSIKKworIzogd3Qtc3RhdHVzLmM6MjIxCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgICh1dGlsaXNleiBcImdpdCBhZGQvcm0gPGZpY2hpZXI+Li4uXCIgcG91ciBtZXR0cmUgw6Agam91ciBjZSBxdWkgc2VyYSAiCisidmFsaWTDqSkiCisKKyM6IHd0LXN0YXR1cy5jOjIyMgorbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorIiAgKHV0aWxpc2V6IFwiZ2l0IGNoZWNrb3V0IC0tIDxmaWNoaWVyPi4uLlwiIHBvdXIgYW5udWxlciBsZXMgbW9kaWZpY2F0aW9ucyAiCisiZGFucyBsYSBjb3BpZSBkZSB0cmF2YWlsKSIKKworIzogd3Qtc3RhdHVzLmM6MjI0Cittc2dpZCAiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIgorbXNnc3RyICIiCisiICAodmFsaWRlciBvdSBhbm51bGVyIGxlIGNvbnRlbnUgbm9uIHN1aXZpIG91IG1vZGlmacOpIGRhbnMgbGVzIHNvdXMtbW9kdWxlcykiCisKKyM6IHd0LXN0YXR1cy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKHV0aWxpc2V6IFwiZ2l0ICVzIDxmaWNoaWVyPi4uLlwiIHBvdXIgaW5jbHVyZSBkYW5zIGNlIHF1aSBzZXJhIHZhbGlkw6kpIgorCisjOiB3dC1zdGF0dXMuYzoyNTEKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICJzdXBwcmltw6kgZGVzIGRldXggY8O0dMOpcyA6IgorCisjOiB3dC1zdGF0dXMuYzoyNTMKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgImFqb3V0w6kgcGFyIG5vdXMgOiIKKworIzogd3Qtc3RhdHVzLmM6MjU1Cittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAic3VwcHJpbcOpIHBhciBldXggOiIKKworIzogd3Qtc3RhdHVzLmM6MjU3Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgImFqb3V0w6kgcGFyIGV1eCA6IgorCisjOiB3dC1zdGF0dXMuYzoyNTkKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAic3VwcHJpbcOpIHBhciBub3VzIDoiCisKKyM6IHd0LXN0YXR1cy5jOjI2MQorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICJham91dMOpIGRlIGRldXggY8O0dMOpcyA6IgorCisjOiB3dC1zdGF0dXMuYzoyNjMKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAibW9kaWZpw6kgZGVzIGRldXggY8O0dMOpcyA6IgorCisjOiB3dC1zdGF0dXMuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4IgorbXNnc3RyICJib2d1ZSA6IMOpdGF0IGRlIG5vbi1mdXNpb24gbm9uIGfDqXLDqSAleCIKKworIzogd3Qtc3RhdHVzLmM6MjczCittc2dpZCAibmV3IGZpbGU6IgorbXNnc3RyICJub3V2ZWF1IGZpY2hpZXLCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NQorbXNnaWQgImNvcGllZDoiCittc2dzdHIgImNvcGnDqcKgOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc3Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgInN1cHByaW3DqcKgOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc5Cittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICJtb2RpZmnDqcKgOiIKKworIzogd3Qtc3RhdHVzLmM6MjgxCittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgInJlbm9tbcOpwqA6IgorCisjOiB3dC1zdGF0dXMuYzoyODMKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAibW9kaWYuIHR5cGXCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4NQorbXNnaWQgInVua25vd246IgorbXNnc3RyICJpbmNvbm51wqA6IgorCisjOiB3dC1zdGF0dXMuYzoyODcKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgIm5vbiBmdXNpb25uw6nCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjM2OQorbXNnaWQgIm5ldyBjb21taXRzLCAiCittc2dzdHIgIm5vdXZlYXV4IGNvbW1pdHMsICIKKworIzogd3Qtc3RhdHVzLmM6MzcxCittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICJjb250ZW51IG1vZGlmacOpLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM3MworbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlbnUgbm9uIHN1aXZpLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJidWc6IHVuaGFuZGxlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiYm9ndWUgOiDDqXRhdCBkZSBkaWZmIG5vbiBnw6lyw6kgJWMiCisKKyM6IHd0LXN0YXR1cy5jOjc1NAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICJTb3VzLW1vZHVsZXMgbW9kaWZpw6lzIG1haXMgbm9uIG1pcyDDoCBqb3VyIDoiCisKKyM6IHd0LXN0YXR1cy5jOjc1NgorbXNnaWQgIlN1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIkNoYW5nZW1lbnRzIGR1IHNvdXMtbW9kdWxlIMOgIHZhbGlkZXIgOiIKKworIzogd3Qtc3RhdHVzLmM6ODM3Cittc2dpZCAiIgorIkRvIG5vdCB0b3VjaCB0aGUgbGluZSBhYm92ZS5cbiIKKyJFdmVyeXRoaW5nIGJlbG93IHdpbGwgYmUgcmVtb3ZlZC4iCittc2dzdHIgIiIKKyJOZSB0b3VjaGV6IHBhcyDDoCBsYSBsaWduZSBjaS1kZXNzdXNcbiIKKyJUb3V0IHNlIHF1aSBzdWl0IHNlcmEgw6lsaW1pbsOpLiIKKworIzogd3Qtc3RhdHVzLmM6OTQ4Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICJWb3VzIGF2ZXogZGVzIGNoZW1pbnMgbm9uIGZ1c2lvbm7DqXMuIgorCisjOiB3dC1zdGF0dXMuYzo5NTEKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY29tbWl0XCIpIgorbXNnc3RyICIgIChyw6lnbGV6IGxlcyBjb25mbGl0cyBwdWlzIGxhbmNleiBcImdpdCBjb21taXRcIikiCisKKyM6IHd0LXN0YXR1cy5jOjk1NAorbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIlRvdXMgbGVzIGNvbmZsaXRzIHNvbnQgcsOpZ2zDqXMgbWFpcyBsYSBmdXNpb24gbidlc3QgcGFzIHRlcm1pbsOpZS4iCisKKyM6IHd0LXN0YXR1cy5jOjk1NworbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IGNvbW1pdFwiIHBvdXIgdGVybWluZXIgbGEgZnVzaW9uKSIKKworIzogd3Qtc3RhdHVzLmM6OTY3Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICJWb3VzIMOqdGVzIGF1IG1pbGlldSBkJ3VuZSBzZXNzaW9uIGFtLiIKKworIzogd3Qtc3RhdHVzLmM6OTcwCittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICJMZSBwYXRjaCBhY3R1ZWwgZXN0IHZpZGUuIgorCisjOiB3dC1zdGF0dXMuYzo5NzQKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChyw6lnbGV6IGxlcyBjb25mbGl0cyBwdWlzIGxhbmNleiBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzo5NzYKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgYW0gLS1za2lwXCIgcG91ciBzYXV0ZXIgY2UgcGF0Y2gpIgorCisjOiB3dC1zdGF0dXMuYzo5NzgKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IGFtIC0tYWJvcnRcIiBwb3VyIHJlc3RhdXJlciBsYSBicmFuY2hlIGQnb3JpZ2luZSkiCisKKyM6IHd0LXN0YXR1cy5jOjExMDUKK21zZ2lkICJObyBjb21tYW5kcyBkb25lLiIKK21zZ3N0ciAiQXVjdW5lIGNvbW1hbmRlIHLDqWFsaXPDqWUuIgorCisjOiB3dC1zdGF0dXMuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIKK21zZ2lkX3BsdXJhbCAiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiCittc2dzdHJbMF0gIkRlcm5pw6hyZSBjb21tYW5kZSBlZmZlY3R1w6llICglZCBjb21tYW5kZSBlZmZlY3R1w6llKcKgOiIKK21zZ3N0clsxXSAiRGVybmnDqHJlcyBjb21tYW5kZXMgZWZmZWN0dcOpZXMgKCVkIGNvbW1hbmRlcyBlZmZlY3R1w6llcynCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAoc2VlIG1vcmUgaW4gZmlsZSAlcykiCittc2dzdHIgIiAgKHZvaXIgcGx1cyBkYW5zIGxlIGZpY2hpZXIgJXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMTI0Cittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAiQXVjdW5lIGNvbW1hbmRlIHJlc3RhbnRlLiIKKworIzogd3Qtc3RhdHVzLmM6MTEyNworIywgYy1mb3JtYXQKK21zZ2lkICJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiCittc2dpZF9wbHVyYWwgIk5leHQgY29tbWFuZHMgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kcyk6IgorbXNnc3RyWzBdICJQcm9jaGFpbmUgY29tbWFuZGUgw6AgZWZmZWN0dWVyICglZCBjb21tYW5kZSByZXN0YW50ZSnCoDoiCittc2dzdHJbMV0gIlByb2NoYWluZXMgY29tbWFuZGVzIMOgIGVmZmVjdHVlciAoJWQgY29tbWFuZGVzIHJlc3RhbnRlcynCoDoiCisKKyM6IHd0LXN0YXR1cy5jOjExMzUKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgdG8gdmlldyBhbmQgZWRpdCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHBvdXIgdm9pciBldCDDqWRpdGVyKSIKKworIzogd3Qtc3RhdHVzLmM6MTE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiVm91cyDDqnRlcyBlbiB0cmFpbiBkZSByZWJhc2VyIGxhIGJyYW5jaGUgJyVzJyBzdXIgJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIlZvdXMgw6p0ZXMgZW4gdHJhaW4gZGUgcmViYXNlci4iCisKKyM6IHd0LXN0YXR1cy5jOjExNjcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAocsOpZ2xleiBsZXMgY29uZmxpdHMgcHVpcyBsYW5jZXogXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjExNjkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBwb3VyIHNhdXRlciBjZSBwYXRjaCkiCisKKyM6IHd0LXN0YXR1cy5jOjExNzEKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKHV0aWxpc2V6IFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgcG91ciBleHRyYWlyZSBsYSBicmFuY2hlIGQnb3JpZ2luZSkiCisKKyM6IHd0LXN0YXR1cy5jOjExNzcKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHRvdXMgbGVzIGNvbmZsaXRzIHNvbnQgcsOpZ2zDqXMgOiBsYW5jZXogXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjExODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIlZvdXMgw6p0ZXMgYWN0dWVsbGVtZW50IGVuIHRyYWluIGRlIGZyYWN0aW9ubmVyIHVuIGNvbW1pdCBwZW5kYW50IHVuIHJlYmFzYWdlICIKKyJkZSBsYSBicmFuY2hlICclcycgc3VyICclcycuIgorCisjOiB3dC1zdGF0dXMuYzoxMTg2Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIiIKKyJWb3VzIMOqdGVzIGFjdHVlbGxlbWVudCBlbiB0cmFpbiBkZSBmcmFjdGlvbm5lciB1biBjb21taXQgcGVuZGFudCB1biByZWJhc2FnZS4iCisKKyM6IHd0LXN0YXR1cy5jOjExODkKK21zZ2lkICIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKFVuZSBmb2lzIGxhIGNvcGllIGRlIHRyYXZhaWwgbmV0dG95w6llLCBsYW5jZXogXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjExOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIlZvdXMgw6p0ZXMgYWN0dWVsbGVtZW50IGVuIHRyYWluIGQnw6lkaXRlciB1biBjb21taXQgcGVuZGFudCB1biByZWJhc2FnZSBkZSBsYSAiCisiYnJhbmNoZSAnJXMnIHN1ciAnJXMnLiIKKworIzogd3Qtc3RhdHVzLmM6MTE5OAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiIgorIlZvdXMgw6p0ZXMgYWN0dWVsbGVtZW50IGVuIHRyYWluIGQnw6lkaXRlciB1biBjb21taXQgcGVuZGFudCB1biByZWJhc2FnZS4iCisKKyM6IHd0LXN0YXR1cy5jOjEyMDEKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBjb21taXQgLS1hbWVuZFwiIHBvdXIgY29ycmlnZXIgbGUgY29tbWl0IGFjdHVlbCkiCisKKyM6IHd0LXN0YXR1cy5jOjEyMDMKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiIKKyIgICh1dGlsaXNleiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiIHF1YW5kIHZvdXMgw6p0ZXMgc2F0aXNmYWl0IGRlIHZvcyAiCisibW9kaWZpY2F0aW9ucykiCisKKyM6IHd0LXN0YXR1cy5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiVm91cyDDqnRlcyBhY3R1ZWxsZW1lbnQgZW4gdHJhaW4gZGUgcGljb3JlciBsZSBjb21taXQgJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxMjE4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHLDqWdsZXogbGVzIGNvbmZsaXRzIHB1aXMgbGFuY2V6IFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEyMjEKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKHRvdXMgbGVzIGNvbmZsaXRzIHNvbnQgcsOpZ2zDqXMgOiBsYW5jZXogXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTIyMworbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgcG91ciBhbm51bGVyIGxlIHBpY29yYWdlKSIKKworIzogd3Qtc3RhdHVzLmM6MTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiVm91cyDDqnRlcyBhY3R1ZWxsZW1lbnQgZW4gdHJhaW4gZGUgcsOpdGFibGlyIGxlIGNvbW1pdCAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjEyMzcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHLDqWdsZXogbGVzIGNvbmZsaXRzIHB1aXMgbGFuY2V6IFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMjQwCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICh0b3VzIGxlcyBjb25mbGl0cyBzb250IHLDqWdsw6lzIDogbGFuY2V6IFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMjQyCittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAodXRpbGlzZXogXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiBwb3VyIGFubnVsZXIgbGUgcsOpdGFibGlzc2VtZW50KSIKKworIzogd3Qtc3RhdHVzLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgIlZvdXMgw6p0ZXMgZW4gY291cnMgZGUgYmlzc2VjdGlvbiwgZGVwdWlzIGxhIGJyYW5jaGUgJyVzJy4iCisKKyM6IHd0LXN0YXR1cy5jOjEyNTcKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcuIgorbXNnc3RyICJWb3VzIMOqdGVzIGVuIGNvdXJzIGRlIGJpc3NlY3Rpb24uIgorCisjOiB3dC1zdGF0dXMuYzoxMjYwCittc2dpZCAiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgICh1dGlsaXNleiBcImdpdCBiaXNlY3QgcmVzZXRcIiBwb3VyIHJldmVuaXIgw6AgbGEgYnJhbmNoZSBkJ29yaWdpbmUpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiU3VyIGxhIGJyYW5jaGUgIgorCisjOiB3dC1zdGF0dXMuYzoxNDQ1Cittc2dpZCAiaW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAicmViYXNhZ2UgaW50ZXJhY3RpZiBlbiBjb3VycyA7IHN1ciAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDcKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJyZWJhc2FnZSBlbiBjb3VycyA7IHN1ciAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKK21zZ2lkICJIRUFEIGRldGFjaGVkIGF0ICIKK21zZ3N0ciAiSEVBRCBkw6l0YWNow6llIHN1ciAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NTQKK21zZ2lkICJIRUFEIGRldGFjaGVkIGZyb20gIgorbXNnc3RyICJIRUFEIGTDqXRhY2jDqWUgZGVwdWlzICIKKworIzogd3Qtc3RhdHVzLmM6MTQ1NworbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIkFjdHVlbGxlbWVudCBzdXIgYXVjdW4gYnJhbmNoZS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NzQKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiVmFsaWRhdGlvbiBpbml0aWFsZSIKKworIzogd3Qtc3RhdHVzLmM6MTQ4OAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiRmljaGllcnMgbm9uIHN1aXZpcyIKKworIzogd3Qtc3RhdHVzLmM6MTQ5MAorbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIkZpY2hpZXJzIGlnbm9yw6lzIgorCisjOiB3dC1zdGF0dXMuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkIGZpbGVzLiAnc3RhdHVzIC11bm8nXG4iCisibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZFxuIgorIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCittc2dzdHIgIiIKKyJMJ8OpbnVtw6lyYXRpb24gZGVzIGZpY2hpZXJzIG5vbiBzdWl2aXMgYSBkdXLDqSAlLjJmIHNlY29uZGVzLiAnc3RhdHVzIC11bm8nXG4iCisicGV1dCBsJ2FjY8OpbMOpcmVyLCBtYWlzIHZvdXMgZGV2ZXogYWxvcnMgZmFpcmUgYXR0ZW50aW9uIMOgIG5lIHBhc1xuIgorIm91YmxpZXIgZCdham91dGVyIGxlcyBub3V2ZWF1eCBmaWNoaWVycyBwYXIgdm91cy1tw6ptZSAodm9pciAnZ2l0IGhlbHAgIgorInN0YXR1cycpLiIKKworIzogd3Qtc3RhdHVzLmM6MTUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICJGaWNoaWVycyBub24gc3VpdmlzIG5vbiBhZmZpY2jDqXMlcyIKKworIzogd3Qtc3RhdHVzLmM6MTUwMgorbXNnaWQgIiAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykiCittc2dzdHIgIiAodXRpbGlzZXogLXUgcG91ciBhZmZpY2hlciBsZXMgZmljaGllcnMgbm9uIHN1aXZpcykiCisKKyM6IHd0LXN0YXR1cy5jOjE1MDgKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICJBdWN1bmUgbW9kaWZpY2F0aW9uIgorCisjOiB3dC1zdGF0dXMuYzoxNTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisiYXVjdW5lIG1vZGlmaWNhdGlvbiBuJ2Egw6l0w6kgYWpvdXTDqWUgw6AgbGEgdmFsaWRhdGlvbiAodXRpbGlzZXogXCJnaXQgYWRkXCIgb3UgIgorIlwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgImF1Y3VuZSBtb2RpZmljYXRpb24gYWpvdXTDqWUgw6AgbGEgdmFsaWRhdGlvblxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKyJhdWN1bmUgbW9kaWZpY2F0aW9uIGFqb3V0w6llIMOgIGxhIHZhbGlkYXRpb24gbWFpcyBkZXMgZmljaGllcnMgbm9uIHN1aXZpcyAiCisic29udCBwcsOpc2VudHMgKHV0aWxpc2V6IFwiZ2l0IGFkZFwiIHBvdXIgbGVzIHN1aXZyZSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAiIgorImF1Y3VuZSBtb2RpZmljYXRpb24gYWpvdXTDqWUgw6AgbGEgdmFsaWRhdGlvbiBtYWlzIGRlcyBmaWNoaWVycyBub24gc3VpdmlzICIKKyJzb250IHByw6lzZW50c1xuIgorCisjOiB3dC1zdGF0dXMuYzoxNTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICIiCisicmllbiDDoCB2YWxpZGVyIChjcsOpZXovY29waWV6IGRlcyBmaWNoaWVycyBldCB1dGlsaXNleiBcImdpdCBhZGRcIiBwb3VyIGxlcyAiCisic3VpdnJlKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTI4IHd0LXN0YXR1cy5jOjE1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXRcbiIKK21zZ3N0ciAicmllbiDDoCB2YWxpZGVyXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAicmllbiDDoCB2YWxpZGVyICh1dGlsaXNleiAtdSBwb3VyIGFmZmljaGVyIGxlcyBmaWNoaWVycyBub24gc3VpdmlzKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIGRpcmVjdG9yeSBjbGVhblxuIgorbXNnc3RyICJyaWVuIMOgIHZhbGlkZXIsIGxhIGNvcGllIGRlIHRyYXZhaWwgZXN0IHByb3ByZVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjQ0Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAoYXVjdW5lIGJyYW5jaGUpIgorCisjOiB3dC1zdGF0dXMuYzoxNjUwCittc2dpZCAiSW5pdGlhbCBjb21taXQgb24gIgorbXNnc3RyICJWYWxpZGF0aW9uIGluaXRpYWxlIHN1ciAiCisKKyMgw6AgcHJpb3JpIG9uIHBhcmxlIGQndW5lIGJyYW5jaGUgaWNpCisjOiB3dC1zdGF0dXMuYzoxNjc3Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAiZGlzcGFydWUiCisKKyM6IHd0LXN0YXR1cy5jOjE2Nzkgd3Qtc3RhdHVzLmM6MTY4NworbXNnaWQgImJlaGluZCAiCittc2dzdHIgImRlcnJpw6hyZSAiCisKKyM6IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguYzo1NSBidWlsdGluL2Nsb25lLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGxvcnMgZGUgbCd1bmxpbmsgZGUgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyMgorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPGNoZW1pbj4uLi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAic3RhdHVzIGRlIGRpZmYgaW5hdHRlbmR1ICVjIgorCisjOiBidWlsdGluL2FkZC5jOjcwIGJ1aWx0aW4vY29tbWl0LmM6Mjc3Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgbWlzZSDDoCBqb3VyIGRlcyBmaWNoaWVycyIKKworIzogYnVpbHRpbi9hZGQuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmUgJyVzJ1xuIgorbXNnc3RyICJzdXBwcmVzc2lvbiBkZSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTM0Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIk1vZGlmaWNhdGlvbnMgbm9uIGluZGV4w6llcyBhcHLDqHMgcmFmcmHDrmNoaXNzZW1lbnQgZGUgbCdpbmRleCA6IgorCisjOiBidWlsdGluL2FkZC5jOjE5NCBidWlsdGluL3Jldi1wYXJzZS5jOjc5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyICclcycgZW4gw6ljcml0dXJlLiIKKworIzogYnVpbHRpbi9hZGQuYzoyMDkKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgcGF0Y2giCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGxlIHBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjIxMgorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCfDqWRpdGlvbiBkdSBwYXRjaCIKKworIzogYnVpbHRpbi9hZGQuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiU3RhdCBkZSAnJXMnIGltcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjE3Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICJQYXRjaCB2aWRlLiBBYmFuZG9uLiIKKworIzogYnVpbHRpbi9hZGQuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGx5ICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdhcHBsaXF1ZXIgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyMzIKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIiIKKyJMZXMgY2hlbWlucyBzdWl2YW50cyBzb250IGlnbm9yw6lzIHBhciB1biBkZSB2b3MgZmljaGllcnMgLmdpdGlnbm9yZSA6XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjQ5IGJ1aWx0aW4vY2xlYW4uYzo4OTYgYnVpbHRpbi9mZXRjaC5jOjEwOCBidWlsdGluL212LmM6MTEwCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU1IGJ1aWx0aW4vcHVsbC5jOjE4MiBidWlsdGluL3B1c2guYzo1NDUKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMzOSBidWlsdGluL3JtLmM6MjY4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYyCittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAic2ltdWxlciBsJ2FjdGlvbiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTAgYnVpbHRpbi9hcHBseS5jOjQ1ODAgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxOQorIzogYnVpbHRpbi9jb21taXQuYzoxMzIxIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjYzIGJ1aWx0aW4vZnNjay5jOjYzNgorIzogYnVpbHRpbi9sb2cuYzoxNjQxIGJ1aWx0aW4vbXYuYzoxMDkgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTQKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJtb2RlIHZlcmJldXgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUyCittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAic8OpbGVjdGlvbiBpbnRlcmFjdGl2ZSIKKworIzogYnVpbHRpbi9hZGQuYzoyNTMgYnVpbHRpbi9jaGVja291dC5jOjExNTIgYnVpbHRpbi9yZXNldC5jOjI4NgorbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJzw6lsZWN0aW9uIGludGVyYWN0aXZlIGRlcyBzZWN0aW9ucyIKKworIzogYnVpbHRpbi9hZGQuYzoyNTQKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgIsOpZGl0aW9uIGR1IGRpZmYgYWN0dWVsIGV0IGFwcGxpY2F0aW9uIgorCisjOiBidWlsdGluL2FkZC5jOjI1NQorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAicGVybWV0dHJlIGwnYWpvdXQgZGUgZmljaGllcnMgaWdub3LDqXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU2Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgIm1ldHRyZSDDoCBqb3VyIGxlcyBmaWNoaWVycyBzdWl2aXMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU3Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgcGF0aCB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICJlbnJlZ2lzdHJlciBzZXVsZW1lbnQgbGUgZmFpdCBxdWUgbGUgY2hlbWluIHNlcmEgYWpvdXTDqSBwbHVzIHRhcmQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU4Cittc2dpZCAiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJham91dGVyIGxlcyBtb2RpZmljYXRpb25zIGRlIHRvdXMgbGVzIGZpY2hpZXJzIHN1aXZpcyBldCBub24gc3VpdmlzIgorCisjOiBidWlsdGluL2FkZC5jOjI2MQorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICIiCisiaWdub3JlciBsZXMgY2hlbWlucyBlZmZhY8OpcyBkYW5zIGxhIGNvcGllIGRlIHRyYXZhaWwgKGlkZW50aXF1ZSDDoCAtLW5vLWFsbCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYzCittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJuZSBwYXMgYWpvdXRlciwganVzdGUgcmFmcmHDrmNoaXIgbCdpbmRleCIKKworIzogYnVpbHRpbi9hZGQuYzoyNjQKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICIiCisic2F1dGVyIHNldWxlbWVudCBsZXMgZmljaGllcnMgcXVpIG5lIHBldXZlbnQgcGFzIMOqdHJlIGFqb3V0w6lzIGR1IGZhaXQgIgorImQnZXJyZXVycyIKKworIzogYnVpbHRpbi9hZGQuYzoyNjUKK21zZ2lkICJjaGVjayBpZiAtIGV2ZW4gbWlzc2luZyAtIGZpbGVzIGFyZSBpZ25vcmVkIGluIGRyeSBydW4iCittc2dzdHIgInbDqXJpZmllciBzaSBkZXMgZmljaGllcnMgLSBtw6ptZSBtYW5xdWFudHMgLSBzb250IGlnbm9yw6lzLCDDoCB2aWRlIgorCisjOiBidWlsdGluL2FkZC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICJVdGlsaXNleiAtZiBzaSB2b3VzIHZvdWxleiByw6llbGxlbWVudCBsZXMgYWpvdXRlci5cbiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTQKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgbCdham91dCBkZSBmaWNoaWVycyIKKworIzogYnVpbHRpbi9hZGQuYzozMzAKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLUEgZXQgLXUgc29udCBtdXR1ZWxsZW1lbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9hZGQuYzozMzcKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICIiCisiTCdvcHRpb24gLS1pZ25vcmUtbWlzc2luZyBuZSBwZXV0IMOqdHJlIHV0aWxpc8OpZSBxdSdlbiBjb21wbMOpbWVudCBkZSAtLWRyeS1ydW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICJSaWVuIGRlIHNww6ljaWZpw6ksIHJpZW4gbidhIMOpdMOpIGFqb3V0w6kuXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICJWb3VzIHZvdWxpZXogc8O7cmVtZW50IGRpcmUgJ2dpdCBhZGQgLicgP1xuIgorCisjOiBidWlsdGluL2FkZC5jOjM2NCBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MiBidWlsdGluL2NsZWFuLmM6OTQwCisjOiBidWlsdGluL2NvbW1pdC5jOjMzNiBidWlsdGluL212LmM6MTMwIGJ1aWx0aW4vcmVzZXQuYzoyMzUgYnVpbHRpbi9ybS5jOjI5OAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiZmljaGllciBkJ2luZGV4IGNvcnJvbXB1IgorCisjOiBidWlsdGluL2FkZC5jOjQ0NSBidWlsdGluL2FwcGx5LmM6NDY3OCBidWlsdGluL212LmM6Mjc5IGJ1aWx0aW4vcm0uYzo0MzAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyaXJlIGxlIG5vdXZlYXUgZmljaGllciBkJ2luZGV4IgorCisjOiBidWlsdGluL2FtLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHN0YXQgJXMiCittc2dzdHIgInN0YXQgaW1wb3NzaWJsZSBkZSAlcyIKKworIzogYnVpbHRpbi9hbS5jOjI3MCBidWlsdGluL2FtLmM6MTM0NSBidWlsdGluL2NvbW1pdC5jOjczNyBidWlsdGluL21lcmdlLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjQ0NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgc2NyaXB0IGF1dGhvciIKKworIzogYnVpbHRpbi9hbS5jOjUyMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICInJXMnIGEgw6l0w6kgZWZmYWPDqSBwYXIgbGUgY3JvY2hldCBhcHBseXBhdGNoLW1zZyIKKworIzogYnVpbHRpbi9hbS5jOjU2MiBidWlsdGluL25vdGVzLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiTGlnbmUgZW4gZW50csOpZSBtYWxmb3Jtw6llIDogJyVzJy4iCisKKyM6IGJ1aWx0aW4vYW0uYzo1OTkgYnVpbHRpbi9ub3Rlcy5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjb3BpZXIgbGVzIG5vdGVzIGRlICclcycgdmVycyAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6NjI1Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgZnNlZWsiCisKKyM6IGJ1aWx0aW4vYW0uYzo3ODYgYnVpbHRpbi9hbS5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ291dnJpciAnJXMnIGVuIGxlY3R1cmXCoDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJyVzJyBlbiDDqWNyaXR1cmXCoDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzo4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBwYXRjaCAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6ODY3Cittc2dpZCAiT25seSBvbmUgU3RHSVQgcGF0Y2ggc2VyaWVzIGNhbiBiZSBhcHBsaWVkIGF0IG9uY2UiCittc2dzdHIgIlNldWxlbWVudCB1bmUgc8OpcmllIGRlIHBhdGNocyBTdEdJVCBwZXV0IMOqdHJlIGFwcGxpcXXDqWUgw6AgbGEgZm9pcyIKKworIzogYnVpbHRpbi9hbS5jOjkxNQorbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICJob3JvZGF0YWdlIGludmFsaWRlIgorCisjOiBidWlsdGluL2FtLmM6OTE4IGJ1aWx0aW4vYW0uYzo5MjYKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAibGlnbmUgZGUgRGF0ZSBpbnZhbGlkZSIKKworIzogYnVpbHRpbi9hbS5jOjkyMworbXNnaWQgImludmFsaWQgdGltZXpvbmUgb2Zmc2V0IgorbXNnc3RyICJkw6ljYWxhZ2UgaG9yYWlyZSBpbnZhbGlkZSIKKworIzogYnVpbHRpbi9hbS5jOjEwMTAKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIsOJY2hlYyBkZSBkw6l0ZWN0aW9uIGR1IGZvcm1hdCBkdSBwYXRjaC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDE1IGJ1aWx0aW4vY2xvbmUuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGNyw6lhdGlvbiBkdSByw6lwZXJ0b2lyZSAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6MTAxOQorbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAiw4ljaGVjIGRlIGTDqWNvdXBhZ2UgZGVzIHBhdGNocy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTUxIGJ1aWx0aW4vY29tbWl0LmM6MzYyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIGZpY2hpZXIgZCdpbmRleCIKKworIzogYnVpbHRpbi9hbS5jOjEyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgIlF1YW5kIHZvdXMgYXZleiByw6lzb2x1IGNlIHByb2Jsw6htZSwgbGFuY2V6IFwiJXMgLS1jb250aW51ZVwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICJTaSB2b3VzIHByw6lmw6lyZXogcGx1dMO0dCBzYXV0ZXIgY2UgcGF0Y2gsIGxhbmNleiBcIiVzIC0tc2tpcFwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICIiCisiUG91ciByZXN0YXVyZXIgbGEgYnJhbmNoZSBvcmlnaW5hbGUgZXQgYXJyw6p0ZXIgZGUgcGF0Y2hlciwgbGFuY2V6IFwiJXMgLS0iCisiYWJvcnRcIi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMzM5Cittc2dpZCAiUGF0Y2ggaXMgZW1wdHkuIFdhcyBpdCBzcGxpdCB3cm9uZz8iCittc2dzdHIgIkxlIHBhdGNoIGVzdCB2aWRlLiBMZSBkw6ljb3VwYWdlIMOpdGFpdC1pbCBib27CoD8iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDEzIGJ1aWx0aW4vbG9nLmM6MTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIgorbXNnc3RyICJsaWduZSBkJ2lkZW50aWZpY2F0aW9uIGludmFsaWRlIDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBjb21taXQgJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjE0Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAiIgorIkxlIGTDqXDDtHQgbidhIHBhcyBsZXMgYmxvYnMgbsOpY2Vzc2FpcmVzIHBvdXIgdW4gcmV0b3VyIMOgIHVuZSBmdXNpb24gw6AgMyAiCisicG9pbnRzLiIKKworIzogYnVpbHRpbi9hbS5jOjE2MTYKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICIiCisiVXRpbGlzYXRpb24gZGUgbCdpbmZvcm1hdGlvbiBkZSBsJ2luZGV4IHBvdXIgcmVjb25zdHJ1aXJlIHVuIGFyYnJlIGRlIGJhc2UuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjM1Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIkF2ZXotdm91cyDDqWRpdMOpIGxlIHBhdGNoIMOgIGxhIG1haW4gP1xuIgorIklsIG5lIHMnYXBwbGlxdWUgcGFzIGF1eCBibG9icyBlbnJlZ2lzdHLDqXMgZGFucyBzb24gaW5kZXguIgorCisjOiBidWlsdGluL2FtLmM6MTY0MQorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiUmV0b3VyIMOgIHVuIHBhdGNoIGRlIGxhIGJhc2UgZXQgZnVzaW9uIMOgIDMgcG9pbnRzLi4uIgorCisjOiBidWlsdGluL2FtLmM6MTY2NgorbXNnaWQgIkZhaWxlZCB0byBtZXJnZSBpbiB0aGUgY2hhbmdlcy4iCittc2dzdHIgIsOJY2hlYyBkJ2ludMOpZ3JhdGlvbiBkZXMgbW9kaWZpY2F0aW9ucy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjkxIGJ1aWx0aW4vbWVyZ2UuYzo2MzIKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBhIMOpY2hvdcOpIMOgIMOpY3JpcmUgdW4gYXJicmUiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjk4Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAiYXBwbGljYXRpb24gw6AgdW4gaGlzdG9yaXF1ZSB2aWRlIgorCisjOiBidWlsdGluL2FtLmM6MTcxMSBidWlsdGluL2NvbW1pdC5jOjE3NTIgYnVpbHRpbi9tZXJnZS5jOjgyOQorIzogYnVpbHRpbi9tZXJnZS5jOjg1NAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICLDqWNoZWMgZGUgbCfDqWNyaXR1cmUgZGUgbCdvYmpldCBjb21taXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQzIGJ1aWx0aW4vYW0uYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjb250aW51ZXIgOiAlcyBuJ2V4aXN0ZSBwYXMuIgorCisjOiBidWlsdGluL2FtLmM6MTc2MworbXNnaWQgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIKK21zZ3N0ciAiIgorImltcG9zc2libGUgZCfDqnRyZSBpbnRlcmFjdGlmIHNhbnMgZW50csOpZSBzdGFuZGFyZCBjb25uZWN0w6llIMOgIHVuIHRlcm1pbmFsLiIKKworIzogYnVpbHRpbi9hbS5jOjE3NjgKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIkxlIGNvcnBzIGRlIGxhIHZhbGlkYXRpb24gZXN0IDoiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNzc4Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKK21zZ3N0ciAiQXBwbGlxdWVyID8gW3ldZXMvW25dby9bZV1kaXQvW3ZdaWV3IHBhdGNoL1thXWNjZXB0IGFsbMKgOiAiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAiSW5kZXggc2FsZSA6IGltcG9zc2libGUgZCdhcHBsaXF1ZXIgZGVzIHBhdGNocyAoc2FsZXMgOiAlcykiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODYzIGJ1aWx0aW4vYW0uYzoxOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICJBcHBsaWNhdGlvbiBkZSAgJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE4NzkKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIlBhcyBkZSBjaGFuZ2VtZW50IC0tIFBhdGNoIGTDqWrDoCBhcHBsaXF1w6kuIgorCisjOiBidWlsdGluL2FtLmM6MTg4NworIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAibGUgcGF0Y2ggYSDDqWNob3XDqSDDoCAlcyAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTg5MworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY29weSBvZiB0aGUgcGF0Y2ggdGhhdCBmYWlsZWQgaXMgZm91bmQgaW46ICVzIgorbXNnc3RyICJMYSBjb3BpZSBkdSBwYXRjaCBxdWkgYSDDqWNob3XDqSBzZSB0cm91dmUgZGFucyA6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTkzNworbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAiIgorIkF1Y3VuIGNoYW5nZW1lbnQgLSBhdmV6LXZvdXMgb3VibGnDqSBkJ3V0aWxpc2VyICdnaXQgYWRkJyA/XG4iCisiUydpbCBuJ3kgYSBwbHVzIHJpZW4gw6AgaW5kZXhlciwgaWwgc2UgcGV1dCBxdSdhdXRyZSBjaG9zZSBhaXQgZMOpasOgXG4iCisiaW50cm9kdWl0IGxlcyBtw6ptZXMgY2hhbmdlbWVudHMgOyB2b3VzIHBvdXJyaWV6IGF2b2lyIGVudmllIGRlIHNhdXRlciBjZSAiCisicGF0Y2guIgorCisjOiBidWlsdGluL2FtLmM6MTk0NAorbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4LlxuIgorIkRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/IgorbXNnc3RyICIiCisiVm91cyBhdmV6IHRvdWpvdXJzIGRlcyBjaGVtaW5zIG5vbiBmdXNpb25uw6lzIGRhbnMgdm90cmUgaW5kZXhcbiIKKyJBdXJpZXotdm91cyBvdWJsacOpIGRlIGZhaXJlICdnaXQgYWRkJyA/IgorCisjOiBidWlsdGluL2FtLmM6MjA1MiBidWlsdGluL2FtLmM6MjA1NiBidWlsdGluL2FtLmM6MjA2OCBidWlsdGluL3Jlc2V0LmM6MzA4CisjOiBidWlsdGluL3Jlc2V0LmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIkltcG9zc2libGUgZCdhbmFseXNlciBsJ29iamV0ICclcycuIgorCisjOiBidWlsdGluL2FtLmM6MjEwNAorbXNnaWQgImZhaWxlZCB0byBjbGVhbiBpbmRleCIKK21zZ3N0ciAiw6ljaGVjIGR1IG5ldHRveWFnZSBkZSBsJ2luZGV4IgorCisjOiBidWlsdGluL2FtLmM6MjEzOAorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiVm91cyBzZW1ibGV6IGF2b2lyIGTDqXBsYWPDqSBsYSBIRUFEIGRlcHVpcyBsZSBkZXJuaWVyIMOpY2hlYyBkZSAnYW0nLlxuIgorIlBhcyBkZSByZXRvdXIgw6AgT1JJR19IRUFEIgorCisjOiBidWlsdGluL2FtLmM6MjE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIlZhbGV1ciBpbnZhbGlkZSBwb3VyIC0tcGF0Y2gtZm9ybWF0IDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAiZ2l0IGFtIFtvcHRpb25zXSBbKDxtYm94Pnw8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFs8b3B0aW9ucz5dIFsoPG1ib3g+fDxNYWlsZGlyPikuLi5dIgorCisjOiBidWlsdGluL2FtLmM6MjIyMgorbXNnaWQgImdpdCBhbSBbb3B0aW9uc10gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFtvcHRpb25zXSAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tIGFib3J0KVwiIgorCisjOiBidWlsdGluL2FtLmM6MjIyOAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJleMOpY3V0aW9uIGludGVyYWN0aXZlIgorCisjOiBidWlsdGluL2FtLmM6MjIzMAorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICJvcHRpb24gaGlzdG9yaXF1ZSAtLSBuby1vcCIKKworIzogYnVpbHRpbi9hbS5jOjIyMzIKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAicGVybWV0dHJlIGRlIHJldmVuaXIgw6AgdW5lIGZ1c2lvbiDDoCAzIHBvaW50cyBzaSBuw6ljZXNzYWlyZSIKKworIzogYnVpbHRpbi9hbS5jOjIyMzMgYnVpbHRpbi9pbml0LWRiLmM6NTA5IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTcKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTcxCittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgIsOqdHJlIHNpbGVuY2lldXgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM1Cittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiYWpvdXRlciB1bmUgbGlnbmUgU2lnbmVkLW9mZi1ieSBhdSBtZXNzYWdlIGRlIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM4Cittc2dpZCAicmVjb2RlIGludG8gdXRmOCAoZGVmYXVsdCkiCittc2dzdHIgInJlY29kZXIgZW4gdXRmLTggKHBhciBkw6lmYXV0KSIKKworIzogYnVpbHRpbi9hbS5jOjIyNDAKK21zZ2lkICJwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJwYXNzZXIgbCdvcHRpb24gLWsgw6AgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjI0MgorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInBhc3NlciBsJ29wdGlvbiAtYiDDoCBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ0Cittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAicGFzc2VyIGwnb3B0aW9uIC1tIMOgIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDYKK21zZ2lkICJwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgZm9yIG1ib3ggZm9ybWF0IgorbXNnc3RyICJwYXNzZXIgbCdvcHRpb24gLS1rZWVwLWNyIMOgIGdpdC1tYWlsc3BsaXQgZnBvdXIgbGUgZm9ybWF0IG1ib3giCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ5Cittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgIiIKKyJuZSBwYXMgcGFzc2VyIGwnb3B0aW9uIC0ta2VlcC1jciDDoCBnaXQtbWFpbHNwbGl0IGluZMOpcGVuZGFtbWVudCBkZSBhbS5rZWVwY3IiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUyCittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICJyZXRpcmVyIHRvdXQgbGUgY29udGVudSBhdmFudCBsYSBsaWduZSBkZXMgY2lzZWF1eCIKKworIzogYnVpbHRpbi9hbS5jOjIyNTMgYnVpbHRpbi9hcHBseS5jOjQ1NjMKK21zZ2lkICJhY3Rpb24iCittc2dzdHIgImFjdGlvbiIKKworIzogYnVpbHRpbi9hbS5jOjIyNTQgYnVpbHRpbi9hbS5jOjIyNTcgYnVpbHRpbi9hbS5jOjIyNjAgYnVpbHRpbi9hbS5jOjIyNjMKKyM6IGJ1aWx0aW4vYW0uYzoyMjY2IGJ1aWx0aW4vYW0uYzoyMjY5IGJ1aWx0aW4vYW0uYzoyMjcyIGJ1aWx0aW4vYW0uYzoyMjc1CisjOiBidWlsdGluL2FtLmM6MjI4MQorbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgImxlIHBhc3NlciBqdXNxdSfDoCBnaXQtYXBwbHkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYyIGJ1aWx0aW4vYXBwbHkuYzo0NTg3Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicmFjaW5lIgorCisjOiBidWlsdGluL2FtLmM6MjI2NSBidWlsdGluL2FtLmM6MjI2OCBidWlsdGluL2FwcGx5LmM6NDUyNQorIzogYnVpbHRpbi9hcHBseS5jOjQ1MjggYnVpbHRpbi9jbG9uZS5jOjg1IGJ1aWx0aW4vZmV0Y2guYzo5MworIzogYnVpbHRpbi9wdWxsLmM6MTY3Cittc2dpZCAicGF0aCIKK21zZ3N0ciAiY2hlbWluIgorCisjOiBidWlsdGluL2FtLmM6MjI3MSBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjkgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcyCisjOiBidWlsdGluL2dyZXAuYzo2OTggYnVpbHRpbi9tZXJnZS5jOjE5OCBidWlsdGluL3B1bGwuYzoxMjcKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc4IGJ1aWx0aW4vcmVwYWNrLmM6MTgyIGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjQKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODAgYnVpbHRpbi90YWcuYzo1OTEgcGFyc2Utb3B0aW9ucy5oOjEzMgorIzogcGFyc2Utb3B0aW9ucy5oOjEzNCBwYXJzZS1vcHRpb25zLmg6MjQzCittc2dpZCAibiIKK21zZ3N0ciAibiIKKworIzogYnVpbHRpbi9hbS5jOjIyNzQgYnVpbHRpbi9hcHBseS5jOjQ1MzEKK21zZ2lkICJudW0iCittc2dzdHIgIm51bSIKKworIzogYnVpbHRpbi9hbS5jOjIyNzcgYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNCBidWlsdGluL3JlcGxhY2UuYzo0MzgKK21zZ2lkICJmb3JtYXQiCittc2dzdHIgImZvcm1hdCIKKworIzogYnVpbHRpbi9hbS5jOjIyNzgKK21zZ2lkICJmb3JtYXQgdGhlIHBhdGNoKGVzKSBhcmUgaW4iCittc2dzdHIgImZvcm1hdCBkZSBwcsOpc2VudGF0aW9uIGRlcyBwYXRjaHMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg0Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICJzdXJjaGFyZ2VyIGxlIG1lc3NhZ2UgZCdlcnJldXIgbG9ycyBkJ3VuIMOpY2hlYyBkJ2FwcGxpY2F0aW9uIGRlIHBhdGNoIgorCisjOiBidWlsdGluL2FtLmM6MjI4NgorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgImNvbnRpbnVlciDDoCBhcHBsaXF1ZXIgbGVzIHBhdGNocyBhcHLDqHMgcsOpc29sdXRpb24gZCd1biBjb25mbGl0IgorCisjOiBidWlsdGluL2FtLmM6MjI4OQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICJzeW5vbnltZXMgZGUgLS1jb250aW51ZSIKKworIzogYnVpbHRpbi9hbS5jOjIyOTIKK21zZ2lkICJza2lwIHRoZSBjdXJyZW50IHBhdGNoIgorbXNnc3RyICJzYXV0ZXIgbGUgcGF0Y2ggY291cmFudCIKKworIzogYnVpbHRpbi9hbS5jOjIyOTUKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICIiCisicmVzdGF1cmVyIGxhIGJyYW5jaGUgb3JpZ2luYWxlIGV0IGFiYW5kb25uZXIgbGVzIGFwcGxpY2F0aW9ucyBkZSBwYXRjaC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk5Cittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICJtZW50aXIgc3VyIGxhIGRhdGUgZGUgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9hbS5jOjIzMDEKK21zZ2lkICJ1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlIgorbXNnc3RyICJ1dGlsaXNlciBsJ2hvcm9kYXRhZ2UgYWN0dWVsIHBvdXIgbGEgZGF0ZSBkJ2F1dGV1ciIKKworIzogYnVpbHRpbi9hbS5jOjIzMDMgYnVpbHRpbi9jb21taXQuYzoxNTkwIGJ1aWx0aW4vbWVyZ2UuYzoyMjUKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1NSBidWlsdGluL3JldmVydC5jOjkyIGJ1aWx0aW4vdGFnLmM6NjA2Cittc2dpZCAia2V5LWlkIgorbXNnc3RyICJpZCBkZSBjbMOpIgorCisjOiBidWlsdGluL2FtLmM6MjMwNAorbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgInNpZ25lciBsZXMgY29tbWl0cyBhdmVjIEdQRyIKKworIzogYnVpbHRpbi9hbS5jOjIzMDcKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKHV0aWxpc2F0aW9uIGludGVybmUgcG91ciBnaXQtcmViYXNlKSIKKworIzogYnVpbHRpbi9hbS5jOjIzMjIKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyJMJ29wdGlvbiAtYi8tLWJpbmFyeSBuZSBmYWl0IHBsdXMgcmllbiBkZXB1aXMgbG9uZ3RlbXBzLFxuIgorImV0IGVsbGUgc2VyYSBzdXBwcmltw6llLiBWZXVpbGxleiBuZSBwbHVzIGwndXRpbGlzZXIuIgorCisjOiBidWlsdGluL2FtLmM6MjMyOQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiw6ljaGVjIMOgIGxhIGxlY3R1cmUgZGUgbCdpbmRleCIKKworIzogYnVpbHRpbi9hbS5jOjIzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICIiCisibGUgcsOpcGVydG9pcmUgcHLDqWPDqWRlbnQgZGUgcmViYXNhZ2UgJXMgZXhpc3RlIHRvdWpvdXJzIG1haXMgbWJveCBkb25uw6llLiIKKworIzogYnVpbHRpbi9hbS5jOjIzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN0cmF5ICVzIGRpcmVjdG9yeSBmb3VuZC5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iCittc2dzdHIgIiIKKyJSw6lwZXJ0b2lyZSBhYmFuZG9ubsOpICVzIHRyb3V2w6kuXG4iCisiVXRpbGlzZXogXCJnaXQgYW0gLS1hYm9ydFwiIHBvdXIgbGUgc3VwcHJpbWVyLiIKKworIzogYnVpbHRpbi9hbS5jOjIzNzQKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICIiCisiUGFzIGRlIHLDqXNvbHV0aW9uIGRlIGwnb3DDqXJhdGlvbiBlbiBjb3Vycywgbm91cyBuZSBzb21tZXMgcGFzIGRhbnMgdW5lICIKKyJyZXByaXNlLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjU5Cittc2dpZCAiZ2l0IGFwcGx5IFs8b3B0aW9ucz5dIFs8cGF0Y2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGFwcGx5IFs8b3B0aW9ucz5dIFs8cGF0Y2g+Li4uXSIKKworIzogYnVpbHRpbi9hcHBseS5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAib3B0aW9uIGQnZXNwYWNlIG5vbiByZWNvbm51ZSAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAib3B0aW9uIGQnaWdub3JhbmNlIGQnZXNwYWNlIG5vbiByZWNvbm51ZSAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgcHLDqXBhcmVyIGxhIHJlZ2V4cCBkJ2hvcm9kYXRhZ2UgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjIGEgcmV0b3VybsOpICVkIHBvdXIgbCdlbnRyw6llIDogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAibm9tIGRlIGZpY2hpZXIgZHUgcGF0Y2ggaW50cm91dmFibGUgw6AgbGEgbGlnbmUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIgorbXNnc3RyICIiCisiZ2l0IGFwcGx5IDogbWF1dmFpcyBmb3JtYXQgZGUgZ2l0LWRpZmYgLSAvZGV2L251bGwgYXR0ZW5kdSwgJXMgdHJvdXbDqSDDoCBsYSAiCisibGlnbmUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHkgOiBtYXV2YWlzIGZvcm1hdCBkZSBnaXQtZGlmZiAtIG5vdXZlYXUgbm9tIGRlIGZpY2hpZXIgaW5jb25zaXN0YW50ICIKKyLDoCBsYSBsaWduZSAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0OQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseSA6IG1hdXZhaXMgZm9ybWF0IGRlIGdpdC1kaWZmIC0gYW5jaWVuIG5vbSBkZSBmaWNoaWVyIGluY29uc2lzdGFudCAiCisiw6AgbGEgbGlnbmUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorImdpdCBhcHBseSA6IG1hdXZhaXMgZm9ybWF0IGRlIGdpdC1kaWZmIC0gL2Rldi9udWxsIGF0dGVuZHUgw6AgbGEgbGlnbmUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb21wdGFnZSA6IGxpZ25lIGluYXR0ZW5kdWUgOiAlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJmcmFnbWVudCBkZSBwYXRjaCBzYW5zIGVuLXTDqnRlIMOgIGxhIGxpZ25lICVkIDogJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAiIgorImluZm9ybWF0aW9uIGRlIG5vbSBkZSBmaWNoaWVyIG1hbnF1YW50ZSBkYW5zIGwnZW4tdMOqdGUgZGUgZ2l0IGRpZmYgbG9ycyBkZSAiCisibGEgc3VwcHJlc3Npb24gZGUgJWQgY29tcG9zYW50IGRlIHByw6lmaXhlIGRlIGNoZW1pbiAobGlnbmUgJWQpIgorbXNnc3RyWzFdICIiCisiaW5mb3JtYXRpb24gZGUgbm9tIGRlIGZpY2hpZXIgbWFucXVhbnRlIGRhbnMgbCdlbi10w6p0ZSBkZSBnaXQgZGlmZiBsb3JzIGRlICIKKyJsYSBzdXBwcmVzc2lvbiBkZSAlZCBjb21wb3NhbnRzIGRlIHByw6lmaXhlIGRlIGNoZW1pbiAobGlnbmUgJWQpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY1OQorbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJsZSBub3V2ZWF1IGZpY2hpZXIgZMOpcGVuZCBkZSBjb250ZW51cyBhbmNpZW5zIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY2MQorbXNnaWQgImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgImxlIGZpY2hpZXIgc3VwcHJpbcOpIGEgZW5jb3JlIGR1IGNvbnRlbnUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAicGF0Y2ggY29ycm9tcHUgw6AgbGEgbGlnbmUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJsZSBub3V2ZWF1IGZpY2hpZXIgJXMgZMOpcGVuZCBkZSBjb250ZW51cyBhbmNpZW5zIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJsZSBmaWNoaWVyIHN1cHByaW3DqSAlcyBhIGVuY29yZSBkdSBjb250ZW51IgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyOAorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiBhdHRlbnRpb24gOiBsZSBmaWNoaWVyICVzIGRldmllbnQgdmlkZSBtYWlzIG4nZXN0IHBhcyBzdXBwcmltw6kiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxODc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgInBhdGNoIGJpbmFpcmUgY29ycm9tcHUgw6AgbGEgbGlnbmUgJWQgOiAlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTkwMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInBhdGNoIGJpbmFpcmUgbm9uIHJlY29ubnUgw6AgbGEgbGlnbmUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgInBhdGNoIHRvdGFsZW1lbnQgaW5jb21wcsOpaGVuc2libGUgw6AgbGEgbGlnbmUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImxlY3R1cmUgZHUgbGllbiBzeW1ib2xpcXVlICVzIGltcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIm91dmVydHVyZSBvdSBsZWN0dXJlIGRlICVzIGltcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAiZMOpYnV0IGRlIGxpZ25lIGludmFsaWRlIDogJyVjJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICJMYSBzZWN0aW9uIG7CsCVkIGEgcsOpdXNzaSDDoCBsYSBsaWduZSAlZCAob2Zmc2V0ICVkIGxpZ25lKS4iCittc2dzdHJbMV0gIkxhIHNlY3Rpb24gbsKwJWQgYSByw6l1c3NpIMOgIGxhIGxpZ25lICVkIChvZmZzZXQgJWQgbGlnbmVzKS4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIkNvbnRleHRlIHLDqWR1aXQgw6AgKCVsZC8lbGQpIHBvdXIgYXBwbGlxdWVyIGxlIGZyYWdtZW50IMOgIGxhIGxpZ25lICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICIiCisicGVuZGFudCBsYSByZWNoZXJjaGUgZGUgOlxuIgorIiUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgImRvbm7DqWVzIGRlIHBhdGNoIGJpbmFpcmUgbWFucXVhbnRlcyBwb3VyICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICJsZSBwYXRjaCBiaW5haXJlIG5lIHMnYXBwbGlxdWUgcGFyIGNvcnJlY3RlbWVudCDDoCAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzA0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAiIgorImxlIHBhdGNoIGJpbmFpcmUgc3VyICclcycgY3LDqWUgdW4gcsOpc3VsdGF0IGluY29ycmVjdCAoJXMgYXR0ZW5kdSwgbWFpcyAlcyAiCisidHJvdXbDqSkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICJsZSBwYXRjaCBhIMOpY2hvdcOpIDogJXM6JWxkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgImV4dHJhY3Rpb24gZGUgJXMgaW1wb3NzaWJsZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyMzUgYnVpbHRpbi9hcHBseS5jOjMyNDYgYnVpbHRpbi9hcHBseS5jOjMyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBvZiAlcyBmYWlsZWQiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBsZWN0dXJlIGRlICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI0MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJsZWN0dXJlIGRlcHVpcyAnJXMnIGF1LWRlbMOgIGQndW4gbGllbiBzeW1ib2xpcXVlIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI3MSBidWlsdGluL2FwcGx5LmM6MzQ5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAibGUgY2hlbWluICVzIGEgw6l0w6kgcmVub21tw6kvc3VwcHJpbcOpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM1MiBidWlsdGluL2FwcGx5LmM6MzUwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzIDogbidleGlzdGUgcGFzIGRhbnMgbCdpbmRleCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMzNTYgYnVpbHRpbi9hcHBseS5jOjM0OTkgYnVpbHRpbi9hcHBseS5jOjM1MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIgorbXNnc3RyICIlcyA6ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM2MSBidWlsdGluL2FwcGx5LmM6MzUxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzIDogbmUgY29ycmVzcG9uZCBwYXMgw6AgbCdpbmRleCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM0NjMKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICJsZSBwYXRjaCBkZSBzdXBwcmVzc2lvbiBsYWlzc2UgdW4gY29udGVudSBkYW5zIGxlIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlcyA6IHR5cGUgZXJyb27DqSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIlcyBlc3QgZGUgdHlwZSAlbywgbWFpcyAlbyBhdHRlbmR1IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzY5MyBidWlsdGluL2FwcGx5LmM6MzY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdGggJyVzJyIKK21zZ3N0ciAiY2hlbWluIGludmFsaWRlICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXMgOiBleGlzdGUgZMOpasOgIGRhbnMgbCdpbmRleCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlcyA6IGV4aXN0ZSBkw6lqw6AgZGFucyBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc3MworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgImxlIG5vdXZlYXUgbW9kZSAoJW8pIGRlICVzIG5lIGNvcnJlc3BvbmQgcGFzIMOgIGwnYW5jaWVuIG1vZGUgKCVvKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICIiCisibGUgbm91dmVhdSBtb2RlICglbykgZGUgJXMgbmUgY29ycmVzcG9uZCBwYXMgw6AgbCdhbmNpZW4gbW9kZSAoJW8pIGRlICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAibGUgZmljaGllciBhZmZlY3TDqSAnJXMnIGVzdCBhdS1kZWzDoCBkJ3VuIGxpZW4gc3ltYm9saXF1ZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlcyA6IGxlIHBhdGNoIG5lIHMnYXBwbGlxdWUgcGFzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkdSBwYXRjaCAlcy4uLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5MDkgYnVpbHRpbi9jaGVja291dC5jOjIzMiBidWlsdGluL3Jlc2V0LmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIsOpY2hlYyBkZSBtYWtlX2NhY2hlX2VudHJ5IHBvdXIgbGUgY2hlbWluICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAic3VwcHJlc3Npb24gZGUgJXMgZGFucyBsJ2luZGV4IGltcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAicGF0Y2ggY29ycm9tcHUgcG91ciBsZSBzb3VzLW1vZHVsZSAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgInN0YXQgZHUgZmljaGllciBub3V2ZWxsZW1lbnQgY3LDqcOpICclcycgaW1wb3NzaWJsZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgIiIKKyJjcsOpYXRpb24gZHUgbWFnYXNpbiBkZSBzdG9ja2FnZSBwb3VyIGxlIGZpY2hpZXIgbm91dmVsbGVtZW50IGNyw6nDqSAlcyAiCisiaW1wb3NzaWJsZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwOTMgYnVpbHRpbi9hcHBseS5jOjQyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFkZCBjYWNoZSBlbnRyeSBmb3IgJXMiCittc2dzdHIgImFqb3V0IGRlIGwnw6lsw6ltZW50IGRlIGNhY2hlICVzIGltcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICJmZXJtZXR1cmUgZHUgZmljaGllciAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIsOpY3JpdHVyZSBkdSBmaWNoaWVyICclcycgbW9kZSAlbyBpbXBvc3NpYmxlIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDI2MgorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICJQYXRjaCAlcyBhcHBsaXF1w6kgcHJvcHJlbWVudC4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjcwCittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgImVycmV1ciBpbnRlcm5lIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDI3MworIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIkFwcGxpY2F0aW9uIGR1IHBhdGNoICUlcyBhdmVjICVkIHJlamV0Li4uIgorbXNnc3RyWzFdICJBcHBsaWNhdGlvbiBkdSBwYXRjaCAlJXMgYXZlYyAlZCByZWpldHMuLi4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAidHJvbmNhdHVyZSBkdSBub20gZGUgZmljaGllciAucmVqIGVuICUuKnMucmVqIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICJTZWN0aW9uIG7CsCVkIGFwcGxpcXXDqWUgcHJvcHJlbWVudC4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAiU2VjdGlvbiBuwrAlZCByZWpldMOpZS4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0Mzk3Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICJlbnRyw6llIG5vbiByZWNvbm51ZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ0MDgKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICJsZWN0dXJlIGR1IGZpY2hpZXIgZCdpbmRleCBpbXBvc3NpYmxlIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUyNgorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIm5lIHBhcyBhcHBsaXF1ZXIgbGVzIG1vZGlmaWNhdGlvbnMgcXVpIGNvcnJlc3BvbmRlbnQgYXUgY2hlbWluIGRvbm7DqSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MjkKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJhcHBsaXF1ZXIgbGVzIG1vZGlmaWNhdGlvbnMgcXVpIGNvcnJlc3BvbmRlbnQgYXUgY2hlbWluIGRvbm7DqSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MzIKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAic3VwcHJpbWVyIDxudW0+IGJhcnJlcyBvYmxpcXVlcyBkZXMgY2hlbWlucyB0cmFkaXRpb25uZWxzIGRlIGRpZmYiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTM1Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAiaWdub3JlciBsZXMgYWRkaXRpb25zIHLDqWFsaXPDqWVzIHBhciBsZSBwYXRjaCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MzcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgImF1IGxpZXUgZCdhcHBsaXF1ZXIgbGUgcGF0Y2gsIGFmZmljaGVyIGxlIGRpZmZzdGF0IGRlIGwnZW50csOpZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDEKK21zZ2lkICJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICIiCisiYWZmaWNoZXIgbGUgbm9tYnJlIGRlIGxpZ25lcyBham91dMOpZXMgZXQgc3VwcHJpbcOpZXMgZW4gbm90YXRpb24gZMOpY2ltYWxlIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0MworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgYSBzdW1tYXJ5IGZvciB0aGUgaW5wdXQiCittc2dzdHIgImF1IGxpZXUgZCdhcHBsaXF1ZXIgbGUgcGF0Y2gsIGFmZmljaGVyIHVuIHLDqXN1bWVyIGRlIGwnZW50csOpZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDUKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICJhdSBsaWV1IGQnYXBwbGlxdWVyIGxlIHBhdGNoLCB2b2lyIHNpIGxlIHBhdGNoIGVzdCBhcHBsaWNhYmxlIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0NworbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAicydhc3N1cmVyIHF1ZSBsZSBwYXRjaCBlc3QgYXBwbGljYWJsZSBzdXIgbCdpbmRleCBhY3R1ZWwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQ5Cittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgImFwcGxpcXVlciBsZXMgcGF0Y2ggc2FucyB0b3VjaGVyIMOgIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTUxCittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAiYWNjZXB0ZXIgdW4gcGF0Y2ggcXVpIHRvdWNoZSBob3JzIGRlIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTUzCittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgImFwcGxpcXVlciBhdXNzaSBsZSBwYXRjaCAow6AgdXRpbGlzZXIgYXZlYyAtLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NTUKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICJ0ZW50ZXIgdW5lIGZ1c2lvbiDDoCAzIHBvaW50cyBzaSBsZSBwYXRjaCBuZSBzJ2FwcGxpcXVlIHBhcyBwcm9wcmVtZW50IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1NworbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisiY29uc3RydWlyZSB1biBpbmRleCB0ZW1wb3JhaXJlIGZvbmTDqSBzdXIgbCdpbmZvcm1hdGlvbiBkZSBsJ2luZGV4IGVtYmFycXXDqSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NTkgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5OCBidWlsdGluL2xzLWZpbGVzLmM6NDEyCittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgImxlcyBjaGVtaW5zIHNvbnQgc8OpcGFyw6lzIHBhciB1biBjYXJhY3TDqHJlIE5VTCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NjIKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgInMnYXNzdXJlciBkJ2F1IG1vaW5zIDxuPiBsaWduZXMgZGUgY29ycmVzcG9uZGFuY2UgZGUgY29udGV4dGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTY0Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIiIKKyJkw6l0ZWN0ZXIgZGVzIGxpZ25lcyBub3V2ZWxsZXMgb3UgbW9kaWZpw6llcyBxdWkgY29udGllbm5lbnQgZGVzIGVycmV1cnMgIgorImQnZXNwYWNlIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU2NyBidWlsdGluL2FwcGx5LmM6NDU3MAorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgImlnbm9yZXIgZGVzIG1vZGlmaWNhdGlvbnMgZCdlc3BhY2UgbG9ycyBkZSBsYSByZWNoZXJjaGUgZGUgY29udGV4dGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTczCittc2dpZCAiYXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UiCittc2dzdHIgImFwcGxpcXVlciBsZSBwYXRjaCBlbiBzZW5zIGludmVyc2UiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTc1Cittc2dpZCAiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiCittc2dzdHIgIm5lIHBhcyBzJ2F0dGVuZHJlIMOgIGF1IG1vaW5zIHVuZSBsaWduZSBkZSBjb250ZXh0ZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzcKK21zZ2lkICJsZWF2ZSB0aGUgcmVqZWN0ZWQgaHVua3MgaW4gY29ycmVzcG9uZGluZyAqLnJlaiBmaWxlcyIKK21zZ3N0ciAibGFpc3NlciBsZXMgc2VjdGlvbnMgcmVqZXTDqWVzIGRhbnMgbGVzIGZpY2hpZXJzICoucmVqIGNvcnJlc3BvbmRhbnRzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3OQorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICJhY2NlcHRlciBsZXMgcmVjb3V2cmVtZW50cyBkZSBzZWN0aW9ucyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODIKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorInRvbMOpcmVyIGRlcyBlcnJldXJzIGRlIGTDqXRlY3Rpb24gZGUgcmV0b3VycyBjaGFyaW90IG1hbnF1YW50cyBlbiBmaW4gZGUgIgorImZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTg1Cittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICJuZSBwYXMgc2UgZmllciBhdSBjb21wdGUgZGUgbGlnbmVzIGRhbnMgbGVzIGVuLXTDqnRlcyBkZSBzZWN0aW9uIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU4OAorbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgInByw6lmaXhlciB0b3VzIGxlcyBub21zIGRlIGZpY2hpZXIgYXZlYyA8cm9vdD4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjEwCittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLTN3YXkgaG9ycyBkJ3VuIGTDqXDDtHQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjE4Cittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1pbmRleCBob3JzIGQndW4gZMOpcMO0dCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MjEKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQgaG9ycyBkJ3VuIGTDqXDDtHQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJyIKK21zZ3N0ciAib3V2ZXJ0dXJlIGltcG9zc2libGUgZHUgcGF0Y2ggJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAiJWQgZXJyZXVyIGQnZXNwYWNlIGlnbm9yw6llIgorbXNnc3RyWzFdICIlZCBlcnJldXJzIGQnZXNwYWNlIGlnbm9yw6llcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2NjAgYnVpbHRpbi9hcHBseS5jOjQ2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiJWQgbGlnbmUgYSBham91dMOpIGRlcyBlcnJldXJzIGQnZXNwYWNlLiIKK21zZ3N0clsxXSAiJWQgbGlnbmVzIG9udCBham91dMOpIGRlcyBlcnJldXJzIGQnZXNwYWNlLiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAiY3LDqWF0aW9uIGltcG9zc2libGUgZHUgZmljaGllciBkJ2FyY2hpdmUgJyVzJyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlZGlyaWdlciBsYSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgOiBEw6lww7R0IGRpc3RhbnQgc2FucyBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjU4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBFT0YiCittc2dzdHIgImdpdCBhcmNoaXZlIDogQUNLL05BQ0sgYXR0ZW5kdSwgRU9GIHJlw6d1IgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICJlcnJldXIgZGlzdGFudGUgOiAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlIDogZXJyZXVyIGRlIHByb3RvY29sZSIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgOiB2aWRhZ2UgYXR0ZW5kdSIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjcKK21zZ2lkICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCittc2dzdHIgImdpdCBiaXNlY3QgLS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNworbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgImVmZmVjdHVlciAnZ2l0IGJpc2VjdCBuZXh0JyIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE5Cittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAibWV0dHJlIMOgIGpvdXIgQklTRUNUX0hFQUQgYXUgbGlldSBkJ2V4dHJhaXJlIGxlIGNvbW1pdCBhY3R1ZWwiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMgorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs8b3B0aW9ucz5dIFs8b3B0aW9ucy1kZS1yw6l2aXNpb24+XSBbPHJldj5dIFstLV0gPGZpY2hpZXI+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzcKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiPG9wdGlvbnMtZGUtcsOpdmlzaW9uPiBzb250IGRvY3VtZW50w6lzIGRhbnMgZ2l0LXJldi1saXN0KDEpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgIiIKKyJNb250cmVyIGxlcyDDqWzDqW1lbnRzIGRlIGJsw6JtZSBhdSBmdXIgZXQgw6AgbWVzdXJlIGRlIGxldXIgZMOpY291dmVydGUsIGRlICIKKyJtYW5pw6hyZSBpbmNyw6ltZW50YWxlIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vbnRyZXIgdW4gU0hBLTEgYmxhbmMgcG91ciBsZXMgY29tbWl0cyBkZSBsaW1pdGUgKETDqWZhdXQgOiBkw6lzYWN0aXbDqSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTAyCittc2dpZCAiRG8gbm90IHRyZWF0IHJvb3QgY29tbWl0cyBhcyBib3VuZGFyaWVzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisiTmUgcGFzIHRyYWl0ZXIgbGVzIGNvbW1pdHMgcmFjaW5lIGNvbW1lIGRlcyBsaW1pdGVzIChEw6lmYXV0IDogZMOpc2FjdGl2w6kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIk1vbnRyZXIgbGVzIHN0YXRpc3RpcXVlcyBkZSBjb8O7dCBkJ2FjdGl2aXTDqSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDQKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAiTW9udHJlciBsZSBzY29yZSBkZSBzb3J0aWUgcG91ciBsZXMgw6lsw6ltZW50cyBkZSBibMOibWUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA1Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIk1vbnRyZXIgbGVzIG5vbXMgZGUgZmljaGllciBvcmlnaW5hdXggKETDqWZhdXQgOiBhdXRvKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDYKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIk1vbnRyZXIgbGVzIG51bcOpcm9zIGRlIGxpZ25lcyBvcmlnaW5hdXggKETDqWZhdXQgOiBkw6lzYWN0aXbDqSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA3Cittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAiQWZmaWNoZXIgZGFucyB1biBmb3JtYXQgcHJvcGljZSDDoCBsYSBjb25zb21tYXRpb24gcGFyIG1hY2hpbmUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA4Cittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICJBZmZpY2hlciBlbiBmb3JtYXQgcG9yY2VsYWluZSBhdmVjIGwnaW5mb3JtYXRpb24gZGUgY29tbWl0IHBhciBsaWduZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDkKK21zZ2lkICJVc2UgdGhlIHNhbWUgb3V0cHV0IG1vZGUgYXMgZ2l0LWFubm90YXRlIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJVdGlsaXNlciBsZSBtw6ptZSBtb2RlIGRlIHNvcnRpZSBxdWUgZ2l0LWFubm90YXRlIChEw6lmYXV0IDogZMOpc2FjdGl2w6kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMAorbXNnaWQgIlNob3cgcmF3IHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIGhvcm9kYXRhZ2VzIGJydXRzIChEw6lmYXV0IDogZMOpc2FjdGl2w6kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMQorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIGxvbmdzIFNIQTEgZGUgY29tbWl0cyAoRMOpZmF1dCA6IGTDqXNhY3RpdsOpKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTIKK21zZ2lkICJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJTdXBwcmltZXIgbGUgbm9tIGRlIGwnYXV0ZXVyIGV0IGwnaG9yb2RhdGFnZSAoRMOpZmF1dCA6IGTDqXNhY3RpdsOpKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTMKK21zZ2lkICJTaG93IGF1dGhvciBlbWFpbCBpbnN0ZWFkIG9mIG5hbWUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkFmZmljaGVyIGwnZS1tYWlsIGRlIGwnYXV0ZXVyIGF1IGxpZXUgZHUgbm9tIChEw6lmYXV0IDogZMOpc2FjdGl2w6kpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNAorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICJJZ25vcmVyIGxlcyBkaWZmw6lyZW5jZXMgZCdlc3BhY2UiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE1Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICIiCisiRMOpcGVuc2VyIGRlcyBjeWNsZXMgc3VwcGzDqW1lbnRhaXJlcyBwb3VyIHRyb3V2ZXIgdW5lIG1laWxsZXVyZSBjb3JyZXNwb25kYW5jZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTYKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgIiIKKyJVdGlsaXNlciBsZXMgcsOpdmlzaW9ucyBkdSBmaWNoaWVyIDxmaWNoaWVyPiBhdSBsaWV1IGQnYXBwZWxlciBnaXQtcmV2LWxpc3QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE3Cittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAiVXRpbGlzZXIgbGUgY29udGVudSBkZSA8ZmljaGllcj4gY29tbWUgaW1hZ2UgZmluYWxlIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxOCBidWlsdGluL2JsYW1lLmM6MjUxOQorbXNnaWQgInNjb3JlIgorbXNnc3RyICJzY29yZSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTgKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJUcm91dmVyIGxlcyBjb3BpZXMgZGUgbGlnbmUgZGFucyBldCBlbnRyZSBsZXMgZmljaGllcnMiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE5Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiVHJvdXZlciBsZXMgbW91dmVtZW50cyBkZSBsaWduZSBkYW5zIGV0IGVudHJlIGxlcyBmaWNoaWVycyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MjAKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MjAKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiIgorIlRyYWl0ZXIgc2V1bGVtZW50IGwnaW50ZXJ2YWxsZSBkZSBsaWduZSBuLG0gZW4gY29tbWVuw6dhbnQgbGUgY29tcHRlIMOgIDEiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlIG1heGltdW0KKyMuIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluICJnaXQgYmxhbWUiCisjLiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMSBtb250aHMgYWdvIiwgd2hpY2gKKyMuIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QgYW1vbmcgdmFyaW91cyBmb3JtcyBvZgorIy4gcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0IHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvcgorIy4gZmV3ZXIgZGlzcGxheSBjb2x1bW5zLgorIzogYnVpbHRpbi9ibGFtZS5jOjI2MDEKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICJpbCB5IGEgMTAgYW5zIGV0IDExIG1vaXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8b3B0aW9uc10gWy1sXSBbLWZdIDxub20tZGUtYnJhbmNoZT4gWzxwb2ludC1kZS1kw6lwYXJ0Pl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjYKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxicmFuY2gtbmFtZT4uLi4iCittc2dzdHIgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yXSAoLWQgfCAtRCkgPG5vbS1kZS1icmFuY2hlPi4uLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiIgorImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8YW5jaWVubmUtYnJhbmNoZT5dIDxub3V2ZWxsZS1icmFuY2hlPiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisic3VwcHJlc3Npb24gZGUgbGEgYnJhbmNoZSAnJXMnIHF1aSBhIMOpdMOpIGZ1c2lvbm7DqWUgZGFuc1xuIgorIiAgICAgICAgICclcycsIG1haXMgcGFzIGRhbnMgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorImJyYW5jaGUgJyVzJyBub24gc3VwcHJpbcOpZSBjYXIgZWxsZSBuJ2EgcGFzIMOpdMOpIGZ1c2lvbm7DqWUgZGFuc1xuIgorIiAgICAgICAgICclcycsIG3Dqm1lIHNpIGVsbGUgZXN0IGZ1c2lvbm7DqWUgZGFucyBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJlY2hlcmNoZXIgbCdvYmpldCBjb21taXQgcG91ciAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKyJMYSBicmFuY2hlICclcycgbidlc3QgcGFzIHRvdGFsZW1lbnQgZnVzaW9ubsOpZS5cbiIKKyJTaSB2b3VzIMOqdGVzIHN1ciBxdWUgdm91cyB2b3VsZXogbGEgc3VwcHJpbWVyLCBsYW5jZXogJ2dpdCBicmFuY2ggLUQgJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODUKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLDiWNoZWMgZGUgbGEgbWlzZSDDoCBqb3VyIGR1IGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTMKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgImltcG9zc2libGUgZCd1dGlsaXNlciAtYSBhdmVjIC1kIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxOQorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByZWNoZXJjaGVyIGwnb2JqZXQgY29tbWl0IHBvdXIgSEVBRCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgYnJhbmNoICclcycgd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgb24uIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsYSBicmFuY2hlICclcycgc3VyIGxhcXVlbGxlIHZvdXMgw6p0ZXMuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiYnJhbmNoZSBkZSBzdWl2aSAnJXMnIG5vbiB0cm91dsOpZS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImJyYW5jaGUgJyVzJyBub24gdHJvdXbDqWUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGxhIHN1cHByZXNzaW9uIGRlIGxhIGJyYW5jaGUgZGUgc3VpdmkgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkVycmV1ciBsb3JzIGRlIGxhIHN1cHByZXNzaW9uIGRlIGxhIGJyYW5jaGUgJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJCcmFuY2hlIGRlIHN1aXZpICVzIHN1cHByaW3DqWUgKHByw6ljw6lkZW1tZW50ICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIkJyYW5jaGUgJXMgc3VwcHJpbcOpZSAocHLDqWPDqWRlbW1lbnQgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBwb2ludCBhdCBhIGNvbW1pdCIKK21zZ3N0ciAibGEgYnJhbmNoZSAnJXMnIG5lIHBvaW50ZSBwYXMgc3VyIHVuIGNvbW1pdCIKKworIyBmw6ltaW5pbiBwb3VyIHVuZSBicmFuY2hlCisjOiBidWlsdGluL2JyYW5jaC5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGdvbmVdIgorbXNnc3RyICJbJXM6IGRpc3BhcnVlXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzXSIKK21zZ3N0ciAiWyVzXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBiZWhpbmQgJWRdIgorbXNnc3RyICJbJXM6IGVuIHJldGFyZCBkZSAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIltiZWhpbmQgJWRdIgorbXNnc3RyICJbZW4gcmV0YXJkIGRlICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBhaGVhZCAlZF0iCittc2dzdHIgIlslcyA6IGVuIGF2YW5jZSBkZSAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlthaGVhZCAlZF0iCittc2dzdHIgIltlbiBhdmFuY2UgZGUgJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGFoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICJbJXMgOiBlbiBhdmFuY2UgZGUgJWQsIGVuIHJldGFyZCBkZSAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlthaGVhZCAlZCwgYmVoaW5kICVkXSIKK21zZ3N0ciAiW2VuIGF2YW5jZSBkZSAlZCwgZW4gcmV0YXJkIGRlICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODkKK21zZ2lkICIgKioqKiBpbnZhbGlkIHJlZiAqKioqIgorbXNnc3RyICIgKioqKiByw6lmw6lyZW5jZSBpbnZhbGlkZSAqKioqIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCByZWJhc2luZyAlcykiCittc2dzdHIgIihhdWN1bmUgYnJhbmNoZSwgcmViYXNhZ2UgZGUgJXMpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcykiCittc2dzdHIgIihhdWN1bmUgYnJhbmNoZSwgYmlzZWN0IGEgZMOpbWFycsOpIHN1ciAlcykiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIihIRUFEIGRldGFjaGVkIGF0ICVzKSIKK21zZ3N0ciAiKEhFQUQgZMOpdGFjaMOpZSBzdXIgJXMpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBmcm9tICVzKSIKK21zZ3N0ciAiKEhFQUQgZMOpdGFjaMOpZSBkZXB1aXMgJXMpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5NgorbXNnaWQgIihubyBicmFuY2gpIgorbXNnc3RyICIoYXVjdW5lIGJyYW5jaGUpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAibCdvYmpldCAnJXMnIG5lIHBvaW50ZSBwYXMgc3VyIHVuIGNvbW1pdCIKKworIzogYnVpbHRpbi9icmFuY2guYzo2OTEKK21zZ2lkICJzb21lIHJlZnMgY291bGQgbm90IGJlIHJlYWQiCittc2dzdHIgImRlcyByw6lmw6lyZW5jZXMgbidvbnQgcGFzIHB1IMOqdHJlIGx1ZXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgImltcG9zc2libGUgZGUgcmVub21tZXIgbGEgYnJhbmNoZSBhY3R1ZWxsZSwgaWwgbid5IGVuIGEgcGFzLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiTm9tIGRlIGJyYW5jaGUgaW52YWxpZGUgOiAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyOQorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICLDiWNoZWMgZGUgcmVub21tYWdlIGRlIGxhIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICJSZW5vbW1hZ2UgZCd1biBicmFuY2hlIG1hbCBub21tw6llICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIkxhIGJyYW5jaGUgYSDDqXTDqSByZW5vbW3DqWUgZW4gJXMsIG1haXMgSEVBRCBuJ2VzdCBwYXMgbWlzZSDDoCBqb3VyICEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzQ0Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSBlc3QgcmVub21tw6llLCBtYWlzIGxhIG1pc2Ugw6Agam91ciBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gYSAiCisiw6ljaG91w6kiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAibm9tIGQnb2JqZXQgbWFsZm9ybcOpICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgYnJhbmNoIGRlc2NyaXB0aW9uIHRlbXBsYXRlOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgbW9kw6hsZSBkZSBkZXNjcmlwdGlvbiBkZSBicmFuY2hlIDogJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODExCittc2dpZCAiR2VuZXJpYyBvcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGfDqW7DqXJpcXVlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTMKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgaGFjaGFnZSBldCBsZSBzdWpldCwgZG91YmzDqSBwb3VyIGxhIGJyYW5jaGUgYW1vbnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODE0Cittc2dpZCAic3VwcHJlc3MgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyIKK21zZ3N0ciAic3VwcHJpbWVyIGxlcyBtZXNzYWdlcyBkJ2luZm9ybWF0aW9uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNQorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJyw6lnbGVyIGxlIG1vZGUgZGUgc3VpdmkgKHZvaXIgZ2l0LXB1bGwoMSkpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNworbXNnaWQgImNoYW5nZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICJtb2RpZmllciBsJ2luZm9ybWF0aW9uIGFtb250IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInVzZSBjb2xvcmVkIG91dHB1dCIKK21zZ3N0ciAidXRpbGlzZXIgbGEgY29sb3JhdGlvbiBkYW5zIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjIKK21zZ2lkICJhY3Qgb24gcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJhZ2lyIHN1ciBsZXMgYnJhbmNoZXMgZGUgc3VpdmkgZGlzdGFudGVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNSBidWlsdGluL2JyYW5jaC5jOjgzMSBidWlsdGluL2JyYW5jaC5jOjg1MgorIzogYnVpbHRpbi9icmFuY2guYzo4NTggYnVpbHRpbi9jb21taXQuYzoxNTgwIGJ1aWx0aW4vY29tbWl0LmM6MTU4MQorIzogYnVpbHRpbi9jb21taXQuYzoxNTgyIGJ1aWx0aW4vY29tbWl0LmM6MTU4MyBidWlsdGluL3RhZy5jOjYxOAorIzogYnVpbHRpbi90YWcuYzo2MjQKIG1zZ2lkICJjb21taXQiCiBtc2dzdHIgImNvbW1pdCIKIAotIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3Ci0jOiBnaXRrOjY5MTIKLW1zZ2lkICJjb250YWluaW5nOiIKLW1zZ3N0ciAiY29udGllbnQgOiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODI2IGJ1aWx0aW4vYnJhbmNoLmM6ODMyCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyBicmFuY2hlcyBxdWkgY29udGllbm5lbnQgbGUgY29tbWl0IgogCi0jOiBnaXRrOjIzMDIgZ2l0azozNTI2IGdpdGs6MzUzMSBnaXRrOjQ3NjMKLW1zZ2lkICJ0b3VjaGluZyBwYXRoczoiCi1tc2dzdHIgImNoZW1pbnMgbW9kaWZpw6lzIDoiCisjOiBidWlsdGluL2JyYW5jaC5jOjgzOAorbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIkFjdGlvbnMgc3DDqWNpZmlxdWVzIMOgIGdpdC1icmFuY2ggOiIKIAotIzogZ2l0azoyMzAzIGdpdGs6NDc3NwotbXNnaWQgImFkZGluZy9yZW1vdmluZyBzdHJpbmc6IgotbXNnc3RyICJham91dGUvc3VwcHJpbWUgbGEgY2hhw65uZSA6IgorIzogYnVpbHRpbi9icmFuY2guYzo4MzkKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAiYWZmaWNoZXIgw6AgbGEgZm9pcyBsZXMgYnJhbmNoZXMgZGUgc3VpdmkgZXQgbGVzIGJyYW5jaGVzIGxvY2FsZXMiCiAKLSM6IGdpdGs6MjMwNCBnaXRrOjQ3NzkKLW1zZ2lkICJjaGFuZ2luZyBsaW5lcyBtYXRjaGluZzoiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICJzdXBwcmltZXIgdW5lIGJyYW5jaGUgdG90YWxlbWVudCBmdXNpb25uw6llIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MgorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgInN1cHByaW1lciB1bmUgYnJhbmNoZSAobcOqbWUgbm9uIGZ1c2lvbm7DqWUpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJkw6lwbGFjZXIvcmVub21tZXIgdW5lIGJyYW5jaGUgZXQgc29uIHJlZmxvZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDQKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJkw6lwbGFjZXIvcmVub21tZXIgdW5lIGJyYW5jaGUsIG3Dqm1lIHNpIGxhIGNpYmxlIGV4aXN0ZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG5vbXMgZGVzIGJyYW5jaGVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NgorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJjcsOpZXIgbGUgcmVmbG9nIGRlIGxhIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ4Cittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgIsOpZGl0ZXIgbGEgZGVzY3JpcHRpb24gZGUgbGEgYnJhbmNoZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDkKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICJmb3JjZXIgbGEgY3LDqWF0aW9uLCBsZSBkw6lwbGFjZW1lbnQvcmVub21tYWdlLCBvdSBsYSBzdXBwcmVzc2lvbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NTIKK21zZ2lkICJwcmludCBvbmx5IG5vdCBtZXJnZWQgYnJhbmNoZXMiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgYnJhbmNoZXMgbm9uIGZ1c2lvbm7DqWVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg1OAorbXNnaWQgInByaW50IG9ubHkgbWVyZ2VkIGJyYW5jaGVzIgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIGJyYW5jaGVzIGZ1c2lvbm7DqWVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg2MgorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGJyYW5jaGVzIGVuIGNvbG9ubmVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg3NQorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLDiWNoZWMgZGUgcsOpc29sdXRpb24gZGUgSEVBRCBjb21tZSByw6lmw6lyZW5jZSB2YWxpZGUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg3OSBidWlsdGluL2Nsb25lLmM6NjkwCittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIkhFQUQgbm9uIHRyb3V2w6llIHNvdXMgcmVmcy9oZWFkcyAhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjkwMQorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gZXQgLS12ZXJib3NlIHNvbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo5MTIgYnVpbHRpbi9icmFuY2guYzo5NTEKK21zZ2lkICJicmFuY2ggbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAibGUgbm9tIGRlIGJyYW5jaGUgZXN0IHJlcXVpcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo5MjcKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqWNyaXJlIHVuZSBIRUFEIGTDqXRhY2jDqWUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTMyCittc2dpZCAiY2Fubm90IGVkaXQgZGVzY3JpcHRpb24gb2YgbW9yZSB0aGFuIG9uZSBicmFuY2giCittc2dzdHIgImltcG9zc2libGUgZCfDqWRpdGVyIGxhIGRlc2NyaXB0aW9uIGRlIHBsdXMgZCd1bmUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9icmFuY2guYzo5MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iCittc2dzdHIgIkF1Y3VuIGNvbW1pdCBzdXIgbGEgYnJhbmNoZSAnJXMnLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo5NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICJBdWN1bmUgYnJhbmNoZSBub21tw6llICclcycuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjk1NworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgInRyb3AgZGUgYnJhbmNoZXMgcG91ciB1bmUgb3DDqXJhdGlvbiBkZSByZW5vbW1hZ2UiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTYyCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAidHJvcCBkZSBicmFuY2hlcyBwb3VyIHNww6ljaWZpZXIgdW5lIGJyYW5jaGUgYW1vbnQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3Qgc2V0IHVwc3RyZWFtIG9mIEhFQUQgdG8gJXMgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKIG1zZ3N0ciAiIgorImltcG9zc2libGUgZGUgc3DDqWNpZmllciB1bmUgYnJhbmNoZSBhbW9udCBkZSBIRUFEIHBhciAlcyBxdWkgbmUgcG9pbnRlIHN1ciAiCisiYXVjdW5lIGJyYW5jaGUuIgogCi0jOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDc2NgotbXNnaWQgIkV4YWN0IgotbXNnc3RyICJFeGFjdCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTY5IGJ1aWx0aW4vYnJhbmNoLmM6OTkxIGJ1aWx0aW4vYnJhbmNoLmM6MTAxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICJwYXMgZGUgYnJhbmNoZSAnJXMnIgogCi0jOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMwotbXNnaWQgIklnbkNhc2UiCi1tc2dzdHIgIklnbm9yZXIgbGEgY2Fzc2UiCisjOiBidWlsdGluL2JyYW5jaC5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAibGEgYnJhbmNoZSAnJXMnIG4nZXhpc3RlIHBhcyIKIAotIzogZ2l0azoyMzE1IGdpdGs6NDczNiBnaXRrOjQ4NTIgZ2l0azo2NzE5Ci1tc2dpZCAiUmVnZXhwIgotbXNnc3RyICJFeHByZXNzaW9uIHLDqWd1bGnDqHJlIgorIzogYnVpbHRpbi9icmFuY2guYzo5ODUKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAidHJvcCBkZSBicmFuY2hlcyBwb3VyIGTDqXNhY3RpdmVyIHVuIGFtb250IgogCi0jOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKLW1zZ2lkICJBbGwgZmllbGRzIgotbXNnc3RyICJUb3VzIGxlcyBjaGFtcHMiCi0KLSM6IGdpdGs6MjMxOCBnaXRrOjQ4NzEgZ2l0azo0OTA0IGdpdGs6Njc4NgotbXNnaWQgIkhlYWRsaW5lIgotbXNnc3RyICJTdXJsaWduZXIiCi0KLSM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NjkxNiBnaXRrOjczODkKLW1zZ2lkICJDb21tZW50cyIKLW1zZ3N0ciAiQ29tbWVudGFpcmVzIgotCi0jOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6NDg3NiBnaXRrOjQ5MTEgZ2l0azo2Nzg2IGdpdGs6NzMyNCBnaXRrOjg4MzAKLSM6IGdpdGs6ODg0NQotbXNnaWQgIkF1dGhvciIKLW1zZ3N0ciAiQXV0ZXVyIgotCi0jOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKLW1zZ2lkICJDb21taXR0ZXIiCi1tc2dzdHIgIkF1dGV1ciBkdSBjb21taXQiCi0KLSM6IGdpdGs6MjM1MAotbXNnaWQgIlNlYXJjaCIKLW1zZ3N0ciAiUmVjaGVyY2hlciIKLQotIzogZ2l0azoyMzU4Ci1tc2dpZCAiRGlmZiIKLW1zZ3N0ciAiRGlmZiIKLQotIzogZ2l0azoyMzYwCi1tc2dpZCAiT2xkIHZlcnNpb24iCi1tc2dzdHIgIkFuY2llbm5lIHZlcnNpb24iCi0KLSM6IGdpdGs6MjM2MgotbXNnaWQgIk5ldyB2ZXJzaW9uIgotbXNnc3RyICJOb3V2ZWxsZSB2ZXJzaW9uIgotCi0jOiBnaXRrOjIzNjQKLW1zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgotbXNnc3RyICJMaWduZXMgZGUgY29udGV4dGUiCi0KLSM6IGdpdGs6MjM3NAotbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCi1tc2dzdHIgIklnbm9yZXIgbGVzIG1vZGlmaWNhdGlvbnMgZCdlc3BhY2UiCi0KLSM6IGdpdGs6MjM3OCBnaXRrOjIzODAgZ2l0azo3OTU5IGdpdGs6ODIwNgotbXNnaWQgIkxpbmUgZGlmZiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTg5Cittc2dpZCAiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKIG1zZ3N0ciAiIgorImltcG9zc2libGUgZGUgZMOpc2FjdGl2ZXIgdW5lIGJyYW5jaGUgYW1vbnQgZGUgSEVBRCBxdWFuZCBlbGxlIG5lIHBvaW50ZSBzdXIgIgorImF1Y3VuZSBicmFuY2hlLiIKIAotIzogZ2l0azoyNDQ1Ci1tc2dpZCAiUGF0Y2giCi1tc2dzdHIgIlBhdGNoIgorIzogYnVpbHRpbi9icmFuY2guYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICJMYSBicmFuY2hlICclcycgbidhIGF1Y3VuZSBpbmZvcm1hdGlvbiBkZSBicmFuY2hlIGFtb250IgogCi0jOiBnaXRrOjI0NDcKLW1zZ2lkICJUcmVlIgotbXNnc3RyICJBcmJyZSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAwOQorbXNnaWQgIml0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gY3JlYXRlICdIRUFEJyBtYW51YWxseSIKK21zZ3N0ciAiY3LDqWVyIG1hbnVlbGxlbWVudCAnSEVBRCcgbidhIHBhcyBkZSBzZW5zIgogCi0jOiBnaXRrOjI2MTcgZ2l0azoyNjM3Ci1tc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgotbXNnc3RyICJEaWZmIGVudHJlIGNlY2kgZXQgbGEgc8OpbGVjdGlvbiIKLQotIzogZ2l0azoyNjE4IGdpdGs6MjYzOAotbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKLW1zZ3N0ciAiRGlmZiBlbnRyZSBzw6lsZWN0aW9uIGV0IGNlY2kiCi0KLSM6IGdpdGs6MjYxOSBnaXRrOjI2MzkKLW1zZ2lkICJNYWtlIHBhdGNoIgotbXNnc3RyICJDcsOpZXIgcGF0Y2giCi0KLSM6IGdpdGs6MjYyMCBnaXRrOjkyNTQKLW1zZ2lkICJDcmVhdGUgdGFnIgotbXNnc3RyICJDcsOpZXIgdGFnIgotCi0jOiBnaXRrOjI2MjEgZ2l0azo5MzcxCi1tc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCi1tc2dzdHIgIsOJY3JpcmUgbGUgY29tbWl0IGRhbnMgdW4gZmljaGllciIKLQotIzogZ2l0azoyNjIyIGdpdGs6OTQyOAotbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgotbXNnc3RyICJDcsOpZXIgdW5lIG5vdXZlbGxlIGJyYW5jaGUiCi0KLSM6IGdpdGs6MjYyMwotbXNnaWQgIkNoZXJyeS1waWNrIHRoaXMgY29tbWl0IgotbXNnc3RyICJDdWVpbGxpciAoY2hlcnJ5LXBpY2spIGNlIGNvbW1pdCIKLQotIzogZ2l0azoyNjI0Ci1tc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKLW1zZ3N0ciAiUsOpaW5pdGlhbGlzZXIgbGEgYnJhbmNoZSBIRUFEIHZlcnMgY2V0IMOpdGF0IgotCi0jOiBnaXRrOjI2MjUKLW1zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgotbXNnc3RyICJNYXJxdWVyIGNlIGNvbW1pdCIKLQotIzogZ2l0azoyNjI2Ci1tc2dpZCAiUmV0dXJuIHRvIG1hcmsiCi1tc2dzdHIgIlJldG91cm5lciDDoCBsYSBtYXJxdWUiCi0KLSM6IGdpdGs6MjYyNwotbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgotbXNnc3RyICJDaGVyY2hlciBsZSBkZXNjZW5kYW50IGRlIGNlY2kgZXQgbGUgbWFycXVlciIKLQotIzogZ2l0azoyNjI4Ci1tc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCi1tc2dzdHIgIkNvbXBhcmVyIGF2ZWMgbGUgY29tbWl0IG1hcnF1w6kiCi0KLSM6IGdpdGs6MjYyOSBnaXRrOjI2NDAKLSMsIGZ1enp5Ci1tc2dpZCAiRGlmZiB0aGlzIC0+IG1hcmtlZCBjb21taXQiCi1tc2dzdHIgIkRpZmYgZW50cmUgY2VjaSBldCBsYSBzw6lsZWN0aW9uIgotCi0jOiBnaXRrOjI2MzAgZ2l0azoyNjQxCi0jLCBmdXp6eQotbXNnaWQgIkRpZmYgbWFya2VkIGNvbW1pdCAtPiB0aGlzIgotbXNnc3RyICJEaWZmIGVudHJlIHPDqWxlY3Rpb24gZXQgY2VjaSIKLQotIzogZ2l0azoyNjMxCi0jLCBmdXp6eQotbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKLW1zZ3N0ciAiTWFycXVlciBjZSBjb21taXQiCi0KLSM6IGdpdGs6MjY0NwotbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKLW1zZ3N0ciAiUsOpY3Vww6lyZXIgY2V0dGUgYnJhbmNoZSIKLQotIzogZ2l0azoyNjQ4Ci1tc2dpZCAiUmVtb3ZlIHRoaXMgYnJhbmNoIgotbXNnc3RyICJTdXBwcmltZXIgY2V0dGUgYnJhbmNoZSIKLQotIzogZ2l0azoyNjQ5Ci1tc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAxNQorbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCiBtc2dzdHIgIiIKKyJsZXMgb3B0aW9ucyAtYSBldCAtciBkZSAnZ2l0IGJyYW5jaCcgbidvbnQgcGFzIGRlIHNlbnMgYXZlYyB1biBub20gZGUgYnJhbmNoZSIKIAotIzogZ2l0azoyNjU2Ci1tc2dpZCAiSGlnaGxpZ2h0IHRoaXMgdG9vIgotbXNnc3RyICJTdXJsaWduZXIgw6lnYWxlbWVudCBjZWNpIgotCi0jOiBnaXRrOjI2NTcKLW1zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgotbXNnc3RyICJTdXJsaWduZXIgc2V1bGVtZW50IGNlY2kiCi0KLSM6IGdpdGs6MjY1OAotbXNnaWQgIkV4dGVybmFsIGRpZmYiCi1tc2dzdHIgIkRpZmYgZXh0ZXJuZSIKLQotIzogZ2l0azoyNjU5Ci1tc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKLW1zZ3N0ciAiQmzDom1lciBsZSBjb21taXQgcGFyZW50IgotCi0jOiBnaXRrOjI2NjAKLW1zZ2lkICJDb3B5IHBhdGgiCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtLXNldC11cHN0cmVhbSBmbGFnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gQ29uc2lkZXIgdXNpbmcgLS0iCisidHJhY2sgb3IgLS1zZXQtdXBzdHJlYW0tdG9cbiIKIG1zZ3N0ciAiIgorImwnb3B0aW9uIC0tc2V0LXVwc3RyZWFtIGVzdCBvYnNvbMOodGUgZXQgdmEgZGlzcGFyYcOudHJlLiBVdGlsaXNleiBwbHV0w7R0IC0tIgorInRyYWNrIG91IC0tc2V0LXVwc3RyZWFtLXRvXG4iCiAKLSM6IGdpdGs6MjY2NwotbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKLW1zZ3N0ciAiTW9udHJlciBsJ29yaWdpbmUgZGUgY2V0dGUgbGlnbmUiCi0KLSM6IGdpdGs6MjY2OAotbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKLW1zZ3N0ciAiRXjDqWN1dGVyIGdpdCBndWkgYmxhbWUgc3VyIGNldHRlIGxpZ25lIgotCi0jOiBnaXRrOjMwMTQKLSMsIGZ1enp5CisjOiBidWlsdGluL2JyYW5jaC5jOjEwMzUKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgotIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgotIlxuIgotIkNvcHlyaWdodCDCqSAyMDA1LTIwMTQgUGF1bCBNYWNrZXJyYXNcbiIKLSJcbiIKLSJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgotbXNnc3RyICIiCi0iXG4iCi0iR2l0ayAtIHZpc3VhbGlzYXRldXIgZGUgY29tbWl0IHBvdXIgZ2l0XG4iCi0iXG4iCi0iQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCi0iXG4iCi0iVXRpbGlzYXRpb24gZXQgcmVkaXN0cmlidXRpb24gc291bWlzZXMgYXV4IHRlcm1lcyBkZSBsYSBHTlUgR2VuZXJhbCBQdWJsaWMgIgotIkxpY2Vuc2UiCi0KLSM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Ci1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgIkZlcm1lciIKLQotIzogZ2l0azozMDQzCi1tc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCi1tc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciBkZSBHaXRrIgotCi0jOiBnaXRrOjMwNDYKLW1zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCi1tc2dzdHIgIlJhY2NvdXJjaXMgY2xhdmllciBkZSBHaXRrIDoiCi0KLSM6IGdpdGs6MzA0OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgotbXNnc3RyICI8JXMtUT5cdFx0UXVpdHRlciIKLQotIzogZ2l0azozMDQ5Ci0jLCBmdXp6eSwgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCi1tc2dzdHIgIjwlcy1GPlx0XHRSZWNoZXJjaGVyIgotCi0jOiBnaXRrOjMwNTAKLW1zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCi1tc2dzdHIgIjxEw6lidXQ+XHRcdEFsbGVyIGF1IHByZW1pZXIgY29tbWl0IgotCi0jOiBnaXRrOjMwNTEKLW1zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgotbXNnc3RyICI8RmluPlx0XHRBbGxlciBhdSBkZXJuaWVyIGNvbW1pdCIKLQotIzogZ2l0azozMDUyCi0jLCBmdXp6eQotbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKLW1zZ3N0ciAiPEhhdXQ+LCBwLCBpXHQgQWxsZXIgYXUgY29tbWl0IHN1aXZhbnQiCi0KLSM6IGdpdGs6MzA1MwotIywgZnV6enkKLW1zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgotbXNnc3RyICI8QmFzPiwgbiwga1x0IEFsbGVyIGF1IGNvbW1pdCBwcsOpY8OpZGVudCIKLQotIzogZ2l0azozMDU0Ci0jLCBmdXp6eQotbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCi1tc2dzdHIgIjxHYXVjaGU+LCB6LCBqXHRSZWN1bGVyIGRhbnMgbCdoaXN0b3JpcXVlIgotCi0jOiBnaXRrOjMwNTUKLW1zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKLW1zZ3N0ciAiPERyb2l0ZT4sIHgsIGxcdEF2YW5jZXIgZGFucyBsJ2hpc3RvcmlxdWUiCi0KLSM6IGdpdGs6MzA1NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgotbXNnc3RyICIiCi0KLSM6IGdpdGs6MzA1NwotbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8UGFnZVVwPlx0TW9udGVyIGQndW5lIHBhZ2UgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKLQotIzogZ2l0azozMDU4Ci1tc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8UGFnZURvd24+XHREZXNjZW5kcmUgZCd1bmUgcGFnZSBkYW5zIGxhIGxpc3RlIGRlcyBjb21taXRzIgotCi0jOiBnaXRrOjMwNTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCi1tc2dzdHIgIjwlcy1Ew6lidXQ+XHRBbGxlciBlbiBoYXV0IGRlIGxhIGxpc3RlIGRlcyBjb21taXRzIgotCi0jOiBnaXRrOjMwNjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKLW1zZ3N0ciAiPCVzLUVuZD5cdEFsbGVyIGVuIGJhcyBkZSBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKLQotIzogZ2l0azozMDYxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVVwPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IHVwIG9uZSBsaW5lIgotbXNnc3RyICI8JXMtVXA+XHRNb250ZXIgZCd1bmUgbGlnbmUgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKLQotIzogZ2l0azozMDYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKLW1zZ3N0ciAiPCVzLURvd24+XHREZXNjZW5kcmUgZCd1bmUgbGlnbmUgZGFucyBsYSBsaXN0ZSBkZXMgY29tbWl0cyIKLQotIzogZ2l0azozMDYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPCVzLVBhZ2VVcD5cdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCi0KLSM6IGdpdGs6MzA2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgotbXNnc3RyICI8JXMtUGFnZURvd24+XHREZXNjZW5kcmUgZCd1bmUgcGFnZSBkYW5zIGxhIGxpc3RlIGRlcyBjb21taXRzIgotCi0jOiBnaXRrOjMwNjUKLW1zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCi1tc2dzdHIgIiIKLSI8U2hpZnQtVXA+XHRSZWNoZXJjaGUgZW4gYXJyacOocmUgKHZlcnMgbCdhdmFudCwgY29tbWl0cyBsZXMgcGx1cyBhbmNpZW5zKSIKLQotIzogZ2l0azozMDY2Ci1tc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCi1tc2dzdHIgIiIKLSI8U2hpZnQtRG93bj5cdFJlY2hlcmNoZSBlbiBhdmFudCAodmVycyBsJ2FycmnDqHJlLCBjb21taXQgbGVzIHBsdXMgcsOpY2VudHMpIgotCi0jOiBnaXRrOjMwNjcKLW1zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPFN1cHByaW1lcj4sIGJcdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgotCi0jOiBnaXRrOjMwNjgKLW1zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPEJhY2tzcGFjZT5cdE1vbnRlciBkJ3VuZSBwYWdlIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgotCi0jOiBnaXRrOjMwNjkKLW1zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKLW1zZ3N0ciAiPEVzcGFjZT5cdFx0RGVzY2VuZHJlIGQndW5lIHBhZ2UgZGFucyBsYSB2dWUgZGVzIGRpZmYiCi0KLSM6IGdpdGs6MzA3MAotbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKLW1zZ3N0ciAidVx0XHRNb250ZXIgZGUgMTggbGlnbmVzIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgotCi0jOiBnaXRrOjMwNzEKLW1zZ2lkICJkXHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biAxOCBsaW5lcyIKLW1zZ3N0ciAiZFx0XHREZXNjZW5kcmUgZGUgMTggbGlnbmVzIGRhbnMgbGEgdnVlIGRlcyBkaWZmIgotCi0jOiBnaXRrOjMwNzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtRj5cdFx0RmluZCIKLW1zZ3N0ciAiPCVzLUY+XHRcdFJlY2hlcmNoZXIiCi0KLSM6IGdpdGs6MzA3MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCi1tc2dzdHIgIjwlcy1HPlx0XHRBbGxlciBhdSByw6lzdWx0YXQgZGUgcmVjaGVyY2hlIHN1aXZhbnQiCi0KLSM6IGdpdGs6MzA3NAotbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCi1tc2dzdHIgIjxSZXR1cm4+XHRcdEFsbGVyIGF1IHLDqXN1bHRhdCBkZSByZWNoZXJjaGUgc3VpdmFudCIKLQotIzogZ2l0azozMDc1Ci0jLCBmdXp6eQotbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgotbXNnc3RyICI8RmluPlx0XHRBbGxlciBhdSBkZXJuaWVyIGNvbW1pdCIKLQotIzogZ2l0azozMDc2Ci1tc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKLW1zZ3N0ciAiL1x0XHRGb2N1cyBzdXIgbGEgem9uZSBkZSByZWNoZXJjaGUiCi0KLSM6IGdpdGs6MzA3NwotbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKLW1zZ3N0ciAiP1x0XHRBbGxlciBhdSByw6lzdWx0YXQgZGUgcmVjaGVyY2hlIHByw6ljw6lkZW50IgotCi0jOiBnaXRrOjMwNzgKLW1zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgotbXNnc3RyICJmXHRcdEFsbGVyIGF1IHByb2NoYWluIGZpY2hpZXIgZGFucyBsYSB2dWUgZGVzIGRpZmYiCi0KLSM6IGdpdGs6MzA3OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1TPlx0XHRTZWFyY2ggZm9yIG5leHQgaGl0IGluIGRpZmYgdmlldyIKLW1zZ3N0ciAiPCVzLVM+XHRcdEFsbGVyIGF1IHLDqXN1bHRhdCBzdWl2YW50IGRhbnMgbGEgdnVlIGRlcyBkaWZmIgotCi0jOiBnaXRrOjMwODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgotbXNnc3RyICI8JXMtUj5cdFx0QWxsZXIgYXUgcsOpc3VsdGF0IHByw6ljw6lkZW50IGRhbnMgbGEgdnVlIGRlcyBkaWZmIgotCi0jOiBnaXRrOjMwODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtS1ArPlx0QXVnbWVudGVyIGxhIHRhaWxsZSBkZSBsYSBwb2xpY2UiCi0KLSM6IGdpdGs6MzA4MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1wbHVzPlx0SW5jcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtcGx1cz5cdEF1Z21lbnRlciBsYSB0YWlsbGUgZGUgbGEgcG9saWNlIgotCi0jOiBnaXRrOjMwODMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtS1AtPlx0RGltaW51ZXIgbGEgdGFpbGxlIGRlIGxhIHBvbGljZSIKLQotIzogZ2l0azozMDg0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLW1pbnVzPlx0RGVjcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtbWludXM+XHREaW1pbnVlciBsYSB0YWlsbGUgZGUgbGEgcG9saWNlIgotCi0jOiBnaXRrOjMwODUKLW1zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKLW1zZ3N0ciAiPEY1Plx0XHRNaXNlIMOgIGpvdXIiCi0KLSM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKLW1zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgY3LDqWF0aW9uIGR1IHLDqXBlcnRvaXJlIHRlbXBvcmFpcmUgJXMgOiIKLQotIzogZ2l0azozNTcyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBcIiVzXCIgZnJvbSAlczoiCi1tc2dzdHIgIkVycmV1ciBlbiBvYnRlbmFudCBcIiVzXCIgZGUgJXM6IgotCi0jOiBnaXRrOjM2MzUKLW1zZ2lkICJjb21tYW5kIGZhaWxlZDoiCi1tc2dzdHIgIsOpY2hlYyBkZSBsYSBjb21tYW5kZSA6IgotCi0jOiBnaXRrOjM3ODQKLW1zZ2lkICJObyBzdWNoIGNvbW1pdCIKLW1zZ3N0ciAiQ29tbWl0IGluZXhpc3RhbnQiCi0KLSM6IGdpdGs6Mzc5OAotbXNnaWQgImdpdCBndWkgYmxhbWU6IGNvbW1hbmQgZmFpbGVkOiIKLW1zZ3N0ciAiZ2l0IGd1aSBibGFtZSA6IMOpY2hlYyBkZSBsYSBjb21tYW5kZSA6IgotCi0jOiBnaXRrOjM4MjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgotbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgbGUgaGVhZCBkZSBsYSBmdXNpb24gOiAlcyIKLQotIzogZ2l0azozODM3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCi1tc2dzdHIgIkVycmV1ciDDoCBsYSBsZWN0dXJlIGRlIGwnaW5kZXggOiAlcyIKLQotIzogZ2l0azozODYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6ltYXJyZXIgZ2l0IGJsYW1lIDogJXMiCi0KLSM6IGdpdGs6Mzg2NSBnaXRrOjY3NTQKLW1zZ2lkICJTZWFyY2hpbmciCi1tc2dzdHIgIlJlY2hlcmNoZSBlbiBjb3VycyIKLQotIzogZ2l0azozODk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgotbXNnc3RyICJFcnJldXIgw6AgbCdleMOpY3V0aW9uIGRlIGdpdCBibGFtZSA6ICVzIgotCi0jOiBnaXRrOjM5MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgotbXNnc3RyICJDZXR0ZSBsaWduZSBlc3QgaXNzdWUgZHUgY29tbWl0ICVzLCBxdWkgbidlc3QgcGFzIGRhbnMgY2V0dGUgdnVlIgotCi0jOiBnaXRrOjM5MzkKLW1zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgotbXNnc3RyICLDiWNoZWMgZGUgbCdvdXRpbCBleHRlcm5lIGRlIHZpc3VhbGlzYXRpb24gZGVzIGRpZmYiCi0KLSM6IGdpdGs6NDA3MAotbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgotbXNnc3RyICJEw6lmaW5pdGlvbiBkZXMgdnVlcyBkZSBHaXRrIgotCi0jOiBnaXRrOjQwNzQKLW1zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCi1tc2dzdHIgIlNlIHNvdXZlbmlyIGRlIGNldHRlIHZ1ZSIKLQotIzogZ2l0azo0MDc1Ci1tc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKLW1zZ3N0ciAiUsOpZsOpcmVuY2VzIChsaXN0ZSBkJ8OpbMOpbWVudHMgc8OpcGFyw6lzIHBhciBkZXMgZXNwYWNlcykgOiIKLQotIzogZ2l0azo0MDc2Ci1tc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKLW1zZ3N0ciAiQnJhbmNoZXMgJiB0YWdzIDoiCi0KLSM6IGdpdGs6NDA3NwotbXNnaWQgIkFsbCByZWZzIgotbXNnc3RyICJUb3V0ZXMgbGVzIHLDqWbDqXJlbmNlcyIKLQotIzogZ2l0azo0MDc4Ci1tc2dpZCAiQWxsIChsb2NhbCkgYnJhbmNoZXMiCi1tc2dzdHIgIlRvdXRlcyBsZXMgYnJhbmNoZXMgKGxvY2FsZXMpIgotCi0jOiBnaXRrOjQwNzkKLW1zZ2lkICJBbGwgdGFncyIKLW1zZ3N0ciAiVG91cyBsZXMgdGFncyIKLQotIzogZ2l0azo0MDgwCi1tc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKLW1zZ3N0ciAiVG91dGVzIGxlcyBicmFuY2hlcyBkZSBzdWl2aSDDoCBkaXN0YW5jZSIKLQotIzogZ2l0azo0MDgxCi1tc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKLW1zZ3N0ciAiSW5mbyBzdXIgbGVzIGNvbW1pdHMgKGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcykgOiIKLQotIzogZ2l0azo0MDgyCi1tc2dpZCAiQXV0aG9yOiIKLW1zZ3N0ciAiQXV0ZXVyIDoiCi0KLSM6IGdpdGs6NDA4MwotbXNnaWQgIkNvbW1pdHRlcjoiCi1tc2dzdHIgIkNvbW1pdGV1ciA6IgotCi0jOiBnaXRrOjQwODQKLW1zZ2lkICJDb21taXQgTWVzc2FnZToiCi1tc2dzdHIgIk1lc3NhZ2UgZGUgY29tbWl0IDoiCi0KLSM6IGdpdGs6NDA4NQotbXNnaWQgIk1hdGNoZXMgYWxsIENvbW1pdCBJbmZvIGNyaXRlcmlhIgotbXNnc3RyICJDb3JyZXNwb25kIMOgIHRvdXMgbGVzIGNyaXTDqHJlcyBkJ0luZm8gc3VyIGxlcyBjb21taXRzIgotCi0jOiBnaXRrOjQwODYKLSMsIGZ1enp5Ci1tc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKLW1zZ3N0ciAiQ29ycmVzcG9uZCDDoCB0b3VzIGxlcyBjcml0w6hyZXMgZCdJbmZvIHN1ciBsZXMgY29tbWl0cyIKLQotIzogZ2l0azo0MDg3Ci1tc2dpZCAiQ2hhbmdlcyB0byBGaWxlczoiCi1tc2dzdHIgIkNoYW5nZW1lbnRzIGRlcyBmaWNoaWVycyA6IgotCi0jOiBnaXRrOjQwODgKLW1zZ2lkICJGaXhlZCBTdHJpbmciCi1tc2dzdHIgIkNoYcOubmUgRmlnw6llIgotCi0jOiBnaXRrOjQwODkKLW1zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCi1tc2dzdHIgIkV4cHJlc3Npb24gUsOpZ3VsacOocmUiCi0KLSM6IGdpdGs6NDA5MAotbXNnaWQgIlNlYXJjaCBzdHJpbmc6IgotbXNnc3RyICJSZWNoZXJjaGUgZGUgbGEgY2hhw65uZSA6IgotCi0jOiBnaXRrOjQwOTEKLW1zZ2lkICIiCi0iQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKLSIxNToyNzozOFwiKToiCi1tc2dzdHIgIiIKLSJEYXRlcyBkZXMgY29tbWl0cyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgIgotIjIwMDkgMTU6Mjc6MzhcIikgOiIKLQotIzogZ2l0azo0MDkyCi1tc2dpZCAiU2luY2U6IgotbXNnc3RyICJEZSA6IgotCi0jOiBnaXRrOjQwOTMKLW1zZ2lkICJVbnRpbDoiCi1tc2dzdHIgIkp1c3F1J2F1IDoiCi0KLSM6IGdpdGs6NDA5NAotbXNnaWQgIkxpbWl0IGFuZC9vciBza2lwIGEgbnVtYmVyIG9mIHJldmlzaW9ucyAocG9zaXRpdmUgaW50ZWdlcik6IgotbXNnc3RyICJMaW1pdGVyIGV0L291IHNhdXRlciB1biBjZXJ0YWluIG5vbWJyZSAoZW50aWVyIHBvc2l0aWYpIGRlIHLDqXZpc2lvbnMgOiIKLQotIzogZ2l0azo0MDk1Ci1tc2dpZCAiTnVtYmVyIHRvIHNob3c6IgotbXNnc3RyICJOb21icmUgw6AgYWZmaWNoZXIgOiIKLQotIzogZ2l0azo0MDk2Ci1tc2dpZCAiTnVtYmVyIHRvIHNraXA6IgotbXNnc3RyICJOb21icmUgw6Agc2F1dGVyIDoiCi0KLSM6IGdpdGs6NDA5NwotbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCi1tc2dzdHIgIk9wdGlvbnMgZGl2ZXJzZXMgOiIKLQotIzogZ2l0azo0MDk4Ci1tc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgotbXNnc3RyICJUcmllciBwYXIgZGF0ZSIKLQotIyBGSVhNRSA6IHRyYWR1Y3Rpb24gZGUgImJyYW5jaCBzaWRlcyIKLSM6IGdpdGs6NDA5OQotIywgZnV6enkKLW1zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKLW1zZ3N0ciAiTWFycXVlciBsZXMgZXh0csOpbWl0w6lzIGRlcyBicmFuY2hlcyIKLQotIzogZ2l0azo0MTAwCi1tc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgotbXNnc3RyICJMaW1pdGVyIGF1IHByZW1pZXIgYW5jw6p0cmUiCi0KLSM6IGdpdGs6NDEwMQotbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgotbXNnc3RyICJIaXN0b3JpcXVlIHNpbXBsZSIKLQotIzogZ2l0azo0MTAyCi1tc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCi1tc2dzdHIgIkFyZ3VtZW50cyBzdXBwbMOpbWVudGFpcmVzIGRlIGdpdCBsb2cgOiIKLQotIzogZ2l0azo0MTAzCi1tc2dpZCAiRW50ZXIgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGluY2x1ZGUsIG9uZSBwZXIgbGluZToiCi1tc2dzdHIgIlNhaXNpciBsZXMgZmljaGllcnMgZXQgcsOpcGVydG9pcmVzIMOgIGluY2x1cmUsIHVuIHBhciBsaWduZSA6IgotCi0jOiBnaXRrOjQxMDQKLW1zZ2lkICJDb21tYW5kIHRvIGdlbmVyYXRlIG1vcmUgY29tbWl0cyB0byBpbmNsdWRlOiIKLW1zZ3N0ciAiQ29tbWFuZGUgcG91ciBnw6luw6lyZXIgcGx1cyBkZSBjb21taXRzIMOgIGluY2x1cmUgOiIKLQotIzogZ2l0azo0MjI4Ci1tc2dpZCAiR2l0azogZWRpdCB2aWV3IgotbXNnc3RyICJHaXRrIDogw6lkaXRlciBsYSB2dWUiCi0KLSM6IGdpdGs6NDIzNgotbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgotbXNnc3RyICItLSBjcml0w6hyZSBwb3VyIGxhIHPDqWxlY3Rpb24gZGVzIHLDqXZpc2lvbnMiCi0KLSM6IGdpdGs6NDI0MQotIywgZnV6enkKLW1zZ2lkICJWaWV3IE5hbWUiCi1tc2dzdHIgIk5vbSBkZSBsYSB2dWUgOiIKLQotIzogZ2l0azo0MzE2Ci1tc2dpZCAiQXBwbHkgKEY1KSIKLW1zZ3N0ciAiQXBwbGlxdWVyIChGNSkiCi0KLSM6IGdpdGs6NDM1NAotbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKLW1zZ3N0ciAiRXJyZXVyIGRhbnMgbGVzIGFyZ3VtZW50cyBkZSBzw6lsZWN0aW9uIGRlcyBjb21taXRzIDoiCi0KLSM6IGdpdGs6NDQwOSBnaXRrOjQ0NjIgZ2l0azo0OTI0IGdpdGs6NDkzOCBnaXRrOjYyMDggZ2l0azoxMjM3MyBnaXRrOjEyMzc0Ci1tc2dpZCAiTm9uZSIKLW1zZ3N0ciAiQXVjdW4iCi0KLSM6IGdpdGs6NTAyMSBnaXRrOjUwMjYKLW1zZ2lkICJEZXNjZW5kYW50IgotbXNnc3RyICJEZXNjZW5kYW50IgotCi0jOiBnaXRrOjUwMjIKLW1zZ2lkICJOb3QgZGVzY2VuZGFudCIKLW1zZ3N0ciAiUGFzIHVuIGRlc2NlbmRhbnQiCi0KLSM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKLW1zZ2lkICJBbmNlc3RvciIKLW1zZ3N0ciAiQW5jw6p0cmUiCi0KLSM6IGdpdGs6NTAzMAotbXNnaWQgIk5vdCBhbmNlc3RvciIKLW1zZ3N0ciAiUGFzIHVuIGFuY8OqdHJlIgotCi0jOiBnaXRrOjUzMjQKLW1zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCi1tc2dzdHIgIk1vZGlmaWNhdGlvbnMgbG9jYWxlcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbCdpbmRleCBtYWlzIG5vbiBjb21taXTDqWVzIgotCi0jOiBnaXRrOjUzNjAKLW1zZ2lkICJMb2NhbCB1bmNvbW1pdHRlZCBjaGFuZ2VzLCBub3QgY2hlY2tlZCBpbiB0byBpbmRleCIKLW1zZ3N0ciAiTW9kaWZpY2F0aW9ucyBsb2NhbGVzIG5vbiBlbnJlZ2lzdHLDqWVzIGRhbnMgbCdpbmRleCBldCBub24gY29tbWl0w6llcyIKLQotIzogZ2l0azo3MTM0Ci1tc2dpZCAiYW5kIG1hbnkgbW9yZSIKLW1zZ3N0ciAiIgotCi0jOiBnaXRrOjcxMzcKLW1zZ2lkICJtYW55IgotbXNnc3RyICJub21icmV1eCIKLQotIzogZ2l0azo3MzI4Ci1tc2dpZCAiVGFnczoiCi1tc2dzdHIgIlRhZ3MgOiIKLQotIzogZ2l0azo3MzQ1IGdpdGs6NzM1MSBnaXRrOjg4MjUKLW1zZ2lkICJQYXJlbnQiCi1tc2dzdHIgIlBhcmVudCIKLQotIzogZ2l0azo3MzU2Ci1tc2dpZCAiQ2hpbGQiCi1tc2dzdHIgIkVuZmFudCIKLQotIzogZ2l0azo3MzY1Ci1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICJCcmFuY2hlIgotCi0jOiBnaXRrOjczNjgKLW1zZ2lkICJGb2xsb3dzIgotbXNnc3RyICJTdWl0IgotCi0jOiBnaXRrOjczNzEKLW1zZ2lkICJQcmVjZWRlcyIKLW1zZ3N0ciAiUHLDqWPDqGRlIgotCi0jOiBnaXRrOjc5NjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKLW1zZ3N0ciAiRXJyZXVyIGxvcnMgZGUgbGEgcsOpY3Vww6lyYXRpb24gZGVzIGRpZmYgOiAlcyIKLQotIzogZ2l0azo4NjUwCi1tc2dpZCAiR290bzoiCi1tc2dzdHIgIkFsbGVyIMOgIDoiCi0KLSM6IGdpdGs6ODY3MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgotbXNnc3RyICJJZCBTSEExIGNvdXJ0ICVzIGVzdCBhbWJpZ3UiCi0KLSM6IGdpdGs6ODY3OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAiSWQgU0hBMSAlcyBlc3QgaW5jb25udSIKLQotIzogZ2l0azo4Njg4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCi1tc2dzdHIgIklkIFNIQTEgJXMgZXN0IGluY29ubnUiCi0KLSM6IGdpdGs6ODY5MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgotbXNnc3RyICJMYSByw6l2aXNpb24gJXMgbidlc3QgcGFzIGRhbnMgbGEgdnVlIGNvdXJhbnRlIgotCi0jOiBnaXRrOjg4MzIgZ2l0azo4ODQ3Ci1tc2dpZCAiRGF0ZSIKLW1zZ3N0ciAiRGF0ZSIKLQotIzogZ2l0azo4ODM1Ci1tc2dpZCAiQ2hpbGRyZW4iCi1tc2dzdHIgIkVuZmFudHMiCi0KLSM6IGdpdGs6ODg5OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgotbXNnc3RyICJSw6lpbml0aWFsaXNlciBsYSBicmFuY2hlICVzIHZlcnMgY2V0IMOpdGF0IgotCi0jOiBnaXRrOjg5MDAKLW1zZ2lkICJEZXRhY2hlZCBoZWFkOiBjYW4ndCByZXNldCIKLW1zZ3N0ciAiSGVhZCBkw6l0YWNow6kgOiBpbXBvc3NpYmxlIGRlIHLDqWluaXRpYWxpc2VyIgotCi0jOiBnaXRrOjkwMDUgZ2l0azo5MDExCi1tc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKLW1zZ3N0ciAiw4l2aXRlciBsZSBjb21taXQgZGUgbGEgZnVzaW9uICIKLQotIzogZ2l0azo5MDIwIGdpdGs6OTAyNQotbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKLW1zZ3N0ciAiRXJyZXVyIMOgIGwnb2J0ZW50aW9uIGRlIGwnSUQgZHUgcGF0Y2ggcG91ciAiCi0KLSM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKLW1zZ2lkICIgLSBzdG9wcGluZ1xuIgotbXNnc3RyICIgLSBhcnLDqnQgZW4gY291cnNcbiIKLQotIzogZ2l0azo5MDMxIGdpdGs6OTAzNCBnaXRrOjkwNDIgZ2l0azo5MDU2IGdpdGs6OTA2NQotbXNnaWQgIkNvbW1pdCAiCi1tc2dzdHIgIkNvbW1pdCAiCi0KLSM6IGdpdGs6OTAzNQotbXNnaWQgIiIKLSIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKLSIgICAgICAgIgotbXNnc3RyICIiCi0iZXN0IGxlIG3Dqm1lIHBhdGNoIHF1ZSBcbiIKLSIgICAgICAgIgotCi0jOiBnaXRrOjkwNDMKLW1zZ2lkICIiCi0iIGRpZmZlcnMgZnJvbVxuIgotIiAgICAgICAiCi1tc2dzdHIgIiIKLSIgZGlmZsOocmUgZGVcbiIKLSIgICAgICAgIgotCi0jOiBnaXRrOjkwNDUKLW1zZ2lkICIiCi0iRGlmZiBvZiBjb21taXRzOlxuIgorIklmIHlvdSB3YW50ZWQgdG8gbWFrZSAnJXMnIHRyYWNrICclcycsIGRvIHRoaXM6XG4iCiAiXG4iCiBtc2dzdHIgIiIKKyJcbiIKKyJTaSB2b3VzIHZvdWxpZXogcXVlICclcycgc3VpdmUgJyVzJywgZmHDrnRlcyBjZWNpIDpcbiIKKyJcbiIKIAotIzogZ2l0azo5MDU3IGdpdGs6OTA2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgotbXNnc3RyICJhICVzIGVuZmFudHMgLSBhcnLDqnQgZW4gY291cnNcbiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgZ2l0IGJyYW5jaCAtZCAlc1xuIgorbXNnc3RyICIgICAgZ2l0IGJyYW5jaCAtZCAlc1xuIgogCi0jOiBnaXRrOjkwODUKLSMsIGZ1enp5LCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCi1tc2dzdHIgIkVycmV1ciDDoCBsJ2Vjcml0dXJlIGR1IGNvbW1pdCA6IgorIzogYnVpbHRpbi9icmFuY2guYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvICVzXG4iCittc2dzdHIgIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvICVzXG4iCiAKLSM6IGdpdGs6OTA5MQotIywgZnV6enksIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgotbXNnc3RyICJFcnJldXIgw6AgbCdlY3JpdHVyZSBkdSBjb21taXQgOiIKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyBlc3QgY29ycmVjdFxuIgogCi0jOiBnaXRrOjkxMzcKLW1zZ2lkICJUb3AiCi1tc2dzdHIgIkhhdXQiCisjOiBidWlsdGluL2J1bmRsZS5jOjY0Cittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAiTGEgY3LDqWF0aW9uIGQndW4gY29saXMgcmVxdWllcnQgdW4gZMOpcMO0dC4iCiAKLSM6IGdpdGs6OTEzOAotbXNnaWQgIkZyb20iCi1tc2dzdHIgIkRlIgorIzogYnVpbHRpbi9idW5kbGUuYzo2OAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAiTGUgZMOpcGFxdWV0YWdlIGQndW4gY29saXMgcmVxdWllcnQgdW4gZMOpcMO0dC4iCiAKLSM6IGdpdGs6OTE0MwotbXNnaWQgIlRvIgotbXNnc3RyICLDgCIKLQotIzogZ2l0azo5MTY3Ci1tc2dpZCAiR2VuZXJhdGUgcGF0Y2giCi1tc2dzdHIgIkfDqW7DqXJlciBsZSBwYXRjaCIKLQotIzogZ2l0azo5MTY5Ci1tc2dpZCAiRnJvbToiCi1tc2dzdHIgIkRlIDoiCi0KLSM6IGdpdGs6OTE3OAotbXNnaWQgIlRvOiIKLW1zZ3N0ciAiw4AgOiIKLQotIzogZ2l0azo5MTg3Ci1tc2dpZCAiUmV2ZXJzZSIKLW1zZ3N0ciAiSW52ZXJzZXIiCi0KLSM6IGdpdGs6OTE4OSBnaXRrOjkzODUKLW1zZ2lkICJPdXRwdXQgZmlsZToiCi1tc2dzdHIgIkZpY2hpZXIgZGUgc29ydGllIDoiCi0KLSM6IGdpdGs6OTE5NQotbXNnaWQgIkdlbmVyYXRlIgotbXNnc3RyICJHw6luw6lyZXIiCi0KLSM6IGdpdGs6OTIzMwotbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKLW1zZ3N0ciAiRXJyZXVyIMOgIGxhIGNyw6lhdGlvbiBkdSBwYXRjaCA6IgotCi0jOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAotbXNnaWQgIklEOiIKLW1zZ3N0ciAiSUQgOiIKLQotIzogZ2l0azo5MjY1Ci1tc2dpZCAiVGFnIG5hbWU6IgotbXNnc3RyICJOb20gZHUgVGFnIDoiCi0KLSM6IGdpdGs6OTI2OAotbXNnaWQgIlRhZyBtZXNzYWdlIGlzIG9wdGlvbmFsIgotbXNnc3RyICIiCi0KLSM6IGdpdGs6OTI3MAotIywgZnV6enkKLW1zZ2lkICJUYWcgbWVzc2FnZToiCi1tc2dzdHIgIk5vbSBkdSBUYWcgOiIKLQotIzogZ2l0azo5Mjc0IGdpdGs6OTQzOQotbXNnaWQgIkNyZWF0ZSIKLW1zZ3N0ciAiQ3LDqWVyIgotCi0jOiBnaXRrOjkyOTIKLW1zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCi1tc2dzdHIgIkF1Y3VuIG5vbSBkZSB0YWcgc3DDqWNpZmnDqSIKLQotIzogZ2l0azo5Mjk2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKLW1zZ3N0ciAiTGUgdGFnIFwiJXNcIiBleGlzdGUgZMOpasOgIgotCi0jOiBnaXRrOjkzMDYKLW1zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgotbXNnc3RyICJFcnJldXIgw6AgbGEgY3LDqWF0aW9uIGR1IHRhZyA6IgotCi0jOiBnaXRrOjkzODIKLW1zZ2lkICJDb21tYW5kOiIKLW1zZ3N0ciAiQ29tbWFuZGUgOiIKLQotIzogZ2l0azo5MzkwCi1tc2dpZCAiV3JpdGUiCi1tc2dzdHIgIsOJY3JpcmUiCi0KLSM6IGdpdGs6OTQwOAotbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKLW1zZ3N0ciAiRXJyZXVyIMOgIGwnZWNyaXR1cmUgZHUgY29tbWl0IDoiCi0KLSM6IGdpdGs6OTQzNQotbXNnaWQgIk5hbWU6IgotbXNnc3RyICJOb20gOiIKLQotIzogZ2l0azo5NDU4Ci1tc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKLW1zZ3N0ciAiVmV1aWxsZXogc3DDqWNpZmllciB1biBub20gcG91ciBsYSBub3V2ZWxsZSBicmFuY2hlIgotCi0jOiBnaXRrOjk0NjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKLW1zZ3N0ciAiTGEgYnJhbmNoZSAnJXMnIGV4aXN0ZSBkw6lqw6AuIMOJY3Jhc2VyPyIKLQotIzogZ2l0azo5NTMwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCi1tc2dzdHIgIiIKLSJMZSBDb21taXQgJXMgZXN0IGTDqWrDoCBpbmNsdXMgZGFucyBsYSBicmFuY2hlICVzIC0tIGxlIHLDqS1hcHBsaXF1ZXIgbWFsZ3LDqSAiCi0idG91dD8iCi0KLSM6IGdpdGs6OTUzNQotbXNnaWQgIkNoZXJyeS1waWNraW5nIgotbXNnc3RyICJDdWVpbGxpciAoQ2hlcnJ5LXBpY2tpbmcpIgotCi0jOiBnaXRrOjk1NDQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MjgKIG1zZ2lkICIiCi0iQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCi0iUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdfC1lfC1wfCIKKyI8dHlwZT58LS10ZXh0Y29udikgPG9iamVjdD4iCiBtc2dzdHIgIiIKLSJMYSBjdWVpbGxldHRlIChjaGVycnktcGljaykgYSDDqWNob3XDqWUgw6AgY2F1c2UgZGUgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIGR1ICIKLSJmaWNoaWVyICclcycuXG4iCi0iVmV1aWxsZXogY29tbWl0ZXIsIHLDqWluaXRpYWxpc2VyIG91IHN0YXNoZXIgdm9zIGNoYW5nZW1lbnRzIGV0IGVzc2F5ZXIgZGUgIgotIm5vdXZlYXUuIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93LXR5cGVdIHwgLXMgWy0tYWxsb3ctdW5rbm93LXR5cGVdIHwgLWUgfCAtcCAiCisifCA8dHlwZT4gfCAtLXRleHRjb252KSA8b2JqZXQ+IgogCi0jOiBnaXRrOjk1NTAKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MjkKIG1zZ2lkICIiCi0iQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCi0iRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSA8IDxsaXN0LW9mLSIKKyJvYmplY3RzPiIKIG1zZ3N0ciAiIgotIkxhIGN1ZWlsbGV0dGUgKGNoZXJyeS1waWNrKSBhIMOpY2hvdcOpZSDDoCBjYXVzZSBkJ3VuIGNvbmZsaXQgbG9ycyBkJ3VuZSAiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSA8IDxsaXN0ZS1kLW9iamV0cz4iCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NjYKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIjx0eXBlPiBwZXV0IMOqdHJlIDogYmxvYiwgdHJlZSwgY29tbWl0IG91IHRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ2NworbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgImFmZmljaGVyIGxlIHR5cGUgZGUgbCdvYmpldCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ2OAorbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgImFmZmljaGVyIGxhIHRhaWxsZSBkZSBsJ29iamV0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDcwCittc2dpZCAiZXhpdCB3aXRoIHplcm8gd2hlbiB0aGVyZSdzIG5vIGVycm9yIgorbXNnc3RyICJzb3J0aXIgYXZlYyB1biBjb2RlIGQnZXJyZXVyIG51bCBxdWFuZCBpbCBuJ3kgYSBhdWN1bmUgZXJyZXVyIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDcxCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImFmZmljaGVyIGF2ZWMgbWlzZSBlbiBmb3JtZSBsZSBjb250ZW51IGRlIGwnb2JqZXQiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzMKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAicG91ciBsZXMgb2JqZXRzIGJsb2IsIGxhbmNlciB0ZXh0Y29udiBzdXIgbGUgY29udGVudSBkZSBsJ29iamV0IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDc1Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICJhdXRvcmlzZXIgLXMgZXQgLXQgw6AgdHJhdmFpbGxlciBzdXIgZGVzIG9iamV0cyBjYXNzw6lzL2NvcnJvbXB1cyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3NgorbXNnaWQgImJ1ZmZlciAtLWJhdGNoIG91dHB1dCIKK21zZ3N0ciAiYnVmZmVyaXNlciBsYSBzb3J0aWUgZGUgLS1iYXRjaCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3OAorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorImFmZmljaGVyIGwnaW5mb3JtYXRpb24gZXQgbGUgY29udGVudSBkZXMgb2JqZXRzIHBhc3PDqXMgZW4gZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ4MQorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbCdpbmZvcm1hdGlvbiBkZXMgb2JqZXRzIHBhc3PDqXMgZW4gZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ4NAorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAiIgorInN1aXZyZSBsZXMgbGllbnMgc3ltYm9saXF1ZSBpbnRlcm5lcyDDoCBsYSBjb3BpZSBkZSB0cmF2YWlsICh1dGlsaXPDqSBhdmVjIC0tIgorImJhdGNoIG91IC0tYmF0Y2gtY2hlY2spIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDg2Cittc2dpZCAic2hvdyBhbGwgb2JqZWN0cyB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjayIKK21zZ3N0ciAibW9udHJlciB0b3VzIGxlcyBvYmpldHMgYXZlYyAtLWJhdGNoIG91IC0tYmF0Y2gtY2hlY2siCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjExCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPGNoZW1pbj4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEyCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiIgorImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gPCA8bGlzdGUtZGUtY2hlbWlucz4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE5Cittc2dpZCAicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIgorbXNnc3RyICJhZmZpY2hlciB0b3VzIGxlcyBhdHRyaWJ1dHMgYXNzb2Npw6lzIGF1IGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIwCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgInV0aWxpc2VyIC5naXRhdHRyaWJ1dGVzIHNldWxlbWVudCBkZXB1aXMgbCdpbmRleCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTYKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGlyZSBsZXMgbm9tcyBkZSBmaWNoaWVyIGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjQKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiIgorInRlcm1pbmVyIGxlcyBlbnJlZ2lzdHJlbWVudHMgZW4gZW50csOpZSBldCBlbiBzb3J0aWUgcGFyIHVuIGNhcmFjdMOocmUgTlVMIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTMzIGJ1aWx0aW4vZ2MuYzoyNjcKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgInN1cHByaW1lciBsJ8OpdGF0IGQnYXZhbmNlbWVudCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNgorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgY2hlbWlucyBlbiBlbnRyw6llIHF1aSBuZSBjb3JyZXNwb25kZW50IHBhcyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOAorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICJpZ25vcmVyIGwnaW5kZXggcGVuZGFudCBsYSB2w6lyaWZpY2F0aW9uIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE1NAorbXNnaWQgImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iCittc2dzdHIgImltcG9zc2libGUgZGUgc3DDqWNpZmllciBsZXMgY2hlbWlucyBhdmVjIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU3Cittc2dpZCAiLXogb25seSBtYWtlcyBzZW5zZSB3aXRoIC0tc3RkaW4iCittc2dzdHIgIi16IG4nYSBkZSBzZW5zIHF1J2F2ZWMgbCdvcHRpb24gLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNTkKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAiYXVjdW4gY2hlbWluIHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTYzCittc2dpZCAiLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCittc2dzdHIgIi0tcXVpZXQgbidlc3QgdmFsaWRlIHF1J2F2ZWMgdW4gc2V1bCBjaGVtaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY1Cittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgImltcG9zc2libGUgZCdhdm9pciAtLXF1aWV0IGV0IC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyBuJ2VzdCB2YWxpZGUgcXUnYXZlYyAtLXZlcmJvc2UiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjgKK21zZ2lkICJnaXQgY2hlY2stbWFpbG1hcCBbPG9wdGlvbnM+XSA8Y29udGFjdD4uLi4iCittc2dzdHIgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTMKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGlyZSBhdXNzaSBsZXMgY29udGFjdHMgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnYW5hbHlzZXIgbGUgY29udGFjdCA6ICVzIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0NworbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAiYXVjdW4gY29udGFjdCBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTI2Cittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmljaGllcj4uLi5dIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTg4Cittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgImV4dHJhaXJlIHRvdXMgbGVzIGZpY2hpZXJzIHByw6lzZW50cyBkYW5zIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODkKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgImZvcmNlciBsJ8OpY3Jhc2VtZW50IGRlcyBmaWNoaWVycyBleGlzdGFudHMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTEKK21zZ2lkICJubyB3YXJuaW5nIGZvciBleGlzdGluZyBmaWxlcyBhbmQgZmlsZXMgbm90IGluIGluZGV4IgorbXNnc3RyICIiCisicGFzIGQnYXZlcnRpc3NlbWVudCBwb3VyIGxlcyBmaWNoaWVycyBleGlzdGFudHMgZXQgbGVzIGZpY2hpZXJzIGFic2VudHMgZGUgIgorImwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTMKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgIm5lIHBhcyBleHRyYWlyZSBsZXMgbm91dmVhdXggZmljaGllcnMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTUKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAibWV0dHJlIMOgIGpvdXIgbCdpbmZvcm1hdGlvbiBkZSBzdGF0IGRhbnMgbGUgZmljaGllciBkJ2luZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAxCittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsaXJlIGxhIGxpc3RlIGRlcyBjaGVtaW5zIGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDMKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgIsOpY3JpcmUgbGUgY29udGVudSBkYW5zIGRlcyBmaWNoaWVycyB0ZW1wb3JhaXJlcyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwNCBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAic3RyaW5nIgorbXNnc3RyICJjaGHDrm5lIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA1Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAibG9ycyBkZSBsYSBjcsOpYXRpb24gZGUgZmljaGllcnMsIHByw6lmaXhlciBwYXIgPGNoYcOubmU+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA4Cittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgImNvcGllciBsZXMgZmljaGllcnMgZGVwdWlzIGwnaW5kZXggbm9tbcOpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoZT4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoZT5dIC0tIDxmaWNoaWVyPi4uLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMyBidWlsdGluL2NoZWNrb3V0LmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2EgcGFzIG5vdHJlIHZlcnNpb24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzUgYnVpbHRpbi9jaGVja291dC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2EgcGFzIGxldXIgdmVyc2lvbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2EgYXVjdW5lIGRlcyB2ZXJzaW9ucyBuw6ljZXNzYWlyZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2EgcGFzIGxlcyB2ZXJzaW9ucyBuw6ljZXNzYWlyZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgImNoZW1pbiAnJXMnIDogaW1wb3NzaWJsZSBkZSBmdXNpb25uZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdham91dGVyIGxlIHLDqXN1bHRhdCBkZSBmdXNpb24gcG91ciAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUwIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTMgYnVpbHRpbi9jaGVja291dC5jOjI1NgorIzogYnVpbHRpbi9jaGVja291dC5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgIiclcycgbmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgYXZlYyBkZXMgbWlzZXMgw6Agam91ciBkZSBjaGVtaW5zIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYyIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIGF2ZWMgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciBsZXMgY2hlbWlucyBldCBiYXNjdWxlciBzdXIgbGEgYnJhbmNoZSAnJXMnIGVuICIKKyJtw6ptZSB0ZW1wcy4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzkgYnVpbHRpbi9jaGVja291dC5jOjQ3MworbXNnaWQgImNvcnJ1cHQgaW5kZXggZmlsZSIKK21zZ3N0ciAiZmljaGllciBkJ2luZGV4IGNvcnJvbXB1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzM5IGJ1aWx0aW4vY2hlY2tvdXQuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICJsZSBjaGVtaW4gJyVzJyBuJ2VzdCBwYXMgZnVzaW9ubsOpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDk1Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgInZvdXMgZGV2ZXogZCdhYm9yZCByw6lzb3VkcmUgdm90cmUgaW5kZXggY291cmFudCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmYWlyZSB1biByZWZsb2cgcG91ciAnJXMnwqA6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NjAKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCBlc3QgbWFpbnRlbmFudCBzdXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUmVtaXNlIMOgIHrDqXJvIGRlIGxhIGJyYW5jaGUgJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJEw6lqw6Agc3VyICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiQmFzY3VsZW1lbnQgZXQgcmVtaXNlIMOgIHrDqXJvIGRlIGxhIGJyYW5jaGUgJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njc2IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDY1CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIkJhc2N1bGVtZW50IHN1ciBsYSBub3V2ZWxsZSBicmFuY2hlICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJCYXNjdWxlbWVudCBzdXIgbGEgYnJhbmNoZSAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAiIC4uLiBldCAlZCBlbiBwbHVzLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dpZF9wbHVyYWwgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0cyBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzBdICIiCisiQXR0ZW50aW9uIDogdm91cyBhYmFuZG9ubmV6ICVkIGNvbW1pdCwgbm9uIGNvbm5lY3TDqSDDoFxuIgorInVuZSBicmFuY2hlIDpcbiIKKyJcbiIKKyIlc1xuIgorbXNnc3RyWzFdICIiCisiQXR0ZW50aW9uIDogdm91cyBhYmFuZG9ubmV6ICVkIGNvbW1pdHMsIG5vbiBjb25uZWN0w6lzIMOgXG4iCisidW5lIGJyYW5jaGUgOlxuIgorIlxuIgorIiVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisiU2kgdm91cyBzb3VoYWl0ZXogbGUgZ2FyZGVyIGVuIGNyw6lhbnQgdW5lIG5vdXZlbGxlIGJyYW5jaGUsIGMnZXN0IGxlIGJvbiAiCisibW9tZW50XG4iCisicG91ciBsZSBmYWlyZSBhdmVjIDpcbiIKKyJcbiIKKyJnaXQgYnJhbmNoIDxub3V2ZWxsZS1icmFuY2hlPiAlc1xuIgorIlxuIgorbXNnc3RyWzFdICIiCisiU2kgdm91cyBzb3VoYWl0ZXogbGVzIGdhcmRlciBlbiBjcsOpYW50IHVuZSBub3V2ZWxsZSBicmFuY2hlLCBjJ2VzdCBsZSBib24gIgorIm1vbWVudFxuIgorInBvdXIgbGUgZmFpcmUgYXZlYyA6XG4iCisiXG4iCisiZ2l0IGJyYW5jaCA8bm91dmVsbGUtYnJhbmNoZT4gJXNcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjc5MQorbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCittc2dzdHIgImVycmV1ciBpbnRlcm5lIGxvcnMgZHUgcGFyY291cnMgZGVzIHLDqXZpc2lvbnMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTUKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiTGEgcG9zaXRpb24gcHLDqWPDqWRlbnRlIGRlIEhFQUQgw6l0YWl0IHN1ciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgyMiBidWlsdGluL2NoZWNrb3V0LmM6MTA2MAorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIlZvdXMgw6p0ZXMgc3VyIHVuZSBicmFuY2hlIHF1aSBkb2l0IGVuY29yZSBuYcOudHJlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIgorbXNnc3RyICJ1bmUgc2V1bGUgcsOpZsOpcmVuY2UgYXR0ZW5kdWUsICVkIGZvdXJuaWVzLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDYgYnVpbHRpbi93b3JrdHJlZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInLDqWbDqXJlbmNlIGludmFsaWRlIDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAibGEgcsOpZsOpcmVuY2Ugbidlc3QgcGFzIHVuIGFyYnJlIDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDc0Cittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgImltcG9zc2libGUgZCd1dGlsaXNlciBkZXMgY2hlbWlucyBhdmVjIHVuIGJhc2N1bGVtZW50IGRlIGJyYW5jaGVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3NyBidWlsdGluL2NoZWNrb3V0LmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICInJXMnIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIGF2ZWMgdW4gYmFzY3VsZW1lbnQgZGUgYnJhbmNoZXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDg1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDg4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDkzCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA5NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAiJyVzJyBuZSBwZXV0IHBhcyDDqnRyZSB1dGlsaXPDqSBhdmVjICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGJhc2N1bGVyIGRlIGJyYW5jaGUgdmVycyAnJXMnIHF1aSBuJ2VzdCBwYXMgdW4gY29tbWl0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzNCBidWlsdGluL2NoZWNrb3V0LmM6MTEzNiBidWlsdGluL2Nsb25lLmM6ODMKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU5IGJ1aWx0aW4vcmVtb3RlLmM6MTYxIGJ1aWx0aW4vd29ya3RyZWUuYzozMTcKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMTkKK21zZ2lkICJicmFuY2giCittc2dzdHIgImJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM1Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgImNyw6llciBldCBleHRyYWlyZSB1bmUgbm91dmVsbGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzcKK21zZ2lkICJjcmVhdGUvcmVzZXQgYW5kIGNoZWNrb3V0IGEgYnJhbmNoIgorbXNnc3RyICJjcsOpZXIvcsOpaW5pdGlhbGlzZXIgZXQgZXh0cmFpcmUgdW5lIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM4Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAiY3LDqWVyIHVuIHJlZmxvZyBwb3VyIHVuZSBub3V2ZWxsZSBicmFuY2hlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzOQorbXNnaWQgImRldGFjaCB0aGUgSEVBRCBhdCBuYW1lZCBjb21taXQiCittc2dzdHIgImTDqXRhY2hlciBsYSBIRUFEIMOgIGxhIHZhbGlkYXRpb24gbm9tbcOpZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDAKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAicGFyYW3DqXRyZXIgbGVzIGNvb3Jkb25uw6llcyBkZSBicmFuY2hlIGFtb250IHBvdXIgdW5lIG5vdXZlbGxlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQyCittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAibm91dmVsbGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDIKK21zZ2lkICJuZXcgdW5wYXJlbnRlZCBicmFuY2giCittc2dzdHIgIm5vdXZlbGxlIGJyYW5jaGUgc2FucyBwYXJlbnQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQzCittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICJleHRyYWlyZSBub3RyZSB2ZXJzaW9uIHBvdXIgbGVzIGZpY2hpZXJzIG5vbiBmdXNpb25uw6lzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0NQorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICJleHRyYWlyZSBsZXVyIHZlcnNpb24gcG91ciBsZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ3Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgImZvcmNlciBsJ2V4dHJhY3Rpb24gKGxhaXNzZXIgdG9tYmVyIGxlcyBtb2RpZmljYXRpb25zIGxvY2FsZXMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0OAorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICJlZmZlY3R1ZXIgdW5lIGZ1c2lvbiDDoCAzIHBvaW50cyBhdmVjIGxhIG5vdXZlbGxlIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ5IGJ1aWx0aW4vbWVyZ2UuYzoyMjcKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgIm1ldHRyZSDDoCBqb3VyIGxlcyBmaWNoaWVycyBpZ25vcsOpcyAocGFyIGTDqWZhdXQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1MCBidWlsdGluL2xvZy5jOjEyNjQgcGFyc2Utb3B0aW9ucy5oOjI0OQorbXNnaWQgInN0eWxlIgorbXNnc3RyICJzdHlsZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTEKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICJzdHlsZSBkZSBjb25mbGl0IChmdXNpb24gb3UgZGlmZjMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1NAorbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAibmUgcGFzIGxpbWl0ZXIgbGVzIHNww6ljaWZpY2F0ZXVycyBkZSBjaGVtaW5zIGF1eCBzZXVscyDDqWzDqW1lbnRzIGNyZXV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1NgorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICJyw6llc3NheWVyIGQnaW50ZXJwcsOpdGVyICdnaXQgY2hlY2tvdXQgPGJyYW5jaGUtaW5leGlzdGFudGU+JyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTgKK21zZ2lkICJkbyBub3QgY2hlY2sgaWYgYW5vdGhlciB3b3JrdHJlZSBpcyBob2xkaW5nIHRoZSBnaXZlbiByZWYiCittc2dzdHIgIiIKKyJuZSBwYXMgdsOpcmlmaWVyIHNpIHVuZSBhdXRyZSBjb3BpZSBkZSB0cmF2YWlsIGNvbnRpZW50IGxlIHLDqWbDqXJlbmNlIGZvdXJuaWUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTgxCittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIgZXQgLS1vcnBoYW4gc29udCBtdXR1ZWxsZW1lbnQgZXhjbHVzaWZzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE5OAorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayByZXF1aWVydCB1biBub20gZGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMDMKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIk5vbSBkZSBicmFuY2hlIG1hbnF1YW50IDsgZXNzYXlleiAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMzkKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAic3DDqWNpZmljYXRpb24gZGUgY2hlbWluIGludmFsaWRlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuXG4iCisiRGlkIHlvdSBpbnRlbmQgdG8gY2hlY2tvdXQgJyVzJyB3aGljaCBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGNvbW1pdD8iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyIGxlcyBjaGVtaW5zIGV0IGRlIGJhc2N1bGVyIHN1ciBsYSBicmFuY2hlICclcycgIgorImVuIG3Dqm1lIHRlbXBzLlxuIgorIlNvdWhhaXRpZXotdm91cyBleHRyYWlyZSAnJXMnIHF1aSBuZSBwZXV0IMOqdHJlIHLDqXNvbHUgY29tbWUgY29tbWl0ID8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBuJ2FjY2VwdGUgcGFzIHVuIGFyZ3VtZW50IGRlIGNoZW1pbiAnJXMnIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI1NQorbXNnaWQgIiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGV0IC0tbWVyZ2Ugc29udCBpbmNvbXBhdGlibGVzIGxvcnNcbiIKKyJkZSBsJ2V4dHJhY3Rpb24gZGUgbCdpbmRleC4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyNQorbXNnaWQgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgIiIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8bW90aWY+XSBbLXggfCAtWF0gWy0tXSA8Y2hlbWlucz4uLi4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlc1xuIgorbXNnc3RyICJTdXBwcmVzc2lvbiBkZSAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIlN1cHByaW1lcmFpdCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJJZ25vcmUgbGUgZMOpcMO0dCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIklnbm9yZXJhaXQgbGUgZMOpcMO0dCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIHN1cHByZXNzaW9uIGRlICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzE3Cittc2dpZCAiIgorIlByb21wdCBoZWxwOlxuIgorIjEgICAgICAgICAgLSBzZWxlY3QgYSBudW1iZXJlZCBpdGVtXG4iCisiZm9vICAgICAgICAtIHNlbGVjdCBpdGVtIGJhc2VkIG9uIHVuaXF1ZSBwcmVmaXhcbiIKKyIgICAgICAgICAgIC0gKGVtcHR5KSBzZWxlY3Qgbm90aGluZyIKK21zZ3N0ciAiIgorIkFpZGUgZW4gbGlnbmUgOlxuIgorIjEgICAgICAgICAgIC0gc8OpbGVjdGlvbm5lciB1biDDqWzDqW1lbnQgbnVtw6lyb3TDqVxuIgorImZvbyAgICAgICAgIC0gc8OpbGVjdGlvbm5lciB1biDDqWzDqW1lbnQgcGFyIHVuIHByw6lmaXhlIHVuaXF1ZVxuIgorIiAgICAgICAgICAgIC0gKHZpZGUpIG5lIHJpZW4gc8OpbGVjdGlvbm5lciIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyMQorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZyIKK21zZ3N0ciAiIgorIkFpZGUgZW4gbGlnbmUgOlxuIgorIjEgICAgICAgICAgLSBzw6lsZWN0aW9ubmVyIHVuIHNldWwgw6lsw6ltZW50XG4iCisiMy01ICAgICAgICAtIHPDqWxlY3Rpb25uZXIgdW5lIHBsYWdlIGQnw6lsw6ltZW50c1xuIgorIjItMyw2LTkgICAgLSBzw6lsZWN0aW9ubmVyIHBsdXNpZXVycyBwbGFnZXNcbiIKKyJmb28gICAgICAgIC0gc8OpbGVjdGlvbm5lciB1biDDqWzDqW1lbnQgcGFyIHVuIHByw6lmaXhlIHVuaXF1ZVxuIgorIi0uLi4gICAgICAgLSBkw6lzw6lsZWN0aW9ubmVyIGxlcyDDqWzDqW1lbnRzIHNww6ljaWZpw6lzXG4iCisiKiAgICAgICAgICAtIGNob2lzaXIgdG91cyBsZXMgw6lsw6ltZW50c1xuIgorIiAgICAgICAgICAgLSAodmlkZSkgdGVybWluZXIgbGEgc8OpbGVjdGlvbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT8iCittc2dzdHIgIkhlaW4gKCVzKSA/IgorCisjOiBidWlsdGluL2NsZWFuLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAiRW50cmV6IGxlcyBtb3RpZnMgw6AgaWdub3Jlcj4+ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAiQVRURU5USU9OIDogSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlcyDDqWzDqW1lbnRzIGNvcnJlc3BvbmRhbnQgw6AgOiAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjczNworbXNnaWQgIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiCittc2dzdHIgIlPDqWxlY3Rpb25uZXIgbGVzIMOpbMOpbWVudHMgw6Agc3VwcHJpbWVyIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGtlZXAgW3kvTl0gYXMgaXMKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZlICVzIFt5L05dPyAiCittc2dzdHIgIlN1cHByaW1lciAlcyBbeS9OXSA/ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgwMworbXNnaWQgIkJ5ZS4iCittc2dzdHIgIkF1IHJldm9pci4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MTEKK21zZ2lkICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBkw6ltYXJyZXIgbGUgbmV0dG95YWdlXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1cmUgZGVzIMOpbMOpbWVudHMgcGFyIG1vdGlmXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHPDqWxlY3Rpb25uZXIgbGVzIMOpbMOpbWVudHMgw6Agc3VwcHJpbWVyIHBhciBudW3DqXJvc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtZXIgY2hhcXVlIHN1cHByZXNzaW9uIChjb21tZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIGFycsOqdGVyIGxlIG5ldHRveWFnZVxuIgorImhlbHAgICAgICAgICAgICAgICAgLSBjZXQgw6ljcmFuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGFpZGUgcG91ciBsYSBzw6lsZWN0aW9uIGVuIGxpZ25lIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODM4Cittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAiKioqIENvbW1hbmRlcyAqKioiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MzkKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAiRXQgbWFpbnRlbmFudCA/IgorCisjOiBidWlsdGluL2NsZWFuLmM6ODQ3Cittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAiU3VwcHJpbWVyYWl0IGwnw6lsw6ltZW50IHN1aXZhbnQgOiIKK21zZ3N0clsxXSAiU3VwcHJpbWVyYWl0IGxlcyDDqWzDqW1lbnRzIHN1aXZhbnRzIDoiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NjQKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiUGx1cyBkZSBmaWNoaWVyIMOgIG5ldHRveWVyLCBzb3J0aWUuIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODk1Cittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciBsZXMgbm9tcyBkZXMgZmljaGllcnMgc3VwcHJpbcOpcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg5NworbXNnaWQgImZvcmNlIgorbXNnc3RyICJmb3JjZXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4OTgKK21zZ2lkICJpbnRlcmFjdGl2ZSBjbGVhbmluZyIKK21zZ3N0ciAibmV0dG95YWdlIGludGVyYWN0aWYiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDAKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgInN1cHByaW1lciBsZXMgcsOpcGVydG9pcmVzIGVudGllcnMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDEgYnVpbHRpbi9kZXNjcmliZS5jOjQwNyBidWlsdGluL2dyZXAuYzo3MTQKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDMgYnVpbHRpbi9uYW1lLXJldi5jOjMxMSBidWlsdGluL3Nob3ctcmVmLmM6MTg3Cittc2dpZCAicGF0dGVybiIKK21zZ3N0ciAibW90aWYiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDIKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAiYWpvdXRlciA8bW90aWY+IGF1eCByw6hnbGVzIGlnbm9yZSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwMworbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgInN1cHByaW1lciBsZXMgZmljaGllcnMgaWdub3LDqXMsIGF1c3NpIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA1Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAic3VwcHJpbWVyIHNldWxlbWVudCBsZXMgZmljaGllcnMgaWdub3LDqXMiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MjMKK21zZ2lkICIteCBhbmQgLVggY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi14IGV0IC1YIG5lIHBldXZlbnQgcGFzIMOqdHJlIHV0aWxpc8OpcyBlbnNlbWJsZSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkyNworbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBwb3NpdGlvbm7DqSDDoCB0cnVlIGV0IG5pIC1pLCAtbiBvdSAtZiBmb3VybmkgOyByZWZ1cyBkZSAiCisibmV0dG95ZXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzAKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSDDoCB0cnVlIHBhciBkw6lmYXV0IGV0IG5pIC1pLCAtbiBvdSAtZiBmb3VybmkgOyByZWZ1cyBkZSAiCisibmV0dG95ZXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNworbXNnaWQgImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorbXNnc3RyICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8ZMOpcMO0dD4gWzxyw6lwZXJ0b2lyZT5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTcgYnVpbHRpbi9mZXRjaC5jOjExMiBidWlsdGluL21lcmdlLmM6MjI0CisjOiBidWlsdGluL3B1bGwuYzoxMDkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY4Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICJmb3JjZXIgbCdhZmZpY2hhZ2UgZGUgbCfDqXRhdCBkJ2F2YW5jZW1lbnQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1OQorbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICJuZSBwYXMgY3LDqWVyIGQnZXh0cmFjdGlvbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjYwIGJ1aWx0aW4vY2xvbmUuYzo2MiBidWlsdGluL2luaXQtZGIuYzo1MDQKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgImNyw6llciB1biBkw6lww7R0IG51IgorCisjOiBidWlsdGluL2Nsb25lLmM6NjQKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAiY3LDqWVyIHVuIGTDqXDDtHQgbWlyb2lyIChpbXBsaXF1ZSBkw6lww7R0IG51KSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY2Cittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgInBvdXIgY2xvbmVyIGRlcHVpcyB1biBkw6lww7R0IGxvY2FsIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjgKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAibmUgcGFzIHV0aWxpc2VyIGRlIGxpZW5zIGR1cnMgbG9jYXV4LCB0b3Vqb3VycyBjb3BpZXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICJyw6lnbGVyIGNvbW1lIGTDqXDDtHQgcGFydGFnw6kiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MiBidWlsdGluL2Nsb25lLmM6NzQKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICJpbml0aWFsaXNlciBsZXMgc291cy1tb2R1bGVzIGRhbnMgbGUgY2xvbmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NSBidWlsdGluL2luaXQtZGIuYzo1MDEKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgInLDqXBlcnRvaXJlLW1vZMOobGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NiBidWlsdGluL2luaXQtZGIuYzo1MDIKK21zZ2lkICJkaXJlY3RvcnkgZnJvbSB3aGljaCB0ZW1wbGF0ZXMgd2lsbCBiZSB1c2VkIgorbXNnc3RyICJyw6lwZXJ0b2lyZSBkZXB1aXMgbGVxdWVsIGxlcyBtb2TDqGxlcyB2b250IMOqdHJlIHV0aWxpc8OpcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc4Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgImTDqXDDtHQgZGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MAorbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgInV0aWxpc2VyIHNldWxlbWVudCAtLXJlZmVyZW5jZSBwb3VyIGNsb25lciIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgxIGJ1aWx0aW4vY29sdW1uLmM6MjYgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJuYW1lIgorbXNnc3RyICJub20iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MgorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAidXRpbGlzZXIgPG5vbT4gYXUgbGlldSBkZSAnb3JpZ2luJyBwb3VyIHN1aXZyZSBsYSBicmFuY2hlIGFtb250IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODQKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBpbnN0ZWFkIG9mIHRoZSByZW1vdGUncyBIRUFEIgorbXNnc3RyICJleHRyYWlyZSA8YnJhbmNoZT4gYXUgbGlldSBkZSBsYSBIRUFEIGR1IHLDqXBlcnRvaXJlIGRpc3RhbnQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NgorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgImNoZW1pbiB2ZXJzIGdpdC11cGxvYWQtcGFjayBzdXIgbGUgc2VydmV1ciBkaXN0YW50IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODcgYnVpbHRpbi9mZXRjaC5jOjExMyBidWlsdGluL2dyZXAuYzo2NTkgYnVpbHRpbi9wdWxsLmM6MTg2Cittc2dpZCAiZGVwdGgiCittc2dzdHIgInByb2ZvbmRldXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4OAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAiY3LDqWVyIHVuIGNsb25lIHN1cGVyZmljaWVsIGRlIGNldHRlIHByb2ZvbmRldXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MAorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAiY2xvbmVyIHNldWxlbWVudCB1bmUgYnJhbmNoZSwgSEVBRCBvdSAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxIGJ1aWx0aW4vaW5pdC1kYi5jOjUxMAorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZ2l0ZGlyIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTIgYnVpbHRpbi9pbml0LWRiLmM6NTExCittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAic8OpcGFyZXIgbGUgcsOpcGVydG9pcmUgZ2l0IGRlIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MworbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAiY2zDqT12YWxldXIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAicsOpZ2xlciBsYSBjb25maWd1cmF0aW9uIGRhbnMgbGUgbm91dmVhdSBkw6lww7R0IgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgImxlIGTDqXDDtHQgZGUgcsOpZsOpcmVuY2UgJyVzJyBuJ2VzdCBwYXMgdW4gZMOpcMO0dCBsb2NhbC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICJsZSBkw6lww7R0IGRlIHLDqWbDqXJlbmNlICclcycgZXN0IHN1cGVyZmljaWVsIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAibGUgZMOpcMO0dCBkZSByw6lmw6lyZW5jZSAnJXMnIGVzdCBncmVmZsOpIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzcwIGJ1aWx0aW4vZGlmZi5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclcyciCittc2dzdHIgIsOpY2hlYyBkdSBzdGF0IGRlICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIGV4aXN0ZSBldCBuJ2VzdCBwYXMgdW4gcsOpcGVydG9pcmUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAiw6ljaGVjIGR1IHN0YXQgZGUgJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGNyw6lhdGlvbiBkdSBsaWVuICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgY29waWUgdmVycyAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDM1IGJ1aWx0aW4vY2xvbmUuYzo2MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiZmFpdC5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0NworbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHRoZSBjaGVja291dCB3aXRoICdnaXQgY2hlY2tvdXQgLWYgSEVBRCdcbiIKK21zZ3N0ciAiIgorIkxlIGNsb25lIGEgcsOpdXNzaSwgbWFpcyBsJ2V4dHJhY3Rpb24gYSDDqWNob3XDqS5cbiIKKyJWb3VzIHBvdXZleiBpbnNwZWN0ZXIgY2UgcXVpIGEgw6l0w6kgZXh0cmFpdCBhdmVjICdnaXQgc3RhdHVzJ1xuIgorImV0IHLDqWVzc2F5ZXIgbCdleHRyYWN0aW9uIGF2ZWMgJ2dpdCBjaGVja291dCAtZiBIRUFEJ1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGEgYnJhbmNoZSBkaXN0YW50ZSAnJXMnIMOgIGNsb25lci4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uICIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkZSBsYSBjb25uZWN0aXZpdMOpLi4uICIKKworIzogYnVpbHRpbi9jbG9uZS5jOjYxNworbXNnaWQgInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIgorbXNnc3RyICJsZSBzZXJ2ZXVyIGRpc3RhbnQgbidhIHBhcyBlbnZvecOpIHRvdXMgbGVzIG9iamV0cyBuw6ljZXNzYWlyZXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2ODEKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKyJsYSBIRUFEIGRpc3RhbnRlIHLDqWbDqHJlIMOgIHVuZSByw6lmw6lyZW5jZSBub24gZXhpc3RhbnRlLCBpbXBvc3NpYmxlIGRlICIKKyJsJ2V4dHJhaXJlLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzEyCittc2dpZCAidW5hYmxlIHRvIGNoZWNrb3V0IHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2V4dHJhaXJlIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3OTkKK21zZ2lkICJjYW5ub3QgcmVwYWNrIHRvIGNsZWFuIHVwIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlbWJhbGxlciBwb3VyIG5ldHRveWVyIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODAxCittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHVubGlua2VyIGxlIGZpY2hpZXIgdGVtcG9yYWlyZSBhbHRlcm5hdGVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODMxCittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiVHJvcCBkJ2FyZ3VtZW50cy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MzUKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIlZvdXMgZGV2ZXogc3DDqWNpZmllciB1biBkw6lww7R0IMOgIGNsb25lci4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICJsZXMgb3B0aW9ucyAtLWJhcmUgZXQgLS1vcmlnaW4gJXMgc29udCBpbmNvbXBhdGlibGVzLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0OQorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICItLWJhcmUgZXQgLS1zZXBhcmF0ZS1naXQtZGlyIHNvbnQgaW5jb21wYXRpYmxlcy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJsZSBkw6lww7R0ICclcycgbidleGlzdGUgcGFzIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODY4IGJ1aWx0aW4vZmV0Y2guYzoxMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAibGEgcHJvZm9uZGV1ciAlcyBuJ2VzdCBwYXMgdW4gZW50aWVyIHBvc2l0aWYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorImxlIGNoZW1pbiBkZSBkZXN0aW5hdGlvbiAnJXMnIGV4aXN0ZSBkw6lqw6AgZXQgbidlc3QgcGFzIHVuIHLDqXBlcnRvaXJlIHZpZGUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAibGEgY29waWUgZGUgdHJhdmFpbCAnJXMnIGV4aXN0ZSBkw6lqw6AuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTAzIGJ1aWx0aW4vY2xvbmUuYzo5MTQgYnVpbHRpbi93b3JrdHJlZS5jOjIxOAorIzogYnVpbHRpbi93b3JrdHJlZS5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbGVzIHLDqXBlcnRvaXJlcyBkZSBwcmVtaWVyIG5pdmVhdSBkYW5zICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIHLDqXBlcnRvaXJlIGRlIGxhIGNvcGllIGRlIHRyYXZhaWwgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAiQ2xvbmFnZSBkYW5zIGxlIGTDqXDDtHQgbnUgJyVzJ1xuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgIkNsb25hZ2UgZGFucyAnJXMnLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NTEKK21zZ2lkICItLWRpc3NvY2lhdGUgZ2l2ZW4sIGJ1dCB0aGVyZSBpcyBubyAtLXJlZmVyZW5jZSIKK21zZ3N0ciAiLS1kaXNzb2NpYXRlIGVzdCBzcMOpY2lmacOpLCBtYWlzIC0tcmVmZXJlbmNlIGVzdCBhYnNlbnQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjgKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIi0tZGVwdGggZXN0IGlnbm9yw6kgZGFucyBsZXMgY2xvbmVzIGxvY2F1eCA6IHV0aWxpc2V6IHBsdXTDtHQgXCJmaWxlOi8vXCIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTcxCittc2dpZCAic291cmNlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdywgaWdub3JpbmcgLS1sb2NhbCIKK21zZ3N0ciAibGUgZMOpcMO0dCBzb3VyY2UgZXN0IHN1cGVyZmljaWVsLCBvcHRpb24gLS1sb2NhbCBpZ25vcsOpZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3NgorbXNnaWQgIi0tbG9jYWwgaXMgaWdub3JlZCIKK21zZ3N0ciAiLS1sb2NhbCBlc3QgaWdub3LDqSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBjbG9uZSAlcyIKK21zZ3N0ciAiSmUgbmUgc2FpcyBwYXMgY2xvbmVyICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyOSBidWlsdGluL2Nsb25lLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAiTGEgYnJhbmNoZSBkaXN0YW50ZSAlcyBuJ2EgcGFzIMOpdMOpIHRyb3V2w6llIGRhbnMgbGUgZMOpcMO0dCBhbW9udCAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDAKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJWb3VzIHNlbWJsZXogYXZvaXIgY2xvbsOpIHVuIGTDqXDDtHQgdmlkZS4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6OQorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjYKK21zZ2lkICJsb29rdXAgY29uZmlnIHZhcnMiCittc2dzdHIgInJlY2hlcmNoZXIgbGVzIHZhcmlhYmxlcyBkZSBjb25maWd1cmF0aW9uIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vY29sdW1uLmM6MjgKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICJtaXNlIGVuIHBhZ2Ugw6AgdXRpbGlzZXIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICJMYXJnZXVyIG1heGltYWxlIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAiUmVtcGxpc3NhZ2UgZCdlc3BhY2Ugc3VyIGxhIGJvcmR1cmUgZ2F1Y2hlIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMxCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiByaWdodCBib3JkZXIiCittc2dzdHIgIlJlbXBsaXNzYWdlIGQnZXNwYWNlIHN1ciBsZSBjw7R0w6kgZHJvaXQiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAiUmVtcGxpc3NhZ2UgZCdlc3BhY2UgZW50cmUgbGVzIGNvbG9ubmVzIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICItLWNvbW1hbmQgZG9pdCDDqnRyZSBsZSBwcmVtaWVyIGFyZ3VtZW50IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3Cittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzxvcHRpb25zPl0gWy0tXSA8c3DDqWNpZmljYXRpb24tZGUtY2hlbWluPi4uLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MgorbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHNww6ljaWZpY2F0aW9uLWRlLWNoZW1pbj4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDcKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5LiBSdW4gdGhlXG4iCisiZm9sbG93aW5nIGNvbW1hbmQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgZWRpdG9yIHRvIGVkaXRcbiIKKyJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJWb3RyZSBub20gZXQgdm90cmUgYWRyZXNzZSBlLW1haWwgb250IMOpdMOpIGNvbmZpZ3Vyw6lzIGF1dG9tYXRpcXVlbWVudCBlbiBzZVxuIgorImZvbmRhbnQgc3VyIHZvdHJlIG5vbSBkJ3V0aWxpc2F0ZXVyIGV0IGxlIG5vbSBkZSB2b3RyZSBtYWNoaW5lLiBWZXVpbGxleiBcbiIKKyJ2w6lyaWZpZXIgcXUnaWxzIHNvbnQgY29ycmVjdHMuIFZvdXMgcG91dmV6IHN1cHByaW1lciBjZSBtZXNzYWdlIGVuIGxlcyBcbiIKKyJwYXJhbcOpdHJhbnQgZXhwbGljaXRlbWVudC4gTGFuY2V6IGxlcyBjb21tYW5kZXMgc3VpdmFudGVzIGV0IHN1aXZleiBsZXNcbiIKKyJpbnN0cnVjdGlvbiBkYW5zIHZvdHJlIMOpZGl0ZXVyIHBvdXIgw6lkaXRlciB2b3RyZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb27CoDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBcHLDqHMgY2VjaSwgdm91cyBwb3V2ZXogY29ycmlnZXIgbCdpZGVudGl0w6kgdXRpbGlzw6llIHBvdXIgY2V0dGUgdmFsaWRhdGlvbiAiCisiYXZlYyA6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwCittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiVm90cmUgbm9tIGV0IHZvdHJlIGFkcmVzc2UgZS1tYWlsIG9udCDDqXTDqSBjb25maWd1csOpcyBhdXRvbWF0aXF1ZW1lbnQgZW4gc2UgIgorImZvbmRhbnRcbiIKKyJzdXIgdm90cmUgbm9tIGQndXRpbGlzYXRldXIgZXQgbGUgbm9tIGRlIHZvdHJlIG1hY2hpbmUuIFZldWlsbGV6IHbDqXJpZmllciAiCisicXUnaWxzIHNvbnQgY29ycmVjdHMuXG4iCisiVm91cyBwb3V2ZXogc3VwcHJpbWVyIGNlIG1lc3NhZ2UgZW4gbGVzIHBhcmFtw6l0cmFudCBleHBsaWNpdGVtZW50IDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJWb3RyZSBOb21cIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgdm91c0BleGVtcGxlLmNvbVxuIgorIlxuIgorIkFwcsOocyBjZWNpLCB2b3VzIHBvdXZleiBjb3JyaWdlciBsJ2lkZW50aXTDqSB1dGlsaXPDqWUgcG91ciBjZSBjb21taXQgYXZlYyA6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyCittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisiVm91cyBhdmV6IGRlbWFuZMOpIGRlIGNvcnJpZ2VyIGxlIGNvbW1pdCBsZSBwbHVzIHLDqWNlbnQsIG1haXMgbGUgZmFpcmUgbGUgIgorInJlbmRyYWl0XG4iCisidmlkZS4gVm91cyBwb3V2ZXogcsOpcMOpdGVyIHZvdHJlIGNvbW1hbmRlIGF2ZWMgLS1hbGxvdy1lbXB0eSwgb3Ugdm91cyBwb3V2ZXpcbiIKKyJzdXBwcmltZXIgY29tcGzDqHRlbWVudCBsZSBjb21taXQgYXZlYyBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3Cittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCittc2dzdHIgIiIKKyJMZSBwaWNvcmFnZSBwcsOpY8OpZGVudCBlc3Qgw6AgcHLDqXNlbnQgdmlkZSwgdnJhaXNlbWJsYWJsZW1lbnQgZMO7IMOgIHVuZSAiCisicsOpc29sdXRpb24gZGUgY29uZmxpdC5cbiIKKyJTaSB2b3VzIHNvdWhhaXRleiB0b3V0IGRlIG3Dqm1lIGxlIHZhbGlkZXIsIHV0aWxpc2V6IDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAiU2lub24sIHZldWlsbGV6IHV0aWxpc2VyICdnaXQgcmVzZXQnXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODcKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgcmVzZXRcbiIKKyJcbiIKKyJUaGVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB3aWxsIHJlc3VtZSBjaGVycnktcGlja2luZ1xuIgorInRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKK21zZ3N0ciAiIgorIlNpIHZvdXMgc291aGFpdGV6IHNhdXRlciBjZSBjb21taXQsIHV0aWxpc2V6IDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlc2V0XG4iCisiXG4iCisiUHVpcyBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgY29udGludWVyYSBsZSBwaWNvcmFnZSBcbiIKKyJkZXMgY29tbWl0cyByZXN0YW50cy5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMDQKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgIsOpY2hlYyBkdSBkw6lwYXF1ZXRhZ2UgZGUgbCdvYmpldCBhcmJyZSBIRUFEIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM0NQorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsJ2luZGV4IHRlbXBvcmFpcmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzUxCittc2dpZCAiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnYWpvdXQgaW50ZXJhY3RpZiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciBsJ2luZGV4IHRlbXBvcmFpcmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY2Cittc2dpZCAiRmFpbGVkIHRvIHVwZGF0ZSBtYWluIGNhY2hlIHRyZWUiCittc2dzdHIgIkltcG9zc2libGUgZGUgbWV0dHJlIMOgIGpvdXIgbCdhcmJyZSBkZSBjYWNoZSBwcmluY2lwYWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzkwIGJ1aWx0aW4vY29tbWl0LmM6NDEzIGJ1aWx0aW4vY29tbWl0LmM6NDYyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBmaWNoaWVyIG5ld19pbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NDQKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgImltcG9zc2libGUgZGUgZmFpcmUgdW5lIHZhbGlkYXRpb24gcGFydGllbGxlIHBlbmRhbnQgdW5lIGZ1c2lvbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ2Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGZhaXJlIHVuZSB2YWxpZGF0aW9uIHBhcnRpZWxsZSBwZW5kYW50IHVuIHBpY29yYWdlLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NTUKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsJ2luZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3NAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgZmljaGllciBkJ2luZGV4IHRlbXBvcmFpcmUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiCittc2dzdHIgImVudMOqdGUgZCdhdXRldXIgbWFucXVhbnQgZGFucyBsZSBjb21taXQgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAibGUgY29tbWl0ICclcycgYSB1bmUgbGlnbmUgZCdhdXRldXIgbWFsZm9ybcOpZSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDAKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICJwYXJhbcOodHJlIC0tYXV0aG9yIG1hbCBmb3Jtw6kiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICJmb3JtYXQgZGUgZGF0ZSBpbnZhbGlkZSA6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY1MgorbXNnaWQgIiIKKyJ1bmFibGUgdG8gc2VsZWN0IGEgY29tbWVudCBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgdXNlZFxuIgorImluIHRoZSBjdXJyZW50IGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSBzw6lsZWN0aW9ubmVyIHVuIGNhcmFjdMOocmUgZGUgY29tbWVudGFpcmVcbiIKKyJxdWkgbidlc3QgcGFzIHV0aWxpc8OpIGRhbnMgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIGFjdHVlbCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2ODkgYnVpbHRpbi9jb21taXQuYzo3MjIgYnVpbHRpbi9jb21taXQuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlY2hlcmNoZXIgbGUgY29tbWl0ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwMSBidWlsdGluL3Nob3J0bG9nLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIihsZWN0dXJlIGR1IG1lc3NhZ2UgZGUgam91cm5hbCBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkKVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwMworbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgam91cm5hbCBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGUgZmljaGllciBkZSBqb3VybmFsICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzI5Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMworbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc4NAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIG1vZMOobGUgZGUgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJJbCBzZW1ibGUgcXVlIHZvdXMgdmFsaWRpZXogdW5lIGZ1c2lvbi5cbiIKKyJTaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLCB2ZXVpbGxleiBzdXBwcmltZXIgbGUgZmljaGllclxuIgorIlx0JXNcbiIKKyJldCBlc3NheWV6IMOgIG5vdXZlYXUuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIklsIHNlbWJsZSBxdWUgdm91cyB2YWxpZGlleiB1biBwaWNvcmFnZS5cbiIKKyJTaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLCB2ZXVpbGxleiBzdXBwcmltZXIgbGUgZmljaGllclxuIgorIlx0JXNcbiIKKyJldCBlc3NheWV6IMOgIG5vdXZlYXUuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJWZXVpbGxleiBzYWlzaXIgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIHBvdXIgdm9zIG1vZGlmaWNhdGlvbnMuIExlcyBsaWduZXNcbiIKKyJjb21tZW7Dp2FudCBwYXIgJyVjJyBzZXJvbnQgaWdub3LDqWVzLCBldCB1biBtZXNzYWdlIHZpZGUgYWJhbmRvbm5lIGxhICIKKyJ2YWxpZGF0aW9uLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIlZldWlsbGV6IHNhaXNpciBsZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24gcG91ciB2b3MgbW9kaWZpY2F0aW9ucy4gTGVzIGxpZ25lc1xuIgorImNvbW1lbsOnYW50IHBhciAnJWMnIHNlcm9udCBjb25zZXJ2w6llcyA7IHZvdXMgcG91dmV6IGxlcyBzdXBwcmltZXIgdm91cy1tw6ptZVxuIgorInNpIHZvdXMgbGUgc291aGFpdGV6LiBVbiBtZXNzYWdlIHZpZGUgYWJhbmRvbm5lIGxhIHZhbGlkYXRpb24uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNBdXRldXIgOiAgICAgJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXNEYXRlIDogICAgICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNWYWxpZGF0ZXVyIDogJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODgwCittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIkltcG9zc2libGUgZGUgbGlyZSBsJ2luZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkzNworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICJFcnJldXIgbG9ycyBkZSBsYSBjb25zdHJ1Y3Rpb24gZGVzIGFyYnJlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo5NTIgYnVpbHRpbi90YWcuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICJWZXVpbGxleiBmb3VybmlyIGxlIG1lc3NhZ2UgZW4gdXRpbGlzYW50IGwnb3B0aW9uIC1tIG91IC1GLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1hdXRob3IgJyVzJyBpcyBub3QgJ05hbWUgPGVtYWlsPicgYW5kIG1hdGNoZXMgbm8gZXhpc3RpbmcgYXV0aG9yIgorbXNnc3RyICIiCisiLS1hdXRob3IgJyVzJyBuJ2VzdCBwYXMgZGUgbGEgZm9ybWUgJ05vbSA8ZW1haWw+JyBuaSBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuICIKKyJhdXRldXIgZXhpc3RhbnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2OSBidWlsdGluL2NvbW1pdC5jOjEzMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB1bnRyYWNrZWQgZmlsZXMgbW9kZSAnJXMnIgorbXNnc3RyICJNb2RlIGRlIGZpY2hpZXIgbm9uIHN1aXZpIGludmFsaWRlICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEwNgorbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIGV0IC16IHNvbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTM2Cittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiTCd1dGlsaXNhdGlvbiBzaW11bHRhbsOpZSBkZSAtLXJlc2V0LWF1dGhvciBldCAtLWF1dGhvciBuJ2EgcGFzIGRlIHNlbnMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE0NQorbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICJJbCBuJ3kgYSByaWVuIMOgIGNvcnJpZ2VyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTQ4Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiVm91cyDDqnRlcyBlbiBwbGVpbmUgZnVzaW9uIC0tIGltcG9zc2libGUgZGUgY29ycmlnZXIgKGFtZW5kKS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE1MAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIlZvdXMgw6p0ZXMgZW4gcGxlaW4gcGljb3JhZ2UgLS0gaW1wb3NzaWJsZSBkZSBjb3JyaWdlciAoYW1lbmQpLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTUzCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiTGVzIG9wdGlvbnMgLS1zcXVhc2ggZXQgLS1maXh1cCBuZSBwZXV2ZW50IHBhcyDDqnRyZSB1dGlsaXPDqWVzIGVuc2VtYmxlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjMKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiVW5lIHNldWxlIG9wdGlvbiBwYXJtaSAtYy8tQy8tRi8tLWZpeHVwIHBldXQgw6p0cmUgdXRpbGlzw6llLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY1Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLy0tZml4dXAuIgorbXNnc3RyICJMJ29wdGlvbiAtbSBuZSBwZXV0IHBhcyDDqnRyZSBjb21iaW7DqWUgYXZlYyAtYy8tQy8tRi8tLWZpeHVwLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTczCittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiLS1yZXNldC1hdXRob3IgbmUgcGV1dCDDqnRyZSB1dGlsaXPDqSBxdSdhdmVjIC1DLCAtYyBvdSAtLWFtZW5kLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkwCittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisiVW5lIHNldWxlIG9wdGlvbiBwYXJtaSAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBwZXV0ICIKKyLDqnRyZSB1dGlsaXPDqWUuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTIKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIkF1Y3VuIGNoZW1pbiBhdmVjIGxlcyBvcHRpb25zIC0taW5jbHVkZS8tLW9ubHkgbidhIHBhcyBkZSBzZW5zLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk0Cittc2dpZCAiQ2xldmVyLi4uIGFtZW5kaW5nIHRoZSBsYXN0IG9uZSB3aXRoIGRpcnR5IGluZGV4LiIKK21zZ3N0ciAiTWFsaW4uLi4gY29ycmVjdGlvbiBkdSBkZXJuaWVyIGF2ZWMgdW4gaW5kZXggc2FsZS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5NgorbXNnaWQgIkV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG9yIC1vOyBhc3N1bWluZyAtLW9ubHkgcGF0aHMuLi4iCittc2dzdHIgIkNoZW1pbnMgZXhwbGljaXRlcyBzcMOpY2lmacOpcyBzYW5zIC1pIG5pIC1vIDsgLS1vbmx5IHN1cHBvc8OpLi4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDggYnVpbHRpbi90YWcuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIk1vZGUgZGUgbmV0dG95YWdlIGludmFsaWRlICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMTMKK21zZ2lkICJQYXRocyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICJTcMOpY2lmaWVyIGRlcyBjaGVtaW5zIGF2ZWMgbCdvcHRpb24gLWEgbidhIHBhcyBkZSBzZW5zLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzIzIGJ1aWx0aW4vY29tbWl0LmM6MTYwMgorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgc3RhdHV0IGF2ZWMgY29uY2lzaW9uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjUgYnVpbHRpbi9jb21taXQuYzoxNjA0Cittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgImFmZmljaGVyIGwnaW5mb3JtYXRpb24gZGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI3IGJ1aWx0aW4vY29tbWl0LmM6MTYwNiBidWlsdGluL3B1c2guYzo1NDYKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAic29ydGllIHBvdXIgdHJhaXRlbWVudCBhdXRvbWF0aXF1ZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzMwIGJ1aWx0aW4vY29tbWl0LmM6MTYwOAorbXNnaWQgInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgc3RhdHV0IGVuIGZvcm1hdCBsb25nIChwYXIgZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzMyBidWlsdGluL2NvbW1pdC5jOjE2MTEKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAidGVybWluZXIgbGVzIMOpbMOpbWVudHMgcGFyIE5VTCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM1IGJ1aWx0aW4vY29tbWl0LmM6MTYxNCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgxCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg0IGJ1aWx0aW4vdGFnLmM6NjA0Cittc2dpZCAibW9kZSIKK21zZ3N0ciAibW9kZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM2IGJ1aWx0aW4vY29tbWl0LmM6MTYxNAorbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxlcyBmaWNoaWVycyBub24gc3VpdmlzLCBcIm1vZGVcIiBmYWN1bHRhdGlmIDogYWxsICh0b3VzKSwgbm9ybWFsLCAiCisibm8uIChEw6lmYXV0IDogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM5Cittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgZmljaGllcnMgaWdub3LDqXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MCBwYXJzZS1vcHRpb25zLmg6MTU1Cittc2dpZCAid2hlbiIKK21zZ3N0ciAicXVhbmQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MQorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImlnbm9yZXIgbGVzIG1vZGlmaWNhdGlvbnMgZGFucyBsZXMgc291cy1tb2R1bGVzLCBcInF1YW5kXCIgZmFjdWx0YXRpZiA6IGFsbCAiCisiKHRvdXMpLCBkaXJ0eSAoc2FsZSksIHVudHJhY2tlZCAobm9uIHN1aXZpKS4gKETDqWZhdXQgOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDMKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJhZmZpY2hlciBsZXMgZmljaGllcnMgbm9uIHN1aXZpcyBlbiBjb2xvbm5lcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDI5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByZXRyb3V2ZXIgbGUgY29tbWl0IG5vdXZlbGxlbWVudCBjcsOpw6kiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQzMQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxlIGNvbW1pdCBub3V2ZWxsZW1lbnQgY3LDqcOpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzYKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJIRUFEIGTDqXRhY2jDqWUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3OQorbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKGNvbW1pdCByYWNpbmUpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzIKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICJzdXBwcmltZXIgbGUgcsOpc3Vtw6kgYXByw6hzIHVuZSB2YWxpZGF0aW9uIHLDqXVzc2llIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzMKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImFmZmljaGVyIGxlcyBkaWZmIGRhbnMgbGUgbW9kw6hsZSBkZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NQorbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIk9wdGlvbnMgZHUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzYgYnVpbHRpbi90YWcuYzo2MDIKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICJsaXJlIGxlIG1lc3NhZ2UgZGVwdWlzIHVuIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NworbXNnaWQgImF1dGhvciIKK21zZ3N0ciAiYXV0ZXVyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzcKK21zZ2lkICJvdmVycmlkZSBhdXRob3IgZm9yIGNvbW1pdCIKK21zZ3N0ciAicmVtcGxhY2VyIGwnYXV0ZXVyIHBvdXIgbGEgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc4IGJ1aWx0aW4vZ2MuYzoyNjgKK21zZ2lkICJkYXRlIgorbXNnc3RyICJkYXRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzgKK21zZ2lkICJvdmVycmlkZSBkYXRlIGZvciBjb21taXQiCittc2dzdHIgInJlbXBsYWNlciBsYSBkYXRlIHBvdXIgbGEgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc5IGJ1aWx0aW4vbWVyZ2UuYzoyMTggYnVpbHRpbi9ub3Rlcy5jOjM5MgorIzogYnVpbHRpbi9ub3Rlcy5jOjU1NSBidWlsdGluL3RhZy5jOjYwMAorbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgIm1lc3NhZ2UiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OQorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJtZXNzYWdlIGRlIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MAorbXNnaWQgInJldXNlIGFuZCBlZGl0IG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJyw6l1dGlsaXNlciBldCDDqWRpdGVyIGxlIG1lc3NhZ2UgZHUgY29tbWl0IHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MQorbXNnaWQgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICJyw6l1dGlsaXNlciBsZSBtZXNzYWdlIGR1IGNvbW1pdCBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODIKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisidXRpbGlzZXIgdW4gbWVzc2FnZSBhdSBmb3JtYXQgYXV0b3NxdWFzaCBwb3VyIGNvcnJpZ2VyIGxlIGNvbW1pdCBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODMKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorInV0aWxpc2VyIHVuIG1lc3NhZ2UgYXUgZm9ybWF0IGF1dG9zcXVhc2ggcG91ciBjb21wcmVzc2VyIGxlIGNvbW1pdCBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODQKK21zZ2lkICJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIgorbXNnc3RyICIiCisiw6AgcHLDqXNlbnQgamUgc3VpcyBsJ2F1dGV1ciBkZSBsYSB2YWxpZGF0aW9uICh1dGlsaXPDqSBhdmVjIC1DLy1jLy0tYW1lbmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODUgYnVpbHRpbi9sb2cuYzoxMjE2IGJ1aWx0aW4vcmV2ZXJ0LmM6ODYKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgImFqb3V0ZXIgdW5lIGVudHLDqWUgU2lnbmVkLW9mZi1ieSA6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODYKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgInV0aWxpc2VyIGxlIGZpY2hpZXIgZGUgbW9kw6hsZSBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODcKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiZm9yY2VyIGwnw6lkaXRpb24gZHUgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODgKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICJkw6lmYXV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODggYnVpbHRpbi90YWcuYzo2MDUKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICJjb21tZW50IMOpbGltaW5lciBsZXMgZXNwYWNlcyBldCBsZXMgY29tbWVudGFpcmVzICMgZHUgbWVzc2FnZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg5Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImluY2x1cmUgbGUgc3RhdHV0IGRhbnMgbGUgbW9kw6hsZSBkZSBtZXNzYWdlIGRlIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5MSBidWlsdGluL21lcmdlLmM6MjI2IGJ1aWx0aW4vcHVsbC5jOjE1NgorIzogYnVpbHRpbi9yZXZlcnQuYzo5MworbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAic2lnbmVyIGxhIHZhbGlkYXRpb24gYXZlYyBHUEciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NAorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICJWYWxpZGVyIGxlcyBvcHRpb25zIGRlcyBjb250ZW51cyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk1Cittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICJ2YWxpZGVyIHRvdXMgbGVzIGZpY2hpZXJzIG1vZGlmacOpcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk2Cittc2dpZCAiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IgorbXNnc3RyICJham91dGVyIGxlcyBmaWNoaWVycyBzcMOpY2lmacOpcyDDoCBsJ2luZGV4IHBvdXIgbGEgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk3Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgImFqb3V0ZXIgZGVzIGZpY2hpZXJzIGVuIG1vZGUgaW50ZXJhY3RpZiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk4Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAiYWpvdXRlciBsZXMgbW9kaWZpY2F0aW9ucyBlbiBtb2RlIGludGVyYWN0aWYiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5OQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAidmFsaWRlciBzZXVsZW1lbnQgbGVzIGZpY2hpZXJzIHNww6ljaWZpw6lzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDAKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBob29rIgorbXNnc3RyICLDqXZpdGVyIGQndXRpbGlzZXIgbGUgY3JvY2hldCBwcmUtY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDEKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICJhZmZpY2hlciBjZSBxdWkgc2VyYWl0IHZhbGlkw6kiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxMgorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiY29ycmlnZXIgbGEgdmFsaWRhdGlvbiBwcsOpY8OpZGVudGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxMworbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAiw6l2aXRlciBkJ3V0aWxpc2VyIGxlIGNyb2NoZXQgcG9zdC1yZXdyaXRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTgKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICJhY2NlcHRlciBkJ2VucmVnaXN0cmVyIHVuZSBtb2RpZmljYXRpb24gdmlkZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjIwCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiYWNjZXB0ZXIgZCdlbnJlZ2lzdHJlciB1bmUgbW9kaWZpY2F0aW9uIGF2ZWMgdW4gbWVzc2FnZSB2aWRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDkKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgImltcG9zc2libGUgZCdhbmFseXNlciBsZSBjb21taXQgSEVBRCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIkZpY2hpZXIgTUVSR0VfSEVBRCBjb3Jyb21wdSAoJXMpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MDIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiA6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICJBYmFuZG9uIGRlIGxhIHZhbGlkYXRpb24gOyB2b3VzIG4nYXZleiBwYXMgw6lkaXTDqSBsZSBtZXNzYWdlXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTczNworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJBYmFuZG9uIGRlIGxhIHZhbGlkYXRpb24gZHUgw6AgdW4gbWVzc2FnZSBkZSB2YWxpZGF0aW9uIHZpZGVcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzg1Cittc2dpZCAiIgorIlJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJMZSBkw6lww7R0IGEgw6l0w6kgbWlzIMOgIGpvdXIsIG1haXMgaW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgZmljaGllclxuIgorIm5ld19pbmRleC4gVsOpcmlmaWV6IHF1ZSBsZSBkaXNxdWUgbidlc3QgcGFzIHBsZWluIG91IHF1ZSBsZSBxdW90YVxuIgorIm4nYSBwYXMgw6l0w6kgZMOpcGFzc8OpLCBwdWlzIGxhbmNleiBcImdpdCByZXNldCBIRUFEXCIgcG91ciByw6lwYXJlci4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6OAorbXNnaWQgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb25maWcgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTQKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiRW1wbGFjZW1lbnQgZHUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU1Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAidXRpbGlzZXIgbGVzIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBnbG9iYWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTYKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICJ1dGlsaXNlciBsZSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gZHUgc3lzdMOobWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTcKK21zZ2lkICJ1c2UgcmVwb3NpdG9yeSBjb25maWcgZmlsZSIKK21zZ3N0ciAidXRpbGlzZXIgbGUgZmljaGllciBkZSBjb25maWd1cmF0aW9uIGR1IGTDqXDDtHQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTgKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgInV0aWxpc2VyIGxlIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBzcMOpY2lmacOpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU5Cittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAiYmxvYi1pZCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OQorbXNnaWQgInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiCittc2dzdHIgImxpcmUgbGEgY29uZmlndXJhdGlvbiBkZXB1aXMgbCdvYmpldCBibG9iIGZvdXJuaSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MAorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAiQWN0aW9uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIm9idGVuaXIgbGEgdmFsZXVyIDogbm9tIFtyZWdleC1kZS12YWxldXJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYyCittc2dpZCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJvYnRlbmlyIHRvdXRlcyBsZXMgdmFsZXVycyA6IGNsw6kgW3JlZ2V4LWRlLXZhbGV1cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjMKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAib2J0ZW5pciBsZXMgdmFsZXVyIHBvdXIgbGEgcmVnZXhwIDogcmVnZXgtZGUtbm9tIFtyZWdleC1kZS12YWxldXJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY0Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAib2J0ZW5pciBsYSB2YWxldXIgc3DDqWNpZmlxdWUgcG91ciBsJ1VSTCA6IHNlY3Rpb25bLnZhcl0gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgIiIKKyJyZW1wbGFjZXIgdG91dGVzIGxlcyB2YXJpYWJsZXMgY29ycmVzcG9uZGFudCA6IG5vbSB2YWxldXIgW3JlZ2V4LWRlLXZhbGV1cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjYKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgImFqb3V0ZXIgdW5lIG5vdXZlbGxlIHZhcmlhYmxlIDogbm9tIHZhbGV1ciIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NworbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgInN1cHByaW1lciB1bmUgdmFyaWFibGUgOiBub20gW3JlZ2V4LWRlLXZhbGV1cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjgKK21zZ2lkICJyZW1vdmUgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAic3VwcHJpbWVyIHRvdXRlcyBsZXMgY29ycmVzcG9uZGFuY2VzIG5vbSBbcmVnZXgtZGUtdmFsZXVyXSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OQorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAicmVub21tZXIgdW5lIHNlY3Rpb24gOiBhbmNpZW4tbm9tIG5vdXZlYXUtbm9tIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcwCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAic3VwcHJpbWVyIHVuZSBzZWN0aW9uIDogbm9tIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgImFmZmljaGVyIHRvdXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzIKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAib3V2cmlyIHVuIMOpZGl0ZXVyIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczCittc2dpZCAiZmluZCB0aGUgY29sb3IgY29uZmlndXJlZDogc2xvdCBbZGVmYXVsdF0iCittc2dzdHIgInRyb3V2ZXIgbGEgY291bGV1ciBjb25maWd1csOpZSA6IHNsb3QgW3BhciBkw6lmYXV0XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NAorbXNnaWQgImZpbmQgdGhlIGNvbG9yIHNldHRpbmc6IHNsb3QgW3N0ZG91dC1pcy10dHldIgorbXNnc3RyICJ0cm91dmVyIGxlIHLDqWdsYWdlIGRlIGxhIGNvdWxldXIgOiBzbG90IFtzdGRvdXQtZXN0LXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzUKK21zZ2lkICJUeXBlIgorbXNnc3RyICJUeXBlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICJsYSB2YWxldXIgZXN0IFwidHJ1ZVwiICh2cmFpKSBvdSBcImZhbHNlXCIgKGZhdXgpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3Cittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgImxhIHZhbGV1ciBlc3QgdW4gbm9tYnJlIGTDqWNpbWFsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4Cittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICJsYSB2YWxldXIgZXN0IC0tYm9vbCBvdSAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgImxhIHZhbGV1ciBlc3QgdW4gY2hlbWluICh2ZXJzIHVuIGZpY2hpZXIgb3UgdW4gcsOpcGVydG9pcmUpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgwCittc2dpZCAiT3RoZXIiCittc2dzdHIgIkF1dHJlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgxCittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJ0ZXJtaW5lciBsZXMgdmFsZXVycyBhdmVjIHVuIGNhcmFjdMOocmUgTlVMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgyCittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICJuJ2FmZmljaGVyIHF1ZSBsZXMgbm9tcyBkZSB2YXJpYWJsZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MworbXNnaWQgInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIKK21zZ3N0ciAicmVzcGVjdGVyIGxlcyBkaXJlY3RpdmVzIGQnaW5jbHVzaW9uIGxvcnMgZGUgbGEgcmVjaGVyY2hlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjMxMQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbGEgdmFsZXVyIGRlIGNvdWxldXIgcGFyIGTDqWZhdXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjIENlY2kgZXN0IGxlIGZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBwZXJzb25uZWwgZGUgR2l0LlxuIgorIlt1c2VyXVxuIgorIiMgVmV1aWxsZXogYWRhcHRlciBldCBkw6ljb21tZW50ZXIgbGVzIGxpZ25lcyBzdWl2YW50ZXPCoDpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJjcsOpYXRpb24gaW1wb3NzaWJsZSBkdSBmaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gJyVzJyIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6NTUKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo2NQorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAiYWZmaWNoZSBsZXMgdGFpbGxlcyBkYW5zIHVuIGZvcm1hdCBodW1haW5lbWVudCBsaXNpYmxlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MTcKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSA8Y29tbWl0IG91IGFwcGFyZW50w6k+KiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjE4Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAibCfDqXRpcXVldHRlIGFubm90w6llICVzIG4nZXN0IHBhcyBkaXNwb25pYmxlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgImwnw6l0aXF1ZXR0ZSBhbm5vdMOpZSAlcyBuJ2EgcGFzIGRlIG5vbSBlbWJhcnF1w6kiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAibCfDqXRpcXVldHRlICclcycgZXN0IGVuIGZhaXQgJyVzJyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI1MCBidWlsdGluL2xvZy5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiJXMgbidlc3QgcGFzIHVuIG5vbSBkJ29iamV0IHZhbGlkZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMgbidlc3QgcGFzIHVuIG9iamV0ICclcycgdmFsaWRlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAiYXVjdW5lIMOpdGlxdWV0dGUgbmUgY29ycmVzcG9uZCBwYXJmYWl0ZW1lbnQgw6AgJyVzJyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJzZWFyY2hpbmcgdG8gZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAicmVjaGVyY2hlIGRlIGxhIGRlc2NyaXB0aW9uIGRlICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgInJlY2hlcmNoZSB0ZXJtaW7DqWUgw6AgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorIkF1Y3VuZSDDqXRpcXVldHRlIGFubm90w6llIG5lIHBldXQgZMOpY3JpcmUgJyVzJy5cbiIKKyJDZXBlbmRhbnQsIGlsIGV4aXN0ZSBkZXMgw6l0aXF1ZXR0ZXMgbm9uLWFubm90w6llcyA6IGVzc2F5ZXogYXZlYyAtLXRhZ3MuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyJBdWN1bmUgw6l0aXF1ZXR0ZSBuZSBwZXV0IGTDqWNyaXJlICclcycuXG4iCisiRXNzYXlleiAtLWFsd2F5cywgb3UgY3LDqWV6IGRlcyDDqXRpcXVldHRlcy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgIiVsdSBjb21taXRzIHBhcmNvdXJ1c1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorInBsdXMgZGUgJWkgw6l0aXF1ZXR0ZXMgb250IMOpdMOpIHRyb3V2w6llczsgc2V1bGVzIGxlcyAlaSBwbHVzIHLDqWNlbnRlcyBzb250ICIKKyJhZmZpY2jDqWVzXG4iCisiYWJhbmRvbiBkZSBsYSByZWNoZXJjaGUgw6AgJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NgorbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgInJlY2hlcmNoZXIgbCfDqXRpcXVldHRlIHF1aSBzdWl0IGxlIGNvbW1pdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NworbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgImTDqWJvZ3VlciBsYSBzdHJhdMOpZ2llIGRlIHJlY2hlcmNoZSBzdXIgc3RkZXJyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk4Cittc2dpZCAidXNlIGFueSByZWYiCittc2dzdHIgInV0aWxpc2VyIG4naW1wb3J0ZSBxdWVsbGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTkKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAidXRpbGlzZXIgbidpbXBvcnRlIHF1ZWxsZSDDqXRpcXVldHRlLCBtw6ptZSBub24tYW5ub3TDqWUiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDAKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICJ0b3Vqb3VycyB1dGlsaXNlciBsZSBmb3JtYXQgbG9uZyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwMQorbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAibmUgc3VpdnJlIHF1ZSBsZSBwcmVtaWVyIHBhcmVudCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNAorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgIm4nYWZmaWNoZXIgcXVlIGxlcyBjb3JyZXNwb25kYW5jZXMgZXhhY3RlcyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNgorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgIiIKKyJjb25zaWTDqXJlciB1bmlxdWVtZW50IGxlcyA8bj4gw6l0aXF1ZXR0ZXMgbGUgcGx1cyByw6ljZW50ZXMgKGTDqWZhdXQgOiAxMCkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDgKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJuZSBjb25zaWTDqXJlciBxdWUgbGVzIMOpdGlxdWV0dGVzIGNvcnJlc3BvbmRhbnQgw6AgPG1vdGlmPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMCBidWlsdGluL25hbWUtcmV2LmM6MzE4Cittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICJhZmZpY2hlciBsZXMgb2JqZXRzIGNvbW1pdHMgYWJyw6lnw6lzIGVuIGRlcm5pZXIgcmVjb3VycyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMQorbXNnaWQgIm1hcmsiCittc2dzdHIgIm1hcnF1ZSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMgorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAiYWpvdXRlciA8bWFycXVlPiBzaSBsYSBjb3BpZSBkZSB0cmF2YWlsIGVzdCBzYWxlIChkw6lmYXV0IDogXCItZGlydHlcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzAKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiLS1sb25nIGV0IC0tYWJicmV2PTAgc29udCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU2Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgImF1Y3VuIG5vbSB0cm91dsOpLCBpbXBvc3NpYmxlIGRlIGTDqWNyaXJlIHF1b2kgcXVlIGNlIHNvaXQuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDc2Cittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tZGlydHkgZXN0IGluY29tcGF0aWJsZSBhdmVjIGxhIHNww6ljaWZpY2F0aW9uIGRlIGNvbW1pdHMgb3UgYXNzaW1pbMOpcyIKKworIzogYnVpbHRpbi9kaWZmLmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIiclcycgOiBuJ2VzdCBwYXMgdW4gZmljaGllciByw6lndWxpZXIgbmkgdW4gbGllbiBzeW1ib2xpcXVlIgorCisjOiBidWlsdGluL2RpZmYuYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcHRpb246ICVzIgorbXNnc3RyICJvcHRpb24gaW52YWxpZGUgOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU4Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIkNlIG4nZXN0IHBhcyB1biBkw6lww7R0IGdpdCAhIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIm9iamV0IHNww6ljaWZpw6kgJyVzJyBpbnZhbGlkZS4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICJwbHVzIGRlIGRldXggYmxvYnMgc3DDqWNpZmnDqXMgOiAnJXMnIgorCisjOiBidWlsdGluL2RpZmYuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAib2JqZXQgbm9uIGfDqXLDqSAnJXMnIHNww6ljaWZpw6kuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjUKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW29wdGlvbnMtZGUtbGlzdGUtZGUtcsOpdmlzaW9uc10iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODAKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICJhZmZpY2hlciBsYSBwcm9ncmVzc2lvbiBhcHLDqHMgPG4+IG9iamV0cyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4MgorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAic8OpbGVjdGlvbm5lciBsYSBnZXN0aW9uIGRlcyDDqXRpcXVldHRlcyBzaWduw6llcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4NQorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgIiIKKyJzw6lsZWN0aW9ubmVyIGxhIGdlc3Rpb24gZGVzIMOpdGlxdWV0dGVzIHF1aSBwb2ludGVudCBzdXIgZGVzIG9iamV0cyBmaWx0csOpcyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4OAorbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICJFbnJlZ2lzdHJlciBsZXMgbWFycXVlcyBkYW5zIGNlIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTAKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgImltcG9ydGVyIGxlcyBtYXJxdWVzIGRlcHVpcyBjZSBmaWNoaWVyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTkyCittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgImZhbHNpZmllciB1biBhdXRldXIgZCfDqXRpcXVldHRlIHNpIGwnw6l0aXF1ZXR0ZSBuJ2VuIHByw6lzZW50ZSBwYXMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTQKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAiQWZmaWNoZXIgbCdhcmJyZSBjb21wbGV0IHBvdXIgY2hhcXVlIGNvbW1pdCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5NgorbXNnaWQgIlVzZSB0aGUgZG9uZSBmZWF0dXJlIHRvIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIgorbXNnc3RyICJVdGlsaXNlciBsYSBmb25jdGlvbiBcImRvbmVcIiBwb3VyIHRlcm1pbmVyIGxlIGZsdXgiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTcKK21zZ2lkICJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiCittc2dzdHIgIlNhdXRlciBsJ2FmZmljaGFnZSBkZSBkb25uw6llcyBkZSBibG9iIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk4Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAic3DDqWNpZmljYXRldXIgZGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTkKK21zZ2lkICJBcHBseSByZWZzcGVjIHRvIGV4cG9ydGVkIHJlZnMiCittc2dzdHIgIkFwcGxpcXVlciBsZSBzcMOpY2lmaWNhdGV1ciBkZSByw6lmw6lyZW5jZSBhdXggcsOpZsOpcmVuY2VzIGV4cG9ydMOpZXMiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDAwCittc2dpZCAiYW5vbnltaXplIG91dHB1dCIKK21zZ3N0ciAiYW5vbnltaXNlIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwCittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxkw6lww7R0PiBbPHNww6ljaWZpY2F0aW9uLWRlLXLDqWbDqXJlbmNlPi4uLl1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjEKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cGU+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MjIKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxvcHRpb25zPl0gWyg8ZMOpcMO0dD4gfCA8Z3JvdXBlPikuLi5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjMKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkwIGJ1aWx0aW4vcHVsbC5jOjE2MgorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgInLDqWN1cMOpcmVyIGRlcHVpcyB0b3VzIGxlIGTDqXDDtHRzIGRpc3RhbnRzIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTIgYnVpbHRpbi9wdWxsLmM6MTY1Cittc2dpZCAiYXBwZW5kIHRvIC5naXQvRkVUQ0hfSEVBRCBpbnN0ZWFkIG9mIG92ZXJ3cml0aW5nIgorbXNnc3RyICJham91dGVyIMOgIC5naXQvRkVUQ0hfSEVBRCBhdSBsaWV1IGRlIGwnw6ljcmFzZXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NCBidWlsdGluL3B1bGwuYzoxNjgKK21zZ2lkICJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiCittc2dzdHIgImNoZW1pbiB2ZXJzIGxlcXVlbCB0w6lsw6ljaGFyZ2VyIGxlIHBhcXVldCBzdXIgbGUgcG9zdGUgZGlzdGFudCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk1IGJ1aWx0aW4vcHVsbC5jOjE3MAorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgImZvcmNlciBsJ8OpY3Jhc2VtZW50IGRlIGxhIGJyYW5jaGUgbG9jYWxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTcKK21zZ2lkICJmZXRjaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMiCittc2dzdHIgInLDqWN1cMOpcmVyIGRlcHVpcyBwbHVzaWV1cnMgZMOpcMO0dHMgZGlzdGFudHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5OSBidWlsdGluL3B1bGwuYzoxNzIKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJyw6ljdXDDqXJlciB0b3V0ZXMgbGVzIMOpdGlxdWV0dGVzIGV0IGxldXJzIG9iamV0cyBhc3NvY2nDqXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDEKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIm5lIHBhcyByw6ljdXDDqXJlciB0b3V0ZXMgbGVzIMOpdGlxdWV0dGVzICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAzIGJ1aWx0aW4vcHVsbC5jOjE3NQorbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICIiCisiw6lsaW1pbmVyIGxlcyBicmFuY2hlcyBkZSBzdWl2aSBkaXN0YW50IHNpIGxhIGJyYW5jaGUgbidleGlzdGUgcGx1cyBkYW5zIGxlICIKKyJkw6lww7R0IGRpc3RhbnQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDQgYnVpbHRpbi9wdWxsLmM6MTc4Cittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICLDoCBsYSBkZW1hbmRlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA1IGJ1aWx0aW4vcHVsbC5jOjE3OQorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgImNvbnRyw7RsZXIgbGEgcsOpY3Vww6lyYXRpb24gcsOpY3Vyc2l2ZSBkYW5zIGxlcyBzb3VzLW1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDkgYnVpbHRpbi9wdWxsLmM6MTg0Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgImNvbnNlcnZlciBsZSBwYXF1ZXQgdMOpbMOpY2hhcmfDqSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMQorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICJwZXJtZXR0cmUgbGEgbWlzZSDDoCBqb3VyIGRlIGxhIHLDqWbDqXJlbmNlIEhFQUQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTQgYnVpbHRpbi9wdWxsLmM6MTg3Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAiYXBwcm9mb25kaXIgbCdoaXN0b3JpcXVlIGQndW4gY2xvbmUgc3VwZXJmaWNpZWwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTYgYnVpbHRpbi9wdWxsLmM6MTkwCittc2dpZCAiY29udmVydCB0byBhIGNvbXBsZXRlIHJlcG9zaXRvcnkiCittc2dzdHIgImNvbnZlcnRpciBlbiB1biBkw6lww7R0IGNvbXBsZXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTggYnVpbHRpbi9sb2cuYzoxMjMzCittc2dpZCAiZGlyIgorbXNnc3RyICJkaXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTkKK21zZ2lkICJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IgorbXNnc3RyICJwcsOpZml4ZXIgY2VjaSDDoCBsYSBzb3J0aWUgZHUgY2hlbWluIGR1IHNvdXMtbW9kdWxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIyCittc2dpZCAiZGVmYXVsdCBtb2RlIGZvciByZWN1cnNpb24iCittc2dzdHIgIm1vZGUgcGFyIGTDqWZhdXQgcG91ciBsYSByw6ljdXJzaW9uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI0IGJ1aWx0aW4vcHVsbC5jOjE5MworbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAiYWNjZXB0ZXIgbGVzIHLDqWbDqXJlbmNlcyBxdWkgbWV0dGVudCDDoCBqb3VyIC5naXQvc2hhbGxvdyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyNSBidWlsdGluL3B1bGwuYzoxOTUKK21zZ2lkICJyZWZtYXAiCittc2dzdHIgImNvcnJlc3BvbmRhbmNlIGRlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI2IGJ1aWx0aW4vcHVsbC5jOjE5NgorbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICJzcMOpY2lmaWVyIHVuZSBjb3JyZXNwb25kYW5jZSBkZSByw6lmw6lyZW5jZSBwb3VyIGxhIHLDqWN1cMOpcmF0aW9uIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mzc4Cittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgImltcG9zc2libGUgZGUgdHJvdXZlciBsYSByw6lmw6lyZW5jZSBIRUFEIGRpc3RhbnRlIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIm9iamV0ICVzIG5vbiB0cm91dsOpIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDYzCittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJbw6Agam91cl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiISAlLSpzICUtKnMgLT4gJXMgIChjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCkiCittc2dzdHIgIiEgJS0qcyAlLSpzIC0+ICVzICAoaW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciBsYSBicmFuY2hlIGFjdHVlbGxlKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ3OCBidWlsdGluL2ZldGNoLmM6NTY0Cittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW3JlamV0w6ldIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDg5Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJbbWlzZSDDoCBqb3VyIGRlIGwnw6l0aXF1ZXR0ZV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0OTEgYnVpbHRpbi9mZXRjaC5jOjUyNiBidWlsdGluL2ZldGNoLmM6NTQ0Cittc2dpZCAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIgorbXNnc3RyICIgIChpbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyIGxhIHLDqWbDqXJlbmNlIGxvY2FsZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MDkKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIltub3V2ZWxsZSDDqXRpcXVldHRlXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxMgorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW25vdXZlbGxlIGJyYW5jaGVdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTE1Cittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJbbm91dmVsbGUgcsOpZsOpcmVuY2VdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTYwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgImltcG9zc2libGUgZGUgbWV0dHJlIMOgIGpvdXIgbGEgcsOpZsOpcmVuY2UgbG9jYWxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTYwCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAibWlzZSDDoCBqb3VyIGZvcmPDqWUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NjYKK21zZ2lkICIobm9uLWZhc3QtZm9yd2FyZCkiCittc2dzdHIgIihwYXMgZCdhdmFuY2UgcmFwaWRlKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwMCBidWlsdGluL2ZldGNoLmM6ODQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyICVzIDogJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIG4nYSBwYXMgZW52b3nDqSB0b3VzIGxlcyBvYmpldHMgbsOpY2Vzc2FpcmVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVqZWN0ICVzIGJlY2F1c2Ugc2hhbGxvdyByb290cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXBkYXRlZCIKK21zZ3N0ciAiIgorIiVzIHJlamV0w6kgcGFyY2UgcXVlIGxlcyByYWNpbmVzIHN1cGVyZmljaWVsbGVzIG5lIHNvbnQgcGFzIG1pc2VzIMOgIGpvdXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MTUgYnVpbHRpbi9mZXRjaC5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiRGVwdWlzICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisiZGVzIHLDqWbDqXJlbmNlcyBsb2NhbGVzIG4nb250IHBhcyBwdSDDqnRyZSBtaXNlcyDDoCBqb3VyIDsgZXNzYXlleiBkZSBsYW5jZXJcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHBvdXIgc3VwcHJpbWVyIGRlcyBicmFuY2hlcyBhbmNpZW5uZXMgZW4gY29uZmxpdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgc2VyYSBlbiBzdXNwZW5zKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBlc3QgZGV2ZW51IGVuIHN1c3BlbnMpIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODExCittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbc3VwcHJpbcOpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMiBidWlsdGluL3JlbW90ZS5jOjEwMzQKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIihhdWN1bihlKSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJSZWZ1cyBkZSByw6ljdXDDqXJlciBkYW5zIGxhIGJyYW5jaGUgY291cmFudCAlcyBkJ3VuIGTDqXDDtHQgbm9uIG51IgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIkxhIHZhbGV1ciBcIiUyJHNcIiBkZSBsJ29wdGlvbiBcIiUxJHNcIiBlc3QgaW52YWxpZGUgcG91ciAlMyRzIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiTCdvcHRpb24gXCIlc1wiIGVzdCBpZ25vcsOpZSBwb3VyICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gZmV0Y2ggZnJvbSAlcyIKK21zZ3N0ciAiSmUgbmUgc2FpcyBwYXMgcsOpY3Vww6lyZXIgZGVwdWlzICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICJSw6ljdXDDqXJhdGlvbiBkZSAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA3MyBidWlsdGluL3JlbW90ZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByw6ljdXDDqXJlciAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwOTEKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIkF1Y3VuIGTDqXDDtHQgZGlzdGFudCBzcMOpY2lmacOpLiBWZXVpbGxleiBzcMOpY2lmaWVyIHVuZSBVUkwgb3UgdW4gbm9tXG4iCisiZGlzdGFudCBkZXB1aXMgbGVzcXVlbHMgbGVzIG5vdXZlbGxlcyByw6l2aXNpb25zIGRldnJhaWVudCDDqnRyZSByw6ljdXDDqXLDqWVzLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMTQKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICJWb3VzIGRldmV6IHNww6ljaWZpZXIgdW4gbm9tIGQnw6l0aXF1ZXR0ZS4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU2Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi0tZGVwdGggZXQgLS11bnNoYWxsb3cgbmUgcGV1dmVudCBwYXMgw6p0cmUgdXRpbGlzw6lzIGVuc2VtYmxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1OAorbXNnaWQgIi0tdW5zaGFsbG93IG9uIGEgY29tcGxldGUgcmVwb3NpdG9yeSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLXVuc2hhbGxvdyBzdXIgdW4gZMOpcMO0dCBjb21wbGV0IG4nYSBwYXMgZGUgc2VucyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExODEKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwgbidhY2NlcHRlIHBhcyBkJ2FyZ3VtZW50IGRlIGTDqXDDtHQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgzCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCBuJ2EgcGFzIGRlIHNlbnMgYXZlYyBkZXMgc3DDqWNpZmljYXRpb25zIGRlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICJkaXN0YW50IG91IGdyb3VwZSBkaXN0YW50IGluZXhpc3RhbnQgOiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMDIKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKyJMYSByw6ljdXDDqXJhdGlvbiBkJ3VuIGdyb3VwZSBldCBsZXMgc3DDqWNpZmljYXRpb25zIGRlIHLDqWbDqXJlbmNlIG4nb250IHBhcyBkZSAiCisic2VucyIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTQKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWNoaWVyPl0iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MAorbXNnaWQgInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIKK21zZ3N0ciAicGV1cGxlciBsZSBqb3VybmFsIGF2ZWMgYXUgcGx1cyA8bj4gw6lsw6ltZW50cyBkZXB1aXMgbGUgam91cm5hbCBjb3VydCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczCittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiYWxpYXMgcG91ciAtLWxvZyAob2Jzb2zDqHRlKSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc2Cittc2dpZCAidGV4dCIKK21zZ3N0ciAidGV4dGUiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAidXRpbGlzZXIgPHRleHRlPiBjb21tZSBkw6lidXQgZGUgbWVzc2FnZSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc4Cittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgImZpY2hpZXIgZCdvw7kgbGlyZSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo5Cittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPG1vdGlmPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiw6ljaGFwcGVyIGxlcyBjaGFtcHMgcsOpc2VydsOpcyBwb3VyIGxlcyBpbnRlcnByw6l0ZXVycyBkZSBjb21tYW5kZXMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjYKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgIsOpY2hhcHBlciBsZXMgY2hhbXBzIHLDqXNlcnbDqXMgcG91ciBwZXJsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgIsOpY2hhcHBlciBsZXMgY2hhbXBzIHLDqXNlcnbDqXMgcG91ciBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAiw6ljaGFwcGVyIGxlcyBjaGFtcHMgcsOpc2VydsOpcyBwb3VyIGNvbXBhdGliaWxpdMOpIGF2ZWMgVGNsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMzCittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgIm4nYWZmaWNoZXIgcXVlIDxuPiByw6lmw6lyZW5jZXMgY29ycmVzcG9uZGFudCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgImZvcm1hdCDDoCB1dGlsaXNlciBwb3VyIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNQorbXNnaWQgImtleSIKK21zZ3N0ciAiY2zDqSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNgorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAibm9tIGR1IGNoYW1wIHNlcnZhbnQgw6AgdHJpZXIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE2MyBidWlsdGluL3BydW5lLmM6MTM3Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICJWw6lyaWZpY2F0aW9uIGRlIGxhIGNvbm5lY3Rpdml0w6kiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU2OAorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkZXMgcsOpcGVydG9pcmVzIGQnb2JqZXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzMQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZXQ+Li4uXSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM3Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgb2JqZXRzIGluYWNjZXNzaWJsZXMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzOAorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG9iamV0cyBlbiBzdXNwZW5zIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzkKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIMOpdGlxdWV0dGVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDAKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAic2lnbmFsZXIgbGVzIG7Fk3VkcyByYWNpbmVzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDEKK21zZ2lkICJtYWtlIGluZGV4IG9iamVjdHMgaGVhZCBub2RlcyIKK21zZ3N0ciAiY29uc2lkw6lyZXIgbGVzIG9iamV0cyBkZSBsJ2luZGV4IGNvbW1lIG7Fk3VkcyB0w6p0ZSIKKworIyB0cmFuc2xhdGVkIGZyb20gbWFuIHBhZ2UKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MgorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiY29uc2lkw6lyZXIgbGVzIHJlZmxvZ3MgY29tbWUgbsWTdWRzIHTDqnRlIChwYXIgZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MworbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJpbnNwZWN0ZXIgYXVzc2kgbGVzIG9iamV0cyBwYWNrIGV0IGFsdGVybmF0aWZzIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDQKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAibmUgdsOpcmlmaWVyIHF1ZSBsYSBjb25uZWN0aXZpdMOpIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDUKK21zZ2lkICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciCittc2dzdHIgImFjdGl2ZXIgdW5lIHbDqXJpZmljYXRpb24gcGx1cyBzdHJpY3QiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NworbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICLDqWNyaXJlIGxlcyBvYmpldHMgZW4gc3VzcGVucyBkYW5zIC5naXQvbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQ4IGJ1aWx0aW4vcHJ1bmUuYzoxMDcKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICJhZmZpY2hlciBsYSBwcm9ncmVzc2lvbiIKKworIzogYnVpbHRpbi9mc2NrLmM6NzA3Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiVsOpcmlmaWNhdGlvbiBkZXMgb2JqZXRzIgorCisjOiBidWlsdGluL2djLmM6MjUKK21zZ2lkICJnaXQgZ2MgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBnYyBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9nYy5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgJXM6ICclcyciCittc2dzdHIgIiVzIGludmFsaWRlIDogJyVzJyIKKworIzogYnVpbHRpbi9nYy5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIG9iamVjdCBkaXJlY3RvcnkgJS4qcyIKK21zZ3N0ciAib2JqZXQgcsOpcGVydG9pcmUgZMOpbWVudGllbGxlbWVudCBsb25nICUuKnMiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNjkKK21zZ2lkICJwcnVuZSB1bnJlZmVyZW5jZWQgb2JqZWN0cyIKK21zZ3N0ciAiw6lsaW1pbmVyIGxlcyBvYmpldHMgbm9uIHLDqWbDqXJlbmPDqXMiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNzEKK21zZ2lkICJiZSBtb3JlIHRob3JvdWdoIChpbmNyZWFzZWQgcnVudGltZSkiCittc2dzdHIgIsOqdHJlIHBsdXMgY29uc2NpZW5jaWV1eCAoZHVyw6llIGRlIHRyYWl0ZW1lbnQgYWxsb25nw6llKSIKKworIzogYnVpbHRpbi9nYy5jOjI3MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgImFjdGl2ZXIgbGUgbW9kZSBhdXRvLWdjIgorCisjOiBidWlsdGluL2djLmM6MjczCittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCittc2dzdHIgIiIKKyJmb3JjZXIgbGUgbGFuY2VtZW50IGR1IHJhbWFzc2UtbWlldHRlcyBtw6ptZSBzaSB1biBhdXRyZSByYW1hc3NlLW1pZXR0ZXMgIgorInRvdXJuZSBkw6lqw6AiCisKKyM6IGJ1aWx0aW4vZ2MuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKyJDb21wcmVzc2lvbiBhdXRvbWF0aXF1ZSBkdSBkw6lww7R0IGVuIHTDomNoZSBkZSBmb25kIHBvdXIgb3B0aW1pc2VyIGxlcyAiCisicGVyZm9ybWFuY2VzLlxuIgorCisjOiBidWlsdGluL2djLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiQ29tcHJlc3Npb24gZHUgZMOpcMO0dCBwb3VyIG9wdGltaXNlciBsZXMgcGVyZm9ybWFuY2VzLlxuIgorCisjOiBidWlsdGluL2djLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1hbnVhbCBob3VzZWtlZXBpbmcuXG4iCittc2dzdHIgIlZvaXIgXCJnaXQgaGVscCBnY1wiIHBvdXIgdG91dGUgaW5mb3JtYXRpb24gc3VyIGxlIG5ldHRveWFnZSBtYW51ZWwuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKyJ1biByYW1hc3NlLW1pZXR0ZXMgZXN0IGTDqWrDoCBlbiBjb3VycyBzdXIgbGEgbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICIKKyIodXRpbGlzZXogLS1mb3JjZSBzaSBjZSBuJ2VzdCBwYXMgbGUgY2FzKSIKKworIzogYnVpbHRpbi9nYy5jOjM2NAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorIklsIHkgYSB0cm9wIGQnb2JqZXRzIHNldWxzIGluYWNjZXNzaWJsZXMgOyBsYW5jZXogJ2dpdCBwcnVuZScgcG91ciBsZXMgIgorInN1cHByaW1lci4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIzCittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxtb3RpZj4gWzxyw6l2aXNpb24+Li4uXSBbWy0tXSA8Y2hlbWluPi4uLl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXAgOiDDqWNoZWMgZGUgY3LDqWF0aW9uIGR1IGZpbDogJXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ0MSBidWlsdGluL2dyZXAuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbCdhcmJyZSAoJXMpIgorCisjOiBidWlsdGluL2dyZXAuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmYWlyZSB1biBncmVwIHN1ciB1biBvYmpldCBkZSB0eXBlICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAibCdvcHRpb24gJyVjJyBhdHRlbmQgdW4gdmFsZXVyIG51bcOpcmlxdWUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyICclcyciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjYzOAorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgInJlY2hlcmNoZXIgZGFucyBsJ2luZGV4IHBsdXTDtHQgcXVlIGRhbnMgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQwCittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgInJlY2hlcmNoZXIgZGFucyBsZXMgY29udGVudXMgbm9uIGfDqXLDqXMgcGFyIGdpdCIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQyCittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJyZWNoZXJjaGVyIGRhbnMgbGVzIGZpY2hpZXJzIHN1aXZpcyBldCBub24tc3VpdmlzIgorCisjOiBidWlsdGluL2dyZXAuYzo2NDQKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgImlnbm9yZXIgbGVzIGZpY2hpZXJzIHNww6ljaWZpw6lzIHZpYSAnLmdpdGlnbm9yZSciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0NworbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgbGlnbmVzIHF1aSBuZSBjb3JyZXNwb25kZW50IHBhcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQ5Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAiY29ycmVzcG9uZGFuY2UgaW5zZW5zaWJsZSDDoCBsYSBjYXNzZSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjUxCittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgInJlY2hlcmNoZXIgbGVzIG1vdGlmcyBhdXggc8OpcGFyYXRldXJzIGRlIG1vdHMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgInRyYWl0ZXIgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGNvbW1lIHRleHRlIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTUKK21zZ2lkICJkb24ndCBtYXRjaCBwYXR0ZXJucyBpbiBiaW5hcnkgZmlsZXMiCittc2dzdHIgIm5lIHBhcyBjaGVyY2hlciBsZXMgbW90aWZzIGRhbnMgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTgKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgInRyYWl0ZXIgbGVzIGZpY2hpZXJzIGJpbmFpcmVzIGF2ZWMgbGVzIGZpbHRyZXMgdGV4dGNvbnYiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY2MAorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAiZGVzY2VuZHJlIGF1IHBsdXMgZGUgPHByb2ZvbmRldXI+IGRhbnMgbCdhcmJvcmVzY2VuY2UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY2NAorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJ1dGlsaXNlciBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIMOpdGVuZHVlcyBQT1NJWCIKKworIzogYnVpbHRpbi9ncmVwLmM6NjY3Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJ1dGlsaXNlciBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIGJhc2lxdWVzIFBPU0lYIChwYXIgZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY3MAorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICJpbnRlcnByw6l0ZXIgbGVzIG1vdGlmcyBjb21tZSBkZSBjaGHDrm5lcyBmaXhlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NjczCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJ1dGlsaXNlciBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIGNvbXBhdGlibGVzIGF2ZWMgUGVybCIKKworIzogYnVpbHRpbi9ncmVwLmM6Njc2Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgImFmZmljaGVyIGxlcyBudW3DqXJvcyBkZSBsaWduZSIKKworIzogYnVpbHRpbi9ncmVwLmM6Njc3Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIm5lIHBhcyBwYXMgYWZmaWNoZXIgbGVzIG5vbXMgZGUgZmljaGllciIKKworIzogYnVpbHRpbi9ncmVwLmM6Njc4Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgImFmZmljaGVyIGxlcyBub21zIGRlIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgImFmZmljaGVyIGxlcyBub21zIGRlIGZpY2hpZXJzIHJlbGF0aXZlbWVudCBhdSByw6lwZXJ0b2lyZSBkZSBiYXNlIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODIKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIm4nYWZmaWNoZXIgcXVlIGxlcyBub21zIGRlIGZpY2hpZXJzIGF1IGxpZXUgZGVzIGxpZ25lcyBjb3JyZXNwb25kYW50IgorCisjOiBidWlsdGluL2dyZXAuYzo2ODQKK21zZ2lkICJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKK21zZ3N0ciAic3lub255bWUgcG91ciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6Njg3Cittc2dpZCAic2hvdyBvbmx5IHRoZSBuYW1lcyBvZiBmaWxlcyB3aXRob3V0IG1hdGNoIgorbXNnc3RyICJuJ2FmZmljaGVyIHF1ZSBsZXMgbm9tcyBkZXMgZmljaGllcnMgc2FucyBjb3JyZXNwb25kYW5jZSIKKworIzogYnVpbHRpbi9ncmVwLmM6Njg5Cittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAiaW1wcmltZXIgdW5lIGNhcmFjdMOocmUgTlVMIGFwcsOocyBsZSBub21zIGRlIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5MQorbXNnaWQgInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgImFmZmljaGVyIGxlIG5vbWJyZSBkZSBjb3JyZXNwb25kYW5jZXMgYXUgbGlldSBkZXMgbGlnbmVzIGNvcnJlc3BvbmRhbnQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5MgorbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICJtZXR0cmUgZW4gw6l2aWRlbmNlIGxlcyBjb3JyZXNwb25kYW5jZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5NAorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICIiCisiaW1wcmltZXIgdW5lIGxpZ25lIHZpZGUgZW50cmUgbGVzIGNvcnJlc3BvbmRhbmNlcyBkZSBmaWNoaWVycyBkaWZmw6lyZW50cyIKKworIzogYnVpbHRpbi9ncmVwLmM6Njk2Cittc2dpZCAic2hvdyBmaWxlbmFtZSBvbmx5IG9uY2UgYWJvdmUgbWF0Y2hlcyBmcm9tIHNhbWUgZmlsZSIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxlIG5vbSBkZSBmaWNoaWVyIHVuZSBmb2lzIGF1IGRlc3N1cyBkZXMgY29ycmVzcG9uZGFuY2VzIGR1IG3Dqm1lICIKKyJmaWNoaWVyIgorCisjOiBidWlsdGluL2dyZXAuYzo2OTkKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAiYWZmaWNoZXIgPG4+IGxpZ25lcyBkZSBjb250ZXh0ZSBhdmFudCBldCBhcHLDqHMgbGVzIGNvcnJlc3BvbmRhbmNlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzAyCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAiYWZmaWNoZXIgPG4+IGxpZ25lcyBkZSBjb250ZXh0ZSBhdmFudCBsZXMgY29ycmVzcG9uZGFuY2VzIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDQKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgImFmZmljaGVyIDxuPiBsaWduZXMgZGUgY29udGV4dGUgYXByw6hzIGxlcyBjb3JyZXNwb25kYW5jZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwNQorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgInJhY2NvdXJjaSBwb3VyIC1DIE5VTSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzA4Cittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAiIgorImFmZmljaGVyIHVuZSBsaWduZSBhdmVjIGxlIG5vbSBkZSBsYSBmb25jdGlvbiBhdmFudCBsZXMgY29ycmVzcG9uZGFuY2VzIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTAKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAiYWZmaWNoZXIgbGEgZm9uY3Rpb24gY29udGVuYW50ZSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzEzCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgImxpcmUgbGVzIG1vdGlmcyBkZXB1aXMgZmljaGllciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzE1Cittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICJyZWNoZXJjaGVyIDxtb3RpZj4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNworbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgImNvbWJpbmVyIGxlcyBtb3RpZnMgc3DDqWNpZmnDqXMgcGFyIC1lIgorCisjOiBidWlsdGluL2dyZXAuYzo3MjkKK21zZ2lkICJpbmRpY2F0ZSBoaXQgd2l0aCBleGl0IHN0YXR1cyB3aXRob3V0IG91dHB1dCIKK21zZ3N0ciAiIgorImluZGlxdWVyIGRlcyBjb3JyZXNwb25kYW5jZXMgYXZlYyBsZSBjb2RlIGRlIHNvcnRpZSBtYWlzIHNhbnMgcmllbiBhZmZpY2hlciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMxCittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAiIgorIm4nYWZmaWNoZXIgcXVlIGxlcyBjb3JyZXNwb25kYW5jZXMgZGUgZmljaGllcnMgcXVpIGNvcnJlc3BvbmRlbnQgw6AgdG91cyBsZXMgIgorIm1vdGlmcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMzCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgImFmZmljaGVyIGwnYXJicmUgZCdhbmFseXNlIHBvdXIgbGUgbW90aWYgZ3JlcCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM3Cittc2dpZCAicGFnZXIiCittc2dzdHIgInBhZ2luZXVyIgorCisjOiBidWlsdGluL2dyZXAuYzo3MzcKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIGNvcnJlc3BvbmRhbnQgZGFucyBsZSBwYWdpbmV1ciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQwCittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICJwZXJtZXR0cmUgbCdhcHBlbCBkZSBncmVwKDEpIChpZ25vcsOpIHBhciBjZSBidWlsZCkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc0MSBidWlsdGluL3Nob3ctcmVmLmM6MTg5Cittc2dpZCAic2hvdyB1c2FnZSIKK21zZ3N0ciAiYWZmaWNoZXIgbCd1c2FnZSIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA4Cittc2dpZCAibm8gcGF0dGVybiBnaXZlbi4iCittc2dzdHIgImF1Y3VuIG1vdGlmIGZvdXJuaS4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NgorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG5lIGZvbmN0aW9ubmUgcXVlIHN1ciBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTIKK21zZ2lkICItLWNhY2hlZCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tbm8taW5kZXguIgorbXNnc3RyICItLWNhY2hlZCBvdSAtLXVudHJhY2tlZCBuZSBwZXV2ZW50IHBhcyDDqnRyZSB1dGlsaXPDqXMgYXZlYyAtLW5vLWluZGV4LiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk3Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMuIgorbXNnc3RyICIiCisiLS1uby1pbmRleCBvdSAtLXVudHJhY2tlZCBuZSBwZXV2ZW50IHBhcyDDqnRyZSB1dGlsaXPDqXMgYXZlYyBkZXMgcsOpdmlzaW9ucy4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMAorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIGF2ZWMgZHUgY29udGVudSBzdWl2aS4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwOAorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbi4iCittc2dzdHIgIi0tY2FjaGVkIGV0IGRlcyBhcmJyZXMgc29udCBmb3VybmlzIGVuIG3Dqm1lIHRlbXBzLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjgwCittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmljaGllcj4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmljaGllcj4uLi4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4MQorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIDwgPGxpc3RlLWRlLWNoZW1pbnM+IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTIgYnVpbHRpbi90YWcuYzo2MTQKK21zZ2lkICJ0eXBlIgorbXNnc3RyICJ0eXBlIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTIKK21zZ2lkICJvYmplY3QgdHlwZSIKK21zZ3N0ciAidHlwZSBkJ29iamV0IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTMKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiw6ljcmlyZSBsJ29iamV0IGRhbnMgbGEgYmFzZSBkZSBkb25uw6llIGQnb2JqZXRzIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTUKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGlyZSBsJ29iamV0IGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICJzdG9ja2VyIGxlIGZpY2hpZXIgdGVsIHF1ZWwgc2FucyBmaWx0cmFnZSIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAiIgorImp1c3RlIGhhc2hlciBuJ2ltcG9ydGUgcXVlbCBjb250ZW51IHBvdXIgY3LDqWVyIGRlcyBvYmpldHMgY29ycm9tcHVzIHBvdXIgIgorImRlYnVnZ2VyIEdpdCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgInRyYWl0ZXIgbGUgZmljaGllciBjb21tZSBzJ2lsIHZlbmFpdCBkZSBjZSBjaGVtaW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQxCittc2dpZCAicHJpbnQgYWxsIGF2YWlsYWJsZSBjb21tYW5kcyIKK21zZ3N0ciAiYWZmaWNoZXIgdG91dGVzIGxlcyBjb21tYW5kZXMgZGlzcG9uaWJsZXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQyCittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICJhZmZpY2hlciB1bmUgbGlzdGUgZGUgZ3VpZGVzIHV0aWxlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICJhZmZpY2hlciBsYSBwYWdlIGRlIG1hbnVlbCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgbWFudWVsIGRhbnMgdW4gbmF2aWdhdGV1ciB3ZWIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgImFmZmljaGVyIGxhIHBhZ2UgaW5mbyIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZGU+XSIKKworIzogYnVpbHRpbi9oZWxwLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgImZvcm1hdCBkJ2FpZGUgbm9uIHJlY29ubnUgJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6OTEKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICLDqWNoZWMgZGUgZMOpbWFycmFnZSBkJ2VtYWNzY2xpZW50LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICLDqWNoZWMgZCdhbmFseXNlIGRlIGxhIHZlcnNpb24gZCdlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjExMgorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICJsYSB2ZXJzaW9uIGQnZW1hY3NjbGllbnQgJyVkJyBlc3QgdHJvcCBhbmNpZW5uZSAoPDIyKS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEzMCBidWlsdGluL2hlbHAuYzoxNTggYnVpbHRpbi9oZWxwLmM6MTY3IGJ1aWx0aW4vaGVscC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnOiAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGwnZXjDqWN1dGlvbiBkZSAnJXMnIDogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcycgOiBjaGVtaW4gcG91ciBsJ3V0aWxpdGFpcmUgZGUgdmlzdWFsaXNhdGlvbiBkZSBtYW51ZWwgbm9uIHN1cHBvcnTDqS5cbiIKKyJWZXVpbGxleiB1dGlsaXNlciBwbHV0w7R0ICdtYW4uPG91dGlsPi5jbWQnLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcycgOiBjaGVtaW4gcG91ciBsJ3V0aWxpdGFpcmUgZGUgdmlzdWFsaXNhdGlvbiBkZSBtYW51ZWwgc3VwcG9ydMOpLlxuIgorIlZldWlsbGV6IHV0aWxpc2VyIHBsdXTDtHQgJ21hbi48b3V0aWw+LmNtZCcuIgorCisjOiBidWlsdGluL2hlbHAuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAiJyVzJyA6IHZpc3VhbGlzZXVyIGRlIG1hbnVlbCBpbmNvbm51LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzcxCittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJhdWN1biB2aXN1YWxpc2V1ciBkZSBtYW51ZWwgbidhIHByaXMgZW4gY2hhcmdlIGxhIGRlbWFuZGUiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3OQorbXNnaWQgIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImF1Y3VuIHZpc3VhbGlzZXVyIGRlICdpbmZvJyBuJ2EgcHJpcyBlbiBjaGFyZ2UgbGEgZGVtYW5kZSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDI4Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAiRMOpZmluaXRpb24gZGVzIGF0dHJpYnV0cyBwYXIgY2hlbWluIgorCisjOiBidWlsdGluL2hlbHAuYzo0MjkKK21zZ2lkICJFdmVyeWRheSBHaXQgV2l0aCAyMCBDb21tYW5kcyBPciBTbyIKK21zZ3N0ciAiR2l0IGRlIHRvdXMgbGVzIGpvdXJzIGF2ZWMgw6AgcGV1IHByw6hzIDIwIGNvbW1hbmRlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMwCittc2dpZCAiQSBHaXQgZ2xvc3NhcnkiCittc2dzdHIgIlVuIGdsb3NzYWlyZSBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMQorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIlNww6ljaWZpZSBsZXMgZmljaGllcnMgbm9uLXN1aXZpcyDDoCBpZ25vcmVyIGludGVudGlvbm5lbGxlbWVudCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMyCittc2dpZCAiRGVmaW5pbmcgc3VibW9kdWxlIHByb3BlcnRpZXMiCittc2dzdHIgIkTDqWZpbml0aW9uIGRlcyBwcm9wcmnDqXTDqXMgZGUgc291cy1tb2R1bGUiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMworbXNnaWQgIlNwZWNpZnlpbmcgcmV2aXNpb25zIGFuZCByYW5nZXMgZm9yIEdpdCIKK21zZ3N0ciAiU3DDqWNpZmljYXRpb24gZGVzIHLDqXZpc2lvbnMgZXQgcG9ydMOpZXMgcG91ciBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNAorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCAoZm9yIHZlcnNpb24gMS41LjEgb3IgbmV3ZXIpIgorbXNnc3RyICIiCisiVW5lIGludHJvZHVjdGlvbiBwcmF0aXF1ZSDDoCBHaXQgKHBvdXIgbGVzIHZlcnNpb25zIDEuNS4xIGV0IHN1cMOpcmlldXJlcykiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNQorbXNnaWQgIkFuIG92ZXJ2aWV3IG9mIHJlY29tbWVuZGVkIHdvcmtmbG93cyB3aXRoIEdpdCIKK21zZ3N0ciAiVW4gYXBlcsOndSBkZXMgZmx1eCBkZSB0cmF2YWlsIHJlY29tbWFuZMOpcyBhdmVjIEdpdCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ3Cittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZTpcbiIKK21zZ3N0ciAiTGVzIGd1aWRlcyBHaXQgcG9wdWxhaXJlcyBzb250IDogXG4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2OCBidWlsdGluL2hlbHAuYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgInVzYWdlIDogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImBnaXQgJXMnIGlzIGFsaWFzZWQgdG8gYCVzJyIKK21zZ3N0ciAiYGdpdCAlc1wiIGVzdCB1biBhbGlhcyBkZSBgJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAidHlwZSBkJ29iamV0IG5vbiBjb3JyZXNwb25kYW50IMOgICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAib2JqZXQgYXR0ZW5kdSBub24gcmXDp3UgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICJvYmpldCAlcyA6IHR5cGUgYXR0ZW5kdSAlcywgcmXDp3UgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAiaW1wb3NzaWJsZSBkZSByZW1wbGlyICVkIG9jdGV0IgorbXNnc3RyWzFdICJpbXBvc3NpYmxlIGRlIHJlbXBsaXIgJWQgb2N0ZXRzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNzcKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgImZpbiBkZSBmaWNoaWVyIHByw6ltYXR1csOpZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc4Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiZXJyZXVyIGRlIGxlY3R1cmUgc3VyIGwnZW50csOpZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjkwCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgInBsdXMgZCdvY3RldHMgdXRpbGlzw6lzIHF1ZSBkaXNwb25pYmxlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjk3Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAibGUgcGFxdWV0IGVzdCB0cm9wIGdyYW5kIHBvdXIgbGEgZMOpZmluaXRpb24gYWN0dWVsbGUgZGUgb2ZmX3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGZpY2hpZXIgcGFxdWV0ICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMzMgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJsYSBzaWduYXR1cmUgZHUgcGFxdWV0IG5lIGNvcnJlc3BvbmQgcGFzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAibGEgdmVyc2lvbiBkZSBwYXF1ZXQgJTxQUkl1MzI+IG5vbiBzdXBwb3J0w6llIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJWx1OiAlcyIKK21zZ3N0ciAibGUgcGFxdWV0IGEgdW4gbWF1dmFpcyBvYmpldCDDoCBsJ29mZnNldCAlbHU6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAibGEgZMOpY29tcHJlc3Npb24gKGluZmxhdGUpIGEgcmV0b3VybsOpICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MjIKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICJkw6lwYXNzZW1lbnQgZGUgbGEgdmFsZXVyIGQnb2Zmc2V0IHBvdXIgbCdvYmpldCBkZWx0YSBkZSBiYXNlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzAKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgImwnb2JqZXQgZGVsdGEgZGUgYmFzZSBlc3QgaG9ycyBsaW1pdGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICJ0eXBlIGQnb2JqZXQgaW5jb25udSAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY5Cittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlIChwcmVhZCkgbGUgZmljaGllciBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJmaW4gcHLDqW1hdHVyw6llIGR1IGZpY2hpZXIgcGFxdWV0LCAlbHUgb2N0ZXQgbHUiCittc2dzdHJbMV0gImZpbiBwcsOpbWF0dXLDqWUgZHUgZmljaGllciBwYXF1ZXQsICVsdSBvY3RldHMgbHVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTcKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAiZ3JhdmUgaW5jb2jDqXJlbmNlIGRhbnMgbGEgZMOpY29tcHJlc3Npb24gKGluZmxhdGUpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NDMgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc3MgorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIkNPTExJU0lPTiBTSEExIFRST1VWw4lFIEFWRUMgJXMgISIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTYyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsaXJlICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgbCdvYmpldCBleGlzdGFudCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgIm9iamV0IGJsb2IgaW52YWxpZGUgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICIlcyBpbnZhbGlkZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQzCittc2dpZCAiRXJyb3IgaW4gb2JqZWN0IgorbXNnc3RyICJFcnJldXIgZGFucyBsJ29iamV0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIlRvdXMgbGVzIG9iamV0cyBlbmZhbnRzIGRlICVzIG5lIHNvbnQgcGFzIGFjY2Vzc2libGVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTcgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTQ4Cittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICLDqWNoZWMgZCdhcHBsaWNhdGlvbiBkdSBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICJSw6ljZXB0aW9uIGQnb2JqZXRzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE4Cittc2dpZCAiSW5kZXhpbmcgb2JqZWN0cyIKK21zZ3N0ciAiSW5kZXhhdGlvbiBkJ29iamV0cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1MAorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAibGUgcGFxdWV0IGVzdCBjb3Jyb21wdSAoU0hBMSBuZSBjb3JyZXNwb25kIHBhcykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTUKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgImltcG9zc2libGUgZCdvYnRlbmlyIGxlIHN0YXR1dCAoZnN0YXQpIGR1IGZpY2hpZXIgcGFxdWV0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU4Cittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICJsZSBwYXF1ZXQgZXN0IGludmFsaWRlIMOgIGxhIGZpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2OQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgImNvbmZ1c2lvbiBleHRyw6ptZSBkYW5zIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk0Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAiUsOpc29sdXRpb24gZGVzIGRlbHRhcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIGZpbCA6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ3Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAiY29uZnVzaW9uIGV4dHLDqm1lIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbXBsZXRlZCB3aXRoICVkIGxvY2FsIG9iamVjdHMiCittc2dzdHIgImNvbXBsw6l0w6kgYXZlYyAlZCBvYmpldHMgbG9jYXV4IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICIiCisiU29tbWUgZGUgY29udHLDtGxlIGRlIGZpbiBpbmF0dGVuZHVlIHBvdXIgJXMgKGNvcnJ1cHRpb24gc3VyIGxlIGRpc3F1ZSA/KSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAibGUgcGFxdWV0IGEgJWQgZGVsdGEgbm9uIHLDqXNvbHUiCittc2dzdHJbMV0gImxlIHBhcXVldCBhICVkIGRlbHRhcyBub24gcsOpc29sdXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgImltcG9zc2libGUgZGUgY29tcHJlc3NlciBsJ29iamV0IGFqb3V0w6kgKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAibCdvYmpldCBsb2NhbCAlcyBlc3QgY29ycm9tcHUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzOTEKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAiZXJyZXVyIGVuIGZlcm1ldHVyZSBkdSBmaWNoaWVyIHBhcXVldCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUga2VlcCBmaWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZCfDqWNyaXJlIGxlIGZpY2hpZXIgXCJrZWVwXCIgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmZXJtZXIgbGUgZmljaGllciBcImtlZXBcIiAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDI1Cittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzdG9ja2VyIGxlIGZpY2hpZXIgcGFxdWV0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM2Cittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2libGUgZGUgc3RvY2tlciBsZSBmaWNoaWVyIGQnaW5kZXgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAibWF1dmFpcyBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIKK21zZ3N0ciAibm9tYnJlIGRlIGZpbHMgc3DDqWNpZmnDqSBpbnZhbGlkZSAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAicGFzIGRlIHN1cHBvcnQgZGVzIGZpbHMsIGlnbm9yZSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGZpbGUgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ291dnJpciBsZSBmaWNoaWVyIHBhcXVldCBleGlzdGFudCAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdvdXZyaXIgbGUgZmljaGllciBwYXF1ZXQgZCdpbmRleCBleGlzdGFudCBwb3VyICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAicGFzIHVuIGRlbHRhIDogJWQgb2JqZXQiCittc2dzdHJbMV0gInBhcyB1biBkZWx0YSA6ICVkIG9iamV0cyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5MworIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICJsb25ndWV1ciBjaGHDrm7DqWUgPSAlZCA6ICVsdSBvYmpldCIKK21zZ3N0clsxXSAibG9uZ3VldXIgY2hhw65uw6llID0gJWQgOiAlbHUgb2JqZXRzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjIzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIkltcG9zc2libGUgZGUgcmV2ZW5pciBhdSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIGNvdXJhbnQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NzUgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY3OAorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY5MCBidWlsdGluL2luZGV4LXBhY2suYzoxNjk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAibWF1dmFpcyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcwOAorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpIHNhbnMgLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcxMiBidWlsdGluL2luZGV4LXBhY2suYzoxNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICJsZSBub20gZGUgZmljaGllciBwYXF1ZXQgJyVzJyBuZSBzZSB0ZXJtaW5lIHBhcyBwYXIgJy5wYWNrJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyOQorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiLS12ZXJpZnkgc2FucyBub20gZGUgZmljaGllciBwYXF1ZXQgZG9ubsOpIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSByZW5kcmUgJXMgaW5zY3JpcHRpYmxlIHBvdXIgbGUgZ3JvdXBlIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIG5hbWUgJXMiCittc2dzdHIgIm5vbSBkZSBtb2TDqGxlIGTDqW1lbnRpZWxsZW1lbnQgbG9uZyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmYWlyZSB1biBzdGF0IGRlICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgZmFpcmUgdW4gc3RhdCBkdSBtb2TDqGxlICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgKG9wZW5kaXIpICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkbGluayAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHJlYWRsaW5rICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHN5bWxpbmsgJXMiCittc2dzdHIgImxpZW4gc3ltYm9saXF1ZSBkw6ltZW50aWVsbGVtZW50IGxvbmcgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIHVuIGxpZW4gc3ltYm9saXF1ZSBkZSAnJXMnICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY29waWVyICclcycgdmVycyAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgIm1vZMOobGUgJXMgaWdub3LDqSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgcGF0aCAlcyIKK21zZ3N0ciAiY2hlbWluIGRlIG1vZMOobGUgJXMgZMOpbWVudGllbGxlbWVudCBsb25nIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCAlcyIKK21zZ3N0ciAibW9kw6hsZXMgbm9uIHRyb3V2w6lzICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIG9mIGEgd3JvbmcgZm9ybWF0IHZlcnNpb24gJWQgZnJvbSAnJXMnIgorbXNnc3RyICIiCisicGFzIGRlIGNvcGllIGRlcyBtb2TDqGxlcyDDqXRhbnQgZGFucyB1bmUgbWF1dmFpc2UgdmVyc2lvbiBkdSBmb3JtYXQgJWQgZGUgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBnaXQgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJyw6lwZXJ0b2lyZSBnaXQgZMOpbWVudGllbCAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzQ0IGJ1aWx0aW4vaW5pdC1kYi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgZXhpc3RlIGTDqWrDoCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHRyYWl0ZXIgbGUgZmljaGllciBkZSB0eXBlICVkIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpcGxhY2VyICVzIHZlcnMgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJyVzJyBpcyBlaXRoZXIgIlJlaW5pdGlhbGl6ZWQKKyMuIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gIiIsIGFuZCB0aGUgbGFzdCAnJXMlcycgaXMgdGhlIHZlcmJhdGltIGRpcmVjdG9yeSBuYW1lLgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICJEw6lww7R0IEdpdCUyJHMgJTEkcyBkYW5zICUzJHMlNCRzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNQorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCittc2dzdHIgImV4aXN0YW50IHLDqWluaXRpYWxpc8OpIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MzUKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSIKK21zZ3N0ciAidmlkZSBpbml0aWFsaXPDqSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDM2Cittc2dpZCAiIHNoYXJlZCIKK21zZ3N0ciAiIHBhcnRhZ8OpIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0ODMKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHLDqXBlcnRvaXJlLW1vZMOobGU+XSBbLS0iCisic2hhcmVkWz08cGVybWlzc2lvbnM+XV0gWzxyw6lwZXJ0b2lyZT5dIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MDYKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAicGVybWlzc2lvbnMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUwNworbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAic3DDqWNpZmllciBxdWUgbGUgZMOpcMO0dCBnaXQgc2VyYSBwYXJ0YWfDqSBlbnRyZSBwbHVzaWV1cnMgdXRpbGlzYXRldXJzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NDEgYnVpbHRpbi9pbml0LWRiLmM6NTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBjcsOpZXIgbGUgcsOpcGVydG9pcmUgKG1rZGlyKSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBzZSBkw6lwbGFjZXIgdmVycyBsZSByw6lwZXJ0b2lyZSAoY2hkaXIpICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAiIgorIiVzIChvdSAtLXdvcmstdHJlZT08csOpcGVydG9pcmU+KSBuJ2VzdCBwYXMgYXV0b3Jpc8OpIHNhbnMgc3DDqWNpZmllciAlcyAob3UgLS0iCisiZ2l0LWRpcj08csOpcGVydG9pcmU+KSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdhY2PDqWRlciDDoCBsJ2FyYnJlIGRlIHRyYXZhaWwgJyVzJyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNQorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyIDx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dICIKKyJbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgIgorIjxzeW1ib2xlPlsoPXw6KTx2YWxldXI+XSkuLi5dIFs8ZmljaGllcj4uLi5dIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI1Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAiw6lsaW1pbmVyIGxlcyBsaWduZXMgZGUgZmluIHZpZGVzIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI2Cittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAibGlnbmUgZGUgZmluIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI3Cittc2dpZCAidHJhaWxlcihzKSB0byBhZGQiCittc2dzdHIgImxpZ25lKHMpIGRlIGZpbiDDoCBham91dGVyIgorCisjOiBidWlsdGluL2xvZy5jOjQzCittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHBsYWdlIGRlIHLDqXZpc2lvbnM+XSBbWy0tXSA8Y2hlbWluPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDQKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxvcHRpb25zPl0gPG9iamV0Pi4uLiIKKworIzogYnVpbHRpbi9sb2cuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIKK21zZ3N0ciAib3B0aW9uIC0tZGVjb3JhdGUgaW52YWxpZGUgOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzEKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAic3VwcHJpbWVyIGxhIHNvcnRpZSBkZXMgZGlmZsOpcmVuY2VzIgorCisjOiBidWlsdGluL2xvZy5jOjEzMgorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICJhZmZpY2hlciBsYSBzb3VyY2UiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzCittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgIlV0aWxpc2VyIGxlIGZpY2hpZXIgZGUgY29ycmVzcG9uZGFuY2UgZGUgbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxMzQKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICJkw6ljb3JlciBsZXMgb3B0aW9ucyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzcKK21zZ2lkICJQcm9jZXNzIGxpbmUgcmFuZ2UgbixtIGluIGZpbGUsIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiIgorIlRyYWl0ZXIgc2V1bGVtZW50IGwnaW50ZXJ2YWxsZSBkZSBsaWduZXMgbixtIGR1IGZpY2hpZXIgZW4gY29tbWVuw6dhbnQgbGUgIgorImNvbXB0ZSDDoCAxIgorCisjOiBidWlsdGluL2xvZy5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgIlNvcnRpZSBmaW5hbGUgOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzIDogZmljaGllciBpbmNvcnJlY3QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDc5IGJ1aWx0aW4vbG9nLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdHlwZTogJWQiCittc2dzdHIgIlR5cGUgaW5jb25udSA6ICVkIgorCisjOiBidWlsdGluL2xvZy5jOjcxNAorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgImZvcm1hdC5oZWFkZXJzIHNhbnMgdmFsZXVyIgorCisjOiBidWlsdGluL2xvZy5jOjc5OAorbXNnaWQgIm5hbWUgb2Ygb3V0cHV0IGRpcmVjdG9yeSBpcyB0b28gbG9uZyIKK21zZ3N0ciAibGUgbm9tIGR1IHLDqXBlcnRvaXJlIGRlIHNvcnRpZSBlc3QgdHJvcCBsb25nIgorCisjOiBidWlsdGluL2xvZy5jOjgxNAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnb3V2cmlyIGxlIGZpY2hpZXIgY29ycmVjdGlmICVzIgorCisjOiBidWlsdGluL2xvZy5jOjgyOAorbXNnaWQgIk5lZWQgZXhhY3RseSBvbmUgcmFuZ2UuIgorbXNnc3RyICJFeGFjdGVtZW50IHVuZSBwbGFnZSBuw6ljZXNzYWlyZS4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODM4Cittc2dpZCAiTm90IGEgcmFuZ2UuIgorbXNnc3RyICJDZWNpIG4nZXN0IHBhcyB1bmUgcGxhZ2UuIgorCisjOiBidWlsdGluL2xvZy5jOjk0NAorbXNnaWQgIkNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIkxhIGxldHRyZSBkZSBtb3RpdmF0aW9uIGRvaXQgw6p0cmUgYXUgZm9ybWF0IGUtbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgImluLXJlcGx5LXRvIGFiZXJyYW50IDogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA1MQorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wdGlvbnM+XSBbPGRlcHVpcz4gfCA8cGxhZ2UgZGUgcsOpdmlzaW9ucz5dIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTYKK21zZ2lkICJUd28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAiRGV1eCByw6lwZXJ0b2lyZXMgZGUgc29ydGllID8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxMQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgInV0aWxpc2VyIFtQQVRDSCBuL21dIG3Dqm1lIGF2ZWMgdW4gcGF0Y2ggdW5pcXVlIgorCisjOiBidWlsdGluL2xvZy5jOjEyMTQKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAidXRpbGlzZXIgW1BBVENIXSBtw6ptZSBhdmVjIGRlcyBwYXRjaHMgbXVsdGlwbGVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyMTgKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIHBhdGNocyBzdXIgbGEgc29ydGllIHN0YW5kYXJkIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjAKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAiZ8OpbsOpcmVyIHVuZSBsZXR0cmUgZGUgbW90aXZhdGlvbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIyCittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICIiCisidXRpbGlzZXIgdW5lIHPDqXF1ZW5jZSBzaW1wbGUgZGUgbm9tYnJlcyBwb3VyIGxlcyBub20gZGVzIGZpY2hpZXJzIGRlIHNvcnRpZSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIzCittc2dpZCAic2Z4IgorbXNnc3RyICJzZngiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyNAorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICJ1dGlsaXNlciA8c2Z4PiBhdSBsaWV1IGRlICcucGF0Y2gnIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjYKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICJkw6ltYXJyZXIgbGEgbnVtw6lyb3RhdGlvbiBkZXMgcGF0Y2hzIMOgIDxuPiBhdSBsaWV1IGRlIDEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyOAorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAibWFycXVlciBsYSBzw6lyaWUgY29tbWUgdW5lIE5pw6htZSByw6nDqWRpdGlvbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjMwCittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICJ1dGlsaXNlciBbPHByw6lmaXhlPl0gYXUgbGlldSBkZSBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzMKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgInN0b2NrZXIgbGVzIGZpY2hpZXJzIHLDqXN1bHRhdHMgZGFucyA8csOpcGVydG9pcmU+IgorCisjOiBidWlsdGluL2xvZy5jOjEyMzYKK21zZ2lkICJkb24ndCBzdHJpcC9hZGQgW1BBVENIXSIKK21zZ3N0ciAibmUgcGFzIHJldGlyZXIvYWpvdXRlciBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzkKK21zZ2lkICJkb24ndCBvdXRwdXQgYmluYXJ5IGRpZmZzIgorbXNnc3RyICJuZSBwYXMgaW1wcmltZXIgbGVzIGRpZmZzIGJpbmFpcmVzIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDEKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgIm5lIHBhcyBpbmNsdXJlIHVuIHBhdGNoIGNvcnJlc3BvbmRhbnQgw6AgdW4gY29tbWl0IGFtb250IgorCisjOiBidWlsdGluL2xvZy5jOjEyNDMKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgImFmZmljaGVyIGxlIGZvcm1hdCBkdSBwYXRjaCBhdSBsaWV1IGR1IGTDqWZhdXQgKHBhdGNoICsgc3RhdCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0NQorbXNnaWQgIk1lc3NhZ2luZyIKK21zZ3N0ciAiQ29tbXVuaWNhdGlvbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ2Cittc2dpZCAiaGVhZGVyIgorbXNnc3RyICJlbi10w6p0ZSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ3Cittc2dpZCAiYWRkIGVtYWlsIGhlYWRlciIKK21zZ3N0ciAiYWpvdXRlciBsJ2VuLXTDqnRlIGQnZS1tYWlsIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDggYnVpbHRpbi9sb2cuYzoxMjUwCittc2dpZCAiZW1haWwiCittc2dzdHIgImUtbWFpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ4Cittc2dpZCAiYWRkIFRvOiBoZWFkZXIiCittc2dzdHIgImFqb3V0ZXIgbCdlbi10w6p0ZSBcIlRvOlwiIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTAKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiYWpvdXRlciBsJ2VuLXTDqnRlIFwiQ2M6XCIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MgorbXNnaWQgImlkZW50IgorbXNnc3RyICJpZGVudCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjUzCittc2dpZCAic2V0IEZyb20gYWRkcmVzcyB0byA8aWRlbnQ+IChvciBjb21taXR0ZXIgaWRlbnQgaWYgYWJzZW50KSIKK21zZ3N0ciAiIgorInJlbnNlaWduZXIgbCdhZHJlc3NlIEZyb20gw6AgPGlkZW50PiAob3Ugw6AgbCdpZGVudCBkdSB2YWxpZGF0ZXVyIHNpIGFic2VudCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgImlkLW1lc3NhZ2UiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAicsOpcG9uZHJlIGRhbnMgbGUgcHJlbWllciBtZXNzYWdlIMOgIDxpZC1tZXNzYWdlPiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU3IGJ1aWx0aW4vbG9nLmM6MTI2MAorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICJsaW1pdGUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1OAorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgImF0dGFjaGVyIGxlIHBhdGNoIgorCisjOiBidWlsdGluL2xvZy5jOjEyNjEKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICJwYXRjaCDDoCBsJ2ludMOpcmlldXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI2NQorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICIiCisiYWN0aXZlciBsJ2VuZmlsYWdlIGRlIG1lc3NhZ2UsIHN0eWxlcyA6IHNoYWxsb3cgKHN1cGVyZmljaWVsKSwgZGVlcCAocHJvZm9uZCkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI2NworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAic2lnbmF0dXJlIgorCisjOiBidWlsdGluL2xvZy5jOjEyNjgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUiCittc2dzdHIgImFqb3V0ZXIgdW5lIHNpZ25hdHVyZSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjcwCittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICJham91dGVyIHVuZSBzaWduYXR1cmUgZGVwdWlzIHVuIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI3MQorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciBsZXMgbm9tcyBkZSBmaWNoaWVycyBkZXMgcGF0Y2hzIgorCisjOiBidWlsdGluL2xvZy5jOjEzNjAKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIi1uIGV0IC1rIHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2lmcy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM2MgorbXNnaWQgIi0tc3ViamVjdC1wcmVmaXggYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItLXN1YmplY3QtcHJlZml4IGV0IC1rIHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2lmcy4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3MAorbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1vbmx5IG4nYSBwYXMgZGUgc2VucyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzcyCittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtc3RhdHVzIG4nYSBwYXMgZGUgc2VucyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzc0Cittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWNoZWNrIG4nYSBwYXMgZGUgc2VucyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzk3Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgInNvcnRpZSBzdGFuZGFyZCwgb3UgcsOpcGVydG9pcmUsIGxlcXVlbCA/IgorCisjOiBidWlsdGluL2xvZy5jOjEzOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBjcsOpZXIgbGUgcsOpcGVydG9pcmUgJyVzJyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgImxlY3R1cmUgZHUgZmljaGllciBkZSBzaWduYXR1cmUgJyVzJyBpbXBvc3NpYmxlIgorCisjOiBidWlsdGluL2xvZy5jOjE1NTkKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiw4ljaGVjIGRlIGNyw6lhdGlvbiBkZXMgZmljaGllcnMgZW4gc29ydGllIgorCisjOiBidWlsdGluL2xvZy5jOjE2MDcKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs8YnJhbmNoZV9hbW9udD4gWzxoZWFkPiBbPGxpbWl0ZT5dXV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgdW5lIGJyYW5jaGUgZGlzdGFudGUgc3VpdmllLCBtZXJjaSBkZSBzcMOpY2lmaWVyICIKKyI8YnJhbmNoZV9hbW9udD4gbWFudWVsbGVtZW50LlxuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzIgYnVpbHRpbi9sb2cuYzoxNjc0IGJ1aWx0aW4vbG9nLmM6MTY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiQ29tbWl0IGluY29ubnUgJXMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzozNTgKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpY2hpZXI+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQxNQorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgImlkZW50aWZpZXIgbGUgc3RhdHV0IGRlIGZpY2hpZXIgYXZlYyBsZXMgw6l0aXF1ZXR0ZXMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTcKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIKK21zZ3N0ciAidXRpbGlzZXIgZGVzIG1pbnVzY3VsZXMgcG91ciBsZXMgZmljaGllciAnYXNzdW3DqXMgaW5jaGFuZ8OpcyciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTkKK21zZ2lkICJzaG93IGNhY2hlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IChkZWZhdWx0KSIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIG1pcyBlbiBjYWNoZSBkYW5zIGxhIHNvcnRpZSAoZMOpZmF1dCkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjEKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIHN1cHByaW3DqXMgZGFucyBsYSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjMKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImFmZmljaGVyIGxlcyBmaWNoaWVycyBtb2RpZmnDqXMgZGFucyBsYSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjUKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImFmZmljaGVyIGxlcyBhdXRyZXMgZmljaGllcnMgZGFucyBsYSBzb3J0aWUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjcKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZpY2hpZXJzIGlnbm9yw6lzIGRhbnMgbGEgc29ydGllIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDMwCittc2dpZCAic2hvdyBzdGFnZWQgY29udGVudHMnIG9iamVjdCBuYW1lIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImFmZmljaGVyIGxlcyBub20gZGVzIG9iamV0cyBpbmRleMOpcyBkYW5zIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzMgorbXNnaWQgInNob3cgZmlsZXMgb24gdGhlIGZpbGVzeXN0ZW0gdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQiCittc2dzdHIgIiIKKyJhZmZpY2hlciBsZXMgZmljaGllcnMgZHUgc3lzdMOobWUgZGUgZmljaGllcnMgcXVpIG9udCBiZXNvaW4gZCfDqnRyZSBzdXBwcmltw6lzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDM0Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIG5vbXMgZGVzIHLDqXBlcnRvaXJlcyAnb3RoZXInIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDM3Cittc2dpZCAiZG9uJ3Qgc2hvdyBlbXB0eSBkaXJlY3RvcmllcyIKK21zZ3N0ciAibmUgcGFzIGFmZmljaGVyIGxlcyByw6lwZXJ0b2lyZXMgdmlkZXMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDAKK21zZ2lkICJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImFmZmljaGVyIGxlcyBmaWNoaWVycyBub24gZnVzaW9ubsOpcyBkYW5zIGxhIHNvcnRpZSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0MgorbXNnaWQgInNob3cgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIgorbXNnc3RyICJhZmZpY2hlciBsJ2luZm9ybWF0aW9uIHJlc29sdi11bmRvIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQ0Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICJzYXV0ZXIgbGVzIGZpY2hpZXJzIGNvcnJlc3BvbmRhbnQgYXUgbW90aWYiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDcKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICJsZXMgbW90aWZzIGQnZXhjbHVzaW9uIHNvbnQgbHVzIGRlcHVpcyA8ZmljaGllcj4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTAKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAibGlyZSBkZXMgbW90aWZzIGQnZXhjbHVzaW9uIGFkZGl0aW9ubmVscyBwYXIgcsOpcGVydG9pcmUgZGFucyA8ZmljaGllcj4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTIKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICJham91dGVyIGxlcyBleGNsdXNpb25zIGdpdCBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1NQorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJhZmZpY2hlciBlbiByZWxhdGlmIHBhciByYXBwb3J0IGF1IHLDqXBlcnRvaXJlIHJhY2luZSBkdSBwcm9qZXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTgKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgInNpIHVuIDxmaWNoaWVyPiBuJ2VzdCBwYXMgZGFucyBsJ2luZGV4LCB0cmFpdGVyIGNlbGEgY29tbWUgdW5lIGVycmV1ciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1OQorbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICJhcmJyZSBvdSBhcHBhcmVudMOpIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYwCittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAiIgorImNvbnNpZMOpcmVyIHF1ZSBsZXMgY2hlbWlucyBzdXBwcmltw6lzIGRlcHVpcyA8YXJicmUgb3UgYXBwYXJlbnTDqT4gc29udCAiCisidG91am91cnMgcHLDqXNlbnRzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYyCittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGRvbm7DqWVzIGRlIGTDqWJvZ2FnZSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MjgKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8YXJicmUgb3UgYXBwYXJlbnTDqT4gWzxjaGVtaW4+Li4uXSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI3Cittc2dpZCAib25seSBzaG93IHRyZWVzIgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIGFyYnJlcyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI5Cittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICJwYXJjb3VyaXIgbGVzIHNvdXMtYXJicmVzIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzEKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICJhZmZpY2hlciBsZXMgYXJicmVzIGVuIGxlcyBwYXJjb3VyYW50IgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzQKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJ0ZXJtaW5lciBsZXMgw6lsw6ltZW50cyBhdmVjIHVuIG9jdGV0IE5VTCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiaW5jbHVyZSBsYSB0YWlsbGUgZCdvYmpldCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM3IGJ1aWx0aW4vbHMtdHJlZS5jOjEzOQorbXNnaWQgImxpc3Qgb25seSBmaWxlbmFtZXMiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgbm9tcyBkZSBmaWNoaWVycyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQyCittc2dpZCAidXNlIGZ1bGwgcGF0aCBuYW1lcyIKK21zZ3N0ciAidXRpbGlzZXIgbGVzIG5vbXMgZGUgY2hlbWlucyBjb21wbGV0cyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ0Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICIiCisiYWZmaWNoZXIgbCdhcmJyZSBlbnRpZXIgOyBwYXMgc2V1bGVtZW50IGxlIHLDqXBlcnRvaXJlIGNvdXJhbnQgKGltcGxpcXVlIC0tIgorImZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ2Cittc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIDxtc2c+IEhFQUQgPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSA8bWVzc2FnZT4gSEVBRCA8Y29tbWl0PiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ3Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6MTAwCittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJsZSBjb21tdXRhdGV1ciBgbScgYSBiZXNvaW4gZCd1bmUgdmFsZXVyIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIkltcG9zc2libGUgZGUgdHJvdXZlciBsYSBzdHJhdMOpZ2llIGRlIGZ1c2lvbiAnJXMnLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkxlcyBzdHJhdMOpZ2llcyBkaXNwb25pYmxlcyBzb250IDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkxlcyBzdHJhdMOpZ2llcyBwZXJzb25uYWxpc8OpZXMgc29udCA6IgorCisjOiBidWlsdGluL21lcmdlLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjExOQorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciB1biBkaWZmc3RhdCDDoCBsYSBmaW4gZGUgbGEgZnVzaW9uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk2IGJ1aWx0aW4vcHVsbC5jOjEyMgorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAiYWZmaWNoZXIgdW4gZGlmZnN0YXQgw6AgbGEgZmluIGRlIGxhIGZ1c2lvbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NyBidWlsdGluL3B1bGwuYzoxMjUKK21zZ2lkICIoc3lub255bSB0byAtLXN0YXQpIgorbXNnc3RyICIoc3lub255bWUgZGUgLS1zdGF0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5OSBidWlsdGluL3B1bGwuYzoxMjgKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJham91dGVyIChhdSBwbHVzIDxuPikgw6lsw6ltZW50cyBkdSBqb3VybmFsIGNvdXJ0IGF1IG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBkZSAiCisibGEgZnVzaW9uIgorCisjOiBidWlsdGluL21lcmdlLmM6MjAyIGJ1aWx0aW4vcHVsbC5jOjEzMQorbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICJjcsOpZXIgdW5lIHZhbGlkYXRpb24gdW5pcXVlIGF1IGxpZXUgZGUgZmFpcmUgdW5lIGZ1c2lvbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNCBidWlsdGluL3B1bGwuYzoxMzQKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgImVmZmVjdHVlciB1bmUgdmFsaWRhdGlvbiBzaSBsYSBmdXNpb24gcsOpdXNzaXQgKGTDqWZhdXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA2IGJ1aWx0aW4vcHVsbC5jOjEzNworbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAiw6lkaXRlciBsZSBtZXNzYWdlIGF2YW50IGxhIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDcKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICJhdXRvcmlzZXIgbCdhdmFuY2UgcmFwaWRlIChkw6lmYXV0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwOSBidWlsdGluL3B1bGwuYzoxNDMKK21zZ2lkICJhYm9ydCBpZiBmYXN0LWZvcndhcmQgaXMgbm90IHBvc3NpYmxlIgorbXNnc3RyICJhYmFuZG9ubmVyIHNpIGwnYXZhbmNlIHJhcGlkZSBuJ2VzdCBwYXMgcG9zc2libGUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTMKK21zZ2lkICJWZXJpZnkgdGhhdCB0aGUgbmFtZWQgY29tbWl0IGhhcyBhIHZhbGlkIEdQRyBzaWduYXR1cmUiCittc2dzdHIgIlbDqXJpZmllciBxdWUgbGEgdmFsaWRhdGlvbiBhIHVuZSBzaWduYXR1cmUgR1BHIHZhbGlkZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNCBidWlsdGluL25vdGVzLmM6NzY3IGJ1aWx0aW4vcHVsbC5jOjE0OAorIzogYnVpbHRpbi9yZXZlcnQuYzo4OQorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICJzdHJhdMOpZ2llIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE1IGJ1aWx0aW4vcHVsbC5jOjE0OQorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAic3RyYXTDqWdpZSBkZSBmdXNpb24gw6AgdXRpbGlzZXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTYgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJvcHRpb249dmFsZXVyIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE3IGJ1aWx0aW4vcHVsbC5jOjE1MworbXNnaWQgIm9wdGlvbiBmb3Igc2VsZWN0ZWQgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIm9wdGlvbiBwb3VyIGxhIHN0cmF0w6lnaWUgZGUgZnVzaW9uIHPDqWxlY3Rpb25uw6llIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE5Cittc2dpZCAibWVyZ2UgY29tbWl0IG1lc3NhZ2UgKGZvciBhIG5vbi1mYXN0LWZvcndhcmQgbWVyZ2UpIgorbXNnc3RyICIiCisibWVzc2FnZSBkZSB2YWxpZGF0aW9uIGRlIGxhIGZ1c2lvbiAocG91ciB1bmUgZnVzaW9uIHNhbnMgYXZhbmNlIHJhcGlkZSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMjMKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiYWJhbmRvbm5lciBsYSBmdXNpb24gZW4gY291cnMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTEKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBsYW5jZXIgbGUgcmVtaXNhZ2UuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU2Cittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZHUgcmVtaXNhZ2UiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAicGFzIHVuIG9iamV0IHZhbGlkZSA6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgwIGJ1aWx0aW4vbWVyZ2UuYzoyOTcKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICJyZWFkLXRyZWUgYSDDqWNob3XDqSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMyNworbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKHJpZW4gw6AgY29tcHJlc3NlcikiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJWYWxpZGF0aW9uIGNvbXByZXNzw6llIC0tIEhFQUQgbm9uIG1pc2Ugw6Agam91clxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQ0IGJ1aWx0aW4vbWVyZ2UuYzo3NjMgYnVpbHRpbi9tZXJnZS5jOjk3NQorIzogYnVpbHRpbi9tZXJnZS5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ8OpY3JpcmUgZGFucyAnJXMnIgorCisjOiBidWlsdGluL21lcmdlLmM6MzcyCittc2dpZCAiV3JpdGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICLDiWNyaXR1cmUgZGUgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM3NAorbXNnaWQgIkZpbmlzaGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICJGaW5pdGlvbiBkZSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiUGFzIGRlIG1lc3NhZ2UgZGUgZnVzaW9uIC0tIHBhcyBkZSBtaXNlIMOgIGpvdXIgZGUgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiclcycgbmUgcG9pbnRlIHBhcyBzdXIgdW4gY29tbWl0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIk1hdXZhaXNlIGNoYcOubmUgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyA6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NjU2Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBnw6lyZXIgYXV0cmUgY2hvc2UgcXVlIGxhIGZ1c2lvbiBkZSBkZXV4IHTDqnRlcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiT3B0aW9ucyBpbmNvbm51ZSBwb3VyIG1lcmdlLXJlY3Vyc2l2ZSA6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgbGlyZSBkZXB1aXMgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJQYXMgZGUgdmFsaWRhdGlvbiBkZSBsYSBmdXNpb24gOyB1dGlsaXNleiAnZ2l0IGNvbW1pdCcgcG91ciB0ZXJtaW5lciBsYSAiCiAiZnVzaW9uLlxuIgotIlNvdWhhaXRlei12b3VzIGV4w6ljdXRlciBnaXQgY2l0b29sIHBvdXIgbGUgcsOpc291ZHJlID8iCiAKLSM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKLW1zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKLW1zZ3N0ciAiQXVjdW4gY2hhbmdlbWVudCBjb21taXTDqSIKLQotIzogZ2l0azo5NTkzCi0jLCBmdXp6eSwgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBpcyBub3QgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZXZlcnQgaXQ/IgotbXNnc3RyICIiCi0iTGUgQ29tbWl0ICVzIGVzdCBkw6lqw6AgaW5jbHVzIGRhbnMgbGEgYnJhbmNoZSAlcyAtLSBsZSByw6ktYXBwbGlxdWVyIG1hbGdyw6kgIgotInRvdXQ/IgotCi0jOiBnaXRrOjk1OTgKLSMsIGZ1enp5Ci1tc2dpZCAiUmV2ZXJ0aW5nIgotbXNnc3RyICJSw6lpbml0aWFsaXNhdGlvbiIKLQotIzogZ2l0azo5NjA2Ci0jLCBmdXp6eSwgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9tZXJnZS5jOjc4NworIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgotImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKIG1zZ3N0ciAiIgotIkxhIGN1ZWlsbGV0dGUgKGNoZXJyeS1waWNrKSBhIMOpY2hvdcOpZSDDoCBjYXVzZSBkZSBtb2RpZmljYXRpb25zIGxvY2FsZXMgZHUgIgotImZpY2hpZXIgJyVzJy5cbiIKLSJWZXVpbGxleiBjb21taXRlciwgcsOpaW5pdGlhbGlzZXIgb3Ugc3Rhc2hlciB2b3MgY2hhbmdlbWVudHMgZXQgZXNzYXllciBkZSAiCi0ibm91dmVhdS4iCisiVmV1aWxsZXogZW50cmVyIHVuIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiBwb3VyIGV4cGxpcXVlciBlbiBxdW9pIGNldHRlIGZ1c2lvbiAiCisiZXN0XG4iCisibsOpY2Vzc2FpcmUsIHN1cnRvdXQgc2kgY2VsYSBmdXNpb25uZSB1bmUgYnJhbmNoZSBhbW9udCBtaXNlIMOgIGpvdXIgZGFucyB1bmUgIgorImJyYW5jaGUgZGUgc3VqZXQuXG4iCisiXG4iCisiTGVzIGxpZ25lcyBjb21tZW7Dp2FudCBwYXIgJyVjJyBzZXJvbnQgaWdub3LDqWVzLCBldCB1biBtZXNzYWdlIHZpZGVcbiIKKyJhYmFuZG9ubmUgbGEgdmFsaWRhdGlvbi5cbiIKIAotIzogZ2l0azo5NjEwCi0jLCBmdXp6eQorIzogYnVpbHRpbi9tZXJnZS5jOjgxMQorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiTWVzc2FnZSBkZSB2YWxpZGF0aW9uIHZpZGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiTWVydmVpbGxldXguXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorIkxhIGZ1c2lvbiBhdXRvbWF0aXF1ZSBhIMOpY2hvdcOpIDsgcsOpZ2xleiBsZXMgY29uZmxpdHMgZXQgdmFsaWRleiBsZSAiCisicsOpc3VsdGF0LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1bmUgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkzNQorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiUGFzIGRlIGJyYW5jaGUgY291cmFudGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM3Cittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJQYXMgZGUgYnJhbmNoZSBkaXN0YW50ZSBwb3VyIGxhIGJyYW5jaGUgY291cmFudGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM5Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJQYXMgZGUgYnJhbmNoZSBhbW9udCBwYXIgZMOpZmF1dCBkw6lmaW5pZSBwb3VyIGxhIGJyYW5jaGUgY291cmFudGUuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHJlbW90ZS10cmFja2luZyBicmFuY2ggZm9yICVzIGZyb20gJXMiCittc2dzdHIgIlBhcyBkZSBicmFuY2hlIGRlIHN1aXZpIHBvdXIgJXMgZGVwdWlzICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmZXJtZXIgJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMDgKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIklsIG4neSBhIHBhcyBkZSBmdXNpb24gw6AgYWJhbmRvbm5lciAoTUVSR0VfSEVBRCBtYW5xdWFudCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIyNAogbXNnaWQgIiIKLSJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCi0iIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKIG1zZ3N0ciAiIgotIkxhIGN1ZWlsbGV0dGUgKGNoZXJyeS1waWNrKSBhIMOpY2hvdcOpZSDDoCBjYXVzZSBkJ3VuIGNvbmZsaXQgbG9ycyBkJ3VuZSAiCi0iZnVzaW9uLlxuIgotIlNvdWhhaXRlei12b3VzIGV4w6ljdXRlciBnaXQgY2l0b29sIHBvdXIgbGUgcsOpc291ZHJlID8iCisiVm91cyBuJ2F2ZXogcGFzIHRlcm1pbsOpIHZvdHJlIGZ1c2lvbiAoTUVSR0VfSEVBRCBleGlzdGUpLlxuIgorIlZldWlsbGV6IHZhbGlkZXIgdm9zIG1vZGlmaWNhdGlvbnMgYXZhbnQgZGUgcG91dm9pciBmdXNpb25uZXIuIgogCi0jOiBnaXRrOjk2NTMKLW1zZ2lkICJDb25maXJtIHJlc2V0IgotbXNnc3RyICJDb25maXJtZXIgbGEgcsOpaW5pdGlhbGlzYXRpb24iCi0KLSM6IGdpdGs6OTY1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCi1tc2dzdHIgIlLDqWluaXRpYWxpc2VyIGxhIGJyYW5jaGUgJXMgw6AgJXM/IgotCi0jOiBnaXRrOjk2NTcKLW1zZ2lkICJSZXNldCB0eXBlOiIKLW1zZ3N0ciAiVHlwZSBkZSByw6lpbml0aWFsaXNhdGlvbiA6IgotCi0jOiBnaXRrOjk2NjAKLW1zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKLW1zZ3N0ciAiRG91Y2UgOiBMYWlzc2UgbGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBldCBsJ2luZGV4IGludGFjdHMiCi0KLSM6IGdpdGs6OTY2MwotbXNnaWQgIk1peGVkOiBMZWF2ZSB3b3JraW5nIHRyZWUgdW50b3VjaGVkLCByZXNldCBpbmRleCIKLW1zZ3N0ciAiIgotIkh5YnJpZGUgOiBMYWlzc2UgbGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBkYW5zIHNvbiDDqXRhdCBjb3VyYW50LCAiCi0icsOpaW5pdGlhbGlzZSBsJ2luZGV4IgotCi0jOiBnaXRrOjk2NjYKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjMxCiBtc2dpZCAiIgotIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKLSIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgogbXNnc3RyICIiCi0iRHVyZSA6IFLDqWluaXRpYWxpc2UgbGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBldCBsJ2luZGV4XG4iCi0iKGFiYW5kb25uZSBUT1VTIGxlcyBjaGFuZ2VtZW50cyBsb2NhdXgpIgorIlZvdXMgbidhdmV6IHBhcyB0ZXJtaW7DqSB2b3RyZSBwaWNvcmFnZSAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdGUpLlxuIgorIlZldWlsbGV6IHZhbGlkZXIgdm9zIG1vZGlmaWNhdGlvbnMgYXZhbnQgZGUgcG91dm9pciBmdXNpb25uZXIuIgogCi0jOiBnaXRrOjk2ODMKLW1zZ2lkICJSZXNldHRpbmciCi1tc2dzdHIgIlLDqWluaXRpYWxpc2F0aW9uIgorIzogYnVpbHRpbi9tZXJnZS5jOjEyMzQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIlZvdXMgbidhdmV6IHBhcyB0ZXJtaW7DqSB2b3RyZSBwaWNvcmFnZSAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdGUpLiIKIAotIyBGaXhtZTogUsOpY3Vww6lyYXRpb24gZXN0LWlsIHZyYWltZW50IHVuZSBtYXV2YWlzZSB0cmFkdWN0aW9uPwotIzogZ2l0azo5NzQzCi0jLCBmdXp6eQotbXNnaWQgIkNoZWNraW5nIG91dCIKLW1zZ3N0ciAiUsOpY3Vww6lyYXRpb24iCisjOiBidWlsdGluL21lcmdlLmM6MTI0MworbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICJWb3VzIG5lIHBvdXZleiBwYXMgY29tYmluZXIgLS1zcXVhc2ggYXZlYyAtLW5vLWZmLiIKIAotIzogZ2l0azo5Nzk2Ci1tc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGEgYnJhbmNoZSBlbiBjb3VycyIKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjUxCittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIiIKKyJQYXMgZGUgdmFsaWRhdGlvbiBzcMOpY2lmacOpZSBldCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBuJ2VzdCBwYXMgZMOpZmluaS4iCiAKLSM6IGdpdGs6OTgwMgotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9tZXJnZS5jOjEyNjgKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAiTGEgdmFsaWRhdGlvbiBjb21wcmVzc8OpZSB2ZXJzIHVuZSB0w6p0ZSB2aWRlIG4nZXN0IHBhcyBlbmNvcmUgc3VwcG9ydMOpZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNzAKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAiVW5lIHZhbGlkYXRpb24gc2FucyBhdmFuY2UgcmFwaWRlIG4nYSBwYXMgZGUgc2VucyBkYW5zIHVuZSB0w6p0ZSB2aWRlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICIlcyAtIHBhcyBwb3NzaWJsZSBkZSBmdXNpb25uZXIgY2VjaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNzgKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisiUG9zc2libGUgZGUgZnVzaW9ubmVyIGV4YWN0ZW1lbnQgdW5lIHNldWxlIHZhbGlkYXRpb24gZGFucyB1bmUgdMOqdGUgdmlkZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiTGEgdmFsaWRhdGlvbiAlcyBhIHVuZSBzaWduYXR1cmUgR1BHIG5vbiBmaWFibGUsIHByw6l0ZW5kdW1lbnQgcGFyICVzLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIkxhIHZhbGlkYXRpb24gJXMgYSB1bmUgbWF1dmFpc2Ugc2lnbmF0dXJlIEdQRyBwcsOpdGVuZHVtZW50IHBhciAlcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIkxhIHZhbGlkYXRpb24gJXMgbidhIHBhcyBkZSBzaWduYXR1cmUgR1BHLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSBieSAlc1xuIgorbXNnc3RyICJMYSB2YWxpZGF0aW9uICVzIGEgdW5lIHNpZ25hdHVyZSBHUEcgY29ycmVjdGUgcGFyICVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICJNaXNlIMOgIGpvdXIgJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICJFc3NhaSBkZSBmdXNpb24gdnJhaW1lbnQgdHJpdmlhbGUgZGFucyBsJ2luZGV4Li4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vcGUuXG4iCittc2dzdHIgIk5vbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MDEKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIlBhcyBwb3NzaWJsZSBkJ2F2YW5jZXIgcmFwaWRlbWVudCwgYWJhbmRvbi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTI0IGJ1aWx0aW4vbWVyZ2UuYzoxNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICJSZXRvdXIgZGUgbCdhcmJyZSDDoCBsJ29yaWdpbmFsLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICJFc3NhaSBkZSBsYSBzdHJhdMOpZ2llIGRlIGZ1c2lvbiAlcy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiQXVjdW5lIHN0cmF0w6lnaWUgZGUgZnVzaW9uIG4nYSBwcmlzIGVuIGNoYXJnZSBsYSBmdXNpb24uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJMYSBmdXNpb24gYXZlYyBsYSBzdHJhdMOpZ2llICVzIGEgw6ljaG91w6kuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICJVdGlsaXNhdGlvbiBkZSAlcyBwb3VyIHByw6lwYXJlciBsYSByw6lzb2x1dGlvbiDDoCBsYSBtYWluLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisiTGEgZnVzaW9uIGF1dG9tYXRpcXVlIGEgcsOpdXNzaSA7IHN0b3Bww6llIGF2YW50IGxhIHZhbGlkYXRpb24gY29tbWUgZGVtYW5kw6lcbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjkKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzAKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPHZhbGlkYXRpb24+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPHZhbGlkYXRpb24+IDx2YWxpZGF0aW9uPiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyw6lmw6lyZW5jZT4gWzx2YWxpZGF0aW9uPl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIxNAorbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAiYWZmaWNoZXIgdG91cyBsZXMgYW5jw6p0cmVzIGNvbW11bnMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIxNgorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAidHJvdXZlciBsZXMgYW5jw6p0cmVzIHBvdXIgdW5lIGZ1c2lvbiBzaW1wbGUgw6AgbiBwb2ludHMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIxOAorbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgcsOpdmlzaW9ucyBpbmFjY2Vzc2libGVzIGRlcHVpcyBsZXMgYXV0cmVzIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjAKK21zZ2lkICJpcyB0aGUgZmlyc3Qgb25lIGFuY2VzdG9yIG9mIHRoZSBvdGhlcj8iCittc2dzdHIgImVzdCBsZSBwcmVtaWVyIGFuY8OqdHJlIGRlIGwnYXV0cmUgPyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjIyCittc2dpZCAiZmluZCB3aGVyZSA8Y29tbWl0PiBmb3JrZWQgZnJvbSByZWZsb2cgb2YgPHJlZj4iCittc2dzdHIgInRyb3V2ZXIgb8O5IDx2YWxpZGF0aW9uPiBhIGRpdmVyZ8OpIGR1IHJlZmxvZyBkZSA8csOpZsOpcmVuY2U+IgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo4CiBtc2dpZCAiIgotIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKLSJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgogbXNnc3RyICIiCi0iTGVzIGNvbW1pdHMgZGUgbGEgYnJhbmNoZSAlcyBuZSBzb250IGRhbnMgYXVjdW5lIGF1dHJlIGJyYW5jaGUuXG4iCi0iVm91bGV6LXZvdXMgdnJhaW1lbnQgc3VwcHJpbWVyIGNldHRlIGJyYW5jaGUgJXMgPyIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5vbTE+IFstTCA8b3JpZz4gWy1MIDxub20yPl1dXSA8ZmljaGllcjE+ICIKKyI8ZmljaGllci1vcmlnPiA8ZmljaGllcjI+IgogCi0jOiBnaXRrOjk4MzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCi1tc2dzdHIgIlRhZ3MgZXQgaGVhZHMgOiAlcyIKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjMzCittc2dpZCAic2VuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiZW52b3llciBsZXMgcsOpc3VsdGF0cyBzdXIgbGEgc29ydGllIHN0YW5kYXJkIgogCi0jOiBnaXRrOjk4NTAKLW1zZ2lkICJGaWx0ZXIiCi1tc2dzdHIgIkZpbHRyZXIiCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNAorbXNnaWQgInVzZSBhIGRpZmYzIGJhc2VkIG1lcmdlIgorbXNnc3RyICJ1dGlsaXNlciB1bmUgZnVzaW9uIGJhc8OpZSBzdXIgZGlmZjMiCiAKLSM6IGdpdGs6MTAxNDYKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM1Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICJwb3VyIGxlcyBjb25mbGl0cywgdXRpbGlzZXIgbm90cmUgdmVyc2lvbiAob3VyKSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAicG91ciBsZXMgY29uZmxpdHMsIHV0aWxpc2VyIGxldXIgdmVyc2lvbiAodGhlaXIpIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozOQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBhIHVuaW9uIHZlcnNpb24iCittc2dzdHIgInBvdXIgbGVzIGNvbmZsaXRzLCB1dGlsaXNlciBsJ2Vuc2VtYmxlIGRlcyB2ZXJzaW9ucyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDIKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAicG91ciBsZXMgY29uZmxpdHMsIHV0aWxpc2VyIGNldHRlIHRhaWxsZSBkZSBtYXJxdWV1ciIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDMKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgIm5lIHBhcyBhdmVydGlyIMOgIHByb3BvcyBkZXMgY29uZmxpdHMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICJkw6lmaW5pciBsZXMgbGFiZWxzIHBvdXIgZmljaGllcjEvZmljaGllci1vcmlnL2ZpY2hpZXIyIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY0Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTAKK21zZ2lkICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIKK21zZ3N0ciAibCdlbnRyw6llIHNlIHRlcm1pbmUgcGFyIE5VTCIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTEgYnVpbHRpbi93cml0ZS10cmVlLmM6MjQKK21zZ2lkICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgImF1dG9yaXNlciBsZXMgb2JqZXRzIG1hbnF1YW50cyIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTIKK21zZ2lkICJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiCittc2dzdHIgImF1dG9yaXNlciBsYSBjcsOpYXRpb24gZGUgcGx1cyBkJ3VuIGFyYnJlIgorCisjOiBidWlsdGluL212LmM6MTUKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCisKKyM6IGJ1aWx0aW4vbXYuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIkxlIHLDqXBlcnRvaXJlICVzIGVzdCBkYW5zIGwnaW5kZXggZXQgcG91cnRhbnQgYXVjdW4gc291cy1tb2R1bGUgPyIKKworIzogYnVpbHRpbi9tdi5jOjcxCittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJWZXVpbGxleiBpbmRleGVyIHZvcyBtb2RpZmljYXRpb25zIGRlIC5naXRtb2R1bGVzIG91IGxlcyByZW1pc2VyIHBvdXIgIgorImNvbnRpbnVlciIKKworIzogYnVpbHRpbi9tdi5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgaW4gaW5kZXgiCittc2dzdHIgIiUuKnMgZXN0IGRhbnMgbCdpbmRleCIKKworIzogYnVpbHRpbi9tdi5jOjExMQorbXNnaWQgImZvcmNlIG1vdmUvcmVuYW1lIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiZm9yY2VyIGxlIGTDqXBsYWNlbWVudC9yZW5vbW1hZ2UgbcOqbWUgc2kgbGEgY2libGUgZXhpc3RlIgorCisjOiBidWlsdGluL212LmM6MTEyCittc2dpZCAic2tpcCBtb3ZlL3JlbmFtZSBlcnJvcnMiCittc2dzdHIgInNhdXRlciBsZXMgZXJyZXVycyBkZSBkw6lwbGFjZW1lbnQvcmVub21tYWdlIgorCisjOiBidWlsdGluL212LmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICJsYSBkZXN0aW5hdGlvbiAnJXMnIG4nZXN0IHBhcyB1biByw6lwZXJ0b2lyZSIKKworIzogYnVpbHRpbi9tdi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIlbDqXJpZmljYXRpb24gZHUgcmVub21tYWdlIGRlICclcycgZW4gJyVzJ1xuIgorCisjOiBidWlsdGluL212LmM6MTY2Cittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAibWF1dmFpc2Ugc291cmNlIgorCisjOiBidWlsdGluL212LmM6MTY5Cittc2dpZCAiY2FuIG5vdCBtb3ZlIGRpcmVjdG9yeSBpbnRvIGl0c2VsZiIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBkw6lwbGFjZXIgdW4gcsOpcGVydG9pcmUgZGFucyBsdWktbcOqbWUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzIKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGTDqXBsYWNlciB1biByw6lwZXJ0b2lyZSBzdXIgdW4gZmljaGllciIKKworIzogYnVpbHRpbi9tdi5jOjE4MQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgImxlIHLDqXBlcnRvaXJlIHNvdXJjZSBlc3QgdmlkZSIKKworIzogYnVpbHRpbi9tdi5jOjIwNgorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgInBhcyBzb3VzIGxlIGNvbnRyw7RsZSBkZSB2ZXJzaW9uIgorCisjOiBidWlsdGluL212LmM6MjA5Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICJsYSBkZXN0aW5hdGlvbiBleGlzdGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAiw6ljcmFzZW1lbnQgZGUgJyVzJyIKKworIzogYnVpbHRpbi9tdi5jOjIyMAorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgIkltcG9zc2libGUgZCfDqWNyYXNlciIKKworIzogYnVpbHRpbi9tdi5jOjIyMworbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAibXVsdGlwbGVzIHNvdXJjZXMgcG91ciBsYSBtw6ptZSBkZXN0aW5hdGlvbiIKKworIzogYnVpbHRpbi9tdi5jOjIyNQorbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAibGUgcsOpcGVydG9pcmUgZGUgZGVzdGluYXRpb24gbidleGlzdGUgcGFzIgorCisjOiBidWlsdGluL212LmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKKworIzogYnVpbHRpbi9tdi5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICJSZW5vbW1hZ2UgZGUgJXMgZW4gJXNcbiIKKworIzogYnVpbHRpbi9tdi5jOjI1NiBidWlsdGluL3JlbW90ZS5jOjcyMiBidWlsdGluL3JlcGFjay5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibGUgcmVub21tYWdlIGRlICclcycgYSDDqWNob3XDqSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjI1NQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIDx2YWxpZGF0aW9uPi4uLiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjI1NgorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjU3Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLXN0ZGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzA5Cittc2dpZCAicHJpbnQgb25seSBuYW1lcyAobm8gU0hBLTEpIgorbXNnc3RyICJhZmZpY2hlciBzZXVsZW1lbnQgbGVzIG5vbXMgKHBhcyBkZSBTSEEtMSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTAKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgInV0aWxpc2VyIHNldWxlbWVudCBsZXMgw6l0aXF1ZXR0ZXMgcG91ciBub21tZXIgbGVzIHZhbGlkYXRpb25zIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzEyCittc2dpZCAib25seSB1c2UgcmVmcyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgInV0aWxpc2VyIHNldWxlbWVudCBsZXMgcsOpZsOpcmVuY2VzIGNvcnJlc3BvbmRhbnQgw6AgPG1vdGlmPiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxNAorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgIiIKKyJhZmZpY2hlciB0b3V0ZXMgbGVzIHZhbGlkYXRpb25zIGFjY2Vzc2libGVzIGRlcHVpcyB0b3V0ZXMgbGVzIHLDqWbDqXJlbmNlcyIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxNQorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGlyZSBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzE2Cittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICJhdXRvcmlzZXIgbCdhZmZpY2hhZ2UgZGVzIG5vbXMgYG5vbiBkw6lmaW5pc2AgKHBhciBkw6lmYXV0KSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMyMgorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICJkw6lyw6lmw6lyZW5jZXIgbGVzIMOpdGlxdWV0dGVzIGVuIGVudHLDqWUgKHVzYWdlIGludGVybmUpIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8csOpZsOpcmVuY2VzLW5vdGVzPl0gW2xpc3QgWzxvYmplY3Q+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNgogbXNnaWQgIiIKLSJFcnJvciByZWFkaW5nIGNvbW1pdCB0b3BvbG9neSBpbmZvcm1hdGlvbjsgYnJhbmNoIGFuZCBwcmVjZWRpbmcvZm9sbG93aW5nICIKLSJ0YWcgaW5mb3JtYXRpb24gd2lsbCBiZSBpbmNvbXBsZXRlLiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKIG1zZ3N0ciAiIgotIkVycmV1ciDDoCBsYSBsZWN0dXJlIGRlcyBpbmZvcm1hdGlvbnMgc3VyIGxhIHRvcG9sb2dpZSBkZXMgY29tbWl0cywgbGVzICIKLSJpbmZvcm1hdGlvbnMgc3VyIGxlcyBicmFuY2hlcyBldCBsZXMgdGFncyBwcsOpY8OpZGVudHMvc3VpdmFudHMgc2Vyb250ICIKLSJpbmNvbXBsw6h0ZXMuIgorImdpdCBub3RlcyBbLS1yZWYgPHLDqWbDqXJlbmNlcy1ub3Rlcz5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1lc3NhZ2U+ICIKKyJ8IC1GIDxmaWNoaWVyPiB8ICgtYyB8IC1DKSA8b2JqZXQ+XSBbPG9iamV0Pl0iCiAKLSM6IGdpdGs6MTExMjMKLW1zZ2lkICJUYWciCi1tc2dzdHIgIlRhZyIKLQotIzogZ2l0azoxMTEyNwotbXNnaWQgIklkIgotbXNnc3RyICJJZCIKLQotIzogZ2l0azoxMTIxMAotbXNnaWQgIkdpdGsgZm9udCBjaG9vc2VyIgotbXNnc3RyICJTw6lsZWN0ZXVyIGRlIHBvbGljZSBkZSBHaXRrIgotCi0jOiBnaXRrOjExMjI3Ci1tc2dpZCAiQiIKLW1zZ3N0ciAiQiIKLQotIzogZ2l0azoxMTIzMAotbXNnaWQgIkkiCi1tc2dzdHIgIkkiCi0KLSM6IGdpdGs6MTEzNDgKLW1zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCi1tc2dzdHIgIk9wdGlvbnMgZCdhZmZpY2hhZ2UgZGUgbGEgbGlzdGUgZGVzIGNvbW1pdHMiCi0KLSM6IGdpdGs6MTEzNTEKLW1zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCi1tc2dzdHIgIkxvbmd1ZXVyIG1heGltdW0gZHUgZ3JhcGhlIChsaWduZXMpIgotCi0jIEZJWE1FIDogVHJhZHVjdGlvbiBzdGFuZGFyZCBkZSAicGFuZSI/Ci0jOiBnaXRrOjExMzU1Ci0jLCBmdXp6eSwgbm8tdGNsLWZvcm1hdAotbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCi1tc2dzdHIgIkxvbmd1ZXVyIG1heGltdW0gZHUgZ3JhcGhlICglIGR1IHBhbm5lYXUpIgotCi0jOiBnaXRrOjExMzU4Ci1tc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgotbXNnc3RyICJNb250cmVyIGxlcyBjaGFuZ2VtZW50cyBsb2NhdXgiCi0KLSM6IGdpdGs6MTEzNjEKLSMsIGZ1enp5Ci1tc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKLW1zZ3N0ciAiU8OpbGVjdGlvbiBhdXRvLiBkdSBTSEExIgotCi0jOiBnaXRrOjExMzY1Ci1tc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKLW1zZ3N0ciAiQ2FjaGVyIGxlcyByZWZzIGRpc3RhbnRlcyIKLQotIzogZ2l0azoxMTM2OQotbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgotbXNnc3RyICJPcHRpb25zIGQnYWZmaWNoYWdlIGRlcyBkaWZmIgotCi0jOiBnaXRrOjExMzcxCi1tc2dpZCAiVGFiIHNwYWNpbmciCi1tc2dzdHIgIlRhaWxsZSBkZXMgdGFidWxhdGlvbnMiCi0KLSM6IGdpdGs6MTEzNzQKLSMsIGZ1enp5Ci1tc2dpZCAiRGlzcGxheSBuZWFyYnkgdGFncy9oZWFkcyIKLW1zZ3N0ciAiQWZmaWNoZXIgbGVzIHRhZ3MgbGVzIHBsdXMgcHJvY2hlcyIKLQotIzogZ2l0azoxMTM3NwotbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCisjOiBidWlsdGluL25vdGVzLmM6MjcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKIG1zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHLDqWbDqXJlbmNlcy1ub3Rlcz5dIGNvcHkgWy1mXSA8ZGVwdWlzLW9iamV0PiA8dmVycy1vYmpldD4iCiAKLSM6IGdpdGs6MTEzODAKLW1zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCi1tc2dzdHIgIkxpbWl0ZXIgbGVzIGRpZmbDqXJlbmNlcyBhdXggY2hlbWlucyBsaXN0w6lzIgorIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwgIgorIigtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPHLDqWbDqXJlbmNlcy1ub3Rlcz5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtZXNzYWdlPiB8IC0iCisiRiA8ZmljaGllcj4gfCAoLWMgfCAtQykgPG9iamV0Pl0gWzxvYmpldD5dIgogCi0jOiBnaXRrOjExMzgzCi1tc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCi1tc2dzdHIgIlN1cHBvcnQgcG91ciB1biBlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgcGFyIGZpY2hpZXIiCisjOiBidWlsdGluL25vdGVzLmM6MjkKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyw6lmw6lyZW5jZXMtbm90ZXM+XSBlZGl0IFstLWFsbG93LWVtcHR5XSBbPG9iamV0Pl0iCiAKLSM6IGdpdGs6MTEzODkgZ2l0azoxMTUzNgotbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKLW1zZ3N0ciAiT3V0aWwgZGlmZiBleHRlcm5lIgorIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyw6lmw6lyZW5jZXMtbm90ZXM+XSBzaG93IFs8b2JqZXQ+XSIKIAotIzogZ2l0azoxMTM5MAotbXNnaWQgIkNob29zZS4uLiIKLW1zZ3N0ciAiQ2hvaXNpci4uLiIKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8csOpZsOpcmVuY2VzLW5vdGVzPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXTDqWdpZT4gXSAiCisiPHLDqWbDqXJlbmNlcy1ub3Rlcz4iCiAKLSM6IGdpdGs6MTEzOTUKLSMsIGZ1enp5CisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzMKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPHLDqWbDqXJlbmNlcy1ub3Rlcz5dIHJlbW92ZSBbPG9iamV0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbiB8IC12XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8csOpZsOpcmVuY2VzLW5vdGVzPl0gcHJ1bmUgWy1uIHwgLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxyw6lmw6lyZW5jZXMtbm90ZXM+XSBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbbGlzdCBbPG9iamV0Pl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDYKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmpldD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NTEKK21zZ2lkICJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+IgorbXNnc3RyICJnaXQgbm90ZXMgY29weSBbPG9wdGlvbnM+XSA8ZGVwdWlzLW9iamV0PiA8dmVycy1vYmpldD4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MgorbXNnaWQgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIgorbXNnc3RyICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZGVwdWlzLW9iamV0PiA8dmVycy1vYmpldD5dLi4uIgorCisjOiBidWlsdGluL25vdGVzLmM6NTcKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmpldD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjIKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPG9iamV0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NworbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFs8b2JqZXQ+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjcyCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIFs8b3B0aW9ucz5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPHLDqWbDqXJlbmNlcy1ub3Rlcz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OQorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamV0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NAorbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODkKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgZMOpbWFycmVyICdzaG93JyBwb3VyIGwnb2JqZXQgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MQorbXNnaWQgImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiCittc2dzdHIgImltcG9zc2libGUgZGUgbGlyZSBsYSBzb3J0aWUgZGUgJ3Nob3cnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5pc2ggJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBmaW5pciAnc2hvdycgcG91ciBsJ29iamV0ICclcyciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNzQgYnVpbHRpbi90YWcuYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgImltcG9zc2libGUgZGUgY3LDqWVyIGxlIGZpY2hpZXIgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5MworbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiVmV1aWxsZXogZm91cm5pciBsZSBjb250ZW51IGRlIGxhIG5vdGUgZW4gdXRpbGlzYW50IGwnb3B0aW9uIC1tIG91IC1GIgorCisjOiBidWlsdGluL25vdGVzLmM6MjAyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsJ29iamV0IG5vdGUiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG5vdGUgY29udGVudHMgaGF2ZSBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgIkxlIGNvbnRlbnUgZGUgbGEgbm90ZSBhIMOpdMOpIGxhaXNzw6kgZGFucyAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIzMiBidWlsdGluL3RhZy5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIzNCBidWlsdGluL3RhZy5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgImltcG9zc2libGUgZCdvdXZyaXIgb3UgbGlyZSAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUzIGJ1aWx0aW4vbm90ZXMuYzozMDQgYnVpbHRpbi9ub3Rlcy5jOjMwNgorIzogYnVpbHRpbi9ub3Rlcy5jOjM2NiBidWlsdGluL25vdGVzLmM6NDIxIGJ1aWx0aW4vbm90ZXMuYzo1MDcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTIgYnVpbHRpbi9ub3Rlcy5jOjU5MCBidWlsdGluL25vdGVzLmM6NjUzCisjOiBidWlsdGluL25vdGVzLmM6ODc3IGJ1aWx0aW4vdGFnLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSAnJXMnIGNvbW1lIHVuZSByw6lmw6lyZW5jZSB2YWxpZGUuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBsaXJlIGwnb2JqZXQgJyVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbm90ZSBkYXRhIGZyb20gbm9uLWJsb2Igb2JqZWN0ICclcycuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgbGVzIGluZm9ybWF0aW9ucyBkZSBub3RlIGQndW4gb2JqZXQgbm9uLWJsb2IgJyVzJy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTkgYnVpbHRpbi9ub3Rlcy5jOjQxNCBidWlsdGluL25vdGVzLmM6NDkwCisjOiBidWlsdGluL25vdGVzLmM6NTAyIGJ1aWx0aW4vbm90ZXMuYzo1NzggYnVpbHRpbi9ub3Rlcy5jOjY0NgorIzogYnVpbHRpbi9ub3Rlcy5jOjk0MgorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgInRyb3AgZGUgcGFyYW3DqHRyZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzIgYnVpbHRpbi9ub3Rlcy5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICJQYXMgZGUgbm90ZSB0cm91dsOpZSBwb3VyIGwnb2JqZXQgJXMuIgorCisjOiBidWlsdGluL25vdGVzLmM6MzkzIGJ1aWx0aW4vbm90ZXMuYzo1NTYKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICJjb250ZW51IGRlIGxhIG5vdGUgc291cyBmb3JtZSBkZSBjaGHDrm5lIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzk2IGJ1aWx0aW4vbm90ZXMuYzo1NTkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAiY29udGVudSBkZSBsYSBub3RlIGRhbnMgdW4gZmljaGllciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5OCBidWlsdGluL25vdGVzLmM6NDAxIGJ1aWx0aW4vbm90ZXMuYzo1NjEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NjQgYnVpbHRpbi90YWcuYzo2MzAKK21zZ2lkICJvYmplY3QiCittc2dzdHIgIm9iamV0IgorCisjOiBidWlsdGluL25vdGVzLmM6Mzk5IGJ1aWx0aW4vbm90ZXMuYzo1NjIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgInLDqXV0aWxpc2VyIGV0IMOpZGl0ZXIgbCdvYmpldCBkZSBub3RlIHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDIgYnVpbHRpbi9ub3Rlcy5jOjU2NQorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAicsOpdXRpbGlzZXIgbCdvYmpldCBkZSBub3RlIHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDUgYnVpbHRpbi9ub3Rlcy5jOjU2OAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAicGVybWV0dHJlIGRlIHN0b2NrZXIgdW5lIG5vdGUgdmlkZSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwNiBidWlsdGluL25vdGVzLmM6NDc3Cittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAicmVtcGxhY2VyIGxlcyBub3RlcyBleGlzdGFudGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6NDMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgYWRkIG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ2Fqb3V0ZXIgZGVzIG5vdGVzLiBEZXMgbm90ZXMgb250IMOpdMOpIHRyb3V2w6llcyBwb3VyIGwnb2JqZXQgJXMuICIKKyJVdGlsaXNleiAnLWYnIHBvdXIgw6ljcmFzZXIgbGVzIG5vdGVzIGV4aXN0YW50ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDYgYnVpbHRpbi9ub3Rlcy5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIsOJY3Jhc2VtZW50IGRlcyBub3RlcyBleGlzdGFudGVzIHBvdXIgbCdvYmpldCAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDU3IGJ1aWx0aW4vbm90ZXMuYzo2MTggYnVpbHRpbi9ub3Rlcy5jOjg4MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyBub3RlIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGUgbGEgbm90ZSBwb3VyIGwnb2JqZXQgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3OAorbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICJsaXJlIGxlcyBvYmpldHMgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ4MAorbXNnaWQgImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzIC0tc3RkaW4pIgorbXNnc3RyICIiCisiY2hhcmdlciBsYSBjb25maWd1cmF0aW9uIGRlIHLDqcOpY3JpdHVyZSBwb3VyIDxjb21tYW5kZT4gKGltcGxpcXVlIC0tc3RkaW4pIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICJwYXMgYXNzZXogZGUgcGFyYW3DqHRyZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSBjb3BpZXIgZGVzIG5vdGVzLiBEZXMgbm90ZXMgb250IMOpdMOpIHRyb3V2w6llcyBwb3VyIGwnb2JqZXQgJXMuICIKKyJVdGlsaXNleiAnLWYnIHBvdXIgw6ljcmFzZXIgbGVzIG5vdGVzIGV4aXN0YW50ZXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIk5vdGVzIG1hbnF1YW50ZXMgc3VyIGwnb2JqZXQgc291cmNlICVzLiBJbXBvc3NpYmxlIGRlIGNvcGllci4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorIkxlcyBvcHRpb25zIC1tLy1GLy1jLy1DIHNvbnQgb2Jzb2zDqHRlcyBwb3VyIGxhIHNvdXMtY29tbWFuZGUgJ2VkaXQnLlxuIgorIlZldWlsbGV6IHV0aWxpc2VyICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyDDoCBsYSBwbGFjZS5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2NAogbXNnaWQgIkdlbmVyYWwgb3B0aW9ucyIKLW1zZ3N0ciAiR8OpbsOpcmVyIGxlIHBhdGNoIgorbXNnc3RyICJPcHRpb25zIGfDqW7DqXJhbGVzIgogCi0jOiBnaXRrOjExMzk4Ci1tc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgotbXNnc3RyICIiCisjOiBidWlsdGluL25vdGVzLmM6NzY2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkZSBmdXNpb24iCiAKLSM6IGdpdGs6MTE0MDAKLW1zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgotbXNnc3RyICIiCi0KLSM6IGdpdGs6MTE0MDIKLW1zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKLW1zZ3N0ciAiIgotCi0jOiBnaXRrOjExNDEzCi1tc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCi1tc2dzdHIgIkNvdWxldXJzIDogY2xpcXVlciBwb3VyIGNob2lzaXIiCi0KLSM6IGdpdGs6MTE0MTYKLW1zZ2lkICJJbnRlcmZhY2UiCi1tc2dzdHIgIiIKLQotIzogZ2l0azoxMTQxNwotIywgZnV6enkKLW1zZ2lkICJpbnRlcmZhY2UiCi1tc2dzdHIgIlBvbGljZSBkZSBsJ2ludGVyZmFjZSB1dGlsaXNhdGV1ciIKLQotIzogZ2l0azoxMTQyMAotbXNnaWQgIkJhY2tncm91bmQiCi1tc2dzdHIgIkFycmnDqHJlLXBsYW4iCi0KLSM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQotbXNnaWQgImJhY2tncm91bmQiCi1tc2dzdHIgImFycmnDqHJlLXBsYW4iCi0KLSM6IGdpdGs6MTE0MjQKLW1zZ2lkICJGb3JlZ3JvdW5kIgotbXNnc3RyICJQcmVtaWVyIHBsYW4iCi0KLSM6IGdpdGs6MTE0MjUKLW1zZ2lkICJmb3JlZ3JvdW5kIgotbXNnc3RyICJwcmVtaWVyIHBsYW4iCi0KLSM6IGdpdGs6MTE0MjgKLW1zZ2lkICJEaWZmOiBvbGQgbGluZXMiCi1tc2dzdHIgIkRpZmYgOiBhbmNpZW5uZXMgbGlnbmVzIgotCi0jOiBnaXRrOjExNDI5Ci1tc2dpZCAiZGlmZiBvbGQgbGluZXMiCi1tc2dzdHIgImRpZmYgYW5jaWVubmVzIGxpZ25lcyIKLQotIzogZ2l0azoxMTQzMwotbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKLW1zZ3N0ciAiRGlmZiA6IG5vdXZlbGxlcyBsaWduZXMiCi0KLSM6IGdpdGs6MTE0MzQKLW1zZ2lkICJkaWZmIG5ldyBsaW5lcyIKLW1zZ3N0ciAiZGlmZiBub3V2ZWxsZXMgbGlnbmVzIgotCi0jOiBnaXRrOjExNDM4Ci1tc2dpZCAiRGlmZjogaHVuayBoZWFkZXIiCi1tc2dzdHIgIkRpZmYgOiBlbnTDqnRlIGR1IGh1bmsiCi0KLSM6IGdpdGs6MTE0NDAKLW1zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgotbXNnc3RyICJkaWZmIDogZW50w6p0ZSBkdSBodW5rIgotCi0jOiBnaXRrOjExNDQ0Ci1tc2dpZCAiTWFya2VkIGxpbmUgYmciCi1tc2dzdHIgIkFycmnDqHJlLXBsYW4gZGUgbGEgbGlnbmUgbWFycXXDqWUiCi0KLSM6IGdpdGs6MTE0NDYKLW1zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgotbXNnc3RyICJBcnJpw6hyZS1wbGFuIGRlIGxhIGxpZ25lIG1hcnF1w6llIgotCi0jOiBnaXRrOjExNDUwCi1tc2dpZCAiU2VsZWN0IGJnIgotbXNnc3RyICJTw6lsZWN0aW9ubmVyIGwnYXJyacOocmUtcGxhbiIKLQotIzogZ2l0azoxMTQ1OQotbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCi1tc2dzdHIgIlBvbGljZXMgOiBjbGlxdWVyIHBvdXIgY2hvaXNpciIKLQotIzogZ2l0azoxMTQ2MQotbXNnaWQgIk1haW4gZm9udCIKLW1zZ3N0ciAiUG9saWNlIHByaW5jaXBhbGUiCi0KLSM6IGdpdGs6MTE0NjIKLW1zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKLW1zZ3N0ciAiUG9saWNlIGQnYWZmaWNoYWdlIGRlcyBkaWZmIgotCi0jOiBnaXRrOjExNDYzCi1tc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKLW1zZ3N0ciAiUG9saWNlIGRlIGwnaW50ZXJmYWNlIHV0aWxpc2F0ZXVyIgotCi0jOiBnaXRrOjExNDg1Ci1tc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKLW1zZ3N0ciAiUHLDqWbDqXJlbmNlcyBkZSBHaXRrIgotCi0jOiBnaXRrOjExNDk0Ci0jLCBmdXp6eQotbXNnaWQgIkdlbmVyYWwiCi1tc2dzdHIgIkfDqW7DqXJlciIKLQotIzogZ2l0azoxMTQ5NQotbXNnaWQgIkNvbG9ycyIKLW1zZ3N0ciAiIgotCi0jOiBnaXRrOjExNDk2Ci1tc2dpZCAiRm9udHMiCi1tc2dzdHIgIiIKLQotIzogZ2l0azoxMTU0NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCi1tc2dzdHIgIkdpdGsgOiBjaG9pc2lyIGxhIGNvdWxldXIgZGUgJXMiCi0KLSM6IGdpdGs6MTIwNTkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKIG1zZ2lkICIiCi0iU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCi0iIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCisicmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuIHN0cmF0ZWd5IChtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vIgorImNhdF9zb3J0X3VuaXEpIgogbXNnc3RyICIiCi0iRMOpc29sw6ksIGdpdGsgbmUgcGV1dCDDqnRyZSBleMOpY3V0w6kgYXZlYyBjZXR0ZSB2ZXJzaW9uIGRlIFRjbC9Uay5cbiIKLSIgR2l0ayByZXF1aWVydCBUY2wvVGsgdmVyc2lvbiA4LjQgb3Ugc3Vww6lyaWV1ci4iCisicsOpc291ZHJlIGxlcyBjb25mbGl0cyBkZSBub3RlcyBlbiB1dGlsaXNhbnQgbGEgc3RyYXTDqWdpZSBkb25uw6llIChtYW51YWwvb3Vycy8iCisidGhlaXJzL3VuaW9uL2NhdF9zb3J0X3VuaXEpIgogCi0jOiBnaXRrOjEyMjY5Ci1tc2dpZCAiQ2Fubm90IGZpbmQgYSBnaXQgcmVwb3NpdG9yeSBoZXJlLiIKLW1zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIHVuIGTDqXDDtHQgZ2l0IGljaS4iCisjOiBidWlsdGluL25vdGVzLmM6NzcwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiVmFsaWRhdGlvbiBkZXMgbm90ZXMgbm9uIGZ1c2lvbm7DqWVzIgogCi0jOiBnaXRrOjEyMzE2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgotbXNnc3RyICJBcmd1bWVudCAnJXMnIGFtYmlndSA6IMOgIGxhIGZvaXMgdW5lIHLDqXZpc2lvbiBldCB1biBub20gZGUgZmljaGllciIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzIKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICJmaW5hbGlzZXIgbGEgZnVzaW9uIGRlIG5vdGVzIGVuIHZhbGlkYW50IGxlcyBub3RlcyBub24gZnVzaW9ubsOpZXMiCiAKLSM6IGdpdGs6MTIzMjgKLW1zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgotbXNnc3RyICJBcmd1bWVudHMgaW52YWxpZGVzIHBvdXIgZ2l0ayA6IgorIzogYnVpbHRpbi9ub3Rlcy5jOjc3NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIkFiYW5kb24gZGUgbGEgcsOpc29sdXRpb24gZGUgZnVzaW9uIGRlcyBub3RlcyIKIAotI34gbXNnaWQgIlNIQTEgSUQ6ICIKLSN+IG1zZ3N0ciAiSUQgU0hBMSA6IgorIzogYnVpbHRpbi9ub3Rlcy5jOjc3NgorbXNnaWQgImFib3J0IG5vdGVzIG1lcmdlIgorbXNnc3RyICJhYmFuZG9ubmVyIGxhIGZ1c2lvbiBkZSBub3RlcyIKIAotI34gbXNnaWQgIm5leHQiCi0jfiBtc2dzdHIgInN1aXZhbnQiCisjOiBidWlsdGluL25vdGVzLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICJVbmUgZnVzaW9uIGRlIG5vdGVzIGRhbnMgJXMgZXN0IGTDqWrDoCBlbiBjb3VycyBhdmVjICVzIgogCi0jfiBtc2dpZCAicHJldiIKLSN+IG1zZ3N0ciAicHLDqWPDqWRlbnQiCisjOiBidWlsdGluL25vdGVzLmM6ODgwCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICJMJ29iamV0ICVzIG4nYSBwYXMgZGUgbm90ZVxuIgogCi0jfiBtc2dpZCAiQ0RhdGUiCi0jfiBtc2dzdHIgIkNEYXRlIgorIzogYnVpbHRpbi9ub3Rlcy5jOjg5MgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAiIgorImxhIHRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuZSBub3RlIG5vbiBleGlzdGFudGUgbidlc3QgcGFzIHVuZSBlcnJldXIiCiAKLSN+IG1zZ2lkICItIHN0b3BwaW5nXG4iCi0jfiBtc2dzdHIgIi0gYXJyw6p0IGVuIGNvdXJzXG4iCisjOiBidWlsdGluL25vdGVzLmM6ODk1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImxpcmUgbGVzIG5vbXMgZCdvYmpldCBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgogCi0jfiBtc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKLSN+IG1zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlIHLDqXBlcnRvaXJlIGdpdCBcIiVzXCIuIgorIzogYnVpbHRpbi9ub3Rlcy5jOjk3NgorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAicsOpZsOpcmVuY2VzLW5vdGVzIgorCisjOiBidWlsdGluL25vdGVzLmM6OTc3Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgInV0aWxpc2VyIGxlcyBub3RlcyBkZXB1aXMgPHLDqWbDqXJlbmNlcy1ub3Rlcz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDEyIGJ1aWx0aW4vcmVtb3RlLmM6MTU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICJTb3VzLWNvbW1hbmRlIGluY29ubnVlIDogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgW29wdGlvbnMuLi5dIFs8IDxsaXN0ZS1yw6lmw6lyZW5jZXM+IHwgPCA8bGlzdGUtIgorIm9iamV0cz5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5Cittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIFtvcHRpb25zLi4uXSBiYXNlLW5hbWUgWzwgPGxpc3RlLXLDqWbDqXJlbmNlcz4gfCA8IDxsaXN0ZS0iCisib2JqZXRzPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTc1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAiZXJyZXVyIGRlIGNvbXByZXNzaW9uICglZCkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NzcxCittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICLDiWNyaXR1cmUgZGVzIG9iamV0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDExCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIiIKKyJkw6lzYWN0aXZhdGlvbiBkZSBsJ8OpY3JpdHVyZSBlbiBiaXRtYXAgY2FyIGNlcnRhaW5zIG9iamV0cyBuZSBzb250IHBhcyAiCisiY29tcHJlc3PDqXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE3MQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIkNvbXByZXNzaW9uIGRlcyBvYmpldHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICJ2ZXJzaW9uIGQnaW5kZXggbm9uIHN1cHBvcnTDqWUgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICJtYXV2YWlzZSB2ZXJzaW9uIGQnaW5kZXggJyVzJyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjAyCittc2dpZCAiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIm5lIHBhcyBhZmZpY2hlciBsYSBiYXJyZSBkZSBwcm9ncmVzc2lvbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjA0Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAiYWZmaWNoZXIgbGEgYmFycmUgZGUgcHJvZ3Jlc3Npb24iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYwNgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICJhZmZpY2hlciBsYSBiYXJyZSBkZSBwcm9ncmVzc2lvbiBkdXJhbnQgbGEgcGhhc2UgZCfDqWNyaXRlIGRlcyBvYmpldHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYwOQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAic2ltaWxhaXJlIMOgIC0tYWxsLXByb2dyZXNzIHF1YW5kIGxhIGJhcnJlIGRlIHByb2dyZXNzaW9uIGVzdCBhZmZpY2jDqWUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxMAorbXNnaWQgInZlcnNpb25bLG9mZnNldF0iCittc2dzdHIgInZlcnNpb25bLG9mZnNldF0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxMQorbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIiIKKyLDqWNyaXJlIGxlIGZpY2hpZXIgZCdpbmRleCBkdSBwYXF1ZXQgZGFucyBsZSBmb3JtYXQgZCdpbmRleCBkZSB2ZXJzaW9uICIKKyJzcMOpY2lmacOpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICJ0YWlsbGUgbWF4aW11bSBkZSBjaGFxdWUgZmljaGllciBwYXF1ZXQgZW4gc29ydGllIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTYKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgImlnbm9yZXIgbGVzIG9iamV0cyBlbXBydW50w6lzIMOgIHVuIGF1dHJlIG1hZ2FzaW4gZCdvYmpldHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxOAorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiaWdub3JlciBsZXMgb2JqZXRzIGVtcGFxdWV0w6lzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjAKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICJsaW1pdGVyIGxhIGZlbsOqdHJlIGQnZW1wYXF1ZXRhZ2UgcGFyIG9iamV0cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjIyCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAiIgorImxpbWl0ZXIgbGEgZmVuw6p0cmUgZCdlbXBhcXVldGFnZSBwYXIgbcOpbW9pcmUgZW4gcGx1cyBkZSBsYSBsaW1pdGUgZCdvYmpldHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyNAorbXNnaWQgIm1heGltdW0gbGVuZ3RoIG9mIGRlbHRhIGNoYWluIGFsbG93ZWQgaW4gdGhlIHJlc3VsdGluZyBwYWNrIgorbXNnc3RyICIiCisibG9uZ3VldXIgbWF4aW11bSBkZSBsYSBjaGHDrm5lIGRlIGRlbHRhIGF1dG9yaXPDqWUgZGFucyBsZSBwYXF1ZXQgcsOpc3VsdGFudCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjI2Cittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICJyw6l1dGlsaXNlciBsZXMgZGVsdGFzIGV4aXN0YW50cyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjI4Cittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAicsOpdXRpbGlzZXIgbGVzIG9iamV0cyBleGlzdGFudHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzMAorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAidXRpbGlzZXIgbGVzIG9iamV0cyBPRlNfREVMVEEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzMgorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgIiIKKyJ1dGlsaXNlciBkZXMgZmlscyBsb3JzIGRlIGxhIHJlY2hlcmNoZSBwb3VyIHVuZSBtZWlsbGV1cnMgY29ycmVzcG9uZGFuY2UgZGVzICIKKyJkZWx0YXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzNAorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgIm5lIHBhcyBjcsOpZXIgdW4gcGFxdWV0IHZpZGUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzNgorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImxpcmUgbGVzIHBhcmFtw6h0cmVzIGRlIHLDqXZpc2lvbiBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzgKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAibGltaXRlciBsZXMgb2JqZXRzIMOgIGNldXggcXVpIG5lIHNvbnQgcGFzIGVuY29yZSBlbXBhcXVldMOpcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQxCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgImluY2x1cmUgbGVzIG9iamV0cyBhY2Nlc3NpYmxlcyBkZXB1aXMgdG91dGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0NAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIKK21zZ3N0ciAiaW5jbHVyZSBsZXMgb2JqZXRzIHLDqWbDqXJlbmPDqXMgcGFyIGxlcyDDqWzDqW1lbnRzIGRlIHJlZmxvZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQ3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAiaW5jbHVyZSBsZXMgb2JqZXRzIHLDqWbDqXJlbmPDqXMgcGFyIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1MAorbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAiYWZmaWNoZXIgbCdlbXBhcXVldGFnZSBzdXIgbGEgc29ydGllIHN0YW5kYXJkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTIKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgImluY2x1cmUgbGVzIG9iamV0cyBkJ8OpdGlxdWV0dGVzIHF1aSByw6lmw6hyZW50IMOgIGRlcyBvYmpldHMgw6AgZW1wYXF1ZXRlciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU0Cittc2dpZCAia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICJnYXJkZXIgbGVzIG9iamV0cyBpbmFjY2Vzc2libGVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTUgcGFyc2Utb3B0aW9ucy5oOjE0MgorbXNnaWQgInRpbWUiCittc2dzdHIgImhldXJlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTYKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZMOpcGFxdWV0ZXIgbGVzIG9iamV0cyBpbmFjY2Vzc2libGVzIHBsdXMgcsOpY2VudHMgcXVlIDxoZXVyZT4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICJjcsOpZXIgZGVzIHBhcXVldHMgbMOpZ2VycyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjYxCittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgImNyw6llciBkZXMgcGFxdWV0cyBwZXJtZXR0YW50IGRlcyByw6ljdXDDqXJhdGlvbnMgc3VwZXJmaWNpZWxsZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2MworbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgImlnbm9yZXIgbGVzIHBhcXVldHMgcXVpIG9udCB1biBmaWNoaWVyIC5rZWVwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjUKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICJuaXZlYXUgZGUgY29tcHJlc3Npb24gZHUgcGFxdWV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjcKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAibmUgcGFzIGNhY2hlciBsZXMgdmFsaWRhdGlvbnMgcGFyIGdyZWZmZXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2OQorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorInV0aWxpc2VyIHVuIGluZGV4IGVuIGJpdG1hcCBzaSBkaXNwb25pYmxlIHBvdXIgYWNjw6lsZXJlciBsZSBkw6ljb21wdGUgZGVzICIKKyJvYmpldHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY3MQorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgIsOpY3JpcmUgdW4gaW5kZXggZW4gYml0bWFwIGFzc29jacOpIMOgIGwnaW5kZXggZGUgcGFxdWV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3NjIKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICJEw6ljb21wdGUgZGVzIG9iamV0cyIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo2Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNAorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAiZW1wYXF1ZXRlciB0b3V0IgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE1Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgIsOpbGltaW5lciBsZXMgcsOpZsOpcmVuY2VzIHBlcmR1ZXMgKGTDqWZhdXQpIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjcKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MAorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICJTdXBwcmVzc2lvbiBkZXMgb2JqZXRzIGR1cGxpcXXDqXMiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMQorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1leHBpcmUgPGhldXJlPl0gWy0tXSBbPGhlYWQ+Li4uXSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwNSBidWlsdGluL3dvcmt0cmVlLmM6MTIxCittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICJuZSBwYXMgc3VwcHJpbWVyLCBhZmZpY2hlciBzZXVsZW1lbnQiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMDYgYnVpbHRpbi93b3JrdHJlZS5jOjEyMgorbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG9iamV0cyDDqWxpbWluw6lzIgorCisjOiBidWlsdGluL3BydW5lLmM6MTA5IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiZmFpcmUgZXhwaXJlciBsZXMgb2JqZXRzIHBsdXMgdmlldXggcXVlIDxoZXVyZT4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY5Cittc2dpZCAiZ2l0IHB1bGwgW29wdGlvbnNdIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBbPG9wdGlvbnM+XSBbPGTDqXDDtHQ+IFs8c3DDqWNpZmljYXRpb24tZGUtcsOpZsOpcmVuY2U+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjExMworbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICJPcHRpb25zIHJlbGF0aXZlcyDDoCBsYSBmdXNpb24iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjExNgorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAiaW5jb3Jwb3JlciBsZXMgbW9kaWZpY2F0aW9ucyBlbiByZWJhc2FudCBwbHV0w7R0IHF1J2VuIGZ1c2lvbm5hbnQiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0MCBidWlsdGluL3JldmVydC5jOjEwNQorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAiYXV0b3Jpc2VyIGwnYXZhbmNlIHJhcGlkZSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQ2Cittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICJ2w6lyaWZpZXIgcXVlIGxlIGNvbW1pdCBub21tw6kgYSB1bmUgc2lnbmF0dXJlIEdQRyB2YWxpZGUiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2MAorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAiT3B0aW9ucyByZWxhdGl2ZXMgYXUgcmFwYXRyaWVtZW50IgorCisjOiBidWlsdGluL3B1bGwuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgIlZhbGV1ciBpbnZhbGlkZSBwb3VyIHB1bGwuZmYgOiAlcyIKKworIzogYnVpbHRpbi9wdWxsLmM6MzUyCittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSB0aXJlciBhdmVjIHJlYmFzYWdlLiBWb3VzIGF2ZXogZGVzIG1vZGlmaWNhdGlvbnMgbm9uIGluZGV4w6llcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjM1OAorbXNnaWQgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiRGUgcGx1cywgdm90cmUgaW5kZXggY29udGllbnQgZGVzIG1vZGlmaWNhdGlvbnMgbm9uIHZhbGlkw6llcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjM2MAorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiaW1wb3NzaWJsZSBkZSB0aXJlciBhdmVjIHJlYmFzYWdlwqA6IHZvdHJlIGluZGV4IGNvbnRpZW50IGRlcyBtb2RpZmljYXRpb25zICIKKyJub24gdmFsaWTDqWVzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM2Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAiIgorIklsIG4neSBhIHBhcyBkZSBjYW5kaWRhdGUgc3VyIGxhcXVlbGxlIHJlYmFzZXIgcGFybWkgbGVzIHLDqWbDqXJlbmNlcyBxdWUgdm91cyAiCisidmVuZXogZGUgcsOpY3Vww6lyZXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzgKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIklsIG4neSBhIHBhcyBkZSBjYW5kaWRhdGUgYXZlYyBsYXF1ZWxsZSBmdXNpb25uZXIgcGFybWkgbGVzIHLDqWbDqXJlbmNlcyBxdWUgIgorInZvdXMgdmVuZXogZGUgcsOpY3Vww6lyZXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzkKK21zZ2lkICIiCisiR2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCB5b3UgcHJvdmlkZWQgYSB3aWxkY2FyZCByZWZzcGVjIHdoaWNoIGhhZCBub1xuIgorIm1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuIgorbXNnc3RyICIiCisiR8OpbsOpcmFsZW1lbnQsIGNlbGEgc2lnbmlmaWUgcXVlIHZvdXMgYXZleiBpbmRpcXXDqSB1biBzcMOpY2lmaWNhdGV1clxuIgorImRlIHLDqWbDqXJlbmNlIGpva2VyIHF1aSBuJ2EgcGFzIGV1IGRlIGNvcnJlc3BvbmRhbmNlIHN1ciBsZSBzZXJ2ZXVyIGRpc3RhbnQuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBwdWxsIGZyb20gdGhlIHJlbW90ZSAnJXMnLCBidXQgZGlkIG5vdCBzcGVjaWZ5XG4iCisiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGVcbiIKKyJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAiIgorIlZvdXMgYXZleiBkZW1hbmTDqSBkZSB0aXJlciBkZXB1aXMgbGUgZMOpcMO0dCBkaXN0YW50ICclcycsIG1haXMgc2FucyBpbmRpcXVlclxuIgorImxhIGJyYW5jaGUuIENvbW1lIGNlIG4nZXN0IHBhcyBsZSBkw6lww7R0IGRpc3RhbnQgcGFyIGTDqWZhdXQgZGFucyBsYSAiCisiY29uZmlndXJhdGlvblxuIgorInBvdXIgbGEgYnJhbmNoZSBhY3R1ZWxsZSwgdm91cyBkZXZleiBzcMOpY2lmaWVyIGxhIGJyYW5jaGUgYXZlYyBsYSBjb21tYW5kZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIlZvdXMgbifDqnRlcyBhY3R1ZWxsZW1lbnQgc3VyIGF1Y3VuZSBicmFuY2hlLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ5IGJ1aWx0aW4vcHVsbC5jOjQ2NAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIlZldWlsbGV6IHNww6ljaWZpZXIgc3VyIHF1ZWxsZSBicmFuY2hlIHZvdXMgc291aGFpdGVyIHJlYmFzZXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTEgYnVpbHRpbi9wdWxsLmM6NDY2Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIG1lcmdlIHdpdGguIgorbXNnc3RyICJWZXVpbGxleiBzcMOpY2lmaWVyIHVuZSBicmFuY2hlIGF2ZWMgbGFxdWVsbGUgZnVzaW9ubmVyLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcHVsbC5jOjQ2NworbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgIlLDqWbDqXJlei12b3VzIMOgIGdpdC1wdWxsKDEpIHBvdXIgZGUgcGx1cyBhbXBsZXMgZMOpdGFpbHMuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NjIKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiUGFzIGQnaW5mb3JtYXRpb24gZGUgc3VpdmkgZGlzdGFudCBwb3VyIGxhIGJyYW5jaGUgYWN0dWVsbGUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCittc2dzdHIgIiIKKyJTaSB2b3VzIHNvdWhhaXRleiBpbmRpcXVlciBsJ2luZm9ybWF0aW9uIGRlIHN1aXZpIGRpc3RhbnQgcG91ciBjZXR0ZSAiCisiYnJhbmNoZSwgdm91cyBwb3V2ZXogbGUgZmFpcmUgYXZlYyA6XG4iCisiXG4iCisiZ2l0IGJyYW5jaCAtLXNldC11cHRyZWFtLXRvPSVzLzxicmFuY2hlPiAlc1xuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJWb3RyZSBpbmZvcm1hdGlvbiBkZSBjb25maWd1cmF0aW9uIGluZGlxdWUgZGUgZnVzaW9ubmVyIGF2ZWMgbGEgcsOpZsOpcmVuY2UgIgorIiclcydcbiIKKyJkdSBzZXJ2ZXVyIGRpc3RhbnQsIG1haXMgY2V0dGUgcsOpZsOpcmVuY2UgbidhIHBhcyDDqXTDqSByw6ljdXDDqXLDqWUuIgorCisjOiBidWlsdGluL3B1bGwuYzo4MzAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICIiCisiTWlzZSDDoCBqb3VyIGQndW5lIGJyYW5jaGUgbm9uIGVuY29yZSBjcsOpw6llIGF2ZWMgbGVzIGNoYW5nZW1lbnRzIGFqb3V0w6lzIGRhbnMgIgorImwnaW5kZXguIgorCisjOiBidWlsdGluL3B1bGwuYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICIiCisibGEgcsOpY3Vww6lyYXRpb24gYSBtaXMgw6Agam91ciBsYSB0w6p0ZSBkZSBsYSBicmFuY2hlIGFjdHVlbGxlLlxuIgorImF2YW5jZSByYXBpZGUgZGUgdm90cmUgY29waWUgZGUgdHJhdmFpbFxuIgorImRlcHVpcyBsZSBjb21taXQgJXMuIgorCisjOiBidWlsdGluL3B1bGwuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiQXZhbmNlIHJhcGlkZSBkZSB2b3RyZSBhcmJyZSBkZSB0cmF2YWlsIGltcG9zc2libGUuXG4iCisiQXByw6hzIHZvdXMgw6p0cmUgYXNzdXLDqSBxdWUgdG91dGUgbW9kaWZpY2F0aW9uIHByw6ljaWV1c2UgYSDDqXTDqSBzYXV2ZWdhcmTDqWUgIgorImF2ZWNcbiIKKyIkIGdpdCBkaWZmICVzXG4iCisibGFuY2V6XG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisicG91ciByw6lnw6luw6lyZXIuIgorCisjOiBidWlsdGluL3B1bGwuYzo4NzkKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkLiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBmdXNpb25uZXIgZGUgbXVsdGlwbGVzIGJyYW5jaGVzIHN1ciB1bmUgdMOqdGUgdmlkZS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg4MworbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iCittc2dzdHIgIkltcG9zc2libGUgZGUgcmViYXNlciBzdXIgZGUgbXVsdGlwbGVzIGJyYW5jaGVzLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTUKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzxvcHRpb25zPl0gWzxkw6lww7R0PiBbPHNww6ljaWZpY2F0aW9uLWRlLXLDqWbDqXJlbmNlPi4uLl1dIgorCisjOiBidWlsdGluL3B1c2guYzo4NgorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAicmFjY291cmNpIGQnw6l0aXF1ZXR0ZSBzYW5zIDzDqXRpcXVldHRlPiIKKworIzogYnVpbHRpbi9wdXNoLmM6OTYKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgYWNjZXB0ZSBzZXVsZW1lbnQgZGVzIG5vbXMgZW50aWVycyBkZSByw6lmw6lyZW5jZXMgY2libGVzIgorCisjOiBidWlsdGluL3B1c2guYzoxNDAKK21zZ2lkICIiCisiXG4iCisiVG8gY2hvb3NlIGVpdGhlciBvcHRpb24gcGVybWFuZW50bHksIHNlZSBwdXNoLmRlZmF1bHQgaW4gJ2dpdCBoZWxwIGNvbmZpZycuIgorbXNnc3RyICIiCisiXG4iCisiUG91ciBjaG9pc2lyIGwnb3B0aW9uIGRlIG1hbmnDqHJlIHBlcm1hbmVudGUsIHZvaXIgcHVzaC5kZWZhdWx0IGRhbnMgJ2dpdCAiCisiaGVscCBjb25maWcnLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgYW1vbnQgZGUgdm90cmUgYnJhbmNoZSBjb3VyYW50ZSBuZSBjb3JyZXNwb25kIHBhc1xuIgorImF1IG5vbSBkZSB2b3RyZSBicmFuY2hlIGNvdXJhbnRlLiAgUG91ciBwb3Vzc2VyIHZlcnMgbGEgYnJhbmNoZSBhbW9udFxuIgorInN1ciBsZSBzZXJ2ZXVyIGRpc3RhbnQsIHV0aWxpc2V6XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJQb3VyIHBvdXNzZXIgdmVycyBsYSBicmFuY2hlIGR1IG3Dqm1lIG5vbSBzdXIgbGUgc2VydmV1ciBkaXN0YW50LCB1dGlsaXNlelxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorCisjOiBidWlsdGluL3B1c2guYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICIiCisiVm91cyBuJ8OqdGVzIGFjdHVlbGxlbWVudCBzdXIgYXVjdW5lIGJyYW5jaGUuXG4iCisiUG91ciBwb3Vzc2VyIGwnaGlzdG9yaXF1ZSBtZW5hbnQgw6AgbCfDqXRhdCBhY3R1ZWwgKEhFQUQgZMOpdGFjaMOpZSksXG4iCisidXRpbGlzZXpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bm9tLWRlLWxhLWJyYW5jaGUtYW1vbnQ+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorIkxhIGJyYW5jaGUgY291cmFudGUgJXMgbidhIHBhcyBkZSBicmFuY2hlIGFtb250LlxuIgorIlBvdXIgcG91c3NlciBsYSBicmFuY2hlIGNvdXJhbnRlIGV0IGTDqWZpbmlyIGxhIGRpc3RhbnRlIGNvbW1lIGFtb250LCAiCisidXRpbGlzZXpcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICIiCisiTGEgYnJhbmNoZSBjb3VyYW50ZSAlcyBhIGRlIG11bHRpcGxlcyBicmFuY2hlcyBhbW9udCwgaW1wb3NzaWJsZSBkZSBwb3Vzc2VyLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCittc2dzdHIgIiIKKyJWb3VzIMOqdGVzIGVuIHRyYWluIGRlIHBvdXNzZXIgdmVycyBsYSBicmFuY2hlIGRpc3RhbnRlICclcycsIHF1aSBuJ2VzdFxuIgorInBhcyB1bmUgYnJhbmNoZSBhbW9udCBkZSB2b3RyZSBicmFuY2hlIGNvdXJhbnRlICclcycsIHNhbnMgbWUgZGlyZVxuIgorInF1b2kgcG91c3NlciBwb3VyIG1ldHRyZSDDoCBqb3VyIHF1ZWxsZSBicmFuY2hlIGFtb250LiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA2Cittc2dpZCAiIgorInB1c2guZGVmYXVsdCBpcyB1bnNldDsgaXRzIGltcGxpY2l0IHZhbHVlIGhhcyBjaGFuZ2VkIGluXG4iCisiR2l0IDIuMCBmcm9tICdtYXRjaGluZycgdG8gJ3NpbXBsZScuIFRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlXG4iCisiYW5kIG1haW50YWluIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvciwgdXNlOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgYWRvcHQgdGhlIG5ldyBiZWhhdmlvciBub3csIHVzZTpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IHNpbXBsZVxuIgorIlxuIgorIldoZW4gcHVzaC5kZWZhdWx0IGlzIHNldCB0byAnbWF0Y2hpbmcnLCBnaXQgd2lsbCBwdXNoIGxvY2FsIGJyYW5jaGVzXG4iCisidG8gdGhlIHJlbW90ZSBicmFuY2hlcyB0aGF0IGFscmVhZHkgZXhpc3Qgd2l0aCB0aGUgc2FtZSBuYW1lLlxuIgorIlxuIgorIlNpbmNlIEdpdCAyLjAsIEdpdCBkZWZhdWx0cyB0byB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgJ3NpbXBsZSdcbiIKKyJiZWhhdmlvciwgd2hpY2ggb25seSBwdXNoZXMgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBjb3JyZXNwb25kaW5nXG4iCisicmVtb3RlIGJyYW5jaCB0aGF0ICdnaXQgcHVsbCcgdXNlcyB0byB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLlxuIgorIlxuIgorIlNlZSAnZ2l0IGhlbHAgY29uZmlnJyBhbmQgc2VhcmNoIGZvciAncHVzaC5kZWZhdWx0JyBmb3IgZnVydGhlciAiCisiaW5mb3JtYXRpb24uXG4iCisiKHRoZSAnc2ltcGxlJyBtb2RlIHdhcyBpbnRyb2R1Y2VkIGluIEdpdCAxLjcuMTEuIFVzZSB0aGUgc2ltaWxhciBtb2RlXG4iCisiJ2N1cnJlbnQnIGluc3RlYWQgb2YgJ3NpbXBsZScgaWYgeW91IHNvbWV0aW1lcyB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0KSIKK21zZ3N0ciAiIgorInB1c2guZGVmYXVsdCBuJ2VzdCBwYXMgZMOpZmluaSA7IHNhIHZhbGV1ciBpbXBsaWNpdGUgYSBjaGFuZ8OpIGRhbnMgR2l0IDIuMFxuIgorImRlICdtYXRjaGluZycgdmVycyAnc2ltcGxlJy4gUG91ciBzdXBwcmltZXIgY2UgbWVzc2FnZSBldCBtYWludGVuaXJcbiIKKyJsZSBjb21wb3J0ZW1lbnQgYWN0dWVsIGFwcsOocyBsYSBtb2RpZmljYXRpb24gZGUgbGEgdmFsZXVyIGRlIGTDqWZhdXQsICIKKyJ1dGlsaXNleiA6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBtYXRjaGluZ1xuIgorIlxuIgorIlBvdXIgc3VwcHJpbWVyIGNlIG1lc3NhZ2UgZXQgYWRvcHRlciBsZSBub3V2ZWF1IGNvbXBvcnRlbWVudCBtYWludGVuYW50LCAiCisidXRpbGlzZXogOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisiXG4iCisiUXVhbmQgcHVzaC5kZWZhdWx0IHZhdWRyYSAnbWF0Y2hpbmcnLCBnaXQgcG91c3NlcmEgbGVzIGJyYW5jaGVzIGxvY2FsZXNcbiIKKyJzdXIgbGVzIGJyYW5jaGVzIGRpc3RhbnRlcyBxdWkgZXhpc3RlbnQgZMOpasOgIGF2ZWMgbGUgbcOqbWUgbm9tLlxuIgorIlxuIgorIkRlcHVpcyBHaXQgMi4wLCBHaXQgdXRpbGlzZSBwYXIgZMOpZmF1dCBsZSBjb21wb3J0ZW1lbnQgcGx1cyBjb25zZXJ2YXRpZiAiCisiJ3NpbXBsZSdcbiIKKyJxdWkgbmUgcG91c3NlIGxhIGJyYW5jaGUgY291cmFudGUgcXVlIHZlcnMgbGEgYnJhbmNoZSBkaXN0YW50ZSAiCisiY29ycmVzcG9uZGFudGVcbiIKKyJxdWUgJ2dpdCBwdWxsJyB1dGlsaXNlIHBvdXIgbWV0dHJlIMOgIGpvdXIgbGEgYnJhbmNoZSBjb3VyYW50ZS5cbiIKKyIgXG4iCisiVm9pciAnZ2l0IGhlbHAgY29uZmlnJyBldCBjaGVyY2hlciAncHVzaC5kZWZhdWx0JyBwb3VyIHBsdXMgZCdpbmZvcm1hdGlvbi5cbiIKKyIobGUgbW9kZSAnc2ltcGxlJyBhIMOpdMOpIGludHJvZHVpdCBkYW5zIEdpdCAxLjcuMTEuIFV0aWxpc2V6IGxlIG1vZGUgIgorInNpbWlsYWlyZVxuIgorIidjdXJyZW50JyBhdSBsaWV1IGRlICdzaW1wbGUnIHNpIHZvdXMgdXRpbGlzZXogZGUgdGVtcHMgZW4gdGVtcHMgZCdhbmNpZW5uZXMgIgorInZlcnNpb25zIGRlIEdpdCkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MworbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisiVm91cyBuJ2F2ZXogcGFzIHNww6ljaWZpw6kgZGUgc3DDqWNpZmljYXRpb25zIGRlIHLDqWbDqXJlbmNlIMOgIHBvdXNzZXIsIGV0IHB1c2guIgorImRlZmF1bHQgZXN0IFwibm90aGluZ1wiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjgwCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBJbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuXG4iCisiJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiTGVzIG1pc2VzIMOgIGpvdXIgb250IMOpdMOpIHJlamV0w6llcyBjYXIgbGEgcG9pbnRlIGRlIGxhIGJyYW5jaGUgY291cmFudGUgZXN0ICIKKyJkZXJyacOocmVcbiIKKyJzb24gaG9tb2xvZ3VlIGRpc3RhbnQuIEludMOpZ3JleiBsZXMgY2hhbmdlbWVudHMgZGlzdGFudHMgKHBhciBleGVtcGxlICdnaXQgIgorInB1bGwgLi4uJylcbiIKKyJhdmFudCBkZSBwb3Vzc2VyIMOgIG5vdXZlYXUuXG4iCisiVm9pciBsYSAnTm90ZSDDoCBwcm9wb3MgZGVzIGF2YW5jZXMgcmFwaWRlcycgZGFucyAnZ2l0IHB1c2ggLS1oZWxwJyBwb3VyIHBsdXMgIgorImQnaW5mb3JtYXRpb24uIgorCisjOiBidWlsdGluL3B1c2guYzoyODYKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJMZXMgbWlzZXMgw6Agam91ciBvbnQgw6l0w6kgcmVqZXTDqWVzIGNhciBsYSBwb2ludGUgZGUgbGEgYnJhbmNoZSBjb3VyYW50ZSBlc3QgIgorImRlcnJpw6hyZVxuIgorInNvbiBob21vbG9ndWUgZGlzdGFudC4gRXh0cmF5ZXogY2V0dGUgYnJhbmNoZSBldCBJbnTDqWdyZXogbGVzIGNoYW5nZW1lbnRzICIKKyJkaXN0YW50c1xuIgorIihwYXIgZXhlbXBsZSAnZ2l0IHB1bGwgLi4uJykgYXZhbnQgZGUgcG91c3NlciDDoCBub3V2ZWF1LlxuIgorIlZvaXIgbGEgJ05vdGUgw6AgcHJvcG9zIGRlcyBhdmFuY2VzIHJhcGlkZXMnIGRhbnMgJ2dpdCBwdXNoIC0taGVscCcgcG91ciBwbHVzICIKKyJkJ2luZm9ybWF0aW9uLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjkyCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIkxlcyBtaXNlcyDDoCBqb3VyIG9udCDDqXTDqSByZWpldMOpZXMgY2FyIGxhIGJyYW5jaGUgZGlzdGFudGUgY29udGllbnQgZHUgIgorInRyYXZhaWwgcXVlXG4iCisidm91cyBuJ2F2ZXogcGFzIGVuIGxvY2FsLiBDZWNpIGVzdCBnw6luw6lyYWxlbWVudCBjYXVzw6kgcGFyIHVuIGF1dHJlIGTDqXDDtHQgIgorInBvdXNzw6lcbiIKKyJ2ZXJzIGxhIG3Dqm1lIHLDqWbDqXJlbmNlLiBWb3VzIHBvdXJyaWV6IGludMOpZ3JlciBkJ2Fib3JkIGxlcyBjaGFuZ2VtZW50cyAiCisiZGlzdGFudHNcbiIKKyIocGFyIGV4ZW1wbGUgJ2dpdCBwdWxsIC4uLicpIGF2YW50IGRlIHBvdXNzZXIgw6Agbm91dmVhdS5cbiIKKyJWb2lyIGxhICdOb3RlIMOgIHByb3BvcyBkZXMgYXZhbmNlcyByYXBpZGVzJyBkYW5zICdnaXQgcHVzaCAtLWhlbHAnIHBvdXIgcGx1cyAiCisiZCdpbmZvcm1hdGlvbi4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5OQorbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCittc2dzdHIgIiIKKyJMZXMgbWlzZXMgw6Agam91ciBvbnQgw6l0w6kgcmVqZXTDqWVzIGNhciBsJ8OpdGlxdWV0dGUgZXhpc3RlIGTDqWrDoCBkYW5zIGxhICIKKyJicmFuY2hlIGRpc3RhbnRlLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzAyCittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyJWb3VzIG5lIHBvdXZleiBwYXMgbWV0dHJlIMOgIGpvdXIgdW5lIHLDqWbDqXJlbmNlIGRpc3RhbnRlIHF1aSBwb2ludGUgc3VyIHVuICIKKyJvYmpldCBxdWlcbiIKKyJuJ2VzdCBwYXMgdW4gY29tbWl0LCBvdSBtZXR0cmUgw6Agam91ciB1bmUgcsOpZsOpcmVuY2UgZGlzdGFudGUgcG91ciBsYSBmYWlyZSAiCisicG9pbnRlclxuIgorInZlcnMgdW4gb2JqZXQgcXVpIG4nZXN0IHBhcyB1biBjb21taXQsIHNhbnMgdXRpbGlzZXIgbCdvcHRpb24gJy0tZm9yY2UnLlxuIgorCisjOiBidWlsdGluL3B1c2guYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICJQb3Vzc8OpZSB2ZXJzICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSBwb3Vzc2VyIGRlcyByw6lmw6lyZW5jZXMgdmVycyAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAibWF1dmFpcyBkw6lww7R0ICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NgorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisiUGFzIGRlIGRlc3RpbmF0aW9uIHBvdXIgcG91c3Nlci5cbiIKKyJTcMOpY2lmaWV6IHVuZSBVUkwgZGVwdWlzIGxhIGxpZ25lIGRlIGNvbW1hbmRlIG91IGNvbmZpZ3VyZXogdW4gZMOpcMO0dCBkaXN0YW50ICIKKyJlbiB1dGlsaXNhbnRcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5vbT4gPHVybD5cbiIKKyJcbiIKKyJldCBwb3Vzc2V6IGFsb3JzIGVuIHV0aWxpc2FudCBsZSBkw6lww7R0IGRpc3RhbnRcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5vbT5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDExCittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCBldCAtLXRhZ3Mgc29udCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3B1c2guYzo0MTIKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLWFsbCBuZSBwZXV0IHBhcyDDqnRyZSBjb21iaW7DqSBhdmVjIGRlcyBzcMOpY2lmaWNhdGlvbnMgZGUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxNworbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3IgZXQgLS10YWdzIHNvbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NDE4Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiLS1taXJyb3IgbmUgcGV1dCBwYXMgw6p0cmUgY29tYmluw6kgYXZlYyBkZXMgc3DDqWNpZmljYXRpb25zIGRlIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL3B1c2guYzo0MjMKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgZXQgLS1taXJyb3Igc29udCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3B1c2guYzo1MzkKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICJkw6lww7R0IgorCisjOiBidWlsdGluL3B1c2guYzo1NDAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICJwb3Vzc2VyIHRvdXRlcyBsZXMgcsOpZsOpcmVuY2VzIgorCisjOiBidWlsdGluL3B1c2guYzo1NDEgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjMKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgInJlZmzDqXRlciB0b3V0ZXMgbGVzIHLDqWbDqXJlbmNlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzCittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgInN1cHByaW1lciBsZXMgcsOpZsOpcmVuY2VzIgorCisjOiBidWlsdGluL3B1c2guYzo1NDQKK21zZ2lkICJwdXNoIHRhZ3MgKGNhbid0IGJlIHVzZWQgd2l0aCAtLWFsbCBvciAtLW1pcnJvcikiCittc2dzdHIgIiIKKyJwb3Vzc2VyIGxlcyDDqXRpcXVldHRlcyAobmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgYXZlYyAtLWFsbCBvdSAtLW1pcnJvcikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NyBidWlsdGluL3NlbmQtcGFjay5jOjE2NAorbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgImZvcmNlciBsZXMgbWlzZXMgw6Agam91ciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAicmVmbmFtZT46PGV4cGVjdCIKK21zZ3N0ciAibm9tIGRlIHLDqWbDqXJlbmNlPjo8YXR0ZW5kdSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc2Cittc2dpZCAicmVxdWlyZSBvbGQgdmFsdWUgb2YgcmVmIHRvIGJlIGF0IHRoaXMgdmFsdWUiCittc2dzdHIgImV4aWdlciBxdWUgbCdhbmNpZW5uZSB2YWxldXIgZGUgbGEgcsOpZsOpcmVuY2Ugc29pdCDDoCBjZXR0ZSB2YWxldXIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MworbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIHB1c2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAiY29udHLDtGxlciBsYSBwb3Vzc8OpZSByw6ljdXJzaXZlIGRlcyBzb3VzLW1vZHVsZXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NSBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgInV0aWxpc2VyIHVuIGVtcGFxdWV0YWdlIGzDqWdlciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2IGJ1aWx0aW4vcHVzaC5jOjU1NyBidWlsdGluL3NlbmQtcGFjay5jOjE1OAorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNTkKK21zZ2lkICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIKK21zZ3N0ciAicmVjZXZvaXIgbGUgcHJvZ3JhbW1lIGQnZW1wYXF1ZXRhZ2UiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OAorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvc3RhdHVzIgorbXNnc3RyICJkw6lmaW5pciBsYSBicmFuY2hlIGFtb250IHBvdXIgZ2l0IHB1bGwvc3RhdHVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NjEKK21zZ2lkICJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIKK21zZ3N0ciAiw6lsaW1pbmVyIGxlcyByw6lmw6lyZW5jZXMgbG9jYWxlcyBzdXBwcmltw6llcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYzCittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgIsOpdml0ZXIgZCd1dGlsaXNlciBsZSBjcm9jaGV0IHByZS1wdXNoIgorCisjOiBidWlsdGluL3B1c2guYzo1NjQKK21zZ2lkICJwdXNoIG1pc3NpbmcgYnV0IHJlbGV2YW50IHRhZ3MiCittc2dzdHIgInBvdXNzZXIgbGVzIMOpdGlxdWV0dGVzIG1hbnF1YW50ZXMgbWFpcyBwZXJ0aW5lbnRlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY3IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAiR1BHIHNpZ24gdGhlIHB1c2giCittc2dzdHIgInNpZ25lciBsYSBwb3Vzc8OpZSBhdmVjIEdQRyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcwCittc2dpZCAicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiCittc2dzdHIgImRlbWFuZGUgdW5lIHRyYW5zYWN0aW9uIGF0b21pcXVlIHN1ciBsZSBzZXJ2ZXVyIGRpc3RhbnQiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3OQorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSBlc3QgaW5jb21wYXRpYmxlIGF2ZWMgLS1hbGwsIC0tbWlycm9yIGV0IC0tdGFncyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTgxCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIG4nYSBwYXMgZGUgc2VucyBzYW5zIGF1Y3VuZSByw6lmw6lyZW5jZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzozNworbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tIgorInByZWZpeD08cHLDqWZpeGU+KSBbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tIgorInNwYXJzZS1jaGVja291dF0gWy0taW5kZXgtb3V0cHV0PTxmaWNoaWVyPl0gKC0tZW1wdHkgfCA8YXJicmUgb3UgYXBwYXJlbnTDqSAiCisiMT4gWzxhcmJyZSBvdSBhcHBhcmVudMOpIDI+IFs8YXJicmUgb3UgYXBwYXJlbnTDqSAzPl1dKSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTAKK21zZ2lkICJ3cml0ZSByZXN1bHRpbmcgaW5kZXggdG8gPGZpbGU+IgorbXNnc3RyICLDqWNyaXJlIGwnaW5kZXggcsOpc3VsdGFudCBkYW5zIDxmaWNoaWVyPiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTMKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAianVzdGUgdmlkZXIgbCdpbmRleCIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTUKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICJGdXNpb24iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE3Cittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAiZWZmZWN0dWVyIHVuZSBmdXNpb24gZW4gcGx1cyBkJ3VuZSBsZWN0dXJlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExOQorbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAiZnVzaW9uIMOgIDMgcG9pbnRzIHNpIGF1Y3VuZSBmdXNpb24gZGUgbml2ZWF1IGZpY2hpZXIgbidlc3QgcmVxdWlzZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjEKK21zZ2lkICIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIgorbXNnc3RyICJmdXNpb24gw6AgMyBwb2ludHMgZW4gcHLDqXNlbmNlIGQnYWpvdXRzIGV0IHN1cHByZXNzaW9ucyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjMKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJjb21tZSAtbSwgbWFpcyBhbm51bGUgbGVzIMOpbMOpbWVudHMgbm9uIGZ1c2lvbm7DqXMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAiPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICI8c291cy1yw6lwZXJ0b2lyZT4vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNQorbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICJsaXJlIGwnYXJicmUgZGFucyBsJ2luZGV4IGRhbnMgPHNvdXMtcsOpcGVydG9pcmU+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjgKK21zZ2lkICJ1cGRhdGUgd29ya2luZyB0cmVlIHdpdGggbWVyZ2UgcmVzdWx0IgorbXNnc3RyICJtZXR0cmUgw6Agam91ciBsYSBjb3BpZSBkZSB0cmF2YWlsIGF2ZWMgbGUgcsOpc3VsdGF0IGRlIGxhIGZ1c2lvbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzAKK21zZ2lkICJnaXRpZ25vcmUiCittc2dzdHIgImdpdGlnbm9yZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJhbGxvdyBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4iCittc2dzdHIgImF1dG9yaXNlciBleHBsaWNpdGVtZW50IGxlcyBmaWNoaWVycyBpZ25vcsOpcyDDoCDDqnRyZSDDqWNyYXPDqXMiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICJuZSBwYXMgdsOpcmlmaWVyIGxhIGNvcGllIGRlIHRyYXZhaWwgYXByw6hzIGxhIGZ1c2lvbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzUKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgIm5lIHBhcyBtZXR0cmUgw6Agam91ciBsJ2luZGV4IG91IGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM3Cittc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnc3RyICJzYXV0ZXIgbCdhcHBsaWNhdGlvbiBkdSBmaWx0cmUgZCdleHRyYWN0aW9uIGNyZXVzZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzkKK21zZ2lkICJkZWJ1ZyB1bnBhY2stdHJlZXMiCittc2dzdHIgImTDqWJvZ3VlciB1bnBhY2stdHJlZXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIHBvdXIgJyVzJyBuJ2VzdCBwYXMgdW4gaG9yb2RhdGFnZSB2YWxpZGUiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NTQ5IGJ1aWx0aW4vcmVmbG9nLmM6NTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBob3JvZGF0YWdlIHZhbGlkZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMgorbXNnaWQgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzCittc2dpZCAiIgorImdpdCByZW1vdGUgYWRkIFstdCA8YnJhbmNoPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaGU+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxub20+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0IGJ1aWx0aW4vcmVtb3RlLmM6MzMKK21zZ2lkICJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSByZW5hbWUgPGFuY2llbm5lPiA8bm91dmVsbGU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1IGJ1aWx0aW4vcmVtb3RlLmM6MzgKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDxub20+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2IGJ1aWx0aW4vcmVtb3RlLmM6NDMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDxub20+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoZT4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTgKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5vbT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cGU+IHwgIgorIjxkaXN0YW50ZT4pLi4uXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxub20+IDxicmFuY2hlPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMSBidWlsdGluL3JlbW90ZS5jOjY5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPG5vbT4gPG5vdXZlbGxlLVVSTD4gWzxhbmNpZW5uZS1VUkw+XSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMiBidWlsdGluL3JlbW90ZS5jOjcwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxub20+IDxub3V2ZWxsZS1VUkw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzIGJ1aWx0aW4vcmVtb3RlLmM6NzEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5vbT4gPFVSTD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjgKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxub20+IDxVUkw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ4Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bm9tPiA8YnJhbmNoZT4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxub20+IDxicmFuY2hlPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bm9tPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OQorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxub20+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY0Cittc2dpZCAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxvcHRpb25zPl0gWzxncm91cD4gfCA8cmVtb3RlPl0uLi4iCittc2dzdHIgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXBlPiB8IDxkaXN0YW50ZT5dLi4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICJNaXNlIMOgIGpvdXIgZGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIi0tbWlycm9yIGVzdCBkYW5nZXJldXggZXQgb2Jzb2zDqHRlIDsgbWVyY2lcbiIKKyJcdCBkJ3V0aWxpc2VyIC0tbWlycm9yPWZldGNoIG91IC0tbWlycm9yPXB1c2ggw6AgbGEgcGxhY2UiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAiYXJndW1lbnQgbWlyb2lyIGluY29ubnUgOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTMKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICJyYXBhdHJpZXIgbGVzIGJyYW5jaGVzIGRpc3RhbnRlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTUKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICIiCisiaW1wb3J0ZXIgdG91dGVzIGxlcyDDqXRpcXVldHRlcyBldCBsZXMgb2JqZXRzIGFzc29jacOpcyBsb3JzIGR1IHJhcGF0cmllbWVudCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTgKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgIm91IG5lIHJhcGF0cmllciBhdWN1bmUgw6l0aXF1ZXR0ZSAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjAKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICJicmFuY2hlKHMpIMOgIHN1aXZyZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICJicmFuY2hlIG1hw650cmVzc2UiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYyCittc2dpZCAicHVzaHxmZXRjaCIKK21zZ3N0ciAicHVzaHxmZXRjaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjMKK21zZ2lkICJzZXQgdXAgcmVtb3RlIGFzIGEgbWlycm9yIHRvIHB1c2ggdG8gb3IgZmV0Y2ggZnJvbSIKK21zZ3N0ciAiIgorInBhcmFtw6l0cmVyIGxhIGRpc3RhbnRlIGNvbW1lIG1pcm9pciBwb3VyIHBvdXNzZXIgb3UgcG91ciByYXBhdHJpZXIgZGVwdWlzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3NQorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgInNww6ljaWZpZXIgdW5lIGJyYW5jaGUgbWHDrnRyZXNzZSBuJ2EgcGFzIGRlIHNlbnMgYXZlYyAtLW1pcnJvciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzcKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICIiCisic3DDqWNpZmllciBsZXMgYnJhbmNoZXMgw6Agc3VpdnJlIG4nYSBkZSBzZW5zIHF1J2F2ZWMgZGVzIG1pcm9pcnMgZGUgIgorInJhcGF0cmllbWVudCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODcgYnVpbHRpbi9yZW1vdGUuYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAibGEgZGlzdGFudGUgJXMgZXhpc3RlIGTDqWrDoC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkxIGJ1aWx0aW4vcmVtb3RlLmM6NjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycgbidlc3QgcGFzIHVuIG5vbSB2YWxpZGUgZGUgZGlzdGFudGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBwYXJhbcOpdHJlciBsYSBtYcOudHJlc3NlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ29idGVuaXIgdW5lIGNvcnJlc3BvbmRhbmNlIGRpc3RhbnRlIHBvdXIgbGEgc3DDqWNpZmljYXRpb24gZGUgIgorInLDqWbDqXJlbmNlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQzNiBidWlsdGluL3JlbW90ZS5jOjQ0NAorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIihjb3JyZXNwb25kKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDgKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKHN1cHByaW1lcikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTg4IGJ1aWx0aW4vcmVtb3RlLmM6NTk0IGJ1aWx0aW4vcmVtb3RlLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyB0byAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYWpvdXRlciAnJXMnIMOgICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjMwIGJ1aWx0aW4vcmVtb3RlLmM6NzY5IGJ1aWx0aW4vcmVtb3RlLmM6ODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAlcyIKK21zZ3N0ciAiRGlzdGFudGUgaW5jb25udWUgOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIkltcG9zc2libGUgZGUgcmVub21tZXIgbGEgc2VjdGlvbiBkZSBjb25maWd1cmF0aW9uICclcycgZW4gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMgYnVpbHRpbi9yZW1vdGUuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsYSBzZWN0aW9uIGRlIGNvbmZpZ3VyYXRpb24gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisiUGFzIGRlIG1pc2Ugw6Agam91ciBkdSByZWZzcGVjIGRlIHJhcGF0cmllbWVudCBxdWkgbidlc3QgcGFzIHBhciBkw6lmYXV0XG4iCisiXHQlc1xuIgorIlx0VmV1aWxsZXogbWV0dHJlIMOgIGpvdXIgbGEgY29uZmlndXJhdGlvbiBtYW51ZWxsZW1lbnQgc2kgbsOpY2Vzc2FpcmUuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcyciCittc2dzdHIgIkltcG9zc2libGUgZCdham91dGVyICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6lmaW5pciAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiw6ljaGVjIGRlIHN1cHByZXNzaW9uIGRlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLDqWNoZWMgZGUgY3LDqWF0aW9uIGRlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODA3Cittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyJOb3RlIDogVW5lIGJyYW5jaGUgZW4gZGVob3JzIGRlIHJlZnMvcmVtb3Rlcy8gbidhIHBhcyDDqXTDqSBzdXBwcmltw6llIDtcbiIKKyJwb3VyIGxhIHN1cHByaW1lciwgdXRpbGlzZXogOiIKK21zZ3N0clsxXSAiIgorIk5vdGUgOiBQbHVzaWV1cnMgYnJhbmNoZXMgZW4gZGVob3JzIGRlIHJlZnMvcmVtb3Rlcy8gbidvbnQgcGFzIMOpdMOpICIKKyJzdXBwcmltw6llcyA7XG4iCisicG91ciBsZXMgc3VwcHJpbWVyLCB1dGlsaXNleiA6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBub3V2ZWF1IChsZSBwcm9jaGFpbiByYXBhdHJpZW1lbnQgKGZldGNoKSBzdG9ja2VyYSBkYW5zIHJlbW90ZXMvJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyNQorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIgc3VpdmkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI3Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiBkw6lwYXNzw6kgKHV0aWxpc2V6ICdnaXQgcmVtb3RlIHBydW5lJyBwb3VyIHN1cHByaW1lcikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI5Cittc2dpZCAiID8/PyIKK21zZ3N0ciAiID8/PyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICJicmFuY2guJXMubWVyZ2UgaW52YWxpZGUgOyBuZSBwZXV0IHBhcyByZWJhc2VyIHN1ciBwbHVzIGQndW5lIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgInJlYmFzZSBzdXIgbGEgZGlzdGFudGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiBmdXNpb25uZSBhdmVjIGxhIGRpc3RhbnRlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4MQorbXNnaWQgIiAgICBhbmQgd2l0aCByZW1vdGUiCittc2dzdHIgIiAgICBldCBhdmVjIGxhIGRpc3RhbnRlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgImZ1c2lvbm5lIGF2ZWMgbGEgZGlzdGFudGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTg0Cittc2dpZCAiICAgYW5kIHdpdGggcmVtb3RlIgorbXNnc3RyICIgICBldCBhdmVjIGxhIGRpc3RhbnRlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzAKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgImNyw6llciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDMzCittc2dpZCAiZGVsZXRlIgorbXNnc3RyICJzdXBwcmltZXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzNworbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgIsOgIGpvdXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MAorbXNnaWQgImZhc3QtZm9yd2FyZGFibGUiCittc2dzdHIgInBldXQgw6p0cmUgbWlzIMOgIGpvdXIgZW4gYXZhbmNlIHJhcGlkZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQzCittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgImxlIGxvY2FsIG4nZXN0IHBhcyDDoCBqb3VyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgZm9yY2UgdmVycyAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyBwb3Vzc2UgdmVycyAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIGZvcmNlIHZlcnMgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIHBvdXNzZSB2ZXJzICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjgKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAibmUgcGFzIGludGVycm9nZXIgbGVzIGRpc3RhbnRlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqIGRpc3RhbnRlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCBkZSByYXBhdHJpZW1lbnQgOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU3IGJ1aWx0aW4vcmVtb3RlLmM6MTMwOAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIocGFzIGQnVVJMKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTY2IGJ1aWx0aW4vcmVtb3RlLmM6MTE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgVVJMIHB1c2ggOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcwIGJ1aWx0aW4vcmVtb3RlLmM6MTE3MiBidWlsdGluL3JlbW90ZS5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgQnJhbmNoZSBIRUFEIDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIiCisiICBCcmFuY2hlIEhFQUQgKGxhIEhFQUQgZGlzdGFudGUgZXN0IGFtYmlndcOrLCBwZXV0IMOqdHJlIGwndW5lIGRlcyAiCisic3VpdmFudGVzKSA6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIEJyYW5jaGUgZGlzdGFudGUgOiVzIgorbXNnc3RyWzFdICIgIEJyYW5jaGVzIGRpc3RhbnRlcyA6JXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5MSBidWlsdGluL3JlbW90ZS5jOjEyMTgKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiAoc3RhdHV0IG5vbiBkZW1hbmTDqSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwMAorbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgIEJyYW5jaGUgbG9jYWxlIGNvbmZpZ3Vyw6llIHBvdXIgJ2dpdCBwdWxsJyA6IgorbXNnc3RyWzFdICIgIEJyYW5jaGVzIGxvY2FsZXMgY29uZmlndXLDqWVzIHBvdXIgJ2dpdCBwdWxsJyA6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDgKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIgIExlcyByw6lmw6lyZW5jZXMgbG9jYWxlcyBzZXJvbnQgcmVmbMOpdMOpZXMgcGFyICdnaXQgcHVzaCciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICBSw6lmw6lyZW5jZSBsb2NhbGUgY29uZmlndXLDqWUgcG91ciAnZ2l0IHB1c2gnJXMgOiIKK21zZ3N0clsxXSAiICBSw6lmw6lyZW5jZXMgbG9jYWxlcyBjb25maWd1csOpZXMgcG91ciAnZ2l0IHB1c2gnJXMgOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM2Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICJkw6lmaW5pciByZWZzL3JlbW90ZXMvPG5vbT4vSEVBRCBzZWxvbiBsYSBkaXN0YW50ZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM4Cittc2dpZCAiZGVsZXRlIHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIKK21zZ3N0ciAic3VwcHJpbWVyIHJlZnMvcmVtb3Rlcy88bm9tPi9IRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTMKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGTDqXRlcm1pbmVyIGxhIEhFQUQgZGlzdGFudGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1NQorbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICIiCisiSWwgeSBhIGRlIG11bHRpcGxlcyBicmFuY2hlcyBIRUFEIGRpc3RhbnRlcy4gVmV1aWxsZXogZW4gY2hvaXNpciB1bmUgIgorImV4cGxpY2l0ZW1lbnQgYXZlYyA6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJSw6lmw6lyZW5jZSBub24gdmFsaWRlIDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIkltcG9zc2libGUgZGUgcGFyYW3DqXRyZXIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5MworIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMgc2UgcmV0cm91dmVyYSBlbiBzdXNwZW5zICEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyBzZSByZXRyb3V2ZSBlbiBzdXNwZW5zICEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICLDiWxpbWluYXRpb24gZGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkwgOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFtzZXJhaXQgw6lsaW1pbsOpXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIgKiBbw6lsaW1pbsOpXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzY5Cittc2dpZCAicHJ1bmUgcmVtb3RlcyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAiw6lsaW1pbmVyIGxlcyBkaXN0YW50cyBhcHLDqHMgbGUgcmFwYXRyaWVtZW50IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MzUgYnVpbHRpbi9yZW1vdGUuYzoxNTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIlBhcyBkZSBzZXJ2ZXVyIHJlbW90ZSAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTUKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICJham91dGVyIHVuZSBicmFuY2hlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NjIKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICJwYXMgZGUgc2VydmV1ciBkaXN0YW50IHNww6ljaWZpw6kiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4NAorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICJtYW5pcHVsZXIgbGVzIFVSTHMgcHVzaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDg2Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAiYWpvdXRlciB1bmUgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODgKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAic3VwcHJpbWVyIGRlcyBVUkxzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTUKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tYWRkIC0tZGVsZXRlIG4nYSBhdWN1biBzZW5zIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJNb3RpZiBkJ1VSTCBhbmNpZW4gaW52YWxpZGUgOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiUGFzIGQnVVJMIHRyb3V2w6llIDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU0NQorbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiUGFzIGRlIHN1cHByZXNzaW9uIGRlIHRvdXRlcyBsZXMgVVJMcyBub24tcHVzaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU5Cittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAiw6p0cmUgdmVyYmV1eCA6IGRvaXQgw6p0cmUgcGxhY8OpIGF2YW50IHVuZSBzb3VzLWNvbW1hbmRlIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3Cittc2dpZCAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNTkKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAiZW1wYXF1ZXRlciB0b3V0IGRhbnMgdW4gc2V1bCBwYXF1ZXQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTYxCittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAiaWRlbnRpcXVlIMOgIC1hIGV0IHRyYW5zZm9ybWVyIGxlcyBvYmpldHMgaW5hY2Nlc3NpYmxlcyBlbiBzdXNwZW5zIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2NAorbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAic3VwcHJpbWVyIGxlcyBwYXF1ZXRzIHJlZG9uZGFudHMgZXQgbGFuY2VyIGdpdC1wcnVuZS1wYWNrZWQiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTY2Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInBhc3NlciAtLW5vLXJldXNlLWRlbHRhIMOgIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTY4Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLW9iamVjdCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJwYXNzZXIgLS1uby1yZXVzZS1vYmplY3Qgw6AgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzAKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIm5lIHBhcyBsYW5jZXIgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzMKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAicGFzc2VyIC0tbG9jYWwgw6AgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzUKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgIsOpY3JpcmUgdW4gaW5kZXggZW4gYml0bWFwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3NgorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICJkYXRlIGFwcHJveGltYXRpdmUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc3Cittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAiYXZlYyAtQSwgbmUgcGFzIHN1c3BlbmRyZSBsZXMgb2JqZXRzIHBsdXMgdmlldXggcXVlIGNlbHVpLWNpIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3OQorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAidGFpbGxlIGRlIGxhIGZlbsOqdHJlIHV0aWxpc8OpZSBwb3VyIGxhIGNvbXByZXNzaW9uIGRlcyBkZWx0YXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgwIGJ1aWx0aW4vcmVwYWNrLmM6MTg0Cittc2dpZCAiYnl0ZXMiCittc2dzdHIgIm9jdGV0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODEKK21zZ2lkICJzYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGxpbWl0IG1lbW9yeSBzaXplIGluc3RlYWQgb2YgZW50cmllcyBjb3VudCIKK21zZ3N0ciAiIgorImlkZW0gY2ktZGVzc3VzLCBtYWlzIGxpbWl0ZXIgbGEgdGFpbGxlIG3DqW1vaXJlIGF1IGxpZXUgZHUgbm9tYnJlIGQnw6lsw6ltZW50cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODMKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgImxpbWl0ZSBsYSBwcm9mb25kZXVyIG1heGltYWxlIGRlcyBkZWx0YXMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTg1Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggcGFja2ZpbGUiCittc2dzdHIgInRhaWxsZSBtYXhpbXVtIGRlIGNoYXF1ZSBmaWNoaWVyIHBhcXVldCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODcKK21zZ2lkICJyZXBhY2sgb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcCIKK21zZ3N0ciAicsOpZW1wYXF1ZXRlciBsZXMgb2JqZXRzIGRhbnMgZGVzIHBhcXVldHMgbWFycXXDqXMgYXZlYyAua2VlcCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImxhIHN1cHByZXNzaW9uIGRlICclcycgYSDDqWNob3XDqSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTkKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPG9iamV0PiA8cmVtcGxhY2VtZW50PiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjAKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamV0PiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjEKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDxvYmpldD4uLi4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPG1vdGlmPl1dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjUgYnVpbHRpbi9yZXBsYWNlLmM6MzYzIGJ1aWx0aW4vcmVwbGFjZS5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIKK21zZ3N0ciAiTm9tIGQnb2JqZXQgaW52YWxpZGUgOiAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJtYXV2YWlzZSDDqXRpcXVldHRlIGRlIGZ1c2lvbiBkYW5zIGxlIGNvbW1pdCAnJXMnIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICLDqXRpcXVldHRlIGRlIGZ1c2lvbiBtYWxmb3Jtw6llIGRhbnMgbGUgY29tbWl0ICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisibGUgY29tbWl0IG9yaWdpbmFsICclcycgY29udGllbnQgbCfDqXRpcXVldHRlIGRlIGZ1c2lvbiAnJXMnIHF1aSBhIGRpc3BhcnUgOyAiCisidXRpbGlzZXogLS1lZGl0IGF1IGxpZXUgZGUgLS1ncmFmdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlLiIKK21zZ3N0ciAibGUgY29tbWl0IG9yaWdpbmFsICclcycgY29udGllbnQgdW5lIHNpZ25hdHVyZSBHUEcuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDIKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAibGEgc2lnbmF0dXJlIHNlcmEgw6lsaW1pbsOpZSBkYW5zIGxhIHZhbGlkYXRpb24gZGUgcmVtcGxhY2VtZW50ICEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ8OpY3JpcmUgbGUgY29tbWl0IGRlIHJlbXBsYWNlbWVudCBwb3VyICclcyciCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzMgorbXNnaWQgImxpc3QgcmVwbGFjZSByZWZzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgcsOpZsOpcmVuY2VzIGRlIHJlbXBsYWNlbWVudCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMzCittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAic3VwcHJpbWVyIGxlcyByw6lmw6lyZW5jZXMgZGUgcmVtcGxhY2VtZW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzQKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAiw6lkaXRlciBsJ29iamV0IGV4aXN0YW50IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzUKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICJNb2RpZmllciBsZXMgcGFyZW50cyBkJ3VuIGNvbW1pdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM2Cittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAicmVtcGxhY2VyIGxhIHLDqWbDqXJlbmNlIHNpIGVsbGUgZXhpc3RlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzcKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgImFmZmljaGVyIHNhbnMgbWlzZSBlbiBmb3JtZSBwb3VyIC0tZWRpdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM4Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICJ1dGlsaXNlciBjZSBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTIKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICIiCisiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPGNoZW1pbj4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjU3Cittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgImVucmVnaXN0cmVyIGRlcyByw6lzb2x1dGlvbnMgcHJvcHJlcyBkYW5zIGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNgorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNworbXNnaWQgImdpdCByZXNldCBbLXFdIDx0cmVlLWlzaD4gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSA8YXJicmUgb3UgYXBwYXJlbnTDqT4gWy0tXSA8Y2hlbWlucz4uLi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOAorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHM+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzxhcmJyZSBvdSBhcHBhcmVudMOpPl0gWy0tXSBbPGNoZW1pbnM+Li4uXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAibWl4ZWQiCittc2dzdHIgIm1peGVkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJzb2Z0IgorbXNnc3RyICJzb2Z0IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJoYXJkIgorbXNnc3RyICJoYXJkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJtZXJnZSIKK21zZ3N0ciAibWVyZ2UiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgImtlZXAiCittc2dzdHIgImtlZXAiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo3NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICJWb3VzIG4nYXZleiBwYXMgdW5lIEhFQUQgdmFsaWRlLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjc2Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSB0cm91dmVyIGwnYXJicmUgcG91ciBIRUFELiIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbCdhcmJyZSBwb3VyICVzLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCBlc3QgbWFpbnRlbmFudCDDoCAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGZhaXJlIHVuIFwicmVzZXQgJXNcIiBhdSBtaWxpZXUgZCd1bmUgZnVzaW9uLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3NgorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgIsOqdHJlIHNpbGVuY2lldXgsIGFmZmljaGVyIHNldWxlbWVudCBsZXMgZXJyZXVycyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3OAorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICJyw6lpbml0aWFsaXNlciBIRUFEIGV0IGwnaW5kZXgiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNzkKK21zZ2lkICJyZXNldCBvbmx5IEhFQUQiCittc2dzdHIgInLDqWluaXRpYWxpc2VyIHNldWxlbWVudCBIRUFEIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjgxIGJ1aWx0aW4vcmVzZXQuYzoyODMKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICJyw6lpbml0aWFsaXNlciBIRUFELCBsJ2luZGV4IGV0IGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyODUKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgInLDqWluaXRpYWxpc2VyIEhFQUQgbWFpcyBnYXJkZXIgbGVzIGNoYW5nZW1lbnRzIGxvY2F1eCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4OAorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICIiCisiZW5yZWdpc3RyZXIgc2V1bGVtZW50IGxlIGZhaXQgcXVlIGxlcyBjaGVtaW5zIGVmZmFjw6lzIHNlcm9udCBham91dMOpcyBwbHVzICIKKyJ0YXJkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgIsOJY2hlYyBkZSByw6lzb2x1dGlvbiBkZSAnJXMnIGNvbW1lIHVuZSByw6l2aXNpb24gdmFsaWRlLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxMworIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgdHJlZS4iCittc2dzdHIgIsOJY2hlYyBkZSByw6lzb2x1dGlvbiBkZSAnJXMnIGNvbW1lIHVuIGFyYnJlIHZhbGlkZS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMjIKK21zZ2lkICItLXBhdGNoIGlzIGluY29tcGF0aWJsZSB3aXRoIC0te2hhcmQsbWl4ZWQsc29mdH0iCittc2dzdHIgIi0tcGF0Y2ggZXN0IGluY29tcGF0aWJsZSBhdmVjIC0te2hhcmQsbWl4ZWQsc29mdH0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzEKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLW1peGVkIGF2ZWMgZGVzIGNoZW1pbnMgZXN0IG9ic29sw6h0ZSA7IHV0aWxpc2V6ICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgw6AgbGEgIgorInBsYWNlLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIkltcG9zc2libGUgZGUgZmFpcmUgdW4gXCIlcyByZXNldFwiIGF2ZWMgZGVzIGNoZW1pbnMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJMZSBcIiVzIHJlc2V0XCIgbidlc3QgcGFzIHBlcm1pcyBkYW5zIHVuIGTDqXDDtHQgbnUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDcKK21zZ2lkICItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIKK21zZ3N0ciAiLU4gbmUgcGV1dCDDqnRyZSB1dGlsaXPDqSBxdSdhdmVjIC0tbWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjQKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiTW9kaWZpY2F0aW9ucyBub24gaW5kZXjDqWVzIGFwcsOocyByZXNldCA6IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHLDqWluaXRpYWxpc2VyIGxlIGZpY2hpZXIgZCdpbmRleCDDoCBsYSByw6l2aXNpb24gJyVzJy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBub3V2ZWF1IGZpY2hpZXIgZCdpbmRleC4iCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzozNTQKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0IG5lIHN1cHBvcnRlIGwnYWZmaWNoYWdlIGRlcyBub3RlcyIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzozNjEKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3VtZW50cz4uLi5dIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2NgorbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAiZ2FyZGVyIGxlIGAtLWAgcGFzc8OpIGVuIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2OAorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiYXJyw6p0IGRlIGwnYW5hbHlzZSBhcHLDqHMgbGUgcHJlbWllciBhcmd1bWVudCBxdWkgbidlc3QgcGFzIHVuZSBvcHRpb24iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzcxCittc2dpZCAib3V0cHV0IGluIHN0dWNrIGxvbmcgZm9ybSIKK21zZ3N0ciAic29ydGllIGVuIGZvcm1lIGxvbmd1ZSBmaXjDqWUiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTAyCittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJndW1lbnRzPi4uLl1cbiIKKyIgICBvdSA6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZ3VtZW50Pi4uLl1cbiIKKyIgICBvdSA6IGdpdCByZXYtcGFyc2UgW29wdGlvbnNdIFs8YXJndW1lbnQ+Li4uXVxuIgorIlxuIgorIkxhbmNleiBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIHBvdXIgcGx1cyBkJ2luZm9ybWF0aW9uIHN1ciAiCisibCd1dGlsaXNhdGlvbiBwcmluY2lwYWxlLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMgorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQgb3UgYXBwYXJlbnTDqT4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA8c291cy1jb21tYW5kZT4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjgKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdCBvdSBhcHBhcmVudMOpPi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyOQorbXNnaWQgImdpdCBjaGVycnktcGljayA8c3ViY29tbWFuZD4iCittc2dzdHIgImdpdCBjaGVycnktcGljayA8c291cy1jb21tYW5kZT4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVzIDogJXMgbmUgcGV1dCBwYXMgw6p0cmUgdXRpbGlzw6kgYXZlYyAlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MAorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIm1ldHRyZSBmaW4gYXUgcmV0b3VyIG91IHBpY29yYWdlIgorCisjOiBidWlsdGluL3JldmVydC5jOjgxCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAicmVwcmVuZHJlIGxlIHJldG91ciBvdSBwaWNvcmFnZSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MgorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImFubnVsZXIgbGUgcmV0b3VyIG91IHBpY29yYWdlIgorCisjOiBidWlsdGluL3JldmVydC5jOjgzCittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgIm5lIHBhcyB2YWxpZGVyIGF1dG9tYXRpcXVlbWVudCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4NAorbXNnaWQgImVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLDqWRpdGVyIGxlIG1lc3NhZ2UgZGUgdmFsaWRhdGlvbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4NworbXNnaWQgInBhcmVudCBudW1iZXIiCittc2dzdHIgIm51bcOpcm8gZGUgcGFyZW50IgorCisjOiBidWlsdGluL3JldmVydC5jOjg5Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInN0cmF0w6lnaWUgZGUgZnVzaW9uIgorCisjOiBidWlsdGluL3JldmVydC5jOjkwCittc2dpZCAib3B0aW9uIgorbXNnc3RyICJvcHRpb24iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTEKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJvcHRpb24gcG91ciBsYSBzdHJhdMOpZ2llIGRlIGZ1c2lvbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJhcHBlbmQgY29tbWl0IG5hbWUiCittc2dzdHIgImFqb3V0ZXIgbGUgbm9tIGRlIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA2Cittc2dpZCAicHJlc2VydmUgaW5pdGlhbGx5IGVtcHR5IGNvbW1pdHMiCittc2dzdHIgInByw6lzZXJ2ZXIgbGVzIHZhbGlkYXRpb25zIHZpZGVzIGluaXRpYWxlbWVudCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgImF1dG9yaXNlciBsZXMgdmFsaWRhdGlvbnMgYXZlYyBkZXMgbWVzc2FnZXMgdmlkZXMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgImdhcmRlciBsZXMgdmFsaWRhdGlvbnMgcmVkb25kYW50ZXMsIHZpZGVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjExMgorbXNnaWQgInByb2dyYW0gZXJyb3IiCittc2dzdHIgImVycmV1ciBkdSBwcm9ncmFtbWUiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTk3Cittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAicmV2ZXJ0IGEgw6ljaG91w6kiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjEyCittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICJsZSBwaWNvcmFnZSBhIMOpY2hvdcOpIgorCisjOiBidWlsdGluL3JtLmM6MTcKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWNoaWVyPi4uLiIKKworIzogYnVpbHRpbi9ybS5jOjY1Cittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgc3VibW9kdWxlIChvciBvbmUgb2YgaXRzIG5lc3RlZCBzdWJtb2R1bGVzKVxuIgorInVzZXMgYSAuZ2l0IGRpcmVjdG9yeToiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZXMgKG9yIG9uZSBvZiB0aGVpciBuZXN0ZWQgc3VibW9kdWxlcylcbiIKKyJ1c2UgYSAuZ2l0IGRpcmVjdG9yeToiCittc2dzdHJbMF0gIiIKKyJsZSBzb3VzLW1vZHVsZSBzdWl2YW50IChvdSB1biBkZSBzZXMgc291cy1tb2R1bGVzIGltYnJpcXXDqXMpXG4iCisidXRpbGlzZSB1biByw6lwZXJ0b2lyZSAuZ2l0IDoiCittc2dzdHJbMV0gIiIKKyJsZXMgc291cy1tb2R1bGVzIHN1aXZhbnRzIChvdSB1biBkZSBsZXVycyBzb3VzLW1vZHVsZXMgaW1icmlxdcOpcylcbiIKKyJ1dGlsaXNlbnQgdW4gcsOpcGVydG9pcmUgLmdpdCA6IgorCisjOiBidWlsdGluL3JtLmM6NzEKK21zZ2lkICIiCisiXG4iCisiKHVzZSAncm0gLXJmJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzIGhpc3RvcnkpIgorbXNnc3RyICIiCisiXG4iCisiKHV0aWxpc2V6ICdybSAtcmYnIHNpIHZvdXMgdm91bGV6IHZyYWltZW50IGxlIHN1cHByaW1lciBlbiBpbmNsdWFudCB0b3V0IHNvbiAiCisiaGlzdG9yaXF1ZSkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzAKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorImxlIGZpY2hpZXIgc3VpdmFudCBhIGR1IGNvbnRlbnUgaW5kZXjDqSBkaWZmw6lyZW50XG4iCisiZHUgZmljaGllciBldCBkZSBIRUFEIDoiCittc2dzdHJbMV0gIiIKKyJsZXMgZmljaGllcnMgc3VpdmFudHMgb250IGR1IGNvbnRlbnUgaW5kZXjDqSBkaWZmw6lyZW50XG4iCisiZHUgZmljaGllciBldCBkZSBIRUFEIDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzUKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIih1dGlsaXNleiAtZiBwb3VyIGZvcmNlciBsYSBzdXBwcmVzc2lvbikiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzkKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICJsZSBmaWNoaWVyIHN1aXZhbnQgYSBkZXMgY2hhbmdlbWVudHMgaW5kZXjDqXMgOiIKK21zZ3N0clsxXSAibGVzIGZpY2hpZXJzIHN1aXZhbnRzIG9udCBkZXMgY2hhbmdlbWVudHMgaW5kZXjDqXMgOiIKKworIzogYnVpbHRpbi9ybS5jOjI0MyBidWlsdGluL3JtLmM6MjU0Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIodXRpbGlzZXogLS1jYWNoZWQgcG91ciBnYXJkZXIgbGUgZmljaGllciwgb3UgLWYgcG91ciBmb3JjZXIgbGEgc3VwcHJlc3Npb24pIgorCisjOiBidWlsdGluL3JtLmM6MjUxCittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICJsZSBmaWNoaWVyIHN1aXZhbnQgYSBkZXMgbW9kaWZpY2F0aW9ucyBsb2NhbGVzIDoiCittc2dzdHJbMV0gImxlcyBmaWNoaWVycyBzdWl2YW50cyBvbnQgZGVzIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyA6IgorCisjOiBidWlsdGluL3JtLmM6MjY5Cittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAibmUgcGFzIGFmZmljaGVyIGxlcyBmaWNoaWVycyBzdXBwcmltw6lzIgorCisjOiBidWlsdGluL3JtLmM6MjcwCittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgInN1cHByaW1lciBzZXVsZW1lbnQgZGUgbCdpbmRleCIKKworIzogYnVpbHRpbi9ybS5jOjI3MQorbXNnaWQgIm92ZXJyaWRlIHRoZSB1cC10by1kYXRlIGNoZWNrIgorbXNnc3RyICJvdXRyZXBhc3NlciBsYSB2w6lyaWZpY2F0aW9uIGRlcyBmaWNoaWVycyDDoCBqb3VyIgorCisjOiBidWlsdGluL3JtLmM6MjcyCittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgImF1dG9yaXNlciBsYSBzdXBwcmVzc2lvbiByw6ljdXJzaXZlIgorCisjOiBidWlsdGluL3JtLmM6Mjc0Cittc2dpZCAiZXhpdCB3aXRoIGEgemVybyBzdGF0dXMgZXZlbiBpZiBub3RoaW5nIG1hdGNoZWQiCittc2dzdHIgInNvcnRpciBhdmVjIHVuIHN0YXR1dCB6w6lybyBtw6ptZSBzaSByaWVuIG5lIGNvcnJlc3BvbmRhaXQiCisKKyM6IGJ1aWx0aW4vcm0uYzozMTcKK21zZ2lkICJQbGVhc2UsIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJWZXVpbGxleiBpbmRleGVyIHZvcyBtb2RpZmljYXRpb25zIGRlIC5naXRtb2R1bGVzIG91IHJlbWlzZXotbGVzIHBvdXIgIgorImNvbnRpbnVlciIKKworIzogYnVpbHRpbi9ybS5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICJwYXMgZGUgc3VwcHJlc3Npb24gcsOpY3Vyc2l2ZSBkZSAnJXMnIHNhbnMgLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm0gOiBpbXBvc3NpYmxlIGRlIHN1cHByaW1lciAlcyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxOAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aMO0dGU+Ol08csOpcGVydG9pcmU+ICIKKyJbPHLDqWbDqXJlbmNlPi4uLl1cbiIKKyIgIC0tYWxsIGV0IGxhIHNww6ljaWZpY2F0aW9uIGV4cGxpY2l0ZSBkZSA8csOpZsOpcmVuY2U+IHNvbnQgbXV0dWVsbGVtZW50ICIKKyJleGNsdXNpZnMuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MAorbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICJub20gZGlzdGFudCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzEKK21zZ2lkICJ1c2Ugc3RhdGVsZXNzIFJQQyBwcm90b2NvbCIKK21zZ3N0ciAidXRpbGlzZXIgdW4gcHJvdG9jb2xlIFJQQyBzYW5zIMOpdGF0IgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MgorbXNnaWQgInJlYWQgcmVmcyBmcm9tIHN0ZGluIgorbXNnc3RyICJsaXJlIGxlcyByw6lmw6lyZW5jZXMgZGVwdWlzIGwnZW50csOpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzMKK21zZ2lkICJwcmludCBzdGF0dXMgZnJvbSByZW1vdGUgaGVscGVyIgorbXNnc3RyICJhZmZpY2hlciBsZXMgbWVzc2FnZXMgZHUgZ3JlZmZvbiBkZSBwcm90b2NvbGUgZGlzdGFudCIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjEzCittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPGludGVydmFsbGUtcsOpdmlzaW9ucz5dIFtbLS1dIFs8Y2hlbWluPi4uLl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgYXV0aG9yOiAlcyIKK21zZ3N0ciAiQXV0ZXVyIG1hbnF1YW50IDogJXMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzAKK21zZ2lkICJzb3J0IG91dHB1dCBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBjb21taXRzIHBlciBhdXRob3IiCittc2dzdHIgInRyaWVyIGxhIHNvcnRpZSBzdXIgbGUgbm9tYnJlIGRlIHZhbGlkYXRpb25zIHBhciBhdXRldXIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzIKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiIgorIlN1cHByaW1lciBsZXMgZGVzY3JpcHRpb25zIGRlIHZhbGlkYXRpb24sIGZvdXJuaXQgc2V1bGVtZW50IGxlIG5vbWJyZSBkZSAiCisidmFsaWRhdGlvbnMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzQKK21zZ2lkICJTaG93IHRoZSBlbWFpbCBhZGRyZXNzIG9mIGVhY2ggYXV0aG9yIgorbXNnc3RyICJBZmZpY2hlciBsJ2FkcmVzc2UgZS1tYWlsIGRlIGNoYXF1ZSBhdXRldXIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzUKK21zZ2lkICJ3WyxpMVssaTJdXSIKK21zZ3N0ciAid1ssaTFbLGkyXV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzYKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIkNvdXBlciBsZXMgbGlnbmVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6OQorbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yfC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTxxdWFuZD5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyw6l2PiB8IDxnbG9iPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyw6lmw6lyZW5jZT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU5Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgYnJhbmNoZXMgZGUgc3VpdmkgZGlzdGFudGVzIGV0IGxlcyBicmFuY2hlcyBsb2NhbGVzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYxCittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgImFmZmljaGVyIGxlcyBicmFuY2hlcyBkZSBzdWl2aSBkaXN0YW50ZXMiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjMKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICJjb3VsZXVyICcqISstJyBjb3JyZXNwb25kYW50IMOgIGxhIGJyYW5jaGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjUKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAiYWZmaWNoZXIgPG4+IHZhbGlkYXRpb25zIGRlIHBsdXMgYXByw6hzIGwnYW5jw6p0cmUgY29tbXVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICJzeW5vbnltZSBkZSBtb3JlPS0xIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY4Cittc2dpZCAic3VwcHJlc3MgbmFtaW5nIHN0cmluZ3MiCittc2dzdHIgInN1cHByaW1lciBsZXMgY2hhw65uZXMgZGUgbm9tbWFnZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MAorbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJpbmNsdXJlIGxhIGJyYW5jaGUgY291cmFudGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzIKK21zZ2lkICJuYW1lIGNvbW1pdHMgd2l0aCB0aGVpciBvYmplY3QgbmFtZXMiCittc2dzdHIgIm5vbW1lciBsZXMgdmFsaWRhdGlvbnMgYXZlYyBsZXVycyBub21zIGQnb2JqZXQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzQKK21zZ2lkICJzaG93IHBvc3NpYmxlIG1lcmdlIGJhc2VzIgorbXNnc3RyICJhZmZpY2hlciBsZXMgYmFzZXMgcG9zc2libGVzIGRlIGZ1c2lvbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NgorbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgImFmZmljaGVyIGxlcyByw6lmw6lyZW5jZXMgaW5hY2Nlc3NpYmxlcyBkZXB1aXMgdG91dGUgYXV0cmUgcsOpZsOpcmVuY2UiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzgKK21zZ2lkICJzaG93IGNvbW1pdHMgaW4gdG9wb2xvZ2ljYWwgb3JkZXIiCittc2dzdHIgImFmZmljaGVyIGxlcyB2YWxpZGF0aW9ucyBkYW5zIGwnb3JkcmUgdG9wb2xvZ2lxdWUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODEKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAiIgorImFmZmljaGVyIHNldWxlbWVudCBsZXMgdmFsaWRhdGlvbnMgcXVpIG5lIHNvbnQgcGFzIHN1ciBsYSBwcmVtacOocmUgYnJhbmNoZSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4MworbXNnaWQgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGZ1c2lvbnMgYWNjZXNzaWJsZXMgZGVwdWlzIHVuZSBzZXVsZSBwb2ludGUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODUKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgInRyaSB0b3BvbG9naXF1ZSwgbWFpbnRlbmFudCBsJ29yZHJlIHBhciBkYXRlIHNpIHBvc3NpYmxlIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njg4Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICI8bj5bLDxiYXNlPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODkKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAiIgorImFmZmljaGVyIGxlcyA8bj4gcGx1cyByw6ljZW50cyDDqWzDqW1lbnRzIGRlIHJlZi1sb2cgZW4gY29tbWVuw6dhbnQgw6AgbGEgYmFzZSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEwCittc2dpZCAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8bW90aWY+Li4uXSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjExCittc2dpZCAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSA8IDxyZWYtbGlzdD4iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxtb3RpZj5dIDwgbGlzdGUtcsOpZsOpcmVuY2VzIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcwCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyDDqXRpcXVldHRlcyAocGV1dCDDqnRyZSBjb21iaW7DqSBhdmVjIGRlcyB0w6p0ZXMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcxCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlcyB0w6p0ZXMgKHBldXQgw6p0cmUgY29tYmluw6kgYXZlYyBkZXMgw6l0aXF1ZXR0ZXMpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcyCittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAiIgorInbDqXJpZmljYXRpb24gZGUgcsOpZsOpcmVuY2UgcGx1cyBzdHJpY3RlLCBuw6ljZXNzaXRlIHVuIGNoZW1pbiBkZSByw6lmw6lyZW5jZSAiCisiZXhhY3QiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzUgYnVpbHRpbi9zaG93LXJlZi5jOjE3NworbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlLCBldmVuIGlmIGl0IHdvdWxkIGJlIGZpbHRlcmVkIG91dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGEgcsOpZsOpcmVuY2UgSEVBRCwgbcOqbWUgc2kgZWxsZSBzZXJhaXQgZmlsdHLDqWUiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAiZMOpcsOpZsOpcmVuY2VyIGxlcyDDqXRpcXVldHRlcyBlbiBJRHMgZCdvYmpldCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4MQorbXNnaWQgIm9ubHkgc2hvdyBTSEExIGhhc2ggdXNpbmcgPG4+IGRpZ2l0cyIKK21zZ3N0ciAiYWZmaWNoZXIgc2V1bGVtZW50IGxlIGhhY2hhZ2UgU0hBMSBlbiB1dGlsaXNhbnQgPG4+IGNoaWZmcmVzIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTg1Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIiIKKyJuZSBwYXMgYWZmaWNoZXIgbGVzIHLDqXN1bHRhdHMgc3VyIGxhIHNvcnRpZSBzdGFuZGFyZCAocHJhdGlxdWUgYXZlYyAtLXZlcmlmeSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODcKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICIiCisiYWZmaWNoZXIgbGVzIHLDqWbDqXJlbmNlcyBkZSBsJ2VudHLDqWUgc3RhbmRhcmQgcXVpIG5lIHNvbnQgcGFzIGRhbnMgbGUgZMOpcMO0dCAiCisibG9jYWwiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NworbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gbm9tIFs8csOpZsOpcmVuY2U+XSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo4Cittc2dpZCAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHN5bWJvbGljLXJlZiAtZCBbLXFdIDxub20+IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQwCittc2dpZCAic3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBmb3Igbm9uLXN5bWJvbGljIChkZXRhY2hlZCkgcmVmcyIKK21zZ3N0ciAiIgorInN1cHByaW1lciBsZSBtZXNzYWdlIGQnZXJyZXVyIHBvdXIgdW5lIHLDqWbDqXJlbmNlIG5vbiBzeW1ib2xpcXVlIChkw6l0YWNow6llKSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MQorbXNnaWQgImRlbGV0ZSBzeW1ib2xpYyByZWYiCittc2dzdHIgInN1cHByaW1lciBsYSByw6lmw6lyZW5jZSBzeW1ib2xpcXVlIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICJyYWNjb3VyY2lyIGwnYWZmaWNoYWdlIGRlIGxhIHLDqWbDqXJlbmNlIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MgorbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAicmFpc29uIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MgorbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICJyYWlzb24gZGUgbGEgbWlzZSDDoCBqb3VyIgorCisjOiBidWlsdGluL3RhZy5jOjIyCittc2dpZCAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dIDx0YWduYW1lPiAiCisiWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGlkLWNsw6k+XSBbLWZdIFstbSA8bWVzc2FnZT4gfCAtRiA8ZmlsZT5dIDxub20tIgorIsOpdGlxdWV0dGU+IFs8aGVhZD5dIgorCisjOiBidWlsdGluL3RhZy5jOjIzCittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLWQgPG5vbcOpdGlxdWV0dGU+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjI0Cittc2dpZCAiIgorImdpdCB0YWcgLWwgWy1uWzxudW0+XV0gWy0tY29udGFpbnMgPGNvbW1pdD5dIFstLXBvaW50cy1hdCA8b2JqZWN0Pl1cbiIKKyJcdFx0WzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamV0Pl1cbiIKKyJcdFx0Wzxtb3RpZj4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjI2Cittc2dpZCAiZ2l0IHRhZyAtdiA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgPG5vbcOpdGlxdWV0dGU+Li4uIgorCisjOiBidWlsdGluL3RhZy5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAib2JqZXQgbWFsZm9ybcOpIMOgICclcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorbXNnc3RyICJub20gZCfDqXRpcXVldHRlIHRyb3AgbG9uZyA6ICUuKnMuLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIsOpdGlxdWV0dGUgJyVzJyBub24gdHJvdXbDqWUuIgorCisjOiBidWlsdGluL3RhZy5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIsOJdGlxdWV0dGUgJyVzJyBzdXBwcmltw6llIChlbGxlIMOpdGFpdCBzdXIgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB2ZXJpZnkgdGhlIHRhZyAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHbDqXJpZmllciBsJ8OpdGlxdWV0dGUgJyVzJyIKKworIzogYnVpbHRpbi90YWcuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisiw4ljcml2ZXogdW4gbWVzc2FnZSBwb3VyIGwnw6l0aXF1ZXR0ZSA6XG4iCisiICAlc1xuIgorIkxlcyBsaWduZXMgY29tbWVuw6dhbnQgcGFyICclYycgc2Vyb250IGlnbm9yw6llcy5cbiIKKworIzogYnVpbHRpbi90YWcuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorIlxuIgorIsOJY3JpdmV6IHVuIG1lc3NhZ2UgcG91ciBsJ8OpdGlxdWV0dGUgOlxuIgorIiAgJXNcbiIKKyJMZXMgbGlnbmVzIGNvbW1lbsOnYW50IHBhciAnJWMnIHNlcm9udCBnYXJkw6llcyA7IHZvdXMgcG91dmV6IGxlcyByZXRpcmVyIHZvdXMtIgorIm3Dqm1lIHNpIHZvdXMgbGUgc291aGFpdGV6LlxuIgorCisjOiBidWlsdGluL3RhZy5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBzb3J0IHNwZWNpZmljYXRpb24gJyVzJyIKK21zZ3N0ciAic3DDqWNpZmljYXRpb24gZGUgdHJpIG5vbiBzdXBwb3J0w6llICclcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHNvcnQgc3BlY2lmaWNhdGlvbiAnJXMnIGluIHZhcmlhYmxlICclcyciCittc2dzdHIgInNww6ljaWZpY2F0aW9uIGRlIHRyaSBub24gc3VwcG9ydMOpZSAnJXMnIGRhbnMgbGUgdmFyaWFibGUgJyVzJyIKKworIzogYnVpbHRpbi90YWcuYzo0MjgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIHNpZ25lciBsJ8OpdGlxdWV0dGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDMwCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmxlIGQnw6ljcmlyZSBsZSBmaWNoaWVyIGQnw6l0aXF1ZXR0ZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDU1Cittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAibWF1dmFpcyB0eXBlIGQnb2JqZXQuIgorCisjOiBidWlsdGluL3RhZy5jOjQ2OAorbXNnaWQgInRhZyBoZWFkZXIgdG9vIGJpZy4iCittc2dzdHIgImVuLXTDqnRlIGQnw6l0aXF1ZXR0ZSB0cm9wIGdyb3MuIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAicGFzIGRlIG1lc3NhZ2UgcG91ciBsJ8OpdGlxdWV0dGUgPyIKKworIzogYnVpbHRpbi90YWcuYzo1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiTGUgbWVzc2FnZSBwb3VyIGwnw6l0aXF1ZXR0ZSBhIMOpdMOpIGxhaXNzw6kgZGFucyAlc1xuIgorCisjOiBidWlsdGluL3RhZy5jOjU1OQorbXNnaWQgInN3aXRjaCAncG9pbnRzLWF0JyByZXF1aXJlcyBhbiBvYmplY3QiCittc2dzdHIgImxlIGNvbW11dGF0ZXVyICdwb2ludHMtYXQnIGEgYmVzb2luIGQndW4gb2JqZXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJub20gZCdvYmpldCBtYWxmb3Jtw6kgJyVzJyIKKworIzogYnVpbHRpbi90YWcuYzo1OTAKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG5vbXMgZGVzIMOpdGlxdWV0dGVzIgorCisjOiBidWlsdGluL3RhZy5jOjU5MgorbXNnaWQgInByaW50IDxuPiBsaW5lcyBvZiBlYWNoIHRhZyBtZXNzYWdlIgorbXNnc3RyICJhZmZpY2hlIDxuPiBsaWduZXMgZGUgY2hhcXVlIG1lc3NhZ2UgZCfDqXRpcXVldHRlIgorCisjOiBidWlsdGluL3RhZy5jOjU5NAorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICJzdXBwcmltZXIgZGVzIMOpdGlxdWV0dGVzIgorCisjOiBidWlsdGluL3RhZy5jOjU5NQorbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICJ2w6lyaWZpZXIgZGVzIMOpdGlxdWV0dGVzIgorCisjOiBidWlsdGluL3RhZy5jOjU5NworbXNnaWQgIlRhZyBjcmVhdGlvbiBvcHRpb25zIgorbXNnc3RyICJPcHRpb25zIGRlIGNyw6lhdGlvbiBkZSBsJ8OpdGlxdWV0dGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTk5Cittc2dpZCAiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIgorbXNnc3RyICLDqXRpcXVldHRlIGFubm90w6llLCBuw6ljZXNzaXRlIHVuIG1lc3NhZ2UiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAxCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgIm1lc3NhZ2UgcG91ciBsJ8OpdGlxdWV0dGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAzCittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAiw6l0aXF1ZXR0ZSBhbm5vdMOpZSBldCBzaWduw6llIGF2ZWMgR1BHIgorCisjOiBidWlsdGluL3RhZy5jOjYwNworbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgInV0aWxpc2VyIHVuZSBhdXRyZSBjbMOpIHBvdXIgc2lnbmVyIGwnw6l0aXF1ZXR0ZSIKKworIzogYnVpbHRpbi90YWcuYzo2MDgKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICJyZW1wbGFjZXIgbCfDqXRpcXVldHRlIHNpIGVsbGUgZXhpc3RlIgorCisjOiBidWlsdGluL3RhZy5jOjYwOSBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgImNyw6llciB1biByZWZsb2ciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjExCittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiT3B0aW9ucyBkJ2FmZmljaGFnZSBkZXMgw6l0aXF1ZXR0ZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjEyCittc2dpZCAic2hvdyB0YWcgbGlzdCBpbiBjb2x1bW5zIgorbXNnc3RyICJhZmZpY2hlciBsYSBsaXN0ZSBkZXMgw6l0aXF1ZXR0ZXMgc291cyBmb3JtZSBkZSBjb2xvbm5lcyIKKworIzogYnVpbHRpbi90YWcuYzo2MTQKK21zZ2lkICJzb3J0IHRhZ3MiCittc2dzdHIgInRyaWVyIGxlcyDDqXRpcXVldHRlcyIKKworIzogYnVpbHRpbi90YWcuYzo2MTkgYnVpbHRpbi90YWcuYzo2MjUKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgw6l0aXF1ZXR0ZXMgcXVpIGNvbnRpZW5uZW50IGxhIHZhbGlkYXRpb24iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjMxCittc2dpZCAicHJpbnQgb25seSB0YWdzIG9mIHRoZSBvYmplY3QiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgw6l0aXF1ZXR0ZXMgZGUgbCdvYmpldCIKKworIzogYnVpbHRpbi90YWcuYzo2NTcKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gZXQgLW4gc29udCBpbmNvbXBhdGlibGVzIgorCisjOiBidWlsdGluL3RhZy5jOjY2OQorbXNnaWQgIi0tc29ydCBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1zb3J0IGV0IC1uIHNvbnQgaW5jb21wYXRpYmxlcyIKKworIzogYnVpbHRpbi90YWcuYzo2NzYKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJsJ29wdGlvbiAtbiBlc3QgYXV0b3Jpc8OpZSBzZXVsZW1lbnQgYXZlYyAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Njc4Cittc2dpZCAiLS1jb250YWlucyBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJsJ29wdGlvbiAtLWNvbnRhaW5zIGVzdCBhdXRvcmlzw6llIHNldWxlbWVudCBhdmVjIC1sLiIKKworIzogYnVpbHRpbi90YWcuYzo2ODAKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJsJ29wdGlvbiAtLXBvaW50cy1hdCBlc3QgYXV0b3Jpc8OpZSBzZXVsZW1lbnQgYXZlYyAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Njg4Cittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJ1bmUgc2V1bGUgb3B0aW9uIC1GIG91IC1tIGVzdCBhdXRvcmlzw6llLiIKKworIzogYnVpbHRpbi90YWcuYzo3MDgKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgInRyb3AgZGUgcGFyYW3DqHRyZXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICInJXMnIG4nZXN0IHBhcyB1biBub20gZCfDqXRpcXVldHRlIHZhbGlkZS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICJsJ8OpdGlxdWV0dGUgJyVzJyBleGlzdGUgZMOpasOgIgorCisjOiBidWlsdGluL3RhZy5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIsOJdGlxdWV0dGUgJyVzJyBtaXNlIMOgIGpvdXIgKGVsbGUgw6l0YWl0IHN1ciAlcylcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjQ5MAorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICJEw6lwYXF1ZXRhZ2UgZGVzIG9iamV0cyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3MAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIGNyw6lhdGlvbiBkdSByw6lwZXJ0b2lyZSAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAiw6ljaGVjIGR1IHN0YXQgZGUgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgY3LDqWF0aW9uIGR1IGZpY2hpZXIgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIgorbXNnc3RyICLDqWNoZWMgZGUgbGEgc3VwcHJlc3Npb24gZHUgZmljaGllciAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDEgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIsOpY2hlYyBkZSBsYSBzdXBwcmVzc2lvbiBkdSByw6lwZXJ0b2lyZSAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGVzdGluZyAiCittc2dzdHIgIlRlc3QgZW4gY291cnMgIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEzNgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICIiCisibCdpbmZvcm1hdGlvbiBkZSBzdGF0IGR1IHLDqXBlcnRvaXJlIG5lIGNoYW5nZSBwYXMgYXByw6hzIGFqb3V0IGQndW4gZmljaGllciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDkKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisibCdpbmZvcm1hdGlvbiBkZSBzdGF0IGR1IHLDqXBlcnRvaXJlIG5lIGNoYW5nZSBwYXMgYXByw6hzIGFqb3V0IGQndW4gcsOpcGVydG9pcmUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTYyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorImwnaW5mb3JtYXRpb24gZGUgc3RhdCBkdSByw6lwZXJ0b2lyZSBjaGFuZ2UgYXByw6hzIG1pc2Ugw6Agam91ciBkJ3VuIGZpY2hpZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTczCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAiIgorImwnaW5mb3JtYXRpb24gZGUgc3RhdCBkdSByw6lwZXJ0b2lyZSBjaGFuZ2UgYXByw6hzIGwnYWpvdXQgZCd1biBmaWNoaWVyIGRhbnMgIgorInVuIHNvdXMtcsOpcGVydG9pcmUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTg0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisibCdpbmZvcm1hdGlvbiBkZSBzdGF0IGR1IHLDqXBlcnRvaXJlIG5lIGNoYW5nZSBwYXMgYXByw6hzIGxhIHN1cHByZXNzaW9uIGQndW4gIgorImZpY2hpZXI8IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisibCdpbmZvcm1hdGlvbiBkZSBzdGF0IGR1IHLDqXBlcnRvaXJlIG5lIGNoYW5nZSBwYXMgYXByw6hzIGxhIHN1cHByZXNzaW9uIGQndW4gIgorInLDqXBlcnRvaXJlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIwNAorbXNnaWQgIiBPSyIKK21zZ3N0ciAiIE9LIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjU2NAorbXNnaWQgImdpdCB1cGRhdGUtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmljaGllcj4uLi5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkxOAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAiY29udGludWVyIGRlIHJhZnJhw65jaGlyIG3Dqm1lIHNpIGwnaW5kZXggYSBiZXNvaW4gZCd1bmUgbWlzZSDDoCBqb3VyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyMQorbXNnaWQgInJlZnJlc2g6IGlnbm9yZSBzdWJtb2R1bGVzIgorbXNnc3RyICJyYWZyYcOuY2hpciA6IGlnbm9yZXIgbGVzIHNvdXMtbW9kdWxlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MjQKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAibmUgcGFzIGlnbm9yZXIgbGVzIG5vdXZlYXV4IGZpY2hpZXJzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyNgorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICJsYWlzc2VyIGxlcyBmaWNoaWVycyByZW1wbGFjZXIgZGVzIHLDqXBlcnRvaXJlcyBldCB2aWNlLXZlcnNhIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyOAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImF2aXNlciBkZXMgZmljaGllcnMgbWFucXVhbnRzIGRhbnMgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzAKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAicmFmcmHDrmNoaXIgbcOqbWUgc2kgbCdpbmRleCBjb250aWVudCBkZXMgw6lsw6ltZW50cyBub24gZnVzaW9ubsOpcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzMKK21zZ2lkICJyZWZyZXNoIHN0YXQgaW5mb3JtYXRpb24iCittc2dzdHIgInJhZnJhw65jaGlyIGwnaW5mb3JtYXRpb24gZGUgc3RhdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzcKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgImNvbW1lIC0tcmVmcmVzaCwgbWFpcyBlbiBpZ25vcmFudCBsJ29wdGlvbiBhc3N1bWUtdW5jaGFuZ2VkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0MQorbXNnaWQgIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iCittc2dzdHIgIjxtb2RlPiwgPG9iamV0PiwgPGNoZW1pbj4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQyCittc2dpZCAiYWRkIHRoZSBzcGVjaWZpZWQgZW50cnkgdG8gdGhlIGluZGV4IgorbXNnc3RyICJham91dGVyIGwnw6lsw6ltZW50IHNww6ljaWZpw6kgZGFucyBsJ2luZGV4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NgorbXNnaWQgIigrLy0peCIKK21zZ3N0ciAiKCsvLSl4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NworbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICJvdXRyZXBhc3NlciBsZSBiaXQgZXjDqWN1dGFibGUgcG91ciBsZXMgZmljaGllcnMgbGlzdMOpcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NTEKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwibm90IGNoYW5naW5nXCIiCittc2dzdHIgIm1hcnF1ZXIgbGVzIGZpY2hpZXJzIGNvbW1lIFwibm9uIGNoYW5nZWFudHNcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NTQKK21zZ2lkICJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiCittc2dzdHIgIm1ldHRyZSDDoCB6w6lybyBsZSBiaXQgc3VwcG9zw6ktbm9uLW1vZGlmacOpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1NworbXNnaWQgIm1hcmsgZmlsZXMgYXMgXCJpbmRleC1vbmx5XCIiCittc2dzdHIgIm1hcnF1ZXIgbGVzIGZpY2hpZXJzIGNvbW1lIFwiaW5kZXggc2V1bGVtZW50XCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTYwCittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgIm1ldHRyZSDDoCB6w6lybyBsZSBiaXQgc2F1dGVyLWxhLWNvcGllLWRlIHRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTYzCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKyJham91dGVyIHNldWxlbWVudCDDoCBsJ2luZGV4IDsgbmUgcGFzIGFqb3V0ZXIgbGUgY29udGVudSBkYW5zIGxhIGJhc2UgZGUgIgorImRvbm7DqWVzIGRlcyBvYmpldHMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY1Cittc2dpZCAicmVtb3ZlIG5hbWVkIHBhdGhzIGV2ZW4gaWYgcHJlc2VudCBpbiB3b3JrdHJlZSIKK21zZ3N0ciAiIgorInN1cHByaW1lciBsZXMgY2hlbWlucyBub21tw6lzIG3Dqm1lIHMnaWxzIHNvbnQgcHLDqXNlbnRzIGRhbnMgbGEgY29waWUgZGUgIgorInRyYXZhaWwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY3Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICJhdmVjIC0tc3RkaW4gOiBsZXMgbGlnbmVzIGVuIGVudHLDqWUgc29udCB0ZXJtaW7DqWVzIHBhciBkZXMgb2N0ZXRzIG51bHMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY5Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAibGlyZSBsYSBsaXN0ZSBkZXMgY2hlbWlucyDDoCBtZXR0cmUgw6Agam91ciBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3MworbXNnaWQgImFkZCBlbnRyaWVzIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGluZGV4IgorbXNnc3RyICJham91dGVyIGxlcyDDqWzDqW1lbnRzIGRlcHVpcyBsJ2VudHLDqWUgc3RhbmRhcmQgw6AgbCdpbmRleCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzcKK21zZ2lkICJyZXBvcHVsYXRlIHN0YWdlcyAjMiBhbmQgIzMgZm9yIHRoZSBsaXN0ZWQgcGF0aHMiCittc2dzdHIgInJlcGV1cGxlciBsZXMgw6l0YXBlcyBuwrAyIGV0IG7CsDMgcG91ciBsZXMgY2hlbWlucyBsaXN0w6lzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MQorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICJtZXR0cmUgw6Agam91ciBzZXVsZW1lbnQgbGVzIMOpbMOpbWVudHMgcXVpIGRpZmbDqHJlbnQgZGUgSEVBRCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODUKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJpZ25vcmVyIGxlcyBmaWNoaWVycyBtYW5xdWFudHMgZGFucyBsYSBjb3BpZSBkZSB0cmF2YWlsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4OAorbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIGFjdGlvbnMgc3VyIGxhIHNvcnRpZSBzdGFuZGFyZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTAKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiKHBvdXIgcG9yY2VsYWluZXMpIG91YmxpZXIgbGVzIGNvbmZsaXRzIHNhdXbDqXMgZXQgbm9uIHLDqXNvbHVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NAorbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICLDqWNyaXJlIGwnaW5kZXggZGFucyBjZSBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk2Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgImFjdGl2ZXIgb3UgZMOpc2FjdGl2ZXIgbCdpbmRleCBkaXZpc8OpIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiYWN0aXZlciBvdSBkw6lzYWN0aXZlciBsZSBjYWNoZSBub24tc3VpdmkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwMAorbXNnaWQgImVuYWJsZSB1bnRyYWNrZWQgY2FjaGUgd2l0aG91dCB0ZXN0aW5nIHRoZSBmaWxlc3lzdGVtIgorbXNnc3RyICJhY3RpdmVyIGxlIGNhY2hlIG5vbi1zdWl2aSBzYW5zIHRlc3RlciBsZSBzeXN0w6htZSBkZSBmaWNoaWVyIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzo5Cittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8bm9tLXLDqWbDqXJlbmNlPiBbPGFuY2llbm5lLXZhbGV1cj5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMAorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dICAgIDxyZWZuYW1lPiA8bmV3LXZhbD4gWzxvbGQtdmFsPl0iCittc2dzdHIgIiIKKyJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8bm9tLXLDqWbDqXJlbmNlPiA8bm91dmVsbGUtdmFsZXVyPiBbPGFuY2llbm5lLSIKKyJ2YWxldXI+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgInN1cHByaW1lciBsYSByw6lmw6lyZW5jZSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY1Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgIm1ldHRyZSDDoCBqb3VyIDxub21yw6lmw6lyZW5jZT4gZXQgbm9uIGxhIHLDqWbDqXJlbmNlIHBvaW50w6llIHBhciBsdWkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgImwnZW50csOpZSBzdGFuZGFyZCBhIGRlcyBhcmd1bWVudHMgcXVpIHNlIHRlcm1pbmVudCBwYXIgTlVMIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibGlyZSBsZXMgbWlzZXMgw6Agam91ciBkZXB1aXMgbCdlbnRyw6llIHN0YW5kYXJkIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjYKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTQKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICJtZXR0cmUgw6Agam91ciBsZXMgZmljaGllcnMgZCdpbmZvcm1hdGlvbiDDoCBwYXJ0aXIgZGUgesOpcm8iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjE3Cittc2dpZCAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NzIKK21zZ2lkICJwcmludCBjb21taXQgY29udGVudHMiCittc2dzdHIgImFmZmljaGVyIGxlIGNvbnRlbnUgZHUgY29tbWl0IgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo3MyBidWlsdGluL3ZlcmlmeS10YWcuYzo4NAorbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG1lc3NhZ2VzIGJydXRzIGRlIGdwZyIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU0Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY0Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAidmVyYmV1eCIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY2Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgImFmZmljaGVyIHNldWxlbWVudCBsZXMgc3RhdGlzdGlxdWVzIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxNworbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gPHRhZz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gPMOpdGlxdWV0dGU+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzo4MworbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAiYWZmaWNoZXIgbGUgY29udGVudSBkZSBsJ8OpdGlxdWV0dGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMworbXNnaWQgImdpdCB3b3JrdHJlZSBhZGQgWzxvcHRpb25zPl0gPHBhdGg+IDxicmFuY2g+IgorbXNnc3RyICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxjaGVtaW4+IDxicmFuY2hlPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE0Cittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGUgd29ya3RyZWVzLyVzwqA6IHLDqXBlcnRvaXJlIGludmFsaWRlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiU3VwcHJlc3Npb24gZGUgd29ya3RyZWVzLyVzwqA6IGxlIGZpY2hpZXIgZ2l0ZGlyIG4nZXhpc3RlIHBhcyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUgKCVzKSIKK21zZ3N0ciAiIgorIlN1cHByZXNzaW9uIGRlIHdvcmt0cmVlcy8lc8KgOiBlY2hlYyBkZSBsYSBsZWN0dXJlIGR1IGZpY2hpZXIgZ2l0ZGlyICglcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIlN1cHByZXNzaW9uIGRlIHdvcmt0cmVlcy8lc8KgOiBmaWNoaWVyIGdpdGRpciBpbnZhbGlkZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIKK21zZ3N0ciAiIgorIlN1cHByZXNzaW9uIGRlIHdvcmt0cmVlcy8lc8KgOiBsZSBmaWNoaWVyIGdpdGRpciBwb2ludCBzdXIgdW4gZW5kcm9pdCAiCisiaW5leGlzdGFudCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlOiAlcyIKK21zZ3N0ciAiw6ljaGVjIGRlIGxhIHN1cHByZXNzaW9uIGRlICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiclcycgZXhpc3RlIGTDqWrDoCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGNyw6llciBsZSByw6lwZXJ0b2lyZSBkZSAnJXMnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlByZXBhcmluZyAlcyAoaWRlbnRpZmllciAlcykiCittc2dzdHIgIlByw6lwYXJhdGlvbiBkZSAlcyAoaWRlbnRpZmlhbnQgJXMpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzE2Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gZXZlbiBpZiBhbHJlYWR5IGNoZWNrZWQgb3V0IGluIG90aGVyIHdvcmt0cmVlIgorbXNnc3RyICIiCisiZXh0cmFpcmUgbGEgPGJyYW5jaGU+IG3Dqm1lIHNpIGVsbGUgZXN0IGTDqWrDoCBleHRyYWl0ZSBkYW5zIHVuZSBhdXRyZSBjb3BpZSBkZSAiCisidHJhdmFpbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMxOAorbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgImNyw6llciB1bmUgbm91dmVsbGUgYnJhbmNoZSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyMAorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAiY3LDqWVyIG91IHLDqWluaXRpYWxpc2VyIHVuZSBicmFuY2hlIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzIxCittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJkw6l0YWNoZXIgbGEgSEVBRCBhdSBjb21taXQgbm9tbcOpIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzI4Cittc2dpZCAiLWIsIC1CLCBhbmQgLS1kZXRhY2ggYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CIGV0IC0tZGV0YWNoIHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2lmcyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTMKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcsOpZml4ZT4vXSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIjxwcsOpZml4ZT4vIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoyNworbXNnaWQgIndyaXRlIHRyZWUgb2JqZWN0IGZvciBhIHN1YmRpcmVjdG9yeSA8cHJlZml4PiIKK21zZ3N0ciAiw6ljcmlyZSBsJ29iamV0IGFyYnJlIHBvdXIgdW4gc291cy1yw6lwZXJ0b2lyZSA8cHLDqWZpeGU+IgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMAorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgInNldWxlbWVudCB1dGlsZSBwb3VyIGxlIGTDqWJvZ2FnZSIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjU1Cittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAiYWZmaWNoZXIgbGVzIG1lc3NhZ2VzIGRlIGRlYnVnIHN1ciBzdGRlcnIiCisKKyM6IGdpdC5jOjE0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC4iCittc2dzdHIgIiIKKyInZ2l0IGhlbHAgLWEnIGV0ICdnaXQgaGVscCAtZycgbGlzdGVudCBsZXMgc291cy1jb21tYW5kZXMgZGlzcG9uaWJsZXMgZXRcbiIKKyJxdWVscXVlcyBjb25jZXB0cy4gVm9pciAnZ2l0IGhlbHAgPGNvbW1hbmRlPicgb3UgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJwb3VyIGVuIGxpcmUgcGx1cyDDoCBwcm9wb3MgZCd1bmUgY29tbWFuZGUgc3DDqWNpZmlxdWUgb3UgZCd1biBjb25jZXB0LiIKKworIzogY29tbW9uLWNtZHMuaDo5Cittc2dpZCAic3RhcnQgYSB3b3JraW5nIGFyZWEgKHNlZSBhbHNvOiBnaXQgaGVscCB0dXRvcmlhbCkiCittc2dzdHIgImTDqW1hcnJlciB1bmUgem9uZSBkZSB0cmF2YWlsICh2b2lyIGF1c3NpwqA6IGdpdCBoZWxwIHR1dG9yaWFsKSIKKworIzogY29tbW9uLWNtZHMuaDoxMAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICIiCisidHJhdmFpbGxlciBzdXIgbGEgbW9kaWZpY2F0aW9uIGFjdHVlbGxlICh2b2lyIGF1c3NpwqA6IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTEKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgImV4YW1pbmVyIGwnaGlzdG9yaXF1ZSBldCBsJ8OpdGF0ICh2b2lyIGF1c3NpwqA6IGdpdCBoZWxwIHJldmlzaW9ucykiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTIKK21zZ2lkICJncm93LCBtYXJrIGFuZCB0d2VhayB5b3VyIGNvbW1vbiBoaXN0b3J5IgorbXNnc3RyICJhZ3JhbmRpciwgbWFycXVlciBldCBtb2RpZmllciB2b3RyZSBoaXN0b3JpcXVlIgorCisjOiBjb21tb24tY21kcy5oOjEzCittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICJjb2xsYWJvcmVyICh2b2lyIGF1c3NpwqA6IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTcKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkFqb3V0ZXIgbGUgY29udGVudSBkZSBmaWNoaWVycyBkYW5zIGwnaW5kZXgiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTgKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJUcm91dmVyIHBhciByZWNoZXJjaGUgYmluYWlyZSBsYSBtb2RpZmljYXRpb24gcXVpIGEgaW50cm9kdWl0IHVuIGJvZ3VlIgorCisjOiBjb21tb24tY21kcy5oOjE5Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkxpc3RlciwgY3LDqWVyIG91IHN1cHByaW1lciBkZXMgYnJhbmNoZXMiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjAKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIkJhc2N1bGVyIGRlIGJyYW5jaGUgb3UgcmVzdGF1cmVyIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjEKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIkNsb25lciB1biBkw6lww7R0IGRhbnMgdW4gbm91dmVhdSByw6lwZXJ0b2lyZSIKKworIzogY29tbW9uLWNtZHMuaDoyMgorbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJFbnJlZ2lzdHJlciBsZXMgbW9kaWZpY2F0aW9ucyBkYW5zIGxlIGTDqXDDtHQiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjMKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICIiCisiQWZmaWNoZXIgbGVzIGNoYW5nZW1lbnRzIGVudHJlIGxlcyB2YWxpZGF0aW9ucywgZW50cmUgdmFsaWRhdGlvbiBldCBjb3BpZSBkZSAiCisidHJhdmFpbCwgZXRjIgorCisjOiBjb21tb24tY21kcy5oOjI0Cittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiVMOpbMOpY2hhcmdlciBsZXMgb2JqZXRzIGV0IHLDqWbDqXJlbmNlcyBkZXB1aXMgdW4gYXV0cmUgZMOpcMO0dCIKKworIzogY29tbW9uLWNtZHMuaDoyNQorbXNnaWQgIlByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybiIKK21zZ3N0ciAiQWZmaWNoZXIgbGVzIGxpZ25lcyBjb3JyZXNwb25kYW50IMOgIHVuIG1vdGlmIgorCisjOiBjb21tb24tY21kcy5oOjI2Cittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIkNyw6llciB1biBkw6lww7R0IEdpdCB2aWRlIG91IHLDqWluaXRpYWxpc2VyIHVuIGV4aXN0YW50IgorCisjOiBjb21tb24tY21kcy5oOjI3Cittc2dpZCAiU2hvdyBjb21taXQgbG9ncyIKK21zZ3N0ciAiQWZmaWNoZXIgbCdoaXN0b3JpcXVlIGRlcyB2YWxpZGF0aW9ucyIKKworIzogY29tbW9uLWNtZHMuaDoyOAorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICJGdXNpb25uZXIgZGV1eCBvdSBwbHVzaWV1cnMgaGlzdG9yaXF1ZXMgZGUgZMOpdmVsb3BwZW1lbnQgZW5zZW1ibGUiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjkKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgIkTDqXBsYWNlciBvdSByZW5vbW1lciB1biBmaWNoaWVyLCB1biByw6lwZXJ0b2lyZSwgb3UgdW4gbGllbiBzeW1ib2xpcXVlIgorCisjOiBjb21tb24tY21kcy5oOjMwCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgaW50ZWdyYXRlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICJSYXBhdHJpZXIgZXQgaW50w6lncmVyIHVuIGF1dHJlIGTDqXDDtHQgb3UgdW5lIGJyYW5jaGUgbG9jYWxlIgorCisjOiBjb21tb24tY21kcy5oOjMxCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJNZXR0cmUgw6Agam91ciBsZXMgcsOpZsOpcmVuY2VzIGRpc3RhbnRlcyBhaW5zaSBxdWUgbGVzIG9iamV0cyBhc3NvY2nDqXMiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzIKK21zZ2lkICJGb3J3YXJkLXBvcnQgbG9jYWwgY29tbWl0cyB0byB0aGUgdXBkYXRlZCB1cHN0cmVhbSBoZWFkIgorbXNnc3RyICIiCisiUmVwb3J0ZXIgbGVzIHZhbGlkYXRpb25zIGxvY2FsZXMgc3VyIGxlIHNvbW1ldCBtaXMgw6Agam91ciBkJ3VuZSBicmFuY2hlIGFtb250IgorCisjOiBjb21tb24tY21kcy5oOjMzCittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIlLDqWluaXRpYWxpc2VyIGxhIEhFQUQgY291cmFudGUgw6AgbCfDqXRhdCBzcMOpY2lmacOpIgorCisjOiBjb21tb24tY21kcy5oOjM0Cittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIlN1cHByaW1lciBkZXMgZmljaGllcnMgZGUgbGEgY29waWUgZGUgdHJhdmFpbCBldCBkZSBsJ2luZGV4IgorCisjOiBjb21tb24tY21kcy5oOjM1Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIkFmZmljaGVyIGRpZmbDqXJlbnRzIHR5cGVzIGQnb2JqZXRzIgorCisjOiBjb21tb24tY21kcy5oOjM2Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiQWZmaWNoZXIgbGUgc3RhdHV0IGRlIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzcKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiIgorIkNyw6llciwgbGlzdGVyLCBzdXBwcmltZXIgb3UgdsOpcmlmaWVyIHVuIG9iamV0IGQnw6l0aXF1ZXR0ZSBzaWduw6kgYXZlYyBHUEciCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNDUKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAiZGF0ZS1kJ2V4cGlyYXRpb24iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNjAKK21zZ2lkICJuby1vcCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkiCittc2dzdHIgInNhbnMgYWN0aW9uIChyw6l0cm9jb21wYXRpYmlsaXTDqSkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzYKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgIsOqdHJlIHBsdXMgdmVyYmV1eCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIzOAorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgIsOqdHJlIHBsdXMgc2lsZW5jaWV1eCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjI0NAorbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICJ1dGlsaXNlciA8bj4gY2hpZmZyZXMgcG91ciBhZmZpY2hlciBsZXMgU0hBLTFzIgorCisjOiByZXJlcmUuaDoyOAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiIgorIm1ldCDDoCBqb3VyIGwnaW5kZXggYXZlYyBsZXMgcsOpc29sdXRpb25zIGRlIGNvbmZsaXQgcsOpdXRpbGlzw6llcyBzaSBwb3NzaWJsZSIKKworIzogZ2l0LWJpc2VjdC5zaDo1MAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICJWb3VzIGRldmV6IGTDqW1hcnJlciBhdmVjIFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NTYKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIlNvdWhhaXRlei12b3VzIHF1ZSBqZSBsZSBmYXNzZSBwb3VyIHZvdXMgW1kvbl0gPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKK21zZ3N0ciAib3B0aW9uIGluY29ubnVlIDogJyRhcmcnIgorCisjOiBnaXQtYmlzZWN0LnNoOjEwMworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmcnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICInJGFyZycgbmUgc2VtYmxlIMOqdHJlIHVuZSByw6l2aXNpb24gdmFsaWRlIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMgorbXNnaWQgIkJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAiTWF1dmFpc2UgSEVBRCAtIGonYWkgYmVzb2luIGQndW5lIEhFQUQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTQ1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlY2tpbmcgb3V0ICckc3RhcnRfaGVhZCcgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAiIgorIkwnZXh0cmFjdGlvbiBkZSAnJHN0YXJ0X2hlYWQnIGEgw6ljaG91w6kuIEVzc2F5ZXogJ2dpdCBiaXNlY3QgcmVzZXQgPGJyYW5jaGUtIgorInZhbGlkZT4nLiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNTUKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gY2ctc2VlaydlZCB0cmVlIgorbXNnc3RyICJyZWZ1cyBkZSBiaXNzZWN0ZXIgc3VyIHVuIGFyYnJlICdjZy1zZWVrZWQnIgorCisjOiBnaXQtYmlzZWN0LnNoOjE1OQorbXNnaWQgIkJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIk1hdXZhaXNlIEhFQUQgLSByw6lmw6lyZW5jZSBzeW1ib2xpcXVlIGRvdXRldXNlIgorCisjOiBnaXQtYmlzZWN0LnNoOjIxMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIGJpc2VjdF93cml0ZSBhcmd1bWVudDogJHN0YXRlIgorbXNnc3RyICJNYXV2YWlzIGFyZ3VtZW50IHBvdXIgYmlzZWN0X3dyaXRlIDogJHN0YXRlIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAiTWF1dmFpc2UgcsOpdmlzaW9uIGVuIGVudHLDqWUgOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjI1NQorbXNnaWQgIlBsZWFzZSBjYWxsICdiaXNlY3Rfc3RhdGUnIHdpdGggYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiVmV1aWxsZXogYXBwZWxlciAnYmlzZWN0X3N0YXRlJyBhdmVjIGF1IG1vaW5zIHVuIGFyZ3VtZW50LiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIk1hdXZhaXNlIHLDqXZpc2lvbiBlbiBlbnRyw6llIDogJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICInZ2l0IGJpc2VjdCAkVEVSTV9CQUQnIG4nYWNjZXB0ZSBxdSd1biBzZXVsIGFyZ3VtZW50LiIKKworIzogZ2l0LWJpc2VjdC5zaDoyOTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIldhcm5pbmc6IGJpc2VjdGluZyBvbmx5IHdpdGggYSAkVEVSTV9CQUQgY29tbWl0LiIKK21zZ3N0ciAiQXR0ZW50aW9uIDogYmlzc2VjdGlvbiBhdmVjIHNldWxlbWVudCB1bmUgdmFsaWRhdGlvbiAkVEVSTV9CQUQuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6MzA1Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIsOKdGVzLXZvdXMgc8O7ciBbWS9uXSA/ICIKKworIzogZ2l0LWJpc2VjdC5zaDozMTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAkYmFkX3N5biBhbmQgb25lICRnb29kX3N5biByZXZpc2lvbi5cbiIKKyIoWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICRiYWRfc3luXCIgYW5kIFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiBmb3IgdGhhdC4pIgorbXNnc3RyICIiCisiVm91cyBkZXZleiBtZSBkb25uZXIgYXUgbW9pbnMgdW5lIHLDqXZpc2lvbiAkYmFkX3N5biBldCB1bmUgcsOpdmlzaW9uICIKKyIkZ29vZF9zeW4uXG4iCisiKFZvdXMgcG91dmV6IHV0aWxpc2VyIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGV0IFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiAiCisicG91ciBjZWxhLikiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzIwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAkZ29vZF9zeW4gYW5kIG9uZSAkYmFkX3N5biByZXZpc2lvbi5cbiIKKyIoWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICRiYWRfc3luXCIgYW5kIFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiBmb3IgdGhhdC4pIgorbXNnc3RyICIiCisiVm91cyBkZXZleiBkw6ltYXJyZXIgYXZlYyBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJQdWlzIHZvdXMgZGV2ZXogbWUgZG9ubmVyIGF1IG1vaW5zIHVuZSByw6l2aXNpb24gJGdvb2Rfc3luIGV0IHVuZSByw6l2aXNpb24gIgorIiRiYWRfc3luLlxuIgorIihWb3VzIHBvdXZleiB1dGlsaXNlciBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBldCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgIgorInBvdXIgY2VsYS4pIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5MSBnaXQtYmlzZWN0LnNoOjUyMQorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiUGFzIGRlIGJpc3NlY3Rpb24gZW4gY291cnMuIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5OAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIickaW52YWxpZCcgbidlc3QgcGFzIHVuZSB2YWxpZGF0aW9uIHZhbGlkZSIKKworIzogZ2l0LWJpc2VjdC5zaDo0MDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyRicmFuY2gnLlxuIgorIlRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiw4ljaGVjIGQnZXh0cmFjdGlvbiBkZSBsYSBIRUFEIGQnb3JpZ2luZSAnJGJyYW5jaCcuXG4iCisiRXNzYXlleiAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorCisjOiBnaXQtYmlzZWN0LnNoOjQzNQorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIlBhcyBkZSBmaWNoaWVyIGRlIGxvZyBkb25uw6kiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICJpbXBvc3NpYmxlIGRlIGxpcmUgJGZpbGUgcG91ciByZWpvdWVyIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1NQorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiPz8gZGUgcXVvaSBwYXJsZXotdm91cyA/IgorCisjOiBnaXQtYmlzZWN0LnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAibGFuY2VtZW50IGRlICRjb21tYW5kIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisibGEgYmlzc2VjdGlvbiBhIMOpY2hvdcOpIDpcbiIKKyJsZSBjb2RlIHJldG91ciAkcmVzIGRlICckY29tbWFuZCcgZXN0IDwgMCBvdSA+PSAxMjgiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTAwCittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgImxhIGJpc3NlY3Rpb24gbmUgcGV1dCBwbHVzIGNvbnRpbnVlciIKKworIzogZ2l0LWJpc2VjdC5zaDo1MDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisibGEgYmlzc2VjdGlvbiBhIMOpY2hvdcOpIDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgYSByZXRvdXJuw6kgbGUgY29kZSBlcnJldXIgJHJlcyIKKworIzogZ2l0LWJpc2VjdC5zaDo1MTMKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgInN1Y2PDqHMgZGUgbGEgYmlzc2VjdGlvbiIKKworIzogZ2l0LWJpc2VjdC5zaDo1NDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICRURVJNX0JBRC8kVEVSTV9HT09EIGJpc2VjdC4iCittc2dzdHIgIiIKKyJDb21tYW5kZSBpbnZhbGlkZcKgOiB2b3VzIMOqdGVzIGFjdHVlbGxlbWVudCBkYW5zIHVuZSBiaXNzZWN0aW9uICRURVJNX0JBRC8iCisiJFRFUk1fR09PRC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTcKK21zZ2lkICIiCisiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiIGluc3RlYWQuXG4iCisiVG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcmViYXNpbmcsIHJ1biBcImdpdCByZWJhc2UgLS1hYm9ydCIKKyJcIi4iCittc2dzdHIgIiIKKyJMb3JzcXVlIHZvdXMgYXVyZXogcsOpc29sdSBjZSBwcm9ibMOobWUsIGxhbmNleiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIlNpIHZvdXMgcHLDqWbDqXJleiBzYXV0ZXIgY2UgcGF0Y2gsIGxhbmNleiBcImdpdCByZWJhc2UgLS1za2lwXCIgw6AgbGEgcGxhY2UuXG4iCisiUG91ciBleHRyYWlyZSBsYSBicmFuY2hlIGQnb3JpZ2luZSBldCBzdG9wcGVyIGxlIHJlYmFzYWdlLCBsYW5jZXogXCJnaXQgIgorInJlYmFzZSAtLWFib3J0XCIuIgorCisjOiBnaXQtcmViYXNlLnNoOjE2NQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAiQXV0b3JlbWlzYWdlIGFwcGxpcXXDqS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTY4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIkltcG9zc2libGUgZGUgc3RvY2tlciAkc3Rhc2hfc2hhMSIKKworIzogZ2l0LXJlYmFzZS5zaDoxNjkKK21zZ2lkICIiCisiQXBwbHlpbmcgYXV0b3N0YXNoIHJlc3VsdGVkIGluIGNvbmZsaWN0cy5cbiIKKyJZb3VyIGNoYW5nZXMgYXJlIHNhZmUgaW4gdGhlIHN0YXNoLlxuIgorIllvdSBjYW4gcnVuIFwiZ2l0IHN0YXNoIHBvcFwiIG9yIFwiZ2l0IHN0YXNoIGRyb3BcIiBhdCBhbnkgdGltZS5cbiIKK21zZ3N0ciAiIgorIkwnYXBwbGljYXRpb24gZGUgbCdhdXRvcmVtaXNhZ2UgYSBwcm92b3F1w6kgZGVzIGNvbmZsaXRzXG4iCisiVm9zICBtb2RpZmljYXRpb25zIHNvbnQgw6AgbCdhYnJpIGRhbnMgbGEgcmVtaXNlLlxuIgorIlZvdXMgcG91dmV6IGxhbmNlciBcImdpdCBzdGFzaCBwb3BcIiBvdSBcImdpdCBzdGFzaCBkcm9wXCIgw6AgdG91dCBtb21lbnQuXG4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjA4Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIkxlIGNyb2NoZXQgcHJlLXJlYmFzZSBhIHJlZnVzw6kgZGUgcmViYXNlci4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjEzCittc2dpZCAiSXQgbG9va3MgbGlrZSBnaXQtYW0gaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICJJbCBzZW1ibGUgcXVlIGdpdC1hbSBzb2l0IGVuIGNvdXJzLiBJbXBvc3NpYmxlIGRlIHJlYmFzZXIuIgorCisjOiBnaXQtcmViYXNlLnNoOjM1MQorbXNnaWQgIlRoZSAtLWV4ZWMgb3B0aW9uIG11c3QgYmUgdXNlZCB3aXRoIHRoZSAtLWludGVyYWN0aXZlIG9wdGlvbiIKK21zZ3N0ciAiTCdvcHRpb24gLS1leGVjIGRvaXQgw6p0cmUgdXRpbGlzw6llIGF2ZWMgbCdvcHRpb24gLS1pbnRlcmFjdGl2ZSIKKworIzogZ2l0LXJlYmFzZS5zaDozNTYKK21zZ2lkICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorbXNnc3RyICJQYXMgZGUgcmViYXNhZ2UgZW4gY291cnMgPyIKKworIzogZ2l0LXJlYmFzZS5zaDozNjcKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIiIKKyJMJ2FjdGlvbiAtLWVkaXQtdG9kbyBwZXV0IHNldWxlbWVudCDDqnRyZSB1dGlsaXPDqWUgbG9ycyBkJ3VuIHJlYmFzYWdlICIKKyJpbnRlcmFjdGlmLiIKKworIzogZ2l0LXJlYmFzZS5zaDozNzQKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGxpcmUgSEVBRCIKKworIzogZ2l0LXJlYmFzZS5zaDozNzcKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyJWb3VzIGRldmV6IMOpZGl0ZXIgdG91cyBsZXMgY29uZmxpdHMgZGUgZnVzaW9uIGV0XG4iCisibGVzIG1hcnF1ZXIgY29tbWUgcsOpc29sdXMgYXZlYyBnaXQgYWRkIgorCisjOiBnaXQtcmViYXNlLnNoOjM5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJldmVuaXIgw6AgJGhlYWRfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo0MTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAkc3RhdGVfZGlyX2Jhc2UgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuIgorbXNnc3RyICIiCisiSWwgc2VtYmxlIHF1J2lsIHkgYWl0IGTDqWrDoCB1biByw6lwZXJ0b2lyZSAkc3RhdGVfZGlyX2Jhc2UsIGV0IGplIG1lIGRlbWFuZGVcbiIKKyJzaSB1biBhdXRyZSByZWJhc2FnZSBuJ2VzdCBwYXMgZMOpasOgIGVuIGNvdXJzLiBTaSBjJ2VzdCBsZSBjYXMsXG4iCisiZXNzYXllelxuIgorIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorIlNpbm9uLCBlc3NheWV6XG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorInB1aXMgcmVsYW5jZXotbW9pIMOgIG5vdXZlYXUuICBKZSBtJ2FycsOqdGUgYXUgY2FzIG/DuSB2b3VzIGF1cmlleiBxdWVscXVlICIKKyJjaG9zZVxuIgorImQnaW1wb3J0YW50IGljaS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDY1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHVwc3RyZWFtICR1cHN0cmVhbV9uYW1lIgorbXNnc3RyICJpbnZhbGlkZSAkdXBzdHJlYW1fbmFtZSBlbiBhbW9udCIKKworIzogZ2l0LXJlYmFzZS5zaDo0ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIgorbXNnc3RyICIkb250b19uYW1lIDogaWwgeSBhIHBsdXMgZCd1bmUgYmFzZSBkZSBmdXNpb24iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDkyIGdpdC1yZWJhc2Uuc2g6NDk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkb250b19uYW1lOiB0aGVyZSBpcyBubyBtZXJnZSBiYXNlIgorbXNnc3RyICIkb250b19uYW1lIDogaWwgbid5IGEgcGFzIGRlIGJhc2UgZGUgZnVzaW9uIgorCisjOiBnaXQtcmViYXNlLnNoOjUwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6ICRvbnRvX25hbWUiCittc2dzdHIgIk5lIHBvaW50ZSBwYXMgc3VyIHVuZSB2YWxpZGF0aW9uIHZhbGlkZSA6ICRvbnRvX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2g6ICRicmFuY2hfbmFtZSIKK21zZ3N0ciAiZmF0YWwgOiBwYXMgZGUgYnJhbmNoZSA6ICRicmFuY2hfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo1NTcKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICJBdXRvcmVtaXNhZ2UgaW1wb3NzaWJsZSIKKworIzogZ2l0LXJlYmFzZS5zaDo1NjIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAkc3Rhc2hfYWJicmV2IgorbXNnc3RyICJBdXRvcmVtaXNhZ2UgY3LDqcOpIDogJHN0YXNoX2FiYnJldiIKKworIzogZ2l0LXJlYmFzZS5zaDo1NjYKK21zZ2lkICJQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0uIgorbXNnc3RyICJWZXVpbGxleiBsZXMgdmFsaWRlciBvdSBsZXMgcmVtaXNlci4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTg2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgIkxhIGJyYW5jaGUgY291cmFudGUgJGJyYW5jaF9uYW1lIGVzdCDDoCBqb3VyLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiTGEgYnJhbmNoZSBjb3VyYW50ZSAkYnJhbmNoX25hbWUgZXN0IMOgIGpvdXIsIHJlYmFzYWdlIGZvcmPDqS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIGZyb20gJG1iIHRvICRvbnRvOiIKK21zZ3N0ciAiQ2hhbmdlbWVudHMgZGUgJG1iIHN1ciAkb250byA6IgorCisjOiBnaXQtcmViYXNlLnNoOjYxMAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKK21zZ3N0ciAiIgorIlByZW1pw6hyZW1lbnQsIHJlbWJvYmlub25zIGhlYWQgcG91ciByZWpvdWVyIHZvdHJlIHRyYXZhaWwgcGFyLWRlc3N1cy4uLiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICRicmFuY2hfbmFtZSB0byAkb250b19uYW1lLiIKK21zZ3N0ciAiJGJyYW5jaF9uYW1lIG1pc2Ugw6Agam91ciBlbiBhdmFuY2UgcmFwaWRlIHN1ciAkb250b19uYW1lLiIKKworIzogZ2l0LXN0YXNoLnNoOjUxCittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICJnaXQgc3Rhc2ggY2xlYXIgYXZlYyBkZXMgcGFyYW3DqHRyZXMgbidlc3QgcGFzIGltcGzDqW1lbnTDqSIKKworIzogZ2l0LXN0YXNoLnNoOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIlZvdXMgbidhdmV6IHBhcyBlbmNvcmUgbGEgdmFsaWRhdGlvbiBpbml0aWFsZSIKKworIzogZ2l0LXN0YXNoLnNoOjg5Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIkltcG9zc2libGUgZGUgc2F1dmVyIGwnw6l0YXQgY291cmFudCBkZSBsJ2luZGV4IgorCisjOiBnaXQtc3Rhc2guc2g6MTI0IGdpdC1zdGFzaC5zaDoxMzcKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzYXV2ZXIgbCfDqXRhdCBjb3VyYW50IGRlIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDEKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICJBdWN1biBjaGFuZ2VtZW50IHPDqWxlY3Rpb25uw6kiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDQKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbCdpbmRleCB0ZW1wb3JhaXJlIChuZSBwZXV0IHBhcyBzZSBwcm9kdWlyZSkiCisKKyM6IGdpdC1zdGFzaC5zaDoxNTcKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2VucmVnaXN0cmVyIGwnw6l0YXQgZGUgbGEgY29waWUgZGUgdHJhdmFpbCIKKworIzogZ2l0LXN0YXNoLnNoOjE4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAkcmVmX3N0YXNoIHdpdGggJHdfY29tbWl0IgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyICRyZWZfc3Rhc2ggYXZlYyAkd19jb21taXQiCisKKyMuIFRSQU5TTEFUT1JTOiAkb3B0aW9uIGlzIGFuIGludmFsaWQgb3B0aW9uLCBsaWtlCisjLiBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMuIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKyMuIHVwIHRoZSBzZWNvbmQgbGluZSB3aXRoIGhvd2V2ZXIgbWFueSBjaGFyYWN0ZXJzIHRoZQorIy4gdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKyMuIEVuZ2xpc2ggdGhpcyBpczoKKyMuCisjLiAkIGdpdCBzdGFzaCBzYXZlIC0tYmxhaC1ibGFoIDI+JjEgfCBoZWFkIC1uIDIKKyMuIGVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAtLWJsYWgtYmxhaAorIy4gVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnLS1ibGFoLWJsYWgnCisjOiBnaXQtc3Rhc2guc2g6MjM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyIgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCittc2dzdHIgIiIKKyJlcnJldXI6IG9wdGlvbiBpbmNvbm51ZSBwb3VyICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorIiAgICAgICAgUG91ciBmb3VybmlyIHVuIG1lc3NhZ2UsIHV0aWxpc2V6IGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKKworIzogZ2l0LXN0YXNoLnNoOjI2MAorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiUGFzIGRlIG1vZGlmaWNhdGlvbnMgbG9jYWxlcyDDoCBzYXV2ZXIiCisKKyM6IGdpdC1zdGFzaC5zaDoyNjQKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkJ2luaXRpYWxpc2VyIGxlIHJlbWlzYWdlIgorCisjOiBnaXQtc3Rhc2guc2g6MjY4Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHNhdXZlciBsZSBzdGF0dXQgY291cmFudCIKKworIzogZ2l0LXN0YXNoLnNoOjI4NgorbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgbGVzIGNoYW5nZW1lbnRzIGRlIGxhIGNvcGllIGRlIHRyYXZhaWwiCisKKyM6IGdpdC1zdGFzaC5zaDozODcKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICJvcHRpb24gaW5jb25udWXCoDogJG9wdCIKKworIzogZ2l0LXN0YXNoLnNoOjM5NworbXNnaWQgIk5vIHN0YXNoIGZvdW5kLiIKK21zZ3N0ciAiUGFzIGRlIHJlbWlzYWdlIHRyb3V2w6kuIgorCisjOiBnaXQtc3Rhc2guc2g6NDA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICJUcm9wIGRlIHLDqXZpc2lvbnMgc3DDqWNpZmnDqWVzIDogJFJFViIKKworIzogZ2l0LXN0YXNoLnNoOjQxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiRyZWZlcmVuY2Ugbidlc3QgcGFzIHVuZSByw6lmw6lyZW5jZSB2YWxpZGUiCisKKyM6IGdpdC1zdGFzaC5zaDo0MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIickYXJncycgbidlc3QgcGFzIHVuZSB2YWxpZGF0aW9uIGRlIHR5cGUgcmVtaXNhZ2UiCisKKyM6IGdpdC1zdGFzaC5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICInJGFyZ3MnIG4nZXN0IHBhcyB1bmUgcsOpZsOpcmVuY2UgZGUgcmVtaXNhZ2UiCisKKyM6IGdpdC1zdGFzaC5zaDo0NTcKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiaW1wb3NzaWJsZSBkZSByYWZyYcOuY2hpciBsJ2luZGV4IgorCisjOiBnaXQtc3Rhc2guc2g6NDYxCittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICJJbXBvc3NpYmxlIGQnYXBwbGlxdWVyIHVuIHJlbWlzYWdlIGVuIGNvdXJzIGRlIGZ1c2lvbiIKKworIzogZ2l0LXN0YXNoLnNoOjQ2OQorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIkNvbmZsaXRzIGRhbnMgbCdpbmRleC4gRXNzYXlleiBzYW5zIC0taW5kZXguIgorCisjOiBnaXQtc3Rhc2guc2g6NDcxCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBzYXV2ZWdhcmRlciBsJ2FyYnJlIGQnaW5kZXgiCisKKyM6IGdpdC1zdGFzaC5zaDo1MDUKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiSW1wb3NzaWJsZSBkZSBkw6lzaW5kZXhlciBsZXMgZmljaGllcnMgbW9kaWZpw6lzIgorCisjOiBnaXQtc3Rhc2guc2g6NTIwCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICJMJ2luZGV4IG4nYSBwYXMgw6l0w6kgc29ydGkgZGUgcmVtaXNlLiIKKworIzogZ2l0LXN0YXNoLnNoOjU0MworIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiJHtSRVZ9IHN1cHByaW3DqSAoJHMpIgorCisjOiBnaXQtc3Rhc2guc2g6NTQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIke1JFVn06IENvdWxkIG5vdCBkcm9wIHN0YXNoIGVudHJ5IgorbXNnc3RyICIke1JFVn06IEltcG9zc2libGUgZGUgc3VwcHJpbWVyIGwnw6lsw6ltZW50IGRlIHN0YXNoIgorCisjOiBnaXQtc3Rhc2guc2g6NTUyCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJBdWN1bmUgYnJhbmNoZSBzcMOpY2lmacOpZSIKKworIzogZ2l0LXN0YXNoLnNoOjYyNAorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiKFBvdXIgbGVzIHJlc3RhdXJlciB0YXBleiBcImdpdCBzdGFzaCBhcHBseVwiKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJHJlbW90ZXVybCciCittc2dzdHIgImltcG9zc2libGUgZGUgc3VwcHJpbWVyIHVuIGNvbXBvc2FudCBkZSBsJ1VSTCAnJHJlbW90ZXVybCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisiUGFzIGRlIG1pc2UgZW4gY29ycmVzcG9uZGFuY2UgZHUgc291cy1tb2R1bGUgdHJvdXbDqSBkYW5zIC5naXRtb2R1bGVzIHBvdXIgbGUgIgorImNoZW1pbiAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4NworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBmYWlsZWQiCittc2dzdHIgIkxlIGNsb25hZ2UgZGUgJyR1cmwnIGRhbnMgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICckc21fcGF0aCcgYSDDqWNob3XDqSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyOTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkdpdGRpciAnJGEnIGlzIHBhcnQgb2YgdGhlIHN1Ym1vZHVsZSBwYXRoICckYicgb3IgdmljZSB2ZXJzYSIKK21zZ3N0ciAiIgorIkxlIHLDqXBlcnRvaXJlIEdpdCAnJGEnIGZhaXQgcGFydGllIGR1IGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJGInIG91IHZpY2UtIgorInZlcnNhIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQwNgorbXNnaWQgIlJlbGF0aXZlIHBhdGggY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisiVW4gY2hlbWluIHJlbGF0aWYgbmUgcGV1dCDDqnRyZSB1dGlsaXPDqSBxdWUgZGVwdWlzIGxhIHJhY2luZSBkZSBsYSBjb3BpZSBkZSAiCisidHJhdmFpbCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgIkwnVVJMIGRlIGTDqXDDtHQgJyRyZXBvJyBkb2l0IMOqdHJlIGFic29sdSBvdSBjb21tZW5jZXIgcGFyIC4vfC4uLyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICInJHNtX3BhdGgnIGV4aXN0ZSBkw6lqw6AgZGFucyBsJ2luZGV4IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQzNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgIiIKKyJMZSBjaGVtaW4gc3VpdmFudCBlc3QgaWdub3LDqSBwYXIgdW4gZGUgdm9zIGZpY2hpZXJzIC5naXRpZ25vcmUgOlxuIgorIiRzbV9wYXRoXG4iCisiVXRpbGlzZXogLWYgc2kgdm91cyB2b3VsZXogdnJhaW1lbnQgbCdham91dGVyLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICJBam91dCBkdSBkw6lww7R0IGV4aXN0YW50IMOgICckc21fcGF0aCcgZGFucyBsJ2luZGV4IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ1NworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIickc21fcGF0aCcgZXhpc3RlIGTDqWrDoCBldCBuJ2VzdCBwYXMgdW4gZMOpcMO0dCBnaXQgdmFsaWRlIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQSBnaXQgZGlyZWN0b3J5IGZvciAnJHNtX25hbWUnIGlzIGZvdW5kIGxvY2FsbHkgd2l0aCByZW1vdGUocyk6IgorbXNnc3RyICIiCisiVW4gcsOpcGVydG9pcmUgZ2l0IHBvdXIgJyRzbV9uYW1lJyBlc3QgdHJvdXbDqSBlbiBsb2NhbCBhdmVjIGxlKHMpIHNlcnZldXIocykgIgorImRpc3RhbnQocykgOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb20iCittc2dzdHIgIiIKKyJTaSB2b3VzIHZvdWxleiByw6l1dGlsaXNlciBjZSByw6lwZXJ0b2lyZSBnaXQgbG9jYWwgYXUgbGlldSBkZSBjbG9uZXIgw6AgIgorIm5vdXZlYXUgZGVwdWlzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0IHJlcG8iCittc2dzdHIgIiIKKyJ1dGlsaXNleiBsJ29wdGlvbiAnLS1mb3JjZScuIFNpIGxlIHLDqXBlcnRvaXJlIGxvY2FsIGdpdCBuJ2VzdCBwYXMgbGUgZMOpcMO0dCAiCisiY29ycmVjdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorIm91IHZvdXMgbmUgc2F2ZXogcGFzIGNlIHF1ZSBjZWxhIHNpZ25pZmllIGRlIGNob2lzaXIgdW4gYXV0cmUgbm9tIGF2ZWMgIgorImwnb3B0aW9uICctLW5hbWUnLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIlLDqWFjdGl2YXRpb24gZHUgcsOpcGVydG9pcmUgZ2l0IGxvY2FsIHBvdXIgbGUgc291cy1tb2R1bGUgJyRzbV9uYW1lJy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDg0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIkltcG9zc2libGUgZCdleHRyYWlyZSBsZSBzb3VzLW1vZHVsZSAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiw4ljaGVjIGQnYWpvdXQgZHUgc291cy1tb2R1bGUgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0OTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiw4ljaGVjIGQnZW5yZWdpc3RyZW1lbnQgZHUgc291cy1tb2R1bGUgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICckcHJlZml4JGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiRW50csOpZSBkYW5zICckcHJlZml4JGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NjIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwaW5nIGF0ICckcHJlZml4JGRpc3BsYXlwYXRoJzsgc2NyaXB0IHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cy4iCittc2dzdHIgIiIKKyJBcnLDqnQgc3VyICckcHJlZml4JGRpc3BsYXlwYXRoJyA7IGxlIHNjcmlwdCBhIHJldG91cm7DqSB1biBzdGF0dXQgbm9uIG51bC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICIiCisiVVJMIG5vbiB0cm91dsOpZSBwb3VyIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJGRpc3BsYXlwYXRoJyBkYW5zIC5naXRtb2R1bGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyLDiWNoZWMgZCdlbnJlZ2lzdHJlbWVudCBkZSBsJ1VSTCBwb3VyIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSByZWdpc3RlcmVkIGZvciBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJTb3VzLW1vZHVsZSAnJG5hbWUnICgkdXJsKSBlbnJlZ2lzdHLDqSBwb3VyIGxlIGNoZW1pbiAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyLDiWNoZWMgZCdlbnJlZ2lzdHJlbWVudCBkdSBtb2RlIGRlIG1pc2Ugw6Agam91ciBwb3VyIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAiCisiJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVc2UgJy4nIGlmIHlvdSByZWFsbHkgd2FudCB0byBkZWluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKyJVdGlsaXNleiAnLicgc2kgdm91cyB2b3VsZXogdnJhaW1lbnQgcsOpaW5pdGlhbGlzZXIgdG91cyBsZXMgc291cy1tb2R1bGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHdvcmsgdHJlZSAnJGRpc3BsYXlwYXRoJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiTGEgY29waWUgZGUgdHJhdmFpbCBkdSBzb3VzLW1vZHVsZSAnJGRpc3BsYXlwYXRoJyBjb250aWVudCB1biByw6lwZXJ0b2lyZSAuZ2l0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIih1dGlsaXNleiAncm0gLXJmJyBzaSB2b3VzIHZvdWxleiB2cmFpbWVudCBsZSBzdXBwcmltZXIgZW4gaW5jbHVhbnQgdG91dCBzb24gIgorImhpc3RvcmlxdWUpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5OAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gIgorImRpc2NhcmQgdGhlbSIKK21zZ3N0ciAiIgorIkxhIGNvcGllIGRlIHRyYXZhaWwgZHUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCcgY29udGllbnQgZGVzIG1vZGlmaWNhdGlvbnMgIgorImxvY2FsZXMgOyB1dGlsaXNleiAnLWYnIHBvdXIgbGVzIGFubnVsZXIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDbGVhcmVkIGRpcmVjdG9yeSAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiUsOpcGVydG9pcmUgJyRkaXNwbGF5cGF0aCcgbmV0dG95w6kiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBsYSBjb3BpZSBkZSB0cmF2YWlsIGR1IHNvdXMtbW9kdWxlICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNyw6llciBsZSByw6lwZXJ0b2lyZSB2aWRlIGR1IHNvdXMtbW9kdWxlICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIkxlIHNvdXMtbW9kdWxlICckbmFtZScgKCR1cmwpIG4nZXN0IHBhcyBlbnJlZ2lzdHLDqSBwb3VyIGxlIGNoZW1pbiAiCisiJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIiIKKyJDaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCcgbm9uIGluaXRpYWxpc8OpXG4iCisiUGV1dC3DqnRyZSBzb3VoYWl0ZXotdm91cyB1dGlsaXNlciAndXBkYXRlIC0taW5pdCcgPyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGEgcsOpdmlzaW9uIGNvdXJhbnRlIGRhbnMgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICIKKyInJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJhcGF0cmllciBkYW5zIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJJbXBvc3NpYmxlIGRlIHJhcGF0cmllciBkYW5zIGxlIGNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkJ2V4dHJhaXJlICckc2hhMScgZGFucyBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAiQ2hlbWluIGRlIHNvdXMtbW9kdWxlICckZGlzcGxheXBhdGgnIDogJyRzaGExJyBleHRyYWl0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiSW1wb3NzaWJsZSBkZSByZWJhc2VyICckc2hhMScgZGFucyBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIkNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJGRpc3BsYXlwYXRoJyA6IHJlYmFzw6kgZGFucyAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJJbXBvc3NpYmxlIGRlIGZ1c2lvbm5lciAnJHNoYTEnIGRhbnMgbGUgY2hlbWluIGRlIHNvdXMtbW9kdWxlICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwMgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICJDaGVtaW4gZGUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCcgOiBmdXNpb25uw6kgZGFucyAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJHByZWZpeCRzbV9wYXRoJyIKK21zZ3N0ciAiIgorIkwnZXjDqWN1dGlvbiBkZSAnJGNvbW1hbmQgJHNoYTEnIGEgw6ljaG91w6kgZGFucyBsZSBjaGVtaW4gZGUgc291cy1tb2R1bGUgIgorIickcHJlZml4JHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRwcmVmaXgkc21fcGF0aCc6ICckY29tbWFuZCAkc2hhMSciCittc2dzdHIgIkNoZW1pbiBkZSBzb3VzLW1vZHVsZSAnJHByZWZpeCRzbV9wYXRoJyA6ICckY29tbWFuZCAkc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLDiWNoZWMgZGUgcGFyY291cnMgZGFucyBsZSBjaGVtaW4gZHUgc291cy1tb2R1bGUgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA0NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIkwnb3B0aW9uIC0tY2FjaGVkIG5lIHBldXQgcGFzIMOqdHJlIHV0aWxpc8OpZSBhdmVjIGwnb3B0aW9uIC0tZmlsZXMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA5OAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJtb2RlICRtb2RfZHN0IGluYXR0ZW5kdSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTE4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAgQXR0ZW50aW9uIDogJGRpc3BsYXlfbmFtZSBuZSBjb250aWVudCBwYXMgbGEgdmFsaWRhdGlvbiAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIEF0dGVudGlvbiA6ICRkaXNwbGF5X25hbWUgbmUgY29udGllbnQgcGFzIGxhIHZhbGlkYXRpb24gJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiIgorIiAgQXR0ZW50aW9uIDogJGRpc3BsYXlfbmFtZSBuZSBjb250aWVudCBwYXMgbGVzIHZhbGlkYXRpb25zICRzaGExX3NyYyBldCAiCisiJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExNDkKK21zZ2lkICJibG9iIgorbXNnc3RyICJibG9iIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEyNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiw4ljaGVjIGRlIHBhcmNvdXJzIGRhbnMgbGUgY2hlbWluIGR1IHNvdXMtbW9kdWxlICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTMzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiU3luY2hyb25pc2F0aW9uIGRlIGwnVVJMIHNvdXMtbW9kdWxlIHBvdXIgJyRkaXNwbGF5cGF0aCciCisKKyN+IG1zZ2lkICJmYWxzZXx0cnVlfHByZXNlcnZlIgorI34gbXNnc3RyICJmYWxzZXx0cnVlfHByZXNlcnZlIgorCisjfiBtc2dpZCAiQlVHOiByZW9wZW4gYSBsb2NrZmlsZSB0aGF0IGlzIHN0aWxsIG9wZW4iCisjfiBtc2dzdHIgIkJVRzogcsOpb3V2ZXJ0dXJlIGQndW4gZmljaGllciB2ZXJyb3UgZMOpasOgIG91dmVydCIKKworI34gbXNnaWQgIkJVRzogcmVvcGVuIGEgbG9ja2ZpbGUgdGhhdCBoYXMgYmVlbiBjb21taXR0ZWQiCisjfiBtc2dzdHIgIkJVRzogcsOpb3V2ZXJ0dXJlIGQndW4gZmljaGllciB2ZXJyb3UgdmFsaWTDqSIKKworI34gbXNnaWQgIm9wdGlvbiAlcyBkb2VzIG5vdCBhY2NlcHQgbmVnYXRpdmUgZm9ybSIKKyN+IG1zZ3N0ciAibCdvcHRpb24gJXMgbidhY2NlcHRlIHBhcyBkZSB2YWxldXIgbsOpZ2F0aXZlIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIHBhcnNlIHZhbHVlICclcycgZm9yIG9wdGlvbiAlcyIKKyN+IG1zZ3N0ciAiaW1wb3NzaWJsZSBkJ2FuYWx5c2VyIGxhIHZhbGV1ciAnJXMnIHBvdXIgbCdvcHRpb24gJXMiCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gcmVzb2x2ZSBIRUFEIgorI34gbXNnc3RyICJpbXBvc3NpYmxlIGRlIHLDqXNvdWRyZSBIRUFEIgorCisjfiBtc2dpZCAiLWIgYW5kIC1CIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCisjfiBtc2dzdHIgIi1iIGV0IC1CIHNvbnQgbXV0dWVsbGVtZW50IGV4Y2x1c2lmcyIKKworI34gbXNnaWQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgorI34gbXNnc3RyICJWb3VzIGRldmV6IGQnYWJvcmQgZMOpZmluaXIgdm9zIGluZm9ybWF0aW9ucyBkZSB2YWxpZGF0ZXVyIgorCisjfiBtc2dpZCAiIgorI34gIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIkY21kbGluZSAtLWNvbnRpbnVlXCIuXG4iCisjfiAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiRjbWRsaW5lIC0tc2tpcFwiIGluc3RlYWQuXG4iCisjfiAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIkY21kbGluZSAtLWFib3J0IgorI34gIlwiLiIKKyN+IG1zZ3N0ciAiIgorI34gIkxvcnNxdWUgdm91cyBhdXJleiByw6lzb2x1IGNlIHByb2Jsw6htZSwgbGFuY2V6IFwiJGNtZGxpbmUgLS1jb250aW51ZVwiLlxuIgorI34gIlNpIHZvdXMgcHLDqWbDqXJleiBzYXV0ZXIgY2UgcGF0Y2gsIGxhbmNleiBcIiRjbWRsaW5lIC0tc2tpcFwiIMOgIGxhIHBsYWNlLlxuIgorI34gIlBvdXIgcmVzdGF1cmVyIGxhIGJyYW5jaGUgZCdvcmlnaW5lIGV0IHN0b3BwZXIgbGUgcGF0Y2hhZ2UsIGxhbmNleiAiCisjfiAiXCIkY21kbGluZSAtLWFib3J0XCIuIgorCisjfiBtc2dpZCAiUGF0Y2ggZm9ybWF0ICRwYXRjaF9mb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4iCisjfiBtc2dzdHIgIkxlIGZvcm1hdCBkZSBwYXRjaCAkcGF0Y2hfZm9ybWF0IG4nZXN0IHBhcyBzdXBwb3J0w6kuIgorCisjfiBtc2dpZCAiUGxlYXNlIG1ha2UgdXAgeW91ciBtaW5kLiAtLXNraXAgb3IgLS1hYm9ydD8iCisjfiBtc2dzdHIgIkTDqWNpZGV6LXZvdXMuIC0tc2tpcCBvdSAtLWFib3J0ID8iCisKKyN+IG1zZ2lkICIiCisjfiAiUGF0Y2ggaXMgZW1wdHkuICBXYXMgaXQgc3BsaXQgd3Jvbmc/XG4iCisjfiAiSWYgeW91IHdvdWxkIHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIGluc3RlYWQgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisjfiAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZSBwYXRjaCBlc3QgdmlkZS4gIMOJdGFpdC1pbCBtYWwgZMOpY291cMOpID9cbiIKKyN+ICJTaSB2b3VzIHByw6lmw6lyZXogc2F1dGVyIGNlIHBhdGNoLCBsYW5jZXogcGx1dMO0dCBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorI34gIlBvdXIgcmVzdGF1cmVyIGxhIGJyYW5jaGUgZCdvcmlnaW5lIGV0IHN0b3BwZXIgbGUgcGF0Y2hhZ2UsIGxhbmNleiAiCisjfiAiXCIkY21kbGluZSAtLWFib3J0XCIuIgorCisjfiBtc2dpZCAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKKyN+IG1zZ3N0ciAiTGUgcGF0Y2ggbidhIHBhcyBkJ2FkcmVzc2UgZS1tYWlsIHZhbGlkZS4iCisKKyN+IG1zZ2lkICJBcHBseWluZzogJEZJUlNUTElORSIKKyN+IG1zZ3N0ciAiQXBwbGljYXRpb24gOiAkRklSU1RMSU5FIgorCisjfiBtc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICRtc2dudW0gJEZJUlNUTElORSIKKyN+IG1zZ3N0ciAiTGUgcGF0Y2ggYSDDqWNob3XDqSDDoCAkbXNnbnVtICRGSVJTVExJTkUiCisKKyN+IG1zZ2lkICIiCisjfiAiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy5cbiIKKyN+ICJQbGVhc2UsIGZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisjfiAiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKKyN+IG1zZ3N0ciAiIgorI34gIkxlIHRpcmFnZSBuJ2VzdCBwYXMgcG9zc2libGUgY2FyIHZvdXMgYXZleiBkZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMuXG4iCisjfiAiVmV1aWxsZXogbGVzIGNvcnJpZ2VyIGRhbnMgdm90cmUgY29waWUgZGUgdHJhdmFpbCwgdXRpbGlzZXIgYWxvcnMgJ2dpdCAiCisjfiAiYWRkL3JtIDxmaWNoaWVyPidcbiIKKyN+ICJzaSBuw6ljZXNzYWlyZSBwb3VyIG1hcnF1ZXIgY29tbWUgcsOpc29sdSBldCB2YWxpZGVyLiIKKworI34gbXNnaWQgIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorI34gbXNnc3RyICIiCisjfiAiTGUgcHVsbCBuJ2VzdCBwYXMgcG9zc2libGUgY2FyIHZvdXMgYXZleiBkZXMgZmljaGllcnMgbm9uIGZ1c2lvbm7DqXMuIgorCisjfiBtc2dpZCAibm8gYnJhbmNoIHNwZWNpZmllZCIKKyN+IG1zZ3N0ciAiYXVjdW5lIGJyYW5jaGUgc3DDqWNpZmnDqWUiCisKKyN+IG1zZ2lkICJjaGVjayBhIGJyYW5jaCBvdXQgaW4gYSBzZXBhcmF0ZSB3b3JraW5nIGRpcmVjdG9yeSIKKyN+IG1zZ3N0ciAiZXh0cmFpcmUgdW5lIGJyYW5jaGUgZGFucyB1biByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsIHPDqXBhcsOpIgorCisjfiBtc2dpZCAicHJ1bmUgLmdpdC93b3JrdHJlZXMiCisjfiBtc2dzdHIgIsOpbGltaW5lciAuZ2l0L3dvcmt0cmVlcyIKKworI34gbXNnaWQgIi0td29ya3RyZWVzIGRvZXMgbm90IHRha2UgZXh0cmEgYXJndW1lbnRzIgorI34gbXNnc3RyICItLXdvcmt0cmVlcyBuJ2FjY2VwdGUgcGFzIGQnYXJndW1lbnQgc3VwcGzDqW1lbnRhaXJlIgorCisjfiBtc2dpZCAiVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBnaXQgY29tbWFuZHMgYXJlOiIKKyN+IG1zZ3N0ciAiTGVzIGNvbW1hbmRlcyBnaXQgbGVzIHBsdXMgdXRpbGlzw6llcyBzb250IDoiCisKKyN+IG1zZ2lkICJObyBzdWNoIGJyYW5jaDogJyVzJyIKKyN+IG1zZ3N0ciAiQnJhbmNoZSBpbmNvbm51ZSA6ICclcyciCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGdpdCBsaW5rICVzIgorI34gbXNnc3RyICJJbXBvc3NpYmxlIGRlIGNyw6llciBsZSBsaWVuIGdpdCAlcyIKKworI34gbXNnaWQgIkludmFsaWQgZ2MucHJ1bmVleHBpcmU6ICclcyciCisjfiBtc2dzdHIgImdjLnBydW5lZXhwaXJlIGludmFsaWRlwqA6ICclcyciCisKKyN+IG1zZ2lkICIoZGV0YWNoZWQgZnJvbSAlcykiCisjfiBtc2dzdHIgIihkw6l0YWNow6kgZGUgJXMpIgorCisjfiBtc2dpZCAiTm8gZXhpc3RpbmcgYXV0aG9yIGZvdW5kIHdpdGggJyVzJyIKKyN+IG1zZ3N0ciAiQXVjdW4gYXV0ZXVyIGV4aXN0YW50IHRyb3V2w6kgYXZlYyAnJXMnIgorCisjfiBtc2dpZCAic2VhcmNoIGFsc28gaW4gaWdub3JlZCBmaWxlcyIKKyN+IG1zZ3N0ciAicmVjaGVyY2hlciBhdXNzaSBkYW5zIGxlcyBmaWNoaWVycyBpZ25vcsOpcyIKKworI34gbXNnaWQgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfDxicmFuY2g+KSIKKyN+IG1zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bm9tPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHw8YnJhbmNoZT4pIgorCisjfiBtc2dpZCAibm8gZmlsZXMgYWRkZWQiCisjfiBtc2dzdHIgImF1Y3VuIGZpY2hpZXIgYWpvdXTDqSIKKworI34gbXNnaWQgImZvcmNlIGNyZWF0aW9uICh3aGVuIGFscmVhZHkgZXhpc3RzKSIKKyN+IG1zZ3N0ciAiZm9yY2VyIGxhIGNyw6lhdGlvbiAobcOqbWUgc2kgbGEgY2libGUgZXhpc3RlKSIKKworI34gbXNnaWQgIk1hbGZvcm1lZCBpZGVudCBzdHJpbmc6ICclcyciCisjfiBtc2dzdHIgIkNoYcOubmUgaWRlbnQgbWFsIGZvcm3DqWUgOiAnJXMnIgorCisjfiBtc2dpZCAic2xvdCIKKyN+IG1zZ3N0ciAiZW1wbGFjZW1lbnQiCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gbG9jayByZWYgZm9yIHVwZGF0ZSIKKyN+IG1zZ3N0ciAiw4ljaGVjIGR1IHZlcnJvdWlsbGFnZSBkZSBsYSByw6lmw6lyZW5jZSBwb3VyIG1pc2Ugw6Agam91ciIKKworI34gbXNnaWQgIkZhaWxlZCB0byB3cml0ZSByZWYiCisjfiBtc2dzdHIgIsOJY2hlYyBkZSBsJ8OpY3JpdHVyZSBkZSBsYSByw6lmw6lyZW5jZSIKKworI34gbXNnaWQgIkZhaWxlZCB0byBsb2NrIEhFQUQgZHVyaW5nIGZhc3RfZm9yd2FyZF90byIKKyN+IG1zZ3N0ciAiw4ljaGVjIGR1IHZlcnJvdWlsbGFnZSBkZSBIRUFEIHBlbmRhbnQgbCdhdmFuY2UgcmFwaWRlIgorCisjfiBtc2dpZCAiaW52YWxpZCBjb21taXQ6ICVzIgorI34gbXNnc3RyICJjb21taXQgaW52YWxpZGUgOiAlcyIKKworI34gbXNnaWQgImNhbm5vdCBsb2NrIEhFQUQgcmVmIgorI34gbXNnc3RyICJpbXBvc3NpYmxlIGRlIHZlcnJvdWlsbGVyIGxhIHLDqWbDqXJlbmNlIEhFQUQiCisKKyN+IG1zZ2lkICJjYW5ub3QgdXBkYXRlIEhFQUQgcmVmIgorI34gbXNnc3RyICJpbXBvc3NpYmxlIGRlIG1ldHRyZSDDoCBqb3VyIGxhIHLDqWbDqXJlbmNlIEhFQUQiCisKKyN+IG1zZ2lkICJjYW5ub3QgdGVsbCBjd2QiCisjfiBtc2dzdHIgImltcG9zc2libGUgZGUgZMOpdGVybWluZXIgbGUgcsOpcGVydG9pcmUgZGUgdHJhdmFpbCBjb3VyYW50IgorCisjfiBtc2dpZCAiJXM6IGNhbm5vdCBsb2NrIHRoZSByZWYiCisjfiBtc2dzdHIgIiVzIDogaW1wb3NzaWJsZSBkZSB2ZXJyb3VpbGxlciBsYSByw6lmw6lyZW5jZSIKKworI34gbXNnaWQgIiVzOiBjYW5ub3QgdXBkYXRlIHRoZSByZWYiCisjfiBtc2dzdHIgIiVzIDogaW1wb3NzaWJsZSBkZSBtZXR0cmUgw6Agam91ciBsYSByw6lmw6lyZW5jZSIKKworI34gbXNnaWQgImNvbW1pdCBoYXMgZW1wdHkgbWVzc2FnZSIKKyN+IG1zZ3N0ciAibGUgY29tbWl0IGEgdW4gbWVzc2FnZSB2aWRlIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIGNoZGlyOiAlcyIKKyN+IG1zZ3N0ciAiw4ljaGVjIGRlIGNoZGlyOiAlcyIKKworI34gbXNnaWQgIlRyYWNraW5nIG5vdCBzZXQgdXA6IG5hbWUgdG9vIGxvbmc6ICVzIgorI34gbXNnc3RyICJTdWl2aSBkZSBicmFuY2hlIG5vbiBwYXJhbcOpdHLDqSA6IGxlIG5vbSBlc3QgdHJvcCBsb25nIDogJXMiCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgZmluZCAuZ2l0bW9kdWxlcyBpbiBpbmRleCIKKyN+IG1zZ3N0ciAiaW1wb3NzaWJsZSBkZSB0cm91dmVyIC5naXRtb2R1bGVzIGRhbnMgbCdpbmRleCIKKworI34gbXNnaWQgInJlYWRpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCisjfiBtc2dzdHIgIsOpY2hlYyBkZSBsYSBsZWN0dXJlIGR1IC5naXRtb2R1bGVzIG1pcyDDoCBqb3VyIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIHN0YXQgdXBkYXRlZCAuZ2l0bW9kdWxlcyIKKyN+IG1zZ3N0ciAiw6ljaGVjIGRlIHN0YXQgZHUgLmdpdG1vZHVsZXMgbWlzIMOgIGpvdXIiCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlIC5naXRtb2R1bGVzIGZyb20gaW5kZXgiCisjfiBtc2dzdHIgInN1cHByZXNzaW9uIGR1IC5naXRtb2R1bGVzIGRhbnMgbCdpbmRleCBpbXBvc3NpYmxlIgorCisjfiBtc2dpZCAiYWRkaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorI34gbXNnc3RyICLDqWNoZWMgZGUgbCdham91dCBkdSAuZ2l0bW9kdWxlcyBtaXMgw6Agam91ciIKKworI34gbXNnaWQgImJ1ZyIKKyN+IG1zZ3N0ciAiYm9ndWUiCisKKyN+IG1zZ2lkICJhaGVhZCAiCisjfiBtc2dzdHIgImRldmFudCAiCisKKyN+IG1zZ2lkICIsIGJlaGluZCAiCisjfiBtc2dzdHIgIiwgZGVycmnDqHJlICIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgYmVoYXZpb3Igb2YgJ2dpdCBhZGQgJXMgKG9yICVzKScgd2l0aCBubyBwYXRoIGFyZ3VtZW50IGZyb20gYVxuIgorI34gInN1YmRpcmVjdG9yeSBvZiB0aGUgdHJlZSB3aWxsIGNoYW5nZSBpbiBHaXQgMi4wIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgIgorI34gImFueW1vcmUuXG4iCisjfiAiVG8gYWRkIGNvbnRlbnQgZm9yIHRoZSB3aG9sZSB0cmVlLCBydW46XG4iCisjfiAiXG4iCisjfiAiICBnaXQgYWRkICVzIDovXG4iCisjfiAiICAob3IgZ2l0IGFkZCAlcyA6LylcbiIKKyN+ICJcbiIKKyN+ICJUbyByZXN0cmljdCB0aGUgY29tbWFuZCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnksIHJ1bjpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBhZGQgJXMgLlxuIgorI34gIiAgKG9yIGdpdCBhZGQgJXMgLilcbiIKKyN+ICJcbiIKKyN+ICJXaXRoIHRoZSBjdXJyZW50IEdpdCB2ZXJzaW9uLCB0aGUgY29tbWFuZCBpcyByZXN0cmljdGVkIHRvIHRoZSBjdXJyZW50ICIKKyN+ICJkaXJlY3RvcnkuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJMZSBjb21wb3J0ZW1lbnQgZGUgJ2dpdCBhZGQgJXMgKG91ICVzKScgc2FucyBhcmd1bWVudCBkZSBjaGVtaW4gZGVwdWlzICIKKyN+ICJ1blxuIgorI34gInNvdXMtcsOpcGVydG9pcmUgZHUgcHJvamV0IHZhIGNoYW5nZXIgZGFucyBHaXQgMi4wIGV0IG5lIGRvaXQgcGx1cyDDqnRyZSAiCisjfiAidXRpbGlzw6kuXG4iCisjfiAiUG91ciBham91dGVyIGxlIGNvbnRlbnUgZGUgdG91dGUgbCdhcmJvcmVzY2VuY2UsIGxhbmNleiA6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgYWRkICVzIDovXG4iCisjfiAiICAob3UgZ2l0IGFkZCAlcyA6LylcbiIKKyN+ICJcbiIKKyN+ICJQb3VyIHJlc3RyZWluZHJlIGxhIGNvbW1hbmRlIGF1IHLDqXBlcnRvaXJlIGNvdXJhbnQsIGxhbmNleiA6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgYWRkICVzIC5cbiIKKyN+ICIgIChvdSBnaXQgYWRkICVzIC4pXG4iCisjfiAiXG4iCisjfiAiQXZlYyBsYSB2ZXJzaW9uIGFjdHVlbGxlIGRlIEdpdCwgbGEgY29tbWFuZGUgZXN0IHJlc3RyZWludGUgYXUgcsOpcGVydG9pcmUgIgorI34gImNvdXJhbnQuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiWW91IHJhbiAnZ2l0IGFkZCcgd2l0aCBuZWl0aGVyICctQSAoLS1hbGwpJyBvciAnLS1pZ25vcmUtcmVtb3ZhbCcsXG4iCisjfiAid2hvc2UgYmVoYXZpb3VyIHdpbGwgY2hhbmdlIGluIEdpdCAyLjAgd2l0aCByZXNwZWN0IHRvIHBhdGhzIHlvdSAiCisjfiAicmVtb3ZlZC5cbiIKKyN+ICJQYXRocyBsaWtlICclcycgdGhhdCBhcmVcbiIKKyN+ICJyZW1vdmVkIGZyb20geW91ciB3b3JraW5nIHRyZWUgYXJlIGlnbm9yZWQgd2l0aCB0aGlzIHZlcnNpb24gb2YgR2l0LlxuIgorI34gIlxuIgorI34gIiogJ2dpdCBhZGQgLS1pZ25vcmUtcmVtb3ZhbCA8cGF0aHNwZWM+Jywgd2hpY2ggaXMgdGhlIGN1cnJlbnQgZGVmYXVsdCxcbiIKKyN+ICIgIGlnbm9yZXMgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyN+ICJcbiIKKyN+ICIqICdnaXQgYWRkIC0tYWxsIDxwYXRoc3BlYz4nIHdpbGwgbGV0IHlvdSBhbHNvIHJlY29yZCB0aGUgcmVtb3ZhbHMuXG4iCisjfiAiXG4iCisjfiAiUnVuICdnaXQgc3RhdHVzJyB0byBjaGVjayB0aGUgcGF0aHMgeW91IHJlbW92ZWQgZnJvbSB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIlZvdXMgYXZleiBsYW5jw6kgJ2dpdCBhZGQnIHNhbnMgJy1BICgtLWFsbCknIG5pICctLWlnbm9yZS1yZW1vdmFsJyxcbiIKKyN+ICJkb250IGxlIGNvbXBvcnRlbWVudCB2YSBjaGFuZ2VyIGRhbnMgR2l0IDIuMCBhdmVjIGxlIHJlc3BlY3QgZGVzIGNoZW1pbnMgIgorI34gInF1ZSB2b3VzIHN1cHByaW1lei5cbiIKKyN+ICJMZXMgY2hlbWlucyB0ZWxzIHF1ZSAnJXMnIHF1aSBvbnQgw6l0w6lcbiIKKyN+ICJyZXRpcsOpcyBkZSB2b3RyZSBjb3BpZSBkZSB0cmF2YWlsIHNvbnQgaWdub3LDqXMgYXZlYyBjZXR0ZSB2ZXJzaW9uIGRlICIKKyN+ICJHaXQuXG4iCisjfiAiXG4iCisjfiAiKiAnZ2l0IGFkZCAtLWlnbm9yZS1yZW1vdmFsIDxjaGVtaW4+JywgcXVpIGVzdCBsJ29wdGlvbiBwYXIgZMOpZmF1dCAiCisjfiAiYWN0dWVsbGUsXG4iCisjfiAiICBpZ25vcmUgbGVzIGNoZW1pbnMgcXVlIHZvdXMgYXZleiBzdXBwcmltw6lzIGRlIHZvdHJlIGNvcGllIGRlIHRyYXZhaWwuXG4iCisjfiAiXG4iCisjfiAiKiAnZ2l0IGFkZCAtLWFsbCA8Y2hlbWluPicgcGVybWV0IGQnZW5yZWdpc3RyZXIgYXVzc2kgbGVzIHN1cHByZXNzaW9ucy5cbiIKKyN+ICJcbiIKKyN+ICJMYW5jZXogJ2dpdCBzdGF0dXMnIHBvdXIgdsOpcmlmaWVyIGxlcyBjaGVtaW5zIHF1ZSB2b3VzIGF2ZXogc3VwcHJpbcOpcyBkZSAiCisjfiAidm90cmUgY29waWUgZGUgdHJhdmFpbC5cbiIKKworI34gbXNnaWQgImtleSBpZCIKKyN+IG1zZ3N0ciAiaWRlbnRpZmlhbnQgZGUgY2zDqSIKKworI34gbXNnaWQgIiIKKyN+ICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuIFlvdSBtYXkgYWxzb1xuIgorI34gInJ1biBcImdpdCBnY1wiIG1hbnVhbGx5LiBTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorI34gbXNnc3RyICIiCisjfiAiQ29tcHJlc3Npb24gYXV0b21hdGlxdWUgZHUgZMOpcMO0dCBwb3VyIHVuZSBwZXJmb3JtYW5jZSBvcHRpbXVtLiBWb3VzICIKKyN+ICJwb3V2ZXogYXVzc2lcbiIKKyN+ICJsYW5jZXIgXCJnaXQgZ2NcIiBtYW51ZWxsZW1lbnQuIFZvaXIgXCJnaXQgaGVscCBnY1wiIHBvdXIgcGx1cyAiCisjfiAiZCdpbmZvcm1hdGlvbi5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisjfiAiY291bnRlcnBhcnQuIElmIHlvdSBkaWQgbm90IGludGVuZCB0byBwdXNoIHRoYXQgYnJhbmNoLCB5b3UgbWF5IHdhbnQgdG9cbiIKKyN+ICJzcGVjaWZ5IGJyYW5jaGVzIHRvIHB1c2ggb3Igc2V0IHRoZSAncHVzaC5kZWZhdWx0JyBjb25maWd1cmF0aW9uICIKKyN+ICJ2YXJpYWJsZVxuIgorI34gInRvICdzaW1wbGUnLCAnY3VycmVudCcgb3IgJ3Vwc3RyZWFtJyB0byBwdXNoIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoLiIKKyN+IG1zZ3N0ciAiIgorI34gIkxlcyBtaXNlcyDDoCBqb3VyIG9udCDDqXTDqSByZWpldMOpZXMgY2FyIGxhIHBvaW50ZSBkZSBsYSBicmFuY2hlIHBvdXNzw6llIGVzdCAiCisjfiAiZGVycmnDqHJlXG4iCisjfiAic29uIGhvbW9sb2d1ZSBkaXN0YW50LiBTaSB2b3VzIG5lIHZvdWxpZXogcGFzIHBvdXNzZXIgY2V0dGUgYnJhbmNoZSwgdm91cyAiCisjfiAicG91cnJpZXpcbiIKKyN+ICJ2b3Vsb2lyIHNww6ljaWZpZXIgbGVzIGJyYW5jaGVzIMOgIHBvdXNzZXIgb3UgZMOpZmluaXIgbGEgdmFyaWFibGUgZGUgIgorI34gImNvbmZpZ3VyYXRpb25cbiIKKyN+ICIncHVzaC5kZWZhdWx0JyDDoCAnc2ltcGxlJywgJ2N1cnJlbnQnIG91ICd1cHN0cmVhbScgcG91ciBwb3Vzc2VyIHNldWxlbWVudCAiCisjfiAibGEgYnJhbmNoZSBjb3VyYW50ZS4iCisKKyN+IG1zZ2lkICJkZWxldGVkOiAgICAlcyIKKyN+IG1zZ3N0ciAic3VwcHJpbcOpIDogICVzIgorCisjfiBtc2dpZCAibW9kaWZpZWQ6ICAgJXMiCisjfiBtc2dzdHIgIm1vZGlmacOpIDogICAlcyIKKworI34gbXNnaWQgInJlbmFtZWQ6ICAgICVzIC0+ICVzIgorI34gbXNnc3RyICJyZW5vbW3DqSA6ICAgJXMgLT4gJXMiCisKKyN+IG1zZ2lkICJ1bm1lcmdlZDogICAlcyIKKyN+IG1zZ3N0ciAibm9uIGZ1cy4gOiAgJXMiCisKKyN+IG1zZ2lkICJpbnB1dCBwYXRocyBhcmUgdGVybWluYXRlZCBieSBhIG51bGwgY2hhcmFjdGVyIgorI34gbXNnc3RyICJsZXMgY2hlbWlucyBlbiBlbnRyw6llIHNvbnQgdGVybWluw6lzIHBhciBsZSBjYXJhY3TDqHJlIG51bCIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCBmaWxlcyB3b3VsZCBOT1QgYmUgc2F2ZWQgYnV0IG5lZWQgdG8gYmUgcmVtb3ZlZCAiCisjfiAiYnkgc3Rhc2ggc2F2ZToiCisjfiBtc2dzdHIgIiIKKyN+ICJMZXMgZmljaGllcnMgc3VpdmFudHMgbm9uIHN1aXZpcyBuZSBzZXJvbnQgUEFTIHNhdXbDqXMgbWFpcyBkb2l2ZW50IMOqdHJlICIKKyN+ICJzdXBwcmltw6lzIHBhciBsZSByZW1pc2FnZSA6IgorCisjfiBtc2dpZCAiIgorI34gIkFib3J0aW5nLiBDb25zaWRlciB1c2luZyBlaXRoZXIgdGhlIC0tZm9yY2Ugb3IgLS1pbmNsdWRlLXVudHJhY2tlZCBvcHRpb24uIgorI34gbXNnc3RyICJBYmFuZG9uLiBVdGlsaXNleiBsJ29wdGlvbiAtLWZvcmNlIG91IC0taW5jbHVkZS11bnRyYWNrZWQuIgpkaWZmIC0tZ2l0IGEvcG8vZ2l0LnBvdCBiL3BvL2dpdC5wb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI3NWY0MAotLS0gL2Rldi9udWxsCisrKyBiL3BvL2dpdC5wb3QKQEAgLTAsMCArMSwxMTIzMiBAQAorIyBTT01FIERFU0NSSVBUSVZFIFRJVExFLgorIyBDb3B5cmlnaHQgKEMpIFlFQVIgVEhFIFBBQ0tBR0UnUyBDT1BZUklHSFQgSE9MREVSCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBQQUNLQUdFIHBhY2thZ2UuCisjIEZJUlNUIEFVVEhPUiA8RU1BSUxAQUREUkVTUz4sIFlFQVIuCisjCisjLCBmdXp6eQorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogUEFDS0FHRSBWRVJTSU9OXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDktMTUgMDY6NDUrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IFlFQVItTU8tREEgSE86TUkrWk9ORVxuIgorIkxhc3QtVHJhbnNsYXRvcjogRlVMTCBOQU1FIDxFTUFJTEBBRERSRVNTPlxuIgorIkxhbmd1YWdlLVRlYW06IExBTkdVQUdFIDxMTEBsaS5vcmc+XG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUNIQVJTRVRcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisiUGx1cmFsLUZvcm1zOiBucGx1cmFscz1JTlRFR0VSOyBwbHVyYWw9RVhQUkVTU0lPTjtcbiIKKworIzogYWR2aWNlLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogJS4qc1xuIgorbXNnc3RyICIiCisKKyM6IGFkdmljZS5jOjg4Cittc2dpZCAiIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxMDEgYnVpbHRpbi9tZXJnZS5jOjEyMjcKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIiIKKworIzogYWR2aWNlLmM6MTAzCittc2dpZCAiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBhZHZpY2UuYzoxMDQKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjEyCittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6MTMKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjE0Cittc2dpZCAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzoxNQorbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjM0MyBidWlsdGluL2FkZC5jOjEzNyBidWlsdGluL2FkZC5jOjQyNiBidWlsdGluL3JtLmM6MzI3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXMiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQyOAorbXNnaWQgImZtdCIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDI4Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQyOSBidWlsdGluL2xvZy5jOjEyMjkKK21zZ2lkICJwcmVmaXgiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQzMAorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQzMSBidWlsdGluL2FyY2hpdmUuYzo4OCBidWlsdGluL2JsYW1lLmM6MjUxNgorIzogYnVpbHRpbi9ibGFtZS5jOjI1MTcgYnVpbHRpbi9jb25maWcuYzo1OCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg3CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg5IGJ1aWx0aW4vZ3JlcC5jOjcxMiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDYgYnVpbHRpbi9scy1maWxlcy5jOjQ0OSBidWlsdGluL25vdGVzLmM6Mzk1CisjOiBidWlsdGluL25vdGVzLmM6NTU4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTA5IHBhcnNlLW9wdGlvbnMuaDoxNTMKK21zZ2lkICJmaWxlIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0MzIgYnVpbHRpbi9hcmNoaXZlLmM6ODkKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQzNAorbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQzNQorbXNnaWQgInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQzNgorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQzNworbXNnaWQgImNvbXByZXNzIGZhc3RlciIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDQ1Cittc2dpZCAiY29tcHJlc3MgYmV0dGVyIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NDgKK21zZ2lkICJsaXN0IHN1cHBvcnRlZCBhcmNoaXZlIGZvcm1hdHMiCittc2dzdHIgIiIKKworIzogYXJjaGl2ZS5jOjQ1MCBidWlsdGluL2FyY2hpdmUuYzo5MCBidWlsdGluL2Nsb25lLmM6NzcKK21zZ2lkICJyZXBvIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NTEgYnVpbHRpbi9hcmNoaXZlLmM6OTEKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAiIgorCisjOiBhcmNoaXZlLmM6NDUyIGJ1aWx0aW4vYXJjaGl2ZS5jOjkyIGJ1aWx0aW4vbm90ZXMuYzo0NzkKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IGFyY2hpdmUuYzo0NTMgYnVpbHRpbi9hcmNoaXZlLmM6OTMKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgIiIKKworIzogYXR0ci5jOjI2NQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzo2MAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3Qgc2V0dGluZyBicmFuY2ggJXMgYXMgaXRzIG93biB1cHN0cmVhbS4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAlcyBmcm9tICVzLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAlcyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJXMuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAlcyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgcmVmICVzLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICVzLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHRyYWNraW5nOiBhbWJpZ3VvdXMgaW5mb3JtYXRpb24gZm9yIHJlZiAlcyIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCBicmFuY2ggbmFtZS4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjE3NQorbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBicmFuY2guYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MTk3CisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSByZXF1ZXN0ZWQgdXBzdHJlYW0gYnJhbmNoICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MTk5Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgb24gYmFzaW5nIHlvdXIgd29yayBvbiBhbiB1cHN0cmVhbVxuIgorImJyYW5jaCB0aGF0IGFscmVhZHkgZXhpc3RzIGF0IHRoZSByZW1vdGUsIHlvdSBtYXkgbmVlZCB0b1xuIgorInJ1biBcImdpdCBmZXRjaFwiIHRvIHJldHJpZXZlIGl0LlxuIgorIlxuIgorIklmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVzaCBvdXQgYSBuZXcgbG9jYWwgYnJhbmNoIHRoYXRcbiIKKyJ3aWxsIHRyYWNrIGl0cyByZW1vdGUgY291bnRlcnBhcnQsIHlvdSBtYXkgd2FudCB0byB1c2VcbiIKKyJcImdpdCBwdXNoIC11XCIgdG8gc2V0IHRoZSB1cHN0cmVhbSBjb25maWcgYXMgeW91IHB1c2guIgorbXNnc3RyICIiCisKKyM6IGJyYW5jaC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFtYmlndW91cyBvYmplY3QgbmFtZTogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIiIKKworIzogYnJhbmNoLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjg3IGJ1aWx0aW4vY29tbWl0LmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MTM5Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MTYzIHNlcXVlbmNlci5jOjYzNiBzZXF1ZW5jZXIuYzoxMDgzIGJ1aWx0aW4vYmxhbWUuYzoyNzA4CisjOiBidWlsdGluL2JyYW5jaC5jOjY1MiBidWlsdGluL2NvbW1pdC5jOjEwNDQgYnVpbHRpbi9sb2cuYzozMzQKKyM6IGJ1aWx0aW4vbG9nLmM6ODUwIGJ1aWx0aW4vbG9nLmM6MTQ1NyBidWlsdGluL2xvZy5jOjE2OTAgYnVpbHRpbi9tZXJnZS5jOjM1OAorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1OAorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjE4NQorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIGNvbnRhaW5zIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1bmRsZS5jOjE5MgorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmOiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1bmRsZS5jOjI1MworbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MjY0Cittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6MzA0Cittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6NDQzIGJ1aWx0aW4vbG9nLmM6MTU3IGJ1aWx0aW4vbG9nLmM6MTM2NyBidWlsdGluL3Nob3J0bG9nLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6NDQ5Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzo0ODAKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgIiIKKworIzogY29sb3IuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciB2YWx1ZTogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQuYzo0MCBidWlsdGluL2FtLmM6NDUxIGJ1aWx0aW4vYW0uYzo0ODcgYnVpbHRpbi9hbS5jOjE1MTYKKyM6IGJ1aWx0aW4vYW0uYzoyMTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAiIgorCisjOiBjb21taXQuYzo0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIiCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo0NzQgY29uZmlnLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgZmlsZSBsaW5lICVkIGluICVzIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6NTk0CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzo3NTcgY29uZmlnLmM6NzY4CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCB6bGliIGNvbXByZXNzaW9uIGxldmVsICVkIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG1vZGUgZm9yIG9iamVjdCBjcmVhdGlvbjogJXMiCittc2dzdHIgIiIKKworIzogY29uZmlnLmM6MTIxNgorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICIiCisKKyM6IGNvbmZpZy5jOjEyNzcKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAnJXMnIGZyb20gY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyBpbiBmaWxlICclcycgYXQgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBjb25maWcuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdGVkLmM6NjkKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICIiCisKKyM6IGNvbm5lY3RlZC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdDogJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdGVkLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW46ICVzIgorbXNnc3RyICIiCisKKyM6IGRhdGUuYzo5NQorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgIiIKKworIzogZGF0ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBob3VycyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgZGF5cyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHdlZWtzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRhdGUuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjE1NCBkYXRlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRpZmZjb3JlLW9yZGVyLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgb3JkZXJmaWxlICclcyciCittc2dzdHIgIiIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTM2Cittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJXMnXG4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIiIKKworIzogZGlmZi5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6Mjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGRpZmYuYzozMzk0Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIiIKKworIzogZGlmZi5jOjM1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MzU3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgLS1zdWJtb2R1bGUgb3B0aW9uIHBhcmFtZXRlcjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBkaXIuYzoxODUzCittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogZGlyLmM6MTkzNgorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbS4iCittc2dzdHIgIiIKKworIzogZ3BnLWludGVyZmFjZS5jOjE2NiBncGctaW50ZXJmYWNlLmM6MjM3Cittc2dpZCAiY291bGQgbm90IHJ1biBncGcuIgorbXNnc3RyICIiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoxNzgKK21zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCittc2dzdHIgIiIKKworIzogZ3BnLWludGVyZmFjZS5jOjE4OQorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogZ3JlcC5jOjE3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiIKKworIzogZ3JlcC5jOjE3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgIiIKKworIzogZ3JlcC5jOjE3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgImF2YWlsYWJsZSBnaXQgY29tbWFuZHMgaW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBoZWxwLmM6MjE0Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyNDYKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIiIKKworIzogaGVscC5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKworIzogaGVscC5jOjM2OAorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC5cbiIKKyJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcyciCittc2dzdHIgIiIKKworIzogaGVscC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbiAlMC4xZiBzZWNvbmRzIGF1dG9tYXRpY2FsbHkuLi4iCittc2dzdHIgIiIKKworIzogaGVscC5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzo0MDYgaGVscC5jOjQ2NgorbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGhlbHAuYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIC0gJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS5jOjk0IGJ1aWx0aW4vYW0uYzoyMDAxIGJ1aWx0aW4vYW0uYzoyMDM2IGJ1aWx0aW4vY2hlY2tvdXQuYzozNzUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1ODYgYnVpbHRpbi9jbG9uZS5jOjcxNQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZm9fY2FjaGUgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjcwCittc2dpZCAiZXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzIHRvIG1ha2Ugcm9vbSBmb3Igc3ViZGlyZWN0b3J5XG4iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzEyIG1lcmdlLXJlY3Vyc2l2ZS5jOjczMworbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzg4IGJ1aWx0aW4vY2xvbmUuYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN5bWxpbmsgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG8gbm90IGtub3cgd2hhdCB0byBkbyB3aXRoICUwNm8gJXMgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MzcKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCAlcyB0byBkYXRhYmFzZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NTcKK21zZ2lkICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSBpbiB0aGUgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDMyIG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDM4IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDkyCittc2dpZCAicmVuYW1lIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwOTIKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNzUKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gJXMgYWRkZWQgaW4gJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NzMgbWVyZ2UtcmVjdXJzaXZlLmM6MTY3MQorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NzUKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NQorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1ODUKK21zZ2lkICJjb250ZW50IgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1OTIKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDQgZ2l0LXN1Ym1vZHVsZS5zaDoxMTUwCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTczMQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzU2Cittc2dpZCAiZmlsZS9kaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2MgorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc3NworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc5NAorbXNnaWQgIkZhdGFsIG1lcmdlIGZhaWx1cmUsIHNob3VsZG4ndCBoYXBwZW4uIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MTMKK21zZ2lkICJBbHJlYWR5IHVwLXRvLWRhdGUhIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5wcm9jZXNzZWQgcGF0aD8/PyAlcyIKK21zZ3N0ciAiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTAwCittc2dpZCAiTWVyZ2luZzoiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkxMworIywgYy1mb3JtYXQKK21zZ2lkICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3I6IgorbXNnaWRfcGx1cmFsICJmb3VuZCAldSBjb21tb24gYW5jZXN0b3JzOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5NTAKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjAwNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjAxOCBidWlsdGluL21lcmdlLmM6NjQ1Cittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIGluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBub3Rlcy11dGlscy5jOjQxCittc2dpZCAiQ2Fubm90IGNvbW1pdCB1bmluaXRpYWxpemVkL3VucmVmZXJlbmNlZCBub3RlcyB0cmVlIgorbXNnc3RyICIiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBub3Rlcy11dGlscy5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIHRoZQorIy4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMgaXRzIHZhbHVlCisjOiBub3Rlcy11dGlscy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIiIKKworIzogb2JqZWN0LmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo1NjMKK21zZ2lkICIuLi4iCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uCisjOiBwYXJzZS1vcHRpb25zLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NjIyCittc2dpZCAiLU5VTSIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjEzMworbXNnaWQgImdsb2JhbCAnZ2xvYicgYW5kICdub2dsb2InIHBhdGhzcGVjIHNldHRpbmdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzoxNDMKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MTc3Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaW1wbGVtZW50ZWQgcGF0aHNwZWMgbWFnaWMgJyVjJyBpbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IHBhdGhzcGVjLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRoc3BlYyAnJXMnIGlzIGluIHN1Ym1vZHVsZSAnJS4qcyciCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGhzcGVjIG1hZ2ljIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21tYW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBwYXRoc3BlYy5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIiIKKworIzogcGF0aHNwZWMuYzo0NDEKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBleGNsdWRlIGZyb20gYnkgOihleGNsdWRlKSBwYXR0ZXJucy5cbiIKKyJQZXJoYXBzIHlvdSBmb3Jnb3QgdG8gYWRkIGVpdGhlciAnOi8nIG9yICcuJyA/IgorbXNnc3RyICIiCisKKyM6IHByZXR0eS5jOjk2OQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgIiIKKworIzogcHJvZ3Jlc3MuYzoyMzYKK21zZ2lkICJkb25lIgorbXNnc3RyICIiCisKKyM6IHJlYWQtY2FjaGUuYzoxMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbmRleC52ZXJzaW9uIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKworIzogcmVhZC1jYWNoZS5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjI5NDEgYnVpbHRpbi9tZXJnZS5jOjc2MCBidWlsdGluL21lcmdlLmM6ODcxIGJ1aWx0aW4vbWVyZ2UuYzo5NzMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MzAwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZSAlczogJXMiCittc2dzdHIgIiIKKworIzogcmVmcy5jOjMwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAiIgorCisjOiByZWZzLmM6MzAxMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVtb3ZlIHJlZmVyZW5jZSAlcyIKK21zZ3N0ciAiIgorCisjOiByZWYtZmlsdGVyLmM6NjYwCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzo3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjc5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6ODA4Cittc2dpZCAiSW50ZXJuYWwgZXJyb3IiCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTcyMyByZW1vdGUuYzoxNzY2Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjE3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgIiIKKworIzogcmVtb3RlLmM6MTc0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNzU2CisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggZGVzdGluYXRpb24gJyVzJyBvbiByZW1vdGUgJyVzJyBoYXMgbm8gbG9jYWwgdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjE3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgaGFzIG5vIHJlbW90ZSBmb3IgcHVzaGluZyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNzgyCisjLCBjLWZvcm1hdAorbXNnaWQgInB1c2ggcmVmc3BlY3MgZm9yICclcycgZG8gbm90IGluY2x1ZGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoxNzk1Cittc2dpZCAicHVzaCBoYXMgbm8gZGVzdGluYXRpb24gKHB1c2guZGVmYXVsdCBpcyAnbm90aGluZycpIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjE4MTcKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjIxMjgKK21zZ2lkICIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwLXRvLWRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjIxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHJlbW90ZS5jOjIxNDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIiCisKKyM6IHJlbW90ZS5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHJlbW90ZS5jOjIxNTIKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiIgorCisjOiByZW1vdGUuYzoyMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IHJlbW90ZS5jOjIxNjUKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpXG4iCittc2dzdHIgIiIKKworIzogcmV2aXNpb24uYzoyMTk4Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAiIgorCisjOiByZXZpc2lvbi5jOjIyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICIiCisKKyM6IHJldmlzaW9uLmM6MjM5NQorbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnc3RyICIiCisKKyM6IHJ1bi1jb21tYW5kLmM6ODMKK21zZ2lkICJvcGVuIC9kZXYvbnVsbCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogcnVuLWNvbW1hbmQuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXAyKCVkLCVkKSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogc2VuZC1wYWNrLmM6Mjk1Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgIiIKKworIzogc2VuZC1wYWNrLmM6NDA0Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisKKyM6IHNlbmQtcGFjay5jOjQwNgorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAiIgorCisjOiBzZW5kLXBhY2suYzo0MTgKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTgzCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTg2Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTk5IHNlcXVlbmNlci5jOjg0MiBzZXF1ZW5jZXIuYzo5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyMTcKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIxOQorbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSByZXZlcnQuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjIyMgorbXNnaWQgIkNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2siCisjOiBzZXF1ZW5jZXIuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMjcKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIGNvbW1pdFxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM0NworbXNnaWQgIlVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZVxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDY5Cittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlICJyZXZlcnQiIG9yCisjLiAiY2hlcnJ5LXBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMQorIzogc2VxdWVuY2VyLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2MzkKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJXMgZHVyaW5nIGEgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBsaW5lICVkLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3MzgKK21zZ2lkICJObyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc1NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCAlcy4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc5NCBidWlsdGluL3B1bGwuYzo0NyBidWlsdGluL3B1bGwuYzo0OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgyNAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgc2VxdWVuY2VyIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4NDQgc2VxdWVuY2VyLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4NjMgc2VxdWVuY2VyLmM6OTk2Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjg2NQorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODY3Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODg3IGJ1aWx0aW4vYXBwbHkuYzo0MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjg5MQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo5MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZvcm1hdCAlcy4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTA2NAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTEwMQorbXNnaWQgIkNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMTAyCittc2dpZCAiQ2FuJ3QgY2hlcnJ5LXBpY2sgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IHNldHVwLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICIiCisKKyM6IHNoYTFfbmFtZS5jOjQ1MworbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzo2MSBzdWJtb2R1bGUuYzo5NQorbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjY1IHN1Ym1vZHVsZS5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD0lcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBzdWJtb2R1bGUuYzoxMTcKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IHN1Ym1vZHVsZS5jOjEwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBjb3JlLndvcmt0cmVlIGluICVzIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzo0OTEgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NDk5IHRyYWlsZXIuYzo1NTMgdHJhaWxlci5jOjU1NworIzogdHJhaWxlci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzo1NDMgdHJhaWxlci5jOjU0OCBidWlsdGluL3JlbW90ZS5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICIiCisKKyM6IHRyYWlsZXIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiB0cmFpbGVyLmM6NzA0Cittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiB0cmFuc3BvcnQtaGVscGVyLmM6MTAyNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCByZWYgJXMiCittc2dzdHIgIiIKKworIzogdW5wYWNrLXRyZWVzLmM6MjAzCittc2dpZCAiQ2hlY2tpbmcgb3V0IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IHVybG1hdGNoLmM6MTIwCittc2dpZCAiaW52YWxpZCBVUkwgc2NoZW1lIG5hbWUgb3IgbWlzc2luZyAnOi8vJyBzdWZmaXgiCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzoxNDQgdXJsbWF0Y2guYzoyOTcgdXJsbWF0Y2guYzozNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlWFggZXNjYXBlIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IHVybG1hdGNoLmM6MTcyCittc2dpZCAibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzoxODkKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICIiCisKKyM6IHVybG1hdGNoLmM6MTk5Cittc2dpZCAiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGhvc3QgbmFtZSIKK21zZ3N0ciAiIgorCisjOiB1cmxtYXRjaC5jOjI0NCB1cmxtYXRjaC5jOjI1NQorbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgIiIKKworIzogdXJsbWF0Y2guYzozMjIKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzoyMTkgd3JhcHBlci5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzoyMjEgd3JhcHBlci5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzoyMjMgd3JhcHBlci5jOjM2NiBidWlsdGluL2FtLmM6MzM3IGJ1aWx0aW4vY29tbWl0LmM6MTY4OAorIzogYnVpbHRpbi9tZXJnZS5jOjEwNzYgYnVpbHRpbi9wdWxsLmM6MzgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmciCittc2dzdHIgIiIKKworIzogd3JhcHBlci5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiCittc2dzdHIgIiIKKworIzogd3JhcHBlci5jOjYxMgorbXNnaWQgIm5vIHN1Y2ggdXNlciIKK21zZ3N0ciAiIgorCisjOiB3cmFwcGVyLmM6NjIwCittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IHdyYXBwZXIuYzo2MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJXMgZm9yIHdyaXRpbmciCittc2dzdHIgIiIKKworIzogd3JhcHBlci5jOjY0MiBidWlsdGluL2FtLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAiIgorCisjOiB3cmFwcGVyLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDkKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc2IHd0LXN0YXR1cy5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc4IHd0LXN0YXR1cy5jOjIwNQorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxODIKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTg0IHd0LXN0YXR1cy5jOjE4OAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxODYKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxOTcgd3Qtc3RhdHVzLmM6ODgwCittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIxNSB3dC1zdGF0dXMuYzo4ODkKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjE5Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjIxCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjIyCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjIyNAorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjUxCittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNTMKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjU1Cittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNTcKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNTkKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNjEKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNjMKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI3MworbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyNzUKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI3NworbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI3OQorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyODEKK21zZ2lkICJyZW5hbWVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyODMKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyODUKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyODcKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MzY5Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzozNzEKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MzczCittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzU0Cittc2dpZCAiU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzU2Cittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo4MzcKK21zZ2lkICIiCisiRG8gbm90IHRvdWNoIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgd2lsbCBiZSByZW1vdmVkLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo5NDgKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6OTUxCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo5NTQKK21zZ2lkICJBbGwgY29uZmxpY3RzIGZpeGVkIGJ1dCB5b3UgYXJlIHN0aWxsIG1lcmdpbmcuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjk1NworbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6OTY3Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjk3MAorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo5NzQKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjk3NgorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjk3OAorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTA1Cittc2dpZCAiTm8gY29tbWFuZHMgZG9uZS4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogd3Qtc3RhdHVzLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTI0Cittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTM1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE1MworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTY3Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE2OQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTcxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExNzcKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExODYKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMTg5Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTE5MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjExOTgKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTIwMQorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTIwMworbXNnaWQgIiIKKyIgICh1c2UgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTIxOAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEyMjEKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMjIzCittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxMjM3Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEyNDAKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTI0MgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTI1NworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTI2MAorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDQ1Cittc2dpZCAiaW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDQ3Cittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDUyCittc2dpZCAiSEVBRCBkZXRhY2hlZCBhdCAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1NAorbXNnaWQgIkhFQUQgZGV0YWNoZWQgZnJvbSAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQ1NworbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQ3NAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE0ODgKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQ5MAorbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNTAyCittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNTA4Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNTI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0IChjcmVhdGUvY29weSBmaWxlcyBhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE1Mjggd3Qtc3RhdHVzLmM6MTUzMworIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIGRpcmVjdG9yeSBjbGVhblxuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE2NDQKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE2NTAKK21zZ2lkICJJbml0aWFsIGNvbW1pdCBvbiAiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTY3NworbXNnaWQgImdvbmUiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTY3OSB3dC1zdGF0dXMuYzoxNjg3Cittc2dpZCAiYmVoaW5kICIKK21zZ3N0ciAiIgorCisjOiBjb21wYXQvcHJlY29tcG9zZV91dGY4LmM6NTUgYnVpbHRpbi9jbG9uZS5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyMgorbXNnaWQgImdpdCBhZGQgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjcwIGJ1aWx0aW4vY29tbWl0LmM6Mjc3Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjEzNAorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTk0IGJ1aWx0aW4vcmV2LXBhcnNlLmM6Nzk5Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjEyCittc2dpZCAiZWRpdGluZyBwYXRjaCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjIxNworbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjIzMgorbXNnaWQgIlRoZSBmb2xsb3dpbmcgcGF0aHMgYXJlIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI0OSBidWlsdGluL2NsZWFuLmM6ODk2IGJ1aWx0aW4vZmV0Y2guYzoxMDggYnVpbHRpbi9tdi5jOjExMAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NSBidWlsdGluL3B1bGwuYzoxODIgYnVpbHRpbi9wdXNoLmM6NTQ1CisjOiBidWlsdGluL3JlbW90ZS5jOjEzMzkgYnVpbHRpbi9ybS5jOjI2OCBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgImRyeSBydW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTAgYnVpbHRpbi9hcHBseS5jOjQ1ODAgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxOQorIzogYnVpbHRpbi9jb21taXQuYzoxMzIxIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjYzIGJ1aWx0aW4vZnNjay5jOjYzNgorIzogYnVpbHRpbi9sb2cuYzoxNjQxIGJ1aWx0aW4vbXYuYzoxMDkgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTQKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUyCittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI1MyBidWlsdGluL2NoZWNrb3V0LmM6MTE1MiBidWlsdGluL3Jlc2V0LmM6Mjg2Cittc2dpZCAic2VsZWN0IGh1bmtzIGludGVyYWN0aXZlbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTQKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTUKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTYKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI1NworbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI1OAorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI2MQorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYzCittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY0Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI2NQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk0Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjMzMAorbXNnaWQgIi1BIGFuZCAtdSBhcmUgbXV0dWFsbHkgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM3Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjM2NCBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MiBidWlsdGluL2NsZWFuLmM6OTQwCisjOiBidWlsdGluL2NvbW1pdC5jOjMzNiBidWlsdGluL212LmM6MTMwIGJ1aWx0aW4vcmVzZXQuYzoyMzUgYnVpbHRpbi9ybS5jOjI5OAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjQ0NSBidWlsdGluL2FwcGx5LmM6NDY3OCBidWlsdGluL212LmM6Mjc5IGJ1aWx0aW4vcm0uYzo0MzAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyNzAgYnVpbHRpbi9hbS5jOjEzNDUgYnVpbHRpbi9jb21taXQuYzo3MzcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjQ0NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo1MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyB3YXMgZGVsZXRlZCBieSB0aGUgYXBwbHlwYXRjaC1tc2cgaG9vayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6NTYyIGJ1aWx0aW4vbm90ZXMuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo1OTkgYnVpbHRpbi9ub3Rlcy5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6NjI1Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo3ODYgYnVpbHRpbi9hbS5jOjg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjg2NworbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzo5MTUKK21zZ2lkICJpbnZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6OTE4IGJ1aWx0aW4vYW0uYzo5MjYKK21zZ2lkICJpbnZhbGlkIERhdGUgbGluZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6OTIzCittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjEwMTAKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjEwMTUgYnVpbHRpbi9jbG9uZS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDE5Cittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTUxIGJ1aWx0aW4vY29tbWl0LmM6MzYyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjEyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjEyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTMzOQorbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiBXYXMgaXQgc3BsaXQgd3Jvbmc/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDEzIGJ1aWx0aW4vbG9nLmM6MTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDQwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE2MTQKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjE2Cittc2dpZCAiVXNpbmcgaW5kZXggaW5mbyB0byByZWNvbnN0cnVjdCBhIGJhc2UgdHJlZS4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTYzNQorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE2NDEKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE2NjYKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjkxIGJ1aWx0aW4vbWVyZ2UuYzo2MzIKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjk4Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTcxMSBidWlsdGluL2NvbW1pdC5jOjE3NTIgYnVpbHRpbi9tZXJnZS5jOjgyOQorIzogYnVpbHRpbi9tZXJnZS5jOjg1NAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQzIGJ1aWx0aW4vYW0uYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTc2MworbXNnaWQgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MTc2OAorbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW3ldLCBbbl0sIFtlXSwgW3ZdIGFuZCBbYV0KKyMuIGluIHlvdXIgdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaAorIy4gaW5wdXQgYXQgdGhpcyBwb2ludC4KKyMuCisjOiBidWlsdGluL2FtLmM6MTc3OAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODYzIGJ1aWx0aW4vYW0uYzoxOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODc5Cittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZhaWxlZCBhdCAlcyAlLipzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODkzCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjb3B5IG9mIHRoZSBwYXRjaCB0aGF0IGZhaWxlZCBpcyBmb3VuZCBpbjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE5MzcKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjE5NDQKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJEaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjA1MiBidWlsdGluL2FtLmM6MjA1NiBidWlsdGluL2FtLmM6MjA2OCBidWlsdGluL3Jlc2V0LmM6MzA4CisjOiBidWlsdGluL3Jlc2V0LmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxMDQKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIxMzgKK21zZ2lkICIiCisiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFEIHNpbmNlIHRoZSBsYXN0ICdhbScgZmFpbHVyZS5cbiIKKyJOb3QgcmV3aW5kaW5nIHRvIE9SSUdfSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjE5OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMjEKK21zZ2lkICJnaXQgYW0gW29wdGlvbnNdIFsoPG1ib3g+fDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIyCittc2dpZCAiZ2l0IGFtIFtvcHRpb25zXSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI4Cittc2dpZCAicnVuIGludGVyYWN0aXZlbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzAKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIzMgorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMzIGJ1aWx0aW4vaW5pdC1kYi5jOjUwOSBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU3CisjOiBidWlsdGluL3JlcGFjay5jOjE3MQorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM1Cittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjIzOAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQwCittc2dpZCAicGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI0MgorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyNDQKK21zZ2lkICJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ2Cittc2dpZCAicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI0OQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUyCittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUzIGJ1aWx0aW4vYXBwbHkuYzo0NTYzCittc2dpZCAiYWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjU0IGJ1aWx0aW4vYW0uYzoyMjU3IGJ1aWx0aW4vYW0uYzoyMjYwIGJ1aWx0aW4vYW0uYzoyMjYzCisjOiBidWlsdGluL2FtLmM6MjI2NiBidWlsdGluL2FtLmM6MjI2OSBidWlsdGluL2FtLmM6MjI3MiBidWlsdGluL2FtLmM6MjI3NQorIzogYnVpbHRpbi9hbS5jOjIyODEKK21zZ2lkICJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYyIGJ1aWx0aW4vYXBwbHkuYzo0NTg3Cittc2dpZCAicm9vdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI2NSBidWlsdGluL2FtLmM6MjI2OCBidWlsdGluL2FwcGx5LmM6NDUyNQorIzogYnVpbHRpbi9hcHBseS5jOjQ1MjggYnVpbHRpbi9jbG9uZS5jOjg1IGJ1aWx0aW4vZmV0Y2guYzo5MworIzogYnVpbHRpbi9wdWxsLmM6MTY3Cittc2dpZCAicGF0aCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI3MSBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjkgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcyCisjOiBidWlsdGluL2dyZXAuYzo2OTggYnVpbHRpbi9tZXJnZS5jOjE5OCBidWlsdGluL3B1bGwuYzoxMjcKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc4IGJ1aWx0aW4vcmVwYWNrLmM6MTgyIGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjQKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODAgYnVpbHRpbi90YWcuYzo1OTEgcGFyc2Utb3B0aW9ucy5oOjEzMgorIzogcGFyc2Utb3B0aW9ucy5oOjEzNCBwYXJzZS1vcHRpb25zLmg6MjQzCittc2dpZCAibiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI3NCBidWlsdGluL2FwcGx5LmM6NDUzMQorbXNnaWQgIm51bSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI3NyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0IGJ1aWx0aW4vcmVwbGFjZS5jOjQzOAorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI3OAorbXNnaWQgImZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI4NAorbXNnaWQgIm92ZXJyaWRlIGVycm9yIG1lc3NhZ2Ugd2hlbiBwYXRjaCBmYWlsdXJlIG9jY3VycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI4NgorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyODkKK21zZ2lkICJzeW5vbnltcyBmb3IgLS1jb250aW51ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjI5MgorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIyOTUKK21zZ2lkICJyZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIGFib3J0IHRoZSBwYXRjaGluZyBvcGVyYXRpb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk5Cittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzAxCittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FtLmM6MjMwMyBidWlsdGluL2NvbW1pdC5jOjE1OTAgYnVpbHRpbi9tZXJnZS5jOjIyNQorIzogYnVpbHRpbi9wdWxsLmM6MTU1IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIgYnVpbHRpbi90YWcuYzo2MDYKK21zZ2lkICJrZXktaWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIzMDQKK21zZ2lkICJHUEctc2lnbiBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzA3Cittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjIKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIzMjkKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hbS5jOjIzNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJTdHJheSAlcyBkaXJlY3RvcnkgZm91bmQuXG4iCisiVXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZW1vdmUgaXQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzc0Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NTkKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjk1NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmcmFnbWVudCB3aXRob3V0IGhlYWRlciBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50cyAobGluZSAlZCkiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY1OQorbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjYxCittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY4NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyOAorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxODc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBvciByZWFkICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzA0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyMzUgYnVpbHRpbi9hcHBseS5jOjMyNDYgYnVpbHRpbi9hcHBseS5jOjMyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBvZiAlcyBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI3MSBidWlsdGluL2FwcGx5LmM6MzQ5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM1MiBidWlsdGluL2FwcGx5LmM6MzUwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMzNTYgYnVpbHRpbi9hcHBseS5jOjM0OTkgYnVpbHRpbi9hcHBseS5jOjM1MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzYxIGJ1aWx0aW4vYXBwbHkuYzozNTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzQ2MworbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNjkzIGJ1aWx0aW4vYXBwbHkuYzozNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc1MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJhZmZlY3RlZCBmaWxlICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzgwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5MDkgYnVpbHRpbi9jaGVja291dC5jOjIzMiBidWlsdGluL3Jlc2V0LmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm1ha2VfY2FjaGVfZW50cnkgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA5MyBidWlsdGluL2FwcGx5LmM6NDIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDI3MAorbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDM5NworbXNnaWQgInVucmVjb2duaXplZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDQwOAorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MjYKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTI5Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUzMgorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTM1Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUzNworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0MQorbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDMKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQ1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0NworbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0OQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTUxCittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1MworbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTU1Cittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1NworbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTU5IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTggYnVpbHRpbi9scy1maWxlcy5jOjQxMgorbXNnaWQgInBhdGhzIGFyZSBzZXBhcmF0ZWQgd2l0aCBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTYyCittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTY0Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NjcgYnVpbHRpbi9hcHBseS5jOjQ1NzAKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTczCittc2dpZCAiYXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzUKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3NworbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTc5Cittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODIKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU4NQorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU4OAorbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MTAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MTgKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjIxCittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDY2MCBidWlsdGluL2FwcGx5LmM6NDY3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjU4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBFT0YiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBhIGZsdXNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNworbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9iaXNlY3QtLWhlbHBlci5jOjE5Cittc2dpZCAidXBkYXRlIEJJU0VDVF9IRUFEIGluc3RlYWQgb2YgY2hlY2tpbmcgb3V0IHRoZSBjdXJyZW50IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzIKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjM3Cittc2dpZCAiPHJldi1vcHRzPiBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDAKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTAxCittc2dpZCAiU2hvdyBibGFuayBTSEEtMSBmb3IgYm91bmRhcnkgY29tbWl0cyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMworbXNnaWQgIlNob3cgd29yayBjb3N0IHN0YXRpc3RpY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDQKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwNQorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA2Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA3Cittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwOAorbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwOQorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTAKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTEKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTIKK21zZ2lkICJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTEzCittc2dpZCAiU2hvdyBhdXRob3IgZW1haWwgaW5zdGVhZCBvZiBuYW1lIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE0Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTUKK21zZ2lkICJTcGVuZCBleHRyYSBjeWNsZXMgdG8gZmluZCBiZXR0ZXIgbWF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTYKK21zZ2lkICJVc2UgcmV2aXNpb25zIGZyb20gPGZpbGU+IGluc3RlYWQgb2YgY2FsbGluZyBnaXQtcmV2LWxpc3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTcKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE4IGJ1aWx0aW4vYmxhbWUuYzoyNTE5Cittc2dpZCAic2NvcmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTgKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE5Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUyMAorbXNnaWQgIm4sbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUyMAorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlIG1heGltdW0KKyMuIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluICJnaXQgYmxhbWUiCisjLiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMSBtb250aHMgYWdvIiwgd2hpY2gKKyMuIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QgYW1vbmcgdmFyaW91cyBmb3JtcyBvZgorIy4gcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0IHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvcgorIy4gZmV3ZXIgZGlzcGxheSBjb2x1bW5zLgorIzogYnVpbHRpbi9ibGFtZS5jOjI2MDEKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjYKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxicmFuY2gtbmFtZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODUKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjEzCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE5Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGJyYW5jaCAnJXMnIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBkZWxldGluZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgcG9pbnQgYXQgYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBnb25lXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ1NworIywgYy1mb3JtYXQKK21zZ2lkICJbJXNdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYmVoaW5kICVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJbYmVoaW5kICVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGFoZWFkICVkXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJbYWhlYWQgJWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYWhlYWQgJWQsIGJlaGluZCAlZF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDg5Cittc2dpZCAiICoqKiogaW52YWxpZCByZWYgKioqKiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCByZWJhc2luZyAlcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKG5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIihIRUFEIGRldGFjaGVkIGF0ICVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBmcm9tICVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5NgorbXNnaWQgIihubyBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjkxCittc2dpZCAic29tZSByZWZzIGNvdWxkIG5vdCBiZSByZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyOQorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NDQKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBicmFuY2ggZGVzY3JpcHRpb24gdGVtcGxhdGU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODExCittc2dpZCAiR2VuZXJpYyBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODEzCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTQKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODE1Cittc2dpZCAic2V0IHVwIHRyYWNraW5nIG1vZGUgKHNlZSBnaXQtcHVsbCgxKSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTcKK21zZ2lkICJjaGFuZ2UgdXBzdHJlYW0gaW5mbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInVzZSBjb2xvcmVkIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMgorbXNnaWQgImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjUgYnVpbHRpbi9icmFuY2guYzo4MzEgYnVpbHRpbi9icmFuY2guYzo4NTIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODU4IGJ1aWx0aW4vY29tbWl0LmM6MTU4MCBidWlsdGluL2NvbW1pdC5jOjE1ODEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MiBidWlsdGluL2NvbW1pdC5jOjE1ODMgYnVpbHRpbi90YWcuYzo2MTgKKyM6IGJ1aWx0aW4vdGFnLmM6NjI0Cittc2dpZCAiY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODI2IGJ1aWx0aW4vYnJhbmNoLmM6ODMyCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgzOAorbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MzkKK21zZ2lkICJsaXN0IGJvdGggcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQyCittc2dpZCAiZGVsZXRlIGJyYW5jaCAoZXZlbiBpZiBub3QgbWVyZ2VkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ0Cittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NQorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ2Cittc2dpZCAiY3JlYXRlIHRoZSBicmFuY2gncyByZWZsb2ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDgKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0OQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NTIKK21zZ2lkICJwcmludCBvbmx5IG5vdCBtZXJnZWQgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NTgKK21zZ2lkICJwcmludCBvbmx5IG1lcmdlZCBicmFuY2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg2MgorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg3NQorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODc5IGJ1aWx0aW4vY2xvbmUuYzo2OTAKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjkwMQorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjkxMiBidWlsdGluL2JyYW5jaC5jOjk1MQorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTI3Cittc2dpZCAiQ2Fubm90IGdpdmUgZGVzY3JpcHRpb24gdG8gZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjkzMgorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjk1NworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo5NjIKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3Qgc2V0IHVwc3RyZWFtIG9mIEhFQUQgdG8gJXMgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjk2OSBidWlsdGluL2JyYW5jaC5jOjk5MSBidWlsdGluL2JyYW5jaC5jOjEwMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjk4NQorbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIHRvIHVuc2V0IHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTg5Cittc2dpZCAiY291bGQgbm90IHVuc2V0IHVwc3RyZWFtIG9mIEhFQUQgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjk5NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJyVzJyBoYXMgbm8gdXBzdHJlYW0gaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxMDA5Cittc2dpZCAiaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBjcmVhdGUgJ0hFQUQnIG1hbnVhbGx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAxNQorbXNnaWQgIi1hIGFuZCAtciBvcHRpb25zIHRvICdnaXQgYnJhbmNoJyBkbyBub3QgbWFrZSBzZW5zZSB3aXRoIGEgYnJhbmNoIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tIgorInRyYWNrIG9yIC0tc2V0LXVwc3RyZWFtLXRvXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxMDM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIG1ha2UgJyVzJyB0cmFjayAnJXMnLCBkbyB0aGlzOlxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgZ2l0IGJyYW5jaCAtZCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjQKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjgKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQyOAorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV18LXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwtZXwtcHwiCisiPHR5cGU+fC0tdGV4dGNvbnYpIDxvYmplY3Q+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MjkKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSA8IDxsaXN0LW9mLSIKKyJvYmplY3RzPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDY2Cittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NjcKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NjgKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzAKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3MQorbXNnaWQgInByZXR0eS1wcmludCBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzMKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDc1Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzYKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3OAorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDgxCittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0ODQKK21zZ2lkICJmb2xsb3cgaW4tdHJlZSBzeW1saW5rcyAodXNlZCB3aXRoIC0tYmF0Y2ggb3IgLS1iYXRjaC1jaGVjaykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ4NgorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTEKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEyCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxOQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMAorbXNnaWQgInVzZSAuZ2l0YXR0cmlidXRlcyBvbmx5IGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjIgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk2Cittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNAorbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTggYnVpbHRpbi9jaGVja291dC5jOjExMzMgYnVpbHRpbi9nYy5jOjI2NworbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI2Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOAorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU0Cittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE1NworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU5Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NQorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY4Cittc2dpZCAiLS1ub24tbWF0Y2hpbmcgaXMgb25seSB2YWxpZCB3aXRoIC0tdmVyYm9zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo4Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjEzCittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbnRhY3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ3Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMjYKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTg4Cittc2dpZCAiY2hlY2sgb3V0IGFsbCBmaWxlcyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4OQorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTkxCittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTkzCittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTUKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAxCittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDMKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwNCBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAic3RyaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDUKK21zZ2lkICJ3aGVuIGNyZWF0aW5nIGZpbGVzLCBwcmVwZW5kIDxzdHJpbmc+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDgKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2Cittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzMgYnVpbHRpbi9jaGVja291dC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIGFsbCBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTAgYnVpbHRpbi9jaGVja291dC5jOjI1MyBidWlsdGluL2NoZWNrb3V0LmM6MjU2CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYyIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzkgYnVpbHRpbi9jaGVja291dC5jOjQ3MworbXNnaWQgImNvcnJ1cHQgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzM5IGJ1aWx0aW4vY2hlY2tvdXQuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0OTUKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NjAKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzYgYnVpbHRpbi9jaGVja291dC5jOjEwNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICIgLi4uIGFuZCAlZCBtb3JlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTEKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTUKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODIyIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDYwCittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9ubHkgb25lIHJlZmVyZW5jZSBleHBlY3RlZCwgJWQgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA2IGJ1aWx0aW4vd29ya3RyZWUuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3NAorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDc3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwODUgYnVpbHRpbi9jaGVja291dC5jOjEwODggYnVpbHRpbi9jaGVja291dC5jOjEwOTMKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzd2l0Y2ggYnJhbmNoIHRvIGEgbm9uLWNvbW1pdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM0IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM2IGJ1aWx0aW4vY2xvbmUuYzo4MworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkgYnVpbHRpbi9yZW1vdGUuYzoxNjEgYnVpbHRpbi93b3JrdHJlZS5jOjMxNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMxOQorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzNQorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzOAorbXNnaWQgImNyZWF0ZSByZWZsb2cgZm9yIG5ldyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzkKK21zZ2lkICJkZXRhY2ggdGhlIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQwCittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDIKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQyCittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQzCittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ1Cittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDcKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0OAorbXNnaWQgInBlcmZvcm0gYSAzLXdheSBtZXJnZSB3aXRoIHRoZSBuZXcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ5IGJ1aWx0aW4vbWVyZ2UuYzoyMjcKK21zZ2lkICJ1cGRhdGUgaWdub3JlZCBmaWxlcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTAgYnVpbHRpbi9sb2cuYzoxMjY0IHBhcnNlLW9wdGlvbnMuaDoyNDkKK21zZ2lkICJzdHlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1MQorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTQKK21zZ2lkICJkbyBub3QgbGltaXQgcGF0aHNwZWNzIHRvIHNwYXJzZSBlbnRyaWVzIG9ubHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTYKK21zZ2lkICJzZWNvbmQgZ3Vlc3MgJ2dpdCBjaGVja291dCA8bm8tc3VjaC1icmFuY2g+JyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1OAorbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE4MQorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE5OAorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIwMworbXNnaWQgIk1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIzOQorbXNnaWQgImludmFsaWQgcGF0aCBzcGVjaWZpY2F0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS5cbiIKKyJEaWQgeW91IGludGVuZCB0byBjaGVja291dCAnJXMnIHdoaWNoIGNhbiBub3QgYmUgcmVzb2x2ZWQgYXMgY29tbWl0PyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNTUKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI1Cittc2dpZCAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgc2tpcCByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMxNworbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyMQorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MzcKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc3OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODAzCittc2dpZCAiQnllLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODExCittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzOAorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzOQorbXNnaWQgIldoYXQgbm93IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg2NAorbXNnaWQgIk5vIG1vcmUgZmlsZXMgdG8gY2xlYW4sIGV4aXRpbmcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4OTUKK21zZ2lkICJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODk3Cittc2dpZCAiZm9yY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg5OAorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDAKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwMSBidWlsdGluL2Rlc2NyaWJlLmM6NDA3IGJ1aWx0aW4vZ3JlcC5jOjcxNAorIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0MyBidWlsdGluL25hbWUtcmV2LmM6MzExIGJ1aWx0aW4vc2hvdy1yZWYuYzoxODcKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDIKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTAzCittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA1Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTIzCittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MjcKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzMAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNworbXNnaWQgImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NyBidWlsdGluL2ZldGNoLmM6MTEyIGJ1aWx0aW4vbWVyZ2UuYzoyMjQKKyM6IGJ1aWx0aW4vcHVsbC5jOjEwOSBidWlsdGluL3B1c2guYzo1NjAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjgKK21zZ2lkICJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjU5Cittc2dpZCAiZG9uJ3QgY3JlYXRlIGEgY2hlY2tvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjYwIGJ1aWx0aW4vY2xvbmUuYzo2MiBidWlsdGluL2luaXQtZGIuYzo1MDQKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY2Cittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY4Cittc2dpZCAiZG9uJ3QgdXNlIGxvY2FsIGhhcmRsaW5rcywgYWx3YXlzIGNvcHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwCittc2dpZCAic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcyIGJ1aWx0aW4vY2xvbmUuYzo3NAorbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc1IGJ1aWx0aW4vaW5pdC1kYi5jOjUwMQorbXNnaWQgInRlbXBsYXRlLWRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzYgYnVpbHRpbi9pbml0LWRiLmM6NTAyCittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzgKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODAKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MSBidWlsdGluL2NvbHVtbi5jOjI2IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAibmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODIKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODYKK21zZ2lkICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NyBidWlsdGluL2ZldGNoLmM6MTEzIGJ1aWx0aW4vZ3JlcC5jOjY1OQorIzogYnVpbHRpbi9wdWxsLmM6MTg2Cittc2dpZCAiZGVwdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MAorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTEgYnVpbHRpbi9pbml0LWRiLmM6NTEwCittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MiBidWlsdGluL2luaXQtZGIuYzo1MTEKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MworbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTQKK21zZ2lkICJzZXQgY29uZmlnIGluc2lkZSB0aGUgbmV3IHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzAgYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgbGluayAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNvcHkgZmlsZSB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzUgYnVpbHRpbi9jbG9uZS5jOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NDcKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB0aGUgY2hlY2tvdXQgd2l0aCAnZ2l0IGNoZWNrb3V0IC1mIEhFQUQnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eS4uLiAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjYxNworbXNnaWQgInJlbW90ZSBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2ODEKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcxMgorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc5OQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwMQorbXNnaWQgImNhbm5vdCB1bmxpbmsgdGVtcG9yYXJ5IGFsdGVybmF0ZXMgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODMxCittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODM1Cittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NDkKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlcG9zaXRvcnkgJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODY4IGJ1aWx0aW4vZmV0Y2guYzoxMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwMyBidWlsdGluL2Nsb25lLmM6OTE0IGJ1aWx0aW4vd29ya3RyZWUuYzoyMTgKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBsZWFkaW5nIGRpcmVjdG9yaWVzIG9mICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvICclcycuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTUxCittc2dpZCAiLS1kaXNzb2NpYXRlIGdpdmVuLCBidXQgdGhlcmUgaXMgbm8gLS1yZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2OAorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzEKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzYKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBjbG9uZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTAyOSBidWlsdGluL2Nsb25lLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdGUgYnJhbmNoICVzIG5vdCBmb3VuZCBpbiB1cHN0cmVhbSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA0MAorbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo5Cittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI2Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9jb2x1bW4uYzoyOAorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzcKK21zZ2lkICJnaXQgY29tbWl0IFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQyCittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHkuIFJ1biB0aGVcbiIKKyJmb2xsb3dpbmcgY29tbWFuZCBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgaW4geW91ciBlZGl0b3IgdG8gZWRpdFxuIgorInlvdXIgY29uZmlndXJhdGlvbiBmaWxlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIC0tZWRpdFxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwCittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzIKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NworbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg3Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNraXAgdGhpcyBjb21taXQsIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlc2V0XG4iCisiXG4iCisiVGhlbiBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIgd2lsbCByZXN1bWUgY2hlcnJ5LXBpY2tpbmdcbiIKKyJ0aGUgcmVtYWluaW5nIGNvbW1pdHMuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMDQKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNDUKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NgorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzkwIGJ1aWx0aW4vY29tbWl0LmM6NDEzIGJ1aWx0aW4vY29tbWl0LmM6NDYyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ0Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ2Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDU1Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwMAorbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NTIKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4OSBidWlsdGluL2NvbW1pdC5jOjcyMiBidWlsdGluL2NvbW1pdC5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDEgYnVpbHRpbi9zaG9ydGxvZy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzAzCittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyOQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMworbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3ODQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJS4qcyA8JS4qcz4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNEYXRlOiAgICAgICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg4MAorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTM3Cittc2dpZCAiRXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5NTIgYnVpbHRpbi90YWcuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY5IGJ1aWx0aW4vY29tbWl0LmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTA2Cittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEzNgorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTQ1Cittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTQ4Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTAKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE1MworbXNnaWQgIk9wdGlvbnMgLS1zcXVhc2ggYW5kIC0tZml4dXAgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTYzCittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY1Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLy0tZml4dXAuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3MworbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkwCittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5MgorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTQKK21zZ2lkICJDbGV2ZXIuLi4gYW1lbmRpbmcgdGhlIGxhc3Qgb25lIHdpdGggZGlydHkgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5NgorbXNnaWQgIkV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG9yIC1vOyBhc3N1bWluZyAtLW9ubHkgcGF0aHMuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjA4IGJ1aWx0aW4vdGFnLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIxMworbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzIzIGJ1aWx0aW4vY29tbWl0LmM6MTYwMgorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjUgYnVpbHRpbi9jb21taXQuYzoxNjA0Cittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI3IGJ1aWx0aW4vY29tbWl0LmM6MTYwNiBidWlsdGluL3B1c2guYzo1NDYKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzAgYnVpbHRpbi9jb21taXQuYzoxNjA4Cittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzMyBidWlsdGluL2NvbW1pdC5jOjE2MTEKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzUgYnVpbHRpbi9jb21taXQuYzoxNjE0IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODEKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODQgYnVpbHRpbi90YWcuYzo2MDQKK21zZ2lkICJtb2RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzNiBidWlsdGluL2NvbW1pdC5jOjE2MTQKK21zZ2lkICJzaG93IHVudHJhY2tlZCBmaWxlcywgb3B0aW9uYWwgbW9kZXM6IGFsbCwgbm9ybWFsLCBuby4gKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM5Cittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MCBwYXJzZS1vcHRpb25zLmg6MTU1Cittc2dpZCAid2hlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDEKK21zZ2lkICIiCisiaWdub3JlIGNoYW5nZXMgdG8gc3VibW9kdWxlcywgb3B0aW9uYWwgd2hlbjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQzCittc2dpZCAibGlzdCB1bnRyYWNrZWQgZmlsZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MjkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQzMQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NzYKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3OQorbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3MgorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTczCittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NQorbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc2IGJ1aWx0aW4vdGFnLmM6NjAyCittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzcKK21zZ2lkICJhdXRob3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc3Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc4IGJ1aWx0aW4vZ2MuYzoyNjgKK21zZ2lkICJkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OAorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzkgYnVpbHRpbi9tZXJnZS5jOjIxOCBidWlsdGluL25vdGVzLmM6MzkyCisjOiBidWlsdGluL25vdGVzLmM6NTU1IGJ1aWx0aW4vdGFnLmM6NjAwCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzkKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODAKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODEKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODIKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MworbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NAorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg1IGJ1aWx0aW4vbG9nLmM6MTIxNiBidWlsdGluL3JldmVydC5jOjg2Cittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NgorbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODcKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODgKK21zZ2lkICJkZWZhdWx0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OCBidWlsdGluL3RhZy5jOjYwNQorbXNnaWQgImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg5Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTkxIGJ1aWx0aW4vbWVyZ2UuYzoyMjYgYnVpbHRpbi9wdWxsLmM6MTU2CisjOiBidWlsdGluL3JldmVydC5jOjkzCittc2dpZCAiR1BHIHNpZ24gY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NAorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NQorbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTYKK21zZ2lkICJhZGQgc3BlY2lmaWVkIGZpbGVzIHRvIGluZGV4IGZvciBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk3Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk4Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTkKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjAwCittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgaG9vayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDEKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxMgorbXNnaWQgImFtZW5kIHByZXZpb3VzIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTMKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE4Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjAKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0OQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MDIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTcyMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBjb21taXQgbWVzc2FnZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3ODUKK21zZ2lkICIiCisiUmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBhbmQgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc2V0IEhFQURcIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTQKK21zZ2lkICJDb25maWcgZmlsZSBsb2NhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU1Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU2Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU3Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OAorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU5Cittc2dpZCAiYmxvYi1pZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU5Cittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYwCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjEKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYyCittc2dpZCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjMKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY0Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NgorbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY3Cittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY4Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OQorbXNnaWQgInJlbmFtZSBzZWN0aW9uOiBvbGQtbmFtZSBuZXctbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcwCittc2dpZCAicmVtb3ZlIGEgc2VjdGlvbjogbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MgorbXNnaWQgIm9wZW4gYW4gZWRpdG9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NQorbXNnaWQgIlR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NgorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3Cittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OAorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc5Cittc2dpZCAidmFsdWUgaXMgYSBwYXRoIChmaWxlIG9yIGRpcmVjdG9yeSBuYW1lKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgwCittc2dpZCAiT3RoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MQorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgyCittc2dpZCAic2hvdyB2YXJpYWJsZSBuYW1lcyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODMKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb25maWcuYzozMTEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjU1Cittc2dpZCAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo2NQorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MTcKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjE4Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIC0tZGlydHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjUwIGJ1aWx0aW4vbG9nLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJzZWFyY2hpbmcgdG8gZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJhdmVyc2VkICVsdSBjb21taXRzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NgorbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NworbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5OAorbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTkKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDAwCittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDAxCittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDQKK21zZ2lkICJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDYKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDgKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTAgYnVpbHRpbi9uYW1lLXJldi5jOjMxOAorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDExCittc2dpZCAibWFyayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDEyCittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzAKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU2Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ3NgorbXNnaWQgIi0tZGlydHkgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tbWl0LWlzaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU4Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyNQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4MAorbXNnaWQgInNob3cgcHJvZ3Jlc3MgYWZ0ZXIgPG4+IG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4MgorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg1Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg4Cittc2dpZCAiRHVtcCBtYXJrcyB0byB0aGlzIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5MAorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTkyCittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5NAorbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTYKK21zZ2lkICJVc2UgdGhlIGRvbmUgZmVhdHVyZSB0byB0ZXJtaW5hdGUgdGhlIHN0cmVhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk3Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTgKK21zZ2lkICJyZWZzcGVjIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTkKK21zZ2lkICJBcHBseSByZWZzcGVjIHRvIGV4cG9ydGVkIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwMDAKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjEKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjIKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjMKK21zZ2lkICJnaXQgZmV0Y2ggLS1hbGwgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkwIGJ1aWx0aW4vcHVsbC5jOjE2MgorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkyIGJ1aWx0aW4vcHVsbC5jOjE2NQorbXNnaWQgImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTQgYnVpbHRpbi9wdWxsLmM6MTY4Cittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NSBidWlsdGluL3B1bGwuYzoxNzAKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NworbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTkgYnVpbHRpbi9wdWxsLmM6MTcyCittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAxCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDMgYnVpbHRpbi9wdWxsLmM6MTc1Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNCBidWlsdGluL3B1bGwuYzoxNzgKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNSBidWlsdGluL3B1bGwuYzoxNzkKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDkgYnVpbHRpbi9wdWxsLmM6MTg0Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMQorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTQgYnVpbHRpbi9wdWxsLmM6MTg3Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2IGJ1aWx0aW4vcHVsbC5jOjE5MAorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTggYnVpbHRpbi9sb2cuYzoxMjMzCittc2dpZCAiZGlyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTkKK21zZ2lkICJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjIKK21zZ2lkICJkZWZhdWx0IG1vZGUgZm9yIHJlY3Vyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI0IGJ1aWx0aW4vcHVsbC5jOjE5MworbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI1IGJ1aWx0aW4vcHVsbC5jOjE5NQorbXNnaWQgInJlZm1hcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI2IGJ1aWx0aW4vcHVsbC5jOjE5NgorbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNzgKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ2MworbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiEgJS0qcyAlLSpzIC0+ICVzICAoY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NzggYnVpbHRpbi9mZXRjaC5jOjU2NAorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ4OQorbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDkxIGJ1aWx0aW4vZmV0Y2guYzo1MjYgYnVpbHRpbi9mZXRjaC5jOjU0NAorbXNnaWQgIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTA5Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MTIKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxNQorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTYwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU2MAorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU2NgorbXNnaWQgIihub24tZmFzdC1mb3J3YXJkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjAwIGJ1aWx0aW4vZmV0Y2guYzo4NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYyNworIywgYy1mb3JtYXQKK21zZ2lkICJyZWplY3QgJXMgYmVjYXVzZSBzaGFsbG93IHJvb3RzIGFyZSBub3QgYWxsb3dlZCB0byBiZSB1cGRhdGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MTUgYnVpbHRpbi9mZXRjaC5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MTEKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMiBidWlsdGluL3JlbW90ZS5jOjEwMzQKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg1MQorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gZmV0Y2ggZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDczIGJ1aWx0aW4vcmVtb3RlLmM6OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDkxCittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMTQKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU2Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTgKK21zZ2lkICItLXVuc2hhbGxvdyBvbiBhIGNvbXBsZXRlIHJlcG9zaXRvcnkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4MQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgzCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMDIKK21zZ2lkICJGZXRjaGluZyBhIGdyb3VwIGFuZCBzcGVjaWZ5aW5nIHJlZnNwZWNzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTQKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzAKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczCittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzYKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzgKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjkKK21zZ2lkICJnaXQgZm9yLWVhY2gtcmVmIFs8b3B0aW9ucz5dIFs8cGF0dGVybj5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI2Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHB5dGhvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMwCittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBUY2wiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQKK21zZ2lkICJmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzUKK21zZ2lkICJrZXkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNgorbXNnaWQgImZpZWxkIG5hbWUgdG8gc29ydCBvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzoxNjMgYnVpbHRpbi9wcnVuZS5jOjEzNworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo1NjgKK21zZ2lkICJDaGVja2luZyBvYmplY3QgZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjMxCittc2dpZCAiZ2l0IGZzY2sgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM4Cittc2dpZCAic2hvdyBkYW5nbGluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzOQorbXNnaWQgInJlcG9ydCB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MQorbXNnaWQgIm1ha2UgaW5kZXggb2JqZWN0cyBoZWFkIG5vZGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MgorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDMKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDQKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDUKK21zZ2lkICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQ3Cittc2dpZCAid3JpdGUgZGFuZ2xpbmcgb2JqZWN0cyBpbiAuZ2l0L2xvc3QtZm91bmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQ4IGJ1aWx0aW4vcHJ1bmUuYzoxMDcKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjcwNworbXNnaWQgIkNoZWNraW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjI1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBvYmplY3QgZGlyZWN0b3J5ICUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjI2OQorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNzEKK21zZ2lkICJiZSBtb3JlIHRob3JvdWdoIChpbmNyZWFzZWQgcnVudGltZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjI3MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjI3MworbXNnaWQgImZvcmNlIHJ1bm5pbmcgZ2MgZXZlbiBpZiB0aGVyZSBtYXkgYmUgYW5vdGhlciBnYyBydW5uaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjM2NAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoyMworbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ0MSBidWlsdGluL2dyZXAuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgdHJlZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjU0NworIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjYzOAorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQwCittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQyCittc2dpZCAic2VhcmNoIGluIGJvdGggdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0NAorbXNnaWQgImlnbm9yZSBmaWxlcyBzcGVjaWZpZWQgdmlhICcuZ2l0aWdub3JlJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2NDcKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2NDkKK21zZ2lkICJjYXNlIGluc2Vuc2l0aXZlIG1hdGNoaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MQorbXNnaWQgIm1hdGNoIHBhdHRlcm5zIG9ubHkgYXQgd29yZCBib3VuZGFyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjU1Cittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1OAorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2NjAKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjY0Cittc2dpZCAidXNlIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjY3Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY3MAorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY3MworbXNnaWQgInVzZSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzYKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzcKK21zZ2lkICJkb24ndCBzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzgKK21zZ2lkICJzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODAKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4MgorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODQKK21zZ2lkICJzeW5vbnltIGZvciAtLWZpbGVzLXdpdGgtbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODcKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6Njg5Cittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2OTEKK21zZ2lkICJzaG93IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBpbnN0ZWFkIG9mIG1hdGNoaW5nIGxpbmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5MgorbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5NAorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5NgorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6Njk5Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgYW5kIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzAyCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDQKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGFmdGVyIG1hdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzA1Cittc2dpZCAic2hvcnRjdXQgZm9yIC1DIE5VTSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDgKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxMAorbXNnaWQgInNob3cgdGhlIHN1cnJvdW5kaW5nIGZ1bmN0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxMworbXNnaWQgInJlYWQgcGF0dGVybnMgZnJvbSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNQorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTcKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcyOQorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczMQorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMzCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM3Cittc2dpZCAicGFnZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM3Cittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQwCittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc0MSBidWlsdGluL3Nob3ctcmVmLmM6MTg5Cittc2dpZCAic2hvdyB1c2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4MDgKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjYKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTcKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTAwCittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwOAorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjgwCittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4MQorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTIgYnVpbHRpbi90YWcuYzo2MTQKK21zZ2lkICJ0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5MgorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5MworbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDEKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQyCittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzCittc2dpZCAic2hvdyBtYW4gcGFnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0NAorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjkxCittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTMwIGJ1aWx0aW4vaGVscC5jOjE1OCBidWlsdGluL2hlbHAuYzoxNjcgYnVpbHRpbi9oZWxwLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyc6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3MQorbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzozNzkKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQyOAorbXNnaWQgIkRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDI5Cittc2dpZCAiRXZlcnlkYXkgR2l0IFdpdGggMjAgQ29tbWFuZHMgT3IgU28iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMwCittc2dpZCAiQSBHaXQgZ2xvc3NhcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMxCittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzIKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzMKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDM0Cittc2dpZCAiQSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8gR2l0IChmb3IgdmVyc2lvbiAxLjUuMSBvciBuZXdlcikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDM1Cittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0NworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDY4IGJ1aWx0aW4vaGVscC5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzo1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYGdpdCAlcycgaXMgYWxpYXNlZCB0byBgJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlczogZXhwZWN0ZWQgdHlwZSAlcywgZm91bmQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc3Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI3OAorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjkwCittc2dpZCAidXNlZCBtb3JlIGJ5dGVzIHRoYW4gd2VyZSBhdmFpbGFibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjk3Cittc2dpZCAicGFjayB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMzMgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlbHU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUyMgorbXNnaWQgIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMwCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2OQorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTcxCisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTcKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NDMgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc3MgorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ2IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTYyCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgyNgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MworbXNnaWQgIkVycm9yIGluIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTE3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk0OAorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE4Cittc2dpZCAiUmVjZWl2aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1MAorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU1Cittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTgKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2OQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5NAorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI0NworbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2NworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhIgorbXNnaWRfcGx1cmFsICJwYWNrIGhhcyAlZCB1bnJlc29sdmVkIGRlbHRhcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGRlZmxhdGUgYXBwZW5kZWQgb2JqZWN0ICglZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzkxCittc2dpZCAiZXJyb3Igd2hpbGUgY2xvc2luZyBwYWNrIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgd3JpdGUga2VlcCBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDI1Cittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDM2Cittc2dpZCAiY2Fubm90IHN0b3JlIGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjIzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY3NSBidWlsdGluL2luZGV4LXBhY2suYzoxNjc4CisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjkwIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MDgKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzEyIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFja2ZpbGUgbmFtZSAnJXMnIGRvZXMgbm90IGVuZCB3aXRoICcucGFjayciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyOQorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgc3ltbGluayAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIHBhdGggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBvZiBhIHdyb25nIGZvcm1hdCB2ZXJzaW9uICVkIGZyb20gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGdpdCBkaXJlY3RvcnkgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzQ0IGJ1aWx0aW4vaW5pdC1kYi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJyVzJyBpcyBlaXRoZXIgIlJlaW5pdGlhbGl6ZWQKKyMuIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gIiIsIGFuZCB0aGUgbGFzdCAnJXMlcycgaXMgdGhlIHZlcmJhdGltIGRpcmVjdG9yeSBuYW1lLgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNQorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDM1Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDM2Cittc2dpZCAiIHNoYXJlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0ODMKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUwNgorbXNnaWQgInBlcm1pc3Npb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUwNworbXNnaWQgInNwZWNpZnkgdGhhdCB0aGUgZ2l0IHJlcG9zaXRvcnkgaXMgdG8gYmUgc2hhcmVkIGFtb25nc3Qgc2V2ZXJhbCB1c2VycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NDEgYnVpbHRpbi9pbml0LWRiLmM6NTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTUKK21zZ2lkICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciA8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSAiCisiWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoyNQorbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoyNgorbXNnaWQgInRyYWlsZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoyNworbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDMKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDQKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxCittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzIKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEzMworbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM0Cittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEzNworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo0NzkgYnVpbHRpbi9sb2cuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdHlwZTogJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo3MTQKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6Nzk4Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo4MjgKK21zZ2lkICJOZWVkIGV4YWN0bHkgb25lIHJhbmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjgzOAorbXNnaWQgIk5vdCBhIHJhbmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjk0NAorbXNnaWQgIkNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMDUxCittc2dpZCAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wdGlvbnM+XSBbPHNpbmNlPiB8IDxyZXZpc2lvbi1yYW5nZT5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA5NgorbXNnaWQgIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxMQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE0Cittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE4Cittc2dpZCAicHJpbnQgcGF0Y2hlcyB0byBzdGFuZGFyZCBvdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIwCittc2dpZCAiZ2VuZXJhdGUgYSBjb3ZlciBsZXR0ZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIyCittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMworbXNnaWQgInNmeCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjQKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjYKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyOAorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzAKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjMzCittc2dpZCAic3RvcmUgcmVzdWx0aW5nIGZpbGVzIGluIDxkaXI+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzNgorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzOQorbXNnaWQgImRvbid0IG91dHB1dCBiaW5hcnkgZGlmZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQxCittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0MworbXNnaWQgInNob3cgcGF0Y2ggZm9ybWF0IGluc3RlYWQgb2YgZGVmYXVsdCAocGF0Y2ggKyBzdGF0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDUKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ2Cittc2dpZCAiaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0NworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ4IGJ1aWx0aW4vbG9nLmM6MTI1MAorbXNnaWQgImVtYWlsIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0OAorbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MAorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MgorbXNnaWQgImlkZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MworbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU1Cittc2dpZCAibWVzc2FnZS1pZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTYKK21zZ2lkICJtYWtlIGZpcnN0IG1haWwgYSByZXBseSB0byA8bWVzc2FnZS1pZD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU3IGJ1aWx0aW4vbG9nLmM6MTI2MAorbXNnaWQgImJvdW5kYXJ5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1OAorbXNnaWQgImF0dGFjaCB0aGUgcGF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjYxCittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyNjUKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyNjcKK21zZ2lkICJzaWduYXR1cmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjY4Cittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI3MAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSBmcm9tIGEgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyNzEKK21zZ2lkICJkb24ndCBwcmludCB0aGUgcGF0Y2ggZmlsZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM2MAorbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEzNjIKK21zZ2lkICItLXN1YmplY3QtcHJlZml4IGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEzNzAKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3MgorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEzNzQKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzk3Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTU5Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjA3Cittc2dpZCAiZ2l0IGNoZXJyeSBbLXZdIFs8dXBzdHJlYW0+IFs8aGVhZD4gWzxsaW1pdD5dXV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzIgYnVpbHRpbi9sb2cuYzoxNjc0IGJ1aWx0aW4vbG9nLmM6MTY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6MzU4Cittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTUKK21zZ2lkICJpZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTcKK21zZ2lkICJ1c2UgbG93ZXJjYXNlIGxldHRlcnMgZm9yICdhc3N1bWUgdW5jaGFuZ2VkJyBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDE5Cittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyMQorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjMKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyNQorbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDI3Cittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzMAorbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzIKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzQKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWVzIG9ubHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzNworbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0MAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQyCittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0NAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQ3Cittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDUwCittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1MgorbXNnaWQgImFkZCB0aGUgc3RhbmRhcmQgZ2l0IGV4Y2x1c2lvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1NQorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTgKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1OQorbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjAKK21zZ2lkICJwcmV0ZW5kIHRoYXQgcGF0aHMgcmVtb3ZlZCBzaW5jZSA8dHJlZS1pc2g+IGFyZSBzdGlsbCBwcmVzZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NjIKK21zZ2lkICJzaG93IGRlYnVnZ2luZyBkYXRhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjI4Cittc2dpZCAiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTI5Cittc2dpZCAicmVjdXJzZSBpbnRvIHN1YnRyZWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzMQorbXNnaWQgInNob3cgdHJlZXMgd2hlbiByZWN1cnNpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM0Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzUKK21zZ2lkICJpbmNsdWRlIG9iamVjdCBzaXplIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNyBidWlsdGluL2xzLXRyZWUuYzoxMzkKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MgorbXNnaWQgInVzZSBmdWxsIHBhdGggbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ0Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NgorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSA8bXNnPiBIRUFEIDxjb21taXQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NworbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDAKK21zZ2lkICJzd2l0Y2ggYG0nIHJlcXVpcmVzIGEgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBtZXJnZSBzdHJhdGVneSAnJXMnLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTMgYnVpbHRpbi9wdWxsLmM6MTE5Cittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk2IGJ1aWx0aW4vcHVsbC5jOjEyMgorbXNnaWQgInNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk3IGJ1aWx0aW4vcHVsbC5jOjEyNQorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5OSBidWlsdGluL3B1bGwuYzoxMjgKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMiBidWlsdGluL3B1bGwuYzoxMzEKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA0IGJ1aWx0aW4vcHVsbC5jOjEzNAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA2IGJ1aWx0aW4vcHVsbC5jOjEzNworbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA3Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA5IGJ1aWx0aW4vcHVsbC5jOjE0MworbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxMworbXNnaWQgIlZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE0IGJ1aWx0aW4vbm90ZXMuYzo3NjcgYnVpbHRpbi9wdWxsLmM6MTQ4CisjOiBidWlsdGluL3JldmVydC5jOjg5Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNSBidWlsdGluL3B1bGwuYzoxNDkKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNiBidWlsdGluL3B1bGwuYzoxNTIKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNyBidWlsdGluL3B1bGwuYzoxNTMKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTkKK21zZ2lkICJtZXJnZSBjb21taXQgbWVzc2FnZSAoZm9yIGEgbm9uLWZhc3QtZm9yd2FyZCBtZXJnZSkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIyMworbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTEKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU2Cittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGEgdmFsaWQgb2JqZWN0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgwIGJ1aWx0aW4vbWVyZ2UuYzoyOTcKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMjcKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIlNxdWFzaCBjb21taXQgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQ0IGJ1aWx0aW4vbWVyZ2UuYzo3NjMgYnVpbHRpbi9tZXJnZS5jOjk3NQorIzogYnVpbHRpbi9tZXJnZS5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MzcyCittc2dpZCAiV3JpdGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNzQKK21zZ2lkICJGaW5pc2hpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NDQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzdHJpbmc6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NTYKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODExCittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzUKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkzNworbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM5Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIwOAorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIyNAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzEKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjM0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjQzCittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNTEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI2OAorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjcwCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3OAorbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQyMworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTAxCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTI0IGJ1aWx0aW4vbWVyZ2UuYzoxNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjkKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzAKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMxCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMgorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taXMtYW5jZXN0b3IgPGNvbW1pdD4gPGNvbW1pdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMTQKK21zZ2lkICJvdXRwdXQgYWxsIGNvbW1vbiBhbmNlc3RvcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE2Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIxOAorbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyMAorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjIKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo4Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozMworbXNnaWQgInNlbmQgcmVzdWx0cyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzQKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNworbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM5Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MgorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSB0aGlzIG1hcmtlciBzaXplIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQzCittc2dpZCAiZG8gbm90IHdhcm4gYWJvdXQgY29uZmxpY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjQKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUwCittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTEgYnVpbHRpbi93cml0ZS10cmVlLmM6MjQKK21zZ2lkICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTIKK21zZ2lkICJhbGxvdyBjcmVhdGlvbiBvZiBtb3JlIHRoYW4gb25lIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjE1Cittc2dpZCAiZ2l0IG12IFs8b3B0aW9ucz5dIDxzb3VyY2U+Li4uIDxkZXN0aW5hdGlvbj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBpcyBpbiBpbmRleCBhbmQgbm8gc3VibW9kdWxlPyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6NzEKK21zZ2lkICJQbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTExCittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTIKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MTUxCisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uICclcycgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjYKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzIKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODEKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMDYKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMDkKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjAKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjMKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIyNQorbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL212LmM6MjU2IGJ1aWx0aW4vcmVtb3RlLmM6NzIyIGJ1aWx0aW4vcmVwYWNrLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyNTUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjI1NgorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjU3Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMwOQorbXNnaWQgInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzEwCittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTIKK21zZ2lkICJvbmx5IHVzZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzE0Cittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzE1Cittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTYKK21zZ2lkICJhbGxvdyB0byBwcmludCBgdW5kZWZpbmVkYCBuYW1lcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMyMgorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW4gdGhlIGlucHV0IChpbnRlcm5hbCB1c2UpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNgorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+ICIKKyJ8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAiCisiKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMQorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBtZXJnZSBbLXYgfCAtcV0gWy1zIDxzdHJhdGVneT5dIDxub3Rlcy1yZWY+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHBydW5lIFstbiB8IC12XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MQorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDYKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTIKK21zZ2lkICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTcKK21zZ2lkICJnaXQgbm90ZXMgYXBwZW5kIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjYyCittc2dpZCAiZ2l0IG5vdGVzIGVkaXQgWzxvYmplY3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NjcKK21zZ2lkICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzMKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc0Cittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5Cittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NAorbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODkKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnc2hvdycgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNzQgYnVpbHRpbi90YWcuYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5MworbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjAyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG5vdGUgY29udGVudHMgaGF2ZSBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIzMiBidWlsdGluL3RhZy5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMzQgYnVpbHRpbi90YWcuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTMgYnVpbHRpbi9ub3Rlcy5jOjMwNCBidWlsdGluL25vdGVzLmM6MzA2CisjOiBidWlsdGluL25vdGVzLmM6MzY2IGJ1aWx0aW4vbm90ZXMuYzo0MjEgYnVpbHRpbi9ub3Rlcy5jOjUwNworIzogYnVpbHRpbi9ub3Rlcy5jOjUxMiBidWlsdGluL25vdGVzLmM6NTkwIGJ1aWx0aW4vbm90ZXMuYzo2NTMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NzcgYnVpbHRpbi90YWcuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1OSBidWlsdGluL25vdGVzLmM6NDE0IGJ1aWx0aW4vbm90ZXMuYzo0OTAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDIgYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL25vdGVzLmM6NjQ2CisjOiBidWlsdGluL25vdGVzLmM6OTQyCittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcyIGJ1aWx0aW4vbm90ZXMuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzkzIGJ1aWx0aW4vbm90ZXMuYzo1NTYKK21zZ2lkICJub3RlIGNvbnRlbnRzIGFzIGEgc3RyaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTYgYnVpbHRpbi9ub3Rlcy5jOjU1OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTggYnVpbHRpbi9ub3Rlcy5jOjQwMSBidWlsdGluL25vdGVzLmM6NTYxCisjOiBidWlsdGluL25vdGVzLmM6NTY0IGJ1aWx0aW4vdGFnLmM6NjMwCittc2dpZCAib2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTkgYnVpbHRpbi9ub3Rlcy5jOjU2MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDAyIGJ1aWx0aW4vbm90ZXMuYzo1NjUKK21zZ2lkICJyZXVzZSBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwNSBidWlsdGluL25vdGVzLmM6NTY4Cittc2dpZCAiYWxsb3cgc3RvcmluZyBlbXB0eSBub3RlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDYgYnVpbHRpbi9ub3Rlcy5jOjQ3NworbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ2IGJ1aWx0aW4vbm90ZXMuYzo1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NTcgYnVpbHRpbi9ub3Rlcy5jOjYxOCBidWlsdGluL25vdGVzLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NzgKK21zZ2lkICJyZWFkIG9iamVjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDgwCittc2dpZCAibG9hZCByZXdyaXRpbmcgY29uZmlnIGZvciA8Y29tbWFuZD4gKGltcGxpZXMgLS1zdGRpbikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OAorbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NzY0Cittc2dpZCAiR2VuZXJhbCBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjYKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKK21zZ2lkICIiCisicmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuIHN0cmF0ZWd5IChtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vIgorImNhdF9zb3J0X3VuaXEpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzAKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzIKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzQKK21zZ2lkICJBYm9ydGluZyBub3RlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5MgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3NgorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTc3Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwMTIgYnVpbHRpbi9yZW1vdGUuYzoxNTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOAorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3B0aW9ucz4uLi5dIFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wdGlvbnM+Li4uXSA8YmFzZS1uYW1lPiBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE3NSBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICJkZWZsYXRlIGVycm9yICglZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3NzEKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDExCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTcxCittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDIKK21zZ2lkICJkbyBub3Qgc2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDQKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYwNgorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIgZHVyaW5nIG9iamVjdCB3cml0aW5nIHBoYXNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYwOQorbXNnaWQgInNpbWlsYXIgdG8gLS1hbGwtcHJvZ3Jlc3Mgd2hlbiBwcm9ncmVzcyBtZXRlciBpcyBzaG93biIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTAKK21zZ2lkICJ2ZXJzaW9uWyxvZmZzZXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxMQorbXNnaWQgIndyaXRlIHRoZSBwYWNrIGluZGV4IGZpbGUgaW4gdGhlIHNwZWNpZmllZCBpZHggZm9ybWF0IHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE0Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTYKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE4Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyMAorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjIyCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjQKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjYKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjI4Cittc2dpZCAicmV1c2UgZXhpc3Rpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzAKK21zZ2lkICJ1c2UgT0ZTX0RFTFRBIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjMyCittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzQKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzNgorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjM4Cittc2dpZCAibGltaXQgdGhlIG9iamVjdHMgdG8gdGhvc2UgdGhhdCBhcmUgbm90IHlldCBwYWNrZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQxCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQ0Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0NworbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCB0byBieSB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjUwCittc2dpZCAib3V0cHV0IHBhY2sgdG8gc3Rkb3V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1MgorbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTQKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU1IHBhcnNlLW9wdGlvbnMuaDoxNDIKK21zZ2lkICJ0aW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1NgorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2MQorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2MworbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY1Cittc2dpZCAicGFjayBjb21wcmVzc2lvbiBsZXZlbCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjcKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjkKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjcxCittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggdG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI3NjIKK21zZ2lkICJDb3VudGluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6NgorbXNnaWQgImdpdCBwYWNrLXJlZnMgWzxvcHRpb25zPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNAorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE1Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDAKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BydW5lLmM6MTEKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwNSBidWlsdGluL3dvcmt0cmVlLmM6MTIxCittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMDYgYnVpbHRpbi93b3JrdHJlZS5jOjEyMgorbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BydW5lLmM6MTA5IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo2OQorbXNnaWQgImdpdCBwdWxsIFtvcHRpb25zXSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoxMTMKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gbWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoxMTYKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQwIGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NgorbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzoxNjAKK21zZ2lkICJPcHRpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjM1MgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzozNTgKK21zZ2lkICJBZGRpdGlvbmFsbHksIHlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6MzYwCittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM2Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzgKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzkKK21zZ2lkICIiCisiR2VuZXJhbGx5IHRoaXMgbWVhbnMgdGhhdCB5b3UgcHJvdmlkZWQgYSB3aWxkY2FyZCByZWZzcGVjIHdoaWNoIGhhZCBub1xuIgorIm1hdGNoZXMgb24gdGhlIHJlbW90ZSBlbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ5IGJ1aWx0aW4vcHVsbC5jOjQ2NAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUxIGJ1aWx0aW4vcHVsbC5jOjQ2NgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9wdWxsLmM6NDY3Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0NjIKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRvIG1lcmdlIHdpdGggdGhlIHJlZiAnJXMnXG4iCisiZnJvbSB0aGUgcmVtb3RlLCBidXQgbm8gc3VjaCByZWYgd2FzIGZldGNoZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjgzMAorbXNnaWQgIlVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1bGwuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg3OQorbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg4MworbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTUKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo4NgorbXNnaWQgInRhZyBzaG9ydGhhbmQgd2l0aG91dCA8dGFnPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo5NgorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE0MAorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA2Cittc2dpZCAiIgorInB1c2guZGVmYXVsdCBpcyB1bnNldDsgaXRzIGltcGxpY2l0IHZhbHVlIGhhcyBjaGFuZ2VkIGluXG4iCisiR2l0IDIuMCBmcm9tICdtYXRjaGluZycgdG8gJ3NpbXBsZScuIFRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlXG4iCisiYW5kIG1haW50YWluIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvciwgdXNlOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgYWRvcHQgdGhlIG5ldyBiZWhhdmlvciBub3csIHVzZTpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IHNpbXBsZVxuIgorIlxuIgorIldoZW4gcHVzaC5kZWZhdWx0IGlzIHNldCB0byAnbWF0Y2hpbmcnLCBnaXQgd2lsbCBwdXNoIGxvY2FsIGJyYW5jaGVzXG4iCisidG8gdGhlIHJlbW90ZSBicmFuY2hlcyB0aGF0IGFscmVhZHkgZXhpc3Qgd2l0aCB0aGUgc2FtZSBuYW1lLlxuIgorIlxuIgorIlNpbmNlIEdpdCAyLjAsIEdpdCBkZWZhdWx0cyB0byB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgJ3NpbXBsZSdcbiIKKyJiZWhhdmlvciwgd2hpY2ggb25seSBwdXNoZXMgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBjb3JyZXNwb25kaW5nXG4iCisicmVtb3RlIGJyYW5jaCB0aGF0ICdnaXQgcHVsbCcgdXNlcyB0byB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLlxuIgorIlxuIgorIlNlZSAnZ2l0IGhlbHAgY29uZmlnJyBhbmQgc2VhcmNoIGZvciAncHVzaC5kZWZhdWx0JyBmb3IgZnVydGhlciAiCisiaW5mb3JtYXRpb24uXG4iCisiKHRoZSAnc2ltcGxlJyBtb2RlIHdhcyBpbnRyb2R1Y2VkIGluIEdpdCAxLjcuMTEuIFVzZSB0aGUgc2ltaWxhciBtb2RlXG4iCisiJ2N1cnJlbnQnIGluc3RlYWQgb2YgJ3NpbXBsZScgaWYgeW91IHNvbWV0aW1lcyB1c2Ugb2xkZXIgdmVyc2lvbnMgb2YgR2l0KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyNzMKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyODAKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg2Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5MgorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGNvbnRhaW5zIHdvcmsgdGhhdCB5b3UgZG9cbiIKKyJub3QgaGF2ZSBsb2NhbGx5LiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFub3RoZXIgcmVwb3NpdG9yeSBwdXNoaW5nXG4iCisidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozMDIKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzozOTYKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSAiCisicmVwb3NpdG9yeSB1c2luZ1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtZT4gPHVybD5cbiIKKyJcbiIKKyJhbmQgdGhlbiBwdXNoIHVzaW5nIHRoZSByZW1vdGUgbmFtZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8bmFtZT5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo0MTEKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDEyCittc2dpZCAiLS1hbGwgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo0MTcKK21zZ2lkICItLW1pcnJvciBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDE4Cittc2dpZCAiLS1taXJyb3IgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCByZWZzcGVjcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo0MjMKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1MzkKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MCBidWlsdGluL3NlbmQtcGFjay5jOjE2MQorbXNnaWQgInB1c2ggYWxsIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQxIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYzCittc2dpZCAibWlycm9yIGFsbCByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MworbXNnaWQgImRlbGV0ZSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NAorbXNnaWQgInB1c2ggdGFncyAoY2FuJ3QgYmUgdXNlZCB3aXRoIC0tYWxsIG9yIC0tbWlycm9yKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0OSBidWlsdGluL3NlbmQtcGFjay5jOjE3NQorbXNnaWQgInJlZm5hbWU+OjxleHBlY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc2Cittc2dpZCAicmVxdWlyZSBvbGQgdmFsdWUgb2YgcmVmIHRvIGJlIGF0IHRoaXMgdmFsdWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUzCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NSBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2IGJ1aWx0aW4vcHVzaC5jOjU1NyBidWlsdGluL3NlbmQtcGFjay5jOjE1OAorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNTkKK21zZ2lkICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NTgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NjEKK21zZ2lkICJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NjMKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzo1NjQKK21zZ2lkICJwdXNoIG1pc3NpbmcgYnV0IHJlbGV2YW50IHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY3IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAiR1BHIHNpZ24gdGhlIHB1c2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcwCittc2dpZCAicmVxdWVzdCBhdG9taWMgdHJhbnNhY3Rpb24gb24gcmVtb3RlIHNpZGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTc5Cittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTgxCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzozNworbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTEwCittc2dpZCAid3JpdGUgcmVzdWx0aW5nIGluZGV4IHRvIDxmaWxlPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExMworbXNnaWQgIm9ubHkgZW1wdHkgdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE1Cittc2dpZCAiTWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExNworbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTkKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjEKK21zZ2lkICIzLXdheSBtZXJnZSBpbiBwcmVzZW5jZSBvZiBhZGRzIGFuZCByZW1vdmVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIzCittc2dpZCAic2FtZSBhcyAtbSwgYnV0IGRpc2NhcmQgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNQorbXNnaWQgInJlYWQgdGhlIHRyZWUgaW50byB0aGUgaW5kZXggdW5kZXIgPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGZvciAnJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU0OSBidWlsdGluL3JlZmxvZy5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyCittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0IGJ1aWx0aW4vcmVtb3RlLmM6MzMKK21zZ2lkICJnaXQgcmVtb3RlIHJlbmFtZSA8b2xkPiA8bmV3PiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1IGJ1aWx0aW4vcmVtb3RlLmM6MzgKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNiBidWlsdGluL3JlbW90ZS5jOjQzCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOQorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEgYnVpbHRpbi9yZW1vdGUuYzo2OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIyIGJ1aWx0aW4vcmVtb3RlLmM6NzAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1hZGQgPG5hbWU+IDxuZXd1cmw+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjMgYnVpbHRpbi9yZW1vdGUuYzo3MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOAorbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ4Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OQorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG1pcnJvciBhcmd1bWVudDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTMKK21zZ2lkICJmZXRjaCB0aGUgcmVtb3RlIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MAorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjEKK21zZ2lkICJtYXN0ZXIgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYyCittc2dpZCAicHVzaHxmZXRjaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTc1Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3NworbXNnaWQgInNwZWNpZnlpbmcgYnJhbmNoZXMgdG8gdHJhY2sgbWFrZXMgc2Vuc2Ugb25seSB3aXRoIGZldGNoIG1pcnJvcnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODcgYnVpbHRpbi9yZW1vdGUuYzo2MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5MSBidWlsdGluL3JlbW90ZS5jOjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQzNiBidWlsdGluL3JlbW90ZS5jOjQ0NAorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDgKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU4OCBidWlsdGluL3JlbW90ZS5jOjU5NCBidWlsdGluL3JlbW90ZS5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjYzMCBidWlsdGluL3JlbW90ZS5jOjc2OSBidWlsdGluL3JlbW90ZS5jOjg2OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMgYnVpbHRpbi9yZW1vdGUuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzA3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODA3Cittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjUKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyNworbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI5Cittc2dpZCAiID8/PyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgxCittc2dpZCAiICAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODQKK21zZ2lkICIgICBhbmQgd2l0aCByZW1vdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDMwCittc2dpZCAiY3JlYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzMworbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzcKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MAorbXNnaWQgImZhc3QtZm9yd2FyZGFibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQzCittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOAorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NyBidWlsdGluL3JlbW90ZS5jOjEzMDgKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjYgYnVpbHRpbi9yZW1vdGUuYzoxMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzAgYnVpbHRpbi9yZW1vdGUuYzoxMTcyIGJ1aWx0aW4vcmVtb3RlLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBSZW1vdGUgYnJhbmNoOiVzIgorbXNnaWRfcGx1cmFsICIgIFJlbW90ZSBicmFuY2hlczolcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5MSBidWlsdGluL3JlbW90ZS5jOjEyMTgKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjAwCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDgKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNgorbXNnaWQgInNldCByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQgYWNjb3JkaW5nIHRvIHJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzgKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MworbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU1Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIGhhcyBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMQorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyNAorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNjkKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNSBidWlsdGluL3JlbW90ZS5jOjE1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTUKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MgorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDg0Cittc2dpZCAibWFuaXB1bGF0ZSBwdXNoIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDg2Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODgKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTUKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgb2xkIFVSTCBwYXR0ZXJuOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBVUkwgZm91bmQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU0NQorbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NTkKK21zZ2lkICJiZSB2ZXJib3NlOyBtdXN0IGJlIHBsYWNlZCBiZWZvcmUgYSBzdWJjb21tYW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTcKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTU5Cittc2dpZCAicGFjayBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHBhY2siCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjEKK21zZ2lkICJzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTY0Cittc2dpZCAicmVtb3ZlIHJlZHVuZGFudCBwYWNrcywgYW5kIHJ1biBnaXQtcHJ1bmUtcGFja2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTY2Cittc2dpZCAicGFzcyAtLW5vLXJldXNlLWRlbHRhIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjgKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzAKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzMKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3NQorbXNnaWQgIndyaXRlIGJpdG1hcCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3NgorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc3Cittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3OQorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4MCBidWlsdGluL3JlcGFjay5jOjE4NAorbXNnaWQgImJ5dGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgxCittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODMKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODUKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4NworbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nICclcycgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjE5Cittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSA8b2JqZWN0PiA8cmVwbGFjZW1lbnQ+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIwCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjEKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGNvbW1pdD4gWzxwYXJlbnQ+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMgorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNSBidWlsdGluL3JlcGxhY2UuYzozNjMgYnVpbHRpbi9yZXBsYWNlLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwMgorbXNnaWQgInRoZSBzaWduYXR1cmUgd2lsbCBiZSByZW1vdmVkIGluIHRoZSByZXBsYWNlbWVudCBjb21taXQhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzIKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzMKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNAorbXNnaWQgImVkaXQgZXhpc3Rpbmcgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNQorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM2Cittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzcKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM4Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTIKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NTcKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjYKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNworbXNnaWQgImdpdCByZXNldCBbLXFdIDx0cmVlLWlzaD4gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOAorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHM+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJzb2Z0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgImhhcmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAibWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAia2VlcCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzYKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjc2Cittc2dpZCAiYmUgcXVpZXQsIG9ubHkgcmVwb3J0IGVycm9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjc4Cittc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3OQorbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjgxIGJ1aWx0aW4vcmVzZXQuYzoyODMKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyODUKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4OAorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIyCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzEKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQ3Cittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM2NAorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3NAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjM1NAorbXNnaWQgInJldi1saXN0IGRvZXMgbm90IHN1cHBvcnQgZGlzcGxheSBvZiBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2MQorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2NgorbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2OAorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM3MQorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1MDIKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMgorbXNnaWQgImdpdCByZXZlcnQgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjI4Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjI5Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODAKK21zZ2lkICJlbmQgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODEKK21zZ2lkICJyZXN1bWUgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODIKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODMKK21zZ2lkICJkb24ndCBhdXRvbWF0aWNhbGx5IGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjg0Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4NworbXNnaWQgInBhcmVudCBudW1iZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4OQorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTAKK21zZ2lkICJvcHRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MQorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJhcHBlbmQgY29tbWl0IG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDYKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAicHJvZ3JhbSBlcnJvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JldmVydC5jOjE5NworbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMTIKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjE3Cittc2dpZCAiZ2l0IHJtIFs8b3B0aW9ucz5dIFstLV0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzo2NQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZSAob3Igb25lIG9mIGl0cyBuZXN0ZWQgc3VibW9kdWxlcylcbiIKKyJ1c2VzIGEgLmdpdCBkaXJlY3Rvcnk6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzIChvciBvbmUgb2YgdGhlaXIgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisidXNlIGEgLmdpdCBkaXJlY3Rvcnk6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9ybS5jOjcxCittc2dpZCAiIgorIlxuIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjMwCittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3JtLmM6MjM1Cittc2dpZCAiIgorIlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjIzOQorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3JtLmM6MjQzIGJ1aWx0aW4vcm0uYzoyNTQKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjUxCittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9ybS5jOjI2OQorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjI3MAorbXNnaWQgIm9ubHkgcmVtb3ZlIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzEKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JtLmM6MjcyCittc2dpZCAiYWxsb3cgcmVjdXJzaXZlIHJlbW92YWwiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjI3NAorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzozMTcKK21zZ2lkICJQbGVhc2UsIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzozNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MAorbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTcxCittc2dpZCAidXNlIHN0YXRlbGVzcyBSUEMgcHJvdG9jb2wiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjEzCittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGF1dGhvcjogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzMAorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjMyCittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzNAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzNQorbXNnaWQgIndbLGkxWyxpMl1dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzYKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjkKK21zZ2lkICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz08d2hlbj5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KS4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEzCittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NTkKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjMKK21zZ2lkICJjb2xvciAnKiErLScgY29ycmVzcG9uZGluZyB0byB0aGUgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjUKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcwCittc2dpZCAiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MgorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc0Cittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc2Cittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc4Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODEKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjgzCittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODUKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4OAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njg5Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEwCittc2dpZCAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjExCittc2dpZCAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSA8IDxyZWYtbGlzdD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MAorbXNnaWQgIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MQorbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MgorbXNnaWQgInN0cmljdGVyIHJlZmVyZW5jZSBjaGVja2luZywgcmVxdWlyZXMgZXhhY3QgcmVmIHBhdGgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NSBidWlsdGluL3Nob3ctcmVmLmM6MTc3Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTgxCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODUKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTg3Cittc2dpZCAic2hvdyByZWZzIGZyb20gc3RkaW4gdGhhdCBhcmVuJ3QgaW4gbG9jYWwgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjcKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MQorbXNnaWQgImRlbGV0ZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MgorbXNnaWQgInNob3J0ZW4gcmVmIG91dHB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MgorbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MgorbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjIKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl0gPHRhZ25hbWU+ICIKKyJbPGhlYWQ+XSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIzCittc2dpZCAiZ2l0IHRhZyAtZCA8dGFnbmFtZT4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyNAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjYKK21zZ2lkICJnaXQgdGFnIC12IDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjMwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdmVyaWZ5IHRoZSB0YWcgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBzb3J0IHNwZWNpZmljYXRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBzb3J0IHNwZWNpZmljYXRpb24gJyVzJyBpbiB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI4Cittc2dpZCAidW5hYmxlIHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQ1NQorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo0NjgKK21zZ2lkICJ0YWcgaGVhZGVyIHRvbyBiaWcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA0Cittc2dpZCAibm8gdGFnIG1lc3NhZ2U/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1NTkKK21zZ2lkICJzd2l0Y2ggJ3BvaW50cy1hdCcgcmVxdWlyZXMgYW4gb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTkwCittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1OTIKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU5NAorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTk1Cittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1OTcKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU5OQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjYwMQorbXNnaWQgInRhZyBtZXNzYWdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAzCittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjYwNworbXNnaWQgInVzZSBhbm90aGVyIGtleSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo2MDgKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjA5IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OAorbXNnaWQgImNyZWF0ZSBhIHJlZmxvZyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjYxMQorbXNnaWQgIlRhZyBsaXN0aW5nIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo2MTIKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo2MTQKK21zZ2lkICJzb3J0IHRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo2MTkgYnVpbHRpbi90YWcuYzo2MjUKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo2MzEKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjY1NworbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjY5Cittc2dpZCAiLS1zb3J0IGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Njc2Cittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjY3OAorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjY4MAorbXNnaWQgIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo2ODgKK21zZ2lkICJvbmx5IG9uZSAtRiBvciAtbSBvcHRpb24gaXMgYWxsb3dlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo3MDgKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo3NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo0OTAKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGZpbGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDEgYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBkaXJlY3RvcnkgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGVzdGluZyAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMzYKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE0OQorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTczCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE4NAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjA0Cittc2dpZCAiIE9LIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTY0Cittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTE4Cittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTIxCittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MjQKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyNgorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI4Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkzMAorbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTMzCittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTM3Cittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQxCittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0MgorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NgorbXNnaWQgIigrLy0peCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NworbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTUxCittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU0Cittc2dpZCAiY2xlYXIgYXNzdW1lZC11bmNoYW5nZWQgYml0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU3Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2MAorbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTYzCittc2dpZCAiYWRkIHRvIGluZGV4IG9ubHk7IGRvIG5vdCBhZGQgY29udGVudCB0byBvYmplY3QgZGF0YWJhc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjUKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY3Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY5Cittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIHRvIGJlIHVwZGF0ZWQgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3MworbXNnaWQgImFkZCBlbnRyaWVzIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTc3Cittc2dpZCAicmVwb3B1bGF0ZSBzdGFnZXMgIzIgYW5kICMzIGZvciB0aGUgbGlzdGVkIHBhdGhzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgxCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODUKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg4Cittc2dpZCAicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkwCittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTQKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NgorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk4Cittc2dpZCAiZW5hYmxlL2Rpc2FibGUgdW50cmFja2VkIGNhY2hlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwMAorbXNnaWQgImVuYWJsZSB1bnRyYWNrZWQgY2FjaGUgd2l0aG91dCB0ZXN0aW5nIHRoZSBmaWxlc3lzdGVtIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjkKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NQorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo2Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNAorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTcKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjcyCittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjczIGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjg0Cittc2dpZCAicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo1NAorbXNnaWQgImdpdCB2ZXJpZnktcGFjayBbLXYgfCAtLXZlcmJvc2VdIFstcyB8IC0tc3RhdC1vbmx5XSA8cGFjaz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY0Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjYKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxNworbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gPHRhZz4uLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6ODMKK21zZ2lkICJwcmludCB0YWcgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEzCittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gPGJyYW5jaD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE0Cittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTA5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5IG9mICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgJXMgKGlkZW50aWZpZXIgJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMTYKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBldmVuIGlmIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4gb3RoZXIgd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMxOAorbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyMAorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzIxCittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMjgKK21zZ2lkICItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjEzCittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjcKK21zZ2lkICJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzAKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICIiCisKKyM6IGNyZWRlbnRpYWwtY2FjaGUtLWRhZW1vbi5jOjI1NQorbXNnaWQgInByaW50IGRlYnVnZ2luZyBtZXNzYWdlcyB0byBzdGRlcnIiCittc2dzdHIgIiIKKworIzogZ2l0LmM6MTQKK21zZ2lkICIiCisiJ2dpdCBoZWxwIC1hJyBhbmQgJ2dpdCBoZWxwIC1nJyBsaXN0IGF2YWlsYWJsZSBzdWJjb21tYW5kcyBhbmQgc29tZVxuIgorImNvbmNlcHQgZ3VpZGVzLiBTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgb3IgJ2dpdCBoZWxwIDxjb25jZXB0PidcbiIKKyJ0byByZWFkIGFib3V0IGEgc3BlY2lmaWMgc3ViY29tbWFuZCBvciBjb25jZXB0LiIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjkKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjEwCittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoxMQorbXNnaWQgImV4YW1pbmUgdGhlIGhpc3RvcnkgYW5kIHN0YXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgcmV2aXNpb25zKSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjEyCittc2dpZCAiZ3JvdywgbWFyayBhbmQgdHdlYWsgeW91ciBjb21tb24gaGlzdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjEzCittc2dpZCAiY29sbGFib3JhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCB3b3JrZmxvd3MpIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTcKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoxOAorbXNnaWQgIlVzZSBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGNvbW1pdCB0aGF0IGludHJvZHVjZWQgYSBidWciCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoxOQorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjAKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyMQorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjIyCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyMworbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyNAorbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyNQorbXNnaWQgIlByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybiIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjI2Cittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyNworbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyOAorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjkKK21zZ2lkICJNb3ZlIG9yIHJlbmFtZSBhIGZpbGUsIGEgZGlyZWN0b3J5LCBvciBhIHN5bWxpbmsiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDozMAorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjMxCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzIKK21zZ2lkICJGb3J3YXJkLXBvcnQgbG9jYWwgY29tbWl0cyB0byB0aGUgdXBkYXRlZCB1cHN0cmVhbSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzMKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjM0Cittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDozNQorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzYKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzcKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTQ1Cittc2dpZCAiZXhwaXJ5LWRhdGUiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE2MAorbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAiIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjM2Cittc2dpZCAiYmUgbW9yZSB2ZXJib3NlIgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzgKK21zZ2lkICJiZSBtb3JlIHF1aWV0IgorbXNnc3RyICIiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyNDQKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAiIgorCisjOiByZXJlcmUuaDoyOAorbXNnaWQgInVwZGF0ZSB0aGUgaW5kZXggd2l0aCByZXVzZWQgY29uZmxpY3QgcmVzb2x1dGlvbiBpZiBwb3NzaWJsZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjUwCittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjU2Cittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjEwMworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmcnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMyCittc2dpZCAiQmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTQ1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlY2tpbmcgb3V0ICckc3RhcnRfaGVhZCcgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjE1NQorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNTkKK21zZ2lkICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAkc3RhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTUKK21zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBiaXNlY3Rpbmcgb25seSB3aXRoIGEgJFRFUk1fQkFEIGNvbW1pdC4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjMwNQorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJGJhZF9zeW4gYW5kIG9uZSAkZ29vZF9zeW4gcmV2aXNpb24uXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGFuZCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjMyMAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiLlxuIgorIllvdSB0aGVuIG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJGdvb2Rfc3luIGFuZCBvbmUgJGJhZF9zeW4gcmV2aXNpb24uXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGFuZCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5MSBnaXQtYmlzZWN0LnNoOjUyMQorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5OAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDo0MDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyRicmFuY2gnLlxuIgorIlRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDM1Cittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjQzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1NQorbXNnaWQgIj8/IHdoYXQgYXJlIHlvdSB0YWxraW5nIGFib3V0PyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTAwCittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDo1MDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTEzCittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAkVEVSTV9CQUQvJFRFUk1fR09PRCBiaXNlY3QuIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTcKK21zZ2lkICIiCisiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiIGluc3RlYWQuXG4iCisiVG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcmViYXNpbmcsIHJ1biBcImdpdCByZWJhc2UgLS1hYm9ydCIKKyJcIi4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDoxNjUKK21zZ2lkICJBcHBsaWVkIGF1dG9zdGFzaC4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDoxNjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAkc3Rhc2hfc2hhMSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjE2OQorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjA4Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDoyMTMKK21zZ2lkICJJdCBsb29rcyBsaWtlIGdpdC1hbSBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDozNTEKK21zZ2lkICJUaGUgLS1leGVjIG9wdGlvbiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDozNTYKK21zZ2lkICJObyByZWJhc2UgaW4gcHJvZ3Jlc3M/IgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzY3Cittc2dpZCAiVGhlIC0tZWRpdC10b2RvIGFjdGlvbiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnRlcmFjdGl2ZSByZWJhc2UuIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6Mzc0Cittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjM3NworbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjM5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgJHN0YXRlX2Rpcl9iYXNlIGRpcmVjdG9yeSwgYW5kXG4iCisiSSB3b25kZXIgaWYgeW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFub3RoZXIgcmViYXNlLiAgSWYgdGhhdCBpcyB0aGVcbiIKKyJjYXNlLCBwbGVhc2UgdHJ5XG4iCisiXHQkY21kX2xpdmVfcmViYXNlXG4iCisiSWYgdGhhdCBpcyBub3QgdGhlIGNhc2UsIHBsZWFzZVxuIgorIlx0JGNtZF9jbGVhcl9zdGFsZV9yZWJhc2VcbiIKKyJhbmQgcnVuIG1lIGFnYWluLiAgSSBhbSBzdG9wcGluZyBpbiBjYXNlIHlvdSBzdGlsbCBoYXZlIHNvbWV0aGluZ1xuIgorInZhbHVhYmxlIHRoZXJlLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjQ2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAkdXBzdHJlYW1fbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjQ4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDo0OTIgZ2l0LXJlYmFzZS5zaDo0OTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGlzIG5vIG1lcmdlIGJhc2UiCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDo1MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0OiAkb250b19uYW1lIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2g6ICRicmFuY2hfbmFtZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjU1NworbXNnaWQgIkNhbm5vdCBhdXRvc3Rhc2giCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDo1NjIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAkc3Rhc2hfYWJicmV2IgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTY2Cittc2dpZCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtcmViYXNlLnNoOjU4NgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgIiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNoYW5nZXMgZnJvbSAkbWIgdG8gJG9udG86IgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjEwCittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjIwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjUxCittc2dpZCAiZ2l0IHN0YXNoIGNsZWFyIHdpdGggcGFyYW1ldGVycyBpcyB1bmltcGxlbWVudGVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo3NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo4OQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxMjQgZ2l0LXN0YXNoLnNoOjEzNworbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDEKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDQKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MTU3Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjE4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAkcmVmX3N0YXNoIHdpdGggJHdfY29tbWl0IgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAkb3B0aW9uIGlzIGFuIGludmFsaWQgb3B0aW9uLCBsaWtlCisjLiBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMuIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKyMuIHVwIHRoZSBzZWNvbmQgbGluZSB3aXRoIGhvd2V2ZXIgbWFueSBjaGFyYWN0ZXJzIHRoZQorIy4gdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKyMuIEVuZ2xpc2ggdGhpcyBpczoKKyMuCisjLiAkIGdpdCBzdGFzaCBzYXZlIC0tYmxhaC1ibGFoIDI+JjEgfCBoZWFkIC1uIDIKKyMuIGVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAtLWJsYWgtYmxhaAorIy4gVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnLS1ibGFoLWJsYWgnCisjOiBnaXQtc3Rhc2guc2g6MjM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyIgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjI2MAorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MjY0Cittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjI2OAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6Mjg2Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDozODcKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDozOTcKK21zZ2lkICJObyBzdGFzaCBmb3VuZC4iCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0NTcKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDYxCittc2dpZCAiQ2Fubm90IGFwcGx5IGEgc3Rhc2ggaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0NjkKK21zZ2lkICJDb25mbGljdHMgaW4gaW5kZXguIFRyeSB3aXRob3V0IC0taW5kZXguIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0NzEKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo1MDUKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NTIwCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo1NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjU0NAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NTUyCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo2MjQKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJHJlbW90ZXVybCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIk5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNsb25lIG9mICckdXJsJyBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJHaXRkaXIgJyRhJyBpcyBwYXJ0IG9mIHRoZSBzdWJtb2R1bGUgcGF0aCAnJGInIG9yIHZpY2UgdmVyc2EiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MDYKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQxNgorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQzMworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDU1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBZGRpbmcgZXhpc3RpbmcgcmVwbyBhdCAnJHNtX3BhdGgnIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ1NworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIHJldXNlIHRoaXMgbG9jYWwgZ2l0IGRpcmVjdG9yeSBpbnN0ZWFkIG9mIGNsb25pbmcgYWdhaW4gZnJvbSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0IHJlcG8iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJvciB5b3UgYXJlIHVuc3VyZSB3aGF0IHRoaXMgbWVhbnMgY2hvb3NlIGFub3RoZXIgbmFtZSB3aXRoIHRoZSAnLS1uYW1lJyAiCisib3B0aW9uLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ4NAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDk4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICckcHJlZml4JGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU2MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBpbmcgYXQgJyRwcmVmaXgkZGlzcGxheXBhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSByZWdpc3RlcmVkIGZvciBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVc2UgJy4nIGlmIHlvdSByZWFsbHkgd2FudCB0byBkZWluaXRpYWxpemUgYWxsIHN1Ym1vZHVsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5OAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgbG9jYWwgbW9kaWZpY2F0aW9uczsgdXNlICctZicgdG8gIgorImRpc2NhcmQgdGhlbSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgc3VibW9kdWxlIHdvcmsgdHJlZSAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgdW5yZWdpc3RlcmVkIGZvciBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODc2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogY2hlY2tlZCBvdXQgJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gb2YgJyRjb21tYW5kICRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJyRwcmVmaXgkc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckcHJlZml4JHNtX3BhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA0NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMDk4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTE4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTIxCisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTQ5Cittc2dpZCAiYmxvYiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEyNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEzMzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKZGlmZiAtLWdpdCBhL3BvL2lzLnBvIGIvcG8vaXMucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5MmE4YgotLS0gL2Rldi9udWxsCisrKyBiL3BvL2lzLnBvCkBAIC0wLDAgKzEsOTMgQEAKKyMgSWNlbGFuZGljIHRyYW5zbGF0aW9ucyBmb3IgR2l0LgorIyBDb3B5cmlnaHQgKEMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24gPGF2YXJhYkBnbWFpbC5jb20+LCAyMDEwLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogR2l0XG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTAtMDktMjAgMTQ6NDQrMDAwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTAtMDYtMDUgMTk6MDYgKzAwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uIDxhdmFyYWJAZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiTGFuZ3VhZ2U6IGlzXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LmM6NQorbXNnaWQgIlNlZSAnZ2l0IGhlbHAgQ09NTUFORCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLiIKK21zZ3N0ciAiU2rDoSAnZ2l0IGhlbHAgU0tJUFVOJyB0aWwgYcOwIHNqw6EgaGrDoWxwIGZ5cmlyIHRpbHRla25hIHNraXB1bi4iCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LmM6MTAKK21zZ2lkICJURVNUOiBBIEMgdGVzdCBzdHJpbmciCittc2dzdHIgIlRJTFJBVU46IEMgdGlscmF1bmFzdHJlbmd1ciIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QuYzoxMworIywgYy1mb3JtYXQKK21zZ2lkICJURVNUOiBBIEMgdGVzdCBzdHJpbmcgJXMiCittc2dzdHIgIlRJTFJBVU46IEMgdGlscmF1bmFzdHJlbmd1ciAlcyIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QuYzoxNgorIywgYy1mb3JtYXQKK21zZ2lkICJURVNUOiBIZWxsbyBXb3JsZCEiCittc2dzdHIgIlRJTFJBVU46IEhhbGzDsyBIZWltdXIhIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5jOjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIlRFU1Q6IE9sZCBFbmdsaXNoIFJ1bmVzIgorbXNnc3RyICJUSUxSQVVOOiDhmrvhm5Yg4Zqz4Zq54Zqr4ZqmIOGapuGaq+GbjyDhmrvhm5Yg4ZuS4Zqi4Zue4ZuWIOGaqeGaviDhmqbhmqvhm5cg4Zua4Zqq4Zq+4Zue4ZuWIOGavuGaqeGaseGapuGaueGbluGaquGaseGbnuGaouGblyDhmrnhm4HhmqYg4Zqm4ZqqIOGaueGbluGbpeGaqyIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuCisjOiB0L3QwMjAwL3Rlc3QuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICJURVNUOiDigJhzaW5nbGXigJkgYW5kIOKAnGRvdWJsZeKAnSBxdW90ZXMiCittc2dzdHIgIlRJTFJBVU46IOKAmmVpbmZhbGRhcuKAmCBvZyDigJ50dsO2ZmFsZGFy4oCcIGfDpnNhbGFwcGlyIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5zaDo4Cittc2dpZCAiVEVTVDogQSBTaGVsbCB0ZXN0IHN0cmluZyIKK21zZ3N0ciAiVElMUkFVTjogU2tlbGphcnRpbHJhdW5hc3RyZW5ndXIiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LnNoOjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICJURVNUOiBBIFNoZWxsIHRlc3QgJHZhcmlhYmxlIgorbXNnc3RyICJUSUxSQVVOOiBTa2VsamFydGlscmF1bmFzdHJlbmd1ciBtZcOwIGJyZXl0dW5uaSAkdmFyaWFibGUiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorIzogdC90MDIwMC90ZXN0LnBlcmw6OAorbXNnaWQgIlRFU1Q6IEEgUGVybCB0ZXN0IHN0cmluZyIKK21zZ3N0ciAiVElMUkFVTjogUGVybCB0aWxyYXVuYXN0cmVuZ3VyIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KKyM6IHQvdDAyMDAvdGVzdC5wZXJsOjExCisjLCBwZXJsLWZvcm1hdAorbXNnaWQgIlRFU1Q6IEEgUGVybCB0ZXN0IHZhcmlhYmxlICVzIgorbXNnc3RyICJUSUxSQVVOOiBQZXJsIHRpbHJhdW5hc3RyZW5ndXIgbWXDsCBicmV5dHVubmkgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJyVzJyBpcyBlaXRoZXIgIlJlaW5pdGlhbGl6ZWQKKyMuIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gIiIsIGFuZCB0aGUgbGFzdCAnJXMlcycgaXMgdGhlIHZlcmJhdGltIGRpcmVjdG9yeSBuYW1lLgorIzogYnVpbHRpbi9pbml0LWRiLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzIEdpdCBsaW5kIMOtICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU2Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyIKK21zZ3N0ciAiRW5kdXJnZXLDsGkiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NgorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICJCasOzIHRpbCB0w7NtYSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU3Cittc2dpZCAiIHNoYXJlZCIKK21zZ3N0ciAiIHNhbWVpZ2lubGVnYSIKZGlmZiAtLWdpdCBhL3BvL2l0LnBvIGIvcG8vaXQucG8KaW5kZXggYjVmMDAyZC4uOTA4MDIxOSAxMDA2NDQKLS0tIGEvcG8vaXQucG8KKysrIGIvcG8vaXQucG8KQEAgLTEsMTM4NyArMSw1MzY3IEBACi0jIFRyYW5zbGF0aW9uIG9mIGdpdGsKLSMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggUGF1bCBNYWNrZXJyYXMKLSMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGdpdGsgcGFja2FnZS4KLSMgTWljaGVsZSBCYWxsYWJpbyA8YmFycmFfY3VkYUBrYXRhbWFpbC5jb20+LCAyMDA4LgotIwotIworIyBJdGFsaWFuIHRyYW5zbGF0aW9ucyBmb3IgR2l0LgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgTWFyY28gUGFvbG9uZSA8bWFyY29wYW9sb25lQGdtYWlsLmNvbT4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIEdpdCBwYWNrYWdlLgogbXNnaWQgIiIKIG1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0a1xuIgotIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKLSJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wNS0xNyAxNDozMisxMDAwXG4iCi0iUE8tUmV2aXNpb24tRGF0ZTogMjAxMC0wMS0yOCAxODo0MSswMTAwXG4iCi0iTGFzdC1UcmFuc2xhdG9yOiBNaWNoZWxlIEJhbGxhYmlvIDxiYXJyYV9jdWRhQGthdGFtYWlsLmNvbT5cbiIKKyJQcm9qZWN0LUlkLVZlcnNpb246IEdpdFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPlxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDEyLTA2LTA4IDEwOjIwKzA4MDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDEyLTA2LTE0IDE0OjEzKzAyMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1hcmNvIFBhb2xvbmUgPG1hcmNvcGFvbG9uZUBnbWFpbC5jb20+XG4iCiAiTGFuZ3VhZ2UtVGVhbTogSXRhbGlhblxuIgotIkxhbmd1YWdlOiBcbiIKKyJMYW5ndWFnZTogaXRcbiIKICJNSU1FLVZlcnNpb246IDEuMFxuIgogIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgogIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKIAotIzogZ2l0azoxNDAKLW1zZ2lkICJDb3VsZG4ndCBnZXQgbGlzdCBvZiB1bm1lcmdlZCBmaWxlczoiCi1tc2dzdHIgIkltcG9zc2liaWxlIG90dGVuZXJlIGwnZWxlbmNvIGRlaSBmaWxlIGluIGF0dGVzYSBkaSBmdXNpb25lOiIKKyM6IGFkdmljZS5jOjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImhpbnQ6ICUuKnNcbiIKK21zZ3N0ciAic3VnZ2VyaW1lbnRvOiAlLipzXG4iCiAKLSM6IGdpdGs6MjEyIGdpdGs6MjM4MQotbXNnaWQgIkNvbG9yIHdvcmRzIgotbXNnc3RyICIiCi0KLSM6IGdpdGs6MjE3IGdpdGs6MjM4MSBnaXRrOjgyMjAgZ2l0azo4MjUzCi1tc2dpZCAiTWFya3VwIHdvcmRzIgotbXNnc3RyICIiCi0KLSM6IGdpdGs6MzI0Ci1tc2dpZCAiRXJyb3IgcGFyc2luZyByZXZpc2lvbnM6IgotbXNnc3RyICJFcnJvcmUgbmVsbGEgbGV0dHVyYSBkZWxsZSByZXZpc2lvbmk6IgotCi0jOiBnaXRrOjM4MAotbXNnaWQgIkVycm9yIGV4ZWN1dGluZyAtLWFyZ3NjbWQgY29tbWFuZDoiCi1tc2dzdHIgIkVycm9yZSBuZWxsJ2VzZWN1emlvbmUgZGVsIGNvbWFuZG8gc3BlY2lmaWNhdG8gY29uIC0tYXJnc2NtZDoiCi0KLSM6IGdpdGs6MzkzCi1tc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgotbXNnc3RyICIiCi0iTmVzc3VuIGZpbGUgc2VsZXppb25hdG86IMOoIHN0YXRhIHNwZWNpZmljYXRhIGwnb3B6aW9uZSAtLW1lcmdlIG1hIG5vbiBjaSAiCi0ic29ubyBmaWxlIGluIGF0dGVzYSBkaSBmdXNpb25lLiIKLQotIzogZ2l0azozOTYKKyMuCisjLiAqIE1lc3NhZ2UgdXNlZCBib3RoIHdoZW4gJ2dpdCBjb21taXQnIGZhaWxzIGFuZCB3aGVuCisjLiAqIG90aGVyIGNvbW1hbmRzIGRvaW5nIGEgbWVyZ2UgZG8uCisjLgorIzogYWR2aWNlLmM6NzAKIG1zZ2lkICIiCi0iTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgotImxpbWl0LiIKLW1zZ3N0ciAiIgotIk5lc3N1biBmaWxlIHNlbGV6aW9uYXRvOiDDqCBzdGF0YSBzcGVjaWZpY2F0YSBsJ29wemlvbmUgLS1tZXJnZSBtYSBpIGZpbGUgIgotInNwZWNpZmljYXRpIG5vbiBzb25vIGluIGF0dGVzYSBkaSBmdXNpb25lLiIKLQotIzogZ2l0azo0MTggZ2l0azo1NjYKLW1zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCi1tc2dzdHIgIkVycm9yZSBuZWxsJ2VzZWN1emlvbmUgZGkgZ2l0IGxvZzoiCi0KLSM6IGdpdGs6NDM2IGdpdGs6NTgyCi1tc2dpZCAiUmVhZGluZyIKLW1zZ3N0ciAiTGV0dHVyYSBpbiBjb3JzbyIKLQotIzogZ2l0azo0OTYgZ2l0azo0NTI1Ci1tc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgotbXNnc3RyICJMZXR0dXJhIGRlbGxlIHJldmlzaW9uaSBpbiBjb3Jzby4uLiIKLQotIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAotbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCi1tc2dzdHIgIk5lc3N1bmEgcmV2aXNpb25lIHNlbGV6aW9uYXRhIgotCi0jOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKLW1zZ2lkICJDb21tYW5kIGxpbmUiCi1tc2dzdHIgIkxpbmVhIGRpIGNvbWFuZG8iCi0KLSM6IGdpdGs6MTUxMQotbXNnaWQgIkNhbid0IHBhcnNlIGdpdCBsb2cgb3V0cHV0OiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgZWxhYm9yYXJlIGkgZGF0aSBkaSBnaXQgbG9nOiIKLQotIzogZ2l0azoxNzQwCi1tc2dpZCAiTm8gY29tbWl0IGluZm9ybWF0aW9uIGF2YWlsYWJsZSIKLW1zZ3N0ciAiTmVzc3VuYSBpbmZvcm1hemlvbmUgZGlzcG9uaWJpbGUgc3VsbGUgcmV2aXNpb25pIgotCi0jOiBnaXRrOjE5MDMgZ2l0azoxOTMyIGdpdGs6NDMxNSBnaXRrOjk2NjkgZ2l0azoxMTI0MSBnaXRrOjExNTIxCi1tc2dpZCAiT0siCi1tc2dzdHIgIk9LIgotCi0jOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKLSM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAiQW5udWxsYSIKLQotIzogZ2l0azoyMDY5Ci1tc2dpZCAiJlVwZGF0ZSIKLW1zZ3N0ciAiQWdnaW9ybmEiCi0KLSM6IGdpdGs6MjA3MAotbXNnaWQgIiZSZWxvYWQiCi1tc2dzdHIgIlJpY2FyaWNhIgotCi0jOiBnaXRrOjIwNzEKLW1zZ2lkICJSZXJlYWQgcmUmZmVyZW5jZXMiCi1tc2dzdHIgIlJpbGVnZ2kgcmlmZXJpbWVudGkiCi0KLSM6IGdpdGs6MjA3MgotbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCi1tc2dzdHIgIkVsZW5jYSByaWZlcmltZW50aSIKLQotIzogZ2l0azoyMDc0Ci1tc2dpZCAiU3RhcnQgZ2l0ICZndWkiCi1tc2dzdHIgIkF2dmlhIGdpdCBndWkiCi0KLSM6IGdpdGs6MjA3NgotbXNnaWQgIiZRdWl0IgotbXNnc3RyICJFc2NpIgotCi0jOiBnaXRrOjIwNjgKLW1zZ2lkICImRmlsZSIKLW1zZ3N0ciAiJkZpbGUiCi0KLSM6IGdpdGs6MjA4MAotbXNnaWQgIiZQcmVmZXJlbmNlcyIKLW1zZ3N0ciAiUHJlZmVyZW56ZSIKLQotIzogZ2l0azoyMDc5Ci1tc2dpZCAiJkVkaXQiCi1tc2dzdHIgIk1vZGlmaWNhIgotCi0jOiBnaXRrOjIwODQKLW1zZ2lkICImTmV3IHZpZXcuLi4iCi1tc2dzdHIgIk51b3ZhIHZpc3RhLi4uIgotCi0jOiBnaXRrOjIwODUKLW1zZ2lkICImRWRpdCB2aWV3Li4uIgotbXNnc3RyICJNb2RpZmljYSB2aXN0YS4uLiIKLQotIzogZ2l0azoyMDg2Ci1tc2dpZCAiJkRlbGV0ZSB2aWV3IgotbXNnc3RyICJFbGltaW5hIHZpc3RhIgotCi0jOiBnaXRrOjIwODggZ2l0azo0MDQzCi1tc2dpZCAiJkFsbCBmaWxlcyIKLW1zZ3N0ciAiVHV0dGkgaSBmaWxlIgotCi0jOiBnaXRrOjIwODMgZ2l0azo0MDY3Ci1tc2dpZCAiJlZpZXciCi1tc2dzdHIgIlZpc3RhIgotCi0jOiBnaXRrOjIwOTMgZ2l0azoyMTAzIGdpdGs6MzAxMgotbXNnaWQgIiZBYm91dCBnaXRrIgotbXNnc3RyICJJbmZvcm1hemlvbmkgc3UgZ2l0ayIKLQotIzogZ2l0azoyMDk0IGdpdGs6MjEwOAotbXNnaWQgIiZLZXkgYmluZGluZ3MiCi1tc2dzdHIgIlNjb3JjaWF0b2llIGRhIHRhc3RpZXJhIgotCi0jOiBnaXRrOjIwOTIgZ2l0azoyMTA3Ci1tc2dpZCAiJkhlbHAiCi1tc2dzdHIgIkFpdXRvIgotCi0jOiBnaXRrOjIxODUgZ2l0azo4NjUyCi1tc2dpZCAiU0hBMSBJRDoiCi1tc2dzdHIgIlNIQTEgSUQ6IgotCi0jOiBnaXRrOjIyMjkKLW1zZ2lkICJSb3ciCi1tc2dzdHIgIlJpZ2EiCi0KLSM6IGdpdGs6MjI2NwotbXNnaWQgIkZpbmQiCi1tc2dzdHIgIlRyb3ZhIgotCi0jOiBnaXRrOjIyOTUKLW1zZ2lkICJjb21taXQiCi1tc2dzdHIgInJldmlzaW9uZSIKLQotIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3Ci0jOiBnaXRrOjY5MTIKLW1zZ2lkICJjb250YWluaW5nOiIKLW1zZ3N0ciAiY29udGVuZW50ZToiCi0KLSM6IGdpdGs6MjMwMiBnaXRrOjM1MjYgZ2l0azozNTMxIGdpdGs6NDc2MwotbXNnaWQgInRvdWNoaW5nIHBhdGhzOiIKLW1zZ3N0ciAiY2hlIHJpZ3VhcmRhIGkgcGVyY29yc2k6IgotCi0jOiBnaXRrOjIzMDMgZ2l0azo0Nzc3Ci1tc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCi1tc2dzdHIgImNoZSBhZ2dpdW5nZS9yaW11b3ZlIGxhIHN0cmluZ2E6IgotCi0jOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Ci1tc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsXG4iCisiYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPicgYXNcbiIKKyJhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQsXG4iCisib3IgdXNlICdnaXQgY29tbWl0IC1hJy4iCiBtc2dzdHIgIiIKIAotIzogZ2l0azoyMzEzIGdpdGs6MjMxNSBnaXRrOjQ3NjYKLW1zZ2lkICJFeGFjdCIKLW1zZ3N0ciAiRXNhdHRvIgotCi0jOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMwotbXNnaWQgIklnbkNhc2UiCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgogbXNnc3RyICIiCiAKLSM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQotbXNnaWQgIlJlZ2V4cCIKKyM6IGJ1bmRsZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAiaGVhZGVyIG5vbiByaWNvbm9zY2l1dG86ICVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6ODkgYnVpbHRpbi9jb21taXQuYzo2OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBhcHJpcmUgJyVzJyIKKworIzogYnVuZGxlLmM6MTQwCittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiCiBtc2dzdHIgIiIKIAotIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzQgZ2l0azo0OTA0IGdpdGs6NDkxMSBnaXRrOjY4NDggZ2l0azo2OTE2Ci1tc2dpZCAiQWxsIGZpZWxkcyIKLW1zZ3N0ciAiVHV0dGkgaSBjYW1waSIKLQotIzogZ2l0azoyMzE4IGdpdGs6NDg3MSBnaXRrOjQ5MDQgZ2l0azo2Nzg2Ci1tc2dpZCAiSGVhZGxpbmUiCi1tc2dzdHIgIlRpdG9sbyIKLQotIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo2OTE2IGdpdGs6NzM4OQotbXNnaWQgIkNvbW1lbnRzIgotbXNnc3RyICJDb21tZW50aSIKLQotIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjQ4NzYgZ2l0azo0OTExIGdpdGs6Njc4NiBnaXRrOjczMjQgZ2l0azo4ODMwCi0jOiBnaXRrOjg4NDUKLW1zZ2lkICJBdXRob3IiCi1tc2dzdHIgIkF1dG9yZSIKLQotIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjY3ODYgZ2l0azo3MzI2Ci1tc2dpZCAiQ29tbWl0dGVyIgotbXNnc3RyICJSZXZpc2lvbmUgY3JlYXRhIGRhIgotCi0jOiBnaXRrOjIzNTAKLW1zZ2lkICJTZWFyY2giCi1tc2dzdHIgIkNlcmNhIgotCi0jOiBnaXRrOjIzNTgKLW1zZ2lkICJEaWZmIgorIzogYnVuZGxlLmM6MTY0IHNlcXVlbmNlci5jOjU1MCBzZXF1ZW5jZXIuYzo5ODIgYnVpbHRpbi9sb2cuYzoyODkKKyM6IGJ1aWx0aW4vbG9nLmM6NzIwIGJ1aWx0aW4vbG9nLmM6MTMwOSBidWlsdGluL2xvZy5jOjE1MjggYnVpbHRpbi9tZXJnZS5jOjM0NworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE4MQorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgogbXNnc3RyICIiCiAKLSM6IGdpdGs6MjM2MAotbXNnaWQgIk9sZCB2ZXJzaW9uIgotbXNnc3RyICJWZWNjaGlhIHZlcnNpb25lIgorIzogYnVuZGxlLmM6MTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgY29udGFpbnMgJWQgcmVmIgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIGNvbnRhaW5zICVkIHJlZnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgogCi0jOiBnaXRrOjIzNjIKLW1zZ2lkICJOZXcgdmVyc2lvbiIKLW1zZ3N0ciAiTnVvdmEgdmVyc2lvbmUiCisjOiBidW5kbGUuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZiIKK21zZ2lkX3BsdXJhbCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGVzZSAlZCByZWZzIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKIAotIzogZ2l0azoyMzY0Ci1tc2dpZCAiTGluZXMgb2YgY29udGV4dCIKLW1zZ3N0ciAiTGluZWUgZGkgY29udGVzdG8iCi0KLSM6IGdpdGs6MjM3NAotbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCi1tc2dzdHIgIklnbm9yYSBtb2RpZmljaGUgYWdsaSBzcGF6aSIKLQotIzogZ2l0azoyMzc4IGdpdGs6MjM4MCBnaXRrOjc5NTkgZ2l0azo4MjA2Ci1tc2dpZCAiTGluZSBkaWZmIgorIzogYnVuZGxlLmM6MjkwCittc2dpZCAicmV2LWxpc3QgZGllZCIKIG1zZ3N0ciAiIgogCi0jOiBnaXRrOjI0NDUKLW1zZ2lkICJQYXRjaCIKLW1zZ3N0ciAiTW9kaWZpY2hlIgorIzogYnVuZGxlLmM6Mjk2IGJ1aWx0aW4vbG9nLmM6MTIwNSBidWlsdGluL3Nob3J0bG9nLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ29tZW50byBub24gcmljb25vc2NpdXRvOiAlcyIKIAotIzogZ2l0azoyNDQ3Ci1tc2dpZCAiVHJlZSIKLW1zZ3N0ciAiRGlyZWN0b3J5IgorIzogYnVuZGxlLmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICJpbCByZWYgJyVzJyDDqCBlc2NsdXNvIGRhbGxlIG9wemlvbmkgZGkgcmV2LWxpc3QiCiAKLSM6IGdpdGs6MjYxNyBnaXRrOjI2MzcKLW1zZ2lkICJEaWZmIHRoaXMgLT4gc2VsZWN0ZWQiCi1tc2dzdHIgIkRpZmYgcXVlc3RvIC0+IHNlbGV6aW9uYXRvIgotCi0jOiBnaXRrOjI2MTggZ2l0azoyNjM4Ci1tc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgotbXNnc3RyICJEaWZmIHNlbGV6aW9uYXRvIC0+IHF1ZXN0byIKLQotIzogZ2l0azoyNjE5IGdpdGs6MjYzOQotbXNnaWQgIk1ha2UgcGF0Y2giCi1tc2dzdHIgIkNyZWEgcGF0Y2giCi0KLSM6IGdpdGs6MjYyMCBnaXRrOjkyNTQKLW1zZ2lkICJDcmVhdGUgdGFnIgotbXNnc3RyICJDcmVhIGV0aWNoZXR0YSIKLQotIzogZ2l0azoyNjIxIGdpdGs6OTM3MQotbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgotbXNnc3RyICJTY3JpdmkgcmV2aXNpb25lIGluIHVuIGZpbGUiCi0KLSM6IGdpdGs6MjYyMiBnaXRrOjk0MjgKLW1zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKLW1zZ3N0ciAiQ3JlYSB1biBudW92byByYW1vIgotCi0jOiBnaXRrOjI2MjMKLW1zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKLW1zZ3N0ciAiUG9ydGEgcXVlc3RhIHJldmlzaW9uZSBpbiBjaW1hIGFsIHJhbW8gYXR0dWFsZSIKLQotIzogZ2l0azoyNjI0Ci1tc2dpZCAiUmVzZXQgSEVBRCBicmFuY2ggdG8gaGVyZSIKLW1zZ3N0ciAiQWdnaW9ybmEgaWwgcmFtbyBIRUFEIGEgcXVlc3RhIHJldmlzaW9uZSIKLQotIzogZ2l0azoyNjI1Ci1tc2dpZCAiTWFyayB0aGlzIGNvbW1pdCIKLW1zZ3N0ciAiU2VnbmEgcXVlc3RhIHJldmlzaW9uZSIKLQotIzogZ2l0azoyNjI2Ci1tc2dpZCAiUmV0dXJuIHRvIG1hcmsiCi1tc2dzdHIgIlRvcm5hIGFsbGEgcmV2aXNpb25lIHNlZ25hdGEiCi0KLSM6IGdpdGs6MjYyNwotbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgotbXNnc3RyICJUcm92YSBpbCBkaXNjZW5kZW50ZSBkaSBxdWVzdGEgcmV2aXNpb25lIGUgZGkgcXVlbGxhIHNlZ25hdGEiCi0KLSM6IGdpdGs6MjYyOAotbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgotbXNnc3RyICJDb25mcm9udGEgY29uIGxhIHJldmlzaW9uZSBzZWduYXRhIgotCi0jOiBnaXRrOjI2MjkgZ2l0azoyNjQwCi0jLCBmdXp6eQotbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgotbXNnc3RyICJEaWZmIHF1ZXN0byAtPiBzZWxlemlvbmF0byIKLQotIzogZ2l0azoyNjMwIGdpdGs6MjY0MQotIywgZnV6enkKLW1zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKLW1zZ3N0ciAiRGlmZiBzZWxlemlvbmF0byAtPiBxdWVzdG8iCi0KLSM6IGdpdGs6MjYzMQotIywgZnV6enkKLW1zZ2lkICJSZXZlcnQgdGhpcyBjb21taXQiCi1tc2dzdHIgIlNlZ25hIHF1ZXN0YSByZXZpc2lvbmUiCi0KLSM6IGdpdGs6MjY0NwotbXNnaWQgIkNoZWNrIG91dCB0aGlzIGJyYW5jaCIKLW1zZ3N0ciAiQXR0aXZhIHF1ZXN0byByYW1vIgotCi0jOiBnaXRrOjI2NDgKLW1zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCi1tc2dzdHIgIkVsaW1pbmEgcXVlc3RvIHJhbW8iCi0KLSM6IGdpdGs6MjY0OQotbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCisjOiBidW5kbGUuYzozNzYKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKIG1zZ3N0ciAiIgogCi0jOiBnaXRrOjI2NTYKLW1zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCi1tc2dzdHIgIkV2aWRlbnppYSBhbmNoZSBxdWVzdG8iCi0KLSM6IGdpdGs6MjY1NwotbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCi1tc2dzdHIgIkV2aWRlbnppYSBzb2xvIHF1ZXN0byIKLQotIzogZ2l0azoyNjU4Ci1tc2dpZCAiRXh0ZXJuYWwgZGlmZiIKLW1zZ3N0ciAiVmlzdWFsaXp6YSBkaWZmZXJlbnplIGluIHVuIGFsdHJvIHByb2dyYW1tYSIKLQotIzogZ2l0azoyNjU5Ci1tc2dpZCAiQmxhbWUgcGFyZW50IGNvbW1pdCIKLW1zZ3N0ciAiQW5ub3RhIGxhIHJldmlzaW9uZSBwcmVjZWRlbnRlIgotCi0jOiBnaXRrOjI2NjAKLW1zZ2lkICJDb3B5IHBhdGgiCisjOiBidW5kbGUuYzozOTQKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgogbXNnc3RyICIiCiAKLSM6IGdpdGs6MjY2NwotbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKLW1zZ3N0ciAiTW9zdHJhIGxhIHByb3ZlbmllbnphIGRpIHF1ZXN0YSByaWdhIgorIzogYnVuZGxlLmM6NDEyCittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgIiIKIAotIzogZ2l0azoyNjY4Ci1tc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgotbXNnc3RyICJFc2VndWkgZ2l0IGd1aSBibGFtZSBzdSBxdWVzdGEgcmlnYSIKKyM6IGJ1bmRsZS5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSAnJXMnIgogCi0jOiBnaXRrOjMwMTQKLSMsIGZ1enp5CisjOiBidW5kbGUuYzo0MzcKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGFuYWxpenphcmUgJXMiCisKKyM6IGNvbW1pdC5jOjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIG5vbiDDqCB1biBjb21taXQhIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1lbW9yaWEgZXNhdXJpdGEiCisKKyM6IGNvbm5lY3RlZC5jOjM5Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBlc2VndWlyZSAnZ2l0LXJldi1saXN0JyIKKworIzogY29ubmVjdGVkLmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0OiAlcyIKK21zZ3N0ciAic2NyaXR0dXJhIG5lbGxhIHJldi1saXN0IG5vbiByaXVzY2l0YTogJXMiCisKKyM6IGNvbm5lY3RlZC5jOjU2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluOiAlcyIKK21zZ3N0ciAiIgorCisjOiBkYXRlLmM6OTUKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJpbiBmdXR1cm8iCisKKyM6IGRhdGUuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiJWx1IHNlY29uZG8gZmEiCittc2dzdHJbMV0gIiVsdSBzZWNvbmRpIGZhIgorCisjOiBkYXRlLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBtaW51dGUgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgbWludXRlcyBhZ28iCittc2dzdHJbMF0gIiVsdSB1biBtaW51dG8gZmEiCittc2dzdHJbMV0gIiVsdSBtaW51dGkgZmEiCisKKyM6IGRhdGUuYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IGhvdXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgaG91cnMgYWdvIgorbXNnc3RyWzBdICIlbHUgb3JhIGZhIgorbXNnc3RyWzFdICIlbHUgb3JlIGZhIgorCisjOiBkYXRlLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgZGF5cyBhZ28iCittc2dzdHJbMF0gIiVsdSBnaW9ybm8gZmEiCittc2dzdHJbMV0gIiVsdSBnaW9ybmkgZmEiCisKKyM6IGRhdGUuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHdlZWsgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgd2Vla3MgYWdvIgorbXNnc3RyWzBdICIlbHUgc2V0dGltYW5hIGZhIgorbXNnc3RyWzFdICIlbHUgc2V0dGltYW5lIGZhIgorCisjOiBkYXRlLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlbHUgbWVzZSBmYSIKK21zZ3N0clsxXSAiJWx1IG1lc2kgZmEiCisKKyM6IGRhdGUuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIiCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyIKK21zZ3N0clswXSAiJWx1IGFubm8iCittc2dzdHJbMV0gIiVsdSBhbm5pIgorCisjOiBkYXRlLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzLCAlbHUgbWVzZSBmYSIKK21zZ3N0clsxXSAiJXMsICVsdSBtZXNpIGZhIgorCisjOiBkYXRlLmM6MTU0IGRhdGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMgYWdvIgorbXNnc3RyWzBdICIlbHUgYW5ubyBmYSIKK21zZ3N0clsxXSAiJWx1IGFubmkgZmEiCisKKyM6IGRpZmYuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyUuKnMnXG4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyUuKnMnXG4iCittc2dzdHIgIiAgUGFyYW1ldHJvIGRpcnN0YXQgJyUuKnMnIHNjb25vc2NpdXRvXG4iCisKKyM6IGRpZmYuYzoyMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyJUcm92YXRpIGVycm9yaSBuZWxsYSB2YXJpYWJpbGUgZGkgY29uZmlndXJhemlvbmUgJ2RpZmYuZGlyc3RhdCc6XG4iCisiJXMiCisKKyM6IGRpZmYuYzoxNDAwCittc2dpZCAiIDAgZmlsZXMgY2hhbmdlZFxuIgorbXNnc3RyICIgMCBmaWxlIG1vZGlmaWNhdGlcbiIKKworIzogZGlmZi5jOjE0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVkIGZpbGUgY2hhbmdlZCIKK21zZ2lkX3BsdXJhbCAiICVkIGZpbGVzIGNoYW5nZWQiCittc2dzdHJbMF0gIiAlZCBmaWxlIG1vZGlmaWNhdG8iCittc2dzdHJbMV0gIiAlZCBmaWxlIG1vZGlmaWNhdGkiCisKKyM6IGRpZmYuYzoxNDIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiwgJWQgaW5zZXJ0aW9uKCspIgorbXNnaWRfcGx1cmFsICIsICVkIGluc2VydGlvbnMoKykiCittc2dzdHJbMF0gIiwgJWQgaW5zZXJ6aW9uZSgrKSIKK21zZ3N0clsxXSAiLCAlZCBpbnNlcnppb25pKCspIgorCisjOiBkaWZmLmM6MTQzMgorIywgYy1mb3JtYXQKK21zZ2lkICIsICVkIGRlbGV0aW9uKC0pIgorbXNnaWRfcGx1cmFsICIsICVkIGRlbGV0aW9ucygtKSIKK21zZ3N0clswXSAiLiAlZCByaW1vemlvbmUoLSkiCittc2dzdHJbMV0gIiwgJWQgcmltb3ppb25pKC0pIgorCisjOiBkaWZmLmM6MzQ3OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisiQW5hbGlzaSBkZWwgcGFyYW1ldHJvIGRlbGwnb3B6aW9uZSAtLWRpcnN0YXQvLVggbm9uIHJpdXNjaXRhOlxuIgorIiVzIgorCisjOiBncGctaW50ZXJmYWNlLmM6NTkKK21zZ2lkICJjb3VsZCBub3QgcnVuIGdwZy4iCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgZXNlZ3VpcmUgZ3BnLiIKKworIzogZ3BnLWludGVyZmFjZS5jOjcxCittc2dpZCAiZ3BnIGRpZCBub3QgYWNjZXB0IHRoZSBkYXRhIgorbXNnc3RyICJncGcgbm9uIGhhIGFjY2V0dGF0byBpIGRhdGkiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo4MgorbXNnaWQgImdwZyBmYWlsZWQgdG8gc2lnbiB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnIG5vbiDDqCByaXVzY2l0byBhIGZpcm1hcmUgaSBkYXRpIgorCisjOiBncmVwLmM6MTMyMAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJzogaW1wb3NzaWJpbGUgbGVnZ2VyZSAlcyIKKworIzogZ3JlcC5jOjEzMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgIiclcyc6ICVzIgorCisjOiBncmVwLmM6MTM0OAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkICVzIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICJjb21hbmRpIGdpdCBkaXNwb25pYmlsaSBpbiAnJXMnIgorCisjOiBoZWxwLmM6MjE0Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICJjb21hbmRpIGdpdCBkaXNwb25pYmlsaSBhbHRyb3ZlIG5lbCB0dW8gJFBBVEgiCisKKyM6IGhlbHAuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisiJyVzJyBzZW1icmEgZXNzZXJlIHVuIGNvbWFuZG8gZ2l0LCBtYSBub24gw6ggc3RhdG9cbiIKKyJwb3NzaWJpbGUgZXNlZ3VpcmxvLiBGb3JzZSBnaXQtJXMgw6ggY29ycm90dG8/IgorCisjOiBoZWxwLmM6MzI3Cittc2dpZCAiVWggb2guIFlvdXIgc3lzdGVtIHJlcG9ydHMgbm8gR2l0IGNvbW1hbmRzIGF0IGFsbC4iCittc2dzdHIgIk9oIG9oLiBJbCB0dW8gc2lzdGVtYSBub24gcmlwb3J0YSBhbGN1biBjb21hbmRvIEdpdC4iCisKKyM6IGhlbHAuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC5cbiIKKyJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcyciCittc2dzdHIgIiIKKworIzogaGVscC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbiAlMC4xZiBzZWNvbmRzIGF1dG9tYXRpY2FsbHkuLi4iCittc2dzdHIgImF1dG9tYXRpY2FtZW50ZSB0cmEgJTAuMWYgc2Vjb25kaS4uLiIKKworIzogaGVscC5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6ICclcycgbm9uIMOoIHVuIGNvbWFuZG8gZ2l0LiBWZWRpICdnaXQgLS1oZWxwJy4iCisKKyM6IGhlbHAuYzozNjUKIG1zZ2lkICIiCiAiXG4iCi0iR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCiAiXG4iCi0iQ29weXJpZ2h0IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCiAiXG4iCi0iVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKLW1zZ3N0ciAiIgorIkludGVuZGV2aSBxdWVzdG8/IgorbXNnc3RyWzFdICIiCiAiXG4iCi0iR2l0ayAtIHVuIHZpc3VhbGl6emF0b3JlIGRpIHJldmlzaW9uaSBwZXIgZ2l0XG4iCi0iXG4iCi0iQ29weXJpZ2h0IFxcdTAwYTkgMjAwNS0yMDEwIFBhdWwgTWFja2VycmFzXG4iCi0iXG4iCi0iVXRpbGl6em8gZSByZWRpc3RyaWJ1emlvbmUgcGVybWVzc2kgc290dG8gaSB0ZXJtaW5pIGRlbGxhIEdOVSBHZW5lcmFsIFB1YmxpYyAiCi0iTGljZW5zZSIKKyJJbnRlbmRldmkgdW5vIGRpIHF1ZXN0aT8iCiAKLSM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Ci1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgIkNoaXVkaSIKKyM6IHBhcnNlLW9wdGlvbnMuYzo0OTMKK21zZ2lkICIuLi4iCittc2dzdHIgIi4uLiIKIAotIzogZ2l0azozMDQzCi1tc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCi1tc2dzdHIgIlNjb3JjaWF0b2llIGRhIHRhc3RpZXJhIGRpIEdpdGsiCisjOiBwYXJzZS1vcHRpb25zLmM6NTExCisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAiICAgdXNvOiAlcyIKIAotIzogZ2l0azozMDQ2Ci1tc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgotbXNnc3RyICJTY29yY2lhdG9pZSBkYSB0YXN0aWVyYSBkaSBHaXRrOiIKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbgorIzogcGFyc2Utb3B0aW9ucy5jOjUxNQorIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIm9wcHVyZTogJXMiCiAKLSM6IGdpdGs6MzA0OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1RPlx0XHRRdWl0IgotbXNnc3RyICI8JXMtUT5cdFx0RXNjaSIKKyM6IHBhcnNlLW9wdGlvbnMuYzo1MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICVzIgorbXNnc3RyICIgICAgJXMiCiAKLSM6IGdpdGs6MzA0OQotIywgZnV6enksIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgotbXNnc3RyICI8JXMtRj5cdFx0VHJvdmEiCisjOiByZW1vdGUuYzoxNjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIklsIHR1byBicmFuY2ggw6ggYXZhbnRpIHJpc3BldHRvIGEgJyVzJyBkaSAlZCBjb21taXQuXG4iCittc2dzdHJbMV0gIklsIHR1byBicmFuY2ggw6ggYXZhbnRpIHJpc3BldHRvIGEgJyVzJyBkaSAlZCBjb21taXQuXG4iCiAKLSM6IGdpdGs6MzA1MAotbXNnaWQgIjxIb21lPlx0XHRNb3ZlIHRvIGZpcnN0IGNvbW1pdCIKLW1zZ3N0ciAiPEhvbWU+XHRcdFZhaSBhbGxhIHByaW1hIHJldmlzaW9uZSIKKyM6IHJlbW90ZS5jOjE2MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCiAKLSM6IGdpdGs6MzA1MQotbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCi1tc2dzdHIgIjxFbmQ+XHRcdFZhaSBhbGwndWx0aW1hIHJldmlzaW9uZSIKLQotIzogZ2l0azozMDUyCi0jLCBmdXp6eQotbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKLW1zZ3N0ciAiPFN1PiwgcCwgaVx0VmFpIHBpw7kgaW4gYWx0byBkaSB1bmEgcmV2aXNpb25lIgotCi0jOiBnaXRrOjMwNTMKLSMsIGZ1enp5Ci1tc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKLW1zZ3N0ciAiPEdpw7k+LCBuLCBrXHRWYWkgcGnDuSBpbiBiYXNzbyBkaSB1bmEgcmV2aXNpb25lIgotCi0jOiBnaXRrOjMwNTQKLSMsIGZ1enp5Ci1tc2dpZCAiPExlZnQ+LCB6LCBoXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKLW1zZ3N0ciAiPFNpbmlzdHJhPiwgeiwgalx0VG9ybmEgaW5kaWV0cm8gbmVsbGEgY3Jvbm9sb2dpYSIKLQotIzogZ2l0azozMDU1Ci1tc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCi1tc2dzdHIgIjxEZXN0cmE+LCB4LCBsXHRWYWkgYXZhbnRpIG5lbGxhIGNyb25vbG9naWEiCi0KLSM6IGdpdGs6MzA1NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1uPlx0R28gdG8gbi10aCBwYXJlbnQgb2YgY3VycmVudCBjb21taXQgaW4gaGlzdG9yeSBsaXN0IgotbXNnc3RyICIiCi0KLSM6IGdpdGs6MzA1NwotbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8UGFnaW5hU3U+XHRWYWkgcGnDuSBpbiBhbHRvIGRpIHVuYSBwYWdpbmEgbmVsbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIgotCi0jOiBnaXRrOjMwNTgKLW1zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCi1tc2dzdHIgIiIKLSI8UGFnaW5hR2nDuT5cdFZhaSBwacO5IGluIGJhc3NvIGRpIHVuYSBwYWdpbmEgbmVsbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIgotCi0jOiBnaXRrOjMwNTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCi1tc2dzdHIgIjwlcy1Ib21lPlx0U2NvcnJpIGFsbGEgY2ltYSBkZWxsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkiCi0KLSM6IGdpdGs6MzA2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8JXMtRW5kPlx0U2NvcnJpIGFsbGEgZmluZSBkZWxsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkiCi0KLSM6IGdpdGs6MzA2MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKLW1zZ3N0ciAiPCVzLVN1Plx0U2NvcnJpIGxhIGxpc3RhIGRlbGxlIHJldmlzaW9uaSBpbiBhbHRvIGRpIHVuYSByaWdhIgotCi0jOiBnaXRrOjMwNjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgotbXNnc3RyICI8JXMtR2nDuT5cdFNjb3JyaSBsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkgaW4gYmFzc28gZGkgdW5hIHJpZ2EiCi0KLSM6IGdpdGs6MzA2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCi1tc2dzdHIgIjwlcy1QYWdpbmFTdT5cdFNjb3JyaSBsYSBsaXN0YSBkZWxsZSByZXZpc2lvbmkgaW4gYWx0byBkaSB1bmEgcGFnaW5hIgotCi0jOiBnaXRrOjMwNjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKLW1zZ3N0ciAiPCVzLVBhZ2luYUdpw7k+XHRTY29ycmkgbGEgbGlzdGEgZGVsbGUgcmV2aXNpb25pIGluIGJhc3NvIGRpIHVuYSBwYWdpbmEiCi0KLSM6IGdpdGs6MzA2NQotbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKLW1zZ3N0ciAiPFNoaWZ0LVN1Plx0VHJvdmEgYWxsJ2luZGlldHJvICh2ZXJzbyBsJ2FsdG8sIHJldmlzaW9uaSBzdWNjZXNzaXZlKSIKLQotIzogZ2l0azozMDY2Ci1tc2dpZCAiPFNoaWZ0LURvd24+XHRGaW5kIGZvcndhcmRzIChkb3dud2FyZHMsIGVhcmxpZXIgY29tbWl0cykiCi1tc2dzdHIgIjxTaGlmdC1HacO5Plx0VHJvdmEgaW4gYXZhbnRpICh2ZXJzbyBpbCBiYXNzbywgcmV2aXNpb25pIHByZWNlZGVudGkpIgotCi0jOiBnaXRrOjMwNjcKLW1zZ2lkICI8RGVsZXRlPiwgYlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPERlbGV0ZT4sIGJcdFNjb3JyaSBsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIGluIGFsdG8gZGkgdW5hIHBhZ2luYSIKLQotIzogZ2l0azozMDY4Ci1tc2dpZCAiPEJhY2tzcGFjZT5cdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCi1tc2dzdHIgIjxCYWNrc3BhY2U+XHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBpbiBhbHRvIGRpIHVuYSBwYWdpbmEiCi0KLSM6IGdpdGs6MzA2OQotbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgotbXNnc3RyICI8U3BhemlvPlx0XHRTY29ycmkgbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSBpbiBiYXNzbyBkaSB1bmEgcGFnaW5hIgotCi0jOiBnaXRrOjMwNzAKLW1zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCi1tc2dzdHIgInVcdFx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgaW4gYWx0byBkaSAxOCBsaW5lZSIKLQotIzogZ2l0azozMDcxCi1tc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCi1tc2dzdHIgImRcdFx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgaW4gYmFzc28gZGkgMTggbGluZWUiCi0KLSM6IGdpdGs6MzA3MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgotbXNnc3RyICI8JXMtRj5cdFx0VHJvdmEiCi0KLSM6IGdpdGs6MzA3MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCi1tc2dzdHIgIjwlcy1HPlx0XHRUcm92YSBpbiBhdmFudGkiCi0KLSM6IGdpdGs6MzA3NAotbXNnaWQgIjxSZXR1cm4+XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCi1tc2dzdHIgIjxJbnZpbz5cdFRyb3ZhIGluIGF2YW50aSIKLQotIzogZ2l0azozMDc1Ci0jLCBmdXp6eQotbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgotbXNnc3RyICI8RW5kPlx0XHRWYWkgYWxsJ3VsdGltYSByZXZpc2lvbmUiCi0KLSM6IGdpdGs6MzA3NgotbXNnaWQgIi9cdFx0Rm9jdXMgdGhlIHNlYXJjaCBib3giCi1tc2dzdHIgIi9cdFx0Q3Vyc29yZSBuZWwgYm94IGRpIHJpY2VyY2EiCi0KLSM6IGdpdGs6MzA3NwotbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKLW1zZ3N0ciAiP1x0XHRUcm92YSBhbGwnaW5kaWV0cm8iCi0KLSM6IGdpdGs6MzA3OAotbXNnaWQgImZcdFx0U2Nyb2xsIGRpZmYgdmlldyB0byBuZXh0IGZpbGUiCi1tc2dzdHIgImZcdFx0U2NvcnJpIGxhIHZpc3RhIGRlbGxlIGRpZmZlcmVuemUgYWwgZmlsZSBzdWNjZXNzaXZvIgotCi0jOiBnaXRrOjMwNzkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtUz5cdFx0U2VhcmNoIGZvciBuZXh0IGhpdCBpbiBkaWZmIHZpZXciCi1tc2dzdHIgIjwlcy1TPlx0XHRDZXJjYSBpbiBhdmFudGkgbmVsbGEgdmlzdGEgZGVsbGUgZGlmZmVyZW56ZSIKLQotIzogZ2l0azozMDgwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVI+XHRcdFNlYXJjaCBmb3IgcHJldmlvdXMgaGl0IGluIGRpZmYgdmlldyIKLW1zZ3N0ciAiPCVzLVI+XHRcdENlcmNhIGFsbCdpbmRpZXRybyBuZWxsYSB2aXN0YSBkZWxsZSBkaWZmZXJlbnplIgotCi0jOiBnaXRrOjMwODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtS1ArPlx0QXVtZW50YSBkaW1lbnNpb25lIGNhcmF0dGVyZSIKLQotIzogZ2l0azozMDgyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1wacO5Plx0QXVtZW50YSBkaW1lbnNpb25lIGNhcmF0dGVyZSIKLQotIzogZ2l0azozMDgzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLUtQLT5cdERpbWludWlzY2kgZGltZW5zaW9uZSBjYXJhdHRlcmUiCi0KLSM6IGdpdGs6MzA4NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLW1lbm8+XHREaW1pbnVpc2NpIGRpbWVuc2lvbmUgY2FyYXR0ZXJlIgotCi0jOiBnaXRrOjMwODUKLW1zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKLW1zZ3N0ciAiPEY1Plx0XHRBZ2dpb3JuYSIKLQotIzogZ2l0azozNTUwIGdpdGs6MzU1OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgotbXNnc3RyICJFcnJvcmUgZHVyYW50ZSBsYSBjcmVhemlvbmUgZGVsbGEgZGlyZWN0b3J5IHRlbXBvcmFuZWEgJXM6IgotCi0jOiBnaXRrOjM1NzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKLW1zZ3N0ciAiRXJyb3JlIG5lbGxhIGxldHR1cmEgZGkgXCIlc1wiIGRhICVzOiIKLQotIzogZ2l0azozNjM1Ci1tc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgotbXNnc3RyICJpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjb21hbmRvOiIKLQotIzogZ2l0azozNzg0Ci1tc2dpZCAiTm8gc3VjaCBjb21taXQiCi1tc2dzdHIgIlJldmlzaW9uZSBpbmVzaXN0ZW50ZSIKLQotIzogZ2l0azozNzk4Ci1tc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgotbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiBpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCBjb21hbmRvOiIKLQotIzogZ2l0azozODI5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ291bGRuJ3QgcmVhZCBtZXJnZSBoZWFkOiAlcyIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgbGVnZ2VyZSBtZXJnZSBoZWFkOiAlcyIKLQotIzogZ2l0azozODM3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcmVhZGluZyBpbmRleDogJXMiCi1tc2dzdHIgIkVycm9yZSBuZWxsYSBsZXR0dXJhIGRlbGwnaW5kaWNlOiAlcyIKLQotIzogZ2l0azozODYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ291bGRuJ3Qgc3RhcnQgZ2l0IGJsYW1lOiAlcyIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgZ2l0IGJsYW1lOiAlcyIKLQotIzogZ2l0azozODY1IGdpdGs6Njc1NAotbXNnaWQgIlNlYXJjaGluZyIKLW1zZ3N0ciAiUmljZXJjYSBpbiBjb3JzbyIKLQotIzogZ2l0azozODk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgotbXNnc3RyICJFcnJvcmUgbmVsbCdlc2VjdXppb25lIGRpIGdpdCBibGFtZTogJXMiCi0KLSM6IGdpdGs6MzkyNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCi1tc2dzdHIgIlF1ZWxsYSByaWdhIHByb3ZpZW5lIGRhbGxhIHJldmlzaW9uZSAlcywgbm9uIHByZXNlbnRlIGluIHF1ZXN0YSB2aXN0YSIKLQotIzogZ2l0azozOTM5Ci1tc2dpZCAiRXh0ZXJuYWwgZGlmZiB2aWV3ZXIgZmFpbGVkOiIKLW1zZ3N0ciAiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgaWwgdmlzdWFsaXp6YXRvcmUgZGkgZGlmZmVyZW56ZToiCi0KLSM6IGdpdGs6NDA3MAotbXNnaWQgIkdpdGsgdmlldyBkZWZpbml0aW9uIgotbXNnc3RyICJTY2VsdGEgdmlzdGEgR2l0ayIKLQotIzogZ2l0azo0MDc0Ci1tc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgotbXNnc3RyICJSaWNvcmRhIHF1ZXN0YSB2aXN0YSIKLQotIzogZ2l0azo0MDc1Ci1tc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKLW1zZ3N0ciAiUmlmZXJpbWVudGkgKGxpc3RhIGRpIGVsZW1lbnRpIHNlcGFyYXRpIGRhIHNwYXppKSIKLQotIzogZ2l0azo0MDc2Ci1tc2dpZCAiQnJhbmNoZXMgJiB0YWdzOiIKLW1zZ3N0ciAiUmFtaSBlZCBldGljaGV0dGUiCi0KLSM6IGdpdGs6NDA3NwotbXNnaWQgIkFsbCByZWZzIgotbXNnc3RyICJUdXR0aSBpIHJpZmVyaW1lbnRpIgotCi0jOiBnaXRrOjQwNzgKLW1zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKLW1zZ3N0ciAiVHV0dGkgaSByYW1pIChsb2NhbGkpIgotCi0jOiBnaXRrOjQwNzkKLW1zZ2lkICJBbGwgdGFncyIKLW1zZ3N0ciAiVHV0dGUgbGUgZXRpY2hldHRlIgotCi0jOiBnaXRrOjQwODAKLW1zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgotbXNnc3RyICJUdXR0aSBpIHJhbWkgcmVtb3RpIgotCi0jOiBnaXRrOjQwODEKLW1zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgotbXNnc3RyICJJbmZvcm1hemlvbmkgc3VsbGEgcmV2aXNpb25lIChlc3ByZXNzaW9uaSByZWdvbGFyaSk6IgotCi0jOiBnaXRrOjQwODIKLW1zZ2lkICJBdXRob3I6IgotbXNnc3RyICJBdXRvcmU6IgotCi0jOiBnaXRrOjQwODMKLW1zZ2lkICJDb21taXR0ZXI6IgotbXNnc3RyICJSZXZpc2lvbmUgY3JlYXRhIGRhOiIKLQotIzogZ2l0azo0MDg0Ci1tc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJNZXNzYWdnaW8gZGkgcmV2aXNpb25lOiIKLQotIzogZ2l0azo0MDg1Ci1tc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCi1tc2dzdHIgIlJpc3BvbmRlIGEgdHV0dGkgaSBjcml0ZXJpIGRpIHJpY2VyY2Egc3VsbGUgcmV2aXNpb25pIgotCi0jOiBnaXRrOjQwODYKLSMsIGZ1enp5Ci1tc2dpZCAiTWF0Y2hlcyBubyBDb21taXQgSW5mbyBjcml0ZXJpYSIKLW1zZ3N0ciAiUmlzcG9uZGUgYSB0dXR0aSBpIGNyaXRlcmkgZGkgcmljZXJjYSBzdWxsZSByZXZpc2lvbmkiCi0KLSM6IGdpdGs6NDA4NwotbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgotbXNnc3RyICJNb2RpZmljaGUgYWkgZmlsZToiCi0KLSM6IGdpdGs6NDA4OAotbXNnaWQgIkZpeGVkIFN0cmluZyIKLW1zZ3N0ciAiU3RyaW5nYSBmaXNzYSIKLQotIzogZ2l0azo0MDg5Ci1tc2dpZCAiUmVndWxhciBFeHByZXNzaW9uIgotbXNnc3RyICJFc3ByZXNzaW9uZSByZWdvbGFyZSIKLQotIzogZ2l0azo0MDkwCi1tc2dpZCAiU2VhcmNoIHN0cmluZzoiCi1tc2dzdHIgIkNlcmNhIHN0cmluZ2E6IgotCi0jOiBnaXRrOjQwOTEKKyM6IHJlbW90ZS5jOjE2NDMKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCi0iMTU6Mjc6MzhcIik6IgotbXNnc3RyICIiCi0iRGF0ZSBkaSByZXZpc2lvbmUgKFwiMiB3ZWVrcyBhZ29cIiwgXCIyMDA5LTAzLTE3IDE1OjI3OjM4XCIsIFwiTWFyY2ggMTcsICIKLSIyMDA5IDE1OjI3OjM4XCIpOiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0IGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ2lkX3BsdXJhbCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCiAKLSM6IGdpdGs6NDA5MgotbXNnaWQgIlNpbmNlOiIKLW1zZ3N0ciAiRGE6IgorIzogc2VxdWVuY2VyLmM6MTIxIGJ1aWx0aW4vbWVyZ2UuYzo4NjUgYnVpbHRpbi9tZXJnZS5jOjk3OAorIzogYnVpbHRpbi9tZXJnZS5jOjEwODggYnVpbHRpbi9tZXJnZS5jOjEwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBhcHJpcmUgJyVzJyBwZXIgbGEgc2NyaXR0dXJhIgogCi0jOiBnaXRrOjQwOTMKLW1zZ2lkICJVbnRpbDoiCi1tc2dzdHIgIkE6IgorIzogc2VxdWVuY2VyLmM6MTIzIGJ1aWx0aW4vbWVyZ2UuYzozMzMgYnVpbHRpbi9tZXJnZS5jOjg2OAorIzogYnVpbHRpbi9tZXJnZS5jOjEwOTAgYnVpbHRpbi9tZXJnZS5jOjExMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgc2NyaXZlcmUgc3UgJyVzJyIKIAotIzogZ2l0azo0MDk0Ci1tc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCi1tc2dzdHIgIkxpbWl0YSBlL28gc2FsdGEgTiByZXZpc2lvbmkgKGludGVybyBwb3NpdGl2byk6IgotCi0jOiBnaXRrOjQwOTUKLW1zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCi1tc2dzdHIgIk51bWVybyBkaSByZXZpc2lvbmkgZGEgbW9zdHJhcmU6IgotCi0jOiBnaXRrOjQwOTYKLW1zZ2lkICJOdW1iZXIgdG8gc2tpcDoiCi1tc2dzdHIgIk51bWVybyBkaSByZXZpc2lvbmkgZGEgc2FsdGFyZToiCi0KLSM6IGdpdGs6NDA5NwotbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCi1tc2dzdHIgIkFsdHJlIG9wemlvbmk6IgotCi0jOiBnaXRrOjQwOTgKLW1zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCi1tc2dzdHIgIk9yZGluYSBzb2xvIHBlciBkYXRhIgotCi0jOiBnaXRrOjQwOTkKLW1zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKLW1zZ3N0ciAiU2VnbmEgaSBsYXRpIGRlbCByYW1vIgotCi0jOiBnaXRrOjQxMDAKLW1zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCi1tc2dzdHIgIkxpbWl0YSBhbCBwcmltbyBnZW5pdG9yZSIKLQotIzogZ2l0azo0MTAxCi1tc2dpZCAiU2ltcGxlIGhpc3RvcnkiCi1tc2dzdHIgIkNyb25vbG9naWEgc2VtcGxpZmljYXRhIgotCi0jOiBnaXRrOjQxMDIKLW1zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKLW1zZ3N0ciAiVWx0ZXJpb3JpIGFyZ29tZW50aSBkYSBwYXNzYXJlIGEgZ2l0IGxvZzoiCi0KLSM6IGdpdGs6NDEwMwotbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgotbXNnc3RyICJJbnNlcmlyZSBmaWxlIGUgZGlyZWN0b3J5IGRhIGluY2x1ZGVyZSwgdW5vIHBlciByaWdhOiIKLQotIzogZ2l0azo0MTA0Ci1tc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCi1tc2dzdHIgIkNvbWFuZG8gY2hlIGdlbmVyYSBhbHRyZSByZXZpc2lvbmkgZGEgdmlzdWFsaXp6YXJlOiIKLQotIzogZ2l0azo0MjI4Ci1tc2dpZCAiR2l0azogZWRpdCB2aWV3IgotbXNnc3RyICJHaXRrOiBtb2RpZmljYSB2aXN0YSIKLQotIzogZ2l0azo0MjM2Ci1tc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCi1tc2dzdHIgIi0tIGNyaXRlcmkgcGVyIGxhIHNjZWx0YSBkZWxsZSByZXZpc2lvbmkiCi0KLSM6IGdpdGs6NDI0MQotbXNnaWQgIlZpZXcgTmFtZSIKLW1zZ3N0ciAiTm9tZSB2aXN0YSIKLQotIzogZ2l0azo0MzE2Ci1tc2dpZCAiQXBwbHkgKEY1KSIKLW1zZ3N0ciAiQXBwbGljYSAoRjUpIgotCi0jOiBnaXRrOjQzNTQKLW1zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCi1tc2dzdHIgIkVycm9yZSBuZWdsaSBhcmdvbWVudGkgZGkgc2VsZXppb25lIGRlbGxlIHJldmlzaW9uaToiCi0KLSM6IGdpdGs6NDQwOSBnaXRrOjQ0NjIgZ2l0azo0OTI0IGdpdGs6NDkzOCBnaXRrOjYyMDggZ2l0azoxMjM3MyBnaXRrOjEyMzc0Ci1tc2dpZCAiTm9uZSIKLW1zZ3N0ciAiTmVzc3VubyIKLQotIzogZ2l0azo1MDIxIGdpdGs6NTAyNgotbXNnaWQgIkRlc2NlbmRhbnQiCi1tc2dzdHIgIkRpc2NlbmRlbnRlIgotCi0jOiBnaXRrOjUwMjIKLW1zZ2lkICJOb3QgZGVzY2VuZGFudCIKLW1zZ3N0ciAiTm9uIGRpc2NlbmRlbnRlIgotCi0jOiBnaXRrOjUwMjkgZ2l0azo1MDM0Ci1tc2dpZCAiQW5jZXN0b3IiCi1tc2dzdHIgIkFzY2VuZGVudGUiCi0KLSM6IGdpdGs6NTAzMAotbXNnaWQgIk5vdCBhbmNlc3RvciIKLW1zZ3N0ciAiTm9uIGFzY2VuZGVudGUiCi0KLSM6IGdpdGs6NTMyNAotbXNnaWQgIkxvY2FsIGNoYW5nZXMgY2hlY2tlZCBpbiB0byBpbmRleCBidXQgbm90IGNvbW1pdHRlZCIKLW1zZ3N0ciAiTW9kaWZpY2hlIGxvY2FsaSBwcmVzZW50aSBuZWxsJ2luZGljZSBtYSBub24gbmVsbCdhcmNoaXZpbyIKLQotIzogZ2l0azo1MzYwCi1tc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCi1tc2dzdHIgIk1vZGlmaWNoZSBsb2NhbGkgbm9uIHByZXNlbnRpIG7DqSBuZWxsJ2FyY2hpdmlvIG7DqSBuZWxsJ2luZGljZSIKLQotIzogZ2l0azo3MTM0Ci1tc2dpZCAiYW5kIG1hbnkgbW9yZSIKLW1zZ3N0ciAiIgotCi0jOiBnaXRrOjcxMzcKLW1zZ2lkICJtYW55IgotbXNnc3RyICJtb2x0aSIKLQotIzogZ2l0azo3MzI4Ci1tc2dpZCAiVGFnczoiCi1tc2dzdHIgIkV0aWNoZXR0ZToiCi0KLSM6IGdpdGs6NzM0NSBnaXRrOjczNTEgZ2l0azo4ODI1Ci1tc2dpZCAiUGFyZW50IgotbXNnc3RyICJHZW5pdG9yZSIKLQotIzogZ2l0azo3MzU2Ci1tc2dpZCAiQ2hpbGQiCi1tc2dzdHIgIkZpZ2xpbyIKLQotIzogZ2l0azo3MzY1Ci1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICJSYW1vIgotCi0jOiBnaXRrOjczNjgKLW1zZ2lkICJGb2xsb3dzIgotbXNnc3RyICJTZWd1ZSIKLQotIzogZ2l0azo3MzcxCi1tc2dpZCAiUHJlY2VkZXMiCi1tc2dzdHIgIlByZWNlZGUiCi0KLSM6IGdpdGs6Nzk2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgotbXNnc3RyICJFcnJvcmUgbmVsbGEgbGV0dHVyYSBkZWxsZSBkaWZmZXJlbnplOiIKLQotIzogZ2l0azo4NjUwCi1tc2dpZCAiR290bzoiCi1tc2dzdHIgIlZhaSBhOiIKLQotIzogZ2l0azo4NjcxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCi1tc2dzdHIgIkxhIFNIQTEgaWQgYWJicmV2aWF0YSAlcyDDqCBhbWJpZ3VhIgotCi0jOiBnaXRrOjg2NzgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXZpc2lvbiAlcyBpcyBub3Qga25vd24iCi1tc2dzdHIgIkxhIHJldmlzaW9uZSAlcyDDqCBzY29ub3NjaXV0YSIKLQotIzogZ2l0azo4Njg4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCi1tc2dzdHIgIkxhIFNIQTEgaWQgJXMgw6ggc2Nvbm9zY2l1dGEiCi0KLSM6IGdpdGs6ODY5MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgotbXNnc3RyICJMYSByZXZpc2lvbmUgJXMgbm9uIMOoIHByZXNlbnRlIG5lbGxhIHZpc3RhIGF0dHVhbGUiCi0KLSM6IGdpdGs6ODgzMiBnaXRrOjg4NDcKLW1zZ2lkICJEYXRlIgotbXNnc3RyICJEYXRhIgotCi0jOiBnaXRrOjg4MzUKLW1zZ2lkICJDaGlsZHJlbiIKLW1zZ3N0ciAiRmlnbGkiCi0KLSM6IGdpdGs6ODg5OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgotbXNnc3RyICJBZ2dpb3JuYSBpbCByYW1vICVzIGEgcXVlc3RhIHJldmlzaW9uZSIKLQotIzogZ2l0azo4OTAwCi1tc2dpZCAiRGV0YWNoZWQgaGVhZDogY2FuJ3QgcmVzZXQiCi1tc2dzdHIgIk5lc3N1biByYW1vIGF0dGl2bzogcmVzZXQgaW1wb3NzaWJpbGUiCi0KLSM6IGdpdGs6OTAwNSBnaXRrOjkwMTEKLW1zZ2lkICJTa2lwcGluZyBtZXJnZSBjb21taXQgIgotbXNnc3RyICJTYWx0byBsYSByZXZpc2lvbmUgZGkgZnVzaW9uZSAiCi0KLSM6IGdpdGs6OTAyMCBnaXRrOjkwMjUKLW1zZ2lkICJFcnJvciBnZXR0aW5nIHBhdGNoIElEIGZvciAiCi1tc2dzdHIgIkVycm9yZSBuZWxsYSBpZGVudGlmaWNhemlvbmUgZGVsbGEgcGF0Y2ggcGVyICIKLQotIzogZ2l0azo5MDIxIGdpdGs6OTAyNgotbXNnaWQgIiAtIHN0b3BwaW5nXG4iCi1tc2dzdHIgIiAtIGZpbmVcbiIKLQotIzogZ2l0azo5MDMxIGdpdGs6OTAzNCBnaXRrOjkwNDIgZ2l0azo5MDU2IGdpdGs6OTA2NQotbXNnaWQgIkNvbW1pdCAiCi1tc2dzdHIgIkxhIHJldmlzaW9uZSAiCi0KLSM6IGdpdGs6OTAzNQorIzogc2VxdWVuY2VyLmM6MTQ0CiBtc2dpZCAiIgotIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgotIiAgICAgICAiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKIG1zZ3N0ciAiIgotIiBoYSBsZSBzdGVzc2UgZGlmZmVyZW56ZSBkaVxuIgotIiAgICAgICAiCisiZG9wbyBhdmVyIHJpc29sdG8gaSBjb25mbGl0dGksIHNlZ25hIGkgcGF0aCBjb3JyZXR0aVxuIgorImNvbiAnZ2l0IGFkZCA8cGF0aD4nIG8gJ2dpdCBybSA8cGF0aD4nIgogCi0jOiBnaXRrOjkwNDMKKyM6IHNlcXVlbmNlci5jOjE0NwogbXNnaWQgIiIKLSIgZGlmZmVycyBmcm9tXG4iCi0iICAgICAgICIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgogbXNnc3RyICIiCi0iIMOoIGRpdmVyc2EgZGFcbiIKLSIgICAgICAgIgorImRvcG8gYXZlciByaXNvbHRvIGkgY29uZmxpdHRpLCBzZWduYSBpIHBhdGggY29ycmV0dGlcbiIKKyJjb24gJ2dpdCBhZGQgPHBhdGg+JyBvICdnaXQgcm0gPHBhdGg+JyBlZCBlc2VndWlyZVxuIgorImlsIGNvbW1pdCBkZWwgcmlzdWx0YXRvIGNvbiAnZ2l0IGNvbW1pdCciCiAKLSM6IGdpdGs6OTA0NQorIzogc2VxdWVuY2VyLmM6MTYwIHNlcXVlbmNlci5jOjc1OCBzZXF1ZW5jZXIuYzo4NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICVzIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHNjcml2ZXJlIHN1ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTc4Cittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiTGUgdHVlIG1vZGlmaWNoZSBsb2NhbGkgdmVycmFubm8gc292cmFzY3JpdHRlIGRhIGNoZXJyeS1waWNrIgorCisjOiBzZXF1ZW5jZXIuYzoxODAKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgcmV2ZXJ0LiIKK21zZ3N0ciAiTGUgdHVlIG1vZGlmaWNoZSBsb2NhbGkgdmVycmFubm8gc292cmFzY3JpdHRlIGRhIHJldmVydC4iCisKKyM6IHNlcXVlbmNlci5jOjE4MworbXNnaWQgIkNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2siCisjOiBzZXF1ZW5jZXIuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IGltcG9zc2liaWxlIHNjcml2ZXJlIGlsIG51b3ZvIGluZGV4IGZpbGUiCisKKyM6IHNlcXVlbmNlci5jOjI2MQorbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0XG4iCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmlzb2x2ZXJlIGlsIGNvbW1pdCBIRUFEXG4iCisKKyM6IHNlcXVlbmNlci5jOjI4MgorbXNnaWQgIlVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZVxuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjMyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzXG4iCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYW5hbGl6emFyZSBpbCBjb21taXQgJXNcbiIKKworIzogc2VxdWVuY2VyLmM6MzI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzXG4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzk1Cittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozOTgKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFEIgorbXNnc3RyICJOb24gaGFpIHVuIEhFQUQgdmFsaWRvIgorCisjOiBzZXF1ZW5jZXIuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICJJbCBjb21taXQgJXMgw6ggdW4gbWVyZ2UgbWEgbm9uIMOoIHN0YXRhIHNwZWNpZmljYXRhIGwnb3B6aW9uZSAtbS4iCisKKyM6IHNlcXVlbmNlci5jOjQyMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIk1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyB3aWxsIGJlICJyZXZlcnQiIG9yCisjLiAiY2hlcnJ5LXBpY2siLCB0aGUgc2Vjb25kICVzIGEgU0hBMQorIzogc2VxdWVuY2VyLmM6NDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgIkltcG9zc2liaWxlIG90dGVuZXJlIGlsIG1lc3NhZ2dpbyBkaSBjb21taXQgcGVyICVzIgorCisjOiBzZXF1ZW5jZXIuYzo1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBlc2VndWlyZSBpbCByZXZlcnQgZGkgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYXBwbGljYXJlICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzo1NTMKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAiw6ggc3RhdG8gcGFzc2F0byB1biBzZXQgZGkgY29tbWl0IHZ1b3RvIgorCisjOiBzZXF1ZW5jZXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogbGV0dHVyYSBkaSBpbmRleCBub24gcml1c2NpdGEiCisKKyM6IHNlcXVlbmNlci5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBhZ2dpb3JuYW1lbnRvIGRpIGluZGV4IG5vbiByaXVzY2l0byIKKworIzogc2VxdWVuY2VyLmM6NjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGFuYWxpenphcmUgbGEgcmlnYSAlZC4iCisKKyM6IHNlcXVlbmNlci5jOjY1MQorbXNnaWQgIk5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAiTmVzc3VuIGNvbW1pdCBhbmFsaXp6YXRvLiIKKworIzogc2VxdWVuY2VyLmM6NjY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGFwcmlyZSAlcyIKKworIzogc2VxdWVuY2VyLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBsZWdnZXJlICVzLiIKKworIzogc2VxdWVuY2VyLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICJDaGlhdmUgbm9uIHZhbGlkYTogJXMiCisKKyM6IHNlcXVlbmNlci5jOjcwNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIlZhbG9yZSBub24gdmFsaWRvIHBlciAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjcxOAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzM5Cittc2dpZCAiYSBjaGVycnktcGljayBvciByZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiw6ggZ2nDoCBpbiBjb3JzbyB1bidvcGVyYXppb25lIGRpIGNoZXJyeS1waWNrIG8gZGkgcmV2ZXJ0IgorCisjOiBzZXF1ZW5jZXIuYzo3NDAKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KVwiIgorbXNnc3RyICJwcm92YSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tIGFib3J0KVwiIgorCisjOiBzZXF1ZW5jZXIuYzo3NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc2MCBzZXF1ZW5jZXIuYzo4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc3OSBzZXF1ZW5jZXIuYzo5MTMKK21zZ2lkICJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiCittc2dzdHIgIm5lc3N1bmEgb3BlcmF6aW9uZSBkaSBjaGVycnktcGljayBvIHJldmVydCBpbiBjb3JzbyIKKworIzogc2VxdWVuY2VyLmM6NzgxCittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgcmlzb2x2ZXJlIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjc4MworbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgwNSBidWlsdGluL2FwcGx5LmM6MzY5NworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFwcmlyZSAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjgwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgJXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4MDkKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICJmaW5lIGRlbCBmaWxlIGluYXR0ZXNhIgorCisjOiBzZXF1ZW5jZXIuYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RvcmVkIHByZS1jaGVycnktcGljayBIRUFEIGZpbGUgJyVzJyBpcyBjb3JydXB0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjgzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZm9ybWF0ICVzLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMDAwCittc2dpZCAiQ2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICJJbXBvc3NpYmlsZSBlc2VndWlyZSBpbCByZXZlcnQgY29tZSBjb21taXQgaW5pemlhbGUiCisKKyM6IHNlcXVlbmNlci5jOjEwMDEKK21zZ2lkICJDYW4ndCBjaGVycnktcGljayBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogc2hhMV9uYW1lLmM6ODY0Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCBub24gcHVudGEgYWQgdW4gYnJhbmNoIgorCisjOiBzaGExX25hbWUuYzo4NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgIk5lc3N1biBicmFuY2ggZXNpc3RlbnRlOiAnJXMnIgorCisjOiBzaGExX25hbWUuYzo4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgIk5lc3N1biB1cHN0cmVhbSBjb25maWd1cmF0byBwZXIgaWwgYnJhbmNoICclcyciCisKKyM6IHNoYTFfbmFtZS5jOjg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJVcHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiB3cmFwcGVyLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBsb29rIHVwIGN1cnJlbnQgdXNlciBpbiB0aGUgcGFzc3dkIGZpbGU6ICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSB0cm92YXJlIGwndXRlbnRlIGNvcnJlbnRlIG5lbCBmaWxlIHBhc3N3ZDogJXMiCisKKyM6IHdyYXBwZXIuYzo0MTQKK21zZ2lkICJubyBzdWNoIHVzZXIiCittc2dzdHIgInV0ZW50ZSBub24gZXNpc3RlbnRlIgorCisjOiB3dC1zdGF0dXMuYzoxMzUKK21zZ2lkICJVbm1lcmdlZCBwYXRoczoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQxIHd0LXN0YXR1cy5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTQzIHd0LXN0YXR1cy5jOjE2MAorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDQKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKHVzYSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgY29tZSBhcHByb3ByaWF0byBwZXIgbGEgcmlzb2x1emlvbmUpIgorCisjOiB3dC1zdGF0dXMuYzoxNTIKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTcwCittc2dpZCAiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NAorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NgorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE3NwogbXNnaWQgIiIKLSJEaWZmIG9mIGNvbW1pdHM6XG4iCisiICAodXNlIFwiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc5Cittc2dpZCAiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBmaWxlczoiCittc2dzdHIgIiVzIGZpbGU6IgorCisjOiB3dC1zdGF0dXMuYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjA4Cittc2dpZCAiYnVnIgorbXNnc3RyICJidWciCisKKyM6IHd0LXN0YXR1cy5jOjIxMworbXNnaWQgImJvdGggZGVsZXRlZDoiCittc2dzdHIgImVudHJhbWJpIGVsaW1pbmF0aToiCisKKyM6IHd0LXN0YXR1cy5jOjIxNAorbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAiYWdnaXVudG8gZGEgbm9pOiIKKworIzogd3Qtc3RhdHVzLmM6MjE1Cittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAiZWxpbWluYXRvIGRhIGxvcm86IgorCisjOiB3dC1zdGF0dXMuYzoyMTYKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAiYWdnaXVudG8gZGEgbG9ybzoiCisKKyM6IHd0LXN0YXR1cy5jOjIxNworbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICJlbGltaW5hdG8gZGEgbm9pOiIKKworIzogd3Qtc3RhdHVzLmM6MjE4Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgImVudHJhbWJpIGFnZ2l1bnRpOiIKKworIzogd3Qtc3RhdHVzLmM6MjE5Cittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgImVudHJhbWJpIG1vZGlmaWNhdGk6IgorCisjOiB3dC1zdGF0dXMuYzoyNDkKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICJudW92aSBjb21taXQsICIKKworIzogd3Qtc3RhdHVzLmM6MjUxCittc2dpZCAibW9kaWZpZWQgY29udGVudCwgIgorbXNnc3RyICJjb250ZW51dG8gbW9kaWZpY2F0bywgIgorCisjOiB3dC1zdGF0dXMuYzoyNTMKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZTogICAlcyIKK21zZ3N0ciAibnVvdm8gZmlsZTogICAlcyIKKworIzogd3Qtc3RhdHVzLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcGllZDogICAgICVzIC0+ICVzIgorbXNnc3RyICJjb3BpYXRvOiAgICAgJXMgLT4gJXMiCisKKyM6IHd0LXN0YXR1cy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkOiAgICAlcyIKK21zZ3N0ciAiZWxpbWluYXRvOiAgICAlcyIKKworIzogd3Qtc3RhdHVzLmM6Mjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGlmaWVkOiAgICVzIgorbXNnc3RyICJtb2RpZmljYXRvOiAgICVzIgorCisjOiB3dC1zdGF0dXMuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1lZDogICAgJXMgLT4gJXMiCittc2dzdHIgInJpbm9taW5hdG86ICAgICVzIC0+ICVzIgorCisjOiB3dC1zdGF0dXMuYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAidHlwZWNoYW5nZTogJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Mjg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd246ICAgICVzIgorbXNnc3RyICJzY29ub3NjaXV0bzogICAgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjI4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bm1lcmdlZDogICAlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzM3Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiU3VsIGJyYW5jaCAiCisKKyM6IHd0LXN0YXR1cy5jOjc0NAorbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzU1Cittc2dpZCAiSW5pdGlhbCBjb21taXQiCittc2dzdHIgIkNvbW1pdCBpbml6aWFsZSIKKworIzogd3Qtc3RhdHVzLmM6NzY5Cittc2dpZCAiVW50cmFja2VkIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc3MQorbXNnaWQgIklnbm9yZWQiCittc2dzdHIgIklnbm9yYXRvIgorCisjOiB3dC1zdGF0dXMuYzo3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3NzUKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc4MQorbXNnaWQgIk5vIGNoYW5nZXMiCittc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EiCisKKyM6IHd0LXN0YXR1cy5jOjc4NQorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCVzXG4iCittc2dzdHIgIm5lc3N1bmEgbW9kaWZpY2EgYWdnaXVudGEgYWwgY29tbWl0JXNcbiIKKworIzogd3Qtc3RhdHVzLmM6Nzg3Cittc2dpZCAiICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKSIKK21zZ3N0ciAiICh1c2EgXCJnaXQgYWRkXCIgZS9vIFwiZ2l0IGNvbW1pdCAtYVwiKSIKKworIzogd3Qtc3RhdHVzLmM6Nzg5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCVzXG4iCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzkxCittc2dpZCAiICh1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc5MyB3dC1zdGF0dXMuYzo3OTYgd3Qtc3RhdHVzLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0JXNcbiIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3OTQKK21zZ2lkICIgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc5NworbXNnaWQgIiAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo4MDAKK21zZ2lkICIgKHdvcmtpbmcgZGlyZWN0b3J5IGNsZWFuKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo5MDgKK21zZ2lkICJIRUFEIChubyBicmFuY2gpIgorbXNnc3RyICJIRUFEIChuZXNzdW4gYnJhbmNoKSIKKworIzogd3Qtc3RhdHVzLmM6OTE0Cittc2dpZCAiSW5pdGlhbCBjb21taXQgb24gIgorbXNnc3RyICJDb21taXQgaW5pemlhbGUgc3UgIgorCisjOiB3dC1zdGF0dXMuYzo5MjkKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJpbmRpZXRybyAiCisKKyM6IHd0LXN0YXR1cy5jOjkzMiB3dC1zdGF0dXMuYzo5MzUKK21zZ2lkICJhaGVhZCAiCittc2dzdHIgImF2YW50aSAiCisKKyM6IHd0LXN0YXR1cy5jOjkzNworbXNnaWQgIiwgYmVoaW5kICIKK21zZ3N0ciAiLCBpbmRpZXRybyAiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAic3RhdHVzIGRpZmYgJWMgaW5hdHRlc28iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NjcgYnVpbHRpbi9jb21taXQuYzoyMjYKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgImFnZ2lvcm5hbWVudG8gZGVpIGZpbGUgbm9uIHJpdXNjaXRvIgorCisjOiBidWlsdGluL2FkZC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgImVsaW1pbmEgJyVzJ1xuIgorCisjOiBidWlsdGluL2FkZC5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRoICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAiSWwgcGF0aCAnJXMnIMOoIG5lbCBzb3R0b21vZHVsbyAnJS4qcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTkyCittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoxOTUgYnVpbHRpbi9hZGQuYzo0NTYgYnVpbHRpbi9ybS5jOjE4NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAiJyVzJyBzaSB0cm92YSBvbHRyZSB1biBsaW5rIHNpbWJvbGljbyIKKworIzogYnVpbHRpbi9hZGQuYzoyNzYKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgbGVnZ2VyZSBpbmRleCIKKworIzogYnVpbHRpbi9hZGQuYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYXByaXJlICclcycgcGVyIGxhIHNjcml0dHVyYS4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjkwCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHNjcml2ZXJlIGxhIHBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGVzZWd1aXJlIGxvIHN0YXQgZGkgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzoyOTcKK21zZ2lkICJFbXB0eSBwYXRjaC4gQWJvcnRlZC4iCittc2dzdHIgIlBhdGNoIHZ1b3RhLiBPcGVyYXppb25lIGludGVycm90dGEuIgorCisjOiBidWlsdGluL2FkZC5jOjMwMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBhcHBsaWNhcmUgJyVzJyIKKworIzogYnVpbHRpbi9hZGQuYzozMTIKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIkkgc2VndWVudGkgcGF0aCBzb25vIHN0YXRpIGlnbm9yYXRpIGRhIHVubyBvIHBpw7kgZGVpIHR1b2kgZmlsZSAuZ2l0aWdub3JlOlxuIgorCisjOiBidWlsdGluL2FkZC5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICJVc2EgLWYgc2UgdnVvaSBkYXZ2ZXJvIGFnZ2l1bmdlcmxpLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjM1MworbXNnaWQgIm5vIGZpbGVzIGFkZGVkIgorbXNnc3RyICJuZXNzdW4gZmlsZSBhZ2dpdW50byIKKworIzogYnVpbHRpbi9hZGQuYzozNTkKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJhZ2dpdW50YSBkZWkgZmlsZSBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkxCittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BIGUgLXUgc29ubyByZWNpcHJvY2FtZW50ZSBpbmNvbXBhdGliaWxpIgorCisjOiBidWlsdGluL2FkZC5jOjM5MworbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIkwnb3B6aW9uZSAtLWlnbm9yZS1taXNzaW5nIHB1w7IgZXNzZXJlIHVzYXRhIHNvbG8gY29uIC0tZHJ5LXJ1biIKKworIzogYnVpbHRpbi9hZGQuYzo0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90aGluZyBzcGVjaWZpZWQsIG5vdGhpbmcgYWRkZWQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo0MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIkZvcnNlIGludGVuZGV2aSBkaXJlICdnaXQgYWRkIC4nP1xuIgorCisjOiBidWlsdGluL2FkZC5jOjQyMCBidWlsdGluL2NsZWFuLmM6OTUgYnVpbHRpbi9jb21taXQuYzoyODYgYnVpbHRpbi9tdi5jOjgyCisjOiBidWlsdGluL3JtLmM6MTYyCittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICJpbmRleCBmaWxlIGNvcnJvdHRvIgorCisjOiBidWlsdGluL2FkZC5jOjQ3NiBidWlsdGluL2FwcGx5LmM6NDEwOCBidWlsdGluL212LmM6MjI5IGJ1aWx0aW4vcm0uYzoyNjAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIkltcG9zc2liaWxlIHNjcml2ZXJlIGlsIG51b3ZvIGluZGV4IGZpbGUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo1MworbXNnaWQgImdpdCBhcHBseSBbb3B0aW9uc10gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgW29wemlvbmldIFs8cGF0Y2g+Li4uXSIKKworIzogYnVpbHRpbi9hcHBseS5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgInJlZ2V4ZWMgaGEgcmVzdGl0dWl0byAlZCBwZXIgbCdpbnB1dDogJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgdHJvdmFyZSBpbCBub21lIGRlbCBmaWxlIG5lbGxhIHBhdGNoIGFsbGEgcmlnYSAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjkzNworIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgZXJyYXRvIC0gYXR0ZXNvIC9kZXYvbnVsbCwgcmljZXZ1dG8gJXMgYWxsYSByaWdhICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGdpdC1kaWZmIGVycmF0byAtIG51b3ZvIG5vbWUgZGVsIGZpbGUgaW5jb25zaXN0ZW50ZSBhbGxhIHJpZ2EgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgZXJyYXRvIC0gdmVjY2hpbyBub21lIGRlbCBmaWxlIGluY29uc2lzdGVudGUgYWxsYSByaWdhICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgZXJyYXRvIC0gYXR0ZXNvIC9kZXYvbnVsbGEgYWxsYSByaWdhICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTM5NAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgInJlY291bnQ6IHJpZ2EgaW5hdHRlc2E6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDUxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgImZyYW1tZW50byBkaSBwYXRjaCBzZW56YSBpbnRlc3RhemlvbmUgYWxsYSByaWdhICVkOiAlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2MjgKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAiaWwgbnVvdm8gZmlsZSBkaXBlbmRlIGRhIGNvbnRlbnV0aSBwcmVjZWRlbnRpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTYzMAorbXNnaWQgImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgImlsIGZpbGUgZWxpbWluYXRvIGhhIGFuY29yYSBkZWkgY29udGVudXRpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgImlsIG51b3ZvIGZpbGUgJXMgZGlwZW5kZSBkYSBjb250ZW51dGkgcHJlY2VkZW50aSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRlZCBmaWxlICVzIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAiaWwgZmlsZSBlbGltaW5hdG8gJXMgaGEgYW5jb3JhIGRlaSBjb250ZW51dGkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjk3CisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIioqIGF0dGVuemlvbmU6IGlsIGZpbGUgJXMgZGl2ZW50YSB2dW90byBtYSBub24gw6ggZWxpbWluYXRvIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTg0MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJwYXRjaCBiaW5hcmlhIGNvcnJvdHRhIGFsbGEgcmlnYSAlZDogJS4qcyIKKworIy4gdGhlcmUgaGFzIHRvIGJlIG9uZSBodW5rIChmb3J3YXJkIGh1bmspCisjOiBidWlsdGluL2FwcGx5LmM6MTg3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgInBhdGNoIGJpbmFyaWEgbm9uIHJpY29ub3NjaXV0YSBhbGxhIHJpZ2EgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxOTU4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjIwNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCBsaW5rIHNpbWJvbGljbyAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjIwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gb3IgcmVhZCAlcyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIG8gbGVnZ2VyZSAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjIxMjMKK21zZ2lkICJvb3BzIgorbXNnc3RyICJvb3BzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgImluaXppbyBkZWxsYSByaWdhIG5vbiB2YWxpZG86ICclYyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmUpLiIKK21zZ2lkX3BsdXJhbCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZXMpLiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorImR1cmFudGUgbGEgcmljZXJjYSBwZXI6XG4iCisiJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAiZGF0aSBkZWxsYSBwYXRjaCBiaW5hcmlhIG1hbmNhbnRpIHBlciAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkwMworIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIKK21zZ3N0ciAibGEgcGF0Y2ggYmluYXJpYSBub24gcHXDsiBlc3NlcmUgYXBwbGljYXRhIGEgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgImxhIHBhdGNoIGJpbmFyaWEgc3UgJyVzJyBjcmVhIHJpc3VsdGF0aSBub24gY29ycmV0dGkgKGF0dGVzbyAlcywgcmljZXZ1dG8gJXMpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkzMAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAicGF0Y2ggbm9uIHJpdXNjaXRhOiAlczolbGQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAibGEgcGF0Y2ggJXMgw6ggc3RhdGEgcmlub21pbmF0YS9lbGltaW5hdGEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDUyIGJ1aWx0aW4vYXBwbHkuYzozMDY5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgb2YgJXMgZmFpbGVkIgorbXNnc3RyICJsZXR0dXJhIGRpICVzIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwODQKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICJsYSByaW1vemlvbmUgZGVsbGEgcGF0Y2ggbGFzY2lhIGNvbnRlbnV0aSBkZWwgZmlsZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlczogZXNpc3RlIGdpw6AgbmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGhhcyBiZWVuIGRlbGV0ZWQvcmVuYW1lZCIKK21zZ3N0ciAiJXM6IMOoIHN0YXRhIGVsaW1pbmF0YS9yaW5vbWluYXRhIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzE0OCBidWlsdGluL2FwcGx5LmM6MzE3OQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMiCittc2dzdHIgIiVzOiAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IgorbXNnc3RyICIlczogbm9uIGVzaXN0ZSBpbiBpbmRleCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICIlczogbm9uIGNvcnJpc3BvbmRlIGEgaW5kZXgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlczogdGlwbyBlcnJhdG8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTkyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgaGEgaWwgdGlwbyAlbywgYXR0ZXNvICVvIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI0NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBlc2lzdGUgZ2nDoCBpbiBpbmRleCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjcyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBtb2RlICglbykgb2YgJXMgZG9lcyBub3QgbWF0Y2ggb2xkIG1vZGUgKCVvKSBvZiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiVzOiBsYSBwYXRjaCBub24gcHXDsiBlc3NlcmUgYXBwbGljYXRhIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI5MworIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAiQ29udHJvbGxvIGRlbGxhIHBhdGNoICVzLi4uIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM0OCBidWlsdGluL2NoZWNrb3V0LmM6MjEyIGJ1aWx0aW4vcmVzZXQuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAibWFrZV9jYWNoZV9lbnRyeSBub24gcml1c2NpdG8gcGVyIGlsIHBhdGggJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICJpbXBvc3NpYmlsZSByaW11b3ZlcmUgJXMgZGEgaW5kZXgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTE4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1YnByb2plY3QgJXMiCittc2dzdHIgInBhdGNoIGNvcnJvdHRhIHBlciBpbCBzb3R0b3Byb2dldHRvICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbG8gc3RhdCBkZWwgZmlsZSBhcHBlbmEgY3JlYXRvICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTMwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhZ2dpdW5nZXJlIGxhIHZvY2UgZGVsbGEgY2FjaGUgcGVyICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzU2MworIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAiY2hpdXN1cmEgZGVsIGZpbGUgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBmaWxlICclcycgaW4gbW9kYWxpdMOgICVvIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBsaWVkIHBhdGNoICVzIGNsZWFubHkuIgorbXNnc3RyICJQYXRjaCAlcyBhcHBsaWNhdGEgY29ycmV0dGFtZW50ZS4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNjc2Cittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgImVycm9yZSBpbnRlcm5vIgorCisjLiBTYXkgdGhpcyBldmVuIHdpdGhvdXQgLS12ZXJib3NlCisjOiBidWlsdGluL2FwcGx5LmM6MzY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzY4OQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiRnJhbW1lbnRvICMlZCBhcHBsaWNhdG8gY29ycmV0dGFtZW50ZS4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAiRnJhbW1lbnRvICMlZCByZXNwaW50by4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODQ0Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICJpbnB1dCBub24gcmljb25vc2NpdXRvIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzg1NQorbXNnaWQgInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaW5kZXggZmlsZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5NzAgYnVpbHRpbi9hcHBseS5jOjM5NzMKK21zZ2lkICJwYXRoIgorbXNnc3RyICJwYXRoIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk3MQorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIm5vbiBhcHBsaWNhIGxlIG1vZGlmaWNoZSBjb3JyaXNwb25kZW50aSBhbCBwYXRoIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk3NAorbXNnaWQgImFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgImFwcGxpY2EgbGUgbW9kaWZpY2hlIGNvcnJpc3BvbmRlbnRpIGFsIHBhdGggc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTc2Cittc2dpZCAibnVtIgorbXNnc3RyICJudW0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTc3Cittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5ODAKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJpZ25vcmEgbGUgYWdnaXVudGUgY3JlYXRlIGRhbGxhIHBhdGNoIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk4MgorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiaW52ZWNlIGRpIGFwcGxpY2FyZSBsYSBwYXRjaCwgbW9zdHJhIGwnb3V0cHV0IGRpIGRpZmZzdGF0IHBlciBsJ2lucHV0IgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk4NgorbXNnaWQgInNob3dzIG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICJtb3N0cmEgaWwgbnVtZXJvIGRpIHJpZ2hlIGFnZ2l1bnRlIGUgZWxpbWluYXRlIGluIG5vdGF6aW9uZSBkZWNpbWFsZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5ODgKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJpbnZlY2UgZGkgYXBwbGljYXJlIGxhIHBhdGNoLCBtb3N0cmEgdW4gcmlhc3N1bnRvIHBlciBsJ2lucHV0IgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzk5MAorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgImludmVjZSBkaSBhcHBsaWNhcmUgbGEgcGF0Y2gsIHZlcmlmaWNhIHNlIHB1w7IgZXNzZXJlIGFwcGxpY2F0YSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5OTIKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgImFzc2ljdXJhIGNoZSBsYSBwYXRjaCBzaWEgYXBwbGljYWJpbGUgYWxsJ2F0dHVhbGUgaW5kZXgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTk0Cittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM5OTYKK21zZ2lkICJhbHNvIGFwcGx5IHRoZSBwYXRjaCAodXNlIHdpdGggLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKK21zZ3N0ciAiYXBwbGljYSBhbmNoZSBsYSBwYXRjaCAoZGEgdXNhcmUgY29uIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTk4Cittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMDAKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiaSBwYXRoIHNvbm8gc2VwYXJhdGkgY29uIHVuIGNhcmF0dGVyZSBOVUwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDAzCittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICJhc3NpY3VyYSBhbG1lbm8gPG4+IHJpZ2hlIGRpIGNvbnRlc3RvIGNvcnJpc3BvbmRlbnRlIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAwNAorbXNnaWQgImFjdGlvbiIKK21zZ3N0ciAiYXppb25lIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAwNQorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICJyaWxldmEgcmlnaGUgbnVvdmUgbyBtb2RpZmljYXRlIGNoZSBoYW5ubyBlcnJvcmkgZGkgc3BhemkgYmlhbmNoaSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMDggYnVpbHRpbi9hcHBseS5jOjQwMTEKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDE0Cittc2dpZCAiYXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UiCittc2dzdHIgImFwcGxpY2EgbGEgcGF0Y2ggaW4gbWFuaWVyYSBpbnZlcnNhIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAxNgorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDE4Cittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgImxhc2NpYSBpIGZyYW1tZW50aSByZXNwaW50aSBuZWkgZmlsZSAucmVqIGNvcnJpc3BvbmRlbnRpIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAyMAorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICJjb25zZW50ZSBsYSBzb3ZyYXBwb3NpemlvbmUgZGVpIGZyYW1tZW50aSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMjEKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJkZXR0YWdsaWF0byIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMjMKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAyNgorbXNnaWQgImRvIG5vdCB0cnVzdCB0aGUgbGluZSBjb3VudHMgaW4gdGhlIGh1bmsgaGVhZGVycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAyOAorbXNnaWQgInJvb3QiCittc2dzdHIgInJhZGljZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMjkKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICJhbnRlcG9uZSA8cm9vdD4gYSB0dXR0aSBpIG5vbWkgZmlsZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwNTAKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4IGFsIGRpIGZ1b3JpIGRpIHVuIHJlcG9zaXRvcnkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDUzCittc2dpZCAiLS1jYWNoZWQgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tY2FjaGVkIGFsIGRpIGZ1b3JpIGRpIHVuIHJlcG9zaXRvcnkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGxhIHBhdGNoICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDgzCisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA4OSBidWlsdGluL2FwcGx5LmM6NDA5OQorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCByaWdhIGFnZ2l1bmdlIGVycm9yaSBkaSBzcGF6aSBiaWFuY2hpLiIKK21zZ3N0clsxXSAiJWQgcmlnaGUgYWdnaXVuZ29ubyBlcnJvcmkgZGkgc3BhemkgYmlhbmNoaS4iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgY3JlYXJlIGlsIGZpbGUgZGVsIHJlcG9zaXRvcnkgJyVzJyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIHJlZGlyaWdlcmUgbCdvdXRwdXQiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IFJlbW90ZSBub24gaGEgdW4gVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo1OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogYXR0ZXNvIEFDSy9OQUssIHJpY2V2dXRvIEVPRiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICJlcnJvcmUgcmVtb3RvOiAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjYKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiBlcnJvcmUgZGVsIHByb3RvY29sbG8iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjcxCittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZlOiBhdHRlc28gdW4gZmx1c2giCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODAKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgImltcG9zc2liaWxlIHVzYXJlIC1hIGNvbiAtZCIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODYKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgYnJhbmNoICclcycgd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJpbCBicmFuY2ggcmVtb3RvICclcycgbm9uIMOoIHN0YXRvIHRyb3ZhdG8uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJicmFuY2ggJyVzJyBub24gdHJvdmF0by4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlIGJyYW5jaCAnJXMnIgorbXNnc3RyICJFcnJvcmUgbmVsbGEgcmltb3ppb25lIGRlbCBicmFuY2ggcmVtb3RvICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJFcnJvcmUgbmVsbGEgcmltb3ppb25lIGRlbCBicmFuY2ggJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJSYW1vIHJlbW90byAlcyBlbGltaW5hdG8gKGVyYSAlcykuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJSYW1vICVzIGVsaW1pbmF0byAoZXJhICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMzkKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJBZ2dpb3JuYW1lbnRvIGRlbCBmaWxlIGRpIGNvbmZpZ3VyYXppb25lIGZhbGxpdG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzM3CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IHBvaW50IGF0IGEgY29tbWl0IgorbXNnc3RyICJpbCBicmFuY2ggJyVzJyBub24gcHVudGEgYWQgdW4gY29tbWl0IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGJlaGluZCAlZF0iCittc2dzdHIgIlslczogZGlldHJvICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2JlaGluZCAlZF0iCittc2dzdHIgIltkaWV0cm8gJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxNQorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGFoZWFkICVkXSIKK21zZ3N0ciAiWyVzOiBhdmFudGkgJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQxNworIywgYy1mb3JtYXQKK21zZ2lkICJbYWhlYWQgJWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDIwCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYWhlYWQgJWQsIGJlaGluZCAlZF0iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo0MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTM1Cittc2dpZCAiKG5vIGJyYW5jaCkiCittc2dzdHIgIihuZXNzdW4gYnJhbmNoKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MDAKK21zZ2lkICJzb21lIHJlZnMgY291bGQgbm90IGJlIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MTMKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyMworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICJOb21lIGRlbCBicmFuY2ggbm9uIHZhbGlkbzogJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2MzgKK21zZ2lkICJCcmFuY2ggcmVuYW1lIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICJSYW1vIHJpbm9taW5hdG8gaW4gJXMsIG1hIEhFQUQgbm9uIMOoIGFnZ2lvcm5hdG8hIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY1MworbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorIklsIGJyYW5jaCDDqCBzdGF0byByaW5vbWluYXRvLCBtYSBsJ2FnZ2lvcm5hbWVudG8gZGVsIGZpbGUgZGkgY29uZmlndXJhemlvbmUgIgorIsOoIGZhbGxpdG8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAibm9tZSBkZWxsJ29nZ2V0dG8gJXMgZXJyYXRvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgYnJhbmNoIGRlc2NyaXB0aW9uIHRlbXBsYXRlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MworbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzg4IGJ1aWx0aW4vY2xvbmUuYzo1NTgKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgwOAorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4gZSAtLXZlcmJvc2Ugbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODU3Cittc2dpZCAiLWEgYW5kIC1yIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCBtYWtlIHNlbnNlIHdpdGggYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorImxlIG9wemlvbmkgLWEgZSAtciBwZXIgJ2dpdCBicmFuY2gnIG5vbiBoYW5ubyBzZW5zbyBjb24gaWwgbm9tZSBkaSB1biBicmFuY2giCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyDDqCBjb3JyZXR0b1xuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjU2Cittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjYwCittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTMgYnVpbHRpbi9jaGVja291dC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAiaWwgcGF0aCAnJXMnIG5vbiBoYSBsYSBub3N0cmEgdmVyc2lvbmUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTUgYnVpbHRpbi9jaGVja291dC5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSB0aGVpciB2ZXJzaW9uIgorbXNnc3RyICJpbCBwYXRoICclcycgbm9uIGhhIGxhIGxvcm8gdmVyc2lvbmUiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgYWxsIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAiaWwgcGF0aCAnJXMnIG5vbiBoYSBsZSB2ZXJzaW9uaSBuZWNlc3NhcmllIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTkyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIzNCBidWlsdGluL2NoZWNrb3V0LmM6MzkyCittc2dpZCAiY29ycnVwdCBpbmRleCBmaWxlIgorbXNnc3RyICJmaWxlIGluZGV4IGNvcnJvdHRvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjY0IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzozMDIgYnVpbHRpbi9jaGVja291dC5jOjQ5OCBidWlsdGluL2Nsb25lLmM6NTgzCisjOiBidWlsdGluL21lcmdlLmM6ODEyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBudW92byBmaWxlIGluZGV4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzE5IGJ1aWx0aW4vZGlmZi5jOjMwMiBidWlsdGluL21lcmdlLmM6NDA4Cittc2dpZCAiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIKK21zZ3N0ciAiZGlmZl9zZXR1cF9kb25lIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQxNAorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICLDqCBuZWNlc3NhcmlvIHJpc29sdmVyZSBwcmltYSBsJ2F0dHVhbGUgaW5kZXgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2FuIG5vdCBkbyByZWZsb2cgZm9yICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTY2Cittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQgc2kgdHJvdmEgb3JhIGEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo1NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiUmlwcmlzdGluYSBpbCBicmFuY2ggJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICJTaSDDqCBnacOgIHN1ICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJTaSDDqCBwYXNzYXRpIGFsIGJyYW5jaCAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAiIC4uLiBlICVkIGFsdHJpLlxuIgorCisjLiBUaGUgc2luZ3VsYXIgdmVyc2lvbgorIzogYnVpbHRpbi9jaGVja291dC5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCBuZXdfYnJhbmNoX25hbWUgJXNcbiIKICJcbiIKIG1zZ3N0ciAiIgotIkRpZmZlcmVuemUgdHJhIGxlIHJldmlzaW9uaTpcbiIKKyJTZSBzaSB2dW9sZSBtYW50ZW5lcmxlIGNyZWFuZG8gdW4gbnVvdm8gYnJhbmNoLCBxdWVzdG8gcG90cmViYmUgZXNzZXJlXG4iCisidW4gYnVvbiBtb21lbnRvIHBlciBmYXJsbyBjb246XG4iCisiXG4iCisiIGdpdCBicmFuY2ggbnVvdm9fbm9tZV9icmFuY2ggJXNcbiIKICJcbiIKIAotIzogZ2l0azo5MDU3IGdpdGs6OTA2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgotbXNnc3RyICIgaGEgJXMgZmlnbGkgLSBmaW5lXG4iCi0KLSM6IGdpdGs6OTA4NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgotbXNnc3RyICJFcnJvcmUgbmVsbGEgc2NyaXR0dXJhIGRlbGxhIHJldmlzaW9uZSBuZWwgZmlsZTogJXMiCi0KLSM6IGdpdGs6OTA5MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGRpZmZpbmcgY29tbWl0czogJXMiCi1tc2dzdHIgIkVycm9yZSBuZWxsZSBkaWZmZXJlbnplIHRyYSBsZSByZXZpc2lvbmk6ICVzIgotCi0jOiBnaXRrOjkxMzcKLW1zZ2lkICJUb3AiCi1tc2dzdHIgIkluaXppbyIKLQotIzogZ2l0azo5MTM4Ci1tc2dpZCAiRnJvbSIKLW1zZ3N0ciAiRGEiCi0KLSM6IGdpdGs6OTE0MwotbXNnaWQgIlRvIgotbXNnc3RyICJBIgotCi0jOiBnaXRrOjkxNjcKLW1zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKLW1zZ3N0ciAiR2VuZXJhIHBhdGNoIgotCi0jOiBnaXRrOjkxNjkKLW1zZ2lkICJGcm9tOiIKLW1zZ3N0ciAiRGE6IgotCi0jOiBnaXRrOjkxNzgKLW1zZ2lkICJUbzoiCi1tc2dzdHIgIkE6IgotCi0jOiBnaXRrOjkxODcKLW1zZ2lkICJSZXZlcnNlIgotbXNnc3RyICJJbnZlcnRpIgotCi0jOiBnaXRrOjkxODkgZ2l0azo5Mzg1Ci1tc2dpZCAiT3V0cHV0IGZpbGU6IgotbXNnc3RyICJTY3Jpdmkgc3VsIGZpbGU6IgotCi0jOiBnaXRrOjkxOTUKLW1zZ2lkICJHZW5lcmF0ZSIKLW1zZ3N0ciAiR2VuZXJhIgotCi0jOiBnaXRrOjkyMzMKLW1zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCi1tc2dzdHIgIkVycm9yZSBuZWxsYSBjcmVhemlvbmUgZGVsbGEgcGF0Y2g6IgotCi0jOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAotbXNnaWQgIklEOiIKLW1zZ3N0ciAiSUQ6IgotCi0jOiBnaXRrOjkyNjUKLW1zZ2lkICJUYWcgbmFtZToiCi1tc2dzdHIgIk5vbWUgZXRpY2hldHRhOiIKLQotIzogZ2l0azo5MjY4Ci1tc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCi1tc2dzdHIgIklsIG1lc3NhZ2dpbyBkZWxsJ2V0aWNoZXR0YSDDqCBvcHppb25hbGUiCi0KLSM6IGdpdGs6OTI3MAotbXNnaWQgIlRhZyBtZXNzYWdlOiIKLW1zZ3N0ciAiTWVzc2FnZ2lvIGRlbGwnZXRpY2hldHRhOiIKLQotIzogZ2l0azo5Mjc0IGdpdGs6OTQzOQotbXNnaWQgIkNyZWF0ZSIKLW1zZ3N0ciAiQ3JlYSIKLQotIzogZ2l0azo5MjkyCi1tc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgotbXNnc3RyICJOZXNzdW5hIGV0aWNoZXR0YSBzcGVjaWZpY2F0YSIKLQotIzogZ2l0azo5Mjk2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGFnIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyIKLW1zZ3N0ciAiTCdldGljaGV0dGEgXCIlc1wiIGVzaXN0ZSBnacOgIgotCi0jOiBnaXRrOjkzMDYKLW1zZ2lkICJFcnJvciBjcmVhdGluZyB0YWc6IgotbXNnc3RyICJFcnJvcmUgbmVsbGEgY3JlYXppb25lIGRlbGwnZXRpY2hldHRhOiIKLQotIzogZ2l0azo5MzgyCi1tc2dpZCAiQ29tbWFuZDoiCi1tc2dzdHIgIkNvbWFuZG86IgotCi0jOiBnaXRrOjkzOTAKLW1zZ2lkICJXcml0ZSIKLW1zZ3N0ciAiU2NyaXZpIgotCi0jOiBnaXRrOjk0MDgKLW1zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCi1tc2dzdHIgIkVycm9yZSBuZWxsYSBzY3JpdHR1cmEgZGVsbGEgcmV2aXNpb25lOiIKLQotIzogZ2l0azo5NDM1Ci1tc2dpZCAiTmFtZToiCi1tc2dzdHIgIk5vbWU6IgotCi0jOiBnaXRrOjk0NTgKLW1zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgotbXNnc3RyICJTcGVjaWZpY2FyZSB1biBub21lIHBlciBpbCBudW92byByYW1vIgotCi0jOiBnaXRrOjk0NjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKLW1zZ3N0ciAiSWwgcmFtbyAnJXMnIGVzaXN0ZSBnacOgLiBTb3ZyYXNjcml2ZXJlPyIKLQotIzogZ2l0azo5NTMwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCi1tc2dzdHIgIkxhIHJldmlzaW9uZSAlcyDDqCBnacOgIGluY2x1c2EgbmVsIHJhbW8gJXMgLS0gYXBwbGljYXJsYSBkaSBudW92bz8iCi0KLSM6IGdpdGs6OTUzNQotbXNnaWQgIkNoZXJyeS1waWNraW5nIgorIzogYnVpbHRpbi9jaGVja291dC5jOjY5NAorbXNnaWQgImludGVybmFsIGVycm9yIGluIHJldmlzaW9uIHdhbGsiCiBtc2dzdHIgIiIKIAotIzogZ2l0azo5NTQ0Ci0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njk4Cittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIkxhIHByZWNlZGVudGUgcG9zaXppb25lIGRpIEhFQUQgZXJhIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzI0Cittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiIgorCisjLiBjYXNlICgxKQorIzogYnVpbHRpbi9jaGVja291dC5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgInJpZmVyaW1lbnRvIG5vbiB2YWxpZG86ICVzIgorCisjLiBjYXNlICgxKTogd2FudCBhIHRyZWUKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5NzQKK21zZ2lkICItQiBjYW5ub3QgYmUgdXNlZCB3aXRoIC1iIgorbXNnc3RyICItQiBub24gcHXDsiBlc3NlcmUgdXNhdGEgY29uIC1iIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTgzCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgb3B0aW9ucyIKK21zZ3N0ciAiLS1wYXRjaCBub24gw6ggY29tcGF0aWJpbGUgY29uIHR1dHRlIGxlIGFsdHJlIG9wemlvbmkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo5ODYKK21zZ2lkICItLWRldGFjaCBjYW5ub3QgYmUgdXNlZCB3aXRoIC1iLy1CLy0tb3JwaGFuIgorbXNnc3RyICItLWRldGFjaCBub24gcHXDsiBlc3NlcmUgdXNhdGEgY29uIC1iLy1CLy0tb3JwaGFuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6OTg4Cittc2dpZCAiLS1kZXRhY2ggY2Fubm90IGJlIHVzZWQgd2l0aCAtdCIKK21zZ3N0ciAiLS1kZXRhY2ggbm9uIHB1w7IgZXNzZXJlIHVzYXRhIGNvbiAtdCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk5NAorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayBuZWNlc3NpdGEgZGVsIG5vbWUgZGkgdW4gYnJhbmNoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwMQorbXNnaWQgIk1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAiTm9tZSBkZWwgYnJhbmNoIG1hbmNhbnRlOyBwcm92YSBjb24gLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA3Cittc2dpZCAiLS1vcnBoYW4gYW5kIC1ifC1CIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDkKK21zZ2lkICItLW9ycGhhbiBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorbXNnc3RyICItLW9ycGhhbiBub24gcHXDsiBlc3NlcmUgdXNhdGEgY29uIC10IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxOQorbXNnaWQgImdpdCBjaGVja291dDogLWYgYW5kIC1tIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgImdpdCBjaGVja291dDogLWYgZSAtbSBub24gc29ubyBjb21wYXRpYmlsaSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTMKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA2MQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCi0iUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorImdpdCBjaGVja291dDogdXBkYXRpbmcgcGF0aHMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzLlxuIgorIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgZXNlZ3VpcmUgY2hlcnJ5LXBpY2sgcGVyY2jDqSBpbCBmaWxlICclcycgw6ggc3RhdG8gbW9kaWZpY2F0byAiCi0ibmVsbGEgZGlyZWN0b3J5IGRpIGxhdm9yby5cbiIKLSJQcmltYSBkaSByaXByb3ZhcmUsIGJpc29nbmEgY3JlYXJlIHVuYSBudW92YSByZXZpc2lvbmUsIGFubnVsbGFyZSBsZSAiCi0ibW9kaWZpY2hlIG8gdXNhcmUgJ2dpdCBzdGFzaCcuIgogCi0jOiBnaXRrOjk1NTAKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDYzCittc2dpZCAiZ2l0IGNoZWNrb3V0OiB1cGRhdGluZyBwYXRocyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDY4Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBub24gcHJlbmRlIHVuIHBhdGggY29tZSBhcmdvbWVudG8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDcxCiBtc2dpZCAiIgotIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgotIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgZXNlZ3VpcmUgY2hlcnJ5LXBpY2sgYSBjYXVzYSBkaSB1biBjb25mbGl0dG8gbmVsbGEgZnVzaW9uZS5cbiIKLSJWdW9pIGF2dmlhcmUgZ2l0IGNpdG9vbCBwZXIgcmlzb2x2ZXJsbz8iCiAKLSM6IGdpdGs6OTU2NiBnaXRrOjk2MjQKLW1zZ2lkICJObyBjaGFuZ2VzIGNvbW1pdHRlZCIKLW1zZ3N0ciAiTmVzc3VuYSBtb2RpZmljYSBhcmNoaXZpYXRhIgorIzogYnVpbHRpbi9jaGVja291dC5jOjEwOTAKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQuIgorbXNnc3RyICIiCiAKLSM6IGdpdGs6OTU5MwotIywgZnV6enksIHRjbC1mb3JtYXQKLW1zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKLW1zZ3N0ciAiTGEgcmV2aXNpb25lICVzIMOoIGdpw6AgaW5jbHVzYSBuZWwgcmFtbyAlcyAtLSBhcHBsaWNhcmxhIGRpIG51b3ZvPyIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDkzCittc2dpZCAiLS1vdXJzLy0tdGhlaXJzIGlzIGluY29tcGF0aWJsZSB3aXRoIHN3aXRjaGluZyBicmFuY2hlcy4iCittc2dzdHIgIi0tb3Vycy8tLXRoZWlycyBub24gc29ubyBjb21wYXRpYmlsaSBjb24gaWwgcGFzc2FnZ2lvIGFpIGJyYW5jaC4iCiAKLSM6IGdpdGs6OTU5OAotIywgZnV6enkKLW1zZ2lkICJSZXZlcnRpbmciCi1tc2dzdHIgImdpdCByZXNldCBpbiBjb3JzbyIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OAorbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiLXggZSAtWCBub24gcG9zc29ubyBlc3NlcmUgdXNhdGkgaW5zaWVtZSIKIAotIzogZ2l0azo5NjA2Ci0jLCBmdXp6eSwgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jbGVhbi5jOjgyCiBtc2dpZCAiIgotIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKLSJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1uIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gY2xlYW4iCiBtc2dzdHIgIiIKLSJJbXBvc3NpYmlsZSBlc2VndWlyZSBjaGVycnktcGljayBwZXJjaMOpIGlsIGZpbGUgJyVzJyDDqCBzdGF0byBtb2RpZmljYXRvICIKLSJuZWxsYSBkaXJlY3RvcnkgZGkgbGF2b3JvLlxuIgotIlByaW1hIGRpIHJpcHJvdmFyZSwgYmlzb2duYSBjcmVhcmUgdW5hIG51b3ZhIHJldmlzaW9uZSwgYW5udWxsYXJlIGxlICIKLSJtb2RpZmljaGUgbyB1c2FyZSAnZ2l0IHN0YXNoJy4iCisiY2xlYW4ucmVxdWlyZUZvcmNlIMOoIGltcG9zdGF0byBhIHZlcm8sIG1hIG7DqSAtbiBuw6kgLWYgc29ubyBzdGF0ZSBzcGVjaWZpY2F0ZTsgIgorImNsZWFuIGludGVycm90dG8iCiAKLSM6IGdpdGs6OTYxMAotIywgZnV6enkKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NQogbXNnaWQgIiIKLSJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCi0iIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorImNsZWFuLnJlcXVpcmVGb3JjZSBkZWZhdWx0cyB0byB0cnVlIGFuZCBuZWl0aGVyIC1uIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gIgorImNsZWFuIgogbXNnc3RyICIiCi0iSW1wb3NzaWJpbGUgZXNlZ3VpcmUgY2hlcnJ5LXBpY2sgYSBjYXVzYSBkaSB1biBjb25mbGl0dG8gbmVsbGEgZnVzaW9uZS5cbiIKLSJWdW9pIGF2dmlhcmUgZ2l0IGNpdG9vbCBwZXIgcmlzb2x2ZXJsbz8iCisiY2xlYW4ucmVxdWlyZUZvcmNlIMOoIHZlcm8gcGVyIGRlZmF1bHQsIG1hIG7DqSAtbiBuw6kgLWYgc29ubyBzdGF0ZSBzcGVjaWZpY2F0ZTsgIgorImNsZWFuIGludGVycm90dG8iCiAKLSM6IGdpdGs6OTY1MwotbXNnaWQgIkNvbmZpcm0gcmVzZXQiCi1tc2dzdHIgIkNvbmZlcm1hIGdpdCByZXNldCIKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNTUgYnVpbHRpbi9jbGVhbi5jOjE3NgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiIgogCi0jOiBnaXRrOjk2NTUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJSZXNldCBicmFuY2ggJXMgdG8gJXM/IgotbXNnc3RyICJBZ2dpb3JuYXJlIGlsIHJhbW8gJXMgYSAlcz8iCisjOiBidWlsdGluL2NsZWFuLmM6MTU5IGJ1aWx0aW4vY2xlYW4uYzoxNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXNcbiIKK21zZ3N0ciAiUmltb3ppb25lIGRpICVzXG4iCiAKLSM6IGdpdGs6OTY1NwotbXNnaWQgIlJlc2V0IHR5cGU6IgotbXNnc3RyICJUaXBvIGRpIGFnZ2lvcm5hbWVudG86IgorIzogYnVpbHRpbi9jbGVhbi5jOjE2MiBidWlsdGluL2NsZWFuLmM6MTgyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgInJpbW96aW9uZSBkaSAlcyBub24gcml1c2NpdGEiCiAKLSM6IGdpdGs6OTY2MAotbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgotbXNnc3RyICJTb2Z0OiBMYXNjaWEgbGEgZGlyZWNvcnkgZGkgbGF2b3JvIGUgbCdpbmRpY2UgY29tZSBzb25vIgorIzogYnVpbHRpbi9jbGVhbi5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBub3QgcmVtb3ZlICVzXG4iCittc2dzdHIgIiIKIAotIzogZ2l0azo5NjYzCi1tc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgotbXNnc3RyICJNaXhlZDogTGFzY2lhIGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gY29tZSDDqCwgYWdnaW9ybmEgbCdpbmRpY2UiCisjOiBidWlsdGluL2NsZWFuLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCByZW1vdmluZyAlc1xuIgorbXNnc3RyICIiCiAKLSM6IGdpdGs6OTY2NgorIzogYnVpbHRpbi9jbG9uZS5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIGRpcmVjdG9yeS4iCittc2dzdHIgImlsIHJlcG9zaXRvcnkgZGkgcmlmZXJpbWVudG8gJyVzJyBub24gw6ggdW5hIGRpcmVjdG9yeSBsb2NhbGUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBvcGVuICclcyciCittc2dzdHIgImFwZXJ0dXJhIGRpICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgImNyZWF6aW9uZSBkZWxsYSBkaXJlY3RvcnkgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDggYnVpbHRpbi9kaWZmLmM6NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAic3RhdCBkaSAnJXMnIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXMgZXNpc3RlIGUgbm9uIMOoIHVuYSBkaXJlY3RvcnkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAic3RhdCBkaSAlcyBub24gcml1c2NpdG9cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgInJpbW96aW9uZSBkZWwgbGluayAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAiY3JlYXppb25lIGRlbCBsaW5rICclcycgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAiY29waWEgZGVsIGZpbGUgaW4gJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZG9uZS5cbiIKK21zZ3N0ciAiZmF0dG8uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgcmVtb3RlIGJyYW5jaCAlcyB0byBjbG9uZS4iCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgdHJvdmFyZSBpbCBicmFuY2ggcmVtb3RvICVzIGRhIGNsb25hcmUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTQ5Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICIiCisibCdIRUFEIHJlbW90byBzaSByaWZlcmlzY2UgYWQgdW4gcmVmIGluZXNpc3RlbnRlLCBpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCAiCisiY2hlY2tvdXQuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MzkKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJUcm9wcGkgYXJnb21lbnRpLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0MworbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiRGV2aSBzcGVjaWZpY2FyZSB1biByZXBvc2l0b3J5IGRhIGNsb25hcmUuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAibGUgb3B6aW9uaSAtLWJhcmUgZSAtLW9yaWdpbiAlcyBub24gc29ubyBjb21wYXRpYmlsaS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJpbCByZXBvc2l0b3J5ICclcycgbm9uIGVzaXN0ZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY3MworbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAiIgorImlsIHBhdGggZGkgZGVzdGluYXppb25lICclcycgZXNpc3RlIGdpw6AgZSBub24gw6ggdW5hIGRpcmVjdG9yeSB2dW90YS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAid29ya2luZyB0cmVlICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MDYgYnVpbHRpbi9jbG9uZS5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJDbG9uZSBuZWwgcmVwb3NpdG9yeSBzcG9nbGlvICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gY2xvbmUgJXMiCittc2dzdHIgIk5vbiBzbyBjb21lIGNsb25hcmUgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIklsIGJyYW5jaCByZW1vdG8gJXMgbm9uIMOoIHN0YXRvIHRyb3ZhdG8gaW4gdXBzdHJlYW0gJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NDIKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJTZW1icmEgY2hlIHR1IGFiYmlhIGNsb25hdG8gdW4gcmVwb3NpdG9yeSB2dW90by4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIi0tY29tbWFuZCBkZXZlIGVzc2VyZSBpbCBwcmltbyBhcmdvbWVudG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDMKIG1zZ2lkICIiCi0iSGFyZDogUmVzZXQgd29ya2luZyB0cmVlIGFuZCBpbmRleFxuIgotIihkaXNjYXJkIEFMTCBsb2NhbCBjaGFuZ2VzKSIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKIG1zZ3N0ciAiIgotIkhhcmQ6IEFnZ2lvcm5hIGxhIGRpcmVjdG9yeSBkaSBsYXZvcm8gZSBsJ2luZGljZVxuIgotIihhYmJhbmRvbmEgVFVUVEUgbGUgbW9kaWZpY2hlIGxvY2FsaSkiCisiSWwgdHVvIG5vbWUgZSBsJ2luZGlyaXp6byBlbWFpbCBzb25vIHN0YXRpIGNvbmZpZ3VyYXRpIGF1dG9tYXRpY2FtZW50ZSB1c2FuZG9cbiIKKyJpbCB0dW8gbm9tZSB1dGVudGUgZWQgaWwgbm9tZSBob3N0LiBQZXIgZmF2b3JlLCB2ZXJpZmljYSBjaGUgc2lhbm8gZXNhdHRpLlxuIgorIsOIIHBvc3NpYmlsZSBlbGltaW5hcmUgcXVlc3RvIG1lc3NhZ2dpbyBpbXBvc3RhbmRvbGkgZXNwbGljaXRhbWVudGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiVHVvIE5vbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgdHVAZXNlbXBpby5jb21cbiIKKyJcbiIKKyJEb3BvIHF1ZXN0YSBvcGVyYXppb25lLCBwdW9pIHJpcHJpc3RpbmFyZSBsJ2lkZW50aXTDoCB1c2F0YSBpbiBxdWVzdG8gY29tbWl0IGNvbjpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCiAKLSM6IGdpdGs6OTY4MwotbXNnaWQgIlJlc2V0dGluZyIKLW1zZ3N0ciAiZ2l0IHJlc2V0IGluIGNvcnNvIgotCi0jOiBnaXRrOjk3NDMKLW1zZ2lkICJDaGVja2luZyBvdXQiCi1tc2dzdHIgIkF0dGl2YXppb25lIGluIGNvcnNvIgotCi0jOiBnaXRrOjk3OTYKLW1zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBjdXJyZW50bHkgY2hlY2tlZC1vdXQgYnJhbmNoIgotbXNnc3RyICJJbXBvc3NpYmlsZSBjYW5jZWxsYXJlIGlsIHJhbW8gYXR0dWFsbWVudGUgYXR0aXZvIgotCi0jOiBnaXRrOjk4MDIKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTUKIG1zZ2lkICIiCi0iVGhlIGNvbW1pdHMgb24gYnJhbmNoICVzIGFyZW4ndCBvbiBhbnkgb3RoZXIgYnJhbmNoLlxuIgotIlJlYWxseSBkZWxldGUgYnJhbmNoICVzPyIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKIG1zZ3N0ciAiIgotIkxlIHJldmlzaW9uaSBuZWwgcmFtbyAlcyBub24gc29ubyBwcmVzZW50aSBzdSBhbHRyaSByYW1pLlxuIgotIkNhbmNlbGxhcmUgaWwgcmFtbyAlcz8iCiAKLSM6IGdpdGs6OTgzMwotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRhZ3MgYW5kIGhlYWRzOiAlcyIKLW1zZ3N0ciAiRXRpY2hldHRlIGUgcmFtaTogJXMiCi0KLSM6IGdpdGs6OTg1MAotbXNnaWQgIkZpbHRlciIKLW1zZ3N0ciAiRmlsdHJvIgotCi0jOiBnaXRrOjEwMTQ2CisjOiBidWlsdGluL2NvbW1pdC5jOjYwCiBtc2dpZCAiIgotIkVycm9yIHJlYWRpbmcgY29tbWl0IHRvcG9sb2d5IGluZm9ybWF0aW9uOyBicmFuY2ggYW5kIHByZWNlZGluZy9mb2xsb3dpbmcgIgotInRhZyBpbmZvcm1hdGlvbiB3aWxsIGJlIGluY29tcGxldGUuIgotbXNnc3RyICIiCi0iRXJyb3JlIG5lbGxhIGxldHR1cmEgZGVsbGEgdG9wb2xvZ2lhIGRlbGxlIHJldmlzaW9uaTogbGUgaW5mb3JtYXppb25pIHN1bCAiCi0icmFtbyBlIGxlIGV0aWNoZXR0ZSBwcmVjZWRlbnRpIGUgc2VndWVudGkgc2FyYW5ubyBpbmNvbXBsZXRlLiIKLQotIzogZ2l0azoxMTEyMwotbXNnaWQgIlRhZyIKLW1zZ3N0ciAiRXRpY2hldHRhIgotCi0jOiBnaXRrOjExMTI3Ci1tc2dpZCAiSWQiCi1tc2dzdHIgIklkIgotCi0jOiBnaXRrOjExMjEwCi1tc2dpZCAiR2l0ayBmb250IGNob29zZXIiCi1tc2dzdHIgIlNjZWx0YSBjYXJhdHRlcmkgZ2l0ayIKLQotIzogZ2l0azoxMTIyNwotbXNnaWQgIkIiCi1tc2dzdHIgIkIiCi0KLSM6IGdpdGs6MTEyMzAKLW1zZ2lkICJJIgotbXNnc3RyICJJIgotCi0jOiBnaXRrOjExMzQ4Ci1tc2dpZCAiQ29tbWl0IGxpc3QgZGlzcGxheSBvcHRpb25zIgotbXNnc3RyICJPcHppb25pIHZpc3VhbGl6emF6aW9uZSBkZWxsJ2VsZW5jbyByZXZpc2lvbmkiCi0KLSM6IGdpdGs6MTEzNTEKLW1zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCi1tc2dzdHIgIkxhcmdoZXp6YSBtYXNzaW1hIGRlbCBncmFmaWNvIChpbiBsaW5lZSkiCi0KLSM6IGdpdGs6MTEzNTUKLSMsIG5vLXRjbC1mb3JtYXQKLW1zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoICglIG9mIHBhbmUpIgotbXNnc3RyICJMYXJnaGV6emEgbWFzc2ltYSBkZWwgZ3JhZmljbyAoJSBkZWwgcGFubmVsbG8pIgotCi0jOiBnaXRrOjExMzU4Ci1tc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgotbXNnc3RyICJNb3N0cmEgbW9kaWZpY2hlIGxvY2FsaSIKLQotIzogZ2l0azoxMTM2MQotIywgZnV6enkKLW1zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgotbXNnc3RyICJTZWxlemlvbmEgYXV0b21hdGljYW1lbnRlIFNIQTEgaGFzaCIKLQotIzogZ2l0azoxMTM2NQotbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCi1tc2dzdHIgIk5hc2NvbmRpIGkgcmlmZXJpbWVudGkgcmVtb3RpIgotCi0jOiBnaXRrOjExMzY5Ci1tc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCi1tc2dzdHIgIk9wemlvbmkgZGkgdmlzdWFsaXp6YXppb25lIGRlbGxlIGRpZmZlcmVuemUiCi0KLSM6IGdpdGs6MTEzNzEKLW1zZ2lkICJUYWIgc3BhY2luZyIKLW1zZ3N0ciAiU3BhemlhdHVyYSB0YWJ1bGF6aW9uaSIKLQotIzogZ2l0azoxMTM3NAotIywgZnV6enkKLW1zZ2lkICJEaXNwbGF5IG5lYXJieSB0YWdzL2hlYWRzIgotbXNnc3RyICJNb3N0cmEgZXRpY2hldHRlIHZpY2luZSIKLQotIzogZ2l0azoxMTM3NwotbXNnaWQgIk1heGltdW0gIyB0YWdzL2hlYWRzIHRvIHNob3ciCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKyJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKIG1zZ3N0ciAiIgogCi0jOiBnaXRrOjExMzgwCi1tc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgotbXNnc3RyICJMaW1pdGEgbGUgZGlmZmVyZW56ZSBhaSBwZXJjb3JzaSBlbGVuY2F0aSIKLQotIzogZ2l0azoxMTM4MwotbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgotbXNnc3RyICJBdHRpdmEgY29kaWZpY2EgZmlsZSBwZXIgZmlsZSIKLQotIzogZ2l0azoxMTM4OSBnaXRrOjExNTM2Ci1tc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgotbXNnc3RyICJWaXN1YWxpenphdG9yZSBkaSBkaWZmZXJlbnplIgotCi0jOiBnaXRrOjExMzkwCi1tc2dpZCAiQ2hvb3NlLi4uIgotbXNnc3RyICJTY2VnbGkuLi4iCi0KLSM6IGdpdGs6MTEzOTUKLW1zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCi1tc2dzdHIgIk9wemlvbmkgZ2VuZXJhbGkiCi0KLSM6IGdpdGs6MTEzOTgKLW1zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCi1tc2dzdHIgIlV0aWxpenphIGludGVyZmFjY2lhIGEgdGVtYSIKLQotIzogZ2l0azoxMTQwMAotbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCi1tc2dzdHIgIih1bmEgbW9kaWZpY2EgcmljaGllZGUgaWwgcmlhdnZpbykiCi0KLSM6IGdpdGs6MTE0MDIKLW1zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKLW1zZ3N0ciAiKG1vbWVudGFuZWFtZW50ZSBub24gZGlzcG9uaWJpbGUpIgotCi0jOiBnaXRrOjExNDEzCi1tc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCi1tc2dzdHIgIkNvbG9yaTogcHJlbWVyZSBwZXIgc2NlZ2xpZXJlIgotCi0jOiBnaXRrOjExNDE2Ci1tc2dpZCAiSW50ZXJmYWNlIgotbXNnc3RyICJJbnRlcmZhY2NpYSIKLQotIzogZ2l0azoxMTQxNwotbXNnaWQgImludGVyZmFjZSIKLW1zZ3N0ciAiaW50ZXJmYWNjaWEiCi0KLSM6IGdpdGs6MTE0MjAKLW1zZ2lkICJCYWNrZ3JvdW5kIgotbXNnc3RyICJTZm9uZG8iCi0KLSM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQotbXNnaWQgImJhY2tncm91bmQiCi1tc2dzdHIgInNmb25kbyIKLQotIzogZ2l0azoxMTQyNAotbXNnaWQgIkZvcmVncm91bmQiCi1tc2dzdHIgIlByaW1vIHBpYW5vIgotCi0jOiBnaXRrOjExNDI1Ci1tc2dpZCAiZm9yZWdyb3VuZCIKLW1zZ3N0ciAicHJpbW8gcGlhbm8iCi0KLSM6IGdpdGs6MTE0MjgKLW1zZ2lkICJEaWZmOiBvbGQgbGluZXMiCi1tc2dzdHIgIkRpZmY6IHZlY2NoaWUgbGluZWUiCi0KLSM6IGdpdGs6MTE0MjkKLW1zZ2lkICJkaWZmIG9sZCBsaW5lcyIKLW1zZ3N0ciAidmVjY2hpZSBsaW5lZSIKLQotIzogZ2l0azoxMTQzMwotbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKLW1zZ3N0ciAiRGlmZjogbnVvdmUgbGluZWUiCi0KLSM6IGdpdGs6MTE0MzQKLW1zZ2lkICJkaWZmIG5ldyBsaW5lcyIKLW1zZ3N0ciAibnVvdmUgbGluZWUiCi0KLSM6IGdpdGs6MTE0MzgKLW1zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKLW1zZ3N0ciAiRGlmZjogaW50ZXN0YXppb25lIGRlbGxhIHNlemlvbmUiCi0KLSM6IGdpdGs6MTE0NDAKLW1zZ2lkICJkaWZmIGh1bmsgaGVhZGVyIgotbXNnc3RyICJpbnRlc3RhemlvbmUgZGVsbGEgc2V6aW9uZSIKLQotIzogZ2l0azoxMTQ0NAotbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgotbXNnc3RyICJTZm9uZG8gcmlnYSBzZWxlemlvbmF0YSIKLQotIzogZ2l0azoxMTQ0NgotbXNnaWQgIm1hcmtlZCBsaW5lIGJhY2tncm91bmQiCi1tc2dzdHIgInNmb25kbyByaWdhIHNlbGV6aW9uYXRhIgotCi0jOiBnaXRrOjExNDUwCi1tc2dpZCAiU2VsZWN0IGJnIgotbXNnc3RyICJTZm9uZG8iCi0KLSM6IGdpdGs6MTE0NTkKLW1zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgotbXNnc3RyICJDYXJhdHRlcmU6IHByZW1lcmUgcGVyIHNjZWdsaWVyZSIKLQotIzogZ2l0azoxMTQ2MQotbXNnaWQgIk1haW4gZm9udCIKLW1zZ3N0ciAiQ2FyYXR0ZXJlIHByaW5jaXBhbGUiCi0KLSM6IGdpdGs6MTE0NjIKLW1zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKLW1zZ3N0ciAiQ2FyYXR0ZXJlIHBlciBkaWZmZXJlbnplIgotCi0jOiBnaXRrOjExNDYzCi1tc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKLW1zZ3N0ciAiQ2FyYXR0ZXJlIHBlciBpbnRlcmZhY2NpYSB1dGVudGUiCi0KLSM6IGdpdGs6MTE0ODUKLW1zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgotbXNnc3RyICJQcmVmZXJlbnplIGdpdGsiCi0KLSM6IGdpdGs6MTE0OTQKLSMsIGZ1enp5Ci1tc2dpZCAiR2VuZXJhbCIKLW1zZ3N0ciAiR2VuZXJhIgotCi0jOiBnaXRrOjExNDk1Ci1tc2dpZCAiQ29sb3JzIgorIzogYnVpbHRpbi9jb21taXQuYzoyNTMKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCiBtc2dzdHIgIiIKIAotIzogZ2l0azoxMTQ5NgotbXNnaWQgIkZvbnRzIgorIzogYnVpbHRpbi9jb21taXQuYzoyOTUKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKIG1zZ3N0ciAiIgogCi0jOiBnaXRrOjExNTQ2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKLW1zZ3N0ciAiR2l0azogc2NlZ2xpZXJlIHVuIGNvbG9yZSBwZXIgJXMiCisjOiBidWlsdGluL2NvbW1pdC5jOjMwMQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImFkZCBpbnRlcmF0dGl2byBub24gcml1c2NpdG8iCiAKLSM6IGdpdGs6MTIwNTkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzM0IGJ1aWx0aW4vY29tbWl0LmM6MzU1IGJ1aWx0aW4vY29tbWl0LmM6NDA1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBmaWxlIG5ld19pbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzozODYKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIHVuIGNvbW1pdCBwYXJ6aWFsZSBkdXJhbnRlIHVuIG1lcmdlLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozODgKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgImltcG9zc2liaWxlIGVzZWd1aXJlIHVuIGNvbW1pdCBwYXJ6aWFsZSBkdXJhbnRlIHVuIGNoZXJyeS1waWNrLiIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTgKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDE4Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDkzIGJ1aWx0aW4vY29tbWl0LmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0OiAlcyIKK21zZ3N0ciAiY29tbWl0IG5vbiB2YWxpZG86ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjUyMgorbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgInBhcmFtZXRybyAtLWF1dGhvciBtYWxmb3JtYXRvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU4MgorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaWRlbnQgc3RyaW5nOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjIwIGJ1aWx0aW4vY29tbWl0LmM6NjUzIGJ1aWx0aW4vY29tbWl0LmM6OTY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIHRyb3ZhcmUgaWwgY29tbWl0ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzMiBidWlsdGluL3Nob3J0bG9nLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIihsZXR0dXJhIGRlbCBtZXNzYWdnaW8gZGkgbG9nIGRhbGxvIHN0YW5kYXJkIGlucHV0KVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgaWwgbG9nIGRhbGxvIHN0YW5kYXJkIGlucHV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgaWwgZmlsZSBkaSBsb2cgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NDQKK21zZ2lkICJjb21taXQgaGFzIGVtcHR5IG1lc3NhZ2UiCittc2dzdHIgImlsIGNvbW1pdCBoYSB1biBtZXNzYWdnaW8gdnVvdG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjYwCittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY2NAorbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgbGVnZ2VyZSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjAKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIHNjcml2ZXJlIGlsIG1vZGVsbG8gZGkgY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCi0iIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTZW1icmEgY2hlIHNpIHN0aWEgZXNlZ3VlbmRvIGlsIGNvbW1pdCBkaSB1biBtZXJnZS5cbiIKKyJTZSBsJ29wZXJhemlvbmUgbm9uIMOoIGNvcnJldHRhLCBwZXIgZmF2b3JlIGVsaW1pbmEgaWwgZmlsZVxuIgorIlx0JXNcbiIKKyJlIHJpcHJvdmEuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNlbWJyYSBjaGUgc2kgc3RpYSBlc2VndWVuZG8gaWwgY29tbWl0IGRpIHVuIGNoZXJyeS1waWNrLlxuIgorIlNlIGwnb3BlcmF6aW9uZSBub24gw6ggY29ycmV0dGEsIHBlciBmYXZvcmUgcmltdW92aSBpbCBmaWxlXG4iCisiXHQlc1xuIgorImUgcmlwcm92YS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NDgKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJQZXIgZmF2b3JlIGluc2VyaXNjaSBpbCBtZXNzYWdnaW8gZGkgY29tbWl0IHBlciBsZSBtb2RpZmljaGUuIExlIHJpZ2hlXG4iCisiY2hlIGluaXppYW5vIGNvbiAnIycgdmVycmFubm8gaWdub3JhdGUsIGUgdW4gbWVzc2FnZ2lvIHZ1b3RvIGFubnVsbGEgaWwgY29tbWl0LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc1MworbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnIycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSB3YW50IHRvLlxuIgorIkFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKyJQZXIgZmF2b3JlIGluc2VyaXNjaSBpbCBtZXNzYWdnaW8gZGkgY29tbWl0IHBlciBsZSBtb2RpZmljaGUuIExlXG4iCisicmlnaGUgY2hlIGluaXppYW5vIGNvbiAnIycgdmVycmFubm8gbWFudGVudXRlOyBwb3Nzb25vIGNvbXVucXVlIGVzc2VyZVxuIgorInJpbW9zc2UgbWFudWFsbWVudGUuIFVuIG1lc3NhZ2dpbyB2dW90byBhbm51bGxhIGlsIGNvbW1pdC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICVzIgorbXNnc3RyICIlc0F1dG9yZTogICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlcyIKK21zZ3N0ciAiJXNDb21taXR0ZXI6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc5MworbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICJJbXBvc3NpYmlsZSBsZWdnZXJlIGluZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgzMAorbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgogbXNnc3RyICIiCiAKLSM6IGdpdGs6MTIyNjkKLW1zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgotbXNnc3RyICJBcmNoaXZpbyBnaXQgbm9uIHRyb3ZhdG8uIgorIzogYnVpbHRpbi9jb21taXQuYzo4NDUgYnVpbHRpbi90YWcuYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICJQZXIgZmF2b3JlLCBzcGVjaWZpY2EgaWwgbWVzc2FnZ2lvIHVzYW5kbyBsJ29wemlvbmUgLW0gbyAtRi5cbiIKIAotIzogZ2l0azoxMjMxNgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZSIKLW1zZ3N0ciAiQXJnb21lbnRvIGFtYmlndW86ICclcycgw6ggc2lhIHJldmlzaW9uZSBjaGUgbm9tZSBkaSBmaWxlIgorIzogYnVpbHRpbi9jb21taXQuYzo5NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhpc3RpbmcgYXV0aG9yIGZvdW5kIHdpdGggJyVzJyIKK21zZ3N0ciAiTmVzc3VuIGF1dG9yZSBlc2lzdGVudGUgdHJvdmF0byBjb24gJyVzJyIKIAotIzogZ2l0azoxMjMyOAotbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCi1tc2dzdHIgIkdpdGs6IGFyZ29tZW50aSBlcnJhdGk6IgorIzogYnVpbHRpbi9jb21taXQuYzo5NTcgYnVpbHRpbi9jb21taXQuYzoxMTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAiIgogCi0jfiBtc2dpZCAibmV4dCIKLSN+IG1zZ3N0ciAic3VjYyIKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTk3Cittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiTCd1c28gZGkgZW50cmFtYmUgbGUgb3B6aW9uaSAtLXJlc2V0LWF1dGhvciBlIC0tYXV0aG9yIG5vbiBoYSBzZW5zbyIKIAotI34gbXNnaWQgInByZXYiCi0jfiBtc2dzdHIgInByZWMiCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMDgKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiIgogCi0jfiBtc2dpZCAiQ2Fubm90IGZpbmQgdGhlIGdpdCBkaXJlY3RvcnkgXCIlc1wiLiIKLSN+IG1zZ3N0ciAiRGlyZWN0b3J5IGdpdCBcIiVzXCIgbm9uIHRyb3ZhdGEuIgorIzogYnVpbHRpbi9jb21taXQuYzoxMDExCittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMTMKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAxNgorbXNnaWQgIk9wdGlvbnMgLS1zcXVhc2ggYW5kIC0tZml4dXAgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIkxlIG9wemlvbmkgLS1zcXVhc2ggZSAtLWZpeHVwIG5vbiBwb3Nzb25vIGVzc2VyZSB1c2F0ZSBpbnNpZW1lIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMjYKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAiU29sbyB1bmEgZGVsbGUgb3B6aW9uaSAtYy8tQy8tRi8tLWZpeHVwIHB1w7IgZXNzZXJlIHVzYXRhLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDI4Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLy0tZml4dXAuIgorbXNnc3RyICJMJ29wemlvbmUgLW0gbm9uIHB1w7IgZXNzZXJlIGNvbWJpbmF0YSBjb24gLWMvLUMvLUYvLS1maXh1cC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTAzNgorbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIkwnb3B6aW9uZSAtLXJlc2V0LWF1dGhvciBwdcOyIGVzc2VyZSB1c2F0YSBzb2xvIGNvbiAtQywgLWMgbyAtLWFtZW5kLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDUzCittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisiUHXDsiBlc3NlcmUgdXNhdGEgc29sbyB1bmEgZGVsbGUgb3B6aW9uaSAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0tIgorImludGVyYWN0aXZlLy0tcGF0Y2ggLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU1Cittc2dpZCAiTm8gcGF0aHMgd2l0aCAtLWluY2x1ZGUvLS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICJEZXZpIHNwZWNpZmljYXJlIHVuIHBhdGggc2UgdXNpIC0taW5jbHVkZS8tLW9ubHkuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTcKK21zZ2lkICJDbGV2ZXIuLi4gYW1lbmRpbmcgdGhlIGxhc3Qgb25lIHdpdGggZGlydHkgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1OQorbXNnaWQgIkV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG5vciAtbzsgYXNzdW1pbmcgLS1vbmx5IHBhdGhzLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA2OSBidWlsdGluL3RhZy5jOjU3NworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNzQKK21zZ2lkICJQYXRocyB3aXRoIC1hIGRvZXMgbm90IG1ha2Ugc2Vuc2UuIgorbXNnc3RyICJJIHBhdGggY29uIC1hIG5vbiBoYW5ubyBzZW5zby4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTI1NworbXNnaWQgImNvdWxkbid0IGxvb2sgdXAgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgdHJvdmFyZSBpbCBjb21taXQgYXBwZW5hIGNyZWF0byIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjU5Cittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGFuYWxpenphcmUgaWwgY29tbWl0IGFwcGVuYSBjcmVhdG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMwMAorbXNnaWQgImRldGFjaGVkIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzAyCittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAocm9vdC1jb21taXQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0NDYKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYW5hbGl6emFyZSBpbCBjb21taXQgSEVBRCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDg0IGJ1aWx0aW4vbWVyZ2UuYzo1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBhcHJpcmUgJyVzJyBwZXIgbGEgbGV0dHVyYSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIkZpbGUgTUVSR0VfSEVBRCBjb3Jyb3R0byAoJXMpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0OTgKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBsZWdnZXJlIGlsIG1lc3NhZ2dpbyBkaSBjb21taXQ6ICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICJDb21taXQgaW50ZXJyb3R0bzsgaWwgbWVzc2FnZ2lvIG5vbiDDqCBzdGF0byBtb2RpZmljYXRvLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAiSW50ZXJydXppb25lIGRlbCBjb21taXQgYSBjYXVzYSBkaSB1biBtZXNzYWdnaW8gZGkgY29tbWl0IHZ1b3RvLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NTEgYnVpbHRpbi9tZXJnZS5jOjkzNiBidWlsdGluL21lcmdlLmM6OTYxCittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgInNjcml0dHVyYSBkZWxsJ29nZ2V0dG8gZGkgY29tbWl0IG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTcyCittc2dpZCAiY2Fubm90IGxvY2sgSEVBRCByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc2Cittc2dpZCAiY2Fubm90IHVwZGF0ZSBIRUFEIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODcKK21zZ2lkICIiCisiUmVwb3NpdG9yeSBoYXMgYmVlbiB1cGRhdGVkLCBidXQgdW5hYmxlIHRvIHdyaXRlXG4iCisibmV3X2luZGV4IGZpbGUuIENoZWNrIHRoYXQgZGlzayBpcyBub3QgZnVsbCBvciBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzZXQgSEVBRFwiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiSWwgcmVwb3NpdG9yeSDDqCBzdGF0byBhZ2dpb3JuYXRvLCBtYSBub24gw6ggc3RhdG8gcG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGVcbiIKKyJuZXdfaW5kZXguIFZlcmlmaWNhIGNoZSBsJ3VuaXTDoCBkaXNjbyBub24gc2lhIHBpZW5hIG8gY2hlIGxhIHF1b3RhIG5vbiBzaWFcbiIKKyJzdGF0YSBzdXBlcmF0YSwgZWQgZXNlZ3VpIFwiZ2l0IHJlc2V0IEhFQURcIiBwZXIgaWwgcmlwcmlzdGluby4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjQwCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgImlsIHRhZyAnJXMnIMOoIGRhdnZlcm8gJyVzJyBxdWkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIk5vbiDDqCBpbCBub21lIGRpIHVuIG9nZ2V0dG8gdmFsaWRvICVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIlcyBub24gw6ggdW4gb2dnZXR0byAnJXMnIHZhbGlkbyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgIm5lc3N1biB0YWcgY29ycmlzcG9uZGUgZXNhdHRhbWVudGUgYSAnJXMnIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInNlYXJjaGluZyB0byBkZXNjcmliZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyJOZXNzdW4gdGFnIHB1w7IgZGVzY3JpdmVyZSAnJXMnLlxuIgorIlByb3ZhIGNvbiAtLWFsd2F5cywgbyBjcmVhIGRlaSB0YWcuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInRyYXZlcnNlZCAlbHUgY29tbWl0c1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKyJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzYKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiLS1sb25nIG5vbiDDqCBjb21wYXRpYmlsZSBjb24gLS1hYmJyZXY9MCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ2MgorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0ODIKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIKK21zZ3N0ciAiJyVzJzogbm9uIMOoIHVuIGZpbGUgcmVnb2xhcmUgbyB1biBsaW5rIHNpbWJvbGljbyIKKworIzogYnVpbHRpbi9kaWZmLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAib3B6aW9uZSBub24gdmFsaWRhOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6Mjk3Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIk5vbiDDqCB1biByZXBvc2l0b3J5IGdpdCIKKworIzogYnVpbHRpbi9kaWZmLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJvZ2dldHRvIG5vbiB2YWxpZG8gJyVzJyBzcGVjaWZpY2F0by4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gJWQgdHJlZXMgZ2l2ZW46ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgInBpw7kgZGkgZHVlIGJsb2Igc3BlY2lmaWNhdGk6ICclcyciCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJvZ2dldHRvIG5vbiBnZXN0aXRvICclcycgc3BlY2lmaWNhdG8uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAwCittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICJvZ2dldHRvICVzIG5vbiB0cm92YXRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjU5Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJbYWdnaW9ybmF0b10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiISAlLSpzICUtKnMgLT4gJXMgIChjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI3NCBidWlsdGluL2ZldGNoLmM6MzYwCittc2dpZCAiW3JlamVjdGVkXSIKK21zZ3N0ciAiW3Jlc3BpbnRvXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI4NQorbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiW3RhZyBhZ2dpb3JuYXRhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI4NyBidWlsdGluL2ZldGNoLmM6MzIyIGJ1aWx0aW4vZmV0Y2guYzozNDAKK21zZ2lkICIgICh1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZikiCittc2dzdHIgIiAgKGltcG9zc2liaWxlIGFnZ2lvcm5hcmUgaWwgcmVmIGxvY2FsZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMDUKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIltudW92YSB0YWddIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzA4Cittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICJbbnVvdm8gYnJhbmNoXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjMxMQorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW251b3ZvIHJlZl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNTYKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYWdnaW9ybmFyZSBpbCByZWYgbG9jYWxlIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzU2Cittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAiYWdnaW9ybmFtZW50byBmb3J6YXRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYyCittc2dpZCAiKG5vbi1mYXN0LWZvcndhcmQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozOTMgYnVpbHRpbi9mZXRjaC5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlICVzOiAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGRpZCBub3Qgc2VuZCBhbGwgbmVjZXNzYXJ5IG9iamVjdHNcbiIKK21zZ3N0ciAiJXMgbm9uIGhhIGludmlhdG8gdHV0dGkgZ2xpIG9nZ2V0dGkgbmVjZXNzYXJpXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIkRhICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ5OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisibm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBhZ2dpb3JuYXJlIGFsY3VuaSByZWYgbG9jYWxpOyBwcm92YSBjb25cbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHBlciByaW11b3ZlcmUgb2duaSBicmFuY2ggY2hlIHZhZGEgaW4gY29uZmxpdHRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU1NworbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW2VsaW1pbmF0b10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTggYnVpbHRpbi9yZW1vdGUuYzoxMDU1Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIobmVzc3VubykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gZmV0Y2ggZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIGlzIGlnbm9yZWQgZm9yICVzXG4iCittc2dzdHIgIkwnb3B6aW9uZSBcIiVzXCIgw6ggaWdub3JhdGEgcGVyICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODkwIGJ1aWx0aW4vcmVtb3RlLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTA3Cittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJOZXNzdW4gcmVwb3NpdG9yeSByZW1vdG8gc3BlY2lmaWNhdG8uIFBlciBmYXZvcmUsIHNwZWNpZmljYSB1biBVUkwgb1xuIgorImlsIG5vbWUgZGkgdW4gcmVtb3RlIGRhIGN1aSBwcmVsZXZhcmUgbnVvdmUgcmV2aXNpb25pLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkyNworbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIkRldmkgc3BlY2lmaWNhcmUgaWwgbm9tZSBkaSB1biB0YWcuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTc5Cittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgImZldGNoIC0tYWxsIG5vbiByaWNoaWVkZSBpbCByZXBvc2l0b3J5IGNvbWUgYXJnb21lbnRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTgxCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAwMAorbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAiJXMgbm9uIHZhbGlkbzogJyVzJyIKKworIzogYnVpbHRpbi9nYy5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgb2JqZWN0IGRpcmVjdG9yeSAlLipzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS4gWW91IG1heSBhbHNvXG4iCisicnVuIFwiZ2l0IGdjXCIgbWFudWFsbHkuIFNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9nYy5jOjI1MQorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiBjcmVhemlvbmUgZGVsIHRocmVhZCBub24gcml1c2NpdGE6ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNoZGlyOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo0NzggYnVpbHRpbi9ncmVwLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgbGVnZ2VyZSBpbCB0cmVlICglcykiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjUyNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZ3JlcCBmcm9tIG9iamVjdCBvZiB0eXBlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJzd2l0Y2ggYCVjJyBleHBlY3RzIGEgbnVtZXJpY2FsIHZhbHVlIgorbXNnc3RyICJzd2l0Y2ggJyVjJyByaWNoaWVkZSB1biB2YWxvcmUgbnVtZXJpY28iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjYwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhcHJpcmUgJyVzJyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODg1Cittc2dpZCAibm8gcGF0dGVybiBnaXZlbi4iCittc2dzdHIgIm5lc3N1biBtb2RlbGxvIHNwZWNpZmljYXRvLiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBvYmplY3QgJXMiCittc2dzdHIgIm9nZ2V0dG8gJXMgZXJyYXRvIgorCisjOiBidWlsdGluL2dyZXAuYzo5NDAKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTYzCittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4LiIKK21zZ3N0ciAiLS1jYWNoZWQgbyAtLXVudHJhY2tlZCBub24gcHXDsiBlc3NlcmUgdXNhdG8gY29uIC0tbm8taW5kZXguIgorCisjOiBidWlsdGluL2dyZXAuYzo5NjgKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cy4iCittc2dzdHIgIi0tbm8taW5kZXggbyAtLXVudHJhY2tlZCBub24gcG9zc29ubyBlc3NlcmUgdXNhdGUgY29uIGxlIHJldmlzaW9uaS4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk3MQorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5NzkKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjU5CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJmb3JtYXRvIGRpIGFpdXRvICclcycgbm9uIHJpY29ub3NjaXV0byIKKworIzogYnVpbHRpbi9oZWxwLmM6ODcKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICJFc2VjdXppb25lIGRpIGVtYWNzY2xpZW50IG5vbiByaXVzY2l0YS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwMAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAiVmVyaWZpY2EgZGVsbGEgdmVyc2lvbmUgZGkgZW1hY3NjbGllbnQgbm9uIHJpdXNjaXRhLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA4CisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgImxhIHZlcnNpb25lICclZCcgZGkgZW1hY3NjbGllbnQgw6ggdHJvcHBvIHZlY2NoaWEgKDwyMikuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMjYgYnVpbHRpbi9oZWxwLmM6MTU0IGJ1aWx0aW4vaGVscC5jOjE2MyBidWlsdGluL2hlbHAuYzoxNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4ZWMgJyVzJzogJXMiCittc2dzdHIgImVzZWN1emlvbmUgZGkgJyVzJyBub24gcml1c2NpdGE6ICVzIgorCisjOiBidWlsdGluL2hlbHAuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyInJXMnOiBwYXRoIGFkIHVuIHZpc3VhbGl6emF0b3JlIG1hbiBwYWdlcyBub24gc3VwcG9ydGF0by5cbiIKKyJVc2EgaW52ZWNlICdtYW4uPHRvb2w+LmNtZCcuIgorCisjOiBidWlsdGluL2hlbHAuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IGNtZCBmb3Igc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LnBhdGgnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJzogY29tYW5kbyBwZXIgdmlzdWFsaXp6YXRvcmUgbWFuIHBhZ2VzIHN1cHBvcnRhdG8uXG4iCisiUGVyIGZhdm9yZSB1c2EgJ21hbi48dG9vbD4ucGF0aCcgaW52ZWNlLiIKKworIzogYnVpbHRpbi9oZWxwLmM6Mjg3Cittc2dpZCAiVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBnaXQgY29tbWFuZHMgYXJlOiIKK21zZ3N0ciAiSSBjb21hbmRpIGdpdCB1c2F0aSBwacO5IGRpIGZyZXF1ZW50ZSBzb25vOiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVua25vd24gbWFuIHZpZXdlci4iCittc2dzdHIgIiclcyc6IHZpc3VhbGl6emF0b3JlIG1hbiBzY29ub3NjaXV0by4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3MgorbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAibmVzc3VuIHZpc3VhbGl6emF0b3JlIG1hbiBoYSBnZXN0aXRvIGxhIHJpY2hpZXN0YSIKKworIzogYnVpbHRpbi9oZWxwLmM6MzgwCittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAibmVzc3VuIHZpc3VhbGl6emF0b3JlIGluZm8gaGEgZ2VzdGl0byBsYSByaWNoaWVzdGEiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4iCittc2dzdHIgIiclcyc6IG5vbiDDqCB1bmEgZGlyZWN0b3J5IGRlbGxhIGRvY3VtZW50YXppb25lLiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMyIGJ1aWx0aW4vaGVscC5jOjQzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAidXNvOiAlcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo0NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYGdpdCAlcycgaXMgYWxpYXNlZCB0byBgJXMnIgorbXNnc3RyICInZ2l0ICVzIMOoIHVuIGFsaWFzIGRpICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2OQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxODkKK21zZ2lkICJvYmplY3Qgb2YgdW5leHBlY3RlZCB0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIzNgorbXNnaWQgImVhcmx5IEVPRiIKK21zZ3N0ciAiRU9GIHByZW1hdHVybyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjM3Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAiZXJyb3JlIGRpIGxldHR1cmEgaW4gaW5wdXQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI0OQorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICJ1c2F0aSBwacO5IGJ5dGUgZGkgcXVlbGxpIGRpc3BvbmliaWxpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNTYKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICJwYWNrIHRyb3BwbyBsYXJnbyBwZXIgbGEgZGVmaW5pemlvbmUgY29ycmVudGUgZGkgb2ZmX3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGNyZWFyZSAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXByaXJlIGlsIGZpbGUgcGFjayAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTEKK21zZ2lkICJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIKK21zZ3N0ciAibGEgZmlybWEgZGVsIHBhY2sgbm9uIGNvaW5jaWRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJWx1OiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NTAKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ1OAorbXNnaWQgImRlbHRhIGJhc2Ugb2Zmc2V0IGlzIG91dCBvZiBib3VuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBvYmplY3QgdHlwZSAlZCIKK21zZ3N0ciAidGlwbyBkaSBvZ2dldHRvICVkIHNjb25vc2NpdXRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0OTUKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTEwCittc2dpZCAic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAibm9uIMOoIHBvc3NpYmlsZSBsZWdnZXJlIGwnb2dnZXR0byAlcyBlc2lzdGVudGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIlRST1ZBVEEgQ09MTElTSU9ORSBTSEExIENPTiAlcyAhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAib2dnZXR0byBibG9iICVzIG5vbiB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjYxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICIlcyBub24gdmFsaWRvIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo2MTIKK21zZ2lkICJFcnJvciBpbiBvYmplY3QiCittc2dzdHIgIkVycm9yZSBuZWxsJ29nZ2V0dG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjYxNAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiTm9uIHR1dHRpIGdsaSBvZ2dldHRpIGZpZ2xpbyBkaSAlcyBzb25vIHJhZ2dpdW5naWJpbGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjY4NyBidWlsdGluL2luZGV4LXBhY2suYzo3MTMKK21zZ2lkICJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiCittc2dzdHIgImFwcGxpY2F6aW9uZSBkZWwgZGVsdGEgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NTAKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiUmljZXppb25lIGRlZ2xpIG9nZ2V0dGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg1MAorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIkluZGljaXp6YXppb25lIGRlZ2xpIG9nZ2V0dGkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg3MgorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAiaWwgcGFjayDDqCBjb3Jyb3R0byAoU0hBMSBub24gY29ycmlzcG9uZGUpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NzcKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODgwCittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjkwMworbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIlJpc29sdXppb25lIGRlaSBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTU0Cittc2dpZCAiY29uZnVzaW9uIGJleW9uZCBpbnNhbml0eSIKK21zZ3N0ciAiY29uZnVzaW9uZSBhbCBkaSBsw6AgZGVsbGEgZm9sbGlhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gInBhY2sgaGEgJWQgZGVsdGEgaXJyaXNvbHRvIgorbXNnc3RyWzFdICJwYWNrIGhhICVkIGRlbHRhIGlycmlzb2x0aSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTk4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgImwnb2dnZXR0byBsb2NhbGUgJXMgw6ggY29ycm90dG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMDEKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAiZXJyb3JlIG5lbGxhIGNoaXVzdXJhIGRlbCBmaWxlIHBhY2siCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlIGtlZXAgZmlsZSAnJXMnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzY3JpdmVyZSBpbCBmaWxlIGtlZXAgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTM1Cittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXJjaGl2aWFyZSBpbCBmaWxlIHBhY2siCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNDYKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXJjaGl2aWFyZSBpbmRleCBmaWxlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgaWwgZmlsZSBwYWNrICclcycgZXNpc3RlbnRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI5NgorIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICJub24gZGVsdGE6ICVkIG9nZ2V0dG8iCittc2dzdHJbMV0gIm5vbiBkZWx0YTogJWQgb2dnZXR0aSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICJsdW5naGV6emEgZGVsbGEgY2F0ZW5hID0gJWQ6ICVsdSBvZ2dldHRvIgorbXNnc3RyWzFdICJsdW5naGV6emEgZGVsbGEgY2F0ZW5hID0gJWQ6ICVsdSBvZ2dldHRpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzMwCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM3NCBidWlsdGluL2luZGV4LXBhY2suYzoxMzc3CisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzg5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICIlcyBlcnJhdG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDcKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiLS1maXgtdGhpbiBub24gcHXDsiBlc3NlcmUgdXNhdG8gc2VuemEgLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQxMSBidWlsdGluL2luZGV4LXBhY2suYzoxNDIxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICJpbCBub21lIGRlbCBmaWxlIHBhY2sgJyVzJyBub24gdGVybWluYSBjb24gJy5wYWNrJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzMAorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiLS12ZXJpZnkgc2VuemEgdW4gbm9tZSBkZWwgZmlsZSBwYWNrIHNwZWNpZmljYXRvIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmxlIHJlbmRlcmUgJXMgc2NyaXZpYmlsZSBkYWwgZ3J1cHBvIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgZXNlZ3VpcmUgbG8gc3RhdCBkaSAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgcGF0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIG9mIGEgd3JvbmcgZm9ybWF0IHZlcnNpb24gJWQgZnJvbSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgZ2l0IGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMjIgYnVpbHRpbi9pbml0LWRiLmM6MzI1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIlcyBlc2lzdGUgZ2nDoCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICJpbXBvc3NpYmlsZSBnZXN0aXJlIGlsIHRpcG8gZGkgZmlsZSAlZCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBtb3ZlICVzIHRvICVzIgorbXNnc3RyICJpbXBvc3NpYmlsZSBzcG9zdGFyZSAlcyBpbiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZ2l0IGxpbmsgJXMiCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgY3JlYXJlIGlsIGxpbmsgZ2l0ICVzIgorCisjLgorIy4gKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCisjLiAqIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gKiAiIiwgYW5kIHRoZSBsYXN0ICclcyVzJyBpcyB0aGUgdmVyYmF0aW0gZGlyZWN0b3J5IG5hbWUuCisjLgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzIHJlcG9zaXRvcnkgR2l0IGluICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDIwCittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyIKK21zZ3N0ciAiUmVpbml6aWFsaXp6YXRvIHVuIGVzaXN0ZW50ZSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDIwCittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkiCittc2dzdHIgIkluaXppYWxpenphdG8gdW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMQorbXNnaWQgIiBzaGFyZWQiCittc2dzdHIgIiBjb25kaXZpc28iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ0MAorbXNnaWQgImNhbm5vdCB0ZWxsIGN3ZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjEgYnVpbHRpbi9pbml0LWRiLmM6NTI4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisiJXMgKG8gLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vbiBjb25zZW50aXRvIHNlbnphIHNwZWNpZmljYXJlICVzIChvIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NzgKK21zZ2lkICJDYW5ub3QgYWNjZXNzIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIkltcG9zc2liaWxlIGFjY2VkZXJlIGFsbGEgZGlyZWN0b3J5IGRpIGxhdm9ybyBjb3JyZW50ZSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJPdXRwdXQgZmluYWxlOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjQwMSBidWlsdGluL2xvZy5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgbGVnZ2VyZSBsJ29nZ2V0dG8gJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdHlwZTogJWQiCittc2dzdHIgIlRpcG8gc2Nvbm9zY2l1dG86ICVkIgorCisjOiBidWlsdGluL2xvZy5jOjYwMgorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgImZvcm1hdC5oZWFkZXJzIG5vbiBoYSBhbGN1biB2YWxvcmUiCisKKyM6IGJ1aWx0aW4vbG9nLmM6Njc2Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICJpbCBub21lIGRlbGxhIGRpcmVjdG9yeSBkaSBvdXRwdXQgw6ggdHJvcHBvIGx1bmdvIgorCisjOiBidWlsdGluL2xvZy5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBwYXRjaCBmaWxlICVzIgorbXNnc3RyICJJbXBvc3NpYmlsZSBhcHJpcmUgaWwgZmlsZSBwYXRjaCAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo3MDEKK21zZ2lkICJOZWVkIGV4YWN0bHkgb25lIHJhbmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjcwOQorbXNnaWQgIk5vdCBhIHJhbmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjc4NgorbXNnaWQgIkNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGluLXJlcGx5LXRvOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjkzMgorbXNnaWQgIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICJEdWUgZGlyZWN0b3J5IGRpIG91dHB1dD8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTE1MworIywgYy1mb3JtYXQKK21zZ2lkICJib2d1cyBjb21taXR0ZXIgaW5mbyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjExOTgKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjAwCittc2dpZCAiLS1zdWJqZWN0LXByZWZpeCBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjA4Cittc2dpZCAiLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLW9ubHkgbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL2xvZy5jOjEyMTAKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1zdGF0dXMgbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL2xvZy5jOjEyMTIKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sgbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzUKK21zZ2lkICJzdGFuZGFyZCBvdXRwdXQsIG9yIGRpcmVjdG9yeSwgd2hpY2ggb25lPyIKK21zZ3N0ciAic3RhbmRhcmQgb3V0cHV0LCBvIGRpcmVjdG9yeSwgcXVhbGUgZGVpIGR1ZT8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGNyZWFyZSBsYSBkaXJlY3RvcnkgJyVzJyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzkwCittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgIkNyZWF6aW9uZSBkZWkgZmlsZSBkaSBvdXRwdXQgbm9uIHJpdXNjaXRhIgorCisjOiBidWlsdGluL2xvZy5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTUxMCBidWlsdGluL2xvZy5jOjE1MTIgYnVpbHRpbi9sb2cuYzoxNTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gY29tbWl0ICVzIgorbXNnc3RyICJDb21taXQgJXMgc2Nvbm9zY2l1dG8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MAorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAibG8gc3dpdGNoICdtJyByaWNoaWVkZSB1biB2YWxvcmUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSB0cm92YXJlIGxhIHN0cmF0ZWdpYSBkaSBtZXJnZSAnJXMnLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkxlIHN0cmF0ZWdpZSBkaXNwb25pYmlsaSBzb25vOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiTGUgc3RyYXRlZ2llIHBlcnNvbmFsaXp6YXRlIGRpc3BvbmliaWxpIHNvbm86IgorCisjOiBidWlsdGluL21lcmdlLmM6MjQwCittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgZXNlZ3VpcmUgc3Rhc2guIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ1Cittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICJlc2VjdXppb25lIGRpIHN0YXNoIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICJub24gw6ggdW4gb2dnZXR0byB2YWxpZG86ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MjY5IGJ1aWx0aW4vbWVyZ2UuYzoyODYKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICJyZWFkLXRyZWUgbm9uIHJpdXNjaXRvIgorCisjOiBidWlsdGluL21lcmdlLmM6MzE2Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM2MQorbXNnaWQgIldyaXRpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAiU2NyaXR0dXJhIGRpIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNjMKK21zZ2lkICJGaW5pc2hpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAiQ29tcGxldGFtZW50byBkaSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAiTmVzc3VuIG1lc3NhZ2dpbyBkaSBtZXJnZSAtLSBIRUFEIG5vbiB2aWVuZSBhZ2dpb3JuYXRvXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyBub24gcHVudGEgYWQgdW4gY29tbWl0IgorCisjOiBidWlsdGluL21lcmdlLmM6NTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIlN0cmluZ2EgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBlcnJhdGE6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NjI5Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Njc5Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICJsZXR0dXJhIGRlbGxhIGNhY2hlIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY5NworbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBpbmRleC4iCittc2dzdHIgIkltcG9zc2liaWxlIHNjcml2ZXJlIGluZGV4LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcxMAorbXNnaWQgIk5vdCBoYW5kbGluZyBhbnl0aGluZyBvdGhlciB0aGFuIHR3byBoZWFkcyBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjcyNAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJPcHppb25lIHBlciBtZXJnZS1yZWN1cnNpdmUgc2Nvbm9zY2l1dGE6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICJub24gw6ggcG9zc2liaWxlIHNjcml2ZXJlICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBsZWdnZXJlIGRhICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4OTIKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorIlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTE2Cittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICJNZXNzYWdnaW8gZGkgY29tbWl0IHZ1b3RvLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkyOAorIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIlNwbGVuZGlkby5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICIiCisiTWVyZ2UgYXV0b21hdGljbyBmYWxsaXRvOyByaXNvbHZpIGkgY29uZmxpdHRpIGVkIGVzZWd1aXJlIGlsIGNvbW1pdFxuIgorImRlbCByaXN1bHRhdG8uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IgorbXNnc3RyICInJXMnIG5vbiDDqCB1biBjb21taXQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDUwCittc2dpZCAiTm8gY3VycmVudCBicmFuY2guIgorbXNnc3RyICJOZXNzdW4gYnJhbmNoIGNvcnJlbnRlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTIKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIk5lc3N1biByZW1vdGUgcGVyIGlsIGJyYW5jaCBjb3JyZW50ZS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDU0Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJOZXNzdW4gdXBzdHJlYW0gZGkgZGVmYXVsdCBkZWZpbml0byBwZXIgaWwgYnJhbmNoIGNvcnJlbnRlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0NiBidWlsdGluL21lcmdlLmM6MTMwMworIywgYy1mb3JtYXQKK21zZ2lkICIlcyAtIG5vdCBzb21ldGhpbmcgd2UgY2FuIG1lcmdlIgorbXNnc3RyICIlcyAtIG5vbiDDqCBxdWFsY29zYSBwZXIgY3VpIHBvc3NpYW1vIGVzZWd1aXJlIGlsIG1lcmdlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIxNAorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiTm9uIGMnw6ggbmVzc3VuIG1lcmdlIGRhIGludGVycm9tcGVyZSAobWFuY2EgTUVSR0VfSEVBRCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjMwIGdpdC1wdWxsLnNoOjMxCittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iCittc2dzdHIgIiIKKyJJbCBtZXJnZSBub24gw6ggc3RhdG8gY29uY2x1c28gKGVzaXN0ZSBNRVJHRV9IRUFEKS5cbiIKKyJQZXIgZmF2b3JlLCBlc2VndWkgaWwgY29tbWl0IGRlbGxlIG1vZGlmaWNoZSBwcmltYSBkZWwgbWVyZ2UuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzMyBnaXQtcHVsbC5zaDozNAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiSWwgbWVyZ2Ugbm9uIMOoIHN0YXRvIGNvbmNsdXNvIChlc2lzdGUgTUVSR0VfSEVBRCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzNworbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIgorbXNnc3RyICIiCisiSWwgY2hlcnJ5LXBpY2sgbm9uIMOoIHN0YXRvIGNvbmNsdXNvIChlc2lzdGUgQ0hFUlJZX1BJQ0tfSEVBRCkuXG4iCisiUGVyIGZhdm9yZSwgZXNlZ3VpIGlsIGNvbW1pdCBkZWxsZSBtb2RpZmljaGUgcHJpbWEgZGVsIG1lcmdlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNDAKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIklsIHR1byBjaGVycnktcGljayBub24gw6ggc3RhdG8gY29uY2x1c28gKENIRVJSWV9QSUNLX0hFQUQgZXNpc3RlKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjQ5Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tc3F1YXNoIHdpdGggLS1uby1mZi4iCittc2dzdHIgIkltcG9zc2liaWxlIGNvbWJpbmFyZSAtLXNxdWFzaCBjb24gLS1uby1vZmYuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI1NAorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLW5vLWZmIHdpdGggLS1mZi1vbmx5LiIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgY29tYmluYXJlIC0tbm8tZmYgY29uIC0tZmYtb25seS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjYxCittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIk5lc3N1biBjb21taXQgc3BlY2lmaWNhdG8gZSBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub24gZGVmaW5pdG8uIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5MworbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTYKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI5OAorbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICJBZ2dpb3JuYW1lbnRvIGRpICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICJOby5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0OTAKK21zZ2lkICJOb3QgcG9zc2libGUgdG8gZmFzdC1mb3J3YXJkLCBhYm9ydGluZy4iCittc2dzdHIgIkZhc3QtZm9yd2FyZCBub24gcG9zc2liaWxlLCBzdG9wLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MTMgYnVpbHRpbi9tZXJnZS5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIlRlbnRhdGl2byBjb24gbGEgc3RyYXRlZ2lhIGRpIG1lcmdlICVzLi4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICJOZXNzdW5hIHN0cmF0ZWdpYSBkaSBtZXJnZSBoYSBnZXN0aXRvIGlsIG1lcmdlLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAiTWVyZ2UgY29uIGxhIHN0cmF0ZWdpYSAlcyBmYWxsaXRvLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJVc2luZyB0aGUgJXMgdG8gcHJlcGFyZSByZXNvbHZpbmcgYnkgaGFuZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTYwNgorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2Ugd2VudCB3ZWxsOyBzdG9wcGVkIGJlZm9yZSBjb21taXR0aW5nIGFzIHJlcXVlc3RlZFxuIgorbXNnc3RyICIiCisiSWwgbWVyZ2UgYXV0b21hdGljbyDDqCBhbmRhdG8gYSBidW9uIGZpbmU7IGZlcm1hdG8gcHJpbWEgZGVsIGNvbW1pdCBjb21lICIKKyJyaWNoaWVzdG9cbiIKKworIzogYnVpbHRpbi9tdi5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjExMgorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjExNQorbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIm5vbiDDqCBwb3NzaWJpbGUgc3Bvc3RhcmUgbGEgZGlyZWN0b3J5IGluIHPDqSBzdGVzc2EiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTgKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICJub24gw6ggcG9zc2liaWxlIHNwb3N0YXJlIGxhIGRpcmVjdG9yeSBzdSB1biBmaWxlIgorCisjOiBidWlsdGluL212LmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aD8gJS4qcyBpcyBpbiBpbmRleD8iCittc2dzdHIgIkVoPyAlLipzIHNpIHRyb3ZhIGluIGluZGV4PyIKKworIzogYnVpbHRpbi9tdi5jOjE0MAorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgImxhIGRpcmVjdG9yeSBzb3JnZW50ZSDDqCB2dW90YSIKKworIzogYnVpbHRpbi9tdi5jOjE3MQorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgIm5vbiDDqCBzb3R0byBjb250cm9sbG8gZGkgdmVyc2lvbmUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzMKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgImxhIGRlc3RpbmF6aW9uZSBlc2lzdGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAib3ZlcndyaXRpbmcgJyVzJyIKK21zZ3N0ciAic292cmFzY3JpdHR1cmEgZGkgJXMgaW4gY29yc28iCisKKyM6IGJ1aWx0aW4vbXYuYzoxODQKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJJbXBvc3NpYmlsZSBzb3ZyYXNjcml2ZXJlIgorCisjOiBidWlsdGluL212LmM6MTg3Cittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICJmb250aSBtdWx0aXBsZSBwZXIgbGEgc3Rlc3NhIGRlc3RpbmF6aW9uZSIKKworIzogYnVpbHRpbi9tdi5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgc291cmNlPSVzLCBkZXN0aW5hdGlvbj0lcyIKK21zZ3N0ciAiJXMsIHNvcmdlbnRlPSVzLCBkZXN0aW5hemlvbmU9JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAiUmlub21pbmF6aW9uZSBkaSAlcyBpbiAlcyBpbiBjb3Jzb1xuIgorCisjOiBidWlsdGluL212LmM6MjE1IGJ1aWx0aW4vcmVtb3RlLmM6NzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICJyaW5vbWluYSBkaSAnJXMnIG5vbiByaXVzY2l0YSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiaW1wb3NzaWJpbGUgYXZ2aWFyZSAnc2hvdycgcGVyIGwnb2dnZXR0byAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTQ1Cittc2dpZCAiY2FuJ3QgZmRvcGVuICdzaG93JyBvdXRwdXQgZmQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcGlwZSB0byAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNzUgYnVpbHRpbi90YWcuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBmaWxlICclcyciCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgY3JlYXJlIGlsIGZpbGUgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE4OQorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiUGVyIGZhdm9yZSBzcGVjaWZpY2EgaWwgY29udGVudXRvIGRlbGxlIG5vdGUgdXNhbmRvIGxlIG9wemlvbmkgLW0gbyAtRiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIxMCBidWlsdGluL25vdGVzLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICJSaW1vemlvbmUgZGVsbGEgbm90YSBwZXIgbCdvZ2dldHRvICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGwnb2dnZXR0byBub3RhIgorCisjOiBidWlsdGluL25vdGVzLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBub3RlIGNvbnRlbnRzIGhhcyBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgIklsIGNvbnRlbnV0byBkZWxsYSBub3RhIMOoIHN0YXRvIGxhc2NpYXRvIGluICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUxIGJ1aWx0aW4vdGFnLmM6NTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgImltcG9zc2liaWxlIGxlZ2dlcmUgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1MyBidWlsdGluL3RhZy5jOjU0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgIm5vbiDDqCBzdGF0byBwb3NzaWJpbGUgYXByaXJlIG8gbGVnZ2VyZSAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjcyIGJ1aWx0aW4vbm90ZXMuYzo0NDUgYnVpbHRpbi9ub3Rlcy5jOjQ0NworIzogYnVpbHRpbi9ub3Rlcy5jOjUwNyBidWlsdGluL25vdGVzLmM6NTYxIGJ1aWx0aW4vbm90ZXMuYzo2NDQKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NDkgYnVpbHRpbi9ub3Rlcy5jOjcyNCBidWlsdGluL25vdGVzLmM6NzY2CisjOiBidWlsdGluL25vdGVzLmM6OTY4IGJ1aWx0aW4vcmVzZXQuYzoyOTMgYnVpbHRpbi90YWcuYzo1NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3NQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgIkxldHR1cmEgZGVsbCdvZ2dldHRvICclcycgbm9uIHJpdXNjaXRhLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI5OQorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiVmFsb3JlIGRpIG5vdGVzLnJld3JpdGVNb2RlIGVycmF0bzogJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgcmlzY3JpdmVyZSBsZSBub3RlIGluICVzIChhbCBkaSBmdW9yaSBkaSByZWZzL25vdGVzLykiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgdGhlCisjLiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcyBpdHMgdmFsdWUKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICJWYWxvcmUgZGkgJXMgZXJyYXRvOiAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiUmlnYSBkaSBpbnB1dCBtYWxmb3JtYXRhOiAnJXMnLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ1NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY29weSBub3RlcyBmcm9tICclcycgdG8gJyVzJyIKK21zZ3N0ciAiQ29waWEgZGVsbGUgbm90ZSBkYSAnJXMnIGEgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDAgYnVpbHRpbi9ub3Rlcy5jOjU1NCBidWlsdGluL25vdGVzLmM6NjI3CisjOiBidWlsdGluL25vdGVzLmM6NjM5IGJ1aWx0aW4vbm90ZXMuYzo3MTIgYnVpbHRpbi9ub3Rlcy5jOjc1OQorIzogYnVpbHRpbi9ub3Rlcy5jOjEwMzMKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICJ0cm9wcGkgcGFyYW1ldHJpIgorCisjOiBidWlsdGluL25vdGVzLmM6NTEzIGJ1aWx0aW4vbm90ZXMuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAiTmVzc3VuYSBub3RhIHRyb3ZhdGEgcGVyIGwnb2dnZXR0byAlcy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4NSBidWlsdGluL25vdGVzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiU292cmFzY3JpdHR1cmEgZGVsbGUgbm90ZSBlc2lzdGVudGkgcGVyIGwnb2dnZXR0byAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NjM1Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICJ0cm9wcGkgcG9jaGkgcGFyYW1ldHJpIgorCisjOiBidWlsdGluL25vdGVzLmM6NjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIkltcG9zc2liaWxlIGNvcGlhcmUgbGUgbm90ZS4gVHJvdmF0ZSBub3RlIGVzaXN0ZW50aSBwZXIgbCdvZ2dldHRvICVzLiBVc2EgIgorIictZicgcGVyIHNvdnJhc2NyaXZlcmUgbGUgbm90ZSBlc2lzdGVudGkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgIk5vdGUgbWFuY2FudGkgcGVyIGwnb2dnZXR0byBzb3JnZW50ZSAlcy4gSW1wb3NzaWJpbGUgY29waWFyZS4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorIkxlIG9wemlvbmkgLW0vLUYvLWMvLUMgcGVyIGlsIHNvdHRvY29tYW5kbyAnZWRpdCcgc29ubyBkZXByZWNhdGUuXG4iCisiUGVyIGZhdm9yZSB1c2EgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGludmVjZS5cbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3MQorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiTCdvZ2dldHRvICVzIG5vbiBoYSBub3RlLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6MTEwMyBidWlsdGluL3JlbW90ZS5jOjE1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiU290dG9jb21hbmRvIHNjb25vc2NpdXRvOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgInZlcnNpb25lICVzIGRpIGluZGV4IG5vbiBzdXBwb3J0YXRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAidmVyc2lvbmUgJyVzJyBkaSBpbmRleCBlcnJhdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJvcHRpb24gJXMgZG9lcyBub3QgYWNjZXB0IG5lZ2F0aXZlIGZvcm0iCittc2dzdHIgImwnb3B6aW9uZSAlcyBub24gYWNjZXR0YSBmb3JtZSBuZWdhdGl2ZSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMzY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSB2YWx1ZSAnJXMnIGZvciBvcHRpb24gJXMiCittc2dzdHIgImltcG9zc2liaWxlIGFuYWxpenphcmUgaWwgdmFsb3JlICclcycgcGVyIGwnb3B6aW9uZSAlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6NDUKK21zZ2lkICJ0YWcgc2hvcnRoYW5kIHdpdGhvdXQgPHRhZz4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6NjQKK21zZ2lkICItLWRlbGV0ZSBvbmx5IGFjY2VwdHMgcGxhaW4gdGFyZ2V0IHJlZiBuYW1lcyIKK21zZ3N0ciAiLS1kZWxldGUgYWNjZXR0YSBzb2xvIG5vbWkgZGVpIHJlZiBkaSBkZXN0aW5hemlvbmUgaW4gY2hpYXJvIgorCisjOiBidWlsdGluL3B1c2guYzo5OQorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorIklsIGJyYW5jaCBjb3JyZW50ZSAlcyBub24gaGEgYWxjdW4gYnJhbmNoIHVwc3RyZWFtLlxuIgorIlBlciBlc2VndWlyZSBpbCBwdXNoIGRlbCBicmFuY2ggY29ycmVudGUgZWQgaW1wb3N0YXJlIHJlbW90ZSBjb21lIHVwc3RyZWFtLCB1c2FcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTM2CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICJJbCBicmFuY2ggY29ycmVudGUgJXMgaGEgYnJhbmNoIG11bHRpcGxpIGluIHVwc3RyZWFtOyBwdXNoIG5vbiBlc2VndWl0by4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3NAorbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisiTm9uIMOoIHN0YXRvIHNwZWNpZmljYXRvIGFsY3VuIHJlZnNwZWMgcGVyIGlsIHB1c2gsIGUgcHVzaC5kZWZhdWx0IMOoIFwibm90aGluZ1wiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgxCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0aXAgb2YgeW91ciBjdXJyZW50IGJyYW5jaCBpcyBiZWhpbmRcbiIKKyJpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LiBNZXJnZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy4gJ2dpdCBwdWxsJylcbiIKKyJiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxODcKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBJZiB5b3UgZGlkIG5vdCBpbnRlbmQgdG8gcHVzaCB0aGF0IGJyYW5jaCwgeW91IG1heSB3YW50IHRvXG4iCisic3BlY2lmeSBicmFuY2hlcyB0byBwdXNoIG9yIHNldCB0aGUgJ3B1c2guZGVmYXVsdCcgY29uZmlndXJhdGlvblxuIgorInZhcmlhYmxlIHRvICdjdXJyZW50JyBvciAndXBzdHJlYW0nIHRvIHB1c2ggb25seSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE5MworbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgbWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIlB1c2hpbmcgdG8gJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgInJlcG9zaXRvcnkgJyVzJyBlcnJhdG8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MAorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisiTmVzc3VuYSBkZXN0aW5hemlvbmUgcGVyIGlsIHB1c2ggY29uZmlndXJhdGEuXG4iCisiU3BlY2lmaWNhIHVuIFVSTCBkYWxsYSByaWdhIGRpIGNvbWFuZG8gb3BwdXJlIGNvbmZpZ3VyYXJlIHVuIHJlcG9zaXRvcnkgIgorInJlbW90byB1c2FuZG9cbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5vbWU+IDx1cmw+XG4iCisiXG4iCisiZSBwb2kgZXNlZ3VpcmUgaWwgcHVzaCB1c2FuZG8gaWwgbm9tZSBkZWwgcmVtb3RlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxub21lPlxuIgorCisjOiBidWlsdGluL3B1c2guYzoyODUKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIGUgLS10YWdzIG5vbiBzb25vIGNvbXBhdGliaWxpIgorCisjOiBidWlsdGluL3B1c2guYzoyODYKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5MQorbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3IgZSAtLXRhZ3Mgbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5MgorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk3Cittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIGUgLS1taXJyb3Igbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM4NQorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSBub24gw6ggY29tcGF0aWJpbGUgY29uIC0tYWxsLCAtLW1pcnJvciBlIC0tdGFncyIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzg3Cittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIG5vbiBoYSBzZW5zbyBzZW56YSBhbGN1biByZWYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRpbmcgJXMiCittc2dzdHIgIkFnZ2lvcm5hbWVudG8gZGkgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIi0tbWlycm9yIMOoIHBlcmljb2xvc28gZSBkZXByZWNhdG87IHBlciBmYXZvcmVcbiIKKyJcdCB1c2EgaW52ZWNlIC0tbWlycm9yLWZldGNoIG8gLS1taXJyb3ItcHVzaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmdvbWVudG8gZGkgbWlycm9yIHNjb25vc2NpdXRvOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICJzcGVjaWZpY2FyZSB1biBicmFuY2ggbWFzdGVyIGNvbiAtLW1pcnJvciBub24gaGEgc2Vuc28iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NSBidWlsdGluL3JlbW90ZS5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJpbCByZW1vdG8gJXMgZXNpc3RlIGdpw6AuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5OSBidWlsdGluL3JlbW90ZS5jOjY1MAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biBub21lIGRpIHJlbW90byB2YWxpZG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCBtYXN0ZXIgJyVzJyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBjb25maWd1cmFyZSBpbCBtYXN0ZXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAicGnDuSBkaSB1biAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDAgYnVpbHRpbi9yZW1vdGUuYzo0NDgKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIoY29ycmlzcG9uZGVudGUpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ1MgorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIoZWxpbWluYSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTk1IGJ1aWx0aW4vcmVtb3RlLmM6NjAxIGJ1aWx0aW4vcmVtb3RlLmM6NjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyB0byAnJXMnIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGFnZ2l1bmdlcmUgJyVzJyBhICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjM5IGJ1aWx0aW4vcmVtb3RlLmM6NzkyIGJ1aWx0aW4vcmVtb3RlLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAlcyIKK21zZ3N0ciAiUmVtb3RlIG5vbiBlc2lzdGVudGU6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVuYW1lIGNvbmZpZyBzZWN0aW9uICclcycgdG8gJyVzJyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSByaW5vbWluYXJlIGxhIHNlemlvbmUgZGkgY29uZmlndXJhemlvbmUgZGEgJyVzJyBpbiAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY2MiBidWlsdGluL3JlbW90ZS5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgcmltdW92ZXJlIGxhIHNlemlvbmUgZGkgY29uZmlndXJhemlvbmUgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0ICclcyciCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgaW1wb3N0YXJlICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJlbGltaW5hemlvbmUgZGkgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNyZWF0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJjcmVhemlvbmUgZGkgJyVzJyBub24gcml1c2NpdGEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzY0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgYnJhbmNoICVzIgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIHJpbXVvdmVyZSBpbCBicmFuY2ggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODM0Cittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKKyJOb3RhOiB1biBicmFuY2ggYWwgZGkgZnVvcmkgZGVsbGEgZ2VyYXJjaGlhIHJlZnMvcmVtb3Rlcy8gbm9uIMOoIHN0YXRvICIKKyJlbGltaW5hdG87XG4iCisicGVyIGVsaW1pbmFybG8sIHVzYXJlOiIKK21zZ3N0clsxXSAiIgorIk5vdGE6IGFsY3VuaSBicmFuY2ggYWwgZGkgZnVvcmkgZGVsbGEgZ2VyYXJjaGlhIHJlZnMvcmVtb3Rlcy8gbm9uIHNvbm8gc3RhdGkgIgorImVsaW1pbmF0aTtcbiIKKyJwZXIgZWxpbWluYXJsaSwgdXNhcmU6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk0MworIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NDYKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk0OAorbXNnaWQgIiBzdGFsZSAodXNlICdnaXQgcmVtb3RlIHBydW5lJyB0byByZW1vdmUpIgorbXNnc3RyICIgdmVjY2hpbyAodXNhcmUgJ2dpdCByZW1vdGUgcHJ1bmUnIHBlciByaW11b3ZlcmxvKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NTAKK21zZ2lkICIgPz8/IgorbXNnc3RyICI/Pz8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIKK21zZ3N0ciAiIgorImJyYW5jaC4lcy5tZXJnZSBub24gdmFsaWRvOyBpbXBvc3NpYmlsZSBlc2VndWlyZSBpbCByZWJhc2Ugc3UgPiAxIGJyYW5jaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmViYXNlcyBvbnRvIHJlbW90ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIG1lcmdlIGNvbiBpbCByZW1vdGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMgorbXNnaWQgIiAgICBhbmQgd2l0aCByZW1vdGUiCittc2dzdHIgIiAgICBlIGNvbiBpbCByZW1vdGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIm1lcmdlIGNvbiBpbCByZW1vdGUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwNQorbXNnaWQgIiAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTEKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgImNyZWEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NAorbXNnaWQgImRlbGV0ZSIKK21zZ3N0ciAiZWxpbWluYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU4Cittc2dpZCAidXAgdG8gZGF0ZSIKK21zZ3N0ciAiYWdnaW9ybmF0byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYxCittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjQKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAibG9jYWxlIG5vbiBhZ2dpb3JuYXRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIGVzZWd1ZSBpbCBwdXNoIHN1ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiogcmVtb3RlICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyMCBidWlsdGluL3JlbW90ZS5jOjEyODUKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKG5lc3N1biBVUkwpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjkgYnVpbHRpbi9yZW1vdGUuYzoxMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzMgYnVpbHRpbi9yZW1vdGUuYzoxMTM1IGJ1aWx0aW4vcmVtb3RlLmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBicmFuY2ggSEVBRDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIiCisiICBicmFuY2ggSEVBRCAobCdIRUFEIHJlbW90byDDqCBhbWJpZ3VvLCBwb3RyZWJiZSBlc3NlcmUgdW5vIGRlaSBzZWd1ZW50aSk6XG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIEJyYW5jaCByZW1vdG86JXMiCittc2dzdHJbMV0gIiAgQnJhbmNoIHJlbW90aTolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU0IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MQorbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjMKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICBCcmFuY2ggbG9jYWxlIGNvbmZpZ3VyYXRvIHBlciAnZ2l0IHB1bGwnOiIKK21zZ3N0clsxXSAiICBCcmFuY2ggbG9jYWxpIGNvbmZpZ3VyYXRpIHBlciAnZ2l0IHB1bGwnOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcxCittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgUmVmIGxvY2FsZSBjb25maWd1cmF0byBwZXIgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clsxXSAiICBSZWYgbG9jYWxpIGNvbmZpZ3VyYXRpIHBlciAnZ2l0IHB1c2gnJXM6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTYKK21zZ2lkICJDYW5ub3QgZGV0ZXJtaW5lIHJlbW90ZSBIRUFEIgorbXNnc3RyICJJbXBvc3NpYmlsZSBkZXRlcm1pbmFyZSBsJ0hFQUQgcmVtb3RvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTgKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBlbGltaW5hcmUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNgorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICJOb24gw6ggdW4gcmVmIHZhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgJXMiCittc2dzdHIgIk5vbiDDqCBzdGF0byBwb3NzaWJpbGUgY29uZmlndXJhcmUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3NQorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NQorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5OAorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbcHJ1bmVkXSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzODcgYnVpbHRpbi9yZW1vdGUuYzoxNDYxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIlJlbW90ZSAnJXMnIG5vbiBlc2lzdGVudGUiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQxNAorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgIm5lc3N1biByZW1vdGUgc3BlY2lmaWNhdG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ0NworbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1hZGQgLS1kZWxldGUgbm9uIGhhIHNlbnNvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIk5lc3N1bmEgVVJMIHRyb3ZhdGE6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTcKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAibWl4ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAic29mdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJoYXJkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgIm1lcmdlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImtlZXAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjc3Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjc5Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjk2Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBzY3JpdmVyZSBpbCBudW92byBpbmRleCBmaWxlLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCBvcmEgc2kgdHJvdmEgYSAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjEzMAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGxlZ2dlcmUgaW5kZXgiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMzMKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIHVuICVzIHJlc2V0IG5lbCBjb3JzbyBkaSB1biBtZXJnZS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSBhbmFsaXp6YXJlIGwnb2dnZXR0byAnJXMnLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMwMgorbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ3N0ciAiLS1wYXRjaCBub24gw6ggY29tcGF0aWJpbGUgY29uIC0te2hhcmQsbWl4ZWQsc29mdH0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTEKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIi0tbWl4ZWQgY29uIGkgcGF0aCDDqCBkZXByZWNhdGE7IHVzYSBpbnZlY2UgJ2dpdCByZXNldCAtLSA8cGF0aD4nLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXMgcmVzZXQgbm9uIMOoIGNvbnNlbnRpdG8gaW4gdW4gcmVwb3NpdG9yeSBzcG9nbGlvIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICIiCisiTm9uIMOoIHN0YXRvIHBvc3NpYmlsZSByaXByaXN0aW5hcmUgaW5kZXggZmlsZSAiCisiYWxsYSByZXZpc2lvbmUgJyVzJy4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzAgYnVpbHRpbi9yZXZlcnQuYzo5MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJXM6ICVzIG5vbiBwdcOyIGVzc2VyZSB1c2F0YSBjb24gJXMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTMxCittc2dpZCAicHJvZ3JhbSBlcnJvciIKK21zZ3N0ciAiZXJyb3JlIGRlbCBwcm9ncmFtbWEiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjIxCittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAicmV2ZXJ0IG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzYKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgImNoZXJyeS1waWNrIG5vbiByaXVzY2l0byIKKworIzogYnVpbHRpbi9ybS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGUgZmlsZSBhbmQgdGhlIEhFQURcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleFxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uc1xuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyInJXMnIGNvbnRpZW5lIGRlbGxlIG1vZGlmaWNoZSBsb2NhbGlcbiIKKyIodXNhIC0tY2FjaGVkIHBlciBtYW50ZW5lcmUgaWwgZmlsZSwgbyAtZiBwZXIgZm9yemFyZSBsYSByaW1vemlvbmUpIgorCisjOiBidWlsdGluL3JtLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybTogbm9uIMOoIHBvc3NpYmlsZSBlbGltaW5hcmUgJXMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBhdXRob3I6ICVzIgorbXNnc3RyICJBdXRvcmUgbWFuY2FudGU6ICVzIgorCisjOiBidWlsdGluL3RhZy5jOjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgbmFtZSB0b28gbG9uZzogJS4qcy4uLiIKK21zZ3N0ciAibm9tZSB0YWcgdHJvcHBvIGx1bmdvOiAlLipzLi4uIgorCisjOiBidWlsdGluL3RhZy5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJ0YWcgJyVzJyBub24gdHJvdmF0by4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiVGFnICclcycgZWxpbWluYXRvIChlcmEgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjM5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB2ZXJpZnkgdGhlIHRhZyAnJXMnIgorbXNnc3RyICJub24gw6ggc3RhdG8gcG9zc2liaWxlIHZlcmlmaWNhcmUgaWwgdGFnICclcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjQ5Cittc2dpZCAiIgorIlxuIgorIiNcbiIKKyIjIFdyaXRlIGEgdGFnIG1lc3NhZ2VcbiIKKyIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZC5cbiIKKyIjXG4iCittc2dzdHIgIiIKKyJcbiIKKyIjXG4iCisiIyBTY3JpdmVyZSB1biBtZXNzYWdnaW8gYXNzb2NpYXRvIGFsIHRhZ1xuIgorIiMgTGUgcmlnaGUgY2hlIGluaXppYW5vIGNvbiAnIycgdmVycmFubm8gaWdub3JhdGUuXG4iCisiI1xuIgorCisjOiBidWlsdGluL3RhZy5jOjI1NgorbXNnaWQgIiIKKyJcbiIKKyIjXG4iCisiIyBXcml0ZSBhIHRhZyBtZXNzYWdlXG4iCisiIyBMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorIiNcbiIKK21zZ3N0ciAiIgorIlxuIgorIiNcbiIKKyIjIFNjcml2ZXJlIHVuIG1lc3NhZ2dpbyBhc3NvY2lhdG8gYWwgdGFnXG4iCisiIyBMZSByaWdoZSBjaGUgaW5pemlhbm8gY29uICcjJyB2ZXJyYW5ubyBtYW50ZW51dGU7IHBvc3Nvbm8gZXNzZXJlIGNvbXVucXVlICIKKyJyaW1vc3NlIG1hbnVhbG1lbnRlLlxuIgorIiNcbiIKKworIzogYnVpbHRpbi90YWcuYzoyOTgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJpbXBvc3NpYmlsZSBmaXJtYXJlIGlsIHRhZyIKKworIzogYnVpbHRpbi90YWcuYzozMDAKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGFnIGZpbGUiCittc2dzdHIgImltcG9zc2liaWxlIHNjcml2ZXJlIGlsIGZpbGUgZGkgdGFnIgorCisjOiBidWlsdGluL3RhZy5jOjMyNQorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgInRpcG8gZGkgb2dnZXR0byBlcnJhdG8uIgorCisjOiBidWlsdGluL3RhZy5jOjMzOAorbXNnaWQgInRhZyBoZWFkZXIgdG9vIGJpZy4iCittc2dzdHIgImludGVzdGF6aW9uZSBkZWwgdGFnIHRyb3BwbyBncmFuZGUuIgorCisjOiBidWlsdGluL3RhZy5jOjM3MAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAibmVzc3VuIG1lc3NhZ2dpbyBwZXIgaWwgdGFnPyIKKworIzogYnVpbHRpbi90YWcuYzozNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAiSWwgbWVzc2FnZ2lvIGRlbCB0YWcgw6ggc3RhdG8gbGFzY2lhdG8gaW4gJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzo0MjUKK21zZ2lkICJzd2l0Y2ggJ3BvaW50cy1hdCcgcmVxdWlyZXMgYW4gb2JqZWN0IgorbXNnc3RyICJsbyBzd2l0Y2ggJ3BvaW50cy1hdCcgcmljaGllZGUgdW4gb2dnZXR0byIKKworIzogYnVpbHRpbi90YWcuYzo0MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIm5vbWUgb2dnZXR0byAnJXMnIG1hbGZvcm1hdG8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTA2Cittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIGUgLW4gbm9uIHNvbm8gY29tcGF0aWJpbGkiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTIzCittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAibCdvcHppb25lIC1uIMOoIGNvbnNlbnRpdGEgc29sbyBjb24gLWwuIgorCisjOiBidWlsdGluL3RhZy5jOjUyNQorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAibCdvcHppb25lIC0tY29udGFpbnMgw6ggY29uc2VudGl0YSBzb2xvIGNvbiAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTI3Cittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAibCdvcHppb25lIC0tcG9pbnRzLWF0IMOoIGNvbnNlbnRpdGEgc29sbyBjb24gLWwuIgorCisjOiBidWlsdGluL3RhZy5jOjUzNQorbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiw6ggY29uc2VudGl0YSB1bmEgc29sYSBvcHppb25lIHRyYSAtRiBlIC1tLiIKKworIzogYnVpbHRpbi90YWcuYzo1NTUKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgInRyb3BwaSBwYXJhbWV0cmkiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICInJXMnIG5vbiDDqCB1biBub21lIHRhZyB2YWxpZG8uIgorCisjOiBidWlsdGluL3RhZy5jOjU2NgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiaWwgdGFnICclcycgZXNpc3RlIGdpw6AiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW5ub3QgbG9jayB0aGUgcmVmIgorbXNnc3RyICIlczogaW1wb3NzaWJpbGUgcmlzZXJ2YXJlIGlsIHJlZiIKKworIzogYnVpbHRpbi90YWcuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCB1cGRhdGUgdGhlIHJlZiIKK21zZ3N0ciAiJXM6IGltcG9zc2liaWxlIGFnZ2lvcm5hcmUgaWwgcmVmIgorCisjOiBidWlsdGluL3RhZy5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRhZyAnJXMnIGFnZ2lvcm5hdG8gKGVyYSAlcylcbiIKKworIzogZ2l0LmM6MTYKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLiIKK21zZ3N0ciAiIgorIlZlZGkgJ2dpdCBoZWxwIDxjb21hbmRvPiBwZXIgbWFnZ2lvcmkgaW5mb3JtYXppb25pIHN1IHVuIGNvbWFuZG8gIgorInNwZWNpZmljby4iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxMzMgcGFyc2Utb3B0aW9ucy5oOjIzNQorbXNnaWQgIm4iCittc2dzdHIgIm4iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNDEKK21zZ2lkICJ0aW1lIgorbXNnc3RyICJ0ZW1wbyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE0OQorbXNnaWQgImZpbGUiCittc2dzdHIgImZpbGUiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTEKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJxdWFuZG8iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNTYKK21zZ2lkICJuby1vcCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkiCittc2dzdHIgIiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIyOAorbXNnaWQgImJlIG1vcmUgdmVyYm9zZSIKK21zZ3N0ciAicGnDuSBkZXR0YWdsaWF0byIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIzMAorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgIm1lbm8gZGV0dGFnbGlhdG8iCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzYKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAidXNhcmUgPG4+IGNpZnJlIHBlciBtb3N0cmFyZSBnbGkgaGFzaCBTSEEtMSIKKworIzogY29tbW9uLWNtZHMuaDo4Cittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICJBZ2dpdW5nZSBpbCBjb250ZW51dG8gZGVsIGZpbGUgYSBpbmRleCIKKworIzogY29tbW9uLWNtZHMuaDo5Cittc2dpZCAiRmluZCBieSBiaW5hcnkgc2VhcmNoIHRoZSBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJDZXJjYSBtZWRpYW50ZSByaWNlcmNhIGJpbmFyaWEgbGEgbW9kaWZpY2EgY2hlIGhhIGludHJvZG90dG8gdW4gYnVnIgorCisjOiBjb21tb24tY21kcy5oOjEwCittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkVsZW5jYSwgY3JlYSBvIGVsaW1pbmEgYnJhbmNoIgorCisjOiBjb21tb24tY21kcy5oOjExCittc2dpZCAiQ2hlY2tvdXQgYSBicmFuY2ggb3IgcGF0aHMgdG8gdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjEyCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJDbG9uYSB1biByZXBvc2l0b3J5IGluIHVuYSBudW92YSBkaXJlY3RvcnkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTMKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiUmVnaXN0cmEgbW9kaWZpY2hlIG5lbCByZXBvc2l0b3J5IgorCisjOiBjb21tb24tY21kcy5oOjE0Cittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjE1Cittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiU2NhcmljYSBvZ2dldHRpIGUgcmVmIGRhIHVuIGFsdHJvIHJlcG9zaXRvcnkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTYKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIlN0YW1wYSBsZSByaWdoZSBjb3JyaXNwb25kZW50aSBhZCB1biBtb2RlbGxvIgorCisjOiBjb21tb24tY21kcy5oOjE3Cittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IGdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIkNyZWEgdW4gcmVwb3NpdG9yeSBnaXQgdnVvdG8gbyByZWluaXppYWxpenphIHVubyBlc2lzdGVudGUiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTgKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJNb3N0cmEgbG9nIGRlbCBjb21taXQiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTkKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAiVW5pc2NlIGR1ZSBvIHBpw7kgY3Jvbm9sb2dpZSBkaSBzdmlsdXBwbyIKKworIzogY29tbW9uLWNtZHMuaDoyMAorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAiU3Bvc3RhIG8gcmlub21pbmEgdW4gZmlsZSwgdW5hIGRpcmVjdG9yeSBvIHVuIGxpbmsgc2ltYm9saWNvIgorCisjOiBjb21tb24tY21kcy5oOjIxCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgbWVyZ2Ugd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIkNvbWJpbmEgZmV0Y2hlICsgbWVyZ2UgZGEgdW4gYWx0cm8gcmVwb3NpdG9yeSBvIHVuIGJyYW5jaCBsb2NhbGUiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjIKK21zZ2lkICJVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIkFnZ2lvcm5hIGkgcmVmIHJlbW90aSBpbnNpZW1lIGFnbGkgb2dnZXR0aSBhc3NvY2lhdGkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjMKK21zZ2lkICJGb3J3YXJkLXBvcnQgbG9jYWwgY29tbWl0cyB0byB0aGUgdXBkYXRlZCB1cHN0cmVhbSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjQKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiUmlwcmlzdGluYSBsJ0hFQUQgY29ycmVudGUgYWxsbyBzdGF0byBzcGVjaWZpY2F0byIKKworIzogY29tbW9uLWNtZHMuaDoyNQorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjYKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiTW9zdHJhIHZhcmkgdGlwaSBkaSBvZ2dldHRpIgorCisjOiBjb21tb24tY21kcy5oOjI3Cittc2dpZCAiU2hvdyB0aGUgd29ya2luZyB0cmVlIHN0YXR1cyIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjI4Cittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIkNyZWEsIGVsZW5jYSwgZWxpbWluYSBvIHZlcmlmaWNhIHVuIG9nZ2V0dG8gdGFnIGZpcm1hdG8gY29uIEdQRyIKKworIzogZ2l0LWFtLnNoOjUwCittc2dpZCAiWW91IG5lZWQgdG8gc2V0IHlvdXIgY29tbWl0dGVyIGluZm8gZmlyc3QiCittc2dzdHIgIsOIIG5lY2Vzc2FyaW8gaW1wb3N0YXJlIGxlIGluZm9ybWF6aW9uaSBzdWwgY29tbWl0dGVyIgorCisjOiBnaXQtYW0uc2g6OTUKK21zZ2lkICIiCisiWW91IHNlZW0gdG8gaGF2ZSBtb3ZlZCBIRUFEIHNpbmNlIHRoZSBsYXN0ICdhbScgZmFpbHVyZS5cbiIKKyJOb3QgcmV3aW5kaW5nIHRvIE9SSUdfSEVBRCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6MTA1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0gcnVuIFwiJGNtZGxpbmUgLS1yZXNvbHZlZFwiLlxuIgorIklmIHlvdSB3b3VsZCBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBpbnN0ZWFkIHJ1biBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZyBydW4gXCIkY21kbGluZSAtLWFib3J0XCIuIgorbXNnc3RyICIiCisiUXVhbmRvIGhhaSByaXNvbHRvIGlsIHByb2JsZW1hIGVzZWd1aSBcIiRjbWRsaW5lIC0tcmVzb2x2ZWRcIi5cbiIKKyJTZSB2dW9pIHNhbHRhcmUgcXVlc3RhIHBhdGNoLCBlc2VndWkgaW52ZWNlIFwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisiUGVyIHJpcHJpc3RpbmFyZSBpbCBicmFuY2ggb3JpZ2luYWxlIGUgaW50ZXJyb21wZXJlIGwnYXBwbGljYXppb25lIGRlbGxlICIKKyJwYXRjaCBlc2VndWkgXCIkY21kbGluZSAtLWFib3J0XCIuIgorCisjOiBnaXQtYW0uc2g6MTIxCittc2dpZCAiQ2Fubm90IGZhbGwgYmFjayB0byB0aHJlZS13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDoxMzcKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDoxNTQKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiTGEgdHVhIHBhdGNoIMOoIHN0YXRhIG1vZGlmaWNhdGEgbWFudWFsbWVudGU/XG4iCisiTm9uIHB1w7IgZXNzZXJlIGFwcGxpY2F0YSBhaSBibG9iIHJlZ2lzdHJhdGkgbmVsIHByb3ByaW8gaW5kZXguIgorCisjOiBnaXQtYW0uc2g6MTYzCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDoyNzUKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAiUHXDsiBlc3NlcmUgYXBwbGljYXRhIHNvbG8gdW5hIHNlcmllIGRpIHBhdGNoIFN0R0lUIHBlciB2b2x0YSIKKworIzogZ2l0LWFtLnNoOjM2MgorIywgc2gtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZm9ybWF0ICRwYXRjaF9mb3JtYXQgaXMgbm90IHN1cHBvcnRlZC4iCittc2dzdHIgIklsIGZvcm1hdG8gcGF0Y2ggJHBhdGNoX2Zvcm1hdCBub24gw6ggc3VwcG9ydGF0by4iCisKKyM6IGdpdC1hbS5zaDozNjQKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIlJpbGV2YW1lbnRvIGRlbCBmb3JtYXRvIGRlbGxhIHBhdGNoIG5vbiByaXVzY2l0by4iCisKKyM6IGdpdC1hbS5zaDo0MTgKK21zZ2lkICItZCBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIERvIG5vdCB1c2UuIgorbXNnc3RyICJsJ29wemlvbmUgLWQgbm9uIMOoIHBpw7kgc3VwcG9ydGF0YS4gIE5vbiB1dGlsaXp6YXJsYS4iCisKKyM6IGdpdC1hbS5zaDo0ODEKKyMsIHNoLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJGRvdGVzdCBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo0ODYKK21zZ2lkICJQbGVhc2UgbWFrZSB1cCB5b3VyIG1pbmQuIC0tc2tpcCBvciAtLWFib3J0PyIKK21zZ3N0ciAiUGVyIGZhdm9yZSwgZGVjaWRpdGkuIC0tc2tpcCBvIC0tYWJvcnQ/IgorCisjOiBnaXQtYW0uc2g6NTEzCittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NTc5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAkZmlsZXMpIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo2NzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJQYXRjaCBpcyBlbXB0eS4gIFdhcyBpdCBzcGxpdCB3cm9uZz9cbiIKKyJJZiB5b3Ugd291bGQgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgaW5zdGVhZCBydW4gXCIkY21kbGluZSAtLXNraXBcIi5cbiIKKyJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcgcnVuIFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NzA4Cittc2dpZCAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKK21zZ3N0ciAiTGEgcGF0Y2ggbm9uIGNvbnRpZW5lIHVuIGluZGlyaXp6byBlbWFpbCB2YWxpZG8uIgorCisjOiBnaXQtYW0uc2g6NzU1Cittc2dpZCAiY2Fubm90IGJlIGludGVyYWN0aXZlIHdpdGhvdXQgc3RkaW4gY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo3NTkKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYW0uc2g6NzY2Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorbXNnc3RyICJBcHBsaWNhcmU/IHPDrFt5XS9ub1tuXS9tb2RpZmljYVtlXS92aXN1YWxpenphIHBhdGNoW3ZdL2FjY2V0dGEgdHV0dG9bYV0gIgorCisjOiBnaXQtYW0uc2g6ODAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJEZJUlNUTElORSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6ODIzCittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo4MzEKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleFxuIgorImRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/IgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo4NDcKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EgLS0gcGF0Y2ggZ2nDoCBhcHBsaWNhdGEuIgorCisjOiBnaXQtYW0uc2g6ODU3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJG1zZ251bSAkRklSU1RMSU5FIgorbXNnc3RyICJQYXRjaCBub24gcml1c2NpdGEgYSAkbXNnbnVtICRGSVJTVExJTkUiCisKKyM6IGdpdC1hbS5zaDo4NzMKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDgKK21zZ2lkICJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKK21zZ3N0ciAiRGV2aSBpbml6aWFyZSBjb24gXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo1NAorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAiVnVvaSBjaGUgbWUgbmUgb2NjdXBpIGlvIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKK21zZ3N0ciAib3B6aW9uZSBub24gcmljb25vc2NpdXRhOiAnJGFyZyciCisKKyM6IGdpdC1iaXNlY3Quc2g6OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiJyRhcmcnIG5vbiBzZW1icmEgZXNzZXJlIHVuYSByZXZpc2lvbmUgdmFsaWRhIgorCisjOiBnaXQtYmlzZWN0LnNoOjExNworbXNnaWQgIkJhZCBIRUFEIC0gSSBuZWVkIGEgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjEzMAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNoZWNraW5nIG91dCAnJHN0YXJ0X2hlYWQnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDx2YWxpZGJyYW5jaD4nLiIKK21zZ3N0ciAiIgorIkNoZWNrb3V0IGRpICckc3RhcnRfaGVhZCcgbm9uIHJpdXNjaXRvLiBQcm92YSAnZ2l0IGJpc2VjdCByZXNldCAiCisiPGJyYW5jaC12YWxpZG8+Jy4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MTQwCittc2dpZCAid29uJ3QgYmlzZWN0IG9uIHNlZWtlZCB0cmVlIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTQ0Cittc2dpZCAiQmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiSEVBRCBlcnJhdG8gLSBzdHJhbm8gcmVmIHNpbWJvbGljbyIKKworIzogZ2l0LWJpc2VjdC5zaDoxODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICRzdGF0ZSIKK21zZ3N0ciAiQXJnb21lbnRvIGJpc2VjdF93cml0ZSBlcnJhdG86ICRzdGF0ZSIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMzIKK21zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIlBlciBmYXZvcmUsIGNoaWFtYSAnYmlzZWN0X3N0YXRlJyBjb24gYWxtZW5vIHVuIGFyZ29tZW50by4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQ0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjUwCittc2dpZCAiJ2dpdCBiaXNlY3QgYmFkJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIidnaXQgYmlzZWN0IGJhZCcgcHXDsiBwcmVuZGVyZSB1biBzb2xvIGFyZ29tZW50by4iCisKKyMuIGhhdmUgYmFkIGJ1dCBub3QgZ29vZC4gIHdlIGNvdWxkIGJpc2VjdCBhbHRob3VnaAorIy4gdGhpcyBpcyBsZXNzIG9wdGltdW0uCisjOiBnaXQtYmlzZWN0LnNoOjI3MworbXNnaWQgIldhcm5pbmc6IGJpc2VjdGluZyBvbmx5IHdpdGggYSBiYWQgY29tbWl0LiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIlNlaSBzaWN1cm8/IFtZL25dICIKKworIzogZ2l0LWJpc2VjdC5zaDoyODkKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgZ29vZCBhbmQgb25lIGJhZCByZXZpc2lvbnMuXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCBiYWRcIiBhbmQgXCJnaXQgYmlzZWN0IGdvb2RcIiBmb3IgdGhhdC4pIgorbXNnc3RyICIiCisiRGV2aSBzcGVjaWZpY2FyZSBhbG1lbm8gdW5hIHJldmlzaW9uZSBjb3JyZXR0YSBlZCB1bmEgZXJyYXRhLlxuIgorIihQdW9pIHVzYXJlIFwiZ2l0IGJpc2VjdCBiYWRcIiBlIFwiZ2l0IGJpc2VjdCBnb29kXCIgcGVyIHF1ZXN0byBzY29wby4pIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5MgorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lIGdvb2QgYW5kIG9uZSBiYWQgcmV2aXNpb25zLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgYmFkXCIgYW5kIFwiZ2l0IGJpc2VjdCBnb29kXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjM0NyBnaXQtYmlzZWN0LnNoOjQ3NAorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAiTm9uIHN0aWFtbyBlc2VndWVuZG8gdW4gYmlzZWN0LiIKKworIzogZ2l0LWJpc2VjdC5zaDozNTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickaW52YWxpZCcgaXMgbm90IGEgdmFsaWQgY29tbWl0IgorbXNnc3RyICInJGludmFsaWQnIG5vbiDDqCB1biBjb21taXQgdmFsaWRvIgorCisjOiBnaXQtYmlzZWN0LnNoOjM2MworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJGJyYW5jaCcuXG4iCisiVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDozOTAKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJOZXNzdW4gZmlsZSBkaSBsb2cgc3BlY2lmaWNhdG8iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDA4Cittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyBkaSBjb3NhIHNpIHN0YSBwYXJsYW5kbz8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDIwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICJzdG8gZXNlZ3VlbmRvICRjb21tYW5kIgorCisjOiBnaXQtYmlzZWN0LnNoOjQyNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisiYmlzZWN0IHJ1biBub24gcml1c2NpdG86XG4iCisiaWwgY29kaWNlIGRpIHVzY2l0YSAkcmVzIGRhICckY29tbWFuZCcgw6ggPCAwIG9wcHVyZSA+PSAxMjgiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDUzCittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgImJpc2VjdCBydW4gbm9uIHB1w7IgcGnDuSBwcm9zZWd1aXJlIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ1OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyJiaXNlY3QgcnVuIG5vbiByaXVzY2l0bzpcbiIKKyJiaXNlY3Rfc3RhdGUgJHN0YXRlIMOoIHVzY2l0byBjb24gaWwgY29kaWNlIGRpIGVycm9yZSAkcmVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ2NgorbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiYmlzZWN0IHJ1biBlc2VndWl0byBjb24gc3VjY2Vzc28iCisKKyM6IGdpdC1wdWxsLnNoOjIxCittc2dpZCAiIgorIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuXG4iCisiUGxlYXNlLCBmaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiwgb3IgdXNlICdnaXQgY29tbWl0IC1hJy4iCittc2dzdHIgIiIKKworIzogZ2l0LXB1bGwuc2g6MjUKK21zZ2lkICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLiIKK21zZ3N0ciAiIgorIklsIHB1bGwgbm9uIMOoIHBvc3NpYmlsZSBwZXJjaMOpIGNpIHNvbm8gZmlsZSBkaSBjdWkgbm9uIMOoIHN0YXRvIGVzZWd1aXRvIGlsICIKKyJtZXJnZS4iCisKKyM6IGdpdC1wdWxsLnNoOjE5NworbXNnaWQgInVwZGF0aW5nIGFuIHVuYm9ybiBicmFuY2ggd2l0aCBjaGFuZ2VzIGFkZGVkIHRvIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjLiBUaGUgZmV0Y2ggaW52b2x2ZWQgdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoLgorIy4gVGhlIHdvcmtpbmcgdHJlZSBhbmQgdGhlIGluZGV4IGZpbGUgaXMgc3RpbGwgYmFzZWQgb24gdGhlCisjLiAkb3JpZ19oZWFkIGNvbW1pdCwgYnV0IHdlIGFyZSBtZXJnaW5nIGludG8gJGN1cnJfaGVhZC4KKyMuIEZpcnN0IHVwZGF0ZSB0aGUgd29ya2luZyB0cmVlIHRvIG1hdGNoICRjdXJyX2hlYWQuCisjOiBnaXQtcHVsbC5zaDoyMjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiBmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorIldhcm5pbmc6IGZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiV2FybmluZzogY29tbWl0ICRvcmlnX2hlYWQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1wdWxsLnNoOjI1MworbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIG1lcmdlIGRpIGJyYW5jaCBtdWx0aXBsaSBpbiB1biBoZWFkIHZ1b3RvIgorCisjOiBnaXQtcHVsbC5zaDoyNTcKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMiCittc2dzdHIgIkltcG9zc2liaWxlIGVzZWd1aXJlIGlsIHJlYmFzZSBzdSBicmFuY2ggbXVsdGlwbGkiCisKKyM6IGdpdC1zdGFzaC5zaDo1MQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiZ2l0IHN0YXNoIGNsZWFyIGNvbiBwYXJhbWV0cmkgbm9uIMOoIGltcGxlbWVudGF0byIKKworIzogZ2l0LXN0YXNoLnNoOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgIk5vbiBoYWkgYW5jb3JhIHVuIGNvbW1pdCBpbml6aWFsZSIKKworIzogZ2l0LXN0YXNoLnNoOjg5Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgaW5kZXggc3RhdGUiCittc2dzdHIgIkltcG9zc2liaWxlIHNhbHZhcmUgbG8gc3RhdG8gY29ycmVudGUgZGkgaW5kZXgiCisKKyM6IGdpdC1zdGFzaC5zaDoxMjMgZ2l0LXN0YXNoLnNoOjEzNgorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDAKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICJOZXNzdW5hIG1vZGlmaWNhIHNlbGV6aW9uYXRhIgorCisjOiBnaXQtc3Rhc2guc2g6MTQzCittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjE1NgorbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICIiCisKKyMuIFRSQU5TTEFUT1JTOiAkb3B0aW9uIGlzIGFuIGludmFsaWQgb3B0aW9uLCBsaWtlCisjLiBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMuIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKyMuIHVwIHRoZSBzZWNvbmQgbGluZSB3aXRoIGhvd2V2ZXIgbWFueSBjaGFyYWN0ZXJzIHRoZQorIy4gdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKyMuIEVuZ2xpc2ggdGhpcyBpczoKKyMuCisjLiAkIGdpdCBzdGFzaCBzYXZlIC0tYmxhaC1ibGFoIDI+JjEgfCBoZWFkIC1uIDIKKyMuIGVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAtLWJsYWgtYmxhaAorIy4gVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnLS1ibGFoLWJsYWgnCisjOiBnaXQtc3Rhc2guc2g6MjAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyIgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCittc2dzdHIgIiIKKyJlcnJvcmU6IG9wemlvbmUgc2Nvbm9zY2l1dGEgcGVyICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorIiAgICAgICAgUGVyIGFnZ2l1bmdlcmUgdW4gbWVzc2FnZ2lvLCB1c2FyZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCisKKyM6IGdpdC1zdGFzaC5zaDoyMjMKK21zZ2lkICJObyBsb2NhbCBjaGFuZ2VzIHRvIHNhdmUiCittc2dzdHIgIk5lc3N1bmEgbW9kaWZpY2EgbG9jYWxlIGRhIHNhbHZhcmUiCisKKyM6IGdpdC1zdGFzaC5zaDoyMjcKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgaW5pemlhbGl6emFyZSBzdGFzaCIKKworIzogZ2l0LXN0YXNoLnNoOjIzNQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAiSW1wb3NzaWJpbGUgc2FsdmFyZSBsbyBzdGF0byBhdHR1YWxlIgorCisjOiBnaXQtc3Rhc2guc2g6MjUzCittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDozNTIKK21zZ2lkICJObyBzdGFzaCBmb3VuZC4iCittc2dzdHIgIk5lc3N1bm8gc3Rhc2ggdHJvdmF0by4iCisKKyM6IGdpdC1zdGFzaC5zaDozNTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6ICRSRVYiCittc2dzdHIgIlRyb3BwZSByZXZpc2lvbmkgc3BlY2lmaWNhdGU6ICRSRVYiCisKKyM6IGdpdC1zdGFzaC5zaDozNjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSBub24gw6ggdW4gcmlmZXJpbWVudG8gdmFsaWRvIgorCisjOiBnaXQtc3Rhc2guc2g6MzkzCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGFyZ3MnIGlzIG5vdCBhIHN0YXNoLWxpa2UgY29tbWl0IgorbXNnc3RyICInJGFyZ3MnIG5vbiDDqCB1biBjb21taXQgZGkgdGlwbyBzdGFzaCIKKworIzogZ2l0LXN0YXNoLnNoOjQwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIickYXJncycgbm9uIMOoIHVuIHJlZmVyaW1lbnRvIGEgdW5vIHN0YXNoIgorCisjOiBnaXQtc3Rhc2guc2g6NDEyCittc2dpZCAidW5hYmxlIHRvIHJlZnJlc2ggaW5kZXgiCittc2dzdHIgImltcG9zc2liaWxlIGFnZ2lvcm5hcmUgaW5kZXgiCisKKyM6IGdpdC1zdGFzaC5zaDo0MTYKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIkltcG9zc2liaWxlIGFwcGxpY2FyZSB1bm8gc3Rhc2ggbmVsIG1lenpvIGRpIHVuIG1lcmdlIgorCisjOiBnaXQtc3Rhc2guc2g6NDI0Cittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiQ2kgc29ubyBjb25mbGl0dGkgaW4gaW5kZXguIFByb3ZhIHNlbnphIC0taW5kZXguIgorCisjOiBnaXQtc3Rhc2guc2g6NDI2Cittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDYwCittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQ3NAorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICIke1JFVn0gZWxpbWluYXRhICgkcykiCisKKyM6IGdpdC1zdGFzaC5zaDo0OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfTogbm9uIMOoIHN0YXRvIHBvc3NpYmlsZSByaW11b3ZlcmUgbGEgdm9jZSBkaSBzdGFzaCIKKworIzogZ2l0LXN0YXNoLnNoOjQ5OQorbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiTm9tZSBkZWwgYnJhbmNoIG5vbiBzcGVjaWZpY2F0byIKKworIzogZ2l0LXN0YXNoLnNoOjU3MAorbXNnaWQgIihUbyByZXN0b3JlIHRoZW0gdHlwZSBcImdpdCBzdGFzaCBhcHBseVwiKSIKK21zZ3N0ciAiKFBlciByaXByaXN0aW5hcmxpIGRpZ2l0YSBcImdpdCBzdGFzaCBhcHBseVwiKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJHJlbW90ZXVybCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIk5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxNTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNsb25lIG9mICckdXJsJyBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTYwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJHaXRkaXIgJyRhJyBpcyBwYXJ0IG9mIHRoZSBzdWJtb2R1bGUgcGF0aCAnJGInIG9yIHZpY2UgdmVyc2EiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgInJlcG8gVVJMOiAnJHJlcG8nIGRldmUgZXNzZXJlIGFzc29sdXRvIG8gaW5pemlhcmUgY29uIC4vfC4uLyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyNjYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICInJHNtX3BhdGgnIGVzaXN0ZSBnacOgIGluIGluZGV4IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBmb2xsb3dpbmcgcGF0aCBpcyBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCBpdC4iCittc2dzdHIgIiIKKyJJbCBzZWd1ZW50ZSBwYXRoIMOoIGlnbm9yYXRvIGRhIHVubyBkZWkgdHVvaSBmaWxlIC5naXRpZ25vcmU6XG4iCisiJHNtX3BhdGhcbiIKKyJVc2EgLWYgc2UgdnVvaSBkYXZ2ZXJvIGFnZ2l1bmdlcmxvLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyODEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjgzCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYSB2YWxpZCBnaXQgcmVwbyIKK21zZ3N0ciAiJyRzbV9wYXRoJyBlc2lzdGUgZ2nDoCBlIG5vbiDDqCB1biByZXBvc2l0b3J5IGdpdCB2YWxpZG8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjk3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozMDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjM0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRW50ZXJpbmcgJyRwcmVmaXgkc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDozNjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwaW5nIGF0ICckc21fcGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorbXNnc3RyICIiCisiSW50ZXJydXppb25lIGEgJyRzbV9wYXRoJzsgbG8gc2NyaXB0IGhhIHJlc3RpdHVpdG8gdW5vIHN0YXRvIGRpdmVyc28gZGEgemVyby4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDA2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgaW4gLmdpdG1vZHVsZXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSByZWdpc3RlcmVkIGZvciBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjUyNAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCcgbm90IGluaXRpYWxpemVkXG4iCisiTWF5YmUgeW91IHdhbnQgdG8gdXNlICd1cGRhdGUgLS1pbml0Jz8iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU1NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTcxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnOiByZWJhc2VkIGludG8gJyRzaGExJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU3NworIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1ODIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1ODMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MDUgZ2l0LXN1Ym1vZHVsZS5zaDo5MjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcxMworbXNnaWQgIi0tY2FjaGVkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1maWxlcyIKK21zZ3N0ciAiLS1jYWNoZWQgbm9uIHB1w7IgZXNzZXJlIHVzYXRhIGNvbiAtLWZpbGVzIgorCisjLiB1bmV4cGVjdGVkIHR5cGUKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzUzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgIm1vZGFsaXTDoCAkbW9kX2RzdCBpbmF0dGVzYSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3NzEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJG5hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAgQXR0ZW56aW9uZTogJG5hbWUgbm9uIGNvbnRpZW5lIGNvbW1pdCAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Nzc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRuYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIEF0dGVuemlvbmU6ICRuYW1lIG5vbiBjb250aWVuZSBjb21taXQgJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjc3NworIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiICBBdHRlbnppb25lOiAkbmFtZSBub24gY29udGllbmUgY29tbWl0ICRzaGExX3NyYyBlICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MDIKK21zZ2lkICJibG9iIgorbXNnc3RyICJibG9iIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjgwMworbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAic290dG9tb2R1bG8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQwCittc2dpZCAiIyBTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg0MgorbXNnaWQgIiMgU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJG5hbWUnIgorbXNnc3RyICIiCisKKyN+IG1zZ2lkICItLSIKKyN+IG1zZ3N0ciAiLS0iCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgZXh0cmFjdCBlbWFpbCBmcm9tIGNvbW1pdHRlciBpZGVudGl0eS4iCisjfiBtc2dzdHIgIiIKKyN+ICJOb24gw6ggc3RhdG8gcG9zc2liaWxlIGVzdHJhcnJlIGwnaW5kaXJpenpvIGVtYWlsIGRhbGwnaWRlbnRpdMOgIGRlbCAiCisjfiAiY29tbWl0dGVyLiIKZGlmZiAtLWdpdCBhL3BvL3B0X1BULnBvIGIvcG8vcHRfUFQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg5YWQxYgotLS0gL2Rldi9udWxsCisrKyBiL3BvL3B0X1BULnBvCkBAIC0wLDAgKzEsNDk4MCBAQAorIyBQb3J0dWd1ZXNlIHRyYW5zbGF0aW9ucyBmb3IgR2l0IHBhY2thZ2UuCisjIENvcHlyaWdodCAoQykgMjAxMiBNYXJjbyBTb3VzYSA8bWFyY29tc291c2EgQVQgZ21haWwuY29tPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIENvbnRyaWJ1dGVyczoKKyMgICAtIE1hcmNvIFNvdXNhIDxtYXJjb21zb3VzYSBBVCBnbWFpbC5jb20+CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMi0wNS0wOCAxNjowNiswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxMi0wNS0xNCAyMToxNyswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBNYXJjbyBTb3VzYSA8bWFyY29tc291c2EgQVQgZ21haWwuY29tPlxuIgorIkxhbmd1YWdlLVRlYW06IFBvcnR1Z3Vlc2VcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJMYW5ndWFnZTogcHRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogYWR2aWNlLmM6NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogJS4qc1xuIgorbXNnc3RyICJkaWNhOiAlLipzXG4iCisKKyMuCisjLiAqIE1lc3NhZ2UgdXNlZCBib3RoIHdoZW4gJ2dpdCBjb21taXQnIGZhaWxzIGFuZCB3aGVuCisjLiAqIG90aGVyIGNvbW1hbmRzIGRvaW5nIGEgbWVyZ2UgZG8uCisjLgorIzogYWR2aWNlLmM6NzAKK21zZ2lkICIiCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSxcbiIKKyJhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+JyBhc1xuIgorImFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdCxcbiIKKyJvciB1c2UgJ2dpdCBjb21taXQgLWEnLiIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IGxvb2sgbGlrZSBhIHYyIGJ1bmRsZSBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAiY2FiZcOnYWxobyBuw6NvIHJlY29uaGVjaWRvOiAlcyVzICglZCkiCisKKyM6IGJ1bmRsZS5jOjg5CisjOiBidWlsdGluL2NvbW1pdC5jOjc1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3NpdmVsIGFicmlyICclcyciCisKKyM6IGJ1bmRsZS5jOjE0MAorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjE2NAorIzogc2VxdWVuY2VyLmM6NTMzCisjOiBzZXF1ZW5jZXIuYzo5NjUKKyM6IGJ1aWx0aW4vbG9nLmM6Mjg5CisjOiBidWlsdGluL2xvZy5jOjcxOQorIzogYnVpbHRpbi9sb2cuYzoxMzM1CisjOiBidWlsdGluL2xvZy5jOjE1NTQKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDcKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxODEKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidW5kbGUuYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyAlZCByZWYiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgJWQgcmVmcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1bmRsZS5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoaXMgcmVmIgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidW5kbGUuYzoyOTAKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICJyZXYtbGlzdCBtb3JyZXUiCisKKyM6IGJ1bmRsZS5jOjI5NgorIzogYnVpbHRpbi9sb2cuYzoxMjMxCisjOiBidWlsdGluL3Nob3J0bG9nLmM6Mjg0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgImFyZ3VtZW50byBuw6NvIHJlY29uaGVjaWRvOiAlcyIKKworIzogYnVuZGxlLmM6MzMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjM3NgorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1bmRsZS5jOjM5NAorbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBwYXduIHBhY2stb2JqZWN0cyIKKworIzogYnVuZGxlLmM6NDEyCittc2dpZCAicGFjay1vYmplY3RzIGRpZWQiCittc2dzdHIgIiIKKworIzogYnVuZGxlLmM6NDE1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAibsOjbyBjb25zZWd1ZSBjcmVhciAnJXMnIgorCisjOiBidW5kbGUuYzo0MzcKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgIiIKKworIzogY29tbWl0LmM6NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICJuw6NvIGNvbnNpZ28gcGFyc2VhciAlcyIKKworIzogY29tbWl0LmM6NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMgbsOjbyDDqSB1bSBjb21taXQhIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNgorIzogY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJtZW3Ds3JpYSBlc2dvdGFkYSIKKworIzogY29ubmVjdGVkLmM6MzkKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZXhlY3V0YXIgJ2dpdCByZXYtbGlzdCciCisKKyM6IGNvbm5lY3RlZC5jOjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdDogJXMiCittc2dzdHIgIiIKKworIzogY29ubmVjdGVkLmM6NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW46ICVzIgorbXNnc3RyICIiCisKKyM6IGRhdGUuYzo5NQorbXNnaWQgImluIHRoZSBmdXR1cmUiCittc2dzdHIgIiIKKworIzogZGF0ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogZGF0ZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBob3VycyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgZGF5cyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHdlZWtzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRhdGUuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBkYXRlLmM6MTU0CisjOiBkYXRlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIGFnbyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGRpZmYuYzoxMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGYWlsZWQgdG8gcGFyc2UgZGlyc3RhdCBjdXQtb2ZmIHBlcmNlbnRhZ2UgJyUuKnMnXG4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjExMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyUuKnMnXG4iCittc2dzdHIgIiIKKworIzogZGlmZi5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorCisjOiBkaWZmLmM6MTQwMAorbXNnaWQgIiAwIGZpbGVzIGNoYW5nZWRcbiIKK21zZ3N0ciAiIDAgZmljaGVyb3MgbW9kaWZpY2Fkb3NcbiIKKworIzogZGlmZi5jOjE0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVkIGZpbGUgY2hhbmdlZCIKK21zZ2lkX3BsdXJhbCAiICVkIGZpbGVzIGNoYW5nZWQiCittc2dzdHJbMF0gIiAlZCBmaWNoZWlybyBtb2RpZmljYWRvIgorbXNnc3RyWzFdICIgJWQgZmljaGVpcm9zIG1vZGlmaWNhZG9zIgorCisjOiBkaWZmLmM6MTQyMQorIywgYy1mb3JtYXQKK21zZ2lkICIsICVkIGluc2VydGlvbigrKSIKK21zZ2lkX3BsdXJhbCAiLCAlZCBpbnNlcnRpb25zKCspIgorbXNnc3RyWzBdICIsICVkIGFkacOnw6NvKCspIgorbXNnc3RyWzFdICIsICVkIGFkacOnw7VlcygrKSIKKworIzogZGlmZi5jOjE0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLCAlZCBkZWxldGlvbigtKSIKK21zZ2lkX3BsdXJhbCAiLCAlZCBkZWxldGlvbnMoLSkiCittc2dzdHJbMF0gIiwgJWQgZWxpbWluYWRvKC0pIgorbXNnc3RyWzFdICIsICVkIGVsaW1pbmFkb3MoLSkiCisKKyM6IGRpZmYuYzozNDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCittc2dzdHIgIiIKKworIzogZ3BnLWludGVyZmFjZS5jOjU5Cittc2dpZCAiY291bGQgbm90IHJ1biBncGcuIgorbXNnc3RyICJuw6NvIGNvbnNlZ3VlIGVqZWN1dGFyIGdwZy4iCisKKyM6IGdwZy1pbnRlcmZhY2UuYzo3MQorbXNnaWQgImdwZyBkaWQgbm90IGFjY2VwdCB0aGUgZGF0YSIKK21zZ3N0ciAiIgorCisjOiBncGctaW50ZXJmYWNlLmM6ODIKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgIiIKKworIzogZ3JlcC5jOjEyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIiIKKworIzogZ3JlcC5jOjEyOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgIiclcyc6ICVzIgorCisjOiBncmVwLmM6MTMwOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkICVzIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzoyMTQKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgIiIKKworIzogaGVscC5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKworIzogaGVscC5jOjMyNworbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC5cbiIKKyJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcyciCittc2dzdHIgIiIKKworIzogaGVscC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICJpbiAlMC4xZiBzZWNvbmRzIGF1dG9tYXRpY2FsbHkuLi4iCittc2dzdHIgIiIKKworIzogaGVscC5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICIiCisKKyM6IGhlbHAuYzozNjUKK21zZ2lkICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIHRoaXM/IgorbXNnaWRfcGx1cmFsICIiCisiXG4iCisiRGlkIHlvdSBtZWFuIG9uZSBvZiB0aGVzZT8iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiByZW1vdGUuYzoxNjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iCittc2dzdHJbMF0gIkEgc3VhIHJhbWEgZXN0w6Egw6AgZnJlbnRlIGRlICclcycgcGVsbyBjb21taXQgJWQuXG4iCittc2dzdHJbMV0gIkEgc3VhIHJhbWEgZXN0w6Egw6AgZnJlbnRlIGRlICclcycgcGVsb3MgY29tbWl0ZXMgJWQuXG4iCisKKyM6IHJlbW90ZS5jOjE2MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogcmVtb3RlLmM6MTYyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBzZXF1ZW5jZXIuYzoxMjEKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NjUKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NzgKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDg4CisjOiBidWlsdGluL21lcmdlLmM6MTA5OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjEyMworIzogYnVpbHRpbi9tZXJnZS5jOjMzMworIzogYnVpbHRpbi9tZXJnZS5jOjg2OAorIzogYnVpbHRpbi9tZXJnZS5jOjEwOTAKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMTAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZXNjcmV2ZXIgcGFyYSAnJXMnIgorCisjOiBzZXF1ZW5jZXIuYzoxNDQKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNDcKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxNjAKKyM6IHNlcXVlbmNlci5jOjc0MQorIzogc2VxdWVuY2VyLmM6ODI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGdyYXZhciBwYXJhICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MTc4Cittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxODAKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgcmV2ZXJ0LiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoxODMKK21zZ2lkICJDb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZC4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6ICVzIHdpbGwgYmUgInJldmVydCIgb3IgImNoZXJyeS1waWNrIgorIzogc2VxdWVuY2VyLmM6MjMzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6MjYxCittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXRcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzoyODIKK21zZ2lkICJVbmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWVcbiIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGNvbW1pdCAlc1xuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgY29tbWl0ICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjMyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlc1xuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgY29tbWl0IHBhcmVudCAlc1xuIgorCisjOiBzZXF1ZW5jZXIuYzozNTgKK21zZ2lkICJZb3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICJPIHNldSBmaWNoZWlybyBkZSDDrW5kaWNlIMOpIG7Do28gZnVuZGlkby4iCisKKyM6IHNlcXVlbmNlci5jOjM2MQorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQiCittc2dzdHIgIlZvY8OqIG7Do28gdGVtIHVtYSBIRUFEIHbDoWxpZGEiCisKKyM6IHNlcXVlbmNlci5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Mzg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzozODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFpbmxpbmUgd2FzIHNwZWNpZmllZCBidXQgY29tbWl0ICVzIGlzIG5vdCBhIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgInJldmVydCIgb3IKKyMuICJjaGVycnktcGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExCisjOiBzZXF1ZW5jZXIuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQwMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAiTsOjbyDDqSBwb3Nzw612ZWwgb2J0ZXIgbWVuc2FnZW0gY29tbWl0IHBhcmEgJXMiCisKKyM6IHNlcXVlbmNlci5jOjQ5MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjQ5MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NTM2Cittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgInBhc3NhZG8gY29tbWl0IGNvbSBvIHNldCB2YXppbyIKKworIzogc2VxdWVuY2VyLmM6NTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICVzIGR1cmluZyBhICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgJXMgZHVyYW50ZSB1bSAlcyIKKworIzogc2VxdWVuY2VyLmM6NjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBsaW5lICVkLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIHBhcnNlYXIgbGluaGEgJWQuIgorCisjOiBzZXF1ZW5jZXIuYzo2MzQKK21zZ2lkICJObyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIk5lbmh1bSBjb21taXQgcGFyc2VhZG8uIgorCisjOiBzZXF1ZW5jZXIuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciAlcyIKKworIzogc2VxdWVuY2VyLmM6NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGxlciAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjY1OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Njg2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQga2V5OiAlcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo2ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJWYWxvciBpbnbDoWxpZG8gcGFyYSAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzIyCittc2dpZCAiYSBjaGVycnktcGljayBvciByZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiIgorCisjOiBzZXF1ZW5jZXIuYzo3MjMKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KVwiIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjcyNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzQzCisjOiBzZXF1ZW5jZXIuYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc2MgorIzogc2VxdWVuY2VyLmM6ODk2Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc2NAorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6NzY2Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6Nzg4CisjOiBidWlsdGluL2FwcGx5LmM6MzY4MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBhYnJpciAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgIm7Do28gZm9pIHBvc3PDrXZlbCBsZXIgJXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3OTIKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjc5OAorIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgIiIKKworIzogc2VxdWVuY2VyLmM6ODIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgZm9ybWF0ZWFyICVzLiIKKworIzogc2VxdWVuY2VyLmM6OTgzCittc2dpZCAiQ2FuJ3QgcmV2ZXJ0IGFzIGluaXRpYWwgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IHNlcXVlbmNlci5jOjk4NAorbXNnaWQgIkNhbid0IGNoZXJyeS1waWNrIGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorCisjOiBzaGExX25hbWUuYzo4NjQKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IHNoYTFfbmFtZS5jOjg2NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAiTsOjbyBleGlzdGUgcmFtYSAnJXMnIgorCisjOiBzaGExX25hbWUuYzo4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgIiIKKworIzogc2hhMV9uYW1lLmM6ODcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjEzNQorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiY2FtaW5ob3MgbsOjbyBmdW5kaWRvczoiCisKKyM6IHd0LXN0YXR1cy5jOjE0MQorIzogd3Qtc3RhdHVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDMKKyM6IHd0LXN0YXR1cy5jOjE2MAorbXNnaWQgIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNDQKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKHVzYSBcImdpdCBhZGQvcm0gPGZpY2hlaXJvPi4uLlwiIHBhcmEgbWFyY2FyIGNvbW8gcmVzb2x2aWRvKSIKKworIzogd3Qtc3RhdHVzLmM6MTUyCittc2dpZCAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICJNdWRhbsOnYXMgYSBzZXJlbSBjb21taXRhZGFzIgorCisjOiB3dC1zdGF0dXMuYzoxNzAKK21zZ2lkICJDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTc0Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAgKHVzYSBcImdpdCBhZGQgPGZpY2hlaXJvPi4uLlwiIHBhcmEgYWN0dWFsaXphciBvIHF1ZSB2YWkgc2VyIGNvbW1pdGFkbykiCisKKyM6IHd0LXN0YXR1cy5jOjE3NgorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgICh1c2EgXCJnaXQgYWRkL3JtIDxmaWNoZWlybz4uLi5cIiBwYXJhIGFjdHVhbGl6YXIgbyBxdWUgdmFpIHNlciBjb21taXRhZG8pIgorCisjOiB3dC1zdGF0dXMuYzoxNzcKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzoxNzkKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGZpbGVzOiIKK21zZ3N0ciAiJXMgZmljaGVyb3M6IgorCisjOiB3dC1zdGF0dXMuYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6MjA4Cittc2dpZCAiYnVnIgorbXNnc3RyICJlcnJvIgorCisjOiB3dC1zdGF0dXMuYzoyMTMKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICJlbGltaW5hZG9zIGVtIGFtYm9zOiIKKworIzogd3Qtc3RhdHVzLmM6MjE0Cittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICJhZGljaW9uYWRvIHBvciBuw7NzOiIKKworIzogd3Qtc3RhdHVzLmM6MjE1Cittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAiZWxpbWluYWRvcyBwb3IgZWxlczoiCisKKyM6IHd0LXN0YXR1cy5jOjIxNgorbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICJhZGljaW9uYWRvcyBwb3IgZWxlczoiCisKKyM6IHd0LXN0YXR1cy5jOjIxNworbXNnaWQgImRlbGV0ZWQgYnkgdXM6IgorbXNnc3RyICJlbGltaW5hZG9zIHBvciBuw7NzOiIKKworIzogd3Qtc3RhdHVzLmM6MjE4Cittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgImFkaWNpb25hZG9zIGVtIGFtYm9zOiIKKworIzogd3Qtc3RhdHVzLmM6MjE5Cittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgIm1vZGlmaWNhZG9zIGVtIGFtYm9zOiIKKworIzogd3Qtc3RhdHVzLmM6MjQ5Cittc2dpZCAibmV3IGNvbW1pdHMsICIKK21zZ3N0ciAibm92b3MgY29tbWl0cywgIgorCisjOiB3dC1zdGF0dXMuYzoyNTEKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlw7pkbyBtb2RpZmljYWRvLCAiCisKKyM6IHd0LXN0YXR1cy5jOjI1MworbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgImNvbnRlw7pkbyBuw6NvIHNlZ3VpZG8iCisKKyM6IHd0LXN0YXR1cy5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZTogICAlcyIKK21zZ3N0ciAibm92byBmaWNoZWlybzogICAlcyIKKworIzogd3Qtc3RhdHVzLmM6MjcwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcGllZDogICAgICVzIC0+ICVzIgorbXNnc3RyICJjb3BpYWRvOiAgICAgJXMgLT4gJXMiCisKKyM6IHd0LXN0YXR1cy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkOiAgICAlcyIKK21zZ3N0ciAiZWxpbWluYWRvOiAgICAlcyIKKworIzogd3Qtc3RhdHVzLmM6Mjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIm1vZGlmaWVkOiAgICVzIgorbXNnc3RyICJtb2RpZmljYWRvOiAgICVzIgorCisjOiB3dC1zdGF0dXMuYzoyNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1lZDogICAgJXMgLT4gJXMiCittc2dzdHIgIm11ZGFkbyBkZSBub21lOiAgICAlcyAtPiAlcyIKKworIzogd3Qtc3RhdHVzLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgInR5cGVjaGFuZ2U6ICVzIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjI4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duOiAgICAlcyIKK21zZ3N0ciAiZGVzY29uaGVjaWRvOiAgICAlcyIKKworIzogd3Qtc3RhdHVzLmM6Mjg4CisjLCBjLWZvcm1hdAorbXNnaWQgInVubWVyZ2VkOiAgICVzIgorbXNnc3RyICJuw6NvIGZ1bmRpZG9zOiAgICVzIgorCisjOiB3dC1zdGF0dXMuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6NzM3Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiTmEgcmFtYSIKKworIzogd3Qtc3RhdHVzLmM6NzQ0Cittc2dpZCAiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiTsOjbyBlc3TDoSBlbSBuZW5odW1hIHJhbWEuIgorCisjOiB3dC1zdGF0dXMuYzo3NTUKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiQ29tbWl0IGluaWNpYWwiCisKKyM6IHd0LXN0YXR1cy5jOjc2OQorbXNnaWQgIlVudHJhY2tlZCIKK21zZ3N0ciAiTsOjbyBzZWd1aWRvIgorCisjOiB3dC1zdGF0dXMuYzo3NzEKK21zZ2lkICJJZ25vcmVkIgorbXNnc3RyICJJZ25vcmFkbyIKKworIzogd3Qtc3RhdHVzLmM6NzczCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Nzc1Cittc2dpZCAiICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKSIKK21zZ3N0ciAiIgorCisjOiB3dC1zdGF0dXMuYzo3ODEKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICJTZW0gbXVkYW7Dp2FzIgorCisjOiB3dC1zdGF0dXMuYzo3ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQlc1xuIgorbXNnc3RyICJuZW5odW1hIGFsdGVyYcOnw6NvIGFkaWNpb25hZG8gYW8gY29tbWl0JXNcbiIKKworIzogd3Qtc3RhdHVzLmM6Nzg3Cittc2dpZCAiICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKSIKK21zZ3N0ciAiICh1c2EgXCJnaXQgYWRkXCIgZS9vdSBcImdpdCBjb21taXQgLWFcIikiCisKKyM6IHd0LXN0YXR1cy5jOjc4OQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQlc1xuIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjc5MQorbXNnaWQgIiAodXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKSIKK21zZ3N0ciAiICh1c2EgXCJnaXQgYWRkXCIgcGFyYSBzZWd1aXIpIgorCisjOiB3dC1zdGF0dXMuYzo3OTMKKyM6IHd0LXN0YXR1cy5jOjc5NgorIzogd3Qtc3RhdHVzLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0JXNcbiIKK21zZ3N0ciAibmFkYSBwYXJhIGZhemVyIGNvbW1pdCVzXG4iCisKKyM6IHd0LXN0YXR1cy5jOjc5NAorbXNnaWQgIiAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaykiCittc2dzdHIgIiIKKworIzogd3Qtc3RhdHVzLmM6Nzk3Cittc2dpZCAiICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIiCisKKyM6IHd0LXN0YXR1cy5jOjgwMAorbXNnaWQgIiAod29ya2luZyBkaXJlY3RvcnkgY2xlYW4pIgorbXNnc3RyICIgKGRpcmVjdMOzcmlvIGRlIHRyYWJhbGhvIHZhY2lvKSIKKworIzogd3Qtc3RhdHVzLmM6OTA4Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAoTsOjbyDDqSByYW1hKSIKKworIzogd3Qtc3RhdHVzLmM6OTE0Cittc2dpZCAiSW5pdGlhbCBjb21taXQgb24gIgorbXNnc3RyICJDb21taXQgaW5pY2lhbCBlbSAiCisKKyM6IHd0LXN0YXR1cy5jOjkyOQorbXNnaWQgImJlaGluZCAiCittc2dzdHIgImF0csOhcyAiCisKKyM6IHd0LXN0YXR1cy5jOjkzMgorIzogd3Qtc3RhdHVzLmM6OTM1Cittc2dpZCAiYWhlYWQgIgorbXNnc3RyICJhIGZyZW50ZSAiCisKKyM6IHd0LXN0YXR1cy5jOjkzNworbXNnaWQgIiwgYmVoaW5kICIKK21zZ3N0ciAiLCBhdHLDoXMgIgorCisjOiBidWlsdGluL2FkZC5jOjYyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzo2NworIzogYnVpbHRpbi9jb21taXQuYzoyODIKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIkZhbG91IGEgYXR1YWxpemHDp8OjbyBkb3MgZmljaGVpcm9zIgorCisjOiBidWlsdGluL2FkZC5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgImVsaW1pbmFyICclcydcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aCAnJXMnIGlzIGluIHN1Ym1vZHVsZSAnJS4qcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoxOTIKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjE5NQorIzogYnVpbHRpbi9hZGQuYzo0NTYKKyM6IGJ1aWx0aW4vcm0uYzoxODYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FkZC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzoyNzYKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBsZXIgbyBpbmTDrWNlIgorCisjOiBidWlsdGluL2FkZC5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyICclcycgcGFyYSBlc2NyZXZlci4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjkwCittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICJOw6NvIGNvbnNlZ3VlIGVzY3JldmVyIHBhdGNoIgorCisjOiBidWlsdGluL2FkZC5jOjI5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk3Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICJQYXRjaCB2YXppby4gQWJvcnRlZC4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzAzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYXBsaWNhciBvICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzEyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozNTMKK21zZ2lkICJubyBmaWxlcyBhZGRlZCIKK21zZ3N0ciAibmVuaHVtIGZpY2hlaXJvcyBhZGljaW9uYWRvIgorCisjOiBidWlsdGluL2FkZC5jOjM1OQorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgImZhbGhvdSBhIGFkaWNpb25hciBmaWNoZWlyb3MiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzkxCittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hZGQuYzozOTMKK21zZ2lkICJPcHRpb24gLS1pZ25vcmUtbWlzc2luZyBjYW4gb25seSBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggLS1kcnktcnVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDE0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDIwCisjOiBidWlsdGluL2NsZWFuLmM6OTUKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzQyCisjOiBidWlsdGluL212LmM6ODIKKyM6IGJ1aWx0aW4vcm0uYzoxNjIKK21zZ2lkICJpbmRleCBmaWxlIGNvcnJ1cHQiCittc2dzdHIgImZpY2hlaXJvIGluZGV4IGNvcnJ1cHRvIgorCisjOiBidWlsdGluL2FkZC5jOjQ3NgorIzogYnVpbHRpbi9hcHBseS5jOjQwOTMKKyM6IGJ1aWx0aW4vbXYuYzoyMjkKKyM6IGJ1aWx0aW4vcm0uYzoyNjAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAiZXNwYcOnbyBlbSBicmFjbyBuw6NvIHJlY29uaGVjaWRvOiAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIGlnbm9yZSBvcHRpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6ODE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgyNAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjkwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwsIGdvdCAlcyBvbiBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgJXMgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjEzODcKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZyYWdtZW50IHdpdGhvdXQgaGVhZGVyIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSBjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lIGNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2MjEKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTYyMworbXNnaWQgImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTgzNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICIiCisKKyMuIHRoZXJlIGhhcyB0byBiZSBvbmUgaHVuayAoZm9yd2FyZCBodW5rKQorIzogYnVpbHRpbi9hcHBseS5jOjE4NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxOTUxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjIwNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc3ltbGluayAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjA0NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBvciByZWFkICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWJyaXIgbyBsZXIgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTE2Cittc2dpZCAib29wcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjYzOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHN0YXJ0IG9mIGxpbmU6ICclYyciCittc2dzdHIgImNvbWXDp28gZGUgbGluaGEgaW52w6FsaWRvOiAnJWMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mjc1NgorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mjg5NgorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkwMgorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkyMworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzAzOAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwNDUKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgb2YgJXMgZmFpbGVkIgorbXNnc3RyICJsZXIgJXMgZmFsaG91IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzA3NworbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlczogasOhIGV4aXN0ZSBubyBlc3Bhw6dvIGRlIHRyYWJhbGhvIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzEzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogaGFzIGJlZW4gZGVsZXRlZC9yZW5hbWVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTQxCisjOiBidWlsdGluL2FwcGx5LmM6MzE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMiCittc2dzdHIgIiVzOiAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IGV4aXN0IGluIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBtYXRjaCBpbmRleCIKK21zZ3N0ciAiJXM6IG7Do28gdGVtIGNvcnJlc3BvbmRlbmNpYSBhbyBpbmRleCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IGrDoSBleGlzdGUgbm8gaW5kw61jZSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pJXMlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI2NQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0Y2ggZG9lcyBub3QgYXBwbHkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjMzMzMKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTIKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VicHJvamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUwNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3NzaXZlbCAnc3RhdCcgbyBub3ZvIGZpY2hlaXJvIGNyZWFkbyAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUxNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzU0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjbG9zaW5nIGZpbGUgJyVzJyIKK21zZ3N0ciAiZmVjaGFyIGZpY2hlcm8gJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGZpbGUgJyVzJyBtb2RlICVvIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2NjEKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiIgorCisjLiBTYXkgdGhpcyBldmVuIHdpdGhvdXQgLS12ZXJib3NlCisjOiBidWlsdGluL2FwcGx5LmM6MzY2NAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3QuLi4iCittc2dpZF9wbHVyYWwgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdHMuLi4iCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cnVuY2F0aW5nIC5yZWogZmlsZW5hbWUgdG8gJS4qcy5yZWoiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgYXBwbGllZCBjbGVhbmx5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWplY3RlZCBodW5rICMlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MjkKK21zZ2lkICJ1bnJlY29nbml6ZWQgaW5wdXQiCittc2dzdHIgImVudHJhZGEgbsOjbyByZWNvbmhlY2lkYSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4NDAKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gZmljaGVybyBpbmTDrWNlIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDAzNQorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXggZm9yYSBkZSB1bSByZXBvc2l0b3JpbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwMzgKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQgZm9yYSBkZSB1bSByZXBvc2l0b3JpbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3NpdmVsIGFicmlyIHBhdGNoICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDY4CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA3NAorIzogYnVpbHRpbi9hcHBseS5jOjQwODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWQgbGluZSBhZGRzIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ2lkX3BsdXJhbCAiJWQgbGluZXMgYWRkIHdoaXRlc3BhY2UgZXJyb3JzLiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgYXJjaGl2ZSBmaWxlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo1OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgImVycm8gcmVtb3RvOiAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjYKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NzEKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdCBkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGlzIG5vdCB5ZXQgbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgZXZlbiB0aG91Z2ggaXQgaXMgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTgwCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCB1c2FyIC1hIGNvbSB1bSAtZCIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODYKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgYnJhbmNoICclcycgd2hpY2ggeW91IGFyZSBjdXJyZW50bHkgb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJyYW1hIHJlbW90YSAnJXMgbsOjbyBlbmNvbnRyYWRhLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAicmFtYSAnJXMnIG7Do28gZW5jb250cmFkby4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGJyYW5jaCAnJXMnIGlzIG5vdCBmdWxseSBtZXJnZWQuXG4iCisiSWYgeW91IGFyZSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCwgcnVuICdnaXQgYnJhbmNoIC1EICVzJy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlIGJyYW5jaCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJFcnJvIGEgZWxpbWluYXIgcmFtYSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZSBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIkVsaW1pbmFyIHJhbWEgJXMgKGVyYSAlcykuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjM5Cittc2dpZCAiVXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjMzNworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBwb2ludCBhdCBhIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQwOQorIywgYy1mb3JtYXQKK21zZ2lkICJiZWhpbmQgJWRdICIKK21zZ3N0ciAiYXRyw6FzICVkXSAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDExCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkXSAiCittc2dzdHIgImEgZnJlbnRlICVkXSAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImFoZWFkICVkLCBiZWhpbmQgJWRdICIKK21zZ3N0ciAiYSBmcmVudGUgJWQsIGF0csOhcyAlZF0gIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjUyMQorbXNnaWQgIihubyBicmFuY2gpIgorbXNnc3RyICIobsOjbyDDqSByYW1hKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODYKK21zZ2lkICJzb21lIHJlZnMgY291bGQgbm90IGJlIHJlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTkKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICJOb21lIGRhIHJhbWEgaW52w6FsaWRhOiAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYyNAorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICJGYWxob3UgcmVub21lYcOnw6NvIGRhIHJhbWEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtZWQgYSBtaXNuYW1lZCBicmFuY2ggJyVzJyBhd2F5IgorbXNnc3RyICJSZW5vbWVhZG8gdW1hIHJhbWEgZXJyb25lYSAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjYzMgorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjM5Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgYnJhbmNoIGRlc2NyaXB0aW9uIHRlbXBsYXRlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc2OQorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlIEhFQUQgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6Nzc0CisjOiBidWlsdGluL2Nsb25lLmM6NTU4Cittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3OTQKK21zZ2lkICItLWNvbHVtbiBhbmQgLS12ZXJib3NlIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIGUgLS12ZXJib3NlIHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQzCittc2dpZCAiLWEgYW5kIC1yIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCBtYWtlIHNlbnNlIHdpdGggYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAiJXMgZXN0w6EgYmVtXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NTYKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byBjcmVhdGUgYSBidW5kbGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjAKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMworIzogYnVpbHRpbi9jaGVja291dC5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjM0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzkyCittc2dpZCAiY29ycnVwdCBpbmRleCBmaWxlIgorbXNnc3RyICJmaWNoZWlybyBpbmRleCBjb3JydXB0byIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2NAorIzogYnVpbHRpbi9jaGVja291dC5jOjI3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgaXMgdW5tZXJnZWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMwMgorIzogYnVpbHRpbi9jaGVja291dC5jOjQ5OAorIzogYnVpbHRpbi9jbG9uZS5jOjU4MworIzogYnVpbHRpbi9tZXJnZS5jOjgxMgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzE5CisjOiBidWlsdGluL2RpZmYuYzozMDIKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0MDgKK21zZ2lkICJkaWZmX3NldHVwX2RvbmUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo0MTQKK21zZ2lkICJ5b3UgbmVlZCB0byByZXNvbHZlIHlvdXIgY3VycmVudCBpbmRleCBmaXJzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU2NgorbXNnaWQgIkhFQUQgaXMgbm93IGF0IgorbXNnc3RyICJIRUFEIMOpIGFnb3JhIGVtICIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU3MworIywgYy1mb3JtYXQKK21zZ2lkICJSZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJSZXNldCByYW1hICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU3NgorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAiSsOhIGVtICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGEgbmV3IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIk11ZGFkbyBwYXJhIGEgbm92YSByYW1hICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjU4NAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJNdWRhZG8gcGFyYSBhIHJhbWEgJyVzJ1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiAuLi4gZSAlZCBtYWlzLlxuIgorCisjLiBUaGUgc2luZ3VsYXIgdmVyc2lvbgorIzogYnVpbHRpbi9jaGVja291dC5jOjY0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCBuZXdfYnJhbmNoX25hbWUgJXNcbiIKKyJcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjkzCittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njk3Cittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjcyMworbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIiIKKworIy4gY2FzZSAoMSkKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCByZWZlcmVuY2U6ICVzIgorbXNnc3RyICIiCisKKyMuIGNhc2UgKDEpOiB3YW50IGEgdHJlZQorIzogYnVpbHRpbi9jaGVja291dC5jOjg5MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk3MworbXNnaWQgIi1CIGNhbm5vdCBiZSB1c2VkIHdpdGggLWIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk4MgorbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIG9wdGlvbnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk4NQorbXNnaWQgIi0tZGV0YWNoIGNhbm5vdCBiZSB1c2VkIHdpdGggLWIvLUIvLS1vcnBoYW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk4NworbXNnaWQgIi0tZGV0YWNoIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk5MworbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwMAorbXNnaWQgIk1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwNgorbXNnaWQgIi0tb3JwaGFuIGFuZCAtYnwtQiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDA4Cittc2dpZCAiLS1vcnBoYW4gY2Fubm90IGJlIHVzZWQgd2l0aCAtdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAxOAorbXNnaWQgImdpdCBjaGVja291dDogLWYgYW5kIC1tIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNTIKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA2MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiB1cGRhdGluZyBwYXRocyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuXG4iCisiRGlkIHlvdSBpbnRlbmQgdG8gY2hlY2tvdXQgJyVzJyB3aGljaCBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGNvbW1pdD8iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNjIKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IHVwZGF0aW5nIHBhdGhzIGlzIGluY29tcGF0aWJsZSB3aXRoIHN3aXRjaGluZyBicmFuY2hlcy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNjcKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDcwCittc2dpZCAiIgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDg5Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA5MgorbXNnaWQgIi0tb3Vycy8tLXRoZWlycyBpcyBpbmNvbXBhdGlibGUgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3OAorbXNnaWQgIi14IGFuZCAtWCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODIKK21zZ2lkICJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLW4gbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODUKK21zZ2lkICJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtbiBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNTUKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjE1OQorIzogYnVpbHRpbi9jbGVhbi5jOjE3OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlc1xuIgorbXNnc3RyICJFbGltaW5hbmRvICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxNjIKKyM6IGJ1aWx0aW4vY2xlYW4uYzoxODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIG5vdCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NsZWFuLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCByZW1vdmluZyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCBkaXJlY3RvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAiZmFsaG91IGEgYWJyaXIgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJmYWxob3UgYSBjcmlhciBvIGRpcmVjdMOzcmlvICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDgKKyM6IGJ1aWx0aW4vZGlmZi5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMxMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzI0CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gdW5saW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAiZmFsaG91IGEgY29waWFyIG8gZmljaGVpcm8gcGFyYSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgInRlcm1pbmFkby5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTQ5Cittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MzkKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJEZW1hc2lhZG9zIHBhcmFtZXRyb3MuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjQzCittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1iYXJlIGFuZCAtLW9yaWdpbiAlcyBvcHRpb25zIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NzMKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY5MworIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwNgorIzogYnVpbHRpbi9jbG9uZS5jOjcyMAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICJDbG9uYW5kbyBlbSB1bSByZXBvc2l0b3JpbyBudSAoYmFyZSkgJyVzJy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgIkNsb25hciBlbSAnJXMnLi4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gY2xvbmUgJXMiCittc2dzdHIgIk7Do28gc2VpIGNvbW8gY2xvbmFyICVzIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODM1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW90ZSBicmFuY2ggJXMgbm90IGZvdW5kIGluIHVwc3RyZWFtICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NDIKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6NTEKK21zZ2lkICItLWNvbW1hbmQgbXVzdCBiZSB0aGUgZmlyc3QgYXJndW1lbnQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MworbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAiIgorIk8gc2V1IG5vbWUgZSBlbmRlcmXDp28gZGUgZS1tYWlsIGZvcmFtIGNvbmZpZ3VyYWRvcyBhdXRvbWF0aWNhbWVudGUgY29tIGJhc2VcbiIKKyJubyBvIHNldSB1c3VhcmlvIGUgbm9tZSBkYSBtYXF1aW5hLiBQb3IgZmF2b3IsIHZlcmlmaXF1ZSBzZSBlbGVzIHPDo28gcHJlY2lzb3MuXG4iCisiVm9jw6ogcG9kZSBzdXByaW1pciBlc3RhIG1lbnNhZ2VtLCBjb25maWd1cmFuZG8tbG9zIGV4cGxpY2l0YW1lbnRlOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIk8gdGV1IE5vbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgdHVAZXhhbXBsby5jb21cbiIKKyJcbiIKKyJBcMOzcyBmYXplciBpc3NvLCB2b2PDqiBwb2RlIGNvcnJlZ2lyIGEgaWRlbnRpZGFkZSB1c2FkYSBlbSBlc3RlIGNvbW1pdCBjb206XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU1Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBhbWVuZCB0aGUgbW9zdCByZWNlbnQgY29tbWl0LCBidXQgZG9pbmcgc28gd291bGQgbWFrZVxuIgorIml0IGVtcHR5LiBZb3UgY2FuIHJlcGVhdCB5b3VyIGNvbW1hbmQgd2l0aCAtLWFsbG93LWVtcHR5LCBvciB5b3UgY2FuXG4iCisicmVtb3ZlIHRoZSBjb21taXQgZW50aXJlbHkgd2l0aCBcImdpdCByZXNldCBIRUFEXlwiLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjAKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKyJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjMwOQorbXNnaWQgImZhaWxlZCB0byB1bnBhY2sgSEVBRCB0cmVlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzU3Cittc2dpZCAiaW50ZXJhY3RpdmUgYWRkIGZhaWxlZCIKK21zZ3N0ciAiZmFsaG91IGFkaWNpb25hciBpbnRlcmF0aXZvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5MAorIzogYnVpbHRpbi9jb21taXQuYzo0MTEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDYxCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQyCittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ0Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDU0Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG8gaW5kw61jZSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NzQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgdGVtcG9yYXJ5IGluZGV4IGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo1NDkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTU1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29tbWl0OiAlcyIKK21zZ3N0ciAiY29tbWl0IGludsOhbGlkbzogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTc4Cittc2dpZCAibWFsZm9ybWVkIC0tYXV0aG9yIHBhcmFtZXRlciIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYzOQorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaWRlbnQgc3RyaW5nOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Njc3CisjOiBidWlsdGluL2NvbW1pdC5jOjcxMAorIzogYnVpbHRpbi9jb21taXQuYzoxMDI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Njg5CisjOiBidWlsdGluL3Nob3J0bG9nLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2OTEKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3NpdmVsIGxlciBvIGZpY2hlaXJvIGRlIGxvZyAnJXMnIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwMQorbXNnaWQgImNvbW1pdCBoYXMgZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAiYSBtZW5zYWdlbSBkbyBjb21taXQgZXN0w6EgdmF6aWEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzE3Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJuw6NvIMOpIHBvc3NpdmVsIGxlciBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzIxCittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAibsOjbyDDqSBwb3NzaXZlbCBsZXIgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3NzaXZlbCBsZXIgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NzcKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgY29tbWl0IHRlbXBsYXRlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MDUKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MTAKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlcyIKK21zZ3N0ciAiJXNBdXRvcjogICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlcyIKK21zZ3N0ciAiJXNDb21taXRhZG9yOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTAKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg4NworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTAyCisjOiBidWlsdGluL3RhZy5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gZXhpc3RpbmcgYXV0aG9yIGZvdW5kIHdpdGggJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwMTQKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIxNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU0Cittc2dpZCAiVXNpbmcgYm90aCAtLXJlc2V0LWF1dGhvciBhbmQgLS1hdXRob3IgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjUKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAiVm9jw6ogbsOjbyB0ZW0gbmFkYSBhIGNvcnJlZ2lyLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY4Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNzAKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA3MworbXNnaWQgIk9wdGlvbnMgLS1zcXVhc2ggYW5kIC0tZml4dXAgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDgzCittc2dpZCAiT25seSBvbmUgb2YgLWMvLUMvLUYvLS1maXh1cCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDg1Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLy0tZml4dXAuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA5MworbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTEwCittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTExMgorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMTQKK21zZ2lkICJDbGV2ZXIuLi4gYW1lbmRpbmcgdGhlIGxhc3Qgb25lIHdpdGggZGlydHkgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTExNgorbXNnaWQgIkV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG5vciAtbzsgYXNzdW1pbmcgLS1vbmx5IHBhdGhzLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEyNgorIzogYnVpbHRpbi90YWcuYzo1NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTMxCittc2dpZCAiUGF0aHMgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMTUKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMxNworbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNTgKK21zZ2lkICJkZXRhY2hlZCBIRUFEIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM2MAorbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKHJvb3QtY29tbWl0KSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDUwCittc2dpZCAiY291bGQgbm90IHBhcnNlIEhFQUQgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ4NworIzogYnVpbHRpbi9tZXJnZS5jOjUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUwMQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTIwCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0OyB5b3UgZGlkIG5vdCBlZGl0IHRoZSBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU1NAorIzogYnVpbHRpbi9tZXJnZS5jOjkzNgorIzogYnVpbHRpbi9tZXJnZS5jOjk2MQorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NQorbXNnaWQgImNhbm5vdCBsb2NrIEhFQUQgcmVmIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OQorbXNnaWQgImNhbm5vdCB1cGRhdGUgSEVBRCByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTkwCittc2dpZCAiIgorIlJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgb3IgcXVvdGEgaXNcbiIKKyJub3QgZXhjZWVkZWQsIGFuZCB0aGVuIFwiZ2l0IHJlc2V0IEhFQURcIiB0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjM0CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgbm90IGF2YWlsYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjM4CisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRhZyBleGFjdGx5IG1hdGNoZXMgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mjg5CisjLCBjLWZvcm1hdAorbXNnaWQgInNlYXJjaGluZyB0byBkZXNjcmliZSAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gYW5ub3RhdGVkIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiSG93ZXZlciwgdGhlcmUgd2VyZSB1bmFubm90YXRlZCB0YWdzOiB0cnkgLS10YWdzLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDM2Cittc2dpZCAiLS1sb25nIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWJicmV2PTAiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ2MgorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICJOZW5odW0gbm9tZSBlbmNvbnRyYWRvLCBuw6NvIGRlc2NyZXZlIG5hZGEuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDgyCittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogbm90IGEgcmVndWxhciBmaWxlIG9yIHN5bWxpbmsiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9kaWZmLmM6MjIwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb3B0aW9uOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzoyOTcKK21zZ2lkICJOb3QgYSBnaXQgcmVwb3NpdG9yeSIKK21zZ3N0ciAiTsOjbyDDqSB1bSByZXBvc2l0b3JpbyBnaXQiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2RpZmYuYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuICVkIHRyZWVzIGdpdmVuOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmhhbmRsZWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMDAKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIm9iamVjdG8gJXMgbsOjbyBlbmNvbnRyYWRvIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjU5Cittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJbQWN0dWFsaXphZGFdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIiEgJS0qcyAlLSpzIC0+ICVzICAoY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2gpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyNzQKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNjAKK21zZ2lkICJbcmVqZWN0ZWRdIgorbXNnc3RyICJbcmVqZWl0YWRvXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI4NQorbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiW2V0aXF1ZXRhIGFjdHVhbGl6YWRhXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjI4NworIzogYnVpbHRpbi9mZXRjaC5jOjMyMgorIzogYnVpbHRpbi9mZXRjaC5jOjM0MAorbXNnaWQgIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzA1Cittc2dpZCAiW25ldyB0YWddIgorbXNnc3RyICJbbm92YSBldGlxdWV0YV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozMDgKK21zZ2lkICJbbmV3IGJyYW5jaF0iCittc2dzdHIgIltub3ZhIHJhbWFdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzExCittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJbbm92YSByZWZdIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzU2Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM1NgorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgImFjdHVhbGl6YcOnw6NvIGZvcsOnYWRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MzYyCittc2dpZCAiKG5vbi1mYXN0LWZvcndhcmQpIgorbXNnc3RyICIobm9uLWZhc3QtZm9yd2FyZCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozOTMKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgIm7Do28gw6kgcG9zc2l2ZWwgYWJyaXIgJXM6ICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0c1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRnJvbSAlLipzXG4iCittc2dzdHIgIlBhcmEgJS4qc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJzb21lIGxvY2FsIHJlZnMgY291bGQgbm90IGJlIHVwZGF0ZWQ7IHRyeSBydW5uaW5nXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyB0byByZW1vdmUgYW55IG9sZCwgY29uZmxpY3RpbmcgYnJhbmNoZXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU0OQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NTcKK21zZ2lkICJbZGVsZXRlZF0iCittc2dzdHIgIltlbGltaW5hZG9dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTU4CisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTUKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIihuZW5odW0pIgorCisjOiBidWlsdGluL2ZldGNoLmM6Njc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2ZldGNoLmM6NzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGZldGNoIGZyb20gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc4NgorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb24gXCIlc1wiIHZhbHVlIFwiJXNcIiBpcyBub3QgdmFsaWQgZm9yICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiQmFpeGFuZG8gJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjg5MAorIzogYnVpbHRpbi9yZW1vdGUuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZldGNoICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MDcKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAiIgorIk5lbmh1bSByZXBvc2l0w7NyaW8gcmVtb3RvIGVzcGVjaWZpY2Fkby4gUG9yIGZhdm9yLCBlc3BlY2lmaXF1ZSB1bSBVUkwgb3Ugb1xuIgorIm5vbWUgcmVtb3RvIGEgcGFydGlyIGRvIHF1YWwgbm92YXMgcmV2aXPDtWVzIGRldmVtIHNlciBvYnRpZGEuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTI3Cittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAiVm9jw6ogcHJlY2lzYSBlc3BlY2lmaWNhciB1bSBub21lIGRhIGV0aXF1ZXRhLiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk3OQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5ODEKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk5MgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSBvciByZW1vdGUgZ3JvdXA6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDAwCittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICJJbnbDoWxpZG8gJXM6ICclcyciCisKKyM6IGJ1aWx0aW4vZ2MuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIG9iamVjdCBkaXJlY3RvcnkgJS4qcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2djLmM6MjI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuIFlvdSBtYXkgYWxzb1xuIgorInJ1biBcImdpdCBnY1wiIG1hbnVhbGx5LiBTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNTEKK21zZ2lkICJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gY2hkaXI6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjQ3OAorIzogYnVpbHRpbi9ncmVwLmM6NTEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHRyZWUgKCVzKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo1MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo4ODgKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG9iamVjdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5NDMKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTY2Cittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2dyZXAuYzo5NzEKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTc0Cittc2dpZCAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQgY2Fubm90IGJlIHVzZWQgZm9yIHRyYWNrZWQgY29udGVudHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjk4MgorbXNnaWQgImJvdGggLS1jYWNoZWQgYW5kIHRyZWVzIGFyZSBnaXZlbi4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgImZvcm1hdG8gYWp1ZGEgbsOjbyByZWNvbmhlY2lkbyAnJXMnIgorCisjOiBidWlsdGluL2hlbHAuYzo4NworbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTAwCittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJlbWFjc2NsaWVudCB2ZXJzaW9uICclZCcgdG9vIG9sZCAoPCAyMikuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEyNgorIzogYnVpbHRpbi9oZWxwLmM6MTU0CisjOiBidWlsdGluL2hlbHAuYzoxNjMKKyM6IGJ1aWx0aW4vaGVscC5jOjE3MQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzoyODcKK21zZ2lkICJUaGUgbW9zdCBjb21tb25seSB1c2VkIGdpdCBjb21tYW5kcyBhcmU6IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3MgorbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2hlbHAuYzozODAKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMyCisjOiBidWlsdGluL2hlbHAuYzo0MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDUzCisjLCBjLWZvcm1hdAorbXNnaWQgImBnaXQgJXMnIGlzIGFsaWFzZWQgdG8gYCVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMDQKK21zZ2lkICJvYmplY3Qgb2YgdW5leHBlY3RlZCB0eXBlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgZmlsbCAlZCBieXRlIgorbXNnaWRfcGx1cmFsICJjYW5ub3QgZmlsbCAlZCBieXRlcyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MQorbXNnaWQgImVhcmx5IEVPRiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTIKK21zZ2lkICJyZWFkIGVycm9yIG9uIGlucHV0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NAorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MQorbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAibsOjbyDDqSBwb3NzaXZlbCBjcmVhciAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxOTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAiTsOjbyDDqSBwb3NzaXZlbCBhYnJpciBvIGZpY2hlaXJvIHBhY2tmaWxlICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwNgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlbHU6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM0NQorbXNnaWQgIm9mZnNldCB2YWx1ZSBvdmVyZmxvdyBmb3IgZGVsdGEgYmFzZSBvYmplY3QiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzUzCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICJvamVjdG8gY29tIHRpcG8gZGVzY29uaGVjaWRvICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozOTAKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICJOw6NvIMOpIHBvc3NpdmVsIHByZWFkIHBhY2sgZmlsZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzkyCisjLCBjLWZvcm1hdAorbXNnaWQgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZSBtaXNzaW5nIgorbXNnaWRfcGx1cmFsICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGVzIG1pc3NpbmciCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0MDUKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICJuw6NvIGZvaSBwb3Nzw612ZWwgbGVyIG9iamVjdG8gZXhpc3RlbnRlICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJsb2Igb2JqZWN0ICVzIgorbXNnc3RyICJpbnbDoWxpZG8gb2JqZWN0byBibG9iICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAiaW52w6FsaWRvOiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTAyCittc2dpZCAiRXJyb3IgaW4gb2JqZWN0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUwNAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NzYKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjYwMgorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MDYKK21zZ2lkICJSZWNlaXZpbmcgb2JqZWN0cyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MDYKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjcyOAorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3MzMKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgIk7Do28gw6kgcG9zc2l2ZWwgZnN0YXQgcGFja2ZpbGUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjczNgorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NTQKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICJSZXNvbHZlbmRvIGRlbHRhcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Nzg3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg2NgorIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4OTAKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlIGtlZXAgZmlsZSAnJXMnIgorbXNnc3RyICJuw6NvIMOpIHBvc3NpdmVsIGVzY3JldmVyIG8gZmljaGVybyBrZXBwICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjkxMQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAiTsOjbyDDqSBwb3NzaXZlbCBmZWNoYXIgbyBmaWNoZXJvIGVzY3JpdG8gJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTI0Cittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAiTsOjbyDDqSBwb3NzaXZlbCBndWFyZGFyIG8gZmljaGVybyBwYWNrIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MzUKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAiTsOjbyDDqSBwb3NzaXZlbCBndWFyZGFyIGZpY2hlcm8gaW5kZXgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIk7Do28gw6kgcG9zc2l2ZWwgYWJyaXIgbyBleGlzdGVudGUgZmljaGVpcm8gcGFjayAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTAyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICJOw6NvIMOpIHBvc3NpdmVsIGFicmlyIG8gZmljaGVpcm8gJ3BhY2sgaWR4JyBwYXJhICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEwODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMDcKK21zZ2lkICJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTQwCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTQzCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU1CisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCAlcyIKK21zZ3N0ciAiaW52w6FsaWRvICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTczCittc2dpZCAiLS1maXgtdGhpbiBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IC0tc3RkaW4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE3NworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE4NworIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk2Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMjAKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIG5hbWUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3ltbGluayAnJXMnICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgcGF0aCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGVtcGxhdGVzIG5vdCBmb3VuZCAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIG9mIGEgd3JvbmcgZm9ybWF0IHZlcnNpb24gJWQgZnJvbSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE5MgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgZ2l0IGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozMjIKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgasOhIGV4aXN0ZSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBnaXQgbGluayAlcyIKK21zZ3N0ciAiIgorCisjLgorIy4gKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCisjLiAqIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gKiAiIiwgYW5kIHRoZSBsYXN0ICclcyVzJyBpcyB0aGUgdmVyYmF0aW0gZGlyZWN0b3J5IG5hbWUuCisjLgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQyMAorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDIwCittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkiCittc2dzdHIgIkluaWNpYWxpemFkYSB2YXppbyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDIxCittc2dpZCAiIHNoYXJlZCIKK21zZ3N0ciAiIHBhcnRpbGhhZG8iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ0MAorbXNnaWQgImNhbm5vdCB0ZWxsIGN3ZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MjEKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTMyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LWRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTc4Cittc2dpZCAiQ2Fubm90IGFjY2VzcyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZpbmFsIG91dHB1dDogJWQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjQwMQorIzogYnVpbHRpbi9sb2cuYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdHlwZTogJWQiCittc2dzdHIgIlRpcG8gZGVzY29uaGVjaWRvOiAlZCIKKworIzogYnVpbHRpbi9sb2cuYzo2MDIKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6Njc1Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICJub21lIGRvIGRpcmV0w7NyaW8gZGUgc2HDrWRhIMOpIGRlbWFzaWFkbyBsb25nbyIKKworIzogYnVpbHRpbi9sb2cuYzo2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiTsOjbyDDqSBwb3NzaXZlbCBhYnJpciBvIGZpY2hlaXJvIHBhdGNoICVzIgorCisjOiBidWlsdGluL2xvZy5jOjcwMAorbXNnaWQgIk5lZWQgZXhhY3RseSBvbmUgcmFuZ2UuIgorbXNnc3RyICJOZWNlc3NpdGEgZGUgZXhhdGFtZW50ZSB1bSBpbnRlcnZhbG8uIgorCisjOiBidWlsdGluL2xvZy5jOjcwOAorbXNnaWQgIk5vdCBhIHJhbmdlLiIKK21zZ3N0ciAiTsOjbyDDqSB1bSBpbnRlcnZhbG8uIgorCisjOiBidWlsdGluL2xvZy5jOjc0NQorbXNnaWQgIkNvdWxkIG5vdCBleHRyYWN0IGVtYWlsIGZyb20gY29tbWl0dGVyIGlkZW50aXR5LiIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGV4dHJhaXIgYSBpZGVudGlkYWRlIGRvIGNvbW1pdHRlciBkbyBlLW1haWwuIgorCisjOiBidWlsdGluL2xvZy5jOjc5MQorbXNnaWQgIkNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIkNhcnRhIGRlIGFwcmVzZW50YcOnw6NvIG5lY2Vzc2l0YSB1bSBtb2RlbG8gZGUgZS1tYWlsIgorCisjOiBidWlsdGluL2xvZy5jOjg4NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgaW4tcmVwbHktdG86ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTU4Cittc2dpZCAiVHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgIkRvaXMgZGlyZXTDs3Jpb3MgZGUgc2HDrWRhPyIKKworIzogYnVpbHRpbi9sb2cuYzoxMTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImJvZ3VzIGNvbW1pdHRlciBpbmZvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyNAorbXNnaWQgIi1uIGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjYKK21zZ2lkICItLXN1YmplY3QtcHJlZml4IGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzQKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzNgorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzgKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjYxCittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgInNhw61kYSBwYWRyw6NvLCBvdSBkaXJldMOzcmlvLCBxdWFsIGRlbGVzPyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDE2Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgIkZhbGhvdSBhbyBjcmlhciBmaWNoZWlyb3MgZGUgc2HDrWRhIgorCisjOiBidWlsdGluL2xvZy5jOjE1MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNTM2CisjOiBidWlsdGluL2xvZy5jOjE1MzgKKyM6IGJ1aWx0aW4vbG9nLmM6MTU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiQ29tbWl0IGRlc2NvbmhlY2lkbyAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkwCittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkFzIGVzdHJhdMOpZ2lhcyBkaXNwb27DrXZlaXMgc8OjbzoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIkVzdHJhdMOpZ2lhcyBwZXJzb25hbGl6YWRhcyBkaXNwb27DrXZlaXMgc8OjbzoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNDAKK21zZ2lkICJjb3VsZCBub3QgcnVuIHN0YXNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MjQ1Cittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICJmYWxob3UgbyBzdGFzaCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNjkKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODYKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMTYKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIChuYWRhIHBhcmEgc3F1YXNoKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMyOQorIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM2MQorbXNnaWQgIldyaXRpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAiRXNjcmV2ZW5kbyBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL21lcmdlLmM6MzYzCittc2dpZCAiRmluaXNoaW5nIFNRVUFTSF9NU0ciCittc2dzdHIgIlRlcm1pbmFuZG8gU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQzNworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NjI5Cittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6Njc5Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2OTcKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MTAKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGZyb20gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6ODg2CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiTsOjbyBjb21taXRhbmRvIHVtIG1lcmdlOyB1c2EgJ2dpdCBjb21taXQnIHBhcmEgY29tcGxldGFyIG8gbWVyZ2UuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4OTIKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorIlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6OTE2Cittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICJNZW5zYWdlbSBkZSBjb21taXQgdmF6aWEuIgorCisjOiBidWlsdGluL21lcmdlLmM6OTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIldvbmRlcmZ1bC5cbiIKK21zZ3N0ciAiRmFzdGFzdGljby5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk5MworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDA5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgY29tbWl0IgorbXNnc3RyICInJXMnIG7Do28gw6kgdW0gY29tbWl0IgorCisjOiBidWlsdGluL21lcmdlLmM6MTA1MAorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiTmVuaHVtYSByYW1hIGFjdHVhbCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTIKK21zZ2lkICJObyByZW1vdGUgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTQKK21zZ2lkICJObyBkZWZhdWx0IHVwc3RyZWFtIGRlZmluZWQgZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlIHRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTE0NgorIzogYnVpbHRpbi9tZXJnZS5jOjEzMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIxNAorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzMAorIzogZ2l0LXB1bGwuc2g6MzEKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzMworIzogZ2l0LXB1bGwuc2g6MzQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzcKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgY2FuIG1lcmdlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI0MAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI0OQorbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjU0Cittc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tbm8tZmYgd2l0aCAtLWZmLW9ubHkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjYxCittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTMKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjk2Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyOTgKK21zZ2lkICJOb24tZmFzdC1mb3J3YXJkIGNvbW1pdCBkb2VzIG5vdCBtYWtlIHNlbnNlIGludG8gYW4gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQxMworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAiQWN0dWFsaXphbmRvICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ1MQorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICJOw6NvLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ5MAorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUxMworIzogYnVpbHRpbi9tZXJnZS5jOjE1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2Ugc3RyYXRlZ3kgaGFuZGxlZCB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWVyZ2Ugd2l0aCBzdHJhdGVneSAlcyBmYWlsZWQuXG4iCittc2dzdHIgIkZ1bmRpciBjb20gYSBlc3RyYXTDqWdpYSAlcyBmYWxob3UuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjExMgorbXNnaWQgImJhZCBzb3VyY2UiCittc2dzdHIgImZvbnRlIGludsOhbGlkYSIKKworIzogYnVpbHRpbi9tdi5jOjExNQorbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjExOAorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJIdWg/ICUuKnMgaXMgaW4gaW5kZXg/IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNDAKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJvIGRpcmVjdG9yaW8gZm9udGUgZXN0w6EgdmF6aW8iCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzEKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICJuw6NvIGVzdMOhIG5vIGNvbnRyb2xvIGRlIHZlcnPDtWVzIgorCisjOiBidWlsdGluL212LmM6MTczCittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICJleGlzdGUgZGVzdGlubyIKKworIzogYnVpbHRpbi9tdi5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICJzdWJzY3JldmVuZG8gJyVzJyIKKworIzogYnVpbHRpbi9tdi5jOjE4NAorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgIk7Do28gY29uc2VndWUgc3Vic2NyZXZlciIKKworIzogYnVpbHRpbi9tdi5jOjE4NworbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAibcO6bHRpcGxhcyBmb250ZXMgcGFyYSBvIG1lc21vIGFsdm8iCisKKyM6IGJ1aWx0aW4vbXYuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9tdi5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICJNdWRhciBkZSBub21lICVzIHBhcmEgJXNcbiIKKworIzogYnVpbHRpbi9tdi5jOjIxNQorIzogYnVpbHRpbi9yZW1vdGUuYzo3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIm11ZGFyIGRlIG5vbWUgJyVzJyBmYWxob3UiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE0NQorbXNnaWQgImNhbid0IGZkb3BlbiAnc2hvdycgb3V0cHV0IGZkIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5pc2ggJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTc1CisjOiBidWlsdGluL3RhZy5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTg5Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbm90ZSBjb250ZW50cyB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMTAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIxNQorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBub3RlIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBub3RlIGNvbnRlbnRzIGhhcyBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1MQorIzogYnVpbHRpbi90YWcuYzo1NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAibsOjbyBjb25zZWd1ZSBsZXIgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1MworIzogYnVpbHRpbi90YWcuYzo1NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNzIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NjEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NDQKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NDkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MjQKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NjgKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOTMKKyM6IGJ1aWx0aW4vdGFnLmM6NTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOTkKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byByZXdyaXRlIG5vdGVzIGluICVzIChvdXRzaWRlIG9mIHJlZnMvbm90ZXMvKSIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIHRoZQorIy4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMgaXRzIHZhbHVlCisjOiBidWlsdGluL25vdGVzLmM6Mzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiSW52w6FsaWRvICVzIHZhbG9yOiAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NDU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTQKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MjcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MzkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MTIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NTkKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDMzCittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAiZGVtYXNpYWRvIHBhcmFtZXRyb3MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTMKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAiTmVuaHVtYSBub3RhIGVuY29udHJhZGEgcGFyYSBvIG9iamVjdG8gJXMuIgorCisjOiBidWlsdGluL25vdGVzLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NTg1CisjOiBidWlsdGluL25vdGVzLmM6NjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIk92ZXJ3cml0aW5nIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXNcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NjM1Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL25vdGVzLmM6OTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9iamVjdCAlcyBoYXMgbm8gbm90ZVxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMTAzCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIzNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib3B0aW9uICVzIGRvZXMgbm90IGFjY2VwdCBuZWdhdGl2ZSBmb3JtIgorbXNnc3RyICJvcMOnw6NvICVzIG7Do28gYWNlaXRhIGZvcm1hdG8gbmVnYXRpdm8iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjM0NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgdmFsdWUgJyVzJyBmb3Igb3B0aW9uICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQ1Cittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjY0Cittc2dpZCAiLS1kZWxldGUgb25seSBhY2NlcHRzIHBsYWluIHRhcmdldCByZWYgbmFtZXMiCittc2dzdHIgIi0tZGVsZXRlIHPDsyBhY2VpdGEgbm9tZXMgc2ltcGxlcyBwYXJhIG8gcmVmIGRlIGRlc3Rpbm8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjk5Cittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG5vIHVwc3RyZWFtIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBjdXJyZW50IGJyYW5jaCBhbmQgc2V0IHRoZSByZW1vdGUgYXMgdXBzdHJlYW0sIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjEzNgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxNzQKK21zZ2lkICJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4MQorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gTWVyZ2UgdGhlIHJlbW90ZSBjaGFuZ2VzIChlLmcuICdnaXQgcHVsbCcpXG4iCisiYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTg3Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gSWYgeW91IGRpZCBub3QgaW50ZW5kIHRvIHB1c2ggdGhhdCBicmFuY2gsIHlvdSBtYXkgd2FudCB0b1xuIgorInNwZWNpZnkgYnJhbmNoZXMgdG8gcHVzaCBvciBzZXQgdGhlICdwdXNoLmRlZmF1bHQnIGNvbmZpZ3VyYXRpb25cbiIKKyJ2YXJpYWJsZSB0byAnY3VycmVudCcgb3IgJ3Vwc3RyZWFtJyB0byBwdXNoIG9ubHkgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3B1c2guYzoxOTMKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorImNvdW50ZXJwYXJ0LiBDaGVjayBvdXQgdGhpcyBicmFuY2ggYW5kIG1lcmdlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuICdnaXQgcHVsbCcpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIlB1c2hpbmcgcGFyYSAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgInJlcG9zaXRvcmlvIGludsOhbGlkbyAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzoyNzAKK21zZ2lkICIiCisiTm8gY29uZmlndXJlZCBwdXNoIGRlc3RpbmF0aW9uLlxuIgorIkVpdGhlciBzcGVjaWZ5IHRoZSBVUkwgZnJvbSB0aGUgY29tbWFuZC1saW5lIG9yIGNvbmZpZ3VyZSBhIHJlbW90ZSByZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4NQorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgZSAtLXRhZ3MgYXJlIHPDo28gaW5jb21wYXTDrXZlaXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4NgorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjkxCittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5MgorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk3Cittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzg1Cittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzg3Cittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAiQWN0dWFsaXphbmRvICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMAorbXNnaWQgIiIKKyItLW1pcnJvciBpcyBkYW5nZXJvdXMgYW5kIGRlcHJlY2F0ZWQ7IHBsZWFzZVxuIgorIlx0IHVzZSAtLW1pcnJvcj1mZXRjaCBvciAtLW1pcnJvcj1wdXNoIGluc3RlYWQiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJhcmd1bWVudG8gbWlycm9yIG7Do28gY29uaGVjaWRvOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxODUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5NQorIzogYnVpbHRpbi9yZW1vdGUuYzo2NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlICVzIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAibyByZW1vdG8gJXMgasOhIGV4aXN0ZSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTkKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgcmVtb3RlIG5hbWUiCittc2dzdHIgIiclcycgbsOjbyDDqSB1bSBub21iZSByZW1vdG8gdmFsaWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBjb25maWd1cmFyIGEgcmFtYSBtYXN0ZXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0MAorIzogYnVpbHRpbi9yZW1vdGUuYzo0NDgKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDUyCittc2dpZCAiKGRlbGV0ZSkiCittc2dzdHIgIihlbGltaW5hZG8pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU5NQorIzogYnVpbHRpbi9yZW1vdGUuYzo2MDEKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyB0byAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYWRpY2lvbmFyIG8gJyVzJyBwYXJhIG8gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MzkKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzkyCisjOiBidWlsdGluL3JlbW90ZS5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZTogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCByZW5vbWJyYXIgYSBzZWPDp8OjbyBkYSBjb25maWd1cmHDp8OjbyBkZSAnJXMnIHBhcmEgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjIKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIHJlbW92ZXIgYSBzZWPDp8OjbyBkYSBjb25maWd1cmHDp8OjbyAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm90IHVwZGF0aW5nIG5vbi1kZWZhdWx0IGZldGNoIHJlc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcyciCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCBhZGljaW9uYXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCAnJXMnIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYXRyaWJ1aXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVsZXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImZhbGhvdSBlbGltaW5hciAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAiZmFsaG91IGEgY3JpYXIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBicmFuY2ggJXMiCittc2dzdHIgIk7Do28gZm9pIHBvc3PDrXZlbCByZW1vdmVyIHJhbWEgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6ODM0Cittc2dpZCAiIgorIk5vdGU6IEEgYnJhbmNoIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdhcyBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgaXQsIHVzZToiCittc2dpZF9wbHVyYWwgIiIKKyJOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIHRoZW0sIHVzZToiCittc2dzdHJbMF0gIiIKK21zZ3N0clsxXSAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk0MworIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NDYKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAic2VndWlkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NDgKK21zZ2lkICIgc3RhbGUgKHVzZSAnZ2l0IHJlbW90ZSBwcnVuZScgdG8gcmVtb3ZlKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk1MAorbXNnaWQgIiA/Pz8iCittc2dzdHIgIiA/Pz8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTkxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwMQorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICJGdW5kaXIgY29tIHNlcnZpZG9yIHJlbW90byAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDAyCittc2dpZCAiICAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAgIGUgY29tIHJlbW90byIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiRnVuZGlyIGNvbSBzZXJ2aWRvciByZW1vdG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAwNQorbXNnaWQgIiAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAgZSBjb20gcmVtb3RvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTEKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgImNyZWFkbyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU0Cittc2dpZCAiZGVsZXRlIgorbXNnc3RyICJlbGltaW5hZG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1OAorbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgImFjdHVhbGl6YWRvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjEKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICJmYXN0LWZvcndhcmRhYmxlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjQKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAibG9jYWwgZGVzYXR1YWxpemFkYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExOAorIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiKiByZW1vdGEgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTIwCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODUKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKG5lbmh1bSBVUkwpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjkKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTMzCisjOiBidWlsdGluL3JlbW90ZS5jOjExMzUKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEzNworIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiUmFtYSBIRUFEOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2ggKHJlbW90ZSBIRUFEIGlzIGFtYmlndW91cywgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nKTpcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBSZW1vdGUgYnJhbmNoOiVzIgorbXNnaWRfcGx1cmFsICIgIFJlbW90ZSBicmFuY2hlczolcyIKK21zZ3N0clswXSAiUmFtYSByZW1vdGE6JXMiCittc2dzdHJbMV0gIlJhbWFzIHJlbW90YXM6JXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTQKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE4MQorbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjMKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiIgorbXNnc3RyWzFdICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MQorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIiCittc2dzdHJbMV0gIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE2Cittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTgKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiTsOjbyBmb2kgcG9zc8OtdmVsIGFicmlyICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgcmVmOiAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgY29uZmlndXJhciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAiQXBhZ2FuZG8gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI4MgorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkw6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3dvdWxkIHBydW5lXSAlcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzg3CisjOiBidWlsdGluL3JlbW90ZS5jOjE0NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAiTsOjbyBleGlzdGUgZXN0ZSByZW1vdG8gJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDE0Cittc2dpZCAibm8gcmVtb3RlIHNwZWNpZmllZCIKK21zZ3N0ciAiTmVuaHVtIHJlbW90byBlc3BlY2lmaWNhZG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ0NworbXNnaWQgIi0tYWRkIC0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIk5lbmh1bSBVUkwgZW5jb250cmFkbzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ5NworbXNnaWQgIldpbGwgbm90IGRlbGV0ZSBhbGwgbm9uLXB1c2ggVVJMcyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAibWlzdHVyYSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAic29mdCIKK21zZ3N0ciAibGV2ZSIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzCittc2dpZCAiaGFyZCIKK21zZ3N0ciAiZm9ydGUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgIm1lcmdlIgorbXNnc3RyICJqdW50YXIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMworbXNnaWQgImtlZXAiCittc2dzdHIgIm1hbnRlciIKKworIzogYnVpbHRpbi9yZXNldC5jOjc3Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIk7Do28gdGVucyBhIEhFQUQgdsOhbGlkYS4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo3OQorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo5NgorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCAlcyIKK21zZ3N0ciAiSEVBRCDDqSBhZ29yYSBlbSAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjEzMAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxMzMKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI5NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgYW5hbGlzYXIgb2JqZXRvICclcycuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzAyCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTEKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMxMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyNQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZXNldCBpbmRleCBmaWxlIHRvIHJldmlzaW9uICclcycuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzAKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMzEKK21zZ2lkICJwcm9ncmFtIGVycm9yIgorbXNnc3RyICJlcnJvIGRvIHByb2dyYW1hIgorCisjOiBidWlsdGluL3JldmVydC5jOjIyMQorbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgImZhbGhvdSBvIHJldmVydCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMzYKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgImNoZXJyeS1waWNrIGZhbGhvdSIKKworIzogYnVpbHRpbi9ybS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGUgZmlsZSBhbmQgdGhlIEhFQURcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoxMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleFxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjExOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uc1xuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi9ybS5jOjE5NAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgcmVtb3ZpbmcgJyVzJyByZWN1cnNpdmVseSB3aXRob3V0IC1yIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBhdXRob3I6ICVzIgorbXNnc3RyICJBdXRvciBlbSBmYWx0YTogJXMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjA3CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImV0aXF1ZXRhICclcycgbsOjbyBmb2kgZW5jb250cmFkYS4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjIzOQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdmVyaWZ5IHRoZSB0YWcgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjI0OQorbXNnaWQgIiIKKyJcbiIKKyIjXG4iCisiIyBXcml0ZSBhIHRhZyBtZXNzYWdlXG4iCisiIyBMaW5lcyBzdGFydGluZyB3aXRoICcjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCisiI1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjU2Cittc2dpZCAiIgorIlxuIgorIiNcbiIKKyIjIFdyaXRlIGEgdGFnIG1lc3NhZ2VcbiIKKyIjIExpbmVzIHN0YXJ0aW5nIHdpdGggJyMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyIjXG4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzoyOTgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzAwCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzI1Cittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjMzOAorbXNnaWQgInRhZyBoZWFkZXIgdG9vIGJpZy4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzozNzAKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgIm5lbmh1bWEgbWVuc2FqZSBwYXJhIGEgZXRpcXVldGE/IgorCisjOiBidWlsdGluL3RhZy5jOjM3NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDI1Cittc2dpZCAic3dpdGNoICdwb2ludHMtYXQnIHJlcXVpcmVzIGFuIG9iamVjdCIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjQyNworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjUwNgorbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiBlIC1uIGFyZSBzw6NvIGluY29tcGF0w612ZWlzIgorCisjOiBidWlsdGluL3RhZy5jOjUyMworbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MjUKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1MjcKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTM1Cittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTU1Cittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICJkZW1hc2lhZG8gcGFyYW1ldHJvcyIKKworIzogYnVpbHRpbi90YWcuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgImV0aXF1ZXRhICclcycgasOhIGV4aXN0ZSIKKworIzogYnVpbHRpbi90YWcuYzo1ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBsb2NrIHRoZSByZWYiCittc2dzdHIgIiIKKworIzogYnVpbHRpbi90YWcuYzo1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCB1cGRhdGUgdGhlIHJlZiIKK21zZ3N0ciAiIgorCisjOiBidWlsdGluL3RhZy5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIiIKKworIzogZ2l0LmM6MTYKK21zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLiIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjgKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDo5Cittc2dpZCAiRmluZCBieSBiaW5hcnkgc2VhcmNoIHRoZSBjaGFuZ2UgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTAKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAiTGlzdGFyLCBjcmlhciBvdSBhcGFnYXIgcmFtYXMiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTEKK21zZ2lkICJDaGVja291dCBhIGJyYW5jaCBvciBwYXRocyB0byB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTIKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoxMworbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJHcmF2YXIgYWx0ZXJhw6fDtWVzIHBhcmEgbyByZXBvc2l0w7NyaW8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MTQKK21zZ2lkICJTaG93IGNoYW5nZXMgYmV0d2VlbiBjb21taXRzLCBjb21taXQgYW5kIHdvcmtpbmcgdHJlZSwgZXRjIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTUKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTYKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoxNworbXNnaWQgIkNyZWF0ZSBhbiBlbXB0eSBnaXQgcmVwb3NpdG9yeSBvciByZWluaXRpYWxpemUgYW4gZXhpc3Rpbmcgb25lIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTgKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJNb3N0cmFkbyBsb2dzIGRlIGNvbW1pdHMiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTkKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjIwCittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjEKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBtZXJnZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjIyCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjMKK21zZ2lkICJGb3J3YXJkLXBvcnQgbG9jYWwgY29tbWl0cyB0byB0aGUgdXBkYXRlZCB1cHN0cmVhbSBoZWFkIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjQKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBjb21tb24tY21kcy5oOjI1Cittc2dpZCAiUmVtb3ZlIGZpbGVzIGZyb20gdGhlIHdvcmtpbmcgdHJlZSBhbmQgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgIiIKKworIzogY29tbW9uLWNtZHMuaDoyNgorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjcKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICJNb3N0cmFyIG8gZXN0YWRvIGxvcyByYW1vcyBkYXMgw6Fydm9yZXMgZGUgdHJhYmFsaG8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjgKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NTAKK21zZ2lkICJZb3UgbmVlZCB0byBzZXQgeW91ciBjb21taXR0ZXIgaW5mbyBmaXJzdCIKK21zZ3N0ciAiTmVjZXNzaXRhcyBwcmltZWlybyBkZSBlc3BlY2lmaWNpYXIgb3MgdGV1cyBkYWRvcyBkZSBjb21taXR0ZXIiCisKKyM6IGdpdC1hbS5zaDoxMzcKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDoxNTQKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDoxNjMKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIiIKKworIzogZ2l0LWFtLnNoOjI3NQorbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDozNjIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlBhdGNoIGZvcm1hdCAkcGF0Y2hfZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDozNjQKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgIkZhbGhvdSBhIGRldGVjw6fDo28gZG8gZm9ybWF0byBkbyBwYXRjaC4iCisKKyM6IGdpdC1hbS5zaDo0MTgKK21zZ2lkICItZCBvcHRpb24gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIERvIG5vdCB1c2UuIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo0ODEKKyMsIHNoLWZvcm1hdAorbXNnaWQgInByZXZpb3VzIHJlYmFzZSBkaXJlY3RvcnkgJGRvdGVzdCBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo0ODYKK21zZ2lkICJQbGVhc2UgbWFrZSB1cCB5b3VyIG1pbmQuIC0tc2tpcCBvciAtLWFib3J0PyIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NTEzCittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtYW0uc2g6NTc5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAkZmlsZXMpIgorbXNnc3RyICIiCisKKyM6IGdpdC1hbS5zaDo3NTUKK21zZ2lkICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYW0uc2g6NzY2Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGwgIgorbXNnc3RyICJBcGxpY2FyPyBTaW1beV0vW25dw6NvL1tlXWRpdGFyL1t2XWVyIHBhdGNoL1thXWNlaXRhciB0b2RvcyAiCisKKyM6IGdpdC1hbS5zaDo4MDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAkRklSU1RMSU5FIgorbXNnc3RyICJBcGxpY2FuZG86ICRGSVJTVExJTkUiCisKKyM6IGdpdC1hbS5zaDo4NDcKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIk5lbmh1bWEgbXVkYW7Dp2EgLS0gSsOhIGZvaSBhcGxpY2FkbyBvIHBhdGNoLiIKKworIzogZ2l0LWFtLnNoOjg3MworbXNnaWQgImFwcGx5aW5nIHRvIGFuIGVtcHR5IGhpc3RvcnkiCittc2dzdHIgIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjU0Cittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICJRdWVyZXMgcXVlIGV1IGZhw6dhIHBvciBzw60gW1kvbl0/IgorCisjOiBnaXQtYmlzZWN0LnNoOjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJGFyZyciCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDo5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmcnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIHZhbGlkIHJldmlzaW9uIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTE3Cittc2dpZCAiQmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBvdXQgJyRzdGFydF9oZWFkJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8dmFsaWRicmFuY2g+Jy4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNDAKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gc2Vla2VkIHRyZWUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNDQKK21zZ2lkICJCYWQgSEVBRCAtIHN0cmFuZ2Ugc3ltYm9saWMgcmVmIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAkc3RhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRhcmciCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyMzIKK21zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTAKK21zZ2lkICInZ2l0IGJpc2VjdCBiYWQnIGNhbiB0YWtlIG9ubHkgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6Mjc5Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIlRlbnMgYSBjZXJ0ZXphIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzU0CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJGludmFsaWQnIGlzIG5vdCBhIHZhbGlkIGNvbW1pdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtYmlzZWN0LnNoOjM2MworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJGJyYW5jaCcuXG4iCisiVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKworIzogZ2l0LWJpc2VjdC5zaDozOTAKK21zZ2lkICJObyBsb2dmaWxlIGdpdmVuIgorbXNnc3RyICJOZW5odW0gZmljaGVpcm8gZGUgbG9nIGRhZG8iCisKKyM6IGdpdC1iaXNlY3Quc2g6MzkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAkZmlsZSBmb3IgcmVwbGF5aW5nIgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDA4Cittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICIiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDc0Cittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICJOw6NvIGVzdGFtb3MgYSBiaXNzZWNjaW9uYXIuIgorCisjOiBnaXQtcHVsbC5zaDoyMQorbXNnaWQgIiIKKyJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLlxuIgorIlBsZWFzZSwgZml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24sIG9yIHVzZSAnZ2l0IGNvbW1pdCAtYScuIgorbXNnc3RyICIiCisKKyM6IGdpdC1wdWxsLnNoOjI1Cittc2dpZCAiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCittc2dzdHIgIiIKKworIzogZ2l0LXB1bGwuc2g6MTk3Cittc2dpZCAidXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGdpdC1wdWxsLnNoOjI1MworbXNnaWQgIkNhbm5vdCBtZXJnZSBtdWx0aXBsZSBicmFuY2hlcyBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIiIKKworIzogZ2l0LXB1bGwuc2g6MjU3Cittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzIgorbXNnc3RyICJOw6NvIMOpIHBvc3PDrXZlbCBmYXplciByZWJhc2UgY29tIHbDoXJpYXMgcmFtYXMiCisKKyM6IGdpdC1zdGFzaC5zaDo1MQorbXNnaWQgImdpdCBzdGFzaCBjbGVhciB3aXRoIHBhcmFtZXRlcnMgaXMgdW5pbXBsZW1lbnRlZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NzQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIKK21zZ3N0ciAiVHUgYWluZGEgbsOjbyB0ZW5zIG8gY29tbWl0IGluaWNpYWwiCisKKyM6IGdpdC1zdGFzaC5zaDo4OQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDoxMjMKKyM6IGdpdC1zdGFzaC5zaDoxMzYKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MTQwCittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAiTsOjbyBow6EgYWx0ZXJhw6fDtWVzIHNlbGVjY2lvbmFkYXMiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDMKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MTU2Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjIyMworbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAiU2VtIGFsdGVyYcOnw7VlcyBsb2NhaXMgcGFyYSBndWFyZGFyIgorCisjOiBnaXQtc3Rhc2guc2g6MjI3Cittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgIk7Do28gw6kgcG9zc8OtdmVsIGluaWNpYWxpemFyIG8gc3Rhc2giCisKKyM6IGdpdC1zdGFzaC5zaDoyMzUKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjI1MworbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6MzUyCittc2dpZCAiTm8gc3Rhc2ggZm91bmQuIgorbXNnc3RyICJuZW5odW0gc3Rhc2ggZW5jb250cmFkby4iCisKKyM6IGdpdC1zdGFzaC5zaDozNTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlRvbyBtYW55IHJldmlzaW9ucyBzcGVjaWZpZWQ6ICRSRVYiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjM2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDozOTMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQxMgorbXNnaWQgInVuYWJsZSB0byByZWZyZXNoIGluZGV4IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdGFzaC5zaDo0MTYKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQyNAorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQyNgorbXNnaWQgIkNvdWxkIG5vdCBzYXZlIGluZGV4IHRyZWUiCittc2dzdHIgIk7Do28gZm9pIHBvc2l2ZWwgZ3VhcmRhciBvIGluZGV4IHRyZWUiCisKKyM6IGdpdC1zdGFzaC5zaDo0NjAKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3Rhc2guc2g6NDkxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICJEZWl4YWRvIGNhaXIgJHtSRVZ9ICgkcykiCisKKyM6IGdpdC1zdGFzaC5zaDo0OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiIKKworIzogZ2l0LXN0YXNoLnNoOjQ5OQorbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiTmVuaHVtIG5vbWUgcGFyYSBhIHJhbWEgZXNwZWNpZmljYWRvIgorCisjOiBnaXQtc3Rhc2guc2g6NTcwCittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdHJpcCBvbmUgY29tcG9uZW50IG9mZiB1cmwgJyRyZW1vdGV1cmwnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTUwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDbG9uZSBvZiAnJHVybCcgaW50byBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIGZhaWxlZCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjE2MAorIywgc2gtZm9ybWF0Cittc2dpZCAiR2l0ZGlyICckYScgaXMgcGFydCBvZiB0aGUgc3VibW9kdWxlIHBhdGggJyRiJyBvciB2aWNlIHZlcnNhIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjY2CisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4MworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGEgdmFsaWQgZ2l0IHJlcG8iCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyOTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwMgorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjMwNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzQ5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJFbnRlcmluZyAnJHByZWZpeCRzbV9wYXRoJyIKK21zZ3N0ciAiRW50cmFuZG8gJyRwcmVmaXgkc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MzYzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGluZyBhdCAnJHNtX3BhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDIyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSByZWdpc3RlcmVkIGZvciBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1MjMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIG5vdCBpbml0aWFsaXplZFxuIgorIk1heWJlIHlvdSB3YW50IHRvIHVzZSAndXBkYXRlIC0taW5pdCc/IgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTY5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NzUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCc6IG1lcmdlZCBpbiAnJHNoYTEnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTgxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTgyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjA0CisjOiBnaXQtc3VibW9kdWxlLnNoOjkyNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzEyCittc2dpZCAiLS0iCittc2dzdHIgIi0tIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjc3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjc3MworIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjc3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjgwMQorbXNnaWQgImJsb2IiCittc2dzdHIgImJsb2IiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODAyCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICJzdWJtw7NkdWxvcyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN5bmNocm9uaXppbmcgc3VibW9kdWxlIHVybCBmb3IgJyRuYW1lJyIKK21zZ3N0ciAiIgorCisjfiBtc2dpZCAiY2hlcnJ5LXBpY2siCisjfiBtc2dzdHIgImNoZXJyeS1waWNrIgorCisjfiBtc2dpZCAiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiIKKyN+IG1zZ3N0ciAiUG9yIGZhdm9yIGluc2lyYSBhIG1lbnNhZ2VtIGRlIGNvbW1pdCBkYXMgc3VhcyBhbHRlcmHDp8O1ZXMuIgorCisjfiBtc2dpZCAiVG9vIG1hbnkgb3B0aW9ucyBzcGVjaWZpZWQiCisjfiBtc2dzdHIgIkRlbWFzaWFkYXMgb3DDp8O1ZXMgZXNwZWNpZmljYWRhcyIKZGlmZiAtLWdpdCBhL3BvL3J1LnBvIGIvcG8vcnUucG8KaW5kZXggMTdlZDAyNi4uYzllMWZiOCAxMDA2NDQKLS0tIGEvcG8vcnUucG8KKysrIGIvcG8vcnUucG8KQEAgLTEsMTcgKzEsMTcgQEAKLSMgVHJhbnNsYXRpb24gb2YgZ2l0ayB0byBSdXNzaWFuLgotIworIyBTT01FIERFU0NSSVBUSVZFIFRJVExFLgorIyBDb3B5cmlnaHQgKEMpIFlFQVIgVEhFIFBBQ0tBR0UnUyBDT1BZUklHSFQgSE9MREVSCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBQQUNLQUdFIHBhY2thZ2UuCisjIAogIyBUcmFuc2xhdG9yczoKLSMgMHhBWCA8a3VsZXNob3ZtYWlsQGdtYWlsLmNvbT4sIDIwMTQKLSMgQWxleCBSaWVzZW4gPHJhYS5sa21sQGdtYWlsLmNvbT4sIDIwMTUKLSMgRGltaXRyaXkgUnlhemFudGNldiA8REptMDBuQG1haWwucnU+LCAyMDE1Ci0jIERtaXRyeSBQb3RhcG92IDxkcG90YXBvdkBnbWFpbC5jb20+LCAyMDA5Ci0jIFNraXAgPGJzdnNraXBAcmFtYmxlci5ydT4sIDIwMTEKKyMgRGltaXRyaXkgUnlhemFudGNldiA8REptMDBuQG1haWwucnU+LCAyMDE0LTIwMTUKKyMgaW5zb2xvciA8aW5zb2xvckBnbWFpbC5jb20+LCAyMDE0CisjIGluc29sb3IgPGluc29sb3JAZ21haWwuY29tPiwgMjAxNAogbXNnaWQgIiIKIG1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogR2l0IFJ1c3NpYW4gTG9jYWxpemF0aW9uIFByb2plY3RcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMTQ6MzIrMTAwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMTAtMTIgMTA6MTQrMDAwMFxuIgorIlByb2plY3QtSWQtVmVyc2lvbjog0J/QtdGA0LXQstC+0LQgR2l0INC90LAg0YDRg9GB0YHQutC40Lkg0Y/Qt9GL0LpcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wOS0xNSAwNjo0NSswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0wOS0zMCAxNDo1MyswMDAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBEaW1pdHJpeSBSeWF6YW50Y2V2IDxESm0wMG5AbWFpbC5ydT5cbiIKICJMYW5ndWFnZS1UZWFtOiBSdXNzaWFuIChodHRwOi8vd3d3LnRyYW5zaWZleC5jb20vZGptMDBuL2dpdC1wby1ydS9sYW5ndWFnZS9ydS8pXG4iCiAiTUlNRS1WZXJzaW9uOiAxLjBcbiIKQEAgLTIwLDEzMTAgKzIwLDExMjg5IEBACiAiTGFuZ3VhZ2U6IHJ1XG4iCiAiUGx1cmFsLUZvcm1zOiBucGx1cmFscz00OyBwbHVyYWw9KG4lMTA9PTEgJiYgbiUxMDAhPTExID8gMCA6IG4lMTA+PTIgJiYgbiUxMDw9NCAmJiAobiUxMDA8MTIgfHwgbiUxMDA+MTQpID8gMSA6IG4lMTA9PTAgfHwgKG4lMTA+PTUgJiYgbiUxMDw9OSkgfHwgKG4lMTAwPj0xMSAmJiBuJTEwMDw9MTQpPyAyIDogMyk7XG4iCiAKLSM6IGdpdGs6MTQwCi1tc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgotbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQv9C+0LvRg9GH0LjRgtGMINGB0L/QuNGB0L7QuiDRhNCw0LnQu9C+0LIg0L3QtdC30LDQstC10YDRiNGR0L3QvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjzoiCisjOiBhZHZpY2UuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiAlLipzXG4iCittc2dzdHIgItC/0L7QtNGB0LrQsNC30LrQsDogJS4qc1xuIgogCi0jOiBnaXRrOjIxMiBnaXRrOjIzODEKLW1zZ2lkICJDb2xvciB3b3JkcyIKLW1zZ3N0ciAi0KbQstC10YLQvdGL0LUg0YHQu9C+0LLQsCIKLQotIzogZ2l0azoyMTcgZ2l0azoyMzgxIGdpdGs6ODIyMCBnaXRrOjgyNTMKLW1zZ2lkICJNYXJrdXAgd29yZHMiCi1tc2dzdHIgItCf0L7QvNC10YfQtdC90YvQtSDRgdC70L7QstCwIgotCi0jOiBnaXRrOjMyNAotbXNnaWQgIkVycm9yIHBhcnNpbmcgcmV2aXNpb25zOiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC/0YDQuCDRgNCw0LfQsdC+0YDQtSDRgNC10LTQsNC60YbQuNC4OiIKLQotIzogZ2l0azozODAKLW1zZ2lkICJFcnJvciBleGVjdXRpbmcgLS1hcmdzY21kIGNvbW1hbmQ6IgotbXNnc3RyICLQntGI0LjQsdC60LAg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0LrQvtC80LDQvdC00Ysg0LfQsNC00LDQvdC90L7QuSAtLWFyZ3NjbWQ6IgotCi0jOiBnaXRrOjM5MwotbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKLW1zZ3N0ciAi0KTQsNC50LvRiyDQvdC1INCy0YvQsdGA0LDQvdGLOiDRg9C60LDQt9Cw0L0gLS1tZXJnZSwg0L3QviDQvdC1INCx0YvQu9C+INC90LDQudC00LXQvdC+INC90Lgg0L7QtNC90L7Qs9C+INGE0LDQudC70LAg0LPQtNC1INGN0YLQsCDQvtC/0LXRgNCw0YbQuNGPINC00L7Qu9C20L3QsCDQsdGL0YLRjCDQt9Cw0LLQtdGA0YjQtdC90LAuIgotCi0jOiBnaXRrOjM5NgorIzogYWR2aWNlLmM6ODgKIG1zZ2lkICIiCi0iTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyB1bm1lcmdlZCBmaWxlcyBhcmUgd2l0aGluIGZpbGUgIgotImxpbWl0LiIKLW1zZ3N0ciAi0KTQsNC50LvRiyDQvdC1INCy0YvQsdGA0LDQvdGLOiDRg9C60LDQt9Cw0L0gLS1tZXJnZSwg0L3QviDQsiDRgNCw0LzQutCw0YUg0YPQutCw0LfQsNC90L3QvtCz0L4g0L7Qs9GA0LDQvdC40YfQtdC90LjRjyDQvdCwINC40LzQtdC90LAg0YTQsNC50LvQvtCyINC90LXRgiDQvdC4INC+0LTQvdC+0LPQviDQs9C00LUg0Y3RgtCwINC+0L/QtdGA0LDRhtC40Y8g0LTQvtC70LbQvdCwINCx0YvRgtGMINC30LDQstC10YDRiNC10L3QsC4iCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgorbXNnc3RyICLQmNGB0L/RgNCw0LLRjNGC0LUg0LjRhSDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1LCDQt9Cw0YLQtdC8INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBhZGQvcm0gPNGE0LDQudC7PsK7LFxu0YfRgtC+0LHRiyDQv9C+0LzQtdGC0LjRgtGMINC40YHQv9GA0LDQstC70LXQvdC40LUg0Lgg0YHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIuIgogCi0jOiBnaXRrOjQxOCBnaXRrOjU2NgotbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC30LDQv9GD0YHQutCwIGdpdCBsb2c6IgorIzogYWR2aWNlLmM6MTAxIGJ1aWx0aW4vbWVyZ2UuYzoxMjI3Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICLQktGLINC90LUg0LfQsNCy0LXRgNGI0LjQu9C4INGB0LvQuNGP0L3QuNC1ICjQv9GA0LjRgdGD0YLRgdGC0LLRg9C10YIg0YTQsNC50LsgTUVSR0VfSEVBRCkuIgogCi0jOiBnaXRrOjQzNiBnaXRrOjU4MgotbXNnaWQgIlJlYWRpbmciCi1tc2dzdHIgItCn0YLQtdC90LjQtSIKKyM6IGFkdmljZS5jOjEwMworbXNnaWQgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iCittc2dzdHIgItCS0YvQv9C+0LvQvdC40YLQtSDQutC+0LzQvNC40YIg0LLQsNGI0LjRhSDQuNC30LzQtdC90LXQvdC40LksINC/0LXRgNC10LQg0YHQu9C40Y/QvdC40LXQvC4iCiAKLSM6IGdpdGs6NDk2IGdpdGs6NDUyNQotbXNnaWQgIlJlYWRpbmcgY29tbWl0cy4uLiIKLW1zZ3N0ciAi0KfRgtC10L3QuNC1INC60L7QvNC80LjRgtC+0LIuLi4iCisjOiBhZHZpY2UuYzoxMDQKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgItCS0YvRhdC+0LQg0LjQty3Qt9CwINC90LXQt9Cw0LLQtdGA0YjQtdC90L3QvtCz0L4g0YHQu9C40Y/QvdC40Y8uIgogCi0jOiBnaXRrOjQ5OSBnaXRrOjE2MzcgZ2l0azo0NTI4Ci1tc2dpZCAiTm8gY29tbWl0cyBzZWxlY3RlZCIKLW1zZ3N0ciAi0J3QuNGH0LXQs9C+INC90LUg0LLRi9Cx0YDQsNC90L4iCisjOiBhcmNoaXZlLmM6MTIKK21zZ2lkICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBbPNC+0L/RhtC40Lg+XSA80YPQutCw0LfQsNGC0LXQu9GMLdC00LXRgNC10LLQsD4gWzzQv9GD0YLRjD7igKZdIgogCi0jOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKLW1zZ2lkICJDb21tYW5kIGxpbmUiCi1tc2dzdHIgItCa0L7QvNCw0L3QtNC90LDRjyDRgdGC0YDQvtC60LAiCisjOiBhcmNoaXZlLmM6MTMKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKIAotIzogZ2l0azoxNTExCi1tc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgotbXNnc3RyICLQntGI0LjQsdC60LAg0L7QsdGA0LDQsdC+0YLQutC4INCy0YvQstC+0LTQsCDQutC+0LzQsNC90LTRiyBnaXQgbG9nOiIKKyM6IGFyY2hpdmUuYzoxNAorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiAiCisiWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbLS1leGVjIDzQutC+0LzQsNC90LTQsD5dIFs80L7Qv9GG0LjQuD5dIDzRg9C60LDQt9Cw0YLQtdC70Ywt0LTQtdGA0LXQstCwPiBbPNC/0YPRgtGMPuKApl0iCiAKLSM6IGdpdGs6MTc0MAotbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCi1tc2dzdHIgItCd0LXRgiDQuNC90YTQvtGA0LzQsNGG0LjQuCDQviDQutC+0LzQvNC40YLQtSIKKyM6IGFyY2hpdmUuYzoxNQorbXNnaWQgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDxyZXBvPiBbLS1leGVjIDxjbWQ+XSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tcmVtb3RlIDzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbLS1leGVjIDzQutC+0LzQsNC90LTQsD5dIC0tbGlzdCIKIAotIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQotbXNnaWQgIk9LIgotbXNnc3RyICJPayIKKyM6IGFyY2hpdmUuYzozNDMgYnVpbHRpbi9hZGQuYzoxMzcgYnVpbHRpbi9hZGQuYzo0MjYgYnVpbHRpbi9ybS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICLRgdC/0LXRhtC40YTQuNC60LDRhtC40Y8g0L/Rg9GC0Lggwqslc8K7INC90LUg0YHQvtC+0YLQstC10YLRgdGC0LLRg9C10YIg0L3QuCDQvtC00L3QvtC80YMg0YTQsNC50LvRgyIKIAotIzogZ2l0azoxOTM0IGdpdGs6NDMxNyBnaXRrOjkxOTYgZ2l0azo5Mjc1IGdpdGs6OTM5MSBnaXRrOjk0NDAgZ2l0azo5NjcxCi0jOiBnaXRrOjExMjQyIGdpdGs6MTE1MjIKLW1zZ2lkICJDYW5jZWwiCi1tc2dzdHIgItCe0YLQvNC10L3QsCIKKyM6IGFyY2hpdmUuYzo0MjgKK21zZ2lkICJmbXQiCittc2dzdHIgItGE0L7RgNC80LDRgiIKIAotIzogZ2l0azoyMDY5Ci1tc2dpZCAiJlVwZGF0ZSIKLW1zZ3N0ciAi0J7QsdC90L7QstC40YLRjCIKKyM6IGFyY2hpdmUuYzo0MjgKK21zZ2lkICJhcmNoaXZlIGZvcm1hdCIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCINCw0YDRhdC40LLQsCIKIAotIzogZ2l0azoyMDcwCi1tc2dpZCAiJlJlbG9hZCIKLW1zZ3N0ciAi0J/QtdGA0LXRh9C40YLQsNGC0YwiCisjOiBhcmNoaXZlLmM6NDI5IGJ1aWx0aW4vbG9nLmM6MTIyOQorbXNnaWQgInByZWZpeCIKK21zZ3N0ciAi0L/RgNC10YTQuNC60YEiCiAKLSM6IGdpdGs6MjA3MQotbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKLW1zZ3N0ciAi0J7QsdC90L7QstC40YLRjCDRgdC/0LjRgdC+0Log0YHRgdGL0LvQvtC6IgorIzogYXJjaGl2ZS5jOjQzMAorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgItC00L7QsdCw0LLQu9GP0YLRjCDQv9GA0LXRhNC40LrRgSDQv9C10YDQtdC0INC60LDQttC00YvQvCDQv9GD0YLQtdC8INGE0LDQudC70LAg0LIg0LDRgNGF0LjQstC1IgogCi0jOiBnaXRrOjIwNzIKLW1zZ2lkICImTGlzdCByZWZlcmVuY2VzIgotbXNnc3RyICLQodC/0LjRgdC+0Log0YHRgdGL0LvQvtC6IgorIzogYXJjaGl2ZS5jOjQzMSBidWlsdGluL2FyY2hpdmUuYzo4OCBidWlsdGluL2JsYW1lLmM6MjUxNgorIzogYnVpbHRpbi9ibGFtZS5jOjI1MTcgYnVpbHRpbi9jb25maWcuYzo1OCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg3CisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg5IGJ1aWx0aW4vZ3JlcC5jOjcxMiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDYgYnVpbHRpbi9scy1maWxlcy5jOjQ0OSBidWlsdGluL25vdGVzLmM6Mzk1CisjOiBidWlsdGluL25vdGVzLmM6NTU4IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTA5IHBhcnNlLW9wdGlvbnMuaDoxNTMKK21zZ2lkICJmaWxlIgorbXNnc3RyICLRhNCw0LnQuyIKIAotIzogZ2l0azoyMDc0Ci1tc2dpZCAiU3RhcnQgZ2l0ICZndWkiCi1tc2dzdHIgItCX0LDQv9GD0YHRgtC40YLRjCBnaXQgZ3VpIgorIzogYXJjaGl2ZS5jOjQzMiBidWlsdGluL2FyY2hpdmUuYzo4OQorbXNnaWQgIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAi0LfQsNC/0LjRgdGMINCw0YDRhdC40LLQsCDQsiDRjdGC0L7RgiDRhNCw0LnQuyIKIAotIzogZ2l0azoyMDc2Ci1tc2dpZCAiJlF1aXQiCi1tc2dzdHIgItCX0LDQstC10YDRiNC40YLRjCIKKyM6IGFyY2hpdmUuYzo0MzQKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICLRh9C40YLQsNGC0YwgLmdpdGF0dHJpYnV0ZXMg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKIAotIzogZ2l0azoyMDY4Ci1tc2dpZCAiJkZpbGUiCi1tc2dzdHIgItCk0LDQudC7IgorIzogYXJjaGl2ZS5jOjQzNQorbXNnaWQgInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiCittc2dzdHIgItC+0YLRh9C10YIg0L7QsSDQsNGA0YXQuNCy0LjRgNC+0LLQsNC90L3Ri9GFINGE0LDQudC70LDRhSDQsiBzdGRlcnIiCiAKLSM6IGdpdGs6MjA4MAotbXNnaWQgIiZQcmVmZXJlbmNlcyIKLW1zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4IgorIzogYXJjaGl2ZS5jOjQzNgorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgItGC0L7Qu9GM0LrQviDRhdGA0LDQvdC10L3QuNC1IgogCi0jOiBnaXRrOjIwNzkKLW1zZ2lkICImRWRpdCIKLW1zZ3N0ciAi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwiCisjOiBhcmNoaXZlLmM6NDM3Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICLRgdC20LjQvNCw0YLRjCDQsdGL0YHRgtGA0LXQtSIKIAotIzogZ2l0azoyMDg0Ci1tc2dpZCAiJk5ldyB2aWV3Li4uIgotbXNnc3RyICLQndC+0LLQvtC1INC/0YDQtdC00YHRgtCw0LLQu9C10L3QuNC1Li4uIgorIzogYXJjaGl2ZS5jOjQ0NQorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAi0YHQttC40LzQsNGC0Ywg0LvRg9GH0YjQtSIKIAotIzogZ2l0azoyMDg1Ci1tc2dpZCAiJkVkaXQgdmlldy4uLiIKLW1zZ3N0ciAi0KDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUuLi4iCisjOiBhcmNoaXZlLmM6NDQ4Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICLQv9C10YDQtdGH0LjRgdC70LjRgtGMINC/0L7QtNC00LXRgNC20LjQstCw0LXQvNGL0LUg0YTQvtGA0LzQsNGC0Ysg0LDRgNGF0LjQstC+0LIiCiAKLSM6IGdpdGs6MjA4NgotbXNnaWQgIiZEZWxldGUgdmlldyIKLW1zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUiCisjOiBhcmNoaXZlLmM6NDUwIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwIGJ1aWx0aW4vY2xvbmUuYzo3NworbXNnaWQgInJlcG8iCittc2dzdHIgItGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCiAKLSM6IGdpdGs6MjA4OCBnaXRrOjQwNDMKLW1zZ2lkICImQWxsIGZpbGVzIgotbXNnc3RyICLQktGB0LUg0YTQsNC50LvRiyIKKyM6IGFyY2hpdmUuYzo0NTEgYnVpbHRpbi9hcmNoaXZlLmM6OTEKK21zZ2lkICJyZXRyaWV2ZSB0aGUgYXJjaGl2ZSBmcm9tIHJlbW90ZSByZXBvc2l0b3J5IDxyZXBvPiIKK21zZ3N0ciAi0L/QvtC70YPRh9C40YLRjCDQsNGA0YXQuNCyINC40Lcg0LLQvdC10YjQvdC10LPQviA80YDQtdC/0L7Qt9C40YLQvtGA0LjRjz4iCiAKLSM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKLW1zZ2lkICImVmlldyIKLW1zZ3N0ciAi0J/RgNC10LTRgdGC0LDQstC70LXQvdC40LUiCisjOiBhcmNoaXZlLmM6NDUyIGJ1aWx0aW4vYXJjaGl2ZS5jOjkyIGJ1aWx0aW4vbm90ZXMuYzo0NzkKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICLQutC+0LzQvNCw0L3QtNCwIgogCi0jOiBnaXRrOjIwOTMgZ2l0azoyMTAzIGdpdGs6MzAxMgotbXNnaWQgIiZBYm91dCBnaXRrIgotbXNnc3RyICLQniBnaXRrIgorIzogYXJjaGl2ZS5jOjQ1MyBidWlsdGluL2FyY2hpdmUuYzo5MworbXNnaWQgInBhdGggdG8gdGhlIHJlbW90ZSBnaXQtdXBsb2FkLWFyY2hpdmUgY29tbWFuZCIKK21zZ3N0ciAi0L/Rg9GC0Ywg0Log0LrQvtC80LDQvdC00LUgZ2l0LXVwbG9hZC1hcmNoaXZlINC90LAg0LzQsNGI0LjQvdC1INGBINCy0L3QtdGI0L3QuNC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvCIKIAotIzogZ2l0azoyMDk0IGdpdGs6MjEwOAotbXNnaWQgIiZLZXkgYmluZGluZ3MiCi1tc2dzdHIgItCd0LDQt9C90LDRh9C10L3QuNGPINC60LvQsNCy0LjQsNGC0YPRgNGLIgorIzogYXR0ci5jOjI2NQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAi0J7RgtGA0LjRhtCw0Y7RidC40LUg0YjQsNCx0LvQvtC90Ysg0LIg0LDRgtGA0LjQsdGD0YLQsNGFIGdpdCDQuNCz0L3QvtGA0LjRgNGD0Y7RgtGB0Y8uXG7QmNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrXFwhwrsg0LTQu9GPINCx0YPQutCy0LDQu9GM0L3QvtCz0L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0YHQuNC80LLQvtC70LAg0LIg0LfQvdCw0YfQtdC90LjQuCDCq9Cy0L7RgdC60LvQuNGG0LDRgtC10LvRjNC90YvQuSDQt9C90LDQusK7LiIKIAotIzogZ2l0azoyMDkyIGdpdGs6MjEwNwotbXNnaWQgIiZIZWxwIgotbXNnc3RyICLQn9C+0LTRgdC60LDQt9C60LAiCisjOiBicmFuY2guYzo2MAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3Qgc2V0dGluZyBicmFuY2ggJXMgYXMgaXRzIG93biB1cHN0cmVhbS4iCittc2dzdHIgItCd0LUg0YPRgdGC0LDQvdCw0LLQu9C40LLQsNGOINCy0LXRgtC60YMgJXMsINGC0LDQuiDRgtCw0Log0L7QvdCwINC/0YDQuNC90LDQtNC70LXQttC40YIg0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQvNGDINGA0LXQv9C+0LfQuNGC0L7RgNC40Y4uIgogCi0jOiBnaXRrOjIxODUgZ2l0azo4NjUyCi1tc2dpZCAiU0hBMSBJRDoiCi1tc2dzdHIgIlNIQTEgSUQ6IgorIzogYnJhbmNoLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICLQktC10YLQutCwICVzINC+0YLRgdC70LXQttC40LLQsNC10YIg0LLQvdC10YjQvdGO0Y4g0LLQtdGC0LrRgyAlcyDQuNC3ICVzINC/0LXRgNC10LzQtdGJ0LXQvdC40LXQvC4iCiAKLSM6IGdpdGs6MjIyOQotbXNnaWQgIlJvdyIKLW1zZ3N0ciAi0KHRgtGA0L7QutCwIgorIzogYnJhbmNoLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMuIgorbXNnc3RyICLQktC10YLQutCwICVzINC+0YLRgdC70LXQttC40LLQsNC10YIg0LLQvdC10YjQvdGO0Y4g0LLQtdGC0LrRgyAlcyDQuNC3ICVzLiIKIAotIzogZ2l0azoyMjY3Ci1tc2dpZCAiRmluZCIKLW1zZ3N0ciAi0J/QvtC40YHQuiIKKyM6IGJyYW5jaC5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi0JLQtdGC0LrQsCAlcyDQvtGC0YHQu9C10LbQuNCy0LDQtdGCINC70L7QutCw0LvRjNC90YPRjiDQstC10YLQutGDICVzINC/0LXRgNC10LzQtdGJ0LXQvdC40LXQvC4iCiAKLSM6IGdpdGs6MjI5NQorIzogYnJhbmNoLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJXMuIgorbXNnc3RyICLQktC10YLQutCwICVzINC+0YLRgdC70LXQttC40LLQsNC10YIg0LvQvtC60LDQu9GM0L3Rg9GOINCy0LXRgtC60YMgJXMuIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICLQktC10YLQutCwICVzINC+0YLRgdC70LXQttC40LLQsNC10YIg0LLQvdC10YjQvdGO0Y4g0YHRgdGL0LvQutGDICVzINC/0LXRgNC10LzQtdGJ0LXQvdC40LXQvC4iCisKKyM6IGJyYW5jaC5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAlcy4iCittc2dzdHIgItCS0LXRgtC60LAgJXMg0L7RgtGB0LvQtdC20LjQstCw0LXRgiDQstC90LXRiNC90Y7RjiDRgdGB0YvQu9C60YMgJXMuIgorCisjOiBicmFuY2guYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcyBieSByZWJhc2luZy4iCittc2dzdHIgItCS0LXRgtC60LAgJXMg0L7RgtGB0LvQtdC20LjQstCw0LXRgiDQu9C+0LrQsNC70YzQvdGD0Y4g0YHRgdGL0LvQutGDICVzINC/0LXRgNC10LzQtdGJ0LXQvdC40LXQvC4iCisKKyM6IGJyYW5jaC5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcy4iCittc2dzdHIgItCS0LXRgtC60LAgJXMg0L7RgtGB0LvQtdC20LjQstCw0LXRgiDQu9C+0LrQsNC70YzQvdGD0Y4g0YHRgdGL0LvQutGDICVzLiIKKworIzogYnJhbmNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiCittc2dzdHIgItCd0LUg0L7RgtGB0LvQtdC20LjQstCw0LXRgtGB0Y86INC90LXQvtC00L3QvtC30L3QsNGH0L3QsNGPINC40L3RhNC+0YDQvNCw0YbQuNGPINC00LvRjyDRgdGB0YvQu9C60LggJXMiCisKKyM6IGJyYW5jaC5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C8INC40LzQtdC90LXQvCDQstC10YLQutC4LiIKKworIzogYnJhbmNoLmM6MTY3CisjLCBjLWZvcm1hdAorbXNnaWQgIkEgYnJhbmNoIG5hbWVkICclcycgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLQktC10YLQutCwINGBINC40LzQtdC90LXQvCDCqyVzwrsg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCLiIKKworIzogYnJhbmNoLmM6MTc1Cittc2dpZCAiQ2Fubm90IGZvcmNlIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INC+0LHQvdC+0LLQuNGC0Ywg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgy4iCisKKyM6IGJyYW5jaC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNGB0YLRgNC+0LjRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+0YLRgdC70LXQttC40LLQsNC90LjRjzsg0YHRgtCw0YDRgtC+0LLQsNGPINGC0L7Rh9C60LAgwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQstC10YLQutC+0LkuIgorCisjOiBicmFuY2guYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi0LfQsNC/0YDQvtGI0LXQvdC90LDRjyDQstC10YLQutCwINCy0YvRiNC10YHRgtC+0Y/RidC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIMKrJXPCuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBicmFuY2guYzoxOTkKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCittc2dzdHIgIlxu0JXRgdC70Lgg0LLRiyDQv9C70LDQvdC40YDRg9C10YLQtSDQvtGB0L3QvtCy0YvQstCw0YLRjCDRgdCy0L7RjiDRgNCw0LHQvtGC0YMg0L3QsCDQstGL0YjQtdGB0YLQvtGP0YnQtdC5INCy0LXRgtC60LUsINC60L7RgtC+0YDQsNGPINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiDQstC+INCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgsINCy0LDQvCDQvNC+0LbQtdGCINC/0L7RgtGA0LXQsdC+0LLQsNGC0YzRgdGPINC30LDQv9GD0YHRgtC40YLRjCDCq2dpdCBmZXRjaMK7INC00LvRjyDQtdC1INC/0L7Qu9GD0YfQtdC90LjRjy5cblxu0JXRgdC70Lgg0LLRiyDQv9C70LDQvdC40YDRg9C10YLQtSDQvtGC0L/RgNCw0LLQuNGC0Ywg0L3QvtCy0YPRjiDQu9C+0LrQsNC70YzQvdGD0Y4g0LLQtdGC0LrRgywg0LrQvtGC0L7RgNCw0Y8g0LHRg9C00LXRgiDQvtGC0YHQu9C10LbQuNCy0LDRgtGM0YHRjywg0LLQviDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5LCDQstCw0Lwg0LzQvtC20LXRgiDQv9C+0YLRgNC10LHQvtCy0LDRgtGM0YHRjyDQt9Cw0L/Rg9GB0YLQuNGC0YwgwqtnaXQgcHVzaCAtdcK7IOKAlCDRh9GC0L7QsdGLINGB0L7RhdGA0LDQvdC40YLRjCDQvdCw0YHRgtGA0L7QudC60YMg0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0LTQu9GPINC+0YLQv9GA0LDQstC60LguIgorCisjOiBicmFuY2guYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0LjQvNGPINC+0LHRitC10LrRgtCwOiDCqyVzwrsuIgorCisjOiBicmFuY2guYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAi0J3QtdC+0LTQvdC+0LfQvdCw0YfQvdC+0LUg0LjQvNGPINC+0LHRitC10LrRgtCwOiDCqyVzwrsuIgorCisjOiBicmFuY2guYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgYnJhbmNoIHBvaW50OiAnJXMnLiIKK21zZ3N0ciAi0J3QtdC00L7Qv9GD0YHRgtC40LzQsNGPINGC0L7Rh9C60LAg0LLQtdGC0LrQuDogwqslc8K7LiIKKworIzogYnJhbmNoLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgYWxyZWFkeSBjaGVja2VkIG91dCBhdCAnJXMnIgorbXNnc3RyICLCqyVzwrsg0YPQttC1INC90LDRhdC+0LTQuNGC0YHRjyDQvdCwIMKrJXPCuyIKKworIzogYnVuZGxlLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiwqslc8K7INC90LUg0L/QvtGF0L7QtiDQvdCwINGE0LDQudC7INC/0LDQutC10YLQsCDQstC10YDRgdC40LggMiIKKworIzogYnVuZGxlLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlYWRlcjogJXMlcyAoJWQpIgorbXNnc3RyICLQvdC10L7Qv9C+0LfQvdCw0L3QvdGL0Lkg0LfQsNCz0L7Qu9C+0LLQvtC6OiAlcyVzICglZCkiCisKKyM6IGJ1bmRsZS5jOjg3IGJ1aWx0aW4vY29tbWl0LmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywgwqslc8K7IgorCisjOiBidW5kbGUuYzoxMzkKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIHRoZXNlIHByZXJlcXVpc2l0ZSBjb21taXRzOiIKK21zZ3N0ciAi0JIg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGCINC90LXQvtCx0YXQvtC00LjQvNGL0LUg0LrQvtC80LzQuNGC0Ys6IgorCisjOiBidW5kbGUuYzoxNjMgc2VxdWVuY2VyLmM6NjM2IHNlcXVlbmNlci5jOjEwODMgYnVpbHRpbi9ibGFtZS5jOjI3MDgKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjUyIGJ1aWx0aW4vY29tbWl0LmM6MTA0NCBidWlsdGluL2xvZy5jOjMzNAorIzogYnVpbHRpbi9sb2cuYzo4NTAgYnVpbHRpbi9sb2cuYzoxNDU3IGJ1aWx0aW4vbG9nLmM6MTY5MCBidWlsdGluL21lcmdlLmM6MzU4CisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTU4Cittc2dpZCAicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC40L3QuNGG0LjQsNC70LjQt9Cw0YbQuNC4INC/0YDQvtGF0L7QtNCwINC/0L4g0YDQtdC00LDQutGG0LjRj9C8IgorCisjOiBidW5kbGUuYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gItCf0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiDRjdGC0YMgJWQg0YHRgdGL0LvQutGDOiIKK21zZ3N0clsxXSAi0J/QsNC60LXRgiDRgdC+0LTQtdGA0LbQuNGCINGN0YLQuCAlZCDRgdGB0YvQu9C60Lg6IgorbXNnc3RyWzJdICLQn9Cw0LrQtdGCINGB0L7QtNC10YDQttC40YIg0Y3RgtC4ICVkINGB0YHRi9C70L7QujoiCittc2dzdHJbM10gItCf0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiDRjdGC0LggJWQg0YHRgdGL0LvQvtC6OiIKKworIzogYnVuZGxlLmM6MTkyCittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgItCf0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiDQv9C+0LvQvdGD0Y4g0LjRgdGC0L7RgNC40Y4uIgorCisjOiBidW5kbGUuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gItCf0LDQutC10YIg0YLRgNC10LHRg9C10YIg0Y3RgtGDICVkINGB0YHRi9C70LrRgzoiCittc2dzdHJbMV0gItCf0LDQutC10YIg0YLRgNC10LHRg9C10YIg0Y3RgtC4ICVkINGB0YHRi9C70LrQuDoiCittc2dzdHJbMl0gItCf0LDQutC10YIg0YLRgNC10LHRg9C10YIg0Y3RgtC4ICVkINGB0YHRi9C70L7QujoiCittc2dzdHJbM10gItCf0LDQutC10YIg0YLRgNC10LHRg9C10YIg0Y3RgtC4ICVkINGB0YHRi9C70L7QujoiCisKKyM6IGJ1bmRsZS5jOjI1MworbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0L7QsdGK0LXQutGC0Ysg0L/QsNC60LXRgtCwIgorCisjOiBidW5kbGUuYzoyNjQKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAi0LrRgNC40YLQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LAgcGFjay1vYmplY3RzIgorCisjOiBidW5kbGUuYzozMDQKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICLQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsCByZXYtbGlzdCIKKworIzogYnVuZGxlLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZiAnJXMnIGlzIGV4Y2x1ZGVkIGJ5IHRoZSByZXYtbGlzdCBvcHRpb25zIgorbXNnc3RyICLRgdGB0YvQu9C60LAgwqslc8K7INC40YHQutC70Y7Rh9C10L3QsCDQsiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Lgg0YEg0L7Qv9GG0LjRj9C80LggcmV2LWxpc3QiCisKKyM6IGJ1bmRsZS5jOjQ0MyBidWlsdGluL2xvZy5jOjE1NyBidWlsdGluL2xvZy5jOjEzNjcgYnVpbHRpbi9zaG9ydGxvZy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLQvdC10L7Qv9C+0LfQvdCw0L3QvdGL0Lkg0LDRgNCz0YPQvNC10L3RgjogJXMiCisKKyM6IGJ1bmRsZS5jOjQ0OQorbXNnaWQgIlJlZnVzaW5nIHRvIGNyZWF0ZSBlbXB0eSBidW5kbGUuIgorbXNnc3RyICLQntGC0LrQu9C+0L3QtdC90LjQtSDRgdC+0LfQtNCw0L3QuNGPINC/0YPRgdGC0L7Qs9C+INC/0LDQutC10YLQsC4iCisKKyM6IGJ1bmRsZS5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywgwqslc8K7IgorCisjOiBidW5kbGUuYzo0ODAKK21zZ2lkICJpbmRleC1wYWNrIGRpZWQiCittc2dzdHIgItC60YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwIGluZGV4LXBhY2siCisKKyM6IGNvbG9yLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDQt9C90LDRh9C10L3QuNC1INGG0LLQtdGC0LA6ICUuKnMiCisKKyM6IGNvbW1pdC5jOjQwIGJ1aWx0aW4vYW0uYzo0NTEgYnVpbHRpbi9hbS5jOjQ4NyBidWlsdGluL2FtLmM6MTUxNgorIzogYnVpbHRpbi9hbS5jOjIxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCAlcyIKKworIzogY29tbWl0LmM6NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC60L7QvNC80LjRgtC+0LwhIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgItC/0LDQvNGP0YLRjCDQuNGB0YfQtdGA0L/QsNC90LAiCisKKyM6IGNvbmZpZy5jOjQ3NCBjb25maWcuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyBmaWxlIGxpbmUgJWQgaW4gJXMiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQsiAlZCDRgdGC0YDQvtC60LUg0YTQsNC50LvQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0LIgJXMiCisKKyM6IGNvbmZpZy5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90L7QtSDRh9C40YHQu9C+0LLQvtC1INC30L3QsNGH0LXQvdC40LUgwqslc8K7INC00LvRjyDCqyVzwrsg0LIgJXM6ICVzIgorCisjOiBjb25maWcuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdC+0LUg0YfQuNGB0LvQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyDQtNC70Y8gwqslc8K7OiAlcyIKKworIzogY29uZmlnLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciCittc2dzdHIgItGB0LHQvtC5INGA0LDQt9Cy0L7RgNCw0YfQuNCy0LDQvdC40Y8g0L/Rg9GC0Lgg0LrQsNGC0LDQu9C+0LPQsCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y86IMKrJXPCuyIKKworIzogY29uZmlnLmM6NzU3IGNvbmZpZy5jOjc2OAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgemxpYiBjb21wcmVzc2lvbiBsZXZlbCAlZCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGD0YDQvtCy0LXQvdGMINGB0LbQsNGC0LjRjyB6bGliICVkIgorCisjOiBjb25maWcuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNGL0Lkg0YDQtdC20LjQvCDRgdC+0LfQtNCw0L3QuNGPINC+0LHRitC10LrRgtCwOiAlcyIKKworIzogY29uZmlnLmM6MTIxNgorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y4g0LjQtyDQutC+0LzQsNC90LTQvdC+0Lkg0YHRgtGA0L7QutC4IgorCisjOiBjb25maWcuYzoxMjc3Cittc2dpZCAidW5rbm93biBlcnJvciBvY2N1cmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgItC/0YDQvtC40LfQvtGI0LvQsCDQvdC10LjQt9Cy0LXRgdGC0L3QsNGPINC+0YjQuNCx0LrQsCDQv9GA0Lgg0YfRgtC10L3QuNC4INGE0LDQudC70L7QsiDQutC+0L3RhNC40LPRg9GA0LDRhtC40LgiCisKKyM6IGNvbmZpZy5jOjE2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDCqyVzwrsg0LIg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4INC40Lcg0LrQvtC80LDQvdC00L3QvtC5INGB0YLRgNC+0LrQuCIKKworIzogY29uZmlnLmM6MTYwMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90LDRjyDQv9C10YDQtdC80LXQvdC90LDRjyDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lggwqslc8K7INCyINGE0LDQudC70LUgwqslc8K7INC90LAg0YHRgtGA0L7QutC1ICVkIgorCisjOiBjb25maWcuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiVzINC40LzQtdC10YIg0L3QtdGB0LrQvtC70YzQutC+INC30L3QsNGH0LXQvdC40LkiCisKKyM6IGNvbm5lY3RlZC5jOjY5Cittc2dpZCAiQ291bGQgbm90IHJ1biAnZ2l0IHJldi1saXN0JyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/Rg9GB0YLQuNGC0YwgwqtnaXQgcmV2LWxpc3TCuyIKKworIzogY29ubmVjdGVkLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0OiAlcyIKK21zZ3N0ciAi0YHQsdC+0Lkg0LfQsNC/0LjRgdC4INCyIHJldi1saXN0OiAlcyIKKworIzogY29ubmVjdGVkLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW46ICVzIgorbXNnc3RyICLRgdCx0L7QuSDQt9Cw0LrRgNGL0YLQuNGPINGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwINGDIHJldi1saXN0OiAlcyIKKworIzogZGF0ZS5jOjk1Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAi0LIg0LHRg9C00YPRidC10LwiCisKKyM6IGRhdGUuYzoxMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHNlY29uZCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBzZWNvbmRzIGFnbyIKK21zZ3N0clswXSAiJWx1INGB0LXQutGD0L3QtNGDINC90LDQt9Cw0LQiCittc2dzdHJbMV0gIiVsdSDRgdC10LrRg9C90LTRiyDQvdCw0LfQsNC0IgorbXNnc3RyWzJdICIlbHUg0YHQtdC60YPQvdC0INC90LDQt9Cw0LQiCittc2dzdHJbM10gIiVsdSDRgdC10LrRg9C90LQg0L3QsNC30LDQtCIKKworIzogZGF0ZS5jOjEwOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgbWludXRlIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1pbnV0ZXMgYWdvIgorbXNnc3RyWzBdICIlbHUg0LzQuNC90YPRgtGDINC90LDQt9Cw0LQiCittc2dzdHJbMV0gIiVsdSDQvNC40L3Rg9GC0Ysg0L3QsNC30LDQtCIKK21zZ3N0clsyXSAiJWx1INC80LjQvdGD0YIg0L3QsNC30LDQtCIKK21zZ3N0clszXSAiJWx1INC80LjQvdGD0YIg0L3QsNC30LDQtCIKKworIzogZGF0ZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBob3VycyBhZ28iCittc2dzdHJbMF0gIiVsdSDRh9Cw0YEg0L3QsNC30LDQtCIKK21zZ3N0clsxXSAiJWx1INGH0LDRgdCwINC90LDQt9Cw0LQiCittc2dzdHJbMl0gIiVsdSDRh9Cw0YHQvtCyINC90LDQt9Cw0LQiCittc2dzdHJbM10gIiVsdSDRh9Cw0YHQvtCyINC90LDQt9Cw0LQiCisKKyM6IGRhdGUuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBkYXlzIGFnbyIKK21zZ3N0clswXSAiJWx1INC00LXQvdGMINC90LDQt9Cw0LQiCittc2dzdHJbMV0gIiVsdSDQtNC90Y8g0L3QsNC30LDQtCIKK21zZ3N0clsyXSAiJWx1INC00L3QtdC5INC90LDQt9Cw0LQiCittc2dzdHJbM10gIiVsdSDQtNC90LXQuSDQvdCw0LfQsNC0IgorCisjOiBkYXRlLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB3ZWVrIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHdlZWtzIGFnbyIKK21zZ3N0clswXSAiJWx1INC90LXQtNC10LvRjiDQvdCw0LfQsNC0IgorbXNnc3RyWzFdICIlbHUg0L3QtdC00LXQu9C4INC90LDQt9Cw0LQiCittc2dzdHJbMl0gIiVsdSDQvdC10LTQtdC70Ywg0L3QsNC30LDQtCIKK21zZ3N0clszXSAiJWx1INC90LXQtNC10LvRjCDQvdCw0LfQsNC0IgorCisjOiBkYXRlLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlbHUg0LzQtdGB0Y/RhiDQvdCw0LfQsNC0IgorbXNnc3RyWzFdICIlbHUg0LzQtdGB0Y/RhtCwINC90LDQt9Cw0LQiCittc2dzdHJbMl0gIiVsdSDQvNC10YHRj9GG0LXQsiDQvdCw0LfQsNC0IgorbXNnc3RyWzNdICIlbHUg0LzQtdGB0Y/RhtC10LIg0L3QsNC30LDQtCIKKworIzogZGF0ZS5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgeWVhciIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIgorbXNnc3RyWzBdICIlbHUg0LPQvtC0IgorbXNnc3RyWzFdICIlbHUg0LPQvtC00LAiCittc2dzdHJbMl0gIiVsdSDQu9C10YIiCittc2dzdHJbM10gIiVsdSDQu9C10YIiCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzINC4ICVsdSDQvNC10YHRj9GGINC90LDQt9Cw0LQiCittc2dzdHJbMV0gIiVzINC4ICVsdSDQvNC10YHRj9GG0LAg0L3QsNC30LDQtCIKK21zZ3N0clsyXSAiJXMg0LggJWx1INC80LXRgdGP0YbQtdCyINC90LDQt9Cw0LQiCittc2dzdHJbM10gIiVzINC4ICVsdSDQvNC10YHRj9GG0LXQsiDQvdCw0LfQsNC0IgorCisjOiBkYXRlLmM6MTU0IGRhdGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMgYWdvIgorbXNnc3RyWzBdICIlbHUg0LPQvtC0INC90LDQt9Cw0LQiCittc2dzdHJbMV0gIiVsdSDQs9C+0LTQsCDQvdCw0LfQsNC0IgorbXNnc3RyWzJdICIlbHUg0LvQtdGCINC90LDQt9Cw0LQiCittc2dzdHJbM10gIiVsdSDQu9C10YIg0L3QsNC30LDQtCIKKworIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAi0YHQsdC+0Lkg0YfRgtC10L3QuNGPIG9yZGVyZmlsZSDCqyVzwrsiCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjUzNgorbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICLQktGL0L/QvtC70L3Rj9C10YLRgdGPINC90LXRgtC+0YfQvdC+0LUg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNGPIgorCisjOiBkaWZmLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiICDQodCx0L7QuSDRgNCw0LfQsdC+0YDQsCDQstC10LvQuNGH0LjQvdGLINGB0YDQtdC30LAgKGN1dC1vZmYpINGDIGRpcnN0YXQgwqslc8K7XG4iCisKKyM6IGRpZmYuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIKK21zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90YvQuSDQv9Cw0YDQsNC80LXRgtGAIGRpcnN0YXQ6IMKrJXPCu1xuIgorCisjOiBkaWZmLmM6MjE2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gdmFsdWUgZm9yICdkaWZmLnN1Ym1vZHVsZScgY29uZmlnIHZhcmlhYmxlOiAnJXMnIgorbXNnc3RyICLQndC10LjQt9Cy0LXRgdGC0L3QvtC1INC30L3QsNGH0LXQvdC40Y8g0LTQu9GPINC/0LXRgNC10LzQtdC90L3QvtC5IMKrZGlmZi5zdWJtb2R1bGXCuzogwqslc8K7IgorCisjOiBkaWZmLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3VuZCBlcnJvcnMgaW4gJ2RpZmYuZGlyc3RhdCcgY29uZmlnIHZhcmlhYmxlOlxuIgorIiVzIgorbXNnc3RyICLQndCw0LnQtNC10L3RiyDQvtGI0LjQsdC60Lgg0LIg0L/QtdGA0LXQvNC10L3QvdC+0LkgwqtkaWZmLmRpcnN0YXTCuzpcbiVzIgorCisjOiBkaWZmLmM6Mjk5OAorIywgYy1mb3JtYXQKK21zZ2lkICJleHRlcm5hbCBkaWZmIGRpZWQsIHN0b3BwaW5nIGF0ICVzIgorbXNnc3RyICLQutGA0LjRgtC40YfQtdGB0LrQsNGPINC+0YjQuNCx0LrQsCDQv9GA0Lgg0LLQvdC10YjQvdC10Lwg0YHRgNCw0LLQvdC10L3QuNC4LCDQvtGB0YLQsNC90L7QsiDQvdCwICVzIgorCisjOiBkaWZmLmM6MzM5NAorbXNnaWQgIi0tZm9sbG93IHJlcXVpcmVzIGV4YWN0bHkgb25lIHBhdGhzcGVjIgorbXNnc3RyICItLWZvbGxvdyDRgtGA0LXQsdGD0LXRgiDRgNC+0LLQvdC+INC+0LTQvdC+0Lkg0YHQv9C10YbQuNGE0LjQutCw0YbQuNC4INC/0YPRgtC4IgorCisjOiBkaWZmLmM6MzU1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICLQodCx0L7QuSDRgNCw0LfQsdC+0YDQsCDQv9Cw0YDQsNC80LXRgtGA0LAg0L7Qv9GG0LjQuCAtLWRpcnN0YXQvLVggOlxuJXMiCisKKyM6IGRpZmYuYzozNTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSAtLXN1Ym1vZHVsZSBvcHRpb24gcGFyYW1ldGVyOiAnJXMnIgorbXNnc3RyICLQodCx0L7QuSDRgNCw0LfQsdC+0YDQsCDQv9Cw0YDQsNC80LXRgtGA0LAg0L7Qv9GG0LjQuCAtLXN1Ym1vZHVsZTogwqslc8K7IgorCisjOiBkaXIuYzoxODUzCittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQuNC80Y8g0Y/QtNGA0LAg0Lgg0LjQvdGE0L7RgNC80LDRhtC40Y4iCisKKyM6IGRpci5jOjE5MzYKK21zZ2lkICJVbnRyYWNrZWQgY2FjaGUgaXMgZGlzYWJsZWQgb24gdGhpcyBzeXN0ZW0uIgorbXNnc3RyICLQmtGN0Ygg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiDQvtGC0LrQu9GO0YfQtdC9INC90LAg0Y3RgtC+0Lkg0YHQuNGB0YLQtdC80LUuIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTY2IGdwZy1pbnRlcmZhY2UuYzoyMzcKK21zZ2lkICJjb3VsZCBub3QgcnVuIGdwZy4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0YPRgdGC0LjRgtGMIGdwZy4iCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoxNzgKK21zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCittc2dzdHIgImdwZyDQvdC1INC/0YDQuNC90Y/QuyDQtNCw0L3QvdGL0LUiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoxODkKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyDQvdC1INGD0LTQsNC70L7RgdGMINC/0L7QtNC/0LjRgdCw0YLRjCDQtNCw0L3QvdGL0LUiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAnJXMnOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQstGA0LXQvNC10L3QvdGL0Lkg0YTQsNC50Lsgwqslc8K7OiAlcyIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgd3JpdGluZyBkZXRhY2hlZCBzaWduYXR1cmUgdG8gJyVzJzogJXMiCittc2dzdHIgItGB0LHQvtC5INC30LDQv9C40YHQuCDQvtGC0YHQvtC10LTQuNC90LXQvdC90L7QuSDQv9C+0LTQv9C40YHQuCDQsiDCqyVzwrs6ICVzIgorCisjOiBncmVwLmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiwqslc8K7OiDQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LXRgdGC0YwgJXMiCisKKyM6IGdyZXAuYzoxNzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6ICVzIgorbXNnc3RyICLCqyVzwrs6ICVzIgorCisjOiBncmVwLmM6MTc0NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkICVzIgorbXNnc3RyICLCqyVzwrs6INGB0LvQuNGI0LrQvtC8INC80LDQu9C+INC00LDQvdC90YvRhSDQv9GA0L7Rh9C40YLQsNC90L4gJXMiCisKKyM6IGhlbHAuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYXZhaWxhYmxlIGdpdCBjb21tYW5kcyBpbiAnJXMnIgorbXNnc3RyICLQtNC+0YHRgtGD0L/QvdGL0LUg0LrQvtC80LDQvdC00YsgZ2l0INCyIMKrJXPCuyIKKworIzogaGVscC5jOjIxNAorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAi0LrQvtC80LDQvdC00YsgZ2l0LCDQtNC+0YHRgtGD0L/QvdGL0LUg0LIg0LTRgNGD0LPQuNGFINC80LXRgdGC0LDRhSDQstCw0YjQtdCz0L4gJFBBVEgiCisKKyM6IGhlbHAuYzoyNDYKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgItCh0YLQsNC90LTQsNGA0YLQvdGL0LUg0LrQvtC80LDQvdC00YsgR2l0INC40YHQv9C+0LvRjNC30YPQtdC80YvQtSDQsiDRgNCw0LfQu9C40YfQvdGL0YUg0YHQuNGC0YPQsNGG0LjRj9GFOiIKKworIzogaGVscC5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIsKrJXPCuyDQv9C+0YXQvtC20LUg0L3QsCDQutC+0LzQsNC90LTRgyBnaXQsINC90L4g0L3QsNC8INC90LUg0YPQtNCw0LvQvtGB0Ywg0LXQtSDQt9Cw0L/Rg9GB0YLQuNGC0YwuINCS0L7Qt9C80L7QttC90L4sIGdpdC0lcyAg0L3QtSDRgNCw0LHQvtGC0LDQtdGCPyIKKworIzogaGVscC5jOjM2OAorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICLQntC5LdGR0LkhINCS0LDRiNCwINGB0LjRgdGC0LXQvNCwINC90LUg0YHQvtC+0LHRidCw0LXRgiDQvdC4INC+INC60LDQutC40YUg0LrQvtC80LDQvdC00LDRhSBHaXQg0LLQvtC+0LHRidC1LiIKKworIzogaGVscC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LlxuIgorIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJyIKK21zZ3N0ciAi0JLQndCY0JzQkNCd0JjQlTog0JLRiyDQstGL0LfQstCw0LvQuCDQutC+0LzQsNC90LTRgyBHaXQgwqslc8K7LCDQvdC+INGC0LDQutC+0Lkg0L3QtSDRgdGD0YnQtdGB0YLQstGD0LXRgi5cbtCf0YDQvtC00L7Qu9C20LDQtdC8INGBINC/0YDQtdC00L/QvtC70L7QttC10L3QuNC10LwsINGH0YLQviDQstGLINC40LzQtdC70Lgg0LIg0LLQuNC00YMgwqslc8K7IgorCisjOiBoZWxwLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImluICUwLjFmIHNlY29uZHMgYXV0b21hdGljYWxseS4uLiIKK21zZ3N0ciAi0YfQtdGA0LXQtyAlMC4xZiDRgdC10LrRg9C90LQg0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LjigKYiCisKKyM6IGhlbHAuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l0OiDCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC60L7QvNCw0L3QtNC+0LkgZ2l0LiDQodC80L7RgtGA0LjRgtC1IMKrZ2l0IC0taGVscMK7LiIKKworIzogaGVscC5jOjQwNiBoZWxwLmM6NDY2Cittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICJcbtCS0L7Qt9C80L7QttC90L4sINCy0Ysg0LjQvNC10LvQuCDQsiDQstC40LTRgyDRjdGC0L4/IgorbXNnc3RyWzFdICJcbtCS0L7Qt9C80L7QttC90L4sINCy0Ysg0LjQvNC10LvQuCDQsiDQstC40LTRgyDRh9GC0L4t0YLQviDQuNC3INGN0YLQvtCz0L4/IgorbXNnc3RyWzJdICJcbtCS0L7Qt9C80L7QttC90L4sINCy0Ysg0LjQvNC10LvQuCDQsiDQstC40LTRgyDRh9GC0L4t0YLQviDQuNC3INGN0YLQvtCz0L4/IgorbXNnc3RyWzNdICJcbtCS0L7Qt9C80L7QttC90L4sINCy0Ysg0LjQvNC10LvQuCDQsiDQstC40LTRgyDRh9GC0L4t0YLQviDQuNC3INGN0YLQvtCz0L4/IgorCisjOiBoZWxwLmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlczogJXMg4oCUICVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICLRgdCx0L7QuSDRh9GC0LXQvdC40Y8g0LrRjdGI0LAiCisKKyM6IG1lcmdlLmM6OTQgYnVpbHRpbi9hbS5jOjIwMDEgYnVpbHRpbi9hbS5jOjIwMzYgYnVpbHRpbi9jaGVja291dC5jOjM3NQorIzogYnVpbHRpbi9jaGVja291dC5jOjU4NiBidWlsdGluL2Nsb25lLmM6NzE1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0L3QvtCy0YvQuSDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIo0L/Qu9C+0YXQvtC5INC60L7QvNC80LjRgilcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjA5CisjLCBjLWZvcm1hdAorbXNnaWQgImFkZGluZm9fY2FjaGUgZmFpbGVkIGZvciBwYXRoICclcyciCittc2dzdHIgItGB0LHQvtC5IGFkZGluZm9fY2FjaGUg0LTQu9GPINC/0YPRgtC4IMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjcwCittc2dpZCAiZXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQv9GA0Lgg0L/QvtGB0YLRgNC+0LXQvdC40Lgg0LTQtdGA0LXQstGM0LXQsiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0L/Rg9GC0Ywgwqslc8K7JXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1ICVzLCDRh9GC0L7QsdGLINC+0YHQstC+0LHQvtC00LjRgtGMINC80LXRgdGC0L4g0LTQu9GPINC/0L7QtNC60LDRgtCw0LvQvtCz0L7QslxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3MTIgbWVyZ2UtcmVjdXJzaXZlLmM6NzMzCittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiDQstC+0LfQvNC+0LbQvdC+LCDQutC+0L3RhNC70LjQutGCINC60LDRgtCw0LvQvtCz0L7Qsi/RhNCw0LnQu9C+0LI/IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICLQvtGC0LrQsNC3INC/0L7RgtC10YDQuCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0LPQviDRhNCw0LnQu9CwINCyIMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzYzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyAnJXMnIgorbXNnc3RyICLQvdC10LLQvtC30LzQvtC20L3QviDQv9GA0L7Rh9C40YLQsNGC0Ywg0L7QsdGK0LXQutGCICVzIMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgItC+0LbQuNC00LDQtdGC0YHRjyDQtNCy0L7QuNGH0L3Ri9C5INC+0LHRitC10LrRgiDQtNC70Y8gJXMgwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3ODggYnVpbHRpbi9jbG9uZS5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YHQuNC80LLQvtC70YzQvdGD0Y4g0YHRgdGL0LvQutGDIMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgItC90LUg0L/QvtC90Y/RgtC90L4sINGH0YLQviDQtNC10LvQsNGC0Ywg0YEgJTA2byAlcyDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkzNworbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9GD0YHRgtC40YLRjCDQstC90YPRgtGA0LXQvdC90LXQtSDRgdC70LjRj9C90LjQtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTQxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgJXMgdG8gZGF0YWJhc2UiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LTQvtCx0LDQstC40YLRjCAlcyDQsiDQsdCw0LfRgyDQtNCw0L3QvdGL0YUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk1NworbXNnaWQgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlIGluIHRoZSB0cmVlIgorbXNnc3RyICLQvtCx0YrQtdC60YIg0L3QtdC/0L7QtNC00LXRgNC20LjQstCw0LXQvNC+0LPQviDRgtC40L/QsCDQsiDQtNC10YDQtdCy0LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMzIgbWVyZ2UtcmVjdXJzaXZlLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICLQmtCe0J3QpNCb0JjQmtCiICglcy/Rg9C00LDQu9C10L3QuNC1KTogJXMg0YPQtNCw0LvQtdC90L4g0LIgJXMg0LggJXMg0LIgJXMuINCS0LXRgNGB0LjRjyAlcyDQuNC3ICVzINC+0YHRgtCw0LLQu9C10L3QsCDQsiDQtNC10YDQtdCy0LUuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDM4IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAi0JrQntCd0KTQm9CY0JrQoiAoJXMv0YPQtNCw0LvQtdC90LjQtSk6ICVzINGD0LTQsNC70LXQvdC+INCyICVzINC4ICVzINCyICVzLiDQktC10YDRgdC40Y8gJXMg0LjQtyAlcyDQvtGB0YLQsNCy0LvQtdC90LAg0LIg0LTQtdGA0LXQstC1INC90LAgJXMuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDkyCittc2dpZCAicmVuYW1lIgorbXNnc3RyICLQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC1IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDkyCittc2dpZCAicmVuYW1lZCIKK21zZ3N0ciAi0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90L4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgYSBkaXJlY3RvcnkgaW4gJXMgYWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIiVzIOKAlCDRjdGC0L4g0LrQsNGC0LDQu9C+0LMg0LIgJXMsINC00L7QsdCw0LLQu9GP0LXQvCDQutCw0LogJXMg0LLQvNC10YHRgtC+INGN0YLQvtCz0L4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lICIKKyJcIiVzXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAi0JrQntCd0KTQm9CY0JrQoiAo0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtS/Qv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC1KTog0J/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDCqyVzwrvihpLCqyVzwrsg0LIg0LLQtdGC0LrQtSDCqyVzwrsg0Lgg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDCqyVzwrvihpLCqyVzwrsg0LIg0LLQtdGC0LrQtSDCqyVzwrslcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE3NQorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiICjQvtGB0YLQsNCy0LvQtdC90L4g0L3QtdGA0LDQt9GA0LXRiNC10L3QvdGL0LwpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAi0JrQntCd0KTQm9CY0JrQoiAo0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtS/Qv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC1KTog0J/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDCqyVzwrvihpLCqyVzwrsg0LIg0LLQtdGC0LrQtSDCqyVzwrsg0Lgg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDCqyVzwrvihpLCqyVzwrsg0LIg0LLQtdGC0LrQtSDCqyVzwrsiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXMgYW5kICVzIHRvICVzIGluc3RlYWQiCittc2dzdHIgItCf0LXRgNC10LjQvNC10L3QvtCy0YvQstCw0Y4gJXMg0LIgJXMg0LggJXMg0LIgJXMg0LLQvNC10YHRgtC+INGN0YLQvtCz0L4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAlcyBhZGRlZCBpbiAlcyIKK21zZ3N0ciAi0JrQntCd0KTQm9CY0JrQoiAo0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtS/QtNC+0LHQsNCy0LvQtdC90LjQtSk6INCf0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40LUgwqslc8K74oaSwqslc8K7INCyINCy0LXRgtC60LUgwqslc8K7INC4INC00L7QsdCw0LLQu9C10L3QuNC1IMKrJXPCuyDQsiDQstC10YLQutC1IMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorbXNnc3RyICLQlNC+0LHQsNCy0LvQtdC90LjQtSDRgdC70LjRgtC+0LPQviAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3MyBtZXJnZS1yZWN1cnNpdmUuYzoxNjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICLQlNC+0LHQsNCy0LvQtdC90LjQtSDQstC80LXRgdGC0L4g0Y3RgtC+0LPQviDQutCw0LogJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICLQvdC10LLQvtC30LzQvtC20L3QviDQv9GA0L7Rh9C40YLQsNGC0Ywg0L7QsdGK0LXQutGCIMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTUyNworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgaXMgbm90IGEgYmxvYiIKK21zZ3N0ciAi0L7QsdGK0LXQutGCICVzINC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNCy0L7QuNGH0L3Ri9C8INC+0LHRitC10LrRgtC+0LwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NzUKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgItC40LfQvNC10L3QtdC90LjQtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NQorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICLQuNC30LzQtdC90LXQvdC+IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTg1Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAi0YHQvtC00LXRgNC20LjQvNC+0LUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1OTIKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICLQtNC+0LHQsNCy0LvQtdC90LjQtS/QtNC+0LHQsNCy0LvQtdC90LjQtSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgItCf0YDQvtC/0YPRgdC6ICVzICjRgdC70LjRgtGLINC+0LTQuNC90LDQutC+0LLRi9C1INC40LfQvNC10L3QtdC90LjRjyDQutCw0Log0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC1KSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvLW1lcmdpbmcgJXMiCittc2dzdHIgItCQ0LLRgtC+0YHQu9C40Y/QvdC40LUgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDQgZ2l0LXN1Ym1vZHVsZS5zaDoxMTUwCittc2dpZCAic3VibW9kdWxlIgorbXNnc3RyICLQv9C+0LTQvNC+0LTRg9C70YwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogTWVyZ2UgY29uZmxpY3QgaW4gJXMiCittc2dzdHIgItCa0J7QndCk0JvQmNCa0KIgKCVzKTog0JrQvtC90YTQu9C40LrRgiDRgdC70LjRj9C90LjRjyDQsiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTczMQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc1NgorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICLRhNCw0LnQuy/QutCw0YLQsNC70L7QsyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2MgorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICLQutCw0YLQsNC70L7Qsy/RhNCw0LnQuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgItCa0J7QndCk0JvQmNCa0KIgKCVzKTog0KPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCINC60LDRgtCw0LvQvtCzINGBINC40LzQtdC90LXQvCDCqyVzwrsg0LIgwqslc8K7LiDQlNC+0LHQsNCy0LvQtdC90LjQtSDCqyVzwrsg0LrQsNC6IMKrJXPCuyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc3NworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgItCU0L7QsdCw0LLQu9C10L3QuNC1ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzk0Cittc2dpZCAiRmF0YWwgbWVyZ2UgZmFpbHVyZSwgc2hvdWxkbid0IGhhcHBlbi4iCittc2dzdHIgItCa0YDQuNGC0LjRh9C10YHQutCw0Y8g0L7RiNC40LHQutCwINGB0LvQuNGP0L3QuNGPLCDRgtCw0LrQvtCz0L4g0L3QtSDQtNC+0LvQttC90L4g0YHQu9GD0YfQsNGC0YzRgdGPLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTgxMworbXNnaWQgIkFscmVhZHkgdXAtdG8tZGF0ZSEiCittc2dzdHIgItCj0LbQtSDQvtCx0L3QvtCy0LvQtdC90L4hIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdpbmcgb2YgdHJlZXMgJXMgYW5kICVzIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0YHQu9C40Y/QvdC40Y8g0LTQtdGA0LXQstGM0LXQsiDCqyVzwrsg0Lggwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVucHJvY2Vzc2VkIHBhdGg/Pz8gJXMiCittc2dzdHIgItCd0LXQvtCx0YDQsNCx0L7RgtCw0L3QvdGL0Lkg0L/Rg9GC0Yw/Pz8gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5MDAKK21zZ2lkICJNZXJnaW5nOiIKK21zZ3N0ciAi0KHQu9C40Y/QvdC40LU6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICLQvdCw0LnQtNC10L0gJXUg0L7QsdGJ0LjQuSDQv9GA0LXQtNC+0Lo6IgorbXNnc3RyWzFdICLQvdCw0LnQtNC10L3QviAldSDQvtCx0YnQuNGFINC/0YDQtdC00LrQsDoiCittc2dzdHJbMl0gItC90LDQudC00LXQvdC+ICV1INC+0LHRidC40YUg0L/RgNC10LTQutC+0LI6IgorbXNnc3RyWzNdICLQvdCw0LnQtNC10L3QviAldSDQvtCx0YnQuNGFINC/0YDQtdC00LrQvtCyOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTk1MAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAi0YHQu9C40Y/QvdC40LUg0L3QtSDQstC10YDQvdGD0LvQviDQutC+0LzQvNC40YIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQvtCx0YrQtdC60YIgwqslc8K7IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDE4IGJ1aWx0aW4vbWVyZ2UuYzo2NDUKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICLQndC1INGD0LTQsNC10YLRgdGPINC30LDQv9C40YHQsNGC0Ywg0LjQvdC00LXQutGBLiIKKworIzogbm90ZXMtdXRpbHMuYzo0MQorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINC30LDQutC+0LzQvNC40YLQuNGC0Ywg0L3QtdC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDQvdC90L7QtSDQuNC70Lgg0L3QtSDQuNC80LXRjtGJ0LXQtSDRgdGB0YvQu9C+0Log0LTQtdGA0LXQstC+INC30LDQvNC10YLQvtC6IgorCisjOiBub3Rlcy11dGlscy5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1IG5vdGVzLnJld3JpdGVNb2RlOiDCqyVzwrsiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICLQntGC0LrQsNC3INCyINC/0LXRgNC10LfQsNC/0LjRgdC4INC30LDQvNC10YLQvtC6INCyICVzICjQt9CwINC/0YDQtdC00LXQu9Cw0LzQuCByZWZzL25vdGVzLykiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgdGhlCisjLiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcyBpdHMgdmFsdWUKKyM6IG5vdGVzLXV0aWxzLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0L/QtdGA0LXQvNC10L3QvdC+0LkgJXM6IMKrJXPCuyIKKworIzogb2JqZWN0LmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQvtCx0YrQtdC60YI6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTYzCittc2dpZCAiLi4uIgorbXNnc3RyICLigKYiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtTogJXMiCisKKyMuIFRSQU5TTEFUT1JTOiB0aGUgY29sb24gaGVyZSBzaG91bGQgYWxpZ24gd2l0aCB0aGUKKyMuIG9uZSBpbiAidXNhZ2U6ICVzIiB0cmFuc2xhdGlvbgorIzogcGFyc2Utb3B0aW9ucy5jOjU4NQorIywgYy1mb3JtYXQKK21zZ2lkICIgICBvcjogJXMiCittc2dzdHIgIiAgICAgICAgICDQuNC70Lg6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICAgICAgICAgJXMiCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo2MjIKK21zZ2lkICItTlVNIgorbXNnc3RyICIt0JrQntCb0JjQp9CV0KHQotCS0J4iCisKKyM6IHBhdGhzcGVjLmM6MTMzCittc2dpZCAiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAi0LPQu9C+0LHQsNC70YzQvdGL0LUg0L7Qv9GG0LjQuCDRgdC/0LXRhtC40YTQuNC60LDRhtC40Lgg0L/Rg9GC0LggwqtnbG9iwrsg0Lggwqtub2dsb2LCuyDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogcGF0aHNwZWMuYzoxNDMKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICLQs9C70L7QsdCw0LvRjNC90LDRjyDQvtC/0YbQuNGPINGB0L/QtdGG0LjRhNC40LrQsNGG0LjQuCDQv9GD0YLQuCDCq2xpdGVyYWzCuyDQvdC1INGB0L7QstC80LXRgdGC0LjQvNCwINGBINC00YDRg9Cz0LjQvNC4INCz0LvQvtCx0LDQu9GM0L3Ri9C80Lgg0YHQv9C10YbQuNGE0LjQutCw0YLQvtGA0LDQvNC4INC00L7RgdGC0YPQv9CwIgorCisjOiBwYXRoc3BlYy5jOjE3NworbXNnaWQgImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAg0LTQu9GPINC80LDQs9C40YfQtdGB0LrQvtCz0L4g0YHQu9C+0LLQsCDCq3ByZWZpeMK7INCyINGB0L/QtdGG0LjRhNC40LrQsNGG0LjQuCDQv9GD0YLQuCAiCisKKyM6IHBhdGhzcGVjLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90L7QtSDQvNCw0LPQuNGH0LXRgdC60L7QtSDRgdC70L7QstC+IMKrJS4qc8K7INCyINGB0L/QtdGG0LjRhNC40LrQsNGG0LjQuCDQv9GD0YLQuCDCqyVzwrsiCisKKyM6IHBhdGhzcGVjLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GJ0LXQvdC+IMKrKcK7INCyINC60L7QvdGG0LUg0LzQsNCz0LjRh9C10YHQutC+0LPQviDRgdC70L7QstCwINGB0L/QtdGG0LjRhNC40LrQsNGG0LjQuCDQv9GD0YLQuCDCqyVzwrsiCisKKyM6IHBhdGhzcGVjLmM6MjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuaW1wbGVtZW50ZWQgcGF0aHNwZWMgbWFnaWMgJyVjJyBpbiAnJXMnIgorbXNnc3RyICLQndC10YDQtdCw0LvQuNC30L7QstCw0L3QvdC+0LUg0LzQsNCz0LjRh9C10YHQutC+0LUg0YHQu9C+0LLQviDCqyVjwrsg0YHQv9C10YbQuNGE0LjQutCw0YbQuNC4INC/0YPRgtC4IMKrJXPCuyIKKworIzogcGF0aHNwZWMuYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVzOiDCq2xpdGVyYWzCuyDQuCDCq2dsb2LCuyDQvdC1INGB0L7QstC80LXRgdGC0LjQvNGLIgorCisjOiBwYXRoc3BlYy5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzOiDCqyVzwrsg0LLQvdC1INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IHBhdGhzcGVjLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAi0KHQv9C10YbQuNGE0LjQutCw0YbQuNGPINC/0YPRgtC4IMKrJXPCuyDQsiDQv9C+0LTQvNC+0LTRg9C70LUgwqslLipzwrsiCisKKyM6IHBhdGhzcGVjLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiVzOiDQvNCw0LPQuNGH0LXRgdC60LjQtSDRgdC70L7QstCwINCyINGB0L/QtdGG0LjRhNC40LrQsNGG0LjQuCDQv9GD0YLQuCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0Y7RgtGB0Y8g0LrQvtC80LDQvdC00L7QuTogJXMiCisKKyM6IHBhdGhzcGVjLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi0YHQv9C10YbQuNGE0LjQutCw0YbQuNGPINC/0YPRgtC4IMKrJXPCuyDQvdCw0YXQvtC00LjRgtGB0Y8g0LfQsCDRgdC40LzQstC+0LvQuNGH0LXRgdC60L7QuSDRgdGB0YvQu9C60L7QuSIKKworIzogcGF0aHNwZWMuYzo0NDEKK21zZ2lkICIiCisiVGhlcmUgaXMgbm90aGluZyB0byBleGNsdWRlIGZyb20gYnkgOihleGNsdWRlKSBwYXR0ZXJucy5cbiIKKyJQZXJoYXBzIHlvdSBmb3Jnb3QgdG8gYWRkIGVpdGhlciAnOi8nIG9yICcuJyA/IgorbXNnc3RyICLQndC1INGD0LrQsNC30LDQvSDRiNCw0LHQu9C+0L0g0LTQu9GPINC40YHQutC70Y7Rh9C10L3QuNGPINGBINC/0L7QvNC+0YnRjNGOIDooZXhjbHVkZSkuXG7QktC+0LfQvNC+0LbQvdC+LCDQstGLINC30LDQsdGL0LvQuCDCqzovwrsg0LjQu9C4IMKrLsK7ID8iCisKKyM6IHByZXR0eS5jOjk2OQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINGE0L7RgNC80LDRgiDQtNC70Y8gLS1wcmV0dHkiCisKKyM6IHByb2dyZXNzLmM6MjM2Cittc2dpZCAiZG9uZSIKK21zZ3N0ciAi0LPQvtGC0L7QstC+IgorCisjOiByZWFkLWNhY2hlLmM6MTI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICJpbmRleC52ZXJzaW9uINGD0LrQsNC30LDQvSwg0L3QviDQt9C90LDRh9C10L3QuNC1INC90LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QvtC1Llxu0JjRgdC/0L7Qu9GM0LfRg9GOINCy0LXRgNGB0LjRjiAlaSIKKworIzogcmVhZC1jYWNoZS5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIkdJVF9JTkRFWF9WRVJTSU9OINGD0LrQsNC30LDQvSwg0L3QviDQt9C90LDRh9C10L3QuNC1INC90LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QvtC1Llxu0JjRgdC/0L7Qu9GM0LfRg9GOINCy0LXRgNGB0LjRjiAlaSIKKworIzogcmVmcy5jOjI5NDEgYnVpbHRpbi9tZXJnZS5jOjc2MCBidWlsdGluL21lcmdlLmM6ODcxIGJ1aWx0aW4vbWVyZ2UuYzo5NzMKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDCqyVzwrsg0LTQu9GPINC30LDQv9C40YHQuCIKKworIzogcmVmcy5jOjMwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINGB0YHRi9C70LrRgyAlczogJXMiCisKKyM6IHJlZnMuYzozMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0YHRgdGL0LvQutC4OiAlcyIKKworIzogcmVmcy5jOjMwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0YHRgdGL0LvQutC4ICVzIgorCisjOiByZWYtZmlsdGVyLmM6NjYwCittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0YTQvtGA0LzQsNGCIgorCisjOiByZW1vdGUuYzo3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICLQndC10LvRjNC30Y8g0LjQt9Cy0LvQtdGH0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+ICVzINC4ICVzINCyICVzIgorCisjOiByZW1vdGUuYzo3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMg0L7QsdGL0YfQvdC+INC+0YLRgdC70LXQttC40LLQsNC10YIgJXMsINCwINC90LUgJXMiCisKKyM6IHJlbW90ZS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiVzINC+0YLRgdC70LXQttC40LLQsNC10YIg0LggJXMg0LggJXMiCisKKyM6IHJlbW90ZS5jOjgwOAorbXNnaWQgIkludGVybmFsIGVycm9yIgorbXNnc3RyICLQktC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAiCisKKyM6IHJlbW90ZS5jOjE3MjMgcmVtb3RlLmM6MTc2NgorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgIkhFQUQg0L3QtSDRg9C60LDQt9GL0LLQsNC10YIg0L3QsCDQstC10YLQutGDIgorCisjOiByZW1vdGUuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoOiAnJXMnIgorbXNnc3RyICLQvdC10YIg0YLQsNC60L7QuSDQstC10YLQutC4OiDCqyVzwrsiCisKKyM6IHJlbW90ZS5jOjE3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgItCy0YvRiNC10YHRgtC+0Y/RidCw0Y8g0LLQtdGC0LrQsCDQvdC1INC90LDRgdGC0YDQvtC10L3QsCDQtNC70Y8g0LLQtdGC0LrQuCDCqyVzwrsiCisKKyM6IHJlbW90ZS5jOjE3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgItCy0YvRiNC10YHRgtC+0Y/RidCw0Y8g0LLQtdGC0LrQsCDCqyVzwrsg0L3QtSDRgdC+0YXRgNCw0L3QtdC90LAg0LrQsNC6INC+0YLRgdC70LXQttC40LLQsNC10LzQsNGPINCy0LXRgtC60LAiCisKKyM6IHJlbW90ZS5jOjE3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgItC90LDQt9C90LDRh9C10L3QuNC1INC00LvRjyDQvtGC0L/RgNCw0LLQutC4IMKrJXPCuyDQvdCwINCy0L3QtdGI0L3QtdC8INGB0LXRgNCy0LXRgNC1IMKrJXPCuyDQvdC1INC40LzQtdC10YIg0LvQvtC60LDQu9GM0L3QvtC5INC+0YLRgdC70LXQttC40LLQsNC10LzQvtC5INCy0LXRgtC60LgiCisKKyM6IHJlbW90ZS5jOjE3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgaGFzIG5vIHJlbW90ZSBmb3IgcHVzaGluZyIKK21zZ3N0ciAi0LLQtdGC0LrQsCDCqyVzwrsg0L3QtSDQuNC80LXQtdGCINCy0L3QtdGI0L3QtdCz0L4g0YHQtdGA0LLQtdGA0LAg0LTQu9GPINC+0YLQv9GA0LDQstC60LgiCisKKyM6IHJlbW90ZS5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICLRgdC/0LXRhtC40YTQuNC60LDRhtC40Lgg0L/Rg9GC0Lgg0LTQu9GPINC+0YLQv9GA0LDQstC60Lggwqslc8K7INC90LUg0LLQutC70Y7Rh9Cw0Y7RgiDQsiDRgdC10LHRjyDCqyVzwrsiCisKKyM6IHJlbW90ZS5jOjE3OTUKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgItC+0YLQv9GA0LDQstC60LAg0L3QtSDQuNC80LXQtdGCINGC0L7Rh9C60Lgg0L3QsNC30L3QsNGH0LXQvdC40Y8gKHB1c2guZGVmYXVsdCDQstGL0YHRgtCw0LLQu9C10L0g0LIgwqtub3RoaW5nwrspIgorCisjOiByZW1vdGUuYzoxODE3Cittc2dpZCAiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgwqtzaW1wbGXCuyDQvtGC0L/RgNCw0LLQutGDINCyINC10LTQuNC90YHRgtCy0LXQvdC90YPRjiDRgtC+0YfQutGDINC90LDQt9C90LDRh9C10L3QuNGPIgorCisjOiByZW1vdGUuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQsdCw0LfQuNGA0YPQtdGC0YHRjyDQvdCwIMKrJXPCuywg0L3QviDQstGL0YjQtdGB0YLQvtGP0YnQuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LjRgdGH0LXQty5cbiIKKworIzogcmVtb3RlLmM6MjEyOAorbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIo0LTQu9GPINC40YHQv9GA0LDQstC70LXQvdC40Y8g0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtwrspXG4iCisKKyM6IHJlbW90ZS5jOjIxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAtdG8tZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgItCS0LDRiNCwINCy0LXRgtC60LAg0L7QsdC90L7QstC70LXQvdCwINCyINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQuCDRgSDCqyVzwrsuXG4iCisKKyM6IHJlbW90ZS5jOjIxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtC/0LXRgNC10LbQsNC10YIgwqslc8K7INC90LAgJWQg0LrQvtC80LzQuNGCLlxuIgorbXNnc3RyWzFdICLQktCw0YjQsCDQstC10YLQutCwINC+0L/QtdGA0LXQttCw0LXRgiDCqyVzwrsg0L3QsCAlZCDQutC+0LzQvNC40YLQsC5cbiIKK21zZ3N0clsyXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtC/0LXRgNC10LbQsNC10YIgwqslc8K7INC90LAgJWQg0LrQvtC80LzQuNGC0L7Qsi5cbiIKK21zZ3N0clszXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtC/0LXRgNC10LbQsNC10YIgwqslc8K7INC90LAgJWQg0LrQvtC80LzQuNGC0L7Qsi5cbiIKKworIzogcmVtb3RlLmM6MjE0MQorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcHVzaMK7LCDRh9GC0L7QsdGLINC+0L/Rg9Cx0LvQuNC60L7QstCw0YLRjCDQstCw0YjQuCDQu9C+0LrQsNC70YzQvdGL0LUg0LrQvtC80LzQuNGC0YspXG4iCisKKyM6IHJlbW90ZS5jOjIxNDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0cywgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIKK21zZ3N0clswXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtGC0YHRgtCw0LXRgiDQvtGCIMKrJXPCuyDQvdCwICVkINC60L7QvNC80LjRgiDQuCDQvNC+0LbQtdGCINCx0YvRgtGMINC/0LXRgNC10LzQvtGC0LDQvdCwINCy0L/QtdGA0LXQtC5cbiIKK21zZ3N0clsxXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtGC0YHRgtCw0LXRgiDQvtGCIMKrJXPCuyDQvdCwICVkINC60L7QvNC80LjRgtCwINC4INC80L7QttC10YIg0LHRi9GC0Ywg0L/QtdGA0LXQvNC+0YLQsNC90LAg0LLQv9C10YDQtdC0LlxuIgorbXNnc3RyWzJdICLQktCw0YjQsCDQstC10YLQutCwINC+0YLRgdGC0LDQtdGCINC+0YIgwqslc8K7INC90LAgJWQg0LrQvtC80LzQuNGC0L7QsiDQuCDQvNC+0LbQtdGCINCx0YvRgtGMINC/0LXRgNC10LzQvtGC0LDQvdCwINCy0L/QtdGA0LXQtC5cbiIKK21zZ3N0clszXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQvtGC0YHRgtCw0LXRgiDQvtGCIMKrJXPCuyDQvdCwICVkINC60L7QvNC80LjRgtC+0LIg0Lgg0LzQvtC20LXRgiDQsdGL0YLRjCDQv9C10YDQtdC80L7RgtCw0L3QsCDQstC/0LXRgNC10LQuXG4iCisKKyM6IHJlbW90ZS5jOjIxNTIKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBwdWxswrssINGH0YLQvtCx0Ysg0L7QsdC90L7QstC40YLRjCDQstCw0YjRgyDQu9C+0LrQsNC70YzQvdGD0Y4g0LLQtdGC0LrRgylcbiIKKworIzogcmVtb3RlLmM6MjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gItCS0LDRiNCwINCy0LXRgtC60LAg0Lggwqslc8K7INGA0LDQt9C+0YjQu9C40YHRjFxu0Lgg0YLQtdC/0LXRgNGMINC40LzQtdGO0YIgJWQg0LggJWQg0YDQsNC30L3Ri9C5INC60L7QvNC80LjRgiDQsiDQutCw0LbQtNC+0Lkg0YHQvtC+0YLQstC10YLRgdGC0LLQtdC90L3Qvi5cbiIKK21zZ3N0clsxXSAi0JLQsNGI0LAg0LLQtdGC0LrQsCDQuCDCqyVzwrsg0YDQsNC30L7RiNC70LjRgdGMXG7QuCDRgtC10L/QtdGA0Ywg0LjQvNC10Y7RgiAlZCDQuCAlZCDRgNCw0LfQvdGL0YUg0LrQvtC80LzQuNGC0LAg0LIg0LrQsNC20LTQvtC5INGB0L7QvtGC0LLQtdGC0YHRgtCy0LXQvdC90L4uXG4iCittc2dzdHJbMl0gItCS0LDRiNCwINCy0LXRgtC60LAg0Lggwqslc8K7INGA0LDQt9C+0YjQu9C40YHRjFxu0Lgg0YLQtdC/0LXRgNGMINC40LzQtdGO0YIgJWQg0LggJWQg0YDQsNC30L3Ri9GFINC60L7QvNC80LjRgtC+0LIg0LIg0LrQsNC20LTQvtC5INGB0L7QvtGC0LLQtdGC0YHRgtCy0LXQvdC90L4uXG4iCittc2dzdHJbM10gItCS0LDRiNCwINCy0LXRgtC60LAg0Lggwqslc8K7INGA0LDQt9C+0YjQu9C40YHRjFxu0Lgg0YLQtdC/0LXRgNGMINC40LzQtdGO0YIgJWQg0LggJWQg0YDQsNC30L3Ri9GFINC60L7QvNC80LjRgtC+0LIg0LIg0LrQsNC20LTQvtC5INGB0L7QvtGC0LLQtdGC0YHRgtCy0LXQvdC90L4uXG4iCisKKyM6IHJlbW90ZS5jOjIxNjUKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIG1lcmdlIHRoZSByZW1vdGUgYnJhbmNoIGludG8geW91cnMpXG4iCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcHVsbMK7LCDRh9GC0L7QsdGLINGB0LvQuNGC0Ywg0LLQvdC10YjQvdGO0Y4g0LLQtdGC0LrRgyDQsiDQstCw0YjRgylcbiIKKworIzogcmV2aXNpb24uYzoyMTk4Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAi0L/QvtGF0L7QttC1LCDQstCw0YjQsCDRgtC10LrRg9GJ0LDRjyDQstC10YLQutCwINC/0L7QstGA0LXQttC00LXQvdCwIgorCisjOiByZXZpc2lvbi5jOjIyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICLQstCw0YjQsCDRgtC10LrRg9GJ0LDRjyDQstC10YLQutCwIMKrJXPCuyDQtdGJ0LUg0L3QtSDRgdC+0LTQtdGA0LbQuNGCINC90Lgg0L7QtNC90L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiByZXZpc2lvbi5jOjIzOTUKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAi0L7Qv9GG0LjRjiAtLWZpcnN0LXBhcmVudCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAtLWJpc2VjdCIKKworIzogcnVuLWNvbW1hbmQuYzo4MworbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L7RgtC60YDRi9GC0LjRjyAvZGV2L251bGwiCisKKyM6IHJ1bi1jb21tYW5kLmM6ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVwMiglZCwlZCkgZmFpbGVkIgorbXNnc3RyICJkdXAyKCVkLCVkKSDRgdCx0L7QuSIKKworIzogc2VuZC1wYWNrLmM6Mjk1Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgItGB0LHQvtC5INC/0L7QtNC/0LjRgdCw0L3QuNGPINGB0LXRgNGC0LjRhNC40LrQsNGC0LAg0L7RgtC/0YDQsNCy0LrQuCIKKworIzogc2VuZC1wYWNrLmM6NDA0Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCBwdXNoIgorbXNnc3RyICLQv9GA0LjQvdC40LzQsNGO0YnQsNGPINGB0YLQvtGA0L7QvdCwINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC+0YLQv9GA0LDQstC60YMg0YEg0L7Qv9GG0LjQtdC5IC0tc2lnbmVkIgorCisjOiBzZW5kLXBhY2suYzo0MDYKK21zZ2lkICIiCisibm90IHNlbmRpbmcgYSBwdXNoIGNlcnRpZmljYXRlIHNpbmNlIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgIgorIi0tc2lnbmVkIHB1c2giCittc2dzdHIgItC90LUg0L7RgtC/0YDQsNCy0LvRj9C10Lwg0YHQtdGA0YLQuNGE0LjQutCw0YIg0LTQu9GPINC+0YLQv9GA0LDQstC60LgsINGC0LDQuiDQutCw0Log0L/RgNC40L3QuNC80LDRjtGJ0LDRjyDRgdGC0L7RgNC+0L3QsCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQvtGC0L/RgNCw0LLQutGDINGBINC+0L/RhtC40LXQuSAtLXNpZ25lZCIKKworIzogc2VuZC1wYWNrLmM6NDE4Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIgorbXNnc3RyICLQv9GA0LjQvdC40LzQsNGO0YnQsNGPINGB0YLQvtGA0L7QvdCwINC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCINC+0YLQv9GA0LDQstC60YMg0YEg0L7Qv9GG0LjQtdC5IC0tYXRvbWljIgorCisjOiBzZXF1ZW5jZXIuYzoxODMKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JyIKK21zZ3N0ciAi0L/QvtGB0LvQtSDRgNCw0LfRgNC10YjQtdC90LjRjyDQutC+0L3RhNC70LjQutGC0L7Qsiwg0L/QvtC80LXRgtGM0YLQtSDQuNGB0L/RgNCw0LLQu9C10L3QvdGL0LUg0L/Rg9GC0LhcbtGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IGFkZCA80L/Rg9GC0Lg+wrsg0LjQu9C4IMKrZ2l0IHJtIDzQv9GD0YLQuD7CuyIKKworIzogc2VxdWVuY2VyLmM6MTg2Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgItC/0L7RgdC70LUg0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtC+0LIsINC/0L7QvNC10YLRjNGC0LUg0LjRgdC/0YDQsNCy0LvQtdC90L3Ri9C1INC/0YPRgtC4XG7RgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCBhZGQgPNC/0YPRgtC4PsK7INC40LvQuCDCq2dpdCBybSA80L/Rg9GC0Lg+wrtcbtC4INGB0LTQtdC70LDQudGC0LUg0LrQvtC80LzQuNGCINGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IGNvbW1pdMK7IgorCisjOiBzZXF1ZW5jZXIuYzoxOTkgc2VxdWVuY2VyLmM6ODQyIHNlcXVlbmNlci5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQsiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzIgorbXNnc3RyICLQntGI0LjQsdC60LAg0L7QsdC+0YDQsNGH0LjQstCw0L3QuNGPICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMTcKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlcnJ5LXBpY2suIgorbXNnc3RyICLQktCw0YjQuCDQu9C+0LrQsNC70YzQvdGL0LUg0LjQt9C80LXQvdC10L3QuNC1INCx0YPQtNGD0YIg0L/QtdGA0LXQt9Cw0L/QuNGB0LDQvdGLINC+0YLQsdC+0YDQvtC8INC70YPRh9GI0LXQs9C+LiIKKworIzogc2VxdWVuY2VyLmM6MjE5Cittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHJldmVydC4iCittc2dzdHIgItCS0LDRiNC4INC70L7QutCw0LvRjNC90YvQtSDQuNC30LzQtdC90LXQvdC40LUg0LHRg9C00YPRgiDQv9C10YDQtdC30LDQv9C40YHQsNC90Ysg0LLQvtC30LLRgNCw0YLQvtC8INC60L7QvNC80LjRgtCwLiIKKworIzogc2VxdWVuY2VyLmM6MjIyCittc2dpZCAiQ29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICLQodC00LXQu9Cw0LnRgtC1INC60L7QvNC80LjRgiDQuNC70Lgg0YHQv9GA0Y/Rh9GM0YLQtSDQstCw0YjQuCDQuNC30LzQtdC90LXQvdC40Y8g0LTQu9GPINC/0YDQvtC00L7Qu9C20LXQvdC40Y8uIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2siCisjOiBzZXF1ZW5jZXIuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6INCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCIKKworIzogc2VxdWVuY2VyLmM6MzI3Cittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXRcbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtC/0YDQtdC00LXQu9C40YLRjCBIRUFEINC60L7QvNC80LjRglxuIgorCisjOiBzZXF1ZW5jZXIuYzozNDcKK21zZ2lkICJVbmFibGUgdG8gdXBkYXRlIGNhY2hlIHRyZWVcbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINC00LXRgNC10LLQviDQutGN0YjQsFxuIgorCisjOiBzZXF1ZW5jZXIuYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGNvbW1pdCAlc1xuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQutC+0LzQvNC40YIgJXNcbiIKKworIzogc2VxdWVuY2VyLmM6NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzXG4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINGA0L7QtNC40YLQtdC70YzRgdC60YPRjiDQutC+0LzQvNC40YIgJXNcbiIKKworIzogc2VxdWVuY2VyLmM6NDY5Cittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAi0JLQsNGIINGE0LDQudC7INC40L3QtNC10LrRgdCwINC90LUg0YHQu9C40YIuIgorCisjOiBzZXF1ZW5jZXIuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICLQmtC+0LzQvNC40YIgJXMg4oCUINGN0YLQviDQutC+0LzQvNC40YIt0YHQu9C40Y/QvdC40LUsINC90L4g0L7Qv9GG0LjRjyAtbSDQvdC1INGD0LrQsNC30LDQvdCwLiIKKworIzogc2VxdWVuY2VyLmM6NDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAi0KMg0LrQvtC80LzQuNGC0LAgJXMg0L3QtdGCINC/0YDQtdC00LrQsCAlZCIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCittc2dzdHIgItCe0YHQvdC+0LLQvdCw0Y8g0LLQtdGC0LrQsCDRg9C60LDQt9Cw0L3QsCwg0L3QviDQutC+0LzQvNC40YIgJXMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGB0LvQuNGP0L3QuNC10LwuIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgInJldmVydCIgb3IKKyMuICJjaGVycnktcGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExCisjOiBzZXF1ZW5jZXIuYzo1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlczog0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0YDQvtC00LjRgtC10LvRjNGB0LrQuNC5INC60L7QvNC80LjRgiDQtNC70Y8gJXMiCisKKyM6IHNlcXVlbmNlci5jOjUxNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDQtNC70Y8gJXMiCisKKyM6IHNlcXVlbmNlci5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0L7Qt9Cy0YDQsNGC0LjRgtGMINC60L7QvNC80LjRgiAlc+KApiAlcyIKKworIzogc2VxdWVuY2VyLmM6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0LjQvNC10L3QuNGC0Ywg0LrQvtC80LzQuNGCICVz4oCmICVzIgorCisjOiBzZXF1ZW5jZXIuYzo2MzkKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0L0g0L/Rg9GB0YLQvtC5INC90LDQsdC+0YAg0LrQvtC80LzQuNGC0L7QsiIKKworIzogc2VxdWVuY2VyLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6INGB0LHQvtC5INGH0YLQtdC90LjRjyDQuNC90LTQtdC60YHQsCIKKworIzogc2VxdWVuY2VyLmM6NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6INGB0LHQvtC5INC+0LHQvdC+0LLQu9C10L3QuNGPINC40L3QtNC10LrRgdCwIgorCisjOiBzZXF1ZW5jZXIuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICVzIGR1cmluZyBhICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMICVzINCy0L4g0LLRgNC10LzRjyAlcyIKKworIzogc2VxdWVuY2VyLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBsaW5lICVkLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0YHRgtGA0L7QutGDICVkLiIKKworIzogc2VxdWVuY2VyLmM6NzM4Cittc2dpZCAiTm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICLQmtC+0LzQvNC40YLRiyDQvdC1INGA0LDQt9C+0LHRgNCw0L3Riy4iCisKKyM6IHNlcXVlbmNlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCAlcyIKKworIzogc2VxdWVuY2VyLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0YwgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo3NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW51c2FibGUgaW5zdHJ1Y3Rpb24gc2hlZXQ6ICVzIgorbXNnc3RyICLQndC10L/RgNC40LPQvtC00L3QsNGPINC00LvRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjRjyDQutCw0YDRgtCwINGBINC40L3RgdGC0YDRg9C60YbQuNGP0LzQuDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGtleTogJXMiCittc2dzdHIgItCd0LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5INC60LvRjtGHOiAlcyIKKworIzogc2VxdWVuY2VyLmM6Nzk0IGJ1aWx0aW4vcHVsbC5jOjQ3IGJ1aWx0aW4vcHVsbC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUgJXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIG9wdGlvbnMgc2hlZXQ6ICVzIgorbXNnc3RyICLQmNGB0L/QvtGA0YfQtdC90L3QsNGPINC60LDRgNGC0LAg0YEg0L7Qv9GG0LjRj9C80Lg6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICLQvtGC0LHQvtGAINC70YPRh9GI0LXQs9C+INC40LvQuCDQstC+0LfQstGA0LDRgiDQutC+0LzQvNC40YLQsCDRg9C20LUg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjyIKKworIzogc2VxdWVuY2VyLmM6ODI0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKK21zZ3N0ciAi0L/QvtC/0YDQvtCx0YPQudGC0LUgwqtnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KcK7IgorCisjOiBzZXF1ZW5jZXIuYzo4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBzZXF1ZW5jZXIgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC60LDRgtCw0LvQvtCzINC00LvRjyDRg9C60LDQt9Cw0YLQtdC70Y8g0YHQu9C10LTQvtCy0LDQvdC40Y8g0LrQvtC80LzQuNGC0L7QsiAlcyIKKworIzogc2VxdWVuY2VyLmM6ODQ0IHNlcXVlbmNlci5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcy4iCittc2dzdHIgItCe0YjQuNCx0LrQsCDQvtCx0L7RgNCw0YfQuNCy0LDQvdC40Y8gJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo4NjMgc2VxdWVuY2VyLmM6OTk2Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICLQvtGC0LHQvtGAINC70YPRh9GI0LXQs9C+INC40LvQuCDQstC+0LfQstGA0LDRgiDQutC+0LzQvNC40YLQsCDQvdC1INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8iCisKKyM6IHNlcXVlbmNlci5jOjg2NQorbXNnaWQgImNhbm5vdCByZXNvbHZlIEhFQUQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7Qv9GA0LXQtNC10LvQuNGC0YwgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6ODY3Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgItC90LXQu9GM0LfRjyDQvtGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRgSDQstC10YLQutC4LCDQutC+0YLQvtGA0LDRjyDQtdGJ0LUg0L3QtSDRgdC+0LfQtNCw0L3QsCIKKworIzogc2VxdWVuY2VyLmM6ODg3IGJ1aWx0aW4vYXBwbHkuYzo0MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6ODkxCittc2dpZCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi0L3QtdC+0LbQuNC00LDQvdC90YvQuSDQutC+0L3QtdGGINGE0LDQudC70LAiCisKKyM6IHNlcXVlbmNlci5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgItGB0L7RhdGA0LDQvdC10L3QvdGL0Lkg0YTQsNC50Lsg0YEgSEVBRCDQv9C10YDQtdC0INC+0YLQsdC+0YDQvtC8INC70YPRh9GI0LXQs9C+IMKrJXPCuyDQv9C+0LLRgNC10LbQtNC10L0iCisKKyM6IHNlcXVlbmNlci5jOjkxOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZm9ybWF0ICVzLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNGC0YwgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIgorbXNnc3RyICIlczog0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0L7QsdGA0LDRgtGMICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiVzOiDQv9C70L7RhdCw0Y8g0YDQtdC00LDQutGG0LjRjyIKKworIzogc2VxdWVuY2VyLmM6MTEwMQorbXNnaWQgIkNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINCy0L7Qt9Cy0YDQsNGC0LjRgtGMINC40LfQvdCw0YfQsNC70YzQvdGL0Lkg0LrQvtC80LzQuNGCIgorCisjOiBzZXF1ZW5jZXIuYzoxMTAyCittc2dpZCAiQ2FuJ3QgY2hlcnJ5LXBpY2sgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICLQndC10LvRjNC30Y8g0L7RgtC+0LHRgNCw0YLRjCDQu9GD0YfRiNC10LUg0LIg0L/Rg9GB0YLQvtC5IEhFQUQiCisKKyM6IHNldHVwLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCAlcyIKKworIzogc2hhMV9uYW1lLmM6NDUzCittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IGNoZWNrb3V0IC1iICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIndoZXJlIFwiJGJyXCIgaXMgc29tZWhvdyBlbXB0eSBhbmQgYSA0MC1oZXggcmVmIGlzIGNyZWF0ZWQuIFBsZWFzZVxuIgorImV4YW1pbmUgdGhlc2UgcmVmcyBhbmQgbWF5YmUgZGVsZXRlIHRoZW0uIFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieVxuIgorInJ1bm5pbmcgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorbXNnc3RyICLQntCx0YvRh9C90L4gR2l0INC90LUg0YHQvtC30LTQsNC10YIg0YHRgdGL0LvQutC4LCDQvtC60LDQvdGH0LjQstCw0Y7RidC40LXRgdGPINC90LAgNDAg0YjQtdGB0YLQvdCw0LTRhtCw0YLQtdGA0LjRh9C90YvRhVxu0YHQuNC80LLQvtC70L7Qsiwg0L/QvtGC0L7QvNGDLCDRh9GC0L4g0L7QvdC4INCx0YPQtNGD0YIg0LjQs9C90L7RgNC40YDQvtCy0LDRgtGM0YHRjywg0LrQvtCz0LTQsCDQstGLINC/0YDQvtGB0YLQvlxu0YPQutCw0LbQtdGC0LUg0Y3RgtC+IDQwLdGB0LjQvNCy0L7Qu9GM0L3QvtC1INGI0LXRgdGC0L3QsNC00YbQsNGC0LXRgNC40YfQvdC+0LUg0YfQuNGB0LvQvi4g0KLQsNC60LjQtSDRgdGB0YvQu9C60LhcbtC80L7Qs9C70Lgg0LHRi9GC0Ywg0YHQvtC30LTQsNC90Ysg0L/QviDQvtGI0LjQsdC60LUuINCd0LDQv9GA0LjQvNC10YAsINGBINC/0L7QvNC+0YnRjNGOOlxuXG4gIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIOKApilcblxuLCDQtdGB0LvQuCDCqyRicsK7INC+0LrQsNC30LDQu9GB0Y8g0L/Rg9GB0YLRi9C8LCDRgtC+INGB0YHRi9C70LrQsCDRgSA0MC3RgdC40LzQstC+0LvRjNC90YvQvFxu0YjQtdGB0YLQvdCw0LTRhtCw0YLQtdGA0LjRh9C90YvQvCDRh9C40YHQu9C+0Lwg0LHRg9C00LXRgiDRgdC+0LfQtNCw0L3QsC4g0J/QvtC20LDQu9GD0LnRgdGC0LAsINC/0YDQvtGB0LzQvtGC0YDQuNGC0LUg0Y3RgtC4XG7RgdGB0YvQu9C60Lgg0LgsINCy0L7Qt9C80L7QttC90L4sINGD0LTQsNC70LjRgtC1INC40YUuINCS0Ysg0LzQvtC20LXRgtC1INC+0YLQutC70Y7Rh9C40YLRjCDRjdGC0L4g0YHQvtC+0LHRidC10L3QuNC1XG7Qt9Cw0L/Rg9GB0YLQuNCyIMKrZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2XCuyIKKworIzogc3VibW9kdWxlLmM6NjEgc3VibW9kdWxlLmM6OTUKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQuNC30LzQtdC90LjRgtGMINC90LUg0YHQu9C40YLRi9C5IC5naXRtb2R1bGVzLCDRgdC90LDRh9Cw0LvQsCDRgNCw0LfRgNC10YjQuNGC0LUg0LrQvtC90YTQu9C40LrRgtGLIgorCisjOiBzdWJtb2R1bGUuYzo2NSBzdWJtb2R1bGUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9JXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDRgNCw0LfQtNC10Lsg0LIgLmdpdG1vZHVsZXMsINCz0LTQtSDQv9GD0YLRjCDRgNCw0LLQtdC9ICVzIgorCisjOiBzdWJtb2R1bGUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICIg0J3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMIC5naXRtb2R1bGVzINC30LDQv9C40YHRjCAlcyIKKworIzogc3VibW9kdWxlLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINC30LDQv9C40YHRjCDQsiAuZ2l0bW9kdWxlcyDQtNC70Y8gJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjExNworbXNnaWQgInN0YWdpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC40Y8g0L7QsdC90L7QstC70LXQvdC90L7Qs9C+IC5naXRtb2R1bGVzIgorCisjOiBzdWJtb2R1bGUuYzoxMDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgY29yZS53b3JrdHJlZSBpbiAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9GB0YLQsNC90L7QstC40YLRjCBjb3JlLndvcmt0cmVlINCyICVzIgorCisjOiB0cmFpbGVyLmM6NDkxIHRyYWlsZXIuYzo0OTUgdHJhaWxlci5jOjQ5OSB0cmFpbGVyLmM6NTUzIHRyYWlsZXIuYzo1NTcKKyM6IHRyYWlsZXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJXPCuyDQtNC70Y8g0LrQu9GO0YfQsCDCqyVzwrsiCisKKyM6IHRyYWlsZXIuYzo1NDMgdHJhaWxlci5jOjU0OCBidWlsdGluL3JlbW90ZS5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICLQsdC+0LvRjNGI0LUg0L7QtNC90L7Qs9C+ICVzIgorCisjOiB0cmFpbGVyLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgImVtcHR5IHRyYWlsZXIgdG9rZW4gaW4gdHJhaWxlciAnJS4qcyciCittc2dzdHIgItC/0YPRgdGC0LDRjyDQv9C+0YHQu9C10LTQvdGP0Y8g0LvQtdC60YHQtdC80LAg0LIg0LfQsNCy0LXRgNGI0LjRgtC10LvQtSDCqyUuKnPCuyIKKworIzogdHJhaWxlci5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINCy0YXQvtC00L3QvtC5INGE0LDQudC7IMKrJXPCuyIKKworIzogdHJhaWxlci5jOjcwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IHRyYW5zcG9ydC1oZWxwZXIuYzoxMDI1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHJlZiAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YHRgdGL0LvQutGDICVzIgorCisjOiB1bnBhY2stdHJlZXMuYzoyMDMKK21zZ2lkICJDaGVja2luZyBvdXQgZmlsZXMiCittc2dzdHIgItCg0LDRgdC/0LDQutC+0LLQutCwINGE0LDQudC70L7QsiIKKworIzogdXJsbWF0Y2guYzoxMjAKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINC40LzRjyBVUkwg0YHRhdC10LzRiyDQuNC70Lgg0L/RgNC+0L/Rg9GJ0LXQvSDRgdGD0YTRhNC40LrRgSDCqzovL8K7IgorCisjOiB1cmxtYXRjaC5jOjE0NCB1cmxtYXRjaC5jOjI5NyB1cmxtYXRjaC5jOjM1NgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90LDRjyDRg9C/0YDQsNCy0LvRj9GO0YnQsNGPINC/0L7RgdC70LXQtNC+0LLQsNGC0LXQu9GM0L3QvtGB0YLRjCAlWFgiCisKKyM6IHVybG1hdGNoLmM6MTcyCittc2dpZCAibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciCittc2dzdHIgItC/0YDQvtC/0YPRidC10L3QviDQuNC80Y8g0YHQtdGA0LLQtdGA0LAg0Lgg0YHRhdC10LzQsCDQtNC+0YHRgtGD0L/QsCDQvdC1IMKrZmlsZTrCuyIKKworIzogdXJsbWF0Y2guYzoxODkKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJVUkwg0YHQviDRgdGF0LXQvNC+0LkgwqtmaWxlOsK7INC90LUg0LzQvtC20LXRgiDRgdC+0LTQtdGA0LbQsNGC0Ywg0L3QvtC80LXRgCDQv9C+0YDRgtCwIgorCisjOiB1cmxtYXRjaC5jOjE5OQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQtSDRgdC40LzQstC+0LvRiyDQsiDQuNC80LXQvdC4INGB0LXRgNCy0LXRgNCwIgorCisjOiB1cmxtYXRjaC5jOjI0NCB1cmxtYXRjaC5jOjI1NQorbXNnaWQgImludmFsaWQgcG9ydCBudW1iZXIiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQvdC+0LzQtdGAINC/0L7RgNGC0LAiCisKKyM6IHVybG1hdGNoLmM6MzIyCittc2dpZCAiaW52YWxpZCAnLi4nIHBhdGggc2VnbWVudCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINGH0LDRgdGC0Ywg0L/Rg9GC0LggwqsuLsK7IgorCisjOiB3cmFwcGVyLmM6MjE5IHdyYXBwZXIuYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDCqyVzwrsg0LTQu9GPINGH0YLQtdC90LjRjyDQuCDQt9Cw0L/QuNGB0LgiCisKKyM6IHdyYXBwZXIuYzoyMjEgd3JhcHBlci5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuyDQtNC70Y8g0LfQsNC/0LjRgdC4IgorCisjOiB3cmFwcGVyLmM6MjIzIHdyYXBwZXIuYzozNjYgYnVpbHRpbi9hbS5jOjMzNyBidWlsdGluL2NvbW1pdC5jOjE2ODgKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDc2IGJ1aWx0aW4vcHVsbC5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuyDQtNC70Y8g0YfRgtC10L3QuNGPIgorCisjOiB3cmFwcGVyLmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgIsKrJXPCuyDQvdC10LTQvtGB0YLRg9C/0L3QvjogJXMiCisKKyM6IHdyYXBwZXIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICLCqyVzwrsg0L3QtdC00L7RgdGC0YPQv9C90L4iCisKKyM6IHdyYXBwZXIuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0YDQvtGB0LjRgtGMINGC0LXQutGD0YnQtdCz0L4g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINCyINGE0LDQudC70LUgcGFzc3dkOiAlcyIKKworIzogd3JhcHBlci5jOjYxMgorbXNnaWQgIm5vIHN1Y2ggdXNlciIKK21zZ3N0ciAi0L3QtdGCINGC0LDQutC+0LPQviDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8iCisKKyM6IHdyYXBwZXIuYzo2MjAKK21zZ2lkICJ1bmFibGUgdG8gZ2V0IGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDRgtC10LrRg9GJ0LjQuSDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyIKKworIzogd3JhcHBlci5jOjYzMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGluZyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDCqyVzwrsg0LTQu9GPINC30LDQv9C40YHQuCIKKworIzogd3JhcHBlci5jOjY0MiBidWlsdGluL2FtLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINCyICVzIgorCisjOiB3cmFwcGVyLmM6NjQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LrRgNGL0YLRjCAlcyIKKworIzogd3Qtc3RhdHVzLmM6MTQ5Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICLQndC1INGB0LvQuNGC0YvQtSDQv9GD0YLQuDoiCisKKyM6IHd0LXN0YXR1cy5jOjE3NiB3dC1zdGF0dXMuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc2V0ICVzIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJlc2V0ICVzIDzRhNCw0LnQuz7igKbCuywg0YfRgtC+0LHRiyDRg9Cx0YDQsNGC0Ywg0LjQtyDQuNC90LTQtdC60YHQsCkiCisKKyM6IHd0LXN0YXR1cy5jOjE3OCB3dC1zdGF0dXMuYzoyMDUKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcm0gLS1jYWNoZWQgPNGE0LDQudC7PuKApsK7LCDRh9GC0L7QsdGLINGD0LHRgNCw0YLRjCDQuNC3INC40L3QtNC10LrRgdCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTgyCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGFkZCA80YTQsNC50Ls+4oCmwrssINGH0YLQvtCx0Ysg0L/QvtC80LXRgtC40YLRjCDRgNCw0LfRgNC10YjQtdC90LjQtSDQutC+0L3RhNC70LjQutGC0LApIgorCisjOiB3dC1zdGF0dXMuYzoxODQgd3Qtc3RhdHVzLmM6MTg4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGFkZC9ybSA80YTQsNC50Ls+4oCmwrssINGH0YLQvtCx0Ysg0L/QvtC80LXRgtC40YLRjCDQstGL0LHRgNCw0L3QvdC+0LUg0YDQsNC30YDQtdGI0LXQvdC40LUg0LrQvtC90YTQu9C40LrRgtCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTg2Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcm0gPNGE0LDQudC7PuKApsK7LCDRh9GC0L7QsdGLINC/0L7QvNC10YLQuNGC0Ywg0YDQsNC30YDQtdGI0LXQvdC40LUg0LrQvtC90YTQu9C40LrRgtCwKSIKKworIzogd3Qtc3RhdHVzLmM6MTk3IHd0LXN0YXR1cy5jOjg4MAorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPLCDQutC+0YLQvtGA0YvQtSDQsdGD0LTRg9GCINCy0LrQu9GO0YfQtdC90Ysg0LIg0LrQvtC80LzQuNGCOiIKKworIzogd3Qtc3RhdHVzLmM6MjE1IHd0LXN0YXR1cy5jOjg4OQorbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPLCDQutC+0YLQvtGA0YvQtSDQvdC1INCyINC40L3QtNC10LrRgdC1INC00LvRjyDQutC+0LzQvNC40YLQsDoiCisKKyM6IHd0LXN0YXR1cy5jOjIxOQorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGFkZCA80YTQsNC50Ls+4oCmwrssINGH0YLQvtCx0Ysg0LTQvtCx0LDQstC40YLRjCDRhNCw0LnQuyDQsiDQuNC90LTQtdC60YEpIgorCisjOiB3dC1zdGF0dXMuYzoyMjEKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBhZGQvcm0gPNGE0LDQudC7PuKApsK7LCDRh9GC0L7QsdGLINC00L7QsdCw0LLQuNGC0Ywg0LjQu9C4INGD0LTQsNC70LjRgtGMINGE0LDQudC7INC40Lcg0LjQvdC00LXQutGB0LApIgorCisjOiB3dC1zdGF0dXMuYzoyMjIKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nICIKKyJkaXJlY3RvcnkpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGNoZWNrb3V0IC0tIDzRhNCw0LnQuz7igKbCuywg0YfRgtC+0LHRiyDQvtGC0LzQtdC90LjRgtGMINC40LfQvNC10L3QtdC90LjRj1xuICAg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSkiCisKKyM6IHd0LXN0YXR1cy5jOjIyNAorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiICAo0YHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIg0LjQu9C4INC+0YLQvNC10L3QuNGC0LUg0LjQt9C80LXQvdC10L3QuNGPINCyINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7QvCDQuNC70Lgg0LjQt9C80LXQvdC10L3QvdC+0Lwg0YHQvtC00LXRgNC20LjQvNC+0Lwg0LIg0L/QvtC00LzQvtC00YPQu9GP0YUpIgorCisjOiB3dC1zdGF0dXMuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgJXMgPNGE0LDQudC7PuKApsK7LCDRh9GC0L7QsdGLINC00L7QsdCw0LLQuNGC0Ywg0LIg0YLQviwg0YfRgtC+INCx0YPQtNC10YIg0LLQutC70Y7Rh9C10L3QviDQsiDQutC+0LzQvNC40YIpIgorCisjOiB3dC1zdGF0dXMuYzoyNTEKK21zZ2lkICJib3RoIGRlbGV0ZWQ6IgorbXNnc3RyICLQvtCx0LAg0YPQtNCw0LvQtdC90Ys6IgorCisjOiB3dC1zdGF0dXMuYzoyNTMKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgItC00L7QsdCw0LLQu9C10L3QviDQvdCw0LzQuDoiCisKKyM6IHd0LXN0YXR1cy5jOjI1NQorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgItGD0LTQsNC70LXQvdC+INC40LzQuDoiCisKKyM6IHd0LXN0YXR1cy5jOjI1NworbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICLQtNC+0LHQsNCy0LvQtdC90L4g0LjQvNC4OiIKKworIzogd3Qtc3RhdHVzLmM6MjU5Cittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgItGD0LTQsNC70LXQvdC+INC90LDQvNC4OiIKKworIzogd3Qtc3RhdHVzLmM6MjYxCittc2dpZCAiYm90aCBhZGRlZDoiCittc2dzdHIgItC+0LHQsCDQtNC+0LHQsNCy0LvQtdC90Ys6IgorCisjOiB3dC1zdGF0dXMuYzoyNjMKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAi0L7QsdCwINC40LfQvNC10L3RizoiCisKKyM6IHd0LXN0YXR1cy5jOjI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJidWc6IHVuaGFuZGxlZCB1bm1lcmdlZCBzdGF0dXMgJXgiCittc2dzdHIgItC+0YjQuNCx0LrQsDog0L3QtdC+0LHRgNCw0LHQvtGC0LDQvdC90YvQuSDRgdGC0LDRgtGD0YEg0L3QtSDRgdC70LjRgtGL0YUg0LjQt9C80LXQvdC10L3QuNC5ICV4IgorCisjOiB3dC1zdGF0dXMuYzoyNzMKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgItC90L7QstGL0Lkg0YTQsNC50Ls6IgorCisjOiB3dC1zdGF0dXMuYzoyNzUKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICLRgdC60L7Qv9C40YDQvtCy0LDQvdC+OiIKKworIzogd3Qtc3RhdHVzLmM6Mjc3Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgItGD0LTQsNC70LXQvdC+OiIKKworIzogd3Qtc3RhdHVzLmM6Mjc5Cittc2dpZCAibW9kaWZpZWQ6IgorbXNnc3RyICLQuNC30LzQtdC90LXQvdC+OiIKKworIzogd3Qtc3RhdHVzLmM6MjgxCittc2dpZCAicmVuYW1lZDoiCittc2dzdHIgItC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC+OiIKKworIzogd3Qtc3RhdHVzLmM6MjgzCittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgItC40LfQvNC10L3QtdC9INGC0LjQvzoiCisKKyM6IHd0LXN0YXR1cy5jOjI4NQorbXNnaWQgInVua25vd246IgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3QvjoiCisKKyM6IHd0LXN0YXR1cy5jOjI4NworbXNnaWQgInVubWVyZ2VkOiIKK21zZ3N0ciAi0L3QtSDRgdC70LjRgtGL0LU6IgorCisjOiB3dC1zdGF0dXMuYzozNjkKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICLQvdC+0LLRi9C1INC60L7QvNC80LjRgtGLLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM3MQorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAi0LjQt9C80LXQvdC10L3QviDRgdC+0LTQtdGA0LbQuNC80L7QtSwgIgorCisjOiB3dC1zdGF0dXMuYzozNzMKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICLQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNC+0LUg0YHQvtC00LXRgNC20LjQvNC+0LUsICIKKworIzogd3Qtc3RhdHVzLmM6MzkwCisjLCBjLWZvcm1hdAorbXNnaWQgImJ1ZzogdW5oYW5kbGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICLQvtGI0LjQsdC60LA6INC90LXQvtCx0YDQsNCx0L7RgtCw0L3QvdGL0Lkg0YHRgtCw0YLRg9GBINC40LfQvNC10L3QtdC90LjQuSAlYyIKKworIzogd3Qtc3RhdHVzLmM6NzU0Cittc2dpZCAiU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgItCY0LfQvNC10L3QtdC90L3Ri9C1LCDQvdC+INC90LUg0L7QsdC90L7QstC70LXQvdC90YvQtSDQv9C+0LTQvNC+0LTRg9C70Lg6IgorCisjOiB3dC1zdGF0dXMuYzo3NTYKK21zZ2lkICJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y8g0LIg0L/QvtC00LzQvtC00YPQu9GP0YUsINC60L7RgtC+0YDRi9C1INCx0YPQtNGD0YIg0LfQsNC60L7QvNC80LjRh9C10L3RizoiCisKKyM6IHd0LXN0YXR1cy5jOjgzNworbXNnaWQgIiIKKyJEbyBub3QgdG91Y2ggdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyB3aWxsIGJlIHJlbW92ZWQuIgorbXNnc3RyICLQndC1INGC0YDQvtCz0LDQudGC0LUg0YHRgtGA0L7QutGDINCy0YvRiNC1INGN0YLQvtC5Llxu0JLRgdGRLCDRh9GC0L4g0L3QuNC20LUg4oCUINCx0YPQtNC10YIg0YPQtNCw0LvQtdC90L4uIgorCisjOiB3dC1zdGF0dXMuYzo5NDgKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgItCjINCy0LDRgSDQtdGB0YLRjCDQvdC1INGB0LvQuNGC0YvQtSDQv9GD0YLQuC4iCisKKyM6IHd0LXN0YXR1cy5jOjk1MQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKNGA0LDQt9GA0LXRiNC40YLQtSDQutC+0L3RhNC70LjQutGC0YssINC30LDRgtC10Lwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGNvbW1pdMK7KSIKKworIzogd3Qtc3RhdHVzLmM6OTU0Cittc2dpZCAiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIKK21zZ3N0ciAi0JLRgdC1INC60L7QvdGE0LvQuNC60YLRiyDQuNGB0L/RgNCw0LLQu9C10L3Riywg0L3QviDQstGLINCy0YHQtSDQtdGJ0LUg0LIg0L/RgNC+0YbQtdGB0YHQtSDRgdC70LjRj9C90LjRjy4iCisKKyM6IHd0LXN0YXR1cy5jOjk1NworbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXRcIiB0byBjb25jbHVkZSBtZXJnZSkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgY29tbWl0wrssINGH0YLQvtCx0Ysg0LfQsNCy0LXRgNGI0LjRgtGMINGB0LvQuNGP0L3QuNC1KSIKKworIzogd3Qtc3RhdHVzLmM6OTY3Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICLQktGLINCyINC/0YDQvtGG0LXRgdGB0LUg0YHQtdGB0YHQuNC4IGFtLiIKKworIzogd3Qtc3RhdHVzLmM6OTcwCittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICLQotC10LrRg9GJ0LjQuSDQv9Cw0YLRhyDQv9GD0YHRgtC+0LkuIgorCisjOiB3dC1zdGF0dXMuYzo5NzQKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjRgNCw0LfRgNC10YjQuNGC0LUg0LrQvtC90YTQu9C40LrRgtGLLCDQt9Cw0YLQtdC8INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBhbSAtLWNvbnRpbnVlwrspIgorCisjOiB3dC1zdGF0dXMuYzo5NzYKK21zZ2lkICIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBhbSAtLXNraXDCuywg0YfRgtC+0LHRiyDQv9GA0L7Qv9GD0YHRgtC40YLRjCDRjdGC0L7RgiDQv9Cw0YLRhykiCisKKyM6IHd0LXN0YXR1cy5jOjk3OAorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBhbSAtLWFib3J0wrssINGH0YLQvtCx0Ysg0LLQvtGB0YHRgtCw0L3QvtCy0LjRgtGMINC+0YDQuNCz0LjQvdCw0LvRjNC90YPRjiDQstC10YLQutGDKSIKKworIzogd3Qtc3RhdHVzLmM6MTEwNQorbXNnaWQgIk5vIGNvbW1hbmRzIGRvbmUuIgorbXNnc3RyICLQmtC+0LzQsNC90LTRiyDQvdC1INCy0YvQv9C+0LvQvdC10L3Riy4iCisKKyM6IHd0LXN0YXR1cy5jOjExMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTGFzdCBjb21tYW5kIGRvbmUgKCVkIGNvbW1hbmQgZG9uZSk6IgorbXNnaWRfcGx1cmFsICJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIKK21zZ3N0clswXSAi0J/QvtGB0LvQtdC00L3Rj9GPINC60L7QvNCw0L3QtNCwINCy0YvQv9C+0LvQvdC10L3QsCAoJWQg0LrQvtC80LDQvdC0INCy0YvQv9C+0LvQvdC10L3Qvik6IgorbXNnc3RyWzFdICLQn9C+0YHQu9C10LTQvdGP0Y8g0LrQvtC80LDQvdC00LAg0LLRi9C/0L7Qu9C90LXQvdCwICglZCDQutC+0LzQsNC90LQg0LLRi9C/0L7Qu9C90LXQvdC+KToiCittc2dzdHJbMl0gItCf0L7RgdC70LXQtNC90Y/RjyDQutC+0LzQsNC90LTQsCDQstGL0L/QvtC70L3QtdC90LAgKCVkINC60L7QvNCw0L3QtCDQstGL0L/QvtC70L3QtdC90L4pOiIKK21zZ3N0clszXSAi0J/QvtGB0LvQtdC00L3Rj9GPINC60L7QvNCw0L3QtNCwINCy0YvQv9C+0LvQvdC10L3QsCAoJWQg0LrQvtC80LDQvdC0INCy0YvQv9C+0LvQvdC10L3Qvik6IgorCisjOiB3dC1zdGF0dXMuYzoxMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHNlZSBtb3JlIGluIGZpbGUgJXMpIgorbXNnc3RyICIgICjRgdC80L7RgtGA0LjRgtC1INC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+INCyINGE0LDQudC70LUgJXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMTI0Cittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAi0JrQvtC80LDQvdC0INCx0L7Qu9GM0YjQtSDQvdC1INC+0YHRgtCw0LvQvtGB0YwuIgorCisjOiB3dC1zdGF0dXMuYzoxMTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5leHQgY29tbWFuZCB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmQpOiIKK21zZ2lkX3BsdXJhbCAiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiCittc2dzdHJbMF0gItCh0LvQtdC00YPRjtGJ0LDRjyDQutC+0LzQsNC90LTQsCDQtNC70Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8gKCVkINC60L7QvNCw0L3QtNCwINC+0YHRgtCw0LvQsNGB0YwpOiIKK21zZ3N0clsxXSAi0KHQu9C10LTRg9GO0YnQsNGPINC60L7QvNCw0L3QtNCwINC00LvRjyDQstGL0L/QvtC70L3QtdC90LjRjyAoJWQg0LrQvtC80LDQvdC00Ysg0L7RgdGC0LDQu9C+0YHRjCk6IgorbXNnc3RyWzJdICLQodC70LXQtNGD0Y7RidCw0Y8g0LrQvtC80LDQvdC00LAg0LTQu9GPINCy0YvQv9C+0LvQvdC10L3QuNGPICglZCDQutC+0LzQsNC90LQg0L7RgdGC0LDQu9C+0YHRjCk6IgorbXNnc3RyWzNdICLQodC70LXQtNGD0Y7RidCw0Y8g0LrQvtC80LDQvdC00LAg0LTQu9GPINCy0YvQv9C+0LvQvdC10L3QuNGPICglZCDQutC+0LzQsNC90LQg0L7RgdGC0LDQu9C+0YHRjCk6IgorCisjOiB3dC1zdGF0dXMuYzoxMTM1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb8K7LCDRh9GC0L7QsdGLINC/0YDQvtGB0LzQvtGC0YDQtdGC0Ywg0Lgg0LjQt9C80LXQvdC40YLRjCkiCisKKyM6IHd0LXN0YXR1cy5jOjExNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINC/0LXRgNC10LzQtdGJ0LDQtdGC0LUg0LLQtdGC0LrRgyDCqyVzwrsg0L3QsNC0IMKrJXPCuy4iCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINC/0LXRgNC10LzQtdGJ0LDQtdGC0LUg0LLQtdGC0LrRgy4iCisKKyM6IHd0LXN0YXR1cy5jOjExNjcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0YDQsNC30YDQtdGI0LjRgtC1INC60L7QvdGE0LvQuNC60YLRiywg0LfQsNGC0LXQvCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmViYXNlIC0tY29udGludWXCuykiCisKKyM6IHd0LXN0YXR1cy5jOjExNjkKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcmViYXNlIC0tc2tpcMK7LCDRh9GC0L7QsdGLINC/0YDQvtC/0YPRgdGC0LjRgtGMINGN0YLQvtGCINC/0LDRgtGHKSIKKworIzogd3Qtc3RhdHVzLmM6MTE3MQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1hYm9ydFwiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCByZWJhc2UgLS1hYm9ydMK7LCDRh9GC0L7QsdGLINC/0LXRgNC10LnRgtC4INC90LAg0L7RgNC40LPQuNC90LDQu9GM0L3Rg9GOINCy0LXRgtC60YMpIgorCisjOiB3dC1zdGF0dXMuYzoxMTc3Cittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjQstGB0LUg0LrQvtC90YTQu9C40LrRgtGLINGA0LDQt9GA0LXRiNC10L3Rizog0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IHJlYmFzZSAtLWNvbnRpbnVlwrspIgorCisjOiB3dC1zdGF0dXMuYzoxMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINGA0LDQt9C00LXQu9GP0LXRgtC1INC60L7QvNC80LjRgiDQv9GA0Lgg0L/QtdGA0LXQvNC10YnQtdC90LjQuCDQstC10YLQutC4ICDCqyVzwrsg0L3QsNC0IMKrJXPCuy4iCisKKyM6IHd0LXN0YXR1cy5jOjExODYKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0YDQsNC30LTQtdC70Y/QtdGC0LUg0LrQvtC80LzQuNGCINC/0YDQuCDQv9C10YDQtdC80LXRidC10L3QuNC4INCy0LXRgtC60LguIgorCisjOiB3dC1zdGF0dXMuYzoxMTg5Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIijQmtCw0Log0YLQvtC70YzQutC+INCy0LDRiCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQsdGD0LTQtdGCINGH0LjRgdGC0YvQuSwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IHJlYmFzZSAtLWNvbnRpbnVlwrspIgorCisjOiB3dC1zdGF0dXMuYzoxMTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINGA0LXQtNCw0LrRgtC40YDRg9C10YLQtSDQutC+0LzQvNC40YIg0L/RgNC4INC/0LXRgNC10LzQtdGJ0LXQvdC40Lgg0LLQtdGC0LrQuCAgwqslc8K7INC90LDQtCDCqyVzwrsuIgorCisjOiB3dC1zdGF0dXMuYzoxMTk4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDRgNC10LTQsNC60YLQuNGA0YPQtdGC0LUg0LrQvtC80LzQuNGCINC/0YDQuCDQv9C10YDQtdC80LXRidC10L3QuNC4INCy0LXRgtC60LguIgorCisjOiB3dC1zdGF0dXMuYzoxMjAxCittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBjb21taXQgLS1hbWVuZMK7LCDRh9GC0L7QsdGLINC40YHQv9GA0LDQstC40YLRjCDRgtC10LrRg9GJ0LjQuSDQutC+0LzQvNC40YIpIgorCisjOiB3dC1zdGF0dXMuYzoxMjAzCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcmViYXNlIC0tY29udGludWXCuywg0LrQvtCz0LTQsCDQsdGD0LTQtdGC0LUg0LTQvtCy0L7Qu9GM0L3RiyDQuNC30LzQtdC90LXQvdC40Y/QvNC4KSIKKworIzogd3Qtc3RhdHVzLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDQvtGC0LHQuNGA0LDQtdGC0LUg0LvRg9GH0YjQuNC5INC60L7QvNC80LjRgiAlcy4iCisKKyM6IHd0LXN0YXR1cy5jOjEyMTgKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0YDQsNC30YDQtdGI0LjRgtC1INC60L7QvdGE0LvQuNC60YLRiywg0LfQsNGC0LXQvCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZcK7KSIKKworIzogd3Qtc3RhdHVzLmM6MTIyMQorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgICjQstGB0LUg0LrQvtC90YTQu9C40LrRgtGLINGA0LDQt9GA0LXRiNC10L3Rizog0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWXCuykiCisKKyM6IHd0LXN0YXR1cy5jOjEyMjMKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBjaGVycnktcGljayAtLWFib3J0wrssINGH0YLQvtCx0Ysg0L7RgtC80LXQvdC40YLRjCDQvtC/0LXRgNCw0YbQuNGOINC+0YLQsdC+0YDQsCDQu9GD0YfRiNC10LPQvikiCisKKyM6IHd0LXN0YXR1cy5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINCy0L7Qt9Cy0YDQsNGJ0LDQtdGC0LUg0LrQvtC80LzQuNGCICVzLiIKKworIzogd3Qtc3RhdHVzLmM6MTIzNworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAo0YDQsNC30YDQtdGI0LjRgtC1INC60L7QvdGE0LvQuNC60YLRiywg0LfQsNGC0LXQvCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmV2ZXJ0IC0tY29udGludWXCuykiCisKKyM6IHd0LXN0YXR1cy5jOjEyNDAKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKNCy0YHQtSDQutC+0L3RhNC70LjQutGC0Ysg0YDQsNC30YDQtdGI0LXQvdGLOiDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmV2ZXJ0IC0tY29udGludWXCuykiCisKKyM6IHd0LXN0YXR1cy5jOjEyNDIKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pIgorbXNnc3RyICIgICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJldmVydCAtLWFib3J0wrssINGH0YLQvtCx0Ysg0L7RgtC80LXQvdC40YLRjCDQvtC/0LXRgNCw0YbQuNGOINCy0L7Qt9Cy0YDQsNGC0LApIgorCisjOiB3dC1zdGF0dXMuYzoxMjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0LIg0L/RgNC+0YbQtdGB0YHQtSDQtNCy0L7QuNGH0L3QvtCz0L4g0L/QvtC40YHQutCwLCDQvdCw0YfQsNGC0L7Qs9C+INGBINCy0LXRgtC60Lggwqslc8K7LiIKKworIzogd3Qtc3RhdHVzLmM6MTI1NworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINCyINC/0YDQvtGG0LXRgdGB0LUg0LTQstC+0LjRh9C90L7Qs9C+INC/0L7QuNGB0LrQsC4iCisKKyM6IHd0LXN0YXR1cy5jOjEyNjAKK21zZ2lkICIgICh1c2UgXCJnaXQgYmlzZWN0IHJlc2V0XCIgdG8gZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgYmlzZWN0IHJlc2V0wrssINGH0YLQvtCx0Ysg0LLQtdGA0L3Rg9GC0YzRgdGPINC90LAg0LjRgdGF0L7QtNC90YPRjiDQstC10YLQutGDKSIKKworIzogd3Qtc3RhdHVzLmM6MTQzNworbXNnaWQgIk9uIGJyYW5jaCAiCittc2dzdHIgItCd0LAg0LLQtdGC0LrQtSAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDUKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90L7QtSDQv9C10YDQtdC80LXRidC10L3QuNC1INCyINC/0YDQvtGG0LXRgdGB0LU7INC90LDQtCAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDcKK21zZ2lkICJyZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICLQv9C10YDQtdC80LXRidC10L3QuNC1INCyINC/0YDQvtGG0LXRgdGB0LU7INC90LDQtCAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKK21zZ2lkICJIRUFEIGRldGFjaGVkIGF0ICIKK21zZ3N0ciAiSEVBRCDQvtGC0LTQtdC70LXQvSDQvdCwICIKKworIzogd3Qtc3RhdHVzLmM6MTQ1NAorbXNnaWQgIkhFQUQgZGV0YWNoZWQgZnJvbSAiCittc2dzdHIgIkhFQUQg0L7RgtC00LXQu9C10L0g0L3QsNGH0LjQvdCw0Y8g0YEgIgorCisjOiB3dC1zdGF0dXMuYzoxNDU3Cittc2dpZCAiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIKK21zZ3N0ciAi0KHQtdC50YfQsNGBINC90Lgg0L3QsCDQvtC00L3QvtC5INC40Lcg0LLQtdGC0L7QuiIKKworIzogd3Qtc3RhdHVzLmM6MTQ3NAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICLQndCw0YfQsNC70YzQvdGL0Lkg0LrQvtC80LzQuNGCIgorCisjOiB3dC1zdGF0dXMuYzoxNDg4Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLQndC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyIKKworIzogd3Qtc3RhdHVzLmM6MTQ5MAorbXNnaWQgIklnbm9yZWQgZmlsZXMiCittc2dzdHIgItCY0LPQvdC+0YDQuNGA0YPQtdC80YvQtSDRhNCw0LnQu9GLIgorCisjOiB3dC1zdGF0dXMuYzoxNDk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJdCB0b29rICUuMmYgc2Vjb25kcyB0byBlbnVtZXJhdGUgdW50cmFja2VkIGZpbGVzLiAnc3RhdHVzIC11bm8nXG4iCisibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZFxuIgorIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCittc2dzdHIgIiUuMmYg0YHQtdC60YPQvdC00Ysg0LfQsNC90Y/QuyDQstGL0LLQvtC0INGB0L/QuNGB0LrQsCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyLiDCq3N0YXR1cyAtdW5vwrsg0LLQvtC30LzQvtC20L3QviDQvNC+0LbQtdGCINGD0YHQutC+0YDQuNGC0Ywg0Y3RgtC+LCDQvdC+INCx0YPQtNGM0YLQtSDQstC90LjQvNCw0YLQtdC70YzQvdGLLCDQuCDQvdC1INC30LDQsdGD0LTRjNGC0LUg0LTQvtCx0LDQstC40YLRjCDQvdC+0LLRi9C1INGE0LDQudC70Ysg0LLRgNGD0YfQvdGD0Y4gKNGB0LzQvtGC0YDQuNGC0LUgwqtnaXQgaGVscCBzdGF0dXPCuyDQtNC70Y8g0L/QvtC00YDQvtCx0L3QvtGB0YLQtdC5KS4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAi0J3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70Ysg0L3QtSDQv9C+0LrQsNC30LDQvdGLJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE1MDIKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQvtC/0YbQuNGOIMKrLXXCuywg0YfRgtC+0LHRiyDQv9C+0LrQsNC30LDRgtGMINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLKSIKKworIzogd3Qtc3RhdHVzLmM6MTUwOAorbXNnaWQgIk5vIGNoYW5nZXMiCittc2dzdHIgItCd0LXRgiDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IHd0LXN0YXR1cy5jOjE1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgItC90LXRgiDQuNC30LzQtdC90LXQvdC40Lkg0LTQvtCx0LDQstC70LXQvdC90YvRhSDQtNC70Y8g0LrQvtC80LzQuNGC0LBcbijQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGFkZMK7INC4L9C40LvQuCDCq2dpdCBjb21taXQgLWHCuylcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUxNgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIgorbXNnc3RyICLQvdC10YIg0LjQt9C80LXQvdC10L3QuNC5INC00L7QsdCw0LLQu9C10L3QvdGL0YUg0LTQu9GPINC60L7QvNC80LjRgtCwXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAi0L3QuNGH0LXQs9C+INC90LUg0LTQvtCx0LDQstC70LXQvdC+INCyINC60L7QvNC80LjRgiwg0L3QviDQtdGB0YLRjCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiyAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSBcImdpdCBhZGRcIiwg0YfRgtC+0LHRiyDQvtGC0YHQu9C10LbQuNCy0LDRgtGMINC40YUpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyBhZGRlZCB0byBjb21taXQgYnV0IHVudHJhY2tlZCBmaWxlcyBwcmVzZW50XG4iCittc2dzdHIgItC90LjRh9C10LPQviDQvdC1INC00L7QsdCw0LLQu9C10L3QviDQsiDQutC+0LzQvNC40YIsINC90L4g0LXRgdGC0Ywg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70YtcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAi0L3QtdGH0LXQs9C+INC60L7QvNC80LjRgtC40YLRjCAo0YHQvtC30LTQsNC50YLQtS/RgdC60L7Qv9C40YDRg9C50YLQtSDRhNCw0LnQu9GLLCDQt9Cw0YLQtdC8INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCBhZGTCuywg0YfRgtC+0LHRiyDQvtGC0YHQu9C10LbQuNCy0LDRgtGMINC40YUpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1Mjggd3Qtc3RhdHVzLmM6MTUzMworIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICLQvdC10YfQtdCz0L4g0LrQvtC80LzQuNGC0LjRgtGMXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAi0L3QtdGH0LXQs9C+INC60L7QvNC80LjRgtC40YLRjCAo0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQvtC/0YbQuNGOIMKrLXXCuywg0YfRgtC+0LHRiyDQv9C+0LrQsNC30LDRgtGMINC90LXQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDRhNCw0LnQu9GLKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0LCB3b3JraW5nIGRpcmVjdG9yeSBjbGVhblxuIgorbXNnc3RyICLQvdC10YfQtdCz0L4g0LrQvtC80LzQuNGC0LjRgtGMLCDQvdC10YIg0LjQt9C80LXQvdC10L3QuNC5INCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LVcbiIKKworIzogd3Qtc3RhdHVzLmM6MTY0NAorbXNnaWQgIkhFQUQgKG5vIGJyYW5jaCkiCittc2dzdHIgIkhFQUQgKNC90LXRgiDQstC10YLQutC4KSIKKworIzogd3Qtc3RhdHVzLmM6MTY1MAorbXNnaWQgIkluaXRpYWwgY29tbWl0IG9uICIKK21zZ3N0ciAi0J3QsNGH0LDQu9GM0L3Ri9C5INC60L7QvNC80LjRgiDQvdCwICIKKworIzogd3Qtc3RhdHVzLmM6MTY3NworbXNnaWQgImdvbmUiCittc2dzdHIgItC40YHRh9C10LciCisKKyM6IHd0LXN0YXR1cy5jOjE2Nzkgd3Qtc3RhdHVzLmM6MTY4NworbXNnaWQgImJlaGluZCAiCittc2dzdHIgItC/0L7Qt9Cw0LTQuCIKKworIzogY29tcGF0L3ByZWNvbXBvc2VfdXRmOC5jOjU1IGJ1aWx0aW4vY2xvbmUuYzo0MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHVubGluayAnJXMnIgorbXNnc3RyICLRgdCx0L7QuSDQvtGC0YHQvtC10LTQuNC90LXQvdC40Y8gwqslc8K7IgorCisjOiBidWlsdGluL2FkZC5jOjIyCittc2dpZCAiZ2l0IGFkZCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBhZGQgWzzQvtC/0YbQuNC4Pl0gWy0tXSA80YHQv9C10YbQuNGE0LjQutCw0YbQuNGPLdC/0YPRgtC4PuKApiIKKworIzogYnVpbHRpbi9hZGQuYzo2NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIGRpZmYgc3RhdHVzICVjIgorbXNnc3RyICLQvdC10L7QttC40LTQsNC90L3Ri9C5INGB0YLQsNGC0YPRgSDRgNCw0LfQu9C40YfQuNC5ICVjIgorCisjOiBidWlsdGluL2FkZC5jOjcwIGJ1aWx0aW4vY29tbWl0LmM6Mjc3Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0L7QsdC90L7QstC70LXQvdC40Lgg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2FkZC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgItGD0LTQsNC70LjRgtGMIMKrJXPCu1xuIgorCisjOiBidWlsdGluL2FkZC5jOjEzNAorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVmcmVzaGluZyB0aGUgaW5kZXg6IgorbXNnc3RyICLQndC10L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQv9C+0YHQu9C1INC+0LHQvdC+0LLQu9C10L3QuNGPINC40L3QtNC10LrRgdCwOiIKKworIzogYnVpbHRpbi9hZGQuYzoxOTQgYnVpbHRpbi9yZXYtcGFyc2UuYzo3OTkKK21zZ2lkICJDb3VsZCBub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi9hZGQuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywgwqslc8K7INC00LvRjyDQt9Cw0L/QuNGB0LguIgorCisjOiBidWlsdGluL2FkZC5jOjIwOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC/0LDRgtGHIgorCisjOiBidWlsdGluL2FkZC5jOjIxMgorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjQuCDQv9Cw0YLRh9CwIgorCisjOiBidWlsdGluL2FkZC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0INC00LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjE3Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICLQn9GD0YHRgtC+0Lkg0L/QsNGC0YcuINCe0L/QtdGA0LDRhtC40Y8g0L/RgNC10YDQstCw0L3QsC4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQuNC80LXQvdC40YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjMyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICLQodC70LXQtNGD0Y7RidC40LUg0L/Rg9GC0Lgg0LjQs9C90L7RgNC40YDRg9GO0YLRgdGPINC+0LTQvdC40Lwg0LjQtyDQstCw0YjQuNGFINGE0LDQudC70L7QsiAuZ2l0aWdub3JlOlxuIgorCisjOiBidWlsdGluL2FkZC5jOjI0OSBidWlsdGluL2NsZWFuLmM6ODk2IGJ1aWx0aW4vZmV0Y2guYzoxMDggYnVpbHRpbi9tdi5jOjExMAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NSBidWlsdGluL3B1bGwuYzoxODIgYnVpbHRpbi9wdXNoLmM6NTQ1CisjOiBidWlsdGluL3JlbW90ZS5jOjEzMzkgYnVpbHRpbi9ybS5jOjI2OCBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgImRyeSBydW4iCittc2dzdHIgItC/0YDQvtCx0L3Ri9C5INC30LDQv9GD0YHQuiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTAgYnVpbHRpbi9hcHBseS5jOjQ1ODAgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxOQorIzogYnVpbHRpbi9jb21taXQuYzoxMzIxIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjYzIGJ1aWx0aW4vZnNjay5jOjYzNgorIzogYnVpbHRpbi9sb2cuYzoxNjQxIGJ1aWx0aW4vbXYuYzoxMDkgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTQKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICLQsdGL0YLRjCDQvNC90L7Qs9C+0YHQu9C+0LLQvdC10LUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUyCittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAi0LjQvdGC0LXRgNCw0LrRgtC40LLQvdGL0Lkg0LLRi9Cx0L7RgCIKKworIzogYnVpbHRpbi9hZGQuYzoyNTMgYnVpbHRpbi9jaGVja291dC5jOjExNTIgYnVpbHRpbi9yZXNldC5jOjI4NgorbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90YvQuSDQstGL0LHQvtGAINCx0LvQvtC60L7QsiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTQKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgItC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgtC10LrRg9GJ0LjQuSDRhNCw0LnQuyDRgNCw0LfQu9C40YfQuNC5INC4INC/0YDQuNC80LXQvdC40YLRjCDQtdCz0L4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU1Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0LTQvtCx0LDQstC70LXQvdC40LUg0LjQs9C90L7RgNC40YDRg9C10LzRi9GFINC40L3QsNGH0LUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2FkZC5jOjI1NgorbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70YsiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU3Cittc2dpZCAicmVjb3JkIG9ubHkgdGhlIGZhY3QgdGhhdCB0aGUgcGF0aCB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINGC0L7Qu9GM0LrQviDRhNCw0LrRgiwg0YfRgtC+INC/0YPRgtGMINCx0YPQtNC10YIg0LTQvtCx0LDQstC70LXQvSDQv9C+0LfQttC1IgorCisjOiBidWlsdGluL2FkZC5jOjI1OAorbXNnaWQgImFkZCBjaGFuZ2VzIGZyb20gYWxsIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LjQtyDQstGB0LXRhSDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDQuCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2FkZC5jOjI2MQorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0L/Rg9GC0Lgg0YPQtNCw0LvQtdC90L3Ri9C1INC40Lcg0YDQsNCx0L7Rh9C10LPQviDQutCw0YLQsNC70L7Qs9CwICjRgtC+0LbQtSwg0YfRgtC+INC4IC0tbm8tYWxsKSIKKworIzogYnVpbHRpbi9hZGQuYzoyNjMKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgItC90LUg0LTQvtCx0LDQstC70Y/RgtGMLCDRgtC+0LvRjNC60L4g0L7QsdC90L7QstC40YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY0Cittc2dpZCAianVzdCBza2lwIGZpbGVzIHdoaWNoIGNhbm5vdCBiZSBhZGRlZCBiZWNhdXNlIG9mIGVycm9ycyIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0LrQsNGC0Ywg0YTQsNC50LvRiywg0LrQvtGC0L7RgNGL0LUg0L3QtSDQvNC+0LPRg9GCINCx0YvRgtGMINC00L7QsdCw0LLQu9C10L3RiyDQuNC3LdC30LAg0L7RiNC40LHQvtC6IgorCisjOiBidWlsdGluL2FkZC5jOjI2NQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAi0YPQtNC+0YHRgtC+0LLQtdGA0LjRgtGM0YHRjywg0YfRgtC+INC00LDQttC1INC90LXQtNC+0YHRgtCw0Y7RidC40LUg0YTQsNC50LvRiyDQsdGD0LTRg9GCINC/0YDQvtC40LPQvdC+0YDQuNGA0L7QstCw0L3RiyDQv9GA0LggINC/0YDQvtCx0L3QvtC8INC30LDQv9GD0YHQutC1IgorCisjOiBidWlsdGluL2FkZC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9GD0LnRgtC1IC1mLCDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQtNC+0LHQsNCy0LjRgtGMINC40YUuXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjk0Cittc2dpZCAiYWRkaW5nIGZpbGVzIGZhaWxlZCIKK21zZ3N0ciAi0L7RiNC40LHQutCwINC/0YDQuCDQtNC+0LHQsNCy0LvQtdC90LjQuCDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMwCittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BINC4IC11INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL2FkZC5jOjMzNworbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgItCe0L/RhtC40Y8gLS1pZ25vcmUtbWlzc2luZyDQvNC+0LbQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0YLQvtC70YzQutC+INCy0LzQtdGB0YLQtSDRgSAtLWRyeS1ydW4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICLQndC40YfQtdCz0L4g0L3QtSDRg9C60LDQt9Cw0L3Qviwg0L3QuNGH0LXQs9C+INC90LUg0LTQvtCx0LDQstC70LXQvdC+LlxuIgorCisjOiBidWlsdGluL2FkZC5jOjM1OQorIywgYy1mb3JtYXQKK21zZ2lkICJNYXliZSB5b3Ugd2FudGVkIHRvIHNheSAnZ2l0IGFkZCAuJz9cbiIKK21zZ3N0ciAi0JLQvtC30LzQvtC20L3Qviwg0LLRiyDQuNC80LXQu9C4INCyINCy0LjQtNGDIMKrZ2l0IGFkZCAuwrs/XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzY0IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTcyIGJ1aWx0aW4vY2xlYW4uYzo5NDAKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzM2IGJ1aWx0aW4vbXYuYzoxMzAgYnVpbHRpbi9yZXNldC5jOjIzNSBidWlsdGluL3JtLmM6Mjk4Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICLRhNCw0LnQuyDQuNC90LTQtdC60YHQsCDQv9C+0LLRgNC10LbQtNC10L0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ1IGJ1aWx0aW4vYXBwbHkuYzo0Njc4IGJ1aWx0aW4vbXYuYzoyNzkgYnVpbHRpbi9ybS5jOjQzMAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC90L7QstGL0Lkg0YTQsNC50Lsg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgc3RhdCDQtNC70Y8gJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyNzAgYnVpbHRpbi9hbS5jOjEzNDUgYnVpbHRpbi9jb21taXQuYzo3MzcKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9hbS5jOjQ0NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDRgdGG0LXQvdCw0YDQuNC5INCw0LLRgtC+0YDRgdGC0LLQsCIKKworIzogYnVpbHRpbi9hbS5jOjUyMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICLCqyVzwrsg0LHRi9C7INGD0LTQsNC70LXQvSDQv9C10YDQtdGF0LLQsNGC0YfQuNC60L7QvCBhcHBseXBhdGNoLW1zZyIKKworIzogYnVpbHRpbi9hbS5jOjU2MiBidWlsdGluL25vdGVzLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAi0J/Qu9C+0YXQsNGPINGB0YLRgNC+0LrQsCDQstCy0L7QtNCwOiDCqyVzwrsuIgorCisjOiBidWlsdGluL2FtLmM6NTk5IGJ1aWx0aW4vbm90ZXMuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQutC+0L/QuNGA0L7QstCw0YLRjCDQt9Cw0LzQtdGC0LrRgyDQuNC3IMKrJXPCuyDQsiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYW0uYzo2MjUKK21zZ2lkICJmc2VlayBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC/0YDQuCDQstGL0L/QvtC70L3QtdC90LjQuCBmc2VlayIKKworIzogYnVpbHRpbi9hbS5jOjc4NiBidWlsdGluL2FtLmM6ODc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmc6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMIMKrJXPCuyDQtNC70Y8g0YfRgtC10L3QuNGPOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDCqyVzwrsg0LTQu9GPINC30LDQv9C40YHQuDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzo4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC/0LDRgtGHIMKrJXPCuyIKKworIzogYnVpbHRpbi9hbS5jOjg2NworbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICLQotC+0LvRjNC60L4g0YHQtdGA0LjRjyDQv9Cw0YLRh9C10LkgU3RHSVQg0LzQvtC20LXRgiDQsdGL0YLRjCDQv9GA0LjQvNC10L3QtdC90LAg0LfQsCDRgNCw0LciCisKKyM6IGJ1aWx0aW4vYW0uYzo5MTUKK21zZ2lkICJpbnZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAi0L3QtdC00L7Qv9GD0YHRgtC40LzQsNGPINC80LXRgtC60LAg0LTQsNGC0Ysv0LLRgNC10LzQtdC90LgiCisKKyM6IGJ1aWx0aW4vYW0uYzo5MTggYnVpbHRpbi9hbS5jOjkyNgorbXNnaWQgImludmFsaWQgRGF0ZSBsaW5lIgorbXNnc3RyICLQvdC10LTQvtC/0YPRgdGC0LjQvNCw0Y8g0YHRgtGA0L7QutCwINC00LDRgtGLIgorCisjOiBidWlsdGluL2FtLmM6OTIzCittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgItC90LXQtNC+0L/Rg9GB0YLQuNC80L7QtSDRgdC80LXRidC10L3QuNC1INGH0LDRgdC+0LLQvtCz0L4g0L/QvtGP0YHQsCIKKworIzogYnVpbHRpbi9hbS5jOjEwMTAKK21zZ2lkICJQYXRjaCBmb3JtYXQgZGV0ZWN0aW9uIGZhaWxlZC4iCittc2dzdHIgItCh0LHQvtC5INC+0L/RgNC10LTQtdC70LXQvdC40Y8g0YTQvtGA0LzQsNGC0LAg0L/QsNGC0YfQsC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDE1IGJ1aWx0aW4vY2xvbmUuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQutCw0YLQsNC70L7QsyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDE5Cittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C00LXQu9C40YLRjCDQv9Cw0YLRh9C4INC90LAg0YfQsNGB0YLQuC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMTUxIGJ1aWx0aW4vY29tbWl0LmM6MzYyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIGluZGV4IGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICLQmtC+0LPQtNCwINCy0Ysg0YPRgdGC0YDQsNC90LjRgtC1INGN0YLRgyDQv9GA0L7QsdC70LXQvNGDLCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqslcyAtLWNvbnRpbnVlwrsuIgorCisjOiBidWlsdGluL2FtLmM6MTIwMworIywgYy1mb3JtYXQKK21zZ2lkICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJXMgLS1za2lwXCIgaW5zdGVhZC4iCittc2dzdHIgItCV0YHQu9C4INCy0Ysg0YXQvtGC0LjRgtC1INC/0YDQvtC/0YPRgdGC0LjRgtGMINGN0YLQvtGCINC/0LDRgtGHLCDRgtC+INC30LDQv9GD0YHRgtC40YLQtSDCqyVzIC0tc2tpcMK7LiIKKworIzogYnVpbHRpbi9hbS5jOjEyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nLCBydW4gXCIlcyAtLWFib3J0XCIuIgorbXNnc3RyICLQp9GC0L7QsdGLINCy0LXRgNC90YPRgtGM0YHRjyDQvdCwINC/0YDQtdC00YvQtNGD0YnRg9GOINCy0LXRgtC60YMg0Lgg0L7RgdGC0LDQvdC+0LLQuNGC0Ywg0L/RgNC40LzQtdC90LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5LCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqslcyAtLWFib3J0wrsuIgorCisjOiBidWlsdGluL2FtLmM6MTMzOQorbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiBXYXMgaXQgc3BsaXQgd3Jvbmc/IgorbXNnc3RyICLQn9Cw0YLRhyDQv9GD0YHRgi4g0JLQvtC30LzQvtC20L3Qviwg0L7QvSDQsdGL0Lsg0L3QtdC/0YDQsNCy0LjQu9GM0L3QviDRgNCw0LfQtNC10LvRkdC9PyIKKworIzogYnVpbHRpbi9hbS5jOjE0MTMgYnVpbHRpbi9sb2cuYzoxMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90LDRjyDRgdGC0YDQvtC60LAg0LjQtNC10L3RgtC40YTQuNC60LDRhtC40Lg6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGA0LDQt9C+0LHRgNCw0YLRjCDQutC+0LzQvNC40YIgJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjE0Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyBuZWNlc3NhcnkgYmxvYnMgdG8gZmFsbCBiYWNrIG9uIDMtd2F5IG1lcmdlLiIKK21zZ3N0ciAi0JIg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCDQvtGC0YHRg9GC0YHRgtCy0YPRjtGCINC00LLQvtC40YfQvdGL0LUg0L7QsdGK0LXQutGC0YssINC90LXQvtCx0YXQvtC00LjQvNGL0LUg0LTQu9GPINC+0YLQutCw0YLQsCDQuiDRgtGA0LXRhdGF0L7QtNC+0LLQvtC80YMg0YHQu9C40Y/QvdC40Y4uIgorCisjOiBidWlsdGluL2FtLmM6MTYxNgorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30YPRjiDQuNC90LTQtdC60YEg0LTQu9GPINGA0LXQutC+0L3RgdGC0YDRg9C60YbQuNC4INCx0LDQt9C+0LLQvtCz0L4g0LTQtdGA0LXQstCw4oCmIgorCisjOiBidWlsdGluL2FtLmM6MTYzNQorbXNnaWQgIiIKKyJEaWQgeW91IGhhbmQgZWRpdCB5b3VyIHBhdGNoP1xuIgorIkl0IGRvZXMgbm90IGFwcGx5IHRvIGJsb2JzIHJlY29yZGVkIGluIGl0cyBpbmRleC4iCittc2dzdHIgItCS0Ysg0LLRgNGD0YfQvdGD0Y4g0LjQt9C80LXQvdGP0LvQuCDQv9Cw0YLRhz9cbtCe0L0g0L3QtSDQvdCw0LrQu9Cw0LTRi9Cy0LDQtdGC0YHRjyDQsdC10Lcg0L7RiNC40LHQvtC6INC90LAg0LTQstC+0LjRh9C90YvQtSDQvtCx0YrQtdC60YLRiywg0LfQsNC/0LjRgdCw0L3QvdGL0LUg0LIg0LXQs9C+INC30LDQs9C+0LvQvtCy0LrQtS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjQxCittc2dpZCAiRmFsbGluZyBiYWNrIHRvIHBhdGNoaW5nIGJhc2UgYW5kIDMtd2F5IG1lcmdlLi4uIgorbXNnc3RyICLQntGC0LrQsNGCINC6INC/0YDQuNC80LXQvdC10L3QuNGOINC40LfQvNC10L3QtdC90LjQuSDQuiDQsdCw0LfQvtCy0L7QvNGDINC60L7QvNC80LjRgtGDINGBINC/0L7QvNC+0YnRjNGOINGC0YDQtdGF0YXQvtC00L7QstC+0LPQviDRgdC70LjRj9C90LjRj+KApiIKKworIzogYnVpbHRpbi9hbS5jOjE2NjYKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0LvQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogYnVpbHRpbi9hbS5jOjE2OTEgYnVpbHRpbi9tZXJnZS5jOjYzMgorbXNnaWQgImdpdCB3cml0ZS10cmVlIGZhaWxlZCB0byB3cml0ZSBhIHRyZWUiCittc2dzdHIgImdpdCB3cml0ZS10cmVlINC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQtNC10YDQtdCy0L4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjk4Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAi0L/RgNC40LzQtdC90LXQvdC40LUg0Log0L/Rg9GB0YLQvtC5INC40YHRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL2FtLmM6MTcxMSBidWlsdGluL2NvbW1pdC5jOjE3NTIgYnVpbHRpbi9tZXJnZS5jOjgyOQorIzogYnVpbHRpbi9tZXJnZS5jOjg1NAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICLRgdCx0L7QuSDQt9Cw0L/QuNGB0Lgg0L7QsdGK0LXQutGC0LAg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQzIGJ1aWx0aW4vYW0uYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC/0YDQvtC00L7Qu9C20L3QuNGC0Yw6ICVzINC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIgIgorCisjOiBidWlsdGluL2FtLmM6MTc2MworbXNnaWQgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+0LUg0L/QvtCy0LXQtNC10L3QuNC1LCDQsdC10Lcgc3RkaW4g0L/QvtC00LrQu9GO0YfQtdC90L3QvtCz0L4g0Log0YLQtdGA0LzQuNC90LDQu9GDLiIKKworIzogYnVpbHRpbi9hbS5jOjE3NjgKK21zZ2lkICJDb21taXQgQm9keSBpczoiCittc2dzdHIgItCi0LXQu9C+INC60L7QvNC80LjRgtCwOiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFt5XSwgW25dLCBbZV0sIFt2XSBhbmQgW2FdCisjLiBpbiB5b3VyIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2gKKyMuIGlucHV0IGF0IHRoaXMgcG9pbnQuCisjOiBidWlsdGluL2FtLmM6MTc3OAorbXNnaWQgIkFwcGx5PyBbeV1lcy9bbl1vL1tlXWRpdC9bdl1pZXcgcGF0Y2gvW2FdY2NlcHQgYWxsOiAiCittc2dzdHIgItCf0YDQuNC80LXQvdC40YLRjD8gW3ldIC0g0LTQsC9bbl0gLSDQvdC10YIvW2VdIC0g0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwvW3ZdIC0g0L/RgNC+0YHQvNC+0YLRgNC10YLRjCDQv9Cw0YLRhy9bYV0gLSDQv9GA0LjQvNC10L3QuNGC0Ywg0LLRgdGROiAiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAi0JjQvdC00LXQutGBINC90LUg0L/Rg9GB0YLQvtC5OiDQvdC10LvRjNC30Y8g0L/RgNC40LzQtdC90Y/RgtGMINC/0LDRgtGH0LggKNCyINC40L3QtNC10LrRgdC1OiAlcykiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODYzIGJ1aWx0aW4vYW0uYzoxOTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nOiAlLipzIgorbXNnc3RyICLQn9GA0LjQvNC10L3QtdC90LjQtTogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE4NzkKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgItCd0LXRgiDQuNC30LzQtdC90LXQvdC40Lkg4oCUINCf0LDRgtGHINGD0LbQtSDQv9GA0LjQvNC10L3QtdC9LiIKKworIzogYnVpbHRpbi9hbS5jOjE4ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICVzICUuKnMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQv9GA0LjQvNC10L3QtdC90LjRjyDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCAlcyAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTg5MworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY29weSBvZiB0aGUgcGF0Y2ggdGhhdCBmYWlsZWQgaXMgZm91bmQgaW46ICVzIgorbXNnc3RyICLQmtC+0L/QuNGOINC40LfQvNC10L3QtdC90LjQuSwg0LrQvtGC0L7RgNGL0LUg0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0LjQvNC10L3QuNGC0YwsINCy0Ysg0LzQvtC20LXRgtC1INC90LDQudGC0Lgg0LI6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTkzNworbXNnaWQgIiIKKyJObyBjaGFuZ2VzIC0gZGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz9cbiIKKyJJZiB0aGVyZSBpcyBub3RoaW5nIGxlZnQgdG8gc3RhZ2UsIGNoYW5jZXMgYXJlIHRoYXQgc29tZXRoaW5nIGVsc2VcbiIKKyJhbHJlYWR5IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlczsgeW91IG1pZ2h0IHdhbnQgdG8gc2tpcCB0aGlzIHBhdGNoLiIKK21zZ3N0ciAi0J3QtdGCINC40LfQvNC10L3QtdC90LjQuSDigJQg0LLQvtC30LzQvtC20L3Qviwg0LLRiyDQt9Cw0LHRi9C70Lgg0LLRi9C30LLQsNGC0YwgwqtnaXQgYWRkwrs/XG7QldGB0LvQuCDQvdC40YfQtdCz0L4g0L3QtSDQvtGB0YLQsNC70L7RgdGMINC00LvRjyDQuNC90LTQtdC60YHQsNGG0LjQuCwg0YLQviwg0YHQutC+0YDQtdC1INCy0YHQtdCz0L4sINGH0YLQvi3RgtC+INC00YDRg9Cz0L7QtSDRg9C20LUg0YHQtNC10LvQsNC70L4g0YLQtSDQttC1INC40LfQvNC10L3QtdC90LjRjzsg0LLQvtC30LzQvtC20L3Qviwg0LLQsNC8INGB0LvQtdC00YPQtdGCINC/0YDQvtC/0YPRgdGC0LjRgtGMINGN0YLQvtGCINC/0LDRgtGHLiIKKworIzogYnVpbHRpbi9hbS5jOjE5NDQKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJEaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnPyIKK21zZ3N0ciAi0KMg0LLQsNGBINCy0YHQtSDQtdGJ0LUg0LjQvNC10Y7RgtGB0Y8g0L3QtSDRgdC70LjRgtGL0LUg0L/Rg9GC0Lgg0LIg0LjQvdC00LXQutGB0LUuXG7QktC+0LfQvNC+0LbQvdC+LCDQstGLINC30LDQsdGL0LvQuCDQstGL0LfQstCw0YLRjCDCq2dpdCBhZGTCuz8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDUyIGJ1aWx0aW4vYW0uYzoyMDU2IGJ1aWx0aW4vYW0uYzoyMDY4IGJ1aWx0aW4vcmVzZXQuYzozMDgKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0L7QsdGK0LXQutGCIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTA0Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YfQuNGB0YLQuNGC0Ywg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL2FtLmM6MjEzOAorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICLQn9C+0YXQvtC20LUsINGH0YLQviDQstGLINC/0LXRgNC10LzQtdGB0YLQuNC70LggSEVBRCDRgSDQvNC+0LzQtdC90YLQsCDQv9C+0YHQu9C10LTQvdC10Lkg0L7RiNC40LHQutC4INCy0YvQv9C+0LvQvdC10L3QuNGPIMKrYW3Cuy5cbtCf0LXRgNC10LzQvtGC0LrQsCDQvdCwIE9SSUdfSEVBRCDQvdC1INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LTQu9GPIC0tcGF0Y2gtZm9ybWF0OiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjIyMjEKK21zZ2lkICJnaXQgYW0gW29wdGlvbnNdIFsoPG1ib3g+fDxNYWlsZGlyPikuLi5dIgorbXNnc3RyICJnaXQgYW0gW9C+0L/RhtC40LhdIFsoPG1ib3g+fDxNYWlsZGlyPinigKZdIgorCisjOiBidWlsdGluL2FtLmM6MjIyMgorbXNnaWQgImdpdCBhbSBbb3B0aW9uc10gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKK21zZ3N0ciAiZ2l0IGFtIFvQvtC/0YbQuNC4XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjIyOAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICLQt9Cw0L/Rg9GB0YLQuNGC0Ywg0LIg0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+0Lwg0YDQtdC20LjQvNC1IgorCisjOiBidWlsdGluL2FtLmM6MjIzMAorbXNnaWQgImhpc3RvcmljYWwgb3B0aW9uIC0tIG5vLW9wIgorbXNnc3RyICLQuNGB0YLQvtGA0LjRh9C10YHQutCw0Y8g0L7Qv9GG0LjRjyDigJQg0L3QuNGH0LXQs9C+INC90LUg0LTQtdC70LDQtdGCIgorCisjOiBidWlsdGluL2FtLmM6MjIzMgorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0L7RgtC60LDRgtC40YLRjNGB0Y8g0Log0YLRgNC10YXRhdC+0LTQvtCy0L7QvNGDINGB0LvQuNGP0L3QuNGOLCDQtdGB0LvQuCDQvdGD0LbQvdC+IgorCisjOiBidWlsdGluL2FtLmM6MjIzMyBidWlsdGluL2luaXQtZGIuYzo1MDkgYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NworIzogYnVpbHRpbi9yZXBhY2suYzoxNzEKK21zZ2lkICJiZSBxdWlldCIKK21zZ3N0ciAi0YLQuNGF0LjQuSDRgNC10LbQuNC8IgorCisjOiBidWlsdGluL2FtLmM6MjIzNQorbXNnaWQgImFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0YHRgtGA0L7QutGDIFNpZ25lZC1vZmYtYnkg0Log0YHQvtC+0LHRidC10L3QuNGOINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2FtLmM6MjIzOAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICLQv9C10YDQtdC60L7QtNC40YDQvtCy0LDRgtGMINCyIHV0ZjggKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9hbS5jOjIyNDAKK21zZ2lkICJwYXNzIC1rIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICLQv9C10YDQtdC00LDRgtGMINGE0LvQsNCzIC1rINCyIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDIKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICLQv9C10YDQtdC00LDRgtGMINGE0LvQsNCzIC1iINCyIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDQKK21zZ2lkICJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICLQv9C10YDQtdC00LDRgtGMINGE0LvQsNCzIC1tINCyIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDYKK21zZ2lkICJwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgZm9yIG1ib3ggZm9ybWF0IgorbXNnc3RyICLQv9C10YDQtdC00LDRgtGMINGE0LvQsNCzIC0ta2VlcC1jciDQsiBnaXQtbWFpbHNwbGl0INC00LvRjyDRhNC+0YDQvNCw0YLQsCBtYm94IgorCisjOiBidWlsdGluL2FtLmM6MjI0OQorbXNnaWQgImRvIG5vdCBwYXNzIC0ta2VlcC1jciBmbGFnIHRvIGdpdC1tYWlsc3BsaXQgaW5kZXBlbmRlbnQgb2YgYW0ua2VlcGNyIgorbXNnc3RyICLQvdC1INC/0LXRgNC10LTQsNCy0LDRgtGMIC0ta2VlcC1jciDRhNC70LDQsyDQsiBnaXQtbWFpbHNwbGl0INCy0L3QtSDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC4INC+0YIgYW0ua2VlcGNyIgorCisjOiBidWlsdGluL2FtLmM6MjI1MgorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAi0L7QsdGA0LXQt9Cw0YLRjCDQstGB0LUg0LTQviDRgdGC0YDQvtC60Lgg0L7QsdGA0LXQt9C60LgiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUzIGJ1aWx0aW4vYXBwbHkuYzo0NTYzCittc2dpZCAiYWN0aW9uIgorbXNnc3RyICLQtNC10LnRgdGC0LLQuNC1IgorCisjOiBidWlsdGluL2FtLmM6MjI1NCBidWlsdGluL2FtLmM6MjI1NyBidWlsdGluL2FtLmM6MjI2MCBidWlsdGluL2FtLmM6MjI2MworIzogYnVpbHRpbi9hbS5jOjIyNjYgYnVpbHRpbi9hbS5jOjIyNjkgYnVpbHRpbi9hbS5jOjIyNzIgYnVpbHRpbi9hbS5jOjIyNzUKKyM6IGJ1aWx0aW4vYW0uYzoyMjgxCittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0YLRjCDQtdCz0L4g0LIgZ2l0LWFwcGx5IgorCisjOiBidWlsdGluL2FtLmM6MjI2MiBidWlsdGluL2FwcGx5LmM6NDU4NworbXNnaWQgInJvb3QiCittc2dzdHIgItC60L7RgNC10L3RjCIKKworIzogYnVpbHRpbi9hbS5jOjIyNjUgYnVpbHRpbi9hbS5jOjIyNjggYnVpbHRpbi9hcHBseS5jOjQ1MjUKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTI4IGJ1aWx0aW4vY2xvbmUuYzo4NSBidWlsdGluL2ZldGNoLmM6OTMKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2NworbXNnaWQgInBhdGgiCittc2dzdHIgItC/0YPRgtGMIgorCisjOiBidWlsdGluL2FtLmM6MjI3MSBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NjkgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcyCisjOiBidWlsdGluL2dyZXAuYzo2OTggYnVpbHRpbi9tZXJnZS5jOjE5OCBidWlsdGluL3B1bGwuYzoxMjcKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc4IGJ1aWx0aW4vcmVwYWNrLmM6MTgyIGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjQKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODAgYnVpbHRpbi90YWcuYzo1OTEgcGFyc2Utb3B0aW9ucy5oOjEzMgorIzogcGFyc2Utb3B0aW9ucy5oOjEzNCBwYXJzZS1vcHRpb25zLmg6MjQzCittc2dpZCAibiIKK21zZ3N0ciAibiIKKworIzogYnVpbHRpbi9hbS5jOjIyNzQgYnVpbHRpbi9hcHBseS5jOjQ1MzEKK21zZ2lkICJudW0iCittc2dzdHIgItC60L7Qu9C40YfQtdGB0YLQstC+IgorCisjOiBidWlsdGluL2FtLmM6MjI3NyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0IGJ1aWx0aW4vcmVwbGFjZS5jOjQzOAorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCIgorCisjOiBidWlsdGluL2FtLmM6MjI3OAorbXNnaWQgImZvcm1hdCB0aGUgcGF0Y2goZXMpIGFyZSBpbiIKK21zZ3N0ciAi0YTQvtGA0LzQsNGCLCDQsiDQutC+0YLQvtGA0L7QvCDQvdCw0YXQvtC00Y/RgtGB0Y8g0L/QsNGC0YfQuCIKKworIzogYnVpbHRpbi9hbS5jOjIyODQKK21zZ2lkICJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiCittc2dzdHIgItC/0LXRgNC10L7Qv9GA0LXQtNC10LvQuNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC+0LEg0L7RiNC40LHQutC1LCDQtdGB0LvQuCDQvdC1INGD0LTQsNC70L7RgdGMINC90LDQu9C+0LbQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBidWlsdGluL2FtLmM6MjI4NgorbXNnaWQgImNvbnRpbnVlIGFwcGx5aW5nIHBhdGNoZXMgYWZ0ZXIgcmVzb2x2aW5nIGEgY29uZmxpY3QiCittc2dzdHIgItC/0YDQvtC00L7Qu9C20LjRgtGMINC/0YDQuNC80LXQvdC10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQv9C+0YHQu9C1INGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LjQu9C40LrRgtCwIgorCisjOiBidWlsdGluL2FtLmM6MjI4OQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICLRgdC40L3QvtC90LjQvNGLINC00LvRjyAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL2FtLmM6MjI5MgorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgItC/0YDQvtC/0YPRgdGC0LjRgtGMINGC0LXQutGD0YnQuNC5INC/0LDRgtGHIgorCisjOiBidWlsdGluL2FtLmM6MjI5NQorbXNnaWQgInJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbi4iCittc2dzdHIgItCy0L7RgdGB0YLQsNC90L7QstC40YLRjCDQvtGA0LjQs9C40L3QsNC70YzQvdGD0Y4g0LLQtdGC0LrRgyDQuCDQvtGC0LzQtdC90LjRgtGMINC+0L/QtdGA0LDRhtC40Y4g0L/RgNC40LzQtdC90LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5LiIKKworIzogYnVpbHRpbi9hbS5jOjIyOTkKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgItGB0L7QstGA0LDRgtGMINC+INC00LDRgtC1INC60L7QvNC80LjRgtC10YDQsCIKKworIzogYnVpbHRpbi9hbS5jOjIzMDEKK21zZ2lkICJ1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQtdC60YPRidC10LUg0LLRgNC10LzRjyDQutCw0Log0LLRgNC10LzRjyDQsNCy0YLQvtGA0YHRgtCy0LAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzAzIGJ1aWx0aW4vY29tbWl0LmM6MTU5MCBidWlsdGluL21lcmdlLmM6MjI1CisjOiBidWlsdGluL3B1bGwuYzoxNTUgYnVpbHRpbi9yZXZlcnQuYzo5MiBidWlsdGluL3RhZy5jOjYwNgorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAia2V5LWlkIgorCisjOiBidWlsdGluL2FtLmM6MjMwNAorbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgItC/0L7QtNC/0LjRgdCw0YLRjCDQutC+0LzQvNC40YLRiyDRgSDQv9C+0LzQvtGJ0YzRjiBHUEciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzA3Cittc2dpZCAiKGludGVybmFsIHVzZSBmb3IgZ2l0LXJlYmFzZSkiCittc2dzdHIgIijQstC90YPRgtGA0LXQvdC90LXQtSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtSDQtNC70Y8gZ2l0LXJlYmFzZSkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzIyCittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICLQntC/0YbQuNGPIC1iLy0tYmluYXJ5INGD0LbQtSDQtNC+0LvQs9C+0LUg0LLRgNC10LzRjyDQvdC40YfQtdCz0L4g0L3QtSDQtNC10LvQsNC10YIg0Lgg0LHRg9C00LXRgiDRg9C00LDQu9C10L3QsCDRgSDRgdC70LXQtNGD0Y7RidC40YUg0LLQtdGA0YHQuNGP0YUgR2l0LiDQn9C+0LbQsNC70YPQudGB0YLQsCwg0L3QtSDQuNGB0L/QvtC70YzQt9GD0LnRgtC1INC10LUuIgorCisjOiBidWlsdGluL2FtLmM6MjMyOQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAi0YHQsdC+0Lkg0YfRgtC10L3QuNGPINC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2FtLmM6MjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgItC/0YDQtdC00YvQtNGD0YnQuNC5INC60LDRgtCw0LvQvtCzINC/0LXRgNC10LzQtdGJ0LXQvdC40Y8gJXMg0LXRidC1INGB0YPRidC10YHRgtCy0YPQtdGCLCDQvdC+INC/0LXRgNC10LTQsNC9IG1ib3guIgorCisjOiBidWlsdGluL2FtLmM6MjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAi0J3QsNC50LTQtdC9INC30LDQsdGL0YLRi9C5INC60LDRgtCw0LvQvtCzICVzLlxu0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq2dpdCBhbSAtLWFib3J0wrssINGH0YLQvtCx0Ysg0YPQtNCw0LvQuNGC0Ywg0LXQs9C+LiIKKworIzogYnVpbHRpbi9hbS5jOjIzNzQKK21zZ2lkICJSZXNvbHZlIG9wZXJhdGlvbiBub3QgaW4gcHJvZ3Jlc3MsIHdlIGFyZSBub3QgcmVzdW1pbmcuIgorbXNnc3RyICLQntC/0LXRgNCw0YbQuNGPINGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LvQuNC60YLQvtCyINC90LUg0LIg0L/RgNC+0YbQtdGB0YHQtSDQstGL0L/QvtC70L3QtdC90LjRjywg0L3QtSDQv9GA0L7QtNC+0LvQttCw0LXQvC4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo1OQorbXNnaWQgImdpdCBhcHBseSBbPG9wdGlvbnM+XSBbPHBhdGNoPi4uLl0iCittc2dzdHIgImdpdCBhcHBseSBbPNC+0L/RhtC40Lg+XSBbPNC/0LDRgtGHPuKApl0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIHdoaXRlc3BhY2Ugb3B0aW9uICclcyciCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90LDRjyDQvtC/0YbQuNGPINC00LvRjyDQv9GA0L7QsdC10LvQvtCyIMKrJXPCuyIKKworIzogYnVpbHRpbi9hcHBseS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90LDRjyDQvtC/0YbQuNGPINC00LvRjyDQuNCz0L3QvtGA0LjRgNC+0LLQsNC90LjRjyDQv9GA0L7QsdC10LvQvtCyIMKrJXPCuyIKKworIzogYnVpbHRpbi9hcHBseS5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0L7QtNCz0L7RgtC+0LLQuNGC0Ywg0YDQtdCz0YPQu9GP0YDQvdC+0LUg0LLRi9GA0LDQttC10L3QuNC1INC00LvRjyDQvNC10YLQutC4INCy0YDQtdC80LXQvdC4ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6ODMxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZ2V4ZWMgcmV0dXJuZWQgJWQgZm9yIGlucHV0OiAlcyIKK21zZ3N0ciAicmVnZXhlYyDQstC+0LfQstGA0LDRgtC40LsgJWQg0LTQu9GPINCy0LLQvtC00LA6ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDQuNC80Y8g0YTQsNC50LvQsCDQsiDRgdGC0YDQvtC60LUg0L/QsNGC0YfQsCAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTog0L/Qu9C+0YXQvtC5IGdpdC1kaWZmIOKAlCDQvtC20LjQtNCw0LvQvtGB0YwgL2Rldi9udWxsLCDQv9C+0LvRg9GH0LXQvdC+ICVzINC90LAg0YHRgtGA0L7QutC1ICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG5ldyBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6INC/0LvQvtGF0L7QuSBnaXQtZGlmZiDigJQg0L3QtSDRgdC+0LPQu9Cw0YHRg9GO0YnQtdC10YHRjyDQvdC+0LLQvtC1INC40LzRjyDRhNCw0LnQu9CwINC90LAg0YHRgtGA0L7QutC1ICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6INC/0LvQvtGF0L7QuSBnaXQtZGlmZiDigJQg0L3QtSDRgdC+0LPQu9Cw0YHRg9GO0YnQtdC10YHRjyDRgdGC0LDRgNC+0LUg0LjQvNGPINGE0LDQudC70LAg0L3QsCDRgdGC0YDQvtC60LUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiDQv9C70L7RhdC+0LkgZ2l0LWRpZmYgIOKAlCDQvtC20LjQtNCw0LvQvtGB0YwgL2Rldi9udWxsINC90LAg0YHRgtGA0L7QutC1ICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgInJlY291bnQ6INC90LUg0L7QttC40LTQsNC10LzQsNGPINGB0YLRgNC+0LrQsDogJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAi0YTRgNCw0LPQvNC10L3RgiDQuNC30LzQtdC90LXQvdC40Lkg0LHQtdC3INC30LDQs9C+0LvQvtCy0LrQsCDQvdCwINGB0YLRgNC+0LrQtSAlZDogJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUiCisiIGNvbXBvbmVudCAobGluZSAlZCkiCittc2dpZF9wbHVyYWwgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lIgorIiBjb21wb25lbnRzIChsaW5lICVkKSIKK21zZ3N0clswXSAi0LfQsNCz0L7Qu9C+0LLQvtC6IGdpdCBkaWZmINC90LUg0L3QsNGI0LXQuyDQuNC90YTQvtGA0LzQsNGG0LjRjiDQvtCxINC40LzQtdC90Lgg0YTQsNC50LvQsCDQv9GA0Lgg0YPQtNCw0LvQtdC90LjQuCAlZCDQstC10LTRg9GJ0LXQs9C+INC60L7QvNC/0L7QvdC10L3RgtCwINC/0YPRgtC4INC6INGE0LDQudC70YMgKNGB0YLRgNC+0LrQsCAlZCkiCittc2dzdHJbMV0gItC30LDQs9C+0LvQvtCy0L7QuiBnaXQgZGlmZiDQvdC1INC90LDRiNC10Lsg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDQuNC80LXQvdC4INGE0LDQudC70LAg0L/RgNC4INGD0LTQsNC70LXQvdC40LggJWQg0LLQtdC00YPRidC40YUg0LrQvtC80L/QvtC90LXQvdGCINC/0YPRgtC4INC6INGE0LDQudC70YMgKNGB0YLRgNC+0LrQsCAlZCkiCittc2dzdHJbMl0gItC30LDQs9C+0LvQvtCy0L7QuiBnaXQgZGlmZiDQvdC1INC90LDRiNC10Lsg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDQuNC80LXQvdC4INGE0LDQudC70LAg0L/RgNC4INGD0LTQsNC70LXQvdC40LggJWQg0LLQtdC00YPRidC40YUg0LrQvtC80L/QvtC90LXQvdGCINC/0YPRgtC4INC6INGE0LDQudC70YMgKNGB0YLRgNC+0LrQsCAlZCkiCittc2dzdHJbM10gItC30LDQs9C+0LvQvtCy0L7QuiBnaXQgZGlmZiDQvdC1INC90LDRiNC10Lsg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L7QsSDQuNC80LXQvdC4INGE0LDQudC70LAg0L/RgNC4INGD0LTQsNC70LXQvdC40LggJWQg0LLQtdC00YPRidC40YUg0LrQvtC80L/QvtC90LXQvdGCINC/0YPRgtC4INC6INGE0LDQudC70YMgKNGB0YLRgNC+0LrQsCAlZCkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjU5Cittc2dpZCAibmV3IGZpbGUgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgItC90L7QstGL0Lkg0YTQsNC50Lsg0LfQsNCy0LjRgdC40YIg0L7RgiDRgdGC0LDRgNC+0LPQviDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+IgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY2MQorbXNnaWQgImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgItGD0LTQsNC70LXQvdC90YvQuSDRhNCw0LnQuyDQstGB0LUg0LXRidC1INC40LzQtdC10YIg0YHQvtC00LXRgNC20LjQvNC+0LUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAi0L/QsNGC0Ycg0L/QvtCy0YDQtdC20LTQtdC9INC90LAg0YHRgtGA0L7QutC1ICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyMworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgZmlsZSAlcyBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAi0L3QvtCy0YvQuSDRhNCw0LnQuyAlcyDQt9Cw0LLQuNGB0LjRgiDQvtGCINGB0YLQsNGA0L7Qs9C+INGB0L7QtNC10YDQttC40LzQvtCz0L4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgItGD0LTQsNC70LXQvdC90YvQuSDRhNCw0LnQuyAlcyDQstGB0LUg0LXRidC1INC40LzQtdC10YIg0YHQvtC00LXRgNC20LjQvNC+0LUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNzI4CisjLCBjLWZvcm1hdAorbXNnaWQgIioqIHdhcm5pbmc6IGZpbGUgJXMgYmVjb21lcyBlbXB0eSBidXQgaXMgbm90IGRlbGV0ZWQiCittc2dzdHIgIioqINC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INGE0LDQudC7ICVzINGB0YLQsNC90L7QstC40YLRgdGPINC/0YPRgdGC0YvQvCwg0L3QviDQvdC1INGD0LTQsNC70Y/QtdGC0YHRjyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAi0L/QvtCy0YDQtdC20LTQtdC90L3Ri9C5INC00LLQvtC40YfQvdGL0Lkg0L/QsNGC0Ycg0L3QsCDRgdGC0YDQvtC60LUgJWQ6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxOTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAi0L3QtdC+0L/QvtC30L3QsNC90L3Ri9C5INC00LLQvtC40YfQvdGL0Lkg0L/QsNGC0Ycg0L3QsCDRgdGC0YDQvtC60LUgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIHdpdGggb25seSBnYXJiYWdlIGF0IGxpbmUgJWQiCittc2dzdHIgItC/0LDRgtGHINGBINC80YPRgdC+0YDQvtC8INC90LAg0YHRgtGA0L7QutC1ICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRgdC40LzQstC+0LvRjNC90YPRjiDRgdGB0YvQu9C60YMgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0LjQu9C4INC/0YDQvtGH0LXRgdGC0YwgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC1INC90LDRh9Cw0LvQviDRgdGC0YDQvtC60Lg6IMKrJWPCuyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVuayAjJWQgc3VjY2VlZGVkIGF0ICVkIChvZmZzZXQgJWQgbGluZSkuIgorbXNnaWRfcGx1cmFsICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lcykuIgorbXNnc3RyWzBdICLQp9Cw0YHRgtGMICMlZCDRg9GB0L/QtdGI0L3QviDQv9GA0LjQvNC10L3QtdC90LAg0L3QsCAlZCAo0YHQviDRgdC00LLQuNCz0L7QvCDQsiAlZCDRgdGC0YDQvtC60YMpLiIKK21zZ3N0clsxXSAi0KfQsNGB0YLRjCAjJWQg0YPRgdC/0LXRiNC90L4g0L/RgNC40LzQtdC90LXQvdCwINC90LAgJWQgKNGB0L4g0YHQtNCy0LjQs9C+0Lwg0LIgJWQg0YHRgtGA0L7QutC4KS4iCittc2dzdHJbMl0gItCn0LDRgdGC0YwgIyVkINGD0YHQv9C10YjQvdC+INC/0YDQuNC80LXQvdC10L3QsCDQvdCwICVkICjRgdC+INGB0LTQstC40LPQvtC8INCyICVkINGB0YLRgNC+0LopLiIKK21zZ3N0clszXSAi0KfQsNGB0YLRjCAjJWQg0YPRgdC/0LXRiNC90L4g0L/RgNC40LzQtdC90LXQvdCwINC90LAgJWQgKNGB0L4g0YHQtNCy0LjQs9C+0Lwg0LIgJWQg0YHRgtGA0L7QuikuIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICLQmtC+0L3RgtC10LrRgdGCINGB0YPQttC10L0g0LTQviAoJWxkLyVsZCksINGH0YLQvtCx0Ysg0L/RgNC40LzQtdC90LjRgtGMINGE0YDQsNCz0LzQtdC90YIg0L3QsCAlZCDRgdGC0YDQvtC60LUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgItC/0YDQuCDQv9C+0LjRgdC60LU6XG4lLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICLQv9GA0L7Qv9GD0YnQtdC90Ysg0LTQsNC90L3Ri9C1INC00LLQvtC40YfQvdC+0LPQviDQv9Cw0YLRh9CwINC00LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDM5CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCBkb2VzIG5vdCBhcHBseSB0byAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQuNC80LXQvdC40YLRjCDQtNCy0L7QuNGH0L3Ri9C5INC/0LDRgtGHINC6IMKrJXPCuyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgItC/0L7RgdC70LUg0L/RgNC40LzQtdC90LXQvdC40Y8g0LTQstC+0LjRh9C90L7Qs9C+INC/0LDRgtGH0LAg0LTQu9GPIMKrJXPCuyDQsdGL0Lsg0L/QvtC70YPRh9C10L0g0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGA0LXQt9GD0LvRjNGC0LDRgiAo0L7QttC40LTQsNC70L7RgdGMICVzLCDQv9C+0LvRg9GH0LXQvdC+ICVzKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQv9GA0LjQvNC10L3QtdC90LjRjyDQuNC30LzQtdC90LXQvdC40Lk6ICVzOiVsZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjMxOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZWNrb3V0ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LnRgtC4INC90LAgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjM1IGJ1aWx0aW4vYXBwbHkuYzozMjQ2IGJ1aWx0aW4vYXBwbHkuYzozMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWQgb2YgJXMgZmFpbGVkIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0YfRgtC10L3QuNGPICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI0MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLRh9GC0LXQvdC40LUg0LjQtyDCqyVzwrsg0LfQsCDRgdC40LzQstC+0LvQuNGH0LXRgdC60L7QuSDRgdGB0YvQu9C60L7QuSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNzEgYnVpbHRpbi9hcHBseS5jOjM0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgItC/0YPRgtGMICVzINCx0YvQuyDQv9C10YDQtdC40LzQtdC90L7QstCw0L0v0YPQtNCw0LvQtdC9IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM1MiBidWlsdGluL2FwcGx5LmM6MzUwNworIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgZXhpc3QgaW4gaW5kZXgiCittc2dzdHIgIiVzOiDQvdC10YIg0LIg0LjQvdC00LXQutGB0LUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzU2IGJ1aWx0aW4vYXBwbHkuYzozNDk5IGJ1aWx0aW4vYXBwbHkuYzozNTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyIKK21zZ3N0ciAiJXM6ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM2MSBidWlsdGluL2FwcGx5LmM6MzUxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzOiDQvdC1INGB0L7QstC/0LDQtNCw0LXRgiDRgSDQuNC90LTQtdC60YHQvtC8IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzQ2MworbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgItC/0LDRgtGHINGD0LTQsNC70LXQvdC40Y8g0L3QtSDRg9C00LDQu9C40Lsg0YHQvtC00LXRgNC20LjQvNC+0LUg0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHdyb25nIHR5cGUiCittc2dzdHIgIiVzOiDQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YLQuNC/IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBoYXMgdHlwZSAlbywgZXhwZWN0ZWQgJW8iCittc2dzdHIgIiVzINC40LzQtdC10YIg0YLQuNC/ICVvLCDQsCDQvtC20LjQtNCw0LvRgdGPICVvIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzY5MyBidWlsdGluL2FwcGx5LmM6MzY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHBhdGggJyVzJyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INC/0YPRgtGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlczog0YPQttC1INGB0L7QtNC10YDQttC40YLRgdGPINCyINC40L3QtNC10LrRgdC1IgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc1MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVzOiDRg9C20LUg0YHQvtC00LXRgNC20LjRgtGB0Y8g0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICLQvdC+0LLRi9C5INGA0LXQttC40Lwg0LTQvtGB0YLRg9C/0LAgKCVvKSDQtNC70Y8gJXMg0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgdGC0LDRgNC+0LzRgyDRgNC10LbQuNC80YMg0LTQvtGB0YLRg9C/0LAgKCVvKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICLQvdC+0LLRi9C5INGA0LXQttC40Lwg0LTQvtGB0YLRg9C/0LAgKCVvKSDQtNC70Y8gJXMg0L3QtSDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0LXRgiDRgdGC0LDRgNC+0LzRgyDRgNC10LbQuNC80YMg0LTQvtGB0YLRg9C/0LAgKCVvKSDQtNC70Y8gJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLQt9Cw0YLRgNC+0L3Rg9GC0YvQuSDRhNCw0LnQuyDCqyVzwrsg0L3QsNGF0L7QtNC40YLRgdGPINC30LAg0YHQuNC80LLQvtC70LjRh9C10YHQutC+0Lkg0YHRgdGL0LvQutC+0LkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXM6INC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC40LzQtdC90LjRgtGMINC/0LDRgtGHIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzgxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyBwYXRjaCAlcy4uLiIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQv9Cw0YLRh9CwICVz4oCmIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzkwOSBidWlsdGluL2NoZWNrb3V0LmM6MjMyIGJ1aWx0aW4vcmVzZXQuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAi0YHQsdC+0LkgbWFrZV9jYWNoZV9lbnRyeSDQtNC70Y8g0L/Rg9GC0Lggwqslc8K7IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0YwgJXMg0LjQtyDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICLQv9C+0LLRgNC10LbQtNC10L3QvdGL0Lkg0L/QsNGC0Ycg0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXQgbmV3bHkgY3JlYXRlZCBmaWxlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHN0YXQg0LTQu9GPINGB0L7Qt9C00LDQvdC90L7Qs9C+INGE0LDQudC70LAgwqslc8K7IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQstGB0L/QvtC80L7Qs9Cw0YLQtdC70YzQvdGL0Lkg0YTQsNC50Lsg0LTQu9GPINGB0L7Qt9C00LDQvdC90L7Qs9C+INGE0LDQudC70LAgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDkzIGJ1aWx0aW4vYXBwbHkuYzo0MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC30LDQv9C40YHRjCDQsiDQutGN0YjQtSDQtNC70Y8gJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICLQt9Cw0LrRgNGL0YLQuNC1INGE0LDQudC70LAgwqslc8K7IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDRhNCw0LnQuyDCqyVzwrsg0YEg0YDQtdC20LjQvNC+0Lwg0LTQvtGB0YLRg9C/0LAgJW8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGxpZWQgcGF0Y2ggJXMgY2xlYW5seS4iCittc2dzdHIgItCf0LDRgtGHICVzINC/0YDQuNC80LXQvdC10L0g0LHQtdC3INC+0YjQuNCx0L7Qui4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjcwCittc2dpZCAiaW50ZXJuYWwgZXJyb3IiCittc2dzdHIgItCy0L3Rg9GC0YDQtdC90L3Rj9GPINC+0YjQuNCx0LrQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICLQn9GA0LjQvNC10L3QtdC90LjQtSDQv9Cw0YLRh9CwICUlcyDRgSAlZCDQvtGC0LrQsNC30L7QvOKApiIKK21zZ3N0clsxXSAi0J/RgNC40LzQtdC90LXQvdC40LUg0L/QsNGC0YfQsCAlJXMg0YEgJWQg0L7RgtC60LDQt9Cw0LzQuOKApiIKK21zZ3N0clsyXSAi0J/RgNC40LzQtdC90LXQvdC40LUg0L/QsNGC0YfQsCAlJXMg0YEgJWQg0L7RgtC60LDQt9Cw0LzQuOKApiIKK21zZ3N0clszXSAi0J/RgNC40LzQtdC90LXQvdC40LUg0L/QsNGC0YfQsCAlJXMg0YEgJWQg0L7RgtC60LDQt9Cw0LzQuOKApiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICLRg9GB0LXRh9C10L3QuNC1INC40LzQtdC90LggLnJlaiDRhNCw0LnQu9CwINC00L4gJS4qcy5yZWoiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgItCR0LvQvtC6IOKEliVkINC/0YDQuNC80LXQvdC10L0g0LHQtdC3INC+0YjQuNCx0L7Qui4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAi0JHQu9C+0Log4oSWJWQg0L7RgtC60LvQvtC90LXQvS4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0Mzk3Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICLQvdC1INGA0LDRgdC/0L7Qt9C90LDQvdC90YvQuSDQstCy0L7QtCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ0MDgKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MjYKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLQvdC1INC/0YDQuNC80LXQvdGP0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0L/QviDRg9C60LDQt9Cw0L3QvdC+0LzRgyDQv9GD0YLQuCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MjkKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICLQv9GA0LjQvNC10L3Rj9GC0Ywg0LjQt9C80LXQvdC10L3QuNGPINC/0L4g0YPQutCw0LfQsNC90L3QvtC80YMg0L/Rg9GC0LgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTMyCittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgItGD0LTQsNC70LjRgtGMIDzQutC+0LvQuNGH0LXRgdGC0LLQvj4g0LLQtdC00YPRidC40YUg0LrQvtGB0YvRhSDRh9C10YDRgiDQuNC3INGC0YDQsNC00LjRhtC40L7QvdC90YvRhSDQv9GD0YLQtdC5INGB0L/QuNGB0LrQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTM1Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC00L7QsdCw0LLQu9C10L3QuNGPLCDRgdC00LXQu9Cw0L3QvdGL0LUg0Y3RgtC40Lwg0L/QsNGC0YfQtdC8IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUzNworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAi0LLQvNC10YHRgtC+INC/0YDQuNC80LXQvdC10L3QuNGPINC/0LDRgtGH0LAg0LLRi9Cy0LXRgdGC0Lgg0YHRgtCw0YLQuNGB0YLQuNC60YMg0LTQvtCx0LDQstC70LXQvdC40Lkg0Lgg0YPQtNCw0LvQtdC90LjQuSDQtNC70Y8g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDEKK21zZ2lkICJzaG93IG51bWJlciBvZiBhZGRlZCBhbmQgZGVsZXRlZCBsaW5lcyBpbiBkZWNpbWFsIG5vdGF0aW9uIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC60L7Qu9C40YfQtdGB0YLQstC+INC00L7QsdCw0LLQu9C10L3QvdGL0YUg0Lgg0YPQtNCw0LvQtdC90L3Ri9GFINGB0YLRgNC+0Log0LIg0LTQtdGB0Y/RgtC40YfQvdC+0Lwg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAi0LLQvNC10YHRgtC+INC/0YDQuNC80LXQvdC10L3QuNGPINC/0LDRgtGH0LAg0LLRi9Cy0LXRgdGC0Lgg0YHRgtCw0YLQuNGB0YLQuNC60YMg0LjQt9C80LXQvdC10L3QuNC5INC00LvRjyDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0NQorbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBzZWUgaWYgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUiCittc2dzdHIgItCy0LzQtdGB0YLQviDQv9GA0LjQvNC10L3QtdC90LjRjyDQv9Cw0YLRh9CwINC/0YDQvtCy0LXRgNC40YLRjCDQv9C+0LTRhdC+0LTQuNGCINC70Lgg0L7QvSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDcKK21zZ2lkICJtYWtlIHN1cmUgdGhlIHBhdGNoIGlzIGFwcGxpY2FibGUgdG8gdGhlIGN1cnJlbnQgaW5kZXgiCittc2dzdHIgItC/0YDQvtCy0LXRgNC40YLRjCwg0YfRgtC+INC/0LDRgtGHINC/0YDQuNC80LXQvdGP0LXRgtGB0Y8g0Log0YLQtdC60YPRidC10LzRgyDQuNC90LTQtdC60YHRgyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDkKK21zZ2lkICJhcHBseSBhIHBhdGNoIHdpdGhvdXQgdG91Y2hpbmcgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0L/RgNC40LzQtdC90LjRgtGMINC/0LDRgtGHLCDQvdC1INC40LfQvNC10L3Rj9GPINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1MQorbXNnaWQgImFjY2VwdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBvdXRzaWRlIHRoZSB3b3JraW5nIGFyZWEiCittc2dzdHIgItC/0YDQuNC90Y/RgtGMINC/0LDRgtGHLCDQutC+0YLQvtGA0YvQuSDQt9Cw0YLRgNCw0LPQuNCy0LDQtdGCINGE0LDQudC70Ysg0LfQsCDRgNCw0LHQvtGH0LjQvCDQutCw0YLQsNC70L7Qs9C+0LwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTUzCittc2dpZCAiYWxzbyBhcHBseSB0aGUgcGF0Y2ggKHVzZSB3aXRoIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCittc2dzdHIgItCwINGC0LDQutC20LUg0L/RgNC40LzQtdC90LjRgtGMINC/0LDRgtGHICjQuNGB0L/QvtC70YzQt9GD0LnRgtC1INGBIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTU1Cittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAi0L/QvtC/0YvRgtCw0YLRjNGB0Y8g0YHQtNC10LvQsNGC0Ywg0YLRgNC10YXRhdC+0LTQvtCy0L7QtSDRgdC70LjRj9C90LjQtSwg0LXRgdC70Lgg0L/QsNGC0Ycg0L3QtSDQv9GA0LjQvNC10L3Rj9C10YLRgdGPIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1NworbXNnaWQgImJ1aWxkIGEgdGVtcG9yYXJ5IGluZGV4IGJhc2VkIG9uIGVtYmVkZGVkIGluZGV4IGluZm9ybWF0aW9uIgorbXNnc3RyICLQv9C+0YHRgtGA0L7QuNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C5INC40L3QtNC10LrRgSwg0L7RgdC90L7QstCw0L3QvdGL0Lkg0L3QsCDQstGB0YLRgNC+0LXQvdC90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCDQvtCxINC40L3QtNC10LrRgdC1IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1OSBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTk4IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTIKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAi0L/Rg9GC0LgsINC+0YLQtNC10LvQtdC90L3Ri9C1INCd0KPQm9CV0JLQq9CcINGB0LjQvNCy0L7Qu9C+0LwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTYyCittc2dpZCAiZW5zdXJlIGF0IGxlYXN0IDxuPiBsaW5lcyBvZiBjb250ZXh0IG1hdGNoIgorbXNnc3RyICLRg9C00L7RgdGC0L7QstC10YDQuNGC0YzRgdGPLCDRh9GC0L4g0L/QviDQutGA0LDQudC90LXQuSDQvNC10YDQtSA8bj4g0YHRgtGA0L7QuiDQutC+0L3RgtC10LrRgdGC0LAg0YHQvtCy0L/QsNC00LDRjtGCIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU2NAorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICLQvtC/0YDQtdC00LXQu9GP0YLRjCDQvdC+0LLRi9C1INC40LvQuCDQvNC+0LTQuNGE0LjRhtC40YDQvtCy0LDQvdC90YvQtSDRgdGC0YDQvtC60LgsINGDINC60L7RgtC+0YDRi9GFINC10YHRgtGMINC+0YjQuNCx0LrQuCDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU2NyBidWlsdGluL2FwcGx5LmM6NDU3MAorbXNnaWQgImlnbm9yZSBjaGFuZ2VzIGluIHdoaXRlc3BhY2Ugd2hlbiBmaW5kaW5nIGNvbnRleHQiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0LIg0L/RgNC+0LHQtdC70YzQvdGL0YUg0YHQuNC80LLQvtC70LDRhSDQv9GA0Lgg0L/QvtC40YHQutC1INC60L7QvdGC0LXQutGB0YLQsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzMKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAi0L/RgNC40LzQtdC90LjRgtGMINC/0LDRgtGHINGBINC+0LHRgNCw0YnQtdC90LjQtdC8INC40LfQvNC10L3QtdC90LjQuSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzUKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAi0L3QtSDQvtC20LjQtNCw0YLRjCDQutCw0Log0LzQuNC90LjQvNGD0Lwg0L7QtNC90L7QuSDRgdGC0YDQvtC60Lgg0LrQvtC90YLQtdC60YHRgtCwIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3NworbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICLQvtGB0YLQsNCy0LjRgtGMINC+0YLQutC70L7QvdC10L3QvdGL0LUg0LHQu9C+0LrQuCDQuNC30LzQtdC90LXQvdC40Lkg0LIg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNGFICoucmVqINGE0LDQudC70LDRhSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzkKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINC/0LXRgNC10LrRgNGL0LLQsNGO0YnQuNC10YHRjyDQsdC70L7QutC4INC40LfQvNC10L3QtdC90LjQuSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODIKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINC90LXQutC+0YDRgNC10LrRgtC90L4g0L7Qv9GA0LXQtNC10LvQtdC90L3Ri9C1INC/0YDQvtC/0YPRidC10L3QvdGL0LUg0L/Rg9GB0YLRi9C1INGB0YLRgNC+0LrQuCDQsiDQutC+0L3RhtC1INGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTg1Cittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICLQvdC1INC00L7QstC10YDRj9GC0Ywg0LrQvtC70LjRh9C10YHRgtCy0YMg0YHRgtGA0L7QuiDQuNC3INC30LDQs9C+0LvQvtCy0LrQsCDQsdC70L7QutCwINC40LfQvNC10L3QtdC90LjQuSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODgKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMIDzQutC+0YDQtdC90Yw+INGB0L/QtdGA0LXQtNC4INC60L4g0LLRgdC10Lwg0LjQvNC10L3QsNC8INGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MTAKK21zZ2lkICItLTN3YXkgb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0tM3dheSDQstC90LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MTgKK21zZ2lkICItLWluZGV4IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWluZGV4INCy0L3QtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDYyMQorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCDQstC90LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2FuJ3Qgb3BlbiBwYXRjaCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINC/0LDRgtGHIMKrJXPCuyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3IiCittc2dpZF9wbHVyYWwgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9ycyIKK21zZ3N0clswXSAi0L/RgNC+0L/Rg9GJ0LXQvdCwICVkINC+0YjQuNCx0LrQsCDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFIgorbXNnc3RyWzFdICLQv9GA0L7Qv9GD0YnQtdC90L4gJWQg0L7RiNC40LHQutC4INCyINC/0YDQvtCx0LXQu9GM0L3Ri9GFINGB0LjQvNCy0L7Qu9Cw0YUiCittc2dzdHJbMl0gItC/0YDQvtC/0YPRidC10L3QviAlZCDQvtGI0LjQsdC+0Log0LIg0L/RgNC+0LHQtdC70YzQvdGL0YUg0YHQuNC80LLQvtC70LDRhSIKK21zZ3N0clszXSAi0L/RgNC+0L/Rg9GJ0LXQvdC+ICVkINC+0YjQuNCx0L7QuiDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDY2MCBidWlsdGluL2FwcGx5LmM6NDY3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCDRgdGC0YDQvtC60LAg0LTQvtCx0LDQstC40LvQsCDQvtGI0LjQsdC60Lgg0LIg0L/RgNC+0LHQtdC70YzQvdGL0YUg0YHQuNC80LLQvtC70LDRhS4iCittc2dzdHJbMV0gIiVkINGB0YLRgNC+0LrQuCDQtNC+0LHQsNCy0LjQu9C4INC+0YjQuNCx0LrQuCDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFLiIKK21zZ3N0clsyXSAiJWQg0YHRgtGA0L7QuiDQtNC+0LHQsNCy0LjQu9C4INC+0YjQuNCx0LrQuCDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFLiIKK21zZ3N0clszXSAiJWQg0YHRgtGA0L7QuiDQtNC+0LHQsNCy0LjQu9C4INC+0YjQuNCx0LrQuCDQsiDQv9GA0L7QsdC10LvRjNC90YvRhSDRgdC40LzQstC+0LvQsNGFLiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBhcmNoaXZlIGZpbGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRhNCw0LnQuyDQsNGA0YXQuNCy0LAgwqslc8K7IgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQvdCw0L/RgNCw0LLQuNGC0Ywg0LLRi9Cy0L7QtCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTog0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQsdC10LcgVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo1OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorbXNnc3RyICJnaXQgYXJjaGl2ZTog0L7QttC40LTQsNC70YHRjyBBQ0svTkFLLCDQsCDQv9C+0LvRg9GH0LXQvSBFT0YiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogTkFDSyAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlIGVycm9yOiAlcyIKK21zZ3N0ciAi0L7RiNC40LHQutCwINCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjzogJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IHByb3RvY29sIGVycm9yIgorbXNnc3RyICJnaXQgYXJjaGl2ZTog0L7RiNC40LHQutCwINC/0YDQvtGC0L7QutC+0LvQsCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6INC+0LbQuNC00LDQu9GB0Y8g0YHQsdGA0L7RgSDQsdGD0YTQtdGA0LAiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNworbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgItCy0YvQv9C+0LvQvdC40YLRjCDCq2dpdCBiaXNlY3QgbmV4dMK7IgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTkKK21zZ2lkICJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMIEJJU0VDVF9IRUFEINCy0LzQtdGB0YLQviDQv9C10YDQtdGF0L7QtNCwINC90LAg0YLQtdC60YPRidC40Lkg0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzIKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgImdpdCBibGFtZSBbPNC+0L/RhtC40Lg+XSBbPNC+0L/RhtC40Lgt0YDQtdC00LDQutGG0LjQuD5dIFs80YDQtdC00LDQutGG0LjRjz5dIFstLV0gPNGE0LDQudC7PiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjM3Cittc2dpZCAiPHJldi1vcHRzPiBhcmUgZG9jdW1lbnRlZCBpbiBnaXQtcmV2LWxpc3QoMSkiCittc2dzdHIgIjzQvtC/0YbQuNC4LXJldi1saXN0PiDQtNC+0LrRg9C80LXQvdGC0LjRgNC+0LLQsNC90Ysg0LIgZ2l0LXJldi1saXN0KDEpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMAorbXNnaWQgIlNob3cgYmxhbWUgZW50cmllcyBhcyB3ZSBmaW5kIHRoZW0sIGluY3JlbWVudGFsbHkiCittc2dzdHIgItCf0L7QutCw0LfQsNGC0Ywg0LfQsNC/0LjRgdC4INCw0LLRgtC+0YDRgdGC0LLQsCDQv9C+0YHRgtC10L/QtdC90L3Qviwg0LIg0L/RgNC+0YbQtdGB0YHQtSDQvdCw0YXQvtC20LTQtdC90LjRjyIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDEKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLQndC1INC/0L7QutCw0LfRi9Cy0LDRgtGMIFNIQS0xINC00LvRjyDQutC+0LzQvNC40YLQvtCyLCDQvdC1INCy0YXQvtC00Y/RidC40YUg0LIg0LPRgNCw0L3QuNGG0Ysg0LfQsNC/0YDQvtGB0LAgKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDQvtGC0LrQu9GO0YfQtdC90L4pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMgorbXNnaWQgIkRvIG5vdCB0cmVhdCByb290IGNvbW1pdHMgYXMgYm91bmRhcmllcyAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0J3QtSDQstC+0YHQv9GA0LjQvdC40LzQsNGC0Ywg0LrQvtGA0L3QtdCy0YvQtSDQutC+0LzQvNC40YLRiyDQutCw0Log0LPRgNCw0L3QuNGH0L3Ri9C1ICjQn9C+INGD0LzQvtC70YfQsNC90LjRjjog0L7RgtC60LvRjtGH0LXQvdC+KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDMKK21zZ2lkICJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINGB0YLQsNGC0LjRgdGC0LjQutGDINGA0LDRgdGF0L7QtNC+0LIg0L3QsCDQstGL0L/QvtC70L3QtdC90LjQtSDQt9Cw0L/RgNC+0YHQsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDQKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQvtGG0LXQvdC60YMg0LTQu9GPINC30LDQv9C40YHQtdC5INCw0LLRgtC+0YDRgdGC0LLQsCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDUKK21zZ2lkICJTaG93IG9yaWdpbmFsIGZpbGVuYW1lIChEZWZhdWx0OiBhdXRvKSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQvtGA0LjQs9C40L3QsNC70YzQvdC+0LUg0LjQvNGPINGE0LDQudC70LAgKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA2Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC+0YDQuNCz0LjQvdCw0LvRjNC90YvQtSDQvdC+0LzQtdGA0LAg0YHRgtGA0L7QuiAo0J/QviDRg9C80L7Qu9GH0LDQvdC40Y46INC+0YLQutC70Y7Rh9C10L3QvikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA3Cittc2dpZCAiU2hvdyBpbiBhIGZvcm1hdCBkZXNpZ25lZCBmb3IgbWFjaGluZSBjb25zdW1wdGlvbiIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQsiDRhNC+0YDQvNCw0YLQtSDQtNC70Y8g0L/RgNC+0LPRgNCw0LzQvNC90L7Qs9C+INGA0LDQt9Cx0L7RgNCwIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwOAorbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQsiDQvNCw0YjQuNC90L7Rh9C40YLQsNC10LzQvtC8INGE0L7RgNC80LDRgtC1LCDRgSDQv9C+0YHRgtGA0L7Rh9C90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQtdC5INC+INC60L7QvNC80LjRgtC1IgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwOQorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtCw0LrQvtC5INC20LUg0YTQvtGA0LzQsNGCINCy0YvQstC+0LTQsCwg0LrQsNC6INC4IGdpdC1hbm5vdGF0ZSAo0J/QviDRg9C80L7Qu9GH0LDQvdC40Y46INC+0YLQutC70Y7Rh9C10L3QvikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTEwCittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC90LXQvtCx0YDQsNCx0L7RgtCw0L3QvdGL0LUg0LLRgNC10LzQtdC90L3Ri9C1INC80LXRgtC60LggKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDQvtGC0LrQu9GO0YfQtdC90L4pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMQorbXNnaWQgIlNob3cgbG9uZyBjb21taXQgU0hBMSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQtNC70LjQvdC90YvQuSBTSEExINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60L7QvNC80LjRgtCwICjQn9C+INGD0LzQvtC70YfQsNC90LjRjjog0L7RgtC60LvRjtGH0LXQvdC+KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTIKK21zZ2lkICJTdXBwcmVzcyBhdXRob3IgbmFtZSBhbmQgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLQndC1INC/0L7QutCw0LfRi9Cy0LDRgtGMINC40LzRjyDQsNCy0YLQvtGA0LAg0Lgg0LLRgNC10LzQtdC90L3Ri9C1INC80LXRgtC60LggKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDQvtGC0LrQu9GO0YfQtdC90L4pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMworbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQv9C+0YfRgtGDINCw0LLRgtC+0YDQsCDQstC80LXRgdGC0L4g0LjQvNC10L3QuCAo0J/QviDRg9C80L7Qu9GH0LDQvdC40Y46INC+0YLQutC70Y7Rh9C10L3QvikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE0Cittc2dpZCAiSWdub3JlIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMiCittc2dzdHIgItCY0LPQvdC+0YDQuNGA0L7QstCw0YLRjCDRgNCw0LfQu9C40YfQuNGPINCyINC/0YDQvtCx0LXQu9Cw0YUiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE1Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICLQn9C+0YLRgNCw0YLQuNGC0Ywg0LHQvtC70YzRiNC1INCy0YDQtdC80LXQvdC4LCDQtNC70Y8g0L3QsNGF0L7QttC00LXQvdC40Y8g0LvRg9GH0YjQuNGFINGB0L7QstC/0LDQtNC10L3QuNC5IgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNgorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGA0LXQtNCw0LrRhtC40Lgg0LjQtyA80YTQsNC50LvQsD4g0LLQvNC10YHRgtC+INCy0YvQt9C+0LLQsCBnaXQtcmV2LWxpc3QiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE3Cittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGB0L7QtNC10YDQttC40LzQvtC1IDzRhNCw0LnQu9CwPiDQutCw0Log0YTQuNC90LDQu9GM0L3Ri9C5INGB0L3QuNC80L7QuiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTggYnVpbHRpbi9ibGFtZS5jOjI1MTkKK21zZ2lkICJzY29yZSIKK21zZ3N0ciAi0LzQuNC9LdC00LvQuNC90LAiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE4Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAi0J3QsNC50YLQuCDQutC+0L/QuNGA0L7QstCw0L3QuNC1INGB0YLRgNC+0Log0LIg0L/RgNC10LTQtdC70LDRhSDQuCDQvNC10LbQtNGDINGE0LDQudC70LDQvNC4IgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxOQorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgItCd0LDQudGC0Lgg0L/QtdGA0LXQvNC10YnQtdC90LjRjyDRgdGC0YDQvtC6INCyINC/0YDQtdC00LXQu9Cw0YUg0Lgg0LzQtdC20LTRgyDRhNCw0LnQu9Cw0LzQuCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MjAKK21zZ2lkICJuLG0iCittc2dzdHIgItC90LDRh9Cw0LvQvizQutC+0L3QtdGGIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUyMAorbXNnaWQgIlByb2Nlc3Mgb25seSBsaW5lIHJhbmdlIG4sbSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICLQntCx0YDQsNCx0L7RgtCw0YLRjCDRgtC+0LvRjNC60L4g0YHRgtGA0L7QutC4INCyINC00LjQsNC/0LDQt9C+0L3QtSDQvdCw0YfQsNC70L4s0LrQvtC90LXRhiwg0L3QsNGH0LjQvdCw0Y8g0YEgMSIKKworIy4gVFJBTlNMQVRPUlM6IFRoaXMgc3RyaW5nIGlzIHVzZWQgdG8gdGVsbCB1cyB0aGUgbWF4aW11bQorIy4gZGlzcGxheSB3aWR0aCBmb3IgYSByZWxhdGl2ZSB0aW1lc3RhbXAgaW4gImdpdCBibGFtZSIKKyMuIG91dHB1dC4gIEZvciBDIGxvY2FsZSwgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iLCB3aGljaAorIy4gdGFrZXMgMjIgcGxhY2VzLCBpcyB0aGUgbG9uZ2VzdCBhbW9uZyB2YXJpb3VzIGZvcm1zIG9mCisjLiByZWxhdGl2ZSB0aW1lc3RhbXBzLCBidXQgeW91ciBsYW5ndWFnZSBtYXkgbmVlZCBtb3JlIG9yCisjLiBmZXdlciBkaXNwbGF5IGNvbHVtbnMuCisjOiBidWlsdGluL2JsYW1lLmM6MjYwMQorbXNnaWQgIjQgeWVhcnMsIDExIG1vbnRocyBhZ28iCittc2dzdHIgIjQg0LPQvtC00LAg0LggMTEg0LzQtdGB0Y/RhtC10LIg0L3QsNC30LDQtCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPNC+0L/RhtC40Lg+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgImdpdCBicmFuY2ggWzzQvtC/0YbQuNC4Pl0gWy1sXSBbLWZdIDzQuNC80Y8t0LLQtdGC0LrQuD4gWzzRgtC+0YfQutCwLdC90LDRh9Cw0LvQsD5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs80L7Qv9GG0LjQuD5dIFstcl0gKC1kIHwgLUQpIDzQuNC80Y8t0LLQtdGC0LrQuD7igKYiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzzQvtC/0YbQuNC4Pl0gKC1tIHwgLU0pIFs80YHRgtCw0YDQsNGPLdCy0LXRgtC60LA+XSA80L3QvtCy0LDRjy3QstC10YLQutCwPiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICLRg9C00LDQu9C10L3QuNC1INCy0LXRgtC60Lggwqslc8K7LCDQutC+0YLQvtGA0LDRjyDQsdGL0LvQsCDRgdC70LjRgtCwINGBXG4gICAgICAgICDCqyVzwrssINC90L4g0L3QtSDRgdC70LjRgtCwINGBIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQtdC90LjQtSDQstC10YLQutC4IMKrJXPCuywg0LrQvtGC0L7RgNCw0Y8g0LXRidC1INC90LUg0YHQu9C40YLQsCDRgVxuICAgICAgICAgwqslc8K7LCDRhdC+0YLRjyDRg9C20LUg0YHQu9C40YLQsCDRgSBIRUFELiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0L7QsdGK0LXQutGCINC60L7QvNC80LjRgtCwINC00LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0L3QtSDRgdC70LjRgtCwINC/0L7Qu9C90L7RgdGC0YzRji5cbtCV0YHQu9C4INCy0Ysg0YPQstC10YDQtdC90YssINGH0YLQviDRhdC+0YLQuNGC0LUg0LXQtSDRg9C00LDQu9C40YLRjCwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IGJyYW5jaCAtRCAlc8K7LiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODUKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0YTQsNC50Lsg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxMworbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0LrQu9GO0YfQuCAtYSDQuCAtZCIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTkKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yIEhFQUQiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDQvtCx0YrQtdC60YIg0LrQvtC80LzQuNGC0LAg0LTQu9GPIEhFQUQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGJyYW5jaCAnJXMnIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG9uLiIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINGD0LTQsNC70LjRgtGMINCy0LXRgtC60YMgwqslc8K7LCDRgtCw0Log0LrQsNC6INCy0Ysg0YHQtdC50YfQsNGBINC90LAg0L3QtdC5INC90LDRhdC+0LTQuNGC0LXRgdGMLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgItCy0L3QtdGI0L3Rj9GPINC+0YLRgdC70LXQttC40LLQsNC10LzQsNGPINCy0LXRgtC60LAgwqslc8K7INC90LUg0L3QsNC50LTQtdC90LAuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLQstC10YLQutCwIMKrJXPCuyDQvdC1INC90LDQudC00LXQvdCwLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICLQntGI0LjQsdC60LAg0YPQtNCw0LvQtdC90LjRjyDQstC90LXRiNC90LXQuSDQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7QuSDQstC10YLQutC4IMKrJXPCuyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgItCe0YjQuNCx0LrQsCDRg9C00LDQu9C10L3QuNGPINCy0LXRgtC60Lggwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgItCS0L3QtdGI0L3Rj9GPINC+0YLRgdC70LXQttC40LLQsNC10LzQsNGPINCy0LXRgtC60LAgJXMg0YPQtNCw0LvQtdC90LAgKNCx0YvQu9CwICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgItCS0LXRgtC60LAgJXMg0YPQtNCw0LvQtdC90LAgKNCx0YvQu9CwICVzKS5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzozNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgZG9lcyBub3QgcG9pbnQgYXQgYSBjb21taXQiCittc2dzdHIgItCy0LXRgtC60LAgwqslc8K7INC90LUg0YPQutCw0LfRi9Cy0LDQtdGCINC90LAg0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ1MgorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGdvbmVdIgorbXNnc3RyICJbJXM6INC/0YDQvtC/0LDQu10iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlslc10iCittc2dzdHIgIlslc10iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYmVoaW5kICVkXSIKK21zZ3N0ciAiWyVzOiDQv9C+0LfQsNC00LggJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJbYmVoaW5kICVkXSIKK21zZ3N0ciAiW9C/0L7Qt9Cw0LTQuCAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYWhlYWQgJWRdIgorbXNnc3RyICJbJXM6INCy0L/QtdGA0LXQtNC4ICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkXSIKK21zZ3N0ciAiW9Cy0L/QtdGA0LXQtNC4ICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBhaGVhZCAlZCwgYmVoaW5kICVkXSIKK21zZ3N0ciAiWyVzOiDQstC/0LXRgNC10LTQuCAlZCwg0L/QvtC30LDQtNC4ICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICJb0LLQv9C10YDQtdC00LggJWQsINC/0L7Qt9Cw0LTQuCAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDg5Cittc2dpZCAiICoqKiogaW52YWxpZCByZWYgKioqKiIKK21zZ3N0ciAiICoqKiog0L3QtdC00LXQudGB0YLQstC40YLQtdC70YzQvdCw0Y8g0YHRgdGL0LvQutCwICoqKioiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIHJlYmFzaW5nICVzKSIKK21zZ3N0ciAiKNC90LXRgiDQstC10YLQutC4LCDQv9C10YDQtdC80LXRidC10L3QuNC1ICVzKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKG5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMpIgorbXNnc3RyICIo0L3QtdGCINCy0LXRgtC60LgsINC00LLQvtC40YfQvdGL0Lkg0L/QvtC40YHQuiDQvdCw0YfQsNGCINC90LAgJXMpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCittc2dzdHIgIihIRUFEINC+0YLQtNC10LvRkdC9INC90LAgJXMpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBmcm9tICVzKSIKK21zZ3N0ciAiKEhFQUQg0L7RgtC00LXQu9GR0L0g0L3QsNGH0LjQvdCw0Y8g0YEgJXMpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5NgorbXNnaWQgIihubyBicmFuY2gpIgorbXNnc3RyICIo0L3QtdGCINCy0LXRgtC60LgpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAi0L7QsdGK0LXQutGCIMKrJXPCuyDQvdC1INGD0LrQsNC30YvQstCw0LXRgiDQvdCwINC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9icmFuY2guYzo2OTEKK21zZ2lkICJzb21lIHJlZnMgY291bGQgbm90IGJlIHJlYWQiCittc2dzdHIgItC90LUg0YPQtNCw0LXRgtGB0Y8g0L/RgNC+0YfQuNGC0LDRgtGMINC90LXQutC+0YLQvtGA0YvQtSDRgdGB0YvQu9C60LgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzA0Cittc2dpZCAiY2Fubm90IHJlbmFtZSB0aGUgY3VycmVudCBicmFuY2ggd2hpbGUgbm90IG9uIGFueS4iCittc2dzdHIgItC90LXQstC+0LfQvNC+0LbQvdC+INC/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINGC0LXQutGD0YnRg9GOINCy0LXRgtC60YMsINC10YHQu9C4INCy0Ysg0L3QtSDQvdCw0YXQvtC00LjRgtC10YHRjCDQvdC4INC90LAg0L7QtNC90L7QuSDQuNC3INC90LjRhS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgItCd0LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QvtC1INC40LzRjyDQstC10YLQutC4OiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzI5Cittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgItCh0LHQvtC5INC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8g0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgItCf0LXRgNC10LjQvNC10L3QvtCy0LDQvdCwINC90LXQv9GA0LDQstC40LvRjNC90L4g0L3QsNC30LLQsNC90L3QsNGPINCy0LXRgtC60LAgwqslc8K7IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICLQktC10YLQutCwINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdCwINCyICVzLCDQvdC+IEhFQUQg0L3QtSDQvtCx0L3QvtCy0LvQtdC9ISIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NDQKK21zZ2lkICJCcmFuY2ggaXMgcmVuYW1lZCwgYnV0IHVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgItCS0LXRgtC60LAg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LAsINC90L4g0L/RgNC+0LjQt9C+0YjQtdC7INGB0LHQvtC5INC+0LHQvdC+0LLQu9C10L3QuNGPINGE0LDQudC70LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgItC/0LvQvtGF0L7QtSDQuNC80Y8g0L7QsdGK0LXQutGC0LAgJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBicmFuY2ggZGVzY3JpcHRpb24gdGVtcGxhdGU6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0YjQsNCx0LvQvtC9INC+0L/QuNGB0LDQvdC40Y8g0LLQtdGC0LrQuDogJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODExCittc2dpZCAiR2VuZXJpYyBvcHRpb25zIgorbXNnc3RyICLQntCx0YnQuNC1INC/0LDRgNCw0LzQtdGC0YDRiyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTMKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAi0L/QvtC60LDQt9GL0LLQsNGC0Ywg0YXQtdGILdGB0YPQvNC80YMg0Lgg0YLQtdC80YMsINGD0LrQsNC20LjRgtC1INC00LLQsNC20LTRiyDQtNC70Y8g0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC4IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNAorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDQuNC90YTQvtGA0LzQsNGG0LjQvtC90L3Ri9C1INGB0L7QvtCx0YnQtdC90LjRjyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTUKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAi0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0YDQtdC20LjQvCDQvtGC0YHQu9C10LbQuNCy0LDQvdC40Y8g0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC4ICjRgdC8LiBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODE3Cittc2dpZCAiY2hhbmdlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgItC40LfQvNC10L3QuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC1IgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMQorbXNnaWQgInVzZSBjb2xvcmVkIG91dHB1dCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGG0LLQtdGC0L3QvtC5INCy0YvQstC+0LQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIyCittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi0LLRi9C/0L7Qu9C90LjRgtGMINC00LXQudGB0YLQstC40Y8g0L3QsCDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDQstC90LXRiNC90LjRhSDQstC10YLQutCw0YUiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODI1IGJ1aWx0aW4vYnJhbmNoLmM6ODMxIGJ1aWx0aW4vYnJhbmNoLmM6ODUyCisjOiBidWlsdGluL2JyYW5jaC5jOjg1OCBidWlsdGluL2NvbW1pdC5jOjE1ODAgYnVpbHRpbi9jb21taXQuYzoxNTgxCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODIgYnVpbHRpbi9jb21taXQuYzoxNTgzIGJ1aWx0aW4vdGFnLmM6NjE4CisjOiBidWlsdGluL3RhZy5jOjYyNAogbXNnaWQgImNvbW1pdCIKIG1zZ3N0ciAi0LrQvtC80LzQuNGCIgogCi0jOiBnaXRrOjIyOTkgZ2l0azoyMzAxIGdpdGs6NDY4NyBnaXRrOjQ3MTAgZ2l0azo0NzM0IGdpdGs6Njc1NSBnaXRrOjY4MjcKLSM6IGdpdGs6NjkxMgotbXNnaWQgImNvbnRhaW5pbmc6IgotbXNnc3RyICLRgdC+0LTQtdGA0LbQsNGJ0LXQtToiCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNiBidWlsdGluL2JyYW5jaC5jOjgzMgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgItCy0YvQstC+0LQg0YLQvtC70YzQutC+INCy0LXRgtC+0LosINC60L7RgtC+0YDRi9C1INGB0L7QtNC10YDQttCw0YIg0LrQvtC80LzQuNGCIgogCi0jOiBnaXRrOjIzMDIgZ2l0azozNTI2IGdpdGs6MzUzMSBnaXRrOjQ3NjMKLW1zZ2lkICJ0b3VjaGluZyBwYXRoczoiCi1tc2dzdHIgItC60LDRgdCw0YLQtdC70YzQvdC+INGE0LDQudC70L7QsjoiCisjOiBidWlsdGluL2JyYW5jaC5jOjgzOAorbXNnaWQgIlNwZWNpZmljIGdpdC1icmFuY2ggYWN0aW9uczoiCittc2dzdHIgItCh0L/QtdGG0LjRhNC40YfQvdGL0LUg0LTQu9GPIGdpdC1icmFuY2gg0LTQtdC50YHRgtCy0LjRjzoiCiAKLSM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKLW1zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKLW1zZ3N0ciAi0LTQvtCx0LDQstC40LIv0YPQtNCw0LvQuNCyINGB0YLRgNC+0LrRgzoiCisjOiBidWlsdGluL2JyYW5jaC5jOjgzOQorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGB0L/QuNGB0L7QuiDQuCDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDQuCDQu9C+0LrQsNC70YzQvdGL0YUg0LLQtdGC0L7QuiIKIAotIzogZ2l0azoyMzA0IGdpdGs6NDc3OQotbXNnaWQgImNoYW5naW5nIGxpbmVzIG1hdGNoaW5nOiIKLW1zZ3N0ciAi0LjQt9C80LXQvdGP0Y8g0YHQvtCy0L/QsNC00LDRjtGJ0LjQtSDRgdGC0YDQvtC60Lg6IgorIzogYnVpbHRpbi9icmFuY2guYzo4NDEKK21zZ2lkICJkZWxldGUgZnVsbHkgbWVyZ2VkIGJyYW5jaCIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0L/QvtC70L3QvtGB0YLRjNGOINGB0LvQuNGC0YPRjiDQstC10YLQutGDIgogCi0jOiBnaXRrOjIzMTMgZ2l0azoyMzE1IGdpdGs6NDc2NgotbXNnaWQgIkV4YWN0IgotbXNnc3RyICLQotC+0YfQvdC+IgorIzogYnVpbHRpbi9icmFuY2guYzo4NDIKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDQstC10YLQutGDICjQtNCw0LbQtSDQvdC40LrRg9C00LAg0L3QtSDRgdC70LjRgtGD0Y4pIgogCi0jOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMwotbXNnaWQgIklnbkNhc2UiCi1tc2dzdHIgItCY0LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQsdC+0LvRjNGI0LjQtS/QvNCw0LvQtdC90YzQutC40LUiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICLQv9C10YDQtdC80LXRgdGC0LjRgtGML9C/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINCy0LXRgtC60Lgg0Lgg0LXQtSDQttGD0YDQvdCw0Lsg0YHRgdGL0LvQvtC6IgogCi0jOiBnaXRrOjIzMTUgZ2l0azo0NzM2IGdpdGs6NDg1MiBnaXRrOjY3MTkKLW1zZ2lkICJSZWdleHAiCi1tc2dzdHIgItCg0LXQs9GD0LvRj9GA0L3Ri9C1INCy0YvRgNCw0LbQtdC90LjRjyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ0Cittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi0L/QtdGA0LXQvNC10YHRgtC40YLRjC/Qv9C10YDQtdC40LzQtdC90L7QstCw0YLRjCDQstC10YLQutGDLCDQtNCw0LbQtSDQtdGB0LvQuCDRhtC10LvQtdCy0L7QtSDQuNC80Y8g0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCIgogCi0jOiBnaXRrOjIzMTcgZ2l0azoyMzE4IGdpdGs6NDg3NCBnaXRrOjQ5MDQgZ2l0azo0OTExIGdpdGs6Njg0OCBnaXRrOjY5MTYKLW1zZ2lkICJBbGwgZmllbGRzIgotbXNnc3RyICLQktC+INCy0YHQtdGFINC/0L7Qu9GP0YUiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NQorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGB0L/QuNGB0L7QuiDQuNC80LXQvSDQstC10YLQvtC6IgogCi0jOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKLW1zZ2lkICJIZWFkbGluZSIKLW1zZ3N0ciAi0JfQsNCz0L7Qu9C+0LLQvtC6IgorIzogYnVpbHRpbi9icmFuY2guYzo4NDYKK21zZ2lkICJjcmVhdGUgdGhlIGJyYW5jaCdzIHJlZmxvZyIKK21zZ3N0ciAi0YHQvtC30LTQsNGC0Ywg0LbRg9GA0L3QsNC7INGB0YHRi9C70L7QuiDQstC10YLQutC4IgogCi0jOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjY5MTYgZ2l0azo3Mzg5Ci1tc2dpZCAiQ29tbWVudHMiCi1tc2dzdHIgItCa0L7QvNC80LXQvdGC0LDRgNC40LgiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0OAorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICLQuNC30LzQtdC90LjRgtGMINC+0L/QuNGB0LDQvdC40LUg0LLQtdGC0LrQuCIKIAotIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjQ4NzYgZ2l0azo0OTExIGdpdGs6Njc4NiBnaXRrOjczMjQgZ2l0azo4ODMwCi0jOiBnaXRrOjg4NDUKLW1zZ2lkICJBdXRob3IiCi1tc2dzdHIgItCQ0LLRgtC+0YAiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0OQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+0LUg0YHQvtC30LTQsNC90LjQtSwg0L/QtdGA0LXQvNC10YnQtdC90LjQtSDQuNC70Lgg0YPQtNCw0LvQtdC90LjQtSDQstC10YLQutC4IgogCi0jOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjczMjYKLW1zZ2lkICJDb21taXR0ZXIiCi1tc2dzdHIgItCa0L7QvNC80LjRgtC10YAiCisjOiBidWlsdGluL2JyYW5jaC5jOjg1MgorbXNnaWQgInByaW50IG9ubHkgbm90IG1lcmdlZCBicmFuY2hlcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0L3QtSDRgdC70LjRgtGL0YUg0LLQtdGC0L7QuiIKIAotIzogZ2l0azoyMzUwCi1tc2dpZCAiU2VhcmNoIgotbXNnc3RyICLQndCw0LnRgtC4IgorIzogYnVpbHRpbi9icmFuY2guYzo4NTgKK21zZ2lkICJwcmludCBvbmx5IG1lcmdlZCBicmFuY2hlcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgtC+0LvRjNC60L4g0YHQu9C40YLRi9GFINCy0LXRgtC+0LoiCiAKLSM6IGdpdGs6MjM1OAotbXNnaWQgIkRpZmYiCi1tc2dzdHIgItCh0YDQsNCy0L3QuNGC0YwiCisjOiBidWlsdGluL2JyYW5jaC5jOjg2MgorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgdC/0LjRgdC+0Log0LLQtdGC0L7QuiDQv9C+INGB0YLQvtC70LHRhtCw0LwiCiAKLSM6IGdpdGs6MjM2MAotbXNnaWQgIk9sZCB2ZXJzaW9uIgotbXNnc3RyICLQodGC0LDRgNCw0Y8g0LLQtdGA0YHQuNGPIgorIzogYnVpbHRpbi9icmFuY2guYzo4NzUKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtC/0YDQtdC00LXQu9C40YLRjCBIRUFEINC60LDQuiDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Rg9GOINGB0YHRi9C70LrRgy4iCiAKLSM6IGdpdGs6MjM2MgotbXNnaWQgIk5ldyB2ZXJzaW9uIgotbXNnc3RyICLQndC+0LLQsNGPINCy0LXRgNGB0LjRjyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODc5IGJ1aWx0aW4vY2xvbmUuYzo2OTAKK21zZ2lkICJIRUFEIG5vdCBmb3VuZCBiZWxvdyByZWZzL2hlYWRzISIKK21zZ3N0ciAiSEVBRCDQvdC1INC90LDQudC00LXQvSDQsiByZWZzL2hlYWRzISIKIAotIzogZ2l0azoyMzY0Ci1tc2dpZCAiTGluZXMgb2YgY29udGV4dCIKLW1zZ3N0ciAi0KHRgtGA0L7QuiDQutC+0L3RgtC10LrRgdGC0LAiCisjOiBidWlsdGluL2JyYW5jaC5jOjkwMQorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4g0LggLS12ZXJib3NlINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgogCi0jOiBnaXRrOjIzNzQKLW1zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgotbXNnc3RyICLQmNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0L/RgNC+0LHQtdC70YsiCisjOiBidWlsdGluL2JyYW5jaC5jOjkxMiBidWlsdGluL2JyYW5jaC5jOjk1MQorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICLRgtGA0LXQsdGD0LXRgtGB0Y8g0LjQvNGPINCy0LXRgtC60LgiCiAKLSM6IGdpdGs6MjM3OCBnaXRrOjIzODAgZ2l0azo3OTU5IGdpdGs6ODIwNgotbXNnaWQgIkxpbmUgZGlmZiIKLW1zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPINGB0YLRgNC+0LoiCisjOiBidWlsdGluL2JyYW5jaC5jOjkyNworbXNnaWQgIkNhbm5vdCBnaXZlIGRlc2NyaXB0aW9uIHRvIGRldGFjaGVkIEhFQUQiCittc2dzdHIgItCd0LXQu9GM0LfRjyDQtNCw0YLRjCDQvtC/0LjRgdCw0L3QuNC1INC+0YLQtNC10LvQtdC90L3QvtC80YMgSEVBRCIKIAotIzogZ2l0azoyNDQ1Ci1tc2dpZCAiUGF0Y2giCi1tc2dzdHIgItCf0LDRgtGHIgorIzogYnVpbHRpbi9icmFuY2guYzo5MzIKK21zZ2lkICJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINC40LfQvNC10L3QuNGC0Ywg0L7Qv9C40YHQsNC90LjQtSDQsdC+0LvQtdC1INC+0LTQvdC+0Lkg0LLQtdGC0LrQuCDQt9CwINGA0LDQtyIKIAotIzogZ2l0azoyNDQ3Ci1tc2dpZCAiVHJlZSIKLW1zZ3N0ciAi0KTQsNC50LvRiyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGNvbW1pdCBvbiBicmFuY2ggJyVzJyB5ZXQuIgorbXNnc3RyICLQldGJ0LUg0L3QtdGCINC60L7QvNC80LjRgtCwINC90LAg0LLQtdGC0LrQtSDCqyVzwrsuIgogCi0jOiBnaXRrOjI2MTcgZ2l0azoyNjM3Ci1tc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgotbXNnc3RyICLQodGA0LDQstC90LjRgtGMINGN0YLQvtGCINC60L7QvNC80LjRgiDRgSDQstGL0LTQtdC70LXQvdC90YvQvCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTQyCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIGJyYW5jaCBuYW1lZCAnJXMnLiIKK21zZ3N0ciAi0J3QtdGCINCy0LXRgtC60Lgg0YEg0LjQvNC10L3QtdC8IMKrJXPCuy4iCiAKLSM6IGdpdGs6MjYxOCBnaXRrOjI2MzgKLW1zZ2lkICJEaWZmIHNlbGVjdGVkIC0+IHRoaXMiCi1tc2dzdHIgItCh0YDQsNCy0L3QuNGC0Ywg0LLRi9C00LXQu9C10L3QvdGL0Lkg0YEg0Y3RgtC40Lwg0LrQvtC80LzQuNGC0L7QvCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTU3Cittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIKK21zZ3N0ciAi0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQstC10YLQvtC6INC00LvRjyDQvtC/0LXRgNCw0YbQuNC4INC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8iCiAKLSM6IGdpdGs6MjYxOSBnaXRrOjI2MzkKLW1zZ2lkICJNYWtlIHBhdGNoIgotbXNnc3RyICLQodC+0LfQtNCw0YLRjCDQv9Cw0YLRhyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTYyCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAi0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQstC10YLQvtC6INC00LvRjyDRg9C60LDQt9Cw0L3QuNGPINC90L7QstGL0YUg0LLRi9GI0LXRgdGC0L7Rj9GJ0LjRhSIKIAotIzogZ2l0azoyNjIwIGdpdGs6OTI1NAotbXNnaWQgIkNyZWF0ZSB0YWciCi1tc2dzdHIgItCh0L7Qt9C00LDRgtGMINC80LXRgtC60YMiCisjOiBidWlsdGluL2JyYW5jaC5jOjk2NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY291bGQgbm90IHNldCB1cHN0cmVhbSBvZiBIRUFEIHRvICVzIHdoZW4gaXQgZG9lcyBub3QgcG9pbnQgdG8gYW55IGJyYW5jaC4iCittc2dzdHIgItC90LXQstC+0LfQvNC+0LbQvdC+INGD0YHRgtCw0L3QvtCy0LjRgtGMINCy0YvRiNC10YHRgtC+0Y/RidC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQtNC70Y8gSEVBRCDQvdCwICVzLCDQutC+0LPQtNCwINC+0L0g0L3QtSDRg9C60LDQt9GL0LLQsNC10YIg0L3QuCDQvdCwINC+0LTQvdGDINCy0LXRgtC60YMuIgogCi0jOiBnaXRrOjI2MjEgZ2l0azo5MzcxCi1tc2dpZCAiV3JpdGUgY29tbWl0IHRvIGZpbGUiCi1tc2dzdHIgItCh0L7RhdGA0LDQvdC40YLRjCDQutC+0LzQvNC40YIg0LIg0YTQsNC50LsiCisjOiBidWlsdGluL2JyYW5jaC5jOjk2OSBidWlsdGluL2JyYW5jaC5jOjk5MSBidWlsdGluL2JyYW5jaC5jOjEwMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAi0L3QtdGCINGC0LDQutC+0Lkg0LLQtdGC0LrQuCDCqyVzwrsiCiAKLSM6IGdpdGs6MjYyMiBnaXRrOjk0MjgKLW1zZ2lkICJDcmVhdGUgbmV3IGJyYW5jaCIKLW1zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0LLQtdGC0LrRgyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLQstC10YLQutCwIMKrJXPCuyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgogCi0jOiBnaXRrOjI2MjMKLW1zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKLW1zZ3N0ciAi0J7RgtCx0L7RgCDQu9GD0YfRiNC10LPQviDQtNC70Y8g0Y3RgtC+0LPQviDQutC+0LzQvNC40YLQsCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgItGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0LLQtdGC0L7QuiDQtNC70Y8g0YPQsdC40YDQsNC90LjRjyDQstGL0YjQtdGB0YLQvtGP0YnQuNGFIgogCi0jOiBnaXRrOjI2MjQKLW1zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgotbXNnc3RyICLQo9GB0YLQsNC90L7QstC40YLRjCBIRUFEINC90LAg0Y3RgtC+0YIg0LrQvtC80LzQuNGCIgorIzogYnVpbHRpbi9icmFuY2guYzo5ODkKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICLQvdC10LLQvtC30LzQvtC20L3QviDRg9Cx0YDQsNGC0Ywg0LLRi9GI0LXRgdGC0L7Rj9GJ0LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC00LvRjyBIRUFELCDQutC+0LPQtNCwINC+0L0g0L3QtSDRg9C60LDQt9GL0LLQsNC10YIg0L3QuCDQvdCwINC+0LTQvdGDINCy0LXRgtC60YMuIgogCi0jOiBnaXRrOjI2MjUKLW1zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgotbXNnc3RyICLQn9C+0LzQtdGC0LjRgtGMINGN0YLQvtGCINC60L7QvNC80LjRgiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0JLQtdGC0LrQsCDCqyVzwrsg0L3QtSDQuNC80LXQtdGCINC40L3RhNC+0YDQvNCw0YbQuNC4INC+INCy0YvRiNC10YHRgtC+0Y/RidC10Lkg0LLQtdGC0LrQtSIKIAotIzogZ2l0azoyNjI2Ci1tc2dpZCAiUmV0dXJuIHRvIG1hcmsiCi1tc2dzdHIgItCS0LXRgNC90YPRgtGM0YHRjyDQvdCwINC/0L7QvNC10YLQutGDIgorIzogYnVpbHRpbi9icmFuY2guYzoxMDA5Cittc2dpZCAiaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBjcmVhdGUgJ0hFQUQnIG1hbnVhbGx5IgorbXNnc3RyICLQvdC1INC40LzQtdC10YIg0YHQvNGL0YHQu9CwINGB0L7Qt9C00LDQstCw0YLRjCDCq0hFQUTCuyDQstGA0YPRh9C90YPRjiIKIAotIzogZ2l0azoyNjI3Ci1tc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCi1tc2dzdHIgItCd0LDQudGC0Lgg0Lgg0L/QvtC80LXRgtC40YLRjCDQv9C+0YLQvtC80LrQsCDRjdGC0L7Qs9C+INC60L7QvNC80LjRgtCwIgorIzogYnVpbHRpbi9icmFuY2guYzoxMDE1Cittc2dpZCAiLWEgYW5kIC1yIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCBtYWtlIHNlbnNlIHdpdGggYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgNGLIC1hINC4IC1yINC00LvRjyDCq2dpdCBicmFuY2jCuyDQvdC1INC40LzQtdGO0YIg0YHQvNGL0YHQu9CwINGBINGD0LrQsNC30LDQvdC40LXQvCDQuNC80LXQvdC4INCy0LXRgtC60LgiCiAKLSM6IGdpdGs6MjYyOAotbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgotbXNnc3RyICLQodGA0LDQstC90LjRgtGMINGBINC/0L7QvNC10YfQtdC90L3Ri9C8INC60L7QvNC80LjRgtC+0LwiCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtLXNldC11cHN0cmVhbSBmbGFnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gQ29uc2lkZXIgdXNpbmcgIgorIi0tdHJhY2sgb3IgLS1zZXQtdXBzdHJlYW0tdG9cbiIKK21zZ3N0ciAi0KTQu9Cw0LMgLS1zZXQtdXBzdHJlYW0g0YPRgdGC0LDRgNC10Lsg0Lgg0LHRg9C00LXRgiDRg9C00LDQu9C10L0g0LIg0LHRg9C00YPRidC10LwuINCS0LzQtdGB0YLQviDQvdC10LPQviDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IC0tdHJhY2sg0LjQu9C4IC0tc2V0LXVwc3RyZWFtLXRvXG4iCiAKLSM6IGdpdGs6MjYyOSBnaXRrOjI2NDAKLW1zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKLW1zZ3N0ciAi0KHRgNCw0LLQvdC40YLRjCDQstGL0LTQtdC70LXQvdC90L7QtSDRgSDQv9C+0LzQtdGH0LXQvdC90YvQvCDQutC+0LzQvNC40YLQvtC8IgotCi0jOiBnaXRrOjI2MzAgZ2l0azoyNjQxCi1tc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCi1tc2dzdHIgItCh0YDQsNCy0L3QuNGC0Ywg0L/QvtC80LXRh9C10L3QvdGL0Lkg0YEg0Y3RgtC40Lwg0LrQvtC80LzQuNGC0L7QvCIKLQotIzogZ2l0azoyNjMxCi1tc2dpZCAiUmV2ZXJ0IHRoaXMgY29tbWl0IgotbXNnc3RyICLQktC+0LfQstGA0LDRgiDRjdGC0L7Qs9C+INC60L7QvNC80LjRgtCwIgotCi0jOiBnaXRrOjI2NDcKLW1zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCi1tc2dzdHIgItCf0LXRgNC10LnRgtC4INC90LAg0Y3RgtGDINCy0LXRgtC60YMiCi0KLSM6IGdpdGs6MjY0OAotbXNnaWQgIlJlbW92ZSB0aGlzIGJyYW5jaCIKLW1zZ3N0ciAi0KPQtNCw0LvQuNGC0Ywg0Y3RgtGDINCy0LXRgtC60YMiCi0KLSM6IGdpdGs6MjY0OQotbXNnaWQgIkNvcHkgYnJhbmNoIG5hbWUiCi1tc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDRgtGMINC40LzRjyDQstC10YLQutC4IgotCi0jOiBnaXRrOjI2NTYKLW1zZ2lkICJIaWdobGlnaHQgdGhpcyB0b28iCi1tc2dzdHIgItCf0L7QtNGB0LLQtdGC0LjRgtGMINGN0YLQvtGCINGC0L7QttC1IgotCi0jOiBnaXRrOjI2NTcKLW1zZ2lkICJIaWdobGlnaHQgdGhpcyBvbmx5IgotbXNnc3RyICLQn9C+0LTRgdCy0LXRgtC40YLRjCDRgtC+0LvRjNC60L4g0Y3RgtC+0YIiCi0KLSM6IGdpdGs6MjY1OAotbXNnaWQgIkV4dGVybmFsIGRpZmYiCi1tc2dzdHIgItCf0YDQvtCz0YDQsNC80LzQsCDRgdGA0LDQstC90LXQvdC40Y8iCi0KLSM6IGdpdGs6MjY1OQotbXNnaWQgIkJsYW1lIHBhcmVudCBjb21taXQiCi1tc2dzdHIgItCQ0LLRgtC+0YDRiyDQuNC30LzQtdC90LXQvdC40Lkg0YDQvtC00LjRgtC10LvRjNGB0LrQvtCz0L4g0LrQvtC80LzQuNGC0LAiCi0KLSM6IGdpdGs6MjY2MAotbXNnaWQgIkNvcHkgcGF0aCIKLW1zZ3N0ciAi0JrQvtC/0LjRgNC+0LLQsNGC0Ywg0L/Rg9GC0YwiCi0KLSM6IGdpdGs6MjY2NwotbXNnaWQgIlNob3cgb3JpZ2luIG9mIHRoaXMgbGluZSIKLW1zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQuNGB0YLQvtGH0L3QuNC6INGN0YLQvtC5INGB0YLRgNC+0LrQuCIKLQotIzogZ2l0azoyNjY4Ci1tc2dpZCAiUnVuIGdpdCBndWkgYmxhbWUgb24gdGhpcyBsaW5lIgotbXNnc3RyICLQl9Cw0L/Rg9GB0YLQuNGC0YwgZ2l0IGd1aSBibGFtZSDQtNC70Y8g0Y3RgtC+0Lkg0YHRgtGA0L7QutC4IgotCi0jOiBnaXRrOjMwMTQKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAzNQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCi0iR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCisiSWYgeW91IHdhbnRlZCB0byBtYWtlICclcycgdHJhY2sgJyVzJywgZG8gdGhpczpcbiIKICJcbiIKLSJDb3B5cmlnaHQgIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgorbXNnc3RyICJcbtCV0YHQu9C4INCy0Ysg0YXQvtGC0LjRgtC1LCDRh9GC0L7QsdGLIMKrJXPCuyDQvtGC0YHQu9C10LbQuNCy0LDQu9CwIMKrJXPCuywg0YHQtNC10LvQsNC50YLQtSDRgdC70LXQtNGD0Y7RidC10LU6XG5cbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxMDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCittc2dzdHIgImdpdCBicmFuY2ggLWQgJXNcbiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxMDM3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvICVzXG4iCittc2dzdHIgIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvICVzXG4iCisKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgb2theVxuIgorbXNnc3RyICIlcyDQsiDQv9C+0YDRj9C00LrQtVxuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY0Cittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAi0KLRgNC10LHRg9C10YLRgdGPINGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LTQu9GPINGB0L7Qt9C00LDQvdC40Y8g0L/QsNC60LXRgtCwLiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo2OAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIHVuYnVuZGxlLiIKK21zZ3N0ciAi0KLRgNC10LHRg9C10YLRgdGPINGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0LTQu9GPINGA0LDRgdC/0LDQutC+0LLQutC4LiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQyOAorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV18LXMgWy0tYWxsb3ctdW5rbm93bi0iCisidHlwZV18LWV8LXB8PHR5cGU+fC0tdGV4dGNvbnYpIDxvYmplY3Q+IgorbXNnc3RyICJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV18LXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwtZXwtcHw80YLQuNC/PnwtLXRleHRjb252KSA80L7QsdGK0LXQutGCPiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQyOQorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIDwgPGxpc3Qtb2YtIgorIm9iamVjdHM+IgorbXNnc3RyICJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIDwgPNGB0L/QuNGB0L7Qui3QvtCx0YrQtdC60YLQvtCyPiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ2NgorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPNGC0LjQvz4g0LzQvtC20LXRgiDQsdGL0YLRjCDQvtC00L3QuNC8INC40Lc6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDY3Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgtC40L8g0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NjgKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGA0LDQt9C80LXRgCDQvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3MAorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAi0LLRi9C50YLQuCDRgSDQvdGD0LvQtdCy0YvQvCDQutC+0LTQvtC8INCy0L7Qt9Cy0YDQsNGC0LAsINC10YHQu9C4INC90LXRgiDQvtGI0LjQsdC60LgiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzEKK21zZ2lkICJwcmV0dHktcHJpbnQgb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi0YHRgtGA0YPQutGC0YPRgNC40YDQvtCy0LDQvdC90YvQuSDQstGL0LLQvtC0INGB0L7QtNC10YDQttC40LzQvtCz0L4g0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzMKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAi0LfQsNC/0YPRgdGC0LjRgtGMIHRleGNvbnYg0L3QsCDRgdC+0LTQtdGA0LbQuNC80L7QvCDQtNCy0L7QuNGH0L3Ri9GFINC+0LHRitC10LrRgtC+0LIgIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDc1Cittc2dpZCAiYWxsb3cgLXMgYW5kIC10IHRvIHdvcmsgd2l0aCBicm9rZW4vY29ycnVwdCBvYmplY3RzIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0YwgLXMg0LggLXQg0YDQsNCx0L7RgtCw0YLRjCDRgSDQv9C+0LLRgNC10LbQtNGR0L3QvdGL0LzQuCDQvtCx0YrQtdC60YLQsNC80LgiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzYKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgItCx0YPRhNGE0LXRgNC40YDQvtCy0LDRgtGMINCy0YvQstC+0LQgLS1iYXRjaCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3OAorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQuCDRgdC+0LTQtdGA0LbQuNC80L7QtSDQvtCx0YrQtdC60YLQvtCyLCDQv9C10YDQtdC00LDQvdC90YvRhSDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDgxCittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+0LEg0L7QsdGK0LXQutGC0LDRhSwg0L/QtdGA0LXQtNCw0L3QvdGL0YUg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ4NAorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAi0L/QtdGA0LXRhdC+0LTQuNGC0Ywg0L/QviDRgdC40LzQstC+0LvRjNC90YvQvCDRgdGB0YvQu9C60LDQvCDQstC90YPRgtGA0Lgg0LTQtdGA0LXQstCwICjQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0YEg0L7Qv9GG0LjRj9C80LggLS1iYXRjaCDQuCAtLWJhdGNoLWNoZWNrKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ4NgorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0LLRgdC1INC+0LHRitC10LrRgtGLINGBINC+0L/RhtC40Y/QvNC4IC0tYmF0Y2gg0LjQu9C4IC0tYmF0Y2gtY2hlY2siCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjExCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA80LDRgtGA0LjQsdGD0YI+4oCmXSBbLS1dIDzQv9GD0YLRjD7igKYiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjEyCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+Li4uXSA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPNCw0YLRgNC40LHRg9GCPuKApl0gPCA80YHQv9C40YHQvtC6INC/0YPRgtC10Lk+IgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxOQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0LLRgdC1INCw0YLRgNC40LHRg9GC0Ysg0YPRgdGC0LDQvdC+0LLQu9C10L3QvdGL0LUg0LTQu9GPINGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIwCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4gLmdpdGF0dHJpYnV0ZXMg0LjQtyDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjEgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyMiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTYKK21zZ2lkICJyZWFkIGZpbGUgbmFtZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINC40LzQtdC90LAg0YTQsNC50LvQvtCyINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjQKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAi0L7QutC+0L3Rh9Cw0L3QuNC1INCy0LLQvtC00LAg0Lgg0LLRi9Cy0L7QtNCwINC30LDQv9C40YHQtdC5INC/0L4g0J3Qo9Cb0JXQktCe0JzQoyDRgdC40LzQstC+0LvRgyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxOCBidWlsdGluL2NoZWNrb3V0LmM6MTEzMyBidWlsdGluL2djLmM6MjY3Cittc2dpZCAic3VwcHJlc3MgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0L/RgNC+0LPRgNC10YHRgSDQstGL0L/QvtC70L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNgorbXNnaWQgInNob3cgbm9uLW1hdGNoaW5nIGlucHV0IHBhdGhzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC90LUg0YHQvtCy0L/QsNC00LDRjtGJ0LjQtSDQstCy0LXQtNC10L3QvdGL0LUg0L/Rg9GC0LgiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjgKK21zZ2lkICJpZ25vcmUgaW5kZXggd2hlbiBjaGVja2luZyIKK21zZ3N0ciAi0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC40L3QtNC10LrRgSDQv9GA0Lgg0L/RgNC+0LLQtdGA0LrQtSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNTQKK21zZ2lkICJjYW5ub3Qgc3BlY2lmeSBwYXRobmFtZXMgd2l0aCAtLXN0ZGluIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0YPQutCw0LfRi9Cy0LDRgtGMINC/0YPRgtC4INCy0LzQtdGB0YLQtSDRgSDQv9Cw0YDQsNC80LXRgtGA0L7QvCAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE1NworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiDQuNC80LXQtdGCINGB0LzRi9GB0Lsg0YLQvtC70YzQutC+INCy0LzQtdGB0YLQtSDRgSDQv9Cw0YDQsNC80LXRgtGA0L7QvCAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE1OQorbXNnaWQgIm5vIHBhdGggc3BlY2lmaWVkIgorbXNnc3RyICLQvdC1INGD0LrQsNC30LDQvSDQv9GD0YLRjCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiLS1xdWlldCDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0L/RgNC4INGD0LrQsNC30LDQvdC40Lgg0L7QtNC90L7Qs9C+INC/0YPRgtC4IgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NQorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviAtLXF1aWV0INC4IC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LLQvNC10YHRgtC1INGBIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OAorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzzQvtC/0YbQuNC4Pl0gPNC60L7QvdGC0LDQutGCPuKApiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTMKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0YLQsNC60LbQtSDRh9C40YLQsNGC0Ywg0LrQvtC90YLQsNC60YLRiyDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNC30L7QsdGA0LDRgtGMINC60L7QvdGC0LDQutGCOiAlcyIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6NDcKK21zZ2lkICJubyBjb250YWN0cyBzcGVjaWZpZWQiCittc2dzdHIgItC90LUg0YPQutCw0LfQsNC90Ysg0LrQvtC90YLQsNC60YLRiyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjEyNgorbXNnaWQgImdpdCBjaGVja291dC1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgY2hlY2tvdXQtaW5kZXggWzzQvtC/0YbQuNC4Pl0gWy0tXSBbPNGE0LDQudC7PuKApl0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODgKK21zZ2lkICJjaGVjayBvdXQgYWxsIGZpbGVzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAi0L/QtdGA0LXQudGC0Lgg0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LUg0LLRgdC10YUg0YTQsNC50LvQvtCyINC40Lcg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODkKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdCw0Y8g0L/QtdGA0LXQt9Cw0L/QuNGB0Ywg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNGFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5MQorbXNnaWQgIm5vIHdhcm5pbmcgZm9yIGV4aXN0aW5nIGZpbGVzIGFuZCBmaWxlcyBub3QgaW4gaW5kZXgiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNGPINC00LvRjyDRgdGD0YnQtdGB0YLQstGD0Y7RidC40YUg0Lgg0L3QtdC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTMKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgItC90LUg0YHQvtC30LTQsNCy0LDRgtGMINC90L7QstGL0LUg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5NQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINGB0YLQsNGC0LjRgdGC0LjQutGDINC00L7RgdGC0YPQv9CwINCyINGE0LDQudC70LUg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDEKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDRgdC/0LjRgdC+0Log0L/Rg9GC0LXQuSDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINGB0L7QtNC10YDQttC40LzQvtC1INCy0L4g0LLRgNC10LzQtdC90L3Ri9C1INGE0LDQudC70YsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDQgYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAi0YHRgtGA0L7QutCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA1Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDRgdC/0LXRgNC10LTQuCA80YHRgtGA0L7QutGDPiDQv9GA0Lgg0YHQvtC30LTQsNC90LjQuCDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDgKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAi0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0YTQsNC50LvRiyDQuNC3INGD0LrQsNC30LDQvdC90L7Qs9C+INC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gPGJyYW5jaD4iCittc2dzdHIgImdpdCBjaGVja291dCBbPNC+0L/RhtC40Lg+XSA80LLQtdGC0LrQsD4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNgorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSBbPGJyYW5jaD5dIC0tIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs80L7Qv9GG0LjQuD5dIFs80LLQtdGC0LrQsD5dIC0tIDzRhNCw0LnQuz7igKYiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzMgYnVpbHRpbi9jaGVja291dC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAi0L/Rg9GC0Ywgwqslc8K7INC90LUg0LjQvNC10LXRgiDQvdCw0YjQtdC5INCy0LXRgNGB0LjQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNSBidWlsdGluL2NoZWNrb3V0LmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgItC/0YPRgtGMIMKrJXPCuyDQvdC1INC40LzQtdC10YIg0LjRhSDQstC10YDRgdC40LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgYWxsIG5lY2Vzc2FyeSB2ZXJzaW9ucyIKK21zZ3N0ciAi0L/Rg9GC0Ywgwqslc8K7INC90LUg0LjQvNC10LXRgiDQstGB0LXRhSDQvdC10L7QsdGF0L7QtNC40LzRi9GFINCy0LXRgNGB0LjQuSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgItC/0YPRgtGMIMKrJXPCuyDQvdC1INC40LzQtdC10YIg0L3QtdC+0LHRhdC+0LTQuNC80YvRhSDQstC10YDRgdC40LkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgItC/0YPRgtGMIMKrJXPCuzog0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC70LjRgtGMIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBhZGQgbWVyZ2UgcmVzdWx0IGZvciAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC00L7QsdCw0LLQuNGC0Ywg0YDQtdC30YPQu9GM0YLQsNGCINGB0LvQuNGP0L3QuNGPIMKrJXPCuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI1MCBidWlsdGluL2NoZWNrb3V0LmM6MjUzIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTYKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICLCqyVzwrsg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQv9GA0Lgg0L7QsdC90L7QstC70LXQvdC40Lgg0L/Rg9GC0LXQuSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MiBidWlsdGluL2NoZWNrb3V0LmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiwqslc8K7INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLiIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINC+0LHQvdC+0LLQu9GP0YLRjCDQv9GD0YLQuCDQuCDQv9C10YDQtdC60LvRjtGH0LDRgtGM0YHRjyDQvdCwINCy0LXRgtC60YMgwqslc8K7INC+0LTQvdC+0LLRgNC10LzQtdC90L3Qvi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNzkgYnVpbHRpbi9jaGVja291dC5jOjQ3MworbXNnaWQgImNvcnJ1cHQgaW5kZXggZmlsZSIKK21zZ3N0ciAi0YTQsNC50Lsg0LjQvdC00LXQutGB0LAg0L/QvtCy0YDQtdC20LTQtdC9IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MzM5IGJ1aWx0aW4vY2hlY2tvdXQuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGlzIHVubWVyZ2VkIgorbXNnc3RyICLQv9GD0YLRjCDCqyVzwrsg0L3QtSDRgdC70LjRgiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ5NQorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICLRgdC90LDRh9Cw0LvQsCDQvdGD0LbQvdC+INGA0LDQt9GA0LXRiNC40YLRjCDQutC+0L3RhNC70LjQutGC0Ysg0LIg0LLQsNGI0LXQvCDRgtC10LrRg9GJ0LXQvCDQuNC90LTQtdC60YHQtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQttGD0YDQvdCw0Lsg0YHRgdGL0LvQvtC6INC00LvRjyDCqyVzwrsnOiAlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjYwCittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQg0YHQtdC50YfQsNGBINC90LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi0KHQsdGA0L7RgSDQstC10YLQutC4IMKrJXPCu1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIkFscmVhZHkgb24gJyVzJ1xuIgorbXNnc3RyICLQo9C20LUg0L3QsCDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi0J/QtdGA0LXQutC70Y7Rh9C10L3QuNC1INC4INGB0LHRgNC+0YEg0LLQtdGC0LrQuCDCqyVzwrtcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3NiBidWlsdGluL2NoZWNrb3V0LmM6MTA2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLQn9C10YDQtdC60LvRjtGH0LXQvdC+INC90LAg0L3QvtCy0YPRjiDQstC10YLQutGDIMKrJXPCu1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGJyYW5jaCAnJXMnXG4iCittc2dzdHIgItCf0LXRgNC10LrQu9GO0YfQtdC90L4g0L3QsCDQstC10YLQutGDIMKrJXPCu1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAuLi4gYW5kICVkIG1vcmUuXG4iCittc2dzdHIgIiDigKYg0Lgg0LXRidC1ICVkLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJXYXJuaW5nOiB5b3UgYXJlIGxlYXZpbmcgJWQgY29tbWl0IGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgogIlxuIgotIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCi1tc2dzdHIgIlxuR2l0ayAtINC/0YDQvtCz0YDQsNC80LzQsCDQv9GA0L7RgdC80L7RgtGA0LAg0LjRgdGC0L7RgNC40Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIGdpdFxuXG7CqSAgMjAwNS0yMDE0IFBhdWwgTWFja2VycmFzXG5cbtCY0YHQv9C+0LvRjNC30L7QstCw0L3QuNC1INC4INGA0LDRgdC/0YDQvtGB0YLRgNCw0L3QtdC90LjQtSDRgdC+0LPQu9Cw0YHQvdC+INGD0YHQu9C+0LLQuNGP0LwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCi0KLSM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Ci1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgItCX0LDQutGA0YvRgtGMIgotCi0jOiBnaXRrOjMwNDMKLW1zZ2lkICJHaXRrIGtleSBiaW5kaW5ncyIKLW1zZ3N0ciAi0J3QsNC30L3QsNGH0LXQvdC40Y8g0LrQu9Cw0LLQuNCw0YLRg9GA0Ysg0LIgR2l0ayIKLQotIzogZ2l0azozMDQ2Ci1tc2dpZCAiR2l0ayBrZXkgYmluZGluZ3M6IgotbXNnc3RyICLQndCw0LfQvdCw0YfQtdC90LjRjyDQutC70LDQstC40LDRgtGD0YDRiyDQsiBHaXRrOiIKLQotIzogZ2l0azozMDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVE+XHRcdFF1aXQiCi1tc2dzdHIgIjwlcy1RPlx0XHTQl9Cw0LLQtdGA0YjQuNGC0YwiCi0KLSM6IGdpdGs6MzA0OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCi1tc2dzdHIgIjwlcy1XPlx0XHTQl9Cw0LrRgNGL0YLRjCDQvtC60L3QviIKLQotIzogZ2l0azozMDUwCi1tc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgotbXNnc3RyICI8SG9tZT5cdFx00J/QtdGA0LXQudGC0Lgg0Log0L/QtdGA0LLQvtC80YMg0LrQvtC80LzQuNGC0YMiCi0KLSM6IGdpdGs6MzA1MQotbXNnaWQgIjxFbmQ+XHRcdE1vdmUgdG8gbGFzdCBjb21taXQiCi1tc2dzdHIgIjxFbmQ+XHRcdNCf0LXRgNC10LnRgtC4INC6INC/0L7RgdC70LXQtNC90LXQvNGDINC60L7QvNC80LjRgtGDIgotCi0jOiBnaXRrOjMwNTIKLW1zZ2lkICI8VXA+LCBwLCBrXHRNb3ZlIHVwIG9uZSBjb21taXQiCi1tc2dzdHIgIjxVcD4sIHAsIGtcdNCf0LXRgNC10LnRgtC4INC90LAg0L7QtNC40L0g0LrQvtC80LzQuNGCINCy0LLQtdGA0YUiCi0KLSM6IGdpdGs6MzA1MwotbXNnaWQgIjxEb3duPiwgbiwgalx0TW92ZSBkb3duIG9uZSBjb21taXQiCi1tc2dzdHIgIjxEb3duPiwgbiwgalx00J/QtdGA0LXQudGC0Lgg0L3QsCDQvtC00LjQvSDQutC+0LzQvNC40YIg0LLQvdC40LciCi0KLSM6IGdpdGs6MzA1NAotbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCi1tc2dzdHIgIjxMZWZ0PiwgeiwgaFx00J/QvtC60LDQt9Cw0YLRjCDRgNCw0L3QtdC1INC/0L7RgdC10YnRkdC90L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSIKLQotIzogZ2l0azozMDU1Ci1tc2dpZCAiPFJpZ2h0PiwgeCwgbFx0R28gZm9yd2FyZCBpbiBoaXN0b3J5IGxpc3QiCi1tc2dzdHIgIjxSaWdodD4sIHgsIGxcdNCf0L7QutCw0LfQsNGC0Ywg0YHQu9C10LTRg9GO0YnQuNC5INC/0L7RgdC10YnRkdC90L3Ri9C5INC60L7QvNC80LjRgiIKLQotIzogZ2l0azozMDU2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCi1tc2dzdHIgIjwlcy1uPlx00J/QtdGA0LXQudGC0Lgg0L3QsCBuINGA0L7QtNC40YLQtdC70Y8g0L7RgiDRgtC10LrRg9GJ0LXQs9C+INC60L7QvNC80LjRgtCwIgotCi0jOiBnaXRrOjMwNTcKLW1zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKLW1zZ3N0ciAiPFBhZ2VVcD5cdNCf0LXRgNC10LnRgtC4INC90LAg0YHRgtGA0LDQvdC40YbRgyDQstGL0YjQtSDQsiDRgdC/0LjRgdC60LUg0LrQvtC80LzQuNGC0L7QsiIKLQotIzogZ2l0azozMDU4Ci1tc2dpZCAiPFBhZ2VEb3duPlx0TW92ZSBkb3duIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8UGFnZURvd24+XHTQn9C10YDQtdC50YLQuCDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0L3QuNC20LUg0LIg0YHQv9C40YHQutC1INC60L7QvNC80LjRgtC+0LIiCi0KLSM6IGdpdGs6MzA1OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1Ib21lPlx0U2Nyb2xsIHRvIHRvcCBvZiBjb21taXQgbGlzdCIKLW1zZ3N0ciAiPCVzLUhvbWU+XHTQn9C10YDQtdC50YLQuCDQvdCwINC90LDRh9Cw0LvQviDRgdC/0LjRgdC60LAg0LrQvtC80LzQuNGC0L7QsiIKLQotIzogZ2l0azozMDYwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLUVuZD5cdFNjcm9sbCB0byBib3R0b20gb2YgY29tbWl0IGxpc3QiCi1tc2dzdHIgIjwlcy1FbmQ+XHTQn9C10YDQtdC50YLQuCDQvdCwINC60L7QvdC10YYg0YHQv9C40YHQutCwINC60L7QvNC80LjRgtC+0LIiCi0KLSM6IGdpdGs6MzA2MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1VcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgbGluZSIKLW1zZ3N0ciAiPCVzLVVwPlx00J/RgNC+0LLQtdGA0L3Rg9GC0Ywg0YHQv9C40YHQvtC6INC60L7QvNC80LjRgtC+0LIg0LLQstC10YDRhSIKLQotIzogZ2l0azozMDYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKLW1zZ3N0ciAiPCVzLURvd24+XHTQn9GA0L7QstC10YDQvdGD0YLRjCDRgdC/0LjRgdC+0Log0LrQvtC80LzQuNGC0L7QsiDQstC90LjQtyIKLQotIzogZ2l0azozMDYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPCVzLVBhZ2VVcD5cdNCf0YDQvtCy0LXRgNC90YPRgtGMINGB0L/QuNGB0L7QuiDQutC+0LzQvNC40YLQvtCyINC90LAg0YHRgtGA0LDQvdC40YbRgyDQstCy0LXRgNGFIgotCi0jOiBnaXRrOjMwNjQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtUGFnZURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgcGFnZSIKLW1zZ3N0ciAiPCVzLVBhZ2VEb3duPlx00J/RgNC+0LLQtdGA0L3Rg9GC0Ywg0YHQv9C40YHQvtC6INC60L7QvNC80LjRgtC+0LIg0L3QsCDRgdGC0YDQsNC90LjRhtGDINCy0L3QuNC3IgotCi0jOiBnaXRrOjMwNjUKLW1zZ2lkICI8U2hpZnQtVXA+XHRGaW5kIGJhY2t3YXJkcyAodXB3YXJkcywgbGF0ZXIgY29tbWl0cykiCi1tc2dzdHIgIjxTaGlmdC1VcD5cdNCf0L7QuNGB0Log0LIg0L7QsdGA0LDRgtC90L7QvCDQv9C+0YDRj9C00LrQtSAo0LLQstC10YDRhSwg0YHRgNC10LTQuCDQvdC+0LLRi9GFINC60L7QvNC80LjRgtC+0LIpIgotCi0jOiBnaXRrOjMwNjYKLW1zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKLW1zZ3N0ciAiPFNoaWZ0LURvd24+XHTQn9C+0LjRgdC6ICjQstC90LjQtywg0YHRgNC10LTQuCDRgdGC0LDRgNGL0YUg0LrQvtC80LzQuNGC0L7QsikiCi0KLSM6IGdpdGs6MzA2NwotbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgotbXNnc3RyICI8RGVsZXRlPiwgYlx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0LLRi9GI0LUiCi0KLSM6IGdpdGs6MzA2OAotbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgotbXNnc3RyICI8QmFja3NwYWNlPlx00J/RgNC+0LrRgNGD0YLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQvdCwINGB0YLRgNCw0L3QuNGG0YMg0LLRi9GI0LUiCi0KLSM6IGdpdGs6MzA2OQotbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgotbXNnc3RyICI8TGVlcnRhc3RlPlx0XHTQn9GA0L7QutGA0YPRgtC40YLRjCDRgdC/0LjRgdC+0Log0LjQt9C80LXQvdC10L3QuNC5INC90LAg0YHRgtGA0LDQvdC40YbRgyDQvdC40LbQtSIKLQotIzogZ2l0azozMDcwCi1tc2dpZCAidVx0XHRTY3JvbGwgZGlmZiB2aWV3IHVwIDE4IGxpbmVzIgotbXNnc3RyICJ1XHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCAxOCDRgdGC0YDQvtC6INCy0LLQtdGA0YUiCi0KLSM6IGdpdGs6MzA3MQotbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgotbXNnc3RyICJkXHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0L3QsCAxOCDRgdGC0YDQvtC6INCy0L3QuNC3IgotCi0jOiBnaXRrOjMwNzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtRj5cdFx0RmluZCIKLW1zZ3N0ciAiPCVzLUY+XHRcdNCf0L7QuNGB0LoiCi0KLSM6IGdpdGs6MzA3MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1HPlx0XHRNb3ZlIHRvIG5leHQgZmluZCBoaXQiCi1tc2dzdHIgIjwlcy1HPlx0XHTQn9C10YDQtdC50YLQuCDQuiDRgdC70LXQtNGD0Y7RidC10LzRgyDQvdCw0LnQtNC10L3QvdC+0LzRgyDQutC+0LzQvNC40YLRgyIKLQotIzogZ2l0azozMDc0Ci1tc2dpZCAiPFJldHVybj5cdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKLW1zZ3N0ciAiPFJldHVybj5cdNCf0LXRgNC10LnRgtC4INC6INGB0LvQtdC00YPRjtGJ0LXQvNGDINC90LDQudC00LXQvdC90L7QvNGDINC60L7QvNC80LjRgtGDIgotCi0jOiBnaXRrOjMwNzUKLW1zZ2lkICJnXHRcdEdvIHRvIGNvbW1pdCIKLW1zZ3N0ciAiZ1x0XHTQn9C10YDQtdC50YLQuCDQvdCwINC60L7QvNC80LjRgiIKLQotIzogZ2l0azozMDc2Ci1tc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKLW1zZ3N0ciAiL1x0XHTQn9C10YDQtdC50YLQuCDQuiDQv9C+0LvRjiDQv9C+0LjRgdC60LAiCi0KLSM6IGdpdGs6MzA3NwotbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKLW1zZ3N0ciAiP1x0XHTQn9C10YDQtdC50YLQuCDQuiDQv9GA0LXQtNGL0LTRg9GJ0LXQvNGDINC90LDQudC00LXQvdC90L7QvNGDINC60L7QvNC80LjRgtGDIgotCi0jOiBnaXRrOjMwNzgKLW1zZ2lkICJmXHRcdFNjcm9sbCBkaWZmIHZpZXcgdG8gbmV4dCBmaWxlIgotbXNnc3RyICJmXHRcdNCf0YDQvtC60YDRg9GC0LjRgtGMINGB0L/QuNGB0L7QuiDQuNC30LzQtdC90LXQvdC40Lkg0Log0YHQu9C10LTRg9GO0YnQtdC80YMg0YTQsNC50LvRgyIKLQotIzogZ2l0azozMDc5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgotbXNnc3RyICI8JXMtUz5cdFx00J/RgNC+0LTQvtC70LbQuNGC0Ywg0L/QvtC40YHQuiDQsiDRgdC/0LjRgdC60LUg0LjQt9C80LXQvdC10L3QuNC5IgotCi0jOiBnaXRrOjMwODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgotbXNnc3RyICI8JXMtUj5cdFx00J/QtdGA0LXQudGC0Lgg0Log0L/RgNC10LTRi9C00YPRidC10LzRgyDQvdCw0LnQtNC10L3QvdC+0LzRgyDRgtC10LrRgdGC0YMg0LIg0YHQv9C40YHQutC1INC40LfQvNC10L3QtdC90LjQuSIKLQotIzogZ2l0azozMDgxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLUtQKz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLUtQKz5cdNCj0LLQtdC70LjRh9C40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgotCi0jOiBnaXRrOjMwODIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLXBsdXM+XHTQo9Cy0LXQu9C40YfQuNGC0Ywg0YDQsNC30LzQtdGAINGI0YDQuNGE0YLQsCIKLQotIzogZ2l0azozMDgzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLUtQLT5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLUtQLT5cdNCj0LzQtdC90YzRiNC40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgotCi0jOiBnaXRrOjMwODQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1taW51cz5cdNCj0LzQtdC90YzRiNC40YLRjCDRgNCw0LfQvNC10YAg0YjRgNC40YTRgtCwIgotCi0jOiBnaXRrOjMwODUKLW1zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKLW1zZ3N0ciAiPEY1Plx0XHTQntCx0L3QvtCy0LjRgtGMIgotCi0jOiBnaXRrOjM1NTAgZ2l0azozNTU5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlczoiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDRgdC+0LfQtNCw0L3QuNGPINCy0YDQtdC80LXQvdC90L7Qs9C+INC60LDRgtCw0LvQvtCz0LAgJXM6IgotCi0jOiBnaXRrOjM1NzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIFwiJXNcIiBmcm9tICVzOiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINC/0L7Qu9GD0YfQtdC90LjRjyDCqyVzwrsg0LjQtyAlczoiCi0KLSM6IGdpdGs6MzYzNQotbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKLW1zZ3N0ciAi0L7RiNC40LHQutCwINCy0YvQv9C+0LvQvdC10L3QuNGPINC60L7QvNCw0L3QtNGLOiIKLQotIzogZ2l0azozNzg0Ci1tc2dpZCAiTm8gc3VjaCBjb21taXQiCi1tc2dzdHIgItCa0L7QvNC80LjRgiDQvdC1INC90LDQudC00LXQvSIKLQotIzogZ2l0azozNzk4Ci1tc2dpZCAiZ2l0IGd1aSBibGFtZTogY29tbWFuZCBmYWlsZWQ6IgotbXNnc3RyICJnaXQgZ3VpIGJsYW1lOiDQvtGI0LjQsdC60LAg0LLRi9C/0L7Qu9C90LXQvdC40Y8g0LrQvtC80LDQvdC00Ys6IgotCi0jOiBnaXRrOjM4MjkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb3VsZG4ndCByZWFkIG1lcmdlIGhlYWQ6ICVzIgotbXNnc3RyICLQntGI0LjQsdC60LAg0YfRgtC10L3QuNGPIE1FUkdFX0hFQUQ6ICVzIgotCi0jOiBnaXRrOjM4MzcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINGH0YLQtdC90LjRjyDQuNC90LTQtdC60YHQsDogJXMiCi0KLSM6IGdpdGs6Mzg2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQt9Cw0L/Rg9GB0LrQsCBnaXQgYmxhbWU6ICVzIgotCi0jOiBnaXRrOjM4NjUgZ2l0azo2NzU0Ci1tc2dpZCAiU2VhcmNoaW5nIgotbXNnc3RyICLQn9C+0LjRgdC6IgotCi0jOiBnaXRrOjM4OTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyBnaXQgYmxhbWU6ICVzIgotCi0jOiBnaXRrOjM5MjUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUaGF0IGxpbmUgY29tZXMgZnJvbSBjb21taXQgJXMsICB3aGljaCBpcyBub3QgaW4gdGhpcyB2aWV3IgotbXNnc3RyICLQrdGC0LAg0YHRgtGA0L7QutCwINC/0YDQuNC90LDQtNC70LXQttC40YIg0LrQvtC80LzQuNGC0YMgJXMsINC60L7RgtC+0YDRi9C5INC90LUg0L/QvtC60LDQt9Cw0L0g0LIg0Y3RgtC+0Lwg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LgiCi0KLSM6IGdpdGs6MzkzOQotbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQstGL0L/QvtC70L3QtdC90LjRjyDQv9GA0L7Qs9GA0LDQvNC80Ysg0YHRgNCw0LLQvdC10L3QuNGPOiIKLQotIzogZ2l0azo0MDcwCi1tc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCi1tc2dzdHIgIkdpdGsg0L7Qv9GA0LXQtNC10LvQtdC90LjQtSDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuSIKLQotIzogZ2l0azo0MDc0Ci1tc2dpZCAiUmVtZW1iZXIgdGhpcyB2aWV3IgotbXNnc3RyICLQl9Cw0L/QvtC80L3QuNGC0Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40LUiCi0KLSM6IGdpdGs6NDA3NQotbXNnaWQgIlJlZmVyZW5jZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KToiCi1tc2dzdHIgItCh0YHRi9C70LrQuCAo0YDQsNC30LTQtdC70ZHQvdC90YvQtSDQv9GA0L7QsdC10LvQvtC8KToiCi0KLSM6IGdpdGs6NDA3NgotbXNnaWQgIkJyYW5jaGVzICYgdGFnczoiCi1tc2dzdHIgItCS0LXRgtC60Lgg0Lgg0LzQtdGC0LrQuCIKLQotIzogZ2l0azo0MDc3Ci1tc2dpZCAiQWxsIHJlZnMiCi1tc2dzdHIgItCS0YHQtSDRgdGB0YvQu9C60LgiCi0KLSM6IGdpdGs6NDA3OAotbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgotbXNnc3RyICLQktGB0LUgKNC70L7QutCw0LvRjNC90YvQtSkg0LLQtdGC0LrQuCIKLQotIzogZ2l0azo0MDc5Ci1tc2dpZCAiQWxsIHRhZ3MiCi1tc2dzdHIgItCS0YHQtSDQvNC10YLQutC4IgotCi0jOiBnaXRrOjQwODAKLW1zZ2lkICJBbGwgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgotbXNnc3RyICLQktGB0LUg0LLQvdC10YjQvdC40LUg0L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0LLQtdGC0LrQuCIKLQotIzogZ2l0azo0MDgxCi1tc2dpZCAiQ29tbWl0IEluZm8gKHJlZ3VsYXIgZXhwcmVzc2lvbnMpOiIKLW1zZ3N0ciAi0JjQvdGE0L7RgNC80LDRhtC40Y8g0L4g0LrQvtC80LzQuNGC0LUgKNGA0LXQs9GD0LvRj9GA0L3Ri9C1INCy0YvRgNCw0LbQtdC90LjRjyk6IgotCi0jOiBnaXRrOjQwODIKLW1zZ2lkICJBdXRob3I6IgotbXNnc3RyICLQkNCy0YLQvtGAOiIKLQotIzogZ2l0azo0MDgzCi1tc2dpZCAiQ29tbWl0dGVyOiIKLW1zZ3N0ciAi0JrQvtC80LzQuNGC0LXRgDoiCi0KLSM6IGdpdGs6NDA4NAotbXNnaWQgIkNvbW1pdCBNZXNzYWdlOiIKLW1zZ3N0ciAi0KHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwOiIKLQotIzogZ2l0azo0MDg1Ci1tc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCi1tc2dzdHIgItCh0L7QstC/0LDQtNCw0LXRgiDRgdC+INCy0YHQtdC80Lgg0YPRgdC70L7QstC40Y/QvNC4INC40L3RhNC+0YDQvNCw0YbQuNC4INC+INC60L7QvNC80LjRgtC1IgotCi0jOiBnaXRrOjQwODYKLW1zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgotbXNnc3RyICLQndC1INGB0L7QstC/0LDQtNCw0LXRgiDRgSDRg9GB0LvQvtCy0LjRj9C80Lgg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L4g0LrQvtC80LzQuNGC0LUiCi0KLSM6IGdpdGs6NDA4NwotbXNnaWQgIkNoYW5nZXMgdG8gRmlsZXM6IgotbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y8g0YTQsNC50LvQvtCyOiIKLQotIzogZ2l0azo0MDg4Ci1tc2dpZCAiRml4ZWQgU3RyaW5nIgotbXNnc3RyICLQntCx0YvRh9C90LDRjyDRgdGC0YDQvtC60LAiCi0KLSM6IGdpdGs6NDA4OQotbXNnaWQgIlJlZ3VsYXIgRXhwcmVzc2lvbiIKLW1zZ3N0ciAi0KDQtdCz0YPQu9GP0YDQvdC+0LUg0LLRi9GA0LDQttC10L3QuNC1OiIKLQotIzogZ2l0azo0MDkwCi1tc2dpZCAiU2VhcmNoIHN0cmluZzoiCi1tc2dzdHIgItCh0YLRgNC+0LrQsCDQtNC70Y8g0L/QvtC40YHQutCwOiIKLQotIzogZ2l0azo0MDkxCi1tc2dpZCAiIgotIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCi0iMTU6Mjc6MzhcIik6IgotbXNnc3RyICLQlNCw0YLRiyDQutC+0LzQvNC40YLQsCAowqsyINC90LXQtNC10LvQuCDQvdCw0LfQsNC0wrssIMKrMjAwOS0wMy0xNyAxNToyNzozOMK7LCDCqzE3INC80LDRgNGC0LAgMjAwOSAxNToyNzozOMK7KToiCi0KLSM6IGdpdGs6NDA5MgotbXNnaWQgIlNpbmNlOiIKLW1zZ3N0ciAi0KEg0LTQsNGC0Ys6IgotCi0jOiBnaXRrOjQwOTMKLW1zZ2lkICJVbnRpbDoiCi1tc2dzdHIgItCf0L4g0LTQsNGC0YM6IgotCi0jOiBnaXRrOjQwOTQKLW1zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKLW1zZ3N0ciAi0J7Qs9GA0LDQvdC40YfQuNGC0Ywg0Lgv0LjQu9C4INC/0YDQvtC/0YPRgdGC0LjRgtGMINC60L7Qu9C40YfQtdGB0YLQstC+INGA0LXQtNCw0LrRhtC40LkgKNC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3QvtC1INGH0LjRgdC70L4pOiIKLQotIzogZ2l0azo0MDk1Ci1tc2dpZCAiTnVtYmVyIHRvIHNob3c6IgotbXNnc3RyICLQn9C+0LrQsNC30LDRgtGMINC60L7Qu9C40YfQtdGB0YLQstC+OiIKLQotIzogZ2l0azo0MDk2Ci1tc2dpZCAiTnVtYmVyIHRvIHNraXA6IgotbXNnc3RyICLQn9GA0L7Qv9GD0YHRgtC40YLRjCDQutC+0LvQuNGH0LXRgdGC0LLQvjoiCi0KLSM6IGdpdGs6NDA5NwotbXNnaWQgIk1pc2NlbGxhbmVvdXMgb3B0aW9uczoiCi1tc2dzdHIgItCg0LDQt9C70LjRh9C90YvQtSDQvtC/0YbQuNC4OiIKLQotIzogZ2l0azo0MDk4Ci1tc2dpZCAiU3RyaWN0bHkgc29ydCBieSBkYXRlIgotbXNnc3RyICLQodGC0YDQvtCz0LDRjyDRgdC+0YDRgtC40YDQvtCy0LrQsCDQv9C+INC00LDRgtC1IgotCi0jOiBnaXRrOjQwOTkKLW1zZ2lkICJNYXJrIGJyYW5jaCBzaWRlcyIKLW1zZ3N0ciAi0J7RgtC80LXRgtC40YLRjCDRgdGC0L7RgNC+0L3RiyDQstC10YLQvtC6IgotCi0jOiBnaXRrOjQxMDAKLW1zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCi1tc2dzdHIgItCe0LPRgNCw0L3QuNGH0LjRgtGMINC/0LXRgNCy0YvQvCDQv9GA0LXQtNC60L7QvCIKLQotIzogZ2l0azo0MTAxCi1tc2dpZCAiU2ltcGxlIGhpc3RvcnkiCi1tc2dzdHIgItCj0L/RgNC+0YnQtdC90L3QsNGPINC40YHRgtC+0YDQuNGPIgotCi0jOiBnaXRrOjQxMDIKLW1zZ2lkICJBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBnaXQgbG9nOiIKLW1zZ3N0ciAi0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQsNGA0LPRg9C80LXQvdGC0Ysg0LTQu9GPIGdpdCBsb2c6IgotCi0jOiBnaXRrOjQxMDMKLW1zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKLW1zZ3N0ciAi0KTQsNC50LvRiyDQuCDQutCw0YLQsNC70L7Qs9C4INC00LvRjyDQvtCz0YDQsNC90LjRh9C10L3QuNGPINC40YHRgtC+0YDQuNC4LCDQv9C+INC+0LTQvdC+0LzRgyDQvdCwINGB0YLRgNC+0LrRgzoiCi0KLSM6IGdpdGs6NDEwNAotbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgotbXNnc3RyICLQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QsNGPINC60L7QvNCw0L3QtNCwINC00LvRjyDRgdC/0LjRgdC60LAg0LrQvtC80LzQuNGC0L7QsjoiCi0KLSM6IGdpdGs6NDIyOAotbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKLW1zZ3N0ciAiR2l0azog0LjQt9C80LXQvdC40YLRjCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQtSIKLQotIzogZ2l0azo0MjM2Ci1tc2dpZCAiLS0gY3JpdGVyaWEgZm9yIHNlbGVjdGluZyByZXZpc2lvbnMiCi1tc2dzdHIgIuKAlCDQutGA0LjRgtC10YDQuNC5INC/0L7QuNGB0LrQsCDRgNC10LTQsNC60YbQuNC5IgotCi0jOiBnaXRrOjQyNDEKLW1zZ2lkICJWaWV3IE5hbWUiCi1tc2dzdHIgItCY0LzRjyDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjRjyIKLQotIzogZ2l0azo0MzE2Ci1tc2dpZCAiQXBwbHkgKEY1KSIKLW1zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGMIChGNSkiCi0KLSM6IGdpdGs6NDM1NAotbXNnaWQgIkVycm9yIGluIGNvbW1pdCBzZWxlY3Rpb24gYXJndW1lbnRzOiIKLW1zZ3N0ciAi0J7RiNC40LHQutCwINCyINC/0LDRgNCw0LzQtdGC0YDQsNGFINCy0YvQsdC+0YDQsCDQutC+0LzQvNC40YLQvtCyOiIKLQotIzogZ2l0azo0NDA5IGdpdGs6NDQ2MiBnaXRrOjQ5MjQgZ2l0azo0OTM4IGdpdGs6NjIwOCBnaXRrOjEyMzczIGdpdGs6MTIzNzQKLW1zZ2lkICJOb25lIgotbXNnc3RyICLQndC4INC+0LTQvdC+0LPQviIKLQotIzogZ2l0azo1MDIxIGdpdGs6NTAyNgotbXNnaWQgIkRlc2NlbmRhbnQiCi1tc2dzdHIgItCf0L7RgNC+0LbQtNGR0L3QvdC+0LUiCi0KLSM6IGdpdGs6NTAyMgotbXNnaWQgIk5vdCBkZXNjZW5kYW50IgotbXNnc3RyICLQndC1INC/0L7RgNC+0LbQtNGR0L3QvdC+0LUiCi0KLSM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKLW1zZ2lkICJBbmNlc3RvciIKLW1zZ3N0ciAi0J/RgNC10LTQvtC6IgotCi0jOiBnaXRrOjUwMzAKLW1zZ2lkICJOb3QgYW5jZXN0b3IiCi1tc2dzdHIgItCd0LUg0L/RgNC10LTQvtC6IgotCi0jOiBnaXRrOjUzMjQKLW1zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCi1tc2dzdHIgItCf0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8iCi0KLSM6IGdpdGs6NTM2MAotbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgotbXNnc3RyICLQndC10L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyIKLQotIzogZ2l0azo3MTM0Ci1tc2dpZCAiYW5kIG1hbnkgbW9yZSIKLW1zZ3N0ciAi0Lgg0LzQvdC+0LPQvtC1INC00YDRg9Cz0L7QtSIKLQotIzogZ2l0azo3MTM3Ci1tc2dpZCAibWFueSIKLW1zZ3N0ciAi0LzQvdC+0LPQviIKLQotIzogZ2l0azo3MzI4Ci1tc2dpZCAiVGFnczoiCi1tc2dzdHIgItCc0LXRgtC60Lg6IgotCi0jOiBnaXRrOjczNDUgZ2l0azo3MzUxIGdpdGs6ODgyNQotbXNnaWQgIlBhcmVudCIKLW1zZ3N0ciAi0J/RgNC10LTQvtC6IgotCi0jOiBnaXRrOjczNTYKLW1zZ2lkICJDaGlsZCIKLW1zZ3N0ciAi0J/QvtGC0L7QvNC+0LoiCi0KLSM6IGdpdGs6NzM2NQotbXNnaWQgIkJyYW5jaCIKLW1zZ3N0ciAi0JLQtdGC0LrQsCIKLQotIzogZ2l0azo3MzY4Ci1tc2dpZCAiRm9sbG93cyIKLW1zZ3N0ciAi0KHQu9C10LTRg9C10YIg0LfQsCIKLQotIzogZ2l0azo3MzcxCi1tc2dpZCAiUHJlY2VkZXMiCi1tc2dzdHIgItCf0YDQtdC00YjQtdGB0YLQstGD0LXRgiIKLQotIzogZ2l0azo3OTY2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBkaWZmczogJXMiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDQv9C+0LvRg9GH0LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5OiAlcyIKLQotIzogZ2l0azo4NjUwCi1tc2dpZCAiR290bzoiCi1tc2dzdHIgItCf0LXRgNC10LnRgtC4INC6OiIKLQotIzogZ2l0azo4NjcxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU2hvcnQgU0hBMSBpZCAlcyBpcyBhbWJpZ3VvdXMiCi1tc2dzdHIgItCh0L7QutGA0LDRidGR0L3QvdGL0LkgU0hBMSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCAlcyDQvdC10L7QtNC90L7Qt9C90LDRh9C10L0iCi0KLSM6IGdpdGs6ODY3OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAi0KDQtdC00LDQutGG0LjRjyAlcyDQvdC1INC90LDQudC00LXQvdCwIgotCi0jOiBnaXRrOjg2ODgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAiU0hBMSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCAlcyDQvdC1INC90LDQudC00LXQvSIKLQotIzogZ2l0azo4NjkwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGluIHRoZSBjdXJyZW50IHZpZXciCi1tc2dzdHIgItCg0LXQtNCw0LrRhtC40Y8gJXMg0L3QtSDQvdCw0LnQtNC10L3QsCDQsiDRgtC10LrRg9GJ0LXQvCDQv9GA0LXQtNGB0YLQsNCy0LvQtdC90LjQuCIKLQotIzogZ2l0azo4ODMyIGdpdGs6ODg0NwotbXNnaWQgIkRhdGUiCi1tc2dzdHIgItCU0LDRgtCwIgotCi0jOiBnaXRrOjg4MzUKLW1zZ2lkICJDaGlsZHJlbiIKLW1zZ3N0ciAi0J/QvtGC0L7QvNC60LgiCi0KLSM6IGdpdGs6ODg5OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0ICVzIGJyYW5jaCB0byBoZXJlIgotbXNnc3RyICLQodCx0YDQvtGB0LjRgtGMINCy0LXRgtC60YMgJXMg0L3QsCDRjdGC0L7RgiDQutC+0LzQvNC40YIiCi0KLSM6IGdpdGs6ODkwMAotbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgotbXNnc3RyICLQmtC+0LzQvNC40YIg0L3QtSDQv9GA0LjQvdCw0LTQu9C10LbQuNGCINC90Lgg0L7QtNC90L7QuSDQstC10YLQutC1LCDRgdCx0YDQvtGB0LjRgtGMINC90LXQstC+0LfQvNC+0LbQvdC+IgotCi0jOiBnaXRrOjkwMDUgZ2l0azo5MDExCi1tc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKLW1zZ3N0ciAi0J/RgNC+0L/Rg9GB0LrQsNGOINC60L7QvNC80LjRgi3RgdC70LjRj9C90LjQtSIKLQotIzogZ2l0azo5MDIwIGdpdGs6OTAyNQotbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKLW1zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC/0LDRgtGH0LAg0LTQu9GPICIKLQotIzogZ2l0azo5MDIxIGdpdGs6OTAyNgotbXNnaWQgIiAtIHN0b3BwaW5nXG4iCi1tc2dzdHIgIiDigJQg0L7RgdGC0LDQvdC+0LJcbiIKLQotIzogZ2l0azo5MDMxIGdpdGs6OTAzNCBnaXRrOjkwNDIgZ2l0azo5MDU2IGdpdGs6OTA2NQotbXNnaWQgIkNvbW1pdCAiCi1tc2dzdHIgItCa0L7QvNC80LjRgiIKLQotIzogZ2l0azo5MDM1Ci1tc2dpZCAiIgotIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgotIiAgICAgICAiCi1tc2dzdHIgIiDRgtCw0LrQvtC5INC20LUg0L/QsNGC0YcsINC60LDQuiDQuFxuICAgICAgICIKLQotIzogZ2l0azo5MDQzCi1tc2dpZCAiIgotIiBkaWZmZXJzIGZyb21cbiIKLSIgICAgICAgIgotbXNnc3RyICIg0L7RgtC70LjRh9Cw0LXRgtGB0Y8g0L7RglxuICAgICAgICIKLQotIzogZ2l0azo5MDQ1Ci1tc2dpZCAiIgotIkRpZmYgb2YgY29tbWl0czpcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCiAiXG4iCi1tc2dzdHIgItCg0LDQt9C70LjRh9C40Y8g0LrQvtC80LzQuNGC0L7QsjpcblxuIgorIiVzXG4iCittc2dzdHJbMF0gItCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INCy0Ysg0L7RgdGC0LDQstC70Y/QtdGC0LUg0L/QvtC30LDQtNC4ICVkINC60L7QvNC80LjRgiDQvdC1INGB0L7QtdC00LjQvdC10L3QvdGD0Y4g0L3QuCDRgSDQvtC00L3QvtC5INC40Lcg0LLQsNGI0LjRhSDQstC10YLQvtC6OlxuXG4lc1xuIgorbXNnc3RyWzFdICLQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDQstGLINC+0YHRgtCw0LLQu9GP0LXRgtC1INC/0L7Qt9Cw0LTQuCAlZCDQutC+0LzQvNC40YLQsCDQvdC1INGB0L7QtdC00LjQvdC10L3QvdGL0LUg0L3QuCDRgSDQvtC00L3QvtC5INC40Lcg0LLQsNGI0LjRhSDQstC10YLQvtC6OlxuXG4lc1xuIgorbXNnc3RyWzJdICLQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDQstGLINC+0YHRgtCw0LLQu9GP0LXRgtC1INC/0L7Qt9Cw0LTQuCAlZCDQutC+0LzQvNC40YLQvtCyINC90LUg0YHQvtC10LTQuNC90LXQvdC90YvQtSDQvdC4INGBINC+0LTQvdC+0Lkg0LjQtyDQstCw0YjQuNGFINCy0LXRgtC+0Lo6XG5cbiVzXG4iCittc2dzdHJbM10gItCf0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LU6INCy0Ysg0L7RgdGC0LDQstC70Y/QtdGC0LUg0L/QvtC30LDQtNC4ICVkINC60L7QvNC80LjRgtC+0LIg0L3QtSDRgdC+0LXQtNC40L3QtdC90L3Ri9C1INC90Lgg0YEg0L7QtNC90L7QuSDQuNC3INCy0LDRiNC40YUg0LLQtdGC0L7QujpcblxuJXNcbiIKIAotIzogZ2l0azo5MDU3IGdpdGs6OTA2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIiBoYXMgJXMgY2hpbGRyZW4gLSBzdG9wcGluZ1xuIgotbXNnc3RyICIg0Y/QstC70Y/QtdGC0YHRjyAlcyDQv9C+0YLQvtC80LrQvtC8IOKAlCDQvtGB0YLQsNC90L7QslxuIgotCi0jOiBnaXRrOjkwODUKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdCB0byBmaWxlOiAlcyIKLW1zZ3N0ciAi0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsCDQv9GA0Lgg0LfQsNC/0LjRgdC4INC60L7QvNC80LjRgtCwINCyINGE0LDQudC7OiAlcyIKLQotIzogZ2l0azo5MDkxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKLW1zZ3N0ciAi0J/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsCDQv9GA0Lgg0LLRi9Cy0L7QtNC1INGA0LDQt9C70LjRh9C40Lkg0LrQvtC80LzQuNGC0L7QsjogJXMiCi0KLSM6IGdpdGs6OTEzNwotbXNnaWQgIlRvcCIKLW1zZ3N0ciAi0JLQtdGA0YUiCi0KLSM6IGdpdGs6OTEzOAotbXNnaWQgIkZyb20iCi1tc2dzdHIgItCe0YIiCi0KLSM6IGdpdGs6OTE0MwotbXNnaWQgIlRvIgotbXNnc3RyICLQlNC+IgotCi0jOiBnaXRrOjkxNjcKLW1zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKLW1zZ3N0ciAi0KHQvtC30LTQsNGC0Ywg0L/QsNGC0YciCi0KLSM6IGdpdGs6OTE2OQotbXNnaWQgIkZyb206IgotbXNnc3RyICLQntGCOiIKLQotIzogZ2l0azo5MTc4Ci1tc2dpZCAiVG86IgotbXNnc3RyICLQlNC+OiIKLQotIzogZ2l0azo5MTg3Ci1tc2dpZCAiUmV2ZXJzZSIKLW1zZ3N0ciAi0JIg0L7QsdGA0LDRgtC90L7QvCDQv9C+0YDRj9C00LrQtSIKLQotIzogZ2l0azo5MTg5IGdpdGs6OTM4NQotbXNnaWQgIk91dHB1dCBmaWxlOiIKLW1zZ3N0ciAi0KTQsNC50Lsg0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPOiIKLQotIzogZ2l0azo5MTk1Ci1tc2dpZCAiR2VuZXJhdGUiCi1tc2dzdHIgItCh0L7Qt9C00LDRgtGMIgotCi0jOiBnaXRrOjkyMzMKLW1zZ2lkICJFcnJvciBjcmVhdGluZyBwYXRjaDoiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDRgdC+0LfQtNCw0L3QuNGPINC/0LDRgtGH0LA6IgotCi0jOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAotbXNnaWQgIklEOiIKLW1zZ3N0ciAiSUQ6IgotCi0jOiBnaXRrOjkyNjUKLW1zZ2lkICJUYWcgbmFtZToiCi1tc2dzdHIgItCY0LzRjyDQvNC10YLQutC4OiIKLQotIzogZ2l0azo5MjY4Ci1tc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCi1tc2dzdHIgItCe0L/QuNGB0LDQvdC40LUg0LzQtdGC0LrQuCDRg9C60LDQt9GL0LLQsNGC0Ywg0L3QtSDQvtCx0Y/Qt9Cw0YLQtdC70YzQvdC+IgotCi0jOiBnaXRrOjkyNzAKLW1zZ2lkICJUYWcgbWVzc2FnZToiCi1tc2dzdHIgItCe0L/QuNGB0LDQvdC40LUg0LzQtdGC0LrQuDoiCi0KLSM6IGdpdGs6OTI3NCBnaXRrOjk0MzkKLW1zZ2lkICJDcmVhdGUiCi1tc2dzdHIgItCh0L7Qt9C00LDRgtGMIgotCi0jOiBnaXRrOjkyOTIKLW1zZ2lkICJObyB0YWcgbmFtZSBzcGVjaWZpZWQiCi1tc2dzdHIgItCd0LUg0LfQsNC00LDQvdC+INC40LzRjyDQvNC10YLQutC4IgotCi0jOiBnaXRrOjkyOTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgotbXNnc3RyICLQnNC10YLQutCwIMKrJXPCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCi0KLSM6IGdpdGs6OTMwNgotbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDRgdC+0LfQtNCw0L3QuNGPINC80LXRgtC60Lg6IgotCi0jOiBnaXRrOjkzODIKLW1zZ2lkICJDb21tYW5kOiIKLW1zZ3N0ciAi0JrQvtC80LDQvdC00LA6IgotCi0jOiBnaXRrOjkzOTAKLW1zZ2lkICJXcml0ZSIKLW1zZ3N0ciAi0JfQsNC/0LjRgdGMIgotCi0jOiBnaXRrOjk0MDgKLW1zZ2lkICJFcnJvciB3cml0aW5nIGNvbW1pdDoiCi1tc2dzdHIgItCf0YDQvtC40LfQvtGI0LvQsCDQvtGI0LjQsdC60LAg0L/RgNC4INC30LDQv9C40YHQuCDQutC+0LzQvNC40YLQsDoiCi0KLSM6IGdpdGs6OTQzNQotbXNnaWQgIk5hbWU6IgotbXNnc3RyICLQmNC80Y86IgotCi0jOiBnaXRrOjk0NTgKLW1zZ2lkICJQbGVhc2Ugc3BlY2lmeSBhIG5hbWUgZm9yIHRoZSBuZXcgYnJhbmNoIgotbXNnc3RyICLQo9C60LDQttC40YLQtSDQuNC80Y8g0LTQu9GPINC90L7QstC+0Lkg0LLQtdGC0LrQuCIKLQotIzogZ2l0azo5NDYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCi1tc2dzdHIgItCS0LXRgtC60LAgwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4g0J/QtdGA0LXQv9C40YHQsNGC0Yw/IgotCi0jOiBnaXRrOjk1MzAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb21taXQgJXMgaXMgYWxyZWFkeSBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJlLWFwcGx5IGl0PyIKLW1zZ3N0ciAi0JrQvtC80LzQuNGCICVzINGD0LbQtSDQstC60LvRjtGH0ZHQvSDQsiDQstC10YLQutGDICVzLiDQn9GA0L7QtNC+0LvQttC40YLRjCDQvtC/0LXRgNCw0YbQuNGOPyIKLQotIzogZ2l0azo5NTM1Ci1tc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCi1tc2dzdHIgItCa0L7Qv9C40YDQvtCy0LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5IgotCi0jOiBnaXRrOjk1NDQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3NTUKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gZmlsZSAnJXMnLlxuIgotIlBsZWFzZSBjb21taXQsIHJlc2V0IG9yIHN0YXNoIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKLW1zZ3N0ciAi0J7RgtCx0L7RgCDQu9GD0YfRiNC10LPQviDQvdC10LLQvtC30LzQvtC20LXQvSDQuNC3LdC30LAg0LjQt9C80LXQvdC10L3QuNC5INCyINGE0LDQudC70LUgwqslc8K7Llxu0JfQsNC60L7QvNC40YLRjNGC0LUsINGB0LHRgNC+0YHRjNGC0LUg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LjQt9C80LXQvdC10L3QuNGPINC4INC/0L7QstGC0L7RgNC40YLQtSDQvtC/0LXRgNCw0YbQuNGOLiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0YHQvtGF0YDQsNC90LjRgtGMINC40YUg0YEg0L/QvtC80L7RidGM0Y4g0YHQvtC30LTQsNC90LjRjyDQvdC+0LLQvtC5INCy0LXRgtC60LgsINGC0L4g0YHQtdC50YfQsNGBINGB0LDQvNC+0LUg0LLRgNC10LzRj1xu0YHQtNC10LvQsNGC0Ywg0Y3RgtC+INGBINC/0L7QvNC+0YnRjNGOOlxuXG4gZ2l0IGJyYW5jaCA80LjQvNGPLdC90L7QstC+0Lkt0LLQtdGC0LrQuD4gJXNcblxuIgorbXNnc3RyWzFdICLQldGB0LvQuCDQstGLINGF0L7RgtC40YLQtSDRgdC+0YXRgNCw0L3QuNGC0Ywg0LjRhSDRgSDQv9C+0LzQvtGJ0YzRjiDRgdC+0LfQtNCw0L3QuNGPINC90L7QstC+0Lkg0LLQtdGC0LrQuCwg0YLQviDRgdC10LnRh9Cw0YEg0YHQsNC80L7QtSDQstGA0LXQvNGPXG7RgdC00LXQu9Cw0YLRjCDRjdGC0L4g0YEg0L/QvtC80L7RidGM0Y46XG5cbiBnaXQgYnJhbmNoIDzQuNC80Y8t0L3QvtCy0L7QuS3QstC10YLQutC4PiAlc1xuXG4iCittc2dzdHJbMl0gItCV0YHQu9C4INCy0Ysg0YXQvtGC0LjRgtC1INGB0L7RhdGA0LDQvdC40YLRjCDQuNGFINGBINC/0L7QvNC+0YnRjNGOINGB0L7Qt9C00LDQvdC40Y8g0L3QvtCy0L7QuSDQstC10YLQutC4LCDRgtC+INGB0LXQudGH0LDRgSDRgdCw0LzQvtC1INCy0YDQtdC80Y9cbtGB0LTQtdC70LDRgtGMINGN0YLQviDRgSDQv9C+0LzQvtGJ0YzRjjpcblxuIGdpdCBicmFuY2ggPNC40LzRjy3QvdC+0LLQvtC5LdCy0LXRgtC60Lg+ICVzXG5cbiIKK21zZ3N0clszXSAi0JXRgdC70Lgg0LLRiyDRhdC+0YLQuNGC0LUg0YHQvtGF0YDQsNC90LjRgtGMINC40YUg0YEg0L/QvtC80L7RidGM0Y4g0YHQvtC30LTQsNC90LjRjyDQvdC+0LLQvtC5INCy0LXRgtC60LgsINGC0L4g0YHQtdC50YfQsNGBINGB0LDQvNC+0LUg0LLRgNC10LzRj1xu0YHQtNC10LvQsNGC0Ywg0Y3RgtC+INGBINC/0L7QvNC+0YnRjNGOOlxuXG4gZ2l0IGJyYW5jaCA80LjQvNGPLdC90L7QstC+0Lkt0LLQtdGC0LrQuD4gJXNcblxuIgogCi0jOiBnaXRrOjk1NTAKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTEKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICLQstC90YPRgtGA0LXQvdC90Y/RjyDQvtGI0LjQsdC60LAg0L/RgNC4INGF0L7QttC00LXQvdC40Lgg0L/QviDRgNC10LTQsNC60YbQuNGP0LwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTUKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAi0J/RgNC10LTRi9C00YPRidCw0Y8g0L/QvtC30LjRhtC40Y8gSEVBRCDQsdGL0LvQsCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgyMiBidWlsdGluL2NoZWNrb3V0LmM6MTA2MAorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgItCS0Ysg0L3QsNGF0L7QtNC40YLQtdGB0Ywg0L3QsCDQtdGJ0LUg0L3QtSDRgdC+0LfQtNCw0L3QvdC+0Lkg0LLQtdGC0LrQtSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk2NworIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAi0L7QttC40LTQsNC10YLRgdGPINGC0L7Qu9GM0LrQviDQvtC00L3QsCDRgdGB0YvQu9C60LAsINCwINC/0LXRgNC10LTQsNC90L4gJWQuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwNiBidWlsdGluL3dvcmt0cmVlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINGB0YHRi9C70LrQsDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDM1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSBpcyBub3QgYSB0cmVlOiAlcyIKK21zZ3N0ciAi0LIg0LTQtdGA0LXQstC1INC90LXRgiDRgtCw0LrQvtC5INGB0YHRi9C70LrQuDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDc0Cittc2dpZCAicGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgItC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L/Rg9GC0Lgg0L/RgNC4INC/0LXRgNC10LrQu9GO0YfQtdC90LjQuCDQstC10YLQvtC6IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3NyBidWlsdGluL2NoZWNrb3V0LmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIMKrJXPCuyDQv9GA0Lgg0L/QtdGA0LXQutC70Y7Rh9C10L3QuNC4INCy0LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDg1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDg4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDkzCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA5NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAiwqslc8K7INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBIMKrJXPCuyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgItCd0LXQu9GM0LfRjyDQv9C10YDQtdC60LvRjtGH0LjRgtGMINCy0LXRgtC60YMg0L3QsCDQvdC1INC60L7QvNC80LjRgiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM0IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM2IGJ1aWx0aW4vY2xvbmUuYzo4MworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkgYnVpbHRpbi9yZW1vdGUuYzoxNjEgYnVpbHRpbi93b3JrdHJlZS5jOjMxNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMxOQorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAi0LLQtdGC0LrQsCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzUKK21zZ2lkICJjcmVhdGUgYW5kIGNoZWNrb3V0IGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0YHQvtC30LTQsNGC0Ywg0Lgg0L/QtdGA0LXQudGC0Lgg0L3QsCDQvdC+0LLRg9GOINCy0LXRgtC60YMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAi0YHQvtC30LTQsNGC0Ywv0YHQsdGA0L7RgdC40YLRjCDQuCDQv9C10YDQtdC50YLQuCDQvdCwINC90L7QstGD0Y4g0LLQtdGC0LrRgyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzgKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDQttGD0YDQvdCw0Lsg0YHRgdGL0LvQvtC6INC00LvRjyDQvdC+0LLQvtC5INCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM5Cittc2dpZCAiZGV0YWNoIHRoZSBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAi0L7RgtGB0L7QtdC00LjQvdC40YLRjCBIRUFEINC90LAg0YPQutCw0LfQsNC90L3QvtC8INC60L7QvNC80LjRgtC1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0MAorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLRg9GB0YLQsNC90L7QstC40YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDQstGL0YjQtdGB0YLQvtGP0YnQtdC5INCy0LXRgtC60LUg0LTQu9GPINC90L7QstC+0Lkg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDIKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICLQvdC+0LLQsNGPLdCy0LXRgtC60LAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQyCittc2dpZCAibmV3IHVucGFyZW50ZWQgYnJhbmNoIgorbXNnc3RyICLQvdC+0LLQsNGPINCy0LXRgtC60LAg0LHQtdC3INGA0L7QtNC40YLQtdC70LXQuSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDMKK21zZ2lkICJjaGVja291dCBvdXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgItC/0LXRgNC10LnRgtC4INC90LAg0L3QsNGI0YMg0LLQtdGA0YHQuNGOINC00LvRjyDQvdC1INGB0LvQuNGC0YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ1Cittc2dpZCAiY2hlY2tvdXQgdGhlaXIgdmVyc2lvbiBmb3IgdW5tZXJnZWQgZmlsZXMiCittc2dzdHIgItC/0LXRgNC10LnRgtC4INC90LAg0LjRhSDQstC10YDRgdC40Y4g0LTQu9GPINC90LUg0YHQu9C40YLRi9GFINGE0LDQudC70L7QsiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDcKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90YvQuSDQv9C10YDQtdGF0L7QtCAo0L7RgtCx0YDQsNGB0YvQstCw0LXRgiDQstGB0LUg0LvQvtC60LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ4Cittc2dpZCAicGVyZm9ybSBhIDMtd2F5IG1lcmdlIHdpdGggdGhlIG5ldyBicmFuY2giCittc2dzdHIgItCy0YvQv9C+0LvQvdC40YLRjCDRgtGA0LXRhdGF0L7QtNC+0LLQvtC1INGB0LvQuNGP0L3QuNC1INGBINC90L7QstC+0Lkg0LLQtdGC0LrQvtC5IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0OSBidWlsdGluL21lcmdlLmM6MjI3Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINC40LPQvdC+0YDQuNGA0YPQtdC80YvQtSDRhNCw0LnQu9GLICjQv9C+INGD0LzQvtC70YfQsNC90LjRjikiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTUwIGJ1aWx0aW4vbG9nLmM6MTI2NCBwYXJzZS1vcHRpb25zLmg6MjQ5Cittc2dpZCAic3R5bGUiCittc2dzdHIgItGB0YLQuNC70YwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTUxCittc2dpZCAiY29uZmxpY3Qgc3R5bGUgKG1lcmdlIG9yIGRpZmYzKSIKK21zZ3N0ciAi0YHRgtC40LvRjCDQutC+0L3RhNC70LjQutGC0L7QsiDRgdC70LjRj9C90LjRjyAobWVyZ2Ug0LjQu9C4IGRpZmYzKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTQKK21zZ2lkICJkbyBub3QgbGltaXQgcGF0aHNwZWNzIHRvIHNwYXJzZSBlbnRyaWVzIG9ubHkiCittc2dzdHIgItC90LUg0L7Qs9GA0LDQvdC40YfQuNCy0LDRgtGMINGB0L/QtdGG0LjRhNC40LrQsNGC0L7RgNGLINC/0YPRgtC4INGC0L7Qu9GM0LrQviDRh9Cw0YHRgtC40YfQvdGL0LzQuCDQt9Cw0L/QuNGB0Y/QvNC4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1NgorbXNnaWQgInNlY29uZCBndWVzcyAnZ2l0IGNoZWNrb3V0IDxuby1zdWNoLWJyYW5jaD4nIgorbXNnc3RyICLQv9C10YDQtdGB0LzQvtGC0YAgwqtnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPsK7IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1OAorbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAi0L3QtSDQv9GA0L7QstC10YDRj9GC0YwsINGH0YLQviDQtNGA0YPQs9C+0LUg0LTQtdGA0LXQstC+INGD0LbQtSDRgdC+0LTQtdGA0LbQuNGCINGD0LrQsNC30LDQvdC90YPRjiDRgdGB0YvQu9C60YMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTgxCittc2dpZCAiLWIsIC1CIGFuZCAtLW9ycGhhbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIg0LggLS1vcnBoYW4g0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTk4Cittc2dpZCAiLS10cmFjayBuZWVkcyBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICItLXRyYWNrINGC0YDQtdCx0YPQtdGCINC40LzRjyDQstC10YLQutC4IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTIwMworbXNnaWQgIk1pc3NpbmcgYnJhbmNoIG5hbWU7IHRyeSAtYiIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GJ0LXQvdC+INC40LzRjyDQstC10YLQutC4OyDQv9C+0L/RgNC+0LHRg9C50YLQtSAtYiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMzkKK21zZ2lkICJpbnZhbGlkIHBhdGggc3BlY2lmaWNhdGlvbiIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3QsNGPINGB0L/QtdGG0LjRhNC40LrQsNGG0LjRjyDQv9GD0YLQuCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkNoZXJyeS1waWNrIGZhaWxlZCBiZWNhdXNlIG9mIG1lcmdlIGNvbmZsaWN0LlxuIgotIkRvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgotbXNnc3RyICLQmtC+0L/QuNGA0L7QstCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQvdC10LLQvtC30LzQvtC20L3QviDQuNC3LdC30LAg0L3QtdC30LDQstC10YDRiNGR0L3QvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjy5cbtCX0LDQv9GD0YHRgtC40YLRjCBnaXQgY2l0b29sINC00LvRjyDQt9Cw0LLQtdGA0YjQtdC90LjRjyDRjdGC0L7QuSDQvtC/0LXRgNCw0YbQuNC4PyIKKyJDYW5ub3QgdXBkYXRlIHBhdGhzIGFuZCBzd2l0Y2ggdG8gYnJhbmNoICclcycgYXQgdGhlIHNhbWUgdGltZS5cbiIKKyJEaWQgeW91IGludGVuZCB0byBjaGVja291dCAnJXMnIHdoaWNoIGNhbiBub3QgYmUgcmVzb2x2ZWQgYXMgY29tbWl0PyIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINC+0LHQvdC+0LLQuNGC0Ywg0L/Rg9GC0Lgg0Lgg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INC/0LXRgNC10LrQu9GO0YfQuNGC0Ywg0L3QsCDQstC10YLQutGDIMKrJXPCuy5cbtCS0Ysg0YXQvtGC0LXQu9C4INC/0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINC90LAgwqslc8K7LCDRh9GC0L4g0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINC+0L/RgNC10LTQtdC70LXQvdC+INC60LDQuiDQutC+0LzQvNC40YI/IgogCi0jOiBnaXRrOjk1NjYgZ2l0azo5NjI0Ci1tc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCi1tc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjyDQvdC1INC30LDQutC+0LzQvNC40YfQtdC90YsiCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI1MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIGRvZXMgbm90IHRha2UgYSBwYXRoIGFyZ3VtZW50ICclcyciCittc2dzdHIgImdpdCBjaGVja291dDogLS1kZXRhY2gg0L3QtSDQv9GA0LjQvdC40LzQsNC10YIg0L/Rg9GC0Ywgwqslc8K7INC60LDQuiDQsNGA0LPRg9C80LXQvdGCIgogCi0jOiBnaXRrOjk1OTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKLW1zZ3N0ciAi0JrQvtC80LzQuNGCICVzINC90LUg0LLQutC70Y7Rh9GR0L0g0LIg0LLQtdGC0LrRgyAlcy4g0J/RgNC+0LTQvtC70LbQuNGC0Ywg0L7Qv9C10YDQsNGG0LjRjj8iCi0KLSM6IGdpdGs6OTU5OAotbXNnaWQgIlJldmVydGluZyIKLW1zZ3N0ciAi0JLQvtC30LLRgNCw0YIg0LjQt9C80LXQvdC10L3QuNC5IgotCi0jOiBnaXRrOjk2MDYKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjU1CiBtc2dpZCAiIgotIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXM6JXMgUGxlYXNlICIKLSJjb21taXQsIHJlc2V0IG9yIHN0YXNoICB5b3VyIGNoYW5nZXMgYW5kIHRyeSBhZ2Fpbi4iCi1tc2dzdHIgItCS0L7Qt9Cy0YDQsNGCINC40LfQvNC10L3QtdC90LjQuSDQutC+0LzQvNC40YLQsCDQvdC1INGD0LTQsNC70YHRjyDQuNC3LdC30LAg0LvQvtC60LDQu9GM0L3Ri9GFINC40LfQvNC10L3QtdC90LjQuSDQsiDRg9C60LDQt9Cw0L3QvdGL0YUg0YTQsNC50LvQsNGFOiAlc1xu0JfQsNC60L7QvNC40YLRjNGC0LUsINGB0LHRgNC+0YHRjNGC0LUg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LjQt9C80LXQvdC10L3QuNGPINC4INC/0L7QstGC0L7RgNC40YLQtSDQvtC/0LXRgNCw0YbQuNGOLiIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBhbmQgLS1tZXJnZSBhcmUgaW5jb21wYXRpYmxlIHdoZW5cbiIKKyJjaGVja2luZyBvdXQgb2YgdGhlIGluZGV4LiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2Ug0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0L/RgNC4INC/0YDQuNC80LXQvdC10L3QuNC4INGB0L7RgdGC0L7Rj9C90LjRjyDQuNC90LTQtdC60YHQsC4iCiAKLSM6IGdpdGs6OTYxMAorIzogYnVpbHRpbi9jbGVhbi5jOjI1CiBtc2dpZCAiIgotIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKLSIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCi1tc2dzdHIgItCS0L7Qt9Cy0YDQsNGCINC40LfQvNC10L3QtdC90LjQuSDQvdC10LLQvtC30LzQvtC20LXQvSDQuNC3LdC30LAg0L3QtdC30LDQstC10YDRiNGR0L3QvdC+0Lkg0L7Qv9C10YDQsNGG0LjQuCDRgdC70LjRj9C90LjRjy5cbtCX0LDQv9GD0YHRgtC40YLRjCBnaXQgY2l0b29sINC00LvRjyDQt9Cw0LLQtdGA0YjQtdC90LjRjyDRjdGC0L7QuSDQvtC/0LXRgNCw0YbQuNC4PyIKKyJnaXQgY2xlYW4gWy1kXSBbLWZdIFstaV0gWy1uXSBbLXFdIFstZSA8cGF0dGVybj5dIFsteCB8IC1YXSBbLS1dIDxwYXRocz4uLi4iCittc2dzdHIgImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDzRiNCw0LHQu9C+0L0+XSBbLXggfCAtWF0gWy0tXSA80L/Rg9GC0Lg+4oCmIgogCi0jOiBnaXRrOjk2NTMKLW1zZ2lkICJDb25maXJtIHJlc2V0IgotbXNnc3RyICLQn9C+0LTRgtCy0LXRgNC00LjRgtC1INC+0L/QtdGA0LDRhtC40Y4g0L/QtdGA0LXRhdC+0LTQsCIKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlc1xuIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1ICVzXG4iCiAKLSM6IGdpdGs6OTY1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCi1tc2dzdHIgItCh0LHRgNC+0YHQuNGC0Ywg0LLQtdGC0LrRgyAlcyDQvdCwINC60L7QvNC80LjRgiAlcz8iCisjOiBidWlsdGluL2NsZWFuLmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgItCR0YPQtNC10YIg0YPQtNCw0LvQtdC90L4gJXNcbiIKIAotIzogZ2l0azo5NjU3Ci1tc2dpZCAiUmVzZXQgdHlwZToiCi1tc2dzdHIgItCi0LjQvyDQvtC/0LXRgNCw0YbQuNC4INC/0LXRgNC10YXQvtC00LA6IgorIzogYnVpbHRpbi9jbGVhbi5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0Log0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyAlc1xuIgogCi0jOiBnaXRrOjk2NjAKLW1zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKLW1zZ3N0ciAi0JvRkdCz0LrQuNC5OiDQvtGB0YLQsNCy0LjRgtGMINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINC4INC40L3QtNC10LrRgSDQvdC10LjQt9C80LXQvdC90YvQvNC4IgorIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICLQkdGD0LTQtdGCINC/0YDQvtC/0YPRidC10L0g0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSAlc1xuIgogCi0jOiBnaXRrOjk2NjMKLW1zZ2lkICJNaXhlZDogTGVhdmUgd29ya2luZyB0cmVlIHVudG91Y2hlZCwgcmVzZXQgaW5kZXgiCi1tc2dzdHIgItCh0LzQtdGI0LDQvdC90YvQuTog0L7RgdGC0LDQstC40YLRjCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQvdC10LjQt9C80LXQvdC90YvQvCwg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LjQvdC00LXQutGBIgorIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgItGB0LHQvtC5INGD0LTQsNC70LXQvdC40Y8gJXMiCiAKLSM6IGdpdGs6OTY2NgorIzogYnVpbHRpbi9jbGVhbi5jOjMxNwogbXNnaWQgIiIKLSJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCi0iKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgotbXNnc3RyICLQltC10YHRgtC60LjQuTog0L/QtdGA0LXQv9C40YHQsNGC0Ywg0LjQvdC00LXQutGBINC4INGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzXG4o0LLRgdC1INC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1INCx0YPQtNGD0YIg0L/QvtGC0LXRgNGP0L3RiykiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nIgorbXNnc3RyICLQodC/0YDQsNCy0LrQsCDQv9C+INCy0YvQtNC10LvQtdC90LjRjjpcbjEgICAgICAgICAgLSDQstGL0LHRgNCw0YLRjCDRg9C60LDQt9Cw0L3QvdGL0Lkg0Y3Qu9C10LzQtdC90YJcbmZvbyAgICAgICAgLSDQstGL0LHRgNCw0YLRjCDRjdC70LXQvNC10L3RgiDRgSDRg9C60LDQt9Cw0L3QvdGL0Lwg0L/RgNC10YTQuNC60YHQvtC8XG4gICAgICAgICAgIC0gKNC/0YPRgdGC0L4pINC90LUg0LLRi9Cx0LjRgNCw0YLRjCDQvdC40YfQtdCz0L4iCiAKLSM6IGdpdGs6OTY4MwotbXNnaWQgIlJlc2V0dGluZyIKLW1zZ3N0ciAi0KHQsdGA0L7RgSIKLQotIzogZ2l0azo5NzQzCi1tc2dpZCAiQ2hlY2tpbmcgb3V0IgotbXNnc3RyICLQn9C10YDQtdGF0L7QtCIKLQotIzogZ2l0azo5Nzk2Ci1tc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKLW1zZ3N0ciAi0JDQutGC0LjQstC90LDRjyDQstC10YLQutCwINC90LUg0LzQvtC20LXRgiDQsdGL0YLRjCDRg9C00LDQu9C10L3QsCIKLQotIzogZ2l0azo5ODAyCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NsZWFuLmM6MzIxCiBtc2dpZCAiIgotIlRoZSBjb21taXRzIG9uIGJyYW5jaCAlcyBhcmVuJ3Qgb24gYW55IG90aGVyIGJyYW5jaC5cbiIKLSJSZWFsbHkgZGVsZXRlIGJyYW5jaCAlcz8iCi1tc2dzdHIgItCa0L7QvNC80LjRgtGLINC40Lcg0LLQtdGC0LrQuCAlcyDQvdC1INC/0YDQuNC90LDQtNC70LXQttCw0YIg0LHQvtC70YzRiNC1INC90LjQutCw0LrQvtC5INC00YDRg9Cz0L7QuSDQstC10YLQutC1Llxu0JTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YPQtNCw0LvQuNGC0Ywg0LLQtdGC0LrRgyAlcz8iCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXNcbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIi0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXNcbiIKKyIqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtc1xuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgItCh0L/RgNCw0LLQutCwINC/0L4g0LLRi9C00LXQu9C10L3QuNGOOlxuMSAgICAgICAgICAtINCy0YvQsdGA0LDRgtGMINC+0LTQuNC9INGN0LvQtdC80LXQvdGCXG4zLTUgICAgICAgIC0g0LLRi9Cx0YDQsNGC0Ywg0LTQuNCw0L/QsNC30L7QvSDRjdC70LXQvNC10L3RgtC+0LJcbjItMyw2LTkgICAgLSDQstGL0LHRgNCw0YLRjCDQvdC10YHQutC+0LvRjNC60L4g0LTQuNCw0L/QsNC30L7QvdC+0LJcbmZvbyAgICAgICAgLSDQstGL0LHRgNCw0YLRjCDRjdC70LXQvNC10L3RgiDRgSDRg9C60LDQt9Cw0L3QvdGL0Lwg0L/RgNC10YTQuNC60YHQvtC8XG4t4oCmICAgICAgIC0g0YPQsdGA0LDRgtGMINCy0YvQtNC10LvQtdC90LjQtSDRgSDRg9C60LDQt9Cw0L3QvdGL0YUg0Y3Qu9C10LzQtdC90YLQvtCyXG4qICAgICAgICAgIC0g0LLRi9Cx0YDQsNGC0Ywg0LLRgdC1INGN0LvQtdC80LXQvdGC0YtcbiAgICAgICAgICAgLSAo0L/Rg9GB0YLQvikg0LfQsNCy0LXRgNGI0LjRgtGMINCy0YvQtNC10LvQtdC90LjQtSIKIAotIzogZ2l0azo5ODMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgotbXNnc3RyICLQnNC10YLQutC4INC4INCy0LXRgtC60Lg6ICVzIgorIzogYnVpbHRpbi9jbGVhbi5jOjUzNworIywgYy1mb3JtYXQKK21zZ2lkICJIdWggKCVzKT8iCittc2dzdHIgItCl0LwgKCVzKT8iCiAKLSM6IGdpdGs6OTg1MAotbXNnaWQgIkZpbHRlciIKLW1zZ3N0ciAi0KTQuNC70YzRgtGA0L7QstCw0YLRjCIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICLQqNCw0LHQu9C+0L3RiyDQuNCz0L3QvtGA0LjRgNC+0LLQsNC90LjRjyDQstCy0L7QtNCwPj4gIgogCi0jOiBnaXRrOjEwMTQ2CisjOiBidWlsdGluL2NsZWFuLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICLQn9Cg0JXQlNCj0J/QoNCV0JbQlNCV0J3QmNCVOiDQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0Y3Qu9C10LzQtdC90YLRiyDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidC40LU6ICVzIgorCisjOiBidWlsdGluL2NsZWFuLmM6NzM3Cittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAi0KPQutCw0LbQuNGC0LUg0Y3Qu9C10LzQtdC90YLRiyDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjyIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBrZWVwIFt5L05dIGFzIGlzCisjOiBidWlsdGluL2NsZWFuLmM6Nzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSAlcyBbeS9OXT8gIgorbXNnc3RyICLQo9C00LDQu9C40YLRjCAlcyBbeSAtINC00LAvTiAtINC90LXRgl0/ICIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgwMworbXNnaWQgIkJ5ZS4iCittc2dzdHIgItCU0L4g0YHQstC40LTQsNC90LjRjy4iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MTEKIG1zZ2lkICIiCi0iRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCi0idGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCi1tc2dzdHIgItCe0YjQuNCx0LrQsCDRh9GC0LXQvdC40Y8g0LjRgdGC0L7RgNC40Lgg0L/RgNC+0LXQutGC0LA7INC40L3RhNC+0YDQvNCw0YbQuNGPINC+INCy0LXRgtC60LDRhSDQuCDQutC+0LzQvNC40YLQsNGFINCy0L7QutGA0YPQsyDQvNC10YLQvtC6ICjQtNC+L9C/0L7RgdC70LUpINC80L7QttC10YIg0LHRi9GC0Ywg0L3QtdC/0L7Qu9C90L7QuS4iCisiY2xlYW4gICAgICAgICAgICAgICAtIHN0YXJ0IGNsZWFuaW5nXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIGV4Y2x1ZGUgaXRlbXMgZnJvbSBkZWxldGlvblxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSBzZWxlY3QgaXRlbXMgdG8gYmUgZGVsZXRlZCBieSBudW1iZXJzXG4iCisiYXNrIGVhY2ggICAgICAgICAgICAtIGNvbmZpcm0gZWFjaCBkZWxldGlvbiAobGlrZSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHN0b3AgY2xlYW5pbmdcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0gdGhpcyBzY3JlZW5cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGVscCBmb3IgcHJvbXB0IHNlbGVjdGlvbiIKK21zZ3N0ciAiY2xlYW4gICAgICAgICAgICAgICAtINC90LDRh9Cw0YLRjCDQvtGH0LjRgdGC0LrRg1xuZmlsdGVyIGJ5IHBhdHRlcm4gICAtINC40YHQutC70Y7Rh9C40YLRjCDRg9C00LDQu9C10L3QuNC1INGN0LvQtdC80LXQvdGC0L7Qslxuc2VsZWN0IGJ5IG51bWJlcnMgICAtINC40YHQutC70Y7Rh9C40YLRjCDRg9C00LDQu9C10L3QuNC1INGN0LvQtdC80LXQvdGC0L7QsiDQv9C+INC90L7QvNC10YDQsNC8XG5hc2sgZWFjaCAgICAgICAgICAgIC0g0LfQsNC/0YDQsNGI0LjQstCw0YLRjCDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjQtSDQvdCwINGD0LTQsNC70LXQvdC40LUg0LrQsNC20LTQvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCAo0LrQsNC6IMKrcm0gLWnCuylcbnF1aXQgICAgICAgICAgICAgICAgLSDQv9GA0LXQutGA0LDRgtC40YLRjCDQvtGH0LjRgdGC0LrRg1xuaGVscCAgICAgICAgICAgICAgICAtINGN0YLQvtGCINGN0LrRgNCw0L1cbj8gICAgICAgICAgICAgICAgICAgLSDRgdC/0YDQsNCy0LrQsCDQv9C+INCy0YvQtNC10LvQtdC90LjRjiIKIAotIzogZ2l0azoxMTEyMwotbXNnaWQgIlRhZyIKLW1zZ3N0ciAi0JzQtdGC0LrQsCIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MzgKK21zZ2lkICIqKiogQ29tbWFuZHMgKioqIgorbXNnc3RyICIqKiog0JrQvtC80LDQvdC00YsgKioqIgogCi0jOiBnaXRrOjExMTI3Ci1tc2dpZCAiSWQiCi1tc2dzdHIgIklkIgorIzogYnVpbHRpbi9jbGVhbi5jOjgzOQorbXNnaWQgIldoYXQgbm93IgorbXNnc3RyICLQp9GC0L4g0YLQtdC/0LXRgNGMIgogCi0jOiBnaXRrOjExMjEwCi1tc2dpZCAiR2l0ayBmb250IGNob29zZXIiCi1tc2dzdHIgItCo0YDQuNGE0YIgR2l0ayIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICLQo9C00LDQu9C40YLRjCDRgdC70LXQtNGD0Y7RidC40LUg0Y3Qu9C10LzQtdC90YLRizoiCittc2dzdHJbMV0gItCj0LTQsNC70LjRgtGMINGB0LvQtdC00YPRjtGJ0LjQtSDRjdC70LXQvNC10L3RgtGLOiIKK21zZ3N0clsyXSAi0KPQtNCw0LvQuNGC0Ywg0YHQu9C10LTRg9GO0YnQuNC1INGN0LvQtdC80LXQvdGC0Ys6IgorbXNnc3RyWzNdICLQo9C00LDQu9C40YLRjCDRgdC70LXQtNGD0Y7RidC40LUg0Y3Qu9C10LzQtdC90YLRizoiCiAKLSM6IGdpdGs6MTEyMjcKLW1zZ2lkICJCIgotbXNnc3RyICLQliIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NjQKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAi0JHQvtC70YzRiNC1INC90LXRgiDRhNCw0LnQu9C+0LIg0LTQu9GPINC+0YfQuNGB0YLQutC4LCDQstGL0YXQvtC00LjQvC4iCiAKLSM6IGdpdGs6MTEyMzAKLW1zZ2lkICJJIgotbXNnc3RyICLQmiIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4OTUKK21zZ2lkICJkbyBub3QgcHJpbnQgbmFtZXMgb2YgZmlsZXMgcmVtb3ZlZCIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINC40LzQtdC90LAg0YPQtNCw0LvRj9C10LzRi9GFINGE0LDQudC70L7QsiIKIAotIzogZ2l0azoxMTM0OAotbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKLW1zZ3N0ciAi0J/QsNGA0LDQvNC10YLRgNGLINC/0L7QutCw0LfQsCDRgdC/0LjRgdC60LAg0LrQvtC80LzQuNGC0L7QsiIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4OTcKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L4iCiAKLSM6IGdpdGs6MTEzNTEKLW1zZ2lkICJNYXhpbXVtIGdyYXBoIHdpZHRoIChsaW5lcykiCi1tc2dzdHIgItCc0LDQutGBLiDRiNC40YDQuNC90LAg0LPRgNCw0YTQsCAo0YHRgtGA0L7QuikiCisjOiBidWlsdGluL2NsZWFuLmM6ODk4Cittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgItC40L3RgtC10YDQsNC60YLQuNCy0L3QsNGPINC+0YfQuNGB0YLQutCwIgogCi0jOiBnaXRrOjExMzU1Ci0jLCBuby10Y2wtZm9ybWF0Ci1tc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKLW1zZ3N0ciAi0JzQsNC60YEuINGI0LjRgNC40L3QsCDQs9GA0LDRhNCwICglINGI0LjRgNC40L3RiyDQv9Cw0L3QtdC70LgpIgorIzogYnVpbHRpbi9jbGVhbi5jOjkwMAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0LrQsNGC0LDQu9C+0LPQuCDQv9C+0LvQvdC+0YHRgtGM0Y4iCiAKLSM6IGdpdGs6MTEzNTgKLW1zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCi1tc2dzdHIgItCf0L7QutCw0LfRi9Cy0LDRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorIzogYnVpbHRpbi9jbGVhbi5jOjkwMSBidWlsdGluL2Rlc2NyaWJlLmM6NDA3IGJ1aWx0aW4vZ3JlcC5jOjcxNAorIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0MyBidWlsdGluL25hbWUtcmV2LmM6MzExIGJ1aWx0aW4vc2hvdy1yZWYuYzoxODcKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICLRiNCw0LHQu9C+0L0iCiAKLSM6IGdpdGs6MTEzNjEKLW1zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgotbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQstGL0LTQtdC70LjRgtGMIFNIQTEgKNC00LvQuNC90L3QsCkiCisjOiBidWlsdGluL2NsZWFuLmM6OTAyCittc2dpZCAiYWRkIDxwYXR0ZXJuPiB0byBpZ25vcmUgcnVsZXMiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0YwgPNGI0LDQsdC70L7QvT4g0LIg0L/RgNCw0LLQuNC70LAg0LjQs9C90L7RgNC40YDQvtCy0LDQvdC40Y8iCiAKLSM6IGdpdGs6MTEzNjUKLW1zZ2lkICJIaWRlIHJlbW90ZSByZWZzIgotbXNnc3RyICLQodC60YDRi9GC0Ywg0LLQvdC10YjQvdC40LUg0YHRgdGL0LvQutC4IgorIzogYnVpbHRpbi9jbGVhbi5jOjkwMworbXNnaWQgInJlbW92ZSBpZ25vcmVkIGZpbGVzLCB0b28iCittc2dzdHIgItGC0LDQutC20LUg0YPQtNCw0LvQuNGC0Ywg0LjQs9C90L7RgNC40YDRg9C10LzRi9C1INGE0LDQudC70YsiCiAKLSM6IGdpdGs6MTEzNjkKLW1zZ2lkICJEaWZmIGRpc3BsYXkgb3B0aW9ucyIKLW1zZ3N0ciAi0J/QsNGA0LDQvNC10YLRgNGLINC/0L7QutCw0LfQsCDQuNC30LzQtdC90LXQvdC40LkiCisjOiBidWlsdGluL2NsZWFuLmM6OTA1Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0YLQvtC70YzQutC+INC40LPQvdC+0YDQuNGA0YPQtdC80YvQtSDRhNCw0LnQu9GLIgogCi0jOiBnaXRrOjExMzcxCi1tc2dpZCAiVGFiIHNwYWNpbmciCi1tc2dzdHIgItCo0LjRgNC40L3QsCDRgtCw0LHRg9C70Y/RhtC40LgiCisjOiBidWlsdGluL2NsZWFuLmM6OTIzCittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviAteCDQuCAtWCIKIAotIzogZ2l0azoxMTM3NAotbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCi1tc2dzdHIgItCf0L7QutCw0LfRi9Cy0LDRgtGMINCx0LvQuNC30LrQuNC1INC80LXRgtC60Lgv0LLQtdGC0LrQuCIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MjcKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byIKKyIgY2xlYW4iCittc2dzdHIgImNsZWFuLnJlcXVpcmVGb3JjZSDRg9GB0YLQsNC90L7QstC70LXQvSDQutCw0LogdHJ1ZSDQuCDQvdC4INC+0LTQvdCwINC40Lcg0L7Qv9GG0LjQuSAtaSwgLW4g0LjQu9C4IC1mINC90LUg0YPQutCw0LfQsNC90LA7INC+0YLQutCw0Lcg0L7Rh9C40YHRgtC60LgiCiAKLSM6IGdpdGs6MTEzNzcKLW1zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgotbXNnc3RyICLQn9C+0LrQsNC30YvQstCw0YLRjCDQvNCw0LrRgdC40LzQsNC70YzQvdC+0LUg0LrQvtC70LjRh9C10YHRgtCy0L4g0LzQtdGC0L7Qui/QstC10YLQvtC6IgorIzogYnVpbHRpbi9jbGVhbi5jOjkzMAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICJjbGVhbi5yZXF1aXJlRm9yY2Ug0YPRgdGC0LDQvdC+0LLQu9C10L0g0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0LrQsNC6IHRydWUg0Lgg0L3QuCDQvtC00L3QsCDQuNC3INC+0L/RhtC40LkgLWksIC1uINC40LvQuCAtZiDQvdC1INGD0LrQsNC30LDQvdCwOyDQvtGC0LrQsNC3INC+0YfQuNGB0YLQutC4IgogCi0jOiBnaXRrOjExMzgwCi1tc2dpZCAiTGltaXQgZGlmZnMgdG8gbGlzdGVkIHBhdGhzIgotbXNnc3RyICLQntCz0YDQsNC90LjRh9C40YLRjCDQv9C+0LrQsNC3INC40LfQvNC10L3QtdC90LjQuSDQstGL0LHRgNCw0L3QvdGL0LzQuCDRhNCw0LnQu9Cw0LzQuCIKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNworbXNnaWQgImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorbXNnc3RyICJnaXQgY2xvbmUgWzzQvtC/0YbQuNC4Pl0gWy0tXSA80YDQtdC/0L7Qt9C40YLQvtGA0LjQuT4gWzzQutCw0YLQsNC70L7Qsz5dIgogCi0jOiBnaXRrOjExMzgzCi1tc2dpZCAiU3VwcG9ydCBwZXItZmlsZSBlbmNvZGluZ3MiCi1tc2dzdHIgItCf0L7QtNC00LXRgNC20LrQsCDQutC+0LTQuNGA0L7QstC+0Log0LIg0L7RgtC00LXQu9GM0L3Ri9GFINGE0LDQudC70LDRhSIKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NyBidWlsdGluL2ZldGNoLmM6MTEyIGJ1aWx0aW4vbWVyZ2UuYzoyMjQKKyM6IGJ1aWx0aW4vcHVsbC5jOjEwOSBidWlsdGluL3B1c2guYzo1NjAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjgKK21zZ2lkICJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INCy0YvQstC+0LTQuNGC0Ywg0L/RgNC+0LPRgNC10YHRgSIKIAotIzogZ2l0azoxMTM4OSBnaXRrOjExNTM2Ci1tc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgotbXNnc3RyICLQn9GA0L7Qs9GA0LDQvNC80LAg0LTQu9GPINC/0L7QutCw0LfQsCDQuNC30LzQtdC90LXQvdC40LkiCisjOiBidWlsdGluL2Nsb25lLmM6NTkKK21zZ2lkICJkb24ndCBjcmVhdGUgYSBjaGVja291dCIKK21zZ3N0ciAi0L3QtSDQv9C10YDQtdC60LvRjtGH0LDRgtGMINGA0LDQsdC+0YfRg9GOINC60L7Qv9C40Y4g0L3QsCBIRUFEIgogCi0jOiBnaXRrOjExMzkwCi1tc2dpZCAiQ2hvb3NlLi4uIgotbXNnc3RyICLQktGL0LHQtdGA0LjRgtC1Li4uIgorIzogYnVpbHRpbi9jbG9uZS5jOjYwIGJ1aWx0aW4vY2xvbmUuYzo2MiBidWlsdGluL2luaXQtZGIuYzo1MDQKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINCz0L7Qu9GL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKIAotIzogZ2l0azoxMTM5NQorIzogYnVpbHRpbi9jbG9uZS5jOjY0Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINC30LXRgNC60LDQu9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gKNCy0LrQu9GO0YfQsNC10YIg0LIg0YHQtdCx0Y8g0Lgg0L/QsNGA0LDQvNC10YLRgCBiYXJlKSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY2Cittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgItC00LvRjyDQutC70L7QvdC40YDQvtCy0LDQvdC40Y8g0LjQtyDQu9C+0LrQsNC70YzQvdC+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjgKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAi0L3QtSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LbQtdGB0YLQutC40LUg0YHRgdGL0LvQutC4LCDQstGB0LXQs9C00LAg0LrQvtC/0LjRgNC+0LLQsNGC0Ywg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcwCittc2dpZCAic2V0dXAgYXMgc2hhcmVkIHJlcG9zaXRvcnkiCittc2dzdHIgItC90LDRgdGC0YDQvtC40YLRjCDQutCw0Log0L7QsdGJ0LXQtNC+0YHRgtGD0L/QvdGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcyIGJ1aWx0aW4vY2xvbmUuYzo3NAorbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgItC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDRgtGMINC/0L7QtNC80L7QtNGD0LvQuCDQsiDQutC70L7QvdC1IgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUgYnVpbHRpbi9pbml0LWRiLmM6NTAxCittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICLQutCw0YLQsNC70L7Qsy3RiNCw0LHQu9C+0L3QvtCyIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzYgYnVpbHRpbi9pbml0LWRiLmM6NTAyCittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAi0LrQsNGC0LDQu9C+0LMsINGI0LDQsdC70L7QvdGLINC40Lcg0LrQvtGC0L7RgNC+0LPQviDQsdGD0LTRg9GCINC40YHQv9C+0LvRjNC30L7QstCw0L3RiyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc4Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgItGB0YHRi9C70LDQtdC80YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODAKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9GD0LnRgtC1IC0tcmVmZXJlbmNlINGC0L7Qu9GM0LrQviDQv9GA0Lgg0LrQu9C+0L3QuNGA0L7QstCw0L3QuNC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODEgYnVpbHRpbi9jb2x1bW4uYzoyNiBidWlsdGluL21lcmdlLWZpbGUuYzo0NAorbXNnaWQgIm5hbWUiCittc2dzdHIgItC40LzRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgyCittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgPNC40LzRjz4g0LLQvNC10YHRgtC+IMKrb3JpZ2luwrsg0LTQu9GPINC+0YLRgdC70LXQttC40LLQsNC90LjRjyDQstGL0YjQtdGB0YLQvtGP0YnQtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAi0L/QtdGA0LXQudGC0Lgg0L3QsCA80LLQtdGC0LrRgz4sINCy0LzQtdGB0YLQviBIRUFEINCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAi0L/Rg9GC0Ywg0LogZ2l0LXVwbG9hZC1wYWNrINC90LAg0LLQvdC10YjQvdC10Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg3IGJ1aWx0aW4vZmV0Y2guYzoxMTMgYnVpbHRpbi9ncmVwLmM6NjU5CisjOiBidWlsdGluL3B1bGwuYzoxODYKK21zZ2lkICJkZXB0aCIKK21zZ3N0ciAi0LPQu9GD0LHQuNC90LAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4OAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAi0YHQtNC10LvQsNGC0Ywg0YfQsNGB0YLQuNGH0L3Ri9C5INC60LvQvtC9INGD0LrQsNC30LDQvdC90L7QuSDQs9C70YPQsdC40L3RiyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwCittc2dpZCAiY2xvbmUgb25seSBvbmUgYnJhbmNoLCBIRUFEIG9yIC0tYnJhbmNoIgorbXNnc3RyICLQutC70L7QvdC40YDQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviDQvtC00L3RgyDQstC10YLQutGDLCBIRUFEINC40LvQuCAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxIGJ1aWx0aW4vaW5pdC1kYi5jOjUxMAorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAi0LrQsNGC0LDQu9C+0LMtZ2l0IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTIgYnVpbHRpbi9pbml0LWRiLmM6NTExCittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0YDQsNC30LzQtdGB0YLQuNGC0Ywg0LrQsNGC0LDQu9C+0LMgZ2l0INC+0YLQtNC10LvRjNC90L4g0L7RgiDRgNCw0LHQvtGH0LXQuSDQutC+0L/QuNC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgItC60LvRjtGHPdC30L3QsNGH0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0L/QsNGA0LDQvNC10YLRgNGLINCy0L3Rg9GC0YDQuCDQvdC+0LLQvtCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjI5OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIG5vdCBhIGxvY2FsIHJlcG9zaXRvcnkuIgorbXNnc3RyICLRgdGB0YvQu9Cw0LXQvNGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC70L7QutCw0LvRjNC90YvQvC4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBzaGFsbG93IgorbXNnc3RyICLRgdGB0YvQu9Cw0LXQvNGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDCqyVzwrsg0Y/QstC70Y/QtdGC0YHRjyDRh9Cw0YHRgtC40YfQvdGL0LwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICLRgdGB0YvQu9Cw0LXQvNGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDCqyVzwrsg0Y/QstC70Y/QtdGC0YHRjyDRgdGA0LDRidC10L3QvdGL0LwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzAgYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgc3RhdCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzINGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgiDQuCDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQsNGC0LDQu9C+0LPQvtC8IgorCisjOiBidWlsdGluL2Nsb25lLmM6Mzg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzXG4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHN0YXQgJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRgdGB0YvQu9C60YMgwqslc8K7IgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQutC+0L/QuNGA0L7QstCw0YLRjCDRhNCw0LnQuyDQsiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzUgYnVpbHRpbi9jbG9uZS5jOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICLQs9C+0YLQvtCy0L4uXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0NDcKK21zZ2lkICIiCisiQ2xvbmUgc3VjY2VlZGVkLCBidXQgY2hlY2tvdXQgZmFpbGVkLlxuIgorIllvdSBjYW4gaW5zcGVjdCB3aGF0IHdhcyBjaGVja2VkIG91dCB3aXRoICdnaXQgc3RhdHVzJ1xuIgorImFuZCByZXRyeSB0aGUgY2hlY2tvdXQgd2l0aCAnZ2l0IGNoZWNrb3V0IC1mIEhFQUQnXG4iCittc2dzdHIgItCa0LvQvtC90LjRgNC+0LLQsNC90LjQtSDQv9GA0L7RiNC70L4g0YPRgdC/0LXRiNC90L4sINC90L4g0LLQviDQstGA0LXQvNGPINC/0LXRgNC10YXQvtC00LAg0L3QsCDQstC10YDRgdC40Y4g0L/RgNC+0LjQt9C+0YjQu9CwINC+0YjQuNCx0LrQsC5cbtChINC/0L7QvNC+0YnRjCDQutC+0LzQsNC90LTRiyDCq2dpdCBzdGF0dXPCuyDQstGLINC80L7QttC10YLQtSDQv9GA0L7RgdC80L7RgtGA0LXRgtGMLCDQutCw0LrQuNC1INGE0LDQudC70Ysg0LHRi9C70Lgg0L7QsdC90L7QstC70LXQvdGLLCDQsCDQv9C+0LLRgtC+0YDQuNGC0Ywg0L/QvtC/0YvRgtC60YMg0L/QtdGA0LXRhdC+0LTQsCDQvdCwINCy0LXRgNGB0LjRjiDRgSDQv9C+0LzQvtGJ0YzRjiDCq2dpdCBjaGVja291dCAtZiBIRUFEwrtcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INCy0L3QtdGI0L3RjtGOINCy0LXRgtC60YMgJXMg0LTQu9GPINC60LvQvtC90LjRgNC+0LLQsNC90LjRjy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uICIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDRgdC+0LXQtNC40L3QtdC90LjRj+KApiAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MTcKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAi0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDQv9GA0LjRgdC70LDQuyDQvdC1INCy0YHQtSDQvdC10L7QsdGF0L7QtNC40LzRi9C1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjgxCittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICLQstC90LXRiNC90LjQuSBIRUFEINGB0YHRi9C70LDQtdGC0YHRjyDQvdCwINC90LXRgdGD0YnQtdGB0YLQstGD0Y7RidGD0Y4g0YHRgdGL0LvQutGDLCDQvdC10LvRjNC30Y8g0L/QtdGA0LXQudGC0Lgg0L3QsCDRgtCw0LrRg9GOINCy0LXRgNGB0LjRji5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcxMgorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQudGC0Lgg0L3QsCDQstC10YDRgdC40Y4g0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc5OQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINC/0LXRgNC10L/QsNC60L7QstC60YMg0LTQu9GPINC+0YfQuNGB0YLQutC4IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODAxCittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLRgdC+0LXQtNC40L3QuNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C1INCw0LvRjNGC0LXRgNC90LDRgtC40LLQvdGL0LUg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgzMQorbXNnaWQgIlRvbyBtYW55IGFyZ3VtZW50cy4iCittc2dzdHIgItCh0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0LDRgNCz0YPQvNC10L3RgtC+0LIuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODM1Cittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICLQktGLINC00L7Qu9C20L3RiyDRg9C60LDQt9Cw0YLRjCDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC00LvRjyDQutC70L7QvdC40YDQvtCy0LDQvdC40Y8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYmFyZSBhbmQgLS1vcmlnaW4gJXMgb3B0aW9ucyBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAiLS1iYXJlINC4IC0tb3JpZ2luICVzINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0OQorbXNnaWQgIi0tYmFyZSBhbmQgLS1zZXBhcmF0ZS1naXQtZGlyIGFyZSBpbmNvbXBhdGlibGUuIgorbXNnc3RyICItLWJhcmUg0LggLS1zZXBhcmF0ZS1naXQtZGlyINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgItGA0LXQv9C+0LfQuNGC0L7RgNC40Lkgwqslc8K7INC90LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NjggYnVpbHRpbi9mZXRjaC5jOjExNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICLQs9C70YPQsdC40L3QsCAlcyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0L/QvtC70L7QttC40YLQtdC70YzQvdGL0Lwg0YfQuNGB0LvQvtC8IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlc3RpbmF0aW9uIHBhdGggJyVzJyBhbHJlYWR5IGV4aXN0cyBhbmQgaXMgbm90IGFuIGVtcHR5IGRpcmVjdG9yeS4iCittc2dzdHIgItGG0LXQu9C10LLQvtC5INC/0YPRgtGMIMKrJXPCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIg0Lgg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC/0YPRgdGC0YvQvCDQutCw0YLQsNC70L7Qs9C+0LwuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMgwqslc8K7INGD0LbQtSDRgdGD0YnQtdGB0YLQstGD0LXRgi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MDMgYnVpbHRpbi9jbG9uZS5jOjkxNCBidWlsdGluL3dvcmt0cmVlLmM6MjE4CisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGA0L7QtNC40YLQtdC70YzRgdC60LjQtSDQutCw0YLQsNC70L7Qs9C4INC00LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSB3b3JrIHRyZWUgZGlyICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0YDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMgwqslc8K7IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byBiYXJlIHJlcG9zaXRvcnkgJyVzJy4uLlxuIgorbXNnc3RyICLQmtC70L7QvdC40YDQvtCy0LDQvdC40LUg0LIg0LPQvtC70YvQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IMKrJXPCu+KAplxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNsb25pbmcgaW50byAnJXMnLi4uXG4iCittc2dzdHIgItCa0LvQvtC90LjRgNC+0LLQsNC90LjQtSDQsiDCqyVzwrvigKZcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk1MQorbXNnaWQgIi0tZGlzc29jaWF0ZSBnaXZlbiwgYnV0IHRoZXJlIGlzIG5vIC0tcmVmZXJlbmNlIgorbXNnc3RyICLQv9C10YDQtdC00LDQvdCwINC+0L/RhtC40Y8gLS1kaXNzb2NpYXRlLCDQvdC+INC90LUg0L/QtdGA0LXQtNCw0L3QsCAtLXJlZmVyZW5jZSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk2OAorbXNnaWQgIi0tZGVwdGggaXMgaWdub3JlZCBpbiBsb2NhbCBjbG9uZXM7IHVzZSBmaWxlOi8vIGluc3RlYWQuIgorbXNnc3RyICItLWRlcHRoINC40LPQvdC+0YDQuNGA0YPQtdGC0YHRjyDQvdCwINC70L7QutCw0LvRjNC90YvRhSDQutC70L7QvdCw0YU7INCy0LzQtdGB0YLQviDRjdGC0L7Qs9C+INC40YHQv9C+0LvRjNC30YPQudGC0LUgZmlsZTovLy4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzEKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICLQuNGB0YXQvtC00L3Ri9C5INGA0LXQv9C+0LfQuNGC0L7RgNC40Lkg0Y/QstC70Y/QtdGC0YHRjyDRh9Cw0YHRgtC40YfQvdGL0LwsIC0tbG9jYWwg0LjQs9C90L7RgNC40YDRg9C10YLRgdGPIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTc2Cittc2dpZCAiLS1sb2NhbCBpcyBpZ25vcmVkIgorbXNnc3RyICItLWxvY2FsINC40LPQvdC+0YDQuNGA0YPQtdGC0YHRjyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBjbG9uZSAlcyIKK21zZ3N0ciAi0J3QtSDQt9C90LDRjiDQutCw0Log0LrQu9C+0L3QuNGA0L7QstCw0YLRjCAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMjkgYnVpbHRpbi9jbG9uZS5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgItCS0L3QtdGI0L3Rj9GPINCy0LXRgtC60LAgJXMg0L3QtSDQvdCw0LnQtNC10L3QsCDQsiDQstGL0YjQtdGB0YLQvtGP0YnQtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LggJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQwCittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAi0J/QvtGF0L7QttC1LCDRh9GC0L4g0LLRiyDQutC70L7QvdC40YDQvtCy0LDQu9C4INC/0YPRgdGC0L7QuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5LiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo5Cittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbHVtbiBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNgorbXNnaWQgImxvb2t1cCBjb25maWcgdmFycyIKK21zZ3N0ciAi0LfQsNC/0YDQvtGB0LjRgtGMINC/0LXRgNC10LzQtdC90L3Ri9C1INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNyBidWlsdGluL2NvbHVtbi5jOjI4Cittc2dpZCAibGF5b3V0IHRvIHVzZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGB0YXQtdC80YMg0YDQsNGB0L/QvtC70L7QttC10L3QuNGPIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI5Cittc2dpZCAiTWF4aW11bSB3aWR0aCIKK21zZ3N0ciAi0JzQsNC60YHQuNC80LDQu9GM0L3QsNGPINGI0LjRgNC40L3QsCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgItCg0LDRgdGB0YLQvtGP0L3QuNC1INC+0YLRgdGC0YPQv9CwINGB0LvQtdCy0LAiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzEKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIKK21zZ3N0ciAi0KDQsNGB0YHRgtC+0Y/QvdC40LUg0L7RgtGB0YLRg9C/0LAg0YHQv9GA0LDQstCwIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgItCg0LDRgdGB0YLQvtGP0L3QuNC1INC+0YLRgdGC0YPQv9CwINC80LXQttC00YMg0LrQvtC70L7QvdC60LDQvNC4IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAIC0tY29tbWFuZCDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0L/QtdGA0LLRi9C8IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3Cittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzzQvtC/0YbQuNC4Pl0gWy0tXSA80YHQv9C10YbQuNGE0LjQutCw0YbQuNGPLdC/0YPRgtC4PuKApiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0MgorbXNnaWQgImdpdCBzdGF0dXMgWzxvcHRpb25zPl0gWy0tXSA8cGF0aHNwZWM+Li4uIgorbXNnc3RyICJnaXQgc3RhdHVzIFs80L7Qv9GG0LjQuD5dIFstLV0gPNGB0L/QtdGG0LjRhNC40LrQsNGG0LjRjy3Qv9GD0YLQuD7igKYiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDcKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5LiBSdW4gdGhlXG4iCisiZm9sbG93aW5nIGNvbW1hbmQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgZWRpdG9yIHRvIGVkaXRcbiIKKyJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgItCS0LDRiNC1INC40LzRjyDQuNC70Lgg0Y3Qu9C10LrRgtGA0L7QvdC90LDRjyDQv9C+0YfRgtCwINC90LDRgdGC0YDQvtC10L3RiyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQuCDQvdCwINC+0YHQvdC+0LLQsNC90LjQuCDQstCw0YjQtdCz0L5cbtC40LzQtdC90Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPINC4INC40LzQtdC90Lgg0LzQsNGI0LjQvdGLLiDQn9C+0LbQsNC70YPQudGB0YLQsCwg0L/RgNC+0LLQtdGA0YzRgtC1LCDRh9GC0L4g0L7QvdC4IFxu0L7Qv9GA0LXQtNC10LvQtdC90Ysg0L/RgNCw0LLQuNC70YzQvdC+Llxu0JLRiyDQvNC+0LbQtdGC0LUg0L7RgtC60LvRjtGH0LjRgtGMINGN0YLQviDRg9Cy0LXQtNC+0LzQu9C10L3QuNC1INGD0YHRgtCw0L3QvtCy0LjQsiDQuNGFINC90LDQv9GA0Y/QvNGD0Y4uINCX0LDQv9GD0YHRgtC40YLQtSDRgdC70LXQtNGD0Y7RidGD0Y5cbtC60L7QvNCw0L3QtNGDINC4INGB0LvQtdC00YPQudGC0LUg0LjQvdGB0YLRgNGD0LrRhtC40Y/QvCDQstCw0YjQtdCz0L4g0YLQtdC60YHRgtC+0LLQvtCz0L4g0YDQtdC00LDQutGC0L7RgNCwLCDQtNC70Y9cbtGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0LLQsNGI0LXQs9C+INGE0LDQudC70LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4OlxuXG4gICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcblxu0J/QvtGB0LvQtSDRjdGC0L7Qs9C+LCDQuNC30LzQtdC90LjRgtGMINCw0LLRgtC+0YDRgdGC0LLQviDRjdGC0L7QuSDQutC+0LzQvNC40YLQsCDQvNC+0LbQvdC+INCx0YPQtNC10YIg0YEg0L/QvtC80L7RidGM0Y4g0LrQvtC80LDQvdC00Ys6XG5cbiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MAorbXNnaWQgIiIKKyJZb3VyIG5hbWUgYW5kIGVtYWlsIGFkZHJlc3Mgd2VyZSBjb25maWd1cmVkIGF1dG9tYXRpY2FsbHkgYmFzZWRcbiIKKyJvbiB5b3VyIHVzZXJuYW1lIGFuZCBob3N0bmFtZS4gUGxlYXNlIGNoZWNrIHRoYXQgdGhleSBhcmUgYWNjdXJhdGUuXG4iCisiWW91IGNhbiBzdXBwcmVzcyB0aGlzIG1lc3NhZ2UgYnkgc2V0dGluZyB0aGVtIGV4cGxpY2l0bHk6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIkFmdGVyIGRvaW5nIHRoaXMsIHlvdSBtYXkgZml4IHRoZSBpZGVudGl0eSB1c2VkIGZvciB0aGlzIGNvbW1pdCB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKK21zZ3N0ciAi0JLQsNGI0LUg0LjQvNGPINC40LvQuCDRjdC70LXQutGC0YDQvtC90L3QsNGPINC/0L7Rh9GC0LAg0L3QsNGB0YLRgNC+0LXQvdGLINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INC90LAg0L7RgdC90L7QstCw0L3QuNC4INCy0LDRiNC10LPQvlxu0LjQvNC10L3QuCDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8g0Lgg0LjQvNC10L3QuCDQvNCw0YjQuNC90YsuINCf0L7QttCw0LvRg9C50YHRgtCwLCDQv9GA0L7QstC10YDRjNGC0LUsINGH0YLQviDQvtC90LggXG7QvtC/0YDQtdC00LXQu9C10L3RiyDQv9GA0LDQstC40LvRjNC90L4uXG7QktGLINC80L7QttC10YLQtSDQvtGC0LrQu9GO0YfQuNGC0Ywg0Y3RgtC+INGD0LLQtdC00L7QvNC70LXQvdC40LUg0YPRgdGC0LDQvdC+0LLQuNCyINC40YUg0L3QsNC/0YDRj9C80YPRjjpcblxuICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwi0JLQsNGI0LUg0JjQvNGPXCJcbiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG5cbtCf0L7RgdC70LUg0Y3RgtC+0LPQviwg0LjQt9C80LXQvdC40YLRjCDQsNCy0YLQvtGA0YHRgtCy0L4g0Y3RgtC+0Lkg0LrQvtC80LzQuNGC0LAg0LzQvtC20L3QviDQsdGD0LTQtdGCINGBINC/0L7QvNC+0YnRjNGOINC60L7QvNCw0L3QtNGLOlxuXG4gICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzIKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgItCS0Ysg0L/QvtC/0YDQvtGB0LjQu9C4INC40YHQv9GA0LDQstC40YLRjCDQv9C+0YHQu9C10LTQvdC40Lkg0LrQvtC80LzQuNGCLCDQvdC+INC00LXQu9Cw0Y8g0Y3RgtC+INCy0Ysg0YHQtNC10LvQsNC10YLQtVxu0L/Rg9GB0YLQvtC5INC60L7QvNC80LjRgi4g0JLRiyDQvNC+0LbQtdGC0LUg0L/QvtCy0YLQvtGA0LjRgtGMINGN0YLRgyDQutC+0LzQsNC90LTRgyDRgSDQvtC/0YbQuNC10LkgLS1hbGxvdy1lbXB0eVxu0LjQu9C4INCy0Ysg0LzQvtC20LXRgtC1INGD0LTQsNC70LjRgtGMINC60L7QvNC80LjRgiDQv9C+0LvQvdC+0YHRgtGM0Y4g0YEg0L/QvtC80L7RidGM0Y4g0LrQvtC80LDQvdC00YsgXG7Cq2dpdCByZXNldCBIRUFEXsK7LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3Cittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCittc2dzdHIgItCf0YDQtdC00YvQtNGD0YnQuNC5INC+0YLQsdC+0YAg0LvRg9GH0YjQtdCz0L4g0YLQtdC/0LXRgNGMINC/0YPRgdGCLCDQstC+0LfQvNC+0LbQvdC+INC/0L7RgdC70LUg0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtC+0LIuXG7QldGB0LvQuCDQstGLINCy0YHQtSDRgNCw0LLQvdC+INGF0L7RgtC40YLQtSDRgdC00LXQu9Cw0YLRjCDQv9GD0YHRgtC+0Lkg0LrQvtC80LzQuNGCLCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1OlxuXG4gICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NAorbXNnaWQgIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IHJlc2V0J1xuIgorbXNnc3RyICLQkiDQv9GA0L7RgtC40LLQvdC+0Lwg0YHQu9GD0YfQsNC1LCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IHJlc2V0wrtcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NworbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIlRoZW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHdpbGwgcmVzdW1lIGNoZXJyeS1waWNraW5nXG4iCisidGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorbXNnc3RyICLQldGB0LvQuCDQstGLINGF0L7RgtC40YLQtSDQv9GA0L7Qv9GD0YHRgtC40YIg0Y3RgtC+0YIg0LrQvtC80LzQuNGCLCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1INC60L7QvNCw0L3QtNGDOlxuXG4gICAgZ2l0IHJlc2V0XG5cbtCf0L7RgdC70LUg0Y3RgtC+0LPQviDCq2dpdCBjaGVycnktcGljayAtLWNvbnRpbnVlwrsg0L/RgNC+0LTQvtC70LbQuNGCINC+0YLQsdC+0YAg0LvRg9GH0YjQtdCz0L5cbtCyINC+0YHRgtCw0LLRiNC40YXRgdGPINC60L7QvNC80LjRgtCw0YUuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzA0Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICLRgdCx0L7QuSDRgNCw0YHQv9Cw0LrQvtCy0LrQuCDQvtCx0YrQtdC60YLQsCDQtNC10YDQtdCy0LAgSEVBRCIKKworIzogYnVpbHRpbi9jb21taXQuYzozNDUKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQstGA0LXQvNC10L3QvdGL0Lkg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC40L3RgtC10YDQsNC60YLQuNCy0L3QvtCz0L4g0LTQvtCx0LDQstC70LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7QsdC90L7QstC40YLRjCDQstGA0LXQvNC10L3QvdGL0Lkg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NgorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICLQodCx0L7QuSDQv9GA0Lgg0L7QsdC90L7QstC70LXQvdC40Lgg0L7RgdC90L7QstC90L7Qs9C+INC60Y3RiNCwINC00LXRgNC10LLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTAgYnVpbHRpbi9jb21taXQuYzo0MTMgYnVpbHRpbi9jb21taXQuYzo0NjIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDRhNCw0LnQuyBuZXdfaW5kZXgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ0Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICLQvdC10LvRjNC30Y8g0YHQvtC30LTQsNGC0Ywg0YfQsNGB0YLQuNGH0L3Ri9C5INC60L7QvNC80LjRgiDQstC+INCy0YDQtdC80Y8g0YHQu9C40Y/QvdC40Y8uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ0NgorbXNnaWQgImNhbm5vdCBkbyBhIHBhcnRpYWwgY29tbWl0IGR1cmluZyBhIGNoZXJyeS1waWNrLiIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINGB0L7Qt9C00LDRgtGMINGH0LDRgdGC0LjRh9C90YvQuSDQutC+0LzQvNC40YIg0LLQviDQstGA0LXQvNGPINC+0YLQsdC+0YDQsCDQu9GD0YfRiNC10LPQviDQutC+0LzQvNC40YLQsC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDU1Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C5INGE0LDQudC7INC40L3QtNC10LrRgdCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICLRgyDQutC+0LzQvNC40YLQsCDCqyVzwrsg0L7RgtGB0YPRgtGB0YLQstGD0LXRgiDQsNCy0YLQvtGAINCyINC30LDQs9C+0LvQvtCy0LrQtSIKKworIzogYnVpbHRpbi9jb21taXQuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAi0YMg0LrQvtC80LzQuNGC0LAgwqslc8K7INCw0LLRgtC+0YAg0LIg0L3QtdCy0LXRgNC90L7QvCDRhNC+0YDQvNCw0YLQtSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDAKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICLQv9Cw0YDQsNC80LXRgtGAIC0tYXV0aG9yINCyINC90LXQstC10YDQvdC+0Lwg0YTQvtGA0LzQsNGC0LUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YTQvtGA0LzQsNGCINC00LDRgtGLOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NTIKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINCy0YvQsdGA0LDRgtGMINGB0LjQvNCy0L7QuyDQutC+0LzQvNC10L3RgtCw0YDQuNGPLCDQutC+0YLQvtGA0YvQuVxu0L3QtSDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LIg0YLQtdC60YPRidC10Lwg0YHQvtC+0LHRidC10L3QuNC4INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4OSBidWlsdGluL2NvbW1pdC5jOjcyMiBidWlsdGluL2NvbW1pdC5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0YDQvtGB0LjRgtGMINC60L7QvNC80LjRgiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDEgYnVpbHRpbi9zaG9ydGxvZy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIo0YfRgtC10L3QuNC1INGE0LDQudC70LAg0LbRg9GA0L3QsNC70LAg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsClcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YTQsNC50Lsg0LbRg9GA0L3QsNC70LAg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YTQsNC50Lsg0LbRg9GA0L3QsNC70LAgwqslc8K7IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyOQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0YwgTUVSR0VfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjczMworbXNnaWQgImNvdWxkIG5vdCByZWFkIFNRVUFTSF9NU0ciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzg0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINGI0LDQsdC70L7QvSDQvtC/0LjRgdCw0L3QuNGPINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIlxu0J/QvtGF0L7QttC1LCDRh9GC0L4g0LLRiyDQv9GL0YLQsNC10YLQtdGB0Ywg0LfQsNC60L7QvNC80LjRgtC40YLRjCDRgdC70LjRj9C90LjQtS5cbtCV0YHQu9C4INGN0YLQviDQvtGI0LjQsdC60LAsINC/0L7QttCw0LvRg9C50YHRgtCwINGD0LTQsNC70LjRgtC1INGE0LDQudC7XG5cdCVzXG7QuCDQv9C+0L/RgNC+0LHRg9C50YLQtSDRgdC90L7QstCwLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBjaGVycnktcGljay5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIlxu0J/QvtGF0L7QttC1LCDRh9GC0L4g0LLRiyDQv9GL0YLQsNC10YLQtdGB0Ywg0LfQsNC60L7QvNC80LjRgtC40YLRjCDQvtGC0LHQvtGAINC70YPRh9GI0LXQs9C+Llxu0JXRgdC70Lgg0Y3RgtC+INC+0YjQuNCx0LrQsCwg0L/QvtC20LDQu9GD0LnRgdGC0LAg0YPQtNCw0LvQuNGC0LUg0YTQsNC50Ltcblx0JXNcbtC4INC/0L7Qv9GA0L7QsdGD0LnRgtC1INGB0L3QvtCy0LAuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODIwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzIHRoZSBjb21taXQuXG4iCittc2dzdHIgItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAg0LTQu9GPINCy0LDRiNC40YUg0LjQt9C80LXQvdC10L3QuNC5LiDQodGC0YDQvtC60LgsXG7QvdCw0YfQuNC90LDRjtGJ0LjQtdGB0Y8g0YEgwqslY8K7INCx0YPQtNGD0YIg0L/RgNC+0LjQs9C90L7RgNC40YDQvtCy0LDQvdGLLCDQsCDQv9GD0YHRgtC+0LUg0YHQvtC+0LHRidC10L3QuNC1XG7QvtGC0LzQtdC90Y/QtdGCINC/0YDQvtGG0LXRgdGBINC60L7QvNC80LjRgtCwLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDQtNC70Y8g0LLQsNGI0LjRhSDQuNC30LzQtdC90LXQvdC40LkuINCh0YLRgNC+0LrQuCxcbtC90LDRh9C40L3QsNGO0YnQuNC10YHRjyDRgSDCqyVjwrsg0LHRg9C00YPRgiDQvtGB0YLQsNCy0LvQtdC90Ys7INCy0Ysg0LzQvtC20LXRgtC1INGD0LTQsNC70LjRgtGMINC40YUg0LLRgNGD0YfQvdGD0Y4sXG7QtdGB0LvQuCDRhdC+0YLQuNGC0LUuINCf0YPRgdGC0L7QtSDRgdC+0L7QsdGJ0LXQvdC40LUg0L7RgtC80LXQvdGP0LXRgiDQv9GA0L7RhtC10YHRgSDQutC+0LzQvNC40YLQsC5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc9CQ0LLRgtC+0YA6ICAgICAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNEYXRlOiAgICAgICVzIgorbXNnc3RyICIlc9CU0LDRgtCwOiAgICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVz0JrQvtC80LzQuNGC0LXRgDogICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg4MAorbXNnaWQgIkNhbm5vdCByZWFkIGluZGV4IgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTM3Cittc2dpZCAiRXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgItCe0YjQuNCx0LrQsCDQv9GA0Lgg0L/QvtGB0YLRgNC+0LXQvdC40Lgg0LTQtdGA0LXQstGM0LXQsiIKKworIzogYnVpbHRpbi9jb21taXQuYzo5NTIgYnVpbHRpbi90YWcuYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGxlYXNlIHN1cHBseSB0aGUgbWVzc2FnZSB1c2luZyBlaXRoZXIgLW0gb3IgLUYgb3B0aW9uLlxuIgorbXNnc3RyICLQn9C+0LbQsNC70YPQudGB0YLQsCwg0YPQutCw0LbQuNGC0LUg0YHQvtC+0LHRidC10L3QuNC1LCDQv9GA0Lgg0YPQutCw0LfQsNC90LjQuCDQvtC/0YbQuNC5IC1tINC40LvQuCAtRi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiLS1hdXRob3Igwqslc8K7INC90LUg0LIg0YTQvtGA0LzQsNGC0LUgwqvQmNC80Y8gPNC/0L7Rh9GC0LA+wrsg0Lgg0L3QtSDRgdC+0LLQv9Cw0LTQsNC10YIg0YEg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC8INCw0LLRgtC+0YDQvtC8IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjkgYnVpbHRpbi9jb21taXQuYzoxMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAi0J3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INGA0LXQttC40Lwg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEwNgorbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nINC4IC16INC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMzYKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QuNC1INC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDQvtC/0YbQuNC5IC0tcmVzZXQtYXV0aG9yINC4IC0tYXV0aG9yINC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE0NQorbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICLQndC10YfQtdCz0L4g0LjRgdC/0YDQsNCy0LvRj9GC0YwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNDgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLQktGLINCyINC/0YDQvtGG0LXRgdGB0LUg0YHQu9C40Y/QvdC40Y8g4oCUICDRgdC10LnRh9Cw0YEg0L3QtdC70YzQt9GPINC40YHQv9GA0LDQstC70Y/RgtGMLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTUwCittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hlcnJ5LXBpY2sgLS0gY2Fubm90IGFtZW5kLiIKK21zZ3N0ciAi0JLRiyDQsiDQv9GA0L7RhtC10YHRgdC1INC+0YLQsdC+0YDQsCDQu9GD0YfRiNC10LPQviDigJQgINGB0LXQudGH0LDRgSDQvdC10LvRjNC30Y8g0LjRgdC/0YDQsNCy0LvRj9GC0YwuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTMKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLQntC/0YbQuNC4IC0tc3F1YXNoINC4IC0tZml4dXAg0L3QtSDQvNC+0LPRg9GCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjMKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAi0JzQvtC20LXRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINGC0L7Qu9GM0LrQviDQvtC00L3QsCDQuNC3INC+0L/RhtC40LkgLWMvLUMvLUYvLS1maXh1cC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2NQorbXNnaWQgIk9wdGlvbiAtbSBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtYy8tQy8tRi8tLWZpeHVwLiIKK21zZ3N0ciAi0J7Qv9GG0LjRjyAtbSDQvdC1INC80L7QttC10YIg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGM0YHRjyDRgSAtYy8tQy8tRi8tLWZpeHVwLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTczCittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiLS1yZXNldC1hdXRob3Ig0LzQvtC20LXRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINGC0L7Qu9GM0LrQviDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0YEg0L7Qv9GG0LjRj9C80LggLUMsIC1jINC40LvQuCAtLWFtZW5kLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkwCittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICLQnNC+0LbQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0YLQvtC70YzQutC+INC+0LTQvdCwINC40Lcg0L7Qv9GG0LjQuSAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5MgorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAi0KPQutCw0LfQsNC90LjQtSDQv9GD0YLQtdC5INC60LDRgtCw0LvQvtCz0L7QsiDRgSDQvtC/0YbQuNGP0LzQuCAtLWluY2x1ZGUvLS1vbmx5INC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTQKK21zZ2lkICJDbGV2ZXIuLi4gYW1lbmRpbmcgdGhlIGxhc3Qgb25lIHdpdGggZGlydHkgaW5kZXguIgorbXNnc3RyICLQo9C80L3QvuKApiDQvtGC0LzQtdC90LAg0L/QvtGB0LvQtdC00L3QtdCz0L4g0YEg0LjQt9C80LXQvdC10L3QvdGL0Lwg0LjQvdC00LXQutGB0L7QvC4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5NgorbXNnaWQgIkV4cGxpY2l0IHBhdGhzIHNwZWNpZmllZCB3aXRob3V0IC1pIG9yIC1vOyBhc3N1bWluZyAtLW9ubHkgcGF0aHMuLi4iCittc2dzdHIgItCf0YPRgtC4INGP0LLQvdC+INGD0LrQsNC30LDQvdGLINC/0YPRgtC4INCx0LXQtyDQvtC/0YbQuNC5IC1pINC40LvQuCAtbzsg0L/RgNC10LTQv9C+0LvQsNCz0LDRjiDQvtC/0YbQuNGOIC0tb25seeKApiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjA4IGJ1aWx0aW4vdGFnLmM6NzMwCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY2xlYW51cCBtb2RlICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDRgNC10LbQuNC80LAg0L7Rh9C40YHRgtC60LggJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIxMworbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgItChINC+0L/RhtC40LXQuSAtYSDRg9C60LDQt9Cw0L3QuNC1INC/0YPRgtC4INC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjMgYnVpbHRpbi9jb21taXQuYzoxNjAyCittc2dpZCAic2hvdyBzdGF0dXMgY29uY2lzZWx5IgorbXNnc3RyICLQutGA0LDRgtC60L4g0L/QvtC60LDQt9Cw0YLRjCDRgdGC0LDRgtGD0YEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNSBidWlsdGluL2NvbW1pdC5jOjE2MDQKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDQstC10YDRgdC40LgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNyBidWlsdGluL2NvbW1pdC5jOjE2MDYgYnVpbHRpbi9wdXNoLmM6NTQ2Cittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgItC80LDRiNC40L3QvtGH0LjRgtCw0LXQvNGL0Lkg0LLRi9Cy0L7QtCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzMwIGJ1aWx0aW4vY29tbWl0LmM6MTYwOAorbXNnaWQgInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgdGC0LDRgtGD0YEg0LIg0LTQu9C40L3QvdC+0Lwg0YTQvtGA0LzQsNGC0LUgKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzMzIGJ1aWx0aW4vY29tbWl0LmM6MTYxMQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIgorbXNnc3RyICLQt9Cw0LLQtdGA0YjQsNGC0Ywg0LfQsNC/0LjRgdC4INCd0KPQm9CV0JLQq9CcINCx0LDQudGC0L7QvCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM1IGJ1aWx0aW4vY29tbWl0LmM6MTYxNCBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgxCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg0IGJ1aWx0aW4vdGFnLmM6NjA0Cittc2dpZCAibW9kZSIKK21zZ3N0ciAi0YDQtdC20LjQvCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM2IGJ1aWx0aW4vY29tbWl0LmM6MTYxNAorbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUg0YTQsNC50LvRiywg0L7Qv9GG0LjQvtC90LDQu9GM0L3Ri9C1INGA0LXQttC40LzRizogYWxsICjQstGB0LUpLCBub3JtYWwgKNC60LDQuiDQvtCx0YvRh9C90L4pLCBubyAo0L3QtdGCKS4gKNCf0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzkKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0LjQs9C90L7RgNC40YDRg9C10LzRi9C1INGE0LDQudC70YsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MCBwYXJzZS1vcHRpb25zLmg6MTU1Cittc2dpZCAid2hlbiIKK21zZ3N0ciAi0LrQvtCz0LTQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQxCittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyINC/0L7QtNC80L7QtNGD0LvRj9GFLCDQvtC/0YbQuNC+0L3QsNC70YzQvdC+INC60L7Qs9C00LA6IGFsbCAo0LLRgdC10LPQtNCwKSwgZGlydHkgKNC40LfQvNC10L3QtdC90L3Ri9C1KSwgdW50cmFja2VkICjQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0LUpLiAo0J/QviDRg9C80L7Qu9GH0LDQvdC40Y46IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MworbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INGE0LDQudC70Ysg0L/QviDRgdGC0L7Qu9Cx0YbQsNC8IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MjkKK21zZ2lkICJjb3VsZG4ndCBsb29rIHVwIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICLQvdC10LvRjNC30Y8g0LfQsNC/0YDQvtGB0LjRgtGMINC90L7QstC+0YHQvtC30LTQsNC90L3Ri9C5INC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDMxCittc2dpZCAiY291bGQgbm90IHBhcnNlIG5ld2x5IGNyZWF0ZWQgY29tbWl0IgorbXNnc3RyICLQvdC10LvRjNC30Y8g0YDQsNC30L7QsdGA0LDRgtGMINC90L7QstC+0YHQvtC30LTQsNC90L3Ri9C5INC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc2Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAi0L7RgtC00LXQu9C10L3QvdGL0LkgSEVBRCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc5Cittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAo0LrQvtGA0L3QtdCy0L7QuSDQutC+0LzQvNC40YIpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzIKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0YHQstC+0LTQutGDINC/0L7RgdC70LUg0YPRgdC/0LXRiNC90L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzMKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0YHQv9C40YHQvtC6INC40LfQvNC10L3QtdC90LjQuSDQsiDRiNCw0LHQu9C+0L0g0YHQvtC+0LHRidC10L3QuNGPINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzUKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICLQntC/0YbQuNC4INGB0L7QvtCx0YnQtdC90LjRjyDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc2IGJ1aWx0aW4vdGFnLmM6NjAyCittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQuNC3INGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NworbXNnaWQgImF1dGhvciIKK21zZ3N0ciAi0LDQstGC0L7RgCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc3Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgItC/0L7QtNC80LXQvdC40YLRjCDQsNCy0YLQvtGA0LAg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OCBidWlsdGluL2djLmM6MjY4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAi0LTQsNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OAorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAi0L/QvtC00LzQtdC90LjRgtGMINC00LDRgtGDINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzkgYnVpbHRpbi9tZXJnZS5jOjIxOCBidWlsdGluL25vdGVzLmM6MzkyCisjOiBidWlsdGluL25vdGVzLmM6NTU1IGJ1aWx0aW4vdGFnLmM6NjAwCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAi0YHQvtC+0LHRidC10L3QuNC1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzkKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODAKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC4INC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0L7RgiDRg9C60LDQt9Cw0L3QvdC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTgxCittc2dpZCAicmV1c2UgbWVzc2FnZSBmcm9tIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0YPQutCw0LfQsNC90L3QvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MgorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QvdC+0LUg0YHQvtC+0LHRidC10L3QuNC1INCw0LLRgtC+0YPQv9C70L7RgtC90LXQvdC40Y8g0LTQu9GPINC40YHQv9GA0LDQstC70LXQvdC40Y8g0YPQutCw0LfQsNC90L3QvtCz0L4g0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MworbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90L3QvtC1INGB0L7QvtCx0YnQtdC90LjQtSDQsNCy0YLQvtGD0L/Qu9C+0YLQvdC10L3QuNGPINC00LvRjyDRg9C/0LvQvtGC0L3QtdC90LjRjyDRg9C60LDQt9Cw0L3QvdC+0LPQviDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg0Cittc2dpZCAidGhlIGNvbW1pdCBpcyBhdXRob3JlZCBieSBtZSBub3cgKHVzZWQgd2l0aCAtQy8tYy8tLWFtZW5kKSIKK21zZ3N0ciAi0LrQvtC80LzQuNGCINGC0LXQv9C10YDRjCDQt9CwINC80L7QuNC8INCw0LLRgtC+0YDRgdGC0LLQvtC8ICjRgSDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtdC8IC1DLy1jLy0tYW1lbmQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODUgYnVpbHRpbi9sb2cuYzoxMjE2IGJ1aWx0aW4vcmV2ZXJ0LmM6ODYKK21zZ2lkICJhZGQgU2lnbmVkLW9mZi1ieToiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0YwgU2lnbmVkLW9mZi1ieToiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NgorbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGD0LrQsNC30LDQvdC90YvQuSDRhNCw0LnQuyDRiNCw0LHQu9C+0L3QsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg3Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINC60L7QvNC80LjRgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg4Cittc2dpZCAiZGVmYXVsdCIKK21zZ3N0ciAi0L/Qvi3Rg9C80L7Qu9GH0LDQvdC40Y4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OCBidWlsdGluL3RhZy5jOjYwNQorbXNnaWQgImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiCittc2dzdHIgItC60LDQuiDRg9C00LDQu9GP0YLRjCDQv9GA0L7QsdC10LvRiyDQuCAj0LrQvtC80LzQtdC90YLQsNGA0LjQuCDQuNC3INGB0L7QvtCx0YnQtdC90LjRjyDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg5Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0YHRgtCw0YLRg9GBINGE0LDQudC70L7QsiDQsiDRiNCw0LHQu9C+0L0g0YHQvtC+0LHRidC10L3QuNGPINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTEgYnVpbHRpbi9tZXJnZS5jOjIyNiBidWlsdGluL3B1bGwuYzoxNTYKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTMKK21zZ2lkICJHUEcgc2lnbiBjb21taXQiCittc2dzdHIgItC/0L7QtNC/0LjRgdCw0YLRjCDQutC+0LzQvNC40YIg0YEg0L/QvtC80L7RidGM0Y4gR1BHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTQKK21zZ2lkICJDb21taXQgY29udGVudHMgb3B0aW9ucyIKK21zZ3N0ciAi0J7Qv9GG0LjQuCDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTUKK21zZ2lkICJjb21taXQgYWxsIGNoYW5nZWQgZmlsZXMiCittc2dzdHIgItC30LDQutC+0LzQvNC40YLQuNGC0Ywg0LLRgdC1INC40LfQvNC10L3QtdC90L3Ri9C1INGE0LDQudC70YsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NgorbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDRg9C60LDQt9Cw0L3QvdGL0LUg0YTQsNC50LvRiyDQsiDQuNC90LTQtdC60YEg0LTQu9GPINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTcKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAi0LjQvdGC0LXRgNCw0LrRgtC40LLQvdC+0LUg0LTQvtCx0LDQstC70LXQvdC40LUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTgKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICLQuNC90YLQtdGA0LDQutGC0LjQstC90L7QtSDQtNC+0LHQsNCy0LvQtdC90LjQtSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5OQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAi0LfQsNC60L7QvNC80LjRgtC40YLRjCDRgtC+0LvRjNC60L4g0YPQutCw0LfQsNC90L3Ri9C1INGE0LDQudC70YsiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwMAorbXNnaWQgImJ5cGFzcyBwcmUtY29tbWl0IGhvb2siCittc2dzdHIgItC/0YDQvtC/0YPRgdGC0LjRgtGMINC/0LXRgNC10YXQstCw0YLRh9C40Log0L/QtdGA0LXQtC3QutC+0LzQvNC40YLQvtC8IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDEKK21zZ2lkICJzaG93IHdoYXQgd291bGQgYmUgY29tbWl0dGVkIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMLCDRh9GC0L4g0LHRg9C00LXRgiDQt9Cw0LrQvtC80LzQuNGH0LXQvdC+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTIKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgItC40YHQv9GA0LDQstC40YLRjCDQv9GA0LXQtNGL0LTRg9GJ0LjQuSDQutC+0LzQvNC40YIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxMworbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0L/QtdGA0LXRhdCy0LDRgtGH0LjQuiDQv9C+0YHQu9C1LdC/0LXRgNC10LfQsNC/0LjRgdC4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTgKK21zZ2lkICJvayB0byByZWNvcmQgYW4gZW1wdHkgY2hhbmdlIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0LfQsNC/0LjRgdGMINC/0YPRgdGC0L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjAKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0LfQsNC/0LjRgdGMINC40LfQvNC10L3QtdC90LjQuSDRgSDQv9GD0YHRgtGL0Lwg0YHQvtC+0LHRidC10L3QuNC10LwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY0OQorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBIRUFEIGNvbW1pdCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0YwgSEVBRCDQutC+0LzQvNC40YIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICLQpNCw0LnQuyBNRVJHRV9IRUFEINC/0L7QstGA0LXQttC00LXQvSAoJXMpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MDIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCBNRVJHRV9NT0RFIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgY29tbWl0IG1lc3NhZ2U6ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsDogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgItCe0YLQvNC10L3QsCDQutC+0LzQvNC40YLQsDsg0LLRiyDQvdC1INC40LfQvNC10L3QuNC70Lgg0YHQvtC+0LHRidC10L3QuNC1LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAi0J7RgtC80LXQvdCwINC60L7QvNC80LjRgtCwINC40Lct0LfQsCDQv9GD0YHRgtC+0LPQviDRgdC+0L7QsdGJ0LXQvdC40Y8g0LrQvtC80LzQuNGC0LAuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTc4NQorbXNnaWQgIiIKKyJSZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzZXQgSEVBRFwiIHRvIHJlY292ZXIuIgorbXNnc3RyICLQoNC10L/QvtC30LjRgtC+0YDQuNC5INCx0YvQuyDQvtCx0L3QvtCy0LvQtdC9LCDQvdC+INC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDRhNCw0LnQuyBuZXdfaW5kZXguINCj0LTQvtGB0YLQvtCy0LXRgNGM0YLQtdGB0YwsINGH0YLQviDQvdCwINC00LjRgdC60LUg0LXRgdGC0Ywg0YHQstC+0LHQvtC00L3QvtC1INC80LXRgdGC0L4g0Lgg0LrQstC+0YLQsCDQvdC1INC40YHRh9C10YDQv9Cw0L3QsCwg0LAg0L/QvtGB0LvQtSDRjdGC0L7Qs9C+INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCByZXNldCBIRUFEwrsg0LTQu9GPINCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y8uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU0Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgItCg0LDQt9C80LXRidC10L3QuNC1INGE0LDQudC70LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU1Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCz0LvQvtCx0LDQu9GM0L3Ri9C5INGE0LDQudC7INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NgorbXNnaWQgInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdC40YHRgtC10LzQvdGL0Lkg0YTQsNC50Lsg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU3Cittc2dpZCAidXNlIHJlcG9zaXRvcnkgY29uZmlnIGZpbGUiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRhNCw0LnQuyDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OAorbXNnaWQgInVzZSBnaXZlbiBjb25maWcgZmlsZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGD0LrQsNC30LDQvdC90YvQuSDRhNCw0LnQuyDQutC+0L3RhNC40LPRg9GA0LDRhtC40LgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTkKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICLQuNC00LXQvdGCLdC00LLQvtC40YfQvS3QvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OQorbXNnaWQgInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDQvdCw0YHRgtGA0L7QudC60Lgg0LjQtyDRg9C60LDQt9Cw0L3QvdC+0LPQviDQtNCy0L7QuNGH0L3QvtCz0L4g0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjAKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgItCU0LXQudGB0YLQstC40LUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjEKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi0L/QvtC70YPRh9C40YLRjCDQt9C90LDRh9C10L3QuNC1OiDQuNC80Y8gW9GI0LDQsdC70L7QvS3Qt9C90LDRh9C10L3QuNC5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MgorbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi0L/QvtC70YPRh9C40YLRjCDQstGB0LUg0LfQvdCw0YfQtdC90LjRjzog0LrQu9GO0YcgW9GI0LDQsdC70L7QvS3Qt9C90LDRh9C10L3QuNC5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MworbXNnaWQgImdldCB2YWx1ZXMgZm9yIHJlZ2V4cDogbmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLQv9C+0LvRg9GH0LjRgtGMINC30L3QsNGH0LXQvdC40Y8g0L/QviDRiNCw0LHQu9C+0L3Rgzog0YjQsNCx0LvQvtC9LdC40LzQtdC9IFvRiNCw0LHQu9C+0L0t0LfQvdCw0YfQtdC90LjQuV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjQKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICLQv9C+0LvRg9GH0LjRgtGMINC30L3QsNGH0LXQvdC40LUsINGB0L/QtdGG0LjRhNC40YfQvdC+0LUg0LTQu9GPIFVSTDog0YDQsNC30LTQtdC7Wy7Qv9C10YDQtdC80LXQvdC90LDRj10gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgItC30LDQvNC10L3QuNGC0Ywg0LLRgdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjQtSDQv9C10YDQtdC80LXQvdC90YvQtTog0LjQvNGPINC30L3QsNGH0LXQvdC40LUgW9GI0LDQsdC70L7QvS3Qt9C90LDRh9C10L3QuNC5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NgorbXNnaWQgImFkZCBhIG5ldyB2YXJpYWJsZTogbmFtZSB2YWx1ZSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQvdC+0LLRg9GOINC/0LXRgNC10LzQtdC90L3Rg9GOOiDQuNC80Y8g0LfQvdCw0YfQtdC90LjQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NworbXNnaWQgInJlbW92ZSBhIHZhcmlhYmxlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgItGD0LTQsNC70LjRgtGMINC/0LXRgNC10LzQtdC90L3Rg9GOOiDQuNC80Y8gW9GI0LDQsdC70L7QvS3Qt9C90LDRh9C10L3QuNC5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2OAorbXNnaWQgInJlbW92ZSBhbGwgbWF0Y2hlczogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDQstGB0LUg0YHQvtCy0L/QsNC00LDRjtGJ0LjQtTog0LjQvNGPIFvRiNCw0LHQu9C+0L0t0LfQvdCw0YfQtdC90LjQuV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjkKK21zZ2lkICJyZW5hbWUgc2VjdGlvbjogb2xkLW5hbWUgbmV3LW5hbWUiCittc2dzdHIgItC/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINGA0LDQt9C00LXQuzog0YHRgtCw0YDQvtC1LdC40LzRjyDQvdC+0LLQvtC1LdC40LzRjyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MAorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgItGD0LTQsNC70LjRgtGMINGA0LDQt9C00LXQuzog0LjQvNGPIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0LLQtdGB0Ywg0YHQv9C40YHQvtC6IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcyCittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgItC+0YLQutGA0YvRgtGMINCyINGA0LXQtNCw0LrRgtC+0YDQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MworbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICLQvdCw0LnRgtC4INC90LDRgdGC0YDQvtC10L3QvdGL0Lkg0YbQstC10YI6INGA0LDQt9C00LXQuyBb0L/Qvi3Rg9C80L7Qu9GH0LDQvdC40Y5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc0Cittc2dpZCAiZmluZCB0aGUgY29sb3Igc2V0dGluZzogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCittc2dzdHIgItC/0YDQvtCy0LXRgNC40YLRjCwg0YHRg9GJ0LXRgdGC0LLRg9C10YIg0LvQuCDQvdCw0YHRgtGA0L7QtdC90L3Ri9C5INGG0LLQtdGCOiDRgNCw0LfQtNC10LsgW3N0ZG91dC3QtdGB0YLRjC10dHldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc1Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAi0KLQuNC/IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICLQt9C90LDRh9C10L3QuNC1IOKAlCDRjdGC0L4gwqt0cnVlwrsgKNC/0YDQsNCy0LTQsCkg0LjQu9C4IMKrZmFsc2XCuyAo0LvQvtC20YwpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3Cittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgItC30L3QsNGH0LXQvdC40LUg4oCUINGN0YLQviDQtNC10YHRj9GC0LjRh9C90L7QtSDRh9C40YHQu9C+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4Cittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICLQt9C90LDRh9C10L3QuNC1IOKAlCDRjdGC0L4gLS1ib29sINC40LvQuCAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgItC30L3QsNGH0LXQvdC40LUg4oCUINGN0YLQviDQv9GD0YLRjCAo0Log0YTQsNC50LvRgyDQuNC70Lgg0LrQsNGC0LDQu9C+0LPRgykiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODAKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAi0JTRgNGD0LPQvtC1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgxCittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICLQt9Cw0LLQtdGA0YjQsNGC0Ywg0LfQvdCw0YfQtdC90LjRjyDQndCj0JvQldCS0KvQnCDQsdCw0LnRgtC+0LwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODIKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINGC0L7Qu9GM0LrQviDQuNC80LXQvdCwINC/0LXRgNC10LzQtdC90L3Ri9GFIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgzCittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICLRg9GH0LjRgtGL0LLQsNGC0Ywg0LTQuNGA0LXQutGC0LjQstGLIGluY2x1ZGUgKNCy0LrQu9GO0YfQtdC90LjRjyDRhNCw0LnQu9C+0LIpINC/0YDQuCDQt9Cw0L/RgNC+0YHQtSIKKworIzogYnVpbHRpbi9jb25maWcuYzozMTEKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZGVmYXVsdCBjb2xvciB2YWx1ZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfQvtCx0YDQsNGC0Ywg0LfQvdCw0YfQtdC90LjQtSDRhtCy0LXRgtCwINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIjINCt0YLQviDRhNCw0LnQuyDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIEdpdC5cblt1c2VyXVxuIyDQn9C+0LbQsNC70YPQudGB0YLQsCwg0LDQtNCw0L/RgtC40YDRg9C50YLQtSDQuCDRgNCw0YHQutC+0LzQvNC10L3RgtC40YDRg9C50YLQtSDRgdC70LXQtNGD0Y7RidC40LUg0YHRgtGA0L7QutC4OlxuI1x0dXNlciA9ICVzXG4jXHRlbWFpbCA9ICVzXG4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGE0LDQudC7INC60L7QvdGE0LjQs9GD0YDQsNGG0LjQuCAlcyIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6NTUKK21zZ2lkICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorbXNnc3RyICJnaXQgY291bnQtb2JqZWN0cyBbLXZdIFstSCB8IC0taHVtYW4tcmVhZGFibGVdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo2NQorbXNnaWQgInByaW50IHNpemVzIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDRgNCw0LfQvNC10YDQvtCyINCyINGD0LTQvtCx0L7Rh9C40YLQsNC10LzQvtC8INC00LvRjyDRh9C10LvQvtCy0LXQutCwINCy0LjQtNC1IgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MTcKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gWzxjb21taXQtaXNoPi4uLl0iCittc2dzdHIgImdpdCBkZXNjcmliZSBbPNC+0L/RhtC40Lg+XSBbPNGD0LrQsNC30LDRgtC10LvRjC3QutC+0LzQvNC40YLQsD7igKZdIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MTgKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs80L7Qv9GG0LjQuD5dIC0tZGlydHkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBub3QgYXZhaWxhYmxlIgorbXNnc3RyICLQsNC90L3QvtGC0LjRgNC+0LLQsNC90L3QsNGPINC80LXRgtC60LAgJXMg0L3QtSDQtNC+0YHRgtGD0L/QvdCwIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgItCw0L3QvdC+0YLQuNGA0L7QstCw0L3QvdCw0Y8g0LzQtdGC0LrQsCAlcyDQvdC1INGB0L7QtNC10YDQttC40YIg0LLRgdGC0YDQvtC10L3QvdC+0LPQviDQvdCw0LfQstCw0L3QuNGPIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgItC80LXRgtC60LAgwqslc8K7INGD0LbQtSDQt9C00LXRgdGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI1MCBidWlsdGluL2xvZy5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAi0J3QtdC00LXQudGB0YLQstC40YLQtdC70YzQvdC+0LUg0LjQvNGPINC+0LHRitC10LrRgtCwICVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIlcyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQvCDQvtCx0YrQtdC60YLQvtC8IMKrJXPCuyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3MAorIywgYy1mb3JtYXQKK21zZ2lkICJubyB0YWcgZXhhY3RseSBtYXRjaGVzICclcyciCittc2dzdHIgItC90LXRgiDQvNC10YLQvtC6LCDRgtC+0YfQvdC+INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0LjRhSDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VhcmNoaW5nIHRvIGRlc2NyaWJlICVzXG4iCittc2dzdHIgItC/0L7QuNGB0Log0L7Qv9C40YHQsNC90LjRjyDQtNC70Y8gJXNcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICJmaW5pc2hlZCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAi0L/QvtC40YHQuiDQvtC60L7QvdGH0LXQvSDQvdCwICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgItCd0LXRgiDQsNC90L3QvtGC0LjRgNC+0LLQsNC90L3Ri9GFINC80LXRgtC+0LosINC60L7RgtC+0YDRi9C1INC80L7Qs9GD0YIg0L7Qv9C40YHQsNGC0Ywgwqslc8K7Llxu0J3QviDQuNC80LXRjtGC0YHRjyDQvdC10LDQvdC90L7RgtC40YDQvtCy0LDQvdC90YvQtSDQvNC10YLQutC4OiDQv9C+0L/RgNC+0LHRg9C50YLQtSDQtNC+0LHQsNCy0LjRgtGMINC/0LDRgNCw0LzQtdGC0YAgLS10YWdzLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiTm8gdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJUcnkgLS1hbHdheXMsIG9yIGNyZWF0ZSBzb21lIHRhZ3MuIgorbXNnc3RyICLQndC10YIg0LzQtdGC0L7Quiwg0LrQvtGC0L7RgNGL0LUg0LzQvtCz0YPRgiDQvtC/0LjRgdCw0YLRjCDCqyVz4oCmLlxu0J/QvtC/0YDQvtCx0YPQudGC0LUg0LTQvtCx0LDQstC40YLRjCDQv9Cw0YDQsNC80LXRgtGAIC0tYWx3YXlzINC40LvQuCDRgdC+0LfQtNCw0YLRjCDQutCw0LrQuNC1LdC90LjQsdGD0LTRjCDQvNC10YLQutC4LiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAi0L/QvtGB0LXRidC10L3QviAlbHUg0LrQvtC80LzQuNGC0L7QslxuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJtb3JlIHRoYW4gJWkgdGFncyBmb3VuZDsgbGlzdGVkICVpIG1vc3QgcmVjZW50XG4iCisiZ2F2ZSB1cCBzZWFyY2ggYXQgJXNcbiIKK21zZ3N0ciAi0LHQvtC70LXQtSAlaSDQvNC10YLQvtC6INC90LDQudC00LXQvdC+OyDQv9C+0LrQsNC30LDQvdC+INC/0L7RgdC70LXQtNC90LjQtSAlaVxu0L7RgdGC0LDQvdC+0LLQu9C10L0g0L/QvtC40YHQuiDQv9C+0YHQu9C1ICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTYKK21zZ2lkICJmaW5kIHRoZSB0YWcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29tbWl0IgorbXNnc3RyICLQv9C+0LjRgdC6INC80LXRgtC60LgsINC60L7RgtC+0YDQsNGPINC40LTQtdGCINC/0L7RgdC70LUg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTcKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICLQstGL0LLQvtC0INC+0YLQu9Cw0LTQvtGH0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4INGB0YLRgNCw0YLQtdCz0LjQuCDQv9C+0LjRgdC60LAg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INCy0YvQstC+0LQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTgKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC70Y7QsdGD0Y4g0YHRgdGL0LvQutGDIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk5Cittc2dpZCAidXNlIGFueSB0YWcsIGV2ZW4gdW5hbm5vdGF0ZWQiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQu9GO0LHRg9GOINC80LXRgtC60YMsINC00LDQttC1INC90LXQsNC90L3QvtGC0LjRgNC+0LLQsNC90L3Rg9GOIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDAwCittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAi0LLRgdC10LPQtNCwINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQtNC70LjQvdC90YvQuSDRhNC+0YDQvNCw0YIg0LLRi9Cy0L7QtNCwIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDAxCittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICLRgdC70LXQtNC+0LLQsNGC0Ywg0YLQvtC70YzQutC+INC30LAg0L/QtdGA0LLRi9C8INGA0L7QtNC40YLQtdC70LXQvCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNAorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0YLQvtC70YzQutC+INGC0L7Rh9C90YvQtSDRgdC+0LLQv9Cw0LTQtdC90LjRjyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNgorbXNnaWQgImNvbnNpZGVyIDxuPiBtb3N0IHJlY2VudCB0YWdzIChkZWZhdWx0OiAxMCkiCittc2dzdHIgItGA0LDRgdGB0LzQsNGC0YDQuNCy0LDRgtGMINC/0L7RgdC70LXQtNC90LjQtSA8bj4g0LzQtdGC0L7QuiAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y46IDEwKSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwOAorbXNnaWQgIm9ubHkgY29uc2lkZXIgdGFncyBtYXRjaGluZyA8cGF0dGVybj4iCittc2dzdHIgItGA0LDRgdGB0LzQsNGC0YDQuNCy0LDRgtGMINGC0L7Qu9GM0LrQviDQvNC10YLQutC4INC/0L4gPNGI0LDQsdC70L7QvdGDPiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMCBidWlsdGluL25hbWUtcmV2LmM6MzE4Cittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICLQtdGB0LvQuCDQvdC1INC90LDQudC00LXQvdC+LCDQv9C+0LrQsNC30LDRgtGMINGB0L7QutGA0LDRidC10L3QvdGL0Lkg0L3QvtC80LXRgCDRgNC10LLQuNC30LjQuCDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMQorbXNnaWQgIm1hcmsiCittc2dzdHIgItC/0L7QvNC10YLQutCwIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDEyCittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMIDzQv9C+0LzQtdGC0LrRgz4g0L/RgNC4INC40LfQvNC10L3QtdC90L3QvtC8INGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUgKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiDCqy1kaXJ0ecK7KSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQzMAorbXNnaWQgIi0tbG9uZyBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWFiYnJldj0wIgorbXNnc3RyICItLWxvbmcg0L3QtdGB0L7QstC80LXRgdGC0LjQvNC+INGBIC0tYWJicmV2PTAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTYKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAi0JjQvNC10L3QsCDQvdC1INC90LDQudC00LXQvdGLLCDQvdC1INC80L7Qs9GDINC90LjRh9C10LPQviDQvtC/0LjRgdCw0YLRjC4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NzYKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSDQvdC10YHQvtCy0LzQtdGB0YLQuNC80L4g0YEg0YPQutCw0LfQsNC90LjQtdC8INGD0LrQsNC30LDRgtC10LvQtdC5INC60L7QvNC80LjRgtC+0LIiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICLCqyVzwrs6INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQvtCx0YvRh9C90YvQvCDRhNCw0LnQu9C+0Lwg0LjQu9C4INGB0LjQvNCy0L7Qu9GM0L3QvtC5INGB0YHRi9C70LrQvtC5IgorCisjOiBidWlsdGluL2RpZmYuYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcHRpb246ICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0L/QsNGA0LDQvNC10YLRgDogJXMiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjM1OAorbXNnaWQgIk5vdCBhIGdpdCByZXBvc2l0b3J5IgorbXNnc3RyICLQndC1INGP0LLQu9GP0LXRgtGB0Y8g0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdC8IGdpdCIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICLQv9C10YDQtdC00LDQvSDQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0L7QsdGK0LXQutGCIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQxMAorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gdHdvIGJsb2JzIGdpdmVuOiAnJXMnIgorbXNnc3RyICLQv9C10YDQtdC00LDQvdC+INCx0L7Qu9GM0YjQtSDQtNCy0YPRhSDQtNCy0L7QuNGH0L3Ri9GFINC+0LHRitC10LrRgtC+0LI6IMKrJXPCuyIKKworIzogYnVpbHRpbi9kaWZmLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgItC/0LXRgNC10LTQsNC9INC90LXQvtCx0YDQsNCx0L7RgtCw0L3QvdGL0Lkg0L7QsdGK0LXQutGCIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyNQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBb0L7Qv9GG0LjQuC1yZXYtbGlzdF0iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODAKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC/0YDQvtCz0YDQtdGB0YEg0L/QvtGB0LvQtSA8bj4g0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4MgorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiBzaWduZWQgdGFncyIKK21zZ3N0ciAi0LLRi9Cx0L7RgCDQvtCx0YDQsNCx0L7RgtC60Lgg0L/QvtC00L/QuNGB0LDQvdC90YvRhSDQvNC10YLQvtC6IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTg1Cittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHRhZ3MgdGhhdCB0YWcgZmlsdGVyZWQgb2JqZWN0cyIKK21zZ3N0ciAi0LLRi9Cx0L7RgCDQvtCx0YDQsNCx0L7RgtC60Lgg0LzQtdGC0L7Quiwg0LrQvtGC0L7RgNGL0LzQuCDQv9C+0LzQtdGH0LXQvdGLINC+0YLRhNC40LvRjNGC0YDQvtCy0LDQvdC90YvQtSDQvtCx0YrQtdC60YLRiyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4OAorbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICLQl9Cw0L/QuNGB0LDRgtGMINC/0L7QvNC10YLQutC4INCyINGN0YLQvtGCINGE0LDQudC7IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTkwCittc2dpZCAiSW1wb3J0IG1hcmtzIGZyb20gdGhpcyBmaWxlIgorbXNnc3RyICLQmNC80L/QvtGA0YLQuNGA0L7QstCw0YLRjCDQv9C+0LzQtdGC0LrQuCDQuNC3INGN0YLQvtCz0L4g0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5MgorbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICLQn9C+0LTQtNC10LvQsNGC0Ywg0LDQstGC0L7RgNCwINC80LXRgtC60LgsINC10YHQu9C4INGDINC80LXRgtC60Lgg0L7QvSDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk0Cittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgItCS0YvQstC10YHRgtC4INC/0L7Qu9C90L7QtSDQtNC10YDQtdCy0L4g0LTQu9GPINC60LDQttC00L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk2Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDQv9C+0LzQtdGC0LrRgyDQt9Cw0LLQtdGA0YjQtdC90LjRjyDQsiDQutC+0L3RhtC1INC/0L7RgtC+0LrQsCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5NworbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GB0YLQuNGC0Ywg0LLRi9Cy0L7QtCDQtNCw0L3QvdGL0YUg0LTQstC+0LjRh9C90YvRhSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk4Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAi0YHQv9C10YbQuNGE0LjQutCw0YbQuNGPINGB0YHRi9C70LrQuCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5OQorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LjRgtGMINGB0L/QtdGG0LjRhNC40LrQsNGG0LjRjiDRgdGB0YvQu9C60Lgg0Log0Y3QutGB0L/QvtGA0YLQuNGA0YPQtdC80YvQvCDRgdGB0YvQu9C60LDQvCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjEwMDAKK21zZ2lkICJhbm9ueW1pemUgb3V0cHV0IgorbXNnc3RyICLRgdC00LXQu9Cw0YLRjCDQstGL0LLQvtC0INCw0L3QvtC90LjQvNC90YvQvCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwCittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzzQvtC/0YbQuNC4Pl0gWzzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbPNGB0L/QtdGG0LjRhNC40LrQsNGG0LjRjy3RgdGB0YvQu9C60Lg+4oCmXV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMQorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSA8Z3JvdXA+IgorbXNnc3RyICJnaXQgZmV0Y2ggWzzQvtC/0YbQuNC4Pl0gPNCz0YDRg9C/0L/QsD4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMgorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPNC+0L/RhtC40Lg+XSBbKDzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiB8IDzQs9GA0YPQv9C/0LA+KeKApl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMworbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTAgYnVpbHRpbi9wdWxsLmM6MTYyCittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAi0LjQt9Cy0LvQtdGH0Ywg0YHQviDQstGB0LXRhSDQstC90LXRiNC90LjRhSDRgNC10L/QvtC30LjRgtC+0YDQuNC10LIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MiBidWlsdGluL3B1bGwuYzoxNjUKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgItC00L7Qv9C40YHQsNGC0Ywg0LogLmdpdC9GRVRDSF9IRUFEINCy0LzQtdGB0YLQviDQv9C10YDQtdC30LDQv9C40YHQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk0IGJ1aWx0aW4vcHVsbC5jOjE2OAorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAi0L/Rg9GC0Ywg0Log0L/RgNC+0LPRgNCw0LzQvNC1INGD0L/QsNC60L7QstC60Lgg0L/QsNC60LXRgtCwINC90LAg0LzQsNGI0LjQvdC1INGBINCy0L3QtdGI0L3QuNC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk1IGJ1aWx0aW4vcHVsbC5jOjE3MAorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdCw0Y8g0L/QtdGA0LXQt9Cw0L/QuNGB0Ywg0LvQvtC60LDQu9GM0L3QvtC5INCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NworbXNnaWQgImZldGNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyIKK21zZ3N0ciAi0LjQt9Cy0LvQtdGH0Ywg0YEg0L3QtdGB0LrQvtC70YzQutC40YUg0LLQvdC10YjQvdC40YUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdCyIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTkgYnVpbHRpbi9wdWxsLmM6MTcyCittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAi0LjQt9Cy0LvQtdGH0Ywg0LLRgdC1INC80LXRgtC60Lgg0Lgg0YHQstGP0LfQsNC90L3Ri9C1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAxCittc2dpZCAiZG8gbm90IGZldGNoIGFsbCB0YWdzICgtLW5vLXRhZ3MpIgorbXNnc3RyICLQvdC1INC40LfQstC70LXQutCw0YLRjCDQstGB0LUg0LzQtdGC0LrQuCAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMyBidWlsdGluL3B1bGwuYzoxNzUKK21zZ2lkICJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIKK21zZ3N0ciAi0L/QvtGH0LjRgdGC0LjRgtGMINC+0YLRgdC70LXQttC40LLQsNC10LzRi9C1INCy0L3QtdGI0L3QuNC1INCy0LXRgtC60LgsINC60L7RgtC+0YDRi9GFINGD0LbQtSDQvdC10YIg0L3QsCDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA0IGJ1aWx0aW4vcHVsbC5jOjE3OAorbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAi0L/QviDRgtGA0LXQsdC+0LLQsNC90LjRjiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNSBidWlsdGluL3B1bGwuYzoxNzkKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLRg9C/0YDQsNCy0LvQtdC90LjQtSDRgNC10LrRg9GA0YHQuNCy0L3Ri9C8INC40LfQstC70LXRh9C10L3QuNC10Lwg0L/QvtC00LzQvtC00YPQu9C10LkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDkgYnVpbHRpbi9wdWxsLmM6MTg0Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgItC+0YHRgtCw0LLQuNGC0Ywg0LfQsNCz0YDRg9C20LXQvdC90YvQuSDQv9Cw0LrQtdGCINC00LDQvdC90YvRhSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMQorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0L7QsdC90L7QstC70LXQvdC40LUg0YHRgdGL0LvQutC4IEhFQUQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTQgYnVpbHRpbi9wdWxsLmM6MTg3Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAi0LPQu9GD0LHQvtC60LDRjyDQuNGB0YLQvtGA0LjRjyDRh9Cw0YHRgtC40YfQvdC+0LPQviDQutC70L7QvdCwIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2IGJ1aWx0aW4vcHVsbC5jOjE5MAorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICLQv9GA0LXQvtCx0YDQsNC30L7QstCw0YLRjCDQsiDQv9C+0LvQvdGL0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOCBidWlsdGluL2xvZy5jOjEyMzMKK21zZ2lkICJkaXIiCittc2dzdHIgItC60LDRgtCw0LvQvtCzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE5Cittc2dpZCAicHJlcGVuZCB0aGlzIHRvIHN1Ym1vZHVsZSBwYXRoIG91dHB1dCIKK21zZ3N0ciAi0L/RgNC40YHQvtC10LTQuNC90Y/RgtGMINGN0YLQviDRgdC/0LXRgNC10LTQuCDQuiDQstGL0LLQvtC00YMg0L/Rg9GC0LXQuSDQv9C+0LTQvNC+0LTRg9C70Y8iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjIKK21zZ2lkICJkZWZhdWx0IG1vZGUgZm9yIHJlY3Vyc2lvbiIKK21zZ3N0ciAi0YDQtdC20LjQvCDQv9C+INGD0LzQvtC70YfQsNC90LjRjiDQtNC70Y8g0YDQtdC60YPRgNGB0LjQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyNCBidWlsdGluL3B1bGwuYzoxOTMKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgItC/0YDQuNC90LjQvNCw0YLRjCDRgdGB0YvQu9C60LgsINC60L7RgtC+0YDRi9C1INC+0LHQvdC+0LLQu9GP0Y7RgiAuZ2l0L3NoYWxsb3ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjUgYnVpbHRpbi9wdWxsLmM6MTk1Cittc2dpZCAicmVmbWFwIgorbXNnc3RyICLRgdC+0L7RgtCy0LXRgtGB0YLQstC40LUt0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI2IGJ1aWx0aW4vcHVsbC5jOjE5NgorbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICLRg9C60LDQt9Cw0YLRjCDRgdC+0L7RgtCy0LXRgtGB0YLQstC40LUg0YHRgdGL0LvQvtC6INC/0YDQuCDQuNC30LLQu9C10YfQtdC90LjQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM3OAorbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0YHRgdGL0LvQutGDIEhFQUQg0L3QsCDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL2ZldGNoLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgItC+0LHRitC10LrRgiAlcyDQvdC1INC90LDQudC00LXQvSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ2MworbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW9Cw0LrRgtGD0LDQu9GM0L3Qvl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiISAlLSpzICUtKnMgLT4gJXMgIChjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCkiCittc2dzdHIgIiEgJS0qcyAlLSpzIOKGkiAlcyAgKNC90LUg0YPQtNCw0LvQvtGB0Ywg0LjQt9Cy0LvQtdGH0Ywg0LIg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NzggYnVpbHRpbi9mZXRjaC5jOjU2NAorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIlvQvtGC0LrQu9C+0L3QtdC90L5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDg5Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJb0L7QsdC90L7QstC70LXQvdC40LUg0LzQtdGC0LrQuF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0OTEgYnVpbHRpbi9mZXRjaC5jOjUyNiBidWlsdGluL2ZldGNoLmM6NTQ0Cittc2dpZCAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIgorbXNnc3RyICIgICjQvdC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0LvQvtC60LDQu9GM0L3Rg9GOINGB0YHRi9C70LrRgykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MDkKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIlvQvdC+0LLQsNGPINC80LXRgtC60LBdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEyCittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICJb0L3QvtCy0LDRjyDQstC10YLQutCwXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxNQorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW9C90L7QstCw0Y8g0YHRgdGL0LvQutCwXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU2MAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0Ywg0LvQvtC60LDQu9GM0L3Rg9GOINGB0YHRi9C70LrRgyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU2MAorbXNnaWQgImZvcmNlZCB1cGRhdGUiCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+0LUg0L7QsdC90L7QstC70LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NjYKK21zZ2lkICIobm9uLWZhc3QtZm9yd2FyZCkiCittc2dzdHIgIijQsdC10Lcg0L/QtdGA0LXQvNC+0YLQutC4INCy0L/QtdGA0LXQtCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MDAgYnVpbHRpbi9mZXRjaC5jOjg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCAlczogJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzINC90LUg0L7RgtC/0YDQsNCy0LjQuyDQstGB0LUg0L3QtdC+0LHRhdC+0LTQuNC80YvQtSDQvtCx0YrQtdC60YLRi1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIiVzINC+0YLQutC70L7QvdC10L3QviDQuNC3LdC30LAg0YLQvtCz0L4sINGH0YLQviDRh9Cw0YHRgtC40YfQvdGL0LUg0LrQvtGA0L3QuCDQvdC1INGA0LDQt9GA0LXRiNC10L3QviDQvtCx0L3QvtCy0LvRj9GC0YwiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MTUgYnVpbHRpbi9mZXRjaC5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAi0JjQtyAlLipzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINC90LXQutC+0YLQvtGA0YvQtSDQu9C+0LrQsNC70YzQvdGL0LUg0YHRgdGL0LvQutC4OyDQv9C+0L/RgNC+0LHRg9C50YLQtSDQt9Cw0L/Rg9GB0YLQuNGC0YwgwqtnaXQgcmVtb3RlIHBydW5lICVzwrssINGH0YLQvtCx0Ysg0L/QvtGH0LjRgdGC0LjRgtGMINGB0YLQsNGA0YvQtSwg0LrQvtC90YTQu9C40LrRgtGD0Y7RidC40LUg0LLQtdGC0LrQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjc3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMg0LHRg9C00LXRgiDQstC40YHRj9GJ0LXQuSDQstC10YLQutC+0LkpIgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyBoYXMgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzINGB0YLQsNC70LAg0LLQuNGB0Y/RidC10Lkg0LLQtdGC0LrQvtC5KSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMQorbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW9GD0LTQsNC70LXQvdC+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMiBidWlsdGluL3JlbW90ZS5jOjEwMzQKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIijQvdC10YIpIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODMyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIGZldGNoIGludG8gY3VycmVudCBicmFuY2ggJXMgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0J7RgtC60LDQtyDQv9C+0LvRg9GH0LXQvdC40Y8g0LIg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgyAlcyDQvdC1INCz0L7Qu9C+0LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90L7QtSDQt9C90LDRh9C10L3QuNC1IMKrJTIkc8K7INC00LvRjyDQv9Cw0YDQsNC80LXRgtGA0LAgwqslMSRzwrsg0LTQu9GPICUzJHMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICLQn9Cw0YDQsNC80LXRgtGAIMKrJXPCuyDQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8g0LTQu9GPICVzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gZmV0Y2ggZnJvbSAlcyIKK21zZ3N0ciAi0J3QtSDQt9C90LDRjiDQutCw0Log0LjQt9Cy0LvQtdGH0Ywg0YEgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgItCY0LfQstC70LXRh9C10L3QuNC1INC40LcgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNzMgYnVpbHRpbi9yZW1vdGUuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LjQt9Cy0LvQtdGH0YwgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDkxCittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgItCd0LUg0YPQutCw0LfQsNC9INCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkuINCj0LrQsNC20LjRgtC1IFVSTCDQuNC70Lgg0LjQvNGPINCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQuNC3INC60L7RgtC+0YDQvtCz0L4g0LTQvtC70LbQvdGLINC40LfQstC70LXQutCw0YLRjNGB0Y8g0L3QvtCy0YvQtSDRgNC10LTQsNC60YbQuNC4LiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMTQKK21zZ2lkICJZb3UgbmVlZCB0byBzcGVjaWZ5IGEgdGFnIG5hbWUuIgorbXNnc3RyICLQktCw0Lwg0L3Rg9C20L3QviDRg9C60LDQt9Cw0YLRjCDQuNC80Y8g0LzQtdGC0LrQuC4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU2Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgItC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IC0tZGVwdGgg0LggLS11bnNoYWxsb3ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU4Cittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdW5zaGFsbG93INC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAg0L3QsCDQv9C+0LvQvdC+0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExODEKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCB0YWtlIGEgcmVwb3NpdG9yeSBhcmd1bWVudCIKK21zZ3N0ciAiZmV0Y2ggLS1hbGwg0L3QtSDQv9GA0LjQvdC40LzQsNC10YIg0LjQvNGPINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0LrQsNC6INCw0YDQs9GD0LzQtdC90YIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgzCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCDQvdC1INC40LzQtdC10YIg0YHQvNGL0YHQu9CwINC/0YDQuCDRg9C60LDQt9Cw0L3QuNC4INGB0L/QtdGG0LjRhNC40LrQsNGG0LjQuSDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgItCd0LXRgiDRgtCw0LrQvtCz0L4g0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPINC40LvQuCDQs9GA0YPQv9C/0Ys6ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwMgorbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAi0J/QvtC70YPRh9C10L3QuNC1INCz0YDRg9C/0L/RiyDQuCDRg9C60LDQt9Cw0L3QuNC1INGB0L/QtdGG0LjRhNC40LrQsNGG0LjQuSDRgdGB0YvQu9C+0Log0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6MTQKK21zZ2lkICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxtZXNzYWdlPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPGZpbGU+XSIKK21zZ3N0ciAiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDzRgdC+0L7QsdGJ0LXQvdC40LU+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA80YTQsNC50Ls+XSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjcwCittc2dpZCAicG9wdWxhdGUgbG9nIHdpdGggYXQgbW9zdCA8bj4gZW50cmllcyBmcm9tIHNob3J0bG9nIgorbXNnc3RyICLQvtGC0L/RgNCw0LLQuNGC0Ywg0LIg0LbRg9GA0L3QsNC7IDxuPiDQt9Cw0L/QuNGB0LXQuSDQuNC3INC60L7RgNC+0YLQutC+0LPQviDQttGD0YDQvdCw0LvQsCIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczCittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAi0YHQvtC60YDQsNGJ0LXQvdC40LUg0LTQu9GPIC0tbG9nICjRg9GB0YLQsNGA0LXQstGI0LXQtSkiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NgorbXNnaWQgInRleHQiCittc2dzdHIgItGC0LXQutGB0YIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIDzRgtC10LrRgdGCPiDQutCw0Log0L3QsNGH0LDQu9GM0L3QvtC1INGB0L7QvtCx0YnQtdC90LjQtSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc4Cittc2dpZCAiZmlsZSB0byByZWFkIGZyb20iCittc2dzdHIgItGE0LDQudC7INC00LvRjyDRh9GC0LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6OQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzzQvtC/0YbQuNC4Pl0gWzzRiNCw0LHQu9C+0L0+XSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyNAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3Igc2hlbGxzIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINGD0LrQsNC30LDRgtC10LvQuCDQvNC10YHRgtCwINC30LDQv9C+0LvQvdC10L3QuNGPINCyINC/0L7QtNGF0L7QtNGP0YnQtdC8INGE0L7RgNC80LDRgtC1INC00LvRjyDQutC+0LzQsNC90LTQvdC+0LPQviDQv9GA0L7RhtC10YHRgdC+0YDQsCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyNgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRg9C60LDQt9Cw0YLQtdC70Lgg0LzQtdGB0YLQsCDQt9Cw0L/QvtC70L3QtdC90LjRjyDQsiDQv9C+0LTRhdC+0LTRj9GJ0LXQvCDRhNC+0YDQvNCw0YLQtSDQtNC70Y8gcGVybCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyOAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcHl0aG9uIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINGD0LrQsNC30LDRgtC10LvQuCDQvNC10YHRgtCwINC30LDQv9C+0LvQvdC10L3QuNGPINCyINC/0L7QtNGF0L7QtNGP0YnQtdC8INGE0L7RgNC80LDRgtC1INC00LvRjyBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRg9C60LDQt9Cw0YLQtdC70Lgg0LzQtdGB0YLQsCDQt9Cw0L/QvtC70L3QtdC90LjRjyDQsiDQv9C+0LTRhdC+0LTRj9GJ0LXQvCDRhNC+0YDQvNCw0YLQtSDQtNC70Y8gVGNsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMzCittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YLQvtC70YzQutC+IDxuPiDRgdC+0LLQv9Cw0LTQsNGO0YnQuNGFINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRhNC+0YDQvNCw0YIg0LTQu9GPINCy0YvQstC+0LTQsCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNQorbXNnaWQgImtleSIKK21zZ3N0ciAi0LrQu9GO0YciCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzYKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgItC40LzRjyDQv9C+0LvRjywg0L/QviDQutC+0YLQvtGA0L7QvNGDINCy0YvQv9C+0LvQvdC40YLRjCDRgdC+0YDRgtC40YDQvtCy0LrRgyIKKworIzogYnVpbHRpbi9mc2NrLmM6MTYzIGJ1aWx0aW4vcHJ1bmUuYzoxMzcKK21zZ2lkICJDaGVja2luZyBjb25uZWN0aXZpdHkiCittc2dzdHIgItCf0YDQvtCy0LXRgNC60LAg0YHQvtC10LTQuNC90LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU2OAorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAi0J/RgNC+0LLQtdGA0LrQsCDQutCw0YLQsNC70L7Qs9C+0LIg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9mc2NrLmM6NjMxCittc2dpZCAiZ2l0IGZzY2sgWzxvcHRpb25zPl0gWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IGZzY2sgWzzQvtC/0YbQuNC4Pl0gWzzQvtCx0YrQtdC60YI+4oCmXSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM3Cittc2dpZCAic2hvdyB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC90LXQtNC+0YHRgtGD0L/QvdGL0LUg0L7QsdGK0LXQutGC0YsiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzOAorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQvtCx0YrQtdC60YLRiywg0L3QsCDQutC+0YLQvtGA0YvQtSDQvdC10YIg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL2ZzY2suYzo2MzkKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0L7RgtGH0LXRgiDQv9C+INC80LXRgtC60LDQvCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQwCittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgItCy0YvQstC10YHRgtC4INC+0YLRh9C10YIg0L/QviDQutC+0YDQvdC10LLRi9C8INGD0LfQu9Cw0LwiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MQorbXNnaWQgIm1ha2UgaW5kZXggb2JqZWN0cyBoZWFkIG5vZGVzIgorbXNnc3RyICLQstC+0YHQv9GA0LjQvdC40LzQsNGC0Ywg0L7QsdGK0LXQutGC0Ysg0LIg0LjQvdC00LXQutGB0LUg0LrQsNC6INC60L7RgNC90LXQstGL0LUg0YPQt9C70YsiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MgorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAi0YHQvtC30LTQsNGC0Ywg0LrQvtGA0L3QtdCy0YvQtSDRg9C30LvRiyDQttGD0YDQvdCw0LvQvtCyINGB0YHRi9C70L7QuiAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDMKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAi0YLQsNC60LbQtSDQv9GA0L7QstC10YDRj9GC0Ywg0L/QsNC60LXRgtGLINC4INCw0LvRjNGC0LXRgNC90LDRgtC40LLQvdGL0LUg0L7QsdGK0LXQutGC0YsiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NAorbXNnaWQgImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IgorbXNnc3RyICLRgtC+0LvRjNC60L4g0L/RgNC+0LLQtdGA0LjRgtGMINGB0L7QtdC00LjQvdC10L3QuNC1IgorCisjOiBidWlsdGluL2ZzY2suYzo2NDUKK21zZ2lkICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQsdC+0LvQtdC1INGB0YLRgNC+0LPRg9GOINC/0YDQvtCy0LXRgNC60YMiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NworbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINC+0LHRitC10LrRgtGLINC90LAg0LrQvtGC0L7RgNGL0LUg0L3QtdGCINGB0YHRi9C70L7QuiDQsiAuZ2l0L2xvc3QtZm91bmQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0OCBidWlsdGluL3BydW5lLmM6MTA3Cittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQv9GA0L7Qs9GA0LXRgdGBINCy0YvQv9C+0LvQvdC10L3QuNGPIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDcKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNQorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL2djLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCAlczogJyVzJyIKK21zZ3N0ciAi0J3QtdC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0LkgJXM6IMKrJXPCuyIKKworIzogYnVpbHRpbi9nYy5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIG9iamVjdCBkaXJlY3RvcnkgJS4qcyIKK21zZ3N0ciAi0YHQu9C40YjQutC+0Lwg0LTQu9C40L3QvdGL0Lkg0L/Rg9GC0Ywg0Log0LrQsNGC0LDQu9C+0LPRgyDQvtCx0YrQtdC60YLQsCAlLipzIgorCisjOiBidWlsdGluL2djLmM6MjY5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgItC/0L7Rh9C40YHRgtC40YLRjCDQvtCx0YrQtdC60YLRiywg0L3QsCDQutC+0YLQvtGA0YvQtSDQvdC10YIg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL2djLmM6MjcxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICLQv9GA0L7QstC10YDRj9GC0Ywg0LHQvtC70LXQtSDQstC90LjQvNCw0YLQtdC70YzQvdC+ICjQt9Cw0L3QuNC80LDQtdGCINCx0L7Qu9GM0YjQtSDQstGA0LXQvNC10L3QuCkiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNzIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINGA0LXQttC40LwgYXV0by1nYyIKKworIzogYnVpbHRpbi9nYy5jOjI3MworbXNnaWQgImZvcmNlIHJ1bm5pbmcgZ2MgZXZlbiBpZiB0aGVyZSBtYXkgYmUgYW5vdGhlciBnYyBydW5uaW5nIgorbXNnc3RyICLQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviDQt9Cw0L/Rg9GB0YLQuNGC0YwgZ2MsINC00LDQttC1INC10YHRgtGMINC00YDRg9Cz0LDRjyDQutC+0L/QuNGPIGdjINGD0LbQtSDQt9Cw0L/Rg9GJ0LXQvdCwIgorCisjOiBidWlsdGluL2djLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICLQkNCy0YLQvtC80LDRgtC40YfQtdGB0LrQsNGPINGD0L/QsNC60L7QstC60LAg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDQsiDRhNC+0L3QtSwg0LTQu9GPINC+0L/RgtC40LzQsNC70YzQvdC+0Lkg0L/RgNC+0LjQt9Cy0L7QtNC40YLQtdC70YzQvdC+0YHRgtC4LlxuIgorCisjOiBidWlsdGluL2djLmM6MzE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAi0JDQstGC0L7QvNCw0YLQuNGH0LXRgdC60LDRjyDRg9C/0LDQutC+0LLQutCwINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8sINC00LvRjyDQvtC/0YLQuNC80LDQu9GM0L3QvtC5INC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuC5cbiIKKworIzogYnVpbHRpbi9nYy5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICLQodC80L7RgtGA0LjRgtC1IMKrZ2l0IGhlbHAgZ2PCuyDRgNGD0LrQvtCy0L7QtNGB0YLQstCwINC/0L4g0YDRg9GH0L3QvtC5INC+0YfQuNGB0YLQutC1LlxuIgorCisjOiBidWlsdGluL2djLmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICJnYyDRg9C20LUg0LfQsNC/0YPRidC10L0g0L3QsCDRjdGC0L7QvCDQutC+0LzQv9GM0Y7RgtC10YDQtSDCqyVzwrsgcGlkICU8UFJJdU1BWD4gKNC10YHQu9C4INC90LXRgiwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSAtLWZvcmNlKSIKKworIzogYnVpbHRpbi9nYy5jOjM2NAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSAiCisidGhlbS4iCittc2dzdHIgItCY0LzQtdC10YLRgdGPINGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0L7QsdGK0LXQutGC0L7Qsiwg0L3QsCDQutC+0YLQvtGA0YvQtSDQvdC10YIg0YHRgdGL0LvQvtC6OyDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcHJ1bmXCuyDQtNC70Y8g0LjRhSDRg9C00LDQu9C10L3QuNGPLiIKKworIzogYnVpbHRpbi9ncmVwLmM6MjMKK21zZ2lkICJnaXQgZ3JlcCBbPG9wdGlvbnM+XSBbLWVdIDxwYXR0ZXJuPiBbPHJldj4uLi5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBncmVwIFs80L7Qv9GG0LjQuD5dIFstZV0gPNGI0LDQsdC70L7QvT4gWzzRgNC10LTQsNC60YbQuNGPPuKApl0gW1stLV0gPNC/0YPRgtGMPuKApl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXA6INGB0LHQvtC5INGB0L7Qt9C00LDQvdC40Y8g0L/QvtGC0L7QutCwOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDQxIGJ1aWx0aW4vZ3JlcC5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC00LXRgNC10LLQviAoJXMpIgorCisjOiBidWlsdGluL2dyZXAuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgZ3JlcCDQuNC3INC+0LHRitC10LrRgtCwINGC0LjQv9CwICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAi0L/QsNGA0LDQvNC10YLRgCDCqyVjwrsg0L7QttC40LTQsNC10YIg0YfQuNGB0LvQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1IgorCisjOiBidWlsdGluL2dyZXAuYzo1NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjYzOAorbXNnaWQgInNlYXJjaCBpbiBpbmRleCBpbnN0ZWFkIG9mIGluIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgItC40YHQutCw0YLRjCDQsiDQuNC90LTQtdC60YHQtSwg0LAg0L3QtSDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBidWlsdGluL2dyZXAuYzo2NDAKK21zZ2lkICJmaW5kIGluIGNvbnRlbnRzIG5vdCBtYW5hZ2VkIGJ5IGdpdCIKK21zZ3N0ciAi0LjRgdC60LDRgtGMINCyINGB0L7QtNC10YDQttC40LzQvtC8INC90LUg0YPQv9GA0LDQstC70Y/QtdC80YvQvCBnaXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0MgorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAi0LjRgdC60LDRgtGMINC4INCyINC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFLCDQuCDQsiDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQsNGFIgorCisjOiBidWlsdGluL2dyZXAuYzo2NDQKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDRhNCw0LnQu9GLINGD0LrQsNC30LDQvdC90YvQtSDQsiDCqy5naXRpZ25vcmXCuyIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQ3Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgItC40YHQutCw0YLRjCDQsiDQvdC10YHQvtCy0L/QsNC00LDRjtGJ0LjRhSDRgdGC0YDQvtC60LDRhSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQ5Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAi0LHQtdC3INGD0YfQtdGC0LAg0YDQtdCz0LjRgdGC0YDQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6NjUxCittc2dpZCAibWF0Y2ggcGF0dGVybnMgb25seSBhdCB3b3JkIGJvdW5kYXJpZXMiCittc2dzdHIgItC40YHQutCw0YLRjCDRgdC+0LLQv9Cw0LTQtdC90LjRjyDRiNCw0LHQu9C+0L3QsCDRgtC+0LvRjNC60L4g0L3QsCDQs9GA0LDQvdC40YbQsNGFINGB0LvQvtCyIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTMKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICLQvtCx0YDQsNCx0L7RgtC60LAg0LTQstC+0LjRh9C90YvRhSDRhNCw0LnQu9C+0LIg0LrQsNC6INGC0LXQutGB0YLQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6NjU1Cittc2dpZCAiZG9uJ3QgbWF0Y2ggcGF0dGVybnMgaW4gYmluYXJ5IGZpbGVzIgorbXNnc3RyICLQvdC1INC40YHQutCw0YLRjCDRgdC+0LLQv9Cw0LTQtdC90LjRjyDRiNCw0LHQu9C+0L3QsCDQsiDQtNCy0L7QuNGH0L3Ri9GFINGE0LDQudC70LDRhSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjU4Cittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIgorbXNnc3RyICLQvtCx0YDQsNCx0LDRgtGL0LLQsNGC0YzRgdGPINC00LLQvtC40YfQvdGL0LUg0YTQsNC50LvRiyDRgSDQv9C+0LzQvtGJ0YzRjiDRhNC40LvRjNGC0YDQvtCyIHRleHRjb252IgorCisjOiBidWlsdGluL2dyZXAuYzo2NjAKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgItC90LAg0LPQu9GD0LHQuNC90LUg0LzQsNC60YHQuNC80YMgPNCz0LvRg9Cx0LjQvdCwPiDRg9GA0L7QstC90LXQuSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjY0Cittc2dpZCAidXNlIGV4dGVuZGVkIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgNCw0YHRiNC40YDQtdC90L3Ri9C1INGA0LXQs9GD0LvRj9GA0L3Ri9C1INCy0YvRgNCw0LbQtdC90LjRjyBQT1NJWCIKKworIzogYnVpbHRpbi9ncmVwLmM6NjY3Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LHQsNC30L7QstGL0LUg0YDQtdCz0YPQu9GP0YDQvdGL0LUg0LLRi9GA0LDQttC10L3QuNGPIFBPU0lYICjQv9C+INGD0LzQvtC70YfQsNC90LjRjikiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY3MAorbXNnaWQgImludGVycHJldCBwYXR0ZXJucyBhcyBmaXhlZCBzdHJpbmdzIgorbXNnc3RyICLQuNC90YLQtdGA0L/RgNC10YLQuNGA0L7QstCw0YLRjCDRiNCw0LHQu9C+0L3RiyDQutCw0Log0YTQuNC60YHQuNGA0L7QstCw0L3QvdGL0LUg0YHRgtGA0L7QutC4IgorCisjOiBidWlsdGluL2dyZXAuYzo2NzMKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCBQZXJsLdGB0L7QstC80LXRgdGC0LjQvNGL0LUg0YDQtdCz0YPQu9GP0YDQvdGL0LUg0LLRi9GA0LDQttC10L3QuNGPIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzYKK21zZ2lkICJzaG93IGxpbmUgbnVtYmVycyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0L3QvtC80LXRgNCwINGB0YLRgNC+0LoiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY3NworbXNnaWQgImRvbid0IHNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY3OAorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC40LzQtdC90LAg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODAKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC40LzQtdC90LAg0YTQsNC50LvQvtCyINC+0YLQvdC+0YHQuNGC0LXQu9GM0L3QviDQutCw0YLQsNC70L7Qs9CwINGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4MgorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRgtC+0LvRjNC60L4g0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIsINCwINC90LUg0YHQvtCy0L/QsNC00LDRjtGJ0LjQtSDRgdGC0YDQvtC60LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICLRgdC40L3QvtC90LjQvCDQtNC70Y8gLS1maWxlcy13aXRoLW1hdGNoZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4NworbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRgtC+0LvRjNC60L4g0L3QtdGB0L7QstC/0LDQtNCw0Y7RidC40LUg0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4OQorbXNnaWQgInByaW50IE5VTCBhZnRlciBmaWxlbmFtZXMiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0LTQstC+0LjRh9C90YvQuSDQndCe0JvQrCDQv9C+0YHQu9C1INGB0L/QuNGB0LrQsCDQuNC80LXQvSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5MQorbXNnaWQgInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHQvtCy0L/QsNC00LXQvdC40LksINCwINC90LUg0YHQvtCy0L/QsNC00LDRjtGJ0LjQtSDRgdGC0YDQvtC60LgiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5MgorbXNnaWQgImhpZ2hsaWdodCBtYXRjaGVzIgorbXNnc3RyICLQv9C+0LTRgdCy0LXRh9C40LLQsNGC0Ywg0YHQvtCy0L/QsNC00LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5NAorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC/0YPRgdGC0YPRjiDRgdGC0YDQvtC60YMg0L/QvtGB0LvQtSDRgdC+0LLQv9Cw0LTQtdC90LjQuSDQuNC3INGA0LDQt9C90YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5NgorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0LjQvNGPINGE0LDQudC70LAg0YLQvtC70YzQutC+INGA0LDQtyDQvdCwINC90LXRgdC60L7Qu9GM0LrQviDRgdC+0LLQv9Cw0LTQtdC90LjQuSDQsiDQvtC00L3QvtC8INGE0LDQudC70LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5OQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMIDxuPiDRgdGC0YDQvtC6INC60L7QvdGC0LXQutGB0YLQsCDQv9C10YDQtdC0INC4INC/0L7RgdC70LUg0YHQvtCy0L/QsNC00LXQvdC40Y8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwMgorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0YwgPG4+INGB0YLRgNC+0Log0LrQvtC90YLQtdC60YHRgtCwINC/0LXRgNC10LQg0YHQvtCy0L/QsNC00LXQvdC40LXQvCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzA0Cittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBhZnRlciBtYXRjaGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMIDxuPiDRgdGC0YDQvtC6INC60L7QvdGC0LXQutGB0YLQsCDQv9C+0YHQu9C1INGB0L7QstC/0LDQtNC10L3QuNGPIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDUKK21zZ2lkICJzaG9ydGN1dCBmb3IgLUMgTlVNIgorbXNnc3RyICLRgtC+0LbQtSwg0YfRgtC+INC4IC1DINCa0J7Qm9CY0KfQldCh0KLQktCeIgorCisjOiBidWlsdGluL2dyZXAuYzo3MDgKK21zZ2lkICJzaG93IGEgbGluZSB3aXRoIHRoZSBmdW5jdGlvbiBuYW1lIGJlZm9yZSBtYXRjaGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGB0YLRgNC+0LrRgyDRgSDQuNC80LXQvdC10Lwg0YTRg9C90LrRhtC40Lgg0L/QtdGA0LXQtCDRgdC+0LLQv9Cw0LTQtdC90LjQtdC8IgorCisjOiBidWlsdGluL2dyZXAuYzo3MTAKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQvtC60YDRg9C20LDRjtGJ0YPRjiDRhNGD0L3QutGG0LjRjiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzEzCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDRiNCw0LHQu9C+0L3RiyDQuNC3INGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNQorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAi0L/QvtC40YHQuiDRgdC+0L7RgtCy0LXRgtGB0YLQstC40Lkg0YEgPNGI0LDQsdC70L7QvdC+0Lw+IgorCisjOiBidWlsdGluL2dyZXAuYzo3MTcKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICLQvtCx0YrQtdC00LjQvdC40YLRjCDRiNCw0LHQu9C+0L3RiyDRg9C60LDQt9Cw0L3QvdGL0LUg0YEg0L/QvtC80L7RidGM0Y4gLWUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcyOQorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICLQvdC40YfQtdCz0L4g0L3QtSDQstGL0LLQvtC00LjRgtGMLCDRg9C60LDQt9Cw0YLRjCDQvdCwINGB0L7QstC/0LDQtNC10L3QuNC1INGBINC/0L7QvNC+0YnRjNGOINC60L7QtNCwINCy0YvRhdC+0LTQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMxCittc2dpZCAic2hvdyBvbmx5IG1hdGNoZXMgZnJvbSBmaWxlcyB0aGF0IG1hdGNoIGFsbCBwYXR0ZXJucyIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDRgtC+0LvRjNC60L4g0YHQvtCy0L/QsNC00LXQvdC40Y8g0LjQtyDRhNCw0LnQu9C+0LIg0LIg0LrQvtGC0L7RgNGL0YUg0YHQvtCy0L/QsNC00LDRjtGCINCy0YHQtSDRiNCw0LHQu9C+0L3RiyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMzCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0LTQtdGA0LXQstC+INGA0LDQt9Cx0L7RgNCwINC00LvRjyDQstGL0YDQsNC20LXQvdC40Y8g0L/QvtC40YHQutCwIgorCisjOiBidWlsdGluL2dyZXAuYzo3MzcKK21zZ2lkICJwYWdlciIKK21zZ3N0ciAi0L/QtdC50LTQttC10YAiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczNworbXNnaWQgInNob3cgbWF0Y2hpbmcgZmlsZXMgaW4gdGhlIHBhZ2VyIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGB0L7QstC/0LDQtNCw0Y7RidC40LUg0YTQsNC50LvRiyDRgSDQv9C+0LzQvtGJ0YzRjiDQv9GA0L7Qs9GA0LDQvNC80Yst0L/QtdC50LTQttC10YDQsCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQwCittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0LLRi9C30L7QsiBncmVwKDEpICjQuNCz0L3QvtGA0LjRgNGD0LXRgtGB0Y8g0LIg0Y3RgtC+0Lkg0YHQsdC+0YDQutC1KSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQxIGJ1aWx0aW4vc2hvdy1yZWYuYzoxODkKK21zZ2lkICJzaG93IHVzYWdlIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINC40YHQv9C+0LvRjNC30L7QstCw0L3QuNC1IgorCisjOiBidWlsdGluL2dyZXAuYzo4MDgKK21zZ2lkICJubyBwYXR0ZXJuIGdpdmVuLiIKK21zZ3N0ciAi0L3QtSDQt9Cw0LTQsNC9INGI0LDQsdC70L7QvS4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NgorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyINGA0LDQsdC+0YLQsNC10YIg0YLQvtC70YzQutC+INCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MgorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleC4iCittc2dzdHIgIi0tY2FjaGVkINC40LvQuCAtLXVudHJhY2tlZCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAtLW5vLWluZGV4LiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk3Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMuIgorbXNnc3RyICItLW5vLWluZGV4INC40LvQuCAtLXVudHJhY2tlZCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSDRg9C60LDQt9Cw0L3QuNC10Lwg0YDQtdCy0LjQt9C40LguIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDAKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cy4iCittc2dzdHIgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkINC90LUg0LzQvtC20LXRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINC00LvRjyDQvtGC0YHQu9C10LbQuNCy0LDQtdC80L7Qs9C+INGB0L7QtNC10YDQttC40LzQvtCz0L4uIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDgKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICLRg9C60LDQt9Cw0L3QviDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4gLS1jYWNoZWQg0Lgg0LTQtdGA0LXQstC+LiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjgwCittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgWy10IDzRgtC40L8+XSBbLXddIFstLXBhdGg9PNGE0LDQudC7PiB8IC0tbm8tZmlsdGVyc10gWy0tc3RkaW5dIFstLV0gPNGE0LDQudC7PuKApiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjgxCittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIDwgPGxpc3Qtb2YtcGF0aHM+IgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMgPCA80YHQv9C40YHQvtC6LdC/0YPRgtC10Lk+IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTIgYnVpbHRpbi90YWcuYzo2MTQKK21zZ2lkICJ0eXBlIgorbXNnc3RyICLRgtC40L8iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5MgorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICLRgtC40L8g0L7QsdGK0LXQutGC0LAiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5MworbXNnaWQgIndyaXRlIHRoZSBvYmplY3QgaW50byB0aGUgb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICLQt9Cw0L/QuNGB0Ywg0L7QsdGK0LXQutGC0LAg0LIg0LHQsNC30YMg0LTQsNC90L3Ri9GFINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0L7QsdGK0LXQutGCINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NworbXNnaWQgInN0b3JlIGZpbGUgYXMgaXMgd2l0aG91dCBmaWx0ZXJzIgorbXNnc3RyICLRgdC+0YXRgNCw0L3QuNGC0Ywg0YTQsNC50Lsg0LHQtdC3INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPINGE0LjQu9GM0YLRgNC+0LIiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OAorbXNnaWQgIiIKKyJqdXN0IGhhc2ggYW55IHJhbmRvbSBnYXJiYWdlIHRvIGNyZWF0ZSBjb3JydXB0IG9iamVjdHMgZm9yIGRlYnVnZ2luZyBHaXQiCittc2dzdHIgItGF0LXRiNC40YDQvtCy0LDRgtGMINC70Y7QsdC+0Lkg0LzRg9GB0L7RgCDQuCDRgdC+0LfQtNCw0LLQsNGC0Ywg0L/QvtCy0YDQtdC20LTQtdC90L3Ri9C1INC+0LHRitC10LrRgtGLINC00LvRjyDQvtGC0LvQsNC00LrQuCBHaXQiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorbXNnaWQgInByb2Nlc3MgZmlsZSBhcyBpdCB3ZXJlIGZyb20gdGhpcyBwYXRoIgorbXNnc3RyICLQvtCx0YDQsNCx0L7RgtCw0YLRjCDRhNCw0LnQuyDRgtCw0LosINCx0YPQtNGC0L4g0L7QvSDQvdCw0YXQvtC00LjRgtGB0Y8g0L/QviDRg9C60LDQt9Cw0L3QvdC+0LzRgyDQv9GD0YLQuCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDEKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdC/0LjRgdC+0Log0LLRgdC10YUg0LTQvtGB0YLRg9C/0L3Ri9GFINC60L7QvNCw0L3QtCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDIKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0L/QuNGB0L7QuiDQv9C+0LvQtdC30L3Ri9GFINGA0YPQutC+0LLQvtC00YHRgtCyIgorCisjOiBidWlsdGluL2hlbHAuYzo0MworbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgItC+0YLQutGA0YvRgtGMINGA0YPQutC+0LLQvtC00YHRgtCy0L4g0LIg0YTQvtGA0LzQsNGC0LUgbWFuIgorCisjOiBidWlsdGluL2hlbHAuYzo0NAorbXNnaWQgInNob3cgbWFudWFsIGluIHdlYiBicm93c2VyIgorbXNnc3RyICLQvtGC0LrRgNGL0YLRjCDRgNGD0LrQvtCy0L7QtNGB0YLQstC+INCyINCy0LXQsS3QsdGA0LDRg9C30LXRgNC1IgorCisjOiBidWlsdGluL2hlbHAuYzo0NgorbXNnaWQgInNob3cgaW5mbyBwYWdlIgorbXNnc3RyICLQvtGC0LrRgNGL0YLRjCDRgNGD0LrQvtCy0L7QtNGB0YLQstC+INCyINGE0L7RgNC80LDRgtC1IGluZm8iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUyCittc2dpZCAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1ndWlkZXNdIFstLW1hbiB8IC0td2ViIHwgLS1pbmZvXSBbPGNvbW1hbmQ+XSIKK21zZ3N0ciAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1ndWlkZXNdIFstLW1hbiB8IC0td2ViIHwgLS1pbmZvXSBbPNC60L7QvNCw0L3QtNCwPl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICLQvdC10L7Qv9C+0LfQvdCw0L3QvdGL0Lkg0YTQvtGA0LzQsNGCINGA0YPQutC+0LLQvtC00YHRgtCy0LAgwqslc8K7IgorCisjOiBidWlsdGluL2hlbHAuYzo5MQorbXNnaWQgIkZhaWxlZCB0byBzdGFydCBlbWFjc2NsaWVudC4iCittc2dzdHIgItCh0LHQvtC5INC/0YDQuCDQt9Cw0L/Rg9GB0LrQtSBlbWFjc2NsaWVudC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwNAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAi0KHQsdC+0Lkg0L/RgNC4INC+0L/RgNC10LTQtdC70LXQvdC40Lgg0LLQtdGA0YHQuNC4IGVtYWNzY2xpZW50LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgItCy0LXRgNGB0LjRjyBlbWFjc2NsaWVudCDCqyVkwrsg0YHQu9C40YjQutC+0Lwg0YHRgtCw0YDQsNGPICg8IDIyKS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEzMCBidWlsdGluL2hlbHAuYzoxNTggYnVpbHRpbi9oZWxwLmM6MTY3IGJ1aWx0aW4vaGVscC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnOiAlcyIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INC30LDQv9GD0YHQutC1IMKrJXPCuzogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiwqslc8K7OiDQv9GD0YLRjCDQtNC70Y8g0L3QtdC/0L7QtNC00LXRgNC20LjQstCw0LXQvNC+0Lkg0L/RgNC+0LPRgNCw0LzQvNGLINC/0YDQvtGB0LzQvtGC0YDQsCBtYW4uXG7QktC80LXRgdGC0L4g0Y3RgtC+0LPQviDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrbWFuLjzQv9GA0L7Qs9GA0LDQvNC80LA+LmNtZMK7LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiwqslc8K7OiDQutC+0LzQsNC90LTQsCDQtNC70Y8g0L3QtdC/0L7QtNC00LXRgNC20LjQstCw0LXQvNC+0Lkg0L/RgNC+0LPRgNCw0LzQvNGLINC/0YDQvtGB0LzQvtGC0YDQsCBtYW4uXG7QktC80LXRgdGC0L4g0Y3RgtC+0LPQviDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrbWFuLjzQv9GA0L7Qs9GA0LDQvNC80LA+LnBhdGjCuy4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICLCqyVzwrs6INC90LXQuNC30LLQtdGB0YLQvdCw0Y8g0L/RgNC+0LPRgNCw0LzQvNCwINC/0YDQvtGB0LzQvtGC0YDQsCBtYW4uIgorCisjOiBidWlsdGluL2hlbHAuYzozNzEKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgItC/0YDQvtCz0YDQsNC80LzQsCDQv9GA0L7RgdC80L7RgtGA0LAgbWFuINC90LUg0L7QsdGA0LDQsdC+0YLQsNC70LAg0LfQsNC/0YDQvtGBIgorCisjOiBidWlsdGluL2hlbHAuYzozNzkKK21zZ2lkICJubyBpbmZvIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICLQv9GA0L7Qs9GA0LDQvNC80LAg0L/RgNC+0YHQvNC+0YLRgNCwIGluZm8g0L3QtSDQvtCx0YDQsNCx0L7RgtCw0LvQsCDQt9Cw0L/RgNC+0YEiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQyOAorbXNnaWQgIkRlZmluaW5nIGF0dHJpYnV0ZXMgcGVyIHBhdGgiCittc2dzdHIgItCe0L/RgNC10LTQtdC70LXQvdC40LUg0LDRgtGA0LjQsdGD0YLQvtCyINC00LvRjyDQv9GD0YLQtdC5INGE0LDQudC70L7QsiDQuNC70Lgg0LrQsNGC0LDQu9C+0LPQvtCyIgorCisjOiBidWlsdGluL2hlbHAuYzo0MjkKK21zZ2lkICJFdmVyeWRheSBHaXQgV2l0aCAyMCBDb21tYW5kcyBPciBTbyIKK21zZ3N0ciAi0J/QvtCy0YHQtdC00L3QtdCy0L3Ri9C5IEdpdCDRgSAyMCDQutC+0LzQsNC90LTQsNC80Lgg0LjQu9C4INC+0LrQvtC70L4g0YLQvtCz0L4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMAorbXNnaWQgIkEgR2l0IGdsb3NzYXJ5IgorbXNnc3RyICLQk9C70L7RgdGB0LDRgNC40LkgR2l0IgorCisjOiBidWlsdGluL2hlbHAuYzo0MzEKK21zZ2lkICJTcGVjaWZpZXMgaW50ZW50aW9uYWxseSB1bnRyYWNrZWQgZmlsZXMgdG8gaWdub3JlIgorbXNnc3RyICLQo9C60LDQt9Cw0L3QuNC1INGB0L/QtdGG0LjQsNC70YzQvdC+INC40LPQvdC+0YDQuNGA0YPQtdC80YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMgorbXNnaWQgIkRlZmluaW5nIHN1Ym1vZHVsZSBwcm9wZXJ0aWVzIgorbXNnc3RyICLQntC/0YDQtdC00LXQu9C10L3QuNC1INGB0LLQvtC50YHRgtCyINC/0L7QtNC80L7QtNGD0LvQtdC5IgorCisjOiBidWlsdGluL2hlbHAuYzo0MzMKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgItCj0LrQsNC30LDQvdC40LUg0YDQtdC00LDQutGG0LjQuSDQuCDQtNC40LDQv9Cw0LfQvtC90L7QsiDQtNC70Y8gR2l0IgorCisjOiBidWlsdGluL2hlbHAuYzo0MzQKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQgKGZvciB2ZXJzaW9uIDEuNS4xIG9yIG5ld2VyKSIKK21zZ3N0ciAi0KPRh9C10LHQvdC+0LUg0LLQstC10LTQtdC90LjQtSDQsiBHaXQgKNC00LvRjyDQstC10YDRgdC40LggMS41LjEg0LjQu9C4INC90L7QstC10LUpIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzUKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgItCe0LHQt9C+0YAg0YDQtdC60L7QvNC10L3QtNGD0LXQvNGL0YUg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtC10Lkg0LLRi9C/0L7Qu9C90Y/QtdC80YvRhSDQtNC10LnRgdGC0LLQuNC5INGBIEdpdCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ3Cittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZTpcbiIKK21zZ3N0ciAi0J7RgdC90L7QstC90YvQtSDRgNGD0LrQvtCy0L7QtNGB0YLQstCwIEdpdDpcbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDY4IGJ1aWx0aW4vaGVscC5jOjQ4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMlcyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40LU6ICVzJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJgZ2l0ICVzJyBpcyBhbGlhc2VkIHRvIGAlcyciCittc2dzdHIgIsKrZ2l0ICVzwrsg4oCUINGN0YLQviDRgdC+0LrRgNCw0YnQtdC90LjQtSDQtNC70Y8gwqslc8K7IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0YwgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAi0L3QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDRgtC40L/QsCDQvtCx0YrQtdC60YLQsCDQvdCwICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAi0L7QttC40LTQsNC10LzRi9C5INC+0LHRitC10LrRgiDQvdC1INC/0L7Qu9GD0YfQtdC9INC90LAgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICLQvtCx0YrQtdC60YIgJXM6INC+0LbQuNC00LDQtdC80YvQuSDRgtC40L8gJXMsINC/0L7Qu9GD0YfQtdC9ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0L7Qu9C90LjRgtGMICVkINCx0LDQudGCIgorbXNnc3RyWzFdICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C+0LvQvdC40YLRjCAlZCDQsdCw0LnRgtCwIgorbXNnc3RyWzJdICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C+0LvQvdC40YLRjCAlZCDQsdCw0LnRgtC+0LIiCittc2dzdHJbM10gItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0L7Qu9C90LjRgtGMICVkINCx0LDQudGC0L7QsiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc3Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICLQvdC10L7QttC40LTQsNC90L3Ri9C5INC60L7QvdC10YYg0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc4Cittc2dpZCAicmVhZCBlcnJvciBvbiBpbnB1dCIKK21zZ3N0ciAi0L7RiNC40LHQutCwINGH0YLQtdC90LjRjyDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTAKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC+INCx0L7Qu9GM0YjQtSDQsdCw0LnRgiwg0YfQtdC8INCx0YvQu9C+INC00L7RgdGC0YPQv9C90L4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5NworbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgItC/0LDQutC10YIg0YHQu9C40YjQutC+0Lwg0LHQvtC70YzRiNC+0Lkg0LTQu9GPINGC0LXQutGD0YnQtdCz0L4g0L7Qv9GA0LXQtNC10LvQtdC90LjRjyBvZmZfdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiBwYWNrZmlsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC+0YLQutGA0YvRgtGMINGE0LDQudC7INC/0LDQutC10YLQsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMzMgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICLQvdC10YHQvtC+0YLQstC10YLRgdGC0LLQuNC1INC/0L7QtNC/0LjRgdC4INC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgItCy0LXRgNGB0LjRjyDQv9Cw0LrQtdGC0LAgJTxQUkl1MzI+INC90LUg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGC0YHRjyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICVsdTogJXMiCittc2dzdHIgItCyINC/0LDQutC10YLQtSDRgdC+0LTQtdGA0LbQuNGC0YHRjyDQv9C+0LLRgNC10LbQtNC10L3QvdGL0Lkg0L7QsdGK0LXQutGCINC/0L4g0YHQvNC10YnQtdC90LjRjiAlbHU6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAi0L/RgNC+0LPRgNCw0LzQvNCwINGB0LbQsNGC0LjRjyDQstC10YDQvdGD0LvQsCAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIyCittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAi0L/QtdGA0LXQv9C+0LvQvdC10L3QuNC1INC30L3QsNGH0LXQvdC40Y8g0YHQvNC10YnQtdC90LjRjyDRgyDQsdCw0LfQvtCy0L7Qs9C+INC+0LHRitC10LrRgtCwINC00LXQu9GM0YLRiyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMwCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICLRgdC80LXRidC10L3QuNC1INCx0LDQt9C+0LLQvtC5INC00LXQu9GM0YLRiyDQstGL0YjQu9C+INC30LAg0LTQvtC/0YPRgdGC0LjQvNGL0LUg0L/RgNC10LTQtdC70YsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICLQvdC10LjQt9Cy0LXRgdGC0L3Ri9C5INGC0LjQvyDQvtCx0YrQtdC60YLQsCAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY5Cittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgcHJlYWQg0LTQu9GPINGE0LDQudC70LAg0L/QsNC60LXRgtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAi0L/RgNC10LbQtNC10LLRgNC10LzQtdC90L3QvtC1INC+0LrQvtC90YfQsNC90LjQtSDRhNCw0LnQu9CwINC/0LDQutC10YLQsCwgJWx1INCx0LDQudGCINC+0YLRgdGD0YLRgdGC0LLRg9C10YIiCittc2dzdHJbMV0gItC/0YDQtdC20LTQtdCy0YDQtdC80LXQvdC90L7QtSDQvtC60L7QvdGH0LDQvdC40LUg0YTQsNC50LvQsCDQv9Cw0LrQtdGC0LAsICVsdSDQsdCw0LnRgtCwINC+0YLRgdGD0YLRgdGC0LLRg9C10YIiCittc2dzdHJbMl0gItC/0YDQtdC20LTQtdCy0YDQtdC80LXQvdC90L7QtSDQvtC60L7QvdGH0LDQvdC40LUg0YTQsNC50LvQsCDQv9Cw0LrQtdGC0LAsICVsdSDQsdCw0LnRgtC+0LIg0L7RgtGB0YPRgtGB0YLQstGD0LXRgiIKK21zZ3N0clszXSAi0L/RgNC10LbQtNC10LLRgNC10LzQtdC90L3QvtC1INC+0LrQvtC90YfQsNC90LjQtSDRhNCw0LnQu9CwINC/0LDQutC10YLQsCwgJWx1INCx0LDQudGC0L7QsiDQvtGC0YHRg9GC0YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTcKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAi0YHQtdGA0YzQtdC30L3QvtC1INC90LXRgdC+0L7RgtCy0LXRgtGB0YLQstC40LUg0L/RgNC4INGA0LDRgdC/0LDQutC+0LLQutC1IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NDMgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc3MgorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgItCd0JDQmdCU0JXQndCQINCa0J7Qm9Cb0JjQl9CY0K8gU0hBMSDQoSAlcyAhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NDYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNjIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5INC+0LHRitC10LrRgiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODI2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYmxvYiBvYmplY3QgJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDRhNCw0LnQuyDQtNCy0L7QuNGH0L3QvtCz0L4g0L7QsdGK0LXQutGC0LAgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0LkgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MworbXNnaWQgIkVycm9yIGluIG9iamVjdCIKK21zZ3N0ciAi0J7RiNC40LHQutCwINCyINC+0LHRitC10LrRgtC1IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGFsbCBjaGlsZCBvYmplY3RzIG9mICVzIGFyZSByZWFjaGFibGUiCittc2dzdHIgItCd0LUg0LLRgdC1INC00L7Rh9C10YDQvdC40LUg0L7QsdGK0LXQutGC0YsgJXMg0LTQvtGB0YLQuNC20LjQvNGLIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTcgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTQ4Cittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0L/RgNC40LzQtdC90LXQvdC40Lgg0LTQtdC70YzRgtGLIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE4Cittc2dpZCAiUmVjZWl2aW5nIG9iamVjdHMiCittc2dzdHIgItCf0L7Qu9GD0YfQtdC90LjQtSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTE4Cittc2dpZCAiSW5kZXhpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0JjQvdC00LXQutGB0LjRgNC+0LLQsNC90LjQtSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTUwCittc2dpZCAicGFjayBpcyBjb3JydXB0ZWQgKFNIQTEgbWlzbWF0Y2gpIgorbXNnc3RyICLQv9Cw0LrQtdGCINC/0L7QstGA0LXQttC00LXQvSAo0L3QtdGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSBTSEExKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1NQorbXNnaWQgImNhbm5vdCBmc3RhdCBwYWNrZmlsZSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgZnN0YXQg0LTQu9GPINGE0LDQudC70LAg0L/QsNC60LXRgtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU4Cittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICLRhNCw0LnQuyDQv9Cw0LrQtdGC0LAg0YHQvtC00LXRgNC20LjRgiDQvNGD0YHQvtGAINCyINC60L7QvdGG0LUiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjkKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICLQsdC10LfRg9C80L3QsNGPINC/0YPRgtCw0L3QuNGG0LAg0LIgcGFyc2VfcGFja19vYmplY3RzKCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExOTQKK21zZ2lkICJSZXNvbHZpbmcgZGVsdGFzIgorbXNnc3RyICLQntC/0YDQtdC00LXQu9C10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0L/QvtGC0L7QujogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDcKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICLQsdC10LfRg9C80L3QsNGPINC/0YPRgtCw0L3QuNGG0LAiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0ciAi0LfQsNCy0LXRgNGI0LXQvdC+INGBICVkINC70L7QutCw0LvRjNC90YvQvNC4INC+0LHRitC10LrRgtCw0LzQuCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI2MworIywgYy1mb3JtYXQKK21zZ2lkICJVbmV4cGVjdGVkIHRhaWwgY2hlY2tzdW0gZm9yICVzIChkaXNrIGNvcnJ1cHRpb24/KSIKK21zZ3N0ciAi0J3QtdC+0LbQuNC00LDQvdC90LDRjyDQutC+0L3RgtGA0L7Qu9GM0L3QsNGPINGB0YPQvNC80LAg0LIg0LrQvtC90YbQtSAlcyAo0LTQuNGB0Log0L/QvtCy0YDQtdC20LTQtdC9PykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gItC/0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiAlZCDQvdC10YDQsNC30YDQtdGI0LXQvdC90YPRjiDQtNC10LvRjNGC0YMiCittc2dzdHJbMV0gItC/0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiAlZCDQvdC10YDQsNC30YDQtdGI0LXQvdC90YvQtSDQtNC10LvRjNGC0YsiCittc2dzdHJbMl0gItC/0LDQutC10YIg0YHQvtC00LXRgNC20LjRgiAlZCDQvdC10YDQsNC30YDQtdGI0LXQvdC90YvRhSDQtNC10LvRjNGCIgorbXNnc3RyWzNdICLQv9Cw0LrQtdGCINGB0L7QtNC10YDQttC40YIgJWQg0L3QtdGA0LDQt9GA0LXRiNC10L3QvdGL0YUg0LTQtdC70YzRgiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZGVmbGF0ZSBhcHBlbmRlZCBvYmplY3QgKCVkKSIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINGB0LbQsNGC0Ywg0L/RgNC40YHQvtC10LTQuNC90LXQvdC90YvQuSDQvtCx0YrQtdC60YIgKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAi0LvQvtC60LDQu9GM0L3Ri9C5INC+0LHRitC10LrRgiAlcyDQv9C+0LLRgNC10LbQtNC10L0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzOTEKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAi0L7RiNC40LHQutCwINC/0YDQuCDQt9Cw0LrRgNGL0YLQuNC4INGE0LDQudC70LAg0L/QsNC60LXRgtCwIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINGE0LDQudC7INGD0LTQtdGA0LbQsNC90LjRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4ga2VlcCBmaWxlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC60YDRi9GC0Ywg0LfQsNC/0LjRgdCw0L3QvdGL0Lkg0YTQsNC50Lsg0YPQtNC10YDQttCw0L3QuNGPIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQyNQorbXNnaWQgImNhbm5vdCBzdG9yZSBwYWNrIGZpbGUiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMINGE0LDQudC7INC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQzNgorbXNnaWQgImNhbm5vdCBzdG9yZSBpbmRleCBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRhNCw0LnQuyDQuNC90LTQtdC60YHQsCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICLQv9C70L7RhdC+0LkgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgItGD0LrQsNC30LDQvdC+INC90LXQv9GA0LDQstC40LvRjNC90L7QtSDQutC+0LvQuNGH0LXRgdGC0LLQviDQv9C+0YLQvtC60L7QsiAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAi0L3QtdGCINC/0L7QtNC00LXRgNC20LrQuCDQv9C+0YLQvtC60L7Qsiwg0LjQs9C90L7RgNC40YDQvtCy0LDQvdC40LUgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L7RgtC60YDRi9GC0Ywg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC5INGE0LDQudC7INC/0LDQutC10YLQsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBpZHggZmlsZSBmb3IgJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40Lkg0YTQsNC50Lsg0LjQvdC00LXQutGB0LAg0LTQu9GPIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICLQvdC1INC00LXQu9GM0YLRizogJWQg0L7QsdGK0LXQutGCIgorbXNnc3RyWzFdICLQvdC1INC00LXQu9GM0YLRizogJWQg0L7QsdGK0LXQutGC0LAiCittc2dzdHJbMl0gItC90LUg0LTQtdC70YzRgtGLOiAlZCDQvtCx0YrQtdC60YLQvtCyIgorbXNnc3RyWzNdICLQvdC1INC00LXQu9GM0YLRizogJWQg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5MworIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICLQtNC70LjQvdCwINGG0LXQv9C+0YfQutC4ID0gJWQ6ICVsdSDQvtCx0YrQtdC60YIiCittc2dzdHJbMV0gItC00LvQuNC90LAg0YbQtdC/0L7Rh9C60LggPSAlZDogJWx1INC+0LHRitC10LrRgtCwIgorbXNnc3RyWzJdICLQtNC70LjQvdCwINGG0LXQv9C+0YfQutC4ID0gJWQ6ICVsdSDQvtCx0YrQtdC60YLQvtCyIgorbXNnc3RyWzNdICLQtNC70LjQvdCwINGG0LXQv9C+0YfQutC4ID0gJWQ6ICVsdSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjIzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLQtdGA0L3Rg9GC0YzRgdGPINCyINGC0LXQutGD0YnQuNC5INGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjc1IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NzgKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2OTAgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY5NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgJXMiCittc2dzdHIgItC/0LvQvtGF0L7QuSAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcwOAorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LHQtdC3IC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MTIgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAi0LjQvNGPINC/0LDQutC10YLQsCDCqyVzwrsg0L3QtSDQvtC60LDQvdGH0LjQstCw0LXRgtGB0Y8g0L3QsCDCqy5wYWNrwrsiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MjkKK21zZ2lkICItLXZlcmlmeSB3aXRoIG5vIHBhY2tmaWxlIG5hbWUgZ2l2ZW4iCittc2dzdHIgIi0tdmVyaWZ5INCx0LXQtyDRg9C60LDQt9Cw0L3QuNGPINC40LzQtdC90Lgg0YTQsNC50LvQsCDQv9Cw0LrQtdGC0LAiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQtdC00L7RgdGC0LDQstC40YLRjCDQtNC+0YHRgtGD0L8g0LogJXMg0L3QsCDQt9Cw0L/QuNGB0YwiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgbmFtZSAlcyIKK21zZ3N0ciAi0YHQu9C40YjQutC+0Lwg0LTQu9C40L3QvdC+0LUg0LjQvNGPINGI0LDQsdC70L7QvdCwICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0INC00LvRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0IHRlbXBsYXRlICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHN0YXQg0LTQu9GPINGI0LDQsdC70L7QvdCwIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywgb3BlbmRpciDQtNC70Y8gwqslc8K7IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0YwgcmVhZGxpbmsg0LTQu9GPIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgc3ltbGluayAlcyIKK21zZ3N0ciAi0YHQu9C40YjQutC+0Lwg0LTQu9C40L3QvdCw0Y8g0YHQuNC80LLQvtC70YzQvdCw0Y8g0YHRgdGL0LvQutCwICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGB0LjQvNCy0L7Qu9GM0L3Rg9GOINGB0YHRi9C70LrRgyDCqyVzwrsg0L3QsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwNworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY29weSAnJXMnIHRvICclcyciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQutC+0L/QuNGA0L7QstCw0YLRjCDRhNCw0LnQuyDCqyVzwrsg0LIgwqslc8K7IgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0L3QuNC1INGI0LDQsdC70L7QvdCwICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBwYXRoICVzIgorbXNnc3RyICLRgdC70LjRiNC60L7QvCDQtNC70LjQvdC90YvQuSDQv9GD0YLRjCDRiNCw0LHQu9C+0L3QsCAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgJXMiCittc2dzdHIgItGI0LDQsdC70L7QvdGLINC90LUg0L3QsNC50LTQtdC90YsgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgb2YgYSB3cm9uZyBmb3JtYXQgdmVyc2lvbiAlZCBmcm9tICclcyciCittc2dzdHIgItC90LUg0LrQvtC/0LjRgNGD0Y4g0YjQsNCx0LvQvtC90Ysg0LIg0L3QtdC/0YDQsNCy0LjQu9GM0L3QvtC5INCy0LXRgNGB0LjQuCDRhNC+0YDQvNCw0YLQsCAlZCDQuNC3IMKrJXPCuyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBnaXQgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLRgdC70LjRiNC60L7QvCDQtNC70LjQvdC90YvQuSDQv9GD0YLRjCDQuiDQutCw0YLQsNC70L7Qs9GDIGdpdCAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzQ0IGJ1aWx0aW4vaW5pdC1kYi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgItC90LUg0YPQtNCw0LXRgtGB0Y8g0L7QsdGA0LDQsdC+0YLQsNGC0Ywg0YTQsNC50Lsg0YLQuNC/0LAgJWQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQtdGC0YHRjyDQv9C10YDQtdC80LXRgdGC0LjRgtGMINGE0LDQudC7ICVzINCyICVzIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCisjLiBleGlzdGluZyIgb3IgIkluaXRpYWxpemVkIGVtcHR5IiwgdGhlIHNlY29uZCAiIHNoYXJlZCIgb3IKKyMuICIiLCBhbmQgdGhlIGxhc3QgJyVzJXMnIGlzIHRoZSB2ZXJiYXRpbSBkaXJlY3RvcnkgbmFtZS4KKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyVzIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiJXMlcyDRgNC10L/QvtC30LjRgtC+0YDQuNC5IEdpdCDQsiAlcyVzXG4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNQorbXNnaWQgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciCittc2dzdHIgItCg0LXQuNC90LjRhtC40LDQu9C40LfQsNGG0LjRjyDRgdGD0YnQtdGB0YLQstGD0Y7RidC10LPQviIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDM1Cittc2dpZCAiSW5pdGlhbGl6ZWQgZW1wdHkiCittc2dzdHIgItCY0L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDQvSDQv9GD0YHRgtC+0LkiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNgorbXNnaWQgIiBzaGFyZWQiCittc2dzdHIgIiDQvtCx0YnQuNC5IgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0ODMKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dICIKKyJbLS1zaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT080LrQsNGC0LDQu9C+0LMt0YjQsNCx0LvQvtC90L7Qsj5dIFstLXNoYXJlZFs9PNC/0YDQsNCy0LAt0LTQvtGB0YLRg9C/0LA+XV0gWzzQutCw0YLQsNC70L7Qsz5dIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MDYKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAi0L/RgNCw0LLQsC3QtNC+0YHRgtGD0L/QsCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTA3Cittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICLRg9C60LDQttC40YLQtSwg0LXRgdC70Lgg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSBnaXQg0LHRg9C00LXRgiDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YzRgdGPINC90LXRgdC60L7Qu9GM0LrQuNC80Lgg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GP0LzQuCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTQxIGJ1aWx0aW4vaW5pdC1kYi5jOjU0NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIG1rZGlyICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNoZGlyIHRvICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBjaGRpciDQsiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIlcyAob3IgLS13b3JrLXRyZWU9PGRpcmVjdG9yeT4pIG5vdCBhbGxvd2VkIHdpdGhvdXQgc3BlY2lmeWluZyAlcyAob3IgLS1naXQtIgorImRpcj08ZGlyZWN0b3J5PikiCittc2dzdHIgIiVzICjQuNC70LggLS13b3JrLXRyZWU9PNC60LDRgtCw0LvQvtCzPikg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQsdC10Lcg0YPQutCw0LfQsNC90LjRjyAlcyAo0LjQu9C4IC0tZ2l0LWRpcj080LrQsNGC0LDQu9C+0LM+KSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC70YPRh9C40YLRjCDQtNC+0YHRgtGD0L8g0Log0YDQsNCx0L7Rh9C10LzRgyDQutCw0YLQsNC70L7Qs9GDIMKrJXPCuyIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNQorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyIDx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dIgorIiBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciA80LvQtdC60YHQtdC80LA+Wyg9fDopPNC30L3QsNGH0LXQvdC40LU+XSnigKZdIFs80YTQsNC50Ls+4oCmXSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoyNQorbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgItGD0LTQsNC70Y/RgtGMINC/0YPRgdGC0YvQtSDQt9Cw0LLQtdGA0YjQuNGC0LXQu9C4IgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI2Cittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAi0LfQsNCy0LXRgNGI0LjRgtC10LvRjCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoyNworbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICLQt9Cw0LLQtdGA0YjQuNGC0LXQu9C4INC00LvRjyDQtNC+0LHQsNCy0LvQtdC90LjRjyIKKworIzogYnVpbHRpbi9sb2cuYzo0MworbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzzQvtC/0YbQuNC4Pl0gWzzQtNC40LDQv9Cw0LfQvtC9LdGA0LXQtNCw0LrRhtC40Lk+XSBbWy0tXSA80L/Rg9GC0Yw+4oCmXSIKKworIzogYnVpbHRpbi9sb2cuYzo0NAorbXNnaWQgImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgc2hvdyBbPNC+0L/RhtC40Lg+XSA80L7QsdGK0LXQutGCPuKApiIKKworIzogYnVpbHRpbi9sb2cuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIC0tZGVjb3JhdGUgb3B0aW9uOiAlcyIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAg0LTQu9GPIC0tZGVjb3JhdGU6ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEzMQorbXNnaWQgInN1cHByZXNzIGRpZmYgb3V0cHV0IgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0YDQsNC30LvQuNGH0LjRjyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzIKK21zZ2lkICJzaG93IHNvdXJjZSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQuNGB0YLQvtGH0L3QuNC6IgorCisjOiBidWlsdGluL2xvZy5jOjEzMworbXNnaWQgIlVzZSBtYWlsIG1hcCBmaWxlIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YTQsNC50Lsg0YHQvtC+0YLQstC10YLRgdGC0LLQuNGPINC/0L7Rh9GC0L7QstGL0YUg0LDQtNGA0LXRgdC+0LIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM0Cittc2dpZCAiZGVjb3JhdGUgb3B0aW9ucyIKK21zZ3N0ciAi0L7Qv9GG0LjQuCDRhNC+0YDQvNCw0YLQsCDQstGL0LLQvtC00LAg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL2xvZy5jOjEzNworbXNnaWQgIlByb2Nlc3MgbGluZSByYW5nZSBuLG0gaW4gZmlsZSwgY291bnRpbmcgZnJvbSAxIgorbXNnc3RyICLQntCx0YDQsNCx0L7RgtCw0YLRjCDQtNC40LDQv9Cw0LfQvtC9INGB0YLRgNC+0LogbixtINC40Lcg0YTQsNC50LvQsCwg0L3QsNGH0LjQvdCw0Y8g0YEgMSIKKworIzogYnVpbHRpbi9sb2cuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICLQpNC40L3QsNC70YzQvdGL0Lkg0LLRi9Cy0L7QtDogJWQgJXNcbiIKKworIzogYnVpbHRpbi9sb2cuYzo0NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHNob3cgJXM6IGJhZCBmaWxlIgorbXNnc3RyICJnaXQgc2hvdyAlczog0L/Qu9C+0YXQvtC5INGE0LDQudC7IgorCisjOiBidWlsdGluL2xvZy5jOjQ3OSBidWlsdGluL2xvZy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINC+0LHRitC10LrRgiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB0eXBlOiAlZCIKK21zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90YvQuSDRgtC40L8g0L7QsdGK0LXQutGC0LA6ICVkIgorCisjOiBidWlsdGluL2xvZy5jOjcxNAorbXNnaWQgImZvcm1hdC5oZWFkZXJzIHdpdGhvdXQgdmFsdWUiCittc2dzdHIgItCyIGZvcm1hdC5oZWFkZXJzINC90LUg0YPQutCw0LfQsNC90L4g0LfQvdCw0YfQtdC90LjQtSIKKworIzogYnVpbHRpbi9sb2cuYzo3OTgKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgItGB0LvQuNGI0LrQvtC8INC00LvQuNC90L3QvtC1INC40LzRjyDQstGL0YXQvtC00L3QvtCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogYnVpbHRpbi9sb2cuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAi0J3RgyDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDRhNCw0LnQuyDQuNC30LzQtdC90LXQvdC40LkgJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODI4Cittc2dpZCAiTmVlZCBleGFjdGx5IG9uZSByYW5nZS4iCittc2dzdHIgItCd0YPQttC10L0g0YLQvtC70YzQutC+INC+0LTQuNC9INC00LjQsNC/0LDQt9C+0L0uIgorCisjOiBidWlsdGluL2xvZy5jOjgzOAorbXNnaWQgIk5vdCBhIHJhbmdlLiIKK21zZ3N0ciAi0J3QtSDRj9Cy0LvRj9C10YLRgdGPINC00LjQsNC/0LDQt9C+0L3QvtC8LiIKKworIzogYnVpbHRpbi9sb2cuYzo5NDQKK21zZ2lkICJDb3ZlciBsZXR0ZXIgbmVlZHMgZW1haWwgZm9ybWF0IgorbXNnc3RyICLQodC+0L/RgNC+0LLQvtC00LjRgtC10LvRjNC90L7QtSDQv9C40YHRjNC80L4g0LTQvtC70LbQvdC+INCx0YvRgtGMINCyINGE0L7RgNC80LDRgtC1INGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiyIKKworIzogYnVpbHRpbi9sb2cuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgItC+0YjQuNCx0LrQsCDQsiDQv9C+0LvQtSBpbi1yZXBseS10bzogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA1MQorbXNnaWQgImdpdCBmb3JtYXQtcGF0Y2ggWzxvcHRpb25zPl0gWzxzaW5jZT4gfCA8cmV2aXNpb24tcmFuZ2U+XSIKK21zZ3N0ciAiZ2l0IGZvcm1hdC1wYXRjaCBbPNC+0L/RhtC40Lg+XSBbPNC90LDRh9C40L3QsNGPLdGBPiB8IDzQtNC40LDQv9Cw0LfQvtC9LdGA0LXQtNCw0LrRhtC40Lk+XSIKKworIzogYnVpbHRpbi9sb2cuYzoxMDk2Cittc2dpZCAiVHdvIG91dHB1dCBkaXJlY3Rvcmllcz8iCittc2dzdHIgItCU0LLQsCDQstGL0YXQvtC00L3Ri9GFINC60LDRgtCw0LvQvtCz0LA/IgorCisjOiBidWlsdGluL2xvZy5jOjEyMTEKK21zZ2lkICJ1c2UgW1BBVENIIG4vbV0gZXZlbiB3aXRoIGEgc2luZ2xlIHBhdGNoIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMIFtQQVRDSCBuL21dINC00LDQttC1INC60L7Qs9C00LAg0L7QtNC40L0g0L/QsNGC0YciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxNAorbXNnaWQgInVzZSBbUEFUQ0hdIGV2ZW4gd2l0aCBtdWx0aXBsZSBwYXRjaGVzIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMIFtQQVRDSF0g0LTQsNC20LUg0LrQvtCz0LTQsCDQvdC10YHQutC+0LvRjNC60L4g0L/QsNGC0YfQtdC5IgorCisjOiBidWlsdGluL2xvZy5jOjEyMTgKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDQv9Cw0YLRh9C4INC90LAg0YHRgtCw0L3QtNCw0YDRgtC90YvQuSDQstGL0LLQvtC0IgorCisjOiBidWlsdGluL2xvZy5jOjEyMjAKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAi0LPQtdC90LXRgNC40YDQvtCy0LDRgtGMINGB0L7Qv9GA0L7QstC+0LTQuNGC0LXQu9GM0L3QvtC1INC/0LjRgdGM0LzQviIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIyCittc2dpZCAidXNlIHNpbXBsZSBudW1iZXIgc2VxdWVuY2UgZm9yIG91dHB1dCBmaWxlIG5hbWVzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L/RgNC+0YHRgtGD0Y4g0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtGMINGH0LjRgdC10Lsg0LTQu9GPINC40LzQtdC9INCy0YvRhdC+0LTQvdGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjMKK21zZ2lkICJzZngiCittc2dzdHIgItGB0YPRhNGE0LjQutGBIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjQKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGB0YPRhNGE0LjQutGBIDzRgdGD0YTRhNC40LrRgT4g0LLQvNC10YHRgtC+IMKrLnBhdGNowrsiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyNgorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgItC90LDRh9Cw0YLRjCDQvdGD0LzQtdGA0LDRhtC40Y4g0L/QsNGC0YfQtdC5INGBIDxuPiwg0LAg0L3QtSDRgSAxIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjgKK21zZ2lkICJtYXJrIHRoZSBzZXJpZXMgYXMgTnRoIHJlLXJvbGwiCittc2dzdHIgItC/0L7QvNC10YLQuNGC0Ywg0YHQtdGA0LjRjiDQutCw0Log0Y3QvdC90YPRjiDQv9C+0L/Ri9GC0LrRgyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjMwCittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgWzzQv9GA0LXRhNC40LrRgT5dINCy0LzQtdGB0YLQviBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzMKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgItGB0L7RhdGA0LDQvdC40YLRjCDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQuNC1INGE0LDQudC70Ysg0LIgPNC60LDRgtCw0LvQvtCzPiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjM2Cittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgItC90LUg0L7QsdGA0LXQt9Cw0YLRjC/QtNC+0LHQsNCy0LvRj9GC0YwgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjM5Cittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINC00LLQvtC40YfQvdGL0LUg0YDQsNC30LvQuNGH0LjRjyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQxCittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICLQvdC1INCy0LrQu9GO0YfQsNGC0Ywg0L/QsNGC0YcsINC10YHQu9C4INC60L7QvNC80LjRgiDRg9C20LUg0LXRgdGC0Ywg0LIg0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC1IgorCisjOiBidWlsdGluL2xvZy5jOjEyNDMKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0LIg0YTQvtGA0LzQsNGC0LUg0L/QsNGC0YfQsCwg0LAg0L3QtSDQsiDRgdGC0LDQvdC00LDRgNGC0L3QvtC8ICjQv9Cw0YLRhyArINGB0YLQsNGC0LjRgdGC0LjQutCwKSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ1Cittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICLQn9C10YDQtdC00LDRh9CwINGB0L7QvtCx0YnQtdC90LjQuSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ2Cittc2dpZCAiaGVhZGVyIgorbXNnc3RyICLQt9Cw0LPQvtC70L7QstC+0LoiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0NworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0LfQsNCz0L7Qu9C+0LLQvtC6INGB0L7QvtCx0YnQtdC90LjRjyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ4IGJ1aWx0aW4vbG9nLmM6MTI1MAorbXNnaWQgImVtYWlsIgorbXNnc3RyICLQv9C+0YfRgtCwIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDgKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQt9Cw0LPQvtC70L7QstC+0LogVG86IgorCisjOiBidWlsdGluL2xvZy5jOjEyNTAKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQt9Cw0LPQvtC70L7QstC+0LogQ2M6IgorCisjOiBidWlsdGluL2xvZy5jOjEyNTIKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAi0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MworbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgItGD0YHRgtCw0L3QvtCy0LjRgtGMINCw0LTRgNC10YEg0L7RgtC/0YDQsNCy0LjRgtC10LvRjyDQvdCwIDzQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgD4gKNC40LvQuCDQvdCwINC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60L7QvNC80LjRgtC10YDQsCwg0LXRgdC70Lgg0L7RgtGB0YPRgtGB0YLQstGD0LXRgikiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgItC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGALdGB0L7QvtCx0YnQtdC90LjRjyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU2Cittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICLRgdC00LXQu9Cw0YLRjCDQv9C10YDQstC+0LUg0L/QuNGB0YzQvNC+INC+0YLQstC10YLQvtC8INC90LAgPNC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGALdGB0L7QvtCx0YnQtdC90LjRjz4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NyBidWlsdGluL2xvZy5jOjEyNjAKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAi0LLQu9C+0LbQtdC90LjQtSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU4Cittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAi0L/RgNC40LvQvtC20LjRgtGMINC/0LDRgtGHIgorCisjOiBidWlsdGluL2xvZy5jOjEyNjEKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINC/0LDRgtGHINCyINGC0LXQutGB0YIg0L/QuNGB0YzQvNCwIgorCisjOiBidWlsdGluL2xvZy5jOjEyNjUKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDQsiDQv9C40YHRjNC80LDRhSDQuNC10YDQsNGA0YXQuNGH0L3QvtGB0YLRjCwg0YHRgtC40LvQuDogc2hhbGxvdyAo0YfQsNGB0YLQuNGH0L3Rg9GOKSwgZGVlcCAo0LPQu9GD0LHQvtC60YPRjikiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI2NworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAi0L/QvtC00L/QuNGB0YwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI2OAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQv9C+0LTQv9C40YHRjCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjcwCittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICLQtNC+0LHQsNCy0LjRgtGMINC/0L7QtNC/0LjRgdGMINC40Lcg0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjcxCittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINC40LzQtdC90LAg0YTQsNC50LvQvtCyINC/0LDRgtGH0LXQuSIKKworIzogYnVpbHRpbi9sb2cuYzoxMzYwCittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItbiDQuCAtayDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviIKKworIzogYnVpbHRpbi9sb2cuYzoxMzYyCittc2dpZCAiLS1zdWJqZWN0LXByZWZpeCBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXgg0LggLWsg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4uIgorCisjOiBidWlsdGluL2xvZy5jOjEzNzAKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtb25seSDQvdC1INC40LzQtdC10YIg0YHQvNGL0YHQu9CwIgorCisjOiBidWlsdGluL2xvZy5jOjEzNzIKK21zZ2lkICItLW5hbWUtc3RhdHVzIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1zdGF0dXMg0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCIKKworIzogYnVpbHRpbi9sb2cuYzoxMzc0Cittc2dpZCAiLS1jaGVjayBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWNoZWNrINC90LUg0LjQvNC10LXRgiDRgdC80YvRgdC70LAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM5NworbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICLRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INCy0YvQstC+0LQg0LjQu9C4INC60LDRgtCw0LvQvtCzPyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywg0LrQsNGC0LDQu9C+0LMgwqslc8K7IgorCisjOiBidWlsdGluL2xvZy5jOjE0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgc2lnbmF0dXJlIGZpbGUgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YTQsNC50Lsg0L/QvtC00L/QuNGB0Lggwqslc8K7IgorCisjOiBidWlsdGluL2xvZy5jOjE1NTkKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAi0KHQsdC+0Lkg0L/RgNC4INGB0L7Qt9C00LDQvdC40Lgg0LLRi9GF0L7QtNC90YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYwNworbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzzQstGL0YjQtdGB0YLQvtGP0YnQsNGPLdCy0LXRgtC60LA+IFs80LPQvtC70L7QstCwPiBbPNC+0LPRgNCw0L3QuNGH0LXQvdC40LU+XV1dIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+ICIKKyJtYW51YWxseS5cbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INC+0YLRgdC70LXQttC40LLQsNC10LzRg9GOINCy0L3QtdGI0L3RjtGOINCy0LXRgtC60YMsINGD0LrQsNC20LjRgtC1IDzQstGL0YjQtdGB0YLQvtGP0YnRg9GOLdCy0LXRgtC60YM+INCy0YDRg9GH0L3Rg9GOLlxuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzIgYnVpbHRpbi9sb2cuYzoxNjc0IGJ1aWx0aW4vbG9nLmM6MTY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90YvQuSDQutC+0LzQvNC40YIgJXMiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzozNTgKK21zZ2lkICJnaXQgbHMtZmlsZXMgWzxvcHRpb25zPl0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBscy1maWxlcyBbPNC+0L/RhtC40Lg+XSBbPNGE0LDQudC7PuKApl0iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTUKK21zZ2lkICJpZGVudGlmeSB0aGUgZmlsZSBzdGF0dXMgd2l0aCB0YWdzIgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC40LzQtdC90LAg0YTQsNC50LvQvtCyINGBINC80LXRgtC60LDQvNC4IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDE3Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdC40LzQstC+0LvRiyDQsiDQvdC40LbQvdC10Lwg0YDQtdCz0LjRgdGC0YDQtSDQtNC70Y8gwqvQv9GA0LXQtNC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3QviDQsdC10Lcg0LjQt9C80LXQvdC10L3QuNC5wrsg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDE5Cittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINC60Y3RiNC40YDQvtCy0LDQvdC90YvQtSDRhNCw0LnQu9GLINC/0YDQuCDQstGL0LLQvtC00LUgKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyMQorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDRg9C00LDQu9C10L3QvdGL0LUg0YTQsNC50LvRiyDQv9GA0Lgg0LLRi9Cy0L7QtNC1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDIzCittc2dpZCAic2hvdyBtb2RpZmllZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDQuNC30LzQtdC90LXQvdC90YvQtSDRhNCw0LnQu9GLINC/0YDQuCDQstGL0LLQvtC00LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjUKK21zZ2lkICJzaG93IG90aGVyIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINC00YDRg9Cz0LjQtSDRhNCw0LnQu9GLINC/0YDQuCDQstGL0LLQvtC00LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjcKK21zZ2lkICJzaG93IGlnbm9yZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi0L/QvtC60LDQt9GL0LLQsNGC0Ywg0LjQs9C90L7RgNC40YDRg9C10LzRi9C1INGE0LDQudC70Ysg0L/RgNC4INCy0YvQstC+0LTQtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzMAorbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDQuNC80Y8g0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3QvtCz0L4g0L7QsdGK0LXQutGC0LAg0L3QsCDQstGL0LLQvtC00LUiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzIKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDRhNCw0LnQu9GLINCyINGE0LDQudC70L7QstC+0Lkg0YHQuNGB0YLQtdC80LUsINC60L7RgtC+0YDRi9C1INC00L7Qu9C20L3RiyDQsdGL0YLRjCDRg9C00LDQu9C10L3RiyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzNAorbXNnaWQgInNob3cgJ290aGVyJyBkaXJlY3RvcmllcycgbmFtZXMgb25seSIKK21zZ3N0ciAi0L/QvtC60LDQt9GL0LLQsNGC0Ywg0YLQvtC70YzQutC+INC40LzQtdC90LAg0YMgwqvQtNGA0YPQs9C40YXCuyDQutCw0YLQsNC70L7Qs9C+0LIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzcKK21zZ2lkICJkb24ndCBzaG93IGVtcHR5IGRpcmVjdG9yaWVzIgorbXNnc3RyICLQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMINC/0YPRgdGC0YvQtSDQutCw0YLQsNC70L7Qs9C4IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQwCittc2dpZCAic2hvdyB1bm1lcmdlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLQv9C+0LrQsNC30YvQstCw0YLRjCDQvdC1INGB0LvQuNGC0YvQtSDRhNCw0LnQu9GLINC90LAg0LLRi9Cy0L7QtNC1IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQyCittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgItC/0L7QutCw0LfRi9Cy0LDRgtGMINC40L3RhNC+0YDQvNCw0YbQuNC4INC+INGA0LDQt9GA0LXRiNC10L3QuNC4INC60L7QvdGE0LvQuNC60YLQvtCyINC4INC+0YLQvNC10L3QtSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0NAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0YTQsNC50LvRiywg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC1INGI0LDQsdC70L7QvdGDIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQ3Cittc2dpZCAiZXhjbHVkZSBwYXR0ZXJucyBhcmUgcmVhZCBmcm9tIDxmaWxlPiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINGI0LDQsdC70L7QvdGLINC40YHQutC70Y7Rh9C10L3QuNGPINC40LcgPNGE0LDQudC7PiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1MAorbXNnaWQgInJlYWQgYWRkaXRpb25hbCBwZXItZGlyZWN0b3J5IGV4Y2x1ZGUgcGF0dGVybnMgaW4gPGZpbGU+IgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQv9C+0LrQsNGC0LDQu9C+0LbQvdGL0LUg0YjQsNCx0LvQvtC90Ysg0LjRgdC60LvRjtGH0LXQvdC40Y8g0LjQtyA80YTQsNC50Ls+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDUyCittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C1INC40YHQutC70Y7Rh9C10L3QuNGPIGdpdCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1NQorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINC/0YPRgtC4INC+0YLQvdC+0YHQuNGC0LXQu9GM0L3QviDQutC+0YDQvdC10LLQvtCz0L4g0LrQsNGC0LDQu9C+0LPQsCDQv9GA0L7QtdC60YLQsCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1OAorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAi0LXRgdC70Lgg0LrQsNC60L7QuS3Qu9C40LHQviA80YTQsNC50Ls+INC90LUg0LIg0LjQvdC00LXQutGB0LUsINGB0YfQuNGC0LDRgtGMINGN0YLQviDQvtGI0LjQsdC60L7QuSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1OQorbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICLRg9C60LDQt9Cw0YLQtdC70Ywt0LTQtdGA0LXQstCwIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYwCittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAi0L/RgNC40YLQstC+0YDQuNGC0YzRgdGPLCDRh9GC0L4g0L/Rg9GC0Lgg0YPQtNCw0LvQtdC90YssINGCLtC6LiA80YPQutCw0LfQsNGC0LXQu9GMLdC00LXRgNC10LLQsD4g0LXRidC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYyCittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQvtGC0LvQsNC00L7Rh9C90YPRjiDQuNC90YTQvtGA0LzQsNGG0LjRjiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MjgKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPNC+0L/RhtC40Lg+XSA80YPQutCw0LfQsNGC0LXQu9GMLdC00LXRgNC10LLQsD4gWzzQv9GD0YLRjD7igKZdIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0YLQvtC70YzQutC+INC00LXRgNC10LLRjNGPIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjkKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgItC/0YDQvtGF0L7QtNC40YLRjCDRgNC10LrRg9GA0YHQuNCy0L3QviDQsiDQv9C+0LTQtNC10YDQtdCy0YzRjyIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMxCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDQtNC10YDQtdCy0YzRjyDQv9GA0Lgg0YDQtdC60YPRgNGB0LjQstC90L7QvCDQv9GA0L7RhdC+0LTQtSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM0Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAi0YDQsNC30LTQtdC70Y/RgtGMINC30LDQv9C40YHQuCDRgSDQv9C+0LzQvtGJ0YzRjiDQndCj0JvQldCS0J7Qk9CeINCx0LDQudGC0LAiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNQorbXNnaWQgImluY2x1ZGUgb2JqZWN0IHNpemUiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywg0YDQsNC30LzQtdGAINC+0LHRitC10LrRgtCwIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzcgYnVpbHRpbi9scy10cmVlLmM6MTM5Cittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAi0LLRi9Cy0L7QtNC40YLRjCDRgtC+0LvRjNC60L4g0LjQvNC10L3QsCDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0MgorbXNnaWQgInVzZSBmdWxsIHBhdGggbmFtZXMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQv9C+0LvQvdGL0LUg0L/Rg9GC0LgiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NAorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0L/QvtC70L3QvtC1INC00LXRgNC10LLQvjsg0L3QtSDRgtC+0LvRjNC60L4g0YLQtdC60YPRidC40Lkg0LrQsNGC0LDQu9C+0LMgKNCy0LrQu9GO0YfQsNC10YIg0LIg0YHQtdCx0Y8gLS1mdWxsLW5hbWUpIgorCisjOiBidWlsdGluL21lcmdlLmM6NDUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs80L7Qv9GG0LjQuD5dIFs80LrQvtC80LzQuNGCPuKApl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NgorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSA8bXNnPiBIRUFEIDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UgWzzQvtC/0YbQuNC4Pl0gPNGB0L7QvtCx0YnQtdC90LjQtT4gSEVBRCA80LrQvtC80LzQuNGCPiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ3Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6MTAwCittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICLQv9GA0Lgg0YPQutCw0LfQsNC90LjQuCDQv9Cw0YDQsNC80LXRgtGA0LAgwqttwrsg0YLRgNC10LHRg9C10YLRgdGPINGD0LrQsNC30LDRgtGMINC30L3QsNGH0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvdCw0LnRgtC4INGB0YLRgNCw0YLQtdCz0LjRjiDRgdC70LjRj9C90LjRjyDCqyVzwrsuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAi0JTQvtGB0YLRg9C/0L3Ri9C1INGB0YLRgNCw0YLQtdCz0LjQuDoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgItCU0L7RgdGC0YPQv9C90YvQtSDQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjQtSDRgdGC0YDQsNGC0LXQs9C40Lg6IgorCisjOiBidWlsdGluL21lcmdlLmM6MTkzIGJ1aWx0aW4vcHVsbC5jOjExOQorbXNnaWQgImRvIG5vdCBzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDRgdGC0LDRgtC40YHRgtC40LrRgyDQuNC30LzQtdC90LXQvdC40Lkg0L/QvtGB0LvQtSDQvtC60L7QvdGH0LDQvdC40Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTYgYnVpbHRpbi9wdWxsLmM6MTIyCittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdGC0LDRgtC40YHRgtC40LrRgyDQuNC30LzQtdC90LXQvdC40Lkg0L/QvtGB0LvQtSDQvtC60L7QvdGH0LDQvdC40Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTcgYnVpbHRpbi9wdWxsLmM6MTI1Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAiKNGB0LjQvdC+0L3QuNC8INC00LvRjyAtLXN0YXQpIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk5IGJ1aWx0aW4vcHVsbC5jOjEyOAorbXNnaWQgImFkZCAoYXQgbW9zdCA8bj4pIGVudHJpZXMgZnJvbSBzaG9ydGxvZyB0byBtZXJnZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCAo0LzQsNC60YHQuNC80YPQvCA8bj4pINC30LDQv9C40YHQtdC5INC40Lcg0LrQvtGA0L7RgtC60L7Qs9C+INC20YPRgNC90LDQu9CwINCyINGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsCDRgyDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMiBidWlsdGluL3B1bGwuYzoxMzEKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAi0YHQvtC30LTQsNGC0Ywg0L7QtNC40L0g0LrQvtC80LzQuNGCLCDQstC80LXRgdGC0L4g0LLRi9C/0L7Qu9C90LXQvdC40Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDQgYnVpbHRpbi9wdWxsLmM6MTM0Cittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICLRgdC00LXQu9Cw0YLRjCDQutC+0LzQvNC40YIsINC10YHQu9C4INGB0LvQuNGP0L3QuNC1INC/0YDQvtGI0LvQviDRg9GB0L/QtdGI0L3QviAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA2IGJ1aWx0aW4vcHVsbC5jOjEzNworbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAi0L7RgtGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGB0L7QvtCx0YnQtdC90LjQtSDQv9C10YDQtdC0INCy0YvQv9C+0LvQvdC10L3QuNC10Lwg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDcKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQgKGRlZmF1bHQpIgorbXNnc3RyICLRgNCw0LfRgNC10YjQuNGC0Ywg0L/QtdGA0LXQvNC+0YLQutGDINCy0L/QtdGA0LXQtCAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA5IGJ1aWx0aW4vcHVsbC5jOjE0MworbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgItC+0YLQvNC10L3QuNGC0Ywg0LLRi9C/0L7Qu9C90LXQvdC40LUg0YHQu9C40Y/QvdC40Y8sINC10YHQu9C4INC/0LXRgNC10LzQvtGC0LrQsCDQstC/0LXRgNC10LQg0L3QtSDQstC+0LfQvNC+0LbQvdCwIgorCisjOiBidWlsdGluL21lcmdlLmM6MjEzCittc2dpZCAiVmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICLQn9GA0L7QstC10YDQuNGC0YwsINGH0YLQviDRg9C60LDQt9Cw0L3QvdGL0Lkg0LrQvtC80LzQuNGCINC40LzQtdC10YIg0LLQtdGA0L3Rg9GOINGN0LvQtdC60YLRgNC+0L3QvdGD0Y4g0L/QvtC00L/QuNGB0YwgR1BHIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE0IGJ1aWx0aW4vbm90ZXMuYzo3NjcgYnVpbHRpbi9wdWxsLmM6MTQ4CisjOiBidWlsdGluL3JldmVydC5jOjg5Cittc2dpZCAic3RyYXRlZ3kiCittc2dzdHIgItGB0YLRgNCw0YLQtdCz0LjRjyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNSBidWlsdGluL3B1bGwuYzoxNDkKK21zZ2lkICJtZXJnZSBzdHJhdGVneSB0byB1c2UiCittc2dzdHIgItC40YHQv9C+0LvRjNC30YPQtdC80LDRjyDRgdGC0YDQsNGC0LXQs9C40Y8g0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTYgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICLQvtC/0YbQuNGPPdC30L3QsNGH0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTcgYnVpbHRpbi9wdWxsLmM6MTUzCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi0L7Qv9GG0LjQuCDQtNC70Y8g0LLRi9Cx0YDQsNC90L3QvtC5INGB0YLRgNCw0YLQtdCz0LjQuCDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxOQorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAi0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwINC00LvRjyDRgdC70LjRj9C90LjRjyAo0LTQu9GPINGB0LvQuNGP0L3QuNGPINCx0LXQtyDQv9C10YDQtdC80L7RgtC60Lgg0LLQv9C10YDQtdC0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIyMworbXNnaWQgImFib3J0IHRoZSBjdXJyZW50IGluLXByb2dyZXNzIG1lcmdlIgorbXNnc3RyICLQvtGC0LzQtdC90LjRgtGMINCy0YvQv9C+0LvQvdC10L3QuNC1INC/0YDQvtC40YHRhdC+0LTRj9GJ0LXQs9C+INGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUxCittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMIHN0YXNoLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NgorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAi0YHQsdC+0Lkg0L/RgNC4INCy0YvQv9C+0LvQvdC10L3QuNC4IHN0YXNoIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgItC90LXQv9GA0LDQstC40LvRjNC90YvQuSDQvtCx0YrQtdC60YI6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MjgwIGJ1aWx0aW4vbWVyZ2UuYzoyOTcKK21zZ2lkICJyZWFkLXRyZWUgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0LLRi9C/0L7Qu9C90LXQvdC40LggcmVhZC10cmVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MzI3Cittc2dpZCAiIChub3RoaW5nIHRvIHNxdWFzaCkiCittc2dzdHIgIiAo0L3QtdGH0LXQs9C+INGD0L/Qu9C+0YLQvdGP0YLRjCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICLQo9C/0LvQvtGC0L3QtdC90LjQtSDQutC+0LzQvNC40YLQsCDigJQg0L3QtSDQvtCx0L3QvtCy0LvRj9GPIEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM0NCBidWlsdGluL21lcmdlLmM6NzYzIGJ1aWx0aW4vbWVyZ2UuYzo5NzUKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQsiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNzIKK21zZ2lkICJXcml0aW5nIFNRVUFTSF9NU0ciCittc2dzdHIgItCX0LDQv9C40YHRjCBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzc0Cittc2dpZCAiRmluaXNoaW5nIFNRVUFTSF9NU0ciCittc2dzdHIgItCX0LDQstC10YDRiNC10L3QuNC1IFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICLQndC10YIg0YHQvtC+0LHRidC10L3QuNGPINGB0LvQuNGP0L3QuNGPIOKAlCDQvdC1INC+0LHQvdC+0LLQu9GP0LXQvCBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiwqslc8K7INC90LUg0YPQutCw0LfRi9Cy0LDQtdGCINC90LAg0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL21lcmdlLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90LDRjyDRgdGC0YDQvtC60LAgYnJhbmNoLiVzLm1lcmdlb3B0aW9uczogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NTYKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICLQndC1INC+0LHRgNCw0LHQsNGC0YvQstCw0Y4g0L3QuNGH0LXQs9C+LCDQutGA0L7QvNC1INGB0LvQuNGP0L3QuNGPINC00LLRg9GFINGD0LrQsNC30LDRgtC10LvQtdC5INC90LAg0LrQvtC80LzQuNGC0YsuIgorCisjOiBidWlsdGluL21lcmdlLmM6NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gb3B0aW9uIGZvciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCittc2dzdHIgItCd0LXQuNC30LLQtdGB0YLQvdGL0Lkg0L/QsNGA0LDQvNC10YLRgCBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0YwgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LXRgdGC0Ywg0LjQtyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICLQndC1INCy0YvQv9C+0LvQvdGP0Y4g0LrQvtC80LzQuNGCINGB0LvQuNGP0L3QuNGPOyDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrZ2l0IGNvbW1pdMK7INC00LvRjyDQt9Cw0LLQtdGA0YjQtdC90LjRjyDRgdC70LjRj9C90LjRjy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIGEgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB3aHkgdGhpcyBtZXJnZSBpcyBuZWNlc3NhcnksXG4iCisiZXNwZWNpYWxseSBpZiBpdCBtZXJnZXMgYW4gdXBkYXRlZCB1cHN0cmVhbSBpbnRvIGEgdG9waWMgYnJhbmNoLlxuIgorIlxuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0c1xuIgorInRoZSBjb21taXQuXG4iCittc2dzdHIgItCf0L7QttCw0LvRg9C50YHRgtCwLCDQstCy0LXQtNC40YLQtSDRgdC+0L7QsdGJ0LXQvdC40LUg0LrQvtC80LzQuNGC0LAsINC00LvRjyDQvtCx0YrRj9GB0L3QtdC90LjRjywg0LfQsNGH0LXQvCDQvdGD0LbQvdC+XG7RjdGC0L4g0YHQu9C40Y/QvdC40LUsINC+0YHQvtCx0LXQvdC90L4sINC10YHQu9C4INGN0YLQviDRgdC70LjRj9C90LjQtSDQvtCx0L3QvtCy0LvQtdC90L3QvtC5INCy0YvRiNC10YHRgtC+0Y/RidC10LlcbtCy0LXRgtC60Lgg0LIg0YLQtdC80LDRgtC40YfQtdGB0LrRg9GOINCy0LXRgtC60YMuXG5cbtCh0YLRgNC+0LrQuCwg0L3QsNGH0LjQvdCw0Y7RidC40LXRgdGPINGBIMKrJWPCuyDQsdGD0LTRg9GCINC/0YDQvtC40LPQvdC+0YDQuNGA0L7QstCw0L3Riywg0LAg0L/Rg9GB0YLQvtC1XG7RgdC+0L7QsdGJ0LXQvdC40LUg0L7RgtC80LXQvdGP0LXRgiDQv9GA0L7RhtC10YHRgSDQutC+0LzQvNC40YLQsC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgxMQorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAi0J/Rg9GB0YLQvtC1INGB0L7QvtCx0YnQtdC90LjQtSDQutC+0LzQvNC40YLQsC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICLQn9GA0LXQutGA0LDRgdC90L4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIGZhaWxlZDsgZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBjb21taXQgdGhlIHJlc3VsdC5cbiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7QstC10YHRgtC4INCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LUg0YHQu9C40Y/QvdC40LU7INC40YHQv9GA0LDQstGM0YLQtSDQutC+0L3RhNC70LjQutGC0Ysg0Lgg0YHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIg0YDQtdC30YPQu9GM0YLQsNGC0LAuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQiCittc2dzdHIgIsKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQvtC80LzQuNGC0L7QvCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkzNQorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi0J3QtdGCINGC0LXQutGD0YnQtdC5INCy0LXRgtC60LguIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM3Cittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLQoyDRgtC10LrRg9GJ0LXQuSDQstC10YLQutC4INC90LXRgiDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8uIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM5Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLQlNC70Y8g0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCDQvdC1INGD0LrQsNC30LDQvdCwINCy0YvRiNC10YHRgtC+0Y/RidCw0Y8g0LLQtdGC0LrQsCDQv9C+INGD0LzQvtC70YfQsNC90LjRji4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAi0J3QtSDRg9C60LDQt9Cw0L3QsCDQstC90LXRiNC90Y/RjyDQvtGC0YHQu9C10LbQuNCy0LDQtdC80LDRjyDQstC10YLQutCwINC00LvRjyAlcyDQvdCwICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0LrRgNGL0YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjA4Cittc2dpZCAiVGhlcmUgaXMgbm8gbWVyZ2UgdG8gYWJvcnQgKE1FUkdFX0hFQUQgbWlzc2luZykuIgorbXNnc3RyICLQndC10YIg0YHQu9C40Y/QvdC40Y8sINC60L7RgtC+0YDQvtC1INC80L7QttC90L4g0L7RgtC80LXQvdC40YLRjCAo0L7RgtGB0YPRgtGB0YLQstGD0LXRgiDRhNCw0LnQuyBNRVJHRV9IRUFEKS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjI0Cittc2dpZCAiIgorIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IG1lcmdlLiIKK21zZ3N0ciAi0JLRiyDQvdC1INC30LDQstC10YDRiNC40LvQuCDRgdC70LjRj9C90LjQtSAo0L/RgNC40YHRg9GC0YHRgtCy0YPQtdGCINGE0LDQudC7IE1FUkdFX0hFQUQpLlxu0JLRi9C/0L7Qu9C90LjRgtC1INC60L7QvNC80LjRgiDQstCw0YjQuNGFINC40LfQvNC10L3QtdC90LjQuSwg0L/QtdGA0LXQtCDRgdC70LjRj9C90LjQtdC8LiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzEKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICLQktGLINC90LUg0LfQsNCy0LXRgNGI0LjQu9C4INC+0YLQsdC+0YAg0LvRg9GH0YjQtdCz0L4gKNC/0YDQuNGB0YPRgtGB0YLQstGD0LXRgiDRhNCw0LnQuyBDSEVSUllfUElDS19IRUFEKS5cbtCf0L7QttCw0LvRg9C50YHRgtCwLCDQstGL0L/QvtC70L3QuNGC0LUg0LrQvtC80LzQuNGCINCy0LDRiNC40YUg0LjQt9C80LXQvdC10L3QuNC5LCDQv9C10YDQtdC0INGB0LvQuNGP0L3QuNC10LwuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIzNAorbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAi0JLRiyDQvdC1INC30LDQstC10YDRiNC40LvQuCDQvtGC0LHQvtGAINC70YPRh9GI0LXQs9C+ICjQv9GA0LjRgdGD0YLRgdGC0LLRg9C10YIg0YTQsNC50LsgQ0hFUlJZX1BJQ0tfSEVBRCkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI0MworbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICLQndC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviAtLXNxdWFzaCDQuCAtLW5vLWZmLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNTEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAi0JrQvtC80LzQuNGCINC90LUg0YPQutCw0LfQsNC9INC4INC/0LDRgNCw0LzQtdGC0YAgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0g0L3QtSDRg9GB0YLQsNC90L7QstC70LXQvS4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjY4Cittc2dpZCAiU3F1YXNoIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQgbm90IHN1cHBvcnRlZCB5ZXQiCittc2dzdHIgItCj0L/Qu9C+0YLQvdC10L3QuNC1INC60L7QvNC80LjRgtCwINCyINC/0YPRgdGC0L7QuSBIRUFEINC10YnQtSDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgtGB0Y8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjcwCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgItCa0L7QvNC80LjRgiwg0L3QtSDRj9Cy0LvRj9GO0YnQuNC50YHRjyDQv9C10YDQtdC80L7RgtC60L7QuSDQstC/0LXRgNC10LQsINC90LXRgiDRgdC80YvRgdC70LAg0LTQtdC70LDRgtGMINCyINC/0YPRgdGC0L7QuSBIRUFELiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINGC0LXQvCwg0YfRgtC+INC80L7QttC90L4g0YHQu9C40YLRjCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNzgKK21zZ2lkICJDYW4gbWVyZ2Ugb25seSBleGFjdGx5IG9uZSBjb21taXQgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICLQnNC+0LbQvdC+INGB0LvQuNGC0Ywg0YHRgtGA0L7Qs9C+INC+0LTQuNC9INC60L7QvNC80LjRgiDQsiDQv9GD0YHRgtC+0LkgSEVBRC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgItCa0L7QvNC80LjRgiAlcyDRgdC+0LTQtdGA0LbQuNGCINC90LUg0LTQvtCy0LXRgNC10L3QvdGD0Y4gR1BHINC/0L7QtNC/0LjRgdGMLCDQv9GA0LXQtNC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3QviDQvtGCICVzLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgItCa0L7QvNC80LjRgiAlcyDRgdC+0LTQtdGA0LbQuNGCINC/0LvQvtGF0YPRjiBHUEcg0L/QvtC00L/QuNGB0YwsINC/0YDQtdC00L/QvtC70L7QttC40YLQtdC70YzQvdC+INC+0YIgJXMuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICLQmtC+0LzQvNC40YIgJXMg0L3QtSDRgdC+0LTQtdGA0LbQuNGCIEdQRyDQv9C+0LTQv9C40YHRjC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAi0JrQvtC80LzQuNGCICVzINGB0L7QtNC10YDQttC40YIg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YPRjiBHUEcg0L/QvtC00L/QuNGB0YwsINC+0YIgJXMuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjQtSAlcy4uJXNcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIHJlYWxseSB0cml2aWFsIGluLWluZGV4IG1lcmdlLi4uXG4iCittc2dzdHIgItCf0L7Qv9GL0YLQutCwINGC0YDQuNCy0LjQsNC70YzQvdC+0LPQviDRgdC70LjRj9C90LjRjyDQsiDQuNC90LTQtdC60YHQteKAplxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICLQndC1INCy0YvRiNC70L4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTAxCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICLQn9C10YDQtdC80L7RgtC60LAg0LLQv9C10YDQtdC0INC90LUg0LLQvtC30LzQvtC20L3QsCwg0L7RgtC80LXQvdCwLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MjQgYnVpbHRpbi9tZXJnZS5jOjE2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgItCf0LXRgNC10LzQvtGC0LrQsCDQtNC10YDQtdCy0LAg0Log0LjRgdGF0L7QtNC90L7QvNGDINGB0L7RgdGC0L7Rj9C90LjRjuKAplxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAi0J/QvtC/0YvRgtC60LAg0YHQu9C40Y/QvdC40Y8g0YEg0L/QvtC80L7RidGM0Y4g0YHRgtGA0LDRgtC10LPQuNC4ICVz4oCmXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICLQndC4INC+0LTQvdCwINGB0YLRgNCw0YLQtdCz0LjRjyDRgdC70LjRj9C90LjRjyDQvdC1INC+0LHRgNCw0LHQvtGC0LDQu9CwINGB0LvQuNGP0L3QuNC1LlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJNZXJnZSB3aXRoIHN0cmF0ZWd5ICVzIGZhaWxlZC5cbiIKK21zZ3N0ciAi0KHQsdC+0Lkg0L/RgNC4INGB0LvQuNGP0L3QuNC4INGBINC/0L7QvNC+0YnRjNGOINGB0YLRgNCw0YLQtdCz0LjQuCAlcy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgItCY0YHQv9C+0LvRjNC30YPRjiAlcyDQtNC70Y8g0L/QvtC00LPQvtGC0L7QstC60Lgg0YDRg9GH0L3QvtCz0L4g0YDQsNC30YDQtdGI0LXQvdC40Y8g0LrQvtC90YTQu9C40LrRgtC+0LIuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgItCQ0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LUg0YHQu9C40Y/QvdC40LUg0L/RgNC+0YjQu9C+INGD0YHQv9C10YjQvdC+OyDQutCw0Log0Lgg0LfQsNC/0YDQsNGI0LjQstCw0LvQuCwg0L7RgdGC0LDQvdC+0LLQu9C10L3QviDQv9C10YDQtdC0INCy0YvQv9C+0LvQvdC10L3QuNC10Lwg0LrQvtC80LzQuNGC0LBcbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjkKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA80LrQvtC80LzQuNGCPiA80LrQvtC80LzQuNGCPuKApiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzAKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gLS1vY3RvcHVzIDzQutC+0LzQvNC40YI+4oCmIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPNC60L7QvNC80LjRgj7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMyCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA80LrQvtC80LzQuNGCPiA80LrQvtC80LzQuNGCPiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDzRgdGB0YvQu9C60LA+IFs80LrQvtC80LzQuNGCPl0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIxNAorbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0LLRgdC10YUg0L7QsdGJ0LjRhSDQv9GA0LXQtNC60L7QsiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE2Cittc2dpZCAiZmluZCBhbmNlc3RvcnMgZm9yIGEgc2luZ2xlIG4td2F5IG1lcmdlIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDQv9GA0LXQtNC60L7QsiDQtNC70Y8g0L7QtNC90L7Qs9C+INC80L3QvtCz0L7RhdC+0LTQvtCy0L7Qs9C+INGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMTgKK21zZ2lkICJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQv9C40YHQvtC6INGA0LXQstC40LfQuNC5LCDQutC+0YLQvtGA0YvQtSDQvdC1INC00L7RgdGC0LjQttC40LzRiyDQuNC3INC00YDRg9CzINC00YDRg9Cz0LAiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyMAorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAi0Y/QstC70Y/QtdGC0YHRjyDQv9C10YDQstGL0Lwg0L/RgNC10LTQutC+0Lwg0LLRgtC+0YDQvtCz0L4g0YPQutCw0LfQsNC90L3QvtCz0L4g0LrQvtC80LzQuNGC0LA/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjIKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAi0L3QsNC50YLQuCDQttGD0YDQvdCw0LvQtSDRgdGB0YvQu9C+0LogPNGB0YHRi9C70LrQsD4g0LPQtNC1INC40LzQtdC90L3QviA80LrQvtC80LzQuNGCPiDRgNCw0LfQstC10YLQstC40LvRgdGPIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo4Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWZpbGUgWzzQvtC/0YbQuNC4Pl0gWy1MINC40LzRjzEgWy1MIG9yaWcgWy1MINC40LzRjzJdXV0gPNGE0LDQudC7MT4gPNC+0YDQuNCzLdGE0LDQudC7PiA80YTQsNC50LsyPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzMKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgNC10LfRg9C70YzRgtCw0YIg0L3QsCDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INCy0YvQstC+0LQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM0Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCBkaWZmMyDRgdC70LjRj9C90LjQtSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgItC/0YDQuCDQstC+0LfQvdC40LrQvdC+0LLQtdC90LjQuCDQutC+0L3RhNC70LjQutGC0L7Qsiwg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC90LDRiNGDINCy0LXRgNGB0LjRjiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAi0L/RgNC4INCy0L7Qt9C90LjQutC90L7QstC10L3QuNC4INC60L7QvdGE0LvQuNC60YLQvtCyLCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LjRhSDQstC10YDRgdC40Y4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM5Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIKK21zZ3N0ciAi0L/RgNC4INCy0L7Qt9C90LjQutC90L7QstC10L3QuNC4INC60L7QvdGE0LvQuNC60YLQvtCyLCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QsdC1INCy0LXRgNGB0LjQuCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDIKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAi0L/RgNC4INCy0L7Qt9C90LjQutC90L7QstC10L3QuNC4INC60L7QvdGE0LvQuNC60YLQvtCyLCDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0Y3RgtC+0YIg0YDQsNC30LzQtdGAINC80LDRgNC60LXRgNCwIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo0MworbXNnaWQgImRvIG5vdCB3YXJuIGFib3V0IGNvbmZsaWN0cyIKK21zZ3N0ciAi0L3QtSDQv9GA0LXQtNGD0L/RgNC10LbQtNCw0YLRjCDQviDQutC+0L3RhNC70LjQutGC0LDRhSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDUKK21zZ2lkICJzZXQgbGFiZWxzIGZvciBmaWxlMS9vcmlnLWZpbGUvZmlsZTIiCittc2dzdHIgItGD0YHRgtCw0L3QvtCy0LjRgtGMINC80LXRgtC60Lgg0LTQu9GPINGE0LDQudC7MS/QvtGA0LjQsy3RhNCw0LnQuy/RhNCw0LnQuzIiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6NjQKK21zZ2lkICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorbXNnc3RyICJnaXQgbWt0cmVlIFstel0gWy0tbWlzc2luZ10gWy0tYmF0Y2hdIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MAorbXNnaWQgImlucHV0IGlzIE5VTCB0ZXJtaW5hdGVkIgorbXNnc3RyICLQstCy0L7QtCDQvtGC0LTQtdC70LXQvdC90YvQuSDQndCj0JvQldCS0KvQnNCYINGB0LjQvNCy0L7Qu9Cw0LzQuCIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTEgYnVpbHRpbi93cml0ZS10cmVlLmM6MjQKK21zZ2lkICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgItC00L7Qv9GD0YHRgtC40YLRjCDQvtGC0YHRg9GC0YHRgtCy0LjQtSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAi0LTQvtC/0YPRgdGC0LjRgtGMINGB0L7Qt9C00LDQvdC40LUg0LHQvtC70LXQtSDQvtC00L3QvtCz0L4g0LTQtdGA0LXQstCwIgorCisjOiBidWlsdGluL212LmM6MTUKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFs80L7Qv9GG0LjQuD5dIDzQuNGB0YLQvtGH0L3QuNC6PuKApiA80L3QsNC30L3QsNGH0LXQvdC40LU+IgorCisjOiBidWlsdGluL212LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICLQmtCw0YLQsNC70L7QsyAlcyDQsiDQuNC90LTQtdC60YHQtSDQuCDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0L/QvtC00LzQvtC00YPQu9C10Lw/IgorCisjOiBidWlsdGluL212LmM6NzEKK21zZ2lkICJQbGVhc2Ugc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAi0KfRgtC+0LHRiyDQv9GA0L7QtNC+0LvQttC40YLRjCwg0L/RgNC+0LjQvdC00LXQutGB0LjRgNGD0LnRgtC1INC40LvQuCDRgdC/0YDRj9GH0YzRgtC1INCy0LDRiNC4INC40LfQvNC10L3QtdC90LjRjyDQsiDRhNCw0LnQu9C1IC5naXRtb2R1bGVzIgorCisjOiBidWlsdGluL212LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyDQsiDQuNC90LTQtdGB0LUiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTEKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgItC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+INC/0LXRgNC10LzQtdGJ0LDRgtGML9C/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMLCDQtNCw0LbQtSDQtdGB0LvQuCDRhtC10LvRjCDRgdGD0YnQtdGB0YLQstGD0LXRgiIKKworIzogYnVpbHRpbi9tdi5jOjExMgorbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICLQv9GA0L7Qv9GD0YHQutCw0YLRjCDQvtGI0LjQsdC60Lgg0L/RgNC4INC/0LXRgNC10LzQtdGJ0LXQvdC40Lgv0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQuCIKKworIzogYnVpbHRpbi9tdi5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAi0YbQtdC70LXQstC+0Lkg0L/Rg9GC0Ywgwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQutCw0YLQsNC70L7Qs9C+0LwiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICLQn9GA0L7QstC10YDQutCwINC/0LXRgNC10LjQvNC10L3QvtCy0LDQvdC40Y8g0LjQtyDCqyVzwrsg0LIgwqslc8K7XG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjYKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICLQv9C70L7RhdC+0Lkg0LjRgdGC0L7Rh9C90LjQuiIKKworIzogYnVpbHRpbi9tdi5jOjE2OQorbXNnaWQgImNhbiBub3QgbW92ZSBkaXJlY3RvcnkgaW50byBpdHNlbGYiCittc2dzdHIgItC90LXQu9GM0LfRjyDQv9C10YDQtdC80LXRgdGC0LjRgtGMINC60LDRgtCw0LvQvtCzINCyINGB0LDQvNC+0LPQviDRgdC10LHRjyIKKworIzogYnVpbHRpbi9tdi5jOjE3MgorbXNnaWQgImNhbm5vdCBtb3ZlIGRpcmVjdG9yeSBvdmVyIGZpbGUiCittc2dzdHIgItC90LXQu9GM0LfRjyDQv9C10YDQtdC80LXRgdGC0LjRgtGMINC60LDRgtCw0LvQvtCzINCyINGE0LDQudC7IgorCisjOiBidWlsdGluL212LmM6MTgxCittc2dpZCAic291cmNlIGRpcmVjdG9yeSBpcyBlbXB0eSIKK21zZ3N0ciAi0LjRgdGF0L7QtNC90YvQuSDQutCw0YLQsNC70L7QsyDQv9GD0YHRgiIKKworIzogYnVpbHRpbi9tdi5jOjIwNgorbXNnaWQgIm5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiCittc2dzdHIgItC90LUg0L/QvtC0INCy0LXRgNGB0LjQvtC90L3Ri9C8INC60L7QvdGC0YDQvtC70LXQvCIKKworIzogYnVpbHRpbi9tdi5jOjIwOQorbXNnaWQgImRlc3RpbmF0aW9uIGV4aXN0cyIKK21zZ3N0ciAi0YbQtdC70LXQstC+0Lkg0L/Rg9GC0Ywg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL212LmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgItC/0LXRgNC10LfQsNC/0LjRgdGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9tdi5jOjIyMAorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQt9Cw0L/QuNGB0LDRgtGMIgorCisjOiBidWlsdGluL212LmM6MjIzCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICLQvdC10YHQutC+0LvRjNC60L4g0LjRgdGC0L7Rh9C90LjQutC+0LIg0LTQu9GPINC+0LTQvdC+0LPQviDRhtC10LvQtdCy0L7Qs9C+INC/0YPRgtC4IgorCisjOiBidWlsdGluL212LmM6MjI1Cittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLRhtC10LvQtdCy0L7QuSDQutCw0YLQsNC70L7QsyDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL212LmM6MjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCBzb3VyY2U9JXMsIGRlc3RpbmF0aW9uPSVzIgorbXNnc3RyICIlcywg0L7RgtC60YPQtNCwPSVzLCDQutGD0LTQsD0lcyIKKworIzogYnVpbHRpbi9tdi5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlc1xuIgorbXNnc3RyICLQn9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC1ICVzINCyICVzXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTYgYnVpbHRpbi9yZW1vdGUuYzo3MjIgYnVpbHRpbi9yZXBhY2suYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INC/0YDQuCDQv9C10YDQtdC40LzQtdC90L7QstCw0L3QuNC4IMKrJXPCuyIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjI1NQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs80L7Qv9GG0LjQuD5dIDzQutC+0LzQvNC40YI+4oCmIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjU2Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzQvtC/0YbQuNC4Pl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyNTcKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs80L7Qv9GG0LjQuD5dIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMDkKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0YLQvtC70YzQutC+INC40LzQtdC90LAgKNCx0LXQtyBTSEEtMSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTAKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgItC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LzQtdGC0LrQuCDQtNC70Y8g0LjQvNC10L3QvtCy0LDQvdC40Y8g0LrQvtC80LzQuNGC0L7QsiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxMgorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INGB0YHRi9C70LrQuCwg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNC1IDzRiNCw0LHQu9C+0L3Rgz4gIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzE0Cittc2dpZCAibGlzdCBhbGwgY29tbWl0cyByZWFjaGFibGUgZnJvbSBhbGwgcmVmcyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQv9C40YHQvtC6INCy0YHQtdGFINC60L7QvNC80LjRgtC+0LIsINC00L7RgdGC0LjQttC40LzRi9GFINGB0L4g0LLRgdC10YUg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzE1Cittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxNgorbXNnaWQgImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIChkZWZhdWx0KSIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINCy0YvQstC+0LQgwqt1bmRlZmluZWTCuywg0LXRgdC70Lgg0L3QtSDQvdCw0LnQtNC10L3QviAo0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4pIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzIyCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgItGA0LDQt9GL0LzQtdC90L7QstGL0LLQsNGC0Ywg0LLQstC10LTQtdC90L3Ri9C1INC80LXRgtC60LggKNC00LvRjyDQstC90YPRgtGA0LXQvdC90LXQs9C+INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gW2xpc3QgWzzQvtCx0YrQtdC60YI+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNgorbXNnaWQgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IgorIiB8ICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA80YHRgdGL0LvQutCwLdC90LAt0LfQsNC80LXRgtC60YM+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDzRgdC+0L7QsdGJ0LXQvdC40LU+IHwgLUYgPNGE0LDQudC7PiB8ICgtYyB8IC1DKSA80L7QsdGK0LXQutGCPl0gWzzQvtCx0YrQtdC60YI+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gY29weSBbLWZdIDzQuNC3LdC+0LHRitC10LrRgtCwPiA80LIt0L7QsdGK0LXQutGCPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI4Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFwcGVuZCBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtc2c+IHwgLUYgPGZpbGU+IHwiCisiICgtYyB8IC1DKSA8b2JqZWN0Pl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA80YHRgdGL0LvQutCwLdC90LAt0LfQsNC80LXRgtC60YM+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA80YHQvtC+0LHRidC10L3QuNC1PiB8IC1GIDzRhNCw0LnQuz4gfCAoLWMgfCAtQykgPNC+0LHRitC10LrRgj5dIFs80L7QsdGK0LXQutGCPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzzQvtCx0YrQtdC60YI+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz5dIHNob3cgWzzQvtCx0YrQtdC60YI+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA80YHRgtGA0LDRgtC10LPQuNGPPl0gPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz5dIHJlbW92ZSBbPNC+0LHRitC10LrRgj7igKZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW4gfCAtdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPNGB0YHRi9C70LrQsC3QvdCwLdC30LDQvNC10YLQutGDPl0gcHJ1bmUgWy1uIHwgLXZdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzYKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MQorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFs80L7QsdGK0LXQutGCPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDYKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgWzzQvtC/0YbQuNC4Pl0gWzzQvtCx0YrQtdC60YI+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzzQvtC/0YbQuNC4Pl0gPNC40Lct0L7QsdGK0LXQutGC0LA+IDzQsi3QvtCx0YrQtdC60YI+IgorCisjOiBidWlsdGluL25vdGVzLmM6NTIKK21zZ2lkICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnJvbS1vYmplY3Q+IDx0by1vYmplY3Q+XS4uLiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbiBbPNC40Lct0L7QsdGK0LXQutGC0LA+IDzQsi3QvtCx0YrQtdC60YI+XeKApiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU3Cittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFs80L7Qv9GG0LjQuD5dIFs80L7QsdGK0LXQutGCPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MgorbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBlZGl0IFs80L7QsdGK0LXQutGCPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NworbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFs80L7QsdGK0LXQutGCPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIFs80L7Qv9GG0LjQuD5dIDzRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzzQvtC/0YbQuNC4Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OQorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg0Cittc2dpZCAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgcHJ1bmUgWzzQvtC/0YbQuNC4Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OQorbXNnaWQgImdpdCBub3RlcyBnZXQtcmVmIgorbXNnc3RyICJnaXQgbm90ZXMgZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhcnQgJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/Rg9GB0YLQuNGC0YwgwqtzaG93wrsg0LTQu9GPINC+0LHRitC10LrRgtCwIMKrJXPCuyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MQorbXNnaWQgImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMINCy0YvQstC+0LQgwqtzaG93wrsiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQstC10YDRiNC40YLRjCDCq3Nob3fCuyDQtNC70Y8g0L7QsdGK0LXQutGC0LAgwqslc8K7IgorCisjOiBidWlsdGluL25vdGVzLmM6MTc0IGJ1aWx0aW4vdGFnLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINGE0LDQudC7IMKrJXPCuyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5MworbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAi0J/QvtC20LDQu9GD0LnRgdGC0LAsINGD0LrQsNC20LjRgtC1INGB0L7QtNC10YDQttC40LzQvtC1INC30LDQvNC10YLQutC4LCDQuNGB0L/QvtC70YzQt9GD0Y8g0L7Qv9GG0LjRjiAtbSDQuNC70LggLUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNC/0LjRgdCw0YLRjCDQvtCx0YrQtdC60YIg0LfQsNC80LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIG5vdGUgY29udGVudHMgaGF2ZSBiZWVuIGxlZnQgaW4gJXMiCittc2dzdHIgItCh0L7QtNC10YDQttC40LzQvtC1INC30LDQvNC10YLQutC4INC+0YHRgtCw0LvQvtGB0Ywg0LIgJXMiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMzIgYnVpbHRpbi90YWcuYzo2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywgwqslc8K7IgorCisjOiBidWlsdGluL25vdGVzLmM6MjM0IGJ1aWx0aW4vdGFnLmM6Njk4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuIG9yIHJlYWQgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0LrRgNGL0YLRjCDQuNC70Lgg0L/RgNC+0YfQuNGC0LDRgtGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1MyBidWlsdGluL25vdGVzLmM6MzA0IGJ1aWx0aW4vbm90ZXMuYzozMDYKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNjYgYnVpbHRpbi9ub3Rlcy5jOjQyMSBidWlsdGluL25vdGVzLmM6NTA3CisjOiBidWlsdGluL25vdGVzLmM6NTEyIGJ1aWx0aW4vbm90ZXMuYzo1OTAgYnVpbHRpbi9ub3Rlcy5jOjY1MworIzogYnVpbHRpbi9ub3Rlcy5jOjg3NyBidWlsdGluL3RhZy5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0LfRgNC10YjQuNGC0Ywgwqslc8K7INC60LDQuiDRgdGB0YvQu9C60YMuIgorCisjOiBidWlsdGluL25vdGVzLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWFkIG9iamVjdCAnJXMnLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0L7QsdGK0LXQutGCIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbm90ZSBkYXRhIGZyb20gbm9uLWJsb2Igb2JqZWN0ICclcycuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCDQtNCw0L3QvdGL0LUg0LfQsNC80LXRgtC60Lgg0LjQtyDQvdC10LTQstC+0LjRh9C90L7Qs9C+INC+0LHRitC10LrRgtCwIMKrJXPCuy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTkgYnVpbHRpbi9ub3Rlcy5jOjQxNCBidWlsdGluL25vdGVzLmM6NDkwCisjOiBidWlsdGluL25vdGVzLmM6NTAyIGJ1aWx0aW4vbm90ZXMuYzo1NzggYnVpbHRpbi9ub3Rlcy5jOjY0NgorIzogYnVpbHRpbi9ub3Rlcy5jOjk0MgorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgItC/0LXRgNC10LTQsNC90L4g0YHQu9C40YjQutC+0Lwg0LzQvdC+0LPQviDQv9Cw0YDQsNC80LXRgtGA0L7QsiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM3MiBidWlsdGluL25vdGVzLmM6NjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG5vdGUgZm91bmQgZm9yIG9iamVjdCAlcy4iCittc2dzdHIgItCd0LUg0L3QsNC50LTQtdC90LAg0LfQsNC80LXRgtC60LAg0LTQu9GPINC+0LHRitC10LrRgtCwICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5MyBidWlsdGluL25vdGVzLmM6NTU2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAi0YLQtdC60YHRgtC+0LLQvtC1INGB0L7QtNC10YDQttC40LzQvtC1INC30LDQvNC10YLQutC4IgorCisjOiBidWlsdGluL25vdGVzLmM6Mzk2IGJ1aWx0aW4vbm90ZXMuYzo1NTkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAi0YHQvtC00LXRgNC20LjQvNC+0LUg0LfQsNC80LXRgtC60Lgg0LIg0YTQsNC50LvQtSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5OCBidWlsdGluL25vdGVzLmM6NDAxIGJ1aWx0aW4vbm90ZXMuYzo1NjEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NjQgYnVpbHRpbi90YWcuYzo2MzAKK21zZ2lkICJvYmplY3QiCittc2dzdHIgItC+0LHRitC10LrRgiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5OSBidWlsdGluL25vdGVzLmM6NTYyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0Lgg0L7RgtGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGD0LrQsNC30LDQvdC90YvQuSDQvtCx0YrQtdC60YIg0LfQsNC80LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDIgYnVpbHRpbi9ub3Rlcy5jOjU2NQorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGD0LrQsNC30LDQvdC90YvQuSDQvtCx0YrQtdC60YIg0LfQsNC80LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDUgYnVpbHRpbi9ub3Rlcy5jOjU2OAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINGB0L7RhdGA0LDQvdC10L3QuNC1INC/0YPRgdGC0L7QuSDQt9Cw0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwNiBidWlsdGluL25vdGVzLmM6NDc3Cittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAi0LfQsNC80LXQvdC40YLRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40LUg0LfQsNC80LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LTQvtCx0LDQstC40YLRjCDQt9Cw0LzQtdGC0LrRgy4g0J3QsNC50LTQtdC90LAg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQsNGPINC30LDQvNC10YLQutCwINGDINC+0LHRitC10LrRgtCwICVzLiDQmNGB0L/QvtC70YzQt9GD0LnRgtC1INC/0LDRgNCw0LzQtdGC0YAgwqstZsK7INC00LvRjyDQv9C10YDQtdC30LDQv9C40YHQuCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40YUg0LfQsNC80LXRgtC+0LouIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ2IGJ1aWx0aW4vbm90ZXMuYzo1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICLQn9C10YDQtdC30LDQv9C40YHRjCDRgdGD0YnQtdGB0YLQstGD0Y7RidC40YUg0LfQsNC80LXRgtC+0Log0YMg0L7QsdGK0LXQutGC0LAgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ1NyBidWlsdGluL25vdGVzLmM6NjE4IGJ1aWx0aW4vbm90ZXMuYzo4ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0LfQsNC80LXRgtC60Lgg0YMg0L7QsdGK0LXQutGC0LAgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3OAorbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICLQv9GA0L7Rh9C40YLQsNGC0Ywg0L7QsdGK0LXQutGC0Ysg0LjQtyDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ4MAorbXNnaWQgImxvYWQgcmV3cml0aW5nIGNvbmZpZyBmb3IgPGNvbW1hbmQ+IChpbXBsaWVzIC0tc3RkaW4pIgorbXNnc3RyICLQt9Cw0LPRgNGD0LfQuNGC0Ywg0L3QsNGB0YLRgNC+0LnQutC4INC/0LXRgNC10LfQsNC/0LjRgdC4INC00LvRjyDQutC+0LzQsNC90LTRiyA80LrQvtC80LDQvdC00LA+ICjQstC60LvRjtGH0LDQtdGCINCyINGB0LXQsdGPIC0tc3RkaW4pIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICLQv9C10YDQtdC00LDQvdC+INGB0LvQuNGI0LrQvtC8INC80LDQu9C+INC/0LDRgNCw0LzQtdGC0YDQvtCyIgorCisjOiBidWlsdGluL25vdGVzLmM6NTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgY29weSBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlIgorIiBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC60L7Qv9C40YDQvtCy0LDRgtGMINC30LDQvNC10YLQutGDLiDQndCw0LnQtNC10L3QsCDRgdGD0YnQtdGB0YLQstGD0Y7RidCw0Y8g0LfQsNC80LXRgtC60LAg0YMg0L7QsdGK0LXQutGC0LAgJXMuINCY0YHQv9C+0LvRjNC30YPQudGC0LUg0L/QsNGA0LDQvNC10YLRgCDCqy1mwrsg0LTQu9GPINC/0LXRgNC10LfQsNC/0LjRgdC4INGB0YPRidC10YHRgtCy0YPRjtGJ0LjRhSDQt9Cw0LzQtdGC0L7Qui4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBub3RlcyBvbiBzb3VyY2Ugb2JqZWN0ICVzLiBDYW5ub3QgY29weS4iCittc2dzdHIgItCd0LXRgiDQt9Cw0LzQtdGC0L7QuiDRgyDQuNGB0YXQvtC00L3QvtCz0L4g0L7QsdGK0LXQutGC0LAgJXMuINCd0LXQu9GM0LfRjyDRgdC60L7Qv9C40YDQvtCy0LDRgtGMLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICLQntC/0YbQuNC4IC1tLy1GLy1jLy1DINC00LvRjyDQv9C+0LTQutC+0LzQsNC90LTRiyDCq2VkaXTCuyDRg9GB0YLQsNGA0LXQu9C4Llxu0JjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQstC80LXRgdGC0L4g0L3QuNGFIMKrZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQ8K7LlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzY0CiBtc2dpZCAiR2VuZXJhbCBvcHRpb25zIgogbXNnc3RyICLQntCx0YnQuNC1INC+0L/RhtC40LgiCiAKLSM6IGdpdGs6MTEzOTgKLW1zZ2lkICJVc2UgdGhlbWVkIHdpZGdldHMiCi1tc2dzdHIgItCY0YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgdGC0LjQu9C4INCy0LjQtNC20LXRgtC+0LIiCisjOiBidWlsdGluL25vdGVzLmM6NzY2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAi0J7Qv9GG0LjQuCDRgdC70LjRj9C90LjRjyIKIAotIzogZ2l0azoxMTQwMAotbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCi1tc2dzdHIgIijQuNC30LzQtdC90LXQvdC40LUg0L/QvtGC0YDQtdCx0YPQtdGCINC/0LXRgNC10LfQsNC/0YPRgdC6KSIKLQotIzogZ2l0azoxMTQwMgotbXNnaWQgIihjdXJyZW50bHkgdW5hdmFpbGFibGUpIgotbXNnc3RyICIo0L3QtdC00L7RgdGC0YPQv9C90L4g0LIg0LTQsNC90L3Ri9C5INC80L7QvNC10L3RgikiCi0KLSM6IGdpdGs6MTE0MTMKLW1zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKLW1zZ3N0ciAi0KbQstC10YLQsDog0L3QsNC20LzQuNGC0LUg0LTQu9GPINCy0YvQsdC+0YDQsCIKLQotIzogZ2l0azoxMTQxNgotbXNnaWQgIkludGVyZmFjZSIKLW1zZ3N0ciAi0JjQvdGC0LXRgNGE0LXQudGBIgotCi0jOiBnaXRrOjExNDE3Ci1tc2dpZCAiaW50ZXJmYWNlIgotbXNnc3RyICLQuNC90YLQtdGA0YTQtdC50YEiCi0KLSM6IGdpdGs6MTE0MjAKLW1zZ2lkICJCYWNrZ3JvdW5kIgotbXNnc3RyICLQpNC+0L0iCi0KLSM6IGdpdGs6MTE0MjEgZ2l0azoxMTQ1MQotbXNnaWQgImJhY2tncm91bmQiCi1tc2dzdHIgItGE0L7QvSIKLQotIzogZ2l0azoxMTQyNAotbXNnaWQgIkZvcmVncm91bmQiCi1tc2dzdHIgItCf0LXRgNC10LTQvdC40Lkg0L/Qu9Cw0L0iCi0KLSM6IGdpdGs6MTE0MjUKLW1zZ2lkICJmb3JlZ3JvdW5kIgotbXNnc3RyICLQv9C10YDQtdC00L3QuNC5INC/0LvQsNC9IgotCi0jOiBnaXRrOjExNDI4Ci1tc2dpZCAiRGlmZjogb2xkIGxpbmVzIgotbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y86INGB0YLQsNGA0YvQuSDRgtC10LrRgdGCIgotCi0jOiBnaXRrOjExNDI5Ci1tc2dpZCAiZGlmZiBvbGQgbGluZXMiCi1tc2dzdHIgItGB0YLQsNGA0YvQuSDRgtC10LrRgdGCINC40LfQvNC10L3QtdC90LjRjyIKLQotIzogZ2l0azoxMTQzMwotbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKLW1zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPOiDQvdC+0LLRi9C5INGC0LXQutGB0YIiCi0KLSM6IGdpdGs6MTE0MzQKLW1zZ2lkICJkaWZmIG5ldyBsaW5lcyIKLW1zZ3N0ciAi0L3QvtCy0YvQuSDRgtC10LrRgdGCINC40LfQvNC10L3QtdC90LjRjyIKLQotIzogZ2l0azoxMTQzOAotbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgotbXNnc3RyICLQmNC30LzQtdC90LXQvdC40Y86INC30LDQs9C+0LvQvtCy0L7QuiDQsdC70L7QutCwIgotCi0jOiBnaXRrOjExNDQwCi1tc2dpZCAiZGlmZiBodW5rIGhlYWRlciIKLW1zZ3N0ciAi0LfQsNCz0L7Qu9C+0LLQvtC6INCx0LvQvtC60LAg0LjQt9C80LXQvdC10L3QuNC5IgotCi0jOiBnaXRrOjExNDQ0Ci1tc2dpZCAiTWFya2VkIGxpbmUgYmciCi1tc2dzdHIgItCk0L7QvSDQstGL0LHRgNCw0L3QvdC+0Lkg0YHRgtGA0L7QutC4IgotCi0jOiBnaXRrOjExNDQ2Ci1tc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKLW1zZ3N0ciAi0YTQvtC9INCy0YvQsdGA0LDQvdC90L7QuSDRgdGC0YDQvtC60LgiCi0KLSM6IGdpdGs6MTE0NTAKLW1zZ2lkICJTZWxlY3QgYmciCi1tc2dzdHIgItCS0YvQsdC10YDQuNGC0LUg0YTQvtC9IgotCi0jOiBnaXRrOjExNDU5Ci1tc2dpZCAiRm9udHM6IHByZXNzIHRvIGNob29zZSIKLW1zZ3N0ciAi0KjRgNC40YTRgjog0L3QsNC20LzQuNGC0LUg0LTQu9GPINCy0YvQsdC+0YDQsCIKLQotIzogZ2l0azoxMTQ2MQotbXNnaWQgIk1haW4gZm9udCIKLW1zZ3N0ciAi0J7RgdC90L7QstC90L7QuSDRiNGA0LjRhNGCIgotCi0jOiBnaXRrOjExNDYyCi1tc2dpZCAiRGlmZiBkaXNwbGF5IGZvbnQiCi1tc2dzdHIgItCo0YDQuNGE0YIg0L/QvtC60LDQt9CwINC40LfQvNC10L3QtdC90LjQuSIKLQotIzogZ2l0azoxMTQ2MwotbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCi1tc2dzdHIgItCo0YDQuNGE0YIg0LjQvdGC0LXRgNGE0LXQudGB0LAiCi0KLSM6IGdpdGs6MTE0ODUKLW1zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgotbXNnc3RyICLQndCw0YHRgtGA0L7QudC60LggR2l0ayIKLQotIzogZ2l0azoxMTQ5NAotbXNnaWQgIkdlbmVyYWwiCi1tc2dzdHIgItCe0LHRidC40LUiCi0KLSM6IGdpdGs6MTE0OTUKLW1zZ2lkICJDb2xvcnMiCi1tc2dzdHIgItCm0LLQtdGC0LAiCi0KLSM6IGdpdGs6MTE0OTYKLW1zZ2lkICJGb250cyIKLW1zZ3N0ciAi0KjRgNC40YTRgtGLIgotCi0jOiBnaXRrOjExNTQ2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiR2l0azogY2hvb3NlIGNvbG9yIGZvciAlcyIKLW1zZ3N0ciAiR2l0azog0LLRi9Cx0LXRgNC40YLQtSDRhtCy0LXRgiDQtNC70Y8gJXMiCi0KLSM6IGdpdGs6MTIwNTkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKIG1zZ2lkICIiCi0iU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCi0iIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCi1tc2dzdHIgItCaINGB0L7QttCw0LvQtdC90LjRjiBnaXRrINC90LUg0LzQvtC20LXRgiDRgNCw0LHQvtGC0LDRgtGMINGBINGN0YLQvtC5INCy0LXRgNGB0LjQuSBUY2wvVGsuXG7QotGA0LXQsdGD0LXRgtGB0Y8g0LrQsNC6INC80LjQvdC40LzRg9C8IFRjbC9UayA4LjQuIgorInJlc29sdmUgbm90ZXMgY29uZmxpY3RzIHVzaW5nIHRoZSBnaXZlbiBzdHJhdGVneSAiCisiKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi9jYXRfc29ydF91bmlxKSIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINC60L7QvdGE0LvQuNC60YLRiyDQt9Cw0LzQtdGC0L7QuiDRgSDQv9C+0LzQvtGJ0YzRjiDRg9C60LDQt9Cw0L3QvdC+0Lkg0YHRgtGA0LDRgtC10LPQuNC4IChtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiCiAKLSM6IGdpdGs6MTIyNjkKLW1zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgotbXNnc3RyICJHaXQt0YDQtdC/0L7Qt9C40YLQsNGA0LjQuSDQvdC1INC90LDQudC00LXQvSDQsiDRgtC10LrRg9GJ0LXQvCDQutCw0YLQsNC70L7Qs9C1LiIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzAKK21zZ2lkICJDb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICLQmtC+0LzQvNC40YIg0L3QtSDRgdC70LjRgtGL0YUg0LfQsNC80LXRgtC+0LoiCiAKLSM6IGdpdGs6MTIzMTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJBbWJpZ3VvdXMgYXJndW1lbnQgJyVzJzogYm90aCByZXZpc2lvbiBhbmQgZmlsZW5hbWUiCi1tc2dzdHIgItCd0LXQvtC00L3QvtC30L3QsNGH0L3Ri9C5INCw0YDQs9GD0LzQtdC90YIgwqslc8K7OiDRgdGD0YnQtdGB0YLQstGD0LXRgiDQutCw0Log0YDQtdC00LDQutGG0LjRjyDQuCDQutCw0Log0LjQvNGPINGE0LDQudC70LAiCisjOiBidWlsdGluL25vdGVzLmM6NzcyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAi0LfQsNCy0LXRgNGI0LjRgtGMINGB0LvQuNGP0L3QuNC1INC30LDQvNC10YLQvtC6INC60L7QvNC80LjRgtC+0Lwg0L3QtSDRgdC70LjRgtGL0YUg0LfQsNC80LXRgtC+0LoiCiAKLSM6IGdpdGs6MTIzMjgKLW1zZ2lkICJCYWQgYXJndW1lbnRzIHRvIGdpdGs6IgotbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdGL0LUg0LDRgNCz0YPQvNC10L3RgtGLINC00LvRjyBnaXRrOiIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzQKK21zZ2lkICJBYm9ydGluZyBub3RlcyBtZXJnZSByZXNvbHV0aW9uIgorbXNnc3RyICLQntGC0LzQtdC90LAg0YDQsNC30YDQtdGI0LXQvdC40Y8g0YHQu9C40Y/QvdC40Y8g0LfQsNC80LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAi0L7RgtC80LXQvdC40YLRjCDRgdC70LjRj9C90LjQtSDQt9Cw0LzQtdGC0L7QuiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJBIG5vdGVzIG1lcmdlIGludG8gJXMgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCAlcyIKK21zZ3N0ciAi0KHQu9C40Y/QvdC40LUg0LfQsNC80LXRgtC+0Log0LIgJXMg0YPQttC1INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L3QsCAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAi0KMg0L7QsdGK0LXQutGC0LAgJXMg0L3QtdGCINC30LDQvNC10YLQutC4XG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OTIKK21zZ2lkICJhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgbm90ZSBpcyBub3QgYW4gZXJyb3IiCittc2dzdHIgItC/0L7Qv9GL0YLQutCwINGD0LTQsNC70LXQvdC40Y8g0L3QtdGB0YPRidC10YHRgtCy0YPRjtGJ0LXQuSDQt9Cw0LzQtdGC0LrQuCDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0L7RiNC40LHQutC+0LkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OTUKK21zZ2lkICJyZWFkIG9iamVjdCBuYW1lcyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINC40LzQtdC90LAg0L7QsdGK0LXQutGC0L7QsiDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL25vdGVzLmM6OTc2Cittc2dpZCAibm90ZXMtcmVmIgorbXNnc3RyICLRgdGB0YvQu9C60LAt0L3QsC3Qt9Cw0LzQtdGC0LrRgyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3NworbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LfQsNC80LXRgtC60YMg0LjQtyA80YHRgdGL0LvQutCwLdC90LAt0LfQsNC80LXRgtC60YM+IgorCisjOiBidWlsdGluL25vdGVzLmM6MTAxMiBidWlsdGluL3JlbW90ZS5jOjE1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAi0J3QtdC40LfQstC10YHRgtC90LDRjyDQv9C+0LTQutC+0LzQsNC90LTQsDogJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjgKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPG9wdGlvbnM+Li4uXSBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPNC+0L/RhtC40Lg+4oCmXSBbPCA80YHQv9C40YHQvtC6LdGB0YHRi9C70L7Quj4gfCA8IDzRgdC/0LjRgdC+0Lot0L7QsdGK0LXQutGC0L7Qsj5dIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI5Cittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgWzxvcHRpb25zPi4uLl0gPGJhc2UtbmFtZT4gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgImdpdCBwYWNrLW9iamVjdHMgWzzQvtC/0YbQuNC4PuKApl0gPNC40LzRjy3QsdCw0LfRiz4gWzwgPNGB0L/QuNGB0L7Qui3RgdGB0YvQu9C+0Lo+IHwgPCA80YHQv9C40YHQvtC6LdC+0LHRitC10LrRgtC+0LI+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0YHQttCw0YLQuNGPICglZCkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6NzcxCittc2dpZCAiV3JpdGluZyBvYmplY3RzIgorbXNnc3RyICLQl9Cw0L/QuNGB0Ywg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDExCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgItC+0YLQutC70Y7Rh9C10L3QuNC1INC30LDQv9C40YHQuCDQsdC40YLQvtCy0YvRhSDQutCw0YDRgiwg0YLQsNC6INC60LDQuiDQvdC10LrQvtGC0L7RgNGL0LUg0L7QsdGK0LXQutGC0Ysg0L3QtSDQsdGL0LvQuCDRg9C/0LDQutC+0LLQsNC90YsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE3MQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgItCh0LbQsNGC0LjQtSDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbiAlcyIKK21zZ3N0ciAi0L3QtdC/0L7QtNC00LXRgNC20LjQstCw0LXQvNCw0Y8g0LLQtdGA0YHQuNGPINC40L3QtNC10LrRgdCwICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGluZGV4IHZlcnNpb24gJyVzJyIKK21zZ3N0ciAi0L/Qu9C+0YXQsNGPINCy0LXRgNGB0LjRjyDQuNC90LTQtdC60YHQsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYwMgorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0L/RgNC+0LPRgNC10YHRgSDQstGL0L/QvtC70L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjA0Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQv9GA0L7Qs9GA0LXRgdGBINCy0YvQv9C+0LvQvdC10L3QuNGPIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDYKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAi0L/QvtC60LDQt9Cw0YLRjCDQv9GA0L7Qs9GA0LXRgdGBINCy0YvQv9C+0LvQvdC10L3QuNGPINCy0L4g0LLRgNC10LzRjyDQt9Cw0L/QuNGB0Lgg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjA5Cittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICLQv9C+0YXQvtC20LUg0L3QsCAtLWFsbC1wcm9ncmVzcyDQv9GA0Lgg0LLQutC70Y7Rh9C10L3QvdC+0Lwg0L/RgNC+0LPRgNC10YHRgdC1INCy0YvQv9C+0LvQvdC10L3QuNGPIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTAKK21zZ2lkICJ2ZXJzaW9uWyxvZmZzZXRdIgorbXNnc3RyICLQstC10YDRgdC40Y9bLNGB0LzQtdGJ0LXQvdC40LVdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTEKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINGE0LDQudC7INC40L3QtNC10LrRgdCwINC/0LDQutC10YLQsCDQsiDRg9C60LDQt9Cw0L3QvdC+0Lkg0LLQtdGA0YHQuNC4INGE0L7RgNC80LDRgtCwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTQKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBvdXRwdXQgcGFjayBmaWxlIgorbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70YzQvdGL0Lkg0YDQsNC30LzQtdGAINC60LDQttC00L7Qs9C+INCy0YvRhdC+0LTQvdC+0LPQviDRhNCw0LnQu9CwINC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE2Cittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0YfRg9C20LjQtSDQvtCx0YrQtdC60YLRiywg0LLQt9GP0YLRi9C1INC40Lcg0LDQu9GM0YLQtdGA0L3QsNGC0LjQstC90L7Qs9C+INGF0YDQsNC90LjQu9C40YnQsCDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTgKK21zZ2lkICJpZ25vcmUgcGFja2VkIG9iamVjdHMiCittc2dzdHIgItC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDRg9C/0LDQutC+0LLQsNC90L3Ri9C1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjAKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBvYmplY3RzIgorbXNnc3RyICLQvtCz0YDQsNC90LjRh9C40YLRjCDQvtC60L3QviDQv9Cw0LrQtdGC0LAg0L/QviDQutC+0LvQuNGH0LXRgdGC0LLRgyDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjIKK21zZ2lkICJsaW1pdCBwYWNrIHdpbmRvdyBieSBtZW1vcnkgaW4gYWRkaXRpb24gdG8gb2JqZWN0IGxpbWl0IgorbXNnc3RyICLQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QviDQuiDQutC+0LvQuNGH0LXRgdGC0LLRgyDQvtCx0YrQtdC60YLQvtCyINC+0LPRgNCw0L3QuNGH0LjRgtGMINC+0LrQvdC+INC/0LDQutC10YLQsCDQv9C+INC/0LDQvNGP0YLQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjI0Cittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgItC80LDQutGB0LjQvNCw0LvRjNC90LDRjyDRgNCw0LfRgNC10YjQtdC90L3QsNGPINC00LvQuNC90LAg0YbQtdC/0L7Rh9C60Lgg0LTQtdC70YzRgiDQsiDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQtdC8INC/0LDQutC10YLQtSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjI2Cittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L/QvtCy0YLQvtGA0L3QviDRgdGD0YnQtdGB0YLQstGD0Y7RidC40LUg0LTQtdC70YzRgtGLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjgKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L/QvtCy0YLQvtGA0L3QviDRgdGD0YnQtdGB0YLQstGD0Y7RidC40LUg0L7QsdGK0LXQutGC0YsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzMAorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LHRitC10LrRgtGLIE9GU19ERUxUQSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjMyCittc2dpZCAidXNlIHRocmVhZHMgd2hlbiBzZWFyY2hpbmcgZm9yIGJlc3QgZGVsdGEgbWF0Y2hlcyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC80L3QvtCz0L7Qv9C+0YLQvtGH0L3QvtGB0YLRjCDQv9GA0Lgg0L/QvtC40YHQutC1INC70YPRh9GI0LjRhSDRgdC+0LLQv9Cw0LTQtdC90LjQuSDQtNC10LvRjNGCIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzQKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICLQvdC1INGB0L7Qt9C00LDQstCw0YLRjCDQv9GD0YHRgtGL0LUg0LLRi9GF0L7QtNC90YvQtSDQv9Cw0LrQtdGC0YsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzNgorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDQsNGA0LPRg9C80LXQvdGC0Ysg0YDQtdC00LDQutGG0LjQuSDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzgKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQuNGC0YzRgdGPINC+0LHRitC10LrRgtCw0LzQuCwg0LrQvtGC0L7RgNGL0LUg0LXRidC1INC90LUg0YPQv9Cw0LrQvtCy0LDQvdGLIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDEKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDQvtCx0YrQtdC60YLRiywg0LrQvtGC0L7RgNGL0LUg0LTQvtGB0YLQuNC20LjQvNGLINC/0L4g0LvRjtCx0L7QuSDQuNC3INGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQ0Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINC+0LHRitC10LrRgtGLLCDQvdCwINC60L7RgtC+0YDRi9C1INGB0YHRi9C70LDRjtGC0YHRjyDQt9Cw0L/QuNGB0Lgg0LbRg9GA0L3QsNC70LAg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhlIGluZGV4IgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINC+0LHRitC10LrRgtGLLCDQvdCwINC60L7RgtC+0YDRi9C1INGB0YHRi9C70LDQtdGC0YHRjyDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1MAorbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0L/QsNC60LXRgiDQvdCwICDRgdGC0LDQvdC00LDRgNGC0L3Ri9C5INCy0YvQstC+0LQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1MgorbXNnaWQgImluY2x1ZGUgdGFnIG9iamVjdHMgdGhhdCByZWZlciB0byBvYmplY3RzIHRvIGJlIHBhY2tlZCIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDQvtCx0YrQtdC60YLRiyDQvNC10YLQvtC6LCDQutC+0YLQvtGA0YvQtSDRgdGB0YvQu9Cw0Y7RgtGB0Y8g0L3QsCDRg9C/0LDQutC+0LLRi9Cy0LDQtdC80YvQtSDQvtCx0YrQtdC60YLRiyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU0Cittc2dpZCAia2VlcCB1bnJlYWNoYWJsZSBvYmplY3RzIgorbXNnc3RyICLRgdC+0YXRgNCw0L3Rj9GC0Ywg0YHRgdGL0LvQutC4INC90LAg0L3QtdC00L7RgdGC0YPQv9C90YvQtSDQvtCx0YrQtdC60YLRiyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU1IHBhcnNlLW9wdGlvbnMuaDoxNDIKK21zZ2lkICJ0aW1lIgorbXNnc3RyICLQstGA0LXQvNGPIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTYKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAi0YDQsNGB0L/QsNC60L7QstCw0YLRjCDQvdC10LTQvtGB0YLRg9C/0L3Ri9C1INC+0LHRitC10LrRgtGLLCDQutC+0YLQvtGA0YvQtSDQvdC+0LLQtdC1LCDRh9C10LwgPNCy0YDQtdC80Y8+IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTkKK21zZ2lkICJjcmVhdGUgdGhpbiBwYWNrcyIKK21zZ3N0ciAi0YHQvtC30LTQsNCy0LDRgtGMINGC0L7QvdC60LjQtSDQv9Cw0LrQtdGC0YsiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2MQorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICLRgdC+0LfQtNCw0LLQsNGC0Ywg0L/QsNC60LXRgtGLLCDQv9C+0LTRhdC+0LTRj9GJ0LjQtSDQtNC70Y8g0YfQsNGB0YLQuNGH0L3Ri9GFINC40LfQstC70LXRh9C10L3QuNC5IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjMKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0L/QsNC60LXRgtGLLCDRgNGP0LTQvtC8INGBINC60L7RgtC+0YDRi9C80Lgg0LvQtdC20LjRgiAua2VlcCDRhNCw0LnQuyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY1Cittc2dpZCAicGFjayBjb21wcmVzc2lvbiBsZXZlbCIKK21zZ3N0ciAi0YPRgNC+0LLQtdC90Ywg0YHQttCw0YLQuNGPINC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY3Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgItC90LUg0YHQutGA0YvQstCw0YLRjCDQutC+0LzQvNC40YLRiyDRgdGA0LDRidC10L3QuNGP0LzQuCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY5Cittc2dpZCAidXNlIGEgYml0bWFwIGluZGV4IGlmIGF2YWlsYWJsZSB0byBzcGVlZCB1cCBjb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLQv9C+INCy0L7Qt9C80L7QttC90L7RgdGC0Lgg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC40L3QtNC10LrRgSDQsiDQsdC40YLQvtCy0YvRhSDQutCw0YDRgtCw0YUsINC00LvRjyDRg9GB0LrQvtGA0LXQvdC40Y8g0L/QvtC00YHRh9C10YLQsCDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NzEKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICLQt9Cw0L/QuNGB0Ywg0LjQvdC00LXQutGB0LAg0LIg0LHQuNGC0L7QstGL0YUg0LrQsNGA0YLQsNGFINCy0LzQtdGB0YLQtSDRgSDQuNC90LTQtdC60YHQvtC8INC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzYyCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAi0J/QvtC00YHRh9C10YIg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo2Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHBhY2stcmVmcyBbPNC+0L/RhtC40Lg+XSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNAorbXNnaWQgInBhY2sgZXZlcnl0aGluZyIKK21zZ3N0ciAi0L/QsNC60L7QstCw0YLRjCDQstGB0ZEiCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTUKK21zZ2lkICJwcnVuZSBsb29zZSByZWZzIChkZWZhdWx0KSIKK21zZ3N0ciAi0L/QvtGH0LjRgdGC0LjRgtGMINGB0LvQsNCx0YvQtSDRgdGB0YvQu9C60LggKNC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOKSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo3Cittc2dpZCAiZ2l0IHBydW5lLXBhY2tlZCBbLW4gfCAtLWRyeS1ydW5dIFstcSB8IC0tcXVpZXRdIgorbXNnc3RyICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NDAKK21zZ2lkICJSZW1vdmluZyBkdXBsaWNhdGUgb2JqZWN0cyIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDQtNGD0LHQu9C40YDRg9GO0YnQuNGF0YHRjyDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3BydW5lLmM6MTEKK21zZ2lkICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLWV4cGlyZSA8dGltZT5dIFstLV0gWzxoZWFkPi4uLl0iCittc2dzdHIgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tZXhwaXJlIDzQstGA0LXQvNGPPl0gWy0tXSBbPNC40LzRjy3QstC10YLQutC4PuKApl0iCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMDUgYnVpbHRpbi93b3JrdHJlZS5jOjEyMQorbXNnaWQgImRvIG5vdCByZW1vdmUsIHNob3cgb25seSIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9GP0YLRjCwg0YLQvtC70YzQutC+INC/0L7QutCw0LfQsNGC0Ywg0YHQv9C40YHQvtC6IgorCisjOiBidWlsdGluL3BydW5lLmM6MTA2IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjIKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0L/QuNGB0L7QuiDRg9C00LDQu9C10L3QvdGL0YUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwOSBidWlsdGluL3dvcmt0cmVlLmM6MTI0Cittc2dpZCAiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgItGD0LTQsNC70LjRgtGMINC+0LHRitC10LrRgtGLINGB0YLQsNGA0LXQtSDRh9C10LwgPNC00LDRgtCwLdC+0LrQvtC90YfQsNC90LjRjz4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY5Cittc2dpZCAiZ2l0IHB1bGwgW29wdGlvbnNdIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVsbCBb0L7Qv9GG0LjQuF0gWzzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbPNGB0L/QtdGG0LjRhNC40LrQsNGG0LjRjy3RgdGB0YvQu9C60Lg+4oCmXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjExMworbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICLQntC/0YbQuNC4LCDRgdCy0Y/Qt9Cw0L3QvdGL0LUg0YHQviDRgdC70LjRj9C90LjQtdC8IgorCisjOiBidWlsdGluL3B1bGwuYzoxMTYKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgItC30LDQsdGA0LDRgtGMINC40LfQvNC10L3QtdC90LjRjyDRgSDQv9C+0LzQvtGJ0YzRjiDQv9C10YDQtdCx0LDQt9C40YDQvtCy0LDQvdC40Y8sINCwINC90LUg0YHQu9C40Y/QvdC40Y8iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0MCBidWlsdGluL3JldmVydC5jOjEwNQorbXNnaWQgImFsbG93IGZhc3QtZm9yd2FyZCIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINC/0LXRgNC10LzQvtGC0LrRgyDQstC/0LXRgNC10LQiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NgorbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAi0L/RgNC+0LLQtdGA0LjRgtGMLCDRh9GC0L4g0YPQutCw0LfQsNC90L3Ri9C5INC60L7QvNC80LjRgiDQuNC80LXQtdGCINCy0LXRgNC90YPRjiDRjdC70LXQutGC0YDQvtC90L3Rg9GOINC/0L7QtNC/0LjRgdGMIEdQRyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTYwCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICLQntC/0YbQuNC4LCDRgdCy0Y/Qt9Cw0L3QvdGL0LUg0YEg0LjQt9Cy0LvQtdGH0LXQvdC40LXQvCIKKworIzogYnVpbHRpbi9wdWxsLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIHB1bGwuZmY6ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdC+0LUg0LfQvdCw0YfQtdC90LjQtSDQtNC70Y8gcHVsbC5mZjogJXMiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjM1MgorbXNnaWQgIkNhbm5vdCBwdWxsIHdpdGggcmViYXNlOiBZb3UgaGF2ZSB1bnN0YWdlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINGBINC/0LXRgNC10LzQtdGJ0LXQvdC40LXQvDog0KMg0LLQsNGBINC10YHRgtGMINC90LXQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogYnVpbHRpbi9wdWxsLmM6MzU4Cittc2dpZCAiQWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICLQmiDRgtC+0LzRgyDQttC1LCDQsiDQstCw0YjQtdC8INC40L3QtNC10LrRgdC1INC10YHRgtGMINC90LXQt9Cw0LrQvtC80LzQuNGH0LXQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBidWlsdGluL3B1bGwuYzozNjAKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C+0LvRg9GH0LjRgtGMINGBINC/0LXRgNC10LzQtdGJ0LXQvdC40LXQvDog0JIg0LLQsNGI0LXQvCDQuNC90LTQtdC60YHQtSDQtdGB0YLRjCDQvdC10LfQsNC60L7QvNC80LjRh9C10L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM2Cittc2dpZCAiIgorIlRoZXJlIGlzIG5vIGNhbmRpZGF0ZSBmb3IgcmViYXNpbmcgYWdhaW5zdCBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0ICIKKyJmZXRjaGVkLiIKK21zZ3N0ciAi0J3QtdGCINC/0YDQtdGC0LXQvdC00LXQvdGC0L7QsiDQtNC70Y8g0L/QtdGA0LXQvNC10YnQtdC90LjRjyDRgdGA0LXQtNC4INGB0YHRi9C70L7Quiwg0LrQvtGC0L7RgNGL0LUg0LLRiyDRgtC+0LvRjNC60L4g0YfRgtC+INC/0L7Qu9GD0YfQuNC70LguIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzgKK21zZ2lkICIiCisiVGhlcmUgYXJlIG5vIGNhbmRpZGF0ZXMgZm9yIG1lcmdpbmcgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCBmZXRjaGVkLiIKK21zZ3N0ciAi0J3QtdGCINC/0YDQtdGC0LXQvdC00LXQvdGC0L7QsiDQtNC70Y8g0YHQu9C40Y/QvdC40Y8g0YHRgNC10LTQuCDRgdGB0YvQu9C+0LosINC60L7RgtC+0YDRi9C1INCy0Ysg0YLQvtC70YzQutC+INGH0YLQviDQv9C+0LvRg9GH0LjQu9C4LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5Cittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAi0J7QsdGL0YfQvdC+INGN0YLQviDQvtC30L3QsNGH0LDQtdGCLCDRh9GC0L4g0LLRiyDQv9C10YDQtdC00LDQu9C4INGB0L/QtdGG0LjRhNC40LrQsNGG0LjRjiDRgdGB0YvQu9C60Lgg0YEg0L/QvtC80L7RidGM0Y4g0YjQsNCx0LvQvtC90LAg0Lgg0Y3RgtC+0YIg0YjQsNCx0LvQvtC9INC90LUg0YHQvtCy0L/QsNC7INC90Lgg0YEg0L7QtNC90L7QuSDQuNC3INGB0YHRi9C70L7QuiDQvdCwINCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LguIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhc2tlZCB0byBwdWxsIGZyb20gdGhlIHJlbW90ZSAnJXMnLCBidXQgZGlkIG5vdCBzcGVjaWZ5XG4iCisiYSBicmFuY2guIEJlY2F1c2UgdGhpcyBpcyBub3QgdGhlIGRlZmF1bHQgY29uZmlndXJlZCByZW1vdGVcbiIKKyJmb3IgeW91ciBjdXJyZW50IGJyYW5jaCwgeW91IG11c3Qgc3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lLiIKK21zZ3N0ciAi0JLRiyDQv9C+0L/RgNC+0YHQuNC70Lgg0L/QvtC70YPRh9C40YLRjCDQuNC30LzQtdC90LXQvdC40Y8g0YHQviDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8gwqslc8K7LCDQvdC+INC90LUg0YPQutCw0LfQsNC70Lgg0LLQtdGC0LrRgy4g0KLQsNC6INC60LDQuiDRjdGC0L4g0L3QtSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOINC00LvRjyAg0LLQsNGI0LXQuSDRgtC10LrRg9GJ0LXQuSDQstC10YLQutC4LCDQstGLINC00L7Qu9C20L3RiyDRg9C60LDQt9Cw0YLRjCDQstC10YLQutGDINCyINC60L7QvNCw0L3QtNC90L7QuSDRgdGC0YDQvtC60LUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDcKK21zZ2lkICJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDQvdC4INC90LAg0L7QtNC90L7QuSDQuNC3INCy0LXRgtC+0LouIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDkgYnVpbHRpbi9wdWxsLmM6NDY0Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAi0J/QvtC20LDQu9GD0LnRgdGC0LAsINGD0LrQsNC20LjRgtC1INC90LAg0LrQsNC60YPRjiDQstC10YLQutGDINCy0Ysg0YXQvtGC0LjRgtC1INC/0LXRgNC10LzQtdGB0YLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUxIGJ1aWx0aW4vcHVsbC5jOjQ2NgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAi0J/QvtC20LDQu9GD0LnRgdGC0LAsINGD0LrQsNC20LjRgtC1INGBINC60LDQutC+0Lkg0LLQtdGC0LrQvtC5INCy0Ysg0YXQvtGC0LjRgtC1INGB0LvQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUyIGJ1aWx0aW4vcHVsbC5jOjQ2NworbXNnaWQgIlNlZSBnaXQtcHVsbCgxKSBmb3IgZGV0YWlscy4iCittc2dzdHIgItCU0LvRjyDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4INGB0LzQvtGC0YDQuNGC0LUgZ2l0LXB1bGwoMSkuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NjIKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi0KMg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCDQvdC10YIg0LjQvdGE0L7RgNC80LDRhtC40Lgg0L7QsSDQvtGC0YHQu9C10LbQuNCy0LDQvdC40LguIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCittc2dzdHIgItCV0YHQu9C4INCy0Ysg0YXQvtGC0LjRgtC1INGD0LrQsNC30LDRgtGMINC40L3RhNC+0YDQvNCw0YbQuNGOINC+INC+0YLRgdC70LXQttC40LLQsNC10LzQvtC5INCy0LXRgtC60LUsINCy0YvQv9C+0LvQvdC40YLQtTpcblxuICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG89JXMvPGJyYW5jaD4gJXNcbiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRvIG1lcmdlIHdpdGggdGhlIHJlZiAnJXMnXG4iCisiZnJvbSB0aGUgcmVtb3RlLCBidXQgbm8gc3VjaCByZWYgd2FzIGZldGNoZWQuIgorbXNnc3RyICLQktCw0YjQsCDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y8g0YPQutCw0LfRi9Cy0LDQtdGCLCDRh9GC0L4g0L3Rg9C20L3QviDRgdC70LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDRgdC+INGB0YHRi9C70LrQvtC5XG7CqyVzwrsg0LjQtyDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8sINC90L4g0YLQsNC60LDRjyDRgdGB0YvQu9C60LAg0L3QtSDQsdGL0LvQsCDQv9C+0LvRg9GH0LXQvdCwLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODMwCittc2dpZCAiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIKK21zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC40LUg0LXRidC1INC90LUg0L3QsNGH0LDQstGI0LXQudGB0Y8g0LLQtdGC0LrQuCDRgSDQuNC30LzQtdC90LXQvdC40Y/QvNC4LCDQtNC+0LHQsNCy0LvQtdC90L3Ri9C80Lgg0LIg0LjQvdC00LXQutGBLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJmZXRjaCB1cGRhdGVkIHRoZSBjdXJyZW50IGJyYW5jaCBoZWFkLlxuIgorImZhc3QtZm9yd2FyZGluZyB5b3VyIHdvcmtpbmcgdHJlZSBmcm9tXG4iCisiY29tbWl0ICVzLiIKK21zZ3N0ciAi0LjQt9Cy0LvQtdGH0LXQvdC40LUg0L7QsdC90L7QstC40LvQviDQs9C+0LvQvtCy0YMg0LLQsNGI0LXQuSDRgtC10LrRg9GJ0LXQuSDQstC10YLQutC4Llxu0L/QtdGA0LXQvNC+0YLQutCwINCy0LDRiNC10LPQviDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LBcbtGBINC60L7QvNC80LjRgtCwICVzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIkFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb21cbiIKKyIkIGdpdCBkaWZmICVzXG4iCisib3V0cHV0LCBydW5cbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ0byByZWNvdmVyLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC80L7RgtCw0YLRjCDQstC/0LXRgNGR0LQg0LjQt9C80LXQvdC10L3QuNGPINCyINCy0LDRiNC10Lwg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtS5cbtCf0L7RgdC70LUg0YLQvtCz0L4sINC60LDQuiDQstGLINGD0LHQtdC00LjRgtC10YHRjCwg0YfRgtC+INCy0Ysg0YHQvtGF0YDQsNC90LjQu9C4INCy0YHRkSDQvdC10L7QsdGF0L7QtNC40LzQvtC1INC40Lcg0LLRi9Cy0L7QtNCwXG4kIGdpdCBkaWZmICVzXG4sINC30LDQv9GD0YHRgtC40YLQtVxuJCBnaXQgcmVzZXQgLS1oYXJkXG7QtNC70Y8g0LLQvtGB0YHRgtCw0L3QvtCy0LvQtdC90LjRjyDQuNGB0YXQvtC00L3QvtCz0L4g0YHQvtGB0YLQvtGP0L3QuNGPLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODc5Cittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgItCd0LXQu9GM0LfRjyDRgdC70LjRgtGMINC90LXRgdC60L7Qu9GM0LrQviDQstC10YLQvtC6INCyINC/0YPRgdGC0L7QuSDRg9C60LDQt9Cw0YLQtdC70Ywg0L3QsCDQutC+0LzQvNC40YIuIgorCisjOiBidWlsdGluL3B1bGwuYzo4ODMKK21zZ2lkICJDYW5ub3QgcmViYXNlIG9udG8gbXVsdGlwbGUgYnJhbmNoZXMuIgorbXNnc3RyICLQndC10LLQvtC30LzQvtC20L3QviDQv9C10YDQtdC80LXRgdGC0LjRgtGMINC90LDQtCDQvdC10YHQutC+0LvRjNC60LjQvNC4INCy0LXRgtC60LDQvNC4LiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTUKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzzQvtC/0YbQuNC4Pl0gWzzRgNC10L/QvtC30LjRgtC+0YDQuNC5PiBbPNGB0L/QtdGG0LjRhNC40LrQsNGG0LjRjy3RgdGB0YvQu9C60Lg+4oCmXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjg2Cittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICLRg9C60LDQt9Cw0L3QviDRgdC+0LrRgNCw0YnQtdC90LjQtSB0YWcsINC90L4g0L3QtSDRg9C60LDQt9Cw0L3QsCDRgdCw0LzQsCA80LzQtdGC0LrQsD4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjk2Cittc2dpZCAiLS1kZWxldGUgb25seSBhY2NlcHRzIHBsYWluIHRhcmdldCByZWYgbmFtZXMiCittc2dzdHIgItC+0L/RhtC40Y8gLS1kZWxldGUg0L/RgNC40L3QuNC80LDQtdGCINGC0L7Qu9GM0LrQviDQv9GA0L7RgdGC0YvQtSDRhtC10LvQtdCy0YvQtSDQuNC80LXQvdCwINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQwCittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiXG7Qp9GC0L7QsdGLINCy0YvQsdGA0LDRgtGMINC70Y7QsdGD0Y4g0LjQtyDQvtC/0YbQuNC5INC90LAg0L/QvtGB0YLQvtGP0L3QvdC+0Lkg0L7RgdC90L7QstC1LCDRgdC80L7RgtGA0LjRgtC1IHB1c2guZGVmYXVsdCDQsiDCq2dpdCBoZWxwIGNvbmZpZ8K7LiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKK21zZ3N0ciAi0JjQvNGPINCy0YvRiNC10YHRgtC+0Y/RidC10Lkg0LLQtdGC0LrQuCDQuCDQstCw0YjQtdC5INGC0LXQutGD0YnQtdC5INCy0LXRgtC60Lgg0YDQsNC30LvQuNGH0LDRjtGC0YHRjy4g0KfRgtC+0LHRiyDQvtGC0L/RgNCw0LLQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINCyINCy0YvRiNC10YHRgtC+0Y/RidGD0Y4g0LLQtdGC0LrRgyDQvdCwINCy0L3QtdGI0L3QtdC8INGA0LXQv9C+0LfQuNGC0L7RgNC40LgsINC40YHQv9C+0LvRjNC30YPQudGC0LU6XG5cbiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG5cbtCn0YLQvtCx0Ysg0L7RgtC/0YDQsNCy0LjRgtGMINC40LfQvNC10L3QtdC90LjRjyDQsiDQstC10YLQutGDINGBINGC0LDQutC40Lwg0LbQtSDQuNC80LXQvdC10Lwg0L3QsCDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4LCDQuNGB0L/QvtC70YzQt9GD0LnRgtC1OlxuXG4gICAgZ2l0IHB1c2ggJXMgJXNcbiVzIgorCisjOiBidWlsdGluL3B1c2guYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC5cbiIKKyJUbyBwdXNoIHRoZSBoaXN0b3J5IGxlYWRpbmcgdG8gdGhlIGN1cnJlbnQgKGRldGFjaGVkIEhFQUQpXG4iCisic3RhdGUgbm93LCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDo8bmFtZS1vZi1yZW1vdGUtYnJhbmNoPlxuIgorbXNnc3RyICLQktGLINGB0LXQudGH0LDRgSDQvdC1INC90LDRhdC+0LTQuNGC0LXRgdGMINC90Lgg0L3QsCDQvtC00L3QvtC5INC40Lcg0LLQtdGC0L7Qui5cbtCn0YLQvtCx0Ysg0L7RgtC/0YDQsNCy0LjRgtGMINC40YHRgtC+0YDQuNGOLCDQstC10LTRg9GJ0YPRjiDQuiDRgtC10LrRg9GJ0LXQvNGDICjQvtGC0LTQtdC70LXQvdC90YvQuSBIRUFEKSDRgdC+0YHRgtC+0Y/QvdC40Y4sINC40YHQv9C+0LvRjNC30YPQudGC0LVcblxuICAgIGdpdCBwdXNoICVzIEhFQUQ6PNC40LzRjy3QstC90LXRiNC90LXQuS3QstC10YLQutC4PlxuIgorCisjOiBidWlsdGluL3B1c2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbm8gdXBzdHJlYW0gYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIGFuZCBzZXQgdGhlIHJlbW90ZSBhcyB1cHN0cmVhbSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIC0tc2V0LXVwc3RyZWFtICVzICVzXG4iCittc2dzdHIgItCi0LXQutGD0YnQsNGPINCy0LXRgtC60LAgJXMg0L3QtSDQuNC80LXQtdGCINCy0YvRiNC10YHRgtC+0Y/RidC10Lkg0LLQtdGC0LrQuC5cbtCn0YLQvtCx0Ysg0L7RgtC/0YDQsNCy0LjRgtGMINGC0LXQutGD0YnRg9GOINCy0LXRgtC60YMg0Lgg0YPRgdGC0LDQvdC+0LLQuNGC0Ywg0LLQvdC10YjQvdGO0Y4g0LLQtdGC0LrRgyDQutCw0Log0LLRi9GI0LXRgdGC0L7Rj9GJ0YPRjiDQtNC70Y8g0Y3RgtC+0Lkg0LLQtdGC0LrQuCwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtVxuXG4gICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgY3VycmVudCBicmFuY2ggJXMgaGFzIG11bHRpcGxlIHVwc3RyZWFtIGJyYW5jaGVzLCByZWZ1c2luZyB0byBwdXNoLiIKK21zZ3N0ciAi0JLQsNGI0LAg0YLQtdC60YPRidCw0Y8g0LLQtdGC0LrQsCAlcyDQuNC80LXQtdGCINC90LXRgdC60L7Qu9GM0LrQviDQstGL0YjQtdGB0YLQvtGP0YnQuNGFINCy0LXRgtC+0LosINC+0YLQutCw0Lcg0LIg0L7RgtC/0YDQsNCy0LrQtSDQuNC30LzQtdC90LXQvdC40LkuIgorCisjOiBidWlsdGluL3B1c2guYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAi0JLRiyDRgdC10LnRh9Cw0YEg0L7RgtC/0YDQsNCy0LvRj9C10YLQtSDQuNC30LzQtdC90LXQvdC40Y8g0L3QsCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IMKrJXPCuywg0LrQvtGC0L7RgNGL0Lkg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINCy0YvRiNC10YHRgtC+0Y/RidC40Lwg0LTQu9GPINCy0LDRiNC10Lkg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuCDCqyVzwrssINCx0LXQtyDRg9C60LDQt9Cw0L3QuNGPINGC0L7Qs9C+LCDRh9GC0L4g0L7RgtC/0YDQsNCy0LvRj9GC0Ywg0Lgg0LIg0LrQsNC60YPRjiDQstC90LXRiNC90Y7RjiDQstC10YLQutGDLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjA2Cittc2dpZCAiIgorInB1c2guZGVmYXVsdCBpcyB1bnNldDsgaXRzIGltcGxpY2l0IHZhbHVlIGhhcyBjaGFuZ2VkIGluXG4iCisiR2l0IDIuMCBmcm9tICdtYXRjaGluZycgdG8gJ3NpbXBsZScuIFRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlXG4iCisiYW5kIG1haW50YWluIHRoZSB0cmFkaXRpb25hbCBiZWhhdmlvciwgdXNlOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyJcbiIKKyJUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZSBhbmQgYWRvcHQgdGhlIG5ldyBiZWhhdmlvciBub3csIHVzZTpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IHNpbXBsZVxuIgorIlxuIgorIldoZW4gcHVzaC5kZWZhdWx0IGlzIHNldCB0byAnbWF0Y2hpbmcnLCBnaXQgd2lsbCBwdXNoIGxvY2FsIGJyYW5jaGVzXG4iCisidG8gdGhlIHJlbW90ZSBicmFuY2hlcyB0aGF0IGFscmVhZHkgZXhpc3Qgd2l0aCB0aGUgc2FtZSBuYW1lLlxuIgorIlxuIgorIlNpbmNlIEdpdCAyLjAsIEdpdCBkZWZhdWx0cyB0byB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgJ3NpbXBsZSdcbiIKKyJiZWhhdmlvciwgd2hpY2ggb25seSBwdXNoZXMgdGhlIGN1cnJlbnQgYnJhbmNoIHRvIHRoZSBjb3JyZXNwb25kaW5nXG4iCisicmVtb3RlIGJyYW5jaCB0aGF0ICdnaXQgcHVsbCcgdXNlcyB0byB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLlxuIgorIlxuIgorIlNlZSAnZ2l0IGhlbHAgY29uZmlnJyBhbmQgc2VhcmNoIGZvciAncHVzaC5kZWZhdWx0JyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi5cbiIKKyIodGhlICdzaW1wbGUnIG1vZGUgd2FzIGludHJvZHVjZWQgaW4gR2l0IDEuNy4xMS4gVXNlIHRoZSBzaW1pbGFyIG1vZGVcbiIKKyInY3VycmVudCcgaW5zdGVhZCBvZiAnc2ltcGxlJyBpZiB5b3Ugc29tZXRpbWVzIHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQpIgorbXNnc3RyICJwdXNoLmRlZmF1bHQg0L3QtSDRg9GB0YLQsNC90L7QstC70LXQvTsg0LXQs9C+INC90LXRj9Cy0L3QvtC1INC30L3QsNGH0LXQvdC40LUg0LHRi9C70L4g0LjQt9C80LXQvdC10L3QviDQsiBHaXQg0LLQtdGA0YHQuNC4IDIuMCDRgSDCq21hdGNoaW5nwrsg0L3QsCDCq3NpbXBsZcK7LiDQp9GC0L7QsdGLINC/0YDQtdC60YDQsNGC0LjRgtGMINCy0YvQstC+0LQg0Y3RgtC+0LPQviDRgdC+0L7QsdGJ0LXQvdC40Y8g0Lgg0YHQvtGF0YDQsNC90LjRgtGMINGB0YLQsNGA0L7QtSDQv9C+0LLQtdC00LXQvdC40LUsINC40YHQv9C+0LvRjNC30YPQudGC0LU6XG5cbiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcblxu0KfRgtC+0LHRiyDQv9GA0LXQutGA0LDRgtC40YLRjCDQstGL0LLQvtC0INGN0YLQvtCz0L4g0YHQvtC+0LHRidC10L3QuNGPINC4INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvdC+0LLQvtC1INC/0L7QstC10LTQtdC90LjQtSwg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtTpcblxuICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcblxu0JrQvtCz0LTQsCBwdXNoLmRlZmF1bHQg0YPRgdGC0LDQvdC+0LLQu9C10L3QviDQsiDCq21hdGNoaW5nwrssIGdpdCDQsdGD0LTQtdGCINC+0YLQv9GA0LDQstC70Y/RgtGMINC40LfQvNC10L3QtdC90LjRjyDQu9C+0LrQsNC70YzQvdGL0YUg0LLQtdGC0L7QuiDQsiDRgdGD0YnQtdGB0YLQstGD0Y7RidC40LUg0LLQvdC10YjQvdC40LUg0LLQtdGC0LrQuCDRgSDRgtCw0LrQuNC8INC20LUg0LjQvNC10L3QtdC8LlxuXG7QndCw0YfQuNC90LDRjyDRgSBHaXQg0LLQtdGA0YHQuNC4IDIuMCwg0L/QviDRg9C80L7Qu9GH0LDQvdC40Y4g0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINCx0L7Qu9C10LUg0LrQvtC90YHQtdGA0LLQsNGC0LjQstC90L7QtSDQv9C+0LLQtdC00LXQvdC40LUgwqtzaW1wbGXCuywg0LrQvtGC0L7RgNC+0LUg0L7RgtC/0YDQsNCy0LvRj9C10YIg0LjQt9C80LXQvdC10L3QuNGPINGC0LXQutGD0YnQtdC5INCy0LXRgtC60Lgg0LIg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnRg9GOINCy0L3QtdGI0L3RjtGOINCy0LXRgtC60YMsINC40Lcg0LrQvtGC0L7RgNC+0LkgwqtnaXQgcHVsbMK7INC30LDQsdC40YDQsNC10YIg0LjQt9C80LXQvdC10L3QuNGPLlxuXG7QodC80L7RgtGA0LjRgtC1IMKrZ2l0IGhlbHAgY29uZmlnwrsg0Lgg0LjRidC40YLQtSDCq3B1c2guZGVmYXVsdMK7INC00LvRjyDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4LlxuKNGA0LXQttC40LwgwqtzaW1wbGXCuyDQv9C+0Y/QstC40LvRgdGPINCyIEdpdCDQstC10YDRgdC40LggMS43LjExLiDQmNGB0L/QvtC70YzQt9GD0LnRgtC1INC/0L7RhdC+0LbQuNC5INGA0LXQttC40LwgwqtjdXJyZW50wrsg0LLQvNC10YHRgtC+IMKrc2ltcGxlwrssINC10YHQu9C4INCy0Ysg0LjQvdC+0LPQtNCwINC40YHQv9C+0LvRjNC30YPQtdGC0LUg0YHRgtCw0YDRi9C1INCy0LXRgNGB0LjQuCBHaXQpIgorCisjOiBidWlsdGluL3B1c2guYzoyNzMKK21zZ2lkICJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICLQktGLINC90LUg0YPQutCw0LfQsNC70Lgg0YHQv9C10YbQuNGE0LjQutCw0YbQuNGOINGB0YHRi9C70LrQuCDQtNC70Y8g0L7RgtC/0YDQsNCy0LrQuCwg0LAgcHVzaC5kZWZhdWx0INGD0LrQsNC30LDQvSDQutCw0LogXCJub3RoaW5nXCIuIgorCisjOiBidWlsdGluL3B1c2guYzoyODAKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNGPINCx0YvQu9C4INC+0YLQutC70L7QvdC10L3Riywg0YLQsNC6INC60LDQuiDQstC10YDRhdGD0YjQutCwINCy0LDRiNC10Lkg0YLQtdC60YPRidC10Lkg0LLQtdGC0LrQuFxu0L/QvtC30LDQtNC4INC10LUg0LLQvdC10YjQvdC10Lkg0YfQsNGB0YLQuC4g0JfQsNCx0LXRgNC40YLQtSDQuCDRgdC70LXQudGC0LUg0LLQvdC10YjQvdC40LUg0LjQt9C80LXQvdC10L3QuNGPIFxuKNC90LDQv9GA0LjQvNC10YAsINGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IHB1bGwg4oCmwrspINC/0LXRgNC10LQg0L/QvtCy0YLQvtGA0L3QvtC5INC/0L7Qv9GL0YLQutC+0Lkg0L7RgtC/0YDQsNCy0LrQuFxu0LjQt9C80LXQvdC10L3QuNC5Llxu0JTQu9GPINC00L7Qv9C+0LvQvdC40YLQtdC70YzQvdC+0Lkg0LjQvdGE0L7RgNC80LDRhtC40Lgg0YHQvNC+0YLRgNC40YLQtSDCq05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkc8K7XG7QsiDCq2dpdCBwdXNoIC0taGVscMK7LiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg2Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjRjyDQsdGL0LvQuCDQvtGC0LrQu9C+0L3QtdC90YssINGC0LDQuiDQutCw0Log0LLQtdGA0YXRg9GI0LrQsCDQvtGC0L/RgNCw0LLQu9GP0LXQvNC+0Lkg0LLQtdGC0LrQuFxu0L/QvtC30LDQtNC4INC10LUg0LLQvdC10YjQvdC10Lkg0YfQsNGB0YLQuC4g0J/QtdGA0LXQutC70Y7Rh9C40YLQtdGB0Ywg0L3QsCDQstC10YLQutGDINC4INC30LDQsdC10YDQuNGC0LUg0LLQvdC10YjQvdC40LVcbtC40LfQvNC10L3QtdC90LjRjyAo0L3QsNC/0YDQuNC80LXRgCwg0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgcHVsbCDigKbCuykg0L/QtdGA0LXQtCDQv9C+0LLRgtC+0YDQvdC+0LlcbtC/0L7Qv9GL0YLQutC+0Lkg0L7RgtC/0YDQsNCy0LrQuCDQuNC30LzQtdC90LXQvdC40LkuXG7QlNC70Y8g0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCDRgdC80L7RgtGA0LjRgtC1IMKrTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzwrtcbtCyIMKrZ2l0IHB1c2ggLS1oZWxwwrsuIgorCisjOiBidWlsdGluL3B1c2guYzoyOTIKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHJlbW90ZSBjb250YWlucyB3b3JrIHRoYXQgeW91IGRvXG4iCisibm90IGhhdmUgbG9jYWxseS4gVGhpcyBpcyB1c3VhbGx5IGNhdXNlZCBieSBhbm90aGVyIHJlcG9zaXRvcnkgcHVzaGluZ1xuIgorInRvIHRoZSBzYW1lIHJlZi4gWW91IG1heSB3YW50IHRvIGZpcnN0IGludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXNcbiIKKyIoZS5nLiwgJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjRjyDQsdGL0LvQuCDQvtGC0LrQu9C+0L3QtdC90YssINGC0LDQuiDQutCw0Log0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDRgdC+0LTQtdGA0LbQuNGCXG7QuNC30LzQtdC90LXQvdC40Y8sINC60L7RgtC+0YDRi9GFINGDINCy0LDRgSDQvdC10YIg0LIg0LLQsNGI0LXQvCDQu9C+0LrQsNC70YzQvdC+0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuC5cbtCe0LHRi9GH0L3Qviwg0Y3RgtC+INGB0LLRj9C30LDQvdC90L4g0YEg0YLQtdC8LCDRh9GC0L4g0LrRgtC+LdGC0L4g0YPQttC1INC+0YLQv9GA0LDQstC40Lsg0LjQt9C80LXQvdC10L3QuNGPINCyIFxu0YLQviDQttC1INC80LXRgdGC0L4uINCf0LXRgNC10LQg0L/QvtCy0YLQvtGA0L3QvtC5INC+0YLQv9GA0LDQstC60L7QuSDQstCw0YjQuNGFINC40LfQvNC10L3QtdC90LjQuSwg0LLQsNC8INC90YPQttC90L5cbtC30LDQsdGA0LDRgtGMINC4INGB0LvQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINC40Lcg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPINGB0LXQsdC1XG4o0L3QsNC/0YDQuNC80LXRgCwg0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgcHVsbCDigKbCuykuXG7QlNC70Y8g0LTQvtC/0L7Qu9C90LjRgtC10LvRjNC90L7QuSDQuNC90YTQvtGA0LzQsNGG0LjQuCDRgdC80L7RgtGA0LjRgtC1IMKrTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzwrtcbtCyIMKrZ2l0IHB1c2ggLS1oZWxwwrsuIgorCisjOiBidWlsdGluL3B1c2guYzoyOTkKK21zZ2lkICJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGFnIGFscmVhZHkgZXhpc3RzIGluIHRoZSByZW1vdGUuIgorbXNnc3RyICLQntCx0L3QvtCy0LvQtdC90LjRjyDQsdGL0LvQuCDQvtGC0LrQu9C+0L3QtdC90YssINGC0LDQuiDQutCw0Log0LzQtdGC0LrQsCDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIg0LLQviDQstC90LXRiNC90LXQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4LiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzAyCittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgItCS0Ysg0L3QtSDQvNC+0LbQtdGC0LUg0L7QsdC90L7QstC40YLRjCDQstC90LXRiNC90Y7RjiDRgdGB0YvQu9C60YMsINC60L7RgtC+0YDQsNGPINGD0LrQsNC30YvQstCw0LXRgiDQvdCwINC+0LHRitC10LrRgiwg0L3QtSDRj9Cy0LvRj9GO0YnQuNC50YHRjyDQutC+0LzQvNC40YLQvtC8INC40LvQuCDQvtCx0L3QvtCy0LjRgtGMINCy0L3QtdGI0L3RjtGOINGB0YHRi9C70LrRgyDRgtCw0LosINGH0YLQvtCx0Ysg0L7QvdCwINGD0LrQsNC30YvQstCw0LvQsCDQvdCwINC+0LHRitC10LrRgiwg0L3QtSDRj9Cy0LvRj9GO0YnQuNC50YHRjyDQutC+0LzQvNC40YLQvtC8LCDQsdC10Lcg0YPQutCw0LfQsNC90LjRjyDQvtC/0YbQuNC4IMKrLS1mb3JjZcK7LlxuIgorCisjOiBidWlsdGluL3B1c2guYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICLQntGC0L/RgNCw0LLQutCwINCyICVzXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcHVzaCBzb21lIHJlZnMgdG8gJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0L/RgNCw0LLQuNGC0Ywg0L3QtdC60L7RgtC+0YDRi9C1INGB0YHRi9C70LrQuCDQsiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcmVwb3NpdG9yeSAnJXMnIgorbXNnc3RyICLQv9C70L7RhdC+0Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NgorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlIHJlcG9zaXRvcnkgdXNpbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPG5hbWU+IDx1cmw+XG4iCisiXG4iCisiYW5kIHRoZW4gcHVzaCB1c2luZyB0aGUgcmVtb3RlIG5hbWVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbWU+XG4iCittc2dzdHIgItCd0LUg0L3QsNGB0YLRgNC+0LXQvdCwINGC0L7Rh9C60LAg0L3QsNC30L3QsNGH0LXQvdC40Y8g0LTQu9GPINC+0YLQv9GA0LDQstC60LguXG7Qm9C40LHQviDRg9C60LDQttC40YLQtSBVUkwg0YEg0L/QvtC80L7RidGM0Y4g0LrQvtC80LzQsNC90LTQvdC+0Lkg0YHRgtGA0L7QutC4LCDQu9C40LHQviDQvdCw0YHRgtGA0L7QudGC0LUg0LLQvdC10YjQvdC40Lkg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuSDRgSDQv9C+0LzQvtGJ0YzRjlxuXG4gICAgZ2l0IHJlbW90ZSBhZGQgPNC40LzRjz4gPNCw0LTRgNC10YE+XG5cbtCwINC30LDRgtC10Lwg0L7RgtC/0YDQsNCy0YzRgtC1INC40LfQvNC10L3QtdC90LjRjyDRgSDQv9C+0LzQvtGJ0YzRjiDQuNC80LXQvdC4INCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRj1xuXG4gICAgZ2l0IHB1c2ggPNC40LzRjz5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDExCittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCDQuCAtLXRhZ3Mg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxMgorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tYWxsINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LLQvNC10YHRgtC1INGB0L4g0YHQv9C10YbQuNGE0LjQutCw0YbQuNGP0LzQuCDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxNworbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3Ig0LggLS10YWdzINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+IgorCisjOiBidWlsdGluL3B1c2guYzo0MTgKK21zZ2lkICItLW1pcnJvciBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLW1pcnJvciDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCy0LzQtdGB0YLQtSDRgdC+INGB0L/QtdGG0LjRhNC40LrQsNGG0LjRj9C80Lgg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3B1c2guYzo0MjMKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwg0LggLS1taXJyb3Ig0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUzOQorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgItGA0LXQv9C+0LfQuNGC0L7RgNC40LkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MCBidWlsdGluL3NlbmQtcGFjay5jOjE2MQorbXNnaWQgInB1c2ggYWxsIHJlZnMiCittc2dzdHIgItC+0YLQv9GA0LDQstC40YLRjCDQstGB0LUg0YHRgdGL0LvQutC4IgorCisjOiBidWlsdGluL3B1c2guYzo1NDEgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjMKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgItGB0LTQtdC70LDRgtGMINC30LXRgNC60LDQu9C+INCy0YHQtdGFINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzCittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgItGD0LTQsNC70LjRgtGMINGB0YHRi9C70LrQuCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ0Cittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICLQvtGC0L/RgNCw0LLQuNGC0Ywg0LzQtdGC0LrQuCAo0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQstC80LXRgdGC0LUg0YEgLS1hbGwg0LjQu9C4IC0tbWlycm9yKSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ3IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY0Cittc2dpZCAiZm9yY2UgdXBkYXRlcyIKK21zZ3N0ciAi0L/RgNC40L3Rg9C00LjRgtC10LvRjNC90L7QtSDQvtCx0L3QvtCy0LvQtdC90LjQtSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAicmVmbmFtZT46PGV4cGVjdCIKK21zZ3N0ciAi0LjQvNGPLdGB0YHRi9C70LrQuD46PNC+0LbQuNC00LDQtdGC0YHRjyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc2Cittc2dpZCAicmVxdWlyZSBvbGQgdmFsdWUgb2YgcmVmIHRvIGJlIGF0IHRoaXMgdmFsdWUiCittc2dzdHIgItGC0YDQtdCx0L7QstCw0YLRjCwg0YfRgtC+0LHRiyDRgdGC0LDRgNC+0LUg0LfQvdCw0YfQtdC90LjQtSDRgdGB0YvQu9C60Lgg0LHRi9C70L4g0L7QttC40LTQsNC10LzRi9C8IgorCisjOiBidWlsdGluL3B1c2guYzo1NTMKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgItGD0L/RgNCw0LLQu9C10L3QuNC1INGA0LXQutGD0YDRgdC40LLQvdC+0Lkg0L7RgtC/0YDQsNCy0LrQvtC5INC/0L7QtNC80L7QtNGD0LvQtdC5IgorCisjOiBidWlsdGluL3B1c2guYzo1NTUgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjkKK21zZ2lkICJ1c2UgdGhpbiBwYWNrIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC90LrQuNC1INC/0LDQutC10YLRiyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2IGJ1aWx0aW4vcHVzaC5jOjU1NyBidWlsdGluL3NlbmQtcGFjay5jOjE1OAorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNTkKK21zZ2lkICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIKK21zZ3N0ciAi0L/Rg9GC0Ywg0Log0L/RgNC+0LPRgNCw0LzQvNC1INGD0L/QsNC60L7QstC60Lgg0L3QsCDRgdC10YDQstC10YDQtSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgItGD0YHRgtCw0L3QvtCy0LjRgtGMINCy0YvRiNC10YHRgtC+0Y/RidGD0Y4g0LLQtdGC0LrRgyDQtNC70Y8gZ2l0IHB1bGwvc3RhdHVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NjEKK21zZ2lkICJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIKK21zZ3N0ciAi0L/QvtGH0LjRgdGC0LjRgtGMINC70L7QutCw0LvRjNC90L4g0YPQtNCw0LvQtdC90L3Ri9C1INGB0YHRi9C70LrQuCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYzCittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgItC/0YDQvtC/0YPRgdGC0LjRgtGMINC/0LXRgNC10YXQstCw0YLRh9C40Log0L/QtdGA0LXQtC3QvtGC0L/RgNCw0LLQutC+0LkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAi0L7RgtC/0YDQsNCy0LjRgtGMINC/0YDQvtC/0YPRidC10L3QvdGL0LUsINC90L4g0L3Rg9C20L3Ri9C1INC80LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NyBidWlsdGluL3NlbmQtcGFjay5jOjE2NgorbXNnaWQgIkdQRyBzaWduIHRoZSBwdXNoIgorbXNnc3RyICLQv9C+0LTQv9C40YHQsNGC0Ywg0L7RgtC/0YDQsNCy0LrRgyDRgSDQv9C+0LzQvtGJ0YzRjiBHUEciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2OSBidWlsdGluL3NlbmQtcGFjay5jOjE3MAorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICLQt9Cw0L/RgNC+0YHQuNGC0Ywg0LLRi9C/0L7Qu9C90LXQvdC40LUg0LDRgtC+0LzQsNGA0L3QvtC5INGC0YDQsNC90LfQsNC60YbQuNC4INC90LAg0LLQvdC10YjQvdC10Lkg0YHRgtC+0YDQvtC90LUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3OQorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSDQvdC10YHQvtCy0LzQtdGB0YLQuNC80L4g0YEgIC0tYWxsLCAtLW1pcnJvciDQuCAtLXRhZ3MiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU4MQorbXNnaWQgIi0tZGVsZXRlIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aXRob3V0IGFueSByZWZzIgorbXNnc3RyICItLWRlbGV0ZSDQvdC1INC40LzQtdC10YIg0YHQvNGL0YHQu9CwINCx0LXQtyDRg9C60LDQt9Cw0L3QuNGPINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzozNworbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pIgorIiBbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSAiCisiWy0taW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PNC/0YDQtdGE0LjQutGBPikgWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0taW5kZXgtb3V0cHV0PTzRhNCw0LnQuz5dICgtLWVtcHR5IHwgPNGD0LrQsNC30LDRgtC10LvRjC3QtNC10YDQtdCy0LAtMT4gWzzRg9C60LDQt9Cw0YLQtdC70Ywt0LTQtdGA0LXQstCwLTI+IFs80YPQutCw0LfQsNGC0LXQu9GMLdC00LXRgNC10LLQsC0zPl1dKSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTAKK21zZ2lkICJ3cml0ZSByZXN1bHRpbmcgaW5kZXggdG8gPGZpbGU+IgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINGA0LXQt9GD0LvRjNGC0LjRgNGD0Y7RidC40Lkg0LjQvdC00LXQutGBINCyIDzRhNCw0LnQuz4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTEzCittc2dpZCAib25seSBlbXB0eSB0aGUgaW5kZXgiCittc2dzdHIgItC/0YDQvtGB0YLQviDQvtGH0LjRgdGC0LjRgtGMINC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTUKK21zZ2lkICJNZXJnaW5nIgorbXNnc3RyICLQodC70LjRj9C90LjQtSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTcKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICLQstGL0L/QvtC70L3QuNGC0Ywg0YHQu9C40Y/QvdC40LUg0LIg0LTQvtC/0L7Qu9C90LXQvdC40LUg0Log0YfRgtC10L3QuNGOIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExOQorbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAi0YLRgNC10YXRhdC+0LTQvtCy0L7QtSDRgdC70LjRj9C90LjQtSwg0LXRgdC70Lgg0L3QtSDRgtGA0LXQsdGD0LXRgtGB0Y8g0YHQu9C40Y/QvdC40LUg0L3QsCDRg9GA0L7QstC90LUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgItGC0YDQtdGF0YXQvtC00L7QstC+0LUg0YHQu9C40Y/QvdC40LUg0LIg0YHQu9GD0YfQsNC1INC/0YDQuNGB0YPRgtGB0YLQstC40Y8g0LTQvtCx0LDQstC70LXQvdC40Lkg0LjQu9C4INGD0LTQsNC70LXQvdC40Lkg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgItGC0L7QttC1LCDRh9GC0L4g0LggLW0sINC90L4g0L7RgtC80LXQvdGP0LXRgiDQuNC30LzQtdC90LXQvdC40Y8g0L3QtSDRgdC70LjRgtGL0YUg0LfQsNC/0LjRgdC10LkiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAiPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICI80L/QvtC00LrQsNGC0LDQu9C+0LM+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjUKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINC00LXRgNC10LLQviDQsiDQuNC90LTQtdC60YEg0LIgPNC/0L7QtNC60LDRgtCw0LvQvtCzPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAi0L7QsdC90L7QstC40YLRjCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDRgNC10LfRg9C70YzRgtCw0YLQvtC8INGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINC/0LXRgNC10LfQsNC/0LjRgdGMINGP0LLQvdC+INC40LPQvdC+0YDQuNGA0YPQtdC80YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICLQvdC1INC/0YDQvtCy0LXRgNGP0YLRjCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyDQv9C+0YHQu9C1INGB0LvQuNGP0L3QuNGPIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAi0L3QtSDQvtCx0L3QvtCy0LvRj9GC0Ywg0LjQvdC00LXQutGBINC40LvQuCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzcKK21zZ2lkICJza2lwIGFwcGx5aW5nIHNwYXJzZSBjaGVja291dCBmaWx0ZXIiCittc2dzdHIgItC/0YDQvtC/0YPRgdGC0LjRgtGMINC/0YDQuNC80LXQvdC10L3QuNC1INGE0LjQu9GM0YLRgNCwINGH0LDRgdGC0LjRh9C90L7Qs9C+INC/0LXRgNC10YXQvtC00LAiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM5Cittc2dpZCAiZGVidWcgdW5wYWNrLXRyZWVzIgorbXNnc3RyICLQvtGC0LvQsNC00LrQsCB1bnBhY2stdHJlZXMiCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLCqyVzwrsg0LTQu9GPIMKrJXPCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LTQvtC/0YPRgdGC0LjQvNC+0Lkg0LzQtdGC0LrQvtC5INC00LDRgtGLL9Cy0YDQtdC80LXQvdC4IgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU0OSBidWlsdGluL3JlZmxvZy5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC+0L/Rg9GB0YLQuNC80L7QuSDQvNC10YLQutC+0Lkg0LTQsNGC0Ysv0LLRgNC10LzQtdC90LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSAiCisiWy0tbWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIGFkZCBbLXQgPNCy0LXRgtC60LA+XSBbLW0gPNC80LDRgdGC0LXRgC3QstC10YLQutCwPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS1taXJyb3I9PGZldGNofHB1c2g+XSA80LjQvNGPPiA80LDQtNGA0LXRgT4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQgYnVpbHRpbi9yZW1vdGUuYzozMworbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA80YHRgtCw0YDQvtC1LdC90LDQt9Cy0LDQvdC40LU+IDzQvdC+0LLQvtC1LdC90LDQt9Cy0LDQvdC40LU+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1IGJ1aWx0aW4vcmVtb3RlLmM6MzgKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDzQuNC80Y8+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2IGJ1aWx0aW4vcmVtb3RlLmM6NDMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDzQuNC80Y8+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA80LLQtdGC0LrQsD4pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3Cittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSBzaG93IFstbl0gPNC40LzRjz4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTgKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPNC40LzRjz4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTkKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHVwZGF0ZSBbLXAgfCAtLXBydW5lXSBbKDxncm91cD4gfCA8cmVtb3RlPikuLi5dIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPNCz0YDRg9C/0L/QsD4gfCA80LjQvNGPLdCy0L3QtdGI0L3QtdCz0L4t0YDQtdC/0L7Qt9C40YLQvtGA0LjRjz4p4oCmXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDzQuNC80Y8+IDzQstC10YLQutCwPuKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMSBidWlsdGluL3JlbW90ZS5jOjY5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPNC40LzRjz4gPNC90L7QstGL0LktdXJsPiBbPNGB0YLQsNGA0YvQuS11cmw+XSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMiBidWlsdGluL3JlbW90ZS5jOjcwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDzQuNC80Y8+IDzQvdC+0LLRi9C5LXVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjMgYnVpbHRpbi9yZW1vdGUuYzo3MQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSA80LjQvNGPPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOAorbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgWzzQvtC/0YbQuNC4Pl0gPNC40LzRjz4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDzQuNC80Y8+IDzQstC10YLQutCwPuKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPNC40LzRjz4gPNCy0LXRgtC60LA+4oCmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU0Cittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFs80L7Qv9GG0LjQuD5dIDzQuNC80Y8+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU5Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzzQvtC/0YbQuNC4Pl0gPNC40LzRjz4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSB1cGRhdGUgWzzQvtC/0YbQuNC4Pl0gWzzQs9GA0YPQv9C/0LA+IHwgPNC40LzRjy3QstC90LXRiNC90LXQs9C+LdGA0LXQv9C+0LfQuNGC0L7RgNC40Y8+XeKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAi0J7QsdC90L7QstC70LXQvdC40LUgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAi0LrQu9GO0YcgLS1taXJyb3Ig0L3QtdCx0LXQt9C+0L/QsNGB0LXQvSDQuCDQvdC1INGA0LXQutC+0LzQtdC90LTRg9C10YLRgdGPINC6INC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGOO1xu0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDQstC80LXRgdGC0L4g0L3QtdCz0L4gLS1taXJyb3I9ZmV0Y2gg0LjQu9C4IC0tbWlycm9yPXB1c2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90YvQuSDQsNGA0LPRg9C80LXQvdGCINC00LvRjyBtaXJyb3I6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MworbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgItC40LfQstC70LXRh9GMINCy0L3QtdGI0L3QuNC1INCy0LXRgtC60LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAi0LjQvNC/0L7RgNGC0LjRgNC+0LLQsNGC0Ywg0LLRgdC1INC80LXRgtC60Lgg0Lgg0LDRgdGB0L7RhtC40LjRgNC+0LLQsNC90L3Ri9C1INC+0LHRitC10LrRgtGLINC/0YDQuCDQuNC30LLQu9C10YfQtdC90LjQuCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTgKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgItC40LvQuCDQvdC1INC40LfQstC70LXQutCw0YLRjCDQvNC10YLQutC4INCy0L7QvtCx0YnQtSAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjAKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICLQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvQtSDQstC10YLQutC4IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MQorbXNnaWQgIm1hc3RlciBicmFuY2giCittc2dzdHIgItC80LDRgdGC0LXRgCDQstC10YLQutCwIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MgorbXNnaWQgInB1c2h8ZmV0Y2giCittc2dzdHIgInB1c2h8ZmV0Y2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYzCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgItC90LDRgdGC0YDQvtC40YLRjCDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC60LDQuiDQt9C10YDQutCw0LvQviDQtNC70Y8g0L7RgtC/0YDQsNCy0LrQuCDQuNC70Lgg0LjQt9Cy0LvQtdGH0LXQvdC40Y8g0LjQt9C80LXQvdC10L3QuNC5IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE3NQorbXNnaWQgInNwZWNpZnlpbmcgYSBtYXN0ZXIgYnJhbmNoIG1ha2VzIG5vIHNlbnNlIHdpdGggLS1taXJyb3IiCittc2dzdHIgItGD0LrQsNC30LDQvdC40LUg0LzQsNGB0YLQtdGAINCy0LXRgtC60Lgg0L3QtSDQuNC80LXQtdGCINGB0LzRi9GB0LvQsCDRgSDQv9Cw0YDQsNC80LXRgtGA0L7QvCAtLW1pcnJvciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzcKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICLRg9C60LDQt9Cw0L3QuNC1INC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINCy0LXRgtC+0Log0LjQvNC10LXRgiDRgdC80YvRgdC7INGC0L7Qu9GM0LrQviDQv9GA0Lgg0LfQtdGA0LrQsNC70YzQvdC+0Lwg0LjQt9Cy0LvQtdGH0LXQvdC40LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTg3IGJ1aWx0aW4vcmVtb3RlLmM6NjM3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSAlcyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgItCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgJXMg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5MSBidWlsdGluL3JlbW90ZS5jOjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICLCqyVzwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00L7Qv9GD0YHRgtC40LzRi9C8INC40LzQtdC90LXQvCDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNGB0YLRgNC+0LjRgtGMINC80LDRgdGC0LXRgCDQstC10YLQutGDIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LjQt9Cy0LvQtdGH0Ywg0LrQsNGA0YLRgyDQtNC70Y8g0YHQv9C10YbQuNGE0LjQutCw0YbQuNC4INGB0YHRi9C70LrQuCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0MzYgYnVpbHRpbi9yZW1vdGUuYzo0NDQKK21zZ2lkICIobWF0Y2hpbmcpIgorbXNnc3RyICIo0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQsNGPKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDgKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAiKNGD0LTQsNC70LXQvdC90LDRjykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTg4IGJ1aWx0aW4vcmVtb3RlLmM6NTk0IGJ1aWx0aW4vcmVtb3RlLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyB0byAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC00L7QsdCw0LLQuNGC0Ywgwqslc8K7INC6IMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MzAgYnVpbHRpbi9yZW1vdGUuYzo3NjkgYnVpbHRpbi9yZW1vdGUuYzo4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICVzIgorbXNnc3RyICLQndC10YIg0YLQsNC60L7Qs9C+INCy0L3QtdGI0L3QtdCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LjQvNC10L3QvtCy0LDRgtGMINGB0LXQutGG0LjRjiDQutC+0L3RhNC40LPRg9GA0LDRhtC40Lgg0YEgwqslc8K7INC90LAgwqslc8K7IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY1MyBidWlsdGluL3JlbW90ZS5jOjgyMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIGNvbmZpZyBzZWN0aW9uICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0YHQtdC60YbQuNGOINGE0LDQudC70LAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICLQndC1INC+0LHQvdC+0LLQu9GP0Y4g0L3QtdGB0YLQsNC90LTQsNGA0YLQvdGD0Y4g0YHQv9C10YbQuNGE0LjQutCw0YbQuNGOINGB0YHRi9C70LrQuCDQtNC70Y8g0LjQt9Cy0LvQtdGH0LXQvdC40Y9cblx0JXNcblx00J/QvtC20LDQu9GD0LnRgdGC0LAsINC10YHQu9C4INGC0YDQtdCx0YPQtdGC0YHRjywg0L7QsdC90L7QstC40YLQtSDQutC+0L3RhNC40LPRg9GA0LDRhtC40Y4g0LLRgNGD0YfQvdGD0Y4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcyciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LTQvtCx0LDQstC40YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgJyVzJyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9GB0YLQsNC90L7QstC40YLRjCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzA3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtC30LTQsNGC0Ywgwqslc8K7IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwNworbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICLQn9GA0LjQvNC10YfQsNC90LjQtTog0J3QtdC60L7RgtC+0YDRi9C1INCy0LXRgtC60Lgg0LLQvdC1INC40LXRgNCw0YDRhdC40LggcmVmcy9yZW1vdGVzLyDQvdC1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ys7XG7Rh9GC0L7QsdGLINGD0LTQsNC70LjRgtGMINC40YUsINC40YHQv9C+0LvRjNC30YPQudGC0LU6IgorbXNnc3RyWzFdICLQn9GA0LjQvNC10YfQsNC90LjQtTog0J3QtdC60L7RgtC+0YDRi9C1INCy0LXRgtC60Lgg0LLQvdC1INC40LXRgNCw0YDRhdC40LggcmVmcy9yZW1vdGVzLyDQvdC1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ys7XG7Rh9GC0L7QsdGLINGD0LTQsNC70LjRgtGMINC40YUsINC40YHQv9C+0LvRjNC30YPQudGC0LU6IgorbXNnc3RyWzJdICLQn9GA0LjQvNC10YfQsNC90LjQtTog0J3QtdC60L7RgtC+0YDRi9C1INCy0LXRgtC60Lgg0LLQvdC1INC40LXRgNCw0YDRhdC40LggcmVmcy9yZW1vdGVzLyDQvdC1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ys7XG7Rh9GC0L7QsdGLINGD0LTQsNC70LjRgtGMINC40YUsINC40YHQv9C+0LvRjNC30YPQudGC0LU6IgorbXNnc3RyWzNdICLQn9GA0LjQvNC10YfQsNC90LjQtTog0J3QtdC60L7RgtC+0YDRi9C1INCy0LXRgtC60Lgg0LLQvdC1INC40LXRgNCw0YDRhdC40LggcmVmcy9yZW1vdGVzLyDQvdC1INCx0YPQtNGD0YIg0YPQtNCw0LvQtdC90Ys7XG7Rh9GC0L7QsdGLINGD0LTQsNC70LjRgtGMINC40YUsINC40YHQv9C+0LvRjNC30YPQudGC0LU6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiDQvdC+0LLQsNGPICjRgdC70LXQtNGD0Y7RidC10LUg0LjQt9Cy0LvQtdGH0LXQvdC40LUg0YHQvtGF0YDQsNC90LjRgiDQtdC1INCyIHJlbW90ZXMvJXMpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyNQorbXNnaWQgIiB0cmFja2VkIgorbXNnc3RyICIg0L7RgtGB0LvQtdC20LjQstCw0LXRgtGB0Y8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI3Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiDQvdC10LTQtdC50YHRgtCy0LjRgtC10LvRjNC90LAgKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcmVtb3RlIHBydW5lwrssINGH0YLQvtCx0Ysg0YPQtNCw0LvQuNGC0YwpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyOQorbXNnaWQgIiA/Pz8iCittc2dzdHIgIiA/Pz8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTcwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgYnJhbmNoLiVzLm1lcmdlOyBjYW5ub3QgcmViYXNlIG9udG8gPiAxIGJyYW5jaCIKK21zZ3N0ciAi0L3QtdC/0YDQsNCy0LjQu9GM0L3Ri9C5INC/0LDRgNCw0LzQtdGC0YAg0LrQvtC90YTQuNCz0YPRgNCw0YbQuNC4IGJyYW5jaC4lcy5tZXJnZTsg0L3QtdCy0L7Qt9C80L7QttC90L4g0L/QtdGA0LXQvNC10YHRgtC40YLRjCDQsdC+0LvQtdC1INGH0LXQvCDQvdCw0LQgMSDQstC10YLQutC+0LkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgItCx0YPQtNC10YIg0L/QtdGA0LXQvNC10YnQtdC90LAg0L3QsNC0INCy0L3QtdGI0L3QtdC5INCy0LXRgtC60L7QuSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiINCx0YPQtNC10YIg0YHQu9C40YLQsCDRgSDQstC90LXRiNC90LXQuSDQstC10YLQutC+0LkgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgxCittc2dpZCAiICAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAgINC4INGBINCy0L3QtdGI0L3QtdC5INCy0LXRgtC60L7QuSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICLQsdGD0LTQtdGCINGB0LvQuNGC0LAg0YEg0LLQvdC10YjQvdC10Lkg0LLQtdGC0LrQvtC5ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4NAorbXNnaWQgIiAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAg0Lgg0YEg0LLQvdC10YjQvdC10Lkg0LLQtdGC0LrQvtC5IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzAKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgItGB0L7Qt9C00LDQvdCwIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzMKK21zZ2lkICJkZWxldGUiCittc2dzdHIgItGD0LTQsNC70LXQvdCwIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzcKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICLRg9C20LUg0LDQutGC0YPQsNC70YzQvdCwIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDAKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICLQstC+0LfQvNC+0LbQvdCwINC/0LXRgNC10LzQvtGC0LrQsCDQstC/0LXRgNC10LQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MworbXNnaWQgImxvY2FsIG91dCBvZiBkYXRlIgorbXNnc3RyICLQu9C+0LrQsNC70YzQvdCw0Y8g0LLQtdGC0LrQsCDRg9GB0YLQsNGA0LXQu9CwIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMg0LHRg9C00LXRgiDQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviDQvtGC0L/RgNCw0LLQu9C10L3QsCDQsiAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBwdXNoZXMgdG8gJS0qcyAoJXMpIgorbXNnc3RyICIgICAgJS0qcyDQsdGD0LTQtdGCINC+0YLQv9GA0LDQstC70LXQvdCwINCyICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMg0LHRg9C00LXRgiDQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QviDQvtGC0L/RgNCw0LLQu9C10L3QsCDQsiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMg0LHRg9C00LXRgiDQvtGC0L/RgNCw0LLQu9C10L3QsCDQsiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTI4Cittc2dpZCAiZG8gbm90IHF1ZXJ5IHJlbW90ZXMiCittc2dzdHIgItC90LUg0L7Qv9GA0LDRiNC40LLQsNGC0Ywg0LLQvdC10YjQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiogcmVtb3RlICVzIgorbXNnc3RyICIqINCy0L3QtdGI0L3QuNC5INGA0LXQv9C+0LfQuNGC0L7RgNC40LkgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAgVVJMINC00LvRjyDQuNC30LLQu9C10YfQtdC90LjRjzogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NyBidWlsdGluL3JlbW90ZS5jOjEzMDgKK21zZ2lkICIobm8gVVJMKSIKK21zZ3N0ciAiKNC90LXRgiBVUkwpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjYgYnVpbHRpbi9yZW1vdGUuYzoxMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiICBVUkwg0LTQu9GPINC+0YLQv9GA0LDQstC60Lg6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzAgYnVpbHRpbi9yZW1vdGUuYzoxMTcyIGJ1aWx0aW4vcmVtb3RlLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBIRUFEINCy0LXRgtC60LA6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIgIEhFQUQg0LLQtdGC0LrQsCAoSEVBRCDQstC90LXRiNC90LXQs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8g0L3QtdC+0LTQvdC+0LfQvdCw0YfQvdGL0LksINC80L7QttC10YIg0LHRi9GC0Ywg0L7QtNC90LjQvCDQuNC3KTpcbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUmVtb3RlIGJyYW5jaDolcyIKK21zZ2lkX3BsdXJhbCAiICBSZW1vdGUgYnJhbmNoZXM6JXMiCittc2dzdHJbMF0gIiAgICDQktC90LXRiNC90Y/RjyDQstC10YLQutCwOiVzIgorbXNnc3RyWzFdICIgICAg0JLQvdC10YjQvdC40LUg0LLQtdGC0LrQuDolcyIKK21zZ3N0clsyXSAiICAgINCS0L3QtdGI0L3QuNC1INCy0LXRgtC60Lg6JXMiCittc2dzdHJbM10gIiAgICDQktC90LXRiNC90LjQtSDQstC10YLQutC4OiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTEgYnVpbHRpbi9yZW1vdGUuYzoxMjE4Cittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKNGB0YLQsNGC0YPRgSDQvdC1INC30LDQv9GA0L7RiNC10L0pIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDAKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICDQm9C+0LrQsNC70YzQvdCw0Y8g0LLQtdGC0LrQsCwg0L3QsNGB0YLRgNC+0LXQvdC90LDRjyDQtNC70Y8gwqtnaXQgcHVsbMK7OiIKK21zZ3N0clsxXSAiICDQm9C+0LrQsNC70YzQvdGL0LUg0LLQtdGC0LrQuCwg0L3QsNGB0YLRgNC+0LXQvdC90YvQtSDQtNC70Y8gwqtnaXQgcHVsbMK7OiIKK21zZ3N0clsyXSAiICDQm9C+0LrQsNC70YzQvdGL0LUg0LLQtdGC0LrQuCwg0L3QsNGB0YLRgNC+0LXQvdC90YvQtSDQtNC70Y8gwqtnaXQgcHVsbMK7OiIKK21zZ3N0clszXSAiICDQm9C+0LrQsNC70YzQvdGL0LUg0LLQtdGC0LrQuCwg0L3QsNGB0YLRgNC+0LXQvdC90YvQtSDQtNC70Y8gwqtnaXQgcHVsbMK7OiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjA4Cittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiINCb0L7QutCw0LvRjNC90YvQtSDRgdGB0YvQu9C60LgsINC30LXRgNC60LDQu9C40YDRg9C10LzRi9C1INGBINC/0L7QvNC+0YnRjNGOIMKrZ2l0IHB1c2jCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgTG9jYWwgcmVmIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnc3RyWzBdICIgINCb0L7QutCw0LvRjNC90LDRjyDRgdGB0YvQu9C60LAsINC90LDRgdGC0YDQvtC10L3QvdCw0Y8g0LTQu9GPIMKrZ2l0IHB1c2jCuyVzOiIKK21zZ3N0clsxXSAiICDQm9C+0LrQsNC70YzQvdGL0LUg0YHRgdGL0LvQutC4LCDQvdCw0YHRgtGA0L7QtdC90L3Ri9C1INC00LvRjyDCq2dpdCBwdXNowrslczoiCittc2dzdHJbMl0gIiAg0JvQvtC60LDQu9GM0L3Ri9C1INGB0YHRi9C70LrQuCwg0L3QsNGB0YLRgNC+0LXQvdC90YvQtSDQtNC70Y8gwqtnaXQgcHVzaMK7JXM6IgorbXNnc3RyWzNdICIgINCb0L7QutCw0LvRjNC90YvQtSDRgdGB0YvQu9C60LgsINC90LDRgdGC0YDQvtC10L3QvdGL0LUg0LTQu9GPIMKrZ2l0IHB1c2jCuyVzOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM2Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICLRg9GB0YLQsNC90L7QstC40YLRjCByZWZzL3JlbW90ZXMvPNC40LzRjz4vSEVBRCDQsiDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC4INC+0YIg0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzgKK21zZ2lkICJkZWxldGUgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCByZWZzL3JlbW90ZXMvPNC40LzRjz4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzCittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQvtC/0YDQtdC00LXQu9C40YLRjCDQstC90LXRiNC90LjQuSBIRUFEIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTUKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAi0J3QtdGB0LrQvtC70YzQutC+INCy0L3QtdGI0L3QuNGFIEhFQUQg0LLQtdGC0L7Qui4g0KPQutCw0LbQuNGC0LUg0Y/QstC90L4g0L7QtNC90YMg0LjQtyDQvdC40YU6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRg9C00LDQu9C40YLRjCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgItCd0LXQv9GA0LDQstC40LvRjNC90LDRjyDRgdGB0YvQu9C60LA6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwICVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDRgdGC0YDQvtC40YLRjCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyB3aWxsIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyDQsdGD0LTQtdGCINCy0LjRgdGP0YnQtdC5INCy0LXRgtC60L7QuSEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyDRgdGC0LDQu9CwINCy0LjRgdGP0YnQtdC5INCy0LXRgtC60L7QuSEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVVJMOiAlcyIKK21zZ3N0ciAiVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFvQsdGD0LTQtdGCINGD0LTQsNC70LXQvdCwXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIgKiBb0YPQtNCw0LvQtdC90LBdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNjkKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICLQv9C+0YfQuNGB0YLQuNGC0Ywg0LLQvdC10YjQvdC40LUg0YDQtdC/0L7Qt9C40YLQvtGA0LjQuCDQv9C+0YHQu9C1INC40LfQstC70LXRh9C10L3QuNGPIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MzUgYnVpbHRpbi9yZW1vdGUuYzoxNTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgItCd0LXRgiDRgtCw0LrQvtCz0L4g0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDU1Cittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAi0LTQvtCx0LDQstC40YLRjCDQstC10YLQutGDIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NjIKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICLQvdC1INGD0LrQsNC30LDQvSDQstC90LXRiNC90LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODQKK21zZ2lkICJtYW5pcHVsYXRlIHB1c2ggVVJMcyIKK21zZ3N0ciAi0YPQv9GA0LDQstC70LXQvdC40LUgVVJMINC+0YLQv9GA0LDQstC60LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4NgorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0YwgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODgKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0YwgVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTUKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tYWRkINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBIC0tZGVsZXRlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICLQndC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YjQsNCx0LvQvtC9INGB0YLQsNGA0L7Qs9C+IFVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgItCd0LUg0L3QsNC50LTQtdC90Ysg0YHQvtCy0L/QsNC00LXQvdC40Y8gVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQ1Cittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICLQndC10LvRjNC30Y8g0YPQtNCw0LvQuNGC0Ywg0LLRgdC1IFVSTCDQvdC1LdC+0YLQv9GA0LDQstC60LgiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1OQorbXNnaWQgImJlIHZlcmJvc2U7IG11c3QgYmUgcGxhY2VkIGJlZm9yZSBhIHN1YmNvbW1hbmQiCittc2dzdHIgItCx0YvRgtGMINC80L3QvtCz0L7RgdC70L7QstC90LXQtTsg0LTQvtC70LbQvdC+INGB0YLQvtGP0YLRjCDQv9C10YDQtdC0INC/0L7QtNC60L7QvNCw0L3QtNC+0LkiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTcKK21zZ2lkICJnaXQgcmVwYWNrIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcmVwYWNrIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE1OQorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICLRg9C/0LDQutC+0LLQsNGC0Ywg0LLRgdGRINCyINC+0LTQuNC9INC/0LDQutC10YIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTYxCittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAi0YLQvtC20LUsINGH0YLQviDQuCAtYSwg0L3QviDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QviDQvtGC0LHRgNC+0YHQuNGC0Ywg0L3QtdC00L7RgdGC0LjQttC40LzRi9C1INC+0LHRitC10LrRgtGLIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2NAorbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0LUg0LvQuNGI0L3QuNC1INC/0LDQutC10YLRiyDQuCDQt9Cw0L/Rg9GB0YLQuNGC0LUgZ2l0LXBydW5lLXBhY2tlZCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjYKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2UtZGVsdGEgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0YLRjCDQvtC/0YbQuNGOIC0tbm8tcmV1c2UtZGVsdGEg0LIgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjgKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgItC/0LXRgNC10LTQsNGC0Ywg0L7Qv9GG0LjRjiAtLW5vLXJldXNlLW9iamVjdCDQsiBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3MAorbXNnaWQgImRvIG5vdCBydW4gZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKK21zZ3N0ciAi0L3QtSDQt9Cw0L/Rg9GB0LrQsNGC0YwgZ2l0LXVwZGF0ZS1zZXJ2ZXItaW5mbyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzMKK21zZ2lkICJwYXNzIC0tbG9jYWwgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0YLRjCDQvtC/0YbQuNGOIC0tbG9jYWwg0LIgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzUKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgItC30LDQv9C40YHRjCDQuNC90LTQtdC60YHQsCDQsiDQsdC40YLQvtCy0YvRhSDQutCw0YDRgtCw0YUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc2Cittc2dpZCAiYXBwcm94aWRhdGUiCittc2dzdHIgItC/0YDQuNC80LXRgNC90LDRjy3QtNCw0YLQsCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzcKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICLRgSDQvtC/0YbQuNC10LkgLUEsINC90LUg0L7RgtCx0YDQsNGB0YvQstCw0YLRjCDQvtCx0YrQtdC60YLRiyDRgdGC0LDRgNC10LUsINGH0LXQvCDRg9C60LDQt9Cw0L3QviIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzkKK21zZ2lkICJzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCBmb3IgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgItGA0LDQt9C80LXRgCDQvtC60L3QsCwg0LjRgdC/0L7Qu9GM0LfRg9C10LzRi9C5INC00LvRjyDQutC+0LzQv9GA0LXRgdGB0LjQuCDQtNC10LvRjNGCIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4MCBidWlsdGluL3JlcGFjay5jOjE4NAorbXNnaWQgImJ5dGVzIgorbXNnc3RyICLQutC+0LvQuNGH0LXRgdGC0LLQvi3QsdCw0LnRgiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODEKK21zZ2lkICJzYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGxpbWl0IG1lbW9yeSBzaXplIGluc3RlYWQgb2YgZW50cmllcyBjb3VudCIKK21zZ3N0ciAi0YLQvtC20LUsINGH0YLQviDQuCDQstGL0YjQtSwg0L3QviDQvtCz0YDQsNC90LjRh9C40YLRjCDRgNCw0LfQvNC10YAg0L/QsNC80Y/RgtC4LCDQsCDQvdC1INC60L7Qu9C40YfQtdGB0YLQstC+INC30LDQv9C40YHQtdC5IgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4MworbXNnaWQgImxpbWl0cyB0aGUgbWF4aW11bSBkZWx0YSBkZXB0aCIKK21zZ3N0ciAi0L7Qs9GA0LDQvdC40YfQtdC90LjQtSDQvdCwINC80LDQutGB0LjQvNCw0LvRjNC90YPRjiDQs9C70YPQsdC40L3RgyDQtNC10LvRjNGCIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4NQorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICLQvNCw0LrRgdC40LzQsNC70YzQvdGL0Lkg0YDQsNC30LzQtdGAINC60LDQttC00L7Qs9C+INC40Lcg0YTQsNC50LvQvtCyINC/0LDQutC10YLQsCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODcKK21zZ2lkICJyZXBhY2sgb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgd2l0aCAua2VlcCIKK21zZ3N0ciAi0L/QtdGA0LXRg9C/0LDQutC+0LLQsNGC0Ywg0L7QsdGK0LXQutGC0Ysg0LIg0L/QsNC60LXRgtGLLCDQv9C+0LzQtdGH0LXQvdC90YvQtSDRhNCw0LnQu9C+0LwgLmtlZXAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nICclcycgZmFpbGVkIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMIMKrJXPCuyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTkKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPNC+0LHRitC10LrRgj4gPNC30LDQvNC10L3QsD4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIwCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDzQvtCx0YrQtdC60YI+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPNC60L7QvNC80LjRgj4gWzzRgNC+0LTQuNGC0LXQu9GMPuKApl0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIyCittc2dpZCAiZ2l0IHJlcGxhY2UgLWQgPG9iamVjdD4uLi4iCittc2dzdHIgImdpdCByZXBsYWNlIC1kIDzQvtCx0YrQtdC60YI+4oCmIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMworbXNnaWQgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8cGF0dGVybj5dXSIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTzRhNC+0YDQvNCw0YI+XSBbLWwgWzzRiNCw0LHQu9C+0L0+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNSBidWlsdGluL3JlcGxhY2UuYzozNjMgYnVpbHRpbi9yZXBsYWNlLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICLQndC10LTQvtC/0YPRgdGC0LjQvNC+0LUg0LjQvNGPINC+0LHRitC10LrRgtCwOiDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1NQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgItC/0LvQvtGF0LDRjyDQvNC10YLQutCwINGB0LvQuNGP0L3QuNGPINCyINC60L7QvNC80LjRgtC1IMKrJXPCuyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzU3CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAi0L/QvtCy0YDQtdC20LTQtdC90L3QsNGPINC80LXRgtC60LAg0YHQu9C40Y/QvdC40Y8g0LIg0LrQvtC80LzQuNGC0LUgwqslc8K7IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAi0L7RgNC40LPQuNC90LDQu9GM0L3Ri9C5INC60L7QvNC80LjRgiDCqyVzwrsg0YHQvtC00LXRgNC20LjRgiDQvNC10YLQutGDINGB0LvQuNGP0L3QuNGPIMKrJXPCuywg0LrQvtGC0L7RgNCw0Y8g0LHRi9C70LAg0L7RgtCx0YDQvtGI0LXQvdCwOyDQuNGB0L/QvtC70YzQt9GD0LnRgtC1IC0tZWRpdCDQstC80LXRgdGC0L4gLS1ncmFmdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgInRoZSBvcmlnaW5hbCBjb21taXQgJyVzJyBoYXMgYSBncGcgc2lnbmF0dXJlLiIKK21zZ3N0ciAi0L7RgNC40LPQuNC90LDQu9GM0L3Ri9C5INC60L7QvNC80LjRgiDCqyVzwrsg0YHQvtC00LXRgNC20LjRgiDQv9C+0LTQv9C40YHRjCBncGcuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDIKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAi0L/QvtC00L/QuNGB0Ywg0LHRg9C00LXRgiDRg9C00LDQu9C10L3QsCDQsiDQt9Cw0LzQtdC90LXQvdC90L7QvCDQutC+0LzQvNC40YLQtSEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC30LDQvNC10L3RgyDQtNC70Y8g0LrQvtC80LzQuNGC0LA6IMKrJXPCuyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMyCittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0L/QuNGB0L7QuiDQt9Cw0LzQtdC90Y/QtdC80YvRhSDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzMworbXNnaWQgImRlbGV0ZSByZXBsYWNlIHJlZnMiCittc2dzdHIgItGD0LTQsNC70LXQvdC40LUg0LfQsNC80LXQvdGP0LXQvNGL0YUg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzQKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAi0LjQt9C80LXQvdC10L3QuNC1INGB0YPRidC10YHRgtCy0YPRjtGJ0LXQs9C+INC+0LHRitC10LrRgtCwIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzUKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICLQuNC30LzQtdC90LXQvdC40LUg0YDQvtC00LjRgtC10LvRjyDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM2Cittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAi0LfQsNC80LXQvdCwINGB0YHRi9C70LrQuCwg0LXRgdC70Lgg0L7QvdCwINGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzcKK21zZ2lkICJkbyBub3QgcHJldHR5LXByaW50IGNvbnRlbnRzIGZvciAtLWVkaXQiCittc2dzdHIgItC90LUg0LTQtdC70LDRgtGMINGB0YLRgNGD0LrRgtGD0YDQuNGA0L7QstCw0L3QvdGL0Lkg0LLRi9Cy0L7QtCDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INC00LvRjyAtLWVkaXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzOAorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGN0YLQvtGCINGE0L7RgNC80LDRgiIKKworIzogYnVpbHRpbi9yZXJlcmUuYzoxMgorbXNnaWQgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDxwYXRoPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCittc2dzdHIgImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDzQv9GD0YLRjD7igKYgfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjU3Cittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgItC30LDQv9C40YHQsNGC0Ywg0YfQuNGB0YLRi9C1INGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LvQuNC60YLQvtCyINCyINC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi9yZXNldC5jOjI2Cittc2dpZCAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPNC60L7QvNC80LjRgj5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjcKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSA8dHJlZS1pc2g+IFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gPNGD0LrQsNC30LDRgtC10LvRjC3QtNC10YDQtdCy0LA+IFstLV0gPNC/0YPRgtC4PuKApiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4Cittc2dpZCAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxwYXRocz4uLi5dIgorbXNnc3RyICJnaXQgcmVzZXQgLS1wYXRjaCBbPNGD0LrQsNC30LDRgtC10LvRjC3QtNC10YDQtdCy0LA+XSBbLS1dIFs80L/Rg9GC0Lg+4oCmXSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAibWl4ZWQiCittc2dzdHIgItGB0LzQtdGI0LDQvdC90YvQuSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAic29mdCIKK21zZ3N0ciAi0LzRj9Cz0LrQuNC5IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJoYXJkIgorbXNnc3RyICLQttC10YHRgtC60LjQuSIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAibWVyZ2UiCittc2dzdHIgItGB0LvQuNGP0L3QuNC10LwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgImtlZXAiCittc2dzdHIgItC+0YHRgtCw0LLQu9C10L3QuNC10LwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo3NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIEhFQUQuIgorbXNnc3RyICLQoyDQstCw0YEg0L3QtdGCINCy0LXRgNC90L7Qs9C+IEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzYKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC90LDQudGC0Lgg0LTQtdGA0LXQstC+INGDIEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDQtNC10YDQtdCy0L4g0YMgJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEINGB0LXQudGH0LDRgSDQvdCwICVzIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyBhICVzIHJlc2V0IGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZS4iCittc2dzdHIgItCd0LXQu9GM0LfRjyDQstGL0L/QvtC70L3QuNGC0Ywg0YHQsdGA0L7RgSDQsiDRgNC10LbQuNC80LUgwqslc8K7INCy0L4g0LLRgNC10LzRjyDRgdC70LjRj9C90LjRjy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNzYKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICLRgtC40YXQuNC5INGA0LXQttC40LwsINCy0YvQstC+0LTQuNGC0Ywg0YLQvtC70YzQutC+INC+0YjQuNCx0LrQuCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3OAorbXNnaWQgInJlc2V0IEhFQUQgYW5kIGluZGV4IgorbXNnc3RyICLRgdCx0YDQvtGB0LjRgtGMIEhFQUQg0Lgg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjc5Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICLRgdCx0YDQvtGB0LjRgtGMINGC0L7Qu9GM0LrQviBIRUFEIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjgxIGJ1aWx0aW4vcmVzZXQuYzoyODMKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICLRgdCx0YDQvtGB0LjRgtGMIEhFQUQsINC40L3QtNC10LrRgSDQuCDRgNCw0LHQvtGH0LjQuSDQutCw0YLQsNC70L7QsyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4NQorbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAi0YHQsdGA0L7RgdC40YLRjCBIRUFELCDQvdC+INC+0YHRgtCw0LLQuNGC0Ywg0LvQvtC60LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4OAorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINGC0L7Qu9GM0LrQviDRhNCw0LrRgiDRgtC+0LPQviwg0YfRgtC+INGD0LTQsNC70LXQvdC90YvQtSDQv9GD0YLQuCDQsdGD0LTRg9GCINC00L7QsdCw0LLQu9C10L3RiyDQv9C+0LfQttC1IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YDQsNGB0L/QvtC30L3QsNGC0Ywgwqslc8K7INC60LDQuiDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Rg9GOINGA0LXQtNCw0LrRhtC40Y4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgNCw0YHQv9C+0LfQvdCw0YLRjCDCqyVzwrsg0LrQsNC6INC00LXQudGB0YLQstC40YLQtdC70YzQvdC+0LUg0LTQtdGA0LXQstC+LiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMyMgorbXNnaWQgIi0tcGF0Y2ggaXMgaW5jb21wYXRpYmxlIHdpdGggLS17aGFyZCxtaXhlZCxzb2Z0fSIKK21zZ3N0ciAiLS1wYXRjaCDQvdC10LvRjNC30Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAtLXtoYXJkLG1peGVkLHNvZnR9IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMxCittc2dpZCAiLS1taXhlZCB3aXRoIHBhdGhzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnZ2l0IHJlc2V0IC0tIDxwYXRocz4nIGluc3RlYWQuIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQtSDQvtC/0YbQuNC4IC0tbWl4ZWQg0YEg0L/Rg9GC0Y/QvNC4INGD0YHRgtCw0YDQtdC70L47INC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtnaXQgcmVzZXQgLS0gPNC/0YPRgtC4PsK7IGluc3RlYWQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkbyAlcyByZXNldCB3aXRoIHBhdGhzLiIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINCy0YvQv9C+0LvQvdC40YLRjCDRgdCx0YDQvtGBINCyINGA0LXQttC40LzQtSDCqyVzwrsg0LLQvNC10YHRgtC1INGBINGD0LrQsNC30LDQvdC40LXQvCDQv9GD0YLQuC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgItGB0LHRgNC+0YEgwqslc8K7INGA0LDQt9GA0LXRiNC10L0g0YLQvtC70YzQutC+INGBINCz0L7Qu9GL0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdC8IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQ3Cittc2dpZCAiLU4gY2FuIG9ubHkgYmUgdXNlZCB3aXRoIC0tbWl4ZWQiCittc2dzdHIgIi1OINC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINCy0LzQtdGB0YLQtSDRgSAtLW1peGVkIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzY0Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgItCd0LXQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINC/0L7RgdC70LUg0YHQsdGA0L7RgdCwOiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdCx0YDQvtGB0LjRgtGMINGE0LDQudC7INC40L3QtNC10LrRgdCwINC90LAg0YDQtdC00LDQutGG0LjRjiDCqyVzwrsuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzc0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQt9Cw0L/QuNGB0LDRgtGMINC90L7QstGL0Lkg0YTQsNC50Lsg0LjQvdC00LXQutGB0LAuIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6MzU0Cittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJyZXYtbGlzdCDQvdC1INC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDQvtGC0L7QsdGA0LDQttC10L3QuNC1INC30LDQvNC10YLQvtC6IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2MQorbXNnaWQgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXSIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs80L7Qv9GG0LjQuD5dIC0tIFs80LDRgNCz0YPQvNC10L3RgtGLPuKApl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzY2Cittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICLQv9C10YDQtdC00LDQstCw0YLRjCDQtNCw0LvQtdC1IMKrLS3CuyDQutCw0Log0LDRgNCz0YPQvNC10L3RgiIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzozNjgKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgItC+0YHRgtCw0L3QvtCy0LjRgtGMINGA0LDQt9Cx0L7RgCDQv9C+0YHQu9C1INC/0LXRgNCy0L7Qs9C+INCw0YDQs9GD0LzQtdC90YLQsCDQvdC1INGP0LLQu9GP0Y7RidC10LPQvtGB0Y8g0L7Qv9GG0LjQtdC5IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM3MQorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgItCy0YvQstC+0LTQuNGC0Ywg0LDRgNCz0YPQvNC10L3RgtGLINCyINC00LvQuNC90L3QvtC8INGE0L7RgNC80LDRgtC1IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjUwMgorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs80L7Qv9GG0LjQuD5dIC0tIFs80LDRgNCz0YPQvNC10L3RgtGLPuKApl1cbiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzzQsNGA0LPRg9C80LXQvdGCPuKApl1cbiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs80L7Qv9GG0LjQuD5dIFs80LDRgNCz0YPQvNC10L3Rgj7igKZdXG5cbtCX0LDQv9GD0YHRgtC40YLQtSDQutC+0LzQsNC90LTRgyDCq2dpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaMK7INC00LvRjyDQv9C+0LvRg9GH0LXQvdC40Y8g0L/QvtC00YDQvtCx0L3QvtC5INC40L3RhNC+0YDQvNCw0YbQuNC4INC+INC/0LXRgNCy0L7QvCDQuNGB0L/QvtC70YzQt9C+0LLQsNC90LjQuC4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjIKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbPNC+0L/RhtC40Lg+XSA80YPQutCw0LfQsNGC0LXQu9GMLdC60L7QvNC80LjRgtCwPuKApiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMworbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDzQv9C+0LTQutC+0LzQsNC90LTQsD4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjgKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzzQvtC/0YbQuNC4Pl0gPNGD0LrQsNC30LDRgtC10LvRjC3QutC+0LzQvNC40YLQsD7igKYiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjkKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPNC/0L7QtNC60L7QvNCw0L3QtNCwPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJXM6ICVzINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBICVzIgorCisjOiBidWlsdGluL3JldmVydC5jOjgwCittc2dpZCAiZW5kIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi0LrQvtC90LXRhiDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0Lgg0L7RgtCx0L7RgNCwINC70YPRh9GI0LXQs9C+INC40LvQuCDQstC+0LfQstGA0LDRgtCwINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL3JldmVydC5jOjgxCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAi0L/RgNC+0LTQvtC70LbQuNGC0Ywg0L/QvtGB0LvQtdC00L7QstCw0YLQtdC70YzQvdC+0YHRgtGMINC+0YLQsdC+0YDQsCDQu9GD0YfRiNC10LPQviDQuNC70Lgg0LLQvtC30LLRgNCw0YLQsCDQutC+0LzQvNC40YLQsCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MgorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgItC+0YLQvNC10L3QsCDQv9C+0YHQu9C10LTQvtCy0LDRgtC10LvRjNC90L7RgdGC0Lgg0L7RgtCx0L7RgNCwINC70YPRh9GI0LXQs9C+INC40LvQuCDQstC+0LfQstGA0LDRgtCwINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL3JldmVydC5jOjgzCittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgItC90LUg0LrQvtC80LzQuNGC0LjRgtGMINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4IgorCisjOiBidWlsdGluL3JldmVydC5jOjg0Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgItC40LfQvNC10L3QuNGC0Ywg0YHQvtC+0LHRidC10L3QuNC1INC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL3JldmVydC5jOjg3Cittc2dpZCAicGFyZW50IG51bWJlciIKK21zZ3N0ciAi0L3QvtC80LXRgCDRgNC+0LTQuNGC0LXQu9GPIgorCisjOiBidWlsdGluL3JldmVydC5jOjg5Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgItGB0YLRgNCw0YLQtdCz0LjRjyDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MAorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAi0L7Qv9GG0LjRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MQorbXNnaWQgIm9wdGlvbiBmb3IgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgItC+0L/RhtC40Y8g0LTQu9GPINGB0YLRgNCw0YLQtdCz0LjQuCDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJhcHBlbmQgY29tbWl0IG5hbWUiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0LjQvNGPINC60L7QvNC80LjRgtCwIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNgorbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICLRgdC+0YXRgNCw0L3QuNGC0Ywg0LjQt9C90LDRh9Cw0LvRjNC90L4g0L/Rg9GB0YLRi9C1INC60L7QvNC80LjRgtGLIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNworbXNnaWQgImFsbG93IGNvbW1pdHMgd2l0aCBlbXB0eSBtZXNzYWdlcyIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINC60L7QvNC80LjRgtGLINGBINC/0YPRgdGC0YvQvNC4INGB0L7QvtCx0YnQtdC90LjRj9C80LgiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgItC+0YHRgtCw0LLQuNGC0Ywg0LjQt9Cx0YvRgtC+0YfQvdGL0LUsINC/0YPRgdGC0YvQtSDQutC+0LzQvNC40YLRiyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJwcm9ncmFtIGVycm9yIgorbXNnc3RyICLQvtGI0LjQsdC60LAg0LIg0L/RgNC+0LPRgNCw0LzQvNC1IgorCisjOiBidWlsdGluL3JldmVydC5jOjE5NworbXNnaWQgInJldmVydCBmYWlsZWQiCittc2dzdHIgItGB0LHQvtC5INCy0L7Qt9Cy0YDQsNGC0LAg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjEyCittc2dpZCAiY2hlcnJ5LXBpY2sgZmFpbGVkIgorbXNnc3RyICLRgdCx0L7QuSDQv9GA0Lgg0L7RgtCx0L7RgNC1INC70YPRh9GI0LXQs9C+IgorCisjOiBidWlsdGluL3JtLmM6MTcKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPNC+0L/RhtC40Lg+XSBbLS1dIDzRhNCw0LnQuz7igKYiCisKKyM6IGJ1aWx0aW4vcm0uYzo2NQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZSAob3Igb25lIG9mIGl0cyBuZXN0ZWQgc3VibW9kdWxlcylcbiIKKyJ1c2VzIGEgLmdpdCBkaXJlY3Rvcnk6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzIChvciBvbmUgb2YgdGhlaXIgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisidXNlIGEgLmdpdCBkaXJlY3Rvcnk6IgorbXNnc3RyWzBdICLRgdC70LXQtNGD0Y7RidC40Lkg0L/QvtC00LzQvtC00YPQu9GMICjQuNC70Lgg0L7QtNC40L0g0LjQtyDQstC70L7QttC10L3QvdGL0YUg0L/QvtC00LzQvtC00YPQu9C10LkpXG7QuNGB0L/QvtC70YzQt9GD0LXRgiDQutCw0YLQsNC70L7QsyAuZ2l0OiIKK21zZ3N0clsxXSAi0YHQu9C10LTRg9GO0YnQuNC1INC/0L7QtNC80L7QtNGD0LvQuCAo0LjQu9C4INC+0LTQuNC9INC40Lcg0LLQu9C+0LbQtdC90L3Ri9GFINC/0L7QtNC80L7QtNGD0LvQtdC5KVxu0LjRgdC/0L7Qu9GM0LfRg9GO0YIg0LrQsNGC0LDQu9C+0LMgLmdpdDoiCittc2dzdHJbMl0gItGB0LvQtdC00YPRjtGJ0LjQtSDQv9C+0LTQvNC+0LTRg9C70LggKNC40LvQuCDQvtC00LjQvSDQuNC3INCy0LvQvtC20LXQvdC90YvRhSDQv9C+0LTQvNC+0LTRg9C70LXQuSlcbtC40YHQv9C+0LvRjNC30YPRjtGCINC60LDRgtCw0LvQvtCzIC5naXQ6IgorbXNnc3RyWzNdICLRgdC70LXQtNGD0Y7RidC40LUg0L/QvtC00LzQvtC00YPQu9C4ICjQuNC70Lgg0L7QtNC40L0g0LjQtyDQstC70L7QttC10L3QvdGL0YUg0L/QvtC00LzQvtC00YPQu9C10LkpXG7QuNGB0L/QvtC70YzQt9GD0Y7RgiDQutCw0YLQsNC70L7QsyAuZ2l0OiIKKworIzogYnVpbHRpbi9ybS5jOjcxCittc2dpZCAiIgorIlxuIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiXG4o0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCq3JtIC1yZsK7LCDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDRg9C00LDQu9C40YLRjCDQtdCz0L4sINCy0LrQu9GO0YfQsNGPINCy0YHRjiDQtdCz0L4g0LjRgdGC0L7RgNC40Y4pIgorCisjOiBidWlsdGluL3JtLmM6MjMwCittc2dpZCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dpZF9wbHVyYWwgIiIKKyJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGVcbiIKKyJmaWxlIGFuZCB0aGUgSEVBRDoiCittc2dzdHJbMF0gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQvtGC0LvQuNGH0LDRjtGJ0LjQtdGB0Y8g0Lgg0L7RgiDRhNCw0LnQu9CwLCDQuCDQvtGCIEhFQUQ6IgorbXNnc3RyWzFdICLRgdC70LXQtNGD0Y7RidC40LUg0YTQsNC50LvRiyDRgdC+0LTQtdGA0LbQsNGCINC/0YDQvtC40L3QtNC10LrRgdC40YDQvtCy0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0L7RgtC70LjRh9Cw0Y7RidC40LXRgdGPINC4INC+0YIg0YTQsNC50LvQsCwg0Lgg0L7RgiBIRUFEOiIKK21zZ3N0clsyXSAi0YHQu9C10LTRg9GO0YnQuNC1INGE0LDQudC70Ysg0YHQvtC00LXRgNC20LDRgiDQv9GA0L7QuNC90LTQtdC60YHQuNGA0L7QstCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPINC+0YLQu9C40YfQsNGO0YnQuNC10YHRjyDQuCDQvtGCINGE0LDQudC70LAsINC4INC+0YIgSEVBRDoiCittc2dzdHJbM10gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQvtGC0LvQuNGH0LDRjtGJ0LjQtdGB0Y8g0Lgg0L7RgiDRhNCw0LnQu9CwLCDQuCDQvtGCIEhFQUQ6IgorCisjOiBidWlsdGluL3JtLmM6MjM1Cittc2dpZCAiIgorIlxuIgorIih1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIlxuKNC40YHQv9C+0LvRjNC30YPQudGC0LUg0L7Qv9GG0LjRjiDCqy1mwrsg0LTQu9GPINC/0YDQuNC90YPQtNC40YLQtdC70YzQvdC+0LPQviDRg9C00LDQu9C10L3QuNGPKSIKKworIzogYnVpbHRpbi9ybS5jOjIzOQorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDQuNC90LTQtdC60YHQtToiCittc2dzdHJbMV0gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDQuNC90LTQtdC60YHQtToiCittc2dzdHJbMl0gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDQuNC90LTQtdC60YHQtToiCittc2dzdHJbM10gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0L/RgNC+0LjQvdC00LXQutGB0LjRgNC+0LLQsNC90L3Ri9C1INC40LfQvNC10L3QtdC90LjRjyDQsiDQuNC90LTQtdC60YHQtToiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNDMgYnVpbHRpbi9ybS5jOjI1NAorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICJcbijQuNGB0L/QvtC70YzQt9GD0LnRgtC1INC+0L/RhtC40Y4gwqstLWNhY2hlZMK7INC00LvRjyDQvtGB0YLQsNCy0LvQtdC90LjRjyDRhNCw0LnQu9CwLCDQuNC70LggwqstZsK7INC00LvRjyDQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QvtCz0L4g0YPQtNCw0LvQtdC90LjRjykiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNTEKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dzdHJbMF0gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0LvQvtC60LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjzoiCittc2dzdHJbMV0gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0LvQvtC60LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjzoiCittc2dzdHJbMl0gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0LvQvtC60LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjzoiCittc2dzdHJbM10gItGB0LvQtdC00YPRjtGJ0LjQtSDRhNCw0LnQu9GLINGB0L7QtNC10YDQttCw0YIg0LvQvtC60LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjzoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNjkKK21zZ2lkICJkbyBub3QgbGlzdCByZW1vdmVkIGZpbGVzIgorbXNnc3RyICLQvdC1INCy0YvQstC+0LTQuNGC0Ywg0YHQv9C40YHQvtC6INGD0LTQsNC70LXQvdC90YvRhSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzAKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0YLQvtC70YzQutC+INC40Lcg0LjQvdC00LXQutGB0LAiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzEKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAi0L/RgNC+0L/Rg9GB0YLQuNGC0Ywg0L/RgNC+0LLQtdGA0LrRgyDQsNC60YLRg9Cw0LvRjNC90L7RgdGC0LgiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzIKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINGA0LXQutGD0YDRgdC40LLQvdC+0LUg0YPQtNCw0LvQtdC90LjQtSIKKworIzogYnVpbHRpbi9ybS5jOjI3NAorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICLQstGL0YXQvtC0INGBINC90YPQu9C10LLRi9C8INC60L7QtNC+0Lwg0LLQvtC30LLRgNCw0YLQsCwg0LTQsNC20LUg0LXRgdC70Lgg0L3QuNGH0LXQs9C+INC90LUg0L3QsNC50LTQtdC90L4iCisKKyM6IGJ1aWx0aW4vcm0uYzozMTcKK21zZ2lkICJQbGVhc2UsIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgItCf0L7QttCw0LvRg9C50YHRgtCwLCDQv9GA0L7QuNC90LTQtdC60YHQuNGA0YPQudGC0LUg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPINCyIC5naXRtb2R1bGVzINC40LvQuCDRgdC/0YDRj9GH0YzRgtC1INC40YUsINGH0YLQvtCx0Ysg0L/RgNC+0LTQvtC70LbQuNGC0YwiCisKKyM6IGJ1aWx0aW4vcm0uYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9GP0Y4g0YDQtdC60YPRgNGB0LjQstC90L4gwqslc8K7INCx0LXQtyDRg9C60LDQt9Cw0L3QuNGPINC+0L/RhtC40LggLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06INC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0YwgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LXJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC1yZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs80YHQtdGA0LLQtdGAPjpdPNC60LDRgtCw0LvQvtCzPiBbPNGB0YHRi9C70LrQsD7igKZdXG4gIC0tYWxsINC4INGP0LLQvdCw0Y8g0YHQv9C10YbQuNGE0LjQutCw0YbQuNGPIDzRgdGB0YvQu9C60Lg+INCy0LfQsNC40LzQvdC+INC40YHQutC70Y7Rh9Cw0Y7RidC40LUuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MAorbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICLQuNC80Y8g0LLQvdC10YjQvdC10LPQviDRgNC10L/QvtC30LjRgtC+0YDQuNGPIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MQorbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICLQv9GA0L7RgtC+0LrQvtC7INCx0LXQtyDRgdC+0YXRgNCw0L3QtdC90LjRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LTQu9GPIFJQQyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINGB0YHRi9C70LrQuCDQuNC3INGB0YLQsNC90LTQsNGA0YLQvdC+0LPQviDQstCy0L7QtNCwIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0YLQsNGC0YPRgSDQvtGCINGB0LrRgNC40L/RgtCwINCy0L3QtdGI0L3QtdCz0L4g0YHQtdGA0LLQtdGA0LAiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxMworbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICJnaXQgc2hvcnRsb2cgWzzQvtC/0YbQuNC4Pl0gWzzQtNC40LDQv9Cw0LfQvtC9LdGA0LXQtNCw0LrRhtC40Lk+XSBbWy0tXSBbPNC/0YPRgtGMPuKApl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgYXV0aG9yOiAlcyIKK21zZ3N0ciAi0J/RgNC+0L/Rg9GJ0LXQvSDQsNCy0YLQvtGAOiAlcyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzMAorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAi0L7RgtGB0L7RgNGC0LjRgNC+0LLQsNGC0Ywg0LLRi9Cy0L7QtCDQv9C+INC60L7Qu9C40YfQtdGB0YLQstGDINC60L7QvNC80LjRgtC+0LIg0YMg0LDQstGC0L7RgNCwIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjMyCittc2dpZCAiU3VwcHJlc3MgY29tbWl0IGRlc2NyaXB0aW9ucywgb25seSBwcm92aWRlcyBjb21taXQgY291bnQiCittc2dzdHIgItCd0LUg0LLRi9Cy0L7QtNC40YLRjCDQvtC/0LjRgdCw0L3QuNGPINC60L7QvNC80LjRgtC+0LIsINCwINGC0L7Qu9GM0LrQviDQuNGFINC60L7Qu9C40YfQtdGB0YLQstC+IgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjM0Cittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAi0J/QvtC60LDQt9Cw0YLRjCDQv9C+0YfRgtGDINC60LDQttC00L7Qs9C+INC40Lcg0LDQstGC0L7RgNC+0LIiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzUKK21zZ2lkICJ3WyxpMVssaTJdXSIKK21zZ3N0ciAid1ssaTFbLGkyXV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzYKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgItCf0LXRgNC10L3QvtGBINGB0YLRgNC+0Log0L3QsCDQstGL0LLQvtC00LUiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo5Cittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cblx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PNC60L7Qs9C00LA+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cblx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG5cdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPNGA0LXQtNCw0LrRhtC40Y8+IHwgPNGI0LDQsdC70L7QvT4pLi4uXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEzCittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDzQsdCw0LfQsD5dXSBbLS1saXN0XSBbPNGB0YHRi9C70LrQsD5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjU5Cittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGB0L/QuNGB0L7QuiDQuCDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDQstC90LXRiNC90LjRhSDQuCDQu9C+0LrQsNC70YzQvdGL0YUg0LLQtdGC0L7QuiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMINGB0L/QuNGB0L7QuiDQvtGC0YHQu9C10LbQuNCy0LDQtdC80YvRhSDQstC90LXRiNC90LjRhSDQstC10YLQvtC6IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYzCittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAi0L7QutGA0LDRiNC40LLQsNGC0YwgwqsqISstwrsg0LIg0YHQvtC+0YLQstC10YLRgdGC0LLQuNC4INGBINCy0LXRgtC60L7QuSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NQorbXNnaWQgInNob3cgPG4+IG1vcmUgY29tbWl0cyBhZnRlciB0aGUgY29tbW9uIGFuY2VzdG9yIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMIDxuPiDQutC+0LzQvNC40YLQvtCyINC/0L7RgdC70LUg0L7QsdGJ0LXQs9C+INC/0YDQtdC00LrQsCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NworbXNnaWQgInN5bm9ueW0gdG8gbW9yZT0tMSIKK21zZ3N0ciAi0YHQuNC90L7QvdC40Lwg0LTQu9GPIG1vcmU9LTEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAi0L3QtSDQstGL0LLQvtC00LjRgtGMINC40LzQtdC90L7QstCw0L3Ri9C1INGB0YLRgNC+0LrQuCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MAorbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICLQstC60LvRjtGH0LjRgtGMINCyINCy0YvQstC+0LQg0YLQtdC60YPRidGD0Y4g0LLQtdGC0LrRgyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MgorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAi0LjQvNC10L3QvtCy0LDRgtGMINC60L7QvNC80LjRgtGLINC40YUg0LjQvNC10L3QsNC80Lgg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgItCy0YvQstC10YHRgtC4INCy0L7Qt9C80L7QttC90YvQtSDQsdCw0LfRiyDRgdC70LjRj9C90LjRjyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NgorbXNnaWQgInNob3cgcmVmcyB1bnJlYWNoYWJsZSBmcm9tIGFueSBvdGhlciByZWYiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGB0YHRi9C70LrQuCwg0L3QtdC00L7RgdGC0YPQv9C90YvQtSDQuNC3INC70Y7QsdGL0YUg0LTRgNGD0LPQuNGFINGB0YHRi9C70L7QuiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3OAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0LrQvtC80LzQuNGC0Ysg0LIg0YLQvtC/0L7Qu9C+0LPQuNGH0LXRgdC60L7QvCDQv9C+0YDRj9C00LrQtSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4MQorbXNnaWQgInNob3cgb25seSBjb21taXRzIG5vdCBvbiB0aGUgZmlyc3QgYnJhbmNoIgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgtC+0LvRjNC60L4g0LrQvtC80LzQuNGC0YssINC+0YLRgdGD0YbRgtCy0YPRjtGJ0LjQtSDQsiDQv9C10YDQstC+0Lkg0LLQtdGC0LrQtSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4MworbXNnaWQgInNob3cgbWVyZ2VzIHJlYWNoYWJsZSBmcm9tIG9ubHkgb25lIHRpcCIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQu9C40Y/QvdC40Y8sINC00L7RgdGC0LjQttC40LzRi9C1INGC0L7Qu9GM0LrQviDQuNC3INC+0LTQvdC+0Lkg0LjQtyDQstC10YDRhdGD0YjQtdC6IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njg1Cittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICLRgtC+0L/QvtC70L7Qs9C40YfQtdGB0LrQsNGPINGB0L7RgNGC0LjRgNC+0LLQutCwLCDRgSDRgdC+0YXRgNCw0L3QtdC90LjQtdC8INC/0L7RgNGP0LTQutCwINC00LDRgiwg0LXRgdC70Lgg0LLQvtC30LzQvtC20L3QviIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4OAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw80LHQsNC30LA+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4OQorbXNnaWQgInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCBiYXNlIgorbXNnc3RyICLQv9C+0LrQsNC30LDRgtGMIDxuPiDQv9C+0YHQu9C10LTQvdC40YUg0LfQsNC/0LjRgdC10Lkg0LIg0LbRg9GA0L3QsNC70LUg0YHRgdGL0LvQvtC6LCDQvdCw0YfQuNC90LDRjyDRgSDQsdCw0LfRiyIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjEwCittc2dpZCAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8ICIKKyItLWhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxwYXR0ZXJuPi4uLl0iCittc2dzdHIgImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0taGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPNGI0LDQsdC70L7QvT7igKZdIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTEKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08cGF0dGVybj5dIDwgPHJlZi1saXN0PiIKK21zZ3N0ciAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PNGI0LDQsdC70L7QvT5dIDwgPNGB0L/QuNGB0L7Qui3RgdGB0YvQu9C+0Lo+IgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcwCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YLQvtC70YzQutC+INC80LXRgtC60LggKNC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAtLWhlYWRzKSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MQorbXNnaWQgIm9ubHkgc2hvdyBoZWFkcyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggdGFncykiCittc2dzdHIgItCy0YvQstC10YHRgtC4INGC0L7Qu9GM0LrQviDQs9C+0LvQvtCy0YsgKNC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC+0LTQvdC+0LLRgNC10LzQtdC90L3QviDRgSAtLXRhZ3MpIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcyCittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAi0LHQvtC70LXQtSDRgdGC0YDQvtCz0LDRjyDQv9GA0L7QstC10YDQutCwINGB0YHRi9C70L7Quiwg0YLRgNC10LHRg9C10YIg0YLQvtGH0L3Ri9C5INC/0YPRgtGMINGB0YHRi9C70LrQuCIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3NSBidWlsdGluL3Nob3ctcmVmLmM6MTc3Cittc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UsIGV2ZW4gaWYgaXQgd291bGQgYmUgZmlsdGVyZWQgb3V0IgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdGB0YvQu9C60YMgSEVBRCwg0LTQsNC20LUg0LXRgdC70Lgg0L7QvdCwINCx0YPQtNC10YIg0L7RgtGE0LjQu9GM0YLRgNC+0LLQsNC90LAiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzkKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGludG8gb2JqZWN0IElEcyIKK21zZ3N0ciAi0YDQsNC30YvQvNC10L3QvtCy0LDRgtGMINC80LXRgtC60Lgg0LIg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRiyDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTgxCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgPG4+INGG0LjRhNGAINC00LvRjyDQstGL0LLQvtC00LAgU0hBLTEiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODUKK21zZ2lkICJkbyBub3QgcHJpbnQgcmVzdWx0cyB0byBzdGRvdXQgKHVzZWZ1bCB3aXRoIC0tdmVyaWZ5KSIKK21zZ3N0ciAi0L3QtSDQv9C10YfQsNGC0LDRgtGMINGA0LXQt9GD0LvRjNGC0LDRgiDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LLRi9Cy0L7QtCAo0L/QvtC70LXQt9C90L4g0YEg0L7Qv9GG0LjQtdC5IMKrLS12ZXJpZnnCuykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODcKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLQstGL0LLQtdGB0YLQuCDRgdGB0YvQu9C60Lgg0YHQviDRgdGC0LDQvdC00LDRgNGC0L3QvtCz0L4g0LLQstC+0LTQsCwg0LrQvtGC0L7RgNGL0YUg0L3QtdGCINCyINC70L7QutCw0LvRjNC90L7QvCDRgNC10L/QvtC30LjRgtC+0YDQuNC4IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjcKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIFs8b3B0aW9ucz5dIDxuYW1lPiBbPHJlZj5dIgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIFs80L7Qv9GG0LjQuD5dIDzQuNC80Y8+IFs80YHRgdGL0LvQutCwPl0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA80LjQvNGPPiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MAorbXNnaWQgInN1cHByZXNzIGVycm9yIG1lc3NhZ2UgZm9yIG5vbi1zeW1ib2xpYyAoZGV0YWNoZWQpIHJlZnMiCittc2dzdHIgItC90LUg0LLRi9Cy0L7QtNC40YLRjCDRgdC+0L7QsdGJ0LXQvdC40Y8g0L7QsSDQvtGI0LjQsdC60LDRhSDQtNC70Y8g0L3QtdGB0LjQvNCy0L7Qu9GM0L3Ri9GFICjQvtGC0YHQvtC10LTQuNC90LXQvdC90YvRhSkg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAi0YPQtNCw0LvQuNGC0Ywg0YHQuNC80LLQvtC70YzQvdGL0LUg0YHRgdGL0LvQutC4IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICLRg9C60L7RgNC+0YfQtdC90L3Ri9C5INCy0YvQstC+0LQg0YHRgdGL0LvQvtC6IgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MgorbXNnaWQgInJlYXNvbiIKK21zZ3N0ciAi0L/RgNC40YfQuNC90LAiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYyCittc2dpZCAicmVhc29uIG9mIHRoZSB1cGRhdGUiCittc2dzdHIgItC/0YDQuNGH0LjQvdCwINC+0LHQvdC+0LLQu9C10L3QuNGPIgorCisjOiBidWlsdGluL3RhZy5jOjIyCittc2dpZCAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dIDx0YWduYW1lPiAiCisiWzxoZWFkPl0iCittc2dzdHIgImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA80LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAt0LrQu9GO0YfQsD5dIFstZl0gWy1tIDzRgdC+0L7QsdGJ0LXQvdC40LU+IHwgLUYgPNGE0LDQudC7Pl0gPNC40LzRjy3QvNC10YLQutC4PiBbPNGA0LXQtNCw0LrRhtC40Y8+XSIKKworIzogYnVpbHRpbi90YWcuYzoyMworbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC1kIDzQuNC80Y8t0LzQtdGC0LrQuD7igKYiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjQKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tcG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorIlx0XHRbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiZ2l0IHRhZyAtbCBbLW5bPNC60L7Qu9C40YfQtdGB0YLQstC+Pl1dIFstLWNvbnRhaW5zIDzQutC+0LzQvNC40YI+XSBbLS1wb2ludHMtYXQgPNC+0LHRitC10LrRgj5dXG5cdFx0WzzRiNCw0LHQu9C+0L0+4oCmXSIKKworIzogYnVpbHRpbi90YWcuYzoyNgorbXNnaWQgImdpdCB0YWcgLXYgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC12IDzQuNC80Y8t0LzQtdGC0LrQuD7igKYiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICLQn9C+0LLRgNC10LbQtNC10L3QvdGL0Lkg0L7QsdGK0LXQutGCIMKrJXPCuyIKKworIzogYnVpbHRpbi90YWcuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnIG5hbWUgdG9vIGxvbmc6ICUuKnMuLi4iCittc2dzdHIgItGB0LvQuNGI0LrQvtC8INC00LvQuNC90L3QvtC1INC40LzRjyDQvNC10YLQutC4OiAlLipz4oCmIgorCisjOiBidWlsdGluL3RhZy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICLQvNC10YLQutCwICDCqyVzwrsg0L3QtSDQvdCw0LnQtNC10L3QsC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAi0JzQtdGC0LrQsCDCqyVzwrsg0YPQtNCw0LvQtdC90LAgKNCx0YvQu9CwICVzKVxuIgorCisjOiBidWlsdGluL3RhZy5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgdmVyaWZ5IHRoZSB0YWcgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7QstC10YDQuNGC0Ywg0LzQtdGC0LrRgyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZC5cbiIKK21zZ3N0ciAiXG7QktCy0LXQtNC40YLQtSDRgdC+0L7QsdGJ0LXQvdC40LUg0LTQu9GPINC80LXRgtC60Lg6XG4gICVzXG7QodGC0YDQvtC60LgsINC90LDRh9C40L3QsNGO0YnQuNC10YHRjyDRgSDCqyVjwrsg0LHRg9C00YPRgiDQv9GA0L7QuNCz0L3QvtGA0LjRgNC+0LLQsNC90YsuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJXcml0ZSBhIG1lc3NhZ2UgZm9yIHRhZzpcbiIKKyIgICVzXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKK21zZ3N0ciAiXG7QktCy0LXQtNC40YLQtSDRgdC+0L7QsdGJ0LXQvdC40LUg0LTQu9GPINC80LXRgtC60Lg6XG4gICVzXG7QodGC0YDQvtC60LgsINC90LDRh9C40L3QsNGO0YnQuNC10YHRjyDRgSDCqyVjwrsg0LHRg9C00YPRgiDQvtGB0YLQsNCy0LvQtdC90Ys7INCy0Ysg0LzQvtC20LXRgtC1INGD0LTQsNC70LjRgtGMINC40YUg0LLRgNGD0YfQvdGD0Y4sINC10YHQu9C4INGF0L7RgtC40YLQtS5cbiIKKworIzogYnVpbHRpbi90YWcuYzozNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5zdXBwb3J0ZWQgc29ydCBzcGVjaWZpY2F0aW9uICclcyciCittc2dzdHIgItC90LXQv9C+0LTQtNC10YDQttC40LLQsNC10LzRi9C5INGB0L/QvtGB0L7QsSDRgdC+0YDRgtC40YDQvtCy0LrQuCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHNvcnQgc3BlY2lmaWNhdGlvbiAnJXMnIGluIHZhcmlhYmxlICclcyciCittc2dzdHIgItC90LXQv9C+0LTQtNC10YDQttC40LLQsNC10LzRi9C5INGB0L/QvtGB0L7QsSDRgdC+0YDRgtC40YDQvtCy0LrQuCDCqyVzwrsg0LIg0L/QtdGA0LXQvNC10L3QvdC+0Lkgwqslc8K7IgorCisjOiBidWlsdGluL3RhZy5jOjQyOAorbXNnaWQgInVuYWJsZSB0byBzaWduIHRoZSB0YWciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/QvtC00L/QuNGB0LDRgtGMINC80LXRgtC60YMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDMwCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0YTQsNC50Lsg0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi90YWcuYzo0NTUKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICLQvdC10L/RgNCw0LLQuNC70YzQvdGL0Lkg0YLQuNC/INC+0LHRitC10LrRgtCwIgorCisjOiBidWlsdGluL3RhZy5jOjQ2OAorbXNnaWQgInRhZyBoZWFkZXIgdG9vIGJpZy4iCittc2dzdHIgItC30LDQs9C+0LvQvtCy0L7QuiDQvNC10YLQutC4INGB0LvQuNGI0LrQvtC8INCx0L7Qu9GM0YjQvtC5LiIKKworIzogYnVpbHRpbi90YWcuYzo1MDQKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgItC90LXRgiDQvtC/0LjRgdCw0L3QuNGPINC80LXRgtC60Lg/IgorCisjOiBidWlsdGluL3RhZy5jOjUxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICLQodC+0L7QsdGJ0LXQvdC40LUg0LzQtdGC0LrQuCDQsdGL0LvQviDQvtGB0YLQsNCy0LvQtdC90L4g0LIgJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzo1NTkKK21zZ2lkICJzd2l0Y2ggJ3BvaW50cy1hdCcgcmVxdWlyZXMgYW4gb2JqZWN0IgorbXNnc3RyICLQv9GA0Lgg0YPQutCw0LfQsNC90LjQuCDQv9Cw0YDQsNC80LXRgtGA0LAgwqtwb2ludHMtYXTCuyDRgtGA0LXQsdGD0LXRgtGB0Y8g0YPQutCw0LfQsNGC0Ywg0L7QsdGK0LXQutGCIgorCisjOiBidWlsdGluL3RhZy5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJyVzJyIKK21zZ3N0ciAi0J/QvtCy0YDQtdC20LTQtdC90L3QvtC1INC40LzRjyDQvtCx0YrQtdC60YLQsCDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTkwCittc2dpZCAibGlzdCB0YWcgbmFtZXMiCittc2dzdHIgItGB0L/QuNGB0L7QuiDQvdCw0LfQstCw0L3QuNC5INC80LXRgtC+0LoiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTkyCittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgItC/0LXRh9Cw0YLQsNGC0YwgPG4+INGB0YLRgNC+0Log0L7Qv9C40YHQsNC90LjRjyDQvtGCINC60LDQttC00L7QuSDQvNC10YLQutC4IgorCisjOiBidWlsdGluL3RhZy5jOjU5NAorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDQvNC10YLQutC4IgorCisjOiBidWlsdGluL3RhZy5jOjU5NQorbXNnaWQgInZlcmlmeSB0YWdzIgorbXNnc3RyICLQv9GA0L7QstC10YDQuNGC0Ywg0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi90YWcuYzo1OTcKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4INGB0L7Qt9C00LDQvdC40Y8g0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi90YWcuYzo1OTkKK21zZ2lkICJhbm5vdGF0ZWQgdGFnLCBuZWVkcyBhIG1lc3NhZ2UiCittc2dzdHIgItC00LvRjyDQsNC90L3QvtGC0LjRgNC+0LLQsNC90L3QvtC5INC80LXRgtC60Lgg0L3Rg9C20L3QviDRgdC+0L7QsdGJ0LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAxCittc2dpZCAidGFnIG1lc3NhZ2UiCittc2dzdHIgItC+0L/QuNGB0LDQvdC40LUg0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi90YWcuYzo2MDMKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICLQsNC90L3QvtGC0LjRgNC+0LLQsNC90L3QsNGPINC4INC/0L7QtNC/0LjRgdCw0L3QvdCw0Y8g0YEg0L/QvtC80L7RidGM0Y4gR1BHINC80LXRgtC60LAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjA3Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAi0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC00YDRg9Cz0L7QuSDQutC70Y7RhyDQtNC70Y8g0L/QvtC00L/QuNGB0LDQvdC40Y8g0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi90YWcuYzo2MDgKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICLQt9Cw0LzQtdC90LAg0LzQtdGC0LrQuCwg0LXRgdC70Lgg0L7QvdCwINGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL3RhZy5jOjYwOSBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjgKK21zZ2lkICJjcmVhdGUgYSByZWZsb2ciCittc2dzdHIgItGB0L7Qt9C00LDRgtGMINC20YPRgNC90LDQuyDRgdGB0YvQu9C+0LoiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjExCittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAi0J3QsNGB0YLRgNC+0LnQutC4INCy0YvQstC+0LTQsCDRgdC/0LjRgdC60LAg0LzQtdGC0L7QuiIKKworIzogYnVpbHRpbi90YWcuYzo2MTIKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgItC/0L7QutCw0LfQsNGC0Ywg0YHQv9C40YHQvtC6INC80LXRgtC+0Log0L/QviDRgdGC0L7Qu9Cx0YbQsNC8IgorCisjOiBidWlsdGluL3RhZy5jOjYxNAorbXNnaWQgInNvcnQgdGFncyIKK21zZ3N0ciAi0L7RgtGB0L7RgNGC0LjRgNC+0LLQsNGC0Ywg0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi90YWcuYzo2MTkgYnVpbHRpbi90YWcuYzo2MjUKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgItCy0YvQstC+0LQg0YLQvtC70YzQutC+INC80LXRgtC+0LosINC60L7RgtC+0YDRi9C1INGB0L7QtNC10YDQttCw0YIg0LrQvtC80LzQuNGCIgorCisjOiBidWlsdGluL3RhZy5jOjYzMQorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICLQstGL0LLQvtC0INGC0L7Qu9GM0LrQviDQvNC10YLQvtC6LCDQvtC/0YDQtdC00LXQu9C10L3QvdC+0LPQviDQvtCx0YrQtdC60YLQsCIKKworIzogYnVpbHRpbi90YWcuYzo2NTcKK21zZ2lkICItLWNvbHVtbiBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1jb2x1bW4g0LggLW4g0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjY5Cittc2dpZCAiLS1zb3J0IGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLXNvcnQg0LggLW4g0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Njc2Cittc2dpZCAiLW4gb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAi0L7Qv9GG0LjRjiAtbiDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LLQvNC10YHRgtC1INGBIC1sLiIKKworIzogYnVpbHRpbi90YWcuYzo2NzgKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgItC+0L/RhtC40Y4gLS1jb250YWlucyDQvNC+0LbQvdC+INC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDRgtC+0LvRjNC60L4g0LLQvNC10YHRgtC1INGBIC1sLiIKKworIzogYnVpbHRpbi90YWcuYzo2ODAKK21zZ2lkICItLXBvaW50cy1hdCBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICLQvtC/0YbQuNGOIC0tcG9pbnRzLWF0INC80L7QttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINGC0L7Qu9GM0LrQviDQstC80LXRgdGC0LUg0YEgLWwuIgorCisjOiBidWlsdGluL3RhZy5jOjY4OAorbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiLUYg0LggLW0g0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4uIgorCisjOiBidWlsdGluL3RhZy5jOjcwOAorbXNnaWQgInRvbyBtYW55IHBhcmFtcyIKK21zZ3N0ciAi0L/QtdGA0LXQtNCw0L3QviDRgdC70LjRiNC60L7QvCDQvNC90L7Qs9C+INC/0LDRgNCw0LzQtdGC0YDQvtCyIgorCisjOiBidWlsdGluL3RhZy5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiwqslc8K7INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC+0L/Rg9GB0YLQuNC80YvQvCDQuNC80LXQvdC10Lwg0LzQtdGC0LrQuC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzE5CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICLQvNC10YLQutCwIMKrJXPCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAi0JzQtdGC0LrQsCDCqyVzwrsg0L7QsdC90L7QstC70LXQvdCwICjQsdGL0LvQsCAlcylcbiIKKworIzogYnVpbHRpbi91bnBhY2stb2JqZWN0cy5jOjQ5MAorbXNnaWQgIlVucGFja2luZyBvYmplY3RzIgorbXNnc3RyICLQoNCw0YHQv9Cw0LrQvtCy0LrQsCDQvtCx0YrQtdC60YLQvtCyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC60LDRgtCw0LvQvtCzICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCBzdGF0ICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZmlsZSAlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDRhNCw0LnQuyAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGZpbGUgJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0YTQsNC50LsgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxIGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINC60LDRgtCw0LvQvtCzICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nICIKK21zZ3N0ciAi0KLQtdGB0YLQuNGA0L7QstCw0L3QuNC1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEzNgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDRgdGC0LDRgtC40YHRgtC40LrQuCDQutCw0YLQsNC70L7Qs9CwINC90LUg0LjQt9C80LXQvdGP0LXRgtGB0Y8g0L/QvtGB0LvQtSDQtNC+0LHQsNCy0LvQtdC90LjRjyDQvdC+0LLQvtCz0L4g0YTQsNC50LvQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDkKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDRgdGC0LDRgtC40YHRgtC40LrQuCDQutCw0YLQsNC70L7Qs9CwINC90LUg0LjQt9C80LXQvdGP0LXRgtGB0Y8g0L/QvtGB0LvQtSDQtNC+0LHQsNCy0LvQtdC90LjRjyDQvdC+0LLQvtCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNjIKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgdXBkYXRpbmcgYSBmaWxlIgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDRgdGC0LDRgtC40YHRgtC40LrQuCDQutCw0YLQsNC70L7Qs9CwINC40LfQvNC10L3Rj9C10YLRgdGPINC/0L7RgdC70LUg0LTQvtCx0LDQstC70LXQvdC40Y8g0L3QvtCy0L7Qs9C+INGE0LDQudC70LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTczCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y8g0YHRgtCw0YLQuNGB0YLQuNC60Lgg0LrQsNGC0LDQu9C+0LPQsCDQuNC30LzQtdC90Y/QtdGC0YHRjyDQv9C+0YHQu9C1INC00L7QsdCw0LLQu9C10L3QuNGPINC90L7QstC+0LPQviDRhNCw0LnQu9CwINCy0L3Rg9GC0YDQuCDQv9C+0LTQutCw0YLQsNC70L7Qs9CwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE4NAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIKK21zZ3N0ciAi0LjQvdGE0L7RgNC80LDRhtC40Y8g0YHRgtCw0YLQuNGB0YLQuNC60Lgg0LrQsNGC0LDQu9C+0LPQsCDQvdC1INC40LfQvNC10L3Rj9C10YLRgdGPINC/0L7RgdC70LUg0YPQtNCw0LvQtdC90LjRjyDRhNCw0LnQu9CwIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICLQuNC90YTQvtGA0LzQsNGG0LjRjyDRgdGC0LDRgtC40YHRgtC40LrQuCDQutCw0YLQsNC70L7Qs9CwINC90LUg0LjQt9C80LXQvdGP0LXRgtGB0Y8g0L/QvtGB0LvQtSDRg9C00LDQu9C10L3QuNGPINC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjA0Cittc2dpZCAiIE9LIgorbXNnc3RyICIgT0siCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTY0Cittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs80L7Qv9GG0LjQuD5dIFstLV0gWzzRhNCw0LnQuz7igKZdIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkxOAorbXNnaWQgImNvbnRpbnVlIHJlZnJlc2ggZXZlbiB3aGVuIGluZGV4IG5lZWRzIHVwZGF0ZSIKK21zZ3N0ciAi0L/RgNC+0LTQvtC70LbQuNGC0Ywg0L7QsdC90L7QstC70LXQvdC40LUsINC00LDQttC1INC10YHQu9C4INC40L3QtNC10LrRgSDRgtGA0LXQsdGD0LXRgiDQvtCx0L3QvtCy0LvQtdC90LjRjyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MjEKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAi0L7QsdC90L7QstC70LXQvdC40LU6INC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQv9C+0LTQvNC+0LTRg9C70LgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI0Cittc2dpZCAiZG8gbm90IGlnbm9yZSBuZXcgZmlsZXMiCittc2dzdHIgItC90LUg0LjQs9C90L7RgNC40YDQvtCy0LDRgtGMINC90L7QstGL0LUg0YTQsNC50LvRiyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MjYKK21zZ2lkICJsZXQgZmlsZXMgcmVwbGFjZSBkaXJlY3RvcmllcyBhbmQgdmljZS12ZXJzYSIKK21zZ3N0ciAi0YDQsNC30YDQtdGI0LjRgtGMINGE0LDQudC70LDQvCDQt9Cw0LzQtdC90Y/RgtGMINC60LDRgtCw0LvQvtCz0Lgg0Lgg0L3QsNC+0LHQvtGA0L7RgiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MjgKK21zZ2lkICJub3RpY2UgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICLQt9Cw0LzQtdGH0LDRgtGMINGE0LDQudC70Ysg0L7RgtGB0YPRgtGB0YLQstGD0Y7RidC40LUg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzAKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAi0L7QsdC90L7QstC40YLRjCwg0LTQsNC20LUg0LXRgdC70Lgg0LIg0LjQvdC00LXQutGB0LUg0LjQvNC10Y7RgtGB0Y8g0L3QtSDRgdC70LjRgtGL0LUg0LfQsNC/0LjRgdC4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkzMworbXNnaWQgInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi0L7QsdC90L7QstC40YLRjCDQuNC90YTQvtGA0LzQsNGG0LjRjiDQviDRgdGC0LDRgtGD0YHQtSDRhNCw0LnQu9C+0LIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTM3Cittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICLQutCw0LogLS1yZWZyZXNoLCDQvdC+INC40LPQvdC+0YDQuNGA0L7QstCw0YLRjCDQvdCw0YHRgtGA0L7QudC60YMgYXNzdW1lLXVuY2hhbmdlZCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NDEKK21zZ2lkICI8bW9kZT4sPG9iamVjdD4sPHBhdGg+IgorbXNnc3RyICI80YDQtdC20LjQvCDQtNC+0YHRgtGD0L/QsD4sPNC+0LHRitC10LrRgj4sPNC/0YPRgtGMPiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NDIKK21zZ2lkICJhZGQgdGhlIHNwZWNpZmllZCBlbnRyeSB0byB0aGUgaW5kZXgiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0YPQutCw0LfQsNC90L3Rg9GOINC30LDQv9C40YHRjCDQsiDQuNC90LTQtdC60YEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQ2Cittc2dpZCAiKCsvLSl4IgorbXNnc3RyICIoKy8tKXgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQ3Cittc2dpZCAib3ZlcnJpZGUgdGhlIGV4ZWN1dGFibGUgYml0IG9mIHRoZSBsaXN0ZWQgZmlsZXMiCittc2dzdHIgItC/0LXRgNC10L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LHQuNGCINCy0YvQv9C+0LvQvdC10L3QuNGPINC90LAg0YPQutCw0LfQsNC90L3Ri9GFINGE0LDQudC70LDRhSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NTEKK21zZ2lkICJtYXJrIGZpbGVzIGFzIFwibm90IGNoYW5naW5nXCIiCittc2dzdHIgItC/0L7QvNC10YLQuNGC0Ywg0YTQsNC50LvRiyDQutCw0LogXCLQvdC1INC40LfQvNC10L3QtdC90L3Ri9C1XCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU0Cittc2dpZCAiY2xlYXIgYXNzdW1lZC11bmNoYW5nZWQgYml0IgorbXNnc3RyICLRg9Cx0YDQsNGC0Ywg0L/QvtC80LXRgtC60YMgYXNzdW1lZC11bmNoYW5nZWQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU3Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAi0L/QvtC80LXRgtC40YLRjCDRhNCw0LnQu9GLINC60LDQuiBcItGC0L7Qu9GM0LrQviDQsiDQuNC90LTQtdC60YHQtVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2MAorbXNnaWQgImNsZWFyIHNraXAtd29ya3RyZWUgYml0IgorbXNnc3RyICLRg9Cx0YDQsNGC0Ywg0L/QvtC80LXRgtC60YMgc2tpcC13b3JrdHJlZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjMKK21zZ2lkICJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi0YLQvtC70YzQutC+INC00L7QsdCw0LLQuNGC0Ywg0LIg0LjQvdC00LXQutGBOyDQvdC1INC00L7QsdCw0LLQu9GP0YLRjCDRgdC+0LTQtdGA0LbQuNC80L7QtSDQsiDQsdCw0LfRgyDQtNCw0L3QvdGL0YUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjUKK21zZ2lkICJyZW1vdmUgbmFtZWQgcGF0aHMgZXZlbiBpZiBwcmVzZW50IGluIHdvcmt0cmVlIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDRg9C60LDQt9Cw0L3QvdGL0LUg0L/Rg9GC0LgsINC00LDQttC1INC10YHQu9C4INC+0L3QuCDRgdGD0YnQtdGB0YLQstGD0Y7RgiDQsiDRgNCw0LHQvtGH0LXQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2NworbXNnaWQgIndpdGggLS1zdGRpbjogaW5wdXQgbGluZXMgYXJlIHRlcm1pbmF0ZWQgYnkgbnVsbCBieXRlcyIKK21zZ3N0ciAi0YEg0L7Qv9GG0LjQtdC5IC0tc3RkaW46INGB0YLRgNC+0LrQuCDQvdCwINCy0LLQvtC00LUg0L7RgtC00LXQu9GP0Y7RgtGB0Y8g0J3Qo9Cb0JXQktCr0Jwg0LHQsNC50YLQvtC8IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2OQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgItC/0YDQvtGH0LjRgtCw0YLRjCDRgdC/0LjRgdC+0Log0L7QsdC90L7QstC70Y/QtdC80YvRhSDQv9GD0YLQtdC5INC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTczCittc2dpZCAiYWRkIGVudHJpZXMgZnJvbSBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW5kZXgiCittc2dzdHIgItC00L7QsdCw0LLQuNGC0Ywg0LfQsNC/0LjRgdC4INC40Lcg0YHRgtCw0L3QtNCw0YLRgNC90L7Qs9C+INCy0LLQvtC00LAg0LIg0LjQvdC00LXQutGBIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAi0LfQsNC90L7QstC+INC30LDQv9C+0LvQvdC40YLRjCDQuNC90LTQtdC60YEgIzIg0LggIzMg0LTQu9GPINGD0LrQsNC30LDQvdC90YvRhSDQv9GD0YLQtdC5IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MQorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINGC0L7Qu9GM0LrQviDQt9Cw0L/QuNGB0LgsINC60L7RgtC+0YDRi9C1INC+0YLQu9C40YfQsNGO0YLRgdGPINC+0YIgSEVBRCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODUKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICLQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0YTQsNC50LvRiywg0L7RgtGB0YPRgtGB0YLQstGD0Y7RidC40LUg0LIg0YDQsNCx0L7Rh9C10Lwg0LrQsNGC0LDQu9C+0LPQtSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODgKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgItCy0YvQstC10YHRgtC4INCy0YvQv9C+0LvQvdGP0LXQvNGL0LUg0LTQtdC50YHRgtCy0LjRjyDQvdCwINGB0YLQsNC90LTQsNGA0YLQvdGL0Lkg0LLRi9Cy0L7QtCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTAKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiKNC00LvRjyDQvNCw0YjQuNC90L3QvtC5INC+0LHRgNCw0LHQvtGC0LrQuCkg0LfQsNCx0YvRgtGMINGB0L7RhdGA0LDQvdC10L3QvdGL0LUg0L3QtdGA0LDQt9GA0LXRiNC10L3QvdGL0LUg0LrQvtC90YTQu9C40LrRgtGLIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NAorbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICLQt9Cw0L/QuNGB0LDRgtGMINC40L3QtNC10LrRgSDQsiDRg9C60LDQt9Cw0L3QvdC+0Lwg0YTQvtGA0LzQsNGC0LUiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk2Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgItGA0LDQt9GA0LXRiNC40YLRjCDQuNC70Lgg0LfQsNC/0YDQtdGC0LjRgtGMINGA0LDQt9C00LXQu9GM0L3Ri9C5INC40L3QtNC10LrRgSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTgKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgItCy0LrQu9GO0YfQuNGC0Ywv0L7RgtC60LvRjtGH0LjRgtGMINC60Y3RiCDQvdC10L7RgtGB0LvQtdC20LjQstCw0LXQvNGL0YUg0YTQsNC50LvQvtCyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDAKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAi0LLQutC70Y7Rh9C40YLRjCDQutGN0Ygg0L3QtdC+0YLRgdC70LXQttC40LLQsNC10LzRi9GFINGE0LDQudC70L7QsiDQsdC10Lcg0L/RgNC+0LLQtdGA0LrQuCDRhNCw0LnQu9C+0LLQvtC5INGB0LjRgdGC0LXQvNGLIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzo5Cittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPNC+0L/RhtC40Lg+XSAtZCA80LjQvNGPLdGB0YHRi9C70LrQuD4gWzzRgdGC0LDRgNC+0LUt0LfQvdCw0YfQtdC90LjQtT5dIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzoxMAorbXNnaWQgImdpdCB1cGRhdGUtcmVmIFs8b3B0aW9ucz5dICAgIDxyZWZuYW1lPiA8bmV3LXZhbD4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs80L7Qv9GG0LjQuD5dICAgIDzQuNC80Y8t0YHRgdGL0LvQutC4PiA80L3QvtCy0L7QtS3Qt9C90LDRh9C10L3QuNC1PiBbPNGB0YLQsNGA0L7QtS3Qt9C90LDRh9C10L3QuNC1Pl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPNC+0L/RhtC40Lg+XSAtLXN0ZGluIFstel0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICLRg9C00LDQu9C40YLRjCDRgdGB0YvQu9C60YMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NQorbXNnaWQgInVwZGF0ZSA8cmVmbmFtZT4gbm90IHRoZSBvbmUgaXQgcG9pbnRzIHRvIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMIDzQuNC80Y8t0YHRgdGL0LvQutC4PiDQsCDQvdC1INGC0L4sINC90LAg0YfRgtC+INC+0L3QsCDRg9C60LDQt9GL0LLQsNC10YIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgItCy0LLQvtC0INC+0YLQtNC10LvQtdC90L3Ri9C5INCd0KPQm9CV0JLQq9Cc0Jgg0YHQuNC80LLQvtC70LDQvNC4IgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi0L/RgNC+0YfQuNGC0LDRgtGMINC+0LHQvdC+0LLQu9C10L3QuNGPINC40Lcg0YHRgtCw0L3QtNCw0YDRgtC90L7Qs9C+INCy0LLQvtC00LAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6NgorbXNnaWQgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorbXNnc3RyICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzoxNAorbXNnaWQgInVwZGF0ZSB0aGUgaW5mbyBmaWxlcyBmcm9tIHNjcmF0Y2giCittc2dzdHIgItC+0LHQvdC+0LLQuNGC0Ywg0LjQvdGE0L7RgNC80LDRhtC40Y4g0L4g0YHQtdGA0LLQtdGA0LDRhSDRgSDQvdGD0LvRjyIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTcKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDzQutC+0LzQvNC40YI+4oCmIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo3MgorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQvtC00LXRgNC20LjQvNC+0LUg0LrQvtC80LzQuNGC0LAiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjczIGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjg0Cittc2dpZCAicHJpbnQgcmF3IGdwZyBzdGF0dXMgb3V0cHV0IgorbXNnc3RyICLQstGL0LLQvtC00LjRgtGMINGB0YvRgNC+0Lkg0LLRi9Cy0L7QtCDRgdGC0LDRgtGD0YHQsCDQvtGCIGdwZyIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU0Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDzQv9Cw0LrQtdGCPuKApiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY0Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAi0LHRi9GC0Ywg0LzQvdC+0LPQvtGB0LvQvtCy0L3QtdC1IgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NjYKK21zZ2lkICJzaG93IHN0YXRpc3RpY3Mgb25seSIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YLQvtC70YzQutC+INGB0YLQsNGC0LjRgdGC0LjQutGDIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzoxNworbXNnaWQgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gPHRhZz4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktdGFnIFstdiB8IC0tdmVyYm9zZV0gPNC80LXRgtC60LA+4oCmIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzo4MworbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAi0LLRi9Cy0LXRgdGC0Lgg0YHQvtC00LXRgNC20LjQvNC+0LUg0LzQtdGC0LrQuCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEzCittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gPGJyYW5jaD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzzQvtC/0YbQuNC4Pl0gPNC/0YPRgtGMPiA80LLQtdGC0LrQsD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNAorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs80L7Qv9GG0LjQuD5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0YDQsNCx0L7Rh9C40YUg0LrQsNGC0LDQu9C+0LPQvtCyLyVzOiDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0LrQsNGC0LDQu9C+0LPQvtC8IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAi0KPQtNCw0LvQtdC90LjQtSDRgNCw0LHQvtGH0LjRhSDQutCw0YLQsNC70L7Qs9C+0LIvJXM6INGE0LDQudC7IGdpdGRpciDQvdC1INGB0YPRidC10YHRgtCy0YPQtdGCIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INGA0LDQsdC+0YfQuNGFINC60LDRgtCw0LvQvtCz0L7Qsi8lczog0L3QtSDRg9C00LDQu9C+0YHRjCDQv9GA0L7Rh9C40YLQsNGC0Ywg0YTQsNC50LsgZ2l0ZGlyICglcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0YDQsNCx0L7Rh9C40YUg0LrQsNGC0LDQu9C+0LPQvtCyLyVzOiDQvdC10LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQuSDRhNCw0LnQuyBnaXRkaXIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIHBvaW50cyB0byBub24tZXhpc3RlbnQgbG9jYXRpb24iCittc2dzdHIgItCj0LTQsNC70LXQvdC40LUg0YDQsNCx0L7Rh9C40YUg0LrQsNGC0LDQu9C+0LPQvtCyLyVzOiBnaXRkaXIg0YPQutCw0LfRi9Cy0LDQtdGCINC90LAg0L3QtdGB0YPRidC10YHRgtCy0YPRjtGJ0LXQtSDRgNCw0YHQv9C+0LvQvtC20LXQvdC40LUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHJlbW92ZTogJXMiCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Yw6ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIsKrJXPCuyDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0LfQtNCw0YLRjCDQutCw0YLQsNC70L7QsyDCqyVzwrsiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nICVzIChpZGVudGlmaWVyICVzKSIKK21zZ3N0ciAi0J/QvtC00LPQvtGC0L7QstC60LAgJXMgKNC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMxNgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAi0L/QtdGA0LXQudGC0Lgg0L3QsCA80LLQtdGC0LrQsD4g0LTQsNC20LUg0LXRgdC70Lgg0L7QvdCwINGD0LbQtSDQsNC60YLQuNCy0L3QsCDQsiDQtNGA0YPQs9C+0Lwg0YDQsNCx0L7Rh9C10YHQvCDQutCw0YLQsNC70L7Qs9C1IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzE4Cittc2dpZCAiY3JlYXRlIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAi0YHQvtC30LTQsNGC0Ywg0L3QvtCy0YPRjiDQstC10YLQutGDIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzIwCittc2dpZCAiY3JlYXRlIG9yIHJlc2V0IGEgYnJhbmNoIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDQuNC70Lgg0L/QtdGA0LXQudGC0Lgg0L3QsCDQstC10YLQutGDIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzIxCittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICLQvtGC0YHQvtC10LTQuNC90LjRgtGMIEhFQUQg0L3QsCDRg9C60LDQt9Cw0L3QvdC+0Lwg0LrQvtC80LzQuNGC0LUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMjgKK21zZ2lkICItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICItYiwgLUIg0LggLS1kZXRhY2gg0L3QtdC70YzQt9GPINC40YHQv9C+0LvRjNC30L7QstCw0YLRjCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjEzCittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD080L/RgNC10YTQuNC60YE+L10iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICI80L/RgNC10YTQuNC60YE+LyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjcKK21zZ2lkICJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iCittc2dzdHIgItCy0YvQstC10YHRgtC4INC+0LHRitC10LrRgiDQtNC10YDQtdCy0LAg0LTQu9GPINC/0L7QtNC60LDRgtCw0LvQvtCz0LAg0YEgPNC/0YDQtdGE0LjQutGBPiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzAKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0YLQvtC70YzQutC+INC/0YDQuCDQvtGC0LvQsNC00LrQtSIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjU1Cittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAi0LLRi9Cy0L7QtCDQvtGC0LvQsNC00L7Rh9C90YvRhSDRgdC+0L7QsdGJ0LXQvdC40Lkg0L3QsCBzdGRlcnIiCisKKyM6IGdpdC5jOjE0Cittc2dpZCAiIgorIidnaXQgaGVscCAtYScgYW5kICdnaXQgaGVscCAtZycgbGlzdCBhdmFpbGFibGUgc3ViY29tbWFuZHMgYW5kIHNvbWVcbiIKKyJjb25jZXB0IGd1aWRlcy4gU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIG9yICdnaXQgaGVscCA8Y29uY2VwdD4nXG4iCisidG8gcmVhZCBhYm91dCBhIHNwZWNpZmljIHN1YmNvbW1hbmQgb3IgY29uY2VwdC4iCittc2dzdHIgIsKrZ2l0IGhlbHAgLdCwwrsg0LggwqtnaXQgaGVscCAtZ8K7INCy0YvQstC+0LTQuNGCINGB0L/QuNGB0L7QuiDQtNC+0YHRgtGD0L/QvdGL0YUg0L/QvtC00LrQvtC80LDQvdC0INC4XG7QvdC10LrQvtGC0L7RgNGL0LUg0YDRg9C60L7QstC+0LTRgdGC0LLQsCDQv9C+INGC0LXQvNCw0LwuINCX0LDQv9GD0YHRgtC40YLQtSDCq2dpdCBoZWxwIDzQutC+0LzQsNC90LTQsD7CuyDQuNC70LhcbsKrZ2l0IGhlbHAgPNGC0LXRgNC80LjQvT7Cuywg0YfRgtC+0LHRiyDQv9GA0L7Rh9C10YHRgtGMINC+INC60L7QvdC60YDQtdGC0L3Ri9GFINC/0L7QtNC60L7QvNCw0L3QtNC1INC40LvQuCDRgtC10LzQtS4iCisKKyM6IGNvbW1vbi1jbWRzLmg6OQorbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICLRgdC+0LfQtNCw0YLRjCDRgNCw0LHQvtGH0YPRjiDQvtCx0LvQsNGB0YLRjCAo0YHQvNC+0YLRgNC40YLQtSDRgtCw0LrQttC1OiBnaXQgaGVscCB0dXRvcmlhbCkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTAKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAi0YDQsNCx0L7RgtCwINGBINGC0LXQutGD0YnQuNC80Lgg0LjQt9C80LXQvdC10L3QuNGP0LzQuCAo0YHQvNC+0YLRgNC40YLQtSDRgtCw0LrQttC1OiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTEKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgItC/0YDQvtGB0LzQvtGC0YAg0LjRgdGC0L7RgNC40Lgg0Lgg0YLQtdC60YPRidC10LPQviDRgdC+0YHRgtC+0Y/QvdC40Y8gKNGB0LzQvtGC0YDQuNGC0LUg0YLQsNC60LbQtTogZ2l0IGhlbHAgcmV2aXNpb25zKSIKKworIzogY29tbW9uLWNtZHMuaDoxMgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgItCy0YvRgNCw0YnQuNCy0LDQvdC40LUsINC+0YLQvNC10YLQutCwINC4INC90LDRgdGC0YDQvtC50LrQsCDQstCw0YjQtdC5INC+0LHRidC10Lkg0LjRgdGC0L7RgNC40LgiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTMKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgItGB0L7QstC80LXRgdGC0L3QsNGPINGA0LDQsdC+0YLQsCAo0YHQvNC+0YLRgNC40YLQtSDRgtCw0LrQttC1OiBnaXQgaGVscCB3b3JrZmxvd3MpIgorCisjOiBjb21tb24tY21kcy5oOjE3Cittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICLQlNC+0LHQsNCy0LvQtdC90LjQtSDRgdC+0LTQtdGA0LbQuNC80L7Qs9C+INGE0LDQudC70LAg0LIg0LjQvdC00LXQutGBIgorCisjOiBjb21tb24tY21kcy5oOjE4Cittc2dpZCAiVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAi0JjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC00LLQvtC40YfQvdGL0Lkg0L/QvtC40YHQuiDQuNC30LzQtdC90LXQvdC40Y8sINC60L7RgtC+0YDQvtC1INCy0L3QvtGB0LjRgiDQvtGI0LjQsdC60YMiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTkKK21zZ2lkICJMaXN0LCBjcmVhdGUsIG9yIGRlbGV0ZSBicmFuY2hlcyIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDRgdC/0LjRgdC60LAsINGB0L7Qt9C00LDQvdC40LUg0LjQu9C4INGD0LTQsNC70LXQvdC40LUg0LLQtdGC0L7QuiIKKworIzogY29tbW9uLWNtZHMuaDoyMAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAi0J/QtdGA0LXQutC70Y7Rh9C10L3QuNC1INCy0LXRgtC+0Log0LjQu9C4INCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40LUg0YTQsNC50LvQvtCyINCyINGA0LDQsdC+0YfQtdC8INC60LDRgtCw0LvQvtCz0LUiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjEKK21zZ2lkICJDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnkiCittc2dzdHIgItCa0LvQvtC90LjRgNC+0LLQsNC90LjQtSDRgNC10L/QvtC30LjRgtC+0YDQuNGPINCyINC90L7QstGL0Lkg0LrQsNGC0LDQu9C+0LMiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjIKK21zZ2lkICJSZWNvcmQgY2hhbmdlcyB0byB0aGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0JfQsNC/0LjRgdGMINC40LfQvNC10L3QtdC90LjQuSDQsiDRgNC10L/QvtC30LjRgtC+0YDQuNC5IgorCisjOiBjb21tb24tY21kcy5oOjIzCittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAi0JLRi9Cy0L7QtCDRgNCw0LfQvdC40YbRiyDQvNC10LbQtNGDINC60L7QvNC80LjRgtCw0LzQuCwg0LrQvtC80LzQuNGC0L7QvCDQuCDRgNCw0LHQvtGH0LjQvCDQutCw0YLQsNC70L7Qs9C+0Lwg0Lgg0YIu0LQuIgorCisjOiBjb21tb24tY21kcy5oOjI0Cittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAi0JfQsNCz0YDRg9C30LrQsCDQvtCx0YrQtdC60YLQvtCyINC4INGB0YHRi9C70L7QuiDQuNC3INC00YDRg9Cz0L7Qs9C+INGA0LXQv9C+0LfQuNGC0L7RgNC40Y8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjUKK21zZ2lkICJQcmludCBsaW5lcyBtYXRjaGluZyBhIHBhdHRlcm4iCittc2dzdHIgItCS0YvQstC+0LQg0YHRgtGA0L7Quiwg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnQuNGFINGI0LDQsdC70L7QvdGDIgorCisjOiBjb21tb24tY21kcy5oOjI2Cittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgItCh0L7Qt9C00LDQvdC40LUg0L/Rg9GB0YLQvtCz0L4g0YDQtdC/0L7Qt9C40YLQvtGA0LjRjyBHaXQg0LjQu9C4INGA0LXQuNC90LjRhtC40LDQu9C40LfQsNGG0LjRjyDRgdGD0YnQtdGB0YLQstGD0Y7RidC10LPQviIKKworIzogY29tbW9uLWNtZHMuaDoyNworbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgItCS0YvQstC+0LQg0LjRgdGC0L7RgNC40Lgg0LrQvtC80LzQuNGC0L7QsiIKKworIzogY29tbW9uLWNtZHMuaDoyOAorbXNnaWQgIkpvaW4gdHdvIG9yIG1vcmUgZGV2ZWxvcG1lbnQgaGlzdG9yaWVzIHRvZ2V0aGVyIgorbXNnc3RyICLQntCx0YrQtdC00LjQvdC10L3QuNC1INC+0LTQvdC+0Lkg0LjQu9C4INC90LXRgdC60L7Qu9GM0LrQuNGFINC40YHRgtC+0YDQuNC5INGA0LDQt9GA0LDQsdC+0YLQutC4INCy0LzQtdGB0YLQtSIKKworIzogY29tbW9uLWNtZHMuaDoyOQorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAi0J/QtdGA0LXQvNC10YnQtdC90LjQtSDQuNC70Lgg0L/QtdGA0LXQuNC80LXQvdC+0LLQsNC90LjQtSDRhNCw0LnQu9CwLCDQutCw0YLQsNC70L7Qs9CwINC40LvQuCDRgdC40LzQstC+0LvRjNC90L7QuSDRgdGB0YvQu9C60LgiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzAKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgItCY0LfQstC70LXRh9C10L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQuCDQvtCx0YrQtdC00LjQvdC10L3QuNC1INGBINC00YDRg9Cz0LjQvCDRgNC10L/QvtC30LjRgtC+0YDQuNC10Lwg0LjQu9C4INC70L7QutCw0LvRjNC90L7QuSDQstC10YLQutC+0LkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzEKK21zZ2lkICJVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgItCe0LHQvdC+0LLQu9C10L3QuNC1INCy0L3QtdGI0L3QuNGFINGB0YHRi9C70L7QuiDQuCDRgdCy0Y/Qt9Cw0L3QvdGL0YUg0L7QsdGK0LXQutGC0L7QsiIKKworIzogY29tbW9uLWNtZHMuaDozMgorbXNnaWQgIkZvcndhcmQtcG9ydCBsb2NhbCBjb21taXRzIHRvIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQiCittc2dzdHIgItCf0LXRgNC10LzQtdGJ0LXQvdC40LUg0LvQvtC60LDQu9GM0L3Ri9GFINC60L7QvNC80LjRgtC+0LIg0L3QsNC0INC+0LHQvdC+0LLQu9C10L3QvdC+0Lkg0LLRi9GI0LXRgdGC0L7Rj9GJ0LXQuSDQstC10YLQutC+0LkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzMKK21zZ2lkICJSZXNldCBjdXJyZW50IEhFQUQgdG8gdGhlIHNwZWNpZmllZCBzdGF0ZSIKK21zZ3N0ciAi0KHQsdGA0L7RgSDRgtC10LrRg9GJ0LXQs9C+INGB0L7RgdGC0L7Rj9C90LjRjyBIRUFEINC90LAg0YPQutCw0LfQsNC90L3QvtC1INGB0L7RgdGC0L7Rj9C90LjQtSIKKworIzogY29tbW9uLWNtZHMuaDozNAorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICLQo9C00LDQu9C10L3QuNC1INGE0LDQudC70L7QsiDQuNC3INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCDQuCDQuNC90LTQtdC60YHQsCIKKworIzogY29tbW9uLWNtZHMuaDozNQorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICLQktGL0LLQvtC0INGA0LDQt9C70LjRh9C90YvRhSDRgtC40L/QvtCyINC+0LHRitC10LrRgtC+0LIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzYKK21zZ2lkICJTaG93IHRoZSB3b3JraW5nIHRyZWUgc3RhdHVzIgorbXNnc3RyICLQktGL0LLQvtC0INGB0L7RgdGC0L7Rj9C90LjRjyDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzcKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAi0KHQvtC30LTQsNC90LjQtSwg0LLRi9Cy0L7QtCDRgdC/0LjRgdC60LAsINGD0LTQsNC70LXQvdC40LUg0LjQu9C4INC/0YDQvtCy0LXRgNC60LAg0LzQtdGC0LrQuCwg0L/QvtC00L/QuNGB0LDQvdC90L7QuSDRgSDQv9C+0LzQvtGJ0YzRjiBHUEciCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNDUKK21zZ2lkICJleHBpcnktZGF0ZSIKK21zZ3N0ciAi0LTQsNGC0LAt0L7QutC+0L3Rh9Cw0L3QuNGPIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MTYwCittc2dpZCAibm8tb3AgKGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIgorbXNnc3RyICLQvdC40YfQtdCz0L4g0L3QtSDQtNC10LvQsNC10YIgKNC+0YHRgtCw0LLQu9C10L3QviDQtNC70Y8g0L7QsdGA0LDRgtC90L7QuSDRgdC+0LLQvNC10YHRgtC40LzQvtGB0YLQuCkiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyMzYKK21zZ2lkICJiZSBtb3JlIHZlcmJvc2UiCittc2dzdHIgItCx0YvRgtGMINC80L3QvtCz0L7RgdC70L7QstC90LXQtSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIzOAorbXNnaWQgImJlIG1vcmUgcXVpZXQiCittc2dzdHIgItGC0LjRhdC40Lkg0YDQtdC20LjQvCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjI0NAorbXNnaWQgInVzZSA8bj4gZGlnaXRzIHRvIGRpc3BsYXkgU0hBLTFzIgorbXNnc3RyICLQuNGB0L/QvtC70YzQt9C+0LLQsNGC0YwgPG4+INGG0LjRhNGAINC00LvRjyDQstGL0LLQvtC00LAgU0hBLTEiCisKKyM6IHJlcmVyZS5oOjI4Cittc2dpZCAidXBkYXRlIHRoZSBpbmRleCB3aXRoIHJldXNlZCBjb25mbGljdCByZXNvbHV0aW9uIGlmIHBvc3NpYmxlIgorbXNnc3RyICLQvtCx0L3QvtCy0LjRgtGMINC40L3QtNC10LrRgSDRgSDQv9C+0LzQvtGJ0YzRjiDQv9C10YDQtdC40YHQv9C+0LvRjNC30L7QstCw0L3QuNGPINGA0LDQt9GA0LXRiNC10L3QuNGPINC60L7QvdGE0LvQuNC60YLQsCwg0LXRgdC70Lgg0LLQvtC30LzQvtC20L3QviIKKworIzogZ2l0LWJpc2VjdC5zaDo1MAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICLQktCw0Lwg0L3Rg9C20L3QviDQvdCw0YfQsNGC0Ywg0YEg0L/QvtC80L7RidGM0Y4gwqtnaXQgYmlzZWN0IHN0YXJ0wrsiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo1NgorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAi0JLRiyDRg9Cy0LXRgNC10L3Riywg0YfRgtC+INGF0L7RgtC40YLQtSwg0YfRgtC+0LHRiyDRjyDRgdC00LXQu9Cw0Lsg0Y3RgtC+IFtZIC0g0LTQsC9uIC0g0L3QtdGCXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJGFyZyciCittc2dzdHIgItC90LXQvtC/0L7Qt9C90LDQvdC90LDRjyDQvtC/0YbQuNGPOiDCqyRhcmfCuyIKKworIzogZ2l0LWJpc2VjdC5zaDoxMDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiwqskYXJnwrsg0L3QtSDQv9C+0YXQvtC20LUg0L3QsCDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Rg9GOINGA0LXQtNCw0LrRhtC40Y4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMyCittc2dpZCAiQmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICLQn9C70L7RhdC+0Lkg0YPQutCw0LfQsNGC0LXQu9GMIEhFQUQg4oCUINCd0LXQvtCx0YXQvtC00LjQvCDRg9C60LDQt9Cw0YLQtdC70YwgSEVBRCIKKworIzogZ2l0LWJpc2VjdC5zaDoxNDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVja2luZyBvdXQgJyRzdGFydF9oZWFkJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICLQodCx0L7QuSDQv9C10YDQtdGF0L7QtNCwINC90LAgwqskc3RhcnRfaGVhZMK7LiDQn9C+0L/RgNC+0LHRg9C50YLQtSDQstGL0L/QvtC70L3QuNGC0YwgwqtnaXQgYmlzZWN0IHJlc2V0IDzRgdGD0YnQtdGB0YLQstGD0Y7RidCw0Y8t0LLQtdGC0LrQsD7Cuy4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MTU1Cittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAi0L3QtdC70YzQt9GPINCy0YvQv9C+0LvQvdC40YLRjCDQtNCy0L7QuNGH0L3Ri9C5INC/0L7QuNGB0Log0L3QsCDQtNC10YDQtdCy0LUg0L/QvtGB0LvQtSBjZy1zZWVrIgorCisjOiBnaXQtYmlzZWN0LnNoOjE1OQorbXNnaWQgIkJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgItCf0LvQvtGF0L7QuSDRg9C60LDQt9Cw0YLQtdC70YwgSEVBRCDigJQg0YHRgtGA0LDQvdC90LDRjyDRgdC40LzQstC+0LvRjNC90LDRjyDRgdGB0YvQu9C60LAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAkc3RhdGUiCittc2dzdHIgItCf0LvQvtGF0L7QuSDQsNGA0LPRg9C80LXQvdGCIGJpc2VjdF93cml0ZTogJHN0YXRlIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAi0J/Qu9C+0YXQvtC5INCy0LLQvtC0INC90L7QvNC10YDQsCDRgNC10LTQsNC60YbQuNC4OiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjI1NQorbXNnaWQgIlBsZWFzZSBjYWxsICdiaXNlY3Rfc3RhdGUnIHdpdGggYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0YvQt9GL0LLQsNC50YLQtSDCq2Jpc2VjdF9zdGF0ZcK7INC60LDQuiDQvNC40L3QuNC80YPQvCDRgSDQvtC00L3QuNC8INCw0YDQs9GD0LzQtdC90YLQvtC8LiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCByZXYgaW5wdXQ6ICRyZXYiCittc2dzdHIgItCf0LvQvtGF0L7QuSDQstCy0L7QtCDQvdC+0LzQtdGA0LAg0YDQtdC00LDQutGG0LjQuDogJHJldiIKKworIzogZ2l0LWJpc2VjdC5zaDoyNzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcgY2FuIHRha2Ugb25seSBvbmUgYXJndW1lbnQuIgorbXNnc3RyICLCq2dpdCBiaXNlY3QgJFRFUk1fQkFEwrsg0LzQvtC20LXRgiDQv9GA0LjQvdC40LzQsNGC0Ywg0YLQvtC70YzQutC+INC+0LTQuNC9INCw0YDQs9GD0LzQtdC90YIuIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmlzZWN0aW5nIG9ubHkgd2l0aCBhICRURVJNX0JBRCBjb21taXQuIgorbXNnc3RyICLQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiDQv9C+0L/Ri9GC0LrQsCDQtNCy0L7QuNGH0L3QvtCz0L4g0L/QvtC40YHQutCwINGBINGD0LrQsNC30LDQvdC40LXQvCDRgtC+0LvRjNC60L4gJFRFUk1fQkFEINC60L7QvNC80LjRgtCwLiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjMwNQorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICLQktGLINGD0LLQtdGA0LXQvdGLIFtZIC0g0LTQsC9uIC0g0L3QtdGCXT8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjMxNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIllvdSBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICRiYWRfc3luIGFuZCBvbmUgJGdvb2Rfc3luIHJldmlzaW9uLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBhbmQgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIGZvciB0aGF0LikiCittc2dzdHIgItCS0LDQvCDQvdGD0LbQvdC+INC/0LXRgNC10LTQsNGC0Ywg0LzQvdC1INC60LDQuiDQvNC40L3QuNC80YPQvCDQvtC00L3RgyAkYmFkX3N5biDQuCDQvtC00L3RgyAkZ29vZF9zeW4g0YDQtdC00LDQutGG0LjRji5cbijQlNC70Y8g0Y3RgtC+0LPQviDQstGLINC80L7QttC10YLQtSDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0LrQvtC80LDQvdC00YsgwqtnaXQgYmlzZWN0ICRiYWRfc3luwrsg0LggwqtnaXQgYmlzZWN0ICRnb29kX3N5bsK7LikiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzIwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIuXG4iCisiWW91IHRoZW4gbmVlZCB0byBnaXZlIG1lIGF0IGxlYXN0IG9uZSAkZ29vZF9zeW4gYW5kIG9uZSAkYmFkX3N5biByZXZpc2lvbi5cbiIKKyIoWW91IGNhbiB1c2UgXCJnaXQgYmlzZWN0ICRiYWRfc3luXCIgYW5kIFwiZ2l0IGJpc2VjdCAkZ29vZF9zeW5cIiBmb3IgdGhhdC4pIgorbXNnc3RyICLQlNC70Y8g0L3QsNGH0LDQu9CwINC90YPQttC90L4g0LfQsNC/0YPRgdGC0LjRgtGMIMKrZ2l0IGJpc2VjdCBzdGFydMK7Llxu0J/QvtGB0LvQtSDRjdGC0L7Qs9C+LCDQstCw0Lwg0L3Rg9C20L3QviDQv9C10YDQtdC00LDRgtGMINC80L3QtSDQutCw0Log0LzQuNC90LjQvNGD0Lwg0L7QtNC90YMgJGdvb2Rfc3luINC4INC+0LTQvdGDICRiYWRfc3luINGA0LXQtNCw0LrRhtC40Y4uXG4o0JTQu9GPINGN0YLQvtCz0L4g0LLRiyDQvNC+0LbQtdGC0LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC60L7QvNCw0L3QtNGLIMKrZ2l0IGJpc2VjdCAkZ29vZF9zeW7CuyDQuCDCq2dpdCBiaXNlY3QgJGdvb2Rfc3luwrsuKSIKKworIzogZ2l0LWJpc2VjdC5zaDozOTEgZ2l0LWJpc2VjdC5zaDo1MjEKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy4iCittc2dzdHIgItCS0Ysg0YHQtdC50YfQsNGBINC90LUg0LIg0L/RgNC+0YbQtdGB0YHQtSDQsdC40L3QsNGA0L3QvtCz0L4g0L/QvtC40YHQutCwLiIKKworIzogZ2l0LWJpc2VjdC5zaDozOTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickaW52YWxpZCcgaXMgbm90IGEgdmFsaWQgY29tbWl0IgorbXNnc3RyICLCqyRpbnZhbGlkwrsg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0Lwg0LrQvtC80LzQuNGC0L7QvCIKKworIzogZ2l0LWJpc2VjdC5zaDo0MDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyRicmFuY2gnLlxuIgorIlRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LnRgtC4INC90LAg0L7RgNC40LPQuNC90LDQu9GM0L3Rg9GOINCy0LXRgtC60YMgSEVBRCDCqyRicmFuY2jCuy5cbtCf0L7Qv9GA0L7QsdGD0LnRgtC1INC30LDQv9GD0YHRgtC40YLRjCDCq2dpdCBiaXNlY3QgcmVzZXQgPNC60L7QvNC80LjRgj7Cuy4iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDM1Cittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAi0J3QtSDQv9C10YDQtdC00LDQvSDRhNCw0LnQuyDQttGD0YDQvdCw0LvQsCIKKworIzogZ2l0LWJpc2VjdC5zaDo0MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgItC90LUg0YPQtNCw0LvQvtGB0Ywg0L/RgNC+0YfQuNGC0LDRgtGMICRmaWxlINC00LvRjyDQv9C+0LLRgtC+0YDQsCDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDU1Cittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyDQstGLINC+INGH0LXQvD8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICLQt9Cw0L/Rg9GB0LrQsNGOICRjb21tYW5kIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICLQvdC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDQtNCy0L7QuNGH0L3Ri9C5INC/0L7QuNGB0Lo6XG7QutC+0LQg0LfQsNCy0LXRgNGI0LXQvdC40Y8gJHJlcyDQvtGCIMKrJGNvbW1hbmTCuyDQvtC60LDQt9Cw0LvRgdGPIDwgMCDQuNC70LggPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjUwMAorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJiaXNlY3QgcnVuINCx0L7Qu9GM0YjQtSDQvdC1INC80L7QttC10YIg0L/RgNC+0LTQvtC70LbQsNGC0YwiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTA2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQstGL0L/QvtC70L3QuNGC0Ywg0LTQstC+0LjRh9C90YvQuSDQv9C+0LjRgdC6OlxuwqtiaXNlY3Rfc3RhdGUgJHN0YXRlwrsg0LfQsNCy0LXRgNGI0LjQu9GB0Y8g0YEg0LrQvtC00L7QvCDQvtGI0LjQsdC60LggJHJlcyIKKworIzogZ2l0LWJpc2VjdC5zaDo1MTMKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgImJpc2VjdCBydW4g0LLRi9C/0L7Qu9C90LXQvSDRg9GB0L/QtdGI0L3QviIKKworIzogZ2l0LWJpc2VjdC5zaDo1NDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICRURVJNX0JBRC8kVEVSTV9HT09EIGJpc2VjdC4iCittc2dzdHIgItCd0LXQtNC+0L/Rg9GB0YLQuNC80LDRjyDQutC+0LzQsNC90LTQsDog0LLRiyDRgdC10LnRh9Cw0YEg0L3QsNGF0L7QtNC40YLQtdGB0Ywg0L3QsCAkVEVSTV9CQUQvJFRFUk1fR09PRCDQtNCy0L7QuNGH0L3QvtC8INC/0L7QuNGB0LrQtS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTcKK21zZ2lkICIiCisiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCJnaXQgcmViYXNlIC0tc2tpcFwiIGluc3RlYWQuXG4iCisiVG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcmViYXNpbmcsIHJ1biBcImdpdCByZWJhc2UgLS1hYm9ydFwiLiIKK21zZ3N0ciAi0JrQvtCz0LTQsCDQstGLINGA0LDQt9GA0LXRiNC40YLQtSDRjdGC0L7RgiDQutC+0L3RhNC70LjQutGCLCDQt9Cw0L/Rg9GB0YLQuNGC0LUgwqtnaXQgcmViYXNlIC0tY29udGludWXCuy5cbtCV0YHQu9C4INCy0Ysg0YXQvtGC0LjRgtC1INC/0YDQvtC/0YPRgdGC0LjRgtGMINGN0YLQvtGCINC/0LDRgtGHLCDRgtC+INC30LDQv9GD0YHRgtC40YLQtSDCq2dpdCByZWJhc2UgLS1za2lwwrsuXG7Qp9GC0L7QsdGLINC/0LXRgNC10LnRgtC4INC90LAg0L7RgNC40LPQuNC90LDQu9GM0L3Rg9GOINCy0LXRgtC60YMg0Lgg0L7RgdGC0LDQvdC+0LLQuNGC0Ywg0L/QtdGA0LXQvNC10YnQtdC90LjQtSwg0LfQsNC/0YPRgdGC0LjRgtC1IMKrZ2l0IHJlYmFzZSAtLWFib3J0wrsuIgorCisjOiBnaXQtcmViYXNlLnNoOjE2NQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAi0J/RgNC40LzQtdC90LXQvdC+INCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LUg0L/RgNGP0YLQsNC90YzQtS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTY4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YHQvtGF0YDQsNC90LjRgtGMICRzdGFzaF9zaGExIgorCisjOiBnaXQtcmViYXNlLnNoOjE2OQorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICLQn9GA0LjQvNC10L3QtdC90LjQtSDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtCz0L4g0L/RgNGP0YLQsNC90YzRjyDQstGL0LfQstCw0LvQviDQutC+0L3RhNC70LjQutGC0YsuXG7QktCw0YjQuCDQuNC30LzQtdC90LXQvdC40Y8g0YHQv9GA0Y/RgtCw0L3RiyDQuCDQsiDQsdC10LfQvtC/0LDRgdC90L7RgdGC0LguXG7QktGLINC80L7QttC10YLQtSDQstGL0L/QvtC70L3QuNGC0YwgwqtnaXQgc3Rhc2ggcG9wwrsg0LjQu9C4IMKrZ2l0IHN0YXNoIGRyb3DCuyDQsiDQu9GO0LHQvtC5INC80L7QvNC10L3Rgi5cbiIKKworIzogZ2l0LXJlYmFzZS5zaDoyMDgKK21zZ2lkICJUaGUgcHJlLXJlYmFzZSBob29rIHJlZnVzZWQgdG8gcmViYXNlLiIKK21zZ3N0ciAi0J/QtdGA0LXRhdCy0LDRgtGH0LjQuiDQv9GA0LUt0L/QtdGA0LXQvNC10YnQtdC90LjRjyDQvtGC0LrQsNC30LDQuyDQsiDQv9C10YDQtdC80LXRidC10L3QuNC4LiIKKworIzogZ2l0LXJlYmFzZS5zaDoyMTMKK21zZ2lkICJJdCBsb29rcyBsaWtlIGdpdC1hbSBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgItCf0L7RhdC+0LbQtSwgZ2l0LWFtINCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8uINCf0LXRgNC10LzQtdGJ0LXQvdC40LUg0L3QtdCy0L7Qt9C80L7QttC90L4uIgorCisjOiBnaXQtcmViYXNlLnNoOjM1MQorbXNnaWQgIlRoZSAtLWV4ZWMgb3B0aW9uIG11c3QgYmUgdXNlZCB3aXRoIHRoZSAtLWludGVyYWN0aXZlIG9wdGlvbiIKK21zZ3N0ciAi0J7Qv9GG0LjRjyAtLWV4ZWMg0LTQvtC70LbQvdCwINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0LLQvNC10YHRgtC1INGBINC+0L/RhtC40LXQuSAtLWludGVyYWN0aXZlIgorCisjOiBnaXQtcmViYXNlLnNoOjM1NgorbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgItCd0LXRgiDQv9C10YDQtdC80LXRidC10L3QuNGPINCyINC/0YDQvtGG0LXRgdGB0LU/IgorCisjOiBnaXQtcmViYXNlLnNoOjM2NworbXNnaWQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIKK21zZ3N0ciAi0JTQtdC50YHRgtCy0LjQtSAtLWVkaXQtdG9kbyDQvNC+0LbQtdGCINC40YHQv9C+0LvRjNC30L7QstCw0YLRjNGB0Y8g0YLQvtC70YzQutC+INC/0YDQuCDQuNC90YLQtdGA0LDQutGC0LjQstC90L7QvCDQv9C10YDQtdC80LXRidC10L3QuNC4LiIKKworIzogZ2l0LXJlYmFzZS5zaDozNzQKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0YDQvtGH0LjRgtCw0YLRjCBIRUFEIgorCisjOiBnaXQtcmViYXNlLnNoOjM3NworbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAi0JLRiyDQtNC+0LvQttC90Ysg0L7RgtGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINCy0YHQtVxu0LrQvtC90YTQu9C40LrRgtGLINGB0LvQuNGP0L3QuNGPLCDQsCDQv9C+0YLQvtC8INC/0L7QvNC10YLQuNGC0YxcbtC40YUg0LrQsNC6INGA0LDQt9GA0LXRiNC10L3QvdGL0LUg0YEg0L/QvtC80L7RidGM0Y4gZ2l0IGFkZCIKKworIzogZ2l0LXJlYmFzZS5zaDozOTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtb3ZlIGJhY2sgdG8gJGhlYWRfbmFtZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDQv9C10YDQtdC50YLQuCDQvdCw0LfQsNC0INC90LAgJGhlYWRfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo0MTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAkc3RhdGVfZGlyX2Jhc2UgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuIgorbXNnc3RyICLQn9C+0YXQvtC20LUsINC60LDRgtCw0LvQvtCzICRzdGF0ZV9kaXJfYmFzZSDRg9C20LUg0YHRg9GJ0LXRgdGC0LLRg9C10YIg0Lgg0Y8g0L/RgNC10LTQv9C+0LvQsNCz0LDRjiwg0YfRgtC+INCy0Ysg0LIg0L/RgNC+0YbQtdGB0YHQtSDQtNGA0YPQs9C+0LPQviDQv9C10YDQtdC80LXRidC10L3QuNGPLiAg0JXRgdC70Lgg0Y3RgtC+INGC0LDQuiwg0L/QvtC/0YDQvtCx0YPQudGC0LVcblx0JGNtZF9saXZlX3JlYmFzZVxu0JXRgdC70Lgg0L3QtdGCXG5cdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG7QuCDQt9Cw0L/Rg9GB0YLQuNGC0LUg0LzQtdC90Y8g0YHQvdC+0LLQsC4gINCvINC+0YHRgtCw0L3QsNCy0LvQuNCy0LDRjtGB0YwsINGH0YLQvtCx0Ysg0LLRiyDQvdC1INC/0L7RgtC10YDRj9C70Lgg0YfRgtC+LdGC0L4g0LLQsNC20L3QvtC1LiIKKworIzogZ2l0LXJlYmFzZS5zaDo0NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJHVwc3RyZWFtX25hbWUiCittc2dzdHIgItC90LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QsNGPINCy0YvRiNC10YHRgtC+0Y/RidCw0Y8g0LLQtdGC0LrQsCAkdXBzdHJlYW1fbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo0ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIgorbXNnc3RyICIkb250b19uYW1lOiDQuNC80LXQtdGC0YHRjyDQsdC+0LvRjNGI0LUg0L7QtNC90L7QuSDQsdCw0LfRiyDRgdC70LjRj9C90LjRjyIKKworIzogZ2l0LXJlYmFzZS5zaDo0OTIgZ2l0LXJlYmFzZS5zaDo0OTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGlzIG5vIG1lcmdlIGJhc2UiCittc2dzdHIgIiRvbnRvX25hbWU6INC90LXRgiDQsdCw0LfRiyDRgdC70LjRj9C90LjRjyIKKworIzogZ2l0LXJlYmFzZS5zaDo1MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRvZXMgbm90IHBvaW50IHRvIGEgdmFsaWQgY29tbWl0OiAkb250b19uYW1lIgorbXNnc3RyICLQndC1INGD0LrQsNC30LDRi9Cy0LDQtdGCINC90LAg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90YvQuSDQutC+0LzQvNC40YI6ICRvbnRvX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJmYXRhbDogbm8gc3VjaCBicmFuY2g6ICRicmFuY2hfbmFtZSIKK21zZ3N0ciAi0LrRgNC40YLQuNGH0LXRgdC60LDRjyDQvtGI0LjQsdC60LA6INC90LXRgiDRgtCw0LrQvtC5INCy0LXRgtC60Lg6ICRicmFuY2hfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo1NTcKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtC1INC/0YDRj9GC0LDQvdGM0LUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTYyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJHN0YXNoX2FiYnJldiIKK21zZ3N0ciAi0JjQt9C80LXQvdC10L3QuNGPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC4INGB0L/RgNGP0YLQsNC90Ys6ICRzdGFzaF9hYmJyZXYiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTY2Cittc2dpZCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAi0KHQtNC10LvQsNC50YLQtSDQutC+0LzQvNC40YIg0LjQu9C4INGB0L/RgNGP0YfRjNGC0LUg0LjRhS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTg2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZS4iCittc2dzdHIgItCi0LXQutGD0YnQsNGPINCy0LXRgtC60LAgJGJyYW5jaF9uYW1lINGD0LbQtSDRgdCy0LXQttCw0Y8uIgorCisjOiBnaXQtcmViYXNlLnNoOjU5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUsIHJlYmFzZSBmb3JjZWQuIgorbXNnc3RyICLQotC10LrRg9GJ0LDRjyDQstC10YLQutCwICRicmFuY2hfbmFtZSDRg9C20LUg0YHQstC10LbQsNGPLCDQv9GA0LjQvdGD0LTQuNGC0LXQu9GM0L3QvtC1INC/0LXRgNC10LzQtdGJ0LXQvdC40LUuIgorCisjOiBnaXQtcmViYXNlLnNoOjYwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICRtYiB0byAkb250bzoiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjyDQvtGCICRtYiDQtNC+ICRvbnRvOiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MTAKK21zZ2lkICJGaXJzdCwgcmV3aW5kaW5nIGhlYWQgdG8gcmVwbGF5IHlvdXIgd29yayBvbiB0b3Agb2YgaXQuLi4iCittc2dzdHIgItCh0L3QsNGH0LDQu9CwINC/0LXRgNC10LzQsNGC0YvQstCw0LXQvCDRg9C60LDQt9Cw0YLQtdC70Ywg0YLQtdC60YPRidC10LPQviDQutC+0LzQvNC40YLQsCwg0YfRgtC+0LHRiyDQv9GA0LjQvNC10L3QuNGC0Ywg0LLQsNGI0Lgg0LjQt9C80LXQvdC10L3QuNGPINC/0L7QstC10YDRhSDQvdC10LPQvuKApiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICRicmFuY2hfbmFtZSB0byAkb250b19uYW1lLiIKK21zZ3N0ciAi0J/QtdGA0LXQvNC+0YLQsNC90LAg0LLQv9C10YDQtdC0ICRicmFuY2hfbmFtZSDQtNC+ICRvbnRvX25hbWUuIgorCisjOiBnaXQtc3Rhc2guc2g6NTEKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCDQvtGH0LjRgdGC0LrQsCDRgSDQv9Cw0YDQsNC80LXRgtGA0LDQvNC4INC90LUg0YDQtdCw0LvQuNC30L7QstCw0L3QsCIKKworIzogZ2l0LXN0YXNoLnNoOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIHRoZSBpbml0aWFsIGNvbW1pdCB5ZXQiCittc2dzdHIgItCjINCy0LDRgSDQtdGJ0LUg0L3QtdGCINC90LDRh9Cw0LvRjNC90L7Qs9C+INC60L7QvNC80LjRgtCwIgorCisjOiBnaXQtc3Rhc2guc2g6ODkKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0YXRgNCw0L3QuNGC0Ywg0YLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3QtNC10LrRgdCwIgorCisjOiBnaXQtc3Rhc2guc2g6MTI0IGdpdC1zdGFzaC5zaDoxMzcKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCB3b3JrdHJlZSBzdGF0ZSIKK21zZ3N0ciAi0J3QtSDRg9C00LDQu9C+0YHRjCDRgdC+0YXRgNCw0L3QuNGC0Ywg0YLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogZ2l0LXN0YXNoLnNoOjE0MQorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgItCY0LfQvNC10L3QtdC90LjRjyDQvdC1INCy0YvQsdGA0LDQvdGLIgorCisjOiBnaXQtc3Rhc2guc2g6MTQ0Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0LLRgNC10LzQtdC90L3Ri9C5INC40L3QtNC10LrRgSAo0L3QtSDQtNC+0LvQttC90L4g0YHQu9GD0YfQsNGC0YzRgdGPKSIKKworIzogZ2l0LXN0YXNoLnNoOjE1NworbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC30LDQv9C40YHQsNGC0Ywg0YHQvtGB0YLQvtGP0L3QuNC1INGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogZ2l0LXN0YXNoLnNoOjE4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAkcmVmX3N0YXNoIHdpdGggJHdfY29tbWl0IgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC+0LHQvdC+0LLQuNGC0YwgJHJlZl9zdGFzaCDRgSDQv9C+0LzQvtGJ0YzRjiAkd19jb21taXQiCisKKyMuIFRSQU5TTEFUT1JTOiAkb3B0aW9uIGlzIGFuIGludmFsaWQgb3B0aW9uLCBsaWtlCisjLiBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMuIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKyMuIHVwIHRoZSBzZWNvbmQgbGluZSB3aXRoIGhvd2V2ZXIgbWFueSBjaGFyYWN0ZXJzIHRoZQorIy4gdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKyMuIEVuZ2xpc2ggdGhpcyBpczoKKyMuICQgZ2l0IHN0YXNoIHNhdmUgLS1ibGFoLWJsYWggMj4mMSB8IGhlYWQgLW4gMgorIy4gZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6IC0tYmxhaC1ibGFoCisjLiBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICctLWJsYWgtYmxhaCcKKyM6IGdpdC1zdGFzaC5zaDoyMzkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogJG9wdGlvblxuIgorIiAgICAgICBUbyBwcm92aWRlIGEgbWVzc2FnZSwgdXNlIGdpdCBzdGFzaCBzYXZlIC0tICckb3B0aW9uJyIKK21zZ3N0ciAi0L7RiNC40LHQutCwOiDQvdC10LjQt9Cy0LXRgdGC0L3QsNGPINC+0L/RhtC40Y8g0LTQu9GPIMKrc3Rhc2ggc2F2ZcK7OiAkb3B0aW9uXG4gICAgICAgINCU0LvRjyDQv9GA0LXQtNC+0YHRgtCw0LLQu9C10L3QuNGPINGB0L7QvtCx0YnQtdC90LjRjywg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSBnaXQgc3Rhc2ggc2F2ZSAtLSDCqyRvcHRpb27CuyIKKworIzogZ2l0LXN0YXNoLnNoOjI2MAorbXNnaWQgIk5vIGxvY2FsIGNoYW5nZXMgdG8gc2F2ZSIKK21zZ3N0ciAi0J3QtdGCINC70L7QutCw0LvRjNC90YvRhSDQuNC30LzQtdC90LXQvdC40Lkg0LTQu9GPINGB0L7RhdGA0LDQvdC10L3QuNGPIgorCisjOiBnaXQtc3Rhc2guc2g6MjY0Cittc2dpZCAiQ2Fubm90IGluaXRpYWxpemUgc3Rhc2giCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNGC0Ywg0YHQv9GA0Y/RgtCw0L3QvdGL0LUg0LjQt9C80LXQvdC10L3QuNGPIgorCisjOiBnaXQtc3Rhc2guc2g6MjY4Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDRgtC10LrRg9GJ0LjQuSDRgdGC0LDRgtGD0YEiCisKKyM6IGdpdC1zdGFzaC5zaDoyODYKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0YPQtNCw0LvQuNGC0Ywg0LjQt9C80LXQvdC10L3QuNGPINGA0LDQsdC+0YfQtdCz0L4g0LrQsNGC0LDQu9C+0LPQsCIKKworIzogZ2l0LXN0YXNoLnNoOjM4NworIywgc2gtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICRvcHQiCittc2dzdHIgItC90LXQuNC30LLQtdGB0YLQvdCw0Y8g0L7Qv9GG0LjRjzogJG9wdCIKKworIzogZ2l0LXN0YXNoLnNoOjM5NworbXNnaWQgIk5vIHN0YXNoIGZvdW5kLiIKK21zZ3N0ciAi0J3QtSDQvdCw0LnQtNC10L3RiyDRgdC/0YDRj9GC0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8uIgorCisjOiBnaXQtc3Rhc2guc2g6NDA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICLQn9C10YDQtdC00LDQvdC+INGB0LvQuNGI0LrQvtC8INC80L3QvtCz0L4g0YDQtdC00LDQutGG0LjQuTogJFJFViIKKworIzogZ2l0LXN0YXNoLnNoOjQxMAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHJlZmVyZW5jZSBpcyBub3QgYSB2YWxpZCByZWZlcmVuY2UiCittc2dzdHIgIiRyZWZlcmVuY2Ug0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+0Lkg0YHRgdGL0LvQutC+0LkiCisKKyM6IGdpdC1zdGFzaC5zaDo0MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIsKrJGFyZ3PCuyDQvdC1INC/0L7RhdC+0LbQtSDQvdCwINC60L7QvNC80LjRgiDRgdC+INGB0L/RgNGP0YLQsNC90L3Ri9C80Lgg0LjQt9C80LXQvdC10L3QuNGP0LzQuCIKKworIzogZ2l0LXN0YXNoLnNoOjQ0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIsKrJGFyZ3PCuyDQvdC1INGP0LLQu9GP0LXRgtGB0Y8g0YHRgdGL0LvQutC+0Lkg0L3QsCDRgdC/0YDRj9GC0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8iCisKKyM6IGdpdC1zdGFzaC5zaDo0NTcKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtCx0L3QvtCy0LjRgtGMINC40L3QtNC10LrRgSIKKworIzogZ2l0LXN0YXNoLnNoOjQ2MQorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAi0J3QtdC70YzQt9GPINC/0YDQuNC80LXQvdC40YLRjCDRgdC/0YDRj9GC0LDQvdC90YvQtSDQuNC30LzQtdC90LXQvdC40Y8g0LLQviDQstGA0LXQvNGPINCy0YvQv9C+0LvQvdC10L3QuNGPINGB0LvQuNGP0L3QuNGPIgorCisjOiBnaXQtc3Rhc2guc2g6NDY5Cittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAi0JrQvtC90YTQu9C40LrRgtGLINCyINC40L3QtNC10LrRgdC1LiDQn9C+0L/RgNC+0LHRg9C50YLQtSDQsdC10LcgLS1pbmRleC4iCisKKyM6IGdpdC1zdGFzaC5zaDo0NzEKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7RhdGA0LDQvdC40YLRjCDQtNC10YDQtdCy0L4g0LjQvdC00LXQutGB0LAiCisKKyM6IGdpdC1zdGFzaC5zaDo1MDUKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAi0J3QtdCy0L7Qt9C80L7QttC90L4g0YPQsdGA0LDRgtGMINC40Lcg0LjQvdC00LXQutGB0LAg0LjQt9C80LXQvdC10L3QvdGL0LUg0YTQsNC50LvRiyIKKworIzogZ2l0LXN0YXNoLnNoOjUyMAorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAi0JjQvdC00LXQutGBINC90LUg0LHRi9C7INC00L7RgdGC0LDRgiDQuNC3INGB0L/RgNGP0YLQsNC90L3Ri9GFINC40LfQvNC10L3QtdC90LjQuS4iCisKKyM6IGdpdC1zdGFzaC5zaDo1NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkRyb3BwZWQgJHtSRVZ9ICgkcykiCittc2dzdHIgItCe0YLQsdGA0L7RiNC10L3QviAke1JFVn0gKCRzKSIKKworIzogZ2l0LXN0YXNoLnNoOjU0NAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiDQndC1INGD0LTQsNC70L7RgdGMINC+0YLQsdGA0L7RgdC40YLRjCDQt9Cw0L/QuNGB0Ywg0LjQtyDRgdC/0YDRj9GC0LDQvdC90YvRhSDQuNC30LzQtdC90LXQvdC40LkiCisKKyM6IGdpdC1zdGFzaC5zaDo1NTIKK21zZ2lkICJObyBicmFuY2ggbmFtZSBzcGVjaWZpZWQiCittc2dzdHIgItCd0LUg0YPQutCw0LfQsNC90L4g0LjQvNGPINCy0LXRgtC60LgiCisKKyM6IGdpdC1zdGFzaC5zaDo2MjQKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIijQp9GC0L7QsdGLINCy0L7RgdGB0YLQsNC90L7QstC40YLRjCDQuNGFLCDQvdCw0LHQtdGA0LjRgtC1IMKrZ2l0IHN0YXNoIGFwcGx5wrspIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICckcmVtb3RldXJsJyIKK21zZ3N0ciAi0L3QtSDRg9C00LDQu9C+0YHRjCDQvtGC0YDQtdC30LDRgtGMINC+0LTQuNC9INC60L7QvNC/0L7QvdC10L3RgiDQsNC00YDQtdGB0LAgwqskcmVtb3RldXJswrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICLQndC1INC90LDQudC00LXQvdC+INGB0L7QvtGC0LLQtdGC0YHRgtCy0LjQtSDQv9C+0LTQvNC+0LTRg9C70LXQuSDQsiAuZ2l0bW9kdWxlcyDQtNC70Y8g0L/Rg9GC0Lggwqskc21fcGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4NworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBmYWlsZWQiCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LrQu9C+0L3QuNGA0L7QstCw0YLRjCDCqyR1cmzCuyDQsiDQv9C+0LTQvNC+0LTRg9C70Ywg0L/QviDQv9GD0YLQuCDCqyRzbV9wYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJHaXRkaXIgJyRhJyBpcyBwYXJ0IG9mIHRoZSBzdWJtb2R1bGUgcGF0aCAnJGInIG9yIHZpY2UgdmVyc2EiCittc2dzdHIgItCa0LDRgtCw0LvQvtCzIEdpdCDCqyRhwrsg0Y/QstC70Y/QtdGC0YHRjyDRh9Cw0YHRgtGM0Y4g0L/Rg9GC0Lgg0L/QvtC00LzQvtC00YPQu9GPIMKrJGLCuyDQuNC70Lgg0L3QsNC+0LHQvtGA0L7RgiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MDYKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi0J7RgtC90L7RgdC40YLQtdC70YzQvdGL0Lkg0L/Rg9GC0Ywg0LzQvtC20L3QviDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0YLQvtC70YzQutC+INC90LDRhdC+0LTRj9GB0Ywg0L3QsCDQstC10YDRiNC40L3QtSDRgNCw0LHQvtGH0LXQs9C+INC60LDRgtCw0LvQvtCz0LAiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDE2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICJVUkwg0YDQtdC/0L7Qt9C40YLQvtGA0LjRjzogwqskcmVwb8K7INC00L7Qu9C20LXQvSDQsdGL0YLRjCDQsNCx0YHQvtC70Y7RgtC90YvQvCDQuNC70Lgg0L3QsNGH0LjQvdCw0YLRjNGB0Y8g0YEgLi98Li4vIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQzMworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIsKrJHNtX3BhdGjCuyDRg9C20LUg0YHQvtC00LXRgNC20LjRgtGB0Y8g0LIg0LjQvdC00LXQutGB0LUiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGZvbGxvd2luZyBwYXRoIGlzIGlnbm9yZWQgYnkgb25lIG9mIHlvdXIgLmdpdGlnbm9yZSBmaWxlczpcbiIKKyIkc21fcGF0aFxuIgorIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIGl0LiIKK21zZ3N0ciAi0KHQu9C10LTRg9GO0YnQuNC1INC/0YPRgtC4INC40LPQvdC+0YDQuNGA0YPRjtGC0YHRjyDQvtC00L3QuNC8INC40Lcg0LLQsNGI0LjRhSDRhNCw0LnQu9C+0LIgLmdpdGlnbm9yZTpcbiRzbV9wYXRoXG7QmNGB0L/QvtC70YzQt9GD0LnRgtC1INC+0L/RhtC40Y4gLWYsINC10YHQu9C4INCy0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INC10LPQviDQtNC+0LHQsNCy0LjRgtGMLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICLQlNC+0LHQsNCy0LvRj9GOINGB0YPRidC10YHRgtCy0YPRjtGJ0LjQuSDRgNC10L/QvtC30LjRgtC+0YDQuNC5INC40Lcgwqskc21fcGF0aMK7INCyINC40L3QtNC10LrRgSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICLCqyRzbV9wYXRowrsg0YPQttC1INGB0YPRidC10YHRgtCy0YPQtdGCINC4INC90LUg0Y/QstC70Y/QtdGC0YHRjyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C8INGA0LXQv9C+0LfQuNGC0L7RgNC40LXQvCBnaXQiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDY1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJBIGdpdCBkaXJlY3RvcnkgZm9yICckc21fbmFtZScgaXMgZm91bmQgbG9jYWxseSB3aXRoIHJlbW90ZShzKToiCittc2dzdHIgItCa0LDRgtCw0LvQvtCzIGdpdCDQtNC70Y8gwqskc21fbmFtZcK7INC90LDQudC00LXQvSDQu9C+0LrQsNC70YzQvdC+INC90LAg0LLQvdC10YjQvdC40YUg0YDQtdC/0L7Qt9C40YLQvtGA0LjRj9GFOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb20iCittc2dzdHIgItCV0YHQu9C4INCy0Ysg0YXQvtGC0LjRgtC1INC/0LXRgNC10LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMINC70L7QutCw0LvRjNC90YvQuSDQutCw0YLQsNC70L7QsyBnaXQg0LLQvNC10YHRgtC+INC/0L7QstGC0L7RgNC90L7Qs9C+INC60LvQvtC90LjRgNC+0LLQsNC90LjRjyDQuNC3IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0IHJlcG8iCittc2dzdHIgIiwg0YLQviDQuNGB0L/QvtC70YzQt9GD0LnRgtC1INC+0L/RhtC40Y4gwqstLWZvcmNlwrsuINCV0YHQu9C4INC70L7QutCw0LvRjNC90YvQuSDQutCw0YLQsNC70L7QsyBnaXQg0L3QtSDRj9Cy0LvRj9C10YLRgdGPINC00LXQudGB0YLQstC40YLQtdC70YzQvdGL0Lwg0YDQtdC/0L7Qt9C40YLQvtGA0LjQtdC8IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyJvcHRpb24uIgorbXNnc3RyICLQuNC70Lgg0LXRgdC70Lgg0LLRiyDQvdC1INC/0L7QvdGP0LvQuCwg0YfRgtC+INGN0YLQviDQt9C90LDRh9C40YIsINGC0L4g0L/RgNC+0YHRgtC+INC40YHQv9C+0LvRjNC30YPQudGC0LUg0LTRgNGD0LPQvtC1INC40LzRjyDRgSDQv9C+0LzQvtGJ0YzRjiDQvtC/0YbQuNC4IMKrLS1uYW1lwrsuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ3MgorIywgc2gtZm9ybWF0Cittc2dpZCAiUmVhY3RpdmF0aW5nIGxvY2FsIGdpdCBkaXJlY3RvcnkgZm9yIHN1Ym1vZHVsZSAnJHNtX25hbWUnLiIKK21zZ3N0ciAi0JLQvtGB0YHRgtCw0L3QvtCy0LvQtdC90LjQtSDQu9C+0LrQsNC70YzQvdC+0LPQviDQutCw0YLQsNC70L7Qs9CwIGdpdCDQtNC70Y8g0L/QvtC00LzQvtC00YPQu9GPIMKrJHNtX25hbWXCuy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDg0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L/QtdGA0LXQudGC0Lgg0L3QsCDRgdC+0YHRgtC+0Y/QvdC40LUg0YMg0L/QvtC00LzQvtC00YPQu9GPIMKrJHNtX3BhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgItCh0LHQvtC5INC00L7QsdCw0LLQu9C10L3QuNGPINC/0L7QtNC80L7QtNGD0LvRjyDCqyRzbV9wYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDk4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNGC0Ywg0L/QvtC00LzQvtC00YPQu9GMIMKrJHNtX3BhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICckcHJlZml4JGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0JfQsNGF0L7QtNC40Lwg0LIgwqskcHJlZml4JGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NTYyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdG9wcGluZyBhdCAnJHByZWZpeCRkaXNwbGF5cGF0aCc7IHNjcmlwdCByZXR1cm5lZCBub24temVybyBzdGF0dXMuIgorbXNnc3RyICLQntGB0YLQsNC90LDQstC70LjQstCw0LXQvNGB0Y8g0L3QsCDCqyRwcmVmaXgkZGlzcGxheXBhdGjCuzsg0YHRhtC10L3QsNGA0LjQuSDQstC10YDQvdGD0Lsg0L3QtSDQvdGD0LvQtdCy0L7QuSDQutC+0LQg0LLQvtC30LLRgNCw0YLQsC4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICLQkNC00YDQtdGBINC00LvRjyDQv9GD0YLQuCDQv9C+0LTQvNC+0LTRg9C70Y8gwqskZGlzcGxheXBhdGjCuyDQvdC1INC90LDQudC00LXQvSDQsiAuZ2l0bW9kdWxlcyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cmwgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQodCx0L7QuSDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INCw0LTRgNC10YHQtSDQtNC70Y8g0L/Rg9GC0Lgg0L/QvtC00LzQvtC00YPQu9GPIMKrJGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0J/QvtC00LzQvtC00YPQu9GMIMKrJG5hbWXCuyAoJHVybCkg0LfQsNGA0LXQs9C40YHRgtGA0LjRgNC+0LLQsNC9INC00LvRjyDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVwZGF0ZSBtb2RlIGZvciBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0KHQsdC+0Lkg0YDQtdCz0LjRgdGC0YDQsNGG0LjQuCDRgNC10LbQuNC80LAg0L7QsdC90L7QstC70LXQvdC40Y8g0LTQu9GPINC/0YPRgtC4INC/0L7QtNC80L7QtNGD0LvRjyDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiVXNlICcuJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICLQmNGB0L/QvtC70YzQt9GD0LnRgtC1IMKrLsK7LCDQtdGB0LvQuCDQstGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQtNC10LjQvdC40YbQuNCw0LvQuNC30LjRgNC+0LLQsNGC0Ywg0LLRgdC1INC/0L7QtNC80L7QtNGD0LvQuCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAi0KDQsNCx0L7Rh9C40Lkg0LrQsNGC0LDQu9C+0LMg0L/QvtC00LzQvtC00YPQu9GPIMKrJGRpc3BsYXlwYXRowrsg0YHQvtC00LXRgNC20LjRgiDQutCw0YLQsNC70L7QsyAuZ2l0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiKNC40YHQv9C+0LvRjNC30YPQudGC0LUgwqtybSAtcmbCuywg0LXRgdC70Lgg0LLRiyDQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3QviDRhdC+0YLQuNGC0LUg0YPQtNCw0LvQuNGC0Ywg0LXQs9C+LCDQstC60LvRjtGH0LDRjyDQstGB0Y4g0LXQs9C+INC40YHRgtC+0YDQuNGOKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICckZGlzcGxheXBhdGgnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvIgorIiBkaXNjYXJkIHRoZW0iCittc2dzdHIgItCg0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINC/0L7QtNC80L7QtNGD0LvRjyDCqyRkaXNwbGF5cGF0aMK7INGB0L7QtNC10YDQttC40YIg0LvQvtC60LDQu9GM0L3Ri9C1INC40LfQvNC10L3QtdC90LjRjzsg0LjRgdC/0L7Qu9GM0LfRg9C50YLQtSDCqy1mwrssINGH0YLQvtCx0Ysg0L7RgtC80LXQvdC40YLRjCDQuNGFIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgItCe0YfQuNGJ0LXQvSDQutCw0YLQsNC70L7QsyDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwMgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGD0LTQsNC70LjRgtGMINGA0LDQsdC+0YfQuNC5INC60LDRgtCw0LvQvtCzINC/0L7QtNC80L7QtNGD0LvRjyDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINGB0L7Qt9C00LDRgtGMINC/0YPRgdGC0L7QuSDQutCw0YLQsNC70L7QsyDQv9C+0LTQvNC+0LTRg9C70Y8gwqskZGlzcGxheXBhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgItCf0L7QtNC80L7QtNGD0LvRjCDCqyRuYW1lwrsgKCR1cmwpINCx0YvQuyDRgdC90Y/RgiDRgSDRgNC10LPQuNGB0YLRgNCw0YbQuNC4INC/0L4g0L/Rg9GC0LggwqskZGlzcGxheXBhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyBub3QgaW5pdGlhbGl6ZWRcbiIKKyJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAi0J/QvtC00LzQvtC00YPQu9GMINC/0L4g0L/Rg9GC0LggwqskZGlzcGxheXBhdGjCuyDQvdC1INC40L3QuNGG0LjQsNC70LjQt9C40YDQvtCy0LDQvVxu0JLQvtC30LzQvtC20L3Qviwg0LLQsNC8INC90YPQttC90L4g0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMIMKrdXBkYXRlIC0taW5pdMK7PyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmaW5kIGN1cnJlbnQgcmV2aXNpb24gaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0L3QsNC50YLQuCDRgtC10LrRg9GJ0YPRjiDRgNC10LTQsNC60YbQuNGOINC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg1MgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINC40LfQstC70LXRh9C10L3QuNC1INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRzbV9wYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODc2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINC40LfQstC70LXRh9C10L3QuNC1INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINC/0LXRgNC10YXQvtC0INC90LAg0YHQvtGB0YLQvtGP0L3QuNC1IMKrJHNoYTHCuyDQtNC70Y8g0L/QvtC00LzQvtC00YPQu9GPINC/0L4g0L/Rg9GC0LggwqskZGlzcGxheXBhdGjCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70Ywg0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7OiDQt9Cw0LHRgNCw0L3QviDRgdC+0YHRgtC+0Y/QvdC40LUgwqskc2hhMcK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINC/0LXRgNC10LzQtdGB0YLQuNGC0Ywgwqskc2hhMcK7INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5NgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IHJlYmFzZWQgaW50byAnJHNoYTEnIgorbXNnc3RyICLQn9C+0LTQvNC+0LTRg9C70Ywg0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7OiDQv9C10YDQtdC80LXRidC10L0g0L3QsNC0IMKrJHNoYTHCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLQndC1INGD0LTQsNC70L7RgdGMINCy0YvQv9C+0LvQvdC40YLRjCDRgdC70LjRj9C90LjQtSDRgSDCqyRzaGExwrsg0LTQu9GPINC/0L7QtNC80L7QtNGD0LvRjyDQv9C+INC/0YPRgtC4IMKrJGRpc3BsYXlwYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgItCf0L7QtNC80L7QtNGD0LvRjCDQv9C+INC/0YPRgtC4IMKrJGRpc3BsYXlwYXRowrs6INGB0LvQuNGC0L4g0YEgwqskc2hhMcK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJHByZWZpeCRzbV9wYXRoJyIKK21zZ3N0ciAi0KHQsdC+0Lkg0LLRi9C/0L7Qu9C90LXQvdC40Y8gwqskY29tbWFuZCAkc2hhMcK7INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRwcmVmaXgkc21fcGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRwcmVmaXgkc21fcGF0aCc6ICckY29tbWFuZCAkc2hhMSciCittc2dzdHIgItCf0L7QtNC80L7QtNGD0LvRjCDQv9C+INC/0YPRgtC4IMKrJHByZWZpeCRzbV9wYXRowrs6IMKrJGNvbW1hbmQgJHNoYTHCuyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINGA0LXQutGD0YDRgdC40LLQvdC+INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRkaXNwbGF5cGF0aMK7IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEwNDYKK21zZ2lkICJUaGUgLS1jYWNoZWQgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIC0tZmlsZXMgb3B0aW9uIgorbXNnc3RyICLQntC/0YbQuNGOIC0tY2FjaGVkINC90LXQu9GM0LfRjyDQuNGB0L/QvtC70YzQt9C+0LLQsNGC0Ywg0L7QtNC90L7QstGA0LXQvNC10L3QvdC+INGBINC+0L/RhtC40LXQuSAtLWZpbGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEwOTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgbW9kZSAkbW9kX2RzdCIKK21zZ3N0ciAi0L3QtdC40LfQstC10YHRgtC90YvQuSDRgNC10LbQuNC8ICRtb2RfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiICDQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiAkZGlzcGxheV9uYW1lINC90LUg0YHQvtC00LXRgNC20LjRgiDQutC+0LzQvNC40YIgJHNoYTFfc3JjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICDQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiAkZGlzcGxheV9uYW1lINC90LUg0YHQvtC00LXRgNC20LjRgiDQutC+0LzQvNC40YIgJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiICDQn9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1OiAkZGlzcGxheV9uYW1lINC90LUg0YHQvtC00LXRgNC20LjRgiDQutC+0LzQvNC40YLRiyAkc2hhMV9zcmMg0LggJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExNDkKK21zZ2lkICJibG9iIgorbXNnc3RyICLQtNCy0L7QuNGH0L3Ri9C5INC+0LHRitC10LrRgiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMjY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgItCd0LUg0YPQtNCw0LvQvtGB0Ywg0LLRi9C/0L7Qu9C90LjRgtGMINGA0LXQutGD0YDRgdC40LLQvdC+INC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8g0L/QviDQv9GD0YLQuCDCqyRzbV9wYXRowrsiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTMzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi0KHQuNC90YXRgNC+0L3QuNC30LDRhtC40Y8gdXJsINC00LvRjyDQv9C+0LTQvNC+0LTRg9C70Y8gwqskZGlzcGxheXBhdGjCuyIKZGlmZiAtLWdpdCBhL3BvL3N2LnBvIGIvcG8vc3YucG8KaW5kZXggNzUzMTdmNC4uNTg3ZDI5NiAxMDA2NDQKLS0tIGEvcG8vc3YucG8KKysrIGIvcG8vc3YucG8KQEAgLTEsMTYgKzEsMTQgQEAKLSMgU3dlZGlzaCB0cmFuc2xhdGlvbiBmb3IgZ2l0awotIyBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMyBQYXVsIE1hY2tlcnJhcwotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgotIwotIyBNaWthZWwgTWFnbnVzc29uIDxtaWthY2h1QGdtYWlsLmNvbT4sIDIwMDguCi0jIFBldGVyIEtyZWZ0aW5nIDxwZXRlckBzb2Z0d29sdmVzLnBwLnNlPiwgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMiwgMjAxMywgMjAxNS4KKyMgU3dlZGlzaCB0cmFuc2xhdGlvbnMgZm9yIEdpdC4KKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTUgUGV0ZXIga3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBHaXQgcGFja2FnZS4KKyMgUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE0LCAyMDE1LgogIwogbXNnaWQgIiIKIG1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogc3ZcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMTQ6MzIrMTAwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMDMtMjcgMTA6MzErMDEwMFxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0IDIuNi4wXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IEdpdCBNYWlsaW5nIExpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+XG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDktMDUgMDk6MTYrMDgwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMDktMDkgMjE6NDUrMDEwMFxuIgogIkxhc3QtVHJhbnNsYXRvcjogUGV0ZXIgS3JlZnRpbmcgPHBldGVyQHNvZnR3b2x2ZXMucHAuc2U+XG4iCiAiTGFuZ3VhZ2UtVGVhbTogU3dlZGlzaCA8dHAtc3ZAbGlzdG9yLnRwLXN2LnNlPlxuIgogIkxhbmd1YWdlOiBzdlxuIgpAQCAtMjAsMTM5NSArMTgsMTIyNzIgQEAKICJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKICJYLUdlbmVyYXRvcjogR3RyYW5zbGF0b3IgMi45MS42XG4iCiAKLSM6IGdpdGs6MTQwCi1tc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgotbXNnc3RyICJLdW5kZSBpbnRlIGjDpG10YSBsaXN0YSDDtnZlciBlaiBzYW1tYW5zbGFnbmEgZmlsZXI6IgorIzogYWR2aWNlLmM6NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaGludDogJS4qc1xuIgorbXNnc3RyICJ0aXBzOiAlLipzXG4iCiAKLSM6IGdpdGs6MjEyIGdpdGs6MjM4MQotbXNnaWQgIkNvbG9yIHdvcmRzIgotbXNnc3RyICJGw6RyZ2Egb3JkIgotCi0jOiBnaXRrOjIxNyBnaXRrOjIzODEgZ2l0azo4MjIwIGdpdGs6ODI1MwotbXNnaWQgIk1hcmt1cCB3b3JkcyIKLW1zZ3N0ciAiTcOkcmsgdXBwIG9yZCIKLQotIzogZ2l0azozMjQKLW1zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCi1tc2dzdHIgIkZlbCB2aWQgdG9sa25pbmcgYXYgcmV2aXNpb25lcjoiCi0KLSM6IGdpdGs6MzgwCi1tc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKLW1zZ3N0ciAiRmVsIHZpZCBrw7ZybmluZyBhdiAtLWFyZ3NjbWQta29tbWFuZG86IgotCi0jOiBnaXRrOjM5MwotbXNnaWQgIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gZmlsZXMgYXJlIHVubWVyZ2VkLiIKLW1zZ3N0ciAiIgotIkluZ2EgZmlsZXIgdmFsZGVzOiAtLW1lcmdlIGFuZ2F2cyBtZW4gZGV0IGZpbm5zIGluZ2EgZmlsZXIgc29tIGludGUgaGFyICIKLSJzbGFnaXRzIHNhbW1hbi4iCi0KLSM6IGdpdGs6Mzk2CisjOiBhZHZpY2UuYzo4OAogbXNnaWQgIiIKLSJObyBmaWxlcyBzZWxlY3RlZDogLS1tZXJnZSBzcGVjaWZpZWQgYnV0IG5vIHVubWVyZ2VkIGZpbGVzIGFyZSB3aXRoaW4gZmlsZSAiCi0ibGltaXQuIgorIkZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKIG1zZ3N0ciAiIgotIkluZ2EgZmlsZXIgdmFsZGVzOiAtLW1lcmdlIGFuZ2F2cyBtZW4gZGV0IGZpbm5zIGluZ2EgZmlsZXIgaW5vbSAiCi0iZmlsYmVncsOkbnNuaW5nZW4uIgorIlLDpHR0YSBkZW0gaSBkaW4gYXJiZXRza2F0YWxvZyBvY2ggYW52w6RuZCBzZWRhbiBcImdpdCBhZGQvcm0gPGZpbD5cIlxuIgorInNvbSBsw6RtcGxpZ3QgZsO2ciBhdHQgYW5nZSBsw7ZzbmluZyBvY2ggY2hlY2thIGluLiIKIAotIzogZ2l0azo0MTggZ2l0azo1NjYKLW1zZ2lkICJFcnJvciBleGVjdXRpbmcgZ2l0IGxvZzoiCi1tc2dzdHIgIkZlbCB2aWQga8O2cm5pbmcgYXYgZ2l0IGxvZzoiCisjOiBhZHZpY2UuYzoxMDEgYnVpbHRpbi9tZXJnZS5jOjEyMjcKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIkR1IGhhciBpbnRlIGF2c2x1dGF0IHNhbW1hbnNsYWduaW5nZW4gKE1FUkdFX0hFQUQgZmlubnMpLiIKIAotIzogZ2l0azo0MzYgZ2l0azo1ODIKLW1zZ2lkICJSZWFkaW5nIgotbXNnc3RyICJMw6RzZXIiCisjOiBhZHZpY2UuYzoxMDMKK21zZ2lkICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIgorbXNnc3RyICJBbmdlIGV0dCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIGbDtnIgZGluYSDDpG5kcmluZ2FyLiIKIAotIzogZ2l0azo0OTYgZ2l0azo0NTI1Ci1tc2dpZCAiUmVhZGluZyBjb21taXRzLi4uIgotbXNnc3RyICJMw6RzZXIgaW5jaGVja25pbmdhci4uLiIKKyM6IGFkdmljZS5jOjEwNAorbXNnaWQgIkV4aXRpbmcgYmVjYXVzZSBvZiB1bmZpbmlzaGVkIG1lcmdlLiIKK21zZ3N0ciAiQXZzbHV0YXIgcMOlIGdydW5kIGF2IG9mdWxsYm9yZGFkIHNhbW1hbnNsYWduaW5nLiIKIAotIzogZ2l0azo0OTkgZ2l0azoxNjM3IGdpdGs6NDUyOAotbXNnaWQgIk5vIGNvbW1pdHMgc2VsZWN0ZWQiCi1tc2dzdHIgIkluZ2EgaW5jaGVja25pbmdhciBtYXJrZXJhZGUiCisjOiBhcmNoaXZlLmM6MTIKK21zZ2lkICJnaXQgYXJjaGl2ZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgYXJjaGl2ZSBbPGZsYWdnb3I+XSA8dHLDpGQtaWd0PiBbPHPDtmt2w6RnPi4uLl0iCiAKLSM6IGdpdGs6MTQ0NSBnaXRrOjQwNDUgZ2l0azoxMjQzMgotbXNnaWQgIkNvbW1hbmQgbGluZSIKLW1zZ3N0ciAiS29tbWFuZG9yYWQiCisjOiBhcmNoaXZlLmM6MTMKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLWxpc3QiCittc2dzdHIgImdpdCBhcmNoaXZlIC0tbGlzdCIKIAotIzogZ2l0azoxNTExCi1tc2dpZCAiQ2FuJ3QgcGFyc2UgZ2l0IGxvZyBvdXRwdXQ6IgotbXNnc3RyICJLYW4gaW50ZSB0b2xrYSB1dGRhdGEgZnLDpW4gZ2l0IGxvZzoiCisjOiBhcmNoaXZlLmM6MTQKK21zZ2lkICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8YXJraXY+IFstLWV4ZWMgPGttZD5dIFs8ZmxhZ2dvcj5dIDx0csOkZC1pZ3Q+ICIKKyJbPHPDtmt2w6RnPi4uLl0iCiAKLSM6IGdpdGs6MTc0MAotbXNnaWQgIk5vIGNvbW1pdCBpbmZvcm1hdGlvbiBhdmFpbGFibGUiCi1tc2dzdHIgIkluZ2VuIGluY2hlY2tuaW5nc2luZm9ybWF0aW9uIMOkciB0aWxsZ8OkbmdsaWciCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8YXJraXY+IFstLWV4ZWMgPGttZD5dIC0tbGlzdCIKIAotIzogZ2l0azoxOTAzIGdpdGs6MTkzMiBnaXRrOjQzMTUgZ2l0azo5NjY5IGdpdGs6MTEyNDEgZ2l0azoxMTUyMQotbXNnaWQgIk9LIgotbXNnc3RyICJPSyIKKyM6IGFyY2hpdmUuYzozNDMgYnVpbHRpbi9hZGQuYzoxMzcgYnVpbHRpbi9hZGQuYzo0MjYgYnVpbHRpbi9ybS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICJzw7ZrdsOkZ3NhbmdpdmVsc2VuIFwiJXNcIiBtb3RzdmFyYWRlIGludGUgbsOlZ3JhIGZpbGVyIgogCi0jOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKLSM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAiQXZicnl0IgorIzogYXJjaGl2ZS5jOjQyOAorbXNnaWQgImZtdCIKK21zZ3N0ciAiZm10IgogCi0jOiBnaXRrOjIwNjkKLW1zZ2lkICImVXBkYXRlIgotbXNnc3RyICJVcHBkYXRlcmEiCisjOiBhcmNoaXZlLmM6NDI4Cittc2dpZCAiYXJjaGl2ZSBmb3JtYXQiCittc2dzdHIgImFya2l2Zm9ybWF0IgogCi0jOiBnaXRrOjIwNzAKLW1zZ2lkICImUmVsb2FkIgotbXNnc3RyICJMYWRkYSBvbSIKKyM6IGFyY2hpdmUuYzo0MjkgYnVpbHRpbi9sb2cuYzoxMjI5Cittc2dpZCAicHJlZml4IgorbXNnc3RyICJwcmVmaXgiCiAKLSM6IGdpdGs6MjA3MQotbXNnaWQgIlJlcmVhZCByZSZmZXJlbmNlcyIKLW1zZ3N0ciAiTMOkcyBvbSByZWZlcmVuc2VyIgorIzogYXJjaGl2ZS5jOjQzMAorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgImzDpGdnIHRpbGwgcHJlZml4IHRpbGwgdmFyamUgc8O2a3bDpGcgaSBhcmtpdmV0IgogCi0jOiBnaXRrOjIwNzIKLW1zZ2lkICImTGlzdCByZWZlcmVuY2VzIgotbXNnc3RyICJWaXNhIHJlZmVyZW5zZXIiCisjOiBhcmNoaXZlLmM6NDMxIGJ1aWx0aW4vYXJjaGl2ZS5jOjg4IGJ1aWx0aW4vYmxhbWUuYzoyNTE2CisjOiBidWlsdGluL2JsYW1lLmM6MjUxNyBidWlsdGluL2NvbmZpZy5jOjU4IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODcKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODkgYnVpbHRpbi9ncmVwLmM6NzEyIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0NiBidWlsdGluL2xzLWZpbGVzLmM6NDQ5IGJ1aWx0aW4vbm90ZXMuYzozOTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTggYnVpbHRpbi9yZWFkLXRyZWUuYzoxMDkgcGFyc2Utb3B0aW9ucy5oOjE1MworbXNnaWQgImZpbGUiCittc2dzdHIgImZpbCIKIAotIzogZ2l0azoyMDc0Ci1tc2dpZCAiU3RhcnQgZ2l0ICZndWkiCi1tc2dzdHIgIlN0YXJ0YSBnaXQgZ3VpIgorIzogYXJjaGl2ZS5jOjQzMiBidWlsdGluL2FyY2hpdmUuYzo4OQorbXNnaWQgIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAic2tyaXYgYXJraXZldCB0aWxsIGZpbGVuIgogCi0jOiBnaXRrOjIwNzYKLW1zZ2lkICImUXVpdCIKLW1zZ3N0ciAiQXZzbHV0YSIKKyM6IGFyY2hpdmUuYzo0MzQKK21zZ2lkICJyZWFkIC5naXRhdHRyaWJ1dGVzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJsw6RzIC5naXRhdHRyaWJ1dGVzIGkgYXJiZXRza2F0YWxvZ2VuIgogCi0jOiBnaXRrOjIwNjgKLW1zZ2lkICImRmlsZSIKLW1zZ3N0ciAiQXJraXYiCisjOiBhcmNoaXZlLmM6NDM1Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAicmFwcG9ydGVyYSBhcmtpdmVyYWRlIGZpbGVyIHDDpSBzdGFuZGFyZCBmZWwiCiAKLSM6IGdpdGs6MjA4MAotbXNnaWQgIiZQcmVmZXJlbmNlcyIKLW1zZ3N0ciAiSW5zdMOkbGxuaW5nYXIiCisjOiBhcmNoaXZlLmM6NDM2Cittc2dpZCAic3RvcmUgb25seSIKK21zZ3N0ciAiZW5kYXN0IHNwYXJhIgogCi0jOiBnaXRrOjIwNzkKLW1zZ2lkICImRWRpdCIKLW1zZ3N0ciAiUmVkaWdlcmEiCisjOiBhcmNoaXZlLmM6NDM3Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICJrb21wcmltZXJhIHNuYWJiYXJlIgogCi0jOiBnaXRrOjIwODQKLW1zZ2lkICImTmV3IHZpZXcuLi4iCi1tc2dzdHIgIk55IHZ5Li4uIgorIzogYXJjaGl2ZS5jOjQ0NQorbXNnaWQgImNvbXByZXNzIGJldHRlciIKK21zZ3N0ciAia29tcHJpbWVyYSBiw6R0dHJlIgogCi0jOiBnaXRrOjIwODUKLW1zZ2lkICImRWRpdCB2aWV3Li4uIgotbXNnc3RyICLDhG5kcmEgdnkuLi4iCisjOiBhcmNoaXZlLmM6NDQ4Cittc2dpZCAibGlzdCBzdXBwb3J0ZWQgYXJjaGl2ZSBmb3JtYXRzIgorbXNnc3RyICJ2aXNhIHVuZGVyc3TDtmRkYSBhcmtpdmZvcm1hdCIKIAotIzogZ2l0azoyMDg2Ci1tc2dpZCAiJkRlbGV0ZSB2aWV3IgotbXNnc3RyICJUYSBib3J0IHZ5IgorIzogYXJjaGl2ZS5jOjQ1MCBidWlsdGluL2FyY2hpdmUuYzo5MCBidWlsdGluL2Nsb25lLmM6NzcKK21zZ2lkICJyZXBvIgorbXNnc3RyICJhcmtpdiIKIAotIzogZ2l0azoyMDg4IGdpdGs6NDA0MwotbXNnaWQgIiZBbGwgZmlsZXMiCi1tc2dzdHIgIkFsbGEgZmlsZXIiCisjOiBhcmNoaXZlLmM6NDUxIGJ1aWx0aW4vYXJjaGl2ZS5jOjkxCittc2dpZCAicmV0cmlldmUgdGhlIGFyY2hpdmUgZnJvbSByZW1vdGUgcmVwb3NpdG9yeSA8cmVwbz4iCittc2dzdHIgImjDpG10YSBhcmtpdmV0IGZyw6VuIGZqw6RycmFya2l2ZXQgPGFya2l2PiIKIAotIzogZ2l0azoyMDgzIGdpdGs6NDA2NwotbXNnaWQgIiZWaWV3IgotbXNnc3RyICJWaXNhIgorIzogYXJjaGl2ZS5jOjQ1MiBidWlsdGluL2FyY2hpdmUuYzo5MiBidWlsdGluL25vdGVzLmM6NDc5Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAia29tbWFuZG8iCiAKLSM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCi1tc2dpZCAiJkFib3V0IGdpdGsiCi1tc2dzdHIgIk9tIGdpdGsiCisjOiBhcmNoaXZlLmM6NDUzIGJ1aWx0aW4vYXJjaGl2ZS5jOjkzCittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICJzw7ZrdsOkZyB0aWxsIGtvbW1hbmRvdCBnaXQtdXBsb2FkLWFyY2hpdmUgcMOlIGZqw6RycmVuIgogCi0jOiBnaXRrOjIwOTQgZ2l0azoyMTA4Ci1tc2dpZCAiJktleSBiaW5kaW5ncyIKLW1zZ3N0ciAiVGFuZ2VudGJvcmRzYmluZG5pbmdhciIKKyM6IGF0dHIuYzoyNjUKK21zZ2lkICIiCisiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKyJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iCittc2dzdHIgIiIKKyJOZWdhdGl2YSBtw7Zuc3RlciBpZ25vcmVyYXMgaSBnaXQtYXR0cmlidXRcbiIKKyJBbnbDpG5kICdcXCEnIGbDtnIgYXR0IGlubGVkYSBtZWQgZXR0IHV0cm9wc3RlY2tlbi4iCiAKLSM6IGdpdGs6MjA5MiBnaXRrOjIxMDcKLW1zZ2lkICImSGVscCIKLW1zZ3N0ciAiSGrDpGxwIgorIzogYnJhbmNoLmM6NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICJTdMOkbGxlciBpbnRlIGluIGdyZW5lbiAlcyBzb20gc2luIGVnZW4gdXBwc3Ryw7Ztc2dyZW4uIgogCi0jOiBnaXRrOjIxODUgZ2l0azo4NjUyCi1tc2dpZCAiU0hBMSBJRDoiCi1tc2dzdHIgIlNIQTEtaWQ6IgorIzogYnJhbmNoLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiR3JlbmVuICVzIHN0w6RsbGRlcyBpbiBhdHQgc3DDpXJhIGZqw6RycmdyZW5lbiAlcyBmcsOlbiAlcyBnZW5vbSBvbWJhc2VyaW5nLiIKIAotIzogZ2l0azoyMjI5Ci1tc2dpZCAiUm93IgotbXNnc3RyICJSYWQiCisjOiBicmFuY2guYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSBicmFuY2ggJXMgZnJvbSAlcy4iCittc2dzdHIgIkdyZW5lbiAlcyBzdMOkbGxkZXMgaW4gYXR0IHNww6VyYSBmasOkcnJncmVuZW4gJXMgZnLDpW4gJXMuIgogCi0jOiBnaXRrOjIyNjcKLW1zZ2lkICJGaW5kIgotbXNnc3RyICJTw7ZrIgorIzogYnJhbmNoLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICJHcmVuZW4gJXMgc3TDpGxsZGVzIGluIGF0dCBzcMOlcmEgZGVuIGxva2FsYSBncmVuZW4gJXMgZ2Vub20gb21iYXNlcmluZy4iCiAKLSM6IGdpdGs6MjI5NQorIzogYnJhbmNoLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJXMuIgorbXNnc3RyICJHcmVuZW4gJXMgc3TDpGxsZGVzIGluIGF0dCBzcMOlcmEgZGVuIGxva2FsYSBncmVuZW4gJXMuIgorCisjOiBicmFuY2guYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICJHcmVuZW4gJXMgc3TDpGxsZGVzIGluIGF0dCBzcMOlcmEgZmrDpHJyZWZlcmVuc2VuICVzIGdlbm9tIG9tYmFzZXJpbmcuIgorCisjOiBicmFuY2guYzo5NQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIHJlbW90ZSByZWYgJXMuIgorbXNnc3RyICJHcmVuZW4gJXMgc3TDpGxsZGVzIGluIGF0dCBzcMOlcmEgZmrDpHJyZWZlcmVuc2VuICVzLiIKKworIzogYnJhbmNoLmM6OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICIiCisiR3JlbmVuICVzIHN0w6RsbGRlcyBpbiBhdHQgc3DDpXJhIGRlbiBsb2thbGEgcmVmZXJlbnNlbiAlcyBnZW5vbSBvbWJhc2VyaW5nLiIKKworIzogYnJhbmNoLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICVzLiIKK21zZ3N0ciAiR3JlbmVuICVzIHN0w6RsbGRlcyBpbiBhdHQgc3DDpXJhIGRlbiBsb2thbGEgcmVmZXJlbnNlbiAlcy4iCisKKyM6IGJyYW5jaC5jOjEzMworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgdHJhY2tpbmc6IGFtYmlndW91cyBpbmZvcm1hdGlvbiBmb3IgcmVmICVzIgorbXNnc3RyICJTcMOlcmFyIGludGU6IHR2ZXR5ZGlnIGluZm9ybWF0aW9uIGbDtnIgcmVmZXJlbnNlbiAlcyIKKworIzogYnJhbmNoLmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgYnJhbmNoIG5hbWUuIgorbXNnc3RyICJcIiVzXCIgw6RyIGludGUgZXR0IGdpbHRpZ3QgZ3Jlbm5hbW4uIgorCisjOiBicmFuY2guYzoxNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBicmFuY2ggbmFtZWQgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgIkRldCBmaW5ucyByZWRhbiBlbiBncmVuIHNvbSBoZXRlciBcIiVzXCIiCisKKyM6IGJyYW5jaC5jOjE3NQorbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2FuIGludGUgdHZpbmdhIHVwcGRhdGVyaW5nIGF2IGFrdHVlbGwgZ3Jlbi4iCisKKyM6IGJyYW5jaC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc2V0dXAgdHJhY2tpbmcgaW5mb3JtYXRpb247IHN0YXJ0aW5nIHBvaW50ICclcycgaXMgbm90IGEgYnJhbmNoLiIKK21zZ3N0ciAiS2FuIGludGUgc3TDpGxsYSBpbiBzcMOlcm5pbmc7IHN0YXJ0cHVua3RlbiBcIiVzXCIgw6RyIGludGUgZW4gZ3Jlbi4iCisKKyM6IGJyYW5jaC5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJkZW4gZWZ0ZXJmcsOlZ2FkZSB1cHBzdHLDtm1zZ3JlbmVuIFwiJXNcIiBmaW5ucyBpbnRlIgorCisjOiBicmFuY2guYzoxOTkKK21zZ2lkICIiCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyBvbiBiYXNpbmcgeW91ciB3b3JrIG9uIGFuIHVwc3RyZWFtXG4iCisiYnJhbmNoIHRoYXQgYWxyZWFkeSBleGlzdHMgYXQgdGhlIHJlbW90ZSwgeW91IG1heSBuZWVkIHRvXG4iCisicnVuIFwiZ2l0IGZldGNoXCIgdG8gcmV0cmlldmUgaXQuXG4iCisiXG4iCisiSWYgeW91IGFyZSBwbGFubmluZyB0byBwdXNoIG91dCBhIG5ldyBsb2NhbCBicmFuY2ggdGhhdFxuIgorIndpbGwgdHJhY2sgaXRzIHJlbW90ZSBjb3VudGVycGFydCwgeW91IG1heSB3YW50IHRvIHVzZVxuIgorIlwiZ2l0IHB1c2ggLXVcIiB0byBzZXQgdGhlIHVwc3RyZWFtIGNvbmZpZyBhcyB5b3UgcHVzaC4iCittc2dzdHIgIiIKKyJcbiIKKyJPbSBkdSBoYXIgdMOkbmt0IGJhc2VyYSBkaXR0IGFyYmV0ZSBww6UgZW4gdXBwc3Ryw7Ztc2dyZW5cbiIKKyJzb20gcmVkYW4gZmlubnMgcMOlIGZqw6RycmVuIGthbiBkdSBiZWjDtnZhIGvDtnJhIFwiZ2l0IGZldGNoXCJcbiIKKyJmw7ZyIGF0dCBow6RtdGEgZGVuLlxuIgorIlxuIgorIk9tIGR1IGhhciB0w6Rua3Qgc8OkbmRhIGluIGVuIG55IGxva2FsIGdyZW4gc29tIHNrYWxsXG4iCisic3DDpXJhIGRlc3MgZmrDpHJybW90c3ZhcmlnaGV0IGthbiBkdSBhbnbDpG5kYSBcImdpdCBwdXNoIC11XCJcbiIKKyJmw7ZyIGF0dCBzdMOkbGxhIGluIHVwcHN0csO2bXNrb25maWd1cmF0aW9uZW4gbsOkciBkdSBzw6RuZGVyIGluLiIKKworIzogYnJhbmNoLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiT2JqZWt0bmFtbmV0IMOkciBpbnRlIGdpbHRpZ3Q6IFwiJXNcIi4iCisKKyM6IGJyYW5jaC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJPYmpla3RuYW1uZXQgw6RyIHR2ZXR5ZGlndDogXCIlc1wiLiIKKworIzogYnJhbmNoLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIkF2Z3JlbmluZ3NwdW5rdGVuIMOkciBpbnRlIGdpbHRpZzogXCIlc1wiIgorCisjOiBicmFuY2guYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIlwiJXNcIiDDpHIgcmVkYW4gdXRjaGVja2FkIHDDpSBcIiVzXCIiCisKKyM6IGJ1bmRsZS5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIiclcycgc2VyIGludGUgdXQgc29tIGVuIHYyLWJ1bmRsZS1maWwiCisKKyM6IGJ1bmRsZS5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWFkZXI6ICVzJXMgKCVkKSIKK21zZ3N0ciAib2vDpG50IGh1dnVkOiAlcyVzICglZCkiCisKKyM6IGJ1bmRsZS5jOjg3IGJ1aWx0aW4vY29tbWl0LmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcyciCittc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hIFwiJXNcIiIKKworIzogYnVuZGxlLmM6MTM5Cittc2dpZCAiUmVwb3NpdG9yeSBsYWNrcyB0aGVzZSBwcmVyZXF1aXNpdGUgY29tbWl0czoiCittc2dzdHIgIkFya2l2ZXQgc2FrbmFyIGRlc3NhIG7DtmR2w6RuZGlnYSBpbmNoZWNrbmluZ2FyOiIKKworIzogYnVuZGxlLmM6MTYzIHNlcXVlbmNlci5jOjYzNiBzZXF1ZW5jZXIuYzoxMDgzIGJ1aWx0aW4vYmxhbWUuYzoyNzA4CisjOiBidWlsdGluL2JyYW5jaC5jOjY1MiBidWlsdGluL2NvbW1pdC5jOjEwNDQgYnVpbHRpbi9sb2cuYzozMzQKKyM6IGJ1aWx0aW4vbG9nLmM6ODUwIGJ1aWx0aW4vbG9nLmM6MTQ1NyBidWlsdGluL2xvZy5jOjE2OTAgYnVpbHRpbi9tZXJnZS5jOjM1OAorIzogYnVpbHRpbi9zaG9ydGxvZy5jOjE1OAorbXNnaWQgInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEgcmV2aXNpb25zdHJhdmVyc2VyaW5nIgorCisjOiBidW5kbGUuYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIlBha2V0ZXQgKGJ1bmRsZW4pIGlubmVow6VsbGVyIGRlbm5hIHJlZmVyZW5zOiIKK21zZ3N0clsxXSAiUGFrZXRldCAoYnVuZGxlbikgaW5uZWjDpWxsZXIgZGVzc2EgJWQgcmVmZXJlbnNlcjoiCisKKyM6IGJ1bmRsZS5jOjE5MgorbXNnaWQgIlRoZSBidW5kbGUgcmVjb3JkcyBhIGNvbXBsZXRlIGhpc3RvcnkuIgorbXNnc3RyICJQYWtldGV0IChidW5kbGVuKSBiZXNrcml2ZXIgZW4ga29tcGxldHQgaGlzdG9yaWsuIgorCisjOiBidW5kbGUuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIlBha2V0ZXQgKGJ1bmRsZW4pIGtyw6R2ZXIgZGVubmEgcmVmZXJlbnM6IgorbXNnc3RyWzFdICJQYWtldGV0IChidW5kbGVuKSBrcsOkdmVyIGRlc3NhICVkIHJlZmVyZW5zZXI6IgorCisjOiBidW5kbGUuYzoyNTMKK21zZ2lkICJDb3VsZCBub3Qgc3Bhd24gcGFjay1vYmplY3RzIgorbXNnc3RyICJLdW5kZSBpbnRlIHN0YXJ0YSBwYWNrLW9iamVjdHMiCisKKyM6IGJ1bmRsZS5jOjI2NAorbXNnaWQgInBhY2stb2JqZWN0cyBkaWVkIgorbXNnc3RyICJwYWNrLW9iamVjdHMgbWlzc2x5Y2thZGVzIgorCisjOiBidW5kbGUuYzozMDQKK21zZ2lkICJyZXYtbGlzdCBkaWVkIgorbXNnc3RyICJyZXYtbGlzdCBkb2ciCisKKyM6IGJ1bmRsZS5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWYgJyVzJyBpcyBleGNsdWRlZCBieSB0aGUgcmV2LWxpc3Qgb3B0aW9ucyIKK21zZ3N0ciAicmVmZXJlbnNlbiBcIiVzXCIgZXhrbHVkZXJhcyBhdiBhcmd1bWVudGVuIHRpbGwgcmV2LWxpc3QiCisKKyM6IGJ1bmRsZS5jOjQ0MyBidWlsdGluL2xvZy5jOjE1NyBidWlsdGluL2xvZy5jOjEzNjcgYnVpbHRpbi9zaG9ydGxvZy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgYXJndW1lbnQ6ICVzIgorCisjOiBidW5kbGUuYzo0NDkKK21zZ2lkICJSZWZ1c2luZyB0byBjcmVhdGUgZW1wdHkgYnVuZGxlLiIKK21zZ3N0ciAiVsOkZ3JhciBza2FwYSBldHQgdG9tdCBwYWtldCAoYnVuZGxlKS4iCisKKyM6IGJ1bmRsZS5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgImthbiBpbnRlIHNrYXBhIFwiJXNcIiIKKworIzogYnVuZGxlLmM6NDgwCittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICJpbmRleC1wYWNrIGRvZyIKKworIzogY29sb3IuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBjb2xvciB2YWx1ZTogJS4qcyIKK21zZ3N0ciAiZmVsYWt0aWd0IGbDpHJndsOkcmRlOiAlLipzIgorCisjOiBjb21taXQuYzo0MCBidWlsdGluL2FtLmM6NDUxIGJ1aWx0aW4vYW0uYzo0ODcgYnVpbHRpbi9hbS5jOjE0ODkKKyM6IGJ1aWx0aW4vYW0uYzoyMTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSAlcyIKKworIzogY29tbWl0LmM6NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgJXMgaXMgbm90IGEgY29tbWl0ISIKK21zZ3N0ciAiJXMgJXMgw6RyIGludGUgZW4gaW5jaGVja25pbmchIgorCisjOiBjb21wYXQvb2JzdGFjay5jOjQwNiBjb21wYXQvb2JzdGFjay5jOjQwOAorbXNnaWQgIm1lbW9yeSBleGhhdXN0ZWQiCittc2dzdHIgIm1pbm5ldCBzbHV0IgorCisjOiBjb25maWcuYzo0NzQgY29uZmlnLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgZmlsZSBsaW5lICVkIGluICVzIgorbXNnc3RyICJmZWxha3RpZyBrb25maWd1cmF0aW9uc2ZpbCByYWQgJWQgaSAlcyIKKworIzogY29uZmlnLmM6NTkyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBudW1lcmljIGNvbmZpZyB2YWx1ZSAnJXMnIGZvciAnJXMnIGluICVzOiAlcyIKK21zZ3N0ciAiZmVsYWt0aWd0IG51bWVyaXNrdCBrb25maWd1cmF0aW9uc3bDpHJkZSBcIiVzXCIgZsO2ciBcIiVzXCIgaSAlczogJXMiCisKKyM6IGNvbmZpZy5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiCittc2dzdHIgImZlbGFrdGlndCBudW1lcmlza3Qga29uZmlndXJhdGlvbnN2w6RyZGUgXCIlc1wiIGbDtnIgXCIlc1wiOiAlcyIKKworIzogY29uZmlnLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleHBhbmQgdXNlciBkaXIgaW46ICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBleHBhbmRlcmEgYW52w6RuZGFya2F0YWxvZyBpOiBcIiVzXCIiCisKKyM6IGNvbmZpZy5jOjc1NyBjb25maWcuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgImZlbGFrdGlndCB6bGliLWtvbXByaW1lcmluZ3NncmFkICVkIgorCisjOiBjb25maWcuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIgorbXNnc3RyICJmZWxha3RpZ3QgbMOkZ2UgZsO2ciBza2FwYW5kZSBhdiBvYmpla3Q6ICVzIgorCisjOiBjb25maWcuYzoxMjE2Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgImthbiBpbnRlIHRvbGthIGtvbW1hbmRvcmFkc2tvbmZpZ3VyYXRpb24iCisKKyM6IGNvbmZpZy5jOjEyNzcKK21zZ2lkICJ1bmtub3duIGVycm9yIG9jY3VyZWQgd2hpbGUgcmVhZGluZyB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyIKK21zZ3N0ciAib2vDpG50IGZlbCB1cHBzdG9kIHZpZCBsw6RzbmluZyBhdiBrb25maWd1cmF0aW9uc2ZpbGVybmEiCisKKyM6IGNvbmZpZy5jOjE2MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlICclcycgZnJvbSBjb21tYW5kLWxpbmUgY29uZmlnIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIHbDpHJkZXQgXCIlc1wiIGZyw6VuIGtvbW1hbmRvcmFkc2tvbmZpZ3VyYXRpb24iCisKKyM6IGNvbmZpZy5jOjE2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIGNvbmZpZyB2YXJpYWJsZSAnJXMnIGluIGZpbGUgJyVzJyBhdCBsaW5lICVkIgorbXNnc3RyICJmZWxha3RpZyBrb25maWd1cmF0aW9uc3ZhcmlhYmVsIFwiJXNcIiBpIGZpbGVuIFwiJXNcIiBww6UgcmFkICVkIgorCisjOiBjb25maWcuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiVzIGhhciBmbGVyYSB2w6RyZGVuIgorCisjOiBjb25uZWN0ZWQuYzo2OQorbXNnaWQgIkNvdWxkIG5vdCBydW4gJ2dpdCByZXYtbGlzdCciCittc2dzdHIgIkt1bmRlIGludGUga8O2cmEgXCJnaXQgcmV2LWxpc3RcIiIKKworIzogY29ubmVjdGVkLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0OiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgdGlsbCByZXYtbGlzdDogJXMiCisKKyM6IGNvbm5lY3RlZC5jOjk3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjbG9zZSByZXYtbGlzdCdzIHN0ZGluOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzdMOkbmdhIHJldi1saXN0OnMgc3RhbmRhcmQgaW46ICVzIgorCisjOiBkYXRlLmM6OTUKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJpIGZyYW10aWRlbiIKKworIzogZGF0ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICIlbHUgc2VrdW5kIHNlZGFuIgorbXNnc3RyWzFdICIlbHUgc2VrdW5kZXIgc2VkYW4iCisKKyM6IGRhdGUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiJWx1IG1pbnV0IHNlZGFuIgorbXNnc3RyWzFdICIlbHUgbWludXRlciBzZWRhbiIKKworIzogZGF0ZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBob3VycyBhZ28iCittc2dzdHJbMF0gIiVsdSB0aW1tZSBzZWRhbiIKK21zZ3N0clsxXSAiJWx1IHRpbW1hciBzZWRhbiIKKworIzogZGF0ZS5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgZGF5IGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGRheXMgYWdvIgorbXNnc3RyWzBdICIlbHUgZGFnIHNlZGFuIgorbXNnc3RyWzFdICIlbHUgZGFnYXIgc2VkYW4iCisKKyM6IGRhdGUuYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHdlZWsgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgd2Vla3MgYWdvIgorbXNnc3RyWzBdICIlbHUgdmVja2Egc2VkYW4iCittc2dzdHJbMV0gIiVsdSB2ZWNrb3Igc2VkYW4iCisKKyM6IGRhdGUuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVsdSBtw6VuYWQgc2VkYW4iCittc2dzdHJbMV0gIiVsdSBtw6VuYWRlciBzZWRhbiIKKworIzogZGF0ZS5jOjE0NgorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgeWVhciIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIgorbXNnc3RyWzBdICIlbHUgw6VyIgorbXNnc3RyWzFdICIlbHUgw6VyIgorCisjLiBUUkFOU0xBVE9SUzogIiVzIiBpcyAiPG4+IHllYXJzIgorIzogZGF0ZS5jOjE0OQorIywgYy1mb3JtYXQKK21zZ2lkICIlcywgJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJXMsICVsdSBtb250aHMgYWdvIgorbXNnc3RyWzBdICIlcywgJWx1IG3DpW5hZCBzZWRhbiIKK21zZ3N0clsxXSAiJXMsICVsdSBtw6VuYWRlciBzZWRhbiIKKworIzogZGF0ZS5jOjE1NCBkYXRlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIGFnbyIKK21zZ3N0clswXSAiJWx1IMOlciBzZWRhbiIKK21zZ3N0clsxXSAiJWx1IMOlciBzZWRhbiIKKworIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBvcmRlcmZpbGVuIFwiJXNcIiIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTM2Cittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIlV0ZsO2ciBvbsO2amFrdGlnIG5hbW5ieXRlc2RldGVrdGVyaW5nIgorCisjOiBkaWZmLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiICBNaXNzbHlja2FkZXMgdG9sa2EgZGlyc3RhdC1hdnNrw6RybmluZ3Nwcm9jZW50YW5kZWwgXCIlc1wiXG4iCisKKyM6IGRpZmYuYzoxMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBVbmtub3duIGRpcnN0YXQgcGFyYW1ldGVyICclcydcbiIKK21zZ3N0ciAiICBPa8OkbmQgZGlyc3RhdC1wYXJhbWV0ZXIgXCIlc1wiXG4iCisKKyM6IGRpZmYuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIk9rw6RudCB2w6RyZGUgZsO2ciBrb25maWd1cmF0aW9uc3ZhcmlhYmVsbiBcImRpZmYuc3VibW9kdWxlXCI6IFwiJXNcIiIKKworIzogZGlmZi5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkhpdHRhZGUgZmVsIGkga29uZmlndXJhdGlvbnN2YXJpYWJlbG4gXCJkaWZmLmRpcnN0YXRcIjpcbiIKKyIlcyIKKworIzogZGlmZi5jOjI5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAiZXh0ZXJuIGRpZmYgZG9nLCBzdGFubmFyIHZpZCAlcyIKKworIzogZGlmZi5jOjMzOTQKK21zZ2lkICItLWZvbGxvdyByZXF1aXJlcyBleGFjdGx5IG9uZSBwYXRoc3BlYyIKK21zZ3N0ciAiLS1mb2xsb3cga3LDpHZlciBleGFrdCBlbiBzw7ZrdsOkZ3NhbmdpdmVsc2UiCisKKyM6IGRpZmYuYzozNTU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGYWlsZWQgdG8gcGFyc2UgLS1kaXJzdGF0Ly1YIG9wdGlvbiBwYXJhbWV0ZXI6XG4iCisiJXMiCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMgdG9sa2EgYXJndW1lbnQgdGlsbCBmbGFnZ2FuIC0tZGlyc3RhdC8tWDtcbiIKKyIlcyIKKworIzogZGlmZi5jOjM1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgIk1pc3NseWNrYWRlcyB0b2xrYSBhcmd1bWVudCB0aWxsIGZsYWdnYW4gLS1zdWJtb2R1bGU6IFwiJXNcIiIKKworIzogZGlyLmM6MTg1MworbXNnaWQgImZhaWxlZCB0byBnZXQga2VybmVsIG5hbWUgYW5kIGluZm9ybWF0aW9uIgorbXNnc3RyICJtaXNzbHlja2FkZXMgaMOkbXRhIGvDpHJuYW5zIG5hbW4gb2NoIGluZm9ybWF0aW9uIgorCisjOiBkaXIuYzoxOTM2Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGlzIGRpc2FibGVkIG9uIHRoaXMgc3lzdGVtLiIKK21zZ3N0ciAiT3Nww6VyYWQgY2FjaGUgw6RyIGluYWt0aXZlcmFkIHDDpSBkZXR0YSBzeXN0ZW0uIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTY2IGdwZy1pbnRlcmZhY2UuYzoyMzcKK21zZ2lkICJjb3VsZCBub3QgcnVuIGdwZy4iCittc2dzdHIgImt1bmRlIGludGUga8O2cmEgZ3BnLiIKKworIzogZ3BnLWludGVyZmFjZS5jOjE3OAorbXNnaWQgImdwZyBkaWQgbm90IGFjY2VwdCB0aGUgZGF0YSIKK21zZ3N0ciAiZ3BnIGdvZHRvZyBpbnRlIGRhdGEiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoxODkKK21zZ2lkICJncGcgZmFpbGVkIHRvIHNpZ24gdGhlIGRhdGEiCittc2dzdHIgImdwZyBtaXNzbHlja2FkZXMgc2lnbmVyYSBkYXRhIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJyVzJzogJXMiCittc2dzdHIgImt1bmRlIGludGUgc2thcGEgdGVtcG9yw6RyYSBmaWxlbiBcIiVzXCI6ICVzIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjI1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0aW5nIGRldGFjaGVkIHNpZ25hdHVyZSB0byAnJXMnOiAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrcml2YSBmcmlzdMOlZW5kZSBzaWduYXR1ciB0aWxsIFwiJXNcIjogJXMiCisKKyM6IGdyZXAuYzoxNzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICJcIiVzXCIga3VuZGUgaW50ZSBsw6RzYSAlcyIKKworIzogZ3JlcC5jOjE3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgIlwiJXNcIjogJXMiCisKKyM6IGdyZXAuYzoxNzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IHNob3J0IHJlYWQgJXMiCittc2dzdHIgIlwiJXNcIjoga29ydCBsw6RzbmluZyAlcyIKKworIzogaGVscC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgImdpdC1rb21tYW5kb24gdGlsbGfDpG5nbGlnYSBpIFwiJXNcIiIKKworIzogaGVscC5jOjIxNAorbXNnaWQgImdpdCBjb21tYW5kcyBhdmFpbGFibGUgZnJvbSBlbHNld2hlcmUgb24geW91ciAkUEFUSCIKK21zZ3N0ciAiZ2l0LWtvbW1hbmRvbiBmcsOlbiBhbmRyYSBwbGF0c2VyIGkgZGluICRQQVRIIgorCisjOiBoZWxwLmM6MjQ2Cittc2dpZCAiVGhlc2UgYXJlIGNvbW1vbiBHaXQgY29tbWFuZHMgdXNlZCBpbiB2YXJpb3VzIHNpdHVhdGlvbnM6IgorbXNnc3RyICJEZXNzYSB2YW5saWdhIEdpdC1rb21tYW5kb24gYW52w6RuZHMgaSBvbGlrYSBzaXR1YXRpb25lcjoiCisKKyM6IGhlbHAuYzozMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcycgYXBwZWFycyB0byBiZSBhIGdpdCBjb21tYW5kLCBidXQgd2Ugd2VyZSBub3RcbiIKKyJhYmxlIHRvIGV4ZWN1dGUgaXQuIE1heWJlIGdpdC0lcyBpcyBicm9rZW4/IgorbXNnc3RyICIiCisiXCIlc1wiIHZlcmthciB2YXJhIGV0dCBnaXQta29tbWFuZG8sIG1lbiB2aSBrYW4gaW50ZVxuIgorImvDtnJhIGRldC4gS2Fuc2tlIGdpdC0lcyDDpHIgdHJhc2lndD8iCisKKyM6IGhlbHAuYzozNjgKK21zZ2lkICJVaCBvaC4gWW91ciBzeXN0ZW0gcmVwb3J0cyBubyBHaXQgY29tbWFuZHMgYXQgYWxsLiIKK21zZ3N0ciAiT2ogZMOlLiBEaXR0IHN5c3RlbSByYXBwb3J0ZXJhciBpbmdhIEdpdC1rb21tYW5kb24gYWxscy4iCisKKyM6IGhlbHAuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC5cbiIKKyJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcyciCittc2dzdHIgIiIKKyJWQVJOSU5HOiBEdSBhbnJvcGFkZSBldHQgR2l0LWtvbW1hbmRvIHZpZCBuYW1uIFwiJXNcIiwgc29tIGludGUgZmlubnMuXG4iCisiRm9ydHPDpHR0ZXIgdW5kZXIgZsO2cnV0c8OkdHRuaW5nZW4gYXR0IGR1IG1lbmFkZSBcIiVzXCIiCisKKyM6IGhlbHAuYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW4gJTAuMWYgc2Vjb25kcyBhdXRvbWF0aWNhbGx5Li4uIgorbXNnc3RyICJhdXRvbWF0aXNrdCBvbSAlMC4xZiBzZWt1bmRlci4uLiIKKworIzogaGVscC5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6IFwiJXNcIiDDpHIgaW50ZSBldHQgZ2l0LWtvbW1hbmRvLiBTZSBcImdpdCAtLWhlbHBcIi4iCisKKyM6IGhlbHAuYzo0MDYgaGVscC5jOjQ2NgorbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorIk1lbmFkZSBkdSBkZXR0YT8iCittc2dzdHJbMV0gIiIKKyJcbiIKKyJNZW5hZGUgZHUgZXR0IGF2IGRlc3NhPyIKKworIzogaGVscC5jOjQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXM6ICVzIC0gJXMiCisKKyM6IG1lcmdlLmM6NDEKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCB0aGUgY2FjaGUiCittc2dzdHIgIm1pc3NseWNrYWRlcyBsw6RzYSBjYWNoZW4iCisKKyM6IG1lcmdlLmM6OTQgYnVpbHRpbi9hbS5jOjE5NzQgYnVpbHRpbi9hbS5jOjIwMDkgYnVpbHRpbi9jaGVja291dC5jOjM3NQorIzogYnVpbHRpbi9jaGVja291dC5jOjU4NiBidWlsdGluL2Nsb25lLmM6NzE1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBueSBpbmRleGZpbCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg5CisjLCBjLWZvcm1hdAorbXNnaWQgIihiYWQgY29tbWl0KVxuIgorbXNnc3RyICIoZmVsYWt0aWcgaW5jaGVja25pbmcpXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmZvX2NhY2hlIGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICJhZGRpbmZvX2NhY2hlIG1pc3NseWNrYWRlcyBmw7ZyIHPDtmt2w6RnZW4gXCIlc1wiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNzAKK21zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiZmVsIHZpZCBieWdnYW5kZSBhdiB0csOkZCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBzw7ZrdsOkZ2VuIFwiJXNcIiVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMgdG8gbWFrZSByb29tIGZvciBzdWJkaXJlY3RvcnlcbiIKK21zZ3N0ciAiVGFyIGJvcnQgJXMgZsO2ciBhdHQgZ8O2cmEgcGxhdHMgZsO2ciB1bmRlcmthdGFsb2dcbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzEyIG1lcmdlLXJlY3Vyc2l2ZS5jOjczMworbXNnaWQgIjogcGVyaGFwcyBhIEQvRiBjb25mbGljdD8iCittc2dzdHIgIjoga2Fuc2tlIGVuIEsvRi1rb25mbGlrdD8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjcyMworIywgYy1mb3JtYXQKK21zZ2lkICJyZWZ1c2luZyB0byBsb3NlIHVudHJhY2tlZCBmaWxlIGF0ICclcyciCittc2dzdHIgInbDpGdyYXIgZsO2cmxvcmEgb3Nww6VyYWQgZmlsIHZpZCBcIiVzXCIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc2MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2Egb2JqZWt0ZXQgJXM6IFwiJXNcIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzY1CisjLCBjLWZvcm1hdAorbXNnaWQgImJsb2IgZXhwZWN0ZWQgZm9yICVzICclcyciCittc2dzdHIgImJsb2IgZsO2cnbDpG50YWRlcyBmw7ZyICVzIFwiJXNcIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzg4IGJ1aWx0aW4vY2xvbmUuYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIMO2cHBuYSBcIiVzXCIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc5NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEgc3ltYm9saXNrYSBsw6Rua2VuIFwiJXNcIiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgInZldCBpbnRlIGh1ciAlMDZvICVzIFwiJXNcIiBza2FsbCBoYW50ZXJhcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTM3Cittc2dpZCAiRmFpbGVkIHRvIGV4ZWN1dGUgaW50ZXJuYWwgbWVyZ2UiCittc2dzdHIgIk1pc3NseWNrYWRlcyBleGVrdmVyYSBpbnRlcm4gc2FtbWFuc2xhZ25pbmciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsICVzIHRpbGwgZGF0YWJhc2VuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NTcKK21zZ2lkICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSBpbiB0aGUgdHJlZSIKK21zZ3N0ciAib2JqZWt0dHlwIHNvbSBlaiBzdMO2ZHMgdXBwdMOkY2t0ZXMgaSB0csOkZGV0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDMyIG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUICglcy9yYWRlcmEpOiAlcyByYWRlcmFkIGkgJXMgb2NoICVzIGkgJXMuIFZlcnNpb25lbiAlcyBhdiAlcyBsw6RtbmFkICIKKyJpIHRyw6RkZXQuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDM4IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIktPTkZMSUtUICglcy9yYWRlcmEpOiAlcyByYWRlcmFkIGkgJXMgb2NoICVzIGkgJXMuIFZlcnNpb25lbiAlcyBhdiAlcyBsw6RtbmFkICIKKyJpIHRyw6RkZXQgdmlkICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA5MgorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAibmFtbmJ5dGUiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwOTIKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICJuYW1uYnl0dCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXMgw6RyIGVuIGthdGFsb2cgaSAlcyBsw6RnZ2VyIHRpbGwgc29tICVzIGlzdMOkbGxldCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE3MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgXCIlc1wiLT5cIiVzXCIgaW4gYnJhbmNoIFwiJXNcIiByZW5hbWUgXCIlcyIKKyJcIi0+XCIlc1wiIGluIFwiJXNcIiVzIgorbXNnc3RyICIiCisiS09ORkxJS1QgKG5hbW5ieXRlL25hbW5ieXRlKTogTmFtbmJ5dGUgXCIlc1wiLT5cIiVzXCIgcMOlIGdyZW5lbiBcIiVzXCIgIgorIm5hbW5ieXRlIFwiJXNcIi0+XCIlc1wiIGkgXCIlc1wiJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNzUKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIiAobMOkbW5hZCBvbMO2c3QpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gUmVuYW1lICVzLT4lcyBpbiAlcyIKK21zZ3N0ciAiIgorIktPTkZMSUtUIChuYW1uYnl0ZS9uYW1uYnl0ZSk6IE5hbW5ieXRlICVzLT4lcyBpICVzLiBOYW1uYnl0ZSAlcy0+JXMgaSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTI1OQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWluZyAlcyB0byAlcyBhbmQgJXMgdG8gJXMgaW5zdGVhZCIKK21zZ3N0ciAiQnl0ZXIgbmFtbiBww6UgJXMgdGlsbCAlcyBvY2ggJXMgdGlsbCAlcyBpc3TDpGxsZXQiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAlcyBhZGRlZCBpbiAlcyIKK21zZ3N0ciAiS09ORkxJS1QgKG5hbW5ieXRlL3RpbGzDpGdnKTogTmFtbmJ5dGUgJXMtPiVzIGkgJXMuICVzIHRpbGxhZ2QgaSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorbXNnc3RyICJMw6RnZ2VyIHRpbGwgc2FtbWFuc2xhZ2VuICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDczIG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGFzICVzIGluc3RlYWQiCittc2dzdHIgIkzDpGdnZXIgdGlsbCBzb20gJXMgaXN0w6RsbGV0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2Egb2JqZWt0ZXQgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIm9iamVrdGV0ICVzIMOkciBpbnRlIGVuIGJsb2IiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NzUKK21zZ2lkICJtb2RpZnkiCittc2dzdHIgIsOkbmRyYSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU3NQorbXNnaWQgIm1vZGlmaWVkIgorbXNnc3RyICLDpG5kcmFkIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTg1Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAiaW5uZWjDpWxsIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTkyCittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAidGlsbMOkZ2cvdGlsbMOkZ2ciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBlZCAlcyAobWVyZ2VkIHNhbWUgYXMgZXhpc3RpbmcpIgorbXNnc3RyICJIb3BwYWRlIMO2dmVyICVzIChzYW1tYW5zbGFnZW4gc2FtbWEgc29tIGJlZmludGxpZykiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE2NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0by1tZXJnaW5nICVzIgorbXNnc3RyICJTbMOlciBpaG9wICVzIGF1dG9tYXRpc2t0IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQ0IGdpdC1zdWJtb2R1bGUuc2g6MTE1MAorbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAidW5kZXJtb2R1bCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAiS09ORkxJS1QgKCVzKTogU2FtbWFuc2xhZ25pbmdza29uZmxpa3QgaSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTczMQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAiVGFyIGJvcnQgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NTYKK21zZ2lkICJmaWxlL2RpcmVjdG9yeSIKK21zZ3N0ciAiZmlsL2thdGFsb2ciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NjIKK21zZ2lkICJkaXJlY3RvcnkvZmlsZSIKK21zZ3N0ciAia2F0YWxvZy9maWwiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIiIKKyJLT05GTElLVCAoJXMpOiBEZXQgZmlubnMgZW4ga2F0YWxvZyBtZWQgbmFtbmV0ICVzIGkgJXMuIEzDpGdnZXIgdGlsbCAlcyBzb20gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWRkaW5nICVzIgorbXNnc3RyICJMw6RnZ2VyIHRpbGwgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3OTQKK21zZ2lkICJGYXRhbCBtZXJnZSBmYWlsdXJlLCBzaG91bGRuJ3QgaGFwcGVuLiIKK21zZ3N0ciAiw5ZkZXNkaWdlcnQgc2FtbWFuc2xhZ25pbmdzZmVsLCBib3JkZSBpbnRlIGludHLDpGZmYS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MTMKK21zZ2lkICJBbHJlYWR5IHVwLXRvLWRhdGUhIgorbXNnc3RyICJSZWRhbiDDoCBqb3VyISIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJtZXJnaW5nIG9mIHRyZWVzICVzIGFuZCAlcyBmYWlsZWQiCittc2dzdHIgInNhbW1hbnNsYWduaW5nIGF2IHRyw6RkZW4gJXMgb2NoICVzIG1pc3NseWNrYWRlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTg1MgorIywgYy1mb3JtYXQKK21zZ2lkICJVbnByb2Nlc3NlZCBwYXRoPz8/ICVzIgorbXNnc3RyICJPYmVoYW5kbGFkIHPDtmt2w6RnPz8/ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTAwCittc2dpZCAiTWVyZ2luZzoiCittc2dzdHIgIlNsw6VyIGlob3A6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTEzCisjLCBjLWZvcm1hdAorbXNnaWQgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcjoiCittc2dpZF9wbHVyYWwgImZvdW5kICV1IGNvbW1vbiBhbmNlc3RvcnM6IgorbXNnc3RyWzBdICJoaXR0YWRlICV1IGdlbWVuc2FtIGbDtnJmYWRlcjoiCittc2dzdHJbMV0gImhpdHRhZGUgJXUgZ2VtZW5zYW1tYSBmw7ZyZsOkZGVyOiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTk1MAorbXNnaWQgIm1lcmdlIHJldHVybmVkIG5vIGNvbW1pdCIKK21zZ3N0ciAic2FtbWFuc2xhZ25pbmdlbiByZXR1cm5lcmFkZSBpbmdlbiBpbmNoZWNrbmluZyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjAwNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIkt1bmRlIGludGUgdG9sa2Egb2JqZWt0ZXQgXCIlc1wiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDE4IGJ1aWx0aW4vbWVyZ2UuYzo2NDUKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrcml2YSBpbmRleGV0LiIKKworIzogbm90ZXMtdXRpbHMuYzo0MQorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAiS2FuIGludGUgY2hlY2thIGluIG9pbml0aWVyYXQvb3JlZmVyZXJhdCBhbnRlY2tuaW5nc3Ryw6RkIgorCisjOiBub3Rlcy11dGlscy5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgbm90ZXMucmV3cml0ZU1vZGUgdmFsdWU6ICclcyciCittc2dzdHIgIkZlbGFrdGlndCB2w6RyZGUgZsO2ciBub3Rlcy5yZXdyaXRlTW9kZTogJyVzJyIKKworIzogbm90ZXMtdXRpbHMuYzoxMTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gcmV3cml0ZSBub3RlcyBpbiAlcyAob3V0c2lkZSBvZiByZWZzL25vdGVzLykiCittc2dzdHIgIlbDpGdyYXIgc2tyaXZhIMO2dmVyIGFudGVja25pbmdhciBpICVzICh1dGFuZsO2ciByZWZzL25vdGVzLykiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgaXMgdGhlIG5hbWUgb2YgdGhlCisjLiBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHNlY29uZCAlcyBpcyBpdHMgdmFsdWUKKyM6IG5vdGVzLXV0aWxzLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCAlcyB2YWx1ZTogJyVzJyIKK21zZ3N0ciAiRmVsYWt0aWd0IHbDpHJkZSBww6UgJXM6IFwiJXNcIiIKKworIzogb2JqZWN0LmM6MjQyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBvYmplY3Q6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIG9iamVrdGV0OiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjU2MworbXNnaWQgIi4uLiIKK21zZ3N0ciAiLi4uIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyIKK21zZ3N0ciAiYW52w6RuZG5pbmc6ICVzIgorCisjLiBUUkFOU0xBVE9SUzogdGhlIGNvbG9uIGhlcmUgc2hvdWxkIGFsaWduIHdpdGggdGhlCisjLiBvbmUgaW4gInVzYWdlOiAlcyIgdHJhbnNsYXRpb24KKyM6IHBhcnNlLW9wdGlvbnMuYzo1ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgb3I6ICVzIgorbXNnc3RyICIgICAgIGVsbGVyOiAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjU4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJXMiCittc2dzdHIgIiAgICAlcyIKKworIzogcGFyc2Utb3B0aW9ucy5jOjYyMgorbXNnaWQgIi1OVU0iCittc2dzdHIgIi1UQUwiCisKKyM6IHBhdGhzcGVjLmM6MTMzCittc2dpZCAiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorImRlIGdsb2JhbGEgc8O2a3bDpGdzaW5zdMOkbGxuaW5nYXJuYSBcImdsb2JcIiBvY2ggXCJub2dsb2JcIiDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBwYXRoc3BlYy5jOjE0MworbXNnaWQgIiIKKyJnbG9iYWwgJ2xpdGVyYWwnIHBhdGhzcGVjIHNldHRpbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsIG90aGVyIGdsb2JhbCAiCisicGF0aHNwZWMgc2V0dGluZ3MiCittc2dzdHIgIiIKKyJkZW4gZ2xvYmFsYSBzw7ZrdsOkZ3NpbnN0w6RsbG5pbmdlbiBcImxpdGVyYWxcIiDDpHIgaW5rb21wYXRpYmVsIG1lZCBhbGxhIGFuZHJhICIKKyJnbG9iYWxhIHPDtmt2w6Rnc2luc3TDpGxsbmluZ2FyIgorCisjOiBwYXRoc3BlYy5jOjE3NworbXNnaWQgImludmFsaWQgcGFyYW1ldGVyIGZvciBwYXRoc3BlYyBtYWdpYyAncHJlZml4JyIKK21zZ3N0ciAib2dpbHRpZyBwYXJhbWV0ZXIgZsO2ciBzw7ZrdsOkZ3N1dHRyeWNrZXQgZsO2ciBcInByZWZpeFwiIgorCisjOiBwYXRoc3BlYy5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHBhdGhzcGVjIG1hZ2ljICclLipzJyBpbiAnJXMnIgorbXNnc3RyICJmZWxha3RpZ3Qgc8O2a3bDpGdzdXR0cnljayBcIiUuKnNcIiBpIFwiJXNcIiIKKworIzogcGF0aHNwZWMuYzoxODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyAnKScgYXQgdGhlIGVuZCBvZiBwYXRoc3BlYyBtYWdpYyBpbiAnJXMnIgorbXNnc3RyICJcIilcIiBzYWtuYXMgaSBzbHV0ZXQgYXYgc8O2a3bDpGdzdXR0cnlja2V0IGbDtnIgXCIlc1wiIgorCisjOiBwYXRoc3BlYy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIKK21zZ3N0ciAiVGVja25ldCBcIiVjXCIgaSBzw7ZrdsOkZ3N1dHRyeWNrZXQgaSBcIiVzXCIgaGFyIGludGUgaW1wbGVtZW50ZXJhdHMiCisKKyM6IHBhdGhzcGVjLmM6MjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnbGl0ZXJhbCcgYW5kICdnbG9iJyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICIlczogXCJsaXRlcmFsXCIgb2NoIFwiZ2xvYlwiIMOkciBpbmtvbXBhdGlibGEiCisKKyM6IHBhdGhzcGVjLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAnJXMnIGlzIG91dHNpZGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiJXM6IFwiJXNcIiDDpHIgdXRhbmbDtnIgYXJraXZldCIKKworIzogcGF0aHNwZWMuYzoyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0aHNwZWMgJyVzJyBpcyBpbiBzdWJtb2R1bGUgJyUuKnMnIgorbXNnc3RyICJTw7ZrdsOkZ3NhbmdpdmVsc2VuIFwiJXNcIiDDpHIgaSB1bmRlcm1vZHVsZW4gXCIlLipzXCIiCisKKyM6IHBhdGhzcGVjLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiVzOiBzw7ZrdsOkZ3N1dHRyeWNrZXQgaGFudGVyYXMgaW50ZSBhdiBkZXQgaMOkciBrb21tYW5kb3Q6ICVzIgorCisjOiBwYXRoc3BlYy5jOjQzMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgInPDtmt2w6Rnc2FuZ2l2ZWxzZW4gXCIlc1wiIMOkciBww6UgYW5kcmEgc2lkYW4gYXYgZW4gc3ltYm9saXNrIGzDpG5rIgorCisjOiBwYXRoc3BlYy5jOjQ0MQorbXNnaWQgIiIKKyJUaGVyZSBpcyBub3RoaW5nIHRvIGV4Y2x1ZGUgZnJvbSBieSA6KGV4Y2x1ZGUpIHBhdHRlcm5zLlxuIgorIlBlcmhhcHMgeW91IGZvcmdvdCB0byBhZGQgZWl0aGVyICc6Lycgb3IgJy4nID8iCittc2dzdHIgIiIKKyJJbmdlbnRpbmcgYXR0IGV4a2x1ZGVyYSBmcsOlbiBtZWQgOihleGtsdWRlcmEpLW3Dtm5zdGVyLlxuIgorIkdsw7ZtZGUgZHUga2Fuc2tlIGF0dCBhbnRpbmdlbiBsw6RnZ2EgdGlsbCBcIjovXCIgZWxsZXIgXCIuXCI/IgorCisjOiBwcmV0dHkuYzo5NjkKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgLS1wcmV0dHkgZm9ybWF0IgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGZvcm1hdCBmw7ZyIC0tcHJldHR5IgorCisjOiBwcm9ncmVzcy5jOjIzNgorbXNnaWQgImRvbmUiCittc2dzdHIgImtsYXJ0IgorCisjOiByZWFkLWNhY2hlLmM6MTI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiaW5kZXgudmVyc2lvbiBzYXR0LCBtZW4gdsOkcmRldCDDpHIgb2dpbHRpZ3QuXG4iCisiQW52w6RuZGVyIHZlcnNpb24gJWkiCisKKyM6IHJlYWQtY2FjaGUuYzoxMzA2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKyJVc2luZyB2ZXJzaW9uICVpIgorbXNnc3RyICIiCisiR0lUX0lOREVYX1ZFUlNJT04gc2F0dCwgbWVuIHbDpHJkZXQgw6RyIG9naWx0aWd0LlxuIgorIkFudsOkbmRlciB2ZXJzaW9uICVpIgorCisjOiByZWZzLmM6Mjk0MSBidWlsdGluL21lcmdlLmM6NzYwIGJ1aWx0aW4vbWVyZ2UuYzo4NzEgYnVpbHRpbi9tZXJnZS5jOjk3MworIzogYnVpbHRpbi9tZXJnZS5jOjk4MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIgorbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSBcIiVzXCIgZsO2ciBza3Jpdm5pbmciCisKKyM6IHJlZnMuYzozMDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0YSBib3J0IHJlZmVyZW5zZW4gJXM6ICVzIgorCisjOiByZWZzLmM6MzAwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgZGVsZXRlIHJlZmVyZW5jZXM6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRhIGJvcnQgcmVmZXJlbnNlcjogJXMiCisKKyM6IHJlZnMuYzozMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHRhIGJvcnQgcmVmZXJlbnNlbiAlcyIKKworIzogcmVmLWZpbHRlci5jOjY2MAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQiCittc2dzdHIgImthbiBpbnRlIHRvbGthIGZvcm1hdGV0IgorCisjOiByZW1vdGUuYzo3OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGZldGNoIGJvdGggJXMgYW5kICVzIHRvICVzIgorbXNnc3RyICJLYW4gaW50ZSBow6RtdGEgYsOlZGUgJXMgb2NoICVzIHRpbGwgJXMiCisKKyM6IHJlbW90ZS5jOjc5NgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB1c3VhbGx5IHRyYWNrcyAlcywgbm90ICVzIgorbXNnc3RyICIlcyBzcMOlcmFyIHZhbmxpZ3R2aXMgJXMsIGludGUgJXMiCisKKyM6IHJlbW90ZS5jOjgwMAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiCittc2dzdHIgIiVzIHNww6VyYXIgYsOlZGUgJXMgb2NoICVzIgorCisjOiByZW1vdGUuYzo4MDgKK21zZ2lkICJJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiSW50ZXJudCBmZWwiCisKKyM6IHJlbW90ZS5jOjE3MjMgcmVtb3RlLmM6MTc2NgorbXNnaWQgIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giCittc2dzdHIgIkhFQUQgcGVrYXIgaW50ZSBww6UgZW4gZ3JlbiIKKworIzogcmVtb3RlLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAib2vDpG5kIGdyZW46IFwiJXNcIiIKKworIzogcmVtb3RlLmM6MTczNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAiaW5nZW4gc3RhbmRhcmR1cHBzdHLDtm0gYW5naXZlbiBmw7ZyIGdyZW5lbiBcIiVzXCIiCisKKyM6IHJlbW90ZS5jOjE3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giCittc2dzdHIgInVwcHN0csO2bXNncmVuZW4gXCIlc1wiIMOkciBpbnRlIGxhZ3JhZCBzb20gZW4gZmrDpHJyc3DDpXJhbmRlIGdyZW4iCisKKyM6IHJlbW90ZS5jOjE3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgInB1c2gtbcOlbGV0IFwiJXNcIiBww6UgZmrDpHJyZW4gXCIlc1wiIGhhciBpbmdlbiBsb2thbHQgc3DDpXJhbmRlIGdyZW4iCisKKyM6IHJlbW90ZS5jOjE3NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnJhbmNoICclcycgaGFzIG5vIHJlbW90ZSBmb3IgcHVzaGluZyIKK21zZ3N0ciAiZ3JlbmVuIFwiJXNcIiBoYXIgaW5nZW4gZmrDpHJyIGbDtnIgXCJwdXNoXCIiCisKKyM6IHJlbW90ZS5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICJcInB1c2hcIi1yZWZlcmVuc3NwZWNpZmlrYXRpb24gZsO2ciBcIiVzXCIgaW5uZWjDpWxsZXIgaW50ZSBcIiVzXCIiCisKKyM6IHJlbW90ZS5jOjE3OTUKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgIlwicHVzaFwiIGhhciBpbmdldCBtw6VsIChwdXNoLmRlZmF1bHQgw6RyIFwiaW5nZW50aW5nXCIpIgorCisjOiByZW1vdGUuYzoxODE3Cittc2dpZCAiY2Fubm90IHJlc29sdmUgJ3NpbXBsZScgcHVzaCB0byBhIHNpbmdsZSBkZXN0aW5hdGlvbiIKK21zZ3N0ciAiXCJlbmtlbCBwdXNoXCIgbW90c3ZhcmFyIGZsZXJhIG9saWthIG3DpWwiCisKKyM6IHJlbW90ZS5jOjIxMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIgorbXNnc3RyICJEaW4gZ3JlbiDDpHIgYmFzZXJhZCBww6UgXCIlc1wiLCBtZW4gZGVuIGhhciBmw7Zyc3Z1bm5pdCB1cHBzdHLDtm1zLlxuIgorCisjOiByZW1vdGUuYzoyMTI4Cittc2dpZCAiICAodXNlIFwiZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgdG8gZml4dXApXG4iCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiBmw7ZyIGF0dCByw6R0dGEpXG4iCisKKyM6IHJlbW90ZS5jOjIxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAtdG8tZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIkRpbiBncmVuIMOkciDDoCBqb3VyIG1lZCBcIiVzXCIuXG4iCisKKyM6IHJlbW90ZS5jOjIxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXQuXG4iCittc2dpZF9wbHVyYWwgIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0cy5cbiIKK21zZ3N0clswXSAiRGluIGdyZW4gbGlnZ2VyIGbDtnJlIFwiJXNcIiBtZWQgJWQgaW5jaGVja25pbmcuXG4iCittc2dzdHJbMV0gIkRpbiBncmVuIGxpZ2dlciBmw7ZyZSBcIiVzXCIgbWVkICVkIGluY2hlY2tuaW5nYXIuXG4iCisKKyM6IHJlbW90ZS5jOjIxNDEKK21zZ2lkICIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHB1c2hcIiBmw7ZyIGF0dCBwdWJsaWNlcmEgZGluYSBsb2thbGEgaW5jaGVja25pbmdhcilcbiIKKworIzogcmVtb3RlLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCisiRGluIGdyZW4gbGlnZ2VyIGVmdGVyIFwiJXNcIiBtZWQgJWQgaW5jaGVja25pbmcsIG9jaCBrYW4gc25hYmJzcG9sYXMuXG4iCittc2dzdHJbMV0gIiIKKyJEaW4gZ3JlbiBsaWdnZXIgZWZ0ZXIgXCIlc1wiIG1lZCAlZCBpbmNoZWNrbmluZ2FyLCBvY2gga2FuIHNuYWJic3BvbGFzLlxuIgorCisjOiByZW1vdGUuYzoyMTUyCittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcHVsbFwiIGbDtnIgYXR0IHVwcGRhdGVyYSBkaW4gbG9rYWxhIGdyZW4pXG4iCisKKyM6IHJlbW90ZS5jOjIxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisiRGluIGdyZW4gb2NoIFwiJXNcIiBoYXIgZGl2ZXJnZXJhdCxcbiIKKyJvY2ggaGFyICVkIHJlc3Bla3RpdmUgJWQgb2xpa2EgaW5jaGVja25pbmcuXG4iCittc2dzdHJbMV0gIiIKKyJEaW4gZ3JlbiBvY2ggXCIlc1wiIGhhciBkaXZlcmdlcmF0LFxuIgorIm9jaCBoYXIgJWQgcmVzcGVrdGl2ZSAlZCBvbGlrYSBpbmNoZWNrbmluZ2FyLlxuIgorCisjOiByZW1vdGUuYzoyMTY1Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHB1bGxcIiBmw7ZyIGF0dCBzbMOlIGlob3AgZmrDpHJyZ3JlbmVuIG1lZCBkaW4gZWdlbilcbiIKKworIzogcmV2aXNpb24uYzoyMTk4Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAiZGluIG51dmFyYW5kZSBncmVuIHZlcmthciB2YXJhIHRyYXNpZyIKKworIzogcmV2aXNpb24uYzoyMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAiZGluIG51dmFyYW5kZSBncmVuIFwiJXNcIiBpbm5laMOlbGxlciDDpG5udSBpbnRlIG7DpWdyYSBpbmNoZWNrbmluZ2FyIgorCisjOiByZXZpc2lvbi5jOjIzOTUKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQgw6RyIGlua29tcGF0aWJlbHQgbWVkIC0tYmlzZWN0IgorCisjOiBydW4tY29tbWFuZC5jOjgzCittc2dpZCAib3BlbiAvZGV2L251bGwgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgw7ZwcG5hIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXAyKCVkLCVkKSBmYWlsZWQiCittc2dzdHIgImR1cDIoJWQsJWQpIG1pc3NseWNrYWRlcyIKKworIzogc2VuZC1wYWNrLmM6Mjk1Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgIm1pc3NseWNrYWRlcyB1bmRlcnRlY2tuYSBwdXNoLWNlcnRpZmlrYXRldCIKKworIzogc2VuZC1wYWNrLmM6NDA0Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCBwdXNoIgorbXNnc3RyICJtb3R0YWdhcnNpZGFuIHN0w7ZkZXIgaW50ZSBwdXNoIG1lZCAtLXNpZ25lZCIKKworIzogc2VuZC1wYWNrLmM6NDA2Cittc2dpZCAiIgorIm5vdCBzZW5kaW5nIGEgcHVzaCBjZXJ0aWZpY2F0ZSBzaW5jZSB0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tIgorInNpZ25lZCBwdXNoIgorbXNnc3RyICIiCisic8OkbmRlciBpbnRlIHB1c2gtY2VydGlmaWthdCBlZnRlcnNvbSBtb3R0YWdhcnNpZGFuIGludGUgc3RsZGVyIHB1c2ggbWVkIC0tIgorInNpZ25lZCIKKworIzogc2VuZC1wYWNrLmM6NDE4Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLWF0b21pYyBwdXNoIgorbXNnc3RyICJtb3R0YWdhcnNpZGFuIHN0w7ZkZXIgaW50ZSBwdXNoIG1lZCAtLWF0b21pYyIKKworIzogc2VxdWVuY2VyLmM6MTgzCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyJlZnRlciBhdHQgaGEgbMO2c3Qga29uZmxpa3Rlcm5hLCBtYXJrZXJhIGRlIHLDpHR0YWRlIHPDtmt2w6RnYXJuYVxuIgorIm1lZCBcImdpdCBhZGQgPHPDtmt2w6RnYXI+XCIgZWxsZXIgXCJnaXQgcm0gPHPDtmt2w6RnYXI+XCIiCisKKyM6IHNlcXVlbmNlci5jOjE4NgorbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nXG4iCisiYW5kIGNvbW1pdCB0aGUgcmVzdWx0IHdpdGggJ2dpdCBjb21taXQnIgorbXNnc3RyICIiCisiZWZ0ZXIgYXR0IGhhIGzDtnN0IGtvbmZsaWt0ZXJuYSwgbWFya2VyYSBkZSByw6R0dGFkZSBzw7ZrdsOkZ2FybmFcbiIKKyJtZWQgXCJnaXQgYWRkIDxzw7ZrdsOkZ2FyPlwiIGVsbGVyIFwiZ2l0IHJtIDxzw7ZrdsOkZ2FyPlwiXG4iCisib2NoIGNoZWNrYSBpbiByZXN1bHRhdGV0IG1lZCBcImdpdCBjb21taXRcIiIKKworIzogc2VxdWVuY2VyLmM6MTk5IHNlcXVlbmNlci5jOjg0MiBzZXF1ZW5jZXIuYzo5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrcml2YSB0aWxsICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMiCittc2dzdHIgIkZlbCB2aWQgb21icnl0bmluZyBhdiAlcyIKKworIzogc2VxdWVuY2VyLmM6MjE3Cittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IGNoZXJyeS1waWNrLiIKK21zZ3N0ciAiRGluYSBsb2thbGEgw6RuZHJpbmdhciBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiBcImNoZXJyeS1waWNrXCIuIgorCisjOiBzZXF1ZW5jZXIuYzoyMTkKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgcmV2ZXJ0LiIKK21zZ3N0ciAiRGluYSBsb2thbGEgw6RuZHJpbmdhciBza3VsbGUgc2tyaXZhcyDDtnZlciBhdiBcInJldmVydFwiLiIKKworIzogc2VxdWVuY2VyLmM6MjIyCittc2dpZCAiQ29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICJDaGVja2EgaW4gZGluYSDDpG5kcmluZ2FyIGVsbGVyIGFudsOkbmQgXCJzdGFzaFwiIGbDtnIgYXR0IGZvcnRzw6R0dGEuIgorCisjLiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2siCisjOiBzZXF1ZW5jZXIuYzozMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IFVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiJXM6IEt1bmRlIGludGUgc2tyaXZhIG55IGluZGV4ZmlsIgorCisjOiBzZXF1ZW5jZXIuYzozMjcKK21zZ2lkICJDb3VsZCBub3QgcmVzb2x2ZSBIRUFEIGNvbW1pdFxuIgorbXNnc3RyICJLdW5kZSBpbnRlIGJlc3TDpG1tYSBIRUFEOnMgaW5jaGVja25pbmdcbiIKKworIzogc2VxdWVuY2VyLmM6MzQ3Cittc2dpZCAiVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlXG4iCittc2dzdHIgIkthbiBpbnRlIHVwcGRhdGVyYSBjYWNoZXRyw6RkXG4iCisKKyM6IHNlcXVlbmNlci5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgY29tbWl0ICVzXG4iCittc2dzdHIgIkt1bmRlIGludGUgdG9sa2EgaW5jaGVja25pbmdlbiAlc1xuIgorCisjOiBzZXF1ZW5jZXIuYzo0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIHBhcmVudCBjb21taXQgJXNcbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0b2xrYSBmw7Zyw6RsZHJhaW5jaGVja25pbmdlbiAlc1xuIgorCisjOiBzZXF1ZW5jZXIuYzo0NjkKK21zZ2lkICJZb3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIgorbXNnc3RyICJEaW4gaW5kZXhmaWwgaGFyIGludGUgc2xhZ2l0cyBpaG9wLiIKKworIzogc2VxdWVuY2VyLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIKK21zZ3N0ciAiSW5jaGVja25pbmcgJXMgw6RyIGVuIHNhbW1hbnNsYWduaW5nLCBtZW4gZmxhZ2dhbiAtbSBhbmdhdnMgaW50ZS4iCisKKyM6IHNlcXVlbmNlci5jOjQ5NgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiCittc2dzdHIgIkluY2hlY2tuaW5nICVzIGhhciBpbnRlIGbDtnLDpGxkZXIgJWQiCisKKyM6IHNlcXVlbmNlci5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWlubGluZSB3YXMgc3BlY2lmaWVkIGJ1dCBjb21taXQgJXMgaXMgbm90IGEgbWVyZ2UuIgorbXNnc3RyICJIdXZ1ZGxpbmplIGFuZ2F2cywgbWVuIGluY2hlY2tuaW5nZW4gJXMgw6RyIGludGUgZW4gc2FtbWFuc2xhZ25pbmciCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSAicmV2ZXJ0IiBvcgorIy4gImNoZXJyeS1waWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEKKyM6IHNlcXVlbmNlci5jOjUxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVzOiBrYW4gaW50ZSB0b2xrYSBmw7Zyw6RsZHJhaW5jaGVja25pbmdlbiAlcyIKKworIzogc2VxdWVuY2VyLmM6NTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICJLYW4gaW50ZSBow6RtdGEgaW5jaGVja25pbmdzbWVkZGVsYW5kZSBmw7ZyICVzIgorCisjOiBzZXF1ZW5jZXIuYzo2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJldmVydCAlcy4uLiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDpW5ncmEgJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgImt1bmRlIGludGUgdGlsbMOkbXBhICVzLi4uICVzIgorCisjOiBzZXF1ZW5jZXIuYzo2MzkKK21zZ2lkICJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIKK21zZ3N0ciAiZGVuIGFuZ2l2bmEgdXBwc8OkdHRuaW5nZW4gaW5jaGVja25pbmdhciDDpHIgdG9tIgorCisjOiBzZXF1ZW5jZXIuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogbWlzc2x5Y2thZGVzIGzDpHNhIGluZGV4ZXQiCisKKyM6IHNlcXVlbmNlci5jOjY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVzOiBtaXNzbHlja2FkZXMgdXBwZGF0ZXJhIGluZGV4ZXQiCisKKyM6IHNlcXVlbmNlci5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJXMgZHVyaW5nIGEgJXMiCittc2dzdHIgImthbiBpbnRlICVzIHVuZGVyIGVuICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIgorbXNnc3RyICJLYW4gaW50ZSB0b2xrYSByYWQgJWQuIgorCisjOiBzZXF1ZW5jZXIuYzo3MzgKK21zZ2lkICJObyBjb21taXRzIHBhcnNlZC4iCittc2dzdHIgIkluZ2EgaW5jaGVja25pbmdhciBsw6RzdGVzLiIKKworIzogc2VxdWVuY2VyLmM6NzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIMO2cHBuYSAlcyIKKworIzogc2VxdWVuY2VyLmM6NzU0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkICVzLiIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJXMiCittc2dzdHIgIk9hbnbDpG5kYmFydCBtYW51czogJXMiCisKKyM6IHNlcXVlbmNlci5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGtleTogJXMiCittc2dzdHIgIkZlbGFrdGlnIG55Y2tlbDogJXMiCisKKyM6IHNlcXVlbmNlci5jOjc5NCBidWlsdGluL3B1bGwuYzo0NyBidWlsdGluL3B1bGwuYzo0OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiCittc2dzdHIgIkZlbGFrdGlndCB2w6RyZGUgZsO2ciAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJXMiCittc2dzdHIgIlRyYXNpZ3QgbWFudXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJlbiBcImNoZXJyeS1waWNrXCIgZWxsZXIgXCJyZXZlcnRcIiBww6Vnw6VyIHJlZGFuIgorCisjOiBzZXF1ZW5jZXIuYzo4MjQKK21zZ2lkICJ0cnkgXCJnaXQgY2hlcnJ5LXBpY2sgKC0tY29udGludWUgfCAtLXF1aXQgfCAtLWFib3J0KVwiIgorbXNnc3RyICJ0ZXN0YSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiCittc2dzdHIgIkt1bmRlIGludGUgc2thcGEgXCJzZXF1ZW5jZXJcIi1rYXRhbG9nZW4gXCIlc1wiIgorCisjOiBzZXF1ZW5jZXIuYzo4NDQgc2VxdWVuY2VyLmM6OTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzLiIKK21zZ3N0ciAiRmVsIHZpZCBvbWJyeXRuaW5nIGF2ICVzLiIKKworIzogc2VxdWVuY2VyLmM6ODYzIHNlcXVlbmNlci5jOjk5NgorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAiaW5nZW4gXCJjaGVycnktcGlja1wiIGVsbGVyIFwicmV2ZXJ0XCIgcMOlZ8OlciIKKworIzogc2VxdWVuY2VyLmM6ODY1Cittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAia2FuIGludGUgYmVzdMOkbW1hIEhFQUQiCisKKyM6IHNlcXVlbmNlci5jOjg2NworbXNnaWQgImNhbm5vdCBhYm9ydCBmcm9tIGEgYnJhbmNoIHlldCB0byBiZSBib3JuIgorbXNnc3RyICJrYW4gaW50ZSBhdmJyeXRhIGZyw6VuIGVuIGdyZW4gc29tIMOkbm51IGludGUgw6RyIGbDtmRkIgorCisjOiBzZXF1ZW5jZXIuYzo4ODcgYnVpbHRpbi9hcHBseS5jOjQyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEgJXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJXM6ICVzIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjg5MQorbXNnaWQgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiCittc2dzdHIgIm92w6RudGF0IGZpbHNsdXQiCisKKyM6IHNlcXVlbmNlci5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgInNwYXJhZCBIRUFELWZpbCBmcsOlbiBmw7ZyZSBcImNoZXJyeS1waWNrXCIsIFwiJXNcIiwgw6RyIHRyYXNpZyIKKworIzogc2VxdWVuY2VyLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorbXNnc3RyICJLdW5kZSBpbnRlIGZvcm1hdGVyYSAlcy4iCisKKyM6IHNlcXVlbmNlci5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiVzOiBrYW4gaW50ZSBnw7ZyYSBcImNoZXJyeS1waWNrXCIgcMOlIHR5cGVuIFwiJXNcIiIKKworIzogc2VxdWVuY2VyLmM6MTA2NworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYmFkIHJldmlzaW9uIgorbXNnc3RyICIlczogZmVsYWt0aWcgcmV2aXNpb24iCisKKyM6IHNlcXVlbmNlci5jOjExMDEKK21zZ2lkICJDYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIkthbiBpbnRlIMOlbmdyYSBzb20gZsO2cnN0YSBpbmNoZWNrbmluZyIKKworIzogc2VxdWVuY2VyLmM6MTEwMgorbXNnaWQgIkNhbid0IGNoZXJyeS1waWNrIGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiS2FuIGludGUgZ8O2cmEgXCJjaGVycnktcGlja1wiIGkgZXR0IHRvbXQgaHV2dWQiCisKKyM6IHNldHVwLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZWFkICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkc2EgJXMiCisKKyM6IHNoYTFfbmFtZS5jOjQ1MworbXNnaWQgIiIKKyJHaXQgbm9ybWFsbHkgbmV2ZXIgY3JlYXRlcyBhIHJlZiB0aGF0IGVuZHMgd2l0aCA0MCBoZXggY2hhcmFjdGVyc1xuIgorImJlY2F1c2UgaXQgd2lsbCBiZSBpZ25vcmVkIHdoZW4geW91IGp1c3Qgc3BlY2lmeSA0MC1oZXguIFRoZXNlIHJlZnNcbiIKKyJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJ3aGVyZSBcIiRiclwiIGlzIHNvbWVob3cgZW1wdHkgYW5kIGEgNDAtaGV4IHJlZiBpcyBjcmVhdGVkLiBQbGVhc2VcbiIKKyJleGFtaW5lIHRoZXNlIHJlZnMgYW5kIG1heWJlIGRlbGV0ZSB0aGVtLiBUdXJuIHRoaXMgbWVzc2FnZSBvZmYgYnlcbiIKKyJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKK21zZ3N0ciAiIgorIkdpdCBza2FwYXIgbm9ybWFsdCBhbGRyaWcgcmVmZXJlbnNlciBzb20gc2x1dGFyIG1lZCA0MCBoZXhhZGVjaW1hbGFcbiIKKyJ0ZWNrZW4sIGTDpSBkZXR0YSBpZ25vcmVyYXMgbsOkciBkdSBhbmdlciA0MC1oZXggZW5iYXJ0LiBEZXNzYVxuIgorInJlZmVyZW5zZXIga2FuIHNrYXBhcyBhdiBtaXNzdGFnLiBUaWxsIGV4ZW1wZWwsIGbDtnJcbiIKKyJcbiIKKyIgIGdpdCBjaGVja291dCAtYiAkYnIgJChnaXQgcmV2LXBhcnNlIC4uLilcbiIKKyJcbiIKKyJkw6RyIFwiJGJyXCIgcMOlIG7DpWdvdCBzw6R0dCBibGl2aXQgdG9tdCBvY2ggZW4gNDAtaGV4LXJlZmVyZW5zIHNrYXBhdHMuXG4iCisiVW5kZXJzw7ZrIHJlZmVyZW5zZXJuYSBvY2ggdGEga2Fuc2tlIGJvcnQgZGVtLiBTdMOkbmcgYXYgbWVkZGVsYW5kZXRcbiIKKyJnZW5vbSBhdHQga8O2cmEgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorCisjOiBzdWJtb2R1bGUuYzo2MSBzdWJtb2R1bGUuYzo5NQorbXNnaWQgIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IgorbXNnc3RyICIiCisiS2FuIGludGUgw6RuZHJhIC5naXRtb2R1bGVzLWZpbCBzb20gaW50ZSBzbGFnaXRzIGlob3AsIGzDtnMgIgorInNhbW1hbnNsYWduaW5nc2tvbmZsaWt0ZXIgZsO2cnN0IgorCisjOiBzdWJtb2R1bGUuYzo2NSBzdWJtb2R1bGUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9JXMiCittc2dzdHIgIkhpdHRhZGUgaW50ZSBuw6Vnb24gc2VrdGlvbiBpIC5naXRtb2R1bGVzIGTDpHIgc8O2a3bDpGc9JXMiCisKKyM6IHN1Ym1vZHVsZS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgIkt1bmRlIGludGUgdXBwZGF0ZXJhIC5naXRtb2R1bGVzLXBvc3RlbiAlcyIKKworIzogc3VibW9kdWxlLmM6MTA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHRhIGJvcnQgLmdpdG1vZHVsZXMtcG9zdGVuIGbDtnIgJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjExNworbXNnaWQgInN0YWdpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCittc2dzdHIgIm1pc3NseWNrYWRlcyBrw7ZhIHVwcGRhdGVyYWQgLmdpdG1vZHVsZXMiCisKKyM6IHN1Ym1vZHVsZS5jOjEwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBjb3JlLndvcmt0cmVlIGluICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIHPDpHR0YSBjb3JlLndvcmt0cmVlIGkgJXMiCisKKyM6IHRyYWlsZXIuYzo0OTEgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NDk5IHRyYWlsZXIuYzo1NTMgdHJhaWxlci5jOjU1NworIzogdHJhaWxlci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICJva8OkbnQgdsOkcmRlIFwiJXNcIiBmw7ZyIG55Y2tlbG4gXCIlc1wiIgorCisjOiB0cmFpbGVyLmM6NTQzIHRyYWlsZXIuYzo1NDggYnVpbHRpbi9yZW1vdGUuYzoyOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIG9uZSAlcyIKK21zZ3N0ciAibWVyIMOkbiBlbiAlcyIKKworIzogdHJhaWxlci5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICJ0b20gc2zDpHByYWRzc3ltYm9sIGkgc2zDpHByYWRlbiBcIiUuKnNcIiIKKworIzogdHJhaWxlci5jOjcwMQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgaW5kYXRhZmlsZW4gXCIlc1wiIgorCisjOiB0cmFpbGVyLmM6NzA0Cittc2dpZCAiY291bGQgbm90IHJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RzYSBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIHJlZmVyZW5zZW4gJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjIwMworbXNnaWQgIkNoZWNraW5nIG91dCBmaWxlcyIKK21zZ3N0ciAiQ2hlY2thciB1dCBmaWxlciIKKworIzogdXJsbWF0Y2guYzoxMjAKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAib2dpbHRpZyBVUkwtc2NoZW1hbmFtbiBlbGxlciBzYWtuYXQgXCI6Ly9cIi1zdWZmaXgiCisKKyM6IHVybG1hdGNoLmM6MTQ0IHVybG1hdGNoLmM6Mjk3IHVybG1hdGNoLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAib2dpbHRpZyAlWFgtdGVja2Vuc2VrdmVucyIKKworIzogdXJsbWF0Y2guYzoxNzIKK21zZ2lkICJtaXNzaW5nIGhvc3QgYW5kIHNjaGVtZSBpcyBub3QgJ2ZpbGU6JyIKK21zZ3N0ciAidsOkcmQgc2FrbmFzIG9jaCBzY2hlbWF0IMOkciBpbnRlIFwiZmlsZTpcIiIKKworIzogdXJsbWF0Y2guYzoxODkKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJlbiBcImZpbGU6XCItVVJMIGthbiBpbnRlIGlubmVow6VsbGEgcG9ydG51bW1lciIKKworIzogdXJsbWF0Y2guYzoxOTkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICJvZ2lsdGlnYSB0ZWNrZW4gaSB2w6RyZG5hbW5ldCIKKworIzogdXJsbWF0Y2guYzoyNDQgdXJsbWF0Y2guYzoyNTUKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJmZWxha3RpZ3QgcG9ydG51bW1lciIKKworIzogdXJsbWF0Y2guYzozMjIKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICJmZWxha3RpZ3QgXCIuLlwiLXPDtmt2w6Rnc3NlZ21lbnQiCisKKyM6IHdyYXBwZXIuYzoyMTkgd3JhcHBlci5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBcIiVzXCIgZsO2ciBsw6RzbmluZyBvY2ggc2tyaXZuaW5nIgorCisjOiB3cmFwcGVyLmM6MjIxIHdyYXBwZXIuYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAia3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIGbDtnIgc2tyaXZuaW5nIgorCisjOiB3cmFwcGVyLmM6MjIzIHdyYXBwZXIuYzozNjYgYnVpbHRpbi9hbS5jOjMzNyBidWlsdGluL2NvbW1pdC5jOjE2ODgKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDc2IGJ1aWx0aW4vcHVsbC5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBcIiVzXCIgZsO2ciBsw6RzbmluZyIKKworIzogd3JhcHBlci5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyc6ICVzIgorbXNnc3RyICJrYW4gaW50ZSBrb21tYSDDpXQgXCIlc1wiOiAlcyIKKworIzogd3JhcHBlci5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWNjZXNzICclcyciCittc2dzdHIgImthbiBpbnRlIGtvbW1hIMOldCBcIiVzXCIiCisKKyM6IHdyYXBwZXIuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiCittc2dzdHIgImthbiBpbnRlIHNsw6UgdXBwIGFrdHVlbGwgYW52w6RuZGFyZSBpIHBhc3N3ZC1maWxlbjogJXMiCisKKyM6IHdyYXBwZXIuYzo2MTIKK21zZ2lkICJubyBzdWNoIHVzZXIiCittc2dzdHIgIm9rw6RuZCBhbnbDpG5kYXJlIgorCisjOiB3cmFwcGVyLmM6NjIwCittc2dpZCAidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICJrYW4gaW50ZSBow6RtdGEgYWt0dWVsbCBhcmJldHNrYXRhbG9nIgorCisjOiB3cmFwcGVyLmM6NjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSAlcyBmw7ZyIHNrcml2bmluZyIKKworIzogd3JhcHBlci5jOjY0MiBidWlsdGluL2FtLmM6NDI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSB0byAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgdGlsbCAlcyIKKworIzogd3JhcHBlci5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJXMiCittc2dzdHIgImt1bmRlIGludGUgc3TDpG5nYSAlcyIKKworIzogd3Qtc3RhdHVzLmM6MTQ5Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICJFaiBzYW1tYW5zbGFnbmEgc8O2a3bDpGdhcjoiCisKKyM6IHd0LXN0YXR1cy5jOjE3NiB3dC1zdGF0dXMuYzoyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlc2V0ICVzIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJlc2V0ICVzIDxmaWw+Li4uXCIgZsO2ciBhdHQgdGEgYm9ydCBmcsOlbiBrw7YpIgorCisjOiB3dC1zdGF0dXMuYzoxNzggd3Qtc3RhdHVzLmM6MjA1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWw+Li4uXCIgZsO2ciBhdHQgdGEgYm9ydCBmcsOlbiBrw7YpIgorCisjOiB3dC1zdGF0dXMuYzoxODIKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgYWRkIDxmaWw+Li4uXCIgZsO2ciBhdHQgYW5nZSBsw7ZzbmluZykiCisKKyM6IHd0LXN0YXR1cy5jOjE4NCB3dC1zdGF0dXMuYzoxODgKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgYWRkL3JtIDxmaWw+Li4uXCIgc29tIGzDpG1wbGlndCBmw7ZyIGF0dCBhbmdlIGzDtnNuaW5nKSIKKworIzogd3Qtc3RhdHVzLmM6MTg2Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcm0gPGZpbD4uLi5cIiBmw7ZyIGF0dCBhbmdlIGzDtnNuaW5nKSIKKworIzogd3Qtc3RhdHVzLmM6MTk3IHd0LXN0YXR1cy5jOjg4MAorbXNnaWQgIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAiw4RuZHJpbmdhciBhdHQgY2hlY2thIGluOiIKKworIzogd3Qtc3RhdHVzLmM6MjE1IHd0LXN0YXR1cy5jOjg4OQorbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAiw4RuZHJpbmdhciBlaiBpIGluY2hlY2tuaW5nc2vDtm46IgorCisjOiB3dC1zdGF0dXMuYzoyMTkKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGFudsOkbmQgXCJnaXQgYWRkIDxmaWw+Li4uXCIgZsO2ciBhdHQgdXBwZGF0ZXJhIHZhZCBzb20gc2thbGwgY2hlY2thcyBpbikiCisKKyM6IHd0LXN0YXR1cy5jOjIyMQorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIiCisiICAoYW52w6RuZCBcImdpdCBhZGQvcm0gPGZpbD4uLi5cIiBmw7ZyIGF0dCB1cHBkYXRlcmEgdmFkIHNvbSBza2FsbCBjaGVja2FzIGluKSIKKworIzogd3Qtc3RhdHVzLmM6MjIyCittc2dpZCAiIgorIiAgKHVzZSBcImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi5cIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpIgorbXNnc3RyICIiCisiICAoYW52w6RuZCBcImdpdCBjaGVja291dCAtLSA8ZmlsPi4uLlwiIGbDtnIgYXR0IGbDtnJrYXN0YSDDpG5kcmluZ2FyIGkgIgorImFyYmV0c2thdGFsb2dlbikiCisKKyM6IHd0LXN0YXR1cy5jOjIyNAorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiIgorIiAgKGNoZWNrYSBpbiBlbGxlciBmw7Zya2FzdGEgb3Nww6VyYXQgZWxsZXIgw6RuZHJhdCBpbm5laMOlbGwgaSB1bmRlcm1vZHVsZXIpIgorCisjOiB3dC1zdGF0dXMuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAodXNlIFwiZ2l0ICVzIDxmaWxlPi4uLlwiIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiIKKyIgIChhbnbDpG5kIFwiZ2l0ICVzIDxmaWw+Li4uXCIgZsO2ciBhdHQgdGEgbWVkIGkgZGV0IHNvbSBza2FsbCBjaGVja2FzIGluKSIKKworIzogd3Qtc3RhdHVzLmM6MjUxCittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAiYm9ydHRhZ2V0IGF2IGLDpGdnZToiCisKKyM6IHd0LXN0YXR1cy5jOjI1MworbXNnaWQgImFkZGVkIGJ5IHVzOiIKK21zZ3N0ciAidGlsbGFndCBhdiBvc3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNTUKK21zZ2lkICJkZWxldGVkIGJ5IHRoZW06IgorbXNnc3RyICJib3J0dGFnZXQgYXYgZGVtOiIKKworIzogd3Qtc3RhdHVzLmM6MjU3Cittc2dpZCAiYWRkZWQgYnkgdGhlbToiCittc2dzdHIgInRpbGxhZ3QgYXYgZGVtOiIKKworIzogd3Qtc3RhdHVzLmM6MjU5Cittc2dpZCAiZGVsZXRlZCBieSB1czoiCittc2dzdHIgImJvcnR0YWdldCBhdiBvc3M6IgorCisjOiB3dC1zdGF0dXMuYzoyNjEKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAidGlsbGFndCBhdiBiw6RnZ2U6IgorCisjOiB3dC1zdGF0dXMuYzoyNjMKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAiw6RuZHJhdCBhdiBiw6RnZ2U6IgorCisjOiB3dC1zdGF0dXMuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4IgorbXNnc3RyICJwcm9ncmFtZmVsOiBlaiBoYW50ZXJhZCBcInVubWVyZ2VkXCItc3RhdHVzICV4IgorCisjOiB3dC1zdGF0dXMuYzoyNzMKK21zZ2lkICJuZXcgZmlsZToiCittc2dzdHIgIm55IGZpbDoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NQorbXNnaWQgImNvcGllZDoiCittc2dzdHIgImtvcGllcmFkOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc3Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgImJvcnR0YWdlbjoiCisKKyM6IHd0LXN0YXR1cy5jOjI3OQorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAiw6RuZHJhZDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MQorbXNnaWQgInJlbmFtZWQ6IgorbXNnc3RyICJuYW1uYnl0dDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4MworbXNnaWQgInR5cGVjaGFuZ2U6IgorbXNnc3RyICJ0eXBieXRlOiIKKworIzogd3Qtc3RhdHVzLmM6Mjg1Cittc2dpZCAidW5rbm93bjoiCittc2dzdHIgIm9rw6RuZDoiCisKKyM6IHd0LXN0YXR1cy5jOjI4NworbXNnaWQgInVubWVyZ2VkOiIKK21zZ3N0ciAib3NhbW1hbnNsYWdlbjoiCisKKyM6IHd0LXN0YXR1cy5jOjM2OQorbXNnaWQgIm5ldyBjb21taXRzLCAiCittc2dzdHIgIm55YSBpbmNoZWNrbmluZ2FyLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM3MQorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAiw6RuZHJhdCBpbm5laMOlbGwsICIKKworIzogd3Qtc3RhdHVzLmM6MzczCittc2dpZCAidW50cmFja2VkIGNvbnRlbnQsICIKK21zZ3N0ciAib3Nww6VyYXQgaW5uZWjDpWxsLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICJidWc6IHVuaGFuZGxlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAicHJvZ3JhbWZlbDogZGlmZi1zdGF0dXMgJWMgZWogaGFudGVyYWQiCisKKyM6IHd0LXN0YXR1cy5jOjc1NAorbXNnaWQgIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IgorbXNnc3RyICJVbmRlcm1vZHVsZXIgw6RuZHJhZGUgbWVuIGludGUgdXBwZGF0ZXJhZGU6IgorCisjOiB3dC1zdGF0dXMuYzo3NTYKK21zZ2lkICJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICJVbmRlcm1vZHVsZXJzIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpbjoiCisKKyM6IHd0LXN0YXR1cy5jOjgzNworbXNnaWQgIiIKKyJEbyBub3QgdG91Y2ggdGhlIGxpbmUgYWJvdmUuXG4iCisiRXZlcnl0aGluZyBiZWxvdyB3aWxsIGJlIHJlbW92ZWQuIgorbXNnc3RyICIiCisiUsO2ciBpbnRlIHJhZGVuIG92YW4uXG4iCisiQWxsdCBuZWRhbiBrb21tZXIgdGFzIGJvcnQuIgorCisjOiB3dC1zdGF0dXMuYzo5NDgKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIkR1IGhhciBlaiBzYW1tYW5zbGFnbmEgc8O2a3bDpGdhci4iCisKKyM6IHd0LXN0YXR1cy5jOjk1MQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKHLDpHR0YSBrb25mbGlrdGVyIG9jaCBrw7ZyIFwiZ2l0IGNvbW1pdFwiKSIKKworIzogd3Qtc3RhdHVzLmM6OTU0Cittc2dpZCAiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIKK21zZ3N0ciAiQWxsYSBrb25mbGlrdGVyIGhhciByw6R0dGF0cyBtZW4gZHUgw6RyIGZvcnRmYXJhbmRlIGkgZW4gc2FtbWFuc2xhZ25pbmcuIgorCisjOiB3dC1zdGF0dXMuYzo5NTcKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgIChhbnbDpG5kIFwiZ2l0IGNvbW1pdFwiIGbDtnIgYXR0IHNsdXRmw7ZyYSBzYW1tYW5zbGFnbmluZ2VuKSIKKworIzogd3Qtc3RhdHVzLmM6OTY3Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICJEdSDDpHIgaSBtaXR0ZW4gYXYgZW4ga8O2cm5pbmcgYXYgXCJnaXQgYW1cIi4iCisKKyM6IHd0LXN0YXR1cy5jOjk3MAorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiQWt0dWVsbCBwYXRjaCDDpHIgdG9tLiIKKworIzogd3Qtc3RhdHVzLmM6OTc0Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAocsOkdHRhIGtvbmZsaWt0ZXIgb2NoIGvDtnIgc2VkYW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6OTc2Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tc2tpcFwiIHRvIHNraXAgdGhpcyBwYXRjaCkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgYW0gLS1za2lwXCIgZsO2ciBhdHQgaG9wcGEgw7Z2ZXIgcGF0Y2hlbikiCisKKyM6IHd0LXN0YXR1cy5jOjk3OAorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCBhbSAtLWFib3J0XCIgZsO2ciBhdHQgw6V0ZXJzdMOkbGxhIHVyc3BydW5nc2dyZW5lbikiCisKKyM6IHd0LXN0YXR1cy5jOjExMDUKK21zZ2lkICJObyBjb21tYW5kcyBkb25lLiIKK21zZ3N0ciAiSW5nYSBrb21tYW5kb24gdXRmw7ZyZGEuIgorCisjOiB3dC1zdGF0dXMuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIKK21zZ2lkX3BsdXJhbCAiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiCittc2dzdHJbMF0gIlNpc3RhIGtvbW1hbmRvdCB1dGbDtnJ0ICglZCBrb21tYW5kbyB1dGbDtnJ0KToiCittc2dzdHJbMV0gIlNpc3RhIGtvbW1hbmRvdCB1dGbDtnJ0ICglZCBrb21tYW5kb24gdXRmw7ZydCk6IgorCisjOiB3dC1zdGF0dXMuYzoxMTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHNlZSBtb3JlIGluIGZpbGUgJXMpIgorbXNnc3RyICIgIChzZSBmbGVyIGkgZmlsZW4gJXMpIgorCisjOiB3dC1zdGF0dXMuYzoxMTI0Cittc2dpZCAiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIKK21zZ3N0ciAiSW5nYSBrb21tYW5kb24gw6V0ZXJzdMOlci4iCisKKyM6IHd0LXN0YXR1cy5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IgorbXNnaWRfcGx1cmFsICJOZXh0IGNvbW1hbmRzIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZHMpOiIKK21zZ3N0clswXSAiTsOkc3RhIGtvbW1hbmRvIGF0dCB1dGbDtnJhICglZCBrb21tYW5kbyDDpXRlcnN0w6VyKToiCittc2dzdHJbMV0gIkbDtmxqYW5kZSBrb21tYW5kb24gYXR0IHV0ZsO2cmEgKCVkIGtvbW1hbmRvbiDDpXRlcnN0w6VyKToiCisKKyM6IHd0LXN0YXR1cy5jOjExMzUKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgdG8gdmlldyBhbmQgZWRpdCkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgZsO2ciBhdHQgdmlzYSBvY2ggcmVkaWdlcmEpIgorCisjOiB3dC1zdGF0dXMuYzoxMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnJXMnIG9uICclcycuIgorbXNnc3RyICJEdSBow6VsbGVyIHDDpSBhdHQgb21iYXNlcmEgZ3JlbmVuIFwiJXNcIiBvdmFucMOlIFwiJXNcIi4iCisKKyM6IHd0LXN0YXR1cy5jOjExNTMKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iCittc2dzdHIgIkR1IGjDpWxsZXIgcMOlIG1lZCBlbiBvbWJhc2VyaW5nLiIKKworIzogd3Qtc3RhdHVzLmM6MTE2NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChyw6R0dGEga29uZmxpa3RlciBvY2gga8O2ciBzZWRhbiBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTE2OQorbXNnaWQgIiAgKHVzZSBcImdpdCByZWJhc2UgLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCByZWJhc2UgLS1za2lwXCIgZsO2ciBhdHQgaG9wcGEgw7Z2ZXIgcGF0Y2hlbikiCisKKyM6IHd0LXN0YXR1cy5jOjExNzEKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiBmw7ZyIGF0dCBjaGVja2EgdXQgdXJzcHJ1bmdzZ3JlbmVuKSIKKworIzogd3Qtc3RhdHVzLmM6MTE3NworbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoYWxsYSBrb25mbGlrdGVyIHLDpHR0YWRlOiBrw7ZyIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJEdSBow6VsbGVyIHDDpSBhdHQgZGVsYSB1cHAgZW4gaW5jaGVja25pbmcgbWVkYW4gZHUgb21iYXNlcmFyIGdyZW5lbiBcIiVzXCIgIgorIm92YW5ww6UgXCIlc1wiLiIKKworIzogd3Qtc3RhdHVzLmM6MTE4NgorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICJEdSBow6VsbGVyIHDDpSBhdHQgZGVsYSB1cHAgZW4gaW5jaGVja25pbmcgaSBlbiBvbWJhc2VyaW5nLiIKKworIzogd3Qtc3RhdHVzLmM6MTE4OQorbXNnaWQgIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChTw6UgZm9ydCBkaW4gYXJiZXRza2F0YWxvZyDDpHIgcmVuLCBrw7ZyIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTkzCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJEdSBow6VsbGVyIHDDpSBhdHQgcmVkaWdlcmEgZW4gaW5jaGVja25pbmcgbWVkYW4gZHUgb21iYXNlcmFyIGdyZW5lbiBcIiVzXCIgIgorIm92YW5ww6UgXCIlc1wiLiIKKworIzogd3Qtc3RhdHVzLmM6MTE5OAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiRHUgaMOlbGxlciBww6UgYXR0IHJlZGlnZXJhIGVuIGluY2hlY2tuaW5nIHVuZGVyIGVuIG9tYmFzZXJpbmcuIgorCisjOiB3dC1zdGF0dXMuYzoxMjAxCittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIKK21zZ3N0ciAiIgorIiAgKGFudsOkbmQgXCJnaXQgY29tbWl0IC0tYW1lbmRcIiBmw7ZyIGF0dCBsw6RnZ2EgdGlsbCBww6UgYWt0dWVsbCBpbmNoZWNrbmluZykiCisKKyM6IHd0LXN0YXR1cy5jOjEyMDMKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiAgKGFudsOkbmQgXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBuw6RyIGR1IMOkciBuw7ZqZCBtZWQgZGluYSDDpG5kcmluZ2FyKSIKKworIzogd3Qtc3RhdHVzLmM6MTIxMworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJXMuIgorbXNnc3RyICJEdSBow6VsbGVyIHDDpSBtZWQgZW4gXCJjaGVycnktcGlja1wiIGF2IGluY2hlY2tuaW5nZW4gJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxMjE4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHLDpHR0YSBrb25mbGlrdGVyIG9jaCBrw7ZyIHNlZGFuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEyMjEKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoYWxsYSBrb25mbGlrdGVyIHLDpHR0YWRlOiBrw7ZyIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEyMjMKK21zZ2lkICIgICh1c2UgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgY2hlcnJ5LXBpY2sgb3BlcmF0aW9uKSIKK21zZ3N0ciAiIgorIiAgKGFudsOkbmQgXCJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydFwiIGbDtnIgYXR0IGF2YnJ5dGEgXCJjaGVycnktcGlja1wiLSIKKyJvcGVyYXRpb25lbikiCisKKyM6IHd0LXN0YXR1cy5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIkR1IGjDpWxsZXIgcMOlIG1lZCBhdHQgw6VuZ3JhIGluY2hlY2tuaW5nZW4gJXMuIgorCisjOiB3dC1zdGF0dXMuYzoxMjM3Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChyw6R0dGEga29uZmxpa3RlciBvY2gga8O2ciBzZWRhbiBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTI0MAorbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICAoYWxsYSBrb25mbGlrdGVyIHLDpHR0YWRlOiBrw7ZyIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMjQyCittc2dpZCAiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIKK21zZ3N0ciAiICAoYW52w6RuZCBcImdpdCByZXZlcnQgLS1hYm9ydFwiIGbDtnIgYXR0IGF2YnJ5dGEgw6VuZ3JhbmRldCkiCisKKyM6IHd0LXN0YXR1cy5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLCBzdGFydGVkIGZyb20gYnJhbmNoICclcycuIgorbXNnc3RyICJEdSBow6VsbGVyIHDDpSBtZWQgZW4gXCJiaXNlY3RcIiwgc3RhcnRhZCBmcsOlbiBncmVuZW4gXCIlc1wiLiIKKworIzogd3Qtc3RhdHVzLmM6MTI1NworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIkR1IGjDpWxsZXIgcMOlIG1lZCBlbiBcImJpc2VjdFwiLiIKKworIzogd3Qtc3RhdHVzLmM6MTI2MAorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiIgorIiAgKGFudsOkbmQgXCJnaXQgYmlzZWN0IHJlc2V0XCIgZsO2ciBhdHQga29tbWEgdGlsbGJha2EgdGlsbCB1cnNwcnVuZ3NncmVuZW4pIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiUMOlIGdyZW5lbiAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NDUKK21zZ2lkICJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIgorbXNnc3RyICJpbnRlcmFrdGl2IG9tYmFzZXJpbmcgcMOlZ8Olcjsgb3ZhbnDDpSIKKworIzogd3Qtc3RhdHVzLmM6MTQ0NworbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgIm9tYmFzZXJpbmcgcMOlZ8Olcjsgb3ZhbnDDpSIKKworIzogd3Qtc3RhdHVzLmM6MTQ1MgorbXNnaWQgIkhFQUQgZGV0YWNoZWQgYXQgIgorbXNnc3RyICJIRUFEIGZyw6Vua29wcGxhZCB2aWQgIgorCisjOiB3dC1zdGF0dXMuYzoxNDU0Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBmcm9tICIKK21zZ3N0ciAiSEVBRCBmcsOlbmtvcHBsYWQgZnLDpW4gIgorCisjOiB3dC1zdGF0dXMuYzoxNDU3Cittc2dpZCAiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIKK21zZ3N0ciAiSW50ZSBww6UgbsOlZ29uIGdyZW4gZsO2ciBuw6RydmFyYW5kZS4iCisKKyM6IHd0LXN0YXR1cy5jOjE0NzQKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAiRsO2cnN0YSBpbmNoZWNrbmluZyIKKworIzogd3Qtc3RhdHVzLmM6MTQ4OAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiT3Nww6VyYWRlIGZpbGVyIgorCisjOiB3dC1zdGF0dXMuYzoxNDkwCittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiSWdub3JlcmFkZSBmaWxlciIKKworIzogd3Qtc3RhdHVzLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisiRGV0IHRvZyAlLjJmIHNla3VuZGVyIGF0dCByw6RrbmEgdXBwIG9zcMOlcmFkZSBmaWxlci4gXCJzdGF0dXMgLXVub1wiXG4iCisia2FuIGfDpSBzbmFiYmFyZSwgbWVuIGR1IG3DpXN0ZSB2YXJhIGbDtnJzaWt0aWcgc8OlIGR1IGludGUgZ2zDtm1tZXJcbiIKKyJsw6RnZ2EgdGlsbCBueWEgZmlsZXIgc2rDpGx2IChzZSBcImdpdCBoZWxwIHN0YXR1c1wiKS4iCisKKyMgJXMgw6RyIG7DpHN0YSBzdHLDpG5nIGVsbGVyIHRvbS4KKyM6IHd0LXN0YXR1cy5jOjE1MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQlcyIKK21zZ3N0ciAiT3Nww6VyYWRlIGZpbGVyIHZpc2FzIGVqJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE1MDIKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKGFudsOkbmQgZmxhZ2dhbiAtdSBmw7ZyIGF0dCB2aXNhIG9zcMOlcmFkZSBmaWxlcikiCisKKyM6IHd0LXN0YXR1cy5jOjE1MDgKK21zZ2lkICJObyBjaGFuZ2VzIgorbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIiCisKKyM6IHd0LXN0YXR1cy5jOjE1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSBcImdpdCBhZGRcIiBhbmQvb3IgXCJnaXQgY29tbWl0IC1hXCIpXG4iCittc2dzdHIgIiIKKyJpbmdhIMOkbmRyaW5nYXIgYXR0IGNoZWNrYSBpbiAoYW52w6RuZCBcImdpdCBhZGRcIiBvY2gvZWxsZXIgXCJnaXQgY29tbWl0IC1hIgorIlwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgImluZ2Egw6RuZHJpbmdhciBhdHQgY2hlY2thIGluXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudCAodXNlIFwiZ2l0IGFkZFwiIHRvICIKKyJ0cmFjaylcbiIKK21zZ3N0ciAiIgorImluZ2V0IGvDtmF0IGbDtnIgaW5jaGVja25pbmcsIG1lbiBvc3DDpXJhZGUgZmlsZXIgZmlubnMgKHNww6VyYSBtZWQgXCJnaXQgYWRkIgorIlwiKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICJpbmdldCBrw7ZhdCBmw7ZyIGluY2hlY2tuaW5nLCBtZW4gb3Nww6VyYWRlIGZpbGVyIGZpbm5zXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgImluZ2V0IGF0dCBjaGVja2EgaW4gKHNrYXBhL2tvcGllcmEgZmlsZXIgb2NoIHNww6VyYSBtZWQgXCJnaXQgYWRkXCIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1Mjggd3Qtc3RhdHVzLmM6MTUzMworIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdFxuIgorbXNnc3RyICJpbmdldCBhdHQgY2hlY2thIGluXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAiaW5nZXQgYXR0IGNoZWNrYSBpbiAoYW52w6RuZCAtdSBmw7ZyIGF0dCB2aXNhIG9zcMOlcmFkZSBmaWxlcilcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyBkaXJlY3RvcnkgY2xlYW5cbiIKK21zZ3N0ciAiaW5nZXQgYXR0IGNoZWNrYSBpbiwgYXJiZXRza2F0YWxvZ2VuIHJlblxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjQ0Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAoaW5nZW4gZ3JlbikiCisKKyM6IHd0LXN0YXR1cy5jOjE2NTAKK21zZ2lkICJJbml0aWFsIGNvbW1pdCBvbiAiCittc2dzdHIgIkbDtnJzdGEgaW5jaGVja25pbmcgcMOlICIKKworIzogd3Qtc3RhdHVzLmM6MTY3NworbXNnaWQgImdvbmUiCittc2dzdHIgImbDtnJzdnVubmVuIgorCisjOiB3dC1zdGF0dXMuYzoxNjc5IHd0LXN0YXR1cy5jOjE2ODcKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICJlZnRlciAiCisKKyM6IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguYzo1NSBidWlsdGluL2Nsb25lLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIGJvcnQgbMOkbmtlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjIKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPGZsYWdnb3I+XSBbLS1dIDxzw7ZrdsOkZz4uLi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAiZGlmZi1zdGF0dXMgJWMgZsO2cnbDpG50YWRlcyBpbnRlIgorCisjOiBidWlsdGluL2FkZC5jOjcwIGJ1aWx0aW4vY29tbWl0LmM6Mjc3Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdXBwZGF0ZXJhIGZpbGVyIgorCisjOiBidWlsdGluL2FkZC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92ZSAnJXMnXG4iCittc2dzdHIgInRhIGJvcnQgXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTM0Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIk9zcMOlcmFkZSDDpG5kcmluZ2FyIGVmdGVyIGF0dCBoYSB1cHBkYXRlcmF0IGluZGV4ZXQ6IgorCisjOiBidWlsdGluL2FkZC5jOjE5NCBidWlsdGluL3Jldi1wYXJzZS5jOjc5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAiS3VuZGUgaW50ZSBsw6RzYSBpbmRleGV0IgorCisjOiBidWlsdGluL2FkZC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIGbDtnIgc2tyaXZuaW5nIgorCisjOiBidWlsdGluL2FkZC5jOjIwOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgcGF0Y2giCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjEyCittc2dpZCAiZWRpdGluZyBwYXRjaCBmYWlsZWQiCittc2dzdHIgInJlZGlnZXJpbmcgYXYgcGF0Y2ggbWlzc2x5Y2thZGVzIgorCisjOiBidWlsdGluL2FkZC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc3RhdCAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHRhIHN0YXR1cyBww6UgXCIlc1wiIgorCisjOiBidWlsdGluL2FkZC5jOjIxNworbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAiVG9tIHBhdGNoLiBBdmJyeXRlci4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHRpbGzDpG1wYSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjMyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICJGw7ZsamFuZGUgc8O2a3bDpGdhciBpZ25vcmVyYXMgYXYgZW4gYXYgZGluYSAuZ2l0aWdub3JlLWZpbGVyOlxuIgorCisjOiBidWlsdGluL2FkZC5jOjI0OSBidWlsdGluL2NsZWFuLmM6ODk2IGJ1aWx0aW4vZmV0Y2guYzoxMDggYnVpbHRpbi9tdi5jOjExMAorIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo1NSBidWlsdGluL3B1bGwuYzoxODIgYnVpbHRpbi9wdXNoLmM6NTQ1CisjOiBidWlsdGluL3JlbW90ZS5jOjEzMzkgYnVpbHRpbi9ybS5jOjI2OCBidWlsdGluL3NlbmQtcGFjay5jOjE2MgorbXNnaWQgImRyeSBydW4iCittc2dzdHIgInRlc3Rrw7ZybmluZyIKKworIzogYnVpbHRpbi9hZGQuYzoyNTAgYnVpbHRpbi9hcHBseS5jOjQ1ODAgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxOQorIzogYnVpbHRpbi9jb21taXQuYzoxMzIxIGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjYzIGJ1aWx0aW4vZnNjay5jOjYzNgorIzogYnVpbHRpbi9sb2cuYzoxNjQxIGJ1aWx0aW4vbXYuYzoxMDkgYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTQKK21zZ2lkICJiZSB2ZXJib3NlIgorbXNnc3RyICJ2YXIgcHJhdHNhbSIKKworIzogYnVpbHRpbi9hZGQuYzoyNTIKK21zZ2lkICJpbnRlcmFjdGl2ZSBwaWNraW5nIgorbXNnc3RyICJwbG9ja2EgaW50ZXJha3RpdnQiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTUyIGJ1aWx0aW4vcmVzZXQuYzoyODYKK21zZ2lkICJzZWxlY3QgaHVua3MgaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAidsOkbGogc3R5Y2tlbiBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9hZGQuYzoyNTQKK21zZ2lkICJlZGl0IGN1cnJlbnQgZGlmZiBhbmQgYXBwbHkiCittc2dzdHIgInJlZGlnZXJhIGFrdHVlbGwgZGlmZiBvY2ggYXBwbGljZXJhIgorCisjOiBidWlsdGluL2FkZC5jOjI1NQorbXNnaWQgImFsbG93IGFkZGluZyBvdGhlcndpc2UgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAidGlsbMOldCBsw6RnZ2EgdGlsbCBhbm5hcnMgaWdub3JlcmFkZSBmaWxlciIKKworIzogYnVpbHRpbi9hZGQuYzoyNTYKK21zZ2lkICJ1cGRhdGUgdHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAidXBwZGF0ZXJhIHNww6VyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2FkZC5jOjI1NworbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAicmVnaXN0cmVyYSBlbmRhc3QgYXR0IHPDtmt2w6RnZW4ga29tbWVyIGzDpGdnYXMgdGlsbCBzZW5hcmUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU4Cittc2dpZCAiYWRkIGNoYW5nZXMgZnJvbSBhbGwgdHJhY2tlZCBhbmQgdW50cmFja2VkIGZpbGVzIgorbXNnc3RyICJsw6RnZyB0aWxsIMOkbmRyaW5nYXIgZnLDpW4gYWxsYSBzcMOlcmFkZSBvY2ggb3Nww6VyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2FkZC5jOjI2MQorbXNnaWQgImlnbm9yZSBwYXRocyByZW1vdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgKHNhbWUgYXMgLS1uby1hbGwpIgorbXNnc3RyICJpZ25vcmVyYSBzw7ZrdsOkZ2FyIGJvcnR0YWduYSBpIGFyYmV0c2thdGFsb2dlbiAoc2FtbWEgc29tIC0tbm8tYWxsKSIKKworIzogYnVpbHRpbi9hZGQuYzoyNjMKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgImzDpGdnIGludGUgdGlsbCwgdXBwZGF0ZXJhIGVuZGFzdCBpbmRleGV0IgorCisjOiBidWlsdGluL2FkZC5jOjI2NAorbXNnaWQgImp1c3Qgc2tpcCBmaWxlcyB3aGljaCBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBvZiBlcnJvcnMiCittc2dzdHIgImhvcHBhIGJhcmEgw7Z2ZXIgZmlsZXIgc29tIGludGUga2FuIGzDpGdnYXMgdGlsbCBww6UgZ3J1bmQgYXYgZmVsIgorCisjOiBidWlsdGluL2FkZC5jOjI2NQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAic2Ugb20gLSDDpHZlbiBzYWtuYWRlIC0gZmlsZXIgaWdub3JlcmFzIGkgdGVzdGvDtnJuaW5nIgorCisjOiBidWlsdGluL2FkZC5jOjI4NworIywgYy1mb3JtYXQKK21zZ2lkICJVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLlxuIgorbXNnc3RyICJBbnbDpG5kIC1mIG9tIGR1IHZlcmtsaWdlbiB2aWxsIGzDpGdnYSB0aWxsIGRlbS5cbiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTQKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkZ2dhIHRpbGwgZmlsZXIiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMwCittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BIG9jaCAtdSDDpHIgw7Ztc2VzaWRpZ3QgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL2FkZC5jOjMzNworbXNnaWQgIk9wdGlvbiAtLWlnbm9yZS1taXNzaW5nIGNhbiBvbmx5IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCAtLWRyeS1ydW4iCittc2dzdHIgIkZsYWdnYW4gLS1pZ25vcmUtbWlzc2luZyBrYW4gZW5kYXN0IGFudsOkbmRhcyB0aWxsc2FtbWFucyBtZWQgLS1kcnktcnVuIgorCisjOiBidWlsdGluL2FkZC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiSW5nZXQgYW5naXZldCwgaW5nZXQgdGlsbGFndC5cbiIKKworIzogYnVpbHRpbi9hZGQuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIkthbnNrZSBtZW5hZGUgZHUgYXR0IHNrcml2YSBcImdpdCBhZGQgLlwiP1xuIgorCisjOiBidWlsdGluL2FkZC5jOjM2NCBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MiBidWlsdGluL2NsZWFuLmM6OTQwCisjOiBidWlsdGluL2NvbW1pdC5jOjMzNiBidWlsdGluL212LmM6MTMwIGJ1aWx0aW4vcmVzZXQuYzoyMzUgYnVpbHRpbi9ybS5jOjI5OAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAiaW5kZXhmaWxlbiB0cmFzaWciCisKKyM6IGJ1aWx0aW4vYWRkLmM6NDQ1IGJ1aWx0aW4vYXBwbHkuYzo0Njc4IGJ1aWx0aW4vbXYuYzoyNzkgYnVpbHRpbi9ybS5jOjQzMAorbXNnaWQgIlVuYWJsZSB0byB3cml0ZSBuZXcgaW5kZXggZmlsZSIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgbnkgaW5kZXhmaWwiCisKKyM6IGJ1aWx0aW4vYW0uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgc3RhdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0YSBzdGF0dXMgcMOlICVzIgorCisjOiBidWlsdGluL2FtLmM6MjcwIGJ1aWx0aW4vYW0uYzoxMzE4IGJ1aWx0aW4vY29tbWl0LmM6NzM3CisjOiBidWlsdGluL21lcmdlLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIFwiJXNcIiIKKworIzogYnVpbHRpbi9hbS5jOjQ0NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IgorbXNnc3RyICJrdW5kZSBpbnRlIHRvbGthIGbDtnJmYXR0YXJza3JpcHQiCisKKyM6IGJ1aWx0aW4vYW0uYzo1MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyB3YXMgZGVsZXRlZCBieSB0aGUgYXBwbHlwYXRjaC1tc2cgaG9vayIKK21zZ3N0ciAiXCIlc1wiIHRvZ3MgYm9ydCBhdiBrcm9rZW4gYXBwbHlwYXRjaC1tc2ciCisKKyM6IGJ1aWx0aW4vYW0uYzo1NjIgYnVpbHRpbi9ub3Rlcy5jOjMwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgaW5wdXQgbGluZTogJyVzJy4iCittc2dzdHIgIkZlbGFrdGlnIGluZGF0YXJhZDogXCIlc1wiLiIKKworIzogYnVpbHRpbi9hbS5jOjU5OSBidWlsdGluL25vdGVzLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBjb3B5IG5vdGVzIGZyb20gJyVzJyB0byAnJXMnIgorbXNnc3RyICJNaXNzbHlja2FkZXMga29waWVyYSBhbnRlY2tuaW5nYXIgZnLDpW4gXCIlc1wiIHRpbGwgXCIlc1wiIgorCisjOiBidWlsdGluL2FtLmM6NjI1Cittc2dpZCAiZnNlZWsgZmFpbGVkIgorbXNnc3RyICJcImZzZWVrXCIgbWlzc2x5Y2thZGVzIgorCisjOiBidWlsdGluL2FtLmM6Nzg2IGJ1aWx0aW4vYW0uYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hIFwiJXNcIiBmw7ZyIGzDpHNuaW5nOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjc5MworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nOiAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSDDtnBwbmEgXCIlc1wiIGbDtnIgc2tyaXZuaW5nOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBwYXRjaGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9hbS5jOjg2NworbXNnaWQgIk9ubHkgb25lIFN0R0lUIHBhdGNoIHNlcmllcyBjYW4gYmUgYXBwbGllZCBhdCBvbmNlIgorbXNnc3RyICJFbmRhc3QgZW4gU3RHSVQtcGF0Y2hzZXJpZSBrYW4gdGlsbMOkbXBhcyDDpXQgZ8OlbmdlbiIKKworIzogYnVpbHRpbi9hbS5jOjkxNQorbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICJvZ2lsdGlnIHRpZHNzdMOkbXBlbCIKKworIzogYnVpbHRpbi9hbS5jOjkxOCBidWlsdGluL2FtLmM6OTI2Cittc2dpZCAiaW52YWxpZCBEYXRlIGxpbmUiCittc2dzdHIgIm9naWx0aWcgXCJEYXRlXCItcmFkIgorCisjOiBidWlsdGluL2FtLmM6OTIzCittc2dpZCAiaW52YWxpZCB0aW1lem9uZSBvZmZzZXQiCittc2dzdHIgIm9naWx0aWcgdGlkc3pvbnMtb2Zmc2V0IgorCisjOiBidWlsdGluL2FtLmM6MTAxMAorbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGRldGVrdGVyYSBwYXRjaGZvcm1hdC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDE1IGJ1aWx0aW4vY2xvbmUuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrYXBhIGthdGFsb2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDE5Cittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgZGVsYSBwYXRjaGFyLiIKKworIzogYnVpbHRpbi9hbS5jOjExNTEgYnVpbHRpbi9jb21taXQuYzozNjIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAia2FuIGludGUgc2tyaXZhIGluZGV4ZmlsIgorCisjOiBidWlsdGluL2FtLmM6MTIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJXMgLS1jb250aW51ZVwiLiIKK21zZ3N0ciAiTsOkciBkdSBoYXIgbMO2c3QgcHJvYmxlbWV0LCBrw7ZyIFwiJXMgLS1jb250aW51ZVwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEyMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcIiVzIC0tc2tpcFwiIGluc3RlYWQuIgorbXNnc3RyICJPbSBkdSBoZWxscmUgdmlsbCBob3BwYSDDtnZlciBwYXRjaGVuLCBrw7ZyIFwiJXMgLS1za2lwXCIgaSBzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAiIgorIkbDtnIgYXR0IMOldGVyZ8OlIHRpbGwgdXJzcHJ1bmdsaWcgZ3JlbiBvY2ggc2x1dGEgcGF0Y2hhLCBrw7ZyIFwiJXMgLS1hYm9ydFwiLiIKKworIzogYnVpbHRpbi9hbS5jOjEzMTIKK21zZ2lkICJQYXRjaCBpcyBlbXB0eS4gV2FzIGl0IHNwbGl0IHdyb25nPyIKK21zZ3N0ciAiUGF0Y2hlbiDDpHIgdG9tLiBEZWxhZGVzIGRlbiB1cHAgZmVsYWt0aWd0PyIKKworIzogYnVpbHRpbi9hbS5jOjEzODYgYnVpbHRpbi9sb2cuYzoxMzQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgaWRlbnQgbGluZTogJXMiCittc2dzdHIgIm9naWx0aWcgaWRlbnQtcmFkOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjE0MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSB0b2xrYSBpbmNoZWNrbmluZ2VuICVzIgorCisjOiBidWlsdGluL2FtLmM6MTU4NworbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIiIKKyJBcmtpdmV0IHNha25hciBvYmpla3Qgc29tIGJlaMO2dnMgZsO2ciBhdHQgZmFsbGEgdGlsbGJha2EgcMOlIDMtIgorInbDpGdzc2FtbWFuc2xhZ25pbmcuIgorCisjOiBidWlsdGluL2FtLmM6MTU4OQorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgIkFudsOkbmRlciBpbmRleGluZm8gZsO2ciBhdHQgw6V0ZXJza2FwYSBldHQgYmFzdHLDpGQuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjA4Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIkhhciBkdSBoYW5kcmVkaWdlcmF0IGRpbiBwYXRjaD9cbiIKKyJEZW4ga2FuIGludGUgdGlsbMOkbXBhcyBww6UgYmxvYmJhciBzb20gYW50ZWNrbmF0cyBpIGRlc3MgaW5kZXguIgorCisjOiBidWlsdGluL2FtLmM6MTYxNAorbXNnaWQgIkZhbGxpbmcgYmFjayB0byBwYXRjaGluZyBiYXNlIGFuZCAzLXdheSBtZXJnZS4uLiIKK21zZ3N0ciAiIgorIkZhbGxlciB0aWxsYmFrYSBww6UgYXR0IHBhdGNoYSBncnVuZHZlcnNpb25lbiBvY2ggdHJldsOkZ3NzYW1tYW5zbGFnbmluZy4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE2MzkKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgc2zDpSBpaG9wIMOkbmRyaW5nYXJuYS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjY0IGJ1aWx0aW4vbWVyZ2UuYzo2MzIKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBtaXNzbHlja2FkZXMgc2tyaXZhIGV0dCB0csOkZCIKKworIzogYnVpbHRpbi9hbS5jOjE2NzEKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICJ0aWxsw6RtcGFyIHDDpSBlbiB0b20gaGlzdG9yaWsiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjg0IGJ1aWx0aW4vY29tbWl0LmM6MTc1MiBidWlsdGluL21lcmdlLmM6ODI5CisjOiBidWlsdGluL21lcmdlLmM6ODU0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIGluY2hlY2tuaW5nc29iamVrdCIKKworIzogYnVpbHRpbi9hbS5jOjE3MTYgYnVpbHRpbi9hbS5jOjE3MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlc3VtZTogJXMgZG9lcyBub3QgZXhpc3QuIgorbXNnc3RyICJrYW4gaW50ZSDDpXRlcnVwcHRhOiAlcyBmaW5ucyBpbnRlLiIKKworIzogYnVpbHRpbi9hbS5jOjE3MzYKK21zZ2lkICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iCittc2dzdHIgIiIKKyJrYW4gaW50ZSB2YXJhIGludGVyYWt0aXYgb20gc3RhbmRhcmQgaW4gaW50ZSDDpHIgYW5zbHV0ZW4gdGlsbCBlbiB0ZXJtaW5hbC4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQxCittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICJJbmNoZWNrbmluZ3Nrcm9wcGVuIMOkcjoiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNzUxCittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKK21zZ3N0ciAiVGlsbMOkbXBhPyBZPWphL049bmVqL0U9cmVkaWdlcmEvVj12aXNhIHBhdGNoL0E9Z29kdGEgYWxsYTogIgorCisjOiBidWlsdGluL2FtLmM6MTgwMQorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJ0eSBpbmRleDogY2Fubm90IGFwcGx5IHBhdGNoZXMgKGRpcnR5OiAlcykiCittc2dzdHIgIlNtdXRzaWd0IGluZGV4OiBrYW4gaW50ZSB0aWxsw6RtcGEgcGF0Y2hhciAoc211dHNpZ2E6ICVzKSIKKworIzogYnVpbHRpbi9hbS5jOjE4MzYgYnVpbHRpbi9hbS5jOjE5MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgIlRpbGzDpG1wYXI6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODUyCittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIgLS0gUGF0Y2hlbiBoYXIgcmVkYW4gdGlsbMOkbXBhdHMuIgorCisjOiBidWlsdGluL2FtLmM6MTg2MAorIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAiUGF0Y2ggbWlzc2x5Y2thZGVzIHDDpSAlcyAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTg2NgorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY29weSBvZiB0aGUgcGF0Y2ggdGhhdCBmYWlsZWQgaXMgZm91bmQgaW46ICVzIgorbXNnc3RyICJFbiBrb3BpYSBhdiBwYXRjaGVuIHNvbSBtaXNzbHlja2FkZXMgZmlubnMgaTogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTEwCittc2dpZCAiIgorIk5vIGNoYW5nZXMgLSBkaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnP1xuIgorIklmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byBzdGFnZSwgY2hhbmNlcyBhcmUgdGhhdCBzb21ldGhpbmcgZWxzZVxuIgorImFscmVhZHkgaW50cm9kdWNlZCB0aGUgc2FtZSBjaGFuZ2VzOyB5b3UgbWlnaHQgd2FudCB0byBza2lwIHRoaXMgcGF0Y2guIgorbXNnc3RyICIiCisiSW5nYSDDpG5kcmluZ2FyIC0gZ2zDtm1kZSBkdSBhbnbDpG5kYSBcImdpdCBhZGRcIj9cbiIKKyJPbSBkZXQgaW50ZSDDpHIgbsOlZ290IGt2YXIgYXR0IGvDtmEga2FuIGRldCBow6RuZGEgYXR0IG7DpWdvdCBhbm5hdCByZWRhblxuIgorImludHJvZHVjZXJhdCBzYW1tYSDDpG5kcmluZ2FyOyBrYW5za2UgZHUgYsO2ciBob3BwYSDDtnZlciBwYXRjaGVuLiIKKworIzogYnVpbHRpbi9hbS5jOjE5MTcKK21zZ2lkICIiCisiWW91IHN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMgaW4geW91ciBpbmRleC5cbiIKKyJEaWQgeW91IGZvcmdldCB0byB1c2UgJ2dpdCBhZGQnPyIKK21zZ3N0ciAiIgorIkR1IGhhciBmb3J0ZmFyYW5kZSBzw7ZrdsOkZ2FyIHNvbSBpbnRlIHNsYWdpdHMgc2FtbWFuIGkgZGl0dCBpbmRleC5cbiIKKyJHbMO2bWRlIGR1IGFudsOkbmRhIFwiZ2l0IGFkZFwiPyIKKworIzogYnVpbHRpbi9hbS5jOjIwMjUgYnVpbHRpbi9hbS5jOjIwMjkgYnVpbHRpbi9hbS5jOjIwNDEgYnVpbHRpbi9yZXNldC5jOjMwOAorIzogYnVpbHRpbi9yZXNldC5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICJLYW4gaW50ZSB0b2xrYSBvYmpla3RldCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMDc3Cittc2dpZCAiZmFpbGVkIHRvIGNsZWFuIGluZGV4IgorbXNnc3RyICJtaXNzbHlja2FkZXMgc3TDpGRhIHVwcCBpbmRleGV0IgorCisjOiBidWlsdGluL2FtLmM6MjExMQorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICIiCisiRHUgdmVya2FyIGhhIGZseXR0YXQgSEVBRCBzZWRhbiBcImFtXCIgc2lzdCBtaXNzbHlja2FkZXMuXG4iCisiw4V0ZXJzdMOkbGxlciBpbnRlIHRpbGwgT1JJR19IRUFEIgorCisjOiBidWlsdGluL2FtLmM6MjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciAtLXBhdGNoLWZvcm1hdDogJXMiCittc2dzdHIgIkZlbGFrdGlndCB2w6RyZGUgZsO2ciAtLXBhdGNoLWZvcm1hdDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTk0Cittc2dpZCAiZ2l0IGFtIFtvcHRpb25zXSBbKDxtYm94Pnw8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFtmbGFnZ29yXSBbKDxtYm94Pnw8TWFpbGRpcj4pLi4uXSIKKworIzogYnVpbHRpbi9hbS5jOjIxOTUKK21zZ2lkICJnaXQgYW0gW29wdGlvbnNdICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbZmxhZ2dvcl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKKworIzogYnVpbHRpbi9hbS5jOjIyMDEKK21zZ2lkICJydW4gaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAia8O2ciBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9hbS5jOjIyMDMKK21zZ2lkICJoaXN0b3JpY2FsIG9wdGlvbiAtLSBuby1vcCIKK21zZ3N0ciAiaGlzdG9yaXNrIGZsYWdnYSAtLSBuby1vcCIKKworIzogYnVpbHRpbi9hbS5jOjIyMDUKK21zZ2lkICJhbGxvdyBmYWxsIGJhY2sgb24gM3dheSBtZXJnaW5nIGlmIG5lZWRlZCIKK21zZ3N0ciAidGlsbMOldCBmYWxsYSB0aWxsYmFrYSBww6UgdHJldsOkZ3NzYW1tYW5zbGFnbmluZyBvbSBuw7ZkdsOkbmRpZ3QiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjA2IGJ1aWx0aW4vaW5pdC1kYi5jOjUwOSBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU3CisjOiBidWlsdGluL3JlcGFjay5jOjE3MQorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICJ2YXIgdHlzdCIKKworIzogYnVpbHRpbi9hbS5jOjIyMDgKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJsw6RnZyB0aWxsIFwiU2lnbmVkLW9mZi1ieVwiLXJhZCBpIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IgorCisjOiBidWlsdGluL2FtLmM6MjIxMQorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICJrb2RhIG9tIHRpbGwgdXRmOCAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL2FtLmM6MjIxMworbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgInPDpG5kIGZsYWdnYW4gLWsgdGlsbCBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjE1Cittc2dpZCAicGFzcyAtYiBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAic8OkbmQgZmxhZ2dhbiAtYiB0aWxsIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyMTcKK21zZ2lkICJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJzw6RuZCBmbGFnZ2FuIC1tIHRpbGwgZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjIxOQorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgInPDpG5kIGZsYWdnYW4gLS1rZWVwLWNyIHRpbGwgZ2l0LW1haWxzcGxpdCBmw7ZyIG1ib3gtZm9ybWF0ZXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIyCittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgInPDpG5kIGludGUgZmxhZ2dhbiAtLWtlZXAtY3IgdGlsbCBnaXQtbWFpbHNwbGl0IG9iZXJvZW5kZSBhdiBhbS5rZWVwY3IiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI1Cittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICJ0YSBib3J0IGFsbHRpbmcgZsO2cmUgZW4gc2F4bGluamUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjI2IGJ1aWx0aW4vYXBwbHkuYzo0NTYzCittc2dpZCAiYWN0aW9uIgorbXNnc3RyICLDpXRnw6RyZCIKKworIzogYnVpbHRpbi9hbS5jOjIyMjcgYnVpbHRpbi9hbS5jOjIyMzAgYnVpbHRpbi9hbS5jOjIyMzMgYnVpbHRpbi9hbS5jOjIyMzYKKyM6IGJ1aWx0aW4vYW0uYzoyMjM5IGJ1aWx0aW4vYW0uYzoyMjQyIGJ1aWx0aW4vYW0uYzoyMjQ1IGJ1aWx0aW4vYW0uYzoyMjQ4CisjOiBidWlsdGluL2FtLmM6MjI1NAorbXNnaWQgInBhc3MgaXQgdGhyb3VnaCBnaXQtYXBwbHkiCittc2dzdHIgInPDpG5kIGRldCBnZW5vbSBnaXQtYXBwbHkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM1IGJ1aWx0aW4vYXBwbHkuYzo0NTg3Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicm90IgorCisjOiBidWlsdGluL2FtLmM6MjIzOCBidWlsdGluL2FtLmM6MjI0MSBidWlsdGluL2FwcGx5LmM6NDUyNQorIzogYnVpbHRpbi9hcHBseS5jOjQ1MjggYnVpbHRpbi9jbG9uZS5jOjg1IGJ1aWx0aW4vZmV0Y2guYzo5MworIzogYnVpbHRpbi9wdWxsLmM6MTY3Cittc2dpZCAicGF0aCIKK21zZ3N0ciAic8O2a3bDpGciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ0IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY2OSBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzIKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5OCBidWlsdGluL21lcmdlLmM6MTk4IGJ1aWx0aW4vcHVsbC5jOjEyNworIzogYnVpbHRpbi9yZXBhY2suYzoxNzggYnVpbHRpbi9yZXBhY2suYzoxODIgYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2NAorIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4MCBidWlsdGluL3RhZy5jOjU5MSBwYXJzZS1vcHRpb25zLmg6MTMyCisjOiBwYXJzZS1vcHRpb25zLmg6MTM0IHBhcnNlLW9wdGlvbnMuaDoyNDMKK21zZ2lkICJuIgorbXNnc3RyICJuIgorCisjOiBidWlsdGluL2FtLmM6MjI0NyBidWlsdGluL2FwcGx5LmM6NDUzMQorbXNnaWQgIm51bSIKK21zZ3N0ciAiYW50YWwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUwIGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQgYnVpbHRpbi9yZXBsYWNlLmM6NDM4Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICJmb3JtYXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUxCittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICJmb3JtYXQgZsO2ciBwYXRjaChhcikiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjU3Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICLDtnZlcnN0eXIgZmVsbWVkZGVsYW5kZW4gbsOkciBwYXRjaGZlbCB1cHBzdMOlciIKKworIzogYnVpbHRpbi9hbS5jOjIyNTkKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICJmb3J0c8OkdHQgYXBwbGljZXJhIHBhdGNoYXIgZWZ0ZXIgYXR0IGhhIGzDtnN0IGVuIGtvbmZsaWt0IgorCisjOiBidWlsdGluL2FtLmM6MjI2MgorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICJzeW5vbnltZXIgdGlsbCAtLWNvbnRpbnVlIgorCisjOiBidWlsdGluL2FtLmM6MjI2NQorbXNnaWQgInNraXAgdGhlIGN1cnJlbnQgcGF0Y2giCittc2dzdHIgImhvcHBhIMO2dmVyIGRlbiBha3R1ZWxsYSBncmVuZW4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjY4Cittc2dpZCAicmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBhYm9ydCB0aGUgcGF0Y2hpbmcgb3BlcmF0aW9uLiIKK21zZ3N0ciAiw6V0ZXJzdMOkbGwgb3JpZ2luYWxncmVuZW4gb2NoIGF2YnJ5dCBwYXRjaG5pbmdlbi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjcyCittc2dpZCAibGllIGFib3V0IGNvbW1pdHRlciBkYXRlIgorbXNnc3RyICJsanVnIG9tIGluY2hlY2tuaW5nc2RhdHVtIgorCisjOiBidWlsdGluL2FtLmM6MjI3NAorbXNnaWQgInVzZSBjdXJyZW50IHRpbWVzdGFtcCBmb3IgYXV0aG9yIGRhdGUiCittc2dzdHIgImFudsOkbmQgbnV2YXJhbmRlIHRpZHNzdMOkbXBlbCBmw7ZyIGbDtnJmYXR0YXJkYXR1bSIKKworIzogYnVpbHRpbi9hbS5jOjIyNzYgYnVpbHRpbi9jb21taXQuYzoxNTkwIGJ1aWx0aW4vbWVyZ2UuYzoyMjUKKyM6IGJ1aWx0aW4vcHVsbC5jOjE1NSBidWlsdGluL3JldmVydC5jOjkyIGJ1aWx0aW4vdGFnLmM6NjA2Cittc2dpZCAia2V5LWlkIgorbXNnc3RyICJueWNrZWwtaWQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc3Cittc2dpZCAiR1BHLXNpZ24gY29tbWl0cyIKK21zZ3N0ciAiR1BHLXNpZ25lcmEgaW5jaGVja25pbmdhciIKKworIzogYnVpbHRpbi9hbS5jOjIyODAKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKGFudsOkbmRzIGludGVybnQgYXYgZ2l0LXJlYmFzZSkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjk1Cittc2dpZCAiIgorIlRoZSAtYi8tLWJpbmFyeSBvcHRpb24gaGFzIGJlZW4gYSBuby1vcCBmb3IgbG9uZyB0aW1lLCBhbmRcbiIKKyJpdCB3aWxsIGJlIHJlbW92ZWQuIFBsZWFzZSBkbyBub3QgdXNlIGl0IGFueW1vcmUuIgorbXNnc3RyICIiCisiRmxhZ2dhbiAtYi8tLWJpbmFyeSBoYXIgdmFyaXQgdXRhbiBmdW5rdGlvbiBsw6RuZ2UsIG9jaFxuIgorImtvbW1lciB0YXMgYm9ydC4gVmkgYmVyIGRpZyBhdHQgaW50ZSBhbnbDpG5kYSBkZW4gbMOkbmdyZS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzAyCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkc2EgaW5kZXhldCIKKworIzogYnVpbHRpbi9hbS5jOjIzMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJldmlvdXMgcmViYXNlIGRpcmVjdG9yeSAlcyBzdGlsbCBleGlzdHMgYnV0IG1ib3ggZ2l2ZW4uIgorbXNnc3RyICJ0aWRpZ2FyZSByZWJhc2Uta2F0YWxvZyAlcyBmaW5ucyBmb3J0ZmFyYW5kZSwgbWVuIG1ib3ggYW5nYXZzLiIKKworIzogYnVpbHRpbi9hbS5jOjIzNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN0cmF5ICVzIGRpcmVjdG9yeSBmb3VuZC5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iCittc2dzdHIgIiIKKyJLdmFyYmxpdmVuIGthdGFsb2cgJXMgaGl0dGFkZXMuXG4iCisiQW52w6RuZCBcImdpdCBhbSAtLWFib3J0XCIgZsO2ciBhdHQgdGEgYm9ydCBkZW4uIgorCisjOiBidWlsdGluL2FtLmM6MjM0NworbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIkzDtnNuaW5nc29wZXJhdGlvbiBww6Vnw6VyIGludGUsIHZpIMOldGVydXBwdGFyIGludGUuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NTkKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzxmbGFnZ29yPl0gWzxwYXRjaD4uLi5dIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJva8OkbnQgYWx0ZXJuYXRpdiBmw7ZyIHdoaXRlc3BhY2U6IFwiJXNcIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIm9rw6RudCBhbHRlcm5hdGl2IGbDtnIgaWdub3JlLXdoaXRlc3BhY2U6IFwiJXNcIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICJLYW4gaW50ZSBmw7ZyYmVyZWRhIHJlZ3VsasOkcnQgdXR0cnljayBmw7ZyIHRpZHNzdMOkbXBlbG4gJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo4MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVnZXhlYyByZXR1cm5lZCAlZCBmb3IgaW5wdXQ6ICVzIgorbXNnc3RyICJyZWdleGVjIHJldHVybmVyYWRlICVkIGbDtnIgaW5kYXRhOiAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gZmluZCBmaWxlbmFtZSBpbiBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJrYW4gaW50ZSBoaXR0YSBmaWxuYW1uIGkgcGF0Y2hlbiBww6UgcmFkICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsLCBnb3QgJXMgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBkw6VsaWcgZ2l0LWRpZmYgLSBmw7ZydsOkbnRhZGUgL2Rldi9udWxsLCBmaWNrICVzIHDDpSByYWQgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZMOlbGlnIGdpdC1kaWZmIC0gbW90c8OkZ2FuZGUgbnl0dCBmaWxuYW1uIHDDpSByYWQgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBpbmNvbnNpc3RlbnQgb2xkIGZpbGVuYW1lIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZMOlbGlnIGdpdC1kaWZmIC0gbW90c8OkZ2FuZGUgZ2FtbWFsdCBmaWxuYW1uIHDDpSByYWQgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFwcGx5OiBiYWQgZ2l0LWRpZmYgLSBleHBlY3RlZCAvZGV2L251bGwgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBkw6VsaWcgZ2l0LWRpZmYgLSBmw7ZydsOkbnRhZGUgL2Rldi9udWxsIHDDpSByYWQgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDE5CisjLCBjLWZvcm1hdAorbXNnaWQgInJlY291bnQ6IHVuZXhwZWN0ZWQgbGluZTogJS4qcyIKK21zZ3N0ciAicmVjb3VudDogZsO2cnbDpG50YWRlIHJhZDogJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAicGF0Y2gtZnJhZ21lbnQgdXRhbiBodXZ1ZCBww6UgcmFkICVkOiAlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQ5MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50IChsaW5lICVkKSIKK21zZ2lkX3BsdXJhbCAiIgorImdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiB3aGVuIHJlbW92aW5nICVkIGxlYWRpbmcgcGF0aG5hbWUgIgorImNvbXBvbmVudHMgKGxpbmUgJWQpIgorbXNnc3RyWzBdICIiCisiZ2l0LWRpZmYtaHV2dWRldCBzYWtuYXIgZmlsbmFtbnNpbmZvcm1hdGlvbiBuw6RyICVkIGxlZGFuZGUgc8O2a3bDpGdza29tcG9uZW50XG4iCisidGFzIGJvcnQgKHJhZCAlZCkiCittc2dzdHJbMV0gIiIKKyJnaXQtZGlmZi1odXZ1ZGV0IHNha25hciBmaWxuYW1uc2luZm9ybWF0aW9uIG7DpHIgJWQgbGVkYW5kZSAiCisic8O2a3bDpGdza29tcG9uZW50ZXJcbiIKKyJ0YXMgYm9ydCAocmFkICVkKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2NTkKK21zZ2lkICJuZXcgZmlsZSBkZXBlbmRzIG9uIG9sZCBjb250ZW50cyIKK21zZ3N0ciAibnkgZmlsIGJlcm9yIHDDpSBnYW1tYWx0IGlubmVow6VsbCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE2NjEKK21zZ2lkICJkZWxldGVkIGZpbGUgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJib3J0dGFnZW4gZmlsIGhhciBmb3J0ZmFyYW5kZSBpbm5laMOlbGwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjg3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAidHJhc2lnIHBhdGNoIHDDpSByYWQgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJueWEgZmlsZW4gJXMgYmVyb3IgcMOlIGdhbW1hbHQgaW5uZWjDpWxsIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICJib3J0dGFnbmEgZmlsZW4gJXMgaGFyIGZvcnRmYXJhbmRlIGlubmVow6VsbCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiogd2FybmluZzogZmlsZSAlcyBiZWNvbWVzIGVtcHR5IGJ1dCBpcyBub3QgZGVsZXRlZCIKK21zZ3N0ciAiKiogdmFybmluZzogZmlsZW4gJXMgYmxpciB0b20gbWVuIGhhciBpbnRlIHRhZ2l0cyBib3J0IgorCisjOiBidWlsdGluL2FwcGx5LmM6MTg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICJ0cmFzaWcgYmluw6RycGF0Y2ggcMOlIHJhZCAlZDogJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICJiaW7DpHJwYXRjaGVuIHDDpSByYWQgJWQga8Okbm5zIGludGUgaWdlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjIwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAicGF0Y2ggbWVkIGJhcmEgc2tyw6RwIHDDpSByYWQgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2Egc3ltYm9saXNrYSBsw6Rua2VuICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gb3BlbiBvciByZWFkICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIMO2cHBuYSBlbGxlciBsw6RzYSAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICJmZWxha3RpZyBpbmxlZG5pbmcgcMOlIHJhZDogXCIlY1wiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIlN0eWNrZSAlZCBseWNrYWRlcyBww6UgJWQgKG9mZnNldCAlZCByYWQpLiIKK21zZ3N0clsxXSAiU3R5Y2tlICVkIGx5Y2thZGVzIHDDpSAlZCAob2Zmc2V0ICVkIHJhZGVyKS4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTEyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbnRleHQgcmVkdWNlZCB0byAoJWxkLyVsZCkgdG8gYXBwbHkgZnJhZ21lbnQgYXQgJWQiCittc2dzdHIgIlNhbW1hbmhhbmcgcmVkdWNlcmF0IHRpbGwgKCVsZC8lbGQpIGbDtnIgYXR0IHRpbGzDpG1wYSBmcmFnbWVudCB2aWQgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ3aGlsZSBzZWFyY2hpbmcgZm9yOlxuIgorIiUuKnMiCittc2dzdHIgIiIKKyJ2aWQgc8O2a25pbmcgZWZ0ZXI6XG4iCisiJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibWlzc2luZyBiaW5hcnkgcGF0Y2ggZGF0YSBmb3IgJyVzJyIKK21zZ3N0ciAic2FrbmFyIGJpbsOkcmEgcGF0Y2hkYXRhIGbDtnIgXCIlc1wiIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzAzOQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggZG9lcyBub3QgYXBwbHkgdG8gJyVzJyIKK21zZ3N0ciAiYmluw6RycGF0Y2hlbiBrYW4gaW50ZSB0aWxsw6RtcGFzIHDDpSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImJpbmFyeSBwYXRjaCB0byAnJXMnIGNyZWF0ZXMgaW5jb3JyZWN0IHJlc3VsdCAoZXhwZWN0aW5nICVzLCBnb3QgJXMpIgorbXNnc3RyICJiaW7DpHJwYXRjaGVuIHDDpSBcIiVzXCIgZ2VyIGZlbGFrdGlndCByZXN1bHRhdCAoZsO2cnbDpG50YWRlICVzLCBmaWNrICVzKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZmFpbGVkOiAlczolbGQiCittc2dzdHIgInBhdGNoIG1pc3NseWNrYWRlczogJXM6JWxkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgImthbiBpbnRlIGNoZWNrYSB1dCAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyMzUgYnVpbHRpbi9hcHBseS5jOjMyNDYgYnVpbHRpbi9hcHBseS5jOjMyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBvZiAlcyBmYWlsZWQiCittc2dzdHIgIm1pc3NseWNrYWRlcyBsw6RzYSAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZGluZyBmcm9tICclcycgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAibMOkc2VyIGZyw6VuIFwiJXNcIiBzb20gw6RyIHDDpSBhbmRyYSBzaWRhbiBhdiBlbiBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjcxIGJ1aWx0aW4vYXBwbHkuYzozNDkzCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJXMgaGFzIGJlZW4gcmVuYW1lZC9kZWxldGVkIgorbXNnc3RyICJzw7ZrdsOkZ2VuICVzIGhhciDDpG5kcmF0IG5hbW4vdGFnaXRzIGJvcnQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzUyIGJ1aWx0aW4vYXBwbHkuYzozNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IGZpbm5zIGludGUgaSBpbmRleGV0IgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM1NiBidWlsdGluL2FwcGx5LmM6MzQ5OSBidWlsdGluL2FwcGx5LmM6MzUyMQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMiCittc2dzdHIgIiVzOiAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMzNjEgYnVpbHRpbi9hcHBseS5jOjM1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICIlczogbW90c3ZhcmFyIGludGUgaW5kZXhldCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM0NjMKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICJwYXRjaCBmw7ZyIGJvcnR0YWduaW5nIGzDpG1uYXIga3ZhciBmaWxpbm5laMOlbGwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlczogZmVsIHR5cCIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIlcyBoYXIgdHlwZW4gJW8sIGbDtnJ2w6RudGFkZSAlbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM2OTMgYnVpbHRpbi9hcHBseS5jOjM2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBwYXRoICclcyciCittc2dzdHIgIm9naWx0aWcgc8O2a3bDpGc6ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc1MAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gaW5kZXgiCittc2dzdHIgIiVzOiBmaW5ucyByZWRhbiBpIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiJXM6IGZpbm5zIHJlZGFuIGkgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc3MworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgIm55dHQgbMOkZ2UgKCVvKSBmw7ZyICVzIG1vdHN2YXJhciBpbnRlIGdhbW1hbHQgbMOkZ2UgKCVvKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICJueXR0IGzDpGdlICglbykgZsO2ciAlcyBtb3RzdmFyYXIgaW50ZSBnYW1tYWx0IGzDpGdlICglbykgZsO2ciAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWZmZWN0ZWQgZmlsZSAnJXMnIGlzIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgImRlbiBiZXLDtnJkYSBmaWxlbiBcIiVzXCIgw6RyIHDDpSBhbmRyYSBzaWRhbiBhdiBlbiBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXM6IHBhdGNoZW4ga2FuIGludGUgdGlsbMOkbXBhcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcGF0Y2ggJXMuLi4iCittc2dzdHIgIktvbnRyb2xsZXJhciBwYXRjaGVuICVzLi4uIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzkwOSBidWlsdGluL2NoZWNrb3V0LmM6MjMyIGJ1aWx0aW4vcmVzZXQuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAibWFrZV9jYWNoZV9lbnRyeSBtaXNzbHlja2FkZXMgZsO2ciBzw7ZrdsOkZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlbW92ZSAlcyBmcm9tIGluZGV4IgorbXNnc3RyICJrYW4gaW50ZSB0YSBib3J0ICVzIGZyw6VuIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgcGF0Y2ggZm9yIHN1Ym1vZHVsZSAlcyIKK21zZ3N0ciAidHJhc2lnIHBhdGNoIGbDtnIgdW5kZXJtb2R1bGVuICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA4NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gc3RhdCBuZXdseSBjcmVhdGVkIGZpbGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdGEgc3RhdHVzIHDDpSBueWxpZ2VuIHNrYXBhZGUgZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA5MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlIGJhY2tpbmcgc3RvcmUgZm9yIG5ld2x5IGNyZWF0ZWQgZmlsZSAlcyIKK21zZ3N0ciAia2FuIGludGUgc2thcGEgc8Oka2VyaGV0c21pbm5lIGbDtnIgbnlsaWdlbiBza2FwYWRlIGZpbGVuICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA5MyBidWlsdGluL2FwcGx5LmM6NDIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAia2FuIGludGUgbMOkZ2dhIHRpbGwgY2FjaGVwb3N0IGbDtnIgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgImNsb3NpbmcgZmlsZSAnJXMnIgorbXNnc3RyICJzdMOkbmdlciBmaWxlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAia2FuIGludGUgc2tyaXZhIGZpbGVuIFwiJXNcIiBsw6RnZSAlbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAiVGlsbMOkbXBhZGUgcGF0Y2hlbiAlcyByZW50LiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyNzAKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiaW50ZXJudCBmZWwiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAiVGlsbMOkbXBhZGUgcGF0Y2hlbiAlJXMgbWVkICVkIHJlZnVzZXJhZC4uLiIKK21zZ3N0clsxXSAiVGlsbMOkbXBhZGUgcGF0Y2hlbiAlJXMgbWVkICVkIHJlZnVzZXJhZGUuLi4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAidHJ1bmtlcmFyIC5yZWotZmlsbmFtbmV0IHRpbGwgJS4qcy5yZWoiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIlN0eWNrZSAlZCB0aWxsw6RtcGFkZXMgcmVudC4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAiUmVmdXNlcmFyIHN0eWNrZSAlZC4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0Mzk3Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICJpbmRhdGEga8Okbm5zIGludGUgaWdlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ0MDgKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBpbmRleGZpbGVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUyNgorbXNnaWQgImRvbid0IGFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgInRpbGzDpG1wYSBpbnRlIMOkbmRyaW5nYXIgc29tIG1vdHN2YXJhciBnaXZlbiBzw7ZrdsOkZyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MjkKK21zZ2lkICJhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJ0aWxsw6RtcGEgw6RuZHJpbmdhciBzb20gbW90c3ZhcmFyIGdpdmVuIHPDtmt2w6RnIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUzMgorbXNnaWQgInJlbW92ZSA8bnVtPiBsZWFkaW5nIHNsYXNoZXMgZnJvbSB0cmFkaXRpb25hbCBkaWZmIHBhdGhzIgorbXNnc3RyICJ0YSBib3J0IDxhbnRhbD4gaW5sZWRhbmRlIHNuZWRzdHJlY2sgZnLDpW4gdHJhZGl0aW9uZWxsYSBkaWZmLXPDtmt2w6RnYXIiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTM1Cittc2dpZCAiaWdub3JlIGFkZGl0aW9ucyBtYWRlIGJ5IHRoZSBwYXRjaCIKK21zZ3N0ciAiaWdub3JlcmEgdGlsbMOkZ2cgZ2pvcmRhIGF2IHBhdGNoZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTM3Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBkaWZmc3RhdCBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJpc3TDpGxsZXQgZsO2ciBhdHQgdGlsbMOkbXBhIHBhdGNoZW4sIHNrcml2IHV0IGRpZmZzdGF0IGbDtnIgaW5kYXRhIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0MQorbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgInZpc2EgYW50YWwgdGlsbGFnZGEgb2NoIGJvcnR0YWduYSByYWRlciBkZWNpbWFsdCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDMKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICJpc3TDpGxsZXQgZsO2ciBhdHQgdGlsbMOkbXBhIHBhdGNoZW4sIHNrcml2IHV0IGVuIHN1bW1lcmluZyBhdiBpbmRhdGEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQ1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAiaXN0w6RsbGV0IGbDtnIgYXR0IHRpbGzDpG1wYSBwYXRjaGVuLCBzZSBvbSBwYXRjaGVuIGthbiB0aWxsw6RtcGFzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0NworbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAic2UgdGlsbCBhdHQgcGF0Y2hlbiBrYW4gdGlsbMOkbXBhcyBww6UgYWt0dWVsbHQgaW5kZXgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQ5Cittc2dpZCAiYXBwbHkgYSBwYXRjaCB3aXRob3V0IHRvdWNoaW5nIHRoZSB3b3JraW5nIHRyZWUiCittc2dzdHIgInRpbGzDpG1wYSBlbiBwYXRjaCB1dGFuIGF0dCByw7ZyYSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTUxCittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAiZ29kdGEgZW4gcGF0Y2ggc29tIHLDtnIgZmlsZXIgdXRhbmbDtnIgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1MworbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICJ0aWxsw6RtcGEgb2Nrc8OlIHBhdGNoZW4gKGFudsOkbmQgbWVkIC0tc3RhdC8tLXN1bW1hcnkvLS1jaGVjaykiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTU1Cittc2dpZCAiYXR0ZW1wdCB0aHJlZS13YXkgbWVyZ2UgaWYgYSBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiZsO2cnPDtmsgZW4gdHJldsOkZ3NzYW1tYW5zbGFnbmluZyBvbSBwYXRjaGVuIGludGUga2FuIHRpbGzDpG1wYXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTU3Cittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgImJ5Z2cgZXR0IHRlbXBvcsOkcnQgaW5kZXggYmFzZXJhdCBww6UgaW5ieWdnZCBpbmRleGluZm9ybWF0aW9uIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1OSBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTk4IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MTIKK21zZ2lkICJwYXRocyBhcmUgc2VwYXJhdGVkIHdpdGggTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAic8O2a3bDpGdhciBhdmRlbGFzIG1lZCBOVUwtdGVja2VuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU2MgorbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAic2UgdGlsbCBhdHQgw6V0bWluc3RvbmUgPG4+IHJhZGVyIHNhbW1hbmhhbmcgw6RyIGxpa2EiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTY0Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgImRldGVrdGVyYSBueWEgZWxsZXIgw6RuZHJhZGUgcmFkZXIgc29tIGhhciBmZWwgaSBibGFua3RlY2tlbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NjcgYnVpbHRpbi9hcHBseS5jOjQ1NzAKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICJpZ25vcmVyYSDDpG5kcmluZ2FyIGkgYmxhbmt0ZWNrZW4gZsO2ciBzYW1tYW5oYW5nIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3MworbXNnaWQgImFwcGx5IHRoZSBwYXRjaCBpbiByZXZlcnNlIgorbXNnc3RyICJ0aWxsw6RtcGEgcGF0Y2hlbiBiYWtsw6RuZ2VzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3NQorbXNnaWQgImRvbid0IGV4cGVjdCBhdCBsZWFzdCBvbmUgbGluZSBvZiBjb250ZXh0IgorbXNnc3RyICJmw7ZydsOkbnRhIGludGUgbWluc3QgZW4gcmFkIHNhbW1hbmhhbmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTc3Cittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgImzDpG1uYSByZWZ1c2VyYWRlIHN0eWNrZW4gaSBtb3RzdmFyYW5kZSAqLnJlai1maWxlciIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzkKK21zZ2lkICJhbGxvdyBvdmVybGFwcGluZyBodW5rcyIKK21zZ3N0ciAidGlsbMOldCDDtnZlcmxhcHBhbmRlIHN0eWNrZW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTgyCittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgInRvbGVyZXJhIGZlbGFrdGlndCBkZXRla3RlcmFkZSBzYWtuYWRlIG55cmFkc3RlY2tlbiB2aWQgZmlsc2x1dCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODUKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgImxpdGUgaW50ZSBww6UgYW50YWxldCBsaW5qZXIgaSBzdHlja2VodXZ1ZGVuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU4OAorbXNnaWQgInByZXBlbmQgPHJvb3Q+IHRvIGFsbCBmaWxlbmFtZXMiCittc2dzdHIgImzDpGdnIHRpbGwgPHJvdD4gaSBhbGxhIGZpbG5hbW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjEwCittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLTN3YXkgdXRhbmbDtnIgYXJraXYiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjE4Cittc2dpZCAiLS1pbmRleCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1pbmRleCB1dGFuZsO2ciBhcmtpdiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ2MjEKK21zZ2lkICItLWNhY2hlZCBvdXRzaWRlIGEgcmVwb3NpdG9yeSIKK21zZ3N0ciAiLS1jYWNoZWQgdXRhbmbDtnIgYXJraXYiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hIHBhdGNoZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDY1NAorIywgYy1mb3JtYXQKK21zZ2lkICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvciIKK21zZ2lkX3BsdXJhbCAic3F1ZWxjaGVkICVkIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyWzBdICJ1bmRlcnRyeWNrdGUgJWQgZmVsIGkgYmxhbmtzdGVnIgorbXNnc3RyWzFdICJ1bmRlcnRyeWNrdGUgJWQgZmVsIGkgYmxhbmtzdGVnIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDY2MCBidWlsdGluL2FwcGx5LmM6NDY3MAorIywgYy1mb3JtYXQKK21zZ2lkICIlZCBsaW5lIGFkZHMgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnaWRfcGx1cmFsICIlZCBsaW5lcyBhZGQgd2hpdGVzcGFjZSBlcnJvcnMuIgorbXNnc3RyWzBdICIlZCByYWQgbMOkZ2dlciB0aWxsIGZlbCBpIGJsYW5rc3RlZy4iCittc2dzdHJbMV0gIiVkIHJhZGVyIGzDpGdnZXIgdGlsbCBmZWwgaSBibGFua3N0ZWcuIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIGFya2l2ZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoyMAorbXNnaWQgImNvdWxkIG5vdCByZWRpcmVjdCBvdXRwdXQiCittc2dzdHIgImt1bmRlIGludGUgb21kaXJpZ2VyYSB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IEZqw6RyciB1dGFuIFVSTCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NTgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgQUNLL05BSywgZ290IEVPRiIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGbDtnJ2w6RudGFkZSBBQ0svTkFLLCBmaWNrIEVPRiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICJmasOkcnJmZWw6ICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IHByb3Rva29sbGZlbCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGbDtnJ2w6RudGFkZSBlbiB0w7ZtbmluZyAoZmx1c2gpIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICJ1dGbDtnIgJ2dpdCBiaXNlY3QgbmV4dCciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxOQorbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgInVwcGRhdGVyYSBCSVNFQ1RfSEVBRCBpc3TDpGxsZXQgZsO2ciBhdHQgY2hlY2thIHV0IGFrdHVlbGwgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMgorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs8ZmxhZ2dvcj5dIFs8cmV2LWZsYWdnb3I+XSBbPHJldj5dIFstLV0gPGZpbD4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNworbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICI8cmV2LWZsYWdnb3I+IGRva3VtZW50ZXJhcyBpIGdpdC1yZXYtbGlzdCgxKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDAKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICJWaXNhIGtsYW5kcmluZ3Nwb3N0ZXIgbsOkciB2aSBoaXR0YXIgZGVtLCBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDEKK21zZ2lkICJTaG93IGJsYW5rIFNIQS0xIGZvciBib3VuZGFyeSBjb21taXRzIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJWaXNhIGJsYW5rIFNIQS0xIGbDtnIgZ3LDpG5zaW5jaGVja25pbmdhciAoU3RhbmRhcmQ6IGF2KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDIKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkJlaGFuZGxhIGludGUgcm90aW5jaGVja25pbmdhciBzb20gZ3LDpG5zZXIgKFN0YW5kYXJkOiBhdikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTAzCittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAiVmlzYSBzdGF0aXN0aWsgw7Z2ZXIgYXJiZXRza29zdG5hZCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDQKK21zZ2lkICJTaG93IG91dHB1dCBzY29yZSBmb3IgYmxhbWUgZW50cmllcyIKK21zZ3N0ciAiVmlzYSB1dGRhdGFwb8OkbmcgZsO2ciBrbGFuZHJpbmdzcG9zdGVyIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwNQorbXNnaWQgIlNob3cgb3JpZ2luYWwgZmlsZW5hbWUgKERlZmF1bHQ6IGF1dG8pIgorbXNnc3RyICJWaXNhIG9yaWdpbmFsZmlsbmFtbiAoU3RhbmRhcmQ6IGF1dG8pIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwNgorbXNnaWQgIlNob3cgb3JpZ2luYWwgbGluZW51bWJlciAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVmlzYSB1cnNwcnVuZ2xpZ3QgcmFkbnVtbWVyIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwNworbXNnaWQgIlNob3cgaW4gYSBmb3JtYXQgZGVzaWduZWQgZm9yIG1hY2hpbmUgY29uc3VtcHRpb24iCittc2dzdHIgIlZpc2EgaSBldHQgZm9ybWF0IGF2c2V0dCBmw7ZyIG1hc2tpbmtvbnN1bXRpb24iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA4Cittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICJWaXNhIHBvcnNsaW5zZm9ybWF0IG1lZCBwZXItcmFkLWluY2hlY2tuaW5nc2luZm9ybWF0aW9uIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwOQorbXNnaWQgIlVzZSB0aGUgc2FtZSBvdXRwdXQgbW9kZSBhcyBnaXQtYW5ub3RhdGUgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkFudsOkbmQgc2FtbWEgdXRkYXRhbMOkZ2Ugc29tIGdpdC1hbm5vdGF0ZSAoU3RhbmRhcmQ6IGF2KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTAKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIlZpc2EgcsOlIHRpZHNzdMOkbXBlbCAoU3RhbmRhcmQ6IGF2KSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTEKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIlZpc2EgbMOlbmcgaW5jaGVja25pbmdzLVNIQTEgKFN0YW5kYXJkOiBhdikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTEyCittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVW5kZXJ0cnljayBmw7ZyZmF0dGFybmFtbiBvY2ggdGlkc3N0w6RtcGVsIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMworbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiVmlzYSBmw7ZyZmF0dGFyZW5zIGUtcG9zdCBpc3TDpGxsZXQgZsO2ciBuYW1uIChTdGFuZGFyZDogYXYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNAorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICJJZ25vcmVyYSDDpG5kcmluZ2FyIGkgYmxhbmtzdGVnIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNQorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiU2zDtnNhIGV4dHJhIGN5a2xlciBtZWQgYXR0IGhpdHRhIGLDpHR0cmUgdHLDpGZmIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNgorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAiQW52w6RuZCByZXZpc2lvbmVyIGZyw6VuIDxmaWw+IGlzdMOkbGxldCBmw7ZyIGF0dCBhbnJvcGEgZ2l0LXJldi1saXN0IgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNworbXNnaWQgIlVzZSA8ZmlsZT4ncyBjb250ZW50cyBhcyB0aGUgZmluYWwgaW1hZ2UiCittc2dzdHIgIkFudsOkbmQgPGZpbD5zIGlubmVow6VsbCBzb20gc2x1dGdpbHRpZyBiaWxkIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxOCBidWlsdGluL2JsYW1lLmM6MjUxOQorbXNnaWQgInNjb3JlIgorbXNnc3RyICJwb8OkbmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE4Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiSGl0dGEga29waWVyYWRlIHJhZGVyIGludXRpIG9jaCBtZWxsYW4gZmlsZXIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE5Cittc2dpZCAiRmluZCBsaW5lIG1vdmVtZW50cyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAiSGl0dGEgZmx5dHRhZGUgcmFkZXIgaW51dGkgb2NoIG1lbGxhbiBmaWxlciIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MjAKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MjAKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiQmVoYW5kbGEgZW5kYXN0IHJhZGludGVydmFsbGV0IG4sbSwgbWVkIGLDtnJqYW4gcMOlIDEiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlIG1heGltdW0KKyMuIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluICJnaXQgYmxhbWUiCisjLiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMSBtb250aHMgYWdvIiwgd2hpY2gKKyMuIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QgYW1vbmcgdmFyaW91cyBmb3JtcyBvZgorIy4gcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0IHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvcgorIy4gZmV3ZXIgZGlzcGxheSBjb2x1bW5zLgorIzogYnVpbHRpbi9ibGFtZS5jOjI2MDEKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICI0IMOlciwgMTEgbcOlbmFkZXIgc2VkYW4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstciB8IC1hXSBbLS1tZXJnZWQgfCAtLW5vLW1lcmdlZF0iCittc2dzdHIgImdpdCBicmFuY2ggWzxmbGFnZ29yPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8ZmxhZ2dvcj5dIFstbF0gWy1mXSA8Z3Jlbm5hbW4+IFs8c3RhcnRwdW5rdD5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8ZmxhZ2dvcj5dIFstcl0gKC1kIHwgLUQpIDxncmVubmFtbj4uLi4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjcKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dICgtbSB8IC1NKSBbPG9sZC1icmFuY2g+XSA8bmV3LWJyYW5jaD4iCittc2dzdHIgImdpdCBicmFuY2ggWzxmbGFnZ29yPl0gKC1tIHwgLU0pIFs8Z2FtbWFsX2dyZW4+XSA8bnlfZ3Jlbj4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJkZWxldGluZyBicmFuY2ggJyVzJyB0aGF0IGhhcyBiZWVuIG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGJ1dCBub3QgeWV0IG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorInRhciBib3J0IGdyZW5lbiBcIiVzXCIgc29tIGhhciBzbGFnaXRzIGlob3AgbWVkXG4iCisiICAgICAgICAgXCIlc1wiLCBtZW4gw6RubnUgaW50ZSBzbGFnaXRzIGlob3AgbWVkIEhFQUQuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE1NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibm90IGRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaXMgbm90IHlldCBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBldmVuIHRob3VnaCBpdCBpcyBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyJ0YXIgaW50ZSBib3J0IGdyZW5lbiBcIiVzXCIgc29tIGludGUgaGFyIHNsYWdpdHMgaWhvcCBtZWRcbiIKKyIgICAgICAgICBcIiVzXCIsIHRyb3RzIGF0dCBkZW4gaGFyIHNsYWdpdHMgaWhvcCBtZWQgSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzbMOlIHVwcCBpbmNoZWNrbmluZ3NvYmpla3QgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYnJhbmNoICclcycgaXMgbm90IGZ1bGx5IG1lcmdlZC5cbiIKKyJJZiB5b3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGl0LCBydW4gJ2dpdCBicmFuY2ggLUQgJXMnLiIKK21zZ3N0ciAiIgorIkdyZW5lbiBcIiVzXCIgaGFyIGludGUgc2xhZ2l0cyBzYW1tYW4gaSBzaW4gaGVsaGV0LlxuIgorIk9tIGR1IMOkciBzw6RrZXIgcMOlIGF0dCBkdSB2aWxsIHRhIGJvcnQgZGVuLCBrw7ZyIFwiZ2l0IGJyYW5jaCAtRCAlc1wiLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODUKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJNaXNzbHlja2FkZXMgdXBwZGF0ZXJhIGtvbmZpZ3VyYXRpb25zZmlsIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxMworbXNnaWQgImNhbm5vdCB1c2UgLWEgd2l0aCAtZCIKK21zZ3N0ciAia2FuIGludGUgYW5nZSAtYSBtZWQgLWQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE5Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICJLdW5kZSBpbnRlIHNsw6UgdXBwIGluY2hlY2tuaW5nc29iamVrdCBmw7ZyIEhFQUQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGJyYW5jaCAnJXMnIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG9uLiIKK21zZ3N0ciAiS2FuIGludGUgdGEgYm9ydCBncmVuZW4gXCIlc1wiIHNvbSBkdSBiZWZpbm5lciBkaWcgcMOlIGbDtnIgbsOkcnZhcmFuZGUuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAiZmrDpHJyc3DDpXJhbmRlIGdyZW5lbiBcIiVzXCIgaGl0dGFkZXMgaW50ZS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImdyZW5lbiBcIiVzXCIgaGl0dGFkZXMgaW50ZS4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIHJlbW90ZS10cmFja2luZyBicmFuY2ggJyVzJyIKK21zZ3N0ciAiRmVsIHZpZCBib3J0dGFnbmluZyBhdiBmasOkcnJzcMOlcmFuZGUgZ3JlbmVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgIkZlbCB2aWQgYm9ydHRhZ25pbmcgYXYgZ3JlbmVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJUb2cgYm9ydCBmasOkcnJzcMOlcmFuZGUgZ3JlbmVuICVzICh2YXIgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAiVG9nIGJvcnQgZ3JlbmVuICVzICh2YXIgJXMpLlxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjM2OQorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBwb2ludCBhdCBhIGNvbW1pdCIKK21zZ3N0ciAiZ3JlbmVuIFwiJXNcIiBwZWthciBpbnRlIHDDpSBlbiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBnb25lXSIKK21zZ3N0ciAiWyVzOiBmw7Zyc3Z1bm5lbl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlslc10iCittc2dzdHIgIlslc10iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYmVoaW5kICVkXSIKK21zZ3N0ciAiWyVzOiBiYWtvbSAlZF0gIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJbYmVoaW5kICVkXSIKK21zZ3N0ciAiW2Jha29tICVkXSAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYWhlYWQgJWRdIgorbXNnc3RyICJbJXM6IGbDtnJlICVkXSAiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlthaGVhZCAlZF0iCittc2dzdHIgIltmw7ZyZSAlZF0gIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGFoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICJbJXM6IGbDtnJlICVkLCBiYWtvbSAlZF0gIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJbYWhlYWQgJWQsIGJlaGluZCAlZF0iCittc2dzdHIgIltmw7ZyZSAlZCwgYmFrb20gJWRdICIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODkKK21zZ2lkICIgKioqKiBpbnZhbGlkIHJlZiAqKioqIgorbXNnc3RyICIgKioqKiBvZ2lsdGlnIHJlZiAqKioqIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCByZWJhc2luZyAlcykiCittc2dzdHIgIihpbmdlbiBncmVuLCBvbWJhc2VyYXIgJXMpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCBiaXNlY3Qgc3RhcnRlZCBvbiAlcykiCittc2dzdHIgIihpbmdlbiBncmVuLCBcImJpc2VjdFwiIHN0YXJ0YWQgcMOlICVzKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKEhFQUQgZGV0YWNoZWQgYXQgJXMpIgorbXNnc3RyICIoSEVBRCBmcsOlbmtvcHBsYXQgdmlkICVzKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiKEhFQUQgZGV0YWNoZWQgZnJvbSAlcykiCittc2dzdHIgIihIRUFEIGZyw6Vua29wcGxhdCBmcsOlbiAlcykiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTk2Cittc2dpZCAiKG5vIGJyYW5jaCkiCittc2dzdHIgIihpbmdlbiBncmVuKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo2NDMKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICclcycgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21taXQiCittc2dzdHIgIm9iamVrdGV0IFwiJXNcIiBwZWthciBww6UgZW4gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjkxCittc2dpZCAic29tZSByZWZzIGNvdWxkIG5vdCBiZSByZWFkIgorbXNnc3RyICJ2aXNzYSByZWZlcmVuc2VyIGt1bmRlIGludGUgbMOkc2FzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwNAorbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICIiCisia3VuZGUgaW50ZSBieXRhIG5hbW4gcMOlIGFrdHVlbGwgZ3JlbiBuw6RyIGR1IGludGUgYmVmaW5uZXIgZGlnIHDDpSBuw6Vnb24uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGJyYW5jaCBuYW1lOiAnJXMnIgorbXNnc3RyICJGZWxha3RpZ3QgbmFtbiBww6UgZ3JlbjogXCIlc1wiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyOQorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICJNaXNzbHlja2FkZXMgYnl0YSBuYW1uIHDDpSBncmVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAiQnl0dGUgYm9ydCBuYW1uIHDDpSBlbiBmZWxha3RpZ3QgbmFtbmdpdmVuIGdyZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICJHcmVuZW4gbmFtbmJ5dHQgdGlsbCAlcywgbWVuIEhFQUQgaGFyIGludGUgdXBwZGF0ZXJhdHMhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc0NAorbXNnaWQgIkJyYW5jaCBpcyByZW5hbWVkLCBidXQgdXBkYXRlIG9mIGNvbmZpZy1maWxlIGZhaWxlZCIKK21zZ3N0ciAiR3JlbmVuIG5hbW5ieXR0LCBtZW4gbWlzc2x5Y2thZGVzIHVwcGRhdGVyYSBrb25maWd1cmF0aW9uc2ZpbGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc1OQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgImZlbGZvcm1hdCBvYmpla3RuYW1uICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgYnJhbmNoIGRlc2NyaXB0aW9uIHRlbXBsYXRlOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZ3JlbmJlc2tyaXZuaW5nc21hbGw6ICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxMQorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiQWxsbcOkbm5hIGZsYWdnb3IiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODEzCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgInZpc2EgaGFzaCBvY2ggw6RyZW5kZXJhZCwgYW5nZSB0dsOlIGfDpW5nZXIgZsO2ciB1cHBzdHLDtm1zZ3JlbiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTQKK21zZ2lkICJzdXBwcmVzcyBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzIgorbXNnc3RyICJ1bmRlcnRyeWNrIGluZm9ybWF0aW9uc21lZGRlbGFuZGVuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNQorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJzdMOkbGwgaW4gc3DDpXJuaW5nc2zDpGdlIChzZSBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODE3Cittc2dpZCAiY2hhbmdlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgIsOkbmRyYSB1cHBzdHLDtm1zaW5mb3JtYXRpb24iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJhbnbDpG5kIGbDpHJnYWQgdXRkYXRhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyMgorbXNnaWQgImFjdCBvbiByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgImFyYmV0YSBww6UgZmrDpHJyc3DDpXJhbmRlIGdyZW5hciIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjUgYnVpbHRpbi9icmFuY2guYzo4MzEgYnVpbHRpbi9icmFuY2guYzo4NTIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODU4IGJ1aWx0aW4vY29tbWl0LmM6MTU4MCBidWlsdGluL2NvbW1pdC5jOjE1ODEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MiBidWlsdGluL2NvbW1pdC5jOjE1ODMgYnVpbHRpbi90YWcuYzo2MTgKKyM6IGJ1aWx0aW4vdGFnLmM6NjI0CiBtc2dpZCAiY29tbWl0IgogbXNnc3RyICJpbmNoZWNrbmluZyIKIAotIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3Ci0jOiBnaXRrOjY5MTIKLW1zZ2lkICJjb250YWluaW5nOiIKLW1zZ3N0ciAic29tIGlubmVow6VsbGVyOiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODI2IGJ1aWx0aW4vYnJhbmNoLmM6ODMyCittc2dpZCAicHJpbnQgb25seSBicmFuY2hlcyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgZ3JlbmFyIHNvbSBpbm5laMOlbGxlciBpbmNoZWNrbmluZ2VuIgogCi0jOiBnaXRrOjIzMDIgZ2l0azozNTI2IGdpdGs6MzUzMSBnaXRrOjQ3NjMKLW1zZ2lkICJ0b3VjaGluZyBwYXRoczoiCi1tc2dzdHIgInNvbSByw7ZyIHPDtmt2w6RnOiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODM4Cittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAiU3BlY2lmaWthIGdpdC1icmFuY2gtw6V0Z8OkcmRlcjoiCiAKLSM6IGdpdGs6MjMwMyBnaXRrOjQ3NzcKLW1zZ2lkICJhZGRpbmcvcmVtb3Zpbmcgc3RyaW5nOiIKLW1zZ3N0ciAic29tIGzDpGdnZXIvdGlsbCB0YXIgYm9ydCBzdHLDpG5nOiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODM5Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgInZpc2EgYsOlZGUgZmrDpHJyc3DDpXJhbmRlIG9jaCBsb2thbGEgZ3JlbmFyIgogCi0jOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Ci1tc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgotbXNnc3RyICLDpG5kcmFyIHJhZGVyIHNvbSBtYXRjaGFyOiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQxCittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgInRhIGJvcnQgaGVsdCBzYW1tYW5zbGFnZW4gZ3JlbiIKIAotIzogZ2l0azoyMzEzIGdpdGs6MjMxNSBnaXRrOjQ3NjYKLW1zZ2lkICJFeGFjdCIKLW1zZ3N0ciAiRXhha3QiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MgorbXNnaWQgImRlbGV0ZSBicmFuY2ggKGV2ZW4gaWYgbm90IG1lcmdlZCkiCittc2dzdHIgInRhIGJvcnQgZ3JlbiAow6R2ZW4gb20gaW50ZSBoZWx0IHNhbW1hbnNsYWdlbikiCiAKLSM6IGdpdGs6MjMxNSBnaXRrOjQ4NTQgZ2l0azo2NzIzCi1tc2dpZCAiSWduQ2FzZSIKLW1zZ3N0ciAiSWduVmVyc2FsZXIiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MworbXNnaWQgIm1vdmUvcmVuYW1lIGEgYnJhbmNoIGFuZCBpdHMgcmVmbG9nIgorbXNnc3RyICJmbHl0dGEvdGEgYm9ydCBlbiBncmVuIG9jaCBkZXNzIHJlZmxvZ2ciCiAKLSM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQotbXNnaWQgIlJlZ2V4cCIKLW1zZ3N0ciAiUmVnLnV0dHIuIgorIzogYnVpbHRpbi9icmFuY2guYzo4NDQKK21zZ2lkICJtb3ZlL3JlbmFtZSBhIGJyYW5jaCwgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJmbHl0dGEvdGEgYm9ydCBlbiBncmVuLCDDpHZlbiBvbSBtw6VsZXQgZmlubnMiCiAKLSM6IGdpdGs6MjMxNyBnaXRrOjIzMTggZ2l0azo0ODc0IGdpdGs6NDkwNCBnaXRrOjQ5MTEgZ2l0azo2ODQ4IGdpdGs6NjkxNgotbXNnaWQgIkFsbCBmaWVsZHMiCi1tc2dzdHIgIkFsbGEgZsOkbHQiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NQorbXNnaWQgImxpc3QgYnJhbmNoIG5hbWVzIgorbXNnc3RyICJsaXN0YSBuYW1uIHDDpSBncmVuYXIiCiAKLSM6IGdpdGs6MjMxOCBnaXRrOjQ4NzEgZ2l0azo0OTA0IGdpdGs6Njc4NgotbXNnaWQgIkhlYWRsaW5lIgotbXNnc3RyICJSdWJyaWsiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NgorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJza2FwYSBncmVuZW5zIHJlZmxvZ2ciCiAKLSM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NjkxNiBnaXRrOjczODkKLW1zZ2lkICJDb21tZW50cyIKLW1zZ3N0ciAiS29tbWVudGFyZXIiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0OAorbXNnaWQgImVkaXQgdGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgYnJhbmNoIgorbXNnc3RyICJyZWRpZ2VyYSBiZXNrcml2bmluZyBmw7ZyIGdyZW5lbiIKIAotIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjQ4NzYgZ2l0azo0OTExIGdpdGs6Njc4NiBnaXRrOjczMjQgZ2l0azo4ODMwCi0jOiBnaXRrOjg4NDUKLW1zZ2lkICJBdXRob3IiCi1tc2dzdHIgIkbDtnJmYXR0YXJlIgorIzogYnVpbHRpbi9icmFuY2guYzo4NDkKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICJ0dmluZ2Egc2thcGFuZGUsIGZseXR0L25hbW7DpG5kcmluZywgYm9ydHRhZ2FuZGUiCiAKLSM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NzMyNgotbXNnaWQgIkNvbW1pdHRlciIKLW1zZ3N0ciAiSW5jaGVja2FyZSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODUyCittc2dpZCAicHJpbnQgb25seSBub3QgbWVyZ2VkIGJyYW5jaGVzIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBlaiBzYW1tYW5zbGFnbmEgZ3JlbmFyIgogCi0jOiBnaXRrOjIzNTAKLW1zZ2lkICJTZWFyY2giCi1tc2dzdHIgIlPDtmsiCisjOiBidWlsdGluL2JyYW5jaC5jOjg1OAorbXNnaWQgInByaW50IG9ubHkgbWVyZ2VkIGJyYW5jaGVzIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBzYW1tYW5zbGFnbmEgZ3JlbmFyIgogCi0jOiBnaXRrOjIzNTgKLW1zZ2lkICJEaWZmIgotbXNnc3RyICJEaWZmIgorIzogYnVpbHRpbi9icmFuY2guYzo4NjIKK21zZ2lkICJsaXN0IGJyYW5jaGVzIGluIGNvbHVtbnMiCittc2dzdHIgInZpc2EgZ3JlbmFyIGkgc3BhbHRlciIKIAotIzogZ2l0azoyMzYwCi1tc2dpZCAiT2xkIHZlcnNpb24iCi1tc2dzdHIgIkdhbW1hbCB2ZXJzaW9uIgorIzogYnVpbHRpbi9icmFuY2guYzo4NzUKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSBIRUFEIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHNsw6UgdXBwIEhFQUQgc29tIGdpbHRpZyByZWZlcmVucyIKIAotIzogZ2l0azoyMzYyCi1tc2dpZCAiTmV3IHZlcnNpb24iCi1tc2dzdHIgIk55IHZlcnNpb24iCisjOiBidWlsdGluL2JyYW5jaC5jOjg3OSBidWlsdGluL2Nsb25lLmM6NjkwCittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgIkhFQUQgaGl0dGFkZXMgaW50ZSB1bmRlciByZWZzL2hlYWRzISIKIAotIzogZ2l0azoyMzY0Ci1tc2dpZCAiTGluZXMgb2YgY29udGV4dCIKLW1zZ3N0ciAiUmFkZXIgc2FtbWFuaGFuZyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTAxCittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiBvY2ggLS12ZXJib3NlIMOkciBpbmtvbXBhdGlibGEiCiAKLSM6IGdpdGs6MjM3NAotbXNnaWQgIklnbm9yZSBzcGFjZSBjaGFuZ2UiCi1tc2dzdHIgIklnbm9yZXJhIMOkbmRyaW5nYXIgaSBibGFua3N0ZWciCisjOiBidWlsdGluL2JyYW5jaC5jOjkxMiBidWlsdGluL2JyYW5jaC5jOjk1MQorbXNnaWQgImJyYW5jaCBuYW1lIHJlcXVpcmVkIgorbXNnc3RyICJncmVubmFtbiBrcsOkdnMiCiAKLSM6IGdpdGs6MjM3OCBnaXRrOjIzODAgZ2l0azo3OTU5IGdpdGs6ODIwNgotbXNnaWQgIkxpbmUgZGlmZiIKLW1zZ3N0ciAiUmFkLWRpZmYiCisjOiBidWlsdGluL2JyYW5jaC5jOjkyNworbXNnaWQgIkNhbm5vdCBnaXZlIGRlc2NyaXB0aW9uIHRvIGRldGFjaGVkIEhFQUQiCittc2dzdHIgIkthbiBpbnRlIGJlc2tyaXZhIGZyw6Vua29wcGxhZCBIRUFEIgogCi0jOiBnaXRrOjI0NDUKLW1zZ2lkICJQYXRjaCIKLW1zZ3N0ciAiUGF0Y2giCisjOiBidWlsdGluL2JyYW5jaC5jOjkzMgorbXNnaWQgImNhbm5vdCBlZGl0IGRlc2NyaXB0aW9uIG9mIG1vcmUgdGhhbiBvbmUgYnJhbmNoIgorbXNnc3RyICJrYW4gaW50ZSByZWRpZ2VyYSBiZXNrcml2bmluZyBmw7ZyIG1lciDDpG4gZW4gZ3JlbiIKIAotIzogZ2l0azoyNDQ3Ci1tc2dpZCAiVHJlZSIKLW1zZ3N0ciAiVHLDpGQiCisjOiBidWlsdGluL2JyYW5jaC5jOjkzOQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAiSW5nYSBpbmNoZWNrbmluZ2FyIHDDpSBncmVuZW4gXCIlc1wiIMOkbm51IgogCi0jOiBnaXRrOjI2MTcgZ2l0azoyNjM3Ci1tc2dpZCAiRGlmZiB0aGlzIC0+IHNlbGVjdGVkIgotbXNnc3RyICJEaWZmIGRlbm5hIC0+IG1hcmtlcmFkIgorIzogYnVpbHRpbi9icmFuY2guYzo5NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gYnJhbmNoIG5hbWVkICclcycuIgorbXNnc3RyICJJbmdlbiBncmVuIHZpZCBuYW1uZXQgXCIlc1wiLiIKIAotIzogZ2l0azoyNjE4IGdpdGs6MjYzOAotbXNnaWQgIkRpZmYgc2VsZWN0ZWQgLT4gdGhpcyIKLW1zZ3N0ciAiRGlmZiBtYXJrZXJhZCAtPiBkZW5uYSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTU3Cittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgZ3JlbmFyIGbDtnIgbmFtbmJ5dGUiCiAKLSM6IGdpdGs6MjYxOSBnaXRrOjI2MzkKLW1zZ2lkICJNYWtlIHBhdGNoIgotbXNnc3RyICJTa2FwYSBwYXRjaCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTYyCittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgdG8gc2V0IG5ldyB1cHN0cmVhbSIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgZ3JlbmFyIGbDtnIgYXR0IGJ5dGEgdXBwc3Ryw7ZtIgogCi0jOiBnaXRrOjI2MjAgZ2l0azo5MjU0Ci1tc2dpZCAiQ3JlYXRlIHRhZyIKLW1zZ3N0ciAiU2thcGEgdGFnZyIKLQotIzogZ2l0azoyNjIxIGdpdGs6OTM3MQotbXNnaWQgIldyaXRlIGNvbW1pdCB0byBmaWxlIgotbXNnc3RyICJTa3JpdiBpbmNoZWNrbmluZyB0aWxsIGZpbCIKLQotIzogZ2l0azoyNjIyIGdpdGs6OTQyOAotbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgotbXNnc3RyICJTa2FwYSBueSBncmVuIgotCi0jOiBnaXRrOjI2MjMKLW1zZ2lkICJDaGVycnktcGljayB0aGlzIGNvbW1pdCIKLW1zZ3N0ciAiUGxvY2thIGRlbm5hIGluY2hlY2tuaW5nIgotCi0jOiBnaXRrOjI2MjQKLW1zZ2lkICJSZXNldCBIRUFEIGJyYW5jaCB0byBoZXJlIgotbXNnc3RyICLDhXRlcnN0w6RsbCBIRUFELWdyZW5lbiBoaXQiCi0KLSM6IGdpdGs6MjYyNQotbXNnaWQgIk1hcmsgdGhpcyBjb21taXQiCi1tc2dzdHIgIk1hcmtlcmEgZGVubmEgaW5jaGVja25pbmciCi0KLSM6IGdpdGs6MjYyNgotbXNnaWQgIlJldHVybiB0byBtYXJrIgotbXNnc3RyICLDhXRlcmfDpSB0aWxsIG1hcmtlcmluZyIKLQotIzogZ2l0azoyNjI3Ci1tc2dpZCAiRmluZCBkZXNjZW5kYW50IG9mIHRoaXMgYW5kIG1hcmsiCi1tc2dzdHIgIkhpdHRhIGVmdGVyZsO2bGphcmUgdGlsbCBkZW5uYSBvY2ggbWFya2VyYSIKLQotIzogZ2l0azoyNjI4Ci1tc2dpZCAiQ29tcGFyZSB3aXRoIG1hcmtlZCBjb21taXQiCi1tc2dzdHIgIkrDpG1mw7ZyIG1lZCBtYXJrZXJhZCBpbmNoZWNrbmluZyIKLQotIzogZ2l0azoyNjI5IGdpdGs6MjY0MAotbXNnaWQgIkRpZmYgdGhpcyAtPiBtYXJrZWQgY29tbWl0IgotbXNnc3RyICJEaWZmIGRlbm5hIC0+IG1hcmtlcmFkIGluY2hlY2tuaW5nIgotCi0jOiBnaXRrOjI2MzAgZ2l0azoyNjQxCi1tc2dpZCAiRGlmZiBtYXJrZWQgY29tbWl0IC0+IHRoaXMiCi1tc2dzdHIgIkRpZmYgbWFya2VyYWQgaW5jaGVja25pbmcgLT4gZGVubmEiCi0KLSM6IGdpdGs6MjYzMQotbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKLW1zZ3N0ciAiw4VuZ3JhIGRlbm5hIGluY2hlY2tuaW5nIgotCi0jOiBnaXRrOjI2NDcKLW1zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCi1tc2dzdHIgIkNoZWNrYSB1dCBkZW5uYSBncmVuIgotCi0jOiBnaXRrOjI2NDgKLW1zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCi1tc2dzdHIgIlRhIGJvcnQgZGVubmEgZ3JlbiIKLQotIzogZ2l0azoyNjQ5Ci1tc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3Qgc2V0IHVwc3RyZWFtIG9mIEhFQUQgdG8gJXMgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKIG1zZ3N0ciAiIgorImt1bmRlIGludGUgc8OkdHRhIHVwcHN0csO2bSBmw7ZyIEhFQUQgdGlsbCAlcyBuw6RyIGRldCBpbnRlIHBla2FyIG1vdCBuw6Vnb24gZ3Jlbi4iCiAKLSM6IGdpdGs6MjY1NgotbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKLW1zZ3N0ciAiTWFya2VyYSDDpHZlbiBkZXR0YSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTY5IGJ1aWx0aW4vYnJhbmNoLmM6OTkxIGJ1aWx0aW4vYnJhbmNoLmM6MTAxMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaCAnJXMnIgorbXNnc3RyICJva8OkbmQgZ3JlbiBcIiVzXCIiCiAKLSM6IGdpdGs6MjY1NwotbXNnaWQgIkhpZ2hsaWdodCB0aGlzIG9ubHkiCi1tc2dzdHIgIk1hcmtlcmEgYmFyYSBkZXR0YSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJncmVuZW4gXCIlc1wiIGZpbm5zIGludGUiCiAKLSM6IGdpdGs6MjY1OAotbXNnaWQgIkV4dGVybmFsIGRpZmYiCi1tc2dzdHIgIkV4dGVybiBkaWZmIgorIzogYnVpbHRpbi9icmFuY2guYzo5ODUKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyB0byB1bnNldCB1cHN0cmVhbSIKK21zZ3N0ciAiZsO2ciBtw6VuZ2EgZ3JlbmFyIGbDtnIgYXR0IHRhIGJvcnQgdXBwc3Ryw7ZtIgogCi0jOiBnaXRrOjI2NTkKLW1zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgotbXNnc3RyICJLbGFuZHJhIGbDtnLDpGxkcmFpbmNoZWNrbmluZyIKLQotIzogZ2l0azoyNjYwCi1tc2dpZCAiQ29weSBwYXRoIgorIzogYnVpbHRpbi9icmFuY2guYzo5ODkKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgogbXNnc3RyICIiCisia3VuZGUgaW50ZSB0YSBib3J0IHVwcHN0csO2bSBmw7ZyIEhFQUQgbsOkciBkZXQgaW50ZSBwZWthciBtb3QgbsOlZ29uIGdyZW4uIgogCi0jOiBnaXRrOjI2NjcKLW1zZ2lkICJTaG93IG9yaWdpbiBvZiB0aGlzIGxpbmUiCi1tc2dzdHIgIlZpc2EgdXJzcHJ1bmdldCBmw7ZyIGRlbiBow6RyIHJhZGVuIgorIzogYnVpbHRpbi9icmFuY2guYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICJHcmVuZW4gXCIlc1wiIGhhciBpbmdlbiB1cHBzdHLDtm1zaW5mb3JtYXRpb24iCiAKLSM6IGdpdGs6MjY2OAotbXNnaWQgIlJ1biBnaXQgZ3VpIGJsYW1lIG9uIHRoaXMgbGluZSIKLW1zZ3N0ciAiS8O2ciBnaXQgZ3VpIGJsYW1lIHDDpSBkZW4gaMOkciByYWRlbiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAwOQorbXNnaWQgIml0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gY3JlYXRlICdIRUFEJyBtYW51YWxseSIKK21zZ3N0ciAia2FuIGludGUgc2thcGEgXCJIRUFEXCIgbWFudWVsbHQiCiAKLSM6IGdpdGs6MzAxNAorIzogYnVpbHRpbi9icmFuY2guYzoxMDE1Cittc2dpZCAiLWEgYW5kIC1yIG9wdGlvbnMgdG8gJ2dpdCBicmFuY2gnIGRvIG5vdCBtYWtlIHNlbnNlIHdpdGggYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiIgorImZsYWdnb3JuYSAtYSBvY2ggLXIgcMOlIFwiZ2l0IGJyYW5jaFwiIGthbiBpbnRlIGFuZ2VzIHRpbGxzYW1tYW5zIG1lZCBldHQgIgorImdyZW5uYW1uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtLXNldC11cHN0cmVhbSBmbGFnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4gQ29uc2lkZXIgdXNpbmcgLS0iCisidHJhY2sgb3IgLS1zZXQtdXBzdHJlYW0tdG9cbiIKK21zZ3N0ciAiIgorIkZsYWdnYW4gLS1zZXQtdXBzdHJlYW0gcmVrb21tZW5kZXJhcyBlaiBvY2gga29tbWVyIHRhcyBib3J0LiBBbnbDpG5kIC0tdHJhY2sgIgorImVsbGVyIC0tc2V0LXVwc3RyZWFtLXRvXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAzNQorIywgYy1mb3JtYXQKIG1zZ2lkICIiCiAiXG4iCi0iR2l0ayAtIGEgY29tbWl0IHZpZXdlciBmb3IgZ2l0XG4iCi0iXG4iCi0iQ29weXJpZ2h0IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgotIlxuIgotIlVzZSBhbmQgcmVkaXN0cmlidXRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCi1tc2dzdHIgIiIKLSJcbiIKLSJHaXRrIC0gZW4gaW5jaGVja25pbmdzdmlzYXJlIGbDtnIgZ2l0XG4iCi0iXG4iCi0iQ29weXJpZ2h0IMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgotIlxuIgotIkFudsOkbmQgb2NoIHZpZGFyZWbDtnJtZWRsYSBlbmxpZ3QgdmlsbGtvcmVuIGkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCi0KLSM6IGdpdGs6MzAyMiBnaXRrOjMwODkgZ2l0azo5ODU3Ci1tc2dpZCAiQ2xvc2UiCi1tc2dzdHIgIlN0w6RuZyIKLQotIzogZ2l0azozMDQzCi1tc2dpZCAiR2l0ayBrZXkgYmluZGluZ3MiCi1tc2dzdHIgIlRhbmdlbnRib3Jkc2JpbmRuaW5nYXIgZsO2ciBHaXRrIgotCi0jOiBnaXRrOjMwNDYKLW1zZ2lkICJHaXRrIGtleSBiaW5kaW5nczoiCi1tc2dzdHIgIlRhbmdlbnRib3Jkc2JpbmRuaW5nYXIgZsO2ciBHaXRrOiIKLQotIzogZ2l0azozMDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVE+XHRcdFF1aXQiCi1tc2dzdHIgIjwlcy1RPlx0XHRBdnNsdXRhIgotCi0jOiBnaXRrOjMwNDkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtVz5cdFx0Q2xvc2Ugd2luZG93IgotbXNnc3RyICI8JXMtVz5cdFx0U3TDpG5nIGbDtm5zdGVyIgotCi0jOiBnaXRrOjMwNTAKLW1zZ2lkICI8SG9tZT5cdFx0TW92ZSB0byBmaXJzdCBjb21taXQiCi1tc2dzdHIgIjxIb21lPlx0XHRHw6UgdGlsbCBmw7Zyc3RhIGluY2hlY2tuaW5nIgotCi0jOiBnaXRrOjMwNTEKLW1zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgotbXNnc3RyICI8RW5kPlx0XHRHw6UgdGlsbCBzaXN0YSBpbmNoZWNrbmluZyIKLQotIzogZ2l0azozMDUyCi1tc2dpZCAiPFVwPiwgcCwga1x0TW92ZSB1cCBvbmUgY29tbWl0IgotbXNnc3RyICI8VXBwPiwgcCwga1x0R8OlIGVuIGluY2hlY2tuaW5nIHVwcCIKLQotIzogZ2l0azozMDUzCi1tc2dpZCAiPERvd24+LCBuLCBqXHRNb3ZlIGRvd24gb25lIGNvbW1pdCIKLW1zZ3N0ciAiPE5lZD4sIG4sIGpcdEfDpSBlbiBpbmNoZWNrbmluZyBuZWQiCi0KLSM6IGdpdGs6MzA1NAotbXNnaWQgIjxMZWZ0PiwgeiwgaFx0R28gYmFjayBpbiBoaXN0b3J5IGxpc3QiCi1tc2dzdHIgIjxWw6Ruc3Rlcj4sIHosIGhcdEfDpSBiYWvDpXQgaSBoaXN0b3Jpa2VuIgotCi0jOiBnaXRrOjMwNTUKLW1zZ2lkICI8UmlnaHQ+LCB4LCBsXHRHbyBmb3J3YXJkIGluIGhpc3RvcnkgbGlzdCIKLW1zZ3N0ciAiPEjDtmdlcj4sIHgsIGxcdEfDpSBmcmFtw6V0IGkgaGlzdG9yaWtlbiIKLQotIzogZ2l0azozMDU2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCi1tc2dzdHIgIjwlcy1uPlx0R8OlIHRpbGwgYWt0dWVsbCBpbmNoZWNrbmluZ3Mgbjp0ZSBmw7Zyw6RsZGVyIGkgaGlzdG9yaWVsaXN0YW4iCi0KLSM6IGdpdGs6MzA1NwotbXNnaWQgIjxQYWdlVXA+XHRNb3ZlIHVwIG9uZSBwYWdlIGluIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8UGFnZVVwPlx0R8OlIHVwcCBlbiBzaWRhIGkgaW5jaGVja25pbmdzbGlzdGFuIgotCi0jOiBnaXRrOjMwNTgKLW1zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCi1tc2dzdHIgIjxQYWdlRG93bj5cdEfDpSBuZWQgZW4gc2lkYSBpIGluY2hlY2tuaW5nc2xpc3RhbiIKLQotIzogZ2l0azozMDU5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLUhvbWU+XHRTY3JvbGwgdG8gdG9wIG9mIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8JXMtSG9tZT5cdFJ1bGxhIHRpbGwgYsO2cmphbiBhdiBpbmNoZWNrbmluZ3NsaXN0YW4iCi0KLSM6IGdpdGs6MzA2MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1FbmQ+XHRTY3JvbGwgdG8gYm90dG9tIG9mIGNvbW1pdCBsaXN0IgotbXNnc3RyICI8JXMtRW5kPlx0UnVsbGEgdGlsbCBzbHV0ZXQgYXYgaW5jaGVja25pbmdzbGlzdGFuIgotCi0jOiBnaXRrOjMwNjEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCi1tc2dzdHIgIjwlcy1VcHA+XHRSdWxsYSBpbmNoZWNrbmluZ3NsaXN0YW4gdXBwIGV0dCBzdGVnIgotCi0jOiBnaXRrOjMwNjIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBsaW5lIgotbXNnc3RyICI8JXMtTmVkPlx0UnVsbGEgaW5jaGVja25pbmdzbGlzdGFuIG5lZCBldHQgc3RlZyIKLQotIzogZ2l0azozMDYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVBhZ2VVcD5cdFNjcm9sbCBjb21taXQgbGlzdCB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPCVzLVBhZ2VVcD5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiB1cHAgZW4gc2lkYSIKLQotIzogZ2l0azozMDY0Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVBhZ2VEb3duPlx0U2Nyb2xsIGNvbW1pdCBsaXN0IGRvd24gb25lIHBhZ2UiCi1tc2dzdHIgIjwlcy1QYWdlRG93bj5cdFJ1bGxhIGluY2hlY2tuaW5nc2xpc3RhbiBuZWQgZW4gc2lkYSIKLQotIzogZ2l0azozMDY1Ci1tc2dpZCAiPFNoaWZ0LVVwPlx0RmluZCBiYWNrd2FyZHMgKHVwd2FyZHMsIGxhdGVyIGNvbW1pdHMpIgotbXNnc3RyICI8U2tpZnQtVXBwPlx0U8O2ayBiYWvDpXQgKHVwcMOldCwgc2VuYXJlIGluY2hlY2tuaW5nYXIpIgotCi0jOiBnaXRrOjMwNjYKLW1zZ2lkICI8U2hpZnQtRG93bj5cdEZpbmQgZm9yd2FyZHMgKGRvd253YXJkcywgZWFybGllciBjb21taXRzKSIKLW1zZ3N0ciAiPFNraWZ0LU5lZD5cdFPDtmsgZnJhbcOldCAobmVkw6V0LCB0aWRpZ2FyZSBpbmNoZWNrbmluZ2FyKSIKLQotIzogZ2l0azozMDY3Ci1tc2dpZCAiPERlbGV0ZT4sIGJcdFNjcm9sbCBkaWZmIHZpZXcgdXAgb25lIHBhZ2UiCi1tc2dzdHIgIjxEZWxldGU+LCBiXHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCBlbiBzaWRhIgotCi0jOiBnaXRrOjMwNjgKLW1zZ2lkICI8QmFja3NwYWNlPlx0U2Nyb2xsIGRpZmYgdmlldyB1cCBvbmUgcGFnZSIKLW1zZ3N0ciAiPEJha3N0ZWc+XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCBlbiBzaWRhIgotCi0jOiBnaXRrOjMwNjkKLW1zZ2lkICI8U3BhY2U+XHRcdFNjcm9sbCBkaWZmIHZpZXcgZG93biBvbmUgcGFnZSIKLW1zZ3N0ciAiPEJsYW5rc3RlZz5cdFJ1bGxhIGRpZmZ2aXNuaW5nZW4gbmVkIGVuIHNpZGEiCi0KLSM6IGdpdGs6MzA3MAotbXNnaWQgInVcdFx0U2Nyb2xsIGRpZmYgdmlldyB1cCAxOCBsaW5lcyIKLW1zZ3N0ciAidVx0XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHVwcCAxOCByYWRlciIKLQotIzogZ2l0azozMDcxCi1tc2dpZCAiZFx0XHRTY3JvbGwgZGlmZiB2aWV3IGRvd24gMTggbGluZXMiCi1tc2dzdHIgImRcdFx0UnVsbGEgZGlmZnZpc25pbmdlbiBuZWQgMTggcmFkZXIiCi0KLSM6IGdpdGs6MzA3MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1GPlx0XHRGaW5kIgotbXNnc3RyICI8JXMtRj5cdFx0U8O2ayIKLQotIzogZ2l0azozMDczCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLUc+XHRcdE1vdmUgdG8gbmV4dCBmaW5kIGhpdCIKLW1zZ3N0ciAiPCVzLUc+XHRcdEfDpSB0aWxsIG7DpHN0YSBzw7ZrdHLDpGZmIgotCi0jOiBnaXRrOjMwNzQKLW1zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgotbXNnc3RyICI8UmV0dXJuPlx0XHRHw6UgdGlsbCBuw6RzdGEgc8O2a3Ryw6RmZiIKLQotIzogZ2l0azozMDc1Ci0jLCBmdXp6eQotbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgotbXNnc3RyICI8RW5kPlx0XHRHw6UgdGlsbCBzaXN0YSBpbmNoZWNrbmluZyIKLQotIzogZ2l0azozMDc2Ci1tc2dpZCAiL1x0XHRGb2N1cyB0aGUgc2VhcmNoIGJveCIKLW1zZ3N0ciAiL1x0XHRGb2t1c2VyYSBzw7ZrcnV0YW4iCi0KLSM6IGdpdGs6MzA3NwotbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKLW1zZ3N0ciAiP1x0XHRHw6UgdGlsbCBmw7ZyZWfDpWVuZGUgc8O2a3Ryw6RmZiIKLQotIzogZ2l0azozMDc4Ci1tc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKLW1zZ3N0ciAiZlx0XHRSdWxsYSBkaWZmdmlzbmluZ2VuIHRpbGwgbsOkc3RhIGZpbCIKLQotIzogZ2l0azozMDc5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgotbXNnc3RyICI8JXMtUz5cdFx0R8OlIHRpbGwgbsOkc3RhIHPDtmt0csOkZmYgaSBkaWZmdmlzbmluZ2VuIgotCi0jOiBnaXRrOjMwODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgotbXNnc3RyICI8JXMtUj5cdFx0R8OlIHRpbGwgZsO2cmVnw6VlbmRlIHPDtmt0csOkZmYgaSBkaWZmdmlzbmluZ2VuIgotCi0jOiBnaXRrOjMwODEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtS1ArPlx0SW5jcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtTnVtKz5cdMOWa2EgdGVja2Vuc3RvcmxlayIKLQotIzogZ2l0azozMDgyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLXBsdXM+XHRJbmNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1wbHVzPlx0w5ZrYSB0ZWNrZW5zdG9ybGVrIgotCi0jOiBnaXRrOjMwODMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtTnVtLT5cdE1pbnNrYSB0ZWNrZW5zdG9ybGVrIgotCi0jOiBnaXRrOjMwODQKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtbWludXM+XHREZWNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1taW51cz5cdE1pbnNrYSB0ZWNrZW5zdG9ybGVrIgotCi0jOiBnaXRrOjMwODUKLW1zZ2lkICI8RjU+XHRcdFVwZGF0ZSIKLW1zZ3N0ciAiPEY1Plx0XHRVcHBkYXRlcmEiCi0KLSM6IGdpdGs6MzU1MCBnaXRrOjM1NTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBjcmVhdGluZyB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzOiIKLW1zZ3N0ciAiRmVsIHZpZCBza2FwYW5kZSBhdiB0ZW1wb3LDpHIga2F0YWxvZyAlczoiCi0KLSM6IGdpdGs6MzU3MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgotbXNnc3RyICJGZWwgdmlkIGjDpG10bmluZyBhdiAgXCIlc1wiIGZyw6VuICVzOiIKLQotIzogZ2l0azozNjM1Ci1tc2dpZCAiY29tbWFuZCBmYWlsZWQ6IgotbXNnc3RyICJrb21tYW5kbyBtaXNzbHlja2FkZXM6IgotCi0jOiBnaXRrOjM3ODQKLW1zZ2lkICJObyBzdWNoIGNvbW1pdCIKLW1zZ3N0ciAiSW5jaGVja25pbmcgc2FrbmFzIgotCi0jOiBnaXRrOjM3OTgKLW1zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCi1tc2dzdHIgImdpdCBndWkgYmxhbWU6IGtvbW1hbmRvIG1pc3NseWNrYWRlczoiCi0KLSM6IGdpdGs6MzgyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCi1tc2dzdHIgIkt1bmRlIGludGUgbMOkc2Egc2FtbWFuc2xhZ25pbmdzaHV2dWQ6ICVzIgotCi0jOiBnaXRrOjM4MzcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKLW1zZ3N0ciAiRmVsIHZpZCBsw6RzbmluZyBhdiBpbmRleDogJXMiCi0KLSM6IGdpdGs6Mzg2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCi1tc2dzdHIgIkt1bmRlIGludGUgc3RhcnRhIGdpdCBibGFtZTogJXMiCi0KLSM6IGdpdGs6Mzg2NSBnaXRrOjY3NTQKLW1zZ2lkICJTZWFyY2hpbmciCi1tc2dzdHIgIlPDtmtlciIKLQotIzogZ2l0azozODk3Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgcnVubmluZyBnaXQgYmxhbWU6ICVzIgotbXNnc3RyICJGZWwgdmlkIGvDtnJuaW5nIGF2IGdpdCBibGFtZTogJXMiCi0KLSM6IGdpdGs6MzkyNQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRoYXQgbGluZSBjb21lcyBmcm9tIGNvbW1pdCAlcywgIHdoaWNoIGlzIG5vdCBpbiB0aGlzIHZpZXciCi1tc2dzdHIgIlJhZGVuIGtvbW1lciBmcsOlbiBpbmNoZWNrbmluZ2VuICVzLCBzb20gaW50ZSBmaW5ucyBpIGRlbm5hIHZ5IgotCi0jOiBnaXRrOjM5MzkKLW1zZ2lkICJFeHRlcm5hbCBkaWZmIHZpZXdlciBmYWlsZWQ6IgotbXNnc3RyICJFeHRlcm50IGRpZmYtdmVya3R5ZyBtaXNzbHlja2FkZXM6IgotCi0jOiBnaXRrOjQwNzAKLW1zZ2lkICJHaXRrIHZpZXcgZGVmaW5pdGlvbiIKLW1zZ3N0ciAiRGVmaW5pdGlvbiBhdiBHaXRrLXZ5IgotCi0jOiBnaXRrOjQwNzQKLW1zZ2lkICJSZW1lbWJlciB0aGlzIHZpZXciCi1tc2dzdHIgIlNwYXJhIGRlbm5hIHZ5IgotCi0jOiBnaXRrOjQwNzUKLW1zZ2lkICJSZWZlcmVuY2VzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCk6IgotbXNnc3RyICJSZWZlcmVuc2VyIChibGFua3N0ZWdzYXZkZWxhZCBsaXN0YSk6IgotCi0jOiBnaXRrOjQwNzYKLW1zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgotbXNnc3RyICJHcmVuYXIgJiB0YWdnYXI6IgotCi0jOiBnaXRrOjQwNzcKLW1zZ2lkICJBbGwgcmVmcyIKLW1zZ3N0ciAiQWxsYSByZWZlcmVuc2VyIgotCi0jOiBnaXRrOjQwNzgKLW1zZ2lkICJBbGwgKGxvY2FsKSBicmFuY2hlcyIKLW1zZ3N0ciAiQWxsYSAobG9rYWxhKSBncmVuYXIiCi0KLSM6IGdpdGs6NDA3OQotbXNnaWQgIkFsbCB0YWdzIgotbXNnc3RyICJBbGxhIHRhZ2dhciIKLQotIzogZ2l0azo0MDgwCi1tc2dpZCAiQWxsIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKLW1zZ3N0ciAiQWxsYSBmasOkcnJzcMOlcmFuZGUgZ3JlbmFyIgotCi0jOiBnaXRrOjQwODEKLW1zZ2lkICJDb21taXQgSW5mbyAocmVndWxhciBleHByZXNzaW9ucyk6IgotbXNnc3RyICJJbmNoZWNrbmluZ3NpbmZvIChyZWd1bGrDpHJhIHV0dHJ5Y2spOiIKLQotIzogZ2l0azo0MDgyCi1tc2dpZCAiQXV0aG9yOiIKLW1zZ3N0ciAiRsO2cmZhdHRhcmU6IgotCi0jOiBnaXRrOjQwODMKLW1zZ2lkICJDb21taXR0ZXI6IgotbXNnc3RyICJJbmNoZWNrYXJlOiIKLQotIzogZ2l0azo0MDg0Ci1tc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJJbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiIKLQotIzogZ2l0azo0MDg1Ci1tc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCi1tc2dzdHIgIk1vdHN2YXJhciBhbGxhIGtyaXRlcmllciBmw7ZyIGluY2hlY2tuaW5nc2luZm8iCi0KLSM6IGdpdGs6NDA4NgotIywgZnV6enkKLW1zZ2lkICJNYXRjaGVzIG5vIENvbW1pdCBJbmZvIGNyaXRlcmlhIgotbXNnc3RyICJNb3RzdmFyYXIgaW5nYSBrcml0ZXJpZXIgZsO2ciBpbmNoZWNrbmluZ3NpbmZvIgotCi0jOiBnaXRrOjQwODcKLW1zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKLW1zZ3N0ciAiw4RuZHJpbmdhciBhdiBmaWxlcjoiCi0KLSM6IGdpdGs6NDA4OAotbXNnaWQgIkZpeGVkIFN0cmluZyIKLW1zZ3N0ciAiRmFzdCBzdHLDpG5nIgotCi0jOiBnaXRrOjQwODkKLW1zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCi1tc2dzdHIgIlJlZ3VsasOkcnQgdXR0cnljayIKLQotIzogZ2l0azo0MDkwCi1tc2dpZCAiU2VhcmNoIHN0cmluZzoiCi1tc2dzdHIgIlPDtmtzdHLDpG5nOiIKLQotIzogZ2l0azo0MDkxCi1tc2dpZCAiIgotIkNvbW1pdCBEYXRlcyAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCi0iMTU6Mjc6MzhcIik6IgotbXNnc3RyICIiCi0iSW5jaGVja2luZ3NkYXR1bSAoXCIyIHdlZWtzIGFnb1wiLCBcIjIwMDktMDMtMTcgMTU6Mjc6MzhcIiwgXCJNYXJjaCAxNywgMjAwOSAiCi0iMTU6Mjc6MzhcIik6IgotCi0jOiBnaXRrOjQwOTIKLW1zZ2lkICJTaW5jZToiCi1tc2dzdHIgIkZyw6VuOiIKLQotIzogZ2l0azo0MDkzCi1tc2dpZCAiVW50aWw6IgotbXNnc3RyICJUaWxsOiIKLQotIzogZ2l0azo0MDk0Ci1tc2dpZCAiTGltaXQgYW5kL29yIHNraXAgYSBudW1iZXIgb2YgcmV2aXNpb25zIChwb3NpdGl2ZSBpbnRlZ2VyKToiCi1tc2dzdHIgIkJlZ3LDpG5zYSBvY2gvZWxsZXIgaG9wcGEgw7Z2ZXIgZXR0IGFudGFsIHJldmlzaW9uZXIgKHBvc2l0aXZ0IGhlbHRhbCk6IgotCi0jOiBnaXRrOjQwOTUKLW1zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCi1tc2dzdHIgIkFudGFsIGF0dCB2aXNhOiIKLQotIzogZ2l0azo0MDk2Ci1tc2dpZCAiTnVtYmVyIHRvIHNraXA6IgotbXNnc3RyICJBbnRhbCBhdHQgaG9wcGEgw7Z2ZXI6IgotCi0jOiBnaXRrOjQwOTcKLW1zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgotbXNnc3RyICJEaXZlcnNlIGFsdGVybmF0aXY6IgotCi0jOiBnaXRrOjQwOTgKLW1zZ2lkICJTdHJpY3RseSBzb3J0IGJ5IGRhdGUiCi1tc2dzdHIgIlN0cmlrdCBkYXR1bXNvcnRlcmluZyIKLQotIzogZ2l0azo0MDk5Ci1tc2dpZCAiTWFyayBicmFuY2ggc2lkZXMiCi1tc2dzdHIgIk1hcmtlcmEgc2lkb2dyZW5hciIKLQotIzogZ2l0azo0MTAwCi1tc2dpZCAiTGltaXQgdG8gZmlyc3QgcGFyZW50IgotbXNnc3RyICJCZWdyw6Ruc2EgdGlsbCBmw7Zyc3RhIGbDtnLDpGxkZXIiCi0KLSM6IGdpdGs6NDEwMQotbXNnaWQgIlNpbXBsZSBoaXN0b3J5IgotbXNnc3RyICJFbmtlbCBoaXN0b3JpayIKLQotIzogZ2l0azo0MTAyCi1tc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCi1tc2dzdHIgIll0dGVybGlnYXJlIGFyZ3VtZW50IHRpbGwgZ2l0IGxvZzoiCi0KLSM6IGdpdGs6NDEwMwotbXNnaWQgIkVudGVyIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBpbmNsdWRlLCBvbmUgcGVyIGxpbmU6IgotbXNnc3RyICJBbmdlIGZpbGVyIG9jaCBrYXRhbG9nZXIgYXR0IHRhIG1lZCwgZW4gcGVyIHJhZDoiCi0KLSM6IGdpdGs6NDEwNAotbXNnaWQgIkNvbW1hbmQgdG8gZ2VuZXJhdGUgbW9yZSBjb21taXRzIHRvIGluY2x1ZGU6IgotbXNnc3RyICJLb21tYW5kbyBmw7ZyIGF0dCBnZW5lcmVyYSBmbGVyIGluY2hlY2tuaW5nYXIgYXR0IHRhIG1lZDoiCi0KLSM6IGdpdGs6NDIyOAotbXNnaWQgIkdpdGs6IGVkaXQgdmlldyIKLW1zZ3N0ciAiR2l0azogcmVkaWdlcmEgdnkiCi0KLSM6IGdpdGs6NDIzNgotbXNnaWQgIi0tIGNyaXRlcmlhIGZvciBzZWxlY3RpbmcgcmV2aXNpb25zIgotbXNnc3RyICIgLSBrcml0ZXJpZXIgZsO2ciB2YWwgYXYgcmV2aXNpb25lciIKLQotIzogZ2l0azo0MjQxCi1tc2dpZCAiVmlldyBOYW1lIgotbXNnc3RyICJOYW1uIHDDpSB2eSIKLQotIzogZ2l0azo0MzE2Ci1tc2dpZCAiQXBwbHkgKEY1KSIKLW1zZ3N0ciAiQW52w6RuZCAoRjUpIgotCi0jOiBnaXRrOjQzNTQKLW1zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCi1tc2dzdHIgIkZlbCBpIGFyZ3VtZW50IGbDtnIgdmFsIGF2IGluY2hlY2tuaW5nYXI6IgotCi0jOiBnaXRrOjQ0MDkgZ2l0azo0NDYyIGdpdGs6NDkyNCBnaXRrOjQ5MzggZ2l0azo2MjA4IGdpdGs6MTIzNzMgZ2l0azoxMjM3NAotbXNnaWQgIk5vbmUiCi1tc2dzdHIgIkluZ2V0IgotCi0jOiBnaXRrOjUwMjEgZ2l0azo1MDI2Ci1tc2dpZCAiRGVzY2VuZGFudCIKLW1zZ3N0ciAiQXZrb21saW5nIgotCi0jOiBnaXRrOjUwMjIKLW1zZ2lkICJOb3QgZGVzY2VuZGFudCIKLW1zZ3N0ciAiSW50ZSBhdmtvbWxpbmciCi0KLSM6IGdpdGs6NTAyOSBnaXRrOjUwMzQKLW1zZ2lkICJBbmNlc3RvciIKLW1zZ3N0ciAiRsO2cmZhZGVyIgotCi0jOiBnaXRrOjUwMzAKLW1zZ2lkICJOb3QgYW5jZXN0b3IiCi1tc2dzdHIgIkludGUgZsO2cmZhZGVyIgotCi0jOiBnaXRrOjUzMjQKLW1zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCi1tc2dzdHIgIkxva2FsYSDDpG5kcmluZ2FyIHNwYXJhZGUgaSBpbmRleGV0IG1lbiBpbnRlIGluY2hlY2thZGUiCi0KLSM6IGdpdGs6NTM2MAotbXNnaWQgIkxvY2FsIHVuY29tbWl0dGVkIGNoYW5nZXMsIG5vdCBjaGVja2VkIGluIHRvIGluZGV4IgotbXNnc3RyICJMb2thbGEgw6RuZHJpbmdhciwgZWogc3BhcmFkZSBpIGluZGV4ZXQiCi0KLSM6IGdpdGs6NzEzNAotbXNnaWQgImFuZCBtYW55IG1vcmUiCi1tc2dzdHIgIm1lZCBtw6VuZ2EgZmxlcmEiCi0KLSM6IGdpdGs6NzEzNwotbXNnaWQgIm1hbnkiCi1tc2dzdHIgIm3DpW5nYSIKLQotIzogZ2l0azo3MzI4Ci1tc2dpZCAiVGFnczoiCi1tc2dzdHIgIlRhZ2dhcjoiCi0KLSM6IGdpdGs6NzM0NSBnaXRrOjczNTEgZ2l0azo4ODI1Ci1tc2dpZCAiUGFyZW50IgotbXNnc3RyICJGw7Zyw6RsZGVyIgotCi0jOiBnaXRrOjczNTYKLW1zZ2lkICJDaGlsZCIKLW1zZ3N0ciAiQmFybiIKLQotIzogZ2l0azo3MzY1Ci1tc2dpZCAiQnJhbmNoIgotbXNnc3RyICJHcmVuIgotCi0jOiBnaXRrOjczNjgKLW1zZ2lkICJGb2xsb3dzIgotbXNnc3RyICJGw7ZsamVyIgotCi0jOiBnaXRrOjczNzEKLW1zZ2lkICJQcmVjZWRlcyIKLW1zZ3N0ciAiRsO2cmVnw6VyIgotCi0jOiBnaXRrOjc5NjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBnZXR0aW5nIGRpZmZzOiAlcyIKLW1zZ3N0ciAiRmVsIHZpZCBow6RtdG5pbmcgYXYgZGlmZjogJXMiCi0KLSM6IGdpdGs6ODY1MAotbXNnaWQgIkdvdG86IgotbXNnc3RyICJHw6UgdGlsbDoiCi0KLSM6IGdpdGs6ODY3MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgotbXNnc3RyICJGw7Zya29ydGF0IFNIQTEtaWQgJXMgw6RyIHR2ZXR5ZGlndCIKLQotIzogZ2l0azo4Njc4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmV2aXNpb24gJXMgaXMgbm90IGtub3duIgotbXNnc3RyICJSZXZpc2lvbmVuICVzIMOkciBpbnRlIGvDpG5kIgotCi0jOiBnaXRrOjg2ODgKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJTSEExIGlkICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAiU0hBLWlkOnQgJXMgw6RyIGludGUga8OkbnQiCi0KLSM6IGdpdGs6ODY5MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgotbXNnc3RyICJSZXZpc2lvbmVuICVzIGZpbm5zIGludGUgaSBkZW4gbnV2YXJhbmRlIHZ5biIKLQotIzogZ2l0azo4ODMyIGdpdGs6ODg0NwotbXNnaWQgIkRhdGUiCi1tc2dzdHIgIkRhdHVtIgotCi0jOiBnaXRrOjg4MzUKLW1zZ2lkICJDaGlsZHJlbiIKLW1zZ3N0ciAiQmFybiIKLQotIzogZ2l0azo4ODk4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCi1tc2dzdHIgIsOFdGVyc3TDpGxsIGdyZW5lbiAlcyBoaXQiCi0KLSM6IGdpdGs6ODkwMAotbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgotbXNnc3RyICJGcsOlbmtvcHBsYWQgaGVhZDoga2FuIGludGUgw6V0ZXJzdMOkbGxhIgotCi0jOiBnaXRrOjkwMDUgZ2l0azo5MDExCi1tc2dpZCAiU2tpcHBpbmcgbWVyZ2UgY29tbWl0ICIKLW1zZ3N0ciAiSG9wcGFyIMO2dmVyIHNhbW1hbnNsYWduaW5nc2luY2hlY2tuaW5nICIKLQotIzogZ2l0azo5MDIwIGdpdGs6OTAyNQotbXNnaWQgIkVycm9yIGdldHRpbmcgcGF0Y2ggSUQgZm9yICIKLW1zZ3N0ciAiRmVsIHZpZCBow6RtdG5pbmcgYXYgcGF0Y2gtaWQgZsO2ciAiCi0KLSM6IGdpdGs6OTAyMSBnaXRrOjkwMjYKLW1zZ2lkICIgLSBzdG9wcGluZ1xuIgotbXNnc3RyICIgLSBzdGFubmFyXG4iCi0KLSM6IGdpdGs6OTAzMSBnaXRrOjkwMzQgZ2l0azo5MDQyIGdpdGs6OTA1NiBnaXRrOjkwNjUKLW1zZ2lkICJDb21taXQgIgotbXNnc3RyICJJbmNoZWNrbmluZyAiCi0KLSM6IGdpdGs6OTAzNQotbXNnaWQgIiIKLSIgaXMgdGhlIHNhbWUgcGF0Y2ggYXNcbiIKLSIgICAgICAgIgotbXNnc3RyICIiCi0iIMOkciBzYW1tYSBwYXRjaCBzb21cbiIKLSIgICAgICAgIgotCi0jOiBnaXRrOjkwNDMKLW1zZ2lkICIiCi0iIGRpZmZlcnMgZnJvbVxuIgotIiAgICAgICAiCi1tc2dzdHIgIiIKLSIgc2tpbGplciBzaWcgZnLDpW5cbiIKLSIgICAgICAgIgotCi0jOiBnaXRrOjkwNDUKLW1zZ2lkICIiCi0iRGlmZiBvZiBjb21taXRzOlxuIgorIklmIHlvdSB3YW50ZWQgdG8gbWFrZSAnJXMnIHRyYWNrICclcycsIGRvIHRoaXM6XG4iCiAiXG4iCiBtc2dzdHIgIiIKLSJTa2lsbG5hZCBtZWxsYW4gaW5jaGVja25pbmdhcjpcbiIKKyJcbiIKKyJPbSBkdSB2aWxsIGfDtnJhIHPDpSBhdHQgXCIlc1wiIHNww6VyYXIgXCIlc1wiIGfDtnIgZHUgc8OlIGjDpHI6XG4iCiAiXG4iCiAKLSM6IGdpdGs6OTA1NyBnaXRrOjkwNjYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICIgaGFzICVzIGNoaWxkcmVuIC0gc3RvcHBpbmdcbiIKLW1zZ3N0ciAiIGhhciAlcyBiYXJuIC0gc3Rhbm5hclxuIgorIzogYnVpbHRpbi9icmFuY2guYzoxMDM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCittc2dzdHIgIiAgICBnaXQgYnJhbmNoIC1kICVzXG4iCiAKLSM6IGdpdGs6OTA4NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0IHRvIGZpbGU6ICVzIgotbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBpbmNoZWNrbmluZyB0aWxsIGZpbDogJXMiCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gJXNcbiIKK21zZ3N0ciAiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gJXNcbiIKIAotIzogZ2l0azo5MDkxCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3IgZGlmZmluZyBjb21taXRzOiAlcyIKLW1zZ3N0ciAiRmVsIHZpZCBqw6RtZsO2cmVsc2UgYXYgaW5jaGVja25pbmdhcjogJXMiCisjOiBidWlsdGluL2J1bmRsZS5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAiJXMgw6RyIG9rZWpcbiIKIAotIzogZ2l0azo5MTM3Ci1tc2dpZCAiVG9wIgotbXNnc3RyICJUb3BwIgorIzogYnVpbHRpbi9idW5kbGUuYzo2NAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIkJlaMO2dmVyIGV0dCBhcmtpdiBmw7ZyIGF0dCBza2FwYSBldHQgcGFrZXQgKGJ1bmRsZSkuIgogCi0jOiBnaXRrOjkxMzgKLW1zZ2lkICJGcm9tIgotbXNnc3RyICJGcsOlbiIKKyM6IGJ1aWx0aW4vYnVuZGxlLmM6NjgKK21zZ2lkICJOZWVkIGEgcmVwb3NpdG9yeSB0byB1bmJ1bmRsZS4iCittc2dzdHIgIkJlaMO2dmVyIGV0dCBhcmtpdiBmw7ZyIGF0dCBwYWNrYSB1cHAgZXR0IHBha2V0IChidW5kbGUpLiIKIAotIzogZ2l0azo5MTQzCi1tc2dpZCAiVG8iCi1tc2dzdHIgIlRpbGwiCi0KLSM6IGdpdGs6OTE2NwotbXNnaWQgIkdlbmVyYXRlIHBhdGNoIgotbXNnc3RyICJHZW5lcmVyYSBwYXRjaCIKLQotIzogZ2l0azo5MTY5Ci1tc2dpZCAiRnJvbToiCi1tc2dzdHIgIkZyw6VuOiIKLQotIzogZ2l0azo5MTc4Ci1tc2dpZCAiVG86IgotbXNnc3RyICJUaWxsOiIKLQotIzogZ2l0azo5MTg3Ci1tc2dpZCAiUmV2ZXJzZSIKLW1zZ3N0ciAiVsOkbmQiCi0KLSM6IGdpdGs6OTE4OSBnaXRrOjkzODUKLW1zZ2lkICJPdXRwdXQgZmlsZToiCi1tc2dzdHIgIlV0ZGF0YWZpbDoiCi0KLSM6IGdpdGs6OTE5NQotbXNnaWQgIkdlbmVyYXRlIgotbXNnc3RyICJHZW5lcmVyYSIKLQotIzogZ2l0azo5MjMzCi1tc2dpZCAiRXJyb3IgY3JlYXRpbmcgcGF0Y2g6IgotbXNnc3RyICJGZWwgdmlkIGdlbmVyZXJpbmcgYXYgcGF0Y2g6IgotCi0jOiBnaXRrOjkyNTYgZ2l0azo5MzczIGdpdGs6OTQzMAotbXNnaWQgIklEOiIKLW1zZ3N0ciAiSWQ6IgotCi0jOiBnaXRrOjkyNjUKLW1zZ2lkICJUYWcgbmFtZToiCi1tc2dzdHIgIlRhZ2duYW1uOiIKLQotIzogZ2l0azo5MjY4Ci1tc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCi1tc2dzdHIgIlRhZ2dtZWRkZWxhbmRldCDDpHIgdmFsZnJpdHQiCi0KLSM6IGdpdGs6OTI3MAotbXNnaWQgIlRhZyBtZXNzYWdlOiIKLW1zZ3N0ciAiVGFnZ21lZGRlbGFuZGU6IgotCi0jOiBnaXRrOjkyNzQgZ2l0azo5NDM5Ci1tc2dpZCAiQ3JlYXRlIgotbXNnc3RyICJTa2FwYSIKLQotIzogZ2l0azo5MjkyCi1tc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgotbXNnc3RyICJJbmdldCB0YWdnbmFtbiBhbmdhdnMiCi0KLSM6IGdpdGs6OTI5NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIlRhZyBcIiVzXCIgYWxyZWFkeSBleGlzdHMiCi1tc2dzdHIgIlRhZ2dlbiBcIiVzXCIgZmlubnMgcmVkYW4iCi0KLSM6IGdpdGs6OTMwNgotbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRhZzoiCi1tc2dzdHIgIkZlbCB2aWQgc2thcGFuZGUgYXYgdGFnZzoiCi0KLSM6IGdpdGs6OTM4MgotbXNnaWQgIkNvbW1hbmQ6IgotbXNnc3RyICJLb21tYW5kbzoiCi0KLSM6IGdpdGs6OTM5MAotbXNnaWQgIldyaXRlIgotbXNnc3RyICJTa3JpdiIKLQotIzogZ2l0azo5NDA4Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQ6IgotbXNnc3RyICJGZWwgdmlkIHNrcml2bmluZyBhdiBpbmNoZWNrbmluZzoiCi0KLSM6IGdpdGs6OTQzNQotbXNnaWQgIk5hbWU6IgotbXNnc3RyICJOYW1uOiIKLQotIzogZ2l0azo5NDU4Ci1tc2dpZCAiUGxlYXNlIHNwZWNpZnkgYSBuYW1lIGZvciB0aGUgbmV3IGJyYW5jaCIKLW1zZ3N0ciAiQW5nZSBldHQgbmFtbiBmw7ZyIGRlbiBueWEgZ3JlbmVuIgotCi0jOiBnaXRrOjk0NjMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJCcmFuY2ggJyVzJyBhbHJlYWR5IGV4aXN0cy4gT3ZlcndyaXRlPyIKLW1zZ3N0ciAiR3JlbmVuIFwiJXNcIiBmaW5ucyByZWRhbi4gU2tyaXZhIMO2dmVyPyIKLQotIzogZ2l0azo5NTMwCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ29tbWl0ICVzIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gYnJhbmNoICVzIC0tIHJlYWxseSByZS1hcHBseSBpdD8iCi1tc2dzdHIgIiIKLSJJbmNoZWNrbmluZ2VuICVzIGZpbm5zIHJlZGFuIHDDpSBncmVuZW4gJXMgLS0gc2thbGwgZGVuIHZlcmtsaWdlbiBhcHBsaWNlcmFzICIKLSJww6Ugbnl0dD8iCi0KLSM6IGdpdGs6OTUzNQotbXNnaWQgIkNoZXJyeS1waWNraW5nIgotbXNnc3RyICJQbG9ja2FyIgotCi0jOiBnaXRrOjk1NDQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MjgKIG1zZ2lkICIiCi0iQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCi0iUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdfC1lfC1wfCIKKyI8dHlwZT58LS10ZXh0Y29udikgPG9iamVjdD4iCiBtc2dzdHIgIiIKLSJDaGVycnktcGljayBtaXNzbHlja2FkZXMgcMOlIGdydW5kIGF2IGxva2FsYSDDpG5kcmluZ2FyIGkgZmlsZW4gXCIlc1wiLlxuIgotIkNoZWNrYSBpbiwgw6V0ZXJzdMOkbGwgZWxsZXIgc3BhcmEgdW5kYW4gKHN0YXNoKSBkaW5hIMOkbmRyaW5nYXIgb2NoIGbDtnJzw7ZrICIKLSJpZ2VuLiIKKyJnaXQgY2F0LWZpbGUgKC10IFstLWFsbG93LXVua25vd24tdHlwZV18LXMgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwtZXwtcHwiCisiPHR5cD58LS10ZXh0Y29udikgPG9iamVrdD4iCiAKLSM6IGdpdGs6OTU1MAorIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQyOQogbXNnaWQgIiIKLSJDaGVycnktcGljayBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKLSJEbyB5b3Ugd2lzaCB0byBydW4gZ2l0IGNpdG9vbCB0byByZXNvbHZlIGl0PyIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIDwgPGxpc3Qtb2YtIgorIm9iamVjdHM+IgogbXNnc3RyICIiCi0iQ2hlcnJ5LXBpY2sgbWlzc2x5Y2thZGVzIHDDpSBncnVuZCBhdiBlbiBzYW1tYW5zbGFnbmluZ3Nrb25mbGlrdC5cbiIKLSJWaWxsIGR1IGvDtnJhIGdpdCBjaXRvb2wgZsO2ciBhdHQgbMO2c2EgZGVuPyIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIDwgPG9iamVrdGxpc3RhPiIKIAotIzogZ2l0azo5NTY2IGdpdGs6OTYyNAotbXNnaWQgIk5vIGNoYW5nZXMgY29tbWl0dGVkIgotbXNnc3RyICJJbmdhIMOkbmRyaW5nYXIgaW5jaGVja2FkZSIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NjYKK21zZ2lkICI8dHlwZT4gY2FuIGJlIG9uZSBvZjogYmxvYiwgdHJlZSwgY29tbWl0LCB0YWciCittc2dzdHIgIjx0eXA+IGthbiB2YXJhIGVuIGF2OiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKIAotIzogZ2l0azo5NTkzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQ29tbWl0ICVzIGlzIG5vdCBpbmNsdWRlZCBpbiBicmFuY2ggJXMgLS0gcmVhbGx5IHJldmVydCBpdD8iCi1tc2dzdHIgIkluY2hlY2tuaW5nZW4gJXMgZmlubnMgaW50ZSBww6UgZ3JlbmVuICVzIC0tIHZpbGwgZHUgdmVya2xpZ2VuIMOlbmdyYT8iCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDY3Cittc2dpZCAic2hvdyBvYmplY3QgdHlwZSIKK21zZ3N0ciAidmlzYSBvYmpla3R0eXAiCiAKLSM6IGdpdGs6OTU5OAotbXNnaWQgIlJldmVydGluZyIKLW1zZ3N0ciAiw4VuZ3JhciIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NjgKK21zZ2lkICJzaG93IG9iamVjdCBzaXplIgorbXNnc3RyICJ2aXNhIG9iamVrdHN0b3JsZWsiCiAKLSM6IGdpdGs6OTYwNgotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3MAorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAiYXZzbHV0YSBtZWQgbm9sbCBuw6RyIGRldCBpbnRlIHVwcHN0w6V0dCBuw6Vnb3QgZmVsIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDcxCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgInZpc2Egb2JqZWt0ZXRzIGlubmVow6VsbCBzbnlnZ3QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzMKK21zZ2lkICJmb3IgYmxvYiBvYmplY3RzLCBydW4gdGV4dGNvbnYgb24gb2JqZWN0J3MgY29udGVudCIKK21zZ3N0ciAiZsO2ciBibG9iLW9iamVrdCwga8O2ciB0ZXh0Y29udiBww6Ugb2JqZWt0ZXRzIGlubmVow6VsbCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3NQorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAibMOldGVyIC1zIG9jaCAtdCBhdHQgZnVuZ2VyYSBtZWQgdHJhc2lnYS9zw7ZuZGVyc2tyaXZuYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzYKK21zZ2lkICJidWZmZXIgLS1iYXRjaCBvdXRwdXQiCittc2dzdHIgImJ1ZmZyYSB1dGRhdGEgZnLDpW4gLS1iYXRjaCIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3OAorbXNnaWQgInNob3cgaW5mbyBhbmQgY29udGVudCBvZiBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAidmlzYSBpbmZvcm1hdGlvbiBvY2ggaW5uZWjDpWxsIGbDtnIgb2JqZWt0IHNvbSBsaXN0YXMgcMOlIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDgxCittc2dpZCAic2hvdyBpbmZvIGFib3V0IG9iamVjdHMgZmVkIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJ2aXNhIGluZm9ybWF0aW9uIGbDtnIgb2JqZWt0IHNvbSBsaXN0YXMgcMOlIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDg0Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICIiCisiZsO2bGogc3ltYm9saXNrYSBsw6Rua2FyIGkgdHLDpGRldCAoYW52w6RuZCBtZWQgLS1iYXRjaCBlbGxlciAtLWJhdGNoLWNoZWNrKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ4NgorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgInZpc2EgYWxsYSBvYmpla3QgbWVkIC0tYmF0Y2ggZWxsZXIgLS1iYXRjaC1jaGVjayIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTEKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8c8O2a3bDpGc+Li4uIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxMgorbXNnaWQgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gPCA8bGlzdC1vZi1wYXRocz4iCittc2dzdHIgImdpdCBjaGVjay1hdHRyIC0tc3RkaW4gWy16XSBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gPCA8c8O2a3bDpGdzbGlzdGE+IgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoxOQorbXNnaWQgInJlcG9ydCBhbGwgYXR0cmlidXRlcyBzZXQgb24gZmlsZSIKK21zZ3N0ciAidmlzYSBhbGxhIGF0dHJpYnV0IHNvbSBzYXR0cyBww6UgZmlsZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIwCittc2dpZCAidXNlIC5naXRhdHRyaWJ1dGVzIG9ubHkgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgImFudsOkbmQgLmdpdGF0dHJpYnV0ZXMgZW5kYXN0IGZyw6VuIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjIgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk2Cittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgImzDpHMgZmlsbmFtbiBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjMgYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyNAorbXNnaWQgInRlcm1pbmF0ZSBpbnB1dCBhbmQgb3V0cHV0IHJlY29yZHMgYnkgYSBOVUwgY2hhcmFjdGVyIgorbXNnc3RyICJhdnNsdXRhIGluLSBvY2ggdXRkYXRhcG9zdGVyIG1lZCBOVUwtdGVja2VuIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTMzIGJ1aWx0aW4vZ2MuYzoyNjcKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgInVuZGVydHJ5Y2sgZsO2cmxvcHBzcmFwcG9ydGVyaW5nIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI2Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiCittc2dzdHIgInZpc2EgaW5kYXRhc8O2a3bDpGdhciBzb20gaW50ZSB0csOkZmZhcyIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOAorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICJpZ25vcmVyYSBpbmRleCB2aWQga29udHJvbGwiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU0Cittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAia2FuIGludGUgYW5nZSBzw7ZrdsOkZ3NuYW1uIG1lZCAtLXN0ZGluIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE1NworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiBrYW4gZW5kYXN0IGFudsOkbmRhcyB0aWxsc2FtbWFucyBtZWQgLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNTkKK21zZ2lkICJubyBwYXRoIHNwZWNpZmllZCIKK21zZ3N0ciAiaW5nZW4gc8O2a3bDpGcgYW5nYXZzIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2MworbXNnaWQgIi0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorbXNnc3RyICItLXF1aWV0IGthbiBlbmRhc3QgYW52w6RuZGFzIG1lZCBldHQgZW5rZWx0IHPDtmt2w6Rnc25hbW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTY1Cittc2dpZCAiY2Fubm90IGhhdmUgYm90aCAtLXF1aWV0IGFuZCAtLXZlcmJvc2UiCittc2dzdHIgImthbiBpbnRlIGFudsOkbmRhIGLDpWRlIC0tcXVpZXQgb2NoIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyDDpHIgZW5kYXN0IGdpbHRpZyBtZWQgLS12ZXJib3NlIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo4Cittc2dpZCAiZ2l0IGNoZWNrLW1haWxtYXAgWzxvcHRpb25zPl0gPGNvbnRhY3Q+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stbWFpbG1hcCBbPGZsYWdnb3I+XSA8a29udGFrdD4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjEzCittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgImzDpHMgw6R2ZW4ga29udGFrdGVyIGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2Ega29udGFrdDogJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ3Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICJpbmdhIGtvbnRha3RlciBhbmdhdnMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMjYKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8ZmxhZ2dvcj5dIFstLV0gWzxmaWw+Li4uXSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4OAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJjaGVja2EgdXQgYWxsYSBmaWxlciBpIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODkKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgInR2aW5nYSDDtnZlcnNrcml2bmluZyBhdiBiZWZpbnRsaWdhIGZpbGVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTkxCittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAiaW5nZW4gdmFybmluZyBmw7ZyIGV4aXN0ZXJhbmRlIGZpbGVyIG9jaCBmaWxlciBlaiBpIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTMKK21zZ2lkICJkb24ndCBjaGVja291dCBuZXcgZmlsZXMiCittc2dzdHIgImNoZWNrYSBpbnRlIHV0IG55YSBmaWxlciIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5NQorbXNnaWQgInVwZGF0ZSBzdGF0IGluZm9ybWF0aW9uIGluIHRoZSBpbmRleCBmaWxlIgorbXNnc3RyICJ1cHBkYXRlcmEgc3RhdC1pbmZvcm1hdGlvbiBpIGluZGV4ZmlsZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDEKK21zZ2lkICJyZWFkIGxpc3Qgb2YgcGF0aHMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImzDpHMgbGlzdGFuIMO2dmVyIHPDtmt2w6RnYXIgZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDMKK21zZ2lkICJ3cml0ZSB0aGUgY29udGVudCB0byB0ZW1wb3JhcnkgZmlsZXMiCittc2dzdHIgInNrcml2IGlubmVow6VsbCB0aWxsIHRlbXBvcsOkcmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDQgYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAic3Ryw6RuZyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwNQorbXNnaWQgIndoZW4gY3JlYXRpbmcgZmlsZXMsIHByZXBlbmQgPHN0cmluZz4iCittc2dzdHIgIm7DpHIgZmlsZXIgc2thcGFzLCBsw6RnZyB0aWxsIDxzdHLDpG5nPiBmw7Zyc3QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDgKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAia29waWVyYSB1dCBmaWxlciBmcsOlbiBuYW1uZ2l2ZW4gZXRhcHAiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNQorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8ZmxhZ2dvcj5dIDxncmVuPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2Cittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzxmbGFnZ29yPl0gWzxncmVuPl0gLS0gPGZpbD4uLi4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMzMgYnVpbHRpbi9jaGVja291dC5jOjE2NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgaGFyIGludGUgdsOlciB2ZXJzaW9uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTM1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgaGFyIGludGUgZGVyYXMgdmVyc2lvbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICJzw7ZrdsOkZ2VuIFwiJXNcIiBpbm5laMOlbGxlciBpbnRlIGFsbGEgbsO2ZHbDpG5kaWdhIHZlcnNpb25lciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE5NQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBuZWNlc3NhcnkgdmVyc2lvbnMiCittc2dzdHIgInPDtmt2w6RnZW4gXCIlc1wiIGlubmVow6VsbGVyIGludGUgbsO2ZHbDpG5kaWdhIHZlcnNpb25lciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcyc6IGNhbm5vdCBtZXJnZSIKK21zZ3N0ciAic8O2a3bDpGcgXCIlc1wiOiBrYW4gaW50ZSBzbMOlIGlob3AiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGFkZCBtZXJnZSByZXN1bHQgZm9yICclcyciCittc2dzdHIgIkt1bmRlIGludGUgbMOkZ2dhIHRpbGwgc2FtbWFuc2xhZ25pbmdzcmVzdWx0YXQgZsO2ciBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTAgYnVpbHRpbi9jaGVja291dC5jOjI1MyBidWlsdGluL2NoZWNrb3V0LmM6MjU2CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCB1cGRhdGluZyBwYXRocyIKK21zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyB2aWQgdXBwZGF0ZXJpbmcgYXYgc8O2a3bDpGdhciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2MiBidWlsdGluL2NoZWNrb3V0LmM6MjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICJLYW4gaW50ZSB1cHBkYXRlcmEgc8O2a3bDpGdhciBvY2ggdsOkeGxhIHRpbGwgZ3JlbmVuIFwiJXNcIiBzYW10aWRpZ3QuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjc5IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzMKK21zZ2lkICJjb3JydXB0IGluZGV4IGZpbGUiCittc2dzdHIgImluZGV4ZmlsZW4gw6RyIHRyYXNpZyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMzOSBidWlsdGluL2NoZWNrb3V0LmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgaGFyIGludGUgc2xhZ2l0cyBpaG9wIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDk1Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgImR1IG3DpXN0ZSBsw7ZzYSBkaXR0IGJlZmludGxpZ2EgaW5kZXggZsO2cnN0IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJLYW4gaW50ZSBza2FwYSByZWZlcmVuc2xvZ2cgZsO2ciBcIiVzXCI6ICVzXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NjAKK21zZ2lkICJIRUFEIGlzIG5vdyBhdCIKK21zZ3N0ciAiSEVBRCDDpHIgbnUgcMOlIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIsOFdGVyc3TDpGxsIGdyZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgIlJlZGFuIHDDpSBcIiVzXCJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhbmQgcmVzZXQgYnJhbmNoICclcydcbiIKK21zZ3N0ciAiVsOkeGxhZGUgdGlsbCBvY2ggbm9sbHN0w6RsbGRlIGdyZW5lbiBcIiVzXCJcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3NiBidWlsdGluL2NoZWNrb3V0LmM6MTA2NQorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBhIG5ldyBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICJWw6R4bGFkZSB0aWxsIGVuIG55IGdyZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAiVsOkeGxhZGUgdGlsbCBncmVuZW4gXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAiIC4uLiBvY2ggJWQgdGlsbC5cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjczNgorIywgYy1mb3JtYXQKIG1zZ2lkICIiCi0iUmV2ZXJ0IGZhaWxlZCBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlczolcyBQbGVhc2UgIgotImNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggIHlvdXIgY2hhbmdlcyBhbmQgdHJ5IGFnYWluLiIKLW1zZ3N0ciAiIgotIk1pc3NseWNrYWRlcyBtZWQgYXR0IMOlbmdyYSBww6UgZ3J1bmQgYXYgbG9rYWxhIMOkbmRyaW5nYXIgaSBmw7ZsamFuZGUgZmlsZXI6JXMuICIKLSJDaGVja2EgaW4sIMOldGVyc3TDpGxsIGVsbGVyIHNwYXJhIHVuZGFuIChzdGFzaCkgZGluYSDDpG5kcmluZ2FyIG9jaCBmw7Zyc8O2ayAiCi0iaWdlbi4iCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdCBiZWhpbmQsIG5vdCBjb25uZWN0ZWQgdG9cbiIKKyJhbnkgb2YgeW91ciBicmFuY2hlczpcbiIKKyJcbiIKKyIlc1xuIgorbXNnaWRfcGx1cmFsICIiCisiV2FybmluZzogeW91IGFyZSBsZWF2aW5nICVkIGNvbW1pdHMgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clswXSAiIgorIlZhcm5pbmc6IGR1IGzDpG1uYXIgJWQgaW5jaGVja25pbmcgYmFrb20gZGlnIHNvbSBpbnRlIMOkciBhbnNsdXRlbiB0aWxsXG4iCisibsOlZ29uIGF2IGRpbmEgZ3JlbmFyOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMV0gIiIKKyJWYXJuaW5nOiBkdSBsw6RtbmFyICVkIGluY2hlY2tuaW5nYXIgYmFrb20gZGlnIHNvbSBpbnRlIMOkciBhbnNsdXRhIHRpbGxcbiIKKyJuw6Vnb24gYXYgZGluYSBncmVuYXI6XG4iCisiXG4iCisiJXNcbiIKIAotIzogZ2l0azo5NjEwCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzU1CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCi0iIERvIHlvdSB3aXNoIHRvIHJ1biBnaXQgY2l0b29sIHRvIHJlc29sdmUgaXQ/IgorIklmIHlvdSB3YW50IHRvIGtlZXAgaXQgYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ2lkX3BsdXJhbCAiIgorIklmIHlvdSB3YW50IHRvIGtlZXAgdGhlbSBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnc3RyWzBdICIiCisiT20gZHUgdmlsbCBiZWjDpWxsYSBkZW4gZ2Vub20gYXR0IHNrYXBhIGVuIG55IGdyZW4gw6RyIG51IGVuIGJyYSB0aWRwdW5rdFxuIgorImF0dCBnw7ZyYSBzw6UsIG1lZDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bnl0dF9ncmVubmFtbj4gJXNcbiIKKyJcbiIKK21zZ3N0clsxXSAiIgorIk9tIGR1IHZpbGwgYmVow6VsbGEgZGVtIGdlbm9tIGF0dCBza2FwYSBlbiBueSBncmVuIMOkciBudSBlbiBicmEgdGlkcHVua3RcbiIKKyJhdHQgZ8O2cmEgc8OlLCBtZWQ6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG55dHRfZ3Jlbm5hbW4+ICVzXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTEKK21zZ2lkICJpbnRlcm5hbCBlcnJvciBpbiByZXZpc2lvbiB3YWxrIgorbXNnc3RyICJpbnRlcm50IGZlbCB2aWQgZ2Vub21nw6VuZyBhdiByZXZpc2lvbmVyIChyZXZpc2lvbiB3YWxrKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjc5NQorbXNnaWQgIlByZXZpb3VzIEhFQUQgcG9zaXRpb24gd2FzIgorbXNnc3RyICJUaWRpZ2FyZSBwb3NpdGlvbiBmw7ZyIEhFQUQgdmFyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6ODIyIGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDYwCittc2dpZCAiWW91IGFyZSBvbiBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAiRHUgw6RyIHDDpSBlbiBncmVuIHNvbSDDpG5udSBpbnRlIMOkciBmw7ZkZCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk2NworIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAiZW5kYXN0IGVuIHJlZmVyZW5zIGbDtnJ2w6RudGFkZXMsICVkIGdhdnMuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwNiBidWlsdGluL3dvcmt0cmVlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAiZmVsYWt0aWcgcmVmZXJlbnM6ICVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAzNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgInJlZmVyZW5zZW4gw6RyIGludGUgZXR0IHRyw6RkOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzQKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAic8O2a3bDpGdhciBrYW4gaW50ZSBhbnbDpG5kYXMgdmlkIGJ5dGUgYXYgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzcgYnVpbHRpbi9jaGVja291dC5jOjEwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiXCIlc1wiIGthbiBpbnRlIGFudsOkbmRhcyB2aWQgYnl0ZSBhdiBncmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA4NSBidWlsdGluL2NoZWNrb3V0LmM6MTA4OCBidWlsdGluL2NoZWNrb3V0LmM6MTA5MworIzogYnVpbHRpbi9jaGVja291dC5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIlwiJXNcIiBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIFwiJXNcIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN3aXRjaCBicmFuY2ggdG8gYSBub24tY29tbWl0ICclcyciCittc2dzdHIgIkthbiBpbnRlIHbDpHhsYSBncmVuIHRpbGwgaWNrZS1pbmNoZWNrbmluZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzQgYnVpbHRpbi9jaGVja291dC5jOjExMzYgYnVpbHRpbi9jbG9uZS5jOjgzCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OSBidWlsdGluL3JlbW90ZS5jOjE2MSBidWlsdGluL3dvcmt0cmVlLmM6MzE3CisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzE5Cittc2dpZCAiYnJhbmNoIgorbXNnc3RyICJncmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzNQorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICJza2FwYSBvY2ggY2hlY2thIHV0IGVuIG55IGdyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAic2thcGEvbm9sbHN0w6RsbCBvY2ggY2hlY2thIHV0IGVuIGdyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM4Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAic2thcGEgcmVmbG9nZyBmw7ZyIG55IGdyZW4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM5Cittc2dpZCAiZGV0YWNoIHRoZSBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAia29wcGxhIGZyw6VuIEhFQUQgdmlkIG5hbW5naXZlbiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDAKK21zZ2lkICJzZXQgdXBzdHJlYW0gaW5mbyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAic8OkdHQgdXBwc3Ryw7Ztc2luZm9ybWF0aW9uIGbDtnIgbnkgZ3JlbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDIKK21zZ2lkICJuZXctYnJhbmNoIgorbXNnc3RyICJueS1ncmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0MgorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAibnkgZ3JlbiB1dGFuIGbDtnLDpGxkZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQzCittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICJjaGVja2EgdXQgdsOlciB2ZXJzaW9uIGbDtnIgZWogc2FtbWFuc2xhZ25hIGZpbGVyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0NQorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICJjaGVja2EgdXQgZGVyYXMgdmVyc2lvbiBmw7ZyIGVqIHNhbW1hbnNsYWduYSBmaWxlciIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDcKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAidHZpbmdhIHV0Y2hlY2tuaW5nIChrYXN0YSBib3J0IGxva2FsYSDDpG5kcmluZ2FyKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDgKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAidXRmw7ZyIGVuIDMtdsOkZ3NzYW1tYW5zbGFnbmluZyBmw7ZyIGRlbiBueWEgZ3JlbmVuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0OSBidWlsdGluL21lcmdlLmM6MjI3Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICJ1cHBkYXRlcmEgaWdub3JlcmFkZSBmaWxlciAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1MCBidWlsdGluL2xvZy5jOjEyNjQgcGFyc2Utb3B0aW9ucy5oOjI0OQorbXNnaWQgInN0eWxlIgorbXNnc3RyICJzdGlsIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1MQorbXNnaWQgImNvbmZsaWN0IHN0eWxlIChtZXJnZSBvciBkaWZmMykiCittc2dzdHIgImtvbmZsaWt0c3RpbCAobWVyZ2UgZWxsZXIgZGlmZjMpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1NAorbXNnaWQgImRvIG5vdCBsaW1pdCBwYXRoc3BlY3MgdG8gc3BhcnNlIGVudHJpZXMgb25seSIKK21zZ3N0ciAiYmVncsOkbnNhIGludGUgc8O2a3bDpGdhciB0aWxsIGVuZGFzdCBnbGVzYSBwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTU2Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgImbDtnJ1dHNww6UgXCJnaXQgY2hlY2tvdXQgPGdyZW4tc2FrbmFzPlwiIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1OAorbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKIG1zZ3N0ciAiIgotIk1pc3NseWNrYWRlcyBtZWQgYXR0IMOlbmdyYSBww6UgZ3J1bmQgYXYgZW4gc2FtbWFuc2xhZ25pbmdza29uZmxpa3QuXG4iCi0iIFZpbGwgZHUga8O2cmEgZ2l0IGNpdG9vbCBmw7ZyIGF0dCBsw7ZzYSBkZW4/IgorImtvbnRyb2xsZXJhIGludGUgb20gZW4gYW5uYW4gYXJiZXRza2F0YWxvZyBow6VsbGVyIGRlbiBhbmdpdm5hIHJlZmVyZW5zZW4iCiAKLSM6IGdpdGs6OTY1MwotbXNnaWQgIkNvbmZpcm0gcmVzZXQiCi1tc2dzdHIgIkJla3LDpGZ0YSDDpXRlcnN0w6RsbG5pbmciCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE4MQorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWIsIC1CIG9jaCAtLW9ycGhhbiDDpHIgw7Ztc2VzaWRpZ3QgdXRlc2x1dGFuZGUiCiAKLSM6IGdpdGs6OTY1NQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJlc2V0IGJyYW5jaCAlcyB0byAlcz8iCi1tc2dzdHIgIsOFdGVyc3TDpGxsYSBncmVuZW4gJXMgdGlsbCAlcz8iCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE5OAorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayBiZWjDtnZlciBldHQgbmFtbiBww6UgZW4gZ3JlbiIKIAotIzogZ2l0azo5NjU3Ci1tc2dpZCAiUmVzZXQgdHlwZToiCi1tc2dzdHIgIlR5cCBhdiDDpXRlcnN0w6RsbG5pbmc6IgorIzogYnVpbHRpbi9jaGVja291dC5jOjEyMDMKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIkdyZW5uYW1uIHNha25hczsgZsO2cnPDtmsgbWVkIC1iIgogCi0jOiBnaXRrOjk2NjAKLW1zZ2lkICJTb2Z0OiBMZWF2ZSB3b3JraW5nIHRyZWUgYW5kIGluZGV4IHVudG91Y2hlZCIKLW1zZ3N0ciAiTWp1azogUsO2ciBpbnRlIHV0Y2hlY2tuaW5nIG9jaCBpbmRleCIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjM5Cittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgImZlbGFrdGlnIHPDtmt2w6Rnc2FuZ2l2ZWxzZSIKIAotIzogZ2l0azo5NjYzCi1tc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgotbXNnc3RyICJCbGFuZGFkOiBSw7ZyIGludGUgdXRjaGVja25pbmcsIMOldGVyc3TDpGxsIGluZGV4IgotCi0jOiBnaXRrOjk2NjYKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjQ2CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJIYXJkOiBSZXNldCB3b3JraW5nIHRyZWUgYW5kIGluZGV4XG4iCi0iKGRpc2NhcmQgQUxMIGxvY2FsIGNoYW5nZXMpIgorIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLlxuIgorIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgogbXNnc3RyICIiCi0iSMOlcmQ6IMOFdGVyc3TDpGxsIHV0Y2hlY2tuaW5nIG9jaCBpbmRleFxuIgotIihmw7Zya2FzdGFyIEFMTEEgbG9rYWxhIMOkbmRyaW5nYXIpIgorIkthbiBpbnRlIHVwcGRhdGVyYSBzw7ZrdsOkZ2FyIG9jaCB2w6R4bGEgdGlsbCBncmVuZW4gXCIlc1wiIHNhbXRpZGlndC5cbiIKKyJWaWxsZSBkdSBjaGVja2EgdXQgXCIlc1wiIHNvbSBpbnRlIGthbiBsw7ZzYXMgc29tIGVuIHV0Y2hlY2tuaW5nPyIKIAotIzogZ2l0azo5NjgzCi1tc2dpZCAiUmVzZXR0aW5nIgotbXNnc3RyICLDhXRlcnN0w6RsbGVyIgorIzogYnVpbHRpbi9jaGVja291dC5jOjEyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXQ6IC0tZGV0YWNoIHRhciBpbnRlIGVuIHPDtmt2w6RnIHNvbSBhcmd1bWVudCBcIiVzXCIiCiAKLSM6IGdpdGs6OTc0MwotbXNnaWQgIkNoZWNraW5nIG91dCIKLW1zZ3N0ciAiQ2hlY2thciB1dCIKLQotIzogZ2l0azo5Nzk2Ci1tc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKLW1zZ3N0ciAiS2FuIGludGUgdGEgYm9ydCBkZW4ganVzdCBudSB1dGNoZWNrYWRlIGdyZW5lbiIKLQotIzogZ2l0azo5ODAyCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI1NQogbXNnaWQgIiIKLSJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCi0iUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgogbXNnc3RyICIiCi0iSW5jaGVja25pbmdhcm5hIHDDpSBncmVuZW4gJXMgZXhpc3RlcmFyIGludGUgcMOlIG7DpWdvbiBhbm5hbiBncmVuLlxuIgotIlZpbGwgZHUgdmVya2xpZ2VuIHRhIGJvcnQgZ3JlbmVuICVzPyIKKyJnaXQgY2hlY2tvdXQ6IC0tb3Vycy8tLXRoZWlycywgLS1mb3JjZSBvY2ggLS1tZXJnZSDDpHIgaW5rb21wYXRpYmxhIG7DpHJcbiIKKyJkdSBjaGVja2FyIHV0IGZyw6VuIGluZGV4ZXQuIgogCi0jOiBnaXRrOjk4MzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUYWdzIGFuZCBoZWFkczogJXMiCi1tc2dzdHIgIlRhZ2dhciBvY2ggaHV2dWRlbjogJXMiCi0KLSM6IGdpdGs6OTg1MAotbXNnaWQgIkZpbHRlciIKLW1zZ3N0ciAiRmlsdGVyIgotCi0jOiBnaXRrOjEwMTQ2CisjOiBidWlsdGluL2NsZWFuLmM6MjUKIG1zZ2lkICIiCi0iRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCi0idGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgogbXNnc3RyICIiCi0iRmVsIHZpZCBsw6RzbmluZyBhdiBpbmZvcm1hdGlvbiBvbSBpbmNoZWNrbmluZ3N0b3BvbG9naTsgaW5mb3JtYXRpb24gb20gIgotImdyZW5hciBvY2ggZsO2cmVnw6VlbmRlL3NlbmFyZSB0YWdnYXIga29tbWVyIGludGUgdmFyYSBrb21wbGV0dC4iCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPG3Dtm5zdGVyPl0gWy14IHwgLVhdIFstLV0gIgorIjxzw7ZrdsOkZ2FyPi4uLiIKIAotIzogZ2l0azoxMTEyMwotbXNnaWQgIlRhZyIKLW1zZ3N0ciAiVGFnZyIKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlc1xuIgorbXNnc3RyICJUYXIgYm9ydCAlc1xuIgogCi0jOiBnaXRrOjExMTI3Ci1tc2dpZCAiSWQiCi1tc2dzdHIgIklkIgorIzogYnVpbHRpbi9jbGVhbi5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHJlbW92ZSAlc1xuIgorbXNnc3RyICJTa3VsbGUgdGEgYm9ydCAlc1xuIgogCi0jOiBnaXRrOjExMjEwCi1tc2dpZCAiR2l0ayBmb250IGNob29zZXIiCi1tc2dzdHIgIlRlY2tlbnNuaXR0c3bDpGxqYXJlIGbDtnIgR2l0ayIKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGluZyByZXBvc2l0b3J5ICVzXG4iCittc2dzdHIgIkhvcHBhciDDtnZlciBhcmtpdmV0ICVzXG4iCiAKLSM6IGdpdGs6MTEyMjcKLW1zZ2lkICJCIgotbXNnc3RyICJGIgorIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICJTa3VsbGUgaG9wcGEgw7Z2ZXIgYXJraXZldCAlc1xuIgogCi0jOiBnaXRrOjExMjMwCi1tc2dpZCAiSSIKLW1zZ3N0ciAiSyIKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgYm9ydCAlcyIKIAotIzogZ2l0azoxMTM0OAotbXNnaWQgIkNvbW1pdCBsaXN0IGRpc3BsYXkgb3B0aW9ucyIKLW1zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGluY2hlY2tuaW5nc2xpc3R2eSIKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMTcKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIG51bWJlcmVkIGl0ZW1cbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIHNlbGVjdCBub3RoaW5nIgorbXNnc3RyICIiCisiS29tbWFuZG9oasOkbHA6XG4iCisiMSAgICAgICAgICAtIG1hcmtlcmEgZW4gbnVtcmVyYWQgcG9zdFxuIgorImZvbyAgICAgICAgLSBtYXJrZXJhIHBvc3QgYmFzZXJhZCBww6UgdW5pa3QgcHJlZml4XG4iCisiICAgICAgICAgICAtICh0b210KSBtYXJrZXJhIGluZ2VudGluZyIKIAotIzogZ2l0azoxMTM1MQotbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKGxpbmVzKSIKLW1zZ3N0ciAiTWF4aW1hbCBncmFmYnJlZGQgKHJhZGVyKSIKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMjEKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXNcbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIi0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXNcbiIKKyIqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtc1xuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIiIKKyJLb21tYW5kb2hqw6RscDpcbiIKKyIxICAgICAgICAgIC0gbWFya2VyYSBlbiBlbnNhbSBwb3N0XG4iCisiMy01ICAgICAgICAtIG1hcmtlcmEgZXR0IGludGVydmFsbCBtZWQgcG9zdGVyXG4iCisiMi0zLDYtOSAgICAtIG1hcmtlcmEgZmxlcmEgaW50ZXJ2YWxsXG4iCisiZm9vICAgICAgICAtIG1hcmtlcmEgcG9zdCBiYXNlcmFkIHDDpSB1bmlrdCBwcmVmaXhcbiIKKyItLi4uICAgICAgIC0gYXZtYXJrZXJhIHNwZWNpZmlrYSBwb3N0ZXJcbiIKKyIqICAgICAgICAgIC0gdsOkbGogYWxsYSBwb3N0ZXJcbiIKKyIgICAgICAgICAgIC0gKHRvbXQpIGF2c2x1dGEgbWFya2VyaW5nIgogCi0jOiBnaXRrOjExMzU1Ci0jLCBuby10Y2wtZm9ybWF0Ci1tc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAoJSBvZiBwYW5lKSIKLW1zZ3N0ciAiTWF4aW1hbCBncmFmYnJlZGQgKCUgYXYgcnV0YSkiCisjOiBidWlsdGluL2NsZWFuLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAiVmFkw6UgKCVzKT8iCiAKLSM6IGdpdGs6MTEzNTgKLW1zZ2lkICJTaG93IGxvY2FsIGNoYW5nZXMiCi1tc2dzdHIgIlZpc2EgbG9rYWxhIMOkbmRyaW5nYXIiCisjOiBidWlsdGluL2NsZWFuLmM6Njc5CisjLCBjLWZvcm1hdAorbXNnaWQgIklucHV0IGlnbm9yZSBwYXR0ZXJucz4+ICIKK21zZ3N0ciAiQW5nZSBpZ25vcmVyaW5nc23Dtm5zdGVyPj4iCiAKLSM6IGdpdGs6MTEzNjEKLW1zZ2lkICJBdXRvLXNlbGVjdCBTSEExIChsZW5ndGgpIgotbXNnc3RyICJWw6RsaiBTSEExIChsw6RuZ2QpIGF1dG9tYXRpc2t0IgorIzogYnVpbHRpbi9jbGVhbi5jOjcxNgorIywgYy1mb3JtYXQKK21zZ2lkICJXQVJOSU5HOiBDYW5ub3QgZmluZCBpdGVtcyBtYXRjaGVkIGJ5OiAlcyIKK21zZ3N0ciAiVkFSTklORzogSGl0dGFyIGludGUgcG9zdGVyIHNvbSBtb3RzdmFyYXI6ICVzIgogCi0jOiBnaXRrOjExMzY1Ci1tc2dpZCAiSGlkZSByZW1vdGUgcmVmcyIKLW1zZ3N0ciAiRMO2bGogZmrDpHJyLXJlZmVyZW5zZXIiCisjOiBidWlsdGluL2NsZWFuLmM6NzM3Cittc2dpZCAiU2VsZWN0IGl0ZW1zIHRvIGRlbGV0ZSIKK21zZ3N0ciAiVsOkbGogcG9zdGVyIGF0dCB0YSBib3J0IgogCi0jOiBnaXRrOjExMzY5Ci1tc2dpZCAiRGlmZiBkaXNwbGF5IG9wdGlvbnMiCi1tc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBkaWZmdnkiCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGtlZXAgW3kvTl0gYXMgaXMKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZlICVzIFt5L05dPyAiCittc2dzdHIgIlRhIGJvcnQgJXMgW1k9amEgLyBOPW5lal0/IgogCi0jOiBnaXRrOjExMzcxCi1tc2dpZCAiVGFiIHNwYWNpbmciCi1tc2dzdHIgIkJsYW5rc3RlZyBmw7ZyIHRhYnVsYXRvcnRlY2tlbiIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MDMKK21zZ2lkICJCeWUuIgorbXNnc3RyICJIZWogZMOlLiIKIAotIzogZ2l0azoxMTM3NAotbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCi1tc2dzdHIgIlZpc2EgbsOkcmxpZ2dhbmRlIHRhZ2dhci9odXZ1ZGVuIgorIzogYnVpbHRpbi9jbGVhbi5jOjgxMQorbXNnaWQgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gc3RhcnQgY2xlYW5pbmdcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbHVkZSBpdGVtcyBmcm9tIGRlbGV0aW9uXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGVjdCBpdGVtcyB0byBiZSBkZWxldGVkIGJ5IG51bWJlcnNcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybSBlYWNoIGRlbGV0aW9uIChsaWtlIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gc3RvcCBjbGVhbmluZ1xuIgorImhlbHAgICAgICAgICAgICAgICAgLSB0aGlzIHNjcmVlblxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBoZWxwIGZvciBwcm9tcHQgc2VsZWN0aW9uIgorbXNnc3RyICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIGLDtnJqYSBzdMOkZGFcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gdXRlc2x1dCBwb3N0ZXIgZnLDpW4gYm9ydHRhZ25pbmdcbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gbWFya2VyYSBwb3N0ZXIgc29tIHNrYSB0YXMgYm9ydCBtZWQgc2lmZnJvclxuIgorImFzayBlYWNoICAgICAgICAgICAgLSBiZWtyw6RmdGEgdmFyamUgYm9ydHRhZ25pbmcgKHNvbSBcInJtIC1pXCIpXG4iCisicXVpdCAgICAgICAgICAgICAgICAtIHNsdXRhIHN0w6RkYVxuIgorImhlbHAgICAgICAgICAgICAgICAgLSBkZW5uYSBza8Okcm1cbiIKKyI/ICAgICAgICAgICAgICAgICAgIC0gaGrDpGxwIGbDtnIga29tbWFuZG92YWwiCiAKLSM6IGdpdGs6MTEzNzcKLW1zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgotbXNnc3RyICJNYXhpbWFsdCBhbnRhbCB0YWdnYXIvaHV2dWRlbiBhdHQgdmlzYSIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MzgKK21zZ2lkICIqKiogQ29tbWFuZHMgKioqIgorbXNnc3RyICIqKiogS29tbWFuZG9uICoqKiIKIAotIzogZ2l0azoxMTM4MAotbXNnaWQgIkxpbWl0IGRpZmZzIHRvIGxpc3RlZCBwYXRocyIKLW1zZ3N0ciAiQmVncsOkbnNhIGRpZmYgdGlsbCBsaXN0YWRlIHPDtmt2w6RnYXIiCisjOiBidWlsdGluL2NsZWFuLmM6ODM5Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIlZhZCBudSIKIAotIzogZ2l0azoxMTM4MwotbXNnaWQgIlN1cHBvcnQgcGVyLWZpbGUgZW5jb2RpbmdzIgotbXNnc3RyICJTdMO2ZCBmw7ZyIGZpbHNwZWNpZmlrYSB0ZWNrZW5rb2RuaW5nYXIiCisjOiBidWlsdGluL2NsZWFuLmM6ODQ3Cittc2dpZCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbToiCittc2dpZF9wbHVyYWwgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW1zOiIKK21zZ3N0clswXSAiU2t1bGxlIHRhIGJvcnQgZsO2bGphbmRlIHBvc3Q6IgorbXNnc3RyWzFdICJTa3VsbGUgdGEgYm9ydCBmw7ZsamFuZGUgcG9zdGVyOiIKIAotIzogZ2l0azoxMTM4OSBnaXRrOjExNTM2Ci1tc2dpZCAiRXh0ZXJuYWwgZGlmZiB0b29sIgotbXNnc3RyICJFeHRlcm50IGRpZmYtdmVya3R5ZyIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NjQKK21zZ2lkICJObyBtb3JlIGZpbGVzIHRvIGNsZWFuLCBleGl0aW5nLiIKK21zZ3N0ciAiSW5nYSBmbGVyIGZpbGVyIGF0dCBzdMOkZGEsIGF2c2x1dGFyLiIKIAotIzogZ2l0azoxMTM5MAotbXNnaWQgIkNob29zZS4uLiIKLW1zZ3N0ciAiVsOkbGouLi4iCisjOiBidWlsdGluL2NsZWFuLmM6ODk1Cittc2dpZCAiZG8gbm90IHByaW50IG5hbWVzIG9mIGZpbGVzIHJlbW92ZWQiCittc2dzdHIgInNrcml2IGludGUgdXQgbmFtbiBww6UgYm9ydHRhZ25hIGZpbGVyIgogCi0jOiBnaXRrOjExMzk1CisjOiBidWlsdGluL2NsZWFuLmM6ODk3Cittc2dpZCAiZm9yY2UiCittc2dzdHIgInR2aW5nYSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg5OAorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICJzdMOkZGEgaW50ZXJha3RpdnQiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDAKK21zZ2lkICJyZW1vdmUgd2hvbGUgZGlyZWN0b3JpZXMiCittc2dzdHIgInRhIGJvcnQgaGVsYSBrYXRhbG9nZXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDEgYnVpbHRpbi9kZXNjcmliZS5jOjQwNyBidWlsdGluL2dyZXAuYzo3MTQKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDMgYnVpbHRpbi9uYW1lLXJldi5jOjMxMSBidWlsdGluL3Nob3ctcmVmLmM6MTg3Cittc2dpZCAicGF0dGVybiIKK21zZ3N0ciAibcO2bnN0ZXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDIKK21zZ2lkICJhZGQgPHBhdHRlcm4+IHRvIGlnbm9yZSBydWxlcyIKK21zZ3N0ciAibMOkZ2cgdGlsbCA8bcO2bnN0ZXI+IHRpbGwgaWdub3JlcmluZ3NyZWdsZXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDMKK21zZ2lkICJyZW1vdmUgaWdub3JlZCBmaWxlcywgdG9vIgorbXNnc3RyICJ0YSDDpHZlbiBib3J0IGlnbm9yZXJhZGUgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MDUKK21zZ2lkICJyZW1vdmUgb25seSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJ0YSBlbmRhc3QgYm9ydCBpZ25vcmVyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTIzCittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIteCBvY2ggLVgga2FuIGludGUgYW52w6RuZGFzIHNhbXRpZGlndCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkyNworbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2Ugc2V0IHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47IHJlZnVzaW5nIHRvICIKKyJjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzYXR0IHRpbGwgdHJ1ZSwgbWVuIHZhcmtlbiAtaSwgLW4gZWxsZXIgLWYgYW5nYXZzOyB2w6RncmFyICIKKyJzdMOkZGEiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzAKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBoYXIgc3RhbmRhcmR2w6RyZGV0IHRydWUgb2NoIHZhcmtlbiAtaSwgLW4gZWxsZXIgLWYgIgorImFuZ2F2czsgdsOkZ3JhciBzdMOkZGEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNworbXNnaWQgImdpdCBjbG9uZSBbPG9wdGlvbnM+XSBbLS1dIDxyZXBvPiBbPGRpcj5dIgorbXNnc3RyICJnaXQgY2xvbmUgWzxmbGFnZ29yPl0gWy0tXSA8YXJraXY+IFs8a2F0Pl0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1NyBidWlsdGluL2ZldGNoLmM6MTEyIGJ1aWx0aW4vbWVyZ2UuYzoyMjQKKyM6IGJ1aWx0aW4vcHVsbC5jOjEwOSBidWlsdGluL3B1c2guYzo1NjAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjgKK21zZ2lkICJmb3JjZSBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgInR2aW5nYSBmw7ZybG9wcHNyYXBwb3J0ZXJpbmciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1OQorbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICJza2FwYSBpbnRlIG7DpWdvbiB1dGNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjYwIGJ1aWx0aW4vY2xvbmUuYzo2MiBidWlsdGluL2luaXQtZGIuYzo1MDQKK21zZ2lkICJjcmVhdGUgYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgInNrYXBhIGV0dCBuYWtldCAoXCJiYXJlXCIpIGFya2l2IgorCisjOiBidWlsdGluL2Nsb25lLmM6NjQKK21zZ2lkICJjcmVhdGUgYSBtaXJyb3IgcmVwb3NpdG9yeSAoaW1wbGllcyBiYXJlKSIKK21zZ3N0ciAic2thcGEgZXR0IHNwZWdlbGFya2l2IChpbXBsaWNlcmFyIFwiYmFyZVwiKSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY2Cittc2dpZCAidG8gY2xvbmUgZnJvbSBhIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgImbDtnIgYXR0IGtsb25hIGZyw6VuIGV0dCBsb2thbHQgYXJraXYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2OAorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICJza2FwYSBpbnRlIGxva2FsYSBow6VyZGEgbMOkbmthciwga29waWVyYSBhbGx0aWQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICJza2FwYSBzb20gZXR0IGRlbGF0IGFya2l2IgorCisjOiBidWlsdGluL2Nsb25lLmM6NzIgYnVpbHRpbi9jbG9uZS5jOjc0Cittc2dpZCAiaW5pdGlhbGl6ZSBzdWJtb2R1bGVzIGluIHRoZSBjbG9uZSIKK21zZ3N0ciAiaW5pdGllcmEgdW5kZXJtb2R1bGVyIGkga2xvbmVuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUgYnVpbHRpbi9pbml0LWRiLmM6NTAxCittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICJtYWxsa2F0YWxvZyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc2IGJ1aWx0aW4vaW5pdC1kYi5jOjUwMgorbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgImthdGFsb2cgYXR0IGFudsOkbmRhIG1hbGxhciBmcsOlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc4Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgInJlZmVyZW5zYXJraXYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MAorbXNnaWQgInVzZSAtLXJlZmVyZW5jZSBvbmx5IHdoaWxlIGNsb25pbmciCittc2dzdHIgImFudsOkbmQgLS1yZWZlcmVuY2UgZW5kYXN0IHVuZGVyIGtsb25pbmdlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgxIGJ1aWx0aW4vY29sdW1uLmM6MjYgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJuYW1lIgorbXNnc3RyICJuYW1uIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODIKK21zZ2lkICJ1c2UgPG5hbWU+IGluc3RlYWQgb2YgJ29yaWdpbicgdG8gdHJhY2sgdXBzdHJlYW0iCittc2dzdHIgImFudsOkbmQgPG5hbW4+IGlzdMOkbGxldCBmw7ZyIFwib3JpZ2luXCIgZsO2ciBhdHQgc3DDpXJhIHVwcHN0csO2bXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgImNoZWNrYSB1dCA8Z3Jlbj4gaXN0w6RsbGV0IGbDtnIgZmrDpHJyZW5zIEhFQUQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NgorbXNnaWQgInBhdGggdG8gZ2l0LXVwbG9hZC1wYWNrIG9uIHRoZSByZW1vdGUiCittc2dzdHIgInPDtmt2w6RnIHRpbGwgZ2l0LXVwbG9hZC1wYWNrIHDDpSBmasOkcnJlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg3IGJ1aWx0aW4vZmV0Y2guYzoxMTMgYnVpbHRpbi9ncmVwLmM6NjU5CisjOiBidWlsdGluL3B1bGwuYzoxODYKK21zZ2lkICJkZXB0aCIKK21zZ3N0ciAiZGp1cCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICJza2FwYSBlbiBncnVuZCBrbG9uIHDDpSBkZXR0YSBkanVwIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTAKK21zZ2lkICJjbG9uZSBvbmx5IG9uZSBicmFuY2gsIEhFQUQgb3IgLS1icmFuY2giCittc2dzdHIgImtsb25hIGVuZGFzdCBlbiBncmVuLCBIRUFEIGVsbGVyIC0tYnJhbmNoIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTEgYnVpbHRpbi9pbml0LWRiLmM6NTEwCittc2dpZCAiZ2l0ZGlyIgorbXNnc3RyICJnaXRrYXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MiBidWlsdGluL2luaXQtZGIuYzo1MTEKK21zZ2lkICJzZXBhcmF0ZSBnaXQgZGlyIGZyb20gd29ya2luZyB0cmVlIgorbXNnc3RyICJzZXBhcmVyYSBnaXRrYXRhbG9nZW4gZnLDpW4gYXJiZXRza2F0YWxvZ2VuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTMKK21zZ2lkICJrZXk9dmFsdWUiCittc2dzdHIgIm55Y2tlbD12w6RyZGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAic3TDpGxsIGluIGtvbmZpZ3VyYXRpb24gaSBkZXQgbnlhIGFya2l2ZXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoyOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBub3QgYSBsb2NhbCByZXBvc2l0b3J5LiIKK21zZ3N0ciAicmVmZXJlbnNhcmtpdmV0IFwiJXNcIiDDpHIgaW50ZSBldHQgbG9rYWx0IGFya2l2LiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgInJlZmVyZW5zYXJraXZldCBcIiVzXCIgw6RyIGdydW50IgorCisjOiBidWlsdGluL2Nsb25lLmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgZ3JhZnRlZCIKK21zZ3N0ciAicmVmZXJlbnNhcmtpdmV0IFwiJXNcIiDDpHIgeW1wYXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzAgYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIHN0YXR1cyBww6UgXCIlc1wiIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzcyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5IgorbXNnc3RyICIlcyBmaW5ucyBvY2ggw6RyIGluZ2VuIGthdGFsb2ciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXNcbiIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIHN0YXR1cyBww6UgJXNcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGxpbmsgJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrYXBhIGzDpG5rZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIGtvcGllcmEgZmlsZW4gdGlsbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzUgYnVpbHRpbi9jbG9uZS5jOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICJrbGFydC5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0NworbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHRoZSBjaGVja291dCB3aXRoICdnaXQgY2hlY2tvdXQgLWYgSEVBRCdcbiIKK21zZ3N0ciAiIgorIktsb25lbiBseWNrYWRlcywgbWVuIHV0Y2hlY2tuaW5nZW4gbWlzc2x5Y2thZGVzLlxuIgorIkR1IGthbiBpbnNwZWt0ZXJhIGRldCBzb20gY2hlY2thZGVzIHV0IG1lZCBcImdpdCBzdGF0dXNcIlxuIgorIm9jaCBmw7Zyc8O2a2EgY2hlY2thIHV0IGlnZW4gbWVkIFwiZ2l0IGNoZWNrb3V0IC1mIEhFQURcIlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICJLdW5kZSBpbnRlIGhpdHRhIGZqw6RycmdyZW5lbiAlcyBmw7ZyIGF0dCBrbG9uYS4iCisKKyMgVmFndWUgb3JpZ2luYWwsIG5vdCBuZXR3b3JraW5nLXJlbGF0ZWQsIGJ1dCByYXRoZXIgcmVsYXRlZCB0byB0aGUgYWN0dWFsCisjIG9iamVjdHMgZG93bmxvYWRlZC4KKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uICIKK21zZ3N0ciAiS29udHJvbGxlcmFyIG9tIHZpIGZpY2sgYWxsYSBvYmpla3QuLi4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MTcKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAiZmrDpHJyZW4gc8OkbmRlIGludGUgYWxsYSBuw7ZkdsOkbmRpZ2Egb2JqZWt0IgorCisjOiBidWlsdGluL2Nsb25lLmM6NjgxCittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICIiCisiSEVBRCBob3MgZmrDpHJyZW4gcGVrYXIgcMOlIGVuIG9iZWZpbnRsaWcgcmVmZXJlbnMsIGthbiBpbnRlIGNoZWNrYSB1dC5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcxMgorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgImt1bmRlIGludGUgY2hlY2thIHV0IGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc5OQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgImthbiBpbnRlIHBhY2thIG9tIGbDtnIgYXR0IHN0w6RkYSB1cHAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MDEKK21zZ2lkICJjYW5ub3QgdW5saW5rIHRlbXBvcmFyeSBhbHRlcm5hdGVzIGZpbGUiCittc2dzdHIgImt1bmRlIGludGUgdGEgYm9ydCB0ZW1wb3LDpHIgXCJhbHRlcm5hdGVzXCItZmlsIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODMxCittc2dpZCAiVG9vIG1hbnkgYXJndW1lbnRzLiIKK21zZ3N0ciAiRsO2ciBtw6VuZ2EgYXJndW1lbnQuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODM1Cittc2dpZCAiWW91IG11c3Qgc3BlY2lmeSBhIHJlcG9zaXRvcnkgdG8gY2xvbmUuIgorbXNnc3RyICJEdSBtw6VzdGUgYW5nZSBldHQgYXJraXYgYXR0IGtsb25hLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgImZsYWdnb3JuYSAtLWJhcmUgb2NoIC0tb3JpZ2luICVzIMOkciBpbmtvbXBhdGlibGEuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODQ5Cittc2dpZCAiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgImZsYWdnb3JuYSAtLWJhcmUgb2NoIC0tc2VwYXJhdGUtZ2l0LWRpciDDpHIgaW5rb21wYXRpYmxhLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgImFya2l2ZXQgXCIlc1wiIGZpbm5zIGludGUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NjggYnVpbHRpbi9mZXRjaC5jOjExNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVwdGggJXMgaXMgbm90IGEgcG9zaXRpdmUgbnVtYmVyIgorbXNnc3RyICJkanVwZXQgJXMgw6RyIGludGUgZXR0IHBvc2l0aXZ0IHRhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICJkZXN0aW5hdGlvbnNzw7ZrdsOkZ2VuIFwiJXNcIiBmaW5ucyByZWRhbiBvY2ggw6RyIGludGUgZW4gdG9tIGthdGFsb2cuIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAiYXJiZXRzdHLDpGRldCBcIiVzXCIgZmlubnMgcmVkYW4uIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTAzIGJ1aWx0aW4vY2xvbmUuYzo5MTQgYnVpbHRpbi93b3JrdHJlZS5jOjIxOAorIzogYnVpbHRpbi93b3JrdHJlZS5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza2FwYSBpbmxlZGFuZGUga2F0YWxvZ2VyIGbDtnIgXCIlc1wiIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGFyYmV0c2thdGFsb2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgIktsb25hciB0aWxsIGV0dCBuYWtldCBhcmtpdiBcIiVzXCIuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICJLbG9uYXIgdGlsbCBcIiVzXCIuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk1MQorbXNnaWQgIi0tZGlzc29jaWF0ZSBnaXZlbiwgYnV0IHRoZXJlIGlzIG5vIC0tcmVmZXJlbmNlIgorbXNnc3RyICItLWRpc3NvY2lhdGUgYW5nYXZzLCBtZW4gLS1yZWZlcmVuY2UgaGFyIGludGUgYW5naXZpdHMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjgKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCBpZ25vcmVyYXMgaSBsb2thbGEga2xvbmluZ2FyOyBhbnbDpG5kIGZpbGU6Ly8gaXN0w6RsbGV0IgorCisjOiBidWlsdGluL2Nsb25lLmM6OTcxCittc2dpZCAic291cmNlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdywgaWdub3JpbmcgLS1sb2NhbCIKK21zZ3N0ciAia8OkbGxhcmtpdmV0IMOkciBncnVudCwgaWdub3JlcmFyIC0tbG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzYKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwgaWdub3JlcmFzIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGNsb25lICVzIgorbXNnc3RyICJWZXQgaW50ZSBodXIgbWFuIGtsb25hciAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMjkgYnVpbHRpbi9jbG9uZS5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIkZqw6RycmdyZW5lbiAlcyBoaXR0YWRlcyBpbnRlIGkgdXBwc3Ryw7Ztc2Fya2l2ZXQgJXMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzoxMDQwCittc2dpZCAiWW91IGFwcGVhciB0byBoYXZlIGNsb25lZCBhbiBlbXB0eSByZXBvc2l0b3J5LiIKK21zZ3N0ciAiRHUgdmVya2FyIGhhIGtsb25hdCBldHQgdG9tdCBhcmtpdi4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6OQorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjYKK21zZ2lkICJsb29rdXAgY29uZmlnIHZhcnMiCittc2dzdHIgInNsw6UgdXBwIGtvbmZpZ3VyYXRpb25zdmFyaWFibGVyIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI3IGJ1aWx0aW4vY29sdW1uLmM6MjgKK21zZ2lkICJsYXlvdXQgdG8gdXNlIgorbXNnc3RyICJ1dHNlZW5kZSBhdHQgYW52w6RuZGEiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjkKK21zZ2lkICJNYXhpbXVtIHdpZHRoIgorbXNnc3RyICJNYXhpbWFsIGJyZWRkIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAiUGFkZGluZyBzcGFjZSBvbiBsZWZ0IGJvcmRlciIKK21zZ3N0ciAiU3BhbHRmeWxsbmFkIGkgdsOkbnN0ZXJrYW50ZW4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzEKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIHJpZ2h0IGJvcmRlciIKK21zZ3N0ciAiU3BhbHRmeWxsbmFkIGkgaMO2Z2Vya2FudGVuIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjMyCittc2dpZCAiUGFkZGluZyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMiCittc2dzdHIgIlNwYWx0ZnlsbG5hZCBtZWxsYW4gc3BhbHRlciIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb21tYW5kIG3DpXN0ZSB2YXJhIGbDtnJzdGEgYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzcKK21zZ2lkICJnaXQgY29tbWl0IFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGNvbW1pdCBbPGZsYWdnb3I+XSBbLS1dIDxzw7ZrdsOkZz4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDIKK21zZ2lkICJnaXQgc3RhdHVzIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IHN0YXR1cyBbPGZsYWdnb3I+XSBbLS1dIDxzw7ZrdsOkZz4uLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDcKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5LiBSdW4gdGhlXG4iCisiZm9sbG93aW5nIGNvbW1hbmQgYW5kIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgZWRpdG9yIHRvIGVkaXRcbiIKKyJ5b3VyIGNvbmZpZ3VyYXRpb24gZmlsZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJEaXR0IG5hbW4gb2NoIGUtcG9zdGFkcmVzcyBrb25maWd1cmVyYWRlcyBhdXRvbWF0aXNrdCBiYXNlcmF0IHDDpVxuIgorImRpdHQgYW52w6RuZGFyLWlkIG9jaCB2w6RyZG5hbW4uIEtvbnRyb2xsZXJhIGF0dCBkZSDDpHIgcmlrdGlnYS4gRHVcbiIKKyJrYW4gZsO2cmhpbmRyYSBkZXQgaMOkciBtZWRkZWxhbmRldCBnZW5vbSBhdHQgc3TDpGxsYSBkZW0gZXhwbGljaXQuXG4iCisiS8O2ciBmw7ZsamFuZGUga29tbWFuZG9uIG9jaCBmw7ZsaiBpbnN0cnVrdGlvbmVybmEgaSB0ZXh0cmVkaWdlcmFyZW5cbiIKKyJmw7ZyIGF0dCByZWRpZ2VyYSBkaW4ga29uZmlndXJhdGlvbnNmaWw6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiTsOkciBkdSBnam9ydCBkZXQga2FuIGR1IHLDpHR0YSBpZGVudGl0ZXRlbiBzb20gYW52w6RuZGVzIGbDtnIgZGVuIGjDpHJcbiIKKyJpbmNoZWNrbmluZ2VuIG1lZDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjAKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJEaXR0IG5hbW4gb2NoIGUtcG9zdGFkcmVzcyBrb25maWd1cmVyYWRlcyBhdXRvbWF0aXNrdCBiYXNlcmF0IHDDpVxuIgorImRpdHQgYW52w6RuZGFyLWlkIG9jaCB2w6RyZG5hbW4uIEtvbnRyb2xsZXJhIGF0dCBkZSDDpHIgcmlrdGlnYS4gRHVcbiIKKyJrYW4gZsO2cmhpbmRyYSBkZXQgaMOkciBtZWRkZWxhbmRldCBnZW5vbSBhdHQgc3TDpGxsYSBkZW0gZXhwbGljaXQ6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiRGl0dCBuYW1uXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIGR1QGV4YW1wbGUuY29tXG4iCisiXG4iCisiTsOkciBkdSBnam9ydCBkZXQga2FuIGR1IHLDpHR0YSBpZGVudGl0ZXRlbiBzb20gYW52w6RuZGVzIGbDtnIgZGVuIGjDpHJcbiIKKyJpbmNoZWNrbmluZ2VuIG1lZDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzIKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyJEdSBiYWQgb20gYXR0IHV0w7ZrYSBkZW4gc2VuYXN0ZSBpbmNoZWNrbmluZ2VuLCBtZW4gb20gZHUgZ8O2ciBkZXRcbiIKKyJibGlyIGRlbiB0b20uIER1IGthbiBrw7ZyYSBrb21tYW5kb3QgcMOlIG55dHQgbWVkIC0tYWxsb3ctZW1wdHksIGVsbGVyXG4iCisic8OlIGthbiBkdSB0YSBib3J0IGluY2hlY2tuaW5nZW4gaGVsdCBtZWQgXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3NworbXNnaWQgIiIKKyJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi5cbiIKKyJJZiB5b3Ugd2lzaCB0byBjb21taXQgaXQgYW55d2F5LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eVxuIgorIlxuIgorbXNnc3RyICIiCisiRGVuIHRpZGlnYXJlIFwiY2hlcnJ5LXBpY2tcIjplbiDDpHIgbnUgdG9tLCBrYW5za2UgcMOlIGdydW5kIGF2IGVuIGzDtnN0XG4iCisia29uZmxpa3QuIE9tIGR1IHZpbGwgY2hlY2thIGluIGRlbiDDpG5kw6UgYW52w6RuZGVyIGR1OlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NAorbXNnaWQgIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IHJlc2V0J1xuIgorbXNnc3RyICJBbnbDpG5kIGFubmFycyBcImdpdCByZXNldFwiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODcKK21zZ2lkICIiCisiSWYgeW91IHdpc2ggdG8gc2tpcCB0aGlzIGNvbW1pdCwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgcmVzZXRcbiIKKyJcbiIKKyJUaGVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiB3aWxsIHJlc3VtZSBjaGVycnktcGlja2luZ1xuIgorInRoZSByZW1haW5pbmcgY29tbWl0cy5cbiIKK21zZ3N0ciAiIgorIk9tIGR1IHZpbGwgaG9wcGEgw7Z2ZXIgaW5jaGVja25pbmdlbiwgYW52w6RuZDpcbiIKKyJcbiIKKyIgICAgZ2l0IHJlc2V0XG4iCisiXG4iCisiXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIGtvbW1lciBkw6RyZWZ0ZXIgYXR0IMOldGVydXBwdGFcbiIKKyJjaGVycnktcGljayBmw7ZyIMOldGVyc3TDpWVuZGUgaW5jaGVja25pbmdhci5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMDQKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgIm1pc3NseWNrYWRlcyBwYWNrYSB1cHAgSEVBRDpzIHRyw6Rkb2JqZWt0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM0NQorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGluZGV4IgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIHRlbXBvcsOkciBpbmRleGZpbCIKKworIzogYnVpbHRpbi9jb21taXQuYzozNTEKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICJpbnRlcmFrdGl2IHRpbGzDpGdnbmluZyBtaXNzbHlja2FkZXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImthbiBpbnRlIHVwcGRhdGVyYSB0ZW1wb3LDpHJ0IGluZGV4IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NgorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICJNaXNzbHlja2FkZXMgdXBwZGF0ZXJhIGh1dnVkLWNhY2hldHLDpGRldCIKKworIzogYnVpbHRpbi9jb21taXQuYzozOTAgYnVpbHRpbi9jb21taXQuYzo0MTMgYnVpbHRpbi9jb21taXQuYzo0NjIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3X2luZGV4IGZpbGUiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIGZpbGVuIG5ld19pbmRleCIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NDQKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgZW4gZGVsdmlzIGluY2hlY2tuaW5nIHVuZGVyIGVuIHNhbW1hbnNsYWduaW5nLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NDYKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBjaGVycnktcGljay4iCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgZW4gZGVsdmlzIGluY2hlY2tuaW5nIHVuZGVyIGVuIGNoZXJyeS1waWNrLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NTUKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImthbiBpbnRlIGzDpHNhIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSB0ZW1wb3LDpHIgaW5kZXhmaWwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiCittc2dzdHIgImluY2hlY2tuaW5nZW4gXCIlc1wiIHNha25hciBmw7ZyZmF0dGFyaHV2dWQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGhhcyBtYWxmb3JtZWQgYXV0aG9yIGxpbmUiCittc2dzdHIgImluY2hlY2tuaW5nZW4gXCIlc1wiIGhhciBmZWxmb3JtYXRlcmF0IGbDtnJmYXR0YXJodXZ1ZCIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDAKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICJmZWxmb3JtYWQgXCItLWF1dGhvclwiLWZsYWdnYSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBkYXRlIGZvcm1hdDogJXMiCittc2dzdHIgImZlbGFrdGlndCBkYXR1bWZvcm1hdDogJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjUyCittc2dpZCAiIgorInVuYWJsZSB0byBzZWxlY3QgYSBjb21tZW50IGNoYXJhY3RlciB0aGF0IGlzIG5vdCB1c2VkXG4iCisiaW4gdGhlIGN1cnJlbnQgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJrdW5kZSBpbnRlIHbDpGxqYSBldHQga29tbWVudGFyc3RlY2tlbiBzb20gaW50ZSBhbnbDpG50c1xuIgorImkgZGV0IGJlZmludGxpZ2EgaW5jaGVja25pbmdzbWVkZGVsYW5kZXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Njg5IGJ1aWx0aW4vY29tbWl0LmM6NzIyIGJ1aWx0aW4vY29tbWl0LmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgbG9va3VwIGNvbW1pdCAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzbMOlIHVwcCBpbmNoZWNrbmluZ2VuICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwMSBidWlsdGluL3Nob3J0bG9nLmM6MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIihyZWFkaW5nIGxvZyBtZXNzYWdlIGZyb20gc3RhbmRhcmQgaW5wdXQpXG4iCittc2dzdHIgIihsw6RzZXIgbG9nZ21lZGRlbGFuZGUgZnLDpW4gc3RhbmRhcmQgaW4pXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzAzCittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgbG9nZyBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgbG9nIGZpbGUgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBsb2dnZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcyOQorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01TRyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMzCittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc4NAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBjb21taXQgdGVtcGxhdGUiCittc2dzdHIgImt1bmRlIGludGUgc2tyaXZhIGluY2hlY2tuaW5nc21hbGwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIG1lcmdlLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIkRldCB2ZXJrYXIgc29tIGR1IGNoZWNrYXIgaW4gZW4gc2FtbWFuc2xhZ25pbmcuXG4iCisiT20gZGV0IGludGUgc3TDpG1tZXIgdGFyIGR1IGJvcnQgZmlsZW5cbiIKKyJcdCVzXG4iCisib2NoIGbDtnJzw7ZrZXIgaWdlbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIkl0IGxvb2tzIGxpa2UgeW91IG1heSBiZSBjb21taXR0aW5nIGEgY2hlcnJ5LXBpY2suXG4iCisiSWYgdGhpcyBpcyBub3QgY29ycmVjdCwgcGxlYXNlIHJlbW92ZSB0aGUgZmlsZVxuIgorIlx0JXNcbiIKKyJhbmQgdHJ5IGFnYWluLlxuIgorbXNnc3RyICIiCisiXG4iCisiRGV0IHZlcmthciBzb20gZHUgY2hlY2thciBpbiBlbiBjaGVycnktcGljay5cbiIKKyJPbSBkZXQgaW50ZSBzdMOkbW1lciB0YXIgZHUgYm9ydCBmaWxlblxuIgorIlx0JXNcbiIKKyJvY2ggZsO2cnPDtmtlciBpZ2VuLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQsIGFuZCBhbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiQW5nZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCBmw7ZyIGRpbmEgw6RuZHJpbmdhci4gUmFkZXIgc29tIGlubGVkc1xuIgorIm1lZCBcIiVjXCIga29tbWVyIGlnbm9yZXJhcywgb2NoIGV0dCB0b210IG1lZGRlbGFuZGUgYXZicnl0ZXIgIgorImluY2hlY2tuaW5nZW4uXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciB5b3VyIGNoYW5nZXMuIExpbmVzIHN0YXJ0aW5nXG4iCisid2l0aCAnJWMnIHdpbGwgYmUga2VwdDsgeW91IG1heSByZW1vdmUgdGhlbSB5b3Vyc2VsZiBpZiB5b3Ugd2FudCB0by5cbiIKKyJBbiBlbXB0eSBtZXNzYWdlIGFib3J0cyB0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiQW5nZSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCBmw7ZyIGRpbmEgw6RuZHJpbmdhci4gUmFkZXIgc29tIGlubGVkc1xuIgorIm1lZCBcIiVjXCIga29tbWVyIGJlaMOlbGxhczsgZHUga2FuIHNqw6RsdiB0YSBib3J0IGRlbSBvbSBkdSB2aWxsLlxuIgorIkV0dCB0b210IG1lZGRlbGFuZGUgYXZicnl0ZXIgaW5jaGVja25pbmdlbi5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNBdXRob3I6ICAgICUuKnMgPCUuKnM+IgorbXNnc3RyICIlc0bDtnJmYXR0YXJlOiAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXNEYXRlOiAgICAgICVzIgorbXNnc3RyICIlc0RhdHVtOiAgICAgICVzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlc0NvbW1pdHRlcjogJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzSW5jaGVja2FyZTogJS4qcyA8JS4qcz4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODgwCittc2dpZCAiQ2Fubm90IHJlYWQgaW5kZXgiCittc2dzdHIgIkthbiBpbnRlIGzDpHNhIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTM3Cittc2dpZCAiRXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgIkZlbCB2aWQgYnlnZ2FuZGUgYXYgdHLDpGQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTUyIGJ1aWx0aW4vdGFnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAiQW5nZSBtZWRkZWxhbmRldCBlbiBhdiBmbGFnZ29ybmEgLW0gZWxsZXIgLUYuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTA1NAorIywgYy1mb3JtYXQKK21zZ2lkICItLWF1dGhvciAnJXMnIGlzIG5vdCAnTmFtZSA8ZW1haWw+JyBhbmQgbWF0Y2hlcyBubyBleGlzdGluZyBhdXRob3IiCittc2dzdHIgIiIKKyItLWF1dGhvciAnJXMnIMOkciBpbnRlICdOYW1uIDxlcG9zdD4nIG9jaCBtYXRjaGFyIGluZ2VuIGJlZmludGxpZyBmw7ZyZmF0dGFyZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDY5IGJ1aWx0aW4vY29tbWl0LmM6MTMwOQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHVudHJhY2tlZCBmaWxlcyBtb2RlICclcyciCittc2dzdHIgIk9naWx0aWd0IGzDpGdlIGbDtnIgb3Nww6VyYWRlIGZpbGVyOiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEwNgorbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIG9jaCAteiDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMzYKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJLYW4gaW50ZSBhbnbDpG5kYSBiw6VkZSAtLXJlc2V0LWF1dGhvciBvY2ggLS1hdXRob3IiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE0NQorbXNnaWQgIllvdSBoYXZlIG5vdGhpbmcgdG8gYW1lbmQuIgorbXNnc3RyICJEdSBoYXIgaW5nZXQgYXR0IHV0w7ZrYS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE0OAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIkR1IMOkciBpIG1pdHRlbiBhdiBlbiBzYW1tYW5zbGFnbmluZyAtLSBrYW4gaW50ZSB1dMO2a2EuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTAKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICJEdSDDpHIgaSBtaXR0ZW4gYXYgZW4gY2hlcnJ5LXBpY2sgLS0ga2FuIGludGUgdXTDtmthLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTUzCittc2dpZCAiT3B0aW9ucyAtLXNxdWFzaCBhbmQgLS1maXh1cCBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAiRmxhZ2dvcm5hIC0tc3F1YXNoIG9jaCAtLWZpeHVwIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2MworbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICJFbmRhc3QgZW4gYXYgLWMvLUMvLUYvLS1maXh1cCBrYW4gYW52w6RuZGFzLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY1Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLy0tZml4dXAuIgorbXNnc3RyICJGbGFnZ2FuIC1tIGthbiBpbnRlIGtvbWJpbmVyYXMgbWVkIC1jLy1DLy1GLy0tZml4dXAuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNzMKK21zZ2lkICItLXJlc2V0LWF1dGhvciBjYW4gYmUgdXNlZCBvbmx5IHdpdGggLUMsIC1jIG9yIC0tYW1lbmQuIgorbXNnc3RyICItLXJlc2V0LWF1dGhvciBrYW4gZW5kYXN0IGFudsOkbmRhcyBtZWQgLUMsIC1jIGVsbGVyIC0tYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTAKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJFbmRhc3QgZW4gYXYgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2gga2FuIGFudsOkbmRhcy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5MgorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiRHUgbcOlc3RlIGFuZ2Ugc8O2a3bDpGdhciB0aWxsc2FtbWFucyBtZWQgLS1pbmNsdWRlLy0tb25seS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5NAorbXNnaWQgIkNsZXZlci4uLiBhbWVuZGluZyB0aGUgbGFzdCBvbmUgd2l0aCBkaXJ0eSBpbmRleC4iCittc2dzdHIgIlNtYXJ0Li4uIHV0w7ZrYSBkZW4gc2VuYXN0ZSBtZWQgc211dHNpZ3QgaW5kZXguIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTYKK21zZ2lkICJFeHBsaWNpdCBwYXRocyBzcGVjaWZpZWQgd2l0aG91dCAtaSBvciAtbzsgYXNzdW1pbmcgLS1vbmx5IHBhdGhzLi4uIgorbXNnc3RyICJFeHBsaWNpdGEgc8O2a3bDpGdhciBhbmdhdnMgdXRhbiAtaSBlbGxlciAtbzsgYW50YXIgLS1vbmx5IHPDtmt2w6RnYXIuLi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwOCBidWlsdGluL3RhZy5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiRmVsYWt0aWd0IHN0w6RkbmluZ3Nsw6RnZSAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjEzCittc2dpZCAiUGF0aHMgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiS2FuIGludGUgYW5nZSBzw7ZrdsOkZ2FyIG1lZCAtYS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyMyBidWlsdGluL2NvbW1pdC5jOjE2MDIKK21zZ2lkICJzaG93IHN0YXR1cyBjb25jaXNlbHkiCittc2dzdHIgInZpc2Ega29uY2lzIHN0YXR1cyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI1IGJ1aWx0aW4vY29tbWl0LmM6MTYwNAorbXNnaWQgInNob3cgYnJhbmNoIGluZm9ybWF0aW9uIgorbXNnc3RyICJ2aXNhIGluZm9ybWF0aW9uIG9tIGdyZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNyBidWlsdGluL2NvbW1pdC5jOjE2MDYgYnVpbHRpbi9wdXNoLmM6NTQ2Cittc2dpZCAibWFjaGluZS1yZWFkYWJsZSBvdXRwdXQiCittc2dzdHIgIm1hc2tpbmzDpHNiYXIgdXRkYXRhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzAgYnVpbHRpbi9jb21taXQuYzoxNjA4Cittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICJ2aXNhIHN0YXR1cyBpIGzDpW5ndCBmb3JtYXQgKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzMzIGJ1aWx0aW4vY29tbWl0LmM6MTYxMQorbXNnaWQgInRlcm1pbmF0ZSBlbnRyaWVzIHdpdGggTlVMIgorbXNnc3RyICJ0ZXJtaW5lcmEgcG9zdGVyIG1lZCBOVUwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzNSBidWlsdGluL2NvbW1pdC5jOjE2MTQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4MQorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4NCBidWlsdGluL3RhZy5jOjYwNAorbXNnaWQgIm1vZGUiCittc2dzdHIgImzDpGdlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzYgYnVpbHRpbi9jb21taXQuYzoxNjE0Cittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICJ2aXNhIG9zcMOlcmFkZSBmaWxlciwgdmFsZnJpYSBsw6RnZW46IGFsbGEsIG5vcm1hbCwgbm8uIChTdGFuZGFyZDogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM5Cittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJ2aXNhIGlnbm9yZXJhZGUgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MCBwYXJzZS1vcHRpb25zLmg6MTU1Cittc2dpZCAid2hlbiIKK21zZ3N0ciAibsOkciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQxCittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisiaWdub3JlcmEgw6RuZHJpbmdhciBpIHVuZGVybW9kdWxlciwgdmFsZnJpdHQgbsOkcjogYWxsLCBkaXJ0eSwgdW50cmFja2VkLiAiCisiKERlZmF1bHQ6IGFsbCkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MworbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgInZpc2Egb3Nww6VyYWRlIGZpbGVyIGkgc3BhbHRlciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDI5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAia3VuZGUgaW50ZSBzbMOlIHVwcCBlbiBwcmVjaXMgc2thcGFkIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MzEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgZW4gcHJlY2lzIHNrYXBhZCBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc2Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAiZnLDpW5rb3BwbGFkIEhFQUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3OQorbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICIgKHJvdGluY2hlY2tuaW5nKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTcyCittc2dpZCAic3VwcHJlc3Mgc3VtbWFyeSBhZnRlciBzdWNjZXNzZnVsIGNvbW1pdCIKK21zZ3N0ciAidW5kZXJ0cnljayBzYW1tYW5mYXR0bmluZyBlZnRlciBmcmFtZ8OlbmdzcmlrIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzMKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgInZpc2EgZGlmZiBpIG1hbGxlbiBmw7ZyIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzUKK21zZ2lkICJDb21taXQgbWVzc2FnZSBvcHRpb25zIgorbXNnc3RyICJBbHRlcm5hdGl2IGbDtnIgaW5jaGVja25pbmdzbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc2IGJ1aWx0aW4vdGFnLmM6NjAyCittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAibMOkcyBtZWRkZWxhbmRlIGZyw6VuIGZpbCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc3Cittc2dpZCAiYXV0aG9yIgorbXNnc3RyICJmw7ZyZmF0dGFyZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc3Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgIsO2dmVyc3R5ciBmw7ZyZmF0dGFyZSBmw7ZyIGluY2hlY2tuaW5nZW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OCBidWlsdGluL2djLmM6MjY4Cittc2dpZCAiZGF0ZSIKK21zZ3N0ciAiZGF0dW0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OAorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAiw7Z2ZXJzdHlyIGRhdHVtIGbDtnIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc5IGJ1aWx0aW4vbWVyZ2UuYzoyMTggYnVpbHRpbi9ub3Rlcy5jOjM5MgorIzogYnVpbHRpbi9ub3Rlcy5jOjU1NSBidWlsdGluL3RhZy5jOjYwMAorbXNnaWQgIm1lc3NhZ2UiCittc2dzdHIgIm1lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OQorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJpbmNoZWNrbmluZ3NtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODAKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiw6V0ZXJhbnbDpG5kIG9jaCByZWRpZ2VyYSBtZWRkZWxhbmRlIGZyw6VuIGFuZ2l2ZW4gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MQorbXNnaWQgInJldXNlIG1lc3NhZ2UgZnJvbSBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLDpXRlcmFudsOkbmQgbWVkZGVsYW5kZSBmcsOlbiBhbmdpdmVuIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODIKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisiYW52w6RuZCBhdXRvc3F1YXNoLWZvcm1hdGVyYXQgbWVkZGVsYW5kZSBmw7ZyIGF0dCBmaXhhIGFuZ2l2ZW4gaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MworbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICIiCisiYW52w6RuZCBhdXRvc3F1YXNoLWZvcm1hdGVyYXQgbWVkZGVsYW5kZSBmw7ZyIGF0dCBzbMOlIGlob3AgbWVkIGFuZ2l2ZW4gIgorImluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODQKK21zZ2lkICJ0aGUgY29tbWl0IGlzIGF1dGhvcmVkIGJ5IG1lIG5vdyAodXNlZCB3aXRoIC1DLy1jLy0tYW1lbmQpIgorbXNnc3RyICJqYWcgw6RyIG51IGbDtnJmYXR0YXJlIGF2IGluY2hlY2tuaW5nZW4gKGFudsOkbmRzIG1lZCAtQy8tYy8tLWFtZW5kKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg1IGJ1aWx0aW4vbG9nLmM6MTIxNiBidWlsdGluL3JldmVydC5jOjg2Cittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICJsw6RnZyB0aWxsIFNpZ25lZC1vZmYtYnk6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODYKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgImFudsOkbmQgYW5naXZlbiBtYWxsZmlsIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODcKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAidHZpbmdhIHJlZGlnZXJpbmcgYXYgaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgInN0YW5kYXJkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODggYnVpbHRpbi90YWcuYzo2MDUKK21zZ2lkICJob3cgdG8gc3RyaXAgc3BhY2VzIGFuZCAjY29tbWVudHMgZnJvbSBtZXNzYWdlIgorbXNnc3RyICJodXIgYmxhbmtzdGVnIG9jaCAja29tbWVudGFyZXIgc2thbGwgdGFzIGJvcnQgZnLDpW4gbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg5Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImlua2x1ZGVyYSBzdGF0dXMgaSBtYWxsZW4gZsO2ciBpbmNoZWNrbmluZ3NtZWRkZWxhbmRldCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTkxIGJ1aWx0aW4vbWVyZ2UuYzoyMjYgYnVpbHRpbi9wdWxsLmM6MTU2CisjOiBidWlsdGluL3JldmVydC5jOjkzCittc2dpZCAiR1BHIHNpZ24gY29tbWl0IgorbXNnc3RyICJHUEctc2lnbmVyYSBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk0Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIkFsdGVybmF0aXYgZsO2ciBpbmNoZWNrbmluZ2VucyBpbm5laMOlbGwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NQorbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiY2hlY2thIGluIGFsbGEgw6RuZHJhZGUgZmlsZXIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NgorbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBhbmdpdm5hIGZpbGVyIHRpbGwgaW5kZXhldCBmw7ZyIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTcKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAibMOkZ2cgdGlsbCBmaWxlciBpbnRlcmFrdGl2dCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk4Cittc2dpZCAiaW50ZXJhY3RpdmVseSBhZGQgY2hhbmdlcyIKK21zZ3N0ciAibMOkZ2cgdGlsbCDDpG5kcmluZ2FyIGludGVyYWt0aXZ0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTkKK21zZ2lkICJjb21taXQgb25seSBzcGVjaWZpZWQgZmlsZXMiCittc2dzdHIgImNoZWNrYSBlbmRhc3QgaW4gYW5naXZuYSBmaWxlciIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjAwCittc2dpZCAiYnlwYXNzIHByZS1jb21taXQgaG9vayIKK21zZ3N0ciAiZsO2cmJpZ8OlIHByZS1jb21taXQta3JvayIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjAxCittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAidmlzYSB2YWQgc29tIHNrdWxsZSBjaGVja2FzIGluIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTIKK21zZ2lkICJhbWVuZCBwcmV2aW91cyBjb21taXQiCittc2dzdHIgImzDpGdnIHRpbGwgZsO2cmVnw6VlbmRlIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTMKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgImbDtnJiaWfDpSBwb3N0LXJld3JpdGUta3JvayIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjE4Cittc2dpZCAib2sgdG8gcmVjb3JkIGFuIGVtcHR5IGNoYW5nZSIKK21zZ3N0ciAib2sgYXR0IHJlZ2lzdHJlcmEgZW4gdG9tIMOkbmRyaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MjAKK21zZ2lkICJvayB0byByZWNvcmQgYSBjaGFuZ2Ugd2l0aCBhbiBlbXB0eSBtZXNzYWdlIgorbXNnc3RyICJvayBhdHQgcmVnaXN0cmVyYSBlbiDDpG5kcmluZyBtZWQgdG9tdCBtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDkKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgImt1bmRlIGludGUgdG9sa2EgSEVBRDpzIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29ycnVwdCBNRVJHRV9IRUFEIGZpbGUgKCVzKSIKK21zZ3N0ciAiVHJhc2lnIE1FUkdFX0hFQUQtZmlsICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTcwMgorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAia3VuZGUgaW50ZSBsw6RzYSBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAiQXZicnl0ZXIgaW5jaGVja25pbmc7IG1lZGRlbGFuZGV0IGludGUgcmVkaWdlcmF0LlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAiQXZicnl0ZXIgcMOlIGdydW5kIGF2IHRvbXQgaW5jaGVja25pbmdzbWVkZGVsYW5kZS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzg1Cittc2dpZCAiIgorIlJlcG9zaXRvcnkgaGFzIGJlZW4gdXBkYXRlZCwgYnV0IHVuYWJsZSB0byB3cml0ZVxuIgorIm5ld19pbmRleCBmaWxlLiBDaGVjayB0aGF0IGRpc2sgaXMgbm90IGZ1bGwgYW5kIHF1b3RhIGlzXG4iCisibm90IGV4Y2VlZGVkLCBhbmQgdGhlbiBcImdpdCByZXNldCBIRUFEXCIgdG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJBcmtpdmV0IGhhciB1cHBkYXRlcmF0cywgbWVuIGt1bmRlIGludGUgc2tyaXZhIGZpbGVuXG4iCisibmV3X2luZGV4LiBLb250cm9sbGVyYSBhdHQgZGlza2VuIGludGUgw6RyIGZ1bGwgb2NoXG4iCisiYXR0IGt2b3RlbiBpbnRlIGhhciDDtnZlcnNrcmlkaXRzLCBvY2gga8O2ciBzZWRhblxuIgorIlwiZ2l0IHJlc2V0IEhFQURcIiBmw7ZyIGF0dCDDpXRlcnN0w6RsbGEuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgKK21zZ2lkICJnaXQgY29uZmlnIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgY29uZmlnIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU0Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIktvbmZpZ3VyYXRpb25zZmlsZW5zIHBsYXRzIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU1Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAiYW52w6RuZCBnbG9iYWwga29uZmlndXJhdGlvbnNmaWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTYKK21zZ2lkICJ1c2Ugc3lzdGVtIGNvbmZpZyBmaWxlIgorbXNnc3RyICJhbnbDpG5kIHN5c3RlbWV0cyBrb25maWd1cmF0aW9uc2ZpbCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NworbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICJhbnbDpG5kIGFya2l2ZXRzIGtvbmZpZ3VyYXRpb25zZmlsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4Cittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICJhbnbDpG5kIGFuZ2l2ZW4ga29uZmlndXJhdGlvbnNmaWwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTkKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICJibG9iLWlkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU5Cittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAibMOkcyBrb25maWd1cmF0aW9uIGZyw6VuIGdpdmV0IGJsb2Itb2JqZWt0IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYwCittc2dpZCAiQWN0aW9uIgorbXNnc3RyICLDhXRnw6RyZCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MQorbXNnaWQgImdldCB2YWx1ZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJow6RtdGEgdsOkcmRlOiBuYW1uIFt2w6RyZGUtcmVndXR0cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjIKK21zZ2lkICJnZXQgYWxsIHZhbHVlczoga2V5IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImjDpG10YSBhbGxhIHbDpHJkZW46IG55Y2tlbCBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYzCittc2dpZCAiZ2V0IHZhbHVlcyBmb3IgcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImjDpG10YSB2w6RyZGVuIGbDtnIgcmVndXR0cjogbmFtbi1yZWd1dHRyIFt2w6RyZGUtcmVndXR0cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjQKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICJow6RtdGEgdsOkcmRlIHNwZWNpZmlrdCBVUkw6ZW46IHNla3Rpb25bLnZhcl0gVVJMIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY1Cittc2dpZCAicmVwbGFjZSBhbGwgbWF0Y2hpbmcgdmFyaWFibGVzOiBuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCittc2dzdHIgImVyc8OkdHQgYWxsYSBtb3RzdmFyYW5kZSB2YXJpYWJsZXI6IG5hbW4gdsOkcmRlIFt2w6RyZGUtcmVndXR0cl0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjYKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgImzDpGdnIHRpbGwgZW4gbnkgdmFyaWFiZWw6IG5hbW4gdsOkcmRlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY3Cittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAidGEgYm9ydCBlbiB2YXJpYWJlbDogbmFtbiBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY4Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgInRhIGJvcnQgYWxsYSB0csOkZmZhcjogbmFtbiBbdsOkcmRlLXJlZ3V0dHJdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY5Cittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICJieXQgbmFtbiBww6Ugc2VrdGlvbjogZ2FtbWFsdC1uYW1uIG55dHQtbmFtbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MAorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgInRhIGJvcnQgZW4gc2VrdGlvbjogbmFtbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MQorbXNnaWQgImxpc3QgYWxsIgorbXNnc3RyICJ2aXNhIGFsbGEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzIKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAiw7ZwcG5hIHRleHRyZWRpZ2VyaW5nc3Byb2dyYW0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzMKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBjb25maWd1cmVkOiBzbG90IFtkZWZhdWx0XSIKK21zZ3N0ciAiaGl0dGEgZGVuIGluc3TDpGxsZGEgZsOkcmdlbjogc2xvdCBbZGVmYXVsdF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAiaGl0dGEgZsOkcmdpbnN0w6RsbG5pbmdlbjogc2xvdCBbc3Rkb3V0LWlzLXR0eV0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzUKK21zZ2lkICJUeXBlIgorbXNnc3RyICJUeXAiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzYKK21zZ2lkICJ2YWx1ZSBpcyBcInRydWVcIiBvciBcImZhbHNlXCIiCittc2dzdHIgInbDpHJkZXQgw6RyIFwidHJ1ZVwiIGVsbGVyIFwiZmFsc2VcIiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NworbXNnaWQgInZhbHVlIGlzIGRlY2ltYWwgbnVtYmVyIgorbXNnc3RyICJ2w6RyZGV0IMOkciBldHQgZGVjaW1hbHQgdGFsIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4Cittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICJ2w6RyZGV0IMOkciAtLWJvb2wgZWxsZXIgLS1pbnQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzkKK21zZ2lkICJ2YWx1ZSBpcyBhIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5IG5hbWUpIgorbXNnc3RyICJ2w6RyZGV0IMOkciBlbiBzw7ZrdsOkZyAoZmlsLSBlbGxlciBrYXRhbG9nbmFtbikiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODAKK21zZ2lkICJPdGhlciIKK21zZ3N0ciAiQW5kcmEiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODEKK21zZ2lkICJ0ZXJtaW5hdGUgdmFsdWVzIHdpdGggTlVMIGJ5dGUiCittc2dzdHIgInRlcm1pbmVyYSB2w6RyZGVuIG1lZCBOVUwtYnl0ZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MgorbXNnaWQgInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdmFyaWFiZWxuYW1uIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgzCittc2dpZCAicmVzcGVjdCBpbmNsdWRlIGRpcmVjdGl2ZXMgb24gbG9va3VwIgorbXNnc3RyICJyZXNwZWt0ZXJhIGlua2x1ZGVyaW5nc2RpcmVrdGl2IHZpZCB1cHBzbGFnIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjMxMQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICJrYW4gaW50ZSB0b2xrYSBzdGFuZGFyZGbDpHJndsOkcmRlIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjQ0OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiIyBUaGlzIGlzIEdpdCdzIHBlci11c2VyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiIKKyJbdXNlcl1cbiIKKyIjIFBsZWFzZSBhZGFwdCBhbmQgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXM6XG4iCisiI1x0bmFtZSA9ICVzXG4iCisiI1x0ZW1haWwgPSAlc1xuIgorbXNnc3RyICIiCisiIyBEZXR0YSDDpHIgR2l0cyBhbnbDpG5kYXJzcGVjaWZpa2Ega29uZmlndXJhdGlvbnNmaWxcbiIKKyJbdXNlcl1cbiIKKyIjIEp1c3RlcmEgb2NoIHRhIGJvcnQga29tbWVudGVyaW5nc23DpHJrZXQgZnLDpW4gZsO2bGphbmRlIHJhZGVyOlxuIgorIiNcdG5hbWUgPSAlc1xuIgorIiNcdGVtYWlsID0gJXNcbiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNyZWF0ZSBjb25maWd1cmF0aW9uIGZpbGUgJXMiCittc2dzdHIgImthbiBpbnRlIHNrYXBhIGtvbmZpZ3VyYXRpb25zZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo1NQorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjY1Cittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICJza3JpdiBzdG9ybGVrYXIgaSBtw6Rubmlza29sw6RzYmFydCBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8ZmxhZ2dvcj5dIFs8aW5jaGVja25pbmctaWd0Pi4uLl0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxOAorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxmbGFnZ29yPl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgImRlbiBhbm5vdGVyYWRlIHRhZ2dlbiAlcyBpbnRlIHRpbGxnw6RuZ2xpZyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIyMQorIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIGhhcyBubyBlbWJlZGRlZCBuYW1lIgorbXNnc3RyICJkZW4gYW5ub3RlcmFkZSB0YWdnZW4gJXMgaGFyIGluZ2V0IGluYsOkZGRhdCBuYW1uIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjIzCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIGlzIHJlYWxseSAnJXMnIGhlcmUiCittc2dzdHIgInRhZ2dlbiBcIiVzXCIgw6RyIGkgdmVya2xpZ2hldGVuIFwiJXNcIiBow6RyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjUwIGJ1aWx0aW4vbG9nLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICJPYmpla3RuYW1uZXQgw6RyIGludGUgZ2lsdGlndDogJXMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiCittc2dzdHIgIiVzIMOkciBpbnRlIGV0dCBnaWx0aWd0IFwiJXNcIi1vYmpla3QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICJpbmdlbiB0YWdnIG1vdHN2YXJhciBcIiVzXCIgZXhha3QiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAic2VhcmNoaW5nIHRvIGRlc2NyaWJlICVzXG4iCittc2dzdHIgInPDtmtlciBmw7ZyIGF0dCBiZXNrcml2YSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICJhdnNsdXRhZGUgc8O2a25pbmcgcMOlICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIGFubm90YXRlZCB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIkhvd2V2ZXIsIHRoZXJlIHdlcmUgdW5hbm5vdGF0ZWQgdGFnczogdHJ5IC0tdGFncy4iCittc2dzdHIgIiIKKyJJbmdhIGFubm90ZXJhZGUgdGFnZ2FyIGthbiBiZXNrcml2YSBcIiVzXCIuXG4iCisiRGV0IGZpbm5zIGRvY2sgb2Fubm90ZXJhZGUgdGFnZ2FyOiB0ZXN0YSAtLXRhZ3MuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyJJbmdhIHRhZ2dhciBrYW4gYmVza3JpdmEgXCIlc1wiLlxuIgorIlRlc3RhIC0tYWx3YXlzLCBlbGxlciBza2FwYSBuw6VncmEgdGFnZ2FyLiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAidHJhdmVyc2VyYWRlICVsdSBpbmNoZWNrbmluZ2FyXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKyJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisibWVyIMOkbiAlaSB0YWdnYXIgaGl0dGFkZXM7IGxpc3RhciBkZSAlaSBzZW5hc3RlXG4iCisiZ2F2IHVwcCBzw7ZrbmluZ2VuIHZpZCAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk2Cittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAiaGl0dGEgdGFnZ2VuIHNvbSBrb21tZXIgZWZ0ZXIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NworbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgImZlbHPDtmsgc8O2a3N0cmF0ZWdpbiBww6Ugc3RhbmRhcmQgZmVsIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk4Cittc2dpZCAidXNlIGFueSByZWYiCittc2dzdHIgImFudsOkbmQgYWxsYSByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk5Cittc2dpZCAidXNlIGFueSB0YWcsIGV2ZW4gdW5hbm5vdGF0ZWQiCittc2dzdHIgImFudsOkbmQgYWxsYSB0YWdnYXIsIMOkdmVuIG9hbm5vdGVyYWRlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDAwCittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAiYW52w6RuZCBhbGx0aWQgbMOlbmd0IGZvcm1hdCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwMQorbXNnaWQgIm9ubHkgZm9sbG93IGZpcnN0IHBhcmVudCIKK21zZ3N0ciAiZsO2bGogZW5kYXN0IGbDtnJzdGEgZsO2csOkbGRlcm4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDQKK21zZ2lkICJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIgorbXNnc3RyICJza3JpdiBlbmRhc3QgdXQgZXhha3RhIHRyw6RmZmFyIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA2Cittc2dpZCAiY29uc2lkZXIgPG4+IG1vc3QgcmVjZW50IHRhZ3MgKGRlZmF1bHQ6IDEwKSIKK21zZ3N0ciAiw7Z2ZXJ2w6RnIGRlIDxuPiBueWFzdGUgdGFnZ2FybmEgKHN0YW5kYXJkOiAxMCkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDgKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICLDtnZlcnbDpGcgZW5kYXN0IHRhZ2dhciBzb20gbW90c3ZhcmFyIDxtw7Zuc3Rlcj4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTAgYnVpbHRpbi9uYW1lLXJldi5jOjMxOAorbXNnaWQgInNob3cgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjayIKK21zZ3N0ciAidmlzYSBmw7Zya29ydGFkZSBpbmNoZWNrbmluZ3NvYmpla3Qgc29tIHN0YW5kYXJkIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDExCittc2dpZCAibWFyayIKK21zZ3N0ciAibcOkcmtlIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDEyCittc2dpZCAiYXBwZW5kIDxtYXJrPiBvbiBkaXJ0eSB3b3JraW5nIHRyZWUgKGRlZmF1bHQ6IFwiLWRpcnR5XCIpIgorbXNnc3RyICJsw6RnZyB0aWxsIDxtw6Rya2U+IHDDpSBsb3J0aWd0IGFyYmV0c3Ryw6RkIChzdGFuZGFyZDogXCItZGlydHlcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzAKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiLS1sb25nIMOkciBpbmtvbXBhdGliZWwgbWVkIC0tYWJicmV2PTAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NTYKK21zZ2lkICJObyBuYW1lcyBmb3VuZCwgY2Fubm90IGRlc2NyaWJlIGFueXRoaW5nLiIKK21zZ3N0ciAiSW5nYSBuYW1uIGhpdHRhZGVzLCBrYW4gaW50ZSBiZXNrcml2YSBuw6Vnb3QuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDc2Cittc2dpZCAiLS1kaXJ0eSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21taXQtaXNoZXMiCittc2dzdHIgIi0tZGlydHkgw6RyIGlua29tcGF0aWJlbHQgbWVkIFwiY29tbWl0LWlzaFwiLXbDpHJkZW4iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICJcIiVzXCI6IGludGUgZW4gbm9ybWFsIGZpbCBlbGxlciBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgIm9naWx0aWcgZmxhZ2dhOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU4Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIkludGUgZXR0IGdpdC1hcmtpdiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDAxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgb2JqZWN0ICclcycgZ2l2ZW4uIgorbXNnc3RyICJvYmpla3RldCBcIiVzXCIgc29tIGFuZ2F2cyDDpHIgZmVsYWt0aWd0LiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIm1lciDDpG4gdHbDpSBibG9iYmFyIGFuZ2F2czogXCIlc1wiIgorCisjOiBidWlsdGluL2RpZmYuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAiZWogaGFudGVyYXQgb2JqZWt0IFwiJXNcIiBhbmdhdnMuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjUKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LWZsYWdnb3JdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgwCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAidmlzYSBmw7ZybG9wcCBlZnRlciA8bj4gb2JqZWt0IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgyCittc2dpZCAic2VsZWN0IGhhbmRsaW5nIG9mIHNpZ25lZCB0YWdzIgorbXNnc3RyICJ2w6RsaiBoYW50ZXJpbmcgYXYgc2lnbmVyYWRlIHRhZ2dhciIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4NQorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgInbDpGxqIGhhbnRlcmluZyBhdiB0YWdnYXIgc29tIGhhciB0YWdnZmlsdHJlcmFkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODgKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAiRHVtcCBtw6Rya2VuIHRpbGwgZmlsZW4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTAKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIkltcG9ydGVyYSBtw6Rya2VuIGZyw6VuIGZpbGVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTkyCittc2dpZCAiRmFrZSBhIHRhZ2dlciB3aGVuIHRhZ3MgbGFjayBvbmUiCittc2dzdHIgIkZlamthIHRhZ2dhcmUgbsOkciB0YWdnZW4gc2FrbmFyIGVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk0Cittc2dpZCAiT3V0cHV0IGZ1bGwgdHJlZSBmb3IgZWFjaCBjb21taXQiCittc2dzdHIgIlNrcml2IHV0IGhlbGEgdHLDpGRldCBmw7ZyIHZhcmplIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk2Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIkFudsOkbmQgZG9uZS1mdW5rdGlvbmVuIGbDtnIgYXR0IGF2c2x1dGEgc3Ryw7ZtbWVuIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk3Cittc2dpZCAiU2tpcCBvdXRwdXQgb2YgYmxvYiBkYXRhIgorbXNnc3RyICJIb3BwYSDDtnZlciBza3Jpdm5pbmcgYXYgYmxvYi1kYXRhIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk4Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAicmVmZXJlbnNzcGVjaWZpa2F0aW9uIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk5Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICJBcHBsaWNlcmEgcmVmZXJlbnNzcGVjaWZpa2F0aW9uIHDDpSBleHBvcnRlcmFkZSByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAwMAorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgImFub255bWlzZXJhIHV0ZGF0YSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIwCittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgZmV0Y2ggWzxmbGFnZ29yPl0gWzxhcmtpdj4gWzxyZWZzcGVjPi4uLl1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjEKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8ZmxhZ2dvcj5dIDxncnVwcD4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMgorbXNnaWQgImdpdCBmZXRjaCAtLW11bHRpcGxlIFs8b3B0aW9ucz5dIFsoPHJlcG9zaXRvcnk+IHwgPGdyb3VwPikuLi5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPGZsYWdnb3I+XSBbKDxhcmtpdj4gfCA8Z3J1cHA+KS4uLl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMworbXNnaWQgImdpdCBmZXRjaCAtLWFsbCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tYWxsIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTAgYnVpbHRpbi9wdWxsLmM6MTYyCittc2dpZCAiZmV0Y2ggZnJvbSBhbGwgcmVtb3RlcyIKK21zZ3N0ciAiaMOkbXRhIGZyw6VuIGFsbGEgZmrDpHJyYXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MiBidWlsdGluL3B1bGwuYzoxNjUKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgImzDpGdnIHRpbGwgaSAuZ2l0L0ZFVENIX0hFQUQgaXN0w6RsbGV0IGbDtnIgYXR0IHNrcml2YSDDtnZlciIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk0IGJ1aWx0aW4vcHVsbC5jOjE2OAorbXNnaWQgInBhdGggdG8gdXBsb2FkIHBhY2sgb24gcmVtb3RlIGVuZCIKK21zZ3N0ciAic8O2a3bDpGcgdGlsbCB1cGxvYWQgcGFjayBww6UgZmrDpHJyZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NSBidWlsdGluL3B1bGwuYzoxNzAKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgbG9jYWwgYnJhbmNoIgorbXNnc3RyICJ0dmluZ2Egw7Z2ZXJza3Jpdm5pbmcgYXYgbG9rYWwgZ3JlbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk3Cittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICJow6RtdGEgZnLDpW4gZmxlcmEgZmrDpHJyYXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5OSBidWlsdGluL3B1bGwuYzoxNzIKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJow6RtdGEgYWxsYSB0YWdnYXIgb2NoIGFzc29jaWVyYWRlIG9iamVrdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMQorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAiaMOkbXRhIGludGUgYWxsYSB0YWdnYXIgKC0tbm8tdGFncykiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDMgYnVpbHRpbi9wdWxsLmM6MTc1Cittc2dpZCAicHJ1bmUgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIG5vIGxvbmdlciBvbiByZW1vdGUiCittc2dzdHIgInJlbnNhIGZqw6RycnNww6VyYW5kZSBncmVuYXIgZWogbMOkbmdyZSBww6UgZmrDpHJyZW4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDQgYnVpbHRpbi9wdWxsLmM6MTc4Cittc2dpZCAib24tZGVtYW5kIgorbXNnc3RyICJvbi1kZW1hbmQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDUgYnVpbHRpbi9wdWxsLmM6MTc5Cittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgZmV0Y2hpbmcgb2Ygc3VibW9kdWxlcyIKK21zZ3N0ciAic3R5ciByZWt1cnNpdiBow6RtdG5pbmcgYXYgdW5kZXJtb2R1bGVyIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA5IGJ1aWx0aW4vcHVsbC5jOjE4NAorbXNnaWQgImtlZXAgZG93bmxvYWRlZCBwYWNrIgorbXNnc3RyICJiZWjDpWxsIGjDpG10YWRlIHBha2V0IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTExCittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgInRpbGzDpXQgdXBwZGF0ZXJpbmcgYXYgSEVBRC1yZWZlcmVucyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNCBidWlsdGluL3B1bGwuYzoxODcKK21zZ2lkICJkZWVwZW4gaGlzdG9yeSBvZiBzaGFsbG93IGNsb25lIgorbXNnc3RyICJmw7ZyZGp1cGEgaGlzdG9yaWsgZsO2ciBncnVuZCBrbG9uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2IGJ1aWx0aW4vcHVsbC5jOjE5MAorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICJrb252ZXJ0ZXJhIHRpbGwga29tcGxldHQgYXJraXYiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTggYnVpbHRpbi9sb2cuYzoxMjMzCittc2dpZCAiZGlyIgorbXNnc3RyICJrYXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTkKK21zZ2lkICJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IgorbXNnc3RyICJsw6RnZyB0aWxsIGkgYsO2cmphbiBhdiB1bmRlcm1vZHVsZW5zIHPDtmt2w6Rnc3V0ZGF0YSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyMgorbXNnaWQgImRlZmF1bHQgbW9kZSBmb3IgcmVjdXJzaW9uIgorbXNnc3RyICJzdGFuZGFyZGzDpGdlIGbDtnIgcmVrdXJzaW9uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI0IGJ1aWx0aW4vcHVsbC5jOjE5MworbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAidGFyIGVtb3QgcmVmZXJlbnNlciBzb20gdXBwZGF0ZXJhciAuZ2l0L3NoYWxsb3ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjUgYnVpbHRpbi9wdWxsLmM6MTk1Cittc2dpZCAicmVmbWFwIgorbXNnc3RyICJyZWZlcmVuc2thcnRhIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI2IGJ1aWx0aW4vcHVsbC5jOjE5NgorbXNnaWQgInNwZWNpZnkgZmV0Y2ggcmVmbWFwIgorbXNnc3RyICJhbmdlIHJlZmVyZW5za2FydGEgZsO2ciBcImZldGNoXCIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzozNzgKK21zZ2lkICJDb3VsZG4ndCBmaW5kIHJlbW90ZSByZWYgSEVBRCIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSBmasOkcnItcmVmZXJlbnNlbiBIRUFEIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBub3QgZm91bmQiCittc2dzdHIgIm9iamVrdGV0ICVzIGhpdHRhZGVzIGludGUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NjMKK21zZ2lkICJbdXAgdG8gZGF0ZV0iCittc2dzdHIgIlvDoGpvdXJdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiEgJS0qcyAlLSpzIC0+ICVzICAoY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2gpIgorbXNnc3RyICIhICUtKnMgJS0qcyAtPiAlcyAgKGthbiBpbnRlIGjDpG10YSBpIGFrdHVlbGwgZ3JlbikiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NzggYnVpbHRpbi9mZXRjaC5jOjU2NAorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltyZWZ1c2VyYWRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDg5Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJbdXBwZGF0ZXJhZCB0YWdnXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ5MSBidWlsdGluL2ZldGNoLmM6NTI2IGJ1aWx0aW4vZmV0Y2guYzo1NDQKK21zZ2lkICIgICh1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZikiCittc2dzdHIgIiAgKGt1bmRlIGludGUgdXBwZGF0ZXJhIGxva2FsIHJlZikiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MDkKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIltueSB0YWdnXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxMgorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW255IGdyZW5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTE1Cittc2dpZCAiW25ldyByZWZdIgorbXNnc3RyICJbbnkgcmVmXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjU2MAorbXNnaWQgInVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmIgorbXNnc3RyICJrdW5kZSBpbnRlIHVwcGRhdGVyYSBsb2thbCByZWYiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NjAKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICJ0dmluZ2FkIHVwcGRhdGVyaW5nIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTY2Cittc2dpZCAiKG5vbi1mYXN0LWZvcndhcmQpIgorbXNnc3RyICIoZWogc25hYmJzcG9sYWQpIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjAwIGJ1aWx0aW4vZmV0Y2guYzo4NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzXG4iCittc2dzdHIgImthbiBpbnRlIMO2cHBuYSAlczogJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIHPDpG5kZSBpbnRlIGFsbGEgbsO2ZHbDpG5kaWdhIG9iamVrdFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgImF2dmlzYSAlcyBkw6UgZ3J1bmRhIHLDtnR0ZXIgaW50ZSBrYW4gdXBwZGF0ZXJhcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcxNSBidWlsdGluL2ZldGNoLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICJGcsOlbiAlLipzXG4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInNvbWUgbG9jYWwgcmVmcyBjb3VsZCBub3QgYmUgdXBkYXRlZDsgdHJ5IHJ1bm5pbmdcbiIKKyIgJ2dpdCByZW1vdGUgcHJ1bmUgJXMnIHRvIHJlbW92ZSBhbnkgb2xkLCBjb25mbGljdGluZyBicmFuY2hlcyIKK21zZ3N0ciAiIgorInZpc3NhIGxva2FsYSByZWZlcmVuc2VyIGt1bmRlIGludGUgdXBwZGF0ZXJhczsgdGVzdGEgYXR0IGvDtnJhXG4iCisiIFwiZ2l0IHJlbW90ZSBwcnVuZSAlc1wiIGbDtnIgYXR0IHRhIGJvcnQgZ2FtbGEgZ3JlbmFyIHNvbSBzdMOlciBpIGtvbmZsaWt0IgorCisjOiBidWlsdGluL2ZldGNoLmM6Nzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICglcyB3aWxsIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgICglcyBrb21tZXIgYmxpIGRpbmdsYW5kZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgaGFyIGJsaXZpdCBkaW5nbGFuZGUpIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODExCittc2dpZCAiW2RlbGV0ZWRdIgorbXNnc3RyICJbYm9ydHRhZ2VuXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMiBidWlsdGluL3JlbW90ZS5jOjEwMzQKK21zZ2lkICIobm9uZSkiCittc2dzdHIgIihpbmdlbikiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJWw6RncmFyIGjDpG10YSB0aWxsIGFrdHVlbGwgZ3JlbiAlcyBpIGV0dCBpY2tlLW5ha2V0IGFya2l2IgorCisjOiBidWlsdGluL2ZldGNoLmM6ODUxCisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgdmFsdWUgXCIlc1wiIGlzIG5vdCB2YWxpZCBmb3IgJXMiCittc2dzdHIgIkZsYWdnYW4gXCIlc1wiIG9jaCB2w6RyZGV0IFwiJXNcIiDDpHIgaW50ZSBnaWx0aWd0IGbDtnIgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICJGbGFnZ2FuIFwiJXNcIiBpZ25vcmVyYXMgZsO2ciAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIkRvbid0IGtub3cgaG93IHRvIGZldGNoIGZyb20gJXMiCittc2dzdHIgIlZldCBpbnRlIGh1ciBtYW4gaMOkbXRhciBmcsOlbiAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmV0Y2hpbmcgJXNcbiIKK21zZ3N0ciAiSMOkbXRhciAlc1xuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA3MyBidWlsdGluL3JlbW90ZS5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmZXRjaCAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBow6RtdGEgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDkxCittc2dpZCAiIgorIk5vIHJlbW90ZSByZXBvc2l0b3J5IHNwZWNpZmllZC4gIFBsZWFzZSwgc3BlY2lmeSBlaXRoZXIgYSBVUkwgb3IgYVxuIgorInJlbW90ZSBuYW1lIGZyb20gd2hpY2ggbmV3IHJldmlzaW9ucyBzaG91bGQgYmUgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJJbmdldCBmasOkcnJhcmtpdiBhbmdhdnMuIEFuZ2UgYW50aW5nZW4gZW4gVVJMIGVsbGVyIG5hbW5ldCBww6UgZXR0XG4iCisiZmrDpHJyYXJraXYgc29tIG55YSBpbmNoZWNrbmluZ2FyIHNrYWxsIGjDpG10YXMgZnLDpW4uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTExNAorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIkR1IG3DpXN0ZSBhbmdlIG5hbW5ldCBww6UgZW4gdGFnZy4iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU2Cittc2dpZCAiLS1kZXB0aCBhbmQgLS11bnNoYWxsb3cgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIi0tZGVwdGggb2NoIC0tdW5zaGFsbG93IGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU4Cittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdW5zaGFsbG93IGthbiBpbnRlIGFudsOkbmRhcyBww6UgZXR0IGtvbXBsZXR0IGFya2l2IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4MQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJmZXRjaCAtLWFsbCB0YXIgaW50ZSBuYW1uZXQgcMOlIGV0dCBhcmtpdiBzb20gYXJndW1lbnQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgzCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJmZXRjaCAtLWFsbCBrYW4gaW50ZSBhbmdlcyBtZWQgcmVmZXJlbnNzcGVjaWZpa2F0aW9uZXIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlIG9yIHJlbW90ZSBncm91cDogJXMiCittc2dzdHIgIkZqw6RycmVuIGVsbGVyIGZqw6RycmdydXBwZW4gZmlubnMgaW50ZTogJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjAyCittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJLYW4gaW50ZSBow6RtdGEgZnLDpW4gZ3J1cHAgb2NoIGFuZ2UgcmVmZXJlbnNzcGVjaWZpa2F0aW9uZXIiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE0Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lZGRlbGFuZGU+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsPl0iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MAorbXNnaWQgInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIKK21zZ3N0ciAiZnlsbCBpIGxvZ2dlbiBtZWQgc29tIG1lc3QgPG4+IHBvc3RlciBmcsOlbiBzaG9ydGxvZyIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczCittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiYWxpYXMgZsO2ciAtLWxvZyAoYXZyw6VkcykiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NgorbXNnaWQgInRleHQiCittc2dzdHIgInRleHQiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3NworbXNnaWQgInVzZSA8dGV4dD4gYXMgc3RhcnQgb2YgbWVzc2FnZSIKK21zZ3N0ciAiaW5sZWQgbWVkZGVsYW5kZSBtZWQgPHRleHQ+IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzgKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAiZmlsIGF0dCBsw6RzYSBmcsOlbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzo5Cittc2dpZCAiZ2l0IGZvci1lYWNoLXJlZiBbPG9wdGlvbnM+XSBbPHBhdHRlcm4+XSIKK21zZ3N0ciAiZ2l0IGZvci1lYWNoLXJlZiBbPGZsYWdnb3I+XSBbPG3Dtm5zdGVyPl0iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjQKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHNoZWxscyIKK21zZ3N0ciAiY2l0ZXJhIHBsYXRzaMOlbGxhcmUgcGFzc2FuZGUgZsO2ciBza2FsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI2Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBwZXJsIgorbXNnc3RyICJjaXRlcmEgcGxhdHNow6VsbGFyZSBwYXNzYW5kZSBmw7ZyIHBlcmwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHB5dGhvbiIKK21zZ3N0ciAiY2l0ZXJhIHBsYXRzaMOlbGxhcmUgcGFzc2FuZGUgZsO2ciBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAiY2l0ZXJhIHBsYXRzaMOlbGxhcmUgcGFzc2FuZGUgZsO2ciBUY2wiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzMKK21zZ2lkICJzaG93IG9ubHkgPG4+IG1hdGNoZWQgcmVmcyIKK21zZ3N0ciAidmlzYSBlbmRhc3QgPG4+IHRyw6RmZmFkZSByZWZzIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0Cittc2dpZCAiZm9ybWF0IHRvIHVzZSBmb3IgdGhlIG91dHB1dCIKK21zZ3N0ciAiZm9ybWF0IGF0dCBhbnbDpG5kYSBmw7ZyIHV0ZGF0YSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNQorbXNnaWQgImtleSIKK21zZ3N0ciAibnlja2VsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM2Cittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICJmw6RsdG5hbW4gYXR0IHNvcnRlcmEgcMOlIgorCisjIFZhZ3VlIG9yaWdpbmFsLCBub3QgbmV0d29ya2luZy1yZWxhdGVkLCBidXQgcmF0aGVyIHJlbGF0ZWQgdG8gdGhlIGFjdHVhbAorIyBvYmplY3RzIGluIHRoZSBkYXRhYmFzZS4KKyM6IGJ1aWx0aW4vZnNjay5jOjE2MyBidWlsdGluL3BydW5lLmM6MTM3Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICJLb250cm9sbGVyYXIga29ubmVrdGl2aXRldCIKKworIzogYnVpbHRpbi9mc2NrLmM6NTY4Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yaWVzIgorbXNnc3RyICJLb250cm9sbGVyYXIgb2JqZWt0a2F0YWxvZ2VyIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzEKK21zZ2lkICJnaXQgZnNjayBbPG9wdGlvbnM+XSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgZnNjayBbPGZsYWdnb3I+XSBbPG9iamVrdD4uLi5dIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzcKK21zZ2lkICJzaG93IHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgInZpc2Egb27DpWJhcmEgb2JqZWt0IgorCisjOiBidWlsdGluL2ZzY2suYzo2MzgKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgInZpc2EgZGluZ2xhbmRlIG9iamVrdCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM5Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgInJhcHBvcnRlcmEgdGFnZ2FyIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDAKK21zZ2lkICJyZXBvcnQgcm9vdCBub2RlcyIKK21zZ3N0ciAicmFwcG9ydGVyYSByb3Rub2RlciIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQxCittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgImfDtnIgaW5kZXhvamVrdCB0aWxsIGh1dnVkbm9kZXIiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MgorbXNnaWQgIm1ha2UgcmVmbG9ncyBoZWFkIG5vZGVzIChkZWZhdWx0KSIKK21zZ3N0ciAiZ8O2ciByZWZsb2dnYXIgdGlsbCBodXZ1ZG5vZGVyIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MworbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICJ0YSDDpHZlbiBow6Ruc3luIHRpbGwgcGFrZXQgb2NoIGFsdGVybmF0aXZhIG9iamVrdCIKKworIyBWYWd1ZSBvcmlnaW5hbCwgbm90IG5ldHdvcmtpbmctcmVsYXRlZCwgYnV0IHJhdGhlciByZWxhdGVkIHRvIHRoZSBhY3R1YWwKKyMgb2JqZWN0cyBpbiB0aGUgZGF0YWJhc2UuCisjOiBidWlsdGluL2ZzY2suYzo2NDQKK21zZ2lkICJjaGVjayBvbmx5IGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAia29udHJvbGxlcmEgZW5kYXN0IGtvbm5la3Rpdml0ZXQiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NQorbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAiYWt0aXZlcmEgc3RyaWt0YXJlIGtvbnRyb2xsIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDcKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAic2tyaXYgZGluZ2xhbmRlIG9iamVrdCBpIC5naXQvbG9zdC1mb3VuZCIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQ4IGJ1aWx0aW4vcHJ1bmUuYzoxMDcKK21zZ2lkICJzaG93IHByb2dyZXNzIgorbXNnc3RyICJ2aXNhIGbDtnJsb3BwIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDcKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICJLb250cm9sbGVyYXIgb2JqZWt0IgorCisjOiBidWlsdGluL2djLmM6MjUKK21zZ2lkICJnaXQgZ2MgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBnYyBbPGZsYWdnb3I+XSIKKworIzogYnVpbHRpbi9nYy5jOjU1CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgJXM6ICclcyciCittc2dzdHIgIkZlbGFrdGlndCAlczogXCIlc1wiIgorCisjOiBidWlsdGluL2djLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgb2JqZWN0IGRpcmVjdG9yeSAlLipzIgorbXNnc3RyICJ0b2tpZ3QgbMOlbmcgb2JqZWt0a2F0YWxvZyAlLipzIgorCisjOiBidWlsdGluL2djLmM6MjY5Cittc2dpZCAicHJ1bmUgdW5yZWZlcmVuY2VkIG9iamVjdHMiCittc2dzdHIgInJlbnNhIGVqIHJlZmVyZXJhZGUgb2JqZWt0IgorCisjOiBidWlsdGluL2djLmM6MjcxCittc2dpZCAiYmUgbW9yZSB0aG9yb3VnaCAoaW5jcmVhc2VkIHJ1bnRpbWUpIgorbXNnc3RyICJ2YXIgbWVyIGdydW5kbGlnICjDtmthciBrw7ZydGlkZW4pIgorCisjOiBidWlsdGluL2djLmM6MjcyCittc2dpZCAiZW5hYmxlIGF1dG8tZ2MgbW9kZSIKK21zZ3N0ciAiYWt0aXZlcmEgYXV0by1nYy1sw6RnZSIKKworIzogYnVpbHRpbi9nYy5jOjI3MworbXNnaWQgImZvcmNlIHJ1bm5pbmcgZ2MgZXZlbiBpZiB0aGVyZSBtYXkgYmUgYW5vdGhlciBnYyBydW5uaW5nIgorbXNnc3RyICJ0dmluZ2EgZ2Mta8O2cm5pbmcgw6R2ZW4gb20gZW4gYW5uYW4gZ2Mga2Fuc2tlIGvDtnJzIgorCisjOiBidWlsdGluL2djLmM6MzE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBpbiBiYWNrZ3JvdW5kIGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICJQYWNrYXIgYXJraXZldCBhdXRvbWF0aXNrdCBpIGJha2dydW5kZW4gZsO2ciBvcHRpbWFsIHByZXN0YW5kYS5cbiIKKworIzogYnVpbHRpbi9nYy5jOjMxNworIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIlBhY2thciBhcmtpdmV0IGF1dG9tYXRpc2t0IGbDtnIgb3B0aW1hbCBwcmVzdGFuZGEuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2VlIFwiZ2l0IGhlbHAgZ2NcIiBmb3IgbWFudWFsIGhvdXNla2VlcGluZy5cbiIKK21zZ3N0ciAiU2UgXCJnaXQgaGVscCBnY1wiIGbDtnIgbWFudWVsbCBodXNow6VsbG5pbmcuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKyJnYyBrw7ZycyByZWRhbiBww6UgbWFza2luZW4gXCIlc1wiIHBpZCAlPFBSSXVNQVg+IChhbnbDpG5kIC0tZm9yY2Ugb20gc8OlIGludGUgIgorIsOkciBmYWxsZXQpIgorCisjOiBidWlsdGluL2djLmM6MzY0Cittc2dpZCAiIgorIlRoZXJlIGFyZSB0b28gbWFueSB1bnJlYWNoYWJsZSBsb29zZSBvYmplY3RzOyBydW4gJ2dpdCBwcnVuZScgdG8gcmVtb3ZlIHRoZW0uIgorbXNnc3RyICIiCisiRGV0IGZpbm5zIGbDtnIgbcOlbmdhIG9uw6ViYXJhIGzDtnNhIG9iamVrdDsga8O2ciBcImdpdCBwcnVuZVwiIGbDtnIgYXR0IHRhIGJvcnQgIgorImRlbS4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIzCittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZ3JlcCBbPGZsYWdnb3I+XSBbLWVdIDxtw7Zuc3Rlcj4gWzxyZXY+Li4uXSBbWy0tXSA8c8O2a3bDpGc+Li4uXSIKKworIzogYnVpbHRpbi9ncmVwLmM6MjE4CisjLCBjLWZvcm1hdAorbXNnaWQgImdyZXA6IGZhaWxlZCB0byBjcmVhdGUgdGhyZWFkOiAlcyIKK21zZ3N0ciAiZ3JlcDogbWlzc2x5Y2thZGVzIHNrYXBhIHRyw6VkLiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDQxIGJ1aWx0aW4vZ3JlcC5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgdHLDpGQgKCVzKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBncmVwIGZyb20gb2JqZWN0IG9mIHR5cGUgJXMiCittc2dzdHIgIkt1bmRlIGludGUgXCJncmVwXCIgZnLDpW4gb2JqZWt0IGF2IHR5cGVuICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiZmxhZ2dhbiBcIiVjXCIgYW50YXIgZXR0IG51bWVyaXNrdCB2w6RyZGUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSDDtnBwbmEgXCIlc1wiIgorCisjOiBidWlsdGluL2dyZXAuYzo2MzgKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICJzw7ZrIGkgaW5kZXhldCBpc3TDpGxsZXQgZsO2ciBpIGFyYmV0c2thdGFsb2dlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQwCittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgInPDtmsgaSBpbm5laMOlbGwgc29tIGludGUgaGFudGVyYXMgYXYgZ2l0IgorCisjOiBidWlsdGluL2dyZXAuYzo2NDIKK21zZ2lkICJzZWFyY2ggaW4gYm90aCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgInPDtmsgaSBiw6VkZSBzcMOlcmFkZSBvY2ggb3Nww6VyYWRlIGZpbGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo2NDQKK21zZ2lkICJpZ25vcmUgZmlsZXMgc3BlY2lmaWVkIHZpYSAnLmdpdGlnbm9yZSciCittc2dzdHIgImlnbm9yZXJhIGZpbGVyIGFuZ2l2bmEgaSBcIi5naXRpZ25vcmVcIiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQ3Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgInZpc2EgcmFkZXIgc29tIGludGUgdHLDpGZmYXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0OQorbXNnaWQgImNhc2UgaW5zZW5zaXRpdmUgbWF0Y2hpbmciCittc2dzdHIgInNraWZ0bMOkZ2Vzb2vDpG5zbGlnIHPDtmtuaW5nIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTEKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAibWF0Y2hhIGVuZGFzdCBtw7Zuc3RlciB2aWQgb3JkZ3LDpG5zZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgImhhbnRlcmEgYmluw6RyZmlsZXIgc29tIHRleHQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1NQorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAidHLDpGZmYSBpbnRlIG3Dtm5zdGVyIGkgYmluw6RyZmlsZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1OAorbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIHdpdGggdGV4dGNvbnYgZmlsdGVycyIKK21zZ3N0ciAiaGFudGVyYSBiaW7DpHJmaWxlciBtZWQgdGV4dGNvbnYtZmlsdGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo2NjAKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgImfDpSBzb20gbWVzdCBuZWQgPGRqdXA+IG5pdsOlZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY2NAorbXNnaWQgInVzZSBleHRlbmRlZCBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJhbnbDpG5kIHV0w7ZrYWRlIFBPU0lYLXJlZ3VsasOkcmEgdXR0cnljayIKKworIzogYnVpbHRpbi9ncmVwLmM6NjY3Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJhbnbDpG5kIGdydW5kbMOkZ2dhbmRlIFBPU0lYLXJlZ3VsasOkcmEgdXR0cnljayAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzAKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAidG9sa2EgbcO2bnN0ZXIgc29tIGZpeGVyYWRlIHN0csOkbmdhciIKKworIzogYnVpbHRpbi9ncmVwLmM6NjczCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJhbnbDpG5kIFBlcmxrb21wYXRpYmxhIHJlZ3VsasOkcmEgdXR0cnljayIKKworIzogYnVpbHRpbi9ncmVwLmM6Njc2Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgInZpc2EgcmFkbnVtbWVyIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzcKK21zZ2lkICJkb24ndCBzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAidmlzYSBpbnRlIGZpbG5hbW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY3OAorbXNnaWQgInNob3cgZmlsZW5hbWVzIgorbXNnc3RyICJ2aXNhIGZpbG5hbW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4MAorbXNnaWQgInNob3cgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRvcCBkaXJlY3RvcnkiCittc2dzdHIgInZpc2EgZmlsbmFtbiByZWxhdGl2YSB0aWxsIHRvcHBrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4MgorbXNnaWQgInNob3cgb25seSBmaWxlbmFtZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAidmlzYSBlbmRhc3QgZmlsbmFtbiBpc3TDpGxsZXQgZsO2ciB0csOkZmZhZGUgcmFkZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4NAorbXNnaWQgInN5bm9ueW0gZm9yIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorbXNnc3RyICJzeW5vbnltIGbDtnIgLS1maWxlcy13aXRoLW1hdGNoZXMiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4NworbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgbmFtbiBww6UgZmlsZXIgdXRhbiB0csOkZmZhciIKKworIzogYnVpbHRpbi9ncmVwLmM6Njg5Cittc2dpZCAicHJpbnQgTlVMIGFmdGVyIGZpbGVuYW1lcyIKK21zZ3N0ciAic2tyaXYgTlVMIGVmdGVyIGZpbG5hbW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5MQorbXNnaWQgInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgInZpc2EgYW50YWwgdHLDpGZmYXIgaXN0w6RsbGV0IGbDtnIgdHLDpGZmYWRlIHJhZGVyIgorCisjOiBidWlsdGluL2dyZXAuYzo2OTIKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAibGp1c21hcmtlcmEgdHLDpGZmYXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5NAorbXNnaWQgInByaW50IGVtcHR5IGxpbmUgYmV0d2VlbiBtYXRjaGVzIGZyb20gZGlmZmVyZW50IGZpbGVzIgorbXNnc3RyICJza3JpdiB0b21tYSByYWRlciBtZWxsYW4gdHLDpGZmYXIgZnLDpW4gb2xpa2EgZmlsZXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5NgorbXNnaWQgInNob3cgZmlsZW5hbWUgb25seSBvbmNlIGFib3ZlIG1hdGNoZXMgZnJvbSBzYW1lIGZpbGUiCittc2dzdHIgInZpc2EgZmlsbmFtbiBlbmRhc3QgZW4gZ8Olbmcgb3ZhbmbDtnIgdHLDpGZmYXIgZnLDpW4gc2FtbWEgZmlsIgorCisjOiBidWlsdGluL2dyZXAuYzo2OTkKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAidmlzYSA8bj4gcmFkZXIgc2FtbWFuaGFuZyBmw7ZyZSBvY2ggZWZ0ZXIgdHLDpGZmYXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwMgorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgInZpc2EgPG4+IHJhZGVyIHNhbW1hbmhhbmcgZsO2cmUgdHLDpGZmYXIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwNAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAidmlzYSA8bj4gcmFkZXIgc2FtbWFuaGFuZyBlZnRlciB0csOkZmZhciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzA1Cittc2dpZCAic2hvcnRjdXQgZm9yIC1DIE5VTSIKK21zZ3N0ciAiZ2VudsOkZyBmw7ZyIC1DIE5VTSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzA4Cittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAidmlzYSBlbiByYWQgbWVkIGZ1bmt0aW9uc25hbW5ldCBmw7ZyZSB0csOkZmZlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzEwCittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgInZpc2EgZGVuIG9ta3JpbmdsaWdnYW5kZSBmdW5rdGlvbmVuIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTMKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAibMOkcyBtw7Zuc3RlciBmcsOlbiBmaWwiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNQorbXNnaWQgIm1hdGNoIDxwYXR0ZXJuPiIKK21zZ3N0ciAidHLDpGZmYSA8bcO2bnN0ZXI+IgorCisjOiBidWlsdGluL2dyZXAuYzo3MTcKK21zZ2lkICJjb21iaW5lIHBhdHRlcm5zIHNwZWNpZmllZCB3aXRoIC1lIgorbXNnc3RyICJrb21iaW5lcmEgbcO2bnN0ZXIgc29tIGFuZ2VzIG1lZCAtZSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzI5Cittc2dpZCAiaW5kaWNhdGUgaGl0IHdpdGggZXhpdCBzdGF0dXMgd2l0aG91dCBvdXRwdXQiCittc2dzdHIgImFuZ2UgdHLDpGZmIG1lZCBzbHV0c3RhdHVza29kIHV0YW4gdXRkYXRhIgorCisjOiBidWlsdGluL2dyZXAuYzo3MzEKK21zZ2lkICJzaG93IG9ubHkgbWF0Y2hlcyBmcm9tIGZpbGVzIHRoYXQgbWF0Y2ggYWxsIHBhdHRlcm5zIgorbXNnc3RyICJ2aXNhIGVuZGFzdCB0csOkZmZhciBmcsOlbiBmaWxlciBzb20gdHLDpGZmYXIgYWxsYSBtw7Zuc3RlciIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMzCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgInZpc2EgYW5hbHlzdHLDpGQgZsO2ciBncmVwLXV0dHJ5Y2siCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczNworbXNnaWQgInBhZ2VyIgorbXNnc3RyICJibMOkZGRyYXJlIgorCisjOiBidWlsdGluL2dyZXAuYzo3MzcKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAidmlzYSB0csOkZmZhZGUgZmlsZXIgaSBmaWxibMOkZGRyYXJlbiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQwCittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICJ0aWxsw6V0IGFucm9wYSBncmVwKDEpIChpZ25vcmVyYXMgYXYgZGV0dGEgYnlnZ2UpIgorCisjOiBidWlsdGluL2dyZXAuYzo3NDEgYnVpbHRpbi9zaG93LXJlZi5jOjE4OQorbXNnaWQgInNob3cgdXNhZ2UiCittc2dzdHIgInZpc2EgYW52w6RuZG5pbmciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwOAorbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4uIgorbXNnc3RyICJpbmdldCBtw7Zuc3RlciBhbmdhdnMuIgorCisjOiBidWlsdGluL2dyZXAuYzo4NjYKK21zZ2lkICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgb25seSB3b3JrcyBvbiB0aGUgd29ya3RyZWUiCittc2dzdHIgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBmdW5nZXJhciBlbmRhc3QgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg5MgorbXNnaWQgIi0tY2FjaGVkIG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1uby1pbmRleC4iCittc2dzdHIgIi0tY2FjaGVkIG9jaCAtLXVudHJhY2tlZCBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC0tbm8taW5kZXguIgorCisjOiBidWlsdGluL2dyZXAuYzo4OTcKK21zZ2lkICItLW5vLWluZGV4IG9yIC0tdW50cmFja2VkIGNhbm5vdCBiZSB1c2VkIHdpdGggcmV2cy4iCittc2dzdHIgIi0tbm8taW5kZXggb2NoIC0tdW50cmFja2VkIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgcmV2aXNpb25lci4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMAorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzLiIKK21zZ3N0ciAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQga2FuIGludGUgYW52w6RuZGFzIGbDtnIgc3DDpXJhdCBpbm5laMOlbGwuIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDgKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICJiw6VkZSAtLWNhY2hlZCBvY2ggdHLDpGQgYW5nYXZzLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjgwCittc2dpZCAiIgorImdpdCBoYXNoLW9iamVjdCBbLXQgPHR5cGU+XSBbLXddIFstLXBhdGg9PGZpbGU+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gIgorIlstLV0gPGZpbGU+Li4uIgorbXNnc3RyICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwPl0gWy13XSBbLS1wYXRoPTxmaWw+IHwgLS1uby1maWx0ZXJzXSBbLS1zdGRpbl0gWy0tXSAiCisiPGZpbD4uLi4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo4MQorbXNnaWQgImdpdCBoYXNoLW9iamVjdCAgLS1zdGRpbi1wYXRocyA8IDxsaXN0LW9mLXBhdGhzPiIKK21zZ3N0ciAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIDwgPHPDtmt2w6Rnc2xpc3RhPiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjkyIGJ1aWx0aW4vdGFnLmM6NjE0Cittc2dpZCAidHlwZSIKK21zZ3N0ciAidHlwIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTIKK21zZ2lkICJvYmplY3QgdHlwZSIKK21zZ3N0ciAib2JqZWt0dHlwIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTMKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAic2tyaXYgb2JqZWt0ZXQgdGlsbCBvYmpla3RkYXRhYmFzZW4iCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NQorbXNnaWQgInJlYWQgdGhlIG9iamVjdCBmcm9tIHN0ZGluIgorbXNnc3RyICJsw6RzIG9iamVrdGV0IGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTcKK21zZ2lkICJzdG9yZSBmaWxlIGFzIGlzIHdpdGhvdXQgZmlsdGVycyIKK21zZ3N0ciAic3BhcmEgZmlsZW4gc29tIGRlbiDDpHIgdXRhbiBmaWxlciIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk4Cittc2dpZCAiIgorImp1c3QgaGFzaCBhbnkgcmFuZG9tIGdhcmJhZ2UgdG8gY3JlYXRlIGNvcnJ1cHQgb2JqZWN0cyBmb3IgZGVidWdnaW5nIEdpdCIKK21zZ3N0ciAiIgorImhhc2hhIHNsdW1wbcOkc3NpZ3Qgc2tyw6RwIGbDtnIgYXR0IHNrYXBhIGtvcnJ1cHRhIG9iamVrdCBmw7ZyIGZlbHPDtmtuaW5nIGF2IEdpdCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgImhhbnRlcmEgZmlsZW4gc29tIG9tIGRlbiBrb20gZnLDpW4gc8O2a3bDpGdlbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDEKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICJ2aXNhIGFsbGEgdGlsbGfDpG5nbGlnYSBrb21tYW5kb24iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQyCittc2dpZCAicHJpbnQgbGlzdCBvZiB1c2VmdWwgZ3VpZGVzIgorbXNnc3RyICJsaXN0YSBhbnbDpG5kYmFyYSB2w6RnbGVkbmluZ2FyIgorCisjOiBidWlsdGluL2hlbHAuYzo0MworbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgInZpc2EgbWFudWFsc2lkYSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAidmlzYSBtYW51YWwgaSB3ZWJibMOkc2FyZSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDYKK21zZ2lkICJzaG93IGluZm8gcGFnZSIKK21zZ3N0ciAidmlzYSBpbmZvLXNpZGEiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUyCittc2dpZCAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1ndWlkZXNdIFstLW1hbiB8IC0td2ViIHwgLS1pbmZvXSBbPGNvbW1hbmQ+XSIKK21zZ3N0ciAiZ2l0IGhlbHAgWy0tYWxsXSBbLS1ndWlkZXNdIFstLW1hbiB8IC0td2ViIHwgLS1pbmZvXSBbPGtvbW1hbmRvPl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICJva8OkbnQgaGrDpGxwZm9ybWF0OiAlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6OTEKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICJNaXNzbHlja2FkZXMgc3RhcnRhIGVtYWNzY2xpZW50LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTA0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIGVtYWNzY2xpZW50IHZlcnNpb24uIgorbXNnc3RyICJLdW5kZSBpbnRlIHRvbGthIGVtYWNzY2xpZW50LXZlcnNpb24uIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAiZW1hY3NjbGllbnQgdmVyc2lvbiBcIiVkXCIgZsO2ciBnYW1tYWwgKDwgMjIpLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTMwIGJ1aWx0aW4vaGVscC5jOjE1OCBidWlsdGluL2hlbHAuYzoxNjcgYnVpbHRpbi9oZWxwLmM6MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBleGVjICclcyc6ICVzIgorbXNnc3RyICJleGVjIG1pc3NseWNrYWRlcyBmw7ZyIFwiJXNcIjogJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJzogcGF0aCBmb3IgdW5zdXBwb3J0ZWQgbWFuIHZpZXdlci5cbiIKKyJQbGVhc2UgY29uc2lkZXIgdXNpbmcgJ21hbi48dG9vbD4uY21kJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIlwiJXNcIjogc8O2a3bDpGcgZsO2ciBtYW4tdmlzYXJlIHNvbSBlaiBzdMO2ZHMuXG4iCisiQW52w6RuZCBcIm1hbi48dmVya3R5Zz4uY21kXCIgaXN0w6RsbGV0LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIlwiJXNcIjoga29tbWFuZG8gZsO2ciBtYW4tdmlzYXJlIHNvbSBzdMO2ZHMuXG4iCisiQW52w6RuZCBcIm1hbi48dmVya3R5Zz4ucGF0aFwiIGlzdMOkbGxldC4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICJcIiVzXCI6IG9rw6RuZCBtYW4tdmlzYXJlLiIKKworIzogYnVpbHRpbi9oZWxwLmM6MzcxCittc2dpZCAibm8gbWFuIHZpZXdlciBoYW5kbGVkIHRoZSByZXF1ZXN0IgorbXNnc3RyICJpbmdlbiBtYW4tdmlzYXJlIGhhbnRlcmFkZSBmw7ZyZnLDpWdhbiIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzc5Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAiaW5nZW4gaW5mby12aXNhcmUgaGFudGVyYWRlIGbDtnJmcsOlZ2FuIgorCisjOiBidWlsdGluL2hlbHAuYzo0MjgKK21zZ2lkICJEZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoIgorbXNnc3RyICJEZWZpbmllcmFyIGF0dHJpYnV0IHBlciBzw7ZrdsOkZyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDI5Cittc2dpZCAiRXZlcnlkYXkgR2l0IFdpdGggMjAgQ29tbWFuZHMgT3IgU28iCittc2dzdHIgIkdpdCBmw7ZyIGRhZ2xpZ3QgYnJ1ayBpIHVuZ2Vmw6RyIDIwIGtvbW1hbmRvbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMwCittc2dpZCAiQSBHaXQgZ2xvc3NhcnkiCittc2dzdHIgIkVuIEdpdC1vcmRsaXN0YSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMxCittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAiQW5nZSBhdnNpa3RsaWdlbiBvc3DDpXJhZGUgZmlsZXIgYXR0IGlnbm9yZXJhIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzIKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAiQW5nZSBlZ2Vuc2thcGVyIGbDtnIgdW5kZXJtb2R1bGVyIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzMKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIkFuZ2UgdmVyc2lvbmVyIG9jaCBpbnRlcnZhbGwgaSBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNAorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCAoZm9yIHZlcnNpb24gMS41LjEgb3IgbmV3ZXIpIgorbXNnc3RyICJJbnRyb2R1a3Rpb24gdGlsbCBHaXQgKGbDtnIgdmVyc2lvbiAxLjUuMSBvY2ggc2VuYXJlKSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDM1Cittc2dpZCAiQW4gb3ZlcnZpZXcgb2YgcmVjb21tZW5kZWQgd29ya2Zsb3dzIHdpdGggR2l0IgorbXNnc3RyICLDlnZlcnNpa3Qgw7Z2ZXIgcmVrb21tZW5kZXJhZGUgYXJiZXRzZmzDtmRlbiBtZWQgR2l0IgorCisjOiBidWlsdGluL2hlbHAuYzo0NDcKK21zZ2lkICJUaGUgY29tbW9uIEdpdCBndWlkZXMgYXJlOlxuIgorbXNnc3RyICJEZSB2YW5saWdhIEdpdC12w6RnbGVkbmluZ2FybmEgw6RyOlxuIgorCisjOiBidWlsdGluL2hlbHAuYzo0NjggYnVpbHRpbi9oZWxwLmM6NDg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlOiAlcyVzIgorbXNnc3RyICJhbnbDpG5kbmluZzogJXMlcyIKKworIzogYnVpbHRpbi9oZWxwLmM6NTAxCisjLCBjLWZvcm1hdAorbXNnaWQgImBnaXQgJXMnIGlzIGFsaWFzZWQgdG8gYCVzJyIKK21zZ3N0ciAiXCJnaXQgJXNcIiDDpHIgZXR0IGFsaWFzIGbDtnIgXCIlc1wiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG9wZW4gJXMiCittc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0IHR5cGUgbWlzbWF0Y2ggYXQgJXMiCittc2dzdHIgIm9iamVrdHR5cCBzdMOkbW1lciBpbnRlIMO2dmVyZW5zIHZpZCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImRpZCBub3QgcmVjZWl2ZSBleHBlY3RlZCBvYmplY3QgJXMiCittc2dzdHIgImVtb3R0b2cgaW50ZSBkZXQgZsO2cnbDpG50YWRlIG9iamVrdGV0ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzOiBleHBlY3RlZCB0eXBlICVzLCBmb3VuZCAlcyIKK21zZ3N0ciAib2JqZWt0ZXQgJXM6IGbDtnJ2w6RudGFkIHR5cCAlcywgc8OlZyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjY3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBmaWxsICVkIGJ5dGUiCittc2dpZF9wbHVyYWwgImNhbm5vdCBmaWxsICVkIGJ5dGVzIgorbXNnc3RyWzBdICJrYW4gaW50ZSBmeWxsYSAlZCBieXRlIgorbXNnc3RyWzFdICJrYW4gaW50ZSBmeWxsYSAlZCBieXRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNzcKK21zZ2lkICJlYXJseSBFT0YiCittc2dzdHIgInRpZGlndCBmaWxzbHV0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNzgKK21zZ2lkICJyZWFkIGVycm9yIG9uIGlucHV0IgorbXNnc3RyICJpbmRhdGFsw6RzZmVsIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTAKK21zZ2lkICJ1c2VkIG1vcmUgYnl0ZXMgdGhhbiB3ZXJlIGF2YWlsYWJsZSIKK21zZ3N0ciAiYW52w6RuZGUgZmxlciBieXRlIMOkbiB0aWxsZ8OkbmdsaWd0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTcKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICJwYWtldCBmw7ZyIHN0b3J0IGbDtnIgbnV2YXJhbmRlIGRlZmluaXRpb24gYXYgb2ZmX3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgImt1bmRlIGludGUgc2thcGEgXCIlc1wiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgw7ZwcG5hIHBha2V0ZmlsZW4gXCIlc1wiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMzIKK21zZ2lkICJwYWNrIHNpZ25hdHVyZSBtaXNtYXRjaCIKK21zZ3N0ciAicGFrZXRzaWduYXR1ciBzdMOkbW1lciBpbnRlIMO2dmVyZW5zIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayB2ZXJzaW9uICU8UFJJdTMyPiB1bnN1cHBvcnRlZCIKK21zZ3N0ciAicGFrZXR2ZXJzaW9uICU8UFJJdTMyPiBzdMO2ZHMgZWoiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjM1MgorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIGhhcyBiYWQgb2JqZWN0IGF0IG9mZnNldCAlbHU6ICVzIgorbXNnc3RyICJwYWtldGV0IGhhciBmZWxha3RpZ3Qgb2JqZWt0IHZpZCBpbmRleCAlbHU6ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAiaW5mbGF0ZSByZXR1cm5lcmFkZSAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIyCittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAiaW5kZXh2w6RyZGVzcGlsbCBmw7ZyIGRlbHRhYmFzb2JqZWt0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzAKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgImRlbHRhYmFzaW5kZXggdXRhbmbDtnIgZ3LDpG5zZW4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICJva8OkbmQgb2JqZWt0dHlwICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NjkKK21zZ2lkICJjYW5ub3QgcHJlYWQgcGFjayBmaWxlIgorbXNnc3RyICJrYW4gaW50ZSB1dGbDtnJhIFwicHJlYWRcIiBww6UgcGFrZXRmaWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJmw7ZyIHRpZGlndCBzbHV0IHDDpSBwYWtldGZpbGVuLCAlbHUgYnl0ZSBzYWtuYXMiCittc2dzdHJbMV0gImbDtnIgdGlkaWd0IHNsdXQgcMOlIHBha2V0ZmlsZW4sICVsdSBieXRlIHNha25hcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTk3Cittc2dpZCAic2VyaW91cyBpbmZsYXRlIGluY29uc2lzdGVuY3kiCittc2dzdHIgImFsbHZhcmxpZyBpbmZsYXRlLWlua29uc2VrdmVucyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0OSBidWlsdGluL2luZGV4LXBhY2suYzo3NzIKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwNiBidWlsdGluL2luZGV4LXBhY2suYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICJTSEExLUtPTExJU0lPTiBVUFBUw4RDS1QgVklEICVzICEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0NiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE2MgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBleGlzdGluZyBvYmplY3QgJXMiCittc2dzdHIgImthbiBpbnRlIGzDpHNhIGJlZmludGxpZ3Qgb2JqZWt0ICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAib2dpbHRpZ3QgYmxvYi1vYmpla3QgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICJvZ2lsdGlndCAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQzCittc2dpZCAiRXJyb3IgaW4gb2JqZWN0IgorbXNnc3RyICJGZWwgaSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiSW50ZSBhbGxhIGJhcm5vYmpla3QgZsO2ciAlcyBrYW4gbsOlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6OTE3IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjk0OAorbXNnaWQgImZhaWxlZCB0byBhcHBseSBkZWx0YSIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRpbGzDpG1wYSBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICJUYXIgZW1vdCBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICJTa2FwYXIgaW5kZXggZsO2ciBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTAKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgInBha2V0ZXQgw6RyIHRyYXNpZ3QgKFNIQTEgc3TDpG1tZXIgaW50ZSkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTUKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgImthbiBpbnRlIHV0ZsO2cmEgXCJmc3RhdFwiIHDDpSBwYWtldGZpbCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1OAorbXNnaWQgInBhY2sgaGFzIGp1bmsgYXQgdGhlIGVuZCIKK21zZ3N0ciAicGFrZXQgaGFyIHNrcsOkcCBpIHNsdXRldCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2OQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgImbDtnJ2aXJyYWQgYm9ydG9tIHZhbnZldHQgaSBwYXJzZV9wYWNrX29iamVjdHMoKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5NAorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIkFuYWx5c2VyYXIgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIHRyw6VkOiAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI0NworbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgImbDtnJ2aXJyYWQgYm9ydG9tIHZhbnZldHQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0ciAic2x1dGbDtnJkZXMgbWVkICVkIGxva2FsYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5leHBlY3RlZCB0YWlsIGNoZWNrc3VtIGZvciAlcyAoZGlzayBjb3JydXB0aW9uPykiCittc2dzdHIgIk92w6RudGFkIHN2YW5zY2hlY2tzdW1tYSBmw7ZyICVzICh0cmFzaWcgZGlzaz8pIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICJwYWtldGV0IGhhciAlZCBvYW5hbHlzZXJhdCBkZWx0YSIKK21zZ3N0clsxXSAicGFrZXRldCBoYXIgJWQgb2FuYWx5c2VyYWRlIGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICJrdW5kZSBpbnRlIHV0ZsO2cmEgXCJkZWZsYXRlXCIgcMOlIHRpbGxhZ3Qgb2JqZWt0ICglZCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAibG9jYWwgb2JqZWN0ICVzIGlzIGNvcnJ1cHQiCittc2dzdHIgImxva2FsdCBvYmpla3QgJXMgw6RyIHRyYXNpZ3QiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEzOTEKK21zZ2lkICJlcnJvciB3aGlsZSBjbG9zaW5nIHBhY2sgZmlsZSIKK21zZ3N0ciAiZmVsIHZpZCBzdMOkbmduaW5nIGF2IHBha2V0ZmlsIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAia2FuIGludGUgdGEgc2tyaXZhIFwia2VlcFwiLWZpbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4ga2VlcCBmaWxlICclcyciCittc2dzdHIgImFrbiBpbnRlIHN0w6RuZ2Egc2tyaXZlbiBcImtlZXBcIi1maWwgXCIlc1wiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDI1Cittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAia2FuIGludGUgc3BhcmEgcGFrZXRmaWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzYKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAia2FuIGludGUgc3BhcmEgaW5kZXhmaWwiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHBhY2suaW5kZXh2ZXJzaW9uPSU8UFJJdTMyPiIKK21zZ3N0ciAiZmVsYWt0aWcgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgImZlbGFrdGlndCBhbnRhbCB0csOlZGFyIGFuZ2l2ZXQgKCVkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ3OSBidWlsdGluL2luZGV4LXBhY2suYzoxNjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHRocmVhZHMgc3VwcG9ydCwgaWdub3JpbmcgJXMiCittc2dzdHIgInRyw6Vkc3TDtmQgc2FrbmFzLCBpZ25vcmVyYXIgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIkthbiBpbnRlIMO2cHBuYSBiZWZpbnRsaWcgcGFrZXRmaWwgXCIlc1wiIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIkthbiBpbnRlIMO2cHBuYSBiZWZpbnRsaWcgcGFrZXQtaWR4LWZpbCBmw7ZyIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU4NgorIywgYy1mb3JtYXQKK21zZ2lkICJub24gZGVsdGE6ICVkIG9iamVjdCIKK21zZ2lkX3BsdXJhbCAibm9uIGRlbHRhOiAlZCBvYmplY3RzIgorbXNnc3RyWzBdICJpY2tlLWRlbHRhOiAlZCBvYmpla3QiCittc2dzdHJbMV0gImlja2UtZGVsdGE6ICVkIG9iamVrdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTU5MworIywgYy1mb3JtYXQKK21zZ2lkICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdCIKK21zZ2lkX3BsdXJhbCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3RzIgorbXNnc3RyWzBdICJrZWRqZWzDpG5nZCA9ICVkOiAlbHUgb2JqZWt0IgorbXNnc3RyWzFdICJrZWRqZWzDpG5nZCA9ICVkOiAlbHUgb2JqZWt0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjIzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIkthbiBpbnRlIGfDpSB0aWxsYmFrYSB0aWxsIGFyYmV0c2thdGFsb2dlbiAoY3dkKSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY3NSBidWlsdGluL2luZGV4LXBhY2suYzoxNjc4CisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjkwIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICJmZWxha3RpZyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcwOAorbXNnaWQgIi0tZml4LXRoaW4gY2Fubm90IGJlIHVzZWQgd2l0aG91dCAtLXN0ZGluIgorbXNnc3RyICItLWZpeC10aGluIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcxMiBidWlsdGluL2luZGV4LXBhY2suYzoxNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICJwYWtldGZpbG5hbW5ldCBcIiVzXCIgc2x1dGFyIGludGUgbWVkIFwiLnBhY2tcIiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyOQorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiLS12ZXJpZnkgYW5nYXZzIHV0YW4gcGFrZXRmaWxuYW1uIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiS3VuZGUgaW50ZSBnw7ZyYSAlcyBza3JpdmJhciBmw7ZyIGdydXBwZW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgbmFtZSAlcyIKK21zZ3N0ciAidG9raWd0IGzDpW5ndCBuYW1uIHDDpSBtYWxsZW4gJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjY4CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzdGF0ICclcyciCittc2dzdHIgImthbiBpbnRlIHRhIHN0YXR1cyBww6UgXCIlc1wiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSB0YSBzdGF0dXMgcMOlIG1hbGxlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgImthbiBpbnRlIMO2cHBuYSBrYXRhbG9nZW4gKG9wZW5kaXIpIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgImthbiBpbnRlIGzDpHNhIGzDpG5rIChyZWFkbGluaykgXCIlc1wiIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBzeW1saW5rICVzIgorbXNnc3RyICJ0b2tpZ3QgbMOlbmcgc3ltYm9saXNrIGzDpG5rICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN5bWxpbmsgJyVzJyAnJXMnIgorbXNnc3RyICJrYW4gaW50ZSBza2FwYSBzeW1ib2xpc2sgbMOkbmsgXCIlc1wiIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAia2FuIGludGUga29waWVyYSBcIiVzXCIgdGlsbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJpZ25vcmluZyB0ZW1wbGF0ZSAlcyIKK21zZ3N0ciAiaWdub3JlcmFyIG1hbGxlbiAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgdGVtcGxhdGUgcGF0aCAlcyIKK21zZ3N0ciAidG9raWd0IGzDpW5nIG1hbGxzw7ZrdsOkZyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgJXMiCittc2dzdHIgIm1hbGxhcm5hIGhpdHRhZGVzIGludGUgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgY29weWluZyB0ZW1wbGF0ZXMgb2YgYSB3cm9uZyBmb3JtYXQgdmVyc2lvbiAlZCBmcm9tICclcyciCittc2dzdHIgImtvcGllcmFkZSBpbnRlIG1hbGxhciBmcsOlbiBmZWxha3RpZyBmb3JtYXR2ZXJzaW9uICVkIGZyw6VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBnaXQgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJ0b2tpZyBnaXQta2F0YWxvZyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MzQ0IGJ1aWx0aW4vaW5pdC1kYi5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJXMgZmlubnMgcmVkYW4iCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gaGFuZGxlIGZpbGUgdHlwZSAlZCIKK21zZ3N0ciAia2FuIGludGUgaGFudGVyYSBmaWx0eXAgJWQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbW92ZSAlcyB0byAlcyIKK21zZ3N0ciAia2FuIGludGUgZmx5dHRhICVzIHRpbGwgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJyVzJyBpcyBlaXRoZXIgIlJlaW5pdGlhbGl6ZWQKKyMuIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gIiIsIGFuZCB0aGUgbGFzdCAnJXMlcycgaXMgdGhlIHZlcmJhdGltIGRpcmVjdG9yeSBuYW1lLgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzIEdpdC1hcmtpdiBpICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDM1Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyIKK21zZ3N0ciAiT21pbml0aWVyYWRlIGJlZmludGxpZ3QiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNQorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICJJbml0aWVyYWRlIHRvbXQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNgorbXNnaWQgIiBzaGFyZWQiCittc2dzdHIgIiBkZWxhdCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDgzCittc2dpZCAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTx0ZW1wbGF0ZS1kaXJlY3Rvcnk+XSBbLS0iCisic2hhcmVkWz08cGVybWlzc2lvbnM+XV0gWzxkaXJlY3Rvcnk+XSIKK21zZ3N0ciAiIgorImdpdCBpbml0IFstcSB8IC0tcXVpZXRdIFstLWJhcmVdIFstLXRlbXBsYXRlPTxtYWxsa2F0YWxvZz5dIFstLSIKKyJzaGFyZWRbPTxiZWjDtnJpZ2hldGVyPl1dIFs8a2F0YWxvZz5dIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MDYKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAiYmVow7ZyaWdoZXRlciIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTA3Cittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICJhbmdlIGF0dCBnaXQtYXJraXZldCBza2FsbCBkZWxhcyBibGFuZCBmbGVyYSBhbnbDpG5kYXJlIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NDEgYnVpbHRpbi9pbml0LWRiLmM6NTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAia2FuIGludGUgc2thcGEga2F0YWxvZ2VuIChta2RpcikgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgImthbiBpbnRlIGJ5dGEga2F0YWxvZyAoY2hkaXIpIHRpbGwgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisiJXMgKGVsbGVyIC0td29yay10cmVlPTxrYXRhbG9nPikgaW50ZSB0aWxsw6V0ZXQgdXRhbiBhdHQgYW5nZSAlcyAoZWxsZXIgLS1naXQtIgorImRpcj08a2F0YWxvZz4pIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1OTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGFjY2VzcyB3b3JrIHRyZWUgJyVzJyIKK21zZ3N0ciAiS2FuIGludGUga29tbWEgw6V0IGFyYmV0c2thdGFsb2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MTUKK21zZ2lkICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciA8dG9rZW4+Wyg9fDopPHZhbHVlPl0pLi4uXSAiCisiWzxmaWxlPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyICIKKyI8c3ltYm9sPlsoPXw6KTx2w6RyZGU+XSkuLi5dIFs8ZmlsPi4uLl0iCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MjUKK21zZ2lkICJ0cmltIGVtcHR5IHRyYWlsZXJzIgorbXNnc3RyICJ0YSBib3J0IHRvbW1hIHNsw6RwcmFkZXIiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MjYKK21zZ2lkICJ0cmFpbGVyIgorbXNnc3RyICJzbMOkcHJhZCIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoyNworbXNnaWQgInRyYWlsZXIocykgdG8gYWRkIgorbXNnc3RyICJzbMOkcHJhZChlcikgYXR0IGzDpGdnYSB0aWxsIgorCisjOiBidWlsdGluL2xvZy5jOjQzCittc2dpZCAiZ2l0IGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxvZyBbPGZsYWdnb3I+XSBbPHZlcnNpb25zaW50ZXJ2YWxsPl0gW1stLV0gPHPDtmt2w6RnPi4uLl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDQKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxmbGFnZ29yPl0gPG9iamVrdD4uLi4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiCittc2dzdHIgIm9naWx0aWcgZmxhZ2dhIGbDtnIgLS1kZWNvcmF0ZTogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxCittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgInVuZGVydHJ5Y2sgZGlmZi11dGRhdGEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMyCittc2dpZCAic2hvdyBzb3VyY2UiCittc2dzdHIgInZpc2Ega8OkbGxrb2QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzCittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgIkFudsOkbmQgZS1wb3N0bWFwcG5pbmdzZmlsIgorCisjOiBidWlsdGluL2xvZy5jOjEzNAorbXNnaWQgImRlY29yYXRlIG9wdGlvbnMiCittc2dzdHIgImRla29yZXJpbmdzZmxhZ2dvciIKKworIzogYnVpbHRpbi9sb2cuYzoxMzcKK21zZ2lkICJQcm9jZXNzIGxpbmUgcmFuZ2UgbixtIGluIGZpbGUsIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiQmVoYW5kbGEgcmFkaW50ZXJ2YWxsZXQgbixtIGkgZmlsZW4sIG1lZCBiw7ZyamFuIHDDpSAxIgorCisjOiBidWlsdGluL2xvZy5jOjIzMworIywgYy1mb3JtYXQKK21zZ2lkICJGaW5hbCBvdXRwdXQ6ICVkICVzXG4iCittc2dzdHIgIlNsdXR1dGRhdGE6ICVkICVzXG4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDY1CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBzaG93ICVzOiBiYWQgZmlsZSIKK21zZ3N0ciAiZ2l0IHNob3cgJXM6IGZlbGFrdGlnIGZpbCIKKworIzogYnVpbHRpbi9sb2cuYzo0NzkgYnVpbHRpbi9sb2cuYzo1NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgb2JqZWN0ICVzIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIG9iamVrdGV0ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHR5cGU6ICVkIgorbXNnc3RyICJPa8OkbmQgdHlwOiAlZCIKKworIzogYnVpbHRpbi9sb2cuYzo3MTQKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyB1dGFuIHbDpHJkZSIKKworIzogYnVpbHRpbi9sb2cuYzo3OTgKK21zZ2lkICJuYW1lIG9mIG91dHB1dCBkaXJlY3RvcnkgaXMgdG9vIGxvbmciCittc2dzdHIgIm5hbW5ldCBww6UgdXRkYXRha2F0YWxvZ2VuIMOkciBmw7ZyIGzDpW5ndCIKKworIzogYnVpbHRpbi9sb2cuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiS2FuIGludGUgw7ZwcG5hIHBhdGNoZmlsZW4gJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODI4Cittc2dpZCAiTmVlZCBleGFjdGx5IG9uZSByYW5nZS4iCittc2dzdHIgIkJlaMO2dmVyIHByZWNpcyBldHQgaW50ZXJ2YWxsLiIKKworIzogYnVpbHRpbi9sb2cuYzo4MzgKK21zZ2lkICJOb3QgYSByYW5nZS4iCittc2dzdHIgIkludGUgZXR0IGludGVydmFsbC4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6OTQ0Cittc2dpZCAiQ292ZXIgbGV0dGVyIG5lZWRzIGVtYWlsIGZvcm1hdCIKK21zZ3N0ciAiT21zbGFnc2JyZXZldCBiZWjDtnZlciBlLXBvc3Rmb3JtYXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTAyMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgaW4tcmVwbHktdG86ICVzIgorbXNnc3RyICJ0b2tpZ3QgaW4tcmVwbHktdG86ICVzIgorCisjOiBidWlsdGluL2xvZy5jOjEwNTEKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzxmbGFnZ29yPl0gWzxzZWRhbj4gfCA8cmV2aXNpb25zaW50ZXJ2YWxsPl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA5NgorbXNnaWQgIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICJUdsOlIHV0ZGF0YWthdGFsb2dlcj8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxMQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgImFudsOkbmQgW1BBVENIIG4vbV0gw6R2ZW4gZsO2ciBlbiBlbnNhbSBwYXRjaCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE0Cittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgImFudsOkbmQgW1BBVENIXSDDpHZlbiBmw7ZyIGZsZXJhIHBhdGNoYXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxOAorbXNnaWQgInByaW50IHBhdGNoZXMgdG8gc3RhbmRhcmQgb3V0IgorbXNnc3RyICJza3JpdiBwYXRjaGFybmEgcMOlIHN0YW5kYXJkIHV0IgorCisjOiBidWlsdGluL2xvZy5jOjEyMjAKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAiZ2VuZXJlcmEgZXR0IGbDtmxqZWJyZXYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMgorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAiYW52w6RuZCBlbmtlbCBudW1tZXJzZWt2ZW5zIGbDtnIgdXRkYXRhZmlsbmFtbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIzCittc2dpZCAic2Z4IgorbXNnc3RyICJzZngiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyNAorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICJhbnbDpG5kIDxzZng+IGlzdMOkbGxldCBmw7ZyIFwiLnBhdGNoXCIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyNgorbXNnaWQgInN0YXJ0IG51bWJlcmluZyBwYXRjaGVzIGF0IDxuPiBpbnN0ZWFkIG9mIDEiCittc2dzdHIgImLDtnJqYSBudW1yZXJhIHBhdGNoYXIgcMOlIDxuPiBpc3TDpGxsZXQgZsO2ciAxIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjgKK21zZ2lkICJtYXJrIHRoZSBzZXJpZXMgYXMgTnRoIHJlLXJvbGwiCittc2dzdHIgIm1hcmtlcmEgc2VyaWVuIHNvbSBOOnRlIGbDtnJzw7ZrIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzAKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIkFudsOkbmQgWzxwcmVmaXg+XSBpc3TDpGxsZXQgZsO2ciBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzMKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgInNwYXJhIGZpbGVybmEgaSA8a2F0YWxvZz4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzNgorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICJ0YSBpbnRlIGJvcnQgZWxsZXIgbMOkZ2cgdGlsbCBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzkKK21zZ2lkICJkb24ndCBvdXRwdXQgYmluYXJ5IGRpZmZzIgorbXNnc3RyICJza3JpdiBpbnRlIGJpbsOkcmEgZGlmZmFyIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDEKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgInRhIGludGUgbWVkIHBhdGNoYXIgc29tIG1vdHN2YXJhciBlbiB1cHBzdHLDtm1zaW5jaGVja25pbmciCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0MworbXNnaWQgInNob3cgcGF0Y2ggZm9ybWF0IGluc3RlYWQgb2YgZGVmYXVsdCAocGF0Y2ggKyBzdGF0KSIKK21zZ3N0ciAidmlzYSBwYXRjaGZvcm1hdCBpc3TDpGxsZXQgZsO2ciBzdGFuZGFyZCAocGF0Y2ggKyBzdGF0KSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ1Cittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICJFLXBvc3QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0NgorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAiaHV2dWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0NworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgImzDpGdnIHRpbGwgZS1wb3N0aHV2dWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0OCBidWlsdGluL2xvZy5jOjEyNTAKK21zZ2lkICJlbWFpbCIKK21zZ3N0ciAiZXBvc3QiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0OAorbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICJMw6RnZyB0aWxsIG1vdHRhZ2FyaHV2dWQgKFwiVG86XCIpIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTAKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAiTMOkZ2cgdGlsbCBrb3BpZWh1dnVkIChcIkNjOlwiKSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjUyCittc2dpZCAiaWRlbnQiCittc2dzdHIgImlkZW50IgorCisjOiBidWlsdGluL2xvZy5jOjEyNTMKK21zZ2lkICJzZXQgRnJvbSBhZGRyZXNzIHRvIDxpZGVudD4gKG9yIGNvbW1pdHRlciBpZGVudCBpZiBhYnNlbnQpIgorbXNnc3RyICJzw6R0dCBGcsOlbi1hZHJlc3MgdGlsbCA8aWRlbnQ+IChlbGxlciBpbmNoZWNrYXJlIG9tIGlkZW50IHNha25hcykiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgIm1lZGRlbGFuZGUtaWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAiR8O2ciBkZXQgZsO2cnN0YSBicmV2ZXQgZXR0IHN2YXIgdGlsbCA8bWVkZGVsYW5kZS1pZD4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NyBidWlsdGluL2xvZy5jOjEyNjAKK21zZ2lkICJib3VuZGFyeSIKK21zZ3N0ciAiZ3LDpG5zIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTgKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICJiaWZvZ2EgcGF0Y2hlbiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjYxCittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAiZ8O2ciBwYXRjaGVuIGV0dCBpbmxpbmUtb2JqZWt0IgorCisjOiBidWlsdGluL2xvZy5jOjEyNjUKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiYWt0aXZlcmEgYnJldnRyw6VkbmluZywgdHlwZXI6IHNoYWxsb3csIGRlZXAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI2NworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAic2lnbmF0dXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI2OAorbXNnaWQgImFkZCBhIHNpZ25hdHVyZSIKK21zZ3N0ciAibMOkZ2cgdGlsbCBzaWduYXR1ciIKKworIzogYnVpbHRpbi9sb2cuYzoxMjcwCittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICJsw6RnZyB0aWxsIHNpZ25hdHVyIGZyw6VuIGZpbCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjcxCittc2dpZCAiZG9uJ3QgcHJpbnQgdGhlIHBhdGNoIGZpbGVuYW1lcyIKK21zZ3N0ciAidmlzYSBpbnRlIGZpbG5hbW4gZsO2ciBwYXRjaGFyIgorCisjOiBidWlsdGluL2xvZy5jOjEzNjAKK21zZ2lkICItbiBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIi1uIG9jaCAtayBrYW4gaW50ZSBhbnbDpG5kYXMgc2FtdGlkaWd0LiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzYyCittc2dpZCAiLS1zdWJqZWN0LXByZWZpeCBhbmQgLWsgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIi0tc3ViamVjdC1wcmVmaXggb2NoIC1rIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QuIgorCisjOiBidWlsdGluL2xvZy5jOjEzNzAKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJrYW4gaW50ZSBhbnbDpG5kYSAtLW5hbWUtb25seSIKKworIzogYnVpbHRpbi9sb2cuYzoxMzcyCittc2dpZCAiLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJrYW4gaW50ZSBhbnbDpG5kYSAtLW5hbWUtc3RhdHVzIgorCisjOiBidWlsdGluL2xvZy5jOjEzNzQKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgImthbiBpbnRlIGFudsOkbmRhIC0tY2hlY2siCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM5NworbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICJzdGFuZGFyZCB1dCwgZWxsZXIga2F0YWxvZywgdmlsa2VuIHNrYWxsIGRldCB2YXJhPyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIkt1bmRlIGludGUgc2thcGEga2F0YWxvZ2VuIFwiJXNcIiIKKworIzogYnVpbHRpbi9sb2cuYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgImt1bmRlIGludGUgbMOkc2Egc2lnbmF0dXJmaWwgXCIlc1wiIgorCisjOiBidWlsdGluL2xvZy5jOjE1NTkKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHNrYXBhIHV0ZGF0YWZpbGVyIgorCisjOiBidWlsdGluL2xvZy5jOjE2MDcKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs8dXBwc3Ryw7ZtPiBbPGh1dnVkPiBbPGdyw6Rucz5dXV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTY2MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGZpbmQgYSB0cmFja2VkIHJlbW90ZSBicmFuY2gsIHBsZWFzZSBzcGVjaWZ5IDx1cHN0cmVhbT4gbWFudWFsbHkuXG4iCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgZW4gc3DDpXJhZCBmasOkcnJncmVuLCBhbmdlIDx1cHBzdHLDtm0+IG1hbnVlbGx0LlxuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzIgYnVpbHRpbi9sb2cuYzoxNjc0IGJ1aWx0aW4vbG9nLmM6MTY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiT2vDpG5kIGluY2hlY2tuaW5nICVzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6MzU4Cittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgWzxmbGFnZ29yPl0gWzxmaWw+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQxNQorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgImlkZW50aWZpZXJhIGZpbHN0YXR1cyBtZWQgdGFnZ2FyIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDE3Cittc2dpZCAidXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciAnYXNzdW1lIHVuY2hhbmdlZCcgZmlsZXMiCittc2dzdHIgImFudsOkbmQgc23DpSBib2tzdMOkdmVyIGbDtnIgXCJhbnRhIG9mw7Zyw6RuZHJhZGVcIi1maWxlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQxOQorbXNnaWQgInNob3cgY2FjaGVkIGZpbGVzIGluIHRoZSBvdXRwdXQgKGRlZmF1bHQpIgorbXNnc3RyICJ2aXNhIGNhY2hhZGUgZmlsZXIgaSB1dGRhdGEgKHN0YW5kYXJkKSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyMQorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJ2aXNhIGJvcnR0YWduYSBmaWxlciBpIHV0ZGF0YSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyMworbXNnaWQgInNob3cgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzYSBtb2RpZmllcmFkZSBmaWxlciBpIHV0ZGF0YSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyNQorbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzYSBhbmRyYSBmaWxlciBpIHV0ZGF0YSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyNworbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJ2aXNhIGlnbm9yZXJhZGUgZmlsZXIgaSB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzAKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAidmlzYSBrw7ZhdCBpbm5laMOlbGxzIG9iamVrdG5hbW4gaSB1dGRhdGEiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzIKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICJ2aXNhIGZpbGVyIGkgZmlsc3lzdGVtZXQgc29tIGJlaMO2dmVyIHRhcyBib3J0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDM0Cittc2dpZCAic2hvdyAnb3RoZXInIGRpcmVjdG9yaWVzJyBuYW1lcyBvbmx5IgorbXNnc3RyICJ2aXNhIGVuZGFzdCBuYW1uIGbDtnIgXCJhbmRyYVwiIGthdGFsb2dlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzNworbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgInZpc2EgaW50ZSB0b21tYSBrYXRhbG9nZXIiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDAKK21zZ2lkICJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgInZpc2EgZWogc2FtbWFuc2xhZ25hIGZpbGVyIGkgdXRkYXRhIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQyCittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgInZpc2EgXCJyZXNvbHZlLXVuZG9cIi1pbmZvcm1hdGlvbiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0NAorbXNnaWQgInNraXAgZmlsZXMgbWF0Y2hpbmcgcGF0dGVybiIKK21zZ3N0ciAiaG9wcGEgw7Z2ZXIgZmlsZXIgc29tIG1vdHN2YXJhciBtw7Zuc3RlciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0NworbXNnaWQgImV4Y2x1ZGUgcGF0dGVybnMgYXJlIHJlYWQgZnJvbSA8ZmlsZT4iCittc2dzdHIgImV4a2x1ZGVyYSBtw7Zuc3RlciBzb20gbMOkc2VzIGZyw6VuIDxmaWw+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDUwCittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgImzDpHMgeXR0ZXJsaWdhcmUgcGVyLWthdGFsb2ctZXhrbHVkZXJpbmdzbcO2bnN0ZXIgZnLDpW4gPGZpbD4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTIKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICJsw6RnZyB0aWxsIGdpdDpzIHN0YW5kYXJkZXhrbHVkZXJpbmdhciIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1NQorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJnw7ZyIHV0ZGF0YSByZWxhdGl2IHRpbGwgcHJvamVrdGV0cyB0b3Bwa2F0YWxvZyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1OAorbXNnaWQgImlmIGFueSA8ZmlsZT4gaXMgbm90IGluIHRoZSBpbmRleCwgdHJlYXQgdGhpcyBhcyBhbiBlcnJvciIKK21zZ3N0ciAib20gZW4gPGZpbD4gaW50ZSDDpHIgaW5kZXhldCwgYmV0cmFrdGEgZGV0IHNvbSBldHQgZmVsIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDU5Cittc2dpZCAidHJlZS1pc2giCittc2dzdHIgInRyw6RkLWlndCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ2MAorbXNnaWQgInByZXRlbmQgdGhhdCBwYXRocyByZW1vdmVkIHNpbmNlIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQiCittc2dzdHIgImzDpXRzYXMgYXR0IHPDtmt2w6RnYXIgYm9ydHRhZ25hIHNlZGFuIDx0csOkZC1pZ3Q+IGZvcnRmYXJhbmRlIGZpbm5zIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYyCittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAidmlzYSBmZWxzw7ZrbmluZ3N1dGRhdGEiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjI4Cittc2dpZCAiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLXRyZWUgWzxmbGFnZ29yPl0gPHRyw6RkLWlndD4gWzxzw7ZrdsOkZz4uLi5dIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgInZpc2EgZW5kYXN0IHRyw6RkIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjkKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgInJla3Vyc2VyYSBuZXIgaSB1bmRlcnRyw6RkIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzEKK21zZ2lkICJzaG93IHRyZWVzIHdoZW4gcmVjdXJzaW5nIgorbXNnc3RyICJ2aXNhIHRyw6RkIG1lZGFuIHJla3Vyc2VyaW5nIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzQKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJ0ZXJtaW5lcmEgcG9zdGVyIG1lZCBOVUwtYnl0ZSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiaW5rbHVkZXJhIG9iamVrdHN0b3JsZWsiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNyBidWlsdGluL2xzLXRyZWUuYzoxMzkKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICJ2aXNhIGVuZGFzdCBmaWxuYW1uIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDIKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICJhbnbDpG5kIGZ1bGxzdMOkbmRpZ2Egc8O2a3bDpGdzbmFtbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTQ0Cittc2dpZCAibGlzdCBlbnRpcmUgdHJlZTsgbm90IGp1c3QgY3VycmVudCBkaXJlY3RvcnkgKGltcGxpZXMgLS1mdWxsLW5hbWUpIgorbXNnc3RyICJ2aXNhIGhlbGEgdHLDpGRldDsgaW50ZSBiYXJhIGFrdHVlbGwga2F0YWxvZyAoaW1wbGljZXJhciAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzxmbGFnZ29yPl0gWzxpbmNoZWNrbmluZz4uLi5dIgorCisjOiBidWlsdGluL21lcmdlLmM6NDYKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gPG1zZz4gSEVBRCA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs8ZmxhZ2dvcj5dIDxtZWRkZWxhbmRlPiBIRUFEIDxpbmNoZWNrbmluZz4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NworbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwMAorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAiZmxhZ2dhbiBcIm1cIiBiZWjDtnZlciBldHQgdsOkcmRlIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIG1lcmdlIHN0cmF0ZWd5ICclcycuXG4iCittc2dzdHIgIkt1bmRlIGludGUgaGl0dGEgc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2luIFwiJXNcIi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJUaWxsZ8OkbmdsaWdhIHN0cmF0ZWdpZXIgw6RyOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgY3VzdG9tIHN0cmF0ZWdpZXMgYXJlOiIKK21zZ3N0ciAiVGlsbGfDpG5nbGlnYSBza3LDpGRkYXJzeWRkYSBzdHJhdGVnaWVyIMOkcjoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTMgYnVpbHRpbi9wdWxsLmM6MTE5Cittc2dpZCAiZG8gbm90IHNob3cgYSBkaWZmc3RhdCBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSIKK21zZ3N0ciAidmlzYSBpbnRlIGVuIGRpZmZzdGF0IG7DpHIgc2FtbWFuc2xhZ25pbmdlbiDDpHIgZsOkcmRpZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NiBidWlsdGluL3B1bGwuYzoxMjIKK21zZ2lkICJzaG93IGEgZGlmZnN0YXQgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UiCittc2dzdHIgInZpc2EgZW4gZGlmZnN0YXQgbsOkciBzYW1tYW5zbGFnbmluZ2VuIMOkciBmw6RyZGlnIgorCisjOiBidWlsdGluL21lcmdlLmM6MTk3IGJ1aWx0aW4vcHVsbC5jOjEyNQorbXNnaWQgIihzeW5vbnltIHRvIC0tc3RhdCkiCittc2dzdHIgIihzeW5vbnltIHRpbGwgLS1zdGF0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5OSBidWlsdGluL3B1bGwuYzoxMjgKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgIiIKKyJsw6RnZyB0aWxsIChzb20gbWVzdCA8bj4pIHBvc3RlciBmcsOlbiBzaG9ydGxvZyB0aWxsIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IgorCisjOiBidWlsdGluL21lcmdlLmM6MjAyIGJ1aWx0aW4vcHVsbC5jOjEzMQorbXNnaWQgImNyZWF0ZSBhIHNpbmdsZSBjb21taXQgaW5zdGVhZCBvZiBkb2luZyBhIG1lcmdlIgorbXNnc3RyICJza2FwYSBlbiBlbnNhbSBpbmNoZWNrbmluZyBpc3TDpGxsZXQgZsO2ciBlbiBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNCBidWlsdGluL3B1bGwuYzoxMzQKK21zZ2lkICJwZXJmb3JtIGEgY29tbWl0IGlmIHRoZSBtZXJnZSBzdWNjZWVkcyAoZGVmYXVsdCkiCittc2dzdHIgInV0ZsO2ciBlbiBpbmNoZWNrbmluZyBvbSBzYW1tYW5zbGFnbmluZ2VuIGx5Y2thZGVzIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDYgYnVpbHRpbi9wdWxsLmM6MTM3Cittc2dpZCAiZWRpdCBtZXNzYWdlIGJlZm9yZSBjb21taXR0aW5nIgorbXNnc3RyICJyZWRpZ2VyYSBtZWRkZWxhbmRlIGlubmFuIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA3Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAidGlsbMOldCBzbmFiYnNwb2xuaW5nIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDkgYnVpbHRpbi9wdWxsLmM6MTQzCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAiYXZicnl0IG9tIHNuYWJic3BvbG5pbmcgaW50ZSDDpHIgbcO2amxpZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxMworbXNnaWQgIlZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAiQmVrcsOkZnRhIGF0dCBkZW4gbmFtbmdpdm5hIGluY2hlY2tuaW5nZW4gaGFyIGVuIGdpbHRpZyBHUEctc2lnbmF0dXIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTQgYnVpbHRpbi9ub3Rlcy5jOjc2NyBidWlsdGluL3B1bGwuYzoxNDgKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODkKK21zZ2lkICJzdHJhdGVneSIKK21zZ3N0ciAic3RyYXRlZ2kiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTUgYnVpbHRpbi9wdWxsLmM6MTQ5Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICJzYW1tYW5zbGFnbmluZ3NzdHJhdGVnaSBhdHQgYW52w6RuZGEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTYgYnVpbHRpbi9wdWxsLmM6MTUyCittc2dpZCAib3B0aW9uPXZhbHVlIgorbXNnc3RyICJhbHRlcm5hdGl2PXbDpHJkZSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNyBidWlsdGluL3B1bGwuYzoxNTMKK21zZ2lkICJvcHRpb24gZm9yIHNlbGVjdGVkIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJhbHRlcm5hdGl2IGbDtnIgdmFsZCBzYW1tYW5zbGFnbmluZ3NzdHJhdGVnaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxOQorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAiaW5jaGVja25pbmdzbWVkZGVsYW5kZSBmw7ZyIChpY2tlIHNuYWJic3BvbGFuZGUpIHNhbW1hbnNsYWduaW5nIgorCisjOiBidWlsdGluL21lcmdlLmM6MjIzCittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgImF2YnJ5dCBkZW4gcMOlZ8OlZW5kZSBzYW1tYW5zbGFnbmluZ2VuIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUxCittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgImt1bmRlIGvDtnJhIHN0YXNoLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1NgorbXNnaWQgInN0YXNoIGZhaWxlZCIKK21zZ3N0ciAic3Rhc2ggbWlzc2x5Y2thZGVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBhIHZhbGlkIG9iamVjdDogJXMiCittc2dzdHIgImludGUgZXR0IGdpbHRpZ3Qgb2JqZWt0OiAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MCBidWlsdGluL21lcmdlLmM6Mjk3Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAicmVhZC10cmVlIG1pc3NseWNrYWRlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMyNworbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKGluZ2V0IGF0dCBwbGF0dGEgdGlsbCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJUaWxscGxhdHRuaW5nc2luY2hlY2tuaW5nIC0tIHVwcGRhdGVyYXIgaW50ZSBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDQgYnVpbHRpbi9tZXJnZS5jOjc2MyBidWlsdGluL21lcmdlLmM6OTc1CisjOiBidWlsdGluL21lcmdlLmM6OTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSB0byAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHNrcml2YSB0aWxsIFwiJXNcIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM3MgorbXNnaWQgIldyaXRpbmcgU1FVQVNIX01TRyIKK21zZ3N0ciAiU2tyaXZlciBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzc0Cittc2dpZCAiRmluaXNoaW5nIFNRVUFTSF9NU0ciCittc2dzdHIgIkF2c2x1dGFyIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbWVyZ2UgbWVzc2FnZSAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJJbmdldCBzYW1tYW5zbGFnbmluZ3NtZWRkZWxhbmRlIC0tIHVwcGRhdGVyYXIgaW50ZSBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiXCIlc1wiIHZlcmthciBpbnRlIHBla2EgcMOlIGVuIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL21lcmdlLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIkZlbGFrdGlnIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMtc3Ryw6RuZzogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NTYKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICJIYW50ZXJhciBpbnRlIG7DpWdvdCBhbm5hdCDDpG4gZW4gc2FtbWFuc2xhZ25pbmcgYXYgdHbDpSBodXZ1ZGVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIG9wdGlvbiBmb3IgbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorbXNnc3RyICJGZWxha3RpZyBmbGFnZ2EgZsO2ciBtZXJnZS1yZWN1cnNpdmU6IC1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIkt1bmRlIGludGUgbMOkc2EgZnLDpW4gXCIlc1wiIgorCisjOiBidWlsdGluL21lcmdlLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBjb21taXR0aW5nIG1lcmdlOyB1c2UgJ2dpdCBjb21taXQnIHRvIGNvbXBsZXRlIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiIgorIkNoZWNrYXIgaW50ZSBpbiBzYW1tYW5zbGFnbmluZ2VuOyBhbnbDpG5kIFwiZ2l0IGNvbW1pdFwiIGbDtnIgYXR0IHNsdXRmw7ZyYSAiCisiZGVuLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkFuZ2UgZXR0IGluY2hlY2tuaW5nc21lZGRlbGFuZGUgZsO2ciBhdHQgZsO2cmtsYXJhIHZhcmbDtnIgc2FtbWFuc2xhZ25pbmdlblxuIgorIsOkciBuw7ZkdsOkbmRpZywgc3BlY2llbGx0IG9tIGRlbiBzbMOlciBpbiBlbiB1cHBkYXRlcmFkIHVwcHN0csO2bSBpIGVuXG4iCisidGVtYWdyZW4uXG4iCisiXG4iCisiUmFkZXIgc29tIGlubGVkcyBtZWQgXCIlY1wiIGtvbW1lciBpZ25vcmVyYXMsIG9jaCBldHQgdG9tdCBtZWRkZWxhbmRlXG4iCisiYXZicnl0ZXIgaW5jaGVja25pbmdlbi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgxMQorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiVG9tdCBpbmNoZWNrbmluZ3NtZWRkZWxhbmRlLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIlVuZGVyYmFydC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICIiCisiS3VuZGUgaW50ZSBzbMOlIGlob3AgYXV0b21hdGlza3Q7IGZpeGEga29uZmxpa3RlciBvY2ggY2hlY2thIGluIHJlc3VsdGF0ZXQuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQiCittc2dzdHIgIlwiJXNcIiDDpHIgaW50ZSBlbiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkzNQorbXNnaWQgIk5vIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiSW50ZSBww6UgbsOlZ29uIGdyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM3Cittc2dpZCAiTm8gcmVtb3RlIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJJbmdlbiBmasOkcnIgZsO2ciBha3R1ZWxsIGdyZW4uIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM5Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJJbmdlbiBzdGFuZGFyZHVwcHN0csO2bSBhbmdpdmVuIGbDtnIgYWt0dWVsbCBncmVuLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICJJbmdlbiBmasOkcnJzcMOlcmFuZGUgZ3JlbiBmw7ZyICVzIGZyw6VuICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBzdMOkbmdhIFwiJXNcIiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMDgKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIkRldCBmaW5ucyBpbmdlbiBzYW1tYW5zbGFnbmluZyBhdHQgYXZicnl0YSAoTUVSR0VfSEVBRCBzYWtuYXMpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMjQKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiRHUgaGFyIGludGUgYXZzbHV0YXQgc2FtbWFuc2xhZ25pbmdlbiAoTUVSR0VfSEVBRCBmaW5ucykuXG4iCisiQ2hlY2thIGluIGRpbmEgw6RuZHJpbmdhciBpbm5hbiBkdSBzbMOlciBpaG9wLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzEKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiRHUgaGFyIGludGUgYXZzbHV0YXQgZGluIFwiY2hlcnJ5LXBpY2tcIiAoQ0hFUlJZX1BJQ0tfSEVBRCBmaW5ucykuXG4iCisiQ2hlY2thIGluIGRpbmEgw6RuZHJpbmdhciBpbm5hbiBkdSBzbMOlciBpaG9wLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIkR1IGhhciBpbnRlIGF2c2x1dGF0IGRpbiBcImNoZXJyeS1waWNrXCIgKENIRVJSWV9QSUNLX0hFQUQgZmlubnMpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNDMKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAiRHUga2FuIGludGUga29tYmluZXJhIC0tc3F1YXNoIG1lZCAtLW5vLWZmLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNTEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAiSW5nZW4gaW5jaGVja25pbmcgYW5naXZlbiBvY2ggbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gw6RyIGVqIHNhdHQuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI2OAorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICJTdMO2ZGVyIGludGUgZW4gdGlsbHBsYXR0bmluZ3NpbmNoZWNrbmluZyBww6UgZXR0IHRvbXQgaHV2dWQgw6RubnUiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjcwCittc2dpZCAiTm9uLWZhc3QtZm9yd2FyZCBjb21taXQgZG9lcyBub3QgbWFrZSBzZW5zZSBpbnRvIGFuIGVtcHR5IGhlYWQiCittc2dzdHIgIklja2Utc25hYmJzcG9sYWQgaW5jaGVja25pbmcga2FuIGludGUgYW52w6RuZGFzIG1lZCBldHQgdG9tdCBodXZ1ZCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgLSBub3Qgc29tZXRoaW5nIHdlIGNhbiBtZXJnZSIKK21zZ3N0ciAiJXMgLSBpbnRlIG7DpWdvdCB2aSBrYW4gc2zDpSBpaG9wIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3OAorbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIkthbiBlbmRhc3Qgc2zDpSBpaG9wIGVuIGVuZGEgaW5jaGVja25pbmcgaSBldHQgdG9tdCBodXZ1ZC4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYW4gdW50cnVzdGVkIEdQRyBzaWduYXR1cmUsIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIiIKKyJJbmNoZWNrbmluZ2VuICVzIGhhciBlbiBvYmV0cm9kZCBHUEctc2lnbmF0dXIgc29tIHDDpXN0w6VzIHZhcmEgZ2pvcmQgYXYgJXMuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiIgorIkluY2hlY2tuaW5nZW4gJXMgaGFyIGVuIGZlbGFrdGlnIEdQRy1zaWduYXR1ciBzb20gcMOlc3TDpXMgdmFyYSBnam9yZCBhdiAlcy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIkluY2hlY2tuaW5nICVzIGhhciBpbnRlIG7DpWdvbiBHUEctc2lnbmF0dXIuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTM0MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIGJ5ICVzXG4iCittc2dzdHIgIkluY2hlY2tuaW5nZW4gJXMgaGFyIGVuIGtvcnJla3QgR1BHLXNpZ25hdHVyIGF2ICVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICJVcHBkYXRlcmFyICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAiRsO2cnPDtmtlciByaWt0aWd0IGVua2VsIHNhbW1hbnNsYWduaW5nIGkgaW5kZXhldC4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3BlLlxuIgorbXNnc3RyICJOZWouXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTAxCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICJLYW4gaW50ZSBzbmFiYnNwb2xhLCBhdmJyeXRlci4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTI0IGJ1aWx0aW4vbWVyZ2UuYzoxNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICLDhXRlcnNwb2xhciB0csOkZGV0IHRpbGwgb3LDtnJ0Li4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyBtZXJnZSBzdHJhdGVneSAlcy4uLlxuIgorbXNnc3RyICJGw7Zyc8O2a2VyIHNhbW1hbnNsYWduaW5nc3N0cmF0ZWdpbiAlcy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAiSW5nZW4gc2FtbWFuc2xhZ25pbmdzc3RyYXRlZ2kgaGFudGVyYWRlIHNhbW1hbnNsYWduaW5nZW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJTYW1tYW5zbGFnbmluZyBtZWQgc3RyYXRlZ2luICVzIG1pc3NseWNrYWRlcy5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNpbmcgdGhlICVzIHRvIHByZXBhcmUgcmVzb2x2aW5nIGJ5IGhhbmQuXG4iCittc2dzdHIgIkFudsOkbmRlciAlcyBmw7ZyIGF0dCBmw7ZyYmVyZWRhIGzDtnNuaW5nIGbDtnIgaGFuZC5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorIkF1dG9tYXRpc2sgc2FtbWFuc2xhZ25pbmcgbHlja2FkZXM7IHN0b3BwYXIgZsO2cmUgaW5jaGVja25pbmcgc29tIMO2bnNrYXRcbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjkKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSBbLWEgfCAtLWFsbF0gPGNvbW1pdD4gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8aW5jaGVja25pbmc+IDxpbmNoZWNrbmluZz4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMwCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8aW5jaGVja25pbmc+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgPGluY2hlY2tuaW5nPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxpbmNoZWNrbmluZz4gPGluY2hlY2tuaW5nPiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzMKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPHJlZj4gWzxjb21taXQ+XSIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IDxpbmNoZWNrbmluZz4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIxNAorbXNnaWQgIm91dHB1dCBhbGwgY29tbW9uIGFuY2VzdG9ycyIKK21zZ3N0ciAic2tyaXYgdXQgYWxsYSBnZW1lbnNhbW1hIGFuZsOkZGVyIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMTYKK21zZ2lkICJmaW5kIGFuY2VzdG9ycyBmb3IgYSBzaW5nbGUgbi13YXkgbWVyZ2UiCittc2dzdHIgImhpdHRhIGFuZmFkZXIgZsO2ciBlbmtlbCBuLXbDpGdzc2FtbWFuc2xhZ25pbmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIxOAorbXNnaWQgImxpc3QgcmV2cyBub3QgcmVhY2hhYmxlIGZyb20gb3RoZXJzIgorbXNnc3RyICJ2aXNhIHJldmlzaW9uZXIgc29tIGludGUga2FuIG7DpXMgZnLDpW4gYW5kcmEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIyMAorbXNnaWQgImlzIHRoZSBmaXJzdCBvbmUgYW5jZXN0b3Igb2YgdGhlIG90aGVyPyIKK21zZ3N0ciAiw6RyIGRlbiBmw7Zyc3RhIGFuZmFkZXIgdGlsbCBkZW4gYW5kcmE/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjIKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAic2UgdmFyIDxpbmNoZWNrbmluZz4gZ3JlbmFkZXMgYXYgZnLDpW4gcmVmZXJlbnNsb2dnZW4gZnLDpW4gPHJlZj4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjgKK21zZ2lkICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxvcHRpb25zPl0gWy1MIDxuYW1lMT4gWy1MIDxvcmlnPiBbLUwgPG5hbWUyPl1dXSA8ZmlsZTE+ICIKKyI8b3JpZy1maWxlPiA8ZmlsZTI+IgorbXNnc3RyICIiCisiZ2l0IG1lcmdlLWZpbGUgWzxhbHRlcm5hdGl2Pl0gWy1MIDxuYW1uMT4gWy1MIDxvcmlnPiBbLUwgPG5hbW4yPl1dXSA8ZmlsMT4gIgorIjxvcmlnZmlsPiA8ZmlsMj4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjMzCittc2dpZCAic2VuZCByZXN1bHRzIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAic8OkbmQgcmVzdWx0YXQgdGlsbCBzdGFuZGFyZCB1dCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzQKK21zZ2lkICJ1c2UgYSBkaWZmMyBiYXNlZCBtZXJnZSIKK21zZ3N0ciAiYW52w6RuZCBkaWZmMy1iYXNlcmFkIHNhbW1hbnNsYWduaW5nIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNQorbXNnaWQgImZvciBjb25mbGljdHMsIHVzZSBvdXIgdmVyc2lvbiIKK21zZ3N0ciAiZsO2ciBrb25mbGlrdGVyLCBhbnbDpG5kIHbDpXIgdmVyc2lvbiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAiZsO2ciBrb25mbGlrdGVyLCBhbnbDpG5kIGRlcmFzIHZlcnNpb24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM5Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIGEgdW5pb24gdmVyc2lvbiIKK21zZ3N0ciAiZsO2ciBrb25mbGlrdGVyLCBhbnbDpG5kIGVuIGbDtnJlbmFkIHZlcnNpb24iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQyCittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiCittc2dzdHIgImbDtnIga29uZmxpa3RlciwgYW52w6RuZCBkZW5uYSBtYXJrw7Zyc3RvcmxlayIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDMKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgInZhcm5hIGludGUgb20ga29uZmxpa3RlciIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDUKK21zZ2lkICJzZXQgbGFiZWxzIGZvciBmaWxlMS9vcmlnLWZpbGUvZmlsZTIiCittc2dzdHIgInPDpHR0IGV0aWtldHRlciBmw7ZyIGZpbDEvb3JpZ2ZpbC9maWwyIgorCisjOiBidWlsdGluL21rdHJlZS5jOjY0Cittc2dpZCAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKK21zZ3N0ciAiZ2l0IG1rdHJlZSBbLXpdIFstLW1pc3NpbmddIFstLWJhdGNoXSIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTAKK21zZ2lkICJpbnB1dCBpcyBOVUwgdGVybWluYXRlZCIKK21zZ3N0ciAiaW5kYXRhIMOkciBOVUwtdGVybWluZXJhZCIKKworIzogYnVpbHRpbi9ta3RyZWUuYzoxNTEgYnVpbHRpbi93cml0ZS10cmVlLmM6MjQKK21zZ2lkICJhbGxvdyBtaXNzaW5nIG9iamVjdHMiCittc2dzdHIgInRpbGzDpXQgc2FrbmFkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUyCittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICJ0aWxsw6V0IHNrYXBhIG1lciDDpG4gZXR0IHRyw6RkIgorCisjOiBidWlsdGluL212LmM6MTUKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFs8ZmxhZ2dvcj5dIDxrw6RsbGE+Li4uIDxtw6VsPiIKKworIzogYnVpbHRpbi9tdi5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcmVjdG9yeSAlcyBpcyBpbiBpbmRleCBhbmQgbm8gc3VibW9kdWxlPyIKK21zZ3N0ciAiS2F0YWxvZ2VuICVzIMOkciBpIGluZGV4ZXQgb2NoIGludGUgZW4gdW5kZXJtb2R1bD8iCisKKyM6IGJ1aWx0aW4vbXYuYzo3MQorbXNnaWQgIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICIiCisiS8O2YSBkaW5hIMOkbmRyaW5nYXIgaSAuZ2l0bW9kdWxlcyBlbGxlciBhbnbDpG5kIFwic3Rhc2hcIiBmw7ZyIGF0dCBmb3J0c8OkdHRhIgorCisjOiBidWlsdGluL212LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyDDpHIgaSBpbmRleGV0IgorCisjOiBidWlsdGluL212LmM6MTExCittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICJ0dmluZ2EgZmx5dHRhL8OkbmRyYSBuYW1uIMOkdmVuIG9tIG3DpWxldCBmaW5ucyIKKworIzogYnVpbHRpbi9tdi5jOjExMgorbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICJob3BwYSDDtnZlciBmZWwgdmlkIGZseXR0L25hbW7DpG5kcmluZyIKKworIzogYnVpbHRpbi9tdi5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiZGVzdGluYXRpb25lbiBcIiVzXCIgw6RyIGluZ2VuIGthdGFsb2ciCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgcmVuYW1lIG9mICclcycgdG8gJyVzJ1xuIgorbXNnc3RyICJLb250cm9sbGVyYXIgbmFtbmJ5dGUgYXYgXCIlc1wiIHRpbGwgXCIlc1wiXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjYKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICJmZWxha3RpZyBrw6RsbGEiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICJrYW4gaW50ZSBmbHl0dGEga2F0YWxvZyB0aWxsIHNpZyBzasOkbHYiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzIKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICJrYW4gaW50ZSBmbHl0dGEga2F0YWxvZyDDtnZlciBmaWwiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODEKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICJrw6RsbGthdGFsb2dlbiDDpHIgdG9tIgorCisjOiBidWlsdGluL212LmM6MjA2Cittc2dpZCAibm90IHVuZGVyIHZlcnNpb24gY29udHJvbCIKK21zZ3N0ciAiaW50ZSB2ZXJzaW9uc2hhbnRlcmFkIgorCisjOiBidWlsdGluL212LmM6MjA5Cittc2dpZCAiZGVzdGluYXRpb24gZXhpc3RzIgorbXNnc3RyICJkZXN0aW5hdGlvbmVuIGZpbm5zIgorCisjOiBidWlsdGluL212LmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgInNrcml2ZXIgw7Z2ZXIgXCIlc1wiIgorCisjOiBidWlsdGluL212LmM6MjIwCittc2dpZCAiQ2Fubm90IG92ZXJ3cml0ZSIKK21zZ3N0ciAiS2FuIGludGUgc2tyaXZhIMO2dmVyIgorCisjOiBidWlsdGluL212LmM6MjIzCittc2dpZCAibXVsdGlwbGUgc291cmNlcyBmb3IgdGhlIHNhbWUgdGFyZ2V0IgorbXNnc3RyICJmbGVyYSBrw6RsbG9yIGbDtnIgc2FtbWEgbcOlbCIKKworIzogYnVpbHRpbi9tdi5jOjIyNQorbXNnaWQgImRlc3RpbmF0aW9uIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiZGVzdGluYXRpb25za2F0YWxvZ2VuIGZpbm5zIGludGUiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCBrw6RsbGE9JXMsIG3DpWw9JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAiQnl0ZXIgbmFtbiBww6UgJXMgdGlsbCAlc1xuIgorCisjOiBidWlsdGluL212LmM6MjU2IGJ1aWx0aW4vcmVtb3RlLmM6NzIyIGJ1aWx0aW4vcmVwYWNrLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbmFtaW5nICclcycgZmFpbGVkIgorbXNnc3RyICJtaXNzbHlja2FkZXMgYnl0YSBuYW1uIHDDpSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyNTUKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBuYW1lLXJldiBbPGZsYWdnb3I+XSA8aW5jaGVja25pbmc+Li4uIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjU2Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxmbGFnZ29yPl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyNTcKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8ZmxhZ2dvcj5dIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMDkKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgInNrcml2IGVuZGFzdCBuYW1uIChpbmdlbiBTSEEtMSkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTAKK21zZ2lkICJvbmx5IHVzZSB0YWdzIHRvIG5hbWUgdGhlIGNvbW1pdHMiCittc2dzdHIgImFudsOkbmQgZW5kYXN0IHRhZ2dhciBmw7ZyIGF0dCBuYW1uZ2UgaW5jaGVja25pbmdhciIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxMgorbXNnaWQgIm9ubHkgdXNlIHJlZnMgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJhbnbDpG5kIGVuZGFzdCByZWZlcmVuc2VyIHNvbSBtb3RzdmFyYXIgPG3Dtm5zdGVyPiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxNAorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgImxpc3RhIGFsbGEgaW5jaGVja25pbmdhciBzb20ga2FuIG7DpXMgYWxsYSByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzE1Cittc2dpZCAicmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJsw6RzIGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzE2Cittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICJ0aWxsw6V0IGF0dCBza3JpdmEgXCJvZGVmaW5pZXJhZGVcIiBuYW1uIChzdGFuZGFyZCkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMjIKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAiYXZyZWZlcmVyYSB0YWdnYXIgaSBpbmRhdGEgKGFudsOkbmRzIGludGVybnQpIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBbbGlzdCBbPG9iamVrdD5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2Cittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGFkZCBbLWZdIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gIgorInwgKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxtZWRkPiB8IC1GICIKKyI8ZmlsPiB8ICgtYyB8IC1DKSA8b2JqZWt0Pl0gWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI3Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIGNvcHkgWy1mXSA8ZnLDpW4tb2JqZWt0PiA8dGlsbC1vYmpla3Q+IgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAiCisiKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBhcHBlbmQgWy0tYWxsb3ctZW1wdHldIFstbSA8bWVkZD4gfCAtRiAiCisiPGZpbD4gfCAoLWMgfCAtQykgPG9iamVrdD5dIFs8b2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPGFudGVja25pbmdzcmVmPl0gZWRpdCBbLS1hbGxvdy1lbXB0eV0gWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMwCittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIHNob3cgWzxvYmpla3Q+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMxCittc2dpZCAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWd5Pl0gPG5vdGVzLXJlZj4iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPHN0cmF0ZWdpPl0gIgorIjxhbnRlY2tuaW5nc3JlZj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzQKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzxvYmplY3Q+Li4uXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSByZW1vdmUgWzxvYmpla3Q+Li4uXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcHJ1bmUgWy1uIHwgLXZdIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxhbnRlY2tuaW5nc3JlZj5dIHBydW5lIFstbiB8IC12XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM2Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8YW50ZWNrbmluZ3NyZWY+XSBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6NDEKK21zZ2lkICJnaXQgbm90ZXMgW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbbGlzdCBbPG9iamVrdD5dXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ2Cittc2dpZCAiZ2l0IG5vdGVzIGFkZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYWRkIFs8ZmxhZ2dvcj5dIFs8b2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MQorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IFs8ZmxhZ2dvcj5dIDxmcsOlbi1vYmpla3Q+IDx0aWxsLW9iamVrdD4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MgorbXNnaWQgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIgorbXNnc3RyICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8ZnLDpW4tb2JqZWt0PiA8dGlsbC1vYmpla3Q+XS4uLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU3Cittc2dpZCAiZ2l0IG5vdGVzIGFwcGVuZCBbPG9wdGlvbnM+XSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgYXBwZW5kIFs8ZmxhZ2dvcj5dIFs8b2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MgorbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBlZGl0IFs8b2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NworbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFs8b2JqZWt0Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIFs8ZmxhZ2dvcj5dIDxhbnRlY2tuaW5nc3JlZj4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzQKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3OQorbXNnaWQgImdpdCBub3RlcyByZW1vdmUgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVrdD5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODQKK21zZ2lkICJnaXQgbm90ZXMgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBub3RlcyBwcnVuZSBbPGZsYWdnb3I+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5Cittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHN0YXJ0YSBcInNob3dcIiBmw7ZyIG9iamVrdGV0IFwiJXNcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MQorbXNnaWQgImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiCittc2dzdHIgImt1bmRlIGludGUgbMOkc2EgdXRkYXRhIGZyw6VuIFwic2hvd1wiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBmaW5pc2ggJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBhdnNsdXRhIFwic2hvd1wiIGbDtnIgb2JqZWt0ZXQgXCIlc1wiIgorCisjOiBidWlsdGluL25vdGVzLmM6MTc0IGJ1aWx0aW4vdGFnLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGZpbGVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5MworbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiQW5nZSBpbm5laMOlbGwgZsO2ciBhbnRlY2tuaW5nZW4gbWVkIGFudGluZ2VuIC1tIGVsbGVyIC1GIgorCisjOiBidWlsdGluL25vdGVzLmM6MjAyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5vdGUgb2JqZWN0IgorbXNnc3RyICJrdW5kZSBpbnRlIHNrcml2YSBhbnRlY2tuaW5nc29iamVrdCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAiQW50ZWNrbmluZ2VucyBpbm5laMOlbGwgaGFyIGzDpG1uYXRzIGt2YXIgaSAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIzMiBidWlsdGluL3RhZy5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGzDpHNhIFwiJXNcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIzNCBidWlsdGluL3RhZy5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hIGVsbGVyIGzDpHNhIFwiJXNcIiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1MyBidWlsdGluL25vdGVzLmM6MzA0IGJ1aWx0aW4vbm90ZXMuYzozMDYKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNjYgYnVpbHRpbi9ub3Rlcy5jOjQyMSBidWlsdGluL25vdGVzLmM6NTA3CisjOiBidWlsdGluL25vdGVzLmM6NTEyIGJ1aWx0aW4vbm90ZXMuYzo1OTAgYnVpbHRpbi9ub3Rlcy5jOjY1MworIzogYnVpbHRpbi9ub3Rlcy5jOjg3NyBidWlsdGluL3RhZy5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVzb2x2ZSAnJXMnIGFzIGEgdmFsaWQgcmVmLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzbMOlIHVwcCBcIiVzXCIgc29tIGVuIGdpbHRpZyByZWZlcmVucy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIG9iamVrdGV0IFwiJXNcIi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbm90ZSBkYXRhIGZyb20gbm9uLWJsb2Igb2JqZWN0ICclcycuIgorbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBhbnRlY2tuaW5nc2RhdGEgZnLDpW4gaWNrZS1ibG9iLW9iamVrdGV0IFwiJXNcIi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNTkgYnVpbHRpbi9ub3Rlcy5jOjQxNCBidWlsdGluL25vdGVzLmM6NDkwCisjOiBidWlsdGluL25vdGVzLmM6NTAyIGJ1aWx0aW4vbm90ZXMuYzo1NzggYnVpbHRpbi9ub3Rlcy5jOjY0NgorIzogYnVpbHRpbi9ub3Rlcy5jOjk0MgorbXNnaWQgInRvbyBtYW55IHBhcmFtZXRlcnMiCittc2dzdHIgImbDtnIgbcOlbmdhIHBhcmFtZXRyYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzIgYnVpbHRpbi9ub3Rlcy5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICJJbmdhIGFudGVja25pbmdhciBoaXR0YWRlcyBmw7ZyIG9iamVrdGV0ICVzLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5MyBidWlsdGluL25vdGVzLmM6NTU2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAiYW50ZWNrbmluZ3Npbm5laMOlbGwgc29tIHN0csOkbmciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTYgYnVpbHRpbi9ub3Rlcy5jOjU1OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICJhbnRlY2tuaW5nc2lubmVow6VsbCBpIGVuIGZpbCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5OCBidWlsdGluL25vdGVzLmM6NDAxIGJ1aWx0aW4vbm90ZXMuYzo1NjEKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NjQgYnVpbHRpbi90YWcuYzo2MzAKK21zZ2lkICJvYmplY3QiCittc2dzdHIgIm9iamVrdCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5OSBidWlsdGluL25vdGVzLmM6NTYyCittc2dpZCAicmV1c2UgYW5kIGVkaXQgc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLDpXRlcmFudsOkbmQgb2NoIHJlZGlnZXJhIGFuZ2l2ZXQgYW50ZWNrbmluZ3NvYmpla3QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDIgYnVpbHRpbi9ub3Rlcy5jOjU2NQorbXNnaWQgInJldXNlIHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiw6V0ZXJhbnbDpG5kIGFuZ2l2ZXQgYW50ZWNrbmluZ3NvYmpla3QiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDUgYnVpbHRpbi9ub3Rlcy5jOjU2OAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAidGlsbMOldCBsYWdyYSB0b20gYW50ZWNrbmluZyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwNiBidWlsdGluL25vdGVzLmM6NDc3Cittc2dpZCAicmVwbGFjZSBleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiZXJzw6R0dCBiZWZpbnRsaWdhIGFudGVja25pbmdhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQzMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGFkZCBub3Rlcy4gRm91bmQgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlcy4gVXNlICctZicgdG8gb3ZlcndyaXRlICIKKyJleGlzdGluZyBub3RlcyIKK21zZ3N0ciAiIgorIkthbiBpbnRlIGzDpGdnYSB0aWxsIGFudGVja25pbmdhci4gSGl0dGFkZSBiZWZpbnRsaWdhIGFudGVja25pbmdhciBmw7ZyICIKKyJvYmpla3RldCAlcy4gQW52w6RuZCBcIi1mXCIgZsO2ciBhdHQgc2tyaXZhIMO2dmVyIGJlZmludGxpZ2EgYW50ZWNrbmluZ2FyIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ2IGJ1aWx0aW4vbm90ZXMuYzo1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICJTa3JpdmVyIMO2dmVyIGJlZmludGxpZ2EgYW50ZWNrbmluZ2FyIGbDtnIgb2JqZWt0ZXQgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ1NyBidWlsdGluL25vdGVzLmM6NjE4IGJ1aWx0aW4vbm90ZXMuYzo4ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIlRhciBib3J0IGFudGVja25pbmcgZsO2ciBvYmpla3RldCAlc1xuIgorCisjOiBidWlsdGluL25vdGVzLmM6NDc4Cittc2dpZCAicmVhZCBvYmplY3RzIGZyb20gc3RkaW4iCittc2dzdHIgImzDpHMgb2JqZWt0IGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL25vdGVzLmM6NDgwCittc2dpZCAibG9hZCByZXdyaXRpbmcgY29uZmlnIGZvciA8Y29tbWFuZD4gKGltcGxpZXMgLS1zdGRpbikiCittc2dzdHIgImzDpHMgb21za3Jpdm5pbmdzaW5zdMOkbGxuaW5nIGbDtnIgPGtvbW1hbmRvPiAoaW1wbGljZXJhciAtLXN0ZGluKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ5OAorbXNnaWQgInRvbyBmZXcgcGFyYW1ldGVycyIKK21zZ3N0ciAiZsO2ciBmw6UgcGFyYW1ldHJhciIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJLYW4gaW50ZSBrb3BpZXJhIGFudGVja25pbmdhci4gSGl0dGFkZSBiZWZpbnRsaWdhIGFudGVja25pbmdhciBmw7ZyIG9iamVrdGV0ICIKKyIlcy4gQW52w6RuZCBcIi1mXCIgZsO2ciBhdHQgc2tyaXZhIMO2dmVyIGJlZmludGxpZ2EgYW50ZWNrbmluZ2FyIgorCisjOiBidWlsdGluL25vdGVzLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICJBbnRlY2tuaW5nYXIgcMOlIGvDpGxsb2JqZWt0ZXQgJXMgc2FrbmFzLiBLYW4gaW50ZSBrb3BpZXJhLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjU4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC1tLy1GLy1jLy1DIG9wdGlvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgZm9yIHRoZSAnZWRpdCcgc3ViY29tbWFuZC5cbiIKKyJQbGVhc2UgdXNlICdnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DJyBpbnN0ZWFkLlxuIgorbXNnc3RyICIiCisiRmxhZ2dvcm5hIC1tLy1GLy1jLy1DIHJla29tbWVuZGVyYXMgaW50ZSBmw7ZyIHVuZGVya29tbWFuZG90IFwiZWRpdFwiLlxuIgorIkFudsOkbmQgXCJnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1DXCIgaXN0w6RsbGV0LlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzY0CiBtc2dpZCAiR2VuZXJhbCBvcHRpb25zIgotbXNnc3RyICJBbGxtw6RubmEgaW5zdMOkbGxuaW5nYXIiCittc2dzdHIgIkFsbG3DpG5uYSBmbGFnZ29yIgogCi0jOiBnaXRrOjExMzk4Ci1tc2dpZCAiVXNlIHRoZW1lZCB3aWRnZXRzIgotbXNnc3RyICJBbnbDpG5kIHRlbWEgcMOlIGbDtm5zdGVyZWxlbWVudCIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjYKK21zZ2lkICJNZXJnZSBvcHRpb25zIgorbXNnc3RyICJGbGFnZ29yIGbDtnIgc2FtbWFuc2xhZ25pbmciCiAKLSM6IGdpdGs6MTE0MDAKLW1zZ2lkICIoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpIgotbXNnc3RyICIow6RuZHJpbmdlbiBrcsOkdmVyIG9tc3RhcnQpIgotCi0jOiBnaXRrOjExNDAyCi1tc2dpZCAiKGN1cnJlbnRseSB1bmF2YWlsYWJsZSkiCi1tc2dzdHIgIihmw7ZyIG7DpHJ2YXJhbmRlIGludGUgdGlsbGfDpG5nbGlndCkiCi0KLSM6IGdpdGs6MTE0MTMKLW1zZ2lkICJDb2xvcnM6IHByZXNzIHRvIGNob29zZSIKLW1zZ3N0ciAiRsOkcmdlcjogdHJ5Y2sgZsO2ciBhdHQgdsOkbGphIgotCi0jOiBnaXRrOjExNDE2Ci1tc2dpZCAiSW50ZXJmYWNlIgotbXNnc3RyICJHcsOkbnNzbml0dCIKLQotIzogZ2l0azoxMTQxNwotbXNnaWQgImludGVyZmFjZSIKLW1zZ3N0ciAiZ3LDpG5zc25pdHQiCi0KLSM6IGdpdGs6MTE0MjAKLW1zZ2lkICJCYWNrZ3JvdW5kIgotbXNnc3RyICJCYWtncnVuZCIKLQotIzogZ2l0azoxMTQyMSBnaXRrOjExNDUxCi1tc2dpZCAiYmFja2dyb3VuZCIKLW1zZ3N0ciAiYmFrZ3J1bmQiCi0KLSM6IGdpdGs6MTE0MjQKLW1zZ2lkICJGb3JlZ3JvdW5kIgotbXNnc3RyICJGw7ZyZ3J1bmQiCi0KLSM6IGdpdGs6MTE0MjUKLW1zZ2lkICJmb3JlZ3JvdW5kIgotbXNnc3RyICJmw7ZyZ3J1bmQiCi0KLSM6IGdpdGs6MTE0MjgKLW1zZ2lkICJEaWZmOiBvbGQgbGluZXMiCi1tc2dzdHIgIkRpZmY6IGdhbWxhIHJhZGVyIgotCi0jOiBnaXRrOjExNDI5Ci1tc2dpZCAiZGlmZiBvbGQgbGluZXMiCi1tc2dzdHIgImRpZmYgZ2FtbGEgcmFkZXIiCi0KLSM6IGdpdGs6MTE0MzMKLW1zZ2lkICJEaWZmOiBuZXcgbGluZXMiCi1tc2dzdHIgIkRpZmY6IG55YSByYWRlciIKLQotIzogZ2l0azoxMTQzNAotbXNnaWQgImRpZmYgbmV3IGxpbmVzIgotbXNnc3RyICJkaWZmIG55YSByYWRlciIKLQotIzogZ2l0azoxMTQzOAotbXNnaWQgIkRpZmY6IGh1bmsgaGVhZGVyIgotbXNnc3RyICJEaWZmOiBkZWxodXZ1ZCIKLQotIzogZ2l0azoxMTQ0MAotbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCi1tc2dzdHIgImRpZmYgZGVsaHV2dWQiCi0KLSM6IGdpdGs6MTE0NDQKLW1zZ2lkICJNYXJrZWQgbGluZSBiZyIKLW1zZ3N0ciAiTWFya2VyYWQgcmFkIGJha2dydW5kIgotCi0jOiBnaXRrOjExNDQ2Ci1tc2dpZCAibWFya2VkIGxpbmUgYmFja2dyb3VuZCIKLW1zZ3N0ciAibWFya2VyYWQgcmFkIGJha2dydW5kIgotCi0jOiBnaXRrOjExNDUwCi1tc2dpZCAiU2VsZWN0IGJnIgotbXNnc3RyICJNYXJrZXJhZCBiYWtncnVuZCIKLQotIzogZ2l0azoxMTQ1OQotbXNnaWQgIkZvbnRzOiBwcmVzcyB0byBjaG9vc2UiCi1tc2dzdHIgIlRlY2tlbnNuaXR0OiB0cnljayBmw7ZyIGF0dCB2w6RsamEiCi0KLSM6IGdpdGs6MTE0NjEKLW1zZ2lkICJNYWluIGZvbnQiCi1tc2dzdHIgIkh1dnVkdGVja2Vuc25pdHQiCi0KLSM6IGdpdGs6MTE0NjIKLW1zZ2lkICJEaWZmIGRpc3BsYXkgZm9udCIKLW1zZ3N0ciAiVGVja2Vuc25pdHQgZsO2ciBkaWZmdmlzbmluZyIKLQotIzogZ2l0azoxMTQ2MwotbXNnaWQgIlVzZXIgaW50ZXJmYWNlIGZvbnQiCi1tc2dzdHIgIlRlY2tlbnNuaXR0IGbDtnIgYW52w6RuZGFyZ3LDpG5zc25pdHQiCi0KLSM6IGdpdGs6MTE0ODUKLW1zZ2lkICJHaXRrIHByZWZlcmVuY2VzIgotbXNnc3RyICJJbnN0w6RsbG5pbmdhciBmw7ZyIEdpdGsiCi0KLSM6IGdpdGs6MTE0OTQKLW1zZ2lkICJHZW5lcmFsIgotbXNnc3RyICJBbGxtw6RudCIKLQotIzogZ2l0azoxMTQ5NQotbXNnaWQgIkNvbG9ycyIKLW1zZ3N0ciAiRsOkcmdlciIKLQotIzogZ2l0azoxMTQ5NgotbXNnaWQgIkZvbnRzIgotbXNnc3RyICJUZWNrZW5zbml0dCIKLQotIzogZ2l0azoxMTU0NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCi1tc2dzdHIgIkdpdGs6IHbDpGxqIGbDpHJnIGbDtnIgJXMiCi0KLSM6IGdpdGs6MTIwNTkKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjgKIG1zZ2lkICIiCi0iU29ycnksIGdpdGsgY2Fubm90IHJ1biB3aXRoIHRoaXMgdmVyc2lvbiBvZiBUY2wvVGsuXG4iCi0iIEdpdGsgcmVxdWlyZXMgYXQgbGVhc3QgVGNsL1RrIDguNC4iCisicmVzb2x2ZSBub3RlcyBjb25mbGljdHMgdXNpbmcgdGhlIGdpdmVuIHN0cmF0ZWd5IChtYW51YWwvb3Vycy90aGVpcnMvdW5pb24vIgorImNhdF9zb3J0X3VuaXEpIgogbXNnc3RyICIiCi0iR2l0ayBrYW4gdHl2w6RyciBpbnRlIGvDtnJhIG1lZCBkZW5uYSB2ZXJzaW9uIGF2IFRjbC9Uay5cbiIKLSIgR2l0ayBrcsOkdmVyIMOldG1pbnN0b25lIFRjbC9UayA4LjQuIgorImzDpHMga29uZmxpa3RlciBpIGFudGVja25pbmdhciBtZWQgYW5naXZlbiBzdHJhdGVnaSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uLyIKKyJjYXRfc29ydF91bmlxKSIKIAotIzogZ2l0azoxMjI2OQotbXNnaWQgIkNhbm5vdCBmaW5kIGEgZ2l0IHJlcG9zaXRvcnkgaGVyZS4iCi1tc2dzdHIgIkhpdHRhciBpbmdldCBnaXQtYXJraXYgaMOkci4iCisjOiBidWlsdGluL25vdGVzLmM6NzcwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiQ2hlY2thciBpbiBlaiBzYW1tYW5zbGFnbmEgYW50ZWNrbmluZ2FyIgogCi0jOiBnaXRrOjEyMzE2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgotbXNnc3RyICJUdmV0eWRpZ3QgYXJndW1lbnQgXCIlc1wiOiBiw6VkZSByZXZpc2lvbiBvY2ggZmlsbmFtbiIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzIKK21zZ2lkICJmaW5hbGl6ZSBub3RlcyBtZXJnZSBieSBjb21taXR0aW5nIHVubWVyZ2VkIG5vdGVzIgorbXNnc3RyICIiCisiZsOkcmRpZ3N0w6RsbCBzYW1tYW5zbGFnbmluZyBhdiBhbnRlY2tuaW5nYXIgZ2Vub20gYXR0IGNoZWNrYSBpbiBlaiAiCisic2FtbWFuc2xhZ25hIGFudGVja25pbmdhciIKIAotIzogZ2l0azoxMjMyOAotbXNnaWQgIkJhZCBhcmd1bWVudHMgdG8gZ2l0azoiCi1tc2dzdHIgIkZlbGFrdGlnYSBhcmd1bWVudCB0aWxsIGdpdGs6IgorIzogYnVpbHRpbi9ub3Rlcy5jOjc3NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIkF2YnJ5dCBsw7ZzbmluZyBhdiBzYW1tYW5zbGFnbmluZyBhdiBhbnRlY2tuaW5nYXIiCiAKLSN+IG1zZ2lkICJtYyIKLSN+IG1zZ3N0ciAibWMiCisjOiBidWlsdGluL25vdGVzLmM6Nzc2Cittc2dpZCAiYWJvcnQgbm90ZXMgbWVyZ2UiCittc2dzdHIgImF2YnJ5dCBzYW1tYW5zbGFnbmluZyBhdiBhbnRlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQSBub3RlcyBtZXJnZSBpbnRvICVzIGlzIGFscmVhZHkgaW4tcHJvZ3Jlc3MgYXQgJXMiCittc2dzdHIgIlNhbW1hbnNsYWduaW5nIGF2IGFudGVja25pbmdhciB0aWxsICVzIMOkciByZWRhbiBpZ8OlbmdzYXR0IHDDpSAlcyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAiT2JqZWt0ZXQgJXMgaGFyIGluZ2VuIGFudGVja25pbmdcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5MgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAiZsO2cnPDtmsgYXR0IHRhIGJvcnQgaWNrZS1leGlzdGVyYW5kZSBhbnRlY2tuaW5nYXIgw6RyIGludGUgZXR0IGZlbCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5NQorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsw6RzIG9iamVrdG5hbW4gZnLDpW4gc3RhbmRhcmQgaW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NzYKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgImFudGVja25pbmdhci1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NzcKK21zZ2lkICJ1c2Ugbm90ZXMgZnJvbSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiYW52w6RuZCBhbnRlY2tuaW5nYXIgZnLDpW4gPGFudGVja25pbmdzcmVmPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjEwMTIgYnVpbHRpbi9yZW1vdGUuYzoxNTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVua25vd24gc3ViY29tbWFuZDogJXMiCittc2dzdHIgIk9rw6RudCB1bmRlcmtvbW1hbmRvOiAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOAorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3B0aW9ucz4uLi5dIFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCBbPGZsYWdnb3I+Li4uXSBbPCA8cmVmbGlzdGE+IHwgPCA8b2JqZWt0bGlzdGE+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOQorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPGZsYWdnb3I+Li4uXSA8YmFzbmFtbj4gWzwgPHJlZmxpc3RhPiB8IDwgPG9iamVrdGxpc3RhPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTc1IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlZmxhdGUgZXJyb3IgKCVkKSIKK21zZ3N0ciAiZmVsIGkgZGVmbGF0ZSAoJWQpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc3MQorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiU2tyaXZlciBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MTAxMQorbXNnaWQgImRpc2FibGluZyBiaXRtYXAgd3JpdGluZywgYXMgc29tZSBvYmplY3RzIGFyZSBub3QgYmVpbmcgcGFja2VkIgorbXNnc3RyICJpbmFrdGl2ZXJhciBza3Jpdm5pbmcgYXYgYml0a2FydGEgZMOlIG7DpWdyYSBvYmpla3QgaW50ZSBwYWNrYXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjE3MQorbXNnaWQgIkNvbXByZXNzaW5nIG9iamVjdHMiCittc2dzdHIgIktvbXByaW1lcmFyIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgImluZGV4dmVyc2lvbmVuICVzIHN0w7ZkcyBlaiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgImZlbGFrdGlnIGluZGV4dmVyc2lvbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYwMgorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJ2aXNhIGludGUgZsO2cmxvcHBzaW5kaWthdG9yIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDQKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJ2aXNhIGbDtnJsb3Bwc2luZGlrYXRvciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjA2Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciBkdXJpbmcgb2JqZWN0IHdyaXRpbmcgcGhhc2UiCittc2dzdHIgInZpc2EgZsO2cmxvcHBzaW5kaWthdG9yIHVuZGVyIG9iamVrdHNrcml2bmluZ3NmYXNlbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjA5Cittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICJzb20gLS1hbGwtcHJvZ3Jlc3MgbsOkciBmw7ZybG9wcHNtw6R0YXJlbiB2aXNhcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjEwCittc2dpZCAidmVyc2lvblssb2Zmc2V0XSIKK21zZ3N0ciAidmVyc2lvblssb2Zmc2V0XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjExCittc2dpZCAid3JpdGUgdGhlIHBhY2sgaW5kZXggZmlsZSBpbiB0aGUgc3BlY2lmaWVkIGlkeCBmb3JtYXQgdmVyc2lvbiIKK21zZ3N0ciAic2tyaXYgcGFrZXRpbmRleGZpbGVuIGkgYW5naXZlbiBpbmRleGZvcm1hdHZlcnNpb24iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxNAorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIG91dHB1dCBwYWNrIGZpbGUiCittc2dzdHIgIm1heGltYWwgc3RvcmxlayBww6UgdmFyamUgdXRkYXRhcGFrZXRmaWwiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxNgorbXNnaWQgImlnbm9yZSBib3Jyb3dlZCBvYmplY3RzIGZyb20gYWx0ZXJuYXRlIG9iamVjdCBzdG9yZSIKK21zZ3N0ciAiaWdub3JlcmEgbMOlbmFkZSBvYmpla3QgZnLDpW4gYWx0ZXJuYXRpdmEgb2JqZWt0bGFnZXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYxOAorbXNnaWQgImlnbm9yZSBwYWNrZWQgb2JqZWN0cyIKK21zZ3N0ciAiaWdub3JlcmEgcGFja2FkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyMAorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgImJlZ3LDpG5zYSBwYWtldGbDtm5zdGVyIGVmdGVyIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjIyCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAiYmVncsOkbnNhIHBha2V0ZsO2bnN0ZXIgZWZ0ZXIgbWlubmUgZsO2cnV0b20gb2JqZWt0Z3LDpG5zIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjQKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAibWF4aW1hbCBsw6RuZ2QgcMOlIGRlbHRha2VkamEgdGlsbMOldGVuIGkgc2x1dGxpZ3QgcGFrZXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyNgorbXNnaWQgInJldXNlIGV4aXN0aW5nIGRlbHRhcyIKK21zZ3N0ciAiw6V0ZXJhbnbDpG5kIGJlZmludGxpZ2EgZGVsdGEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyOAorbXNnaWQgInJldXNlIGV4aXN0aW5nIG9iamVjdHMiCittc2dzdHIgIsOldGVyYW52w6RuZCBiZWZpbnRsaWdhIG9iamVrdCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjMwCittc2dpZCAidXNlIE9GU19ERUxUQSBvYmplY3RzIgorbXNnc3RyICJhbnbDpG5kIE9GU19ERUxUQS1vYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzMgorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgImFudsOkbmQgdHLDpWRhciB2aWQgc8O2a25pbmcgZWZ0ZXIgYsOkc3RhIGRlbHRhdHLDpGZmYXIiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzNAorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgImbDtnJzw7ZrIGludGUgc2thcGEgdG9tIHBha2V0dXRkYXRhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzYKK21zZ2lkICJyZWFkIHJldmlzaW9uIGFyZ3VtZW50cyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJsw6RzIHJldmlzaW9uc2FyZ3VtZW50IGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzgKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAiYmVncsOkbnNhIG9iamVrdCB0aWxsIGRlIHNvbSDDpG5udSBpbnRlIHBhY2thdHMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0MQorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWFjaGFibGUgZnJvbSBhbnkgcmVmZXJlbmNlIgorbXNnc3RyICJpbmtsdWRlcmEgb2JqZWt0IHNvbSBrYW4gbsOlcyBmcsOlbiBuw6Vnb24gcmVmZXJlbnMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY0NAorbXNnaWQgImluY2x1ZGUgb2JqZWN0cyByZWZlcnJlZCBieSByZWZsb2cgZW50cmllcyIKK21zZ3N0ciAiaW5rbHVkZXJhIG9iamVrdCBzb20gcmVmZXJlcmFzIGZyw6VuIHJlZmVyZW5zbG9nZ3Bvc3RlciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQ3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAiaW5rbHVkZXJhIG9iamVrdCBzb20gcmVmZXJlcmFzIGZyw6VuIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1MAorbXNnaWQgIm91dHB1dCBwYWNrIHRvIHN0ZG91dCIKK21zZ3N0ciAic2tyaXYgcGFrZXQgcMOlIHN0YW5kYXJkIHV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTIKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgImlua2x1ZGVyYSB0YWdnb2JqZWt0IHNvbSByZWZlcmVyYXIgb2JqZWt0IHNvbSBza2FsbCBwYWNrYXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1NAorbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiYmVow6VsbCBvbsOlYmFyYSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1NSBwYXJzZS1vcHRpb25zLmg6MTQyCittc2dpZCAidGltZSIKK21zZ3N0ciAidGlkIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTYKK21zZ2lkICJ1bnBhY2sgdW5yZWFjaGFibGUgb2JqZWN0cyBuZXdlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAicGFja2EgdXBwIG9uw6ViYXJhIG9iamVrdCBueWFyZSDDpG4gPHRpZD4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICJza2FwYSB0dW5uYSBwYWtldCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjYxCittc2dpZCAiY3JlYXRlIHBhY2tzIHN1aXRhYmxlIGZvciBzaGFsbG93IGZldGNoZXMiCittc2dzdHIgInNrYXBhIHBhY2tmaWxlciBsw6RtcGFkZSBmw7ZyIGdydW5kYSBow6RtdG5pbmdhciIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjYzCittc2dpZCAiaWdub3JlIHBhY2tzIHRoYXQgaGF2ZSBjb21wYW5pb24gLmtlZXAgZmlsZSIKK21zZ3N0ciAiaWdub3JlcmEgcGFrZXQgc29tIGhhciB0aWxsaMO2cmFuZGUgLmtlZXAtZmlsIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjUKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICJrb21wcmltZXJpbmdzZ3JhZCBmw7ZyIHBha2V0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjcKK21zZ2lkICJkbyBub3QgaGlkZSBjb21taXRzIGJ5IGdyYWZ0cyIKK21zZ3N0ciAiZ8O2bSBpbnRlIGluY2hlY2tuaW5nYXIgbWVkIHltcG5pbmdhciAoXCJncmFmdHNcIikiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2OQorbXNnaWQgInVzZSBhIGJpdG1hcCBpbmRleCBpZiBhdmFpbGFibGUgdG8gc3BlZWQgdXAgY291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAiYW52w6RuZCBiaXRrYXJ0aW5kZXggb20gdGlsbGfDpG5nbGlndCBmw7ZyIGF0dCByw6RrbmEgb2JqZWt0IHNuYWJiYXJlIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NzEKK21zZ2lkICJ3cml0ZSBhIGJpdG1hcCBpbmRleCB0b2dldGhlciB3aXRoIHRoZSBwYWNrIGluZGV4IgorbXNnc3RyICJhbnbDpG5kIGJpdGthcnRpbmRleCB0aWxsc2FtbWFucyBtZWQgcGFja2luZGV4ZXQiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc2MgorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIlLDpGtuYXIgb2JqZWt0IgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjYKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFs8ZmxhZ2dvcj5dIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE0Cittc2dpZCAicGFjayBldmVyeXRoaW5nIgorbXNnc3RyICJwYWNrYSBhbGx0IgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE1Cittc2dpZCAicHJ1bmUgbG9vc2UgcmVmcyAoZGVmYXVsdCkiCittc2dzdHIgInRhIGJvcnQgbMO2c2EgcmVmZXJlbnNlciAoc3RhbmRhcmQpIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjcKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MAorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICJUYXIgYm9ydCBkdXBsaWNlcmFkZSBvYmpla3QiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMQorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1leHBpcmUgPHRpZD5dIFstLV0gWzxodXZ1ZD4uLi5dIgorCisjOiBidWlsdGluL3BydW5lLmM6MTA1IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjEKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgInRhIGludGUgYm9ydCwgYmFyYSB2aXNhIgorCisjOiBidWlsdGluL3BydW5lLmM6MTA2IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjIKK21zZ2lkICJyZXBvcnQgcHJ1bmVkIG9iamVjdHMiCittc2dzdHIgInJhcHBvcnRlcmEgYm9ydHRhZ25hIG9iamVrdCIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwOSBidWlsdGluL3dvcmt0cmVlLmM6MTI0Cittc2dpZCAiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImzDpXQgdGlkIGfDpSB1dCBmw7ZyIG9iamVrdCDDpGxkcmUgw6RuIDx0aWQ+IgorCisjOiBidWlsdGluL3B1bGwuYzo2OQorbXNnaWQgImdpdCBwdWxsIFtvcHRpb25zXSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgW2ZsYWdnb3JdIFs8YXJraXY+IFs8cmVmc3BlYz4uLi5dXSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTEzCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIG1lcmdpbmciCittc2dzdHIgIkFsdGVybmF0aXYgZ8OkbGxhbmRlIHNhbW1hbnNsYWduaW5nIgorCisjOiBidWlsdGluL3B1bGwuYzoxMTUKK21zZ2lkICJmYWxzZXx0cnVlfHByZXNlcnZlIgorbXNnc3RyICJmYWxzZXx0cnVlfHByZXNlcnZlIgorCisjOiBidWlsdGluL3B1bGwuYzoxMTYKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgImlubGVtbWEgw6RuZHJpbmdhciBnZW5vbSBvbWJhc2VyaW5nIGkgc3TDpGxsZXQgZsO2ciBzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQwIGJ1aWx0aW4vcmV2ZXJ0LmM6MTA1Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIgorbXNnc3RyICJ0aWxsw6V0IHNuYWJic3BvbG5pbmciCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NgorbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAiYmVrcsOkZnRhIGF0dCBkZW4gbmFtbmdpdm5hIGluY2hlY2tuaW5nZW4gaGFyIGVuIGdpbHRpZyBHUEctc2lnbmF0dXIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2MAorbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBnw6RsbGFuZGUgaMOkbXRuaW5nYXIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciBwdWxsLmZmOiAlcyIKK21zZ3N0ciAiRmVsYWt0aWd0IHbDpHJkZSBmw7ZyIHB1bGwuZmY6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzozNTIKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIkthbiBpbnRlIGjDpG10YSBtZWQgb21iYXNlcmluZzogRHUgaGFyIG9rw7ZhZGUgw6RuZHJpbmdhci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjM1OAorbXNnaWQgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiRGVzc3V0b20gaW5uZWjDpWxsZXIgZGl0IGluZGV4IMOkbmRyaW5nYXIgc29tIGludGUgaGFyIGNoZWNrYXRzIGluLiIKKworIzogYnVpbHRpbi9wdWxsLmM6MzYwCittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdXIgaW5kZXggY29udGFpbnMgdW5jb21taXR0ZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJLYW4gaW50ZSBow6RtdGEgbWVkIG9tYmFzZXJpbmc6IERpdHQgaW5kZXggaW5uZWjDpWxsZXIgb2luY2hlY2thZGUgw6RuZHJpbmdhci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNgorbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJEZXQgZmlubnMgaW5nZW4ga2FuZGlkYXQgZsO2ciBvbWJhc2VyaW5nIGJsYW5kIHJlZmVyZW5zZXJuYSBkdSBwcmVjaXMgaGFyICIKKyJow6RtdGF0LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM4Cittc2dpZCAiIgorIlRoZXJlIGFyZSBubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJEZXQgZmlubnMgaW5nZW4ga2FuZGlkYXQgZsO2ciBzYW1tYW5zbGFnbmluZyBibGFuZCByZWZlcmVuc2VybmEgZHUgcHJlY2lzIGhhciAiCisiaMOkbXRhdC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOQorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIiIKKyJEZXQgYmV0eWRlciB2YW5saWd0dmlzIGF0dCBkdSBhbnbDpG50IGVuIGpva2VydGVja2VuLXJlZnNwZWMgc29tIGludGVcbiIKKyJtb3RzdmFyYWRlIG7DpWdvdCBpIGZqw6RycsOkbmRlbi4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisiRHUgYmFkIG9tIGF0dCBow6RtdGEgZnLDpW4gZmrDpHJyZW4gXCIlc1wiLCBtZW4gYW5nYXYgaW50ZSBuw6Vnb25cbiIKKyJncmVuLiBFZnRlcnNvbSBkZXQgaW50ZSDDpHIgZGVuIGZqw6RyciBzb20gw6RyIGtvbmZpZ3VyZXJhZCBzb21cbiIKKyJzdGFuZGFyZCBmw7ZyIGFrdHVlbGwgZ3JlbiBtw6VzdGUgZHUgYW5nZSBlbiBncmVuIHDDpSBrb21tYW5kb3JhZGVuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ3Cittc2dpZCAiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLiIKK21zZ3N0ciAiRHUgw6RyIGludGUgcMOlIG7DpWdvbiBncmVuIGbDtnIgbsOkcnZhcmFuZGUuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NDkgYnVpbHRpbi9wdWxsLmM6NDY0Cittc2dpZCAiUGxlYXNlIHNwZWNpZnkgd2hpY2ggYnJhbmNoIHlvdSB3YW50IHRvIHJlYmFzZSBhZ2FpbnN0LiIKK21zZ3N0ciAiQW5nZSB2aWxrZW4gZ3JlbiBkdSB2aWxsIG9tYmFzZXJhIG1vdC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ1MSBidWlsdGluL3B1bGwuYzo0NjYKK21zZ2lkICJQbGVhc2Ugc3BlY2lmeSB3aGljaCBicmFuY2ggeW91IHdhbnQgdG8gbWVyZ2Ugd2l0aC4iCittc2dzdHIgIkFuZ2Ugdmlsa2VuIGdyZW4gZHUgdmlsbCBzbMOlIHNhbW1hbiBtZWQuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9wdWxsLmM6NDY3Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiU2UgZ2l0LXB1bGwoMSkgZsO2ciBkZXRhbGplci4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ2MgorbXNnaWQgIlRoZXJlIGlzIG5vIHRyYWNraW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICJEZXQgZmlubnMgaW5nZW4gc3DDpXJuaW5nc2luZm9ybWF0aW9uIGbDtnIgYWt0dWVsbCBncmVuLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorbXNnc3RyICIiCisiT20gZHUgdmlsbCBhbmdlIHNww6VybmluZ3NpbmZvcm1hdGlvbiBmw7ZyIGdyZW5lbiBrYW4gZHUgZ8O2cmEgZGV0IG1lZDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88Z3Jlbj4gJXNcbiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3VyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHRvIG1lcmdlIHdpdGggdGhlIHJlZiAnJXMnXG4iCisiZnJvbSB0aGUgcmVtb3RlLCBidXQgbm8gc3VjaCByZWYgd2FzIGZldGNoZWQuIgorbXNnc3RyICIiCisiRGluYSBpbnN0w6RsbG5pbmdhciBhbmdlciBzYW1tYW5zbGFnbmluZyBtZWQgcmVmZXJlbnNlbiBcIiVzXCJcbiIKKyJmcsOlbiBmasOkcnJlbiwgbWVuIG7DpWdvbiBzw6VkYW4gcmVmZXJlbnMgdG9ncyBpbnRlIGVtb3QuIgorCisjOiBidWlsdGluL3B1bGwuYzo4MzAKK21zZ2lkICJVcGRhdGluZyBhbiB1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXguIgorbXNnc3RyICJVcHBkYXRlcmFyIGVuIG9mw7ZkZCBncmVuIG1lZCDDpG5kcmluZ2FyIHNvbSBsYWd0cyB0aWxsIGkgaW5kZXhldC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorImNvbW1pdCAlcy4iCittc2dzdHIgIiIKKyJmZXRjaCB1cHBkYXRlcmFkZSBodXZ1ZGV0IGbDtnIgYWt0dWVsbCBncmVuLlxuIgorInNuYWJic3BvbGFyIGRpbiBhcmJldHNrYXRhbG9nIGZyw6VuXG4iCisiaW5jaGVja25pbmdlbiAlcy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg2NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGZhc3QtZm9yd2FyZCB5b3VyIHdvcmtpbmcgdHJlZS5cbiIKKyJBZnRlciBtYWtpbmcgc3VyZSB0aGF0IHlvdSBzYXZlZCBhbnl0aGluZyBwcmVjaW91cyBmcm9tXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIm91dHB1dCwgcnVuXG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisidG8gcmVjb3Zlci4iCittc2dzdHIgIiIKKyJLYW4gaW50ZSBzbmFiYnNwb2xhIGRpbiBhcmJldHNrYXRhbG9nLlxuIgorIk7DpHIgZHUgw6RyIHPDpGtlciBww6UgYXR0IGR1IGhhciBzcGFyYXQgYWxsdCB2w6RyZGVmdWxsdCBpIHV0ZGF0YSBmcsOlblxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJrw7ZyIGR1XG4iCisiJCBnaXQgcmVzZXQgLS1oYXJkXG4iCisiZsO2ciBhdHQgw6V0ZXJnw6UuIgorCisjOiBidWlsdGluL3B1bGwuYzo4NzkKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkLiIKK21zZ3N0ciAiS2FuIGludGUgc2zDpSBpaG9wIGZsZXJhIGdyZW5hciBpIGV0dCB0b210IGh1dnVkLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODgzCittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAiS2FuIGludGUgb21iYXNlcmEgb3ZhbnDDpSBmbGVyYSBncmVuYXIuIgorCisjOiBidWlsdGluL3B1c2guYzoxNQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBbPGZsYWdnb3I+XSBbPGFya2l2PiBbPHJlZnNwZWM+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjg2Cittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJ0YWdnZsO2cmtvcnRuaW5nIHV0YW4gPHRhZ2c+IgorCisjOiBidWlsdGluL3B1c2guYzo5NgorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICItLWRlbGV0ZSBnb2R0YXIgZW5kYXN0IGVua2xhIG3DpWxyZWZlcmVuc25hbW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE0MAorbXNnaWQgIiIKKyJcbiIKKyJUbyBjaG9vc2UgZWl0aGVyIG9wdGlvbiBwZXJtYW5lbnRseSwgc2VlIHB1c2guZGVmYXVsdCBpbiAnZ2l0IGhlbHAgY29uZmlnJy4iCittc2dzdHIgIiIKKyJcbiIKKyJGw7ZyIGF0dCB2w6RsamEgZXR0IGF2IGFsdGVybmF0aXZlbiBwZXJtYW5lbnQsIHNlIHB1c2guZGVmYXVsdCBpIFwiZ2l0IGhlbHAgIgorImNvbmZpZ1wiLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgdXBzdHJlYW0gYnJhbmNoIG9mIHlvdXIgY3VycmVudCBicmFuY2ggZG9lcyBub3QgbWF0Y2hcbiIKKyJ0aGUgbmFtZSBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoLiAgVG8gcHVzaCB0byB0aGUgdXBzdHJlYW0gYnJhbmNoXG4iCisib24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyJUbyBwdXNoIHRvIHRoZSBicmFuY2ggb2YgdGhlIHNhbWUgbmFtZSBvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKK21zZ3N0ciAiIgorIlVwcHN0csO2bXNncmVuZW4gZsO2ciBkaW4gbnV2YXJhbmRlIGdyZW4gc3TDpG1tZXIgaW50ZSDDtnZlcmVuc1xuIgorIm1lZCBuYW1uZXQgcMOlIGRpbiBha3R1ZWxsYSBncmVuLiBGw7ZyIGF0dCBzw6RuZGEgdGlsbCB1cHBzdHLDtm1zZ3JlbmVuXG4iCisiaSBmasOkcnJhcmtpdmV0IGFudsOkbmRlciBkdVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiRsO2ciBhdHQgc8OkbmRhIHRpbGwgZ3JlbmVuIG1lZCBzYW1tYSBuYW1uIGkgZmrDpHJyYXJraXZldCBhbnbDpG5kZXIgZHVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIkR1IMOkciBpbnRlIHDDpSBuw6Vnb24gZ3JlbiBmw7ZyIG7DpHJ2YXJhbmRlLlxuIgorIkbDtnIgYXR0IHPDpG5kYSBpbiBoaXN0b3Jpa2VuIHNvbSBsZWRlciB0aWxsIGRlbiBha3R1ZWxsYSAoZnLDpW5rb3BwbGF0XG4iCisiSEVBRCkgc2l0dWF0aW9uZW4gYW52w6RuZGVyIGR1XG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbW4tcMOlLWZqw6RycmdyZW4+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorIkRlbiBha3R1ZWxsYSBncmVuZW4gJXMgaGFyIGluZ2VuIHVwcHN0csO2bXNncmVuLlxuIgorIkbDtnIgYXR0IHPDpG5kYSBha3R1ZWxsIGdyZW4gb2NoIGFuZ2UgZmrDpHJyYXJraXYgc29tIHVwcHN0csO2bSBhbnbDpG5kZXIgZHVcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICJEZW4gYWt0dWVsbGEgZ3JlbmVuICVzIGhhciBmbGVyYSB1cHBzdHLDtm1zZ3JlbmFyLCB2w6RncmFyIHPDpG5kYS4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBwdXNoaW5nIHRvIHJlbW90ZSAnJXMnLCB3aGljaCBpcyBub3QgdGhlIHVwc3RyZWFtIG9mXG4iCisieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnLCB3aXRob3V0IHRlbGxpbmcgbWUgd2hhdCB0byBwdXNoXG4iCisidG8gdXBkYXRlIHdoaWNoIHJlbW90ZSBicmFuY2guIgorbXNnc3RyICIiCisiRHUgc8OkbmRlciB0aWxsIGZqw6RycmVuIFwiJXNcIiwgc29tIGludGUgw6RyIHVwcHN0csO2bXMgZsO2ciBkZW5cbiIKKyJha3R1ZWxsYSBncmVuZW4gXCIlc1wiLCB1dGFuIGF0dCB0YWxhIG9tIGbDtnIgbWlnIHZhZCBzb21cbiIKKyJza2FsbCBzw6RuZGFzIGbDtnIgYXR0IHVwcGRhdGVyYSBmasOkcnJncmVuZW4uIgorCisjOiBidWlsdGluL3B1c2guYzoyMDYKK21zZ2lkICIiCisicHVzaC5kZWZhdWx0IGlzIHVuc2V0OyBpdHMgaW1wbGljaXQgdmFsdWUgaGFzIGNoYW5nZWQgaW5cbiIKKyJHaXQgMi4wIGZyb20gJ21hdGNoaW5nJyB0byAnc2ltcGxlJy4gVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2VcbiIKKyJhbmQgbWFpbnRhaW4gdGhlIHRyYWRpdGlvbmFsIGJlaGF2aW9yLCB1c2U6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBtYXRjaGluZ1xuIgorIlxuIgorIlRvIHNxdWVsY2ggdGhpcyBtZXNzYWdlIGFuZCBhZG9wdCB0aGUgbmV3IGJlaGF2aW9yIG5vdywgdXNlOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgc2ltcGxlXG4iCisiXG4iCisiV2hlbiBwdXNoLmRlZmF1bHQgaXMgc2V0IHRvICdtYXRjaGluZycsIGdpdCB3aWxsIHB1c2ggbG9jYWwgYnJhbmNoZXNcbiIKKyJ0byB0aGUgcmVtb3RlIGJyYW5jaGVzIHRoYXQgYWxyZWFkeSBleGlzdCB3aXRoIHRoZSBzYW1lIG5hbWUuXG4iCisiXG4iCisiU2luY2UgR2l0IDIuMCwgR2l0IGRlZmF1bHRzIHRvIHRoZSBtb3JlIGNvbnNlcnZhdGl2ZSAnc2ltcGxlJ1xuIgorImJlaGF2aW9yLCB3aGljaCBvbmx5IHB1c2hlcyB0aGUgY3VycmVudCBicmFuY2ggdG8gdGhlIGNvcnJlc3BvbmRpbmdcbiIKKyJyZW1vdGUgYnJhbmNoIHRoYXQgJ2dpdCBwdWxsJyB1c2VzIHRvIHVwZGF0ZSB0aGUgY3VycmVudCBicmFuY2guXG4iCisiXG4iCisiU2VlICdnaXQgaGVscCBjb25maWcnIGFuZCBzZWFyY2ggZm9yICdwdXNoLmRlZmF1bHQnIGZvciBmdXJ0aGVyICIKKyJpbmZvcm1hdGlvbi5cbiIKKyIodGhlICdzaW1wbGUnIG1vZGUgd2FzIGludHJvZHVjZWQgaW4gR2l0IDEuNy4xMS4gVXNlIHRoZSBzaW1pbGFyIG1vZGVcbiIKKyInY3VycmVudCcgaW5zdGVhZCBvZiAnc2ltcGxlJyBpZiB5b3Ugc29tZXRpbWVzIHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBHaXQpIgorbXNnc3RyICIiCisicHVzaC5kZWZhdWx0IGhhciBpbnRlIHN0w6RsbHRzIGluOyBkZXNzIHVuZGVyZsO2cnN0w6VkZGEgdsOkcmRlXG4iCisiw6RuZHJhcyBpIEdpdCAyLjAgZnLDpW4gXCJtYXRjaGluZ1wiIHRpbGwgXCJzaW1wbGVcIi4gRsO2ciBhdHRcbiIKKyJ1bmRlcnRyeWNrYSBkZXQgaMOkciBtZWRkZWxhbmRldCBvY2ggYmVow6VsbGEgdHJhZGl0aW9uZWxsdCBiZXRlZW5kZVxuIgorInNrcml2ZXIgZHU6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBtYXRjaGluZ1xuIgorIlxuIgorIkbDtnIgYXR0IHVuZGVydHJ5Y2thIG1lZGRlbGFuZGV0IG9jaCB2w6RsamEgZGV0IG55YSBiZXRlZW5kZXQgbnUgc2tyaXZlciBkdTpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IHNpbXBsZVxuIgorIlxuIgorIk7DpHIgcHVzaC5kZWZhdWx0IMOkciBzYXR0IHRpbGwgXCJtYXRjaGluZ1wiIGtvbW1lciBnaXQgYXR0IHPDpG5kYSBsb2thbGEgIgorImdyZW5hclxuIgorInRpbGwgZmrDpHJyZ3JlbmFyIHNvbSByZWRhbiBmaW5ucyBvY2ggc29tIGhhciBzYW1tYSBuYW1uLlxuIgorIlxuIgorIkdpdCAyLjAga29tbWVyIHNvbSBzdGFuZGFyZCB2w6RsamEgZGVuIG1lciBrb25zZXJ2YXRpdmEgaW5zdMOkbGxuaW5nZW5cbiIKKyJcInNpbXBsZVwiLCB2aWxrZXQgYmFyYSBzw6RuZGVyIGluIGRlbiBha3R1ZWxsYSBncmVuZW4gdGlsbCBkZW4gbW90c3ZhcmFuZGVcbiIKKyJmasOkcnJncmVuIFwiZ2l0IHB1bGxcIiBhbnbDpG5kZXIgZsO2ciBhdHQgdXBwZGF0ZXJhIGRlbiBha3R1ZWxsYSBncmVuZW4uXG4iCisiXG4iCisiU2UgXCJnaXQgaGVscCBjb25maWdcIiBvY2ggc8O2ayBlZnRlciBcInB1c2guZGVmYXVsdFwiIGbDtnIgeXR0ZXJsaWdhcmUgXG4iCisiaW5mb3JtYXRpb24uIChMw6RnZXQgXCJzaW1wbGVcIiBpbnRyb2R1Y2VyYWRlcyBpIEdpdCAxLjcuMTEuIEFudsOkbmQgZGV0XG4iCisibGlrbmFuZGUgbMOkZ2V0IFwiY3VycmVudFwiIGlzdMOkbGxldCBmw7ZyIFwic2ltcGxlXCIgb20gZHUgaWJsYW5kIGFudsOkbmRlclxuIgorIsOkbGRyZSB2ZXJzaW9uZXIgYXYgR2l0LikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI3MworbXNnaWQgIiIKKyJZb3UgZGlkbid0IHNwZWNpZnkgYW55IHJlZnNwZWNzIHRvIHB1c2gsIGFuZCBwdXNoLmRlZmF1bHQgaXMgXCJub3RoaW5nXCIuIgorbXNnc3RyICIiCisiRHUgYW5nYXYgaW5nYSByZWZlcmVuc3NwZWNpZmlrYXRpb25lciBhdHQgc8OkbmRhLCBvY2ggcHVzaC5kZWZhdWx0IMOkciAiCisiXCJub3RoaW5nXCIuIgorCisjOiBidWlsdGluL3B1c2guYzoyODAKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJVcHBkYXRlcmluZ2FyIGF2dmlzYWRlcyBkw6Ugw6RuZGVuIHDDpSBkaW4gYmVmaW50bGlnYSBncmVuIMOkciBiYWtvbVxuIgorImRlc3MgZmrDpHJybW90c3ZhcmlnaGV0LiBJbnRlZ3JlcmEgZmrDpHJyw6RuZHJpbmdhcm5hICh0LmV4XG4iCisiXCJnaXQgcHVsbCAuLi4uXCIpIGlubmFuIGR1IHPDpG5kZXIgaWdlbi5cbiIKKyJTZSBhdnNuaXR0ZXQgXCJOb3RlIGFib3V0IGZhc3QtZm9yd2FyZFwiIGkgXCJnaXQgcHVzaCAtLWhlbHBcIiBmw7ZyIGRldGFsamVyLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg2Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiVXBwZGF0ZXJpbmdhciBhdnZpc2FkZXMgZMOlIMOkbmRlbiBww6UgZW4gZ3JlbiBzb20gc8OkbmRzIGluIMOkciBiYWtvbSBkZXNzXG4iCisiZmrDpHJybW90c3ZhcmlnaGV0LiBDaGVja2EgdXQgZ3JlbmVuIG9jaCBpbnRlZ3JlcmEgZmrDpHJyw6RuZHJpbmdhcm5hICh0LmV4LlxuIgorIlwiZ2l0IHB1bGwgLi4uXCIpIGlubmFuIGR1IHPDpG5kZXIgaWdlbi5cbiIKKyJTZSBhdnNuaXR0ZXQgXCJOb3RlIGFib3V0IGZhc3QtZm9yd2FyZFwiIGkgXCJnaXQgcHVzaCAtLWhlbHBcIiBmw7ZyIGRldGFsamVyLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MjkyCittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSByZW1vdGUgY29udGFpbnMgd29yayB0aGF0IHlvdSBkb1xuIgorIm5vdCBoYXZlIGxvY2FsbHkuIFRoaXMgaXMgdXN1YWxseSBjYXVzZWQgYnkgYW5vdGhlciByZXBvc2l0b3J5IHB1c2hpbmdcbiIKKyJ0byB0aGUgc2FtZSByZWYuIFlvdSBtYXkgd2FudCB0byBmaXJzdCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4sICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIlVwcGRhdGVyaW5nYXIgYXZ2aXNhZGVzIGTDpSBmasOkcnJlbiBpbm5laMOlbGxlciDDpG5kcmluZ2FyIHNvbSBkdSBpbnRlXG4iCisiaGFyIGxva2FsdC4gRGV0IGJlcm9yIG9mdGFzdCBww6UgYXR0IGV0dCBhbm5hdCBhcmtpdiBoYXIgc8OkbnQgaW4gc2FtbWFcbiIKKyJyZWZlcmVuc2VyLiBEZXQga2FuIHZhcmEgZW4gaWTDqSBhdHQgZsO2cnN0IGludGVncmVyYSBmasOkcnLDpG5kcmluZ2FybmFcbiIKKyIodC5leC4gXCJnaXQgcHVsbCAuLi5cIikgaW5uYW4gZHUgc8OkbmRlciBpZ2VuLlxuIgorIlNlIGF2c25pdHRldCBcIk5vdGUgYWJvdXQgZmFzdC1mb3J3YXJkc1wiIGkgXCJnaXQgcHVzaCAtLWhlbHBcIiBmw7ZyIGRldGFsamVyLiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAiVXBwZGF0ZXJpbmdhcm5hIGF2dmlzYWRlcyBlZnRlcnNvbSB0YWdnZW4gcmVkYW4gZmlubnMgcMOlIGZqw6RycmVuLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzAyCittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyJEdSBrYW4gaW50ZSB1cHBkYXRlcmEgZW4gZmrDpHJyLXJlZmVyZW5zIHNvbSBwZWthciBww6UgZXR0IG9iamVrdCBzb21cbiIKKyJpbnRlIMOkciBlbiBpbmNoZWNrbmluZywgZWxsZXIgdXBwZGF0ZXJhIGVuIGZqw6Ryci1yZWZlcmVucyBzw6UgYXR0IGRlblxuIgorInBla2FyIHDDpSBuw6Vnb3Qgc29tIGludGUgw6RyIGVuIGluY2hlY2tuaW5nLCB1dGFuIGF0dCBhbnbDpG5kYSBmbGFnZ2FuXG4iCisiXCItLWZvcmNlXCIuXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIlPDpG5kZXIgdGlsbCAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgIm1pc3NseWNrYWRlcyBzw6RuZGEgdmlzc2EgcmVmZXJlbnNlciB0aWxsIFwiJXNcIiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mzk1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCByZXBvc2l0b3J5ICclcyciCittc2dzdHIgImZlbGFrdGlndCBhcmtpdiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NgorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisiSW5nZW4gZGVzdGluYXRpb24gaGFyIGFuZ2l2aXRzLlxuIgorIkFuZ2UgYW50aW5nZW4gVVJMOmVuIHDDpSBrb21tYW5kb3JhZGVuIGVsbGVyIHN0w6RsbCBpbiBldHQgdXBwc3Ryw7Ztc2Fya2l2IG1lZFxuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA8bmFtbj4gPHVybD5cbiIKKyJcbiIKKyJvY2ggc8OkbmQgc2VkYW4gbWVkIGhqw6RscCBhdiBmasOkcnJuYW1uZXRcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggPG5hbW4+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxMQorbXNnaWQgIi0tYWxsIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgb2NoIC0tdGFncyDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL3B1c2guYzo0MTIKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLWFsbCBrYW4gaW50ZSBrb21iaW5lcmFzIG1lZCByZWZlcmVuc3NwZWNpZmlrYXRpb25lciIKKworIzogYnVpbHRpbi9wdXNoLmM6NDE3Cittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLW1pcnJvciBvY2ggLS10YWdzIMOkciBpbmtvbXBhdGlibGEiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxOAorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yIGthbiBpbnRlIGtvbWJpbmVyYXMgbWVkIHJlZmVyZW5zc3BlY2lmaWthdGlvbmVyIgorCisjOiBidWlsdGluL3B1c2guYzo0MjMKK21zZ2lkICItLWFsbCBhbmQgLS1taXJyb3IgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1hbGwgb2NoIC0tbWlycm9yIMOkciBpbmtvbXBhdGlibGEiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUzOQorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgImFya2l2IgorCisjOiBidWlsdGluL3B1c2guYzo1NDAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjEKK21zZ2lkICJwdXNoIGFsbCByZWZzIgorbXNnc3RyICJzw6RuZCBhbGxhIHJlZmVyZW5zZXIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MSBidWlsdGluL3NlbmQtcGFjay5jOjE2MworbXNnaWQgIm1pcnJvciBhbGwgcmVmcyIKK21zZ3N0ciAic3BlZ2xhIGFsbGEgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzCittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgInRhIGJvcnQgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ0Cittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICJzw6RuZCB0YWdnYXIgKGthbiBpbnRlIGFudsOkbmRhcyBtZWQgLS1hbGwgZWxsZXIgLS1taXJyb3IpIgorCisjOiBidWlsdGluL3B1c2guYzo1NDcgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjQKK21zZ2lkICJmb3JjZSB1cGRhdGVzIgorbXNnc3RyICJ0dmluZ2EgdXBwZGF0ZXJpbmdhciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAicmVmbmFtZT46PGV4cGVjdCIKK21zZ3N0ciAicmVmbmFtbj46PGbDtnJ2w6RudGEiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1MCBidWlsdGluL3NlbmQtcGFjay5jOjE3NgorbXNnaWQgInJlcXVpcmUgb2xkIHZhbHVlIG9mIHJlZiB0byBiZSBhdCB0aGlzIHZhbHVlIgorbXNnc3RyICJrcsOkdiBhdHQgcmVmOnMgdGlkaWdhcmUgdsOkcmRlIMOkciBkZXR0YSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTUzCittc2dpZCAiY29udHJvbCByZWN1cnNpdmUgcHVzaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICJzdHlyIHJla3Vyc2l2IGluc8OkbmRuaW5nIGF2IHVuZGVybW9kdWxlciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU1IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY5Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAiYW52w6RuZCB0dW5uYSBwYWtldCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU2IGJ1aWx0aW4vcHVzaC5jOjU1NyBidWlsdGluL3NlbmQtcGFjay5jOjE1OAorIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNTkKK21zZ2lkICJyZWNlaXZlIHBhY2sgcHJvZ3JhbSIKK21zZ3N0ciAicHJvZ3JhbSBmw7ZyIGF0dCB0YSBlbW90IHBha2V0IgorCisjOiBidWlsdGluL3B1c2guYzo1NTgKK21zZ2lkICJzZXQgdXBzdHJlYW0gZm9yIGdpdCBwdWxsL3N0YXR1cyIKK21zZ3N0ciAic3TDpGxsIGluIHVwcHN0csO2bSBmw7ZyIGdpdCBwdWxsL3N0YXR1cyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxCittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgInRhIGJvcnQgbG9rYWx0IGJvcnR0YWduYSByZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3B1c2guYzo1NjMKK21zZ2lkICJieXBhc3MgcHJlLXB1c2ggaG9vayIKK21zZ3N0ciAiZsO2cmJpZ8OlIHByZS1wdXNoLWtyb2siCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAic8OkbmQgaW4gc2FrbmFkZSBtZW4gcmVsZXZhbnRhIHRhZ2dhciIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY3IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY2Cittc2dpZCAiR1BHIHNpZ24gdGhlIHB1c2giCittc2dzdHIgIkdQRy1zaWduZXJhIGluc8OkbmRuaW5nZW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2OSBidWlsdGluL3NlbmQtcGFjay5jOjE3MAorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICJiZWfDpHIgYXRvbWlza2EgdHJhbnNha3Rpb25lciBww6UgZmrDpHJyc2lkYW4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3OQorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSDDpHIgaW5rb21wYXRpYmVsIG1lZCAtLWFsbCwgLS1taXJyb3Igb2NoIC0tdGFncyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTgxCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIGthbiBpbnRlIGFudsOkbmRhcyB1dGFuIHJlZmVyZW5zZXIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MzcKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08cHJlZml4PikgIgorIlstdSBbLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9PGdpdGlnbm9yZT5dIHwgLWldXSBbLS1uby1zcGFyc2UtY2hlY2tvdXRdIFstLSIKKyJpbmRleC1vdXRwdXQ9PGZpbD5dICgtLWVtcHR5IHwgPHRyw6RkLWlndDE+IFs8dHLDpGQtaWd0Mj4gWzx0csOkZC1pZ3QzPl1dKSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTAKK21zZ2lkICJ3cml0ZSByZXN1bHRpbmcgaW5kZXggdG8gPGZpbGU+IgorbXNnc3RyICJza3JpdiByZXN1bHRlcmFuZGUgaW5kZXggdGlsbCA8ZmlsPiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTMKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAidMO2bSBiYXJhIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE1Cittc2dpZCAiTWVyZ2luZyIKK21zZ3N0ciAiU2FtbWFuc2xhZ25pbmciCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE3Cittc2dpZCAicGVyZm9ybSBhIG1lcmdlIGluIGFkZGl0aW9uIHRvIGEgcmVhZCIKK21zZ3N0ciAidXRmw7ZyIGVuIHNhbW1hbnNsYWduaW5nIGkgdGlsbMOkZ2cgdGlsbCBlbiBsw6RzbmluZyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTkKK21zZ2lkICIzLXdheSBtZXJnZSBpZiBubyBmaWxlIGxldmVsIG1lcmdpbmcgcmVxdWlyZWQiCittc2dzdHIgIjMtdsOkZ3NzYW1tYW5zbGFnbmluZyBvbSBzYW1tYW5zbGFnbmluZyBww6UgZmlsbml2w6UgZWoga3LDpHZzIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgIjMtdsOkZ3NzYW1tYW5zbGFnbmluZyBuw6RyIGRldCBmaW5ucyB0aWxsw6RnZyBvY2ggYm9ydHRhZ25pbmdhciIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjMKK21zZ2lkICJzYW1lIGFzIC1tLCBidXQgZGlzY2FyZCB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICJzb20gLW0sIG1lbiBrYXN0YSBib3J0IGVqIHNhbW1hbnNsYWduYSBwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI0Cittc2dpZCAiPHN1YmRpcmVjdG9yeT4vIgorbXNnc3RyICI8dW5kZXJrYXRhbG9nPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI1Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgImzDpHMgaW4gdHLDpGRldCBpIGluZGV4ZXQgdW5kZXIgPHVuZGVya2F0YWxvZz4vIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyOAorbXNnaWQgInVwZGF0ZSB3b3JraW5nIHRyZWUgd2l0aCBtZXJnZSByZXN1bHQiCittc2dzdHIgInVwcGRhdGVyYSBhcmJldHNrYXRhbG9nZW4gbWVkIHJlc3VsdGF0ZXQgZnLDpW4gc2FtbWFuc2xhZ25pbmdlbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzAKK21zZ2lkICJnaXRpZ25vcmUiCittc2dzdHIgImdpdGlnbm9yZSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzEKK21zZ2lkICJhbGxvdyBleHBsaWNpdGx5IGlnbm9yZWQgZmlsZXMgdG8gYmUgb3ZlcndyaXR0ZW4iCittc2dzdHIgInRpbGzDpXQgZXhwbGljaXQgaWdub3JlcmFkZSBmaWxlciBhdHQgc2tyaXZhcyDDtnZlciIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzQKK21zZ2lkICJkb24ndCBjaGVjayB0aGUgd29ya2luZyB0cmVlIGFmdGVyIG1lcmdpbmciCittc2dzdHIgImtvbnRyb2xsZXJhIGludGUgYXJiZXRza2F0YWxvZ2VuIGVmdGVyIHNhbW1hbnNsYWduaW5nIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAidXBwZGF0ZXJhIGludGUgaW5kZXhldCBlbGxlciBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM3Cittc2dpZCAic2tpcCBhcHBseWluZyBzcGFyc2UgY2hlY2tvdXQgZmlsdGVyIgorbXNnc3RyICJob3BwYSDDtnZlciBhdHQgYXBwbGljZXJhIGZpbHRlciBmw7ZyIGdsZXMgdXRjaGVja25pbmciCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM5Cittc2dpZCAiZGVidWcgdW5wYWNrLXRyZWVzIgorbXNnc3RyICJmZWxzw7ZrIHVucGFjay10cmVlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIlwiJXNcIiBmw7ZyIFwiJXNcIiDDpHIgaW50ZSBlbiBnaWx0aWcgdGlkc3N0w6RtcGVsIgorCisjOiBidWlsdGluL3JlZmxvZy5jOjU0OSBidWlsdGluL3JlZmxvZy5jOjU1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiXCIlc1wiIMOkciBpbnRlIGVuIGdpbHRpZyB0aWRzc3TDpG1wZWwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxncmVuPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8bmFtbj4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQgYnVpbHRpbi9yZW1vdGUuYzozMworbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA8Z2FtbWFsPiA8bnk+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1IGJ1aWx0aW4vcmVtb3RlLmM6MzgKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDxuYW1uPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNiBidWlsdGluL3JlbW90ZS5jOjQzCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxicmFuY2g+KSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtbj4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8IDxncmVuPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8bmFtbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTgKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbW4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5Cittc2dpZCAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXA+IHwgPHJlbW90ZT4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3J1cHA+IHwgPGZqw6Rycj4pLi4uXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMAorbXNnaWQgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIFstLWFkZF0gPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1uPiA8Z3Jlbj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEgYnVpbHRpbi9yZW1vdGUuYzo2OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1uPiA8bnl1cmw+IFs8Z2FtbWFsdXJsPl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjIgYnVpbHRpbi9yZW1vdGUuYzo3MAorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtZT4gPG5ld3VybD4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCA8bmFtbj4gPG55dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMyBidWlsdGluL3JlbW90ZS5jOjcxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1uPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOAorbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgWzxmbGFnZ29yPl0gPG5hbW4+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ4Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtbj4gPGdyZW4+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtbj4gPGdyZW4+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU0Cittc2dpZCAiZ2l0IHJlbW90ZSBzaG93IFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzaG93IFs8ZmxhZ2dvcj5dIDxuYW1uPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1OQorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWzxvcHRpb25zPl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFs8ZmxhZ2dvcj5dIDxuYW1uPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NAorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPGZsYWdnb3I+XSBbPGdydXBwPiB8IDxmasOkcnI+XS4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAiVXBwZGF0ZXJhciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Igw6RyIGZhcmxpZyBvY2ggZsO2csOlbGRyYWQ7IGFudsOkbmRcbiIKKyJcdCAtLW1pcnJvcj1mZXRjaCBlbGxlciAtLW1pcnJvcj1wdXNoIGlzdMOkbGxldCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJva8OkbnQgYXJndW1lbnQgdGlsbCBtaXJyb3I6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MworbXNnaWQgImZldGNoIHRoZSByZW1vdGUgYnJhbmNoZXMiCittc2dzdHIgImjDpG10YSBmasOkcnJncmVuYXJuYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTUKK21zZ2lkICJpbXBvcnQgYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyB3aGVuIGZldGNoaW5nIgorbXNnc3RyICJpbXBvcnRlcmEgYWxsYSB0YWdnYXIgb2NoIGFzc29jaWVyYWRlIG9iamVrdCB2aWQgaMOkbXRuaW5nIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAiZWxsZXIgaMOkbXRhIGludGUgbsOlZ3JhIHRhZ2dhciBhbGxzICgtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MAorbXNnaWQgImJyYW5jaChlcykgdG8gdHJhY2siCittc2dzdHIgImdyZW4oYXIpIGF0dCBzcMOlcmEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAiaHV2dWRncmVuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MgorbXNnaWQgInB1c2h8ZmV0Y2giCittc2dzdHIgInB1c2h8ZmV0Y2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYzCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgInN0w6RsbCBpbiBhcmtpdiBzb20gc3BlZ2VsIGF0dCBzw6RuZGEgZWxsZXIgdGEgZW1vdCBmcsOlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICJhdHQgYW5nZSBlbiBtYXN0ZXItZ3JlbiBnZXIgaW5nZW4gbWVuaW5nIG1lZCAtLW1pcnJvciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzcKK21zZ2lkICJzcGVjaWZ5aW5nIGJyYW5jaGVzIHRvIHRyYWNrIG1ha2VzIHNlbnNlIG9ubHkgd2l0aCBmZXRjaCBtaXJyb3JzIgorbXNnc3RyICJhdHQgYW5nZSBncmVuYXIgYXR0IHNww6VyYSBnZXIgbWVuaW5nIGJhcmEgbWVkIGjDpG10bmluZ3NzcGVnbGFyIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NyBidWlsdGluL3JlbW90ZS5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJmasOkcnJhcmtpdmV0ICVzIGZpbm5zIHJlZGFuLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOTEgYnVpbHRpbi9yZW1vdGUuYzo2NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCByZW1vdGUgbmFtZSIKK21zZ3N0ciAiXCIlc1wiIMOkciBpbnRlIGV0dCBnaWx0aWd0IG5hbW4gcMOlIGZqw6RycmFya2l2IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgIkt1bmRlIGludGUgc2thcGEgbWFzdGVyIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGdldCBmZXRjaCBtYXAgZm9yIHJlZnNwZWMgJXMiCittc2dzdHIgIkt1bmRlIGludGUgaMOkbXRhIG1hcHBuaW5nIGbDtnIgcmVmZXJlbnNzcGVjaWZpa2F0aW9uICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQzNiBidWlsdGluL3JlbW90ZS5jOjQ0NAorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIihtYXRjaGFuZGUpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0OAorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIodGEgYm9ydCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTg4IGJ1aWx0aW4vcmVtb3RlLmM6NTk0IGJ1aWx0aW4vcmVtb3RlLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyB0byAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIHRpbGzDpG1wYSBcIiVzXCIgcMOlIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MzAgYnVpbHRpbi9yZW1vdGUuYzo3NjkgYnVpbHRpbi9yZW1vdGUuYzo4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICVzIgorbXNnc3RyICJJbmdldCBzw6VkYW50IGZqw6RycmFya2l2OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIkt1bmRlIGludGUgYnl0YSBuYW1uIHDDpSBrb25maWd1cmF0aW9uc3Nla3Rpb25lbiBcIiVzXCIgdGlsbCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjUzIGJ1aWx0aW4vcmVtb3RlLmM6ODIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSB0YSBib3J0IGtvbmZpZ3VyYXRpb25zc2VrdGlvbmVuIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisiVXBwZGF0ZXJhciBpbnRlIGlja2Utc3RhbmRhcmQgaMOkbXRuaW5nc3JlZmVyZW5zc3BlY2lmaWthdGlvblxuIgorIlx0JXNcbiIKKyJcdFVwcGRhdGVyYSBrb25maWd1cmF0aW9uZW4gbWFudWVsbHQgb20gbsO2ZHbDpG5kaWd0LiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGFwcGVuZCAnJXMnIgorbXNnc3RyICJLdW5kZSBpbnRlIGzDpGdnYSB0aWxsIHDDpSBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njg1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXQgJyVzJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzw6R0dGEgXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIGJvcnQgXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHNrYXBhIFwiJXNcIiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDcKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIk9ic2VydmVyYTogRW4gZ3JlbiB1dGFuZsO2ciBoaWVyYXJraW4gcmVmcy9yZW1vdGVzLyB0b2dzIGludGUgYm9ydDtcbiIKKyJmw7ZyIGF0dCB0YSBib3J0IGRlbiwgYW52w6RuZDoiCittc2dzdHJbMV0gIiIKKyJPYnNlcnZlcmE6IE7DpWdyYSBncmVuYXIgdXRhbmbDtnIgaGllcmFya2luIHJlZnMvcmVtb3Rlcy8gdG9ncyBpbnRlIGJvcnQ7XG4iCisiZsO2ciBhdHQgdGEgYm9ydCBkZW0sIGFudsOkbmQ6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBueSAobsOkc3RhIGjDpG10bmluZyBzcGFyYXIgaSByZW1vdGVzLyVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjUKK21zZ2lkICIgdHJhY2tlZCIKK21zZ3N0ciAiIHNww6VyYWQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI3Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiBmw7ZybGVnYWQgKGFudsOkbmQgXCJnaXQgcmVtb3RlIHBydW5lXCIgZsO2ciBhdHQgdGEgYm9ydCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI5Cittc2dpZCAiID8/PyIKK21zZ3N0ciAiID8/PyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBicmFuY2guJXMubWVyZ2U7IGNhbm5vdCByZWJhc2Ugb250byA+IDEgYnJhbmNoIgorbXNnc3RyICJvZ2lsdGlnIGJyYW5jaC4lcy5tZXJnZTsga2FuIGludGUgb21iYXNlcmEgw7Z2ZXIgPiAxIGdyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgIm9tYmFzZXJhcyBww6UgZmrDpHJyZW4gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiBtZXJnZXMgd2l0aCByZW1vdGUgJXMiCittc2dzdHIgIiBzYW1tYW5zbMOlcyBtZWQgZmrDpHJyZW4gJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgxCittc2dpZCAiICAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAgIG9jaCBtZWQgZmrDpHJyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAic2FtbWFuc2zDpXMgbWVkIGZqw6RycmVuICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4NAorbXNnaWQgIiAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAgb2NoIG1lZCBmasOkcnJlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDMwCittc2dpZCAiY3JlYXRlIgorbXNnc3RyICJza2FwYSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDMzCittc2dpZCAiZGVsZXRlIgorbXNnc3RyICJ0YSBib3J0IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzcKK21zZ2lkICJ1cCB0byBkYXRlIgorbXNnc3RyICLDoGpvdXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA0MAorbXNnaWQgImZhc3QtZm9yd2FyZGFibGUiCittc2dzdHIgImthbiBzbmFiYnNwb2xhcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQzCittc2dpZCAibG9jYWwgb3V0IG9mIGRhdGUiCittc2dzdHIgImxva2FsIGbDtnLDpWxkcmFkIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMgdHZpbmdhciB0aWxsICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIHPDpG5kZXIgdGlsbCAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIHR2aW5nYXIgdGlsbCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMgc8OkbmRlciB0aWxsICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjgKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAiZnLDpWdhIGludGUgZmrDpHJyYXIiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiKiBmasOkcnIgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZldGNoIFVSTDogJXMiCittc2dzdHIgIiAgSMOkbXQtVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU3IGJ1aWx0aW4vcmVtb3RlLmM6MTMwOAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIoaW5nZW4gVVJMKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTY2IGJ1aWx0aW4vcmVtb3RlLmM6MTE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAgU8OkbmQtVVJMOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTcwIGJ1aWx0aW4vcmVtb3RlLmM6MTE3MiBidWlsdGluL3JlbW90ZS5jOjExNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBIRUFEIGJyYW5jaDogJXMiCittc2dzdHIgIiAgSEVBRC1ncmVuOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIEhFQUQgYnJhbmNoIChyZW1vdGUgSEVBRCBpcyBhbWJpZ3VvdXMsIG1heSBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyk6XG4iCittc2dzdHIgIiAgSEVBRC1ncmVuIChIRUFEIHDDpSBmasOkcnIgw6RyIHR2ZXR5ZGlnLCBrYW4gdmFyYSBlbiBhdiBmw7ZsamFuZGUpOlxuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBSZW1vdGUgYnJhbmNoOiVzIgorbXNnaWRfcGx1cmFsICIgIFJlbW90ZSBicmFuY2hlczolcyIKK21zZ3N0clswXSAiICBGasOkcnJncmVuOiVzIgorbXNnc3RyWzFdICIgIEZqw6RycmdyZW5hcjolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTkxIGJ1aWx0aW4vcmVtb3RlLmM6MTIxOAorbXNnaWQgIiAoc3RhdHVzIG5vdCBxdWVyaWVkKSIKK21zZ3N0ciAiIChzdGF0dXMgaW50ZSBmw7ZyZnLDpWdhZCkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwMAorbXNnaWQgIiAgTG9jYWwgYnJhbmNoIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6IgorbXNnc3RyWzBdICIgIExva2FsIGdyZW4ga29uZmlndXJlcmFkIGbDtnIgXCJnaXQgcHVsbFwiOiIKK21zZ3N0clsxXSAiICBMb2thbGEgZ3JlbmFyIGtvbmZpZ3VyZXJhZGUgZsO2ciBcImdpdCBwdWxsXCI6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDgKK21zZ2lkICIgIExvY2FsIHJlZnMgd2lsbCBiZSBtaXJyb3JlZCBieSAnZ2l0IHB1c2gnIgorbXNnc3RyICIgIExva2FsYSByZWZlcmVuc2VyIHNwZWdsYXMgYXYgXCJnaXQgcHVzaFwiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgTG9rYWwgcmVmZXJlbnMga29uZmlndXJlcmFkIGbDtnIgXCJnaXQgcHVzaFwiJXM6IgorbXNnc3RyWzFdICIgIExva2FsYSByZWZlcmVuc2VyIGtvbmZpZ3VyZXJhZGUgZsO2ciBcImdpdCBwdXNoXCIlczoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzNgorbXNnaWQgInNldCByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQgYWNjb3JkaW5nIHRvIHJlbW90ZSIKK21zZ3N0ciAic8OkdHQgcmVmcy9yZW1vdGVzLzxuYW1uPi9IRUFEIGVubGlndCBmasOkcnJlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM4Cittc2dpZCAiZGVsZXRlIHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIKK21zZ3N0ciAidGEgYm9ydCByZWZzL3JlbW90ZXMvPG5hbW4+L0hFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MworbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgIkthbiBpbnRlIGJlc3TDpG1tYSBIRUFEIHDDpSBmasOkcnJlbiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjU1Cittc2dpZCAiTXVsdGlwbGUgcmVtb3RlIEhFQUQgYnJhbmNoZXMuIFBsZWFzZSBjaG9vc2Ugb25lIGV4cGxpY2l0bHkgd2l0aDoiCittc2dzdHIgIkZsZXJhIEhFQUQtZ3JlbmFyIHDDpSBmasOkcnJlbi4gVsOkbGogZW4gZXhwbGljaXQgbWVkOiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjY1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZWxldGUgJXMiCittc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgIkludGUgZW4gZ2lsdGlnIHJlZmVyZW5zOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzdMOkbGxhIGluICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIGtvbW1lciBibGkgZGluZ2xhbmRlISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAlcyBoYXMgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIGhhciBibGl2aXQgZGluZ2xhbmRlISIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlBydW5pbmcgJXMiCittc2dzdHIgIlJlbnNhciAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMQorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiBbc2t1bGxlIHJlbnNhXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIgKiBbcmVuc2FkXSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzY5Cittc2dpZCAicHJ1bmUgcmVtb3RlcyBhZnRlciBmZXRjaGluZyIKK21zZ3N0ciAicmVuc2EgZmrDpHJyYXIgZWZ0ZXIgaMOkbXRuaW5nIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0MzUgYnVpbHRpbi9yZW1vdGUuYzoxNTA5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlICclcyciCittc2dzdHIgIkluZ2VuIHPDpWRhbiBmasOkcnIgXCIlc1wiIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NTUKK21zZ2lkICJhZGQgYnJhbmNoIgorbXNnc3RyICJsw6RnZyB0aWxsIGdyZW4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ2MgorbXNnaWQgIm5vIHJlbW90ZSBzcGVjaWZpZWQiCittc2dzdHIgImluZ2VuIGZqw6RyciBhbmdhdnMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4NAorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICJtYW5pcHVsZXJhIFVSTDphciBmw7ZyIHPDpG5kbmluZyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDg2Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4OAorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICJ0YSBib3J0IFVSTDphciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDk1Cittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSBnZXIgaW5nZW4gbWVuaW5nIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBvbGQgVVJMIHBhdHRlcm46ICVzIgorbXNnc3RyICJGZWxha3RpZyBnYW1tYWx0IFVSTC1tw7Zuc3RlcjogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIkluZ2VuIHPDpWRhbiBVUkwgaGl0dGFkZXM6ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NDUKK21zZ2lkICJXaWxsIG5vdCBkZWxldGUgYWxsIG5vbi1wdXNoIFVSTHMiCittc2dzdHIgIktvbW1lciBpbnRlIHRhIGJvcnQgYWxsYSBpY2tlLXPDpG5kLVVSTDplciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU5Cittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAidmFyIHByYXRzYW07IG3DpXN0ZSBza3JpdmFzIGbDtnJlIGV0dCB1bmRlcmtvbW1hbmRvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3Cittc2dpZCAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlcGFjayBbPGZsYWdnb3I+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNTkKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAicGFja2EgYWxsdCBpIGV0dCBlbmRhIHBha2V0IgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2MQorbXNnaWQgInNhbWUgYXMgLWEsIGFuZCB0dXJuIHVucmVhY2hhYmxlIG9iamVjdHMgbG9vc2UiCittc2dzdHIgInNhbW1hIHNvbSAtYSwgb2NoIGfDtnIgb27DpWJhcmEgb2JqZWt0IGzDtnNhIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2NAorbXNnaWQgInJlbW92ZSByZWR1bmRhbnQgcGFja3MsIGFuZCBydW4gZ2l0LXBydW5lLXBhY2tlZCIKK21zZ3N0ciAidGEgYm9ydCDDtnZlcmZsw7ZkaWdhIHBha2V0LCBvY2gga8O2ciBnaXQtcHJ1bmUtcGFja2VkIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2NgorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJzw6RuZCAtLW5vLXJldXNlLWRlbHRhIHRpbGwgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjgKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgInPDpG5kIC0tbm8tcmV1c2Utb2JqZWN0IHRpbGwgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzAKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgImvDtnIgaW50ZSBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3MworbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJzw6RuZCAtLWxvY2FsIHRpbGwgZ2l0LXBhY2stb2JqZWN0cyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzUKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgInNrcml2IGJpdGthcnRpbmRleCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzYKK21zZ2lkICJhcHByb3hpZGF0ZSIKK21zZ3N0ciAiY2lya2FkYXR1bSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzcKK21zZ2lkICJ3aXRoIC1BLCBkbyBub3QgbG9vc2VuIG9iamVjdHMgb2xkZXIgdGhhbiB0aGlzIgorbXNnc3RyICJtZWQgLUEsIGzDtnMgaW50ZSB1cHAgb2JqZWt0IMOkbGRyZSDDpG4gZGV0dGEiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc5Cittc2dpZCAic2l6ZSBvZiB0aGUgd2luZG93IHVzZWQgZm9yIGRlbHRhIGNvbXByZXNzaW9uIgorbXNnc3RyICJzdG9ybGVrIHDDpSBmw7Zuc3RlciBhbnbDpG50IGbDtnIgZGVsdGFrb21wcmltZXJpbmciCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgwIGJ1aWx0aW4vcmVwYWNrLmM6MTg0Cittc2dpZCAiYnl0ZXMiCittc2dzdHIgImJ5dGUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgxCittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgInNhbW1hIHNvbSBvdmFuLCBtZW4gYmVncsOkbnNhIG1pbm5lc3N0b3JsZWtlbiBpc3TDpGxsZXQgZsO2ciBwb3N0YW50YWwiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgzCittc2dpZCAibGltaXRzIHRoZSBtYXhpbXVtIGRlbHRhIGRlcHRoIgorbXNnc3RyICJiZWdyw6Ruc2EgbWF4aW1hbHQgZGVsdGFkanVwIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4NQorbXNnaWQgIm1heGltdW0gc2l6ZSBvZiBlYWNoIHBhY2tmaWxlIgorbXNnc3RyICJtYXhpbWFsIHN0b3JsZWsgcMOlIHZhcmplIHBha2V0ZmlsIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4NworbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICJwYWNrYSBvbSBvYmpla3QgaSBwYWtldCBtw6Rya3RhIG1lZCAua2VlcCIKKworIzogYnVpbHRpbi9yZXBhY2suYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IFwiJXNcIiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MTkKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIDxvYmplY3Q+IDxyZXBsYWNlbWVudD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gPG9iamVrdD4gPGVyc8OkdHRuaW5nPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjAKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVrdD4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8aW5jaGVja25pbmc+IFs8ZsO2csOkbGRlcj4uLi5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMgorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgcmVwbGFjZSAtZCA8b2JqZWt0Pi4uLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgImdpdCByZXBsYWNlIFstLWZvcm1hdD08Zm9ybWF0Pl0gWy1sIFs8bcO2bnN0ZXI+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNSBidWlsdGluL3JlcGxhY2UuYzozNjMgYnVpbHRpbi9yZXBsYWNlLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICJPYmpla3RuYW1uZXQgw6RyIGludGUgZ2lsdGlndDogXCIlc1wiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICJmZWxha3RpZyBzYW1tYW5zbGFnbmluZ3N0YWdnIGkgaW5jaGVja25pbmdlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgImZlbGZvcm1hZCBzYW1tYW5zbGFnbmluZ3N0YWdnIGkgaW5jaGVja25pbmdlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICIiCisiZGVuIHVyc3BydW5nbGlnYSBpbmNoZWNrbmluZ2VuIFwiJXNcIiBpbm5laMOlbGxlciBzYW1tYW5zbGFnbmluZ3N0YWdnZW4gXCIlcyIKKyJcIiBzb20gaGFyIGbDtnJrYXN0YXRzOyBhbnbDpG5kIC0tZWRpdCBpc3TDpGxsZXQgZsO2ciAtLWdyYWZ0IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIG9yaWdpbmFsIGNvbW1pdCAnJXMnIGhhcyBhIGdwZyBzaWduYXR1cmUuIgorbXNnc3RyICJkZW4gdXJzcHJ1bmdsaWdhIGluY2hlY2tuaW5nZW4gXCIlc1wiIGhhciBlbiBncGctc2lnbmF0dXIuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDIKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAic2lnbmF0dXJlbiBrb21tZXIgYXR0IHRhcyBib3J0IGkgZXJzw6R0dG5pbmdzaW5jaGVja25pbmdlbiEiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwOAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgcmVwbGFjZW1lbnQgY29tbWl0IGZvcjogJyVzJyIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgZXJzw6R0dG5pbmdzaW5jaGVja25pbmcgZsO2cjogXCIlc1wiIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzIKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAidmlzYSBlcnPDpHR0bmluZ3NyZWZlcmVuc2VyIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzMKK21zZ2lkICJkZWxldGUgcmVwbGFjZSByZWZzIgorbXNnc3RyICJ0YSBib3J0IGVyc8OkdHRuaW5nc3JlZmVyZW5zZXIiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNAorbXNnaWQgImVkaXQgZXhpc3Rpbmcgb2JqZWN0IgorbXNnc3RyICJyZWRpZ2VyYSBiZWZpbnRsaWd0IG9iamVrdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM1Cittc2dpZCAiY2hhbmdlIGEgY29tbWl0J3MgcGFyZW50cyIKK21zZ3N0ciAiw6RuZHJhIGVuIGluY2hlY2tuaW5ncyBmw7Zyw6RsZHJhciIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM2Cittc2dpZCAicmVwbGFjZSB0aGUgcmVmIGlmIGl0IGV4aXN0cyIKK21zZ3N0ciAiZXJzw6R0dCByZWZlcmVuc2VuIG9tIGRlbiBmaW5ucyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM3Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICJhbnbDpG5kIGludGUgc255Z2cgdmlzbmluZyBhdiBpbm5laMOlbGwgZsO2ciAtLWVkaXQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzOAorbXNnaWQgInVzZSB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiYW52w6RuZCBkZXR0YSBmb3JtYXQiCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTIKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorCisjOiBidWlsdGluL3JlcmVyZS5jOjU3Cittc2dpZCAicmVnaXN0ZXIgY2xlYW4gcmVzb2x1dGlvbnMgaW4gaW5kZXgiCittc2dzdHIgInJlZ2lzdHJlcmEgcmVuYSBsw7ZzbmluZ2FyIGkgaW5kZXhldCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI2Cittc2dpZCAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxjb21taXQ+XSIKK21zZ3N0ciAiIgorImdpdCByZXNldCBbLS1taXhlZCB8IC0tc29mdCB8IC0taGFyZCB8IC0tbWVyZ2UgfCAtLWtlZXBdIFstcV0gWzxpbmNoZWNrbmluZz5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjcKK21zZ2lkICJnaXQgcmVzZXQgWy1xXSA8dHJlZS1pc2g+IFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiZ2l0IHJlc2V0IFstcV0gPHRyw6RkLWlndD4gWy0tXSA8c8O2a3bDpGdhcj4uLi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOAorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHM+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0csOkZC1pZ3Q+XSBbLS1dIFs8c8O2a3bDpGdhcj4uLi5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAiYmxhbmRhZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAic29mdCIKK21zZ3N0ciAibWp1ayIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAiaGFyZCIKK21zZ3N0ciAiaMOlcmQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgIm1lcmdlIgorbXNnc3RyICJzYW1tYW5zbGFnbmluZyIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAia2VlcCIKK21zZ3N0ciAiYmVow6VsbCIKKworIzogYnVpbHRpbi9yZXNldC5jOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIkR1IGhhciBpbnRlIGVuIGdpbHRpZyBIRUFELiIKKworIzogYnVpbHRpbi9yZXNldC5jOjc2Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiBIRUFELiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSB0csOkZGVyIGbDtnIgSEVBRC4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo4MgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mICVzLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBoaXR0YSB0csOkZGVyIGbDtnIgJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIMOkciBudSBww6UgJXMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAiS2FuIGludGUgdXRmw7ZyYSBlbiAlcyDDpXRlcnN0w6RsbG5pbmcgbWl0dCBpIGVuIHNhbW1hbnNsYWduaW5nLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3NgorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgInZhciB0eXN0LCByYXBwb3J0ZXJhIGVuZGFzdCBmZWwiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNzgKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAiw6V0ZXJzdMOkbGwgSEVBRCBvY2ggaW5kZXgiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNzkKK21zZ2lkICJyZXNldCBvbmx5IEhFQUQiCittc2dzdHIgIsOldGVyc3TDpGxsIGVuZGFzdCBIRUFEIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjgxIGJ1aWx0aW4vcmVzZXQuYzoyODMKK21zZ2lkICJyZXNldCBIRUFELCBpbmRleCBhbmQgd29ya2luZyB0cmVlIgorbXNnc3RyICLDpXRlcnN0w6RsbCBIRUFELCBpbmRleCBvY2ggYXJiZXRza2F0YWxvZyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4NQorbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAiw6V0ZXJzdMOkbGwgSEVBRCBtZW4gYmVow6VsbCBsb2thbGEgw6RuZHJpbmdhciIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4OAorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICJyZWdpc3RyZXJhIGVuZGFzdCBhdHQgYm9ydHRhZ25hIHPDtmt2w6RnYXIga29tbWVyIGzDpGdnYXMgdGlsbCBzZW5hcmUiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBzbMOlIHVwcCBcIiVzXCIgc29tIGVuIGdpbHRpZyByZXZpc2lvbi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIgorbXNnc3RyICJLdW5kZSBpbnRlIHNsw6UgdXBwIFwiJXNcIiBzb20gZXR0IGdpbHRpZ3QgdHLDpGQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIyCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICItLXBhdGNoIMOkciBpbmtvbXBhdGliZWwgbWVkIC0te2hhcmQsbWl4ZWQsc29mdH0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzEKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLW1peGVkIHJla29tbWVuZGVyYXMgaW50ZSBtZWQgc8O2a3bDpGdhcjsgYW52w6RuZCBcImdpdCByZXNldCAtLSA8c8O2a3bDpGdhcj5cIi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvICVzIHJlc2V0IHdpdGggcGF0aHMuIgorbXNnc3RyICJLYW4gaW50ZSBnw7ZyYSAlcyDDpXRlcnN0w6RsbG5pbmcgbWVkIHPDtmt2w6RnYXIuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICIlcyDDpXRlcnN0w6RsbG5pbmcgdGlsbMOldHMgaW50ZSBpIGV0dCBuYWtldCBhcmtpdiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0NworbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICItTiBrYW4gZW5kYXN0IGFudsOkbmRhcyBtZWQgLS1taXhlZCIKKworIzogYnVpbHRpbi9yZXNldC5jOjM2NAorbXNnaWQgIlVuc3RhZ2VkIGNoYW5nZXMgYWZ0ZXIgcmVzZXQ6IgorbXNnc3RyICJPa8O2YWRlIMOkbmRyaW5nYXIgZWZ0ZXIgw6V0ZXJzdMOkbGxuaW5nOiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSDDpXRlcnN0w6RsbGEgaW5kZXhmaWxlbiB0aWxsIHZlcnNpb25lbiBcIiVzXCIuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mzc0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIG5ldyBpbmRleCBmaWxlLiIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza3JpdmEgbnkgaW5kZXhmaWwuIgorCisjOiBidWlsdGluL3Jldi1saXN0LmM6MzU0Cittc2dpZCAicmV2LWxpc3QgZG9lcyBub3Qgc3VwcG9ydCBkaXNwbGF5IG9mIG5vdGVzIgorbXNnc3RyICJyZXYtbGlzdCBzdMO2ZGVyIGludGUgdmlzbmluZyBhdiBhbnRlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzYxCittc2dpZCAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dIgorbXNnc3RyICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmd1bWVudD4uLi5dIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2NgorbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAiYmVow6VsbCBcIi0tXCIgc8OkbnQgc29tIGFyZ3VtZW50IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2OAorbXNnaWQgInN0b3AgcGFyc2luZyBhZnRlciB0aGUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudCIKK21zZ3N0ciAic2x1dGEgdG9sa2EgZWZ0ZXIgZsO2cnN0YSBhcmd1bWVudCBzb20gaW50ZSDDpHIgZmxhZ2dhIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM3MQorbXNnaWQgIm91dHB1dCBpbiBzdHVjayBsb25nIGZvcm0iCittc2dzdHIgInV0ZGF0YSBmYXN0IGkgbMOlbmcgZm9ybSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzo1MDIKK21zZ2lkICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgLS1zcS1xdW90ZSBbPGFyZz4uLi5dXG4iCisiICAgb3I6IGdpdCByZXYtcGFyc2UgWzxvcHRpb25zPl0gWzxhcmc+Li4uXVxuIgorIlxuIgorIlJ1biBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBmaXJzdCB1c2FnZS4iCittc2dzdHIgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxmbGFnZ29yPl0gLS0gWzxhcmd1bWVudD4uLi5dXG4iCisiICAgICBlbGxlcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJndW1lbnQ+Li4uXVxuIgorIiAgICAgZWxsZXI6IGdpdCByZXYtcGFyc2UgWzxmbGFnZ29yPl0gWzxhcmd1bWVudD4uLi5dXG4iCisiXG4iCisiS8O2ciBcImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtaFwiIGbDtnIgbWVyIGluZm9ybWF0aW9uIG9tIGRlbiBmw7Zyc3RhICIKKyJ2YXJpYW50ZW4uIgorCisjOiBidWlsdGluL3JldmVydC5jOjIyCittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgWzxmbGFnZ29yPl0gPGluY2hlY2tuaW5nLWlndD4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA8dW5kZXJrb21tYW5kbz4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjgKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzxmbGFnZ29yPl0gPGluY2hlY2tuaW5nLWlndD4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjkKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPHVuZGVya29tbWFuZG8+IgorCisjOiBidWlsdGluL3JldmVydC5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICIlczogJXMga2FuIGludGUgYW52w6RuZGFzIG1lZCAlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MAorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImF2c2x1dGEgcmV2ZXJ0LSBlbGxlciBjaGVycnktcGljay1zZWt2ZW5zIgorCisjOiBidWlsdGluL3JldmVydC5jOjgxCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAiw6V0ZXJ1cHB0YSByZXZlcnQtIGVsbGVyIGNoZXJyeS1waWNrLXNla3ZlbnMiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODIKK21zZ2lkICJjYW5jZWwgcmV2ZXJ0IG9yIGNoZXJyeS1waWNrIHNlcXVlbmNlIgorbXNnc3RyICJhdmJyeXQgcmV2ZXJ0LSBlbGxlciBjaGVycnktcGljay1zZWt2ZW5zIgorCisjOiBidWlsdGluL3JldmVydC5jOjgzCittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgImNoZWNrYSBpbnRlIGluIGF1dG9tYXRpc2t0IgorCisjOiBidWlsdGluL3JldmVydC5jOjg0Cittc2dpZCAiZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgInJlZGlnZXJhIGluY2hlY2tuaW5nc21lZGRlbGFuZGV0IgorCisjOiBidWlsdGluL3JldmVydC5jOjg3Cittc2dpZCAicGFyZW50IG51bWJlciIKK21zZ3N0ciAibnVtbWVyIHDDpSBmw7Zyw6RsZGVyIgorCisjOiBidWlsdGluL3JldmVydC5jOjg5Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgInNhbW1hbnNsYWduaW5nc3N0cmF0ZWdpIgorCisjOiBidWlsdGluL3JldmVydC5jOjkwCittc2dpZCAib3B0aW9uIgorbXNnc3RyICJhbHRlcm5hdGl2IgorCisjOiBidWlsdGluL3JldmVydC5jOjkxCittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAiYWx0ZXJuYXRpdiBmb8yIciBzYW1tYW5zbGFnbmluZ3NzdHJhdGVnaSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDQKK21zZ2lkICJhcHBlbmQgY29tbWl0IG5hbWUiCittc2dzdHIgImzDpGdnIHRpbGwgaW5jaGVja25pbmdzbmFtbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDYKK21zZ2lkICJwcmVzZXJ2ZSBpbml0aWFsbHkgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiYmVow6VsbCBpbmNoZWNrbmluZ2FyIHNvbSBiw7ZyamFyIHNvbSB0b21tYSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgInRpbGzDpXQgaW5jaGVja25pbmdhciBtZWQgdG9tdCBtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwOAorbXNnaWQgImtlZXAgcmVkdW5kYW50LCBlbXB0eSBjb21taXRzIgorbXNnc3RyICJiZWjDpWxsIHJlZHVuZGFudGEsIHRvbW1hIGluY2hlY2tuaW5nYXIiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTEyCittc2dpZCAicHJvZ3JhbSBlcnJvciIKK21zZ3N0ciAicHJvZ3JhbWZlbCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxOTcKK21zZ2lkICJyZXZlcnQgZmFpbGVkIgorbXNnc3RyICJcInJldmVydFwiIG1pc3NseWNrYWRlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMTIKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgIlwiY2hlcnJ5LXBpY2tcIiBtaXNzbHlja2FkZXMiCisKKyM6IGJ1aWx0aW4vcm0uYzoxNworbXNnaWQgImdpdCBybSBbPG9wdGlvbnM+XSBbLS1dIDxmaWxlPi4uLiIKK21zZ3N0ciAiZ2l0IHJtIFs8ZmxhZ2dvcj5dIFstLV0gPGZpbD4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzo2NQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZSAob3Igb25lIG9mIGl0cyBuZXN0ZWQgc3VibW9kdWxlcylcbiIKKyJ1c2VzIGEgLmdpdCBkaXJlY3Rvcnk6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzIChvciBvbmUgb2YgdGhlaXIgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisidXNlIGEgLmdpdCBkaXJlY3Rvcnk6IgorbXNnc3RyWzBdICIiCisiZsO2bGphbmRlIHVuZGVybW9kdWwgKGVsbGVyIGVuIGF2IGRlc3MgbsOkc3RsYWRlIHVuZGVybW9kdWxlcilcbiIKKyJhbnbDpG5kZXIgZW4gLmdpdC1rYXRhbG9nOiIKK21zZ3N0clsxXSAiIgorImbDtmxqYW5kZSB1bmRlcm1vZHVsZXIgKGVsbGVyIGVuIGF2IGRlcmFzIG7DpHN0bGFkZSB1bmRlcm1vZHVsZXIpXG4iCisiYW52w6RuZGVyIGVuIC5naXQta2F0YWxvZzoiCisKKyM6IGJ1aWx0aW4vcm0uYzo3MQorbXNnaWQgIiIKKyJcbiIKKyIodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyJcbiIKKyIoYW52w6RuZCBcInJtIC1yZlwiIG9tIGR1IHZlcmtsaWdlbiB2aWxsIHRhIGJvcnQgZGVuIG9jaCBhbGwgZGVzcyBoaXN0b3JpaykiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzAKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorImbDtmxqYW5kZSBmaWwgaGFyIGvDtmF0IGlubmVow6VsbCBzb20gc2tpbGplciBzaWcgYsOlZGUgZnLDpW4gZmlsZW4gb2NoIEhFQUQ6IgorbXNnc3RyWzFdICIiCisiZsO2bGphbmRlIGZpbGVyIGhhciBrw7ZhdCBpbm5laMOlbGwgc29tIHNraWxqZXIgc2lnIGLDpWRlIGZyw6VuIGZpbGVuIG9jaCBIRUFEOiIKKworIzogYnVpbHRpbi9ybS5jOjIzNQorbXNnaWQgIiIKKyJcbiIKKyIodXNlIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorbXNnc3RyICIiCisiXG4iCisiKGFudsOkbmQgLWYgZsO2ciBhdHQgdHZpbmdhIGJvcnR0YWduaW5nKSIKKworIzogYnVpbHRpbi9ybS5jOjIzOQorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gImbDtmxqYW5kZSBmaWwgaGFyIMOkbmRyaW5nYXIga8O2YWRlIGkgaW5kZXhldDoiCittc2dzdHJbMV0gImbDtmxqYW5kZSBmaWxlciBoYXIgw6RuZHJpbmdhciBrw7ZhZGUgaSBpbmRleGV0OiIKKworIzogYnVpbHRpbi9ybS5jOjI0MyBidWlsdGluL3JtLmM6MjU0Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyIoYW52w6RuZCAtLWNhY2hlZCBmw7ZyIGF0dCBiZWjDpWxsYSBmaWxlbiBlbGxlciAtZiBmw7ZyIGF0dCB0dmluZ2EgYm9ydHRhZ25pbmcpIgorCisjOiBidWlsdGluL3JtLmM6MjUxCittc2dpZCAidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnc3RyWzBdICJmw7ZsamFuZGUgZmlsIGhhciBsb2thbGEgw6RuZHJpbmdhcjoiCittc2dzdHJbMV0gImbDtmxqYW5kZSBmaWxlciBoYXIgbG9rYWxhIMOkbmRyaW5nYXI6IgorCisjOiBidWlsdGluL3JtLmM6MjY5Cittc2dpZCAiZG8gbm90IGxpc3QgcmVtb3ZlZCBmaWxlcyIKK21zZ3N0ciAibGlzdGEgaW50ZSBib3J0dGFnbmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzAKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAidGEgYmFyYSBib3J0IGZyw6VuIGluZGV4ZXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzEKK21zZ2lkICJvdmVycmlkZSB0aGUgdXAtdG8tZGF0ZSBjaGVjayIKK21zZ3N0ciAiw7Z2ZXJzdHlyIMOgam91ci10ZXN0ZXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzIKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAidGlsbMOldCByZWt1cnNpdiBib3J0dGFnbmluZyIKKworIzogYnVpbHRpbi9ybS5jOjI3NAorbXNnaWQgImV4aXQgd2l0aCBhIHplcm8gc3RhdHVzIGV2ZW4gaWYgbm90aGluZyBtYXRjaGVkIgorbXNnc3RyICJhdnNsdXRhIG1lZCBub2xsc3RhdHVzIMOkdmVuIG9tIGluZ2V0IHRyw6RmZmFkZXMiCisKKyM6IGJ1aWx0aW4vcm0uYzozMTcKK21zZ2lkICJQbGVhc2UsIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJLw7ZhIGRpbmEgw6RuZHJpbmdhciBpIC5naXRtb2R1bGVzIGVsbGVyIGFudsOkbmQgXCJzdGFzaFwiIGbDtnIgYXR0IGZvcnRzw6R0dGEiCisKKyM6IGJ1aWx0aW4vcm0uYzozMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHJlbW92aW5nICclcycgcmVjdXJzaXZlbHkgd2l0aG91dCAtciIKK21zZ3N0ciAidGFyIGludGUgYm9ydCBcIiVzXCIgcmVrdXJzaXZ0IHV0YW4gLXIiCisKKyM6IGJ1aWx0aW4vcm0uYzozNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IHJtOiB1bmFibGUgdG8gcmVtb3ZlICVzIgorbXNnc3RyICJnaXQgcm06IGthbiBpbnRlIHRhIGJvcnQgJXMiCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTgKK21zZ2lkICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs8aG9zdD46XTxkaXJlY3Rvcnk+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBhbmQgZXhwbGljaXQgPHJlZj4gc3BlY2lmaWNhdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPHbDpHJkPjpdPGthdGFsb2c+ICIKKyJbPHJlZj4uLi5dXG4iCisiICAtLWFsbCBvY2ggZXhwbGljaXQgYW5naXZlbiA8cmVmPiDDpHIgw7Ztc2VzaWRpZ3QgdXRlc2x1dGFuZGUuIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE2MAorbXNnaWQgInJlbW90ZSBuYW1lIgorbXNnc3RyICJmasOkcnJuYW1uIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MQorbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICJhbnbDpG5kIHRpbGxzdMOlbmRzbMO2c3QgUlBDLXByb3Rva29sbCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAibMOkcyByZWZlcmVuc2VyIGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgInZpc2Egc3RhdHVzIGZyw6VuIGZqw6Rycmhqw6RscGFyZSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjEzCittc2dpZCAiZ2l0IHNob3J0bG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSBbPHBhdGg+Li4uXV0iCittc2dzdHIgImdpdCBzaG9ydGxvZyBbPGZsYWdnb3I+XSBbPHZlcnNpb25zaW50ZXJ2YWxsPl0gW1stLV0gPHPDtmt2w6RnPi4uLl0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWlzc2luZyBhdXRob3I6ICVzIgorbXNnc3RyICJGw7ZyZmF0dGFyZSBzYWtuYXM6ICVzIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjMwCittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICJzb3J0ZXJhIHV0ZGF0YSBlbmxpZ3QgYW50YWwgaW5jaGVja25pbmdhciBwZXIgZsO2cmZhdHRhcmUiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzIKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiVW5kZXJ0cnljayBiZXNrcml2bmluZ2FyLCB2aXNhIGJhcmEgYW50YWwgaW5jaGVja25pbmdhciIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzNAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIlZpc2EgZS1wb3N0YWRyZXNzIGbDtnIgdmFyamUgZsO2cmZhdHRhcmUiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzUKK21zZ2lkICJ3WyxpMVssaTJdXSIKK21zZ3N0ciAid1ssaTFbLGkyXV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzYKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIlJhZGJyeXQgdXRkYXRhIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6OQorbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PG7DpHI+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxtw7Zuc3Rlcj4pLi4uXSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjEzCittc2dpZCAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8YmFzZT5dXSBbLS1saXN0XSBbPHJlZj5dIgorbXNnc3RyICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXM+XV0gWy0tbGlzdF0gWzxyZWY+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAidmlzYSBmasOkcnJzcMOlcmFuZGUgb2NoIGxva2FsYSBncmVuYXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjEKK21zZ2lkICJzaG93IHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAidmlzYSBmasOkcnJzcMOlcmFuZGUgZ3JlbmFyIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYzCittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAiZsOkcmdhIFwiKiErLVwiIGVubGlndCBncmVuZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjUKK21zZ2lkICJzaG93IDxuPiBtb3JlIGNvbW1pdHMgYWZ0ZXIgdGhlIGNvbW1vbiBhbmNlc3RvciIKK21zZ3N0ciAidmlzYSA8bj4geXR0ZXJsaWdhcmUgaW5jaGVja25pbmdhciBlZnRlciBnZW1lbnNhbSBhbmZhZGVyIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICJzeW5vbnltIHRpbGwgbW9yZT0tMSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2OAorbXNnaWQgInN1cHByZXNzIG5hbWluZyBzdHJpbmdzIgorbXNnc3RyICJ1bmRlcnR5Y2sgbmFtbnN0csOkbmdhciIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MAorbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJpbmtsdWRlcmEgYWt0dWVsbCBncmVuIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcyCittc2dpZCAibmFtZSBjb21taXRzIHdpdGggdGhlaXIgb2JqZWN0IG5hbWVzIgorbXNnc3RyICJuYW1uZ2UgaW5jaGVja25pbmdhciBtZWQgZGVyYXMgb2JqZWt0bmFtbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgInZpc2EgbcO2amxpZ2Egc2FtbWFuc2xhZ25pbmdzYmFzZXIiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzYKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICJ2aXNhIHJlZmVyZW5zZXIgc29tIGludGUga2FuIG7DpXMgZnLDpW4gbsOlZ29uIGFubmFuIHJlZmVyZW5zIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc4Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICJ2aXNhIGluY2hlY2tuaW5nYXIgaSB0b3BvbG9naXNrIG9yZG5pbmciCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODEKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgaW5jaGVja25pbmdhciBpbnRlIHDDpSBkZW4gZsO2cnN0YSBncmVuZW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODMKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgInZpc2Egc2FtbWFuc2xhZ25pbmdhciBzb20gZW5kYXN0IGthbiBuw6VzIGZyw6VuIGVuIHNwZXRzIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njg1Cittc2dpZCAidG9wb2xvZ2ljYWxseSBzb3J0LCBtYWludGFpbmluZyBkYXRlIG9yZGVyIHdoZXJlIHBvc3NpYmxlIgorbXNnc3RyICJzb3J0ZXJhIHRvcG9sb2dpc2t0LCBiZWjDpWxsIGRhdHVtb3JkbmluZyBuw6RyIG3DtmpsaWd0IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njg4Cittc2dpZCAiPG4+Wyw8YmFzZT5dIgorbXNnc3RyICI8bj5bLDxiYXM+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4OQorbXNnaWQgInNob3cgPG4+IG1vc3QgcmVjZW50IHJlZi1sb2cgZW50cmllcyBzdGFydGluZyBhdCBiYXNlIgorbXNnc3RyICJ2aXNhIDxuPiBueWFzdGUgcmVmbG9nZ3Bvc3RlciBtZWQgYsO2cmphbiBww6UgYmFzIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTAKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzxtw7Zuc3Rlcj4uLi5dIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTEKK21zZ2lkICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz1wYXR0ZXJuXSA8IHJlZi1saXN0IgorbXNnc3RyICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz1tw7Zuc3Rlcl0gPCByZWZsaXN0YSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3MAorbXNnaWQgIm9ubHkgc2hvdyB0YWdzIChjYW4gYmUgY29tYmluZWQgd2l0aCBoZWFkcykiCittc2dzdHIgInZpc2EgZW5kYXN0IHRhZ2dhciAoa2FuIGtvbWJpbmVyYXMgbWVkIGh1dnVkZW4pIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcxCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAidmlzYSBlbmRhc3QgaHV2dWRlbiAoa2FuIGtvbWJpbmVyYXMgbWVkIHRhZ2dhcikiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzIKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICJzdHJpa3RhcmUgcmVmZXJlbnNrb250cm9sbCwga3LDpHZlciBleGFrdCByZWZlcmVuc3PDtmt2w6RnIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc1IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzcKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgInZpc2EgSEVBRC1yZWZyZW5zLCDDpHZlbiBuw6RyIGRlbiBza3VsbGUgZmlsdHJlcmFzIHV0IgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc5Cittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbnRvIG9iamVjdCBJRHMiCittc2dzdHIgImF2cmVmZXJlcmEgdGFnZ2FyIHRpbGwgb2JqZWt0LWlkIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTgxCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICJ2aXNhIFNIQTEtaGFzaCBlbmRhc3QgbWVkIDxuPiBzaWZmcm9yIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTg1Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgInZpc2EgaW50ZSByZXN1bHRhdCBww6Ugc3RhbmRhcmQgdXQgKGFudsOkbmRiYXJ0IG1lZCAtLXZlcmlmeSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODcKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICJ2aXNhIHJlZmVyZW5zZXIgZnLDpW4gc3RhbmRhcmQgaW4gc29tIGludGUgZmlubnMgaSBsb2thbHQgYXJraXYiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NworbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgWzxmbGFnZ29yPl0gPG5hbW4+IFs8cmVmPl0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtbj4iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICIiCisidW5kZXJ0cnljayBmZWxtZWRkZWxhbmRlbiBmw7ZyIGlja2Utc3ltYm9saXNrYSAoZnLDpW5rb3BwbGFkZSkgcmVmZXJlbnNlciIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MQorbXNnaWQgImRlbGV0ZSBzeW1ib2xpYyByZWYiCittc2dzdHIgInRhIGJvcnQgc3ltYm9saXNrIHJlZmVyZW5zIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQyCittc2dpZCAic2hvcnRlbiByZWYgb3V0cHV0IgorbXNnc3RyICJmw7Zya29ydGEgcmVmLXV0ZGF0YSIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjIKK21zZ2lkICJyZWFzb24iCittc2dzdHIgInNrw6RsIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQzIGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MgorbXNnaWQgInJlYXNvbiBvZiB0aGUgdXBkYXRlIgorbXNnc3RyICJza8OkbCB0aWxsIHVwcGRhdGVyaW5nZW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjIKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl0gPHRhZ25hbWU+ICIKKyJbPGhlYWQ+XSIKK21zZ3N0ciAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8bnlja2VsLWlkPl0gWy1mXSBbLW0gPG1lZGQ+IHwgLUYgPGZpbD5dIDx0YWdnbmFtbj4gIgorIls8aHV2dWQ+XSIKKworIzogYnVpbHRpbi90YWcuYzoyMworbXNnaWQgImdpdCB0YWcgLWQgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC1kIDx0YWdnbmFtbj4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjQKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tcG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorIlx0XHRbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzxhbnRhbD5dXSBbLS1jb250YWlucyA8aW5jaGVja25pbmc+XSBbLS1wb2ludHMtYXQgPG9iamVrdD5dXG4iCisiXHRcdFs8bcO2bnN0ZXI+Li4uXSIKKworIzogYnVpbHRpbi90YWcuYzoyNgorbXNnaWQgImdpdCB0YWcgLXYgPHRhZ25hbWU+Li4uIgorbXNnc3RyICJnaXQgdGFnIC12IDx0YWdnbmFtbj4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICJmZWxmb3JtYXQgb2JqZWt0IHZpZCBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorbXNnc3RyICJ0YWdnbmFtbmV0IGbDtnIgbMOlbmd0OiAlLipzLi4uIgorCisjOiBidWlsdGluL3RhZy5jOjMwNgorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJ0YWdnZW4gXCIlc1wiIGhpdHRhZGVzIGludGUuIgorCisjOiBidWlsdGluL3RhZy5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIlRvZyBib3J0IHRhZ2cgXCIlc1wiICh2YXIgJXMpXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB2ZXJpZnkgdGhlIHRhZyAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIGJla3LDpGZ0YSB0YWdnZW4gXCIlc1wiIgorCisjOiBidWlsdGluL3RhZy5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJTa3JpdiBldHQgbWVkZGVsYW5kZSBmw7ZyIHRhZ2dlbjpcbiIKKyIgICVzXG4iCisiUmFkZXIgc29tIGlubGVkcyBtZWQgXCIlY1wiIGlnbm9yZXJhcy5cbiIKKworIzogYnVpbHRpbi90YWcuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBrZXB0OyB5b3UgbWF5IHJlbW92ZSB0aGVtIHlvdXJzZWxmIGlmIHlvdSAiCisid2FudCB0by5cbiIKK21zZ3N0ciAiIgorIlxuIgorIlNrcml2IGV0dCBtZWRkZWxhbmRlIGbDtnIgdGFnZ2VuOlxuIgorIiAgJXNcbiIKKyJSYWRlciBzb20gaW5sZWRzIG1lZCBcIiVjXCIga29tbWVyIGJlaMOlbGxhczsgZHUga2FuIHNqw6RsdiB0YSBib3J0IGRlbSBvbVxuIgorImR1IHZpbGwuXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzcxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHNvcnQgc3BlY2lmaWNhdGlvbiAnJXMnIgorbXNnc3RyICJzb3J0ZXJpbmdzYW5naXZlbHNlbiBcIiVzXCIgc3TDtmRzIGVqIgorCisjOiBidWlsdGluL3RhZy5jOjM3MworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBzb3J0IHNwZWNpZmljYXRpb24gJyVzJyBpbiB2YXJpYWJsZSAnJXMnIgorbXNnc3RyICJzb3J0ZXJpbmdzYW5naXZlbHNlbiBcIiVzXCIgaSB2YXJpYWJlbG4gXCIlc1wiIHN0w7ZkcyBlaiIKKworIzogYnVpbHRpbi90YWcuYzo0MjgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNpZ25lcmEgdGFnZ2VuIgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAia3VuZGUgaW50ZSBza3JpdmEgdGFnZy1maWxlbiIKKworIzogYnVpbHRpbi90YWcuYzo0NTUKK21zZ2lkICJiYWQgb2JqZWN0IHR5cGUuIgorbXNnc3RyICJmZWxha3RpZyBvYmpla3R0eXAiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDY4Cittc2dpZCAidGFnIGhlYWRlciB0b28gYmlnLiIKK21zZ3N0ciAidGFnZ2h1dnVkIGbDtnIgc3RvcnQuIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAiaW5nZXQgdGFnZ21lZGRlbGFuZGU/IgorCisjOiBidWlsdGluL3RhZy5jOjUxMAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgdGFnIG1lc3NhZ2UgaGFzIGJlZW4gbGVmdCBpbiAlc1xuIgorbXNnc3RyICJUYWdnbWVkZGVsYW5kZXQgaGFyIGzDpG1uYXRzIGkgJXNcbiIKKworIzogYnVpbHRpbi90YWcuYzo1NTkKK21zZ2lkICJzd2l0Y2ggJ3BvaW50cy1hdCcgcmVxdWlyZXMgYW4gb2JqZWN0IgorbXNnc3RyICJmbGFnZ2FuIFwicG9pbnRzLWF0XCIgYmVow7Z2ZXIgZXR0IG9iamVrdCIKKworIzogYnVpbHRpbi90YWcuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgImZlbGZvcm1hdCBvYmpla3RuYW1uIFwiJXNcIiIKKworIzogYnVpbHRpbi90YWcuYzo1OTAKK21zZ2lkICJsaXN0IHRhZyBuYW1lcyIKK21zZ3N0ciAibGlzdGEgdGFnZ25hbW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTkyCittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgInZpc2EgPG4+IHJhZGVyIGZyw6VuIHZhcmplIHRhZ2dtZWRkZWxhbmRlIgorCisjOiBidWlsdGluL3RhZy5jOjU5NAorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICJ0YSBib3J0IHRhZ2dhciIKKworIzogYnVpbHRpbi90YWcuYzo1OTUKK21zZ2lkICJ2ZXJpZnkgdGFncyIKK21zZ3N0ciAidmVyaWZpZXJhIHRhZ2dhciIKKworIzogYnVpbHRpbi90YWcuYzo1OTcKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGF0dCBza2FwYSB0YWdnYXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTk5Cittc2dpZCAiYW5ub3RhdGVkIHRhZywgbmVlZHMgYSBtZXNzYWdlIgorbXNnc3RyICJhbm5vdGVyYWQgdGFnZywgYmVow7Z2ZXIgbWVkZGVsYW5kZSIKKworIzogYnVpbHRpbi90YWcuYzo2MDEKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAidGFnZ21lZGRlbGFuZGUiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAzCittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAiYW5ub3RlcmFkIG9jaCBHUEctc2lnbmVyYWQgdGFnZyIKKworIzogYnVpbHRpbi90YWcuYzo2MDcKK21zZ2lkICJ1c2UgYW5vdGhlciBrZXkgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJhbnbDpG5kIGFubmFuIG55Y2tlbCBmw7ZyIGF0dCBzaWduZXJhIHRhZ2dlbiIKKworIzogYnVpbHRpbi90YWcuYzo2MDgKK21zZ2lkICJyZXBsYWNlIHRoZSB0YWcgaWYgZXhpc3RzIgorbXNnc3RyICJlcnPDpHR0IHRhZ2dlbiBvbSBkZW4gZmlubnMiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjA5IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2OAorbXNnaWQgImNyZWF0ZV9yZWZsb2ciCittc2dzdHIgImNyZWF0ZV9yZWZsb2ciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjExCittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiQWx0ZXJuYXRpdiBmw7ZyIGxpc3RuaW5nIGF2IHRhZ2dhciIKKworIzogYnVpbHRpbi90YWcuYzo2MTIKK21zZ2lkICJzaG93IHRhZyBsaXN0IGluIGNvbHVtbnMiCittc2dzdHIgImxpc3RhIHRhZ2dhciBpIHNwYWx0ZXIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjE0Cittc2dpZCAic29ydCB0YWdzIgorbXNnc3RyICJzb3J0ZXJhIHRhZ2dhciIKKworIzogYnVpbHRpbi90YWcuYzo2MTkgYnVpbHRpbi90YWcuYzo2MjUKK21zZ2lkICJwcmludCBvbmx5IHRhZ3MgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgInZpc2EgZW5kYXN0IHRhZ2dhciBzb20gaW5uZWjDpWxsZXIgaW5jaGVja25pbmdlbiIKKworIzogYnVpbHRpbi90YWcuYzo2MzEKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAidmlzYSBlbmRhc3QgdGFnZ2FyIGbDtnIgb2JqZWt0ZXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjU3Cittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIG9jaCAtbiDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL3RhZy5jOjY2OQorbXNnaWQgIi0tc29ydCBhbmQgLW4gYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1zb3J0IG9jaCAtbiDDpHIgaW5rb21wYXRpYmxhIgorCisjOiBidWlsdGluL3RhZy5jOjY3NgorbXNnaWQgIi1uIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgIkZsYWdnYW4gLW4gw6RyIGVuZGFzdCB0aWxsw6V0ZW4gdGlsbHNhbW1hbnMgbWVkIC1sLiIKKworIzogYnVpbHRpbi90YWcuYzo2NzgKK21zZ2lkICItLWNvbnRhaW5zIG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgIkZsYWdnYW4gLS1jb250YWlucyDDpHIgZW5kYXN0IHRpbGzDpXRlbiB0aWxsc2FtbWFucyBtZWQgLWwiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjgwCittc2dpZCAiLS1wb2ludHMtYXQgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAiRmxhZ2dhbiAtLXBvaW50cy1hdCDDpHIgZW5kYXN0IHRpbGzDpXRlbiB0aWxsc2FtbWFucyBtZWQgLWwuIgorCisjOiBidWlsdGluL3RhZy5jOjY4OAorbXNnaWQgIm9ubHkgb25lIC1GIG9yIC1tIG9wdGlvbiBpcyBhbGxvd2VkLiIKK21zZ3N0ciAiZW5kYXN0IGVuIGF2IGZsYWdnb3JuYSAtRiBlbGxlciAtbSB0aWxsw6V0cy4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzA4Cittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICJmw7ZyIG3DpW5nYSBwYXJhbWV0cmFyIgorCisjOiBidWlsdGluL3RhZy5jOjcxNAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHRhZyBuYW1lLiIKK21zZ3N0ciAiXCIlc1wiIMOkciBpbnRlIGV0dCBnaWx0aWd0IHRhZ2duYW1uLiIKKworIzogYnVpbHRpbi90YWcuYzo3MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgInRhZ2dlbiBcIiVzXCIgZmlubnMgcmVkYW4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzQ0CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0ZWQgdGFnICclcycgKHdhcyAlcylcbiIKK21zZ3N0ciAiVXBwZGF0ZXJhZCB0YWdnIFwiJXNcIiAodmFyICVzKVxuIgorCisjOiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NDkwCittc2dpZCAiVW5wYWNraW5nIG9iamVjdHMiCittc2dzdHIgIlBhY2thciB1cHAgb2JqZWt0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgc2thcGEga2F0YWxvZ2VuICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzdGF0ICVzIgorbXNnc3RyICJtaXNzbHlja2FkZXMgdGEgc3RhdHVzIHDDpSAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyBza2FwYSBmaWxlbiAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGZpbGUgJXMiCittc2dzdHIgIm1pc3NseWNrYWRlcyB0YSBib3J0IGZpbGVuICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMSBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZGVsZXRlIGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIGJvcnQga2F0YWxvZ2VuICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nICIKK21zZ3N0ciAiVGVzdGFyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEzNgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICJzdGF0LWluZm9ybWF0aW9uZW4gZsO2ciBlbiBrYXRhbG9nIMOkbmRyYXMgaW50ZSBuw6RyIG55YSBmaWxlciBsw6RnZ3MgdGlsbCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNDkKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBhZGRpbmcgYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICIiCisic3RhdC1pbmZvcm1hdGlvbmVuIGbDtnIgZW4ga2F0YWxvZyDDpG5kcmFzIGludGUgbsOkciBueWEga2F0YWxvZ2VyIGzDpGdncyB0aWxsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2MgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgInN0YXQtaW5mb3JtYXRpb25lbiBmw7ZyIGVuIGthdGFsb2cgw6RuZHJhcyBuw6RyIGZpbGVyIHVwcGRhdGVyYXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTczCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIGFkZGluZyBhIGZpbGUgaW5zaWRlIHN1YmRpcmVjdG9yeSIKK21zZ3N0ciAiIgorInN0YXQtaW5mb3JtYXRpb25lbiBmw7ZyIGVuIGthdGFsb2cgw6RuZHJhcyBuw6RyIGZpbGVyIGzDpGdncyB0aWxsIGkgZW4gIgorInVuZGVya2F0YWxvZyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxODQKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGRvZXMgbm90IGNoYW5nZSBhZnRlciBkZWxldGluZyBhIGZpbGUiCittc2dzdHIgInN0YXQtaW5mb3JtYXRpb25lbiBmw7ZyIGVuIGthdGFsb2cgw6RuZHJhcyBpbnRlIG7DpHIgZW4gZmlsIHRhcyBib3J0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICJzdGF0LWluZm9ybWF0aW9uZW4gZsO2ciBlbiBrYXRhbG9nIMOkbmRyYXMgaW50ZSBuw6RyIGVuIGthdGFsb2cgdGFzIGJvcnQiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjA0Cittc2dpZCAiIE9LIgorbXNnc3RyICIgT0siCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTY0Cittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs8ZmxhZ2dvcj5dIFstLV0gWzxmaWw+Li4uXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MTgKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgImZvcnRzw6R0dCB1cHBkYXRlcmEgw6R2ZW4gbsOkciBpbmRleCBpbnRlIMOkciDDoGpvdXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTIxCittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgInJlZnJlc2g6IGlnbm9yZXJhIHVuZGVybW9kdWxlciIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MjQKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAiaWdub3JlcmEgaW50ZSBueWEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI2Cittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgImzDpXQgZmlsZXIgZXJzw6R0dGEga2F0YWxvZ2VyIG9jaCBvbXbDpG50IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyOAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImzDpGdnIG3DpHJrZSB0aWxsIGZpbGVyIHNvbSBzYWtuYXMgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTMwCittc2dpZCAicmVmcmVzaCBldmVuIGlmIGluZGV4IGNvbnRhaW5zIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgInVwcGRhdGVyYSDDpHZlbiBvbSBpbmRleGV0IGlubmVow6VsbGVyIGVqIHNhbW1hbnNsYWduYSBwb3N0ZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTMzCittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICJ1cHBkYXRlcmEgc3RhdHVzaW5mb3JtYXRpb24iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTM3Cittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICJzb20gLS1yZWZyZXNoLCBtZW4gaWdub3JlcmEgYXNzdW1lLXVuY2hhbmdlZC1pbnN0w6RsbG5pbmciCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQxCittc2dpZCAiPG1vZGU+LDxvYmplY3Q+LDxwYXRoPiIKK21zZ3N0ciAiPGzDpGdlPiw8b2JqZWt0Piw8c8O2a3bDpGc+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0MgorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAibMOkZ2cgdGlsbCBhbmdpdmVuIHBvc3QgaSBpbmRleGV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NgorbXNnaWQgIigrLy0peCIKK21zZ3N0ciAiKCsvLSl4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NworbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICLDtnZlcnN0eXIgZXhla3ZlcmluZ3NiaXRlbiBmw7ZyIGFuZ2l2bmEgZmlsZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTUxCittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICJtYXJrZXJhIGZpbGVyIHNvbSBcIsOkbmRyYXMgaW50ZVwiIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk1NAorbXNnaWQgImNsZWFyIGFzc3VtZWQtdW5jaGFuZ2VkIGJpdCIKK21zZ3N0ciAicmVuc2EgXCJhc3N1bWUtdW5jaGFuZ2VkXCItYml0ZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU3Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAibWFya2VyYSBmaWxlciBzb20gXCJlbmRhc3QgaW5kZXhcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjAKK21zZ2lkICJjbGVhciBza2lwLXdvcmt0cmVlIGJpdCIKK21zZ3N0ciAidMO2bSBcInNraXAtd29ya3RyZWVcIi1iaXRlbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjMKK21zZ2lkICJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAibMOkZ2cgZW5kYXN0IHRpbGwgaW5kZXhldDsgbMOkZ2cgaW50ZSB0aWxsIGlubmVow6VsbGV0IGkgb2JqZWt0ZGF0YWJhc2VuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2NQorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgInRhIGJvcnQgbmFtbmdpdm5hIHPDtmt2w6RnYXIgw6R2ZW4gb20gZGUgZmlubnMgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY3Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICJtZWQgLS1zdGRpbjogaW5kYXRhcmFkZXIgdGVybWluZXJhcyBtZWQgbnVsbC1ieXRlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2OQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImzDpHMgbGlzdGEgw7Z2ZXIgc8O2a3bDpGdhciBhdHQgdXBwZGF0ZXJhIGZyw6VuIHN0YW5kYXJkIGluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3MworbXNnaWQgImFkZCBlbnRyaWVzIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGluZGV4IgorbXNnc3RyICJsw6RnZyBwb3N0ZXIgZnLDpW4gc3RhbmRhcmQgaW4gdGlsbCBpbmRleGV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAiw6V0ZXJmeWxsIGV0YXBwIDIgb2NoIDMgZnLDpW4gYW5naXZuYSBzw7ZrdsOkZ2FyIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4MQorbXNnaWQgIm9ubHkgdXBkYXRlIGVudHJpZXMgdGhhdCBkaWZmZXIgZnJvbSBIRUFEIgorbXNnc3RyICJ1cHBkYXRlcmEgZW5kYXN0IHBvc3RlciBzb20gc2tpbGplciBzaWcgZnLDpW4gSEVBRCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODUKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICJpZ25vcmVyYSBmaWxlciBzb20gc2FrbmFzIGkgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4OAorbXNnaWQgInJlcG9ydCBhY3Rpb25zIHRvIHN0YW5kYXJkIG91dHB1dCIKK21zZ3N0ciAicmFwcG9ydGVyYSDDpXRnw6RyZGVyIHDDpSBzdGFuZGFyZCB1dCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTAKK21zZ2lkICIoZm9yIHBvcmNlbGFpbnMpIGZvcmdldCBzYXZlZCB1bnJlc29sdmVkIGNvbmZsaWN0cyIKK21zZ3N0ciAiKGbDtnIgcG9yc2xpbikgZ2zDtm0gc3BhcmFkZSBvbMO2c3RhIGtvbmZsaWt0ZXIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk0Cittc2dpZCAid3JpdGUgaW5kZXggaW4gdGhpcyBmb3JtYXQiCittc2dzdHIgInNrcml2IGluZGV4IGkgZGV0dGEgZm9ybWF0IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NgorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICJha3RpdmVyYSBlbGxlciBpbmFrdGl2ZXJhIGRlbGF0IGluZGV4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5OAorbXNnaWQgImVuYWJsZS9kaXNhYmxlIHVudHJhY2tlZCBjYWNoZSIKK21zZ3N0ciAiYWt0aXZlcmEvaW5ha3RpdmVyYSBvc3DDpXJhZCBjYWNoZSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxMDAwCittc2dpZCAiZW5hYmxlIHVudHJhY2tlZCBjYWNoZSB3aXRob3V0IHRlc3RpbmcgdGhlIGZpbGVzeXN0ZW0iCittc2dzdHIgImFrdGl2ZXJhIG9zcMOlcmFkIGNhY2hlIHV0YW4gYXR0IHRlc3RhIGZpbHN5c3RlbWV0IgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzo5Cittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLWQgPHJlZm5hbWU+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPGZsYWdnb3I+XSAtZCA8cmVmbmFtbj4gWzxnYW1tYWx0dsOkcmRlPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjEwCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gICAgPHJlZm5hbWU+IDxuZXctdmFsPiBbPG9sZC12YWw+XSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1yZWYgWzxmbGFnZ29yPl0gICAgPHJlZm5hbW4+IDxnYW1tYWx0dsOkcmRlPiBbPG55dHR2w6RyZGU+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTEKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtLXN0ZGluIFstel0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8ZmxhZ2dvcj5dIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgInRhIGJvcnQgcmVmZXJlbnNlbiIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY1Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgInVwcGRhdGVyYSA8cmVmbmFtbj4gaW50ZSBkZXQgZGVuIHBla2FyIHDDpSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY2Cittc2dpZCAic3RkaW4gaGFzIE5VTC10ZXJtaW5hdGVkIGFyZ3VtZW50cyIKK21zZ3N0ciAic3RhbmRhcmQgaW4gaGFyIE5VTC10ZXJtaW5lcmFkZSBhcmd1bWVudCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgImzDpHMgdXBwZGF0ZXJpbmdhciBmcsOlbiBzdGFuZGFyZCBpbiIKKworIzogYnVpbHRpbi91cGRhdGUtc2VydmVyLWluZm8uYzo2Cittc2dpZCAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCittc2dzdHIgImdpdCB1cGRhdGUtc2VydmVyLWluZm8gWy0tZm9yY2VdIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjE0Cittc2dpZCAidXBkYXRlIHRoZSBpbmZvIGZpbGVzIGZyb20gc2NyYXRjaCIKK21zZ3N0ciAidXBwZGF0ZXJhIGluZm9ybWF0aW9uc2ZpbGVybmEgZnLDpW4gZ3J1bmRlbiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6MTcKK21zZ2lkICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LWNvbW1pdCBbLXYgfCAtLXZlcmJvc2VdIDxpbmNoZWNrbmluZz4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjcyCittc2dpZCAicHJpbnQgY29tbWl0IGNvbnRlbnRzIgorbXNnc3RyICJ2aXNhIGlubmVow6VsbCBmw7ZyIGluY2hlY2tuaW5nIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo3MyBidWlsdGluL3ZlcmlmeS10YWcuYzo4NAorbXNnaWQgInByaW50IHJhdyBncGcgc3RhdHVzIG91dHB1dCIKK21zZ3N0ciAidmlzYSByw6VhIGdwZy1zdGF0dXNkYXRhIgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTQKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBha2V0Pi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY0Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAicHJhdHNhbSIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY2Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgInZpc2EgZW5kYXN0IHN0YXRpc3RpayIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTcKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIDx0YWdnPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6ODMKK21zZ2lkICJwcmludCB0YWcgY29udGVudHMiCittc2dzdHIgInZpc2EgaW5uZWjDpWxsIGbDtnIgdGFnIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTMKK21zZ2lkICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGFkZCBbPGZsYWdnb3I+XSA8c8O2a3bDpGc+IDxncmVuPiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjE0Cittc2dpZCAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxmbGFnZ29yPl0iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeSIKK21zZ3N0ciAiVGFyIGJvcnQgd29ya3RyZWVzLyVzOiBpbnRlIGVuIGdpbHRpZyBrYXRhbG9nIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiVGFyIGJvcnQgd29ya3RyZWVzLyVzOiBnaXRkaXItZmlsZW4gZXhpc3RlcmFyIGludGUiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0NworIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IHVuYWJsZSB0byByZWFkIGdpdGRpciBmaWxlICglcykiCittc2dzdHIgIlRhciBib3J0IHdvcmt0cmVlcy8lczoga2FuIGludGUgbMOkc2EgZ2l0ZGlyLWZpbGVuICglcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIlRhciBib3J0IHdvcmt0cmVlcy8lczogZmVsYWt0aWcgZ2l0ZGlyLWZpbCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIKK21zZ3N0ciAiVGFyIGJvcnQgd29ya3RyZWVzLyVzOiBnaXRkaXItZmlsZW4gcGVrYXIgcMOlIGVuIGlja2VleGlzdGVyYW5kZSBwbGF0cyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlOiAlcyIKK21zZ3N0ciAibWlzc2x5Y2thZGVzIHRhIGJvcnQ6ICVzIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTk4CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIlwiJXNcIiBmaW5ucyByZWRhbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJrdW5kZSBpbnRlIHNrYXBhIGthdGFsb2dlbiBcIiVzXCIiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nICVzIChpZGVudGlmaWVyICVzKSIKK21zZ3N0ciAiRsO2cmJlcmVkZXIgJXMgKGlkZW50aWZpZXJhcmVuICVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMxNgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAiIgorImNoZWNrYSB1dCA8Z3Jlbj4gw6R2ZW4gb20gZGVuIHJlZGFuIMOkciB1dGNoZWNrYWQgaSBlbiBhbm5hbiBhcmJldHNrYXRhbG9nIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzE4Cittc2dpZCAiY3JlYXRlIGEgbmV3IGJyYW5jaCIKK21zZ3N0ciAic2thcGEgZW4gbnkgZ3JlbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyMAorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAic2thcGEgZWxsZXIgw6V0ZXJzdMOkbGwgZW4gZ3JlbiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyMQorbXNnaWQgImRldGFjaCBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAia29wcGxhIGZyw6VuIEhFQUQgdmlkIG5hbW5naXZlbiBpbmNoZWNrbmluZyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyOAorbXNnaWQgIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1iLCAtQiBvY2ggLS1kZXRhY2ggw6RyIMO2bXNlc2lkaWd0IHV0ZXNsdXRhbmRlIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzoxMworbXNnaWQgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08cHJlZml4Pi9dIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjYKK21zZ2lkICI8cHJlZml4Pi8iCittc2dzdHIgIjxwcmVmaXg+LyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjcKK21zZ2lkICJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iCittc2dzdHIgInZpc2EgdHLDpGRvYmpla3QgZsO2ciB1bmRlcmthdGFsb2dlbiA8cHJlZml4PiIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MzAKK21zZ2lkICJvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIgorbXNnc3RyICJlbmRhc3QgYW52w6RuZGJhcnQgdmlkIGZlbHPDtmtuaW5nIgorCisjOiBjcmVkZW50aWFsLWNhY2hlLS1kYWVtb24uYzoyNTUKK21zZ2lkICJwcmludCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdG8gc3RkZXJyIgorbXNnc3RyICJza3JpdiBmZWxzw7ZrbmluZ3NtZWRkZWxhbmRlbiBww6Ugc3RhbmRhcmQgZmVsIgorCisjOiBnaXQuYzoxNAorbXNnaWQgIiIKKyInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisiY29uY2VwdCBndWlkZXMuIFNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBvciAnZ2l0IGhlbHAgPGNvbmNlcHQ+J1xuIgorInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuIgorbXNnc3RyICIiCisiXCJnaXQgaGVscCAtYVwiIG9jaCBcImdpdCBoZWxwIC1nXCIgdmlzYXIgdGlsbGfDpG5nbGlnYSB1bmRlcmtvbW1hbmRvbiBvY2hcbiIKKyJuw6VncmEga29uY2VwdHbDpGdsZWRuaW5nYXIuIFNlIFwiZ2l0IGhlbHAgPGtvbW1hbmRvPlwiIGVsbGVyIFwiZ2l0IGhlbHBcbiIKKyI8a29uY2VwdD5cIiBmw7ZyIGF0dCBsw6RzYSBtZXIgb20gc3BlY2lmaWthIHVuZGVya29tbWFuZG9uIG9jaCBrb25jZXB0LiIKKworIzogY29tbW9uLWNtZHMuaDo5Cittc2dpZCAic3RhcnQgYSB3b3JraW5nIGFyZWEgKHNlZSBhbHNvOiBnaXQgaGVscCB0dXRvcmlhbCkiCittc2dzdHIgInN0YXJ0YSBhcmJldHNrYXRhbG9nIChzZSBvY2tzw6U6IGdpdCBoZWxwIHR1dG9yaWFsKSIKKworIzogY29tbW9uLWNtZHMuaDoxMAorbXNnaWQgIndvcmsgb24gdGhlIGN1cnJlbnQgY2hhbmdlIChzZWUgYWxzbzogZ2l0IGhlbHAgZXZlcnlkYXkpIgorbXNnc3RyICJqb2JiYSBtZWQgYWt0dWVsbCBmw7Zyw6RuZHJpbmcgKHNlIG9ja3PDpTogZ2l0IGhlbHAgZXZlcnlkYXkpIgorCisjOiBjb21tb24tY21kcy5oOjExCittc2dpZCAiZXhhbWluZSB0aGUgaGlzdG9yeSBhbmQgc3RhdGUgKHNlZSBhbHNvOiBnaXQgaGVscCByZXZpc2lvbnMpIgorbXNnc3RyICJ1dGZvcnNrYSBoaXN0b3Jpa2VuIG9jaCB0aWxsc3TDpW5kZXQgKHNlIG9ja3PDpTogZ2l0IGhlbHAgcmV2aXNpb25zKSIKKworIzogY29tbW9uLWNtZHMuaDoxMgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgInV0w7ZrYSwgbWFya2VyYSBvY2gganVzdGVyYSBkaW4gZ2VtZW5zYW1tYSBoaXN0b3JpayIKKworIzogY29tbW9uLWNtZHMuaDoxMworbXNnaWQgImNvbGxhYm9yYXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKK21zZ3N0ciAic2FtYXJiZXRhIChzZSBvY2tzw6U6IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTcKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkzDpGdnIGZpbGlubmVow6VsbCB0aWxsIGluZGV4ZXQiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTgKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICJBbnbDpG5kIGJpbsOkcnPDtmtuaW5nIGbDtnIgYXR0IGhpdHRhIMOkbmRyaW5nZW4gc29tIGludHJvZHVjZXJhZGUgZXR0IGZlbCIKKworIzogY29tbW9uLWNtZHMuaDoxOQorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICJWaXNhLCBza2FwYSBlbGxlciB0YSBib3J0IGdyZW5hciIKKworIzogY29tbW9uLWNtZHMuaDoyMAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiQnl0IHRpbGwgZW4gbnkgZ3JlbiBlbGxlciDDpXRlcnN0w6RsbCBmaWxlciBpIGFyYmV0c2thdGFsb2dlbiIKKworIzogY29tbW9uLWNtZHMuaDoyMQorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAiS2xvbmEgZXR0IGFya2l2IHRpbGwgZW4gbnkga2F0YWxvZyIKKworIzogY29tbW9uLWNtZHMuaDoyMgorbXNnaWQgIlJlY29yZCBjaGFuZ2VzIHRvIHRoZSByZXBvc2l0b3J5IgorbXNnc3RyICJQcm90b2tvbGxmw7ZyIMOkbmRyaW5nYXIgaSBhcmtpdmV0IgorCisjOiBjb21tb24tY21kcy5oOjIzCittc2dpZCAiU2hvdyBjaGFuZ2VzIGJldHdlZW4gY29tbWl0cywgY29tbWl0IGFuZCB3b3JraW5nIHRyZWUsIGV0YyIKK21zZ3N0ciAiVmlzYSDDpG5kcmluZ2FyIG1lbGxhbiBpbmNoZWNrbmluZ2FyLCBtZWQgYXJiZXRza2F0YWxvZ2VuLCBvc3YiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjQKK21zZ2lkICJEb3dubG9hZCBvYmplY3RzIGFuZCByZWZzIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IgorbXNnc3RyICJIw6RtdGEgb2JqZWt0IG9jaCByZWZlcmVuc2VyIGZyw6VuIGFubmF0IGFya2l2IgorCisjOiBjb21tb24tY21kcy5oOjI1Cittc2dpZCAiUHJpbnQgbGluZXMgbWF0Y2hpbmcgYSBwYXR0ZXJuIgorbXNnc3RyICJWaXNhIHJhZGVyIHNvbSBtb3RzdmFyYXIgbcO2bnN0ZXIiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjYKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiU2thcGEgdG9tdCBHaXQtYXJraXYgZWxsZXIgb21pbml0aWVyYSBldHQgYmVmaW50bGlndCIKKworIzogY29tbW9uLWNtZHMuaDoyNworbXNnaWQgIlNob3cgY29tbWl0IGxvZ3MiCittc2dzdHIgIlZpc2EgaW5jaGVja25pbmdzbG9nZ2FyIgorCisjOiBjb21tb24tY21kcy5oOjI4Cittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIlNsw6UgaWhvcCB0dsOlIGVsbGVyIGZsZXJhIHV0dmVja2xpbmdzaGlzdG9yaWVyIgorCisjOiBjb21tb24tY21kcy5oOjI5Cittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJGbHl0dGEgZWxsZXIgYnl0IG5hbW4gcMOlIGVuIGZpbCwga2F0YWxvZyBlbGxlciBzeW1ib2xpc2sgbMOkbmsiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzAKK21zZ2lkICJGZXRjaCBmcm9tIGFuZCBpbnRlZ3JhdGUgd2l0aCBhbm90aGVyIHJlcG9zaXRvcnkgb3IgYSBsb2NhbCBicmFuY2giCittc2dzdHIgIkjDpG10YSBmcsOlbiBvY2ggaW50ZWdyZXJhIG1lZCBhbm5hdCBhcmtpdiBlbGxlciBlbiBsb2thbCBncmVuIgorCisjOiBjb21tb24tY21kcy5oOjMxCittc2dpZCAiVXBkYXRlIHJlbW90ZSByZWZzIGFsb25nIHdpdGggYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICJVcHBkYXRlcmEgZmrDpHJyLXJlZmVyZW5zZXIgb2NoIHRpbGxow7ZyYW5kZSBvYmpla3QiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzIKK21zZ2lkICJGb3J3YXJkLXBvcnQgbG9jYWwgY29tbWl0cyB0byB0aGUgdXBkYXRlZCB1cHN0cmVhbSBoZWFkIgorbXNnc3RyICJGcmFtw6V0YW5wYXNzYSBsb2thbGEga29tbWFuZG9uIHDDpSB1cHBkYXRlcmF0IHVwcHN0csO2bXNodXZ1ZCIKKworIzogY29tbW9uLWNtZHMuaDozMworbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICLDhXRlcnN0w6RsbCBha3R1ZWxsIEhFQUQgdGlsbCBhbmdpdmV0IHRpbGxzdMOlbmQiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzQKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiVGEgYm9ydCBmaWxlciBmcsOlbiBhcmJldHNrYXRhbG9nZW4gb2NoIGZyw6VuIGluZGV4ZXQiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzUKK21zZ2lkICJTaG93IHZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cyIKK21zZ3N0ciAiVmlzYSBvbGlrYSBzb3J0ZXJzIG9iamVrdCIKKworIzogY29tbW9uLWNtZHMuaDozNgorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIlZpc2Egc3RhdHVzIGbDtnIgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBjb21tb24tY21kcy5oOjM3Cittc2dpZCAiQ3JlYXRlLCBsaXN0LCBkZWxldGUgb3IgdmVyaWZ5IGEgdGFnIG9iamVjdCBzaWduZWQgd2l0aCBHUEciCittc2dzdHIgIlNrYXBhLCB2aXNhLCB0YSBib3J0IGVsbGVyIHZlcmlmaWVyYSBHUEctc2lnbmVyYXQgdGFnZ29iamVrdCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE0NQorbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJnaWx0aWctdGlsbCIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE2MAorbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAiaW5nZW4gZnVua3Rpb24gKGJha8OldGtvbXBhdGliaWxpdGV0KSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIzNgorbXNnaWQgImJlIG1vcmUgdmVyYm9zZSIKK21zZ3N0ciAidmFyIG1lciBwcmF0c2FtIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjM4Cittc2dpZCAiYmUgbW9yZSBxdWlldCIKK21zZ3N0ciAidmFyIG1lciB0eXN0IgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjQ0Cittc2dpZCAidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiCittc2dzdHIgImFudsOkbmQgPG4+IHNpZmZyb3IgZsO2ciBhdHQgdmlzYSBTSEEtMTpvciIKKworIzogcmVyZXJlLmg6MjgKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgInVwcGRhdGVyYSBpbmRleGV0IG1lZCDDpXRlcmFudsOkbmQga29uZmxpa3Rsw7ZzbmluZyBvbSBtw7ZqbGlndCIKKworIzogZ2l0LWJpc2VjdC5zaDo1MAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICJEdSBtw6VzdGUgc3RhcnRhIG1lZCBcImdpdCBiaXNlY3Qgc3RhcnRcIiIKKworIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjU2Cittc2dpZCAiRG8geW91IHdhbnQgbWUgdG8gZG8gaXQgZm9yIHlvdSBbWS9uXT8gIgorbXNnc3RyICJWaWxsIGR1IGF0dCBqYWcgc2thIGfDtnJhIGRldCDDpXQgZGlnIFtZPWphL049bmVqXT8iCisKKyM6IGdpdC1iaXNlY3Quc2g6OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKK21zZ3N0ciAiZmxhZ2dhbiBrw6RubnMgaW50ZSBpZ2VuOiBcIiRhcmdcIiIKKworIzogZ2l0LWJpc2VjdC5zaDoxMDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiXCIkYXJnXCIgdmVya2FyIGludGUgdmFyYSBlbiBnaWx0aWcgcmV2aXNpb24iCisKKyM6IGdpdC1iaXNlY3Quc2g6MTMyCittc2dpZCAiQmFkIEhFQUQgLSBJIG5lZWQgYSBIRUFEIgorbXNnc3RyICJGZWxha3RpZ3QgSEVBRCAtIEphZyBiZWjDtnZlciBldHQgSEVBRCIKKworIzogZ2l0LWJpc2VjdC5zaDoxNDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDaGVja2luZyBvdXQgJyRzdGFydF9oZWFkJyBmYWlsZWQuIFRyeSAnZ2l0IGJpc2VjdCByZXNldCA8dmFsaWQtYnJhbmNoPicuIgorbXNnc3RyICIiCisiTWlzc2x5Y2thZGVzIGNoZWNrYSB1dCBcIiRzdGFydF9oZWFkXCIuIEbDtnJzw7ZrIFwiZ2l0IGJpc2VjdCByZXNldCAiCisiPGdpbHRpZ19ncmVuPlwiIgorCisjIGNvZ2l0by1yZWxhdGVyYXQKKyM6IGdpdC1iaXNlY3Quc2g6MTU1Cittc2dpZCAid29uJ3QgYmlzZWN0IG9uIGNnLXNlZWsnZWQgdHJlZSIKK21zZ3N0ciAia8O2ciBpbnRlIFwiYmlzZWN0XCIgcMOlIHRyw6RkIGTDpHIgXCJjZy1zZWVrXCIgYW52w6RudHMiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTU5Cittc2dpZCAiQmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAiRmVsYWt0aWd0IEhFQUQgLSBrb25zdGlnIHN5bWJvbGlzayByZWZlcmVucyIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICRzdGF0ZSIKK21zZ3N0ciAiRmVsYWt0aWd0IGFyZ3VtZW50IHRpbGwgYmlzZWN0X3dyaXRlOiAkc3RhdGUiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjQwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkYXJnIgorbXNnc3RyICJGZWxha3RpZyByZXYtaW5kYXRhOiAkYXJnIgorCisjOiBnaXQtYmlzZWN0LnNoOjI1NQorbXNnaWQgIlBsZWFzZSBjYWxsICdiaXNlY3Rfc3RhdGUnIHdpdGggYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIKK21zZ3N0ciAiQW5yb3BhIFwiYmlzZWN0X3N0YXRlXCIgbWVkIG1pbnN0IGV0dCBhcmd1bWVudC4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICJGZWxha3RpZyByZXYtaW5kYXRhOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIlwiZ2l0IGJpc2VjdCAkVEVSTV9CQURcIiBrYW4gYmFyYSB0YSBldHQgYXJndW1lbnQuIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmlzZWN0aW5nIG9ubHkgd2l0aCBhICRURVJNX0JBRCBjb21taXQuIgorbXNnc3RyICIiCisiVmFybmluZzogdXRmw7ZyIFwiYmlzZWN0XCIgbWVkIGVuZGFzdCBlbiBkw6VsaWcgKFwiJFRFUk1fQkFEXCIpIGluY2hlY2tuaW5nIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6MzA1Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIsOEciBkdSBzw6RrZXIgW1k9amEvTj1uZWpdPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJGJhZF9zeW4gYW5kIG9uZSAkZ29vZF9zeW4gcmV2aXNpb24uXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGFuZCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIkR1IG3DpXN0ZSBhbmdlIMOldG1pbnN0b25lIGVuIGTDpWxpZyAoXCIkYmFkX3N5blwiKSBvY2ggZW4gYnJhIChcIiRnb29kX3N5blwiKSAiCisidmVyc2lvbi5cbiIKKyIoRHUga2FuIGFudsOkbmRhIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIG9jaCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgZsO2ciAiCisiZGV0dGEuKSIKKworIzogZ2l0LWJpc2VjdC5zaDozMjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICRnb29kX3N5biBhbmQgb25lICRiYWRfc3luIHJldmlzaW9uLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBhbmQgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyJEdSBtw6VzdGUgc3RhcnRhIG1lZCBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJEdSBtw6VzdGUgc2VkYW4gYW5nZSDDpXRtaW5zdG9uZSBlbiBicmEgKFwiJGdvb2Rfc3luXCIpIG9jaCBlbiBkw6VsaWcgIgorIihcIiRiYWRfc3luXCIpIHZlcnNpb24uXG4iCisiKER1IGthbiBhbnbDpG5kYSBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBvY2ggXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIGbDtnIgIgorImRldHRhLikiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzkxIGdpdC1iaXNlY3Quc2g6NTIxCittc2dpZCAiV2UgYXJlIG5vdCBiaXNlY3RpbmcuIgorbXNnc3RyICJWaSB1dGbDtnIgaW5nZW4gYmlzZWN0IGbDtnIgdGlsbGbDpGxsZXQuIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5OAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIlwiJGludmFsaWRcIiDDpHIgaW50ZSBlbiBnaWx0aWcgaW5jaGVja25pbmciCisKKyM6IGdpdC1iaXNlY3Quc2g6NDA3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ291bGQgbm90IGNoZWNrIG91dCBvcmlnaW5hbCBIRUFEICckYnJhbmNoJy5cbiIKKyJUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPGNvbW1pdD4nLiIKK21zZ3N0ciAiIgorIkt1bmRlIGludGUgY2hlY2thIHV0IG9yaWdpbmFsLUhFQUQgXCIkYnJhbmNoXCIuXG4iCisiRsO2cnPDtmsgXCJnaXQgYmlzZWN0IHJlc2V0IDxpbmNoZWNrbmluZz5cIi4iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDM1Cittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAiSW5nZW4gbG9nZ2ZpbCBhbmdpdmVuIgorCisjOiBnaXQtYmlzZWN0LnNoOjQzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAia2FuIGludGUgbMOkc2EgJGZpbGUgZsO2ciB1cHBzcGVsbmluZyIKKworIzogZ2l0LWJpc2VjdC5zaDo0NTUKK21zZ2lkICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCittc2dzdHIgIj8/IHZhZCBtZW5hciBkdT8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJydW5uaW5nICRjb21tYW5kIgorbXNnc3RyICJrw7ZyICRjb21tYW5kIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisiXCJiaXNlY3RcIi1rw7ZybmluZ2VuIG1pc3NseWNrYWRlczpcbiIKKyJmZWxrb2QgJHJlcyBmcsOlbiBcIiRjb21tYW5kXCIgw6RyIDwgMCBlbGxlciA+PSAxMjgiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTAwCittc2dpZCAiYmlzZWN0IHJ1biBjYW5ub3QgY29udGludWUgYW55IG1vcmUiCittc2dzdHIgIlwiYmlzZWN0XCIta8O2cm5pbmdlbiBrYW4gaW50ZSBmb3J0c8OkdHRhIGzDpG5ncmUiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTA2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiJ2Jpc2VjdF9zdGF0ZSAkc3RhdGUnIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHJlcyIKK21zZ3N0ciAiIgorIlwiYmlzZWN0XCIta8O2cm5pbmdlbiBtaXNzbHlja2FkZXM6XG4iCisiXCJiaXNlY3Rfc3RhdGUgJHN0YXRlXCIgYXZzbHV0YWRlcyBtZWQgZmVsa29kZW4gJHJlcyIKKworIzogZ2l0LWJpc2VjdC5zaDo1MTMKK21zZ2lkICJiaXNlY3QgcnVuIHN1Y2Nlc3MiCittc2dzdHIgIlwiYmlzZWN0XCIta8O2cm5pbmdlbiBseWNrYWRlcyIKKworIzogZ2l0LWJpc2VjdC5zaDo1NDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkludmFsaWQgY29tbWFuZDogeW91J3JlIGN1cnJlbnRseSBpbiBhICRURVJNX0JBRC8kVEVSTV9HT09EIGJpc2VjdC4iCittc2dzdHIgIiIKKyJPZ2lsdGlndCBrb21tYW5kbzogZHUgdXRmw7ZyIGp1c3QgbnUgZW4gXCJiaXNlY3RcIiBtZWQgJFRFUk1fQkFELyRURVJNX0dPT0QuIgorCisjOiBnaXQtcmViYXNlLnNoOjU3Cittc2dpZCAiIgorIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBpbnN0ZWFkLlxuIgorIlRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHJlYmFzaW5nLCBydW4gXCJnaXQgcmViYXNlIC0tYWJvcnQiCisiXCIuIgorbXNnc3RyICIiCisiTsOkciBkdSBoYXIgbMO2c3QgcHJvYmxlbWV0IGvDtnIgZHUgXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJPbSBkdSB2aWxsIGhvcHBhIMO2dmVyIHBhdGNoZW4ga8O2ciBkdSBpc3TDpGxsZXQgXCJnaXQgcmViYXNlIC0tc2tpcFwiLlxuIgorIkbDtnIgYXR0IMOldGVyc3TDpGxsYSBvcmlnaW5hbGdyZW5lbiBvY2ggYXZicnl0YSBrw7ZyIGR1IFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIuIgorCisjOiBnaXQtcmViYXNlLnNoOjE2NQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAiVGlsbMOkbXBhZGUgYXV0b3N0YXNoLiIKKworIzogZ2l0LXJlYmFzZS5zaDoxNjgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzdG9yZSAkc3Rhc2hfc2hhMSIKK21zZ3N0ciAiS2FuIGludGUgc3BhcmEgJHN0YXNoX3NoYTEiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTY5Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKyJUaWxsw6RtcG5pbmcgYXYgYXV0b3N0YXNoIGdhdiBrb25mbGlrdGVyLlxuIgorIkRpbmEgw6RuZHJpbmdhciDDpHIgc8Oka3JhIGkgc3Rhc2hlbi5cbiIKKyJEdSBrYW4gbsOkciBzb20gaGVsc3QgYW52w6RuZGEgXCJnaXQgc3Rhc2ggcG9wXCIgZWxsZXIgXCJnaXQgc3Rhc2ggZHJvcFwiLlxuIgorCisjOiBnaXQtcmViYXNlLnNoOjIwOAorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICJLcm9rZW4gcHJlLXJlYmFzZSB2w6RncmFkZSBvbWJhc2VyaW5nZW4uIgorCisjOiBnaXQtcmViYXNlLnNoOjIxMworbXNnaWQgIkl0IGxvb2tzIGxpa2UgZ2l0LWFtIGlzIGluIHByb2dyZXNzLiBDYW5ub3QgcmViYXNlLiIKK21zZ3N0ciAiRGV0IHZlcmthciBzb20gZW4gZ2l0LWFtIGvDtnJzLiBLYW4gaW50ZSBvbWJhc2VyYS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzUxCittc2dpZCAiVGhlIC0tZXhlYyBvcHRpb24gbXVzdCBiZSB1c2VkIHdpdGggdGhlIC0taW50ZXJhY3RpdmUgb3B0aW9uIgorbXNnc3RyICJGbGFnZ2FuIC0tZXhlYyBtw6VzdGUgYW52w6RuZGFzIHRpbGxzYW1tYW5zIG1lZCBmbGFnZ2FuIC0taW50ZXJhY3RpdmUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzU2Cittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiSW5nZW4gb21iYXNlcmluZyBww6Vnw6VyPyIKKworIzogZ2l0LXJlYmFzZS5zaDozNjcKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIsOFdGfDpHJkZW4gLS1lZGl0LXRvZG8ga2FuIGVuZGFzdCBhbnbDpG5kYXMgdW5kZXIgaW50ZXJha3RpdiBvbWJhc2VyaW5nLiIKKworIzogZ2l0LXJlYmFzZS5zaDozNzQKK21zZ2lkICJDYW5ub3QgcmVhZCBIRUFEIgorbXNnc3RyICJLYW4gaW50ZSBsw6RzYSBIRUFEIgorCisjOiBnaXQtcmViYXNlLnNoOjM3NworbXNnaWQgIiIKKyJZb3UgbXVzdCBlZGl0IGFsbCBtZXJnZSBjb25mbGljdHMgYW5kIHRoZW5cbiIKKyJtYXJrIHRoZW0gYXMgcmVzb2x2ZWQgdXNpbmcgZ2l0IGFkZCIKK21zZ3N0ciAiIgorIkR1IG3DpXN0ZSByZWRpZ2VyYSBhbGxhIHNhbW1hbnNsYWduaW5nc2tvbmZsaWt0ZXIgb2NoXG4iCisiZMOkcmVmdGVyIG1hcmtlcmEgZGVtIHNvbSBsw7ZzdGEgbWVkIGdpdCBhZGQiCisKKyM6IGdpdC1yZWJhc2Uuc2g6Mzk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbW92ZSBiYWNrIHRvICRoZWFkX25hbWUiCittc2dzdHIgIkt1bmRlIGludGUgZmx5dHRhIHRpbGxiYWthIHRpbGwgJGhlYWRfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo0MTQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJdCBzZWVtcyB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSAkc3RhdGVfZGlyX2Jhc2UgZGlyZWN0b3J5LCBhbmRcbiIKKyJJIHdvbmRlciBpZiB5b3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW5vdGhlciByZWJhc2UuICBJZiB0aGF0IGlzIHRoZVxuIgorImNhc2UsIHBsZWFzZSB0cnlcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyJJZiB0aGF0IGlzIG5vdCB0aGUgY2FzZSwgcGxlYXNlXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorImFuZCBydW4gbWUgYWdhaW4uICBJIGFtIHN0b3BwaW5nIGluIGNhc2UgeW91IHN0aWxsIGhhdmUgc29tZXRoaW5nXG4iCisidmFsdWFibGUgdGhlcmUuIgorbXNnc3RyICIiCisiRGV0IHZlcmthciBzb20ga2F0YWxvZ2VuICRzdGF0ZV9kaXJfYmFzZSByZWRhbiBleGlzdGVyYXIsIG9jaFxuIgorImphZyB1bmRyYXIgb20gZHUgcmVkYW4gw6RyIG1pdHQgaSBlbiBhbm5hbiBvbWJhc2VyaW5nLiBPbSBzw6Ugw6RyXG4iCisiZmFsbGV0LCBmw7Zyc8O2a1xuIgorIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorIk9tIHPDpSBpbnRlIMOkciBmYWxsZXQsIGvDtnJcbiIKKyJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisib2NoIGvDtnIgcHJvZ3JhbW1ldCBpZ2VuLiBKYWcgYXZzbHV0YXIgaWZhbGwgZHUgZm9ydGZhcmFuZGUgaGFyXG4iCisibsOlZ290IGF2IHbDpHJkZSBkw6RyLiIKKworIzogZ2l0LXJlYmFzZS5zaDo0NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJHVwc3RyZWFtX25hbWUiCittc2dzdHIgIm9naWx0aWcgdXBwc3Ryw7ZtICR1cHN0cmVhbV9uYW1lIgorCisjOiBnaXQtcmViYXNlLnNoOjQ4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbWVyZ2UgYmFzZXMiCittc2dzdHIgIiRvbnRvX25hbWU6IG1lciDDpG4gZW4gc2FtbWFuc2xhZ25pbmdzYmFzIGZpbm5zIgorCisjOiBnaXQtcmViYXNlLnNoOjQ5MiBnaXQtcmViYXNlLnNoOjQ5NgorIywgc2gtZm9ybWF0Cittc2dpZCAiJG9udG9fbmFtZTogdGhlcmUgaXMgbm8gbWVyZ2UgYmFzZSIKK21zZ3N0ciAiJG9udG9fbmFtZTogaW5nZW4gc2FtbWFuc2xhZ25pbmdzYmFzIGZpbm5zIgorCisjOiBnaXQtcmViYXNlLnNoOjUwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6ICRvbnRvX25hbWUiCittc2dzdHIgIlBla2EgcMOlIGVuIGdpbHRpZyBpbmNoZWNrbmluZzogJG9udG9fbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo1MjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaDogJGJyYW5jaF9uYW1lIgorbXNnc3RyICLDtmRlc2RpZ2VydDogaW5nZW4gc8OlZGFuIGdyZW46ICRicmFuY2hfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo1NTcKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICJLYW4gaW50ZSB1dGbDtnJhIFwiYXV0b3N0YXNoXCIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTYyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDcmVhdGVkIGF1dG9zdGFzaDogJHN0YXNoX2FiYnJldiIKK21zZ3N0ciAiU2thcGFkZSBhdXRvc3Rhc2g6ICRzdGFzaF9hYmJyZXYiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTY2Cittc2dpZCAiUGxlYXNlIGNvbW1pdCBvciBzdGFzaCB0aGVtLiIKK21zZ3N0ciAiQ2hlY2thIGluIGVsbGVyIGFudsOkbmQgXCJzdGFzaFwiIHDDpSBkZW0uIgorCisjOiBnaXQtcmViYXNlLnNoOjU4NgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICJBa3R1ZWxsIGdyZW4gJGJyYW5jaF9uYW1lIMOkciDDoCBqb3VyLiIKKworIzogZ2l0LXJlYmFzZS5zaDo1OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLCByZWJhc2UgZm9yY2VkLiIKK21zZ3N0ciAiQWt0dWVsbCBncmVuICRicmFuY2hfbmFtZSDDpHIgw6Agam91ciwgb21iYXNlcmluZyBmcmFtdHZpbmdhZC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDaGFuZ2VzIGZyb20gJG1iIHRvICRvbnRvOiIKK21zZ3N0ciAiw4RuZHJpbmdhciBmcsOlbiAkbWIgdGlsbCAkb250bzoiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjEwCittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uIgorbXNnc3RyICIiCisiRsO2cnN0LCBzcG9sYXIgdGlsbGJha2EgaHV2dWRldCBmw7ZyIGF0dCBzcGVsYSBhdiBkaXR0IGFyYmV0ZSBvdmFucMOlIGRldC4uLiIKKworIzogZ2l0LXJlYmFzZS5zaDo2MjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhc3QtZm9yd2FyZGVkICRicmFuY2hfbmFtZSB0byAkb250b19uYW1lLiIKK21zZ3N0ciAiU25hYmJzcG9sYWRlICRicmFuY2hfbmFtZSB0aWxsICRvbnRvX25hbWUuIgorCisjOiBnaXQtc3Rhc2guc2g6NTEKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgIlwiZ2l0IHN0YXNoIGNsZWFyXCIgbWVkIHBhcmFtZXRyYXIgaGFyIGludGUgaW1wbGVtZW50ZXJhdHMiCisKKyM6IGdpdC1zdGFzaC5zaDo3NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICJEdSBoYXIgaW50ZSBkZW4gZsO2cnN0YSBpbmNoZWNrbmluZ2VuIMOkbm51IgorCisjOiBnaXQtc3Rhc2guc2g6ODkKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBpbmRleCBzdGF0ZSIKK21zZ3N0ciAiS2FuIGludGUgc3BhcmEgYWt0dWVsbHQgdGlsbHN0w6VuZCBmw7ZyIGluZGV4ZXQiCisKKyM6IGdpdC1zdGFzaC5zaDoxMjQgZ2l0LXN0YXNoLnNoOjEzNworbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICJLYW4gaW50ZSBzcGFyYSBha3R1ZWxsdCB0aWxsc3TDpW5kIGbDtnIgYXJiZXRza2F0YWxvZ2VuIgorCisjOiBnaXQtc3Rhc2guc2g6MTQxCittc2dpZCAiTm8gY2hhbmdlcyBzZWxlY3RlZCIKK21zZ3N0ciAiSW5nYSDDpG5kcmluZ2FyIHZhbGRhIgorCisjOiBnaXQtc3Rhc2guc2g6MTQ0Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB0ZW1wb3JhcnkgaW5kZXggKGNhbid0IGhhcHBlbikiCittc2dzdHIgIkthbiBpbnRlIHRhIGJvcnQgdGVtcG9yw6RydCBpbmRleCAoa2FuIGludGUgaW50csOkZmZhKSIKKworIzogZ2l0LXN0YXNoLnNoOjE1NworbXNnaWQgIkNhbm5vdCByZWNvcmQgd29ya2luZyB0cmVlIHN0YXRlIgorbXNnc3RyICJLYW4gaW50ZSByZWdpc3RyZXJhIHRpbGxzdMOlbmQgZsO2ciBhcmJldHNrYXRhbG9nIgorCisjOiBnaXQtc3Rhc2guc2g6MTg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIkthbiBpbnRlIHVwcGRhdGVyYSAkcmVmX3N0YXNoIG1lZCAkd19jb21taXQiCisKKyMuIFRSQU5TTEFUT1JTOiAkb3B0aW9uIGlzIGFuIGludmFsaWQgb3B0aW9uLCBsaWtlCisjLiBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMuIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKyMuIHVwIHRoZSBzZWNvbmQgbGluZSB3aXRoIGhvd2V2ZXIgbWFueSBjaGFyYWN0ZXJzIHRoZQorIy4gdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKyMuIEVuZ2xpc2ggdGhpcyBpczoKKyMuCisjLiAkIGdpdCBzdGFzaCBzYXZlIC0tYmxhaC1ibGFoIDI+JjEgfCBoZWFkIC1uIDIKKyMuIGVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAtLWJsYWgtYmxhaAorIy4gVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnLS1ibGFoLWJsYWgnCisjOiBnaXQtc3Rhc2guc2g6MjM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyIgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCittc2dzdHIgIiIKKyJmZWw6IGZlbGFrdGlnIGZsYWdnYSBmw7ZyIFwic3Rhc2ggc2F2ZVwiOiAkb3B0aW9uXG4iCisiICAgICBGw7ZyIGF0dCBhbmdlIGV0dCBtZWRkZWxhbmRlLCBhbnbDpG5kIGdpdCBzdGFzaCBzYXZlIC0tIFwiJG9wdGlvblwiIgorCisjOiBnaXQtc3Rhc2guc2g6MjYwCittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICJJbmdhIGxva2FsYSDDpG5kcmluZ2FyIGF0dCBzcGFyYSIKKworIzogZ2l0LXN0YXNoLnNoOjI2NAorbXNnaWQgIkNhbm5vdCBpbml0aWFsaXplIHN0YXNoIgorbXNnc3RyICJLYW4gaW50ZSBpbml0aWVyYSBcInN0YXNoXCIiCisKKyM6IGdpdC1zdGFzaC5zaDoyNjgKK21zZ2lkICJDYW5ub3Qgc2F2ZSB0aGUgY3VycmVudCBzdGF0dXMiCittc2dzdHIgIkthbiBpbnRlIHNwYXJhIGFrdHVlbGwgc3RhdHVzIgorCisjOiBnaXQtc3Rhc2guc2g6Mjg2Cittc2dpZCAiQ2Fubm90IHJlbW92ZSB3b3JrdHJlZSBjaGFuZ2VzIgorbXNnc3RyICJLYW4gaW50ZSB0YSBib3J0IMOkbmRyaW5nYXIgaSBhcmJldHNrYXRhbG9nZW4iCisKKyM6IGdpdC1zdGFzaC5zaDozODcKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICJva8OkbmQgZmxhZ2dhOiAkb3B0IgorCisjOiBnaXQtc3Rhc2guc2g6Mzk3Cittc2dpZCAiTm8gc3Rhc2ggZm91bmQuIgorbXNnc3RyICJJbmdlbiBcInN0YXNoXCIgaGl0dGFkZXMuIgorCisjOiBnaXQtc3Rhc2guc2g6NDA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICJGw7ZyIG3DpW5nYSByZXZpc2lvbmVyIGFuZ2l2bmE6ICRSRVYiCisKKyM6IGdpdC1zdGFzaC5zaDo0MTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRyZWZlcmVuY2UgaXMgbm90IGEgdmFsaWQgcmVmZXJlbmNlIgorbXNnc3RyICIkcmVmZXJlbmNlIMOkciBpbnRlIGVuIGdpbHRpZyByZWZlcmVucyIKKworIzogZ2l0LXN0YXNoLnNoOjQzOAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAiXCIkYXJnc1wiIMOkciBpbnRlIGVuIFwic3Rhc2hcIi1saWtuYW5kZSBpbmNoZWNrbmluZyIKKworIzogZ2l0LXN0YXNoLnNoOjQ0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIlwiJGFyZ3NcIiDDpHIgaW50ZSBlbiBcInN0YXNoXCItcmVmZXJlbnMiCisKKyM6IGdpdC1zdGFzaC5zaDo0NTcKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAia2FuIGludGUgdXBwZGF0ZXJhIGluZGV4ZXQiCisKKyM6IGdpdC1zdGFzaC5zaDo0NjEKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIkthbiBpbnRlIHRpbGzDpG1wYSBlbiBcInN0YXNoXCIgbWl0dCBpIGVuIHNhbW1hbnNsYWduaW5nIgorCisjOiBnaXQtc3Rhc2guc2g6NDY5Cittc2dpZCAiQ29uZmxpY3RzIGluIGluZGV4LiBUcnkgd2l0aG91dCAtLWluZGV4LiIKK21zZ3N0ciAiS29uZmxpa3RlciBpIGluZGV4ZXQuIFRlc3RhIHV0YW4gLS1pbmRleC4iCisKKyM6IGdpdC1zdGFzaC5zaDo0NzEKK21zZ2lkICJDb3VsZCBub3Qgc2F2ZSBpbmRleCB0cmVlIgorbXNnc3RyICJLdW5kZSBpbnRlIHNwYXJhIGluZGV4dHLDpGQiCisKKyM6IGdpdC1zdGFzaC5zaDo1MDUKK21zZ2lkICJDYW5ub3QgdW5zdGFnZSBtb2RpZmllZCBmaWxlcyIKK21zZ3N0ciAiS2FuIGludGUgdGEgYm9ydCDDpG5kcmFkZSBmaWxlciB1ciBrw7ZuIgorCisjOiBnaXQtc3Rhc2guc2g6NTIwCittc2dpZCAiSW5kZXggd2FzIG5vdCB1bnN0YXNoZWQuIgorbXNnc3RyICJJbmRleGV0IGhhciBpbnRlIHRhZ2l0cyB1ciBrw7ZuLiIKKworIzogZ2l0LXN0YXNoLnNoOjU0MworIywgc2gtZm9ybWF0Cittc2dpZCAiRHJvcHBlZCAke1JFVn0gKCRzKSIKK21zZ3N0ciAiS2FzdGFkZSAke1JFVn0gKCRzKSIKKworIzogZ2l0LXN0YXNoLnNoOjU0NAorIywgc2gtZm9ybWF0Cittc2dpZCAiJHtSRVZ9OiBDb3VsZCBub3QgZHJvcCBzdGFzaCBlbnRyeSIKK21zZ3N0ciAiJHtSRVZ9OiBLdW5kZSBpbnRlIGthc3RhIFwic3Rhc2hcIi1wb3N0IgorCisjOiBnaXQtc3Rhc2guc2g6NTUyCittc2dpZCAiTm8gYnJhbmNoIG5hbWUgc3BlY2lmaWVkIgorbXNnc3RyICJJbmdldCBncmVubmFtbiBhbmdhdnMiCisKKyM6IGdpdC1zdGFzaC5zaDo2MjQKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIihGw7ZyIGF0dCDDpXRlcnN0w6RsbGEgZGVtLCBza3JpdiBcImdpdCBzdGFzaCBhcHBseVwiKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJHJlbW90ZXVybCciCittc2dzdHIgImthbiBpbnRlIHRhIGJvcnQgZW4ga29tcG9uZW50IGZyw6VuIHVybDplbiBcIiRyZW1vdGV1cmxcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIk5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICckc21fcGF0aCciCittc2dzdHIgIiIKKyJIaXR0YWRlIGluZ2VuIHVuZGVybW9kdWxtYXBwbmluZyBpIC5naXRtb2R1bGVzIGbDtnIgc8O2a3bDpGdlbiBcIiRzbV9wYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjg3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDbG9uZSBvZiAnJHVybCcgaW50byBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIGZhaWxlZCIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIGtsb25hIFwiJHVybFwiIHRpbGwgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI5NgorIywgc2gtZm9ybWF0Cittc2dpZCAiR2l0ZGlyICckYScgaXMgcGFydCBvZiB0aGUgc3VibW9kdWxlIHBhdGggJyRiJyBvciB2aWNlIHZlcnNhIgorbXNnc3RyICJHaXRrYXRhbG9nIFwiJGFcIiBpbmfDpXIgaSB1bmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRiXCIgZWxsZXIgb212w6RudCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MDYKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiUmVsYXRpdiBzw7ZrdsOkZyBrYW4gZW5kYXN0IGFudsOkbmRhcyBmcsOlbiBhcmJldHNrYXRhbG9nZW5zIHRvcHBuaXbDpSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJlcG8gVVJMOiAnJHJlcG8nIG11c3QgYmUgYWJzb2x1dGUgb3IgYmVnaW4gd2l0aCAuL3wuLi8iCittc2dzdHIgImFya2l2LVVSTDogXCIkcmVwb1wiIG3DpXN0ZSB2YXJhIGFic29sdXQgZWxsZXIgYsO2cmphIG1lZCAuL3wuLi8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDMzCisjLCBzaC1mb3JtYXQKK21zZ2lkICInJHNtX3BhdGgnIGFscmVhZHkgZXhpc3RzIGluIHRoZSBpbmRleCIKK21zZ3N0ciAiXCIkc21fcGF0aFwiIGZpbm5zIHJlZGFuIGkgaW5kZXhldCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisiRsO2bGphbmRlIHPDtmt2w6RnYXIgaWdub3JlcmFzIGF2IGVuIGF2IGRpbmEgLmdpdGlnbm9yZS1maWxlcjpcbiIKKyIkc21fcGF0aFxuIgorIkFudsOkbmQgLWYgb20gZHUgdmVya2xpZ2VuIHZpbGwgbMOkZ2dhIHRpbGwgZGVuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIkzDpGdnZXIgdGlsbCBiZWZpbnRsaWd0IGFya2l2IGkgXCIkc21fcGF0aFwiIGkgaW5kZXhldCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICJcIiRzbV9wYXRoXCIgZmlubnMgcmVkYW4gb2NoIMOkciBpbnRlIGV0dCBnaWx0aWd0IGdpdC1hcmtpdiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiRW4gZ2l0LWthdGFsb2cgZsO2ciBcIiRzbV9uYW1lXCIgaGl0dGFkZXMgbG9rYWx0IG1lZCBmasOkcnIoYXIpOiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb20iCittc2dzdHIgIiIKKyJGw7ZyIGF0dCDDpXRlcmFudsOkbmRhIGRlbiBsb2thbGEgZ2l0LWthdGFsb2dlbiBpc3TDpGxsZXQgZsO2ciBhdHQgcMOlIG55dHQga2xvbmEgIgorImZyw6VuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0IHJlcG8iCittc2dzdHIgIiIKKyJhbnbDpG5kIGZsYWdnYW4gXCItLWZvcmNlXCIuIE9tIGRlbiBsb2thbGEgZ2l0LWthdGFsb2dlbiBpbnRlIMOkciByaWt0aWd0IGFya2l2IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyJvcHRpb24uIgorbXNnc3RyICIiCisiZWxsZXIgb20gZHUgw6RyIG9zw6RrZXIgcMOlIHZhZCBkZXQgaW5uZWLDpHIsIHbDpGxqIG55dHQgbmFtbiBtZWQgZmxhZ2dhbiBcIi0tbmFtZSIKKyJcIi4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICckc21fbmFtZScuIgorbXNnc3RyICJBa3RpdmVyYXIgbG9rYWwgZ2l0LWthdGFsb2cgZsO2ciB1bmRlcm1vZHVsZW4gXCIkc21fbmFtZVwiIHDDpSBueXR0LiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0ODQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiS2FuIGludGUgY2hlY2thIHV0IHVuZGVybW9kdWxlbiBcIiRzbV9wYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gYWRkIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJNaXNzbHlja2FkZXMgbMOkZ2dhIHRpbGwgdW5kZXJtb2R1bGVuIFwiJHNtX3BhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0OTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHJlZ2lzdHJlcmEgdW5kZXJtb2R1bGVuIFwiJHNtX3BhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICckcHJlZml4JGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiR8OlciBpbiBpIFwiJHByZWZpeCRkaXNwbGF5cGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU2MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBpbmcgYXQgJyRwcmVmaXgkZGlzcGxheXBhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKK21zZ3N0ciAiIgorIlN0b3BwYXIgcMOlIFwiJHByZWZpeCRkaXNwbGF5cGF0aFwiOyBza3JpcHRldCByZXR1cm5lcmFkZSBlbiBzdGF0dXMgc2tpbGQgIgorImZyw6VuIG5vbGwuIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiTm8gdXJsIGZvdW5kIGZvciBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyBpbiAuZ2l0bW9kdWxlcyIKK21zZ3N0ciAiIgorIkhpdHRhZGUgaW5nZW4gdXJsIGbDtnIgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiBpIC5naXRtb2R1bGVzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxNworIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHVybCBmb3Igc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIk1pc3NseWNrYWRlcyByZWdpc3RyZXJhIHVybCBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiRkaXNwbGF5cGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjYxOQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlICckbmFtZScgKCR1cmwpIHJlZ2lzdGVyZWQgZm9yIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJVbmRlcm1vZHVsZW4gXCIkbmFtZVwiICgkdXJsKSByZWdpc3RyZXJhZCBmw7ZyIHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciB1cGRhdGUgbW9kZSBmb3Igc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMgcmVnaXN0cmVyYSB1cHBkYXRlcmluZ3Nsw6RnZSBmw7ZyIHVuZGVybW9kdWxzw7ZrdsOkZyBcIiRkaXNwbGF5cGF0aCIKKyJcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVzZSAnLicgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiQW52w6RuZCBcIi5cIiBvbSBkdSB2ZXJrbGlnZW4gdmlsbCBhdmluaXRpZXJhIGFsbGEgdW5kZXJtb2R1bGVyIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHdvcmsgdHJlZSAnJGRpc3BsYXlwYXRoJyBjb250YWlucyBhIC5naXQgZGlyZWN0b3J5IgorbXNnc3RyICIiCisiVW5kZXJtb2R1bGVucyBhcmJldHNrYXRhbG9nIFwiJGRpc3BsYXlwYXRoXCIgaW5uZWjDpWxsZXIga2F0YWxvZ2VuIFwiLmdpdFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIihhbnbDpG5kIFwicm0gLXJmXCIgb20gZHUgdmVya2xpZ2VuIHZpbGwgdGEgYm9ydCBkZW4gb2NoIGFsbCBkZXNzIGhpc3RvcmlrKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICckZGlzcGxheXBhdGgnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvICIKKyJkaXNjYXJkIHRoZW0iCittc2dzdHIgIiIKKyJVbmRlcm1vZHVsZW5zIGFyYmV0c2thdGFsb2cgXCIkZGlzcGxheXBhdGhcIiBoYXIgbG9rYWxhIMOkbmRyaW5nYXI7IFwiLWZcIiAiCisia2FzdGFyIGJvcnQgZGVtIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIlJlbnNhZGUga2F0YWxvZ2VuIFwiJGRpc3BsYXlwYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkt1bmRlIGludGUgdGEgYm9ydCB1bmRlcm1vZHVsZW5zIGFyYmV0c2thdGFsb2cgXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiS3VuZGUgaW50ZSBza2FwYSB0b20gdW5kZXJtb2R1bHNrYXRhbG9nIFwiJGRpc3BsYXlwYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgdW5yZWdpc3RlcmVkIGZvciBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiVW5kZXJtb2R1bGVuIFwiJG5hbWVcIiAoJHVybCkgYXZyZWdpc3RyZXJhZCBmw7ZyIHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyBub3QgaW5pdGlhbGl6ZWRcbiIKKyJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiIgorIlVuZGVybW9kdWxlbiBcIiRkaXNwbGF5cGF0aFwiIGhhciBpbnRlIGluaXRpZXJhdHNcbiIKKyJLYW5za2UgZHUgdmlsbCBrw7ZyYSBcInVwZGF0ZSAtLWluaXRcIj8iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmluZCBjdXJyZW50IHJldmlzaW9uIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJLYW4gaW50ZSBoaXR0YSBha3R1ZWxsIHJldmlzaW9uIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICJLYW4gaW50ZSBow6RtdGEgaSB1bmRlcm1vZHVsc8O2a3bDpGcgXCIkc21fcGF0aFwiIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJLYW4gaW50ZSBow6RtdGEgaSB1bmRlcm1vZHVsc8O2a3bDpGcgXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBjaGVja291dCAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJLYW4gaW50ZSBjaGVja2EgdXQgXCIkc2hhMVwiIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICJVbmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRkaXNwbGF5cGF0aFwiOiBjaGVja2FkZSB1dCBcIiRzaGExXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gcmViYXNlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkthbiBpbnRlIG9tYmFzZXJhIFwiJHNoYTFcIiBpIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJGRpc3BsYXlwYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIlVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJGRpc3BsYXlwYXRoXCI6IG9tYmFzZXJhZGUgaW4gaSBcIiRzaGExXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gbWVyZ2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiS2FuIGludGUgc2zDpSBpaG9wIFwiJHNoYTFcIiBpIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJGRpc3BsYXlwYXRoXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIlVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJGRpc3BsYXlwYXRoXCI6IHNhbW1hbnNsYWdlbiBpIFwiJHNoYTFcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJFeGVjdXRpb24gb2YgJyRjb21tYW5kICRzaGExJyBmYWlsZWQgaW4gc3VibW9kdWxlIHBhdGggJyRwcmVmaXgkc21fcGF0aCciCittc2dzdHIgIiIKKyJNaXNzbHlja2FkZXMga8O2cmEgXCIkY29tbWFuZCAkc2hhMVwiIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkcHJlZml4JHNtX3BhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckcHJlZml4JHNtX3BhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICJVbmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRwcmVmaXgkc21fcGF0aFwiOiBcIiRjb21tYW5kICRzaGExXCIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJNaXNzbHlja2FkZXMgcmVrdXJzZXJhIGluIGkgdW5kZXJtb2R1bHPDtmt2w6RnZW4gXCIkZGlzcGxheXBhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMDQ2Cittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAiRmxhZ2dhbiAtLWNhY2hlZCBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIGZsYWdnYW4gLS1maWxlcyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMDk4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bmV4cGVjdGVkIG1vZGUgJG1vZF9kc3QiCittc2dzdHIgIm92w6RudGF0IGzDpGdlICRtb2RfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiICBWYXJuaW5nOiAkZGlzcGxheV9uYW1lIGlubmVow6VsbGVyIGludGUgaW5jaGVja25pbmdlbiAkc2hhMV9zcmMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIFZhcm5pbmc6ICRkaXNwbGF5X25hbWUgaW5uZWjDpWxsZXIgaW50ZSBpbmNoZWNrbmluZ2VuICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTI0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdHMgJHNoYTFfc3JjIGFuZCAkc2hhMV9kc3QiCittc2dzdHIgIiIKKyIgIFZhcm5pbmc6ICRkaXNwbGF5X25hbWUgaW5uZWjDpWxsZXIgaW50ZSBpbmNoZWNrbmluZ2FybmEgJHNoYTFfc3JjIG9jaCAiCisiJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExNDkKK21zZ2lkICJibG9iIgorbXNnc3RyICJibG9iIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEyNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiTWlzc2x5Y2thZGVzIHJla3Vyc2VyYSBpbiBpIHVuZGVybW9kdWxzw7ZrdsOkZ2VuIFwiJHNtX3BhdGhcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMzMxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTeW5jaHJvbml6aW5nIHN1Ym1vZHVsZSB1cmwgZm9yICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJTeW5rcm9uaXNlcmFyIHVuZGVybW9kdWwtdXJsIGbDtnIgXCIkZGlzcGxheXBhdGhcIiIKKworI34gbXNnaWQgIkJVRzogcmVvcGVuIGEgbG9ja2ZpbGUgdGhhdCBpcyBzdGlsbCBvcGVuIgorI34gbXNnc3RyICJGRUw6IMOldGVyw7ZwcG5hIGVuIGzDpXNmaWwgc29tIGZvcnRmYXJhbmRlIMOkciDDtnBwZW4iCisKKyN+IG1zZ2lkICJCVUc6IHJlb3BlbiBhIGxvY2tmaWxlIHRoYXQgaGFzIGJlZW4gY29tbWl0dGVkIgorI34gbXNnc3RyICJGRUw6IMOldGVyw7ZwcG5hIGVuIGzDpXNmaWwgc29tIGhhciDDtnZlcmzDpG1uYXRzIgorCisjfiBtc2dpZCAib3B0aW9uICVzIGRvZXMgbm90IGFjY2VwdCBuZWdhdGl2ZSBmb3JtIgorI34gbXNnc3RyICJmbGFnZ2FuICVzIGdvZHRhciBpbnRlIG5lZ2F0aXYgZm9ybSIKKworI34gbXNnaWQgInVuYWJsZSB0byBwYXJzZSB2YWx1ZSAnJXMnIGZvciBvcHRpb24gJXMiCisjfiBtc2dzdHIgImt1bmRlIGludGUgdG9sa2EgdsOkcmRldCBcIiVzXCIgZsO2ciBmbGFnZ2FuICVzIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgSEVBRCIKKyN+IG1zZ3N0ciAia2FuIGludGUgYmVzdMOkbW1hIEhFQUQiCisKKyN+IG1zZ2lkICItYiBhbmQgLUIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKKyN+IG1zZ3N0ciAiLWIgb2NoIC1CIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyN+IG1zZ2lkICJZb3UgbmVlZCB0byBzZXQgeW91ciBjb21taXR0ZXIgaW5mbyBmaXJzdCIKKyN+IG1zZ3N0ciAiRHUgbcOlc3RlIHN0w6RsbGEgaW4gZGluIGluY2hlY2thcmluZm9ybWF0aW9uIGbDtnJzdCIKIAogI34gbXNnaWQgIiIKLSN+ICJcbiIKLSN+ICJHaXRrIC0gYSBjb21taXQgdmlld2VyIGZvciBnaXRcbiIKLSN+ICJcbiIKLSN+ICJDb3B5cmlnaHQgwqkgMjAwNS0yMDE1IFBhdWwgTWFja2VycmFzXG4iCi0jfiAiXG4iCi0jfiAiVXNlIGFuZCByZWRpc3RyaWJ1dGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIKKyN+ICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiJGNtZGxpbmUgLS1jb250aW51ZVwiLlxuIgorI34gIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIkY21kbGluZSAtLXNraXBcIiBpbnN0ZWFkLlxuIgorI34gIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJGNtZGxpbmUgLS1hYm9ydCIKKyN+ICJcIi4iCiAjfiBtc2dzdHIgIiIKKyN+ICJOw6RyIGR1IGhhciBsw7ZzdCBwcm9ibGVtZXQga8O2ciBkdSBcIiRjbWRsaW5lIC0tY29udGludWVcIi5cbiIKKyN+ICJPbSBkdSB2aWxsIGhvcHBhIMO2dmVyIHBhdGNoZW4ga8O2ciBkdSBpc3TDpGxsZXQgXCIkY21kbGluZSAtLXNraXBcIi5cbiIKKyN+ICJGw7ZyIGF0dCDDpXRlcnN0w6RsbGEgb3JpZ2luYWxncmVuZW4gb2NoIGF2YnJ5dGEga8O2ciBkdSBcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCisKKyN+IG1zZ2lkICJQYXRjaCBmb3JtYXQgJHBhdGNoX2Zvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIKKyN+IG1zZ3N0ciAiUGF0Y2hmb3JtYXRldCAkcGF0Y2hfZm9ybWF0IHN0w7ZkcyBpbnRlLiIKKworI34gbXNnaWQgIlBsZWFzZSBtYWtlIHVwIHlvdXIgbWluZC4gLS1za2lwIG9yIC0tYWJvcnQ/IgorI34gbXNnc3RyICJCZXN0w6RtIGRpZy4gLS1za2lwIGVsbGVyIC0tYWJvcnQ/IgorCisjfiBtc2dpZCAiIgorI34gIlBhdGNoIGlzIGVtcHR5LiAgV2FzIGl0IHNwbGl0IHdyb25nP1xuIgorI34gIklmIHlvdSB3b3VsZCBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBpbnN0ZWFkIHJ1biBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorI34gIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZyBydW4gXCIkY21kbGluZSAtLWFib3J0XCIuIgorI34gbXNnc3RyICIiCisjfiAiUGF0Y2hlbiDDpHIgdG9tLiBEZWxhZGVzIGRlbiB1cHAgZmVsYWt0aWd0P1xuIgorI34gIk9tIGR1IHZpbGwgaG9wcGEgw7Z2ZXIgcGF0Y2hlbiBrw7ZyIGR1IGlzdMOkbGxldCBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorI34gIkbDtnIgYXR0IMOldGVyc3TDpGxsYSBvcmlnaW5hbGdyZW5lbiBvY2ggYXZicnl0YSBrw7ZyIGR1IFwiJGNtZGxpbmUgLS1hYm9ydFwiLiIKKworI34gbXNnaWQgIlBhdGNoIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBlLW1haWwgYWRkcmVzcy4iCisjfiBtc2dzdHIgIlBhdGNoZW4gaGFyIGludGUgbsOlZ29uIGdpbHRpZyBlLXBvc3RhZHJlc3MuIgorCisjfiBtc2dpZCAiQXBwbHlpbmc6ICRGSVJTVExJTkUiCisjfiBtc2dzdHIgIlRpbGzDpG1wYXI6ICRGSVJTVExJTkUiCisKKyN+IG1zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJG1zZ251bSAkRklSU1RMSU5FIgorI34gbXNnc3RyICJQYXRjaGVuIG1pc3NseWNrYWRlcyB2aWQgJG1zZ251bSAkRklSU1RMSU5FIgorCisjfiBtc2dpZCAiIgorI34gIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuXG4iCisjfiAiUGxlYXNlLCBmaXggdGhlbSB1cCBpbiB0aGUgd29yayB0cmVlLCBhbmQgdGhlbiB1c2UgJ2dpdCBhZGQvcm0gPGZpbGU+J1xuIgorI34gImFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbiBhbmQgbWFrZSBhIGNvbW1pdC4iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBrYW4gaW50ZSBnw7ZyYSBlbiBcInB1bGxcIiBkw6UgZHUgaGFyIMOkbmRyaW5nYXIgc29tIGludGUgY2hlY2thdHMgaW4uXG4iCisjfiAiUsOkdHRhIGRlbSBpIGRpbiBhcmJldHNrYXRhbG9nIG9jaCBhbnbDpG5kIHNlZGFuIFwiZ2l0IGFkZC9ybSA8ZmlsPlwiXG4iCisjfiAiZMOkciBkZXQgw6RyIGzDpG1wbGlndCBmw7ZyIGF0dCBhbmdlIGzDtnNuaW5nIG9jaCBjaGVja2EgaW4uIgorCisjfiBtc2dpZCAiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBrYW4gaW50ZSBnw7ZyYSBlbiBcInB1bGxcIiBkw6UgZHUgaGFyIMOkbmRyaW5nYXIgc29tIGludGUgY2hlY2thdHMgaW4uIgorCisjfiBtc2dpZCAiIgorI34gIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLlxuIgorI34gIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBoYXIgaW50ZSBhdnNsdXRhdCBzYW1tYW5zbGFnbmluZ2VuIChNRVJHRV9IRUFEIGZpbm5zKS5cbiIKKyN+ICJDaGVja2EgaW4gZGluYSDDpG5kcmluZ2FyIGlubmFuIGR1IGthbiBzbMOlIGlob3AuIgorCisjfiBtc2dpZCAibm8gYnJhbmNoIHNwZWNpZmllZCIKKyN+IG1zZ3N0ciAiaW5nZXQgZ3Jlbm5hbW4gYW5nYXZzIgorCisjfiBtc2dpZCAiY2hlY2sgYSBicmFuY2ggb3V0IGluIGEgc2VwYXJhdGUgd29ya2luZyBkaXJlY3RvcnkiCisjfiBtc2dzdHIgImNoZWNrYSB1dCBlbiBncmVuIGkgc2VwYXJhdCBhcmJldHNrYXRhbG9nIgorCisjfiBtc2dpZCAicHJ1bmUgLmdpdC93b3JrdHJlZXMiCisjfiBtc2dzdHIgInJlbnNhIC5naXQvd29ya3RyZWVzIgorCisjfiBtc2dpZCAiLS13b3JrdHJlZXMgZG9lcyBub3QgdGFrZSBleHRyYSBhcmd1bWVudHMiCisjfiBtc2dzdHIgIi0td29ya3RyZWVzIHRhciBpbnRlIHl0dGVybGlnYXJlIGFyZ3VtZW50IgorCisjfiBtc2dpZCAiVGhlIG1vc3QgY29tbW9ubHkgdXNlZCBnaXQgY29tbWFuZHMgYXJlOiIKKyN+IG1zZ3N0ciAiRGUgbWVzdCBhbnbDpG5kYSBnaXQta29tbWFuZG9uYSDDpHI6IgorCisjfiBtc2dpZCAiTm8gc3VjaCBicmFuY2g6ICclcyciCisjfiBtc2dzdHIgIk9rw6RuZCBncmVuOiBcIiVzXCIiCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGdpdCBsaW5rICVzIgorI34gbXNnc3RyICJLdW5kZSBpbnRlIHNrYXBhIGdpdGzDpG5rICVzIgorCisjfiBtc2dpZCAiSW52YWxpZCBnYy5wcnVuZWV4cGlyZTogJyVzJyIKKyN+IG1zZ3N0ciAiT2dpbHRpZyBnYy5wcnVuZWV4cGlyZTogJyVzJyIKKworI34gbXNnaWQgIihkZXRhY2hlZCBmcm9tICVzKSIKKyN+IG1zZ3N0ciAiKGZyw6Vua29wcGxhZCBmcsOlbiAlcykiCisKKyN+IG1zZ2lkICJObyBleGlzdGluZyBhdXRob3IgZm91bmQgd2l0aCAnJXMnIgorI34gbXNnc3RyICJIaXR0YWRlIGluZ2VuIGJlZmludGxpZyBmw7ZyZmF0dGFyZSBtZWQgXCIlc1wiIgorCisjfiBtc2dpZCAic2VhcmNoIGFsc28gaW4gaWdub3JlZCBmaWxlcyIKKyN+IG1zZ3N0ciAic8O2ayDDpHZlbiBpIGlnbm9yZXJhZGUgZmlsZXIiCisKKyN+IG1zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHw8YnJhbmNoPikiCisjfiBtc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbW4+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8Z3Jlbj4pIgorCisjfiBtc2dpZCAibm8gZmlsZXMgYWRkZWQiCisjfiBtc2dzdHIgImluZ2EgZmlsZXIgaGFyIGxhZ3RzIHRpbGwiCisKKyN+IG1zZ2lkICJmb3JjZSBjcmVhdGlvbiAod2hlbiBhbHJlYWR5IGV4aXN0cykiCisjfiBtc2dzdHIgInR2aW5nYSBza2FwYW5kZSAobsOkciBkZW4gcmVkYW4gZmlubnMpIgorCisjfiBtc2dpZCAiTWFsZm9ybWVkIGlkZW50IHN0cmluZzogJyVzJyIKKyN+IG1zZ3N0ciAiRmVsYWt0aWcgaW5kcmFnbmluZ3NzdHLDpG5nOiBcIiVzXCIiCisKKyN+IG1zZ2lkICJzbG90IgorI34gbXNnc3RyICJwbGF0cyIKKworI34gbXNnaWQgIkZhaWxlZCB0byBsb2NrIHJlZiBmb3IgdXBkYXRlIgorI34gbXNnc3RyICJNaXNzbHlja2FkZXMgbMOlc2EgcmVmZXJlbnMgZsO2ciB1cHBkYXRlcmluZyIKKworI34gbXNnaWQgIkZhaWxlZCB0byB3cml0ZSByZWYiCisjfiBtc2dzdHIgIk1pc3NseWNrYWRlcyBza3JpdmEgcmVmZXJlbnMiCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gbG9jayBIRUFEIGR1cmluZyBmYXN0X2ZvcndhcmRfdG8iCisjfiBtc2dzdHIgIk1pc3NseWNrYWRlcyBsw6VzYSBIRUFEIHVuZGVyIFwiZmFzdF9mb3J3YXJkX3RvXCIiCisKKyN+IG1zZ2lkICJpbnZhbGlkIGNvbW1pdDogJXMiCisjfiBtc2dzdHIgImZlbGFrdGlnIGluY2hlY2tuaW5nOiAlcyIKKworI34gbXNnaWQgImNhbm5vdCBsb2NrIEhFQUQgcmVmIgorI34gbXNnc3RyICJrdW5kZSBpbnRlIGzDpXNhIEhFQUQtcmVmZXJlbnMiCisKKyN+IG1zZ2lkICJjYW5ub3QgdXBkYXRlIEhFQUQgcmVmIgorI34gbXNnc3RyICJrdW5kZSBpbnRlIHVwcGRhdGVyYSBIRUFELXJlZmVyZW5zIgorCisjfiBtc2dpZCAiY2Fubm90IHRlbGwgY3dkIgorI34gbXNnc3RyICJrYW4gaW50ZSBsw6RzYSBha3R1ZWxsIGthdGFsb2cgKGN3ZCkiCisKKyN+IG1zZ2lkICIlczogY2Fubm90IGxvY2sgdGhlIHJlZiIKKyN+IG1zZ3N0ciAiJXM6IGthbiBpbnRlIGzDpXNhIHJlZmVyZW5zZW4iCisKKyN+IG1zZ2lkICIlczogY2Fubm90IHVwZGF0ZSB0aGUgcmVmIgorI34gbXNnc3RyICIlczoga2FuIGludGUgdXBwZGF0ZXJhIHJlZmVyZW5zZW4iCisKKyN+IG1zZ2lkICJjb21taXQgaGFzIGVtcHR5IG1lc3NhZ2UiCisjfiBtc2dzdHIgImluY2hlY2tuaW5nZW4gaGFyIGV0dCB0b210IG1lZGRlbGFuZGUiCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gY2hkaXI6ICVzIgorI34gbXNnc3RyICJLdW5kZSBpbnRlIGJ5dGEga2F0YWxvZyAoY2hkaXIpOiAlcyIKKworI34gbXNnaWQgIlRyYWNraW5nIG5vdCBzZXQgdXA6IG5hbWUgdG9vIGxvbmc6ICVzIgorI34gbXNnc3RyICJTcMOlcm5pbmcgaGFyIGludGUgc3TDpGxsdHMgaW46IG5hbW5ldCBmw7ZyIGzDpW5ndDogJXMiCisKKyN+IG1zZ2lkICJjb3VsZCBub3QgZmluZCAuZ2l0bW9kdWxlcyBpbiBpbmRleCIKKyN+IG1zZ3N0ciAia3VuZGUgaW50ZSBoaXR0YSAuZ2l0bW9kdWxlcyBpIGluZGV4ZXQiCisKKyN+IG1zZ2lkICJyZWFkaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorI34gbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkc2EgdXBwZGF0ZXJhZCAuZ2l0bW9kdWxlcyIKKworI34gbXNnaWQgInVuYWJsZSB0byBzdGF0IHVwZGF0ZWQgLmdpdG1vZHVsZXMiCisjfiBtc2dzdHIgImthbiBpbnRlIHRhIHN0YXR1cyBww6UgdXBwZGF0ZXJhZCAuZ2l0bW9kdWxlcyIKKworI34gbXNnaWQgInVuYWJsZSB0byByZW1vdmUgLmdpdG1vZHVsZXMgZnJvbSBpbmRleCIKKyN+IG1zZ3N0ciAia2FuIGludGUgdGEgYm9ydCAuZ2l0bW9kdWxlcyBmcsOlbiBpbmRleGV0IgorCisjfiBtc2dpZCAiYWRkaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorI34gbXNnc3RyICJtaXNzbHlja2FkZXMgbMOkZ2dhIHRpbGwgdXBwZGF0ZXJhZCAuZ2l0bW9kdWxlcyIKKworI34gbXNnaWQgImJ1ZyIKKyN+IG1zZ3N0ciAicHJvZ3JhbWZlbCIKKworI34gbXNnaWQgImFoZWFkICIKKyN+IG1zZ3N0ciAiZsO2cmUgIgorCisjfiBtc2dpZCAiLCBiZWhpbmQgIgorI34gbXNnc3RyICIsIGVmdGVyICIKKworI34gbXNnaWQgIiIKKyN+ICJUaGUgYmVoYXZpb3Igb2YgJ2dpdCBhZGQgJXMgKG9yICVzKScgd2l0aCBubyBwYXRoIGFyZ3VtZW50IGZyb20gYVxuIgorI34gInN1YmRpcmVjdG9yeSBvZiB0aGUgdHJlZSB3aWxsIGNoYW5nZSBpbiBHaXQgMi4wIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgIgorI34gImFueW1vcmUuXG4iCisjfiAiVG8gYWRkIGNvbnRlbnQgZm9yIHRoZSB3aG9sZSB0cmVlLCBydW46XG4iCiAjfiAiXG4iCi0jfiAiR2l0ayAtIGVuIGluY2hlY2tuaW5nc3Zpc2FyZSBmw7ZyIGdpdFxuIgorI34gIiAgZ2l0IGFkZCAlcyA6L1xuIgorI34gIiAgKG9yIGdpdCBhZGQgJXMgOi8pXG4iCiAjfiAiXG4iCi0jfiAiQ29weXJpZ2h0IMKpIDIwMDUtMjAxNSBQYXVsIE1hY2tlcnJhc1xuIgorI34gIlRvIHJlc3RyaWN0IHRoZSBjb21tYW5kIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgcnVuOlxuIgogI34gIlxuIgotI34gIkFudsOkbmQgb2NoIHZpZGFyZWbDtnJtZWRsYSBlbmxpZ3QgdmlsbGtvcmVuIGkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiCisjfiAiICBnaXQgYWRkICVzIC5cbiIKKyN+ICIgIChvciBnaXQgYWRkICVzIC4pXG4iCisjfiAiXG4iCisjfiAiV2l0aCB0aGUgY3VycmVudCBHaXQgdmVyc2lvbiwgdGhlIGNvbW1hbmQgaXMgcmVzdHJpY3RlZCB0byB0aGUgY3VycmVudCAiCisjfiAiZGlyZWN0b3J5LlxuIgorI34gbXNnc3RyICIiCisjfiAiQmV0ZWVuZGV0IGbDtnIgXCJnaXQgYWRkICVzIChlbGxlciAlcylcIiB1dGFuIHPDtmt2w6Rnc2FyZ3VtZW50IGZyw6VuIGVuXG4iCisjfiAidW5kZXJrYXRhbG9nIGkgZXR0IHRyw6RkIGtvbW1lciDDpG5kcmFzIGkgR2l0IDIuMCBvY2ggYsO2ciBpbnRlIGzDpG5ncmUgIgorI34gImFudsOkbmRhcy5cbiIKKyN+ICJGw7ZyIGF0dCBsw6RnZ2EgdGlsbCBpbm5laMOlbGxldCBmw7ZyIGhlbGEgdHLDpGRldCwgYW52w6RuZDpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBhZGQgJXMgOi9cbiIKKyN+ICIgIChlbGxlciBnaXQgYWRkICVzIDovKVxuIgorI34gIlxuIgorI34gIkbDtnIgYXR0IGJlZ3LDpG5zYSBrb21tYW5kb3QgdGlsbCBha3R1ZWxsIGthdGFsb2csIGFudsOkbmQ6XG4iCisjfiAiXG4iCisjfiAiICBnaXQgYWRkICVzIC5cbiIKKyN+ICIgIChlbGxlciBnaXQgYWRkICVzIC4pXG4iCisjfiAiXG4iCisjfiAiSSBudXZhcmFuZGUgdmVyc2lvbiBhdiBHaXQgYmVncsOkbnNhcyBrb21tYW5kb3QgdGlsbCBha3R1ZWxsIGthdGFsb2cuXG4iCiAKLSN+IG1zZ2lkICJuZXh0IgotI34gbXNnc3RyICJuw6RzdGEiCisjfiBtc2dpZCAiIgorI34gIllvdSByYW4gJ2dpdCBhZGQnIHdpdGggbmVpdGhlciAnLUEgKC0tYWxsKScgb3IgJy0taWdub3JlLXJlbW92YWwnLFxuIgorI34gIndob3NlIGJlaGF2aW91ciB3aWxsIGNoYW5nZSBpbiBHaXQgMi4wIHdpdGggcmVzcGVjdCB0byBwYXRocyB5b3UgIgorI34gInJlbW92ZWQuXG4iCisjfiAiUGF0aHMgbGlrZSAnJXMnIHRoYXQgYXJlXG4iCisjfiAicmVtb3ZlZCBmcm9tIHlvdXIgd29ya2luZyB0cmVlIGFyZSBpZ25vcmVkIHdpdGggdGhpcyB2ZXJzaW9uIG9mIEdpdC5cbiIKKyN+ICJcbiIKKyN+ICIqICdnaXQgYWRkIC0taWdub3JlLXJlbW92YWwgPHBhdGhzcGVjPicsIHdoaWNoIGlzIHRoZSBjdXJyZW50IGRlZmF1bHQsXG4iCisjfiAiICBpZ25vcmVzIHBhdGhzIHlvdSByZW1vdmVkIGZyb20geW91ciB3b3JraW5nIHRyZWUuXG4iCisjfiAiXG4iCisjfiAiKiAnZ2l0IGFkZCAtLWFsbCA8cGF0aHNwZWM+JyB3aWxsIGxldCB5b3UgYWxzbyByZWNvcmQgdGhlIHJlbW92YWxzLlxuIgorI34gIlxuIgorI34gIlJ1biAnZ2l0IHN0YXR1cycgdG8gY2hlY2sgdGhlIHBhdGhzIHlvdSByZW1vdmVkIGZyb20geW91ciB3b3JraW5nIHRyZWUuXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJEdSBrw7ZyZGUgXCJnaXQgYWRkXCIgdXRhbiB2YXJrZW4gXCItQSAoLS1hbGwpXCIgZWxsZXIgXCItLWlnbm9yZS1yZW1vdmFsIgorI34gIlwiLlxuIgorI34gIkJldGVlbmRldCBrb21tZXIgw6RuZHJhcyBpIEdpdCAyLjAgdmFkIGfDpGxsZXIgc8O2a3bDpGdhciBkdSB0YWdpdCBib3J0LlxuIgorI34gIlPDtmt2w6RnYXIgc29tIFwiJXNcIiwgc29tIGhhclxuIgorI34gInRhZ2l0cyBib3J0IGZyw6VuIGRpbiBhcmJldHNrYXRhbG9nIGlnbm9yZXJhcyBpIGRlbiBow6RyIHZlcnNpb25lbiBhdiBHaXQuXG4iCisjfiAiXG4iCisjfiAiKiBcImdpdCBhZGQgLS1pZ25vcmUtcmVtb3ZhbCA8c8O2a3bDpGc+XCIsIHNvbSDDpHIgZsO2cnZhbGV0IGp1c3QgbnUsXG4iCisjfiAiICBpZ25vcmVyYXIgc8O2a3bDpGdhciBkdSBoYXIgdGFnaXQgYm9ydCBmcsOlbiBhcmJldHNrYXRhbG9nZW4uXG4iCisjfiAiXG4iCisjfiAiKiBcImdpdCBhZGQgLS1hbGwgPHPDtmt2w6RnPlwiIGzDpXRlciBkaWcgw6R2ZW4gcmVnaXN0cmVyYSBib3J0dGFnbmluZ2FybmEuXG4iCisjfiAiXG4iCisjfiAiS8O2ciBcImdpdCBzdGF0dXNcIiBmw7ZyIGF0dCBrb250cm9sbGVyYSBzw7ZrdsOkZ2FybmEgZHUgdGFnaXQgYm9ydCBmcsOlblxuIgorI34gImFyYmV0c2thdGFsb2dlbi5cbiIKIAotI34gbXNnaWQgInByZXYiCi0jfiBtc2dzdHIgImbDtnJlZyIKKyN+IG1zZ2lkICJrZXkgaWQiCisjfiBtc2dzdHIgIm55Y2tlbC1pZCIKIAotI34gbXNnaWQgIkNEYXRlIgotI34gbXNnc3RyICJTa2FwYXQgZGF0dW0iCisjfiBtc2dpZCAiIgorI34gIkF1dG8gcGFja2luZyB0aGUgcmVwb3NpdG9yeSBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS4gWW91IG1heSBhbHNvXG4iCisjfiAicnVuIFwiZ2l0IGdjXCIgbWFudWFsbHkuIFNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4iCisjfiBtc2dzdHIgIiIKKyN+ICJQYWNrYXIgYXJraXZldCBhdXRvbWF0aXNrdCBmw7ZyIG9wdGltYWwgcHJlc3RhbmRhLiBEdSBrYW4gw6R2ZW5cbiIKKyN+ICJrw7ZyYSBcImdpdCBnY1wiIG1hbnVlbGx0LiBTZSBcImdpdCBoZWxwIGdjXCIgZsO2ciBtZXIgaW5mb3JtYXRpb24uXG4iCiAKLSN+IG1zZ2lkICJDYW5ub3QgZmluZCB0aGUgZ2l0IGRpcmVjdG9yeSBcIiVzXCIuIgotI34gbXNnc3RyICJIaXR0YXIgaW50ZSBnaXQta2F0YWxvZ2VuIFwiJXNcIi4iCisjfiBtc2dpZCAiIgorI34gIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyN+ICJjb3VudGVycGFydC4gSWYgeW91IGRpZCBub3QgaW50ZW5kIHRvIHB1c2ggdGhhdCBicmFuY2gsIHlvdSBtYXkgd2FudCB0b1xuIgorI34gInNwZWNpZnkgYnJhbmNoZXMgdG8gcHVzaCBvciBzZXQgdGhlICdwdXNoLmRlZmF1bHQnIGNvbmZpZ3VyYXRpb24gIgorI34gInZhcmlhYmxlXG4iCisjfiAidG8gJ3NpbXBsZScsICdjdXJyZW50JyBvciAndXBzdHJlYW0nIHRvIHB1c2ggb25seSB0aGUgY3VycmVudCBicmFuY2guIgorI34gbXNnc3RyICIiCisjfiAiVXBwZGF0ZXJpbmdhciBhdnZpc2FkZXMgZMOlIMOkbmRlbiBww6UgZW4gaW5zw6RuZCBncmVuIMOkciBiYWtvbSBkZXNzXG4iCisjfiAiZmrDpHJybW90c3ZhcmlnaGV0LiBPbSBkZXQgaW50ZSB2YXIgbWVuaW5nZW4gYXR0IHPDpG5kYSBpbiBncmVuZW4sIGLDtnJcbiIKKyN+ICJkdSBzcGVjaWZpY2VyYSBncmVuYXIgYXR0IHPDpG5kYSwgZWxsZXIgw6RuZHJhIGluc3TDpGxsbmluZ3N2YXJpYWJlbG5cbiIKKyN+ICJcInB1c2gtZGVmYXVsdFwiIHRpbGwgXCJzaW1wbGVcIiwgXCJjdXJyZW50XCIgZWxsZXIgXCJ1cHN0cmVhbVwiIGbDtnIgYXR0ICIKKyN+ICJlbmRhc3RcbiIKKyN+ICJzw6RuZGEgYWt0dWVsbCBncmVuLiIKIAotI34gbXNnaWQgIlNIQTEgSUQ6ICIKLSN+IG1zZ3N0ciAiU0hBMS1pZDogIgorI34gbXNnaWQgImNvcGllZDogICAgICVzIC0+ICVzIgorI34gbXNnc3RyICJrb3BpZXJhZDogICAlcyAtPiAlcyIKIAotI34gbXNnaWQgIi0gc3RvcHBpbmdcbiIKLSN+IG1zZ3N0ciAiLSBzdGFubmFyXG4iCisjfiBtc2dpZCAiZGVsZXRlZDogICAgJXMiCisjfiBtc2dzdHIgImJvcnR0YWdlbjogICVzIgogCi0jfiBtc2dpZCAiVGFnL0hlYWQgJXMgaXMgbm90IGtub3duIgotI34gbXNnc3RyICJUYWdnL2h1dnVkICVzIMOkciBva8OkbnQiCisjfiBtc2dpZCAibW9kaWZpZWQ6ICAgJXMiCisjfiBtc2dzdHIgIsOkbmRyYWQ6ICAgICAlcyIKIAotI34gbXNnaWQgIi9cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0LCBvciByZWRvIGZpbmQiCi0jfiBtc2dzdHIgIi9cdFx0R8OlIHRpbGwgbsOkc3RhIHPDtmt0csOkZmYsIGVsbGVyIHPDtmsgcMOlIG55dHQiCisjfiBtc2dpZCAicmVuYW1lZDogICAgJXMgLT4gJXMiCisjfiBtc2dzdHIgIm5hbW5ieXRlOiAgICVzIC0+ICVzIgogCi0jfiBtc2dpZCAiTmFtZSIKLSN+IG1zZ3N0ciAiTmFtbiIKKyN+IG1zZ2lkICJ1bm1lcmdlZDogICAlcyIKKyN+IG1zZ3N0ciAib3NhbW1hbnNsLjogJXMiCisKKyN+IG1zZ2lkICJpbnB1dCBwYXRocyBhcmUgdGVybWluYXRlZCBieSBhIG51bGwgY2hhcmFjdGVyIgorI34gbXNnc3RyICJzw7ZrdsOkZ2FyIGF2ZGVsYXMgbWVkIG51bGwtdGVja2VuIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIGZpbGVzIHdvdWxkIE5PVCBiZSBzYXZlZCBidXQgbmVlZCB0byBiZSByZW1vdmVkICIKKyN+ICJieSBzdGFzaCBzYXZlOiIKKyN+IG1zZ3N0ciAiIgorI34gIkbDtmxqYW5kZSBvc3DDpXJhZGUgw6RuZHJpbmdhciBza3VsbGUgSU5URSBzcGFyYXMgdXRhbiBtw6VzdGUgdGFzIGJvcnQgbWVkICIKKyN+ICJcInN0YXNoIHNhdmVcIjoiCisKKyN+IG1zZ2lkICIiCisjfiAiQWJvcnRpbmcuIENvbnNpZGVyIHVzaW5nIGVpdGhlciB0aGUgLS1mb3JjZSBvciAtLWluY2x1ZGUtdW50cmFja2VkIG9wdGlvbi4iCisjfiBtc2dzdHIgIiIKKyN+ICJBdmJyeXRlci4gw5Z2ZXJ2w6RnIGF0dCBhbnbDpG5kYSBhbnRpbmdlbiBmbGFnZ2FuIC0tZm9yY2UgZWxsZXIgLS1pbmNsdWRlLSIKKyN+ICJ1bnRyYWNrZWQuIgorCisjfiBtc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1yZXNvbHZlZFwiKSIKKyN+IG1zZ3N0ciAiICAocsOkdHRhIGtvbmZsaWt0ZXIgb2NoIGvDtnIgc2VkYW4gXCJnaXQgYW0gLS1yZXNvbHZlZFwiKSIKKworI34gbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjb21taXRcIikiCisjfiBtc2dzdHIgIiAgKGFsbGEga29uZmxpa3RlciBoYXIgcsOkdHRhdHM6IGvDtnIgXCJnaXQgY29tbWl0XCIpIgorCisjfiBtc2dpZCAibW9yZSB0aGFuICVkIHRyZWVzIGdpdmVuOiAnJXMnIgorI34gbXNnc3RyICJtZXIgw6RuICVkIHRyw6RkIGFuZ2F2czogXCIlc1wiIgorCisjfiBtc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tbm8tZmYgd2l0aCAtLWZmLW9ubHkuIgorI34gbXNnc3RyICJEdSBrYW4gaW50ZSBrb21iaW5lcmEgLS1uby1mZiBtZWQgLS1mZi1vbmx5LiIKKworI34gbXNnaWQgIiIKKyN+ICJzdWJtb2R1bGUgJyVzJyAob3Igb25lIG9mIGl0cyBuZXN0ZWQgc3VibW9kdWxlcykgdXNlcyBhIC5naXQgZGlyZWN0b3J5XG4iCisjfiAiKHVzZSAncm0gLXJmJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gcmVtb3ZlIGl0IGluY2x1ZGluZyBhbGwgb2YgaXRzICIKKyN+ICJoaXN0b3J5KSIKKyN+IG1zZ3N0ciAiIgorI34gInVuZGVybW9kdWxlbiBcIiVzXCIgKGVsbGVyIGVuIGF2IGRlc3MgdW5kZXJtb2R1bGVyKSBhbnbDpG5kZXIgZW4gLmdpdC0iCisjfiAia2F0YWxvZ1xuIgorI34gIihhbnbDpG5kIFwicm0gLXJmXCIgb20gZHUgdmVya2xpZ2VuIHZpbGwgdGEgYm9ydCBkZW4gb2NoIGFsbCBkZXNzIGhpc3RvcmlrKSIKKworI34gbXNnaWQgIiIKKyN+ICInJXMnIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXhcbiIKKyN+ICIodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpIgorI34gbXNnc3RyICIiCisjfiAiXCIlc1wiIGhhciBrw7ZhZGUgw6RuZHJpbmdhciBpIGluZGV4ZXRcbiIKKyN+ICIoYW52w6RuZCAtLWNhY2hlZCBmw7ZyIGF0dCBiZWjDpWxsYSBmaWxlbiBlbGxlciAtZiBmw7ZyIGF0dCB0dmluZ2EgIgorI34gImJvcnR0YWduaW5nKSIKKworI34gbXNnaWQgInNob3cgY29tbWl0cyB3aGVyZSBubyBwYXJlbnQgY29tZXMgYmVmb3JlIGl0cyBjaGlsZHJlbiIKKyN+IG1zZ3N0ciAidmlzYSBpbmNoZWNrbmluZ2FyIGTDpHIgaW5nZW4gZsO2csOkbGRlciBrb21tZXIgZsO2cmUgZGVzcyBiYXJuIgorCisjfiBtc2dpZCAic2hvdyB0aGUgSEVBRCByZWZlcmVuY2UiCisjfiBtc2dzdHIgInZpc2EgSEVBRC1yZWZlcmVuc2VuIgorCisjfiBtc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckcHJlZml4JHNtX3BhdGgnIgorI34gbXNnc3RyICJLYW4gaW50ZSBow6RtdGEgaSB1bmRlcm1vZHVsc8O2a3bDpGcgXCIkcHJlZml4JHNtX3BhdGhcIiIKKworI34gbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRwcmVmaXgkc21fcGF0aCciCisjfiBtc2dzdHIgIk1pc3NseWNrYWRlcyByZWt1cnNlcmEgaW4gaSB1bmRlcm1vZHVsc8O2a3bDpGdlbiBcIiRwcmVmaXgkc21fcGF0aFwiIgorCisjfiBtc2dpZCAiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gICdzdGF0dXMgLXVubyciCisjfiBtc2dzdHIgIkRldCB0b2cgJS4yZiBzZWt1bmRlciBhdHQgcsOka25hIG9zcMOlcmFkZSBmaWxlci4gXCJzdGF0dXMgLXVub1wiIgorCisjfiBtc2dpZCAibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZCIKKyN+IG1zZ3N0ciAia2Fuc2tlIGfDtnIgZGV0IHNuYWJiYXJlLCBtZW4gZHUgbcOlc3RlIHZhcmEgZsO2cnNpa3RpZyBzw6UgYXR0IGR1IgorCisjfiBtc2dpZCAibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKKyN+IG1zZ3N0ciAiaW50ZSBnbMO2bW1lciBsw6RnZ2EgdGlsbCBmaWxlciBzasOkbHYgKHNlIFwiZ2l0IGhlbHAgc3RhdHVzXCIpIgorCisjfiBtc2dpZCAiZ2l0IHNob3J0bG9nIFstbl0gWy1zXSBbLWVdIFstd10gW3Jldi1vcHRzXSBbLS1dIFs8Y29tbWl0LWlkPi4uLiBdIgorI34gbXNnc3RyICIiCisjfiAiZ2l0IHNob3J0bG9nIFstbl0gWy1zXSBbLWVdIFstd10gW3Jldi1mbGFnZ29yXSBbLS1dIFs8aW5jaGVja25pbmctaWQ+Li4uIF0iCisKKyN+IG1zZ2lkICJTZWUgJ2dpdCBoZWxwIDxjb21tYW5kPicgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYSBzcGVjaWZpYyBjb21tYW5kLiIKKyN+IG1zZ3N0ciAiIgorI34gIlNlIFwiZ2l0IGhlbHAgPGtvbW1hbmRvPlwiIGbDtnIgbWVyIGluZm9ybWF0aW9uIG9tIGV0dCBzcGVjaWZpa3Qga29tbWFuZG8uIgorCisjfiBtc2dpZCAidXNlIGFueSByZWYgaW4gLmdpdC9yZWZzIgorI34gbXNnc3RyICJhbnbDpG5kIGFsbGEgcmVmZXJlbnNlciBpIC5naXQvcmVmcyIKKworI34gbXNnaWQgInVzZSBhbnkgdGFnIGluIC5naXQvcmVmcy90YWdzIgorI34gbXNnc3RyICJhbnbDpG5kIGFsbGEgdGFnZ2FyIGkgLmdpdC9yZWZzL3RhZ3MiCisKKyN+IG1zZ2lkICJiYWQgb2JqZWN0ICVzIgorI34gbXNnc3RyICJmZWxha3RpZ3Qgb2JqZWt0ICVzIgorCisjfiBtc2dpZCAiYm9ndXMgY29tbWl0dGVyIGluZm8gJXMiCisjfiBtc2dzdHIgImZlbGFrdGlnIGluY2hlY2thcmluZm9ybWF0aW9uICVzIgorCisjfiBtc2dpZCAiY2FuJ3QgZmRvcGVuICdzaG93JyBvdXRwdXQgZmQiCisjfiBtc2dzdHIgImt1bmRlIGludGUgw7ZwcG5hIChmZG9wZW4pIFwic2hvd1wiLXV0ZGF0YS1maWxoYW5kdGFnIgorCisjfiBtc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHBpcGUgdG8gJ3Nob3cnIGZvciBvYmplY3QgJyVzJyIKKyN+IG1zZ3N0ciAia3VuZGUgaW50ZSBzdMOkbmdhIHLDtnJldCB0aWxsIFwic2hvd1wiIGbDtnIgb2JqZWt0ZXQgXCIlc1wiIgorCisjfiBtc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRCIKKyN+IG1zZ3N0ciAiRHUgaGFyIGluZ2VuIGdpbHRpZyBIRUFEIgorCisjfiBtc2dpZCAib29wcyIKKyN+IG1zZ3N0ciAiaG9wcHNhbiIKKworI34gbXNnaWQgIldvdWxkIG5vdCByZW1vdmUgJXNcbiIKKyN+IG1zZ3N0ciAiU2t1bGxlIGludGUgdGEgYm9ydCAlc1xuIgorCisjfiBtc2dpZCAiTm90IHJlbW92aW5nICVzXG4iCisjfiBtc2dzdHIgIlRhciBpbnRlIGJvcnQgJXNcbiIKKworI34gbXNnaWQgIkNvdWxkIG5vdCByZWFkIGluZGV4IgorI34gbXNnc3RyICJLdW5kZSBpbnRlIGzDpHNhIGluZGV4ZXQiCisKKyN+IG1zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtZCB8IDxicmFuY2g+XSkiCisjfiBtc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbW4+ICgtYSB8IC1kIHwgPGdyZW4+XSkiCisKKyN+IG1zZ2lkICIgMCBmaWxlcyBjaGFuZ2VkIgorI34gbXNnc3RyICIgMCBmaWxlciDDpG5kcmFkZSIKKworI34gbXNnaWQgIiAlZCBmaWxlIGNoYW5nZWQiCisjfiBtc2dpZF9wbHVyYWwgIiAlZCBmaWxlcyBjaGFuZ2VkIgorI34gbXNnc3RyWzBdICIgJWQgZmlsIMOkbmRyYWQiCisjfiBtc2dzdHJbMV0gIiAlZCBmaWxlciDDpG5kcmFkZSIKKworI34gbXNnaWQgIiwgJWQgaW5zZXJ0aW9uKCspIgorI34gbXNnaWRfcGx1cmFsICIsICVkIGluc2VydGlvbnMoKykiCisjfiBtc2dzdHJbMF0gIiwgJWQgdGlsbMOkZ2coKykiCisjfiBtc2dzdHJbMV0gIiwgJWQgdGlsbMOkZ2coKykiCisKKyN+IG1zZ2lkICIsICVkIGRlbGV0aW9uKC0pIgorI34gbXNnaWRfcGx1cmFsICIsICVkIGRlbGV0aW9ucygtKSIKKyN+IG1zZ3N0clswXSAiLCAlZCBib3J0dGFnbmluZygtKSIKKyN+IG1zZ3N0clsxXSAiLCAlZCBib3J0dGFnbmluZ2FyKC0pIgorCisjfiBtc2dpZCAiICh1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spIgorI34gbXNnc3RyICIgKHNww6VyYSBtZWQgXCJnaXQgYWRkXCIpIgorCisjfiBtc2dpZCAiLS1kZXRhY2ggY2Fubm90IGJlIHVzZWQgd2l0aCAtYi8tQi8tLW9ycGhhbiIKKyN+IG1zZ3N0ciAiLS1kZXRjYWgga2FuIGludGUgYW52w6RuZGFzIG1lZCAtYi8tQi8tLW9ycGhhbiIKKworI34gbXNnaWQgIi0tZGV0YWNoIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCisjfiBtc2dzdHIgIi0tZGV0YWNoIGthbiBpbnRlIGFudsOkbmRhcyBtZWQgLXQiCisKKyN+IG1zZ2lkICItLW9ycGhhbiBhbmQgLWJ8LUIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKKyN+IG1zZ3N0ciAiLS1vcnBoYW4gb2NoIC1ifC1CIGthbiBpbnRlIGFudsOkbmRhcyBzYW10aWRpZ3QiCisKKyN+IG1zZ2lkICItLW9ycGhhbiBjYW5ub3QgYmUgdXNlZCB3aXRoIC10IgorI34gbXNnc3RyICItLW9ycGhhbiBrYW4gaW50ZSBhbnbDpG5kYXMgbWVkIC10IgorCisjfiBtc2dpZCAiZ2l0IGNoZWNrb3V0OiAtZiBhbmQgLW0gYXJlIGluY29tcGF0aWJsZSIKKyN+IG1zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtZiBvY2ggLW0gw6RyIGlua29tcGF0aWJsYSIKKworI34gbXNnaWQgIiIKKyN+ICJnaXQgY2hlY2tvdXQ6IHVwZGF0aW5nIHBhdGhzIGlzIGluY29tcGF0aWJsZSB3aXRoIHN3aXRjaGluZyBicmFuY2hlcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJnaXQgY2hlY2tvdXQ6IHVwcGRhdGVyYSBzw7ZrdsOkZ2FyIMOkciBpbmtvbXBhdGliZWx0IG1lZCBhdHQgdsOkeGxhIGdyZW4uIgorCisjfiBtc2dpZCAiZGlmZiBzZXR1cCBmYWlsZWQiCisjfiBtc2dzdHIgIm1pc3NseWNrYWRlcyBzw6R0dGEgdXBwIGbDtnIgZGlmZiIKKworI34gbXNnaWQgIm1lcmdlLXJlY3Vyc2l2ZTogZGlzayBmdWxsPyIKKyN+IG1zZ3N0ciAibWVyZ2UtcmVjdXJzaXZlOiBkaXNrIGZ1bGw/IgorCisjfiBtc2dpZCAiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIKKyN+IG1zZ3N0ciAiZGlmZl9zZXR1cF9kb25lIG1pc3NseWNrYWRlcyIKKworI34gbXNnaWQgIiVzOiBoYXMgYmVlbiBkZWxldGVkL3JlbmFtZWQiCisjfiBtc2dzdHIgIiVzOiBoYXIgdGFnaXRzIGJvcnQvw6RuZHJhdCBuYW1uIgorCisjfiBtc2dpZCAiJyVzJzogbm90IGEgZG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkuIgorI34gbXNnc3RyICJcIiVzXCI6IGludGUgZW4gZG9rdW1lbnRhdGlvbnNrYXRhbG9nLiIKKworI34gbXNnaWQgIi1kIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgRG8gbm90IHVzZS4iCisjfiBtc2dzdHIgIkZsYWdnYW4gLWQgc3TDtmRzIGludGUgbMOkZ3JlLiBBbnbDpG5kIGludGUuIgorCisjfiBtc2dpZCAiY2hlcnJ5LXBpY2siCisjfiBtc2dzdHIgImNoZXJyeS1waWNrIgorCisjfiBtc2dpZCAiQ291bGQgbm90IGV4dHJhY3QgZW1haWwgZnJvbSBjb21taXR0ZXIgaWRlbnRpdHkuIgorI34gbXNnc3RyICJLdW5kZSBpbnRlIGV4dHJhaGVyYSBlLXBvc3RhZHJlc3MgZnLDpW4gaW5jaGVja2FyZW5zIGlkZW50aXRldC4iCisKKyN+IG1zZ2lkICItLSIKKyN+IG1zZ3N0ciAiLS0iCisKKyN+IG1zZ2lkICIjIENoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKKyN+IG1zZ3N0ciAiIyDDhG5kcmFkZSBtZW4gaW50ZSB1cHBkYXRlcmFkZToiCisKKyN+IG1zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgMyB2ZXJzaW9ucyIKKyN+IG1zZ3N0ciAic8O2a3bDpGdlbiBcIiVzXCIgaGFyIGludGUgYWxsYSAzIHZlcnNpb25lcm5hIgorCisjfiBtc2dpZCAiZ2l0IGNoZWNrb3V0OiB3ZSBkbyBub3QgbGlrZSAnJXMnIGFzIGEgYnJhbmNoIG5hbWUuIgorI34gbXNnc3RyICJnaXQgY2hlY2tvdXQ6IHZpIHR5Y2tlciBpbnRlIG9tIFwiJXNcIiBzb20gbmFtbiBww6UgZW4gZ3Jlbi4iCisKKyN+IG1zZ2lkICJnaXQgY2hlY2tvdXQ6IGJyYW5jaCAlcyBhbHJlYWR5IGV4aXN0cyIKKyN+IG1zZ3N0ciAiZ2l0IGNoZWNrb3V0OiBncmVuZW4gJXMgZmlubnMgcmVkYW4iCisKKyN+IG1zZ2lkICJQYXRocyB3aXRoIC0taW50ZXJhY3RpdmUgZG9lcyBub3QgbWFrZSBzZW5zZS4iCisjfiBtc2dzdHIgIkthbiBpbnRlIGFuZ2Ugc8O2a3bDpGdhciBtZWQgLS1pbnRlcmFjdGl2ZS4iCisKKyN+IG1zZ2lkICJObyBIRUFEIGNvbW1pdCB0byBjb21wYXJlIHdpdGggKHlldCkiCisjfiBtc2dzdHIgIkluZ2VuIEhFQUQtaW5jaGVja25pbmcgYXR0IGrDpG1mw7ZyYSBtZWQgKMOkbm51KSIKKworI34gbXNnaWQgImNhbm5vdCBtaXggLS1maXhlZC1zdHJpbmdzIGFuZCByZWdleHAiCisjfiBtc2dzdHIgImthbiBpbnRlIGJsYW5kYSAtLWZpeGVkLXN0cmluZ3Mgb2NoIHJlZ3VsasOkcmEgdXR0cnljayIKKworI34gbXNnaWQgIiVzOyB3aWxsIG92ZXJ3cml0ZSEiCisjfiBtc2dzdHIgIiVzOyBrb21tZXIgc2tyaXZhIMO2dmVyISIKKworI34gbXNnaWQgIkZhaWxlZCB0byB3cml0ZSBjdXJyZW50IG5vdGVzIHRyZWUgdG8gZGF0YWJhc2UiCisjfiBtc2dzdHIgIkt1bmRlIGludGUgc2tyaXZhIGFrdHVlbGx0IGFudGVja25pbmdzdHLDpGQgdGlsbCBkYXRhYmFzZW4iCmRpZmYgLS1naXQgYS9wby92aS5wbyBiL3BvL3ZpLnBvCmluZGV4IDg5NjY4MTIuLjMyMzE1OTUgMTAwNjQ0Ci0tLSBhL3BvL3ZpLnBvCisrKyBiL3BvL3ZpLnBvCkBAIC0xLDE0ICsxLDE1IEBACi0jIFZpZXRuYW1lc2UgdHJhbnNsYXRpb25zIGZvciBnaXRrIHBhY2thZ2UuCi0jIELhuqNuIGThu4tjaCB0aeG6v25nIFZp4buHdCBjaG8gZ8OzaSBnaXRrLgotIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgZ2l0ayBwYWNrYWdlLgotIyBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPiwgMjAxMywgMjAxNS4KKyMgVmlldG5hbWVzZSB0cmFuc2xhdGlvbiBmb3IgR0lULUNPUkUuCisjIELhuqNuIGThu4tjaCB0aeG6v25nIFZp4buHdCBkw6BuaCBjaG8gR0lULUNPUkUuCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBnaXQtY29yZSBwYWNrYWdlLgorIyBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5IDxwY2xvdWRzQGdtYWlsLmNvbT4sIDIwMTIuCisjIFRy4bqnbiBOZ+G7jWMgUXXDom4gPHZud2lsZG1hbkBnbWFpbC5jb20+LCAyMDEyLCAyMDEzLCAyMDE0LCAyMDE1LgogIwogbXNnaWQgIiIKIG1zZ3N0ciAiIgotIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0ayBAQEdJVF9WRVJTSU9OQEBcbiIKLSJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCi0iUE9ULUNyZWF0aW9uLURhdGU6IDIwMTUtMDUtMTcgMTQ6MzIrMTAwMFxuIgotIlBPLVJldmlzaW9uLURhdGU6IDIwMTUtMDktMTUgMDc6MzMrMDcwMFxuIgorIlByb2plY3QtSWQtVmVyc2lvbjogZ2l0IHYyLjYuMC1yYzJcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wOS0xNSAwNjo0NSswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0wOS0xNSAwNzoxNSswNzAwXG4iCiAiTGFzdC1UcmFuc2xhdG9yOiBUcuG6p24gTmfhu41jIFF1w6JuIDx2bndpbGRtYW5AZ21haWwuY29tPlxuIgogIkxhbmd1YWdlLVRlYW06IFZpZXRuYW1lc2UgPHRyYW5zbGF0aW9uLXRlYW0tdmlAbGlzdHMuc291cmNlZm9yZ2UubmV0PlxuIgogIkxhbmd1YWdlOiB2aVxuIgpAQCAtMTYsMTM2NCArMTcsMTIzNDQgQEAKICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCiAiUGx1cmFsLUZvcm1zOiBucGx1cmFscz0xOyBwbHVyYWw9MDtcbiIKKyJYLUxhbmd1YWdlLVRlYW0tV2Vic2l0ZTogPGh0dHA6Ly90cmFuc2xhdGlvbnByb2plY3Qub3JnL3RlYW0vdmkuaHRtbD5cbiIKKyJYLVBvZWRpdC1Tb3VyY2VDaGFyc2V0OiBVVEYtOFxuIgorIlgtUG9lZGl0LUJhc2VwYXRoOiAuLi9cbiIKICJYLUdlbmVyYXRvcjogR3RyYW5zbGF0b3IgMi45MS43XG4iCiAKLSM6IGdpdGs6MTQwCi1tc2dpZCAiQ291bGRuJ3QgZ2V0IGxpc3Qgb2YgdW5tZXJnZWQgZmlsZXM6IgotbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgZGFuaCBzw6FjaCBjw6FjIHThuq1wLXRpbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbjoiCisjOiBhZHZpY2UuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiAlLipzXG4iCittc2dzdHIgImfhu6NpIMO9OiAlLipzXG4iCiAKLSM6IGdpdGs6MjEyIGdpdGs6MjM4MQotbXNnaWQgIkNvbG9yIHdvcmRzIgotbXNnc3RyICJUw7QgbcOgdSBjaOG7ryIKLQotIzogZ2l0azoyMTcgZ2l0azoyMzgxIGdpdGs6ODIyMCBnaXRrOjgyNTMKLW1zZ2lkICJNYXJrdXAgd29yZHMiCi1tc2dzdHIgIsSQw6FuaCBk4bqldSBjaOG7ryIKLQotIzogZ2l0azozMjQKLW1zZ2lkICJFcnJvciBwYXJzaW5nIHJldmlzaW9uczoiCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCDEkWnhu4NtIHjDqXQgZHV54buHdDoiCi0KLSM6IGdpdGs6MzgwCi1tc2dpZCAiRXJyb3IgZXhlY3V0aW5nIC0tYXJnc2NtZCBjb21tYW5kOiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRo4buxYyBoaeG7h24gbOG7h25oIC0tYXJnc2NtZDoiCi0KLSM6IGdpdGs6MzkzCi1tc2dpZCAiTm8gZmlsZXMgc2VsZWN0ZWQ6IC0tbWVyZ2Ugc3BlY2lmaWVkIGJ1dCBubyBmaWxlcyBhcmUgdW5tZXJnZWQuIgotbXNnc3RyICIiCi0iQ2jGsGEgY2jhu41uIHThuq1wIHRpbjogLS1tZXJnZSDEkcOjIGNo4buJIMSR4buLbmggbmjGsG5nIGtow7RuZyBjw7MgdOG6rXAgdGluIGNoxrBhIGjDsmEgdHLhu5luLiIKLQotIzogZ2l0azozOTYKKyM6IGFkdmljZS5jOjg4CiBtc2dpZCAiIgotIk5vIGZpbGVzIHNlbGVjdGVkOiAtLW1lcmdlIHNwZWNpZmllZCBidXQgbm8gdW5tZXJnZWQgZmlsZXMgYXJlIHdpdGhpbiBmaWxlICIKLSJsaW1pdC4iCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgogbXNnc3RyICIiCi0iQ2jGsGEgY2jhu41uIHThuq1wIHRpbjogLS1tZXJnZSDEkcOjIGNo4buJIMSR4buLbmggbmjGsG5nIGtow7RuZyBjw7MgdOG6rXAgdGluIGNoxrBhIGjDsmEgdHLhu5luICIKLSJ0cm9uZyBnaeG7m2kgaOG6oW4gdOG6rXAgdGluLiIKKyJT4butYSBjaMO6bmcgdHJvbmcgY8OieSBsw6BtIHZp4buHYyxcbiIKKyJ2w6Agc2F1IMSRw7MgZMO5bmcgbOG7h25oIOKAnGdpdCBhZGQvcm0gPHThuq1wLXRpbj7igJ1cbiIKKyJkw6BuaCByacOqbmcgY2hvIHZp4buHYyDEkcOhbmggZOG6pXUgY+G6p24gZ2nhuqNpIHF1eeG6v3QgdsOgIHThuqFvIGzhuqduIGNodXnhu4NuIGdpYW8uIgogCi0jOiBnaXRrOjQxOCBnaXRrOjU2NgotbXNnaWQgIkVycm9yIGV4ZWN1dGluZyBnaXQgbG9nOiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRo4buxYyBoaeG7h24gbOG7h25oIGdpdCBsb2c6IgorIzogYWR2aWNlLmM6MTAxIGJ1aWx0aW4vbWVyZ2UuYzoxMjI3Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuIgorbXNnc3RyICJC4bqhbiBjaMawYSBr4bq/dCB0aMO6YyB2aeG7h2MgaMOyYSB0cuG7mW4gKE1FUkdFX0hFQUQgduG6q24gdOG7k24gdOG6oWkpLiIKIAotIzogZ2l0azo0MzYgZ2l0azo1ODIKLW1zZ2lkICJSZWFkaW5nIgotbXNnc3RyICLEkGFuZyDEkeG7jWMiCisjOiBhZHZpY2UuYzoxMDMKK21zZ2lkICJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBjYW4gbWVyZ2UuIgorbXNnc3RyICJWdWkgbMOybmcgY2h1eeG7g24gZ2lhbyBjw6FjIHRoYXkgxJHhu5VpIHRyxrDhu5tjIGtoaSBi4bqhbiBjw7MgdGjhu4MgaMOyYSB0cuG7mW4uIgogCi0jOiBnaXRrOjQ5NiBnaXRrOjQ1MjUKLW1zZ2lkICJSZWFkaW5nIGNvbW1pdHMuLi4iCi1tc2dzdHIgIsSQYW5nIMSR4buNYyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW/igKYiCisjOiBhZHZpY2UuYzoxMDQKK21zZ2lkICJFeGl0aW5nIGJlY2F1c2Ugb2YgdW5maW5pc2hlZCBtZXJnZS4iCittc2dzdHIgIlRob8OhdCByYSBi4bufaSB2w6wgdmnhu4djIGjDsmEgdHLhu5luIGtow7RuZyBob8OgbiB04bqldC4iCiAKLSM6IGdpdGs6NDk5IGdpdGs6MTYzNyBnaXRrOjQ1MjgKLW1zZ2lkICJObyBjb21taXRzIHNlbGVjdGVkIgotbXNnc3RyICJDaMawYSBjaOG7jW4gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIgorIzogYXJjaGl2ZS5jOjEyCittc2dpZCAiZ2l0IGFyY2hpdmUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgWzxjw6FjLXTDuXktY2jhu41uPl0gPHRyZWUtaXNoPiBbPMSRxrDhu51uZy1k4bqrbj7igKZdIgogCi0jOiBnaXRrOjE0NDUgZ2l0azo0MDQ1IGdpdGs6MTI0MzIKLW1zZ2lkICJDb21tYW5kIGxpbmUiCi1tc2dzdHIgIkTDsm5nIGzhu4duaCIKKyM6IGFyY2hpdmUuYzoxMworbXNnaWQgImdpdCBhcmNoaXZlIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1saXN0IgogCi0jOiBnaXRrOjE1MTEKLW1zZ2lkICJDYW4ndCBwYXJzZSBnaXQgbG9nIG91dHB1dDoiCi1tc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiB0w61jaCBr4bq/dCB4deG6pXQgdOG7qyBs4buHbmggZ2l0IGxvZzoiCisjOiBhcmNoaXZlLmM6MTQKK21zZ2lkICIiCisiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8a2hvPiBbLS1leGVjIDxs4buHbmg+XSBbPGPDoWMtdMO5eS1jaOG7jW4+XSA8dHJlZS1pc2g+ICIKKyJbPMSRxrDhu51uZy1k4bqrbj7igKZdIgogCi0jOiBnaXRrOjE3NDAKLW1zZ2lkICJObyBjb21taXQgaW5mb3JtYXRpb24gYXZhaWxhYmxlIgotbXNnc3RyICJLaMO0bmcgY8OzIHRow7RuZyB0aW4gduG7gSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8iCisjOiBhcmNoaXZlLmM6MTUKK21zZ2lkICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8a2hvPiBbLS1leGVjIDxs4buHbmg+XSAtLWxpc3QiCiAKLSM6IGdpdGs6MTkwMyBnaXRrOjE5MzIgZ2l0azo0MzE1IGdpdGs6OTY2OSBnaXRrOjExMjQxIGdpdGs6MTE1MjEKLW1zZ2lkICJPSyIKLW1zZ3N0ciAixJDhu5NuZyDDvSIKKyM6IGFyY2hpdmUuYzozNDMgYnVpbHRpbi9hZGQuYzoxMzcgYnVpbHRpbi9hZGQuYzo0MjYgYnVpbHRpbi9ybS5jOjMyNworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoc3BlYyAnJXMnIGRpZCBub3QgbWF0Y2ggYW55IGZpbGVzIgorbXNnc3RyICLEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24g4oCcJXPigJ0ga2jDtG5nIGto4bubcCB24bubaSBi4bqldCBr4buzIHThuq1wIHRpbiBuw6BvIgogCi0jOiBnaXRrOjE5MzQgZ2l0azo0MzE3IGdpdGs6OTE5NiBnaXRrOjkyNzUgZ2l0azo5MzkxIGdpdGs6OTQ0MCBnaXRrOjk2NzEKLSM6IGdpdGs6MTEyNDIgZ2l0azoxMTUyMgotbXNnaWQgIkNhbmNlbCIKLW1zZ3N0ciAiVGjDtGkiCisjOiBhcmNoaXZlLmM6NDI4Cittc2dpZCAiZm10IgorbXNnc3RyICLEkeG7i25oX2ThuqFuZyIKIAotIzogZ2l0azoyMDY5Ci1tc2dpZCAiJlVwZGF0ZSIKLW1zZ3N0ciAiQ+G6rXAgbmjhuq10IgorIzogYXJjaGl2ZS5jOjQyOAorbXNnaWQgImFyY2hpdmUgZm9ybWF0IgorbXNnc3RyICLEkeG7i25oIGThuqFuZyBsxrB1IHRy4buvIgogCi0jOiBnaXRrOjIwNzAKLW1zZ2lkICImUmVsb2FkIgotbXNnc3RyICJU4bqjaSBs4bqhaSIKKyM6IGFyY2hpdmUuYzo0MjkgYnVpbHRpbi9sb2cuYzoxMjI5Cittc2dpZCAicHJlZml4IgorbXNnc3RyICJ0aeG7gW5fdOG7kSIKIAotIzogZ2l0azoyMDcxCi1tc2dpZCAiUmVyZWFkIHJlJmZlcmVuY2VzIgotbXNnc3RyICLEkOG7jWMgbOG6oWkgdGhhbSBjaGnhur91IgorIzogYXJjaGl2ZS5jOjQzMAorbXNnaWQgInByZXBlbmQgcHJlZml4IHRvIGVhY2ggcGF0aG5hbWUgaW4gdGhlIGFyY2hpdmUiCittc2dzdHIgIm7hu5FpIHRow6ptIHRp4buBbiB04buRIHbDoG8gdOG7q25nIMSRxrDhu51uZyBk4bqrbiB04bqtcCB0aW4gdHJvbmcga2hvIGzGsHUiCiAKLSM6IGdpdGs6MjA3MgotbXNnaWQgIiZMaXN0IHJlZmVyZW5jZXMiCi1tc2dzdHIgIkxp4buHdCBrw6ogY8OhYyB0aGFtIGNoaeG6v3UiCisjOiBhcmNoaXZlLmM6NDMxIGJ1aWx0aW4vYXJjaGl2ZS5jOjg4IGJ1aWx0aW4vYmxhbWUuYzoyNTE2IGJ1aWx0aW4vYmxhbWUuYzoyNTE3CisjOiBidWlsdGluL2NvbmZpZy5jOjU4IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODcgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4OQorIzogYnVpbHRpbi9ncmVwLmM6NzEyIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OSBidWlsdGluL2xzLWZpbGVzLmM6NDQ2CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQ5IGJ1aWx0aW4vbm90ZXMuYzozOTUgYnVpbHRpbi9ub3Rlcy5jOjU1OAorIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMDkgcGFyc2Utb3B0aW9ucy5oOjE1MworbXNnaWQgImZpbGUiCittc2dzdHIgInThuq1wX3RpbiIKIAotIzogZ2l0azoyMDc0Ci1tc2dpZCAiU3RhcnQgZ2l0ICZndWkiCi1tc2dzdHIgIkto4bufaSBjaOG6oXkgZ2l0IGd1aSIKKyM6IGFyY2hpdmUuYzo0MzIgYnVpbHRpbi9hcmNoaXZlLmM6ODkKK21zZ2lkICJ3cml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGZpbGUiCittc2dzdHIgImdoaSBraG8gbMawdSB2w6BvIHThuq1wIHRpbiBuw6B5IgogCi0jOiBnaXRrOjIwNzYKLW1zZ2lkICImUXVpdCIKLW1zZ3N0ciAiVGhvw6F0IgorIzogYXJjaGl2ZS5jOjQzNAorbXNnaWQgInJlYWQgLmdpdGF0dHJpYnV0ZXMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIsSR4buNYyAuZ2l0YXR0cmlidXRlcyB0cm9uZyB0aMawIG3hu6VjIGzDoG0gdmnhu4djIgogCi0jOiBnaXRrOjIwNjgKLW1zZ2lkICImRmlsZSIKLW1zZ3N0ciAiQ2jDrW5oIgorIzogYXJjaGl2ZS5jOjQzNQorbXNnaWQgInJlcG9ydCBhcmNoaXZlZCBmaWxlcyBvbiBzdGRlcnIiCittc2dzdHIgImxp4buHdCBrw6ogY8OhYyB04bqtcCB0aW4gxJHGsOG7o2MgbMawdSB0cuG7ryB2w6BvIHN0ZGVyciAoxJHhuqd1IHJhIGzhu5dpIHRpw6p1IGNodeG6qW4pIgogCi0jOiBnaXRrOjIwODAKLW1zZ2lkICImUHJlZmVyZW5jZXMiCi1tc2dzdHIgIlTDuXkgdGjDrWNoIgorIzogYXJjaGl2ZS5jOjQzNgorbXNnaWQgInN0b3JlIG9ubHkiCittc2dzdHIgImNo4buJIGzGsHUgKGtow7RuZyBuw6luKSIKIAotIzogZ2l0azoyMDc5Ci1tc2dpZCAiJkVkaXQiCi1tc2dzdHIgIkNo4buJbmggc+G7rWEiCisjOiBhcmNoaXZlLmM6NDM3Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICJuw6luIG5oYW5oIGjGoW4iCiAKLSM6IGdpdGs6MjA4NAotbXNnaWQgIiZOZXcgdmlldy4uLiIKLW1zZ3N0ciAiVGjDqm0gdHLDrG5oIGLDoHkgbeG7m2nigKYiCisjOiBhcmNoaXZlLmM6NDQ1Cittc2dpZCAiY29tcHJlc3MgYmV0dGVyIgorbXNnc3RyICJuw6luIG5o4buPIGjGoW4iCiAKLSM6IGdpdGs6MjA4NQotbXNnaWQgIiZFZGl0IHZpZXcuLi4iCi1tc2dzdHIgIlPhu61hIGPDoWNoIHRyw6xuaCBiw6B54oCmIgorIzogYXJjaGl2ZS5jOjQ0OAorbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6FjIGtp4buDdSBuw6luIMSRxrDhu6NjIGjhu5cgdHLhu6MiCiAKLSM6IGdpdGs6MjA4NgotbXNnaWQgIiZEZWxldGUgdmlldyIKLW1zZ3N0ciAiWMOzYSBjw6FjaCB0csOsbmggYsOgeSIKKyM6IGFyY2hpdmUuYzo0NTAgYnVpbHRpbi9hcmNoaXZlLmM6OTAgYnVpbHRpbi9jbG9uZS5jOjc3Cittc2dpZCAicmVwbyIKK21zZ3N0ciAia2hvIgogCi0jOiBnaXRrOjIwODggZ2l0azo0MDQzCi1tc2dpZCAiJkFsbCBmaWxlcyIKLW1zZ3N0ciAiTeG7jWkgdOG6rXAgdGluIgorIzogYXJjaGl2ZS5jOjQ1MSBidWlsdGluL2FyY2hpdmUuYzo5MQorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICJuaOG6rW4ga2hvIG7DqW4gdOG7qyBraG8gY2jhu6lhIDxraG8+IHRyw6puIG3DoXkgY2jhu6ciCiAKLSM6IGdpdGs6MjA4MyBnaXRrOjQwNjcKLW1zZ2lkICImVmlldyIKLW1zZ3N0ciAiVHLDrG5oIGLDoHkiCisjOiBhcmNoaXZlLmM6NDUyIGJ1aWx0aW4vYXJjaGl2ZS5jOjkyIGJ1aWx0aW4vbm90ZXMuYzo0NzkKK21zZ2lkICJjb21tYW5kIgorbXNnc3RyICJs4buHbmgiCiAKLSM6IGdpdGs6MjA5MyBnaXRrOjIxMDMgZ2l0azozMDEyCi1tc2dpZCAiJkFib3V0IGdpdGsiCi1tc2dzdHIgIkdp4bubaSB0aGnhu4d1IHbhu4EgZ2l0ayIKKyM6IGFyY2hpdmUuYzo0NTMgYnVpbHRpbi9hcmNoaXZlLmM6OTMKK21zZ2lkICJwYXRoIHRvIHRoZSByZW1vdGUgZ2l0LXVwbG9hZC1hcmNoaXZlIGNvbW1hbmQiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDEkeG6v24gbOG7h25oIGdpdC11cGxvYWQtcGFjayB0csOqbiBtw6F5IGNo4bunIgogCi0jOiBnaXRrOjIwOTQgZ2l0azoyMTA4Ci1tc2dpZCAiJktleSBiaW5kaW5ncyIKLW1zZ3N0ciAiVOG7lSBo4bujcCBwaMOtbSIKKyM6IGF0dHIuYzoyNjUKK21zZ2lkICIiCisiTmVnYXRpdmUgcGF0dGVybnMgYXJlIGlnbm9yZWQgaW4gZ2l0IGF0dHJpYnV0ZXNcbiIKKyJVc2UgJ1xcIScgZm9yIGxpdGVyYWwgbGVhZGluZyBleGNsYW1hdGlvbi4iCittc2dzdHIgIiIKKyJDw6FjIG3huqt1IGThuqFuZyBwaOG7pyDEkeG7i25oIGLhu4sgY+G6pW0gZMO5bmcgY2hvIGPDoWMgdGh14buZYyB0w61uaCBj4bunYSBnaXRcbiIKKyJEw7luZyDigJxcXCHigJ0gY2hvIGPDoWMgY2h14buXaSB2xINuIGLhuqNuIGPDsyBk4bqldSBjaOG6pW0gdGhhbiBk4bqrbiDEkeG6p3UuIgogCi0jOiBnaXRrOjIwOTIgZ2l0azoyMTA3Ci1tc2dpZCAiJkhlbHAiCi1tc2dzdHIgIlRy4bujIGdpw7pwIgorIzogYnJhbmNoLmM6NjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IHNldHRpbmcgYnJhbmNoICVzIGFzIGl0cyBvd24gdXBzdHJlYW0uIgorbXNnc3RyICJDaMawYSBjw6BpIMSR4bq3dCBuaMOhbmggJXMgbmjGsCBsw6AgdGjGsOG7o25nIG5ndeG7k24gY+G7p2EgbsOzLiIKIAotIzogZ2l0azoyMTg1IGdpdGs6ODY1MgotbXNnaWQgIlNIQTEgSUQ6IgotbXNnc3RyICJTSEExIElEOiIKKyM6IGJyYW5jaC5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIGJyYW5jaCAlcyBmcm9tICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAiTmjDoW5oICVzIGPDoGkgxJHhurd0IMSR4buDIHRoZW8gZMO1aSBuaMOhbmggbcOheSBjaOG7pyAlcyB04burICVzIGLhurFuZyBjw6FjaCByZWJhc2UuIgogCi0jOiBnaXRrOjIyMjkKLW1zZ2lkICJSb3ciCi1tc2dzdHIgIkjDoG5nIgorIzogYnJhbmNoLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMuIgorbXNnc3RyICJOaMOhbmggJXMgY8OgaSDEkeG6t3QgxJHhu4MgdGhlbyBkw7VpIG5ow6FuaCBtw6F5IGNo4bunICVzIHThu6sgJXMuIgogCi0jOiBnaXRrOjIyNjcKLW1zZ2lkICJGaW5kIgotbXNnc3RyICJUw6xtIgorIzogYnJhbmNoLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICJOaMOhbmggJXMgY8OgaSDEkeG6t3QgxJHhu4MgdGhlbyBkw7VpIG5ow6FuaCBu4buZaSBi4buZICVzIGLhurFuZyBjw6FjaCByZWJhc2UuIgogCi0jOiBnaXRrOjIyOTUKKyM6IGJyYW5jaC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgYnJhbmNoICVzLiIKK21zZ3N0ciAiTmjDoW5oICVzIGPDoGkgxJHhurd0IMSR4buDIHRoZW8gZMO1aSBuaMOhbmggbuG7mWkgYuG7mSAlcy4iCisKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAlcyBieSByZWJhc2luZy4iCittc2dzdHIgIk5ow6FuaCAlcyBjw6BpIMSR4bq3dCDEkeG7gyB0aGVvIGTDtWkgbmjDoW5oIG3DoXkgY2jhu6cgJXMgYuG6sW5nIGPDoWNoIHJlYmFzZS4iCisKKyM6IGJyYW5jaC5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAlcy4iCittc2dzdHIgIk5ow6FuaCAlcyBjw6BpIMSR4bq3dCDEkeG7gyB0aGVvIGTDtWkgdGhhbSBjaGnhur91IG3DoXkgY2jhu6cgJXMuIgorCisjOiBicmFuY2guYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIHJlZiAlcyBieSByZWJhc2luZy4iCittc2dzdHIgIiIKKyJOaMOhbmggJXMgY8OgaSDEkeG6t3QgxJHhu4MgdGhlbyBkw7VpIHbhur90IHRoYW0gY2hp4bq/dSBu4buZaSBi4buZICVzIGLhurFuZyBjw6FjaCByZWJhc2UuIgorCisjOiBicmFuY2guYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCByZWYgJXMuIgorbXNnc3RyICJOaMOhbmggJXMgY8OgaSDEkeG6t3QgxJHhu4MgdGhlbyBkw7VpIHRoYW0gY2hp4bq/dSBu4buZaSBi4buZICVzLiIKKworIzogYnJhbmNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiCittc2dzdHIgIktow7RuZyB0aGVvIGTDtWk6IHRow7RuZyB0aW4gY2jGsGEgcsO1IHLDoG5nIGNobyB0aGFtIGNoaeG6v3UgJXMiCisKKyM6IGJyYW5jaC5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgdMOqbiBuaMOhbmggaOG7o3AgbOG7hy4iCisKKyM6IGJyYW5jaC5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAixJDDoyBjw7MgbmjDoW5oIG1hbmcgdMOqbiDigJwlc+KAnS4iCisKKyM6IGJyYW5jaC5jOjE3NQorbXNnaWQgIkNhbm5vdCBmb3JjZSB1cGRhdGUgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMOpcCBideG7mWMgY+G6rXAgbmjhuq10IG5ow6FuaCBoaeG7h24gaMOgbmguIgorCisjOiBicmFuY2guYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHNldHVwIHRyYWNraW5nIGluZm9ybWF0aW9uOyBzdGFydGluZyBwb2ludCAnJXMnIGlzIG5vdCBhIGJyYW5jaC4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgY8OgaSDEkeG6t3QgdGjDtG5nIHRpbiB0aGVvIGTDtWk7IMSRaeG7g20gYuG6r3QgxJHhuqd1IOKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0ICIKKyJuaMOhbmguIgorCisjOiBicmFuY2guYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidGhlIHJlcXVlc3RlZCB1cHN0cmVhbSBicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAibmjDoW5oIHRoxrDhu6NuZyBuZ3Xhu5NuIMSRw6MgecOqdSBj4bqndSDigJwlc+KAnSBraMO0bmcgdOG7k24gdOG6oWkiCisKKyM6IGJyYW5jaC5jOjE5OQorbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKK21zZ3N0ciAiIgorIlxuIgorIk7hur91IGLhuqFuIGPDsyDDvSDEkeG7i25oIOKAnGPhuqNpIHThu5XigJ0gY8O0bmcgdmnhu4djIGPhu6dhIGLhuqFuIHRyw6puIG5ow6FuaCB0aMaw4bujbmcgbmd14buTblxuIgorIih1cHN0cmVhbSkgY8OhaSBtw6AgxJHDoyBz4bq1biBjw7MgdHLDqm4gbcOheSBjaOG7pywgYuG6oW4gY+G6p24gY2jhuqF5XG4iCisibOG7h25oIFwiZ2l0IGZldGNoXCIgxJHhu4MgbOG6pXkgbsOzIHbhu4EuXG4iCisiXG4iCisiTuG6v3UgYuG6oW4gY8OzIMO9IMSR4buLbmggxJHhuql5IGzDqm4gbMOqbiBt4buZdCBuaMOhbmggbuG7mWkgYuG7mSBt4bubaSBjw6FpIG3DoFxuIgorInPhur0gdGhlbyBkw7VpIGLhuqNuIMSR4buRaSBjaGnhur91IG3DoXkgY2jhu6cgY+G7p2EgbsOzLCBi4bqhbiBj4bqnbiBkw7luZyBs4buHbmhcbiIKKyJcImdpdCBwdXNoIC11XCIgxJHhu4MgxJHhurd0IGPhuqV1IGjDrG5oIHRoxrDhu6NuZyBuZ3Xhu5NuIGLhuqFuIG114buRbiBwdXNoLiIKKworIzogYnJhbmNoLmM6MjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAiS2jDtG5nIHBo4bqjaSB0w6puIMSR4buRaSB0xrDhu6NuZyBo4bujcCBs4buHOiDigJwlc+KAnS4iCisKKyM6IGJyYW5jaC5jOjI2MworIywgYy1mb3JtYXQKK21zZ2lkICJBbWJpZ3VvdXMgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICJUw6puIMSR4buRaSB0xrDhu6NuZyBjaMawYSByw7UgcsOgbmc6IOKAnCVz4oCdLiIKKworIzogYnJhbmNoLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIk5ow6FuaCBraMO0bmcgaOG7o3AgbOG7hzog4oCcJXPigJ0uIgorCisjOiBicmFuY2guYzozOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IGF0ICclcyciCittc2dzdHIgIuKAnCVz4oCdIMSRw6Mgc+G6tW4gxJHGsOG7o2MgbOG6pXkgcmEgdOG6oWkg4oCcJXPigJ0iCisKKyM6IGJ1bmRsZS5jOjM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZG9lcyBub3QgbG9vayBsaWtlIGEgdjIgYnVuZGxlIGZpbGUiCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBnaeG7kW5nIG5oxrAgdOG6rXAgdGluIHYyIGJ1bmRsZSAoxJHhu4tuaCBk4bqhbmcgZHVtcCBj4bunYSBnaXQpIgorCisjOiBidW5kbGUuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgInBo4bqnbiDEkeG6p3Uga2jDtG5nIMSRxrDhu6NjIHRo4burYSBuaOG6rW46ICVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6ODcgYnVpbHRpbi9jb21taXQuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58g4oCcJXPigJ0iCisKKyM6IGJ1bmRsZS5jOjEzOQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICJLaG8gY2jhu6lhIHRoaeG6v3Ugbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvIHRpw6puIHF1eeG6v3QgbsOgeToiCisKKyM6IGJ1bmRsZS5jOjE2MyBzZXF1ZW5jZXIuYzo2MzYgc2VxdWVuY2VyLmM6MTA4MyBidWlsdGluL2JsYW1lLmM6MjcwOAorIzogYnVpbHRpbi9icmFuY2guYzo2NTIgYnVpbHRpbi9jb21taXQuYzoxMDQ0IGJ1aWx0aW4vbG9nLmM6MzM0CisjOiBidWlsdGluL2xvZy5jOjg1MCBidWlsdGluL2xvZy5jOjE0NTcgYnVpbHRpbi9sb2cuYzoxNjkwIGJ1aWx0aW4vbWVyZ2UuYzozNTgKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNTgKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAiY8OgaSDEkeG6t3Qgdmnhu4djIGRpIGNodXnhu4NuIHF1YSBjw6FjIMSRaeG7g20geMOpdCBkdXnhu4d0IGfhurdwIGzhu5dpIgorCisjOiBidW5kbGUuYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkJ1bmRsZSBjaOG7qWEgJWQgdGhhbSBjaGnhur91OiIKKworIzogYnVuZGxlLmM6MTkyCittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIkzhu4duaCBidW5kbGUgZ2hpIGzhuqFpIHRvw6BuIGLhu5kgbOG7i2NoIHPhu60uIgorCisjOiBidW5kbGUuYzoxOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSByZXF1aXJlcyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIkzhu4duaCBidW5kbGUgecOqdSBj4bqndSAlZCB0aGFtIGNoaeG6v3UgbsOgeToiCisKKyM6IGJ1bmRsZS5jOjI1MworbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIktow7RuZyB0aOG7gyBz4bqjbiBzaW5oIMSR4buRaSB0xrDhu6NuZyBnw7NpIgorCisjOiBidW5kbGUuYzoyNjQKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIGfDs2kgxJHDoyBjaOG6v3QiCisKKyM6IGJ1bmRsZS5jOjMwNAorbXNnaWQgInJldi1saXN0IGRpZWQiCittc2dzdHIgInJldi1saXN0IMSRw6MgY2jhur90IgorCisjOiBidW5kbGUuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgInRoLmNoaeG6v3Ug4oCcJXPigJ0gYuG7iyBsb+G6oWkgdHLhu6sgYuG7n2kgY8OhYyB0w7l5IGNo4buNbiByZXYtbGlzdCIKKworIzogYnVuZGxlLmM6NDQzIGJ1aWx0aW4vbG9nLmM6MTU3IGJ1aWx0aW4vbG9nLmM6MTM2NyBidWlsdGluL3Nob3J0bG9nLmM6MjYxCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBhcmd1bWVudDogJXMiCittc2dzdHIgIsSR4buRaSBz4buRIGtow7RuZyDEkcaw4bujYyB0aOG7q2Egbmjhuq1uOiAlcyIKKworIzogYnVuZGxlLmM6NDQ5Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIlThu6sgY2jhu5FpIHThuqFvIG3hu5l0IGJ1bmRsZSB0cuG7kW5nIHLhu5duZy4iCisKKyM6IGJ1bmRsZS5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY3JlYXRlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyDigJwlc+KAnSIKKworIzogYnVuZGxlLmM6NDgwCittc2dpZCAiaW5kZXgtcGFjayBkaWVkIgorbXNnc3RyICJt4bulYyBs4bulYyBnw7NpIMSRw6MgY2jhur90IgorCisjOiBjb2xvci5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGNvbG9yIHZhbHVlOiAlLipzIgorbXNnc3RyICJnacOhIHRy4buLIG3DoHUga2jDtG5nIGjhu6NwIGzhu4c6ICUuKnMiCisKKyM6IGNvbW1pdC5jOjQwIGJ1aWx0aW4vYW0uYzo0NTEgYnVpbHRpbi9hbS5jOjQ4NyBidWlsdGluL2FtLmM6MTUxNgorIzogYnVpbHRpbi9hbS5jOjIxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY8O6IHBow6FwICVzIgorCisjOiBjb21taXQuYzo0MgorIywgYy1mb3JtYXQKK21zZ2lkICIlcyAlcyBpcyBub3QgYSBjb21taXQhIgorbXNnc3RyICIlcyAlcyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvISIKKworIzogY29tcGF0L29ic3RhY2suYzo0MDYgY29tcGF0L29ic3RhY2suYzo0MDgKK21zZ2lkICJtZW1vcnkgZXhoYXVzdGVkIgorbXNnc3RyICJo4bq/dCBi4buZIG5o4bubIgorCisjOiBjb25maWcuYzo0NzQgY29uZmlnLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgZmlsZSBsaW5lICVkIGluICVzIgorbXNnc3RyICJ04bqtcCB0aW4gY+G6pXUgaMOsbmggc2FpIHThuqFpIGTDsm5nICVkIHRyb25nICVzIgorCisjOiBjb25maWcuYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcycgaW4gJXM6ICVzIgorbXNnc3RyICJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ0gdHJvbmcgJXM6ICVzIgorCisjOiBjb25maWcuYzo1OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIG51bWVyaWMgY29uZmlnIHZhbHVlICclcycgZm9yICclcyc6ICVzIgorbXNnc3RyICJzYWkgZ2nDoSB0cuG7iyBi4bqxbmcgc+G7kSBj4bunYSBj4bqldSBow6xuaCDigJwlc+KAnSBjaG8g4oCcJXPigJ06ICVzIgorCisjOiBjb25maWcuYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGV4cGFuZCB1c2VyIGRpciBpbjogJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kgbeG7nyBy4buZbmcgdGjGsCBt4bulYyBuZ8aw4budaSBkw7luZyB0cm9uZzog4oCcJXPigJ0iCisKKyM6IGNvbmZpZy5jOjc1NyBjb25maWcuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIm3hu6ljIG7DqW4gemxpYiAlZCBsw6Agc2FpIgorCisjOiBjb25maWcuYzo4OTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBtb2RlIGZvciBvYmplY3QgY3JlYXRpb246ICVzIgorbXNnc3RyICJjaOG6vyDEkeG7mSBraMO0bmcgaOG7o3AgbOG7hyDEkeG7kWkgduG7m2kgdmnhu4djIHThuqFvIMSR4buRaSB0xrDhu6NuZzogJXMiCisKKyM6IGNvbmZpZy5jOjEyMTYKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGPhuqV1IGjDrG5oIGTDsm5nIGzhu4duaCIKKworIzogY29uZmlnLmM6MTI3NworbXNnaWQgInVua25vd24gZXJyb3Igb2NjdXJlZCB3aGlsZSByZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIgorbXNnc3RyICLEkcOjIGPDsyBs4buXaSBjaMawYSBiaeG6v3QgeOG6o3kgcmEgdHJvbmcga2hpIMSR4buNYyBjw6FjIHThuq1wIHRpbiBj4bqldSBow6xuaCIKKworIzogY29uZmlnLmM6MTYwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCDigJwlc+KAnSB04burIGPhuqV1IGjDrG5oIGTDsm5nIGzhu4duaCIKKworIzogY29uZmlnLmM6MTYwMworIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgY29uZmlnIHZhcmlhYmxlICclcycgaW4gZmlsZSAnJXMnIGF0IGxpbmUgJWQiCittc2dzdHIgInNhaSBiaeG6v24gY+G6pXUgaMOsbmgg4oCcJXPigJ0gdHJvbmcgdOG6rXAgdGluIOKAnCVz4oCdIHThuqFpIGTDsm5nICVkIgorCisjOiBjb25maWcuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiVzIGPDsyDEkWEgZ2nDoSB0cuG7iyIKKworIzogY29ubmVjdGVkLmM6NjkKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY2jhuqF5IOKAnGdpdCByZXYtbGlzdOKAnSIKKworIzogY29ubmVjdGVkLmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRlIHRvIHJldi1saXN0OiAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGdoaSB2w6BvIHJldi1saXN0OiAlcyIKKworIzogY29ubmVjdGVkLmM6OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNsb3NlIHJldi1saXN0J3Mgc3RkaW46ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgxJHDs25nIMSR4bqndSB2w6BvIGNodeG6qW4gc3RkaW4gY+G7p2EgcmV2LWxpc3Q6ICVzIgorCisjOiBkYXRlLmM6OTUKK21zZ2lkICJpbiB0aGUgZnV0dXJlIgorbXNnc3RyICJ0cm9uZyB0xrDGoW5nIGxhaSIKKworIzogZGF0ZS5jOjEwMQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgc2Vjb25kIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHNlY29uZHMgYWdvIgorbXNnc3RyWzBdICIlbHUgZ2nDonkgdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiJWx1IHBow7p0IHRyxrDhu5tjIgorCisjOiBkYXRlLmM6MTE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBob3VyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IGhvdXJzIGFnbyIKK21zZ3N0clswXSAiJWx1IGdp4budIHRyxrDhu5tjIgorCisjOiBkYXRlLmM6MTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBkYXkgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgZGF5cyBhZ28iCittc2dzdHJbMF0gIiVsdSBuZ8OgeSB0csaw4bubYyIKKworIzogZGF0ZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiVsdSB0deG6p24gdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVsdSB0aMOhbmcgdHLGsOG7m2MiCisKKyM6IGRhdGUuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIiCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyIKK21zZ3N0clswXSAiJWx1IG7Eg20iCisKKyMuIFRSQU5TTEFUT1JTOiAiJXMiIGlzICI8bj4geWVhcnMiCisjOiBkYXRlLmM6MTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzLCAlbHUgbW9udGggYWdvIgorbXNnaWRfcGx1cmFsICIlcywgJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVzLCAlbHUgdGjDoW5nIHRyxrDhu5tjIgorCisjOiBkYXRlLmM6MTU0IGRhdGUuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgeWVhcnMgYWdvIgorbXNnc3RyWzBdICIlbHUgbsSDbSB0csaw4bubYyIKKworIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyB04bqtcC10aW4tdGjhu6ktdOG7sSDigJwlc+KAnSIKKworIzogZGlmZmNvcmUtcmVuYW1lLmM6NTM2Cittc2dpZCAiUGVyZm9ybWluZyBpbmV4YWN0IHJlbmFtZSBkZXRlY3Rpb24iCittc2dzdHIgIsSQYW5nIHRo4buxYyBoaeG7h24gZMOyIHTDrG0gxJHhu5VpIHTDqm4ga2jDtG5nIGNow61uaCB4w6FjIgorCisjOiBkaWZmLmM6MTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgRmFpbGVkIHRvIHBhcnNlIGRpcnN0YXQgY3V0LW9mZiBwZXJjZW50YWdlICclcydcbiIKK21zZ3N0ciAiICBH4bq3cCBs4buXaSBraGkgcGjDom4gdMOtY2ggZGlyc3RhdCBj4bqvdCBi4buPIHBo4bqnbiB0csSDbSDigJwlc+KAnVxuIgorCisjOiBkaWZmLmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgVW5rbm93biBkaXJzdGF0IHBhcmFtZXRlciAnJXMnXG4iCittc2dzdHIgIiAgS2jDtG5nIGhp4buDdSDEkeG7kWkgc+G7kSBkaXJzdGF0IOKAnCVz4oCdXG4iCisKKyM6IGRpZmYuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIktow7RuZyBoaeG7g3UgZ2nDoSB0cuG7iyBjaG8gYmnhur9uIGPhuqV1IGjDrG5oIOKAnGRpZmYuc3VibW9kdWxl4oCdOiDigJwlc+KAnSIKKworIzogZGlmZi5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm91bmQgZXJyb3JzIGluICdkaWZmLmRpcnN0YXQnIGNvbmZpZyB2YXJpYWJsZTpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIlTDrG0gdGjhuqV5IGPDoWMgbOG7l2kgdHJvbmcgYmnhur9uIGPhuqV1IGjDrG5oIOKAnGRpZmYuZGlyc3RhdOKAnTpcbiIKKyIlcyIKKworIzogZGlmZi5jOjI5OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZXh0ZXJuYWwgZGlmZiBkaWVkLCBzdG9wcGluZyBhdCAlcyIKK21zZ3N0ciAicGjhuqduIG3hu4FtIGRpZmYg4bufIGLDqm4gbmdvw6BpIMSRw6MgY2jhur90LCBk4burbmcgdOG6oWkgJXMiCisKKyM6IGRpZmYuYzozMzk0Cittc2dpZCAiLS1mb2xsb3cgcmVxdWlyZXMgZXhhY3RseSBvbmUgcGF0aHNwZWMiCittc2dzdHIgIi0tZm9sbG93IGPhuqduIGNow61uaCB4w6FjIG3hu5l0IMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiIKKworIzogZGlmZi5jOjM1NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZhaWxlZCB0byBwYXJzZSAtLWRpcnN0YXQvLVggb3B0aW9uIHBhcmFtZXRlcjpcbiIKKyIlcyIKK21zZ3N0ciAiIgorIkfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCDEkeG7kWkgc+G7kSB0w7l5IGNo4buNbiAtLWRpcnN0YXQvLVg6XG4iCisiJXMiCisKKyM6IGRpZmYuYzozNTcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSAtLXN1Ym1vZHVsZSBvcHRpb24gcGFyYW1ldGVyOiAnJXMnIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgcGjDom4gdMOtY2ggxJHhu5FpIHPhu5EgdMO5eSBjaOG7jW4gLS1zdWJtb2R1bGU6IOKAnCVz4oCdIgorCisjOiBkaXIuYzoxODUzCittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBs4bqleSB0w6puIHbDoCB0aMO0bmcgdGluIGPhu6dhIG5ow6JuIgorCisjOiBkaXIuYzoxOTM2Cittc2dpZCAiVW50cmFja2VkIGNhY2hlIGlzIGRpc2FibGVkIG9uIHRoaXMgc3lzdGVtLiIKK21zZ3N0ciAiQuG7mSBuaOG7myB04bqhbSBraMO0bmcgdGhlbyB24bq/dCBi4buLIHThuq90IHRyw6puIGjhu4cgdGjhu5FuZyBuw6B5LiIKKworIzogZ3BnLWludGVyZmFjZS5jOjE2NiBncGctaW50ZXJmYWNlLmM6MjM3Cittc2dpZCAiY291bGQgbm90IHJ1biBncGcuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgY2jhuqF5IGdwZy4iCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoxNzgKK21zZ2lkICJncGcgZGlkIG5vdCBhY2NlcHQgdGhlIGRhdGEiCittc2dzdHIgImdwZyDEkcOjIGtow7RuZyBjaOG6pXAgbmjhuq1uIGThu68gbGnhu4d1IgorCisjOiBncGctaW50ZXJmYWNlLmM6MTg5Cittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcgZ+G6t3AgbOG7l2kga2hpIGvDvSBk4buvIGxp4buHdSIKKworIzogZ3BnLWludGVyZmFjZS5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFyeSBmaWxlICclcyc6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdOG6rXAgdGluIHThuqFtIHRo4budaSDigJwlc+KAnTogJXMiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyc6ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgZ2hpIGNo4buvIGvDvSDEkcOtbmgga8OobSB2w6BvIOKAnCVz4oCdOiAlcyIKKworIzogZ3JlcC5jOjE3MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIuKAnCVz4oCdOiBraMO0bmcgdGjhu4MgxJHhu41jICVzIgorCisjOiBncmVwLmM6MTczNQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiAlcyIKK21zZ3N0ciAi4oCcJXPigJ06ICVzIgorCisjOiBncmVwLmM6MTc0NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBzaG9ydCByZWFkICVzIgorbXNnc3RyICLigJwlc+KAnTogxJHhu41jIG5n4bqvbiAlcyIKKworIzogaGVscC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgImPDoWMgbOG7h25oIGdpdCBz4bq1biBjw7MgdHJvbmcgdGjGsCBt4bulYyDigJwlc+KAnToiCisKKyM6IGhlbHAuYzoyMTQKK21zZ2lkICJnaXQgY29tbWFuZHMgYXZhaWxhYmxlIGZyb20gZWxzZXdoZXJlIG9uIHlvdXIgJFBBVEgiCittc2dzdHIgImPDoWMgbOG7h25oIGdpdCBz4bq1biBjw7MgdOG7qyBt4buZdCBuxqFpIGtow6FjIHRyb25nICRQQVRIIGPhu6dhIGLhuqFuIgorCisjOiBoZWxwLmM6MjQ2Cittc2dpZCAiVGhlc2UgYXJlIGNvbW1vbiBHaXQgY29tbWFuZHMgdXNlZCBpbiB2YXJpb3VzIHNpdHVhdGlvbnM6IgorbXNnc3RyICJDw7MgY8OhYyBs4buHbmggR2l0IGNodW5nIMSRxrDhu6NjIHPhu60gZOG7pW5nIHRyb25nIGPDoWMgdMOsbmggaHXhu5FuZyBraMOhYyBuaGF1OiIKKworIzogaGVscC5jOjMxMQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJyVzJyBhcHBlYXJzIHRvIGJlIGEgZ2l0IGNvbW1hbmQsIGJ1dCB3ZSB3ZXJlIG5vdFxuIgorImFibGUgdG8gZXhlY3V0ZSBpdC4gTWF5YmUgZ2l0LSVzIGlzIGJyb2tlbj8iCittc2dzdHIgIiIKKyLigJwlc+KAnSB0csO0bmcgbmjGsCBsw6AgbeG7mXQgbOG7h25oIGdpdCwgbmjGsG5nIGNow7puZyB0w7RpIGtow7RuZ1xuIgorInRo4buDIHRo4buxYyB0aGkgbsOzLiBDw7MgbOG6vSBsw6AgbOG7h25oIGdpdC0lcyDEkcOjIGLhu4sgaOG7j25nPyIKKworIzogaGVscC5jOjM2OAorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICLhu5BpIGNow6AuIEjhu4cgdGjhu5FuZyBj4bunYSBi4bqhbiBiw6FvIHLhurFuZyBjaOG6s25nIGPDsyBs4buHbmggR2l0IG7DoG8gY+G6oy4iCisKKyM6IGhlbHAuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldBUk5JTkc6IFlvdSBjYWxsZWQgYSBHaXQgY29tbWFuZCBuYW1lZCAnJXMnLCB3aGljaCBkb2VzIG5vdCBleGlzdC5cbiIKKyJDb250aW51aW5nIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgeW91IG1lYW50ICclcyciCittc2dzdHIgIiIKKyJD4bqiTkggQsOBTzogQuG6oW4gxJHDoyBn4buNaSBs4buHbmggR2l0IGPDsyB0w6puIOKAnCVz4oCdLCBtw6AgbsOzIGzhuqFpIGtow7RuZyBjw7Mgc+G6tW4uXG4iCisiVGnhur9wIHThu6VjIHbDoCBjb2kgcuG6sW5nIMO9IGLhuqFuIGzDoCDigJwlc+KAnSIKKworIzogaGVscC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbiAlMC4xZiBzZWNvbmRzIGF1dG9tYXRpY2FsbHkuLi4iCittc2dzdHIgInRyb25nICUwLjFmIGdpw6J5IG3hu5l0IGPDoWNoIHThu7EgxJHhu5luZ+KApiIKKworIzogaGVscC5jOjQwMgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQ6ICclcycgaXMgbm90IGEgZ2l0IGNvbW1hbmQuIFNlZSAnZ2l0IC0taGVscCcuIgorbXNnc3RyICJnaXQ6IOKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGzhu4duaCBj4bunYSBnaXQuIFhlbSDigJxnaXQgLS1oZWxw4oCdLiIKKworIzogaGVscC5jOjQwNiBoZWxwLmM6NDY2Cittc2dpZCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiB0aGlzPyIKK21zZ2lkX3BsdXJhbCAiIgorIlxuIgorIkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/IgorbXNnc3RyWzBdICIiCisiXG4iCisiQ8OzIHBo4bqjaSDDvSBi4bqhbiBsw6AgbeG7mXQgdHJvbmcgc+G7kSBuaOG7r25nIGPDoWkgbsOgeSBraMO0bmc/IgorCisjOiBoZWxwLmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyAtICVzIgorbXNnc3RyICIlczogJXMgLSAlcyIKKworIzogbWVyZ2UuYzo0MQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBjYWNoZSIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyBi4buZIG5o4bubIMSR4buHbSIKKworIzogbWVyZ2UuYzo5NCBidWlsdGluL2FtLmM6MjAwMSBidWlsdGluL2FtLmM6MjAzNiBidWlsdGluL2NoZWNrb3V0LmM6Mzc1CisjOiBidWlsdGluL2NoZWNrb3V0LmM6NTg2IGJ1aWx0aW4vY2xvbmUuYzo3MTUKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdOG6rXAgdGluIGzGsHUgYuG6o25nIG3hu6VjIGzhu6VjIG3hu5tpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiKGJhZCBjb21taXQpXG4iCittc2dzdHIgIihjb21taXQgc2FpKVxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWRkaW5mb19jYWNoZSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAiYWRkaW5mb19jYWNoZSBn4bq3cCBs4buXaSDEkeG7kWkgduG7m2kgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyNzAKK21zZ2lkICJlcnJvciBidWlsZGluZyB0cmVlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHjDonkgZOG7sW5nIGPDonkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjY4NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggJyVzJyVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG6oW8gxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICJH4buhIGLhu48gJXMgxJHhu4MgdOG6oW8gY2jhu5cgKHJvb20pIGNobyB0aMawIG3hu6VjIGNvblxuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3MTIgbWVyZ2UtcmVjdXJzaXZlLmM6NzMzCittc2dpZCAiOiBwZXJoYXBzIGEgRC9GIGNvbmZsaWN0PyIKK21zZ3N0ciAiOiBjw7MgbOG6vSBsw6AgbeG7mXQgeHVuZyDEkeG7mXQgRC9GPyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6NzIzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQgJyVzJyIKK21zZ3N0ciAidOG7qyBjaOG7kWkgxJHDs25nIHThuq1wIHRpbiBraMO0bmcgxJHGsOG7o2MgdGhlbyBkw7VpIHThuqFpIOKAnCVz4oCdIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgb2JqZWN0ICVzICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgxJHhu5FpIHTGsOG7o25nICVzIOKAnCVz4oCdIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmxvYiBleHBlY3RlZCBmb3IgJXMgJyVzJyIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIGJsb2IgxJHGsOG7o2MgbW9uZyDEkeG7o2kgY2hvICVzIOKAnCVz4oCdIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3ODggYnVpbHRpbi9jbG9uZS5jOjM2NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gb3BlbiAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbeG7nyDigJwlc+KAnSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzk2CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBzeW1saW5rICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqhbyBsacOqbiBr4bq/dCBt4buBbSAoc3ltbGluaykg4oCcJXPigJ0iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc5OQorIywgYy1mb3JtYXQKK21zZ2lkICJkbyBub3Qga25vdyB3aGF0IHRvIGRvIHdpdGggJTA2byAlcyAnJXMnIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IHBo4bqjaSBsw6BtIGfDrCB24bubaSAlMDZvICVzIOKAnCVz4oCdIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5MzcKK21zZ2lkICJGYWlsZWQgdG8gZXhlY3V0ZSBpbnRlcm5hbCBtZXJnZSIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRo4buxYyBoaeG7h24gdHLhu5luIG7hu5lpIGLhu5kiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGjDqm0gJXMgdsOgbyBjxqEgc+G7nyBk4buvIGxp4buHdSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6OTU3Cittc2dpZCAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgaW4gdGhlIHRyZWUiCittc2dzdHIgImtp4buDdSDEkeG7kWkgdMaw4bujbmcga2jDtG5nIMSRxrDhu6NjIGjhu5cgdHLhu6MgdHJvbmcgY8OieSAodHJlZSkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwMzIgbWVyZ2UtcmVjdXJzaXZlLmM6MTA0NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ09ORkxJQ1QgKCVzL2RlbGV0ZSk6ICVzIGRlbGV0ZWQgaW4gJXMgYW5kICVzIGluICVzLiBWZXJzaW9uICVzIG9mICVzIGxlZnQgIgorImluIHRyZWUuIgorbXNnc3RyICIiCisiWFVORyDEkOG7mFQgKCVzL3jDs2EpOiAlcyBi4buLIHjDs2EgdHJvbmcgJXMgdsOgICVzIHRyb25nICVzLiBQaGnDqm4gYuG6o24gJXMgY+G7p2EgJXMgIgorImPDsm4gbOG6oWkgdHJvbmcgY8OieSAodHJlZSkuIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDM4IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlIGF0ICVzLiIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICglcy94w7NhKTogJXMgYuG7iyB4w7NhIHRyb25nICVzIHbDoCAlcyB0cm9uZyAlcy4gUGhpw6puIGLhuqNuICVzIGPhu6dhICVzICIKKyJjw7JuIGzhuqFpIHRyb25nIGPDonkgKHRyZWUpIHThuqFpICVzLiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA5MgorbXNnaWQgInJlbmFtZSIKK21zZ3N0ciAixJHhu5VpIHTDqm4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwOTIKK21zZ2lkICJyZW5hbWVkIgorbXNnc3RyICLEkcOjIMSR4buVaSB0w6puIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIGEgZGlyZWN0b3J5IGluICVzIGFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICIlcyBsw6AgbeG7mXQgdGjGsCBt4bulYyB0cm9uZyAlcyB0aGF5IHbDoG8gxJHDsyB0aMOqbSB2w6BvIG5oxrAgbMOgICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMTcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSBcIiVzXCItPlwiJXNcIiBpbiBicmFuY2ggXCIlc1wiIHJlbmFtZSBcIiVzIgorIlwiLT5cIiVzXCIgaW4gXCIlc1wiJXMiCittc2dzdHIgIiIKKyJYVU5HIMSQ4buYVCAoxJHhu5VpLXTDqm4vxJHhu5VpLXTDqm4pOiDEkOG7lWkgdMOqbiBcIiVzXCItPlwiJXNcIiB0cm9uZyBuaMOhbmggXCIlc1wiIMSR4buVaSAiCisidMOqbiBcIiVzXCItPlwiJXNcIiB0cm9uZyBcIiVzXCIlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE3NQorbXNnaWQgIiAobGVmdCB1bnJlc29sdmVkKSIKK21zZ3N0ciAiIChj4bqnbiBnaeG6o2kgcXV54bq/dCkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9yZW5hbWUpOiBSZW5hbWUgJXMtPiVzIGluICVzLiBSZW5hbWUgJXMtPiVzIGluICVzIgorbXNnc3RyICIiCisiWFVORyDEkOG7mFQgKMSR4buVaS10w6puL8SR4buVaS10w6puKTogxJDhu5VpIHTDqm4gJXMtPiVzIHRyb25nICVzLiDEkOG7lWkgdMOqbiAlcy0+JXMgdHJvbmcgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXMgYW5kICVzIHRvICVzIGluc3RlYWQiCittc2dzdHIgIsSQYW5nIMSR4buVaSB0w6puICVzIHRow6BuaCAlcyB0aGF5IHbDrCAlcyB0aMOgbmggJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKHJlbmFtZS9hZGQpOiBSZW5hbWUgJXMtPiVzIGluICVzLiAlcyBhZGRlZCBpbiAlcyIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICjEkeG7lWktdMOqbi90aMOqbSk6IMSQ4buVaSB0w6puICVzLT4lcyB0cm9uZyAlcy4gJXMgxJHGsOG7o2MgdGjDqm0gdsOgbyB0cm9uZyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgbWVyZ2VkICVzIgorbXNnc3RyICJUaMOqbSBow7JhIHRy4buZbiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3MyBtZXJnZS1yZWN1cnNpdmUuYzoxNjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICJUaGF5IHbDoG8gxJHDsyB0aMOqbSB2w6BvICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyDEkeG7kWkgdMaw4bujbmcgJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIGlzIG5vdCBhIGJsb2IiCittc2dzdHIgIsSR4buRaSB0xrDhu6NuZyAlcyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBibG9iIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTc1Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICJz4butYSDEkeG7lWkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NzUKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAixJHDoyBz4butYSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTU4NQorbXNnaWQgImNvbnRlbnQiCittc2dzdHIgIm7hu5lpIGR1bmciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1OTIKK21zZ2lkICJhZGQvYWRkIgorbXNnc3RyICJ0aMOqbS90aMOqbSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIsSQw6MgYuG7jyBxdWEgJXMgKMSRw6MgY8OzIHPhurVuIGzhuqduIGjDsmEgdHLhu5luIG7DoHkpIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQwCisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG8tbWVyZ2luZyAlcyIKK21zZ3N0ciAiVOG7sS3EkeG7mW5nLWjDsmEtdHLhu5luICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQ0IGdpdC1zdWJtb2R1bGUuc2g6MTE1MAorbXNnaWQgInN1Ym1vZHVsZSIKK21zZ3N0ciAibcO0LcSRdW4tY29uIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUICglcyk6IE1lcmdlIGNvbmZsaWN0IGluICVzIgorbXNnc3RyICJYVU5HIMSQ4buYVCAoJXMpOiBYdW5nIMSR4buZdCBow7JhIHRy4buZbiB0cm9uZyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTczMQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyIKK21zZ3N0ciAixJBhbmcgeMOzYSAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc1NgorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICJ04bqtcC10aW4vdGjGsC1t4bulYyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2MgorbXNnaWQgImRpcmVjdG9yeS9maWxlIgorbXNnc3RyICJ0aMawLW3hu6VjL3Thuq1wLXRpbiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc2NworIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBUaGVyZSBpcyBhIGRpcmVjdG9yeSB3aXRoIG5hbWUgJXMgaW4gJXMuIEFkZGluZyAlcyBhcyAlcyIKK21zZ3N0ciAiIgorIlhVTkcgxJDhu5hUICglcyk6IOG7niDEkcOieSBraMO0bmcgY8OzIHRoxrAgbeG7pWMgbsOgbyBjw7MgdMOqbiAlcyB0cm9uZyAlcy4gVGjDqm0gJXMgbmjGsCBsw6AgIgorIiVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzc3CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyAlcyIKK21zZ3N0ciAiVGjDqm0gXCIlc1wiIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzk0Cittc2dpZCAiRmF0YWwgbWVyZ2UgZmFpbHVyZSwgc2hvdWxkbid0IGhhcHBlbi4iCittc2dzdHIgIlZp4buHYyBow7JhIHRy4buZbiBo4buPbmcgbmdoacOqbSB0cuG7jW5nLCBraMO0bmcgbsOqbiDEkeG7gyB44bqjeSByYS4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MTMKK21zZ2lkICJBbHJlYWR5IHVwLXRvLWRhdGUhIgorbXNnc3RyICLEkMOjIGPhuq1wIG5o4bqtdCBy4buTaSEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICJow7JhIHRy4buZbiBjw6J5ICh0cmVlKSAlcyB2w6AgJXMgZ+G6t3AgbOG7l2kiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5wcm9jZXNzZWQgcGF0aD8/PyAlcyIKK21zZ3N0ciAixJDGsOG7nW5nIGThuqtuIGNoxrBhIMSRxrDhu6NjIHjhu60gbMO9Pz8/ICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTAwCittc2dpZCAiTWVyZ2luZzoiCittc2dzdHIgIsSQYW5nIHRy4buZbjoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gInTDrG0gdGjhuqV5ICV1IHThu5UgdGnDqm4gY2h1bmc6IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxOTUwCittc2dpZCAibWVyZ2UgcmV0dXJuZWQgbm8gY29tbWl0IgorbXNnc3RyICJow7JhIHRy4buZbiBraMO0bmcgdHLhuqMgduG7gSBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHBhcnNlIG9iamVjdCAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggxJHhu5FpIHTGsOG7o25nIOKAnCVz4oCdIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDE4IGJ1aWx0aW4vbWVyZ2UuYzo2NDUKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogbm90ZXMtdXRpbHMuYzo0MQorbXNnaWQgIkNhbm5vdCBjb21taXQgdW5pbml0aWFsaXplZC91bnJlZmVyZW5jZWQgbm90ZXMgdHJlZSIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBjaHV54buDbiBnaWFvIGPDonkgZ2hpIGNow7ogY2jGsGEgxJHGsOG7o2Mga2jhu59pIHThuqFvIGhv4bq3YyBraMO0bmcgxJHGsOG7o2MgdGhhbSAiCisiY2hp4bq/dSIKKworIzogbm90ZXMtdXRpbHMuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIG5vdGVzLnJld3JpdGVNb2RlIHZhbHVlOiAnJXMnIgorbXNnc3RyICJHacOhIHRy4buLIG5vdGVzLnJld3JpdGVNb2RlIHNhaTog4oCcJXPigJ0iCisKKyM6IG5vdGVzLXV0aWxzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICJU4burIGNo4buRaSBnaGkgxJHDqCBnaGkgY2jDuiB0cm9uZyAlcyAobuG6sW0gbmdvw6BpIHJlZnMvbm90ZXMvKSIKKworIy4gVFJBTlNMQVRPUlM6IFRoZSBmaXJzdCAlcyBpcyB0aGUgbmFtZSBvZiB0aGUKKyMuIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgc2Vjb25kICVzIGlzIGl0cyB2YWx1ZQorIzogbm90ZXMtdXRpbHMuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkICVzIHZhbHVlOiAnJXMnIgorbXNnc3RyICJHacOhIHRy4buLICVzIHNhaTog4oCcJXPigJ0iCisKKyM6IG9iamVjdC5jOjI0MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2Ugb2JqZWN0OiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIMSR4buRaSB0xrDhu6NuZzog4oCcJXPigJ0iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo1NjMKK21zZ2lkICIuLi4iCittc2dzdHIgIuKApiIKKworIzogcGFyc2Utb3B0aW9ucy5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZTogJXMiCittc2dzdHIgImPDoWNoIGTDuW5nOiAlcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uCisjOiBwYXJzZS1vcHRpb25zLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICAgICBob+G6t2M6ICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NjIyCittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLVPhu5AiCisKKyM6IHBhdGhzcGVjLmM6MTMzCittc2dpZCAiZ2xvYmFsICdnbG9iJyBhbmQgJ25vZ2xvYicgcGF0aHNwZWMgc2V0dGluZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiIgorImPDoWMgY8OgaSDEkeG6t3QgxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIOKAnGdsb2LigJ0gdsOgIOKAnG5vZ2xvYuKAnSB0b8OgbiBj4bulYyBsw6AgeHVuZyBraOG6r2MgbmhhdSIKKworIzogcGF0aHNwZWMuYzoxNDMKK21zZ2lkICIiCisiZ2xvYmFsICdsaXRlcmFsJyBwYXRoc3BlYyBzZXR0aW5nIGlzIGluY29tcGF0aWJsZSB3aXRoIGFsbCBvdGhlciBnbG9iYWwgIgorInBhdGhzcGVjIHNldHRpbmdzIgorbXNnc3RyICIiCisiY8OgaSDEkeG6t3QgxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIOKAnGxpdGVyYWzigJ0gdG/DoG4gY+G7pWMgbMOgIHh1bmcga2jhuq9jIHbhu5tpIGPDoWMgY8OgaSDEkeG6t3QgxJHhurdjICIKKyJ04bqjIMSRxrDhu51uZyBk4bqrbiB0b8OgbiBj4bulYyBraMOhYyIKKworIzogcGF0aHNwZWMuYzoxNzcKK21zZ2lkICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgcGF0aHNwZWMgbWFnaWMgJ3ByZWZpeCciCittc2dzdHIgInRoYW0gc+G7kSBraMO0bmcgaOG7o3AgbOG7hyBjaG8g4oCcdGnhu4FuIHThu5HigJ0gbcOgdSBuaGnhu4dtIMSR4bq3YyB04bqjIMSRxrDhu51uZyDEkeG6q24iCisKKyM6IHBhdGhzcGVjLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIlPhu5EgbcOgdSBuaGnhu4dtIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiBraMO0bmcgaOG7o3AgbOG7hyDigJwlLipz4oCdIHRyb25nIOKAnCVz4oCdIgorCisjOiBwYXRoc3BlYy5jOjE4NworIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nICcpJyBhdCB0aGUgZW5kIG9mIHBhdGhzcGVjIG1hZ2ljIGluICclcyciCittc2dzdHIgIlRoaeG6v3Ug4oCcKeKAnSB04bqhaSBjdeG7kWkgY+G7p2Egc+G7kSBtw6B1IG5oaeG7h20gxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIHRyb25nIOKAnCVz4oCdIgorCisjOiBwYXRoc3BlYy5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmltcGxlbWVudGVkIHBhdGhzcGVjIG1hZ2ljICclYycgaW4gJyVzJyIKK21zZ3N0ciAiQ2jGsGEgdmnhur90IG3DoyBjaG8gc+G7kSBtw6B1IG5oaeG7h20gxJHhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIOKAnCVj4oCdIHRyb25nIOKAnCVz4oCdIgorCisjOiBwYXRoc3BlYy5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJ2xpdGVyYWwnIGFuZCAnZ2xvYicgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiJXM6IOKAnGxpdGVyYWzigJ0gdsOgIOKAnGdsb2LigJ0geHVuZyBraOG6r2MgbmhhdSIKKworIzogcGF0aHNwZWMuYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IgorbXNnc3RyICIlczog4oCcJXPigJ0gbmdvw6BpIG3hu5l0IGtobyBjaOG7qWEiCisKKyM6IHBhdGhzcGVjLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAixJDhurdjIHThuqMgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIHRow6wg4bufIHRyb25nIG3DtC3EkXVuLWNvbiDigJwlLipz4oCdIgorCisjOiBwYXRoc3BlYy5jOjM1MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogcGF0aHNwZWMgbWFnaWMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGNvbW1hbmQ6ICVzIgorbXNnc3RyICIlczogc+G7kSBt4bqndSBuaGnhu4dtIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiBjaMawYSDEkcaw4bujYyBo4buXIHRy4bujIGLhu59pIGzhu4duaCBuw6B5OiAlcyIKKworIzogcGF0aHNwZWMuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLEkeG6t2MgdOG6oyDEkcaw4budbmcgZOG6q24g4oCcJXPigJ0gdsaw4bujdCByYSBuZ2/DoGkgbGnDqm4ga+G6v3QgbeG7gW0iCisKKyM6IHBhdGhzcGVjLmM6NDQxCittc2dpZCAiIgorIlRoZXJlIGlzIG5vdGhpbmcgdG8gZXhjbHVkZSBmcm9tIGJ5IDooZXhjbHVkZSkgcGF0dGVybnMuXG4iCisiUGVyaGFwcyB5b3UgZm9yZ290IHRvIGFkZCBlaXRoZXIgJzovJyBvciAnLicgPyIKK21zZ3N0ciAiIgorIuG7niDEkcOieSBraMO0bmcgY8OzIGfDrCBi4buLIGxv4bqhaSB0cuG7qyBi4bufaTogY8OhYyBt4bqrdSAobG/huqFpIHRy4burKS5cbiIKKyJDw7MgbOG6vSBi4bqhbiDEkcOjIHF1w6puIHRow6ptIGhv4bq3YyBsw6Ag4oCcOi/igJ0gaG/hurdjIGzDoCDigJwu4oCdPyIKKworIzogcHJldHR5LmM6OTY5Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIMSR4buLbmggZOG6oW5nIC0tcHJldHR5IgorCisjOiBwcm9ncmVzcy5jOjIzNgorbXNnaWQgImRvbmUiCittc2dzdHIgInhvbmciCisKKyM6IHJlYWQtY2FjaGUuYzoxMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbmRleC52ZXJzaW9uIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyJpbmRleC52ZXJzaW9uIMSRxrDhu6NjIMSR4bq3dCwgbmjGsG5nIGdpw6EgdHLhu4sgY+G7p2EgbsOzIGzhuqFpIGtow7RuZyBo4bujcCBs4buHLlxuIgorIkTDuW5nIHBoacOqbiBi4bqjbiAlaSIKKworIzogcmVhZC1jYWNoZS5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyJHSVRfSU5ERVhfVkVSU0lPTiDEkcaw4bujYyDEkeG6t3QsIG5oxrBuZyBnacOhIHRy4buLIGPhu6dhIG7DsyBs4bqhaSBraMO0bmcgaOG7o3AgbOG7hy5cbiIKKyJEw7luZyBwaGnDqm4gYuG6o24gJWkiCisKKyM6IHJlZnMuYzoyOTQxIGJ1aWx0aW4vbWVyZ2UuYzo3NjAgYnVpbHRpbi9tZXJnZS5jOjg3MSBidWlsdGluL21lcmdlLmM6OTczCisjOiBidWlsdGluL21lcmdlLmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIktow7RuZyB0aOG7gyBt4bufIOKAnCVz4oCdIMSR4buDIGdoaSIKKworIzogcmVmcy5jOjMwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgeMOzYSBi4buPIHRoYW0gY2hp4bq/dSAlczogJXMiCisKKyM6IHJlZnMuYzozMDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB4w7NhIGLhu48gdGhhbSBjaGnhur91OiAlcyIKKworIzogcmVmcy5jOjMwMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlbW92ZSByZWZlcmVuY2UgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBn4buhIGLhu48gdGhhbSBjaGnhur91OiAlcyIKKworIzogcmVmLWZpbHRlci5jOjY2MAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBmb3JtYXQiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCDEkeG7i25oIGThuqFuZyIKKworIzogcmVtb3RlLmM6NzkyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuqV5IHbhu4EgY+G6oyAlcyB2w6AgJXMgY2hvICVzIgorCisjOiByZW1vdGUuYzo3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMgdGjGsOG7nW5nIHRoZW8gZMO1aSAlcywga2jDtG5nIHBo4bqjaSAlcyIKKworIzogcmVtb3RlLmM6ODAwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIHRyYWNrcyBib3RoICVzIGFuZCAlcyIKK21zZ3N0ciAiJXMgdGhlbyBkw7VpIGPhuqMgJXMgdsOgICVzIgorCisjOiByZW1vdGUuYzo4MDgKK21zZ2lkICJJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAiTOG7l2kgbuG7mWkgYuG7mSIKKworIzogcmVtb3RlLmM6MTcyMyByZW1vdGUuYzoxNzY2Cittc2dpZCAiSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaCIKK21zZ3N0ciAiSEVBRCBraMO0bmcgY2jhu4kgxJHhur9uIG3hu5l0IG5ow6FuaCBuw6BvIGPhuqMiCisKKyM6IHJlbW90ZS5jOjE3MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2g6ICclcyciCittc2dzdHIgImtow7RuZyBjw7MgbmjDoW5oIG7DoG8gbmjGsCB0aOG6vzog4oCcJXPigJ0iCisKKyM6IHJlbW90ZS5jOjE3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICclcyciCittc2dzdHIgImtow7RuZyBjw7MgdGjGsOG7o25nIG5ndeG7k24gxJHGsOG7o2MgY+G6pXUgaMOsbmggY2hvIG5ow6FuaCDigJwlc+KAnSIKKworIzogcmVtb3RlLmM6MTc0MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1cHN0cmVhbSBicmFuY2ggJyVzJyBub3Qgc3RvcmVkIGFzIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCIKK21zZ3N0ciAiIgorIm5ow6FuaCB0aMaw4bujbmcgbmd14buTbiDigJwlc+KAnSBraMO0bmcgxJHGsOG7o2MgbMawdSBs4bqhaSBuaMawIGzDoCBt4buZdCBuaMOhbmggdGhlbyBkw7VpIG3DoXkgY2jhu6ciCisKKyM6IHJlbW90ZS5jOjE3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIsSR4bqpeSBsw6puIMSRw61jaCDigJwlc+KAnSB0csOqbiBtw6F5IGNo4bunIOKAnCVz4oCdIGtow7RuZyBjw7MgbmjDoW5oIHRoZW8gZMO1aSBu4buZaSBi4buZIgorCisjOiByZW1vdGUuYzoxNzcxCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGhhcyBubyByZW1vdGUgZm9yIHB1c2hpbmciCittc2dzdHIgIm5ow6FuaCDigJwlc+KAnSBraMO0bmcgY8OzIG3DoXkgY2jhu6cgxJHhu4MgxJHhuql5IGzDqm4iCisKKyM6IHJlbW90ZS5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICLEkeG6qXkgcmVmc3BlY3MgY2hvIOKAnCVz4oCdIGtow7RuZyBiYW8gZ+G7k20g4oCcJXPigJ0iCisKKyM6IHJlbW90ZS5jOjE3OTUKK21zZ2lkICJwdXNoIGhhcyBubyBkZXN0aW5hdGlvbiAocHVzaC5kZWZhdWx0IGlzICdub3RoaW5nJykiCittc2dzdHIgIsSR4bqpeSBsw6puIG3DoCBraMO0bmcgY8OzIMSRw61jaCAocHVzaC5kZWZhdWx0IGzDoCDigJxub3RoaW5n4oCdKSIKKworIzogcmVtb3RlLmM6MTgxNworbXNnaWQgImNhbm5vdCByZXNvbHZlICdzaW1wbGUnIHB1c2ggdG8gYSBzaW5nbGUgZGVzdGluYXRpb24iCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kgxJHhuql5IOKAnMSRxqFuIGdp4bqjbuKAnSDEkeG6v24gbeG7mXQgxJHDrWNoIMSRxqFuIgorCisjOiByZW1vdGUuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAiIgorIk5ow6FuaCBj4bunYSBi4bqhbiBk4buxYSB0csOqbiBjxqEgc+G7nyBsw6Ag4oCcJXPigJ0sIG5oxrBuZyB0csOqbiB0aMaw4bujbmcgbmd14buTbiBraMO0bmcgY8Oybi5cbiIKKworIzogcmVtb3RlLmM6MjEyOAorbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIgICAoZMO5bmcgXCIgZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtXCIgxJHhu4Mgc+G7rWEpXG4iCisKKyM6IHJlbW90ZS5jOjIxMzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91ciBicmFuY2ggaXMgdXAtdG8tZGF0ZSB3aXRoICclcycuXG4iCittc2dzdHIgIk5ow6FuaCBj4bunYSBi4bqhbiDEkcOjIGPhuq1wIG5o4bqtdCB24bubaSDigJwlc+KAnS5cbiIKKworIzogcmVtb3RlLmM6MjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICJOaMOhbmggY+G7p2EgYuG6oW4gxJHhu6luZyB0csaw4bubYyDigJwlc+KAnSAlZCBs4bqnbiBjaHV54buDbiBnaWFvLlxuIgorCisjOiByZW1vdGUuYzoyMTQxCittc2dpZCAiICAodXNlIFwiZ2l0IHB1c2hcIiB0byBwdWJsaXNoIHlvdXIgbG9jYWwgY29tbWl0cylcbiIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgcHVzaFwiIMSR4buDIHh14bqldCBi4bqjbiBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gbuG7mWkgYuG7mSBj4bunYSBi4bqhbilcbiIKKworIzogcmVtb3RlLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICIiCisiTmjDoW5oIGPhu6dhIGLhuqFuIMSR4bupbmcgxJHhurFuZyBzYXUg4oCcJXPigJ0gJWQgbOG6p24gY2h1eeG7g24gZ2lhbywgdsOgIGPDsyB0aOG7gyDEkcaw4bujYyBjaHV54buDbi0iCisidGnhur9wLW5oYW5oLlxuIgorCisjOiByZW1vdGUuYzoyMTUyCittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IHB1bGxcIiDEkeG7gyBj4bqtcCBuaOG6rXQgbmjDoW5oIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4pXG4iCisKKyM6IHJlbW90ZS5jOjIxNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgYnJhbmNoIGFuZCAnJXMnIGhhdmUgZGl2ZXJnZWQsXG4iCisiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXQgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnaWRfcGx1cmFsICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuIgorbXNnc3RyWzBdICIiCisiTmjDoW5oIGPhu6dhIGLhuqFuIHbDoCDigJwlc+KAnSBi4buLIHBow6JuIGvhu7MsXG4iCisidsOgIGPDsyAlZCB2w6AgJWQgbOG6p24gY2h1eeG7g24gZ2lhbyBraMOhYyBuaGF1IGNobyB04burbmcgY8OhaSxcbiIKKyJ0xrDGoW5nIOG7qW5nIHbhu5tpIG3hu5dpIGzhuqduLlxuIgorCisjOiByZW1vdGUuYzoyMTY1Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIiCisiICAoZMO5bmcgXCJnaXQgcHVsbFwiIMSR4buDIGjDsmEgdHLhu5luIG5ow6FuaCB0csOqbiBtw6F5IGNo4bunIHbDoG8gdHJvbmcgbmjDoW5oIGPhu6dhICIKKyJi4bqhbilcbiIKKworIzogcmV2aXNpb24uYzoyMTk4Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCBhcHBlYXJzIHRvIGJlIGJyb2tlbiIKK21zZ3N0ciAibmjDoW5oIGhp4buHbiB04bqhaSBj4bunYSBi4bqhbiBjw7MgduG6uyBuaMawIGLhu4sgaOG7j25nIgorCisjOiByZXZpc2lvbi5jOjIyMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAieW91ciBjdXJyZW50IGJyYW5jaCAnJXMnIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdHMgeWV0IgorbXNnc3RyICJuaMOhbmggaGnhu4duIHThuqFpIGPhu6dhIGLhuqFuIOKAnCVz4oCdIGtow7RuZyBjw7MgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6BvIGPhuqMiCisKKyM6IHJldmlzaW9uLmM6MjM5NQorbXNnaWQgIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IgorbXNnc3RyICItLWZpcnN0LXBhcmVudCB4dW5nIGto4bqvYyB24bubaSAtLWJpc2VjdCIKKworIzogcnVuLWNvbW1hbmQuYzo4MworbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIG3hu58g4oCcL2Rldi9udWxs4oCdIgorCisjOiBydW4tY29tbWFuZC5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cDIoJWQsJWQpIGZhaWxlZCIKK21zZ3N0ciAiZHVwMiglZCwlZCkgZ+G6t3AgbOG7l2kiCisKKyM6IHNlbmQtcGFjay5jOjI5NQorbXNnaWQgImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkga8O9IGNo4bupbmcgdGjhu7FjIMSR4bqpeSIKKworIzogc2VuZC1wYWNrLmM6NDA0Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCBwdXNoIgorbXNnc3RyICJr4bq/dCB0aMO6YyBuaOG6rW4ga2jDtG5nIGjhu5cgdHLhu6MgxJHhuql5IC0tc2lnbmVkIgorCisjOiBzZW5kLXBhY2suYzo0MDYKK21zZ2lkICIiCisibm90IHNlbmRpbmcgYSBwdXNoIGNlcnRpZmljYXRlIHNpbmNlIHRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS0iCisic2lnbmVkIHB1c2giCittc2dzdHIgIiIKKyLEkeG7q25nIGfhu61pIGdp4bqleSBjaOG7qW5nIG5o4bqtbiDEkeG6qXkgdHLGsOG7m2Mga2hpIGvhur90IHRow7pjIG5o4bqtbiBraMO0bmcgaOG7lyB0cuG7oyDEkeG6qXkgLS0iCisic2lnbmVkIgorCisjOiBzZW5kLXBhY2suYzo0MTgKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgImvhur90IHRow7pjIG5o4bqtbiBraMO0bmcgaOG7lyB0cuG7oyDEkeG6qXkgLS1hdG9taWMiCisKKyM6IHNlcXVlbmNlci5jOjE4MworbXNnaWQgIiIKKyJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisid2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nIgorbXNnc3RyICIiCisic2F1IGtoaSBnaeG6o2kgcXV54bq/dCBjw6FjIHh1bmcgxJHhu5l0LCDEkcOhbmggZOG6pXUgxJHGsOG7nW5nIGThuqtuIMSRw6Mgc+G7rWFcbiIKKyJ24bubaSBs4buHbmgg4oCcZ2l0IGFkZCA8xJHGsOG7nW5nX2ThuqtuPuKAnSBob+G6t2Mg4oCcZ2l0IHJtIDzEkcaw4budbmdfZOG6q24+4oCdIgorCisjOiBzZXF1ZW5jZXIuYzoxODYKK21zZ2lkICIiCisiYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRoc1xuIgorIndpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+J1xuIgorImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIKK21zZ3N0ciAiIgorInNhdSBraGkgZ2nhuqNpIHF1eeG6v3QgY8OhYyB4dW5nIMSR4buZdCwgxJHDoW5oIGThuqV1IMSRxrDhu51uZyBk4bqrbiDEkcOjIHPhu61hXG4iCisiduG7m2kgbOG7h25oIOKAnGdpdCBhZGQgPMSRxrDhu51uZ19k4bqrbj7igJ0gaG/hurdjIOKAnGdpdCBybSA8xJHGsOG7nW5nX2ThuqtuPuKAnVxuIgorInbDoCBjaHV54buDbiBnaWFvIGvhur90IHF14bqjIGLhurFuZyBs4buHbmgg4oCcZ2l0IGNvbW1pdOKAnSIKKworIzogc2VxdWVuY2VyLmM6MTk5IHNlcXVlbmNlci5jOjg0MiBzZXF1ZW5jZXIuYzo5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHRvICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIHbDoG8gJXMiCisKKyM6IHNlcXVlbmNlci5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcyIKK21zZ3N0ciAiTOG7l2kgYmFvIGLhu41jICVzIgorCisjOiBzZXF1ZW5jZXIuYzoyMTcKK21zZ2lkICJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlcnJ5LXBpY2suIgorbXNnc3RyICJDw6FjIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgY+G7p2EgYuG6oW4gY8OzIHRo4buDIGLhu4sgZ2hpIMSRw6ggYuG7n2kgbOG7h25oIGNoZXJyeS1waWNrLiIKKworIzogc2VxdWVuY2VyLmM6MjE5Cittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHJldmVydC4iCittc2dzdHIgIkPDoWMgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSBj4bunYSBi4bqhbiBjw7MgdGjhu4MgYuG7iyBnaGkgxJHDqCBi4bufaSBs4buHbmggaG/DoG4gbmd1ecOqbi4iCisKKyM6IHNlcXVlbmNlci5jOjIyMgorbXNnaWQgIkNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIKK21zZ3N0ciAiQ2h1eeG7g24gZ2lhbyBjw6FjIHRoYXkgxJHhu5VpIGPhu6dhIGLhuqFuIGhheSB04bqhbSBj4bqldCAoc3Rhc2gpIGNow7puZyDEkeG7gyB44butIGzDvS4iCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiIG9yICJjaGVycnktcGljayIKKyM6IHNlcXVlbmNlci5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlczogS2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gbMawdSBi4bqjbmcgbeG7pWMgbOG7pWMgbeG7m2kiCisKKyM6IHNlcXVlbmNlci5jOjMyNworbXNnaWQgIkNvdWxkIG5vdCByZXNvbHZlIEhFQUQgY29tbWl0XG4iCittc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kgY29tbWl0IChs4bqnbiBjaHV54buDbiBnaWFvKSBIRUFEXG4iCisKKyM6IHNlcXVlbmNlci5jOjM0NworbXNnaWQgIlVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZVxuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IGPDonkgYuG7mSBuaOG7myDEkeG7h21cbiIKKworIzogc2VxdWVuY2VyLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXNcbiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGzhuqduIGNodXnhu4NuIGdpYW8gJXNcbiIKKworIzogc2VxdWVuY2VyLmM6NDA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzXG4iCittc2dzdHIgIktow7RuZyB0aOG7gyBwaMOibiB0w61jaCBs4bqnbiBjaHV54buDbiBnaWFvIGNoYSBt4bq5IOKAnCVz4oCdXG4iCisKKyM6IHNlcXVlbmNlci5jOjQ2OQorbXNnaWQgIllvdXIgaW5kZXggZmlsZSBpcyB1bm1lcmdlZC4iCittc2dzdHIgIlThuq1wIHRpbiBsxrB1IG3hu6VjIGzhu6VjIGPhu6dhIGLhuqFuIGtow7RuZyDEkcaw4bujYyBow7JhIHRy4buZbi4iCisKKyM6IHNlcXVlbmNlci5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaXMgYSBtZXJnZSBidXQgbm8gLW0gb3B0aW9uIHdhcyBnaXZlbi4iCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8gJXMgbMOgIG3hu5l0IGzhuqduIGjDsmEgdHLhu5luIG5oxrBuZyBraMO0bmcgxJHGsGEgcmEgdMO5eSBjaOG7jW4gLW0uIgorCisjOiBzZXF1ZW5jZXIuYzo0OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGRvZXMgbm90IGhhdmUgcGFyZW50ICVkIgorbXNnc3RyICJM4bqnbiBjaHV54buDbiBnaWFvICVzIGtow7RuZyBjw7MgY2hhIG3hurkgJWQiCisKKyM6IHNlcXVlbmNlci5jOjUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWlubGluZSB3YXMgc3BlY2lmaWVkIGJ1dCBjb21taXQgJXMgaXMgbm90IGEgbWVyZ2UuIgorbXNnc3RyICIiCisiTHXhu5NuZyBjaMOtbmggxJHDoyDEkcaw4bujYyBjaOG7iSByYSBuaMawbmcgbOG6p24gY2h1eeG7g24gZ2lhbyAlcyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBs4bqnbiAiCisiaMOyYSB0cuG7mW4uIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgInJldmVydCIgb3IKKyMuICJjaGVycnktcGljayIsIHRoZSBzZWNvbmQgJXMgYSBTSEExCisjOiBzZXF1ZW5jZXIuYzo1MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbm5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzIgorbXNnc3RyICIlczoga2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGzhuqduIGNodXnhu4NuIGdpYW8gbeG6uSBj4bunYSAlcyIKKworIzogc2VxdWVuY2VyLmM6NTE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBnZXQgY29tbWl0IG1lc3NhZ2UgZm9yICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgZ2hpIGNow7ogbOG6p24gY2h1eeG7g24gZ2lhbyBjaG8gJXMiCisKKyM6IHNlcXVlbmNlci5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgaG/DoG4gbmd1ecOqbiAlc+KApiAlcyIKKworIzogc2VxdWVuY2VyLmM6NjA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMOhcCBk4bulbmcgbWnhur9uZyB2w6EgJXPigKYgJXMiCisKKyM6IHNlcXVlbmNlci5jOjYzOQorbXNnaWQgImVtcHR5IGNvbW1pdCBzZXQgcGFzc2VkIgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvIHRy4buRbmcgcuG7l25nIMSR4bq3dCBsw6AgaOG7o3AgcXV5IGPDoWNoIgorCisjOiBzZXF1ZW5jZXIuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0ICVzOiBmYWlsZWQgdG8gcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImdpdCAlczogZ+G6t3AgbOG7l2kgxJHhu41jIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogc2VxdWVuY2VyLmM6NjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXM6IGfhurdwIGzhu5dpIGtoaSBsw6BtIHTGsMahaSBt4bubaSBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IHNlcXVlbmNlci5jOjcxMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgJXMgZHVyaW5nIGEgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyAlcyB0cm9uZyBraGkgJXMiCisKKyM6IHNlcXVlbmNlci5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgbGluZSAlZC4iCittc2dzdHIgIktow7RuZyBwaMOibiB0w61jaCDEkcaw4bujYyBkw7JuZyAlZC4iCisKKyM6IHNlcXVlbmNlci5jOjczOAorbXNnaWQgIk5vIGNvbW1pdHMgcGFyc2VkLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8gxJHGsOG7o2MgcGjDom4gdMOtY2guIgorCisjOiBzZXF1ZW5jZXIuYzo3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBt4bufICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgJXMuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu41jICVzLiIKKworIzogc2VxdWVuY2VyLmM6NzYxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudXNhYmxlIGluc3RydWN0aW9uIHNoZWV0OiAlcyIKK21zZ3N0ciAiQuG6o25nIGNo4buJIHRo4buLIGtow7RuZyB0aOG7gyBkw7luZyDEkcaw4bujYzogJXMiCisKKyM6IHNlcXVlbmNlci5jOjc5MQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGtleTogJXMiCittc2dzdHIgIktow7NhIGtow7RuZyDEkcO6bmc6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3OTQgYnVpbHRpbi9wdWxsLmM6NDcgYnVpbHRpbi9wdWxsLmM6NDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzIgorbXNnc3RyICJHacOhIHRy4buLIGtow7RuZyBo4bujcCBs4buHICVzOiAlcyIKKworIzogc2VxdWVuY2VyLmM6ODA0CisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAlcyIKK21zZ3N0ciAiQuG6o25nIHTDuXkgY2jhu41uIGThu4sgaMOsbmg6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICJjw7MgbeG7mXQgdGhhbyB0w6FjIOKAnGNoZXJyeS1waWNr4oCdIGhv4bq3YyDigJxyZXZlcnTigJ0gxJFhbmcgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiIKKworIzogc2VxdWVuY2VyLmM6ODI0Cittc2dpZCAidHJ5IFwiZ2l0IGNoZXJyeS1waWNrICgtLWNvbnRpbnVlIHwgLS1xdWl0IHwgLS1hYm9ydClcIiIKK21zZ3N0ciAiaMOjeSB0aOG7rSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyB04bqhbyB0aMawIG3hu6VjIHjhur9wIGTDo3kgJXMiCisKKyM6IHNlcXVlbmNlci5jOjg0NCBzZXF1ZW5jZXIuYzo5MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIgorbXNnc3RyICJM4buXaSBiYW8gYuG7jWMgJXMuIgorCisjOiBzZXF1ZW5jZXIuYzo4NjMgc2VxdWVuY2VyLmM6OTk2Cittc2dpZCAibm8gY2hlcnJ5LXBpY2sgb3IgcmV2ZXJ0IGluIHByb2dyZXNzIgorbXNnc3RyICJraMO0bmcgY2hlcnJ5LXBpY2sgaGF5IGhvw6BuIG5ndXnDqm4gdHJvbmcgdGnhur9uIHRyw6xuaCIKKworIzogc2VxdWVuY2VyLmM6ODY1Cittc2dpZCAiY2Fubm90IHJlc29sdmUgSEVBRCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIGdp4bqjaSBIRUFEIgorCisjOiBzZXF1ZW5jZXIuYzo4NjcKK21zZ2lkICJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGjhu6d5IGLhu48gdOG7qyBt4buZdCBuaMOhbmggbcOgIG7DsyBjw7JuIGNoxrBhIMSRxrDhu6NjIHThuqFvIHJhIgorCisjOiBzZXF1ZW5jZXIuYzo4ODcgYnVpbHRpbi9hcHBseS5jOjQyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gJXM6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyAlczogJXMiCisKKyM6IHNlcXVlbmNlci5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgJXM6ICVzIgorCisjOiBzZXF1ZW5jZXIuYzo4OTEKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICJn4bq3cCBr4bq/dCB0aMO6YyB04bqtcCB0aW4gxJHhu5l0IHh14bqldCIKKworIzogc2VxdWVuY2VyLmM6ODk3CisjLCBjLWZvcm1hdAorbXNnaWQgInN0b3JlZCBwcmUtY2hlcnJ5LXBpY2sgSEVBRCBmaWxlICclcycgaXMgY29ycnVwdCIKK21zZ3N0ciAidOG6rXAgdGluIEhFQUQg4oCccHJlLWNoZXJyeS1waWNr4oCdIMSRw6MgbMawdSDigJwlc+KAnSBi4buLIGjhu49uZyIKKworIzogc2VxdWVuY2VyLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu4tuaCBk4bqhbmcg4oCcJXPigJ0uIgorCisjOiBzZXF1ZW5jZXIuYzoxMDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBjYW4ndCBjaGVycnktcGljayBhICVzIgorbXNnc3RyICIlczoga2jDtG5nIHRo4buDIGNoZXJyeS1waWNrIG3hu5l0ICVzIgorCisjOiBzZXF1ZW5jZXIuYzoxMDY3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBiYWQgcmV2aXNpb24iCittc2dzdHIgIiVzOiDEkWnhu4NtIHjDqXQgZHV54buHdCBzYWkiCisKKyM6IHNlcXVlbmNlci5jOjExMDEKK21zZ2lkICJDYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIktow7RuZyB0aOG7gyBob8OgbiBuZ3V5w6puIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8ga2jhu59pIHThuqFvIgorCisjOiBzZXF1ZW5jZXIuYzoxMTAyCittc2dpZCAiQ2FuJ3QgY2hlcnJ5LXBpY2sgaW50byBlbXB0eSBoZWFkIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY2hlcnJ5LXBpY2sgdsOgbyBt4buZdCDEkeG6p3UgKGhlYWQpIHRy4buRbmcgcuG7l25nIgorCisjOiBzZXR1cC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyAlcyIKKworIzogc2hhMV9uYW1lLmM6NDUzCittc2dpZCAiIgorIkdpdCBub3JtYWxseSBuZXZlciBjcmVhdGVzIGEgcmVmIHRoYXQgZW5kcyB3aXRoIDQwIGhleCBjaGFyYWN0ZXJzXG4iCisiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorIm1heSBiZSBjcmVhdGVkIGJ5IG1pc3Rha2UuIEZvciBleGFtcGxlLFxuIgorIlxuIgorIiAgZ2l0IGNoZWNrb3V0IC1iICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIndoZXJlIFwiJGJyXCIgaXMgc29tZWhvdyBlbXB0eSBhbmQgYSA0MC1oZXggcmVmIGlzIGNyZWF0ZWQuIFBsZWFzZVxuIgorImV4YW1pbmUgdGhlc2UgcmVmcyBhbmQgbWF5YmUgZGVsZXRlIHRoZW0uIFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieVxuIgorInJ1bm5pbmcgXCJnaXQgY29uZmlnIGFkdmljZS5vYmplY3ROYW1lV2FybmluZyBmYWxzZVwiIgorbXNnc3RyICIiCisiR2l0IHRoxrDhu51uZyBraMO0bmcgYmFvIGdp4budIHThuqFvIHRoYW0gY2hp4bq/dSBtw6AgbsOzIGvhur90IHRow7pjIHbhu5tpIDQwIGvDvSB04buxIGhleFxuIgorImLhu59pIHbDrCBuw7Mgc+G6vSBi4buLIGLhu48gcXVhIGtoaSBi4bqhbiBjaOG7iSDEkeG7i25oIDQwLWhleC4gTmjhu69uZyB0aGFtIGNoaeG6v3UgbsOgeVxuIgorImPDsyBs4bq9IMSRxrDhu6NjIHThuqFvIHJhIGLhu59pIG3hu5l0IHNhaSBzw7N0IG7DoG8gxJHDsy4gVsOtIGThu6UsXG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSDigKYpXG4iCisiXG4iCisiduG7m2kgXCIkYnJcIiBraMO0bmcgaGnhu4N1IGzDvSBkbyB2w6wgc2FvIHRy4buRbmcgcuG7l25nIHbDoCBt4buZdCB0aGFtIGNoaeG6v3UgNDAtaGV4IMSRxrDhu6NjICIKKyJ04bqhbyByYS5cbiIKKyJYaW4gaMOjeSBraeG7g20gdHJhIG5o4buvbmcgdGhhbSBjaGnhur91IG7DoHkgdsOgIGPDsyB0aOG7gyB4w7NhIGNow7puZyDEkWkuIFThuq90IGzhu51pIG5o4bqvbiAiCisibsOgeVxuIgorImLhurFuZyBjw6FjaCBjaOG6oXkgbOG7h25oIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIKKworIzogc3VibW9kdWxlLmM6NjEgc3VibW9kdWxlLmM6OTUKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyB0aGF5IMSR4buVaSAuZ2l0bW9kdWxlcyBjaMawYSBow7JhIHRy4buZbiwgaMOjeSBnaeG6o2kgcXV54bq/dCB4dW5nIMSR4buZdCB0cuG7mW4gIgorInRyxrDhu5tjIgorCisjOiBzdWJtb2R1bGUuYzo2NSBzdWJtb2R1bGUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9JXMiCittc2dzdHIgIktow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBwaOG6p24gdHJvbmcgLmdpdG1vZHVsZXMgbsahaSBtw6AgxJHGsOG7nW5nX2ThuqtuPSVzIgorCisjOiBzdWJtb2R1bGUuYzo3MworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgdXBkYXRlIC5naXRtb2R1bGVzIGVudHJ5ICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IG3hu6VjIC5naXRtb2R1bGVzICVzIgorCisjOiBzdWJtb2R1bGUuYzoxMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSAuZ2l0bW9kdWxlcyBlbnRyeSBmb3IgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBn4buhIGLhu48gbeG7pWMgLmdpdG1vZHVsZXMgZMOgbmggY2hvICVzIgorCisjOiBzdWJtb2R1bGUuYzoxMTcKK21zZ2lkICJzdGFnaW5nIHVwZGF0ZWQgLmdpdG1vZHVsZXMgZmFpbGVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdOG7lSBjaOG7qWMgLmdpdG1vZHVsZXMgxJHDoyBj4bqtcCBuaOG6rXQiCisKKyM6IHN1Ym1vZHVsZS5jOjEwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBjb3JlLndvcmt0cmVlIGluICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhurd0IOKAnGNvcmUud29ya3RyZWXigJ0gdHJvbmcg4oCcJXPigJ0uIgorCisjOiB0cmFpbGVyLmM6NDkxIHRyYWlsZXIuYzo0OTUgdHJhaWxlci5jOjQ5OSB0cmFpbGVyLmM6NTUzIHRyYWlsZXIuYzo1NTcKKyM6IHRyYWlsZXIuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIKK21zZ3N0ciAia2jDtG5nIGhp4buDdSBnacOhIHRy4buLIOKAnCVz4oCdIGNobyBraMOzYSDigJwlc+KAnSIKKworIzogdHJhaWxlci5jOjU0MyB0cmFpbGVyLmM6NTQ4IGJ1aWx0aW4vcmVtb3RlLmM6MjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiBvbmUgJXMiCittc2dzdHIgIm5oaeG7gXUgaMahbiBt4buZdCAlcyIKKworIzogdHJhaWxlci5jOjU4MQorIywgYy1mb3JtYXQKK21zZ2lkICJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIgorbXNnc3RyICJ0aOG6uyB0aOG7q2EgdHLhu5FuZyBy4buXbmcgdHJvbmcgcGjhuqduIHRo4burYSDigJwlLipz4oCdIgorCisjOiB0cmFpbGVyLmM6NzAxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGlucHV0IGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIMSR4buNYyDEkcaw4bujYyB04bqtcCB0aW4gxJHhuqd1IHbDoG8g4oCcJXPigJ0iCisKKyM6IHRyYWlsZXIuYzo3MDQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBmcm9tIHN0ZGluIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu41jIHRoYW0gY2hp4bq/dSAlcyIKKworIzogdW5wYWNrLXRyZWVzLmM6MjAzCittc2dpZCAiQ2hlY2tpbmcgb3V0IGZpbGVzIgorbXNnc3RyICLEkGFuZyBs4bqleSByYSBjw6FjIHThuq1wIHRpbiIKKworIzogdXJsbWF0Y2guYzoxMjAKK21zZ2lkICJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIKK21zZ3N0ciAidMOqbiBsxrDhu6NjIMSR4buTIFVSTCBraMO0bmcgaOG7o3AgbOG7hywgaG/hurdjIHRoaeG6v3UgaOG6rXUgdOG7kSDigJw6Ly/igJ0iCisKKyM6IHVybG1hdGNoLmM6MTQ0IHVybG1hdGNoLmM6Mjk3IHVybG1hdGNoLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAidGhvw6F0IGNodeG7l2kgJVhYIGtow7RuZyBo4bujcCBs4buHIgorCisjOiB1cmxtYXRjaC5jOjE3MgorbXNnaWQgIm1pc3NpbmcgaG9zdCBhbmQgc2NoZW1lIGlzIG5vdCAnZmlsZTonIgorbXNnc3RyICJ0aGnhur91IG3DoXkgY2jhu6cgdsOgIGzGsOG7o2MgxJHhu5MgdGjDrCBraMO0bmcgcGjhuqNpIGzDoCBnaWFvIHRo4bupYyDigJxmaWxlOuKAnSIKKworIzogdXJsbWF0Y2guYzoxODkKK21zZ2lkICJhICdmaWxlOicgVVJMIG1heSBub3QgaGF2ZSBhIHBvcnQgbnVtYmVyIgorbXNnc3RyICJVUkwga2nhu4N1IOKAnGZpbGU64oCdIGtow7RuZyDEkcaw4bujYyBjaOG7qWEgY+G7lW5nIgorCisjOiB1cmxtYXRjaC5jOjE5OQorbXNnaWQgImludmFsaWQgY2hhcmFjdGVycyBpbiBob3N0IG5hbWUiCittc2dzdHIgImPDsyBjw6FjIGvDvSB04buxIGtow7RuZyBo4bujcCBs4buHIHRyb25nIHTDqm4gbcOheSIKKworIzogdXJsbWF0Y2guYzoyNDQgdXJsbWF0Y2guYzoyNTUKK21zZ2lkICJpbnZhbGlkIHBvcnQgbnVtYmVyIgorbXNnc3RyICJ0w6puIGPhu5VuZyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogdXJsbWF0Y2guYzozMjIKK21zZ2lkICJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50IgorbXNnc3RyICLEkW/huqFuIMSRxrDhu51uZyBk4bqrbiDigJwuLuKAnSBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogd3JhcHBlci5jOjIxOSB3cmFwcGVyLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIOKAnCVz4oCdIMSR4buDIMSR4buNYyB2w6AgZ2hpIgorCisjOiB3cmFwcGVyLmM6MjIxIHdyYXBwZXIuYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58g4oCcJXPigJ0gxJHhu4MgZ2hpIgorCisjOiB3cmFwcGVyLmM6MjIzIHdyYXBwZXIuYzozNjYgYnVpbHRpbi9hbS5jOjMzNyBidWlsdGluL2NvbW1pdC5jOjE2ODgKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDc2IGJ1aWx0aW4vcHVsbC5jOjM4MAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyDigJwlc+KAnSDEkeG7gyDEkeG7jWMiCisKKyM6IHdyYXBwZXIuYzo1NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRydXkgY+G6rXAg4oCcJXPigJ06ICVzIgorCisjOiB3cmFwcGVyLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRydXkgY+G6rXAg4oCcJXPigJ0iCisKKyM6IHdyYXBwZXIuYzo2MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiCittc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSBuZ8aw4budaSBkw7luZyBoaeG7h24gdOG6oWkgdHJvbmcgdOG6rXAgdGluIHBhc3N3ZDogJXMiCisKKyM6IHdyYXBwZXIuYzo2MTIKK21zZ2lkICJubyBzdWNoIHVzZXIiCittc2dzdHIgImtow7RuZyBjw7MgbmfGsOG7nWkgZMO5bmcgbmjGsCB24bqteSIKKworIzogd3JhcHBlci5jOjYyMAorbXNnaWQgInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuqV5IHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgaGnhu4duIGjDoG5oIgorCisjOiB3cmFwcGVyLmM6NjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyAlcyDEkeG7gyBnaGkiCisKKyM6IHdyYXBwZXIuYzo2NDIgYnVpbHRpbi9hbS5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdG8gJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdsOgbyAlcyIKKworIzogd3JhcHBlci5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkcOzbmcgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE0OQorbXNnaWQgIlVubWVyZ2VkIHBhdGhzOiIKK21zZ3N0ciAiTmjhu69uZyDEkcaw4budbmcgZOG6q24gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW46IgorCisjOiB3dC1zdGF0dXMuYzoxNzYgd3Qtc3RhdHVzLmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgcmVzZXQgJXMgPHThuq1wLXRpbj7igKZcIiDEkeG7gyBi4buPIHJhIGto4buPaSBi4buHIHBow7NuZykiCisKKyM6IHd0LXN0YXR1cy5jOjE3OCB3dC1zdGF0dXMuYzoyMDUKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IHJtIC0tY2FjaGVkIDx04bqtcC10aW4+4oCmXCIgxJHhu4MgYuG7jyByYSBraOG7j2kgYuG7hyBwaMOzbmcpIgorCisjOiB3dC1zdGF0dXMuYzoxODIKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IGFkZCA8dOG6rXAtdGluPuKAplwiIMSR4buDIMSRw6FuaCBk4bqldSBsw6AgY+G6p24gZ2nhuqNpIHF1eeG6v3QpIgorCisjOiB3dC1zdGF0dXMuYzoxODQgd3Qtc3RhdHVzLmM6MTg4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIgorbXNnc3RyICIiCisiICAoZMO5bmcgXCJnaXQgYWRkL3JtIDx04bqtcC10aW4+4oCmXCIgbmjGsCBsw6AgbeG7mXQgY8OhY2ggdGjDrWNoIGjhu6NwIMSR4buDIMSRw6FuaCBk4bqldSBsw6AgIgorImPhuqduIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90KSIKKworIzogd3Qtc3RhdHVzLmM6MTg2Cittc2dpZCAiICAodXNlIFwiZ2l0IHJtIDxmaWxlPi4uLlwiIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IHJtIDx04bqtcC10aW4+4oCmXCIgxJHhu4MgxJHDoW5oIGThuqV1IGzDoCBj4bqnbiBnaeG6o2kgcXV54bq/dCkiCisKKyM6IHd0LXN0YXR1cy5jOjE5NyB3dC1zdGF0dXMuYzo4ODAKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIk5o4buvbmcgdGhheSDEkeG7lWkgc+G6vSDEkcaw4bujYyBjaHV54buDbiBnaWFvOiIKKworIzogd3Qtc3RhdHVzLmM6MjE1IHd0LXN0YXR1cy5jOjg4OQorbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAiQ8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyDEkeG6t3QgbMOqbiBi4buHIHBow7NuZyDEkeG7gyBjaHV54buDbiBnaWFvOiIKKworIzogd3Qtc3RhdHVzLmM6MjE5Cittc2dpZCAiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IGFkZCA8dOG6rXAtdGluPuKAplwiIMSR4buDIGPhuq1wIG5o4bqtdCBuaOG7r25nIGfDrCBz4bq9IGNodXnhu4NuIGdpYW8pIgorCisjOiB3dC1zdGF0dXMuYzoyMjEKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIFwiZ2l0IGFkZC9ybSA8dOG6rXAtdGluPuKAplwiIMSR4buDIGPhuq1wIG5o4bqtdCBuaOG7r25nIGfDrCBz4bq9IMSRxrDhu6NjIGNodXnhu4NuIGdpYW8pIgorCisjOiB3dC1zdGF0dXMuYzoyMjIKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiIKKyIgIChkw7luZyBcImdpdCBjaGVja291dCAtLSA8dOG6rXAtdGluPuKAplwiIMSR4buDIGxv4bqhaSBi4buPIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgdGjGsCBt4bulYyAiCisibMOgbSB2aeG7h2MpIgorCisjOiB3dC1zdGF0dXMuYzoyMjQKK21zZ2lkICIgIChjb21taXQgb3IgZGlzY2FyZCB0aGUgdW50cmFja2VkIG9yIG1vZGlmaWVkIGNvbnRlbnQgaW4gc3VibW9kdWxlcykiCittc2dzdHIgIiIKKyIgIChjaHV54buDbiBnaWFvIGhv4bq3YyBsw6AgbG/huqFpIGLhu48gY8OhYyBu4buZaSBkdW5nIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSBoYXkgxJHDoyBz4butYSAiCisiY2jhu69hIHRyb25nIG3DtC3EkXVuLWNvbikiCisKKyM6IHd0LXN0YXR1cy5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIKK21zZ3N0ciAiIgorIiAgKGTDuW5nIFwiZ2l0ICVzIDx04bqtcC10aW4+4oCmXCIgxJHhu4MgdGjDqm0gdsOgbyBuaOG7r25nIGfDrCBj4bqnbiDEkcaw4bujYyBjaHV54buDbiBnaWFvKSIKKworIzogd3Qtc3RhdHVzLmM6MjUxCittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAiYuG7iyB4w7NhIGLhu59pIGPhuqMgaGFpOiIKKworIzogd3Qtc3RhdHVzLmM6MjUzCittc2dpZCAiYWRkZWQgYnkgdXM6IgorbXNnc3RyICLEkcaw4bujYyB0aMOqbSB2w6BvIGLhu59pIGNow7puZyB0YToiCisKKyM6IHd0LXN0YXR1cy5jOjI1NQorbXNnaWQgImRlbGV0ZWQgYnkgdGhlbToiCittc2dzdHIgImLhu4sgeMOzYSDEkWkgYuG7n2kgaOG7jToiCisKKyM6IHd0LXN0YXR1cy5jOjI1NworbXNnaWQgImFkZGVkIGJ5IHRoZW06IgorbXNnc3RyICLEkcaw4bujYyB0aMOqbSB2w6BvIGLhu59pIGjhu406IgorCisjOiB3dC1zdGF0dXMuYzoyNTkKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAiYuG7iyB4w7NhIGLhu59pIGNow7puZyB0YToiCisKKyM6IHd0LXN0YXR1cy5jOjI2MQorbXNnaWQgImJvdGggYWRkZWQ6IgorbXNnc3RyICLEkcaw4bujYyB0aMOqbSB2w6BvIGLhu59pIGPhuqMgaGFpOiIKKworIzogd3Qtc3RhdHVzLmM6MjYzCittc2dpZCAiYm90aCBtb2RpZmllZDoiCittc2dzdHIgImLhu4sgc+G7rWEgYuG7n2kgY+G6oyBoYWk6IgorCisjOiB3dC1zdGF0dXMuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4IgorbXNnc3RyICJs4buXaToga2jDtG5nIHRo4buDIHRp4bq/cCBuaOG6rW4gdHLhuqFuZyB0aMOhaSBjaMawYSBow7JhIHRy4buZbiAleCIKKworIzogd3Qtc3RhdHVzLmM6MjczCittc2dpZCAibmV3IGZpbGU6IgorbXNnc3RyICJ04bqtcCB0aW4gbeG7m2k6IgorCisjOiB3dC1zdGF0dXMuYzoyNzUKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICLEkcOjIGNow6lwOiIKKworIzogd3Qtc3RhdHVzLmM6Mjc3Cittc2dpZCAiZGVsZXRlZDoiCittc2dzdHIgIsSRw6MgeMOzYToiCisKKyM6IHd0LXN0YXR1cy5jOjI3OQorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAixJHDoyBz4butYToiCisKKyM6IHd0LXN0YXR1cy5jOjI4MQorbXNnaWQgInJlbmFtZWQ6IgorbXNnc3RyICLEkcOjIMSR4buVaSB0w6puOiIKKworIzogd3Qtc3RhdHVzLmM6MjgzCittc2dpZCAidHlwZWNoYW5nZToiCittc2dzdHIgIsSR4buVaS1raeG7g3U6IgorCisjOiB3dC1zdGF0dXMuYzoyODUKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAia2jDtG5nIGhp4buDdToiCisKKyM6IHd0LXN0YXR1cy5jOjI4NworbXNnaWQgInVubWVyZ2VkOiIKK21zZ3N0ciAiY2jGsGEgaMOyYSB0cuG7mW46IgorCisjOiB3dC1zdGF0dXMuYzozNjkKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvIG3hu5tpLCAiCisKKyM6IHd0LXN0YXR1cy5jOjM3MQorbXNnaWQgIm1vZGlmaWVkIGNvbnRlbnQsICIKK21zZ3N0ciAibuG7mWkgZHVuZyBi4buLIHPhu61hIMSR4buVaSwgIgorCisjOiB3dC1zdGF0dXMuYzozNzMKK21zZ2lkICJ1bnRyYWNrZWQgY29udGVudCwgIgorbXNnc3RyICJu4buZaSBkdW5nIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSwgIgorCisjOiB3dC1zdGF0dXMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgImzhu5dpOiBraMO0bmcgdGjhu4MgdGnhur9wIG5o4bqtbiB0cuG6oW5nIHRow6FpIGzhu4duaCBkaWZmICVjIgorCisjOiB3dC1zdGF0dXMuYzo3NTQKK21zZ2lkICJTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOiIKK21zZ3N0ciAiTmjhu69uZyBtw7QtxJF1bi1jb24gxJHDoyBi4buLIHRoYXkgxJHhu5VpIG5oxrBuZyBjaMawYSDEkcaw4bujYyBj4bqtcCBuaOG6rXQ6IgorCisjOiB3dC1zdGF0dXMuYzo3NTYKK21zZ2lkICJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IgorbXNnc3RyICJOaOG7r25nIG3DtC3EkXVuLWNvbiB0aGF5IMSR4buVaSDEkcOjIMSRxrDhu6NjIGNodXnhu4NuIGdpYW86IgorCisjOiB3dC1zdGF0dXMuYzo4MzcKK21zZ2lkICIiCisiRG8gbm90IHRvdWNoIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgd2lsbCBiZSByZW1vdmVkLiIKK21zZ3N0ciAiIgorIktow7RuZyDEkeG7mW5nIMSR4bq/biDEkcaw4budbmcg4bufIHRyw6puLlxuIgorIk3hu41pIHRo4bupIHBow61hIGTGsOG7m2kgc+G6vSDEkcaw4bujYyB4w7NhIGLhu48uIgorCisjOiB3dC1zdGF0dXMuYzo5NDgKK21zZ2lkICJZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4iCittc2dzdHIgIkLhuqFuIGPDsyBuaOG7r25nIMSRxrDhu51uZyBk4bqrbiBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbi4iCisKKyM6IHd0LXN0YXR1cy5jOjk1MQorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiCittc2dzdHIgIiAgKHPhu61hIGPDoWMgeHVuZyDEkeG7mXQgcuG7k2kgY2jhuqF5IFwiZ2l0IGNvbW1pdFwiKSIKKworIzogd3Qtc3RhdHVzLmM6OTU0Cittc2dpZCAiQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLiIKK21zZ3N0ciAiVOG6pXQgY+G6oyBjw6FjIHh1bmcgxJHhu5l0IMSRw6MgxJHGsOG7o2MgZ2nhuqNpIHF1eeG6v3QgbmjGsG5nIGLhuqFuIHbhuqtuIMSRYW5nIGjDsmEgdHLhu5luLiIKKworIzogd3Qtc3RhdHVzLmM6OTU3Cittc2dpZCAiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgY29tbWl0XCIgxJHhu4MgaG/DoG4gdOG6pXQgdmnhu4djIGjDsmEgdHLhu5luKSIKKworIzogd3Qtc3RhdHVzLmM6OTY3Cittc2dpZCAiWW91IGFyZSBpbiB0aGUgbWlkZGxlIG9mIGFuIGFtIHNlc3Npb24uIgorbXNnc3RyICJC4bqhbiDEkWFuZyDhu58gZ2nhu69hIGPhu6dhIG3hu5l0IHBoacOqbiDigJxhbeKAnS4iCisKKyM6IHd0LXN0YXR1cy5jOjk3MAorbXNnaWQgIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIKK21zZ3N0ciAiTWnhur9uZyB2w6EgaGnhu4duIHThuqFpIGLhu4sgdHLhu5FuZyBy4buXbmcuIgorCisjOiB3dC1zdGF0dXMuYzo5NzQKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCBhbSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIChz4butYSBjw6FjIHh1bmcgxJHhu5l0IHbDoCBzYXUgxJHDsyBjaOG6oXkgbOG7h25oIFwiZ2l0IGFtIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjk3NgorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBhbSAtLXNraXBcIiDEkeG7gyBi4buPIHF1YSBtaeG6v25nIHbDoSBuw6B5KSIKKworIzogd3Qtc3RhdHVzLmM6OTc4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBhbSAtLWFib3J0XCIgxJHhu4MgcGjhu6VjIGjhu5NpIGzhuqFpIG5ow6FuaCBuZ3V5w6puIHRo4buneSkiCisKKyM6IHd0LXN0YXR1cy5jOjExMDUKK21zZ2lkICJObyBjb21tYW5kcyBkb25lLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buxYyBoaeG7h24gbOG7h25oIG7DoG8uIgorCisjOiB3dC1zdGF0dXMuYzoxMTA4CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIKK21zZ2lkX3BsdXJhbCAiTGFzdCBjb21tYW5kcyBkb25lICglZCBjb21tYW5kcyBkb25lKToiCittc2dzdHJbMF0gIkzhu4duaCB0aOG7sWMgaGnhu4duIGN14buRaSAoJWQgbOG7h25oIMSRxrDhu6NjIHRo4buxYyB0aGkpOiIKKworIzogd3Qtc3RhdHVzLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICAoeGVtIHRow6ptIHRyb25nICVzKSIKKworIzogd3Qtc3RhdHVzLmM6MTEyNAorbXNnaWQgIk5vIGNvbW1hbmRzIHJlbWFpbmluZy4iCittc2dzdHIgIktow7RuZyBjw7MgbOG7h25oIG7DoG8gY8OybiBs4bqhaS4iCisKKyM6IHd0LXN0YXR1cy5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IgorbXNnaWRfcGx1cmFsICJOZXh0IGNvbW1hbmRzIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZHMpOiIKK21zZ3N0clswXSAiTOG7h25oIGPhuqduIGzDoG0ga+G6vyB0aeG6v3AgKCVkIGzhu4duaCBjw7JuIGzhuqFpKToiCisKKyM6IHd0LXN0YXR1cy5jOjExMzUKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tZWRpdC10b2RvXCIgdG8gdmlldyBhbmQgZWRpdCkiCittc2dzdHIgIiAgKGTDuW5nIGzhu4duaCBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiDEkeG7gyB4ZW0gdsOgIHPhu61hKSIKKworIzogd3Qtc3RhdHVzLmM6MTE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiQuG6oW4gaGnhu4duIG5heSDEkWFuZyB0aOG7sWMgaGnhu4duIHZp4buHYyDigJxyZWJhc2XigJ0gbmjDoW5oIOKAnCVz4oCdIHRyw6puIOKAnCVz4oCdLiIKKworIzogd3Qtc3RhdHVzLmM6MTE1MworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nLiIKK21zZ3N0ciAiQuG6oW4gaGnhu4duIG5heSDEkWFuZyB0aOG7sWMgaGnhu4duIHZp4buHYyDigJxyZWJhc2XigJ0gKOKAnGPhuqNpIHThu5XigJ0pLiIKKworIzogd3Qtc3RhdHVzLmM6MTE2NworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAoc+G7rWEgY8OhYyB4dW5nIMSR4buZdCB2w6Agc2F1IMSRw7MgY2jhuqF5IGzhu4duaCDigJxj4bqjaSB04buV4oCdIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTY5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIChkw7luZyBs4buHbmgg4oCcY+G6o2kgdOG7leKAnSBcImdpdCByZWJhc2UgLS1za2lwXCIgxJHhu4MgYuG7jyBxdWEgbOG6p24gdsOhIG7DoHkpIgorCisjOiB3dC1zdGF0dXMuYzoxMTcxCittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIgdG8gY2hlY2sgb3V0IHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIiCisiICAoZMO5bmcgbOG7h25oIOKAnGPhuqNpIHThu5XigJ0gXCJnaXQgcmViYXNlIC0tYWJvcnRcIiDEkeG7gyBjaGVjay1vdXQgbmjDoW5oIG5ndXnDqm4gdGjhu6d5KSIKKworIzogd3Qtc3RhdHVzLmM6MTE3NworbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKGtoaSB04bqldCBj4bqjIGPDoWMgeHVuZyDEkeG7mXQgxJHDoyBz4butYSB4b25nOiBjaOG6oXkgbOG7h25oIOKAnGPhuqNpIHThu5XigJ0gXCJnaXQgcmViYXNlIC0tIgorImNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIiIKKyJC4bqhbiBoaeG7h24gbmF5IMSRYW5nIHRo4buxYyBoaeG7h24gdmnhu4djIGNoaWEgdMOhY2ggbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyB0cm9uZyBraGkgIgorIsSRYW5nIOKAnHJlYmFzZeKAnSBuaMOhbmgg4oCcJXPigJ0gdHLDqm4g4oCcJXPigJ0uIgorCisjOiB3dC1zdGF0dXMuYzoxMTg2Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIiIKKyJC4bqhbiBoaeG7h24gdOG6oWkgxJFhbmcgY+G6r3QgxJHDtGkgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyB0cm9uZyBraGkgxJFhbmcgdGjhu7FjIGhp4buHbiB2aeG7h2MgIgorInJlYmFzZS4iCisKKyM6IHd0LXN0YXR1cy5jOjExODkKK21zZ2lkICIgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiIgorIiAgKE3hu5l0IGtoaSB0aMawIG3hu6VjIGzDoG0gdmnhu4djIGPhu6dhIGLhuqFuIMSRw6MgZ+G7jW4gZ8OgbmcsIGNo4bqheSBs4buHbmgg4oCcY+G6o2kgdOG7leKAnSBcImdpdCAiCisicmViYXNlIC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjExOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAiIgorIkLhuqFuIGhp4buHbiBuYXkgxJFhbmcgdGjhu7FjIGhp4buHbiB2aeG7h2Mgc+G7rWEgY2jhu69hIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gdHJvbmcga2hpIMSRYW5nICIKKyJyZWJhc2UgbmjDoW5oIOKAnCVz4oCdIHRyw6puIOKAnCVz4oCdLiIKKworIzogd3Qtc3RhdHVzLmM6MTE5OAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgZHVyaW5nIGEgcmViYXNlLiIKK21zZ3N0ciAiQuG6oW4gaGnhu4duIMSRYW5nIHPhu61hIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gdHJvbmcga2hpIGLhuqFuIHRo4buxYyBoaeG7h24gcmViYXNlLiIKKworIzogd3Qtc3RhdHVzLmM6MTIwMQorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgxJHhu4Mg4oCcdHUgYuG7leKAnSBs4bqnbiBjaHV54buDbiBnaWFvIGhp4buHbiB04bqhaSkiCisKKyM6IHd0LXN0YXR1cy5jOjEyMDMKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiIKKyIgIChjaOG6oXkgbOG7h25oIOKAnGPhuqNpIHThu5XigJ0gXCJnaXQgcmViYXNlIC0tY29udGludWVcIiBt4buZdCBraGkgYuG6oW4gY+G6o20gdGjhuqV5IGjDoGkgIgorImzDsm5nIHbhu4Egbmjhu69uZyB0aGF5IMSR4buVaSBj4bunYSBtw6xuaCkiCisKKyM6IHd0LXN0YXR1cy5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAiQuG6oW4gaGnhu4duIG5heSDEkWFuZyB0aOG7sWMgaGnhu4duIHZp4buHYyBjaGVycnktcGljayBs4bqnbiBjaHV54buDbiBnaWFvICVzLiIKKworIzogd3Qtc3RhdHVzLmM6MTIxOAorbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIiCisiICAoc+G7rWEgY8OhYyB4dW5nIMSR4buZdCB2w6Agc2F1IMSRw7MgY2jhuqF5IGzhu4duaCBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIpIgorCisjOiB3dC1zdGF0dXMuYzoxMjIxCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChraGkgdOG6pXQgY+G6oyBjw6FjIHh1bmcgxJHhu5l0IMSRw6Mgc+G7rWEgeG9uZzogY2jhuqF5IGzhu4duaCBcImdpdCBjaGVycnktcGljayAtLSIKKyJjb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTIyMworbXNnaWQgIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIgorbXNnc3RyICIgIChkw7luZyBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgxJHhu4MgaOG7p3kgYuG7jyB0aGFvIHTDoWMgY2hlcnJ5LXBpY2spIgorCisjOiB3dC1zdGF0dXMuYzoxMjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJldmVydGluZyBjb21taXQgJXMuIgorbXNnc3RyICJC4bqhbiBoaeG7h24gbmF5IMSRYW5nIHRo4buxYyBoaeG7h24gdGhhbyB0w6FjIGhvw6BuIG5ndXnDqm4gbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnS4iCisKKyM6IHd0LXN0YXR1cy5jOjEyMzcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiAgKHPhu61hIGPDoWMgeHVuZyDEkeG7mXQgdsOgIHNhdSDEkcOzIGNo4bqheSBs4buHbmggXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCisKKyM6IHd0LXN0YXR1cy5jOjEyNDAKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiCittc2dzdHIgIiIKKyIgIChraGkgdOG6pXQgY+G6oyBjw6FjIHh1bmcgxJHhu5l0IMSRw6Mgc+G7rWEgeG9uZzogY2jhuqF5IGzhu4duaCBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKKworIzogd3Qtc3RhdHVzLmM6MTI0MgorbXNnaWQgIiAgKHVzZSBcImdpdCByZXZlcnQgLS1hYm9ydFwiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikiCittc2dzdHIgIiAgKGTDuW5nIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgxJHhu4MgaOG7p3kgYuG7jyB0aGFvIHTDoWMgaG/DoG4gbmd1ecOqbikiCisKKyM6IHd0LXN0YXR1cy5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgYmlzZWN0aW5nLCBzdGFydGVkIGZyb20gYnJhbmNoICclcycuIgorbXNnc3RyICIiCisiQuG6oW4gaGnhu4duIG5heSDEkWFuZyB0aOG7sWMgaGnhu4duIHRoYW8gdMOhYyBkaSBjaHV54buDbiBu4butYSBixrDhu5tjIChiaXNlY3QpLCBi4bqvdCDEkeG6p3UgdOG7qyAiCisibmjDoW5oIOKAnCVz4oCdLiIKKworIzogd3Qtc3RhdHVzLmM6MTI1NworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIkLhuqFuIGhp4buHbiB04bqhaSDEkWFuZyB0aOG7sWMgaGnhu4duIHZp4buHYyBiaXNlY3QgKGRpIGNodXnhu4NuIG7hu61hIGLGsOG7m2MpLiIKKworIzogd3Qtc3RhdHVzLmM6MTI2MAorbXNnaWQgIiAgKHVzZSBcImdpdCBiaXNlY3QgcmVzZXRcIiB0byBnZXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYnJhbmNoKSIKK21zZ3N0ciAiICAoZMO5bmcgXCJnaXQgYmlzZWN0IHJlc2V0XCIgxJHhu4MgcXVheSB0cuG7nyBs4bqhaSBuaMOhbmggbmd1ecOqbiB0aOG7p3kpIgorCisjOiB3dC1zdGF0dXMuYzoxNDM3Cittc2dpZCAiT24gYnJhbmNoICIKK21zZ3N0ciAiVHLDqm4gbmjDoW5oICIKKworIzogd3Qtc3RhdHVzLmM6MTQ0NQorbXNnaWQgImludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgInJlYmFzZSDhu58gY2jhur8gxJHhu5kgdMawxqFuZyB0w6FjIMSRYW5nIMSRxrDhu6NjIHRo4buxYyBoaeG7h247IGzDqm4gdHLDqm4gIgorCisjOiB3dC1zdGF0dXMuYzoxNDQ3Cittc2dpZCAicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAicmViYXNlIMSRYW5nIMSRxrDhu6NjIHRo4buxYyBoaeG7h246IGzDqm4gdHLDqm4gIgorCisjOiB3dC1zdGF0dXMuYzoxNDUyCittc2dpZCAiSEVBRCBkZXRhY2hlZCBhdCAiCittc2dzdHIgIkhFQUQgxJHGsOG7o2MgdMOhY2ggcuG7nWkgdOG6oWkgIgorCisjOiB3dC1zdGF0dXMuYzoxNDU0Cittc2dpZCAiSEVBRCBkZXRhY2hlZCBmcm9tICIKK21zZ3N0ciAiSEVBRCDEkcaw4bujYyB0w6FjaCBy4budaSB04burICIKKworIzogd3Qtc3RhdHVzLmM6MTQ1NworbXNnaWQgIk5vdCBjdXJyZW50bHkgb24gYW55IGJyYW5jaC4iCittc2dzdHIgIkhp4buHbiB04bqhaSBjaOG6s25nIOG7nyBuaMOhbmggbsOgbyBj4bqjLiIKKworIzogd3Qtc3RhdHVzLmM6MTQ3NAorbXNnaWQgIkluaXRpYWwgY29tbWl0IgorbXNnc3RyICJM4bqnbiBjaHV54buDbiBnaWFvIGto4bufaSB04bqhbyIKKworIzogd3Qtc3RhdHVzLmM6MTQ4OAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAiTmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpIgorCisjOiB3dC1zdGF0dXMuYzoxNDkwCittc2dpZCAiSWdub3JlZCBmaWxlcyIKK21zZ3N0ciAiTmjhu69uZyB04bqtcCB0aW4gYuG7iyBs4budIMSRaSIKKworIzogd3Qtc3RhdHVzLmM6MTQ5NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorIm1heSBzcGVlZCBpdCB1cCwgYnV0IHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgbm90IHRvIGZvcmdldCB0byBhZGRcbiIKKyJuZXcgZmlsZXMgeW91cnNlbGYgKHNlZSAnZ2l0IGhlbHAgc3RhdHVzJykuIgorbXNnc3RyICIiCisiQ+G6p24gJS4yZiBnacOieSDEkeG7gyBsaeG7h3Qga8OqIHThuqV0IGPhuqMgY8OhYyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgdGhlbyBkw7VpLiDigJxzdGF0dXMgLSIKKyJ1bm/igJ1cbiIKKyJjw7MgbOG6vSBsw6BtIG7DsyBuaGFuaCBoxqFuLCBuaMawbmcgYuG6oW4gcGjhuqNpIGPhuqluIHRo4bqtbiDEkeG7q25nIHF1w6puIG3DrG5oIHBo4bqjaVxuIgorInThu7EgdGjDqm0gY8OhYyB04bqtcCB0aW4gbeG7m2kgKHhlbSDigJxnaXQgaGVscCBzdGF0dXPigJ0uLiIKKworIzogd3Qtc3RhdHVzLmM6MTUwMAorIywgYy1mb3JtYXQKK21zZ2lkICJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIgorbXNnc3RyICJOaOG7r25nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkga2jDtG5nIMSRxrDhu6NjIGxp4buHdCBrw6ogcmEgJXMiCisKKyM6IHd0LXN0YXR1cy5jOjE1MDIKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICIgKGTDuW5nIHTDuXkgY2jhu41uIC11IMSR4buDIGhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkpIgorCisjOiB3dC1zdGF0dXMuYzoxNTA4Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIgorCisjOiB3dC1zdGF0dXMuYzoxNTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICIiCisia2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIMSRxrDhu6NjIHRow6ptIHbDoG8gxJHhu4MgY2h1eeG7g24gZ2lhbyAoZMO5bmcgXCJnaXQgYWRkXCIgdsOgL2hv4bq3YyAiCisiXCJnaXQgY29tbWl0IC1hXCIpXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXRcbiIKK21zZ3N0ciAia2jDtG5nIGPDsyB0aGF5IMSR4buVaSBuw6BvIMSRxrDhu6NjIHRow6ptIHbDoG8gxJHhu4MgY2h1eeG7g24gZ2lhb1xuIgorCisjOiB3dC1zdGF0dXMuYzoxNTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIiIKKyJraMO0bmcgY8OzIGfDrCDEkcaw4bujYyB0aMOqbSB2w6BvIGzhuqduIGNodXnhu4NuIGdpYW8gbmjGsG5nIGPDsyBuaOG7r25nIHThuq1wIHRpbiBjaMawYSDEkcaw4bujYyAiCisidGhlbyBkw7VpIGhp4buHbiBkaeG7h24gKGTDuW5nIFwiZ2l0IGFkZFwiIMSR4buDIMSRxrBhIHbDoG8gdGhlbyBkw7VpKVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTIyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIgorbXNnc3RyICIiCisia2jDtG5nIGPDsyBnw6wgxJHGsOG7o2MgdGjDqm0gdsOgbyBs4bqnbiBjaHV54buDbiBnaWFvIG5oxrBuZyBjw7Mgbmjhu69uZyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgIgorInRoZW8gZMO1aSBoaeG7h24gZGnhu4duXG4iCisKKyM6IHd0LXN0YXR1cy5jOjE1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzIGFuZCB1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iCittc2dzdHIgIiIKKyJraMO0bmcgY8OzIGfDrCDEkeG7gyBjaHV54buDbiBnaWFvICh04bqhby9zYW8tY2jDqXAgY8OhYyB04bqtcCB0aW4gdsOgIGTDuW5nIFwiZ2l0IGFkZFwiIMSR4buDICIKKyLEkcawYSB2w6BvIHRoZW8gZMO1aSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUyOCB3dC1zdGF0dXMuYzoxNTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgImtow7RuZyBjw7MgZ8OsIMSR4buDIGNodXnhu4NuIGdpYW9cbiIKKworIzogd3Qtc3RhdHVzLmM6MTUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIgorbXNnc3RyICIiCisia2jDtG5nIGPDsyBnw6wgxJHhu4MgY2h1eeG7g24gZ2lhbyAoZMO5bmcgLXUgeGVtIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyBkaXJlY3RvcnkgY2xlYW5cbiIKK21zZ3N0ciAia2jDtG5nIGPDsyBnw6wgxJHhu4MgY2h1eeG7g24gZ2lhbywgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBz4bqhY2ggc+G6vVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjQ0Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRCAoa2jDtG5nIG5ow6FuaCkiCisKKyM6IHd0LXN0YXR1cy5jOjE2NTAKK21zZ2lkICJJbml0aWFsIGNvbW1pdCBvbiAiCittc2dzdHIgIkzhuqduIGNodXnhu4NuIGdpYW8ga2jhu59pIHThuqFvIHRyw6puICIKKworIzogd3Qtc3RhdHVzLmM6MTY3NworbXNnaWQgImdvbmUiCittc2dzdHIgIsSRw6MgcmEgxJFpIgorCisjOiB3dC1zdGF0dXMuYzoxNjc5IHd0LXN0YXR1cy5jOjE2ODcKK21zZ2lkICJiZWhpbmQgIgorbXNnc3RyICLEkeG6sW5nIHNhdSAiCisKKyM6IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguYzo1NSBidWlsdGluL2Nsb25lLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGLhu48gbGnDqm4ga+G6v3QgKHVubGluaykg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjIKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPGPDoWMtdMO5eS1jaOG7jW4+XSBbLS1dICA8cGF0aHNwZWM+4oCmIgorCisjOiBidWlsdGluL2FkZC5jOjY1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuZXhwZWN0ZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgInRy4bqhbmcgdGjDoWkgbOG7h25oIGRpZmYga2jDtG5nIG5oxrAgbW9uZyDEkeG7o2kgJWMiCisKKyM6IGJ1aWx0aW4vYWRkLmM6NzAgYnVpbHRpbi9jb21taXQuYzoyNzcKK21zZ2lkICJ1cGRhdGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgIkPhuq1wIG5o4bqtdCB04bqtcCB0aW4gZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAiZ+G7oSBi4buPIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTM0Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZWZyZXNoaW5nIHRoZSBpbmRleDoiCittc2dzdHIgIiIKKyLEkMawYSByYSBraOG7j2kgYuG7hyBwaMOzbmcgY8OhYyB0aGF5IMSR4buVaSBzYXUga2hpIGzDoG0gdMawxqFpIG3hu5tpIGzhuqFpIGLhuqNuZyBt4bulYyBs4bulYzoiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MTk0IGJ1aWx0aW4vcmV2LXBhcnNlLmM6Nzk5Cittc2dpZCAiQ291bGQgbm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHhu41jIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9hZGQuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZy4iCittc2dzdHIgIktow7RuZyB0aOG7gyBt4bufIOKAnCVz4oCdIMSR4buDIGdoaS4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjA5Cittc2dpZCAiQ291bGQgbm90IHdyaXRlIHBhdGNoIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIHJhIG1p4bq/bmcgdsOhIgorCisjOiBidWlsdGluL2FkZC5jOjIxMgorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgc+G7rWEgbWnhur9uZyB2w6EiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHbhu4Eg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjE3Cittc2dpZCAiRW1wdHkgcGF0Y2guIEFib3J0ZWQuIgorbXNnc3RyICJNaeG6v25nIHbDoSB0cuG7kW5nIHLhu5duZy4gTsOqbiBi4buPIHF1YS4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBseSAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4Mgw6FwIGThu6VuZyBtaeG6v25nIHbDoSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9hZGQuYzoyMzIKK21zZ2lkICJUaGUgZm9sbG93aW5nIHBhdGhzIGFyZSBpZ25vcmVkIGJ5IG9uZSBvZiB5b3VyIC5naXRpZ25vcmUgZmlsZXM6XG4iCittc2dzdHIgIiIKKyJDw6FjIMSRxrDhu51uZyBk4bqrbiB0aGVvIHNhdSDEkcOieSBz4bq9IGLhu4sgbOG7nSDEkWkgYuG7n2kgbeG7mXQgdHJvbmcgY8OhYyB04bqtcCB0aW4gLmdpdGlnbm9yZSAiCisiY+G7p2EgYuG6oW46XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjQ5IGJ1aWx0aW4vY2xlYW4uYzo4OTYgYnVpbHRpbi9mZXRjaC5jOjEwOCBidWlsdGluL212LmM6MTEwCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU1IGJ1aWx0aW4vcHVsbC5jOjE4MiBidWlsdGluL3B1c2guYzo1NDUKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMzOSBidWlsdGluL3JtLmM6MjY4IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYyCittc2dpZCAiZHJ5IHJ1biIKK21zZ3N0ciAiY2jhuqF5IHRo4butIgorCisjOiBidWlsdGluL2FkZC5jOjI1MCBidWlsdGluL2FwcGx5LmM6NDU4MCBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE5CisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjEgYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6NjMgYnVpbHRpbi9mc2NrLmM6NjM2CisjOiBidWlsdGluL2xvZy5jOjE2NDEgYnVpbHRpbi9tdi5jOjEwOSBidWlsdGluL3JlYWQtdHJlZS5jOjExNAorbXNnaWQgImJlIHZlcmJvc2UiCittc2dzdHIgImNoaSB0aeG6v3QiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUyCittc2dpZCAiaW50ZXJhY3RpdmUgcGlja2luZyIKK21zZ3N0ciAic+G7rWEgYuG6sW5nIGPDoWNoIHTGsMahbmcgdMOhYyIKKworIzogYnVpbHRpbi9hZGQuYzoyNTMgYnVpbHRpbi9jaGVja291dC5jOjExNTIgYnVpbHRpbi9yZXNldC5jOjI4NgorbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICJjaOG7jW4g4oCcaHVua3PigJ0gdGhlbyBraeG7g3UgdMawxqFuZyB0w6FjIgorCisjOiBidWlsdGluL2FkZC5jOjI1NAorbXNnaWQgImVkaXQgY3VycmVudCBkaWZmIGFuZCBhcHBseSIKK21zZ3N0ciAic+G7rWEgZGlmZiBoaeG7h24gbmF5IHbDoCDDoXAgZOG7pW5nIG7DsyIKKworIzogYnVpbHRpbi9hZGQuYzoyNTUKK21zZ2lkICJhbGxvdyBhZGRpbmcgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMiCittc2dzdHIgImNobyBwaMOpcCB0aMOqbSBjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIGtow6FjIgorCisjOiBidWlsdGluL2FkZC5jOjI1NgorbXNnaWQgInVwZGF0ZSB0cmFja2VkIGZpbGVzIgorbXNnc3RyICJj4bqtcCBuaOG6rXQgY8OhYyB04bqtcCB0aW4gxJHGsOG7o2MgdGhlbyBkw7VpIgorCisjOiBidWlsdGluL2FkZC5jOjI1NworbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgdGhlIHBhdGggd2lsbCBiZSBhZGRlZCBsYXRlciIKK21zZ3N0ciAiY2jhu4kgZ2hpIGzhuqFpIHPhu7Egdmnhu4djIG3DoCDEkcaw4budbmcgZOG6q24gc+G6vSDEkcaw4bujYyB0aMOqbSB2w6BvIHNhdSIKKworIzogYnVpbHRpbi9hZGQuYzoyNTgKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIiIKKyJ0aMOqbSBjw6FjIHRoYXkgxJHhu5VpIHThu6sgdOG6pXQgY+G6oyBjw6FjIHThuq1wIHRpbiBjw7MgY8WpbmcgbmjGsCBraMO0bmcgxJHGsOG7o2MgdGhlbyBkw7VpIGThuqV1ICIKKyJ24bq/dCIKKworIzogYnVpbHRpbi9hZGQuYzoyNjEKK21zZ2lkICJpZ25vcmUgcGF0aHMgcmVtb3ZlZCBpbiB0aGUgd29ya2luZyB0cmVlIChzYW1lIGFzIC0tbm8tYWxsKSIKK21zZ3N0ciAiIgorImzhu50gxJFpIGPDoWMgxJHGsOG7nW5nIGThuqtuIGLhu4sgZ+G7oSBi4buPIHRyb25nIGPDonkgdGjGsCBt4bulYyBsw6BtIHZp4buHYyAoZ2nhu5FuZyB24bubaSAtLW5vLWFsbCkiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjYzCittc2dpZCAiZG9uJ3QgYWRkLCBvbmx5IHJlZnJlc2ggdGhlIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjDqm0sIGNo4buJIGzDoG0gdMawxqFpIG3hu5tpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9hZGQuYzoyNjQKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICJjaGllIGLhu48gcXVhIG5o4buvbmcgdOG6rXAgdGluIG3DoCBuw7Mga2jDtG5nIHRo4buDIMSRxrDhu6NjIHRow6ptIHbDoG8gYuG7n2kgdsOsIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2FkZC5jOjI2NQorbXNnaWQgImNoZWNrIGlmIC0gZXZlbiBtaXNzaW5nIC0gZmlsZXMgYXJlIGlnbm9yZWQgaW4gZHJ5IHJ1biIKK21zZ3N0ciAiIgorImtp4buDbSB0cmEgeGVtIC0gdGjhuq1tIGNow60gdGhp4bq/dSAtIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIHRyb25nIHF1w6EgdHLDrG5oIGNo4bqheSB0aOG7rSIKKworIzogYnVpbHRpbi9hZGQuYzoyODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgdGhlbS5cbiIKK21zZ3N0ciAiU+G7rSBk4bulbmcgdMO5eSBjaOG7jW4gLWYgbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgbXXhu5FuIHRow6ptIGNow7puZyB2w6BvLlxuIgorCisjOiBidWlsdGluL2FkZC5jOjI5NAorbXNnaWQgImFkZGluZyBmaWxlcyBmYWlsZWQiCittc2dzdHIgInRow6ptIHThuq1wIHRpbiBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9hZGQuYzozMzAKK21zZ2lkICItQSBhbmQgLXUgYXJlIG11dHVhbGx5IGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLUEgdsOgIC11IHh1bmcga2jhuq9jIG5oYXUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM3Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gLS1pZ25vcmUtbWlzc2luZyBjaOG7iSBjw7MgdGjhu4MgxJHGsOG7o2MgZMO5bmcgY8O5bmcgduG7m2kgLS1kcnktcnVuIgorCisjOiBidWlsdGluL2FkZC5jOjM1OAorIywgYy1mb3JtYXQKK21zZ2lkICJOb3RoaW5nIHNwZWNpZmllZCwgbm90aGluZyBhZGRlZC5cbiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBnw6wgxJHGsOG7o2MgY2jhu4kgcmEsIGtow7RuZyBjw7MgZ8OsIMSRxrDhu6NjIHRow6ptIHbDoG8uXG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIk1heWJlIHlvdSB3YW50ZWQgdG8gc2F5ICdnaXQgYWRkIC4nP1xuIgorbXNnc3RyICJDw7MgbOG6vSDDvSBi4bqhbiBsw6Ag4oCcZ2l0IGFkZCAu4oCdIHBo4bqjaSBraMO0bmc/XG4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzY0IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTcyIGJ1aWx0aW4vY2xlYW4uYzo5NDAKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzM2IGJ1aWx0aW4vbXYuYzoxMzAgYnVpbHRpbi9yZXNldC5jOjIzNSBidWlsdGluL3JtLmM6Mjk4Cittc2dpZCAiaW5kZXggZmlsZSBjb3JydXB0IgorbXNnc3RyICJ04bqtcCB0aW4gZ2hpIGLhuqNuZyBt4bulYyBs4bulYyBi4buLIGjhu49uZyIKKworIzogYnVpbHRpbi9hZGQuYzo0NDUgYnVpbHRpbi9hcHBseS5jOjQ2NzggYnVpbHRpbi9tdi5jOjI3OSBidWlsdGluL3JtLmM6NDMwCittc2dpZCAiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyBt4bubaSIKKworIzogYnVpbHRpbi9hbS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB24buBICVzIgorCisjOiBidWlsdGluL2FtLmM6MjcwIGJ1aWx0aW4vYW0uYzoxMzQ1IGJ1aWx0aW4vY29tbWl0LmM6NzM3IGJ1aWx0aW4vbWVyZ2UuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMg4oCcJXPigJ0uIgorCisjOiBidWlsdGluL2FtLmM6NDQ0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIGF1dGhvciBzY3JpcHQiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAgdsSDbiBs4buHbmggdMOhYyBnaeG6oyIKKworIzogYnVpbHRpbi9hbS5jOjUyMQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIHdhcyBkZWxldGVkIGJ5IHRoZSBhcHBseXBhdGNoLW1zZyBob29rIgorbXNnc3RyICLigJwlc+KAnSBi4buLIHjDs2EgYuG7n2kgbcOzYyBhcHBseXBhdGNoLW1zZyIKKworIzogYnVpbHRpbi9hbS5jOjU2MiBidWlsdGluL25vdGVzLmM6MzAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1hbGZvcm1lZCBpbnB1dCBsaW5lOiAnJXMnLiIKK21zZ3N0ciAiRMOybmcgxJHhuqd1IHbDoG8gZOG7iyBow6xuaDog4oCcJXPigJ0uIgorCisjOiBidWlsdGluL2FtLmM6NTk5IGJ1aWx0aW4vbm90ZXMuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBzYW8gY2jDqXAgZ2hpIGNow7ogKG5vdGUpIHThu6sg4oCcJXPigJ0gdOG7m2kg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYW0uYzo2MjUKK21zZ2lkICJmc2VlayBmYWlsZWQiCittc2dzdHIgImZzZWVrIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2FtLmM6Nzg2IGJ1aWx0aW4vYW0uYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIOKAnCVz4oCdIMSR4buDIMSR4buNYzogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzo3OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZzogJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBt4bufIOKAnCVz4oCdIMSR4buDIGdoaTogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzo4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlIHBhdGNoICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjw7ogcGjDoXAg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYW0uYzo4NjcKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAiQ2jhu4kgY8OzIG3hu5l0IHPDqi1yaSBtaeG6v25nIHbDoSBTdEdJVCDEkcaw4bujYyDDoXAgZOG7pW5nIG3hu5l0IGzDumMiCisKKyM6IGJ1aWx0aW4vYW0uYzo5MTUKK21zZ2lkICJpbnZhbGlkIHRpbWVzdGFtcCIKK21zZ3N0ciAiZOG6pXUgdGjhu51pIGdpYW4ga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vYW0uYzo5MTggYnVpbHRpbi9hbS5jOjkyNgorbXNnaWQgImludmFsaWQgRGF0ZSBsaW5lIgorbXNnc3RyICJkw7JuZyBOZ8OgeSB0aMOhbmcga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vYW0uYzo5MjMKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAixJHhu5kgbOG7h2NoIG3DumkgZ2nhu50ga2jDtG5nIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDEwCittc2dpZCAiUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuIgorbXNnc3RyICJEw7IgdMOsbSDEkeG7i25oIGThuqFuZyBtaeG6v25nIHbDoSBn4bq3cCBs4buXaS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDE1IGJ1aWx0aW4vY2xvbmUuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJyVzJyIKK21zZ3N0ciAidOG6oW8gdGjGsCBt4bulYyBcIiVzXCIgZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMDE5Cittc2dpZCAiRmFpbGVkIHRvIHNwbGl0IHBhdGNoZXMuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgY2hpYSBuaOG7jyBjw6FjIG1p4bq/bmcgdsOhLiIKKworIzogYnVpbHRpbi9hbS5jOjExNTEgYnVpbHRpbi9jb21taXQuYzozNjIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gbMawdSBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9hbS5jOjEyMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiVzIC0tY29udGludWVcIi4iCittc2dzdHIgIktoaSBi4bqhbiDEkcOjIHBow6JuIGdp4bqjaSB4b25nIHRy4bulYyB0cuG6t2MgbsOgeSwgaMOjeSBjaOG6oXkgXCIlcyAtLWNvbnRpbnVlXCIuIgorCisjOiBidWlsdGluL2FtLmM6MTIwMworIywgYy1mb3JtYXQKK21zZ2lkICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJXMgLS1za2lwXCIgaW5zdGVhZC4iCittc2dzdHIgIiIKKyJO4bq/dSBi4bqhbiBtdeG7kW4gYuG7jyBxdWEgbWnhur9uZyB2w6EgbsOgeSwgaMOjeSBjaOG6oXkgbOG7h25oIFwiJXMgLS1za2lwXCIgxJHhu4MgdGhheSB0aOG6vy4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAixJDhu4MgcGjhu6VjIGjhu5NpIGzhuqFpIG5ow6FuaCBn4buRYyB2w6AgZOG7q25nIHbDoSwgaMOjeSBjaOG6oXkgXCIlcyAtLWFib3J0XCIuIgorCisjOiBidWlsdGluL2FtLmM6MTMzOQorbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiBXYXMgaXQgc3BsaXQgd3Jvbmc/IgorbXNnc3RyICJNaeG6v25nIHbDoSB0cuG7kW5nIHLhu5duZy4gUXXDoSB0csOsbmggY2hpYSBuaOG7jyBtaeG6v25nIHbDoSBjw7MgbOG7l2k/IgorCisjOiBidWlsdGluL2FtLmM6MTQxMyBidWlsdGluL2xvZy5jOjEzNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBpZGVudCBsaW5lOiAlcyIKK21zZ3N0ciAiZMOybmcgdGjhu6V0IGzhu4Ega2jDtG5nIGjhu6NwIGzhu4c6ICVzIgorCisjOiBidWlsdGluL2FtLmM6MTQ0MAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9hbS5jOjE2MTQKK21zZ2lkICJSZXBvc2l0b3J5IGxhY2tzIG5lY2Vzc2FyeSBibG9icyB0byBmYWxsIGJhY2sgb24gMy13YXkgbWVyZ2UuIgorbXNnc3RyICJLaG8gdGhp4bq/dSDEkeG7kWkgdMaw4bujbmcgYmxvYiBj4bqnbiB0aGnhur90IMSR4buDIHRy4bufIHbhu4EgdHLDqm4g4oCcMy13YXkgbWVyZ2XigJ0uIgorCisjOiBidWlsdGluL2FtLmM6MTYxNgorbXNnaWQgIlVzaW5nIGluZGV4IGluZm8gdG8gcmVjb25zdHJ1Y3QgYSBiYXNlIHRyZWUuLi4iCittc2dzdHIgIiIKKyJT4butIGThu6VuZyB0aMO0bmcgdGluIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyDEkeG7gyBj4bqldSB0csO6YyBs4bqhaSBt4buZdCBjw6J5ICh0cmVlKSBjxqEgc+G7n+KApiIKKworIzogYnVpbHRpbi9hbS5jOjE2MzUKK21zZ2lkICIiCisiRGlkIHlvdSBoYW5kIGVkaXQgeW91ciBwYXRjaD9cbiIKKyJJdCBkb2VzIG5vdCBhcHBseSB0byBibG9icyByZWNvcmRlZCBpbiBpdHMgaW5kZXguIgorbXNnc3RyICIiCisiQuG6oW4gxJHDoyBz4butYSBtaeG6v25nIHbDoSBj4bunYSBtw6xuaCBi4bqxbmcgY8OhY2ggdGjhu6cgY8O0bmcgw6A/XG4iCisiTsOzIGtow7RuZyB0aOG7gyDDoXAgZOG7pW5nIGPDoWMgYmxvYiDEkcOjIMSRxrDhu6NjIGdoaSBs4bqhaSB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMgY+G7p2EgbsOzLiIKKworIzogYnVpbHRpbi9hbS5jOjE2NDEKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIsSQYW5nIHRy4bufIGzhuqFpIMSR4buDIHbDoSBjxqEgc+G7nyB2w6Ag4oCcaMOyYSB0cuG7mW4gMy3Ekcaw4budbmfigJ3igKYiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjY2Cittc2dpZCAiRmFpbGVkIHRvIG1lcmdlIGluIHRoZSBjaGFuZ2VzLiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRy4buZbiB2w6BvIGPDoWMgdGhheSDEkeG7lWkuIgorCisjOiBidWlsdGluL2FtLmM6MTY5MSBidWlsdGluL21lcmdlLmM6NjMyCittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgZmFpbGVkIHRvIHdyaXRlIGEgdHJlZSIKK21zZ3N0ciAibOG7h25oIGdpdCB3cml0ZS10cmVlIGfhurdwIGzhu5dpIGtoaSBnaGkgbeG7mXQgY8OieSIKKworIzogYnVpbHRpbi9hbS5jOjE2OTgKK21zZ2lkICJhcHBseWluZyB0byBhbiBlbXB0eSBoaXN0b3J5IgorbXNnc3RyICLDoXAgZOG7pW5nIHbDoG8gbeG7mXQgbOG7i2NoIHPhu60gdHLhu5FuZyBy4buXbmciCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzExIGJ1aWx0aW4vY29tbWl0LmM6MTc1MiBidWlsdGluL21lcmdlLmM6ODI5CisjOiBidWlsdGluL21lcmdlLmM6ODU0Cittc2dpZCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1pdCBvYmplY3QiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBnaGkgxJHhu5FpIHTGsOG7o25nIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQzIGJ1aWx0aW4vYW0uYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBo4bulYyBo4buTaTogJXMga2jDtG5nIHThu5NuIHThuqFpLiIKKworIzogYnVpbHRpbi9hbS5jOjE3NjMKK21zZ2lkICJjYW5ub3QgYmUgaW50ZXJhY3RpdmUgd2l0aG91dCBzdGRpbiBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbC4iCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgxJHGsOG7o2MgdMawxqFuZyB0w6FjIG3DoCBraMO0bmcgY8OzIHN0ZGluIGvhur90IG7hu5FpIHbhu5tpIG3hu5l0IHRoaeG6v3QgYuG7iyBjdeG7kWkiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzY4Cittc2dpZCAiQ29tbWl0IEJvZHkgaXM6IgorbXNnc3RyICJUaMOibiBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIGzDoDoiCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNzc4Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKK21zZ3N0ciAiIgorIsOBcCBk4bulbmc/IMSR4buTbmcgw70gW3ldL2tow7Rbbl1nL2No4buJbmggc+G7rWEgW2VdL2hp4buDbiB0aOG7iyBtaeG6v25nIFt2XcOhL8SR4buTbmcgw70gdOG6pXQgY+G6oyAiCisiW2FdOiAiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODI4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRpcnR5IGluZGV4OiBjYW5ub3QgYXBwbHkgcGF0Y2hlcyAoZGlydHk6ICVzKSIKK21zZ3N0ciAiQuG6o25nIG3hu6VjIGzhu6VjIGLhuqluOiBraMO0bmcgdGjhu4Mgw6FwIGThu6VuZyBjw6FjIG1p4bq/bmcgdsOhIChi4bqpbjogJXMpIgorCisjOiBidWlsdGluL2FtLmM6MTg2MyBidWlsdGluL2FtLmM6MTkzNAorIywgYy1mb3JtYXQKK21zZ2lkICJBcHBseWluZzogJS4qcyIKK21zZ3N0ciAiw4FwIGThu6VuZzogJS4qcyIKKworIzogYnVpbHRpbi9hbS5jOjE4NzkKK21zZ2lkICJObyBjaGFuZ2VzIC0tIFBhdGNoIGFscmVhZHkgYXBwbGllZC4iCittc2dzdHIgIktow7RuZyB0aGF5IMSR4buVaSBnw6wgY+G6oyAtLSBNaeG6v25nIHbDoSDEkcOjIMSRxrDhu6NjIMOhcCBk4bulbmcgcuG7k2kuIgorCisjOiBidWlsdGluL2FtLmM6MTg4NworIywgYy1mb3JtYXQKK21zZ2lkICJQYXRjaCBmYWlsZWQgYXQgJXMgJS4qcyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHbDoSB04bqhaSAlcyAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTg5MworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY29weSBvZiB0aGUgcGF0Y2ggdGhhdCBmYWlsZWQgaXMgZm91bmQgaW46ICVzIgorbXNnc3RyICJC4bqjbiBzYW8gY2jDqXAgY+G7p2EgbWnhur9uZyB2w6EgbcOgIG7DsyBn4bq3cCBs4buXaSB0aMOsIMSRxrDhu6NjIHTDrG0gdGjhuqV5IHRyb25nOiAlcyIKKworIzogYnVpbHRpbi9hbS5jOjE5MzcKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKyJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7DoG8gLSBi4bqhbiDEkcOjIHF1w6puIHPhu60gZOG7pW5nIGzhu4duaCDigJxnaXQgYWRk4oCdIMOgP1xuIgorIk7hur91IOG7nyDEkcOieSBraMO0bmcgY8OzIGfDrCBjw7JuIGzhuqFpIHN0YWdlLCB0w6xuaCBj4budIGzDoCBjw7MgbeG7mXQgc+G7kSB0aOG7qSBraMOhY1xuIgorIsSRw6Mgc+G6tW4gxJHGsOG7o2MgxJHGsGEgdsOgbyB24bubaSBjw7luZyBu4buZaSBkdW5nIHRoYXkgxJHhu5VpOyBi4bqhbiBjw7MgbOG6vSBtdeG7kW4gYuG7jyBxdWEgbWnhur9uZyAiCisidsOhIG7DoHkuIgorCisjOiBidWlsdGluL2FtLmM6MTk0NAorbXNnaWQgIiIKKyJZb3Ugc3RpbGwgaGF2ZSB1bm1lcmdlZCBwYXRocyBpbiB5b3VyIGluZGV4LlxuIgorIkRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/IgorbXNnc3RyICIiCisiQuG6oW4gduG6q24gY8OzIG5o4buvbmcgxJHGsOG7nW5nIGThuqtuIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyBj4bunYSBtw6xuaC5cbiIKKyJC4bqhbiDEkcOjIHF1w6puIHPhu60gZOG7pW5nIGzhu4duaCDigJxnaXQgYWRk4oCdIMOgPyIKKworIzogYnVpbHRpbi9hbS5jOjIwNTIgYnVpbHRpbi9hbS5jOjIwNTYgYnVpbHRpbi9hbS5jOjIwNjggYnVpbHRpbi9yZXNldC5jOjMwOAorIzogYnVpbHRpbi9yZXNldC5jOjMxNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcycuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggxJHhu5FpIHTGsOG7o25nIOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi9hbS5jOjIxMDQKK21zZ2lkICJmYWlsZWQgdG8gY2xlYW4gaW5kZXgiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBk4buNbiBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTM4Cittc2dpZCAiIgorIllvdSBzZWVtIHRvIGhhdmUgbW92ZWQgSEVBRCBzaW5jZSB0aGUgbGFzdCAnYW0nIGZhaWx1cmUuXG4iCisiTm90IHJld2luZGluZyB0byBPUklHX0hFQUQiCittc2dzdHIgIiIKKyJC4bqhbiBjw7MgbOG6vSDEkcOjIGPDsyBIRUFEIMSRw6MgYuG7iyBkaSBjaHV54buDbiDEkWkga+G7gyB04burIGzhuqduIOKAnGFt4oCdIHRo4bqldCBi4bqhaSBjdeG7kWkgY8O5bmcuXG4iCisiS2jDtG5nIHRo4buDIGNodXnhu4NuIHThu5tpIE9SSUdfSEVBRCIKKworIzogYnVpbHRpbi9hbS5jOjIxOTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgLS1wYXRjaC1mb3JtYXQ6ICVzIgorbXNnc3RyICJHacOhIHRy4buLIGtow7RuZyBo4bujcCBs4buHIGNobyAtLXBhdGNoLWZvcm1hdDogJXMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjIxCittc2dpZCAiZ2l0IGFtIFtvcHRpb25zXSBbKDxtYm94Pnw8TWFpbGRpcj4pLi4uXSIKK21zZ3N0ciAiZ2l0IGFtIFtjw6FjLXTDuXktY2jhu41uXSBbKDxtYm94Pnw8TWFpbGRpcj4p4oCmXSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjIKK21zZ2lkICJnaXQgYW0gW29wdGlvbnNdICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBbY8OhYy10w7l5LWNo4buNbl0gKC0tY29udGludWUgfCAtLXNraXAgfCAtLWFib3J0KSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjgKK21zZ2lkICJydW4gaW50ZXJhY3RpdmVseSIKK21zZ3N0ciAiY2jhuqF5IGtp4buDdSB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgInTDuXkgY2jhu41uIGzhu4tjaCBz4butIC0tIGtow7RuZy10b8Ohbi104butIgorCisjOiBidWlsdGluL2FtLmM6MjIzMgorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICJjaG8gcGjDqXAgcXVheSB0cuG7nyBs4bqhaSDEkeG7gyBow7JhIHRy4buZbiBraeG7g3Ug4oCcM3dheeKAnSBu4bq/dSBj4bqnbiIKKworIzogYnVpbHRpbi9hbS5jOjIyMzMgYnVpbHRpbi9pbml0LWRiLmM6NTA5IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTcKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTcxCittc2dpZCAiYmUgcXVpZXQiCittc2dzdHIgImltIGzhurduZyIKKworIzogYnVpbHRpbi9hbS5jOjIyMzUKK21zZ2lkICJhZGQgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJUaMOqbSBkw7JuZyBTaWduZWQtb2ZmLWJ5IGNobyBnaGkgY2jDuiBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2FtLmM6MjIzOAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICJjaHV54buDbiBtw6MgdGjDoG5oIHV0ZjggKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2FtLmM6MjI0MAorbXNnaWQgInBhc3MgLWsgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgImNodXnhu4NuIGPhu50gLWsgY2hvIGdpdC1tYWlsaW5mbyIKKworIzogYnVpbHRpbi9hbS5jOjIyNDIKK21zZ2lkICJwYXNzIC1iIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICJjaHV54buDbiBj4budIC1iIGNobyBnaXQtbWFpbGluZm8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ0Cittc2dpZCAicGFzcyAtbSBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAiY2h1eeG7g24gY+G7nSAtYiBjaG8gZ2l0LW1haWxpbmZvIgorCisjOiBidWlsdGluL2FtLmM6MjI0NgorbXNnaWQgInBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBmb3IgbWJveCBmb3JtYXQiCittc2dzdHIgImNodXnhu4NuIGPhu50gLS1rZWVwLWNyIGNobyBnaXQtbWFpbHNwbGl0IHbhu5tpIMSR4buLbmggZOG6oW5nIG1ib3giCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ5Cittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgIiIKKyLEkeG7q25nIGNodXnhu4NuIGPhu50gLS1rZWVwLWNyIGNobyBnaXQtbWFpbHNwbGl0IGtow7RuZyBwaOG7pSB0aHXhu5ljIHbDoG8gYW0ua2VlcGNyIgorCisjOiBidWlsdGluL2FtLmM6MjI1MgorbXNnaWQgInN0cmlwIGV2ZXJ5dGhpbmcgYmVmb3JlIGEgc2Npc3NvcnMgbGluZSIKK21zZ3N0ciAiY+G6r3QgbeG7jWkgdGjhu6kgdHLGsOG7m2MgZMOybmcgc2Npc3NvcnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUzIGJ1aWx0aW4vYXBwbHkuYzo0NTYzCittc2dpZCAiYWN0aW9uIgorbXNnc3RyICJow6BuaCDEkeG7mW5nIgorCisjOiBidWlsdGluL2FtLmM6MjI1NCBidWlsdGluL2FtLmM6MjI1NyBidWlsdGluL2FtLmM6MjI2MCBidWlsdGluL2FtLmM6MjI2MworIzogYnVpbHRpbi9hbS5jOjIyNjYgYnVpbHRpbi9hbS5jOjIyNjkgYnVpbHRpbi9hbS5jOjIyNzIgYnVpbHRpbi9hbS5jOjIyNzUKKyM6IGJ1aWx0aW4vYW0uYzoyMjgxCittc2dpZCAicGFzcyBpdCB0aHJvdWdoIGdpdC1hcHBseSIKK21zZ3N0ciAiY2h1eeG7g24gbsOzIHF1YSBnaXQtYXBwbHkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjYyIGJ1aWx0aW4vYXBwbHkuYzo0NTg3Cittc2dpZCAicm9vdCIKK21zZ3N0ciAicm9vdCIKKworIzogYnVpbHRpbi9hbS5jOjIyNjUgYnVpbHRpbi9hbS5jOjIyNjggYnVpbHRpbi9hcHBseS5jOjQ1MjUKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTI4IGJ1aWx0aW4vY2xvbmUuYzo4NSBidWlsdGluL2ZldGNoLmM6OTMKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2NworbXNnaWQgInBhdGgiCittc2dzdHIgIsSRxrDhu51uZy1k4bqrbiIKKworIzogYnVpbHRpbi9hbS5jOjIyNzEgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjY5IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MgorIzogYnVpbHRpbi9ncmVwLmM6Njk4IGJ1aWx0aW4vbWVyZ2UuYzoxOTggYnVpbHRpbi9wdWxsLmM6MTI3CisjOiBidWlsdGluL3JlcGFjay5jOjE3OCBidWlsdGluL3JlcGFjay5jOjE4MiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0CisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTgwIGJ1aWx0aW4vdGFnLmM6NTkxIHBhcnNlLW9wdGlvbnMuaDoxMzIKKyM6IHBhcnNlLW9wdGlvbnMuaDoxMzQgcGFyc2Utb3B0aW9ucy5oOjI0MworbXNnaWQgIm4iCittc2dzdHIgIm4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc0IGJ1aWx0aW4vYXBwbHkuYzo0NTMxCittc2dpZCAibnVtIgorbXNnc3RyICJz4buRIgorCisjOiBidWlsdGluL2FtLmM6MjI3NyBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM0IGJ1aWx0aW4vcmVwbGFjZS5jOjQzOAorbXNnaWQgImZvcm1hdCIKK21zZ3N0ciAixJHhu4tuaCBk4bqhbmciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc4Cittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICLEkeG7i25oIGThuqFuZyAoY8OhYykgbWnhur9uZyB2w6EgdGhlbyIKKworIzogYnVpbHRpbi9hbS5jOjIyODQKK21zZ2lkICJvdmVycmlkZSBlcnJvciBtZXNzYWdlIHdoZW4gcGF0Y2ggZmFpbHVyZSBvY2N1cnMiCittc2dzdHIgIsSRw6ggbMOqbiBjw6FjIGzhu51pIG5o4bqvbiBs4buXaSBraGkgeOG6o3kgcmEgbOG7l2kgdsOhIG5naGnDqm0gdHLhu41uZyIKKworIzogYnVpbHRpbi9hbS5jOjIyODYKK21zZ2lkICJjb250aW51ZSBhcHBseWluZyBwYXRjaGVzIGFmdGVyIHJlc29sdmluZyBhIGNvbmZsaWN0IgorbXNnc3RyICJ0aeG6v3AgdOG7pWMgw6FwIGThu6VuZyBjw6FjIG1p4bq/bmcgdsOhIHNhdSBraGkgZ2nhuqNpIHF1eeG6v3QgeHVuZyDEkeG7mXQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg5Cittc2dpZCAic3lub255bXMgZm9yIC0tY29udGludWUiCittc2dzdHIgIsSR4buTbmcgbmdoxKlhIHbhu5tpIC0tY29udGludWUiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjkyCittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAiYuG7jyBxdWEgbWnhur9uZyB2w6EgaGnhu4duIGjDoG5oIgorCisjOiBidWlsdGluL2FtLmM6MjI5NQorbXNnaWQgInJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbi4iCittc2dzdHIgInBo4bulYyBo4buTaSBs4bqhaSBuaMOhbmggZ+G7kWMgdsOgIGxv4bqhaSBi4buPIHRoYW8gdMOhYyB2w6EuIgorCisjOiBidWlsdGluL2FtLmM6MjI5OQorbXNnaWQgImxpZSBhYm91dCBjb21taXR0ZXIgZGF0ZSIKK21zZ3N0ciAibsOzaSBk4buRaSB24buBIG5nw6B5IGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzAxCittc2dpZCAidXNlIGN1cnJlbnQgdGltZXN0YW1wIGZvciBhdXRob3IgZGF0ZSIKK21zZ3N0ciAiZMO5bmcgZOG6pXUgdGjhu51pIGdpYW4gaGnhu4duIHThuqFpIGNobyBuZ8OgeSB0w6FjIGdp4bqjIgorCisjOiBidWlsdGluL2FtLmM6MjMwMyBidWlsdGluL2NvbW1pdC5jOjE1OTAgYnVpbHRpbi9tZXJnZS5jOjIyNQorIzogYnVpbHRpbi9wdWxsLmM6MTU1IGJ1aWx0aW4vcmV2ZXJ0LmM6OTIgYnVpbHRpbi90YWcuYzo2MDYKK21zZ2lkICJrZXktaWQiCittc2dzdHIgIm3Doy1z4buRLWtow7NhIgorCisjOiBidWlsdGluL2FtLmM6MjMwNAorbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8ga8O9LUdQRyIKKworIzogYnVpbHRpbi9hbS5jOjIzMDcKK21zZ2lkICIoaW50ZXJuYWwgdXNlIGZvciBnaXQtcmViYXNlKSIKK21zZ3N0ciAiKGTDuW5nIG7hu5lpIGLhu5kgY2hvIGdpdC1yZWJhc2UpIgorCisjOiBidWlsdGluL2FtLmM6MjMyMgorbXNnaWQgIiIKKyJUaGUgLWIvLS1iaW5hcnkgb3B0aW9uIGhhcyBiZWVuIGEgbm8tb3AgZm9yIGxvbmcgdGltZSwgYW5kXG4iCisiaXQgd2lsbCBiZSByZW1vdmVkLiBQbGVhc2UgZG8gbm90IHVzZSBpdCBhbnltb3JlLiIKK21zZ3N0ciAiIgorIlTDuXkgY2jhu41uIC1iLy0tYmluYXJ5IMSRw6Mga2jDtG5nIGTDuW5nIHThu6sgbMOidSBy4buTaSwgdsOgXG4iCisibsOzIHPhur0gxJHGsOG7o2MgYuG7jyDEkWkuIFhpbiDEkeG7q25nIHPhu60gZOG7pW5nIG7DsyB0aMOqbSBu4buvYS4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzI5Cittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJn4bq3cCBs4buXaSDEkeG7jWMgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2FtLmM6MjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgInRoxrAgbeG7pWMgcmViYXNlIHRyxrDhu5tjICVzIGtow7RuZyBz4bq1biBjw7MgbmjGsG5nIG1ib3ggbOG6oWkgxJHGsGEgcmEuIgorCisjOiBidWlsdGluL2FtLmM6MjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiU3RyYXkgJXMgZGlyZWN0b3J5IGZvdW5kLlxuIgorIlVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVtb3ZlIGl0LiIKK21zZ3N0ciAiIgorIlTDrG0gdGjhuqV5IHRoxrAgbeG7pWMgbOG6oWMgJXMuXG4iCisiRMO5bmcgXCJnaXQgYW0gLS1hYm9ydFwiIMSR4buDIGxv4bqhaSBi4buPIG7DsyDEkWkuIgorCisjOiBidWlsdGluL2FtLmM6MjM3NAorbXNnaWQgIlJlc29sdmUgb3BlcmF0aW9uIG5vdCBpbiBwcm9ncmVzcywgd2UgYXJlIG5vdCByZXN1bWluZy4iCittc2dzdHIgIlRoYW8gdMOhYyBwaMOibiBnaeG6o2kga2jDtG5nIMSRxrDhu6NjIHRp4bq/biBow6BuaCwgY2jDum5nIHRhIGtow7RuZyBwaOG7pWMgaOG7k2kgbOG6oWkuIgorCisjOiBidWlsdGluL2FwcGx5LmM6NTkKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzxjw6FjLXTDuXktY2jhu41uPl0gWzxtaeG6v25nLXbDoT7igKZdIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICJraMO0bmcgbmjhuq1uIHJhIHTDuXkgY2jhu41uIHbhu4Ega2hv4bqjbmcgdHLhuq9uZyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9hcHBseS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgImtow7RuZyBuaOG6rW4gcmEgdMO5eSBjaOG7jW4gYuG7jyBxdWEga2hv4bqjbmcgdHLhuq9uZyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9hcHBseS5jOjgyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcHJlcGFyZSB0aW1lc3RhbXAgcmVnZXhwICVzIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGNodeG6qW4gYuG7iyBiaeG7g3UgdGjhu6ljIGNow61uaCBxdWkgZOG6pXUgduG6v3QgdGjhu51pIGdpYW4gKHRpbWVzdGFtcCByZWdleHApICIKKyIlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgInRoaSBow6BuaCBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkgdHLhuqMgduG7gSAlZCBjaG8gxJHhuqd1IHbDoG86ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBmaW5kIGZpbGVuYW1lIGluIHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgImtow7RuZyB0aOG7gyB0w6xtIHRo4bqleSB0w6puIHThuq1wIHRpbiB0cm9uZyBtaeG6v25nIHbDoSB04bqhaSBkw7JuZyAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgIiIKKyJnaXQgYXBwbHk6IGdpdC1kaWZmIHNhaSAtIGPhuqduIC9kZXYvbnVsbCwgbmjGsG5nIGzhuqFpIG5o4bqtbiDEkcaw4bujYyAlcyB0csOqbiBkw7JuZyAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0OAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx5OiBnaXQtZGlmZiBzYWkgLSB0w6puIHThuq1wIHRpbiBt4bubaSBraMO0bmcgbmjhuqV0IHF1w6FuIHRyw6puIGTDsm5nICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTQ5CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gaW5jb25zaXN0ZW50IG9sZCBmaWxlbmFtZSBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHk6IGdpdC1kaWZmIHNhaSAtIHTDqm4gdOG6rXAgdGluIGPFqSBraMO0bmcgbmjhuqV0IHF1w6FuIHRyw6puIGTDsm5nICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6OTU2CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcHBseTogYmFkIGdpdC1kaWZmIC0gZXhwZWN0ZWQgL2Rldi9udWxsIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBseTogZ2l0LWRpZmYgc2FpIC0gY+G6p24g4oCcL2Rldi9udWxs4oCdIHRyw6puIGTDsm5nICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTQxOQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWNvdW50OiB1bmV4cGVjdGVkIGxpbmU6ICUuKnMiCittc2dzdHIgImNoaSB0aeG6v3Q6IGTDsm5nIGtow7RuZyBj4bqnbjogJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAibWnhur9uZyB2w6EgcGjDom4gbeG6o25oIG3DoCBraMO0bmcgY8OzIHBo4bqnbiDEkeG6p3UgdOG6oWkgZMOybmcgJWQ6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50cyAobGluZSAlZCkiCittc2dzdHJbMF0gIiIKKyJwaOG6p24gxJHhuqd1IGRpZmYgY2hvIGdpdCAgdGhp4bq/dSB0aMO0bmcgdGluIHTDqm4gdOG6rXAgdGluIGtoaSBn4buhIGLhu48gxJFpICVkIHRyb25nICIKKyJ0aMOgbmggcGjhuqduIGThuqtuIMSR4bqndSB0w6puIGPhu6dhIMSRxrDhu51uZyBk4bqrbiAoZMOybmcgJWQpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY1OQorbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICJ04bqtcCB0aW4gbeG7m2kgcGjhu6UgdGh14buZYyB2w6BvIG7hu5lpIGR1bmcgY8WpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY2MQorbXNnaWQgImRlbGV0ZWQgZmlsZSBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgInThuq1wIHRpbiDEkcOjIHjDs2EgduG6q24gY8OybiBu4buZaSBkdW5nIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY4NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIm1p4bq/bmcgdsOhIGjhu49uZyB04bqhaSBkw7JuZyAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IGZpbGUgJXMgZGVwZW5kcyBvbiBvbGQgY29udGVudHMiCittc2dzdHIgInThuq1wIHRpbiBt4bubaSAlcyBwaOG7pSB0aHXhu5ljIHbDoG8gbuG7mWkgZHVuZyBjxakiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNzI1CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0ZWQgZmlsZSAlcyBzdGlsbCBoYXMgY29udGVudHMiCittc2dzdHIgInThuq1wIHRpbiDEkcOjIHjDs2EgJXMgduG6q24gY8OybiBu4buZaSBkdW5nIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyOAorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiBj4bqjbmggYsOhbzogdOG6rXAgdGluICVzIHRy4bufIG7Dqm4gdHLhu5FuZyBy4buXbmcgbmjGsG5nIGtow7RuZyBi4buLIHjDs2EiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxODc0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvcnJ1cHQgYmluYXJ5IHBhdGNoIGF0IGxpbmUgJWQ6ICUuKnMiCittc2dzdHIgIm1p4bq/bmcgdsOhIMSR4buLbmggZOG6oW5nIG5o4buLIHBow6JuIHNhaSBo4buPbmcgdOG6oWkgZMOybmcgJWQ6ICUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxOTAzCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBiaW5hcnkgcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAibWnhur9uZyB2w6EgxJHhu4tuaCBk4bqhbmcgbmjhu4sgcGjDom4ga2jDtG5nIMSRxrDhu6NjIG5o4bqtbiByYSB04bqhaSBkw7JuZyAlZCIKKworIzogYnVpbHRpbi9hcHBseS5jOjIwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggd2l0aCBvbmx5IGdhcmJhZ2UgYXQgbGluZSAlZCIKK21zZ3N0ciAidsOhIGNo4buJIHbhu5tpIOKAnHLDoWPigJ0gdOG6oWkgZMOybmcgJWQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHN5bWxpbmsgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgbGnDqm4ga+G6v3QgbeG7gW0gJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBt4bufIGhheSDEkeG7jWMgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyNzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgc3RhcnQgb2YgbGluZTogJyVjJyIKK21zZ3N0ciAic2FpIGto4bufaSDEkeG6p3UgZMOybmc6IOKAnCVj4oCdIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIkto4buRaSBk4buvIGxp4buHdSAjJWQgdGjDoG5oIGPDtG5nIHThuqFpICVkIChvZmZzZXQgJWQgZMOybmcpLiIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29udGV4dCByZWR1Y2VkIHRvICglbGQvJWxkKSB0byBhcHBseSBmcmFnbWVudCBhdCAlZCIKK21zZ3N0ciAiTuG7mWkgZHVuZyBi4buLIGdp4bqjbSB4deG7kW5nIGPDsm4gKCVsZC8lbGQpIMSR4buDIMOhcCBk4bulbmcgbeG6o25oIGThu68gbGnhu4d1IHThuqFpICVkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisid2hpbGUgc2VhcmNoaW5nIGZvcjpcbiIKKyIlLipzIgorbXNnc3RyICIiCisidHJvbmcga2hpIMSRYW5nIHTDrG0ga2nhur9tIGNobzpcbiIKKyIlLipzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkzOAorIywgYy1mb3JtYXQKK21zZ2lkICJtaXNzaW5nIGJpbmFyeSBwYXRjaCBkYXRhIGZvciAnJXMnIgorbXNnc3RyICJ0aGnhur91IGThu68gbGnhu4d1IGPhu6dhIG1p4bq/bmcgdsOhIMSR4buLbmggZOG6oW5nIG5o4buLIHBow6JuIGNobyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgIm1p4bq/bmcgdsOhIMSR4buLbmggZOG6oW5nIG5o4buLIHBow6JuIGtow7RuZyDEkcaw4bujYyDDoXAgZOG7pW5nIGNobyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIHRvICclcycgY3JlYXRlcyBpbmNvcnJlY3QgcmVzdWx0IChleHBlY3RpbmcgJXMsIGdvdCAlcykiCittc2dzdHIgIiIKKyJ2w6Egbmjhu4sgcGjDom4gY2hvIOKAnCVz4oCdIHThuqFvIHJhIGvhur90IHF14bqjIGtow7RuZyBjaMOtbmggeMOhYyAobW9uZyBjaOG7nSAlcywgbOG6oWkgbmjhuq1uICIKKyIlcykiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMDY2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGNoIGZhaWxlZDogJXM6JWxkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgdsOhOiAlczolbGQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMTkwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGVja291dCAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHJhICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzIzNSBidWlsdGluL2FwcGx5LmM6MzI0NiBidWlsdGluL2FwcGx5LmM6MzI5MQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkIG9mICVzIGZhaWxlZCIKK21zZ3N0ciAixJHhu41jICVzIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI0MworIywgYy1mb3JtYXQKK21zZ2lkICJyZWFkaW5nIGZyb20gJyVzJyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLEkeG7jWMgdOG7qyDigJwlc+KAnSB2xrDhu6N0IHJhIG5nb8OgaSBsacOqbiBr4bq/dCBt4buBbSIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyNzEgYnVpbHRpbi9hcHBseS5jOjM0OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAlcyBoYXMgYmVlbiByZW5hbWVkL2RlbGV0ZWQiCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiAlcyDEkcOjIGLhu4sgeMOzYSBob+G6t2MgxJHhu5VpIHTDqm4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzUyIGJ1aWx0aW4vYXBwbHkuYzozNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IGtow7RuZyB04buTbiB04bqhaSB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzU2IGJ1aWx0aW4vYXBwbHkuYzozNDk5IGJ1aWx0aW4vYXBwbHkuYzozNTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyIKK21zZ3N0ciAiJXM6ICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzM2MSBidWlsdGluL2FwcGx5LmM6MzUxNQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogZG9lcyBub3QgbWF0Y2ggaW5kZXgiCittc2dzdHIgIiVzOiBraMO0bmcga2jhu5twIHRyb25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzQ2MworbXNnaWQgInJlbW92YWwgcGF0Y2ggbGVhdmVzIGZpbGUgY29udGVudHMiCittc2dzdHIgImxv4bqhaSBi4buPIG1p4bq/bmcgdsOhIMSR4buDIGzhuqFpIG7hu5lpIGR1bmcgdOG6rXAgdGluIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzUzMgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogd3JvbmcgdHlwZSIKK21zZ3N0ciAiJXM6IHNhaSBraeG7g3UiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyB0eXBlICVvLCBleHBlY3RlZCAlbyIKK21zZ3N0ciAiJXMgY8OzIGtp4buDdSAlbywgY+G6p24gJW8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNjkzIGJ1aWx0aW4vYXBwbHkuYzozNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24ga2jDtG5nIGjhu6NwIGzhu4cg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBhbHJlYWR5IGV4aXN0cyBpbiBpbmRleCIKK21zZ3N0ciAiJXM6IMSRw6MgY8OzIHThu6sgdHLGsOG7m2MgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc1MworIywgYy1mb3JtYXQKK21zZ2lkICIlczogYWxyZWFkeSBleGlzdHMgaW4gd29ya2luZyBkaXJlY3RvcnkiCittc2dzdHIgIiVzOiDEkcOjIHPhurVuIGPDsyB0cm9uZyB0aMawIG3hu6VjIMSRYW5nIGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc3MworIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykiCittc2dzdHIgImNo4bq/IMSR4buZIG3hu5tpICglbykgY+G7p2EgJXMga2jDtG5nIGto4bubcCB24bubaSBjaOG6vyDEkeG7mSBjxakgKCVvKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIG9mICVzIgorbXNnc3RyICJjaOG6vyDEkeG7mSBt4bubaSAoJW8pIGPhu6dhICVzIGtow7RuZyBraOG7m3AgduG7m2kgY2jhur8gxJHhu5kgY8WpICglbykgY+G7p2EgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICJ04bqtcCB0aW4gY2jhu4t1IHTDoWMgxJHhu5luZyDigJwlc+KAnSB2xrDhu6N0IHJhIG5nb8OgaSBsacOqbiBr4bq/dCBt4buBbSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM4MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICIlczogbWnhur9uZyB2w6Ega2jDtG5nIMSRxrDhu6NjIMOhcCBk4bulbmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIG1p4bq/bmcgdsOhICVz4oCmIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzkwOSBidWlsdGluL2NoZWNrb3V0LmM6MjMyIGJ1aWx0aW4vcmVzZXQuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFrZV9jYWNoZV9lbnRyeSBmYWlsZWQgZm9yIHBhdGggJyVzJyIKK21zZ3N0ciAibWFrZV9jYWNoZV9lbnRyeSBn4bq3cCBs4buXaSDEkeG7kWkgduG7m2kgxJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA1MgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlICVzIGZyb20gaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyBn4buhIGLhu48gJXMgdOG7qyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29ycnVwdCBwYXRjaCBmb3Igc3VibW9kdWxlICVzIgorbXNnc3RyICJtaeG6v25nIHbDoSBzYWkgaOG7j25nIGNobyBtw7QtxJF1bi1jb24gJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgdGjhu5FuZyBr4buBIHbhu4EgdOG6rXAgdGluICVzIG3hu5tpIGjGoW4gxJHDoyDEkcaw4bujYyB04bqhbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQwOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSBiYWNraW5nIHN0b3JlIGZvciBuZXdseSBjcmVhdGVkIGZpbGUgJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyDigJxraG8gbMawdSDEkeG6sW5nIHNhdeKAnSBjaG8gdOG6rXAgdGluIMSRxrDhu6NjIHThuqFvIG3hu5tpIGjGoW4gJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDkzIGJ1aWx0aW4vYXBwbHkuYzo0MjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhZGQgY2FjaGUgZW50cnkgZm9yICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdGjDqm0gbeG7pWMgbmjhu5sgxJHhu4dtIGNobyAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvc2luZyBmaWxlICclcyciCittc2dzdHIgIsSRYW5nIMSRw7NuZyB04bqtcCB0aW4g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MTc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBmaWxlICclcycgbW9kZSAlbyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB2w6BvIHThuq1wIHRpbiDigJwlc+KAnSBjaOG6vyDEkeG7mSAlbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAixJDDoyDDoXAgZOG7pW5nIG1p4bq/bmcgdsOhICVzIG3hu5l0IGPDoWNoIHPhuqFjaCBz4bq9LiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyNzAKK21zZ2lkICJpbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAibOG7l2kgbuG7mWkgYuG7mSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyNzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0Li4uIgorbXNnaWRfcGx1cmFsICJBcHBseWluZyBwYXRjaCAlJXMgd2l0aCAlZCByZWplY3RzLi4uIgorbXNnc3RyWzBdICLEkGFuZyDDoXAgZOG7pW5nIG1p4bq/bmcgdsOhICUlcyB24bubaSAlZCBs4bqnbiB04burIGNo4buRaeKApiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidHJ1bmNhdGluZyAucmVqIGZpbGVuYW1lIHRvICUuKnMucmVqIgorbXNnc3RyICLEkWFuZyBj4bqvdCBuZ+G6r24gdMOqbiB04bqtcCB0aW4gLnJlaiB0aMOgbmggJS4qcy5yZWoiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1bmsgIyVkIGFwcGxpZWQgY2xlYW5seS4iCittc2dzdHIgIkto4buRaSBuaOG7myAjJWQgxJHGsOG7o2Mgw6FwIGThu6VuZyBn4buNbiBnw6BuZy4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MzA3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlamVjdGVkIGh1bmsgIyVkLiIKK21zZ3N0ciAixJFv4bqhbiBk4buvIGxp4buHdSAjJWQgYuG7iyB04burIGNo4buRaS4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0Mzk3Cittc2dpZCAidW5yZWNvZ25pemVkIGlucHV0IgorbXNnc3RyICJraMO0bmcgdGjhu6thIG5o4bqtbiDEkeG6p3UgdsOgbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ0MDgKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MjYKK21zZ2lkICJkb24ndCBhcHBseSBjaGFuZ2VzIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXRoIgorbXNnc3RyICJraMO0bmcgw6FwIGThu6VuZyBjw6FjIHRoYXkgxJHhu5VpIGto4bubcCB24bubaSDEkcaw4budbmcgZOG6q24gxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTI5Cittc2dpZCAiYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAiw6FwIGThu6VuZyBjw6FjIHRoYXkgxJHhu5VpIGto4bubcCB24bubaSDEkcaw4budbmcgZOG6q24gxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTMyCittc2dpZCAicmVtb3ZlIDxudW0+IGxlYWRpbmcgc2xhc2hlcyBmcm9tIHRyYWRpdGlvbmFsIGRpZmYgcGF0aHMiCittc2dzdHIgImfhu6EgYuG7jyA8c+G7kT4gZOG6pXUgZ+G6oWNoIGNow6lvIGThuqtuIMSR4bqndSB04burIMSRxrDhu51uZyBk4bqrbiBkaWZmIGPhu5UgxJFp4buDbiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MzUKK21zZ2lkICJpZ25vcmUgYWRkaXRpb25zIG1hZGUgYnkgdGhlIHBhdGNoIgorbXNnc3RyICJs4budIMSRaSBwaOG6p24gYuG7lSB4dW5nIMSRxrDhu6NjIHThuqFvIHJhIGLhu59pIG1p4bq/bmcgdsOhIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUzNworbXNnaWQgImluc3RlYWQgb2YgYXBwbHlpbmcgdGhlIHBhdGNoLCBvdXRwdXQgZGlmZnN0YXQgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAiIgorInRoYXkgdsOsIMOhcCBk4bulbmcgbeG7mXQgbWnhur9uZyB2w6EsIGvhur90IHh14bqldCBr4bq/dCBxdeG6oyB04burIGzhu4duaCBkaWZmc3RhdCBjaG8gxJHhuqd1IHJhIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0MQorbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIiIKKyJoaeG7g24gdGjhu4sgc+G7kSBsxrDhu6NuZyBjw6FjIGTDsm5nIMSRxrDhu6NjIHRow6ptIHbDoG8gdsOgIHjDs2EgxJFpIHRoZW8ga8O9IGhp4buHdSB0aOG6rXAgcGjDom4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQzCittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIG91dHB1dCBhIHN1bW1hcnkgZm9yIHRoZSBpbnB1dCIKK21zZ3N0ciAidGhheSB2w6wgw6FwIGThu6VuZyBt4buZdCBtaeG6v25nIHbDoSwga+G6v3QgeHXhuqV0IGvhur90IHF14bqjIGNobyDEkeG6p3UgdsOgbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDUKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgc2VlIGlmIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIgorbXNnc3RyICJ0aGF5IHbDrCDDoXAgZOG7pW5nIG1p4bq/bmcgdsOhLCBow6N5IHhlbSB4ZW0gbWnhur9uZyB2w6EgY8OzIHRow61jaCBo4bujcCBraMO0bmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQ3Cittc2dpZCAibWFrZSBzdXJlIHRoZSBwYXRjaCBpcyBhcHBsaWNhYmxlIHRvIHRoZSBjdXJyZW50IGluZGV4IgorbXNnc3RyICJow6N5IGNo4bqvYyBjaOG6r24gbMOgIG1p4bq/bmcgdsOhIHRow61jaCBo4bujcCB24bubaSBi4bqjbmcgbeG7pWMgbOG7pWMgaGnhu4duIGjDoG5oIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0OQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLDoXAgZOG7pW5nIG3hu5l0IG1p4bq/bmcgdsOhIG3DoCBraMO0bmcgxJHhu5luZyBjaOG6oW0gxJHhur9uIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTUxCittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAiY2jhuqVwIG5o4bqtbiBt4buZdCBtaeG6v25nIHbDoSBtw6Aga2jDtG5nIMSR4buZbmcgY2jhuqFtIMSR4bq/biBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1MworbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICIiCisixJHhu5NuZyB0aOG7nWkgw6FwIGThu6VuZyBtaeG6v25nIHbDoSAoZMO5bmcgduG7m2kgdMO5eSBjaOG7jW4gLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrKSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NTUKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICJ0aOG7rSBow7JhIHRy4buZbiBraeG7g3UgdGhyZWUtd2F5IG7hur91IHZp4buHYyB2w6Ega2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTU3Cittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgIiIKKyJ4w6J5IGThu7FuZyBi4bqjbmcgbeG7pWMgbOG7pWMgdOG6oW0gdGjhu51pIHRyw6puIGPGoSBz4bufIHRow7RuZyB0aW4gYuG6o25nIG3hu6VjIGzhu6VjIMSRxrDhu6NjIG5ow7puZyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NTkgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5OCBidWlsdGluL2xzLWZpbGVzLmM6NDEyCittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgImPDoWMgxJHGsOG7nW5nIGThuqtuIGLhu4sgbmfEg24gY8OhY2ggYuG7n2kga8O9IHThu7EgTlVMTCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NjIKK21zZ2lkICJlbnN1cmUgYXQgbGVhc3QgPG4+IGxpbmVzIG9mIGNvbnRleHQgbWF0Y2giCittc2dzdHIgIsSR4bqjbSBi4bqjbyBy4bqxbmcgY8OzIMOtdCBuaOG6pXQgPG4+IGTDsm5nIG7hu5lpIGR1bmcga2jhu5twIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU2NAorbXNnaWQgImRldGVjdCBuZXcgb3IgbW9kaWZpZWQgbGluZXMgdGhhdCBoYXZlIHdoaXRlc3BhY2UgZXJyb3JzIgorbXNnc3RyICJ0w6xtIHRo4bqleSBt4buZdCBkw7JuZyBt4bubaSBob+G6t2MgYuG7iyBz4butYSDEkeG7lWkgbcOgIG7DsyBjw7MgbOG7l2kgZG8ga2hv4bqjbmcgdHLhuq9uZyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NjcgYnVpbHRpbi9hcHBseS5jOjQ1NzAKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICJs4budIMSRaSBz4buxIHRoYXkgxJHhu5VpIGRvIGtob+G6o25nIHRy4bqvbmcgZ8OieSByYSBraGkgcXXDqXQgbuG7mWkgZHVuZyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzMKK21zZ2lkICJhcHBseSB0aGUgcGF0Y2ggaW4gcmV2ZXJzZSIKK21zZ3N0ciAiw6FwIGThu6VuZyBtaeG6v25nIHbDoSB0aGVvIGNoaeG7gXUgbmfGsOG7o2MiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTc1Cittc2dpZCAiZG9uJ3QgZXhwZWN0IGF0IGxlYXN0IG9uZSBsaW5lIG9mIGNvbnRleHQiCittc2dzdHIgIsSR4burbmcgaHkgduG7jW5nIGPDsyDDrXQgbmjhuqV0IG3hu5l0IGTDsm5nIG7hu5lpIGR1bmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTc3Cittc2dpZCAibGVhdmUgdGhlIHJlamVjdGVkIGh1bmtzIGluIGNvcnJlc3BvbmRpbmcgKi5yZWogZmlsZXMiCittc2dzdHIgIsSR4buDIGzhuqFpIGto4buRaSBk4buvIGxp4buHdSBi4buLIHThu6sgY2jhu5FpIHRyb25nIGPDoWMgdOG6rXAgdGluICoucmVqIHTGsMahbmcg4bupbmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTc5Cittc2dpZCAiYWxsb3cgb3ZlcmxhcHBpbmcgaHVua3MiCittc2dzdHIgImNobyBwaMOpcCBjaOG7k25nIGto4buRaSBuaOG7myIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODIKK21zZ2lkICJ0b2xlcmF0ZSBpbmNvcnJlY3RseSBkZXRlY3RlZCBtaXNzaW5nIG5ldy1saW5lIGF0IHRoZSBlbmQgb2YgZmlsZSIKK21zZ3N0ciAiIgorIsSRw6MgZMOyIHTDrG0gdGjhuqV5IGR1bmcgc2FpIGtow7RuZyBjaMOtbmggeMOhYyB0aGnhur91IGTDsm5nIG3hu5tpIHThuqFpIGN14buRaSB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTg1Cittc2dpZCAiZG8gbm90IHRydXN0IHRoZSBsaW5lIGNvdW50cyBpbiB0aGUgaHVuayBoZWFkZXJzIgorbXNnc3RyICJraMO0bmcgdGluIHPhu5EgbMaw4bujbmcgZMOybmcgdHJvbmcgcGjhuqduIMSR4bqndSBraOG7kWkgZOG7ryBsaeG7h3UiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTg4Cittc2dpZCAicHJlcGVuZCA8cm9vdD4gdG8gYWxsIGZpbGVuYW1lcyIKK21zZ3N0ciAidHJlbyB0aMOqbSA8cm9vdD4gdsOgbyB04bqldCBj4bqjIGPDoWMgdMOqbiB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjEwCittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLTN3YXkg4bufIG5nb8OgaSBt4buZdCBraG8gY2jhu6lhIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDYxOAorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXgg4bufIG5nb8OgaSBt4buZdCBraG8gY2jhu6lhIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDYyMQorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCDhu58gbmdvw6BpIG3hu5l0IGtobyBjaOG7qWEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gbWnhur9uZyB2w6Eg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIsSRw6MgY2jhuqVtIGThu6l0ICVkIGzhu5dpIGtob+G6o25nIHRy4bqvbmciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjYwIGJ1aWx0aW4vYXBwbHkuYzo0NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIGTDsm5nIHRow6ptIGtob+G6o25nIHRy4bqvbmcgbOG7l2kuIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdOG6rXAgdGluIGtobyAobMawdSB0cuG7rywgbsOpbikg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjIwCittc2dpZCAiY291bGQgbm90IHJlZGlyZWN0IG91dHB1dCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGNodXnhu4NuIGjGsOG7m25nIGvhur90IHh14bqldCIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MzcKK21zZ2lkICJnaXQgYXJjaGl2ZTogUmVtb3RlIHdpdGggbm8gVVJMIgorbXNnc3RyICJnaXQgYXJjaGl2ZTogTcOheSBjaOG7pyBraMO0bmcgY8OzIMSR4buLYSBjaOG7iSBVUkwiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjU4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIEFDSy9OQUssIGdvdCBFT0YiCittc2dzdHIgImdpdCBhcmNoaXZlOiBj4bqnbiBBQ0svTkFLLCBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjIEVPRiIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGFyY2hpdmU6IE5BQ0sgJXMiCittc2dzdHIgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgZXJyb3I6ICVzIgorbXNnc3RyICJs4buXaSBtw6F5IGNo4bunOiAlcyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjQKK21zZ2lkICJnaXQgYXJjaGl2ZTogcHJvdG9jb2wgZXJyb3IiCittc2dzdHIgImdpdCBhcmNoaXZlOiBs4buXaSBnaWFvIHRo4bupYyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6NjgKK21zZ2lkICJnaXQgYXJjaGl2ZTogZXhwZWN0ZWQgYSBmbHVzaCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmU6IGPhuqduIG3hu5l0IGZsdXNoICjEkeG6qXkgZOG7ryBsaeG7h3UgbMOqbiDEkcSpYSkiCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzo3Cittc2dpZCAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorbXNnc3RyICJnaXQgYmlzZWN0LS1oZWxwZXIgLS1uZXh0LWFsbCBbLS1uby1jaGVja291dF0iCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxNworbXNnaWQgInBlcmZvcm0gJ2dpdCBiaXNlY3QgbmV4dCciCittc2dzdHIgInRo4buxYyBoaeG7h24g4oCcZ2l0IGJpc2VjdCBuZXh04oCdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTkKK21zZ2lkICJ1cGRhdGUgQklTRUNUX0hFQUQgaW5zdGVhZCBvZiBjaGVja2luZyBvdXQgdGhlIGN1cnJlbnQgY29tbWl0IgorbXNnc3RyICIiCisiY+G6rXAgbmjhuq10IEJJU0VDVF9IRUFEIHRoYXkgdsOsIGzhuqV5IHJhIChjaGVja2luZyBvdXQpIGzhuqduIGNodXnhu4NuIGdpYW8gaGnhu4duIGjDoG5oIgorCisjOiBidWlsdGluL2JsYW1lLmM6MzIKK21zZ2lkICJnaXQgYmxhbWUgWzxvcHRpb25zPl0gWzxyZXYtb3B0cz5dIFs8cmV2Pl0gWy0tXSA8ZmlsZT4iCittc2dzdHIgImdpdCBibGFtZSBbPGPDoWMtdMO5eS1jaOG7jW4+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDx04bqtcC10aW4+IgorCisjOiBidWlsdGluL2JsYW1lLmM6MzcKK21zZ2lkICI8cmV2LW9wdHM+IGFyZSBkb2N1bWVudGVkIGluIGdpdC1yZXYtbGlzdCgxKSIKK21zZ3N0ciAiPHJldi1vcHRzPiDEkcaw4bujYyBtw7QgdOG6oyB0cm9uZyB0w6BpIGxp4buHdSBnaXQtcmV2LWxpc3QoMSkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTAwCittc2dpZCAiU2hvdyBibGFtZSBlbnRyaWVzIGFzIHdlIGZpbmQgdGhlbSwgaW5jcmVtZW50YWxseSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIGPDoWMgbeG7pWMg4oCcYmxhbWXigJ0gbmjGsCBsw6AgY2jDum5nIHRhIHRo4bqleSBjaMO6bmcsIHTEg25nIGThuqduIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIiIKKyJIaeG7g24gdGjhu4sgU0hBLTEgdHLhuq9uZyBjaG8gbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvIGJpw6puIGdp4bubaSAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDIKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIktow7RuZyBjb2kgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGfhu5FjIGzDoCBnaeG7m2kgaOG6oW4gKE3hurdjIMSR4buLbmg6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTAzCittc2dpZCAiU2hvdyB3b3JrIGNvc3Qgc3RhdGlzdGljcyIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRo4buRbmcga8OqIGPDtG5nIHPhu6ljIGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwNAorbXNnaWQgIlNob3cgb3V0cHV0IHNjb3JlIGZvciBibGFtZSBlbnRyaWVzIgorbXNnc3RyICJIaeG7g24gdGjhu4sga+G6v3QgeHXhuqV0IMSRaeG7g20gc+G7kSBjw7MgY8OhYyBt4bulYyB0aW4g4oCcYmxhbWXigJ0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA1Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0w6puIHThuq1wIHRpbiBn4buRYyAoTeG6t2MgxJHhu4tuaDogYXV0bykiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA2Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBsaW5lbnVtYmVyIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICJIaeG7g24gdGjhu4sgc+G7kSBkw7JuZyBn4buRYyAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDcKK21zZ2lkICJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIgorbXNnc3RyICJIaeG7g24gdGjhu4sg4bufIMSR4buLbmggZOG6oW5nIMSRw6MgdGhp4bq/dCBr4bq/IGNobyBz4buxIHRpw6p1IGTDuW5nIGLhurFuZyBtw6F5IgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwOAorbXNnaWQgIlNob3cgcG9yY2VsYWluIGZvcm1hdCB3aXRoIHBlci1saW5lIGNvbW1pdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIMSR4buLbmggZOG6oW5nIOKAnHBvcmNlbGFpbuKAnSB24bubaSB0aMO0bmcgdGluIGNodXnhu4NuIGdpYW8gbeG7l2kgZMOybmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA5Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiRMO5bmcgY8O5bmcgY2jhur8gxJHhu5kgeHXhuqV0IHJhIHbhu5tpIGdpdC1hbm5vdGF0ZSAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTAKK21zZ2lkICJTaG93IHJhdyB0aW1lc3RhbXAgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkhp4buDbiB0aOG7iyBk4bqldSB24bq/dCB0aOG7nWkgZ2lhbiBk4bqhbmcgdGjDtCAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTEKK21zZ2lkICJTaG93IGxvbmcgY29tbWl0IFNIQTEgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIkhp4buDbiB0aOG7iyBTSEExIGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gZOG6oW5nIGTDoGkgKE3hurdjIMSR4buLbmg6IG9mZikiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTEyCittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiS2jDtG5nIGhp4buDbiB0aOG7iyB0w6puIHTDoWMgZ2nhuqMgdsOgIGThuqV1IHbhur90IHRo4budaSBnaWFuIChN4bq3YyDEkeG7i25oOiBvZmYpIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMworbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAiSGnhu4NuIHRo4buLIHRoxrAgxJFp4buHbiB04butIGPhu6dhIHTDoWMgZ2nhuqMgdGhheSB2w6wgdMOqbiAoTeG6t2MgxJHhu4tuaDogb2ZmKSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTQKK21zZ2lkICJJZ25vcmUgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyIKK21zZ3N0ciAiQuG7jyBxdWEgY8OhYyBraMOhYyBiaeG7h3QgZG8ga2hv4bqjbmcgdHLhuq9uZyBnw6J5IHJhIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNQorbXNnaWQgIlNwZW5kIGV4dHJhIGN5Y2xlcyB0byBmaW5kIGJldHRlciBtYXRjaCIKK21zZ3N0ciAiVGnDqnUgdGjhu6UgdGjDqm0gbsSDbmcgdMOgaSBuZ3V5w6puIG3DoXkgbcOzYyDEkeG7gyB0w6xtIGtp4bq/bSB04buRdCBoxqFuIG7hu69hIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNgorbXNnaWQgIlVzZSByZXZpc2lvbnMgZnJvbSA8ZmlsZT4gaW5zdGVhZCBvZiBjYWxsaW5nIGdpdC1yZXYtbGlzdCIKK21zZ3N0ciAiIgorIlPhu60gZOG7pW5nIMSRaeG7g20geMOpdCBkdXnhu4d0IChyZXZpc2lvbikgdOG7qyA8dOG6rXAgdGluPiB0aGF5IHbDrCBn4buNaSDigJxnaXQtcmV2LWxpc3TigJ0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE3Cittc2dpZCAiVXNlIDxmaWxlPidzIGNvbnRlbnRzIGFzIHRoZSBmaW5hbCBpbWFnZSIKK21zZ3N0ciAiU+G7rSBk4bulbmcgbuG7mWkgZHVuZyBj4bunYSA8dOG6rXAgdGluPiBuaMawIGzDoCDhuqNuaCBjdeG7kWkgY8O5bmciCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE4IGJ1aWx0aW4vYmxhbWUuYzoyNTE5Cittc2dpZCAic2NvcmUiCittc2dzdHIgIsSRaeG7g20gc+G7kSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTgKK21zZ2lkICJGaW5kIGxpbmUgY29waWVzIHdpdGhpbiBhbmQgYWNyb3NzIGZpbGVzIgorbXNnc3RyICJUw6xtIGPDoWMgYuG6o24gc2FvIGNow6lwIGTDsm5nIHRyb25nIHbDoCBuZ2FuZyBxdWEgdOG6rXAgdGluIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxOQorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIlTDrG0gY8OhYyBkaSBjaHV54buDbiBkw7JuZyB0cm9uZyB2w6AgbmdhbmcgcXVhIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MjAKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MjAKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAiWOG7rSBsw70gY2jhu4kgZMOybmcgdsO5bmcgbixtLCB0w61uaCB04burIDEiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGlzIHN0cmluZyBpcyB1c2VkIHRvIHRlbGwgdXMgdGhlIG1heGltdW0KKyMuIGRpc3BsYXkgd2lkdGggZm9yIGEgcmVsYXRpdmUgdGltZXN0YW1wIGluICJnaXQgYmxhbWUiCisjLiBvdXRwdXQuICBGb3IgQyBsb2NhbGUsICI0IHllYXJzLCAxMSBtb250aHMgYWdvIiwgd2hpY2gKKyMuIHRha2VzIDIyIHBsYWNlcywgaXMgdGhlIGxvbmdlc3QgYW1vbmcgdmFyaW91cyBmb3JtcyBvZgorIy4gcmVsYXRpdmUgdGltZXN0YW1wcywgYnV0IHlvdXIgbGFuZ3VhZ2UgbWF5IG5lZWQgbW9yZSBvcgorIy4gZmV3ZXIgZGlzcGxheSBjb2x1bW5zLgorIzogYnVpbHRpbi9ibGFtZS5jOjI2MDEKK21zZ2lkICI0IHllYXJzLCAxMSBtb250aHMgYWdvIgorbXNnc3RyICI0IG7Eg20sIDExIHRow6FuZyB0csaw4bubYyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNAorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPGPDoWMtdMO5eS1jaOG7jW4+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI1Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLWxdIFstZl0gPGJyYW5jaC1uYW1lPiBbPHN0YXJ0LXBvaW50Pl0iCittc2dzdHIgImdpdCBicmFuY2ggWzxjw6FjLXTDuXktY2jhu41uPl0gWy1sXSBbLWZdIDx0w6puLW5ow6FuaD4gWzzEkWnhu4NtLcSR4bqndT5dIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXJdICgtZCB8IC1EKSA8YnJhbmNoLW5hbWU+Li4uIgorbXNnc3RyICJnaXQgYnJhbmNoIFs8Y8OhYy10w7l5LWNo4buNbj5dIFstcl0gKC1kIHwgLUQpIDx0w6puLW5ow6FuaD4g4oCmIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI3Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSAoLW0gfCAtTSkgWzxvbGQtYnJhbmNoPl0gPG5ldy1icmFuY2g+IgorbXNnc3RyICJnaXQgYnJhbmNoIFs8Y8OhYy10w7l5LWNo4buNbj5dICgtbSB8IC1NKSBbPG5ow6FuaC1jxak+XSA8bmjDoW5oLW3hu5tpPiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImRlbGV0aW5nIGJyYW5jaCAnJXMnIHRoYXQgaGFzIGJlZW4gbWVyZ2VkIHRvXG4iCisiICAgICAgICAgJyVzJywgYnV0IG5vdCB5ZXQgbWVyZ2VkIHRvIEhFQUQuIgorbXNnc3RyICIiCisixJFhbmcgeMOzYSBuaMOhbmgg4oCcJXPigJ0gbcOgIG7DsyBs4bqhaSDEkcOjIMSRxrDhu6NjIGjDsmEgdHLhu5luIHbDoG9cbiIKKyIgICAgICAgICDigJwlc+KAnSwgbmjGsG5nIHbhuqtuIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIHbDoG8gSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorImtow7RuZyB4w7NhIG5ow6FuaCDigJwlc+KAnSBjw6FpIG3DoCBjaMawYSDEkcaw4bujYyBow7JhIHRy4buZbiB2w6BvXG4iCisiICAgICAgICAg4oCcJXPigJ0sIGNobyBkw7kgbMOgIG7DsyDEkcOjIMSRxrDhu6NjIGjDsmEgdHLhu5luIHbDoG8gSEVBRC4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHTDrG0ga2nhur9tIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIGNobyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisiTmjDoW5oIOKAnCVz4oCdIGtow7RuZyDEkcaw4bujYyB0cuG7mW4gbeG7mXQgY8OhY2ggxJHhuqd5IMSR4bunLlxuIgorIk7hur91IGLhuqFuIHRo4buxYyBz4buxIG114buRbiB4w7NhIG7DsywgdGjDrCBjaOG6oXkgbOG7h25oIOKAnGdpdCBicmFuY2ggLUQgJXPigJ0uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE4NQorbXNnaWQgIlVwZGF0ZSBvZiBjb25maWctZmlsZSBmYWlsZWQiCittc2dzdHIgIkPhuq1wIG5o4bqtdCB04bqtcCB0aW4gY+G6pXUgaMOsbmggZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjEzCittc2dpZCAiY2Fubm90IHVzZSAtYSB3aXRoIC1kIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZMO5bmcgdMO5eSBjaOG7jW4gLWEgduG7m2kgLWQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjE5Cittc2dpZCAiQ291bGRuJ3QgbG9vayB1cCBjb21taXQgb2JqZWN0IGZvciBIRUFEIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSBraeG6v20gxJHhu5FpIHTGsOG7o25nIGNodXnhu4NuIGdpYW8gY2hvIEhFQUQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBkZWxldGUgdGhlIGJyYW5jaCAnJXMnIHdoaWNoIHlvdSBhcmUgY3VycmVudGx5IG9uLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHjDs2EgbmjDoW5oIOKAnCVz4oCdIGPDoWkgbcOgIGLhuqFuIGhp4buHbiBuYXkgxJFhbmcg4bufLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSBuaMOhbmggdGhlbyBkw7VpIG3DoXkgY2jhu6cg4oCcJXPigJ0uIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0NAorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBub3QgZm91bmQuIgorbXNnc3RyICJraMO0bmcgdMOsbSB0aOG6pXkgbmjDoW5oIOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJFhbmcgeMOzYSBuaMOhbmggdGhlbyBkw7VpIG3DoXkgY2jhu6cg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIGRlbGV0aW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgeMOzYSBi4buPIG5ow6FuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICLEkMOjIHjDs2EgbmjDoW5oIHRoZW8gZMO1aSBtw6F5IGNo4bunIFwiJXNcIiAodOG7q25nIGzDoCAlcykuXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkRlbGV0ZWQgYnJhbmNoICVzICh3YXMgJXMpLlxuIgorbXNnc3RyICJOaMOhbmgg4oCcJXPigJ0gxJHDoyBi4buLIHjDs2EgKHThu6tuZyBsw6AgJXMpXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IHBvaW50IGF0IGEgY29tbWl0IgorbXNnc3RyICJuaMOhbmgg4oCcJXPigJ0ga2jDtG5nIGNo4buJIMSR4bq/biBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8gY+G6oyIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBnb25lXSIKK21zZ3N0ciAiWyVzOiDEkcOjIHJhIMSRaV0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDU3CisjLCBjLWZvcm1hdAorbXNnaWQgIlslc10iCittc2dzdHIgIlslc10iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYmVoaW5kICVkXSIKK21zZ3N0ciAiWyVzOiDEkeG7qW5nIHNhdSAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY0CisjLCBjLWZvcm1hdAorbXNnaWQgIltiZWhpbmQgJWRdIgorbXNnc3RyICJbxJHhurFuZyBzYXUgJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2OAorIywgYy1mb3JtYXQKK21zZ2lkICJbJXM6IGFoZWFkICVkXSIKK21zZ3N0ciAiWyVzOiBwaMOtYSB0csaw4bubYyAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDcwCisjLCBjLWZvcm1hdAorbXNnaWQgIlthaGVhZCAlZF0iCittc2dzdHIgIltwaMOtYSB0csaw4bubYyAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDczCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYWhlYWQgJWQsIGJlaGluZCAlZF0iCittc2dzdHIgIlslczogdHLGsOG7m2MgJWQsIHNhdSAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlthaGVhZCAlZCwgYmVoaW5kICVkXSIKK21zZ3N0ciAiW3RyxrDhu5tjICVkLCBzYXUgJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ4OQorbXNnaWQgIiAqKioqIGludmFsaWQgcmVmICoqKioiCittc2dzdHIgIiAqKioqIHRoYW0gY2hp4bq/dSBraMO0bmcgaOG7o3AgbOG7hyAqKioqIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIobm8gYnJhbmNoLCByZWJhc2luZyAlcykiCittc2dzdHIgIihraMO0bmcgbmjDoW5oLCDEkWFuZyBj4bqjaSB04buVICVzKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiKG5vIGJyYW5jaCwgYmlzZWN0IHN0YXJ0ZWQgb24gJXMpIgorbXNnc3RyICIoa2jDtG5nIG5ow6FuaCwgZGkgY2h1eeG7g24gbuG7rWEgYsaw4bubYyDEkcaw4bujYyBi4bqvdCDEkeG6p3UgdOG6oWkgJXMpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCittc2dzdHIgIihIRUFEIMSRxrDhu6NjIHTDoWNoIHLhu51pIHThuqFpICVzKSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiKEhFQUQgZGV0YWNoZWQgZnJvbSAlcykiCittc2dzdHIgIihIRUFEIMSRxrDhu6NjIHTDoWNoIHLhu51pIHThu6sgJXMpIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU5NgorbXNnaWQgIihubyBicmFuY2gpIgorbXNnc3RyICIoa2jDtG5nIG5ow6FuaCkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NjQzCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAnJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcg4oCcJXPigJ0ga2jDtG5nIGNo4buJIMSR4bq/biBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIG7DoG8gY+G6oyIKKworIzogYnVpbHRpbi9icmFuY2guYzo2OTEKK21zZ2lkICJzb21lIHJlZnMgY291bGQgbm90IGJlIHJlYWQiCittc2dzdHIgIm3hu5l0IHPhu5EgdGhhbSBjaGnhur91IMSRw6Mga2jDtG5nIHRo4buDIMSR4buNYyDEkcaw4bujYyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MDQKK21zZ2lkICJjYW5ub3QgcmVuYW1lIHRoZSBjdXJyZW50IGJyYW5jaCB3aGlsZSBub3Qgb24gYW55LiIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buVaSB0w6puIG5ow6FuaCBoaeG7h24gaMOgbmggdHJvbmcga2hpIG7DsyBjaOG6s25nIOG7nyDEkcOidSBj4bqjLiIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBicmFuY2ggbmFtZTogJyVzJyIKK21zZ3N0ciAiVMOqbiBuaMOhbmgga2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcyOQorbXNnaWQgIkJyYW5jaCByZW5hbWUgZmFpbGVkIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgxJHhu5VpIHTDqm4gbmjDoW5oIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczMworIywgYy1mb3JtYXQKK21zZ2lkICJSZW5hbWVkIGEgbWlzbmFtZWQgYnJhbmNoICclcycgYXdheSIKK21zZ3N0ciAixJDDoyDEkeG7lWkgdMOqbiBuaMOhbmgga2h1eeG6v3QgZGFuaCDigJwlc+KAnSDEkWkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCByZW5hbWVkIHRvICVzLCBidXQgSEVBRCBpcyBub3QgdXBkYXRlZCEiCittc2dzdHIgIk5ow6FuaCBi4buLIMSR4buVaSB0w6puIHRow6BuaCAlcywgbmjGsG5nIEhFQUQgbOG6oWkga2jDtG5nIMSRxrDhu6NjIGPhuq1wIG5o4bqtdCEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzQ0Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICJOaMOhbmggYuG7iyDEkeG7lWkgdMOqbiwgbmjGsG5nIGPhuq1wIG5o4bqtdCB04bqtcCB0aW4gY+G6pXUgaMOsbmggZ+G6t3AgbOG7l2kiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzU5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAidMOqbiDEkeG7kWkgdMaw4bujbmcgZOG7iyBow6xuaCAlcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGJyYW5jaCBkZXNjcmlwdGlvbiB0ZW1wbGF0ZTogJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgdsOgbyBt4bqrdSBtw7QgdOG6oyBuaMOhbmg6ICVzIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxMQorbXNnaWQgIkdlbmVyaWMgb3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gY2h1bmciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODEzCittc2dpZCAic2hvdyBoYXNoIGFuZCBzdWJqZWN0LCBnaXZlIHR3aWNlIGZvciB1cHN0cmVhbSBicmFuY2giCittc2dzdHIgImhp4buDbiB0aOG7iyBtw6MgYsSDbSB2w6AgY2jhu6cgxJHhu4EsIMSRxrBhIHJhIGhhaSBs4bqnbiBjaG8gbmjDoW5oIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNAorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgImtow7RuZyB4deG6pXQgY8OhYyB0aMO0bmcgdGluIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNQorbXNnaWQgInNldCB1cCB0cmFja2luZyBtb2RlIChzZWUgZ2l0LXB1bGwoMSkpIgorbXNnc3RyICJjw6BpIMSR4bq3dCBjaOG6vyDEkeG7mSB0aGVvIGTDtWkgKHhlbSBnaXQtcHVsbCgxKSkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODE3Cittc2dpZCAiY2hhbmdlIHVwc3RyZWFtIGluZm8iCittc2dzdHIgInRoYXkgxJHhu5VpIHRow7RuZyB0aW4gdGjGsOG7o25nIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICJ0w7QgbcOgdSBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIyCittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAidGhhbyB0w6FjIHRyw6puIG5ow6FuaCDigJxyZW1vdGUtdHJhY2tpbmfigJ0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODI1IGJ1aWx0aW4vYnJhbmNoLmM6ODMxIGJ1aWx0aW4vYnJhbmNoLmM6ODUyCisjOiBidWlsdGluL2JyYW5jaC5jOjg1OCBidWlsdGluL2NvbW1pdC5jOjE1ODAgYnVpbHRpbi9jb21taXQuYzoxNTgxCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODIgYnVpbHRpbi9jb21taXQuYzoxNTgzIGJ1aWx0aW4vdGFnLmM6NjE4CisjOiBidWlsdGluL3RhZy5jOjYyNAogbXNnaWQgImNvbW1pdCIKLW1zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyIKK21zZ3N0ciAibOG6p25fY2h1eeG7g25fZ2lhbyIKIAotIzogZ2l0azoyMjk5IGdpdGs6MjMwMSBnaXRrOjQ2ODcgZ2l0azo0NzEwIGdpdGs6NDczNCBnaXRrOjY3NTUgZ2l0azo2ODI3Ci0jOiBnaXRrOjY5MTIKLW1zZ2lkICJjb250YWluaW5nOiIKLW1zZ3N0ciAiY8OzIGNo4bupYToiCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNiBidWlsdGluL2JyYW5jaC5jOjgzMgorbXNnaWQgInByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIG5ow6FuaCBtw6AgbsOzIGNo4bupYSBs4bqnbiBjaHV54buDbiBnaWFvIgogCi0jOiBnaXRrOjIzMDIgZ2l0azozNTI2IGdpdGs6MzUzMSBnaXRrOjQ3NjMKLW1zZ2lkICJ0b3VjaGluZyBwYXRoczoiCi1tc2dzdHIgIsSRYW5nIGNo4bqhbSDEkcaw4budbmcgZOG6q246IgorIzogYnVpbHRpbi9icmFuY2guYzo4MzgKK21zZ2lkICJTcGVjaWZpYyBnaXQtYnJhbmNoIGFjdGlvbnM6IgorbXNnc3RyICJIw6BuaCDEkeG7mW5nIGdpdC1icmFuY2g6IgogCi0jOiBnaXRrOjIzMDMgZ2l0azo0Nzc3Ci1tc2dpZCAiYWRkaW5nL3JlbW92aW5nIHN0cmluZzoiCi1tc2dzdHIgInRow6ptL2fhu6EgYuG7jyBjaHXhu5dpOiIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODM5Cittc2dpZCAibGlzdCBib3RoIHJlbW90ZS10cmFja2luZyBhbmQgbG9jYWwgYnJhbmNoZXMiCittc2dzdHIgImxp4buHdCBrw6ogY+G6oyBuaMOhbmgg4oCccmVtb3RlLXRyYWNraW5n4oCdIHbDoCBu4buZaSBi4buZIgogCi0jOiBnaXRrOjIzMDQgZ2l0azo0Nzc5Ci1tc2dpZCAiY2hhbmdpbmcgbGluZXMgbWF0Y2hpbmc6IgotbXNnc3RyICJuaOG7r25nIGTDsm5nIHRoYXkgxJHhu5VpIGto4bubcCBt4bqrdToiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0MQorbXNnaWQgImRlbGV0ZSBmdWxseSBtZXJnZWQgYnJhbmNoIgorbXNnc3RyICJ4w7NhIG3hu5l0IHRvw6BuIGLhu5kgbmjDoW5oIMSRw6MgaMOyYSB0cuG7mW4iCiAKLSM6IGdpdGs6MjMxMyBnaXRrOjIzMTUgZ2l0azo0NzY2Ci1tc2dpZCAiRXhhY3QiCi1tc2dzdHIgIkNow61uaCB4w6FjIgorIzogYnVpbHRpbi9icmFuY2guYzo4NDIKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICJ4w7NhIG5ow6FuaCAoY2hvIGTDuSBsw6AgY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4pIgogCi0jOiBnaXRrOjIzMTUgZ2l0azo0ODU0IGdpdGs6NjcyMwotbXNnaWQgIklnbkNhc2UiCi1tc2dzdHIgIkJxdWFIdCIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgImRpIGNodXnhu4NuIGhheSDEkeG7lWkgdMOqbiBt4buZdCBuaMOhbmggdsOgIHJlZmxvZyBj4bunYSBuw7MiCiAKLSM6IGdpdGs6MjMxNSBnaXRrOjQ3MzYgZ2l0azo0ODUyIGdpdGs6NjcxOQotbXNnaWQgIlJlZ2V4cCIKLW1zZ3N0ciAiQlRDUSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ0Cittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAiZGkgY2h1eeG7g24gaG/hurdjIMSR4buVaSB0w6puIG3hu5l0IG5ow6FuaCBuZ2F5IGPhuqMga2hpIMSRw61jaCDEkcOjIGPDsyBz4bq1biIKIAotIzogZ2l0azoyMzE3IGdpdGs6MjMxOCBnaXRrOjQ4NzQgZ2l0azo0OTA0IGdpdGs6NDkxMSBnaXRrOjY4NDggZ2l0azo2OTE2Ci1tc2dpZCAiQWxsIGZpZWxkcyIKLW1zZ3N0ciAiTeG7jWkgdHLGsOG7nW5nIgorIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6FjIHTDqm4gbmjDoW5oIgogCi0jOiBnaXRrOjIzMTggZ2l0azo0ODcxIGdpdGs6NDkwNCBnaXRrOjY3ODYKLW1zZ2lkICJIZWFkbGluZSIKLW1zZ3N0ciAiTuG7mWkgZHVuZyBjaMOtbmgiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NgorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICJ04bqhbyByZWZsb2cgY+G7p2EgbmjDoW5oIgogCi0jOiBnaXRrOjIzMTkgZ2l0azo0ODcxIGdpdGs6Njc4NiBnaXRrOjY5MTYgZ2l0azo3Mzg5Ci1tc2dpZCAiQ29tbWVudHMiCi1tc2dzdHIgIkdoaSBjaMO6IgorIzogYnVpbHRpbi9icmFuY2guYzo4NDgKK21zZ2lkICJlZGl0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGJyYW5jaCIKK21zZ3N0ciAic+G7rWEgbcO0IHThuqMgY2hvIG5ow6FuaCIKIAotIzogZ2l0azoyMzE5IGdpdGs6NDg3MSBnaXRrOjQ4NzYgZ2l0azo0OTExIGdpdGs6Njc4NiBnaXRrOjczMjQgZ2l0azo4ODMwCi0jOiBnaXRrOjg4NDUKLW1zZ2lkICJBdXRob3IiCi1tc2dzdHIgIlTDoWMgZ2nhuqMiCisjOiBidWlsdGluL2JyYW5jaC5jOjg0OQorbXNnaWQgImZvcmNlIGNyZWF0aW9uLCBtb3ZlL3JlbmFtZSwgZGVsZXRpb24iCittc2dzdHIgImJ14buZYyB04bqhbywgZGkgY2h1eeG7g24vxJHhu5VpIHTDqm4sIHjDs2EiCiAKLSM6IGdpdGs6MjMxOSBnaXRrOjQ4NzEgZ2l0azo2Nzg2IGdpdGs6NzMyNgotbXNnaWQgIkNvbW1pdHRlciIKLW1zZ3N0ciAiTmfGsOG7nWkgY2h1eeG7g24gZ2lhbyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODUyCittc2dpZCAicHJpbnQgb25seSBub3QgbWVyZ2VkIGJyYW5jaGVzIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgY8OhYyBuaMOhbmggY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCiAKLSM6IGdpdGs6MjM1MAotbXNnaWQgIlNlYXJjaCIKLW1zZ3N0ciAiVMOsbSBraeG6v20iCisjOiBidWlsdGluL2JyYW5jaC5jOjg1OAorbXNnaWQgInByaW50IG9ubHkgbWVyZ2VkIGJyYW5jaGVzIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgY8OhYyBuaMOhbmggxJHDoyBow7JhIHRy4buZbiIKIAotIzogZ2l0azoyMzU4Ci1tc2dpZCAiRGlmZiIKLW1zZ3N0ciAiU28gc8OhbmgiCisjOiBidWlsdGluL2JyYW5jaC5jOjg2MgorbXNnaWQgImxpc3QgYnJhbmNoZXMgaW4gY29sdW1ucyIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6FjIG5ow6FuaCB0cm9uZyBjw6FjIGPhu5l0IgogCi0jOiBnaXRrOjIzNjAKLW1zZ2lkICJPbGQgdmVyc2lvbiIKLW1zZ3N0ciAiUGhpw6puIGLhuqNuIGPFqSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODc1Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBwaMOibiBnaeG6o2kgSEVBRCBuaMawIGzDoCBt4buZdCB0aGFtIGNoaeG6v3UgaOG7o3AgbOG7hy4iCiAKLSM6IGdpdGs6MjM2MgotbXNnaWQgIk5ldyB2ZXJzaW9uIgotbXNnc3RyICJQaGnDqm4gYuG6o24gbeG7m2kiCisjOiBidWlsdGluL2JyYW5jaC5jOjg3OSBidWlsdGluL2Nsb25lLmM6NjkwCittc2dpZCAiSEVBRCBub3QgZm91bmQgYmVsb3cgcmVmcy9oZWFkcyEiCittc2dzdHIgImtow7RuZyB0w6xtIHRo4bqleSBIRUFEIOG7nyBkxrDhu5tpIHJlZnMvaGVhZHMhIgogCi0jOiBnaXRrOjIzNjQKLW1zZ2lkICJMaW5lcyBvZiBjb250ZXh0IgotbXNnc3RyICJDw6FjIGTDsm5nIGPhu6dhIG7hu5lpIGR1bmciCisjOiBidWlsdGluL2JyYW5jaC5jOjkwMQorbXNnaWQgIi0tY29sdW1uIGFuZCAtLXZlcmJvc2UgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAidMO5eSBjaOG7jW4gLS1jb2x1bW4gdsOgIC0tdmVyYm9zZSB4dW5nIGto4bqvYyBuaGF1IgogCi0jOiBnaXRrOjIzNzQKLW1zZ2lkICJJZ25vcmUgc3BhY2UgY2hhbmdlIgotbXNnc3RyICJLaMO0bmcgeMOpdCDEkeG6v24gdGhheSDEkeG7lWkgZG8ga2hv4bqjbmcgdHLhuq9uZyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTEyIGJ1aWx0aW4vYnJhbmNoLmM6OTUxCittc2dpZCAiYnJhbmNoIG5hbWUgcmVxdWlyZWQiCittc2dzdHIgImPhuqduIGNo4buJIHJhIHTDqm4gbmjDoW5oIgogCi0jOiBnaXRrOjIzNzggZ2l0azoyMzgwIGdpdGs6Nzk1OSBnaXRrOjgyMDYKLW1zZ2lkICJMaW5lIGRpZmYiCi1tc2dzdHIgIktow6FjIGJp4buHdCB0aGVvIGTDsm5nIgorIzogYnVpbHRpbi9icmFuY2guYzo5MjcKK21zZ2lkICJDYW5ub3QgZ2l2ZSBkZXNjcmlwdGlvbiB0byBkZXRhY2hlZCBIRUFEIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgxJHGsGEgcmEgbcO0IHThuqMgSEVBRCDEkcOjIHTDoWNoIHLhu51pIgogCi0jOiBnaXRrOjI0NDUKLW1zZ2lkICJQYXRjaCIKLW1zZ3N0ciAiVsOhIgorIzogYnVpbHRpbi9icmFuY2guYzo5MzIKK21zZ2lkICJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHPhu61hIG3DtCB04bqjIGNobyBuaGnhu4F1IGjGoW4gbeG7mXQgbmjDoW5oIgogCi0jOiBnaXRrOjI0NDcKLW1zZ2lkICJUcmVlIgotbXNnc3RyICJDw6J5IgorIzogYnVpbHRpbi9icmFuY2guYzo5MzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gY29tbWl0IG9uIGJyYW5jaCAnJXMnIHlldC4iCittc2dzdHIgIlbhuqtuIGNoxrBhIGNodXnhu4NuIGdpYW8gdHLDqm4gbmjDoW5oIOKAnCVz4oCdLiIKIAotIzogZ2l0azoyNjE3IGdpdGs6MjYzNwotbXNnaWQgIkRpZmYgdGhpcyAtPiBzZWxlY3RlZCIKLW1zZ3N0ciAiU28gc8OhbmggY8OhaSBuw6B5IC0+IGPDoWkgxJHDoyBjaOG7jW4iCisjOiBidWlsdGluL2JyYW5jaC5jOjk0MgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgIktow7RuZyBjw7MgbmjDoW5oIG7DoG8gY8OzIHTDqm4g4oCcJXPigJ0uIgogCi0jOiBnaXRrOjI2MTggZ2l0azoyNjM4Ci1tc2dpZCAiRGlmZiBzZWxlY3RlZCAtPiB0aGlzIgotbXNnc3RyICJTbyBzw6FuaCBjw6FpIMSRw6MgY2jhu41uIC0+IGPDoWkgbsOgeSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTU3Cittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgZm9yIGEgcmVuYW1lIG9wZXJhdGlvbiIKK21zZ3N0ciAicXXDoSBuaGnhu4F1IG5ow6FuaCBkw6BuaCBjaG8gdGhhbyB0w6FjIMSR4buVaSB0w6puIgogCi0jOiBnaXRrOjI2MTkgZ2l0azoyNjM5Ci1tc2dpZCAiTWFrZSBwYXRjaCIKLW1zZ3N0ciAiVOG6oW8gbWnhur9uZyB2w6EiCisjOiBidWlsdGluL2JyYW5jaC5jOjk2MgorbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIHRvIHNldCBuZXcgdXBzdHJlYW0iCittc2dzdHIgInF1w6Egbmhp4buBdSBuaMOhbmggxJHGsOG7o2MgxJHhurd0IGNobyB0aMaw4bujbmcgbmd14buTbiBt4bubaSIKIAotIzogZ2l0azoyNjIwIGdpdGs6OTI1NAotbXNnaWQgIkNyZWF0ZSB0YWciCi1tc2dzdHIgIlThuqFvIHRo4bq7IgorIzogYnVpbHRpbi9icmFuY2guYzo5NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNvdWxkIG5vdCBzZXQgdXBzdHJlYW0gb2YgSEVBRCB0byAlcyB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIMSR4bq3dCB0aMaw4bujbmcgbmd14buTbiBj4bunYSBIRUFEIHRow6BuaCAlcyBraGkgbcOgIG7DsyBjaOG6s25nIGNo4buJIMSR4bq/biBuaMOhbmggIgorIm7DoG8gY+G6oy4iCiAKLSM6IGdpdGs6MjYyMSBnaXRrOjkzNzEKLW1zZ2lkICJXcml0ZSBjb21taXQgdG8gZmlsZSIKLW1zZ3N0ciAiR2hpIGzhuqduIGNodXnhu4NuIGdpYW8gcmEgdOG6rXAgdGluIgorIzogYnVpbHRpbi9icmFuY2guYzo5NjkgYnVpbHRpbi9icmFuY2guYzo5OTEgYnVpbHRpbi9icmFuY2guYzoxMDEyCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIHN1Y2ggYnJhbmNoICclcyciCittc2dzdHIgImtow7RuZyBjw7MgbmjDoW5oIG7DoG8gbmjGsCB0aOG6vyDigJwlc+KAnSIKIAotIzogZ2l0azoyNjIyIGdpdGs6OTQyOAotbXNnaWQgIkNyZWF0ZSBuZXcgYnJhbmNoIgotbXNnc3RyICJU4bqhbyBuaMOhbmggbeG7m2kiCisjOiBidWlsdGluL2JyYW5jaC5jOjk3MworIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBkb2VzIG5vdCBleGlzdCIKK21zZ3N0ciAiY2jGsGEgY8OzIG5ow6FuaCDigJwlc+KAnSIKIAotIzogZ2l0azoyNjIzCi1tc2dpZCAiQ2hlcnJ5LXBpY2sgdGhpcyBjb21taXQiCi1tc2dzdHIgIkNoZXJyeS1waWNrIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgInF1w6Egbmhp4buBdSBuaMOhbmggxJHhu4MgYuG7jyDEkeG6t3QgdGjGsOG7o25nIG5ndeG7k24iCiAKLSM6IGdpdGs6MjYyNAotbXNnaWQgIlJlc2V0IEhFQUQgYnJhbmNoIHRvIGhlcmUiCi1tc2dzdHIgIsSQ4bq3dCBs4bqhaSBIRUFEIGPhu6dhIG5ow6FuaCB2w6BvIMSRw6J5IgorIzogYnVpbHRpbi9icmFuY2guYzo5ODkKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICJraMO0bmcgdGjhu4MgYuG7jyDEkeG6t3QgdGjGsOG7o25nIG5ndeG7k24gY+G7p2EgSEVBRCBraMO0bmcgY2jhu4kgxJHhur9uIG3hu5l0IG5ow6FuaCBuw6BvIGPhuqMuIgogCi0jOiBnaXRrOjI2MjUKLW1zZ2lkICJNYXJrIHRoaXMgY29tbWl0IgotbXNnc3RyICLEkMOhbmggZOG6pXUgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6B5IgorIzogYnVpbHRpbi9icmFuY2guYzo5OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICclcycgaGFzIG5vIHVwc3RyZWFtIGluZm9ybWF0aW9uIgorbXNnc3RyICJOaMOhbmgg4oCcJXPigJ0ga2jDtG5nIGPDsyB0aMO0bmcgdGluIHRoxrDhu6NuZyBuZ3Xhu5NuIgogCi0jOiBnaXRrOjI2MjYKLW1zZ2lkICJSZXR1cm4gdG8gbWFyayIKLW1zZ3N0ciAiUXVheSBs4bqhaSB24buLIHRyw60gZOG6pXUiCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMDkKK21zZ2lkICJpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGNyZWF0ZSAnSEVBRCcgbWFudWFsbHkiCittc2dzdHIgImtow7RuZyBo4bujcCBsw70ga2hpIHThuqFvIOKAnEhFQUTigJ0gdGjhu6cgY8O0bmciCiAKLSM6IGdpdGs6MjYyNwotbXNnaWQgIkZpbmQgZGVzY2VuZGFudCBvZiB0aGlzIGFuZCBtYXJrIgotbXNnc3RyICJUw6xtIGNvbiBjaMOhdSBj4bunYSBjw6FpIG7DoHkgdsOgIGPDoWkgxJHDoyDEkcOhbmggZOG6pXUiCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMTUKK21zZ2lkICItYSBhbmQgLXIgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IG1ha2Ugc2Vuc2Ugd2l0aCBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICIiCisiaGFpIHTDuXkgY2jhu41uIC1hIHbDoCAtciDDoXAgZOG7pW5nIGNobyBs4buHbmgg4oCcZ2l0IGJyYW5jaOKAnSBraMO0bmcgaOG7o3AgbMO9IMSR4buRaSB24bubaSB0w6puICIKKyJuaMOhbmgiCiAKLSM6IGdpdGs6MjYyOAotbXNnaWQgIkNvbXBhcmUgd2l0aCBtYXJrZWQgY29tbWl0IgotbXNnc3RyICJTbyBzw6FuaCB24bubaSBs4bqnbiBjaHV54buDbiBnaWFvIMSRw6MgxJHDoW5oIGThuqV1IgorIzogYnVpbHRpbi9icmFuY2guYzoxMDE4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tIgorInRyYWNrIG9yIC0tc2V0LXVwc3RyZWFtLXRvXG4iCittc2dzdHIgIiIKKyJD4budIC0tc2V0LXVwc3RyZWFtIMSRw6MgbOG6oWMgaOG6rXUgdsOgIHPhur0gYuG7iyB4w7NhIGLhu48uIE7Dqm4gZMO5bmcgLS10cmFjayBob+G6t2MgLS1zZXQtIgorInVwc3RyZWFtLXRvXG4iCiAKLSM6IGdpdGs6MjYyOSBnaXRrOjI2NDAKLW1zZ2lkICJEaWZmIHRoaXMgLT4gbWFya2VkIGNvbW1pdCIKLW1zZ3N0ciAiU28gc8OhbmggY8OhaSBuw6B5IC0+IGzhuqduIGNodXnhu4NuIGdpYW8gxJHDoyDEkcOhbmggZOG6pXUiCi0KLSM6IGdpdGs6MjYzMCBnaXRrOjI2NDEKLW1zZ2lkICJEaWZmIG1hcmtlZCBjb21taXQgLT4gdGhpcyIKLW1zZ3N0ciAiU28gc8OhbmggbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIMSRw6FuaCBk4bqldSAtPiBjw6FpIG7DoHkiCi0KLSM6IGdpdGs6MjYzMQotbXNnaWQgIlJldmVydCB0aGlzIGNvbW1pdCIKLW1zZ3N0ciAiSG/DoG4gbOG6oWkgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6B5IgotCi0jOiBnaXRrOjI2NDcKLW1zZ2lkICJDaGVjayBvdXQgdGhpcyBicmFuY2giCi1tc2dzdHIgIkzhuqV5IHJhIG5ow6FuaCBuw6B5IgotCi0jOiBnaXRrOjI2NDgKLW1zZ2lkICJSZW1vdmUgdGhpcyBicmFuY2giCi1tc2dzdHIgIkfhu6EgYuG7jyBuaMOhbmggbsOgeSIKLQotIzogZ2l0azoyNjQ5Ci1tc2dpZCAiQ29weSBicmFuY2ggbmFtZSIKLW1zZ3N0ciAiQ2jDqXAgdMOqbiBuaMOhbmgiCi0KLSM6IGdpdGs6MjY1NgotbXNnaWQgIkhpZ2hsaWdodCB0aGlzIHRvbyIKLW1zZ3N0ciAiQ8WpbmcgdMO0IHPDoW5nIG7DsyIKLQotIzogZ2l0azoyNjU3Ci1tc2dpZCAiSGlnaGxpZ2h0IHRoaXMgb25seSIKLW1zZ3N0ciAiQ2jhu4kgdMO0IHPDoW5nIGPDoWkgbsOgeSIKLQotIzogZ2l0azoyNjU4Ci1tc2dpZCAiRXh0ZXJuYWwgZGlmZiIKLW1zZ3N0ciAiZGlmZiB04burIGLDqm4gbmdvw6BpIgotCi0jOiBnaXRrOjI2NTkKLW1zZ2lkICJCbGFtZSBwYXJlbnQgY29tbWl0IgotbXNnc3RyICJYZW0gY8O0bmcgdHLhuqFuZyBs4bqnbiBjaHV54buDbiBnaWFvIGNoYSBt4bq5IgotCi0jOiBnaXRrOjI2NjAKLW1zZ2lkICJDb3B5IHBhdGgiCi1tc2dzdHIgIkNow6lwIMSRxrDhu51uZyBk4bqrbiIKLQotIzogZ2l0azoyNjY3Ci1tc2dpZCAiU2hvdyBvcmlnaW4gb2YgdGhpcyBsaW5lIgotbXNnc3RyICJIaeG7g24gdGjhu4sgbmd1ecOqbiBn4buRYyBj4bunYSBkw7JuZyBuw6B5IgotCi0jOiBnaXRrOjI2NjgKLW1zZ2lkICJSdW4gZ2l0IGd1aSBibGFtZSBvbiB0aGlzIGxpbmUiCi1tc2dzdHIgIkNo4bqheSBs4buHbmggZ2l0IGd1aSBibGFtZSBjaG8gZMOybmcgbsOgeSIKLQotIzogZ2l0azozMDE0CisjOiBidWlsdGluL2JyYW5jaC5jOjEwMzUKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgogIlxuIgotIkdpdGsgLSBhIGNvbW1pdCB2aWV3ZXIgZm9yIGdpdFxuIgotIlxuIgotIkNvcHlyaWdodCDCqSAyMDA1LTIwMTQgUGF1bCBNYWNrZXJyYXNcbiIKLSJcbiIKLSJVc2UgYW5kIHJlZGlzdHJpYnV0ZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIgotbXNnc3RyICIiCi0iXG4iCi0iR2l0ayAtIOG7qW5nIGThu6VuZyDEkeG7gyB4ZW0gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGTDoG5oIGNobyBnaXRcbiIKLSJcbiIKLSJC4bqjbiBxdXnhu4FuIMKpIDIwMDUtMjAxNCBQYXVsIE1hY2tlcnJhc1xuIgotIlxuIgotIkTDuW5nIHbDoCBwaMOibiBwaOG7kWkgbOG6oWkgcGjhuqduIG3hu4FtIG7DoHkgdGhlbyBjw6FjIMSRaeG7gXUga2hv4bqjbiBj4bunYSBHaeG6pXkgUGjDqXAgQ8O0bmcgR05VIgotCi0jOiBnaXRrOjMwMjIgZ2l0azozMDg5IGdpdGs6OTg1NwotbXNnaWQgIkNsb3NlIgotbXNnc3RyICLEkMOzbmciCi0KLSM6IGdpdGs6MzA0MwotbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzIgotbXNnc3RyICJU4buVIGjhu6NwIHBow61tIGdpdGsiCi0KLSM6IGdpdGs6MzA0NgotbXNnaWQgIkdpdGsga2V5IGJpbmRpbmdzOiIKLW1zZ3N0ciAiVOG7lSBo4bujcCBwaMOtbSBnaXRrOiIKLQotIzogZ2l0azozMDQ4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVE+XHRcdFF1aXQiCi1tc2dzdHIgIjwlcy1RPlx0XHRUaG/DoXQiCi0KLSM6IGdpdGs6MzA0OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1XPlx0XHRDbG9zZSB3aW5kb3ciCi1tc2dzdHIgIjwlcy1XPlx0XHTEkMOzbmcgY+G7rWEgc+G7lSIKLQotIzogZ2l0azozMDUwCi1tc2dpZCAiPEhvbWU+XHRcdE1vdmUgdG8gZmlyc3QgY29tbWl0IgotbXNnc3RyICI8SG9tZT5cdFx0Q2h1eeG7g24gxJHhur9uIGzhuqduIGNodXnhu4NuIGdpYW8gxJHhuqd1IHRpw6puIgotCi0jOiBnaXRrOjMwNTEKLW1zZ2lkICI8RW5kPlx0XHRNb3ZlIHRvIGxhc3QgY29tbWl0IgotbXNnc3RyICI8RW5kPlx0XHRDaHV54buDbiDEkeG6v24gbOG6p24gY2h1eeG7g24gZ2lhbyBjdeG7kWkiCi0KLSM6IGdpdGs6MzA1MgotbXNnaWQgIjxVcD4sIHAsIGtcdE1vdmUgdXAgb25lIGNvbW1pdCIKLW1zZ3N0ciAiPFVwPiwgcCwga1x0RGkgY2h1eeG7g24gbMOqbiBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXRrOjMwNTMKLW1zZ2lkICI8RG93bj4sIG4sIGpcdE1vdmUgZG93biBvbmUgY29tbWl0IgotbXNnc3RyICI8RG93bj4sIG4sIGpcdERpIGNodXnhu4NuIHh14buRbmcgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyIKLQotIzogZ2l0azozMDU0Ci1tc2dpZCAiPExlZnQ+LCB6LCBoXHRHbyBiYWNrIGluIGhpc3RvcnkgbGlzdCIKLW1zZ3N0ciAiPExlZnQ+LCB6LCBoXHRRdWF5IHRy4bufIGzhuqFpIGRhbmggc8OhY2ggbOG7i2NoIHPhu60iCi0KLSM6IGdpdGs6MzA1NQotbXNnaWQgIjxSaWdodD4sIHgsIGxcdEdvIGZvcndhcmQgaW4gaGlzdG9yeSBsaXN0IgotbXNnc3RyICI8UmlnaHQ+LCB4LCBsXHREaSBjaHV54buDbiB0aeG6v3AgdHJvbmcgZGFuaCBzw6FjaCBs4buLY2ggc+G7rSIKLQotIzogZ2l0azozMDU2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLW4+XHRHbyB0byBuLXRoIHBhcmVudCBvZiBjdXJyZW50IGNvbW1pdCBpbiBoaXN0b3J5IGxpc3QiCi1tc2dzdHIgIiIKLSI8JXMtbj5cdMSQ4bq/biBjaGEgdGjhu6kgbiBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIGhp4buHbiB04bqhaSB0cm9uZyBkYW5oIHPDoWNoIGzhu4tjaCBz4butIgotCi0jOiBnaXRrOjMwNTcKLW1zZ2lkICI8UGFnZVVwPlx0TW92ZSB1cCBvbmUgcGFnZSBpbiBjb21taXQgbGlzdCIKLW1zZ3N0ciAiPFBhZ2VVcD5cdERpIGNodXnhu4NuIGzDqm4gbeG7mXQgdHJhbmcgdHJvbmcgZGFuaCBzw6FjaCBs4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXRrOjMwNTgKLW1zZ2lkICI8UGFnZURvd24+XHRNb3ZlIGRvd24gb25lIHBhZ2UgaW4gY29tbWl0IGxpc3QiCi1tc2dzdHIgIjxQYWdlRG93bj5cdERpIGNodXnhu4NuIHh14buRbmcgbeG7mXQgdHJhbmcgdHJvbmcgZGFuaCBzw6FjaCBs4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXRrOjMwNTkKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtSG9tZT5cdFNjcm9sbCB0byB0b3Agb2YgY29tbWl0IGxpc3QiCi1tc2dzdHIgIjwlcy1Ib21lPlx0Q3Xhu5luIGzDqm4gdHLDqm4gY8O5bmcgY+G7p2EgZGFuaCBzw6FjaCBs4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXRrOjMwNjAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtRW5kPlx0U2Nyb2xsIHRvIGJvdHRvbSBvZiBjb21taXQgbGlzdCIKLW1zZ3N0ciAiPCVzLUVuZD5cdEN14buZbiB4deG7kW5nIGTGsOG7m2kgY8O5bmcgY+G7p2EgZGFuaCBzw6FjaCBs4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXRrOjMwNjEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIGxpbmUiCi1tc2dzdHIgIjwlcy1VcD5cdEN14buZbiBkYW5oIHPDoWNoIGzhuqduIGNodXnhu4NuIGdpYW8gbMOqbiBt4buZdCBkw7JuZyIKLQotIzogZ2l0azozMDYyCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLURvd24+XHRTY3JvbGwgY29tbWl0IGxpc3QgZG93biBvbmUgbGluZSIKLW1zZ3N0ciAiPCVzLURvd24+XHRDdeG7mW4gZGFuaCBzw6FjaCBs4bqnbiBjaHV54buDbiBnaWFvIHh14buRbmcgbeG7mXQgZMOybmciCi0KLSM6IGdpdGs6MzA2MwotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1QYWdlVXA+XHRTY3JvbGwgY29tbWl0IGxpc3QgdXAgb25lIHBhZ2UiCi1tc2dzdHIgIjwlcy1QYWdlVXA+XHRDdeG7mW4gZGFuaCBzw6FjaCBs4bqnbiBjaHV54buDbiBnaWFvIGzDqm4gbeG7mXQgdHJhbmciCi0KLSM6IGdpdGs6MzA2NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1QYWdlRG93bj5cdFNjcm9sbCBjb21taXQgbGlzdCBkb3duIG9uZSBwYWdlIgotbXNnc3RyICI8JXMtUGFnZURvd24+XHRDdeG7mW4gZGFuaCBzw6FjaCBs4bqnbiBjaHV54buDbiBnaWFvIHh14buRbmcgbeG7mXQgdHJhbmciCi0KLSM6IGdpdGs6MzA2NQotbXNnaWQgIjxTaGlmdC1VcD5cdEZpbmQgYmFja3dhcmRzICh1cHdhcmRzLCBsYXRlciBjb21taXRzKSIKLW1zZ3N0ciAiPFNoaWZ0LVVwPlx0VMOsbSB24buBIHBow61hIHNhdSAoaMaw4bubbmcgbMOqbiB0csOqbiwgbOG6p24gY2h1eeG7g24gZ2lhbyBzYXUgbsOgeSkiCi0KLSM6IGdpdGs6MzA2NgotbXNnaWQgIjxTaGlmdC1Eb3duPlx0RmluZCBmb3J3YXJkcyAoZG93bndhcmRzLCBlYXJsaWVyIGNvbW1pdHMpIgotbXNnc3RyICIiCi0iPFNoaWZ0LURvd24+XHRUw6xtIHbhu4EgcGjDrWEgdHLGsOG7m2MgKGjGsOG7m25nIHh14buRbmcgZMaw4bubaSwgbOG6p24gY2h1eeG7g24gZ2lhbyB0csaw4bubYyDEkcOieSkiCi0KLSM6IGdpdGs6MzA2NwotbXNnaWQgIjxEZWxldGU+LCBiXHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgotbXNnc3RyICI8RGVsZXRlPiwgYlx0Q3Xhu5luIHBo4bqnbiB0csOsbmggYsOgeSBkaWZmIGzDqm4gbeG7mXQgdHJhbmciCi0KLSM6IGdpdGs6MzA2OAotbXNnaWQgIjxCYWNrc3BhY2U+XHRTY3JvbGwgZGlmZiB2aWV3IHVwIG9uZSBwYWdlIgotbXNnc3RyICI8QmFja3NwYWNlPlx0Q3Xhu5luIHBo4bqnbiB0csOsbmggYsOgeSBkaWZmIGzDqm4gbeG7mXQgdHJhbmciCi0KLSM6IGdpdGs6MzA2OQotbXNnaWQgIjxTcGFjZT5cdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIG9uZSBwYWdlIgotbXNnc3RyICI8U3BhY2U+XHRcdEN14buZbiBwaOG6p24gdHLDrG5oIGLDoHkgZGlmZiB4deG7kW5nIG3hu5l0IHRyYW5nIgotCi0jOiBnaXRrOjMwNzAKLW1zZ2lkICJ1XHRcdFNjcm9sbCBkaWZmIHZpZXcgdXAgMTggbGluZXMiCi1tc2dzdHIgInVcdFx0Q3Xhu5luIHBo4bqnbiB0csOsbmggYsOgeSBkaWZmIGzDqm4gMTggZMOybmciCi0KLSM6IGdpdGs6MzA3MQotbXNnaWQgImRcdFx0U2Nyb2xsIGRpZmYgdmlldyBkb3duIDE4IGxpbmVzIgotbXNnc3RyICJkXHRcdEN14buZbiBwaOG6p24gdHLDrG5oIGLDoHkgZGlmZiB4deG7kW5nIDE4IGTDsm5nIgotCi0jOiBnaXRrOjMwNzIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtRj5cdFx0RmluZCIKLW1zZ3N0ciAiPCVzLUY+XHRcdFTDrG0ga2nhur9tIgotCi0jOiBnaXRrOjMwNzMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtRz5cdFx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgotbXNnc3RyICI8JXMtRz5cdFx0RGkgY2h1eeG7g24gxJHhur9uIGNo4buXIGfhurdwIGvhur8gdGnhur9wIgotCi0jOiBnaXRrOjMwNzQKLW1zZ2lkICI8UmV0dXJuPlx0TW92ZSB0byBuZXh0IGZpbmQgaGl0IgotbXNnc3RyICI8UmV0dXJuPlx0XHREaSBjaHV54buDbiDEkeG6v24gY2jhu5cgZ+G6t3Aga+G6vyB0aeG6v3AiCi0KLSM6IGdpdGs6MzA3NQotbXNnaWQgImdcdFx0R28gdG8gY29tbWl0IgotbXNnc3RyICJnXHRcdENodXnhu4NuIMSR4bq/biBs4bqnbiBjaHV54buDbiBnaWFvIgotCi0jOiBnaXRrOjMwNzYKLW1zZ2lkICIvXHRcdEZvY3VzIHRoZSBzZWFyY2ggYm94IgotbXNnc3RyICIvXHRcdMSQxrBhIGNvbiB0cuG7jyBjaHXhu5l0IHbDoG8gw7QgdMOsbSBraeG6v20iCi0KLSM6IGdpdGs6MzA3NwotbXNnaWQgIj9cdFx0TW92ZSB0byBwcmV2aW91cyBmaW5kIGhpdCIKLW1zZ3N0ciAiP1x0XHREaSBjaHV54buDbiDEkeG6v24gY2jhu5cgZ+G6t3Aga+G6vyB0csaw4bubYyIKLQotIzogZ2l0azozMDc4Ci1tc2dpZCAiZlx0XHRTY3JvbGwgZGlmZiB2aWV3IHRvIG5leHQgZmlsZSIKLW1zZ3N0ciAiZlx0XHRDdeG7mW4gcGjhuqduIHRyw6xuaCBiw6B5IGRpZmYgc2FuZyB04bqtcC10aW4ga+G6vyIKLQotIzogZ2l0azozMDc5Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiPCVzLVM+XHRcdFNlYXJjaCBmb3IgbmV4dCBoaXQgaW4gZGlmZiB2aWV3IgotbXNnc3RyICI8JXMtUz5cdFx0VMOsbSDEkeG6v24gY2jhu5cga2jDoWMgYmnhu4d0IGvhur8gdGnhur9wIgotCi0jOiBnaXRrOjMwODAKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtUj5cdFx0U2VhcmNoIGZvciBwcmV2aW91cyBoaXQgaW4gZGlmZiB2aWV3IgotbXNnc3RyICI8JXMtUj5cdFx0VMOsbSDEkeG6v24gY2jhu5cga2jDoWMgYmnhu4d0IGvhur8gdHLGsOG7m2MiCi0KLSM6IGdpdGs6MzA4MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1LUCs+XHRJbmNyZWFzZSBmb250IHNpemUiCi1tc2dzdHIgIjwlcy1LUCs+XHRUxINuZyBj4buhIGNo4buvIgotCi0jOiBnaXRrOjMwODIKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtcGx1cz5cdEluY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLXBsdXM+XHRUxINuZyBj4buhIGNo4buvIgotCi0jOiBnaXRrOjMwODMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICI8JXMtS1AtPlx0RGVjcmVhc2UgZm9udCBzaXplIgotbXNnc3RyICI8JXMtS1AtPlx0R2nhuqNtIGPhu6EgY2jhu68iCi0KLSM6IGdpdGs6MzA4NAotIywgdGNsLWZvcm1hdAotbXNnaWQgIjwlcy1taW51cz5cdERlY3JlYXNlIGZvbnQgc2l6ZSIKLW1zZ3N0ciAiPCVzLW1pbnVzPlx0R2nhuqNtIGPhu6EgY2jhu68iCi0KLSM6IGdpdGs6MzA4NQotbXNnaWQgIjxGNT5cdFx0VXBkYXRlIgotbXNnc3RyICI8RjU+XHRcdEPhuq1wIG5o4bqtdCIKLQotIzogZ2l0azozNTUwIGdpdGs6MzU1OQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGNyZWF0aW5nIHRlbXBvcmFyeSBkaXJlY3RvcnkgJXM6IgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdOG6oW8gdGjGsCBt4bulYyB04bqhbSAlczoiCi0KLSM6IGdpdGs6MzU3MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgXCIlc1wiIGZyb20gJXM6IgotbXNnc3RyICJM4buXaSBjaMOgbyBo4buPaSBcIiVzXCIgdOG7qyAlczoiCi0KLSM6IGdpdGs6MzYzNQotbXNnaWQgImNvbW1hbmQgZmFpbGVkOiIKLW1zZ3N0ciAibOG7h25oIGfhurdwIGzhu5dpOiIKLQotIzogZ2l0azozNzg0Ci1tc2dpZCAiTm8gc3VjaCBjb21taXQiCi1tc2dzdHIgIktow7RuZyBjw7MgbOG6p24gY2h1eeG7g24gZ2lhbyBuaMawIHbhuq15IgotCi0jOiBnaXRrOjM3OTgKLW1zZ2lkICJnaXQgZ3VpIGJsYW1lOiBjb21tYW5kIGZhaWxlZDoiCi1tc2dzdHIgImdpdCBndWkgYmxhbWU6IGzhu4duaCBn4bq3cCBs4buXaToiCi0KLSM6IGdpdGs6MzgyOQotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvdWxkbid0IHJlYWQgbWVyZ2UgaGVhZDogJXMiCi1tc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7mWMgxJHhuqd1IGPhu6dhIGjDsmEgdHLhu5luOiAlcyIKLQotIyB0Y2wtZm9ybWF0Ci0jOiBnaXRrOjM4MzcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciByZWFkaW5nIGluZGV4OiAlcyIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buNYyBjaOG7iSBt4bulYzogJXMiCi0KLSM6IGdpdGs6Mzg2MgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvdWxkbid0IHN0YXJ0IGdpdCBibGFtZTogJXMiCi1tc2dzdHIgIktow7RuZyB0aOG7gyBraOG7n2kgY2jhuqF5IGdpdCBibGFtZTogJXMiCi0KLSM6IGdpdGs6Mzg2NSBnaXRrOjY3NTQKLW1zZ2lkICJTZWFyY2hpbmciCi1tc2dzdHIgIsSQYW5nIHTDrG0ga2nhur9tIgotCi0jOiBnaXRrOjM4OTcKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBydW5uaW5nIGdpdCBibGFtZTogJXMiCi1tc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBjaOG6oXkgZ2l0IGJsYW1lOiAlcyIKLQotIzogZ2l0azozOTI1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGhhdCBsaW5lIGNvbWVzIGZyb20gY29tbWl0ICVzLCAgd2hpY2ggaXMgbm90IGluIHRoaXMgdmlldyIKLW1zZ3N0ciAiRMOybmcgxJHhur9uIHThu6sgbOG6p24gY2h1eeG7g24gZ2lhbyAlcywgY8OhaSBtw6Aga2jDtG5nIHRyb25nIHRyw6xuaCBiw6B5IG7DoHkiCi0KLSM6IGdpdGs6MzkzOQotbXNnaWQgIkV4dGVybmFsIGRpZmYgdmlld2VyIGZhaWxlZDoiCi1tc2dzdHIgIkLhu5kgdHLDrG5oIGLDoHkgZGlmZiB04burIGLDqm4gbmdvw6BpIGfhurdwIGzhu5dpOiIKLQotIzogZ2l0azo0MDcwCi1tc2dpZCAiR2l0ayB2aWV3IGRlZmluaXRpb24iCi1tc2dzdHIgIsSQ4buLbmggbmdoxKlhIGPDoWNoIHRyw6xuaCBiw6B5IGdpdGsiCi0KLSM6IGdpdGs6NDA3NAotbXNnaWQgIlJlbWVtYmVyIHRoaXMgdmlldyIKLW1zZ3N0ciAiTmjhu5sgY8OhY2ggdHLDrG5oIGLDoHkgbsOgeSIKLQotIzogZ2l0azo0MDc1Ci1tc2dpZCAiUmVmZXJlbmNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpOiIKLW1zZ3N0ciAiVGhhbSBjaGnhur91IChkYW5oIHPDoWNoIG5nxINuIGPDoWNoIGLhurFuZyBk4bqldSBjw6FjaCk6IgotCi0jOiBnaXRrOjQwNzYKLW1zZ2lkICJCcmFuY2hlcyAmIHRhZ3M6IgotbXNnc3RyICJOaMOhbmggJiB0aOG6uzoiCi0KLSM6IGdpdGs6NDA3NwotbXNnaWQgIkFsbCByZWZzIgotbXNnc3RyICJN4buNaSB0aGFtIGNoaeG6v3UiCi0KLSM6IGdpdGs6NDA3OAotbXNnaWQgIkFsbCAobG9jYWwpIGJyYW5jaGVzIgotbXNnc3RyICJN4buNaSBuaMOhbmggKG7hu5lpIGLhu5kpIgotCi0jOiBnaXRrOjQwNzkKLW1zZ2lkICJBbGwgdGFncyIKLW1zZ3N0ciAiTeG7jWkgdGjhursiCi0KLSM6IGdpdGs6NDA4MAotbXNnaWQgIkFsbCByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCi1tc2dzdHIgIk3hu41pIG5ow6FuaCByZW1vdGUtdHJhY2tpbmciCi0KLSM6IGdpdGs6NDA4MQotbXNnaWQgIkNvbW1pdCBJbmZvIChyZWd1bGFyIGV4cHJlc3Npb25zKToiCi1tc2dzdHIgIlRow7RuZyB0aW4gY2h1eeG7g24gZ2lhbyAoYmnhu4N1IHRo4bupYyBjaMOtbmggcXV5KToiCi0KLSM6IGdpdGs6NDA4MgotbXNnaWQgIkF1dGhvcjoiCi1tc2dzdHIgIlTDoWMgZ2nhuqM6IgotCi0jOiBnaXRrOjQwODMKLW1zZ2lkICJDb21taXR0ZXI6IgotbXNnc3RyICJOZ8aw4budaSBjaHV54buDbiBnaWFvOiIKLQotIzogZ2l0azo0MDg0Ci1tc2dpZCAiQ29tbWl0IE1lc3NhZ2U6IgotbXNnc3RyICJDaMO6IHRow61jaCBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvOiIKLQotIzogZ2l0azo0MDg1Ci1tc2dpZCAiTWF0Y2hlcyBhbGwgQ29tbWl0IEluZm8gY3JpdGVyaWEiCi1tc2dzdHIgIkto4bubcCBt4buNaSDEkWnhu4F1IGtp4buHbiBUaMO0bmcgdGluIENodXnhu4NuIGdpYW8iCi0KLSM6IGdpdGs6NDA4NgotbXNnaWQgIk1hdGNoZXMgbm8gQ29tbWl0IEluZm8gY3JpdGVyaWEiCi1tc2dzdHIgIkto4bubcCBraMO0bmcgxJFp4buBdSBraeG7h24gVGjDtG5nIHRpbiBDaHV54buDbiBnaWFvIgotCi0jOiBnaXRrOjQwODcKLW1zZ2lkICJDaGFuZ2VzIHRvIEZpbGVzOiIKLW1zZ3N0ciAixJDhu5VpIHRow6BuaCBU4bqtcCB0aW46IgotCi0jOiBnaXRrOjQwODgKLW1zZ2lkICJGaXhlZCBTdHJpbmciCi1tc2dzdHIgIkNodeG7l2kgY+G7kSDEkeG7i25oIgotCi0jOiBnaXRrOjQwODkKLW1zZ2lkICJSZWd1bGFyIEV4cHJlc3Npb24iCi1tc2dzdHIgIkJp4buDdSB0aOG7qWMgY2jDrW5oIHF1eSIKLQotIzogZ2l0azo0MDkwCi1tc2dpZCAiU2VhcmNoIHN0cmluZzoiCi1tc2dzdHIgIkNodeG7l2kgdMOsbSBraeG6v206IgotCi0jOiBnaXRrOjQwOTEKLW1zZ2lkICIiCi0iQ29tbWl0IERhdGVzIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKLSIxNToyNzozOFwiKToiCi1tc2dzdHIgIiIKLSJOZ8OgeSBjaHV54buDbiBnaWFvIChcIjIgd2Vla3MgYWdvXCIsIFwiMjAwOS0wMy0xNyAxNToyNzozOFwiLCBcIk1hcmNoIDE3LCAyMDA5ICIKLSIxNToyNzozOFwiKToiCi0KLSM6IGdpdGs6NDA5MgotbXNnaWQgIlNpbmNlOiIKLW1zZ3N0ciAiS+G7gyB04burOiIKLQotIzogZ2l0azo0MDkzCi1tc2dpZCAiVW50aWw6IgotbXNnc3RyICLEkOG6v246IgotCi0jOiBnaXRrOjQwOTQKLW1zZ2lkICJMaW1pdCBhbmQvb3Igc2tpcCBhIG51bWJlciBvZiByZXZpc2lvbnMgKHBvc2l0aXZlIGludGVnZXIpOiIKLW1zZ3N0ciAiR2nhu5tpIGjhuqFuIHbDoC9ob+G6t2MgYuG7jyBz4buRIGPhu6dhIMSRaeG7g20geMOpdCAoc+G7kSBuZ3V5w6puIMOibSk6IgotCi0jOiBnaXRrOjQwOTUKLW1zZ2lkICJOdW1iZXIgdG8gc2hvdzoiCi1tc2dzdHIgIlPhu5EgbMaw4bujbmcgaGnhu4NuIHRo4buLOiIKLQotIzogZ2l0azo0MDk2Ci1tc2dpZCAiTnVtYmVyIHRvIHNraXA6IgotbXNnc3RyICJT4buRIGzGsOG7o25nIHPhur0gYuG7jyBxdWE6IgotCi0jOiBnaXRrOjQwOTcKLW1zZ2lkICJNaXNjZWxsYW5lb3VzIG9wdGlvbnM6IgotbXNnc3RyICJUw7l5IGNo4buNbiBo4buXbiBo4bujcDoiCi0KLSM6IGdpdGs6NDA5OAotbXNnaWQgIlN0cmljdGx5IHNvcnQgYnkgZGF0ZSIKLW1zZ3N0ciAiU+G6r3AgeOG6v3AgY2jhurd0IGNo4bq9IHRoZW8gbmfDoHkiCi0KLSM6IGdpdGs6NDA5OQotbXNnaWQgIk1hcmsgYnJhbmNoIHNpZGVzIgotbXNnc3RyICLEkMOhbmggZOG6pXUgY8OhYyBj4bqhbmggbmjDoW5oIgotCi0jOiBnaXRrOjQxMDAKLW1zZ2lkICJMaW1pdCB0byBmaXJzdCBwYXJlbnQiCi1tc2dzdHIgIkdp4bubaSBo4bqhbiB0aMOgbmggY2hhIG3hurkgxJHhuqd1IHRpw6puIgotCi0jOiBnaXRrOjQxMDEKLW1zZ2lkICJTaW1wbGUgaGlzdG9yeSIKLW1zZ3N0ciAiTOG7i2NoIHPhu60gZOG6oW5nIMSRxqFuIGdp4bqjbiIKLQotIzogZ2l0azo0MTAyCi1tc2dpZCAiQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gZ2l0IGxvZzoiCi1tc2dzdHIgIsSQ4buRaSBz4buRIGLhu5UgeHVuZyBjaG8gbOG7h25oIGdpdCBsb2c6IgotCi0jOiBnaXRrOjQxMDMKLW1zZ2lkICJFbnRlciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gaW5jbHVkZSwgb25lIHBlciBsaW5lOiIKLW1zZ3N0ciAiTmjhuq1wIHbDoG8gY8OhYyB04bqtcCB0aW4gdsOgIHRoxrAgbeG7pWMgYmFvIGfhu5NtLCBt4buXaSBkw7JuZyBt4buZdCBjw6FpOiIKLQotIzogZ2l0azo0MTA0Ci1tc2dpZCAiQ29tbWFuZCB0byBnZW5lcmF0ZSBtb3JlIGNvbW1pdHMgdG8gaW5jbHVkZToiCi1tc2dzdHIgIkzhu4duaCB04bqhbyByYSBuaGnhu4F1IGzhuqduIGNodXnhu4NuIGdpYW8gaMahbiBiYW8gZ+G7k206IgotCi0jOiBnaXRrOjQyMjgKLW1zZ2lkICJHaXRrOiBlZGl0IHZpZXciCi1tc2dzdHIgIkdpdGs6IHPhu61hIGPDoWNoIHRyw6xuaCBiw6B5IgotCi0jOiBnaXRrOjQyMzYKLW1zZ2lkICItLSBjcml0ZXJpYSBmb3Igc2VsZWN0aW5nIHJldmlzaW9ucyIKLW1zZ3N0ciAiLS0gdGnDqnUgY2h14bqpbiBjaOG7jW4gxJFp4buDbSB4w6l0IGR1eeG7h3QiCi0KLSM6IGdpdGs6NDI0MQotbXNnaWQgIlZpZXcgTmFtZSIKLW1zZ3N0ciAiVMOqbiBjw6FjaCB0csOsbmggYsOgeSIKLQotIzogZ2l0azo0MzE2Ci1tc2dpZCAiQXBwbHkgKEY1KSIKLW1zZ3N0ciAiw4FwIGThu6VuZyAoRjUpIgotCi0jOiBnaXRrOjQzNTQKLW1zZ2lkICJFcnJvciBpbiBjb21taXQgc2VsZWN0aW9uIGFyZ3VtZW50czoiCi1tc2dzdHIgIkzhu5dpIHRyb25nIGPDoWMgxJHhu5FpIHPhu5EgY2jhu41uIGNodXnhu4NuIGdpYW86IgotCi0jOiBnaXRrOjQ0MDkgZ2l0azo0NDYyIGdpdGs6NDkyNCBnaXRrOjQ5MzggZ2l0azo2MjA4IGdpdGs6MTIzNzMgZ2l0azoxMjM3NAotbXNnaWQgIk5vbmUiCi1tc2dzdHIgIktow7RuZyIKLQotIzogZ2l0azo1MDIxIGdpdGs6NTAyNgotbXNnaWQgIkRlc2NlbmRhbnQiCi1tc2dzdHIgIkNvbiBjaMOhdSIKLQotIzogZ2l0azo1MDIyCi1tc2dpZCAiTm90IGRlc2NlbmRhbnQiCi1tc2dzdHIgIktow7RuZyBjw7MgY29uIGNow6F1IgotCi0jOiBnaXRrOjUwMjkgZ2l0azo1MDM0Ci1tc2dpZCAiQW5jZXN0b3IiCi1tc2dzdHIgIlThu5UgdGnDqm4gY2h1bmciCi0KLSM6IGdpdGs6NTAzMAotbXNnaWQgIk5vdCBhbmNlc3RvciIKLW1zZ3N0ciAiS2jDtG5nIGPDsyBjaHVuZyB04buVIHRpw6puIgotCi0jOiBnaXRrOjUzMjQKLW1zZ2lkICJMb2NhbCBjaGFuZ2VzIGNoZWNrZWQgaW4gdG8gaW5kZXggYnV0IG5vdCBjb21taXR0ZWQiCi1tc2dzdHIgIiIKLSJDw7MgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSDEkcOjIMSRxrDhu6NjIMSRxrBhIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjLCBuaMawbmcgY2jGsGEgxJHGsOG7o2MgY2h1eeG7g24gZ2lhbyIKLQotIzogZ2l0azo1MzYwCi1tc2dpZCAiTG9jYWwgdW5jb21taXR0ZWQgY2hhbmdlcywgbm90IGNoZWNrZWQgaW4gdG8gaW5kZXgiCi1tc2dzdHIgIkPDsyB0aGF5IMSR4buVaSBu4buZaSBi4buZLCBuaMawbmcgY2jGsGEgxJHGsOG7o2MgxJHGsGEgdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWMiCi0KLSM6IGdpdGs6NzEzNAotbXNnaWQgImFuZCBtYW55IG1vcmUiCi1tc2dzdHIgInbDoCBuaGnhu4F1IG7hu69hIgotCi0jOiBnaXRrOjcxMzcKLW1zZ2lkICJtYW55IgotbXNnc3RyICJuaGnhu4F1IgotCi0jOiBnaXRrOjczMjgKLW1zZ2lkICJUYWdzOiIKLW1zZ3N0ciAiVGjhurs6IgotCi0jOiBnaXRrOjczNDUgZ2l0azo3MzUxIGdpdGs6ODgyNQotbXNnaWQgIlBhcmVudCIKLW1zZ3N0ciAiQ2hhIgotCi0jOiBnaXRrOjczNTYKLW1zZ2lkICJDaGlsZCIKLW1zZ3N0ciAiQ29uIgotCi0jOiBnaXRrOjczNjUKLW1zZ2lkICJCcmFuY2giCi1tc2dzdHIgIk5ow6FuaCIKLQotIzogZ2l0azo3MzY4Ci1tc2dpZCAiRm9sbG93cyIKLW1zZ3N0ciAixJDhu6luZyBzYXUiCi0KLSM6IGdpdGs6NzM3MQotbXNnaWQgIlByZWNlZGVzIgotbXNnc3RyICLEkOG7qW5nIHRyxrDhu5tjIgotCi0jIHRjbC1mb3JtYXQKLSM6IGdpdGs6Nzk2NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkVycm9yIGdldHRpbmcgZGlmZnM6ICVzIgotbXNnc3RyICJM4buXaSBs4bqleSBkaWZmOiAlcyIKLQotIzogZ2l0azo4NjUwCi1tc2dpZCAiR290bzoiCi1tc2dzdHIgIk5o4bqjeSB04bubaToiCi0KLSM6IGdpdGs6ODY3MQotIywgdGNsLWZvcm1hdAotbXNnaWQgIlNob3J0IFNIQTEgaWQgJXMgaXMgYW1iaWd1b3VzIgotbXNnc3RyICLEkOG7i25oIGRhbmggU0hBMSBk4bqhbmcgbmfhuq9uICVzIGzDoCBjaMawYSDEkeG7pyByw7UgcsOgbmciCi0KLSM6IGdpdGs6ODY3OAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBrbm93biIKLW1zZ3N0ciAiS2jDtG5nIGhp4buDdSDEkWnhu4NtIHjDqXQgZHV54buHdCAlcyIKLQotIzogZ2l0azo4Njg4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiU0hBMSBpZCAlcyBpcyBub3Qga25vd24iCi1tc2dzdHIgIktow7RuZyBoaeG7g3UgxJHhu4tuaCBkYW5oIFNIQTEgJXMiCi0KLSM6IGdpdGs6ODY5MAotIywgdGNsLWZvcm1hdAotbXNnaWQgIlJldmlzaW9uICVzIGlzIG5vdCBpbiB0aGUgY3VycmVudCB2aWV3IgotbXNnc3RyICLEkGnhu4NtICVzIGtow7RuZyDhu58gdHJvbmcgcGjhuqduIGhp4buDbiB0aOG7iyBoaeG7h24gdOG6oWkiCi0KLSM6IGdpdGs6ODgzMiBnaXRrOjg4NDcKLW1zZ2lkICJEYXRlIgotbXNnc3RyICJOZ8OgeSIKLQotIzogZ2l0azo4ODM1Ci1tc2dpZCAiQ2hpbGRyZW4iCi1tc2dzdHIgIkNvbiBjaMOhdSIKLQotIzogZ2l0azo4ODk4Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXQgJXMgYnJhbmNoIHRvIGhlcmUiCi1tc2dzdHIgIsSQ4bq3dCBs4bqhaSBuaMOhbmggJXMgdOG6oWkgxJHDonkiCi0KLSM6IGdpdGs6ODkwMAotbXNnaWQgIkRldGFjaGVkIGhlYWQ6IGNhbid0IHJlc2V0IgotbXNnc3RyICJIZWFkIMSRw6MgYuG7iyB0w6FjaCBy4budaToga2jDtG5nIHRo4buDIMSR4bq3dCBs4bqhaSIKLQotIzogZ2l0azo5MDA1IGdpdGs6OTAxMQotbXNnaWQgIlNraXBwaW5nIG1lcmdlIGNvbW1pdCAiCi1tc2dzdHIgIkLhu48gcXVhIGzhuqduIGNodXnhu4NuIGdpYW8gaMOyYSB0cuG7mW4gIgotCi0jOiBnaXRrOjkwMjAgZ2l0azo5MDI1Ci1tc2dpZCAiRXJyb3IgZ2V0dGluZyBwYXRjaCBJRCBmb3IgIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgbOG6pXkgSUQgbWnhur9uZyB2w6EgY2hvICIKLQotIzogZ2l0azo5MDIxIGdpdGs6OTAyNgotbXNnaWQgIiAtIHN0b3BwaW5nXG4iCi1tc2dzdHIgIiAtIGThu6tuZ1xuIgotCi0jOiBnaXRrOjkwMzEgZ2l0azo5MDM0IGdpdGs6OTA0MiBnaXRrOjkwNTYgZ2l0azo5MDY1Ci1tc2dpZCAiQ29tbWl0ICIKLW1zZ3N0ciAiQ29tbWl0ICIKLQotIzogZ2l0azo5MDM1Ci1tc2dpZCAiIgotIiBpcyB0aGUgc2FtZSBwYXRjaCBhc1xuIgotIiAgICAgICAiCi1tc2dzdHIgIiIKLSIgbMOgIGPDuW5nIG3hu5l0IG1p4bq/bmcgdsOhIHbhu5tpXG4iCi0iICAgICAgICIKLQotIzogZ2l0azo5MDQzCi1tc2dpZCAiIgotIiBkaWZmZXJzIGZyb21cbiIKLSIgICAgICAgIgotbXNnc3RyICIiCi0iIGtow6FjIGJp4buHdCB04burXG4iCi0iICAgICAgICIKLQotIzogZ2l0azo5MDQ1Ci1tc2dpZCAiIgotIkRpZmYgb2YgY29tbWl0czpcbiIKKyJJZiB5b3Ugd2FudGVkIHRvIG1ha2UgJyVzJyB0cmFjayAnJXMnLCBkbyB0aGlzOlxuIgogIlxuIgogbXNnc3RyICIiCi0iS2jDoWMgYmnhu4d0IGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gKGNvbW1pdCk6XG4iCisiXG4iCisiTuG6v3UgYuG6oW4gbXXhu5FuIOKAnCVz4oCdIHRoZW8gZMO1aSDigJwlc+KAnSwgdGjhu7FjIGhp4buHbiBs4buHbmggc2F1OlxuIgogIlxuIgogCi0jOiBnaXRrOjkwNTcgZ2l0azo5MDY2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiIGhhcyAlcyBjaGlsZHJlbiAtIHN0b3BwaW5nXG4iCi1tc2dzdHIgIiBjw7MgJXMgY29uIC0gZOG7q25nXG4iCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIKK21zZ3N0ciAiICAgIGdpdCBicmFuY2ggLWQgJXNcbiIKIAotIzogZ2l0azo5MDg1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiRXJyb3Igd3JpdGluZyBjb21taXQgdG8gZmlsZTogJXMiCi1tc2dzdHIgIkfhurdwIGzhu5dpIHRyb25nIHF1w6EgdHLDrG5oIGdoaSBs4bqnbiBjaHV54buDbiBnaWFvIHbDoG8gdOG6rXAgdGluOiAlcyIKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAzNworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgorbXNnc3RyICIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byAlc1xuIgogCi0jOiBnaXRrOjkwOTEKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJFcnJvciBkaWZmaW5nIGNvbW1pdHM6ICVzIgotbXNnc3RyICJH4bq3cCBs4buXaSBraGkgc28gc8Ohbmggc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbzogJXMiCisjOiBidWlsdGluL2J1bmRsZS5jOjUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG9rYXlcbiIKK21zZ3N0ciAi4oCcJXPigJ0gdOG7kXRcbiIKIAotIzogZ2l0azo5MTM3Ci1tc2dpZCAiVG9wIgotbXNnc3RyICLEkOG7iW5oIgorIzogYnVpbHRpbi9idW5kbGUuYzo2NAorbXNnaWQgIk5lZWQgYSByZXBvc2l0b3J5IHRvIGNyZWF0ZSBhIGJ1bmRsZS4iCittc2dzdHIgIkPhuqduIG3hu5l0IGtobyBjaOG7qWEgxJHhu4MgY8OzIHRo4buDIHThuqFvIG3hu5l0IGJ1bmRsZS4iCiAKLSM6IGdpdGs6OTEzOAotbXNnaWQgIkZyb20iCi1tc2dzdHIgIlThu6siCisjOiBidWlsdGluL2J1bmRsZS5jOjY4Cittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICJD4bqnbiBt4buZdCBraG8gY2jhu6lhIMSR4buDIGPDsyB0aOG7gyBnaeG6o2kgbsOpbiBt4buZdCBidW5kbGUuIgogCi0jOiBnaXRrOjkxNDMKLW1zZ2lkICJUbyIKLW1zZ3N0ciAixJDhur9uIgotCi0jOiBnaXRrOjkxNjcKLW1zZ2lkICJHZW5lcmF0ZSBwYXRjaCIKLW1zZ3N0ciAiVOG6oW8gbWnhur9uZyB2w6EiCi0KLSM6IGdpdGs6OTE2OQotbXNnaWQgIkZyb206IgotbXNnc3RyICJU4burOiIKLQotIzogZ2l0azo5MTc4Ci1tc2dpZCAiVG86IgotbXNnc3RyICLEkOG6v246IgotCi0jOiBnaXRrOjkxODcKLW1zZ2lkICJSZXZlcnNlIgotbXNnc3RyICLEkOG6o28gbmfGsOG7o2MiCi0KLSM6IGdpdGs6OTE4OSBnaXRrOjkzODUKLW1zZ2lkICJPdXRwdXQgZmlsZToiCi1tc2dzdHIgIlThuq1wIHRpbiBr4bq/dCB4deG6pXQ6IgotCi0jOiBnaXRrOjkxOTUKLW1zZ2lkICJHZW5lcmF0ZSIKLW1zZ3N0ciAiVOG6oW8iCi0KLSM6IGdpdGs6OTIzMwotbXNnaWQgIkVycm9yIGNyZWF0aW5nIHBhdGNoOiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHThuqFvIG1p4bq/bmcgdsOhOiIKLQotIzogZ2l0azo5MjU2IGdpdGs6OTM3MyBnaXRrOjk0MzAKLW1zZ2lkICJJRDoiCi1tc2dzdHIgIk3DoyBz4buROiIKLQotIzogZ2l0azo5MjY1Ci1tc2dpZCAiVGFnIG5hbWU6IgotbXNnc3RyICJUw6puIHRo4bq7OiIKLQotIzogZ2l0azo5MjY4Ci1tc2dpZCAiVGFnIG1lc3NhZ2UgaXMgb3B0aW9uYWwiCi1tc2dzdHIgIkdoaSBjaMO6IHRo4bq7IGNo4buJIGzDoCB0w7l5IGNo4buNbiIKLQotIzogZ2l0azo5MjcwCi1tc2dpZCAiVGFnIG1lc3NhZ2U6IgotbXNnc3RyICJHaGkgY2jDuiBjaG8gdGjhurs6IgotCi0jOiBnaXRrOjkyNzQgZ2l0azo5NDM5Ci1tc2dpZCAiQ3JlYXRlIgotbXNnc3RyICJU4bqhbyIKLQotIzogZ2l0azo5MjkyCi1tc2dpZCAiTm8gdGFnIG5hbWUgc3BlY2lmaWVkIgotbXNnc3RyICJDaMawYSBjaOG7iSByYSB0w6puIGPhu6dhIHRo4bq7IgotCi0jOiBnaXRrOjkyOTYKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJUYWcgXCIlc1wiIGFscmVhZHkgZXhpc3RzIgotbXNnc3RyICJUaOG6uyDigJwlc+KAnSDEkcOjIGPDsyBz4bq1biBy4buTaSIKLQotIzogZ2l0azo5MzA2Ci1tc2dpZCAiRXJyb3IgY3JlYXRpbmcgdGFnOiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHThuqFvIHRo4bq7OiIKLQotIzogZ2l0azo5MzgyCi1tc2dpZCAiQ29tbWFuZDoiCi1tc2dzdHIgIkzhu4duaDoiCi0KLSM6IGdpdGs6OTM5MAotbXNnaWQgIldyaXRlIgotbXNnc3RyICJHaGkiCi0KLSM6IGdpdGs6OTQwOAotbXNnaWQgIkVycm9yIHdyaXRpbmcgY29tbWl0OiIKLW1zZ3N0ciAiR+G6t3AgbOG7l2kgdHJvbmcgcXXDoSB0csOsbmggZ2hpIGNodXnhu4NuIGdpYW86IgotCi0jOiBnaXRrOjk0MzUKLW1zZ2lkICJOYW1lOiIKLW1zZ3N0ciAiVMOqbjoiCi0KLSM6IGdpdGs6OTQ1OAotbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IGEgbmFtZSBmb3IgdGhlIG5ldyBicmFuY2giCi1tc2dzdHIgIlZ1aSBsw7JuZyBjaOG7iSDEkeG7i25oIHTDqm4gY2hvIG5ow6FuaCBt4bubaSIKLQotIzogZ2l0azo5NDYzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQnJhbmNoICclcycgYWxyZWFkeSBleGlzdHMuIE92ZXJ3cml0ZT8iCi1tc2dzdHIgIk5ow6FuaCDigJwlc+KAnSDEkcOjIGPDsyB04burIHRyxrDhu5tjIHLhu5NpLiBHaGkgxJHDqD8iCi0KLSM6IGdpdGs6OTUzMAotIywgdGNsLWZvcm1hdAotbXNnaWQgIkNvbW1pdCAlcyBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmUtYXBwbHkgaXQ/IgotbXNnc3RyICIiCi0iTOG6p24gY2h1eeG7g24gZ2lhbyAlcyDEkcOjIHPhurVuIMSRxrDhu6NjIGJhbyBn4buTbSB0cm9uZyBuaMOhbmggJXMgLS0gYuG6oW4gY8OzIHRo4buxYyBz4buxIG114buRbiAiCi0iw6FwIGThu6VuZyBs4bqhaSBuw7Mga2jDtG5nPyIKLQotIzogZ2l0azo5NTM1Ci1tc2dpZCAiQ2hlcnJ5LXBpY2tpbmciCi1tc2dzdHIgIsSQYW5nIGNoZXJyeS1waWNrIgotCi0jOiBnaXRrOjk1NDQKLSMsIHRjbC1mb3JtYXQKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MjgKIG1zZ2lkICIiCi0iQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byBmaWxlICclcycuXG4iCi0iUGxlYXNlIGNvbW1pdCwgcmVzZXQgb3Igc3Rhc2ggeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdfC1lfC1wfCIKKyI8dHlwZT58LS10ZXh0Y29udikgPG9iamVjdD4iCiBtc2dzdHIgIiIKLSJDaGVycnktcGljayBn4bq3cCBs4buXaSBi4bufaSB2w6wgY8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIHThuq1wIHRpbiDigJwlc+KAnS5cbiIKLSJYaW4gaMOjeSBjaHV54buDbiBnaWFvLCByZXNldCBoYXkgc3Rhc2ggY8OhYyB0aGF5IMSR4buVaSBj4bunYSBi4bqhbiBzYXUgxJHDsyB0aOG7rSBs4bqhaS4iCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdfC1zIFstLWFsbG93LXVua25vd24tdHlwZV18LWV8LXB8IgorIjxraeG7g3U+fC0tdGV4dGNvbnYpIDzEkeG7kWlfdMaw4bujbmc+IgogCi0jOiBnaXRrOjk1NTAKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MjkKIG1zZ2lkICIiCi0iQ2hlcnJ5LXBpY2sgZmFpbGVkIGJlY2F1c2Ugb2YgbWVyZ2UgY29uZmxpY3QuXG4iCi0iRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSA8IDxsaXN0LW9mLSIKKyJvYmplY3RzPiIKIG1zZ3N0ciAiIgotIkNoZXJyeS1waWNrIGfhurdwIGzhu5dpIGLhu59pIHbDrCB4dW5nIMSR4buZdCB0cm9uZyBow7JhIHRy4buZbi5cbiIKLSJC4bqhbiBjw7MgbXXhu5FuIGNo4bqheSBs4buHbmgg4oCcZ2l0IGNpdG9vbOKAnSDEkeG7gyBnaeG6o2kgcXV54bq/dCB24bqlbiDEkeG7gSBuw6B5IGtow7RuZz8iCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSA8IDxkYW5oLXPDoWNoLcSR4buRaS0iCisidMaw4bujbmc+IgogCi0jOiBnaXRrOjk1NjYgZ2l0azo5NjI0Ci1tc2dpZCAiTm8gY2hhbmdlcyBjb21taXR0ZWQiCi1tc2dzdHIgIktow7RuZyBjw7MgdGhheSDEkeG7lWkgbsOgbyBj4bqnbiBjaHV54buDbiBnaWFvIgorIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ2NgorbXNnaWQgIjx0eXBlPiBjYW4gYmUgb25lIG9mOiBibG9iLCB0cmVlLCBjb21taXQsIHRhZyIKK21zZ3N0ciAiPGtp4buDdT4gbMOgIG3hu5l0IHRyb25nIHPhu5E6IGJsb2IsIHRyZWUsIGNvbW1pdCBob+G6t2MgdGFnIgogCi0jOiBnaXRrOjk1OTMKLSMsIHRjbC1mb3JtYXQKLW1zZ2lkICJDb21taXQgJXMgaXMgbm90IGluY2x1ZGVkIGluIGJyYW5jaCAlcyAtLSByZWFsbHkgcmV2ZXJ0IGl0PyIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NjcKK21zZ2lkICJzaG93IG9iamVjdCB0eXBlIgorbXNnc3RyICJoaeG7g24gdGjhu4sga2nhu4N1IMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ2OAorbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgImhp4buDbiB0aOG7iyBrw61jaCB0aMaw4bubYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzAKK21zZ2lkICJleGl0IHdpdGggemVybyB3aGVuIHRoZXJlJ3Mgbm8gZXJyb3IiCittc2dzdHIgInRob8OhdCB24bubaSAwIGtoaSBraMO0bmcgY8OzIGzhu5dpIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDcxCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgImluIG7hu5lpIGR1bmcgxJHhu5FpIHTGsOG7o25nIGThuqFuZyBk4buFIMSR4buNYyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3MworbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICJ24bubaSDEkeG7kWkgdMaw4bujbmcgYmxvYiwgY2jhuqF5IGzhu4duaCB0ZXh0Y29udiB0csOqbiBu4buZaSBkdW5nIGPhu6dhIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3NQorbXNnaWQgImFsbG93IC1zIGFuZCAtdCB0byB3b3JrIHdpdGggYnJva2VuL2NvcnJ1cHQgb2JqZWN0cyIKK21zZ3N0ciAiY2hvIHBow6lwIC1zIHbDoCAtdCDEkeG7gyBsw6BtIHZp4buHYyB24bubaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBzYWkvaOG7j25nIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDc2Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICLEkeG7h20ga+G6v3QgeHXhuqV0IC0tYmF0Y2giCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzgKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCiBtc2dzdHIgIiIKLSJM4bqnbiBjaHV54buDbiBnaWFvICVzIGtow7RuZyDEkcaw4bujYyBiYW8gZ+G7k20gdHJvbmcgbmjDoW5oICVzIC0tIGLhuqFuIGPDsyB0aOG7sWMgc+G7sSBtdeG7kW4gIgotIuKAnHJldmVydOKAnSBuw7Mga2jDtG5nPyIKKyJoaeG7g24gdGjhu4sgdGjDtG5nIHRpbiB2w6AgbuG7mWkgZHVuZyBj4bunYSBjw6FjIMSR4buRaSB0xrDhu6NuZyBs4bqleSB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCiAKLSM6IGdpdGs6OTU5OAotbXNnaWQgIlJldmVydGluZyIKLW1zZ3N0ciAixJBhbmcgaG/DoG4gdMOhYyIKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0ODEKK21zZ2lkICJzaG93IGluZm8gYWJvdXQgb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHRow7RuZyB0aW4gduG7gSDEkeG7kWkgdMaw4bujbmcgZmVkICB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCiAKLSM6IGdpdGs6OTYwNgotIywgdGNsLWZvcm1hdAorIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ4NAorbXNnaWQgImZvbGxvdyBpbi10cmVlIHN5bWxpbmtzICh1c2VkIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrKSIKK21zZ3N0ciAidGhlbyBsacOqbiBr4bq/dCBt4buBbSB0cm9uZy1jw6J5ICjEkcaw4bujYyBkw7luZyB24bubaSAtLWJhdGNoIGhheSAtLWJhdGNoLWNoZWNrKSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ4NgorbXNnaWQgInNob3cgYWxsIG9iamVjdHMgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2siCittc2dzdHIgImhp4buDbiB0aOG7iyBt4buNaSDEkeG7kWkgdMaw4bujbmcgduG7m2kgLS1iYXRjaCBoYXkgLS1iYXRjaC1jaGVjayIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTEKK21zZ2lkICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPi4uLl0gWy0tXSA8cGF0aG5hbWU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciBbLWEgfCAtLWFsbCB8IDxhdHRyPuKApl0gWy0tXSB0w6puLcSRxrDhu51uZy1k4bqrbuKApiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTIKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIDwgPGxpc3Qtb2YtcGF0aHM+IgorbXNnc3RyICIiCisiZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiBbLXpdIFstYSB8IC0tYWxsIHwgPGF0dHI+4oCmXSA8IDxkYW5oLXPDoWNoLcSRxrDhu51uZy1k4bqrbj4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjE5Cittc2dpZCAicmVwb3J0IGFsbCBhdHRyaWJ1dGVzIHNldCBvbiBmaWxlIgorbXNnc3RyICJiw6FvIGPDoW8gdOG6pXQgY+G6oyBjw6FjIHRodeG7mWMgdMOtbmggxJHhurd0IHRyw6puIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjAKK21zZ2lkICJ1c2UgLmdpdGF0dHJpYnV0ZXMgb25seSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAiY2jhu4kgZMO5bmcgLmdpdGF0dHJpYnV0ZXMgdOG7qyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIxIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjIgYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk2Cittc2dpZCAicmVhZCBmaWxlIG5hbWVzIGZyb20gc3RkaW4iCittc2dzdHIgIsSR4buNYyB0w6puIHThuq1wIHRpbiB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjQKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAiY2jhuqVtIGThu6l0IGPDoWMgYuG6o24gZ2hpIHbDoG8gdsOgIHJhIGLhurFuZyBrw70gdOG7sSBOVUxMIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTMzIGJ1aWx0aW4vZ2MuYzoyNjcKK21zZ2lkICJzdXBwcmVzcyBwcm9ncmVzcyByZXBvcnRpbmciCittc2dzdHIgImNo4bq3biBjw6FjIGLDoW8gY8OhbyB0aeG6v24gdHLDrG5oIGhv4bqhdCDEkeG7mW5nIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI2Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiCittc2dzdHIgImhp4buDbiB0aOG7iyBuaOG7r25nIMSRxrDhu51uZyBk4bqrbiDEkeG6p3UgdsOgbyBraMO0bmcga2jhu5twIHbhu5tpIG3huqt1IgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI4Cittc2dpZCAiaWdub3JlIGluZGV4IHdoZW4gY2hlY2tpbmciCittc2dzdHIgImLhu48gcXVhIG3hu6VjIGzhu6VjIGtoaSBraeG7g20gdHJhIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE1NAorbXNnaWQgImNhbm5vdCBzcGVjaWZ5IHBhdGhuYW1lcyB3aXRoIC0tc3RkaW4iCittc2dzdHIgImtow7RuZyB0aOG7gyBjaOG7iSDEkeG7i25oIGPDoWMgdMOqbiDEkcaw4budbmcgZOG6q24gduG7m2kgLS1zdGRpbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNTcKK21zZ2lkICIteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAiLXogY2jhu4kgaOG7o3AgbMO9IHbhu5tpIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU5Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgImNoxrBhIGNo4buJIHJhIMSRxrDhu51uZyBk4bqrbiIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAiLS1xdWlldCBjaOG7iSBo4bujcCBs4buHIHbhu5tpIHTDqm4gxJHGsOG7nW5nIGThuqtuIMSRxqFuIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NQorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZMO5bmcgY+G6oyBoYWkgdMO5eSBjaOG7jW4gLS1xdWlldCB2w6AgLS12ZXJib3NlIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2OAorbXNnaWQgIi0tbm9uLW1hdGNoaW5nIGlzIG9ubHkgdmFsaWQgd2l0aCAtLXZlcmJvc2UiCittc2dzdHIgInTDuXktY2jhu41uIC0tbm9uLW1hdGNoaW5nIGNo4buJIGjhu6NwIGzhu4cga2hpIGTDuW5nIHbhu5tpIC0tdmVyYm9zZSIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OAorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzxjw6FjLXTDuXktY2jhu41uPl0gPGRhbmgtYuG6oT7igKYiCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjEzCittc2dpZCAiYWxzbyByZWFkIGNvbnRhY3RzIGZyb20gc3RkaW4iCittc2dzdHIgIsSR4buTbmcgdGjhu51pIMSR4buNYyBjw6FjIGRhbmggYuG6oSB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjI0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBjb250YWN0OiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGRhbmggYuG6oTog4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY2hlY2stbWFpbG1hcC5jOjQ3Cittc2dpZCAibm8gY29udGFjdHMgc3BlY2lmaWVkIgorbXNnc3RyICJjaMawYSBjaOG7iSByYSBkYW5oIGLhuqEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxMjYKK21zZ2lkICJnaXQgY2hlY2tvdXQtaW5kZXggWzxvcHRpb25zPl0gWy0tXSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8Y8OhYy10w7l5LWNo4buNbj5dIFstLV0gWzx04bqtcC10aW4+4oCmXSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4OAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICJs4bqleSByYSB0b8OgbiBi4buZIGPDoWMgdOG6rXAgdGluIHRyb25nIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4OQorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBmaWxlcyIKK21zZ3N0ciAiw6lwIGJ14buZYyBnaGkgxJHDqCBsw6puIHThuq1wIHRpbiDEkcOjIHPhurVuIGPDsyB04burIHRyxrDhu5tjIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTkxCittc2dpZCAibm8gd2FybmluZyBmb3IgZXhpc3RpbmcgZmlsZXMgYW5kIGZpbGVzIG5vdCBpbiBpbmRleCIKK21zZ3N0ciAiIgorImtow7RuZyBj4bqjbmggYsOhbyBjaG8gbmjhu69uZyB04bqtcCB0aW4gdOG7k24gdOG6oWkgdsOgIGtow7RuZyBjw7MgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTkzCittc2dpZCAiZG9uJ3QgY2hlY2tvdXQgbmV3IGZpbGVzIgorbXNnc3RyICJraMO0bmcgY2hlY2tvdXQgY8OhYyB04bqtcCB0aW4gbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxOTUKK21zZ2lkICJ1cGRhdGUgc3RhdCBpbmZvcm1hdGlvbiBpbiB0aGUgaW5kZXggZmlsZSIKK21zZ3N0ciAiY+G6rXAgbmjhuq10IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogdHJvbmcgdOG6rXAgdGluIGzGsHUgYuG6o25nIG3hu6VjIGzhu6VjIG3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAxCittc2dpZCAicmVhZCBsaXN0IG9mIHBhdGhzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLEkeG7jWMgZGFuaCBzw6FjaCDEkcaw4budbmcgZOG6q24gdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICJnaGkgbuG7mWkgZHVuZyB2w6BvIHThuq1wIHRpbiB04bqhbSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwNCBidWlsdGluL2NvbHVtbi5jOjMwCittc2dpZCAic3RyaW5nIgorbXNnc3RyICJjaHXhu5dpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA1Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAia2hpIHThuqFvIGPDoWMgdOG6rXAgdGluLCBu4buRaSB0aMOqbSA8Y2h14buXaT4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDgKK21zZ2lkICJjb3B5IG91dCB0aGUgZmlsZXMgZnJvbSBuYW1lZCBzdGFnZSIKK21zZ3N0ciAic2FvIGNow6lwIHJhIGPDoWMgdOG6rXAgdGluIHThu6sgYuG7hyBwaMOzbmcgY8OzIHTDqm4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNQorbXNnaWQgImdpdCBjaGVja291dCBbPG9wdGlvbnM+XSA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0IFs8Y8OhYy10w7l5LWNo4buNbj5dIDxuaMOhbmg+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYKK21zZ2lkICJnaXQgY2hlY2tvdXQgWzxvcHRpb25zPl0gWzxicmFuY2g+XSAtLSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBjaGVja291dCBbPGPDoWMtdMO5eS1jaOG7jW4+XSBbPG5ow6FuaD5dIC0tIDx04bqtcC10aW4+4oCmIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSBraMO0bmcgY8OzIGPDoWMgcGhpw6puIGLhuqNuIGPhu6dhIGNow7puZyB0YSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNSBidWlsdGluL2NoZWNrb3V0LmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSBraMO0bmcgY8OzIGPDoWMgcGhpw6puIGLhuqNuIGPhu6dhIGNow7puZyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24g4oCcJXPigJ0ga2jDtG5nIGPDsyB04bqldCBj4bqjIGPDoWMgcGhpw6puIGLhuqNuIGPhuqduIHRoaeG6v3QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24g4oCcJXPigJ0ga2jDtG5nIGPDsyBjw6FjIHBoacOqbiBi4bqjbiBj4bqnbiB0aGnhur90IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjEyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJzogY2Fubm90IG1lcmdlIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24g4oCcJXPigJ06IGtow7RuZyB0aOG7gyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHRow6ptIGvhur90IHF14bqjIGjDsmEgdHLhu5luIGNobyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI1MCBidWlsdGluL2NoZWNrb3V0LmM6MjUzIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTYKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoIHVwZGF0aW5nIHBhdGhzIgorbXNnc3RyICJraMO0bmcgxJHGsOG7o2MgZMO5bmcg4oCcJXPigJ0gduG7m2kgY8OhYyDEkcaw4budbmcgZOG6q24gY+G6rXAgbmjhuq10IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYyIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICJraMO0bmcgxJHGsOG7o2MgZMO5bmcg4oCcJXPigJ0gduG7m2kgJXMiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCBjw6FjIMSRxrDhu51uZyBk4bqrbiB2w6AgY2h1eeG7g24gxJHhur9uIG5ow6FuaCDigJwlc+KAnSBjw7luZyBt4buZdCBsw7pjLiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI3OSBidWlsdGluL2NoZWNrb3V0LmM6NDczCittc2dpZCAiY29ycnVwdCBpbmRleCBmaWxlIgorbXNnc3RyICJ04bqtcCB0aW4gZ2hpIGLhuqNuZyBt4bulYyBs4bulYyBi4buLIGjhu49uZyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMzOSBidWlsdGluL2NoZWNrb3V0LmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAixJHGsOG7nW5nIGThuqtuIOKAnCVz4oCdIGtow7RuZyDEkcaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjQ5NQorbXNnaWQgInlvdSBuZWVkIHRvIHJlc29sdmUgeW91ciBjdXJyZW50IGluZGV4IGZpcnN0IgorbXNnc3RyICJi4bqhbiBj4bqnbiBwaOG6o2kgZ2nhuqNpIHF1eeG6v3QgYuG6o25nIG3hu6VjIGzhu6VjIGhp4buHbiB04bqhaSBj4bunYSBi4bqhbiB0csaw4bubYyDEkcOjIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbiBub3QgZG8gcmVmbG9nIGZvciAnJXMnOiAlc1xuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiByZWZsb2cgY2hvIOKAnCVz4oCdOiAlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjYwCittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQgaGnhu4duIGdp4budIHThuqFpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIsSQ4bq3dCBs4bqhaSBuaMOhbmgg4oCcJXPigJ1cbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3MAorIywgYy1mb3JtYXQKK21zZ2lkICJBbHJlYWR5IG9uICclcydcbiIKK21zZ3N0ciAixJDDoyBz4bq1biBzw6BuZyB0csOqbiDigJwlc+KAnVxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlN3aXRjaGVkIHRvIGFuZCByZXNldCBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLEkMOjIGNodXnhu4NuIHThu5tpIHbDoCDEkeG6t3QgbOG6oWkgbmjDoW5oIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzYgYnVpbHRpbi9jaGVja291dC5jOjEwNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAixJDDoyBjaHV54buDbiDEkeG6v24gbmjDoW5oIG3hu5tpIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYnJhbmNoICclcydcbiIKK21zZ3N0ciAixJDDoyBjaHV54buDbiDEkeG6v24gbmjDoW5oIOKAnCVz4oCdXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAiIOKApiB2w6Agbmhp4buBdSBoxqFuICVkLlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzM2CisjLCBjLWZvcm1hdAogbXNnaWQgIiIKLSJSZXZlcnQgZmFpbGVkIGJlY2F1c2Ugb2YgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzOiVzIFBsZWFzZSAiCi0iY29tbWl0LCByZXNldCBvciBzdGFzaCAgeW91ciBjaGFuZ2VzIGFuZCB0cnkgYWdhaW4uIgotbXNnc3RyICIiCi0iUmV2ZXJ0IGfhurdwIGzhu5dpIGLhu59pIHbDrCB04bqtcCB0aW4gc2F1IMSRw6MgxJHGsOG7o2MgdGhheSDEkeG7lWkgbuG7mWkgYuG7mTolc1xuIgotIlhpbiBow6N5IGNo4bqheSBs4buHbmgg4oCcY29tbWl04oCdLCDigJxyZXNldOKAnSBob+G6t2Mg4oCcc3Rhc2jigJ0gcuG7k2kgdGjhu60gbOG6oWkuIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyJD4bqjbmggYsOhbzogYuG6oW4gxJHDoyBy4budaSBi4buPICVkIGzhuqduIGNodXnhu4NuIGdpYW8gbOG6oWkgxJHhurFuZyBzYXUsIGtow7RuZyDEkcaw4bujYyBr4bq/dCBu4buRaSAiCisixJHhur9uXG4iCisiYuG6pXQga+G7syBuaMOhbmggbsOgbyBj4bunYSBi4bqhbjpcbiIKKyJcbiIKKyIlc1xuIgogCi0jOiBnaXRrOjk2MTAKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3NTUKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIlJldmVydCBmYWlsZWQgYmVjYXVzZSBvZiBtZXJnZSBjb25mbGljdC5cbiIKLSIgRG8geW91IHdpc2ggdG8gcnVuIGdpdCBjaXRvb2wgdG8gcmVzb2x2ZSBpdD8iCisiSWYgeW91IHdhbnQgdG8ga2VlcCBpdCBieSBjcmVhdGluZyBhIG5ldyBicmFuY2gsIHRoaXMgbWF5IGJlIGEgZ29vZCB0aW1lXG4iCisidG8gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA8bmV3LWJyYW5jaC1uYW1lPiAlc1xuIgorIlxuIgorbXNnaWRfcGx1cmFsICIiCisiSWYgeW91IHdhbnQgdG8ga2VlcCB0aGVtIGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dzdHJbMF0gIiIKKyJO4bq/dSBi4bqhbiBtdeG7kW4gZ2nhu68gKGNow7puZykgbsOzIGLhurFuZyBjw6FjaCB04bqhbyByYSBt4buZdCBuaMOhbmggbeG7m2ksIMSRw6J5IGPDsyBs4bq9IGzDoFxuIgorIm3hu5l0IHRo4budaSDEkWnhu4NtIHRow61jaCBo4bujcCDEkeG7gyBsw6BtIHRo4bq/IGLhurFuZyBs4buHbmg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPHTDqm5fbmjDoW5oX23hu5tpPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzkxCittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAibOG7l2kgbuG7mWkgYuG7mSB0cm9uZyBraGkgZGkgY2h1eeG7g24gcXVhIGPDoWMgxJFp4buDbSB4w6l0IGR1eeG7h3QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3OTUKK21zZ2lkICJQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcyIKK21zZ3N0ciAiVuG7iyB0csOtIHRyxrDhu5tjIGtpYSBj4bunYSBIRUFEIGzDoCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgyMiBidWlsdGluL2NoZWNrb3V0LmM6MTA2MAorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIkLhuqFuIHThuqFpIG5ow6FuaCBtw6AgbsOzIGNoxrBhIGjhu4EgxJHGsOG7o2Mgc2luaCByYSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk2NworIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAiY2jhu4kgY+G6p24gbeG7mXQgdGhhbSBjaGnhur91LCBuaMawbmcgbOG6oWkgxJHGsGEgcmEgJWQuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAwNiBidWlsdGluL3dvcmt0cmVlLmM6MjEwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcmVmZXJlbmNlOiAlcyIKK21zZ3N0ciAidGhhbSBjaGnhur91IGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIGlzIG5vdCBhIHRyZWU6ICVzIgorbXNnc3RyICJ0aGFtIGNoaeG6v3Uga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgY8OieTolcyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwNzQKK21zZ2lkICJwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRoIHN3aXRjaGluZyBicmFuY2hlcyIKK21zZ3N0ciAiY8OhYyDEkcaw4budbmcgZOG6q24ga2jDtG5nIHRo4buDIGTDuW5nIGPDuW5nIHbhu5tpIGPDoWMgbmjDoW5oIGNodXnhu4NuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3NyBidWlsdGluL2NoZWNrb3V0LmM6MTA4MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgdGjhu4MgxJHGsOG7o2Mgc+G7rSBk4bulbmcgduG7m2kgY8OhYyBuaMOhbmggY2h1eeG7g24iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDg1IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDg4IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDkzCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA5NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggJyVzJyIKK21zZ3N0ciAi4oCcJXPigJ0ga2jDtG5nIHRo4buDIMSRxrDhu6NjIGTDuW5nIHbhu5tpIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGNodXnhu4NuIG5ow6FuaCDEkeG6v24gbeG7mXQgdGjhu6kga2jDtG5nIHBo4bqjaSBsw6AgbOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzQgYnVpbHRpbi9jaGVja291dC5jOjExMzYgYnVpbHRpbi9jbG9uZS5jOjgzCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OSBidWlsdGluL3JlbW90ZS5jOjE2MSBidWlsdGluL3dvcmt0cmVlLmM6MzE3CisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzE5Cittc2dpZCAiYnJhbmNoIgorbXNnc3RyICJuaMOhbmgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM1Cittc2dpZCAiY3JlYXRlIGFuZCBjaGVja291dCBhIG5ldyBicmFuY2giCittc2dzdHIgInThuqFvIHbDoCBjaGVja291dCBt4buZdCBuaMOhbmggbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAidOG6oW8vxJHhurd0X2zhuqFpIHbDoCBjaGVja291dCBt4buZdCBuaMOhbmgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM4Cittc2dpZCAiY3JlYXRlIHJlZmxvZyBmb3IgbmV3IGJyYW5jaCIKK21zZ3N0ciAidOG6oW8gcmVmbG9nIGNobyBuaMOhbmggbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM5Cittc2dpZCAiZGV0YWNoIHRoZSBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAicuG7nWkgYuG7jyBIRUFEIHThuqFpIGzhuqduIGNodXnhu4NuIGdpYW8gZGFuaCBuZ2jEqWEiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQwCittc2dpZCAic2V0IHVwc3RyZWFtIGluZm8gZm9yIG5ldyBicmFuY2giCittc2dzdHIgIsSR4bq3dCB0aMO0bmcgdGluIHRoxrDhu6NuZyBuZ3Xhu5NuIGNobyBuaMOhbmggbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQyCittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAibmjDoW5oLW3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0MgorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAibmjDoW5oIGtow7RuZyBjaGEgbeG7m2kiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQzCittc2dpZCAiY2hlY2tvdXQgb3VyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgogbXNnc3RyICIiCi0iUmV2ZXJ0IGfhurdwIGzhu5dpIGLhu59pIHbDrCB4dW5nIMSR4buZdCBow7JhIHRy4buZbi5cbiIKLSIgQuG6oW4gY8OzIG114buRbiBjaOG6oXkgbOG7h25oIOKAnGdpdCBjaXRvb2zigJ0gxJHhu4MgcGjDom4gZ2nhuqNpIG7DsyBraMO0bmc/IgorImzhuqV5IHJhIChjaGVja291dCkgcGhpw6puIGLhuqNuIGPhu6dhIGNow7puZyB0YSBjaG8gY8OhYyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCiAKLSM6IGdpdGs6OTY1MwotbXNnaWQgIkNvbmZpcm0gcmVzZXQiCi1tc2dzdHIgIljDoWMgbmjhuq10IMSR4bq3dCBs4bqhaSIKLQotIzogZ2l0azo5NjU1Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiUmVzZXQgYnJhbmNoICVzIHRvICVzPyIKLW1zZ3N0ciAixJDhurd0IGzhuqFpIG5ow6FuaCDigJwlc+KAnSB0aMOgbmgg4oCcJXPigJ0/IgotCi0jOiBnaXRrOjk2NTcKLW1zZ2lkICJSZXNldCB0eXBlOiIKLW1zZ3N0ciAiS2nhu4N1IMSR4bq3dCBs4bqhaToiCi0KLSM6IGdpdGs6OTY2MAotbXNnaWQgIlNvZnQ6IExlYXZlIHdvcmtpbmcgdHJlZSBhbmQgaW5kZXggdW50b3VjaGVkIgotbXNnc3RyICJN4buBbTogS2jDtG5nIMSR4buZbmcgxJHhur9uIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgdsOgIGLhuqNuZyBt4bulYyBs4bulYyIKLQotIzogZ2l0azo5NjYzCi1tc2dpZCAiTWl4ZWQ6IExlYXZlIHdvcmtpbmcgdHJlZSB1bnRvdWNoZWQsIHJlc2V0IGluZGV4IgorIzogYnVpbHRpbi9jaGVja291dC5jOjExNDUKK21zZ2lkICJjaGVja291dCB0aGVpciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKIG1zZ3N0ciAiIgotIlBoYSB0cuG7mW46IEtow7RuZyDEkeG7mW5nIGNo4bqhbSDEkeG6v24gdGjGsCBt4bulYyBsw6BtIHZp4buHYyBuaMawbmcgxJHhurd0IGzhuqFpIGLhuqNuZyBt4bulYyBs4bulYyIKKyJs4bqleSByYSAoY2hlY2tvdXQpIHBoacOqbiBi4bqjbiBj4bunYSBjaMO6bmcgaOG7jSBjaG8gY8OhYyB04bqtcCB0aW4gY2jGsGEgxJHGsOG7o2MgaMOyYSB0cuG7mW4iCiAKLSM6IGdpdGs6OTY2NgorIzogYnVpbHRpbi9jaGVja291dC5jOjExNDcKK21zZ2lkICJmb3JjZSBjaGVja291dCAodGhyb3cgYXdheSBsb2NhbCBtb2RpZmljYXRpb25zKSIKK21zZ3N0ciAiw6lwIGJ14buZYyBs4bqleSByYSAoYuG7jyDEkWkgbmjhu69uZyB0aGF5IMSR4buVaSBu4buZaSBi4buZKSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDgKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAidGjhu7FjIGhp4buHbiBow7JhIHRy4buZbiBraeG7g3UgMy13YXkgduG7m2kgbmjDoW5oIG3hu5tpIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0OSBidWlsdGluL21lcmdlLmM6MjI3Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICJj4bqtcCBuaOG6rXQgY8OhYyB04bqtcCB0aW4gYuG7iyBi4buPIHF1YSAobeG6t2MgxJHhu4tuaCkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTUwIGJ1aWx0aW4vbG9nLmM6MTI2NCBwYXJzZS1vcHRpb25zLmg6MjQ5Cittc2dpZCAic3R5bGUiCittc2dzdHIgImtp4buDdSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTEKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICJ4dW5nIMSR4buZdCBraeG7g3UgKGjDsmEgdHLhu5luIGhv4bq3YyBkaWZmMykiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTU0Cittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICJraMO0bmcgZ2nhu5tpIGjhuqFuIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiB0aMOgbmggY2jhu4kgY8OhYyBt4bulYyB0aMawYSB0aOG7m3QiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTU2Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgImfhu6NpIMO9IHRo4bupIGhhaSBcImdpdCBjaGVja291dCA8a2jDtG5nLW5ow6FuaC1uw6BvLW5oxrAtduG6rXk+XCIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTU4Cittc2dpZCAiZG8gbm90IGNoZWNrIGlmIGFub3RoZXIgd29ya3RyZWUgaXMgaG9sZGluZyB0aGUgZ2l2ZW4gcmVmIgorbXNnc3RyICJraMO0bmcga2nhu4NtIHRyYSBu4bq/dSBjw6J5IGzDoG0gdmnhu4djIGtow6FjIMSRYW5nIGdp4buvIHRoYW0gY2hp4bq/dSDEkcOjIGNobyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExODEKK21zZ2lkICItYiwgLUIgYW5kIC0tb3JwaGFuIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gLWIsIC1CIHbDoCAtLW9ycGhhbiBsb+G6oWkgdOG7qyBs4bqrbiBuaGF1IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE5OAorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayBj4bqnbiB0w6puIG3hu5l0IG5ow6FuaCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyMDMKK21zZ2lkICJNaXNzaW5nIGJyYW5jaCBuYW1lOyB0cnkgLWIiCittc2dzdHIgIlRoaeG6v3UgdMOqbiBuaMOhbmg7IGjDo3kgdGjhu60gLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjM5Cittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgIsSRxrDhu51uZyBk4bqrbiDEkcOjIGNobyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDYKKyMsIGMtZm9ybWF0CiBtc2dpZCAiIgotIkhhcmQ6IFJlc2V0IHdvcmtpbmcgdHJlZSBhbmQgaW5kZXhcbiIKLSIoZGlzY2FyZCBBTEwgbG9jYWwgY2hhbmdlcykiCisiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuXG4iCisiRGlkIHlvdSBpbnRlbmQgdG8gY2hlY2tvdXQgJyVzJyB3aGljaCBjYW4gbm90IGJlIHJlc29sdmVkIGFzIGNvbW1pdD8iCiBtc2dzdHIgIiIKLSJIYXJkOiDEkOG6t3QgbOG6oWkgY8OieSBsw6BtIHZp4buHYyB2w6AgbeG7pWMgbOG7pWNcbiIKLSIoaOG7p3kgYuG7jyBN4buMSSB0aGF5IMSR4buVaSBu4buZaSBi4buZKSIKKyJLaMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IHbDoCBjaHV54buDbiB0aMOgbmggbmjDoW5oIOKAnCVz4oCdIGPDuW5nIGzDumNcbiIKKyJC4bqhbiDEkcOjIGPDsyDDvSDEkeG7i25oIGNoZWNrb3V0IOKAnCVz4oCdIGPDoWkgbcOgIGtow7RuZyB0aOG7gyDEkcaw4bujYyBwaMOibiBnaeG6o2kgbmjGsCBsw6AgbOG6p24gIgorImNodXnhu4NuIGdpYW8/IgogCi0jOiBnaXRrOjk2ODMKLW1zZ2lkICJSZXNldHRpbmciCi1tc2dzdHIgIsSQYW5nIMSR4bq3dCBs4bqhaSIKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjUxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBjaGVja291dDogLS1kZXRhY2ggZG9lcyBub3QgdGFrZSBhIHBhdGggYXJndW1lbnQgJyVzJyIKK21zZ3N0ciAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBraMO0bmcgbmjhuq1uIG3hu5l0IMSR4buRaSBz4buRIMSRxrDhu51uZyBk4bqrbiDigJwlc+KAnSIKIAotIzogZ2l0azo5NzQzCi1tc2dpZCAiQ2hlY2tpbmcgb3V0IgotbXNnc3RyICLEkGFuZyBjaGVja291dCIKLQotIzogZ2l0azo5Nzk2Ci1tc2dpZCAiQ2Fubm90IGRlbGV0ZSB0aGUgY3VycmVudGx5IGNoZWNrZWQtb3V0IGJyYW5jaCIKLW1zZ3N0ciAiS2jDtG5nIHRo4buDIHjDs2EgbmjDoW5oIGhp4buHbiB04bqhaSDEkWFuZyDEkcaw4bujYyBs4bqleSByYSIKLQotIzogZ2l0azo5ODAyCi0jLCB0Y2wtZm9ybWF0CisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTI1NQogbXNnaWQgIiIKLSJUaGUgY29tbWl0cyBvbiBicmFuY2ggJXMgYXJlbid0IG9uIGFueSBvdGhlciBicmFuY2guXG4iCi0iUmVhbGx5IGRlbGV0ZSBicmFuY2ggJXM/IgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIGFuZCAtLW1lcmdlIGFyZSBpbmNvbXBhdGlibGUgd2hlblxuIgorImNoZWNraW5nIG91dCBvZiB0aGUgaW5kZXguIgogbXNnc3RyICIiCi0iQ8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIHRyw6puIG5ow6FuaCAlcyBraMO0bmcg4bufIHRyw6puIG5ow6FuaCBraMOhYy5cbiIKLSJUaOG7sWMgc+G7sSBtdeG7kW4geMOzYSBuaMOhbmggJXM/IgorImdpdCBjaGVja291dDogLS1vdXJzLy0tdGhlaXJzLCAtLWZvcmNlIHbDoCAtLW1lcmdlIGzDoCB4dW5nIGto4bqvYyB24bubaSBuaGF1IGtoaVxuIgorImNoZWNrb3V0IGLhuqNuZyBt4bulYyBs4bulYyAoaW5kZXgpLiIKIAotIzogZ2l0azo5ODMzCi0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiVGFncyBhbmQgaGVhZHM6ICVzIgotbXNnc3RyICJUaOG6uyB2w6AgxJDhuqd1OiAlcyIKLQotIzogZ2l0azo5ODUwCi1tc2dpZCAiRmlsdGVyIgotbXNnc3RyICJC4buZIGzhu41jIgotCi0jOiBnaXRrOjEwMTQ2CisjOiBidWlsdGluL2NsZWFuLmM6MjUKIG1zZ2lkICIiCi0iRXJyb3IgcmVhZGluZyBjb21taXQgdG9wb2xvZ3kgaW5mb3JtYXRpb247IGJyYW5jaCBhbmQgcHJlY2VkaW5nL2ZvbGxvd2luZyAiCi0idGFnIGluZm9ybWF0aW9uIHdpbGwgYmUgaW5jb21wbGV0ZS4iCisiZ2l0IGNsZWFuIFstZF0gWy1mXSBbLWldIFstbl0gWy1xXSBbLWUgPHBhdHRlcm4+XSBbLXggfCAtWF0gWy0tXSA8cGF0aHM+Li4uIgogbXNnc3RyICIiCi0iR+G6t3AgbOG7l2kga2hpIMSR4buNYyB0aMO0bmcgdGluIGjDrG5oIGjhu41jIGzhuqduIGNodXnhu4NuIGdpYW87IHRow7RuZyB0aW4gbmjDoW5oIHbDoCB0aOG6uyAiCi0idHLGsOG7m2Mvc2F1IHPhur0ga2jDtG5nIGhvw6BuIHRoaeG7h24uIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxt4bqrdT5dIFsteCB8IC1YXSBbLS1dIDzEkcaw4budbmctZOG6q24+4oCmIgogCi0jOiBnaXRrOjExMTIzCi1tc2dpZCAiVGFnIgotbXNnc3RyICJUaOG6uyIKKyM6IGJ1aWx0aW4vY2xlYW4uYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlc1xuIgorbXNnc3RyICLEkGFuZyBn4buhIGLhu48gJXNcbiIKIAotIzogZ2l0azoxMTEyNwotbXNnaWQgIklkIgotbXNnc3RyICJJZCIKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCByZW1vdmUgJXNcbiIKK21zZ3N0ciAiQ8OzIHRo4buDIGfhu6EgYuG7jyAlc1xuIgogCi0jOiBnaXRrOjExMjEwCi1tc2dpZCAiR2l0ayBmb250IGNob29zZXIiCi1tc2dzdHIgIkjhu5lwIHRob+G6oWkgY2jhu41uIHBow7RuZyBHaXRrIgorIzogYnVpbHRpbi9jbGVhbi5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIlNraXBwaW5nIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAixJBhbmcgYuG7jyBxdWEga2hvIGNo4bupYSAlc1xuIgogCi0jOiBnaXRrOjExMjI3Ci1tc2dpZCAiQiIKLW1zZ3N0ciAiQiIKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJXb3VsZCBza2lwIHJlcG9zaXRvcnkgJXNcbiIKK21zZ3N0ciAiTsOqbiBi4buPIHF1YSBraG8gY2jhu6lhICVzXG4iCiAKLSM6IGdpdGs6MTEyMzAKLW1zZ2lkICJJIgotbXNnc3RyICJJIgorIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBn4buhIGLhu48gJXMiCiAKLSM6IGdpdGs6MTEzNDgKLW1zZ2lkICJDb21taXQgbGlzdCBkaXNwbGF5IG9wdGlvbnMiCi1tc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gduG7gSBoaeG7g24gdGjhu4sgZGFuaCBzw6FjaCBs4bqnbiBjaHV54buDbiBnaWFvIgorIzogYnVpbHRpbi9jbGVhbi5jOjMxNworbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmciCittc2dzdHIgIiIKKyJUcuG7oyBnacO6cCB24buBIG5o4bqvYzpcbiIKKyIxICAgICAgICAgIC0gY2jhu41uIG3hu5l0IG3hu6VjIMSRxrDhu6NjIMSRw6FuaCBz4buRXG4iCisiZm9vICAgICAgICAtIGNo4buNbiBt4bulYyB0csOqbiBjxqEgc+G7nyB0aeG7gW4gdOG7kSBkdXkgbmjhuqV0XG4iCisiICAgICAgICAgICAtICjEkeG7gyB0cuG7kW5nKSBraMO0bmcgY2jhu41uIGfDrCBj4bqjIgogCi0jOiBnaXRrOjExMzUxCi1tc2dpZCAiTWF4aW11bSBncmFwaCB3aWR0aCAobGluZXMpIgotbXNnc3RyICLEkOG7mSBy4buZbmcgYmnhu4N1IMSR4buTIHThu5FpIMSRYSAoZMOybmcpIgorIzogYnVpbHRpbi9jbGVhbi5jOjMyMQorbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgc2luZ2xlIGl0ZW1cbiIKKyIzLTUgICAgICAgIC0gc2VsZWN0IGEgcmFuZ2Ugb2YgaXRlbXNcbiIKKyIyLTMsNi05ICAgIC0gc2VsZWN0IG11bHRpcGxlIHJhbmdlc1xuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiLS4uLiAgICAgICAtIHVuc2VsZWN0IHNwZWNpZmllZCBpdGVtc1xuIgorIiogICAgICAgICAgLSBjaG9vc2UgYWxsIGl0ZW1zXG4iCisiICAgICAgICAgICAtIChlbXB0eSkgZmluaXNoIHNlbGVjdGluZyIKK21zZ3N0ciAiIgorIlRy4bujIGdpw7pwIHbhu4Egbmjhuq9jOlxuIgorIjEgICAgICAgICAgLSBjaOG7jW4gbeG7mXQgbeG7pWMgxJHGoW5cbiIKKyIzLTUgICAgICAgIC0gY2jhu41uIG3hu5l0IHbDuW5nXG4iCisiMi0zLDYtOSAgICAtIGNo4buNbiBuaGnhu4F1IHbDuW5nXG4iCisiZm9vICAgICAgICAtIGNo4buNbiBt4bulYyBk4buxYSB0csOqbiB0aeG7gW4gdOG7kSBkdXkgbmjhuqV0XG4iCisiLeKApiAgICAgICAtIGtow7RuZyBjaOG7jW4gY8OhYyBt4bulYyDEkcOjIGNo4buJIHJhXG4iCisiKiAgICAgICAgICAtIGNo4buNbiB04bqldFxuIgorIiAgICAgICAgICAgLSAoxJHhu4MgdHLhu5FuZykga+G6v3QgdGjDumMgdmnhu4djIGNo4buNbiIKIAotIzogZ2l0azoxMTM1NQotIywgbm8tdGNsLWZvcm1hdAotbXNnaWQgIk1heGltdW0gZ3JhcGggd2lkdGggKCUgb2YgcGFuZSkiCi1tc2dzdHIgIsSQ4buZIHLhu5luZyDEkeG7kyB0aOG7iyB04buRaSDEkWEgKCUgY+G7p2EgYuG6o25nKSIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiSHVoICglcyk/IgorbXNnc3RyICJI4bqjICglcyk/IgogCi0jOiBnaXRrOjExMzU4Ci1tc2dpZCAiU2hvdyBsb2NhbCBjaGFuZ2VzIgotbXNnc3RyICJIaeG7g24gdGjhu4sgY8OhYyB0aGF5IMSR4buVaSBu4buZaSBi4buZIgorIzogYnVpbHRpbi9jbGVhbi5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnB1dCBpZ25vcmUgcGF0dGVybnM+PiAiCittc2dzdHIgIk3huqt1IMSR4buDIGzhu41jIGPDoWMgdOG6rXAgdGluIMSR4bqndSB2w6BvIGPhuqduIGzhu50gxJFpPj4gIgogCi0jOiBnaXRrOjExMzYxCi1tc2dpZCAiQXV0by1zZWxlY3QgU0hBMSAobGVuZ3RoKSIKLW1zZ3N0ciAiVOG7sSBjaOG7jW4gKMSR4buZIGTDoGkpIFNIQTEiCisjOiBidWlsdGluL2NsZWFuLmM6NzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIldBUk5JTkc6IENhbm5vdCBmaW5kIGl0ZW1zIG1hdGNoZWQgYnk6ICVzIgorbXNnc3RyICJD4bqiTkggQsOBTzogS2jDtG5nIHTDrG0gdGjhuqV5IGPDoWMgbeG7pWMgxJHGsOG7o2Mga2jhu5twIGLhu59pOiAlcyIKIAotIzogZ2l0azoxMTM2NQotbXNnaWQgIkhpZGUgcmVtb3RlIHJlZnMiCi1tc2dzdHIgIuG6qG4gdGhhbSBjaGnhur91IMSR4bq/biBtw6F5IGNo4bunIgorIzogYnVpbHRpbi9jbGVhbi5jOjczNworbXNnaWQgIlNlbGVjdCBpdGVtcyB0byBkZWxldGUiCittc2dzdHIgIkNo4buNbiBt4bulYyBtdeG7kW4geMOzYSIKIAotIzogZ2l0azoxMTM2OQotbXNnaWQgIkRpZmYgZGlzcGxheSBvcHRpb25zIgotbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIHRyw6xuaCBiw6B5IGPDoWMga2jDoWMgYmnhu4d0IgorIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBrZWVwIFt5L05dIGFzIGlzCisjOiBidWlsdGluL2NsZWFuLmM6Nzc4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92ZSAlcyBbeS9OXT8gIgorbXNnc3RyICJYw7NhIGLhu48g4oCcJXPigJ0gW3kvTl0/ICIKIAotIzogZ2l0azoxMTM3MQotbXNnaWQgIlRhYiBzcGFjaW5nIgotbXNnc3RyICJLaG/huqNuZyBjw6FjaCB0YWIiCisjOiBidWlsdGluL2NsZWFuLmM6ODAzCittc2dpZCAiQnllLiIKK21zZ3N0ciAiVOG6oW0gYmnhu4d0LiIKIAotIzogZ2l0azoxMTM3NAotbXNnaWQgIkRpc3BsYXkgbmVhcmJ5IHRhZ3MvaGVhZHMiCi1tc2dzdHIgIkhp4buDbiB0aOG7iyBjw6FjIHRo4bq7L8SR4bqndSB4dW5nIHF1YW5oIgorIzogYnVpbHRpbi9jbGVhbi5jOjgxMQorbXNnaWQgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0gc3RhcnQgY2xlYW5pbmdcbiIKKyJmaWx0ZXIgYnkgcGF0dGVybiAgIC0gZXhjbHVkZSBpdGVtcyBmcm9tIGRlbGV0aW9uXG4iCisic2VsZWN0IGJ5IG51bWJlcnMgICAtIHNlbGVjdCBpdGVtcyB0byBiZSBkZWxldGVkIGJ5IG51bWJlcnNcbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0gY29uZmlybSBlYWNoIGRlbGV0aW9uIChsaWtlIFwicm0gLWlcIilcbiIKKyJxdWl0ICAgICAgICAgICAgICAgIC0gc3RvcCBjbGVhbmluZ1xuIgorImhlbHAgICAgICAgICAgICAgICAgLSB0aGlzIHNjcmVlblxuIgorIj8gICAgICAgICAgICAgICAgICAgLSBoZWxwIGZvciBwcm9tcHQgc2VsZWN0aW9uIgorbXNnc3RyICIiCisiY2xlYW4gICAgICAgICAgICAgICAtIGLhuq90IMSR4bqndSBk4buNbiBk4bq5cFxuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBsb+G6oWkgdHLhu6sgY8OhYyBt4bulYyBraOG7j2kgdmnhu4djIHjDs2FcbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gY2jhu41uIGPDoWMgbeG7pWMgY+G6p24geMOzYSBi4bqxbmcgc+G7kVxuIgorImFzayBlYWNoICAgICAgICAgICAgLSB4w6FjIG5o4bqtbiB0csaw4bubYyBt4buXaSBs4bqnbiB4w7NhIChnaeG7kW5nIG5oxrAgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBk4burbmcgdmnhu4djIGThu41uIGThurlwIGzhuqFpXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIGhp4buDbiB0aOG7iyBjaMOtbmggdHLhu6MgZ2nDunAgbsOgeVxuIgorIj8gICAgICAgICAgICAgICAgICAgLSB0cuG7oyBnacO6cCBkw6BuaCBjaG8gY2jhu41uIGLhurFuZyBjw6FjaCBuaOG6r2MiCiAKLSM6IGdpdGs6MTEzNzcKLW1zZ2lkICJNYXhpbXVtICMgdGFncy9oZWFkcyB0byBzaG93IgotbXNnc3RyICJT4buRIGzGsOG7o25nIHRo4bq7L8SR4bqndSB04buRaSDEkWEgc+G6vSBoaeG7g24gdGjhu4siCisjOiBidWlsdGluL2NsZWFuLmM6ODM4Cittc2dpZCAiKioqIENvbW1hbmRzICoqKiIKK21zZ3N0ciAiKioqIEzhu4duaCAqKioiCiAKLSM6IGdpdGs6MTEzODAKLW1zZ2lkICJMaW1pdCBkaWZmcyB0byBsaXN0ZWQgcGF0aHMiCi1tc2dzdHIgIkdp4bubaSBo4bqhbiBjw6FjIGtow6FjIGJp4buHdCBjaG8gxJHGsOG7nW5nIGThuqtuIMSRw6MgbGnhu4d0IGvDqiIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4MzkKK21zZ2lkICJXaGF0IG5vdyIKK21zZ3N0ciAiR2nhu50gdGjDrCBzYW8iCiAKLSM6IGdpdGs6MTEzODMKLW1zZ2lkICJTdXBwb3J0IHBlci1maWxlIGVuY29kaW5ncyIKLW1zZ3N0ciAiSOG7lyB0cuG7oyBtw6MgaMOzYSBt4buXaS1kw7JuZyIKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4NDcKK21zZ2lkICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtOiIKK21zZ2lkX3BsdXJhbCAiV291bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgaXRlbXM6IgorbXNnc3RyWzBdICJDw7MgbXXhu5FuIGfhu6EgYuG7jyAoY8OhYykgbeG7pWMgc2F1IMSRw6J5IGtow7RuZzoiCiAKLSM6IGdpdGs6MTEzODkgZ2l0azoxMTUzNgotbXNnaWQgIkV4dGVybmFsIGRpZmYgdG9vbCIKLW1zZ3N0ciAiQ8O0bmcgY+G7pSBzbyBzw6FuaCB04burIGLDqm4gbmdvw6BpIgorIzogYnVpbHRpbi9jbGVhbi5jOjg2NAorbXNnaWQgIk5vIG1vcmUgZmlsZXMgdG8gY2xlYW4sIGV4aXRpbmcuIgorbXNnc3RyICJLaMO0bmcgY8OybiB04bqtcC10aW4gbsOgbyDEkeG7gyBk4buNbiBk4bq5cCwgxJFhbmcgdGhvw6F0IHJhLiIKIAotIzogZ2l0azoxMTM5MAotbXNnaWQgIkNob29zZS4uLiIKLW1zZ3N0ciAiQ2jhu41u4oCmIgorIzogYnVpbHRpbi9jbGVhbi5jOjg5NQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICJraMO0bmcgaGnhu4NuIHRo4buLIHTDqm4gY+G7p2EgY8OhYyB04bqtcCB0aW4gxJHDoyBn4buhIGLhu48iCiAKLSM6IGdpdGs6MTEzOTUKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4OTcKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAiw6lwIGJ14buZYyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg5OAorbXNnaWQgImludGVyYWN0aXZlIGNsZWFuaW5nIgorbXNnc3RyICJk4buNbiBi4bqxbmcga2nhu4N1IHTGsMahbmcgdMOhYyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwMAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAiZ+G7oSBi4buPIHRvw6BuIGLhu5kgdGjGsCBt4bulYyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwMSBidWlsdGluL2Rlc2NyaWJlLmM6NDA3IGJ1aWx0aW4vZ3JlcC5jOjcxNAorIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0MyBidWlsdGluL25hbWUtcmV2LmM6MzExIGJ1aWx0aW4vc2hvdy1yZWYuYzoxODcKK21zZ2lkICJwYXR0ZXJuIgorbXNnc3RyICJt4bqrdSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwMgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICJ0aMOqbSA8beG6q3U+IHbDoG8gdHJvbmcgcXVpIHThuq9jIGLhu48gcXVhIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTAzCittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAixJHhu5NuZyB0aOG7nWkgZ+G7oSBi4buPIGPhuqMgY8OhYyB04bqtcCB0aW4gYuG7iyBi4buPIHF1YSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwNQorbXNnaWQgInJlbW92ZSBvbmx5IGlnbm9yZWQgZmlsZXMiCittc2dzdHIgImNo4buJIGfhu6EgYuG7jyBuaOG7r25nIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTIzCittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIteCB2w6AgLVgga2jDtG5nIHRo4buDIGTDuW5nIGPDuW5nIG5oYXUiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MjcKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIHNldCB0byB0cnVlIGFuZCBuZWl0aGVyIC1pLCAtbiwgbm9yIC1mIGdpdmVuOyByZWZ1c2luZyB0byAiCisiY2xlYW4iCittc2dzdHIgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgxJHGsOG7o2MgxJHhurd0IHRow6BuaCB0cnVlIHbDoCBraMO0bmcgxJHGsGEgcmEgdMO5eSBjaOG7jW4gLWksIC1uIG3DoCAiCisiY8Wpbmcga2jDtG5nIC1mOyB04burIGNo4buRaSBs4buHbmggZOG7jW4gZOG6uXAgKGNsZWFuKSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkzMAorbXNnaWQgIiIKKyJjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgIgorInJlZnVzaW5nIHRvIGNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIG3hurdjIMSR4buLbmggxJHGsOG7o2MgxJHhurd0IGzDoCB0cnVlIHbDoCBraMO0bmcgxJHGsGEgcmEgdMO5eSBjaOG7jW4gLWksIC1uICIKKyJtw6AgY8Wpbmcga2jDtG5nIC1mOyB04burIGNo4buRaSBs4buHbmggZOG7jW4gZOG6uXAgKGNsZWFuKSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM3Cittc2dpZCAiZ2l0IGNsb25lIFs8b3B0aW9ucz5dIFstLV0gPHJlcG8+IFs8ZGlyPl0iCittc2dzdHIgImdpdCBjbG9uZSBbPGPDoWMtdMO5eS1jaOG7jW4+XSBbLS1dIDxraG8+IFs8dC5t4bulYz5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTcgYnVpbHRpbi9mZXRjaC5jOjExMiBidWlsdGluL21lcmdlLmM6MjI0CisjOiBidWlsdGluL3B1bGwuYzoxMDkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY4Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLDqXAgYnXhu5ljIGLDoW8gY8OhbyB0aeG6v24gdHJp4buDbiBjw7RuZyB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1OQorbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICJraMO0bmcgdOG6oW8gbeG7mXQgY2hlY2tvdXQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MCBidWlsdGluL2Nsb25lLmM6NjIgYnVpbHRpbi9pbml0LWRiLmM6NTA0Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICJ04bqhbyBraG8gdGh14bqnbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjY0Cittc2dpZCAiY3JlYXRlIGEgbWlycm9yIHJlcG9zaXRvcnkgKGltcGxpZXMgYmFyZSkiCittc2dzdHIgInThuqFvIGtobyBi4bqjbiBzYW8gKMO9IGzDoCBraG8gdGh14bqnbikiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NgorbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLEkeG7gyBuaMOibiBi4bqjbiB04burIGtobyBu4buZaSBi4buZIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjgKK21zZ2lkICJkb24ndCB1c2UgbG9jYWwgaGFyZGxpbmtzLCBhbHdheXMgY29weSIKK21zZ3N0ciAia2jDtG5nIHPhu60gZOG7pW5nIGxpw6puIGvhur90IGPhu6luZyBu4buZaSBi4buZLCBsdcO0biBzYW8gY2jDqXAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICJjw6BpIMSR4bq3dCDEkcOieSBsw6Aga2hvIGNoaWEgc+G6uyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcyIGJ1aWx0aW4vY2xvbmUuYzo3NAorbXNnaWQgImluaXRpYWxpemUgc3VibW9kdWxlcyBpbiB0aGUgY2xvbmUiCittc2dzdHIgImto4bufaSB04bqhbyBtw7QtxJF1bi1jb24gdHJvbmcgYuG6o24gc2FvIgorCisjOiBidWlsdGluL2Nsb25lLmM6NzUgYnVpbHRpbi9pbml0LWRiLmM6NTAxCittc2dpZCAidGVtcGxhdGUtZGlyZWN0b3J5IgorbXNnc3RyICJ0aMawLW3hu6VjLW3huqt1IgorCisjOiBidWlsdGluL2Nsb25lLmM6NzYgYnVpbHRpbi9pbml0LWRiLmM6NTAyCittc2dpZCAiZGlyZWN0b3J5IGZyb20gd2hpY2ggdGVtcGxhdGVzIHdpbGwgYmUgdXNlZCIKK21zZ3N0ciAidGjGsCBt4bulYyBtw6AgdOG6oWkgxJHDsyBjw6FjIG3huqt1IHPhur0gxJHGsOG7o2MgZMO5bmciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3OAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5IgorbXNnc3RyICJraG8gdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL2Nsb25lLmM6ODAKK21zZ2lkICJ1c2UgLS1yZWZlcmVuY2Ugb25seSB3aGlsZSBjbG9uaW5nIgorbXNnc3RyICJjaOG7iSBkw7luZyAtLXJlZmVyZW5jZSBraGkgbmjDom4gYuG6o24iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MSBidWlsdGluL2NvbHVtbi5jOjI2IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ0Cittc2dpZCAibmFtZSIKK21zZ3N0ciAidMOqbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgyCittc2dpZCAidXNlIDxuYW1lPiBpbnN0ZWFkIG9mICdvcmlnaW4nIHRvIHRyYWNrIHVwc3RyZWFtIgorbXNnc3RyICJkw7luZyA8dMOqbj4gdGhheSBjaG8g4oCcb3JpZ2lu4oCdIMSR4buDIHRoZW8gZMO1aSB0aMaw4bujbmcgbmd14buTbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0Cittc2dpZCAiY2hlY2tvdXQgPGJyYW5jaD4gaW5zdGVhZCBvZiB0aGUgcmVtb3RlJ3MgSEVBRCIKK21zZ3N0ciAibOG6pXkgcmEgPG5ow6FuaD4gdGhheSBjaG8gSEVBRCBj4bunYSBtw6F5IGNo4bunIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODYKK21zZ2lkICJwYXRoIHRvIGdpdC11cGxvYWQtcGFjayBvbiB0aGUgcmVtb3RlIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gxJHhur9uIGdpdC11cGxvYWQtcGFjayB0csOqbiBtw6F5IGNo4bunIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODcgYnVpbHRpbi9mZXRjaC5jOjExMyBidWlsdGluL2dyZXAuYzo2NTkgYnVpbHRpbi9wdWxsLmM6MTg2Cittc2dpZCAiZGVwdGgiCittc2dzdHIgIsSR4buZLXPDonUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4OAorbXNnaWQgImNyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhhdCBkZXB0aCIKK21zZ3N0ciAidOG6oW8gYuG6o24gc2FvIGtow7RuZyDEkeG6p3kgxJHhu6cgY2hvIG3hu6ljIHPDonUgxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MAorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAiY2jhu4kgbmjDom4gYuG6o24gbeG7mXQgbmjDoW5oLCBIRUFEIGhv4bq3YyAtLWJyYW5jaCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkxIGJ1aWx0aW4vaW5pdC1kYi5jOjUxMAorbXNnaWQgImdpdGRpciIKK21zZ3N0ciAiZ2l0ZGlyIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTIgYnVpbHRpbi9pbml0LWRiLmM6NTExCittc2dpZCAic2VwYXJhdGUgZ2l0IGRpciBmcm9tIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAia2jDtG5nIGTDuW5nIGNodW5nIHRoxrAgbeG7pWMgZMOgbmggcmnDqm5nIGNobyBnaXQgdsOgIHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MworbXNnaWQgImtleT12YWx1ZSIKK21zZ3N0ciAia2jDs2E9Z2nDoV90cuG7iyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk0Cittc2dpZCAic2V0IGNvbmZpZyBpbnNpZGUgdGhlIG5ldyByZXBvc2l0b3J5IgorbXNnc3RyICLEkeG6t3QgY+G6pXUgaMOsbmggYsOqbiB0cm9uZyBt4buZdCBraG8gY2jhu6lhIG3hu5tpIgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgImtobyB0aGFtIGNoaeG6v3Ug4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQga2hvIG7hu5lpIGLhu5kuIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgc2hhbGxvdyIKK21zZ3N0ciAia2hvIHRoYW0gY2hp4bq/dSDigJwlc+KAnSBsw6AgbsO0bmciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkgJyVzJyBpcyBncmFmdGVkIgorbXNnc3RyICJraG8gdGhhbSBjaGnhur91IOKAnCVz4oCdIGLhu4sgY+G6pXkgZ2jDqXAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzAgYnVpbHRpbi9kaWZmLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJyVzJyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGzhuqV5IHRo4buRbmcga8OqIHbhu4Eg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIGPDsyB04buTbiB04bqhaSBuaMawbmcgbOG6oWkga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgdGjGsCBt4bulYyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlc1xuIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgbOG6pXkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB24buBICVzXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqhbyDEkcaw4bujYyBsacOqbiBr4bq/dCBt4buBbSAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY29weSBmaWxlIHRvICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSBzYW8gY2jDqXAgdOG6rXAgdGluIHbDoCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQzNSBidWlsdGluL2Nsb25lLmM6NjE5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvbmUuXG4iCittc2dzdHIgImhvw6BuIHThuqV0LlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDQ3Cittc2dpZCAiIgorIkNsb25lIHN1Y2NlZWRlZCwgYnV0IGNoZWNrb3V0IGZhaWxlZC5cbiIKKyJZb3UgY2FuIGluc3BlY3Qgd2hhdCB3YXMgY2hlY2tlZCBvdXQgd2l0aCAnZ2l0IHN0YXR1cydcbiIKKyJhbmQgcmV0cnkgdGhlIGNoZWNrb3V0IHdpdGggJ2dpdCBjaGVja291dCAtZiBIRUFEJ1xuIgorbXNnc3RyICIiCisiVmnhu4djIG5ow6JuIGLhuqNuIHRow6BuaCBjw7RuZywgbmjGsG5nIGNoZWNrb3V0IGfhurdwIGzhu5dpLlxuIgorIkLhuqFuIGtp4buDbSB0cmEga+G7uSB4ZW0gY8OhaSBnw6wgxJHGsOG7o2MgbOG6pXkgcmEgYuG6sW5nIGzhu4duaCDigJxnaXQgc3RhdHVz4oCdXG4iCisidsOgIHRo4butIGzhuqV5IHJhIHbhu5tpIGzhu4duaCDigJxnaXQgY2hlY2tvdXQgLWYgSEVBROKAnVxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmaW5kIHJlbW90ZSBicmFuY2ggJXMgdG8gY2xvbmUuIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgbmjDoW5oIG3DoXkgY2jhu6cgJXMgxJHhu4MgbmjDom4gYuG6o24gKGNsb25lKS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5Li4uICIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBr4bq/dCBu4buRaeKApiAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MTcKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAibcOheSBjaOG7pyDEkcOjIGtow7RuZyBn4butaSB04bqldCBj4bqjIGPDoWMgxJHhu5FpIHTGsOG7o25nIGPhuqduIHRoaeG6v3QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2ODEKK21zZ2lkICJyZW1vdGUgSEVBRCByZWZlcnMgdG8gbm9uZXhpc3RlbnQgcmVmLCB1bmFibGUgdG8gY2hlY2tvdXQuXG4iCittc2dzdHIgInJlZmVycyBIRUFEIG3DoXkgY2jhu6cgIGNo4buJIMSR4bq/biByZWYga2jDtG5nIHThu5NuIHThuqFpLCBraMO0bmcgdGjhu4MgbOG6pXkgcmEuXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MTIKK21zZ2lkICJ1bmFibGUgdG8gY2hlY2tvdXQgd29ya2luZyB0cmVlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgcmEgKGNoZWNrb3V0KSBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL2Nsb25lLmM6Nzk5Cittc2dpZCAiY2Fubm90IHJlcGFjayB0byBjbGVhbiB1cCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSRw7NuZyBnw7NpIMSR4buDIGThu41uIGThurlwIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODAxCittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgYuG7jyBsacOqbiBr4bq/dCB04bqtcCB0aW4gdGhheSB0aOG6vyB04bqhbSB0aOG7nWkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MzEKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICJDw7MgcXXDoSBuaGnhu4F1IMSR4buRaSBz4buRLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgzNQorbXNnaWQgIllvdSBtdXN0IHNwZWNpZnkgYSByZXBvc2l0b3J5IHRvIGNsb25lLiIKK21zZ3N0ciAiQuG6oW4gcGjhuqNpIGNo4buJIMSR4buLbmggbeG7mXQga2hvIMSR4buDIG3DoCBuaMOibiBi4bqjbiAoY2xvbmUpLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgInTDuXkgY2jhu41uIC0tYmFyZSB2w6AgLS1vcmlnaW4gJXMgeHVuZyBraOG6r2MgbmhhdS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NDkKK21zZ2lkICItLWJhcmUgYW5kIC0tc2VwYXJhdGUtZ2l0LWRpciBhcmUgaW5jb21wYXRpYmxlLiIKK21zZ3N0ciAidMO5eSBjaOG7jW4gLS1iYXJlIHbDoCAtLXNlcGFyYXRlLWdpdC1kaXIgeHVuZyBraOG6r2MgbmhhdS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVwb3NpdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJraG8gY2jhu6lhIOKAnCVz4oCdIGNoxrBhIHThu5NuIHThuqFpIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODY4IGJ1aWx0aW4vZmV0Y2guYzoxMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgImRlcHRoICVzIGlzIG5vdCBhIHBvc2l0aXZlIG51bWJlciIKK21zZ3N0ciAixJHhu5kgc8OidSAlcyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBz4buRIG5ndXnDqm4gZMawxqFuZyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiBwYXRoICclcycgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhbiBlbXB0eSBkaXJlY3RvcnkuIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gxJHDrWNoIOKAnCVz4oCdIMSRw6MgY8OzIHThu6sgdHLGsOG7m2MgdsOgIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IHRoxrAgbeG7pWMgcuG7l25nLiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg4OAorIywgYy1mb3JtYXQKK21zZ2lkICJ3b3JraW5nIHRyZWUgJyVzJyBhbHJlYWR5IGV4aXN0cy4iCittc2dzdHIgImPDonkgbMOgbSB2aeG7h2Mg4oCcJXPigJ0gxJHDoyBz4bq1biB04buTbiB04bqhaSBy4buTaS4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MDMgYnVpbHRpbi9jbG9uZS5jOjkxNCBidWlsdGluL3dvcmt0cmVlLmM6MjE4CisjOiBidWlsdGluL3dvcmt0cmVlLmM6MjQ1CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgbGVhZGluZyBkaXJlY3RvcmllcyBvZiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gY8OhYyB0aMawIG3hu6VjIGThuqtuIMSR4bqndSBj4bunYSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkwNgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIHdvcmsgdHJlZSBkaXIgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIGPDonkgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBkaXIg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2xvbmluZyBpbnRvIGJhcmUgcmVwb3NpdG9yeSAnJXMnLi4uXG4iCittc2dzdHIgIsSQYW5nIG5ow6JuIGLhuqNuIHRow6BuaCBraG8gY2jhu6lhIGJhcmUg4oCcJXPigJ3igKZcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICLEkGFuZyBuaMOibiBi4bqjbiB0aMOgbmgg4oCcJXPigJ3igKZcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk1MQorbXNnaWQgIi0tZGlzc29jaWF0ZSBnaXZlbiwgYnV0IHRoZXJlIGlzIG5vIC0tcmVmZXJlbmNlIgorbXNnc3RyICLEkcOjIMSRxrBhIHJhIC0tZGlzc29jaWF0ZSwgbmjGsG5nIOG7nyDEkcOieSBs4bqhaSBraMO0bmcgY8OzIC0tcmVmZXJlbmNlIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTY4Cittc2dpZCAiLS1kZXB0aCBpcyBpZ25vcmVkIGluIGxvY2FsIGNsb25lczsgdXNlIGZpbGU6Ly8gaW5zdGVhZC4iCittc2dzdHIgIi0tZGVwdGggYuG7iyBs4budIMSRaSBraGkgbmjDom4gYuG6o24gbuG7mWkgYuG7mTsgaMOjeSBz4butIGThu6VuZyBmaWxlOi8vIMSR4buDIHRoYXkgdGjhur8uIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTcxCittc2dpZCAic291cmNlIHJlcG9zaXRvcnkgaXMgc2hhbGxvdywgaWdub3JpbmcgLS1sb2NhbCIKK21zZ3N0ciAia2hvIG5ndeG7k24gbMOgIG7DtG5nLCBuw6puIGLhu48gcXVhIC0tbG9jYWwiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzYKK21zZ2lkICItLWxvY2FsIGlzIGlnbm9yZWQiCittc2dzdHIgIi0tbG9jYWwgYuG7iyBs4budIMSRaSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBjbG9uZSAlcyIKK21zZ3N0ciAiS2jDtG5nIGJp4bq/dCBsw6BtIGPDoWNoIG7DoG8gxJHhu4MgbmjDom4gYuG6o24gKGNsb25lKSAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMjkgYnVpbHRpbi9jbG9uZS5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIk5ow6FuaCBtw6F5IGNo4bunICVzIGtow7RuZyB0w6xtIHRo4bqleSB0cm9uZyB0aMaw4bujbmcgbmd14buTbiAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwNDAKK21zZ2lkICJZb3UgYXBwZWFyIHRvIGhhdmUgY2xvbmVkIGFuIGVtcHR5IHJlcG9zaXRvcnkuIgorbXNnc3RyICJC4bqhbiBow6xuaCBuaMawIGzDoCDEkcOjIG5ow6JuIGLhuqNuIG3hu5l0IGtobyB0cuG7kW5nIHLhu5duZy4iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6OQorbXNnaWQgImdpdCBjb2x1bW4gWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCBjb2x1bW4gWzxjw6FjLXTDuXktY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjYKK21zZ2lkICJsb29rdXAgY29uZmlnIHZhcnMiCittc2dzdHIgInTDrG0ga2nhur9tIGJp4bq/biBj4bqldSBow6xuaCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyNyBidWlsdGluL2NvbHVtbi5jOjI4Cittc2dpZCAibGF5b3V0IHRvIHVzZSIKK21zZ3N0ciAiYuG7kSBj4bulYyDEkeG7gyBkw7luZyIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIsSQ4buZIHLhu5luZyB04buRaSDEkWEiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzAKK21zZ2lkICJQYWRkaW5nIHNwYWNlIG9uIGxlZnQgYm9yZGVyIgorbXNnc3RyICJDaMOobiB0aMOqbSBraG/huqNuZyB0cuG7kW5nIHbDoG8gYsOqbiB0csOhaSIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICJDaMOobiB0aMOqbSBraG/huqNuZyB0cuG6r25nIHbDoG8gYsOqbiBwaOG6o2kiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAiQ2jDqG4gdGjDqm0ga2hv4bqjbmcgdHLhuq9uZyBnaeG7r2EgY8OhYyBj4buZdCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo1MQorbXNnaWQgIi0tY29tbWFuZCBtdXN0IGJlIHRoZSBmaXJzdCBhcmd1bWVudCIKK21zZ3N0ciAiLS1jb21tYW5kIHBo4bqjaSBsw6AgxJHhu5FpIHPhu5EgxJHhuqd1IHRpw6puIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3Cittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzxjw6FjLXTDuXktY2jhu41uPl0gWy0tXSA8cGF0aHNwZWM+4oCmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQyCittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzxjw6FjLXTDuXktY2jhu41uPl0gWy0tXSA8cGF0aHNwZWM+4oCmIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisiVMOqbiB2w6AgxJHhu4thIGNo4buJIHRoxrAgxJFp4buHbiB04butIGPhu6dhIGLhuqFuIMSRxrDhu6NjIGPhuqV1IGjDrG5oIG3hu5l0IGPDoWNoIHThu7EgxJHhu5luZyB0csOqbiBjxqEgIgorInPhu59cbiIKKyJ0w6BpIGtob+G6o24gdsOgIMSR4buLYSBjaOG7iSBtw6F5IGNo4bunIGPhu6dhIGLhuqFuLiBYaW4gaMOjeSBraeG7g20gdHJhIHhlbSBjaMO6bmcgY8OzIGNow61uaCAiCisieMOhYyBraMO0bmcuXG4iCisiQuG6oW4gY8OzIHRo4buDIGNo4bq3biBuaOG7r25nIHRow7RuZyBiw6FvIGtp4buDdSBuw6B5IGLhurFuZyBjw6FjaCBjw6BpIMSR4bq3dCBjw6FjIHRow7RuZyB0aW4gIgorInRyw6puXG4iCisibeG7mXQgY8OhY2ggcsO1IHLDoG5nLiBDaOG6oXkgbOG7h25oIHNhdSDEkcOieSBsw6AgdGhlbyBjw6FjIGjGsOG7m25nIGThuqtuIHRyb25nIGLhu5kgc2/huqFuICIKKyJ0aOG6o29cbiIKKyLEkeG7gyBjaOG7iW5oIHPhu61hIHThuq1wIHRpbiBj4bqldSBow6xuaCBj4bunYSBtw6xuaDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWVkaXRcbiIKKyJcbiIKKyJTYXUga2hpIHRo4buxYyBoaeG7h24geG9uZywgYuG6oW4gY8OzIHRo4buDIHPhu61hIGNo4buvYSDEkeG7i25oIGRhbmggxJHGsOG7o2Mgc+G7rSBk4bulbmcgY2hvXG4iCisibOG6p24gY2h1eeG7g24gZ2lhbyBuw6B5IHbhu5tpIGzhu4duaDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjAKK21zZ2lkICIiCisiWW91ciBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIHdlcmUgY29uZmlndXJlZCBhdXRvbWF0aWNhbGx5IGJhc2VkXG4iCisib24geW91ciB1c2VybmFtZSBhbmQgaG9zdG5hbWUuIFBsZWFzZSBjaGVjayB0aGF0IHRoZXkgYXJlIGFjY3VyYXRlLlxuIgorIllvdSBjYW4gc3VwcHJlc3MgdGhpcyBtZXNzYWdlIGJ5IHNldHRpbmcgdGhlbSBleHBsaWNpdGx5OlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIllvdXIgTmFtZVwiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5lbWFpbCB5b3VAZXhhbXBsZS5jb21cbiIKKyJcbiIKKyJBZnRlciBkb2luZyB0aGlzLCB5b3UgbWF5IGZpeCB0aGUgaWRlbnRpdHkgdXNlZCBmb3IgdGhpcyBjb21taXQgd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCittc2dzdHIgIiIKKyJUw6puIHbDoCDEkeG7i2EgY2jhu4kgdGjGsCDEkWnhu4duIHThu60gY+G7p2EgYuG6oW4gxJHGsOG7o2MgY+G6pXUgaMOsbmggbeG7mXQgY8OhY2ggdOG7sSDEkeG7mW5nIHRyw6puIGPGoSAiCisic+G7n1xuIgorInTDoGkga2hv4bqjbiB2w6AgxJHhu4thIGNo4buJIG3DoXkgY2jhu6cgY+G7p2EgYuG6oW4uIFhpbiBow6N5IGtp4buDbSB0cmEgeGVtIGNow7puZyBjw7MgY2jDrW5oICIKKyJ4w6FjIGtow7RuZy5cbiIKKyJC4bqhbiBjw7MgdGjhu4MgY2jhurduIG5o4buvbmcgdGjDtG5nIGLDoW8ga2nhu4N1IG7DoHkgYuG6sW5nIGPDoWNoIGPDoGkgxJHhurd0IGPDoWMgdGjDtG5nIHRpbiAiCisidHLDqm4gbeG7mXQgY8OhY2ggcsO1IHLDoG5nOlxuIgorIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSBcIlTDqm4gY+G7p2EgYuG6oW5cIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiU2F1IGtoaSB0aOG7sWMgaGnhu4duIHhvbmcsIGLhuqFuIGPDsyB0aOG7gyBz4butYSBjaOG7r2EgxJHhu4tuaCBkYW5oIMSRxrDhu6NjIHPhu60gZOG7pW5nIGNobyBs4bqnbiAiCisiY2h1eeG7g24gZ2lhbyBuw6B5IHbhu5tpIGzhu4duaDpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tcmVzZXQtYXV0aG9yXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzIKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIGFtZW5kIHRoZSBtb3N0IHJlY2VudCBjb21taXQsIGJ1dCBkb2luZyBzbyB3b3VsZCBtYWtlXG4iCisiaXQgZW1wdHkuIFlvdSBjYW4gcmVwZWF0IHlvdXIgY29tbWFuZCB3aXRoIC0tYWxsb3ctZW1wdHksIG9yIHlvdSBjYW5cbiIKKyJyZW1vdmUgdGhlIGNvbW1pdCBlbnRpcmVseSB3aXRoIFwiZ2l0IHJlc2V0IEhFQUReXCIuXG4iCittc2dzdHIgIiIKKyJC4bqhbiDEkcOjIHnDqnUgY+G6p3UgYW1lbmQgKOKAnHR1IGLhu5XigJ0pIHBo4bqnbiBs4bubbiBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gZ+G6p24gxJHDonksIG5oxrBuZyAiCisibMOgbSBuaMawIHRo4bq/XG4iCisiY8OzIHRo4buDIGzDoG0gY2hvIG7DsyB0cuG7nyBuw6puIHRy4buRbmcgcuG7l25nLiBC4bqhbiBjw7MgdGjhu4MgbOG6t3AgbOG6oWkgbOG7h25oIGPhu6dhIG3DrG5oIGLhurFuZyAiCisiLS1hbGxvdy1lbXB0eSxcbiIKKyJob+G6t2MgbMOgIGLhuqFuIGfhu6EgYuG7jyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gbeG7mXQgY8OhY2ggaG/DoG4gdG/DoG4gYuG6sW5nIGzhu4duaDpcbiIKKyJcImdpdCByZXNldCBIRUFEXlwiLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjc3Cittc2dpZCAiIgorIlRoZSBwcmV2aW91cyBjaGVycnktcGljayBpcyBub3cgZW1wdHksIHBvc3NpYmx5IGR1ZSB0byBjb25mbGljdCByZXNvbHV0aW9uLlxuIgorIklmIHlvdSB3aXNoIHRvIGNvbW1pdCBpdCBhbnl3YXksIHVzZTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCittc2dzdHIgIiIKKyJM4bqnbiBjaGVycnktcGljayB0csaw4bubYyBoaeG7h24gbmF5IHRy4buRbmcgcuG7l25nLCBjw7MgbOG6vSBsw6AgYuG7n2kgdsOsIHPhu7EgcGjDom4gZ2nhuqNpIHh1bmcgIgorIsSR4buZdC5cbiIKKyJO4bq/dSBi4bqhbiB24bqrbiBtdeG7kW4gY2h1eeG7g24gZ2lhbyBuw7MgY2hvIGTDuSB0aOG6vyBuw6BvIMSRaSBu4buvYSwgaMOjeSBkw7luZzpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5XG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQKK21zZ2lkICJPdGhlcndpc2UsIHBsZWFzZSB1c2UgJ2dpdCByZXNldCdcbiIKK21zZ3N0ciAiTuG6v3Uga2jDtG5nIMSRxrDhu6NjIHRow6wgZMO5bmcgbOG7h25oIFwiZ2l0IHJlc2V0XCJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NworbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIlRoZW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHdpbGwgcmVzdW1lIGNoZXJyeS1waWNraW5nXG4iCisidGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorbXNnc3RyICIiCisiTuG6v3UgYuG6oW4gbXXhu5FuIGLhu48gcXVhIGzhuqduIGNodXnhu4NuIGdpYW8gbsOgeSB0aMOsIGTDuW5nOlxuIgorIlxuIgorIiAgICBnaXQgcmVzZXRcbiIKKyJcbiIKKyJUaOG6vyB0aMOsIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIiBz4bq9IHBo4bulYyBo4buTaSBs4bqhaSB2aeG7h2MgY2hlcnJ5LXBpY2tcbiIKKyJuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8gY8OybiBs4bqhaS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzozMDQKK21zZ2lkICJmYWlsZWQgdG8gdW5wYWNrIEhFQUQgdHJlZSBvYmplY3QiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB0aMOhbyBk4buhIEhFQUQgxJHhu5FpIHTGsOG7o25nIGPDonkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzQ1Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgImtow7RuZyB0aOG7gyB04bqhbyBi4bqjbmcgbeG7pWMgbOG7pWMgdOG6oW0gdGjhu51pIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM1MQorbXNnaWQgImludGVyYWN0aXZlIGFkZCBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB0aMOqbSBi4bqxbmcgY8OhY2ggdMawxqFuZyIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjQKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIHRlbXBvcmFyeSBpbmRleCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCBi4bqjbmcgbeG7pWMgbOG7pWMgdOG6oW0gdGjhu51pIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM2NgorbXNnaWQgIkZhaWxlZCB0byB1cGRhdGUgbWFpbiBjYWNoZSB0cmVlIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgY+G6rXAgbmjhuq10IGPDonkgYuG7mSBuaOG7myDEkeG7h20iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzkwIGJ1aWx0aW4vY29tbWl0LmM6NDEzIGJ1aWx0aW4vY29tbWl0LmM6NDYyCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ld19pbmRleCBmaWxlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIHThuq1wIHRpbiBsxrB1IGLhuqNuZyBt4bulYyBs4bulYyBt4bubaSAobmV3X2luZGV4KSIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NDQKK21zZ2lkICJjYW5ub3QgZG8gYSBwYXJ0aWFsIGNvbW1pdCBkdXJpbmcgYSBtZXJnZS4iCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiB2aeG7h2MgY2h1eeG7g24gZ2lhbyBj4bulYyBi4buZIHRyb25nIGtoaSDEkWFuZyDEkcaw4bujYyBow7JhIHRy4buZbi4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ2Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICIiCisia2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gdmnhu4djIGNodXnhu4NuIGdpYW8gYuG7mSBwaOG6rW4gdHJvbmcga2hpIMSRYW5nIGNoZXJyeS1waWNrLiIKKworIzogYnVpbHRpbi9jb21taXQuYzo0NTUKK21zZ2lkICJjYW5ub3QgcmVhZCB0aGUgaW5kZXgiCittc2dzdHIgImtow7RuZyDEkeG7jWMgxJHGsOG7o2MgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3NAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0ZW1wb3JhcnkgaW5kZXggZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gbMawdSBi4bqjbmcgbeG7pWMgbOG7pWMgdOG6oW0gdGjhu51pIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjU3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb21taXQgJyVzJyBsYWNrcyBhdXRob3IgaGVhZGVyIgorbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvIOKAnCVz4oCdIHRoaeG6v3UgcGjhuqduIHTDoWMgZ2nhuqMg4bufIMSR4bqndSIKKworIzogYnVpbHRpbi9jb21taXQuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyDigJwlc+KAnSBjw7MgcGjhuqduIHTDoWMgZ2nhuqMg4bufIMSR4bqndSBk4buLIGThuqFuZyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2MDAKK21zZ2lkICJtYWxmb3JtZWQgLS1hdXRob3IgcGFyYW1ldGVyIgorbXNnc3RyICLEkeG7kWkgc+G7kSBjaG8gLS1hdXRob3IgYuG7iyBk4buLIGjDrG5oIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwOAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGRhdGUgZm9ybWF0OiAlcyIKK21zZ3N0ciAibmfDoHkgdGjDoW5nIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NTIKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAiIgorImtow7RuZyB0aOG7gyBjaOG7jW4gbeG7mXQga8O9IHThu7EgZ2hpIGNow7ogY8OhaSBtw6Aga2jDtG5nIMSRxrDhu6NjIGTDuW5nXG4iCisidHJvbmcgcGjhuqduIGdoaSBjaMO6IGhp4buHbiB04bqhaSIKKworIzogYnVpbHRpbi9jb21taXQuYzo2ODkgYnVpbHRpbi9jb21taXQuYzo3MjIgYnVpbHRpbi9jb21taXQuYzoxMDc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBsb29rdXAgY29tbWl0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdMOsbSBraeG6v20gY29tbWl0IChs4bqnbiBjaHV54buDbiBnaWFvKSAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDEgYnVpbHRpbi9zaG9ydGxvZy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICIoxJFhbmcgxJHhu41jIHRow7RuZyDEkWnhu4dwIG5o4bqtdCBrw70gdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluKVxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwMworbXNnaWQgImNvdWxkIG5vdCByZWFkIGxvZyBmcm9tIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIG5o4bqtdCBrw70gdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICJraMO0bmcgxJHhu41jIMSRxrDhu6NjIHThu4dwIG5o4bqtdCBrw70g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzI5Cittc2dpZCAiY291bGQgbm90IHJlYWQgTUVSR0VfTVNHIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIE1FUkdFX01TRyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MzMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBTUVVBU0hfTVNHIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzg0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSBt4bqrdSBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyJOw7MgdHLDtG5nIGdp4buRbmcgduG7m2kgdmnhu4djIGLhuqFuIMSRYW5nIGNodXnhu4NuIGdpYW8gbeG7mXQgbOG6p24gaMOyYSB0cuG7mW4uXG4iCisiTuG6v3Uga2jDtG5nIHBo4bqjaSB24bqteSwgeGluIGjDo3kgZ+G7oSBi4buPIHThuq1wIHRpblxuIgorIlx0JXNcbiIKKyJ2w6AgdGjhu60gbOG6oWkuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIk7DsyB0csO0bmcgZ2nhu5FuZyB24bubaSB2aeG7h2MgYuG6oW4gxJFhbmcgY2h1eeG7g24gZ2lhbyBt4buZdCBs4bqnbiBjaGVycnktcGljay5cbiIKKyJO4bq/dSBraMO0bmcgcGjhuqNpIHbhuq15LCB4aW4gaMOjeSBn4buhIGLhu48gdOG6rXAgdGluXG4iCisiXHQlc1xuIgorInbDoCB0aOG7rSBs4bqhaS5cbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkjDo3kgbmjhuq1wIHbDoG8gY8OhYyB0aMO0bmcgdGluIMSR4buDIGdp4bqjaSB0aMOtY2ggY8OhYyB0aGF5IMSR4buVaSBj4bunYSBi4bqhbi4gTmjhu69uZyBkw7JuZyAiCisixJHGsOG7o2NcbiIKKyJi4bqvdCDEkeG6p3UgYuG6sW5nIOKAnCVj4oCdIHPhur0gxJHGsOG7o2MgYuG7jyBxdWEsIG7hur91IHBo4bqnbiBjaMO6IHRow61jaCBy4buXbmcgc+G6vSBo4buneSBi4buPIGzhuqduICIKKyJjaHV54buDbiBnaWFvLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIkjDo3kgbmjhuq1wIHbDoG8gY8OhYyB0aMO0bmcgdGluIMSR4buDIGdp4bqjaSB0aMOtY2ggY8OhYyB0aGF5IMSR4buVaSBj4bunYSBi4bqhbi4gTmjhu69uZyBkw7JuZyAiCisixJHGsOG7o2NcbiIKKyJi4bqvdCDEkeG6p3UgYuG6sW5nIOKAnCVj4oCdIHPhur0gxJHGsOG7o2MgYuG7jyBxdWE7IGLhuqFuIGPDsyB0aOG7gyB4w7NhIGNow7puZyDEkWkgbuG6v3UgbXXhu5FuIHRo4bq/LlxuIgorIlBo4bqnbiBjaMO6IHRow61jaCBuw6B5IG7hur91IHRy4buRbmcgcuG7l25nIHPhur0gaOG7p3kgYuG7jyBs4bqnbiBjaHV54buDbiBnaWFvLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg0NworIywgYy1mb3JtYXQKK21zZ2lkICIlc0F1dGhvcjogICAgJS4qcyA8JS4qcz4iCittc2dzdHIgIiVzVMOhYyBnaeG6ozogICAgICAgICAgICUuKnMgPCUuKnM+IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjg1NQorIywgYy1mb3JtYXQKK21zZ2lkICIlc0RhdGU6ICAgICAgJXMiCittc2dzdHIgIiVzTmfDoHkgdGjDoW5nOiAgICAgICAgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXNOZ8aw4budaSBjaHV54buDbiBnaWFvOiAlLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4ODAKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAiS2jDtG5nIMSR4buNYyDEkcaw4bujYyBi4bqjbmcgbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTM3Cittc2dpZCAiRXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB4w6J5IGThu7FuZyBjw6J5IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjk1MiBidWlsdGluL3RhZy5jOjQ5NQorIywgYy1mb3JtYXQKK21zZ2lkICJQbGVhc2Ugc3VwcGx5IHRoZSBtZXNzYWdlIHVzaW5nIGVpdGhlciAtbSBvciAtRiBvcHRpb24uXG4iCittc2dzdHIgIlhpbiBow6N5IGN1bmcgY+G6pXAgbOG7nWkgY2jDuiBnaeG6o2kgaG/hurdjIGzDoCBkw7luZyB0w7l5IGNo4buNbiAtbSBob+G6t2MgbMOgIC1GLlxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1hdXRob3IgJyVzJyBpcyBub3QgJ05hbWUgPGVtYWlsPicgYW5kIG1hdGNoZXMgbm8gZXhpc3RpbmcgYXV0aG9yIgorbXNnc3RyICIiCisiLS1hdXRob3Ig4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6Ag4oCcSOG7jSB2w6AgdMOqbiA8dGjGsCDEkWnhu4duIHThu61sPuKAnSB2w6Aga2jDtG5nIGto4bubcCBi4bqldCBr4buzICIKKyJ0w6FjIGdp4bqjIG7DoG8gc+G6tW4gY8OzIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjkgYnVpbHRpbi9jb21taXQuYzoxMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAiQ2jhur8gxJHhu5kgY2hvIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSBraMO0bmcgaOG7o3AgbOG7hyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTA2Cittc2dpZCAiLS1sb25nIGFuZCAteiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICJoYWkgdMO5eSBjaOG7jW4gLWxvbmcgdsOgIC16IGtow7RuZyB0xrDGoW5nIHRow61jaCB24bubaSBuaGF1IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExMzYKK21zZ2lkICJVc2luZyBib3RoIC0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICJT4butIGThu6VuZyBj4bqjIGhhaSB0w7l5IGNo4buNbiAtLXJlc2V0LWF1dGhvciB2w6AgLS1hdXRob3Iga2jDtG5nIGjhu6NwIGzDvSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTQ1Cittc2dpZCAiWW91IGhhdmUgbm90aGluZyB0byBhbWVuZC4iCittc2dzdHIgIktow7RuZyBjw7MgZ8OsIMSR4buDIG3DoCDigJx0dSBi4buV4oCdIGPhuqMuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNDgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICIiCisiQuG6oW4gxJFhbmcg4bufIGdp4buvYSBj4bunYSBxdcOhIHRyw6xuaCBow7JhIHRy4buZbiAtLSBraMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiB2aeG7h2Mg4oCcdHUgYuG7leKAnS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE1MAorbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhIGNoZXJyeS1waWNrIC0tIGNhbm5vdCBhbWVuZC4iCittc2dzdHIgIiIKKyJC4bqhbiDEkWFuZyDhu58gZ2nhu69hIGPhu6dhIHF1w6EgdHLDrG5oIGNoZXJyeS1waWNrIC0tIGtow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIHZp4buHYyDigJx0dSAiCisiYuG7leKAnS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE1MworbXNnaWQgIk9wdGlvbnMgLS1zcXVhc2ggYW5kIC0tZml4dXAgY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIiCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gLS1zcXVhc2ggdsOgIC0tZml4dXAga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIGPDuW5nIHbhu5tpIG5oYXUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE2MworbXNnaWQgIk9ubHkgb25lIG9mIC1jLy1DLy1GLy0tZml4dXAgY2FuIGJlIHVzZWQuIgorbXNnc3RyICIiCisiQ2jhu4kgxJHGsOG7o2MgZMO5bmcgbeG7mXQgdHJvbmcgc+G7kSB0w7l5IGNo4buNbiB0cm9uZyBz4buRIGPDoWMgdMO5eSBjaOG7jW4gLWMvLUMvLUYvLS1maXh1cCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTY1Cittc2dpZCAiT3B0aW9uIC1tIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1jLy1DLy1GLy0tZml4dXAuIgorbXNnc3RyICJUw7l5IGNo4buNbiAtbSBraMO0bmcgdGjhu4MgxJHGsOG7o2MgdOG7lSBo4bujcCBjw7luZyB24bubaSAtYy8tQy8tRi8tLWZpeHVwLiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTczCittc2dpZCAiLS1yZXNldC1hdXRob3IgY2FuIGJlIHVzZWQgb25seSB3aXRoIC1DLCAtYyBvciAtLWFtZW5kLiIKK21zZ3N0ciAiIgorIi0tcmVzZXQtYXV0aG9yIGNo4buJIGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSB0w7l5IGNo4buNbiAtQywgLWMgaGF5IC0tYW1lbmQuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTAKK21zZ2lkICJPbmx5IG9uZSBvZiAtLWluY2x1ZGUvLS1vbmx5Ly0tYWxsLy0taW50ZXJhY3RpdmUvLS1wYXRjaCBjYW4gYmUgdXNlZC4iCittc2dzdHIgIiIKKyJDaOG7iSBt4buZdCB0cm9uZyBjw6FjIHTDuXkgY2jhu41uIC0taW5jbHVkZS8tLW9ubHkvLS1hbGwvLS1pbnRlcmFjdGl2ZS8tLXBhdGNoIMSRxrDhu6NjICIKKyJz4butIGThu6VuZy4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5MgorbXNnaWQgIk5vIHBhdGhzIHdpdGggLS1pbmNsdWRlLy0tb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAiS2jDtG5nIMSRxrDhu51uZyBk4bqrbiB24bubaSBjw6FjIHTDuXkgY2jhu41uIC0taW5jbHVkZS8tLW9ubHkga2jDtG5nIGjhu6NwIGzDvS4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE5NAorbXNnaWQgIkNsZXZlci4uLiBhbWVuZGluZyB0aGUgbGFzdCBvbmUgd2l0aCBkaXJ0eSBpbmRleC4iCittc2dzdHIgIkdp4buPaeKApiAg4oCcdHUgYuG7leKAnSBjw6FpIGN14buRaSB24bubaSBi4bqjbmcgbeG7pWMgbOG7pWMgYuG6qW4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTYKK21zZ2lkICJFeHBsaWNpdCBwYXRocyBzcGVjaWZpZWQgd2l0aG91dCAtaSBvciAtbzsgYXNzdW1pbmcgLS1vbmx5IHBhdGhzLi4uIgorbXNnc3RyICIiCisiTmjhu69uZyDEkcaw4budbmcgZOG6q24gcsO1IHLDoG5nIMSRxrDhu6NjIGNo4buJIHJhIGtow7RuZyBjw7MgdMO5eSBjaOG7jW4gLWkgY8Wpbmcga2jDtG5nIC1vOyBjb2kgIgorImzDoCAtLW9ubHkgbmjhu69uZyDEkcaw4budbmcgZOG6q24iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIwOCBidWlsdGluL3RhZy5jOjczMAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNsZWFudXAgbW9kZSAlcyIKK21zZ3N0ciAiQ2jhur8gxJHhu5kgZOG7jW4gZOG6uXAga2jDtG5nIGjhu6NwIGzhu4cgJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTIxMworbXNnaWQgIlBhdGhzIHdpdGggLWEgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIkPDoWMgxJHGsOG7nW5nIGThuqtuIHbhu5tpIHTDuXkgY2jhu41uIC1hIGtow7RuZyBo4bujcCBsw70uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjMgYnVpbHRpbi9jb21taXQuYzoxNjAyCittc2dpZCAic2hvdyBzdGF0dXMgY29uY2lzZWx5IgorbXNnc3RyICJoaeG7g24gdGjhu4sgdHLhuqFuZyB0aMOhaSDhu58gZOG6oW5nIHPDumMgdMOtY2giCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyNSBidWlsdGluL2NvbW1pdC5jOjE2MDQKK21zZ2lkICJzaG93IGJyYW5jaCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRow7RuZyB0aW4gbmjDoW5oIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjcgYnVpbHRpbi9jb21taXQuYzoxNjA2IGJ1aWx0aW4vcHVzaC5jOjU0NgorbXNnaWQgIm1hY2hpbmUtcmVhZGFibGUgb3V0cHV0IgorbXNnc3RyICJr4bq/dCB4deG6pXQgZOG6oW5nIG3DoXktY8OzLXRo4buDLcSR4buNYyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzMwIGJ1aWx0aW4vY29tbWl0LmM6MTYwOAorbXNnaWQgInNob3cgc3RhdHVzIGluIGxvbmcgZm9ybWF0IChkZWZhdWx0KSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRy4bqhbmcgdGjDoWkg4bufIMSR4buLbmggZOG6oW5nIGTDoGkgKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzMgYnVpbHRpbi9jb21taXQuYzoxNjExCittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwiCittc2dzdHIgImNo4bqlbSBk4bupdCBjw6FjIG3hu6VjIGLhurFuZyBOVUwiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzNSBidWlsdGluL2NvbW1pdC5jOjE2MTQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4MQorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4NCBidWlsdGluL3RhZy5jOjYwNAorbXNnaWQgIm1vZGUiCittc2dzdHIgImNo4bq/IMSR4buZIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzYgYnVpbHRpbi9jb21taXQuYzoxNjE0Cittc2dpZCAic2hvdyB1bnRyYWNrZWQgZmlsZXMsIG9wdGlvbmFsIG1vZGVzOiBhbGwsIG5vcm1hbCwgbm8uIChEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSAgZOG6pXUgduG6v3QsIGPDoWMgY2jhur8gxJHhu5kgdMO5eSBjaOG7jW46ICBhbGwsICIKKyJub3JtYWwsIG5vLiAoTeG6t2MgxJHhu4tuaDogYWxsKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM5Cittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB04bqtcCB0aW4g4bqpbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQwIHBhcnNlLW9wdGlvbnMuaDoxNTUKK21zZ2lkICJ3aGVuIgorbXNnc3RyICJraGkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MQorbXNnaWQgIiIKKyJpZ25vcmUgY2hhbmdlcyB0byBzdWJtb2R1bGVzLCBvcHRpb25hbCB3aGVuOiBhbGwsIGRpcnR5LCB1bnRyYWNrZWQuICIKKyIoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAiIgorImLhu48gcXVhIGPDoWMgdGhheSDEkeG7lWkgdHJvbmcgbcO0LcSRdW4tY29uLCB0w7l5IGNo4buNbiBraGk6IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihN4bq3YyDEkeG7i25oOiBhbGwpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDMKK21zZ2lkICJsaXN0IHVudHJhY2tlZCBmaWxlcyBpbiBjb2x1bW5zIgorbXNnc3RyICJoaeG7g24gdGjhu4sgZGFuaCBzw6FjaCBjw6FjIHThuq1wLXRpbiBjaMawYSDEkcaw4bujYyB0aGVvIGTDtWkgdHJvbmcgY8OhYyBj4buZdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDI5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHTDrG0gdGjhuqV5IGzhuqduIGNodXnhu4NuIGdpYW8gbeG7m2kgaMahbiDEkcOjIMSRxrDhu6NjIHThuqFvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MzEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIiIKKyJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggY8O6IHBow6FwIGPhu6dhIMSR4buRaSB0xrDhu6NuZyBjaHV54buDbiBnaWFvIG3hu5tpIGjGoW4gxJHDoyDEkcaw4bujYyB04bqhbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc2Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAixJHDoyBy4budaSBraOG7j2kgSEVBRCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc5Cittc2dpZCAiIChyb290LWNvbW1pdCkiCittc2dzdHIgIiAocm9vdC1jb21taXQpIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzIKK21zZ2lkICJzdXBwcmVzcyBzdW1tYXJ5IGFmdGVyIHN1Y2Nlc3NmdWwgY29tbWl0IgorbXNnc3RyICJraMO0bmcgaGnhu4NuIHRo4buLIHThu5VuZyBr4bq/dCBzYXUga2hpIGNodXnhu4NuIGdpYW8gdGjDoG5oIGPDtG5nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzMKK21zZ2lkICJzaG93IGRpZmYgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImhp4buDbiB0aOG7iyBz4buxIGtow6FjIGJp4buHdCB0cm9uZyBt4bqrdSB0aW4gbmjhuq9uIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NQorbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIkPDoWMgdMO5eSBjaOG7jW4gZ2hpIGNow7ogY29tbWl0IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzYgYnVpbHRpbi90YWcuYzo2MDIKK21zZ2lkICJyZWFkIG1lc3NhZ2UgZnJvbSBmaWxlIgorbXNnc3RyICLEkeG7jWMgY2jDuiB0aMOtY2ggdOG7qyB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NworbXNnaWQgImF1dGhvciIKK21zZ3N0ciAidMOhYyBnaeG6oyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc3Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgImdoaSDEkcOoIHTDoWMgZ2nhuqMgY2hvIGNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc4IGJ1aWx0aW4vZ2MuYzoyNjgKK21zZ2lkICJkYXRlIgorbXNnc3RyICJuZ8OgeSB0aMOhbmciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OAorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAiZ2hpIMSRw6ggbmfDoHkgdGjDoW5nIGNobyBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzkgYnVpbHRpbi9tZXJnZS5jOjIxOCBidWlsdGluL25vdGVzLmM6MzkyCisjOiBidWlsdGluL25vdGVzLmM6NTU1IGJ1aWx0aW4vdGFnLmM6NjAwCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAiY2jDuiB0aMOtY2giCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OQorbXNnaWQgImNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICJjaMO6IHRow61jaCBj4bunYSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODAKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiZMO5bmcgbOG6oWkgY8OhYyBnaGkgY2jDuiB04burIGzhuqduIGNodXnhu4NuIGdpYW8gxJHDoyBjaG8gbmjGsG5nIGPDsyBjaG8gc+G7rWEgY2jhu69hIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODEKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiZMO5bmcgbOG6oWkgY8OhYyBnaGkgY2jDuiB04burIGzhuqduIGNodXnhu4NuIGdpYW8gxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MgorbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIGZpeHVwIHNwZWNpZmllZCBjb21taXQiCittc2dzdHIgIiIKKyJkw7luZyBnaGkgY2jDuiBjw7MgxJHhu4tuaCBk4bqhbmcgYXV0b3NxdWFzaCDEkeG7gyBz4butYSBjaOG7r2EgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcOjIGNo4buJIHJhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODMKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBzcXVhc2ggc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAiIgorImTDuW5nIGzhu51pIG5o4bqvbiBjw7MgxJHhu4tuaCBk4bqhbmcgdOG7sSDEkeG7mW5nIG7DqW4gxJHhu4MgbsOpbiBs4bqhaSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gxJHDoyBjaOG7iSAiCisicmEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NAorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIiIKKyJs4bqnbiBjaHV54buDbiBnaWFvIG5o4bqtbiB0w7RpIGzDoCB0w6FjIGdp4bqjICjEkcaw4bujYyBkw7luZyB24bubaSB0w7l5IGNo4buNbiAtQy8tYy8tLWFtZW5kKSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg1IGJ1aWx0aW4vbG9nLmM6MTIxNiBidWlsdGluL3JldmVydC5jOjg2Cittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICIobsOqbiBkw7luZykgdGjDqm0gZMOybmcgU2lnbmVkLW9mZi1ieToiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NgorbXNnaWQgInVzZSBzcGVjaWZpZWQgdGVtcGxhdGUgZmlsZSIKK21zZ3N0ciAic+G7rSBk4bulbmcgdOG6rXAgdGluIG3huqt1IMSRw6MgY2hvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODcKK21zZ2lkICJmb3JjZSBlZGl0IG9mIGNvbW1pdCIKK21zZ3N0ciAiw6lwIGJ14buZYyBz4butYSBs4bqnbiBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgIm3hurdjIMSR4buLbmgiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OCBidWlsdGluL3RhZy5jOjYwNQorbXNnaWQgImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiCittc2dzdHIgImzDoG0gdGjhur8gbsOgbyDEkeG7gyBj4bqvdCBi4buPIGtob+G6o25nIHRy4bqvbmcgdsOgICNnaGljaMO6IHThu6sgbeG6qXUgdGluIG5o4bqvbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg5Cittc2dpZCAiaW5jbHVkZSBzdGF0dXMgaW4gY29tbWl0IG1lc3NhZ2UgdGVtcGxhdGUiCittc2dzdHIgImJhbyBn4buTbSBjw6FjIHRy4bqhbmcgdGjDoWkgdHJvbmcgbeG6q3UgZ2hpIGNow7ogY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTkxIGJ1aWx0aW4vbWVyZ2UuYzoyMjYgYnVpbHRpbi9wdWxsLmM6MTU2CisjOiBidWlsdGluL3JldmVydC5jOjkzCittc2dpZCAiR1BHIHNpZ24gY29tbWl0IgorbXNnc3RyICJrw70gbOG6p24gY2h1eeG7g24gZ2lhbyBkw7luZyBHUEciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NAorbXNnaWQgIkNvbW1pdCBjb250ZW50cyBvcHRpb25zIgorbXNnc3RyICJDw6FjIHTDuXkgbuG7mWkgZHVuZyBnaGkgY2jDuiBjb21taXQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NQorbXNnaWQgImNvbW1pdCBhbGwgY2hhbmdlZCBmaWxlcyIKK21zZ3N0ciAiY2h1eeG7g24gZ2lhbyB04bqldCBj4bqjIGPDoWMgdOG6rXAgdGluIGPDsyB0aGF5IMSR4buVaSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk2Cittc2dpZCAiYWRkIHNwZWNpZmllZCBmaWxlcyB0byBpbmRleCBmb3IgY29tbWl0IgorbXNnc3RyICJ0aMOqbSBjw6FjIHThuq1wIHRpbiDEkcOjIGNo4buJIHJhIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjIMSR4buDIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NworbXNnaWQgImludGVyYWN0aXZlbHkgYWRkIGZpbGVzIgorbXNnc3RyICJ0aMOqbSBjw6FjIHThuq1wLXRpbiBi4bqxbmcgdMawxqFuZyB0w6FjIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTgKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICJ0aMOqbSBjw6FjIHRoYXkgxJHhu5VpIGLhurFuZyB0xrDGoW5nIHTDoWMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5OQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAiY2jhu4kgY2h1eeG7g24gZ2lhbyBjw6FjIHThuq1wIHRpbiDEkcOjIGNo4buJIHJhIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDAKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBob29rIgorbXNnc3RyICJ2w7JuZyBxdWEgbcOzYyAoaG9vaykgcHJlLWNvbW1pdCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjAxCittc2dpZCAic2hvdyB3aGF0IHdvdWxkIGJlIGNvbW1pdHRlZCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHhlbSBjw6FpIGfDrCBjw7MgdGjhu4MgxJHGsOG7o2MgY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjEyCittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLigJx0dSBi4buV4oCdIChhbWVuZCkgbOG6p24gY29tbWl0IHRyxrDhu5tjIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MTMKK21zZ2lkICJieXBhc3MgcG9zdC1yZXdyaXRlIGhvb2siCittc2dzdHIgInbDsm5nIHF1YSBtw7NjIChob29rKSBwb3N0LXJld3JpdGUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxOAorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgIm9rIMSR4buDIGdoaSBs4bqhaSBt4buZdCB0aGF5IMSR4buVaSB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjIwCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAib2sgxJHhu4MgZ2hpIGPDoWMgdGhheSDEkeG7lWkgduG7m2kgbOG7nWkgbmjhuq9uIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDkKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBjb21taXQgKGzhuqduIGNodXnhu4NuIGdpYW8pIEhFQUQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3JydXB0IE1FUkdFX0hFQUQgZmlsZSAoJXMpIgorbXNnc3RyICJU4bqtcCB0aW4gTUVSR0VfSEVBRCBzYWkgaOG7j25nICglcykiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTcwMgorbXNnaWQgImNvdWxkIG5vdCByZWFkIE1FUkdFX01PREUiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyBwaOG6p24gY2jDuiB0aMOtY2ggKG1lc3NhZ2UpIGPhu6dhIGxs4bqnbiBjaHV54buDbiBnaWFvOiAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkFib3J0aW5nIGNvbW1pdDsgeW91IGRpZCBub3QgZWRpdCB0aGUgbWVzc2FnZS5cbiIKK21zZ3N0ciAiIgorIsSQYW5nIGLhu48gcXVhIHZp4buHYyBjaHV54buDbiBnaWFvOyBi4bqhbiDEkcOjIGtow7RuZyBiacOqbiBzb+G6oW4gcGjhuqduIGNow7ogdGjDrWNoICIKKyIobWVzc2FnZSkuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTczNworIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQgZHVlIHRvIGVtcHR5IGNvbW1pdCBtZXNzYWdlLlxuIgorbXNnc3RyICJCw6NpIGLhu48gdmnhu4djIGNodXnhu4NuIGdpYW8gYuG7n2kgdsOsIHBo4bqnbiBjaMO6IHRow61jaCBj4bunYSBuw7MgdHLhu5FuZyBy4buXbmcuXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTc4NQorbXNnaWQgIiIKKyJSZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzZXQgSEVBRFwiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisiS2hvIGNo4bupYSDEkcOjIMSRxrDhu6NjIGPhuq1wIG5o4bqtdCwgbmjGsG5nIGtow7RuZyB0aOG7gyBnaGkgdsOgb1xuIgorInThuq1wIHRpbiBuZXdfaW5kZXggKGLhuqNuZyBt4bulYyBs4bulYyBt4bubaSkuIEjDo3kga2nhu4NtIHRyYSB4ZW0gxJHEqWFcbiIKKyJjw7MgYuG7iyDEkeG6p3kgcXXDoSBoYXkgcXVvdGEgKGjhuqFuIG5naOG6oWNoIMSRxKlhIGPhu6luZykgYuG7iyB2xrDhu6N0IHF1w6EsXG4iCisidsOgIHNhdSDEkcOzIFwiZ2l0IHJlc2V0IEhFQURcIiDEkeG7gyBraOG6r2MgcGjhu6VjLiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4Cittc2dpZCAiZ2l0IGNvbmZpZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbmZpZyBbPGPDoWMtdMO5eS1jaOG7jW4+XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NAorbXNnaWQgIkNvbmZpZyBmaWxlIGxvY2F0aW9uIgorbXNnc3RyICJW4buLIHRyw60gdOG6rXAgdGluIGPhuqV1IGjDrG5oIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU1Cittc2dpZCAidXNlIGdsb2JhbCBjb25maWcgZmlsZSIKK21zZ3N0ciAiZMO5bmcgdOG6rXAgdGluIGPhuqV1IGjDrG5oIHRvw6BuIGPhu6VjIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU2Cittc2dpZCAidXNlIHN5c3RlbSBjb25maWcgZmlsZSIKK21zZ3N0ciAic+G7rSBk4bulbmcgdOG6rXAgdGluIGPhuqV1IGjDrG5oIGjhu4cgdGjhu5FuZyIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NworbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICJkw7luZyB04bqtcCB0aW4gY+G6pXUgaMOsbmggY+G7p2Ega2hvIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU4Cittc2dpZCAidXNlIGdpdmVuIGNvbmZpZyBmaWxlIgorbXNnc3RyICJz4butIGThu6VuZyB04bqtcCB0aW4gY+G6pXUgaMOsbmggxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTkKK21zZ2lkICJibG9iLWlkIgorbXNnc3RyICJibG9iLWlkIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU5Cittc2dpZCAicmVhZCBjb25maWcgZnJvbSBnaXZlbiBibG9iIG9iamVjdCIKK21zZ3N0ciAixJHhu41jIGPhuqV1IGjDrG5oIHThu6sgxJHhu5FpIHTGsOG7o25nIGJsb2IgxJHDoyBjaG8iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjAKK21zZ2lkICJBY3Rpb24iCittc2dzdHIgIkjDoG5oIMSR4buZbmciCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjEKK21zZ2lkICJnZXQgdmFsdWU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAibOG6pXkgZ2nDoS10cuG7izogdMOqbiBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYyCittc2dpZCAiZ2V0IGFsbCB2YWx1ZXM6IGtleSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICJs4bqleSB04bqldCBj4bqjIGdpw6EtdHLhu4s6IGtow7NhIFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjMKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAibOG6pXkgZ2nDoSB0cuG7iyBjaG8gcmVnZXhwOiBuYW1lLXJlZ2V4IFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjQKK21zZ2lkICJnZXQgdmFsdWUgc3BlY2lmaWMgZm9yIHRoZSBVUkw6IHNlY3Rpb25bLnZhcl0gVVJMIgorbXNnc3RyICJs4bqleSDEkeG6t2MgdOG6oyBnacOhIHRy4buLIGNobyBVUkw6IHBo4bqnblsuYmnhur9uXSBVUkwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjUKK21zZ2lkICJyZXBsYWNlIGFsbCBtYXRjaGluZyB2YXJpYWJsZXM6IG5hbWUgdmFsdWUgW3ZhbHVlX3JlZ2V4XSIKK21zZ3N0ciAidGhheSB0aOG6vyB04bqldCBj4bqjIGPDoWMgYmnhur9uIGto4bubcCBt4bqrdTogdMOqbiBnacOhLXRy4buLIFt2YWx1ZV9yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjYKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgInRow6ptIGJp4bq/biBt4bubaTogdMOqbiBnacOhLXRy4buLIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY3Cittc2dpZCAicmVtb3ZlIGEgdmFyaWFibGU6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAiZ+G7oSBi4buPIGJp4bq/bjogdMOqbiBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY4Cittc2dpZCAicmVtb3ZlIGFsbCBtYXRjaGVzOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgImfhu6EgYuG7jyBt4buNaSBjw6FpIGto4bubcDogdMOqbiBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY5Cittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICLEkeG7lWkgdMOqbiBwaOG6p246IHTDqm4tY8WpIHTDqm4tbeG7m2kiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzAKK21zZ2lkICJyZW1vdmUgYSBzZWN0aW9uOiBuYW1lIgorbXNnc3RyICJn4buhIGLhu48gcGjhuqduOiB0w6puIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcxCittc2dpZCAibGlzdCBhbGwiCittc2dzdHIgImxp4buHdCBrw6ogdOG6pXQiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzIKK21zZ2lkICJvcGVuIGFuIGVkaXRvciIKK21zZ3N0ciAibeG7nyBt4buZdCB0csOsbmggYmnDqm4gc2/huqFuIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjczCittc2dpZCAiZmluZCB0aGUgY29sb3IgY29uZmlndXJlZDogc2xvdCBbZGVmYXVsdF0iCittc2dzdHIgInTDrG0gY+G6pXUgaMOsbmggbcOgdSBz4bqvYzogc2xvdCBbbeG6t2MgxJHhu4tuaF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAidMOsbSBjw6FjIGPDoGkgxJHhurd0IHbhu4EgbcOgdSBz4bqvYzogc2xvdCBbc3Rkb3V0LWzDoC10dHldIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc1Cittc2dpZCAiVHlwZSIKK21zZ3N0ciAiS2nhu4N1IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc2Cittc2dpZCAidmFsdWUgaXMgXCJ0cnVlXCIgb3IgXCJmYWxzZVwiIgorbXNnc3RyICJnacOhIHRy4buLIGzDoCBcInRydWVcIiBob+G6t2MgXCJmYWxzZVwiIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc3Cittc2dpZCAidmFsdWUgaXMgZGVjaW1hbCBudW1iZXIiCittc2dzdHIgImdpw6EgdHLhu4sg4bufIGThuqFuZyBz4buRIHRo4bqtcCBwaMOibiIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OAorbXNnaWQgInZhbHVlIGlzIC0tYm9vbCBvciAtLWludCIKK21zZ3N0ciAiZ2nDoSB0cuG7iyBsw6AgLS1ib29sIGhv4bq3YyAtLWludCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3OQorbXNnaWQgInZhbHVlIGlzIGEgcGF0aCAoZmlsZSBvciBkaXJlY3RvcnkgbmFtZSkiCittc2dzdHIgImdpw6EgdHLhu4sgbMOgIMSRxrDhu51uZyBk4bqrbiAodMOqbiB04bqtcCB0aW4gaGF5IHRoxrAgbeG7pWMpIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgwCittc2dpZCAiT3RoZXIiCittc2dzdHIgIktow6FjIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgxCittc2dpZCAidGVybWluYXRlIHZhbHVlcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICJjaOG6pW0gZOG7qXQgZ2nDoSB0cuG7iyB24bubaSBieXRlIE5VTCIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MgorbXNnaWQgInNob3cgdmFyaWFibGUgbmFtZXMgb25seSIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIGPDoWMgdMOqbiBiaeG6v24iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODMKK21zZ2lkICJyZXNwZWN0IGluY2x1ZGUgZGlyZWN0aXZlcyBvbiBsb29rdXAiCittc2dzdHIgInTDtG4gdHLhu41uZyBr4buDIGPDoCBjw6FjIGjGsOG7m25nIHRyb25nIHTDrG0ga2nhur9tIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjMxMQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICJraMO0bmcgdGjhu4MgcGjDom4gdMOtY2ggZ2nDoSB0cuG7iyBtw6B1IG3hurdjIMSR4buLbmgiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjIMSQw6J5IGzDoCB04bqtcCB0aW4gY+G6pXUgaMOsbmggY2hvIHThu6tuZyBuZ8aw4budaSBkw7luZyBHaXQuXG4iCisiW3VzZXJdXG4iCisiIyBWdWkgbMOybmcgc+G7rWEgbOG6oWkgY2hvIHRow61jaCBo4bujcCB2w6AgYuG7jyBk4bqldSBnaGkgY2jDuiBjw6FjIGTDsm5nIHNhdTpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdOG6rXAgdGluIGPhuqV1IGjDrG5oIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2NvdW50LW9iamVjdHMuYzo1NQorbXNnaWQgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCittc2dzdHIgImdpdCBjb3VudC1vYmplY3RzIFstdl0gWy1IIHwgLS1odW1hbi1yZWFkYWJsZV0iCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjY1Cittc2dpZCAicHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgZm9ybWF0IgorbXNnc3RyICJoaeG7g24gdGjhu4sga8OtY2ggY+G7oSB0aGVvIMSR4buLbmggZOG6oW5nIGTDoG5oIGNobyBuZ8aw4budaSDEkeG7jWMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxNworbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSBbPGNvbW1pdC1pc2g+Li4uXSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs8Y8OhYy10w7l5LWNo4buNbj5dIDxjb21taXQtaXNoPioiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoxOAorbXNnaWQgImdpdCBkZXNjcmliZSBbPG9wdGlvbnM+XSAtLWRpcnR5IgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzxjw6FjLXTDuXktY2jhu41uPl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgInRo4bq7IMSRw6MgxJHGsOG7o2MgZ2hpIGNow7ogJXMga2jDtG5nIHPhurVuIMSR4buDIGTDuW5nIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjIxCisjLCBjLWZvcm1hdAorbXNnaWQgImFubm90YXRlZCB0YWcgJXMgaGFzIG5vIGVtYmVkZGVkIG5hbWUiCittc2dzdHIgInRo4bq7IMSRxrDhu6NjIGNow7ogZ2nhuqNpICVzIGtow7RuZyBjw7MgdMOqbiBuaMO6bmciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMjMKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgaXMgcmVhbGx5ICclcycgaGVyZSIKK21zZ3N0ciAidGjhursg4oCcJXPigJ0gxJHDoyB0aOG7sWMgc+G7sSDhu58gxJHDonkg4oCcJXPigJ0gcuG7k2kiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNTAgYnVpbHRpbi9sb2cuYzo0NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWUgJXMiCittc2dzdHIgIktow7RuZyBwaOG6o2kgdMOqbiDEkeG7kWkgdMaw4bujbmcgJXMgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI1MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBub3QgYSB2YWxpZCAnJXMnIG9iamVjdCIKK21zZ3N0ciAiJXMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgxJHhu5FpIHTGsOG7o25nIOKAnCVz4oCdIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICJraMO0bmcgY8OzIHRo4bq7IG7DoG8ga2jhu5twIGNow61uaCB4w6FjIHbhu5tpIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjcyCisjLCBjLWZvcm1hdAorbXNnaWQgInNlYXJjaGluZyB0byBkZXNjcmliZSAlc1xuIgorbXNnc3RyICLEkGFuZyB0w6xtIGtp4bq/bSDEkeG7gyBtw7QgdOG6oyAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzE5CisjLCBjLWZvcm1hdAorbXNnaWQgImZpbmlzaGVkIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICJ2aeG7h2MgdMOsbSBraeG6v20gxJHDoyBr4bq/dCB0aMO6YyB04bqhaSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgorbXNnc3RyICIiCisiS2jDtG5nIGPDsyB0aOG6uyDEkcaw4bujYyBjaMO6IGdp4bqjaSBuw6BvIMSRxrDhu6NjIG3DtCB04bqjIGzDoCDigJwlc+KAnS5cbiIKKyJUdXkgbmhpw6puLCDhu58gxJHDonkgY8OzIG5o4buvbmcgdGjhursga2jDtG5nIMSRxrDhu6NjIGNow7ogZ2nhuqNpOiBow6N5IHRo4butIC0tdGFncy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vIHRhZ3MgY2FuIGRlc2NyaWJlICclcycuXG4iCisiVHJ5IC0tYWx3YXlzLCBvciBjcmVhdGUgc29tZSB0YWdzLiIKK21zZ3N0ciAiIgorIktow7RuZyBjw7MgdGjhursgY8OzIHRo4buDIG3DtCB04bqjIOKAnCVz4oCdLlxuIgorIkjDo3kgdGjhu60gLS1hbHdheXMsIGhv4bq3YyB04bqhbyBt4buZdCBz4buRIHRo4bq7LiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAixJHDoyB4dXnDqm4gJWx1IHF1YSBs4bqnbiBjaHV54buDbiBnaWFvXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozNzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm1vcmUgdGhhbiAlaSB0YWdzIGZvdW5kOyBsaXN0ZWQgJWkgbW9zdCByZWNlbnRcbiIKKyJnYXZlIHVwIHNlYXJjaCBhdCAlc1xuIgorbXNnc3RyICIiCisidMOsbSB0aOG6pXkgbmhp4buBdSBoxqFuICVpIHRo4bq7OyDEkcOjIGxp4buHdCBrw6ogJWkgY8OhaSBn4bqnblxuIgorIsSRw6J5IG5o4bqldCBi4buPIMSRaSB0w6xtIGtp4bq/bSB04bqhaSAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6Mzk2Cittc2dpZCAiZmluZCB0aGUgdGFnIHRoYXQgY29tZXMgYWZ0ZXIgdGhlIGNvbW1pdCIKK21zZ3N0ciAidMOsbSBjw6FjIHRo4bq7IG3DoCBuw7MgxJHhur9uIHRyxrDhu5tjIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTcKK21zZ2lkICJkZWJ1ZyBzZWFyY2ggc3RyYXRlZ3kgb24gc3RkZXJyIgorbXNnc3RyICJjaGnhur9uIGzGsOG7o2MgdMOsbSBraeG6v20gZ+G7oSBs4buXaSB0csOqbiDEkeG6p3UgcmEgbOG7l2kgY2h14bqpbiBzdGRlcnIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTgKK21zZ2lkICJ1c2UgYW55IHJlZiIKK21zZ3N0ciAiZMO5bmcgcmVmIGLhuqV0IGvhu7MiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTkKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAiZMO5bmcgdGjhursgYuG6pXQga+G7sywgY+G6oyBraGkg4oCcdW5hbm5vdGF0ZWTigJ0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDAKK21zZ2lkICJhbHdheXMgdXNlIGxvbmcgZm9ybWF0IgorbXNnc3RyICJsdcO0biBkw7luZyDEkeG7i25oIGThuqFuZyBkw6BpIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDAxCittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICJjaOG7iSB0aGVvIGNoYSBt4bq5IMSR4bqndSB0acOqbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQwNAorbXNnaWQgIm9ubHkgb3V0cHV0IGV4YWN0IG1hdGNoZXMiCittc2dzdHIgImNo4buJIHh14bqldCBuaOG7r25nIGfDrCBraOG7m3AgY2jDrW5oIHjDoWMiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDYKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICJjb2kgbmjGsCA8bj4gdGjhursgZ+G6p24gxJHDonkgbmjhuqV0ICht4bq3YyDEkeG7i25oOiAxMCkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDgKK21zZ2lkICJvbmx5IGNvbnNpZGVyIHRhZ3MgbWF0Y2hpbmcgPHBhdHRlcm4+IgorbXNnc3RyICJjaOG7iSBjw6JuIG5o4bqvYyDEkeG6v24gbmjhu69uZyB0aOG6uyBraOG7m3AgduG7m2kgPG3huqt1PiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMCBidWlsdGluL25hbWUtcmV2LmM6MzE4Cittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICJoaeG7g24gdGjhu4sgxJHhu5FpIHTGsOG7o25nIGNodXnhu4NuIGdpYW8gduG6r24gdOG6r3QgbmjGsCBsw6AgZmFsbGJhY2siCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTEKK21zZ2lkICJtYXJrIgorbXNnc3RyICJk4bqldSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMgorbXNnaWQgImFwcGVuZCA8bWFyaz4gb24gZGlydHkgd29ya2luZyB0cmVlIChkZWZhdWx0OiBcIi1kaXJ0eVwiKSIKK21zZ3N0ciAidGjDqm0gPGThuqV1PiB0csOqbiBjw6J5IHRoxrAgbeG7pWMgbMOgbSB2aeG7h2MgYuG6qW4gKG3hurdjIMSR4buLbmggXCItZGlydHlcIikiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzAKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiLS1sb25nIGzDoCB4dW5nIGto4bqvYyB24bubaSB0w7l5IGNo4buNbiAtLWFiYnJldj0wIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDU2Cittc2dpZCAiTm8gbmFtZXMgZm91bmQsIGNhbm5vdCBkZXNjcmliZSBhbnl0aGluZy4iCittc2dzdHIgIktow7RuZyB0w6xtIHRo4bqleSBjw6FjIHTDqm4sIGtow7RuZyB0aOG7gyBtw7QgdOG6oyBnw6wgY+G6oy4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NzYKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSBsw6AgeHVuZyBraOG6r2MgduG7m2kgY8OhYyB0w7l5IGNo4buNbiBjb21taXQtaXNoIgorCisjOiBidWlsdGluL2RpZmYuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiBub3QgYSByZWd1bGFyIGZpbGUgb3Igc3ltbGluayIKK21zZ3N0ciAi4oCcJXPigJ06IGtow7RuZyBwaOG6o2kgdOG6rXAgdGluIGLDrG5oIHRoxrDhu51uZyBoYXkgbGnDqm4ga+G6v3QgbeG7gW0iCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjIzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9wdGlvbjogJXMiCittc2dzdHIgInTDuXkgY2jhu41uIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU4Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIktow7RuZyBwaOG6o2kgbMOgIGtobyBnaXQiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIMSRw6MgY2hvIOKAnCVz4oCdIGtow7RuZyBo4bujcCBs4buHLiIKKworIzogYnVpbHRpbi9kaWZmLmM6NDEwCisjLCBjLWZvcm1hdAorbXNnaWQgIm1vcmUgdGhhbiB0d28gYmxvYnMgZ2l2ZW46ICclcyciCittc2dzdHIgIsSRw6MgY2hvIG5oaeG7gXUgaMahbiBoYWkgxJHhu5FpIHTGsOG7o25nIGJsb2I6IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2RpZmYuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5oYW5kbGVkIG9iamVjdCAnJXMnIGdpdmVuLiIKK21zZ3N0ciAixJHDoyBjaG8gxJHhu5FpIHTGsOG7o25nIGtow7RuZyB0aOG7gyBu4bqvbSBnaeG7ryDigJwlc+KAnS4iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoyNQorbXNnaWQgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCittc2dzdHIgImdpdCBmYXN0LWV4cG9ydCBbcmV2LWxpc3Qtb3B0c10iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODAKK21zZ2lkICJzaG93IHByb2dyZXNzIGFmdGVyIDxuPiBvYmplY3RzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdGnhur9uIHRyaeG7g24gc2F1IDxuPiDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODIKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgImNo4buNbiDEkWnhu4F1IGtoaeG7g24gY+G7p2EgdGjhursgxJHDoyBrw70iCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODUKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2YgdGFncyB0aGF0IHRhZyBmaWx0ZXJlZCBvYmplY3RzIgorbXNnc3RyICJjaOG7jW4gc+G7sSB44butIGzDvSBj4bunYSBjw6FjIHRo4bq7LCBjw6FpIG3DoCDEkcOhbmggdGjhursgY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHGsOG7o2MgbOG7jWMgcmEiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODgKK21zZ2lkICJEdW1wIG1hcmtzIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAixJDhu5UgY8OhYyDEkcOhbmggZOG6pXUgbsOgeSB2w6BvIHThuq1wLXRpbiIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5MAorbXNnaWQgIkltcG9ydCBtYXJrcyBmcm9tIHRoaXMgZmlsZSIKK21zZ3N0ciAibmjhuq1wIHbDoG8gxJHDoW5oIGThuqV1IHThu6sgdOG6rXAgdGluIG7DoHkiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTIKK21zZ2lkICJGYWtlIGEgdGFnZ2VyIHdoZW4gdGFncyBsYWNrIG9uZSIKK21zZ3N0ciAiTMOgbSBnaeG6oyBt4buZdCBjw6FpIHRo4bq7IGtoaSB0aOG6uyBi4buLIHRoaeG6v3UgbeG7mXQgY8OhaSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5NAorbXNnaWQgIk91dHB1dCBmdWxsIHRyZWUgZm9yIGVhY2ggY29tbWl0IgorbXNnc3RyICJYdeG6pXQgcmEgdG/DoG4gYuG7mSBjw6J5IGNobyBt4buXaSBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk2Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIlPhu60gZOG7pW5nIHTDrW5oIG7Eg25nIGRvbmUgxJHhu4MgY2jhuqVtIGThu6l0IGx14buTbmcgZOG7ryBsaeG7h3UiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTcKK21zZ2lkICJTa2lwIG91dHB1dCBvZiBibG9iIGRhdGEiCittc2dzdHIgIkLhu48gcXVhIGvhur90IHh14bqldCBj4bunYSBk4buvIGxp4buHdSBibG9iIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk4Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAicmVmc3BlYyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5OQorbXNnaWQgIkFwcGx5IHJlZnNwZWMgdG8gZXhwb3J0ZWQgcmVmcyIKK21zZ3N0ciAiw4FwIGThu6VuZyByZWZzcGVjIGNobyByZWZzIMSRw6MgeHXhuqV0IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MTAwMAorbXNnaWQgImFub255bWl6ZSBvdXRwdXQiCittc2dzdHIgImvhur90IHh14bqldCBhbm9ueW1pemUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoyMAorbXNnaWQgImdpdCBmZXRjaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8Y8OhYy10w7l5LWNo4buNbj5dIFs8a2hvLWNo4bupYT4gWzxyZWZzcGVjPuKApl1dIgorCisjOiBidWlsdGluL2ZldGNoLmM6MjEKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gPGdyb3VwPiIKK21zZ3N0ciAiZ2l0IGZldGNoIFs8Y8OhYy10w7l5LWNo4buNbj5dIFs8bmjDs20+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MjIKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzxjw6FjLXTDuXktY2jhu41uPl0gWyg8a2hvPiB8IDxuaMOzbT4p4oCmXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIzCittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1hbGwgWzxjw6FjLXTDuXktY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MCBidWlsdGluL3B1bGwuYzoxNjIKK21zZ2lkICJmZXRjaCBmcm9tIGFsbCByZW1vdGVzIgorbXNnc3RyICJs4bqleSB24buBIHThu6sgdOG6pXQgY+G6oyBjw6FjIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5MiBidWlsdGluL3B1bGwuYzoxNjUKK21zZ2lkICJhcHBlbmQgdG8gLmdpdC9GRVRDSF9IRUFEIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmciCittc2dzdHIgIm7hu5FpIHRow6ptIHbDoG8gLmdpdC9GRVRDSF9IRUFEIHRoYXkgdsOsIGdoaSDEkcOoIGzDqm4gbsOzIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTQgYnVpbHRpbi9wdWxsLmM6MTY4Cittc2dpZCAicGF0aCB0byB1cGxvYWQgcGFjayBvbiByZW1vdGUgZW5kIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gxJHhur9uIGfDs2kgdOG6o2kgbMOqbiB0csOqbiBtw6F5IGNo4bunIGN14buRaSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk1IGJ1aWx0aW4vcHVsbC5jOjE3MAorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgIsOpcCBideG7mWMgZ2hpIMSRw6ggbMOqbiBuaMOhbmggbuG7mWkgYuG7mSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk3Cittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICJs4bqleSB04burIG5oaeG7gXUgbcOheSBjaOG7pyBjw7luZyBsw7pjIgorCisjOiBidWlsdGluL2ZldGNoLmM6OTkgYnVpbHRpbi9wdWxsLmM6MTcyCittc2dpZCAiZmV0Y2ggYWxsIHRhZ3MgYW5kIGFzc29jaWF0ZWQgb2JqZWN0cyIKK21zZ3N0ciAibOG6pXkgdOG6pXQgY+G6oyBjw6FjIHRo4bq7IGPDuW5nIHbhu5tpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGxpw6puIHF1YW4gxJHhur9uIG7DsyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMQorbXNnaWQgImRvIG5vdCBmZXRjaCBhbGwgdGFncyAoLS1uby10YWdzKSIKK21zZ3N0ciAia2jDtG5nIGzhuqV5IHThuqV0IGPhuqMgY8OhYyB0aOG6uyAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwMyBidWlsdGluL3B1bGwuYzoxNzUKK21zZ2lkICJwcnVuZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMgbm8gbG9uZ2VyIG9uIHJlbW90ZSIKK21zZ3N0ciAiIgorImPhuq90IGPhu6V0IChwcnVuZSkgY8OhYyBuaMOhbmgg4oCccmVtb3RlLXRyYWNraW5n4oCdIGtow7RuZyBjw7JuIHThu5NuIHThuqFpIHRyw6puIG3DoXkgY2jhu6cgIgorIm7hu69hIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA0IGJ1aWx0aW4vcHVsbC5jOjE3OAorbXNnaWQgIm9uLWRlbWFuZCIKK21zZ3N0ciAia2hpLWPhuqduIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA1IGJ1aWx0aW4vcHVsbC5jOjE3OQorbXNnaWQgImNvbnRyb2wgcmVjdXJzaXZlIGZldGNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIsSRaeG7gXUga2hp4buDbiB2aeG7h2MgbOG6pXkgduG7gSDEkeG7hyBxdXkgdHJvbmcgY8OhYyBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDkgYnVpbHRpbi9wdWxsLmM6MTg0Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgImdp4buvIGzhuqFpIGfDs2kgxJHDoyB04bqjaSB24buBIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTExCittc2dpZCAiYWxsb3cgdXBkYXRpbmcgb2YgSEVBRCByZWYiCittc2dzdHIgImNobyBwaMOpcCBj4bqtcCBuaOG6rXQgdGguY2hp4bq/dSBIRUFEIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE0IGJ1aWx0aW4vcHVsbC5jOjE4NworbXNnaWQgImRlZXBlbiBoaXN0b3J5IG9mIHNoYWxsb3cgY2xvbmUiCittc2dzdHIgImzDoG0gc8OidSBoxqFuIGzhu4tjaCBz4butIGPhu6dhIGLhuqNuIHNhbyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNiBidWlsdGluL3B1bGwuYzoxOTAKK21zZ2lkICJjb252ZXJ0IHRvIGEgY29tcGxldGUgcmVwb3NpdG9yeSIKK21zZ3N0ciAiY2h1eeG7g24gxJHhu5VpIGhvw6BuIHRvw6BuIHNhbmcga2hvIGdpdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOCBidWlsdGluL2xvZy5jOjEyMzMKK21zZ2lkICJkaXIiCittc2dzdHIgInRt4bulYyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOQorbXNnaWQgInByZXBlbmQgdGhpcyB0byBzdWJtb2R1bGUgcGF0aCBvdXRwdXQiCittc2dzdHIgInNv4bqhbiBz4bq1biBjw6FpIG7DoHkgY2hvIGvhur90IHh14bqldCDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIyCittc2dpZCAiZGVmYXVsdCBtb2RlIGZvciByZWN1cnNpb24iCittc2dzdHIgImNo4bq/IMSR4buZIG3hurdjIMSR4buLbmggY2hvIMSR4buHIHF1aSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEyNCBidWlsdGluL3B1bGwuYzoxOTMKK21zZ2lkICJhY2NlcHQgcmVmcyB0aGF0IHVwZGF0ZSAuZ2l0L3NoYWxsb3ciCittc2dzdHIgImNo4bqlcCBuaOG6rW4gdGhhbSBjaGnhur91IGPhuq1wIG5o4bqtdCAuZ2l0L3NoYWxsb3ciCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjUgYnVpbHRpbi9wdWxsLmM6MTk1Cittc2dpZCAicmVmbWFwIgorbXNnc3RyICJyZWZtYXAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjYgYnVpbHRpbi9wdWxsLmM6MTk2Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgImNo4buJIHJhIHJlZm1hcCBj4bqnbiBs4bqleSB24buBIgorCisjOiBidWlsdGluL2ZldGNoLmM6Mzc4Cittc2dpZCAiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmIEhFQUQiCittc2dzdHIgIktow7RuZyB0aOG7gyB0w6xtIHRo4bqleSBtw6F5IGNo4bunIGNobyB0aGFtIGNoaeG6v3UgSEVBRCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ1OAorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXMgbm90IGZvdW5kIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgxJHhu5FpIHTGsOG7o25nICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDYzCittc2dpZCAiW3VwIHRvIGRhdGVdIgorbXNnc3RyICJbxJHDoyBj4bqtcCBuaOG6rXRdIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiEgJS0qcyAlLSpzIC0+ICVzICAoY2FuJ3QgZmV0Y2ggaW4gY3VycmVudCBicmFuY2gpIgorbXNnc3RyICIhICUtKnMgJS0qcyAtPiAlcyAgKGtow7RuZyB0aOG7gyBmZXRjaCAobOG6pXkpIHbhu4EgbmjDoW5oIGhp4buHbiBow6BuaCkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NzggYnVpbHRpbi9mZXRjaC5jOjU2NAorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIltC4buLIHThu6sgY2jhu5FpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ4OQorbXNnaWQgIlt0YWcgdXBkYXRlXSIKK21zZ3N0ciAiW2Phuq1wIG5o4bqtdCB0aOG6u10iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0OTEgYnVpbHRpbi9mZXRjaC5jOjUyNiBidWlsdGluL2ZldGNoLmM6NTQ0Cittc2dpZCAiICAodW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYpIgorbXNnc3RyICIgIChraMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IHRoYW0gY2hp4bq/dSBu4buZaSBi4buZKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUwOQorbXNnaWQgIltuZXcgdGFnXSIKK21zZ3N0ciAiW3Ro4bq7IG3hu5tpXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxMgorbXNnaWQgIltuZXcgYnJhbmNoXSIKK21zZ3N0ciAiW25ow6FuaCBt4bubaV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MTUKK21zZ2lkICJbbmV3IHJlZl0iCittc2dzdHIgIltyZWYgKHRoYW0gY2hp4bq/dSkgbeG7m2ldIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTYwCittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSBsb2NhbCByZWYiCittc2dzdHIgImtow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgdGhhbSBjaGnhur91IG7hu5lpIGLhu5kiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NjAKK21zZ2lkICJmb3JjZWQgdXBkYXRlIgorbXNnc3RyICJjxrDhu6FuZyBi4bupYyBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NjYKK21zZ2lkICIobm9uLWZhc3QtZm9yd2FyZCkiCittc2dzdHIgIihraMO0bmctY2h1eeG7g24tdGnhur9wLW5oYW5oKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwMCBidWlsdGluL2ZldGNoLmM6ODQyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlc1xuIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyAlczogJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIMSRw6Mga2jDtG5nIGfhu61pIHThuqV0IGPhuqMgY8OhYyDEkeG7kWkgdMaw4bujbmcgY+G6p24gdGhp4bq/dFxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgInThu6sgY2jhu5FpICVzIGLhu59pIHbDrCBjw6FjIGfhu5FjIG7DtG5nIHRow6wga2jDtG5nIMSRxrDhu6NjIHBow6lwIGPhuq1wIG5o4bqtdCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcxNSBidWlsdGluL2ZldGNoLmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIkZyb20gJS4qc1xuIgorbXNnc3RyICJU4burICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisibeG7mXQgc+G7kSB0aGFtIGNoaeG6v3UgbuG7mWkgYuG7mSBraMO0bmcgdGjhu4MgxJHGsOG7o2MgY+G6rXAgbmjhuq10OyBow6N5IHRo4butIGNo4bqheVxuIgorIiDigJxnaXQgcmVtb3RlIHBydW5lICVz4oCdIMSR4buDIGLhu48gxJFpIG5o4buvbmcgbmjDoW5oIGPFqSwgaGF5IGLhu4sgeHVuZyDEkeG7mXQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIHdpbGwgYmVjb21lIGRhbmdsaW5nKSIKK21zZ3N0ciAiICAgKCVzIHPhur0gdHLhu58gdGjDoG5oIGtow7RuZyDEkeG6p3UgKGtow7RuZyDEkcaw4bujYyBxdeG6o24gbMO9KSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgKCVzIGhhcyBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICAoJXMgxJHDoyB0cuG7nyB0aMOgbmgga2jDtG5nIMSR4bqndSAoa2jDtG5nIMSRxrDhu6NjIHF14bqjbiBsw70pKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMQorbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW8SRw6MgeMOzYV0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MTIgYnVpbHRpbi9yZW1vdGUuYzoxMDM0Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICIoa2jDtG5nKSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgzMgorIywgYy1mb3JtYXQKK21zZ2lkICJSZWZ1c2luZyB0byBmZXRjaCBpbnRvIGN1cnJlbnQgYnJhbmNoICVzIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJU4burIGNo4buRaSB2aeG7h2MgbOG6pXkgdsOgbyB0cm9uZyBuaMOhbmggaGnhu4duIHThuqFpICVzIGPhu6dhIG3hu5l0IGtobyBjaOG7qWEga2jDtG5nIHBo4bqjaSBraG8gIgorInRy4bqnbiAoYmFyZSkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gXCIlc1wiIGPDsyBnacOhIHRy4buLIFwiJXNcIiBsw6Aga2jDtG5nIGjhu6NwIGzhu4cgY2hvICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6ODU0CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbiBcIiVzXCIgaXMgaWdub3JlZCBmb3IgJXNcbiIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gXCIlc1wiIGLhu4sgYuG7jyBxdWEgduG7m2kgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIgorbXNnc3RyICJLaMO0bmcgYmnhur90IGzDoG0gY8OhY2ggbsOgbyDEkeG7gyBs4bqleSB24buBIHThu6sgJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZldGNoaW5nICVzXG4iCittc2dzdHIgIsSQYW5nIGzhuqV5IOKAnCVz4oCdIHbhu4FcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNzMgYnVpbHRpbi9yZW1vdGUuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyDigJwlc+KAnSB24buBIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA5MQorbXNnaWQgIiIKKyJObyByZW1vdGUgcmVwb3NpdG9yeSBzcGVjaWZpZWQuICBQbGVhc2UsIHNwZWNpZnkgZWl0aGVyIGEgVVJMIG9yIGFcbiIKKyJyZW1vdGUgbmFtZSBmcm9tIHdoaWNoIG5ldyByZXZpc2lvbnMgc2hvdWxkIGJlIGZldGNoZWQuIgorbXNnc3RyICIiCisiQ2jGsGEgY2jhu4kgcmEga2hvIGNo4bupYSBtw6F5IGNo4bunLiAgWGluIGjDo3kgY2jhu4kgxJHhu4tuaCBob+G6t2MgbMOgIFVSTCBob+G6t2NcbiIKKyJ0w6puIG3DoXkgY2jhu6cgdOG7qyBjw6FpIG3DoCBuaOG7r25nIMSRaeG7g20geMOpdCBkdXnhu4d0IG3hu5tpIGPDsyB0aOG7gyDEkcaw4bujYyBmZXRjaCAobOG6pXkgduG7gSkuIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTExNAorbXNnaWQgIllvdSBuZWVkIHRvIHNwZWNpZnkgYSB0YWcgbmFtZS4iCittc2dzdHIgIkLhuqFuIHBo4bqjaSDEkeG7i25oIHLDtSB0w6puIHRo4bq7LiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExNTYKK21zZ2lkICItLWRlcHRoIGFuZCAtLXVuc2hhbGxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlciIKK21zZ3N0ciAidMO5eSBjaOG7jW4gLS1kZXB0aCB2w6AgLS11bnNoYWxsb3cga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIGPDuW5nIHbhu5tpIG5oYXUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU4Cittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tdW5zaGFsbG93IHRyw6puIGtobyBob8OgbiBjaOG7iW5oIGzDoCBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE4MQorbXNnaWQgImZldGNoIC0tYWxsIGRvZXMgbm90IHRha2UgYSByZXBvc2l0b3J5IGFyZ3VtZW50IgorbXNnc3RyICJs4buHbmggbOG6pXkgduG7gSBcImZldGNoIC0tYWxsXCIga2jDtG5nIGzhuqV5IMSR4buRaSBz4buRIGtobyBjaOG7qWEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgzCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgbWFrZSBzZW5zZSB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICJs4buHbmggbOG6pXkgduG7gSBcImZldGNoIC0tYWxsXCIga2jDtG5nIGjhu6NwIGzDvSB24bubaSByZWZzcGVjcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAia2jDtG5nIGPDsyBuaMOzbSBtw6F5IGNo4bunIGhheSBtw6F5IGNo4bunIG5oxrAgdGjhur86ICVzIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTIwMgorbXNnaWQgIkZldGNoaW5nIGEgZ3JvdXAgYW5kIHNwZWNpZnlpbmcgcmVmc3BlY3MgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiVmnhu4djIGzhuqV5IHbhu4EgY+G6oyBt4buZdCBuaMOzbSB2w6AgY2jhu4kgxJHhu4tuaCByZWZzcGVjcyBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzoxNAorbXNnaWQgIiIKKyJnaXQgZm10LW1lcmdlLW1zZyBbLW0gPG1lc3NhZ2U+XSBbLS1sb2dbPTxuPl0gfCAtLW5vLWxvZ10gWy0tZmlsZSA8ZmlsZT5dIgorbXNnc3RyICIiCisiZ2l0IGZtdC1tZXJnZS1tc2cgWy1tIDxjaMO6X3Row61jaD5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDx04bqtcC0iCisidGluPl0iCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MAorbXNnaWQgInBvcHVsYXRlIGxvZyB3aXRoIGF0IG1vc3QgPG4+IGVudHJpZXMgZnJvbSBzaG9ydGxvZyIKK21zZ3N0ciAiZ+G6r24gbmjhuq10IGvDvSB24bubaSDDrXQgbmjhuqV0IDxuPiBt4bulYyB04burIGzhu4duaCDigJxzaG9ydGxvZ+KAnSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczCittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAiYsOtIGRhbmggY2hvIC0tbG9nIChraMO0bmcgxJHGsOG7o2MgZMO5bmcpIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzYKK21zZ2lkICJ0ZXh0IgorbXNnc3RyICJ2xINuIGLhuqNuIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzcKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgImTDuW5nIDx2xINuIGLhuqNuIHRoxrDhu51uZz4gxJHhu4MgYuG6r3QgxJHhuqd1IGdoaSBjaMO6IgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzgKK21zZ2lkICJmaWxlIHRvIHJlYWQgZnJvbSIKK21zZ3N0ciAidOG6rXAgdGluIMSR4buDIMSR4buNYyBk4buvIGxp4buHdSB04burIMSRw7MiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6OQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzxjw6FjLXTDuXktY2jhu41uPl0gWzxt4bqrdT5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI0Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBzaGVsbHMiCittc2dzdHIgInRyw61jaCBk4bqrbiDEkeG7gyBwaMO5IGjhu6NwIGNobyBo4buHIHbhu48gKHNoZWxsKSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzoyNgorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgcGVybCIKK21zZ3N0ciAidHLDrWNoIGThuqtuIMSR4buDIHBow7kgaOG7o3AgY2hvIHBlcmwiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjgKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHB5dGhvbiIKK21zZ3N0ciAidHLDrWNoIGThuqtuIMSR4buDIHBow7kgaOG7o3AgY2hvIHB5dGhvbiIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMAorbXNnaWQgInF1b3RlIHBsYWNlaG9sZGVycyBzdWl0YWJseSBmb3IgVGNsIgorbXNnc3RyICJ0csOtY2ggZOG6q24gxJHhu4MgcGjDuSBo4bujcCBjaG8gVGNsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjMzCittc2dpZCAic2hvdyBvbmx5IDxuPiBtYXRjaGVkIHJlZnMiCittc2dzdHIgImhp4buDbiB0aOG7iyBjaOG7iSA8bj4gdGhhbSBjaGnhur91IGto4bubcCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgIsSR4buLbmggZOG6oW5nIHPhur0gZMO5bmcgY2hvIMSR4bqndSByYSIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNQorbXNnaWQgImtleSIKK21zZ3N0ciAia2jDs2EiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzYKK21zZ2lkICJmaWVsZCBuYW1lIHRvIHNvcnQgb24iCittc2dzdHIgInTDqm4gdHLGsOG7nW5nIGPhuqduIHPhuq9wIHjhur9wIgorCisjOiBidWlsdGluL2ZzY2suYzoxNjMgYnVpbHRpbi9wcnVuZS5jOjEzNworbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eSIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBr4bq/dCBu4buRaSIKKworIzogYnVpbHRpbi9mc2NrLmM6NTY4Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0IGRpcmVjdG9yaWVzIgorbXNnc3RyICLEkGFuZyBraeG7g20gdHJhIGPDoWMgdGjGsCBt4bulYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzMQorbXNnaWQgImdpdCBmc2NrIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBmc2NrIFs8Y8OhYy10w7l5LWNo4buNbj5dIFs8xJHhu5FpLXTGsOG7o25nPuKApl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzNworbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgxJHhu5FpIHTGsOG7o25nIGtow7RuZyB0aOG7gyDEkeG7jWMgxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzOAorbXNnaWQgInNob3cgZGFuZ2xpbmcgb2JqZWN0cyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgxJHhu5FpIHTGsOG7o25nIGtow7RuZyDEkcaw4bujYyBxdeG6o24gbMO9IgorCisjOiBidWlsdGluL2ZzY2suYzo2MzkKK21zZ2lkICJyZXBvcnQgdGFncyIKK21zZ3N0ciAiYsOhbyBjw6FvIGPDoWMgdGjhursiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MAorbXNnaWQgInJlcG9ydCByb290IG5vZGVzIgorbXNnc3RyICJiw6FvIGPDoW8gbm9kZSBn4buRYyIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQxCittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgInThuqFvIOKAnGluZGV4IG9iamVjdHMgaGVhZCBub2Rlc+KAnSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQyCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICJ04bqhbyDigJxyZWZsb2dzIGhlYWQgbm9kZXPigJ0gKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDMKK21zZ2lkICJhbHNvIGNvbnNpZGVyIHBhY2tzIGFuZCBhbHRlcm5hdGUgb2JqZWN0cyIKK21zZ3N0ciAiY8WpbmcgY8OibiBuaOG6r2MgxJHhur9uIGPDoWMgxJHhu5FpIHTGsOG7o25nIGfDs2kgdsOgIHRoYXkgdGjhur8iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NAorbXNnaWQgImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IgorbXNnc3RyICJjaOG7iSBraeG7g20gdHJhIGvhur90IG7hu5FpIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDUKK21zZ2lkICJlbmFibGUgbW9yZSBzdHJpY3QgY2hlY2tpbmciCittc2dzdHIgImNobyBwaMOpcCBraeG7g20gdHJhIGjhuqFuIGNo4bq/IGjGoW4iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NworbXNnaWQgIndyaXRlIGRhbmdsaW5nIG9iamVjdHMgaW4gLmdpdC9sb3N0LWZvdW5kIgorbXNnc3RyICJnaGkgY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIMSRxrDhu6NjIHF14bqjbiBsw70gdHJvbmcgLmdpdC9sb3N0LWZvdW5kIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDggYnVpbHRpbi9wcnVuZS5jOjEwNworbXNnaWQgInNob3cgcHJvZ3Jlc3MiCittc2dzdHIgImhp4buDbiB0aOG7iyBxdcOhIHRyw6xuaCIKKworIzogYnVpbHRpbi9mc2NrLmM6NzA3Cittc2dpZCAiQ2hlY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcga2nhu4NtIHRyYSBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9nYy5jOjI1Cittc2dpZCAiZ2l0IGdjIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZ2MgWzxjw6FjLXTDuXktY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICIlcyBraMO0bmcgaOG7o3AgbOG7hzog4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vZ2MuYzoxMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyBvYmplY3QgZGlyZWN0b3J5ICUuKnMiCittc2dzdHIgInRoxrAgbeG7pWMgxJHhu5FpIHTGsOG7o25nIGTDoGkgbeG7mXQgY8OhY2ggxJFpw6puIHLhu5MgJS4qcyIKKworIzogYnVpbHRpbi9nYy5jOjI2OQorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICJ4w7NhIGLhu48gY8OhYyDEkeG7kWkgdMaw4bujbmcga2jDtG5nIMSRxrDhu6NjIHRoYW0gY2hp4bq/dSIKKworIzogYnVpbHRpbi9nYy5jOjI3MQorbXNnaWQgImJlIG1vcmUgdGhvcm91Z2ggKGluY3JlYXNlZCBydW50aW1lKSIKK21zZ3N0ciAiY+G6qW4gdGjhuq1uIGjGoW4gbuG7r2EgKHTEg25nIHRo4budaSBnaWFuIGNo4bqheSkiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNzIKK21zZ2lkICJlbmFibGUgYXV0by1nYyBtb2RlIgorbXNnc3RyICJi4bqtdCBjaOG6vyDEkeG7mSBhdXRvLWdjIgorCisjOiBidWlsdGluL2djLmM6MjczCittc2dpZCAiZm9yY2UgcnVubmluZyBnYyBldmVuIGlmIHRoZXJlIG1heSBiZSBhbm90aGVyIGdjIHJ1bm5pbmciCittc2dzdHIgImJ14buZYyBnYyBjaOG6oXkgbmdheSBj4bqjIGtoaSBjw7MgdGnhur9uIHRyw6xuaCBnYyBraMOhYyDEkWFuZyBjaOG6oXkiCisKKyM6IGJ1aWx0aW4vZ2MuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGluIGJhY2tncm91bmQgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuXG4iCittc2dzdHIgIiIKKyJU4buxIMSR4buZbmcgxJHDs25nIGfDs2kga2hvIGNo4bupYSB0csOqbiBu4buBbiBo4buHIHRo4buRbmcgxJHhu4MgdOG7kWkgxrB1IGjDs2EgaGnhu4d1IHN14bqldCBsw6BtICIKKyJ2aeG7h2MuXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICJU4buxIMSR4buZbmcgxJHDs25nIGfDs2kga2hvIGNo4bupYSDEkeG7gyB04buRaSDGsHUgaMOzYSBoaeG7h3Ugc3XhuqV0IGzDoG0gdmnhu4djLlxuIgorCisjOiBidWlsdGluL2djLmM6MzE4CisjLCBjLWZvcm1hdAorbXNnaWQgIlNlZSBcImdpdCBoZWxwIGdjXCIgZm9yIG1hbnVhbCBob3VzZWtlZXBpbmcuXG4iCittc2dzdHIgIlhlbSBcImdpdCBoZWxwIGdjXCIgxJHhu4MgY8OzIGjGsOG7m25nIGThuqtuIGPhu6UgdGjhu4MgduG7gSBjw6FjaCBk4buNbiBk4bq5cCBraG8gZ2l0LlxuIgorCisjOiBidWlsdGluL2djLmM6MzM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnYyBpcyBhbHJlYWR5IHJ1bm5pbmcgb24gbWFjaGluZSAnJXMnIHBpZCAlPFBSSXVNQVg+ICh1c2UgLS1mb3JjZSBpZiBub3QpIgorbXNnc3RyICIiCisiZ2MgxJFhbmcgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiB0csOqbiBtw6F5IOKAnCVz4oCdIHBpZCAlPFBSSXVNQVg+IChkw7luZyAtLWZvcmNlIG7hur91IGtow7RuZyAiCisicGjhuqNpIHRo4bq/KSIKKworIzogYnVpbHRpbi9nYy5jOjM2NAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgdG9vIG1hbnkgdW5yZWFjaGFibGUgbG9vc2Ugb2JqZWN0czsgcnVuICdnaXQgcHJ1bmUnIHRvIHJlbW92ZSB0aGVtLiIKK21zZ3N0ciAiIgorIkPDsyBxdcOhIG5oaeG7gXUgxJHhu5FpIHTGsOG7o25nIHThu7EgZG8ga2jDtG5nIMSRxrDhu6NjIGTDuW5nIMSR4bq/bjsgaMOjeSBjaOG6oXkgbOG7h25oIOKAnGdpdCBwcnVuZeKAnSAiCisixJHhu4MgeMOzYSBi4buPIGNow7puZyDEkWkuIgorCisjOiBidWlsdGluL2dyZXAuYzoyMworbXNnaWQgImdpdCBncmVwIFs8b3B0aW9ucz5dIFstZV0gPHBhdHRlcm4+IFs8cmV2Pi4uLl0gW1stLV0gPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGdyZXAgWzxjw6FjLXTDuXktY2jhu41uPl0gWy1lXSA8beG6q3U+IFs8cmV2PuKApl0gW1stLV0gPMSRxrDhu51uZy1k4bqrbj7igKZdIgorCisjOiBidWlsdGluL2dyZXAuYzoyMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ3JlcDogZmFpbGVkIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJncmVwOiBn4bq3cCBs4buXaSB04bqhbyB0dXnhur9uICh0aHJlYWQpOiAlcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDQxIGJ1aWx0aW4vZ3JlcC5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgY8OieSAoJXMpIgorCisjOiBidWlsdGluL2dyZXAuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRo4buxYyBoaeG7h24gbOG7h25oIGdyZXAgKGzhu41jIHTDrG0pIHThu6sgxJHhu5FpIHTGsOG7o25nIHRodeG7mWMga2nhu4N1ICVzIgorCisjOiBidWlsdGluL2dyZXAuYzo1NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAic3dpdGNoIGAlYycgZXhwZWN0cyBhIG51bWVyaWNhbCB2YWx1ZSIKK21zZ3N0ciAiY2h1eeG7g24gxJHhur9uIOKAnCVj4oCdIGPhuqduIG3hu5l0IGdpw6EgdHLhu4sgYuG6sW5nIHPhu5EiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjU2NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAnJXMnIgorbXNnc3RyICJraMO0bmcgbeG7nyDEkcaw4bujYyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjM4Cittc2dpZCAic2VhcmNoIGluIGluZGV4IGluc3RlYWQgb2YgaW4gdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAidMOsbSB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWMgdGhheSB2w6wgdHJvbmcgY8OieSBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQwCittc2dpZCAiZmluZCBpbiBjb250ZW50cyBub3QgbWFuYWdlZCBieSBnaXQiCittc2dzdHIgInTDrG0gdHJvbmcgbuG7mWkgZHVuZyBraMO0bmcgxJHGsOG7o2MgcXXhuqNuIGzDvSBi4bufaSBnaXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0MgorbXNnaWQgInNlYXJjaCBpbiBib3RoIHRyYWNrZWQgYW5kIHVudHJhY2tlZCBmaWxlcyIKK21zZ3N0ciAidMOsbSBraeG6v20gY8OhYyB04bqtcCB0aW4gxJHGsOG7o2MgdsOgIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSBk4bqldSB24bq/dCIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIgorbXNnc3RyICJjw6FjIHThuq1wIHRpbiBi4buLIGLhu48gcXVhIMSRxrDhu6NjIGNo4buJIMSR4buLbmggdGjDtG5nIHF1YSDigJwuZ2l0aWdub3Jl4oCdIgorCisjOiBidWlsdGluL2dyZXAuYzo2NDcKK21zZ2lkICJzaG93IG5vbi1tYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG5o4buvbmcgZMOybmcga2jDtG5nIGto4bubcCB24bubaSBt4bqrdSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQ5Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAicGjDom4gYmnhu4d0IEhPQS90aMaw4budbmciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MQorbXNnaWQgIm1hdGNoIHBhdHRlcm5zIG9ubHkgYXQgd29yZCBib3VuZGFyaWVzIgorbXNnc3RyICJjaOG7iSBraOG7m3AgbeG6q3UgdOG6oWkgxJHGsOG7nW5nIHJhbmggZ2nhu5tpIHThu6siCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1MworbXNnaWQgInByb2Nlc3MgYmluYXJ5IGZpbGVzIGFzIHRleHQiCittc2dzdHIgInjhu60gbMO9IHThuq1wIHRpbiBuaOG7iyBwaMOibiBuaMawIGzDoCBk4bqhbmcgdsSDbiBi4bqjbiB0aMaw4budbmciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1NQorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAia2jDtG5nIGto4bubcCBt4bqrdSB0cm9uZyBjw6FjIHThuq1wIHRpbiBuaOG7iyBwaMOibiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjU4Cittc2dpZCAicHJvY2VzcyBiaW5hcnkgZmlsZXMgd2l0aCB0ZXh0Y29udiBmaWx0ZXJzIgorbXNnc3RyICJ44butIGzDvSB04bqtcCB0aW4gbmjhu4sgcGjDom4gduG7m2kgY8OhYyBi4buZIGzhu41jIOKAnHRleHRjb2524oCdIgorCisjOiBidWlsdGluL2dyZXAuYzo2NjAKK21zZ2lkICJkZXNjZW5kIGF0IG1vc3QgPGRlcHRoPiBsZXZlbHMiCittc2dzdHIgImdp4bqjbSB4deG7kW5nIMOtdCBuaOG6pXQgbeG7qWMgPHPDonU+IgorCisjOiBidWlsdGluL2dyZXAuYzo2NjQKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAiZMO5bmcgYmnhu4N1IHRo4bupYyBjaMOtbmggcXVpIFBPU0lYIGPDsyBt4bufIHLhu5luZyIKKworIzogYnVpbHRpbi9ncmVwLmM6NjY3Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICJz4butIGThu6VuZyBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkga2nhu4N1IFBPU0lYICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjcwCittc2dpZCAiaW50ZXJwcmV0IHBhdHRlcm5zIGFzIGZpeGVkIHN0cmluZ3MiCittc2dzdHIgImRp4buFbiBk4buLY2ggY8OhYyBt4bqrdSBuaMawIGzDoCBjaHXhu5dpIGPhu5EgxJHhu4tuaCIKKworIzogYnVpbHRpbi9ncmVwLmM6NjczCittc2dpZCAidXNlIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIgorbXNnc3RyICJz4butIGThu6VuZyBiaeG7g3UgdGjhu6ljIGNow61uaCBxdXkgdMawxqFuZyB0aMOtY2ggUGVybCIKKworIzogYnVpbHRpbi9ncmVwLmM6Njc2Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgImhp4buDbiB0aOG7iyBz4buRIGPhu6dhIGTDsm5nIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzcKK21zZ2lkICJkb24ndCBzaG93IGZpbGVuYW1lcyIKK21zZ3N0ciAia2jDtG5nIGhp4buDbiB0aOG7iyB0w6puIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9ncmVwLmM6Njc4Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHTDqm4gdOG6rXAgdGluIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODAKK21zZ2lkICJzaG93IGZpbGVuYW1lcyByZWxhdGl2ZSB0byB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJoaeG7g24gdGjhu4sgdMOqbiB04bqtcCB0aW4gdMawxqFuZyDEkeG7kWkgduG7m2kgdGjGsCBt4bulYyDEkeG7iW5oICh0b3ApIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODIKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyB0w6puIHThuq1wIHRpbiB0aGF5IHbDrCBuaOG7r25nIGTDsm5nIGto4bubcCB24bubaSBt4bqrdSIKKworIzogYnVpbHRpbi9ncmVwLmM6Njg0Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgIsSR4buTbmcgbmdoxKlhIHbhu5tpIC0tZmlsZXMtd2l0aC1tYXRjaGVzIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODcKK21zZ2lkICJzaG93IG9ubHkgdGhlIG5hbWVzIG9mIGZpbGVzIHdpdGhvdXQgbWF0Y2giCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyB0w6puIGNobyBuaOG7r25nIHThuq1wIHRpbiBraMO0bmcga2jhu5twIHbhu5tpIG3huqt1IgorCisjOiBidWlsdGluL2dyZXAuYzo2ODkKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICJ0aMOqbSBOVUwgdsOgbyBzYXUgdMOqbiB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5MQorbXNnaWQgInNob3cgdGhlIG51bWJlciBvZiBtYXRjaGVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBz4buRIGzGsOG7o25nIGto4bubcCB0aGF5IHbDrCBuaOG7r25nIGTDsm5nIGto4bubcCB24bubaSBt4bqrdSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjkyCittc2dpZCAiaGlnaGxpZ2h0IG1hdGNoZXMiCittc2dzdHIgInTDtCBzw6FuZyBwaOG6p24ga2jhu5twIG3huqt1IgorCisjOiBidWlsdGluL2dyZXAuYzo2OTQKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGTDsm5nIHRy4buRbmcgZ2nhu69hIGPDoWMgbOG6p24ga2jhu5twIHThu6sgY8OhYyB04bqtcCB0aW4ga2jDoWMgYmnhu4d0IgorCisjOiBidWlsdGluL2dyZXAuYzo2OTYKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICIiCisiaGnhu4NuIHRo4buLIHTDqm4gdOG6rXAgdGluIG3hu5l0IGzhuqduIHBow61hIHRyw6puIGPDoWMgbOG6p24ga2jhu5twIHThu6sgY8O5bmcgbeG7mXQgdOG6rXAgdGluIgorCisjOiBidWlsdGluL2dyZXAuYzo2OTkKK21zZ2lkICJzaG93IDxuPiBjb250ZXh0IGxpbmVzIGJlZm9yZSBhbmQgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIDxuPiBkw7JuZyBu4buZaSBkdW5nIHBow61hIHRyxrDhu5tjIHbDoCBzYXUgY8OhYyBs4bqnbiBraOG7m3AiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwMgorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyA8bj4gZMOybmcgbuG7mWkgZHVuZyB0csaw4bubYyBraOG7m3AiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwNAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIDxuPiBkw7JuZyBu4buZaSBkdW5nIHNhdSBraOG7m3AiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwNQorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgImThuqFuZyB2aeG6v3QgdOG6r3QgY+G7p2EgLUMgU+G7kCIKKworIzogYnVpbHRpbi9ncmVwLmM6NzA4Cittc2dpZCAic2hvdyBhIGxpbmUgd2l0aCB0aGUgZnVuY3Rpb24gbmFtZSBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGTDsm5nIHbDs2kgdMOqbiBow6BtIHRyxrDhu5tjIGPDoWMgbOG6p24ga2jhu5twIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTAKK21zZ2lkICJzaG93IHRoZSBzdXJyb3VuZGluZyBmdW5jdGlvbiIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGjDoG0gYmFvIHF1YW5oIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTMKK21zZ2lkICJyZWFkIHBhdHRlcm5zIGZyb20gZmlsZSIKK21zZ3N0ciAixJHhu41jIG3huqt1IHThu6sgdOG6rXAtdGluIgorCisjOiBidWlsdGluL2dyZXAuYzo3MTUKK21zZ2lkICJtYXRjaCA8cGF0dGVybj4iCittc2dzdHIgIm1hdGNoIDxt4bqrdT4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNworbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgInThu5UgaOG7o3AgbeG6q3UgxJHGsOG7o2MgY2jhu4kgcmEgduG7m2kgdMO5eSBjaOG7jW4gLWUiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcyOQorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICLEkcawYSByYSBn4bujaSDDvSB24bubaSB0cuG6oW5nIHRow6FpIHRob8OhdCBtw6Aga2jDtG5nIGPDsyBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczMQorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBuaOG7r25nIGPDoWkga2jhu5twIHThu6sgdOG6rXAgdGluIG3DoCBuw7Mga2jhu5twIHRvw6BuIGLhu5kgY8OhYyBt4bqrdSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMzCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6J5IHBow6JuIHTDrWNoIGPDuiBwaMOhcCBjaG8gYmnhu4N1IHRo4bupYyDigJxncmVw4oCdICh0w6xtIGtp4bq/bSkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczNworbXNnaWQgInBhZ2VyIgorbXNnc3RyICJkw6BuIHRyYW5nIgorCisjOiBidWlsdGluL2dyZXAuYzo3MzcKK21zZ2lkICJzaG93IG1hdGNoaW5nIGZpbGVzIGluIHRoZSBwYWdlciIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIGto4bubcCB0cm9uZyB0cmFuZyBnaeG6pXkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjc0MAorbXNnaWQgImFsbG93IGNhbGxpbmcgb2YgZ3JlcCgxKSAoaWdub3JlZCBieSB0aGlzIGJ1aWxkKSIKK21zZ3N0ciAiY2hvIHBow6lwIGfhu41pIGdyZXAoMSkgKGLhu4sgYuG7jyBxdWEgYuG7n2kgbOG6p24gZOG7i2NoIG7DoHkpIgorCisjOiBidWlsdGluL2dyZXAuYzo3NDEgYnVpbHRpbi9zaG93LXJlZi5jOjE4OQorbXNnaWQgInNob3cgdXNhZ2UiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjaCBkw7luZyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODA4Cittc2dpZCAibm8gcGF0dGVybiBnaXZlbi4iCittc2dzdHIgImNoxrBhIGNo4buJIHJhIG3huqt1LiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODY2Cittc2dpZCAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIG9ubHkgd29ya3Mgb24gdGhlIHdvcmt0cmVlIgorbXNnc3RyICItLW9wZW4tZmlsZXMtaW4tcGFnZXIgY2jhu4kgbMOgbSB2aeG7h2MgdHLDqm4gY8OieS1sw6BtLXZp4buHYyIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4LiIKK21zZ3N0ciAiLS1jYWNoZWQgaGF5IC0tdW50cmFja2VkIGtow7RuZyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSAtLW5vLWluZGV4LiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk3Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMuIgorbXNnc3RyICIiCisiLS1uby1pbmRleCBoYXkgLS11bnRyYWNrZWQga2jDtG5nIMSRxrDhu6NjIHPhu60gZOG7pW5nIGPDuW5nIHbhu5tpIGPDoWMgdMO5eSBjaOG7jW4gbGnDqm4gIgorInF1YW4gxJHhur9uIHJldnMuIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDAKK21zZ2lkICItLVtuby1dZXhjbHVkZS1zdGFuZGFyZCBjYW5ub3QgYmUgdXNlZCBmb3IgdHJhY2tlZCBjb250ZW50cy4iCittc2dzdHIgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGtow7RuZyB0aOG7gyBz4butIGThu6VuZyBjaG8gbuG7mWkgZHVuZyBsxrB1IGThuqV1IHbhur90LiIKKworIzogYnVpbHRpbi9ncmVwLmM6OTA4Cittc2dpZCAiYm90aCAtLWNhY2hlZCBhbmQgdHJlZXMgYXJlIGdpdmVuLiIKK21zZ3N0ciAiY+G6oyBoYWkgLS1jYWNoZWQgdsOgIGPDoWMgY8OieSBwaOG6o2kgxJHGsOG7o2MgY2jhu4kgcmEuIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODAKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDxraeG7g3U+XSBbLXddIFstLXBhdGg9PHThuq1wLXRpbj4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8dOG6rXAtdGluPuKApiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjgxCittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIDwgPGxpc3Qtb2YtcGF0aHM+IgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMgPCA8ZGFuaC1zw6FjaC3Ekcaw4budbmctZOG6q24+IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTIgYnVpbHRpbi90YWcuYzo2MTQKK21zZ2lkICJ0eXBlIgorbXNnc3RyICJraeG7g3UiCisKKyM6IGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5MgorbXNnaWQgIm9iamVjdCB0eXBlIgorbXNnc3RyICJraeG7g3UgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTMKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAiZ2hpIMSR4buRaSB0xrDhu6NuZyB2w6BvIGThu68gbGnhu4d1IMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk1Cittc2dpZCAicmVhZCB0aGUgb2JqZWN0IGZyb20gc3RkaW4iCittc2dzdHIgIsSR4buNYyDEkeG7kWkgdMaw4bujbmcgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIHN0ZGluIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTcKK21zZ2lkICJzdG9yZSBmaWxlIGFzIGlzIHdpdGhvdXQgZmlsdGVycyIKK21zZ3N0ciAibMawdSBjw6FjIHThuq1wIHRpbiBtw6AgbsOzIGtow7RuZyBjw7MgY8OhYyBi4buZIGzhu41jIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICIiCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICJjaOG7iSBj4bqnbiBixINtIHLDoWMgbmfhuqt1IG5oacOqbiDEkeG7gyB04bqhbyBt4buZdCDEkeG7kWkgdMaw4bujbmcgaOG7j25nIMSR4buDIG3DoCBn4buhIGzhu5dpIEdpdCIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjk5Cittc2dpZCAicHJvY2VzcyBmaWxlIGFzIGl0IHdlcmUgZnJvbSB0aGlzIHBhdGgiCittc2dzdHIgInjhu60gbMO9IHThuq1wIHRpbiBuaMawIGzDoCBuw7MgxJFhbmcg4bufIHRoxrAgbeG7pWMgbsOgeSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDEKK21zZ2lkICJwcmludCBhbGwgYXZhaWxhYmxlIGNvbW1hbmRzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgZGFuaCBzw6FjaCBjw6FjIGPDonUgbOG7h25oIG5nxrDhu51pIGTDuW5nIGPDsyB0aOG7gyBz4butIGThu6VuZyIKKworIzogYnVpbHRpbi9oZWxwLmM6NDIKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBkYW5oIHPDoWNoIGPDoWMgaMaw4bubbmcgZOG6q24gaOG7r3UgZOG7pW5nIgorCisjOiBidWlsdGluL2hlbHAuYzo0MworbXNnaWQgInNob3cgbWFuIHBhZ2UiCittc2dzdHIgImhp4buDbiB0aOG7iyB0cmFuZyBtYW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0Cittc2dpZCAic2hvdyBtYW51YWwgaW4gd2ViIGJyb3dzZXIiCittc2dzdHIgImhp4buDbiB0aOG7iyBoxrDhu5tuZyBk4bqrbiBz4butIGThu6VuZyB0cm9uZyB0csOsbmggZHV54buHdCB3ZWIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgImhp4buHbiB0cmFuZyBpbmZvIgorCisjOiBidWlsdGluL2hlbHAuYzo1MgorbXNnaWQgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxjb21tYW5kPl0iCittc2dzdHIgImdpdCBoZWxwIFstLWFsbF0gWy0tZ3VpZGVzXSBbLS1tYW4gfCAtLXdlYiB8IC0taW5mb10gWzxs4buHbmg+XSIKKworIzogYnVpbHRpbi9oZWxwLmM6NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGhlbHAgZm9ybWF0ICclcyciCittc2dzdHIgImtow7RuZyBuaOG6rW4gcmEgxJHhu4tuaCBk4bqhbmcgdHLhu6MgZ2nDunAg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjkxCittc2dpZCAiRmFpbGVkIHRvIHN0YXJ0IGVtYWNzY2xpZW50LiIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIGto4bufaSBjaOG6oXkgZW1hY3NjbGllbnQuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMDQKK21zZ2lkICJGYWlsZWQgdG8gcGFyc2UgZW1hY3NjbGllbnQgdmVyc2lvbi4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBwaMOibiB0w61jaCBwaGnDqm4gYuG6o24gZW1hY3NjbGllbnQuIgorCisjOiBidWlsdGluL2hlbHAuYzoxMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1hY3NjbGllbnQgdmVyc2lvbiAnJWQnIHRvbyBvbGQgKDwgMjIpLiIKK21zZ3N0ciAicGhpw6puIGLhuqNuIGPhu6dhIGVtYWNzY2xpZW50IOKAnCVk4oCdIHF1w6EgY8WpICg8IDIyKS4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEzMCBidWlsdGluL2hlbHAuYzoxNTggYnVpbHRpbi9oZWxwLmM6MTY3IGJ1aWx0aW4vaGVscC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnOiAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHRo4buxYyB0aGkg4oCcJXPigJ06ICVzIgorCisjOiBidWlsdGluL2hlbHAuYzoyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiclcyc6IHBhdGggZm9yIHVuc3VwcG9ydGVkIG1hbiB2aWV3ZXIuXG4iCisiUGxlYXNlIGNvbnNpZGVyIHVzaW5nICdtYW4uPHRvb2w+LmNtZCcgaW5zdGVhZC4iCittc2dzdHIgIiIKKyLigJwlc+KAnTogxJHGsOG7nW5nIGThuqtuIGtow7RuZyBo4buXIHRy4bujIGLhu5kgdHLDrG5oIGNoaeG6v3UgbWFuLlxuIgorIkjDo3kgY8OibiBuaOG6r2MgxJHhur9uIHZp4buHYyBz4butIGThu6VuZyDigJxtYW4uPHRvb2w+LmNtZOKAnSDEkeG7gyB0aGF5IHRo4bq/LiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIuKAnCVz4oCdOiBjbWQgKGzhu4duaCkgaOG7lyB0cuG7oyBi4buZIHRyw6xuaCBjaGnhur91IG1hbi5cbiIKKyJIw6N5IGPDom4gbmjhuq9jIMSR4bq/biB2aeG7h2Mgc+G7rSBk4bulbmcg4oCcbWFuLjx0b29sPi5wYXRo4oCdIMSR4buDIHRoYXkgdGjhur8uIgorCisjOiBidWlsdGluL2hlbHAuYzozNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogdW5rbm93biBtYW4gdmlld2VyLiIKK21zZ3N0ciAi4oCcJXPigJ06IGtow7RuZyByw7UgY2jGsMahbmcgdHLDrG5oIHhlbSBtYW4uIgorCisjOiBidWlsdGluL2hlbHAuYzozNzEKK21zZ2lkICJubyBtYW4gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgImtow7RuZyBjw7MgdHLDrG5oIHhlbSB0cuG7oyBnacO6cCBk4bqhbmcgbWFucGFnZSB0aeG6v3AgaOG7o3AgduG7m2kgecOqdSBj4bqndSIKKworIzogYnVpbHRpbi9oZWxwLmM6Mzc5Cittc2dpZCAibm8gaW5mbyB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAia2jDtG5nIGPDsyB0csOsbmggeGVtIHRy4bujIGdpw7pwIGThuqFuZyBpbmZvIHRp4bq/cCBo4bujcCB24bubaSB5w6p1IGPhuqd1IgorCisjOiBidWlsdGluL2hlbHAuYzo0MjgKK21zZ2lkICJEZWZpbmluZyBhdHRyaWJ1dGVzIHBlciBwYXRoIgorbXNnc3RyICLEkOG7i25oIG5naMSpYSBjw6FjIHRodeG7mWMgdMOtbmggY2hvIG3hu5dpIMSRxrDhu51uZyBk4bqrbiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDI5Cittc2dpZCAiRXZlcnlkYXkgR2l0IFdpdGggMjAgQ29tbWFuZHMgT3IgU28iCittc2dzdHIgIk3hu5dpIG5nw6B5IGjhu41jIDIwIGzhu4duaCBHaXQgaGF5IGjGoW4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMAorbXNnaWQgIkEgR2l0IGdsb3NzYXJ5IgorbXNnc3RyICJUaHXhuq10IG5n4buvIGNodXnDqm4gbcO0biBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzMQorbXNnaWQgIlNwZWNpZmllcyBpbnRlbnRpb25hbGx5IHVudHJhY2tlZCBmaWxlcyB0byBpZ25vcmUiCittc2dzdHIgIkNo4buJIMSR4buLbmggY8OhYyB04bqtcCB0aW4ga2jDtG5nIGPhuqduIHRoZW8gZMO1aSIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMyCittc2dpZCAiRGVmaW5pbmcgc3VibW9kdWxlIHByb3BlcnRpZXMiCittc2dzdHIgIsSQ4buLbmggbmdoxKlhIHRodeG7mWMgdMOtbmggbcO0LcSRdW4tY29uIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzMKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIkNo4buJIMSR4buLbmggxJFp4buDbSB4w6l0IGR1eeG7h3QgdsOgIHbDuW5nIGNobyBHaXQiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQzNAorbXNnaWQgIkEgdHV0b3JpYWwgaW50cm9kdWN0aW9uIHRvIEdpdCAoZm9yIHZlcnNpb24gMS41LjEgb3IgbmV3ZXIpIgorbXNnc3RyICJIxrDhu5tuZyBk4bqrbiBjw6FjaCBkw7luZyBHaXQg4bufIG3hu6ljIGPGoSBi4bqjbiAoYuG6o24gMS41LjEgaGF5IG3hu5tpIGjGoW4pIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzUKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgIlThu5VuZyBxdWFuIHbhu4EgbHXhu5NuZyBjw7RuZyB2aeG7h2Mga2h1eeG6v24gbmdo4buLIG7Dqm4gZMO5bmcgduG7m2kgR2l0LiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQ3Cittc2dpZCAiVGhlIGNvbW1vbiBHaXQgZ3VpZGVzIGFyZTpcbiIKK21zZ3N0ciAiQ8OhYyBjaOG7iSBk4bqrbiBjaHVuZyB24buBIGPDoWNoIGTDuW5nIEdpdCBsw6A6XG4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2OCBidWlsdGluL2hlbHAuYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgImPDoWNoIGTDuW5nOiAlcyVzIgorCisjOiBidWlsdGluL2hlbHAuYzo1MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYGdpdCAlcycgaXMgYWxpYXNlZCB0byBgJXMnIgorbXNnc3RyICLigJxnaXQgJXPigJ0gxJHGsOG7o2MgxJHhurd0IGLDrSBkYW5oIHRow6BuaCDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCB0eXBlIG1pc21hdGNoIGF0ICVzIgorbXNnc3RyICJraeG7g3UgxJHhu5FpIHTGsOG7o25nIGtow7RuZyBraOG7m3AgdOG6oWkgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJkaWQgbm90IHJlY2VpdmUgZXhwZWN0ZWQgb2JqZWN0ICVzIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgduG7gSDEkeG7kWkgdMaw4bujbmcgY+G6p24gJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIyNQorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJXM6IGV4cGVjdGVkIHR5cGUgJXMsIGZvdW5kICVzIgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgJXM6IGPhuqduIGtp4buDdSAlcyBuaMawbmcgbOG6oWkgbmjhuq1uIMSRxrDhu6NjICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gImtow7RuZyB0aOG7gyDEkWnhu4FuIHRow6ptIHbDoG8gJWQgYnl0ZSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6Mjc3Cittc2dpZCAiZWFybHkgRU9GIgorbXNnc3RyICJn4bq3cCBr4bq/dCB0aMO6YyB04bqtcCB0aW4gRU9GIHF1w6Egc+G7m20iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI3OAorbXNnaWQgInJlYWQgZXJyb3Igb24gaW5wdXQiCittc2dzdHIgImzhu5dpIMSR4buNYyDhu58gxJHhuqd1IHbDoG8iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MAorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICJz4butIGThu6VuZyBuaGnhu4F1IGjGoW4gc+G7kSBsxrDhu6NuZyBieXRlIG3DoCBuw7Mgc+G6tW4gY8OzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyOTcKK21zZ2lkICJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IgorbXNnc3RyICJnw7NpIHF1w6EgbOG7m24gc28gduG7m2kgxJHhu4tuaCBuZ2jEqWEgaGnhu4duIHThuqFpIGPhu6dhIGtp4buDdSBvZmZfdCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG3hu58gcGFja2ZpbGUg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMzMgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICJjaOG7ryBrw70gY2hvIGfDs2kga2jDtG5nIGto4bubcCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzM0CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgdmVyc2lvbiAlPFBSSXUzMj4gdW5zdXBwb3J0ZWQiCittc2dzdHIgImtow7RuZyBo4buXIHRy4bujIHBoacOqbiBi4bqjbiBnw7NpICU8UFJJdTMyPiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MzUyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzIGJhZCBvYmplY3QgYXQgb2Zmc2V0ICVsdTogJXMiCittc2dzdHIgImfDs2kgY8OzIMSR4buRaSB0xrDhu6NuZyBzYWkga2hv4bqjbmcgYsO5IChvZmZzZXQpICVsdTogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjQ3MworIywgYy1mb3JtYXQKK21zZ2lkICJpbmZsYXRlIHJldHVybmVkICVkIgorbXNnc3RyICJ44bqjIG7DqW4gdHLhuqMgduG7gSAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTIyCittc2dpZCAib2Zmc2V0IHZhbHVlIG92ZXJmbG93IGZvciBkZWx0YSBiYXNlIG9iamVjdCIKK21zZ3N0ciAidHLDoG4gZ2nDoSB0cuG7iyBraG/huqNuZyBiw7kgY2hvIMSR4buRaSB0xrDhu6NuZyBkZWx0YSBjxqEgc+G7nyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTMwCittc2dpZCAiZGVsdGEgYmFzZSBvZmZzZXQgaXMgb3V0IG9mIGJvdW5kIgorbXNnc3RyICJraG/huqNuZyBiw7kgY8ahIHPhu58gY2hvIGRlbHRhIG7hurFtIG5nb8OgaSBwaOG6oW0gdmkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjUzOAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIG9iamVjdCB0eXBlICVkIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IGtp4buDdSDEkeG7kWkgdMaw4bujbmcgJWQiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU2OQorbXNnaWQgImNhbm5vdCBwcmVhZCBwYWNrIGZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBjaOG6oXkgaMOgbSBwcmVhZCBjaG8gdOG6rXAgdGluIGfDs2kiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICJwcmVtYXR1cmUgZW5kIG9mIHBhY2sgZmlsZSwgJWx1IGJ5dGUgbWlzc2luZyIKK21zZ2lkX3BsdXJhbCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlcyBtaXNzaW5nIgorbXNnc3RyWzBdICJ04bqtcCB0aW4gZ8OzaSBi4buLIGvhur90IHRow7pjIHPhu5ttLCB0aGnhur91ICVsdSBieXRlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTcKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAic+G7sSBtw6J1IHRodeG6q24geOG6oyBuw6luIG5naGnDqm0gdHLhu41uZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQzIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0OSBidWlsdGluL2luZGV4LXBhY2suYzo3NzIKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgwNiBidWlsdGluL2luZGV4LXBhY2suYzo4MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU0hBMSBDT0xMSVNJT04gRk9VTkQgV0lUSCAlcyAhIgorbXNnc3RyICJT4buwIFZBIENI4bqgTSBTSEExIMSQw4MgWOG6olkgUkEgVuG7mkkgJXMhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NDYgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNjIKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgZXhpc3Rpbmcgb2JqZWN0ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIMSR4buRaSB0xrDhu6NuZyDEkcOjIHThu5NuIHThuqFpICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIGJsb2Iga2jDtG5nIGjhu6NwIGzhu4cgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkICVzIgorbXNnc3RyICIlcyBraMO0bmcgaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQzCittc2dpZCAiRXJyb3IgaW4gb2JqZWN0IgorbXNnc3RyICJM4buXaSB0cm9uZyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjg0NQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYWxsIGNoaWxkIG9iamVjdHMgb2YgJXMgYXJlIHJlYWNoYWJsZSIKK21zZ3N0ciAiS2jDtG5nIHBo4bqjaSB04bqldCBj4bqjIGPDoWMgxJHhu5FpIHTGsOG7o25nIGNvbiBj4bunYSAlcyBsw6AgY8OzIHRo4buDIHbhu5tpIHThu5tpIMSRxrDhu6NjIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo5MTcgYnVpbHRpbi9pbmRleC1wYWNrLmM6OTQ4Cittc2dpZCAiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgw6FwIGThu6VuZyBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICLEkGFuZyBuaOG6rW4gduG7gSBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIkluZGV4aW5nIG9iamVjdHMiCittc2dzdHIgIkPDoWMgxJHhu5FpIHTGsOG7o25nIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE1MAorbXNnaWQgInBhY2sgaXMgY29ycnVwdGVkIChTSEExIG1pc21hdGNoKSIKK21zZ3N0ciAiZ8OzaSBi4buLIHNhaSBo4buPbmcgKFNIQTEga2jDtG5nIGto4bubcCkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTUKK21zZ2lkICJjYW5ub3QgZnN0YXQgcGFja2ZpbGUiCittc2dzdHIgImtow7RuZyB0aOG7gyBs4bqleSB0aMO0bmcgdGluIHRo4buRbmcga8OqIHBhY2tmaWxlIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU4Cittc2dpZCAicGFjayBoYXMganVuayBhdCB0aGUgZW5kIgorbXNnc3RyICJwYWNrIGPDsyBwaOG6p24gdGjhu6thIOG7nyBjdeG7kWkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNjkKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IGluIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorbXNnc3RyICJs4buZbiB44buZbiBoxqFuIGPhuqMgxJFpw6puIHLhu5Mga2hpIGNo4bqheSBow6BtIHBhcnNlX3BhY2tfb2JqZWN0cygpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTk0Cittc2dpZCAiUmVzb2x2aW5nIGRlbHRhcyIKK21zZ3N0ciAixJBhbmcgcGjDom4gZ2nhuqNpIGPDoWMgZGVsdGEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdHV54bq/bjogJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNDcKK21zZ2lkICJjb25mdXNpb24gYmV5b25kIGluc2FuaXR5IgorbXNnc3RyICJs4buZbiB44buZbiBoxqFuIGPhuqMgxJFpw6puIHLhu5MiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tcGxldGVkIHdpdGggJWQgbG9jYWwgb2JqZWN0cyIKK21zZ3N0ciAixJHhuqd5IMSR4bunIHbhu5tpICVkIMSR4buRaSB0xrDhu6NuZyBu4buZaSBi4buZIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICJU4buVbmcga2nhu4NtIHRyYSB0YWlsIGtow7RuZyBuaMawIG1vbmcgxJHhu6NpIGNobyAlcyAoxJHEqWEgaOG7j25nPykiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YSIKK21zZ2lkX3BsdXJhbCAicGFjayBoYXMgJWQgdW5yZXNvbHZlZCBkZWx0YXMiCittc2dzdHJbMF0gImfDs2kgY8OzICVkIGRlbHRhIGNoxrBhIMSRxrDhu6NjIGdp4bqjaSBxdXnhur90IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICJraMO0bmcgdGjhu4MgeOG6oyBuw6luIMSR4buRaSB0xrDhu6NuZyBu4buRaSB0aMOqbSAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMzY3CisjLCBjLWZvcm1hdAorbXNnaWQgImxvY2FsIG9iamVjdCAlcyBpcyBjb3JydXB0IgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgbuG7mWkgYuG7mSAlcyBi4buLIGjhu49uZyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5MQorbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICJn4bq3cCBs4buXaSB0cm9uZyBraGkgxJHDs25nIHThuq1wIHRpbiBnw7NpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDA0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCB3cml0ZSBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB04bqtcCB0aW4gZ2nhu68gbOG6oWkg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNsb3NlIHdyaXR0ZW4ga2VlcCBmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkcOzbmcgdOG6rXAgdGluIGdp4buvIGzhuqFpIMSRw6MgxJHGsOG7o2MgZ2hpIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDI1Cittc2dpZCAiY2Fubm90IHN0b3JlIHBhY2sgZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzGsHUgdOG6rXAgdGluIGfDs2kiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzYKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzGsHUgdHLhu68gdOG6rXAgdGluIGdoaSBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQ2OQorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorbXNnc3RyICJzYWkgcGFjay5pbmRleHZlcnNpb249JTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbnVtYmVyIG9mIHRocmVhZHMgc3BlY2lmaWVkICglZCkiCittc2dzdHIgInPhu5EgdHV54bq/biBjaOG7iSByYSBraMO0bmcgaOG7o3AgbOG7hyAoJWQpIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDc5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2NjMKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGhyZWFkcyBzdXBwb3J0LCBpZ25vcmluZyAlcyIKK21zZ3N0ciAia2jDtG5nIGjhu5cgdHLhu6MgxJFhIHR1eeG6v24sIGLhu48gcXVhICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgZmlsZSAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gZ8OzaSDEkcOjIHPhurVuIGPDsyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgb3BlbiBleGlzdGluZyBwYWNrIGlkeCBmaWxlIGZvciAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbeG7nyB04bqtcCB0aW4gaWR4IGPhu6dhIGfDs2kgY2hvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTg2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vbiBkZWx0YTogJWQgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJub24gZGVsdGE6ICVkIG9iamVjdHMiCittc2dzdHJbMF0gImtow7RuZyBkZWx0YTogJWQgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0IgorbXNnaWRfcGx1cmFsICJjaGFpbiBsZW5ndGggPSAlZDogJWx1IG9iamVjdHMiCittc2dzdHJbMF0gImNoaeG7gXUgZMOgaSB4w61jaCA9ICVkOiAlbHUgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjIzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIktow7RuZyB0aOG7gyBxdWF5IGzhuqFpIGN3ZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY3NSBidWlsdGluL2luZGV4LXBhY2suYzoxNjc4CisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjkwIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICIlcyBzYWkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MDgKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiLS1maXgtdGhpbiBraMO0bmcgdGjhu4MgxJHGsOG7o2MgZMO5bmcgbcOgIGtow7RuZyBjw7MgLS1zdGRpbiIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcxMiBidWlsdGluL2luZGV4LXBhY2suYzoxNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2tmaWxlIG5hbWUgJyVzJyBkb2VzIG5vdCBlbmQgd2l0aCAnLnBhY2snIgorbXNnc3RyICJ0w6puIHThuq1wIHRpbiB04bqtcCB0aW4gZ8OzaSDigJwlc+KAnSBraMO0bmcgxJHGsOG7o2Mga+G6v3QgdGjDumMgYuG6sW5nIMSRdcO0aSDigJwucGFja+KAnSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyOQorbXNnaWQgIi0tdmVyaWZ5IHdpdGggbm8gcGFja2ZpbGUgbmFtZSBnaXZlbiIKK21zZ3N0ciAiZMO5bmcgdMO5eSBjaOG7jW4gLS12ZXJpZnkgbcOgIGtow7RuZyDEkcawYSByYSB0w6puIHBhY2tmaWxlIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbWFrZSAlcyB3cml0YWJsZSBieSBncm91cCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzDoG0gJXMgxJHGsOG7o2MgZ2hpIGLhu59pIG5ow7NtIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIG5hbWUgJXMiCittc2dzdHIgInTDqm4gbeG6q3UgZMOgaSBt4buZdCBjw6FjaCDEkWnDqm4gcuG7kyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogduG7gSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgdGVtcGxhdGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogduG7gSBt4bqrdSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW5kaXIgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG9wZW5kaXIoKSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWRsaW5rICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyByZWFkbGluayDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgc3ltbGluayAlcyIKK21zZ3N0ciAibGnDqm4ga+G6v3QgbeG7gW0gZMOgaSBt4buZdCBjw6FjaCDEkWnDqm4gcuG7kyAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIGxpw6puIGvhur90IG3hu4FtIChzeW1saW5rKSDigJwlc+KAnSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTA3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjb3B5ICclcycgdG8gJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHNhbyBjaMOpcCDigJwlc+KAnSBzYW5nIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaWdub3JpbmcgdGVtcGxhdGUgJXMiCittc2dzdHIgIsSRYW5nIGzhu50gxJFpIG3huqt1IOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lbHkgbG9uZyB0ZW1wbGF0ZSBwYXRoICVzIgorbXNnc3RyICLEkcaw4budbmcgZOG6q24gbeG6q3Ug4oCcJXPigJ0gZMOgaSBt4buZdCBjw6FjaCDEkWnDqm4gcuG7kyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgJXMiCittc2dzdHIgImPDoWMgbeG6q3Uga2jDtG5nIMSRxrDhu6NjIHTDrG0gdGjhuqV5ICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxNTgKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IGNvcHlpbmcgdGVtcGxhdGVzIG9mIGEgd3JvbmcgZm9ybWF0IHZlcnNpb24gJWQgZnJvbSAnJXMnIgorbXNnc3RyICJraMO0bmcgc2FvIGNow6lwIGPDoWMgbeG6q3UgY+G7p2EgcGhpw6puIGLhuqNuIHNhaSDEkeG7i25oIGThuqFuZyAlZCB04burIOKAnCVz4oCdIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5zYW5lIGdpdCBkaXJlY3RvcnkgJXMiCittc2dzdHIgInRoxrAgbeG7pWMgZ2l0IMSRacOqbiBy4buTICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNDQgYnVpbHRpbi9pbml0LWRiLmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGFscmVhZHkgZXhpc3RzIgorbXNnc3RyICIlcyDEkcOjIGPDsyB04burIHRyxrDhu5tjIHLhu5NpIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNzUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGhhbmRsZSBmaWxlIHR5cGUgJWQiCittc2dzdHIgImtow7RuZyB0aOG7gyB44butIGzDvSAoaGFuZGxlKSB04bqtcCB0aW4ga2nhu4N1ICVkIgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgImtow7RuZyBkaSBjaHV54buDbiDEkcaw4bujYyAlcyB2w6BvICVzIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICclcycgaXMgZWl0aGVyICJSZWluaXRpYWxpemVkCisjLiBleGlzdGluZyIgb3IgIkluaXRpYWxpemVkIGVtcHR5IiwgdGhlIHNlY29uZCAiIHNoYXJlZCIgb3IKKyMuICIiLCBhbmQgdGhlIGxhc3QgJyVzJXMnIGlzIHRoZSB2ZXJiYXRpbSBkaXJlY3RvcnkgbmFtZS4KKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyVzIEdpdCByZXBvc2l0b3J5IGluICVzJXNcbiIKK21zZ3N0ciAiJXMlcyBraG8gR2l0IHRyb25nICVzJXNcbiIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NDM1Cittc2dpZCAiUmVpbml0aWFsaXplZCBleGlzdGluZyIKK21zZ3N0ciAiS2jhu59pIHThuqFvIGzhuqFpIMSRw6Mgc+G6tW4gY8OzIHLhu5NpIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MzUKK21zZ2lkICJJbml0aWFsaXplZCBlbXB0eSIKK21zZ3N0ciAiS2jhu59pIHThuqFvIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MzYKK21zZ2lkICIgc2hhcmVkIgorbXNnc3RyICIgxJHDoyBjaGlhIHPhursiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQ4MworbXNnaWQgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGVtcGxhdGUtZGlyZWN0b3J5Pl0gWy0tIgorInNoYXJlZFs9PHBlcm1pc3Npb25zPl1dIFs8ZGlyZWN0b3J5Pl0iCittc2dzdHIgIiIKKyJnaXQgaW5pdCBbLXEgfCAtLXF1aWV0XSBbLS1iYXJlXSBbLS10ZW1wbGF0ZT08dGjGsC1t4bulYy104bqhbT5dIFstLXNoYXJlZFs9PGPDoWMtIgorInF1eeG7gW4+XV0gW3RoxrAtbeG7pWNdIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MDYKK21zZ2lkICJwZXJtaXNzaW9ucyIKK21zZ3N0ciAiY8OhYyBxdXnhu4FuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1MDcKK21zZ2lkICJzcGVjaWZ5IHRoYXQgdGhlIGdpdCByZXBvc2l0b3J5IGlzIHRvIGJlIHNoYXJlZCBhbW9uZ3N0IHNldmVyYWwgdXNlcnMiCittc2dzdHIgImNo4buJIHJhIGPDoWkgbcOgIGtobyBnaXQgxJHGsOG7o2MgY2hpYSBz4bq7IGdp4buvYSBuaGnhu4F1IG5nxrDhu51pIGTDuW5nIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NDEgYnVpbHRpbi9pbml0LWRiLmM6NTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBta2RpciAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIG1rZGlyICh04bqhbyB0aMawIG3hu6VjKTogJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU1MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hkaXIgdG8gJXMiCittc2dzdHIgImtow7RuZyB0aOG7gyBjaGRpciAoY2h1eeG7g24gxJHhu5VpIHRoxrAgbeG7pWMpIHNhbmcgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU3MQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiJXMgKG9yIC0td29yay10cmVlPTxkaXJlY3Rvcnk+KSBub3QgYWxsb3dlZCB3aXRob3V0IHNwZWNpZnlpbmcgJXMgKG9yIC0tZ2l0LSIKKyJkaXI9PGRpcmVjdG9yeT4pIgorbXNnc3RyICIiCisiJXMgKGhv4bq3YyAtLXdvcmstdHJlZT08dGjGsC1t4bulYz4pIGtow7RuZyBjaG8gcGjDqXAga2jDtG5nIGNo4buJIMSR4buLbmggJXMgKGhv4bq3YyAtLWdpdC0iCisiZGlyPTx0aMawLW3hu6VjPikiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjU5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgYWNjZXNzIHdvcmsgdHJlZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdHJ1eSBj4bqtcCBjw6J5ICh0cmVlKSBsw6BtIHZp4buHYyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoxNQorbXNnaWQgIiIKKyJnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIFstLXRyaW0tZW1wdHldIFsoLS10cmFpbGVyIDx0b2tlbj5bKD18Oik8dmFsdWU+XSkuLi5dICIKKyJbPGZpbGU+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgPHRo4bq7PlsoPXw6KTxnacOhLXRy4buLPl0p4oCmXSAiCisiWzx04bqtcC10aW4+4oCmXSIKKworIzogYnVpbHRpbi9pbnRlcnByZXQtdHJhaWxlcnMuYzoyNQorbXNnaWQgInRyaW0gZW1wdHkgdHJhaWxlcnMiCittc2dzdHIgImLhu5kgZMOyIHbhur90IGPhuq90IGLhu48gcGjhuqduIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI2Cittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAiYuG7mSBkw7IgduG6v3QiCisKKyM6IGJ1aWx0aW4vaW50ZXJwcmV0LXRyYWlsZXJzLmM6MjcKK21zZ2lkICJ0cmFpbGVyKHMpIHRvIGFkZCIKK21zZ3N0ciAiYuG7mSBkw7IgduG6v3QgY+G6p24gdGjDqm0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDMKK21zZ2lkICJnaXQgbG9nIFs8b3B0aW9ucz5dIFs8cmV2aXNpb24tcmFuZ2U+XSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbG9nIFs8Y8OhYy10w7l5LWNo4buNbj5dIFs8dsO5bmcteGVtLXjDqXQ+XSBbWy0tXSA8xJHGsOG7nW5nLWThuqtuPuKApl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDQKK21zZ2lkICJnaXQgc2hvdyBbPG9wdGlvbnM+XSA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHNob3cgWzxjw6FjLXTDuXktY2jhu41uPl0gPMSR4buRaS10xrDhu6NuZz7igKYiCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAtLWRlY29yYXRlIG9wdGlvbjogJXMiCittc2dzdHIgInTDuXkgY2jhu41uLS1kZWNvcmF0ZSBraMO0bmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMxCittc2dpZCAic3VwcHJlc3MgZGlmZiBvdXRwdXQiCittc2dzdHIgImNo4bq3biBt4buNaSBr4bq/dCB4deG6pXQgdOG7qyBkaWZmIgorCisjOiBidWlsdGluL2xvZy5jOjEzMgorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbcOjIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzCittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgIlPhu60gZOG7pW5nIHThuq1wIHRpbiDDoW5oIHjhuqEgdGjGsCIKKworIzogYnVpbHRpbi9sb2cuYzoxMzQKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICJjw6FjIHTDuXkgY2jhu41uIHRyYW5nIHRyw60iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3Cittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIljhu60gbMO9IGNo4buJIGTDsm5nIHbDuW5nIG4sbSB0cm9uZyB04bqtcCB0aW4sIHTDrW5oIHThu6sgMSIKKworIzogYnVpbHRpbi9sb2cuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICJL4bq/dCB4deG6pXQgY3Xhu5FpIGPDuW5nOiAlZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiBzYWkgdOG6rXAgdGluIgorCisjOiBidWlsdGluL2xvZy5jOjQ3OSBidWlsdGluL2xvZy5jOjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBvYmplY3QgJXMiCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgxJHhu5FpIHTGsOG7o25nICVzIgorCisjOiBidWlsdGluL2xvZy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHR5cGU6ICVkIgorbXNnc3RyICJLaMO0bmcgbmjhuq1uIHJhIGtp4buDdTogJWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NzE0Cittc2dpZCAiZm9ybWF0LmhlYWRlcnMgd2l0aG91dCB2YWx1ZSIKK21zZ3N0ciAiZm9ybWF0LmhlYWRlcnMga2jDtG5nIGPDsyBnacOhIHRy4buLIGPhu6UgdGjhu4MiCisKKyM6IGJ1aWx0aW4vbG9nLmM6Nzk4Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICJ0w6puIGPhu6dhIHRoxrAgbeG7pWMga+G6v3QgeHXhuqV0IHF1w6EgZMOgaSIKKworIzogYnVpbHRpbi9sb2cuYzo4MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gcGF0Y2ggZmlsZSAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIG3hu58gdOG6rXAgdGluIG1p4bq/bmcgdsOhOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo4MjgKK21zZ2lkICJOZWVkIGV4YWN0bHkgb25lIHJhbmdlLiIKK21zZ3N0ciAiQ+G6p24gY2jDrW5oIHjDoWMgbeG7mXQgdsO5bmcuIgorCisjOiBidWlsdGluL2xvZy5jOjgzOAorbXNnaWQgIk5vdCBhIHJhbmdlLiIKK21zZ3N0ciAiS2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgdsO5bmcuIgorCisjOiBidWlsdGluL2xvZy5jOjk0NAorbXNnaWQgIkNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIuKAnENvdmVyIGxldHRlcuKAnSBj4bqnbiBjaG8gxJHhu4tuaCBk4bqhbmcgdGjGsCIKKworIzogYnVpbHRpbi9sb2cuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgImluLXJlcGx5LXRvIMSRacOqbiBy4buTOiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMDUxCittc2dpZCAiZ2l0IGZvcm1hdC1wYXRjaCBbPG9wdGlvbnM+XSBbPHNpbmNlPiB8IDxyZXZpc2lvbi1yYW5nZT5dIgorbXNnc3RyICJnaXQgZm9ybWF0LXBhdGNoIFs8Y8OhYy10w7l5LWNo4buNbj5dIFs8a+G7gy104burPiB8IDx2w7luZy14ZW0teMOpdD5dIgorCisjOiBidWlsdGluL2xvZy5jOjEwOTYKK21zZ2lkICJUd28gb3V0cHV0IGRpcmVjdG9yaWVzPyIKK21zZ3N0ciAiSGFpIHRoxrAgbeG7pWMga+G6v3QgeHXhuqV0PyIKKworIzogYnVpbHRpbi9sb2cuYzoxMjExCittc2dpZCAidXNlIFtQQVRDSCBuL21dIGV2ZW4gd2l0aCBhIHNpbmdsZSBwYXRjaCIKK21zZ3N0ciAiZMO5bmcgW1BBVENIIG4vbV0gbmdheSBj4bqjIHbhu5tpIG1p4bq/bmcgdsOhIMSRxqFuIgorCisjOiBidWlsdGluL2xvZy5jOjEyMTQKK21zZ2lkICJ1c2UgW1BBVENIXSBldmVuIHdpdGggbXVsdGlwbGUgcGF0Y2hlcyIKK21zZ3N0ciAiZMO5bmcgW1bDgV0gbmdheSBj4bqjIHbhu5tpIGPDoWMgbWnhur9uZyB2w6EgcGjhu6ljIHThuqFwIgorCisjOiBidWlsdGluL2xvZy5jOjEyMTgKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG1p4bq/bmcgdsOhIHJhIMSR4bqndSByYSBjaHXhuqluIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjAKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAidOG6oW8gYsOsIHRoxrAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMgorbXNnaWQgInVzZSBzaW1wbGUgbnVtYmVyIHNlcXVlbmNlIGZvciBvdXRwdXQgZmlsZSBuYW1lcyIKK21zZ3N0ciAic+G7rSBk4bulbmcgY2jhu5dpIGTDo3kgc+G7kSBk4bqhbmcgxJHGoW4gZ2nhuqNuIGNobyB0w6puIHThuq1wLXRpbiB4deG6pXQgcmEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyMworbXNnaWQgInNmeCIKK21zZ3N0ciAic2Z4IgorCisjOiBidWlsdGluL2xvZy5jOjEyMjQKK21zZ2lkICJ1c2UgPHNmeD4gaW5zdGVhZCBvZiAnLnBhdGNoJyIKK21zZ3N0ciAic+G7rSBk4bulbmcgPHNmeD4gdGhheSBjaG8g4oCcLnBhdGNo4oCdIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjYKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICJi4bqvdCDEkeG6p3UgxJHDoW5oIHPhu5EgbWnhur9uZyB2w6EgdOG7qyA8bj4gdGhheSB2w6wgMSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjI4Cittc2dpZCAibWFyayB0aGUgc2VyaWVzIGFzIE50aCByZS1yb2xsIgorbXNnc3RyICLEkcOhbmggZOG6pXUgY2h14buXaSBu4buRaSB0aeG6v3AgZOG6oW5nIHRo4bupLU4gcmUtcm9sbCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjMwCittc2dpZCAiVXNlIFs8cHJlZml4Pl0gaW5zdGVhZCBvZiBbUEFUQ0hdIgorbXNnc3RyICJEw7luZyBbPHRp4buBbi104buRPl0gdGhheSBjaG8gW1bDgV0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzMworbXNnaWQgInN0b3JlIHJlc3VsdGluZyBmaWxlcyBpbiA8ZGlyPiIKK21zZ3N0ciAibMawdSBjw6FjIHThuq1wIHRpbiBr4bq/dCBxdeG6oyB0cm9uZyA8dC5t4bulYz4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIzNgorbXNnaWQgImRvbid0IHN0cmlwL2FkZCBbUEFUQ0hdIgorbXNnc3RyICJraMO0bmcgc3RyaXAvYWRkIFtWw4FdIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzkKK21zZ2lkICJkb24ndCBvdXRwdXQgYmluYXJ5IGRpZmZzIgorbXNnc3RyICJraMO0bmcga+G6v3QgeHXhuqV0IGRpZmYgKG5o4buvbmcga2jDoWMgYmnhu4d0KSBuaOG7iyBwaMOibiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQxCittc2dpZCAiZG9uJ3QgaW5jbHVkZSBhIHBhdGNoIG1hdGNoaW5nIGEgY29tbWl0IHVwc3RyZWFtIgorbXNnc3RyICJraMO0bmcgYmFvIGfhu5NtIG1p4bq/bmcgdsOhIGto4bubcCB24bubaSBt4buZdCBs4bqnbiBjaHV54buDbiBnaWFvIHRoxrDhu6NuZyBuZ3Xhu5NuIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDMKK21zZ2lkICJzaG93IHBhdGNoIGZvcm1hdCBpbnN0ZWFkIG9mIGRlZmF1bHQgKHBhdGNoICsgc3RhdCkiCittc2dzdHIgImhp4buDbiB0aOG7iyDEkeG7i25oIGThuqFuZyBtaeG6v25nIHbDoSB0aGF5IHbDrCBt4bq3YyDEkeG7i25oIChtaeG6v25nIHbDoSArIHRo4buRbmcga8OqKSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ1Cittc2dpZCAiTWVzc2FnaW5nIgorbXNnc3RyICJM4budaSBuaOG6r24iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0NgorbXNnaWQgImhlYWRlciIKK21zZ3N0ciAixJHhuqd1IMSR4buBIHRoxrAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0NworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgInRow6ptIMSR4bqndSDEkeG7gSB0aMawIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDggYnVpbHRpbi9sb2cuYzoxMjUwCittc2dpZCAiZW1haWwiCittc2dzdHIgInRoxrAgxJFp4buHbiB04butIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDgKK21zZ2lkICJhZGQgVG86IGhlYWRlciIKK21zZ3N0ciAidGjDqm0gVG86IMSR4bqndSDEkeG7gSB0aMawIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTAKK21zZ2lkICJhZGQgQ2M6IGhlYWRlciIKK21zZ3N0ciAidGjDqm0gQ2M6IMSR4bqndSDEkeG7gSB0aMawIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTIKK21zZ2lkICJpZGVudCIKK21zZ3N0ciAidGjhu6V0IGzhu4EiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MworbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgIiIKKyLEkeG6t3Qg4oCcxJDhu4thIGNo4buJIGfhu61p4oCdIHRow6BuaCA8dGjhu6UgbOG7gT4gKGhv4bq3YyB0aOG7pXQgbOG7gSBuZ8aw4budaSBjb21taXQgbuG6v3UgYuG7jyBxdcOqbikiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgIm1lc3NhZ2UtaWQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NgorbXNnaWQgIm1ha2UgZmlyc3QgbWFpbCBhIHJlcGx5IHRvIDxtZXNzYWdlLWlkPiIKK21zZ3N0ciAiZMO5bmcgdGjGsCDEkeG6p3UgdGnDqm4gxJHhu4MgdHLhuqMgbOG7nWkgPG1lc3NhZ2UtaWQ+IgorCisjOiBidWlsdGluL2xvZy5jOjEyNTcgYnVpbHRpbi9sb2cuYzoxMjYwCittc2dpZCAiYm91bmRhcnkiCittc2dzdHIgInJhbmggZ2nhu5tpIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTgKK21zZ2lkICJhdHRhY2ggdGhlIHBhdGNoIgorbXNnc3RyICLEkcOtbmgga8OobSBtaeG6v25nIHbDoSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjYxCittc2dpZCAiaW5saW5lIHRoZSBwYXRjaCIKK21zZ3N0ciAiZMO5bmcgbWnhur9uZyB2w6EgbMOgbSBu4buZaSBkdW5nIgorCisjOiBidWlsdGluL2xvZy5jOjEyNjUKK21zZ2lkICJlbmFibGUgbWVzc2FnZSB0aHJlYWRpbmcsIHN0eWxlczogc2hhbGxvdywgZGVlcCIKK21zZ3N0ciAiY2hvIHBow6lwIGx14buTbmcgbOG7nWkgbmjhuq9uLCBraeG7g3U6IOKAnHNoYWxsb3figJ0sIOKAnGRlZXDigJ0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI2NworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAiY2jhu68ga8O9IgorCisjOiBidWlsdGluL2xvZy5jOjEyNjgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUiCittc2dzdHIgInRow6ptIGNo4buvIGvDvSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjcwCittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICJ0aMOqbSBjaOG7ryBrw70gdOG7qyBt4buZdCB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI3MQorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgImtow7RuZyBoaeG7g24gdGjhu4sgY8OhYyB0w6puIHThuq1wIHRpbiBj4bunYSBtaeG6v25nIHbDoSIKKworIzogYnVpbHRpbi9sb2cuYzoxMzYwCittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItbiB2w6AgIC1rIGxv4bqhaSB04burIGzhuqtuIG5oYXUuIgorCisjOiBidWlsdGluL2xvZy5jOjEzNjIKK21zZ2lkICItLXN1YmplY3QtcHJlZml4IGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiLS1zdWJqZWN0LXByZWZpeCB2w6AgLWsgeHVuZyBraOG6r2MgbmhhdS4iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3MAorbXNnaWQgIi0tbmFtZS1vbmx5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tbmFtZS1vbmx5IGtow7RuZyBo4bujcCBsw70iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3MgorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLXN0YXR1cyBraMO0bmcgaOG7o3AgbMO9IgorCisjOiBidWlsdGluL2xvZy5jOjEzNzQKK21zZ2lkICItLWNoZWNrIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tY2hlY2sga2jDtG5nIGjhu6NwIGzDvSIKKworIzogYnVpbHRpbi9sb2cuYzoxMzk3Cittc2dpZCAic3RhbmRhcmQgb3V0cHV0LCBvciBkaXJlY3RvcnksIHdoaWNoIG9uZT8iCittc2dzdHIgIsSR4bqndSByYSBjaHXhuqluLCBoYXkgdGjGsCBt4bulYywgY2jhu41uIGPDoWkgbsOgbz8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdOG6oW8gdGjGsCBt4bulYyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9sb2cuYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgdOG6rXAgdGluIGNo4buvIGvDvSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9sb2cuYzoxNTU5Cittc2dpZCAiRmFpbGVkIHRvIGNyZWF0ZSBvdXRwdXQgZmlsZXMiCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB04bqhbyBjw6FjIHThuq1wIHRpbiBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTYwNworbXNnaWQgImdpdCBjaGVycnkgWy12XSBbPHVwc3RyZWFtPiBbPGhlYWQ+IFs8bGltaXQ+XV1dIgorbXNnc3RyICJnaXQgY2hlcnJ5IFstdl0gWzx0aMaw4bujbmctbmd14buTbj4gWzzEkeG6p3U+IFs8Z2nhu5tpLWjhuqFuPl1dXSIKKworIzogYnVpbHRpbi9sb2cuYzoxNjYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgZmluZCBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCwgcGxlYXNlIHNwZWNpZnkgPHVwc3RyZWFtPiBtYW51YWxseS5cbiIKK21zZ3N0ciAiIgorIktow7RuZyB0w6xtIHRo4bqleSBuaMOhbmggbeG6oW5nIMSRxrDhu6NjIHRoZW8gZMO1aSwgaMOjeSBjaOG7iSDEkeG7i25oIDx0aMaw4bujbmctbmd14buTbj4gbeG7mXQgIgorImPDoWNoIHRo4bunIGPDtG5nLlxuIgorCisjOiBidWlsdGluL2xvZy5jOjE2NzIgYnVpbHRpbi9sb2cuYzoxNjc0IGJ1aWx0aW4vbG9nLmM6MTY4NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIGNvbW1pdCAlcyIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSBs4bqnbiBjaHV54buDbiBnaWFvICVzIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6MzU4Cittc2dpZCAiZ2l0IGxzLWZpbGVzIFs8b3B0aW9ucz5dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgbHMtZmlsZXMgWzxjw6FjLXTDuXktY2jhu41uPl0gWzx04bqtcC10aW4+4oCmXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQxNQorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgIm5o4bqtbiBk4bqhbmcgY8OhYyB0cuG6oW5nIHRow6FpIHThuq1wIHRpbiB24bubaSB0aOG6uyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQxNworbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICIiCisiZMO5bmcgY2jhu68gY8OhaSB2aeG6v3QgdGjGsOG7nW5nIGNobyBjw6FjIHThuq1wIHRpbiDigJxhc3N1bWUgdW5jaGFuZ2Vk4oCdIChnaeG6oyDEkeG7i25oIGtow7RuZyAiCisidGhheSDEkeG7lWkpIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDE5Cittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiDEkcaw4bujYyBuaOG7myB04bqhbSB2w6BvIMSR4bqndSByYSAobeG6t2MgxJHhu4tuaCkiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjEKK21zZ2lkICJzaG93IGRlbGV0ZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIMSRw6MgeMOzYSB0cm9uZyBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjMKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiDEkcOjIGLhu4sgc+G7rWEgxJHhu5VpIHJhIGvhur90IHh14bqldCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyNQorbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIGtow6FjIHRyb25nIGvhur90IHh14bqldCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyNworbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB04bqtcCB0aW4gYuG7iyBi4buPIHF1YSB0cm9uZyBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzAKK21zZ2lkICJzaG93IHN0YWdlZCBjb250ZW50cycgb2JqZWN0IG5hbWUgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHTDqm4gxJHhu5FpIHTGsOG7o25nIGPhu6dhIG7hu5lpIGR1bmcgxJHGsOG7o2MgxJHhurd0IGzDqm4gYuG7hyBwaMOzbmcgcmEga+G6v3QgeHXhuqV0IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDMyCittc2dpZCAic2hvdyBmaWxlcyBvbiB0aGUgZmlsZXN5c3RlbSB0aGF0IG5lZWQgdG8gYmUgcmVtb3ZlZCIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgdOG6rXAgdGluIHRyw6puIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4gbcOgIG7DsyBj4bqnbiDEkcaw4bujYyBn4buhIGLhu48iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzQKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWVzIG9ubHkiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyB0w6puIGPhu6dhIGPDoWMgdGjGsCBt4bulYyDigJxraMOhY+KAnSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzNworbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgImtow7RuZyBoaeG7g24gdGjhu4sgdGjGsCBt4bulYyBy4buXbmciCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDAKK21zZ2lkICJzaG93IHVubWVyZ2VkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIHThuq1wIHRpbiBjaMawYSBow7JhIHRy4buZbiB0cm9uZyBr4bq/dCB4deG6pXQiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDIKK21zZ2lkICJzaG93IHJlc29sdmUtdW5kbyBpbmZvcm1hdGlvbiIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIHRow7RuZyB0aW4gcmVzb2x2ZS11bmRvIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQ0Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICJi4buPIHF1YSBuaOG7r25nIHThuq1wIHRpbiBraOG7m3AgduG7m2kgbeG7mXQgbeG6q3UiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDcKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICJt4bqrdSBsb+G6oWkgdHLhu6sgxJHGsOG7o2MgxJHhu41jIHThu6sgPHThuq1wIHRpbj4iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTAKK21zZ2lkICJyZWFkIGFkZGl0aW9uYWwgcGVyLWRpcmVjdG9yeSBleGNsdWRlIHBhdHRlcm5zIGluIDxmaWxlPiIKK21zZ3N0ciAixJHhu41jIHRow6ptIGPDoWMgbeG6q3Ugbmdv4bqhaSB0cuG7qyBt4buXaSB0aMawIG3hu6VjIHRyb25nIDx04bqtcCB0aW4+IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDUyCittc2dpZCAiYWRkIHRoZSBzdGFuZGFyZCBnaXQgZXhjbHVzaW9ucyIKK21zZ3N0ciAidGjDqm0gbG/huqFpIHRy4burIHRpw6p1IGNodeG6qW4ga2nhu4N1IGdpdCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1NQorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICJsw6BtIGNobyBr4bq/dCB4deG6pXQgbGnDqm4gcXVhbiDEkeG6v24gdGjGsCBt4bulYyDhu58gbeG7qWMgY2FvIG5o4bqldCAoZ+G7kWMpIGPhu6dhIGThu7Egw6FuIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDU4Cittc2dpZCAiaWYgYW55IDxmaWxlPiBpcyBub3QgaW4gdGhlIGluZGV4LCB0cmVhdCB0aGlzIGFzIGFuIGVycm9yIgorbXNnc3RyICJu4bq/dSA8dOG6rXAgdGluPiBi4bqldCBr4buzIGtow7RuZyDhu58gdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjLCB44butIGzDvSBuw7MgbmjGsCBt4buZdCBs4buXaSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1OQorbXNnaWQgInRyZWUtaXNoIgorbXNnc3RyICJ0cmVlLWlzaCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ2MAorbXNnaWQgInByZXRlbmQgdGhhdCBwYXRocyByZW1vdmVkIHNpbmNlIDx0cmVlLWlzaD4gYXJlIHN0aWxsIHByZXNlbnQiCittc2dzdHIgIiIKKyJnaeG6oyDEkeG7i25oIHLhurFuZyBjw6FjIMSRxrDhu51uZyBk4bqrbiDEkcOjIGLhu4sgZ+G7oSBi4buPIGvhu4MgdOG7qyA8dHJlZS1pc2g+IG5heSB24bqrbiBoaeG7h24gZGnhu4duIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYyCittc2dpZCAic2hvdyBkZWJ1Z2dpbmcgZGF0YSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGThu68gbGnhu4d1IGfhu6EgbOG7l2kiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjI4Cittc2dpZCAiZ2l0IGxzLXRyZWUgWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLXRyZWUgWzxjw6FjLXTDuXktY2jhu41uPl0gPHRyZWUtaXNoPiBbPMSRxrDhu51uZy1k4bqrbj7igKZdIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjcKK21zZ2lkICJvbmx5IHNob3cgdHJlZXMiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBjw6FjIHRyZWUiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyOQorbXNnaWQgInJlY3Vyc2UgaW50byBzdWJ0cmVlcyIKK21zZ3N0ciAixJHhu4cgcXV5IHbDoG8gY8OhYyB0aMawIG3hu6VjIGNvbiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMxCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDonkga2hpIMSR4buHIHF1eSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM0Cittc2dpZCAidGVybWluYXRlIGVudHJpZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAiY2jhuqVtIGThu6l0IG3hu6VjIHRpbiB24bubaSBieXRlIE5VTCIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAiZ+G7k20gY+G6oyBrw61jaCB0aMaw4bubYyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEzNyBidWlsdGluL2xzLXRyZWUuYzoxMzkKK21zZ2lkICJsaXN0IG9ubHkgZmlsZW5hbWVzIgorbXNnc3RyICJjaOG7iSBsaeG7h3Qga8OqIHTDqm4gdOG6rXAgdGluIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDIKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICJkw7luZyB0w6puIMSRxrDhu51uZyBk4bqrbiDEkeG6p3kgxJHhu6ciCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NAorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6J5IG3hu6VjIHRpbjsga2jDtG5nIGNo4buJIHRoxrAgbeG7pWMgaGnhu4duIGjDoG5oIChuZ+G7pSDDvSAtLWZ1bGwtbmFtZSkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NQorbXNnaWQgImdpdCBtZXJnZSBbPG9wdGlvbnM+XSBbPGNvbW1pdD4uLi5dIgorbXNnc3RyICJnaXQgbWVyZ2UgWzxjw6FjLXTDuXktY2jhu41uPl0gWzxjb21taXQ+4oCmXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ2Cittc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIDxtc2c+IEhFQUQgPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZSBbPGPDoWMtdMO5eS1jaOG7jW4+XSA8dGluLW5o4bqvbj4gSEVBRCA8Y29tbWl0PiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ3Cittc2dpZCAiZ2l0IG1lcmdlIC0tYWJvcnQiCittc2dzdHIgImdpdCBtZXJnZSAtLWFib3J0IgorCisjOiBidWlsdGluL21lcmdlLmM6MTAwCittc2dpZCAic3dpdGNoIGBtJyByZXF1aXJlcyBhIHZhbHVlIgorbXNnc3RyICJzd2l0Y2gg4oCcbeKAnSB5w6p1IGPhuqd1IG3hu5l0IGdpw6EgdHLhu4siCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IGNoaeG6v24gbMaw4bujYyBow7JhIHRy4buZbiDigJwlc+KAnS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJDw6FjIGNoaeG6v24gbMaw4bujYyBz4bq1biBzw6BuZyBsw6A6IgorCisjOiBidWlsdGluL21lcmdlLmM6MTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBjdXN0b20gc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICJDw6FjIGNoaeG6v24gbMaw4bujYyB0w7l5IGNo4buJbmggc+G6tW4gc8OgbmcgbMOgOiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5MyBidWlsdGluL3B1bGwuYzoxMTkKK21zZ2lkICJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICJraMO0bmcgaGnhu4NuIHRo4buLIHRo4buRbmcga8OqIGtow6FjIGJp4buHdCB04bqhaSBjdeG7kWkgY+G7p2EgbOG6p24gaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTYgYnVpbHRpbi9wdWxsLmM6MTIyCittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICJoaeG7g24gdGjhu4sgdGjhu5FuZyBrw6oga2jDoWMgYmnhu4d0IHThuqFpIGN14buRaSBj4bunYSBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5NyBidWlsdGluL3B1bGwuYzoxMjUKK21zZ2lkICIoc3lub255bSB0byAtLXN0YXQpIgorbXNnc3RyICIoxJHhu5NuZyBuZ2jEqWEgduG7m2kgLS1zdGF0KSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5OSBidWlsdGluL3B1bGwuYzoxMjgKK21zZ2lkICJhZGQgKGF0IG1vc3QgPG4+KSBlbnRyaWVzIGZyb20gc2hvcnRsb2cgdG8gbWVyZ2UgY29tbWl0IG1lc3NhZ2UiCittc2dzdHIgInRow6ptICjDrXQgbmjhuqV0IDxuPikgbeG7pWMgdOG7qyBzaG9ydGxvZyBjaG8gZ2hpIGNow7ogY2h1eeG7g24gZ2lhbyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMiBidWlsdGluL3B1bGwuYzoxMzEKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAidOG6oW8gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyDEkcawb24gdGhheSB2w6wgdGjhu7FjIGhp4buHbiB2aeG7h2MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDQgYnVpbHRpbi9wdWxsLmM6MTM0Cittc2dpZCAicGVyZm9ybSBhIGNvbW1pdCBpZiB0aGUgbWVyZ2Ugc3VjY2VlZHMgKGRlZmF1bHQpIgorbXNnc3RyICJ0aOG7sWMgaGnhu4duIGNodXnhu4NuIGdpYW8gbuG6v3UgaMOyYSB0cuG7mW4gdGjDoG5oIGPDtG5nICht4bq3YyDEkeG7i25oKSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwNiBidWlsdGluL3B1bGwuYzoxMzcKK21zZ2lkICJlZGl0IG1lc3NhZ2UgYmVmb3JlIGNvbW1pdHRpbmciCittc2dzdHIgInPhu61hIGNow7ogdGjDrWNoIHRyxrDhu5tjIGtoaSBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA3Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAiY2hvIHBow6lwIGNodXnhu4NuLXRp4bq/cC1uaGFuaCAobeG6t2MgxJHhu4tuaCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMDkgYnVpbHRpbi9wdWxsLmM6MTQzCittc2dpZCAiYWJvcnQgaWYgZmFzdC1mb3J3YXJkIGlzIG5vdCBwb3NzaWJsZSIKK21zZ3N0ciAiYuG7jyBxdWEgbuG6v3UgY2h1eeG7g24tdGnhur9wLW5oYW5oIGtow7RuZyB0aOG7gyDEkcaw4bujYyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxMworbXNnaWQgIlZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAiVGjhuqltIHRyYSB4ZW0gbOG6p24gY2h1eeG7g24gZ2lhbyBjw7MgdMOqbiDEkcOzIGPDsyBjaOG7ryBrw70gR1BHIGjhu6NwIGzhu4cgaGF5IGtow7RuZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNCBidWlsdGluL25vdGVzLmM6NzY3IGJ1aWx0aW4vcHVsbC5jOjE0OAorIzogYnVpbHRpbi9yZXZlcnQuYzo4OQorbXNnaWQgInN0cmF0ZWd5IgorbXNnc3RyICJjaGnhur9uIGzGsOG7o2MiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTUgYnVpbHRpbi9wdWxsLmM6MTQ5Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIgorbXNnc3RyICJjaGnhur9uIGzGsOG7o2MgaMOyYSB0cuG7mW4gc+G6vSBkw7luZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxNiBidWlsdGluL3B1bGwuYzoxNTIKK21zZ2lkICJvcHRpb249dmFsdWUiCittc2dzdHIgInTDuXlfY2jhu41uPWdpw6FfdHLhu4siCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTcgYnVpbHRpbi9wdWxsLmM6MTUzCittc2dpZCAib3B0aW9uIGZvciBzZWxlY3RlZCBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAidMO5eSBjaOG7jW4gY2hvIGNoaeG6v24gbMaw4bujYyBow7JhIHRy4buZbiDEkcOjIGNo4buNbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxOQorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAiIgorImjDsmEgdHLhu5luIGdoaSBjaMO6IGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8gKGTDoG5oIGNobyBow7JhIHRy4buZbiBraMO0bmctY2h1eeG7g24tdGnhur9wLSIKKyJuaGFuaCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMjMKK21zZ2lkICJhYm9ydCB0aGUgY3VycmVudCBpbi1wcm9ncmVzcyBtZXJnZSIKK21zZ3N0ciAiYsOjaSBi4buPIHF1w6EgdHLDrG5oIGjDsmEgdHLhu5luIGhp4buHbiB04bqhaSDEkWFuZyB0aOG7sWMgaGnhu4duIgorCisjOiBidWlsdGluL21lcmdlLmM6MjUxCittc2dpZCAiY291bGQgbm90IHJ1biBzdGFzaC4iCittc2dzdHIgImtow7RuZyB0aOG7gyBjaOG6oXkgc3Rhc2guIgorCisjOiBidWlsdGluL21lcmdlLmM6MjU2Cittc2dpZCAic3Rhc2ggZmFpbGVkIgorbXNnc3RyICJzdGFzaCBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICJraMO0bmcgcGjhuqNpIGzDoCBt4buZdCDEkeG7kWkgdMaw4bujbmcgaOG7o3AgbOG7hzogJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyODAgYnVpbHRpbi9tZXJnZS5jOjI5NworbXNnaWQgInJlYWQtdHJlZSBmYWlsZWQiCittc2dzdHIgInJlYWQtdHJlZSBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjMyNworbXNnaWQgIiAobm90aGluZyB0byBzcXVhc2gpIgorbXNnc3RyICIgKGtow7RuZyBjw7MgZ8OsIMSR4buDIHNxdWFzaCkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3F1YXNoIGNvbW1pdCAtLSBub3QgdXBkYXRpbmcgSEVBRFxuIgorbXNnc3RyICJTcXVhc2ggY29tbWl0IC0tIGtow7RuZyBj4bqtcCBuaOG6rXQgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQ0IGJ1aWx0aW4vbWVyZ2UuYzo3NjMgYnVpbHRpbi9tZXJnZS5jOjk3NQorIzogYnVpbHRpbi9tZXJnZS5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSB2w6BvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL21lcmdlLmM6MzcyCittc2dpZCAiV3JpdGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICLEkGFuZyBnaGkgU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM3NAorbXNnaWQgIkZpbmlzaGluZyBTUVVBU0hfTVNHIgorbXNnc3RyICJIb8OgbiB0aMOgbmggU1FVQVNIX01TRyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM5NworIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBtZXNzYWdlIC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIktow7RuZyBjw7MgbOG7nWkgY2jDuiB0aMOtY2ggaMOyYSB0cuG7mW4gLS0gbsOqbiBraMO0bmcgY+G6rXAgbmjhuq10IEhFQURcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ0NworIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGRvZXMgbm90IHBvaW50IHRvIGEgY29tbWl0IgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgY2jhu4kgxJHhur9uIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gbsOgbyBj4bqjIgorCisjOiBidWlsdGluL21lcmdlLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBicmFuY2guJXMubWVyZ2VvcHRpb25zIHN0cmluZzogJXMiCittc2dzdHIgIkNodeG7l2kgYnJhbmNoLiVzLm1lcmdlb3B0aW9ucyBzYWk6ICVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NjU2Cittc2dpZCAiTm90IGhhbmRsaW5nIGFueXRoaW5nIG90aGVyIHRoYW4gdHdvIGhlYWRzIG1lcmdlLiIKK21zZ3N0ciAiS2jDtG5nIGPhuqdtIG7huq9tIGfDrCBuZ2/DoGkgaGFpIGhlYWQgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbiBjaG8gbWVyZ2UtcmVjdXJzaXZlOiAtWCVzIgorCisjOiBidWlsdGluL21lcmdlLmM6NjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSAlcyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSAlcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc3MgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBmcm9tICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgdOG7qyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjc4MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgY29tbWl0dGluZyBtZXJnZTsgdXNlICdnaXQgY29tbWl0JyB0byBjb21wbGV0ZSB0aGUgbWVyZ2UuXG4iCittc2dzdHIgIiIKKyJW4bqrbiBjaMawYSBow7JhIHRy4buZbiBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW87IHPhu60gZOG7pW5nIGzhu4duaCDigJxnaXQgY29tbWl04oCdIMSR4buDIGhvw6BuIHThuqV0ICIKKyJ2aeG7h2MgaMOyYSB0cuG7mW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciBhIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gd2h5IHRoaXMgbWVyZ2UgaXMgbmVjZXNzYXJ5LFxuIgorImVzcGVjaWFsbHkgaWYgaXQgbWVyZ2VzIGFuIHVwZGF0ZWQgdXBzdHJlYW0gaW50byBhIHRvcGljIGJyYW5jaC5cbiIKKyJcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHNcbiIKKyJ0aGUgY29tbWl0LlxuIgorbXNnc3RyICIiCisiSMOjeSBuaOG6rXAgdsOgbyBjw6FjIHRow7RuZyB0aW4gxJHhu4MgZ2nhuqNpIHRow61jaCB04bqhaSBzYW8gc+G7sSBow7JhIHRy4buZbiBuw6B5IGzDoCBj4bqnbiAiCisidGhp4bq/dCxcbiIKKyLEkeG6t2MgYmnhu4d0IGzDoCBraGkgbsOzIGjDsmEgdHLhu5luIHRoxrDhu6NuZyBuZ3Xhu5NuIMSRw6MgY+G6rXAgbmjhuq10IHbDoG8gdHJvbmcgbeG7mXQgbmjDoW5oICIKKyJ0b3BpYy5cbiIKKyJcbiIKKyJOaOG7r25nIGTDsm5nIMSRxrDhu6NjIGLhuq90IMSR4bqndSBi4bqxbmcg4oCcJWPigJ0gc+G6vSDEkcaw4bujYyBi4buPIHF1YSwgdsOgIHBo4bqnbiBjaMO6IHRow61jaCBuw6B5IG7hur91ICIKKyJy4buXbmdcbiIKKyJz4bq9IGjhu6d5IGLhu48gbOG6p24gY2h1eeG7g24gZ2lhby5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgxMQorbXNnaWQgIkVtcHR5IGNvbW1pdCBtZXNzYWdlLiIKK21zZ3N0ciAiQ2jDuiB0aMOtY2ggY+G7p2EgbOG6p24gY29tbWl0IChjaHV54buDbiBnaWFvKSBi4buLIHRy4buRbmcgcuG7l25nLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjgyMworIywgYy1mb3JtYXQKK21zZ2lkICJXb25kZXJmdWwuXG4iCittc2dzdHIgIlRo4bqnbiBr4buzLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODc4CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSBmYWlsZWQ7IGZpeCBjb25mbGljdHMgYW5kIHRoZW4gY29tbWl0IHRoZSByZXN1bHQuXG4iCittc2dzdHIgIiIKKyJWaeG7h2MgdOG7sSDEkeG7mW5nIGjDsmEgdHLhu5luIGfhurdwIGzhu5dpOyBow6N5IHPhu61hIGPDoWMgeHVuZyDEkeG7mXQgc2F1IMSRw7MgY2h1eeG7g24gZ2lhbyBr4bq/dCAiCisicXXhuqMuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSBjb21taXQiCittc2dzdHIgIiVzIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGzhuqduIGNvbW1pdCAoY2h1eeG7g24gZ2lhbykiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzUKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgImtow7RuZyBwaOG6o2kgbmjDoW5oIGhp4buHbiBow6BuaCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkzNworbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyBtw6F5IGNo4bunIGNobyBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkzOQorbXNnaWQgIk5vIGRlZmF1bHQgdXBzdHJlYW0gZGVmaW5lZCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aMaw4bujbmcgbmd14buTbiBt4bq3YyDEkeG7i25oIMSRxrDhu6NjIMSR4buLbmggbmdoxKlhIGNobyBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIGZvciAlcyBmcm9tICVzIgorbXNnc3RyICJLaMO0bmcgbmjDoW5oIG3huqFuZyB0aGVvIGTDtWkgY2hvICVzIHThu6sgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHDs25nIOKAnCVz4oCdIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIwOAorbXNnaWQgIlRoZXJlIGlzIG5vIG1lcmdlIHRvIGFib3J0IChNRVJHRV9IRUFEIG1pc3NpbmcpLiIKK21zZ3N0ciAiIgorIuG7niDEkcOieSBraMO0bmcgY8OzIGzhuqduIGjDsmEgdHLhu5luIG7DoG8gxJHGsOG7o2MgaOG7p3kgYuG7jyBnaeG7r2EgY2jhu6tuZyBj4bqjICh0aGnhur91IE1FUkdFX0hFQUQpLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMjQKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIG1lcmdlIChNRVJHRV9IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiQuG6oW4gY2jGsGEga+G6v3QgdGjDumMgdmnhu4djIGjDsmEgdHLhu5luIChNRVJHRV9IRUFEIHbhuqtuIHThu5NuIHThuqFpKS5cbiIKKyJIw6N5IGNodXnhu4NuIGdpYW8gY8OhYyB0aGF5IMSR4buVaSB0csaw4bubYyBraGkgYuG6oW4gY8OzIHRo4buDIGjDsmEgdHLhu5luLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzEKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisiQuG6oW4gY2jGsGEga+G6v3QgdGjDumMgdmnhu4djIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIHbhuqtuIHThu5NuIHThuqFpKS5cbiIKKyJIw6N5IGNodXnhu4NuIGdpYW8gY8OhYyB0aGF5IMSR4buVaSB0csaw4bubYyBraGkgYuG6oW4gY8OzIHRo4buDIGjDsmEgdHLhu5luLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzQKK21zZ2lkICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgY2hlcnJ5LXBpY2sgKENIRVJSWV9QSUNLX0hFQUQgZXhpc3RzKS4iCittc2dzdHIgIkLhuqFuIGNoxrBhIGvhur90IHRow7pjIHZp4buHYyBjaGVycnktcGljayAoQ0hFUlJZX1BJQ0tfSEVBRCB24bqrbiB04buTbiB04bqhaSkuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI0MworbXNnaWQgIllvdSBjYW5ub3QgY29tYmluZSAtLXNxdWFzaCB3aXRoIC0tbm8tZmYuIgorbXNnc3RyICJC4bqhbiBraMO0bmcgdGjhu4Mga+G6v3QgaOG7o3AgLS1zcXVhc2ggduG7m2kgLS1uby1mZi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjUxCittc2dpZCAiTm8gY29tbWl0IHNwZWNpZmllZCBhbmQgbWVyZ2UuZGVmYXVsdFRvVXBzdHJlYW0gbm90IHNldC4iCittc2dzdHIgIktow7RuZyBjaOG7iSByYSBs4bqnbiBjaHV54buDbiBnaWFvIHbDoCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBjaMawYSDEkcaw4bujYyDEkeG6t3QuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI2OAorbXNnaWQgIlNxdWFzaCBjb21taXQgaW50byBlbXB0eSBoZWFkIG5vdCBzdXBwb3J0ZWQgeWV0IgorbXNnc3RyICJTcXVhc2ggY29tbWl0IHbDoG8gbeG7mXQgaGVhZCB0cuG7kW5nIHLhu5duZyB24bqrbiBjaMawYSDEkcaw4bujYyBo4buXIHRy4bujIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3MAorbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICIiCisiQ2h1eeG7g24gZ2lhbyBraMO0bmctY2h1eeG7g24tdGnhur9wLW5oYW5oIGtow7RuZyBo4bujcCBsw70g4bufIHRyb25nIG3hu5l0IGhlYWQgdHLhu5FuZyBy4buXbmciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiVzIC0ga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgc+G7kSB0aOG7qSBjaMO6bmcgdMO0aSBjw7MgdGjhu4MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjc4Cittc2dpZCAiQ2FuIG1lcmdlIG9ubHkgZXhhY3RseSBvbmUgY29tbWl0IGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBow7JhIHRy4buZbiBt4buZdCBjw6FjaCDEkcO6bmcgxJHhuq9uIG3hu5l0IGzhuqduIGNodXnhu4NuIGdpYW8gdsOgbyBt4buZdCBoZWFkIHLhu5duZyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiIgorIkzhuqduIGNodXnhu4NuIGdpYW8gJXMgY8OzIG3hu5l0IGNo4buvIGvDvSBHUEcga2jDtG5nIMSRw6FuZyB0aW4sIMSRxrDhu6NjIGNobyBsw6AgYuG7n2kgJXMuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgaGFzIGEgYmFkIEdQRyBzaWduYXR1cmUgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyAlcyBjw7MgbeG7mXQgY2jhu68ga8O9IEdQRyBzYWksIMSRxrDhu6NjIGNobyBsw6AgYuG7n2kgJXMuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTMzOQorIywgYy1mb3JtYXQKK21zZ2lkICJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBhIEdQRyBzaWduYXR1cmUuIgorbXNnc3RyICJM4bqnbiBjaHV54buDbiBnaWFvICVzIGtow7RuZyBjw7MgY2jhu68ga8O9IEdQRy4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzQyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBoYXMgYSBnb29kIEdQRyBzaWduYXR1cmUgYnkgJXNcbiIKK21zZ3N0ciAiTOG6p24gY2h1eeG7g24gZ2lhbyAlcyBjw7MgbeG7mXQgY2jhu68ga8O9IEdQRyB04buRdCBi4bufaSAlc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQyMworIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcy4uJXNcbiIKK21zZ3N0ciAixJBhbmcgY+G6rXAgbmjhuq10ICVzLi4lc1xuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgcmVhbGx5IHRyaXZpYWwgaW4taW5kZXggbWVyZ2UuLi5cbiIKK21zZ3N0ciAixJBhbmcgdGjhu60gaMOyYSB0cuG7mW4ga2nhu4N1IOKAnHRyaXZpYWwgaW4taW5kZXjigJ3igKZcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAiS2jDtG5nLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUwMQorbXNnaWQgIk5vdCBwb3NzaWJsZSB0byBmYXN0LWZvcndhcmQsIGFib3J0aW5nLiIKK21zZ3N0ciAiVGjhu7FjIGhp4buHbiBs4buHbmggY2h1eeG7g24tdGnhur9wLW5oYW5oIGzDoCBraMO0bmcgdGjhu4MgxJHGsOG7o2MsIMSRYW5nIGLhu48gcXVhLiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MjQgYnVpbHRpbi9tZXJnZS5jOjE2MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmV3aW5kaW5nIHRoZSB0cmVlIHRvIHByaXN0aW5lLi4uXG4iCittc2dzdHIgIsSQYW5nIHR1YSBs4bqhaSBjw6J5IHRow6BuaCB0aOG7nWkgeGEgeMawYeKAplxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTUyOAorIywgYy1mb3JtYXQKK21zZ2lkICJUcnlpbmcgbWVyZ2Ugc3RyYXRlZ3kgJXMuLi5cbiIKK21zZ3N0ciAixJBhbmcgdGjhu60gY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luICVz4oCmXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIHN0cmF0ZWd5IGhhbmRsZWQgdGhlIG1lcmdlLlxuIgorbXNnc3RyICJLaMO0bmcgY8OzIGNoaeG6v24gbMaw4bujYyBow7JhIHRy4buZbiBuw6BvIMSRxrDhu6NjIG7huq9tIGdp4buvIChoYW5kbGUpIHPhu7EgaMOyYSB0cuG7mW4uXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICJIw7JhIHRy4buZbiB24bubaSBjaGnhur9uIGzGsOG7o2MgJXMgZ+G6t3AgbOG7l2kuXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICJT4butIGThu6VuZyAlcyDEkeG7gyBjaHXhuqluIGLhu4sgZ2nhuqNpIHF1eeG6v3QgYuG6sW5nIHRheS5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0b21hdGljIG1lcmdlIHdlbnQgd2VsbDsgc3RvcHBlZCBiZWZvcmUgY29tbWl0dGluZyBhcyByZXF1ZXN0ZWRcbiIKK21zZ3N0ciAiIgorIkjDsmEgdHLhu5luIHThu7EgxJHhu5luZyDEkcOjIHRy4bufIG7Dqm4gdOG7kXQ7IGLhu4sgZOG7q25nIHRyxrDhu5tjIGtoaSB2aeG7h2MgY2h1eeG7g24gZ2lhbyDEkcaw4bujYyB5w6p1ICIKKyJj4bqndVxuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyOQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDxs4bqnbl9jaHV54buDbl9naWFvPiA8bOG6p25fY2h1eeG7g25fZ2lhbz7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMwCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIC0tb2N0b3B1cyA8bOG6p25fY2h1eeG7g25fZ2lhbz7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMxCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8bOG6p25fY2h1eeG7g25fZ2lhbz7igKYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMyCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8Y29tbWl0PiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pcy1hbmNlc3RvciA8Y29tbWl0PiA8bOG6p25fY2h1eeG7g25fZ2lhbz4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMzCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IDxyZWY+IFs8Y29tbWl0Pl0iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8dGhhbS1jaGnhur91PiBbPGzhuqduX2NodXnhu4NuX2dpYW8+XSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE0Cittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICJ4deG6pXQgcmEgdOG6pXQgY+G6oyBjw6FjIMO0bmcgYsOgLCB04buVIHRpw6puIGNodW5nIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMTYKK21zZ2lkICJmaW5kIGFuY2VzdG9ycyBmb3IgYSBzaW5nbGUgbi13YXkgbWVyZ2UiCittc2dzdHIgInTDrG0gdOG7lSB0acOqbiBj4bunYSBow7JhIHRy4buZbiBuLXdheSDEkcahbiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE4Cittc2dpZCAibGlzdCByZXZzIG5vdCByZWFjaGFibGUgZnJvbSBvdGhlcnMiCittc2dzdHIgImxp4buHdCBrw6ogY8OhYyDigJxyZXbigJ0gbcOgIG7DsyBraMO0bmcgdGjhu4MgxJHhu41jIMSRxrDhu6NjIHThu6sgY8OhaSBraMOhYyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjIwCittc2dpZCAiaXMgdGhlIGZpcnN0IG9uZSBhbmNlc3RvciBvZiB0aGUgb3RoZXI/IgorbXNnc3RyICJsw6AgY2hhIG3hurkgxJHhuqd1IHRpw6puIGPhu6dhIGPDoWkga2jDoWM/IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjIKK21zZ2lkICJmaW5kIHdoZXJlIDxjb21taXQ+IGZvcmtlZCBmcm9tIHJlZmxvZyBvZiA8cmVmPiIKK21zZ3N0ciAidMOsbSB4ZW0gPGNvbW1pdD4gxJHGsOG7o2MgcuG6vSBuaMOhbmgg4bufIMSRw6J1IHThu6sgcmVmbG9nIGPhu6dhIDx0aC5jaGnhur91PiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6OAorbXNnaWQgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPG9wdGlvbnM+XSBbLUwgPG5hbWUxPiBbLUwgPG9yaWc+IFstTCA8bmFtZTI+XV1dIDxmaWxlMT4gIgorIjxvcmlnLWZpbGU+IDxmaWxlMj4iCittc2dzdHIgIiIKKyJnaXQgbWVyZ2UtZmlsZSBbPGPDoWMtdMO5eS1jaOG7jW4+XSBbLUwgPHTDqm4xPiBbLUwgPGfhu5FjPiBbLUwgPHTDqm4yPl1dXSA8dOG6rXAtIgorInRpbjE+IDx04bqtcC10aW4tZ+G7kWM+IDx04bqtcC10aW4yPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzMKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICJn4butaSBr4bq/dCBxdeG6oyB2w6BvIMSR4bqndSByYSB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzozNAorbXNnaWQgInVzZSBhIGRpZmYzIGJhc2VkIG1lcmdlIgorbXNnc3RyICJkw7luZyBraeG7g3UgaMOyYSBk4buxYSB0csOqbiBkaWZmMyIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzUKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2Ugb3VyIHZlcnNpb24iCittc2dzdHIgIsSR4buDIHRyw6FuaCB4dW5nIMSR4buZdCwgc+G7rSBk4bulbmcgcGhpw6puIGLhuqNuIGPhu6dhIGNow7puZyB0YSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzcKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhlaXIgdmVyc2lvbiIKK21zZ3N0ciAixJHhu4MgdHLDoW5oIHh1bmcgxJHhu5l0LCBz4butIGThu6VuZyBwaGnDqm4gYuG6o24gY+G7p2EgaOG7jSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICLEkeG7gyB0csOhbmggeHVuZyDEkeG7mXQsIHPhu60gZOG7pW5nIHBoacOqbiBi4bqjbiBr4bq/dCBo4bujcCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDIKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgdGhpcyBtYXJrZXIgc2l6ZSIKK21zZ3N0ciAixJHhu4MgdHLDoW5oIHh1bmcgxJHhu5l0LCBow6N5IHPhu60gZOG7pW5nIGvDrWNoIHRoxrDhu5tjIGLhu5kgdOG6oW8gbsOgeSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDMKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgImtow7RuZyBj4bqjbmggYsOhbyB24buBIGPDoWMgeHVuZyDEkeG7mXQgeOG6o3kgcmEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQ1Cittc2dpZCAic2V0IGxhYmVscyBmb3IgZmlsZTEvb3JpZy1maWxlL2ZpbGUyIgorbXNnc3RyICLEkeG6t3QgbmjDo24gY2hvIHThuq1wLXRpbi0xL3Thuq1wLXRpbi1n4buRYy904bqtcC10aW4tMiIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NAorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUwCittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgIsSR4bqndSB2w6BvIMSRxrDhu6NjIGNo4bqlbSBk4bupdCBi4bufaSBOVUwiCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUxIGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI0Cittc2dpZCAiYWxsb3cgbWlzc2luZyBvYmplY3RzIgorbXNnc3RyICJjaG8gcGjDqXAgdGhp4bq/dSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUyCittc2dpZCAiYWxsb3cgY3JlYXRpb24gb2YgbW9yZSB0aGFuIG9uZSB0cmVlIgorbXNnc3RyICJjaG8gcGjDqXAgdOG6oW8gbmhp4buBdSBoxqFuIG3hu5l0IGPDonkiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNQorbXNnaWQgImdpdCBtdiBbPG9wdGlvbnM+XSA8c291cmNlPi4uLiA8ZGVzdGluYXRpb24+IgorbXNnc3RyICJnaXQgbXYgWzxjw6FjLXTDuXktY2jhu41uPl0gPG5ndeG7k24+4oCmIDzEkcOtY2g+IgorCisjOiBidWlsdGluL212LmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlyZWN0b3J5ICVzIGlzIGluIGluZGV4IGFuZCBubyBzdWJtb2R1bGU/IgorbXNnc3RyICJUaMawIG3hu6VjIOKAnCVz4oCdIGPDsyDhu58gdHJvbmcgY2jhu4kgbeG7pWMgbcOgIGtow7RuZyBjw7MgbcO0LcSRdW4gY29uPyIKKworIzogYnVpbHRpbi9tdi5jOjcxCittc2dpZCAiUGxlYXNlIHN0YWdlIHlvdXIgY2hhbmdlcyB0byAuZ2l0bW9kdWxlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQiCittc2dzdHIgIiIKKyJIw6N5IMSRxrBhIGPDoWMgdGhheSDEkeG7lWkgY+G7p2EgYuG6oW4gdsOgbyAuZ2l0bW9kdWxlcyBoYXkgdOG6oW0gY+G6pXQgY2jDum5nIMSRaSDEkeG7gyB44butIGzDvSIKKworIzogYnVpbHRpbi9tdi5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgIiUuKnMgaXMgaW4gaW5kZXgiCittc2dzdHIgIiUuKnMgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL212LmM6MTExCittc2dpZCAiZm9yY2UgbW92ZS9yZW5hbWUgZXZlbiBpZiB0YXJnZXQgZXhpc3RzIgorbXNnc3RyICLDqXAgYnXhu5ljIGRpIGNodXnhu4NuIGhheSDEkeG7lWkgdMOqbiB0aOG6rW0gY2jDrSBj4bqjIGtoaSDEkcOtY2ggxJHDoyB04buTbiB04bqhaSIKKworIzogYnVpbHRpbi9tdi5jOjExMgorbXNnaWQgInNraXAgbW92ZS9yZW5hbWUgZXJyb3JzIgorbXNnc3RyICJi4buPIHF1YSBjw6FjIGzhu5dpIGxpw6puIHF1YW4gxJHhur9uIGRpIGNodXnhu4NuLCDEkeG7lWkgdMOqbiIKKworIzogYnVpbHRpbi9tdi5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAiY8OzIMSRw61jaCDigJwlc+KAnSBuaMawbmcgxJHDonkga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgdGjGsCBt4bulYyIKKworIzogYnVpbHRpbi9tdi5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICJDaGVja2luZyByZW5hbWUgb2YgJyVzJyB0byAnJXMnXG4iCittc2dzdHIgIsSQYW5nIGtp4buDbSB0cmEgdmnhu4djIMSR4buVaSB0w6puIGPhu6dhIOKAnCVz4oCdIHRow6BuaCDigJwlc+KAnVxuIgorCisjOiBidWlsdGluL212LmM6MTY2Cittc2dpZCAiYmFkIHNvdXJjZSIKK21zZ3N0ciAibmd14buTbiBzYWkiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZGkgY2h1eeG7g24gbeG7mXQgdGjGsCBt4bulYyB2w6BvIHRyb25nIGNow61uaCBuw7MgxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzIKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICJraMO0bmcgZGkgY2h1eeG7g24gxJHGsOG7o2MgdGjGsCBt4bulYyB0aMO0bmcgcXVhIHThuq1wIHRpbiIKKworIzogYnVpbHRpbi9tdi5jOjE4MQorbXNnaWQgInNvdXJjZSBkaXJlY3RvcnkgaXMgZW1wdHkiCittc2dzdHIgInRoxrAgbeG7pWMgbmd14buTbiBsw6AgdHLhu5FuZyBy4buXbmciCisKKyM6IGJ1aWx0aW4vbXYuYzoyMDYKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICJraMO0bmcgbuG6sW0gZMaw4bubaSBz4buxIHF14bqjbiBsw70gbcOjIG5ndeG7k24iCisKKyM6IGJ1aWx0aW4vbXYuYzoyMDkKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgIsSRw61jaCDEkcOjIHThu5NuIHThuqFpIHPhurVuIHLhu5NpIgorCisjOiBidWlsdGluL212LmM6MjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIm92ZXJ3cml0aW5nICclcyciCittc2dzdHIgIsSRYW5nIGdoaSDEkcOoIGzDqm4g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjAKK21zZ2lkICJDYW5ub3Qgb3ZlcndyaXRlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIMSRw6giCisKKyM6IGJ1aWx0aW4vbXYuYzoyMjMKK21zZ2lkICJtdWx0aXBsZSBzb3VyY2VzIGZvciB0aGUgc2FtZSB0YXJnZXQiCittc2dzdHIgIk5oaeG7gXUgbmd14buTbiBjaG8gY8O5bmcgbeG7mXQgxJHDrWNoIgorCisjOiBidWlsdGluL212LmM6MjI1Cittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJ0aMawIG3hu6VjIMSRw61jaCBraMO0bmcgdOG7k24gdOG6oWkiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVzLCBuZ3Xhu5NuPSVzLCDEkcOtY2g9JXMiCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXNcbiIKK21zZ3N0ciAixJDhu5VpIHTDqm4gJXMgdGjDoG5oICVzXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoyNTYgYnVpbHRpbi9yZW1vdGUuYzo3MjIgYnVpbHRpbi9yZXBhY2suYzozNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVuYW1pbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG7lWkgdMOqbiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjI1NQorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8Y8OhYy10w7l5LWNo4buNbj5dIDxjb21taXQ+4oCmIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjU2Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIC0tYWxsIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzxjw6FjLXTDuXktY2jhu41uPl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyNTcKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs8Y8OhYy10w7l5LWNo4buNbj5dIC0tc3RkaW4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMDkKK21zZ2lkICJwcmludCBvbmx5IG5hbWVzIChubyBTSEEtMSkiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyB0w6puIChraMO0bmcgU0hBLTEpIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzEwCittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICJjaOG7iSBkw7luZyBjw6FjIHRo4bq7IMSR4buDIMSR4bq3dCB0w6puIGNobyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTIKK21zZ2lkICJvbmx5IHVzZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAiY2jhu4kgc+G7rSBk4bulbmcgY8OhYyB0aGFtIGNoaeG6v3Uga2jhu5twIHbhu5tpIDxt4bqrdT4iCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTQKK21zZ2lkICJsaXN0IGFsbCBjb21taXRzIHJlYWNoYWJsZSBmcm9tIGFsbCByZWZzIgorbXNnc3RyICIiCisibGnhu4d0IGvDqiB04bqldCBj4bqjIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBjw7MgdGjhu4MgxJHhu41jIMSRxrDhu6NjIHThu6sgdOG6pXQgY+G6oyBjw6FjIHRoYW0gY2hp4bq/dSIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxNQorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAixJHhu41jIHThu6sgxJHhuqd1IHbDoG8gdGnDqnUgY2h14bqpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxNgorbXNnaWQgImFsbG93IHRvIHByaW50IGB1bmRlZmluZWRgIG5hbWVzIChkZWZhdWx0KSIKK21zZ3N0ciAiY2hvIHBow6lwIGluIGPDoWMgdMOqbiDigJxjaMawYSDEkeG7i25oIG5naMSpYeKAnSAobeG6t2MgxJHhu4tuaCkiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMjIKK21zZ2lkICJkZXJlZmVyZW5jZSB0YWdzIGluIHRoZSBpbnB1dCAoaW50ZXJuYWwgdXNlKSIKK21zZ3N0ciAiYsOjaSBi4buPIHRoYW0gY2hp4bq/dSBjw6FjIHRo4bq7IHRyb25nIMSR4bqndSB2w6BvIChkw7luZyBu4buZaSBi4buZKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIFtsaXN0IFs8xJHhu5FpLXTGsOG7o25nPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiAiCisifCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDxs4budaS1uaOG6r24+IHwgLUYgIgorIjx04bqtcC10aW4+IHwgKC1jIHwgLUMpIDzEkeG7kWktdMaw4bujbmc+XSBbPMSR4buRaS10xrDhu6NuZz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gY29weSBbLWZdIDx04burLcSR4buRaS10xrDhu6NuZz4gPMSR4bq/bi3EkeG7kWktdMaw4bujbmc+IgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAiCisiKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPGzhu51pLW5o4bqvbj4gfCAtRiAiCisiPHThuq1wLXRpbj4gfCAoLWMgfCAtQykgPMSR4buRaS10xrDhu6NuZz5dIFs8xJHhu5FpLXTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8xJHhu5FpLXTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gc2hvdyBbPMSR4buRaS10xrDhu6NuZz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzEKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiIgorImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIG1lcmdlIFstdiB8IC1xXSBbLXMgPGNoaeG6v24tbMaw4bujYz4gXSA8bm90ZXMtcmVmPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMyCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjMzCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHJlbW92ZSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSByZW1vdmUgWzzEkeG7kWktdMaw4bujbmc+4oCmXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcHJ1bmUgWy1uIHwgLXZdIgorbXNnc3RyICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW4gfCAtdl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNgorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MQorbXNnaWQgImdpdCBub3RlcyBbbGlzdCBbPG9iamVjdD5dXSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFtsaXN0IFs8xJHhu5FpIHTGsOG7o25nPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6NDYKK21zZ2lkICJnaXQgbm90ZXMgYWRkIFs8b3B0aW9ucz5dIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBhZGQgWzxjw6FjLXTDuXktY2jhu41uPl0gWzzEkeG7kWktdMaw4bujbmc+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxCittc2dpZCAiZ2l0IG5vdGVzIGNvcHkgWzxvcHRpb25zPl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGNvcHkgWzxjw6FjLXTDuXktY2jhu41uPl0gPHThu6stxJHhu5FpLXTGsOG7o25nPiA8xJHhur9uLcSR4buRaS10xrDhu6NuZz4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MgorbXNnaWQgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIgorbXNnc3RyICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs8dOG7qy3EkeG7kWktdMaw4bujbmc+IDzEkeG6v24txJHhu5FpLXTGsOG7o25nPl3igKYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NworbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBbPGPDoWMtdMO5eS1jaOG7jW4+XSBbPMSR4buRaS10xrDhu6NuZz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjIKK21zZ2lkICJnaXQgbm90ZXMgZWRpdCBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgZWRpdCBbPMSR4buRaSB0xrDhu6NuZz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NjcKK21zZ2lkICJnaXQgbm90ZXMgc2hvdyBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgc2hvdyBbPMSR4buRaSB0xrDhu6NuZz5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzIKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgWzxvcHRpb25zPl0gPG5vdGVzLXJlZj4iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSBbPGPDoWMtdMO5eS1jaOG7jW4+XSA8bm90ZXMtcmVmPiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjczCittc2dpZCAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWzxjw6FjLXTDuXktY2jhu41uPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NAorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPGPDoWMtdMO5eS1jaOG7jW4+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc5Cittc2dpZCAiZ2l0IG5vdGVzIHJlbW92ZSBbPG9iamVjdD5dIgorbXNnc3RyICJnaXQgbm90ZXMgcmVtb3ZlIFs8xJHhu5FpIHTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4NAorbXNnaWQgImdpdCBub3RlcyBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIHBydW5lIFs8Y8OhYy10w7l5LWNo4buNbj5dIgorCisjOiBidWlsdGluL25vdGVzLmM6ODkKK21zZ2lkICJnaXQgbm90ZXMgZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIGdldC1yZWYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHN0YXJ0ICdzaG93JyBmb3Igb2JqZWN0ICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyBraOG7n2kgY2jhuqF5IOKAnHNob3figJ0gY2hvIMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE1MQorbXNnaWQgImNvdWxkIG5vdCByZWFkICdzaG93JyBvdXRwdXQiCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMga+G6v3QgeHXhuqV0IOKAnHNob3figJ0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgaG/DoG4gdGjDoG5oIOKAnHNob3figJ0gY2hvIMSR4buRaSB0xrDhu6NuZyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE3NCBidWlsdGluL3RhZy5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGZpbGUgJyVzJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHThuqFvIHThuq1wIHRpbiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5MworbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAiIgorIlhpbiBow6N5IMOhcCBk4bulbmcgbuG7mWkgZHVuZyBj4bunYSBnaGkgY2jDuiBz4butIGThu6VuZyBob+G6t2MgbMOgIHTDuXkgY2jhu41uIC1tIGhv4bq3YyBsw6AgLUYiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgImtow7RuZyB0aOG7gyBnaGkgxJHhu5FpIHTGsOG7o25nIGdoaSBjaMO6IChub3RlKSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAiTuG7mWkgZHVuZyBnaGkgY2jDuiBjw7JuIGzhuqFpICVzIgorCisjOiBidWlsdGluL25vdGVzLmM6MjMyIGJ1aWx0aW4vdGFnLmM6Njk1CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMzQgYnVpbHRpbi90YWcuYzo2OTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gb3IgcmVhZCAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgbeG7nyBoYXkgxJHhu41jIOKAnCVz4oCdIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUzIGJ1aWx0aW4vbm90ZXMuYzozMDQgYnVpbHRpbi9ub3Rlcy5jOjMwNgorIzogYnVpbHRpbi9ub3Rlcy5jOjM2NiBidWlsdGluL25vdGVzLmM6NDIxIGJ1aWx0aW4vbm90ZXMuYzo1MDcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTIgYnVpbHRpbi9ub3Rlcy5jOjU5MCBidWlsdGluL25vdGVzLmM6NjUzCisjOiBidWlsdGluL25vdGVzLmM6ODc3IGJ1aWx0aW4vdGFnLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgcGjDom4gZ2nhuqNpIOKAnCVz4oCdIG5oxrAgbMOgIG3hu5l0IHRoYW0gY2hp4bq/dSBo4bujcCBs4buHLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVhZCBvYmplY3QgJyVzJy4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7jWMgxJHhu5FpIHTGsOG7o25nIOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgImtow7RuZyB0aOG7gyDEkeG7jWMgZOG7ryBsaeG7h3UgZ2hpIGNow7ogdOG7qyDEkeG7kWkgdMaw4bujbmcga2jDtG5nLWJsb2Ig4oCcJXPigJ0uIgorCisjOiBidWlsdGluL25vdGVzLmM6MzU5IGJ1aWx0aW4vbm90ZXMuYzo0MTQgYnVpbHRpbi9ub3Rlcy5jOjQ5MAorIzogYnVpbHRpbi9ub3Rlcy5jOjUwMiBidWlsdGluL25vdGVzLmM6NTc4IGJ1aWx0aW4vbm90ZXMuYzo2NDYKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NDIKK21zZ2lkICJ0b28gbWFueSBwYXJhbWV0ZXJzIgorbXNnc3RyICJxdcOhIG5oaeG7gXUgxJHhu5FpIHPhu5EiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozNzIgYnVpbHRpbi9ub3Rlcy5jOjY1OQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBub3RlIGZvdW5kIGZvciBvYmplY3QgJXMuIgorbXNnc3RyICJraMO0bmcgdMOsbSB0aOG6pXkgZ2hpIGNow7ogY2hvIMSR4buRaSB0xrDhu6NuZyAlcy4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTMgYnVpbHRpbi9ub3Rlcy5jOjU1NgorbXNnaWQgIm5vdGUgY29udGVudHMgYXMgYSBzdHJpbmciCittc2dzdHIgIm7hu5lpIGR1bmcgZ2hpIGNow7ogKG5vdGUpIG7hurFtIHRyb25nIG3hu5l0IGNodeG7l2kiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTYgYnVpbHRpbi9ub3Rlcy5jOjU1OQorbXNnaWQgIm5vdGUgY29udGVudHMgaW4gYSBmaWxlIgorbXNnc3RyICJu4buZaSBkdW5nIGdoaSBjaMO6IChub3RlKSBu4bqxbSB0cm9uZyBt4buZdCB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTggYnVpbHRpbi9ub3Rlcy5jOjQwMSBidWlsdGluL25vdGVzLmM6NTYxCisjOiBidWlsdGluL25vdGVzLmM6NTY0IGJ1aWx0aW4vdGFnLmM6NjMwCittc2dpZCAib2JqZWN0IgorbXNnc3RyICLEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozOTkgYnVpbHRpbi9ub3Rlcy5jOjU2MgorbXNnaWQgInJldXNlIGFuZCBlZGl0IHNwZWNpZmllZCBub3RlIG9iamVjdCIKK21zZ3N0ciAiZMO5bmcgbOG6oWkgbmjGsG5nIGPDsyBz4butYSBjaOG7r2EgxJHhu5FpIHTGsOG7o25nIG5vdGUgxJHDoyBjaOG7iSByYSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwMiBidWlsdGluL25vdGVzLmM6NTY1Cittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICJkw7luZyBs4bqhaSDEkeG7kWkgdMaw4bujbmcgZ2hpIGNow7ogKG5vdGUpIMSRw6MgY2jhu4kgcmEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDUgYnVpbHRpbi9ub3Rlcy5jOjU2OAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAiY2hvIGzGsHUgdHLhu68gZ2hpIGNow7ogdHLhu5FuZyBy4buXbmciCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDYgYnVpbHRpbi9ub3Rlcy5jOjQ3NworbXNnaWQgInJlcGxhY2UgZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgInRoYXkgdGjhur8gZ2hpIGNow7ogdHLGsOG7m2MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgdGjDqm0gY8OhYyBnaGkgY2jDui4gxJDDoyB0w6xtIHRo4bqleSBjw6FjIGdoaSBjaMO6IMSRw6MgY8OzIHPhurVuIGNobyDEkeG7kWkgdMaw4bujbmcgIgorIiVzLiBT4butIGThu6VuZyB0w7l5IGNo4buNbiDigJwtZuKAnSDEkeG7gyBnaGkgxJHDqCBsw6puIGPDoWMgZ2hpIGNow7ogY8WpIgorCisjOiBidWlsdGluL25vdGVzLmM6NDQ2IGJ1aWx0aW4vbm90ZXMuYzo1MjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3ZlcndyaXRpbmcgZXhpc3Rpbmcgbm90ZXMgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICLEkGFuZyBnaGkgxJHDqCBsw6puIGdoaSBjaMO6IGPFqSBjaG8gxJHhu5FpIHTGsOG7o25nICVzXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NTcgYnVpbHRpbi9ub3Rlcy5jOjYxOCBidWlsdGluL25vdGVzLmM6ODgyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIG5vdGUgZm9yIG9iamVjdCAlc1xuIgorbXNnc3RyICLEkGFuZyBn4buhIGLhu48gZ2hpIGNow7ogKG5vdGUpIGNobyDEkeG7kWkgdMaw4bujbmcgJXNcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3OAorbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICLEkeG7jWMgY8OhYyDEkeG7kWkgdMaw4bujbmcgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL25vdGVzLmM6NDgwCittc2dpZCAibG9hZCByZXdyaXRpbmcgY29uZmlnIGZvciA8Y29tbWFuZD4gKGltcGxpZXMgLS1zdGRpbikiCittc2dzdHIgInThuqNpIGPhuqV1IGjDrG5oIGNow6lwIGzhuqFpIGNobyA8bOG7h25oPiAobmfhuqdtIMSR4buLbmggbMOgIC0tc3RkaW4pIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICJxdcOhIMOtdCDEkeG7kWkgc+G7kSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUxOQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiQ2Fubm90IGNvcHkgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4Mgc2FvIGNow6lwIGPDoWMgZ2hpIGNow7ouIMSQw6MgdMOsbSB0aOG6pXkgY8OhYyBnaGkgY2jDuiDEkcOjIGPDsyBz4bq1biBjaG8gxJHhu5FpICIKKyJ0xrDhu6NuZyAlcy4gU+G7rSBk4bulbmcgdMO5eSBjaOG7jW4g4oCcLWbigJ0gxJHhu4MgZ2hpIMSRw6ggbMOqbiBjw6FjIGdoaSBjaMO6IGPFqSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjUzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIG5vdGVzIG9uIHNvdXJjZSBvYmplY3QgJXMuIENhbm5vdCBjb3B5LiIKK21zZ3N0ciAiVGhp4bq/dSBnaGkgY2jDuiB0csOqbiDEkeG7kWkgdMaw4bujbmcgbmd14buTbiAlcy4gS2jDtG5nIHRo4buDIHNhbyBjaMOpcC4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSAtbS8tRi8tYy8tQyBvcHRpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIGZvciB0aGUgJ2VkaXQnIHN1YmNvbW1hbmQuXG4iCisiUGxlYXNlIHVzZSAnZ2l0IG5vdGVzIGFkZCAtZiAtbS8tRi8tYy8tQycgaW5zdGVhZC5cbiIKK21zZ3N0ciAiIgorIkPDoWMgdMO5eSBjaOG7jW4gLW0vLUYvLWMvLUMgxJHDoyBj4buVIGtow7RuZyBjw7JuIGTDuW5nIG7hu69hIGNobyBs4buHbmggY29uIOKAnGVkaXTigJ0uXG4iCisiWGluIGjDo3kgc+G7rSBk4bulbmcgbOG7h25oIHNhdSDEkeG7gyB0aGF5IHRo4bq/OiDigJxnaXQgbm90ZXMgYWRkIC1mIC1tLy1GLy1jLy1D4oCdLlxuIgorCisjOiBidWlsdGluL25vdGVzLmM6NzY0CiBtc2dpZCAiR2VuZXJhbCBvcHRpb25zIgotbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIGNodW5nIgorbXNnc3RyICJUw7l5IGNo4buNbiBjaHVuZyIKIAotIzogZ2l0azoxMTM5OAotbXNnaWQgIlVzZSB0aGVtZWQgd2lkZ2V0cyIKLW1zZ3N0ciAiRMO5bmcgY8OhYyB3aWRnZXQgY2jhu6cgxJHhu4EiCisjOiBidWlsdGluL25vdGVzLmM6NzY2Cittc2dpZCAiTWVyZ2Ugb3B0aW9ucyIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gduG7gSBow7JhIHRy4buZbiIKIAotIzogZ2l0azoxMTQwMAotbXNnaWQgIihjaGFuZ2UgcmVxdWlyZXMgcmVzdGFydCkiCi1tc2dzdHIgIijEkeG7gyB0aGF5IMSR4buVaSBj4bqnbiBraOG7n2kgxJHhu5luZyBs4bqhaSkiCi0KLSM6IGdpdGs6MTE0MDIKLW1zZ2lkICIoY3VycmVudGx5IHVuYXZhaWxhYmxlKSIKLW1zZ3N0ciAiKGhp4buHbiB04bqhaSBraMO0bmcgc+G6tW4gc8OgbmcpIgotCi0jOiBnaXRrOjExNDEzCi1tc2dpZCAiQ29sb3JzOiBwcmVzcyB0byBjaG9vc2UiCi1tc2dzdHIgIk3DoHUgc+G6r2M6IGLhuqVtIHbDoG8gbsO6dCBwaMOtYSBkxrDhu5tpIMSR4buDIGNo4buNbiBtw6B1IgotCi0jOiBnaXRrOjExNDE2Ci1tc2dpZCAiSW50ZXJmYWNlIgotbXNnc3RyICJHaWFvIGRp4buHbiIKLQotIzogZ2l0azoxMTQxNwotbXNnaWQgImludGVyZmFjZSIKLW1zZ3N0ciAiZ2lhbyBkaeG7h24iCi0KLSM6IGdpdGs6MTE0MjAKLW1zZ2lkICJCYWNrZ3JvdW5kIgotbXNnc3RyICJO4buBbiIKLQotIzogZ2l0azoxMTQyMSBnaXRrOjExNDUxCi1tc2dpZCAiYmFja2dyb3VuZCIKLW1zZ3N0ciAibuG7gW4iCi0KLSM6IGdpdGs6MTE0MjQKLW1zZ2lkICJGb3JlZ3JvdW5kIgotbXNnc3RyICJUaeG7gW4gY+G6o25oIgotCi0jOiBnaXRrOjExNDI1Ci1tc2dpZCAiZm9yZWdyb3VuZCIKLW1zZ3N0ciAidGnhu4FuIGPhuqNuaCIKLQotIzogZ2l0azoxMTQyOAotbXNnaWQgIkRpZmY6IG9sZCBsaW5lcyIKLW1zZ3N0ciAiU28gc8Ohbmg6IGTDsm5nIGPFqSIKLQotIzogZ2l0azoxMTQyOQotbXNnaWQgImRpZmYgb2xkIGxpbmVzIgotbXNnc3RyICJkaWZmIGTDsm5nIGPFqSIKLQotIzogZ2l0azoxMTQzMwotbXNnaWQgIkRpZmY6IG5ldyBsaW5lcyIKLW1zZ3N0ciAiU28gc8Ohbmg6IGTDsm5nIG3hu5tpIgotCi0jOiBnaXRrOjExNDM0Ci1tc2dpZCAiZGlmZiBuZXcgbGluZXMiCi1tc2dzdHIgIm3DoHUgZMOybmcgbeG7m2kiCi0KLSM6IGdpdGs6MTE0MzgKLW1zZ2lkICJEaWZmOiBodW5rIGhlYWRlciIKLW1zZ3N0ciAiU28gc8Ohbmg6IHBo4bqnbiDEkeG6p3UgY+G7p2EgxJFv4bqhbiIKLQotIzogZ2l0azoxMTQ0MAotbXNnaWQgImRpZmYgaHVuayBoZWFkZXIiCi1tc2dzdHIgIm3DoHUgY+G7p2EgcGjhuqduIMSR4bqndSBj4bunYSDEkW/huqFuIGtoaSBzbyBzw6FuaCIKLQotIzogZ2l0azoxMTQ0NAotbXNnaWQgIk1hcmtlZCBsaW5lIGJnIgotbXNnc3RyICJO4buBbiBkw7JuZyDEkcOhbmggZOG6pXUiCi0KLSM6IGdpdGs6MTE0NDYKLW1zZ2lkICJtYXJrZWQgbGluZSBiYWNrZ3JvdW5kIgotbXNnc3RyICJu4buBbiBkw7JuZyDEkcaw4bujYyDEkcOhbmggZOG6pXUiCi0KLSM6IGdpdGs6MTE0NTAKLW1zZ2lkICJTZWxlY3QgYmciCi1tc2dzdHIgIk3DoHUgbuG7gW4iCi0KLSM6IGdpdGs6MTE0NTkKLW1zZ2lkICJGb250czogcHJlc3MgdG8gY2hvb3NlIgotbXNnc3RyICJQaMO0bmcgY2jhu686IGLhuqVtIHbDoG8gY8OhYyBuw7p0IOG7nyBkxrDhu5tpIMSR4buDIGNo4buNbiIKLQotIzogZ2l0azoxMTQ2MQotbXNnaWQgIk1haW4gZm9udCIKLW1zZ3N0ciAiUGjDtG5nIGNo4buvIGNow61uaCIKLQotIzogZ2l0azoxMTQ2MgotbXNnaWQgIkRpZmYgZGlzcGxheSBmb250IgotbXNnc3RyICJQaMO0bmcgY2jhu68gZMO5bmcga2hpIHNvIHPDoW5oIgotCi0jOiBnaXRrOjExNDYzCi1tc2dpZCAiVXNlciBpbnRlcmZhY2UgZm9udCIKLW1zZ3N0ciAiUGjDtG5nIGNo4buvIGdpYW8gZGnhu4duIgotCi0jOiBnaXRrOjExNDg1Ci1tc2dpZCAiR2l0ayBwcmVmZXJlbmNlcyIKLW1zZ3N0ciAiQ8OhIG5ow6JuIGjDs2EgY8OhYyBjw6BpIMSR4bq3dCBjaG8gR2l0ayIKLQotIzogZ2l0azoxMTQ5NAotbXNnaWQgIkdlbmVyYWwiCi1tc2dzdHIgIkNodW5nIgotCi0jOiBnaXRrOjExNDk1Ci1tc2dpZCAiQ29sb3JzIgotbXNnc3RyICJNw6B1IHPhuq9jIgotCi0jOiBnaXRrOjExNDk2Ci1tc2dpZCAiRm9udHMiCi1tc2dzdHIgIlBow7RuZyBjaOG7ryIKLQotIzogZ2l0azoxMTU0NgotIywgdGNsLWZvcm1hdAotbXNnaWQgIkdpdGs6IGNob29zZSBjb2xvciBmb3IgJXMiCi1tc2dzdHIgIkdpdGs6IGNo4buNbiBtw6B1IGNobyAlcyIKLQotIzogZ2l0azoxMjA1OQorIzogYnVpbHRpbi9ub3Rlcy5jOjc2OAogbXNnaWQgIiIKLSJTb3JyeSwgZ2l0ayBjYW5ub3QgcnVuIHdpdGggdGhpcyB2ZXJzaW9uIG9mIFRjbC9Uay5cbiIKLSIgR2l0ayByZXF1aXJlcyBhdCBsZWFzdCBUY2wvVGsgOC40LiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCiBtc2dzdHIgIiIKLSJS4bqldCB0aeG6v2MsIGdpdGsga2jDtG5nIHRo4buDIGNo4bqheSBUY2wvVGsgcGhpw6puIGLhuqNuIG7DoHkuXG4iCi0iIEdpdGsgY+G6p24gw610IG5o4bqldCBsw6AgVGNsL1RrIDguNC4iCisicGjDom4gZ2nhuqNpIGPDoWMgeHVuZyDEkeG7mXQg4oCcbm90ZXPigJ0gc+G7rSBk4bulbmcgY2hp4bq/biBsxrDhu6NjIMSRw6MgxJHGsGEgcmEgKG1hbnVhbC9vdXJzLyIKKyJ0aGVpcnMvdW5pb24vY2F0X3NvcnRfdW5pcSkiCiAKLSM6IGdpdGs6MTIyNjkKLW1zZ2lkICJDYW5ub3QgZmluZCBhIGdpdCByZXBvc2l0b3J5IGhlcmUuIgotbXNnc3RyICJLaMO0bmcgdGjhu4MgdMOsbSB0aOG6pXkga2hvIGdpdCDhu58gxJHDonkuIgorIzogYnVpbHRpbi9ub3Rlcy5jOjc3MAorbXNnaWQgIkNvbW1pdHRpbmcgdW5tZXJnZWQgbm90ZXMiCittc2dzdHIgIkNodXnhu4NuIGdpYW8gY8OhYyBub3RlIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIgogCi0jOiBnaXRrOjEyMzE2Ci0jLCB0Y2wtZm9ybWF0Ci1tc2dpZCAiQW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IGJvdGggcmV2aXNpb24gYW5kIGZpbGVuYW1lIgotbXNnc3RyICLEkOG7kWkgc+G7kSDigJwlc+KAnSBjaMawYSByw7UgcsOgbmc6IHbhu6thIGzDoCDEkWnhu4NtIHjDqXQgZHV54buHdCB24burYSBsw6AgdMOqbiB04bqtcCB0aW4iCisjOiBidWlsdGluL25vdGVzLmM6NzcyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAiIgorImPDoWMgbm90ZSBjdeG7kWkgY8O5bmcgxJHGsOG7o2MgaMOyYSB0cuG7mW4gYuG7n2kgY8OhYyBub3RlIGNoxrBhIGjDsmEgdHLhu5luIGPhu6dhIGzhuqduIGNodXnhu4NuICIKKyJnaWFvIgogCi0jOiBnaXRrOjEyMzI4Ci1tc2dpZCAiQmFkIGFyZ3VtZW50cyB0byBnaXRrOiIKLW1zZ3N0ciAixJDhu5FpIHPhu5EgY2hvIGdpdGsga2jDtG5nIGjhu6NwIGzhu4c6IgorIzogYnVpbHRpbi9ub3Rlcy5jOjc3NAorbXNnaWQgIkFib3J0aW5nIG5vdGVzIG1lcmdlIHJlc29sdXRpb24iCittc2dzdHIgIkjhu6d5IGLhu48gcGjDom4gZ2nhuqNpIGdoaSBjaMO6IChub3RlKSBow7JhIHRy4buZbiIKIAotI34gbXNnaWQgIm1jIgotI34gbXNnc3RyICJtYyIKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NzYKK21zZ2lkICJhYm9ydCBub3RlcyBtZXJnZSIKK21zZ3N0ciAiYuG7jyBxdWEgaMOyYSB0cuG7mW4gY8OhYyBnaGkgY2jDuiAobm90ZSkiCiAKLSN+IG1zZ2lkICJuZXh0IgotI34gbXNnc3RyICJ0aeG6v3AiCisjOiBidWlsdGluL25vdGVzLmM6ODUzCisjLCBjLWZvcm1hdAorbXNnaWQgIkEgbm90ZXMgbWVyZ2UgaW50byAlcyBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0ICVzIgorbXNnc3RyICJDw6FjIGdoaSBjaMO6IGjDsmEgdHLhu5luIHbDoG8gJXMgxJHDoyBz4bq1biB0cm9uZyBxdcOhIHRyw6xuaCB44butIGzDvSB04bqhaSAlcyIKIAotI34gbXNnaWQgInByZXYiCi0jfiBtc2dzdHIgInRyxrDhu5tjIgorIzogYnVpbHRpbi9ub3Rlcy5jOjg4MAorIywgYy1mb3JtYXQKK21zZ2lkICJPYmplY3QgJXMgaGFzIG5vIG5vdGVcbiIKK21zZ3N0ciAixJDhu5FpIHTGsOG7o25nICVzIGtow7RuZyBjw7MgZ2hpIGNow7ogKG5vdGUpXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4OTIKK21zZ2lkICJhdHRlbXB0IHRvIHJlbW92ZSBub24tZXhpc3RlbnQgbm90ZSBpcyBub3QgYW4gZXJyb3IiCittc2dzdHIgImPhu5EgZ+G6r25nIGfhu6EgYuG7jyBt4buZdCBub3RlIGNoxrBhIHThu6tuZyB04buTbiB04bqhaSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBs4buXaSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5NQorbXNnaWQgInJlYWQgb2JqZWN0IG5hbWVzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0IgorbXNnc3RyICLEkeG7jWMgdMOqbiDEkeG7kWkgdMaw4bujbmcgdOG7qyB0aGnhur90IGLhu4sgbmjhuq1wIGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo5NzYKK21zZ2lkICJub3Rlcy1yZWYiCittc2dzdHIgIm5vdGVzLXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3NworbXNnaWQgInVzZSBub3RlcyBmcm9tIDxub3Rlcy1yZWY+IgorbXNnc3RyICJkw7luZyDigJxub3Rlc+KAnSB04burIDxub3Rlcy1yZWY+IgorCisjOiBidWlsdGluL25vdGVzLmM6MTAxMiBidWlsdGluL3JlbW90ZS5jOjE1ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBzdWJjb21tYW5kOiAlcyIKK21zZ3N0ciAiS2jDtG5nIGhp4buDdSBjw6J1IGzhu4duaCBjb246ICVzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI4Cittc2dpZCAiIgorImdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgWzxvcHRpb25zPi4uLl0gWzwgPHJlZi1saXN0PiB8IDwgPG9iamVjdC1saXN0Pl0iCittc2dzdHIgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFtjw6FjLXTDuXktY2jhu41u4oCmXSBbPCA8ZGFuaC1zw6FjaC10aGFtLWNoaeG6v3U+IHwgPCAiCisiPGRhbmgtc8OhY2gtxJHhu5FpLXTGsOG7o25nPl0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjkKK21zZ2lkICIiCisiZ2l0IHBhY2stb2JqZWN0cyBbPG9wdGlvbnM+Li4uXSA8YmFzZS1uYW1lPiBbPCA8cmVmLWxpc3Q+IHwgPCA8b2JqZWN0LWxpc3Q+XSIKK21zZ3N0ciAiIgorImdpdCBwYWNrLW9iamVjdHMgW2PDoWMtdMO5eS1jaOG7jW7igKZdIDxiYXNlLW5hbWU+IFs8IDxkYW5oLXPDoWNoLXJlZj4gfCA8IDxkYW5oLSIKKyJzw6FjaC3EkeG7kWktdMaw4bujbmc+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICJs4buXaSBnaeG6o2kgbsOpbiAoJWQpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjc3MQorbXNnaWQgIldyaXRpbmcgb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcgZ2hpIGzhuqFpIGPDoWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjEwMTEKK21zZ2lkICJkaXNhYmxpbmcgYml0bWFwIHdyaXRpbmcsIGFzIHNvbWUgb2JqZWN0cyBhcmUgbm90IGJlaW5nIHBhY2tlZCIKK21zZ3N0ciAidOG6r3QgZ2hpIGJpdG1hcCwgbmjGsCB24bqteSBt4buZdCBz4buRIMSR4buRaSB0xrDhu6NuZyBz4bq9IGtow7RuZyDEkcaw4bujYyDEkcOzbmcgZ8OzaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyMTcxCittc2dpZCAiQ29tcHJlc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcgbsOpbiBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIGluZGV4IHZlcnNpb24gJXMiCittc2dzdHIgInBoacOqbiBi4bqjbiBt4bulYyBs4bulYyBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oyAlcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTcyCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBpbmRleCB2ZXJzaW9uICclcyciCittc2dzdHIgInBoacOqbiBi4bqjbiBt4bulYyBs4bulYyBzYWkg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYwMgorbXNnaWQgImRvIG5vdCBzaG93IHByb2dyZXNzIG1ldGVyIgorbXNnc3RyICJraMO0bmcgaGnhu4NuIHRo4buLIGLhu5kgxJFvIHRp4bq/biB0csOsbmgiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYwNAorbXNnaWQgInNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgImhp4buDbiB0aOG7iyBi4buZIMSRbyB0aeG6v24gdHLDrG5oIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDYKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGLhu5kgxJFvIHRp4bq/biB0cmnhu4NuIHRyb25nIHN14buRdCBwaGEgZ2hpIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjA5Cittc2dpZCAic2ltaWxhciB0byAtLWFsbC1wcm9ncmVzcyB3aGVuIHByb2dyZXNzIG1ldGVyIGlzIHNob3duIgorbXNnc3RyICJ0xrDGoW5nIHThu7EgLS1hbGwtcHJvZ3Jlc3Mga2hpIGLhu5kgxJFvIHRp4bq/biB0csOsbmggxJHGsOG7o2MgeHXhuqV0IGhp4buHbiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjEwCittc2dpZCAidmVyc2lvblssb2Zmc2V0XSIKK21zZ3N0ciAicGhpw6puIGLhuqNuWyxvZmZzZXRdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTEKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICJnaGkgdOG6rXAgdGluIGLhuqNuZyBt4bulYyBs4bulYyBnw7NpIChwYWNrKSDhu58gcGhpw6puIGLhuqNuIMSR4buLbmggZOG6oW5nIGlkeCDEkcOjIGNobyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE0Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAia2PDrWggdGjGsOG7m2MgdOG7kWkgxJFhIGNobyB04bqtcCB0aW4gZ8OzaSDEkcaw4bujYyB04bqhbyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE2Cittc2dpZCAiaWdub3JlIGJvcnJvd2VkIG9iamVjdHMgZnJvbSBhbHRlcm5hdGUgb2JqZWN0IHN0b3JlIgorbXNnc3RyICJi4buPIHF1YSBjw6FjIMSR4buRaSB0xrDhu6NuZyB2YXkgbcaw4bujbiB04burIGtobyDEkeG7kWkgdMaw4bujbmcgdGhheSB0aOG6vyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE4Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICJi4buPIHF1YSBjw6FjIMSR4buRaSB0xrDhu6NuZyDEkcOzbmcgZ8OzaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjIwCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgb2JqZWN0cyIKK21zZ3N0ciAiZ2nhu5tpIGjhuqFuIGPhu61hIHPhu5UgxJHDs25nIGfDs2kgdGhlbyDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyMgorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG1lbW9yeSBpbiBhZGRpdGlvbiB0byBvYmplY3QgbGltaXQiCittc2dzdHIgImdp4bubaSBo4bqhbiBj4butYSBz4buVIMSRw7NuZyBnw7NpIHRoZW8gYuG7mSBuaOG7myBj4buZbmcgdGjDqm0gduG7m2kgZ2nhu5tpIGjhuqFuIMSR4buRaSB0xrDhu6NuZyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjI0Cittc2dpZCAibWF4aW11bSBsZW5ndGggb2YgZGVsdGEgY2hhaW4gYWxsb3dlZCBpbiB0aGUgcmVzdWx0aW5nIHBhY2siCittc2dzdHIgIsSR4buZIGTDoGkgdOG7kWkgxJFhIGPhu6dhIGNodeG7l2kgbcOzYyB4w61jaCDigJxkZWx0YeKAnSDEkcaw4bujYyBwaMOpcCB0cm9uZyBnw7NpIGvhur90IHF14bqjIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjYKK21zZ2lkICJyZXVzZSBleGlzdGluZyBkZWx0YXMiCittc2dzdHIgImTDuW5nIGzhuqFpIGPDoWMgZGVsdGEgc+G6tW4gY8OzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjgKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICJkw7luZyBs4bqhaSBjw6FjIMSR4buRaSB0xrDhu6NuZyBz4bq1biBjw7MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzMAorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAiZMO5bmcgY8OhYyDEkeG7kWkgdMaw4bujbmcgT0ZTX0RFTFRBIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzIKK21zZ2lkICJ1c2UgdGhyZWFkcyB3aGVuIHNlYXJjaGluZyBmb3IgYmVzdCBkZWx0YSBtYXRjaGVzIgorbXNnc3RyICJz4butIGThu6VuZyBjw6FjIHR1eeG6v24gdHLDrG5oIGtoaSB0w6xtIGtp4bq/bSBjaG8gY8OhYyBt4bqrdSBraOG7m3AgZGVsdGEgdOG7kXQgbmjhuqV0IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzQKK21zZ2lkICJkbyBub3QgY3JlYXRlIGFuIGVtcHR5IHBhY2sgb3V0cHV0IgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8ga+G6v3QgeHXhuqV0IGfDs2kgdHLhu5FuZyBy4buXbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzNgorbXNnaWQgInJlYWQgcmV2aXNpb24gYXJndW1lbnRzIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIiDEkeG7jWMgdGhhbSBz4buRIOKAnHJldmlzaW9u4oCdIHThu6sgdGhp4bq/dCBi4buLIG5o4bqtcCBjaHXhuqluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzgKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAiZ2nhu5tpIGjhuqFuIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRow6BuaCBuaOG7r25nIGPDoWkgbcOgIGNow7puZyB24bqrbiBjaMawYSDEkcaw4bujYyDEkcOzbmcgZ8OzaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQxCittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGFueSByZWZlcmVuY2UiCittc2dzdHIgImJhbyBn4buTbSBjw6FjIMSR4buRaSB0xrDhu6NuZyBjw7MgdGjhu4MgxJHhu41jIMSRxrDhu6NjIHThu6sgYuG6pXQga+G7syB0aGFtIGNoaeG6v3UgbsOgbyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQ0Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIGJ5IHJlZmxvZyBlbnRyaWVzIgorbXNnc3RyICJiYW8gZ+G7k20gY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHGsOG7o2MgdGhhbSBjaGnhur91IGLhu59pIGPDoWMgbeG7pWMgcmVmbG9nIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDcKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgdG8gYnkgdGhlIGluZGV4IgorbXNnc3RyICJiYW8gZ+G7k20gY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHGsOG7o2MgdGhhbSBjaGnhur91IGLhu59pIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTAKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgInh14bqldCBnw7NpIHJhIMSR4bqndSByYSB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTIKK21zZ2lkICJpbmNsdWRlIHRhZyBvYmplY3RzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cyB0byBiZSBwYWNrZWQiCittc2dzdHIgImJhbyBn4buTbSBjw6FjIMSR4buRaSB0xrDhu6NuZyB0aGFtIGNoaeG6v3UgxJHhur9uIGPDoWMgxJHhu5FpIHTGsOG7o25nIMSRxrDhu6NjIMSRw7NuZyBnw7NpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTQKK21zZ2lkICJrZWVwIHVucmVhY2hhYmxlIG9iamVjdHMiCittc2dzdHIgImdp4buvIGzhuqFpIGPDoWMgxJHhu5FpIHTGsOG7o25nIGtow7RuZyB0aOG7gyDEkeG7jWMgxJHGsOG7o2MiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1NSBwYXJzZS1vcHRpb25zLmg6MTQyCittc2dpZCAidGltZSIKK21zZ3N0ciAidGjhu51pLWdpYW4iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1NgorbXNnaWQgInVucGFjayB1bnJlYWNoYWJsZSBvYmplY3RzIG5ld2VyIHRoYW4gPHRpbWU+IgorbXNnc3RyICIiCisieOG6oyBuw6luIChn4buhIGto4buPaSBnw7NpKSBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgdGjhu4MgxJHhu41jIMSRxrDhu6NjIG3hu5tpIGjGoW4gPHRo4budaS1naWFuPiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU5Cittc2dpZCAiY3JlYXRlIHRoaW4gcGFja3MiCittc2dzdHIgInThuqFvIGfDs2kgbmjhurkiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2MQorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICJ04bqhbyBnw7NpIMSR4buDIHBow7kgaOG7o3AgY2hvIGzhuqV5IHbhu4EgbsO0bmcgKHNoYWxsb3cpIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjMKK21zZ2lkICJpZ25vcmUgcGFja3MgdGhhdCBoYXZlIGNvbXBhbmlvbiAua2VlcCBmaWxlIgorbXNnc3RyICJi4buPIHF1YSBjw6FjIGfDs2kgbcOgIG7DsyBjw7MgdOG6rXAgdGluIC5rZWVwIMSRaSBrw6htIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjUKK21zZ2lkICJwYWNrIGNvbXByZXNzaW9uIGxldmVsIgorbXNnc3RyICJt4bupYyBuw6luIGfDs2kiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2NworbXNnaWQgImRvIG5vdCBoaWRlIGNvbW1pdHMgYnkgZ3JhZnRzIgorbXNnc3RyICJraMO0bmcg4bqpbiBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8gYuG7n2kg4oCcZ3JhZnRz4oCdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NjkKK21zZ2lkICJ1c2UgYSBiaXRtYXAgaW5kZXggaWYgYXZhaWxhYmxlIHRvIHNwZWVkIHVwIGNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgImTDuW5nIG3hu6VjIGzhu6VjIMOhbmggeOG6oSBu4bq/dSBjw7MgdGjhu4MgxJHGsOG7o2MgxJHhu4MgbsOibmcgY2FvIHThu5FjIMSR4buZIMSR4bq/bSDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY3MQorbXNnaWQgIndyaXRlIGEgYml0bWFwIGluZGV4IHRvZ2V0aGVyIHdpdGggdGhlIHBhY2sgaW5kZXgiCittc2dzdHIgImdoaSBt4buZdCBt4bulYyBs4bulYyDDoW5oIHjhuqEgY8O5bmcgduG7m2kgbeG7pWMgbOG7pWMgZ8OzaSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNzYyCittc2dpZCAiQ291bnRpbmcgb2JqZWN0cyIKK21zZ3N0ciAixJBhbmcgxJHhur9tIGPDoWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjYKK21zZ2lkICJnaXQgcGFjay1yZWZzIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgcGFjay1yZWZzIFs8Y8OhYy10w7l5LWNo4buNbj5dIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE0Cittc2dpZCAicGFjayBldmVyeXRoaW5nIgorbXNnc3RyICLEkcOzbmcgZ8OzaSBt4buNaSB0aOG7qSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzoxNQorbXNnaWQgInBydW5lIGxvb3NlIHJlZnMgKGRlZmF1bHQpIgorbXNnc3RyICJwcnVuZSAoY+G6r3QgY+G7pXQpIG5o4buvbmcgdGhhbSBjaGnhur91IGLhu4sgbeG6pXQgKG3hurdjIMSR4buLbmgpIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjcKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MAorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICLEkGFuZyBn4buhIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRyw7luZyBs4bq3cCIKKworIzogYnVpbHRpbi9wcnVuZS5jOjExCittc2dpZCAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1leHBpcmUgPHRpbWU+XSBbLS1dIFs8aGVhZD4uLi5dIgorbXNnc3RyICJnaXQgcHJ1bmUgWy1uXSBbLXZdIFstLWV4cGlyZSA8dGjhu51pLWdpYW4+XSBbLS1dIFs8aGVhZD7igKZdIgorCisjOiBidWlsdGluL3BydW5lLmM6MTA1IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjEKK21zZ2lkICJkbyBub3QgcmVtb3ZlLCBzaG93IG9ubHkiCittc2dzdHIgImtow7RuZyBn4buhIGLhu48sIGNo4buJIGhp4buDbiB0aOG7iyIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwNiBidWlsdGluL3dvcmt0cmVlLmM6MTIyCittc2dpZCAicmVwb3J0IHBydW5lZCBvYmplY3RzIgorbXNnc3RyICJiw6FvIGPDoW8gY8OhYyDEkeG7kWkgdMaw4bujbmcgxJHDoyBwcnVuZSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwOSBidWlsdGluL3dvcmt0cmVlLmM6MTI0Cittc2dpZCAiZXhwaXJlIG9iamVjdHMgb2xkZXIgdGhhbiA8dGltZT4iCittc2dzdHIgImPDoWMgxJHhu5FpIHTGsOG7o25nIGjhur90IGjhuqFuIGPFqSBoxqFuIGtob+G6o25nIDx0aOG7nWkgZ2lhbj4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjY5Cittc2dpZCAiZ2l0IHB1bGwgW29wdGlvbnNdIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBbY8OhYy10w7l5LWNo4buNbl0gWzxraG8tY2jhu6lhPiBbPHJlZnNwZWM+4oCmXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjExMworbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIGxpw6puIHF1YW4gxJHhur9uIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3B1bGwuYzoxMTYKK21zZ2lkICJpbmNvcnBvcmF0ZSBjaGFuZ2VzIGJ5IHJlYmFzaW5nIHJhdGhlciB0aGFuIG1lcmdpbmciCittc2dzdHIgImPDoWMgdGhheSDEkeG7lWkgaOG7o3AgbmjhuqV0IGLhurFuZyBj4bqjaSB04buVIHRoYXkgdsOsIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3B1bGwuYzoxNDAgYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgImNobyBwaMOpcCBjaHV54buDbi10aeG6v3AtbmhhbmgiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjE0NgorbXNnaWQgInZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAidGjhuqltIHRyYSB4ZW0gbOG6p24gY2h1eeG7g24gZ2lhbyBjw7MgdMOqbiDEkcOzIGPDsyBjaOG7ryBrw70gR1BHIGjhu6NwIGzhu4cgaGF5IGtow7RuZyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTYwCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIGxpw6puIHF1YW4gxJHhur9uIGzhu4duaCBs4bqleSB24buBIgorCisjOiBidWlsdGluL3B1bGwuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCB2YWx1ZSBmb3IgcHVsbC5mZjogJXMiCittc2dzdHIgIkdpw6EgdHLhu4sga2jDtG5nIGjhu6NwIGzhu4cgY2hvIHB1bGwuZmY6ICVzIgorCisjOiBidWlsdGluL3B1bGwuYzozNTIKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91IGhhdmUgdW5zdGFnZWQgY2hhbmdlcy4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgcHVsbCB24bubaSBj4bqjaSB04buVOiBC4bqhbiBjw7MgY8OhYyB0aGF5IMSR4buVaSBjaMawYSDEkcaw4bujYyDEkcawYSBsw6puIGLhu4cgcGjDs25nLiIKKworIzogYnVpbHRpbi9wdWxsLmM6MzU4Cittc2dpZCAiQWRkaXRpb25hbGx5LCB5b3VyIGluZGV4IGNvbnRhaW5zIHVuY29tbWl0dGVkIGNoYW5nZXMuIgorbXNnc3RyICIiCisiVGjDqm0gdsOgbyDEkcOzLCBi4bqjbmcgbeG7pWMgbOG7pWMgY+G7p2EgYuG6oW4gY8OzIGNo4bupYSBjw6FjIHRoYXkgxJHhu5VpIGNoxrBhIMSRxrDhu6NjIGNodXnhu4NuIGdpYW8uIgorCisjOiBidWlsdGluL3B1bGwuYzozNjAKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHB1bGwgduG7m2kgY+G6o2kgdOG7lTogQuG6oW4gY8OzIGPDoWMgdGhheSDEkeG7lWkgY2jGsGEgxJHGsOG7o2MgY2h1eeG7g24gZ2lhby4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzNgorbXNnaWQgIiIKKyJUaGVyZSBpcyBubyBjYW5kaWRhdGUgZm9yIHJlYmFzaW5nIGFnYWluc3QgYW1vbmcgdGhlIHJlZnMgdGhhdCB5b3UganVzdCAiCisiZmV0Y2hlZC4iCittc2dzdHIgIiIKKyLhu54gxJHDonkga2jDtG5nIGPDsyDhu6luZyBj4butIG7DoG8gxJHhu4MgY+G6o2kgdOG7lSBs4bqhaSB0cm9uZyBz4buRIGPDoWMgdGhhbSBjaGnhur91IG3DoCBi4bqhbiB24burYSAiCisibOG6pXkgduG7gS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICIiCisi4bueIMSRw6J5IGtow7RuZyBjw7Mg4bupbmcgY+G7rSBuw6BvIMSR4buDIGjDsmEgdHLhu5luIHRyb25nIHPhu5EgY8OhYyB0aGFtIGNoaeG6v3UgbcOgIGLhuqFuIHbhu6thIGzhuqV5ICIKKyJ24buBLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDM5Cittc2dpZCAiIgorIkdlbmVyYWxseSB0aGlzIG1lYW5zIHRoYXQgeW91IHByb3ZpZGVkIGEgd2lsZGNhcmQgcmVmc3BlYyB3aGljaCBoYWQgbm9cbiIKKyJtYXRjaGVzIG9uIHRoZSByZW1vdGUgZW5kLiIKK21zZ3N0ciAiIgorIsSQ4bqhaSB0aOG7gyDEkWnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgYuG6oW4gxJHDoyBjdW5nIGPhuqVwIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiBk4bqhbmcgZMO5bmcga8O9ICIKKyJ04buxXG4iCisixJHhuqFpIGRp4buHbiBtw6AgbsOzIGzhuqFpIGtow7RuZyBraOG7m3AgdHLDqm4gxJFp4buDbSBjdeG7kWkgbcOheSBwaOG7pWMgduG7pS4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFza2VkIHRvIHB1bGwgZnJvbSB0aGUgcmVtb3RlICclcycsIGJ1dCBkaWQgbm90IHNwZWNpZnlcbiIKKyJhIGJyYW5jaC4gQmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgZGVmYXVsdCBjb25maWd1cmVkIHJlbW90ZVxuIgorImZvciB5b3VyIGN1cnJlbnQgYnJhbmNoLCB5b3UgbXVzdCBzcGVjaWZ5IGEgYnJhbmNoIG9uIHRoZSBjb21tYW5kIGxpbmUuIgorbXNnc3RyICIiCisiQuG6oW4gecOqdSBj4bqndSBwdWxsIHThu6sgbcOheSBk4buLY2ggduG7pSDigJwlc+KAnSwgbmjGsG5nIGzhuqFpIGNoxrBhIGNo4buJIMSR4buLbmhcbiIKKyJuaMOhbmggbsOgby4gQuG7n2kgdsOsIMSRw6J5IGtow7RuZyBwaOG6o2kgbMOgIG3DoXkgZOG7i2NoIHbhu6UgxJHGsOG7o2MgY+G6pXUgaMOsbmhcbiIKKyJ0aGVvIG3hurdjIMSR4buLbmggY2hvIG5ow6FuaCBoaeG7h24gdOG6oWkgY+G7p2EgYuG6oW4sIGLhuqFuIHBo4bqjaSBjaOG7iSDEkeG7i25oXG4iCisibeG7mXQgbmjDoW5oIHRyw6puIGTDsm5nIGzhu4duaC4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIkhp4buHbiB04bqhaSBi4bqhbiBjaOG6s25nIOG7nyBuaMOhbmggbsOgbyBj4bqjLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ5IGJ1aWx0aW4vcHVsbC5jOjQ2NAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIlZ1aSBsw7JuZyBjaOG7iSDEkeG7i25oIG5ow6FuaCBuw6BvIGLhuqFuIG114buRbiBj4bqjaSB04buVIGzhuqFpLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUxIGJ1aWx0aW4vcHVsbC5jOjQ2NgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAiVnVpIGzDsm5nIGNo4buJIMSR4buLbmggbmjDoW5oIG7DoG8gYuG6oW4gbXXhu5FuIGjDsmEgdHLhu5luIHbDoG8uIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9wdWxsLmM6NDY3Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiWGVtIGdpdC1wdWxsKDEpIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDYyCittc2dpZCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuG7niDEkcOieSBraMO0bmcgY8OzIHRow7RuZyB0aW4gdGhlbyBkw7VpIGNobyBuaMOhbmggaGnhu4duIGjDoG5oLiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDcxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBzZXQgdHJhY2tpbmcgaW5mb3JtYXRpb24gZm9yIHRoaXMgYnJhbmNoIHlvdSBjYW4gZG8gc28gd2l0aDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorbXNnc3RyICIiCisiTuG6v3UgYuG6oW4gbXXhu5FuIHRoZW8gZMO1aSB0aMO0bmcgdGluIGNobyBuaMOhbmggbsOgeSBi4bqhbiBjw7MgdGjhu4MgdGjhu7FjIGhp4buHbiBi4bqxbmcgIgorImzhu4duaDpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88bmjDoW5oPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyJDw6FjIMSR4bq3YyB04bqjIGPhuqV1IGjDrG5oIGPhu6dhIGLhuqFuIMSR4buDIGjDsmEgdHLhu5luIHbhu5tpIHRoYW0gY2hp4bq/dSDigJwlc+KAnVxuIgorInThu6sgbcOheSBk4buLY2ggduG7pSwgbmjGsG5nIGtow7RuZyBjw7MgbmjDoW5oIG7DoG8gbmjGsCB0aOG6vyDEkcaw4bujYyBs4bqleSB24buBLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODMwCittc2dpZCAiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIKK21zZ3N0ciAiIgorIsSQYW5nIGPhuq1wIG5o4bqtdCBt4buZdCBuaMOhbmggY2jGsGEgxJHGsOG7o2Mgc2luaCByYSB24bubaSBjw6FjIHRoYXkgxJHhu5VpIMSRxrDhu6NjIHRow6ptIHbDoG8gIgorImLhuqNuZyBt4bulYyBs4bulYy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg1OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZC5cbiIKKyJmYXN0LWZvcndhcmRpbmcgeW91ciB3b3JraW5nIHRyZWUgZnJvbVxuIgorImNvbW1pdCAlcy4iCittc2dzdHIgIiIKKyJmZXRjaCDEkcOjIGPhuq1wIG5o4bqtdCBoZWFkIG5ow6FuaCBoaeG7h24gdOG6oWkuXG4iCisixJFhbmcgY2h1eeG7g24tdGnhur9wLW5oYW5oIGPDonkgbMOgbSB2aeG7h2MgY+G7p2EgYuG6oW4gdOG7q1xuIgorImzhuqduIGNodXnhu4NuIGdpYW90ICVzLiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODY0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDYW5ub3QgZmFzdC1mb3J3YXJkIHlvdXIgd29ya2luZyB0cmVlLlxuIgorIkFmdGVyIG1ha2luZyBzdXJlIHRoYXQgeW91IHNhdmVkIGFueXRoaW5nIHByZWNpb3VzIGZyb21cbiIKKyIkIGdpdCBkaWZmICVzXG4iCisib3V0cHV0LCBydW5cbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyJ0byByZWNvdmVyLiIKK21zZ3N0ciAiIgorIktow7RuZyB0aOG7gyBjaHV54buDbiB0aeG6v3AgbmhhbmggY8OieSBsw6BtIHZp4buHYyBj4bunYSBi4bqhbi5cbiIKKyJTYXUga2hpIGNo4bqvYyBjaOG6r24gcuG6sW5nIG3DrG5oIMSRw6MgZ2hpIGzhuqFpIG3hu41pIHRo4bupXG4iCisicXXDvSBiw6F1IHThu6sga+G6v3QgeHXhuqV0IGPhu6dhIGzhu4duaFxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJjaOG6oXlcbiIKKyIkIGdpdCByZXNldCAtLWhhcmRcbiIKKyLEkeG7gyBraMO0aSBwaOG7pWMgbOG6oWkuIgorCisjOiBidWlsdGluL3B1bGwuYzo4NzkKK21zZ2lkICJDYW5ub3QgbWVyZ2UgbXVsdGlwbGUgYnJhbmNoZXMgaW50byBlbXB0eSBoZWFkLiIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGjDsmEgdHLhu5luIG5oaeG7gXUgbmjDoW5oIHbDoG8gdHJvbmcgbeG7mXQgaGVhZCB0cuG7kW5nIHLhu5duZy4iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjg4MworbXNnaWQgIkNhbm5vdCByZWJhc2Ugb250byBtdWx0aXBsZSBicmFuY2hlcy4iCittc2dzdHIgIktow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIGzhu4duaCByZWJhc2UgKGPhuqNpIHThu5UpIHRyw6puIG5oaeG7gXUgbmjDoW5oLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTUKK21zZ2lkICJnaXQgcHVzaCBbPG9wdGlvbnM+XSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1c2ggWzxjw6FjLXTDuXktY2jhu41uPl0gWzxraG8tY2jhu6lhPiBbPHJlZnNwZWM+4oCmXV0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjg2Cittc2dpZCAidGFnIHNob3J0aGFuZCB3aXRob3V0IDx0YWc+IgorbXNnc3RyICJkw7luZyB04buRYyBrw70gdGjhursga2jDtG5nIGPDsyA8dGjhurs+IgorCisjOiBidWlsdGluL3B1c2guYzo5NgorbXNnaWQgIi0tZGVsZXRlIG9ubHkgYWNjZXB0cyBwbGFpbiB0YXJnZXQgcmVmIG5hbWVzIgorbXNnc3RyICItLWRlbGV0ZSBjaOG7iSBjaOG6pXAgbmjhuq1uIGPDoWMgdMOqbiB0aGFtIGNoaeG6v3UgZOG6oW5nIHRoxrDhu51uZyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQwCittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiIgorIlxuIgorIsSQ4buDIGNo4buNbiBt4buXaSB0w7l5IGNo4buNbiBt4buZdCBjw6FjaCBj4buRIMSR4buLbmgsIHhlbSBwdXNoLmRlZmF1bHQgdHJvbmcg4oCcZ2l0IGhlbHAgIgorImNvbmZpZ+KAnS4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIHVwc3RyZWFtIGJyYW5jaCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGRvZXMgbm90IG1hdGNoXG4iCisidGhlIG5hbWUgb2YgeW91ciBjdXJyZW50IGJyYW5jaC4gIFRvIHB1c2ggdG8gdGhlIHVwc3RyZWFtIGJyYW5jaFxuIgorIm9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOiVzXG4iCisiXG4iCisiVG8gcHVzaCB0byB0aGUgYnJhbmNoIG9mIHRoZSBzYW1lIG5hbWUgb24gdGhlIHJlbW90ZSwgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzICVzXG4iCisiJXMiCittc2dzdHIgIiIKKyJOaMOhbmggdGjGsOG7o25nIG5ndeG7k24gY+G7p2EgbmjDoW5oIGhp4buHbiB04bqhaSBj4bunYSBi4bqhbiBraMO0bmcga2jhu5twXG4iCisiduG7m2kgdMOqbiBj4bunYSBuaMOhbmggaGnhu4duIHThuqFpIGPhu6dhIGLhuqFuLiAgxJDhu4MgxJHhuql5IGzDqm4gxJHhur9uIG5ow6FuaCB0aMaw4bujbmcgbmd14buTblxuIgorInRyw6puIG3DoXkgY2jhu6csIHPhu60gZOG7pW5nXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyLEkOG7gyBwdXNoIHThu5tpIG5ow6FuaCBjw7luZyB0w6puIHRyw6puIG3DoXkgY2jhu6csIHPhu60gZOG7pW5nXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzICVzXG4iCisiJXMiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE1OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGFyZSBub3QgY3VycmVudGx5IG9uIGEgYnJhbmNoLlxuIgorIlRvIHB1c2ggdGhlIGhpc3RvcnkgbGVhZGluZyB0byB0aGUgY3VycmVudCAoZGV0YWNoZWQgSEVBRClcbiIKKyJzdGF0ZSBub3csIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjxuYW1lLW9mLXJlbW90ZS1icmFuY2g+XG4iCittc2dzdHIgIiIKKyJC4bqhbiBoaeG7h24gbmF5IGtow7RuZyDhu58gbeG7mXQgbmjDoW5oLlxuIgorIsSQ4buDIMSR4bqpeSBs4buLY2ggc+G7rSBsw6puIHRyw6puIHRy4bqhbmcgdGjDoWkgaGnhu4duIGjDoG5oIChIRUFEIMSRw6MgYuG7iyB0w6FjaCBy4budaSlcbiIKKyJuZ2F5IGLDonkgZ2nhu50sIHPhu60gZOG7pW5nXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PHTDqm4tY+G7p2EtbmjDoW5oLW3DoXktY2jhu6c+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorIk5ow6FuaCBoaeG7h24gdOG6oWkgJXMga2jDtG5nIGPDsyBuaMOhbmggdGjGsOG7o25nIG5ndeG7k24gbsOgby5cbiIKKyLEkOG7gyBwdXNoICjEkeG6qXkgbMOqbikgbmjDoW5oIGhp4buHbiB04bqhaSB2w6AgxJHhurd0IG3DoXkgY2jhu6cgbsOgeSBsw6BtIHRoxrDhu6NuZyBuZ3Xhu5NuICIKKyIodXBzdHJlYW0pLCBz4butIGThu6VuZ1xuIgorIlxuIgorIiAgICBnaXQgcHVzaCAtLXNldC11cHN0cmVhbSAlcyAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzoxODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBtdWx0aXBsZSB1cHN0cmVhbSBicmFuY2hlcywgcmVmdXNpbmcgdG8gcHVzaC4iCittc2dzdHIgIk5ow6FuaCBoaeG7h24gdOG6oWkgJXMgY8OzIG5oaeG7gXUgbmjDoW5oIHRoxrDhu6NuZyBuZ3Xhu5NuLCB04burIGNo4buRaSBwdXNoLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIHB1c2hpbmcgdG8gcmVtb3RlICclcycsIHdoaWNoIGlzIG5vdCB0aGUgdXBzdHJlYW0gb2ZcbiIKKyJ5b3VyIGN1cnJlbnQgYnJhbmNoICclcycsIHdpdGhvdXQgdGVsbGluZyBtZSB3aGF0IHRvIHB1c2hcbiIKKyJ0byB1cGRhdGUgd2hpY2ggcmVtb3RlIGJyYW5jaC4iCittc2dzdHIgIiIKKyJC4bqhbiDEkWFuZyBwdXNoICjEkeG6qXkgbMOqbikgbcOheSBjaOG7pyDigJwlc+KAnSwgbcOgIG7DsyBraMO0bmcgcGjhuqNpIGzDoCB0aMaw4bujbmcgbmd14buTbiAiCisiKHVwc3RyZWFtKSBj4bunYVxuIgorIm5ow6FuaCBoaeG7h24gdOG6oWkg4oCcJXPigJ0gY+G7p2EgYuG6oW4sIG3DoCBraMO0bmcgYsOhbyBjaG8gdMO0aSBiaeG6v3QgbMOgIGPDoWkgZ8OsIMSRxrDhu6NjIHB1c2hcbiIKKyLEkeG7gyBj4bqtcCBuaOG6rXQgbmjDoW5oIG3DoXkgY2jhu6cgbsOgby4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjIwNgorbXNnaWQgIiIKKyJwdXNoLmRlZmF1bHQgaXMgdW5zZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSBoYXMgY2hhbmdlZCBpblxuIgorIkdpdCAyLjAgZnJvbSAnbWF0Y2hpbmcnIHRvICdzaW1wbGUnLiBUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZVxuIgorImFuZCBtYWludGFpbiB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3IsIHVzZTpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igbm93LCB1c2U6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyJcbiIKKyJXaGVuIHB1c2guZGVmYXVsdCBpcyBzZXQgdG8gJ21hdGNoaW5nJywgZ2l0IHdpbGwgcHVzaCBsb2NhbCBicmFuY2hlc1xuIgorInRvIHRoZSByZW1vdGUgYnJhbmNoZXMgdGhhdCBhbHJlYWR5IGV4aXN0IHdpdGggdGhlIHNhbWUgbmFtZS5cbiIKKyJcbiIKKyJTaW5jZSBHaXQgMi4wLCBHaXQgZGVmYXVsdHMgdG8gdGhlIG1vcmUgY29uc2VydmF0aXZlICdzaW1wbGUnXG4iCisiYmVoYXZpb3IsIHdoaWNoIG9ubHkgcHVzaGVzIHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgY29ycmVzcG9uZGluZ1xuIgorInJlbW90ZSBicmFuY2ggdGhhdCAnZ2l0IHB1bGwnIHVzZXMgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJTZWUgJ2dpdCBoZWxwIGNvbmZpZycgYW5kIHNlYXJjaCBmb3IgJ3B1c2guZGVmYXVsdCcgZm9yIGZ1cnRoZXIgIgorImluZm9ybWF0aW9uLlxuIgorIih0aGUgJ3NpbXBsZScgbW9kZSB3YXMgaW50cm9kdWNlZCBpbiBHaXQgMS43LjExLiBVc2UgdGhlIHNpbWlsYXIgbW9kZVxuIgorIidjdXJyZW50JyBpbnN0ZWFkIG9mICdzaW1wbGUnIGlmIHlvdSBzb21ldGltZXMgdXNlIG9sZGVyIHZlcnNpb25zIG9mIEdpdCkiCittc2dzdHIgIiIKKyJiaeG6v24gcHVzaC5kZWZhdWx0IGNoxrBhIMSRxrDhu6NjIMSR4bq3dDsgZ2nDoSB0cuG7iyBuZ+G6p20gxJHhu4tuaCBj4bunYSBuw7NcbiIKKyLEkcOjIMSRxrDhu6NjIHRoYXkgxJHhu5VpIHRyb25nIEdpdCAyLjAgdOG7qyDigJxtYXRjaGluZ+KAnSB0aMOgbmgg4oCcc2ltcGxl4oCdLlxuIgorIsSQ4buDIGtow7RuZyBoaeG7g24gdGjhu4sgbmjhuq9jIG5o4bufIG7DoHkgdsOgIGR1eSB0csOsIGPDoWNoIHjhu60gbMO9IGPFqSwgaMOjeSBjaOG6oXkgbOG7h25oOlxuIgorIlxuIgorIiAgZ2l0IGNvbmZpZyAtLWdsb2JhbCBwdXNoLmRlZmF1bHQgbWF0Y2hpbmdcbiIKKyJcbiIKKyLEkOG7gyBraMO0bmcgaGnhu4NuIHRo4buLIG5o4bqvYyBuaOG7nyBuw6B5IHbDoCDDoXAgZOG7pW5nIGPDoWNoIOG7qW5nIHjhu60gbeG7m2ksIGjDo3kgY2jhuqF5IGzhu4duaDpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IHNpbXBsZVxuIgorIlxuIgorIktoaSBwdXNoLmRlZmF1bHQgxJHGsOG7o2MgxJHhurd0IHRow6BuaCDigJxtYXRjaGluZ+KAnSwgZ2l0IHPhur0gxJHhuql5IGPDoWMgbmjDoW5oIG7hu5lpIGLhu5lcbiIKKyJsw6puIGPDoWMgbmjDoW5oIHRyw6puIG3DoXkgY2jhu6csIGPDoWkgbcOgIMSRw6Mgc+G6tW4gY8OzIHbDoCBjw7luZyB0w6puLlxuIgorIlxuIgorIlRyb25nIDIuMCwgR2l0IHPhur0gbeG6t2MgxJHhu4tuaCBkdXkgdHLDrCBjw6FjIOG7qW5nIHjhu60g4oCcc2ltcGxl4oCdLFxuIgorImPDoWkgbsOgeSBjaOG7iSDEkeG6qXkgbmjhu69uZyBuaMOhbmggaGnhu4duIGjDoG5oIGzDqm4gY8OhYyBuaMOhbmggdMawxqFuZyDhu6luZ1xuIgorInRyw6puIG3DoXkgY2jhu6cgY8OhaSBtw6AgbOG7h25oIOKAnGdpdCBwdWxs4oCdIGTDuW5nIMSR4buDIGPhuq1wIG5o4bqtdCBuaMOhbmggaGnhu4duIHThuqFpLlxuIgorIlxuIgorIlhlbSDigJxnaXQgaGVscCBjb25maWfigJ0gdsOgIHTDrG0gxJHhur9uIOKAnHB1c2guZGVmYXVsdOKAnSDEkeG7gyBjw7MgdGjDqm0gdGjDtG5nIHRpbi5cbiIKKyIoY2jhur8gxJHhu5kg4oCcc2ltcGxl4oCdIMSRxrDhu6NjIGLhuq90IMSR4bqndSBz4butIGThu6VuZyB04burIEdpdCAxLjcuMTEuIFPhu60gZOG7pW5nIGNo4bq/IMSR4buZIHTGsMahbmcgIgorInThu7FcbiIKKyLigJxjdXJyZW504oCdIHRoYXkgdsOsIOKAnHNpbXBsZeKAnSBu4bq/dSBi4bqhbiB0aOG7iW5oIHRob+G6o25nIHBo4bqjaSBz4butIGThu6VuZyBi4bqjbiBHaXQgY8WpKSIKKworIzogYnVpbHRpbi9wdXNoLmM6MjczCittc2dpZCAiIgorIllvdSBkaWRuJ3Qgc3BlY2lmeSBhbnkgcmVmc3BlY3MgdG8gcHVzaCwgYW5kIHB1c2guZGVmYXVsdCBpcyBcIm5vdGhpbmdcIi4iCittc2dzdHIgIiIKKyJC4bqhbiDEkcOjIGtow7RuZyBjaOG7iSByYSBt4buZdCByZWZzcGVjcyBuw6BvIMSR4buDIMSR4bqpeSBsw6puLCB2w6AgcHVzaC5kZWZhdWx0IGzDoCBcImtow7RuZyAiCisibMOgIGfDrCBj4bqjXCIuIgorCisjOiBidWlsdGluL3B1c2guYzoyODAKK21zZ2lkICIiCisiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRpcCBvZiB5b3VyIGN1cnJlbnQgYnJhbmNoIGlzIGJlaGluZFxuIgorIml0cyByZW1vdGUgY291bnRlcnBhcnQuIEludGVncmF0ZSB0aGUgcmVtb3RlIGNoYW5nZXMgKGUuZy5cbiIKKyInZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJWaeG7h2MgY+G6rXAgbmjhuq10IGLhu4sgdOG7qyBjaOG7kWkgYuG7n2kgdsOsIMSR4bqndSBtw7p0IGPhu6dhIG5ow6FuaCBoaeG7h24gdOG6oWkgY+G7p2EgYuG6oW4gbuG6sW0gxJHhurFuZ1xuIgorInNhdSBi4buZIHBo4bqtbiB0xrDGoW5nIOG7qW5nIGPhu6dhIG3DoXkgY2jhu6cuIEjDsmEgdHLhu5luIHbhu5tpIGPDoWMgdGhheSDEkeG7lWkgdOG7qyBtw6F5IGNo4bunXG4iCisiKHYuZC4gXCJnaXQgcHVsbCDigKZcIikgdHLGsOG7m2Mga2hpIMSR4bqpeSBsw6puIGzhuqduIG7hu69hLlxuIgorIlhlbSDigJxOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHPigJ0gdHJvbmcg4oCcZ2l0IHB1c2ggLS1oZWxw4oCdIMSR4buDIGPDsyB0aMO0bmcgdGluIGNoaSAiCisidGnhur90LiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjg2Cittc2dpZCAiIgorIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIGEgcHVzaGVkIGJyYW5jaCB0aXAgaXMgYmVoaW5kIGl0cyByZW1vdGVcbiIKKyJjb3VudGVycGFydC4gQ2hlY2sgb3V0IHRoaXMgYnJhbmNoIGFuZCBpbnRlZ3JhdGUgdGhlIHJlbW90ZSBjaGFuZ2VzXG4iCisiKGUuZy4gJ2dpdCBwdWxsIC4uLicpIGJlZm9yZSBwdXNoaW5nIGFnYWluLlxuIgorIlNlZSB0aGUgJ05vdGUgYWJvdXQgZmFzdC1mb3J3YXJkcycgaW4gJ2dpdCBwdXNoIC0taGVscCcgZm9yIGRldGFpbHMuIgorbXNnc3RyICIiCisiVmnhu4djIGPhuq1wIG5o4bqtdCBi4buLIHThu6sgY2jhu5FpIGLhu59pIHbDrCDEkeG6p3UgbcO6dCBj4bunYSBuaMOhbmggxJHDoyDEkeG6qXkgbMOqbiBu4bqxbSDEkeG6sW5nIHNhdSAiCisiYuG7mVxuIgorInBo4bqtbiB0xrDGoW5nIOG7qW5nIGPhu6dhIG3DoXkgY2jhu6cuIENoZWNrb3UgbmjDoW5oIG7DoHkgdsOgIGjDsmEgdHLhu5luIHbhu5tpIGPDoWMgdGhheSDEkeG7lWlcbiIKKyJ04burIG3DoXkgY2jhu6cgKHYuZC4g4oCcZ2l0IHB1bGwg4oCm4oCdKSB0csaw4bubYyBraGkgbOG6oWkgcHVzaCBs4bqnbiBu4buvYS5cbiIKKyJYZW0g4oCcTm90ZSBhYm91dCBmYXN0LWZvcndhcmRz4oCdIHRyb25nIOKAnGdpdCBwdXNoIC0taGVscOKAnSDEkeG7gyBjw7MgdGjDtG5nIHRpbiBjaGkgIgorInRp4bq/dC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5MgorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGNvbnRhaW5zIHdvcmsgdGhhdCB5b3UgZG9cbiIKKyJub3QgaGF2ZSBsb2NhbGx5LiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFub3RoZXIgcmVwb3NpdG9yeSBwdXNoaW5nXG4iCisidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyJWaeG7h2MgY+G6rXAgbmjhuq10IGLhu4sgdOG7qyBjaOG7kWkgYuG7n2kgdsOsIG3DoXkgY2jhu6cgY8OzIGNo4bupYSBjw7RuZyB2aeG7h2MgbcOgIGLhuqFuIGtow7RuZ1xuIgorImPDsyDhu58gbcOheSBu4buZaSBi4buZIGPhu6dhIG3DrG5oLiBM4buXaSBuw6B5IHRoxrDhu51uZyBjw7Mgbmd1ecOqbiBuaMOibiBi4bufaSBraG8ga2jDoWMgxJHhuql5XG4iCisiZOG7ryBsaeG7h3UgbMOqbiBjw7luZyBt4buZdCB0aGFtIGNoaeG6v3UuIELhuqFuIGPDsyBs4bq9IG114buRbiBow7JhIHRy4buZbiB24bubaSBjw6FjIHRoYXkgxJHhu5VpXG4iCisidOG7qyBtw6F5IGNo4bunICh2LmQuIOKAnGdpdCBwdWxs4oCm4oCdKSB0csaw4bubYyBraGkgbOG6oWkgcHVzaCBs4bqnbiBu4buvYS5cbiIKKyJYZW0g4oCcTm90ZSBhYm91dCBmYXN0LWZvcndhcmRz4oCdIHRyb25nIOKAnGdpdCBwdXNoIC0taGVscOKAnSDEkeG7gyBjw7MgdGjDtG5nIHRpbiBjaGkgIgorInRp4bq/dC4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5OQorbXNnaWQgIlVwZGF0ZXMgd2VyZSByZWplY3RlZCBiZWNhdXNlIHRoZSB0YWcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHJlbW90ZS4iCittc2dzdHIgIlZp4buHYyBj4bqtcCBuaOG6rXQgYuG7iyB04burIGNo4buRaSBi4bufaSB2w6wgdGjhursgxJHDoyBz4bq1biBjw7MgdOG7qyB0csaw4bubYyB0csOqbiBtw6F5IGNo4bunLiIKKworIzogYnVpbHRpbi9wdXNoLmM6MzAyCittc2dpZCAiIgorIllvdSBjYW5ub3QgdXBkYXRlIGEgcmVtb3RlIHJlZiB0aGF0IHBvaW50cyBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIm9yIHVwZGF0ZSBhIHJlbW90ZSByZWYgdG8gbWFrZSBpdCBwb2ludCBhdCBhIG5vbi1jb21taXQgb2JqZWN0LFxuIgorIndpdGhvdXQgdXNpbmcgdGhlICctLWZvcmNlJyBvcHRpb24uXG4iCittc2dzdHIgIiIKKyJLaMO0bmcgdGjhu4MgY+G6rXAgbmjhuq10IG3hu5l0IHRoYW0gY2hp4bq/dSB0csOqbiBtw6F5IGNo4bunIG3DoCBuw7MgY2jhu4kgxJHhur9uIMSR4buRaSB0xrDhu6NuZyAiCisia2jDtG5nXG4iCisicGjhuqNpIGzDoCBs4bqnbiBjaHV54buDbiBnaWFvLCBob+G6t2MgY+G6rXAgbmjhuq10IG3hu5l0IHRoYW0gY2hp4bq/dSBtw6F5IGNo4bunIMSR4buDIG7DsyBjaOG7iSDEkeG6v24gIgorIsSR4buRaSB0xrDhu6NuZ1xuIgorImtow7RuZyBwaOG6o2kgY2h1eeG7g24gZ2lhbywgbcOgIGtow7RuZyBz4butIGThu6VuZyB0w7l5IGNo4buNbiDigJwtLWZvcmNl4oCdLlxuIgorCisjOiBidWlsdGluL3B1c2guYzozNjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHVzaGluZyB0byAlc1xuIgorbXNnc3RyICLEkGFuZyDEkeG6qXkgbMOqbiAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkeG6qXkgdOG7m2kgbeG7mXQgc+G7kSB0aGFtIGNoaeG6v3UgxJHhur9uIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3B1c2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAicmVwb3NpdG9yeSAoa2hvKSBzYWkg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NgorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisiQ2jGsGEgY+G6pXUgaMOsbmggxJHDrWNoIMSR4buDIMSR4bqpeSBsw6puLlxuIgorIkhv4bq3YyBsw6AgY2jhu4kgcmEgVVJMIHThu6sgZMOybmcgbOG7h25oIGhv4bq3YyBsw6AgY+G6pXUgaMOsbmggbeG7mXQga2hvIG3DoXkgY2jhu6cgc+G7rSBk4bulbmdcbiIKKyJcbiIKKyIgICAgZ2l0IHJlbW90ZSBhZGQgPHTDqm4+IDx1cmw+XG4iCisiXG4iCisidsOgIHNhdSDEkcOzIMSR4bqpeSBsw6puIHPhu60gZOG7pW5nIHTDqm4gbcOheSBjaOG7p1xuIgorIlxuIgorIiAgICBnaXQgcHVzaCA8dMOqbj5cbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDExCittc2dpZCAiLS1hbGwgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWFsbCB2w6AgLS10YWdzIHh1bmcga2jhuq9jIG5oYXUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxMgorbXNnaWQgIi0tYWxsIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tYWxsIGtow7RuZyB0aOG7gyDEkcaw4bujYyB04buVIGjhu6NwIGPDuW5nIHbhu5tpIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDE3Cittc2dpZCAiLS1taXJyb3IgYW5kIC0tdGFncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLW1pcnJvciB2w6AgLS10YWdzIHh1bmcga2jhuq9jIG5oYXUiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxOAorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yIGtow7RuZyB0aOG7gyDEkcaw4bujYyB04buVIGjhu6NwIGPDuW5nIHbhu5tpIMSR4bq3YyB04bqjIMSRxrDhu51uZyBk4bqrbiIKKworIzogYnVpbHRpbi9wdXNoLmM6NDIzCittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIHbDoCAtLW1pcnJvciB4dW5nIGto4bqvYyBuaGF1IgorCisjOiBidWlsdGluL3B1c2guYzo1MzkKK21zZ2lkICJyZXBvc2l0b3J5IgorbXNnc3RyICJraG8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0MCBidWlsdGluL3NlbmQtcGFjay5jOjE2MQorbXNnaWQgInB1c2ggYWxsIHJlZnMiCittc2dzdHIgIsSR4bqpeSB04bqldCBj4bqjIGPDoWMgdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL3B1c2guYzo1NDEgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjMKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgIm1pcnJvciB04bqldCBj4bqjIGPDoWMgdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL3B1c2guYzo1NDMKK21zZ2lkICJkZWxldGUgcmVmcyIKK21zZ3N0ciAieMOzYSBjw6FjIHRoYW0gY2hp4bq/dSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ0Cittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICLEkeG6qXkgY8OhYyB0aOG6uyAoa2jDtG5nIGTDuW5nIGPDuW5nIHbhu5tpIC0tYWxsIGhheSAtLW1pcnJvcikiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NyBidWlsdGluL3NlbmQtcGFjay5jOjE2NAorbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgIsOpcCBideG7mWMgY+G6rXAgbmjhuq10IgorCisjOiBidWlsdGluL3B1c2guYzo1NDkgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzUKK21zZ2lkICJyZWZuYW1lPjo8ZXhwZWN0IgorbXNnc3RyICJ0w6puLXRoYW0tY2hp4bq/dT46PGPhuqduIgorCisjOiBidWlsdGluL3B1c2guYzo1NTAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAiecOqdSBj4bqndSBnacOhLXRy4buLIGPFqSBj4bunYSB0aGFtIGNoaeG6v3UgdGjDrCBsw6AgZ2nDoS10cuG7iyBuw6B5IgorCisjOiBidWlsdGluL3B1c2guYzo1NTMKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIsSRaeG7gXUga2hp4buDbiB2aeG7h2MgxJHhuql5IGzDqm4gKHB1c2gpIMSR4buHIHF1aSBj4bunYSBtw7QtxJF1bi1jb24iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NSBidWlsdGluL3NlbmQtcGFjay5jOjE2OQorbXNnaWQgInVzZSB0aGluIHBhY2siCittc2dzdHIgInThuqFvIGfDs2kgbmjhurkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1NiBidWlsdGluL3B1c2guYzo1NTcgYnVpbHRpbi9zZW5kLXBhY2suYzoxNTgKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTU5Cittc2dpZCAicmVjZWl2ZSBwYWNrIHByb2dyYW0iCittc2dzdHIgImNoxrDGoW5nIHRyw6xuaCBuaOG6rW4gZ8OzaSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU4Cittc2dpZCAic2V0IHVwc3RyZWFtIGZvciBnaXQgcHVsbC9zdGF0dXMiCittc2dzdHIgIsSR4bq3dCB0aMaw4bujbmcgbmd14buTbiBjaG8gZ2l0IHB1bGwvc3RhdHVzIgorCisjOiBidWlsdGluL3B1c2guYzo1NjEKK21zZ2lkICJwcnVuZSBsb2NhbGx5IHJlbW92ZWQgcmVmcyIKK21zZ3N0ciAieMOpbiB04buJYSBuaOG7r25nIHRoYW0gY2hp4bq/dSBi4buLIGfhu6EgYuG7jyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYzCittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgInbDsm5nIHF1YSBtw7NjIHRp4buBbi3EkeG6qXkgKHByZS1wdXNoKSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTY0Cittc2dpZCAicHVzaCBtaXNzaW5nIGJ1dCByZWxldmFudCB0YWdzIgorbXNnc3RyICJwdXNoIHBo4bqnbiBi4buLIHRoaeG6v3UgbmjGsG5nIGPDoWMgdGjhursgbOG6oWkgdGjDrWNoIGjhu6NwIgorCisjOiBidWlsdGluL3B1c2guYzo1NjcgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjYKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAia8O9IGzhuqduIMSR4bqpeSBkw7luZyBHUEciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2OSBidWlsdGluL3NlbmQtcGFjay5jOjE3MAorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICJ5w6p1IGPhuqd1IGdpYW8gZOG7i2NoIGjhuqF0IG5ow6JuIGLDqm4gcGjDrWEgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTc5Cittc2dpZCAiLS1kZWxldGUgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hbGwsIC0tbWlycm9yIGFuZCAtLXRhZ3MiCittc2dzdHIgIi0tZGVsZXRlIGzDoCB4dW5nIGto4bqvYyB24bubaSBjw6FjIHTDuXkgY2jhu41uIC0tYWxsLCAtLW1pcnJvciB2w6AgLS10YWdzIgorCisjOiBidWlsdGluL3B1c2guYzo1ODEKK21zZ2lkICItLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2Ugd2l0aG91dCBhbnkgcmVmcyIKK21zZ3N0ciAiLS1kZWxldGUga2jDtG5nIGjhu6NwIGzDvSBu4bq/dSBraMO0bmcgY8OzIGLhuqV0IGvhu7MgdGhhbSBjaGnhur91IG7DoG8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MzcKK21zZ2lkICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTxwcmVmaXg+KSAiCisiWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD08ZmlsZT5dICgtLWVtcHR5IHwgPHRyZWUtaXNoMT4gWzx0cmVlLWlzaDI+IFs8dHJlZS1pc2gzPl1dKSIKK21zZ3N0ciAiIgorImdpdCByZWFkLXRyZWUgWygtbSBbLS10cml2aWFsXSBbLS1hZ2dyZXNzaXZlXSB8IC0tcmVzZXQgfCAtLXByZWZpeD08dGnhu4FuLSIKKyJ04buRPikgWy11IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gIgorIlstLWluZGV4LW91dHB1dD08dOG6rXAtdGluPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLSIKKyJpc2gzPl1dKSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTAKK21zZ2lkICJ3cml0ZSByZXN1bHRpbmcgaW5kZXggdG8gPGZpbGU+IgorbXNnc3RyICJnaGkgbeG7pWMgbOG7pWMga+G6v3QgcXXhuqMgdsOgbyA8dOG6rXAtdGluPiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTMKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAiY2jhu4kgduG7m2kgYuG6o25nIG3hu6VjIGzhu6VjIHRy4buRbmcgcuG7l25nIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExNQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIkjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExNworbXNnaWQgInBlcmZvcm0gYSBtZXJnZSBpbiBhZGRpdGlvbiB0byBhIHJlYWQiCittc2dzdHIgInRo4buxYyBoaeG7h24gbeG7mXQgaMOyYSB0cuG7mW4gdGjDqm0gdsOgbyB2aeG7h2MgxJHhu41jIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExOQorbXNnaWQgIjMtd2F5IG1lcmdlIGlmIG5vIGZpbGUgbGV2ZWwgbWVyZ2luZyByZXF1aXJlZCIKK21zZ3N0ciAiIgorImjDsmEgdHLhu5luIGtp4buDdSDigJwzLXdheeKAnSBu4bq/dSBraMO0bmcgY8OzIHThuq1wIHRpbiBt4bupYyBow7JhIHRy4buZbiBuw6BvIMSRxrDhu6NjIHnDqnUgY+G6p3UgIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMQorbXNnaWQgIjMtd2F5IG1lcmdlIGluIHByZXNlbmNlIG9mIGFkZHMgYW5kIHJlbW92ZXMiCittc2dzdHIgImjDsmEgdHLhu5luIDMtd2F5IHRyb25nIHPhu7EgaGnhu4duIGRp4buHbiBj4bunYSDigJxhZGRz4oCdIHbDoCDigJxyZW1vdmVz4oCdIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgImdp4buRbmcgduG7m2kgLW0sIG5oxrBuZyBi4buPIHF1YSBjw6FjIG3hu6VjIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyNAorbXNnaWQgIjxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAiPHRoxrAtbeG7pWMtY29uPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI1Cittc2dpZCAicmVhZCB0aGUgdHJlZSBpbnRvIHRoZSBpbmRleCB1bmRlciA8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIsSR4buNYyBjw6J5IHbDoG8gdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIGTGsOG7m2kgPHRoxrBfbeG7pWNfY29uPi8iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAiY+G6rXAgbmjhuq10IGPDonkgbMOgbSB2aeG7h2MgduG7m2kga+G6v3QgcXXhuqMgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMwCittc2dpZCAiZ2l0aWdub3JlIgorbXNnc3RyICJnaXRpZ25vcmUiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTMxCittc2dpZCAiYWxsb3cgZXhwbGljaXRseSBpZ25vcmVkIGZpbGVzIHRvIGJlIG92ZXJ3cml0dGVuIgorbXNnc3RyICJjaG8gcGjDqXAgY8OhYyB04bqtcCB0aW4gcsO1IHLDoG5nIGLhu4sgbOG7nSDEkWkgxJHGsOG7o2MgZ2hpIMSRw6giCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTM0Cittc2dpZCAiZG9uJ3QgY2hlY2sgdGhlIHdvcmtpbmcgdHJlZSBhZnRlciBtZXJnaW5nIgorbXNnc3RyICJraMO0bmcga2nhu4NtIHRyYSBjw6J5IGzDoG0gdmnhu4djIHNhdSBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMzUKK21zZ2lkICJkb24ndCB1cGRhdGUgdGhlIGluZGV4IG9yIHRoZSB3b3JrIHRyZWUiCittc2dzdHIgImtow7RuZyBj4bqtcCBuaOG6rXQgYuG6o25nIG3hu6VjIGzhu6VjIGhheSBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAiYuG7jyBxdWEgw6FwIGThu6VuZyBi4buZIGzhu41jIGzhuqV5IHJhIChjaGVja291dCkgdGjGsGEgdGjhu5t0IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAiZ+G7oSBs4buXaSDigJx1bnBhY2stdHJlZXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVmbG9nLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgZm9yICclcycgaXMgbm90IGEgdmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLigJwlc+KAnSBkw6BuaCBjaG8g4oCcJXPigJ0ga2jDtG5nIHBo4bqjaSBsw6AgZOG6pXUgduG6v3QgdGjhu51pIGdpYW4gaOG7o3AgbOG7hyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo1NDkgYnVpbHRpbi9yZWZsb2cuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIuKAnCVz4oCdIGtow7RuZyBwaOG6o2kgbMOgIGThuqV1IHRo4budaSBnaWFuIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMworbXNnaWQgIiIKKyJnaXQgcmVtb3RlIGFkZCBbLXQgPGJyYW5jaD5dIFstbSA8bWFzdGVyPl0gWy1mXSBbLS10YWdzIHwgLS1uby10YWdzXSBbLS0iCisibWlycm9yPTxmZXRjaHxwdXNoPl0gPG5hbWU+IDx1cmw+IgorbXNnc3RyICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxuaMOhbmg+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFnc3wtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA8dMOqbj4gPHVybD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQgYnVpbHRpbi9yZW1vdGUuYzozMworbXNnaWQgImdpdCByZW1vdGUgcmVuYW1lIDxvbGQ+IDxuZXc+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbmFtZSA8dMOqbi1jxak+IDx0w6puLW3hu5tpPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNSBidWlsdGluL3JlbW90ZS5jOjM4Cittc2dpZCAiZ2l0IHJlbW90ZSByZW1vdmUgPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHJlbW92ZSA8dMOqbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYgYnVpbHRpbi9yZW1vdGUuYzo0MworbXNnaWQgImdpdCByZW1vdGUgc2V0LWhlYWQgPG5hbWU+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8YnJhbmNoPikiCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWhlYWQgPHTDqm4+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA8bmjDoW5oPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA8dMOqbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTgKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPG5hbWU+IgorbXNnc3RyICJnaXQgcmVtb3RlIHBydW5lIFstbiB8IC0tZHJ5LXJ1bl0gPHTDqm4+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5Cittc2dpZCAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8Z3JvdXA+IHwgPHJlbW90ZT4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg8bmjDs20+IHwgPG3DoXktY2jhu6c+KeKApl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA8dMOqbj4gPG5ow6FuaD7igKYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjEgYnVpbHRpbi9yZW1vdGUuYzo2OQorbXNnaWQgImdpdCByZW1vdGUgc2V0LXVybCBbLS1wdXNoXSA8bmFtZT4gPG5ld3VybD4gWzxvbGR1cmw+XSIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDx0w6puPiA8dXJsLW3hu5tpPiBbPHVybC1jxak+XSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMiBidWlsdGluL3JlbW90ZS5jOjcwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDx0w6puPiA8dXJsLW3hu5tpPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMyBidWlsdGluL3JlbW90ZS5jOjcxCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIDx0w6puPiA8dXJsPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyOAorbXNnaWQgImdpdCByZW1vdGUgYWRkIFs8b3B0aW9ucz5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBhZGQgWzxjw6FjLXTDuXktY2jhu41uPl0gPHTDqm4+IDx1cmw+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ4Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8dMOqbj4gPG5ow6FuaD7igKYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDkKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkIDx0w6puPiA8bmjDoW5oPuKApiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPGPDoWMtdMO5eS1jaOG7jW4+XSA8dMOqbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTkKK21zZ2lkICJnaXQgcmVtb3RlIHBydW5lIFs8b3B0aW9ucz5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBwcnVuZSBbPGPDoWMtdMO5eS1jaOG7jW4+XSA8dMOqbj4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQKK21zZ2lkICJnaXQgcmVtb3RlIHVwZGF0ZSBbPG9wdGlvbnM+XSBbPGdyb3VwPiB8IDxyZW1vdGU+XS4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSB1cGRhdGUgWzxjw6FjLXTDuXktY2jhu41uPl0gWzxuaMOzbT4gfCA8bcOheS1jaOG7pz5d4oCmIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjg4CisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzIgorbXNnc3RyICLEkGFuZyBj4bqtcCBuaOG6rXQgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwCittc2dpZCAiIgorIi0tbWlycm9yIGlzIGRhbmdlcm91cyBhbmQgZGVwcmVjYXRlZDsgcGxlYXNlXG4iCisiXHQgdXNlIC0tbWlycm9yPWZldGNoIG9yIC0tbWlycm9yPXB1c2ggaW5zdGVhZCIKK21zZ3N0ciAiIgorIi0tbWlycm9yIG5ndXkgaGnhu4NtIHbDoCBraMO0bmcgZMO5bmcgbuG7r2E7IHhpbiBow6N5XG4iCisiXHQgc+G7rSBk4bulbmcgdMO5eSBjaOG7jW4gLS1taXJyb3I9ZmV0Y2ggaG/hurdjIC0tbWlycm9yPXB1c2ggxJHhu4MgdGhheSB0aOG6vyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5rbm93biBtaXJyb3IgYXJndW1lbnQ6ICVzIgorbXNnc3RyICJraMO0bmcgaGnhu4N1IHRoYW0gc+G7kSBtw6F5IGLhuqNuIHNhbyAobWlycm9yKTogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzCittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAibOG6pXkgduG7gSBjw6FjIG5ow6FuaCB04burIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU1Cittc2dpZCAiaW1wb3J0IGFsbCB0YWdzIGFuZCBhc3NvY2lhdGVkIG9iamVjdHMgd2hlbiBmZXRjaGluZyIKK21zZ3N0ciAibmjhuq1wIHbDoG8gdOG6pXQgY+G6oyBjw6FjIMSR4buRaSB0xrDhu6NuZyB0aOG6uyB2w6AgdGjDoG5oIHBo4bqnbiBsacOqbiBxdWFuIGtoaSBs4bqleSB24buBIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1OAorbXNnaWQgIm9yIGRvIG5vdCBmZXRjaCBhbnkgdGFnIGF0IGFsbCAoLS1uby10YWdzKSIKK21zZ3N0ciAiaG/hurdjIGtow7RuZyBs4bqleSB24buBIGLhuqV0IGvhu7MgdGjhursgbsOgbyAoLS1uby10YWdzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjAKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICJjw6FjIG5ow6FuaCDEkeG7gyB0aGVvIGTDtWkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAibmjDoW5oIG1hc3RlciIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjIKK21zZ2lkICJwdXNofGZldGNoIgorbXNnc3RyICJwdXNofGZldGNoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MworbXNnaWQgInNldCB1cCByZW1vdGUgYXMgYSBtaXJyb3IgdG8gcHVzaCB0byBvciBmZXRjaCBmcm9tIgorbXNnc3RyICLEkeG6t3QgbcOheSBjaOG7pyAocmVtb3RlKSBuaMawIGzDoCBt4buZdCBtw6F5IGLhuqNuIHNhbyDEkeG7gyBwdXNoIGhheSBmZXRjaCB04burIMSRw7MiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTc1Cittc2dpZCAic3BlY2lmeWluZyBhIG1hc3RlciBicmFuY2ggbWFrZXMgbm8gc2Vuc2Ugd2l0aCAtLW1pcnJvciIKK21zZ3N0ciAixJFhbmcgY2jhu4kgxJHhu4tuaCBt4buZdCBuaMOhbmggbWFzdGVyIGtow7RuZyBo4bujcCBsw70gduG7m2kgdMO5eSBjaOG7jW4gLS1taXJyb3IiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTc3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAiY2jhu4kgxJHhu4tuaCBuaOG7r25nIG5ow6FuaCDEkeG7gyB0aGVvIGTDtWkgY2jhu4kgaOG7o3AgbMO9IHbhu5tpIGPDoWMg4oCcZmV0Y2ggbWlycm9y4oCdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NyBidWlsdGluL3JlbW90ZS5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICJtw6F5IGNo4bunICVzIMSRw6MgdOG7k24gdOG6oWkgcuG7k2kuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5MSBidWlsdGluL3JlbW90ZS5jOjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgcGjhuqNpIHTDqm4gbcOheSBjaOG7pyBo4bujcCBs4buHIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0dXAgbWFzdGVyICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyBjw6BpIMSR4bq3dCBuaMOhbmggbWFzdGVyIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjMzNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZ2V0IGZldGNoIG1hcCBmb3IgcmVmc3BlYyAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGzhuqV5IMOhbmggeOG6oSAobWFwKSBmZXRjaCBjaG8gxJHhurdjIHThuqMgdGhhbSBjaGnhur91ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQzNiBidWlsdGluL3JlbW90ZS5jOjQ0NAorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIihraOG7m3ApIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ0OAorbXNnaWQgIihkZWxldGUpIgorbXNnc3RyICIoeMOzYSkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NTg4IGJ1aWx0aW4vcmVtb3RlLmM6NTk0IGJ1aWx0aW4vcmVtb3RlLmM6NjAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyB0byAnJXMnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbuG7kWkgdGjDqm0g4oCcJXPigJ0gdsOgbyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2MzAgYnVpbHRpbi9yZW1vdGUuYzo3NjkgYnVpbHRpbi9yZW1vdGUuYzo4NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGU6ICVzIgorbXNnc3RyICJLaMO0bmcgY8OzIG3DoXkgY2jhu6cgbsOgbyBuaMawIHRo4bq/OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbmFtZSBjb25maWcgc2VjdGlvbiAnJXMnIHRvICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7lWkgdMOqbiBwaOG6p24gY+G7p2EgY+G6pXUgaMOsbmggdOG7qyDigJwlc+KAnSB0aMOgbmgg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjUzIGJ1aWx0aW4vcmVtb3RlLmM6ODIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgY29uZmlnIHNlY3Rpb24gJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGfhu6EgYuG7jyBwaOG6p24gY+G6pXUgaMOsbmgg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3QgdXBkYXRpbmcgbm9uLWRlZmF1bHQgZmV0Y2ggcmVmc3BlY1xuIgorIlx0JXNcbiIKKyJcdFBsZWFzZSB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gbWFudWFsbHkgaWYgbmVjZXNzYXJ5LiIKK21zZ3N0ciAiIgorIktow7RuZyBj4bqtcCBuaOG6rXQg4oCcbm9uLWRlZmF1bHQgZmV0Y2ggcmVzcGVj4oCdXG4iCisiXHQlc1xuIgorIlx0WGluIGjDo3kgY+G6rXAgbmjhuq10IHBo4bqnbiBj4bqldSBow6xuaCBt4buZdCBjw6FjaCB0aOG7pyBjw7RuZyBu4bq/dSB0aOG6pXkgY+G6p24gdGhp4bq/dC4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6Njc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBhcHBlbmQgJyVzJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIG7hu5FpIHRow6ptIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0ICclcyciCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG6t3Qg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NzA3CisjLCBjLWZvcm1hdAorbXNnaWQgImRlbGV0aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeMOzYSDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo3NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3JlYXRpbmcgJyVzJyBmYWlsZWQiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqhbyDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4MDcKK21zZ2lkICIiCisiTm90ZTogQSBicmFuY2ggb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2FzIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSBpdCwgdXNlOiIKK21zZ2lkX3BsdXJhbCAiIgorIk5vdGU6IFNvbWUgYnJhbmNoZXMgb3V0c2lkZSB0aGUgcmVmcy9yZW1vdGVzLyBoaWVyYXJjaHkgd2VyZSBub3QgcmVtb3ZlZDtcbiIKKyJ0byBkZWxldGUgdGhlbSwgdXNlOiIKK21zZ3N0clswXSAiIgorIkNow7ogw706IE3hu5l0IHPhu5EgbmjDoW5oIG7hurFtIG5nb8OgaSBo4buHIHRo4buRbmcgcmVmcy9yZW1vdGVzLyDEkcOjIGtow7RuZyDEkcaw4bujYyBn4buhIGLhu48gIgorIsSRaTtcbiIKKyLEkeG7gyB4w7NhIMSRaSwgc+G7rSBk4bulbmc6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICIgbmV3IChuZXh0IGZldGNoIHdpbGwgc3RvcmUgaW4gcmVtb3Rlcy8lcykiCittc2dzdHIgIiBt4bubaSAobOG6p24gbOG6pXkgduG7gSB0aeG6v3AgdGhlbyBz4bq9IGzGsHUgdHJvbmcgcmVtb3Rlcy8lcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI1Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDEkcaw4bujYyB0aGVvIGTDtWkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI3Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiBjxakgcsOtY2ggKGTDuW5nIOKAnGdpdCByZW1vdGUgcHJ1bmXigJ0gxJHhu4MgZ+G7oSBi4buPKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjkKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgImJyYW5jaC4lcy5tZXJnZSBraMO0bmcgaOG7o3AgbOG7hzsga2jDtG5nIHRo4buDIGPhuqNpIHThu5UgduG7gSBwaMOtYSA+IDEgbmjDoW5oIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3NworIywgYy1mb3JtYXQKK21zZ2lkICJyZWJhc2VzIG9udG8gcmVtb3RlICVzIgorbXNnc3RyICJ0aOG7sWMgaGnhu4duIHJlYmFzZSB0csOqbiBtw6F5IGNo4bunICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgbWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICIgaMOyYSB0cuG7mW4gduG7m2kgbcOheSBjaOG7pyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODEKK21zZ2lkICIgICAgYW5kIHdpdGggcmVtb3RlIgorbXNnc3RyICIgICAgdsOgIHbhu5tpIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIm1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiaMOyYSB0cuG7mW4gduG7m2kgbcOheSBjaOG7pyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODQKK21zZ2lkICIgICBhbmQgd2l0aCByZW1vdGUiCittc2dzdHIgIiAgIHbDoCB24bubaSBtw6F5IGNo4bunIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzAKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgInThuqFvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzMKK21zZ2lkICJkZWxldGUiCittc2dzdHIgInjDs2EiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzNworbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgIsSRw6MgY+G6rXAgbmjhuq10IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDAKK21zZ2lkICJmYXN0LWZvcndhcmRhYmxlIgorbXNnc3RyICJjw7MtdGjhu4MtY2h1eeG7g24tdGnhur9wLW5oYW5oIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDMKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAiZOG7ryBsaeG7h3UgbuG7mWkgYuG7mSDEkcOjIGPFqSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIGZvcmNlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIMOpcCBideG7mWMgdGjDoG5oICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIMSR4bqpeSBsw6puIHRow6BuaCAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIMOpcCBideG7mWMgdGjDoG5oICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgcHVzaGVzIHRvICVzIgorbXNnc3RyICIgICAgJS0qcyDEkeG6qXkgbMOqbiB0aMOgbmggJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTEyOAorbXNnaWQgImRvIG5vdCBxdWVyeSByZW1vdGVzIgorbXNnc3RyICJraMO0bmcgdHJ1eSB24bqlbiBjw6FjIG3DoXkgY2jhu6ciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIqIHJlbW90ZSAlcyIKK21zZ3N0ciAiKiBtw6F5IGNo4bunICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIFVSTCDEkeG7gyBs4bqleSB24buBOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTU3IGJ1aWx0aW4vcmVtb3RlLmM6MTMwOAorbXNnaWQgIihubyBVUkwpIgorbXNnc3RyICIoa2jDtG5nIGPDsyBVUkwpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNjYgYnVpbHRpbi9yZW1vdGUuYzoxMTY4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgUHVzaCAgVVJMOiAlcyIKK21zZ3N0ciAiICBVUkwgxJHhu4MgxJHhuql5IGzDqm46ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNzAgYnVpbHRpbi9yZW1vdGUuYzoxMTcyIGJ1aWx0aW4vcmVtb3RlLmM6MTE3NAorIywgYy1mb3JtYXQKK21zZ2lkICIgIEhFQUQgYnJhbmNoOiAlcyIKK21zZ3N0ciAiICBOaMOhbmggSEVBRDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIgIG5ow6FuaCBIRUFEIChIRUFEIG3DoXkgY2jhu6cgY2jGsGEgcsO1IHLDoG5nLCBjw7MgbOG6vSBsw6AgbeG7mXQgdHJvbmcgc+G7kSBzYXUpOlxuIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBSZW1vdGUgYnJhbmNoOiVzIgorbXNnaWRfcGx1cmFsICIgIFJlbW90ZSBicmFuY2hlczolcyIKK21zZ3N0clswXSAiICBOaOG7r25nIG5ow6FuaCB0csOqbiBtw6F5IGNo4bunOiVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExOTEgYnVpbHRpbi9yZW1vdGUuYzoxMjE4Cittc2dpZCAiIChzdGF0dXMgbm90IHF1ZXJpZWQpIgorbXNnc3RyICIgKHRy4bqhbmcgdGjDoWkga2jDtG5nIMSRxrDhu6NjIHnDqnUgY+G6p3UpIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMDAKK21zZ2lkICIgIExvY2FsIGJyYW5jaCBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOiIKK21zZ3N0clswXSAiICBOaOG7r25nIG5ow6FuaCBu4buZaSBi4buZIMSRw6MgxJHGsOG7o2MgY+G6pXUgaMOsbmggY2hvIGzhu4duaCDigJxnaXQgcHVsbOKAnToiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIwOAorbXNnaWQgIiAgTG9jYWwgcmVmcyB3aWxsIGJlIG1pcnJvcmVkIGJ5ICdnaXQgcHVzaCciCittc2dzdHIgIiAgcmVmcyBu4buZaSBi4buZIHPhur0gxJHGsOG7o2MgcGjhuqNuIGNoaeG6v3UgYuG7n2kgbOG7h25oIOKAnGdpdCBwdXNo4oCdIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBMb2NhbCByZWYgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ2lkX3BsdXJhbCAiICBMb2NhbCByZWZzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVzaCclczoiCittc2dzdHJbMF0gIiAgTmjhu69uZyB0aGFtIGNoaeG6v3UgbuG7mWkgYuG7mSDEkcaw4bujYyBj4bqldSBow6xuaCBjaG8gbOG7h25oIOKAnGdpdCBwdXNo4oCdJXM6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyMzYKK21zZ2lkICJzZXQgcmVmcy9yZW1vdGVzLzxuYW1lPi9IRUFEIGFjY29yZGluZyB0byByZW1vdGUiCittc2dzdHIgIsSR4bq3dCByZWZzL3JlbW90ZXMvPHTDqm4+L0hFQUQgY2hvIHBow7kgaOG7o3AgduG7m2kgbcOheSBjaOG7pyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM4Cittc2dpZCAiZGVsZXRlIHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCIKK21zZ3N0ciAieMOzYSByZWZzL3JlbW90ZXMvPHTDqm4+L0hFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1MworbXNnaWQgIkNhbm5vdCBkZXRlcm1pbmUgcmVtb3RlIEhFQUQiCittc2dzdHIgIktow7RuZyB0aOG7gyB4w6FjIMSR4buLbmggxJHGsOG7o2MgSEVBRCBtw6F5IGNo4bunIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNTUKK21zZ2lkICJNdWx0aXBsZSByZW1vdGUgSEVBRCBicmFuY2hlcy4gUGxlYXNlIGNob29zZSBvbmUgZXhwbGljaXRseSB3aXRoOiIKK21zZ3N0ciAiTmhp4buBdSBuaMOhbmggSEVBRCBtw6F5IGNo4bunLiBIw6N5IGNo4buNbiByw7UgcsOgbmcgbeG7mXQ6IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRlbGV0ZSAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHjDs2EgYuG7jyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjczCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIHJlZjogJXMiCittc2dzdHIgIktow7RuZyBwaOG6o2kgbMOgIHRoYW0gY2hp4bq/dSBo4bujcCBs4buHOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPDoGkgxJHhurd0ICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICVzIHdpbGwgYmVjb21lIGRhbmdsaW5nISIKK21zZ3N0ciAiICVzIHPhur0gdHLhu58gdGjDoG5oIGtow7RuZyDEkeG6p3UgKGtow7RuZyDEkcaw4bujYyBxdeG6o24gbMO9KSEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyDEkcOjIHRy4bufIHRow6BuaCBraMO0bmcgxJHhuqd1IChraMO0bmcgxJHGsOG7o2MgcXXhuqNuIGzDvSkhIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJ1bmluZyAlcyIKK21zZ3N0ciAixJBhbmcgeMOpbiBi4bubdCAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVSTDogJXMiCittc2dzdHIgIlVSTDogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMyMQorIywgYy1mb3JtYXQKK21zZ2lkICIgKiBbd291bGQgcHJ1bmVdICVzIgorbXNnc3RyICIgKiBbbsOqbiB4w6luIGLhu5t0XSAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzI0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFtwcnVuZWRdICVzIgorbXNnc3RyICIgKiBbxJHDoyBi4buLIHjDqW5dICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNjkKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICJj4bqvdCBtw6F5IGNo4bunIHNhdSBraGkgbOG6pXkgduG7gSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDM1IGJ1aWx0aW4vcmVtb3RlLmM6MTUwOQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIHJlbW90ZSAnJXMnIgorbXNnc3RyICJLaMO0bmcgY8OzIG3DoXkgY2jhu6cgbsOgbyBjw7MgdMOqbiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDU1Cittc2dpZCAiYWRkIGJyYW5jaCIKK21zZ3N0ciAidGjDqm0gbmjDoW5oIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0NjIKK21zZ2lkICJubyByZW1vdGUgc3BlY2lmaWVkIgorbXNnc3RyICJjaMawYSBjaOG7iSByYSBtw6F5IGNo4bunIG7DoG8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4NAorbXNnaWQgIm1hbmlwdWxhdGUgcHVzaCBVUkxzIgorbXNnc3RyICLEkeG6qXkgY8OhYyDigJxVUkzigJ0gYuG6sW5nIHRheSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDg2Cittc2dpZCAiYWRkIFVSTCIKK21zZ3N0ciAidGjDqm0gVVJMIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODgKK21zZ2lkICJkZWxldGUgVVJMcyIKK21zZ3N0ciAieMOzYSBVUkxzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0OTUKK21zZ2lkICItLWFkZCAtLWRlbGV0ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UiCittc2dzdHIgIi0tYWRkIC0tZGVsZXRlIGtow7RuZyBo4bujcCBsw70iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIktp4buDdSBt4bqrdSBVUkwgY8WpIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggVVJMIGZvdW5kOiAlcyIKK21zZ3N0ciAiS2jDtG5nIHTDrG0gdGjhuqV5IFVSTCBuaMawIHbhuq15OiAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQ1Cittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICJT4bq9IGtow7RuZyB4w7NhIG5o4buvbmcgxJHhu4thIGNo4buJIFVSTCBraMO0bmctcHVzaCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU5Cittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAiY2hpIHRp4bq/dDsgcGjhuqNpIMSRxrDhu6NjIMSR4bq3dCB0csaw4bubYyBt4buZdCBs4buHbmgtY29uIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3Cittc2dpZCAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlcGFjayBbPGPDoWMtdMO5eS1jaOG7jW4+XSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNTkKK21zZ2lkICJwYWNrIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgcGFjayIKK21zZ3N0ciAixJHDs25nIGfDs2kgbeG7jWkgdGjhu6kgdHJvbmcgbeG7mXQgZ8OzaSDEkcahbiIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjEKK21zZ2lkICJzYW1lIGFzIC1hLCBhbmQgdHVybiB1bnJlYWNoYWJsZSBvYmplY3RzIGxvb3NlIgorbXNnc3RyICJnaeG7kW5nIHbhu5tpIC1hLCB2w6AgY2jhu4luaCBz4butYSBjw6FjIMSR4buRaSB0xrDhu6NuZyBraMO0bmcgxJHhu41jIMSRxrDhu6NjIHRoaeG6v3Ugc8OzdCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjQKK21zZ2lkICJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiCittc2dzdHIgInjDs2EgYuG7jyBjw6FjIGfDs2kgZMawIHRo4burYSwgdsOgIGNo4bqheSBnaXQtcHJ1bmUtcGFja2VkIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2NgorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICJjaHV54buDbiAtLW5vLXJldXNlLWRlbHRhIGNobyBnaXQtcGFjay1vYmplY3RzIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2OAorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1vYmplY3QgdG8gZ2l0LXBhY2stb2JqZWN0cyIKK21zZ3N0ciAiY2h1eeG7g24gLS1uby1yZXVzZS1vYmplY3QgY2hvIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTcwCittc2dpZCAiZG8gbm90IHJ1biBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorbXNnc3RyICJraMO0bmcgY2jhuqF5IGdpdC11cGRhdGUtc2VydmVyLWluZm8iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTczCittc2dpZCAicGFzcyAtLWxvY2FsIHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgImNodXnhu4NuIC0tbG9jYWwgY2hvIGdpdC1wYWNrLW9iamVjdHMiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc1Cittc2dpZCAid3JpdGUgYml0bWFwIGluZGV4IgorbXNnc3RyICJnaGkgbeG7pWMgbOG7pWMgw6FuaCB44bqhIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3NgorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICJuZ8OgeSDGsOG7m2MgdMOtbmgiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc3Cittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAiduG7m2kgLUEsIGPDoWMgxJHhu5FpIHTGsOG7o25nIGPFqSBoxqFuIGtob+G6o25nIHRo4budaSBnaWFuIG7DoHkgdGjDrCBraMO0bmcgYuG7iyBt4bqldCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzkKK21zZ2lkICJzaXplIG9mIHRoZSB3aW5kb3cgdXNlZCBmb3IgZGVsdGEgY29tcHJlc3Npb24iCittc2dzdHIgImvDrWNoIHRoxrDhu5tjIGPhu61hIHPhu5UgxJHGsOG7o2MgZMO5bmcgY2hvIG7DqW4g4oCcZGVsdGHigJ0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgwIGJ1aWx0aW4vcmVwYWNrLmM6MTg0Cittc2dpZCAiYnl0ZXMiCittc2dzdHIgImJ5dGUiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgxCittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgImdp4buRbmcgbmjGsCB0csOqbiwgbmjGsG5nIGdp4bubaSBo4bqhbiBrw61jaCB0aMaw4bubYyBi4buZIG5o4bubIGhheSB2w6wgc+G7kSBsxrDhu6NuZyIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODMKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgImdp4bubaSBo4bqhbiDEkeG7mSBzw6J1IHThu5FpIMSRYSBj4bunYSDigJxkZWx0YeKAnSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODUKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAia8OtY2ggdGjGsOG7m2MgdOG7kWkgxJFhIGNobyB04burbmcgdOG6rXAgdGluIGfDs2kiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTg3Cittc2dpZCAicmVwYWNrIG9iamVjdHMgaW4gcGFja3MgbWFya2VkIHdpdGggLmtlZXAiCittc2dzdHIgIsSRw7NuZyBnw7NpIGzhuqFpIGPDoWMgxJHhu5FpIHTGsOG7o25nIHRyb25nIGPDoWMgZ8OzaSDEkcOjIMSRw6FuaCBk4bqldSBi4bqxbmcgLmtlZXAiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6Mzc4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW92aW5nICclcycgZmFpbGVkIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeMOzYSBi4buPIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxOQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSA8xJHhu5FpLXTGsOG7o25nPiA8dGhheS10aOG6vz4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIwCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPG9iamVjdD4iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1lZGl0IDzEkeG7kWkgdMaw4bujbmc+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA8Y29tbWl0PiBbPHBhcmVudD4uLi5dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLWZdIC0tZ3JhZnQgPGzhuqduX2NodXnhu4NuX2dpYW8+IFs8Y2hhX23hurk+4oCmXSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjIKK21zZ2lkICJnaXQgcmVwbGFjZSAtZCA8b2JqZWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgLWQgPMSR4buRaSB0xrDhu6NuZz7igKYiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIzCittc2dpZCAiZ2l0IHJlcGxhY2UgWy0tZm9ybWF0PTxmb3JtYXQ+XSBbLWwgWzxwYXR0ZXJuPl1dIgorbXNnc3RyICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PMSR4buLbmhfZOG6oW5nPl0gWy1sIFs8beG6q3U+XV0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjMyNSBidWlsdGluL3JlcGxhY2UuYzozNjMgYnVpbHRpbi9yZXBsYWNlLmM6MzkxCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIG9iamVjdCBuYW1lOiAnJXMnIgorbXNnc3RyICJLaMO0bmcgcGjhuqNpIGzDoCB0w6puIMSR4buRaSB0xrDhu6NuZyBo4bujcCBs4buHOiDigJwlc+KAnSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAidGjhursgaMOyYSB0cuG7mW4gc2FpIHRyb25nIGzhuqduIGNodXnhu4NuIGdpYW8g4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM1NworIywgYy1mb3JtYXQKK21zZ2lkICJtYWxmb3JtZWQgbWVyZ2V0YWcgaW4gY29tbWl0ICclcyciCittc2dzdHIgInRo4bq7IGjDsmEgdHLhu5luIGtow7RuZyDEkcO6bmcgZOG6oW5nIOG7nyBs4bqnbiBjaHV54buDbiBnaWFvIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9yaWdpbmFsIGNvbW1pdCAnJXMnIGNvbnRhaW5zIG1lcmdldGFnICclcycgdGhhdCBpcyBkaXNjYXJkZWQ7IHVzZSAtLWVkaXQgIgorImluc3RlYWQgb2YgLS1ncmFmdCIKK21zZ3N0ciAiIgorImzhuqduIGNodXnhu4NuIGdpYW8gZ+G7kWMg4oCcJXPigJ0gY8OzIGNo4bupYSB0aOG6uyBow7JhIHRy4buZbiDigJwlc+KAnSBjw6FpIG3DoCBi4buLIGxv4bqhaSBi4buPOyBkw7luZyAiCisidMO5eSBjaOG7jW4gLS1lZGl0IHRoYXkgY2hvIC0tZ3JhZnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZS4iCittc2dzdHIgImzhuqduIGNodXnhu4NuIGdpYW8gZ+G7kWMg4oCcJXPigJ0gY8OzIGNo4buvIGvDvSBHUEcuIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDIKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAiY2jhu68ga8O9IHPhur0gxJHGsOG7o2MgYuG7jyDEkWkgdHJvbmcgbOG6p24gY2h1eeG7g24gZ2lhbyB0aGF5IHRo4bq/ISIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDA4CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSByZXBsYWNlbWVudCBjb21taXQgZm9yOiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgZ2hpIGzhuqduIGNodXnhu4NuIGdpYW8gdGhheSB0aOG6vyBjaG86IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzIKK21zZ2lkICJsaXN0IHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAibGnhu4d0IGvDqiBjw6FjIHJlZnMgdGhheSB0aOG6vyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMzCittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAieMOzYSB0aGFtIGNoaeG6v3UgdGhheSB0aOG6vyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM0Cittc2dpZCAiZWRpdCBleGlzdGluZyBvYmplY3QiCittc2dzdHIgInPhu61hIMSR4buRaSB0xrDhu6NuZyBz4bq1biBjw7MiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNQorbXNnaWQgImNoYW5nZSBhIGNvbW1pdCdzIHBhcmVudHMiCittc2dzdHIgInRoYXkgxJHhu5VpIGNoYSBt4bq5IGPhu6dhIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNgorbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgInRoYXkgdGjhur8gdGhhbSBjaGnhur91IG7hur91IG7DsyDEkcOjIHPhurVuIGPDsyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM3Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICLEkeG7q25nIGluIMSR4bq5cCBjw6FjIG7hu5lpIGR1bmcgY2hvIC0tZWRpdCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM4Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICJkw7luZyDEkeG7i25oIGThuqFuZyBuw6B5IgorCisjOiBidWlsdGluL3JlcmVyZS5jOjEyCittc2dpZCAiZ2l0IHJlcmVyZSBbY2xlYXIgfCBmb3JnZXQgPHBhdGg+Li4uIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKK21zZ3N0ciAiIgorImdpdCByZXJlcmUgW2NsZWFyIHwgZm9yZ2V0IDzEkcaw4budbmcgZOG6q24+4oCmIHwgc3RhdHVzIHwgcmVtYWluaW5nIHwgZGlmZiB8IGdjXSIKKworIzogYnVpbHRpbi9yZXJlcmUuYzo1NworbXNnaWQgInJlZ2lzdGVyIGNsZWFuIHJlc29sdXRpb25zIGluIGluZGV4IgorbXNnc3RyICJz4buVIGdoaSBk4buNbiBz4bqhY2ggY8OhYyBwaMOibiBnaeG6o2kgdHJvbmcgYuG6o24gbeG7pWMgbOG7pWMiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNgorbXNnaWQgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCittc2dzdHIgIiIKKyJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs8Y29tbWl0Pl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNworbXNnaWQgImdpdCByZXNldCBbLXFdIDx0cmVlLWlzaD4gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSA8dHJlZS1pc2g+IFstLV0gPMSRxrDhu51uZy1k4bqrbj7igKYiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyOAorbXNnaWQgImdpdCByZXNldCAtLXBhdGNoIFs8dHJlZS1pc2g+XSBbLS1dIFs8cGF0aHM+Li4uXSIKK21zZ3N0ciAiZ2l0IHJlc2V0IC0tcGF0Y2ggWzx0cmVlLWlzaD5dIFstLV0gWzxjw6FjLcSRxrDhu51uZy1k4bqrbj7igKZdIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAicGhhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAic29mdCIKK21zZ3N0ciAibeG7gW0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgImhhcmQiCittc2dzdHIgImPhu6luZyIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAibWVyZ2UiCittc2dzdHIgImjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJrZWVwIgorbXNnc3RyICJnaeG7ryBs4bqhaSIKKworIzogYnVpbHRpbi9yZXNldC5jOjc0Cittc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRC4iCittc2dzdHIgIkLhuqFuIGtow7RuZyBjw7MgSEVBRCBuw6BvIGjhu6NwIGzhu4cuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzYKK21zZ2lkICJGYWlsZWQgdG8gZmluZCB0cmVlIG9mIEhFQUQuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgdMOsbSBjw6J5IGPhu6dhIEhFQUQuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGZpbmQgdHJlZSBvZiAlcy4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSB0w6xtIGPDonkgY+G7p2EgJXMuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIGhp4buHbiBnaeG7nSB04bqhaSAlcyIKKworIzogYnVpbHRpbi9yZXNldC5jOjE4MworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gYSAlcyByZXNldCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UuIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiBt4buZdCAlcyByZXNldCDhu58gZ2nhu69hIGPhu6dhIHF1w6EgdHLDrG5oIGjDsmEgdHLhu5luLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3NgorbXNnaWQgImJlIHF1aWV0LCBvbmx5IHJlcG9ydCBlcnJvcnMiCittc2dzdHIgImzDoG0gdmnhu4djIOG7nyBjaOG6vyDEkeG7mSBpbSBs4bq3bmcsIGNo4buJIGhp4buDbiB0aOG7iyBraGkgY8OzIGzhu5dpIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjc4Cittc2dpZCAicmVzZXQgSEVBRCBhbmQgaW5kZXgiCittc2dzdHIgIsSR4bq3dCBs4bqhaSAocmVzZXQpIEhFQUQgdsOgIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI3OQorbXNnaWQgInJlc2V0IG9ubHkgSEVBRCIKK21zZ3N0ciAiY2jhu4kgxJHhurd0IGzhuqFpIChyZXNldCkgSEVBRCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4MSBidWlsdGluL3Jlc2V0LmM6MjgzCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAixJHhurd0IGzhuqFpIEhFQUQsIGLhuqNuZyBt4bulYyBs4bulYyB2w6AgY8OieSBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4NQorbXNnaWQgInJlc2V0IEhFQUQgYnV0IGtlZXAgbG9jYWwgY2hhbmdlcyIKK21zZ3N0ciAixJHhurd0IGzhuqFpIEhFQUQgbmjGsG5nIGdp4buvIGzhuqFpIGPDoWMgdGhheSDEkeG7lWkgbuG7mWkgYuG7mSIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4OAorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICJjaOG7iSBnaGkgbOG6oWkgbmjhu69uZyDEkcaw4budbmcgZOG6q24gdGjhu7FjIHPhu7Egc+G6vSDEkcaw4bujYyB0aMOqbSB2w6BvIHNhdSBuw6B5IgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzA1CisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZXZpc2lvbi4iCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBwaMOibiBnaeG6o2kg4oCcJXPigJ0gbmjGsCBsw6AgxJFp4buDbSB4w6l0IGR1eeG7h3QgaOG7o3AgbOG7hy4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHRyZWUuIgorbXNnc3RyICJH4bq3cCBs4buXaSBraGkgcGjDom4gZ2nhuqNpIOKAnCVz4oCdIG5oxrAgbMOgIG3hu5l0IGPDonkgKHRyZWUpIGjhu6NwIGzhu4cuIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIyCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICItLXBhdGNoIHh1bmcga2jhuq9jIHbhu5tpIC0te2hhcmQsbWl4ZWQsc29mdH0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzEKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIiIKKyItLW1peGVkIHbhu5tpIGPDoWMgxJHGsOG7nW5nIGThuqtuIGtow7RuZyBjw7JuIGTDuW5nIG7hu69hOyBow6N5IHRoYXkgdGjhur8gYuG6sW5nIGzhu4duaCDigJxnaXQgIgorInJlc2V0IC0tIDzEkcaw4budbmdfZOG6q24+4oCdLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIktow7RuZyB0aOG7gyB0aOG7sWMgaGnhu4duIGzhu4duaCAlcyByZXNldCB24bubaSBjw6FjIMSRxrDhu51uZyBk4bqrbi4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYSBiYXJlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVzIHJlc2V0IGtow7RuZyDEkcaw4bujYyBwaMOpcCB0csOqbiBraG8gdGh14bqnbiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0NworbXNnaWQgIi1OIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCAtLW1peGVkIgorbXNnc3RyICItTiBjaOG7iSDEkcaw4bujYyBkw7luZyBraGkgY8OzIC0tbWl4ZWQiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNjQKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OiIKK21zZ3N0ciAiTmjhu69uZyB0aGF5IMSR4buVaSDEkcaw4bujYyDEkcawYSByYSBraOG7j2kgYuG7hyBwaMOzbmcgc2F1IGtoaSByZXNldDoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlc2V0IGluZGV4IGZpbGUgdG8gcmV2aXNpb24gJyVzJy4iCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG6t3QgbOG6oWkgKHJlc2V0KSBi4bqjbmcgbeG7pWMgbOG7pWMgdGjDoG5oIMSRaeG7g20geMOpdCBkdXnhu4d0IOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3NAorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBuZXcgaW5kZXggZmlsZS4iCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgdOG6rXAgdGluIGzGsHUgYuG6o25nIG3hu6VjIGzhu6VjIG3hu5tpLiIKKworIzogYnVpbHRpbi9yZXYtbGlzdC5jOjM1NAorbXNnaWQgInJldi1saXN0IGRvZXMgbm90IHN1cHBvcnQgZGlzcGxheSBvZiBub3RlcyIKK21zZ3N0ciAicmV2LWxpc3Qga2jDtG5nIGjhu5cgdHLhu6MgaGnhu4NuIHRo4buLIGPDoWMgZ2hpIGNow7oiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzYxCittc2dpZCAiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8b3B0aW9ucz5dIC0tIFs8YXJncz4uLi5dIgorbXNnc3RyICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxjw6FjLXTDuXktY2jhu41uPl0gLS0gWzxjw6FjIHRoYW0gc+G7kT7igKZdIgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjM2NgorbXNnaWQgImtlZXAgdGhlIGAtLWAgcGFzc2VkIGFzIGFuIGFyZyIKK21zZ3N0ciAiZ2nhu68gbOG6oWkg4oCcLS3igJ0gY2h1eeG7g24gc2FuZyBsw6BtIHRoYW0gc+G7kSIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzozNjgKK21zZ2lkICJzdG9wIHBhcnNpbmcgYWZ0ZXIgdGhlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQiCittc2dzdHIgImThu6tuZyBwaMOibiB0w61jaCBzYXUgxJHhu5FpIHPhu5EgxJHhuqd1IHRpw6puIGtow7RuZyBjw7MgdMO5eSBjaOG7jW4iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzcxCittc2dpZCAib3V0cHV0IGluIHN0dWNrIGxvbmcgZm9ybSIKK21zZ3N0ciAia+G6v3QgeHXhuqV0IHRyb25nIMSR4buLbmggZOG6oW5nIGfhuq15IGTDoGkiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6NTAyCittc2dpZCAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPG9wdGlvbnM+XSAtLSBbPGFyZ3M+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzxhcmc+Li4uXVxuIgorIiAgIG9yOiBnaXQgcmV2LXBhcnNlIFs8b3B0aW9ucz5dIFs8YXJnPi4uLl1cbiIKKyJcbiIKKyJSdW4gXCJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLWhcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZmlyc3QgdXNhZ2UuIgorbXNnc3RyICIiCisiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IFs8Y8OhYy10w7l5LWNo4buNbj5dIC0tIFs8Y8OhYyDEkeG7kWkgc+G7kT7igKZdXG4iCisiICAgaG/hurdjOiBnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzzEkS5z4buRPuKApl1cbiIKKyIgICBob+G6t2M6IGdpdCByZXYtcGFyc2UgWzxjw6FjLXTDuXktY2jhu41uPl0gWzzEkS5z4buRPuKApl1cbiIKKyJcbiIKKyJDaOG6oXkgbOG7h25oIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgxJHhu4MgY8OzIHRow6ptIHRow7RuZyB0aW4gduG7gSBjw6FjaCBkw7luZy4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjIKK21zZ2lkICJnaXQgcmV2ZXJ0IFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJldmVydCBbPGPDoWMtdMO5eS1jaOG7jW4+XSA8Y29tbWl0LWlzaD7igKYiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjMKK21zZ2lkICJnaXQgcmV2ZXJ0IDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IHJldmVydCA8bOG7h25oLWNvbj4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjgKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgWzxvcHRpb25zPl0gPGNvbW1pdC1pc2g+Li4uIgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgWzxjw6FjLXTDuXktY2jhu41uPl0gPGNvbW1pdC1pc2g+4oCmIgorCisjOiBidWlsdGluL3JldmVydC5jOjI5Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIDxzdWJjb21tYW5kPiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIDxs4buHbmgtY29uPiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgY2Fubm90IGJlIHVzZWQgd2l0aCAlcyIKK21zZ3N0ciAiJXM6ICVzIGtow7RuZyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSAlcyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MAorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgImvhur90IHRow7pjIGNoZXJyeS1waWNrIGhheSBob8OgbiBuZ3V5w6puIGxpw6puIHRp4bq/cCBuaGF1IgorCisjOiBidWlsdGluL3JldmVydC5jOjgxCittc2dpZCAicmVzdW1lIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAicGjhu6VjIGjhu5NpIGzhuqFpIGNoZXJyeS1waWNrIGhheSBob8OgbiBuZ3V5w6puIGxpw6puIHRp4bq/cCBuaGF1IgorCisjOiBidWlsdGluL3JldmVydC5jOjgyCittc2dpZCAiY2FuY2VsIHJldmVydCBvciBjaGVycnktcGljayBzZXF1ZW5jZSIKK21zZ3N0ciAia2jDtG5nIGNoZXJyeS1waWNrIGhheSBob8OgbiBuZ3V5w6puIGxpw6puIHRp4bq/cCBuaGF1IgorCisjOiBidWlsdGluL3JldmVydC5jOjgzCittc2dpZCAiZG9uJ3QgYXV0b21hdGljYWxseSBjb21taXQiCittc2dzdHIgImtow7RuZyBjaHV54buDbiBnaWFvIG3hu5l0IGPDoWNoIHThu7EgxJHhu5luZy4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODQKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAic+G7rWEgbOG6oWkgY2jDuiB0aMOtY2ggY2hvIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODcKK21zZ2lkICJwYXJlbnQgbnVtYmVyIgorbXNnc3RyICJz4buRIGPhu6dhIGNoYSBt4bq5IgorCisjOiBidWlsdGluL3JldmVydC5jOjg5Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgImNoaeG6v24gbMaw4bujYyBow7JhIHRy4buZbiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MAorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAidMO5eSBjaOG7jW4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6OTEKK21zZ2lkICJvcHRpb24gZm9yIG1lcmdlIHN0cmF0ZWd5IgorbXNnc3RyICJ0w7l5IGNo4buNbiBjaG8gY2hp4bq/biBsxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAibuG7kWkgdGjDqm0gdMOqbiBs4bqnbiBjaHV54buDbiBnaWFvIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNgorbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICJj4bqlbSBraOG7n2kgdOG6oW8gbOG6p24gY2h1eeG7g24gZ2lhbyB0cuG7kW5nIHLhu5duZyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDcKK21zZ2lkICJhbGxvdyBjb21taXRzIHdpdGggZW1wdHkgbWVzc2FnZXMiCittc2dzdHIgImNo4bqlcCBuaOG6rW4gY2h1eeG7g24gZ2lhbyBtw6Aga2jDtG5nIGdoaSBjaMO6IGfDrCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMDgKK21zZ2lkICJrZWVwIHJlZHVuZGFudCwgZW1wdHkgY29tbWl0cyIKK21zZ3N0ciAiZ2nhu68gbOG6oWkgY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGTGsCB0aOG7q2EsIHLhu5duZyIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJwcm9ncmFtIGVycm9yIgorbXNnc3RyICJs4buXaSBjaMawxqFuZyB0csOsbmgiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTk3Cittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAiaG/DoG4gbmd1ecOqbiBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMTIKK21zZ2lkICJjaGVycnktcGljayBmYWlsZWQiCittc2dzdHIgImNoZXJyeS1waWNrIGfhurdwIGzhu5dpIgorCisjOiBidWlsdGluL3JtLmM6MTcKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPGPDoWMtdMO5eS1jaOG7jW4+XSBbLS1dIDx04bqtcC10aW4+4oCmIgorCisjOiBidWlsdGluL3JtLmM6NjUKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgKG9yIG9uZSBvZiBpdHMgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisidXNlcyBhIC5naXQgZGlyZWN0b3J5OiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgc3VibW9kdWxlcyAob3Igb25lIG9mIHRoZWlyIG5lc3RlZCBzdWJtb2R1bGVzKVxuIgorInVzZSBhIC5naXQgZGlyZWN0b3J5OiIKK21zZ3N0clswXSAiIgorImPDoWMgbcO0LcSRdW4tY29uIHNhdSDEkcOieSAoaGF5IG3hu5l0IHRyb25nIHPhu5EgbcO0LcSRdW4tY29uIGLDqm4gdHJvbmcgY+G7p2EgbsOzKVxuIgorImTDuW5nIG3hu5l0IHRoxrAgbeG7pWMgLmdpdDoiCisKKyM6IGJ1aWx0aW4vcm0uYzo3MQorbXNnaWQgIiIKKyJcbiIKKyIodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIiIKKyJcbiIKKyIoZMO5bmcgL1wicm0gLXJmL1wiIG7hur91IGLhuqFuIHRo4buxYyBz4buxIG114buRbiBn4buhIGLhu48gbsOzIGPDuW5nIHbhu5tpIHThuqV0IGPhuqMgbOG7i2NoIHPhu60gY+G7p2EgIgorImNow7puZykiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzAKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAiIgorImPDoWMgdOG6rXAgdGluIHNhdSDEkcOieSBjw7MgdHLhuqFuZyB0aMOhaSBraMOhYyBiaeG7h3QgbuG7mWkgZHVuZyB04burIGPhuqMgdOG6rXAgdGluXG4iCisidsOgIGPhuqMgSEVBRDoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzUKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIihkw7luZyAtZiDEkeG7gyBideG7mWMgZ+G7oSBi4buPKSIKKworIzogYnVpbHRpbi9ybS5jOjIzOQorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgY2hhbmdlcyBzdGFnZWQgaW4gdGhlIGluZGV4OiIKK21zZ2lkX3BsdXJhbCAidGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dzdHJbMF0gImPDoWMgdOG6rXAgdGluIHNhdSDEkcOieSBjw7MgdGhheSDEkeG7lWkgdHLhuqFuZyB0aMOhaSB0cm9uZyBi4bqjbmcgbeG7pWMgbOG7pWM6IgorCisjOiBidWlsdGluL3JtLmM6MjQzIGJ1aWx0aW4vcm0uYzoyNTQKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIihkw7luZyB0w7l5IGNo4buNbiAtLWNhY2hlZCDEkeG7gyBnaeG7ryB04bqtcCB0aW4sIGhv4bq3YyAtZiDEkeG7gyDDqXAgYnXhu5ljIGfhu6EgYuG7jykiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNTEKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGxvY2FsIG1vZGlmaWNhdGlvbnM6IgorbXNnaWRfcGx1cmFsICJ0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dzdHJbMF0gIm5o4buvbmcgdOG6rXAgdGluIHNhdSDEkcOieSBjw7Mgbmjhu69uZyB0aGF5IMSR4buVaSBu4buZaSBi4buZOiIKKworIzogYnVpbHRpbi9ybS5jOjI2OQorbXNnaWQgImRvIG5vdCBsaXN0IHJlbW92ZWQgZmlsZXMiCittc2dzdHIgImtow7RuZyBsaeG7h3Qga8OqIGPDoWMgdOG6rXAgdGluIMSRw6MgZ+G7oSBi4buPIgorCisjOiBidWlsdGluL3JtLmM6MjcwCittc2dpZCAib25seSByZW1vdmUgZnJvbSB0aGUgaW5kZXgiCittc2dzdHIgImNo4buJIGfhu6EgYuG7jyB04burIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL3JtLmM6MjcxCittc2dpZCAib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siCittc2dzdHIgImdoaSDEkcOoIGzDqm4ga2nhu4NtIHRyYSBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzIKK21zZ2lkICJhbGxvdyByZWN1cnNpdmUgcmVtb3ZhbCIKK21zZ3N0ciAiY2hvIHBow6lwIGfhu6EgYuG7jyDEkeG7hyBxdWkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzQKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAidGhvw6F0IHJhIHbhu5tpIHRy4bqhbmcgdGjDoWkga2jDoWMga2jDtG5nIHRo4bqtbSBjaMOtIG7hur91IGtow7RuZyBjw7MgZ8OsIGto4bubcCIKKworIzogYnVpbHRpbi9ybS5jOjMxNworbXNnaWQgIlBsZWFzZSwgc3RhZ2UgeW91ciBjaGFuZ2VzIHRvIC5naXRtb2R1bGVzIG9yIHN0YXNoIHRoZW0gdG8gcHJvY2VlZCIKK21zZ3N0ciAiIgorIlZ1aSBsw7JuZyDEkcawYSBjw6FjIHRoYXkgxJHhu5VpIGPhu6dhIGLhuqFuIHbDoG8g4oCcLmdpdG1vZHVsZXPigJ0gaGF5IHThuqFtIGPhuqV0IGNow7puZyDEkWkgxJHhu4MgIgorInjhu60gbMO9IgorCisjOiBidWlsdGluL3JtLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgImtow7RuZyB0aOG7gyBn4buhIGLhu48g4oCcJXPigJ0gbeG7mXQgY8OhY2ggxJHhu4cgcXVpIG3DoCBraMO0bmcgY8OzIHTDuXkgY2jhu41uIC1yIgorCisjOiBidWlsdGluL3JtLmM6Mzc0CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBybTogdW5hYmxlIHRvIHJlbW92ZSAlcyIKK21zZ3N0ciAiZ2l0IHJtOiBraMO0bmcgdGjhu4MgZ+G7oSBi4buPICVzIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE4Cittc2dpZCAiIgorImdpdCBzZW5kLXBhY2sgWy0tYWxsIHwgLS1taXJyb3JdIFstLWRyeS1ydW5dIFstLWZvcmNlXSBbLS1yZWNlaXZlLXBhY2s9PGdpdC0iCisicmVjZWl2ZS1wYWNrPl0gWy0tdmVyYm9zZV0gWy0tdGhpbl0gWy0tYXRvbWljXSBbPGhvc3Q+Ol08ZGlyZWN0b3J5PiAiCisiWzxyZWY+Li4uXVxuIgorIiAgLS1hbGwgYW5kIGV4cGxpY2l0IDxyZWY+IHNwZWNpZmljYXRpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCittc2dzdHIgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxtw6F5PjpdPHRoxrAvbeG7pWM+IFs8Y8OhYy10aGFtLSIKKyJjaGnhur91PuKApl1cbiIKKyIgIC0tYWxsIHbDoCDEkeG6t2MgdOG6oyA8cmVmPiByw7UgcsOgbmcgbMOgIGxv4bqhaSB0cuG7qyBs4bqrbiBuaGF1LiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjAKK21zZ2lkICJyZW1vdGUgbmFtZSIKK21zZ3N0ciAidMOqbiBtw6F5IGThu4tjaCB24bulIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MQorbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICJkw7luZyBnaWFvIHRo4bupYyBSUEMga2jDtG5nIOG7lW4gxJHhu4tuaCIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAixJHhu41jIHRoYW0gY2hp4bq/dSB04burIMSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTczCittc2dpZCAicHJpbnQgc3RhdHVzIGZyb20gcmVtb3RlIGhlbHBlciIKK21zZ3N0ciAiaW4gY8OhYyB0cuG6oW5nIHRow6FpIHThu6sgcGjhuqduIGjGsOG7m25nIGThuqtuIHRyw6puIG3DoXkgZOG7i2NoIHbhu6UiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxMworbXNnaWQgImdpdCBzaG9ydGxvZyBbPG9wdGlvbnM+XSBbPHJldmlzaW9uLXJhbmdlPl0gW1stLV0gWzxwYXRoPi4uLl1dIgorbXNnc3RyICJnaXQgc2hvcnRsb2cgWzxjw6FjLXTDuXktY2jhu41uPl0gWzx2w7luZy14w6l0LWR1eeG7h3Q+XSBbWy0tXSBbPMSRxrDhu51uZy1k4bqrbj7igKZdXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGF1dGhvcjogJXMiCittc2dzdHIgIlRoaeG6v3UgdMOqbiB0w6FjIGdp4bqjOiAlcyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzMAorbXNnaWQgInNvcnQgb3V0cHV0IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgcGVyIGF1dGhvciIKK21zZ3N0ciAic+G6r3AgeOG6v3Aga+G6v3QgeHXhuqV0IHR1w6JuIHRoZW8gc+G7kSBsxrDhu6NuZyBjaHV54buDbiBnaWFvIHRyw6puIG3hu5dpIHTDoWMgZ2nhuqMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzIKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAiQ2jhurduIG3hu41pIG3DtCB04bqjIGzhuqduIGNodXnhu4NuIGdpYW8sIGNo4buJIMSRxrBhIHJhIHPhu5EgbMaw4bujbmcgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjIzNAorbXNnaWQgIlNob3cgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgZWFjaCBhdXRob3IiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0aMawIMSRaeG7h24gdOG7rSBjaG8gdOG7q25nIHTDoWMgZ2nhuqMiCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzUKK21zZ2lkICJ3WyxpMVssaTJdXSIKK21zZ3N0ciAid1ssaTFbLGkyXV0iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzYKK21zZ2lkICJMaW5ld3JhcCBvdXRwdXQiCittc2dzdHIgIk5n4bqvdCBkw7JuZyBraGkgcXXDoSBkw6BpIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6OQorbXNnaWQgIiIKKyJnaXQgc2hvdy1icmFuY2ggWy1hIHwgLS1hbGxdIFstciB8IC0tcmVtb3Rlc10gWy0tdG9wby1vcmRlciB8IC0tZGF0ZS1vcmRlcl1cbiIKKyJcdFx0Wy0tY3VycmVudF0gWy0tY29sb3JbPTx3aGVuPl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPHJldj4gfCA8Z2xvYj4pLi4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PGtoaT5dIHwgLS1uby1jb2xvcl0gWy0tc3BhcnNlXVxuIgorIlx0XHRbLS1tb3JlPTxuPiB8IC0tbGlzdCB8IC0taW5kZXBlbmRlbnQgfCAtLW1lcmdlLWJhc2VdXG4iCisiXHRcdFstLW5vLW5hbWUgfCAtLXNoYTEtbmFtZV0gWy0tdG9waWNzXSBbKDxyZXY+IHwgPGdsb2I+KeKApl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzoxMworbXNnaWQgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzxyZWY+XSIKK21zZ3N0ciAiZ2l0IHNob3ctYnJhbmNoICgtZyB8IC0tcmVmbG9nKVs9PG4+Wyw8buG7gW4+XV0gWy0tbGlzdF0gWzxyZWY+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgbmjDoW5oIHJlbW90ZS10cmFja2luZyB2w6AgbuG7mWkgYuG7mSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGJyYW5jaGVzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyBuaMOhbmggcmVtb3RlLXRyYWNraW5nIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYzCittc2dpZCAiY29sb3IgJyohKy0nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGJyYW5jaCIKK21zZ3N0ciAibcOgdSDigJwqISst4oCdIHTGsMahbmcg4bupbmcgduG7m2kgbmjDoW5oIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY1Cittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgImhp4buDbiB0aOG7iyB0aMOqbSA8bj4gbOG6p24gY2h1eeG7g24gZ2lhbyBzYXUgY2hhIG3hurkgY2h1bmciCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjcKK21zZ2lkICJzeW5vbnltIHRvIG1vcmU9LTEiCittc2dzdHIgIsSR4buTbmcgbmdoxKlhIHbhu5tpIG1vcmU9LTEiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAiY2jhurduIGPDoWMgY2h14buXaSDEkeG6t3QgdMOqbiIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MAorbXNnaWQgImluY2x1ZGUgdGhlIGN1cnJlbnQgYnJhbmNoIgorbXNnc3RyICJiYW8gZ+G7k20gbmjDoW5oIGhp4buHbiBow6BuaCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MgorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAixJHhurd0IHTDqm4gY8OhYyBs4bqnbiBjaHV54buDbiBnaWFvIGLhurFuZyBjw6FjIHTDqm4gY+G7p2EgxJHhu5FpIHTGsOG7o25nIGPhu6dhIGNow7puZyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3NAorbXNnaWQgInNob3cgcG9zc2libGUgbWVyZ2UgYmFzZXMiCittc2dzdHIgImhp4buDbiB0aOG7iyBt4buNaSBjxqEgc+G7nyBjw7MgdGjhu4MgZMO5bmcgxJHhu4MgaMOyYSB0cuG7mW4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NzYKK21zZ2lkICJzaG93IHJlZnMgdW5yZWFjaGFibGUgZnJvbSBhbnkgb3RoZXIgcmVmIgorbXNnc3RyICJoaeG7g24gdGjhu4sgY8OhYyB0aGFtIGNoaeG6v3Uga2jDtG5nIHRo4buDIMSRxrDhu6NjIMSR4buNYyBi4bufaSBi4bqldCBr4buzIHRoYW0gY2hp4bq/dSBraMOhYyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3OAorbXNnaWQgInNob3cgY29tbWl0cyBpbiB0b3BvbG9naWNhbCBvcmRlciIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyB0aGVvIHRo4bupIHThu7EgdMO0cMO0IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjgxCittc2dpZCAic2hvdyBvbmx5IGNvbW1pdHMgbm90IG9uIHRoZSBmaXJzdCBicmFuY2giCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8ga2jDtG5nIG7hurFtIHRyw6puIG5ow6FuaCDEkeG6p3UgdGnDqm4iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODMKK21zZ2lkICJzaG93IG1lcmdlcyByZWFjaGFibGUgZnJvbSBvbmx5IG9uZSB0aXAiCittc2dzdHIgImhp4buDbiB0aOG7iyBjw6FjIGzhuqduIGjDsmEgdHLhu5luIGPDsyB0aOG7gyDEkeG7jWMgxJHGsOG7o2MgY2jhu4kgdOG7qyBt4buZdCDEkeG6p3UgbcO6dCIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4NQorbXNnaWQgInRvcG9sb2dpY2FsbHkgc29ydCwgbWFpbnRhaW5pbmcgZGF0ZSBvcmRlciB3aGVyZSBwb3NzaWJsZSIKK21zZ3N0ciAic+G6r3AgeOG6v3AgaMOsbmggdGjDoWkgaOG7jWMsIGLhuqNvIHRyw6wgdGjhu6kgdOG7sSBuZ8OgeSBu4bq/dSBjw7MgdGjhu4MiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODgKK21zZ2lkICI8bj5bLDxiYXNlPl0iCittc2dzdHIgIjxuPlssPGPGoV9z4bufPl0iCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODkKK21zZ2lkICJzaG93IDxuPiBtb3N0IHJlY2VudCByZWYtbG9nIGVudHJpZXMgc3RhcnRpbmcgYXQgYmFzZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIDxuPiBjw6FjIG3hu6VjIOKAnHJlZi1sb2figJ0gZ+G6p24gbmjhuqV0IGvhu4MgdOG7qyBu4buBbiAoYmFzZSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMAorbXNnaWQgIiIKKyJnaXQgc2hvdy1yZWYgWy1xIHwgLS1xdWlldF0gWy0tdmVyaWZ5XSBbLS1oZWFkXSBbLWQgfCAtLWRlcmVmZXJlbmNlXSBbLXMgfCAtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kfC0tZGVyZWZlcmVuY2VdIFstc3wtLSIKKyJoYXNoWz08bj5dXSBbLS1hYmJyZXZbPTxuPl1dIFstLXRhZ3NdIFstLWhlYWRzXSBbLS1dIFs8beG6q3U+4oCmXSAiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxMQorbXNnaWQgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTxwYXR0ZXJuPl0gPCA8cmVmLWxpc3Q+IgorbXNnc3RyICJnaXQgc2hvdy1yZWYgLS1leGNsdWRlLWV4aXN0aW5nWz08beG6q3U+XSA8IDxyZWYtbGlzdD4iCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzAKK21zZ2lkICJvbmx5IHNob3cgdGFncyAoY2FuIGJlIGNvbWJpbmVkIHdpdGggaGVhZHMpIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgdGjhursgKGPDsyB0aOG7gyB04buVIGjhu6NwIGPDuW5nIHbhu5tpIMSR4bqndSkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzEKK21zZ2lkICJvbmx5IHNob3cgaGVhZHMgKGNhbiBiZSBjb21iaW5lZCB3aXRoIHRhZ3MpIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgxJHhuqd1IChjw7MgdGjhu4MgdOG7lSBo4bujcCBjw7luZyB24bubaSB0aOG6uykiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzIKK21zZ2lkICJzdHJpY3RlciByZWZlcmVuY2UgY2hlY2tpbmcsIHJlcXVpcmVzIGV4YWN0IHJlZiBwYXRoIgorbXNnc3RyICIiCisidmnhu4djIGtp4buDbSB0cmEgdGhhbSBjaGnhur91IGNow61uaCB4w6FjLCDEkcOyaSBo4buPaSBjaMOtbmggeMOhYyDEkcaw4budbmcgZOG6q24gdGhhbSBjaGnhur91IgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc1IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzcKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgImhp4buDbiB0aOG7iyB0aGFtIGNoaeG6v3UgSEVBRCwgbmdheSBj4bqjIGtoaSBuw7MgxJHDoyDEkcaw4bujYyBs4buNYyByYSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICJiw6NpIGLhu48gdGhhbSBjaGnhur91IGPDoWMgdGjhursgdGjDoG5oIHJhIGPDoWMgSUQgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTgxCittc2dpZCAib25seSBzaG93IFNIQTEgaGFzaCB1c2luZyA8bj4gZGlnaXRzIgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbcOjIGLEg20gU0hBMSBz4butIGThu6VuZyA8bj4gY2jhu68gc+G7kSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4NQorbXNnaWQgImRvIG5vdCBwcmludCByZXN1bHRzIHRvIHN0ZG91dCAodXNlZnVsIHdpdGggLS12ZXJpZnkpIgorbXNnc3RyICIiCisia2jDtG5nIGhp4buDbiB0aOG7iyBr4bq/dCBxdeG6oyByYSDEkeG6p3UgcmEgY2h14bqpbiAoc3Rkb3V0KSAoY2jhu4kgaOG7r3UgZOG7pW5nIHbhu5tpIC0tdmVyaWZ5KSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE4NworbXNnaWQgInNob3cgcmVmcyBmcm9tIHN0ZGluIHRoYXQgYXJlbid0IGluIGxvY2FsIHJlcG9zaXRvcnkiCittc2dzdHIgIiIKKyJoaeG7g24gdGjhu4sgY8OhYyB0aGFtIGNoaeG6v3UgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIChzdGRpbikgY8OhaSBtw6Aga2jDtG5nIOG7nyBraG8gbuG7mWkgIgorImLhu5kiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NworbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgWzxjw6FjLXTDuXktY2jhu41uPl0gPHTDqm4+IFs8dC5jaGnhur91Pl0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6OAorbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8bmFtZT4iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgLWQgWy1xXSA8dMOqbj4iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICJjaOG6t24gY8OhYyB0aMO0bmcgdGluIGzhu5dpIGNobyBjw6FjIHRoYW0gY2hp4bq/dSDigJxraMO0bmctbeG7gW3igJ0gKGLhu4sgdMOhY2ggcmEpIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjQxCittc2dpZCAiZGVsZXRlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAieMOzYSB0aGFtIGNoaeG6v3UgbeG7gW0iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgImzDoG0gbmfhuq9uIGvhur90IHh14bqldCByZWYgKHRoYW0gY2hp4bq/dSkiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYyCittc2dpZCAicmVhc29uIgorbXNnc3RyICJsw70gZG8iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDMgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYyCittc2dpZCAicmVhc29uIG9mIHRoZSB1cGRhdGUiCittc2dzdHIgImzDvSBkbyBj4bqtcCBuaOG6rXQiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjIKK21zZ2lkICIiCisiZ2l0IHRhZyBbLWEgfCAtcyB8IC11IDxrZXktaWQ+XSBbLWZdIFstbSA8bXNnPiB8IC1GIDxmaWxlPl0gPHRhZ25hbWU+ICIKKyJbPGhlYWQ+XSIKK21zZ3N0ciAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz58LUYgPHThuq1wLXRpbj5dIDx0w6puLXRo4bq7PiAiCisiWzxoZWFkPl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCA8dMOqbi10aOG6uz7igKYiCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjQKK21zZ2lkICIiCisiZ2l0IHRhZyAtbCBbLW5bPG51bT5dXSBbLS1jb250YWlucyA8Y29tbWl0Pl0gWy0tcG9pbnRzLWF0IDxvYmplY3Q+XVxuIgorIlx0XHRbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCB0YWcgLWwgWy1uWzxz4buRPl1dIFstLWNvbnRhaW5zIDxs4bqnbl9jaHV54buDbl9naWFvPl0gWy0tcG9pbnRzLWF0IDzEkeG7kWktIgorInTGsOG7o25nPl1cbiIKKyJcdFx0Wzxt4bqrdT7igKZdIgorCisjOiBidWlsdGluL3RhZy5jOjI2Cittc2dpZCAiZ2l0IHRhZyAtdiA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgPHTDqm4tdGjhurs+4oCmIgorCisjOiBidWlsdGluL3RhZy5jOjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgYXQgJyVzJyIKK21zZ3N0ciAixJHhu5FpIHTGsOG7o25nIGThu4sgaMOsbmggdOG6oWkg4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzAxCisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyBuYW1lIHRvbyBsb25nOiAlLipzLi4uIgorbXNnc3RyICJ0w6puIHRo4bq7IHF1w6EgZMOgaTogJS4qc+KApiIKKworIzogYnVpbHRpbi90YWcuYzozMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAia2jDtG5nIHTDrG0gdGjhuqV5IHTDrG0gdGjhuqV5IHRo4bq7IOKAnCVz4oCdLiIKKworIzogYnVpbHRpbi90YWcuYzozMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGVsZXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICJUaOG6uyDEkcOjIGLhu4sgeMOzYSDigJwlc+KAnSAodOG7q25nIGzDoCAlcylcbiIKKworIzogYnVpbHRpbi90YWcuYzozMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHZlcmlmeSB0aGUgdGFnICclcyciCittc2dzdHIgImtow7RuZyB0aOG7gyB0aOG6qW0gdHJhIHRo4bq7IOKAnCVz4oCdIgorCisjOiBidWlsdGluL3RhZy5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGlnbm9yZWQuXG4iCittc2dzdHIgIiIKKyJcbiIKKyJWaeG6v3QgY8OhYyBnaGkgY2jDuiBjaG8gdGjhurs6XG4iCisiICAlc1xuIgorIk5o4buvbmcgZMOybmcgxJHGsOG7o2MgYuG6r3QgxJHhuqd1IGLhurFuZyDigJwlY+KAnSBz4bq9IMSRxrDhu6NjIGLhu48gcXVhLlxuIgorCisjOiBidWlsdGluL3RhZy5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorbXNnc3RyICIiCisiXG4iCisiVmnhur90IGPDoWMgZ2hpIGNow7ogY2hvIHRo4bq7OlxuIgorIiAgJXNcbiIKKyJOaOG7r25nIGTDsm5nIMSRxrDhu6NjIGLhuq90IMSR4bqndSBi4bqxbmcg4oCcJWPigJ0gc+G6vSDEkcaw4bujYyBnaeG7ryBs4bqhaTsgYuG6oW4gY8OzIHRo4buDIHjDs2EgY2jDum5nIMSRaSAiCisibuG6v3UgbXXhu5FuLlxuIgorCisjOiBidWlsdGluL3RhZy5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBzb3J0IHNwZWNpZmljYXRpb24gJyVzJyIKK21zZ3N0ciAia2jDtG5nIGjhu5cgdHLhu6MgxJHhurdjIHThuqMgc+G6r3AgeOG6v3Ag4oCcJXPigJ0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHNvcnQgc3BlY2lmaWNhdGlvbiAnJXMnIGluIHZhcmlhYmxlICclcyciCittc2dzdHIgImtow7RuZyBo4buXIHRy4bujIMSR4bq3YyB04bqjIHPhuq9wIHjhur9wIOKAnCVz4oCdIHRyb25nIGJp4bq/biDigJwlc+KAnSIKKworIzogYnVpbHRpbi90YWcuYzo0MjgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICJraMO0bmcgdGjhu4Mga8O9IHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjQzMAorbXNnaWQgInVuYWJsZSB0byB3cml0ZSB0YWcgZmlsZSIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGdoaSB2w6BvIHThuq1wIHRpbiBsxrB1IHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjQ1NQorbXNnaWQgImJhZCBvYmplY3QgdHlwZS4iCittc2dzdHIgImtp4buDdSDEkeG7kWkgdMaw4bujbmcgc2FpLiIKKworIzogYnVpbHRpbi90YWcuYzo0NjgKK21zZ2lkICJ0YWcgaGVhZGVyIHRvbyBiaWcuIgorbXNnc3RyICJwaOG6p24gxJHhuqd1IHRo4bq7IHF1w6EgbOG7m24uIgorCisjOiBidWlsdGluL3RhZy5jOjUwNAorbXNnaWQgIm5vIHRhZyBtZXNzYWdlPyIKK21zZ3N0ciAia2jDtG5nIGPDsyBjaMO6IHRow61jaCBnw6wgY2hvIGNobyB0aOG6uyDDoD8iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSB0YWcgbWVzc2FnZSBoYXMgYmVlbiBsZWZ0IGluICVzXG4iCittc2dzdHIgIk7hu5lpIGR1bmcgZ2hpIGNow7ogY8OybiBs4bqhaSAlc1xuIgorCisjOiBidWlsdGluL3RhZy5jOjU1OQorbXNnaWQgInN3aXRjaCAncG9pbnRzLWF0JyByZXF1aXJlcyBhbiBvYmplY3QiCittc2dzdHIgImNodXnhu4NuIMSR4bq/biDigJxwb2ludHMtYXTigJ0gecOqdSBj4bqnbiBt4buZdCDEkeG7kWkgdMaw4bujbmciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAnJXMnIgorbXNnc3RyICJ0w6puIMSR4buRaSB0xrDhu6NuZyBk4buLIGjDrG5oIOKAnCVz4oCdIgorCisjOiBidWlsdGluL3RhZy5jOjU5MAorbXNnaWQgImxpc3QgdGFnIG5hbWVzIgorbXNnc3RyICJjaOG7iSBsaeG7h3Qga8OqIHTDqm4gY8OhYyB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzo1OTIKK21zZ2lkICJwcmludCA8bj4gbGluZXMgb2YgZWFjaCB0YWcgbWVzc2FnZSIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIDxuPiBkw7JuZyBjaG8gbeG7l2kgZ2hpIGNow7oiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTk0Cittc2dpZCAiZGVsZXRlIHRhZ3MiCittc2dzdHIgInjDs2EgdGjhursiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTk1Cittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgInRo4bqpbSB0cmEgdGjhursiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTk3Cittc2dpZCAiVGFnIGNyZWF0aW9uIG9wdGlvbnMiCittc2dzdHIgIlTDuXkgY2jhu41uIHThuqFvIHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjU5OQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAixJHhu4MgY2jDuiBnaeG6o2kgY2hvIHRo4bq7LCBj4bqnbiBt4buZdCBs4budaSBnaGkgY2jDuiIKKworIzogYnVpbHRpbi90YWcuYzo2MDEKK21zZ2lkICJ0YWcgbWVzc2FnZSIKK21zZ3N0ciAicGjhuqduIGNow7ogdGjDrWNoIGNobyB0aOG6uyIKKworIzogYnVpbHRpbi90YWcuYzo2MDMKK21zZ2lkICJhbm5vdGF0ZWQgYW5kIEdQRy1zaWduZWQgdGFnIgorbXNnc3RyICJ0aOG6uyBjaMO6IGdp4bqjaSB2w6Aga8O9IGtp4buDdSBHUEciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjA3Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAiZMO5bmcga2jDoW8ga2jDoWMgxJHhu4Mga8O9IHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjYwOAorbXNnaWQgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiCittc2dzdHIgInRoYXkgdGjhur8gbuG6v3UgdGjhursgxJHDsyDEkcOjIGPDsyB0csaw4bubYyIKKworIzogYnVpbHRpbi90YWcuYzo2MDkgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICJ04bqhbyBt4buZdCByZWZsb2ciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjExCittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAiQ8OhYyB0w7l5IGNo4buNbiBsaeG7h3Qga8OqIHRo4bq7IgorCisjOiBidWlsdGluL3RhZy5jOjYxMgorbXNnaWQgInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIGRhbmggc8OhY2ggdGjhursgdHJvbmcgY8OhYyBj4buZdCIKKworIzogYnVpbHRpbi90YWcuYzo2MTQKK21zZ2lkICJzb3J0IHRhZ3MiCittc2dzdHIgInPhuq9wIHjhur9wIGPDoWMgdGjhursiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjE5IGJ1aWx0aW4vdGFnLmM6NjI1Cittc2dpZCAicHJpbnQgb25seSB0YWdzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICJjaOG7iSBoaeG7g24gdGjhu4sgbmjhu69uZyBuaMOhbmggbcOgIG7DsyBjaOG7qWEgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi90YWcuYzo2MzEKK21zZ2lkICJwcmludCBvbmx5IHRhZ3Mgb2YgdGhlIG9iamVjdCIKK21zZ3N0ciAiY2jhu4kgaGnhu4NuIHRo4buLIGPDoWMgdGjhursgY+G7p2EgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3RhZy5jOjY1NworbXNnaWQgIi0tY29sdW1uIGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiB2w6AgLW4geHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi90YWcuYzo2NjkKK21zZ2lkICItLXNvcnQgYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tc29ydCB2w6AgLW4geHVuZyBraOG6r2MgbmhhdSIKKworIzogYnVpbHRpbi90YWcuYzo2NzYKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICJ0w7l5IGNo4buNbiAtbiBjaOG7iSBjaG8gcGjDqXAgZMO5bmcgduG7m2kgLWwuIgorCisjOiBidWlsdGluL3RhZy5jOjY3OAorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAidMO5eSBjaOG7jW4gLS1jb250YWlucyBjaOG7iSBjaG8gcGjDqXAgZMO5bmcgduG7m2kgLWwuIgorCisjOiBidWlsdGluL3RhZy5jOjY4MAorbXNnaWQgIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgInTDuXkgY2jhu41uIC0tcG9pbnRzLWF0IGNo4buJIGNobyBwaMOpcCBkw7luZyB24bubaSAtbC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6Njg4Cittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICJjaOG7iSBjw7MgbeG7mXQgdMO5eSBjaOG7jW4gLUYgaG/hurdjIC1tIGzDoCDEkcaw4bujYyBwaMOpcC4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzA4Cittc2dpZCAidG9vIG1hbnkgcGFyYW1zIgorbXNnc3RyICJxdcOhIG5oaeG7gXUgxJHhu5FpIHPhu5EiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgaXMgbm90IGEgdmFsaWQgdGFnIG5hbWUuIgorbXNnc3RyICLigJwlc+KAnSBraMO0bmcgcGjhuqNpIHRo4bq7IGjhu6NwIGzhu4cuIgorCisjOiBidWlsdGluL3RhZy5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiVGjhursg4oCcJXPigJ0gxJHDoyB04buTbiB04bqhaSBy4buTaSIKKworIzogYnVpbHRpbi90YWcuYzo3NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiVXBkYXRlZCB0YWcgJyVzJyAod2FzICVzKVxuIgorbXNnc3RyICLEkMOjIGPhuq1wIG5o4bqtdCB0aOG6uyDigJwlc+KAnSAodHLGsOG7m2MgbMOgICVzKVxuIgorCisjOiBidWlsdGluL3VucGFjay1vYmplY3RzLmM6NDkwCittc2dpZCAiVW5wYWNraW5nIG9iamVjdHMiCittc2dzdHIgIsSQYW5nIGdp4bqjaSBuw6luIGPDoWMgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJ04bqhbyB0aMawIG3hu6VjIFwiJXNcIiBn4bq3cCBs4buXaSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGzhuqV5IHRow7RuZyB0aW4gdGjhu5FuZyBrw6ogduG7gSAlcyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY3JlYXRlIGZpbGUgJXMiCittc2dzdHIgImfhurdwIGzhu5dpIGtoaSB04bqhbyB04bqtcCB0aW4gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeMOzYSB04bqtcCB0aW4gJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxIGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICJn4bq3cCBs4buXaSBraGkgeMOzYSB0aMawIG3hu6VjICVzIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEyNAorIywgYy1mb3JtYXQKK21zZ2lkICJUZXN0aW5nICIKK21zZ3N0ciAixJBhbmcgdGjhu60iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTM2Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGZpbGUiCittc2dzdHIgInRow7RuZyB0aW4gdGjhu5FuZyBrw6ogdGjGsCBt4bulYyBraMO0bmcgdGhheSDEkeG7lWkgc2F1IGtoaSB0aMOqbSB04bqtcCB0aW4gbeG7m2kiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTQ5Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAidGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB0aMawIG3hu6VjIGtow7RuZyB0aGF5IMSR4buVaSBzYXUga2hpIHRow6ptIHRoxrAgbeG7pWMgbeG7m2kiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTYyCittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBjaGFuZ2VzIGFmdGVyIHVwZGF0aW5nIGEgZmlsZSIKK21zZ3N0ciAidGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB0aMawIG3hu6VjIHRoYXkgxJHhu5VpIHNhdSBraGkgY+G6rXAgbmjhuq10IHThuq1wIHRpbiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNzMKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICIiCisidGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB0aMawIG3hu6VjIHRoYXkgxJHhu5VpIHNhdSBraGkgdGjDqm0gdOG6rXAgdGluIG3hu5tpIHbDoG8gdHJvbmcgdGjGsCAiCisibeG7pWMgY29uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE4NAorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZmlsZSIKK21zZ3N0ciAidGjDtG5nIHRpbiB0aOG7kW5nIGvDqiB0aMawIG3hu6VjIGtow7RuZyB0aGF5IMSR4buVaSBzYXUga2hpIHjDs2EgdOG6rXAgdGluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE5NworbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGRlbGV0aW5nIGEgZGlyZWN0b3J5IgorbXNnc3RyICJ0aMO0bmcgdGluIHRo4buRbmcga8OqIHRoxrAgbeG7pWMga2jDtG5nIHRoYXkgxJHhu5VpIHNhdSBraGkgeMOzYSB0aMawIG3hu6VjIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjIwNAorbXNnaWQgIiBPSyIKK21zZ3N0ciAiIMSQ4buTbmcgw70iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NTY0Cittc2dpZCAiZ2l0IHVwZGF0ZS1pbmRleCBbPG9wdGlvbnM+XSBbLS1dIFs8ZmlsZT4uLi5dIgorbXNnc3RyICJnaXQgdXBkYXRlLWluZGV4IFs8Y8OhYy10w7l5LWNo4buNbj5dIFstLV0gWzx04bqtcC10aW4+4oCmXSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MTgKK21zZ2lkICJjb250aW51ZSByZWZyZXNoIGV2ZW4gd2hlbiBpbmRleCBuZWVkcyB1cGRhdGUiCittc2dzdHIgInRp4bq/cCB04bulYyBsw6BtIG3hu5tpIG5nYXkgY+G6oyBraGkgYuG6o25nIG3hu6VjIGzhu6VjIGPhuqduIMSRxrDhu6NjIGPhuq1wIG5o4bqtdCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MjEKK21zZ2lkICJyZWZyZXNoOiBpZ25vcmUgc3VibW9kdWxlcyIKK21zZ3N0ciAicmVmcmVzaDogbOG7nSDEkWkgbcO0LcSRdW4tY29uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyNAorbXNnaWQgImRvIG5vdCBpZ25vcmUgbmV3IGZpbGVzIgorbXNnc3RyICJraMO0bmcgYuG7jyBxdWEgY8OhYyB04bqtcCB0aW4gbeG7m2kgdOG6oW8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI2Cittc2dpZCAibGV0IGZpbGVzIHJlcGxhY2UgZGlyZWN0b3JpZXMgYW5kIHZpY2UtdmVyc2EiCittc2dzdHIgIsSR4buDIGPDoWMgdOG6rXAgdGluIHRoYXkgdGjhur8gY8OhYyB0aMawIG3hu6VjIHbDoCDigJx2aWNlLXZlcnNh4oCdIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyOAorbXNnaWQgIm5vdGljZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgInRow7RuZyBiw6FvIGPDoWMgdOG6rXAtdGluIHRoaeG6v3UgdHJvbmcgdGjGsC1t4bulYyBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzAKK21zZ2lkICJyZWZyZXNoIGV2ZW4gaWYgaW5kZXggY29udGFpbnMgdW5tZXJnZWQgZW50cmllcyIKK21zZ3N0ciAiIgorImzDoG0gdMawxqFpIG3hu5tpIHRo4bqtbSBjaMOtIGtoaSBi4bqjbmcgbeG7pWMgbOG7pWMgY2jhu6lhIGPDoWMgbeG7pWMgdGluIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkzMworbXNnaWQgInJlZnJlc2ggc3RhdCBpbmZvcm1hdGlvbiIKK21zZ3N0ciAibOG6pXkgbOG6oWkgdGjDtG5nIHRpbiB0aOG7kW5nIGvDqiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MzcKK21zZ2lkICJsaWtlIC0tcmVmcmVzaCwgYnV0IGlnbm9yZSBhc3N1bWUtdW5jaGFuZ2VkIHNldHRpbmciCittc2dzdHIgImdp4buRbmcgLS1yZWZyZXNoLCBuaMawbmcgYuG7jyBxdWEgY8OhYyBjw6BpIMSR4bq3dCDigJxhc3N1bWUtdW5jaGFuZ2Vk4oCdIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0MQorbXNnaWQgIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iCittc2dzdHIgIjxjaOG6v1/EkeG7mT4sPMSR4buRaV90xrDhu6NuZz4sPMSRxrDhu51uZ19k4bqrbj4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQyCittc2dpZCAiYWRkIHRoZSBzcGVjaWZpZWQgZW50cnkgdG8gdGhlIGluZGV4IgorbXNnc3RyICJ0aMOqbSBjw6FjIHThuq1wIHRpbiDEkcOjIGNo4buJIHJhIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NgorbXNnaWQgIigrLy0peCIKK21zZ3N0ciAiKCsvLSl4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NworbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICJnaGkgxJHDqCBsw6puIGLDrXQgdGhpIGjDoG5oIGPhu6dhIGPDoWMgdOG6rXAgdGluIMSRxrDhu6NjIGxp4buHdCBrw6oiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTUxCittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICLEkMOhbmggZOG6pXUgY8OhYyB04bqtcCB0aW4gbMOgIFwia2jDtG5nIHRoYXkgxJHhu5VpXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU0Cittc2dpZCAiY2xlYXIgYXNzdW1lZC11bmNoYW5nZWQgYml0IgorbXNnc3RyICJ4w7NhIGLDrXQgYXNzdW1lZC11bmNoYW5nZWQgKGdp4bqjIMSR4buLbmggbMOgIGtow7RuZyB0aGF5IMSR4buVaSkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU3Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAixJHDoW5oIGThuqV1IGPDoWMgdOG6rXAgdGluIGzDoCDigJxjaOG7iS3EkeG7jWPigJ0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTYwCittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgInjDs2EgYsOtdCBza2lwLXdvcmt0cmVlIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2MworbXNnaWQgImFkZCB0byBpbmRleCBvbmx5OyBkbyBub3QgYWRkIGNvbnRlbnQgdG8gb2JqZWN0IGRhdGFiYXNlIgorbXNnc3RyICIiCisiY2jhu4kgdGjDqm0gdsOgbyBi4bqjbmcgbeG7pWMgbOG7pWM7IGtow7RuZyB0aMOqbSBu4buZaSBkdW5nIHbDoG8gY8ahIHPhu58gZOG7ryBsaeG7h3UgxJHhu5FpIHTGsOG7o25nIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2NQorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgIiIKKyJn4buhIGLhu48gY8OhYyDEkcaw4budbmcgZOG6q24gxJHGsOG7o2MgxJHhurd0IHTDqm4gdGjhuq1tIGNow60gY+G6oyBraGkgbsOzIGhp4buHbiBkaeG7h24gdHJvbmcgdGjGsCBt4bulYyAiCisibMOgbSB2aeG7h2MiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTY3Cittc2dpZCAid2l0aCAtLXN0ZGluOiBpbnB1dCBsaW5lcyBhcmUgdGVybWluYXRlZCBieSBudWxsIGJ5dGVzIgorbXNnc3RyICJ24bubaSB0w7l5IGNo4buNbiAtLXN0ZGluOiBjw6FjIGTDsm5nIMSR4bqndSB2w6BvIMSRxrDhu6NjIGNo4bqlbSBk4bupdCBi4bufaSBrw70gdOG7sSBudWxsIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2OQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIsSR4buNYyBkYW5oIHPDoWNoIMSRxrDhu51uZyBk4bqrbiBj4bqnbiBj4bqtcCBuaOG6rXQgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3MworbXNnaWQgImFkZCBlbnRyaWVzIGZyb20gc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGluZGV4IgorbXNnc3RyICJraMO0bmcgdGjhu4MgxJHhu41jIGPDoWMgbeG7pWMgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAicGjhu6VjIGjhu5NpIGPDoWMgdHLhuqFuZyB0aMOhaSAjMiB2w6AgIzMgY2hvIGPDoWMgxJHGsOG7nW5nIGThuqtuIMSRxrDhu6NjIGxp4buHdCBrw6oiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgxCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgImNo4buJIGPhuq1wIG5o4bqtdCBjw6FjIG3hu6VjIHRpbiBtw6AgbsOzIGtow6FjIGJp4buHdCBzbyB24bubaSBIRUFEIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk4NQorbXNnaWQgImlnbm9yZSBmaWxlcyBtaXNzaW5nIGZyb20gd29ya3RyZWUiCittc2dzdHIgImLhu48gcXVhIGPDoWMgdOG6rXAtdGluIHRoaeG6v3UgdHJvbmcgdGjGsC1t4bulYyBsw6BtIHZp4buHYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODgKK21zZ2lkICJyZXBvcnQgYWN0aW9ucyB0byBzdGFuZGFyZCBvdXRwdXQiCittc2dzdHIgImLDoW8gY8OhbyBjw6FjIHRoYW8gdMOhYyByYSB0aGnhur90IGLhu4sgeHXhuqV0IGNodeG6qW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkwCittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIihjaG8g4oCccG9yY2VsYWluc+KAnSkgcXXDqm4gY8OhYyB4dW5nIMSR4buZdCBjaMawYSDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCDEkcOjIGdoaSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTQKK21zZ2lkICJ3cml0ZSBpbmRleCBpbiB0aGlzIGZvcm1hdCIKK21zZ3N0ciAiZ2hpIG3hu6VjIGzhu6VjIOG7nyDEkeG7i25oIGThuqFuZyBuw6B5IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NgorbXNnaWQgImVuYWJsZSBvciBkaXNhYmxlIHNwbGl0IGluZGV4IgorbXNnc3RyICJi4bqtdC904bqvdCBjaGlhIGPhuq90IGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTgKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgImLhuq10L3Thuq90IGLhu5kgxJHhu4dtIGtow7RuZyB0aGVvIHbhur90IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEwMDAKK21zZ2lkICJlbmFibGUgdW50cmFja2VkIGNhY2hlIHdpdGhvdXQgdGVzdGluZyB0aGUgZmlsZXN5c3RlbSIKK21zZ3N0ciAiYuG6rXQgYuG7mSDEkeG7h20ga2jDtG5nIHRoZW8gduG6v3QgbcOgIGtow7RuZyBraeG7g20gdHJhIGjhu4cgdGjhu5FuZyB04bqtcCB0aW4iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjkKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs8Y8OhYy10w7l5LWNo4buNbj5dIC1kIDxyZWZuYW1lPiBbPGJp4bq/bi1jxak+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPGPDoWMtdMO5eS1jaOG7jW4+XSAgICA8cmVmbmFtZT4gPGJp4bq/bi1t4bubaT4gWzxiaeG6v24tY8WpPl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPGPDoWMtdMO5eS1jaOG7jW4+XSAtLXN0ZGluIFstel0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2MworbXNnaWQgImRlbGV0ZSB0aGUgcmVmZXJlbmNlIgorbXNnc3RyICJ4w7NhIHRoYW0gY2hp4bq/dSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY1Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgImPhuq1wIG5o4bqtdCA8dMOqbi10aGFtLWNoaeG6v3U+IGtow7RuZyBwaOG6o2kgY8OhaSBuw7MgY2jhu4kgdOG7m2kiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgIsSR4bqndSB2w6BvIHRpw6p1IGNodeG6qW4gY8OzIGPDoWMgxJHhu5FpIHPhu5EgxJHGsOG7o2MgY2jhuqVtIGThu6l0IGLhu59pIE5VTCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY3Cittc2dpZCAicmVhZCB1cGRhdGVzIGZyb20gc3RkaW4iCittc2dzdHIgIsSR4buNYyBj4bqtcCBuaOG6rXQgdOG7qyDEkeG6p3UgdsOgbyB0acOqdSBjaHXhuqluIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjYKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTQKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICJj4bqtcCBuaOG6rXQgY8OhYyB04bqtcCB0aW4gdGjDtG5nIHRpbiB04burIMSRaeG7g20geHXhuqV0IHBow6F0IgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzoxNworbXNnaWQgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCB2ZXJpZnktY29tbWl0IFstdiB8IC0tdmVyYm9zZV0gPGzhuqduX2NodXnhu4NuX2dpYW8+4oCmIgorCisjOiBidWlsdGluL3ZlcmlmeS1jb21taXQuYzo3MgorbXNnaWQgInByaW50IGNvbW1pdCBjb250ZW50cyIKK21zZ3N0ciAiaGnhu4NuIHRo4buLIG7hu5lpIGR1bmcgY+G7p2EgbOG6p24gY2h1eeG7g24gZ2lhbyIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NzMgYnVpbHRpbi92ZXJpZnktdGFnLmM6ODQKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgImluIGvhur90IHh14bqldCB0cuG6oW5nIHRow6FpIGdwZyBk4bqhbmcgdGjDtCIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjU0Cittc2dpZCAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxwYWNrPi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1wYWNrIFstdiB8IC0tdmVyYm9zZV0gWy1zIHwgLS1zdGF0LW9ubHldIDxnw7NpPuKApiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY0Cittc2dpZCAidmVyYm9zZSIKK21zZ3N0ciAiY2hpIHRp4bq/dCIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY2Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgImNo4buJIGhp4buDbiB0aOG7iyB0aOG7kW5nIGvDqiIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTcKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIDx0aOG6uz7igKYiCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXRhZy5jOjgzCittc2dpZCAicHJpbnQgdGFnIGNvbnRlbnRzIgorbXNnc3RyICJoaeG7g24gdGjhu4sgbuG7mWkgZHVuZyBj4bunYSB0aOG6uyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEzCittc2dpZCAiZ2l0IHdvcmt0cmVlIGFkZCBbPG9wdGlvbnM+XSA8cGF0aD4gPGJyYW5jaD4iCittc2dzdHIgImdpdCB3b3JrdHJlZSBhZGQgWzxjw6FjLXTDuXktY2jhu41uPl0gPMSRxrDhu51uZy1k4bqrbj4gPG5ow6FuaD4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxNAorbXNnaWQgImdpdCB3b3JrdHJlZSBwcnVuZSBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIHBydW5lIFs8Y8OhYy10w7l5LWNo4buNbj5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIkfhu6EgYuG7jyBjw6J5IGzDoG0gdmnhu4djLyVzOiBraMO0bmcgcGjhuqNpIGzDoCB0aMawIG3hu6VjIGjhu6NwIGzhu4ciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo0MgorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGdpdGRpciBmaWxlIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICJH4buhIGLhu48gY8OieSBsw6BtIHZp4buHYy8lczoga2jDtG5nIGPDsyB04bqtcCB0aW4gZ2l0ZGlyIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICJH4buhIGLhu48gY8OieSBsw6BtIHZp4buHYy8lczoga2jDtG5nIHRo4buDIMSR4buNYyB04bqtcCB0aW4gZ2l0ZGlyICglcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzo1OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyB3b3JrdHJlZXMvJXM6IGludmFsaWQgZ2l0ZGlyIGZpbGUiCittc2dzdHIgIkfhu6EgYuG7jyBjw6J5IGzDoG0gdmnhu4djLyVzOiB04bqtcCB0aW4gZ2l0ZGlyIGtow7RuZyBo4bujcCBs4buHIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICJH4buhIGLhu48gY8OieSBsw6BtIHZp4buHYy8lczogdOG6rXAgdGluIGdpdGRpciBjaOG7iSDEkeG6v24gduG7iyB0csOtIGtow7RuZyB04buTbiB04bqhaSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlOiAlcyIKK21zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIGfhu6EgYuG7jzogJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi4oCcJXPigJ0gxJHDoyBjw7MgdOG7qyB0csaw4bubYyBy4buTaSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjIzMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSBvZiAnJXMnIgorbXNnc3RyICJraMO0bmcgdGjhu4MgdOG6oW8gdGjGsCBt4bulYyBj4bunYSDigJwlc+KAnSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJQcmVwYXJpbmcgJXMgKGlkZW50aWZpZXIgJXMpIgorbXNnc3RyICLEkGFuZyBjaHXhuqluIGLhu4sgJXMgKMSR4buLbmggZGFuaCAlcykiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMTYKK21zZ2lkICJjaGVja291dCA8YnJhbmNoPiBldmVuIGlmIGFscmVhZHkgY2hlY2tlZCBvdXQgaW4gb3RoZXIgd29ya3RyZWUiCittc2dzdHIgImzhuqV5IHJhIDxuaMOhbmg+IG5nYXkgY+G6oyBraGkgbsOzIMSRw6MgxJHGsOG7o2MgbOG6pXkgcmEg4bufIGPDonkgbMOgbSB2aeG7h2Mga2jDoWMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMTgKK21zZ2lkICJjcmVhdGUgYSBuZXcgYnJhbmNoIgorbXNnc3RyICJ04bqhbyBuaMOhbmggbeG7m2kiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMjAKK21zZ2lkICJjcmVhdGUgb3IgcmVzZXQgYSBicmFuY2giCittc2dzdHIgInThuqFvIGhheSDEkeG6t3QgbOG6oWkgbeG7mXQgbmjDoW5oIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzIxCittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJy4budaSBi4buPIEhFQUQgdOG6oWkgbOG6p24gY2h1eeG7g24gZ2lhbyB0aGVvIHTDqm4iCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzozMjgKK21zZ2lkICItYiwgLUIsIGFuZCAtLWRldGFjaCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorbXNnc3RyICJDw6FjIHTDuXkgY2jhu41uIC1iLCAtQiwgdsOgIC0tZGV0YWNoIGxv4bqhaSB04burIGzhuqtuIG5oYXUiCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjEzCittc2dpZCAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTxwcmVmaXg+L10iCittc2dzdHIgImdpdCB3cml0ZS10cmVlIFstLW1pc3Npbmctb2tdIFstLXByZWZpeD08dGnhu4FuLXThu5E+L10iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICI8dGnhu4FuIHThu5E+LyIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MjcKK21zZ2lkICJ3cml0ZSB0cmVlIG9iamVjdCBmb3IgYSBzdWJkaXJlY3RvcnkgPHByZWZpeD4iCittc2dzdHIgImdoaSDEkeG7kWkgdMaw4bujbmcgY8OieSAodHJlZSkgY2hvIDx0aeG7gW4gdOG7kT4gdGjGsCBt4bulYyBjb24iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjMwCittc2dpZCAib25seSB1c2VmdWwgZm9yIGRlYnVnZ2luZyIKK21zZ3N0ciAiY2jhu4kgaOG7r3Ugw61jaCBraGkgY+G6p24gZ+G7oSBs4buXaSIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjU1Cittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAiaW4gdGjDtG5nIHRpbiBn4buhIGzhu5dpIHJhIMSR4bqndSByYSBs4buXaSB0acOqdSBjaHXhuqluIgorCisjOiBnaXQuYzoxNAorbXNnaWQgIiIKKyInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisiY29uY2VwdCBndWlkZXMuIFNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBvciAnZ2l0IGhlbHAgPGNvbmNlcHQ+J1xuIgorInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuIgorbXNnc3RyICIiCisi4oCcZ2l0IGhlbHAgLWHigJ0gdsOgIOKAnGdpdCBoZWxwIC1n4oCdIGxp4buHdCBrw6ogY8OhYyBjw6J1IGzhu4duaCBjb24gc+G6tW4gY8OzIHbDoCBt4buZdCBz4buRXG4iCisiaMaw4bubbmcgZOG6q24gduG7gSBraMOhaSBuaeG7h20uIFhlbSDigJxnaXQgaGVscCA8bOG7h25oPuKAnSBoYXkg4oCcZ2l0IGhlbHAgPGtow6FpLW5p4buHbT7igJ1cbiIKKyLEkeG7gyB4ZW0gY8OhYyDEkeG6t2MgdOG6oyBjaG8gbOG7h25oIGhheSBraMOhaSBuaeG7h20gY+G7pSB0aOG7gy4iCisKKyM6IGNvbW1vbi1jbWRzLmg6OQorbXNnaWQgInN0YXJ0IGEgd29ya2luZyBhcmVhIChzZWUgYWxzbzogZ2l0IGhlbHAgdHV0b3JpYWwpIgorbXNnc3RyICJi4bqvdCDEkeG6p3UgbeG7mXQgdsO5bmcgbMOgbSB2aeG7h2MgKHhlbSB0aMOqbTogZ2l0IGhlbHAgdHV0b3JpYWwpIgorCisjOiBjb21tb24tY21kcy5oOjEwCittc2dpZCAid29yayBvbiB0aGUgY3VycmVudCBjaGFuZ2UgKHNlZSBhbHNvOiBnaXQgaGVscCBldmVyeWRheSkiCittc2dzdHIgImzDoG0gdmnhu4djIHRyw6puIHRoYXkgxJHhu5VpIGhp4buHbiB04bqhaSAoeGVtIHRow6ptOiBnaXQgaGVscCBldmVyeWRheSkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTEKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgInhlbSB4w6l0IGzhu4tjaCBz4butIHTDrG5oIHRy4bqhbmcgKHhlbSB0aMOqbTogZ2l0IGhlbHAgcmV2aXNpb25zKSIKKworIzogY29tbW9uLWNtZHMuaDoxMgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgInRow6ptLCBnaGkgZOG6pXUgdsOgIGNo4buJbmggbOG7i2NoIHPhu60gY2h1bmcgY+G7p2EgYuG6oW4iCisKKyM6IGNvbW1vbi1jbWRzLmg6MTMKK21zZ2lkICJjb2xsYWJvcmF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHdvcmtmbG93cykiCittc2dzdHIgImzDoG0gdmnhu4djIG5ow7NtICh4ZW0gdGjDqm06IGdpdCBoZWxwIHdvcmtmbG93cykiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTcKK21zZ2lkICJBZGQgZmlsZSBjb250ZW50cyB0byB0aGUgaW5kZXgiCittc2dzdHIgIlRow6ptIG7hu5lpIGR1bmcgdOG6rXAgdGluIHbDoG8gYuG6o25nIG3hu6VjIGzhu6VjIgorCisjOiBjb21tb24tY21kcy5oOjE4Cittc2dpZCAiVXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgY29tbWl0IHRoYXQgaW50cm9kdWNlZCBhIGJ1ZyIKK21zZ3N0ciAiVMOsbSBraeG6v20gZOG6oW5nIG5o4buLIHBow6JuIMSR4buDIHTDrG0gcmEgbOG6p24gY2h1eeG7g24gZ2lhbyBuw6BvIMSRxrBhIHJhIGzhu5dpIgorCisjOiBjb21tb24tY21kcy5oOjE5Cittc2dpZCAiTGlzdCwgY3JlYXRlLCBvciBkZWxldGUgYnJhbmNoZXMiCittc2dzdHIgIkxp4buHdCBrw6osIHThuqFvIGhheSBsw6AgeMOzYSBjw6FjIG5ow6FuaCIKKworIzogY29tbW9uLWNtZHMuaDoyMAorbXNnaWQgIlN3aXRjaCBicmFuY2hlcyBvciByZXN0b3JlIHdvcmtpbmcgdHJlZSBmaWxlcyIKK21zZ3N0ciAiQ2h1eeG7g24gY8OhYyBuaMOhbmggaG/hurdjIHBo4bulYyBo4buTaSBs4bqhaSBjw6FjIHThuq1wIHRpbiBjw6J5IGzDoG0gdmnhu4djIgorCisjOiBjb21tb24tY21kcy5oOjIxCittc2dpZCAiQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5IgorbXNnc3RyICJOaMOibiBi4bqjbiBt4buZdCBraG8gY2jhu6lhIMSR4bq/biBt4buZdCB0aMawIG3hu6VjIG3hu5tpIgorCisjOiBjb21tb24tY21kcy5oOjIyCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIkdoaSBjw6FjIHRoYXkgxJHhu5VpIHbDoG8ga2hvIGNo4bupYSIKKworIzogY29tbW9uLWNtZHMuaDoyMworbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIiIKKyJYZW0gY8OhYyB0aGF5IMSR4buVaSBnaeG7r2Egbmjhu69uZyBs4bqnbiBjaHV54buDbiBnaWFvLCBnaeG7r2EgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyB2w6AgY8OieSAiCisibMOgbSB2aeG7h2MsIHYudi4uIgorCisjOiBjb21tb24tY21kcy5oOjI0Cittc2dpZCAiRG93bmxvYWQgb2JqZWN0cyBhbmQgcmVmcyBmcm9tIGFub3RoZXIgcmVwb3NpdG9yeSIKK21zZ3N0ciAiVOG6o2kgduG7gSBjw6FjIMSR4buRaSB0xrDhu6NuZyB2w6AgdGhhbSBjaGnhur91IHThu6sga2hvIGNo4bupYSBraMOhYyIKKworIzogY29tbW9uLWNtZHMuaDoyNQorbXNnaWQgIlByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybiIKK21zZ3N0ciAiSW4gcmEgbmjhu69uZyBkw7JuZyBraOG7m3AgduG7m2kgbeG7mXQgbeG6q3UiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjYKK21zZ2lkICJDcmVhdGUgYW4gZW1wdHkgR2l0IHJlcG9zaXRvcnkgb3IgcmVpbml0aWFsaXplIGFuIGV4aXN0aW5nIG9uZSIKK21zZ3N0ciAiVOG6oW8gbeG7mXQga2hvIGdpdCBt4bubaSBoYXkga2jhu59pIHThuqFvIGzhuqFpIG3hu5l0IGtobyDEkcOjIHThu5NuIHThuqFpIHThu6sgdHLGsOG7m2MiCisKKyM6IGNvbW1vbi1jbWRzLmg6MjcKK21zZ2lkICJTaG93IGNvbW1pdCBsb2dzIgorbXNnc3RyICJIaeG7g24gdGjhu4sgbmjhuq10IGvDvSBjw6FjIGzhuqduIGNodXnhu4NuIGdpYW8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjgKK21zZ2lkICJKb2luIHR3byBvciBtb3JlIGRldmVsb3BtZW50IGhpc3RvcmllcyB0b2dldGhlciIKK21zZ3N0ciAiSOG7o3AgbmjhuqV0IGhhaSBoYXkgbmhp4buBdSBoxqFuIGzhu4tjaCBz4butIGPhu6dhIGPDoWMgbmjDoCBwaMOhdCB0cmnhu4NuIgorCisjOiBjb21tb24tY21kcy5oOjI5Cittc2dpZCAiTW92ZSBvciByZW5hbWUgYSBmaWxlLCBhIGRpcmVjdG9yeSwgb3IgYSBzeW1saW5rIgorbXNnc3RyICJEaSBjaHV54buDbiBoYXkgxJHhu5VpIHTDqm4gbeG7mXQgdOG6rXAgdGluLCB0aMawIG3hu6VjIGhv4bq3YyBsacOqbiBr4bq/dCBt4buBbSIKKworIzogY29tbW9uLWNtZHMuaDozMAorbXNnaWQgIkZldGNoIGZyb20gYW5kIGludGVncmF0ZSB3aXRoIGFub3RoZXIgcmVwb3NpdG9yeSBvciBhIGxvY2FsIGJyYW5jaCIKK21zZ3N0ciAiTOG6pXkgduG7gSB2w6AgaOG7o3AgbmjhuqV0IHbhu5tpIGtobyBraMOhYyBoYXkgbeG7mXQgbmjDoW5oIG7hu5lpIGLhu5kiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzEKK21zZ2lkICJVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIkPhuq1wIG5o4bqtdCB0aC5jaGnhur91IG3DoXkgY2jhu6cgY8O5bmcgduG7m2kgY8OhYyDEkeG7kWkgdMaw4bujbmcgbGnDqm4gcXVhbiDEkeG6v24gbsOzIgorCisjOiBjb21tb24tY21kcy5oOjMyCittc2dpZCAiRm9yd2FyZC1wb3J0IGxvY2FsIGNvbW1pdHMgdG8gdGhlIHVwZGF0ZWQgdXBzdHJlYW0gaGVhZCIKK21zZ3N0ciAiIgorIkNodXnhu4NuIHRp4bq/cCBuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8gbuG7mWkgYuG7mSB04bubaSBoZWFkIHRoxrDhu6NuZyBuZ3Xhu5NuIMSRw6MgY+G6rXAgbmjhuq10IgorCisjOiBjb21tb24tY21kcy5oOjMzCittc2dpZCAiUmVzZXQgY3VycmVudCBIRUFEIHRvIHRoZSBzcGVjaWZpZWQgc3RhdGUiCittc2dzdHIgIsSQ4bq3dCBs4bqhaSBIRUFEIGhp4buHbiBow6BuaCB0aMOgbmggdHLhuqFuZyB0aMOhaSDEkcOjIGNobyIKKworIzogY29tbW9uLWNtZHMuaDozNAorbXNnaWQgIlJlbW92ZSBmaWxlcyBmcm9tIHRoZSB3b3JraW5nIHRyZWUgYW5kIGZyb20gdGhlIGluZGV4IgorbXNnc3RyICJH4buhIGLhu48gY8OhYyB04bqtcCB0aW4gdOG7qyBjw6J5IGzDoG0gdmnhu4djIHbDoCB04burIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogY29tbW9uLWNtZHMuaDozNQorbXNnaWQgIlNob3cgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIgorbXNnc3RyICJIaeG7g24gdGjhu4sgY8OhYyBraeG7g3Uga2jDoWMgbmhhdSBj4bunYSBjw6FjIMSR4buRaSB0xrDhu6NuZyIKKworIzogY29tbW9uLWNtZHMuaDozNgorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIkhp4buDbiB0aOG7iyB0cuG6oW5nIHRow6FpIGPDonkgbMOgbSB2aeG7h2MiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzcKK21zZ2lkICJDcmVhdGUsIGxpc3QsIGRlbGV0ZSBvciB2ZXJpZnkgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRyIKK21zZ3N0ciAiVOG6oW8sIGxp4buHdCBrw6osIHjDs2EgaGF5IHjDoWMgdGjhu7FjIG3hu5l0IMSR4buRaSB0xrDhu6NuZyB0aOG6uyDEkcaw4bujYyBrw70gYuG6sW5nIEdQRyIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE0NQorbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICJuZ8OgeSBo4bq/dCBo4bqhbiIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE2MAorbXNnaWQgIm5vLW9wIChiYWNrd2FyZCBjb21wYXRpYmlsaXR5KSIKK21zZ3N0ciAibm8tb3AgKHTGsMahbmcgdGjDrWNoIG5nxrDhu6NjKSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIzNgorbXNnaWQgImJlIG1vcmUgdmVyYm9zZSIKK21zZ3N0ciAiY2hpIHRp4bq/dCBoxqFuIG7hu69hIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjM4Cittc2dpZCAiYmUgbW9yZSBxdWlldCIKK21zZ3N0ciAiaW0gbOG6t25nIGjGoW4gbuG7r2EiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoyNDQKK21zZ2lkICJ1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcyIKK21zZ3N0ciAic+G7rSBk4bulbmcgPG4+IGNo4buvIHPhu5EgxJHhu4MgaGnhu4NuIHRo4buLIFNIQS0xcyIKKworIzogcmVyZXJlLmg6MjgKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgImPhuq1wIG5o4bqtdCBi4bqjbmcgbeG7pWMgbOG7pWMgduG7m2kgcGjDom4gZ2nhuqNpIHh1bmcgxJHhu5l0IGTDuW5nIGzhuqFpIG7hur91IMSRxrDhu6NjIgorCisjOiBnaXQtYmlzZWN0LnNoOjUwCittc2dpZCAiWW91IG5lZWQgdG8gc3RhcnQgYnkgXCJnaXQgYmlzZWN0IHN0YXJ0XCIiCittc2dzdHIgIkLhuqFuIGPhuqduIGto4bufaSDEkeG6p3UgYuG6sW5nIFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6NTYKK21zZ2lkICJEbyB5b3Ugd2FudCBtZSB0byBkbyBpdCBmb3IgeW91IFtZL25dPyAiCittc2dzdHIgIkLhuqFuIGPDsyBtdeG7kW4gdMO0aSB0aOG7sWMgaGnhu4duIMSRaeG7gXUgbsOgeSBjaG8gYuG6oW4ga2jDtG5nIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6OTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXNlZCBvcHRpb246ICckYXJnJyIKK21zZ3N0ciAia2jDtG5nIGPDtG5nIG5o4bqtbiB0w7l5IGNo4buNbjog4oCcJGFyZ+KAnSIKKworIzogZ2l0LWJpc2VjdC5zaDoxMDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAi4oCdJGFyZ+KAnSBraMO0bmcgY8OzIHbhursgbmjGsCBsw6AgbeG7mXQgxJFp4buDbSB4w6l0IGR1eeG7h3QgaOG7o3AgbOG7hyIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzIKK21zZ2lkICJCYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIkhFQUQgc2FpIC0gVMO0aSBj4bqnbiBt4buZdCBIRUFEIgorCisjOiBnaXQtYmlzZWN0LnNoOjE0NQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNoZWNraW5nIG91dCAnJHN0YXJ0X2hlYWQnIGZhaWxlZC4gVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDx2YWxpZC1icmFuY2g+Jy4iCittc2dzdHIgIiIKKyJWaeG7h2MgbOG6pXkg4oCcJHN0YXJ0X2hlYWTigJ0gcmEgZ+G6t3AgbOG7l2kuIEjDo3kgdGjhu60gXCJnaXQgYmlzZWN0IHJlc2V0IDxuaMOhbmhfaOG7o3BfbOG7hz4iCisiXCIuIgorCisjOiBnaXQtYmlzZWN0LnNoOjE1NQorbXNnaWQgIndvbid0IGJpc2VjdCBvbiBjZy1zZWVrJ2VkIHRyZWUiCittc2dzdHIgInPhur0ga2jDtG5nIGRpIGNodXnhu4NuIG7hu61hIGLGsOG7m2MgdHLDqm4gY8OieSDEkcaw4bujYyBjZy1zZWVrIgorCisjOiBnaXQtYmlzZWN0LnNoOjE1OQorbXNnaWQgIkJhZCBIRUFEIC0gc3RyYW5nZSBzeW1ib2xpYyByZWYiCittc2dzdHIgIkhFQUQgc2FpIC0gdGhhbSBjaGnhur91IG3hu4FtIGvhu7MgbOG6oSIKKworIzogZ2l0LWJpc2VjdC5zaDoyMTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkJhZCBiaXNlY3Rfd3JpdGUgYXJndW1lbnQ6ICRzdGF0ZSIKK21zZ3N0ciAixJDhu5FpIHPhu5EgYmlzZWN0X3dyaXRlIHNhaTogJHN0YXRlIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAixJDhuqd1IHbDoG8gcmV2IHNhaTogJGFyZyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTUKK21zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIkjDo3kgZ+G7jWkgbOG7h25obCDigJxiaXNlY3Rfc3RhdGXigJ0gduG7m2kgw610IG5o4bqldCBt4buZdCDEkeG7kWkgc+G7kS4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MjY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICLEkOG6p3UgdsOgbyByZXYgc2FpOiAkcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIuKAnGdpdCBiaXNlY3QgJFRFUk1fQkFE4oCdIGPDsyB0aOG7gyBs4bqleSBjaOG7iSBt4buZdCDEkeG7kWkgc+G7kS4iCisKKyM6IGdpdC1iaXNlY3Quc2g6Mjk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJXYXJuaW5nOiBiaXNlY3Rpbmcgb25seSB3aXRoIGEgJFRFUk1fQkFEIGNvbW1pdC4iCittc2dzdHIgIkPhuqNuaCBiw6FvOiBjaOG7iSB0aOG7sWMgaGnhu4duIHZp4buHYyBiaXNlY3QgduG7m2kgbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyAkVEVSTV9CQUQuIgorCisjLiBUUkFOU0xBVE9SUzogTWFrZSBzdXJlIHRvIGluY2x1ZGUgW1ldIGFuZCBbbl0gaW4geW91cgorIy4gdHJhbnNsYXRpb24uIFRoZSBwcm9ncmFtIHdpbGwgb25seSBhY2NlcHQgRW5nbGlzaCBpbnB1dAorIy4gYXQgdGhpcyBwb2ludC4KKyM6IGdpdC1iaXNlY3Quc2g6MzA1Cittc2dpZCAiQXJlIHlvdSBzdXJlIFtZL25dPyAiCittc2dzdHIgIkLhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIGNoxrBhIFtZL25dPyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJGJhZF9zeW4gYW5kIG9uZSAkZ29vZF9zeW4gcmV2aXNpb24uXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGFuZCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIkLhuqFuIHBo4bqjaSBjaOG7iSBjaG8gdMO0aSDDrXQgbmjhuqV0IG3hu5l0IMSRaeG7g20gJGJhZF9zeW4gdsOgIG3hu5l0ICRnb29kX3N5bi5cbiIKKyIoQuG6oW4gY8OzIHRo4buDIHPhu60gZOG7pW5nIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIHbDoCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgY2hvICIKKyJjw6FpIMSRw7MuKSIKKworIzogZ2l0LWJpc2VjdC5zaDozMjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICRnb29kX3N5biBhbmQgb25lICRiYWRfc3luIHJldmlzaW9uLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBhbmQgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyJC4bqhbiBj4bqnbiBi4bqvdCDEkeG6p3UgYuG6sW5nIGzhu4duaCBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJC4bqhbiBzYXUgxJHDsyBj4bqnbiBwaOG6o2kgY2jhu4kgY2hvIHTDtGkgw610IG5o4bqldCBt4buZdCDEkWnhu4NtIHjDqXQgZHV54buHdCAkZ29vZF9zeW4gdsOgIG3hu5l0ICIKKyIkYmFkX3N5bi5cbiIKKyIoQuG6oW4gY8OzIHRo4buDIHPhu60gZOG7pW5nIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIHbDoCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgY2hvICIKKyJjaMO6bmcuKSIKKworIzogZ2l0LWJpc2VjdC5zaDozOTEgZ2l0LWJpc2VjdC5zaDo1MjEKK21zZ2lkICJXZSBhcmUgbm90IGJpc2VjdGluZy4iCittc2dzdHIgIkNow7puZyB0w7RpIGtow7RuZyBiaXNlY3QuIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5OAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIuKAnSRpbnZhbGlk4oCdIGtow7RuZyBwaOG6o2kgbMOgIGzhuqduIGNodXnhu4NuIGdpYW8gaOG7o3AgbOG7hyIKKworIzogZ2l0LWJpc2VjdC5zaDo0MDcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJDb3VsZCBub3QgY2hlY2sgb3V0IG9yaWdpbmFsIEhFQUQgJyRicmFuY2gnLlxuIgorIlRyeSAnZ2l0IGJpc2VjdCByZXNldCA8Y29tbWl0PicuIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGNoZWNrLW91dCBIRUFEIG5ndXnDqm4gdGjhu6d5IGPhu6dhIOKAnCRicmFuY2jigJ0uXG4iCisiSMOjeSB0aOG7rSDigJxnaXQgYmlzZWN0IHJlc2V0IDxs4bqnbi1jaHV54buDbi1naWFvPuKAnS4iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDM1Cittc2dpZCAiTm8gbG9nZmlsZSBnaXZlbiIKK21zZ3N0ciAiQ2jGsGEgY2jhu4kgcmEgdOG6rXAgdGluIGdoaSBuaOG6rXQga8O9IgorCisjOiBnaXQtYmlzZWN0LnNoOjQzNgorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHJlYWQgJGZpbGUgZm9yIHJlcGxheWluZyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIMSR4buNYyAkZmlsZSDEkeG7gyB0aGFvIGRp4buFbiBs4bqhaSIKKworIzogZ2l0LWJpc2VjdC5zaDo0NTUKK21zZ2lkICI/PyB3aGF0IGFyZSB5b3UgdGFsa2luZyBhYm91dD8iCittc2dzdHIgIj8/IGLhuqFuIMSRYW5nIG7Ds2kgZ8OsIHRo4bq/PyIKKworIzogZ2l0LWJpc2VjdC5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgInJ1bm5pbmcgJGNvbW1hbmQiCittc2dzdHIgIsSRYW5nIGNo4bqheSBs4buHbmggJGNvbW1hbmQiCisKKyM6IGdpdC1iaXNlY3Quc2g6NDc0CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiYmlzZWN0IHJ1biBmYWlsZWQ6XG4iCisiZXhpdCBjb2RlICRyZXMgZnJvbSAnJGNvbW1hbmQnIGlzIDwgMCBvciA+PSAxMjgiCittc2dzdHIgIiIKKyJjaOG6oXkgYmlzZWN0IGfhurdwIGzhu5dpOlxuIgorIm3DoyB0cuG6oyB24buBICRyZXMgdOG7qyBs4buHbmgg4oCcJGNvbW1hbmTigJ0gbMOgIDwgMCBob+G6t2MgPj0gMTI4IgorCisjOiBnaXQtYmlzZWN0LnNoOjUwMAorbXNnaWQgImJpc2VjdCBydW4gY2Fubm90IGNvbnRpbnVlIGFueSBtb3JlIgorbXNnc3RyICJiaXNlY3Qga2jDtG5nIHRo4buDIHRp4bq/cCB04bulYyB0aMOqbSDEkcaw4bujYyBu4buvYSIKKworIzogZ2l0LWJpc2VjdC5zaDo1MDYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJiaXNlY3QgcnVuIGZhaWxlZDpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAkcmVzIgorbXNnc3RyICIiCisiY2jhuqF5IGJpc2VjdCBn4bq3cCBs4buXaTpcbiIKKyLigJ1iaXNlY3Rfc3RhdGUgJHN0YXRl4oCdIMSRw6MgdGhvw6F0IHJhIHbhu5tpIG3DoyBs4buXaSAkcmVzIgorCisjOiBnaXQtYmlzZWN0LnNoOjUxMworbXNnaWQgImJpc2VjdCBydW4gc3VjY2VzcyIKK21zZ3N0ciAiYmlzZWN0IGNo4bqheSB0aMOgbmggY8O0bmciCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAkVEVSTV9CQUQvJFRFUk1fR09PRCBiaXNlY3QuIgorbXNnc3RyICJM4buHbmgga2jDtG5nIGjhu6NwIGzhu4c6IGLhuqFuIGhp4buHbiDEkWFuZyDhu58gYmlzZWN0ICRURVJNX0JBRC8kVEVSTV9HT09ELiIKKworIzogZ2l0LXJlYmFzZS5zaDo1NworbXNnaWQgIiIKKyJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIuXG4iCisiSWYgeW91IHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIHJ1biBcImdpdCByZWJhc2UgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyJUbyBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCByZWJhc2luZywgcnVuIFwiZ2l0IHJlYmFzZSAtLWFib3J0IgorIlwiLiIKK21zZ3N0ciAiIgorIktoaSBi4bqhbiBj4bqnbiBnaeG6o2kgcXV54bq/dCB24bqlbiDEkeG7gSBuw6B5IGjDo3kgY2jhuqF5IGzhu4duaCBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiLlxuIgorIk7hur91IGLhuqFuIGPDsyDDvSDEkeG7i25oIGLhu48gcXVhIG1p4bq/bmcgdsOhLCB0aGF5IHbDoG8gxJHDsyBi4bqhbiBjaOG6oXkgXCJnaXQgcmViYXNlIC0tc2tpcCIKKyJcIi5cbiIKKyLEkOG7gyBwaOG7pWMgaOG7k2kgbOG6oWkgdGjDoG5oIG5ow6FuaCBuZ3V5w6puIHRo4buneSB2w6AgZOG7q25nIHZp4buHYyB2w6EgbOG6oWkgdGjDrCBjaOG6oXkgXCJnaXQgIgorInJlYmFzZSAtLWFib3J0XCIuIgorCisjOiBnaXQtcmViYXNlLnNoOjE2NQorbXNnaWQgIkFwcGxpZWQgYXV0b3N0YXNoLiIKK21zZ3N0ciAixJDDoyDDoXAgZOG7pW5nIGF1dG9zdGFzaC4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTY4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3RvcmUgJHN0YXNoX3NoYTEiCittc2dzdHIgIktow7RuZyB0aOG7gyBsxrB1ICRzdGFzaF9zaGExIgorCisjOiBnaXQtcmViYXNlLnNoOjE2OQorbXNnaWQgIiIKKyJBcHBseWluZyBhdXRvc3Rhc2ggcmVzdWx0ZWQgaW4gY29uZmxpY3RzLlxuIgorIllvdXIgY2hhbmdlcyBhcmUgc2FmZSBpbiB0aGUgc3Rhc2guXG4iCisiWW91IGNhbiBydW4gXCJnaXQgc3Rhc2ggcG9wXCIgb3IgXCJnaXQgc3Rhc2ggZHJvcFwiIGF0IGFueSB0aW1lLlxuIgorbXNnc3RyICIiCisiw4FwIGThu6VuZyBhdXRvc3Rhc2ggY8OzIGhp4buHdSBxdeG6oyB0cm9uZyBjw6FjIHh1bmcgxJHhu5l0LlxuIgorIkPDoWMgdGhheSDEkeG7lWkgY+G7p2EgYuG6oW4gYW4gdG/DoG4gdHJvbmcgc3Rhc2ggKHThuqFtIGPhuqV0IMSRaSkuXG4iCisiQuG6oW4gY8OzIHRo4buDIGNo4bqheSBs4buHbmggXCJnaXQgc3Rhc2ggcG9wXCIgaGF5IFwiZ2l0IHN0YXNoIGRyb3BcIiBi4bqldCBr4buzIGzDumMgIgorIm7DoG8uXG4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjA4Cittc2dpZCAiVGhlIHByZS1yZWJhc2UgaG9vayByZWZ1c2VkIHRvIHJlYmFzZS4iCittc2dzdHIgIk3Ds2MgKGhvb2spIHByZS1yZWJhc2UgdOG7qyBjaOG7kWkgcmViYXNlLiIKKworIzogZ2l0LXJlYmFzZS5zaDoyMTMKK21zZ2lkICJJdCBsb29rcyBsaWtlIGdpdC1hbSBpcyBpbiBwcm9ncmVzcy4gQ2Fubm90IHJlYmFzZS4iCittc2dzdHIgIiIKKyJIw6xuaCBuaMawIMSRYW5nIHRyb25nIHF1w6EgdHLDrG5oIHRo4buxYyBoaeG7h24gbOG7h25oIGdpdC1hbS4gS2jDtG5nIHRo4buDIGNo4bqheSBs4buHbmggIgorInJlYmFzZS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzUxCittc2dpZCAiVGhlIC0tZXhlYyBvcHRpb24gbXVzdCBiZSB1c2VkIHdpdGggdGhlIC0taW50ZXJhY3RpdmUgb3B0aW9uIgorbXNnc3RyICJUw7l5IGNo4buNbiAtLWV4ZWMgcGjhuqNpIMSRxrDhu6NjIHPhu60gZOG7pW5nIGPDuW5nIHbhu5tpIHTDuXkgY2jhu41uIC0taW50ZXJhY3RpdmUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MzU2Cittc2dpZCAiTm8gcmViYXNlIGluIHByb2dyZXNzPyIKK21zZ3N0ciAiS2jDtG5nIGPDsyB0aeG6v24gdHLDrG5oIHJlYmFzZSBuw6BvIHBo4bqjaSBraMO0bmc/IgorCisjOiBnaXQtcmViYXNlLnNoOjM2NworbXNnaWQgIlRoZSAtLWVkaXQtdG9kbyBhY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBkdXJpbmcgaW50ZXJhY3RpdmUgcmViYXNlLiIKK21zZ3N0ciAiIgorIkjDoG5oIMSR4buZbmcg4oCcLS1lZGl0LXRvZG/igJ0gY2jhu4kgY8OzIHRo4buDIGTDuW5nIHRyb25nIHF1w6EgdHLDrG5oIOKAnHJlYmFzZeKAnSAoc+G7rWEgbOG7i2NoICIKKyJz4butKSB0xrDGoW5nIHTDoWMuIgorCisjOiBnaXQtcmViYXNlLnNoOjM3NAorbXNnaWQgIkNhbm5vdCByZWFkIEhFQUQiCittc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgSEVBRCIKKworIzogZ2l0LXJlYmFzZS5zaDozNzcKK21zZ2lkICIiCisiWW91IG11c3QgZWRpdCBhbGwgbWVyZ2UgY29uZmxpY3RzIGFuZCB0aGVuXG4iCisibWFyayB0aGVtIGFzIHJlc29sdmVkIHVzaW5nIGdpdCBhZGQiCittc2dzdHIgIiIKKyJC4bqhbiBwaOG6o2kgc+G7rWEgdOG6pXQgY+G6oyBjw6FjIGzhuqduIGjDsmEgdHLhu5luIHh1bmcgxJHhu5l0IHbDoCBzYXVcbiIKKyLEkcOzIMSRw6FuaCBk4bqldSBjaMO6bmcgbMOgIGPhuqduIHjhu60gbMO9IHPhu60gZOG7pW5nIGzhu4duaCBnaXQgYWRkIgorCisjOiBnaXQtcmViYXNlLnNoOjM5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IG1vdmUgYmFjayB0byAkaGVhZF9uYW1lIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgcXVheSB0cuG7nyBs4bqhaSAkaGVhZF9uYW1lIgorCisjOiBnaXQtcmViYXNlLnNoOjQxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICRzdGF0ZV9kaXJfYmFzZSBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS4iCittc2dzdHIgIiIKKyJIw6xuaCBuaMawIGzDoCDhu58gxJHDonkgc+G6tW4gY8OzIG3hu5l0IHRoxrAgbeG7pWMgJHN0YXRlX2Rpcl9iYXNlIGRpcmVjdG9yeSwgdsOgXG4iCisiVMO0aSB04buxIGjhu49pIGPDsyBwaOG6o2kgYuG6oW4gxJFhbmcg4bufIGdp4buvYSBt4buZdCBs4buHbmggcmViYXNlIGtow6FjLiBO4bq/dSDEkcO6bmcgbMOgXG4iCisibmjGsCB24bqteSwgeGluIGjDo3kgdGjhu61cbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyJO4bq/dSBraMO0bmcgcGjhuqNpIHRo4bq/LCBow6N5IHRo4butXG4iCisiXHQkY21kX2NsZWFyX3N0YWxlX3JlYmFzZVxuIgorInbDoCBjaOG6oXkgVMOUSSBs4bqnbiBu4buvYS4gIFTDlEkgIGThu6tuZyBs4bqhaSB0cm9uZyB0csaw4budbmcgaOG7o3AgYuG6oW4gduG6q25cbiIKKyJjw7MgbeG7mXQgc+G7kSB0aOG7qSBxdcO9IGdpw6Eg4bufIMSRw6J5LlxuIgorIlxuIgorIlTDlEk6IGzDoCBs4buHbmggYuG6oW4gduG7q2EgZ+G7jWkhIgorCisjOiBnaXQtcmViYXNlLnNoOjQ2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiaW52YWxpZCB1cHN0cmVhbSAkdXBzdHJlYW1fbmFtZSIKK21zZ3N0ciAidGjGsOG7o25nIG5ndeG7k24ga2jDtG5nIGjhu6NwIGzhu4cgJHVwc3RyZWFtX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkb250b19uYW1lOiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAiJG9udG9fbmFtZTog4bufIMSRw6J5IGPDsyBuaGnhu4F1IGjGoW4gbeG7mXQgbuG7gW4gbcOzbmcgaMOyYSB0cuG7mW4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDkyIGdpdC1yZWJhc2Uuc2g6NDk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkb250b19uYW1lOiB0aGVyZSBpcyBubyBtZXJnZSBiYXNlIgorbXNnc3RyICIkb250b19uYW1lOiDhu58gxJHDonkga2jDtG5nIGPDsyBu4buBbiBtw7NuZyBow7JhIHRy4buZbiBuw6BvIgorCisjOiBnaXQtcmViYXNlLnNoOjUwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiRG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBjb21taXQ6ICRvbnRvX25hbWUiCittc2dzdHIgIktow7RuZyBjaOG7iSDEkeG6v24gbeG7mXQgbOG6p24gY2h1eeG7g24gZ2lhbyBraMO0bmcgaOG7o3AgbOG7hzogJG9udG9fbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo1MjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaDogJGJyYW5jaF9uYW1lIgorbXNnc3RyICJuZ2hpw6ptIHRy4buNbmc6IGtow7RuZyBjw7MgbmjDoW5oIG5oxrAgdGjhur86ICRicmFuY2hfbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo1NTcKK21zZ2lkICJDYW5ub3QgYXV0b3N0YXNoIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgYXV0b3N0YXNoIgorCisjOiBnaXQtcmViYXNlLnNoOjU2MgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3JlYXRlZCBhdXRvc3Rhc2g6ICRzdGFzaF9hYmJyZXYiCittc2dzdHIgIsSQw6MgdOG6oW8gYXV0b3N0YXNoOiAkc3Rhc2hfYWJicmV2IgorCisjOiBnaXQtcmViYXNlLnNoOjU2NgorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIlhpbiBow6N5IGNvbW1pdCBob+G6t2MgdOG6oW0gY+G6pXQgKHN0YXNoKSBjaMO6bmcuIgorCisjOiBnaXQtcmViYXNlLnNoOjU4NgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ3VycmVudCBicmFuY2ggJGJyYW5jaF9uYW1lIGlzIHVwIHRvIGRhdGUuIgorbXNnc3RyICJOaMOhbmggaGnhu4duIHThuqFpICRicmFuY2hfbmFtZSDEkcOjIMSRxrDhu6NjIGPhuq1wIG5o4bqtdCBy4buTaS4iCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgIk5ow6FuaCBoaeG7h24gdOG6oWkgJGJyYW5jaF9uYW1lIMSRw6MgxJHGsOG7o2MgY+G6rXAgbmjhuq10IHLhu5NpLCBs4buHbmggcmViYXNlIMOpcCBideG7mWMuIgorCisjOiBnaXQtcmViYXNlLnNoOjYwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICRtYiB0byAkb250bzoiCittc2dzdHIgIlRoYXkgxJHhu5VpIHThu6sgJG1iIHRow6BuaCAkb250bzoiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjEwCittc2dpZCAiRmlyc3QsIHJld2luZGluZyBoZWFkIHRvIHJlcGxheSB5b3VyIHdvcmsgb24gdG9wIG9mIGl0Li4uIgorbXNnc3RyICJUcsaw4bubYyB0acOqbiwgZGkgY2h1eeG7g24gaGVhZCDEkeG7gyB4ZW0gbOG6oWkgY8OhYyBjw7RuZyB2aeG7h2MgdHLDqm4gxJHhu4luaCBj4bunYSBuw7PigKYiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NjIwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYXN0LWZvcndhcmRlZCAkYnJhbmNoX25hbWUgdG8gJG9udG9fbmFtZS4iCittc2dzdHIgIkNodXnhu4NuLXRp4bq/cC1uaGFuaCAkYnJhbmNoX25hbWUgdGjDoG5oICRvbnRvX25hbWUuIgorCisjOiBnaXQtc3Rhc2guc2g6NTEKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgIiIKKyJnaXQgc3Rhc2ggY2xlYXIgduG7m2kgY8OhYyB0aGFtIHPhu5EgbMOgIGNoxrBhIMSRxrDhu6NjIHRo4buxYyBoaeG7h24gKGtow7RuZyBuaOG6rW4gxJHhu5FpIHPhu5EpIgorCisjOiBnaXQtc3Rhc2guc2g6NzQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgdGhlIGluaXRpYWwgY29tbWl0IHlldCIKK21zZ3N0ciAiQuG6oW4gY2jGsGEgY8OybiBjw7MgbOG6p24gY2h1eeG7g24gZ2lhbyBraOG7n2kgdOG6oW8iCisKKyM6IGdpdC1zdGFzaC5zaDo4OQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ2hpIGzhuqFpIHRy4bqhbmcgdGjDoWkgYuG6o25nIG3hu6VjIGzhu6VjIGhp4buHbiBow6BuaCIKKworIzogZ2l0LXN0YXNoLnNoOjEyNCBnaXQtc3Rhc2guc2g6MTM3Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgd29ya3RyZWUgc3RhdGUiCittc2dzdHIgIktow7RuZyB0aOG7gyBnaGkgbOG6oWkgdHLhuqFuZyB0aMOhaSBjw6J5LWzDoG0tdmnhu4djIGhp4buHbiBow6BuaCIKKworIzogZ2l0LXN0YXNoLnNoOjE0MQorbXNnaWQgIk5vIGNoYW5nZXMgc2VsZWN0ZWQiCittc2dzdHIgIkNoxrBhIGPDsyB0aGF5IMSR4buVaSBuw6BvIMSRxrDhu6NjIGNo4buNbiIKKworIzogZ2l0LXN0YXNoLnNoOjE0NAorbXNnaWQgIkNhbm5vdCByZW1vdmUgdGVtcG9yYXJ5IGluZGV4IChjYW4ndCBoYXBwZW4pIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ+G7oSBi4buPIGLhuqNuZyBt4bulYyBs4bulYyB04bqhbSB0aOG7nWkgKGtow7RuZyB0aOG7gyB44bqjeSByYSkiCisKKyM6IGdpdC1zdGFzaC5zaDoxNTcKK21zZ2lkICJDYW5ub3QgcmVjb3JkIHdvcmtpbmcgdHJlZSBzdGF0ZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4bqhaSB0cuG6oW5nIHRow6FpIGPDonkgbMOgbSB2aeG7h2MgaGnhu4duIGjDoG5oIgorCisjOiBnaXQtc3Rhc2guc2g6MTg5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDYW5ub3QgdXBkYXRlICRyZWZfc3Rhc2ggd2l0aCAkd19jb21taXQiCittc2dzdHIgIktow7RuZyB0aOG7gyBj4bqtcCBuaOG6rXQgJHJlZl9zdGFzaCB24bubaSAkd19jb21taXQiCisKKyMuIFRSQU5TTEFUT1JTOiAkb3B0aW9uIGlzIGFuIGludmFsaWQgb3B0aW9uLCBsaWtlCisjLiBgLS1ibGFoLWJsYWgnLiBUaGUgNyBzcGFjZXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKKyMuIHNlY29uZCBsaW5lIGNvcnJlc3BvbmQgdG8gImVycm9yOiAiLiBTbyB5b3Ugc2hvdWxkIGxpbmUKKyMuIHVwIHRoZSBzZWNvbmQgbGluZSB3aXRoIGhvd2V2ZXIgbWFueSBjaGFyYWN0ZXJzIHRoZQorIy4gdHJhbnNsYXRpb24gb2YgImVycm9yOiAiIHRha2VzIGluIHlvdXIgbGFuZ3VhZ2UuIEUuZy4gaW4KKyMuIEVuZ2xpc2ggdGhpcyBpczoKKyMuCisjLiAkIGdpdCBzdGFzaCBzYXZlIC0tYmxhaC1ibGFoIDI+JjEgfCBoZWFkIC1uIDIKKyMuIGVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAtLWJsYWgtYmxhaAorIy4gVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnLS1ibGFoLWJsYWgnCisjOiBnaXQtc3Rhc2guc2g6MjM5CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiZXJyb3I6IHVua25vd24gb3B0aW9uIGZvciAnc3Rhc2ggc2F2ZSc6ICRvcHRpb25cbiIKKyIgICAgICAgVG8gcHJvdmlkZSBhIG1lc3NhZ2UsIHVzZSBnaXQgc3Rhc2ggc2F2ZSAtLSAnJG9wdGlvbiciCittc2dzdHIgIiIKKyJs4buXaToga2jDtG5nIGhp4buDdSB0w7l5IGNo4buNbiBjaG8g4oCcc3Rhc2ggc2F2ZeKAnTogJG9wdGlvblxuIgorIiAgICAgxJDhu4MgY8OzIHRo4buDIGTDuW5nIGzhu51pIGNow7ogdGjDrWNoIGPDsyBjaOG7qWEgLS0g4bufIMSR4bqndSxcbiIKKyIgICAgIGTDuW5nIGdpdCBzdGFzaCBzYXZlIC0tIFwiJG9wdGlvblwiIgorCisjOiBnaXQtc3Rhc2guc2g6MjYwCittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICJLaMO0bmcgY8OzIHRoYXkgxJHhu5VpIG7hu5lpIGLhu5kgbsOgbyDEkcaw4bujYyBnaGkgbOG6oWkiCisKKyM6IGdpdC1zdGFzaC5zaDoyNjQKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGto4bufaSB04bqhbyBzdGFzaCIKKworIzogZ2l0LXN0YXNoLnNoOjI2OAorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHN0YXR1cyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4bqhaSB0cuG6oW5nIHRow6FpIGhp4buHbiBow6BuaCIKKworIzogZ2l0LXN0YXNoLnNoOjI4NgorbXNnaWQgIkNhbm5vdCByZW1vdmUgd29ya3RyZWUgY2hhbmdlcyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGfhu6EgYuG7jyBjw6FjIHRoYXkgxJHhu5VpIGPDonktbMOgbS12aeG7h2MiCisKKyM6IGdpdC1zdGFzaC5zaDozODcKKyMsIHNoLWZvcm1hdAorbXNnaWQgInVua25vd24gb3B0aW9uOiAkb3B0IgorbXNnc3RyICJraMO0bmcgaGnhu4N1IHTDuXkgY2jhu41uOiAkb3B0IgorCisjOiBnaXQtc3Rhc2guc2g6Mzk3Cittc2dpZCAiTm8gc3Rhc2ggZm91bmQuIgorbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgbOG6p24gY2h1eeG7g24gZ2lhbyBj4bqldCDEkWkgKHN0YXNoKSBuw6BvLiIKKworIzogZ2l0LXN0YXNoLnNoOjQwNAorIywgc2gtZm9ybWF0Cittc2dpZCAiVG9vIG1hbnkgcmV2aXNpb25zIHNwZWNpZmllZDogJFJFViIKK21zZ3N0ciAiQ2jhu4kgcmEgcXXDoSBuaGnhu4F1IMSRaeG7g20geMOpdCBkdXnhu4d0OiAkUkVWIgorCisjOiBnaXQtc3Rhc2guc2g6NDEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSBraMO0bmcgcGjhuqNpIGzDoCB0aGFtIGNoaeG6v3UgaOG7o3AgbOG7hyIKKworIzogZ2l0LXN0YXNoLnNoOjQzOAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaC1saWtlIGNvbW1pdCIKK21zZ3N0ciAi4oCcJGFyZ3PigJ0ga2jDtG5nIHBo4bqjaSBsw6AgbOG6p24gY2h1eeG7g24gZ2lhbyBraeG7g3Utc3Rhc2ggKGPhuqV0IMSRaSkiCisKKyM6IGdpdC1zdGFzaC5zaDo0NDkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2ggcmVmZXJlbmNlIgorbXNnc3RyICLigJ0kYXJnc+KAnSBraMO0bmcgcGjhuqNpIHRoYW0gY2hp4bq/dSDEkeG6v24gc3Rhc2giCisKKyM6IGdpdC1zdGFzaC5zaDo0NTcKK21zZ2lkICJ1bmFibGUgdG8gcmVmcmVzaCBpbmRleCIKK21zZ3N0ciAia2jDtG5nIHRo4buDIGzDoG0gdMawxqFpIG3hu5tpIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogZ2l0LXN0YXNoLnNoOjQ2MQorbXNnaWQgIkNhbm5vdCBhcHBseSBhIHN0YXNoIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIMOhcCBk4bulbmcgbeG7mXQgc3Rhc2gg4bufIGdp4buvYSBj4bunYSBxdcOhIHRyw6xuaCBow7JhIHRy4buZbiIKKworIzogZ2l0LXN0YXNoLnNoOjQ2OQorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIlh1bmcgxJHhu5l0IHRyb25nIGLhuqNuZyBt4bulYyBs4bulYy4gSMOjeSB0aOG7rSBtw6Aga2jDtG5nIGTDuW5nIHTDuXkgY2jhu41uIC0taW5kZXguIgorCisjOiBnaXQtc3Rhc2guc2g6NDcxCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGdoaSBs4bqhaSBjw6J5IGNo4buJIG3hu6VjIgorCisjOiBnaXQtc3Rhc2guc2g6NTA1Cittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIktow7RuZyB0aOG7gyBi4buPIHJhIGto4buPaSBi4buHIHBow7NuZyBjw6FjIHThuq1wIHRpbiDEkcOjIMSRxrDhu6NjIHPhu61hIGNo4buvYSIKKworIzogZ2l0LXN0YXNoLnNoOjUyMAorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAiQuG6o25nIG3hu6VjIGzhu6VjIMSRw6Mga2jDtG5nIMSRxrDhu6NjIGLhu48gc3Rhc2guIgorCisjOiBnaXQtc3Rhc2guc2g6NTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICLEkMOjIHjDs2EgJHtSRVZ9ICgkcykiCisKKyM6IGdpdC1zdGFzaC5zaDo1NDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfTogS2jDtG5nIHRo4buDIHjDs2EgYuG7jyBt4bulYyBzdGFzaCIKKworIzogZ2l0LXN0YXNoLnNoOjU1MgorbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAiQ2jGsGEgY2jhu4kgcmEgdMOqbiBj4bunYSBuaMOhbmgiCisKKyM6IGdpdC1zdGFzaC5zaDo2MjQKK21zZ2lkICIoVG8gcmVzdG9yZSB0aGVtIHR5cGUgXCJnaXQgc3Rhc2ggYXBwbHlcIikiCittc2dzdHIgIijEkOG7gyBwaOG7pWMgaOG7k2kgbOG6oWkgY2jDum5nIGjDo3kgZ8O1IFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RyaXAgb25lIGNvbXBvbmVudCBvZmYgdXJsICckcmVtb3RldXJsJyIKK21zZ3N0ciAia2jDtG5nIHRo4buDIHRow6FvIGLhu48gbeG7mXQgdGjDoG5oIHBo4bqnbiByYSBraOG7j2kg4oCcJHJlbW90ZXVybOKAnSB1cmwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MjM3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyBzdWJtb2R1bGUgbWFwcGluZyBmb3VuZCBpbiAuZ2l0bW9kdWxlcyBmb3IgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICIiCisiS2jDtG5nIHTDrG0gdGjhuqV5IMOhbmggeOG6oSAobWFwcGluZykgbcO0LcSRdW4tY29uIHRyb25nIC5naXRtb2R1bGVzIGNobyDEkcaw4budbmcgZOG6q24gIgorIuKAnCRzbV9wYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI4NworIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xvbmUgb2YgJyR1cmwnIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyBmYWlsZWQiCittc2dzdHIgIk5ow6JuIGLhuqNuIOKAnCR1cmzigJ0gdsOgbyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRzbV9wYXRo4oCdIGfhurdwIGzhu5dpIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjI5NgorIywgc2gtZm9ybWF0Cittc2dpZCAiR2l0ZGlyICckYScgaXMgcGFydCBvZiB0aGUgc3VibW9kdWxlIHBhdGggJyRiJyBvciB2aWNlIHZlcnNhIgorbXNnc3RyICIiCisiR2l0ZGlyIOKAnCRh4oCdIGzDoCBi4buZIHBo4bqtbiBj4bunYSDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRi4oCdIGhv4bq3YyBcInZpY2UgdmVyc2FcIiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MDYKK21zZ2lkICJSZWxhdGl2ZSBwYXRoIGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgdG9wbGV2ZWwgb2YgdGhlIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAiIgorIsSQxrDhu51uZyBk4bqrbiB0xrDGoW5nIMSR4buRaSBjaOG7iSBjw7MgdGjhu4MgZMO5bmcgdOG7qyB0aMawIG3hu6VjIOG7nyBt4bupYyBjYW8gbmjhuqV0IGPhu6dhIGPDonkgbMOgbSAiCisidmnhu4djIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQxNgorIywgc2gtZm9ybWF0Cittc2dpZCAicmVwbyBVUkw6ICckcmVwbycgbXVzdCBiZSBhYnNvbHV0ZSBvciBiZWdpbiB3aXRoIC4vfC4uLyIKK21zZ3N0ciAiIgorInJlcG8gVVJMOiDigJwkcmVwb+KAnSBwaOG6o2kgbMOgIMSRxrDhu51uZyBk4bqrbiB0dXnhu4d0IMSR4buRaSBob+G6t2MgbMOgIGLhuq90IMSR4bqndSBi4bqxbmcgLi98Li4vIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQzMworIywgc2gtZm9ybWF0Cittc2dpZCAiJyRzbV9wYXRoJyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaW5kZXgiCittc2dzdHIgIuKAnSRzbV9wYXRo4oCdIHRo4buxYyBz4buxIMSRw6MgdOG7k24gdOG6oWkg4bufIGLhuqNuZyBt4bulYyBs4bulYyBy4buTaSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisiQ8OhYyDEkcaw4budbmcgZOG6q24gdGhlbyBzYXUgxJHDonkgc+G6vSBi4buLIGzhu50gxJFpIGLhu59pIG3hu5l0IHRyb25nIGPDoWMgdOG6rXAgdGluIC5naXRpZ25vcmUgIgorImPhu6dhIGLhuqFuOlxuIgorIiRzbV9wYXRoXG4iCisiU+G7rSBk4bulbmcgLWYgbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgbXXhu5FuIHRow6ptIG7DsyB2w6BvLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkFkZGluZyBleGlzdGluZyByZXBvIGF0ICckc21fcGF0aCcgdG8gdGhlIGluZGV4IgorbXNnc3RyICLEkGFuZyB0aMOqbSByZXBvIGPDsyBz4bq1biB04bqhaSDigJwkc21fcGF0aOKAnSB2w6BvIGLhuqNuZyBt4bulYyBs4bulYyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICLigJ0kc21fcGF0aOKAnSDEkcOjIHThu5NuIHThuqFpIHThu6sgdHLGsOG7m2MgdsOgIGtow7RuZyBwaOG6o2kgbMOgIG3hu5l0IGtobyBnaXQgaOG7o3AgbOG7hyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkEgZ2l0IGRpcmVjdG9yeSBmb3IgJyRzbV9uYW1lJyBpcyBmb3VuZCBsb2NhbGx5IHdpdGggcmVtb3RlKHMpOiIKK21zZ3N0ciAiIgorIlRoxrAgbeG7pWMgZ2l0IGNobyDigJwkc21fbmFtZeKAnSDEkcaw4bujYyB0w6xtIHRo4bqleSBt4buZdCBjw6FjaCBj4bulYyBi4buZIHbhu5tpIGPDoWMgbcOheSBjaOG7pzoiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiSWYgeW91IHdhbnQgdG8gcmV1c2UgdGhpcyBsb2NhbCBnaXQgZGlyZWN0b3J5IGluc3RlYWQgb2YgY2xvbmluZyBhZ2FpbiBmcm9tIgorbXNnc3RyICJO4bq/dSBi4bqhbiBtdeG7kW4gZMO5bmcgbOG6oWkgdGjGsCBt4bulYyBnaXQgbuG7mWkgYuG7mSBuw6B5IHRoYXkgdsOsIG5ow6JuIGLhuqNuIHThu6sgbsOzIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0IHJlcG8iCittc2dzdHIgIiIKKyJkw7luZyB0w7l5IGNo4buNbiDigJwtLWZvcmNl4oCdLiBO4bq/dSB0aMawIG3hu6VjIGdpdCBu4buZaSBi4buZIGtow7RuZyBwaOG6o2kgbMOgIHJlcG8gKGtobykgxJHDum5nIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ3MAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIm9yIHlvdSBhcmUgdW5zdXJlIHdoYXQgdGhpcyBtZWFucyBjaG9vc2UgYW5vdGhlciBuYW1lIHdpdGggdGhlICctLW5hbWUnICIKKyJvcHRpb24uIgorbXNnc3RyICIiCisiaGF5IGLhuqFuIGtow7RuZyBjaOG6r2MgY2jhuq9uIMSRaeG7gXUgxJHDsyBjw7MgbmdoxKlhIGfDrCBjaOG7jW4gdMOqbiBraMOhYyB24bubaSB0w7l5IGNo4buNbiDigJwtLSIKKyJuYW1l4oCdLiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NzIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlJlYWN0aXZhdGluZyBsb2NhbCBnaXQgZGlyZWN0b3J5IGZvciBzdWJtb2R1bGUgJyRzbV9uYW1lJy4iCittc2dzdHIgIiIKKyJQaOG7pWMgaOG7k2kgc+G7sSBob+G6oXQgxJHhu5luZyBj4bunYSB0aMawIG3hu6VjIGdpdCBu4buZaSBi4buZIGNobyBtw7QtxJF1bi1jb24g4oCcJHNtX25hbWXigJ0uIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ4NAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgbOG6pXkgcmEgbcO0LcSRdW4tY29uIOKAnCRzbV9wYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGFkZCBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHRow6ptIG3DtC3EkXVuLWNvbiDigJwkc21fcGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0OTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWdpc3RlciBzdWJtb2R1bGUgJyRzbV9wYXRoJyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSRxINuZyBrw70gduG7m2kgaOG7hyB0aOG7kW5nIG3DtC3EkXVuLWNvbiDigJwkc21fcGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICckcHJlZml4JGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAixJBhbmcgdsOgbyDigJwkcHJlZml4JGRpc3BsYXlwYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjU2MgorIywgc2gtZm9ybWF0Cittc2dpZCAiU3RvcHBpbmcgYXQgJyRwcmVmaXgkZGlzcGxheXBhdGgnOyBzY3JpcHQgcmV0dXJuZWQgbm9uLXplcm8gc3RhdHVzLiIKK21zZ3N0ciAiIgorIkThu6tuZyBs4bqhaSB04bqhaSDigJwkcHJlZml4JGRpc3BsYXlwYXRo4oCdOyBzY3JpcHQgdHLhuqMgduG7gSB0cuG6oW5nIHRow6FpIGtow6FjIGtow7RuZy4iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICIiCisiS2jDtG5nIHTDrG0gdGjhuqV5IHVybCBjaG8gxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwkZGlzcGxheXBhdGjigJ0gdHJvbmcgLmdpdG1vZHVsZXMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSRxINuZyBrw70gdXJsIGNobyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2MTkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSAnJG5hbWUnICgkdXJsKSByZWdpc3RlcmVkIGZvciBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJNw7QtxJF1bi1jb24g4oCcJG5hbWXigJ0gKCR1cmwpIMSRxrDhu6NjIMSRxINuZyBrw70gY2hvIMSRxrDhu51uZyBk4bqrbiDigJwkZGlzcGxheXBhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiR+G6t3AgbOG7l2kga2hpIMSRxINuZyBrw70gY2jhur8gxJHhu5kgY+G6rXAgbmjhuq10IGNobyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2NzQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVzZSAnLicgaWYgeW91IHJlYWxseSB3YW50IHRvIGRlaW5pdGlhbGl6ZSBhbGwgc3VibW9kdWxlcyIKK21zZ3N0ciAiRMO5bmcg4oCcLuKAnSBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSBtdeG7kW4gZ+G7oSBi4buPIG3hu41pIG3DtC3EkXVuLWNvbiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAiQ8OieSBsw6BtIHZp4buHYyBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdIGPDsyBjaOG7qWEgdGjGsCBt4bulYyAuZ2l0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY5MgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIihkw7luZyDigJxybSAtcmbigJ0gbuG6v3UgYuG6oW4gdGjhu7FjIHPhu7EgbXXhu5FuIGfhu6EgYuG7jyBuw7MgY8O5bmcgduG7m2kgdOG6pXQgY+G6oyBs4buLY2ggc+G7rSBj4bunYSAiCisiY2jDum5nKSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgd29yayB0cmVlICckZGlzcGxheXBhdGgnIGNvbnRhaW5zIGxvY2FsIG1vZGlmaWNhdGlvbnM7IHVzZSAnLWYnIHRvICIKKyJkaXNjYXJkIHRoZW0iCittc2dzdHIgIiIKKyJDw6J5IGzDoG0gdmnhu4djIG3DtC3EkXVuLWNvbiDigJwkZGlzcGxheXBhdGjigJ0gY2jhu6lhIGPDoWMgdGhheSDEkeG7lWkgbuG7mWkgYuG7mTsgaMOjeSBkw7luZyDigJwtIgorImbigJ0gxJHhu4MgbG/huqFpIGLhu48gY2jDum5nIMSRaSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNsZWFyZWQgZGlyZWN0b3J5ICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLEkMOjIHThuqFvIHRoxrAgbeG7pWMg4oCcJGRpc3BsYXlwYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwMgorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBzdWJtb2R1bGUgd29yayB0cmVlICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJLaMO0bmcgdGjhu4MgZ+G7oSBi4buPIGPDonkgbMOgbSB2aeG7h2MgbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MDUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBjcmVhdGUgZW1wdHkgc3VibW9kdWxlIGRpcmVjdG9yeSAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIHThuqFvIHRoxrAgbeG7pWMgbcO0LcSRdW4tY29uIHLhu5duZyDigJwkZGlzcGxheXBhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgdW5yZWdpc3RlcmVkIGZvciBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICJNw7QtxJF1bi1jb24g4oCcJG5hbWXigJ0gKCR1cmwpIMSRxrDhu6NjIGLhu48gxJHEg25nIGvDvSBjaG8gxJHGsOG7nW5nIGThuqtuIOKAnCRkaXNwbGF5cGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyBub3QgaW5pdGlhbGl6ZWRcbiIKKyJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiIgorIsSQxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdIGNoxrBhIMSRxrDhu6NjIGto4bufaSB04bqhby5cbiIKKyJDw7MgbOG6vSBi4bqhbiBtdeG7kW4gc+G7rSBk4bulbmcgbOG7h25oIOKAnHVwZGF0ZSAtLWluaXTigJ0/IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg0MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiIgorIktow7RuZyB0w6xtIHRo4bqleSDEkWnhu4NtIHjDqXQgZHV54buHdCBoaeG7h24gaMOgbmggdHJvbmcgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiAiCisi4oCcJGRpc3BsYXlwYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg1MgorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZldGNoIGluIHN1Ym1vZHVsZSBwYXRoICckc21fcGF0aCciCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSB24buBIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJHNtX3BhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODc2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSB24buBIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5MAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0ICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSByYSDigJwkc2hhMeKAnSB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnOiBjaGVja2VkIG91dCAnJHNoYTEnIgorbXNnc3RyICLEkMaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnTogxJHDoyBjaGVja291dCDigJwkc2hhMeKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4OTUKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byByZWJhc2UgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiS2jDtG5nIHRo4buDIGPhuqNpIHThu5Ug4oCcJHNoYTHigJ0gdHJvbmcgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwkZGlzcGxheXBhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIsSQxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdOiDEkcaw4bujYyByZWJhc2UgdsOgbyB0cm9uZyDigJwkc2hhMeKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBtZXJnZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICIiCisiS2jDtG5nIHRo4buDIGjDsmEgdHLhu5luIChtZXJnZSkg4oCcJHNoYTHigJ0gdHJvbmcgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiDigJwkZGlzcGxheXBhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIsSQxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJGRpc3BsYXlwYXRo4oCdOiDEkcaw4bujYyBow7JhIHRy4buZbiB2w6BvIOKAnCRzaGEx4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJHByZWZpeCRzbV9wYXRoJyIKK21zZ3N0ciAiIgorIlRo4buxYyBoaeG7h24ga2jDtG5nIHRow6BuaCBjw7RuZyBs4buHbmgg4oCcJGNvbW1hbmQgJHNoYTHigJ0gdHJvbmcgxJHGsOG7nW5nIGThuqtuIG3DtC3EkXVuLWNvbiAiCisi4oCcJHByZWZpeCRzbV9wYXRo4oCdIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwOAorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRwcmVmaXgkc21fcGF0aCc6ICckY29tbWFuZCAkc2hhMSciCittc2dzdHIgIsSQxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJHByZWZpeCRzbV9wYXRo4oCdOiDigJwkY29tbWFuZCAkc2hhMeKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIkfhurdwIGzhu5dpIGtoaSDEkeG7hyBxdXkgdsOgbyB0cm9uZyDEkcaw4budbmcgZOG6q24gbcO0LcSRdW4tY29uIOKAnCRkaXNwbGF5cGF0aOKAnSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMDQ2Cittc2dpZCAiVGhlIC0tY2FjaGVkIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSAtLWZpbGVzIG9wdGlvbiIKK21zZ3N0ciAiVMO5eSBjaOG7jW4gLS1jYWNoZWQga2jDtG5nIHRo4buDIGTDuW5nIGPDuW5nIHbhu5tpIHTDuXkgY2jhu41uIC0tZmlsZXMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA5OAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICJjaOG6vyDEkeG7mSBraMO0bmcgbmjGsCBtb25nIGNo4budICRtb2RfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExMTgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX3NyYyIKK21zZ3N0ciAiICBD4bqjbmggYsOhbzogJGRpc3BsYXlfbmFtZSBraMO0bmcgY2jhu6lhIGzhuqduIGNodXnhu4NuIGdpYW8gJHNoYTFfc3JjIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExMjEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0ICRzaGExX2RzdCIKK21zZ3N0ciAiICBD4bqjbmggYsOhbzogJGRpc3BsYXlfbmFtZSBraMO0bmcgY2jhu6lhIGzhuqduIGNodXnhu4NuIGdpYW8gJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiIgorIiAgQ+G6o25oIGLDoW86ICRkaXNwbGF5X25hbWUga2jDtG5nIGNo4bupYSBuaOG7r25nIGzhuqduIGNodXnhu4NuIGdpYW8gJHNoYTFfc3JjIHbDoCAiCisiJHNoYTFfZHN0IgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjExNDkKK21zZ2lkICJibG9iIgorbXNnc3RyICJibG9iIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEyNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buHIHF1eSB2w6BvIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJHNtX3BhdGjigJ0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTMzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAiVXJsIE3DtC3EkXVuLWNvbiDEkeG7k25nIGLhu5kgaMOzYSBjaG8g4oCcJGRpc3BsYXlwYXRo4oCdIgorCisjfiBtc2dpZCAiZmFsc2V8dHJ1ZXxwcmVzZXJ2ZSIKKyN+IG1zZ3N0ciAiZmFsc2V8dHJ1ZXxwcmVzZXJ2ZSIKKworI34gbXNnaWQgIkJVRzogcmVvcGVuIGEgbG9ja2ZpbGUgdGhhdCBpcyBzdGlsbCBvcGVuIgorI34gbXNnc3RyICJM4buWSTogbeG7nyBs4bqhaSB04bqtcCB0aW4ga2jDs2EgbcOgIG7DsyBs4bqhaSDEkWFuZyDEkcaw4bujYyBt4bufIgorCisjfiBtc2dpZCAiQlVHOiByZW9wZW4gYSBsb2NrZmlsZSB0aGF0IGhhcyBiZWVuIGNvbW1pdHRlZCIKKyN+IG1zZ3N0ciAiTOG7lkk6IG3hu58gbOG6oWkgdOG6rXAgdGluIGtow7NhIG3DoCBuw7MgxJHDoyDEkcaw4bujYyBjaHV54buDbiBnaWFvIgorCisjfiBtc2dpZCAib3B0aW9uICVzIGRvZXMgbm90IGFjY2VwdCBuZWdhdGl2ZSBmb3JtIgorI34gbXNnc3RyICJ0w7l5IGNo4buNbiAlcyBraMO0bmcgY2jhuqVwIG5o4bqtbiBk4bqhbmcgdGjhu6ljIMOibSIKKworI34gbXNnaWQgInVuYWJsZSB0byBwYXJzZSB2YWx1ZSAnJXMnIGZvciBvcHRpb24gJXMiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiB0w61jaCBnacOhIHRy4buLIOKAnCVz4oCdIGNobyB0w7l5IGNo4buNbiAlcyIKKworI34gbXNnaWQgInVuYWJsZSB0byByZXNvbHZlIEhFQUQiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBwaMOibiBnaeG6o2kgSEVBRCIKKworI34gbXNnaWQgIi1iIGFuZCAtQiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorI34gbXNnc3RyICItYiB2w6AgLUIgbG/huqFpIHThu6sgbOG6q24gbmhhdS4iCisKKyN+IG1zZ2lkICJZb3UgbmVlZCB0byBzZXQgeW91ciBjb21taXR0ZXIgaW5mbyBmaXJzdCIKKyN+IG1zZ3N0ciAiQuG6oW4gY+G6p24gxJHhurd0IHRow7RuZyB0aW4gduG7gSBuZ8aw4budaSBjaHV54buDbiBnaWFvIG3DoyBuZ3Xhu5NuIHRyxrDhu5tjIMSRw6MiCisKKyN+IG1zZ2lkICIiCisjfiAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiRjbWRsaW5lIC0tY29udGludWVcIi5cbiIKKyN+ICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyN+ICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnQiCisjfiAiXCIuIgorI34gbXNnc3RyICIiCisjfiAiS2hpIGLhuqFuIGPhuqduIGdp4bqjaSBxdXnhur90IHbhuqVuIMSR4buBIG7DoHkgaMOjeSBjaOG6oXkgbOG7h25oIFwiJGNtZGxpbmUgLS1jb250aW51ZVwiLlxuIgorI34gIk7hur91IGLhuqFuIGPDsyDDvSDEkeG7i25oIGLhu48gcXVhIG1p4bq/bmcgdsOhLCB0aGF5IHbDoG8gxJHDsyBi4bqhbiBjaOG6oXkgXCIkY21kbGluZSAtLXNraXAiCisjfiAiXCIuXG4iCisjfiAixJDhu4MgcGjhu6VjIGjhu5NpIGzhuqFpIHRow6BuaCBuaMOhbmggbmd1ecOqbiB0aOG7p3kgdsOgIGThu6tuZyB2aeG7h2MgdsOhIGzhuqFpIHRow6wgY2jhuqF5ICIKKyN+ICJcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCisKKyN+IG1zZ2lkICJQYXRjaCBmb3JtYXQgJHBhdGNoX2Zvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIKKyN+IG1zZ3N0ciAixJDhu4tuaCBk4bqhbmcgbWnhur9uZyB2w6EgJHBhdGNoX2Zvcm1hdCBraMO0bmcgxJHGsOG7o2MgaOG7lyB0cuG7oy4iCisKKyN+IG1zZ2lkICJQbGVhc2UgbWFrZSB1cCB5b3VyIG1pbmQuIC0tc2tpcCBvciAtLWFib3J0PyIKKyN+IG1zZ3N0ciAiWGluIGjDo3kgcsO1IHLDoG5nLiAtLXNraXAgaGF5IC0tYWJvcnQ/IgorCisjfiBtc2dpZCAiIgorI34gIlBhdGNoIGlzIGVtcHR5LiAgV2FzIGl0IHNwbGl0IHdyb25nP1xuIgorI34gIklmIHlvdSB3b3VsZCBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBpbnN0ZWFkIHJ1biBcIiRjbWRsaW5lIC0tc2tpcFwiLlxuIgorI34gIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZyBydW4gXCIkY21kbGluZSAtLWFib3J0XCIuIgorI34gbXNnc3RyICIiCisjfiAiTWnhur9uZyB2w6EgdHLhu5FuZyBy4buXbmcuICBOw7MgxJHDoyBi4buLIGNoaWEgY+G6r3Qgc2FpIHBo4bqjaSBraMO0bmc/XG4iCisjfiAiTuG6v3UgYuG6oW4gdGjDrWNoIGLhu48gcXVhIG1p4bq/bmcgdsOhIG7DoHksIGjDo3kgY2jhuqF5IGzhu4duaCBzYXUgxJHhu4MgdGhheSB0aOG6vyAiCisjfiAiXCIkY21kbGluZSAtLXNraXBcIi5cbiIKKyN+ICLEkOG7gyBwaOG7pWMgaOG7k2kgbOG6oWkgbmjDoW5oIG5ndXnDqm4gdGjhu6d5IHbDoCBk4burbmcgdsOhIGzhuqFpIGjDo3kgY2jhuqF5IGzhu4duaCBcIiRjbWRsaW5lICIKKyN+ICItLWFib3J0XCIuIgorCisjfiBtc2dpZCAiUGF0Y2ggZG9lcyBub3QgaGF2ZSBhIHZhbGlkIGUtbWFpbCBhZGRyZXNzLiIKKyN+IG1zZ3N0ciAiTWnhur9uZyB2w6Ega2jDtG5nIGPDsyDEkeG7i2EgY2jhu4kgdGjGsCDEkWnhu4duIHThu60gaOG7o3AgbOG7hy4iCisKKyN+IG1zZ2lkICJBcHBseWluZzogJEZJUlNUTElORSIKKyN+IG1zZ3N0ciAixJBhbmcgw6FwIGThu6VuZyAobWnhur9uZyB2w6EpOiAkRklSU1RMSU5FIgorCisjfiBtc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICRtc2dudW0gJEZJUlNUTElORSIKKyN+IG1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIHbDoSB04bqhaSAkbXNnbnVtICRGSVJTVExJTkUiCisKKyN+IG1zZ2lkICIiCisjfiAiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy5cbiIKKyN+ICJQbGVhc2UsIGZpeCB0aGVtIHVwIGluIHRoZSB3b3JrIHRyZWUsIGFuZCB0aGVuIHVzZSAnZ2l0IGFkZC9ybSA8ZmlsZT4nXG4iCisjfiAiYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uIGFuZCBtYWtlIGEgY29tbWl0LiIKKyN+IG1zZ3N0ciAiIgorI34gIlB1bGwgbMOgIGtow7RuZyB0aOG7gyDEkcaw4bujYyBi4bufaSB2w6wgYuG6oW4gY8OzIG5o4buvbmcgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIGjDsmEgdHLhu5luLlxuIgorI34gIlhpbiBow6N5IHPhu61hIGNo4buvYSBjaMO6bmcgdHLGsOG7m2MsIHbDoCBzYXUgxJHDsyBz4butIGThu6VuZyBs4buHbmgg4oCcZ2l0IGFkZC9ybSA8dOG6rXAtIgorI34gInRpbj7igJ1cbiIKKyN+ICLEkeG7gyBwaMOqIGNodeG6qW4gdmnhu4djIMSRw6FuaCBk4bqldSDEkcOieSBj4bqnbiDEkcaw4bujYyBnaeG6o2kgcXV54bq/dCB2w6AgdOG6oW8gbeG7mXQgbOG6p24gY2h1eeG7g24gIgorI34gImdpYW8uIgorCisjfiBtc2dpZCAiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcy4iCisjfiBtc2dzdHIgIiIKKyN+ICJGdWxsIGzDoCBraMO0bmcgdGjhu4MgdGjhu7FjIGhp4buHbiBi4bufaSB2w6wgYuG6oW4gY8OzIG5o4buvbmcgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIGjDsmEgIgorI34gInRy4buZbi4iCisKKyN+IG1zZ2lkICJubyBicmFuY2ggc3BlY2lmaWVkIgorI34gbXNnc3RyICJjaMawYSBjaOG7iSByYSB0w6puIGPhu6dhIG5ow6FuaCIKKworI34gbXNnaWQgImNoZWNrIGEgYnJhbmNoIG91dCBpbiBhIHNlcGFyYXRlIHdvcmtpbmcgZGlyZWN0b3J5IgorI34gbXNnc3RyICJs4bqleSByYSBt4buZdCBuaMOhbmggdHJvbmcgbeG7mXQgdGjGsCBt4bulYyBsw6BtIHZp4buHYyBjw6FjaCBiaeG7h3QiCisKKyN+IG1zZ2lkICJwcnVuZSAuZ2l0L3dvcmt0cmVlcyIKKyN+IG1zZ3N0ciAieMOpbiAuZ2l0L3dvcmt0cmVlcyIKKworI34gbXNnaWQgIi0td29ya3RyZWVzIGRvZXMgbm90IHRha2UgZXh0cmEgYXJndW1lbnRzIgorI34gbXNnc3RyICItLXdvcmt0cmVlcyBraMO0bmcgbmjhuq1uIGPDoWMgxJHhu5FpIHPhu5EgdGjDqm0iCisKKyN+IG1zZ2lkICJUaGUgbW9zdCBjb21tb25seSB1c2VkIGdpdCBjb21tYW5kcyBhcmU6IgorI34gbXNnc3RyICJOaOG7r25nIGzhu4duaCBnaXQgaGF5IMSRxrDhu6NjIGTDuW5nIG5o4bqldCBsw6A6IgorCisjfiBtc2dpZCAiTm8gc3VjaCBicmFuY2g6ICclcyciCisjfiBtc2dzdHIgIktow7RuZyBjw7MgbmjDoW5oIG7DoG8gbmjGsCB0aOG6vzog4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGdpdCBsaW5rICVzIgorI34gbXNnc3RyICJLaMO0bmcgdGjhu4MgdOG6oW8gbGnDqm4ga+G6v3QgZ2l0IOKAnCVz4oCdIgorCisjfiBtc2dpZCAiSW52YWxpZCBnYy5wcnVuZWV4cGlyZTogJyVzJyIKKyN+IG1zZ3N0ciAiZ2MucHJ1bmVleHBpcmUga2jDtG5nIGjhu6NwIGzhu4c6IOKAnCVz4oCdIgorCisjfiBtc2dpZCAiKGRldGFjaGVkIGZyb20gJXMpIgorI34gbXNnc3RyICIoxJHGsOG7o2MgdMOhY2ggcuG7nWkgdOG7qyAlcykiCisKKyN+IG1zZ2lkICJObyBleGlzdGluZyBhdXRob3IgZm91bmQgd2l0aCAnJXMnIgorI34gbXNnc3RyICJLaMO0bmcgdMOsbSB0aOG6pXkgdMOhYyBnaeG6oyBjw7Mgc+G6tW4gduG7m2kg4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJzZWFyY2ggYWxzbyBpbiBpZ25vcmVkIGZpbGVzIgorI34gbXNnc3RyICJ0w6xtIGPhuqMgdHJvbmcgY8OhYyB04bqtcCB0aW4gxJHDoyBi4buLIGzhu50gxJFpIgorCisjfiBtc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLS1hdXRvIHwgLWQgfCAtLWRlbGV0ZSB8PGJyYW5jaD4pIgorI34gbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDx0w6puPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPG5ow6FuaD4pIgorCisjfiBtc2dpZCAibm8gZmlsZXMgYWRkZWQiCisjfiBtc2dzdHIgImNoxrBhIGPDsyB04bqtcCB0aW4gbsOgbyDEkcaw4bujYyB0aMOqbSB2w6BvIgorCisjfiBtc2dpZCAiZm9yY2UgY3JlYXRpb24gKHdoZW4gYWxyZWFkeSBleGlzdHMpIgorI34gbXNnc3RyICLDqXAgYnXhu5ljIHThuqFvIChraGkgxJHDoyBjw7MgbmjDoW5oIGPDuW5nIHTDqm4pIgorCisjfiBtc2dpZCAiTWFsZm9ybWVkIGlkZW50IHN0cmluZzogJyVzJyIKKyN+IG1zZ3N0ciAiQ2h14buXaSB0aOG7pXQgbOG7gSDEkeG6p3UgZMOybmcgZOG7iyBow6xuaDog4oCcJXPigJ0iCisKKyN+IG1zZ2lkICJzbG90IgorI34gbXNnc3RyICJraGUiCisKKyN+IG1zZ2lkICJjaGVjayIKKyN+IG1zZ3N0ciAia2nhu4NtIHRyYSIKKworI34gbXNnaWQgIkZhaWxlZCB0byBsb2NrIHJlZiBmb3IgdXBkYXRlIgorI34gbXNnc3RyICJH4bq3cCBs4buXaSBraGkga2jDs2EgdGhhbSBjaGnhur91IMSR4buDIGPhuq1wIG5o4bqtdCIKKworI34gbXNnaWQgIkZhaWxlZCB0byB3cml0ZSByZWYiCisjfiBtc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBnaGkgdGhhbSBjaGnhur91IgorCisjfiBtc2dpZCAiaW52YWxpZCBjb21taXQ6ICVzIgorI34gbXNnc3RyICJs4bqnbiBjaHV54buDbiBnaWFvIGtow7RuZyBo4bujcCBs4buHOiAlcyIKKworI34gbXNnaWQgImNvbW1pdCBoYXMgZW1wdHkgbWVzc2FnZSIKKyN+IG1zZ3N0ciAibOG6p24gY2h1eeG7g24gZ2lhbyBjw7MgZ2hpIGNow7ogdHLhu5FuZyBy4buXbmciCisKKyN+IG1zZ2lkICJjYW5ub3QgbG9jayBIRUFEIHJlZiIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGtow7NhIEhFQUQgcmVmICh0aGFtIGNoaeG6v3UpIgorCisjfiBtc2dpZCAiY2Fubm90IHVwZGF0ZSBIRUFEIHJlZiIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCByZWYgKHRoYW0gY2hp4bq/dSkgSEVBRCIKKworI34gbXNnaWQgIkZhaWxlZCB0byBjaGRpcjogJXMiCisjfiBtc2dzdHIgIkfhurdwIGzhu5dpIHbhu5tpIGzhu4duaCBjaGRpcjogJXMiCisKKyN+IG1zZ2lkICJjYW5ub3QgdGVsbCBjd2QiCisjfiBtc2dzdHIgImtow7RuZyBuw7NpIGNodXnhu4duIMSRxrDhu6NjIHbhu5tpIGzhu4duaCBjd2QiCisKKyN+IG1zZ2lkICIlczogY2Fubm90IGxvY2sgdGhlIHJlZiIKKyN+IG1zZ3N0ciAiJXM6IGtow7RuZyB0aOG7gyBraMOzYSByZWYgKHRoYW0gY2hp4bq/dSkiCisKKyN+IG1zZ2lkICIlczogY2Fubm90IHVwZGF0ZSB0aGUgcmVmIgorI34gbXNnc3RyICIlczoga2jDtG5nIHRo4buDIGPhuq1wIG5o4bqtdCByZWYgKHRoYW0gY2hp4bq/dSkiCisKKyN+IG1zZ2lkICJGYWlsZWQgdG8gbG9jayBIRUFEIGR1cmluZyBmYXN0X2ZvcndhcmRfdG8iCisjfiBtc2dzdHIgIkfhurdwIGzhu5dpIGtoaSBraMOzYSBIRUFEIHRyb25nIHF1w6EgdHLDrG5oIGZhc3RfZm9yd2FyZF90byIKKworI34gbXNnaWQgImtleSBpZCIKKyN+IG1zZ3N0ciAiaWQgY+G7p2Ega2jDs2EiCisKKyN+IG1zZ2lkICJUcmFja2luZyBub3Qgc2V0IHVwOiBuYW1lIHRvbyBsb25nOiAlcyIKKyN+IG1zZ3N0ciAiVmnhu4djIHRoZW8gZMO1aSBjaMawYSDEkcaw4bujYyBjw6BpIMSR4bq3dDogdMOqbiBxdcOhIGTDoGk6ICVzIgorCisjfiBtc2dpZCAiYnVnIgorI34gbXNnc3RyICJs4buXaSIKKworI34gbXNnaWQgImFoZWFkICIKKyN+IG1zZ3N0ciAicGjDrWEgdHLGsOG7m2MgIgorCisjfiBtc2dpZCAiLCBiZWhpbmQgIgorI34gbXNnc3RyICIsIMSR4bqxbmcgc2F1ICIKKworI34gbXNnaWQgImNvdWxkIG5vdCBmaW5kIC5naXRtb2R1bGVzIGluIGluZGV4IgorI34gbXNnc3RyICJraMO0bmcgdMOsbSB0aOG6pXkgLmdpdG1vZHVsZXMgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjfiBtc2dpZCAicmVhZGluZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKKyN+IG1zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIMSR4buNYyBj4bqtcCBuaOG6rXQgLmdpdG1vZHVsZXMiCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gc3RhdCB1cGRhdGVkIC5naXRtb2R1bGVzIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgbOG6pXkgdGjhu5FuZyBrw6ogLmdpdG1vZHVsZXMgxJHDoyBj4bqtcCBuaOG6rXQiCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gcmVtb3ZlIC5naXRtb2R1bGVzIGZyb20gaW5kZXgiCisjfiBtc2dzdHIgImtow7RuZyB0aOG7gyBn4buhIGLhu48gLmdpdG1vZHVsZXMgdOG7qyBt4bulYyBs4bulYyIKKworI34gbXNnaWQgImFkZGluZyB1cGRhdGVkIC5naXRtb2R1bGVzIGZhaWxlZCIKKyN+IG1zZ3N0ciAiZ+G6t3AgbOG7l2kga2hpIHRow6ptIC5naXRtb2R1bGVzIMSRw6MgY+G6rXAgbmjhuq10IgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBiZWhhdmlvciBvZiAnZ2l0IGFkZCAlcyAob3IgJXMpJyB3aXRoIG5vIHBhdGggYXJndW1lbnQgZnJvbSBhXG4iCisjfiAic3ViZGlyZWN0b3J5IG9mIHRoZSB0cmVlIHdpbGwgY2hhbmdlIGluIEdpdCAyLjAgYW5kIHNob3VsZCBub3QgYmUgdXNlZCAiCisjfiAiYW55bW9yZS5cbiIKKyN+ICJUbyBhZGQgY29udGVudCBmb3IgdGhlIHdob2xlIHRyZWUsIHJ1bjpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBhZGQgJXMgOi9cbiIKKyN+ICIgIChvciBnaXQgYWRkICVzIDovKVxuIgorI34gIlxuIgorI34gIlRvIHJlc3RyaWN0IHRoZSBjb21tYW5kIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgcnVuOlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGFkZCAlcyAuXG4iCisjfiAiICAob3IgZ2l0IGFkZCAlcyAuKVxuIgorI34gIlxuIgorI34gIldpdGggdGhlIGN1cnJlbnQgR2l0IHZlcnNpb24sIHRoZSBjb21tYW5kIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIGN1cnJlbnQgIgorI34gImRpcmVjdG9yeS5cbiIKKyN+IG1zZ3N0ciAiIgorI34gIkPDoWNoIOG7qW5nIHjhu60gY+G7p2EgbOG7h25oIOKAnGdpdCBhZGQgJXMgKGhheSAlcynigJ0ga2hpIGtow7RuZyBjw7MgdGhhbSBz4buRIMSRxrDhu51uZyBk4bqrbiAiCisjfiAidOG7q1xuIgorI34gInRoxrAtbeG7pWMgY29uIGPhu6dhIGPDonkgc+G6vSB0aGF5IMSR4buVaSBr4buDIHThu6sgR2l0IDIuMCB2w6Aga2jDtG5nIHRo4buDIHPhu60gZOG7pW5nIG5oxrAgIgorI34gInRo4bq/IG7hu69hLlxuIgorI34gIsSQ4buDIHRow6ptIG7hu5lpIGR1bmcgY2hvIHRvw6BuIGLhu5kgY8OieSwgY2jhuqF5OlxuIgorI34gIlxuIgorI34gIiAgZ2l0IGFkZCAlcyA6L1xuIgorI34gIiAgKGhv4bq3YyBnaXQgYWRkICVzIDovKVxuIgorI34gIlxuIgorI34gIsSQ4buDIGjhuqFuIGNo4bq/IGzhu4duaCBjaG8gdGjGsC1t4bulYyBoaeG7h24gdOG6oWksIGNo4bqheTpcbiIKKyN+ICJcbiIKKyN+ICIgIGdpdCBhZGQgJXMgLlxuIgorI34gIiAgKGhv4bq3YyBnaXQgYWRkICVzIC4pXG4iCisjfiAiXG4iCisjfiAiVuG7m2kgcGhpw6puIGLhuqNuIGhp4buHbiB04bqhaSBj4bunYSBHaXQsIGzhu4duaCBi4buLIGjhuqFuIGNo4bq/IGNobyB0aMawLW3hu6VjIGhp4buHbiB04bqhaS5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJZb3UgcmFuICdnaXQgYWRkJyB3aXRoIG5laXRoZXIgJy1BICgtLWFsbCknIG9yICctLWlnbm9yZS1yZW1vdmFsJyxcbiIKKyN+ICJ3aG9zZSBiZWhhdmlvdXIgd2lsbCBjaGFuZ2UgaW4gR2l0IDIuMCB3aXRoIHJlc3BlY3QgdG8gcGF0aHMgeW91ICIKKyN+ICJyZW1vdmVkLlxuIgorI34gIlBhdGhzIGxpa2UgJyVzJyB0aGF0IGFyZVxuIgorI34gInJlbW92ZWQgZnJvbSB5b3VyIHdvcmtpbmcgdHJlZSBhcmUgaWdub3JlZCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBHaXQuXG4iCisjfiAiXG4iCisjfiAiKiAnZ2l0IGFkZCAtLWlnbm9yZS1yZW1vdmFsIDxwYXRoc3BlYz4nLCB3aGljaCBpcyB0aGUgY3VycmVudCBkZWZhdWx0LFxuIgorI34gIiAgaWdub3JlcyBwYXRocyB5b3UgcmVtb3ZlZCBmcm9tIHlvdXIgd29ya2luZyB0cmVlLlxuIgorI34gIlxuIgorI34gIiogJ2dpdCBhZGQgLS1hbGwgPHBhdGhzcGVjPicgd2lsbCBsZXQgeW91IGFsc28gcmVjb3JkIHRoZSByZW1vdmFscy5cbiIKKyN+ICJcbiIKKyN+ICJSdW4gJ2dpdCBzdGF0dXMnIHRvIGNoZWNrIHRoZSBwYXRocyB5b3UgcmVtb3ZlZCBmcm9tIHlvdXIgd29ya2luZyB0cmVlLlxuIgorI34gbXNnc3RyICIiCisjfiAiQuG6oW4gY2jhuqF5IOKAnGdpdCBhZGTigJ0gbcOgIGtow7RuZyBjw7Mg4oCcLUEgKC0tYWxsKeKAnSBjxaluZyBraMO0bmcg4oCcLS1pZ25vcmUtIgorI34gInJlbW92YWzigJ0sXG4iCisjfiAiY8OhY2gg4bupbmcgeOG7rSBj4bunYSBuw7Mgc+G6vSB0aGF5IMSR4buVaSBr4buDIHThu6sgR2l0IDIuMDogbsOzIHF1YW4gdMOibSDEkeG6v24gY8OhYyDEkcaw4budbmcgIgorI34gImThuqtuIG3DoFxuIgorI34gImLhuqFuIMSRw6MgZ+G7oSBi4buPLiBDw6FjIMSRxrDhu51uZyBk4bqrbiBuaMawIGzDoCDigJwlc+KAnSBjw6FpIG3DoFxuIgorI34gImLhu4sgZ+G7oSBi4buPIHThu6sgY8OieSBsw6BtIHZp4buHYyBj4bunYSBi4bqhbiB0aMOsIGLhu4sgYuG7jyBxdWEgduG7m2kgcGhpw6puIGLhuqNuIG7DoHkgY+G7p2EgIgorI34gIkdpdC5cbiIKKyN+ICJcbiIKKyN+ICIqIOKAnGdpdCBhZGQgLS1pZ25vcmUtcmVtb3ZhbCA8cGF0aHNwZWM+4oCdLCBjw6FpIGhp4buHbiB04bqhaSBsw6AgbeG6t2MgxJHhu4tuaCxcbiIKKyN+ICIgIGLhu48gcXVhIGPDoWMgxJHGsOG7nW5nIGThuqtuIGLhuqFuIMSRw6MgZ+G7oSBi4buPIHThu6sgY8OieSBsw6BtIHZp4buHYyBj4bunYSBi4bqhbi5cbiIKKyN+ICJcbiIKKyN+ICIqIOKAnGdpdCBhZGQgLS1hbGwgPHBhdGhzcGVjPuKAnSBz4bq9IMSR4buTbmcgdGjhu51pIGdpw7pwIGLhuqFuIGdoaSBs4bqhaSB2aeG7h2MgZOG7nWkgxJFpLlxuIgorI34gIlxuIgorI34gIkNo4bqheSDigJxnaXQgc3RhdHVz4oCdIMSR4buDIGtp4buDbSB0cmEgY8OhYyDEkcaw4budbmcgZOG6q24gYuG6oW4gxJHDoyBn4buhIGLhu48gdOG7qyBjw6J5IGzDoG0gdmnhu4djICIKKyN+ICJj4bunYSBi4bqhbi5cbiIKKworI34gbXNnaWQgIiIKKyN+ICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgZm9yIG9wdGltdW0gcGVyZm9ybWFuY2UuIFlvdSBtYXkgYWxzb1xuIgorI34gInJ1biBcImdpdCBnY1wiIG1hbnVhbGx5LiBTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIgorI34gbXNnc3RyICIiCisjfiAiVOG7sSDEkeG7mW5nIMSRw7NuZyBnw7NpIGtobyBjaOG7qWEgxJHhu4MgdOG7kWkgxrB1IGjDs2EgaGnhu4d1IHN14bqldCBsw6BtIHZp4buHYy5cbiIKKyN+ICJjaOG6oXkgbOG7h25oIFwiZ2l0IGdjXCIgbeG7mXQgY8OhY2ggdGjhu6cgY8O0bmcuIEjDo3kgeGVtIFwiZ2l0IGhlbHAgZ2NcIiDEkeG7gyBiaeG6v3QgIgorI34gInRow6ptIGNoaSB0aeG6v3QuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgYSBwdXNoZWQgYnJhbmNoIHRpcCBpcyBiZWhpbmQgaXRzIHJlbW90ZVxuIgorI34gImNvdW50ZXJwYXJ0LiBJZiB5b3UgZGlkIG5vdCBpbnRlbmQgdG8gcHVzaCB0aGF0IGJyYW5jaCwgeW91IG1heSB3YW50IHRvXG4iCisjfiAic3BlY2lmeSBicmFuY2hlcyB0byBwdXNoIG9yIHNldCB0aGUgJ3B1c2guZGVmYXVsdCcgY29uZmlndXJhdGlvbiAiCisjfiAidmFyaWFibGVcbiIKKyN+ICJ0byAnc2ltcGxlJywgJ2N1cnJlbnQnIG9yICd1cHN0cmVhbScgdG8gcHVzaCBvbmx5IHRoZSBjdXJyZW50IGJyYW5jaC4iCisjfiBtc2dzdHIgIiIKKyN+ICJWaeG7h2MgY+G6rXAgbmjhuq10IGLhu4sgdOG7qyBjaOG7kWkgYuG7n2kgdsOsIMSR4bqndSBtw7p0IGPhu6dhIG5ow6FuaCDEkcaw4bujYyBwdXNoIG7hurFtIMSR4bqxbmcgc2F1ICIKKyN+ICJi4buZXG4iCisjfiAicGjhuq1uIHTGsMahbmcg4bupbmcgY+G7p2EgbcOheSBjaOG7py4gTuG6v3UgYuG6oW4ga2jDtG5nIGPDsyDDvSDEkeG7i25oIHB1c2ggbmjDoW5oIMSRw7MsIGLhuqFuIGPDsyAiCisjfiAibOG6vSBtdeG7kW5cbiIKKyN+ICJjaOG7iSDEkeG7i25oIGPDoWMgbmjDoW5oIMSR4buDIHB1c2ggaG/hurd0IGzDoCDEkeG6t3QgbuG7mWkgZHVuZyBjaG8gYmnhur9uIGPhuqV1IGjDrG5oIOKAnHB1c2guIgorI34gImRlZmF1bHTigJ1cbiIKKyN+ICJ0aMOgbmgg4oCcc2ltcGxl4oCdLCDigJxjdXJyZW504oCdIGhv4bq3YyDigJx1cHN0cmVhbeKAnSDEkeG7gyBjaOG7iSBwdXNoIG5ow6FuaCBoaeG7h24gaMOgbmggbcOgICIKKyN+ICJ0aMO0aS4iCisKKyN+IG1zZ2lkICJjb3BpZWQ6ICAgICAlcyAtPiAlcyIKKyN+IG1zZ3N0ciAixJHDoyBzYW8gY2jDqXA6ICAgJXMgLT4gJXMiCisKKyN+IG1zZ2lkICJkZWxldGVkOiAgICAlcyIKKyN+IG1zZ3N0ciAixJHDoyB4w7NhOiAgICAgICAgJXMiCisKKyN+IG1zZ2lkICJtb2RpZmllZDogICAlcyIKKyN+IG1zZ3N0ciAixJHDoyBz4butYSDEkeG7lWk6ICAgICVzIgorCisjfiBtc2dpZCAicmVuYW1lZDogICAgJXMgLT4gJXMiCisjfiBtc2dzdHIgIsSRw6MgxJHhu5VpIHTDqm46ICAgICVzIC0+ICVzIgorCisjfiBtc2dpZCAidW5tZXJnZWQ6ICAgJXMiCisjfiBtc2dzdHIgImNoxrBhIGjDsmEgdHLhu5luOiAlcyIKKworI34gbXNnaWQgImlucHV0IHBhdGhzIGFyZSB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBjaGFyYWN0ZXIiCisjfiBtc2dzdHIgImPDoWMgxJHGsOG7nW5nIGThuqtuIMSRxrDhu6NjICBuZ8SDbiBjw6FjaCBi4bufaSBrw70gdOG7sSBudWxsIgorCisjfiBtc2dpZCAiIgorI34gIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIGZpbGVzIHdvdWxkIE5PVCBiZSBzYXZlZCBidXQgbmVlZCB0byBiZSByZW1vdmVkICIKKyN+ICJieSBzdGFzaCBzYXZlOiIKKyN+IG1zZ3N0ciAiIgorI34gIkPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aSBzYXUgxJHDonkgS0jDlE5HIMSRxrDhu6NjIGdoaSBs4bqhaSBuaMawbmcgY+G6p24gxJHGsOG7o2MgIgorI34gImfhu6EgYuG7jyBi4bufaSB2aeG7h2MgZ2hpIGzhuqFpIHN0YXNoOiIKKworI34gbXNnaWQgIiIKKyN+ICJBYm9ydGluZy4gQ29uc2lkZXIgdXNpbmcgZWl0aGVyIHRoZSAtLWZvcmNlIG9yIC0taW5jbHVkZS11bnRyYWNrZWQgb3B0aW9uLiIKKyN+IG1zZ3N0ciAiIgorI34gIkLDo2kgYuG7jy4gQ8OibiBuaOG6r2MgZMO5bmcgbeG7mXQgdHJvbmcgaGFpIHTDuXkgY2jhu41uIC0tZm9yY2UgdsOgIC0taW5jbHVkZS0iCisjfiAidW50cmFja2VkLiIKKworI34gbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tcmVzb2x2ZWRcIikiCisjfiBtc2dzdHIgIiAgKHPhu61hIGPDoWMgeHVuZyDEkeG7mXQgdsOgIHNhdSDEkcOzIGNo4bqheSBs4buHbmggXCJnaXQgYW0gLS1yZXNvbHZlZFwiKSIKKworI34gbXNnaWQgIiAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biBcImdpdCBjb21taXRcIikiCisjfiBtc2dzdHIgIiAgKGtoaSB04bqldCBj4bqjIGPDoWMgeHVuZyDEkeG7mXQgxJHDoyBz4butYSB4b25nOiBjaOG6oXkgbOG7h25oIFwiZ2l0IGNvbW1pdFwiKSIKKworI34gbXNnaWQgIm1vcmUgdGhhbiAlZCB0cmVlcyBnaXZlbjogJyVzJyIKKyN+IG1zZ3N0ciAixJHDoyBjaOG7iSByYSBuaGnhu4F1IGjGoW4gJWQgY8OieSAodHJlZSk6IOKAnCVz4oCdIgorCisjfiBtc2dpZCAiWW91IGNhbm5vdCBjb21iaW5lIC0tbm8tZmYgd2l0aCAtLWZmLW9ubHkuIgorI34gbXNnc3RyICJC4bqhbiBraMO0bmcgdGjhu4Mga+G6v3QgaOG7o3AgLS1uby1mZiB24bubaSAtLWZmLW9ubHkuIgorCisjfiBtc2dpZCAiIgorI34gInN1Ym1vZHVsZSAnJXMnIChvciBvbmUgb2YgaXRzIG5lc3RlZCBzdWJtb2R1bGVzKSB1c2VzIGEgLmdpdCBkaXJlY3RvcnlcbiIKKyN+ICIodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgIgorI34gImhpc3RvcnkpIgorI34gbXNnc3RyICIiCisjfiAibcO0LcSRdW4tY29uIOKAnCVz4oCdIChob+G6t2MgY8OhaSBu4bqxbSB0cm9uZyBjw6FjIG3DtC3EkXVuLWNvbikgZMO5bmcgdGjGsCBt4bulYyAuZ2l0XG4iCisjfiAiKGTDuW5nIOKAnHJtIC1yZuKAnSBu4bq/dSBi4bqhbiB0aOG7sWMgc+G7sSBtdeG7kW4gZ+G7oSBi4buPIG7DsyBjw7luZyB24bubaSB04bqldCBj4bqjIGzhu4tjaCBz4butIGPhu6dhICIKKyN+ICJjaMO6bmcpIgorCisjfiBtc2dpZCAiIgorI34gIiclcycgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleFxuIgorI34gIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCisjfiBtc2dzdHIgIiIKKyN+ICLigJwlc+KAnSBjw7MgY8OhYyB0aGF5IMSR4buVaSDEkcaw4bujYyBsxrB1IHRy4bqhbmcgdGjDoWkgdHJvbmcgYuG6o25nIG3hu6VjIGzhu6VjXG4iCisjfiAiKGTDuW5nIHTDuXkgY2jhu41uIC0tY2FjaGVkIMSR4buDIGdp4buvIHThuq1wIHRpbiwgaG/hurdjIC1mIMSR4buDIMOpcCBideG7mWMgZ+G7oSBi4buPKSIKKworI34gbXNnaWQgInNob3cgY29tbWl0cyB3aGVyZSBubyBwYXJlbnQgY29tZXMgYmVmb3JlIGl0cyBjaGlsZHJlbiIKKyN+IG1zZ3N0ciAiaGnhu4NuIHRo4buLIGPDoWMgbOG6p24gY2h1eeG7g24gZ2lhbyBuxqFpIG3DoCBjaGEgbeG6uSDEkeG6v24gdHLGsOG7m2MgY29uIGPhu6dhIG7DsyIKKworI34gbXNnaWQgInNob3cgdGhlIEhFQUQgcmVmZXJlbmNlIgorI34gbXNnc3RyICJoaeG7g24gdGjhu4sgdGhhbSBjaGnhur91IGPhu6dhIEhFQUQiCisKKyN+IG1zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRwcmVmaXgkc21fcGF0aCciCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyBs4bqleSB24buBIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJHByZWZpeCRzbV9wYXRo4oCdIgorCisjfiBtc2dpZCAiRmFpbGVkIHRvIHJlY3Vyc2UgaW50byBzdWJtb2R1bGUgcGF0aCAnJHByZWZpeCRzbV9wYXRoJyIKKyN+IG1zZ3N0ciAiR+G6t3AgbOG7l2kga2hpIMSR4buHIHF1eSB2w6BvIHRyb25nIMSRxrDhu51uZyBk4bqrbiBtw7QtxJF1bi1jb24g4oCcJHByZWZpeCRzbV9wYXRo4oCdIgorCisjfiBtc2dpZCAiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gICdzdGF0dXMgLXVubyciCisjfiBtc2dzdHIgIkPhuqduICUuMmYgZ2nDonkgxJHhu4MgxJHhur9tIGPDoWMgdOG6rXAgdGluIGNoxrBhIMSRxrDhu6NjIHRoZW8gZMO1aS4gIOKAnHN0YXR1cyAtdW5v4oCdIgorCisjfiBtc2dpZCAibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZCIKKyN+IG1zZ3N0ciAiIgorI34gImPDsyB0aOG7gyBsw6BtIG7DsyBuaGFuaCBsw6puLCBuaMawbmcgYuG6oW4gcGjhuqNpIGPhuqluIHRy4buNbmcgxJHhu6tuZyBxdcOqbiB0aMOqbSBuw7MgdsOgbyIKKworI34gbXNnaWQgIm5ldyBmaWxlcyB5b3Vyc2VsZiAoc2VlICdnaXQgaGVscCBzdGF0dXMnKS4iCisjfiBtc2dzdHIgInThuq1wIHRpbiBt4bubaSBj4bunYSBjaMOtbmggYuG6oW4gKHhlbSDigJxnaXQgaGVscCBzdGF0dXPigJ0uLiIKKworI34gbXNnaWQgImdpdCBzaG9ydGxvZyBbLW5dIFstc10gWy1lXSBbLXddIFtyZXYtb3B0c10gWy0tXSBbPGNvbW1pdC1pZD4uLi4gXSIKKyN+IG1zZ3N0ciAiZ2l0IHNob3J0bG9nIFstbl0gWy1zXSBbLWVdIFstd10gW3Jldi1vcHRzXSBbLS1dIFs8Y29tbWl0LWlkPuKApiBdIgorCisjfiBtc2dpZCAiU2VlICdnaXQgaGVscCA8Y29tbWFuZD4nIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4iCisjfiBtc2dzdHIgIiIKKyN+ICJDaOG6oXkgbOG7h25oIOKAnGdpdCBoZWxwIDx0w6puLWzhu4duaD7igJ0gxJHhu4MgY8OzIHRow6ptIHRow7RuZyB0aW4gduG7gSBs4buHbmggxJHGsOG7o2MgY2jhu4kgcmEuIgorCisjfiBtc2dpZCAidXNlIGFueSByZWYgaW4gLmdpdC9yZWZzIgorI34gbXNnc3RyICJz4butIGThu6VuZyBi4bqldCBr4buzIHJlZiBuw6BvIHRyb25nIC5naXQvcmVmcyIKKworI34gbXNnaWQgInVzZSBhbnkgdGFnIGluIC5naXQvcmVmcy90YWdzIgorI34gbXNnc3RyICJz4butIGThu6VuZyBi4bqldCBr4buzIHRo4bq7IG7DoG8gdHJvbmcgLmdpdC9yZWZzL3RhZ3MiCisKKyN+IG1zZ2lkICJiYWQgb2JqZWN0ICVzIgorI34gbXNnc3RyICLEkeG7kWkgdMaw4bujbmcgc2FpICVzIgorCisjfiBtc2dpZCAiYm9ndXMgY29tbWl0dGVyIGluZm8gJXMiCisjfiBtc2dzdHIgInRow7RuZyB0aW4gbmfGsOG7nWkgY2h1eeG7g24gZ2lhbyBraMO0bmcgY8OzIHRo4buxYyAlcyIKKworI34gbXNnaWQgImNhbid0IGZkb3BlbiAnc2hvdycgb3V0cHV0IGZkIgorI34gbXNnc3RyICJraMO0bmcgdGjhu4MgZmRvcGVuIOKAnHNob3figJ0gKGzhu4duaCBoaeG7g24gdGjhu4spIG3DtCB04bqjIHThuq1wIHRpbiAoZmQpIGvhur90IHh14bqldCIKKworI34gbXNnaWQgImZhaWxlZCB0byBjbG9zZSBwaXBlIHRvICdzaG93JyBmb3Igb2JqZWN0ICclcyciCisjfiBtc2dzdHIgImfhurdwIGzhu5dpIGtoaSDEkcOzbmcgxJHGsOG7nW5nIOG7kW5nIGNobyBs4buHbmgg4oCcc2hvd+KAnSBjaG8gxJHhu5FpIHTGsOG7o25nIOKAnCVz4oCdIgorCisjfiBtc2dpZCAiWW91IGRvIG5vdCBoYXZlIGEgdmFsaWQgSEVBRCIKKyN+IG1zZ3N0ciAiQuG6oW4ga2jDtG5nIGPDsyBIRUFEIG7DoG8gaOG7o3AgbOG7hyIKKworI34gbXNnaWQgIm9vcHMiCisjfiBtc2dzdHIgIsO0aT8iCisKKyN+IG1zZ2lkICJXb3VsZCBub3QgcmVtb3ZlICVzXG4iCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyBn4buhIGLhu48gJXNcbiIKKworI34gbXNnaWQgIk5vdCByZW1vdmluZyAlc1xuIgorI34gbXNnc3RyICJLaMO0bmcgeMOzYSAlc1xuIgorCisjfiBtc2dpZCAiQ291bGQgbm90IHJlYWQgaW5kZXgiCisjfiBtc2dzdHIgIktow7RuZyB0aOG7gyDEkeG7jWMgYuG6o25nIG3hu6VjIGzhu6VjIgorCisjfiBtc2dpZCAiZ2l0IHJlbW90ZSBzZXQtaGVhZCA8bmFtZT4gKC1hIHwgLWQgfCA8YnJhbmNoPl0pIgorI34gbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDx0w6puPiAoLWEgfCAtZCB8IDxuaMOhbmg+XSkiCisKKyN+IG1zZ2lkICIgMCBmaWxlcyBjaGFuZ2VkIgorI34gbXNnc3RyICIgMCBjw7MgdOG6rXAgdGluIG7DoG8gdGhheSDEkeG7lWkgY+G6oyIKKworI34gbXNnaWQgIiAlZCBmaWxlIGNoYW5nZWQiCisjfiBtc2dpZF9wbHVyYWwgIiAlZCBmaWxlcyBjaGFuZ2VkIgorI34gbXNnc3RyWzBdICIgJWQgdOG6rXAgdGluIHRoYXkgxJHhu5VpIgorCisjfiBtc2dpZCAiLCAlZCBpbnNlcnRpb24oKykiCisjfiBtc2dpZF9wbHVyYWwgIiwgJWQgaW5zZXJ0aW9ucygrKSIKKyN+IG1zZ3N0clswXSAiLCAlZCB0aMOqbSgrKSIKKworI34gbXNnaWQgIiwgJWQgZGVsZXRpb24oLSkiCisjfiBtc2dpZF9wbHVyYWwgIiwgJWQgZGVsZXRpb25zKC0pIgorI34gbXNnc3RyWzBdICIsICVkIHjDs2EoLSkiCisKKyN+IG1zZ2lkICIgKHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaykiCisjfiBtc2dzdHIgIiAoZMO5bmcgXCJnaXQgYWRkXCIgxJHhu4MgdGhlbyBkw7VpIGThuqV1IHbhur90KSIKKworI34gbXNnaWQgIi0tZGV0YWNoIGNhbm5vdCBiZSB1c2VkIHdpdGggLWIvLUIvLS1vcnBoYW4iCisjfiBtc2dzdHIgIi0tZGV0YWNoIGtow7RuZyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSB0w7l5IGNo4buNbiAtYi8tQi8tLW9ycGhhbiIKKworI34gbXNnaWQgIi0tZGV0YWNoIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCisjfiBtc2dzdHIgIi0tZGV0YWNoIGtow7RuZyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSB0w7l5IGNo4buNbiAtdCIKKworI34gbXNnaWQgIi0tb3JwaGFuIGFuZCAtYnwtQiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIgorI34gbXNnc3RyICJUw7l5IGNo4buNbiAtLW9ycGhhbiB2w6AgLWJ8LUIgbG/huqFpIHThu6sgbOG6q24gbmhhdSIKKworI34gbXNnaWQgIi0tb3JwaGFuIGNhbm5vdCBiZSB1c2VkIHdpdGggLXQiCisjfiBtc2dzdHIgIi0tb3JwaGFuIGtow7RuZyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyB24bubaSB0w7l5IGNo4buNbiAtdCIKKworI34gbXNnaWQgImdpdCBjaGVja291dDogLWYgYW5kIC1tIGFyZSBpbmNvbXBhdGlibGUiCisjfiBtc2dzdHIgImdpdCBjaGVja291dDogaGFpIHTDuXkgY2jhu41uIC1mIHbDoCAtbSB4dW5nIGto4bqvYyBuaGF1IgorCisjfiBtc2dpZCAiIgorI34gImdpdCBjaGVja291dDogdXBkYXRpbmcgcGF0aHMgaXMgaW5jb21wYXRpYmxlIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzLiIKKyN+IG1zZ3N0ciAiIgorI34gImdpdCBjaGVja291dDogdmnhu4djIGPhuq1wIG5o4bqtdCBjw6FjIMSRxrDhu51uZyBk4bqrbiBsw6AgeHVuZyBraOG6r2MgduG7m2kgdmnhu4djIGNodXnhu4NuICIKKyN+ICLEkeG7lWkgY8OhYyBuaMOhbmguIgorCisjfiBtc2dpZCAiZGlmZiBzZXR1cCBmYWlsZWQiCisjfiBtc2dzdHIgImPDoGkgxJHhurd0IGRpZmYgZ+G6t3AgbOG7l2kiCisKKyN+IG1zZ2lkICJtZXJnZS1yZWN1cnNpdmU6IGRpc2sgZnVsbD8iCisjfiBtc2dzdHIgIm1lcmdlLXJlY3Vyc2l2ZTogxJHEqWEgYuG7iyDEkeG6p3k/IgorCisjfiBtc2dpZCAiZGlmZl9zZXR1cF9kb25lIGZhaWxlZCIKKyN+IG1zZ3N0ciAiZGlmZl9zZXR1cF9kb25lIGfhurdwIGzhu5dpIgorCisjfiBtc2dpZCAiLWQgb3B0aW9uIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBEbyBub3QgdXNlLiIKKyN+IG1zZ3N0ciAiVMO5eSBjaOG7jW4gLWQga2jDtG5nIGPDsm4gxJHGsOG7o2MgaOG7lyB0cuG7oyBu4buvYS4gWGluIMSR4burbmcgc+G7rSBk4bulbmcuIgorCisjfiBtc2dpZCAiJXM6IGhhcyBiZWVuIGRlbGV0ZWQvcmVuYW1lZCIKKyN+IG1zZ3N0ciAiJXM6IMSRw6MgxJHGsOG7o2MgeMOzYS90aGF5LXTDqm4iCisKKyN+IG1zZ2lkICInJXMnOiBub3QgYSBkb2N1bWVudGF0aW9uIGRpcmVjdG9yeS4iCisjfiBtc2dzdHIgIuKAnSVz4oCdOiBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCB0aMawIG3hu6VjIHTDoGkgbGnhu4d1LiIKKworI34gbXNnaWQgIi0tIgorI34gbXNnc3RyICItLSIKKworI34gbXNnaWQgIkNvdWxkIG5vdCBleHRyYWN0IGVtYWlsIGZyb20gY29tbWl0dGVyIGlkZW50aXR5LiIKKyN+IG1zZ3N0ciAiIgorI34gIktow7RuZyB0aOG7gyByw7p0IHRyw61jaCDEkeG7i2EgY2jhu4kgdGjGsCDEkWnhu4duIHThu60gdOG7qyDEkeG7i25oIGRhbmggbmfGsOG7nWkgY2h1eeG7g24gZ2lhbyIKKworI34gbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXNcbiIKKyN+IG1zZ3N0ciAia2jDtG5nIHRo4buDIHBow6JuIHTDrWNoIGNvbW1pdCAobOG6p24gY2h1eeG7g24gZ2lhbykgJXNcbiIKZGlmZiAtLWdpdCBhL3BvL3poX0NOLnBvIGIvcG8vemhfQ04ucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNkYWE3ZQotLS0gL2Rldi9udWxsCisrKyBiL3BvL3poX0NOLnBvCkBAIC0wLDAgKzEsMTE4NjEgQEAKKyMgQ2hpbmVzZSB0cmFuc2xhdGlvbnMgZm9yIEdpdCBwYWNrYWdlCisjIEdpdCDova/ku7bljIXnmoTnroDkvZPkuK3mlofnv7vor5EuCisjIENvcHlyaWdodCAoQykgMjAxMiwyMDEzIEppYW5nIFhpbiA8d29ybGRoZWxsby5uZXQgQVQgZ21haWwuY29tPgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgR2l0IHBhY2thZ2UuCisjIENvbnRyaWJ1dG9yczoKKyMgICAtIEppYW5nIFhpbiA8d29ybGRoZWxsby5uZXQgQVQgZ21haWwuY29tPgorIyAgIC0gTGlhbiBDaGVuZyA8cmh5dGhtLm1haWwgQVQgZ21haWwuY29tPgorIyAgIC0gUmF5IENoZW4gPG9sZHNoYXJwIEFUIGdtYWlsLmNvbT4KKyMgICAtIFJpa3UgPGx1LnJpa3UgQVQgZ21haWwuY29tPgorIyAgIC0gVGh5bnNvbiA8bGFueGluZ2NhbiBBVCBnbWFpbC5jb20+CisjICAgLSB3czMzODkgPHdpbGxzbWl0aDMzODkgQVQgZ21haWwuY29tPgorIyAgIC0gV2FuZyBTaGVuZyA8d2FuZ3NoZW5nMjAwOGxvdmUgQVQgMTYzLmNvbT4KKyMgICAtIFlpY2hhbyBZdSA8eXljMTk5MiBBVCBnbWFpbC5jb20+CisjICAgLSBaaHVhbmcgWWEgPHpodWFuZ3lhIEFUIG1lLmNvbT4KKyMKKyMgIEdpdCBnbG9zc2FyeSBmb3IgQ2hpbmVzZSB0cmFuc2xhdG9ycworIworIyAgIEVuZ2xpc2ggICAgICAgICAgICAgICAgICAgICAgICAgIHwgIENoaW5lc2UKKyMgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgICAzLXdheSBtZXJnZSAgICAgICAgICAgICAgICAgICAgICB8ICDkuInmlrnlkIjlubYKKyMgICBhYmJyZXZpYXRlICAgICAgICAgICAgICAgICAgICAgICB8ICDnroDlhpnvvIjnmoQgU0hBLTEg5YC877yJCisjICAgYWx0ZXJuYXRlIG9iamVjdCBkYXRhYmFzZSAgICAgICAgfCAg5aSH55So5a+56LGh5bqTCisjICAgYW1lbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5L+u6KGlCisjICAgYW5jZXN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgfCAg56WW5YWI77yM56WW5YWI5o+Q5LqkCisjICAgYW5ub3RhdGVkIHRhZyAgICAgICAgICAgICAgICAgICAgfCAg6ZmE5rOo5qCH562+CisjICAgYmFyZSByZXBvc2l0b3J5ICAgICAgICAgICAgICAgICAgfCAg57qv5LuT5bqTCisjICAgYmlzZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5LqM5YiG5p+l5om+CisjICAgYmxvYiBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgfCAg5pWw5o2u5a+56LGhCisjICAgYnJhbmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5YiG5pSvCisjICAgYnVuZGxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5YyFCisjICAgYnlwYXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg57uV6L+HCisjICAgY2FjaGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg57Si5byV77yI55qE5Yir56ew77yJCisjICAgY2hhaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg77yI5o+Q5Lqk77yJ6ZO+CisjICAgY2hhbmdlc2V0ICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y+Y5pu06ZuGCisjICAgY2hlY2tvdXQgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5qOA5Ye6CisjICAgY2hlY2tzdW0gICAgICAgICAgICAgICAgICAgICAgICAgfCAg5qCh6aqM77yM5qCh6aqM5ZKMCisjICAgY2hlcnJ5LXBpY2tpbmcgICAgICAgICAgICAgICAgICAgfCAg5ouj6YCJCisjICAgY2xlYW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5bmy5YeA77yI55qE5bel5L2c5Yy677yJCisjICAgY2xvbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5YWL6ZqGCisjICAgY29tbWl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5o+Q5LqkCisjICAgY29tbWl0IG1lc3NhZ2UgICAgICAgICAgICAgICAgICAgfCAg5o+Q5Lqk6K+05piOCisjICAgY29tbWl0IG9iamVjdCAgICAgICAgICAgICAgICAgICAgfCAg5o+Q5Lqk5a+56LGhCisjICAgY29tbWl0LWlzaCAoYWxzbyBjb21taXR0aXNoKSAgICAgfCAg5o+Q5Lqk5Y+3CisjICAgY29uZmxpY3QgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Yay56qBCisjICAgY29yZSBHaXQgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5qC45b+DIEdpdCDlt6XlhbcKKyMgICBEQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmnInlkJHml6Dnjq/lm74KKyMgICBkYW5nbGluZyBvYmplY3QgICAgICAgICAgICAgICAgICB8ICDmkYfmkYblr7nosaEKKyMgICBkZXRhY2hlZCBIRUFEICAgICAgICAgICAgICAgICAgICB8ICDliIbnprvlpLTmjIfpkogKKyMgICBkaXJlY3RvcnkgICAgICAgICAgICAgICAgICAgICAgICB8ICDnm67lvZUKKyMgICBkaXJ0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDohI/vvIjnmoTlt6XkvZzljLrvvIkKKyMgICBkdW1iIEhUVFAgcHJvdG9jb2wgICAgICAgICAgICAgICB8ICDlk5EgSFRUUCDljY/orq4KKyMgICBldmlsIG1lcmdlICAgICAgICAgICAgICAgICAgICAgICB8ICDlnY/lkIjlubbvvIjlkIjlubblvJXlhaXkuobniLbmj5DkuqTmsqHmnInnmoTkv67mlLnvvIkKKyMgICBmYXN0LWZvcndhcmQgICAgICAgICAgICAgICAgICAgICB8ICDlv6vov5sKKyMgICBmZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDojrflj5YKKyMgICBmaWxlIHN5c3RlbSAgICAgICAgICAgICAgICAgICAgICB8ICDmlofku7bns7vnu58KKyMgICBmb3JrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICDmtL7nlJ8KKyMgICBHaXQgYXJjaGl2ZSAgICAgICAgICAgICAgICAgICAgICB8ICDku5PlupPvvIjlr7nkuo4gYXJjaCDnlKjmiLfvvIkKKyMgICBnaXRmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBnaXRmaWxl77yI5LuT5bqT6ZO+5o6l5paH5Lu277yJCisjICAgZ3JhZnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg77yI5o+Q5Lqk77yJ5auB5o6lCisjICAgaGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5ZOI5biM5YC8CisjICAgSEVBRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgSEVBRO+8iOWktOaMh+mSiO+8jOS6puWNs+W9k+WJjeWIhuaUr++8iQorIyAgIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWktOOAgeWIhuaUrworIyAgIGhlYWQgcmVmICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWIhuaUrworIyAgIGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWktOS/oeaBrworIyAgIGhvb2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOmSqeWtkAorIyAgIGh1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOihpeS4geeJh+autQorIyAgIGluZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOe0ouW8lQorIyAgIGluZGV4IGVudHJ5ICAgICAgICAgICAgICAgICAgICAgIHwgIOe0ouW8leadoeebrgorIyAgIGxvb3NlIG9iamVjdCAgICAgICAgICAgICAgICAgICAgIHwgIOadvuaVo+WvueixoQorIyAgIGxvb3NlIHJlZnMgICAgICAgICAgICAgICAgICAgICAgIHwgIOadvuaVo+W8leeUqAorIyAgIG1hc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG1hc3Rlcu+8iOm7mOiupOWIhuaUr+WQje+8iQorIyAgIG1lcmdlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWQiOW5tgorIyAgIG9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWvueixoQorIyAgIG9iamVjdCBkYXRhYmFzZSAgICAgICAgICAgICAgICAgIHwgIOWvueixoeW6kworIyAgIG9iamVjdCBpZGVudGlmaWVyICAgICAgICAgICAgICAgIHwgIOWvueixoeagh+ivhuespgorIyAgIG9iamVjdCBuYW1lICAgICAgICAgICAgICAgICAgICAgIHwgIOWvueixoeWQjeensAorIyAgIG9iamVjdCB0eXBlICAgICAgICAgICAgICAgICAgICAgIHwgIOWvueixoeexu+WeiworIyAgIG9jdG9wdXMgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeroOmxvOW8j+WQiOW5tu+8iOS4pOWIhuaUr+S7peS4iueahOWQiOW5tu+8iQorIyAgIG9yaWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG9yaWdpbu+8iOm7mOiupOeahOi/nOeoi+WQjeensO+8iQorIyAgIHBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWMhQorIyAgIHBhY2sgaW5kZXggICAgICAgICAgICAgICAgICAgICAgIHwgIOWMhee0ouW8lQorIyAgIHBhY2tmaWxlICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWMheaWh+S7tgorIyAgIHBhcmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeItuaPkOS6pAorIyAgIHBhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOihpeS4gQorIyAgIHBhdGhzcGVjICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOi3r+W+hOinhOagvAorIyAgIHBhdHRlcm4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaooeW8jworIyAgIHBpY2theGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOaMluaOmAorIyAgIHBsdW1iaW5nICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOeuoeS7tu+8iEdpdCDlupXlsYLmoLjlv4Plkb3ku6TnmoTliKvnp7DvvIkKKyMgICBwb3JjZWxhaW4gICAgICAgICAgICAgICAgICAgICAgICB8ICDnk7fku7bvvIhHaXQg5LiK5bGC5bCB6KOF5ZG95Luk55qE5Yir56ew77yJCisjICAgcHJ1bmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5riF6ZmkCisjICAgcHVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5ouJ77yM5ouJ5Y+WCisjICAgcHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5o6o77yM5o6o6YCBCisjICAgcmVhY2hhYmxlICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y+v6L6+CisjICAgcmViYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y+Y5Z+6CisjICAgcmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5byV55SoCisjICAgcmVmbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5byV55So5pel5b+XCisjICAgcmVmc3BlYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5byV55So6KeE5qC8CisjICAgcmVtb3RlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6L+c56iL77yM6L+c56iL5LuT5bqTCisjICAgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAgICAgICAgICAgfCAg6L+c56iL6Lef6Liq5YiG5pSvCisjICAgcmVwbGF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6YeN5pS+CisjICAgcmVwbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5LuT5bqTCisjICAgcmVwb3NpdG9yeSAgICAgICAgICAgICAgICAgICAgICAgfCAg5LuT5bqTCisjICAgcmVzb2x2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg77yI5Yay56qB77yJ6Kej5YazCisjICAgcmV2ZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6L+Y5Y6fCisjICAgcmV2aXNpb24gICAgICAgICAgICAgICAgICAgICAgICAgfCAg54mI5pysCisjICAgcmV3aW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Zue6YCACisjICAgU0NNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5rqQ5Luj56CB566h55CG77yI5bel5YW377yJCisjICAgU0hBLTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgU0hBLTHvvIjlronlhajlk4jluIznrpfms5Ux77yJCisjICAgc2hhbGxvdyByZXBvc2l0b3J5ICAgICAgICAgICAgICAgfCAg5rWF77yI5YWL6ZqG77yJ5LuT5bqTCisjICAgc2lnbmVkIHRhZyAgICAgICAgICAgICAgICAgICAgICAgfCAg562+5ZCN5qCH562+CisjICAgc21hcnQgSFRUUCBwcm90b2NvbCAgICAgICAgICAgICAgfCAg5pm66IO9IEhUVFAg5Y2P6K6uCisjICAgc3F1YXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y6L57ypCisjICAgc3RhZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgbi4g5pqC5a2Y5Yy677yI5Y2z57Si5byV77yJOyB2LiDmmoLlrZgKKyMgICBzdGFzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBuLiDov5vluqbkv53lrZg7IHYuIOS/neWtmOi/m+W6pgorIyAgIHN1Ym1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgIHwgIOWtkOaooee7hAorIyAgIHN5bXJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIOespuWPt+W8leeUqAorIyAgIHRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIG4uIOagh+etvjsgdi4g5omT5qCH562+CisjICAgdGFnIG9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgfCAg5qCH562+5a+56LGhCisjICAgdGFnZ2VyICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5omT5qCH562+6ICFCisjICAgdG9waWMgYnJhbmNoICAgICAgICAgICAgICAgICAgICAgfCAg5Li76aKY5YiG5pSvCisjICAgdHJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6Lef6LiqCisjICAgdHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5qCR77yI5bel5L2c5Yy65oiW5qCR5a+56LGh77yJCisjICAgdHJlZSBvYmplY3QgICAgICAgICAgICAgICAgICAgICAgfCAg5qCR5a+56LGhCisjICAgdHJlZS1pc2ggKGFsc28gdHJlZWlzaCkgICAgICAgICAgfCAg5qCR5a+56LGh77yI5oiW5Y+v5Lul6Kej5p6Q5Li65LiA5qCR5a+56LGh77yJCisjICAgdW5tZXJnZWQgaW5kZXggICAgICAgICAgICAgICAgICAgfCAg5pyq5ZCI5bm257Si5byVCisjICAgdW5wYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg6Kej5YyFCisjICAgdW5yZWFjaGFibGUgb2JqZWN0ICAgICAgICAgICAgICAgfCAg5LiN5Y+v6L6+5a+56LGhCisjICAgdW5zdGFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg5Y+W5raI5pqC5a2YCisjICAgdXBzdHJlYW0gICAgICAgICAgICAgICAgICAgICAgICAgfCAg5LiK5ri4CisjICAgdXBzdHJlYW0gYnJhbmNoICAgICAgICAgICAgICAgICAgfCAg5LiK5ri45YiG5pSvCisjICAgd29ya2luZyB0cmVlICAgICAgICAgICAgICAgICAgICAgfCAg5bel5L2c5Yy6CisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBHaXRcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogR2l0IE1haWxpbmcgTGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz5cbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxNS0wOS0xNSAwNjo0NSswODAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAxNS0wOS0xNSAyMTo0OSswODAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBKaWFuZyBYaW4gPHdvcmxkaGVsbG8ubmV0QGdtYWlsLmNvbT5cbiIKKyJMYW5ndWFnZS1UZWFtOiBHaXRIdWIgPGh0dHBzOi8vZ2l0aHViLmNvbS9qaWFuZ3hpbi9naXQvPlxuIgorIkxhbmd1YWdlOiB6aF9DTlxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04XG4iCisiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdFxuIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorCisjOiBhZHZpY2UuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJoaW50OiAlLipzXG4iCittc2dzdHIgIuaPkOekuu+8miUuKnNcbiIKKworIzogYWR2aWNlLmM6ODgKK21zZ2lkICIiCisiRml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgorbXNnc3RyICIiCisi6K+35Zyo5bel5L2c5Yy65pS55q2j5paH5Lu277yM54S25ZCO6YWM5oOF5L2/55SoICdnaXQgYWRkL3JtIDzmlofku7Y+JyDlkb3ku6TmoIforrBcbiIKKyLop6PlhrPmlrnmoYjlubbmj5DkuqTjgIIiCisKKyM6IGFkdmljZS5jOjEwMSBidWlsdGluL21lcmdlLmM6MTIyNworbXNnaWQgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSAoTUVSR0VfSEVBRCBleGlzdHMpLiIKK21zZ3N0ciAi5oKo5bCa5pyq57uT5p2f5oKo55qE5ZCI5bm277yI5a2Y5ZyoIE1FUkdFX0hFQUTvvInjgIIiCisKKyM6IGFkdmljZS5jOjEwMworbXNnaWQgIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBiZWZvcmUgeW91IGNhbiBtZXJnZS4iCittc2dzdHIgIuivt+WcqOWQiOW5tuWJjeWFiOaPkOS6pOaCqOeahOS/ruaUueOAgiIKKworIzogYWR2aWNlLmM6MTA0Cittc2dpZCAiRXhpdGluZyBiZWNhdXNlIG9mIHVuZmluaXNoZWQgbWVyZ2UuIgorbXNnc3RyICLlm6DkuLrlrZjlnKjmnKrlrozmiJDnmoTlkIjlubbogIzpgIDlh7rjgIIiCisKKyM6IGFyY2hpdmUuYzoxMgorbXNnaWQgImdpdCBhcmNoaXZlIFs8b3B0aW9ucz5dIDx0cmVlLWlzaD4gWzxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBhcmNoaXZlIFs86YCJ6aG5Pl0gPOagkeaIluaPkOS6pD4gWzzot6/lvoQ+Li4uXSIKKworIzogYXJjaGl2ZS5jOjEzCittc2dpZCAiZ2l0IGFyY2hpdmUgLS1saXN0IgorbXNnc3RyICJnaXQgYXJjaGl2ZSAtLWxpc3QiCisKKyM6IGFyY2hpdmUuYzoxNAorbXNnaWQgIiIKKyJnaXQgYXJjaGl2ZSAtLXJlbW90ZSA8cmVwbz4gWy0tZXhlYyA8Y21kPl0gWzxvcHRpb25zPl0gPHRyZWUtaXNoPiBbPHBhdGg+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBhcmNoaXZlIC0tcmVtb3RlIDzku5PlupM+IFstLWV4ZWMgPOWRveS7pD5dIFs86YCJ6aG5Pl0gPOagkeaIluaPkOS6pD4gWzzot6/lvoQ+Li4uXSIKKworIzogYXJjaGl2ZS5jOjE1Cittc2dpZCAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPHJlcG8+IFstLWV4ZWMgPGNtZD5dIC0tbGlzdCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmUgLS1yZW1vdGUgPOS7k+W6kz4gWy0tZXhlYyA85ZG95LukPl0gLS1saXN0IgorCisjOiBhcmNoaXZlLmM6MzQzIGJ1aWx0aW4vYWRkLmM6MTM3IGJ1aWx0aW4vYWRkLmM6NDI2IGJ1aWx0aW4vcm0uYzozMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aHNwZWMgJyVzJyBkaWQgbm90IG1hdGNoIGFueSBmaWxlcyIKK21zZ3N0ciAi6Lev5b6E6KeE5qC8ICclcycg5pyq5Yy56YWN5Lu75L2V5paH5Lu2IgorCisjOiBhcmNoaXZlLmM6NDI4Cittc2dpZCAiZm10IgorbXNnc3RyICLmoLzlvI8iCisKKyM6IGFyY2hpdmUuYzo0MjgKK21zZ2lkICJhcmNoaXZlIGZvcm1hdCIKK21zZ3N0ciAi5b2S5qGj5qC85byPIgorCisjOiBhcmNoaXZlLmM6NDI5IGJ1aWx0aW4vbG9nLmM6MTIyOQorbXNnaWQgInByZWZpeCIKK21zZ3N0ciAi5YmN57yAIgorCisjOiBhcmNoaXZlLmM6NDMwCittc2dpZCAicHJlcGVuZCBwcmVmaXggdG8gZWFjaCBwYXRobmFtZSBpbiB0aGUgYXJjaGl2ZSIKK21zZ3N0ciAi5Li65b2S5qGj5Lit5q+P5Liq6Lev5b6E5ZCN5Yqg5LiK5YmN57yAIgorCisjOiBhcmNoaXZlLmM6NDMxIGJ1aWx0aW4vYXJjaGl2ZS5jOjg4IGJ1aWx0aW4vYmxhbWUuYzoyNTE2CisjOiBidWlsdGluL2JsYW1lLmM6MjUxNyBidWlsdGluL2NvbmZpZy5jOjU4IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODcKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODkgYnVpbHRpbi9ncmVwLmM6NzEyIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5OQorIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0NiBidWlsdGluL2xzLWZpbGVzLmM6NDQ5IGJ1aWx0aW4vbm90ZXMuYzozOTUKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NTggYnVpbHRpbi9yZWFkLXRyZWUuYzoxMDkgcGFyc2Utb3B0aW9ucy5oOjE1MworbXNnaWQgImZpbGUiCittc2dzdHIgIuaWh+S7tiIKKworIzogYXJjaGl2ZS5jOjQzMiBidWlsdGluL2FyY2hpdmUuYzo4OQorbXNnaWQgIndyaXRlIHRoZSBhcmNoaXZlIHRvIHRoaXMgZmlsZSIKK21zZ3N0ciAi5b2S5qGj5YaZ5YWl5q2k5paH5Lu2IgorCisjOiBhcmNoaXZlLmM6NDM0Cittc2dpZCAicmVhZCAuZ2l0YXR0cmlidXRlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi6K+75Y+W5bel5L2c5Yy65Lit55qEIC5naXRhdHRyaWJ1dGVzIgorCisjOiBhcmNoaXZlLmM6NDM1Cittc2dpZCAicmVwb3J0IGFyY2hpdmVkIGZpbGVzIG9uIHN0ZGVyciIKK21zZ3N0ciAi5Zyo5qCH5YeG6ZSZ6K+v5LiK5oql5ZGK5b2S5qGj5paH5Lu2IgorCisjOiBhcmNoaXZlLmM6NDM2Cittc2dpZCAic3RvcmUgb25seSIKK21zZ3N0ciAi5Y+q5a2Y5YKoIgorCisjOiBhcmNoaXZlLmM6NDM3Cittc2dpZCAiY29tcHJlc3MgZmFzdGVyIgorbXNnc3RyICLljovnvKnpgJ/luqbmm7Tlv6siCisKKyM6IGFyY2hpdmUuYzo0NDUKK21zZ2lkICJjb21wcmVzcyBiZXR0ZXIiCittc2dzdHIgIuWOi+e8qeaViOaenOabtOWlvSIKKworIzogYXJjaGl2ZS5jOjQ0OAorbXNnaWQgImxpc3Qgc3VwcG9ydGVkIGFyY2hpdmUgZm9ybWF0cyIKK21zZ3N0ciAi5YiX5Ye65pSv5oyB55qE5b2S5qGj5qC85byPIgorCisjOiBhcmNoaXZlLmM6NDUwIGJ1aWx0aW4vYXJjaGl2ZS5jOjkwIGJ1aWx0aW4vY2xvbmUuYzo3NworbXNnaWQgInJlcG8iCittc2dzdHIgIuS7k+W6kyIKKworIzogYXJjaGl2ZS5jOjQ1MSBidWlsdGluL2FyY2hpdmUuYzo5MQorbXNnaWQgInJldHJpZXZlIHRoZSBhcmNoaXZlIGZyb20gcmVtb3RlIHJlcG9zaXRvcnkgPHJlcG8+IgorbXNnc3RyICLku47ov5znqIvku5PlupPvvIg85LuT5bqTPu+8ieaPkOWPluW9kuaho+aWh+S7tiIKKworIzogYXJjaGl2ZS5jOjQ1MiBidWlsdGluL2FyY2hpdmUuYzo5MiBidWlsdGluL25vdGVzLmM6NDc5Cittc2dpZCAiY29tbWFuZCIKK21zZ3N0ciAi5ZG95LukIgorCisjOiBhcmNoaXZlLmM6NDUzIGJ1aWx0aW4vYXJjaGl2ZS5jOjkzCittc2dpZCAicGF0aCB0byB0aGUgcmVtb3RlIGdpdC11cGxvYWQtYXJjaGl2ZSBjb21tYW5kIgorbXNnc3RyICLov5znqIsgZ2l0LXVwbG9hZC1hcmNoaXZlIOWRveS7pOeahOi3r+W+hCIKKworIzogYXR0ci5jOjI2NQorbXNnaWQgIiIKKyJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCBpbiBnaXQgYXR0cmlidXRlc1xuIgorIlVzZSAnXFwhJyBmb3IgbGl0ZXJhbCBsZWFkaW5nIGV4Y2xhbWF0aW9uLiIKK21zZ3N0ciAiIgorIui0n+WAvOaooeeJiOWcqCBnaXQgYXR0cmlidXRlcyDkuK3ooqvlv73nlaVcbiIKKyLlvZPlrZfnrKbkuLLnoa7lrp7opoHku6XmhJ/lj7nlj7flvIDlp4vml7bvvIzkvb/nlKggJ1xcISfjgIIiCisKKyM6IGJyYW5jaC5jOjYwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBzZXR0aW5nIGJyYW5jaCAlcyBhcyBpdHMgb3duIHVwc3RyZWFtLiIKK21zZ3N0ciAi5pyq6K6+572u5YiG5pSvICVzIOS9nOS4uuWug+iHquW3seeahOS4iua4uOOAgiIKKworIzogYnJhbmNoLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICLliIbmlK8gJTEkcyDorr7nva7kuLrkvb/nlKjlj5jln7rmnaXot5/ouKrmnaXoh6ogJTMkcyDnmoTov5znqIvliIbmlK8gJTIkc+OAgiIKKworIzogYnJhbmNoLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayByZW1vdGUgYnJhbmNoICVzIGZyb20gJXMuIgorbXNnc3RyICLliIbmlK8gJTEkcyDorr7nva7kuLrot5/ouKrmnaXoh6ogJTMkcyDnmoTov5znqIvliIbmlK8gJTIkc+OAgiIKKworIzogYnJhbmNoLmM6ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQnJhbmNoICVzIHNldCB1cCB0byB0cmFjayBsb2NhbCBicmFuY2ggJXMgYnkgcmViYXNpbmcuIgorbXNnc3RyICLliIbmlK8gJXMg6K6+572u5Li65L2/55So5Y+Y5Z+65p2l6Lef6Liq5pys5Zyw5YiG5pSvICVz44CCIgorCisjOiBicmFuY2guYzo4OQorIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggJXMgc2V0IHVwIHRvIHRyYWNrIGxvY2FsIGJyYW5jaCAlcy4iCittc2dzdHIgIuWIhuaUryAlcyDorr7nva7kuLrot5/ouKrmnKzlnLDliIbmlK8gJXPjgIIiCisKKyM6IGJyYW5jaC5jOjk0CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAlcyBieSByZWJhc2luZy4iCittc2dzdHIgIuWIhuaUryAlcyDorr7nva7kuLrkvb/nlKjlj5jln7rmnaXot5/ouKrov5znqIvlvJXnlKggJXPjgIIiCisKKyM6IGJyYW5jaC5jOjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgcmVtb3RlIHJlZiAlcy4iCittc2dzdHIgIuWIhuaUryAlcyDorr7nva7kuLrot5/ouKrov5znqIvlvJXnlKggJXPjgIIiCisKKyM6IGJyYW5jaC5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICVzIGJ5IHJlYmFzaW5nLiIKK21zZ3N0ciAi5YiG5pSvICVzIOiuvue9ruS4uuS9v+eUqOWPmOWfuuadpei3n+i4quacrOWcsOW8leeUqCAlc+OAgiIKKworIzogYnJhbmNoLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAlcyBzZXQgdXAgdG8gdHJhY2sgbG9jYWwgcmVmICVzLiIKK21zZ3N0ciAi5YiG5pSvICVzIOiuvue9ruS4uui3n+i4quacrOWcsOW8leeUqCAlc+OAgiIKKworIzogYnJhbmNoLmM6MTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCB0cmFja2luZzogYW1iaWd1b3VzIGluZm9ybWF0aW9uIGZvciByZWYgJXMiCittc2dzdHIgIuacqui3n+i4qu+8muW8leeUqCAlcyDmnInmrafkuYkiCisKKyM6IGJyYW5jaC5jOjE2MgorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIGJyYW5jaCBuYW1lLiIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDkuKrmnInmlYjnmoTliIbmlK/lkI3np7DjgIIiCisKKyM6IGJyYW5jaC5jOjE2NworIywgYy1mb3JtYXQKK21zZ2lkICJBIGJyYW5jaCBuYW1lZCAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi5LiA5Liq5YiG5pSv5ZCNICclcycg5bey57uP5a2Y5Zyo44CCIgorCisjOiBicmFuY2guYzoxNzUKK21zZ2lkICJDYW5ub3QgZm9yY2UgdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuaXoOazleW8uuWItuabtOaWsOW9k+WJjeWIhuaUr+OAgiIKKworIzogYnJhbmNoLmM6MTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBzZXR1cCB0cmFja2luZyBpbmZvcm1hdGlvbjsgc3RhcnRpbmcgcG9pbnQgJyVzJyBpcyBub3QgYSBicmFuY2guIgorbXNnc3RyICLml6Dms5Xorr7nva7ot5/ouKrkv6Hmga/vvJvotbflp4vngrkgJyVzJyDkuI3mmK/kuIDkuKrliIbmlK/jgIIiCisKKyM6IGJyYW5jaC5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgcmVxdWVzdGVkIHVwc3RyZWFtIGJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLor7fmsYLnmoTkuIrmuLjliIbmlK8gJyVzJyDkuI3lrZjlnKgiCisKKyM6IGJyYW5jaC5jOjE5OQorbXNnaWQgIiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIG9uIGJhc2luZyB5b3VyIHdvcmsgb24gYW4gdXBzdHJlYW1cbiIKKyJicmFuY2ggdGhhdCBhbHJlYWR5IGV4aXN0cyBhdCB0aGUgcmVtb3RlLCB5b3UgbWF5IG5lZWQgdG9cbiIKKyJydW4gXCJnaXQgZmV0Y2hcIiB0byByZXRyaWV2ZSBpdC5cbiIKKyJcbiIKKyJJZiB5b3UgYXJlIHBsYW5uaW5nIHRvIHB1c2ggb3V0IGEgbmV3IGxvY2FsIGJyYW5jaCB0aGF0XG4iCisid2lsbCB0cmFjayBpdHMgcmVtb3RlIGNvdW50ZXJwYXJ0LCB5b3UgbWF5IHdhbnQgdG8gdXNlXG4iCisiXCJnaXQgcHVzaCAtdVwiIHRvIHNldCB0aGUgdXBzdHJlYW0gY29uZmlnIGFzIHlvdSBwdXNoLiIKK21zZ3N0ciAiIgorIlxuIgorIuWmguaenOaCqOato+iuoeWIkuWfuuS6jui/nOeoi+S4gOS4queOsOWtmOeahOS4iua4uOWIhuaUr+W8gOWni+S9oOeahOW3peS9nO+8jFxuIgorIuaCqOWPr+iDvemcgOimgeaJp+ihjCBcImdpdCBmZXRjaFwiIOadpeiOt+WPluWIhuaUr+OAglxuIgorIlxuIgorIuWmguaenOaCqOato+iuoeWIkuaOqOmAgeS4gOS4quiDveS4juWvueW6lOi/nOeoi+WIhuaUr+W7uueri+i3n+i4queahOaWsOeahOacrOWcsOWIhuaUr++8jFxuIgorIuaCqOWPr+iDvemcgOimgeS9v+eUqCBcImdpdCBwdXNoIC11XCIg5o6o6YCB5YiG5pSv5bm26YWN572u5ZKM5LiK5ri455qE5YWz6IGU44CCIgorCisjOiBicmFuY2guYzoyNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGEgdmFsaWQgb2JqZWN0IG5hbWU6ICclcycuIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjnmoTlr7nosaHlkI3vvJonJXMn44CCIgorCisjOiBicmFuY2guYzoyNjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQW1iaWd1b3VzIG9iamVjdCBuYW1lOiAnJXMnLiIKK21zZ3N0ciAi5q2n5LmJ55qE5a+56LGh5ZCN77yaJyVzJ+OAgiIKKworIzogYnJhbmNoLmM6MjY4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhIHZhbGlkIGJyYW5jaCBwb2ludDogJyVzJy4iCittc2dzdHIgIuaXoOaViOeahOWIhuaUr+eCue+8miclcyfjgIIiCisKKyM6IGJyYW5jaC5jOjM5OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQgYXQgJyVzJyIKK21zZ3N0ciAiJyVzJyDlt7Lnu4/mo4Dlh7rliLAgJyVzJyIKKworIzogYnVuZGxlLmM6MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBsb29rIGxpa2UgYSB2MiBidW5kbGUgZmlsZSIKK21zZ3N0ciAiJyVzJyDkuI3lg4/mmK/kuIDkuKogdjIg54mI5pys55qE5YyF5paH5Lu2IgorCisjOiBidW5kbGUuYzo2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgaGVhZGVyOiAlcyVzICglZCkiCittc2dzdHIgIuacquiDveivhuWIq+eahOWMheWktO+8miVzJXMgKCVkKSIKKworIzogYnVuZGxlLmM6ODcgYnVpbHRpbi9jb21taXQuYzo3NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyIKK21zZ3N0ciAi5LiN6IO95omT5byAICclcyciCisKKyM6IGJ1bmRsZS5jOjEzOQorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgdGhlc2UgcHJlcmVxdWlzaXRlIGNvbW1pdHM6IgorbXNnc3RyICLku5PlupPkuK3nvLrlsJHov5nkupvlv4XlpIfnmoTmj5DkuqTvvJoiCisKKyM6IGJ1bmRsZS5jOjE2MyBzZXF1ZW5jZXIuYzo2MzYgc2VxdWVuY2VyLmM6MTA4MyBidWlsdGluL2JsYW1lLmM6MjcwOAorIzogYnVpbHRpbi9icmFuY2guYzo2NTIgYnVpbHRpbi9jb21taXQuYzoxMDQ0IGJ1aWx0aW4vbG9nLmM6MzM0CisjOiBidWlsdGluL2xvZy5jOjg1MCBidWlsdGluL2xvZy5jOjE0NTcgYnVpbHRpbi9sb2cuYzoxNjkwIGJ1aWx0aW4vbWVyZ2UuYzozNTgKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoxNTgKK21zZ2lkICJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIKK21zZ3N0ciAi54mI5pys6YGN5Y6G6K6+572u5aSx6LSlIgorCisjOiBidW5kbGUuYzoxODUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIGJ1bmRsZSBjb250YWlucyB0aGlzIHJlZjoiCittc2dpZF9wbHVyYWwgIlRoZSBidW5kbGUgY29udGFpbnMgdGhlc2UgJWQgcmVmczoiCittc2dzdHJbMF0gIui/meS4quWMheS4reWQq+aciei/meS4quW8leeUqO+8miIKK21zZ3N0clsxXSAi6L+Z5Liq5YyF5Lit5ZCr5pyJICVkIOS4quW8leeUqO+8miIKKworIzogYnVuZGxlLmM6MTkyCittc2dpZCAiVGhlIGJ1bmRsZSByZWNvcmRzIGEgY29tcGxldGUgaGlzdG9yeS4iCittc2dzdHIgIui/meS4quWMheiusOW9leS4gOS4quWujOaVtOWOhuWPsuOAgiIKKworIzogYnVuZGxlLmM6MTk0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBidW5kbGUgcmVxdWlyZXMgdGhpcyByZWY6IgorbXNnaWRfcGx1cmFsICJUaGUgYnVuZGxlIHJlcXVpcmVzIHRoZXNlICVkIHJlZnM6IgorbXNnc3RyWzBdICLov5nkuKrljIXpnIDopoHov5nkuKrlvJXnlKjvvJoiCittc2dzdHJbMV0gIui/meS4quWMhemcgOimgSAlZCDkuKrlvJXnlKjvvJoiCisKKyM6IGJ1bmRsZS5jOjI1MworbXNnaWQgIkNvdWxkIG5vdCBzcGF3biBwYWNrLW9iamVjdHMiCittc2dzdHIgIuS4jeiDveeUn+aIkCBwYWNrLW9iamVjdHMg6L+b56iLIgorCisjOiBidW5kbGUuYzoyNjQKK21zZ2lkICJwYWNrLW9iamVjdHMgZGllZCIKK21zZ3N0ciAicGFjay1vYmplY3RzIOe7iOatoiIKKworIzogYnVuZGxlLmM6MzA0Cittc2dpZCAicmV2LWxpc3QgZGllZCIKK21zZ3N0ciAicmV2LWxpc3Qg57uI5q2iIgorCisjOiBidW5kbGUuYzozNTMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmICclcycgaXMgZXhjbHVkZWQgYnkgdGhlIHJldi1saXN0IG9wdGlvbnMiCittc2dzdHIgIuW8leeUqCAnJXMnIOiiqyByZXYtbGlzdCDpgInpobnmjpLpmaQiCisKKyM6IGJ1bmRsZS5jOjQ0MyBidWlsdGluL2xvZy5jOjE1NyBidWlsdGluL2xvZy5jOjEzNjcgYnVpbHRpbi9zaG9ydGxvZy5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICVzIgorbXNnc3RyICLmnKrog73or4bliKvnmoTlj4LmlbDvvJolcyIKKworIzogYnVuZGxlLmM6NDQ5Cittc2dpZCAiUmVmdXNpbmcgdG8gY3JlYXRlIGVtcHR5IGJ1bmRsZS4iCittc2dzdHIgIuS4jeiDveWIm+W7uuepuuWMheOAgiIKKworIzogYnVuZGxlLmM6NDU5CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Yib5bu6ICclcyciCisKKyM6IGJ1bmRsZS5jOjQ4MAorbXNnaWQgImluZGV4LXBhY2sgZGllZCIKK21zZ3N0ciAiaW5kZXgtcGFjayDnu4jmraIiCisKKyM6IGNvbG9yLmM6MjYwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgY29sb3IgdmFsdWU6ICUuKnMiCittc2dzdHIgIuaXoOaViOeahOminOiJsuWAvO+8miUuKnMiCisKKyM6IGNvbW1pdC5jOjQwIGJ1aWx0aW4vYW0uYzo0NTEgYnVpbHRpbi9hbS5jOjQ4NyBidWlsdGluL2FtLmM6MTUxNgorIzogYnVpbHRpbi9hbS5jOjIxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHBhcnNlICVzIgorbXNnc3RyICLkuI3og73op6PmnpAgJXMiCisKKyM6IGNvbW1pdC5jOjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzICVzIGlzIG5vdCBhIGNvbW1pdCEiCittc2dzdHIgIiVzICVzIOS4jeaYr+S4gOS4quaPkOS6pCEiCisKKyM6IGNvbXBhdC9vYnN0YWNrLmM6NDA2IGNvbXBhdC9vYnN0YWNrLmM6NDA4Cittc2dpZCAibWVtb3J5IGV4aGF1c3RlZCIKK21zZ3N0ciAi5YaF5a2Y6ICX5bC9IgorCisjOiBjb25maWcuYzo0NzQgY29uZmlnLmM6NDc2CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgZmlsZSBsaW5lICVkIGluICVzIgorbXNnc3RyICLphY3nva7mlofku7YgJTIkcyDlh7rplJnkuo7nrKwgJTEkZCDooYwiCisKKyM6IGNvbmZpZy5jOjU5MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJyBpbiAlczogJXMiCittc2dzdHIgIuaWh+S7tiAlMyRzIOS4remFjee9ruWPmOmHjyAnJTIkcycg55qE5pWw5a2X5Y+W5YC8ICclMSRzJyDorr7nva7plJnor686ICU0JHMiCisKKyM6IGNvbmZpZy5jOjU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJyVzJyBmb3IgJyVzJzogJXMiCittc2dzdHIgIumFjee9ruWPmOmHjyAnJTIkcycg55qE5pWw5a2X5Y+W5YC8ICclMSRzJyDorr7nva7plJnor686ICUzJHMiCisKKyM6IGNvbmZpZy5jOjY3OQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhwYW5kIHVzZXIgZGlyIGluOiAnJXMnIgorbXNnc3RyICLml6Dms5XmianlsZUgJyVzJyDkuK3nmoTnlKjmiLfnm67lvZUiCisKKyM6IGNvbmZpZy5jOjc1NyBjb25maWcuYzo3NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHpsaWIgY29tcHJlc3Npb24gbGV2ZWwgJWQiCittc2dzdHIgIumUmeivr+eahCB6bGliIOWOi+e8qee6p+WIqyAlZCIKKworIzogY29uZmlnLmM6ODkwCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgbW9kZSBmb3Igb2JqZWN0IGNyZWF0aW9uOiAlcyIKK21zZ3N0ciAi5peg5pWI55qE5a+56LGh5Yib5bu65qih5byP77yaJXMiCisKKyM6IGNvbmZpZy5jOjEyMTYKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29tbWFuZC1saW5lIGNvbmZpZyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q5ZG95Luk6KGM5Lit55qE6YWN572uIgorCisjOiBjb25maWcuYzoxMjc3Cittc2dpZCAidW5rbm93biBlcnJvciBvY2N1cmVkIHdoaWxlIHJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMiCittc2dzdHIgIuWcqOivu+WPlumFjee9ruaWh+S7tuaXtumBh+WIsOacquefpemUmeivryIKKworIzogY29uZmlnLmM6MTYwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgJyVzJyBmcm9tIGNvbW1hbmQtbGluZSBjb25maWciCittc2dzdHIgIuaXoOazleino+aekOWRveS7pOihjOmFjee9ruS4reeahCAnJXMnIgorCisjOiBjb25maWcuYzoxNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBjb25maWcgdmFyaWFibGUgJyVzJyBpbiBmaWxlICclcycgYXQgbGluZSAlZCIKK21zZ3N0ciAi5Zyo5paH5Lu2ICclMiRzJyDnmoTnrKwgJTMkZCDooYzlj5HnjrDplJnor6/nmoTphY3nva7lj5jph48gJyUxJHMnIgorCisjOiBjb25maWcuYzoxNjYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGhhcyBtdWx0aXBsZSB2YWx1ZXMiCittc2dzdHIgIiVzIOacieWkmuS4quWPluWAvCIKKworIzogY29ubmVjdGVkLmM6NjkKK21zZ2lkICJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QnIgorbXNnc3RyICLkuI3og73miafooYwgJ2dpdCByZXYtbGlzdCciCisKKyM6IGNvbm5lY3RlZC5jOjg5CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB3cml0ZSB0byByZXYtbGlzdDogJXMiCittc2dzdHIgIuaXoOazleWGmeWFpSByZXYtbGlzdO+8miVzIgorCisjOiBjb25uZWN0ZWQuYzo5NworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gY2xvc2UgcmV2LWxpc3QncyBzdGRpbjogJXMiCittc2dzdHIgIuaXoOazleWFs+mXrSByZXYtbGlzdCDnmoTmoIflh4bovpPlhaXvvJolcyIKKworIzogZGF0ZS5jOjk1Cittc2dpZCAiaW4gdGhlIGZ1dHVyZSIKK21zZ3N0ciAi5Zyo5bCG5p2lIgorCisjOiBkYXRlLmM6MTAxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSBzZWNvbmQgYWdvIgorbXNnaWRfcGx1cmFsICIlbHUgc2Vjb25kcyBhZ28iCittc2dzdHJbMF0gIiVsdSDnp5Lpkp/liY0iCittc2dzdHJbMV0gIiVsdSDnp5Lpkp/liY0iCisKKyM6IGRhdGUuYzoxMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1pbnV0ZSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBtaW51dGVzIGFnbyIKK21zZ3N0clswXSAiJWx1IOWIhumSn+WJjSIKK21zZ3N0clsxXSAiJWx1IOWIhumSn+WJjSIKKworIzogZGF0ZS5jOjExNQorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgaG91ciBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBob3VycyBhZ28iCittc2dzdHJbMF0gIiVsdSDlsI/ml7bliY0iCittc2dzdHJbMV0gIiVsdSDlsI/ml7bliY0iCisKKyM6IGRhdGUuYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IGRheSBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSBkYXlzIGFnbyIKK21zZ3N0clswXSAiJWx1IOWkqeWJjSIKK21zZ3N0clsxXSAiJWx1IOWkqeWJjSIKKworIzogZGF0ZS5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICIlbHUgd2VlayBhZ28iCittc2dpZF9wbHVyYWwgIiVsdSB3ZWVrcyBhZ28iCittc2dzdHJbMF0gIiVsdSDlkajliY0iCittc2dzdHJbMV0gIiVsdSDlkajliY0iCisKKyM6IGRhdGUuYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IG1vbnRoIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IG1vbnRocyBhZ28iCittc2dzdHJbMF0gIiVsdSDkuKrmnIjliY0iCittc2dzdHJbMV0gIiVsdSDkuKrmnIjliY0iCisKKyM6IGRhdGUuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJWx1IHllYXIiCittc2dpZF9wbHVyYWwgIiVsdSB5ZWFycyIKK21zZ3N0clswXSAiJWx1IOW5tCIKK21zZ3N0clsxXSAiJWx1IOW5tCIKKworIy4gVFJBTlNMQVRPUlM6ICIlcyIgaXMgIjxuPiB5ZWFycyIKKyM6IGRhdGUuYzoxNDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsICVsdSBtb250aCBhZ28iCittc2dpZF9wbHVyYWwgIiVzLCAlbHUgbW9udGhzIGFnbyIKK21zZ3N0clswXSAiJXMgJWx1IOS4quaciOWJjSIKK21zZ3N0clsxXSAiJXMgJWx1IOS4quaciOWJjSIKKworIzogZGF0ZS5jOjE1NCBkYXRlLmM6MTU5CisjLCBjLWZvcm1hdAorbXNnaWQgIiVsdSB5ZWFyIGFnbyIKK21zZ2lkX3BsdXJhbCAiJWx1IHllYXJzIGFnbyIKK21zZ3N0clswXSAiJWx1IOW5tOWJjSIKK21zZ3N0clsxXSAiJWx1IOW5tOWJjSIKKworIzogZGlmZmNvcmUtb3JkZXIuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCBvcmRlcmZpbGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV6K+75Y+W5o6S5bqP5paH5Lu2ICclcyciCisKKyM6IGRpZmZjb3JlLXJlbmFtZS5jOjUzNgorbXNnaWQgIlBlcmZvcm1pbmcgaW5leGFjdCByZW5hbWUgZGV0ZWN0aW9uIgorbXNnc3RyICLmraPlnKjov5vooYzpnZ7nsr7noa7nmoTph43lkb3lkI3mo4DmtYsiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogZGlmZi5jOjExNgorIywgYy1mb3JtYXQKK21zZ2lkICIgIEZhaWxlZCB0byBwYXJzZSBkaXJzdGF0IGN1dC1vZmYgcGVyY2VudGFnZSAnJXMnXG4iCittc2dzdHIgIiAg5peg5rOV6Kej5p6QIGRpcnN0YXQg5oiq5q2i77yIY3V0LW9mZu+8ieeZvuWIhuavlCAnJXMnXG4iCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogZGlmZi5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIFVua25vd24gZGlyc3RhdCBwYXJhbWV0ZXIgJyVzJ1xuIgorbXNnc3RyICIgIOacquefpeeahCBkaXJzdGF0IOWPguaVsCAnJXMnXG4iCisKKyM6IGRpZmYuYzoyMTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biB2YWx1ZSBmb3IgJ2RpZmYuc3VibW9kdWxlJyBjb25maWcgdmFyaWFibGU6ICclcyciCittc2dzdHIgIumFjee9ruWPmOmHjyAnZGlmZi5zdWJtb2R1bGUnIOacquefpeeahOWPluWAvO+8miclcyciCisKKyM6IGRpZmYuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvdW5kIGVycm9ycyBpbiAnZGlmZi5kaXJzdGF0JyBjb25maWcgdmFyaWFibGU6XG4iCisiJXMiCittc2dzdHIgIiIKKyLlj5HnjrDphY3nva7lj5jph48gJ2RpZmYuZGlyc3RhdCcg5Lit55qE6ZSZ6K+v77yaXG4iCisiJXMiCisKKyM6IGRpZmYuYzoyOTk4CisjLCBjLWZvcm1hdAorbXNnaWQgImV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgJXMiCittc2dzdHIgIuWklumDqCBkaWZmIOmAgOWHuu+8jOWBnOatouWcqCAlcyIKKworIzogZGlmZi5jOjMzOTQKK21zZ2lkICItLWZvbGxvdyByZXF1aXJlcyBleGFjdGx5IG9uZSBwYXRoc3BlYyIKK21zZ3N0ciAiLS1mb2xsb3cg5Y+C5pWw5ZCO5Y+q6Lef5LiA5LiqIHBhdGhzcGVjIgorCisjOiBkaWZmLmM6MzU1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRmFpbGVkIHRvIHBhcnNlIC0tZGlyc3RhdC8tWCBvcHRpb24gcGFyYW1ldGVyOlxuIgorIiVzIgorbXNnc3RyICIiCisi5peg5rOV6Kej5p6QIC0tZGlyc3RhdC8tWCDpgInpobnnmoTlj4LmlbDvvJpcbiIKKyIlcyIKKworIzogZGlmZi5jOjM1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHBhcnNlIC0tc3VibW9kdWxlIG9wdGlvbiBwYXJhbWV0ZXI6ICclcyciCittc2dzdHIgIuaXoOazleino+aekCAtLXN1Ym1vZHVsZSDpgInpobnnmoTlj4LmlbDvvJonJXMnIgorCisjOiBkaXIuYzoxODUzCittc2dpZCAiZmFpbGVkIHRvIGdldCBrZXJuZWwgbmFtZSBhbmQgaW5mb3JtYXRpb24iCittc2dzdHIgIuaXoOazleiOt+W+l+WGheaguOWQjeensOWSjOS/oeaBryIKKworIzogZGlyLmM6MTkzNgorbXNnaWQgIlVudHJhY2tlZCBjYWNoZSBpcyBkaXNhYmxlZCBvbiB0aGlzIHN5c3RlbS4iCittc2dzdHIgIue8k+WtmOacqui3n+i4quaWh+S7tuWcqOacrOezu+e7n+iiq+emgeeUqCIKKworIzogZ3BnLWludGVyZmFjZS5jOjE2NiBncGctaW50ZXJmYWNlLmM6MjM3Cittc2dpZCAiY291bGQgbm90IHJ1biBncGcuIgorbXNnc3RyICLkuI3og73miafooYwgZ3Bn44CCIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTc4Cittc2dpZCAiZ3BnIGRpZCBub3QgYWNjZXB0IHRoZSBkYXRhIgorbXNnc3RyICJncGcg5rKh5pyJ5o6l5Y+X5pWw5o2uIgorCisjOiBncGctaW50ZXJmYWNlLmM6MTg5Cittc2dpZCAiZ3BnIGZhaWxlZCB0byBzaWduIHRoZSBkYXRhIgorbXNnc3RyICJncGcg5peg5rOV5Li65pWw5o2u562+5ZCNIgorCisjOiBncGctaW50ZXJmYWNlLmM6MjIyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJyVzJzogJXMiCittc2dzdHIgIuS4jeiDveWIm+W7uuS4tOaXtuaWh+S7tiAnJXMn77yaJXMiCisKKyM6IGdwZy1pbnRlcmZhY2UuYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHdyaXRpbmcgZGV0YWNoZWQgc2lnbmF0dXJlIHRvICclcyc6ICVzIgorbXNnc3RyICLml6Dms5XlsIbliIbnprvlvI/nrb7lkI3lhpnlhaUgJyVzJ++8miVzIgorCisjOiBncmVwLmM6MTcxOAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmFibGUgdG8gcmVhZCAlcyIKK21zZ3N0ciAiJyVzJ++8muaXoOazleivu+WPliAlcyIKKworIzogZ3JlcC5jOjE3MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogJXMiCittc2dzdHIgIiclcyfvvJolcyIKKworIzogZ3JlcC5jOjE3NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJzogc2hvcnQgcmVhZCAlcyIKK21zZ3N0ciAiJyVzJ++8muivu+WPluS4jeWujOaVtCAlcyIKKworIzogaGVscC5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICJhdmFpbGFibGUgZ2l0IGNvbW1hbmRzIGluICclcyciCittc2dzdHIgIuWcqCAnJXMnIOS4i+WPr+eUqOeahCBnaXQg5ZG95LukIgorCisjOiBoZWxwLmM6MjE0Cittc2dpZCAiZ2l0IGNvbW1hbmRzIGF2YWlsYWJsZSBmcm9tIGVsc2V3aGVyZSBvbiB5b3VyICRQQVRIIgorbXNnc3RyICLlnKggJFBBVEgg6Lev5b6E5Lit55qE5YW25LuW5Zyw5pa55Y+v55So55qEIGdpdCDlkb3ku6QiCisKKyM6IGhlbHAuYzoyNDYKK21zZ2lkICJUaGVzZSBhcmUgY29tbW9uIEdpdCBjb21tYW5kcyB1c2VkIGluIHZhcmlvdXMgc2l0dWF0aW9uczoiCittc2dzdHIgIui/meS6m+aYr+WQhOenjeWcuuWQiOW4uOingeeahCBHaXQg5ZG95Luk77yaIgorCisjOiBoZWxwLmM6MzExCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnIGFwcGVhcnMgdG8gYmUgYSBnaXQgY29tbWFuZCwgYnV0IHdlIHdlcmUgbm90XG4iCisiYWJsZSB0byBleGVjdXRlIGl0LiBNYXliZSBnaXQtJXMgaXMgYnJva2VuPyIKK21zZ3N0ciAiIgorIiclcycg5YOP5piv5LiA5LiqIGdpdCDlkb3ku6TvvIzkvYbljbTml6Dms5Xov5DooYzjgIJcbiIKKyLlj6/og73mmK8gZ2l0LSVzIOWPl+aNn++8nyIKKworIzogaGVscC5jOjM2OAorbXNnaWQgIlVoIG9oLiBZb3VyIHN5c3RlbSByZXBvcnRzIG5vIEdpdCBjb21tYW5kcyBhdCBhbGwuIgorbXNnc3RyICLllInlkYDvvIzmgqjnmoTns7vnu5/kuK3mnKrlj5HnjrAgR2l0IOWRveS7pOOAgiIKKworIzogaGVscC5jOjM5MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiV0FSTklORzogWW91IGNhbGxlZCBhIEdpdCBjb21tYW5kIG5hbWVkICclcycsIHdoaWNoIGRvZXMgbm90IGV4aXN0LlxuIgorIkNvbnRpbnVpbmcgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB5b3UgbWVhbnQgJyVzJyIKK21zZ3N0ciAiIgorIuitpuWRiu+8muaCqOi/kOihjOS4gOS4quS4jeWtmOWcqOeahCBHaXQg5ZG95LukICclcyfjgILnu6fnu63miafooYzlgYflrprmgqjopoHopoHov5DooYznmoRcbiIKKyLmmK8gJyVzJyIKKworIzogaGVscC5jOjM5NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbiAlMC4xZiBzZWNvbmRzIGF1dG9tYXRpY2FsbHkuLi4iCittc2dzdHIgIuWcqCAlMC4xZiDnp5Lpkp/lkI7oh6rliqjov5DooYwuLi4iCisKKyM6IGhlbHAuYzo0MDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0OiAnJXMnIGlzIG5vdCBhIGdpdCBjb21tYW5kLiBTZWUgJ2dpdCAtLWhlbHAnLiIKK21zZ3N0ciAiZ2l077yaJyVzJyDkuI3mmK/kuIDkuKogZ2l0IOWRveS7pOOAguWPguingSAnZ2l0IC0taGVscCfjgIIiCisKKyM6IGhlbHAuYzo0MDYgaGVscC5jOjQ2NgorbXNnaWQgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gdGhpcz8iCittc2dpZF9wbHVyYWwgIiIKKyJcbiIKKyJEaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlPyIKK21zZ3N0clswXSAiIgorIlxuIgorIuaCqOaMh+eahOaYr+i/meS4quS5iO+8nyIKK21zZ3N0clsxXSAiIgorIlxuIgorIuaCqOaMh+eahOaYr+i/meWFtuS4reeahOafkOS4gOS4quS5iO+8nyIKKworIzogaGVscC5jOjQ2MgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJXMgLSAlcyIKK21zZ3N0ciAiJXPvvJolcyAtICVzIgorCisjOiBtZXJnZS5jOjQxCittc2dpZCAiZmFpbGVkIHRvIHJlYWQgdGhlIGNhY2hlIgorbXNnc3RyICLml6Dms5Xor7vlj5bnvJPlrZgiCisKKyM6IG1lcmdlLmM6OTQgYnVpbHRpbi9hbS5jOjIwMDEgYnVpbHRpbi9hbS5jOjIwMzYgYnVpbHRpbi9jaGVja291dC5jOjM3NQorIzogYnVpbHRpbi9jaGVja291dC5jOjU4NiBidWlsdGluL2Nsb25lLmM6NzE1Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlhpnmlrDnmoTntKLlvJXmlofku7YiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4OQorIywgYy1mb3JtYXQKK21zZ2lkICIoYmFkIGNvbW1pdClcbiIKK21zZ3N0ciAi77yI5Z2P5o+Q5Lqk77yJXG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjIwOQorIywgYy1mb3JtYXQKK21zZ2lkICJhZGRpbmZvX2NhY2hlIGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLkuLrot6/lvoQgJyVzJyBhZGRpbmZvX2NhY2hlIOWksei0pSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjcwCittc2dpZCAiZXJyb3IgYnVpbGRpbmcgdHJlZXMiCittc2dzdHIgIuaXoOazleWIm+W7uuagkSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Njg3CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgcGF0aCAnJXMnJXMiCittc2dzdHIgIuaXoOazleWIm+W7uui3r+W+hCAnJXMnJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmluZyAlcyB0byBtYWtlIHJvb20gZm9yIHN1YmRpcmVjdG9yeVxuIgorbXNnc3RyICLliKDpmaQgJXMg5Lul5L6/5Li65a2Q55uu5b2V55WZ5Ye656m66Ze0XG4iCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjcxMiBtZXJnZS1yZWN1cnNpdmUuYzo3MzMKK21zZ2lkICI6IHBlcmhhcHMgYSBEL0YgY29uZmxpY3Q/IgorbXNnc3RyICLvvJrlj6/og73mmK/kuIDkuKrnm67lvZUv5paH5Lu25Yay56qB77yfIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo3MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSBhdCAnJXMnIgorbXNnc3RyICLmi5Lnu53kuKLlvIMgJyVzJyDkuK3nmoTmnKrot5/ouKrmlofku7YiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc2MworIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCBvYmplY3QgJXMgJyVzJyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5a+56LGhICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc2NQorIywgYy1mb3JtYXQKK21zZ2lkICJibG9iIGV4cGVjdGVkIGZvciAlcyAnJXMnIgorbXNnc3RyICIlcyAnJXMnIOW6lOS4uuaVsOaNruWvueixoSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzg4IGJ1aWx0aW4vY2xvbmUuYzozNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIG9wZW4gJyVzJyIKK21zZ3N0ciAi5peg5rOV5omT5byAICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjc5NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3ltbGluayAnJXMnIgorbXNnc3RyICLml6Dms5XliJvlu7rnrKblj7fpk77mjqUgJyVzJyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6Nzk5CisjLCBjLWZvcm1hdAorbXNnaWQgImRvIG5vdCBrbm93IHdoYXQgdG8gZG8gd2l0aCAlMDZvICVzICclcyciCittc2dzdHIgIuS4jeefpemBk+WmguS9leWkhOeQhiAlMDZvICVzICclcyciCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjkzNworbXNnaWQgIkZhaWxlZCB0byBleGVjdXRlIGludGVybmFsIG1lcmdlIgorbXNnc3RyICLml6Dms5XmiafooYzlhoXpg6jlkIjlubYiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjk0MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkICVzIHRvIGRhdGFiYXNlIgorbXNnc3RyICLkuI3og73mt7vliqAgJXMg6Iez5a+56LGh5bqTIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzo5NTcKK21zZ2lkICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSBpbiB0aGUgdHJlZSIKK21zZ3N0ciAi5Zyo5qCR5Lit5pyJ5LiN5pSv5oyB55qE5a+56LGh57G75Z6LIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxMDMyIG1lcmdlLXJlY3Vyc2l2ZS5jOjEwNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUICglcy9kZWxldGUpOiAlcyBkZWxldGVkIGluICVzIGFuZCAlcyBpbiAlcy4gVmVyc2lvbiAlcyBvZiAlcyBsZWZ0ICIKKyJpbiB0cmVlLiIKK21zZ3N0ciAiIgorIuWGsueqge+8iCUxJHMv5Yig6Zmk77yJ77yaJTIkcyDlnKggJTMkcyDkuK3ooqvliKDpmaTvvIzlnKggJTUkcyDkuK3ooqsgJTQkc+OAgiU3JHMg5ZyoICU2JHMg5LitIgorIueahOeJiOacrOiiq+S/neeVmeOAgiIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTAzOCBtZXJnZS1yZWN1cnNpdmUuYzoxMDUxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJDT05GTElDVCAoJXMvZGVsZXRlKTogJXMgZGVsZXRlZCBpbiAlcyBhbmQgJXMgaW4gJXMuIFZlcnNpb24gJXMgb2YgJXMgbGVmdCAiCisiaW4gdHJlZSBhdCAlcy4iCittc2dzdHIgIiIKKyLlhrLnqoHvvIglMSRzL+WIoOmZpO+8ie+8miUyJHMg5ZyoICUzJHMg5Lit6KKr5Yig6Zmk77yM5ZyoICU1JHMg5Lit6KKrICU0JHPjgIIlNyRzIOWcqCAlNiRzIOS4rSIKKyLnmoTniYjmnKzkv53nlZnkuo4gJTgkcyDkuK3jgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEwOTIKK21zZ2lkICJyZW5hbWUiCittc2dzdHIgIumHjeWRveWQjSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTA5MgorbXNnaWQgInJlbmFtZWQiCittc2dzdHIgIumHjeWRveWQjSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTE0OAorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBhIGRpcmVjdG9yeSBpbiAlcyBhZGRpbmcgYXMgJXMgaW5zdGVhZCIKK21zZ3N0ciAiJXMg5pivICVzIOS4reeahOS4gOS4quebruW9leiAjOS7pSAlcyDkuLrlkI3ooqvmt7vliqAiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNPTkZMSUNUIChyZW5hbWUvcmVuYW1lKTogUmVuYW1lIFwiJXNcIi0+XCIlc1wiIGluIGJyYW5jaCBcIiVzXCIgcmVuYW1lIFwiJXMiCisiXCItPlwiJXNcIiBpbiBcIiVzXCIlcyIKK21zZ3N0ciAiIgorIuWGsueqge+8iOmHjeWRveWQjS/ph43lkb3lkI3vvInvvJrlnKjliIbmlK8gXCIlMyRzXCIg5Lit6YeN5ZG95ZCNIFwiJTEkc1wiLT5cIiUyJHNcIu+8jOWcqOWIhuaUryAiCisiXCIlNiRzXCIg5Lit6YeN5ZG95ZCNIFwiJTQkc1wiLT5cIiU1JHNcIiU3JHMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjExNzUKK21zZ2lkICIgKGxlZnQgdW5yZXNvbHZlZCkiCittc2dzdHIgIu+8iOeVmeS4i+acquino+WGs++8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSk6IFJlbmFtZSAlcy0+JXMgaW4gJXMuIFJlbmFtZSAlcy0+JXMgaW4gJXMiCittc2dzdHIgIiIKKyLlhrLnqoHvvIjph43lkb3lkI0v6YeN5ZG95ZCN77yJ77ya5ZyoICUzJHMg5Lit6YeN5ZG95ZCNICUxJHMtPiUyJHPvvIzlnKggJTYkcyDkuK3ph43lkb3lkI0gJTQkcy0+IgorIiU1JHMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjEyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1pbmcgJXMgdG8gJXMgYW5kICVzIHRvICVzIGluc3RlYWQiCittc2dzdHIgIuiAjOaYr+mHjeWRveWQjSAlcyDoh7MgJXPvvIzku6Xlj4ogJXMg6IezICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDU4CisjLCBjLWZvcm1hdAorbXNnaWQgIkNPTkZMSUNUIChyZW5hbWUvYWRkKTogUmVuYW1lICVzLT4lcyBpbiAlcy4gJXMgYWRkZWQgaW4gJXMiCittc2dzdHIgIuWGsueqge+8iOmHjeWRveWQjS/mt7vliqDvvInvvJrlnKggJTMkcyDkuK3ph43lkb3lkI0gJTEkcy0+JTIkc+OAguWcqCAlNSRzIOS4rea3u+WKoCAlNCRzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBtZXJnZWQgJXMiCittc2dzdHIgIua3u+WKoOWQiOW5tuWQjueahCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTQ3MyBtZXJnZS1yZWN1cnNpdmUuYzoxNjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkFkZGluZyBhcyAlcyBpbnN0ZWFkIgorbXNnc3RyICLogIzmmK/ku6UgJXMg5Li65ZCN5re75YqgIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5a+56LGhICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIm9iamVjdCAlcyBpcyBub3QgYSBibG9iIgorbXNnc3RyICLlr7nosaEgJXMg5LiN5piv5LiA5Liq5pWw5o2u5a+56LGhIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTc1Cittc2dpZCAibW9kaWZ5IgorbXNnc3RyICLkv67mlLkiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE1NzUKK21zZ2lkICJtb2RpZmllZCIKK21zZ3N0ciAi5L+u5pS5IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTg1Cittc2dpZCAiY29udGVudCIKK21zZ3N0ciAi5YaF5a65IgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNTkyCittc2dpZCAiYWRkL2FkZCIKK21zZ3N0ciAi5re75YqgL+a3u+WKoCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTYyNgorIywgYy1mb3JtYXQKK21zZ2lkICJTa2lwcGVkICVzIChtZXJnZWQgc2FtZSBhcyBleGlzdGluZykiCittc2dzdHIgIueVpei/hyAlc++8iOW3sue7j+WBmui/h+ebuOWQjOWQiOW5tu+8iSIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY0MAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvLW1lcmdpbmcgJXMiCittc2dzdHIgIuiHquWKqOWQiOW5tiAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY0NCBnaXQtc3VibW9kdWxlLnNoOjExNTAKK21zZ2lkICJzdWJtb2R1bGUiCittc2dzdHIgIuWtkOaooee7hCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTY0NQorIywgYy1mb3JtYXQKK21zZ2lkICJDT05GTElDVCAoJXMpOiBNZXJnZSBjb25mbGljdCBpbiAlcyIKK21zZ3N0ciAi5Yay56qB77yIJXPvvInvvJrlkIjlubblhrLnqoHkuo4gJXMiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3ZpbmcgJXMiCittc2dzdHIgIuWIoOmZpCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc1NgorbXNnaWQgImZpbGUvZGlyZWN0b3J5IgorbXNnc3RyICLmlofku7Yv55uu5b2VIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxNzYyCittc2dpZCAiZGlyZWN0b3J5L2ZpbGUiCittc2dzdHIgIuebruW9lS/mlofku7YiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE3NjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ09ORkxJQ1QgKCVzKTogVGhlcmUgaXMgYSBkaXJlY3Rvcnkgd2l0aCBuYW1lICVzIGluICVzLiBBZGRpbmcgJXMgYXMgJXMiCittc2dzdHIgIuWGsueqge+8iCUxJHPvvInvvJrlnKggJTMkcyDkuK3mnInkuIDkuKrlkI3kuLogJTIkcyDnmoTnm67lvZXjgILku6UgJTUkcyDkuLrlkI3mt7vliqAgJTQkcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc3NworIywgYy1mb3JtYXQKK21zZ2lkICJBZGRpbmcgJXMiCittc2dzdHIgIua3u+WKoCAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTc5NAorbXNnaWQgIkZhdGFsIG1lcmdlIGZhaWx1cmUsIHNob3VsZG4ndCBoYXBwZW4uIgorbXNnc3RyICLkuKXph43nmoTlkIjlubbplJnor6/vvIzkuI3lupTlj5HnlJ/jgIIiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MTMKK21zZ2lkICJBbHJlYWR5IHVwLXRvLWRhdGUhIgorbXNnc3RyICLlt7Lnu4/mmK/mnIDmlrDnmoTvvIEiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE4MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2luZyBvZiB0cmVlcyAlcyBhbmQgJXMgZmFpbGVkIgorbXNnc3RyICLml6Dms5XlkIjlubbmoJEgJXMg5ZKMICVzIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoxODUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVucHJvY2Vzc2VkIHBhdGg/Pz8gJXMiCittc2dzdHIgIuacquWkhOeQhueahOi3r+W+hD8/PyAlcyIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MTkwMAorbXNnaWQgIk1lcmdpbmc6IgorbXNnc3RyICLlkIjlubbvvJoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5MTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yOiIKK21zZ2lkX3BsdXJhbCAiZm91bmQgJXUgY29tbW9uIGFuY2VzdG9yczoiCittc2dzdHJbMF0gIuWPkeeOsCAldSDkuKrlhbHlkIznpZblhYjvvJoiCittc2dzdHJbMV0gIuWPkeeOsCAldSDkuKrlhbHlkIznpZblhYjvvJoiCisKKyM6IG1lcmdlLXJlY3Vyc2l2ZS5jOjE5NTAKK21zZ2lkICJtZXJnZSByZXR1cm5lZCBubyBjb21taXQiCittc2dzdHIgIuWQiOW5tuacqui/lOWbnuaPkOS6pCIKKworIzogbWVyZ2UtcmVjdXJzaXZlLmM6MjAwNworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2Ugb2JqZWN0ICclcyciCittc2dzdHIgIuS4jeiDveino+aekOWvueixoSAnJXMnIgorCisjOiBtZXJnZS1yZWN1cnNpdmUuYzoyMDE4IGJ1aWx0aW4vbWVyZ2UuYzo2NDUKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgaW5kZXguIgorbXNnc3RyICLkuI3og73lhpnlhaXntKLlvJXjgIIiCisKKyM6IG5vdGVzLXV0aWxzLmM6NDEKK21zZ2lkICJDYW5ub3QgY29tbWl0IHVuaW5pdGlhbGl6ZWQvdW5yZWZlcmVuY2VkIG5vdGVzIHRyZWUiCittc2dzdHIgIuS4jeiDveaPkOS6pOacquWIneWni+WMli/mnKrlvJXnlKjnmoTms6jop6PmoJEiCisKKyM6IG5vdGVzLXV0aWxzLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkJhZCBub3Rlcy5yZXdyaXRlTW9kZSB2YWx1ZTogJyVzJyIKK21zZ3N0ciAi5Z2P55qEIG5vdGVzLnJld3JpdGVNb2RlIOWAvO+8miclcyciCisKKyM6IG5vdGVzLXV0aWxzLmM6MTEwCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlZnVzaW5nIHRvIHJld3JpdGUgbm90ZXMgaW4gJXMgKG91dHNpZGUgb2YgcmVmcy9ub3Rlcy8pIgorbXNnc3RyICLmi5Lnu53lkJEgJXPvvIjlnKggcmVmcy9ub3Rlcy8g5LmL5aSW77yJ5YaZ5YWl5rOo6KejIgorCisjLiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIGlzIHRoZSBuYW1lIG9mIHRoZQorIy4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBzZWNvbmQgJXMgaXMgaXRzIHZhbHVlCisjOiBub3Rlcy11dGlscy5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJCYWQgJXMgdmFsdWU6ICclcyciCittc2dzdHIgIuWdj+eahCAlcyDlgLzvvJonJXMnIgorCisjOiBvYmplY3QuYzoyNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIG9iamVjdDogJXMiCittc2dzdHIgIuS4jeiDveino+aekOWvueixoe+8miVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NTYzCittc2dpZCAiLi4uIgorbXNnc3RyICIuLi4iCisKKyM6IHBhcnNlLW9wdGlvbnMuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzIgorbXNnc3RyICLnlKjms5XvvJolcyIKKworIy4gVFJBTlNMQVRPUlM6IHRoZSBjb2xvbiBoZXJlIHNob3VsZCBhbGlnbiB3aXRoIHRoZQorIy4gb25lIGluICJ1c2FnZTogJXMiIHRyYW5zbGF0aW9uCisjOiBwYXJzZS1vcHRpb25zLmM6NTg1CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgIG9yOiAlcyIKK21zZ3N0ciAiICDmiJbvvJolcyIKKworIyAg6K+R6ICF77ya5Li65L+d6K+B5Zyo6L6T5Ye65Lit5a+56b2Q77yM5rOo5oSP6LCD5pW05Y+l5Lit56m65qC877yBCisjOiBwYXJzZS1vcHRpb25zLmM6NTg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlcyIKK21zZ3N0ciAiICAgICVzIgorCisjOiBwYXJzZS1vcHRpb25zLmM6NjIyCittc2dpZCAiLU5VTSIKK21zZ3N0ciAiLeaVsOWtlyIKKworIzogcGF0aHNwZWMuYzoxMzMKK21zZ2lkICJnbG9iYWwgJ2dsb2InIGFuZCAnbm9nbG9iJyBwYXRoc3BlYyBzZXR0aW5ncyBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICLlhajlsYDnmoQgJ2dsb2InIOWSjCAnbm9nbG9iJyDot6/lvoTop4TmoLzorr7nva7kuI3lhbzlrrkiCisKKyM6IHBhdGhzcGVjLmM6MTQzCittc2dpZCAiIgorImdsb2JhbCAnbGl0ZXJhbCcgcGF0aHNwZWMgc2V0dGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGwgb3RoZXIgZ2xvYmFsICIKKyJwYXRoc3BlYyBzZXR0aW5ncyIKK21zZ3N0ciAi5YWo5bGA55qEICdsaXRlcmFsJyDot6/lvoTop4TmoLzorr7nva7lkozlhbblroPnmoTlhajlsYDot6/lvoTop4TmoLzorr7nva7kuI3lhbzlrrkiCisKKyM6IHBhdGhzcGVjLmM6MTc3Cittc2dpZCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIHBhdGhzcGVjIG1hZ2ljICdwcmVmaXgnIgorbXNnc3RyICLot6/lvoTop4TmoLzljIXlkKvml6DmlYjnmoTnpZ7lpYfliY3nvIAiCisKKyM6IHBhdGhzcGVjLmM6MTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgcGF0aHNwZWMgbWFnaWMgJyUuKnMnIGluICclcyciCittc2dzdHIgIuWcqOi3r+W+hOinhOagvCAnJTMkcycg5Lit5peg5pWI55qE56We5aWH5YmN57yAICclMiQuKjEkcyciCisKKyM6IHBhdGhzcGVjLmM6MTg3CisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3NpbmcgJyknIGF0IHRoZSBlbmQgb2YgcGF0aHNwZWMgbWFnaWMgaW4gJyVzJyIKK21zZ3N0ciAi6Lev5b6E6KeE5qC8ICclcycg55qE56We5aWH5YmN57yA57uT5bC+5bCR5LqG5LiA5LiqICcpJyIKKworIzogcGF0aHNwZWMuYzoyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5pbXBsZW1lbnRlZCBwYXRoc3BlYyBtYWdpYyAnJWMnIGluICclcyciCittc2dzdHIgIui3r+W+hOinhOagvCAnJTIkcycg5Lit5YyF5ZCr5pyq5a6e546w55qE56We5aWH5YmN57yAICclMSRjJyIKKworIzogcGF0aHNwZWMuYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICdsaXRlcmFsJyBhbmQgJ2dsb2InIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIiVz77yaJ2xpdGVyYWwnIOWSjCAnZ2xvYicg5LiN5YW85a65IgorCisjOiBwYXRoc3BlYy5jOjI0MQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogJyVzJyBpcyBvdXRzaWRlIHJlcG9zaXRvcnkiCittc2dzdHIgIiVz77yaJyVzJyDlnKjku5PlupPkuYvlpJYiCisKKyM6IHBhdGhzcGVjLmM6MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlBhdGhzcGVjICclcycgaXMgaW4gc3VibW9kdWxlICclLipzJyIKK21zZ3N0ciAi6Lev5b6E6KeE5qC8ICclcycg5Zyo5a2Q5qih57uEICclLipzJyDkuK0iCisKKyM6IHBhdGhzcGVjLmM6MzUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRoc3BlYyBtYWdpYyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgY29tbWFuZDogJXMiCittc2dzdHIgIiVz77ya6Lev5b6E6KeE5qC856We5aWH5YmN57yA5LiN6KKr5q2k5ZG95Luk5pSv5oyB77yaJXMiCisKKyM6IHBhdGhzcGVjLmM6NDMyCisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGhzcGVjICclcycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKK21zZ3N0ciAi6Lev5b6E6KeE5qC8ICclcycg5L2N5LqO56ym5Y+36ZO+5o6l5LitIgorCisjOiBwYXRoc3BlYy5jOjQ0MQorbXNnaWQgIiIKKyJUaGVyZSBpcyBub3RoaW5nIHRvIGV4Y2x1ZGUgZnJvbSBieSA6KGV4Y2x1ZGUpIHBhdHRlcm5zLlxuIgorIlBlcmhhcHMgeW91IGZvcmdvdCB0byBhZGQgZWl0aGVyICc6Lycgb3IgJy4nID8iCittc2dzdHIgIiIKKyLmsqHmnInkuLogOihleGNsdWRlKSDmqKHlvI/mj5DkvpvopoHlv73nlaXnmoTlhoXlrrnjgILkuZ/orrjmgqjlv5jorrDkuoZcbiIKKyLmt7vliqAgJzovJyDmiJYgJy4nIO+8nyIKKworIzogcHJldHR5LmM6OTY5Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIC0tcHJldHR5IGZvcm1hdCIKK21zZ3N0ciAi5LiN6IO96Kej5p6QIC0tcHJldHR5IOagvOW8jyIKKworIzogcHJvZ3Jlc3MuYzoyMzYKK21zZ2lkICJkb25lIgorbXNnc3RyICLlrozmiJAiCisKKyM6IHJlYWQtY2FjaGUuYzoxMjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJpbmRleC52ZXJzaW9uIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyLorr7nva7kuoYgaW5kZXgudmVyc2lvbu+8jOS9huaYr+WPluWAvOaXoOaViOOAglxuIgorIuS9v+eUqOeJiOacrCAlaSIKKworIzogcmVhZC1jYWNoZS5jOjEzMDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLlxuIgorIlVzaW5nIHZlcnNpb24gJWkiCittc2dzdHIgIiIKKyLorr7nva7kuoYgR0lUX0lOREVYX1ZFUlNJT07vvIzkvYbmmK/lj5blgLzml6DmlYjjgIJcbiIKKyLkvb/nlKjniYjmnKwgJWkiCisKKyM6IHJlZnMuYzoyOTQxIGJ1aWx0aW4vbWVyZ2UuYzo3NjAgYnVpbHRpbi9tZXJnZS5jOjg3MSBidWlsdGluL21lcmdlLmM6OTczCisjOiBidWlsdGluL21lcmdlLmM6OTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIuaXoOazleaJk+W8gCAnJXMnIOi/m+ihjOWGmeWFpSIKKworIzogcmVmcy5jOjMwMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2UgJXM6ICVzIgorbXNnc3RyICLml6Dms5XliKDpmaTlvJXnlKggJXPvvJolcyIKKworIzogcmVmcy5jOjMwMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGRlbGV0ZSByZWZlcmVuY2VzOiAlcyIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk5byV55So77yaJXMiCisKKyM6IHJlZnMuYzozMDEzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIgorbXNnc3RyICLml6Dms5XliKDpmaTlvJXnlKggJXMiCisKKyM6IHJlZi1maWx0ZXIuYzo2NjAKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgZm9ybWF0IgorbXNnc3RyICLkuI3og73op6PmnpDmoLzlvI8iCisKKyM6IHJlbW90ZS5jOjc5MgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZmV0Y2ggYm90aCAlcyBhbmQgJXMgdG8gJXMiCittc2dzdHIgIuS4jeiDveWQjOaXtuiOt+WPliAlcyDlkowgJXMg6IezICVzIgorCisjOiByZW1vdGUuYzo3OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIKK21zZ3N0ciAiJXMg6YCa5bi46Lef6LiqICVz77yM6ICM6Z2eICVzIgorCisjOiByZW1vdGUuYzo4MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdHJhY2tzIGJvdGggJXMgYW5kICVzIgorbXNnc3RyICIlcyDlkIzml7bot5/ouKogJXMg5ZKMICVzIgorCisjOiByZW1vdGUuYzo4MDgKK21zZ2lkICJJbnRlcm5hbCBlcnJvciIKK21zZ3N0ciAi5YaF6YOo6ZSZ6K+vIgorCisjOiByZW1vdGUuYzoxNzIzIHJlbW90ZS5jOjE3NjYKK21zZ2lkICJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIgorbXNnc3RyICJIRUFEIOayoeacieaMh+WQkeS4gOS4quWIhuaUryIKKworIzogcmVtb3RlLmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICJubyBzdWNoIGJyYW5jaDogJyVzJyIKK21zZ3N0ciAi5rKh5pyJ5q2k5YiG5pSv77yaJyVzJyIKKworIzogcmVtb3RlLmM6MTczNQorIywgYy1mb3JtYXQKK21zZ2lkICJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIKK21zZ3N0ciAi5bCa5pyq57uZ5YiG5pSvICclcycg6K6+572u5LiK5ri4IgorCisjOiByZW1vdGUuYzoxNzQxCisjLCBjLWZvcm1hdAorbXNnaWQgInVwc3RyZWFtIGJyYW5jaCAnJXMnIG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIgorbXNnc3RyICLkuIrmuLjliIbmlK8gJyVzJyDmsqHmnInlrZjlgqjkuLrkuIDkuKrov5znqIvot5/ouKrliIbmlK8iCisKKyM6IHJlbW90ZS5jOjE3NTYKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giCittc2dzdHIgIuaOqOmAgeebruaghyAnJXMnIOiHs+i/nOeoiyAnJXMnIOayoeacieacrOWcsOi3n+i4quWIhuaUryIKKworIzogcmVtb3RlLmM6MTc3MQorIywgYy1mb3JtYXQKK21zZ2lkICJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIgorbXNnc3RyICLliIbmlK8gJyVzJyDmsqHmnInorr7nva7opoHmjqjpgIHnmoTov5znqIvmnI3liqHlmagiCisKKyM6IHJlbW90ZS5jOjE3ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAicHVzaCByZWZzcGVjcyBmb3IgJyVzJyBkbyBub3QgaW5jbHVkZSAnJXMnIgorbXNnc3RyICLlkJEgJyVzJyDmjqjpgIHlvJXnlKjop4TmoLzmnKrljIXlkKsgJyVzJyIKKworIzogcmVtb3RlLmM6MTc5NQorbXNnaWQgInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIKK21zZ3N0ciAi5o6o6YCB5peg55uu5qCH77yIcHVzaC5kZWZhdWx0IOaYryAnbm90aGluZyfvvIkiCisKKyM6IHJlbW90ZS5jOjE4MTcKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIgorbXNnc3RyICLml6Dms5Xop6PmnpAgJ3NpbXBsZScg5o6o6YCB6Iez5LiA5Liq5Y2V54us55qE55uu5qCHIgorCisjOiByZW1vdGUuYzoyMTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIGJhc2VkIG9uICclcycsIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS5cbiIKK21zZ3N0ciAi5oKo55qE5YiG5pSv5Z+65LqOICclcyfvvIzkvYbmraTkuIrmuLjliIbmlK/lt7Lnu4/kuI3lrZjlnKjjgIJcbiIKKworIzogcmVtb3RlLmM6MjEyOAorbXNnaWQgIiAgKHVzZSBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIHRvIGZpeHVwKVxuIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbVwiIOadpeS/ruWkje+8iVxuIgorCisjOiByZW1vdGUuYzoyMTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIllvdXIgYnJhbmNoIGlzIHVwLXRvLWRhdGUgd2l0aCAnJXMnLlxuIgorbXNnc3RyICLmgqjnmoTliIbmlK/kuI7kuIrmuLjliIbmlK8gJyVzJyDkuIDoh7TjgIJcbiIKKworIzogcmVtb3RlLmM6MjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdC5cbiIKK21zZ2lkX3BsdXJhbCAiWW91ciBicmFuY2ggaXMgYWhlYWQgb2YgJyVzJyBieSAlZCBjb21taXRzLlxuIgorbXNnc3RyWzBdICLmgqjnmoTliIbmlK/pooblhYggJyVzJyDlhbEgJWQg5Liq5o+Q5Lqk44CCXG4iCittc2dzdHJbMV0gIuaCqOeahOWIhuaUr+mihuWFiCAnJXMnIOWFsSAlZCDkuKrmj5DkuqTjgIJcbiIKKworIzogcmVtb3RlLmM6MjE0MQorbXNnaWQgIiAgKHVzZSBcImdpdCBwdXNoXCIgdG8gcHVibGlzaCB5b3VyIGxvY2FsIGNvbW1pdHMpXG4iCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHB1c2hcIiDmnaXlj5HluIPmgqjnmoTmnKzlnLDmj5DkuqTvvIlcbiIKKworIzogcmVtb3RlLmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXQsIGFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBpcyBiZWhpbmQgJyVzJyBieSAlZCBjb21taXRzLCBhbmQgY2FuIGJlIGZhc3QtZm9yd2FyZGVkLlxuIgorbXNnc3RyWzBdICLmgqjnmoTliIbmlK/okL3lkI4gJyVzJyDlhbEgJWQg5Liq5o+Q5Lqk77yM5bm25LiU5Y+v5Lul5b+r6L+b44CCXG4iCittc2dzdHJbMV0gIuaCqOeahOWIhuaUr+iQveWQjiAnJXMnIOWFsSAlZCDkuKrmj5DkuqTvvIzlubbkuJTlj6/ku6Xlv6vov5vjgIJcbiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiByZW1vdGUuYzoyMTUyCittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byB1cGRhdGUgeW91ciBsb2NhbCBicmFuY2gpXG4iCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHB1bGxcIiDmnaXmm7TmlrDmgqjnmoTmnKzlnLDliIbmlK/vvIlcbiIKKworIzogcmVtb3RlLmM6MjE1NQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKyJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dpZF9wbHVyYWwgIiIKKyJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorImFuZCBoYXZlICVkIGFuZCAlZCBkaWZmZXJlbnQgY29tbWl0cyBlYWNoLCByZXNwZWN0aXZlbHkuXG4iCittc2dzdHJbMF0gIiIKKyLmgqjnmoTliIbmlK/lkowgJyVzJyDlh7rnjrDkuoblgY/nprvvvIxcbiIKKyLlubbkuJTliIbliKvmnIkgJWQg5ZKMICVkIOWkhOS4jeWQjOeahOaPkOS6pOOAglxuIgorbXNnc3RyWzFdICIiCisi5oKo55qE5YiG5pSv5ZKMICclcycg5Ye6546w5LqG5YGP56a777yMXG4iCisi5bm25LiU5YiG5Yir5pyJICVkIOWSjCAlZCDlpITkuI3lkIznmoTmj5DkuqTjgIJcbiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiByZW1vdGUuYzoyMTY1Cittc2dpZCAiICAodXNlIFwiZ2l0IHB1bGxcIiB0byBtZXJnZSB0aGUgcmVtb3RlIGJyYW5jaCBpbnRvIHlvdXJzKVxuIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBwdWxsXCIg5p2l5ZCI5bm26L+c56iL5YiG5pSv77yJXG4iCisKKyM6IHJldmlzaW9uLmM6MjE5OAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iCittc2dzdHIgIuaCqOeahOW9k+WJjeWIhuaUr+WlveWDj+iiq+aNn+WdjyIKKworIzogcmV2aXNpb24uYzoyMjAxCisjLCBjLWZvcm1hdAorbXNnaWQgInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIKK21zZ3N0ciAi5oKo55qE5b2T5YmN5YiG5pSvICclcycg5bCa5peg5Lu75L2V5o+Q5LqkIgorCisjOiByZXZpc2lvbi5jOjIzOTUKK21zZ2lkICItLWZpcnN0LXBhcmVudCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWJpc2VjdCIKK21zZ3N0ciAiLS1maXJzdC1wYXJlbnQg5LiOIC0tYmlzZWN0IOS4jeWFvOWuuSIKKworIzogcnVuLWNvbW1hbmQuYzo4MworbXNnaWQgIm9wZW4gL2Rldi9udWxsIGZhaWxlZCIKK21zZ3N0ciAi5LiN6IO95omT5byAIC9kZXYvbnVsbCIKKworIzogcnVuLWNvbW1hbmQuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXAyKCVkLCVkKSBmYWlsZWQiCittc2dzdHIgIuS4jeiDveiwg+eUqCBkdXAyKCVkLCVkKSIKKworIzogc2VuZC1wYWNrLmM6Mjk1Cittc2dpZCAiZmFpbGVkIHRvIHNpZ24gdGhlIHB1c2ggY2VydGlmaWNhdGUiCittc2dzdHIgIuaXoOazleS4uuaOqOmAgeivgeS5puetvuWQjSIKKworIzogc2VuZC1wYWNrLmM6NDA0Cittc2dpZCAidGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLXNpZ25lZCBwdXNoIgorbXNnc3RyICLmjqXmlLbnq6/kuI3mlK/mjIHnrb7lkI3mjqjpgIEiCisKKyM6IHNlbmQtcGFjay5jOjQwNgorbXNnaWQgIiIKKyJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIHJlY2VpdmluZyBlbmQgZG9lcyBub3Qgc3VwcG9ydCAtLSIKKyJzaWduZWQgcHVzaCIKK21zZ3N0ciAi5pyq5Y+R6YCB5o6o6YCB6K+B5Lmm77yM5Zug5Li65o6l5pS256uv5LiN5pSv5oyB562+5ZCN5o6o6YCBIgorCisjOiBzZW5kLXBhY2suYzo0MTgKK21zZ2lkICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giCittc2dzdHIgIuaOpeaUtuerr+S4jeaUr+aMgeWOn+WtkOaOqOmAgSIKKworIzogc2VxdWVuY2VyLmM6MTgzCittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciCittc2dzdHIgIiIKKyLlhrLnqoHop6PlhrPlrozmr5XlkI7vvIznlKggJ2dpdCBhZGQgPOi3r+W+hD4nIOaIliAnZ2l0IHJtIDzot6/lvoQ+J1xuIgorIuWRveS7pOagh+iusOS/ruato+WQjueahOaWh+S7tiIKKworIzogc2VxdWVuY2VyLmM6MTg2Cittc2dpZCAiIgorImFmdGVyIHJlc29sdmluZyB0aGUgY29uZmxpY3RzLCBtYXJrIHRoZSBjb3JyZWN0ZWQgcGF0aHNcbiIKKyJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKyJhbmQgY29tbWl0IHRoZSByZXN1bHQgd2l0aCAnZ2l0IGNvbW1pdCciCittc2dzdHIgIiIKKyLlhrLnqoHop6PlhrPlrozmr5XlkI7vvIznlKggJ2dpdCBhZGQgPOi3r+W+hD4nIOaIliAnZ2l0IHJtIDzot6/lvoQ+J1xuIgorIuWvueS/ruato+WQjueahOaWh+S7tuWBmuagh+iusO+8jOeEtuWQjueUqCAnZ2l0IGNvbW1pdCcg5o+Q5LqkIgorCisjOiBzZXF1ZW5jZXIuYzoxOTkgc2VxdWVuY2VyLmM6ODQyIHNlcXVlbmNlci5jOjkyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJXMiCittc2dzdHIgIuS4jeiDveWGmeWFpSAlcyIKKworIzogc2VxdWVuY2VyLmM6MjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHdyYXBwaW5nIHVwICVzIgorbXNnc3RyICLplJnor6/mlLblsL4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjIxNworbXNnaWQgIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVycnktcGljay4iCittc2dzdHIgIuaCqOeahOacrOWcsOS/ruaUueWwhuiiq+aLo+mAieaTjeS9nOimhuebluOAgiIKKworIzogc2VxdWVuY2VyLmM6MjE5Cittc2dpZCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IHJldmVydC4iCittc2dzdHIgIuaCqOeahOacrOWcsOS/ruaUueWwhuiiq+i/mOWOn+aTjeS9nOimhuebluOAgiIKKworIzogc2VxdWVuY2VyLmM6MjIyCittc2dpZCAiQ29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIHRvIHByb2NlZWQuIgorbXNnc3RyICLmj5DkuqTmgqjnmoTkv67mlLnmiJbkv53lrZjov5vluqblkI7lho3nu6fnu63jgIIiCisKKyMuIFRSQU5TTEFUT1JTOiAlcyB3aWxsIGJlICJyZXZlcnQiIG9yICJjaGVycnktcGljayIKKyM6IHNlcXVlbmNlci5jOjMwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIgorbXNnc3RyICIlc++8muaXoOazleWGmeWFpeaWsOe0ouW8leaWh+S7tiIKKworIzogc2VxdWVuY2VyLmM6MzI3Cittc2dpZCAiQ291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXRcbiIKK21zZ3N0ciAi5LiN6IO96Kej5p6QIEhFQUQg5o+Q5LqkXG4iCisKKyM6IHNlcXVlbmNlci5jOjM0NworbXNnaWQgIlVuYWJsZSB0byB1cGRhdGUgY2FjaGUgdHJlZVxuIgorbXNnc3RyICLkuI3og73mm7TmlrDnvJPlrZhcbiIKKworIzogc2VxdWVuY2VyLmM6Mzk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBjb21taXQgJXNcbiIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5o+Q5LqkICVzXG4iCisKKyM6IHNlcXVlbmNlci5jOjQwNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlc1xuIgorbXNnc3RyICLkuI3og73op6PmnpDniLbmj5DkuqQgJXNcbiIKKworIzogc2VxdWVuY2VyLmM6NDY5Cittc2dpZCAiWW91ciBpbmRleCBmaWxlIGlzIHVubWVyZ2VkLiIKK21zZ3N0ciAi5oKo55qE57Si5byV5paH5Lu25pyq5a6M5oiQ5ZCI5bm244CCIgorCisjOiBzZXF1ZW5jZXIuYzo0ODgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGlzIGEgbWVyZ2UgYnV0IG5vIC1tIG9wdGlvbiB3YXMgZ2l2ZW4uIgorbXNnc3RyICLmj5DkuqQgJXMg5piv5LiA5Liq5ZCI5bm25o+Q5Lqk5L2G5pyq5o+Q5L6bIC1tIOmAiemhueOAgiIKKworIzogc2VxdWVuY2VyLmM6NDk2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIHBhcmVudCAlZCIKK21zZ3N0ciAi5o+Q5LqkICVzIOayoeacieeItuaPkOS6pCAlZCIKKworIzogc2VxdWVuY2VyLmM6NTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIk1haW5saW5lIHdhcyBzcGVjaWZpZWQgYnV0IGNvbW1pdCAlcyBpcyBub3QgYSBtZXJnZS4iCittc2dzdHIgIuaMh+WumuS6huS4u+e6v+S9huaPkOS6pCAlcyDkuI3mmK/kuIDkuKrlkIjlubbjgIIiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJXMgd2lsbCBiZSAicmV2ZXJ0IiBvcgorIy4gImNoZXJyeS1waWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEKKyM6IHNlcXVlbmNlci5jOjUxMworIywgYy1mb3JtYXQKK21zZ2lkICIlczogY2Fubm90IHBhcnNlIHBhcmVudCBjb21taXQgJXMiCittc2dzdHIgIiVz77ya5LiN6IO96Kej5p6Q54i25o+Q5LqkICVzIgorCisjOiBzZXF1ZW5jZXIuYzo1MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGdldCBjb21taXQgbWVzc2FnZSBmb3IgJXMiCittc2dzdHIgIuS4jeiDveW+l+WIsCAlcyDnmoTmj5DkuqTor7TmmI4iCisKKyM6IHNlcXVlbmNlci5jOjYwMworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmV2ZXJ0ICVzLi4uICVzIgorbXNnc3RyICLkuI3og73ov5jljp8gJXMuLi4gJXMiCisKKyM6IHNlcXVlbmNlci5jOjYwNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgYXBwbHkgJXMuLi4gJXMiCittc2dzdHIgIuS4jeiDveW6lOeUqCAlcy4uLiAlcyIKKworIzogc2VxdWVuY2VyLmM6NjM5Cittc2dpZCAiZW1wdHkgY29tbWl0IHNldCBwYXNzZWQiCittc2dzdHIgIuaPkOS+m+S6huepuueahOaPkOS6pOmbhiIKKworIzogc2VxdWVuY2VyLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCAlczogZmFpbGVkIHRvIHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICJnaXQgJXPvvJrml6Dms5Xor7vlj5bntKLlvJUiCisKKyM6IHNlcXVlbmNlci5jOjY1MQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIKK21zZ3N0ciAiZ2l0ICVz77ya5peg5rOV5Yi35paw57Si5byVIgorCisjOiBzZXF1ZW5jZXIuYzo3MTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90ICVzIGR1cmluZyBhICVzIgorbXNnc3RyICLml6Dms5UgJXMg5Zyo5LiA5LiqICVzIOi/h+eoi+S4rSIKKworIzogc2VxdWVuY2VyLmM6NzMzCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBsaW5lICVkLiIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q56ysICVkIOihjOOAgiIKKworIzogc2VxdWVuY2VyLmM6NzM4Cittc2dpZCAiTm8gY29tbWl0cyBwYXJzZWQuIgorbXNnc3RyICLmsqHmnInmj5DkuqTooqvop6PmnpDjgIIiCisKKyM6IHNlcXVlbmNlci5jOjc1MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAlcyIKK21zZ3N0ciAi5LiN6IO95omT5byAICVzIgorCisjOiBzZXF1ZW5jZXIuYzo3NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgJXMuIgorbXNnc3RyICLkuI3og73or7vlj5YgJXPjgIIiCisKKyM6IHNlcXVlbmNlci5jOjc2MQorIywgYy1mb3JtYXQKK21zZ2lkICJVbnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJXMiCittc2dzdHIgIuaXoOeUqOeahOaMh+S7pOihqOWNle+8miVzIgorCisjOiBzZXF1ZW5jZXIuYzo3OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBrZXk6ICVzIgorbXNnc3RyICLml6DmlYjplK7lkI3vvJolcyIKKworIzogc2VxdWVuY2VyLmM6Nzk0IGJ1aWx0aW4vcHVsbC5jOjQ3IGJ1aWx0aW4vcHVsbC5jOjQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yICVzOiAlcyIKK21zZ3N0ciAiJXMg55qE5YC85peg5pWI77yaJXMiCisKKyM6IHNlcXVlbmNlci5jOjgwNAorIywgYy1mb3JtYXQKK21zZ2lkICJNYWxmb3JtZWQgb3B0aW9ucyBzaGVldDogJXMiCittc2dzdHIgIumdnuazleeahOmAiemhueihqOWNle+8miVzIgorCisjOiBzZXF1ZW5jZXIuYzo4MjMKK21zZ2lkICJhIGNoZXJyeS1waWNrIG9yIHJldmVydCBpcyBhbHJlYWR5IGluIHByb2dyZXNzIgorbXNnc3RyICLkuIDkuKrmi6PpgInmiJbov5jljp/mk43kvZzlt7LlnKjov5vooYwiCisKKyM6IHNlcXVlbmNlci5jOjgyNAorbXNnaWQgInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCittc2dzdHIgIuWwneivlSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiCisKKyM6IHNlcXVlbmNlci5jOjgyOAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiCittc2dzdHIgIuS4jeiDveWIm+W7uuW6j+WIl+ebruW9lSAlcyIKKworIzogc2VxdWVuY2VyLmM6ODQ0IHNlcXVlbmNlci5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3cmFwcGluZyB1cCAlcy4iCittc2dzdHIgIumUmeivr+aUtuWwviAlc+OAgiIKKworIzogc2VxdWVuY2VyLmM6ODYzIHNlcXVlbmNlci5jOjk5NgorbXNnaWQgIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIKK21zZ3N0ciAi5ouj6YCJ5oiW6L+Y5Y6f5pON5L2c5bm25pyq6L+b6KGMIgorCisjOiBzZXF1ZW5jZXIuYzo4NjUKK21zZ2lkICJjYW5ub3QgcmVzb2x2ZSBIRUFEIgorbXNnc3RyICLkuI3og73op6PmnpAgSEVBRCIKKworIzogc2VxdWVuY2VyLmM6ODY3Cittc2dpZCAiY2Fubm90IGFib3J0IGZyb20gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIuS4jeiDveS7juWwmuacquW7uueri+eahOWIhuaUr+e7iOatoiIKKworIzogc2VxdWVuY2VyLmM6ODg3IGJ1aWx0aW4vYXBwbHkuYzo0MjkxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICVzOiAlcyIKK21zZ3N0ciAi5LiN6IO95omT5byAICVz77yaJXMiCisKKyM6IHNlcXVlbmNlci5jOjg5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAlczogJXMiCittc2dzdHIgIuS4jeiDveivu+WPliAlc++8miVzIgorCisjOiBzZXF1ZW5jZXIuYzo4OTEKK21zZ2lkICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIgorbXNnc3RyICLmhI/lpJbnmoTmlofku7bnu5PmnZ8iCisKKyM6IHNlcXVlbmNlci5jOjg5NworIywgYy1mb3JtYXQKK21zZ2lkICJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiCittc2dzdHIgIuS/neWtmOaLo+mAieaPkOS6pOWJjeeahCBIRUFEIOaWh+S7tiAnJXMnIOaNn+WdjyIKKworIzogc2VxdWVuY2VyLmM6OTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBmb3JtYXQgJXMuIgorbXNnc3RyICLkuI3og73moLzlvI/ljJYgJXPjgIIiCisKKyM6IHNlcXVlbmNlci5jOjEwNjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGNhbid0IGNoZXJyeS1waWNrIGEgJXMiCittc2dzdHIgIiVz77ya5LiN6IO95ouj6YCJ5LiA5LiqJXMiCisKKyM6IHNlcXVlbmNlci5jOjEwNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGJhZCByZXZpc2lvbiIKK21zZ3N0ciAiJXPvvJrplJnor6/nmoTniYjmnKwiCisKKyM6IHNlcXVlbmNlci5jOjExMDEKK21zZ2lkICJDYW4ndCByZXZlcnQgYXMgaW5pdGlhbCBjb21taXQiCittc2dzdHIgIuS4jeiDveS9nOS4uuWIneWni+aPkOS6pOi/mOWOnyIKKworIzogc2VxdWVuY2VyLmM6MTEwMgorbXNnaWQgIkNhbid0IGNoZXJyeS1waWNrIGludG8gZW1wdHkgaGVhZCIKK21zZ3N0ciAi5LiN6IO95ouj6YCJ5Yiw56m65YiG5pSvIgorCisjOiBzZXR1cC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVhZCAlcyIKK21zZ3N0ciAi5peg5rOV6K+75Y+WICVzIgorCisjOiBzaGExX25hbWUuYzo0NTMKK21zZ2lkICIiCisiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKyJiZWNhdXNlIGl0IHdpbGwgYmUgaWdub3JlZCB3aGVuIHlvdSBqdXN0IHNwZWNpZnkgNDAtaGV4LiBUaGVzZSByZWZzXG4iCisibWF5IGJlIGNyZWF0ZWQgYnkgbWlzdGFrZS4gRm9yIGV4YW1wbGUsXG4iCisiXG4iCisiICBnaXQgY2hlY2tvdXQgLWIgJGJyICQoZ2l0IHJldi1wYXJzZSAuLi4pXG4iCisiXG4iCisid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisiZXhhbWluZSB0aGVzZSByZWZzIGFuZCBtYXliZSBkZWxldGUgdGhlbS4gVHVybiB0aGlzIG1lc3NhZ2Ugb2ZmIGJ5XG4iCisicnVubmluZyBcImdpdCBjb25maWcgYWR2aWNlLm9iamVjdE5hbWVXYXJuaW5nIGZhbHNlXCIiCittc2dzdHIgIiIKKyJHaXQg6YCa5bi45LiN5Lya5Yib5bu65LiA5Liq5LulNDDkvY3ljYHlha3ov5vliLblrZfnrKblkb3lkI3nmoTlvJXnlKjvvIzlm6DkuLrlvZPkvaDmj5Dkvps0MOS9jVxuIgorIuWNgeWFrei/m+WItuWtl+espuaXtuWwhuiiq+W/veeVpeOAguS4jei/h+i/meS6m+W8leeUqOS5n+WPr+iDveiiq+mUmeivr+WcsOWIm+W7uuOAguS+i+Wmgu+8mlxuIgorIlxuIgorIiAgZ2l0IGNoZWNrb3V0IC1iICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorIlxuIgorIuW9kyBcIiRiclwiIOepuueZveaXtuS4gOS4qjQw5L2N5Y2B5YWt6L+b5Yi255qE5byV55So5bCG6KKr5Yib5bu644CC6K+35qOA5p+l6L+Z5Lqb5byV55So77yMXG4iCisi5Y+v6IO96ZyA6KaB5Yig6Zmk5a6D5Lus44CC55SoIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIlxuIgorIuWRveS7pOWFs+mXreacrOa2iOaBr+mAmuefpeOAgiIKKworIzogc3VibW9kdWxlLmM6NjEgc3VibW9kdWxlLmM6OTUKK21zZ2lkICJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIKK21zZ3N0ciAi5peg5rOV5L+u5pS55pyq5ZCI5bm255qEIC5naXRtb2R1bGVz77yM5YWI6Kej5Yaz5ZCI5bm25Yay56qBIgorCisjOiBzdWJtb2R1bGUuYzo2NSBzdWJtb2R1bGUuYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9JXMiCittc2dzdHIgIuaXoOazleWcqCAuZ2l0bW9kdWxlcyDkuK3mib7liLAgcGF0aD0lcyDnmoTlsI/oioIiCisKKyM6IHN1Ym1vZHVsZS5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiCittc2dzdHIgIuS4jeiDveabtOaWsCAuZ2l0bW9kdWxlcyDmnaHnm64gJXMiCisKKyM6IHN1Ym1vZHVsZS5jOjEwNgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVtb3ZlIC5naXRtb2R1bGVzIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAi5peg5rOV56e76ZmkICVzIOeahCAuZ2l0bW9kdWxlcyDmnaHnm64iCisKKyM6IHN1Ym1vZHVsZS5jOjExNworbXNnaWQgInN0YWdpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiCittc2dzdHIgIuWwhuabtOaWsOWQjiAuZ2l0bW9kdWxlcyDmt7vliqDmmoLlrZjljLrlpLHotKUiCisKKyM6IHN1Ym1vZHVsZS5jOjEwNDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldCBjb3JlLndvcmt0cmVlIGluICVzIgorbXNnc3RyICLkuI3og73lnKggJXMg5Lit6K6+572uIGNvcmUud29ya3RyZWUiCisKKyM6IHRyYWlsZXIuYzo0OTEgdHJhaWxlci5jOjQ5NSB0cmFpbGVyLmM6NDk5IHRyYWlsZXIuYzo1NTMgdHJhaWxlci5jOjU1NworIzogdHJhaWxlci5jOjU2MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIgorbXNnc3RyICLplK4gJyUyJHMnIOeahOacquefpeWPluWAvCAnJTEkcyciCisKKyM6IHRyYWlsZXIuYzo1NDMgdHJhaWxlci5jOjU0OCBidWlsdGluL3JlbW90ZS5jOjI5MAorIywgYy1mb3JtYXQKK21zZ2lkICJtb3JlIHRoYW4gb25lICVzIgorbXNnc3RyICLlpJrkuo7kuIDkuKogJXMiCisKKyM6IHRyYWlsZXIuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZW1wdHkgdHJhaWxlciB0b2tlbiBpbiB0cmFpbGVyICclLipzJyIKK21zZ3N0ciAi562+5ZCNICclLipzJyDnmoTplK7kuLrnqboiCisKKyM6IHRyYWlsZXIuYzo3MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHJlYWQgaW5wdXQgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5bovpPlhaXmlofku7YgJyVzJyIKKworIzogdHJhaWxlci5jOjcwNAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iCittc2dzdHIgIuS4jeiDveiHquagh+WHhui+k+WFpeivu+WPliIKKworIzogdHJhbnNwb3J0LWhlbHBlci5jOjEwMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcmVmICVzIgorbXNnc3RyICLkuI3og73or7vlj5blvJXnlKggJXMiCisKKyM6IHVucGFjay10cmVlcy5jOjIwMworbXNnaWQgIkNoZWNraW5nIG91dCBmaWxlcyIKK21zZ3N0ciAi5q2j5Zyo5qOA5Ye65paH5Lu2IgorCisjOiB1cmxtYXRjaC5jOjEyMAorbXNnaWQgImludmFsaWQgVVJMIHNjaGVtZSBuYW1lIG9yIG1pc3NpbmcgJzovLycgc3VmZml4IgorbXNnc3RyICLml6DmlYjnmoQgVVJMIOaWueahiOWQjeensOaIluS4ouWksSAnOi8vJyDlkI7nvIAiCisKKyM6IHVybG1hdGNoLmM6MTQ0IHVybG1hdGNoLmM6Mjk3IHVybG1hdGNoLmM6MzU2CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIKK21zZ3N0ciAi5peg5pWI55qEICVYWCDovazkuYnluo/liJciCisKKyM6IHVybG1hdGNoLmM6MTcyCittc2dpZCAibWlzc2luZyBob3N0IGFuZCBzY2hlbWUgaXMgbm90ICdmaWxlOiciCittc2dzdHIgIue8uuWkseS4u+acuuWQjeS4lCBVUkwg5pa55qGI5LiN5pivICdmaWxlOiciCisKKyM6IHVybG1hdGNoLmM6MTg5Cittc2dpZCAiYSAnZmlsZTonIFVSTCBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciIKK21zZ3N0ciAi5LiA5LiqICdmaWxlOicgVVJMIOS4jeW6lOivpeWMheWQq+err+WPo+WPtyIKKworIzogdXJsbWF0Y2guYzoxOTkKK21zZ2lkICJpbnZhbGlkIGNoYXJhY3RlcnMgaW4gaG9zdCBuYW1lIgorbXNnc3RyICLkuLvmnLrlkI3kuK3ljIXlkKvml6DmlYjnmoTlrZfnrKYiCisKKyM6IHVybG1hdGNoLmM6MjQ0IHVybG1hdGNoLmM6MjU1Cittc2dpZCAiaW52YWxpZCBwb3J0IG51bWJlciIKK21zZ3N0ciAi5peg5pWI55qE56uv5Y+j5Y+3IgorCisjOiB1cmxtYXRjaC5jOjMyMgorbXNnaWQgImludmFsaWQgJy4uJyBwYXRoIHNlZ21lbnQiCittc2dzdHIgIuaXoOaViOeahCAnLi4nIOi3r+W+hOeJh+autSIKKworIzogd3JhcHBlci5jOjIxOSB3cmFwcGVyLmM6MzYyCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmciCittc2dzdHIgIuaXoOazleaJk+W8gCAnJXMnIOi/m+ihjOivu+WGmSIKKworIzogd3JhcHBlci5jOjIyMSB3cmFwcGVyLmM6MzY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciCittc2dzdHIgIuaXoOazleaJk+W8gCAnJXMnIOi/m+ihjOWGmeWFpSIKKworIzogd3JhcHBlci5jOjIyMyB3cmFwcGVyLmM6MzY2IGJ1aWx0aW4vYW0uYzozMzcgYnVpbHRpbi9jb21taXQuYzoxNjg4CisjOiBidWlsdGluL21lcmdlLmM6MTA3NiBidWlsdGluL3B1bGwuYzozODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIKK21zZ3N0ciAi5peg5rOV5omT5byAICclcycg6L+b6KGM6K+75Y+WIgorCisjOiB3cmFwcGVyLmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBhY2Nlc3MgJyVzJzogJXMiCittc2dzdHIgIuS4jeiDveiuv+mXriAnJXMn77yaJXMiCisKKyM6IHdyYXBwZXIuYzo2MDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGFjY2VzcyAnJXMnIgorbXNnc3RyICLkuI3og73orr/pl64gJyVzJyIKKworIzogd3JhcHBlci5jOjYxMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gbG9vayB1cCBjdXJyZW50IHVzZXIgaW4gdGhlIHBhc3N3ZCBmaWxlOiAlcyIKK21zZ3N0ciAi5peg5rOV5Zyo5Y+j5Luk5paH5Lu25Lit5p+l6K+i5Yiw5b2T5YmN55So5oi377yaJXMiCisKKyM6IHdyYXBwZXIuYzo2MTIKK21zZ2lkICJubyBzdWNoIHVzZXIiCittc2dzdHIgIuaXoOatpOeUqOaItyIKKworIzogd3JhcHBlci5jOjYyMAorbXNnaWQgInVuYWJsZSB0byBnZXQgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSIKK21zZ3N0ciAi5LiN6IO96I635Y+W5b2T5YmN5bel5L2c55uu5b2VIgorCisjOiB3cmFwcGVyLmM6NjMxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0aW5nIgorbXNnc3RyICLkuI3og73lhpnlhaUgJXMiCisKKyM6IHdyYXBwZXIuYzo2NDIgYnVpbHRpbi9hbS5jOjQyNAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgd3JpdGUgdG8gJXMiCittc2dzdHIgIuS4jeiDveWGmeWFpSAlcyIKKworIzogd3JhcHBlci5jOjY0OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY2xvc2UgJXMiCittc2dzdHIgIuS4jeiDveWFs+mXrSAlcyIKKworIzogd3Qtc3RhdHVzLmM6MTQ5Cittc2dpZCAiVW5tZXJnZWQgcGF0aHM6IgorbXNnc3RyICLmnKrlkIjlubbnmoTot6/lvoTvvJoiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTc2IHd0LXN0YXR1cy5jOjIwMworIywgYy1mb3JtYXQKK21zZ2lkICIgICh1c2UgXCJnaXQgcmVzZXQgJXMgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJlc2V0ICVzIDzmlofku7Y+Li4uXCIg5Lul5Y+W5raI5pqC5a2Y77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE3OCB3dC1zdGF0dXMuYzoyMDUKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJtIC0tY2FjaGVkIDzmlofku7Y+Li4uXCIg5Lul5Y+W5raI5pqC5a2Y77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE4MgorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgYWRkIDzmlofku7Y+Li4uXCIg5qCH6K6w6Kej5Yaz5pa55qGI77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE4NCB3dC1zdGF0dXMuYzoxODgKK21zZ2lkICIgICh1c2UgXCJnaXQgYWRkL3JtIDxmaWxlPi4uLlwiIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikiCittc2dzdHIgIiAg77yI6YWM5oOF5L2/55SoIFwiZ2l0IGFkZC9ybSA85paH5Lu2Pi4uLlwiIOagh+iusOino+WGs+aWueahiO+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxODYKK21zZ2lkICIgICh1c2UgXCJnaXQgcm0gPGZpbGU+Li4uXCIgdG8gbWFyayByZXNvbHV0aW9uKSIKK21zZ3N0ciAiICDvvIjkvb/nlKggXCJnaXQgcm0gPOaWh+S7tj4uLi5cIiDmoIforrDop6PlhrPmlrnmoYjvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjE5NyB3dC1zdGF0dXMuYzo4ODAKK21zZ2lkICJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiCittc2dzdHIgIuimgeaPkOS6pOeahOWPmOabtO+8miIKKworIzogd3Qtc3RhdHVzLmM6MjE1IHd0LXN0YXR1cy5jOjg4OQorbXNnaWQgIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIKK21zZ3N0ciAi5bCa5pyq5pqC5a2Y5Lul5aSH5o+Q5Lqk55qE5Y+Y5pu077yaIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjIxOQorbXNnaWQgIiAgKHVzZSBcImdpdCBhZGQgPGZpbGU+Li4uXCIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBhZGQgPOaWh+S7tj4uLi5cIiDmm7TmlrDopoHmj5DkuqTnmoTlhoXlrrnvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MjIxCittc2dpZCAiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGFkZC9ybSA85paH5Lu2Pi4uLlwiIOabtOaWsOimgeaPkOS6pOeahOWGheWuue+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoyMjIKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLlwiIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGNoZWNrb3V0IC0tIDzmlofku7Y+Li4uXCIg5Lii5byD5bel5L2c5Yy655qE5pS55Yqo77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjIyNAorbXNnaWQgIiAgKGNvbW1pdCBvciBkaXNjYXJkIHRoZSB1bnRyYWNrZWQgb3IgbW9kaWZpZWQgY29udGVudCBpbiBzdWJtb2R1bGVzKSIKK21zZ3N0ciAiICDvvIjmj5DkuqTmiJbkuKLlvIPlrZDmqKHnu4TkuK3mnKrot5/ouKrmiJbkv67mlLnnmoTlhoXlrrnvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgKHVzZSBcImdpdCAlcyA8ZmlsZT4uLi5cIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCAlcyA85paH5Lu2Pi4uLlwiIOS7peWMheWQq+imgeaPkOS6pOeahOWGheWuue+8iSIKKworIzogd3Qtc3RhdHVzLmM6MjUxCittc2dpZCAiYm90aCBkZWxldGVkOiIKK21zZ3N0ciAi5Y+M5pa55Yig6Zmk77yaIgorCisjOiB3dC1zdGF0dXMuYzoyNTMKK21zZ2lkICJhZGRlZCBieSB1czoiCittc2dzdHIgIueUseaIkeS7rOa3u+WKoO+8miIKKworIzogd3Qtc3RhdHVzLmM6MjU1Cittc2dpZCAiZGVsZXRlZCBieSB0aGVtOiIKK21zZ3N0ciAi55Sx5LuW5Lus5Yig6Zmk77yaIgorCisjOiB3dC1zdGF0dXMuYzoyNTcKK21zZ2lkICJhZGRlZCBieSB0aGVtOiIKK21zZ3N0ciAi55Sx5LuW5Lus5re75Yqg77yaIgorCisjOiB3dC1zdGF0dXMuYzoyNTkKK21zZ2lkICJkZWxldGVkIGJ5IHVzOiIKK21zZ3N0ciAi55Sx5oiR5Lus5Yig6Zmk77yaIgorCisjOiB3dC1zdGF0dXMuYzoyNjEKK21zZ2lkICJib3RoIGFkZGVkOiIKK21zZ3N0ciAi5Y+M5pa55re75Yqg77yaIgorCisjOiB3dC1zdGF0dXMuYzoyNjMKK21zZ2lkICJib3RoIG1vZGlmaWVkOiIKK21zZ3N0ciAi5Y+M5pa55L+u5pS577yaIgorCisjOiB3dC1zdGF0dXMuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgdW5tZXJnZWQgc3RhdHVzICV4IgorbXNnc3RyICJidWfvvJrml6Dms5XlpITnkIbnmoTmnKrlkIjlubbnirbmgIEgJXgiCisKKyM6IHd0LXN0YXR1cy5jOjI3MworbXNnaWQgIm5ldyBmaWxlOiIKK21zZ3N0ciAi5paw5paH5Lu277yaIgorCisjOiB3dC1zdGF0dXMuYzoyNzUKK21zZ2lkICJjb3BpZWQ6IgorbXNnc3RyICLmi7fotJ3vvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI3NworbXNnaWQgImRlbGV0ZWQ6IgorbXNnc3RyICLliKDpmaTvvJoiCisKKyM6IHd0LXN0YXR1cy5jOjI3OQorbXNnaWQgIm1vZGlmaWVkOiIKK21zZ3N0ciAi5L+u5pS577yaIgorCisjOiB3dC1zdGF0dXMuYzoyODEKK21zZ2lkICJyZW5hbWVkOiIKK21zZ3N0ciAi6YeN5ZG95ZCN77yaIgorCisjOiB3dC1zdGF0dXMuYzoyODMKK21zZ2lkICJ0eXBlY2hhbmdlOiIKK21zZ3N0ciAi57G75Z6L5Y+Y5pu077yaIgorCisjOiB3dC1zdGF0dXMuYzoyODUKK21zZ2lkICJ1bmtub3duOiIKK21zZ3N0ciAi5pyq55+l77yaIgorCisjOiB3dC1zdGF0dXMuYzoyODcKK21zZ2lkICJ1bm1lcmdlZDoiCittc2dzdHIgIuacquWQiOW5tu+8miIKKworIyAg6K+R6ICF77ya5pyr5bC+5Lik5Liq5a2X6IqC5Y+v6IO96KKr5Yig5YeP77yM5aaC5p6c57+76K+R5Li65Lit5paH5qCH54K55Lya5Ye6546w5Y2K5Liq5rGJ5a2XCisjOiB3dC1zdGF0dXMuYzozNjkKK21zZ2lkICJuZXcgY29tbWl0cywgIgorbXNnc3RyICLmlrDmj5DkuqQsICIKKworIyAg6K+R6ICF77ya5pyr5bC+5Lik5Liq5a2X6IqC5Y+v6IO96KKr5Yig5YeP77yM5aaC5p6c57+76K+R5Li65Lit5paH5qCH54K55Lya5Ye6546w5Y2K5Liq5rGJ5a2XCisjOiB3dC1zdGF0dXMuYzozNzEKK21zZ2lkICJtb2RpZmllZCBjb250ZW50LCAiCittc2dzdHIgIuS/ruaUueeahOWGheWuuSwgIgorCisjICDor5HogIXvvJrmnKvlsL7kuKTkuKrlrZfoioLlj6/og73ooqvliKDlh4/vvIzlpoLmnpznv7vor5HkuLrkuK3mlofmoIfngrnkvJrlh7rnjrDljYrkuKrmsYnlrZcKKyM6IHd0LXN0YXR1cy5jOjM3MworbXNnaWQgInVudHJhY2tlZCBjb250ZW50LCAiCittc2dzdHIgIuacqui3n+i4queahOWGheWuuSwgIgorCisjOiB3dC1zdGF0dXMuYzozOTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiYnVnOiB1bmhhbmRsZWQgZGlmZiBzdGF0dXMgJWMiCittc2dzdHIgImJ1Z++8muaXoOazleWkhOeQhueahOW3ruW8gueKtuaAgSAlYyIKKworIzogd3Qtc3RhdHVzLmM6NzU0Cittc2dpZCAiU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoiCittc2dzdHIgIuWtkOaooee7hOW3suS/ruaUueS9huWwmuacquabtOaWsO+8miIKKworIzogd3Qtc3RhdHVzLmM6NzU2Cittc2dpZCAiU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIKK21zZ3N0ciAi6KaB5o+Q5Lqk55qE5a2Q5qih57uE5Y+Y5pu077yaIgorCisjOiB3dC1zdGF0dXMuYzo4MzcKK21zZ2lkICIiCisiRG8gbm90IHRvdWNoIHRoZSBsaW5lIGFib3ZlLlxuIgorIkV2ZXJ5dGhpbmcgYmVsb3cgd2lsbCBiZSByZW1vdmVkLiIKK21zZ3N0ciAiIgorIuS4jeimgeaUueWKqOS4iumdoueahOS4gOihjOOAglxuIgorIuS4i+mdoueahOaJgOacieWGheWuueWdh+Wwhuiiq+WIoOmZpOOAgiIKKworIzogd3Qtc3RhdHVzLmM6OTQ4Cittc2dpZCAiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIgorbXNnc3RyICLmgqjmnInlsJrmnKrlkIjlubbnmoTot6/lvoTjgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6OTUxCittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNvbW1pdFwiKSIKK21zZ3N0ciAiICDvvIjop6PlhrPlhrLnqoHlubbov5DooYwgXCJnaXQgY29tbWl0XCLvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjk1NAorbXNnaWQgIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iCittc2dzdHIgIuaJgOacieWGsueqgeW3suino+WGs+S9huaCqOS7jeWkhOS6juWQiOW5tuS4reOAgiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzo5NTcKK21zZ2lkICIgICh1c2UgXCJnaXQgY29tbWl0XCIgdG8gY29uY2x1ZGUgbWVyZ2UpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBjb21taXRcIiDnu5PmnZ/lkIjlubbvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjk2NworbXNnaWQgIllvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLiIKK21zZ3N0ciAi5oKo5q2j5aSE5LqOIGFtIOaTjeS9nOi/h+eoi+S4reOAgiIKKworIzogd3Qtc3RhdHVzLmM6OTcwCittc2dpZCAiVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuIgorbXNnc3RyICLlvZPliY3nmoTooaXkuIHkuLrnqbrjgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6OTc0Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgdGhlbiBydW4gXCJnaXQgYW0gLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICDvvIjop6PlhrPlhrLnqoHvvIznhLblkI7ov5DooYwgXCJnaXQgYW0gLS1jb250aW51ZVwi77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjk3NgorbXNnaWQgIiAgKHVzZSBcImdpdCBhbSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBhbSAtLXNraXBcIiDot7Pov4fmraTooaXkuIHvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6OTc4Cittc2dpZCAiICAodXNlIFwiZ2l0IGFtIC0tYWJvcnRcIiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBhbSAtLWFib3J0XCIg5oGi5aSN5Y6f5pyJ5YiG5pSv77yJIgorCisjOiB3dC1zdGF0dXMuYzoxMTA1Cittc2dpZCAiTm8gY29tbWFuZHMgZG9uZS4iCittc2dzdHIgIuayoeacieWRveS7pOiiq+aJp+ihjOOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTEwOAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXN0IGNvbW1hbmQgZG9uZSAoJWQgY29tbWFuZCBkb25lKToiCittc2dpZF9wbHVyYWwgIkxhc3QgY29tbWFuZHMgZG9uZSAoJWQgY29tbWFuZHMgZG9uZSk6IgorbXNnc3RyWzBdICLmnIDlkI7kuIDmnaHlkb3ku6Tlt7LlrozmiJDvvIglZCDmnaHlkb3ku6TooqvmiafooYzvvInvvJoiCittc2dzdHJbMV0gIuacgOWQjueahOWRveS7pOW3suWujOaIkO+8iCVkIOadoeWRveS7pOiiq+aJp+ihjO+8ie+8miIKKworIzogd3Qtc3RhdHVzLmM6MTExOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIKK21zZ3N0ciAiICDvvIjmm7TlpJrlj4Lop4Hmlofku7YgJXPvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjExMjQKK21zZ2lkICJObyBjb21tYW5kcyByZW1haW5pbmcuIgorbXNnc3RyICLmnKrliankuIvku7vkvZXlkb3ku6TjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjExMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTmV4dCBjb21tYW5kIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZCk6IgorbXNnaWRfcGx1cmFsICJOZXh0IGNvbW1hbmRzIHRvIGRvICglZCByZW1haW5pbmcgY29tbWFuZHMpOiIKK21zZ3N0clswXSAi5o6l5LiL5p2l6KaB5omn6KGM55qE5ZG95Luk77yI5Ymp5L2ZICVkIOadoeWRveS7pO+8ie+8miIKK21zZ3N0clsxXSAi5o6l5LiL5p2l6KaB5omn6KGM55qE5ZG95Luk77yI5Ymp5L2ZICVkIOadoeWRveS7pO+8ie+8miIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMTM1Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCByZWJhc2UgLS1lZGl0LXRvZG9cIiDmnaXmn6XnnIvlkoznvJbovpHvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjExNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iCittc2dzdHIgIuaCqOWcqOaJp+ihjOWwhuWIhuaUryAnJXMnIOWPmOWfuuWIsCAnJXMnIOeahOaTjeS9nOOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTE1MworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nLiIKK21zZ3N0ciAi5oKo5Zyo5omn6KGM5Y+Y5Z+65pON5L2c44CCIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjExNjcKK21zZ2lkICIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICDvvIjop6PlhrPlhrLnqoHvvIznhLblkI7ov5DooYwgXCJnaXQgcmViYXNlIC0tY29udGludWVcIu+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMTY5Cittc2dpZCAiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCByZWJhc2UgLS1za2lwXCIg6Lez6L+H5q2k6KGl5LiB77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjExNzEKK21zZ2lkICIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCIg5Lul5qOA5Ye65Y6f5pyJ5YiG5pSv77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjExNzcKK21zZ2lkICIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI5omA5pyJ5Yay56qB5bey6Kej5Yaz77ya6L+Q6KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjExODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAi5oKo5Zyo5omn6KGM5bCG5YiG5pSvICclcycg5Y+Y5Z+65YiwICclcycg55qE5pON5L2c5pe25ouG5YiG5o+Q5Lqk44CCIgorCisjOiB3dC1zdGF0dXMuYzoxMTg2Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgc3BsaXR0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iCittc2dzdHIgIuaCqOWcqOaJp+ihjOWPmOWfuuaTjeS9nOaXtuaLhuWIhuaPkOS6pOOAgiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMTg5Cittc2dpZCAiICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI5LiA5pem5oKo5bel5L2c55uu5b2V5o+Q5Lqk5bmy5YeA5ZCO77yM6L+Q6KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjExOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIKK21zZ3N0ciAi5oKo5Zyo5omn6KGM5bCG5YiG5pSvICclcycg5Y+Y5Z+65YiwICclcycg55qE5pON5L2c5pe257yW6L6R5o+Q5Lqk44CCIgorCisjOiB3dC1zdGF0dXMuYzoxMTk4Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIgorbXNnc3RyICLmgqjlnKjmiafooYzlj5jln7rmk43kvZzml7bnvJbovpHmj5DkuqTjgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTIwMQorbXNnaWQgIiAgKHVzZSBcImdpdCBjb21taXQgLS1hbWVuZFwiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIg5L+u6KGl5b2T5YmN5o+Q5Lqk77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjEyMDMKK21zZ2lkICIiCisiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiCittc2dzdHIgIiAg77yI5b2T5oKo5a+55oKo55qE5L+u5pS55ruh5oSP5ZCO5omn6KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjEyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcgY29tbWl0ICVzLiIKK21zZ3N0ciAi5oKo5Zyo5omn6KGM5ouj6YCJ5o+Q5LqkICVzIOeahOaTjeS9nOOAgiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMjE4Cittc2dpZCAiICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI6Kej5Yaz5Yay56qB5bm26L+Q6KGMIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIu+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMjIxCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIikiCittc2dzdHIgIiAg77yI5omA5pyJ5Yay56qB5bey6Kej5Yaz77ya6L+Q6KGMIFwiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWVcIu+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMjIzCittc2dpZCAiICAodXNlIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikiCittc2dzdHIgIiAg77yI5L2/55SoIFwiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnRcIiDku6Xlj5bmtojmi6PpgInmk43kvZzvvIkiCisKKyM6IHd0LXN0YXR1cy5jOjEyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAlcy4iCittc2dzdHIgIuaCqOWcqOaJp+ihjOWPjei9rOaPkOS6pCAlcyDnmoTmk43kvZzjgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTIzNworbXNnaWQgIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCByZXZlcnQgLS1jb250aW51ZVwiKSIKK21zZ3N0ciAiICDvvIjop6PlhrPlhrLnqoHlubbov5DooYwgXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIu+8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMjQwCittc2dpZCAiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIgorbXNnc3RyICIgIO+8iOaJgOacieWGsueqgeW3suino+WGs++8mui/kOihjCBcImdpdCByZXZlcnQgLS1jb250aW51ZVwi77yJIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjEyNDIKK21zZ2lkICIgICh1c2UgXCJnaXQgcmV2ZXJ0IC0tYWJvcnRcIiB0byBjYW5jZWwgdGhlIHJldmVydCBvcGVyYXRpb24pIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCByZXZlcnQgLS1hYm9ydFwiIOS7peWPlua2iOWPjei9rOaPkOS6pOaTjeS9nO+8iSIKKworIzogd3Qtc3RhdHVzLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJyVzJy4iCittc2dzdHIgIuaCqOWcqOaJp+ihjOS7juWIhuaUryAnJXMnIOW8gOWni+eahOS6jOWIhuafpeaJvuaTjeS9nOOAgiIKKworIzogd3Qtc3RhdHVzLmM6MTI1NworbXNnaWQgIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iCittc2dzdHIgIuaCqOWcqOaJp+ihjOS6jOWIhuafpeaJvuaTjeS9nOOAgiIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiB3dC1zdGF0dXMuYzoxMjYwCittc2dpZCAiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIgorbXNnc3RyICIgIO+8iOS9v+eUqCBcImdpdCBiaXNlY3QgcmVzZXRcIiDku6Xlm57liLDljp/mnInliIbmlK/vvIkiCisKKyM6IHd0LXN0YXR1cy5jOjE0MzcKK21zZ2lkICJPbiBicmFuY2ggIgorbXNnc3RyICLkvY3kuo7liIbmlK8gIgorCisjOiB3dC1zdGF0dXMuYzoxNDQ1Cittc2dpZCAiaW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIKK21zZ3N0ciAi5Lqk5LqS5byP5Y+Y5Z+65pON5L2c5q2j5Zyo6L+b6KGM5Lit77yb6IezICIKKworIzogd3Qtc3RhdHVzLmM6MTQ0NworbXNnaWQgInJlYmFzZSBpbiBwcm9ncmVzczsgb250byAiCittc2dzdHIgIuWPmOWfuuaTjeS9nOato+WcqOi/m+ihjOS4re+8m+iHsyAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NTIKK21zZ2lkICJIRUFEIGRldGFjaGVkIGF0ICIKK21zZ3N0ciAi5aS05oyH6ZKI5YiG56a75LqOICIKKworIzogd3Qtc3RhdHVzLmM6MTQ1NAorbXNnaWQgIkhFQUQgZGV0YWNoZWQgZnJvbSAiCittc2dzdHIgIuWktOaMh+mSiOWIhuemu+iHqiAiCisKKyM6IHd0LXN0YXR1cy5jOjE0NTcKK21zZ2lkICJOb3QgY3VycmVudGx5IG9uIGFueSBicmFuY2guIgorbXNnc3RyICLlvZPliY3kuI3lnKjku7vkvZXliIbmlK/kuIrjgIIiCisKKyM6IHd0LXN0YXR1cy5jOjE0NzQKK21zZ2lkICJJbml0aWFsIGNvbW1pdCIKK21zZ3N0ciAi5Yid5aeL5o+Q5LqkIgorCisjOiB3dC1zdGF0dXMuYzoxNDg4Cittc2dpZCAiVW50cmFja2VkIGZpbGVzIgorbXNnc3RyICLmnKrot5/ouKrnmoTmlofku7YiCisKKyM6IHd0LXN0YXR1cy5jOjE0OTAKK21zZ2lkICJJZ25vcmVkIGZpbGVzIgorbXNnc3RyICLlv73nlaXnmoTmlofku7YiCisKKyM6IHd0LXN0YXR1cy5jOjE0OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkl0IHRvb2sgJS4yZiBzZWNvbmRzIHRvIGVudW1lcmF0ZSB1bnRyYWNrZWQgZmlsZXMuICdzdGF0dXMgLXVubydcbiIKKyJtYXkgc3BlZWQgaXQgdXAsIGJ1dCB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBmb3JnZXQgdG8gYWRkXG4iCisibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIKK21zZ3N0ciAiIgorIuiAl+i0ueS6hiAlLjJmIOenkuS7peaemuS4vuacqui3n+i4queahOaWh+S7tuOAgidzdGF0dXMgLXVubycg5Lmf6K646IO95o+Q6auY6YCf5bqm77yMXG4iCisi5L2G5oKo6ZyA6KaB5bCP5b+D5LiN6KaB5b+Y5LqG5re75Yqg5paw5paH5Lu277yI5Y+C6KeBICdnaXQgaGVscCBzdGF0dXMn77yJ44CCIgorCisjOiB3dC1zdGF0dXMuYzoxNTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIlVudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkJXMiCittc2dzdHIgIuacqui3n+i4queahOaWh+S7tuayoeacieWIl+WHuiVzIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE1MDIKK21zZ2lkICIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIgorbXNnc3RyICLvvIjkvb/nlKggLXUg5Y+C5pWw5pi+56S65pyq6Lef6Liq55qE5paH5Lu277yJIgorCisjOiB3dC1zdGF0dXMuYzoxNTA4Cittc2dpZCAiTm8gY2hhbmdlcyIKK21zZ3N0ciAi5rKh5pyJ5L+u5pS5IgorCisjOiB3dC1zdGF0dXMuYzoxNTEzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIgorbXNnc3RyICLkv67mlLnlsJrmnKrliqDlhaXmj5DkuqTvvIjkvb/nlKggXCJnaXQgYWRkXCIg5ZKML+aIliBcImdpdCBjb21taXQgLWFcIu+8iVxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTE2CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0XG4iCittc2dzdHIgIuS/ruaUueWwmuacquWKoOWFpeaPkOS6pFxuIgorCisjOiB3dC1zdGF0dXMuYzoxNTE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnQgKHVzZSBcImdpdCBhZGRcIiB0byAiCisidHJhY2spXG4iCittc2dzdHIgIuaPkOS6pOS4uuepuu+8jOS9huaYr+WtmOWcqOWwmuacqui3n+i4queahOaWh+S7tu+8iOS9v+eUqCBcImdpdCBhZGRcIiDlu7rnq4vot5/ouKrvvIlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUyMgorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzIHByZXNlbnRcbiIKK21zZ3N0ciAi5o+Q5Lqk5Li656m677yM5L2G5piv5a2Y5Zyo5bCa5pyq6Lef6Liq55qE5paH5Lu2XG4iCisKKyMgIOivkeiAhe+8muS4reaWh+Wtl+espuS4suaLvOaOpe+8jOWPr+WIoOmZpOWJjeWvvOepuuagvAorIzogd3Qtc3RhdHVzLmM6MTUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJub3RoaW5nIHRvIGNvbW1pdCAoY3JlYXRlL2NvcHkgZmlsZXMgYW5kIHVzZSBcImdpdCBhZGRcIiB0byB0cmFjaylcbiIKK21zZ3N0ciAi5peg5paH5Lu26KaB5o+Q5Lqk77yI5Yib5bu6L+aLt+i0neaWh+S7tuW5tuS9v+eUqCBcImdpdCBhZGRcIiDlu7rnq4vot5/ouKrvvIlcbiIKKworIzogd3Qtc3RhdHVzLmM6MTUyOCB3dC1zdGF0dXMuYzoxNTMzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdGhpbmcgdG8gY29tbWl0XG4iCittc2dzdHIgIuaXoOaWh+S7tuimgeaPkOS6pFxuIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE1MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcylcbiIKK21zZ3N0ciAi5peg5paH5Lu26KaB5o+Q5Lqk77yI5L2/55SoIC11IOaYvuekuuacqui3n+i4queahOaWh+S7tu+8iVxuIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE1MzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90aGluZyB0byBjb21taXQsIHdvcmtpbmcgZGlyZWN0b3J5IGNsZWFuXG4iCittc2dzdHIgIuaXoOaWh+S7tuimgeaPkOS6pO+8jOW5suWHgOeahOW3peS9nOWMulxuIgorCisjOiB3dC1zdGF0dXMuYzoxNjQ0Cittc2dpZCAiSEVBRCAobm8gYnJhbmNoKSIKK21zZ3N0ciAiSEVBRO+8iOmdnuWIhuaUr++8iSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5Y+l5bC+56m65qC8CisjOiB3dC1zdGF0dXMuYzoxNjUwCittc2dpZCAiSW5pdGlhbCBjb21taXQgb24gIgorbXNnc3RyICLliJ3lp4vmj5DkuqTkuo4gIgorCisjOiB3dC1zdGF0dXMuYzoxNjc3Cittc2dpZCAiZ29uZSIKK21zZ3N0ciAi5Lii5aSxIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHlj6XlsL7nqbrmoLwKKyM6IHd0LXN0YXR1cy5jOjE2Nzkgd3Qtc3RhdHVzLmM6MTY4NworbXNnaWQgImJlaGluZCAiCittc2dzdHIgIuiQveWQjiAiCisKKyM6IGNvbXBhdC9wcmVjb21wb3NlX3V0ZjguYzo1NSBidWlsdGluL2Nsb25lLmM6NDAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byB1bmxpbmsgJyVzJyIKK21zZ3N0ciAi5peg5rOV5Yig6ZmkICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjIKK21zZ2lkICJnaXQgYWRkIFs8b3B0aW9ucz5dIFstLV0gPHBhdGhzcGVjPi4uLiIKK21zZ3N0ciAiZ2l0IGFkZCBbPOmAiemhuT5dIFstLV0gPOi3r+W+hOinhOagvD4uLi4iCisKKyM6IGJ1aWx0aW4vYWRkLmM6NjUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBkaWZmIHN0YXR1cyAlYyIKK21zZ3N0ciAi5oSP5aSW55qE5beu5byC54q25oCBICVjIgorCisjOiBidWlsdGluL2FkZC5jOjcwIGJ1aWx0aW4vY29tbWl0LmM6Mjc3Cittc2dpZCAidXBkYXRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLmm7TmlrDmlofku7blpLHotKUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVtb3ZlICclcydcbiIKK21zZ3N0ciAi5Yig6ZmkICclcydcbiIKKworIzogYnVpbHRpbi9hZGQuYzoxMzQKK21zZ2lkICJVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlZnJlc2hpbmcgdGhlIGluZGV4OiIKK21zZ3N0ciAi5Yi35paw57Si5byV5LmL5ZCO5bCa5pyq6KKr5pqC5a2Y55qE5Y+Y5pu077yaIgorCisjOiBidWlsdGluL2FkZC5jOjE5NCBidWlsdGluL3Jldi1wYXJzZS5jOjc5OQorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAi5LiN6IO96K+75Y+W57Si5byVIgorCisjOiBidWlsdGluL2FkZC5jOjIwNQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nLiIKK21zZ3N0ciAi5peg5rOV5omT5byAICclcycg6L+b6KGM5YaZ5YWl44CCIgorCisjOiBidWlsdGluL2FkZC5jOjIwOQorbXNnaWQgIkNvdWxkIG5vdCB3cml0ZSBwYXRjaCIKK21zZ3N0ciAi5LiN6IO955Sf5oiQ6KGl5LiBIgorCisjOiBidWlsdGluL2FkZC5jOjIxMgorbXNnaWQgImVkaXRpbmcgcGF0Y2ggZmFpbGVkIgorbXNnc3RyICLnvJbovpHooaXkuIHlpLHotKUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzdGF0ICclcyciCittc2dzdHIgIuS4jeiDveafpeeci+aWh+S7tueKtuaAgSAnJXMnIgorCisjOiBidWlsdGluL2FkZC5jOjIxNworbXNnaWQgIkVtcHR5IHBhdGNoLiBBYm9ydGVkLiIKK21zZ3N0ciAi56m66KGl5LiB44CC5byC5bi457uI5q2i44CCIgorCisjOiBidWlsdGluL2FkZC5jOjIyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwbHkgJyVzJyIKK21zZ3N0ciAi5LiN6IO95bqU55SoICclcyciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjMyCittc2dpZCAiVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorbXNnc3RyICLkuIvliJfot6/lvoTmoLnmja7mgqjnmoTkuIDkuKogLmdpdGlnbm9yZSDmlofku7bogIzooqvlv73nlaXvvJpcbiIKKworIzogYnVpbHRpbi9hZGQuYzoyNDkgYnVpbHRpbi9jbGVhbi5jOjg5NiBidWlsdGluL2ZldGNoLmM6MTA4IGJ1aWx0aW4vbXYuYzoxMTAKKyM6IGJ1aWx0aW4vcHJ1bmUtcGFja2VkLmM6NTUgYnVpbHRpbi9wdWxsLmM6MTgyIGJ1aWx0aW4vcHVzaC5jOjU0NQorIzogYnVpbHRpbi9yZW1vdGUuYzoxMzM5IGJ1aWx0aW4vcm0uYzoyNjggYnVpbHRpbi9zZW5kLXBhY2suYzoxNjIKK21zZ2lkICJkcnkgcnVuIgorbXNnc3RyICLmvJTkuaAiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjUwIGJ1aWx0aW4vYXBwbHkuYzo0NTgwIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMyMSBidWlsdGluL2NvdW50LW9iamVjdHMuYzo2MyBidWlsdGluL2ZzY2suYzo2MzYKKyM6IGJ1aWx0aW4vbG9nLmM6MTY0MSBidWlsdGluL212LmM6MTA5IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE0Cittc2dpZCAiYmUgdmVyYm9zZSIKK21zZ3N0ciAi5YaX6ZW/6L6T5Ye6IgorCisjOiBidWlsdGluL2FkZC5jOjI1MgorbXNnaWQgImludGVyYWN0aXZlIHBpY2tpbmciCittc2dzdHIgIuS6pOS6kuW8j+aLo+mAiSIKKworIzogYnVpbHRpbi9hZGQuYzoyNTMgYnVpbHRpbi9jaGVja291dC5jOjExNTIgYnVpbHRpbi9yZXNldC5jOjI4NgorbXNnaWQgInNlbGVjdCBodW5rcyBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICLkuqTkupLlvI/mjJHpgInmlbDmja7lnZciCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU0Cittc2dpZCAiZWRpdCBjdXJyZW50IGRpZmYgYW5kIGFwcGx5IgorbXNnc3RyICLnvJbovpHlvZPliY3lt67lvILlubblupTnlKgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU1Cittc2dpZCAiYWxsb3cgYWRkaW5nIG90aGVyd2lzZSBpZ25vcmVkIGZpbGVzIgorbXNnc3RyICLlhYHorrjmt7vliqDlv73nlaXnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjU2Cittc2dpZCAidXBkYXRlIHRyYWNrZWQgZmlsZXMiCittc2dzdHIgIuabtOaWsOW3sui3n+i4queahOaWh+S7tiIKKworIzogYnVpbHRpbi9hZGQuYzoyNTcKK21zZ2lkICJyZWNvcmQgb25seSB0aGUgZmFjdCB0aGF0IHRoZSBwYXRoIHdpbGwgYmUgYWRkZWQgbGF0ZXIiCittc2dzdHIgIuWPquiusOW9le+8jOivpei3r+W+hOeojeWQjuWGjea3u+WKoCIKKworIzogYnVpbHRpbi9hZGQuYzoyNTgKK21zZ2lkICJhZGQgY2hhbmdlcyBmcm9tIGFsbCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIua3u+WKoOaJgOacieaUueWPmOeahOW3sui3n+i4quaWh+S7tuWSjOacqui3n+i4quaWh+S7tiIKKworIzogYnVpbHRpbi9hZGQuYzoyNjEKK21zZ2lkICJpZ25vcmUgcGF0aHMgcmVtb3ZlZCBpbiB0aGUgd29ya2luZyB0cmVlIChzYW1lIGFzIC0tbm8tYWxsKSIKK21zZ3N0ciAi5b+955Wl5bel5L2c5Yy65Lit56e76Zmk55qE6Lev5b6E77yI5ZKMIC0tbm8tYWxsIOebuOWQjO+8iSIKKworIzogYnVpbHRpbi9hZGQuYzoyNjMKK21zZ2lkICJkb24ndCBhZGQsIG9ubHkgcmVmcmVzaCB0aGUgaW5kZXgiCittc2dzdHIgIuS4jea3u+WKoO+8jOWPquWIt+aWsOe0ouW8lSIKKworIzogYnVpbHRpbi9hZGQuYzoyNjQKK21zZ2lkICJqdXN0IHNraXAgZmlsZXMgd2hpY2ggY2Fubm90IGJlIGFkZGVkIGJlY2F1c2Ugb2YgZXJyb3JzIgorbXNnc3RyICLot7Pov4flm6Dlh7rplJnkuI3og73mt7vliqDnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MjY1Cittc2dpZCAiY2hlY2sgaWYgLSBldmVuIG1pc3NpbmcgLSBmaWxlcyBhcmUgaWdub3JlZCBpbiBkcnkgcnVuIgorbXNnc3RyICLmo4Dmn6XlnKjmvJTkuaDmqKHlvI/kuIvmlofku7bvvIjljbPkvb/kuI3lrZjlnKjvvInmmK/lkKbooqvlv73nlaUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6Mjg3CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzZSAtZiBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gYWRkIHRoZW0uXG4iCittc2dzdHIgIuS9v+eUqCAtZiDlj4LmlbDlpoLmnpzmgqjnoa7lrp7opoHmt7vliqDlroPku6zjgIJcbiIKKworIzogYnVpbHRpbi9hZGQuYzoyOTQKK21zZ2lkICJhZGRpbmcgZmlsZXMgZmFpbGVkIgorbXNnc3RyICLmt7vliqDmlofku7blpLHotKUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzMwCittc2dpZCAiLUEgYW5kIC11IGFyZSBtdXR1YWxseSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi1BIOWSjCAtdSDpgInpobnkupLmlqUiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzM3Cittc2dpZCAiT3B0aW9uIC0taWdub3JlLW1pc3NpbmcgY2FuIG9ubHkgYmUgdXNlZCB0b2dldGhlciB3aXRoIC0tZHJ5LXJ1biIKK21zZ3N0ciAi6YCJ6aG5IC0taWdub3JlLW1pc3Npbmcg5Y+q6IO95ZKMIC0tZHJ5LXJ1biDlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vYWRkLmM6MzU4CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdGhpbmcgc3BlY2lmaWVkLCBub3RoaW5nIGFkZGVkLlxuIgorbXNnc3RyICLmsqHmnInmjIflrprmlofku7bvvIzkuZ/msqHmnInmlofku7booqvmt7vliqDjgIJcbiIKKworIzogYnVpbHRpbi9hZGQuYzozNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWF5YmUgeW91IHdhbnRlZCB0byBzYXkgJ2dpdCBhZGQgLic/XG4iCittc2dzdHIgIuS5n+iuuOaCqOaDs+imgeaJp+ihjCAnZ2l0IGFkZCAuJ++8n1xuIgorCisjOiBidWlsdGluL2FkZC5jOjM2NCBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE3MiBidWlsdGluL2NsZWFuLmM6OTQwCisjOiBidWlsdGluL2NvbW1pdC5jOjMzNiBidWlsdGluL212LmM6MTMwIGJ1aWx0aW4vcmVzZXQuYzoyMzUgYnVpbHRpbi9ybS5jOjI5OAorbXNnaWQgImluZGV4IGZpbGUgY29ycnVwdCIKK21zZ3N0ciAi57Si5byV5paH5Lu25o2f5Z2PIgorCisjOiBidWlsdGluL2FkZC5jOjQ0NSBidWlsdGluL2FwcGx5LmM6NDY3OCBidWlsdGluL212LmM6Mjc5IGJ1aWx0aW4vcm0uYzo0MzAKK21zZ2lkICJVbmFibGUgdG8gd3JpdGUgbmV3IGluZGV4IGZpbGUiCittc2dzdHIgIuaXoOazleWGmeWFpeaWsOe0ouW8leaWh+S7tiIKKworIzogYnVpbHRpbi9hbS5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBzdGF0ICVzIgorbXNnc3RyICLkuI3og73ojrflj5YgJXMg55qE5paH5Lu254q25oCBIgorCisjOiBidWlsdGluL2FtLmM6MjcwIGJ1aWx0aW4vYW0uYzoxMzQ1IGJ1aWx0aW4vY29tbWl0LmM6NzM3CisjOiBidWlsdGluL21lcmdlLmM6MTA3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5YgJyVzJyIKKworIzogYnVpbHRpbi9hbS5jOjQ0NAorbXNnaWQgImNvdWxkIG5vdCBwYXJzZSBhdXRob3Igc2NyaXB0IgorbXNnc3RyICLkuI3og73op6PmnpDkvZzogIXohJrmnKwiCisKKyM6IGJ1aWx0aW4vYW0uYzo1MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyB3YXMgZGVsZXRlZCBieSB0aGUgYXBwbHlwYXRjaC1tc2cgaG9vayIKK21zZ3N0ciAiJyVzJyDooqsgYXBwbHlwYXRjaC1tc2cg6ZKp5a2Q5Yig6ZmkIgorCisjOiBidWlsdGluL2FtLmM6NTYyIGJ1aWx0aW4vbm90ZXMuYzozMDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiTWFsZm9ybWVkIGlucHV0IGxpbmU6ICclcycuIgorbXNnc3RyICLpnZ7ms5XnmoTovpPlhaXooYzvvJonJXMn44CCIgorCisjOiBidWlsdGluL2FtLmM6NTk5IGJ1aWx0aW4vbm90ZXMuYzozMTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIGNvcHkgbm90ZXMgZnJvbSAnJXMnIHRvICclcyciCittc2dzdHIgIuS7jiAnJXMnIOaLt+i0neazqOino+WIsCAnJXMnIOaXtuWksei0pSIKKworIzogYnVpbHRpbi9hbS5jOjYyNQorbXNnaWQgImZzZWVrIGZhaWxlZCIKK21zZ3N0ciAiZnNlZWsg5aSx6LSlIgorCisjOiBidWlsdGluL2FtLmM6Nzg2IGJ1aWx0aW4vYW0uYzo4NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZzogJXMiCittc2dzdHIgIuaXoOazleaJk+W8gCAnJXMnIOi/m+ihjOivu+WPlu+8miVzIgorCisjOiBidWlsdGluL2FtLmM6NzkzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmc6ICVzIgorbXNnc3RyICLml6Dms5XmiZPlvIAgJyVzJyDov5vooYzlhpnlhaXvvJolcyIKKworIzogYnVpbHRpbi9hbS5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgcGF0Y2ggJyVzJyIKK21zZ3N0ciAi5peg5rOV6Kej5p6Q6KGl5LiBICclcyciCisKKyM6IGJ1aWx0aW4vYW0uYzo4NjcKK21zZ2lkICJPbmx5IG9uZSBTdEdJVCBwYXRjaCBzZXJpZXMgY2FuIGJlIGFwcGxpZWQgYXQgb25jZSIKK21zZ3N0ciAi5LiA5qyh5Y+q6IO95pyJ5LiA5LiqIFN0R0lUIOihpeS4gemYn+WIl+iiq+W6lOeUqCIKKworIzogYnVpbHRpbi9hbS5jOjkxNQorbXNnaWQgImludmFsaWQgdGltZXN0YW1wIgorbXNnc3RyICLml6DmlYjnmoTml7bpl7TmiLMiCisKKyM6IGJ1aWx0aW4vYW0uYzo5MTggYnVpbHRpbi9hbS5jOjkyNgorbXNnaWQgImludmFsaWQgRGF0ZSBsaW5lIgorbXNnc3RyICLml6DmlYjnmoTml6XmnJ/ooYwiCisKKyM6IGJ1aWx0aW4vYW0uYzo5MjMKK21zZ2lkICJpbnZhbGlkIHRpbWV6b25lIG9mZnNldCIKK21zZ3N0ciAi5peg5pWI55qE5pe25Yy65YGP56e75YC8IgorCisjOiBidWlsdGluL2FtLmM6MTAxMAorbXNnaWQgIlBhdGNoIGZvcm1hdCBkZXRlY3Rpb24gZmFpbGVkLiIKK21zZ3N0ciAi6KGl5LiB5qC85byP5qOA5rWL5aSx6LSl44CCIgorCisjOiBidWlsdGluL2FtLmM6MTAxNSBidWlsdGluL2Nsb25lLmM6MzY4CisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICclcyciCittc2dzdHIgIuaXoOazleWIm+W7uuebruW9lSAnJXMnIgorCisjOiBidWlsdGluL2FtLmM6MTAxOQorbXNnaWQgIkZhaWxlZCB0byBzcGxpdCBwYXRjaGVzLiIKK21zZ3N0ciAi5peg5rOV5ouG5YiG6KGl5LiB44CCIgorCisjOiBidWlsdGluL2FtLmM6MTE1MSBidWlsdGluL2NvbW1pdC5jOjM2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlhpnlhaXntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjAyCisjLCBjLWZvcm1hdAorbXNnaWQgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCIlcyAtLWNvbnRpbnVlXCIuIgorbXNnc3RyICLlvZPmgqjop6PlhrPov5nkuIDpl67popjvvIzmiafooYwgXCIlcyAtLWNvbnRpbnVlXCLjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIklmIHlvdSBwcmVmZXIgdG8gc2tpcCB0aGlzIHBhdGNoLCBydW4gXCIlcyAtLXNraXBcIiBpbnN0ZWFkLiIKK21zZ3N0ciAi5aaC5p6c5oKo5oOz6KaB6Lez6L+H6L+Z5LiA6KGl5LiB77yM5YiZ5omn6KGMIFwiJXMgLS1za2lwXCLjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxMjA0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgc3RvcCBwYXRjaGluZywgcnVuIFwiJXMgLS1hYm9ydFwiLiIKK21zZ3N0ciAi6Iul6KaB5aSN5Y6f6Iez5Y6f5aeL5YiG5pSv5bm25YGc5q2i6KGl5LiB5pON5L2c77yM5omn6KGMIFwiJXMgLS1hYm9ydFwi44CCIgorCisjOiBidWlsdGluL2FtLmM6MTMzOQorbXNnaWQgIlBhdGNoIGlzIGVtcHR5LiBXYXMgaXQgc3BsaXQgd3Jvbmc/IgorbXNnc3RyICLooaXkuIHkuLrnqbrjgILmmK/kuI3mmK/liIfliIbplJnor6/vvJ8iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNDEzIGJ1aWx0aW4vbG9nLmM6MTM0NQorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGlkZW50IGxpbmU6ICVzIgorbXNnc3RyICLljIXlkKvml6DmlYjnmoTouqvku73moIfor4bvvJolcyIKKworIzogYnVpbHRpbi9hbS5jOjE0NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHBhcnNlIGNvbW1pdCAlcyIKK21zZ3N0ciAi5LiN6IO96Kej5p6Q5o+Q5LqkICVzIgorCisjOiBidWlsdGluL2FtLmM6MTYxNAorbXNnaWQgIlJlcG9zaXRvcnkgbGFja3MgbmVjZXNzYXJ5IGJsb2JzIHRvIGZhbGwgYmFjayBvbiAzLXdheSBtZXJnZS4iCittc2dzdHIgIuS7k+W6k+e8uuS5j+W/heimgeeahOaVsOaNruWvueixoeS7pei/m+ihjOS4ieaWueWQiOW5tuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE2MTYKK21zZ2lkICJVc2luZyBpbmRleCBpbmZvIHRvIHJlY29uc3RydWN0IGEgYmFzZSB0cmVlLi4uIgorbXNnc3RyICLkvb/nlKjntKLlvJXmnaXph43lu7rkuIDkuKrvvIjkuInmlrnlkIjlubbnmoTvvInln7rnoYDnm67lvZXmoJEuLi4iCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjM1Cittc2dpZCAiIgorIkRpZCB5b3UgaGFuZCBlZGl0IHlvdXIgcGF0Y2g/XG4iCisiSXQgZG9lcyBub3QgYXBwbHkgdG8gYmxvYnMgcmVjb3JkZWQgaW4gaXRzIGluZGV4LiIKK21zZ3N0ciAiIgorIuaCqOaYr+WQpuabvuaJi+WKqOe8lui+kei/h+aCqOeahOihpeS4ge+8n1xuIgorIuaXoOazleW6lOeUqOihpeS4geWIsOe0ouW8leS4reeahOaVsOaNruWvueixoeS4iuOAgiIKKworIzogYnVpbHRpbi9hbS5jOjE2NDEKK21zZ2lkICJGYWxsaW5nIGJhY2sgdG8gcGF0Y2hpbmcgYmFzZSBhbmQgMy13YXkgbWVyZ2UuLi4iCittc2dzdHIgIuWbnuiQveWIsOWfuuehgOeJiOacrOS4iuaJk+ihpeS4geWPiui/m+ihjOS4ieaWueWQiOW5ti4uLiIKKworIzogYnVpbHRpbi9hbS5jOjE2NjYKK21zZ2lkICJGYWlsZWQgdG8gbWVyZ2UgaW4gdGhlIGNoYW5nZXMuIgorbXNnc3RyICLml6Dms5XlkIjlubblj5jmm7TjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjkxIGJ1aWx0aW4vbWVyZ2UuYzo2MzIKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBmYWlsZWQgdG8gd3JpdGUgYSB0cmVlIgorbXNnc3RyICJnaXQgd3JpdGUtdHJlZSDml6Dms5XlhpnlhaXkuIDmoJHlr7nosaEiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNjk4Cittc2dpZCAiYXBwbHlpbmcgdG8gYW4gZW1wdHkgaGlzdG9yeSIKK21zZ3N0ciAi5q2j5bqU55So5Yiw5LiA5Liq56m65Y6G5Y+y5LiKIgorCisjOiBidWlsdGluL2FtLmM6MTcxMSBidWlsdGluL2NvbW1pdC5jOjE3NTIgYnVpbHRpbi9tZXJnZS5jOjgyOQorIzogYnVpbHRpbi9tZXJnZS5jOjg1NAorbXNnaWQgImZhaWxlZCB0byB3cml0ZSBjb21taXQgb2JqZWN0IgorbXNnc3RyICLml6Dms5Xlhpnmj5DkuqTlr7nosaEiCisKKyM6IGJ1aWx0aW4vYW0uYzoxNzQzIGJ1aWx0aW4vYW0uYzoxNzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZXN1bWU6ICVzIGRvZXMgbm90IGV4aXN0LiIKK21zZ3N0ciAi5peg5rOV57un57ut77yaJXMg5LiN5a2Y5Zyo44CCIgorCisjOiBidWlsdGluL2FtLmM6MTc2MworbXNnaWQgImNhbm5vdCBiZSBpbnRlcmFjdGl2ZSB3aXRob3V0IHN0ZGluIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiIKK21zZ3N0ciAi5qCH5YeG6L6T5YWl5rKh5pyJ5ZKM57uI56uv5YWz6IGU77yM5LiN6IO96L+b6KGM5Lqk5LqS5byP5pON5L2c44CCIgorCisjOiBidWlsdGluL2FtLmM6MTc2OAorbXNnaWQgIkNvbW1pdCBCb2R5IGlzOiIKK21zZ3N0ciAi5o+Q5Lqk5YaF5a655Li677yaIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHlj6XlsL7nqbrmoLwKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbeV0sIFtuXSwgW2VdLCBbdl0gYW5kIFthXQorIy4gaW4geW91ciB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoCisjLiBpbnB1dCBhdCB0aGlzIHBvaW50LgorIy4KKyM6IGJ1aWx0aW4vYW0uYzoxNzc4Cittc2dpZCAiQXBwbHk/IFt5XWVzL1tuXW8vW2VdZGl0L1t2XWlldyBwYXRjaC9bYV1jY2VwdCBhbGw6ICIKK21zZ3N0ciAi5bqU55So77yf5pivW3ldL+WQpltuXS/nvJbovpFbZV0v5p+l55yL6KGl5LiBW3ZdL+W6lOeUqOaJgOaciVthXe+8miIKKworIzogYnVpbHRpbi9hbS5jOjE4MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRGlydHkgaW5kZXg6IGNhbm5vdCBhcHBseSBwYXRjaGVzIChkaXJ0eTogJXMpIgorbXNnc3RyICLohI/ntKLlvJXvvJrkuI3og73lupTnlKjooaXkuIHvvIjohI/mlofku7bvvJolc++8iSIKKworIzogYnVpbHRpbi9hbS5jOjE4NjMgYnVpbHRpbi9hbS5jOjE5MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbHlpbmc6ICUuKnMiCittc2dzdHIgIuW6lOeUqO+8miUuKnMiCisKKyM6IGJ1aWx0aW4vYW0uYzoxODc5Cittc2dpZCAiTm8gY2hhbmdlcyAtLSBQYXRjaCBhbHJlYWR5IGFwcGxpZWQuIgorbXNnc3RyICLmsqHmnInlj5jmm7Qg4oCU4oCUIOihpeS4geW3sue7j+W6lOeUqOi/h+OAgiIKKworIzogYnVpbHRpbi9hbS5jOjE4ODcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICVzICUuKnMiCittc2dzdHIgIuaJk+ihpeS4geWksei0peS6jiAlcyAlLipzIgorCisjOiBidWlsdGluL2FtLmM6MTg5MworIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgY29weSBvZiB0aGUgcGF0Y2ggdGhhdCBmYWlsZWQgaXMgZm91bmQgaW46ICVzIgorbXNnc3RyICLlpLHotKXnmoTooaXkuIHmlofku7blia/mnKzkvY3kuo7vvJolcyIKKworIzogYnVpbHRpbi9hbS5jOjE5MzcKK21zZ2lkICIiCisiTm8gY2hhbmdlcyAtIGRpZCB5b3UgZm9yZ2V0IHRvIHVzZSAnZ2l0IGFkZCc/XG4iCisiSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIHN0YWdlLCBjaGFuY2VzIGFyZSB0aGF0IHNvbWV0aGluZyBlbHNlXG4iCisiYWxyZWFkeSBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZXM7IHlvdSBtaWdodCB3YW50IHRvIHNraXAgdGhpcyBwYXRjaC4iCittc2dzdHIgIiIKKyLmsqHmnInlj5jmm7Qg4oCU4oCUIOaCqOaYr+S4jeaYr+W/mOS6huaJp+ihjCAnZ2l0IGFkZCfvvJ9cbiIKKyLlpoLmnpzmsqHmnInku4DkuYjopoHmt7vliqDliLDmmoLlrZjljLrnmoTvvIzliJnlvojlj6/og73mmK/lhbblroPmj5DkuqTlt7Lnu4/lvJXlhaXkuobnm7jlkIznmoTlj5jmm7TjgIJcbiIKKyLmgqjkuZ/orrjmg7PopoHot7Pov4fov5nkuKrooaXkuIHjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoxOTQ0Cittc2dpZCAiIgorIllvdSBzdGlsbCBoYXZlIHVubWVyZ2VkIHBhdGhzIGluIHlvdXIgaW5kZXguXG4iCisiRGlkIHlvdSBmb3JnZXQgdG8gdXNlICdnaXQgYWRkJz8iCittc2dzdHIgIiIKKyLmgqjnmoTntKLlvJXkuK3ku43mnInmnKrlkIjlubbnmoTot6/lvoTjgIJcbiIKKyLmgqjmmK/lkKblv5jkuobmiafooYwgJ2dpdCBhZGQn77yfIgorCisjOiBidWlsdGluL2FtLmM6MjA1MiBidWlsdGluL2FtLmM6MjA1NiBidWlsdGluL2FtLmM6MjA2OCBidWlsdGluL3Jlc2V0LmM6MzA4CisjOiBidWlsdGluL3Jlc2V0LmM6MzE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBwYXJzZSBvYmplY3QgJyVzJy4iCittc2dzdHIgIuS4jeiDveino+aekOWvueixoSAnJXMn44CCIgorCisjOiBidWlsdGluL2FtLmM6MjEwNAorbXNnaWQgImZhaWxlZCB0byBjbGVhbiBpbmRleCIKK21zZ3N0ciAi5peg5rOV5riF56m657Si5byVIgorCisjOiBidWlsdGluL2FtLmM6MjEzOAorbXNnaWQgIiIKKyJZb3Ugc2VlbSB0byBoYXZlIG1vdmVkIEhFQUQgc2luY2UgdGhlIGxhc3QgJ2FtJyBmYWlsdXJlLlxuIgorIk5vdCByZXdpbmRpbmcgdG8gT1JJR19IRUFEIgorbXNnc3RyICLmgqjlpb3lg4/lnKjkuIrkuIDmrKEgJ2FtJyDlpLHotKXlkI7np7vliqjkuoYgSEVBROOAguacquWbnumAgOiHsyBPUklHX0hFQUQiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdmFsdWUgZm9yIC0tcGF0Y2gtZm9ybWF0OiAlcyIKK21zZ3N0ciAi5peg5pWI55qEIC0tcGF0Y2gtZm9ybWF0IOWAvO+8miVzIgorCisjOiBidWlsdGluL2FtLmM6MjIyMQorbXNnaWQgImdpdCBhbSBbb3B0aW9uc10gWyg8bWJveD58PE1haWxkaXI+KS4uLl0iCittc2dzdHIgImdpdCBhbSBb6YCJ6aG5XSBbKDxtYm94Pnw8TWFpbGRpcj4pLi4uXSIKKworIzogYnVpbHRpbi9hbS5jOjIyMjIKK21zZ2lkICJnaXQgYW0gW29wdGlvbnNdICgtLWNvbnRpbnVlIHwgLS1za2lwIHwgLS1hYm9ydCkiCittc2dzdHIgImdpdCBhbSBb6YCJ6aG5XSAoLS1jb250aW51ZSB8IC0tc2tpcCB8IC0tYWJvcnQpIgorCisjOiBidWlsdGluL2FtLmM6MjIyOAorbXNnaWQgInJ1biBpbnRlcmFjdGl2ZWx5IgorbXNnc3RyICLku6XkuqTkupLlvI/mlrnlvI/ov5DooYwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMwCittc2dpZCAiaGlzdG9yaWNhbCBvcHRpb24gLS0gbm8tb3AiCittc2dzdHIgIuiAgeeahOWPguaVsCDigJTigJQg5peg5L2c55SoIgorCisjOiBidWlsdGluL2FtLmM6MjIzMgorbXNnaWQgImFsbG93IGZhbGwgYmFjayBvbiAzd2F5IG1lcmdpbmcgaWYgbmVlZGVkIgorbXNnc3RyICLlpoLmnpzlv4XopoHvvIzlhYHorrjkvb/nlKjkuInmlrnlkIjlubbjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjMzIGJ1aWx0aW4vaW5pdC1kYi5jOjUwOSBidWlsdGluL3BydW5lLXBhY2tlZC5jOjU3CisjOiBidWlsdGluL3JlcGFjay5jOjE3MQorbXNnaWQgImJlIHF1aWV0IgorbXNnc3RyICLpnZnpu5jmqKHlvI8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjM1Cittc2dpZCAiYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi5Zyo5o+Q5Lqk6K+05piO5Lit5re75Yqg5LiA5LiqIFNpZ25lZC1vZmYtYnkg562+5ZCNIgorCisjOiBidWlsdGluL2FtLmM6MjIzOAorbXNnaWQgInJlY29kZSBpbnRvIHV0ZjggKGRlZmF1bHQpIgorbXNnc3RyICLkvb/nlKggdXRmOCDlrZfnrKbpm4bvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQwCittc2dpZCAicGFzcyAtayBmbGFnIHRvIGdpdC1tYWlsaW5mbyIKK21zZ3N0ciAi5ZCRIGdpdC1tYWlsaW5mbyDkvKDpgJIgLWsg5Y+C5pWwIgorCisjOiBidWlsdGluL2FtLmM6MjI0MgorbXNnaWQgInBhc3MgLWIgZmxhZyB0byBnaXQtbWFpbGluZm8iCittc2dzdHIgIuWQkSBnaXQtbWFpbGluZm8g5Lyg6YCSIC1iIOWPguaVsCIKKworIzogYnVpbHRpbi9hbS5jOjIyNDQKK21zZ2lkICJwYXNzIC1tIGZsYWcgdG8gZ2l0LW1haWxpbmZvIgorbXNnc3RyICLlkJEgZ2l0LW1haWxpbmZvIOS8oOmAkiAtbSDlj4LmlbAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ2Cittc2dpZCAicGFzcyAtLWtlZXAtY3IgZmxhZyB0byBnaXQtbWFpbHNwbGl0IGZvciBtYm94IGZvcm1hdCIKK21zZ3N0ciAi6ZKI5a+5IG1ib3gg5qC85byP77yM5ZCRIGdpdC1tYWlsc3BsaXQg5Lyg6YCSIC0ta2VlcC1jciDlj4LmlbAiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjQ5Cittc2dpZCAiZG8gbm90IHBhc3MgLS1rZWVwLWNyIGZsYWcgdG8gZ2l0LW1haWxzcGxpdCBpbmRlcGVuZGVudCBvZiBhbS5rZWVwY3IiCittc2dzdHIgIuS4jeWQkSBnaXQtbWFpbHNwbGl0IOS8oOmAkiAtLWtlZXAtY3Ig5Y+C5pWw77yM6KaG55uWIGFtLmtlZXBjciDnmoTorr7nva4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUyCittc2dpZCAic3RyaXAgZXZlcnl0aGluZyBiZWZvcmUgYSBzY2lzc29ycyBsaW5lIgorbXNnc3RyICLkuKLlvIPoo4HliIfnur/liY3nmoTmiYDmnInlhoXlrrkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjUzIGJ1aWx0aW4vYXBwbHkuYzo0NTYzCittc2dpZCAiYWN0aW9uIgorbXNnc3RyICLliqjkvZwiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjU0IGJ1aWx0aW4vYW0uYzoyMjU3IGJ1aWx0aW4vYW0uYzoyMjYwIGJ1aWx0aW4vYW0uYzoyMjYzCisjOiBidWlsdGluL2FtLmM6MjI2NiBidWlsdGluL2FtLmM6MjI2OSBidWlsdGluL2FtLmM6MjI3MiBidWlsdGluL2FtLmM6MjI3NQorIzogYnVpbHRpbi9hbS5jOjIyODEKK21zZ2lkICJwYXNzIGl0IHRocm91Z2ggZ2l0LWFwcGx5IgorbXNnc3RyICLkvKDpgJLnu5kgZ2l0LWFwcGx5IgorCisjOiBidWlsdGluL2FtLmM6MjI2MiBidWlsdGluL2FwcGx5LmM6NDU4NworbXNnaWQgInJvb3QiCittc2dzdHIgIuagueebruW9lSIKKworIzogYnVpbHRpbi9hbS5jOjIyNjUgYnVpbHRpbi9hbS5jOjIyNjggYnVpbHRpbi9hcHBseS5jOjQ1MjUKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTI4IGJ1aWx0aW4vY2xvbmUuYzo4NSBidWlsdGluL2ZldGNoLmM6OTMKKyM6IGJ1aWx0aW4vcHVsbC5jOjE2NworbXNnaWQgInBhdGgiCittc2dzdHIgIui3r+W+hCIKKworIzogYnVpbHRpbi9hbS5jOjIyNzEgYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjY5IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3MgorIzogYnVpbHRpbi9ncmVwLmM6Njk4IGJ1aWx0aW4vbWVyZ2UuYzoxOTggYnVpbHRpbi9wdWxsLmM6MTI3CisjOiBidWlsdGluL3JlcGFjay5jOjE3OCBidWlsdGluL3JlcGFjay5jOjE4MiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY0CisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTgwIGJ1aWx0aW4vdGFnLmM6NTkxIHBhcnNlLW9wdGlvbnMuaDoxMzIKKyM6IHBhcnNlLW9wdGlvbnMuaDoxMzQgcGFyc2Utb3B0aW9ucy5oOjI0MworbXNnaWQgIm4iCittc2dzdHIgIm4iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc0IGJ1aWx0aW4vYXBwbHkuYzo0NTMxCittc2dpZCAibnVtIgorbXNnc3RyICLmlbDlrZciCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc3IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzQgYnVpbHRpbi9yZXBsYWNlLmM6NDM4Cittc2dpZCAiZm9ybWF0IgorbXNnc3RyICLmoLzlvI8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjc4Cittc2dpZCAiZm9ybWF0IHRoZSBwYXRjaChlcykgYXJlIGluIgorbXNnc3RyICLooaXkuIHnmoTmoLzlvI8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg0Cittc2dpZCAib3ZlcnJpZGUgZXJyb3IgbWVzc2FnZSB3aGVuIHBhdGNoIGZhaWx1cmUgb2NjdXJzIgorbXNnc3RyICLmiZPooaXkuIHlpLHotKXml7bmmL7npLrnmoTplJnor6/kv6Hmga8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjg2Cittc2dpZCAiY29udGludWUgYXBwbHlpbmcgcGF0Y2hlcyBhZnRlciByZXNvbHZpbmcgYSBjb25mbGljdCIKK21zZ3N0ciAi5Yay56qB6Kej5Yaz5ZCO57un57ut5bqU55So6KGl5LiBIgorCisjOiBidWlsdGluL2FtLmM6MjI4OQorbXNnaWQgInN5bm9ueW1zIGZvciAtLWNvbnRpbnVlIgorbXNnc3RyICLlkowgLS1jb250aW51ZSDlkIzkuYkiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMjkyCittc2dpZCAic2tpcCB0aGUgY3VycmVudCBwYXRjaCIKK21zZ3N0ciAi6Lez6L+H5b2T5YmN6KGl5LiBIgorCisjOiBidWlsdGluL2FtLmM6MjI5NQorbXNnaWQgInJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCBhbmQgYWJvcnQgdGhlIHBhdGNoaW5nIG9wZXJhdGlvbi4iCittc2dzdHIgIuaBouWkjeWOn+Wni+WIhuaUr+W5tue7iOatouaJk+ihpeS4geaTjeS9nOOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIyOTkKK21zZ2lkICJsaWUgYWJvdXQgY29tbWl0dGVyIGRhdGUiCittc2dzdHIgIuWwhuS9nOiAheaXpeacn+S9nOS4uuaPkOS6pOaXpeacnyIKKworIzogYnVpbHRpbi9hbS5jOjIzMDEKK21zZ2lkICJ1c2UgY3VycmVudCB0aW1lc3RhbXAgZm9yIGF1dGhvciBkYXRlIgorbXNnc3RyICLnlKjlvZPliY3ml7bpl7TkvZzkuLrkvZzogIXml6XmnJ8iCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzAzIGJ1aWx0aW4vY29tbWl0LmM6MTU5MCBidWlsdGluL21lcmdlLmM6MjI1CisjOiBidWlsdGluL3B1bGwuYzoxNTUgYnVpbHRpbi9yZXZlcnQuYzo5MiBidWlsdGluL3RhZy5jOjYwNgorbXNnaWQgImtleS1pZCIKK21zZ3N0ciAia2V5LWlkIgorCisjOiBidWlsdGluL2FtLmM6MjMwNAorbXNnaWQgIkdQRy1zaWduIGNvbW1pdHMiCittc2dzdHIgIuS9v+eUqCBHUEcg562+5ZCN5o+Q5LqkIgorCisjOiBidWlsdGluL2FtLmM6MjMwNworbXNnaWQgIihpbnRlcm5hbCB1c2UgZm9yIGdpdC1yZWJhc2UpIgorbXNnc3RyICLvvIjlhoXpg6jkvb/nlKjvvIznlKjkuo4gZ2l0LXJlYmFzZe+8iSIKKworIzogYnVpbHRpbi9hbS5jOjIzMjIKK21zZ2lkICIiCisiVGhlIC1iLy0tYmluYXJ5IG9wdGlvbiBoYXMgYmVlbiBhIG5vLW9wIGZvciBsb25nIHRpbWUsIGFuZFxuIgorIml0IHdpbGwgYmUgcmVtb3ZlZC4gUGxlYXNlIGRvIG5vdCB1c2UgaXQgYW55bW9yZS4iCittc2dzdHIgIiIKKyLlj4LmlbAgLWIvLS1iaW5hcnkg5bey57uP5b6I6ZW/5pe26Ze05LiN5YGa5Lu75L2V5a6e6LSo5pON5L2c5LqG77yM5bm25LiU5bCG6KKr56e76Zmk44CCXG4iCisi6K+35LiN6KaB5YaN5L2/55So5a6D5LqG44CCIgorCisjOiBidWlsdGluL2FtLmM6MjMyOQorbXNnaWQgImZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIKK21zZ3N0ciAi5peg5rOV6K+75Y+W57Si5byVIgorCisjOiBidWlsdGluL2FtLmM6MjM0NAorIywgYy1mb3JtYXQKK21zZ2lkICJwcmV2aW91cyByZWJhc2UgZGlyZWN0b3J5ICVzIHN0aWxsIGV4aXN0cyBidXQgbWJveCBnaXZlbi4iCittc2dzdHIgIuS5i+WJjeeahOWPmOWfuuebruW9lSAlcyDku43nhLblrZjlnKjvvIzkvYbljbTmj5DkvpvkuoYgbWJveOOAgiIKKworIzogYnVpbHRpbi9hbS5jOjIzNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlN0cmF5ICVzIGRpcmVjdG9yeSBmb3VuZC5cbiIKKyJVc2UgXCJnaXQgYW0gLS1hYm9ydFwiIHRvIHJlbW92ZSBpdC4iCittc2dzdHIgIiIKKyLlj5HnjrDkuobplJnor6/nmoQgJXMg55uu5b2V44CCXG4iCisi5L2/55SoIFwiZ2l0IGFtIC0tYWJvcnRcIiDliKDpmaTlroPjgIIiCisKKyM6IGJ1aWx0aW4vYW0uYzoyMzc0Cittc2dpZCAiUmVzb2x2ZSBvcGVyYXRpb24gbm90IGluIHByb2dyZXNzLCB3ZSBhcmUgbm90IHJlc3VtaW5nLiIKK21zZ3N0ciAi6Kej5Yaz5pON5L2c5pyq6L+b6KGM77yM5oiR5Lus5LiN5Lya57un57ut44CCIgorCisjOiBidWlsdGluL2FwcGx5LmM6NTkKK21zZ2lkICJnaXQgYXBwbHkgWzxvcHRpb25zPl0gWzxwYXRjaD4uLi5dIgorbXNnc3RyICJnaXQgYXBwbHkgWzzpgInpobk+XSBbPOihpeS4gT4uLi5dIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCB3aGl0ZXNwYWNlIG9wdGlvbiAnJXMnIgorbXNnc3RyICLmnKrog73or4bliKvnmoTnqbrnmb3lrZfnrKbpgInpobkgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjEyNworIywgYy1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbml6ZWQgd2hpdGVzcGFjZSBpZ25vcmUgb3B0aW9uICclcyciCittc2dzdHIgIuacquiDveivhuWIq+eahOepuueZveWtl+espuW/veeVpemAiemhuSAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6ODIyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBwcmVwYXJlIHRpbWVzdGFtcCByZWdleHAgJXMiCittc2dzdHIgIuaXoOazleWHhuWkh+aXtumXtOaIs+ato+WImeihqOi+vuW8jyAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjgzMQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWdleGVjIHJldHVybmVkICVkIGZvciBpbnB1dDogJXMiCittc2dzdHIgInJlZ2V4ZWMg6L+U5ZueICVk77yM6L6T5YWl5Li677yaJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo5MTIKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGZpbmQgZmlsZW5hbWUgaW4gcGF0Y2ggYXQgbGluZSAlZCIKK21zZ3N0ciAi5LiN6IO95Zyo6KGl5LiB55qE56ysICVkIOihjOaJvuWIsOaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCwgZ290ICVzIG9uIGxpbmUgJWQiCittc2dzdHIgImdpdCBhcHBsee+8mumUmeivr+eahCBnaXQtZGlmZiAtIOW6lOS4uiAvZGV2L251bGzvvIzkvYblnKjnrKwgJTIkZCDooYzlvpfliLAgJTEkcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0OAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBuZXcgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx577ya6ZSZ6K+v55qEIGdpdC1kaWZmIC0g56ysICVkIOihjOS4iuaWsOaWh+S7tuWQjeS4jeS4gOiHtCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk0OQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUgb24gbGluZSAlZCIKK21zZ3N0ciAiZ2l0IGFwcGx577ya6ZSZ6K+v55qEIGdpdC1kaWZmIC0g56ysICVkIOihjOS4iuaXp+aWh+S7tuWQjeS4jeS4gOiHtCIKKworIzogYnVpbHRpbi9hcHBseS5jOjk1NgorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgYXBwbHk6IGJhZCBnaXQtZGlmZiAtIGV4cGVjdGVkIC9kZXYvbnVsbCBvbiBsaW5lICVkIgorbXNnc3RyICJnaXQgYXBwbHnvvJrplJnor6/nmoQgZ2l0LWRpZmYgLSDnrKwgJWQg6KGM5aSE5bqU5Li6IC9kZXYvbnVsbCIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVjb3VudDogdW5leHBlY3RlZCBsaW5lOiAlLipzIgorbXNnc3RyICJyZWNvdW5077ya5oSP5aSW55qE6KGM77yaJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0Y2ggZnJhZ21lbnQgd2l0aG91dCBoZWFkZXIgYXQgbGluZSAlZDogJS4qcyIKK21zZ3N0ciAi56ysICVkIOihjOeahOihpeS4geeJh+auteayoeacieWktOS/oeaBr++8miUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNDkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJnaXQgZGlmZiBoZWFkZXIgbGFja3MgZmlsZW5hbWUgaW5mb3JtYXRpb24gd2hlbiByZW1vdmluZyAlZCBsZWFkaW5nIHBhdGhuYW1lICIKKyJjb21wb25lbnQgKGxpbmUgJWQpIgorbXNnaWRfcGx1cmFsICIiCisiZ2l0IGRpZmYgaGVhZGVyIGxhY2tzIGZpbGVuYW1lIGluZm9ybWF0aW9uIHdoZW4gcmVtb3ZpbmcgJWQgbGVhZGluZyBwYXRobmFtZSAiCisiY29tcG9uZW50cyAobGluZSAlZCkiCittc2dzdHJbMF0gIuW9k+enu+mZpCAlZCDkuKrliY3lr7zot6/lvoTlkI4gZ2l0IGRpZmYg5aS057y65LmP5paH5Lu25ZCN5L+h5oGv77yI56ysICVkIOihjO+8iSIKK21zZ3N0clsxXSAi5b2T56e76ZmkICVkIOS4quWJjeWvvOi3r+W+hOWQjiBnaXQgZGlmZiDlpLTnvLrkuY/mlofku7blkI3kv6Hmga/vvIjnrKwgJWQg6KGM77yJIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY1OQorbXNnaWQgIm5ldyBmaWxlIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICLmlrDmlofku7bkvp3otZbml6flhoXlrrkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNjYxCittc2dpZCAiZGVsZXRlZCBmaWxlIHN0aWxsIGhhcyBjb250ZW50cyIKK21zZ3N0ciAi5Yig6Zmk55qE5paH5Lu25LuN5pyJ5YaF5a65IgorCisjOiBidWlsdGluL2FwcGx5LmM6MTY4NworIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGF0IGxpbmUgJWQiCittc2dzdHIgIuihpeS4geWcqOesrCAlZCDooYzmjZ/lnY8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoxNzIzCisjLCBjLWZvcm1hdAorbXNnaWQgIm5ldyBmaWxlICVzIGRlcGVuZHMgb24gb2xkIGNvbnRlbnRzIgorbXNnc3RyICLmlrDmlofku7YgJXMg5L6d6LWW5pen5YaF5a65IgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyNQorIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGVkIGZpbGUgJXMgc3RpbGwgaGFzIGNvbnRlbnRzIgorbXNnc3RyICLliKDpmaTnmoTmlofku7YgJXMg5LuN5pyJ5YaF5a65IgorCisjOiBidWlsdGluL2FwcGx5LmM6MTcyOAorIywgYy1mb3JtYXQKK21zZ2lkICIqKiB3YXJuaW5nOiBmaWxlICVzIGJlY29tZXMgZW1wdHkgYnV0IGlzIG5vdCBkZWxldGVkIgorbXNnc3RyICIqKiDorablkYrvvJrmlofku7YgJXMg5oiQ5Li656m65paH5Lu25L2G5bm25pyq5Yig6ZmkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MTg3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkOiAlLipzIgorbXNnc3RyICLkuozov5vliLbooaXkuIHlnKjnrKwgJWQg6KGM5o2f5Z2P77yaJS4qcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjE5MDMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5yZWNvZ25pemVkIGJpbmFyeSBwYXRjaCBhdCBsaW5lICVkIgorbXNnc3RyICLmnKrog73or4bliKvnmoTkuozov5vliLbooaXkuIHkvY3kuo7nrKwgJWQg6KGMIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjA1NAorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCB3aXRoIG9ubHkgZ2FyYmFnZSBhdCBsaW5lICVkIgorbXNnc3RyICLooaXkuIHmlofku7bnmoTnrKwgJWQg6KGM5Y+q5pyJ5Z6D5Zy+5pWw5o2uIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjE0NAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBzeW1saW5rICVzIgorbXNnc3RyICLml6Dms5Xor7vlj5bnrKblj7fpk77mjqUgJXMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyMTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuIG9yIHJlYWQgJXMiCittc2dzdHIgIuS4jeiDveaJk+W8gOaIluivu+WPliAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjI3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBzdGFydCBvZiBsaW5lOiAnJWMnIgorbXNnc3RyICLml6DmlYjnmoTooYzpppblrZfnrKbvvJonJWMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkwMAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBzdWNjZWVkZWQgYXQgJWQgKG9mZnNldCAlZCBsaW5lKS4iCittc2dpZF9wbHVyYWwgIkh1bmsgIyVkIHN1Y2NlZWRlZCBhdCAlZCAob2Zmc2V0ICVkIGxpbmVzKS4iCittc2dzdHJbMF0gIuWdlyAjJWQg5oiQ5Yqf5bqU55So5LqOICVk77yI5YGP56e7ICVkIOihjO+8iSIKK21zZ3N0clsxXSAi5Z2XICMlZCDmiJDlip/lupTnlKjkuo4gJWTvvIjlgY/np7sgJWQg6KGM77yJIgorCisjOiBidWlsdGluL2FwcGx5LmM6MjkxMgorIywgYy1mb3JtYXQKK21zZ2lkICJDb250ZXh0IHJlZHVjZWQgdG8gKCVsZC8lbGQpIHRvIGFwcGx5IGZyYWdtZW50IGF0ICVkIgorbXNnc3RyICLkuIrkuIvmloflh4/lsJHliLDvvIglbGQvJWxk77yJ5Lul5Zyo56ysICVkIOihjOW6lOeUqOihpeS4geeJh+autSIKKworIzogYnVpbHRpbi9hcHBseS5jOjI5MTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIndoaWxlIHNlYXJjaGluZyBmb3I6XG4iCisiJS4qcyIKK21zZ3N0ciAiIgorIuW9k+afpeivou+8mlxuIgorIiUuKnMiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzoyOTM4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1pc3NpbmcgYmluYXJ5IHBhdGNoIGRhdGEgZm9yICclcyciCittc2dzdHIgIue8uuWksSAnJXMnIOeahOS6jOi/m+WItuihpeS4geaVsOaNriIKKworIzogYnVpbHRpbi9hcHBseS5jOjMwMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmluYXJ5IHBhdGNoIGRvZXMgbm90IGFwcGx5IHRvICclcyciCittc2dzdHIgIuS6jOi/m+WItuihpeS4geacquW6lOeUqOWIsCAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzA0NQorIywgYy1mb3JtYXQKK21zZ2lkICJiaW5hcnkgcGF0Y2ggdG8gJyVzJyBjcmVhdGVzIGluY29ycmVjdCByZXN1bHQgKGV4cGVjdGluZyAlcywgZ290ICVzKSIKK21zZ3N0ciAi5YiwICclcycg55qE5LqM6L+b5Yi26KGl5LiB5Lqn55Sf5LqG5LiN5q2j56Gu55qE57uT5p6c77yI5bqU5Li6ICVz77yM5Y205Li6ICVz77yJIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzA2NgorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRjaCBmYWlsZWQ6ICVzOiVsZCIKK21zZ3N0ciAi5omT6KGl5LiB5aSx6LSl77yaJXM6JWxkIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzE5MAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2hlY2tvdXQgJXMiCittc2dzdHIgIuS4jeiDveajgOWHuiAlcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMyMzUgYnVpbHRpbi9hcHBseS5jOjMyNDYgYnVpbHRpbi9hcHBseS5jOjMyOTEKKyMsIGMtZm9ybWF0Cittc2dpZCAicmVhZCBvZiAlcyBmYWlsZWQiCittc2dzdHIgIuivu+WPliAlcyDlpLHotKUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMjQzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlYWRpbmcgZnJvbSAnJXMnIGJleW9uZCBhIHN5bWJvbGljIGxpbmsiCittc2dzdHIgIuivu+WPluS9jeS6juespuWPt+mTvuaOpeS4reeahCAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6MzI3MSBidWlsdGluL2FwcGx5LmM6MzQ5MworIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICVzIGhhcyBiZWVuIHJlbmFtZWQvZGVsZXRlZCIKK21zZ3N0ciAi6Lev5b6EICVzIOW3sue7j+iiq+mHjeWRveWQjS/liKDpmaQiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzUyIGJ1aWx0aW4vYXBwbHkuYzozNTA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBkb2VzIG5vdCBleGlzdCBpbiBpbmRleCIKK21zZ3N0ciAiJXPvvJrkuI3lrZjlnKjkuo7ntKLlvJXkuK0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozMzU2IGJ1aWx0aW4vYXBwbHkuYzozNDk5IGJ1aWx0aW4vYXBwbHkuYzozNTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiAlcyIKK21zZ3N0ciAiJXPvvJolcyIKKworIzogYnVpbHRpbi9hcHBseS5jOjMzNjEgYnVpbHRpbi9hcHBseS5jOjM1MTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGRvZXMgbm90IG1hdGNoIGluZGV4IgorbXNnc3RyICIlc++8muWSjOe0ouW8leS4jeWMuemFjSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM0NjMKK21zZ2lkICJyZW1vdmFsIHBhdGNoIGxlYXZlcyBmaWxlIGNvbnRlbnRzIgorbXNnc3RyICLnp7vpmaTooaXkuIHku43nlZnkuIvkuobmlofku7blhoXlrrkiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiB3cm9uZyB0eXBlIgorbXNnc3RyICIlc++8mumUmeivr+exu+WeiyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM1MzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgaGFzIHR5cGUgJW8sIGV4cGVjdGVkICVvIgorbXNnc3RyICIlcyDnmoTnsbvlnovmmK8gJW/vvIzlupTkuLogJW8iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNjkzIGJ1aWx0aW4vYXBwbHkuYzozNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgcGF0aCAnJXMnIgorbXNnc3RyICLml6DmlYjot6/lvoQgJyVzJyIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIGluZGV4IgorbXNnc3RyICIlc++8muW3sue7j+WtmOWcqOS6jue0ouW8leS4rSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IGFscmVhZHkgZXhpc3RzIGluIHdvcmtpbmcgZGlyZWN0b3J5IgorbXNnc3RyICIlc++8muW3sue7j+WtmOWcqOS6juW3peS9nOWMuuS4rSIKKworIzogYnVpbHRpbi9hcHBseS5jOjM3NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAibmV3IG1vZGUgKCVvKSBvZiAlcyBkb2VzIG5vdCBtYXRjaCBvbGQgbW9kZSAoJW8pIgorbXNnc3RyICIlMiRzIOeahOaWsOaooeW8j++8iCUxJG/vvInlkozml6fmqKHlvI/vvIglMyRv77yJ5LiN5Yy56YWNIgorCisjOiBidWlsdGluL2FwcGx5LmM6Mzc3OAorIywgYy1mb3JtYXQKK21zZ2lkICJuZXcgbW9kZSAoJW8pIG9mICVzIGRvZXMgbm90IG1hdGNoIG9sZCBtb2RlICglbykgb2YgJXMiCittc2dzdHIgIiUyJHMg55qE5paw5qih5byP77yIJTEkb++8ieWSjCAlNCRzIOeahOaXp+aooeW8j++8iCUzJG/vvInkuI3ljLnphY0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozNzk4CisjLCBjLWZvcm1hdAorbXNnaWQgImFmZmVjdGVkIGZpbGUgJyVzJyBpcyBiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIgorbXNnc3RyICLlj5flvbHlk43nmoTmlofku7YgJyVzJyDkvY3kuo7nrKblj7fpk77mjqXkuK0iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzOiBwYXRjaCBkb2VzIG5vdCBhcHBseSIKK21zZ3N0ciAiJXPvvJrooaXkuIHmnKrlupTnlKgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozODE2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHBhdGNoICVzLi4uIgorbXNnc3RyICLmo4Dmn6XooaXkuIEgJXMuLi4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzozOTA5IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMzIgYnVpbHRpbi9yZXNldC5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJtYWtlX2NhY2hlX2VudHJ5IGZhaWxlZCBmb3IgcGF0aCAnJXMnIgorbXNnc3RyICLlr7not6/lvoQgJyVzJyDnmoQgbWFrZV9jYWNoZV9lbnRyeSDmk43kvZzlpLHotKUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZW1vdmUgJXMgZnJvbSBpbmRleCIKK21zZ3N0ciAi5LiN6IO95LuO57Si5byV5Lit56e76ZmkICVzIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA4MQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3JydXB0IHBhdGNoIGZvciBzdWJtb2R1bGUgJXMiCittc2dzdHIgIuWtkOaooee7hCAlcyDmjZ/lnY/nmoTooaXkuIEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDg1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGF0IG5ld2x5IGNyZWF0ZWQgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73mnprkuL7mlrDlu7rmlofku7YgJyVzJyDnmoTnirbmgIEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MDkwCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBjcmVhdGUgYmFja2luZyBzdG9yZSBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlICVzIgorbXNnc3RyICLkuI3og73kuLrmlrDlu7rmlofku7YgJXMg5Yib5bu65ZCO56uv5a2Y5YKoIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDA5MyBidWlsdGluL2FwcGx5LmM6NDIwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gYWRkIGNhY2hlIGVudHJ5IGZvciAlcyIKK21zZ3N0ciAi5peg5rOV5Li6ICVzIOa3u+WKoOe8k+WtmOadoeebriIKKworIzogYnVpbHRpbi9hcHBseS5jOjQxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2xvc2luZyBmaWxlICclcyciCittc2dzdHIgIuWFs+mXreaWh+S7tiAnJXMnIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgZmlsZSAnJXMnIG1vZGUgJW8iCittc2dzdHIgIuS4jeiDveWGmeaWh+S7tiAnJXMnIOadg+mZkCAlbyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQyNjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXBwbGllZCBwYXRjaCAlcyBjbGVhbmx5LiIKK21zZ3N0ciAi5oiQ5Yqf5bqU55So6KGl5LiBICVz44CCIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDI3MAorbXNnaWQgImludGVybmFsIGVycm9yIgorbXNnc3RyICLlhoXpg6jplJnor68iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjczCisjLCBjLWZvcm1hdAorbXNnaWQgIkFwcGx5aW5nIHBhdGNoICUlcyB3aXRoICVkIHJlamVjdC4uLiIKK21zZ2lkX3BsdXJhbCAiQXBwbHlpbmcgcGF0Y2ggJSVzIHdpdGggJWQgcmVqZWN0cy4uLiIKK21zZ3N0clswXSAi5bqU55SoICUlcyDkuKrooaXkuIHvvIzlhbbkuK0gJWQg5Liq6KKr5ouS57udLi4uIgorbXNnc3RyWzFdICLlupTnlKggJSVzIOS4quihpeS4ge+8jOWFtuS4rSAlZCDkuKrooqvmi5Lnu50uLi4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0MjgzCisjLCBjLWZvcm1hdAorbXNnaWQgInRydW5jYXRpbmcgLnJlaiBmaWxlbmFtZSB0byAlLipzLnJlaiIKK21zZ3N0ciAi5oiq55+tIC5yZWog5paH5Lu25ZCN5Li6ICUuKnMucmVqIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJIdW5rICMlZCBhcHBsaWVkIGNsZWFubHkuIgorbXNnc3RyICLnrKwgIyVkIOS4queJh+auteaIkOWKn+W6lOeUqOOAgiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVqZWN0ZWQgaHVuayAjJWQuIgorbXNnc3RyICLmi5Lnu53nrKwgIyVkIOS4queJh+auteOAgiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQzOTcKK21zZ2lkICJ1bnJlY29nbml6ZWQgaW5wdXQiCittc2dzdHIgIuacquiDveivhuWIq+eahOi+k+WFpSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ0MDgKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5Xor7vlj5bntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTI2Cittc2dpZCAiZG9uJ3QgYXBwbHkgY2hhbmdlcyBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0aCIKK21zZ3N0ciAi5LiN6KaB5bqU55So5LiO57uZ5Ye66Lev5b6E5ZCR5Yy56YWN55qE5Y+Y5pu0IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUyOQorbXNnaWQgImFwcGx5IGNoYW5nZXMgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdGgiCittc2dzdHIgIuW6lOeUqOS4jue7meWHuui3r+W+hOWQkeWMuemFjeeahOWPmOabtCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MzIKK21zZ2lkICJyZW1vdmUgPG51bT4gbGVhZGluZyBzbGFzaGVzIGZyb20gdHJhZGl0aW9uYWwgZGlmZiBwYXRocyIKK21zZ3N0ciAi5LuO5Lyg57uf55qEIGRpZmYg6Lev5b6E5Lit56e76Zmk5oyH5a6a5pWw6YeP55qE5YmN5a+85pac57q/IgorCisjOiBidWlsdGluL2FwcGx5LmM6NDUzNQorbXNnaWQgImlnbm9yZSBhZGRpdGlvbnMgbWFkZSBieSB0aGUgcGF0Y2giCittc2dzdHIgIuW/veeVpeihpeS4geS4reeahOa3u+WKoOeahOaWh+S7tiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1MzcKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGRpZmZzdGF0IGZvciB0aGUgaW5wdXQiCittc2dzdHIgIuS4jeW6lOeUqOihpeS4ge+8jOiAjOaYr+aYvuekuui+k+WFpeeahOW3ruW8gue7n+iuoe+8iGRpZmZzdGF077yJIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0MQorbXNnaWQgInNob3cgbnVtYmVyIG9mIGFkZGVkIGFuZCBkZWxldGVkIGxpbmVzIGluIGRlY2ltYWwgbm90YXRpb24iCittc2dzdHIgIuS7peWNgei/m+WItuaVsOaYvuekuua3u+WKoOWSjOWIoOmZpOeahOihjOaVsCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NDMKK21zZ2lkICJpbnN0ZWFkIG9mIGFwcGx5aW5nIHRoZSBwYXRjaCwgb3V0cHV0IGEgc3VtbWFyeSBmb3IgdGhlIGlucHV0IgorbXNnc3RyICLkuI3lupTnlKjooaXkuIHvvIzogIzmmK/mmL7npLrovpPlhaXnmoTmpoLopoEiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTQ1Cittc2dpZCAiaW5zdGVhZCBvZiBhcHBseWluZyB0aGUgcGF0Y2gsIHNlZSBpZiB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSIKK21zZ3N0ciAi5LiN5bqU55So6KGl5LiB77yM6ICM5piv5p+l55yL6KGl5LiB5piv5ZCm5Y+v5bqU55SoIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0NworbXNnaWQgIm1ha2Ugc3VyZSB0aGUgcGF0Y2ggaXMgYXBwbGljYWJsZSB0byB0aGUgY3VycmVudCBpbmRleCIKK21zZ3N0ciAi56Gu6K6k6KGl5LiB5Y+v5Lul5bqU55So5Yiw5b2T5YmN57Si5byVIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU0OQorbXNnaWQgImFwcGx5IGEgcGF0Y2ggd2l0aG91dCB0b3VjaGluZyB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLlupTnlKjooaXkuIHogIzkuI3kv67mlLnlt6XkvZzljLoiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTUxCittc2dpZCAiYWNjZXB0IGEgcGF0Y2ggdGhhdCB0b3VjaGVzIG91dHNpZGUgdGhlIHdvcmtpbmcgYXJlYSIKK21zZ3N0ciAi5o6l5Y+X5L+u5pS55bel5L2c5Yy65LmL5aSW5paH5Lu255qE6KGl5LiBIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU1MworbXNnaWQgImFsc28gYXBwbHkgdGhlIHBhdGNoICh1c2Ugd2l0aCAtLXN0YXQvLS1zdW1tYXJ5Ly0tY2hlY2spIgorbXNnc3RyICLov5jlupTnlKjmraTooaXkuIHvvIjkuI4gLS1zdGF0Ly0tc3VtbWFyeS8tLWNoZWNrIOmAiemhueWQjOaXtuS9v+eUqO+8iSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NTUKK21zZ2lkICJhdHRlbXB0IHRocmVlLXdheSBtZXJnZSBpZiBhIHBhdGNoIGRvZXMgbm90IGFwcGx5IgorbXNnc3RyICLlpoLmnpzkuIDkuKrooaXkuIHkuI3og73lupTnlKjliJnlsJ3or5XkuInmlrnlkIjlubYiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTU3Cittc2dpZCAiYnVpbGQgYSB0ZW1wb3JhcnkgaW5kZXggYmFzZWQgb24gZW1iZWRkZWQgaW5kZXggaW5mb3JtYXRpb24iCittc2dzdHIgIuWIm+W7uuS4gOS4quS4tOaXtue0ouW8leWfuuS6juW1jOWFpeeahOe0ouW8leS/oeaBryIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NTkgYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5OCBidWlsdGluL2xzLWZpbGVzLmM6NDEyCittc2dpZCAicGF0aHMgYXJlIHNlcGFyYXRlZCB3aXRoIE5VTCBjaGFyYWN0ZXIiCittc2dzdHIgIui3r+W+hOS7pSBOVUwg5a2X56ym5YiG6ZqUIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU2MgorbXNnaWQgImVuc3VyZSBhdCBsZWFzdCA8bj4gbGluZXMgb2YgY29udGV4dCBtYXRjaCIKK21zZ3N0ciAi56Gu5L+d6Iez5bCR5Yy56YWNIDxuPiDooYzkuIrkuIvmlociCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTY0Cittc2dpZCAiZGV0ZWN0IG5ldyBvciBtb2RpZmllZCBsaW5lcyB0aGF0IGhhdmUgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHIgIuajgOafpeaWsOWinuWSjOS/ruaUueeahOihjOS4remXtOeahOepuueZveWtl+espua7peeUqCIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NjcgYnVpbHRpbi9hcHBseS5jOjQ1NzAKK21zZ2lkICJpZ25vcmUgY2hhbmdlcyBpbiB3aGl0ZXNwYWNlIHdoZW4gZmluZGluZyBjb250ZXh0IgorbXNnc3RyICLmn6Xmib7kuIrkuIvmlofml7blv73nlaXnqbrnmb3lrZfnrKbnmoTlj5jmm7QiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTczCittc2dpZCAiYXBwbHkgdGhlIHBhdGNoIGluIHJldmVyc2UiCittc2dzdHIgIuWPjeWQkeW6lOeUqOihpeS4gSIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1NzUKK21zZ2lkICJkb24ndCBleHBlY3QgYXQgbGVhc3Qgb25lIGxpbmUgb2YgY29udGV4dCIKK21zZ3N0ciAi5peg6ZyA6Iez5bCR5LiA6KGM5LiK5LiL5paHIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3NworbXNnaWQgImxlYXZlIHRoZSByZWplY3RlZCBodW5rcyBpbiBjb3JyZXNwb25kaW5nICoucmVqIGZpbGVzIgorbXNnc3RyICLlsIbmi5Lnu53nmoTooaXkuIHniYfmrrXkv53lrZjlnKjlr7nlupTnmoQgKi5yZWog5paH5Lu25LitIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDU3OQorbXNnaWQgImFsbG93IG92ZXJsYXBwaW5nIGh1bmtzIgorbXNnc3RyICLlhYHorrjph43lj6DnmoTooaXkuIHniYfmrrUiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NTgyCittc2dpZCAidG9sZXJhdGUgaW5jb3JyZWN0bHkgZGV0ZWN0ZWQgbWlzc2luZyBuZXctbGluZSBhdCB0aGUgZW5kIG9mIGZpbGUiCittc2dzdHIgIuWFgeiuuOS4jeato+ehrueahOaWh+S7tuacq+WwvuaNouihjOespiIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODUKK21zZ2lkICJkbyBub3QgdHJ1c3QgdGhlIGxpbmUgY291bnRzIGluIHRoZSBodW5rIGhlYWRlcnMiCittc2dzdHIgIuS4jeS/oeS7u+ihpeS4geeJh+auteeahOWktOS/oeaBr+S4reeahOihjOWPtyIKKworIzogYnVpbHRpbi9hcHBseS5jOjQ1ODgKK21zZ2lkICJwcmVwZW5kIDxyb290PiB0byBhbGwgZmlsZW5hbWVzIgorbXNnc3RyICLkuLrmiYDmnInmlofku7blkI3liY3mt7vliqAgPOagueebruW9lT4iCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjEwCittc2dpZCAiLS0zd2F5IG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLTN3YXkg5Zyo5LiA5Liq5LuT5bqT5LmL5aSWIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDYxOAorbXNnaWQgIi0taW5kZXggb3V0c2lkZSBhIHJlcG9zaXRvcnkiCittc2dzdHIgIi0taW5kZXgg5Zyo5LiA5Liq5LuT5bqT5LmL5aSWIgorCisjOiBidWlsdGluL2FwcGx5LmM6NDYyMQorbXNnaWQgIi0tY2FjaGVkIG91dHNpZGUgYSByZXBvc2l0b3J5IgorbXNnc3RyICItLWNhY2hlZCDlnKjkuIDkuKrku5PlupPkuYvlpJYiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjQwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbid0IG9wZW4gcGF0Y2ggJyVzJyIKK21zZ3N0ciAi5LiN6IO95omT5byA6KGl5LiBICclcyciCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjU0CisjLCBjLWZvcm1hdAorbXNnaWQgInNxdWVsY2hlZCAlZCB3aGl0ZXNwYWNlIGVycm9yIgorbXNnaWRfcGx1cmFsICJzcXVlbGNoZWQgJWQgd2hpdGVzcGFjZSBlcnJvcnMiCittc2dzdHJbMF0gIuaKkeWItuS4i+S7jeaciSAlZCDkuKrnqbrnmb3lrZfnrKbor6/nlKgiCittc2dzdHJbMV0gIuaKkeWItuS4i+S7jeaciSAlZCDkuKrnqbrnmb3lrZfnrKbor6/nlKgiCisKKyM6IGJ1aWx0aW4vYXBwbHkuYzo0NjYwIGJ1aWx0aW4vYXBwbHkuYzo0NjcwCisjLCBjLWZvcm1hdAorbXNnaWQgIiVkIGxpbmUgYWRkcyB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dpZF9wbHVyYWwgIiVkIGxpbmVzIGFkZCB3aGl0ZXNwYWNlIGVycm9ycy4iCittc2dzdHJbMF0gIiVkIOihjOacieepuueZveWtl+espuivr+eUqOOAgiIKK21zZ3N0clsxXSAiJWQg6KGM5pyJ56m655m95a2X56ym6K+v55So44CCIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzoxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGFyY2hpdmUgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73liJvlu7rlvZLmoaPmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9hcmNoaXZlLmM6MjAKK21zZ2lkICJjb3VsZCBub3QgcmVkaXJlY3Qgb3V0cHV0IgorbXNnc3RyICLkuI3og73ph43lrprlkJHovpPlh7oiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjM3Cittc2dpZCAiZ2l0IGFyY2hpdmU6IFJlbW90ZSB3aXRoIG5vIFVSTCIKK21zZ3N0ciAiZ2l0IGFyY2hpdmXvvJrmnKrmj5Dkvpvov5znqIsgVVJMIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo1OAorbXNnaWQgImdpdCBhcmNoaXZlOiBleHBlY3RlZCBBQ0svTkFLLCBnb3QgRU9GIgorbXNnc3RyICJnaXQgYXJjaGl2Ze+8muW6lOS4uiBBQ0svTkFDS++8jOWNtOW+l+WIsCBFT0YiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYxCisjLCBjLWZvcm1hdAorbXNnaWQgImdpdCBhcmNoaXZlOiBOQUNLICVzIgorbXNnc3RyICJnaXQgYXJjaGl2Ze+8mk5BQ0sgJXMiCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgInJlbW90ZSBlcnJvcjogJXMiCittc2dzdHIgIui/nOeoi+mUmeivr++8miVzIgorCisjOiBidWlsdGluL2FyY2hpdmUuYzo2NAorbXNnaWQgImdpdCBhcmNoaXZlOiBwcm90b2NvbCBlcnJvciIKK21zZ3N0ciAiZ2l0IGFyY2hpdmXvvJrljY/orq7plJnor68iCisKKyM6IGJ1aWx0aW4vYXJjaGl2ZS5jOjY4Cittc2dpZCAiZ2l0IGFyY2hpdmU6IGV4cGVjdGVkIGEgZmx1c2giCittc2dzdHIgImdpdCBhcmNoaXZl77ya5bqU5Li65Yi35pawIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6NworbXNnaWQgImdpdCBiaXNlY3QtLWhlbHBlciAtLW5leHQtYWxsIFstLW5vLWNoZWNrb3V0XSIKK21zZ3N0ciAiZ2l0IGJpc2VjdC0taGVscGVyIC0tbmV4dC1hbGwgWy0tbm8tY2hlY2tvdXRdIgorCisjOiBidWlsdGluL2Jpc2VjdC0taGVscGVyLmM6MTcKK21zZ2lkICJwZXJmb3JtICdnaXQgYmlzZWN0IG5leHQnIgorbXNnc3RyICLmiafooYwgJ2dpdCBiaXNlY3QgbmV4dCciCisKKyM6IGJ1aWx0aW4vYmlzZWN0LS1oZWxwZXIuYzoxOQorbXNnaWQgInVwZGF0ZSBCSVNFQ1RfSEVBRCBpbnN0ZWFkIG9mIGNoZWNraW5nIG91dCB0aGUgY3VycmVudCBjb21taXQiCittc2dzdHIgIuabtOaWsCBCSVNFQ1RfSEVBRCDogIzpnZ7mo4Dlh7rlvZPliY3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozMgorbXNnaWQgImdpdCBibGFtZSBbPG9wdGlvbnM+XSBbPHJldi1vcHRzPl0gWzxyZXY+XSBbLS1dIDxmaWxlPiIKK21zZ3N0ciAiZ2l0IGJsYW1lIFs86YCJ6aG5Pl0gWzzniYjmnKzpgInpobk+XSBbPOeJiOacrD5dIFstLV0gPOaWh+S7tj4iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzozNworbXNnaWQgIjxyZXYtb3B0cz4gYXJlIGRvY3VtZW50ZWQgaW4gZ2l0LXJldi1saXN0KDEpIgorbXNnc3RyICI854mI5pys6YCJ6aG5PiDnmoTmlofmoaPorrDlvZXlnKggZ2l0LXJldi1saXN0KDEpIOS4rSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDAKK21zZ2lkICJTaG93IGJsYW1lIGVudHJpZXMgYXMgd2UgZmluZCB0aGVtLCBpbmNyZW1lbnRhbGx5IgorbXNnc3RyICLlop7ph4/lvI/lnLDmmL7npLrlj5HnjrDnmoQgYmxhbWUg5p2h55uuIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUwMQorbXNnaWQgIlNob3cgYmxhbmsgU0hBLTEgZm9yIGJvdW5kYXJ5IGNvbW1pdHMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIui+ueeVjOaPkOS6pOaYvuekuuepuueahCBTSEEtMe+8iOm7mOiupO+8muWFs+mXre+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDIKK21zZ2lkICJEbyBub3QgdHJlYXQgcm9vdCBjb21taXRzIGFzIGJvdW5kYXJpZXMgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuS4jeaKiuagueaPkOS6pOS9nOS4uui+ueeVjO+8iOm7mOiupO+8muWFs+mXre+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDMKK21zZ2lkICJTaG93IHdvcmsgY29zdCBzdGF0aXN0aWNzIgorbXNnc3RyICLmmL7npLrlkb3ku6TmtojogJfnu5/orqEiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA0Cittc2dpZCAiU2hvdyBvdXRwdXQgc2NvcmUgZm9yIGJsYW1lIGVudHJpZXMiCittc2dzdHIgIuaYvuekuuWIpOaWrSBibGFtZSDmnaHnm67kvY3np7vnmoTlvpfliIbor4rmlq3kv6Hmga8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA1Cittc2dpZCAiU2hvdyBvcmlnaW5hbCBmaWxlbmFtZSAoRGVmYXVsdDogYXV0bykiCittc2dzdHIgIuaYvuekuuWOn+Wni+aWh+S7tuWQje+8iOm7mOiupO+8muiHquWKqO+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDYKK21zZ2lkICJTaG93IG9yaWdpbmFsIGxpbmVudW1iZXIgKERlZmF1bHQ6IG9mZikiCittc2dzdHIgIuaYvuekuuWOn+Wni+eahOihjOWPt++8iOm7mOiupO+8muWFs+mXre+8iSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MDcKK21zZ2lkICJTaG93IGluIGEgZm9ybWF0IGRlc2lnbmVkIGZvciBtYWNoaW5lIGNvbnN1bXB0aW9uIgorbXNnc3RyICLmmL7npLrkuLrkuIDkuKrpgILlkIjmnLrlmajor7vlj5bnmoTmoLzlvI8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA4Cittc2dpZCAiU2hvdyBwb3JjZWxhaW4gZm9ybWF0IHdpdGggcGVyLWxpbmUgY29tbWl0IGluZm9ybWF0aW9uIgorbXNnc3RyICLkuLrmr4/kuIDooYzmmL7npLrmnLrlmajpgILnlKjnmoTmj5DkuqTkv6Hmga8iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTA5Cittc2dpZCAiVXNlIHRoZSBzYW1lIG91dHB1dCBtb2RlIGFzIGdpdC1hbm5vdGF0ZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi5L2/55So5ZKMIGdpdC1hbm5vdGF0ZSDnm7jlkIznmoTovpPlh7rmqKHlvI/vvIjpu5jorqTvvJrlhbPpl63vvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTEwCittc2dpZCAiU2hvdyByYXcgdGltZXN0YW1wIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLmmL7npLrljp/lp4vml7bpl7TmiLPvvIjpu5jorqTvvJrlhbPpl63vvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTExCittc2dpZCAiU2hvdyBsb25nIGNvbW1pdCBTSEExIChEZWZhdWx0OiBvZmYpIgorbXNnc3RyICLmmL7npLrplb/nmoQgU0hBMSDmj5DkuqTlj7fvvIjpu5jorqTvvJrlhbPpl63vvIkiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTEyCittc2dpZCAiU3VwcHJlc3MgYXV0aG9yIG5hbWUgYW5kIHRpbWVzdGFtcCAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi6ZqQ6JeP5L2c6ICF5ZCN5a2X5ZKM5pe26Ze05oiz77yI6buY6K6k77ya5YWz6Zet77yJIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxMworbXNnaWQgIlNob3cgYXV0aG9yIGVtYWlsIGluc3RlYWQgb2YgbmFtZSAoRGVmYXVsdDogb2ZmKSIKK21zZ3N0ciAi5pi+56S65L2c6ICF55qE6YKu566x6ICM5LiN5piv5ZCN5a2X77yI6buY6K6k77ya5YWz6Zet77yJIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxNAorbXNnaWQgIklnbm9yZSB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIgorbXNnc3RyICLlv73nlaXnqbrnmb3lt67lvIIiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE1Cittc2dpZCAiU3BlbmQgZXh0cmEgY3ljbGVzIHRvIGZpbmQgYmV0dGVyIG1hdGNoIgorbXNnc3RyICLoirHotLnpop3lpJbnmoTlvqrnjq/mnaXmib7liLDmm7Tlpb3nmoTljLnphY0iCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE2Cittc2dpZCAiVXNlIHJldmlzaW9ucyBmcm9tIDxmaWxlPiBpbnN0ZWFkIG9mIGNhbGxpbmcgZ2l0LXJldi1saXN0IgorbXNnc3RyICLkvb/nlKjmnaXoh6ogPOaWh+S7tj4g55qE5L+u6K6i6ZuG6ICM5LiN5piv6LCD55SoIGdpdC1yZXYtbGlzdCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MTcKK21zZ2lkICJVc2UgPGZpbGU+J3MgY29udGVudHMgYXMgdGhlIGZpbmFsIGltYWdlIgorbXNnc3RyICLkvb/nlKggPOaWh+S7tj4g55qE5YaF5a655L2c5Li65pyA57uI55qE5Zu+54mHIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxOCBidWlsdGluL2JsYW1lLmM6MjUxOQorbXNnaWQgInNjb3JlIgorbXNnc3RyICLlvpfliIYiCisKKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNTE4Cittc2dpZCAiRmluZCBsaW5lIGNvcGllcyB3aXRoaW4gYW5kIGFjcm9zcyBmaWxlcyIKK21zZ3N0ciAi5om+5Yiw5paH5Lu25YaF5Y+K6Leo5paH5Lu255qE6KGM5ou36LSdIgorCisjOiBidWlsdGluL2JsYW1lLmM6MjUxOQorbXNnaWQgIkZpbmQgbGluZSBtb3ZlbWVudHMgd2l0aGluIGFuZCBhY3Jvc3MgZmlsZXMiCittc2dzdHIgIuaJvuWIsOaWh+S7tuWGheWPiui3qOaWh+S7tueahOihjOenu+WKqCIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MjAKK21zZ2lkICJuLG0iCittc2dzdHIgIm4sbSIKKworIzogYnVpbHRpbi9ibGFtZS5jOjI1MjAKK21zZ2lkICJQcm9jZXNzIG9ubHkgbGluZSByYW5nZSBuLG0sIGNvdW50aW5nIGZyb20gMSIKK21zZ3N0ciAi5Y+q5aSE55CG6KGM6IyD5Zu05ZyoIG4g5ZKMIG0g5LmL6Ze055qE77yM5LuOIDEg5byA5aeLIgorCisjLiBUUkFOU0xBVE9SUzogVGhpcyBzdHJpbmcgaXMgdXNlZCB0byB0ZWxsIHVzIHRoZSBtYXhpbXVtCisjLiBkaXNwbGF5IHdpZHRoIGZvciBhIHJlbGF0aXZlIHRpbWVzdGFtcCBpbiAiZ2l0IGJsYW1lIgorIy4gb3V0cHV0LiAgRm9yIEMgbG9jYWxlLCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIsIHdoaWNoCisjLiB0YWtlcyAyMiBwbGFjZXMsIGlzIHRoZSBsb25nZXN0IGFtb25nIHZhcmlvdXMgZm9ybXMgb2YKKyMuIHJlbGF0aXZlIHRpbWVzdGFtcHMsIGJ1dCB5b3VyIGxhbmd1YWdlIG1heSBuZWVkIG1vcmUgb3IKKyMuIGZld2VyIGRpc3BsYXkgY29sdW1ucy4KKyM6IGJ1aWx0aW4vYmxhbWUuYzoyNjAxCittc2dpZCAiNCB5ZWFycywgMTEgbW9udGhzIGFnbyIKK21zZ3N0ciAiNCDlubQgMTEg5Liq5pyI5YmNIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0Cittc2dpZCAiZ2l0IGJyYW5jaCBbPG9wdGlvbnM+XSBbLXIgfCAtYV0gWy0tbWVyZ2VkIHwgLS1uby1tZXJnZWRdIgorbXNnc3RyICJnaXQgYnJhbmNoIFs86YCJ6aG5Pl0gWy1yIHwgLWFdIFstLW1lcmdlZCB8IC0tbm8tbWVyZ2VkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNQorbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gWy1sXSBbLWZdIDxicmFuY2gtbmFtZT4gWzxzdGFydC1wb2ludD5dIgorbXNnc3RyICJnaXQgYnJhbmNoIFs86YCJ6aG5Pl0gWy1sXSBbLWZdIDzliIbmlK/lkI0+IFs86LW35aeL54K5Pl0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjYKK21zZ2lkICJnaXQgYnJhbmNoIFs8b3B0aW9ucz5dIFstcl0gKC1kIHwgLUQpIDxicmFuY2gtbmFtZT4uLi4iCittc2dzdHIgImdpdCBicmFuY2ggWzzpgInpobk+XSBbLXJdICgtZCB8IC1EKSA85YiG5pSv5ZCNPi4uLiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNworbXNnaWQgImdpdCBicmFuY2ggWzxvcHRpb25zPl0gKC1tIHwgLU0pIFs8b2xkLWJyYW5jaD5dIDxuZXctYnJhbmNoPiIKK21zZ3N0ciAiZ2l0IGJyYW5jaCBbPOmAiemhuT5dICgtbSB8IC1NKSBbPOaXp+WIhuaUrz5dIDzmlrDliIbmlK8+IgorCisjICDor5HogIXvvJrkv53mjIHljp/mjaLooYzmoLzlvI/vvIzlnKjovpPlh7rml7YgJXMg55qE5pu/5Luj5YaF5a655Lya6K6p5a2X56ym5Liy5Y+Y6ZW/CisjOiBidWlsdGluL2JyYW5jaC5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBoYXMgYmVlbiBtZXJnZWQgdG9cbiIKKyIgICAgICAgICAnJXMnLCBidXQgbm90IHlldCBtZXJnZWQgdG8gSEVBRC4iCittc2dzdHIgIiIKKyLlsIbopoHliKDpmaTnmoTliIbmlK8gJyVzJyDlt7Lnu4/ooqvlkIjlubbliLBcbiIKKyIgICAgICAgICAnJXMn77yM5L2G5pyq5ZCI5bm25YiwIEhFQUTjgIIiCisKKyMgIOivkeiAhe+8muS/neaMgeWOn+aNouihjOagvOW8j++8jOWcqOi+k+WHuuaXtiAlcyDnmoTmm7/ku6PlhoXlrrnkvJrorqnlrZfnrKbkuLLlj5jplb8KKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTU0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJub3QgZGVsZXRpbmcgYnJhbmNoICclcycgdGhhdCBpcyBub3QgeWV0IG1lcmdlZCB0b1xuIgorIiAgICAgICAgICclcycsIGV2ZW4gdGhvdWdoIGl0IGlzIG1lcmdlZCB0byBIRUFELiIKK21zZ3N0ciAiIgorIuW5tuacquWIoOmZpOWIhuaUryAnJXMn77yMIOiZveeEtuWug+W3sue7j+WQiOW5tuWIsCBIRUFE77yMXG4iCisiICAgICAgICAg54S26ICM5Y205bCa5pyq6KKr5ZCI5bm25Yiw5YiG5pSvICclcycg44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBsb29rIHVwIGNvbW1pdCBvYmplY3QgZm9yICclcyciCittc2dzdHIgIuaXoOazleafpeivoiAnJXMnIOaMh+WQkeeahOaPkOS6pOWvueixoSIKKworIzogYnVpbHRpbi9icmFuY2guYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBicmFuY2ggJyVzJyBpcyBub3QgZnVsbHkgbWVyZ2VkLlxuIgorIklmIHlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgaXQsIHJ1biAnZ2l0IGJyYW5jaCAtRCAlcycuIgorbXNnc3RyICIiCisi5YiG5pSvICclcycg5rKh5pyJ5a6M5YWo5ZCI5bm244CCXG4iCisi5aaC5p6c5oKo56Gu6K6k6KaB5Yig6Zmk5a6D77yM5omn6KGMICdnaXQgYnJhbmNoIC1EICVzJ+OAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzoxODUKK21zZ2lkICJVcGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLml6Dms5Xmm7TmlrAgY29uZmlnIOaWh+S7tiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyMTMKK21zZ2lkICJjYW5ub3QgdXNlIC1hIHdpdGggLWQiCittc2dzdHIgIuS4jeiDveWwhiAtYSDlkowgLWQg5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIxOQorbXNnaWQgIkNvdWxkbid0IGxvb2sgdXAgY29tbWl0IG9iamVjdCBmb3IgSEVBRCIKK21zZ3N0ciAi5peg5rOV5p+l6K+iIEhFQUQg5oyH5ZCR55qE5o+Q5Lqk5a+56LGhIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjIyNworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZGVsZXRlIHRoZSBicmFuY2ggJyVzJyB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBvbi4iCittc2dzdHIgIuaXoOazleWIoOmZpOaCqOW9k+WJjeaJgOWcqOeahOWIhuaUryAnJXMn44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI0MworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUtdHJhY2tpbmcgYnJhbmNoICclcycgbm90IGZvdW5kLiIKK21zZ3N0ciAi5pyq6IO95om+5Yiw6L+c56iL6Lef6Liq5YiG5pSvICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MjQ0CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIuWIhuaUryAnJXMnIOacquWPkeeOsOOAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnJXMnIgorbXNnc3RyICLml6Dms5XliKDpmaTov5znqIvot5/ouKrliIbmlK8gJyVzJyIKKworIzogYnVpbHRpbi9icmFuY2guYzoyNjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgZGVsZXRpbmcgYnJhbmNoICclcyciCittc2dzdHIgIuaXoOazleWIoOmZpOWIhuaUryAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2NworIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHJlbW90ZS10cmFja2luZyBicmFuY2ggJXMgKHdhcyAlcykuXG4iCittc2dzdHIgIuW3suWIoOmZpOi/nOeoi+i3n+i4quWIhuaUryAlc++8iOabvuS4uiAlc++8ieOAglxuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIGJyYW5jaCAlcyAod2FzICVzKS5cbiIKK21zZ3N0ciAi5bey5Yig6Zmk5YiG5pSvICVz77yI5pu+5Li6ICVz77yJ44CCXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MzY5CisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IHBvaW50IGF0IGEgY29tbWl0IgorbXNnc3RyICLliIbmlK8gJyVzJyDmnKrmjIflkJHkuIDkuKrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDUyCisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogZ29uZV0iCittc2dzdHIgIlslczog5Lii5aSxXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzXSIKK21zZ3N0ciAiWyVzXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBiZWhpbmQgJWRdIgorbXNnc3RyICJbJXPvvJrokL3lkI4gJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ2NAorIywgYy1mb3JtYXQKK21zZ2lkICJbYmVoaW5kICVkXSIKK21zZ3N0ciAiW+iQveWQjiAlZF0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NDY4CisjLCBjLWZvcm1hdAorbXNnaWQgIlslczogYWhlYWQgJWRdIgorbXNnc3RyICJbJXPvvJrpooblhYggJWRdIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjQ3MAorIywgYy1mb3JtYXQKK21zZ2lkICJbYWhlYWQgJWRdIgorbXNnc3RyICJb6aKG5YWIICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiWyVzOiBhaGVhZCAlZCwgYmVoaW5kICVkXSIKK21zZ3N0ciAiWyVz77ya6aKG5YWIICVk77yM6JC95ZCOICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiW2FoZWFkICVkLCBiZWhpbmQgJWRdIgorbXNnc3RyICJb6aKG5YWIICVk77yM6JC95ZCOICVkXSIKKworIzogYnVpbHRpbi9icmFuY2guYzo0ODkKK21zZ2lkICIgKioqKiBpbnZhbGlkIHJlZiAqKioqIgorbXNnc3RyICIgKioqKiDml6DmlYjlvJXnlKggKioqKiIKKworIzogYnVpbHRpbi9icmFuY2guYzo1ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiKG5vIGJyYW5jaCwgcmViYXNpbmcgJXMpIgorbXNnc3RyICLvvIjpnZ7liIbmlK/vvIzmraPlj5jln7ogJXPvvIkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIihubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uICVzKSIKK21zZ3N0ciAi77yI6Z2e5YiG5pSv77yM5LqM5YiG5p+l5om+5byA5aeL5LqOICVz77yJIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjU4OQorIywgYy1mb3JtYXQKK21zZ2lkICIoSEVBRCBkZXRhY2hlZCBhdCAlcykiCittc2dzdHIgIu+8iOWktOaMh+mSiOWIhuemu+S6jiAlc++8iSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiKEhFQUQgZGV0YWNoZWQgZnJvbSAlcykiCittc2dzdHIgIu+8iOWktOaMh+mSiOWIhuemu+iHqiAlc++8iSIKKworIzogYnVpbHRpbi9icmFuY2guYzo1OTYKK21zZ2lkICIobm8gYnJhbmNoKSIKK21zZ3N0ciAi77yI6Z2e5YiG5pSv77yJIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY0MworIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAi5a+56LGhICclcycg5rKh5pyJ5oyH5ZCR5LiA5Liq5o+Q5LqkIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjY5MQorbXNnaWQgInNvbWUgcmVmcyBjb3VsZCBub3QgYmUgcmVhZCIKK21zZ3N0ciAi5LiA5Lqb5byV55So5LiN6IO96K+75Y+WIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjcwNAorbXNnaWQgImNhbm5vdCByZW5hbWUgdGhlIGN1cnJlbnQgYnJhbmNoIHdoaWxlIG5vdCBvbiBhbnkuIgorbXNnc3RyICLml6Dms5Xph43lkb3lkI3lvZPliY3liIbmlK/lm6DkuLrkuI3lpITkuo7ku7vkvZXliIbmlK/kuIrjgIIiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgYnJhbmNoIG5hbWU6ICclcyciCittc2dzdHIgIuaXoOaViOeahOWIhuaUr+WQje+8miclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzI5Cittc2dpZCAiQnJhbmNoIHJlbmFtZSBmYWlsZWQiCittc2dzdHIgIuWIhuaUr+mHjeWRveWQjeWksei0pSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3MzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVuYW1lZCBhIG1pc25hbWVkIGJyYW5jaCAnJXMnIGF3YXkiCittc2dzdHIgIumHjeWRveWQjeaOieS4gOS4qumUmeivr+WRveWQjeeahOaXp+WIhuaUryAnJXMnIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjczNworIywgYy1mb3JtYXQKK21zZ2lkICJCcmFuY2ggcmVuYW1lZCB0byAlcywgYnV0IEhFQUQgaXMgbm90IHVwZGF0ZWQhIgorbXNnc3RyICLliIbmlK/ph43lkb3lkI3kuLogJXPvvIzkvYYgSEVBRCDmsqHmnInmm7TmlrDvvIEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzQ0Cittc2dpZCAiQnJhbmNoIGlzIHJlbmFtZWQsIGJ1dCB1cGRhdGUgb2YgY29uZmlnLWZpbGUgZmFpbGVkIgorbXNnc3RyICLliIbmlK/ooqvph43lkb3lkI3vvIzkvYbmm7TmlrAgY29uZmlnIOaWh+S7tuWksei0pSIKKworIzogYnVpbHRpbi9icmFuY2guYzo3NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICVzIgorbXNnc3RyICLpnZ7ms5XnmoTlr7nosaHlkI0gJXMiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6NzgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB3cml0ZSBicmFuY2ggZGVzY3JpcHRpb24gdGVtcGxhdGU6ICVzIgorbXNnc3RyICLkuI3og73lhpnliIbmlK/mj4/ov7DmqKHniYjvvJolcyIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTEKK21zZ2lkICJHZW5lcmljIG9wdGlvbnMiCittc2dzdHIgIumAmueUqOmAiemhuSIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTMKK21zZ2lkICJzaG93IGhhc2ggYW5kIHN1YmplY3QsIGdpdmUgdHdpY2UgZm9yIHVwc3RyZWFtIGJyYW5jaCIKK21zZ3N0ciAi5pi+56S65ZOI5biM5YC85ZKM5Li76aKY77yM6Iul5Y+C5pWw5Ye6546w5Lik5qyh5YiZ5pi+56S65LiK5ri45YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNAorbXNnaWQgInN1cHByZXNzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMiCittc2dzdHIgIuS4jeaYvuekuuS/oeaBryIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MTUKK21zZ2lkICJzZXQgdXAgdHJhY2tpbmcgbW9kZSAoc2VlIGdpdC1wdWxsKDEpKSIKK21zZ3N0ciAi6K6+572u6Lef6Liq5qih5byP77yI5Y+C6KeBIGdpdC1wdWxsKDEp77yJIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgxNworbXNnaWQgImNoYW5nZSB1cHN0cmVhbSBpbmZvIgorbXNnc3RyICLmlLnlj5jkuIrmuLjkv6Hmga8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIxCittc2dpZCAidXNlIGNvbG9yZWQgb3V0cHV0IgorbXNnc3RyICLkvb/nlKjlvanoibLovpPlh7oiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODIyCittc2dpZCAiYWN0IG9uIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyIKK21zZ3N0ciAi5L2c55So5LqO6L+c56iL6Lef6Liq5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgyNSBidWlsdGluL2JyYW5jaC5jOjgzMSBidWlsdGluL2JyYW5jaC5jOjg1MgorIzogYnVpbHRpbi9icmFuY2guYzo4NTggYnVpbHRpbi9jb21taXQuYzoxNTgwIGJ1aWx0aW4vY29tbWl0LmM6MTU4MQorIzogYnVpbHRpbi9jb21taXQuYzoxNTgyIGJ1aWx0aW4vY29tbWl0LmM6MTU4MyBidWlsdGluL3RhZy5jOjYxOAorIzogYnVpbHRpbi90YWcuYzo2MjQKK21zZ2lkICJjb21taXQiCittc2dzdHIgIuaPkOS6pCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4MjYgYnVpbHRpbi9icmFuY2guYzo4MzIKK21zZ2lkICJwcmludCBvbmx5IGJyYW5jaGVzIHRoYXQgY29udGFpbiB0aGUgY29tbWl0IgorbXNnc3RyICLlj6rmiZPljbDljIXlkKvor6Xmj5DkuqTnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODM4Cittc2dpZCAiU3BlY2lmaWMgZ2l0LWJyYW5jaCBhY3Rpb25zOiIKK21zZ3N0ciAi5YW35L2T55qEIGdpdC1icmFuY2gg5Yqo5L2c77yaIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjgzOQorbXNnaWQgImxpc3QgYm90aCByZW1vdGUtdHJhY2tpbmcgYW5kIGxvY2FsIGJyYW5jaGVzIgorbXNnc3RyICLliJflh7rov5znqIvot5/ouKrlj4rmnKzlnLDliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQxCittc2dpZCAiZGVsZXRlIGZ1bGx5IG1lcmdlZCBicmFuY2giCittc2dzdHIgIuWIoOmZpOWujOWFqOWQiOW5tueahOWIhuaUryIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDIKK21zZ2lkICJkZWxldGUgYnJhbmNoIChldmVuIGlmIG5vdCBtZXJnZWQpIgorbXNnc3RyICLliKDpmaTliIbmlK/vvIjljbPkvb/msqHmnInlkIjlubbvvIkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQzCittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2ggYW5kIGl0cyByZWZsb2ciCittc2dzdHIgIuenu+WKqC/ph43lkb3lkI3kuIDkuKrliIbmlK/vvIzku6Xlj4rlroPnmoTlvJXnlKjml6Xlv5ciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ0Cittc2dpZCAibW92ZS9yZW5hbWUgYSBicmFuY2gsIGV2ZW4gaWYgdGFyZ2V0IGV4aXN0cyIKK21zZ3N0ciAi56e75YqoL+mHjeWRveWQjeS4gOS4quWIhuaUr++8jOWNs+S9v+ebruagh+W3suWtmOWcqCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDUKK21zZ2lkICJsaXN0IGJyYW5jaCBuYW1lcyIKK21zZ3N0ciAi5YiX5Ye65YiG5pSv5ZCNIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg0NgorbXNnaWQgImNyZWF0ZSB0aGUgYnJhbmNoJ3MgcmVmbG9nIgorbXNnc3RyICLliJvlu7rliIbmlK/nmoTlvJXnlKjml6Xlv5ciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODQ4Cittc2dpZCAiZWRpdCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBicmFuY2giCittc2dzdHIgIuagh+iusOWIhuaUr+eahOaPj+i/sCIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NDkKK21zZ2lkICJmb3JjZSBjcmVhdGlvbiwgbW92ZS9yZW5hbWUsIGRlbGV0aW9uIgorbXNnc3RyICLlvLrliLbliJvlu7rjgIHnp7vliqgv6YeN5ZG95ZCN44CB5Yig6ZmkIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg1MgorbXNnaWQgInByaW50IG9ubHkgbm90IG1lcmdlZCBicmFuY2hlcyIKK21zZ3N0ciAi5Y+q5omT5Y2w5rKh5pyJ5ZCI5bm255qE5YiG5pSvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjg1OAorbXNnaWQgInByaW50IG9ubHkgbWVyZ2VkIGJyYW5jaGVzIgorbXNnc3RyICLlj6rmiZPljbDlkIjlubbnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODYyCittc2dpZCAibGlzdCBicmFuY2hlcyBpbiBjb2x1bW5zIgorbXNnc3RyICLku6XliJfnmoTmlrnlvI/mmL7npLrliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6ODc1Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgSEVBRCBhcyBhIHZhbGlkIHJlZi4iCittc2dzdHIgIuaXoOazleWwhiBIRUFEIOino+aekOS4uuacieaViOW8leeUqOOAgiIKKworIzogYnVpbHRpbi9icmFuY2guYzo4NzkgYnVpbHRpbi9jbG9uZS5jOjY5MAorbXNnaWQgIkhFQUQgbm90IGZvdW5kIGJlbG93IHJlZnMvaGVhZHMhIgorbXNnc3RyICJIRUFEIOayoeacieS9jeS6jiAvcmVmcy9oZWFkcyDkuYvkuIvvvIEiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTAxCittc2dpZCAiLS1jb2x1bW4gYW5kIC0tdmVyYm9zZSBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLWNvbHVtbiDlkowgLS12ZXJib3NlIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9icmFuY2guYzo5MTIgYnVpbHRpbi9icmFuY2guYzo5NTEKK21zZ2lkICJicmFuY2ggbmFtZSByZXF1aXJlZCIKK21zZ3N0ciAi5b+F6aG75o+Q5L6b5YiG5pSv5ZCNIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjkyNworbXNnaWQgIkNhbm5vdCBnaXZlIGRlc2NyaXB0aW9uIHRvIGRldGFjaGVkIEhFQUQiCittc2dzdHIgIuS4jeiDveWQkeWIhuemu+WktOaMh+mSiOaPkOS+m+aPj+i/sCIKKworIzogYnVpbHRpbi9icmFuY2guYzo5MzIKK21zZ2lkICJjYW5ub3QgZWRpdCBkZXNjcmlwdGlvbiBvZiBtb3JlIHRoYW4gb25lIGJyYW5jaCIKK21zZ3N0ciAi5LiN6IO95Li65LiA5Liq5Lul5LiK55qE5YiG5pSv57yW6L6R5o+P6L+wIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjkzOQorIywgYy1mb3JtYXQKK21zZ2lkICJObyBjb21taXQgb24gYnJhbmNoICclcycgeWV0LiIKK21zZ3N0ciAi5YiG5pSvICclcycg5bCa5peg5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjk0MgorIywgYy1mb3JtYXQKK21zZ2lkICJObyBicmFuY2ggbmFtZWQgJyVzJy4iCittc2dzdHIgIuayoeacieWIhuaUryAnJXMn44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjk1NworbXNnaWQgInRvbyBtYW55IGJyYW5jaGVzIGZvciBhIHJlbmFtZSBvcGVyYXRpb24iCittc2dzdHIgIuS4uumHjeWRveWQjeaTjeS9nOaPkOS+m+S6huWkquWkmueahOWIhuaUr+WQjSIKKworIzogYnVpbHRpbi9icmFuY2guYzo5NjIKK21zZ2lkICJ0b28gbWFueSBicmFuY2hlcyB0byBzZXQgbmV3IHVwc3RyZWFtIgorbXNnc3RyICLkuLrorr7nva7mlrDkuIrmuLjmj5DkvpvkuoblpKrlpJrnmoTliIbmlK/lkI0iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjb3VsZCBub3Qgc2V0IHVwc3RyZWFtIG9mIEhFQUQgdG8gJXMgd2hlbiBpdCBkb2VzIG5vdCBwb2ludCB0byBhbnkgYnJhbmNoLiIKK21zZ3N0ciAi5peg5rOV6K6+572uIEhFQUQg55qE5LiK5ri45Li6ICVz77yM5Zug5Li6IEhFQUQg5rKh5pyJ5oyH5ZCR5Lu75L2V5YiG5pSv44CCIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjk2OSBidWlsdGluL2JyYW5jaC5jOjk5MSBidWlsdGluL2JyYW5jaC5jOjEwMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gc3VjaCBicmFuY2ggJyVzJyIKK21zZ3N0ciAi5rKh5pyJ5q2k5YiG5pSvICclcyciCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTczCisjLCBjLWZvcm1hdAorbXNnaWQgImJyYW5jaCAnJXMnIGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLliIbmlK8gJyVzJyDkuI3lrZjlnKgiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTg1Cittc2dpZCAidG9vIG1hbnkgYnJhbmNoZXMgdG8gdW5zZXQgdXBzdHJlYW0iCittc2dzdHIgIuS4uuWPlua2iOS4iua4uOiuvue9ruaTjeS9nOaPkOS+m+S6huWkquWkmueahOWIhuaUr+WQjSIKKworIzogYnVpbHRpbi9icmFuY2guYzo5ODkKK21zZ2lkICJjb3VsZCBub3QgdW5zZXQgdXBzdHJlYW0gb2YgSEVBRCB3aGVuIGl0IGRvZXMgbm90IHBvaW50IHRvIGFueSBicmFuY2guIgorbXNnc3RyICLml6Dms5Xlj5bmtoggSEVBRCDnmoTkuIrmuLjorr7nva7lm6DkuLrlroPmsqHmnInmjIflkJHkuIDkuKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6OTk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkJyYW5jaCAnJXMnIGhhcyBubyB1cHN0cmVhbSBpbmZvcm1hdGlvbiIKK21zZ3N0ciAi5YiG5pSvICclcycg5rKh5pyJ5LiK5ri45L+h5oGvIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMDkKK21zZ2lkICJpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIGNyZWF0ZSAnSEVBRCcgbWFudWFsbHkiCittc2dzdHIgIuaJi+W3peWIm+W7uiAnSEVBRCcg5rKh5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMTUKK21zZ2lkICItYSBhbmQgLXIgb3B0aW9ucyB0byAnZ2l0IGJyYW5jaCcgZG8gbm90IG1ha2Ugc2Vuc2Ugd2l0aCBhIGJyYW5jaCBuYW1lIgorbXNnc3RyICInZ2l0IGJyYW5jaCcg55qEIC1hIOWSjCAtciDpgInpobnluKbkuIDkuKrliIbmlK/lkI3lj4LmlbDmsqHmnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAxOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIC0tc2V0LXVwc3RyZWFtIGZsYWcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLiBDb25zaWRlciB1c2luZyAtLSIKKyJ0cmFjayBvciAtLXNldC11cHN0cmVhbS10b1xuIgorbXNnc3RyICIiCisi6YCJ6aG5IC0tc2V0LXVwc3RyZWFtIOW3suW8g+eUqOW5tuWwhuiiq+enu+mZpOOAguiAg+iZkeS9v+eUqCAtLXRyYWNrIOaIliAtLXNldC11cHN0cmVhbS10b1xuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIklmIHlvdSB3YW50ZWQgdG8gbWFrZSAnJXMnIHRyYWNrICclcycsIGRvIHRoaXM6XG4iCisiXG4iCittc2dzdHIgIiIKKyJcbiIKKyLlpoLmnpzkvaDmg7PnlKggJyVzJyDot5/ouKogJyVzJywg6L+Z5LmI5YGa77yaXG4iCisiXG4iCisKKyM6IGJ1aWx0aW4vYnJhbmNoLmM6MTAzNgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgZ2l0IGJyYW5jaCAtZCAlc1xuIgorbXNnc3RyICIgICAgZ2l0IGJyYW5jaCAtZCAlc1xuIgorCisjOiBidWlsdGluL2JyYW5jaC5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gJXNcbiIKK21zZ3N0ciAiICAgIGdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gJXNcbiIKKworIzogYnVpbHRpbi9idW5kbGUuYzo1MQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBpcyBva2F5XG4iCittc2dzdHIgIiVzIOWPr+S7pVxuIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY0Cittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gY3JlYXRlIGEgYnVuZGxlLiIKK21zZ3N0ciAi6ZyA6KaB5LiA5Liq5LuT5bqT5p2l5Yib5bu65YyF44CCIgorCisjOiBidWlsdGluL2J1bmRsZS5jOjY4Cittc2dpZCAiTmVlZCBhIHJlcG9zaXRvcnkgdG8gdW5idW5kbGUuIgorbXNnc3RyICLpnIDopoHkuIDkuKrku5PlupPmnaXop6PljIXjgIIiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0MjgKK21zZ2lkICIiCisiZ2l0IGNhdC1maWxlICgtdCBbLS1hbGxvdy11bmtub3duLXR5cGVdfC1zIFstLWFsbG93LXVua25vd24tdHlwZV18LWV8LXB8IgorIjx0eXBlPnwtLXRleHRjb252KSA8b2JqZWN0PiIKK21zZ3N0ciAiIgorImdpdCBjYXQtZmlsZSAoLXQgWy0tYWxsb3ctdW5rbm93bi10eXBlXXwtcyBbLS1hbGxvdy11bmtub3duLXR5cGVdfC1lfC1wfDznsbvlnosiCisiPnwtLXRleHRjb252KSA85a+56LGhPiIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQyOQorbXNnaWQgIiIKKyJnaXQgY2F0LWZpbGUgKC0tYmF0Y2ggfCAtLWJhdGNoLWNoZWNrKSBbLS1mb2xsb3ctc3ltbGlua3NdIDwgPGxpc3Qtb2YtIgorIm9iamVjdHM+IgorbXNnc3RyICIiCisiZ2l0IGNhdC1maWxlICgtLWJhdGNoIHwgLS1iYXRjaC1jaGVjaykgWy0tZm9sbG93LXN5bWxpbmtzXSA8IDzlr7nosaHliJfooag+IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDY2Cittc2dpZCAiPHR5cGU+IGNhbiBiZSBvbmUgb2Y6IGJsb2IsIHRyZWUsIGNvbW1pdCwgdGFnIgorbXNnc3RyICI857G75Z6LPiDlj6/ku6XmmK/lhbbkuK3kuYvkuIDvvJpibG9i44CBdHJlZeOAgWNvbW1pdOOAgXRhZyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ2NworbXNnaWQgInNob3cgb2JqZWN0IHR5cGUiCittc2dzdHIgIuaYvuekuuWvueixoeexu+WeiyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ2OAorbXNnaWQgInNob3cgb2JqZWN0IHNpemUiCittc2dzdHIgIuaYvuekuuWvueixoeWkp+WwjyIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3MAorbXNnaWQgImV4aXQgd2l0aCB6ZXJvIHdoZW4gdGhlcmUncyBubyBlcnJvciIKK21zZ3N0ciAi5b2T5rKh5pyJ6ZSZ6K+v5pe26YCA5Ye65bm26L+U5Zue6Zu2IgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDcxCittc2dpZCAicHJldHR5LXByaW50IG9iamVjdCdzIGNvbnRlbnQiCittc2dzdHIgIue+juinguWcsOaJk+WNsOWvueixoeeahOWGheWuuSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ3MworbXNnaWQgImZvciBibG9iIG9iamVjdHMsIHJ1biB0ZXh0Y29udiBvbiBvYmplY3QncyBjb250ZW50IgorbXNnc3RyICLlr7nkuo7mlbDmja7lr7nosaHvvIzlr7nlhbblhoXlrrnmiafooYwgdGV4dGNvbnYiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzUKK21zZ2lkICJhbGxvdyAtcyBhbmQgLXQgdG8gd29yayB3aXRoIGJyb2tlbi9jb3JydXB0IG9iamVjdHMiCittc2dzdHIgIuWFgeiuuCAtcyDlkowgLXQg5a+55o2f5Z2P55qE5a+56LGh55Sf5pWIIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDc2Cittc2dpZCAiYnVmZmVyIC0tYmF0Y2ggb3V0cHV0IgorbXNnc3RyICLnvJPlhrIgLS1iYXRjaCDnmoTovpPlh7oiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0NzgKK21zZ2lkICJzaG93IGluZm8gYW5kIGNvbnRlbnQgb2Ygb2JqZWN0cyBmZWQgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuaYvuekuuS7juagh+WHhui+k+WFpeaPkOS+m+eahOWvueixoeeahOS/oeaBr+WSjOWGheWuuSIKKworIzogYnVpbHRpbi9jYXQtZmlsZS5jOjQ4MQorbXNnaWQgInNob3cgaW5mbyBhYm91dCBvYmplY3RzIGZlZCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5pi+56S65LuO5qCH5YeG6L6T5YWl5o+Q5L6b55qE5a+56LGh55qE5L+h5oGvIgorCisjOiBidWlsdGluL2NhdC1maWxlLmM6NDg0Cittc2dpZCAiZm9sbG93IGluLXRyZWUgc3ltbGlua3MgKHVzZWQgd2l0aCAtLWJhdGNoIG9yIC0tYmF0Y2gtY2hlY2spIgorbXNnc3RyICLot5/pmo/moJHlhoXnrKblj7fpk77mjqXvvIjlkowgLS1iYXRjaCDmiJYgLS1iYXRjaC1jaGVjayDlhbHnlKjvvIkiCisKKyM6IGJ1aWx0aW4vY2F0LWZpbGUuYzo0ODYKK21zZ2lkICJzaG93IGFsbCBvYmplY3RzIHdpdGggLS1iYXRjaCBvciAtLWJhdGNoLWNoZWNrIgorbXNnc3RyICLkvb/nlKggLS1iYXRjaCDmiJYgLS1iYXRjaC1jaGVjayDlj4LmlbDmmL7npLrmiYDmnInlr7nosaEiCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjExCittc2dpZCAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIFstLV0gPHBhdGhuYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLWF0dHIgWy1hIHwgLS1hbGwgfCA85bGe5oCnPi4uLl0gWy0tXSA86Lev5b6E5ZCNPi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTIKK21zZ2lkICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA8YXR0cj4uLi5dIDwgPGxpc3Qtb2YtcGF0aHM+IgorbXNnc3RyICJnaXQgY2hlY2stYXR0ciAtLXN0ZGluIFstel0gWy1hIHwgLS1hbGwgfCA85bGe5oCnPi4uLl0gPCA86Lev5b6E5YiX6KGoPiIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MTkKK21zZ2lkICJyZXBvcnQgYWxsIGF0dHJpYnV0ZXMgc2V0IG9uIGZpbGUiCittc2dzdHIgIuaKpeWRiuiuvue9ruWcqOaWh+S7tuS4iueahOaJgOacieWxnuaApyIKKworIzogYnVpbHRpbi9jaGVjay1hdHRyLmM6MjAKK21zZ2lkICJ1c2UgLmdpdGF0dHJpYnV0ZXMgb25seSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi5Y+q5L2/55So57Si5byV5Lit55qEIC5naXRhdHRyaWJ1dGVzIgorCisjOiBidWlsdGluL2NoZWNrLWF0dHIuYzoyMSBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjIyIGJ1aWx0aW4vaGFzaC1vYmplY3QuYzo5NgorbXNnaWQgInJlYWQgZmlsZSBuYW1lcyBmcm9tIHN0ZGluIgorbXNnc3RyICLku47moIflh4bovpPlhaXor7vlh7rmlofku7blkI0iCisKKyM6IGJ1aWx0aW4vY2hlY2stYXR0ci5jOjIzIGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MjQKK21zZ2lkICJ0ZXJtaW5hdGUgaW5wdXQgYW5kIG91dHB1dCByZWNvcmRzIGJ5IGEgTlVMIGNoYXJhY3RlciIKK21zZ3N0ciAi6L6T5YWl5ZKM6L6T5Ye655qE6K6w5b2V5L2/55SoIE5VTCDlrZfnrKbnu4jnu5MiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTggYnVpbHRpbi9jaGVja291dC5jOjExMzMgYnVpbHRpbi9nYy5jOjI2NworbXNnaWQgInN1cHByZXNzIHByb2dyZXNzIHJlcG9ydGluZyIKK21zZ3N0ciAi5LiN5pi+56S66L+b5bqm5oql5ZGKIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjI2Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgaW5wdXQgcGF0aHMiCittc2dzdHIgIuaYvuekuuacquWMuemFjeeahOi+k+WFpei3r+W+hCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoyOAorbXNnaWQgImlnbm9yZSBpbmRleCB3aGVuIGNoZWNraW5nIgorbXNnc3RyICLmo4Dmn6Xml7blv73nlaXntKLlvJUiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU0Cittc2dpZCAiY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKK21zZ3N0ciAi5LiN6IO95ZCM5pe25oyH5a6a6Lev5b6E5Y+KIC0tc3RkaW4g5Y+C5pWwIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE1NworbXNnaWQgIi16IG9ubHkgbWFrZXMgc2Vuc2Ugd2l0aCAtLXN0ZGluIgorbXNnc3RyICIteiDpnIDopoHlkowgLS1zdGRpbiDlj4LmlbDlhbHnlKjmiY3mnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vY2hlY2staWdub3JlLmM6MTU5Cittc2dpZCAibm8gcGF0aCBzcGVjaWZpZWQiCittc2dzdHIgIuacquaMh+Wumui3r+W+hCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjMKK21zZ2lkICItLXF1aWV0IGlzIG9ubHkgdmFsaWQgd2l0aCBhIHNpbmdsZSBwYXRobmFtZSIKK21zZ3N0ciAi5Y+C5pWwIC0tcXVpZXQg5Y+q5Zyo5o+Q5L6b5LiA5Liq6Lev5b6E5ZCN5pe25pyJ5pWIIgorCisjOiBidWlsdGluL2NoZWNrLWlnbm9yZS5jOjE2NQorbXNnaWQgImNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlIgorbXNnc3RyICLkuI3og73lkIzml7bmj5DkvpsgLS1xdWlldCDlkowgLS12ZXJib3NlIOWPguaVsCIKKworIzogYnVpbHRpbi9jaGVjay1pZ25vcmUuYzoxNjgKK21zZ2lkICItLW5vbi1tYXRjaGluZyBpcyBvbmx5IHZhbGlkIHdpdGggLS12ZXJib3NlIgorbXNnc3RyICItLW5vbi1tYXRjaGluZyDpgInpobnlj6rlnKjkvb/nlKggLS12ZXJib3NlIOaXtuacieaViCIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6OAorbXNnaWQgImdpdCBjaGVjay1tYWlsbWFwIFs8b3B0aW9ucz5dIDxjb250YWN0Pi4uLiIKK21zZ3N0ciAiZ2l0IGNoZWNrLW1haWxtYXAgWzzpgInpobk+XSA86IGU57O75Zyw5Z2APi4uLiIKKworIzogYnVpbHRpbi9jaGVjay1tYWlsbWFwLmM6MTMKK21zZ2lkICJhbHNvIHJlYWQgY29udGFjdHMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi6L+Y5LuO5qCH5YeG6L6T5YWl6K+75Y+W6IGU57O75Zyw5Z2AIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcGFyc2UgY29udGFjdDogJXMiCittc2dzdHIgIuS4jeiDveino+aekOiBlOezu+WcsOWdgO+8miVzIgorCisjOiBidWlsdGluL2NoZWNrLW1haWxtYXAuYzo0NworbXNnaWQgIm5vIGNvbnRhY3RzIHNwZWNpZmllZCIKK21zZ3N0ciAi5pyq5oyH5a6a6IGU57O75Zyw5Z2AIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTI2Cittc2dpZCAiZ2l0IGNoZWNrb3V0LWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCBjaGVja291dC1pbmRleCBbPOmAiemhuT5dIFstLV0gWzzmlofku7Y+Li4uXSIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE4OAorbXNnaWQgImNoZWNrIG91dCBhbGwgZmlsZXMgaW4gdGhlIGluZGV4IgorbXNnc3RyICLmo4Dlh7rntKLlvJXljLrnmoTmiYDmnInmlofku7YiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoxODkKK21zZ2lkICJmb3JjZSBvdmVyd3JpdGUgb2YgZXhpc3RpbmcgZmlsZXMiCittc2dzdHIgIuW8uuWItuimhueblueOsOacieeahOaWh+S7tiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5MQorbXNnaWQgIm5vIHdhcm5pbmcgZm9yIGV4aXN0aW5nIGZpbGVzIGFuZCBmaWxlcyBub3QgaW4gaW5kZXgiCittc2dzdHIgIuWtmOWcqOaIluS4jeWcqOe0ouW8leS4reeahOaWh+S7tumDveayoeacieitpuWRiiIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjE5MworbXNnaWQgImRvbid0IGNoZWNrb3V0IG5ldyBmaWxlcyIKK21zZ3N0ciAi5LiN5qOA5Ye65paw5paH5Lu2IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MTk1Cittc2dpZCAidXBkYXRlIHN0YXQgaW5mb3JtYXRpb24gaW4gdGhlIGluZGV4IGZpbGUiCittc2dzdHIgIuabtOaWsOe0ouW8leS4reaWh+S7tueahOeKtuaAgeS/oeaBryIKKworIzogYnVpbHRpbi9jaGVja291dC1pbmRleC5jOjIwMQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5LuO5qCH5YeG6L6T5YWl6K+75Y+W6Lev5b6E5YiX6KGoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjAzCittc2dpZCAid3JpdGUgdGhlIGNvbnRlbnQgdG8gdGVtcG9yYXJ5IGZpbGVzIgorbXNnc3RyICLlsIblhoXlrrnlhpnlhaXkuLTml7bmlofku7YiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQtaW5kZXguYzoyMDQgYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgInN0cmluZyIKK21zZ3N0ciAi5a2X56ym5LiyIgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA1Cittc2dpZCAid2hlbiBjcmVhdGluZyBmaWxlcywgcHJlcGVuZCA8c3RyaW5nPiIKK21zZ3N0ciAi5Zyo5Yib5bu65paH5Lu25pe277yM5Zyo5YmN6Z2i5Yqg5LiKIDzlrZfnrKbkuLI+IgorCisjOiBidWlsdGluL2NoZWNrb3V0LWluZGV4LmM6MjA4Cittc2dpZCAiY29weSBvdXQgdGhlIGZpbGVzIGZyb20gbmFtZWQgc3RhZ2UiCittc2dzdHIgIuS7juaMh+WumuaaguWtmOWMuuS4reaLt+WHuuaWh+S7tiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI1Cittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIDxicmFuY2g+IgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzzpgInpobk+XSA85YiG5pSvPiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjI2Cittc2dpZCAiZ2l0IGNoZWNrb3V0IFs8b3B0aW9ucz5dIFs8YnJhbmNoPl0gLS0gPGZpbGU+Li4uIgorbXNnc3RyICJnaXQgY2hlY2tvdXQgWzzpgInpobk+XSBbPOWIhuaUrz5dIC0tIDzmlofku7Y+Li4uIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTMzIGJ1aWx0aW4vY2hlY2tvdXQuYzoxNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgb3VyIHZlcnNpb24iCittc2dzdHIgIui3r+W+hCAnJXMnIOayoeacieaIkeS7rOeahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEzNSBidWlsdGluL2NoZWNrb3V0LmM6MTY4CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBkb2VzIG5vdCBoYXZlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIui3r+W+hCAnJXMnIOayoeacieS7luS7rOeahOeJiOacrCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJwYXRoICclcycgZG9lcyBub3QgaGF2ZSBhbGwgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLot6/lvoQgJyVzJyDmsqHmnInlhajpg6jlv4XpobvnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnIGRvZXMgbm90IGhhdmUgbmVjZXNzYXJ5IHZlcnNpb25zIgorbXNnc3RyICLot6/lvoQgJyVzJyDmsqHmnInlv4XpobvnmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyMTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGF0aCAnJXMnOiBjYW5ub3QgbWVyZ2UiCittc2dzdHIgInBhdGggJyVzJ++8muaXoOazleWQiOW5tiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjIyOQorIywgYy1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gYWRkIG1lcmdlIHJlc3VsdCBmb3IgJyVzJyIKK21zZ3N0ciAi5peg5rOV5Li6ICclcycg5re75Yqg5ZCI5bm257uT5p6cIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjUwIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNTMgYnVpbHRpbi9jaGVja291dC5jOjI1NgorIzogYnVpbHRpbi9jaGVja291dC5jOjI1OQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGNhbm5vdCBiZSB1c2VkIHdpdGggdXBkYXRpbmcgcGF0aHMiCittc2dzdHIgIiclcycg5LiN6IO95Zyo5pu05paw6Lev5b6E5pe25L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MjYyIGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICVzIgorbXNnc3RyICInJXMnIOS4jeiDveWSjCAlcyDlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSBwYXRocyBhbmQgc3dpdGNoIHRvIGJyYW5jaCAnJXMnIGF0IHRoZSBzYW1lIHRpbWUuIgorbXNnc3RyICLkuI3og73lkIzml7bmm7TmlrDot6/lvoTlubbliIfmjaLliLDliIbmlK8nJXMn44CCIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Mjc5IGJ1aWx0aW4vY2hlY2tvdXQuYzo0NzMKK21zZ2lkICJjb3JydXB0IGluZGV4IGZpbGUiCittc2dzdHIgIuaNn+Wdj+eahOe0ouW8leaWh+S7tiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjMzOSBidWlsdGluL2NoZWNrb3V0LmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgInBhdGggJyVzJyBpcyB1bm1lcmdlZCIKK21zZ3N0ciAi6Lev5b6EICclcycg5pyq5ZCI5bm2IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NDk1Cittc2dpZCAieW91IG5lZWQgdG8gcmVzb2x2ZSB5b3VyIGN1cnJlbnQgaW5kZXggZmlyc3QiCittc2dzdHIgIuaCqOmcgOimgeWFiOino+WGs+W9k+WJjee0ouW8leeahOWGsueqgSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjYyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDYW4gbm90IGRvIHJlZmxvZyBmb3IgJyVzJzogJXNcbiIKK21zZ3N0ciAi5LiN6IO95a+5ICclcycg5omn6KGMIHJlZmxvZyDmk43kvZzvvJolc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjYwCittc2dpZCAiSEVBRCBpcyBub3cgYXQiCittc2dzdHIgIkhFQUQg55uu5YmN5L2N5LqOIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NjY3CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIumHjee9ruWIhuaUryAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWxyZWFkeSBvbiAnJXMnXG4iCittc2dzdHIgIuW3sue7j+S9jeS6jiAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYW5kIHJlc2V0IGJyYW5jaCAnJXMnXG4iCittc2dzdHIgIuWIh+aNouW5tumHjee9ruWIhuaUryAnJXMnXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo2NzYgYnVpbHRpbi9jaGVja291dC5jOjEwNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3dpdGNoZWQgdG8gYSBuZXcgYnJhbmNoICclcydcbiIKK21zZ3N0ciAi5YiH5o2i5Yiw5LiA5Liq5paw5YiG5pSvICclcydcbiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjY3OAorIywgYy1mb3JtYXQKK21zZ2lkICJTd2l0Y2hlZCB0byBicmFuY2ggJyVzJ1xuIgorbXNnc3RyICLliIfmjaLliLDliIbmlK8gJyVzJ1xuIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIC4uLiBhbmQgJWQgbW9yZS5cbiIKK21zZ3N0ciAiIC4uLiDlj4rlhbblroMgJWQg5Liq44CCXG4iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzo3MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXQgYmVoaW5kLCBub3QgY29ubmVjdGVkIHRvXG4iCisiYW55IG9mIHlvdXIgYnJhbmNoZXM6XG4iCisiXG4iCisiJXNcbiIKK21zZ2lkX3BsdXJhbCAiIgorIldhcm5pbmc6IHlvdSBhcmUgbGVhdmluZyAlZCBjb21taXRzIGJlaGluZCwgbm90IGNvbm5lY3RlZCB0b1xuIgorImFueSBvZiB5b3VyIGJyYW5jaGVzOlxuIgorIlxuIgorIiVzXG4iCittc2dzdHJbMF0gIiIKKyLorablkYrvvJrmgqjmraPkuKLkuIsgJWQg5Liq5o+Q5Lqk77yM5pyq5ZKM5Lu75L2V5YiG5pSv5YWz6IGU77yaXG4iCisiXG4iCisiJXNcbiIKK21zZ3N0clsxXSAiIgorIuitpuWRiu+8muaCqOato+S4ouS4iyAlZCDkuKrmj5DkuqTvvIzmnKrlkozku7vkvZXliIbmlK/lhbPogZTvvJpcbiIKKyJcbiIKKyIlc1xuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIGl0IGJ5IGNyZWF0aW5nIGEgbmV3IGJyYW5jaCwgdGhpcyBtYXkgYmUgYSBnb29kIHRpbWVcbiIKKyJ0byBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDxuZXctYnJhbmNoLW5hbWU+ICVzXG4iCisiXG4iCittc2dpZF9wbHVyYWwgIiIKKyJJZiB5b3Ugd2FudCB0byBrZWVwIHRoZW0gYnkgY3JlYXRpbmcgYSBuZXcgYnJhbmNoLCB0aGlzIG1heSBiZSBhIGdvb2QgdGltZVxuIgorInRvIGRvIHNvIHdpdGg6XG4iCisiXG4iCisiIGdpdCBicmFuY2ggPG5ldy1icmFuY2gtbmFtZT4gJXNcbiIKKyJcbiIKK21zZ3N0clswXSAiIgorIuWmguaenOaCqOaDs+imgemAmui/h+WIm+W7uuaWsOWIhuaUr+S/neWtmOWug++8jOi/meWPr+iDveaYr+S4gOS4quWlveaXtuWAmeOAglxuIgorIuWmguS4i+aTjeS9nO+8mlxuIgorIlxuIgorIiBnaXQgYnJhbmNoIDzmlrDliIbmlK/lkI0+ICVzXG4iCisiXG4iCittc2dzdHJbMV0gIiIKKyLlpoLmnpzmgqjmg7PopoHpgJrov4fliJvlu7rmlrDliIbmlK/kv53lrZjlroPku6zvvIzov5nlj6/og73mmK/kuIDkuKrlpb3ml7blgJnjgIJcbiIKKyLlpoLkuIvmk43kvZzvvJpcbiIKKyJcbiIKKyIgZ2l0IGJyYW5jaCA85paw5YiG5pSv5ZCNPiAlc1xuIgorIlxuIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6NzkxCittc2dpZCAiaW50ZXJuYWwgZXJyb3IgaW4gcmV2aXNpb24gd2FsayIKK21zZ3N0ciAi5Zyo54mI5pys6YGN5Y6G5pe26YGH5Yiw5YaF6YOo6ZSZ6K+vIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6Nzk1Cittc2dpZCAiUHJldmlvdXMgSEVBRCBwb3NpdGlvbiB3YXMiCittc2dzdHIgIuS5i+WJjeeahCBIRUFEIOS9jee9ruaYryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjgyMiBidWlsdGluL2NoZWNrb3V0LmM6MTA2MAorbXNnaWQgIllvdSBhcmUgb24gYSBicmFuY2ggeWV0IHRvIGJlIGJvcm4iCittc2dzdHIgIuaCqOS9jeS6juS4gOS4quWwmuacquWIneWni+WMlueahOWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjk2NworIywgYy1mb3JtYXQKK21zZ2lkICJvbmx5IG9uZSByZWZlcmVuY2UgZXhwZWN0ZWQsICVkIGdpdmVuLiIKK21zZ3N0ciAi5Y+q6KaB5LiA5Liq5byV55So77yM5Y2057uZ5Ye65LqGICVkIOS4qiIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEwMDYgYnVpbHRpbi93b3JrdHJlZS5jOjIxMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIHJlZmVyZW5jZTogJXMiCittc2dzdHIgIuaXoOaViOW8leeUqO+8miVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTAzNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgaXMgbm90IGEgdHJlZTogJXMiCittc2dzdHIgIuW8leeUqOS4jeaYr+S4gOS4quagke+8miVzIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA3NAorbXNnaWQgInBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGggc3dpdGNoaW5nIGJyYW5jaGVzIgorbXNnc3RyICLot6/lvoTkuI3og73lkozliIfmjaLliIbmlK/lkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDc3IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiclcycgY2Fubm90IGJlIHVzZWQgd2l0aCBzd2l0Y2hpbmcgYnJhbmNoZXMiCittc2dzdHIgIiclcycg5LiN6IO95ZKM5YiH5o2i5YiG5pSv5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTA4NSBidWlsdGluL2NoZWNrb3V0LmM6MTA4OCBidWlsdGluL2NoZWNrb3V0LmM6MTA5MworIzogYnVpbHRpbi9jaGVja291dC5jOjEwOTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBjYW5ub3QgYmUgdXNlZCB3aXRoICclcyciCittc2dzdHIgIiclcycg5LiN6IO95ZKMICclcycg5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEwMQorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3Qgc3dpdGNoIGJyYW5jaCB0byBhIG5vbi1jb21taXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO95YiH5o2i5YiG5pSv5Yiw5LiA5Liq6Z2e5o+Q5LqkICclcyciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM0IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM2IGJ1aWx0aW4vY2xvbmUuYzo4MworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTkgYnVpbHRpbi9yZW1vdGUuYzoxNjEgYnVpbHRpbi93b3JrdHJlZS5jOjMxNworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMxOQorbXNnaWQgImJyYW5jaCIKK21zZ3N0ciAi5YiG5pSvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTEzNQorbXNnaWQgImNyZWF0ZSBhbmQgY2hlY2tvdXQgYSBuZXcgYnJhbmNoIgorbXNnc3RyICLliJvlu7rlubbmo4Dlh7rkuIDkuKrmlrDnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM3Cittc2dpZCAiY3JlYXRlL3Jlc2V0IGFuZCBjaGVja291dCBhIGJyYW5jaCIKK21zZ3N0ciAi5Yib5bu6L+mHjee9ruW5tuajgOWHuuS4gOS4quWIhuaUryIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExMzgKK21zZ2lkICJjcmVhdGUgcmVmbG9nIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLkuLrmlrDnmoTliIbmlK/liJvlu7rlvJXnlKjml6Xlv5ciCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTM5Cittc2dpZCAiZGV0YWNoIHRoZSBIRUFEIGF0IG5hbWVkIGNvbW1pdCIKK21zZ3N0ciAi5oiQ5Li65oyH5ZCR6K+l5o+Q5Lqk55qE5YiG56a75aS05oyH6ZKIIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0MAorbXNnaWQgInNldCB1cHN0cmVhbSBpbmZvIGZvciBuZXcgYnJhbmNoIgorbXNnc3RyICLkuLrmlrDnmoTliIbmlK/orr7nva7kuIrmuLjkv6Hmga8iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQyCittc2dpZCAibmV3LWJyYW5jaCIKK21zZ3N0ciAi5paw5YiG5pSvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0MgorbXNnaWQgIm5ldyB1bnBhcmVudGVkIGJyYW5jaCIKK21zZ3N0ciAi5paw55qE5rKh5pyJ54i25o+Q5Lqk55qE5YiG5pSvIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0MworbXNnaWQgImNoZWNrb3V0IG91ciB2ZXJzaW9uIGZvciB1bm1lcmdlZCBmaWxlcyIKK21zZ3N0ciAi5a+55bCa5pyq5ZCI5bm255qE5paH5Lu25qOA5Ye65oiR5Lus55qE54mI5pysIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0NQorbXNnaWQgImNoZWNrb3V0IHRoZWlyIHZlcnNpb24gZm9yIHVubWVyZ2VkIGZpbGVzIgorbXNnc3RyICLlr7nlsJrmnKrlkIjlubbnmoTmlofku7bmo4Dlh7rku5bku6znmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTQ3Cittc2dpZCAiZm9yY2UgY2hlY2tvdXQgKHRocm93IGF3YXkgbG9jYWwgbW9kaWZpY2F0aW9ucykiCittc2dzdHIgIuW8uuWItuajgOWHuu+8iOS4ouW8g+acrOWcsOS/ruaUue+8iSIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNDgKK21zZ2lkICJwZXJmb3JtIGEgMy13YXkgbWVyZ2Ugd2l0aCB0aGUgbmV3IGJyYW5jaCIKK21zZ3N0ciAi5ZKM5paw55qE5YiG5pSv5omn6KGM5LiJ5pa55ZCI5bm2IgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE0OSBidWlsdGluL21lcmdlLmM6MjI3Cittc2dpZCAidXBkYXRlIGlnbm9yZWQgZmlsZXMgKGRlZmF1bHQpIgorbXNnc3RyICLmm7TmlrDlv73nlaXnmoTmlofku7bvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTUwIGJ1aWx0aW4vbG9nLmM6MTI2NCBwYXJzZS1vcHRpb25zLmg6MjQ5Cittc2dpZCAic3R5bGUiCittc2dzdHIgIumjjuagvCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjExNTEKK21zZ2lkICJjb25mbGljdCBzdHlsZSAobWVyZ2Ugb3IgZGlmZjMpIgorbXNnc3RyICLlhrLnqoHovpPlh7rpo47moLzvvIhtZXJnZSDmiJYgZGlmZjPvvIkiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTU0Cittc2dpZCAiZG8gbm90IGxpbWl0IHBhdGhzcGVjcyB0byBzcGFyc2UgZW50cmllcyBvbmx5IgorbXNnc3RyICLlr7not6/lvoTkuI3lgZrnqIDnlo/mo4Dlh7rnmoTpmZDliLYiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMTU2Cittc2dpZCAic2Vjb25kIGd1ZXNzICdnaXQgY2hlY2tvdXQgPG5vLXN1Y2gtYnJhbmNoPiciCittc2dzdHIgIuS6jOasoeeMnOa1iydnaXQgY2hlY2tvdXQgPOaXoOatpOWIhuaUrz4nIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE1OAorbXNnaWQgImRvIG5vdCBjaGVjayBpZiBhbm90aGVyIHdvcmt0cmVlIGlzIGhvbGRpbmcgdGhlIGdpdmVuIHJlZiIKK21zZ3N0ciAi5LiN5qOA5p+l5oyH5a6a55qE5byV55So5piv5ZCm6KKr5YW25LuW5bel5L2c5Yy65omA5Y2g55SoIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE4MQorbXNnaWQgIi1iLCAtQiBhbmQgLS1vcnBoYW4gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKK21zZ3N0ciAiLWLjgIEtQiDlkowgLS1vcnBoYW4g5piv5LqS5pal55qEIgorCisjOiBidWlsdGluL2NoZWNrb3V0LmM6MTE5OAorbXNnaWQgIi0tdHJhY2sgbmVlZHMgYSBicmFuY2ggbmFtZSIKK21zZ3N0ciAiLS10cmFjayDpnIDopoHkuIDkuKrliIbmlK/lkI0iCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjAzCittc2dpZCAiTWlzc2luZyBicmFuY2ggbmFtZTsgdHJ5IC1iIgorbXNnc3RyICLnvLrlsJHliIbmlK/lkI3vvJvlsJ3or5UgLWIiCisKKyM6IGJ1aWx0aW4vY2hlY2tvdXQuYzoxMjM5Cittc2dpZCAiaW52YWxpZCBwYXRoIHNwZWNpZmljYXRpb24iCittc2dzdHIgIuaXoOaViOeahOi3r+W+hOinhOagvCIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCB1cGRhdGUgcGF0aHMgYW5kIHN3aXRjaCB0byBicmFuY2ggJyVzJyBhdCB0aGUgc2FtZSB0aW1lLlxuIgorIkRpZCB5b3UgaW50ZW5kIHRvIGNoZWNrb3V0ICclcycgd2hpY2ggY2FuIG5vdCBiZSByZXNvbHZlZCBhcyBjb21taXQ/IgorbXNnc3RyICIiCisi5LiN6IO95ZCM5pe25pu05paw6Lev5b6E5bm25YiH5o2i5Yiw5YiG5pSvJyVzJ+OAglxuIgorIuaCqOaYr+aDs+imgeajgOWHuiAnJXMnIOS9huWFtuacquiDveino+aekOS4uuaPkOS6pOS5iO+8nyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiZ2l0IGNoZWNrb3V0OiAtLWRldGFjaCBkb2VzIG5vdCB0YWtlIGEgcGF0aCBhcmd1bWVudCAnJXMnIgorbXNnc3RyICJnaXQgY2hlY2tvdXTvvJotLWRldGFjaCDkuI3og73mjqXmlLbot6/lvoTlj4LmlbAgJyVzJyIKKworIzogYnVpbHRpbi9jaGVja291dC5jOjEyNTUKK21zZ2lkICIiCisiZ2l0IGNoZWNrb3V0OiAtLW91cnMvLS10aGVpcnMsIC0tZm9yY2UgYW5kIC0tbWVyZ2UgYXJlIGluY29tcGF0aWJsZSB3aGVuXG4iCisiY2hlY2tpbmcgb3V0IG9mIHRoZSBpbmRleC4iCittc2dzdHIgIiIKKyJnaXQgY2hlY2tvdXTvvJrlnKjku47ntKLlvJXmo4Dlh7rml7bvvIwtLW91cnMvLS10aGVpcnPjgIEtLWZvcmNlIOWSjCAtLW1lcmdlIOS4jeWFvOWuueOAgiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI1Cittc2dpZCAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDxwYXR0ZXJuPl0gWy14IHwgLVhdIFstLV0gPHBhdGhzPi4uLiIKK21zZ3N0ciAiIgorImdpdCBjbGVhbiBbLWRdIFstZl0gWy1pXSBbLW5dIFstcV0gWy1lIDzmqKHlvI8+XSBbLXggfCAtWF0gWy0tXSA86Lev5b6EPi4uLiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjI5CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nICVzXG4iCittc2dzdHIgIuato+WIoOmZpCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiV291bGQgcmVtb3ZlICVzXG4iCittc2dzdHIgIuWwhuWIoOmZpCAlc1xuIgorCisjOiBidWlsdGluL2NsZWFuLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU2tpcHBpbmcgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICLlv73nlaXku5PlupMgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIldvdWxkIHNraXAgcmVwb3NpdG9yeSAlc1xuIgorbXNnc3RyICLlsIblv73nlaXku5PlupMgJXNcbiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byByZW1vdmUgJXMiCittc2dzdHIgIuaXoOazleWIoOmZpCAlcyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjMxNworbXNnaWQgIiIKKyJQcm9tcHQgaGVscDpcbiIKKyIxICAgICAgICAgIC0gc2VsZWN0IGEgbnVtYmVyZWQgaXRlbVxuIgorImZvbyAgICAgICAgLSBzZWxlY3QgaXRlbSBiYXNlZCBvbiB1bmlxdWUgcHJlZml4XG4iCisiICAgICAgICAgICAtIChlbXB0eSkgc2VsZWN0IG5vdGhpbmciCittc2dzdHIgIiIKKyLluK7liqnvvJpcbiIKKyIxICAgICAgICAgIC0g6YCa6L+H57yW5Y+36YCJ5oup5LiA5Liq6YCJ6aG5XG4iCisiZm9vICAgICAgICAtIOmAmui/h+agh+mimOmAieaLqeS4gOS4qumAiemhuVxuIgorIiAgICAgICAgICAgLSDvvIjnqbrvvInku4DkuYjkuZ/kuI3pgInmi6kiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzozMjEKK21zZ2lkICIiCisiUHJvbXB0IGhlbHA6XG4iCisiMSAgICAgICAgICAtIHNlbGVjdCBhIHNpbmdsZSBpdGVtXG4iCisiMy01ICAgICAgICAtIHNlbGVjdCBhIHJhbmdlIG9mIGl0ZW1zXG4iCisiMi0zLDYtOSAgICAtIHNlbGVjdCBtdWx0aXBsZSByYW5nZXNcbiIKKyJmb28gICAgICAgIC0gc2VsZWN0IGl0ZW0gYmFzZWQgb24gdW5pcXVlIHByZWZpeFxuIgorIi0uLi4gICAgICAgLSB1bnNlbGVjdCBzcGVjaWZpZWQgaXRlbXNcbiIKKyIqICAgICAgICAgIC0gY2hvb3NlIGFsbCBpdGVtc1xuIgorIiAgICAgICAgICAgLSAoZW1wdHkpIGZpbmlzaCBzZWxlY3RpbmciCittc2dzdHIgIiIKKyLluK7liqnvvJpcbiIKKyIxICAgICAgICAgIC0g6YCJ5oup5LiA5Liq6YCJ6aG5XG4iCisiMy01ICAgICAgICAtIOmAieaLqeS4gOS4quiMg+WbtOWGheeahOaJgOaciemAiemhuVxuIgorIjItMyw2LTkgICAgLSDpgInmi6nlpJrkuKrojIPlm7TlhoXnmoTmiYDmnInpgInpoblcbiIKKyJmb28gICAgICAgIC0g6YCa6L+H5qCH6aKY6YCJ5oup5LiA5Liq6YCJ6aG5XG4iCisiLS4uLiAgICAgICAtIOWPjemAieeJueWumueahOmAiemhuVxuIgorIiogICAgICAgICAgLSDpgInmi6nmiYDmnInpgInpoblcbiIKKyIgICAgICAgICAgIC0g77yI56m677yJ57uT5p2f6YCJ5oupIgorCisjOiBidWlsdGluL2NsZWFuLmM6NTM3CisjLCBjLWZvcm1hdAorbXNnaWQgIkh1aCAoJXMpPyIKK21zZ3N0ciAi5Zev77yIJXPvvInvvJ8iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo2NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW5wdXQgaWdub3JlIHBhdHRlcm5zPj4gIgorbXNnc3RyICLovpPlhaXmqKHniYjku6XmjpLpmaTmnaHnm64+PiAiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiV0FSTklORzogQ2Fubm90IGZpbmQgaXRlbXMgbWF0Y2hlZCBieTogJXMiCittc2dzdHIgIuitpuWRiu+8muaXoOazleaJvuWIsOWSjCAlcyDljLnphY3nmoTmnaHnm64iCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo3MzcKK21zZ2lkICJTZWxlY3QgaXRlbXMgdG8gZGVsZXRlIgorbXNnc3RyICLpgInmi6nopoHliKDpmaTnmoTmnaHnm64iCisKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8ga2VlcCBbeS9OXSBhcyBpcworIzogYnVpbHRpbi9jbGVhbi5jOjc3OAorIywgYy1mb3JtYXQKK21zZ2lkICJSZW1vdmUgJXMgW3kvTl0/ICIKK21zZ3N0ciAi5Yig6ZmkICVzIFt5L05d77yfIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODAzCittc2dpZCAiQnllLiIKK21zZ3N0ciAi5YaN6KeB44CCIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODExCittc2dpZCAiIgorImNsZWFuICAgICAgICAgICAgICAgLSBzdGFydCBjbGVhbmluZ1xuIgorImZpbHRlciBieSBwYXR0ZXJuICAgLSBleGNsdWRlIGl0ZW1zIGZyb20gZGVsZXRpb25cbiIKKyJzZWxlY3QgYnkgbnVtYmVycyAgIC0gc2VsZWN0IGl0ZW1zIHRvIGJlIGRlbGV0ZWQgYnkgbnVtYmVyc1xuIgorImFzayBlYWNoICAgICAgICAgICAgLSBjb25maXJtIGVhY2ggZGVsZXRpb24gKGxpa2UgXCJybSAtaVwiKVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSBzdG9wIGNsZWFuaW5nXG4iCisiaGVscCAgICAgICAgICAgICAgICAtIHRoaXMgc2NyZWVuXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIGhlbHAgZm9yIHByb21wdCBzZWxlY3Rpb24iCittc2dzdHIgIiIKKyJjbGVhbiAgICAgICAgICAgICAgIC0g5byA5aeL5riF55CGXG4iCisiZmlsdGVyIGJ5IHBhdHRlcm4gICAtIOmAmui/h+aooeeJiOaOkumZpOimgeWIoOmZpOeahOadoeebrlxuIgorInNlbGVjdCBieSBudW1iZXJzICAgLSDpgJrov4fmlbDlrZfpgInmi6nopoHliKDpmaTnmoTmnaHnm65cbiIKKyJhc2sgZWFjaCAgICAgICAgICAgIC0g6ZKI5a+55Yig6Zmk6YCQ5LiA6K+i6Zeu77yI5bCx5YOPIFwicm0gLWlcIu+8iVxuIgorInF1aXQgICAgICAgICAgICAgICAgLSDlgZzmraLliKDpmaTlubbpgIDlh7pcbiIKKyJoZWxwICAgICAgICAgICAgICAgIC0g5pi+56S65pys5biu5YqpXG4iCisiPyAgICAgICAgICAgICAgICAgICAtIOaYvuekuuWmguS9leWcqOaPkOekuuespuS4i+mAieaLqeeahOW4ruWKqSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjgzOAorbXNnaWQgIioqKiBDb21tYW5kcyAqKioiCittc2dzdHIgIioqKiDlkb3ku6QgKioqIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODM5Cittc2dpZCAiV2hhdCBub3ciCittc2dzdHIgIuivt+mAieaLqSIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg0NworbXNnaWQgIldvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGl0ZW06IgorbXNnaWRfcGx1cmFsICJXb3VsZCByZW1vdmUgdGhlIGZvbGxvd2luZyBpdGVtczoiCittc2dzdHJbMF0gIuWwhuWIoOmZpOWmguS4i+adoeebru+8miIKK21zZ3N0clsxXSAi5bCG5Yig6Zmk5aaC5LiL5p2h55uu77yaIgorCisjOiBidWlsdGluL2NsZWFuLmM6ODY0Cittc2dpZCAiTm8gbW9yZSBmaWxlcyB0byBjbGVhbiwgZXhpdGluZy4iCittc2dzdHIgIuayoeacieimgea4heeQhueahOaWh+S7tu+8jOmAgOWHuuOAgiIKKworIzogYnVpbHRpbi9jbGVhbi5jOjg5NQorbXNnaWQgImRvIG5vdCBwcmludCBuYW1lcyBvZiBmaWxlcyByZW1vdmVkIgorbXNnc3RyICLkuI3miZPljbDliKDpmaTmlofku7bnmoTlkI3np7AiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo4OTcKK21zZ2lkICJmb3JjZSIKK21zZ3N0ciAi5by65Yi2IgorCisjOiBidWlsdGluL2NsZWFuLmM6ODk4Cittc2dpZCAiaW50ZXJhY3RpdmUgY2xlYW5pbmciCittc2dzdHIgIuS6pOS6kuW8j+a4hemZpCIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwMAorbXNnaWQgInJlbW92ZSB3aG9sZSBkaXJlY3RvcmllcyIKK21zZ3N0ciAi5Yig6Zmk5pW05Liq55uu5b2VIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTAxIGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDcgYnVpbHRpbi9ncmVwLmM6NzE0CisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQzIGJ1aWx0aW4vbmFtZS1yZXYuYzozMTEgYnVpbHRpbi9zaG93LXJlZi5jOjE4NworbXNnaWQgInBhdHRlcm4iCittc2dzdHIgIuaooeW8jyIKKworIzogYnVpbHRpbi9jbGVhbi5jOjkwMgorbXNnaWQgImFkZCA8cGF0dGVybj4gdG8gaWdub3JlIHJ1bGVzIgorbXNnc3RyICLmt7vliqAgPOaooeW8jz4g5Yiw5b+955Wl6KeE5YiZIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTAzCittc2dpZCAicmVtb3ZlIGlnbm9yZWQgZmlsZXMsIHRvbyIKK21zZ3N0ciAi5Lmf5Yig6Zmk5b+955Wl55qE5paH5Lu2IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTA1Cittc2dpZCAicmVtb3ZlIG9ubHkgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAi5Y+q5Yig6Zmk5b+955Wl55qE5paH5Lu2IgorCisjOiBidWlsdGluL2NsZWFuLmM6OTIzCittc2dpZCAiLXggYW5kIC1YIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICIteCDlkowgLVgg5LiN6IO95ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NsZWFuLmM6OTI3Cittc2dpZCAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSBzZXQgdG8gdHJ1ZSBhbmQgbmVpdGhlciAtaSwgLW4sIG5vciAtZiBnaXZlbjsgcmVmdXNpbmcgdG8gIgorImNsZWFuIgorbXNnc3RyICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIOiuvue9ruS4uiB0cnVlIOS4lOacquaPkOS+myAtaeOAgS1uIOaIliAtZiDpgInpobnvvIzmi5Lnu53miafooYzmuIXnkIbliqjkvZwiCisKKyM6IGJ1aWx0aW4vY2xlYW4uYzo5MzAKK21zZ2lkICIiCisiY2xlYW4ucmVxdWlyZUZvcmNlIGRlZmF1bHRzIHRvIHRydWUgYW5kIG5laXRoZXIgLWksIC1uLCBub3IgLWYgZ2l2ZW47ICIKKyJyZWZ1c2luZyB0byBjbGVhbiIKK21zZ3N0ciAiIgorImNsZWFuLnJlcXVpcmVGb3JjZSDpu5jorqTkuLogdHJ1ZSDkuJTmnKrmj5DkvpsgLWnjgIEtbiDmiJYgLWYg6YCJ6aG577yM5ouS57ud5omn6KGM5riF55CG5Yqo5L2cIgorCisjOiBidWlsdGluL2Nsb25lLmM6MzcKK21zZ2lkICJnaXQgY2xvbmUgWzxvcHRpb25zPl0gWy0tXSA8cmVwbz4gWzxkaXI+XSIKK21zZ3N0ciAiZ2l0IGNsb25lIFs86YCJ6aG5Pl0gWy0tXSA85LuT5bqTPiBbPOi3r+W+hD5dIgorCisjOiBidWlsdGluL2Nsb25lLmM6NTcgYnVpbHRpbi9mZXRjaC5jOjExMiBidWlsdGluL21lcmdlLmM6MjI0CisjOiBidWlsdGluL3B1bGwuYzoxMDkgYnVpbHRpbi9wdXNoLmM6NTYwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY4Cittc2dpZCAiZm9yY2UgcHJvZ3Jlc3MgcmVwb3J0aW5nIgorbXNnc3RyICLlvLrliLbmmL7npLrov5vluqbmiqXlkYoiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo1OQorbXNnaWQgImRvbid0IGNyZWF0ZSBhIGNoZWNrb3V0IgorbXNnc3RyICLkuI3liJvlu7rkuIDkuKrmo4Dlh7oiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MCBidWlsdGluL2Nsb25lLmM6NjIgYnVpbHRpbi9pbml0LWRiLmM6NTA0Cittc2dpZCAiY3JlYXRlIGEgYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLliJvlu7rkuIDkuKrnuq/ku5PlupMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NAorbXNnaWQgImNyZWF0ZSBhIG1pcnJvciByZXBvc2l0b3J5IChpbXBsaWVzIGJhcmUpIgorbXNnc3RyICLliJvlu7rkuIDkuKrplZzlg4/ku5PlupPvvIjkuZ/mmK/nuq/ku5PlupPvvIkiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2NgorbXNnaWQgInRvIGNsb25lIGZyb20gYSBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLku47mnKzlnLDku5PlupPlhYvpmoYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2OAorbXNnaWQgImRvbid0IHVzZSBsb2NhbCBoYXJkbGlua3MsIGFsd2F5cyBjb3B5IgorbXNnc3RyICLkuI3kvb/nlKjmnKzlnLDnoazpk77mjqXvvIzlp4vnu4jlpI3liLYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MAorbXNnaWQgInNldHVwIGFzIHNoYXJlZCByZXBvc2l0b3J5IgorbXNnc3RyICLorr7nva7kuLrlhbHkuqvku5PlupMiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3MiBidWlsdGluL2Nsb25lLmM6NzQKK21zZ2lkICJpbml0aWFsaXplIHN1Ym1vZHVsZXMgaW4gdGhlIGNsb25lIgorbXNnc3RyICLlnKjlhYvpmobml7bliJ3lp4vljJblrZDmqKHnu4QiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo3NSBidWlsdGluL2luaXQtZGIuYzo1MDEKK21zZ2lkICJ0ZW1wbGF0ZS1kaXJlY3RvcnkiCittc2dzdHIgIuaooeadv+ebruW9lSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc2IGJ1aWx0aW4vaW5pdC1kYi5jOjUwMgorbXNnaWQgImRpcmVjdG9yeSBmcm9tIHdoaWNoIHRlbXBsYXRlcyB3aWxsIGJlIHVzZWQiCittc2dzdHIgIuaooeadv+ebruW9leWwhuiiq+S9v+eUqCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc4Cittc2dpZCAicmVmZXJlbmNlIHJlcG9zaXRvcnkiCittc2dzdHIgIuWPguiAg+S7k+W6kyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgwCittc2dpZCAidXNlIC0tcmVmZXJlbmNlIG9ubHkgd2hpbGUgY2xvbmluZyIKK21zZ3N0ciAi5LuF5Zyo5YWL6ZqG5pe25Y+C6ICDIC0tcmVmZXJlbmNlIOaMh+WQkeeahOacrOWcsOS7k+W6kyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjgxIGJ1aWx0aW4vY29sdW1uLmM6MjYgYnVpbHRpbi9tZXJnZS1maWxlLmM6NDQKK21zZ2lkICJuYW1lIgorbXNnc3RyICLlkI3np7AiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MgorbXNnaWQgInVzZSA8bmFtZT4gaW5zdGVhZCBvZiAnb3JpZ2luJyB0byB0cmFjayB1cHN0cmVhbSIKK21zZ3N0ciAi5L2/55SoIDzlkI3np7A+IOiAjOS4jeaYryAnb3JpZ2luJyDljrvot5/ouKrkuIrmuLgiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NAorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGluc3RlYWQgb2YgdGhlIHJlbW90ZSdzIEhFQUQiCittc2dzdHIgIuajgOWHuiA85YiG5pSvPiDogIzkuI3mmK/ov5znqIsgSEVBRCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2Cittc2dpZCAicGF0aCB0byBnaXQtdXBsb2FkLXBhY2sgb24gdGhlIHJlbW90ZSIKK21zZ3N0ciAi6L+c56iLIGdpdC11cGxvYWQtcGFjayDot6/lvoQiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NyBidWlsdGluL2ZldGNoLmM6MTEzIGJ1aWx0aW4vZ3JlcC5jOjY1OQorIzogYnVpbHRpbi9wdWxsLmM6MTg2Cittc2dpZCAiZGVwdGgiCittc2dzdHIgIua3seW6piIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg4Cittc2dpZCAiY3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBvZiB0aGF0IGRlcHRoIgorbXNnc3RyICLliJvlu7rkuIDkuKrmjIflrprmt7HluqbnmoTmtYXlhYvpmoYiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MAorbXNnaWQgImNsb25lIG9ubHkgb25lIGJyYW5jaCwgSEVBRCBvciAtLWJyYW5jaCIKK21zZ3N0ciAi5Y+q5YWL6ZqG5LiA5Liq5YiG5pSv44CBSEVBRCDmiJYgLS1icmFuY2giCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5MSBidWlsdGluL2luaXQtZGIuYzo1MTAKK21zZ2lkICJnaXRkaXIiCittc2dzdHIgImdpdOebruW9lSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyIGJ1aWx0aW4vaW5pdC1kYi5jOjUxMQorbXNnaWQgInNlcGFyYXRlIGdpdCBkaXIgZnJvbSB3b3JraW5nIHRyZWUiCittc2dzdHIgImdpdOebruW9leWSjOW3peS9nOWMuuWIhuemuyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkzCittc2dpZCAia2V5PXZhbHVlIgorbXNnc3RyICJrZXk9dmFsdWUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NAorbXNnaWQgInNldCBjb25maWcgaW5zaWRlIHRoZSBuZXcgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5Zyo5paw5LuT5bqT5Lit6K6+572u6YWN572u5L+h5oGvIgorCisjOiBidWlsdGluL2Nsb25lLmM6Mjk4CisjLCBjLWZvcm1hdAorbXNnaWQgInJlZmVyZW5jZSByZXBvc2l0b3J5ICclcycgaXMgbm90IGEgbG9jYWwgcmVwb3NpdG9yeS4iCittc2dzdHIgIuWPguiAg+S7k+W6kyAnJXMnIOS4jeaYr+S4gOS4quacrOWcsOS7k+W6k+OAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIHNoYWxsb3ciCittc2dzdHIgIuWPguiAg+S7k+W6kyAnJXMnIOaYr+S4gOS4qua1heWFi+mahiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJyZWZlcmVuY2UgcmVwb3NpdG9yeSAnJXMnIGlzIGdyYWZ0ZWQiCittc2dzdHIgIuWPguiAg+S7k+W6kyAnJXMnIOW3suiiq+WrgeaOpSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM3MCBidWlsdGluL2RpZmYuYzo4NAorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAnJXMnIgorbXNnc3RyICLml6Dms5XmnprkuL4gJyVzJyDnirbmgIEiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzozNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgZXhpc3RzIGFuZCBpcyBub3QgYSBkaXJlY3RvcnkiCittc2dzdHIgIiVzIOWtmOWcqOS4lOS4jeaYr+S4gOS4quebruW9lSIKKworIzogYnVpbHRpbi9jbG9uZS5jOjM4NgorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gc3RhdCAlc1xuIgorbXNnc3RyICLml6Dms5XmnprkuL4gJXMg54q25oCBXG4iCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBsaW5rICclcyciCittc2dzdHIgIuaXoOazleWIm+W7uumTvuaOpSAnJXMnIgorCisjOiBidWlsdGluL2Nsb25lLmM6NDEyCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjb3B5IGZpbGUgdG8gJyVzJyIKK21zZ3N0ciAi5peg5rOV5ou36LSd5paH5Lu26IezICclcyciCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo0MzUgYnVpbHRpbi9jbG9uZS5jOjYxOQorIywgYy1mb3JtYXQKK21zZ2lkICJkb25lLlxuIgorbXNnc3RyICLlrozmiJDjgIJcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjQ0NworbXNnaWQgIiIKKyJDbG9uZSBzdWNjZWVkZWQsIGJ1dCBjaGVja291dCBmYWlsZWQuXG4iCisiWW91IGNhbiBpbnNwZWN0IHdoYXQgd2FzIGNoZWNrZWQgb3V0IHdpdGggJ2dpdCBzdGF0dXMnXG4iCisiYW5kIHJldHJ5IHRoZSBjaGVja291dCB3aXRoICdnaXQgY2hlY2tvdXQgLWYgSEVBRCdcbiIKK21zZ3N0ciAiIgorIuWFi+mahuaIkOWKn++8jOS9huaYr+ajgOWHuuWksei0peOAglxuIgorIuaCqOWPr+S7pemAmui/hyAnZ2l0IHN0YXR1cycg5qOA5p+l5ZOq5Lqb5bey6KKr5qOA5Ye677yM54S25ZCO5L2/55So5ZG95LukXG4iCisiJ2dpdCBjaGVja291dCAtZiBIRUFEJyDph43or5VcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjUyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmluZCByZW1vdGUgYnJhbmNoICVzIHRvIGNsb25lLiIKK21zZ3N0ciAi5LiN6IO95Y+R546w6KaB5YWL6ZqG55qE6L+c56iL5YiG5pSvICVz44CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIGNvbm5lY3Rpdml0eS4uLiAiCittc2dzdHIgIuajgOafpei/nuaOpS4uLiAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo2MTcKK21zZ2lkICJyZW1vdGUgZGlkIG5vdCBzZW5kIGFsbCBuZWNlc3Nhcnkgb2JqZWN0cyIKK21zZ3N0ciAi6L+c56iL5rKh5pyJ5Y+R6YCB5omA5pyJ5b+F6aG755qE5a+56LGhIgorCisjOiBidWlsdGluL2Nsb25lLmM6NjgxCittc2dpZCAicmVtb3RlIEhFQUQgcmVmZXJzIHRvIG5vbmV4aXN0ZW50IHJlZiwgdW5hYmxlIHRvIGNoZWNrb3V0LlxuIgorbXNnc3RyICLov5znqIsgSEVBRCDmjIflkJHkuIDkuKrkuI3lrZjlnKjnmoTlvJXnlKjvvIzml6Dms5Xmo4Dlh7rjgIJcbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjcxMgorbXNnaWQgInVuYWJsZSB0byBjaGVja291dCB3b3JraW5nIHRyZWUiCittc2dzdHIgIuS4jeiDveajgOWHuuW3peS9nOWMuiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjc5OQorbXNnaWQgImNhbm5vdCByZXBhY2sgdG8gY2xlYW4gdXAiCittc2dzdHIgIuaXoOazleaJp+ihjCByZXBhY2sg5p2l5riF55CGIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODAxCittc2dpZCAiY2Fubm90IHVubGluayB0ZW1wb3JhcnkgYWx0ZXJuYXRlcyBmaWxlIgorbXNnc3RyICLml6Dms5XliKDpmaTkuLTml7bnmoQgYWx0ZXJuYXRlcyDmlofku7YiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MzEKK21zZ2lkICJUb28gbWFueSBhcmd1bWVudHMuIgorbXNnc3RyICLlpKrlpJrlj4LmlbDjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4MzUKK21zZ2lkICJZb3UgbXVzdCBzcGVjaWZ5IGEgcmVwb3NpdG9yeSB0byBjbG9uZS4iCittc2dzdHIgIuaCqOW/hemhu+aMh+WumuS4gOS4quS7k+W6k+adpeWFi+mahuOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg0NgorIywgYy1mb3JtYXQKK21zZ2lkICItLWJhcmUgYW5kIC0tb3JpZ2luICVzIG9wdGlvbnMgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIi0tYmFyZSDlkowgLS1vcmlnaW4gJXMg6YCJ6aG55LiN5YW85a6544CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODQ5Cittc2dpZCAiLS1iYXJlIGFuZCAtLXNlcGFyYXRlLWdpdC1kaXIgYXJlIGluY29tcGF0aWJsZS4iCittc2dzdHIgIi0tYmFyZSDlkowgLS1zZXBhcmF0ZS1naXQtZGlyIOmAiemhueS4jeWFvOWuueOAgiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZXBvc2l0b3J5ICclcycgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuS7k+W6kyAnJXMnIOS4jeWtmOWcqCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjg2OCBidWlsdGluL2ZldGNoLmM6MTE2OAorIywgYy1mb3JtYXQKK21zZ2lkICJkZXB0aCAlcyBpcyBub3QgYSBwb3NpdGl2ZSBudW1iZXIiCittc2dzdHIgIua3seW6piAlcyDkuI3mmK/kuIDkuKrmraPmlbAiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo4NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVzdGluYXRpb24gcGF0aCAnJXMnIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBub3QgYW4gZW1wdHkgZGlyZWN0b3J5LiIKK21zZ3N0ciAi55uu5qCH6Lev5b6EICclcycg5bey57uP5a2Y5Zyo77yM5bm25LiU5LiN5piv5LiA5Liq56m655uu5b2V44CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6ODg4CisjLCBjLWZvcm1hdAorbXNnaWQgIndvcmtpbmcgdHJlZSAnJXMnIGFscmVhZHkgZXhpc3RzLiIKK21zZ3N0ciAi5bel5L2c5Yy6ICclcycg5bey57uP5a2Y5Zyo44CCIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTAzIGJ1aWx0aW4vY2xvbmUuYzo5MTQgYnVpbHRpbi93b3JrdHJlZS5jOjIxOAorIzogYnVpbHRpbi93b3JrdHJlZS5jOjI0NQorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgY3JlYXRlIGxlYWRpbmcgZGlyZWN0b3JpZXMgb2YgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Li6ICclcycg5Yib5bu65YWI5a+855uu5b2VIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTA2CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgd29yayB0cmVlIGRpciAnJXMnIgorbXNnc3RyICLkuI3og73liJvlu7rlt6XkvZzljLrnm67lvZUgJyVzJyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNAorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gYmFyZSByZXBvc2l0b3J5ICclcycuLi5cbiIKK21zZ3N0ciAi5YWL6ZqG5Yiw57qv5LuT5bqTICclcycuLi5cbiIKKworIzogYnVpbHRpbi9jbG9uZS5jOjkyNgorIywgYy1mb3JtYXQKK21zZ2lkICJDbG9uaW5nIGludG8gJyVzJy4uLlxuIgorbXNnc3RyICLmraPlhYvpmobliLAgJyVzJy4uLlxuIgorCisjOiBidWlsdGluL2Nsb25lLmM6OTUxCittc2dpZCAiLS1kaXNzb2NpYXRlIGdpdmVuLCBidXQgdGhlcmUgaXMgbm8gLS1yZWZlcmVuY2UiCittc2dzdHIgIuaPkOS+m+S6huWPguaVsCAtLWRpc3NvY2lhdGXvvIzkvYbmnKrmj5DkvpsgLS1yZWZlcmVuY2UiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NjgKK21zZ2lkICItLWRlcHRoIGlzIGlnbm9yZWQgaW4gbG9jYWwgY2xvbmVzOyB1c2UgZmlsZTovLyBpbnN0ZWFkLiIKK21zZ3N0ciAiLS1kZXB0aCDlnKjmnKzlnLDlhYvpmobooqvlv73nlaXvvIzmlLnkuLogZmlsZTovLyDljY/orq7or5Xor5XjgIIiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5NzEKK21zZ2lkICJzb3VyY2UgcmVwb3NpdG9yeSBpcyBzaGFsbG93LCBpZ25vcmluZyAtLWxvY2FsIgorbXNnc3RyICLmupDku5PlupPmmK/mtYXlhYvpmobvvIzlv73nlaUgLS1sb2NhbCIKKworIzogYnVpbHRpbi9jbG9uZS5jOjk3NgorbXNnaWQgIi0tbG9jYWwgaXMgaWdub3JlZCIKK21zZ3N0ciAiLS1sb2NhbCDooqvlv73nlaUiCisKKyM6IGJ1aWx0aW4vY2xvbmUuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiRG9uJ3Qga25vdyBob3cgdG8gY2xvbmUgJXMiCittc2dzdHIgIuS4jeefpemBk+WmguS9leWFi+mahiAlcyIKKworIzogYnVpbHRpbi9jbG9uZS5jOjEwMjkgYnVpbHRpbi9jbG9uZS5jOjEwMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3RlIGJyYW5jaCAlcyBub3QgZm91bmQgaW4gdXBzdHJlYW0gJXMiCittc2dzdHIgIui/nOeoi+WIhuaUryAlcyDlnKjkuIrmuLggJXMg5pyq5Y+R546wIgorCisjOiBidWlsdGluL2Nsb25lLmM6MTA0MAorbXNnaWQgIllvdSBhcHBlYXIgdG8gaGF2ZSBjbG9uZWQgYW4gZW1wdHkgcmVwb3NpdG9yeS4iCittc2dzdHIgIuaCqOS8vOS5juWFi+mahuS6huS4gOS4quepuuS7k+W6k+OAgiIKKworIzogYnVpbHRpbi9jb2x1bW4uYzo5Cittc2dpZCAiZ2l0IGNvbHVtbiBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbHVtbiBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL2NvbHVtbi5jOjI2Cittc2dpZCAibG9va3VwIGNvbmZpZyB2YXJzIgorbXNnc3RyICLmn6Xmib7phY3nva7lj5jph48iCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MjcgYnVpbHRpbi9jb2x1bW4uYzoyOAorbXNnaWQgImxheW91dCB0byB1c2UiCittc2dzdHIgIuimgeS9v+eUqOeahOW4g+WxgCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzoyOQorbXNnaWQgIk1heGltdW0gd2lkdGgiCittc2dzdHIgIuacgOWkp+WuveW6piIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMAorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gbGVmdCBib3JkZXIiCittc2dzdHIgIuW3pui+ueahhueahOWhq+WFheepuumXtCIKKworIzogYnVpbHRpbi9jb2x1bW4uYzozMQorbXNnaWQgIlBhZGRpbmcgc3BhY2Ugb24gcmlnaHQgYm9yZGVyIgorbXNnc3RyICLlj7PovrnmoYbnmoTloavlhYXnqbrpl7QiCisKKyM6IGJ1aWx0aW4vY29sdW1uLmM6MzIKK21zZ2lkICJQYWRkaW5nIHNwYWNlIGJldHdlZW4gY29sdW1ucyIKK21zZ3N0ciAi5Lik5YiX5LmL6Ze055qE5aGr5YWF56m66Ze0IgorCisjOiBidWlsdGluL2NvbHVtbi5jOjUxCittc2dpZCAiLS1jb21tYW5kIG11c3QgYmUgdGhlIGZpcnN0IGFyZ3VtZW50IgorbXNnc3RyICItLWNvbW1hbmQg5b+F6aG75piv56ys5LiA5Liq5Y+C5pWwIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM3Cittc2dpZCAiZ2l0IGNvbW1pdCBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBjb21taXQgWzzpgInpobk+XSBbLS1dIDzot6/lvoTop4TmoLw+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQyCittc2dpZCAiZ2l0IHN0YXR1cyBbPG9wdGlvbnM+XSBbLS1dIDxwYXRoc3BlYz4uLi4iCittc2dzdHIgImdpdCBzdGF0dXMgWzzpgInpobk+XSBbLS1dIDzot6/lvoTop4TmoLw+Li4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjQ3Cittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseS4gUnVuIHRoZVxuIgorImZvbGxvd2luZyBjb21tYW5kIGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBpbiB5b3VyIGVkaXRvciB0byBlZGl0XG4iCisieW91ciBjb25maWd1cmF0aW9uIGZpbGU6XG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisi5oKo55qE5aeT5ZCN5ZKM6YKu5Lu25Zyw5Z2A5Z+65LqO55m75b2V5ZCN5ZKM5Li75py65ZCN6L+b6KGM5LqG6Ieq5Yqo6K6+572u44CC6K+35qOA5p+l5a6D5Lus5q2j56GuXG4iCisi5LiO5ZCm44CC5oKo5Y+v5Lul5a+55YW26L+b6KGM6K6+572u5Lul5YWN5YaN5Ye6546w5pys5o+Q56S65L+h5oGv44CC6L+Q6KGM5aaC5LiL5ZG95Luk5Zyo57yW6L6R5ZmoXG4iCisi5Lit57yW6L6R5oKo55qE6YWN572u5paH5Lu277yaXG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgLS1lZGl0XG4iCisiXG4iCisi6K6+572u5a6M5q+V5ZCO77yM5oKo5Y+v5Lul55So5LiL6Z2i55qE5ZG95Luk5p2l5L+u5q2j5pys5qyh5o+Q5Lqk5omA5L2/55So55qE55So5oi36Lqr5Lu977yaXG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwCittc2dpZCAiIgorIllvdXIgbmFtZSBhbmQgZW1haWwgYWRkcmVzcyB3ZXJlIGNvbmZpZ3VyZWQgYXV0b21hdGljYWxseSBiYXNlZFxuIgorIm9uIHlvdXIgdXNlcm5hbWUgYW5kIGhvc3RuYW1lLiBQbGVhc2UgY2hlY2sgdGhhdCB0aGV5IGFyZSBhY2N1cmF0ZS5cbiIKKyJZb3UgY2FuIHN1cHByZXNzIHRoaXMgbWVzc2FnZSBieSBzZXR0aW5nIHRoZW0gZXhwbGljaXRseTpcbiIKKyJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgXCJZb3VyIE5hbWVcIlxuIgorIiAgICBnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIuZW1haWwgeW91QGV4YW1wbGUuY29tXG4iCisiXG4iCisiQWZ0ZXIgZG9pbmcgdGhpcywgeW91IG1heSBmaXggdGhlIGlkZW50aXR5IHVzZWQgZm9yIHRoaXMgY29tbWl0IHdpdGg6XG4iCisiXG4iCisiICAgIGdpdCBjb21taXQgLS1hbWVuZCAtLXJlc2V0LWF1dGhvclxuIgorbXNnc3RyICIiCisi5oKo55qE5aeT5ZCN5ZKM6YKu5Lu25Zyw5Z2A5Z+65LqO55m75b2V5ZCN5ZKM5Li75py65ZCN6L+b6KGM5LqG6Ieq5Yqo6K6+572u44CC6K+35qOA5p+l5a6D5Lus5q2j56GuXG4iCisi5LiO5ZCm44CC5oKo5Y+v5Lul5a+55YW26L+b6KGM6K6+572u5Lul5YWN5YaN5Ye6546w5pys5o+Q56S65L+h5oGv77yaXG4iCisiXG4iCisiICAgIGdpdCBjb25maWcgLS1nbG9iYWwgdXNlci5uYW1lIFwiWW91ciBOYW1lXCJcbiIKKyIgICAgZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsIHlvdUBleGFtcGxlLmNvbVxuIgorIlxuIgorIuiuvue9ruWujOavleWQju+8jOaCqOWPr+S7peeUqOS4i+mdoueahOWRveS7pOadpeS/ruato+acrOasoeaPkOS6pOaJgOS9v+eUqOeahOeUqOaIt+i6q+S7ve+8mlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYW1lbmQgLS1yZXNldC1hdXRob3JcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MgorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gYW1lbmQgdGhlIG1vc3QgcmVjZW50IGNvbW1pdCwgYnV0IGRvaW5nIHNvIHdvdWxkIG1ha2VcbiIKKyJpdCBlbXB0eS4gWW91IGNhbiByZXBlYXQgeW91ciBjb21tYW5kIHdpdGggLS1hbGxvdy1lbXB0eSwgb3IgeW91IGNhblxuIgorInJlbW92ZSB0aGUgY29tbWl0IGVudGlyZWx5IHdpdGggXCJnaXQgcmVzZXQgSEVBRF5cIi5cbiIKK21zZ3N0ciAiIgorIuaCqOimgeS/ruihpeacgOi/keeahOaPkOS6pO+8jOS9hui/meS5iOWBmuS8muiuqeWug+aIkOS4uuepuuaPkOS6pOOAguaCqOWPr+S7pemHjeWkjeaCqOeahOWRveS7pOW5tuW4puS4ilxuIgorIi0tYWxsb3ctZW1wdHkg6YCJ6aG577yM5oiW6ICF5oKo5Y+v55So5ZG95LukIFwiZ2l0IHJlc2V0IEhFQUReXCIg5pW05Liq5Yig6Zmk6K+l5o+Q5Lqk44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzcKK21zZ2lkICIiCisiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrIGlzIG5vdyBlbXB0eSwgcG9zc2libHkgZHVlIHRvIGNvbmZsaWN0IHJlc29sdXRpb24uXG4iCisiSWYgeW91IHdpc2ggdG8gY29tbWl0IGl0IGFueXdheSwgdXNlOlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKK21zZ3N0ciAiIgorIuS5i+WJjeeahOaLo+mAieaTjeS9nOeOsOWcqOaYr+S4gOS4quepuuaPkOS6pO+8jOWPr+iDveaYr+eUseWGsueqgeino+WGs+WvvOiHtOeahOOAguWmguaenOaCqOaXoOiuuuWmguS9lVxuIgorIuS5n+imgeaPkOS6pO+8jOS9v+eUqOWRveS7pO+8mlxuIgorIlxuIgorIiAgICBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHlcbiIKKyJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NAorbXNnaWQgIk90aGVyd2lzZSwgcGxlYXNlIHVzZSAnZ2l0IHJlc2V0J1xuIgorbXNnc3RyICLlkKbliJnvvIzor7fkvb/nlKjlkb3ku6QgJ2dpdCByZXNldCdcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4NworbXNnaWQgIiIKKyJJZiB5b3Ugd2lzaCB0byBza2lwIHRoaXMgY29tbWl0LCB1c2U6XG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIlRoZW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiIHdpbGwgcmVzdW1lIGNoZXJyeS1waWNraW5nXG4iCisidGhlIHJlbWFpbmluZyBjb21taXRzLlxuIgorbXNnc3RyICIiCisi5aaC5p6c5oKo5oOz6Lez6L+H6L+Z5Liq5o+Q5Lqk77yM5L2/55So5ZG95Luk77yaXG4iCisiXG4iCisiICAgIGdpdCByZXNldFxuIgorIlxuIgorIueEtuWQjuaJp+ihjCBcImdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlXCIg57un57ut5a+55YW25L2Z5o+Q5Lqk5omn6KGM5ouj6YCJXG4iCisi5pON5L2c44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzA0Cittc2dpZCAiZmFpbGVkIHRvIHVucGFjayBIRUFEIHRyZWUgb2JqZWN0IgorbXNnc3RyICLml6Dms5Xop6PljIUgSEVBRCDmoJHlr7nosaEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzQ1Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIuS4jeiDveWIm+W7uuS4tOaXtue0ouW8lSIKKworIzogYnVpbHRpbi9jb21taXQuYzozNTEKK21zZ2lkICJpbnRlcmFjdGl2ZSBhZGQgZmFpbGVkIgorbXNnc3RyICLkuqTkupLlvI/mt7vliqDlpLHotKUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MzY0Cittc2dpZCAidW5hYmxlIHRvIHVwZGF0ZSB0ZW1wb3JhcnkgaW5kZXgiCittc2dzdHIgIuaXoOazleabtOaWsOS4tOaXtue0ouW8lSIKKworIzogYnVpbHRpbi9jb21taXQuYzozNjYKK21zZ2lkICJGYWlsZWQgdG8gdXBkYXRlIG1haW4gY2FjaGUgdHJlZSIKK21zZ3N0ciAi5LiN6IO95pu05paw5qCR55qE5Li757yT5a2YIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjM5MCBidWlsdGluL2NvbW1pdC5jOjQxMyBidWlsdGluL2NvbW1pdC5jOjQ2MgorbXNnaWQgInVuYWJsZSB0byB3cml0ZSBuZXdfaW5kZXggZmlsZSIKK21zZ3N0ciAi5peg5rOV5YaZIG5ld19pbmRleCDmlofku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ0Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgbWVyZ2UuIgorbXNnc3RyICLlnKjlkIjlubbov4fnqIvkuK3kuI3og73lgZrpg6jliIbmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDQ2Cittc2dpZCAiY2Fubm90IGRvIGEgcGFydGlhbCBjb21taXQgZHVyaW5nIGEgY2hlcnJ5LXBpY2suIgorbXNnc3RyICLlnKjmi6PpgInov4fnqIvkuK3kuI3og73lgZrpg6jliIbmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDU1Cittc2dpZCAiY2Fubm90IHJlYWQgdGhlIGluZGV4IgorbXNnc3RyICLml6Dms5Xor7vlj5bntKLlvJUiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NDc0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRlbXBvcmFyeSBpbmRleCBmaWxlIgorbXNnc3RyICLml6Dms5XlhpnkuLTml7bntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NTc5CisjLCBjLWZvcm1hdAorbXNnaWQgImNvbW1pdCAnJXMnIGxhY2tzIGF1dGhvciBoZWFkZXIiCittc2dzdHIgIuaPkOS6pCAnJXMnIOe8uuWwkeS9nOiAheS/oeaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzo1ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiY29tbWl0ICclcycgaGFzIG1hbGZvcm1lZCBhdXRob3IgbGluZSIKK21zZ3N0ciAi5o+Q5LqkICclcycg5pyJ6Z2e5rOV55qE5L2c6ICF5L+h5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjYwMAorbXNnaWQgIm1hbGZvcm1lZCAtLWF1dGhvciBwYXJhbWV0ZXIiCittc2dzdHIgIumdnuazleeahCAtLWF1dGhvciDlj4LmlbAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NjA4CisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgZGF0ZSBmb3JtYXQ6ICVzIgorbXNnc3RyICLml6DmlYjnmoTml6XmnJ/moLzlvI/vvJolcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo2NTIKK21zZ2lkICIiCisidW5hYmxlIHRvIHNlbGVjdCBhIGNvbW1lbnQgY2hhcmFjdGVyIHRoYXQgaXMgbm90IHVzZWRcbiIKKyJpbiB0aGUgY3VycmVudCBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi5peg5rOV6YCJ5oup5LiA5Liq5pyq6KKr5b2T5YmN5o+Q5Lqk6K+05piO5L2/55So55qE5rOo6YeK5a2X56ymIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjY4OSBidWlsdGluL2NvbW1pdC5jOjcyMiBidWlsdGluL2NvbW1pdC5jOjEwNzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGxvb2t1cCBjb21taXQgJXMiCittc2dzdHIgIuS4jeiDveafpeivouaPkOS6pCAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDEgYnVpbHRpbi9zaG9ydGxvZy5jOjI3MworIywgYy1mb3JtYXQKK21zZ2lkICIocmVhZGluZyBsb2cgbWVzc2FnZSBmcm9tIHN0YW5kYXJkIGlucHV0KVxuIgorbXNnc3RyICLvvIjmraPku47moIflh4bovpPlhaXkuK3or7vlj5bml6Xlv5fkv6Hmga/vvIlcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MDMKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5LiN6IO95LuO5qCH5YeG6L6T5YWl5Lit6K+75Y+W5pel5b+X5L+h5oGvIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBsb2cgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5bml6Xlv5fmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9jb21taXQuYzo3MjkKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NU0ciCittc2dzdHIgIuS4jeiDveivu+WPliBNRVJHRV9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6NzMzCittc2dpZCAiY291bGQgbm90IHJlYWQgU1FVQVNIX01TRyIKK21zZ3N0ciAi5LiN6IO96K+75Y+WIFNRVUFTSF9NU0ciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6Nzg0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIGNvbW1pdCB0ZW1wbGF0ZSIKK21zZ3N0ciAi5LiN6IO95YaZ5o+Q5Lqk5qih54mIIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiSXQgbG9va3MgbGlrZSB5b3UgbWF5IGJlIGNvbW1pdHRpbmcgYSBtZXJnZS5cbiIKKyJJZiB0aGlzIGlzIG5vdCBjb3JyZWN0LCBwbGVhc2UgcmVtb3ZlIHRoZSBmaWxlXG4iCisiXHQlc1xuIgorImFuZCB0cnkgYWdhaW4uXG4iCittc2dzdHIgIiIKKyJcbiIKKyLkvLzkuY7mgqjmraPlnKjlgZrkuIDkuKrlkIjlubbmj5DkuqTjgILlpoLmnpzkuI3lr7nvvIzor7fliKDpmaTmlofku7ZcbiIKKyJcdCVzXG4iCisi54S25ZCO6YeN6K+V44CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODA3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJJdCBsb29rcyBsaWtlIHlvdSBtYXkgYmUgY29tbWl0dGluZyBhIGNoZXJyeS1waWNrLlxuIgorIklmIHRoaXMgaXMgbm90IGNvcnJlY3QsIHBsZWFzZSByZW1vdmUgdGhlIGZpbGVcbiIKKyJcdCVzXG4iCisiYW5kIHRyeSBhZ2Fpbi5cbiIKK21zZ3N0ciAiIgorIlxuIgorIuS8vOS5juaCqOato+WcqOWBmuS4gOS4quaLo+mAieaPkOS6pOOAguWmguaenOS4jeWvue+8jOivt+WIoOmZpOaWh+S7tlxuIgorIlx0JXNcbiIKKyLnhLblkI7ph43or5XjgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4MjAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmdcbiIKKyJ3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuivt+S4uuaCqOeahOWPmOabtOi+k+WFpeaPkOS6pOivtOaYjuOAguS7pSAnJWMnIOW8gOWni+eahOihjOWwhuiiq+W/veeVpe+8jOiAjOS4gOS4quepuueahOaPkOS6pFxuIgorIuivtOaYjuWwhuS8mue7iOatouaPkOS6pOOAglxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjgyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiUGxlYXNlIGVudGVyIHRoZSBjb21taXQgbWVzc2FnZSBmb3IgeW91ciBjaGFuZ2VzLiBMaW5lcyBzdGFydGluZ1xuIgorIndpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91IHdhbnQgdG8uXG4iCisiQW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuivt+S4uuaCqOeahOWPmOabtOi+k+WFpeaPkOS6pOivtOaYjuOAguS7pSAnJWMnIOW8gOWni+eahOihjOWwhuiiq+S/neeVme+8jOWmguaenOaCqOWOn+aEj1xuIgorIuS5n+WPr+S7peWIoOmZpOWug+S7rOOAguS4gOS4quepuueahOaPkOS6pOivtOaYjuWwhuS8mue7iOatouaPkOS6pOOAglxuIgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQXV0aG9yOiAgICAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPkvZzogIXvvJogICUuKnMgPCUuKnM+IgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODU1CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzRGF0ZTogICAgICAlcyIKK21zZ3N0ciAiJXPml6XmnJ/vvJogICVzIgorCisjICDor5HogIXvvJrkuLrkv53or4HlnKjovpPlh7rkuK3lr7npvZDvvIzms6jmhI/osIPmlbTlj6XkuK3nqbrmoLzvvIEKKyM6IGJ1aWx0aW4vY29tbWl0LmM6ODYyCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzQ29tbWl0dGVyOiAlLipzIDwlLipzPiIKK21zZ3N0ciAiJXPmj5DkuqTogIXvvJolLipzIDwlLipzPiIKKworIzogYnVpbHRpbi9jb21taXQuYzo4ODAKK21zZ2lkICJDYW5ub3QgcmVhZCBpbmRleCIKK21zZ3N0ciAi5peg5rOV6K+75Y+W57Si5byVIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjkzNworbXNnaWQgIkVycm9yIGJ1aWxkaW5nIHRyZWVzIgorbXNnc3RyICLml6Dms5XliJvlu7rmoJHlr7nosaEiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6OTUyIGJ1aWx0aW4vdGFnLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG1lc3NhZ2UgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbi5cbiIKK21zZ3N0ciAi6K+35L2/55SoIC1tIOaIliAtRiDpgInpobnmj5Dkvpvmj5DkuqTor7TmmI7jgIJcbiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMDU0CisjLCBjLWZvcm1hdAorbXNnaWQgIi0tYXV0aG9yICclcycgaXMgbm90ICdOYW1lIDxlbWFpbD4nIGFuZCBtYXRjaGVzIG5vIGV4aXN0aW5nIGF1dGhvciIKK21zZ3N0ciAiLS1hdXRob3IgJyVzJyDkuI3mmK8gJ05hbWUgPGVtYWlsPicg5qC85byP77yM5LiU5pyq6IO95Zyo546w5pyJ5L2c6ICF5Lit5om+5Yiw5Yy56YWNIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEwNjkgYnVpbHRpbi9jb21taXQuYzoxMzA5CisjLCBjLWZvcm1hdAorbXNnaWQgIkludmFsaWQgdW50cmFja2VkIGZpbGVzIG1vZGUgJyVzJyIKK21zZ3N0ciAi5peg5pWI55qE5pyq6L+96Liq5paH5Lu25Y+C5pWwICclcyciCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEwNgorbXNnaWQgIi0tbG9uZyBhbmQgLXogYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1sb25nIOWSjCAteiDpgInpobnkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTEzNgorbXNnaWQgIlVzaW5nIGJvdGggLS1yZXNldC1hdXRob3IgYW5kIC0tYXV0aG9yIGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIuWQjOaXtuS9v+eUqCAtLXJlc2V0LWF1dGhvciDlkowgLS1hdXRob3Ig5rKh5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNDUKK21zZ2lkICJZb3UgaGF2ZSBub3RoaW5nIHRvIGFtZW5kLiIKK21zZ3N0ciAi5oKo5rKh5pyJ5Y+v5L+u6KGl55qE5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNDgKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBtZXJnZSAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLmgqjmraPlpITkuo7kuIDkuKrlkIjlubbov4fnqIvkuK0gLS0g5peg5rOV5L+u6KGl5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTAKK21zZ2lkICJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGVycnktcGljayAtLSBjYW5ub3QgYW1lbmQuIgorbXNnc3RyICLmgqjmraPlpITkuo7kuIDkuKrmi6PpgInov4fnqIvkuK0gLS0g5peg5rOV5L+u6KGl5o+Q5Lqk44CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNTMKK21zZ2lkICJPcHRpb25zIC0tc3F1YXNoIGFuZCAtLWZpeHVwIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICLpgInpobkgLS1zcXVhc2gg5ZKMIC0tZml4dXAg5LiN6IO95ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjMKK21zZ2lkICJPbmx5IG9uZSBvZiAtYy8tQy8tRi8tLWZpeHVwIGNhbiBiZSB1c2VkLiIKK21zZ3N0ciAi5Y+q6IO955So5LiA5LiqIC1jLy1DLy1GLy0tZml4dXAg6YCJ6aG544CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExNjUKK21zZ2lkICJPcHRpb24gLW0gY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWMvLUMvLUYvLS1maXh1cC4iCittc2dzdHIgIumAiemhuSAtbSDkuI3og73lkowgLWMvLUMvLUYvLS1maXh1cCDlkIzml7bkvb/nlKjjgIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTE3MworbXNnaWQgIi0tcmVzZXQtYXV0aG9yIGNhbiBiZSB1c2VkIG9ubHkgd2l0aCAtQywgLWMgb3IgLS1hbWVuZC4iCittc2dzdHIgIi0tcmVzZXQtYXV0aG9yIOWPquiDveWSjCAtQ+OAgS1jIOaIliAtLWFtZW5kIOWQjOaXtuS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTkwCittc2dpZCAiT25seSBvbmUgb2YgLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2ggY2FuIGJlIHVzZWQuIgorbXNnc3RyICLlj6rog73nlKjkuIDkuKogLS1pbmNsdWRlLy0tb25seS8tLWFsbC8tLWludGVyYWN0aXZlLy0tcGF0Y2gg6YCJ6aG544CCIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjExOTIKK21zZ2lkICJObyBwYXRocyB3aXRoIC0taW5jbHVkZS8tLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZS4iCittc2dzdHIgIuWPguaVsCAtLWluY2x1ZGUvLS1vbmx5IOS4jei3n+i3r+W+hOayoeacieaEj+S5ieOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk0Cittc2dpZCAiQ2xldmVyLi4uIGFtZW5kaW5nIHRoZSBsYXN0IG9uZSB3aXRoIGRpcnR5IGluZGV4LiIKK21zZ3N0ciAi6IGq5piOLi4uIOeUqOiEj+e0ouW8leS/ruihpeacgOWQjuS4gOS4quaPkOS6pOOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMTk2Cittc2dpZCAiRXhwbGljaXQgcGF0aHMgc3BlY2lmaWVkIHdpdGhvdXQgLWkgb3IgLW87IGFzc3VtaW5nIC0tb25seSBwYXRocy4uLiIKK21zZ3N0ciAi5oyH5a6a5LqG5piO56Gu55qE6Lev5b6E6ICM5rKh5pyJ5L2/55SoIC1pIOaIliAtbyDpgInpobnvvIzorqTkuLrmmK8gLS1vbmx5IHBhdGhzLi4uIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEyMDggYnVpbHRpbi90YWcuYzo3MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW52YWxpZCBjbGVhbnVwIG1vZGUgJXMiCittc2dzdHIgIuaXoOaViOeahOa4heeQhuaooeW8jyAlcyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMjEzCittc2dpZCAiUGF0aHMgd2l0aCAtYSBkb2VzIG5vdCBtYWtlIHNlbnNlLiIKK21zZ3N0ciAi6Lev5b6E5ZKMIC1hIOmAiemhueWQjOaXtuS9v+eUqOayoeacieaEj+S5ieOAgiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzIzIGJ1aWx0aW4vY29tbWl0LmM6MTYwMgorbXNnaWQgInNob3cgc3RhdHVzIGNvbmNpc2VseSIKK21zZ3N0ciAi5Lul566A5rSB55qE5qC85byP5pi+56S654q25oCBIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMjUgYnVpbHRpbi9jb21taXQuYzoxNjA0Cittc2dpZCAic2hvdyBicmFuY2ggaW5mb3JtYXRpb24iCittc2dzdHIgIuaYvuekuuWIhuaUr+S/oeaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzI3IGJ1aWx0aW4vY29tbWl0LmM6MTYwNiBidWlsdGluL3B1c2guYzo1NDYKK21zZ2lkICJtYWNoaW5lLXJlYWRhYmxlIG91dHB1dCIKK21zZ3N0ciAi5py65Zmo5Y+v6K+755qE6L6T5Ye6IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzMzAgYnVpbHRpbi9jb21taXQuYzoxNjA4Cittc2dpZCAic2hvdyBzdGF0dXMgaW4gbG9uZyBmb3JtYXQgKGRlZmF1bHQpIgorbXNnc3RyICLku6Xplb/moLzlvI/mmL7npLrnirbmgIHvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzMyBidWlsdGluL2NvbW1pdC5jOjE2MTEKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCIKK21zZ3N0ciAi5p2h55uu5LulIE5VTCDlrZfnrKbnu5PlsL4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzNSBidWlsdGluL2NvbW1pdC5jOjE2MTQgYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4MQorIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4NCBidWlsdGluL3RhZy5jOjYwNAorbXNnaWQgIm1vZGUiCittc2dzdHIgIuaooeW8jyIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzM2IGJ1aWx0aW4vY29tbWl0LmM6MTYxNAorbXNnaWQgInNob3cgdW50cmFja2VkIGZpbGVzLCBvcHRpb25hbCBtb2RlczogYWxsLCBub3JtYWwsIG5vLiAoRGVmYXVsdDogYWxsKSIKK21zZ3N0ciAi5pi+56S65pyq6Lef6Liq55qE5paH5Lu277yM4oCc5qih5byP4oCd55qE5Y+v6YCJ5Y+C5pWw77yaYWxs44CBbm9ybWFs44CBbm/jgILvvIjpu5jorqTvvJphbGzvvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTMzOQorbXNnaWQgInNob3cgaWdub3JlZCBmaWxlcyIKK21zZ3N0ciAi5pi+56S65b+955Wl55qE5paH5Lu2IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjEzNDAgcGFyc2Utb3B0aW9ucy5oOjE1NQorbXNnaWQgIndoZW4iCittc2dzdHIgIuS9leaXtiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxMzQxCittc2dpZCAiIgorImlnbm9yZSBjaGFuZ2VzIHRvIHN1Ym1vZHVsZXMsIG9wdGlvbmFsIHdoZW46IGFsbCwgZGlydHksIHVudHJhY2tlZC4gIgorIihEZWZhdWx0OiBhbGwpIgorbXNnc3RyICIiCisi5b+955Wl5a2Q5qih57uE55qE5pu05pS577yM4oCc5L2V5pe24oCd55qE5Y+v6YCJ5Y+C5pWw77yaYWxs44CBZGlydHnjgIF1bnRyYWNrZWTjgILvvIjpu5jorqTvvJphbGzvvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTM0MworbXNnaWQgImxpc3QgdW50cmFja2VkIGZpbGVzIGluIGNvbHVtbnMiCittc2dzdHIgIuS7peWIl+eahOaWueW8j+aYvuekuuacqui3n+i4queahOaWh+S7tiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDI5Cittc2dpZCAiY291bGRuJ3QgbG9vayB1cCBuZXdseSBjcmVhdGVkIGNvbW1pdCIKK21zZ3N0ciAi5peg5rOV5om+5Yiw5paw5Yib5bu655qE5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE0MzEKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgbmV3bHkgY3JlYXRlZCBjb21taXQiCittc2dzdHIgIuS4jeiDveino+aekOaWsOWIm+W7uueahOaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNDc2Cittc2dpZCAiZGV0YWNoZWQgSEVBRCIKK21zZ3N0ciAi5YiG56a75aS05oyH6ZKIIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTQ3OQorbXNnaWQgIiAocm9vdC1jb21taXQpIgorbXNnc3RyICLvvIjmoLnmj5DkuqTvvIkiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3MgorbXNnaWQgInN1cHByZXNzIHN1bW1hcnkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21taXQiCittc2dzdHIgIuaPkOS6pOaIkOWKn+WQjuS4jeaYvuekuuamgui/sOS/oeaBryIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTczCittc2dpZCAic2hvdyBkaWZmIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICLlnKjmj5DkuqTor7TmmI7mqKHmnb/ph4zmmL7npLrlt67lvIIiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3NQorbXNnaWQgIkNvbW1pdCBtZXNzYWdlIG9wdGlvbnMiCittc2dzdHIgIuaPkOS6pOivtOaYjumAiemhuSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc2IGJ1aWx0aW4vdGFnLmM6NjAyCittc2dpZCAicmVhZCBtZXNzYWdlIGZyb20gZmlsZSIKK21zZ3N0ciAi5LuO5paH5Lu25Lit6K+75Y+W5o+Q5Lqk6K+05piOIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzcKK21zZ2lkICJhdXRob3IiCittc2dzdHIgIuS9nOiAhSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc3Cittc2dpZCAib3ZlcnJpZGUgYXV0aG9yIGZvciBjb21taXQiCittc2dzdHIgIuaPkOS6pOaXtuimhuebluS9nOiAhSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTc4IGJ1aWx0aW4vZ2MuYzoyNjgKK21zZ2lkICJkYXRlIgorbXNnc3RyICLml6XmnJ8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU3OAorbXNnaWQgIm92ZXJyaWRlIGRhdGUgZm9yIGNvbW1pdCIKK21zZ3N0ciAi5o+Q5Lqk5pe26KaG55uW5pel5pyfIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzkgYnVpbHRpbi9tZXJnZS5jOjIxOCBidWlsdGluL25vdGVzLmM6MzkyCisjOiBidWlsdGluL25vdGVzLmM6NTU1IGJ1aWx0aW4vdGFnLmM6NjAwCittc2dpZCAibWVzc2FnZSIKK21zZ3N0ciAi6K+05piOIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1NzkKK21zZ2lkICJjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi5o+Q5Lqk6K+05piOIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODAKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi6YeN55So5bm257yW6L6R5oyH5a6a5o+Q5Lqk55qE5o+Q5Lqk6K+05piOIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODEKK21zZ2lkICJyZXVzZSBtZXNzYWdlIGZyb20gc3BlY2lmaWVkIGNvbW1pdCIKK21zZ3N0ciAi6YeN55So5oyH5a6a5o+Q5Lqk55qE5o+Q5Lqk6K+05piOIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODIKK21zZ2lkICJ1c2UgYXV0b3NxdWFzaCBmb3JtYXR0ZWQgbWVzc2FnZSB0byBmaXh1cCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLkvb/nlKggYXV0b3NxdWFzaCDmoLzlvI/nmoTmj5DkuqTor7TmmI7nlKjku6Xkv67mraPmjIflrprnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4MworbXNnaWQgInVzZSBhdXRvc3F1YXNoIGZvcm1hdHRlZCBtZXNzYWdlIHRvIHNxdWFzaCBzcGVjaWZpZWQgY29tbWl0IgorbXNnc3RyICLkvb/nlKggYXV0b3NxdWFzaCDmoLzlvI/nmoTmj5DkuqTor7TmmI7nlKjku6XljovnvKnoh7PmjIflrprnmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4NAorbXNnaWQgInRoZSBjb21taXQgaXMgYXV0aG9yZWQgYnkgbWUgbm93ICh1c2VkIHdpdGggLUMvLWMvLS1hbWVuZCkiCittc2dzdHIgIueOsOWcqOWwhuivpeaPkOS6pOeahOS9nOiAheaUueS4uuaIke+8iOWSjCAtQy8tYy8tLWFtZW5kIOWPguaVsOWFseeUqO+8iSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg1IGJ1aWx0aW4vbG9nLmM6MTIxNiBidWlsdGluL3JldmVydC5jOjg2Cittc2dpZCAiYWRkIFNpZ25lZC1vZmYtYnk6IgorbXNnc3RyICLmt7vliqAgU2lnbmVkLW9mZi1ieTog562+5ZCNIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1ODYKK21zZ2lkICJ1c2Ugc3BlY2lmaWVkIHRlbXBsYXRlIGZpbGUiCittc2dzdHIgIuS9v+eUqOaMh+WumueahOaooeadv+aWh+S7tiIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTg3Cittc2dpZCAiZm9yY2UgZWRpdCBvZiBjb21taXQiCittc2dzdHIgIuW8uuWItue8lui+keaPkOS6pCIKKworIyAg6K+R6ICF77ya5Y+v6YCJ5YC877yM5LiN6IO957+76K+R77yI5oiW5piv5Y6f5paH5Lit56yU6K+v77yM5bqU5Li6IG1vZGXvvIkKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OAorbXNnaWQgImRlZmF1bHQiCittc2dzdHIgImRlZmF1bHQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OCBidWlsdGluL3RhZy5jOjYwNQorbXNnaWQgImhvdyB0byBzdHJpcCBzcGFjZXMgYW5kICNjb21tZW50cyBmcm9tIG1lc3NhZ2UiCittc2dzdHIgIuiuvue9ruWmguS9leWIoOmZpOaPkOS6pOivtOaYjumHjOeahOepuuagvOWSjCPms6jph4oiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU4OQorbXNnaWQgImluY2x1ZGUgc3RhdHVzIGluIGNvbW1pdCBtZXNzYWdlIHRlbXBsYXRlIgorbXNnc3RyICLlnKjmj5DkuqTor7TmmI7mqKHmnb/ph4zljIXlkKvnirbmgIHkv6Hmga8iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5MSBidWlsdGluL21lcmdlLmM6MjI2IGJ1aWx0aW4vcHVsbC5jOjE1NgorIzogYnVpbHRpbi9yZXZlcnQuYzo5MworbXNnaWQgIkdQRyBzaWduIGNvbW1pdCIKK21zZ3N0ciAiR1BHIOaPkOS6pOetvuWQjSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk0Cittc2dpZCAiQ29tbWl0IGNvbnRlbnRzIG9wdGlvbnMiCittc2dzdHIgIuaPkOS6pOWGheWuuemAiemhuSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNTk1Cittc2dpZCAiY29tbWl0IGFsbCBjaGFuZ2VkIGZpbGVzIgorbXNnc3RyICLmj5DkuqTmiYDmnInmlLnliqjnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5NgorbXNnaWQgImFkZCBzcGVjaWZpZWQgZmlsZXMgdG8gaW5kZXggZm9yIGNvbW1pdCIKK21zZ3N0ciAi5re75Yqg5oyH5a6a55qE5paH5Lu25Yiw57Si5byV5Yy6562J5b6F5o+Q5LqkIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTcKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBmaWxlcyIKK21zZ3N0ciAi5Lqk5LqS5byP5re75Yqg5paH5Lu2IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE1OTgKK21zZ2lkICJpbnRlcmFjdGl2ZWx5IGFkZCBjaGFuZ2VzIgorbXNnc3RyICLkuqTkupLlvI/mt7vliqDlj5jmm7QiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTU5OQorbXNnaWQgImNvbW1pdCBvbmx5IHNwZWNpZmllZCBmaWxlcyIKK21zZ3N0ciAi5Y+q5o+Q5Lqk5oyH5a6a55qE5paH5Lu2IgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2MDAKK21zZ2lkICJieXBhc3MgcHJlLWNvbW1pdCBob29rIgorbXNnc3RyICLnu5Xov4cgcHJlLWNvbW1pdCDpkqnlrZAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYwMQorbXNnaWQgInNob3cgd2hhdCB3b3VsZCBiZSBjb21taXR0ZWQiCittc2dzdHIgIuaYvuekuuWwhuimgeaPkOS6pOeahOWGheWuuSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjEyCittc2dpZCAiYW1lbmQgcHJldmlvdXMgY29tbWl0IgorbXNnc3RyICLkv67mlLnlhYjliY3nmoTmj5DkuqQiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxMworbXNnaWQgImJ5cGFzcyBwb3N0LXJld3JpdGUgaG9vayIKK21zZ3N0ciAi57uV6L+HIHBvc3QtcmV3cml0ZSDpkqnlrZAiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTYxOAorbXNnaWQgIm9rIHRvIHJlY29yZCBhbiBlbXB0eSBjaGFuZ2UiCittc2dzdHIgIuWFgeiuuOS4gOS4quepuuaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjIwCittc2dpZCAib2sgdG8gcmVjb3JkIGEgY2hhbmdlIHdpdGggYW4gZW1wdHkgbWVzc2FnZSIKK21zZ3N0ciAi5YWB6K6456m655qE5o+Q5Lqk6K+05piOIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE2NDkKK21zZ2lkICJjb3VsZCBub3QgcGFyc2UgSEVBRCBjb21taXQiCittc2dzdHIgIuS4jeiDveino+aekCBIRUFEIOaPkOS6pCIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNjk1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvcnJ1cHQgTUVSR0VfSEVBRCBmaWxlICglcykiCittc2dzdHIgIuaNn+Wdj+eahCBNRVJHRV9IRUFEIOaWh+S7tu+8iCVz77yJIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MDIKK21zZ2lkICJjb3VsZCBub3QgcmVhZCBNRVJHRV9NT0RFIgorbXNnc3RyICLkuI3og73or7vlj5YgTUVSR0VfTU9ERSIKKworIzogYnVpbHRpbi9jb21taXQuYzoxNzIxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCByZWFkIGNvbW1pdCBtZXNzYWdlOiAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5o+Q5Lqk6K+05piO77yaJXMiCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTczMgorIywgYy1mb3JtYXQKK21zZ2lkICJBYm9ydGluZyBjb21taXQ7IHlvdSBkaWQgbm90IGVkaXQgdGhlIG1lc3NhZ2UuXG4iCittc2dzdHIgIue7iOatouaPkOS6pO+8m+aCqOacquabtOaUueadpeiHquaooeeJiOeahOaPkOS6pOivtOaYjuOAglxuIgorCisjOiBidWlsdGluL2NvbW1pdC5jOjE3MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS5cbiIKK21zZ3N0ciAi57uI5q2i5o+Q5Lqk5Zug5Li65o+Q5Lqk6K+05piO5Li656m644CCXG4iCisKKyM6IGJ1aWx0aW4vY29tbWl0LmM6MTc4NQorbXNnaWQgIiIKKyJSZXBvc2l0b3J5IGhhcyBiZWVuIHVwZGF0ZWQsIGJ1dCB1bmFibGUgdG8gd3JpdGVcbiIKKyJuZXdfaW5kZXggZmlsZS4gQ2hlY2sgdGhhdCBkaXNrIGlzIG5vdCBmdWxsIGFuZCBxdW90YSBpc1xuIgorIm5vdCBleGNlZWRlZCwgYW5kIHRoZW4gXCJnaXQgcmVzZXQgSEVBRFwiIHRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi5LuT5bqT5bey5pu05paw77yM5L2G5peg5rOV5YaZIG5ld19pbmRleCDmlofku7bjgILmo4Dmn6XmmK/lkKbno4Hnm5jlt7Lmu6FcbiIKKyLmiJbno4Hnm5jphY3pop3lt7LogJflsL3vvIznhLblkI7miafooYwgXCJnaXQgcmVzZXQgSEVBRFwiIOaBouWkjeOAgiIKKworIzogYnVpbHRpbi9jb25maWcuYzo4Cittc2dpZCAiZ2l0IGNvbmZpZyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGNvbmZpZyBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjU0Cittc2dpZCAiQ29uZmlnIGZpbGUgbG9jYXRpb24iCittc2dzdHIgIumFjee9ruaWh+S7tuS9jee9riIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NQorbXNnaWQgInVzZSBnbG9iYWwgY29uZmlnIGZpbGUiCittc2dzdHIgIuS9v+eUqOWFqOWxgOmFjee9ruaWh+S7tiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NgorbXNnaWQgInVzZSBzeXN0ZW0gY29uZmlnIGZpbGUiCittc2dzdHIgIuS9v+eUqOezu+e7n+e6p+mFjee9ruaWh+S7tiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1NworbXNnaWQgInVzZSByZXBvc2l0b3J5IGNvbmZpZyBmaWxlIgorbXNnc3RyICLkvb/nlKjku5PlupPnuqfphY3nva7mlofku7YiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTgKK21zZ2lkICJ1c2UgZ2l2ZW4gY29uZmlnIGZpbGUiCittc2dzdHIgIuS9v+eUqOaMh+WumueahOmFjee9ruaWh+S7tiIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OQorbXNnaWQgImJsb2ItaWQiCittc2dzdHIgIuaVsOaNruWvueixoSBJRCIKKworIzogYnVpbHRpbi9jb25maWcuYzo1OQorbXNnaWQgInJlYWQgY29uZmlnIGZyb20gZ2l2ZW4gYmxvYiBvYmplY3QiCittc2dzdHIgIuS7jue7meWumueahOaVsOaNruWvueixoeivu+WPlumFjee9riIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MAorbXNnaWQgIkFjdGlvbiIKK21zZ3N0ciAi5pON5L2cIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjYxCittc2dpZCAiZ2V0IHZhbHVlOiBuYW1lIFt2YWx1ZS1yZWdleF0iCittc2dzdHIgIuiOt+WPluWAvO+8mm5hbWUgW3ZhbHVlLXJlZ2V4XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo2MgorbXNnaWQgImdldCBhbGwgdmFsdWVzOiBrZXkgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi6I635b6X5omA5pyJ55qE5YC877yaa2V5IFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjMKK21zZ2lkICJnZXQgdmFsdWVzIGZvciByZWdleHA6IG5hbWUtcmVnZXggW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi5qC55o2u5q2j5YiZ6KGo6L6+5byP6I635b6X5YC877yabmFtZS1yZWdleCBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY0Cittc2dpZCAiZ2V0IHZhbHVlIHNwZWNpZmljIGZvciB0aGUgVVJMOiBzZWN0aW9uWy52YXJdIFVSTCIKK21zZ3N0ciAi6I635b6XIFVSTCDlj5blgLzvvJpzZWN0aW9uWy52YXJdIFVSTCIKKworIzogYnVpbHRpbi9jb25maWcuYzo2NQorbXNnaWQgInJlcGxhY2UgYWxsIG1hdGNoaW5nIHZhcmlhYmxlczogbmFtZSB2YWx1ZSBbdmFsdWVfcmVnZXhdIgorbXNnc3RyICLmm7/mjaLmiYDmnInljLnphY3nmoTlj5jph4/vvJpuYW1lIHZhbHVlIFt2YWx1ZV9yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjYKK21zZ2lkICJhZGQgYSBuZXcgdmFyaWFibGU6IG5hbWUgdmFsdWUiCittc2dzdHIgIua3u+WKoOS4gOS4quaWsOeahOWPmOmHj++8mm5hbWUgdmFsdWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjcKK21zZ2lkICJyZW1vdmUgYSB2YXJpYWJsZTogbmFtZSBbdmFsdWUtcmVnZXhdIgorbXNnc3RyICLliKDpmaTkuIDkuKrlj5jph4/vvJpuYW1lIFt2YWx1ZS1yZWdleF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NjgKK21zZ2lkICJyZW1vdmUgYWxsIG1hdGNoZXM6IG5hbWUgW3ZhbHVlLXJlZ2V4XSIKK21zZ3N0ciAi5Yig6Zmk5omA5pyJ5Yy56YWN6aG577yabmFtZSBbdmFsdWUtcmVnZXhdIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjY5Cittc2dpZCAicmVuYW1lIHNlY3Rpb246IG9sZC1uYW1lIG5ldy1uYW1lIgorbXNnc3RyICLph43lkb3lkI3lsI/oioLvvJpvbGQtbmFtZSBuZXctbmFtZSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MAorbXNnaWQgInJlbW92ZSBhIHNlY3Rpb246IG5hbWUiCittc2dzdHIgIuWIoOmZpOS4gOS4quWwj+iKgu+8mm5hbWUiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzEKK21zZ2lkICJsaXN0IGFsbCIKK21zZ3N0ciAi5YiX5Ye65omA5pyJIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjcyCittc2dpZCAib3BlbiBhbiBlZGl0b3IiCittc2dzdHIgIuaJk+W8gOS4gOS4que8lui+keWZqCIKKworIzogYnVpbHRpbi9jb25maWcuYzo3MworbXNnaWQgImZpbmQgdGhlIGNvbG9yIGNvbmZpZ3VyZWQ6IHNsb3QgW2RlZmF1bHRdIgorbXNnc3RyICLojrflvpfphY3nva7nmoTpopzoibLvvJrphY3nva4gW+m7mOiupF0iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzQKK21zZ2lkICJmaW5kIHRoZSBjb2xvciBzZXR0aW5nOiBzbG90IFtzdGRvdXQtaXMtdHR5XSIKK21zZ3N0ciAi6I635b6X6aKc6Imy6K6+572u77ya6YWN572uIFtzdGRvdXQtaXMtdHR5XSIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NQorbXNnaWQgIlR5cGUiCittc2dzdHIgIuexu+WeiyIKKworIzogYnVpbHRpbi9jb25maWcuYzo3NgorbXNnaWQgInZhbHVlIGlzIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIiIKK21zZ3N0ciAi5YC85pivIFwidHJ1ZVwiIOaIliBcImZhbHNlXCIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NzcKK21zZ2lkICJ2YWx1ZSBpcyBkZWNpbWFsIG51bWJlciIKK21zZ3N0ciAi5YC85piv5Y2B6L+b5Yi25pWwIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc4Cittc2dpZCAidmFsdWUgaXMgLS1ib29sIG9yIC0taW50IgorbXNnc3RyICLlgLzmmK8gLS1ib29sIG9yIC0taW50IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjc5Cittc2dpZCAidmFsdWUgaXMgYSBwYXRoIChmaWxlIG9yIGRpcmVjdG9yeSBuYW1lKSIKK21zZ3N0ciAi5YC85piv5LiA5Liq6Lev5b6E77yI5paH5Lu25oiW55uu5b2V5ZCN77yJIgorCisjOiBidWlsdGluL2NvbmZpZy5jOjgwCittc2dpZCAiT3RoZXIiCittc2dzdHIgIuWFtuWugyIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MQorbXNnaWQgInRlcm1pbmF0ZSB2YWx1ZXMgd2l0aCBOVUwgYnl0ZSIKK21zZ3N0ciAi57uI5q2i5YC85pivIE5VTCDlrZfoioIiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6ODIKK21zZ2lkICJzaG93IHZhcmlhYmxlIG5hbWVzIG9ubHkiCittc2dzdHIgIuWPquaYvuekuuWPmOmHj+WQjSIKKworIzogYnVpbHRpbi9jb25maWcuYzo4MworbXNnaWQgInJlc3BlY3QgaW5jbHVkZSBkaXJlY3RpdmVzIG9uIGxvb2t1cCIKK21zZ3N0ciAi5p+l6K+i5pe25Y+C54WnIGluY2x1ZGUg5oyH5Luk6YCS5b2S5p+l5om+IgorCisjOiBidWlsdGluL2NvbmZpZy5jOjMxMQorbXNnaWQgInVuYWJsZSB0byBwYXJzZSBkZWZhdWx0IGNvbG9yIHZhbHVlIgorbXNnc3RyICLkuI3og73op6PmnpDpu5jorqTpopzoibLlgLwiCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NDQ5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCittc2dzdHIgIiIKKyIjIFRoaXMgaXMgR2l0J3MgcGVyLXVzZXIgY29uZmlndXJhdGlvbiBmaWxlLlxuIgorIlt1c2VyXVxuIgorIiMgUGxlYXNlIGFkYXB0IGFuZCB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lczpcbiIKKyIjXHRuYW1lID0gJXNcbiIKKyIjXHRlbWFpbCA9ICVzXG4iCisKKyM6IGJ1aWx0aW4vY29uZmlnLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjcmVhdGUgY29uZmlndXJhdGlvbiBmaWxlICVzIgorbXNnc3RyICLkuI3og73liJvlu7rphY3nva7mlofku7YgJXMiCisKKyM6IGJ1aWx0aW4vY291bnQtb2JqZWN0cy5jOjU1Cittc2dpZCAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKK21zZ3N0ciAiZ2l0IGNvdW50LW9iamVjdHMgWy12XSBbLUggfCAtLWh1bWFuLXJlYWRhYmxlXSIKKworIzogYnVpbHRpbi9jb3VudC1vYmplY3RzLmM6NjUKK21zZ2lkICJwcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQiCittc2dzdHIgIuS7peeUqOaIt+WPr+ivu+eahOagvOW8j+aYvuekuuWkp+WwjyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjE3Cittc2dpZCAiZ2l0IGRlc2NyaWJlIFs8b3B0aW9ucz5dIFs8Y29tbWl0LWlzaD4uLi5dIgorbXNnc3RyICJnaXQgZGVzY3JpYmUgWzzpgInpobk+XSBbPOaPkOS6pOWPtz4uLi5dIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MTgKK21zZ2lkICJnaXQgZGVzY3JpYmUgWzxvcHRpb25zPl0gLS1kaXJ0eSIKK21zZ3N0ciAiZ2l0IGRlc2NyaWJlIFs86YCJ6aG5Pl0gLS1kaXJ0eSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJhbm5vdGF0ZWQgdGFnICVzIG5vdCBhdmFpbGFibGUiCittc2dzdHIgIumZhOazqOagh+etviAlcyDml6DmlYgiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyMjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5ub3RhdGVkIHRhZyAlcyBoYXMgbm8gZW1iZWRkZWQgbmFtZSIKK21zZ3N0ciAi6ZmE5rOo5qCH562+ICVzIOayoeacieW1jOWFpeWQjeensCIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjIyMworIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBpcyByZWFsbHkgJyVzJyBoZXJlIgorbXNnc3RyICLmoIfnrb4gJyVzJyDnmoTnoa7mmK/lnKggJyVzJyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI1MCBidWlsdGluL2xvZy5jOjQ1OQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZSAlcyIKK21zZ3N0ciAi5LiN5piv5LiA5Liq5pyJ5pWI55qE5a+56LGh5ZCNICVzIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIGlzIG5vdCBhIHZhbGlkICclcycgb2JqZWN0IgorbXNnc3RyICIlcyDkuI3mmK/kuIDkuKrmnInmlYjnmoQgJyVzJyDlr7nosaEiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzoyNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAibm8gdGFnIGV4YWN0bHkgbWF0Y2hlcyAnJXMnIgorbXNnc3RyICLmsqHmnInmoIfnrb7lh4bnoa7ljLnphY0gJyVzJyIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjI3MgorIywgYy1mb3JtYXQKK21zZ2lkICJzZWFyY2hpbmcgdG8gZGVzY3JpYmUgJXNcbiIKK21zZ3N0ciAi5pCc57Si5o+P6L+wICVzXG4iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmluaXNoZWQgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIuWujOaIkOaQnOe0oiAlc1xuIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyBhbm5vdGF0ZWQgdGFncyBjYW4gZGVzY3JpYmUgJyVzJy5cbiIKKyJIb3dldmVyLCB0aGVyZSB3ZXJlIHVuYW5ub3RhdGVkIHRhZ3M6IHRyeSAtLXRhZ3MuIgorbXNnc3RyICIiCisi5rKh5pyJ6ZmE5rOo5qCH562+6IO95o+P6L+wICclcyfjgIJcbiIKKyLnhLbogIzvvIzlrZjlnKjmnKrpmYTms6jmoIfnrb7vvJrlsJ3or5UgLS10YWdz44CCIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6MzUwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJObyB0YWdzIGNhbiBkZXNjcmliZSAnJXMnLlxuIgorIlRyeSAtLWFsd2F5cywgb3IgY3JlYXRlIHNvbWUgdGFncy4iCittc2dzdHIgIiIKKyLmsqHmnInmoIfnrb7og73mj4/ov7AgJyVzJ+OAglxuIgorIuWwneivlSAtLWFsd2F5c++8jOaIluiAheWIm+W7uuS4gOS6m+agh+etvuOAgiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ0cmF2ZXJzZWQgJWx1IGNvbW1pdHNcbiIKK21zZ3N0ciAi5bey6YGN5Y6GICVsdSDkuKrmj5DkuqRcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM3NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisibW9yZSB0aGFuICVpIHRhZ3MgZm91bmQ7IGxpc3RlZCAlaSBtb3N0IHJlY2VudFxuIgorImdhdmUgdXAgc2VhcmNoIGF0ICVzXG4iCittc2dzdHIgIiIKKyLlj5HnjrDlpJrkuo4gJWkg5Liq5qCH562+77yM5YiX5Ye65pyA6L+R55qEICVpIOS4qlxuIgorIuWcqCAlcyDmlL7lvIPmkJzntKJcbiIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NgorbXNnaWQgImZpbmQgdGhlIHRhZyB0aGF0IGNvbWVzIGFmdGVyIHRoZSBjb21taXQiCittc2dzdHIgIuWvu+aJvuivpeaPkOS6pOS5i+WQjueahOagh+etviIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5NworbXNnaWQgImRlYnVnIHNlYXJjaCBzdHJhdGVneSBvbiBzdGRlcnIiCittc2dzdHIgIuWcqOagh+WHhumUmeivr+S4iuiwg+ivleaQnOe0ouetlueVpSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjM5OAorbXNnaWQgInVzZSBhbnkgcmVmIgorbXNnc3RyICLkvb/nlKjku7vmhI/lvJXnlKgiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzozOTkKK21zZ2lkICJ1c2UgYW55IHRhZywgZXZlbiB1bmFubm90YXRlZCIKK21zZ3N0ciAi5L2/55So5Lu75oSP5qCH562+77yM5Y2z5L2/5pyq6ZmE5bim5rOo6YeKIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDAwCittc2dpZCAiYWx3YXlzIHVzZSBsb25nIGZvcm1hdCIKK21zZ3N0ciAi5aeL57uI5L2/55So6ZW/5o+Q5Lqk5Y+35qC85byPIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDAxCittc2dpZCAib25seSBmb2xsb3cgZmlyc3QgcGFyZW50IgorbXNnc3RyICLlj6rot5/pmo/nrKzkuIDkuKrniLbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDQKK21zZ2lkICJvbmx5IG91dHB1dCBleGFjdCBtYXRjaGVzIgorbXNnc3RyICLlj6rovpPlh7rnsr7noa7ljLnphY0iCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MDYKK21zZ2lkICJjb25zaWRlciA8bj4gbW9zdCByZWNlbnQgdGFncyAoZGVmYXVsdDogMTApIgorbXNnc3RyICLogIPomZHmnIDov5EgPG4+IOS4quagh+etvu+8iOm7mOiupO+8mjEw77yJIgorCisjOiBidWlsdGluL2Rlc2NyaWJlLmM6NDA4Cittc2dpZCAib25seSBjb25zaWRlciB0YWdzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAi5Y+q6ICD6JmR5Yy56YWNIDzmqKHlvI8+IOeahOagh+etviIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQxMCBidWlsdGluL25hbWUtcmV2LmM6MzE4Cittc2dpZCAic2hvdyBhYmJyZXZpYXRlZCBjb21taXQgb2JqZWN0IGFzIGZhbGxiYWNrIgorbXNnc3RyICLmmL7npLrnroDlhpnnmoTmj5DkuqTlj7fkvZzkuLrlkI7lpIciCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTEKK21zZ2lkICJtYXJrIgorbXNnc3RyICLmoIforrAiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MTIKK21zZ2lkICJhcHBlbmQgPG1hcms+IG9uIGRpcnR5IHdvcmtpbmcgdHJlZSAoZGVmYXVsdDogXCItZGlydHlcIikiCittc2dzdHIgIuWvueS6juiEj+W3peS9nOWMuu+8jOi/veWKoCA85qCH6K6wPu+8iOm7mOiupO+8mlwiLWRpcnR5XCLvvIkiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0MzAKK21zZ2lkICItLWxvbmcgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1hYmJyZXY9MCIKK21zZ3N0ciAiLS1sb25nIOS4jiAtLWFiYnJldj0wIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9kZXNjcmliZS5jOjQ1NgorbXNnaWQgIk5vIG5hbWVzIGZvdW5kLCBjYW5ub3QgZGVzY3JpYmUgYW55dGhpbmcuIgorbXNnc3RyICLmsqHmnInlj5HnjrDlkI3np7DvvIzml6Dms5Xmj4/ov7Dku7vkvZXkuJzopb/jgIIiCisKKyM6IGJ1aWx0aW4vZGVzY3JpYmUuYzo0NzYKK21zZ2lkICItLWRpcnR5IGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbW1pdC1pc2hlcyIKK21zZ3N0ciAiLS1kaXJ0eSDkuI3og73kuI7mj5DkuqTlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vZGlmZi5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiclcyc6IG5vdCBhIHJlZ3VsYXIgZmlsZSBvciBzeW1saW5rIgorbXNnc3RyICInJXMn77ya5LiN5piv5LiA5Liq5q2j6KeE5paH5Lu25oiW56ym5Y+36ZO+5o6lIgorCisjOiBidWlsdGluL2RpZmYuYzoyMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvcHRpb246ICVzIgorbXNnc3RyICLml6DmlYjpgInpobnvvJolcyIKKworIzogYnVpbHRpbi9kaWZmLmM6MzU4Cittc2dpZCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiCittc2dzdHIgIuS4jeaYr+S4gOS4qiBnaXQg5LuT5bqTIgorCisjOiBidWlsdGluL2RpZmYuYzo0MDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIuaPkOS+m+S6huaXoOaViOWvueixoSAnJXMn44CCIgorCisjOiBidWlsdGluL2RpZmYuYzo0MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAibW9yZSB0aGFuIHR3byBibG9icyBnaXZlbjogJyVzJyIKK21zZ3N0ciAi5o+Q5L6b5LqG6LaF6L+H5Lik5Liq5pWw5o2u5a+56LGh77yaJyVzJyIKKworIzogYnVpbHRpbi9kaWZmLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuaGFuZGxlZCBvYmplY3QgJyVzJyBnaXZlbi4iCittc2dzdHIgIuaXoOazleWkhOeQhueahOWvueixoSAnJXMn44CCIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6MjUKK21zZ2lkICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorbXNnc3RyICJnaXQgZmFzdC1leHBvcnQgW3Jldi1saXN0LW9wdHNdIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTgwCittc2dpZCAic2hvdyBwcm9ncmVzcyBhZnRlciA8bj4gb2JqZWN0cyIKK21zZ3N0ciAi5ZyoIDxuPiDkuKrlr7nosaHkuYvlkI7mmL7npLrov5vluqYiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5ODIKK21zZ2lkICJzZWxlY3QgaGFuZGxpbmcgb2Ygc2lnbmVkIHRhZ3MiCittc2dzdHIgIumAieaLqeWmguS9leWkhOeQhuetvuWQjeagh+etviIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4NQorbXNnaWQgInNlbGVjdCBoYW5kbGluZyBvZiB0YWdzIHRoYXQgdGFnIGZpbHRlcmVkIG9iamVjdHMiCittc2dzdHIgIumAieaLqeW9k+agh+etvuaMh+WQkeiiq+i/h+a7pOWvueixoeaXtuivpeagh+etvueahOWkhOeQhuaWueW8jyIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk4OAorbXNnaWQgIkR1bXAgbWFya3MgdG8gdGhpcyBmaWxlIgorbXNnc3RyICLmiormoIforrDlrZjlgqjliLDov5nkuKrmlofku7YiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTAKK21zZ2lkICJJbXBvcnQgbWFya3MgZnJvbSB0aGlzIGZpbGUiCittc2dzdHIgIuS7jui/meS4quaWh+S7tuWvvOWFpeagh+iusCIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5MgorbXNnaWQgIkZha2UgYSB0YWdnZXIgd2hlbiB0YWdzIGxhY2sgb25lIgorbXNnc3RyICLlvZPmoIfnrb7nvLrlsJHmoIforrDogIXlrZfmrrXml7bvvIzlgYfoo4Xmj5DkvpvkuIDkuKoiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzo5OTQKK21zZ2lkICJPdXRwdXQgZnVsbCB0cmVlIGZvciBlYWNoIGNvbW1pdCIKK21zZ3N0ciAi5q+P5qyh5o+Q5Lqk6YO96L6T5Ye65pW05Liq5qCRIgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk2Cittc2dpZCAiVXNlIHRoZSBkb25lIGZlYXR1cmUgdG8gdGVybWluYXRlIHRoZSBzdHJlYW0iCittc2dzdHIgIuS9v+eUqCBkb25lIOWKn+iDveadpee7iOatoua1gSIKKworIzogYnVpbHRpbi9mYXN0LWV4cG9ydC5jOjk5NworbXNnaWQgIlNraXAgb3V0cHV0IG9mIGJsb2IgZGF0YSIKK21zZ3N0ciAi6Lez6L+H5pWw5o2u5a+56LGh55qE6L6T5Ye6IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk4Cittc2dpZCAicmVmc3BlYyIKK21zZ3N0ciAi5byV55So6KeE5qC8IgorCisjOiBidWlsdGluL2Zhc3QtZXhwb3J0LmM6OTk5Cittc2dpZCAiQXBwbHkgcmVmc3BlYyB0byBleHBvcnRlZCByZWZzIgorbXNnc3RyICLlr7nlr7zlh7rnmoTlvJXnlKjlupTnlKjlvJXnlKjop4TmoLwiCisKKyM6IGJ1aWx0aW4vZmFzdC1leHBvcnQuYzoxMDAwCittc2dpZCAiYW5vbnltaXplIG91dHB1dCIKK21zZ3N0ciAi5Yy/5ZCN6L6T5Ye6IgorCisjOiBidWlsdGluL2ZldGNoLmM6MjAKK21zZ2lkICJnaXQgZmV0Y2ggWzxvcHRpb25zPl0gWzxyZXBvc2l0b3J5PiBbPHJlZnNwZWM+Li4uXV0iCittc2dzdHIgImdpdCBmZXRjaCBbPOmAiemhuT5dIFs85LuT5bqTPiBbPOW8leeUqOinhOagvD4uLi5dXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIxCittc2dpZCAiZ2l0IGZldGNoIFs8b3B0aW9ucz5dIDxncm91cD4iCittc2dzdHIgImdpdCBmZXRjaCBbPOmAiemhuT5dIDznu4Q+IgorCisjOiBidWlsdGluL2ZldGNoLmM6MjIKK21zZ2lkICJnaXQgZmV0Y2ggLS1tdWx0aXBsZSBbPG9wdGlvbnM+XSBbKDxyZXBvc2l0b3J5PiB8IDxncm91cD4pLi4uXSIKK21zZ3N0ciAiZ2l0IGZldGNoIC0tbXVsdGlwbGUgWzzpgInpobk+XSBbKDzku5PlupM+IHwgPOe7hD4pLi4uXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjIzCittc2dpZCAiZ2l0IGZldGNoIC0tYWxsIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgZmV0Y2ggLS1hbGwgWzzpgInpobk+XSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkwIGJ1aWx0aW4vcHVsbC5jOjE2MgorbXNnaWQgImZldGNoIGZyb20gYWxsIHJlbW90ZXMiCittc2dzdHIgIuS7juaJgOacieeahOi/nOeoi+aKk+WPliIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkyIGJ1aWx0aW4vcHVsbC5jOjE2NQorbXNnaWQgImFwcGVuZCB0byAuZ2l0L0ZFVENIX0hFQUQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyIKK21zZ3N0ciAi6L+95Yqg5YiwIC5naXQvRkVUQ0hfSEVBRCDogIzkuI3mmK/opobnm5blroMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5NCBidWlsdGluL3B1bGwuYzoxNjgKK21zZ2lkICJwYXRoIHRvIHVwbG9hZCBwYWNrIG9uIHJlbW90ZSBlbmQiCittc2dzdHIgIuS4iuS8oOWMheWIsOi/nOeoi+eahOi3r+W+hCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk1IGJ1aWx0aW4vcHVsbC5jOjE3MAorbXNnaWQgImZvcmNlIG92ZXJ3cml0ZSBvZiBsb2NhbCBicmFuY2giCittc2dzdHIgIuW8uuWItuimhuebluacrOWcsOWIhuaUryIKKworIzogYnVpbHRpbi9mZXRjaC5jOjk3Cittc2dpZCAiZmV0Y2ggZnJvbSBtdWx0aXBsZSByZW1vdGVzIgorbXNnc3RyICLku47lpJrkuKrov5znqIvmipPlj5YiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo5OSBidWlsdGluL3B1bGwuYzoxNzIKK21zZ2lkICJmZXRjaCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIgorbXNnc3RyICLmipPlj5bmiYDmnInnmoTmoIfnrb7lkozlhbPogZTlr7nosaEiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDEKK21zZ2lkICJkbyBub3QgZmV0Y2ggYWxsIHRhZ3MgKC0tbm8tdGFncykiCittc2dzdHIgIuS4jeaKk+WPluS7u+S9leagh+etvigtLW5vLXRhZ3MpIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTAzIGJ1aWx0aW4vcHVsbC5jOjE3NQorbXNnaWQgInBydW5lIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBubyBsb25nZXIgb24gcmVtb3RlIgorbXNnc3RyICLmuIXpmaTov5znqIvlt7Lnu4/kuI3lrZjlnKjnmoTliIbmlK/nmoTot5/ouKrliIbmlK8iCisKKyMgIOivkeiAhe+8muWPr+mAieWAvO+8jOS4jeiDvee/u+ivkQorIzogYnVpbHRpbi9mZXRjaC5jOjEwNCBidWlsdGluL3B1bGwuYzoxNzgKK21zZ2lkICJvbi1kZW1hbmQiCittc2dzdHIgIm9uLWRlbWFuZCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNSBidWlsdGluL3B1bGwuYzoxNzkKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBmZXRjaGluZyBvZiBzdWJtb2R1bGVzIgorbXNnc3RyICLmjqfliLblrZDmqKHnu4TnmoTpgJLlvZLmipPlj5YiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMDkgYnVpbHRpbi9wdWxsLmM6MTg0Cittc2dpZCAia2VlcCBkb3dubG9hZGVkIHBhY2siCittc2dzdHIgIuS/neaMgeS4i+i9veWMhSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExMQorbXNnaWQgImFsbG93IHVwZGF0aW5nIG9mIEhFQUQgcmVmIgorbXNnc3RyICLlhYHorrjmm7TmlrAgSEVBRCDlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTQgYnVpbHRpbi9wdWxsLmM6MTg3Cittc2dpZCAiZGVlcGVuIGhpc3Rvcnkgb2Ygc2hhbGxvdyBjbG9uZSIKK21zZ3N0ciAi5rex5YyW5rWF5YWL6ZqG55qE5Y6G5Y+yIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE2IGJ1aWx0aW4vcHVsbC5jOjE5MAorbXNnaWQgImNvbnZlcnQgdG8gYSBjb21wbGV0ZSByZXBvc2l0b3J5IgorbXNnc3RyICLovazmjaLkuLrkuIDkuKrlrozmlbTnmoTku5PlupMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTggYnVpbHRpbi9sb2cuYzoxMjMzCittc2dpZCAiZGlyIgorbXNnc3RyICLnm67lvZUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTkKK21zZ2lkICJwcmVwZW5kIHRoaXMgdG8gc3VibW9kdWxlIHBhdGggb3V0cHV0IgorbXNnc3RyICLlnKjlrZDmqKHnu4Tot6/lvoTovpPlh7rnmoTliY3pnaLliqDkuIrmraTnm67lvZUiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjIKK21zZ2lkICJkZWZhdWx0IG1vZGUgZm9yIHJlY3Vyc2lvbiIKK21zZ3N0ciAi6YCS5b2S55qE6buY6K6k5qih5byPIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTI0IGJ1aWx0aW4vcHVsbC5jOjE5MworbXNnaWQgImFjY2VwdCByZWZzIHRoYXQgdXBkYXRlIC5naXQvc2hhbGxvdyIKK21zZ3N0ciAi5o6l5Y+X5pu05pawIC5naXQvc2hhbGxvdyDnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjUgYnVpbHRpbi9wdWxsLmM6MTk1Cittc2dpZCAicmVmbWFwIgorbXNnc3RyICLlvJXnlKjmmKDlsIQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjYgYnVpbHRpbi9wdWxsLmM6MTk2Cittc2dpZCAic3BlY2lmeSBmZXRjaCByZWZtYXAiCittc2dzdHIgIuaMh+WumuiOt+WPluaTjeS9nOeahOW8leeUqOaYoOWwhCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjM3OAorbXNnaWQgIkNvdWxkbid0IGZpbmQgcmVtb3RlIHJlZiBIRUFEIgorbXNnc3RyICLml6Dms5Xlj5HnjrDov5znqIsgSEVBRCDlvJXnlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NTgKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzIG5vdCBmb3VuZCIKK21zZ3N0ciAi5a+56LGhICVzIOacquWPkeeOsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjQ2MworbXNnaWQgIlt1cCB0byBkYXRlXSIKK21zZ3N0ciAiW+acgOaWsF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiISAlLSpzICUtKnMgLT4gJXMgIChjYW4ndCBmZXRjaCBpbiBjdXJyZW50IGJyYW5jaCkiCittc2dzdHIgIiEgJS0qcyAlLSpzIC0+ICVzICDvvIjlnKjlvZPliY3liIbmlK/kuIvkuI3og73ojrflj5bvvIkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo0NzggYnVpbHRpbi9mZXRjaC5jOjU2NAorbXNnaWQgIltyZWplY3RlZF0iCittc2dzdHIgIlvlt7Lmi5Lnu51dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NDg5Cittc2dpZCAiW3RhZyB1cGRhdGVdIgorbXNnc3RyICJb5qCH562+5pu05pawXSIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBidWlsdGluL2ZldGNoLmM6NDkxIGJ1aWx0aW4vZmV0Y2guYzo1MjYgYnVpbHRpbi9mZXRjaC5jOjU0NAorbXNnaWQgIiAgKHVuYWJsZSB0byB1cGRhdGUgbG9jYWwgcmVmKSIKK21zZ3N0ciAiICDvvIjkuI3og73mm7TmlrDmnKzlnLDlvJXnlKjvvIkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1MDkKK21zZ2lkICJbbmV3IHRhZ10iCittc2dzdHIgIlvmlrDmoIfnrb5dIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTEyCittc2dpZCAiW25ldyBicmFuY2hdIgorbXNnc3RyICJb5paw5YiG5pSvXSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjUxNQorbXNnaWQgIltuZXcgcmVmXSIKK21zZ3N0ciAiW+aWsOW8leeUqF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo1NjAKK21zZ2lkICJ1bmFibGUgdG8gdXBkYXRlIGxvY2FsIHJlZiIKK21zZ3N0ciAi5LiN6IO95pu05paw5pys5Zyw5byV55SoIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTYwCittc2dpZCAiZm9yY2VkIHVwZGF0ZSIKK21zZ3N0ciAi5by65Yi25pu05pawIgorCisjOiBidWlsdGluL2ZldGNoLmM6NTY2Cittc2dpZCAiKG5vbi1mYXN0LWZvcndhcmQpIgorbXNnc3RyICLvvIjpnZ7lv6vov5vlvI/vvIkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo2MDAgYnVpbHRpbi9mZXRjaC5jOjg0MgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgb3BlbiAlczogJXNcbiIKK21zZ3N0ciAi5peg5rOV5omT5byAICVz77yaJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjYwOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyBkaWQgbm90IHNlbmQgYWxsIG5lY2Vzc2FyeSBvYmplY3RzXG4iCittc2dzdHIgIiVzIOacquWPkemAgeaJgOacieW/hemhu+eahOWvueixoVxuIgorCisjOiBidWlsdGluL2ZldGNoLmM6NjI3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlamVjdCAlcyBiZWNhdXNlIHNoYWxsb3cgcm9vdHMgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHVwZGF0ZWQiCittc2dzdHIgIuaLkue7nSAlcyDlm6DkuLrmtYXlhYvpmobkuI3lhYHorrjooqvmm7TmlrAiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo3MTUgYnVpbHRpbi9mZXRjaC5jOjgwNworIywgYy1mb3JtYXQKK21zZ2lkICJGcm9tICUuKnNcbiIKK21zZ3N0ciAi5p2l6IeqICUuKnNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjcyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisic29tZSBsb2NhbCByZWZzIGNvdWxkIG5vdCBiZSB1cGRhdGVkOyB0cnkgcnVubmluZ1xuIgorIiAnZ2l0IHJlbW90ZSBwcnVuZSAlcycgdG8gcmVtb3ZlIGFueSBvbGQsIGNvbmZsaWN0aW5nIGJyYW5jaGVzIgorbXNnc3RyICIiCisi5LiA5Lqb5pys5Zyw5byV55So5LiN6IO96KKr5pu05paw77yb5bCd6K+V6L+Q6KGMXG4iCisiICdnaXQgcmVtb3RlIHBydW5lICVzJyDmnaXliKDpmaTml6fnmoTjgIHmnInlhrLnqoHnmoTliIbmlK8iCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogYnVpbHRpbi9mZXRjaC5jOjc3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmcpIgorbXNnc3RyICIgICDvvIglcyDlsIbmiJDkuLrmkYfmkYbnirbmgIHvvIkiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogYnVpbHRpbi9mZXRjaC5jOjc3OQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAoJXMgaGFzIGJlY29tZSBkYW5nbGluZykiCittc2dzdHIgIiAgIO+8iCVzIOW3suaIkOS4uuaRh+aRhueKtuaAge+8iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjgxMQorbXNnaWQgIltkZWxldGVkXSIKK21zZ3N0ciAiW+W3suWIoOmZpF0iCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MTIgYnVpbHRpbi9yZW1vdGUuYzoxMDM0Cittc2dpZCAiKG5vbmUpIgorbXNnc3RyICLvvIjml6DvvIkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVmdXNpbmcgdG8gZmV0Y2ggaW50byBjdXJyZW50IGJyYW5jaCAlcyBvZiBub24tYmFyZSByZXBvc2l0b3J5IgorbXNnc3RyICLmi5Lnu53ojrflj5bliLDpnZ7nuq/ku5PlupPnmoTlvZPliY3liIbmlK8gJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiB2YWx1ZSBcIiVzXCIgaXMgbm90IHZhbGlkIGZvciAlcyIKK21zZ3N0ciAi6YCJ6aG5IFwiJXNcIiDnmoTlgLwgXCIlc1wiIOWvueS6jiAlcyDmmK/ml6DmlYjnmoQiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzo4NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uIFwiJXNcIiBpcyBpZ25vcmVkIGZvciAlc1xuIgorbXNnc3RyICLpgInpobkgXCIlc1wiIOS4uiAlcyDmiYDlv73nlaVcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjkxMAorIywgYy1mb3JtYXQKK21zZ2lkICJEb24ndCBrbm93IGhvdyB0byBmZXRjaCBmcm9tICVzIgorbXNnc3RyICLkuI3nn6XpgZPlpoLkvZXku44gJXMg6I635Y+WIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTA3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGZXRjaGluZyAlc1xuIgorbXNnc3RyICLmraPlnKjojrflj5YgJXNcbiIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwNzMgYnVpbHRpbi9yZW1vdGUuYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZmV0Y2ggJXMiCittc2dzdHIgIuS4jeiDveiOt+WPliAlcyIKKworIzogYnVpbHRpbi9mZXRjaC5jOjEwOTEKK21zZ2lkICIiCisiTm8gcmVtb3RlIHJlcG9zaXRvcnkgc3BlY2lmaWVkLiAgUGxlYXNlLCBzcGVjaWZ5IGVpdGhlciBhIFVSTCBvciBhXG4iCisicmVtb3RlIG5hbWUgZnJvbSB3aGljaCBuZXcgcmV2aXNpb25zIHNob3VsZCBiZSBmZXRjaGVkLiIKK21zZ3N0ciAi5pyq5oyH5a6a6L+c56iL5LuT5bqT44CC6K+36YCa6L+H5LiA5LiqIFVSTCDmiJbov5znqIvku5PlupPlkI3mjIflrprvvIznlKjku6Xojrflj5bmlrDmj5DkuqTjgIIiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTE0Cittc2dpZCAiWW91IG5lZWQgdG8gc3BlY2lmeSBhIHRhZyBuYW1lLiIKK21zZ3N0ciAi5oKo6ZyA6KaB5oyH5a6a5LiA5Liq5qCH562+5ZCN56ew44CCIgorCisjOiBidWlsdGluL2ZldGNoLmM6MTE1NgorbXNnaWQgIi0tZGVwdGggYW5kIC0tdW5zaGFsbG93IGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIgorbXNnc3RyICItLWRlcHRoIOWSjCAtLXVuc2hhbGxvdyDkuI3og73lkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTU4Cittc2dpZCAiLS11bnNoYWxsb3cgb24gYSBjb21wbGV0ZSByZXBvc2l0b3J5IGRvZXMgbm90IG1ha2Ugc2Vuc2UiCittc2dzdHIgIuWvueS6juS4gOS4quWujOaVtOeahOS7k+W6k++8jOWPguaVsCAtLXVuc2hhbGxvdyDmsqHmnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMTgxCittc2dpZCAiZmV0Y2ggLS1hbGwgZG9lcyBub3QgdGFrZSBhIHJlcG9zaXRvcnkgYXJndW1lbnQiCittc2dzdHIgImZldGNoIC0tYWxsIOS4jeiDveW4puS4gOS4quS7k+W6k+WPguaVsCIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExODMKK21zZ2lkICJmZXRjaCAtLWFsbCBkb2VzIG5vdCBtYWtlIHNlbnNlIHdpdGggcmVmc3BlY3MiCittc2dzdHIgImZldGNoIC0tYWxsIOW4puW8leeUqOinhOagvOayoeacieS7u+S9leaEj+S5iSIKKworIzogYnVpbHRpbi9mZXRjaC5jOjExOTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgb3IgcmVtb3RlIGdyb3VwOiAlcyIKK21zZ3N0ciAi5rKh5pyJ6L+Z5qC355qE6L+c56iL5oiW6L+c56iL57uE77yaJXMiCisKKyM6IGJ1aWx0aW4vZmV0Y2guYzoxMjAyCittc2dpZCAiRmV0Y2hpbmcgYSBncm91cCBhbmQgc3BlY2lmeWluZyByZWZzcGVjcyBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICLojrflj5bnu4TlubbmjIflrprlvJXnlKjop4TmoLzmsqHmnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjE0Cittc2dpZCAiIgorImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA8bWVzc2FnZT5dIFstLWxvZ1s9PG4+XSB8IC0tbm8tbG9nXSBbLS1maWxlIDxmaWxlPl0iCittc2dzdHIgImdpdCBmbXQtbWVyZ2UtbXNnIFstbSA86K+05piOPl0gWy0tbG9nWz08bj5dIHwgLS1uby1sb2ddIFstLWZpbGUgPOaWh+S7tj5dIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzAKK21zZ2lkICJwb3B1bGF0ZSBsb2cgd2l0aCBhdCBtb3N0IDxuPiBlbnRyaWVzIGZyb20gc2hvcnRsb2ciCittc2dzdHIgIuWQkeaPkOS6pOivtOaYjuS4reacgOWkmuWkjeWItuaMh+Wumuadoeebru+8iOWQiOW5tuiAjOadpeeahOaPkOS6pO+8ieeahOeugOefreivtOaYjiIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6NjczCittc2dpZCAiYWxpYXMgZm9yIC0tbG9nIChkZXByZWNhdGVkKSIKK21zZ3N0ciAi5Y+C5pWwIC0tbG9nIOeahOWIq+WQje+8iOW3suW8g+eUqO+8iSIKKworIzogYnVpbHRpbi9mbXQtbWVyZ2UtbXNnLmM6Njc2Cittc2dpZCAidGV4dCIKK21zZ3N0ciAi5paH5pysIgorCisjOiBidWlsdGluL2ZtdC1tZXJnZS1tc2cuYzo2NzcKK21zZ2lkICJ1c2UgPHRleHQ+IGFzIHN0YXJ0IG9mIG1lc3NhZ2UiCittc2dzdHIgIuS9v+eUqCA85paH5pysPiDkvZzkuLrmj5DkuqTor7TmmI7nmoTlvIDlp4siCisKKyM6IGJ1aWx0aW4vZm10LW1lcmdlLW1zZy5jOjY3OAorbXNnaWQgImZpbGUgdG8gcmVhZCBmcm9tIgorbXNnc3RyICLku47mlofku7bkuK3or7vlj5YiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6OQorbXNnaWQgImdpdCBmb3ItZWFjaC1yZWYgWzxvcHRpb25zPl0gWzxwYXR0ZXJuPl0iCittc2dzdHIgImdpdCBmb3ItZWFjaC1yZWYgWzzpgInpobk+XSBbPOaooeW8jz5dIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI0Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBzaGVsbHMiCittc2dzdHIgIuW8leeUqOWNoOS9jeespumAgueUqOS6jiBzaGVsbHMiCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MjYKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIHBlcmwiCittc2dzdHIgIuW8leeUqOWNoOS9jeespumAgueUqOS6jiBwZXJsIgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjI4Cittc2dpZCAicXVvdGUgcGxhY2Vob2xkZXJzIHN1aXRhYmx5IGZvciBweXRob24iCittc2dzdHIgIuW8leeUqOWNoOS9jeespumAgueUqOS6jiBweXRob24iCisKKyM6IGJ1aWx0aW4vZm9yLWVhY2gtcmVmLmM6MzAKK21zZ2lkICJxdW90ZSBwbGFjZWhvbGRlcnMgc3VpdGFibHkgZm9yIFRjbCIKK21zZ3N0ciAi5byV55So5Y2g5L2N56ym6YCC55So5LqOIFRjbCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozMworbXNnaWQgInNob3cgb25seSA8bj4gbWF0Y2hlZCByZWZzIgorbXNnc3RyICLlj6rmmL7npLogPG4+IOS4quWMuemFjeeahOW8leeUqCIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNAorbXNnaWQgImZvcm1hdCB0byB1c2UgZm9yIHRoZSBvdXRwdXQiCittc2dzdHIgIui+k+WHuuagvOW8jyIKKworIzogYnVpbHRpbi9mb3ItZWFjaC1yZWYuYzozNQorbXNnaWQgImtleSIKK21zZ3N0ciAia2V5IgorCisjOiBidWlsdGluL2Zvci1lYWNoLXJlZi5jOjM2Cittc2dpZCAiZmllbGQgbmFtZSB0byBzb3J0IG9uIgorbXNnc3RyICLmjpLluo/nmoTlrZfmrrXlkI0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjE2MyBidWlsdGluL3BydW5lLmM6MTM3Cittc2dpZCAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IgorbXNnc3RyICLmo4Dmn6Xov57mjqXkuK0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjU2OAorbXNnaWQgIkNoZWNraW5nIG9iamVjdCBkaXJlY3RvcmllcyIKK21zZ3N0ciAi5qOA5p+l5a+56LGh55uu5b2V5LitIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzEKK21zZ2lkICJnaXQgZnNjayBbPG9wdGlvbnM+XSBbPG9iamVjdD4uLi5dIgorbXNnc3RyICJnaXQgZnNjayBbPOmAiemhuT5dIFs85a+56LGhPi4uLl0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjYzNworbXNnaWQgInNob3cgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi5pi+56S65LiN5Y+v6L6+55qE5a+56LGhIgorCisjOiBidWlsdGluL2ZzY2suYzo2MzgKK21zZ2lkICJzaG93IGRhbmdsaW5nIG9iamVjdHMiCittc2dzdHIgIuaYvuekuuaRh+aRhueahOWvueixoSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjM5Cittc2dpZCAicmVwb3J0IHRhZ3MiCittc2dzdHIgIuaKpeWRiuagh+etviIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQwCittc2dpZCAicmVwb3J0IHJvb3Qgbm9kZXMiCittc2dzdHIgIuaKpeWRiuagueiKgueCuSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQxCittc2dpZCAibWFrZSBpbmRleCBvYmplY3RzIGhlYWQgbm9kZXMiCittc2dzdHIgIuWwhue0ouW8leS6puS9nOS4uuajgOafpeeahOWktOiKgueCuSIKKworIzogYnVpbHRpbi9mc2NrLmM6NjQyCittc2dpZCAibWFrZSByZWZsb2dzIGhlYWQgbm9kZXMgKGRlZmF1bHQpIgorbXNnc3RyICLlsIblvJXnlKjml6Xlv5fkvZzkuLrmo4Dmn6XnmoTlpLToioLngrnvvIjpu5jorqTvvIkiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0MworbXNnaWQgImFsc28gY29uc2lkZXIgcGFja3MgYW5kIGFsdGVybmF0ZSBvYmplY3RzIgorbXNnc3RyICLkuZ/ogIPomZHljIXlkozlpIfnlKjlr7nosaEiCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NAorbXNnaWQgImNoZWNrIG9ubHkgY29ubmVjdGl2aXR5IgorbXNnc3RyICLku4Xmo4Dmn6Xov57pgJrmgKciCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0NQorbXNnaWQgImVuYWJsZSBtb3JlIHN0cmljdCBjaGVja2luZyIKK21zZ3N0ciAi5ZCv55So5pu05Lil5qC855qE5qOA5p+lIgorCisjOiBidWlsdGluL2ZzY2suYzo2NDcKK21zZ2lkICJ3cml0ZSBkYW5nbGluZyBvYmplY3RzIGluIC5naXQvbG9zdC1mb3VuZCIKK21zZ3N0ciAi5bCG5pGH5pGG5a+56LGh5YaZ5YWlIC5naXQvbG9zdC1mb3VuZCDkuK0iCisKKyM6IGJ1aWx0aW4vZnNjay5jOjY0OCBidWlsdGluL3BydW5lLmM6MTA3Cittc2dpZCAic2hvdyBwcm9ncmVzcyIKK21zZ3N0ciAi5pi+56S66L+b5bqmIgorCisjOiBidWlsdGluL2ZzY2suYzo3MDcKK21zZ2lkICJDaGVja2luZyBvYmplY3RzIgorbXNnc3RyICLmo4Dmn6Xlr7nosaHkuK0iCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNQorbXNnaWQgImdpdCBnYyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IGdjIFs86YCJ6aG5Pl0iCisKKyM6IGJ1aWx0aW4vZ2MuYzo1NQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkICVzOiAnJXMnIgorbXNnc3RyICLml6DmlYggJXPvvJonJXMnIgorCisjOiBidWlsdGluL2djLmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZWx5IGxvbmcgb2JqZWN0IGRpcmVjdG9yeSAlLipzIgorbXNnc3RyICLkuI3mraPluLjnmoTplb/lr7nosaHnm67lvZUgJS4qcyIKKworIzogYnVpbHRpbi9nYy5jOjI2OQorbXNnaWQgInBydW5lIHVucmVmZXJlbmNlZCBvYmplY3RzIgorbXNnc3RyICLmuIXpmaTmnKrlvJXnlKjnmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vZ2MuYzoyNzEKK21zZ2lkICJiZSBtb3JlIHRob3JvdWdoIChpbmNyZWFzZWQgcnVudGltZSkiCittc2dzdHIgIuabtOW9u+W6le+8iOWinuWKoOi/kOihjOaXtumXtO+8iSIKKworIzogYnVpbHRpbi9nYy5jOjI3MgorbXNnaWQgImVuYWJsZSBhdXRvLWdjIG1vZGUiCittc2dzdHIgIuWQr+eUqOiHquWKqOWeg+WcvuWbnuaUtuaooeW8jyIKKworIzogYnVpbHRpbi9nYy5jOjI3MworbXNnaWQgImZvcmNlIHJ1bm5pbmcgZ2MgZXZlbiBpZiB0aGVyZSBtYXkgYmUgYW5vdGhlciBnYyBydW5uaW5nIgorbXNnc3RyICLlvLrliLbmiafooYwgZ2Mg5Y2z5L2/5Y+m5aSW5LiA5LiqIGdjIOato+WcqOaJp+ihjCIKKworIzogYnVpbHRpbi9nYy5jOjMxNQorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvIHBhY2tpbmcgdGhlIHJlcG9zaXRvcnkgaW4gYmFja2dyb3VuZCBmb3Igb3B0aW11bSBwZXJmb3JtYW5jZS5cbiIKK21zZ3N0ciAi6Ieq5Yqo5Zyo5ZCO5Y+w5omn6KGM5LuT5bqT5omT5YyF5Lul5rGC5pyA5L2z5oCn6IO944CCXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzozMTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXV0byBwYWNraW5nIHRoZSByZXBvc2l0b3J5IGZvciBvcHRpbXVtIHBlcmZvcm1hbmNlLlxuIgorbXNnc3RyICLoh6rliqjmiZPljIXku5PlupPku6XmsYLmnIDkvbPmgKfog73jgIJcbiIKKworIzogYnVpbHRpbi9nYy5jOjMxOAorIywgYy1mb3JtYXQKK21zZ2lkICJTZWUgXCJnaXQgaGVscCBnY1wiIGZvciBtYW51YWwgaG91c2VrZWVwaW5nLlxuIgorbXNnc3RyICLmiYvlt6Xnu7TmiqTlj4Lop4EgXCJnaXQgaGVscCBnY1wi44CCXG4iCisKKyM6IGJ1aWx0aW4vZ2MuYzozMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImdjIGlzIGFscmVhZHkgcnVubmluZyBvbiBtYWNoaW5lICclcycgcGlkICU8UFJJdU1BWD4gKHVzZSAtLWZvcmNlIGlmIG5vdCkiCittc2dzdHIgIiIKKyLlt7Lnu4/mnInkuIDkuKogZ2Mg5q2j6L+Q6KGM5Zyo5py65ZmoICclcycgcGlkICU8UFJJdU1BWD4g77yI5aaC5p6c5LiN5piv77yM5L2/55SoIC0tZm9yY2XvvIkiCisKKyM6IGJ1aWx0aW4vZ2MuYzozNjQKK21zZ2lkICIiCisiVGhlcmUgYXJlIHRvbyBtYW55IHVucmVhY2hhYmxlIGxvb3NlIG9iamVjdHM7IHJ1biAnZ2l0IHBydW5lJyB0byByZW1vdmUgdGhlbS4iCittc2dzdHIgIuacieWkquWkmuS4jeWPr+i+vueahOadvuaVo+Wvueixoe+8jOi/kOihjCAnZ2l0IHBydW5lJyDliKDpmaTlroPku6zjgIIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIzCittc2dpZCAiZ2l0IGdyZXAgWzxvcHRpb25zPl0gWy1lXSA8cGF0dGVybj4gWzxyZXY+Li4uXSBbWy0tXSA8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgZ3JlcCBbPOmAiemhuT5dIFstZV0gPOaooeW8jz4gWzzniYjmnKw+Li4uXSBbWy0tXSA86Lev5b6EPi4uLl0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjIxOAorIywgYy1mb3JtYXQKK21zZ2lkICJncmVwOiBmYWlsZWQgdG8gY3JlYXRlIHRocmVhZDogJXMiCittc2dzdHIgImdyZXDvvJrml6Dms5XliJvlu7rnur/nqIvvvJolcyIKKworIzogYnVpbHRpbi9ncmVwLmM6NDQxIGJ1aWx0aW4vZ3JlcC5jOjQ3NgorIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gcmVhZCB0cmVlICglcykiCittc2dzdHIgIuaXoOazleivu+WPluagke+8iCVz77yJIgorCisjOiBidWlsdGluL2dyZXAuYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGdyZXAgZnJvbSBvYmplY3Qgb2YgdHlwZSAlcyIKK21zZ3N0ciAi5peg5rOV5oqT5Y+W5p2l6Ieq5LqOICVzIOexu+Wei+eahOWvueixoSIKKworIzogYnVpbHRpbi9ncmVwLmM6NTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInN3aXRjaCBgJWMnIGV4cGVjdHMgYSBudW1lcmljYWwgdmFsdWUiCittc2dzdHIgIuW8gOWFsyBgJWMnIOacn+acm+S4gOS4quaVsOWtl+WAvCIKKworIzogYnVpbHRpbi9ncmVwLmM6NTY0CisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuICclcyciCittc2dzdHIgIuS4jeiDveaJk+W8gCAnJXMnIgorCisjOiBidWlsdGluL2dyZXAuYzo2MzgKK21zZ2lkICJzZWFyY2ggaW4gaW5kZXggaW5zdGVhZCBvZiBpbiB0aGUgd29yayB0cmVlIgorbXNnc3RyICLlnKjntKLlvJXljLrmkJzntKLogIzkuI3mmK/lnKjlt6XkvZzljLoiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY0MAorbXNnaWQgImZpbmQgaW4gY29udGVudHMgbm90IG1hbmFnZWQgYnkgZ2l0IgorbXNnc3RyICLlnKjmnKrooqsgZ2l0IOeuoeeQhueahOWGheWuueS4reafpeaJviIKKworIyAg6K+R6ICF77ya5Lit5paH5a2X56ym5Liy5ou85o6l77yM5Y+v5Yig6Zmk5YmN5a+856m65qC8CisjOiBidWlsdGluL2dyZXAuYzo2NDIKK21zZ2lkICJzZWFyY2ggaW4gYm90aCB0cmFja2VkIGFuZCB1bnRyYWNrZWQgZmlsZXMiCittc2dzdHIgIuWcqOi3n+i4quWSjOacqui3n+i4queahOaWh+S7tuS4reaQnOe0oiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQ0Cittc2dpZCAiaWdub3JlIGZpbGVzIHNwZWNpZmllZCB2aWEgJy5naXRpZ25vcmUnIgorbXNnc3RyICLlv73nlaUgJy5naXRpZ25vcmUnIOWMheWQq+eahOaWh+S7tiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQ3Cittc2dpZCAic2hvdyBub24tbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIuaYvuekuuacquWMuemFjeeahOihjCIKKworIzogYnVpbHRpbi9ncmVwLmM6NjQ5Cittc2dpZCAiY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZyIKK21zZ3N0ciAi5LiN5Yy65YiG5aSn5bCP5YaZ5Yy56YWNIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTEKK21zZ2lkICJtYXRjaCBwYXR0ZXJucyBvbmx5IGF0IHdvcmQgYm91bmRhcmllcyIKK21zZ3N0ciAi5Y+q5Zyo5Y2V6K+N6L6555WM5Yy56YWN5qih5byPIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTMKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyBhcyB0ZXh0IgorbXNnc3RyICLmiorkuozov5vliLbmlofku7blvZPlgZrmlofmnKzlpITnkIYiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY1NQorbXNnaWQgImRvbid0IG1hdGNoIHBhdHRlcm5zIGluIGJpbmFyeSBmaWxlcyIKK21zZ3N0ciAi5LiN5Zyo5LqM6L+b5Yi25paH5Lu25Lit5Yy56YWN5qih5byPIgorCisjOiBidWlsdGluL2dyZXAuYzo2NTgKK21zZ2lkICJwcm9jZXNzIGJpbmFyeSBmaWxlcyB3aXRoIHRleHRjb252IGZpbHRlcnMiCittc2dzdHIgIueUqCB0ZXh0Y29udiDov4fmu6TlmajlpITnkIbkuozov5vliLbmlofku7YiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY2MAorbXNnaWQgImRlc2NlbmQgYXQgbW9zdCA8ZGVwdGg+IGxldmVscyIKK21zZ3N0ciAi5pyA5aSa5Lul5oyH5a6a55qE5rex5bqm5ZCR5LiL5a+75om+IgorCisjOiBidWlsdGluL2dyZXAuYzo2NjQKK21zZ2lkICJ1c2UgZXh0ZW5kZWQgUE9TSVggcmVndWxhciBleHByZXNzaW9ucyIKK21zZ3N0ciAi5L2/55So5omp5bGV55qEIFBPU0lYIOato+WImeihqOi+vuW8jyIKKworIzogYnVpbHRpbi9ncmVwLmM6NjY3Cittc2dpZCAidXNlIGJhc2ljIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKGRlZmF1bHQpIgorbXNnc3RyICLkvb/nlKjln7rmnKznmoQgUE9TSVgg5q2j5YiZ6KGo6L6+5byP77yI6buY6K6k77yJIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzAKK21zZ2lkICJpbnRlcnByZXQgcGF0dGVybnMgYXMgZml4ZWQgc3RyaW5ncyIKK21zZ3N0ciAi5oqK5qih5byP6Kej5p6Q5Li65Zu65a6a55qE5a2X56ym5LiyIgorCisjOiBidWlsdGluL2dyZXAuYzo2NzMKK21zZ2lkICJ1c2UgUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMiCittc2dzdHIgIuS9v+eUqCBQZXJsIOWFvOWuueeahOato+WImeihqOi+vuW8jyIKKworIzogYnVpbHRpbi9ncmVwLmM6Njc2Cittc2dpZCAic2hvdyBsaW5lIG51bWJlcnMiCittc2dzdHIgIuaYvuekuuihjOWPtyIKKworIzogYnVpbHRpbi9ncmVwLmM6Njc3Cittc2dpZCAiZG9uJ3Qgc2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIuS4jeaYvuekuuaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6Njc4Cittc2dpZCAic2hvdyBmaWxlbmFtZXMiCittc2dzdHIgIuaYvuekuuaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6NjgwCittc2dpZCAic2hvdyBmaWxlbmFtZXMgcmVsYXRpdmUgdG8gdG9wIGRpcmVjdG9yeSIKK21zZ3N0ciAi5pi+56S655u45a+55LqO6aG257qn55uu5b2V55qE5paH5Lu25ZCNIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODIKK21zZ2lkICJzaG93IG9ubHkgZmlsZW5hbWVzIGluc3RlYWQgb2YgbWF0Y2hpbmcgbGluZXMiCittc2dzdHIgIuWPquaYvuekuuaWh+S7tuWQjeiAjOS4jeaYvuekuuWMuemFjeeahOihjCIKKworIzogYnVpbHRpbi9ncmVwLmM6Njg0Cittc2dpZCAic3lub255bSBmb3IgLS1maWxlcy13aXRoLW1hdGNoZXMiCittc2dzdHIgIuWSjCAtLWZpbGVzLXdpdGgtbWF0Y2hlcyDlkIzkuYkiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY4NworbXNnaWQgInNob3cgb25seSB0aGUgbmFtZXMgb2YgZmlsZXMgd2l0aG91dCBtYXRjaCIKK21zZ3N0ciAi5Y+q5pi+56S65pyq5Yy56YWN55qE5paH5Lu25ZCNIgorCisjOiBidWlsdGluL2dyZXAuYzo2ODkKK21zZ2lkICJwcmludCBOVUwgYWZ0ZXIgZmlsZW5hbWVzIgorbXNnc3RyICLlnKjmlofku7blkI3lkI7ovpPlh7ogTlVMIOWtl+espiIKKworIzogYnVpbHRpbi9ncmVwLmM6NjkxCittc2dpZCAic2hvdyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaW5zdGVhZCBvZiBtYXRjaGluZyBsaW5lcyIKK21zZ3N0ciAi5pi+56S65oC75Yy56YWN6KGM5pWw77yM6ICM5LiN5pi+56S65Yy56YWN55qE6KGMIgorCisjOiBidWlsdGluL2dyZXAuYzo2OTIKK21zZ2lkICJoaWdobGlnaHQgbWF0Y2hlcyIKK21zZ3N0ciAi6auY5Lqu5pi+56S65Yy56YWN6aG5IgorCisjOiBidWlsdGluL2dyZXAuYzo2OTQKK21zZ2lkICJwcmludCBlbXB0eSBsaW5lIGJldHdlZW4gbWF0Y2hlcyBmcm9tIGRpZmZlcmVudCBmaWxlcyIKK21zZ3N0ciAi5Zyo5LiN5ZCM5paH5Lu255qE5Yy56YWN6aG55LmL6Ze05omT5Y2w56m66KGMIgorCisjOiBidWlsdGluL2dyZXAuYzo2OTYKK21zZ2lkICJzaG93IGZpbGVuYW1lIG9ubHkgb25jZSBhYm92ZSBtYXRjaGVzIGZyb20gc2FtZSBmaWxlIgorbXNnc3RyICLlj6rlnKjlkIzkuIDmlofku7bnmoTljLnphY3pobnnmoTkuIrpnaLmmL7npLrkuIDmrKHmlofku7blkI0iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjY5OQorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYmVmb3JlIGFuZCBhZnRlciBtYXRjaGVzIgorbXNnc3RyICLmmL7npLrljLnphY3pobnliY3lkI7nmoQgPG4+IOihjOS4iuS4i+aWhyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzAyCittc2dpZCAic2hvdyA8bj4gY29udGV4dCBsaW5lcyBiZWZvcmUgbWF0Y2hlcyIKK21zZ3N0ciAi5pi+56S65Yy56YWN6aG55YmNIDxuPiDooYzkuIrkuIvmlociCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwNAorbXNnaWQgInNob3cgPG4+IGNvbnRleHQgbGluZXMgYWZ0ZXIgbWF0Y2hlcyIKK21zZ3N0ciAi5pi+56S65Yy56YWN6aG55ZCOIDxuPiDooYzkuIrkuIvmlociCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwNQorbXNnaWQgInNob3J0Y3V0IGZvciAtQyBOVU0iCittc2dzdHIgIuW/q+aNt+mUriAtQyDmlbDlrZciCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcwOAorbXNnaWQgInNob3cgYSBsaW5lIHdpdGggdGhlIGZ1bmN0aW9uIG5hbWUgYmVmb3JlIG1hdGNoZXMiCittc2dzdHIgIuWcqOWMuemFjeeahOWJjemdouaYvuekuuS4gOihjOWHveaVsOWQjSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzEwCittc2dpZCAic2hvdyB0aGUgc3Vycm91bmRpbmcgZnVuY3Rpb24iCittc2dzdHIgIuaYvuekuuaJgOWcqOWHveaVsOeahOWJjeWQjuWGheWuuSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzEzCittc2dpZCAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiCittc2dzdHIgIuS7juaWh+S7tuivu+WPluaooeW8jyIKKworIzogYnVpbHRpbi9ncmVwLmM6NzE1Cittc2dpZCAibWF0Y2ggPHBhdHRlcm4+IgorbXNnc3RyICLljLnphY0gPOaooeW8jz4iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcxNworbXNnaWQgImNvbWJpbmUgcGF0dGVybnMgc3BlY2lmaWVkIHdpdGggLWUiCittc2dzdHIgIue7hOWQiOeUqCAtZSDlj4LmlbDorr7lrprnmoTmqKHlvI8iCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjcyOQorbXNnaWQgImluZGljYXRlIGhpdCB3aXRoIGV4aXQgc3RhdHVzIHdpdGhvdXQgb3V0cHV0IgorbXNnc3RyICLkuI3ovpPlh7rvvIzogIznlKjpgIDlh7rnoIHmoIfor4blkb3kuK3nirbmgIEiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjczMQorbXNnaWQgInNob3cgb25seSBtYXRjaGVzIGZyb20gZmlsZXMgdGhhdCBtYXRjaCBhbGwgcGF0dGVybnMiCittc2dzdHIgIuWPquaYvuekuuWMuemFjeaJgOacieaooeW8j+eahOaWh+S7tuS4reeahOWMuemFjSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzMzCittc2dpZCAic2hvdyBwYXJzZSB0cmVlIGZvciBncmVwIGV4cHJlc3Npb24iCittc2dzdHIgIuaYvuekuiBncmVwIOihqOi+vuW8j+eahOino+aekOagkSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM3Cittc2dpZCAicGFnZXIiCittc2dzdHIgIuWIhumhtSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzM3Cittc2dpZCAic2hvdyBtYXRjaGluZyBmaWxlcyBpbiB0aGUgcGFnZXIiCittc2dzdHIgIuWIhumhteaYvuekuuWMuemFjeeahOaWh+S7tiIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQwCittc2dpZCAiYWxsb3cgY2FsbGluZyBvZiBncmVwKDEpIChpZ25vcmVkIGJ5IHRoaXMgYnVpbGQpIgorbXNnc3RyICLlhYHorrjosIPnlKggZ3JlcCgxKe+8iOacrOasoeaehOW7uuW/veeVpe+8iSIKKworIzogYnVpbHRpbi9ncmVwLmM6NzQxIGJ1aWx0aW4vc2hvdy1yZWYuYzoxODkKK21zZ2lkICJzaG93IHVzYWdlIgorbXNnc3RyICLmmL7npLrnlKjms5UiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjgwOAorbXNnaWQgIm5vIHBhdHRlcm4gZ2l2ZW4uIgorbXNnc3RyICLmnKrmj5DkvpvmqKHlvI/ljLnphY3jgIIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjg2NgorbXNnaWQgIi0tb3Blbi1maWxlcy1pbi1wYWdlciBvbmx5IHdvcmtzIG9uIHRoZSB3b3JrdHJlZSIKK21zZ3N0ciAiLS1vcGVuLWZpbGVzLWluLXBhZ2VyIOS7heeUqOS6juW3peS9nOWMuiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODkyCittc2dpZCAiLS1jYWNoZWQgb3IgLS11bnRyYWNrZWQgY2Fubm90IGJlIHVzZWQgd2l0aCAtLW5vLWluZGV4LiIKK21zZ3N0ciAiLS1jYWNoZWQg5oiWIC0tdW50cmFja2VkIOS4jeiDveS4jiAtLW5vLWluZGV4IOWQjOaXtuS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9ncmVwLmM6ODk3Cittc2dpZCAiLS1uby1pbmRleCBvciAtLXVudHJhY2tlZCBjYW5ub3QgYmUgdXNlZCB3aXRoIHJldnMuIgorbXNnc3RyICItLW5vLWluZGV4IOaIliAtLXVudHJhY2tlZCDkuI3og73lkozniYjmnKzlkIzml7bkvb/nlKjjgIIiCisKKyM6IGJ1aWx0aW4vZ3JlcC5jOjkwMAorbXNnaWQgIi0tW25vLV1leGNsdWRlLXN0YW5kYXJkIGNhbm5vdCBiZSB1c2VkIGZvciB0cmFja2VkIGNvbnRlbnRzLiIKK21zZ3N0ciAiLS1bbm8tXWV4Y2x1ZGUtc3RhbmRhcmQg5LiN6IO955So5LqO5bey6Lef6Liq5YaF5a6544CCIgorCisjOiBidWlsdGluL2dyZXAuYzo5MDgKK21zZ2lkICJib3RoIC0tY2FjaGVkIGFuZCB0cmVlcyBhcmUgZ2l2ZW4uIgorbXNnc3RyICLlkIzml7bnu5nlh7rkuoYgLS1jYWNoZWQg5ZKM5qCR5a+56LGh44CCIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6ODAKK21zZ2lkICIiCisiZ2l0IGhhc2gtb2JqZWN0IFstdCA8dHlwZT5dIFstd10gWy0tcGF0aD08ZmlsZT4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgIiIKKyJnaXQgaGFzaC1vYmplY3QgWy10IDznsbvlnos+XSBbLXddIFstLXBhdGg9POaWh+S7tj4gfCAtLW5vLWZpbHRlcnNdIFstLXN0ZGluXSAiCisiWy0tXSA85paH5Lu2Pi4uLiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjgxCittc2dpZCAiZ2l0IGhhc2gtb2JqZWN0ICAtLXN0ZGluLXBhdGhzIDwgPGxpc3Qtb2YtcGF0aHM+IgorbXNnc3RyICJnaXQgaGFzaC1vYmplY3QgIC0tc3RkaW4tcGF0aHMgPCA86Lev5b6E5YiX6KGoPiIKKworIzogYnVpbHRpbi9oYXNoLW9iamVjdC5jOjkyIGJ1aWx0aW4vdGFnLmM6NjE0Cittc2dpZCAidHlwZSIKK21zZ3N0ciAi57G75Z6LIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTIKK21zZ2lkICJvYmplY3QgdHlwZSIKK21zZ3N0ciAi5a+56LGh57G75Z6LIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTMKK21zZ2lkICJ3cml0ZSB0aGUgb2JqZWN0IGludG8gdGhlIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi5bCG5a+56LGh5YaZ5YWl5a+56LGh5pWw5o2u5bqTIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTUKK21zZ2lkICJyZWFkIHRoZSBvYmplY3QgZnJvbSBzdGRpbiIKK21zZ3N0ciAi5LuO5qCH5YeG6L6T5YWl6K+75Y+W5a+56LGhIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTcKK21zZ2lkICJzdG9yZSBmaWxlIGFzIGlzIHdpdGhvdXQgZmlsdGVycyIKK21zZ3N0ciAi5Y6f5qC35a2Y5YKo5paH5Lu25LiN5L2/55So6L+H5ruk5ZmoIgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTgKK21zZ2lkICIiCisianVzdCBoYXNoIGFueSByYW5kb20gZ2FyYmFnZSB0byBjcmVhdGUgY29ycnVwdCBvYmplY3RzIGZvciBkZWJ1Z2dpbmcgR2l0IgorbXNnc3RyICLlhYHorrjlr7nku7vmhI/pmo/mnLrlnoPlnL7mlbDmja7lgZrmlaPliJfmnaXliJvlu7rmjZ/lnY/nmoTlr7nosaHku6Xkvr/osIPor5UgR2l0IgorCisjOiBidWlsdGluL2hhc2gtb2JqZWN0LmM6OTkKK21zZ2lkICJwcm9jZXNzIGZpbGUgYXMgaXQgd2VyZSBmcm9tIHRoaXMgcGF0aCIKK21zZ3N0ciAi5aSE55CG5paH5Lu25bm25YGH6K6+5YW25p2l6Ieq5LqO5q2k6Lev5b6EIgorCisjOiBidWlsdGluL2hlbHAuYzo0MQorbXNnaWQgInByaW50IGFsbCBhdmFpbGFibGUgY29tbWFuZHMiCittc2dzdHIgIuaJk+WNsOaJgOacieWPr+eUqOeahOWRveS7pCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDIKK21zZ2lkICJwcmludCBsaXN0IG9mIHVzZWZ1bCBndWlkZXMiCittc2dzdHIgIuaYvuekuuacieeUqOeahOaMh+WNl+WIl+ihqCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMKK21zZ2lkICJzaG93IG1hbiBwYWdlIgorbXNnc3RyICLmmL7npLogbWFuIOaJi+WGjCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDQKK21zZ2lkICJzaG93IG1hbnVhbCBpbiB3ZWIgYnJvd3NlciIKK21zZ3N0ciAi5ZyoIHdlYiDmtY/op4jlmajkuK3mmL7npLrmiYvlhowiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2Cittc2dpZCAic2hvdyBpbmZvIHBhZ2UiCittc2dzdHIgIuaYvuekuiBpbmZvIOaJi+WGjCIKKworIzogYnVpbHRpbi9oZWxwLmM6NTIKK21zZ2lkICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs8Y29tbWFuZD5dIgorbXNnc3RyICJnaXQgaGVscCBbLS1hbGxdIFstLWd1aWRlc10gWy0tbWFuIHwgLS13ZWIgfCAtLWluZm9dIFs85ZG95LukPl0iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjY0CisjLCBjLWZvcm1hdAorbXNnaWQgInVucmVjb2duaXplZCBoZWxwIGZvcm1hdCAnJXMnIgorbXNnc3RyICLmnKrog73or4bliKvnmoTluK7liqnmoLzlvI8gJyVzJyIKKworIzogYnVpbHRpbi9oZWxwLmM6OTEKK21zZ2lkICJGYWlsZWQgdG8gc3RhcnQgZW1hY3NjbGllbnQuIgorbXNnc3RyICLml6Dms5XlkK/liqggZW1hY3NjbGllbnTjgIIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEwNAorbXNnaWQgIkZhaWxlZCB0byBwYXJzZSBlbWFjc2NsaWVudCB2ZXJzaW9uLiIKK21zZ3N0ciAi5peg5rOV6Kej5p6QIGVtYWNzY2xpZW50IOeJiOacrOOAgiIKKworIzogYnVpbHRpbi9oZWxwLmM6MTEyCisjLCBjLWZvcm1hdAorbXNnaWQgImVtYWNzY2xpZW50IHZlcnNpb24gJyVkJyB0b28gb2xkICg8IDIyKS4iCittc2dzdHIgImVtYWNzY2xpZW50IOeJiOacrCAnJWQnIOWkquiAge+8iDwgMjLvvInjgIIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjEzMCBidWlsdGluL2hlbHAuYzoxNTggYnVpbHRpbi9oZWxwLmM6MTY3IGJ1aWx0aW4vaGVscC5jOjE3NQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gZXhlYyAnJXMnOiAlcyIKK21zZ3N0ciAi5peg5rOV5omn6KGMICclcyfvvJolcyIKKworIzogYnVpbHRpbi9oZWxwLmM6MjE1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBwYXRoIGZvciB1bnN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5jbWQnIGluc3RlYWQuIgorbXNnc3RyICIiCisiJyVzJ++8muS4jeaUr+aMgeeahCBtYW4g5omL5YaM5p+l55yL5Zmo55qE6Lev5b6E44CCXG4iCisi6K+35L2/55SoICdtYW4uPOW3peWFtz4uY21kJ+OAgiIKKworIzogYnVpbHRpbi9oZWxwLmM6MjI3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyInJXMnOiBjbWQgZm9yIHN1cHBvcnRlZCBtYW4gdmlld2VyLlxuIgorIlBsZWFzZSBjb25zaWRlciB1c2luZyAnbWFuLjx0b29sPi5wYXRoJyBpbnN0ZWFkLiIKK21zZ3N0ciAiIgorIiclcyc6IOaUr+aMgeeahCBtYW4g5omL5YaM5p+l55yL5Zmo5ZG95Luk44CCXG4iCisi6K+35L2/55SoICdtYW4uPOW3peWFtz4ucGF0aCfjgIIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM1NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnOiB1bmtub3duIG1hbiB2aWV3ZXIuIgorbXNnc3RyICInJXMn77ya5pyq55+l55qEIG1hbiDmn6XnnIvlmajjgIIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3MQorbXNnaWQgIm5vIG1hbiB2aWV3ZXIgaGFuZGxlZCB0aGUgcmVxdWVzdCIKK21zZ3N0ciAi5rKh5pyJIG1hbiDmn6XnnIvlmajlpITnkIbmraTor7fmsYIiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjM3OQorbXNnaWQgIm5vIGluZm8gdmlld2VyIGhhbmRsZWQgdGhlIHJlcXVlc3QiCittc2dzdHIgIuayoeaciSBpbmZvIOafpeeci+WZqOWkhOeQhuatpOivt+axgiIKKworIzogYnVpbHRpbi9oZWxwLmM6NDI4Cittc2dpZCAiRGVmaW5pbmcgYXR0cmlidXRlcyBwZXIgcGF0aCIKK21zZ3N0ciAi5a6a5LmJ6Lev5b6E55qE5bGe5oCnIgorCisjOiBidWlsdGluL2hlbHAuYzo0MjkKK21zZ2lkICJFdmVyeWRheSBHaXQgV2l0aCAyMCBDb21tYW5kcyBPciBTbyIKK21zZ3N0ciAi5q+P5LiA5aSpIEdpdCDluLjnlKjnmoTnuqYgMjAg5p2h5ZG95LukIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzAKK21zZ2lkICJBIEdpdCBnbG9zc2FyeSIKK21zZ3N0ciAiR2l0IOivjeaxh+ihqCIKKworIzogYnVpbHRpbi9oZWxwLmM6NDMxCittc2dpZCAiU3BlY2lmaWVzIGludGVudGlvbmFsbHkgdW50cmFja2VkIGZpbGVzIHRvIGlnbm9yZSIKK21zZ3N0ciAi5b+955Wl5oyH5a6a55qE5pyq6Lef6Liq5paH5Lu2IgorCisjOiBidWlsdGluL2hlbHAuYzo0MzIKK21zZ2lkICJEZWZpbmluZyBzdWJtb2R1bGUgcHJvcGVydGllcyIKK21zZ3N0ciAi5a6a5LmJ5a2Q5qih57uE5bGe5oCnIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzMKK21zZ2lkICJTcGVjaWZ5aW5nIHJldmlzaW9ucyBhbmQgcmFuZ2VzIGZvciBHaXQiCittc2dzdHIgIuaMh+WumiBHaXQg55qE54mI5pys5ZKM54mI5pys6IyD5Zu0IgorCisjOiBidWlsdGluL2hlbHAuYzo0MzQKK21zZ2lkICJBIHR1dG9yaWFsIGludHJvZHVjdGlvbiB0byBHaXQgKGZvciB2ZXJzaW9uIDEuNS4xIG9yIG5ld2VyKSIKK21zZ3N0ciAi5LiA5LiqIEdpdCDmlZnnqIvvvIjpkojlr7kgMS41LjEg5oiW5pu05paw54mI5pys77yJIgorCisjOiBidWlsdGluL2hlbHAuYzo0MzUKK21zZ2lkICJBbiBvdmVydmlldyBvZiByZWNvbW1lbmRlZCB3b3JrZmxvd3Mgd2l0aCBHaXQiCittc2dzdHIgIkdpdCDmjqjojZDnmoTlt6XkvZzmtYHmpoLop4giCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ0NworbXNnaWQgIlRoZSBjb21tb24gR2l0IGd1aWRlcyBhcmU6XG4iCittc2dzdHIgIuacgOW4uOeUqOeahCBHaXQg5ZCR5a+85pyJ77yaXG4iCisKKyM6IGJ1aWx0aW4vaGVscC5jOjQ2OCBidWlsdGluL2hlbHAuYzo0ODUKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2U6ICVzJXMiCittc2dzdHIgIueUqOazle+8miVzJXMiCisKKyM6IGJ1aWx0aW4vaGVscC5jOjUwMQorIywgYy1mb3JtYXQKK21zZ2lkICJgZ2l0ICVzJyBpcyBhbGlhc2VkIHRvIGAlcyciCittc2dzdHIgImBnaXQgJXMnIOaYryBgJXMnIOeahOWIq+WQjSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTUyCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBvcGVuICVzIgorbXNnc3RyICLkuI3og73miZPlvIAgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjIwMgorIywgYy1mb3JtYXQKK21zZ2lkICJvYmplY3QgdHlwZSBtaXNtYXRjaCBhdCAlcyIKK21zZ3N0ciAiJXMg55qE5a+56LGh57G75Z6L5LiN5Yy56YWNIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGlkIG5vdCByZWNlaXZlIGV4cGVjdGVkIG9iamVjdCAlcyIKK21zZ3N0ciAi5pyq6IO96I635Y+W5pyf5pyb55qE5a+56LGhICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyMjUKKyMsIGMtZm9ybWF0Cittc2dpZCAib2JqZWN0ICVzOiBleHBlY3RlZCB0eXBlICVzLCBmb3VuZCAlcyIKK21zZ3N0ciAi5a+56LGhICVz77ya5pyf5b6F57G75Z6LICVz77yM5Y205pivICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGZpbGwgJWQgYnl0ZSIKK21zZ2lkX3BsdXJhbCAiY2Fubm90IGZpbGwgJWQgYnl0ZXMiCittc2dzdHJbMF0gIuaXoOazleWhq+WFhSAlZCDlrZfoioIiCittc2dzdHJbMV0gIuaXoOazleWhq+WFhSAlZCDlrZfoioIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI3NworbXNnaWQgImVhcmx5IEVPRiIKK21zZ3N0ciAi6L+H5pep55qE5paH5Lu257uT5p2f56ym77yIRU9G77yJIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoyNzgKK21zZ2lkICJyZWFkIGVycm9yIG9uIGlucHV0IgorbXNnc3RyICLovpPlhaXkuIrnmoTor7vplJnor68iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5MAorbXNnaWQgInVzZWQgbW9yZSBieXRlcyB0aGFuIHdlcmUgYXZhaWxhYmxlIgorbXNnc3RyICLnlKjmjonkuobotoXov4flj6/nlKjnmoTlrZfoioIiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjI5NworbXNnaWQgInBhY2sgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiCittc2dzdHIgIuWMheWkquWkp+i2hei/h+S6huW9k+WJjSBvZmZfdCDnmoTlrprkuYkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMxMworIywgYy1mb3JtYXQKK21zZ2lkICJ1bmFibGUgdG8gY3JlYXRlICclcyciCittc2dzdHIgIuS4jeiDveWIm+W7uiAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozMTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IG9wZW4gcGFja2ZpbGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV5omT5byA5YyF5paH5Lu2ICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMzMgorbXNnaWQgInBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIgorbXNnc3RyICLljIXnrb7lkI3kuI3ljLnphY0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjMzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrIHZlcnNpb24gJTxQUkl1MzI+IHVuc3VwcG9ydGVkIgorbXNnc3RyICLkuI3mlK/mjIHljIXniYjmnKwgJTxQUkl1MzI+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzozNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAicGFjayBoYXMgYmFkIG9iamVjdCBhdCBvZmZzZXQgJWx1OiAlcyIKK21zZ3N0ciAi5YyF5Lit5pyJ6ZSZ6K+v55qE5a+56LGh5L2N5LqOICVsde+8miVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo0NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW5mbGF0ZSByZXR1cm5lZCAlZCIKK21zZ3N0ciAi6Kej5Y6L57yp6L+U5ZueICVkIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MjIKK21zZ2lkICJvZmZzZXQgdmFsdWUgb3ZlcmZsb3cgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0IgorbXNnc3RyICLlgY/np7vlgLzopobnm5bkuoYgZGVsdGEg5Z+65YeG5a+56LGhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1MzAKK21zZ2lkICJkZWx0YSBiYXNlIG9mZnNldCBpcyBvdXQgb2YgYm91bmQiCittc2dzdHIgImRlbHRhIOWfuuWHhuWBj+enu+i2iueVjCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTM4CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gb2JqZWN0IHR5cGUgJWQiCittc2dzdHIgIuacquefpeWvueixoeexu+WeiyAlZCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6NTY5Cittc2dpZCAiY2Fubm90IHByZWFkIHBhY2sgZmlsZSIKK21zZ3N0ciAi5peg5rOV6K+75Y+W5YyF5paH5Lu2IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJlbWF0dXJlIGVuZCBvZiBwYWNrIGZpbGUsICVsdSBieXRlIG1pc3NpbmciCittc2dpZF9wbHVyYWwgInByZW1hdHVyZSBlbmQgb2YgcGFjayBmaWxlLCAlbHUgYnl0ZXMgbWlzc2luZyIKK21zZ3N0clswXSAi5YyF5paH5Lu26L+H5pep57uT5p2f77yM57y65bCRICVsdSDlrZfoioIiCittc2dzdHJbMV0gIuWMheaWh+S7tui/h+aXqee7k+adn++8jOe8uuWwkSAlbHUg5a2X6IqCIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo1OTcKK21zZ2lkICJzZXJpb3VzIGluZmxhdGUgaW5jb25zaXN0ZW5jeSIKK21zZ3N0ciAi6Kej5Y6L57yp5Lil6YeN55qE5LiN5LiA6Ie0IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo3NDMgYnVpbHRpbi9pbmRleC1wYWNrLmM6NzQ5IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc3MgorIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODA2IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjgxNQorIywgYy1mb3JtYXQKK21zZ2lkICJTSEExIENPTExJU0lPTiBGT1VORCBXSVRIICVzICEiCittc2dzdHIgIuWPkeeOsCAlcyDlh7rnjrAgU0hBMSDlhrLnqoHvvIEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjc0NiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjE2MgorIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNTQKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHJlYWQgJXMiCittc2dzdHIgIuS4jeiDveivuyAlcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODEyCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkIGV4aXN0aW5nIG9iamVjdCAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W546w5a2Y5a+56LGhICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBibG9iIG9iamVjdCAlcyIKK21zZ3N0ciAi5peg5pWI55qE5pWw5o2u5a+56LGhICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDAKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCAlcyIKK21zZ3N0ciAi5peg5pWI55qEICVzIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzo4NDMKK21zZ2lkICJFcnJvciBpbiBvYmplY3QiCittc2dzdHIgIuWvueixoeS4reWHuumUmSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6ODQ1CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vdCBhbGwgY2hpbGQgb2JqZWN0cyBvZiAlcyBhcmUgcmVhY2hhYmxlIgorbXNnc3RyICIlcyDnmoTmiYDmnInlrZDlr7nosaHlubbpnZ7pg73lj6/ovr4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjkxNyBidWlsdGluL2luZGV4LXBhY2suYzo5NDgKK21zZ2lkICJmYWlsZWQgdG8gYXBwbHkgZGVsdGEiCittc2dzdHIgIuaXoOazleW6lOeUqCBkZWx0YSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTExOAorbXNnaWQgIlJlY2VpdmluZyBvYmplY3RzIgorbXNnc3RyICLmjqXmlLblr7nosaHkuK0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExMTgKK21zZ2lkICJJbmRleGluZyBvYmplY3RzIgorbXNnc3RyICLntKLlvJXlr7nosaHkuK0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTAKK21zZ2lkICJwYWNrIGlzIGNvcnJ1cHRlZCAoU0hBMSBtaXNtYXRjaCkiCittc2dzdHIgIuWMheWGsueqge+8iFNIQTEg5LiN5Yy56YWN77yJIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMTU1Cittc2dpZCAiY2Fubm90IGZzdGF0IHBhY2tmaWxlIgorbXNnc3RyICLkuI3og73mnprkuL7ljIXmlofku7bnirbmgIEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjExNTgKK21zZ2lkICJwYWNrIGhhcyBqdW5rIGF0IHRoZSBlbmQiCittc2dzdHIgIuWMheeahOe7k+WwvuacieWeg+WcvuaVsOaNriIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE2OQorbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkgaW4gcGFyc2VfcGFja19vYmplY3RzKCkiCittc2dzdHIgInBhcnNlX3BhY2tfb2JqZWN0cygpIOS4remBh+WIsOS4jeWPr+eQhuWWu+eahOmXrumimCIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTE5NAorbXNnaWQgIlJlc29sdmluZyBkZWx0YXMiCittc2dzdHIgIuWkhOeQhiBkZWx0YSDkuK0iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjEyMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIGNyZWF0ZSB0aHJlYWQ6ICVzIgorbXNnc3RyICLkuI3og73liJvlu7rnur/nqIvvvJolcyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI0NworbXNnaWQgImNvbmZ1c2lvbiBiZXlvbmQgaW5zYW5pdHkiCittc2dzdHIgIuS4jeWPr+eQhuWWuyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTI1MworIywgYy1mb3JtYXQKK21zZ2lkICJjb21wbGV0ZWQgd2l0aCAlZCBsb2NhbCBvYmplY3RzIgorbXNnc3RyICLlrozmiJAgJWQg5Liq5pys5Zyw5a+56LGhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVuZXhwZWN0ZWQgdGFpbCBjaGVja3N1bSBmb3IgJXMgKGRpc2sgY29ycnVwdGlvbj8pIgorbXNnc3RyICLlr7kgJXMg55qE5bC+6YOo5qCh6aqM5Ye6546w5oSP5aSW77yI56OB55uY5o2f5Z2P77yf77yJIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjY3CisjLCBjLWZvcm1hdAorbXNnaWQgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGEiCittc2dpZF9wbHVyYWwgInBhY2sgaGFzICVkIHVucmVzb2x2ZWQgZGVsdGFzIgorbXNnc3RyWzBdICLljIXmnIkgJWQg5Liq5pyq6Kej5Yaz55qEIGRlbHRhIgorbXNnc3RyWzFdICLljIXmnIkgJWQg5Liq5pyq6Kej5Yaz55qEIGRlbHRhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxMjkxCisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBkZWZsYXRlIGFwcGVuZGVkIG9iamVjdCAoJWQpIgorbXNnc3RyICLkuI3og73ljovnvKnpmYTliqDlr7nosaHvvIglZO+8iSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM2NworIywgYy1mb3JtYXQKK21zZ2lkICJsb2NhbCBvYmplY3QgJXMgaXMgY29ycnVwdCIKK21zZ3N0ciAi5pys5Zyw5a+56LGhICVzIOW3suaNn+WdjyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTM5MQorbXNnaWQgImVycm9yIHdoaWxlIGNsb3NpbmcgcGFjayBmaWxlIgorbXNnc3RyICLlhbPpl63ljIXmlofku7bml7blh7rplJkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHdyaXRlIGtlZXAgZmlsZSAnJXMnIgorbXNnc3RyICLml6Dms5Xlhpnkv53nlZnmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTQxMgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgY2xvc2Ugd3JpdHRlbiBrZWVwIGZpbGUgJyVzJyIKK21zZ3N0ciAi5peg5rOV5YWz6Zet5L+d55WZ5paH5Lu2ICclcyciCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MjUKK21zZ2lkICJjYW5ub3Qgc3RvcmUgcGFjayBmaWxlIgorbXNnc3RyICLml6Dms5XlrZjlgqjljIXmlofku7YiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0MzYKK21zZ2lkICJjYW5ub3Qgc3RvcmUgaW5kZXggZmlsZSIKK21zZ3N0ciAi5peg5rOV5a2Y5YKo57Si5byV5paH5Lu2IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNDY5CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCittc2dzdHIgIuWdj+eahCBwYWNrLmluZGV4dmVyc2lvbj0lPFBSSXUzMj4iCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBudW1iZXIgb2YgdGhyZWFkcyBzcGVjaWZpZWQgKCVkKSIKK21zZ3N0ciAi5oyH5a6a55qE57q/56iL5pWw5peg5pWI77yIJWTvvIkiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE0NzkgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY2MworIywgYy1mb3JtYXQKK21zZ2lkICJubyB0aHJlYWRzIHN1cHBvcnQsIGlnbm9yaW5nICVzIgorbXNnc3RyICLmsqHmnInnur/nqIvmlK/mjIHvvIzlv73nlaUgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IG9wZW4gZXhpc3RpbmcgcGFjayBmaWxlICclcyciCittc2dzdHIgIuaXoOazleaJk+W8gOeOsOWtmOWMheaWh+S7tiAnJXMnIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNTM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIGV4aXN0aW5nIHBhY2sgaWR4IGZpbGUgZm9yICclcyciCittc2dzdHIgIuaXoOazleS4uiAlcyDmiZPlvIDljIXntKLlvJXmlofku7YiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAibm9uIGRlbHRhOiAlZCBvYmplY3QiCittc2dpZF9wbHVyYWwgIm5vbiBkZWx0YTogJWQgb2JqZWN0cyIKK21zZ3N0clswXSAi6Z2eIGRlbHRh77yaJWQg5Liq5a+56LGhIgorbXNnc3RyWzFdICLpnZ4gZGVsdGHvvJolZCDkuKrlr7nosaEiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE1OTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2hhaW4gbGVuZ3RoID0gJWQ6ICVsdSBvYmplY3QiCittc2dpZF9wbHVyYWwgImNoYWluIGxlbmd0aCA9ICVkOiAlbHUgb2JqZWN0cyIKK21zZ3N0clswXSAi6ZO+6ZW/ID0gJWQ6ICVsdSDlr7nosaEiCittc2dzdHJbMV0gIumTvumVvyA9ICVkOiAlbHUg5a+56LGhIgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjIzCittc2dpZCAiQ2Fubm90IGNvbWUgYmFjayB0byBjd2QiCittc2dzdHIgIuaXoOazlei/lOWbnuW9k+WJjeW3peS9nOebruW9lSIKKworIzogYnVpbHRpbi9pbmRleC1wYWNrLmM6MTY3NSBidWlsdGluL2luZGV4LXBhY2suYzoxNjc4CisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNjkwIGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE2OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkICVzIgorbXNnc3RyICLplJnor6/pgInpobkgJXMiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MDgKK21zZ2lkICItLWZpeC10aGluIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgLS1zdGRpbiIKK21zZ3N0ciAiLS1maXgtdGhpbiDkuI3og73lkowgLS1zdGRpbiDlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vaW5kZXgtcGFjay5jOjE3MTIgYnVpbHRpbi9pbmRleC1wYWNrLmM6MTcyMQorIywgYy1mb3JtYXQKK21zZ2lkICJwYWNrZmlsZSBuYW1lICclcycgZG9lcyBub3QgZW5kIHdpdGggJy5wYWNrJyIKK21zZ3N0ciAi5YyF5paH5Lu25ZCNICclcycg5rKh5pyJ5LulICcucGFjaycg57uT5bC+IgorCisjOiBidWlsdGluL2luZGV4LXBhY2suYzoxNzI5Cittc2dpZCAiLS12ZXJpZnkgd2l0aCBubyBwYWNrZmlsZSBuYW1lIGdpdmVuIgorbXNnc3RyICItLXZlcmlmeSDmsqHmnInmj5DkvpvljIXmlofku7blkI3lj4LmlbAiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBtYWtlICVzIHdyaXRhYmxlIGJ5IGdyb3VwIgorbXNnc3RyICLkuI3og73orr7nva4gJXMg5Li657uE5Y+v5YaZIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIG5hbWUgJXMiCittc2dzdHIgIuWkqumVv+eahOaooeeJiOWQjSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0YXQgJyVzJyIKK21zZ3N0ciAi5LiN6IO95p6a5Li+ICclcycg54q25oCBIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3Qgc3RhdCB0ZW1wbGF0ZSAnJXMnIgorbXNnc3RyICLkuI3og73mnprkuL7mqKHniYggJyVzJyDnirbmgIEiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBvcGVuZGlyICclcyciCittc2dzdHIgIuS4jeiDveaJk+W8gOebruW9lSAnJXMnIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZGxpbmsgJyVzJyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W6ZO+5o6lICclcyciCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEwMAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHN5bWxpbmsgJXMiCittc2dzdHIgIuWkqumVv+eahOespuWPt+mTvuaOpSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTAzCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBzeW1saW5rICclcycgJyVzJyIKK21zZ3N0ciAi5LiN6IO96IeqICclcycg5YiwICclcycg5Yib5bu656ym5Y+36ZO+5o6lIgorCisjOiBidWlsdGluL2luaXQtZGIuYzoxMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY2Fubm90IGNvcHkgJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73mi7fotJ0gJyVzJyDoh7MgJyVzJyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgImlnbm9yaW5nIHRlbXBsYXRlICVzIgorbXNnc3RyICLlv73nlaXmqKHniYggJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmVseSBsb25nIHRlbXBsYXRlIHBhdGggJXMiCittc2dzdHIgIuWkqumVv+eahOaooeeJiOi3r+W+hCAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTQ1CisjLCBjLWZvcm1hdAorbXNnaWQgInRlbXBsYXRlcyBub3QgZm91bmQgJXMiCittc2dzdHIgIuaooeeJiOacquaJvuWIsCAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBjb3B5aW5nIHRlbXBsYXRlcyBvZiBhIHdyb25nIGZvcm1hdCB2ZXJzaW9uICVkIGZyb20gJyVzJyIKK21zZ3N0ciAi5rKh5pyJ5LuOICclMiRzJyDlpI3liLbluKbmnInplJnor6/niYjmnKwgJTEkZCDnmoTmqKHniYgiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjIxMgorIywgYy1mb3JtYXQKK21zZ2lkICJpbnNhbmUgZ2l0IGRpcmVjdG9yeSAlcyIKK21zZ3N0ciAi5LiN5q2j5bi455qEIGdpdCDnm67lvZUgJXMiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjM0NCBidWlsdGluL2luaXQtZGIuYzozNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgYWxyZWFkeSBleGlzdHMiCittc2dzdHIgIiVzIOW3sue7j+WtmOWcqCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6Mzc1CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBoYW5kbGUgZmlsZSB0eXBlICVkIgorbXNnc3RyICLkuI3og73lpITnkIYgJWQg57G75Z6L55qE5paH5Lu2IgorCisjOiBidWlsdGluL2luaXQtZGIuYzozNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIG1vdmUgJXMgdG8gJXMiCittc2dzdHIgIuS4jeiDveenu+WKqCAlcyDoh7MgJXMiCisKKyMuIFRSQU5TTEFUT1JTOiBUaGUgZmlyc3QgJyVzJyBpcyBlaXRoZXIgIlJlaW5pdGlhbGl6ZWQKKyMuIGV4aXN0aW5nIiBvciAiSW5pdGlhbGl6ZWQgZW1wdHkiLCB0aGUgc2Vjb25kICIgc2hhcmVkIiBvcgorIy4gIiIsIGFuZCB0aGUgbGFzdCAnJXMlcycgaXMgdGhlIHZlcmJhdGltIGRpcmVjdG9yeSBuYW1lLgorIzogYnVpbHRpbi9pbml0LWRiLmM6NDM0CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzJXMgR2l0IHJlcG9zaXRvcnkgaW4gJXMlc1xuIgorbXNnc3RyICIlcyVzIEdpdCDku5PlupPkuo4gJXMlc1xuIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0MzUKK21zZ2lkICJSZWluaXRpYWxpemVkIGV4aXN0aW5nIgorbXNnc3RyICLph43mlrDliJ3lp4vljJbnjrDlrZjnmoQiCisKKyM6IGJ1aWx0aW4vaW5pdC1kYi5jOjQzNQorbXNnaWQgIkluaXRpYWxpemVkIGVtcHR5IgorbXNnc3RyICLliJ3lp4vljJbnqbrnmoQiCisKKyMgIOivkeiAhe+8muS4reaWh+Wtl+espuS4suaLvOaOpe+8jOWPr+WIoOmZpOWJjeWvvOepuuagvAorIzogYnVpbHRpbi9pbml0LWRiLmM6NDM2Cittc2dpZCAiIHNoYXJlZCIKK21zZ3N0ciAi5YWx5LqrIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo0ODMKK21zZ2lkICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9PHRlbXBsYXRlLWRpcmVjdG9yeT5dIFstLSIKKyJzaGFyZWRbPTxwZXJtaXNzaW9ucz5dXSBbPGRpcmVjdG9yeT5dIgorbXNnc3RyICIiCisiZ2l0IGluaXQgWy1xIHwgLS1xdWlldF0gWy0tYmFyZV0gWy0tdGVtcGxhdGU9POaooeadv+ebruW9lT5dIFstLXNoYXJlZFs9POadg+mZkD5dXSAiCisiWzznm67lvZU+XSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTA2Cittc2dpZCAicGVybWlzc2lvbnMiCittc2dzdHIgIuadg+mZkCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTA3Cittc2dpZCAic3BlY2lmeSB0aGF0IHRoZSBnaXQgcmVwb3NpdG9yeSBpcyB0byBiZSBzaGFyZWQgYW1vbmdzdCBzZXZlcmFsIHVzZXJzIgorbXNnc3RyICLmjIflrpogZ2l0IOS7k+W6k+aYr+WkmuS4queUqOaIt+S5i+mXtOWFseS6q+eahCIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTQxIGJ1aWx0aW4vaW5pdC1kYi5jOjU0NgorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgbWtkaXIgJXMiCittc2dzdHIgIuS4jeiDveWIm+W7uuebruW9lSAlcyIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTUwCisjLCBjLWZvcm1hdAorbXNnaWQgImNhbm5vdCBjaGRpciB0byAlcyIKK21zZ3N0ciAi5LiN6IO95YiH5o2i55uu5b2V5YiwICVzIgorCisjOiBidWlsdGluL2luaXQtZGIuYzo1NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiVzIChvciAtLXdvcmstdHJlZT08ZGlyZWN0b3J5Pikgbm90IGFsbG93ZWQgd2l0aG91dCBzcGVjaWZ5aW5nICVzIChvciAtLWdpdC0iCisiZGlyPTxkaXJlY3Rvcnk+KSIKK21zZ3N0ciAi5LiN5YWB6K64ICVz77yI5oiWIC0td29yay10cmVlPTznm67lvZU+77yJ6ICM5rKh5pyJ5oyH5a6aICVz77yI5oiWIC0tZ2l0LWRpcj0855uu5b2VPu+8iSIKKworIzogYnVpbHRpbi9pbml0LWRiLmM6NTk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBhY2Nlc3Mgd29yayB0cmVlICclcyciCittc2dzdHIgIuS4jeiDveiuv+mXruW3peS9nOWMuiAnJXMnIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjE1Cittc2dpZCAiIgorImdpdCBpbnRlcnByZXQtdHJhaWxlcnMgWy0tdHJpbS1lbXB0eV0gWygtLXRyYWlsZXIgPHRva2VuPlsoPXw6KTx2YWx1ZT5dKS4uLl0gIgorIls8ZmlsZT4uLi5dIgorbXNnc3RyICIiCisiZ2l0IGludGVycHJldC10cmFpbGVycyBbLS10cmltLWVtcHR5XSBbKC0tdHJhaWxlciA86ZSuPlsoPXw6KTzlgLw+XSkuLi5dIFs85paH5Lu2IgorIj4uLi5dIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI1Cittc2dpZCAidHJpbSBlbXB0eSB0cmFpbGVycyIKK21zZ3N0ciAi5Yig6Zmk56m6562+5ZCNIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI2Cittc2dpZCAidHJhaWxlciIKK21zZ3N0ciAi562+5ZCNIgorCisjOiBidWlsdGluL2ludGVycHJldC10cmFpbGVycy5jOjI3Cittc2dpZCAidHJhaWxlcihzKSB0byBhZGQiCittc2dzdHIgIuimgea3u+WKoOeahOetvuWQjSIKKworIzogYnVpbHRpbi9sb2cuYzo0MworbXNnaWQgImdpdCBsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIDxwYXRoPi4uLl0iCittc2dzdHIgImdpdCBsb2cgWzzpgInpobk+XSBbPOeJiOacrOiMg+WbtD5dIFtbLS1dIDzot6/lvoQ+Li4uXSIKKworIzogYnVpbHRpbi9sb2cuYzo0NAorbXNnaWQgImdpdCBzaG93IFs8b3B0aW9ucz5dIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgc2hvdyBbPOmAiemhuT5dIDzlr7nosaE+Li4uIgorCisjOiBidWlsdGluL2xvZy5jOjgzCisjLCBjLWZvcm1hdAorbXNnaWQgImludmFsaWQgLS1kZWNvcmF0ZSBvcHRpb246ICVzIgorbXNnc3RyICLml6DmlYjnmoQgLS1kZWNvcmF0ZSDpgInpobnvvJolcyIKKworIzogYnVpbHRpbi9sb2cuYzoxMzEKK21zZ2lkICJzdXBwcmVzcyBkaWZmIG91dHB1dCIKK21zZ3N0ciAi5LiN5pi+56S65beu5byC6L6T5Ye6IgorCisjOiBidWlsdGluL2xvZy5jOjEzMgorbXNnaWQgInNob3cgc291cmNlIgorbXNnc3RyICLmmL7npLrmupAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTMzCittc2dpZCAiVXNlIG1haWwgbWFwIGZpbGUiCittc2dzdHIgIuS9v+eUqOmCruS7tuaYoOWwhOaWh+S7tiIKKworIzogYnVpbHRpbi9sb2cuYzoxMzQKK21zZ2lkICJkZWNvcmF0ZSBvcHRpb25zIgorbXNnc3RyICLkv67ppbDpgInpobkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3Cittc2dpZCAiUHJvY2VzcyBsaW5lIHJhbmdlIG4sbSBpbiBmaWxlLCBjb3VudGluZyBmcm9tIDEiCittc2dzdHIgIuWkhOeQhuaWh+S7tuS4reesrCBuIOWIsCBtIOS5i+mXtOeahOihjO+8jOS7jiAxIOW8gOWniyIKKworIzogYnVpbHRpbi9sb2cuYzoyMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmluYWwgb3V0cHV0OiAlZCAlc1xuIgorbXNnc3RyICLmnIDnu4jovpPlh7rvvJolZCAlc1xuIgorCisjOiBidWlsdGluL2xvZy5jOjQ2NQorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgc2hvdyAlczogYmFkIGZpbGUiCittc2dzdHIgImdpdCBzaG93ICVzOiDmjZ/lnY/nmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vbG9nLmM6NDc5IGJ1aWx0aW4vbG9nLmM6NTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIG9iamVjdCAlcyIKK21zZ3N0ciAi5LiN6IO96K+75Y+W5a+56LGhICVzIgorCisjOiBidWlsdGluL2xvZy5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHR5cGU6ICVkIgorbXNnc3RyICLmnKrnn6XnsbvlnovvvJolZCIKKworIzogYnVpbHRpbi9sb2cuYzo3MTQKK21zZ2lkICJmb3JtYXQuaGVhZGVycyB3aXRob3V0IHZhbHVlIgorbXNnc3RyICJmb3JtYXQuaGVhZGVycyDmsqHmnInlgLwiCisKKyM6IGJ1aWx0aW4vbG9nLmM6Nzk4Cittc2dpZCAibmFtZSBvZiBvdXRwdXQgZGlyZWN0b3J5IGlzIHRvbyBsb25nIgorbXNnc3RyICLovpPlh7rnm67lvZXlkI3lpKrplb8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6ODE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCBvcGVuIHBhdGNoIGZpbGUgJXMiCittc2dzdHIgIuaXoOazleaJk+W8gOihpeS4geaWh+S7tiAlcyIKKworIzogYnVpbHRpbi9sb2cuYzo4MjgKK21zZ2lkICJOZWVkIGV4YWN0bHkgb25lIHJhbmdlLiIKK21zZ3N0ciAi5Y+q6ZyA6KaB5LiA5Liq6IyD5Zu044CCIgorCisjOiBidWlsdGluL2xvZy5jOjgzOAorbXNnaWQgIk5vdCBhIHJhbmdlLiIKK21zZ3N0ciAi5LiN5piv5LiA5Liq6IyD5Zu044CCIgorCisjOiBidWlsdGluL2xvZy5jOjk0NAorbXNnaWQgIkNvdmVyIGxldHRlciBuZWVkcyBlbWFpbCBmb3JtYXQiCittc2dzdHIgIuS/oeWwgemcgOimgemCruS7tuWcsOWdgOagvOW8jyIKKworIzogYnVpbHRpbi9sb2cuYzoxMDIzCisjLCBjLWZvcm1hdAorbXNnaWQgImluc2FuZSBpbi1yZXBseS10bzogJXMiCittc2dzdHIgIuS4jeato+W4uOeahCBpbi1yZXBseS10b++8miVzIgorCisjOiBidWlsdGluL2xvZy5jOjEwNTEKK21zZ2lkICJnaXQgZm9ybWF0LXBhdGNoIFs8b3B0aW9ucz5dIFs8c2luY2U+IHwgPHJldmlzaW9uLXJhbmdlPl0iCittc2dzdHIgImdpdCBmb3JtYXQtcGF0Y2ggWzzpgInpobk+XSBbPOS7jj4gfCA854mI5pys6IyD5Zu0Pl0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTA5NgorbXNnaWQgIlR3byBvdXRwdXQgZGlyZWN0b3JpZXM/IgorbXNnc3RyICLkuKTkuKrovpPlh7rnm67lvZXvvJ8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIxMQorbXNnaWQgInVzZSBbUEFUQ0ggbi9tXSBldmVuIHdpdGggYSBzaW5nbGUgcGF0Y2giCittc2dzdHIgIuS9v+eUqCBbUEFUQ0ggbi9tXe+8jOWNs+S9v+WPquacieS4gOS4quihpeS4gSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjE0Cittc2dpZCAidXNlIFtQQVRDSF0gZXZlbiB3aXRoIG11bHRpcGxlIHBhdGNoZXMiCittc2dzdHIgIuS9v+eUqCBbUEFUQ0hd77yM5Y2z5L2/5pyJ5aSa5Liq6KGl5LiBIgorCisjOiBidWlsdGluL2xvZy5jOjEyMTgKK21zZ2lkICJwcmludCBwYXRjaGVzIHRvIHN0YW5kYXJkIG91dCIKK21zZ3N0ciAi5omT5Y2w6KGl5LiB5Yiw5qCH5YeG6L6T5Ye6IgorCisjOiBidWlsdGluL2xvZy5jOjEyMjAKK21zZ2lkICJnZW5lcmF0ZSBhIGNvdmVyIGxldHRlciIKK21zZ3N0ciAi55Sf5oiQ5LiA5bCB6ZmE5L+hIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjIKK21zZ2lkICJ1c2Ugc2ltcGxlIG51bWJlciBzZXF1ZW5jZSBmb3Igb3V0cHV0IGZpbGUgbmFtZXMiCittc2dzdHIgIuS9v+eUqOeugOWNleeahOaVsOWtl+W6j+WIl+S9nOS4uui+k+WHuuaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjIzCittc2dpZCAic2Z4IgorbXNnc3RyICLlkI7nvIAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyNAorbXNnaWQgInVzZSA8c2Z4PiBpbnN0ZWFkIG9mICcucGF0Y2gnIgorbXNnc3RyICLkvb/nlKggPOWQjue8gD4g5Luj5pu/ICcucGF0Y2gnIgorCisjOiBidWlsdGluL2xvZy5jOjEyMjYKK21zZ2lkICJzdGFydCBudW1iZXJpbmcgcGF0Y2hlcyBhdCA8bj4gaW5zdGVhZCBvZiAxIgorbXNnc3RyICLooaXkuIHku6UgPG4+IOW8gOWni+e8luWPt++8jOiAjOS4jeaYrzEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTIyOAorbXNnaWQgIm1hcmsgdGhlIHNlcmllcyBhcyBOdGggcmUtcm9sbCIKK21zZ3N0ciAi5qCH6K6w6KGl5LiB57O75YiX5piv56ys5Yeg5qyh6YeN5Yi2IgorCisjOiBidWlsdGluL2xvZy5jOjEyMzAKK21zZ2lkICJVc2UgWzxwcmVmaXg+XSBpbnN0ZWFkIG9mIFtQQVRDSF0iCittc2dzdHIgIuS9v+eUqCBbPOWJjee8gD5dIOS7o+abvyBbUEFUQ0hdIgorCisjOiBidWlsdGluL2xvZy5jOjEyMzMKK21zZ2lkICJzdG9yZSByZXN1bHRpbmcgZmlsZXMgaW4gPGRpcj4iCittc2dzdHIgIuaKiue7k+aenOaWh+S7tuWtmOWCqOWcqCA855uu5b2VPiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjM2Cittc2dpZCAiZG9uJ3Qgc3RyaXAvYWRkIFtQQVRDSF0iCittc2dzdHIgIuS4jeWIoOmZpC/mt7vliqAgW1BBVENIXSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjM5Cittc2dpZCAiZG9uJ3Qgb3V0cHV0IGJpbmFyeSBkaWZmcyIKK21zZ3N0ciAi5LiN6L6T5Ye65LqM6L+b5Yi25beu5byCIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDEKK21zZ2lkICJkb24ndCBpbmNsdWRlIGEgcGF0Y2ggbWF0Y2hpbmcgYSBjb21taXQgdXBzdHJlYW0iCittc2dzdHIgIuS4jeWMheWQq+W3suWcqOS4iua4uOaPkOS6pOS4reeahOihpeS4gSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQzCittc2dpZCAic2hvdyBwYXRjaCBmb3JtYXQgaW5zdGVhZCBvZiBkZWZhdWx0IChwYXRjaCArIHN0YXQpIgorbXNnc3RyICLmmL7npLrnuq/ooaXkuIHmoLzlvI/ogIzpnZ7pu5jorqTnmoTvvIjooaXkuIEr54q25oCB77yJIgorCisjOiBidWlsdGluL2xvZy5jOjEyNDUKK21zZ2lkICJNZXNzYWdpbmciCittc2dzdHIgIumCruS7tuWPkemAgSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ2Cittc2dpZCAiaGVhZGVyIgorbXNnc3RyICJoZWFkZXIiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0NworbXNnaWQgImFkZCBlbWFpbCBoZWFkZXIiCittc2dzdHIgIua3u+WKoOmCruS7tuWktCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjQ4IGJ1aWx0aW4vbG9nLmM6MTI1MAorbXNnaWQgImVtYWlsIgorbXNnc3RyICLpgq7ku7blnLDlnYAiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI0OAorbXNnaWQgImFkZCBUbzogaGVhZGVyIgorbXNnc3RyICLmt7vliqDmlLbku7bkuroiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MAorbXNnaWQgImFkZCBDYzogaGVhZGVyIgorbXNnc3RyICLmt7vliqDmioTpgIEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MgorbXNnaWQgImlkZW50IgorbXNnc3RyICLmoIfor4YiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1MworbXNnaWQgInNldCBGcm9tIGFkZHJlc3MgdG8gPGlkZW50PiAob3IgY29tbWl0dGVyIGlkZW50IGlmIGFic2VudCkiCittc2dzdHIgIuWwhiBGcm9tIOWcsOWdgOiuvue9ruS4uiA85qCH6K+GPu+8iOWmguiLpeS4jeaPkOS+m++8jOWImeeUqOaPkOS6pOiAhSBJRCDlgZrkuLrlnLDlnYDvvIkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI1NQorbXNnaWQgIm1lc3NhZ2UtaWQiCittc2dzdHIgIumCruS7tuagh+ivhiIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU2Cittc2dpZCAibWFrZSBmaXJzdCBtYWlsIGEgcmVwbHkgdG8gPG1lc3NhZ2UtaWQ+IgorbXNnc3RyICLkvb/nrKzkuIDlsIHpgq7ku7bkvZzkuLrlr7kgPOmCruS7tuagh+ivhj4g55qE5Zue5aSNIgorCisjOiBidWlsdGluL2xvZy5jOjEyNTcgYnVpbHRpbi9sb2cuYzoxMjYwCittc2dpZCAiYm91bmRhcnkiCittc2dzdHIgIui+ueeVjCIKKworIzogYnVpbHRpbi9sb2cuYzoxMjU4Cittc2dpZCAiYXR0YWNoIHRoZSBwYXRjaCIKK21zZ3N0ciAi6ZmE5Lu25pa55byP5re75Yqg6KGl5LiBIgorCisjOiBidWlsdGluL2xvZy5jOjEyNjEKK21zZ2lkICJpbmxpbmUgdGhlIHBhdGNoIgorbXNnc3RyICLlhoXogZTmmL7npLrooaXkuIEiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI2NQorbXNnaWQgImVuYWJsZSBtZXNzYWdlIHRocmVhZGluZywgc3R5bGVzOiBzaGFsbG93LCBkZWVwIgorbXNnc3RyICLlkK/nlKjpgq7ku7bnur/ntKLvvIzpo47moLzvvJrmtYXvvIzmt7EiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI2NworbXNnaWQgInNpZ25hdHVyZSIKK21zZ3N0ciAi562+5ZCNIgorCisjOiBidWlsdGluL2xvZy5jOjEyNjgKK21zZ2lkICJhZGQgYSBzaWduYXR1cmUiCittc2dzdHIgIua3u+WKoOS4gOS4quetvuWQjSIKKworIzogYnVpbHRpbi9sb2cuYzoxMjcwCittc2dpZCAiYWRkIGEgc2lnbmF0dXJlIGZyb20gYSBmaWxlIgorbXNnc3RyICLku47mlofku7bmt7vliqDkuIDkuKrnrb7lkI0iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTI3MQorbXNnaWQgImRvbid0IHByaW50IHRoZSBwYXRjaCBmaWxlbmFtZXMiCittc2dzdHIgIuS4jeimgeaJk+WNsOihpeS4geaWh+S7tuWQjSIKKworIzogYnVpbHRpbi9sb2cuYzoxMzYwCittc2dpZCAiLW4gYW5kIC1rIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICItbiDlkowgLWsg5LqS5pal44CCIgorCisjOiBidWlsdGluL2xvZy5jOjEzNjIKK21zZ2lkICItLXN1YmplY3QtcHJlZml4IGFuZCAtayBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKK21zZ3N0ciAiLS1zdWJqZWN0LXByZWZpeCDlkowgLWsg5LqS5pal44CCIgorCisjOiBidWlsdGluL2xvZy5jOjEzNzAKK21zZ2lkICItLW5hbWUtb25seSBkb2VzIG5vdCBtYWtlIHNlbnNlIgorbXNnc3RyICItLW5hbWUtb25seSDml6DmhI/kuYkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3MgorbXNnaWQgIi0tbmFtZS1zdGF0dXMgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1uYW1lLXN0YXR1cyDml6DmhI/kuYkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM3NAorbXNnaWQgIi0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIKK21zZ3N0ciAiLS1jaGVjayDml6DmhI/kuYkiCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM5NworbXNnaWQgInN0YW5kYXJkIG91dHB1dCwgb3IgZGlyZWN0b3J5LCB3aGljaCBvbmU/IgorbXNnc3RyICLmoIflh4bovpPlh7rmiJbnm67lvZXvvIzlk6rkuIDkuKrvvJ8iCisKKyM6IGJ1aWx0aW4vbG9nLmM6MTM5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSAnJXMnIgorbXNnc3RyICLkuI3og73liJvlu7rnm67lvZUgJyVzJyIKKworIzogYnVpbHRpbi9sb2cuYzoxNDk2CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byByZWFkIHNpZ25hdHVyZSBmaWxlICclcyciCittc2dzdHIgIuaXoOazleivu+WPluetvuWQjeaWh+S7tiAnJXMnIgorCisjOiBidWlsdGluL2xvZy5jOjE1NTkKK21zZ2lkICJGYWlsZWQgdG8gY3JlYXRlIG91dHB1dCBmaWxlcyIKK21zZ3N0ciAi5peg5rOV5Yib5bu66L6T5Ye65paH5Lu2IgorCisjOiBidWlsdGluL2xvZy5jOjE2MDcKK21zZ2lkICJnaXQgY2hlcnJ5IFstdl0gWzx1cHN0cmVhbT4gWzxoZWFkPiBbPGxpbWl0Pl1dXSIKK21zZ3N0ciAiZ2l0IGNoZXJyeSBbLXZdIFs85LiK5ri4PiBbPOWktD4gWzzpmZDliLY+XV1dIgorCisjOiBidWlsdGluL2xvZy5jOjE2NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBmaW5kIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoLCBwbGVhc2Ugc3BlY2lmeSA8dXBzdHJlYW0+IG1hbnVhbGx5LlxuIgorbXNnc3RyICLkuI3og73mib7liLDot5/ouKrnmoTov5znqIvliIbmlK/vvIzor7fmiYvlt6XmjIflrpogPOS4iua4uD7jgIJcbiIKKworIzogYnVpbHRpbi9sb2cuYzoxNjcyIGJ1aWx0aW4vbG9nLmM6MTY3NCBidWlsdGluL2xvZy5jOjE2ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBjb21taXQgJXMiCittc2dzdHIgIuacquefpeaPkOS6pCAlcyIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjM1OAorbXNnaWQgImdpdCBscy1maWxlcyBbPG9wdGlvbnM+XSBbPGZpbGU+Li4uXSIKK21zZ3N0ciAiZ2l0IGxzLWZpbGVzIFs86YCJ6aG5Pl0gWzzmlofku7Y+Li4uXSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQxNQorbXNnaWQgImlkZW50aWZ5IHRoZSBmaWxlIHN0YXR1cyB3aXRoIHRhZ3MiCittc2dzdHIgIueUqOagh+etvuagh+ivhuaWh+S7tueahOeKtuaAgSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQxNworbXNnaWQgInVzZSBsb3dlcmNhc2UgbGV0dGVycyBmb3IgJ2Fzc3VtZSB1bmNoYW5nZWQnIGZpbGVzIgorbXNnc3RyICLkvb/nlKjlsI/lhpnlrZfmr43ooajnpLogJ+WBh+iuvuacquaUueWPmOeahCcg5paH5Lu2IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDE5Cittc2dpZCAic2hvdyBjYWNoZWQgZmlsZXMgaW4gdGhlIG91dHB1dCAoZGVmYXVsdCkiCittc2dzdHIgIuaYvuekuue8k+WtmOeahOaWh+S7tu+8iOm7mOiupO+8iSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyMQorbXNnaWQgInNob3cgZGVsZXRlZCBmaWxlcyBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLmmL7npLrlt7LliKDpmaTnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MjMKK21zZ2lkICJzaG93IG1vZGlmaWVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIuaYvuekuuW3suS/ruaUueeahOaWh+S7tiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQyNQorbXNnaWQgInNob3cgb3RoZXIgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi5pi+56S65YW25a6D5paH5Lu2IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDI3Cittc2dpZCAic2hvdyBpZ25vcmVkIGZpbGVzIGluIHRoZSBvdXRwdXQiCittc2dzdHIgIuaYvuekuuW/veeVpeeahOaWh+S7tiIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzMAorbXNnaWQgInNob3cgc3RhZ2VkIGNvbnRlbnRzJyBvYmplY3QgbmFtZSBpbiB0aGUgb3V0cHV0IgorbXNnc3RyICLmmL7npLrmmoLlrZjljLrlhoXlrrnnmoTlr7nosaHlkI3np7AiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzIKK21zZ2lkICJzaG93IGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtIHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIgorbXNnc3RyICLmmL7npLrmlofku7bns7vnu5/pnIDopoHliKDpmaTnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0MzQKK21zZ2lkICJzaG93ICdvdGhlcicgZGlyZWN0b3JpZXMnIG5hbWVzIG9ubHkiCittc2dzdHIgIuWPquaYvuekuuKAnOWFtuS7luKAneebruW9leeahOWQjeensCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQzNworbXNnaWQgImRvbid0IHNob3cgZW1wdHkgZGlyZWN0b3JpZXMiCittc2dzdHIgIuS4jeaYvuekuuepuuebruW9lSIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ0MAorbXNnaWQgInNob3cgdW5tZXJnZWQgZmlsZXMgaW4gdGhlIG91dHB1dCIKK21zZ3N0ciAi5pi+56S65pyq5ZCI5bm255qE5paH5Lu2IgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQyCittc2dpZCAic2hvdyByZXNvbHZlLXVuZG8gaW5mb3JtYXRpb24iCittc2dzdHIgIuaYvuekuiByZXNvbHZlLXVuZG8g5L+h5oGvIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDQ0Cittc2dpZCAic2tpcCBmaWxlcyBtYXRjaGluZyBwYXR0ZXJuIgorbXNnc3RyICLljLnphY3mjpLpmaTmlofku7bnmoTmqKHlvI8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NDcKK21zZ2lkICJleGNsdWRlIHBhdHRlcm5zIGFyZSByZWFkIGZyb20gPGZpbGU+IgorbXNnc3RyICLku44gPOaWh+S7tj4g5Lit6K+75Y+W5o6S6Zmk5qih5byPIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDUwCittc2dpZCAicmVhZCBhZGRpdGlvbmFsIHBlci1kaXJlY3RvcnkgZXhjbHVkZSBwYXR0ZXJucyBpbiA8ZmlsZT4iCittc2dzdHIgIuS7jiA85paH5Lu2PiDor7vlj5bpop3lpJbnmoTmr4/kuKrnm67lvZXnmoTmjpLpmaTmqKHlvI8iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTIKK21zZ2lkICJhZGQgdGhlIHN0YW5kYXJkIGdpdCBleGNsdXNpb25zIgorbXNnc3RyICLmt7vliqDmoIflh4bnmoQgZ2l0IOaOkumZpCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ1NQorbXNnaWQgIm1ha2UgdGhlIG91dHB1dCByZWxhdGl2ZSB0byB0aGUgcHJvamVjdCB0b3AgZGlyZWN0b3J5IgorbXNnc3RyICLmmL7npLrnm7jlr7nkuo7pobbnuqfnm67lvZXnmoTmlofku7blkI0iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTgKK21zZ2lkICJpZiBhbnkgPGZpbGU+IGlzIG5vdCBpbiB0aGUgaW5kZXgsIHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IiCittc2dzdHIgIuWmguaenOS7u+S9lSA85paH5Lu2PiDpg73kuI3lnKjntKLlvJXljLrvvIzop4bkuLrplJnor68iCisKKyM6IGJ1aWx0aW4vbHMtZmlsZXMuYzo0NTkKK21zZ2lkICJ0cmVlLWlzaCIKK21zZ3N0ciAi5qCR5oiW5o+Q5LqkIgorCisjOiBidWlsdGluL2xzLWZpbGVzLmM6NDYwCittc2dpZCAicHJldGVuZCB0aGF0IHBhdGhzIHJlbW92ZWQgc2luY2UgPHRyZWUtaXNoPiBhcmUgc3RpbGwgcHJlc2VudCIKK21zZ3N0ciAi5YGH6KOF6Ieq5LuOIDzmoJHmiJbmj5DkuqQ+IOS5i+WQjuWIoOmZpOeahOi3r+W+hOS7jeeEtuWtmOWcqCIKKworIzogYnVpbHRpbi9scy1maWxlcy5jOjQ2MgorbXNnaWQgInNob3cgZGVidWdnaW5nIGRhdGEiCittc2dzdHIgIuaYvuekuuiwg+ivleaVsOaNriIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MjgKK21zZ2lkICJnaXQgbHMtdHJlZSBbPG9wdGlvbnM+XSA8dHJlZS1pc2g+IFs8cGF0aD4uLi5dIgorbXNnc3RyICJnaXQgbHMtdHJlZSBbPOmAiemhuT5dIDzmoJHmiJbmj5DkuqQ+IFs86Lev5b6EPi4uLl0iCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjEyNworbXNnaWQgIm9ubHkgc2hvdyB0cmVlcyIKK21zZ3N0ciAi5Y+q5pi+56S65qCRIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMjkKK21zZ2lkICJyZWN1cnNlIGludG8gc3VidHJlZXMiCittc2dzdHIgIumAkuW9kuWIsOWtkOagkSIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTMxCittc2dpZCAic2hvdyB0cmVlcyB3aGVuIHJlY3Vyc2luZyIKK21zZ3N0ciAi5b2T6YCS5b2S5pe25pi+56S65qCRIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzQKK21zZ2lkICJ0ZXJtaW5hdGUgZW50cmllcyB3aXRoIE5VTCBieXRlIgorbXNnc3RyICLmnaHnm67ku6UgTlVMIOWtl+espue7iOatoiIKKworIzogYnVpbHRpbi9scy10cmVlLmM6MTM1Cittc2dpZCAiaW5jbHVkZSBvYmplY3Qgc2l6ZSIKK21zZ3N0ciAi5YyF5ous5a+56LGh5aSn5bCPIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxMzcgYnVpbHRpbi9scy10cmVlLmM6MTM5Cittc2dpZCAibGlzdCBvbmx5IGZpbGVuYW1lcyIKK21zZ3N0ciAi5Y+q5YiX5Ye65paH5Lu25ZCNIgorCisjOiBidWlsdGluL2xzLXRyZWUuYzoxNDIKK21zZ2lkICJ1c2UgZnVsbCBwYXRoIG5hbWVzIgorbXNnc3RyICLkvb/nlKjmlofku7bnmoTlhajot6/lvoQiCisKKyM6IGJ1aWx0aW4vbHMtdHJlZS5jOjE0NAorbXNnaWQgImxpc3QgZW50aXJlIHRyZWU7IG5vdCBqdXN0IGN1cnJlbnQgZGlyZWN0b3J5IChpbXBsaWVzIC0tZnVsbC1uYW1lKSIKK21zZ3N0ciAi5YiX5Ye65pW05Liq5qCR77yb5LiN5LuF5LuF5b2T5YmN55uu5b2V77yI6ZqQ5ZCrIC0tZnVsbC1uYW1l77yJIgorCisjOiBidWlsdGluL21lcmdlLmM6NDUKK21zZ2lkICJnaXQgbWVyZ2UgWzxvcHRpb25zPl0gWzxjb21taXQ+Li4uXSIKK21zZ3N0ciAiZ2l0IG1lcmdlIFs86YCJ6aG5Pl0gWzzmj5DkuqQ+Li4uXSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjQ2Cittc2dpZCAiZ2l0IG1lcmdlIFs8b3B0aW9ucz5dIDxtc2c+IEhFQUQgPGNvbW1pdD4iCittc2dzdHIgImdpdCBtZXJnZSBbPOmAiemhuT5dIDzor7TmmI4+IEhFQUQgPOaPkOS6pD4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NworbXNnaWQgImdpdCBtZXJnZSAtLWFib3J0IgorbXNnc3RyICJnaXQgbWVyZ2UgLS1hYm9ydCIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEwMAorbXNnaWQgInN3aXRjaCBgbScgcmVxdWlyZXMgYSB2YWx1ZSIKK21zZ3N0ciAi5byA5YWzIGBtJyDpnIDopoHkuIDkuKrlgLwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGZpbmQgbWVyZ2Ugc3RyYXRlZ3kgJyVzJy5cbiIKK21zZ3N0ciAi5LiN6IO95om+5Yiw5ZCI5bm2562W55WlICclcyfjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzOAorIywgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgc3RyYXRlZ2llcyBhcmU6IgorbXNnc3RyICLlj6/nlKjnmoTnrZbnlaXmnInvvJoiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGN1c3RvbSBzdHJhdGVnaWVzIGFyZToiCittc2dzdHIgIuWPr+eUqOeahOiHquWumuS5ieetlueVpeacie+8miIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE5MyBidWlsdGluL3B1bGwuYzoxMTkKK21zZ2lkICJkbyBub3Qgc2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICLlnKjlkIjlubbnmoTmnIDlkI7kuI3mmL7npLrlt67lvILnu5/orqEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTYgYnVpbHRpbi9wdWxsLmM6MTIyCittc2dpZCAic2hvdyBhIGRpZmZzdGF0IGF0IHRoZSBlbmQgb2YgdGhlIG1lcmdlIgorbXNnc3RyICLlnKjlkIjlubbnmoTmnIDlkI7mmL7npLrlt67lvILnu5/orqEiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTcgYnVpbHRpbi9wdWxsLmM6MTI1Cittc2dpZCAiKHN5bm9ueW0gdG8gLS1zdGF0KSIKK21zZ3N0ciAi77yI5ZKMIC0tc3RhdCDlkIzkuYnvvIkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxOTkgYnVpbHRpbi9wdWxsLmM6MTI4Cittc2dpZCAiYWRkIChhdCBtb3N0IDxuPikgZW50cmllcyBmcm9tIHNob3J0bG9nIHRvIG1lcmdlIGNvbW1pdCBtZXNzYWdlIgorbXNnc3RyICLlnKjlkIjlubbmj5DkuqTkv6Hmga/kuK3mt7vliqDvvIjmnIDlpJogPG4+IOadoe+8ieeyvueugOaPkOS6pOiusOW9lSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIwMiBidWlsdGluL3B1bGwuYzoxMzEKK21zZ2lkICJjcmVhdGUgYSBzaW5nbGUgY29tbWl0IGluc3RlYWQgb2YgZG9pbmcgYSBtZXJnZSIKK21zZ3N0ciAi5Yib5bu65LiA5Liq5Y2V54us55qE5o+Q5Lqk6ICM5LiN5piv5YGa5LiA5qyh5ZCI5bm2IgorCisjOiBidWlsdGluL21lcmdlLmM6MjA0IGJ1aWx0aW4vcHVsbC5jOjEzNAorbXNnaWQgInBlcmZvcm0gYSBjb21taXQgaWYgdGhlIG1lcmdlIHN1Y2NlZWRzIChkZWZhdWx0KSIKK21zZ3N0ciAi5aaC5p6c5ZCI5bm25oiQ5Yqf77yM5omn6KGM5LiA5qyh5o+Q5Lqk77yI6buY6K6k77yJIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA2IGJ1aWx0aW4vcHVsbC5jOjEzNworbXNnaWQgImVkaXQgbWVzc2FnZSBiZWZvcmUgY29tbWl0dGluZyIKK21zZ3N0ciAi5Zyo5o+Q5Lqk5YmN57yW6L6R5o+Q5Lqk6K+05piOIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA3Cittc2dpZCAiYWxsb3cgZmFzdC1mb3J3YXJkIChkZWZhdWx0KSIKK21zZ3N0ciAi5YWB6K645b+r6L+b77yI6buY6K6k77yJIgorCisjOiBidWlsdGluL21lcmdlLmM6MjA5IGJ1aWx0aW4vcHVsbC5jOjE0MworbXNnaWQgImFib3J0IGlmIGZhc3QtZm9yd2FyZCBpcyBub3QgcG9zc2libGUiCittc2dzdHIgIuWmguaenOS4jeiDveW/q+i/m+WwseaUvuW8g+WQiOW5tiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxMworbXNnaWQgIlZlcmlmeSB0aGF0IHRoZSBuYW1lZCBjb21taXQgaGFzIGEgdmFsaWQgR1BHIHNpZ25hdHVyZSIKK21zZ3N0ciAi6aqM6K+B5oyH5a6a55qE5o+Q5Lqk5piv5ZCm5YyF5ZCr5LiA5Liq5pyJ5pWI55qEIEdQRyDnrb7lkI0iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyMTQgYnVpbHRpbi9ub3Rlcy5jOjc2NyBidWlsdGluL3B1bGwuYzoxNDgKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODkKK21zZ2lkICJzdHJhdGVneSIKK21zZ3N0ciAi562W55WlIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE1IGJ1aWx0aW4vcHVsbC5jOjE0OQorbXNnaWQgIm1lcmdlIHN0cmF0ZWd5IHRvIHVzZSIKK21zZ3N0ciAi6KaB5L2/55So55qE5ZCI5bm2562W55WlIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE2IGJ1aWx0aW4vcHVsbC5jOjE1MgorbXNnaWQgIm9wdGlvbj12YWx1ZSIKK21zZ3N0ciAib3B0aW9uPXZhbHVlIgorCisjOiBidWlsdGluL21lcmdlLmM6MjE3IGJ1aWx0aW4vcHVsbC5jOjE1MworbXNnaWQgIm9wdGlvbiBmb3Igc2VsZWN0ZWQgbWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIuaJgOmAieeahOWQiOW5tuetlueVpeeahOmAiemhuSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjIxOQorbXNnaWQgIm1lcmdlIGNvbW1pdCBtZXNzYWdlIChmb3IgYSBub24tZmFzdC1mb3J3YXJkIG1lcmdlKSIKK21zZ3N0ciAi5ZCI5bm255qE5o+Q5Lqk6K+05piO77yI6ZKI5a+56Z2e5b+r6L+b5byP5ZCI5bm277yJIgorCisjOiBidWlsdGluL21lcmdlLmM6MjIzCittc2dpZCAiYWJvcnQgdGhlIGN1cnJlbnQgaW4tcHJvZ3Jlc3MgbWVyZ2UiCittc2dzdHIgIuaUvuW8g+W9k+WJjeato+WcqOi/m+ihjOeahOWQiOW5tiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI1MQorbXNnaWQgImNvdWxkIG5vdCBydW4gc3Rhc2guIgorbXNnc3RyICLkuI3og73ov5vooYzov5vluqbkv53lrZjjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoyNTYKK21zZ2lkICJzdGFzaCBmYWlsZWQiCittc2dzdHIgIui/m+W6puS/neWtmOWksei0pSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI2MQorIywgYy1mb3JtYXQKK21zZ2lkICJub3QgYSB2YWxpZCBvYmplY3Q6ICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjlr7nosaHvvJolcyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjI4MCBidWlsdGluL21lcmdlLmM6Mjk3Cittc2dpZCAicmVhZC10cmVlIGZhaWxlZCIKK21zZ3N0ciAi6K+75Y+W5qCR5aSx6LSlIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozMjcKK21zZ2lkICIgKG5vdGhpbmcgdG8gc3F1YXNoKSIKK21zZ3N0ciAiIO+8iOaXoOWPr+WOi+e8qe+8iSIKKworIzogYnVpbHRpbi9tZXJnZS5jOjM0MAorIywgYy1mb3JtYXQKK21zZ2lkICJTcXVhc2ggY29tbWl0IC0tIG5vdCB1cGRhdGluZyBIRUFEXG4iCittc2dzdHIgIuWOi+e8qeaPkOS6pCAtLSDmnKrmm7TmlrAgSEVBRFxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MzQ0IGJ1aWx0aW4vbWVyZ2UuYzo3NjMgYnVpbHRpbi9tZXJnZS5jOjk3NQorIzogYnVpbHRpbi9tZXJnZS5jOjk4OAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95YaZ5YWlICclcyciCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzozNzIKK21zZ2lkICJXcml0aW5nIFNRVUFTSF9NU0ciCittc2dzdHIgIuWGmeWFpSBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzc0Cittc2dpZCAiRmluaXNoaW5nIFNRVUFTSF9NU0ciCittc2dzdHIgIuWujOaIkCBTUVVBU0hfTVNHIgorCisjOiBidWlsdGluL21lcmdlLmM6Mzk3CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1lcmdlIG1lc3NhZ2UgLS0gbm90IHVwZGF0aW5nIEhFQURcbiIKK21zZ3N0ciAi5peg5ZCI5bm25L+h5oGvIC0tIOacquabtOaWsCBIRUFEXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo0NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBkb2VzIG5vdCBwb2ludCB0byBhIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyDmsqHmnInmjIflkJHkuIDkuKrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo1MzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQmFkIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMgc3RyaW5nOiAlcyIKK21zZ3N0ciAi5Z2P55qEIGJyYW5jaC4lcy5tZXJnZW9wdGlvbnMg5a2X56ym5Liy77yaJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NTYKK21zZ2lkICJOb3QgaGFuZGxpbmcgYW55dGhpbmcgb3RoZXIgdGhhbiB0d28gaGVhZHMgbWVyZ2UuIgorbXNnc3RyICLkuI3og73lpITnkIbkuKTkuKrlpLTlkIjlubbkuYvlpJbnmoTku7vkvZXmk43kvZzjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2NzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVW5rbm93biBvcHRpb24gZm9yIG1lcmdlLXJlY3Vyc2l2ZTogLVglcyIKK21zZ3N0ciAibWVyZ2UtcmVjdXJzaXZlIOeahOacquefpemAiemhue+8mi1YJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo2ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAidW5hYmxlIHRvIHdyaXRlICVzIgorbXNnc3RyICLkuI3og73lhpkgJXMiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3NzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgZnJvbSAnJXMnIgorbXNnc3RyICLkuI3og73ku44gJyVzJyDor7vlj5YiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo3ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm90IGNvbW1pdHRpbmcgbWVyZ2U7IHVzZSAnZ2l0IGNvbW1pdCcgdG8gY29tcGxldGUgdGhlIG1lcmdlLlxuIgorbXNnc3RyICLmnKrmj5DkuqTlkIjlubbvvIzkvb/nlKggJ2dpdCBjb21taXQnIOWujOaIkOatpOasoeWQiOW5tuOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6Nzg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJQbGVhc2UgZW50ZXIgYSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoeSB0aGlzIG1lcmdlIGlzIG5lY2Vzc2FyeSxcbiIKKyJlc3BlY2lhbGx5IGlmIGl0IG1lcmdlcyBhbiB1cGRhdGVkIHVwc3RyZWFtIGludG8gYSB0b3BpYyBicmFuY2guXG4iCisiXG4iCisiTGluZXMgc3RhcnRpbmcgd2l0aCAnJWMnIHdpbGwgYmUgaWdub3JlZCwgYW5kIGFuIGVtcHR5IG1lc3NhZ2UgYWJvcnRzXG4iCisidGhlIGNvbW1pdC5cbiIKK21zZ3N0ciAiIgorIuivt+i+k+WFpeS4gOS4quaPkOS6pOS/oeaBr+S7peino+mHiuatpOWQiOW5tueahOW/heimgeaAp++8jOWwpOWFtuaYr+WwhuS4gOS4quabtOaWsOWQjueahOS4iua4uOWIhuaUr1xuIgorIuWQiOW5tuWIsOS4u+mimOWIhuaUr+OAglxuIgorIlxuIgorIuS7pSAnJWMnIOW8gOWktOeahOihjOWwhuiiq+W/veeVpe+8jOiAjOS4lOepuuaPkOS6pOivtOaYjuWwhuS8mue7iOatouaPkOS6pOOAglxuIgorCisjOiBidWlsdGluL21lcmdlLmM6ODExCittc2dpZCAiRW1wdHkgY29tbWl0IG1lc3NhZ2UuIgorbXNnc3RyICLnqbrmj5DkuqTkv6Hmga/jgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo4MjMKKyMsIGMtZm9ybWF0Cittc2dpZCAiV29uZGVyZnVsLlxuIgorbXNnc3RyICLlpKrmo5LkuobjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg3OAorIywgYy1mb3JtYXQKK21zZ2lkICJBdXRvbWF0aWMgbWVyZ2UgZmFpbGVkOyBmaXggY29uZmxpY3RzIGFuZCB0aGVuIGNvbW1pdCB0aGUgcmVzdWx0LlxuIgorbXNnc3RyICLoh6rliqjlkIjlubblpLHotKXvvIzkv67mraPlhrLnqoHnhLblkI7mj5DkuqTkv67mraPnmoTnu5PmnpzjgIJcbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjg5NAorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIGNvbW1pdCIKK21zZ3N0ciAiJyVzJyDkuI3mmK/kuIDkuKrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5MzUKK21zZ2lkICJObyBjdXJyZW50IGJyYW5jaC4iCittc2dzdHIgIuayoeacieW9k+WJjeWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjkzNworbXNnaWQgIk5vIHJlbW90ZSBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi5b2T5YmN5YiG5pSv5rKh5pyJ5a+55bqU55qE6L+c56iL5LuT5bqT44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6OTM5Cittc2dpZCAiTm8gZGVmYXVsdCB1cHN0cmVhbSBkZWZpbmVkIGZvciB0aGUgY3VycmVudCBicmFuY2guIgorbXNnc3RyICLlvZPliY3liIbmlK/msqHmnInlrprkuYnpu5jorqTnmoTkuIrmuLjliIbmlK/jgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzo5NDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmb3IgJXMgZnJvbSAlcyIKK21zZ3N0ciAi5a+55LqOICVzIOayoeacieadpeiHqiAlcyDnmoTov5znqIvot5/ouKrliIbmlK8iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMDgxCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjbG9zZSAnJXMnIgorbXNnc3RyICLkuI3og73lhbPpl60gJyVzJyIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMDgKK21zZ2lkICJUaGVyZSBpcyBubyBtZXJnZSB0byBhYm9ydCAoTUVSR0VfSEVBRCBtaXNzaW5nKS4iCittc2dzdHIgIuayoeacieimgee7iOatoueahOWQiOW5tu+8iE1FUkdFX0hFQUQg5Lii5aSx77yJ44CCIgorCisjOiBidWlsdGluL21lcmdlLmM6MTIyNAorbXNnaWQgIiIKKyJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UgKE1FUkdFX0hFQUQgZXhpc3RzKS5cbiIKKyJQbGVhc2UsIGNvbW1pdCB5b3VyIGNoYW5nZXMgYmVmb3JlIHlvdSBtZXJnZS4iCittc2dzdHIgIiIKKyLmgqjlsJrmnKrnu5PmnZ/mgqjnmoTlkIjlubbvvIjlrZjlnKggTUVSR0VfSEVBRO+8ieOAglxuIgorIuivt+WcqOWQiOW5tuWJjeWFiOaPkOS6pOaCqOeahOS/ruaUueOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyMzEKK21zZ2lkICIiCisiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuXG4iCisiUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIGJlZm9yZSB5b3UgbWVyZ2UuIgorbXNnc3RyICIiCisi5oKo5bCa5pyq57uT5p2f5oKo55qE5ouj6YCJ77yI5a2Y5ZyoIENIRVJSWV9QSUNLX0hFQUTvvInjgIJcbiIKKyLor7flnKjlkIjlubbliY3lhYjmj5DkuqTmgqjnmoTkv67mlLnjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjM0Cittc2dpZCAiWW91IGhhdmUgbm90IGNvbmNsdWRlZCB5b3VyIGNoZXJyeS1waWNrIChDSEVSUllfUElDS19IRUFEIGV4aXN0cykuIgorbXNnc3RyICLmgqjlsJrmnKrnu5PmnZ/mgqjnmoTmi6PpgInvvIjlrZjlnKggQ0hFUlJZX1BJQ0tfSEVBRO+8ieOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNDMKK21zZ2lkICJZb3UgY2Fubm90IGNvbWJpbmUgLS1zcXVhc2ggd2l0aCAtLW5vLWZmLiIKK21zZ3N0ciAi5oKo5LiN6IO95bCGIC0tc3F1YXNoIOS4jiAtLW5vLWZmIOWQjOaXtuS9v+eUqOOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNTEKK21zZ2lkICJObyBjb21taXQgc3BlY2lmaWVkIGFuZCBtZXJnZS5kZWZhdWx0VG9VcHN0cmVhbSBub3Qgc2V0LiIKK21zZ3N0ciAi5pyq5oyH5a6a5o+Q5Lqk5bm25LiUIG1lcmdlLmRlZmF1bHRUb1Vwc3RyZWFtIOacquiuvue9ruOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEyNjgKK21zZ2lkICJTcXVhc2ggY29tbWl0IGludG8gZW1wdHkgaGVhZCBub3Qgc3VwcG9ydGVkIHlldCIKK21zZ3N0ciAi5bCa5LiN5pSv5oyB5Yiw56m65YiG5pSv55qE5Y6L57yp5o+Q5LqkIgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3MAorbXNnaWQgIk5vbi1mYXN0LWZvcndhcmQgY29tbWl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaW50byBhbiBlbXB0eSBoZWFkIgorbXNnc3RyICLliLDnqbrliIbmlK/nmoTpnZ7lv6vov5vlvI/mj5DkuqTmsqHmnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIiVzIC0gbm90IHNvbWV0aGluZyB3ZSBjYW4gbWVyZ2UiCittc2dzdHIgIiVzIC0g5LiN6IO96KKr5ZCI5bm2IgorCisjOiBidWlsdGluL21lcmdlLmM6MTI3OAorbXNnaWQgIkNhbiBtZXJnZSBvbmx5IGV4YWN0bHkgb25lIGNvbW1pdCBpbnRvIGVtcHR5IGhlYWQiCittc2dzdHIgIuWPquiDveWwhuS4gOS4quaPkOS6pOWQiOW5tuWIsOepuuWIhuaUr+S4iiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSwgYWxsZWdlZGx5IGJ5ICVzLiIKK21zZ3N0ciAi5o+Q5LqkICVzIOacieS4gOS4qumdnuWPr+S/oeeahOWjsOensOadpeiHqiAlcyDnmoQgR1BHIOetvuWQjeOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIGFsbGVnZWRseSBieSAlcy4iCittc2dzdHIgIuaPkOS6pCAlcyDmnInkuIDkuKrplJnor6/nmoTlo7Dnp7DmnaXoh6ogJXMg55qEIEdQRyDnrb7lkI3jgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxMzM5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvbW1pdCAlcyBkb2VzIG5vdCBoYXZlIGEgR1BHIHNpZ25hdHVyZS4iCittc2dzdHIgIuaPkOS6pCAlcyDmsqHmnInkuIDkuKogR1BHIOetvuWQjeOAgiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjEzNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ29tbWl0ICVzIGhhcyBhIGdvb2QgR1BHIHNpZ25hdHVyZSBieSAlc1xuIgorbXNnc3RyICLmj5DkuqQgJXMg5pyJ5LiA5Liq5p2l6IeqICVzIOeahOWlveeahCBHUEcg562+5ZCN44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDIzCisjLCBjLWZvcm1hdAorbXNnaWQgIlVwZGF0aW5nICVzLi4lc1xuIgorbXNnc3RyICLmm7TmlrAgJXMuLiVzXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNDYyCisjLCBjLWZvcm1hdAorbXNnaWQgIlRyeWluZyByZWFsbHkgdHJpdmlhbCBpbi1pbmRleCBtZXJnZS4uLlxuIgorbXNnc3RyICLlsJ3or5XpnZ7luLjlsI/nmoTntKLlvJXlhoXlkIjlubYuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE0NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm9wZS5cbiIKK21zZ3N0ciAi5peg44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTAxCittc2dpZCAiTm90IHBvc3NpYmxlIHRvIGZhc3QtZm9yd2FyZCwgYWJvcnRpbmcuIgorbXNnc3RyICLml6Dms5Xlv6vov5vvvIznu4jmraLjgIIiCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTI0IGJ1aWx0aW4vbWVyZ2UuYzoxNjAzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJld2luZGluZyB0aGUgdHJlZSB0byBwcmlzdGluZS4uLlxuIgorbXNnc3RyICLlsIbmoJHlm57mu5roh7Pljp/lp4vnirbmgIEuLi5cbiIKKworIzogYnVpbHRpbi9tZXJnZS5jOjE1MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiVHJ5aW5nIG1lcmdlIHN0cmF0ZWd5ICVzLi4uXG4iCittc2dzdHIgIuWwneivleWQiOW5tuetlueVpSAlcy4uLlxuIgorCisjOiBidWlsdGluL21lcmdlLmM6MTU5NAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtZXJnZSBzdHJhdGVneSBoYW5kbGVkIHRoZSBtZXJnZS5cbiIKK21zZ3N0ciAi5rKh5pyJ5ZCI5bm2562W55Wl5aSE55CG5q2k5ZCI5bm244CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIk1lcmdlIHdpdGggc3RyYXRlZ3kgJXMgZmFpbGVkLlxuIgorbXNnc3RyICLkvb/nlKjnrZbnlaUgJXMg5ZCI5bm25aSx6LSl44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjA1CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzaW5nIHRoZSAlcyB0byBwcmVwYXJlIHJlc29sdmluZyBieSBoYW5kLlxuIgorbXNnc3RyICLkvb/nlKggJXMg5Lul5YeG5aSH5omL5bel6Kej5Yaz44CCXG4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UuYzoxNjE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF1dG9tYXRpYyBtZXJnZSB3ZW50IHdlbGw7IHN0b3BwZWQgYmVmb3JlIGNvbW1pdHRpbmcgYXMgcmVxdWVzdGVkXG4iCittc2dzdHIgIuiHquWKqOWQiOW5tui/m+WxlemhuuWIqe+8jOaMieimgeaxguWcqOaPkOS6pOWJjeWBnOatolxuIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyOQorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSA8Y29tbWl0PiA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgWy1hIHwgLS1hbGxdIDzmj5DkuqQ+IDzmj5DkuqQ+Li4uIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMAorbXNnaWQgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPGNvbW1pdD4uLi4iCittc2dzdHIgImdpdCBtZXJnZS1iYXNlIFstYSB8IC0tYWxsXSAtLW9jdG9wdXMgPOaPkOS6pD4uLi4iCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjMxCittc2dpZCAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCA85o+Q5LqkPi4uLiIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MzIKK21zZ2lkICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDxjb21taXQ+IDxjb21taXQ+IgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWlzLWFuY2VzdG9yIDzmj5DkuqQ+IDzmj5DkuqQ+IgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzozMworbXNnaWQgImdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCA8cmVmPiBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgbWVyZ2UtYmFzZSAtLWZvcmstcG9pbnQgPOW8leeUqD4gWzzmj5DkuqQ+XSIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjE0Cittc2dpZCAib3V0cHV0IGFsbCBjb21tb24gYW5jZXN0b3JzIgorbXNnc3RyICLovpPlh7rmiYDmnInlhbHlkIznmoTnpZblhYgiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtYmFzZS5jOjIxNgorbXNnaWQgImZpbmQgYW5jZXN0b3JzIGZvciBhIHNpbmdsZSBuLXdheSBtZXJnZSIKK21zZ3N0ciAi5p+l5om+5LiA5Liq5aSa6Lev5ZCI5bm255qE56WW5YWI5o+Q5LqkIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMTgKK21zZ2lkICJsaXN0IHJldnMgbm90IHJlYWNoYWJsZSBmcm9tIG90aGVycyIKK21zZ3N0ciAi5pi+56S65LiN6IO96KKr5YW25LuW6K6/6Zeu5Yiw55qE54mI5pysIgorCisjOiBidWlsdGluL21lcmdlLWJhc2UuYzoyMjAKK21zZ2lkICJpcyB0aGUgZmlyc3Qgb25lIGFuY2VzdG9yIG9mIHRoZSBvdGhlcj8iCittc2dzdHIgIuesrOS4gOS4quaYr+WFtuS7lueahOelluWFiOaPkOS6pOS5iO+8nyIKKworIzogYnVpbHRpbi9tZXJnZS1iYXNlLmM6MjIyCittc2dpZCAiZmluZCB3aGVyZSA8Y29tbWl0PiBmb3JrZWQgZnJvbSByZWZsb2cgb2YgPHJlZj4iCittc2dzdHIgIuagueaNriA85byV55SoPiDnmoTlvJXnlKjml6Xlv5fmn6Xmib4gPOaPkOS6pD4g55qE5rS+55Sf5aSEIgorCisjOiBidWlsdGluL21lcmdlLWZpbGUuYzo4Cittc2dpZCAiIgorImdpdCBtZXJnZS1maWxlIFs8b3B0aW9ucz5dIFstTCA8bmFtZTE+IFstTCA8b3JpZz4gWy1MIDxuYW1lMj5dXV0gPGZpbGUxPiAiCisiPG9yaWctZmlsZT4gPGZpbGUyPiIKK21zZ3N0ciAiIgorImdpdCBtZXJnZS1maWxlIFs86YCJ6aG5Pl0gWy1MIDzmlofku7YxPiBbLUwgPOWIneWniz4gWy1MIDzlkI3lrZcyPl1dXSA85paH5Lu2MT4gPOWIneWni+aWhyIKKyLku7Y+IDzmlofku7YyPiIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzMKK21zZ2lkICJzZW5kIHJlc3VsdHMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLlsIbnu5Pmnpzlj5HpgIHliLDmoIflh4bovpPlh7oiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM0Cittc2dpZCAidXNlIGEgZGlmZjMgYmFzZWQgbWVyZ2UiCittc2dzdHIgIuS9v+eUqOWfuuS6jiBkaWZmMyDnmoTlkIjlubYiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM1Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIG91ciB2ZXJzaW9uIgorbXNnc3RyICLlpoLmnpzlhrLnqoHvvIzkvb/nlKjmiJHku6znmoTniYjmnKwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjM3Cittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoZWlyIHZlcnNpb24iCittc2dzdHIgIuWmguaenOWGsueqge+8jOS9v+eUqOS7luS7rOeahOeJiOacrCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6MzkKK21zZ2lkICJmb3IgY29uZmxpY3RzLCB1c2UgYSB1bmlvbiB2ZXJzaW9uIgorbXNnc3RyICLlpoLmnpzlhrLnqoHvvIzkvb/nlKjogZTlkIjniYjmnKwiCisKKyM6IGJ1aWx0aW4vbWVyZ2UtZmlsZS5jOjQyCittc2dpZCAiZm9yIGNvbmZsaWN0cywgdXNlIHRoaXMgbWFya2VyIHNpemUiCittc2dzdHIgIuWmguaenOWGsueqge+8jOS9v+eUqOaMh+WumumVv+W6pueahOagh+iusCIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDMKK21zZ2lkICJkbyBub3Qgd2FybiBhYm91dCBjb25mbGljdHMiCittc2dzdHIgIuS4jeimgeitpuWRiuWGsueqgSIKKworIzogYnVpbHRpbi9tZXJnZS1maWxlLmM6NDUKK21zZ2lkICJzZXQgbGFiZWxzIGZvciBmaWxlMS9vcmlnLWZpbGUvZmlsZTIiCittc2dzdHIgIuS4uiDmlofku7YxL+WIneWni+aWh+S7ti/mlofku7YyIOiuvue9ruagh+etviIKKworIzogYnVpbHRpbi9ta3RyZWUuYzo2NAorbXNnaWQgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCittc2dzdHIgImdpdCBta3RyZWUgWy16XSBbLS1taXNzaW5nXSBbLS1iYXRjaF0iCisKKyM6IGJ1aWx0aW4vbWt0cmVlLmM6MTUwCittc2dpZCAiaW5wdXQgaXMgTlVMIHRlcm1pbmF0ZWQiCittc2dzdHIgIui+k+WFpeS7pSBOVUwg5a2X56ym57uI5q2iIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MSBidWlsdGluL3dyaXRlLXRyZWUuYzoyNAorbXNnaWQgImFsbG93IG1pc3Npbmcgb2JqZWN0cyIKK21zZ3N0ciAi5YWB6K645Lii5aSx55qE5a+56LGhIgorCisjOiBidWlsdGluL21rdHJlZS5jOjE1MgorbXNnaWQgImFsbG93IGNyZWF0aW9uIG9mIG1vcmUgdGhhbiBvbmUgdHJlZSIKK21zZ3N0ciAi5YWB6K645Yib5bu65LiA5Liq5Lul5LiK55qE5qCRIgorCisjOiBidWlsdGluL212LmM6MTUKK21zZ2lkICJnaXQgbXYgWzxvcHRpb25zPl0gPHNvdXJjZT4uLi4gPGRlc3RpbmF0aW9uPiIKK21zZ3N0ciAiZ2l0IG12IFs86YCJ6aG5Pl0gPOa6kD4uLi4gPOebruaghz4iCisKKyM6IGJ1aWx0aW4vbXYuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICJEaXJlY3RvcnkgJXMgaXMgaW4gaW5kZXggYW5kIG5vIHN1Ym1vZHVsZT8iCittc2dzdHIgIuebruW9lSAlcyDlnKjntKLlvJXkuK3lubbkuJTkuI3mmK/lrZDmqKHnu4TvvJ8iCisKKyM6IGJ1aWx0aW4vbXYuYzo3MQorbXNnaWQgIlBsZWFzZSBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICLor7flsIbmgqjnmoTkv67mlLnmmoLlrZjliLAgLmdpdG1vZHVsZXMg5Lit5oiW5L+d5a2Y6L+b5bqm5ZCO5YaN57un57utIgorCisjOiBidWlsdGluL212LmM6ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJS4qcyBpcyBpbiBpbmRleCIKK21zZ3N0ciAiJS4qcyDlnKjntKLlvJXkuK0iCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTEKK21zZ2lkICJmb3JjZSBtb3ZlL3JlbmFtZSBldmVuIGlmIHRhcmdldCBleGlzdHMiCittc2dzdHIgIuW8uuWItuenu+WKqC/ph43lkb3ku6TvvIzljbPkvb/nm67moIflrZjlnKgiCisKKyM6IGJ1aWx0aW4vbXYuYzoxMTIKK21zZ2lkICJza2lwIG1vdmUvcmVuYW1lIGVycm9ycyIKK21zZ3N0ciAi6Lez6L+H56e75YqoL+mHjeWRveWQjemUmeivryIKKworIzogYnVpbHRpbi9tdi5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJkZXN0aW5hdGlvbiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeSIKK21zZ3N0ciAi55uu5qCHICclcycg5LiN5piv5LiA5Liq55uu5b2VIgorCisjOiBidWlsdGluL212LmM6MTYyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNoZWNraW5nIHJlbmFtZSBvZiAnJXMnIHRvICclcydcbiIKK21zZ3N0ciAi5qOA5p+lICclcycg5YiwICclcycg55qE6YeN5ZG95ZCNXG4iCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjYKK21zZ2lkICJiYWQgc291cmNlIgorbXNnc3RyICLlnY/nmoTmupAiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNjkKK21zZ2lkICJjYW4gbm90IG1vdmUgZGlyZWN0b3J5IGludG8gaXRzZWxmIgorbXNnc3RyICLkuI3og73lsIbnm67lvZXnp7vliqjliLDoh6rouqsiCisKKyM6IGJ1aWx0aW4vbXYuYzoxNzIKK21zZ2lkICJjYW5ub3QgbW92ZSBkaXJlY3Rvcnkgb3ZlciBmaWxlIgorbXNnc3RyICLkuI3og73lsIbnm67lvZXnp7vliqjliLDmlofku7YiCisKKyM6IGJ1aWx0aW4vbXYuYzoxODEKK21zZ2lkICJzb3VyY2UgZGlyZWN0b3J5IGlzIGVtcHR5IgorbXNnc3RyICLmupDnm67lvZXkuLrnqboiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMDYKK21zZ2lkICJub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIgorbXNnc3RyICLkuI3lnKjniYjmnKzmjqfliLbkuYvkuIsiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMDkKK21zZ2lkICJkZXN0aW5hdGlvbiBleGlzdHMiCittc2dzdHIgIuebruagh+W3suWtmOWcqCIKKworIzogYnVpbHRpbi9tdi5jOjIxNworIywgYy1mb3JtYXQKK21zZ2lkICJvdmVyd3JpdGluZyAnJXMnIgorbXNnc3RyICLopobnm5YgJyVzJyIKKworIzogYnVpbHRpbi9tdi5jOjIyMAorbXNnaWQgIkNhbm5vdCBvdmVyd3JpdGUiCittc2dzdHIgIuS4jeiDveimhuebliIKKworIzogYnVpbHRpbi9tdi5jOjIyMworbXNnaWQgIm11bHRpcGxlIHNvdXJjZXMgZm9yIHRoZSBzYW1lIHRhcmdldCIKK21zZ3N0ciAi5ZCM5LiA55uu5qCH5YW35pyJ5aSa5Liq5rqQIgorCisjOiBidWlsdGluL212LmM6MjI1Cittc2dpZCAiZGVzdGluYXRpb24gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IgorbXNnc3RyICLnm67moIfnm67lvZXkuI3lrZjlnKgiCisKKyM6IGJ1aWx0aW4vbXYuYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMsIHNvdXJjZT0lcywgZGVzdGluYXRpb249JXMiCittc2dzdHIgIiVz77yM5rqQPSVz77yM55uu5qCHPSVzIgorCisjOiBidWlsdGluL212LmM6MjUzCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbmFtaW5nICVzIHRvICVzXG4iCittc2dzdHIgIumHjeWRveWQjSAlcyDoh7MgJXNcbiIKKworIzogYnVpbHRpbi9tdi5jOjI1NiBidWlsdGluL3JlbW90ZS5jOjcyMiBidWlsdGluL3JlcGFjay5jOjM2MgorIywgYy1mb3JtYXQKK21zZ2lkICJyZW5hbWluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi6YeN5ZG95ZCNICclcycg5aSx6LSlIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MjU1Cittc2dpZCAiZ2l0IG5hbWUtcmV2IFs8b3B0aW9ucz5dIDxjb21taXQ+Li4uIgorbXNnc3RyICJnaXQgbmFtZS1yZXYgWzzpgInpobk+XSA85o+Q5LqkPi4uLiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjI1NgorbXNnaWQgImdpdCBuYW1lLXJldiBbPG9wdGlvbnM+XSAtLWFsbCIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs86YCJ6aG5Pl0gLS1hbGwiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzoyNTcKK21zZ2lkICJnaXQgbmFtZS1yZXYgWzxvcHRpb25zPl0gLS1zdGRpbiIKK21zZ3N0ciAiZ2l0IG5hbWUtcmV2IFs86YCJ6aG5Pl0gLS1zdGRpbiIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMwOQorbXNnaWQgInByaW50IG9ubHkgbmFtZXMgKG5vIFNIQS0xKSIKK21zZ3N0ciAi5Y+q5omT5Y2w5ZCN56ew77yI5pegIFNIQS0x77yJIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzEwCittc2dpZCAib25seSB1c2UgdGFncyB0byBuYW1lIHRoZSBjb21taXRzIgorbXNnc3RyICLlj6rkvb/nlKjmoIfnrb7mnaXlkb3lkI3mj5DkuqQiCisKKyM6IGJ1aWx0aW4vbmFtZS1yZXYuYzozMTIKK21zZ2lkICJvbmx5IHVzZSByZWZzIG1hdGNoaW5nIDxwYXR0ZXJuPiIKK21zZ3N0ciAi5Y+q5L2/55So5ZKMIDzmqKHlvI8+IOebuOWMuemFjeeahOW8leeUqCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxNAorbXNnaWQgImxpc3QgYWxsIGNvbW1pdHMgcmVhY2hhYmxlIGZyb20gYWxsIHJlZnMiCittc2dzdHIgIuWIl+WHuuWPr+S7peS7juaJgOacieW8leeUqOiuv+mXrueahOaPkOS6pCIKKworIzogYnVpbHRpbi9uYW1lLXJldi5jOjMxNQorbXNnaWQgInJlYWQgZnJvbSBzdGRpbiIKK21zZ3N0ciAi5LuO5qCH5YeG6L6T5YWl6K+75Y+WIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzE2Cittc2dpZCAiYWxsb3cgdG8gcHJpbnQgYHVuZGVmaW5lZGAgbmFtZXMgKGRlZmF1bHQpIgorbXNnc3RyICLlhYHorrjmiZPljbAgYOacquWumuS5iWAg55qE5ZCN56ew77yI6buY6K6k77yJIgorCisjOiBidWlsdGluL25hbWUtcmV2LmM6MzIyCittc2dpZCAiZGVyZWZlcmVuY2UgdGFncyBpbiB0aGUgaW5wdXQgKGludGVybmFsIHVzZSkiCittc2dzdHIgIuWPjeWQkeino+aekOi+k+WFpeS4reeahOagh+etvu+8iOWGhemDqOS9v+eUqO+8iSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI1Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gW2xpc3QgWzxvYmplY3Q+XV0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPOazqOino+W8leeUqD5dIFtsaXN0IFs85a+56LGhPl1dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjYKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYWRkIFstZl0gWy0tYWxsb3ctZW1wdHldIFstbSA8bXNnPiB8IC1GIDxmaWxlPiAiCisifCAoLWMgfCAtQykgPG9iamVjdD5dIFs8b2JqZWN0Pl0iCittc2dzdHIgIiIKKyJnaXQgbm90ZXMgWy0tcmVmIDzms6jop6PlvJXnlKg+XSBhZGQgWy1mXSBbLS1hbGxvdy1lbXB0eV0gWy1tIDzor7TmmI4+IHwgLUYgPOaWh+S7tj4gIgorInwgKC1jIHwgLUMpIDzlr7nosaE+XSBbPOWvueixoT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MjcKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBjb3B5IFstZl0gPGZyb20tb2JqZWN0PiA8dG8tb2JqZWN0PiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA85rOo6Kej5byV55SoPl0gY29weSBbLWZdIDzmupDlr7nosaE+IDznm67moIflr7nosaE+IgorCisjOiBidWlsdGluL25vdGVzLmM6MjgKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT4gfCAiCisiKC1jIHwgLUMpIDxvYmplY3Q+XSBbPG9iamVjdD5dIgorbXNnc3RyICIiCisiZ2l0IG5vdGVzIFstLXJlZiA85rOo6Kej5byV55SoPl0gYXBwZW5kIFstLWFsbG93LWVtcHR5XSBbLW0gPOivtOaYjj4gfCAtRiA85paH5Lu2PiB8ICIKKyIoLWMgfCAtQykgPOWvueixoT5dIFs85a+56LGhPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyOQorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPOazqOino+W8leeUqD5dIGVkaXQgWy0tYWxsb3ctZW1wdHldIFs85a+56LGhPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzozMAorbXNnaWQgImdpdCBub3RlcyBbLS1yZWYgPG5vdGVzLXJlZj5dIHNob3cgWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA85rOo6Kej5byV55SoPl0gc2hvdyBbPOWvueixoT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzEKK21zZ2lkICIiCisiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8c3RyYXRlZ3k+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA85rOo6Kej5byV55SoPl0gbWVyZ2UgWy12IHwgLXFdIFstcyA8562W55WlPiBdIDzms6jop6PlvJXnlKg+IgorCisjOiBidWlsdGluL25vdGVzLmM6MzIKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgWy12IHwgLXFdIgorCisjOiBidWlsdGluL25vdGVzLmM6MzMKK21zZ2lkICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbLXYgfCAtcV0iCittc2dzdHIgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFstdiB8IC1xXSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM0Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gcmVtb3ZlIFs8b2JqZWN0Pi4uLl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPOazqOino+W8leeUqD5dIHJlbW92ZSBbPOWvueixoT4uLi5dIgorCisjOiBidWlsdGluL25vdGVzLmM6MzUKK21zZ2lkICJnaXQgbm90ZXMgWy0tcmVmIDxub3Rlcy1yZWY+XSBwcnVuZSBbLW4gfCAtdl0iCittc2dzdHIgImdpdCBub3RlcyBbLS1yZWYgPOazqOino+W8leeUqD5dIHBydW5lIFstbiB8IC12XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM2Cittc2dpZCAiZ2l0IG5vdGVzIFstLXJlZiA8bm90ZXMtcmVmPl0gZ2V0LXJlZiIKK21zZ3N0ciAiZ2l0IG5vdGVzIFstLXJlZiA85rOo6Kej5byV55SoPl0gZ2V0LXJlZiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQxCittc2dpZCAiZ2l0IG5vdGVzIFtsaXN0IFs8b2JqZWN0Pl1dIgorbXNnc3RyICJnaXQgbm90ZXMgW2xpc3QgWzzlr7nosaE+XV0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NgorbXNnaWQgImdpdCBub3RlcyBhZGQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFkZCBbPOmAiemhuT5dIFs85a+56LGhPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MQorbXNnaWQgImdpdCBub3RlcyBjb3B5IFs8b3B0aW9ucz5dIDxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD4iCittc2dzdHIgImdpdCBub3RlcyBjb3B5IFs86YCJ6aG5Pl0gPOa6kOWvueixoT4gPOebruagh+WvueixoT4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MgorbXNnaWQgImdpdCBub3RlcyBjb3B5IC0tc3RkaW4gWzxmcm9tLW9iamVjdD4gPHRvLW9iamVjdD5dLi4uIgorbXNnc3RyICJnaXQgbm90ZXMgY29weSAtLXN0ZGluIFs85rqQ5a+56LGhPiA855uu5qCH5a+56LGhPl0uLi4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1NworbXNnaWQgImdpdCBub3RlcyBhcHBlbmQgWzxvcHRpb25zPl0gWzxvYmplY3Q+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIGFwcGVuZCBbPOmAiemhuT5dIFs85a+56LGhPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2MgorbXNnaWQgImdpdCBub3RlcyBlZGl0IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBlZGl0IFs85a+56LGhPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo2NworbXNnaWQgImdpdCBub3RlcyBzaG93IFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyBzaG93IFs85a+56LGhPl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MgorbXNnaWQgImdpdCBub3RlcyBtZXJnZSBbPG9wdGlvbnM+XSA8bm90ZXMtcmVmPiIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIFs86YCJ6aG5Pl0gPOazqOino+W8leeUqD4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3MworbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0IFs86YCJ6aG5Pl0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NAorbXNnaWQgImdpdCBub3RlcyBtZXJnZSAtLWFib3J0IFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL25vdGVzLmM6NzkKK21zZ2lkICJnaXQgbm90ZXMgcmVtb3ZlIFs8b2JqZWN0Pl0iCittc2dzdHIgImdpdCBub3RlcyByZW1vdmUgWzzlr7nosaE+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg0Cittc2dpZCAiZ2l0IG5vdGVzIHBydW5lIFs8b3B0aW9ucz5dIgorbXNnc3RyICJnaXQgbm90ZXMgcHJ1bmUgWzzpgInpobk+XSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5Cittc2dpZCAiZ2l0IG5vdGVzIGdldC1yZWYiCittc2dzdHIgImdpdCBub3RlcyBnZXQtcmVmIgorCisjOiBidWlsdGluL25vdGVzLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgInVuYWJsZSB0byBzdGFydCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICLkuI3og73kuLrlr7nosaEgJyVzJyDlvIDlp4sgJ3Nob3cnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTUxCittc2dpZCAiY291bGQgbm90IHJlYWQgJ3Nob3cnIG91dHB1dCIKK21zZ3N0ciAi5LiN6IO96K+75Y+WICdzaG93JyDnmoTovpPlh7oiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxNTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGZpbmlzaCAnc2hvdycgZm9yIG9iamVjdCAnJXMnIgorbXNnc3RyICLml6Dms5XkuLrlr7nosaEgJyVzJyDlrozmiJAgJ3Nob3cnIgorCisjOiBidWlsdGluL25vdGVzLmM6MTc0IGJ1aWx0aW4vdGFnLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCBjcmVhdGUgZmlsZSAnJXMnIgorbXNnc3RyICLkuI3og73liJvlu7rmlofku7YgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjE5MworbXNnaWQgIlBsZWFzZSBzdXBwbHkgdGhlIG5vdGUgY29udGVudHMgdXNpbmcgZWl0aGVyIC1tIG9yIC1GIG9wdGlvbiIKK21zZ3N0ciAi6K+36YCa6L+HIC1tIOaIliAtRiDpgInpobnkuLrms6jop6Pmj5DkvpvlhoXlrrkiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyMDIKK21zZ2lkICJ1bmFibGUgdG8gd3JpdGUgbm90ZSBvYmplY3QiCittc2dzdHIgIuS4jeiDveWGmeazqOino+WvueixoSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIwNAorIywgYy1mb3JtYXQKK21zZ2lkICJUaGUgbm90ZSBjb250ZW50cyBoYXZlIGJlZW4gbGVmdCBpbiAlcyIKK21zZ3N0ciAi5rOo6Kej5YaF5a656KKr55WZ5ZyoICVzIOS4rSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIzMiBidWlsdGluL3RhZy5jOjY5NQorIywgYy1mb3JtYXQKK21zZ2lkICJjYW5ub3QgcmVhZCAnJXMnIgorbXNnc3RyICLkuI3og73or7vlj5YgJyVzJyIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjIzNCBidWlsdGluL3RhZy5jOjY5OAorIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZCBub3Qgb3BlbiBvciByZWFkICclcyciCittc2dzdHIgIuS4jeiDveaJk+W8gOaIluivu+WPliAnJXMnIgorCisjOiBidWlsdGluL25vdGVzLmM6MjUzIGJ1aWx0aW4vbm90ZXMuYzozMDQgYnVpbHRpbi9ub3Rlcy5jOjMwNgorIzogYnVpbHRpbi9ub3Rlcy5jOjM2NiBidWlsdGluL25vdGVzLmM6NDIxIGJ1aWx0aW4vbm90ZXMuYzo1MDcKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTIgYnVpbHRpbi9ub3Rlcy5jOjU5MCBidWlsdGluL25vdGVzLmM6NjUzCisjOiBidWlsdGluL25vdGVzLmM6ODc3IGJ1aWx0aW4vdGFnLmM6NzExCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCByZWYuIgorbXNnc3RyICLml6Dms5Xop6PmnpAgJyVzJyDkuLrkuIDkuKrmnInmlYjlvJXnlKjjgIIiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlYWQgb2JqZWN0ICclcycuIgorbXNnc3RyICLml6Dms5Xor7vlj5blr7nosaEgJyVzJ+OAgiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjI2MAorIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgcmVhZCBub3RlIGRhdGEgZnJvbSBub24tYmxvYiBvYmplY3QgJyVzJy4iCittc2dzdHIgIuS4jeiDveS7jumdnuaVsOaNruWvueixoSAnJXMnIOS4reivu+WPluazqOino+aVsOaNriIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM1OSBidWlsdGluL25vdGVzLmM6NDE0IGJ1aWx0aW4vbm90ZXMuYzo0OTAKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MDIgYnVpbHRpbi9ub3Rlcy5jOjU3OCBidWlsdGluL25vdGVzLmM6NjQ2CisjOiBidWlsdGluL25vdGVzLmM6OTQyCittc2dpZCAidG9vIG1hbnkgcGFyYW1ldGVycyIKK21zZ3N0ciAi5Y+C5pWw5aSq5aSaIgorCisjOiBidWlsdGluL25vdGVzLmM6MzcyIGJ1aWx0aW4vbm90ZXMuYzo2NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gbm90ZSBmb3VuZCBmb3Igb2JqZWN0ICVzLiIKK21zZ3N0ciAi5pyq5Y+R546w5a+56LGhICVzIOeahOazqOino+OAgiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjM5MyBidWlsdGluL25vdGVzLmM6NTU2Cittc2dpZCAibm90ZSBjb250ZW50cyBhcyBhIHN0cmluZyIKK21zZ3N0ciAi5rOo6Kej5YaF5a655L2c5Li65LiA5Liq5a2X56ym5LiyIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzk2IGJ1aWx0aW4vbm90ZXMuYzo1NTkKK21zZ2lkICJub3RlIGNvbnRlbnRzIGluIGEgZmlsZSIKK21zZ3N0ciAi5rOo6Kej5YaF5a655Yiw5LiA5Liq5paH5Lu25LitIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzk4IGJ1aWx0aW4vbm90ZXMuYzo0MDEgYnVpbHRpbi9ub3Rlcy5jOjU2MQorIzogYnVpbHRpbi9ub3Rlcy5jOjU2NCBidWlsdGluL3RhZy5jOjYzMAorbXNnaWQgIm9iamVjdCIKK21zZ3N0ciAi5a+56LGhIgorCisjOiBidWlsdGluL25vdGVzLmM6Mzk5IGJ1aWx0aW4vbm90ZXMuYzo1NjIKK21zZ2lkICJyZXVzZSBhbmQgZWRpdCBzcGVjaWZpZWQgbm90ZSBvYmplY3QiCittc2dzdHIgIumHjeeUqOWSjOe8lui+keaMh+WumueahOazqOino+WvueixoSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQwMiBidWlsdGluL25vdGVzLmM6NTY1Cittc2dpZCAicmV1c2Ugc3BlY2lmaWVkIG5vdGUgb2JqZWN0IgorbXNnc3RyICLph43nlKjmjIflrprnmoTms6jop6Plr7nosaEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MDUgYnVpbHRpbi9ub3Rlcy5jOjU2OAorbXNnaWQgImFsbG93IHN0b3JpbmcgZW1wdHkgbm90ZSIKK21zZ3N0ciAi5YWB6K645L+d5a2Y56m655m95rOo6YeKIgorCisjOiBidWlsdGluL25vdGVzLmM6NDA2IGJ1aWx0aW4vbm90ZXMuYzo0NzcKK21zZ2lkICJyZXBsYWNlIGV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLmm7/mjaLlt7LlrZjlnKjnmoTms6jop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBhZGQgbm90ZXMuIEZvdW5kIGV4aXN0aW5nIG5vdGVzIGZvciBvYmplY3QgJXMuIFVzZSAnLWYnIHRvIG92ZXJ3cml0ZSAiCisiZXhpc3Rpbmcgbm90ZXMiCittc2dzdHIgIuS4jeiDvea3u+WKoOazqOino+OAguWPkeeOsOWvueixoSAlcyDlt7LlrZjlnKjms6jop6PjgILkvb/nlKggJy1mJyDopobnm5bnjrDlrZjms6jop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0NDYgYnVpbHRpbi9ub3Rlcy5jOjUyNQorIywgYy1mb3JtYXQKK21zZ2lkICJPdmVyd3JpdGluZyBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIuimhuebluWvueixoSAlcyDnjrDlrZjms6jop6NcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ1NyBidWlsdGluL25vdGVzLmM6NjE4IGJ1aWx0aW4vbm90ZXMuYzo4ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgbm90ZSBmb3Igb2JqZWN0ICVzXG4iCittc2dzdHIgIuWIoOmZpOWvueixoSAlcyDnmoTms6jop6NcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjQ3OAorbXNnaWQgInJlYWQgb2JqZWN0cyBmcm9tIHN0ZGluIgorbXNnc3RyICLku47moIflh4bovpPlhaXor7vlj5blr7nosaEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo0ODAKK21zZ2lkICJsb2FkIHJld3JpdGluZyBjb25maWcgZm9yIDxjb21tYW5kPiAoaW1wbGllcyAtLXN0ZGluKSIKK21zZ3N0ciAi6YeN5paw5Yqg6L29IDzlkb3ku6Q+IOeahOmFjee9ru+8iOmakOWQqyAtLXN0ZGlu77yJIgorCisjOiBidWlsdGluL25vdGVzLmM6NDk4Cittc2dpZCAidG9vIGZldyBwYXJhbWV0ZXJzIgorbXNnc3RyICLlj4LmlbDlpKrlsJEiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo1MTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBjb3B5IG5vdGVzLiBGb3VuZCBleGlzdGluZyBub3RlcyBmb3Igb2JqZWN0ICVzLiBVc2UgJy1mJyB0byBvdmVyd3JpdGUgIgorImV4aXN0aW5nIG5vdGVzIgorbXNnc3RyICLkuI3og73mi7fotJ3ms6jop6PjgILlj5HnjrDlr7nosaEgJXMg5bey5a2Y5Zyo5rOo6Kej44CC5L2/55SoICctZicg6KaG55uW546w5a2Y5rOo6KejIgorCisjOiBidWlsdGluL25vdGVzLmM6NTMxCisjLCBjLWZvcm1hdAorbXNnaWQgIk1pc3Npbmcgbm90ZXMgb24gc291cmNlIG9iamVjdCAlcy4gQ2Fubm90IGNvcHkuIgorbXNnc3RyICLmupDlr7nosaEgJXMg57y65bCR5rOo6Kej44CC5LiN6IO95ou36LSd44CCIgorCisjOiBidWlsdGluL25vdGVzLmM6NTgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgLW0vLUYvLWMvLUMgb3B0aW9ucyBoYXZlIGJlZW4gZGVwcmVjYXRlZCBmb3IgdGhlICdlZGl0JyBzdWJjb21tYW5kLlxuIgorIlBsZWFzZSB1c2UgJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMnIGluc3RlYWQuXG4iCittc2dzdHIgIiIKKyLlrZDlkb3ku6QgJ2VkaXQnIOeahOmAiemhuSAtbS8tRi8tYy8tQyDlt7LlvIPnlKjjgIJcbiIKKyLor7fmjaLnlKggJ2dpdCBub3RlcyBhZGQgLWYgLW0vLUYvLWMvLUMn44CCXG4iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo3NjQKK21zZ2lkICJHZW5lcmFsIG9wdGlvbnMiCittc2dzdHIgIumAmueUqOmAiemhuSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2NgorbXNnaWQgIk1lcmdlIG9wdGlvbnMiCittc2dzdHIgIuWQiOW5tumAiemhuSIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjc2OAorbXNnaWQgIiIKKyJyZXNvbHZlIG5vdGVzIGNvbmZsaWN0cyB1c2luZyB0aGUgZ2l2ZW4gc3RyYXRlZ3kgKG1hbnVhbC9vdXJzL3RoZWlycy91bmlvbi8iCisiY2F0X3NvcnRfdW5pcSkiCittc2dzdHIgIuS9v+eUqOaMh+WumueahOetlueVpeino+WGs+azqOino+WGsueqgSAobWFudWFsL291cnMvdGhlaXJzL3VuaW9uL2NhdF9zb3J0X3VuaXEpIgorCisjOiBidWlsdGluL25vdGVzLmM6NzcwCittc2dpZCAiQ29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAi5o+Q5Lqk5pyq5ZCI5bm255qE5rOo6KejIgorCisjOiBidWlsdGluL25vdGVzLmM6NzcyCittc2dpZCAiZmluYWxpemUgbm90ZXMgbWVyZ2UgYnkgY29tbWl0dGluZyB1bm1lcmdlZCBub3RlcyIKK21zZ3N0ciAi6YCa6L+H5o+Q5Lqk5pyq5ZCI5bm255qE5rOo6Kej5p2l5a6M5oiQ5rOo6Kej5ZCI5bm2IgorCisjOiBidWlsdGluL25vdGVzLmM6Nzc0Cittc2dpZCAiQWJvcnRpbmcgbm90ZXMgbWVyZ2UgcmVzb2x1dGlvbiIKK21zZ3N0ciAi5Lit5q2i5rOo6Kej5ZCI5bm255qE5pa55qGIIgorCisjOiBidWlsdGluL25vdGVzLmM6Nzc2Cittc2dpZCAiYWJvcnQgbm90ZXMgbWVyZ2UiCittc2dzdHIgIuS4reatouazqOino+WQiOW5tiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg1MworIywgYy1mb3JtYXQKK21zZ2lkICJBIG5vdGVzIG1lcmdlIGludG8gJXMgaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBhdCAlcyIKK21zZ3N0ciAi5LiA5Liq5YiwICVzIOeahOazqOino+WQiOW5tuW3sue7j+WcqCAlcyDmiafooYzkuK0iCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzo4ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiT2JqZWN0ICVzIGhhcyBubyBub3RlXG4iCittc2dzdHIgIuWvueixoSAlcyDmsqHmnInms6jop6NcbiIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjg5MgorbXNnaWQgImF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1leGlzdGVudCBub3RlIGlzIG5vdCBhbiBlcnJvciIKK21zZ3N0ciAi5bCd6K+V5Yig6Zmk5LiN5a2Y5Zyo55qE5rOo6Kej5LiN5piv5LiA5Liq6ZSZ6K+vIgorCisjOiBidWlsdGluL25vdGVzLmM6ODk1Cittc2dpZCAicmVhZCBvYmplY3QgbmFtZXMgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuS7juagh+WHhui+k+WFpeivu+WPluWvueixoeWQjeensCIKKworIzogYnVpbHRpbi9ub3Rlcy5jOjk3NgorbXNnaWQgIm5vdGVzLXJlZiIKK21zZ3N0ciAi5rOo6Kej5byV55SoIgorCisjOiBidWlsdGluL25vdGVzLmM6OTc3Cittc2dpZCAidXNlIG5vdGVzIGZyb20gPG5vdGVzLXJlZj4iCittc2dzdHIgIuS7jiA85rOo6Kej5byV55SoPiDkvb/nlKjms6jop6MiCisKKyM6IGJ1aWx0aW4vbm90ZXMuYzoxMDEyIGJ1aWx0aW4vcmVtb3RlLmM6MTU4OAorIywgYy1mb3JtYXQKK21zZ2lkICJVbmtub3duIHN1YmNvbW1hbmQ6ICVzIgorbXNnc3RyICLmnKrnn6XlrZDlkb3ku6TvvJolcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOAorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs8b3B0aW9ucz4uLi5dIFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICJnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IFs86YCJ6aG5Pi4uLl0gWzwgPOW8leeUqOWIl+ihqD4gfCA8IDzlr7nosaHliJfooag+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyOQorbXNnaWQgIiIKKyJnaXQgcGFjay1vYmplY3RzIFs8b3B0aW9ucz4uLi5dIDxiYXNlLW5hbWU+IFs8IDxyZWYtbGlzdD4gfCA8IDxvYmplY3QtbGlzdD5dIgorbXNnc3RyICJnaXQgcGFjay1vYmplY3RzIFs86YCJ6aG5Pi4uLl0gPGJhc2UtbmFtZT4gWzwgPOW8leeUqOWIl+ihqD4gfCA8IDzlr7nosaHliJfooag+XSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzUgYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiZGVmbGF0ZSBlcnJvciAoJWQpIgorbXNnc3RyICLljovnvKnplJnor68gKCVkKSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzo3NzEKK21zZ2lkICJXcml0aW5nIG9iamVjdHMiCittc2dzdHIgIuWGmeWFpeWvueixoeS4rSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoxMDExCittc2dpZCAiZGlzYWJsaW5nIGJpdG1hcCB3cml0aW5nLCBhcyBzb21lIG9iamVjdHMgYXJlIG5vdCBiZWluZyBwYWNrZWQiCittc2dzdHIgIuemgeeUqCBiaXRtYXAg5YaZ5YWl77yM5Zug5Li65LiA5Lqb5a+56LGh5bCG5LiN5Lya6KKr5omT5YyFIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjIxNzEKK21zZ2lkICJDb21wcmVzc2luZyBvYmplY3RzIgorbXNnc3RyICLljovnvKnlr7nosaHkuK0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU2OAorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uICVzIgorbXNnc3RyICLkuI3mlK/mjIHnmoTntKLlvJXniYjmnKwgJXMiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjU3MgorIywgYy1mb3JtYXQKK21zZ2lkICJiYWQgaW5kZXggdmVyc2lvbiAnJXMnIgorbXNnc3RyICLlnY/nmoTntKLlvJXniYjmnKwgJyVzJyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjAyCittc2dpZCAiZG8gbm90IHNob3cgcHJvZ3Jlc3MgbWV0ZXIiCittc2dzdHIgIuS4jeaYvuekuui/m+W6puihqCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjA0Cittc2dpZCAic2hvdyBwcm9ncmVzcyBtZXRlciIKK21zZ3N0ciAi5pi+56S66L+b5bqm6KGoIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDYKK21zZ2lkICJzaG93IHByb2dyZXNzIG1ldGVyIGR1cmluZyBvYmplY3Qgd3JpdGluZyBwaGFzZSIKK21zZ3N0ciAi5Zyo5a+56LGh5YaZ5YWl6Zi25q615pi+56S66L+b5bqm6KGoIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MDkKK21zZ2lkICJzaW1pbGFyIHRvIC0tYWxsLXByb2dyZXNzIHdoZW4gcHJvZ3Jlc3MgbWV0ZXIgaXMgc2hvd24iCittc2dzdHIgIuW9k+i/m+W6puihqOaYvuekuuaXtuexu+S8vOS6jiAtLWFsbC1wcm9ncmVzcyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjEwCittc2dpZCAidmVyc2lvblssb2Zmc2V0XSIKK21zZ3N0ciAi54mI5pysWyzlgY/np7tdIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTEKK21zZ2lkICJ3cml0ZSB0aGUgcGFjayBpbmRleCBmaWxlIGluIHRoZSBzcGVjaWZpZWQgaWR4IGZvcm1hdCB2ZXJzaW9uIgorbXNnc3RyICLnlKjmjIflrprnmoQgaWR4IOagvOW8j+eJiOacrOadpeWGmeWMhee0ouW8leaWh+S7tiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE0Cittc2dpZCAibWF4aW11bSBzaXplIG9mIGVhY2ggb3V0cHV0IHBhY2sgZmlsZSIKK21zZ3N0ciAi5q+P5Liq6L6T5Ye65YyF55qE5pyA5aSn5bC65a+4IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MTYKK21zZ2lkICJpZ25vcmUgYm9ycm93ZWQgb2JqZWN0cyBmcm9tIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUiCittc2dzdHIgIuW/veeVpeS7juWkh+eUqOWvueixoeWtmOWCqOmHjOWAn+eUqOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjE4Cittc2dpZCAiaWdub3JlIHBhY2tlZCBvYmplY3RzIgorbXNnc3RyICLlv73nlaXljIXlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYyMAorbXNnaWQgImxpbWl0IHBhY2sgd2luZG93IGJ5IG9iamVjdHMiCittc2dzdHIgIumZkOWItuaJk+WMheeql+WPo+eahOWvueixoeaVsCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjIyCittc2dpZCAibGltaXQgcGFjayB3aW5kb3cgYnkgbWVtb3J5IGluIGFkZGl0aW9uIHRvIG9iamVjdCBsaW1pdCIKK21zZ3N0ciAi6Zmk5a+56LGh5pWw6YeP6ZmQ5Yi25aSW6K6+572u5omT5YyF56qX5Y+j55qE5YaF5a2Y6ZmQ5Yi2IgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjQKK21zZ2lkICJtYXhpbXVtIGxlbmd0aCBvZiBkZWx0YSBjaGFpbiBhbGxvd2VkIGluIHRoZSByZXN1bHRpbmcgcGFjayIKK21zZ3N0ciAi5omT5YyF5YWB6K6455qEIGRlbHRhIOmTvueahOacgOWkp+mVv+W6piIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjI2Cittc2dpZCAicmV1c2UgZXhpc3RpbmcgZGVsdGFzIgorbXNnc3RyICLph43nlKjlt7LlrZjlnKjnmoQgZGVsdGFzIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MjgKK21zZ2lkICJyZXVzZSBleGlzdGluZyBvYmplY3RzIgorbXNnc3RyICLph43nlKjlt7LlrZjlnKjnmoTlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzMAorbXNnaWQgInVzZSBPRlNfREVMVEEgb2JqZWN0cyIKK21zZ3N0ciAi5L2/55SoIE9GU19ERUxUQSDlr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzMgorbXNnaWQgInVzZSB0aHJlYWRzIHdoZW4gc2VhcmNoaW5nIGZvciBiZXN0IGRlbHRhIG1hdGNoZXMiCittc2dzdHIgIuS9v+eUqOe6v+eoi+afpeivouacgOS9syBkZWx0YSDljLnphY0iCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjYzNAorbXNnaWQgImRvIG5vdCBjcmVhdGUgYW4gZW1wdHkgcGFjayBvdXRwdXQiCittc2dzdHIgIuS4jeWIm+W7uuepuueahOWMhei+k+WHuiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjM2Cittc2dpZCAicmVhZCByZXZpc2lvbiBhcmd1bWVudHMgZnJvbSBzdGFuZGFyZCBpbnB1dCIKK21zZ3N0ciAi5LuO5qCH5YeG6L6T5YWl6K+75Y+W54mI5pys5Y+35Y+C5pWwIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2MzgKK21zZ2lkICJsaW1pdCB0aGUgb2JqZWN0cyB0byB0aG9zZSB0aGF0IGFyZSBub3QgeWV0IHBhY2tlZCIKK21zZ3N0ciAi6ZmQ5Yi26YKj5Lqb5bCa5pyq5omT5YyF55qE5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDEKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVhY2hhYmxlIGZyb20gYW55IHJlZmVyZW5jZSIKK21zZ3N0ciAi5YyF5ous5Y+v5Lul5LuO5Lu75L2V5byV55So6K6/6Zeu5Yiw55qE5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NDQKK21zZ2lkICJpbmNsdWRlIG9iamVjdHMgcmVmZXJyZWQgYnkgcmVmbG9nIGVudHJpZXMiCittc2dzdHIgIuWMheaLrOiiq+W8leeUqOaXpeW/l+W8leeUqOWIsOeahOWvueixoSIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjQ3Cittc2dpZCAiaW5jbHVkZSBvYmplY3RzIHJlZmVycmVkIHRvIGJ5IHRoZSBpbmRleCIKK21zZ3N0ciAi5YyF5ous6KKr57Si5byV5byV55So5Yiw55qE5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTAKK21zZ2lkICJvdXRwdXQgcGFjayB0byBzdGRvdXQiCittc2dzdHIgIui+k+WHuuWMheWIsOagh+WHhui+k+WHuiIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjUyCittc2dpZCAiaW5jbHVkZSB0YWcgb2JqZWN0cyB0aGF0IHJlZmVyIHRvIG9iamVjdHMgdG8gYmUgcGFja2VkIgorbXNnc3RyICLljIXmi6zpgqPkupvlvJXnlKjkuoblvoXmiZPljIXlr7nosaHnmoTmoIfnrb7lr7nosaEiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1NAorbXNnaWQgImtlZXAgdW5yZWFjaGFibGUgb2JqZWN0cyIKK21zZ3N0ciAi57u05oyB5LiN5Y+v6L6+55qE5a+56LGhIgorCisjOiBidWlsdGluL3BhY2stb2JqZWN0cy5jOjI2NTUgcGFyc2Utb3B0aW9ucy5oOjE0MgorbXNnaWQgInRpbWUiCittc2dzdHIgIuaXtumXtCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjU2Cittc2dpZCAidW5wYWNrIHVucmVhY2hhYmxlIG9iamVjdHMgbmV3ZXIgdGhhbiA8dGltZT4iCittc2dzdHIgIuWwhuavlOe7meWumiA85pe26Ze0PiDmlrDnmoTml6Dms5Xorr/pl67nmoTlr7nosaHop6PljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY1OQorbXNnaWQgImNyZWF0ZSB0aGluIHBhY2tzIgorbXNnc3RyICLliJvlu7rnsr7nroDljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2MQorbXNnaWQgImNyZWF0ZSBwYWNrcyBzdWl0YWJsZSBmb3Igc2hhbGxvdyBmZXRjaGVzIgorbXNnc3RyICLliJvlu7rpgILlkIjmtYXlhYvpmobku5PlupPojrflj5bnmoTljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2MworbXNnaWQgImlnbm9yZSBwYWNrcyB0aGF0IGhhdmUgY29tcGFuaW9uIC5rZWVwIGZpbGUiCittc2dzdHIgIuW/veeVpemFjeaciSAua2VlcCDmlofku7bnmoTljIUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6MjY2NQorbXNnaWQgInBhY2sgY29tcHJlc3Npb24gbGV2ZWwiCittc2dzdHIgIuaJk+WMheWOi+e8qee6p+WIqyIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY3Cittc2dpZCAiZG8gbm90IGhpZGUgY29tbWl0cyBieSBncmFmdHMiCittc2dzdHIgIuaYvuekuuiiq+WrgeaOpemakOiXj+eahOaPkOS6pCIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjY5Cittc2dpZCAidXNlIGEgYml0bWFwIGluZGV4IGlmIGF2YWlsYWJsZSB0byBzcGVlZCB1cCBjb3VudGluZyBvYmplY3RzIgorbXNnc3RyICLkvb/nlKggYml0bWFwIOe0ouW8le+8iOWmguaenOacieeahOivne+8ieS7peaPkOmrmOWvueixoeiuoeaVsOaXtueahOmAn+W6piIKKworIzogYnVpbHRpbi9wYWNrLW9iamVjdHMuYzoyNjcxCittc2dpZCAid3JpdGUgYSBiaXRtYXAgaW5kZXggdG9nZXRoZXIgd2l0aCB0aGUgcGFjayBpbmRleCIKK21zZ3N0ciAi5Zyo5bu656uL5YyF57Si5byV55qE5ZCM5pe25Yib5bu6IGJpdG1hcCDntKLlvJUiCisKKyM6IGJ1aWx0aW4vcGFjay1vYmplY3RzLmM6Mjc2MgorbXNnaWQgIkNvdW50aW5nIG9iamVjdHMiCittc2dzdHIgIuWvueixoeiuoeaVsOS4rSIKKworIzogYnVpbHRpbi9wYWNrLXJlZnMuYzo2Cittc2dpZCAiZ2l0IHBhY2stcmVmcyBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHBhY2stcmVmcyBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL3BhY2stcmVmcy5jOjE0Cittc2dpZCAicGFjayBldmVyeXRoaW5nIgorbXNnc3RyICLmiZPljIXkuIDliIciCisKKyM6IGJ1aWx0aW4vcGFjay1yZWZzLmM6MTUKK21zZ2lkICJwcnVuZSBsb29zZSByZWZzIChkZWZhdWx0KSIKK21zZ3N0ciAi5riF6Zmk5p2+5pWj55qE5byV55So77yI6buY6K6k77yJIgorCisjOiBidWlsdGluL3BydW5lLXBhY2tlZC5jOjcKK21zZ2lkICJnaXQgcHJ1bmUtcGFja2VkIFstbiB8IC0tZHJ5LXJ1bl0gWy1xIHwgLS1xdWlldF0iCittc2dzdHIgImdpdCBwcnVuZS1wYWNrZWQgWy1uIHwgLS1kcnktcnVuXSBbLXEgfCAtLXF1aWV0XSIKKworIzogYnVpbHRpbi9wcnVuZS1wYWNrZWQuYzo0MAorbXNnaWQgIlJlbW92aW5nIGR1cGxpY2F0ZSBvYmplY3RzIgorbXNnc3RyICLmraPlnKjliKDpmaTph43lpI3lr7nosaEiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMQorbXNnaWQgImdpdCBwcnVuZSBbLW5dIFstdl0gWy0tZXhwaXJlIDx0aW1lPl0gWy0tXSBbPGhlYWQ+Li4uXSIKK21zZ3N0ciAiZ2l0IHBydW5lIFstbl0gWy12XSBbLS1leHBpcmUgPOaXtumXtD5dIFstLV0gWzzlpLQ+Li4uXSIKKworIzogYnVpbHRpbi9wcnVuZS5jOjEwNSBidWlsdGluL3dvcmt0cmVlLmM6MTIxCittc2dpZCAiZG8gbm90IHJlbW92ZSwgc2hvdyBvbmx5IgorbXNnc3RyICLkuI3liKDpmaTvvIzlj6rmmL7npLoiCisKKyM6IGJ1aWx0aW4vcHJ1bmUuYzoxMDYgYnVpbHRpbi93b3JrdHJlZS5jOjEyMgorbXNnaWQgInJlcG9ydCBwcnVuZWQgb2JqZWN0cyIKK21zZ3N0ciAi5oql5ZGK5riF6Zmk55qE5a+56LGhIgorCisjOiBidWlsdGluL3BydW5lLmM6MTA5IGJ1aWx0aW4vd29ya3RyZWUuYzoxMjQKK21zZ2lkICJleHBpcmUgb2JqZWN0cyBvbGRlciB0aGFuIDx0aW1lPiIKK21zZ3N0ciAi5L2/5pep5LqO57uZ5a6a5pe26Ze055qE5a+56LGh6L+H5pyfIgorCisjOiBidWlsdGluL3B1bGwuYzo2OQorbXNnaWQgImdpdCBwdWxsIFtvcHRpb25zXSBbPHJlcG9zaXRvcnk+IFs8cmVmc3BlYz4uLi5dXSIKK21zZ3N0ciAiZ2l0IHB1bGwgWzzpgInpobk+XSBbPOS7k+W6kz4gWzzlvJXnlKjop4TmoLw+Li4uXV0iCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjExMworbXNnaWQgIk9wdGlvbnMgcmVsYXRlZCB0byBtZXJnaW5nIgorbXNnc3RyICLlkozlkIjlubbnm7jlhbPnmoTpgInpobkiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjExNgorbXNnaWQgImluY29ycG9yYXRlIGNoYW5nZXMgYnkgcmViYXNpbmcgcmF0aGVyIHRoYW4gbWVyZ2luZyIKK21zZ3N0ciAi5L2/55So5Y+Y5Z+65pON5L2c5Y+W5Luj5ZCI5bm25pON5L2c5Lul5ZCI5YWl5L+u5pS5IgorCisjOiBidWlsdGluL3B1bGwuYzoxNDAgYnVpbHRpbi9yZXZlcnQuYzoxMDUKK21zZ2lkICJhbGxvdyBmYXN0LWZvcndhcmQiCittc2dzdHIgIuWFgeiuuOW/q+i/m+W8jyIKKworIzogYnVpbHRpbi9wdWxsLmM6MTQ2Cittc2dpZCAidmVyaWZ5IHRoYXQgdGhlIG5hbWVkIGNvbW1pdCBoYXMgYSB2YWxpZCBHUEcgc2lnbmF0dXJlIgorbXNnc3RyICLpqozor4HmjIflrprnmoTmj5DkuqTmmK/lkKbljIXlkKvkuIDkuKrmnInmlYjnmoQgR1BHIOetvuWQjSIKKworIzogYnVpbHRpbi9wdWxsLmM6MTYwCittc2dpZCAiT3B0aW9ucyByZWxhdGVkIHRvIGZldGNoaW5nIgorbXNnc3RyICLlkozojrflj5bnm7jlhbPnmoTlj4LmlbAiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjI2OAorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIHZhbHVlIGZvciBwdWxsLmZmOiAlcyIKK21zZ3N0ciAicHVsbC5mZiDnmoTlj5blgLzml6DmlYjvvJolcyIKKworIzogYnVpbHRpbi9wdWxsLmM6MzUyCittc2dpZCAiQ2Fubm90IHB1bGwgd2l0aCByZWJhc2U6IFlvdSBoYXZlIHVuc3RhZ2VkIGNoYW5nZXMuIgorbXNnc3RyICLml6Dms5XpgJrov4flj5jln7rmlrnlvI/mi4nlj5bvvJrmgqjmnInmnKrmmoLlrZjnmoTlj5jmm7TjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjM1OAorbXNnaWQgIkFkZGl0aW9uYWxseSwgeW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi6ICM5LiU5oKo55qE57Si5byV5Lit5YyF5ZCr5pyq5o+Q5Lqk55qE5Y+Y5pu044CCIgorCisjOiBidWlsdGluL3B1bGwuYzozNjAKK21zZ2lkICJDYW5ub3QgcHVsbCB3aXRoIHJlYmFzZTogWW91ciBpbmRleCBjb250YWlucyB1bmNvbW1pdHRlZCBjaGFuZ2VzLiIKK21zZ3N0ciAi5peg5rOV6YCa6L+H5Y+Y5Z+65pa55byP5ouJ5Y+W77ya5oKo55qE57Si5byV5Lit5YyF5ZCr5pyq5o+Q5Lqk55qE5Y+Y5pu044CCIgorCisjOiBidWlsdGluL3B1bGwuYzo0MzYKK21zZ2lkICIiCisiVGhlcmUgaXMgbm8gY2FuZGlkYXRlIGZvciByZWJhc2luZyBhZ2FpbnN0IGFtb25nIHRoZSByZWZzIHRoYXQgeW91IGp1c3QgIgorImZldGNoZWQuIgorbXNnc3RyICLlnKjmgqjliJrliJrojrflj5bliLDnmoTlvJXnlKjkuK3msqHmnInlj5jln7rmk43kvZznmoTlgJnpgInjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOAorbXNnaWQgIiIKKyJUaGVyZSBhcmUgbm8gY2FuZGlkYXRlcyBmb3IgbWVyZ2luZyBhbW9uZyB0aGUgcmVmcyB0aGF0IHlvdSBqdXN0IGZldGNoZWQuIgorbXNnc3RyICLlnKjmgqjliJrliJrojrflj5bliLDnmoTlvJXnlKjkuK3msqHmnInlkIjlubbmk43kvZznmoTlgJnpgInjgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQzOQorbXNnaWQgIiIKKyJHZW5lcmFsbHkgdGhpcyBtZWFucyB0aGF0IHlvdSBwcm92aWRlZCBhIHdpbGRjYXJkIHJlZnNwZWMgd2hpY2ggaGFkIG5vXG4iCisibWF0Y2hlcyBvbiB0aGUgcmVtb3RlIGVuZC4iCittc2dzdHIgIumAmuW4uOi/meaEj+WRs+edgOaCqOaPkOS+m+S6huS4gOS4qumAmumFjeespuW8leeUqOinhOagvOS9huacquiDveWSjOi/nOerr+WMuemFjeOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXNrZWQgdG8gcHVsbCBmcm9tIHRoZSByZW1vdGUgJyVzJywgYnV0IGRpZCBub3Qgc3BlY2lmeVxuIgorImEgYnJhbmNoLiBCZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyZWQgcmVtb3RlXG4iCisiZm9yIHlvdXIgY3VycmVudCBicmFuY2gsIHlvdSBtdXN0IHNwZWNpZnkgYSBicmFuY2ggb24gdGhlIGNvbW1hbmQgbGluZS4iCittc2dzdHIgIiIKKyLmgqjopoHmsYLku47ov5znqIsgJyVzJyDmi4nlj5bvvIzkvYbmmK/mnKrmjIflrprkuIDkuKrliIbmlK/jgILlm6DkuLrov5nkuI3mmK/lvZPliY1cbiIKKyLliIbmlK/pu5jorqTnmoTov5znqIvku5PlupPvvIzmgqjlv4XpobvlnKjlkb3ku6TooYzkuK3mjIflrprkuIDkuKrliIbmlK/lkI3jgIIiCisKKyM6IGJ1aWx0aW4vcHVsbC5jOjQ0NworbXNnaWQgIllvdSBhcmUgbm90IGN1cnJlbnRseSBvbiBhIGJyYW5jaC4iCittc2dzdHIgIuaCqOW9k+WJjeS4jeWcqOS4gOS4quWIhuaUr+S4iuOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDQ5IGJ1aWx0aW4vcHVsbC5jOjQ2NAorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byByZWJhc2UgYWdhaW5zdC4iCittc2dzdHIgIuivt+aMh+WumuaCqOimgeWPmOWfuuWIsOWTquS4gOS4quWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6NDUxIGJ1aWx0aW4vcHVsbC5jOjQ2NgorbXNnaWQgIlBsZWFzZSBzcGVjaWZ5IHdoaWNoIGJyYW5jaCB5b3Ugd2FudCB0byBtZXJnZSB3aXRoLiIKK21zZ3N0ciAi6K+35oyH5a6a5oKo6KaB5ZCI5bm25ZOq5LiA5Liq5YiG5pSv44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo0NTIgYnVpbHRpbi9wdWxsLmM6NDY3Cittc2dpZCAiU2VlIGdpdC1wdWxsKDEpIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAi6K+m6KeBIGdpdC1wdWxsKDEp44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo0NjIKK21zZ2lkICJUaGVyZSBpcyBubyB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoLiIKK21zZ3N0ciAi5b2T5YmN5YiG5pSv5rKh5pyJ6Lef6Liq5L+h5oGv44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIHlvdSB3aXNoIHRvIHNldCB0cmFja2luZyBpbmZvcm1hdGlvbiBmb3IgdGhpcyBicmFuY2ggeW91IGNhbiBkbyBzbyB3aXRoOlxuIgorIlxuIgorIiAgICBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSVzLzxicmFuY2g+ICVzXG4iCittc2dzdHIgIiIKKyLlpoLmnpzmgqjmg7PopoHkuLrmraTliIbmlK/liJvlu7rot5/ouKrkv6Hmga/vvIzmgqjlj6/ku6XmiafooYzvvJpcbiIKKyJcbiIKKyIgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz0lcy88YnJhbmNoPiAlc1xuIgorCisjOiBidWlsdGluL3B1bGwuYzo0NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdXIgY29uZmlndXJhdGlvbiBzcGVjaWZpZXMgdG8gbWVyZ2Ugd2l0aCB0aGUgcmVmICclcydcbiIKKyJmcm9tIHRoZSByZW1vdGUsIGJ1dCBubyBzdWNoIHJlZiB3YXMgZmV0Y2hlZC4iCittc2dzdHIgIiIKKyLmgqjnmoTphY3nva7kuK3mjIflrpropoHlkIjlubbov5znqIvnmoTlvJXnlKggJyVzJ++8jFxuIgorIuS9huaYr+ayoeacieiOt+WPluWIsOi/meS4quW8leeUqOOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODMwCittc2dpZCAiVXBkYXRpbmcgYW4gdW5ib3JuIGJyYW5jaCB3aXRoIGNoYW5nZXMgYWRkZWQgdG8gdGhlIGluZGV4LiIKK21zZ3N0ciAi5pu05paw5bCa5pyq6K+e55Sf55qE5YiG5pSv77yM5Y+Y5pu05re75Yqg6Iez57Si5byV44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo4NTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImZldGNoIHVwZGF0ZWQgdGhlIGN1cnJlbnQgYnJhbmNoIGhlYWQuXG4iCisiZmFzdC1mb3J3YXJkaW5nIHlvdXIgd29ya2luZyB0cmVlIGZyb21cbiIKKyJjb21taXQgJXMuIgorbXNnc3RyICIiCisiZmV0Y2gg5pu05paw5LqG5b2T5YmN55qE5YiG5pSv44CC5b+r6L+b5oKo55qE5bel5L2c5Yy6XG4iCisi6Iez5o+Q5LqkICVz44CCIgorCisjOiBidWlsdGluL3B1bGwuYzo4NjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUuXG4iCisiQWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB5b3Ugc2F2ZWQgYW55dGhpbmcgcHJlY2lvdXMgZnJvbVxuIgorIiQgZ2l0IGRpZmYgJXNcbiIKKyJvdXRwdXQsIHJ1blxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorInRvIHJlY292ZXIuIgorbXNnc3RyICIiCisi5oKo5b2T5YmN55qE5bel5L2c5Yy65peg5rOV5omn6KGM5b+r6L+b5pON5L2c44CCXG4iCisi6aaW5YWI5omn6KGM5aaC5LiL5ZG95Luk77yaXG4iCisiJCBnaXQgZGlmZiAlc1xuIgorIuS7peehruiupOaJgOacieacieeUqOeahOaVsOaNruWdh+W3suS/neWtmOOAgueEtuWQjuaJp+ihjOS4i+mdoueahOWRveS7pFxuIgorIiQgZ2l0IHJlc2V0IC0taGFyZFxuIgorIuaBouWkjeS5i+WJjeeahOeKtuaAgeOAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODc5Cittc2dpZCAiQ2Fubm90IG1lcmdlIG11bHRpcGxlIGJyYW5jaGVzIGludG8gZW1wdHkgaGVhZC4iCittc2dzdHIgIuaXoOazleWwhuWkmuS4quWIhuaUr+WQiOW5tuWIsOepuuWIhuaUr+OAgiIKKworIzogYnVpbHRpbi9wdWxsLmM6ODgzCittc2dpZCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzLiIKK21zZ3N0ciAi5peg5rOV5Y+Y5Z+65Yiw5aSa5Liq5YiG5pSv44CCIgorCisjOiBidWlsdGluL3B1c2guYzoxNQorbXNnaWQgImdpdCBwdXNoIFs8b3B0aW9ucz5dIFs8cmVwb3NpdG9yeT4gWzxyZWZzcGVjPi4uLl1dIgorbXNnc3RyICJnaXQgcHVzaCBbPOmAiemhuT5dIFs85LuT5bqTPiBbPOW8leeUqOinhOagvD4uLi5dXSIKKworIzogYnVpbHRpbi9wdXNoLmM6ODYKK21zZ2lkICJ0YWcgc2hvcnRoYW5kIHdpdGhvdXQgPHRhZz4iCittc2dzdHIgIuagh+etvuWQjumdouacquaPkOS+myA85qCH562+PiDlj4LmlbAiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjk2Cittc2dpZCAiLS1kZWxldGUgb25seSBhY2NlcHRzIHBsYWluIHRhcmdldCByZWYgbmFtZXMiCittc2dzdHIgIi0tZGVsZXRlIOWPquaOpeWPl+eugOWNleeahOebruagh+W8leeUqOWQjSIKKworIzogYnVpbHRpbi9wdXNoLmM6MTQwCittc2dpZCAiIgorIlxuIgorIlRvIGNob29zZSBlaXRoZXIgb3B0aW9uIHBlcm1hbmVudGx5LCBzZWUgcHVzaC5kZWZhdWx0IGluICdnaXQgaGVscCBjb25maWcnLiIKK21zZ3N0ciAiIgorIlxuIgorIuS4uuS6huawuOS5heWcsOmAieaLqeS7u+S4gOmAiemhue+8jOWPguingSAnZ2l0IGhlbHAgY29uZmlnJyDkuK3nmoQgcHVzaC5kZWZhdWx044CCIgorCisjOiBidWlsdGluL3B1c2guYzoxNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSB1cHN0cmVhbSBicmFuY2ggb2YgeW91ciBjdXJyZW50IGJyYW5jaCBkb2VzIG5vdCBtYXRjaFxuIgorInRoZSBuYW1lIG9mIHlvdXIgY3VycmVudCBicmFuY2guICBUbyBwdXNoIHRvIHRoZSB1cHN0cmVhbSBicmFuY2hcbiIKKyJvbiB0aGUgcmVtb3RlLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgSEVBRDolc1xuIgorIlxuIgorIlRvIHB1c2ggdG8gdGhlIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lIG9uIHRoZSByZW1vdGUsIHVzZVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyAlc1xuIgorIiVzIgorbXNnc3RyICIiCisi5aaC5p6c5oKo5b2T5YmN5YiG5pSv55qE5LiK5ri45YiG5pSv5ZKM5oKo5b2T5YmN5YiG5pSv5ZCN5LiN5Yy56YWN77yM5Li65o6o6YCB5Yiw6L+c56iL55qEXG4iCisi5LiK5ri45YiG5pSv77yM5L2/55SoXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6JXNcbiIKKyJcbiIKKyLkuLrmjqjpgIHoh7Pov5znqIvlkIzlkI3liIbmlK/vvIzkvb/nlKhcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggJXMgJXNcbiIKKyIlcyIKKworIzogYnVpbHRpbi9wdXNoLmM6MTU4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgYXJlIG5vdCBjdXJyZW50bHkgb24gYSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgaGlzdG9yeSBsZWFkaW5nIHRvIHRoZSBjdXJyZW50IChkZXRhY2hlZCBIRUFEKVxuIgorInN0YXRlIG5vdywgdXNlXG4iCisiXG4iCisiICAgIGdpdCBwdXNoICVzIEhFQUQ6PG5hbWUtb2YtcmVtb3RlLWJyYW5jaD5cbiIKK21zZ3N0ciAiIgorIuaCqOW9k+WJjeS4jeWcqOS4gOS4quWIhuaUr+S4iuOAglxuIgorIueOsOWcqOS4uuaOqOmAgeW9k+WJje+8iOWIhuemu+WktOaMh+mSiO+8ieeahOWOhuWPsu+8jOS9v+eUqFxuIgorIlxuIgorIiAgICBnaXQgcHVzaCAlcyBIRUFEOjzov5znqIvliIbmlK/lkI3lrZc+XG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGN1cnJlbnQgYnJhbmNoICVzIGhhcyBubyB1cHN0cmVhbSBicmFuY2guXG4iCisiVG8gcHVzaCB0aGUgY3VycmVudCBicmFuY2ggYW5kIHNldCB0aGUgcmVtb3RlIGFzIHVwc3RyZWFtLCB1c2VcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKK21zZ3N0ciAiIgorIuW9k+WJjeWIhuaUryAlcyDmsqHmnInlr7nlupTnmoTkuIrmuLjliIbmlK/jgIJcbiIKKyLkuLrmjqjpgIHlvZPliY3liIbmlK/lubblu7rnq4vkuI7ov5znqIvkuIrmuLjnmoTot5/ouKrvvIzkvb/nlKhcbiIKKyJcbiIKKyIgICAgZ2l0IHB1c2ggLS1zZXQtdXBzdHJlYW0gJXMgJXNcbiIKKworIzogYnVpbHRpbi9wdXNoLmM6MTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlRoZSBjdXJyZW50IGJyYW5jaCAlcyBoYXMgbXVsdGlwbGUgdXBzdHJlYW0gYnJhbmNoZXMsIHJlZnVzaW5nIHRvIHB1c2guIgorbXNnc3RyICLlvZPliY3liIbmlK8gJXMg5pyJ5aSa5Liq5LiK5ri45YiG5pSv77yM5ouS57ud5o6o6YCB44CCIgorCisjOiBidWlsdGluL3B1c2guYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBhcmUgcHVzaGluZyB0byByZW1vdGUgJyVzJywgd2hpY2ggaXMgbm90IHRoZSB1cHN0cmVhbSBvZlxuIgorInlvdXIgY3VycmVudCBicmFuY2ggJyVzJywgd2l0aG91dCB0ZWxsaW5nIG1lIHdoYXQgdG8gcHVzaFxuIgorInRvIHVwZGF0ZSB3aGljaCByZW1vdGUgYnJhbmNoLiIKK21zZ3N0ciAiIgorIuaCqOato+aOqOmAgeiHs+i/nOeoiyAnJXMn77yI5YW25bm26Z2e5b2T5YmN5YiG5pSvICclcycg55qE5LiK5ri477yJ77yMXG4iCisi6ICM5rKh5pyJ5ZGK6K+J5oiR6KaB5o6o6YCB5LuA5LmI44CB5pu05paw5ZOq5Liq6L+c56iL5YiG5pSv44CCIgorCisjICDor5HogIXvvJrlrZfnrKbkuLLpppbooYzooYzpppbopoHmt7vliqDigJx3YXJuaW5nOiDigJ3lrZfkuLLvvIzmlYXmraTpppbooYzopoHovoPlhbbkvZnooYznn60KKyM6IGJ1aWx0aW4vcHVzaC5jOjIwNgorbXNnaWQgIiIKKyJwdXNoLmRlZmF1bHQgaXMgdW5zZXQ7IGl0cyBpbXBsaWNpdCB2YWx1ZSBoYXMgY2hhbmdlZCBpblxuIgorIkdpdCAyLjAgZnJvbSAnbWF0Y2hpbmcnIHRvICdzaW1wbGUnLiBUbyBzcXVlbGNoIHRoaXMgbWVzc2FnZVxuIgorImFuZCBtYWludGFpbiB0aGUgdHJhZGl0aW9uYWwgYmVoYXZpb3IsIHVzZTpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisiXG4iCisiVG8gc3F1ZWxjaCB0aGlzIG1lc3NhZ2UgYW5kIGFkb3B0IHRoZSBuZXcgYmVoYXZpb3Igbm93LCB1c2U6XG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyJcbiIKKyJXaGVuIHB1c2guZGVmYXVsdCBpcyBzZXQgdG8gJ21hdGNoaW5nJywgZ2l0IHdpbGwgcHVzaCBsb2NhbCBicmFuY2hlc1xuIgorInRvIHRoZSByZW1vdGUgYnJhbmNoZXMgdGhhdCBhbHJlYWR5IGV4aXN0IHdpdGggdGhlIHNhbWUgbmFtZS5cbiIKKyJcbiIKKyJTaW5jZSBHaXQgMi4wLCBHaXQgZGVmYXVsdHMgdG8gdGhlIG1vcmUgY29uc2VydmF0aXZlICdzaW1wbGUnXG4iCisiYmVoYXZpb3IsIHdoaWNoIG9ubHkgcHVzaGVzIHRoZSBjdXJyZW50IGJyYW5jaCB0byB0aGUgY29ycmVzcG9uZGluZ1xuIgorInJlbW90ZSBicmFuY2ggdGhhdCAnZ2l0IHB1bGwnIHVzZXMgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGJyYW5jaC5cbiIKKyJcbiIKKyJTZWUgJ2dpdCBoZWxwIGNvbmZpZycgYW5kIHNlYXJjaCBmb3IgJ3B1c2guZGVmYXVsdCcgZm9yIGZ1cnRoZXIgIgorImluZm9ybWF0aW9uLlxuIgorIih0aGUgJ3NpbXBsZScgbW9kZSB3YXMgaW50cm9kdWNlZCBpbiBHaXQgMS43LjExLiBVc2UgdGhlIHNpbWlsYXIgbW9kZVxuIgorIidjdXJyZW50JyBpbnN0ZWFkIG9mICdzaW1wbGUnIGlmIHlvdSBzb21ldGltZXMgdXNlIG9sZGVyIHZlcnNpb25zIG9mIEdpdCkiCittc2dzdHIgIiIKKyJwdXNoLmRlZmF1bHQg5bCa5pyq6K6+572u77yM5a6D55qE6buY6K6k5YC85ZyoIEdpdCAyLjAg5bey5LuOICdtYXRjaGluZydcbiIKKyLlj5jmm7TkuLogJ3NpbXBsZSfjgILoi6XopoHkuI3lho3mmL7npLrmnKzkv6Hmga/lubbkv53mjIHkvKDnu5/kuaDmg6/vvIzov5vooYzlpoLkuIvorr7nva7vvJpcbiIKKyJcbiIKKyIgIGdpdCBjb25maWcgLS1nbG9iYWwgcHVzaC5kZWZhdWx0IG1hdGNoaW5nXG4iCisiXG4iCisi6Iul6KaB5LiN5YaN5pi+56S65pys5L+h5oGv5bm25LuO546w5Zyo5byA5aeL6YeH55So5paw55qE5L2/55So5Lmg5oOv77yM6K6+572u77yaXG4iCisiXG4iCisiICBnaXQgY29uZmlnIC0tZ2xvYmFsIHB1c2guZGVmYXVsdCBzaW1wbGVcbiIKKyJcbiIKKyLlvZMgcHVzaC5kZWZhdWx0IOiuvue9ruS4uiAnbWF0Y2hpbmcnIOWQju+8jGdpdCDlsIbmjqjpgIHlkozov5znqIvlkIzlkI3nmoTmiYDmnIlcbiIKKyLmnKzlnLDliIbmlK/jgIJcbiIKKyJcbiIKKyLku44gR2l0IDIuMCDlvIDlp4vvvIxHaXQg6buY6K6k6YeH55So5pu05Li65L+d5a6I55qEICdzaW1wbGUnIOaooeW8j++8jOWPquaOqOmAgeW9k+WJjVxuIgorIuWIhuaUr+WIsOi/nOeoi+WFs+iBlOeahOWQjOWQjeWIhuaUr++8jOWNsyAnZ2l0IHB1c2gnIOaOqOmAgeW9k+WJjeWIhuaUr+OAglxuIgorIlxuIgorIuWPguingSAnZ2l0IGhlbHAgY29uZmlnJyDlubbmn6Xmib4gJ3B1c2guZGVmYXVsdCcg5Lul6I635Y+W5pu05aSa5L+h5oGv44CCXG4iCisi77yIJ3NpbXBsZScg5qih5byP55SxIEdpdCAxLjcuMTEg54mI5pys5byV5YWl44CC5aaC5p6c5oKo5pyJ5pe26KaB5L2/55So6ICB54mI5pys55qEIEdpdO+8jFxuIgorIuS4uuS/neaMgeWFvOWuue+8jOivt+eUqCAnY3VycmVudCcg5Luj5pu/ICdzaW1wbGUn77yJIgorCisjOiBidWlsdGluL3B1c2guYzoyNzMKK21zZ2lkICIiCisiWW91IGRpZG4ndCBzcGVjaWZ5IGFueSByZWZzcGVjcyB0byBwdXNoLCBhbmQgcHVzaC5kZWZhdWx0IGlzIFwibm90aGluZ1wiLiIKK21zZ3N0ciAi5oKo5rKh5pyJ5Li65o6o6YCB5oyH5a6a5Lu75L2V5byV55So6KeE5qC877yM5bm25LiUIHB1c2guZGVmYXVsdCDkuLogXCJub3RoaW5nXCLjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4MAorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgdGlwIG9mIHlvdXIgY3VycmVudCBicmFuY2ggaXMgYmVoaW5kXG4iCisiaXRzIHJlbW90ZSBjb3VudGVycGFydC4gSW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlcyAoZS5nLlxuIgorIidnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIuabtOaWsOiiq+aLkue7ne+8jOWboOS4uuaCqOW9k+WJjeWIhuaUr+eahOacgOaWsOaPkOS6pOiQveWQjuS6juWFtuWvueW6lOeahOi/nOeoi+WIhuaUr+OAglxuIgorIuWGjeasoeaOqOmAgeWJje+8jOWFiOS4jui/nOeoi+WPmOabtOWQiOW5tu+8iOWmgiAnZ2l0IHB1bGwgLi4uJ++8ieOAguivpuingVxuIgorIidnaXQgcHVzaCAtLWhlbHAnIOS4reeahCAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyDlsI/oioLjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI4NgorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSBhIHB1c2hlZCBicmFuY2ggdGlwIGlzIGJlaGluZCBpdHMgcmVtb3RlXG4iCisiY291bnRlcnBhcnQuIENoZWNrIG91dCB0aGlzIGJyYW5jaCBhbmQgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuICdnaXQgcHVsbCAuLi4nKSBiZWZvcmUgcHVzaGluZyBhZ2Fpbi5cbiIKKyJTZWUgdGhlICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIGluICdnaXQgcHVzaCAtLWhlbHAnIGZvciBkZXRhaWxzLiIKK21zZ3N0ciAiIgorIuabtOaWsOiiq+aLkue7ne+8jOWboOS4uuaOqOmAgeeahOS4gOS4quWIhuaUr+eahOacgOaWsOaPkOS6pOiQveWQjuS6juWFtuWvueW6lOeahOi/nOeoi+WIhuaUr+OAglxuIgorIuajgOWHuuivpeWIhuaUr+W5tuaVtOWQiOi/nOeoi+WPmOabtO+8iOWmgiAnZ2l0IHB1bGwgLi4uJ++8ie+8jOeEtuWQjuWGjeaOqOmAgeOAguivpuingVxuIgorIidnaXQgcHVzaCAtLWhlbHAnIOS4reeahCAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyDlsI/oioLjgIIiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjI5MgorbXNnaWQgIiIKKyJVcGRhdGVzIHdlcmUgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgcmVtb3RlIGNvbnRhaW5zIHdvcmsgdGhhdCB5b3UgZG9cbiIKKyJub3QgaGF2ZSBsb2NhbGx5LiBUaGlzIGlzIHVzdWFsbHkgY2F1c2VkIGJ5IGFub3RoZXIgcmVwb3NpdG9yeSBwdXNoaW5nXG4iCisidG8gdGhlIHNhbWUgcmVmLiBZb3UgbWF5IHdhbnQgdG8gZmlyc3QgaW50ZWdyYXRlIHRoZSByZW1vdGUgY2hhbmdlc1xuIgorIihlLmcuLCAnZ2l0IHB1bGwgLi4uJykgYmVmb3JlIHB1c2hpbmcgYWdhaW4uXG4iCisiU2VlIHRoZSAnTm90ZSBhYm91dCBmYXN0LWZvcndhcmRzJyBpbiAnZ2l0IHB1c2ggLS1oZWxwJyBmb3IgZGV0YWlscy4iCittc2dzdHIgIiIKKyLmm7TmlrDooqvmi5Lnu53vvIzlm6DkuLrov5znqIvku5PlupPljIXlkKvmgqjmnKzlnLDlsJrkuI3lrZjlnKjnmoTmj5DkuqTjgILov5npgJrluLjmmK/lm6DkuLrlj6blpJZcbiIKKyLkuIDkuKrku5PlupPlt7LlkJHor6XlvJXnlKjov5vooYzkuobmjqjpgIHjgILlho3mrKHmjqjpgIHliY3vvIzmgqjlj6/og73pnIDopoHlhYjmlbTlkIjov5znqIvlj5jmm7RcbiIKKyLvvIjlpoIgJ2dpdCBwdWxsIC4uLifvvInjgIJcbiIKKyLor6bop4EgJ2dpdCBwdXNoIC0taGVscCcg5Lit55qEICdOb3RlIGFib3V0IGZhc3QtZm9yd2FyZHMnIOWwj+iKguOAgiIKKworIzogYnVpbHRpbi9wdXNoLmM6Mjk5Cittc2dpZCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UgdGhlIHRhZyBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgcmVtb3RlLiIKK21zZ3N0ciAi5pu05paw6KKr5ouS57ud77yM5Zug5Li66K+l5qCH562+5Zyo6L+c56iL5bey57uP5a2Y5Zyo44CCIgorCisjOiBidWlsdGluL3B1c2guYzozMDIKK21zZ2lkICIiCisiWW91IGNhbm5vdCB1cGRhdGUgYSByZW1vdGUgcmVmIHRoYXQgcG9pbnRzIGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisib3IgdXBkYXRlIGEgcmVtb3RlIHJlZiB0byBtYWtlIGl0IHBvaW50IGF0IGEgbm9uLWNvbW1pdCBvYmplY3QsXG4iCisid2l0aG91dCB1c2luZyB0aGUgJy0tZm9yY2UnIG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorIuWmguaenOS4jeS9v+eUqCAnLS1mb3JjZScg5Y+C5pWw77yM5oKo5LiN6IO95pu05paw5LiA5Liq5oyH5ZCR6Z2e5o+Q5Lqk5a+56LGh55qE6L+c56iL5byV55So77yMXG4iCisi5Lmf5LiN6IO95pu05paw6L+c56iL5byV55So6K6p5YW25oyH5ZCR5LiA5Liq6Z2e5o+Q5Lqk5a+56LGh44CCXG4iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM2MQorIywgYy1mb3JtYXQKK21zZ2lkICJQdXNoaW5nIHRvICVzXG4iCittc2dzdHIgIuaOqOmAgeWIsCAlc1xuIgorCisjOiBidWlsdGluL3B1c2guYzozNjUKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICclcyciCittc2dzdHIgIuaXoOazleaOqOmAgeS4gOS6m+W8leeUqOWIsCAnJXMnIgorCisjOiBidWlsdGluL3B1c2guYzozOTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiYmFkIHJlcG9zaXRvcnkgJyVzJyIKK21zZ3N0ciAi5Z2P55qE5LuT5bqTICclcyciCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjM5NgorbXNnaWQgIiIKKyJObyBjb25maWd1cmVkIHB1c2ggZGVzdGluYXRpb24uXG4iCisiRWl0aGVyIHNwZWNpZnkgdGhlIFVSTCBmcm9tIHRoZSBjb21tYW5kLWxpbmUgb3IgY29uZmlndXJlIGEgcmVtb3RlICIKKyJyZXBvc2l0b3J5IHVzaW5nXG4iCisiXG4iCisiICAgIGdpdCByZW1vdGUgYWRkIDxuYW1lPiA8dXJsPlxuIgorIlxuIgorImFuZCB0aGVuIHB1c2ggdXNpbmcgdGhlIHJlbW90ZSBuYW1lXG4iCisiXG4iCisiICAgIGdpdCBwdXNoIDxuYW1lPlxuIgorbXNnc3RyICIiCisi5rKh5pyJ6YWN572u5o6o6YCB55uu5qCH44CCXG4iCisi5oiW6YCa6L+H5ZG95Luk6KGM5oyH5a6aIFVSTO+8jOaIlueUqOS4i+mdouWRveS7pOmFjee9ruS4gOS4qui/nOeoi+S7k+W6k1xuIgorIlxuIgorIiAgICBnaXQgcmVtb3RlIGFkZCA85ZCN56ewPiA85Zyw5Z2APlxuIgorIlxuIgorIueEtuWQjuS9v+eUqOivpei/nOeoi+S7k+W6k+WQjeaJp+ihjOaOqOmAgVxuIgorIlxuIgorIiAgICBnaXQgcHVzaCA85ZCN56ewPlxuIgorCisjOiBidWlsdGluL3B1c2guYzo0MTEKK21zZ2lkICItLWFsbCBhbmQgLS10YWdzIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIOWSjCAtLXRhZ3Mg5LiN5YW85a65IgorCisjOiBidWlsdGluL3B1c2guYzo0MTIKK21zZ2lkICItLWFsbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHJlZnNwZWNzIgorbXNnc3RyICItLWFsbCDkuI3og73lkozlvJXnlKjop4TmoLzlkIzml7bkvb/nlKgiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxNworbXNnaWQgIi0tbWlycm9yIGFuZCAtLXRhZ3MgYXJlIGluY29tcGF0aWJsZSIKK21zZ3N0ciAiLS1taXJyb3Ig5ZKMIC0tdGFncyDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjQxOAorbXNnaWQgIi0tbWlycm9yIGNhbid0IGJlIGNvbWJpbmVkIHdpdGggcmVmc3BlY3MiCittc2dzdHIgIi0tbWlycm9yIOS4jeiDveWSjOW8leeUqOinhOagvOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9wdXNoLmM6NDIzCittc2dpZCAiLS1hbGwgYW5kIC0tbWlycm9yIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tYWxsIOWSjCAtLW1pcnJvciDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjUzOQorbXNnaWQgInJlcG9zaXRvcnkiCittc2dzdHIgIuS7k+W6kyIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQwIGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTYxCittc2dpZCAicHVzaCBhbGwgcmVmcyIKK21zZ3N0ciAi5o6o6YCB5omA5pyJ5byV55SoIgorCisjOiBidWlsdGluL3B1c2guYzo1NDEgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjMKK21zZ2lkICJtaXJyb3IgYWxsIHJlZnMiCittc2dzdHIgIumVnOWDj+aJgOacieW8leeUqCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQzCittc2dpZCAiZGVsZXRlIHJlZnMiCittc2dzdHIgIuWIoOmZpOW8leeUqCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ0Cittc2dpZCAicHVzaCB0YWdzIChjYW4ndCBiZSB1c2VkIHdpdGggLS1hbGwgb3IgLS1taXJyb3IpIgorbXNnc3RyICLmjqjpgIHmoIfnrb7vvIjkuI3og73kvb/nlKggLS1hbGwgb3IgLS1taXJyb3LvvIkiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU0NyBidWlsdGluL3NlbmQtcGFjay5jOjE2NAorbXNnaWQgImZvcmNlIHVwZGF0ZXMiCittc2dzdHIgIuW8uuWItuabtOaWsCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTQ5IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTc1Cittc2dpZCAicmVmbmFtZT46PGV4cGVjdCIKK21zZ3N0ciAi5byV55So5ZCNPjo85pyf5pyb5YC8IgorCisjOiBidWlsdGluL3B1c2guYzo1NTAgYnVpbHRpbi9zZW5kLXBhY2suYzoxNzYKK21zZ2lkICJyZXF1aXJlIG9sZCB2YWx1ZSBvZiByZWYgdG8gYmUgYXQgdGhpcyB2YWx1ZSIKK21zZ3N0ciAi6KaB5rGC5byV55So5pen55qE5Y+W5YC85Li66K6+5a6a5YC8IgorCisjOiBidWlsdGluL3B1c2guYzo1NTMKK21zZ2lkICJjb250cm9sIHJlY3Vyc2l2ZSBwdXNoaW5nIG9mIHN1Ym1vZHVsZXMiCittc2dzdHIgIuaOp+WItuWtkOaooee7hOeahOmAkuW9kuaOqOmAgSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTU1IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTY5Cittc2dpZCAidXNlIHRoaW4gcGFjayIKK21zZ3N0ciAi5L2/55So57K+566A5omT5YyFIgorCisjOiBidWlsdGluL3B1c2guYzo1NTYgYnVpbHRpbi9wdXNoLmM6NTU3IGJ1aWx0aW4vc2VuZC1wYWNrLmM6MTU4CisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE1OQorbXNnaWQgInJlY2VpdmUgcGFjayBwcm9ncmFtIgorbXNnc3RyICLmjqXmlLbljIXnqIvluo8iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU1OAorbXNnaWQgInNldCB1cHN0cmVhbSBmb3IgZ2l0IHB1bGwvc3RhdHVzIgorbXNnc3RyICLorr7nva4gZ2l0IHB1bGwvc3RhdHVzIOeahOS4iua4uCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYxCittc2dpZCAicHJ1bmUgbG9jYWxseSByZW1vdmVkIHJlZnMiCittc2dzdHIgIua4hemZpOacrOWcsOWIoOmZpOeahOW8leeUqCIKKworIzogYnVpbHRpbi9wdXNoLmM6NTYzCittc2dpZCAiYnlwYXNzIHByZS1wdXNoIGhvb2siCittc2dzdHIgIue7lei/hyBwcmUtcHVzaCDpkqnlrZAiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2NAorbXNnaWQgInB1c2ggbWlzc2luZyBidXQgcmVsZXZhbnQgdGFncyIKK21zZ3N0ciAi5o6o6YCB57y65aSx5L2G5pyJ5YWz55qE5qCH562+IgorCisjOiBidWlsdGluL3B1c2guYzo1NjcgYnVpbHRpbi9zZW5kLXBhY2suYzoxNjYKK21zZ2lkICJHUEcgc2lnbiB0aGUgcHVzaCIKK21zZ3N0ciAi55SoIEdQRyDkuLrmjqjpgIHnrb7lkI0iCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU2OSBidWlsdGluL3NlbmQtcGFjay5jOjE3MAorbXNnaWQgInJlcXVlc3QgYXRvbWljIHRyYW5zYWN0aW9uIG9uIHJlbW90ZSBzaWRlIgorbXNnc3RyICLpnIDopoHov5znq6/mlK/mjIHljp/lrZDkuovliqEiCisKKyM6IGJ1aWx0aW4vcHVzaC5jOjU3OQorbXNnaWQgIi0tZGVsZXRlIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYWxsLCAtLW1pcnJvciBhbmQgLS10YWdzIgorbXNnc3RyICItLWRlbGV0ZSDkuI4gLS1hbGzjgIEtLW1pcnJvciDlj4ogLS10YWdzIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi9wdXNoLmM6NTgxCittc2dpZCAiLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIHdpdGhvdXQgYW55IHJlZnMiCittc2dzdHIgIi0tZGVsZXRlIOacquaOpeS7u+S9leW8leeUqOayoeacieaEj+S5iSIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzozNworbXNnaWQgIiIKKyJnaXQgcmVhZC10cmVlIFsoLW0gWy0tdHJpdmlhbF0gWy0tYWdncmVzc2l2ZV0gfCAtLXJlc2V0IHwgLS1wcmVmaXg9PHByZWZpeD4pICIKKyJbLXUgWy0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PTxnaXRpZ25vcmU+XSB8IC1pXV0gWy0tbm8tc3BhcnNlLWNoZWNrb3V0XSBbLS0iCisiaW5kZXgtb3V0cHV0PTxmaWxlPl0gKC0tZW1wdHkgfCA8dHJlZS1pc2gxPiBbPHRyZWUtaXNoMj4gWzx0cmVlLWlzaDM+XV0pIgorbXNnc3RyICIiCisiZ2l0IHJlYWQtdHJlZSBbKC1tIFstLXRyaXZpYWxdIFstLWFnZ3Jlc3NpdmVdIHwgLS1yZXNldCB8IC0tcHJlZml4PTzliY3nvIA+KSBbLSIKKyJ1IFstLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT08Z2l0aWdub3JlPl0gfCAtaV1dIFstLW5vLXNwYXJzZS1jaGVja291dF0gWy0tIgorImluZGV4LW91dHB1dD085paH5Lu2Pl0gKC0tZW1wdHkgfCA85qCR5a+56LGhMT4gWzzmoJHlr7nosaEyPiBbPOagkeWvueixoTM+XV0pIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExMAorbXNnaWQgIndyaXRlIHJlc3VsdGluZyBpbmRleCB0byA8ZmlsZT4iCittc2dzdHIgIuWwhue0ouW8lee7k+aenOWGmeWFpSA85paH5Lu2PiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTMKK21zZ2lkICJvbmx5IGVtcHR5IHRoZSBpbmRleCIKK21zZ3N0ciAi5Y+q5piv5riF56m657Si5byVIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjExNQorbXNnaWQgIk1lcmdpbmciCittc2dzdHIgIuWQiOW5tiIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMTcKK21zZ2lkICJwZXJmb3JtIGEgbWVyZ2UgaW4gYWRkaXRpb24gdG8gYSByZWFkIgorbXNnc3RyICLor7vlj5bkuYvkvZnlho3miafooYzkuIDkuKrlkIjlubYiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTE5Cittc2dpZCAiMy13YXkgbWVyZ2UgaWYgbm8gZmlsZSBsZXZlbCBtZXJnaW5nIHJlcXVpcmVkIgorbXNnc3RyICLlpoLmnpzmsqHmnInmlofku7bnuqflkIjlubbpnIDopoHvvIzmiafooYzkuInmlrnlkIjlubYiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTIxCittc2dpZCAiMy13YXkgbWVyZ2UgaW4gcHJlc2VuY2Ugb2YgYWRkcyBhbmQgcmVtb3ZlcyIKK21zZ3N0ciAi5a2Y5Zyo5re75Yqg5ZKM5Yig6Zmk5pe277yM5Lmf5omn6KGM5LiJ5pa55ZCI5bm2IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEyMworbXNnaWQgInNhbWUgYXMgLW0sIGJ1dCBkaXNjYXJkIHVubWVyZ2VkIGVudHJpZXMiCittc2dzdHIgIuexu+S8vOS6jiAtbe+8jOS9huS4ouW8g+acquWQiOW5tueahOadoeebriIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjQKK21zZ2lkICI8c3ViZGlyZWN0b3J5Pi8iCittc2dzdHIgIjzlrZDnm67lvZU+LyIKKworIzogYnVpbHRpbi9yZWFkLXRyZWUuYzoxMjUKK21zZ2lkICJyZWFkIHRoZSB0cmVlIGludG8gdGhlIGluZGV4IHVuZGVyIDxzdWJkaXJlY3Rvcnk+LyIKK21zZ3N0ciAi6K+75Y+W5qCR5a+56LGh5Yiw57Si5byV55qEIDzlrZDnm67lvZU+LyDkuIsiCisKKyM6IGJ1aWx0aW4vcmVhZC10cmVlLmM6MTI4Cittc2dpZCAidXBkYXRlIHdvcmtpbmcgdHJlZSB3aXRoIG1lcmdlIHJlc3VsdCIKK21zZ3N0ciAi55So5ZCI5bm255qE57uT5p6c5pu05paw5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMAorbXNnaWQgImdpdGlnbm9yZSIKK21zZ3N0ciAiZ2l0aWdub3JlIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzMQorbXNnaWQgImFsbG93IGV4cGxpY2l0bHkgaWdub3JlZCBmaWxlcyB0byBiZSBvdmVyd3JpdHRlbiIKK21zZ3N0ciAi5YWB6K645b+955Wl5paH5Lu25Lit6K6+5a6a55qE5paH5Lu25Y+v5Lul6KKr6KaG55uWIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNAorbXNnaWQgImRvbid0IGNoZWNrIHRoZSB3b3JraW5nIHRyZWUgYWZ0ZXIgbWVyZ2luZyIKK21zZ3N0ciAi5ZCI5bm25ZCO5LiN5qOA5p+l5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNQorbXNnaWQgImRvbid0IHVwZGF0ZSB0aGUgaW5kZXggb3IgdGhlIHdvcmsgdHJlZSIKK21zZ3N0ciAi5LiN5pu05paw57Si5byV5Yy65ZKM5bel5L2c5Yy6IgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzNworbXNnaWQgInNraXAgYXBwbHlpbmcgc3BhcnNlIGNoZWNrb3V0IGZpbHRlciIKK21zZ3N0ciAi6Lez6L+H5bqU55So56iA55aP5qOA5Ye66L+H5ruk5ZmoIgorCisjOiBidWlsdGluL3JlYWQtdHJlZS5jOjEzOQorbXNnaWQgImRlYnVnIHVucGFjay10cmVlcyIKK21zZ3N0ciAi6LCD6K+VIHVucGFjay10cmVlcyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo0MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBmb3IgJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiclMiRzJyDnmoTlgLwgJyUxJHMnIOS4jeaYr+S4gOS4quacieaViOeahOaXtumXtOaIsyIKKworIzogYnVpbHRpbi9yZWZsb2cuYzo1NDkgYnVpbHRpbi9yZWZsb2cuYzo1NTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0aW1lc3RhbXAiCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5pyJ5pWI55qE5pe26Ze05oizIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEyCittc2dpZCAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIgorbXNnc3RyICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMKK21zZ2lkICIiCisiZ2l0IHJlbW90ZSBhZGQgWy10IDxicmFuY2g+XSBbLW0gPG1hc3Rlcj5dIFstZl0gWy0tdGFncyB8IC0tbm8tdGFnc10gWy0tIgorIm1pcnJvcj08ZmV0Y2h8cHVzaD5dIDxuYW1lPiA8dXJsPiIKK21zZ3N0ciAiIgorImdpdCByZW1vdGUgYWRkIFstdCA85YiG5pSvPl0gWy1tIDxtYXN0ZXI+XSBbLWZdIFstLXRhZ3MgfCAtLW5vLXRhZ3NdIFstLSIKKyJtaXJyb3I9PGZldGNofHB1c2g+XSA85ZCN56ewPiA85Zyw5Z2APiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNCBidWlsdGluL3JlbW90ZS5jOjMzCittc2dpZCAiZ2l0IHJlbW90ZSByZW5hbWUgPG9sZD4gPG5ldz4iCittc2dzdHIgImdpdCByZW1vdGUgcmVuYW1lIDzml6flkI3np7A+IDzmlrDlkI3np7A+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1IGJ1aWx0aW4vcmVtb3RlLmM6MzgKK21zZ2lkICJnaXQgcmVtb3RlIHJlbW92ZSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcmVtb3ZlIDzlkI3np7A+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2IGJ1aWx0aW4vcmVtb3RlLmM6NDMKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1oZWFkIDxuYW1lPiAoLWEgfCAtLWF1dG8gfCAtZCB8IC0tZGVsZXRlIHwgPGJyYW5jaD4pIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1oZWFkIDzlkI3np7A+ICgtYSB8IC0tYXV0byB8IC1kIHwgLS1kZWxldGUgfCA85YiG5pSvPikiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTcKK21zZ2lkICJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gc2hvdyBbLW5dIDxuYW1lPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBbLXYgfCAtLXZlcmJvc2VdIHNob3cgWy1uXSA85ZCN56ewPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOAorbXNnaWQgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWy1uIHwgLS1kcnktcnVuXSA85ZCN56ewPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxOQorbXNnaWQgIiIKKyJnaXQgcmVtb3RlIFstdiB8IC0tdmVyYm9zZV0gdXBkYXRlIFstcCB8IC0tcHJ1bmVdIFsoPGdyb3VwPiB8IDxyZW1vdGU+KS4uLl0iCittc2dzdHIgImdpdCByZW1vdGUgWy12IHwgLS12ZXJib3NlXSB1cGRhdGUgWy1wIHwgLS1wcnVuZV0gWyg857uEPiB8IDzov5znqIs+KS4uLl0iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjAKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBbLS1hZGRdIDxuYW1lPiA8YnJhbmNoPi4uLiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgWy0tYWRkXSA85ZCN56ewPiA85YiG5pSvPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMSBidWlsdGluL3JlbW90ZS5jOjY5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIFstLXB1c2hdIDxuYW1lPiA8bmV3dXJsPiBbPG9sZHVybD5dIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgWy0tcHVzaF0gPOWQjeensD4gPOaWsOeahOWcsOWdgD4gWzzml6fnmoTlnLDlnYA+XSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMiBidWlsdGluL3JlbW90ZS5jOjcwCittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDxuYW1lPiA8bmV3dXJsPiIKK21zZ3N0ciAiZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIDzlkI3np7A+IDzmlrDnmoTlnLDlnYA+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjIzIGJ1aWx0aW4vcmVtb3RlLmM6NzEKK21zZ2lkICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPG5hbWU+IDx1cmw+IgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgPOWQjeensD4gPOWcsOWdgD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MjgKK21zZ2lkICJnaXQgcmVtb3RlIGFkZCBbPG9wdGlvbnM+XSA8bmFtZT4gPHVybD4iCittc2dzdHIgImdpdCByZW1vdGUgYWRkIFs86YCJ6aG5Pl0gPOWQjeensD4gPOWcsOWdgD4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NDgKK21zZ2lkICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyA8bmFtZT4gPGJyYW5jaD4uLi4iCittc2dzdHIgImdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIDzlkI3np7A+IDzliIbmlK8+Li4uIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQ5Cittc2dpZCAiZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgPG5hbWU+IDxicmFuY2g+Li4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAtLWFkZCA85ZCN56ewPiA85YiG5pSvPi4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo1NAorbXNnaWQgImdpdCByZW1vdGUgc2hvdyBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgc2hvdyBbPOmAiemhuT5dIDzlkI3np7A+IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU5Cittc2dpZCAiZ2l0IHJlbW90ZSBwcnVuZSBbPG9wdGlvbnM+XSA8bmFtZT4iCittc2dzdHIgImdpdCByZW1vdGUgcHJ1bmUgWzzpgInpobk+XSA85ZCN56ewPiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NAorbXNnaWQgImdpdCByZW1vdGUgdXBkYXRlIFs8b3B0aW9ucz5dIFs8Z3JvdXA+IHwgPHJlbW90ZT5dLi4uIgorbXNnc3RyICJnaXQgcmVtb3RlIHVwZGF0ZSBbPOmAiemhuT5dIFs857uEPiB8IDzov5znqIs+XS4uLiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo4OAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGluZyAlcyIKK21zZ3N0ciAi5pu05pawICVzIOS4rSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjAKK21zZ2lkICIiCisiLS1taXJyb3IgaXMgZGFuZ2Vyb3VzIGFuZCBkZXByZWNhdGVkOyBwbGVhc2VcbiIKKyJcdCB1c2UgLS1taXJyb3I9ZmV0Y2ggb3IgLS1taXJyb3I9cHVzaCBpbnN0ZWFkIgorbXNnc3RyICIiCisiLS1taXJyb3Ig6YCJ6aG55Y2x6Zmp5LiU6L+H5pe277yM6K+35L2/55SoIC0tbWlycm9yPWZldGNoXG4iCisiXHQg5oiWIC0tbWlycm9yPXB1c2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVua25vd24gbWlycm9yIGFyZ3VtZW50OiAlcyIKK21zZ3N0ciAi5pyq55+l55qE6ZWc5YOP5Y+C5pWw77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzCittc2dpZCAiZmV0Y2ggdGhlIHJlbW90ZSBicmFuY2hlcyIKK21zZ3N0ciAi5oqT5Y+W6L+c56iL55qE5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE1NQorbXNnaWQgImltcG9ydCBhbGwgdGFncyBhbmQgYXNzb2NpYXRlZCBvYmplY3RzIHdoZW4gZmV0Y2hpbmciCittc2dzdHIgIuaKk+WPluaXtuWvvOWFpeaJgOacieeahOagh+etvuWSjOWFs+iBlOWvueixoSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTgKK21zZ2lkICJvciBkbyBub3QgZmV0Y2ggYW55IHRhZyBhdCBhbGwgKC0tbm8tdGFncykiCittc2dzdHIgIuaIluS4jeaKk+WPluS7u+S9leagh+etvu+8iC0tbm8tdGFnc++8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNjAKK21zZ2lkICJicmFuY2goZXMpIHRvIHRyYWNrIgorbXNnc3RyICLot5/ouKrnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYxCittc2dpZCAibWFzdGVyIGJyYW5jaCIKK21zZ3N0ciAi5Li757q/5YiG5pSvIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE2MgorbXNnaWQgInB1c2h8ZmV0Y2giCittc2dzdHIgInB1c2h8ZmV0Y2giCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTYzCittc2dpZCAic2V0IHVwIHJlbW90ZSBhcyBhIG1pcnJvciB0byBwdXNoIHRvIG9yIGZldGNoIGZyb20iCittc2dzdHIgIuaKiui/nOeoi+iuvue9ruS4uueUqOS7peaOqOmAgeaIluaKk+WPlueahOmVnOWDjyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNzUKK21zZ2lkICJzcGVjaWZ5aW5nIGEgbWFzdGVyIGJyYW5jaCBtYWtlcyBubyBzZW5zZSB3aXRoIC0tbWlycm9yIgorbXNnc3RyICLmjIflrprkuIDkuKogbWFzdGVyIOWIhuaUr+W5tuS9v+eUqCAtLW1pcnJvciDpgInpobnmsqHmnInmhI/kuYkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTc3Cittc2dpZCAic3BlY2lmeWluZyBicmFuY2hlcyB0byB0cmFjayBtYWtlcyBzZW5zZSBvbmx5IHdpdGggZmV0Y2ggbWlycm9ycyIKK21zZ3N0ciAi5oyH5a6a6KaB6Lef6Liq55qE5YiG5pSv5Y+q5Zyo5LiO6I635Y+W6ZWc5YOP5ZCM5pe25L2/55So5omN5pyJ5oSP5LmJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE4NyBidWlsdGluL3JlbW90ZS5jOjYzNworIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdGUgJXMgYWxyZWFkeSBleGlzdHMuIgorbXNnc3RyICLov5znqIsgJXMg5bey57uP5a2Y5Zyo44CCIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE5MSBidWlsdGluL3JlbW90ZS5jOjY0MQorIywgYy1mb3JtYXQKK21zZ2lkICInJXMnIGlzIG5vdCBhIHZhbGlkIHJlbW90ZSBuYW1lIgorbXNnc3RyICInJXMnIOS4jeaYr+S4gOS4quacieaViOeahOi/nOeoi+WQjeensCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoyMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHNldHVwIG1hc3RlciAnJXMnIgorbXNnc3RyICLml6Dms5Xorr7nva4gbWFzdGVyICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBnZXQgZmV0Y2ggbWFwIGZvciByZWZzcGVjICVzIgorbXNnc3RyICLml6Dms5XlvpfliLDlvJXnlKjop4TmoLwgJXMg55qE6I635Y+W5YiX6KGoIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjQzNiBidWlsdGluL3JlbW90ZS5jOjQ0NAorbXNnaWQgIihtYXRjaGluZykiCittc2dzdHIgIu+8iOWMuemFje+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo0NDgKK21zZ2lkICIoZGVsZXRlKSIKK21zZ3N0ciAi77yI5Yig6Zmk77yJIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjU4OCBidWlsdGluL3JlbW90ZS5jOjU5NCBidWlsdGluL3JlbW90ZS5jOjYwMAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcycgdG8gJyVzJyIKK21zZ3N0ciAi5LiN6IO95re75YqgICclcycg6IezICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjMwIGJ1aWx0aW4vcmVtb3RlLmM6NzY5IGJ1aWx0aW4vcmVtb3RlLmM6ODY5CisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIHN1Y2ggcmVtb3RlOiAlcyIKK21zZ3N0ciAi5rKh5pyJ6L+Z5qC355qE6L+c56iL77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6NjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW5hbWUgY29uZmlnIHNlY3Rpb24gJyVzJyB0byAnJXMnIgorbXNnc3RyICLkuI3og73ph43lkb3lkI3phY3nva7lsI/oioIgJyVzJyDliLAgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NTMgYnVpbHRpbi9yZW1vdGUuYzo4MjEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlbW92ZSBjb25maWcgc2VjdGlvbiAnJXMnIgorbXNnc3RyICLkuI3og73np7vpmaTphY3nva7lsI/oioIgJyVzJyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo2NjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdCB1cGRhdGluZyBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjXG4iCisiXHQlc1xuIgorIlx0UGxlYXNlIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBtYW51YWxseSBpZiBuZWNlc3NhcnkuIgorbXNnc3RyICIiCisi5rKh5pyJ5pu05paw6Z2e6buY6K6k55qE6I635Y+W5byV55So6KeE5qC8XG4iCisiXHQlc1xuIgorIlx05aaC5p6c5b+F6KaB6K+35omL5Yqo5pu05paw6YWN572u44CCIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY3NAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgYXBwZW5kICclcyciCittc2dzdHIgIuS4jeiDvei/veWKoCAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjY4NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3Qgc2V0ICclcyciCittc2dzdHIgIuS4jeiDveiuvue9riAnJXMnIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjcwNworIywgYy1mb3JtYXQKK21zZ2lkICJkZWxldGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5Yig6ZmkICclcycg5aSx6LSlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjc0MQorIywgYy1mb3JtYXQKK21zZ2lkICJjcmVhdGluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5Yib5bu6ICclcycg5aSx6LSlIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjgwNworbXNnaWQgIiIKKyJOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7XG4iCisidG8gZGVsZXRlIGl0LCB1c2U6IgorbXNnaWRfcGx1cmFsICIiCisiTm90ZTogU29tZSBicmFuY2hlcyBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3ZXJlIG5vdCByZW1vdmVkO1xuIgorInRvIGRlbGV0ZSB0aGVtLCB1c2U6IgorbXNnc3RyWzBdICLms6jmhI/vvJpyZWYvcmVtb3RlcyDlsYLnuqfkuYvlpJbnmoTkuIDkuKrliIbmlK/mnKrooqvnp7vpmaTjgILopoHliKDpmaTlroPvvIzkvb/nlKjvvJoiCittc2dzdHJbMV0gIuazqOaEj++8mnJlZi9yZW1vdGVzIOWxgue6p+S5i+WklueahOS4gOS6m+WIhuaUr+acquiiq+enu+mZpOOAguimgeWIoOmZpOWug+S7rO+8jOS9v+eUqO+8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvJXMpIgorbXNnc3RyICIg5paw55qE77yI5LiL5LiA5qyh6I635Y+W5bCG5a2Y5YKo5LqOIHJlbW90ZXMvJXPvvIkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI1Cittc2dpZCAiIHRyYWNrZWQiCittc2dzdHIgIiDlt7Lot5/ouKoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTI3Cittc2dpZCAiIHN0YWxlICh1c2UgJ2dpdCByZW1vdGUgcHJ1bmUnIHRvIHJlbW92ZSkiCittc2dzdHIgIiDov4fml7bvvIjkvb/nlKggJ2dpdCByZW1vdGUgcHJ1bmUnIOadpeenu+mZpO+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5MjkKK21zZ2lkICIgPz8/IgorbXNnc3RyICIgPz8/IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk3MAorIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIGJyYW5jaC4lcy5tZXJnZTsgY2Fubm90IHJlYmFzZSBvbnRvID4gMSBicmFuY2giCittc2dzdHIgIuaXoOaViOeahCBicmFuY2guJXMubWVyZ2XvvIzkuI3og73lj5jln7rliLDkuIDkuKrku6XkuIrnmoTliIbmlK8iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTc3CisjLCBjLWZvcm1hdAorbXNnaWQgInJlYmFzZXMgb250byByZW1vdGUgJXMiCittc2dzdHIgIuWPmOWfuuWIsOi/nOeoiyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIG1lcmdlcyB3aXRoIHJlbW90ZSAlcyIKK21zZ3N0ciAiIOS4jui/nOeoiyAlcyDlkIjlubYiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6OTgxCittc2dpZCAiICAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAgIOS4lOaciei/nOeoiyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzo5ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAibWVyZ2VzIHdpdGggcmVtb3RlICVzIgorbXNnc3RyICLkuI7ov5znqIsgJXMg5ZCI5bm2IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjk4NAorbXNnaWQgIiAgIGFuZCB3aXRoIHJlbW90ZSIKK21zZ3N0ciAiICAg5LiU5pyJ6L+c56iLIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwMzAKK21zZ2lkICJjcmVhdGUiCittc2dzdHIgIuWIm+W7uiIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDMzCittc2dpZCAiZGVsZXRlIgorbXNnc3RyICLliKDpmaQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTAzNworbXNnaWQgInVwIHRvIGRhdGUiCittc2dzdHIgIuacgOaWsCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDQwCittc2dpZCAiZmFzdC1mb3J3YXJkYWJsZSIKK21zZ3N0ciAi5Y+v5b+r6L+bIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNDMKK21zZ2lkICJsb2NhbCBvdXQgb2YgZGF0ZSIKK21zZ3N0ciAi5pys5Zyw5bey6L+H5pe2IgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEwNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgICUtKnMgZm9yY2VzIHRvICUtKnMgKCVzKSIKK21zZ3N0ciAiICAgICUtKnMg5by65Yi25o6o6YCB6IezICUtKnMgKCVzKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDUzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlLSpzICglcykiCittc2dzdHIgIiAgICAlLSpzIOaOqOmAgeiHsyAlLSpzICglcykiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTA1NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgJS0qcyBmb3JjZXMgdG8gJXMiCittc2dzdHIgIiAgICAlLSpzIOW8uuWItuaOqOmAgeiHsyAlcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMDYwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICAlLSpzIHB1c2hlcyB0byAlcyIKK21zZ3N0ciAiICAgICUtKnMg5o6o6YCB6IezICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExMjgKK21zZ2lkICJkbyBub3QgcXVlcnkgcmVtb3RlcyIKK21zZ3N0ciAi5LiN5p+l6K+i6L+c56iLIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiKiByZW1vdGUgJXMiCittc2dzdHIgIiog6L+c56iLICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBGZXRjaCBVUkw6ICVzIgorbXNnc3RyICIgIOiOt+WPluWcsOWdgO+8miVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjExNTcgYnVpbHRpbi9yZW1vdGUuYzoxMzA4Cittc2dpZCAiKG5vIFVSTCkiCittc2dzdHIgIijml6AgVVJMKSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMTY2IGJ1aWx0aW4vcmVtb3RlLmM6MTE2OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFB1c2ggIFVSTDogJXMiCittc2dzdHIgIiAg5o6o6YCB5Zyw5Z2A77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3MCBidWlsdGluL3JlbW90ZS5jOjExNzIgYnVpbHRpbi9yZW1vdGUuYzoxMTc0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgSEVBRCBicmFuY2g6ICVzIgorbXNnc3RyICIgIEhFQUQg5YiG5pSv77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE3NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICBIRUFEIGJyYW5jaCAocmVtb3RlIEhFQUQgaXMgYW1iaWd1b3VzLCBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcpOlxuIgorbXNnc3RyICIgIEhFQUQg5YiG5pSv77yI6L+c56iLIEhFQUQg5qih57OK77yM5Y+v6IO95piv5LiL5YiX5Lit55qE5LiA5Liq77yJ77yaXG4iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIFJlbW90ZSBicmFuY2g6JXMiCittc2dpZF9wbHVyYWwgIiAgUmVtb3RlIGJyYW5jaGVzOiVzIgorbXNnc3RyWzBdICIgIOi/nOeoi+WIhuaUr++8miVzIgorbXNnc3RyWzFdICIgIOi/nOeoi+WIhuaUr++8miVzIgorCisjICDor5HogIXvvJrkuK3mloflrZfnrKbkuLLmi7zmjqXvvIzlj6/liKDpmaTliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTE5MSBidWlsdGluL3JlbW90ZS5jOjEyMTgKK21zZ2lkICIgKHN0YXR1cyBub3QgcXVlcmllZCkiCittc2dzdHIgIu+8iOeKtuaAgeacquafpeivou+8iSIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjAwCittc2dpZCAiICBMb2NhbCBicmFuY2ggY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dpZF9wbHVyYWwgIiAgTG9jYWwgYnJhbmNoZXMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdWxsJzoiCittc2dzdHJbMF0gIiAg5Li6ICdnaXQgcHVsbCcg6YWN572u55qE5pys5Zyw5YiG5pSv77yaIgorbXNnc3RyWzFdICIgIOS4uiAnZ2l0IHB1bGwnIOmFjee9rueahOacrOWcsOWIhuaUr++8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjA4Cittc2dpZCAiICBMb2NhbCByZWZzIHdpbGwgYmUgbWlycm9yZWQgYnkgJ2dpdCBwdXNoJyIKK21zZ3N0ciAiICDmnKzlnLDlvJXnlKjlsIblnKggJ2dpdCBwdXNoJyDml7booqvplZzlg48iCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIxNQorIywgYy1mb3JtYXQKK21zZ2lkICIgIExvY2FsIHJlZiBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnJXM6IgorbXNnaWRfcGx1cmFsICIgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJyVzOiIKK21zZ3N0clswXSAiICDkuLogJ2dpdCBwdXNoJyDphY3nva7nmoTmnKzlnLDlvJXnlKglc++8miIKK21zZ3N0clsxXSAiICDkuLogJ2dpdCBwdXNoJyDphY3nva7nmoTmnKzlnLDlvJXnlKglc++8miIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjM2Cittc2dpZCAic2V0IHJlZnMvcmVtb3Rlcy88bmFtZT4vSEVBRCBhY2NvcmRpbmcgdG8gcmVtb3RlIgorbXNnc3RyICLmoLnmja7ov5znqIvorr7nva4gcmVmcy9yZW1vdGVzLzzlkI3np7A+L0hFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTIzOAorbXNnaWQgImRlbGV0ZSByZWZzL3JlbW90ZXMvPG5hbWU+L0hFQUQiCittc2dzdHIgIuWIoOmZpCByZWZzL3JlbW90ZXMvPOWQjeensD4vSEVBRCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjUzCittc2dpZCAiQ2Fubm90IGRldGVybWluZSByZW1vdGUgSEVBRCIKK21zZ3N0ciAi5peg5rOV56Gu5a6a6L+c56iLIEhFQUQiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI1NQorbXNnaWQgIk11bHRpcGxlIHJlbW90ZSBIRUFEIGJyYW5jaGVzLiBQbGVhc2UgY2hvb3NlIG9uZSBleHBsaWNpdGx5IHdpdGg6IgorbXNnc3RyICLlpJrkuKrov5znqIsgSEVBRCDliIbmlK/jgILor7fmmI7noa7lnLDpgInmi6nkuIDkuKrnlKjlkb3ku6TvvJoiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI2NQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGVsZXRlICVzIgorbXNnc3RyICLml6Dms5XliKDpmaQgJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI3MworIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCByZWY6ICVzIgorbXNnc3RyICLkuI3mmK/kuIDkuKrmnInmlYjlvJXnlKjvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBzZXR1cCAlcyIKK21zZ3N0ciAi5LiN6IO96K6+572uICVzIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5MworIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgd2lsbCBiZWNvbWUgZGFuZ2xpbmchIgorbXNnc3RyICIgJXMg5bCG5oiQ5Li65pGH5pGG54q25oCB77yBIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTI5NAorIywgYy1mb3JtYXQKK21zZ2lkICIgJXMgaGFzIGJlY29tZSBkYW5nbGluZyEiCittc2dzdHIgIiAlcyDlt7LmiJDkuLrmkYfmkYbnirbmgIHvvIEiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwNAorIywgYy1mb3JtYXQKK21zZ2lkICJQcnVuaW5nICVzIgorbXNnc3RyICLkv67liaogJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTMwNQorIywgYy1mb3JtYXQKK21zZ2lkICJVUkw6ICVzIgorbXNnc3RyICJVUkzvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxMzIxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAqIFt3b3VsZCBwcnVuZV0gJXMiCittc2dzdHIgIiAqIFvlsIbliKDpmaRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzMjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICogW3BydW5lZF0gJXMiCittc2dzdHIgIiAqIFvlt7LliKDpmaRdICVzIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjEzNjkKK21zZ2lkICJwcnVuZSByZW1vdGVzIGFmdGVyIGZldGNoaW5nIgorbXNnc3RyICLmipPlj5blkI7muIXpmaTov5znqIsiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQzNSBidWlsdGluL3JlbW90ZS5jOjE1MDkKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gc3VjaCByZW1vdGUgJyVzJyIKK21zZ3N0ciAi5rKh5pyJ5q2k6L+c56iLICclcyciCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ1NQorbXNnaWQgImFkZCBicmFuY2giCittc2dzdHIgIua3u+WKoOWIhuaUryIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDYyCittc2dpZCAibm8gcmVtb3RlIHNwZWNpZmllZCIKK21zZ3N0ciAi5pyq5oyH5a6a6L+c56iLIgorCisjOiBidWlsdGluL3JlbW90ZS5jOjE0ODQKK21zZ2lkICJtYW5pcHVsYXRlIHB1c2ggVVJMcyIKK21zZ3N0ciAi5pON5L2c5o6o6YCBIFVSTFMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4NgorbXNnaWQgImFkZCBVUkwiCittc2dzdHIgIua3u+WKoCBVUkwiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTQ4OAorbXNnaWQgImRlbGV0ZSBVUkxzIgorbXNnc3RyICLliKDpmaQgVVJMUyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNDk1Cittc2dpZCAiLS1hZGQgLS1kZWxldGUgZG9lc24ndCBtYWtlIHNlbnNlIgorbXNnc3RyICItLWFkZCAtLWRlbGV0ZSDml6DmhI/kuYkiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTUzNQorIywgYy1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIG9sZCBVUkwgcGF0dGVybjogJXMiCittc2dzdHIgIuaXoOaViOeahOaXpyBVUkwg5Yy56YWN5qih54mI77yaJXMiCisKKyM6IGJ1aWx0aW4vcmVtb3RlLmM6MTU0MworIywgYy1mb3JtYXQKK21zZ2lkICJObyBzdWNoIFVSTCBmb3VuZDogJXMiCittc2dzdHIgIuacquaJvuWIsOatpCBVUkzvvJolcyIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTQ1Cittc2dpZCAiV2lsbCBub3QgZGVsZXRlIGFsbCBub24tcHVzaCBVUkxzIgorbXNnc3RyICLlsIbkuI3kvJrliKDpmaTmiYDmnInpnZ7mjqjpgIEgVVJMIOWcsOWdgCIKKworIzogYnVpbHRpbi9yZW1vdGUuYzoxNTU5Cittc2dpZCAiYmUgdmVyYm9zZTsgbXVzdCBiZSBwbGFjZWQgYmVmb3JlIGEgc3ViY29tbWFuZCIKK21zZ3N0ciAi5YaX6ZW/6L6T5Ye677yb5b+F6aG7572u5LqO5a2Q5ZG95Luk5LmL5YmNIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3Cittc2dpZCAiZ2l0IHJlcGFjayBbPG9wdGlvbnM+XSIKK21zZ3N0ciAiZ2l0IHJlcGFjayBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE1OQorbXNnaWQgInBhY2sgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBwYWNrIgorbXNnc3RyICLmiYDmnInlhoXlrrnmiZPljIXliLDkuIDkuKrljIXmlofku7bkuK0iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTYxCittc2dpZCAic2FtZSBhcyAtYSwgYW5kIHR1cm4gdW5yZWFjaGFibGUgb2JqZWN0cyBsb29zZSIKK21zZ3N0ciAi5ZKMIC1hIOebuOWQjO+8jOW5tuWwhuS4jeWPr+i+vueahOWvueixoeiuvuS4uuadvuaVo+WvueixoSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjQKK21zZ2lkICJyZW1vdmUgcmVkdW5kYW50IHBhY2tzLCBhbmQgcnVuIGdpdC1wcnVuZS1wYWNrZWQiCittc2dzdHIgIuWIoOmZpOWkmuS9meeahOWMhe+8jOi/kOihjCBnaXQtcHJ1bmUtcGFja2VkIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE2NgorbXNnaWQgInBhc3MgLS1uby1yZXVzZS1kZWx0YSB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLlkJEgZ2l0LXBhY2stb2JqZWN0cyDkvKDpgJLlj4LmlbAgLS1uby1yZXVzZS1kZWx0YSIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNjgKK21zZ2lkICJwYXNzIC0tbm8tcmV1c2Utb2JqZWN0IHRvIGdpdC1wYWNrLW9iamVjdHMiCittc2dzdHIgIuWQkSBnaXQtcGFjay1vYmplY3RzIOS8oOmAkuWPguaVsCAtLW5vLXJldXNlLW9iamVjdCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzAKK21zZ2lkICJkbyBub3QgcnVuIGdpdC11cGRhdGUtc2VydmVyLWluZm8iCittc2dzdHIgIuS4jei/kOihjCBnaXQtdXBkYXRlLXNlcnZlci1pbmZvIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3MworbXNnaWQgInBhc3MgLS1sb2NhbCB0byBnaXQtcGFjay1vYmplY3RzIgorbXNnc3RyICLlkJEgZ2l0LXBhY2stb2JqZWN0cyDkvKDpgJLlj4LmlbAgLS1sb2NhbCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxNzUKK21zZ2lkICJ3cml0ZSBiaXRtYXAgaW5kZXgiCittc2dzdHIgIuWGmSBiaXRtYXAg57Si5byVIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3NgorbXNnaWQgImFwcHJveGlkYXRlIgorbXNnc3RyICLov5HkvLzml6XmnJ8iCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTc3Cittc2dpZCAid2l0aCAtQSwgZG8gbm90IGxvb3NlbiBvYmplY3RzIG9sZGVyIHRoYW4gdGhpcyIKK21zZ3N0ciAi5L2/55SoIC1B77yM5LiN6KaB5bCG5pep5LqO57uZ5a6a5pe26Ze055qE5a+56LGh6L+H5pyfIgorCisjOiBidWlsdGluL3JlcGFjay5jOjE3OQorbXNnaWQgInNpemUgb2YgdGhlIHdpbmRvdyB1c2VkIGZvciBkZWx0YSBjb21wcmVzc2lvbiIKK21zZ3N0ciAi55So5LqO5aKe6YeP5Y6L57yp55qE56qX5Y+j5YC8IgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4MCBidWlsdGluL3JlcGFjay5jOjE4NAorbXNnaWQgImJ5dGVzIgorbXNnc3RyICLlrZfoioIiCisKKyM6IGJ1aWx0aW4vcmVwYWNrLmM6MTgxCittc2dpZCAic2FtZSBhcyB0aGUgYWJvdmUsIGJ1dCBsaW1pdCBtZW1vcnkgc2l6ZSBpbnN0ZWFkIG9mIGVudHJpZXMgY291bnQiCittc2dzdHIgIuWSjOS4iumdoueahOebuOS8vO+8jOS9humZkOWItuWGheWtmOWkp+Wwj+iAjOmdnuadoeebruaVsCIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODMKK21zZ2lkICJsaW1pdHMgdGhlIG1heGltdW0gZGVsdGEgZGVwdGgiCittc2dzdHIgIumZkOWItuacgOWkp+WinumHj+a3seW6piIKKworIzogYnVpbHRpbi9yZXBhY2suYzoxODUKK21zZ2lkICJtYXhpbXVtIHNpemUgb2YgZWFjaCBwYWNrZmlsZSIKK21zZ3N0ciAi5q+P5Liq5YyF5paH5Lu255qE5pyA5aSn5bC65a+4IgorCisjOiBidWlsdGluL3JlcGFjay5jOjE4NworbXNnaWQgInJlcGFjayBvYmplY3RzIGluIHBhY2tzIG1hcmtlZCB3aXRoIC5rZWVwIgorbXNnc3RyICLlr7nmoIforrDkuLogLmtlZXAg55qE5YyF5Lit55qE5a+56LGh6YeN5paw5omT5YyFIgorCisjOiBidWlsdGluL3JlcGFjay5jOjM3OAorIywgYy1mb3JtYXQKK21zZ2lkICJyZW1vdmluZyAnJXMnIGZhaWxlZCIKK21zZ3N0ciAi5Yig6ZmkICclcycg5aSx6LSlIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoxOQorbXNnaWQgImdpdCByZXBsYWNlIFstZl0gPG9iamVjdD4gPHJlcGxhY2VtZW50PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSA85a+56LGhPiA85pu/5o2i54mpPiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjAKK21zZ2lkICJnaXQgcmVwbGFjZSBbLWZdIC0tZWRpdCA8b2JqZWN0PiIKK21zZ3N0ciAiZ2l0IHJlcGxhY2UgWy1mXSAtLWVkaXQgPOWvueixoT4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjIxCittc2dpZCAiZ2l0IHJlcGxhY2UgWy1mXSAtLWdyYWZ0IDxjb21taXQ+IFs8cGFyZW50Pi4uLl0iCittc2dzdHIgImdpdCByZXBsYWNlIFstZl0gLS1ncmFmdCA85o+Q5LqkPiBbPOeItuaPkOS6pD4uLi5dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzoyMgorbXNnaWQgImdpdCByZXBsYWNlIC1kIDxvYmplY3Q+Li4uIgorbXNnc3RyICJnaXQgcmVwbGFjZSAtZCA85a+56LGhPi4uLiIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MjMKK21zZ2lkICJnaXQgcmVwbGFjZSBbLS1mb3JtYXQ9PGZvcm1hdD5dIFstbCBbPHBhdHRlcm4+XV0iCittc2dzdHIgImdpdCByZXBsYWNlIFstLWZvcm1hdD085qC85byPPl0gWy1sIFs85qih5byPPl1dIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozMjUgYnVpbHRpbi9yZXBsYWNlLmM6MzYzIGJ1aWx0aW4vcmVwbGFjZS5jOjM5MQorIywgYy1mb3JtYXQKK21zZ2lkICJOb3QgYSB2YWxpZCBvYmplY3QgbmFtZTogJyVzJyIKK21zZ3N0ciAi5LiN5piv5LiA5Liq5pyJ5pWI55qE5a+56LGh5ZCN77yaJyVzJyIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6MzU1CisjLCBjLWZvcm1hdAorbXNnaWQgImJhZCBtZXJnZXRhZyBpbiBjb21taXQgJyVzJyIKK21zZ3N0ciAi5o+Q5LqkICclcycg5Lit5ZCr5pyJ5o2f5Z2P55qE5ZCI5bm25qCH562+IgorCisjOiBidWlsdGluL3JlcGxhY2UuYzozNTcKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG1lcmdldGFnIGluIGNvbW1pdCAnJXMnIgorbXNnc3RyICLmj5DkuqQgJyVzJyDkuK3lkKvmnInpnZ7ms5XnmoTlkIjlubbmoIfnrb4iCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjM2OAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisib3JpZ2luYWwgY29tbWl0ICclcycgY29udGFpbnMgbWVyZ2V0YWcgJyVzJyB0aGF0IGlzIGRpc2NhcmRlZDsgdXNlIC0tZWRpdCAiCisiaW5zdGVhZCBvZiAtLWdyYWZ0IgorbXNnc3RyICLljp/lp4vmj5DkuqQgJyVzJyDljIXlkKvlt7Lnu4/kuKLlvIPnmoTlkIjlubbmoIfnrb4gJyVzJ++8jOS9v+eUqCAtLWVkaXQg5Luj5pu/IC0tZ3JhZnQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQwMQorIywgYy1mb3JtYXQKK21zZ2lkICJ0aGUgb3JpZ2luYWwgY29tbWl0ICclcycgaGFzIGEgZ3BnIHNpZ25hdHVyZS4iCittc2dzdHIgIuWOn+Wni+aPkOS6pCAnJXMnIOS4reWMheWQq+S4gOS4qiBHUEcg562+5ZCNIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDIKK21zZ2lkICJ0aGUgc2lnbmF0dXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgcmVwbGFjZW1lbnQgY29tbWl0ISIKK21zZ3N0ciAi5Zyo5pu/5o2i55qE5o+Q5Lqk5Lit562+5ZCN5bCG6KKr56e76Zmk77yBIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IHdyaXRlIHJlcGxhY2VtZW50IGNvbW1pdCBmb3I6ICclcyciCittc2dzdHIgIuS4jeiDveS4uiAnJXMnIOWGmeabv+aNouaPkOS6pCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMyCittc2dpZCAibGlzdCByZXBsYWNlIHJlZnMiCittc2dzdHIgIuWIl+WHuuabv+aNoueahOW8leeUqCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDMzCittc2dpZCAiZGVsZXRlIHJlcGxhY2UgcmVmcyIKK21zZ3N0ciAi5Yig6Zmk5pu/5o2i55qE5byV55SoIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzQKK21zZ2lkICJlZGl0IGV4aXN0aW5nIG9iamVjdCIKK21zZ3N0ciAi57yW6L6R546w5a2Y55qE5a+56LGhIgorCisjOiBidWlsdGluL3JlcGxhY2UuYzo0MzUKK21zZ2lkICJjaGFuZ2UgYSBjb21taXQncyBwYXJlbnRzIgorbXNnc3RyICLkv67mlLnkuIDkuKrmj5DkuqTnmoTniLbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmVwbGFjZS5jOjQzNgorbXNnaWQgInJlcGxhY2UgdGhlIHJlZiBpZiBpdCBleGlzdHMiCittc2dzdHIgIuWmguaenOWtmOWcqOWImeabv+aNouW8leeUqCIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM3Cittc2dpZCAiZG8gbm90IHByZXR0eS1wcmludCBjb250ZW50cyBmb3IgLS1lZGl0IgorbXNnc3RyICLkuI3opoHkuLogLS1lZGl0IOaTjeS9nOe+juinguaYvuekuuWGheWuuSIKKworIzogYnVpbHRpbi9yZXBsYWNlLmM6NDM4Cittc2dpZCAidXNlIHRoaXMgZm9ybWF0IgorbXNnc3RyICLkvb/nlKjmraTmoLzlvI8iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6MTIKK21zZ2lkICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA8cGF0aD4uLi4gfCBzdGF0dXMgfCByZW1haW5pbmcgfCBkaWZmIHwgZ2NdIgorbXNnc3RyICJnaXQgcmVyZXJlIFtjbGVhciB8IGZvcmdldCA86Lev5b6EPi4uLiB8IHN0YXR1cyB8IHJlbWFpbmluZyB8IGRpZmYgfCBnY10iCisKKyM6IGJ1aWx0aW4vcmVyZXJlLmM6NTcKK21zZ2lkICJyZWdpc3RlciBjbGVhbiByZXNvbHV0aW9ucyBpbiBpbmRleCIKK21zZ3N0ciAi5Zyo57Si5byV5Lit5rOo5YaM5bmy5YeA55qE6Kej5Yaz5pa55qGIIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjYKK21zZ2lkICIiCisiZ2l0IHJlc2V0IFstLW1peGVkIHwgLS1zb2Z0IHwgLS1oYXJkIHwgLS1tZXJnZSB8IC0ta2VlcF0gWy1xXSBbPGNvbW1pdD5dIgorbXNnc3RyICJnaXQgcmVzZXQgWy0tbWl4ZWQgfCAtLXNvZnQgfCAtLWhhcmQgfCAtLW1lcmdlIHwgLS1rZWVwXSBbLXFdIFs85o+Q5LqkPl0iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNworbXNnaWQgImdpdCByZXNldCBbLXFdIDx0cmVlLWlzaD4gWy0tXSA8cGF0aHM+Li4uIgorbXNnc3RyICJnaXQgcmVzZXQgWy1xXSA85qCR5oiW5o+Q5LqkPiBbLS1dIDzot6/lvoQ+Li4uIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MjgKK21zZ2lkICJnaXQgcmVzZXQgLS1wYXRjaCBbPHRyZWUtaXNoPl0gWy0tXSBbPHBhdGhzPi4uLl0iCittc2dzdHIgImdpdCByZXNldCAtLXBhdGNoIFs85qCR5oiW5o+Q5LqkPl0gWy0tXSBbPOi3r+W+hD4uLi5dIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJtaXhlZCIKK21zZ3N0ciAi5re35p2CIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzQKK21zZ2lkICJzb2Z0IgorbXNnc3RyICLova/mgKciCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNAorbXNnaWQgImhhcmQiCittc2dzdHIgIuehrOaApyIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAibWVyZ2UiCittc2dzdHIgIuWQiOW5tiIKKworIzogYnVpbHRpbi9yZXNldC5jOjM0Cittc2dpZCAia2VlcCIKK21zZ3N0ciAi5L+d5oyBIgorCisjOiBidWlsdGluL3Jlc2V0LmM6NzQKK21zZ2lkICJZb3UgZG8gbm90IGhhdmUgYSB2YWxpZCBIRUFELiIKK21zZ3N0ciAi5oKo5rKh5pyJ5LiA5Liq5pyJ5pWI55qEIEhFQUTjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzo3NgorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgSEVBRC4iCittc2dzdHIgIuaXoOazleaJvuWIsCBIRUFEIOaMh+WQkeeahOagkeOAgiIKKworIzogYnVpbHRpbi9yZXNldC5jOjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBmaW5kIHRyZWUgb2YgJXMuIgorbXNnc3RyICLml6Dms5Xmib7liLAgJXMg5oyH5ZCR55qE5qCR44CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MTAwCisjLCBjLWZvcm1hdAorbXNnaWQgIkhFQUQgaXMgbm93IGF0ICVzIgorbXNnc3RyICJIRUFEIOeOsOWcqOS9jeS6jiAlcyIKKworIyAg6K+R6ICF77ya5rGJ5a2X5LmL6Ze05peg56m65qC877yM5pWF5Yig6ZmkJXPliY3lkI7nqbrmoLwKKyM6IGJ1aWx0aW4vcmVzZXQuYzoxODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IGRvIGEgJXMgcmVzZXQgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLiIKK21zZ3N0ciAi5Zyo5ZCI5bm26L+H56iL5Lit5LiN6IO95YGaJXPph43nva7mk43kvZzjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNzYKK21zZ2lkICJiZSBxdWlldCwgb25seSByZXBvcnQgZXJyb3JzIgorbXNnc3RyICLlronpnZnmqKHlvI/vvIzlj6rmiqXlkYrplJnor68iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyNzgKK21zZ2lkICJyZXNldCBIRUFEIGFuZCBpbmRleCIKK21zZ3N0ciAi6YeN572uIEhFQUQg5ZKM57Si5byVIgorCisjOiBidWlsdGluL3Jlc2V0LmM6Mjc5Cittc2dpZCAicmVzZXQgb25seSBIRUFEIgorbXNnc3RyICLlj6rph43nva4gSEVBRCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4MSBidWlsdGluL3Jlc2V0LmM6MjgzCittc2dpZCAicmVzZXQgSEVBRCwgaW5kZXggYW5kIHdvcmtpbmcgdHJlZSIKK21zZ3N0ciAi6YeN572uIEhFQUTjgIHntKLlvJXlkozlt6XkvZzljLoiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzoyODUKK21zZ2lkICJyZXNldCBIRUFEIGJ1dCBrZWVwIGxvY2FsIGNoYW5nZXMiCittc2dzdHIgIumHjee9riBIRUFEIOS9huS/neWtmOacrOWcsOWPmOabtCIKKworIzogYnVpbHRpbi9yZXNldC5jOjI4OAorbXNnaWQgInJlY29yZCBvbmx5IHRoZSBmYWN0IHRoYXQgcmVtb3ZlZCBwYXRocyB3aWxsIGJlIGFkZGVkIGxhdGVyIgorbXNnc3RyICLlsIbliKDpmaTnmoTot6/lvoTmoIforrDkuLrnqI3lkI7mt7vliqAiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMDUKKyMsIGMtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlc29sdmUgJyVzJyBhcyBhIHZhbGlkIHJldmlzaW9uLiIKK21zZ3N0ciAi5peg5rOV5bCGICclcycg6Kej5p6Q5Li65LiA5Liq5pyJ5pWI55qE54mI5pys44CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzEzCisjLCBjLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZXNvbHZlICclcycgYXMgYSB2YWxpZCB0cmVlLiIKK21zZ3N0ciAi5peg5rOV5bCGICclcycg6Kej5p6Q5Li65LiA5Liq5pyJ5pWI55qE5qCR5a+56LGh44CCIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzIyCittc2dpZCAiLS1wYXRjaCBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXtoYXJkLG1peGVkLHNvZnR9IgorbXNnc3RyICItLXBhdGNoIOS4jiAtLXtoYXJk44CBbWl4ZWTjgIFzb2Z0fSDpgInpobnkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozMzEKK21zZ2lkICItLW1peGVkIHdpdGggcGF0aHMgaXMgZGVwcmVjYXRlZDsgdXNlICdnaXQgcmVzZXQgLS0gPHBhdGhzPicgaW5zdGVhZC4iCittc2dzdHIgIi0tbWl4ZWQg5bim6Lev5b6E5bey5byD55So77yM6ICM5piv55SoICdnaXQgcmVzZXQgLS0gPOi3r+W+hD4n44CCIgorCisjICDor5HogIXvvJrmsYnlrZfkuYvpl7Tml6DnqbrmoLzvvIzmlYXliKDpmaQlc+WJjeWQjuepuuagvAorIzogYnVpbHRpbi9yZXNldC5jOjMzMworIywgYy1mb3JtYXQKK21zZ2lkICJDYW5ub3QgZG8gJXMgcmVzZXQgd2l0aCBwYXRocy4iCittc2dzdHIgIuS4jeiDveW4pui3r+W+hOi/m+ihjCVz6YeN572u44CCIgorCisjICDor5HogIXvvJrmsYnlrZfkuYvpl7Tml6DnqbrmoLzvvIzmlYXliKDpmaQlc+WJjeWQjuepuuagvAorIzogYnVpbHRpbi9yZXNldC5jOjM0MworIywgYy1mb3JtYXQKK21zZ2lkICIlcyByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBhIGJhcmUgcmVwb3NpdG9yeSIKK21zZ3N0ciAi5LiN6IO95a+557qv5LuT5bqT6L+b6KGMJXPph43nva4iCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNDcKK21zZ2lkICItTiBjYW4gb25seSBiZSB1c2VkIHdpdGggLS1taXhlZCIKK21zZ3N0ciAiLU4g5Y+q6IO95ZKMIC0tbWl4ZWQg5ZCM5pe25L2/55SoIgorCisjOiBidWlsdGluL3Jlc2V0LmM6MzY0Cittc2dpZCAiVW5zdGFnZWQgY2hhbmdlcyBhZnRlciByZXNldDoiCittc2dzdHIgIumHjee9ruWQjuWPlua2iOaaguWtmOeahOWPmOabtO+8miIKKworIzogYnVpbHRpbi9yZXNldC5jOjM3MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVzZXQgaW5kZXggZmlsZSB0byByZXZpc2lvbiAnJXMnLiIKK21zZ3N0ciAi5LiN6IO96YeN572u57Si5byV5paH5Lu26Iez54mI5pysICclcyfjgIIiCisKKyM6IGJ1aWx0aW4vcmVzZXQuYzozNzQKK21zZ2lkICJDb3VsZCBub3Qgd3JpdGUgbmV3IGluZGV4IGZpbGUuIgorbXNnc3RyICLkuI3og73lhpnlhaXmlrDnmoTntKLlvJXmlofku7bjgIIiCisKKyM6IGJ1aWx0aW4vcmV2LWxpc3QuYzozNTQKK21zZ2lkICJyZXYtbGlzdCBkb2VzIG5vdCBzdXBwb3J0IGRpc3BsYXkgb2Ygbm90ZXMiCittc2dzdHIgInJldi1saXN0IOS4jeaUr+aMgeaYvuekuuazqOinoyIKKworIzogYnVpbHRpbi9yZXYtcGFyc2UuYzozNjEKK21zZ2lkICJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl0iCittc2dzdHIgImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPOmAiemhuT5dIC0tIFs85Y+C5pWwPi4uLl0iCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzY2Cittc2dpZCAia2VlcCB0aGUgYC0tYCBwYXNzZWQgYXMgYW4gYXJnIgorbXNnc3RyICLkv53mjIEgYC0tYCDkvZzkuLrkuIDkuKrlj4LmlbDkvKDpgJIiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzY4Cittc2dpZCAic3RvcCBwYXJzaW5nIGFmdGVyIHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IgorbXNnc3RyICLpgYfliLDnrKzkuIDkuKrpnZ7pgInpobnlj4LmlbDlkI7lgZzmraLop6PmnpAiCisKKyM6IGJ1aWx0aW4vcmV2LXBhcnNlLmM6MzcxCittc2dpZCAib3V0cHV0IGluIHN0dWNrIGxvbmcgZm9ybSIKK21zZ3N0ciAi5Lul5Zu65a6a6ZW/5qC85byP6L6T5Ye6IgorCisjOiBidWlsdGluL3Jldi1wYXJzZS5jOjUwMgorbXNnaWQgIiIKKyJnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgWzxvcHRpb25zPl0gLS0gWzxhcmdzPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSAtLXNxLXF1b3RlIFs8YXJnPi4uLl1cbiIKKyIgICBvcjogZ2l0IHJldi1wYXJzZSBbPG9wdGlvbnM+XSBbPGFyZz4uLi5dXG4iCisiXG4iCisiUnVuIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IHVzYWdlLiIKK21zZ3N0ciAiIgorImdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCBbPOmAiemhuT5dIC0tIFs85Y+C5pWwPi4uLl1cbiIKKyIgICDmiJbogIXvvJpnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgWzzlj4LmlbA+Li4uXVxuIgorIiAgIOaIluiAhe+8mmdpdCByZXYtcGFyc2UgWzzpgInpobk+XSBbPOWPguaVsD4uLi5dXG4iCisiXG4iCisi5Yid5qyh5L2/55So5pe25omn6KGMIFwiZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC1oXCIg5p2l6I635b6X5pu05aSa5L+h5oGv44CCIgorCisjOiBidWlsdGluL3JldmVydC5jOjIyCittc2dpZCAiZ2l0IHJldmVydCBbPG9wdGlvbnM+XSA8Y29tbWl0LWlzaD4uLi4iCittc2dzdHIgImdpdCByZXZlcnQgWzzpgInpobk+XSA85o+Q5Lqk5Y+3Pi4uLiIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoyMworbXNnaWQgImdpdCByZXZlcnQgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgcmV2ZXJ0IDzlrZDlkb3ku6Q+IgorCisjOiBidWlsdGluL3JldmVydC5jOjI4Cittc2dpZCAiZ2l0IGNoZXJyeS1waWNrIFs8b3B0aW9ucz5dIDxjb21taXQtaXNoPi4uLiIKK21zZ3N0ciAiZ2l0IGNoZXJyeS1waWNrIFs86YCJ6aG5Pl0gPOaPkOS6pOWPtz4uLi4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MjkKK21zZ2lkICJnaXQgY2hlcnJ5LXBpY2sgPHN1YmNvbW1hbmQ+IgorbXNnc3RyICJnaXQgY2hlcnJ5LXBpY2sgPOWtkOWRveS7pD4iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6ICVzIGNhbm5vdCBiZSB1c2VkIHdpdGggJXMiCittc2dzdHIgIiVz77yaJXMg5LiN6IO95ZKMICVzIOWQjOaXtuS9v+eUqCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MAorbXNnaWQgImVuZCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIue7iOatouWPjei9rOaIluaLo+mAieaTjeS9nCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MQorbXNnaWQgInJlc3VtZSByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIue7p+e7reWPjei9rOaIluaLo+mAieaTjeS9nCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MgorbXNnaWQgImNhbmNlbCByZXZlcnQgb3IgY2hlcnJ5LXBpY2sgc2VxdWVuY2UiCittc2dzdHIgIuWPlua2iOWPjei9rOaIluaLo+mAieaTjeS9nCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo4MworbXNnaWQgImRvbid0IGF1dG9tYXRpY2FsbHkgY29tbWl0IgorbXNnc3RyICLkuI3opoHoh6rliqjmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6ODQKK21zZ2lkICJlZGl0IHRoZSBjb21taXQgbWVzc2FnZSIKK21zZ3N0ciAi57yW6L6R5o+Q5Lqk6K+05piOIgorCisjOiBidWlsdGluL3JldmVydC5jOjg3Cittc2dpZCAicGFyZW50IG51bWJlciIKK21zZ3N0ciAi54i257yW5Y+3IgorCisjOiBidWlsdGluL3JldmVydC5jOjg5Cittc2dpZCAibWVyZ2Ugc3RyYXRlZ3kiCittc2dzdHIgIuWQiOW5tuetlueVpSIKKworIzogYnVpbHRpbi9yZXZlcnQuYzo5MAorbXNnaWQgIm9wdGlvbiIKK21zZ3N0ciAi6YCJ6aG5IgorCisjOiBidWlsdGluL3JldmVydC5jOjkxCittc2dpZCAib3B0aW9uIGZvciBtZXJnZSBzdHJhdGVneSIKK21zZ3N0ciAi5ZCI5bm2562W55Wl55qE6YCJ6aG5IgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNAorbXNnaWQgImFwcGVuZCBjb21taXQgbmFtZSIKK21zZ3N0ciAi6L+95Yqg5o+Q5Lqk5ZCN56ewIgorCisjOiBidWlsdGluL3JldmVydC5jOjEwNgorbXNnaWQgInByZXNlcnZlIGluaXRpYWxseSBlbXB0eSBjb21taXRzIgorbXNnc3RyICLkv53nlZnliJ3lp4vljJbnmoTnqbrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA3Cittc2dpZCAiYWxsb3cgY29tbWl0cyB3aXRoIGVtcHR5IG1lc3NhZ2VzIgorbXNnc3RyICLlhYHorrjmj5DkuqTor7TmmI7kuLrnqboiCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTA4Cittc2dpZCAia2VlcCByZWR1bmRhbnQsIGVtcHR5IGNvbW1pdHMiCittc2dzdHIgIuS/neaMgeWkmuS9meeahOOAgeepuueahOaPkOS6pCIKKworIzogYnVpbHRpbi9yZXZlcnQuYzoxMTIKK21zZ2lkICJwcm9ncmFtIGVycm9yIgorbXNnc3RyICLnqIvluo/plJnor68iCisKKyM6IGJ1aWx0aW4vcmV2ZXJ0LmM6MTk3Cittc2dpZCAicmV2ZXJ0IGZhaWxlZCIKK21zZ3N0ciAi6L+Y5Y6f5aSx6LSlIgorCisjOiBidWlsdGluL3JldmVydC5jOjIxMgorbXNnaWQgImNoZXJyeS1waWNrIGZhaWxlZCIKK21zZ3N0ciAi5ouj6YCJ5aSx6LSlIgorCisjOiBidWlsdGluL3JtLmM6MTcKK21zZ2lkICJnaXQgcm0gWzxvcHRpb25zPl0gWy0tXSA8ZmlsZT4uLi4iCittc2dzdHIgImdpdCBybSBbPOmAiemhuT5dIFstLV0gPOaWh+S7tj4uLi4iCisKKyM6IGJ1aWx0aW4vcm0uYzo2NQorbXNnaWQgIiIKKyJ0aGUgZm9sbG93aW5nIHN1Ym1vZHVsZSAob3Igb25lIG9mIGl0cyBuZXN0ZWQgc3VibW9kdWxlcylcbiIKKyJ1c2VzIGEgLmdpdCBkaXJlY3Rvcnk6IgorbXNnaWRfcGx1cmFsICIiCisidGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzIChvciBvbmUgb2YgdGhlaXIgbmVzdGVkIHN1Ym1vZHVsZXMpXG4iCisidXNlIGEgLmdpdCBkaXJlY3Rvcnk6IgorbXNnc3RyWzBdICLku6XkuIvlrZDmqKHnu4TvvIjmiJbkuIDkuKrlhbbltYzlpZflrZDmqKHnu4TvvInkvb/nlKjkuobkuIDkuKogLmdpdCDnm67lvZXvvJoiCittc2dzdHJbMV0gIuS7peS4i+WtkOaooee7hO+8iOaIluS4gOS4quWFtuW1jOWll+WtkOaooee7hO+8ieS9v+eUqOS6huS4gOS4qiAuZ2l0IOebruW9le+8miIKKworIzogYnVpbHRpbi9ybS5jOjcxCittc2dpZCAiIgorIlxuIgorIih1c2UgJ3JtIC1yZicgaWYgeW91IHJlYWxseSB3YW50IHRvIHJlbW92ZSBpdCBpbmNsdWRpbmcgYWxsIG9mIGl0cyBoaXN0b3J5KSIKK21zZ3N0ciAiIgorIlxuIgorIu+8iOS9v+eUqCAncm0gLXJmJyDlkb3ku6TlpoLmnpzmgqjnnJ/nmoTmg7PliKDpmaTlroPlj4rlhbblhajpg6jljoblj7LvvIkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzAKK21zZ2lkICIiCisidGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ2lkX3BsdXJhbCAiIgorInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZVxuIgorImZpbGUgYW5kIHRoZSBIRUFEOiIKK21zZ3N0clswXSAi5aaC5LiL5paH5Lu25YW25pqC5a2Y55qE5YaF5a655ZKM5bel5L2c5Yy65Y+KIEhFQUQg5Lit55qE6YO95LiN5LiA5qC377yaIgorbXNnc3RyWzFdICLlpoLkuIvmlofku7blhbbmmoLlrZjnmoTlhoXlrrnlkozlt6XkvZzljLrlj4ogSEVBRCDkuK3nmoTpg73kuI3kuIDmoLfvvJoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzUKK21zZ2lkICIiCisiXG4iCisiKHVzZSAtZiB0byBmb3JjZSByZW1vdmFsKSIKK21zZ3N0ciAiIgorIlxuIgorIu+8iOS9v+eUqCAtZiDlvLrliLbliKDpmaTvvIkiCisKKyM6IGJ1aWx0aW4vcm0uYzoyMzkKK21zZ2lkICJ0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6IgorbXNnc3RyWzBdICLkuIvliJfmlofku7bntKLlvJXkuK3mnInlj5jmm7QiCittc2dzdHJbMV0gIuS4i+WIl+aWh+S7tue0ouW8leS4reacieWPmOabtCIKKworIzogYnVpbHRpbi9ybS5jOjI0MyBidWlsdGluL3JtLmM6MjU0Cittc2dpZCAiIgorIlxuIgorIih1c2UgLS1jYWNoZWQgdG8ga2VlcCB0aGUgZmlsZSwgb3IgLWYgdG8gZm9yY2UgcmVtb3ZhbCkiCittc2dzdHIgIiIKKyJcbiIKKyLvvIjkvb/nlKggLS1jYWNoZWQg5L+d55WZ5pys5Zyw5paH5Lu277yM5oiW55SoIC1mIOW8uuWItuWIoOmZpO+8iSIKKworIzogYnVpbHRpbi9ybS5jOjI1MQorbXNnaWQgInRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoiCittc2dpZF9wbHVyYWwgInRoZSBmb2xsb3dpbmcgZmlsZXMgaGF2ZSBsb2NhbCBtb2RpZmljYXRpb25zOiIKK21zZ3N0clswXSAi5aaC5LiL5paH5Lu25pyJ5pys5Zyw5L+u5pS577yaIgorbXNnc3RyWzFdICLlpoLkuIvmlofku7bmnInmnKzlnLDkv67mlLnvvJoiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNjkKK21zZ2lkICJkbyBub3QgbGlzdCByZW1vdmVkIGZpbGVzIgorbXNnc3RyICLkuI3liJflh7rliKDpmaTnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzAKK21zZ2lkICJvbmx5IHJlbW92ZSBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi5Y+q5LuO57Si5byV5Yy65Yig6ZmkIgorCisjOiBidWlsdGluL3JtLmM6MjcxCittc2dpZCAib3ZlcnJpZGUgdGhlIHVwLXRvLWRhdGUgY2hlY2siCittc2dzdHIgIuW/veeVpeaWh+S7tuabtOaWsOeKtuaAgeajgOafpSIKKworIzogYnVpbHRpbi9ybS5jOjI3MgorbXNnaWQgImFsbG93IHJlY3Vyc2l2ZSByZW1vdmFsIgorbXNnc3RyICLlhYHorrjpgJLlvZLliKDpmaQiCisKKyM6IGJ1aWx0aW4vcm0uYzoyNzQKK21zZ2lkICJleGl0IHdpdGggYSB6ZXJvIHN0YXR1cyBldmVuIGlmIG5vdGhpbmcgbWF0Y2hlZCIKK21zZ3N0ciAi5Y2z5L2/5rKh5pyJ5Yy56YWN77yM5Lmf5Lul6Zu254q25oCB6YCA5Ye6IgorCisjOiBidWlsdGluL3JtLmM6MzE3Cittc2dpZCAiUGxlYXNlLCBzdGFnZSB5b3VyIGNoYW5nZXMgdG8gLmdpdG1vZHVsZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkIgorbXNnc3RyICLor7flsIbmgqjnmoTkv67mlLnnvJPlrZjliLAgLmdpdG1vZHVsZXMg5Lit5oiW5L+d5a2Y6L+b5bqm5ZCO5YaN57un57utIgorCisjOiBidWlsdGluL3JtLmM6MzM1CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCByZW1vdmluZyAnJXMnIHJlY3Vyc2l2ZWx5IHdpdGhvdXQgLXIiCittc2dzdHIgIuacquaPkOS+myAtciDpgInpobnkuI3kvJrpgJLlvZLliKDpmaQgJyVzJyIKKworIzogYnVpbHRpbi9ybS5jOjM3NAorIywgYy1mb3JtYXQKK21zZ2lkICJnaXQgcm06IHVuYWJsZSB0byByZW1vdmUgJXMiCittc2dzdHIgImdpdCBybe+8muS4jeiDveWIoOmZpCAlcyIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxOAorbXNnaWQgIiIKKyJnaXQgc2VuZC1wYWNrIFstLWFsbCB8IC0tbWlycm9yXSBbLS1kcnktcnVuXSBbLS1mb3JjZV0gWy0tcmVjZWl2ZS1wYWNrPTxnaXQtIgorInJlY2VpdmUtcGFjaz5dIFstLXZlcmJvc2VdIFstLXRoaW5dIFstLWF0b21pY10gWzxob3N0PjpdPGRpcmVjdG9yeT4gIgorIls8cmVmPi4uLl1cbiIKKyIgIC0tYWxsIGFuZCBleHBsaWNpdCA8cmVmPiBzcGVjaWZpY2F0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorbXNnc3RyICIiCisiZ2l0IHNlbmQtcGFjayBbLS1hbGwgfCAtLW1pcnJvcl0gWy0tZHJ5LXJ1bl0gWy0tZm9yY2VdIFstLXJlY2VpdmUtcGFjaz08Z2l0LSIKKyJyZWNlaXZlLXBhY2s+XSBbLS12ZXJib3NlXSBbLS10aGluXSBbLS1hdG9taWNdIFs85Li75py6PjpdPOebruW9lT4gWzzlvJXnlKg+Li4uXVxuIgorIiAgLS1hbGwg5ZKM5piO56Gu55qEIDzlvJXnlKg+IOS6kuaWpeOAgiIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNjAKK21zZ2lkICJyZW1vdGUgbmFtZSIKK21zZ3N0ciAi6L+c56iL5ZCN56ewIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MQorbXNnaWQgInVzZSBzdGF0ZWxlc3MgUlBDIHByb3RvY29sIgorbXNnc3RyICLkvb/nlKjml6DnirbmgIHnmoQgUlBDIOWNj+iuriIKKworIzogYnVpbHRpbi9zZW5kLXBhY2suYzoxNzIKK21zZ2lkICJyZWFkIHJlZnMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi5LuO5qCH5YeG6L6T5YWl6K+75Y+W5byV55SoIgorCisjOiBidWlsdGluL3NlbmQtcGFjay5jOjE3MworbXNnaWQgInByaW50IHN0YXR1cyBmcm9tIHJlbW90ZSBoZWxwZXIiCittc2dzdHIgIuaJk+WNsOadpeiHqui/nOeoiyBoZWxwZXIg55qE54q25oCBIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MTMKK21zZ2lkICJnaXQgc2hvcnRsb2cgWzxvcHRpb25zPl0gWzxyZXZpc2lvbi1yYW5nZT5dIFtbLS1dIFs8cGF0aD4uLi5dXSIKK21zZ3N0ciAiZ2l0IHNob3J0bG9nIFs86YCJ6aG5Pl0gWzzniYjmnKzojIPlm7Q+XSBbWy0tXSBbPOi3r+W+hD4uLi5dXSIKKworIzogYnVpbHRpbi9zaG9ydGxvZy5jOjEzMQorIywgYy1mb3JtYXQKK21zZ2lkICJNaXNzaW5nIGF1dGhvcjogJXMiCittc2dzdHIgIue8uuWwkeS9nOiAhe+8miVzIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjMwCittc2dpZCAic29ydCBvdXRwdXQgYWNjb3JkaW5nIHRvIHRoZSBudW1iZXIgb2YgY29tbWl0cyBwZXIgYXV0aG9yIgorbXNnc3RyICLmoLnmja7mr4/kuKrkvZzogIXnmoTmj5DkuqTmlbDph4/mjpLluo8iCisKKyM6IGJ1aWx0aW4vc2hvcnRsb2cuYzoyMzIKK21zZ2lkICJTdXBwcmVzcyBjb21taXQgZGVzY3JpcHRpb25zLCBvbmx5IHByb3ZpZGVzIGNvbW1pdCBjb3VudCIKK21zZ3N0ciAi6ZqQ6JeP5o+Q5Lqk6K+05piO77yM5Y+q5o+Q5L6b5o+Q5Lqk5pWw6YePIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjM0Cittc2dpZCAiU2hvdyB0aGUgZW1haWwgYWRkcmVzcyBvZiBlYWNoIGF1dGhvciIKK21zZ3N0ciAi5pi+56S65q+P5Liq5L2c6ICF55qE55S15a2Q6YKu5Lu25Zyw5Z2AIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjM1Cittc2dpZCAid1ssaTFbLGkyXV0iCittc2dzdHIgIndbLGkxWyxpMl1dIgorCisjOiBidWlsdGluL3Nob3J0bG9nLmM6MjM2Cittc2dpZCAiTGluZXdyYXAgb3V0cHV0IgorbXNnc3RyICLmipjooYzovpPlh7oiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo5Cittc2dpZCAiIgorImdpdCBzaG93LWJyYW5jaCBbLWEgfCAtLWFsbF0gWy1yIHwgLS1yZW1vdGVzXSBbLS10b3BvLW9yZGVyIHwgLS1kYXRlLW9yZGVyXVxuIgorIlx0XHRbLS1jdXJyZW50XSBbLS1jb2xvcls9PHdoZW4+XSB8IC0tbm8tY29sb3JdIFstLXNwYXJzZV1cbiIKKyJcdFx0Wy0tbW9yZT08bj4gfCAtLWxpc3QgfCAtLWluZGVwZW5kZW50IHwgLS1tZXJnZS1iYXNlXVxuIgorIlx0XHRbLS1uby1uYW1lIHwgLS1zaGExLW5hbWVdIFstLXRvcGljc10gWyg8cmV2PiB8IDxnbG9iPikuLi5dIgorbXNnc3RyICIiCisiZ2l0IHNob3ctYnJhbmNoIFstYSB8IC0tYWxsXSBbLXIgfCAtLXJlbW90ZXNdIFstLXRvcG8tb3JkZXIgfCAtLWRhdGUtb3JkZXJdXG4iCisiXHRcdFstLWN1cnJlbnRdIFstLWNvbG9yWz085L2V5pe2Pl0gfCAtLW5vLWNvbG9yXSBbLS1zcGFyc2VdXG4iCisiXHRcdFstLW1vcmU9PG4+IHwgLS1saXN0IHwgLS1pbmRlcGVuZGVudCB8IC0tbWVyZ2UtYmFzZV1cbiIKKyJcdFx0Wy0tbm8tbmFtZSB8IC0tc2hhMS1uYW1lXSBbLS10b3BpY3NdIFsoPOeJiOacrD4gfCA86YCa6YWN56ymPikuLi5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6MTMKK21zZ2lkICJnaXQgc2hvdy1icmFuY2ggKC1nIHwgLS1yZWZsb2cpWz08bj5bLDxiYXNlPl1dIFstLWxpc3RdIFs8cmVmPl0iCittc2dzdHIgImdpdCBzaG93LWJyYW5jaCAoLWcgfCAtLXJlZmxvZylbPTxuPlssPGJhc2U+XV0gWy0tbGlzdF0gWzzlvJXnlKg+XSIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY1OQorbXNnaWQgInNob3cgcmVtb3RlLXRyYWNraW5nIGFuZCBsb2NhbCBicmFuY2hlcyIKK21zZ3N0ciAi5pi+56S66L+c56iL6Lef6Liq55qE5ZKM5pys5Zyw55qE5YiG5pSvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjYxCittc2dpZCAic2hvdyByZW1vdGUtdHJhY2tpbmcgYnJhbmNoZXMiCittc2dzdHIgIuaYvuekuui/nOeoi+i3n+i4queahOWIhuaUryIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY2MworbXNnaWQgImNvbG9yICcqISstJyBjb3JyZXNwb25kaW5nIHRvIHRoZSBicmFuY2giCittc2dzdHIgIuedgOiJsiAnKiErLScg5Yiw55u45bqU55qE5YiG5pSvIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY1Cittc2dpZCAic2hvdyA8bj4gbW9yZSBjb21taXRzIGFmdGVyIHRoZSBjb21tb24gYW5jZXN0b3IiCittc2dzdHIgIuaYvuekuuWFseWQjOelluWFiOWQjueahCA8bj4g5Liq5o+Q5LqkIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjY3Cittc2dpZCAic3lub255bSB0byBtb3JlPS0xIgorbXNnc3RyICLlkowgbW9yZT0tMSDlkIzkuYkiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2NjgKK21zZ2lkICJzdXBwcmVzcyBuYW1pbmcgc3RyaW5ncyIKK21zZ3N0ciAi5LiN5pi+56S65a2X56ym5Liy5ZG95ZCNIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjcwCittc2dpZCAiaW5jbHVkZSB0aGUgY3VycmVudCBicmFuY2giCittc2dzdHIgIuWMheaLrOW9k+WJjeWIhuaUryIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY3MgorbXNnaWQgIm5hbWUgY29tbWl0cyB3aXRoIHRoZWlyIG9iamVjdCBuYW1lcyIKK21zZ3N0ciAi5Lul5a+56LGh5ZCN5a2X5ZG95ZCN5o+Q5LqkIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc0Cittc2dpZCAic2hvdyBwb3NzaWJsZSBtZXJnZSBiYXNlcyIKK21zZ3N0ciAi5pi+56S65Y+v6IO95ZCI5bm255qE5Z+657q/IgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc2Cittc2dpZCAic2hvdyByZWZzIHVucmVhY2hhYmxlIGZyb20gYW55IG90aGVyIHJlZiIKK21zZ3N0ciAi5pi+56S65rKh5pyJ5Lu75L2V5byV55So55qE55qE5byV55SoIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njc4Cittc2dpZCAic2hvdyBjb21taXRzIGluIHRvcG9sb2dpY2FsIG9yZGVyIgorbXNnc3RyICLku6Xmi5PmiZHpobrluo/mmL7npLrmj5DkuqQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODEKK21zZ2lkICJzaG93IG9ubHkgY29tbWl0cyBub3Qgb24gdGhlIGZpcnN0IGJyYW5jaCIKK21zZ3N0ciAi5Y+q5pi+56S65LiN5Zyo56ys5LiA5Liq5YiG5pSv5LiK55qE5o+Q5LqkIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6NjgzCittc2dpZCAic2hvdyBtZXJnZXMgcmVhY2hhYmxlIGZyb20gb25seSBvbmUgdGlwIgorbXNnc3RyICLmmL7npLrku4XkuIDkuKrliIbmlK/lj6/orr/pl67nmoTlkIjlubbmj5DkuqQiCisKKyM6IGJ1aWx0aW4vc2hvdy1icmFuY2guYzo2ODUKK21zZ2lkICJ0b3BvbG9naWNhbGx5IHNvcnQsIG1haW50YWluaW5nIGRhdGUgb3JkZXIgd2hlcmUgcG9zc2libGUiCittc2dzdHIgIuaLk+aJkeaWueW8j+aOkuW6j++8jOW5tuWwveWPr+iDveWcsOS/neaMgeaXpeacn+mhuuW6jyIKKworIzogYnVpbHRpbi9zaG93LWJyYW5jaC5jOjY4OAorbXNnaWQgIjxuPlssPGJhc2U+XSIKK21zZ3N0ciAiPG4+Wyw8YmFzZT5dIgorCisjOiBidWlsdGluL3Nob3ctYnJhbmNoLmM6Njg5Cittc2dpZCAic2hvdyA8bj4gbW9zdCByZWNlbnQgcmVmLWxvZyBlbnRyaWVzIHN0YXJ0aW5nIGF0IGJhc2UiCittc2dzdHIgIuaYvuekuuS7jiBiYXNlIOW8gOWni+eahCA8bj4g5p2h5pyA6L+R55qE5byV55So5pel5b+X6K6w5b2VIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTAKK21zZ2lkICIiCisiZ2l0IHNob3ctcmVmIFstcSB8IC0tcXVpZXRdIFstLXZlcmlmeV0gWy0taGVhZF0gWy1kIHwgLS1kZXJlZmVyZW5jZV0gWy1zIHwgLS0iCisiaGFzaFs9PG4+XV0gWy0tYWJicmV2Wz08bj5dXSBbLS10YWdzXSBbLS1oZWFkc10gWy0tXSBbPHBhdHRlcm4+Li4uXSIKK21zZ3N0ciAiIgorImdpdCBzaG93LXJlZiBbLXEgfCAtLXF1aWV0XSBbLS12ZXJpZnldIFstLWhlYWRdIFstZCB8IC0tZGVyZWZlcmVuY2VdIFstcyB8IC0tIgorImhhc2hbPTxuPl1dIFstLWFiYnJldls9PG4+XV0gWy0tdGFnc10gWy0taGVhZHNdIFstLV0gWzzmqKHlvI8+Li4uXSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjExCittc2dpZCAiZ2l0IHNob3ctcmVmIC0tZXhjbHVkZS1leGlzdGluZ1s9PHBhdHRlcm4+XSA8IDxyZWYtbGlzdD4iCittc2dzdHIgImdpdCBzaG93LXJlZiAtLWV4Y2x1ZGUtZXhpc3RpbmdbPTzmqKHlvI8+XSA8IDzlvJXnlKjliJfooag+IgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcwCittc2dpZCAib25seSBzaG93IHRhZ3MgKGNhbiBiZSBjb21iaW5lZCB3aXRoIGhlYWRzKSIKK21zZ3N0ciAi5Y+q5pi+56S65qCH562+77yI5Y+v5Lul5ZKM5aS05YWx55So77yJIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcxCittc2dpZCAib25seSBzaG93IGhlYWRzIChjYW4gYmUgY29tYmluZWQgd2l0aCB0YWdzKSIKK21zZ3N0ciAi5Y+q5pi+56S65aS077yI5Y+v5Lul5ZKM5qCH562+5YWx55So77yJIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTcyCittc2dpZCAic3RyaWN0ZXIgcmVmZXJlbmNlIGNoZWNraW5nLCByZXF1aXJlcyBleGFjdCByZWYgcGF0aCIKK21zZ3N0ciAi5pu05Lil5qC855qE5byV55So5qOA5rWL77yM6ZyA6KaB57K+56Gu55qE5byV55So6Lev5b6EIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTc1IGJ1aWx0aW4vc2hvdy1yZWYuYzoxNzcKK21zZ2lkICJzaG93IHRoZSBIRUFEIHJlZmVyZW5jZSwgZXZlbiBpZiBpdCB3b3VsZCBiZSBmaWx0ZXJlZCBvdXQiCittc2dzdHIgIuaYvuekuiBIRUFEIOW8leeUqO+8jOWNs+S9v+iiq+i/h+a7pOaOiSIKKworIzogYnVpbHRpbi9zaG93LXJlZi5jOjE3OQorbXNnaWQgImRlcmVmZXJlbmNlIHRhZ3MgaW50byBvYmplY3QgSURzIgorbXNnc3RyICLovazmjaLmoIfnrb7liLDlr7nosaEgSUQiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODEKK21zZ2lkICJvbmx5IHNob3cgU0hBMSBoYXNoIHVzaW5nIDxuPiBkaWdpdHMiCittc2dzdHIgIuWPquaYvuekuuS9v+eUqCA8bj4g5Liq5pWw5a2X55qEIFNIQTEg5ZOI5biMIgorCisjOiBidWlsdGluL3Nob3ctcmVmLmM6MTg1Cittc2dpZCAiZG8gbm90IHByaW50IHJlc3VsdHMgdG8gc3Rkb3V0ICh1c2VmdWwgd2l0aCAtLXZlcmlmeSkiCittc2dzdHIgIuS4jeaJk+WNsOe7k+aenOWIsOagh+WHhui+k+WHuu+8iOS+i+WmguS4jiAtLXZlcmlmeSDlj4LmlbDlhbHnlKjvvIkiCisKKyM6IGJ1aWx0aW4vc2hvdy1yZWYuYzoxODcKK21zZ2lkICJzaG93IHJlZnMgZnJvbSBzdGRpbiB0aGF0IGFyZW4ndCBpbiBsb2NhbCByZXBvc2l0b3J5IgorbXNnc3RyICLmmL7npLrku47moIflh4bovpPlhaXkuK3or7vlhaXnmoTkuI3lnKjmnKzlnLDku5PlupPkuK3nmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NworbXNnaWQgImdpdCBzeW1ib2xpYy1yZWYgWzxvcHRpb25zPl0gPG5hbWU+IFs8cmVmPl0iCittc2dzdHIgImdpdCBzeW1ib2xpYy1yZWYgWzzpgInpobk+XSA85ZCN56ewPiBbPOW8leeUqD5dIgorCisjOiBidWlsdGluL3N5bWJvbGljLXJlZi5jOjgKK21zZ2lkICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPG5hbWU+IgorbXNnc3RyICJnaXQgc3ltYm9saWMtcmVmIC1kIFstcV0gPOWQjeensD4iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDAKK21zZ2lkICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGZvciBub24tc3ltYm9saWMgKGRldGFjaGVkKSByZWZzIgorbXNnc3RyICLkuI3mmL7npLrpnZ7nrKblj7fvvIjliIbnprvnmoTvvInlvJXnlKjnmoTplJnor6/kv6Hmga8iCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDEKK21zZ2lkICJkZWxldGUgc3ltYm9saWMgcmVmIgorbXNnc3RyICLliKDpmaTnrKblj7flvJXnlKgiCisKKyM6IGJ1aWx0aW4vc3ltYm9saWMtcmVmLmM6NDIKK21zZ2lkICJzaG9ydGVuIHJlZiBvdXRwdXQiCittc2dzdHIgIueugOefreeahOW8leeUqOi+k+WHuiIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjIKK21zZ2lkICJyZWFzb24iCittc2dzdHIgIuWOn+WboCIKKworIzogYnVpbHRpbi9zeW1ib2xpYy1yZWYuYzo0MyBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjIKK21zZ2lkICJyZWFzb24gb2YgdGhlIHVwZGF0ZSIKK21zZ3N0ciAi5pu05paw55qE5Y6f5ZugIgorCisjOiBidWlsdGluL3RhZy5jOjIyCittc2dpZCAiIgorImdpdCB0YWcgWy1hIHwgLXMgfCAtdSA8a2V5LWlkPl0gWy1mXSBbLW0gPG1zZz4gfCAtRiA8ZmlsZT5dIDx0YWduYW1lPiAiCisiWzxoZWFkPl0iCittc2dzdHIgIiIKKyJnaXQgdGFnIFstYSB8IC1zIHwgLXUgPGtleS1pZD5dIFstZl0gWy1tIDzor7TmmI4+IHwgLUYgPOaWh+S7tj5dIDzmoIfnrb7lkI0+IFs85aS0Pl0iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MjMKK21zZ2lkICJnaXQgdGFnIC1kIDx0YWduYW1lPi4uLiIKK21zZ3N0ciAiZ2l0IHRhZyAtZCA85qCH562+5ZCNPi4uLiIKKworIzogYnVpbHRpbi90YWcuYzoyNAorbXNnaWQgIiIKKyJnaXQgdGFnIC1sIFstbls8bnVtPl1dIFstLWNvbnRhaW5zIDxjb21taXQ+XSBbLS1wb2ludHMtYXQgPG9iamVjdD5dXG4iCisiXHRcdFs8cGF0dGVybj4uLi5dIgorbXNnc3RyICIiCisiZ2l0IHRhZyAtbCBbLW5bPOaVsOWtlz5dXSBbLS1jb250YWlucyA85o+Q5LqkPl0gWy0tcG9pbnRzLWF0IDzlr7nosaE+XSBbPOaooeW8jz4uLi5dIgorCisjOiBidWlsdGluL3RhZy5jOjI2Cittc2dpZCAiZ2l0IHRhZyAtdiA8dGFnbmFtZT4uLi4iCittc2dzdHIgImdpdCB0YWcgLXYgPOagh+etvuWQjT4uLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIgorbXNnc3RyICLpnZ7ms5XnmoTlr7nosaHkuo4gJyVzJyIKKworIzogYnVpbHRpbi90YWcuYzozMDEKKyMsIGMtZm9ybWF0Cittc2dpZCAidGFnIG5hbWUgdG9vIGxvbmc6ICUuKnMuLi4iCittc2dzdHIgIuagh+etvuWQjeensOWkqumVv++8miUuKnMuLi4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzA2CisjLCBjLWZvcm1hdAorbXNnaWQgInRhZyAnJXMnIG5vdCBmb3VuZC4iCittc2dzdHIgIuacquWPkeeOsOagh+etviAnJXMn44CCIgorCisjOiBidWlsdGluL3RhZy5jOjMyMQorIywgYy1mb3JtYXQKK21zZ2lkICJEZWxldGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIuW3suWIoOmZpOagh+etviAnJXMn77yI5pu+5Li6ICVz77yJXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzMzCisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkIG5vdCB2ZXJpZnkgdGhlIHRhZyAnJXMnIgorbXNnc3RyICLkuI3og73moKHpqozor6XmoIfnrb4gJyVzJyIKKworIzogYnVpbHRpbi90YWcuYzozNDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIldyaXRlIGEgbWVzc2FnZSBmb3IgdGFnOlxuIgorIiAgJXNcbiIKKyJMaW5lcyBzdGFydGluZyB3aXRoICclYycgd2lsbCBiZSBpZ25vcmVkLlxuIgorbXNnc3RyICIiCisiXG4iCisi6L6T5YWl5LiA5Liq5qCH562+6K+05piO77yaXG4iCisiICAlc1xuIgorIuS7pSAnJWMnIOW8gOWktOeahOihjOWwhuiiq+W/veeVpeOAglxuIgorCisjOiBidWlsdGluL3RhZy5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiV3JpdGUgYSBtZXNzYWdlIGZvciB0YWc6XG4iCisiICAlc1xuIgorIkxpbmVzIHN0YXJ0aW5nIHdpdGggJyVjJyB3aWxsIGJlIGtlcHQ7IHlvdSBtYXkgcmVtb3ZlIHRoZW0geW91cnNlbGYgaWYgeW91ICIKKyJ3YW50IHRvLlxuIgorbXNnc3RyICIiCisiXG4iCisi6L6T5YWl5LiA5Liq5qCH562+6K+05piO77yaXG4iCisiICAlc1xuIgorIuS7pSAnJWMnIOW8gOWktOeahOihjOWwhuiiq+S/neeVme+8jOWmguaenOaCqOaEv+aEj+S5n+WPr+S7peWIoOmZpOWug+S7rOOAglxuIgorCisjOiBidWlsdGluL3RhZy5jOjM3MQorIywgYy1mb3JtYXQKK21zZ2lkICJ1bnN1cHBvcnRlZCBzb3J0IHNwZWNpZmljYXRpb24gJyVzJyIKK21zZ3N0ciAi5LiN5pSv5oyB55qE5o6S5bqP6KeE5qC8ICclcyciCisKKyM6IGJ1aWx0aW4vdGFnLmM6MzczCisjLCBjLWZvcm1hdAorbXNnaWQgInVuc3VwcG9ydGVkIHNvcnQgc3BlY2lmaWNhdGlvbiAnJXMnIGluIHZhcmlhYmxlICclcyciCittc2dzdHIgIuS4jeaUr+aMgeWPmOmHjyAnJTIkcycg55qE5o6S5bqP6KeE5qC8ICclMSRzJyIKKworIzogYnVpbHRpbi90YWcuYzo0MjgKK21zZ2lkICJ1bmFibGUgdG8gc2lnbiB0aGUgdGFnIgorbXNnc3RyICLml6Dms5Xnrb7nvbLmoIfnrb4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDMwCittc2dpZCAidW5hYmxlIHRvIHdyaXRlIHRhZyBmaWxlIgorbXNnc3RyICLml6Dms5XlhpnmoIfnrb7mlofku7YiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NDU1Cittc2dpZCAiYmFkIG9iamVjdCB0eXBlLiIKK21zZ3N0ciAi5Z2P55qE5a+56LGh57G75Z6L44CCIgorCisjOiBidWlsdGluL3RhZy5jOjQ2OAorbXNnaWQgInRhZyBoZWFkZXIgdG9vIGJpZy4iCittc2dzdHIgIuagh+etvuWktOS/oeaBr+WkquWkp+OAgiIKKworIzogYnVpbHRpbi90YWcuYzo1MDQKK21zZ2lkICJubyB0YWcgbWVzc2FnZT8iCittc2dzdHIgIuaXoOagh+etvuivtOaYju+8nyIKKworIzogYnVpbHRpbi90YWcuYzo1MTAKKyMsIGMtZm9ybWF0Cittc2dpZCAiVGhlIHRhZyBtZXNzYWdlIGhhcyBiZWVuIGxlZnQgaW4gJXNcbiIKK21zZ3N0ciAi5qCH562+6K+05piO6KKr5L+d55WZ5ZyoICVzXG4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTU5Cittc2dpZCAic3dpdGNoICdwb2ludHMtYXQnIHJlcXVpcmVzIGFuIG9iamVjdCIKK21zZ3N0ciAi5byA5YWzICdwb2ludHMtYXQnIOmcgOimgeS4gOS4quWvueixoSIKKworIzogYnVpbHRpbi90YWcuYzo1NjEKKyMsIGMtZm9ybWF0Cittc2dpZCAibWFsZm9ybWVkIG9iamVjdCBuYW1lICclcyciCittc2dzdHIgIumdnuazleeahOWvueixoeWQjSAnJXMnIgorCisjOiBidWlsdGluL3RhZy5jOjU5MAorbXNnaWQgImxpc3QgdGFnIG5hbWVzIgorbXNnc3RyICLliJflh7rmoIfnrb7lkI3np7AiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTkyCittc2dpZCAicHJpbnQgPG4+IGxpbmVzIG9mIGVhY2ggdGFnIG1lc3NhZ2UiCittc2dzdHIgIuavj+S4quagh+etvuS/oeaBr+aJk+WNsCA8bj4g6KGMIgorCisjOiBidWlsdGluL3RhZy5jOjU5NAorbXNnaWQgImRlbGV0ZSB0YWdzIgorbXNnc3RyICLliKDpmaTmoIfnrb4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NTk1Cittc2dpZCAidmVyaWZ5IHRhZ3MiCittc2dzdHIgIumqjOivgeagh+etviIKKworIzogYnVpbHRpbi90YWcuYzo1OTcKK21zZ2lkICJUYWcgY3JlYXRpb24gb3B0aW9ucyIKK21zZ3N0ciAi5qCH562+5Yib5bu66YCJ6aG5IgorCisjOiBidWlsdGluL3RhZy5jOjU5OQorbXNnaWQgImFubm90YXRlZCB0YWcsIG5lZWRzIGEgbWVzc2FnZSIKK21zZ3N0ciAi6ZmE5rOo5qCH562+77yM6ZyA6KaB5LiA5Liq6K+05piOIgorCisjOiBidWlsdGluL3RhZy5jOjYwMQorbXNnaWQgInRhZyBtZXNzYWdlIgorbXNnc3RyICLmoIfnrb7or7TmmI4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjAzCittc2dpZCAiYW5ub3RhdGVkIGFuZCBHUEctc2lnbmVkIHRhZyIKK21zZ3N0ciAi6ZmE5rOo5bm26ZmE5YqgIEdQRyDnrb7lkI3nmoTmoIfnrb4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjA3Cittc2dpZCAidXNlIGFub3RoZXIga2V5IHRvIHNpZ24gdGhlIHRhZyIKK21zZ3N0ciAi5L2/55So5Y+m5aSW55qE56eB6ZKl562+5ZCN6K+l5qCH562+IgorCisjOiBidWlsdGluL3RhZy5jOjYwOAorbXNnaWQgInJlcGxhY2UgdGhlIHRhZyBpZiBleGlzdHMiCittc2dzdHIgIuWmguaenOWtmOWcqO+8jOabv+aNoueOsOacieeahOagh+etviIKKworIzogYnVpbHRpbi90YWcuYzo2MDkgYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY4Cittc2dpZCAiY3JlYXRlIGEgcmVmbG9nIgorbXNnc3RyICLliJvlu7rlvJXnlKjml6Xlv5ciCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjExCittc2dpZCAiVGFnIGxpc3Rpbmcgb3B0aW9ucyIKK21zZ3N0ciAi5qCH562+5YiX6KGo6YCJ6aG5IgorCisjOiBidWlsdGluL3RhZy5jOjYxMgorbXNnaWQgInNob3cgdGFnIGxpc3QgaW4gY29sdW1ucyIKK21zZ3N0ciAi5Lul5YiX55qE5pa55byP5pi+56S65qCH562+5YiX6KGoIgorCisjOiBidWlsdGluL3RhZy5jOjYxNAorbXNnaWQgInNvcnQgdGFncyIKK21zZ3N0ciAi5o6S5bqP5qCH562+IgorCisjOiBidWlsdGluL3RhZy5jOjYxOSBidWlsdGluL3RhZy5jOjYyNQorbXNnaWQgInByaW50IG9ubHkgdGFncyB0aGF0IGNvbnRhaW4gdGhlIGNvbW1pdCIKK21zZ3N0ciAi5Y+q5omT5Y2w5YyF5ZCr5o+Q5Lqk55qE5qCH562+IgorCisjOiBidWlsdGluL3RhZy5jOjYzMQorbXNnaWQgInByaW50IG9ubHkgdGFncyBvZiB0aGUgb2JqZWN0IgorbXNnc3RyICLlj6rmiZPljbDlr7nosaHnmoTmoIfnrb4iCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjU3Cittc2dpZCAiLS1jb2x1bW4gYW5kIC1uIGFyZSBpbmNvbXBhdGlibGUiCittc2dzdHIgIi0tY29sdW1uIOWSjCAtbiDkuI3lhbzlrrkiCisKKyM6IGJ1aWx0aW4vdGFnLmM6NjY5Cittc2dpZCAiLS1zb3J0IGFuZCAtbiBhcmUgaW5jb21wYXRpYmxlIgorbXNnc3RyICItLXNvcnQg5ZKMIC1uIOS4jeWFvOWuuSIKKworIzogYnVpbHRpbi90YWcuYzo2NzYKK21zZ2lkICItbiBvcHRpb24gaXMgb25seSBhbGxvd2VkIHdpdGggLWwuIgorbXNnc3RyICItbiDpgInpobnlj6rlhYHorrjlkowgLWwg5ZCM5pe25L2/55So44CCIgorCisjOiBidWlsdGluL3RhZy5jOjY3OAorbXNnaWQgIi0tY29udGFpbnMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCB3aXRoIC1sLiIKK21zZ3N0ciAiLS1jb250YWlucyDpgInpobnlj6rlhYHorrjlkowgLWwg5ZCM5pe25L2/55So44CCIgorCisjOiBidWlsdGluL3RhZy5jOjY4MAorbXNnaWQgIi0tcG9pbnRzLWF0IG9wdGlvbiBpcyBvbmx5IGFsbG93ZWQgd2l0aCAtbC4iCittc2dzdHIgIi0tcG9pbnRzLWF0IOmAiemhueWPquWFgeiuuOWSjCAtbCDlkIzml7bkvb/nlKjjgIIiCisKKyM6IGJ1aWx0aW4vdGFnLmM6Njg4Cittc2dpZCAib25seSBvbmUgLUYgb3IgLW0gb3B0aW9uIGlzIGFsbG93ZWQuIgorbXNnc3RyICLlj6rlhYHorrjkuIDkuKogLUYg5oiWIC1tIOmAiemhueOAgiIKKworIzogYnVpbHRpbi90YWcuYzo3MDgKK21zZ2lkICJ0b28gbWFueSBwYXJhbXMiCittc2dzdHIgIuWkquWkmuWPguaVsCIKKworIzogYnVpbHRpbi90YWcuYzo3MTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBpcyBub3QgYSB2YWxpZCB0YWcgbmFtZS4iCittc2dzdHIgIiclcycg5LiN5piv5LiA5Liq5pyJ5pWI55qE5qCH562+5ZCN56ew44CCIgorCisjOiBidWlsdGluL3RhZy5jOjcxOQorIywgYy1mb3JtYXQKK21zZ2lkICJ0YWcgJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAi5qCH562+ICclcycg5bey5a2Y5ZyoIgorCisjOiBidWlsdGluL3RhZy5jOjc0NAorIywgYy1mb3JtYXQKK21zZ2lkICJVcGRhdGVkIHRhZyAnJXMnICh3YXMgJXMpXG4iCittc2dzdHIgIuW3suabtOaWsOagh+etviAnJXMn77yI5pu+5Li6ICVz77yJXG4iCisKKyM6IGJ1aWx0aW4vdW5wYWNrLW9iamVjdHMuYzo0OTAKK21zZ2lkICJVbnBhY2tpbmcgb2JqZWN0cyIKK21zZ3N0ciAi5bGV5byA5a+56LGh5LitIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjcwCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBjcmVhdGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLml6Dms5XliJvlu7rnm67lvZUgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6NzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIHN0YXQgJXMiCittc2dzdHIgIuaXoOazleaemuS4viAlcyDnirbmgIEiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6ODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGNyZWF0ZSBmaWxlICVzIgorbXNnc3RyICLml6Dms5XliJvlu7rmlofku7YgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiZmFpbGVkIHRvIGRlbGV0ZSBmaWxlICVzIgorbXNnc3RyICLml6Dms5XliKDpmaTmlofku7YgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAxIGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MjAzCisjLCBjLWZvcm1hdAorbXNnaWQgImZhaWxlZCB0byBkZWxldGUgZGlyZWN0b3J5ICVzIgorbXNnc3RyICLml6Dms5XliKDpmaTnm67lvZUgJXMiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTI0CisjLCBjLWZvcm1hdAorbXNnaWQgIlRlc3RpbmcgIgorbXNnc3RyICLmraPlnKjmtYvor5UgIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjEzNgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gZG9lcyBub3QgY2hhbmdlIGFmdGVyIGFkZGluZyBhIG5ldyBmaWxlIgorbXNnc3RyICLmt7vliqDkuIDkuKrmlrDmlofku7blkI7vvIznm67lvZXnmoTnirbmgIHkv6Hmga/mnKrmlLnlj5giCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTQ5Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgYWRkaW5nIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAi5re75Yqg5LiA5Liq5paw55uu5b2V5ZCO77yM55uu5b2V55qE54q25oCB5L+h5oGv5pyq5pS55Y+YIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjE2MgorbXNnaWQgImRpcmVjdG9yeSBzdGF0IGluZm8gY2hhbmdlcyBhZnRlciB1cGRhdGluZyBhIGZpbGUiCittc2dzdHIgIuabtOaWsOS4gOS4quaWh+S7tuWQju+8jOebruW9leeahOeKtuaAgeS/oeaBr+iiq+S/ruaUuSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoxNzMKK21zZ2lkICJkaXJlY3Rvcnkgc3RhdCBpbmZvIGNoYW5nZXMgYWZ0ZXIgYWRkaW5nIGEgZmlsZSBpbnNpZGUgc3ViZGlyZWN0b3J5IgorbXNnc3RyICLlnKjlrZDnm67lvZXkuK3mt7vliqDmlofku7blkI7vvIznm67lvZXnmoTnirbmgIHkv6Hmga/ooqvkv67mlLkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTg0Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBmaWxlIgorbXNnc3RyICLliKDpmaTkuIDkuKrmlofku7blkI7vvIznm67lvZXnmoTnirbmgIHkv6Hmga/mnKrmlLnlj5giCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTk3Cittc2dpZCAiZGlyZWN0b3J5IHN0YXQgaW5mbyBkb2VzIG5vdCBjaGFuZ2UgYWZ0ZXIgZGVsZXRpbmcgYSBkaXJlY3RvcnkiCittc2dzdHIgIuWIoOmZpOS4gOS4quebruW9leWQju+8jOebruW9leeahOeKtuaAgeS/oeaBr+acquaUueWPmCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzoyMDQKK21zZ2lkICIgT0siCittc2dzdHIgIiBPSyIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo1NjQKK21zZ2lkICJnaXQgdXBkYXRlLWluZGV4IFs8b3B0aW9ucz5dIFstLV0gWzxmaWxlPi4uLl0iCittc2dzdHIgImdpdCB1cGRhdGUtaW5kZXggWzzpgInpobk+XSBbLS1dIFs85paH5Lu2Pi4uLl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTE4Cittc2dpZCAiY29udGludWUgcmVmcmVzaCBldmVuIHdoZW4gaW5kZXggbmVlZHMgdXBkYXRlIgorbXNnc3RyICLlvZPntKLlvJXpnIDopoHmm7TmlrDml7bnu6fnu63liLfmlrAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTIxCittc2dpZCAicmVmcmVzaDogaWdub3JlIHN1Ym1vZHVsZXMiCittc2dzdHIgIuWIt+aWsO+8muW/veeVpeWtkOaooee7hCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5MjQKK21zZ2lkICJkbyBub3QgaWdub3JlIG5ldyBmaWxlcyIKK21zZ3N0ciAi5LiN5b+955Wl5paw55qE5paH5Lu2IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkyNgorbXNnaWQgImxldCBmaWxlcyByZXBsYWNlIGRpcmVjdG9yaWVzIGFuZCB2aWNlLXZlcnNhIgorbXNnc3RyICLorqnmlofku7bmm7/mjaLnm67lvZXvvIjlj43kuYvkuqbnhLbvvIkiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTI4Cittc2dpZCAibm90aWNlIGZpbGVzIG1pc3NpbmcgZnJvbSB3b3JrdHJlZSIKK21zZ3N0ciAi6YCa55+l5paH5Lu25LuO5bel5L2c5Yy65Lii5aSxIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjkzMAorbXNnaWQgInJlZnJlc2ggZXZlbiBpZiBpbmRleCBjb250YWlucyB1bm1lcmdlZCBlbnRyaWVzIgorbXNnc3RyICLljbPkvb/ntKLlvJXljLrljIXlkKvmnKrlkIjlubbnmoTmnaHnm67kuZ/miafooYzliLfmlrAiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTMzCittc2dpZCAicmVmcmVzaCBzdGF0IGluZm9ybWF0aW9uIgorbXNnc3RyICLliLfmlrDnu5/orqHkv6Hmga8iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTM3Cittc2dpZCAibGlrZSAtLXJlZnJlc2gsIGJ1dCBpZ25vcmUgYXNzdW1lLXVuY2hhbmdlZCBzZXR0aW5nIgorbXNnc3RyICLnsbvkvLzkuo4gLS1yZWZyZXNo77yM5L2G5piv5b+955WlIGFzc3VtZS11bmNoYW5nZWQg6K6+572uIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0MQorbXNnaWQgIjxtb2RlPiw8b2JqZWN0Piw8cGF0aD4iCittc2dzdHIgIjzlrZjlj5bmqKHlvI8+LDzlr7nosaE+LDzot6/lvoQ+IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0MgorbXNnaWQgImFkZCB0aGUgc3BlY2lmaWVkIGVudHJ5IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi5re75Yqg5oyH5a6a55qE5p2h55uu5Yiw57Si5byV5Yy6IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NgorbXNnaWQgIigrLy0peCIKK21zZ3N0ciAiKCsvLSl4IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk0NworbXNnaWQgIm92ZXJyaWRlIHRoZSBleGVjdXRhYmxlIGJpdCBvZiB0aGUgbGlzdGVkIGZpbGVzIgorbXNnc3RyICLopobnm5bliJfooajph4zmlofku7bnmoTlj6/miafooYzkvY0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTUxCittc2dpZCAibWFyayBmaWxlcyBhcyBcIm5vdCBjaGFuZ2luZ1wiIgorbXNnc3RyICLmiormlofku7bmoIforrDkuLogXCLmsqHmnInlj5jmm7RcIiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NTQKK21zZ2lkICJjbGVhciBhc3N1bWVkLXVuY2hhbmdlZCBiaXQiCittc2dzdHIgIua4hemZpCBhc3N1bWVkLXVuY2hhbmdlZCDkvY0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTU3Cittc2dpZCAibWFyayBmaWxlcyBhcyBcImluZGV4LW9ubHlcIiIKK21zZ3N0ciAi5oqK5paH5Lu25qCH6K6w5Li6IFwi5LuF57Si5byVXCIiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTYwCittc2dpZCAiY2xlYXIgc2tpcC13b3JrdHJlZSBiaXQiCittc2dzdHIgIua4hemZpCBza2lwLXdvcmt0cmVlIOS9jSIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjMKK21zZ2lkICJhZGQgdG8gaW5kZXggb25seTsgZG8gbm90IGFkZCBjb250ZW50IHRvIG9iamVjdCBkYXRhYmFzZSIKK21zZ3N0ciAi5Y+q5re75Yqg5Yiw57Si5byV5Yy677yb5LiN5re75Yqg5a+56LGh5Yiw5a+56LGh5bqTIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2NQorbXNnaWQgInJlbW92ZSBuYW1lZCBwYXRocyBldmVuIGlmIHByZXNlbnQgaW4gd29ya3RyZWUiCittc2dzdHIgIuWNs+S9v+WtmOWcqOW3peS9nOWMuumHjO+8jOS5n+WIoOmZpOi3r+W+hCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NjcKK21zZ2lkICJ3aXRoIC0tc3RkaW46IGlucHV0IGxpbmVzIGFyZSB0ZXJtaW5hdGVkIGJ5IG51bGwgYnl0ZXMiCittc2dzdHIgIuaQuuW4piAtLXN0ZGlu77ya6L6T5YWl55qE6KGM5LulIG51bGwg5a2X56ym57uI5q2iIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk2OQorbXNnaWQgInJlYWQgbGlzdCBvZiBwYXRocyB0byBiZSB1cGRhdGVkIGZyb20gc3RhbmRhcmQgaW5wdXQiCittc2dzdHIgIuS7juagh+WHhui+k+WFpeS4reivu+WPlumcgOimgeabtOaWsOeahOi3r+W+hOWIl+ihqCIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5NzMKK21zZ2lkICJhZGQgZW50cmllcyBmcm9tIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbmRleCIKK21zZ3N0ciAi5LuO5qCH5YeG6L6T5YWl5re75Yqg5p2h55uu5Yiw57Si5byV5Yy6IgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk3NworbXNnaWQgInJlcG9wdWxhdGUgc3RhZ2VzICMyIGFuZCAjMyBmb3IgdGhlIGxpc3RlZCBwYXRocyIKK21zZ3N0ciAi5Li65oyH5a6a5paH5Lu26YeN5paw55Sf5oiQ56ysMuWSjOesrDPmmoLlrZjljLoiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTgxCittc2dpZCAib25seSB1cGRhdGUgZW50cmllcyB0aGF0IGRpZmZlciBmcm9tIEhFQUQiCittc2dzdHIgIuWPquabtOaWsOS4jiBIRUFEIOS4jeWQjOeahOadoeebriIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5ODUKK21zZ2lkICJpZ25vcmUgZmlsZXMgbWlzc2luZyBmcm9tIHdvcmt0cmVlIgorbXNnc3RyICLlv73nlaXlt6XkvZzljLrkuKLlpLHnmoTmlofku7YiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTg4Cittc2dpZCAicmVwb3J0IGFjdGlvbnMgdG8gc3RhbmRhcmQgb3V0cHV0IgorbXNnc3RyICLlnKjmoIflh4bovpPlh7rmmL7npLrmk43kvZwiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTkwCittc2dpZCAiKGZvciBwb3JjZWxhaW5zKSBmb3JnZXQgc2F2ZWQgdW5yZXNvbHZlZCBjb25mbGljdHMiCittc2dzdHIgIihmb3IgcG9yY2VsYWlucykg5b+Y6K6w5L+d5a2Y55qE5pyq6Kej5Yaz55qE5Yay56qBIgorCisjOiBidWlsdGluL3VwZGF0ZS1pbmRleC5jOjk5NAorbXNnaWQgIndyaXRlIGluZGV4IGluIHRoaXMgZm9ybWF0IgorbXNnc3RyICLku6Xov5nnp43moLzlvI/lhpnlhaXntKLlvJXljLoiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6OTk2Cittc2dpZCAiZW5hYmxlIG9yIGRpc2FibGUgc3BsaXQgaW5kZXgiCittc2dzdHIgIuWQr+eUqOaIluemgeeUqOe0ouW8leaLhuWIhiIKKworIzogYnVpbHRpbi91cGRhdGUtaW5kZXguYzo5OTgKK21zZ2lkICJlbmFibGUvZGlzYWJsZSB1bnRyYWNrZWQgY2FjaGUiCittc2dzdHIgIuWQr+eUqC/npoHnlKjlr7nmnKrot5/ouKrmlofku7bnmoTnvJPlrZgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLWluZGV4LmM6MTAwMAorbXNnaWQgImVuYWJsZSB1bnRyYWNrZWQgY2FjaGUgd2l0aG91dCB0ZXN0aW5nIHRoZSBmaWxlc3lzdGVtIgorbXNnc3RyICLml6DpnIDmo4DmtYvmlofku7bns7vnu5/vvIzlkK/nlKjlr7nmnKrot5/ouKrmlofku7bnmoTnvJPlrZgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjkKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAtZCA8cmVmbmFtZT4gWzxvbGQtdmFsPl0iCittc2dzdHIgImdpdCB1cGRhdGUtcmVmIFs86YCJ6aG5Pl0gLWQgPOW8leeUqOWQjT4gWzzml6flgLw+XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MTAKK21zZ2lkICJnaXQgdXBkYXRlLXJlZiBbPG9wdGlvbnM+XSAgICA8cmVmbmFtZT4gPG5ldy12YWw+IFs8b2xkLXZhbD5dIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPOmAiemhuT5dICAgIDzlvJXnlKjlkI0+IDzmlrDlgLw+IFs85pen5YC8Pl0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjExCittc2dpZCAiZ2l0IHVwZGF0ZS1yZWYgWzxvcHRpb25zPl0gLS1zdGRpbiBbLXpdIgorbXNnc3RyICJnaXQgdXBkYXRlLXJlZiBbPOmAiemhuT5dIC0tc3RkaW4gWy16XSIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzYzCittc2dpZCAiZGVsZXRlIHRoZSByZWZlcmVuY2UiCittc2dzdHIgIuWIoOmZpOW8leeUqCIKKworIzogYnVpbHRpbi91cGRhdGUtcmVmLmM6MzY1Cittc2dpZCAidXBkYXRlIDxyZWZuYW1lPiBub3QgdGhlIG9uZSBpdCBwb2ludHMgdG8iCittc2dzdHIgIuabtOaWsCA85byV55So5ZCNPiDmnKzouqvogIzkuI3mmK/lroPmjIflkJHnmoTlvJXnlKgiCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXJlZi5jOjM2NgorbXNnaWQgInN0ZGluIGhhcyBOVUwtdGVybWluYXRlZCBhcmd1bWVudHMiCittc2dzdHIgIuagh+WHhui+k+WFpeacieS7pSBOVUwg5a2X56ym57uI5q2i55qE5Y+C5pWwIgorCisjOiBidWlsdGluL3VwZGF0ZS1yZWYuYzozNjcKK21zZ2lkICJyZWFkIHVwZGF0ZXMgZnJvbSBzdGRpbiIKK21zZ3N0ciAi5LuO5qCH5YeG6L6T5YWl6K+75Y+W5pu05pawIgorCisjOiBidWlsdGluL3VwZGF0ZS1zZXJ2ZXItaW5mby5jOjYKK21zZ2lkICJnaXQgdXBkYXRlLXNlcnZlci1pbmZvIFstLWZvcmNlXSIKK21zZ3N0ciAiZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyBbLS1mb3JjZV0iCisKKyM6IGJ1aWx0aW4vdXBkYXRlLXNlcnZlci1pbmZvLmM6MTQKK21zZ2lkICJ1cGRhdGUgdGhlIGluZm8gZmlsZXMgZnJvbSBzY3JhdGNoIgorbXNnc3RyICLku47lpLTlvIDlp4vmm7TmlrDmlofku7bkv6Hmga8iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LWNvbW1pdC5jOjE3Cittc2dpZCAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA8Y29tbWl0Pi4uLiIKK21zZ3N0ciAiZ2l0IHZlcmlmeS1jb21taXQgWy12IHwgLS12ZXJib3NlXSA85o+Q5LqkPi4uLiIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NzIKK21zZ2lkICJwcmludCBjb21taXQgY29udGVudHMiCittc2dzdHIgIuaJk+WNsOaPkOS6pOWGheWuuSIKKworIzogYnVpbHRpbi92ZXJpZnktY29tbWl0LmM6NzMgYnVpbHRpbi92ZXJpZnktdGFnLmM6ODQKK21zZ2lkICJwcmludCByYXcgZ3BnIHN0YXR1cyBvdXRwdXQiCittc2dzdHIgIuaJk+WNsOWOn+WniyBncGcg54q25oCB6L6T5Ye6IgorCisjOiBidWlsdGluL3ZlcmlmeS1wYWNrLmM6NTQKK21zZ2lkICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPHBhY2s+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXBhY2sgWy12IHwgLS12ZXJib3NlXSBbLXMgfCAtLXN0YXQtb25seV0gPOWMhT4uLi4iCisKKyM6IGJ1aWx0aW4vdmVyaWZ5LXBhY2suYzo2NAorbXNnaWQgInZlcmJvc2UiCittc2dzdHIgIuWGl+mVv+i+k+WHuiIKKworIzogYnVpbHRpbi92ZXJpZnktcGFjay5jOjY2Cittc2dpZCAic2hvdyBzdGF0aXN0aWNzIG9ubHkiCittc2dzdHIgIuWPquaYvuekuue7n+iuoSIKKworIzogYnVpbHRpbi92ZXJpZnktdGFnLmM6MTcKK21zZ2lkICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIDx0YWc+Li4uIgorbXNnc3RyICJnaXQgdmVyaWZ5LXRhZyBbLXYgfCAtLXZlcmJvc2VdIDzmoIfnrb4+Li4uIgorCisjOiBidWlsdGluL3ZlcmlmeS10YWcuYzo4MworbXNnaWQgInByaW50IHRhZyBjb250ZW50cyIKK21zZ3N0ciAi5omT5Y2w5qCH562+5YaF5a65IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTMKK21zZ2lkICJnaXQgd29ya3RyZWUgYWRkIFs8b3B0aW9ucz5dIDxwYXRoPiA8YnJhbmNoPiIKK21zZ3N0ciAiZ2l0IHdvcmt0cmVlIGFkZCBbPOmAiemhuT5dIDzot6/lvoQ+IDzliIbmlK8+IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MTQKK21zZ2lkICJnaXQgd29ya3RyZWUgcHJ1bmUgWzxvcHRpb25zPl0iCittc2dzdHIgImdpdCB3b3JrdHJlZSBwcnVuZSBbPOmAiemhuT5dIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBub3QgYSB2YWxpZCBkaXJlY3RvcnkiCittc2dzdHIgIuWIoOmZpOW3peS9nOWMui8lc++8muS4jeaYr+S4gOS4quacieaViOeahOebruW9lSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjQyCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QiCittc2dzdHIgIuWIoOmZpCB3b3JrdHJlZXMvJXPvvJpnaXRkaXIg5paH5Lu25LiN5a2Y5ZyoIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiB1bmFibGUgdG8gcmVhZCBnaXRkaXIgZmlsZSAoJXMpIgorbXNnc3RyICLliKDpmaQgd29ya3RyZWVzLyVz77ya5peg5rOV6K+75Y+WIGdpdGRpciDmlofku7YgKCVzKSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjU4CisjLCBjLWZvcm1hdAorbXNnaWQgIlJlbW92aW5nIHdvcmt0cmVlcy8lczogaW52YWxpZCBnaXRkaXIgZmlsZSIKK21zZ3N0ciAi5Yig6ZmkIHdvcmt0cmVlcy8lc++8muaXoOaViOeahCBnaXRkaXIg5paH5Lu2IgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVtb3Zpbmcgd29ya3RyZWVzLyVzOiBnaXRkaXIgZmlsZSBwb2ludHMgdG8gbm9uLWV4aXN0ZW50IGxvY2F0aW9uIgorbXNnc3RyICLliKDpmaQgd29ya3RyZWVzLyVz77yaZ2l0ZGlyIOaWh+S7tueahOaMh+WQkeS4jeWtmOWcqCIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjEwOQorIywgYy1mb3JtYXQKK21zZ2lkICJmYWlsZWQgdG8gcmVtb3ZlOiAlcyIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk77yaJXMiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoxOTgKKyMsIGMtZm9ybWF0Cittc2dpZCAiJyVzJyBhbHJlYWR5IGV4aXN0cyIKK21zZ3N0ciAiJyVzJyDlt7Lnu4/lrZjlnKgiCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGQgbm90IGNyZWF0ZSBkaXJlY3Rvcnkgb2YgJyVzJyIKK21zZ3N0ciAi5LiN6IO95Yib5bu655uu5b2VICclcyciCisKKyM6IGJ1aWx0aW4vd29ya3RyZWUuYzoyNjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiUHJlcGFyaW5nICVzIChpZGVudGlmaWVyICVzKSIKK21zZ3N0ciAi5YeG5aSHICVzIO+8iOagh+ivhuespiAlc++8iSIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMxNgorbXNnaWQgImNoZWNrb3V0IDxicmFuY2g+IGV2ZW4gaWYgYWxyZWFkeSBjaGVja2VkIG91dCBpbiBvdGhlciB3b3JrdHJlZSIKK21zZ3N0ciAi5qOA5Ye65YiG5pSvIDxicmFuY2g+IOWNs+S9v+W3sue7j+iiq+ajgOWHuuWIsOWFtuWug+W3peS9nOWMuiIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMxOAorbXNnaWQgImNyZWF0ZSBhIG5ldyBicmFuY2giCittc2dzdHIgIuWIm+W7uuS4gOS4quaWsOWIhuaUryIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyMAorbXNnaWQgImNyZWF0ZSBvciByZXNldCBhIGJyYW5jaCIKK21zZ3N0ciAi5Yib5bu65oiW6YeN572u5LiA5Liq5YiG5pSvIgorCisjOiBidWlsdGluL3dvcmt0cmVlLmM6MzIxCittc2dpZCAiZGV0YWNoIEhFQUQgYXQgbmFtZWQgY29tbWl0IgorbXNnc3RyICJIRUFEIOS7juaMh+WumueahOaPkOS6pOWIhuemuyIKKworIzogYnVpbHRpbi93b3JrdHJlZS5jOjMyOAorbXNnaWQgIi1iLCAtQiwgYW5kIC0tZGV0YWNoIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCittc2dzdHIgIi1i44CBLUIg5ZKMIC0tZGV0YWNoIOaYr+S6kuaWpeeahCIKKworIzogYnVpbHRpbi93cml0ZS10cmVlLmM6MTMKK21zZ2lkICJnaXQgd3JpdGUtdHJlZSBbLS1taXNzaW5nLW9rXSBbLS1wcmVmaXg9PHByZWZpeD4vXSIKK21zZ3N0ciAiZ2l0IHdyaXRlLXRyZWUgWy0tbWlzc2luZy1va10gWy0tcHJlZml4PTzliY3nvIA+L10iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI2Cittc2dpZCAiPHByZWZpeD4vIgorbXNnc3RyICI85YmN57yAPi8iCisKKyM6IGJ1aWx0aW4vd3JpdGUtdHJlZS5jOjI3Cittc2dpZCAid3JpdGUgdHJlZSBvYmplY3QgZm9yIGEgc3ViZGlyZWN0b3J5IDxwcmVmaXg+IgorbXNnc3RyICLlsIYgPOWJjee8gD4g5a2Q55uu5b2V5YaF5a655YaZ5Yiw5LiA5Liq5qCR5a+56LGhIgorCisjOiBidWlsdGluL3dyaXRlLXRyZWUuYzozMAorbXNnaWQgIm9ubHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmciCittc2dzdHIgIuWPquWvueiwg+ivleacieeUqCIKKworIzogY3JlZGVudGlhbC1jYWNoZS0tZGFlbW9uLmM6MjU1Cittc2dpZCAicHJpbnQgZGVidWdnaW5nIG1lc3NhZ2VzIHRvIHN0ZGVyciIKK21zZ3N0ciAi6LCD6K+V5L+h5oGv6L6T5Ye65Yiw5qCH5YeG6ZSZ6K+vIgorCisjOiBnaXQuYzoxNAorbXNnaWQgIiIKKyInZ2l0IGhlbHAgLWEnIGFuZCAnZ2l0IGhlbHAgLWcnIGxpc3QgYXZhaWxhYmxlIHN1YmNvbW1hbmRzIGFuZCBzb21lXG4iCisiY29uY2VwdCBndWlkZXMuIFNlZSAnZ2l0IGhlbHAgPGNvbW1hbmQ+JyBvciAnZ2l0IGhlbHAgPGNvbmNlcHQ+J1xuIgorInRvIHJlYWQgYWJvdXQgYSBzcGVjaWZpYyBzdWJjb21tYW5kIG9yIGNvbmNlcHQuIgorbXNnc3RyICIiCisi5ZG95LukICdnaXQgaGVscCAtYScg5ZKMICdnaXQgaGVscCAtZycg5pi+56S65Y+v55So55qE5a2Q5ZG95Luk5ZKM5LiA5Lqb5qaC5b+15biu5Yqp44CCXG4iCisi5p+l55yLICdnaXQgaGVscCA85ZG95LukPicg5oiWICdnaXQgaGVscCA85qaC5b+1Picg5Lul6I635Y+W57uZ5a6a5a2Q5ZG95Luk5oiW5qaC5b+155qEXG4iCisi5biu5Yqp44CCIgorCisjOiBjb21tb24tY21kcy5oOjkKK21zZ2lkICJzdGFydCBhIHdvcmtpbmcgYXJlYSAoc2VlIGFsc286IGdpdCBoZWxwIHR1dG9yaWFsKSIKK21zZ3N0ciAi5byA5aeL5LiA5Liq5bel5L2c5Yy677yI5Y+C6KeB77yaZ2l0IGhlbHAgdHV0b3JpYWzvvIkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTAKK21zZ2lkICJ3b3JrIG9uIHRoZSBjdXJyZW50IGNoYW5nZSAoc2VlIGFsc286IGdpdCBoZWxwIGV2ZXJ5ZGF5KSIKK21zZ3N0ciAi5Zyo5b2T5YmN5Y+Y5pu05LiK5bel5L2c77yI5Y+C6KeB77yaZ2l0IGhlbHAgZXZlcnlkYXnvvIkiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTEKK21zZ2lkICJleGFtaW5lIHRoZSBoaXN0b3J5IGFuZCBzdGF0ZSAoc2VlIGFsc286IGdpdCBoZWxwIHJldmlzaW9ucykiCittc2dzdHIgIuajgOafpeWOhuWPsuWSjOeKtuaAge+8iOWPguinge+8mmdpdCBoZWxwIHJldmlzaW9uc++8iSIKKworIzogY29tbW9uLWNtZHMuaDoxMgorbXNnaWQgImdyb3csIG1hcmsgYW5kIHR3ZWFrIHlvdXIgY29tbW9uIGhpc3RvcnkiCittc2dzdHIgIuaJqeWxleOAgeagh+iusOWSjOiwg+agoeaCqOeahOWOhuWPsuiusOW9lSIKKworIzogY29tbW9uLWNtZHMuaDoxMworbXNnaWQgImNvbGxhYm9yYXRlIChzZWUgYWxzbzogZ2l0IGhlbHAgd29ya2Zsb3dzKSIKK21zZ3N0ciAi5Y2P5ZCM77yI5Y+C6KeB77yaZ2l0IGhlbHAgd29ya2Zsb3dz77yJIgorCisjOiBjb21tb24tY21kcy5oOjE3Cittc2dpZCAiQWRkIGZpbGUgY29udGVudHMgdG8gdGhlIGluZGV4IgorbXNnc3RyICLmt7vliqDmlofku7blhoXlrrnoh7PntKLlvJUiCisKKyM6IGNvbW1vbi1jbWRzLmg6MTgKK21zZ2lkICJVc2UgYmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBjb21taXQgdGhhdCBpbnRyb2R1Y2VkIGEgYnVnIgorbXNnc3RyICLpgJrov4fkuozliIbmn6Xmib7lrprkvY3lvJXlhaUgYnVnIOeahOaPkOS6pCIKKworIzogY29tbW9uLWNtZHMuaDoxOQorbXNnaWQgIkxpc3QsIGNyZWF0ZSwgb3IgZGVsZXRlIGJyYW5jaGVzIgorbXNnc3RyICLliJflh7rjgIHliJvlu7rmiJbliKDpmaTliIbmlK8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MjAKK21zZ2lkICJTd2l0Y2ggYnJhbmNoZXMgb3IgcmVzdG9yZSB3b3JraW5nIHRyZWUgZmlsZXMiCittc2dzdHIgIuWIh+aNouWIhuaUr+aIluaBouWkjeW3peS9nOWMuuaWh+S7tiIKKworIzogY29tbW9uLWNtZHMuaDoyMQorbXNnaWQgIkNsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGRpcmVjdG9yeSIKK21zZ3N0ciAi5YWL6ZqG5LiA5Liq5LuT5bqT5Yiw5LiA5Liq5paw55uu5b2VIgorCisjOiBjb21tb24tY21kcy5oOjIyCittc2dpZCAiUmVjb3JkIGNoYW5nZXMgdG8gdGhlIHJlcG9zaXRvcnkiCittc2dzdHIgIuiusOW9leWPmOabtOWIsOS7k+W6kyIKKworIzogY29tbW9uLWNtZHMuaDoyMworbXNnaWQgIlNob3cgY2hhbmdlcyBiZXR3ZWVuIGNvbW1pdHMsIGNvbW1pdCBhbmQgd29ya2luZyB0cmVlLCBldGMiCittc2dzdHIgIuaYvuekuuaPkOS6pOS5i+mXtOOAgeaPkOS6pOWSjOW3peS9nOWMuuS5i+mXtOetieeahOW3ruW8giIKKworIzogY29tbW9uLWNtZHMuaDoyNAorbXNnaWQgIkRvd25sb2FkIG9iamVjdHMgYW5kIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkiCittc2dzdHIgIuS7juWPpuWkluS4gOS4quS7k+W6k+S4i+i9veWvueixoeWSjOW8leeUqCIKKworIzogY29tbW9uLWNtZHMuaDoyNQorbXNnaWQgIlByaW50IGxpbmVzIG1hdGNoaW5nIGEgcGF0dGVybiIKK21zZ3N0ciAi6L6T5Ye65ZKM5qih5byP5Yy56YWN55qE6KGMIgorCisjOiBjb21tb24tY21kcy5oOjI2Cittc2dpZCAiQ3JlYXRlIGFuIGVtcHR5IEdpdCByZXBvc2l0b3J5IG9yIHJlaW5pdGlhbGl6ZSBhbiBleGlzdGluZyBvbmUiCittc2dzdHIgIuWIm+W7uuS4gOS4quepuueahCBHaXQg5LuT5bqT5oiW6YeN5paw5Yid5aeL5YyW5LiA5Liq5bey5a2Y5Zyo55qE5LuT5bqTIgorCisjOiBjb21tb24tY21kcy5oOjI3Cittc2dpZCAiU2hvdyBjb21taXQgbG9ncyIKK21zZ3N0ciAi5pi+56S65o+Q5Lqk5pel5b+XIgorCisjOiBjb21tb24tY21kcy5oOjI4Cittc2dpZCAiSm9pbiB0d28gb3IgbW9yZSBkZXZlbG9wbWVudCBoaXN0b3JpZXMgdG9nZXRoZXIiCittc2dzdHIgIuWQiOW5tuS4pOS4quaIluabtOWkmuW8gOWPkeWOhuWPsiIKKworIzogY29tbW9uLWNtZHMuaDoyOQorbXNnaWQgIk1vdmUgb3IgcmVuYW1lIGEgZmlsZSwgYSBkaXJlY3RvcnksIG9yIGEgc3ltbGluayIKK21zZ3N0ciAi56e75Yqo5oiW6YeN5ZG95ZCN5LiA5Liq5paH5Lu244CB55uu5b2V5oiW56ym5Y+36ZO+5o6lIgorCisjOiBjb21tb24tY21kcy5oOjMwCittc2dpZCAiRmV0Y2ggZnJvbSBhbmQgaW50ZWdyYXRlIHdpdGggYW5vdGhlciByZXBvc2l0b3J5IG9yIGEgbG9jYWwgYnJhbmNoIgorbXNnc3RyICLojrflj5blubbmlbTlkIjlj6blpJbnmoTku5PlupPmiJbkuIDkuKrmnKzlnLDliIbmlK8iCisKKyM6IGNvbW1vbi1jbWRzLmg6MzEKK21zZ2lkICJVcGRhdGUgcmVtb3RlIHJlZnMgYWxvbmcgd2l0aCBhc3NvY2lhdGVkIG9iamVjdHMiCittc2dzdHIgIuabtOaWsOi/nOeoi+W8leeUqOWSjOebuOWFs+eahOWvueixoSIKKworIzogY29tbW9uLWNtZHMuaDozMgorbXNnaWQgIkZvcndhcmQtcG9ydCBsb2NhbCBjb21taXRzIHRvIHRoZSB1cGRhdGVkIHVwc3RyZWFtIGhlYWQiCittc2dzdHIgIuacrOWcsOaPkOS6pOi9rOenu+iHs+abtOaWsOWQjueahOS4iua4uOWIhuaUr+S4rSIKKworIzogY29tbW9uLWNtZHMuaDozMworbXNnaWQgIlJlc2V0IGN1cnJlbnQgSEVBRCB0byB0aGUgc3BlY2lmaWVkIHN0YXRlIgorbXNnc3RyICLph43nva7lvZPliY0gSEVBRCDliLDmjIflrprnirbmgIEiCisKKyM6IGNvbW1vbi1jbWRzLmg6MzQKK21zZ2lkICJSZW1vdmUgZmlsZXMgZnJvbSB0aGUgd29ya2luZyB0cmVlIGFuZCBmcm9tIHRoZSBpbmRleCIKK21zZ3N0ciAi5LuO5bel5L2c5Yy65ZKM57Si5byV5Lit5Yig6Zmk5paH5Lu2IgorCisjOiBjb21tb24tY21kcy5oOjM1Cittc2dpZCAiU2hvdyB2YXJpb3VzIHR5cGVzIG9mIG9iamVjdHMiCittc2dzdHIgIuaYvuekuuWQhOenjeexu+Wei+eahOWvueixoSIKKworIzogY29tbW9uLWNtZHMuaDozNgorbXNnaWQgIlNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMiCittc2dzdHIgIuaYvuekuuW3peS9nOWMuueKtuaAgSIKKworIzogY29tbW9uLWNtZHMuaDozNworbXNnaWQgIkNyZWF0ZSwgbGlzdCwgZGVsZXRlIG9yIHZlcmlmeSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHIgorbXNnc3RyICLliJvlu7rjgIHliJflh7rjgIHliKDpmaTmiJbmoKHpqozkuIDkuKogR1BHIOetvuWQjeeahOagh+etvuWvueixoSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjE0NQorbXNnaWQgImV4cGlyeS1kYXRlIgorbXNnc3RyICLliLDmnJ/ml7bpl7QiCisKKyM6IHBhcnNlLW9wdGlvbnMuaDoxNjAKK21zZ2lkICJuby1vcCAoYmFja3dhcmQgY29tcGF0aWJpbGl0eSkiCittc2dzdHIgIuepuuaTjeS9nO+8iOWQkeWQjuWFvOWuue+8iSIKKworIzogcGFyc2Utb3B0aW9ucy5oOjIzNgorbXNnaWQgImJlIG1vcmUgdmVyYm9zZSIKK21zZ3N0ciAi5pu05Yqg6K+m57uGIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjM4Cittc2dpZCAiYmUgbW9yZSBxdWlldCIKK21zZ3N0ciAi5pu05Yqg5a6J6Z2ZIgorCisjOiBwYXJzZS1vcHRpb25zLmg6MjQ0Cittc2dpZCAidXNlIDxuPiBkaWdpdHMgdG8gZGlzcGxheSBTSEEtMXMiCittc2dzdHIgIueUqCA8bj4g5L2N5pWw5a2X5pi+56S6IFNIQS0xIOWTiOW4jOWAvCIKKworIzogcmVyZXJlLmg6MjgKK21zZ2lkICJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiCittc2dzdHIgIuWmguaenOWPr+iDve+8jOmHjeeUqOWGsueqgeino+WGs+abtOaWsOe0ouW8lSIKKworIzogZ2l0LWJpc2VjdC5zaDo1MAorbXNnaWQgIllvdSBuZWVkIHRvIHN0YXJ0IGJ5IFwiZ2l0IGJpc2VjdCBzdGFydFwiIgorbXNnc3RyICLmgqjpnIDopoHmiafooYwgXCJnaXQgYmlzZWN0IHN0YXJ0XCIg5p2l5byA5aeLIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHlj6XlsL7nqbrmoLwKKyMuIFRSQU5TTEFUT1JTOiBNYWtlIHN1cmUgdG8gaW5jbHVkZSBbWV0gYW5kIFtuXSBpbiB5b3VyCisjLiB0cmFuc2xhdGlvbi4gVGhlIHByb2dyYW0gd2lsbCBvbmx5IGFjY2VwdCBFbmdsaXNoIGlucHV0CisjLiBhdCB0aGlzIHBvaW50LgorIzogZ2l0LWJpc2VjdC5zaDo1NgorbXNnaWQgIkRvIHlvdSB3YW50IG1lIHRvIGRvIGl0IGZvciB5b3UgW1kvbl0/ICIKK21zZ3N0ciAi5oKo5oOz6K6p5oiR5Li65oKo6L+Z5qC35YGa5LmIW1kvbl3vvJ8gIgorCisjOiBnaXQtYmlzZWN0LnNoOjk5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJGFyZyciCittc2dzdHIgIuacquiDveivhuWIq+eahOmAiemhue+8mickYXJnJyIKKworIzogZ2l0LWJpc2VjdC5zaDoxMDMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJnJyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB2YWxpZCByZXZpc2lvbiIKK21zZ3N0ciAiJyRhcmcnIOeci+i1t+adpeS4jeWDj+aYr+S4gOS4quacieaViOeahOeJiOacrCIKKworIzogZ2l0LWJpc2VjdC5zaDoxMzIKK21zZ2lkICJCYWQgSEVBRCAtIEkgbmVlZCBhIEhFQUQiCittc2dzdHIgIuWdj+eahCBIRUFEIC0g5oiR6ZyA6KaB5LiA5LiqIEhFQUQiCisKKyM6IGdpdC1iaXNlY3Quc2g6MTQ1CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiQ2hlY2tpbmcgb3V0ICckc3RhcnRfaGVhZCcgZmFpbGVkLiBUcnkgJ2dpdCBiaXNlY3QgcmVzZXQgPHZhbGlkLWJyYW5jaD4nLiIKK21zZ3N0ciAi5qOA5Ye6ICckc3RhcnRfaGVhZCcg5aSx6LSl44CC5bCd6K+VICdnaXQgYmlzZWN0IHJlc2V0IDzmnInmlYjliIbmlK8+J+OAgiIKKworIzogZ2l0LWJpc2VjdC5zaDoxNTUKK21zZ2lkICJ3b24ndCBiaXNlY3Qgb24gY2ctc2VlaydlZCB0cmVlIgorbXNnc3RyICLkuI3kvJrlnKjlgZrkuoYgY2ctc2VlayDnmoTmoJHkuIrlgZrkuozliIbmn6Xmib4iCisKKyM6IGdpdC1iaXNlY3Quc2g6MTU5Cittc2dpZCAiQmFkIEhFQUQgLSBzdHJhbmdlIHN5bWJvbGljIHJlZiIKK21zZ3N0ciAi5Z2P55qEIEhFQUQgLSDlpYfmgKrnmoTnrKblj7flvJXnlKgiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjExCisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgYmlzZWN0X3dyaXRlIGFyZ3VtZW50OiAkc3RhdGUiCittc2dzdHIgIuWdj+eahCBiaXNlY3Rfd3JpdGUg5Y+C5pWw77yaJHN0YXRlIgorCisjOiBnaXQtYmlzZWN0LnNoOjI0MAorIywgc2gtZm9ybWF0Cittc2dpZCAiQmFkIHJldiBpbnB1dDogJGFyZyIKK21zZ3N0ciAi6L6T5YWl5Z2P55qE54mI5pys77yaJGFyZyIKKworIzogZ2l0LWJpc2VjdC5zaDoyNTUKK21zZ2lkICJQbGVhc2UgY2FsbCAnYmlzZWN0X3N0YXRlJyB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIuivt+WcqOiwg+eUqCAnYmlzZWN0X3N0YXRlJyDml7bot5/oh7PlsJHkuIDkuKrlj4LmlbDjgIIiCisKKyM6IGdpdC1iaXNlY3Quc2g6MjY3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJCYWQgcmV2IGlucHV0OiAkcmV2IgorbXNnc3RyICLovpPlhaXlnY/nmoTniYjmnKzvvJokcmV2IgorCisjOiBnaXQtYmlzZWN0LnNoOjI3NgorIywgc2gtZm9ybWF0Cittc2dpZCAiJ2dpdCBiaXNlY3QgJFRFUk1fQkFEJyBjYW4gdGFrZSBvbmx5IG9uZSBhcmd1bWVudC4iCittc2dzdHIgIidnaXQgYmlzZWN0ICRURVJNX0JBRCcg5Y+q6IO95bim5LiA5Liq5Y+C5pWw44CCIgorCisjOiBnaXQtYmlzZWN0LnNoOjI5OQorIywgc2gtZm9ybWF0Cittc2dpZCAiV2FybmluZzogYmlzZWN0aW5nIG9ubHkgd2l0aCBhICRURVJNX0JBRCBjb21taXQuIgorbXNnc3RyICLorablkYrvvJrlnKjku4XmnInkuIDkuKrlnY/vvIgkVEVSTV9CQUTvvInmj5DkuqTkuIvov5vooYzkuozliIbmn6Xmib7jgIIiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWPpeWwvuepuuagvAorIy4gVFJBTlNMQVRPUlM6IE1ha2Ugc3VyZSB0byBpbmNsdWRlIFtZXSBhbmQgW25dIGluIHlvdXIKKyMuIHRyYW5zbGF0aW9uLiBUaGUgcHJvZ3JhbSB3aWxsIG9ubHkgYWNjZXB0IEVuZ2xpc2ggaW5wdXQKKyMuIGF0IHRoaXMgcG9pbnQuCisjOiBnaXQtYmlzZWN0LnNoOjMwNQorbXNnaWQgIkFyZSB5b3Ugc3VyZSBbWS9uXT8gIgorbXNnc3RyICLmgqjnoa7orqTkuYhbWS9uXe+8nyAiCisKKyM6IGdpdC1iaXNlY3Quc2g6MzE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiWW91IG5lZWQgdG8gZ2l2ZSBtZSBhdCBsZWFzdCBvbmUgJGJhZF9zeW4gYW5kIG9uZSAkZ29vZF9zeW4gcmV2aXNpb24uXG4iCisiKFlvdSBjYW4gdXNlIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIGFuZCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIgZm9yIHRoYXQuKSIKK21zZ3N0ciAiIgorIuaCqOmcgOimgee7meaIkeiHs+WwkeS4gOS4quWlveeJiOacrOWSjOS4gOS4quWdj+eJiOacrOOAglxuIgorIu+8iOS4uuatpOaCqOWPr+S7peeUqCBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiDlkowgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIOWRveS7pOOAgu+8iSIKKworIzogZ2l0LWJpc2VjdC5zaDozMjAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgbmVlZCB0byBzdGFydCBieSBcImdpdCBiaXNlY3Qgc3RhcnRcIi5cbiIKKyJZb3UgdGhlbiBuZWVkIHRvIGdpdmUgbWUgYXQgbGVhc3Qgb25lICRnb29kX3N5biBhbmQgb25lICRiYWRfc3luIHJldmlzaW9uLlxuIgorIihZb3UgY2FuIHVzZSBcImdpdCBiaXNlY3QgJGJhZF9zeW5cIiBhbmQgXCJnaXQgYmlzZWN0ICRnb29kX3N5blwiIGZvciB0aGF0LikiCittc2dzdHIgIiIKKyLmgqjpnIDopoHmiafooYwgXCJnaXQgYmlzZWN0IHN0YXJ0XCIg5p2l5byA5aeL44CCXG4iCisi54S25ZCO6ZyA6KaB5o+Q5L6b5oiR6Iez5bCR5LiA5Liq5aW954mI5pys5ZKM5LiA5Liq5Z2P54mI5pys44CCXG4iCisi77yI5Li65q2k5oKo5Y+v5Lul55SoIFwiZ2l0IGJpc2VjdCAkYmFkX3N5blwiIOWSjCBcImdpdCBiaXNlY3QgJGdvb2Rfc3luXCIg5ZG95Luk44CC77yJIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5MSBnaXQtYmlzZWN0LnNoOjUyMQorbXNnaWQgIldlIGFyZSBub3QgYmlzZWN0aW5nLiIKK21zZ3N0ciAi5oiR5Lus5rKh5pyJ5Zyo5LqM5YiG5p+l5om+44CCIgorCisjOiBnaXQtYmlzZWN0LnNoOjM5OAorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRpbnZhbGlkJyBpcyBub3QgYSB2YWxpZCBjb21taXQiCittc2dzdHIgIickaW52YWxpZCcg5LiN5piv5LiA5Liq5pyJ5pWI55qE5o+Q5LqkIgorCisjOiBnaXQtYmlzZWN0LnNoOjQwNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkNvdWxkIG5vdCBjaGVjayBvdXQgb3JpZ2luYWwgSEVBRCAnJGJyYW5jaCcuXG4iCisiVHJ5ICdnaXQgYmlzZWN0IHJlc2V0IDxjb21taXQ+Jy4iCittc2dzdHIgIiIKKyLkuI3og73mo4Dlh7rljp/lp4sgSEVBRCAnJGJyYW5jaCfjgIJcbiIKKyLlsJ3or5UgJ2dpdCBiaXNlY3QgcmVzZXQgPOaPkOS6pD4n44CCIgorCisjOiBnaXQtYmlzZWN0LnNoOjQzNQorbXNnaWQgIk5vIGxvZ2ZpbGUgZ2l2ZW4iCittc2dzdHIgIuacquaPkOS+m+aXpeW/l+aWh+S7tiIKKworIzogZ2l0LWJpc2VjdC5zaDo0MzYKKyMsIHNoLWZvcm1hdAorbXNnaWQgImNhbm5vdCByZWFkICRmaWxlIGZvciByZXBsYXlpbmciCittc2dzdHIgIuS4jeiDveivu+WPliAkZmlsZSDmnaXph43mlL4iCisKKyM6IGdpdC1iaXNlY3Quc2g6NDU1Cittc2dpZCAiPz8gd2hhdCBhcmUgeW91IHRhbGtpbmcgYWJvdXQ/IgorbXNnc3RyICI/PyDmgqjlnKjor7Tku4DkuYg/IgorCisjOiBnaXQtYmlzZWN0LnNoOjQ2NworIywgc2gtZm9ybWF0Cittc2dpZCAicnVubmluZyAkY29tbWFuZCIKK21zZ3N0ciAi6L+Q6KGMICRjb21tYW5kIgorCisjOiBnaXQtYmlzZWN0LnNoOjQ3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorImV4aXQgY29kZSAkcmVzIGZyb20gJyRjb21tYW5kJyBpcyA8IDAgb3IgPj0gMTI4IgorbXNnc3RyICIiCisi5LqM5YiG5p+l5om+6L+Q6KGM5aSx6LSl77yaXG4iCisi5ZG95LukICckY29tbWFuZCcg55qE6YCA5Ye656CBICRyZXMg5bCP5LqOIDAg5oiW5aSn5LqO562J5LqOIDEyOCIKKworIzogZ2l0LWJpc2VjdC5zaDo1MDAKK21zZ2lkICJiaXNlY3QgcnVuIGNhbm5vdCBjb250aW51ZSBhbnkgbW9yZSIKK21zZ3N0ciAi5LqM5YiG5p+l5om+5LiN6IO957un57ut6L+Q6KGMIgorCisjOiBnaXQtYmlzZWN0LnNoOjUwNgorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImJpc2VjdCBydW4gZmFpbGVkOlxuIgorIidiaXNlY3Rfc3RhdGUgJHN0YXRlJyBleGl0ZWQgd2l0aCBlcnJvciBjb2RlICRyZXMiCittc2dzdHIgIiIKKyLkuozliIbmn6Xmib7ov5DooYzlpLHotKXvvJpcbiIKKyInYmlzZWN0X3N0YXRlICRzdGF0ZScg6YCA5Ye656CB5Li6ICRyZXMiCisKKyM6IGdpdC1iaXNlY3Quc2g6NTEzCittc2dpZCAiYmlzZWN0IHJ1biBzdWNjZXNzIgorbXNnc3RyICLkuozliIbmn6Xmib7ov5DooYzmiJDlip8iCisKKyM6IGdpdC1iaXNlY3Quc2g6NTQ4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJJbnZhbGlkIGNvbW1hbmQ6IHlvdSdyZSBjdXJyZW50bHkgaW4gYSAkVEVSTV9CQUQvJFRFUk1fR09PRCBiaXNlY3QuIgorbXNnc3RyICLml6DmlYjnmoTlkb3ku6TvvJrmgqjlvZPliY3mraPlpITkuo7kuIDkuKogJFRFUk1fQkFELyRURVJNX0dPT0Qg5LqM5YiG5p+l5om+44CCIgorCisjOiBnaXQtcmViYXNlLnNoOjU3Cittc2dpZCAiIgorIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCJnaXQgcmViYXNlIC0tY29udGludWVcIi5cbiIKKyJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiBpbnN0ZWFkLlxuIgorIlRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHJlYmFzaW5nLCBydW4gXCJnaXQgcmViYXNlIC0tYWJvcnQiCisiXCIuIgorbXNnc3RyICIiCisi5b2T5oKo6Kej5Yaz5LqG5q2k6Zeu6aKY5ZCO77yM5omn6KGMIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCLjgIJcbiIKKyLlpoLmnpzmgqjmg7Pot7Pov4fmraTooaXkuIHvvIzliJnmiafooYwgXCJnaXQgcmViYXNlIC0tc2tpcFwi44CCXG4iCisi6KaB5oGi5aSN5Y6f5YiG5pSv5bm25YGc5q2i5Y+Y5Z+677yM5omn6KGMIFwiZ2l0IHJlYmFzZSAtLWFib3J0XCLjgIIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTY1Cittc2dpZCAiQXBwbGllZCBhdXRvc3Rhc2guIgorbXNnc3RyICLmiJDlip/lupTnlKggYXV0b3N0YXNo44CCIgorCisjOiBnaXQtcmViYXNlLnNoOjE2OAorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHN0b3JlICRzdGFzaF9zaGExIgorbXNnc3RyICLml6Dms5Xkv53lrZggJHN0YXNoX3NoYTEiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MTY5Cittc2dpZCAiIgorIkFwcGx5aW5nIGF1dG9zdGFzaCByZXN1bHRlZCBpbiBjb25mbGljdHMuXG4iCisiWW91ciBjaGFuZ2VzIGFyZSBzYWZlIGluIHRoZSBzdGFzaC5cbiIKKyJZb3UgY2FuIHJ1biBcImdpdCBzdGFzaCBwb3BcIiBvciBcImdpdCBzdGFzaCBkcm9wXCIgYXQgYW55IHRpbWUuXG4iCittc2dzdHIgIiIKKyLlupTnlKggYXV0b3N0YXNoIOWvvOiHtOWGsueqgeOAglxuIgorIuaCqOeahOS/ruaUueWuieWFqOWcsOS/neWtmOWcqCBzdGFzaCDkuK3jgIJcbiIKKyLmgqjlj6/ku6XlnKjku7vkvZXml7blgJnov5DooYwgXCJnaXQgc3Rhc2ggcG9wXCIg5oiWIFwiZ2l0IHN0YXNoIGRyb3BcIuOAglxuIgorCisjOiBnaXQtcmViYXNlLnNoOjIwOAorbXNnaWQgIlRoZSBwcmUtcmViYXNlIGhvb2sgcmVmdXNlZCB0byByZWJhc2UuIgorbXNnc3RyICLpkqnlrZAgcHJlLXJlYmFzZSDmi5Lnu53lj5jln7rmk43kvZzjgIIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6MjEzCittc2dpZCAiSXQgbG9va3MgbGlrZSBnaXQtYW0gaXMgaW4gcHJvZ3Jlc3MuIENhbm5vdCByZWJhc2UuIgorbXNnc3RyICLkvLzkuY7mraPlpITkuo7lnKggZ2l0LWFtIOeahOaJp+ihjOi/h+eoi+S4reOAguaXoOazleWPmOWfuuOAgiIKKworIzogZ2l0LXJlYmFzZS5zaDozNTEKK21zZ2lkICJUaGUgLS1leGVjIG9wdGlvbiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24iCittc2dzdHIgIumAiemhuSAtLWV4ZWMg5b+F6aG75ZKM6YCJ6aG5IC0taW50ZXJhY3RpdmUg5ZCM5pe25L2/55SoIgorCisjOiBnaXQtcmViYXNlLnNoOjM1NgorbXNnaWQgIk5vIHJlYmFzZSBpbiBwcm9ncmVzcz8iCittc2dzdHIgIuayoeacieato+WcqOi/m+ihjOeahOWPmOWfuu+8nyIKKworIzogZ2l0LXJlYmFzZS5zaDozNjcKK21zZ2lkICJUaGUgLS1lZGl0LXRvZG8gYWN0aW9uIGNhbiBvbmx5IGJlIHVzZWQgZHVyaW5nIGludGVyYWN0aXZlIHJlYmFzZS4iCittc2dzdHIgIuWKqOS9nCAtLWVkaXQtdG9kbyDlj6rog73nlKjlnKjkuqTkupLlvI/lj5jln7rov4fnqIvkuK3jgIIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6Mzc0Cittc2dpZCAiQ2Fubm90IHJlYWQgSEVBRCIKK21zZ3N0ciAi5LiN6IO96K+75Y+WIEhFQUQiCisKKyM6IGdpdC1yZWJhc2Uuc2g6Mzc3Cittc2dpZCAiIgorIllvdSBtdXN0IGVkaXQgYWxsIG1lcmdlIGNvbmZsaWN0cyBhbmQgdGhlblxuIgorIm1hcmsgdGhlbSBhcyByZXNvbHZlZCB1c2luZyBnaXQgYWRkIgorbXNnc3RyICIiCisi5oKo5b+F6aG757yW6L6R5omA5pyJ55qE5ZCI5bm25Yay56qB77yM54S25ZCO6YCa6L+HIGdpdCBhZGRcbiIKKyLlkb3ku6TlsIblroPku6zmoIforrDkuLrlt7Lop6PlhrMiCisKKyM6IGdpdC1yZWJhc2Uuc2g6Mzk1CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgbW92ZSBiYWNrIHRvICRoZWFkX25hbWUiCittc2dzdHIgIuaXoOazleenu+WbniAkaGVhZF9uYW1lIgorCisjOiBnaXQtcmViYXNlLnNoOjQxNAorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhICRzdGF0ZV9kaXJfYmFzZSBkaXJlY3RvcnksIGFuZFxuIgorIkkgd29uZGVyIGlmIHlvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbm90aGVyIHJlYmFzZS4gIElmIHRoYXQgaXMgdGhlXG4iCisiY2FzZSwgcGxlYXNlIHRyeVxuIgorIlx0JGNtZF9saXZlX3JlYmFzZVxuIgorIklmIHRoYXQgaXMgbm90IHRoZSBjYXNlLCBwbGVhc2VcbiIKKyJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisiYW5kIHJ1biBtZSBhZ2Fpbi4gIEkgYW0gc3RvcHBpbmcgaW4gY2FzZSB5b3Ugc3RpbGwgaGF2ZSBzb21ldGhpbmdcbiIKKyJ2YWx1YWJsZSB0aGVyZS4iCittc2dzdHIgIiIKKyLlpb3lg4/lt7LmnIkgJHN0YXRlX2Rpcl9iYXNlIOebruW9le+8jOaIkeaAgOeWkeaCqOato+WkhOS6juWPpuWkluS4gOS4quWPmOWfuuaTjeS9nFxuIgorIui/h+eoi+S4reOAgiDlpoLmnpzmmK/ov5nmoLfvvIzor7fmiafooYxcbiIKKyJcdCRjbWRfbGl2ZV9yZWJhc2VcbiIKKyLlpoLmnpzkuI3mmK/ov5nmoLfvvIzor7fmiafooYxcbiIKKyJcdCRjbWRfY2xlYXJfc3RhbGVfcmViYXNlXG4iCisi54S25ZCO5YaN6YeN5paw5omn6KGM5Y+Y5Z+65pON5L2c44CCIOS4uumBv+WFjeS4ouWksemHjeimgeaVsOaNru+8jOaIkeW3sue7j+WBnOatouW9k+WJjeaTjeS9nOOAgiIKKworIzogZ2l0LXJlYmFzZS5zaDo0NjUKKyMsIHNoLWZvcm1hdAorbXNnaWQgImludmFsaWQgdXBzdHJlYW0gJHVwc3RyZWFtX25hbWUiCittc2dzdHIgIuaXoOaViOeahOS4iua4uCAkdXBzdHJlYW1fbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo0ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiRvbnRvX25hbWU6IHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1lcmdlIGJhc2VzIgorbXNnc3RyICIkb250b19uYW1lOiDmnInkuIDkuKrku6XkuIrnmoTlkIjlubbln7rlh4YiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NDkyIGdpdC1yZWJhc2Uuc2g6NDk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICIkb250b19uYW1lOiB0aGVyZSBpcyBubyBtZXJnZSBiYXNlIgorbXNnc3RyICIkb250b19uYW1lOiDmsqHmnInlkIjlubbln7rlh4YiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTAxCisjLCBzaC1mb3JtYXQKK21zZ2lkICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdDogJG9udG9fbmFtZSIKK21zZ3N0ciAi5rKh5pyJ5oyH5ZCR5LiA5Liq5pyJ5pWI55qE5o+Q5Lqk77yaJG9udG9fbmFtZSIKKworIzogZ2l0LXJlYmFzZS5zaDo1MjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgImZhdGFsOiBubyBzdWNoIGJyYW5jaDogJGJyYW5jaF9uYW1lIgorbXNnc3RyICLkuKXph43plJnor6/vvJrml6DmraTliIbmlK/vvJokYnJhbmNoX25hbWUiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTU3Cittc2dpZCAiQ2Fubm90IGF1dG9zdGFzaCIKK21zZ3N0ciAi5peg5rOVIGF1dG9zdGFzaCIKKworIzogZ2l0LXJlYmFzZS5zaDo1NjIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNyZWF0ZWQgYXV0b3N0YXNoOiAkc3Rhc2hfYWJicmV2IgorbXNnc3RyICLliJvlu7rkuoYgYXV0b3N0YXNoOiAkc3Rhc2hfYWJicmV2IgorCisjOiBnaXQtcmViYXNlLnNoOjU2NgorbXNnaWQgIlBsZWFzZSBjb21taXQgb3Igc3Rhc2ggdGhlbS4iCittc2dzdHIgIuivt+aPkOS6pOaIluS4uuWug+S7rOS/neWtmOi/m+W6puOAgiIKKworIzogZ2l0LXJlYmFzZS5zaDo1ODYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkN1cnJlbnQgYnJhbmNoICRicmFuY2hfbmFtZSBpcyB1cCB0byBkYXRlLiIKK21zZ3N0ciAi5b2T5YmN5YiG5pSvICRicmFuY2hfbmFtZSDmmK/mnIDmlrDnmoTjgIIiCisKKyM6IGdpdC1yZWJhc2Uuc2g6NTkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJDdXJyZW50IGJyYW5jaCAkYnJhbmNoX25hbWUgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZC4iCittc2dzdHIgIuW9k+WJjeWIhuaUryAkYnJhbmNoX25hbWUg5piv5pyA5paw55qE77yM5by65Yi25Y+Y5Z+644CCIgorCisjOiBnaXQtcmViYXNlLnNoOjYwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2hhbmdlcyBmcm9tICRtYiB0byAkb250bzoiCittc2dzdHIgIuWPmOabtOS7jiAkbWIg5YiwICRvbnRv77yaIgorCisjOiBnaXQtcmViYXNlLnNoOjYxMAorbXNnaWQgIkZpcnN0LCByZXdpbmRpbmcgaGVhZCB0byByZXBsYXkgeW91ciB3b3JrIG9uIHRvcCBvZiBpdC4uLiIKK21zZ3N0ciAi6aaW5YWI77yM5Zue6YCA5YiG5pSv5Lul5L6/5Zyo5LiK6Z2i6YeN5pS+5oKo55qE5bel5L2cLi4uIgorCisjOiBnaXQtcmViYXNlLnNoOjYyMAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFzdC1mb3J3YXJkZWQgJGJyYW5jaF9uYW1lIHRvICRvbnRvX25hbWUuIgorbXNnc3RyICLlv6vov5sgJGJyYW5jaF9uYW1lIOiHsyAkb250b19uYW1l44CCIgorCisjOiBnaXQtc3Rhc2guc2g6NTEKK21zZ2lkICJnaXQgc3Rhc2ggY2xlYXIgd2l0aCBwYXJhbWV0ZXJzIGlzIHVuaW1wbGVtZW50ZWQiCittc2dzdHIgImdpdCBzdGFzaCBjbGVhciDkuI3mlK/mjIHlj4LmlbAiCisKKyM6IGdpdC1zdGFzaC5zaDo3NAorbXNnaWQgIllvdSBkbyBub3QgaGF2ZSB0aGUgaW5pdGlhbCBjb21taXQgeWV0IgorbXNnc3RyICLmgqjlsJrmnKrlu7rnq4vliJ3lp4vmj5DkuqQiCisKKyM6IGdpdC1zdGFzaC5zaDo4OQorbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IGluZGV4IHN0YXRlIgorbXNnc3RyICLml6Dms5Xkv53lrZjlvZPliY3ntKLlvJXnirbmgIEiCisKKyM6IGdpdC1zdGFzaC5zaDoxMjQgZ2l0LXN0YXNoLnNoOjEzNworbXNnaWQgIkNhbm5vdCBzYXZlIHRoZSBjdXJyZW50IHdvcmt0cmVlIHN0YXRlIgorbXNnc3RyICLml6Dms5Xkv53lrZjlvZPliY3lt6XkvZzljLrnirbmgIEiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDEKK21zZ2lkICJObyBjaGFuZ2VzIHNlbGVjdGVkIgorbXNnc3RyICLmsqHmnInpgInmi6nlj5jmm7QiCisKKyM6IGdpdC1zdGFzaC5zaDoxNDQKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHRlbXBvcmFyeSBpbmRleCAoY2FuJ3QgaGFwcGVuKSIKK21zZ3N0ciAi5peg5rOV5Yig6Zmk5Li05pe257Si5byV77yI5LiN5bqU5Y+R55Sf77yJIgorCisjOiBnaXQtc3Rhc2guc2g6MTU3Cittc2dpZCAiQ2Fubm90IHJlY29yZCB3b3JraW5nIHRyZWUgc3RhdGUiCittc2dzdHIgIuS4jeiDveiusOW9leW3peS9nOWMuueKtuaAgSIKKworIzogZ2l0LXN0YXNoLnNoOjE4OQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHVwZGF0ZSAkcmVmX3N0YXNoIHdpdGggJHdfY29tbWl0IgorbXNnc3RyICLml6Dms5XnlKggJHdfY29tbWl0IOabtOaWsCAkcmVmX3N0YXNoIgorCisjLiBUUkFOU0xBVE9SUzogJG9wdGlvbiBpcyBhbiBpbnZhbGlkIG9wdGlvbiwgbGlrZQorIy4gYC0tYmxhaC1ibGFoJy4gVGhlIDcgc3BhY2VzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisjLiBzZWNvbmQgbGluZSBjb3JyZXNwb25kIHRvICJlcnJvcjogIi4gU28geW91IHNob3VsZCBsaW5lCisjLiB1cCB0aGUgc2Vjb25kIGxpbmUgd2l0aCBob3dldmVyIG1hbnkgY2hhcmFjdGVycyB0aGUKKyMuIHRyYW5zbGF0aW9uIG9mICJlcnJvcjogIiB0YWtlcyBpbiB5b3VyIGxhbmd1YWdlLiBFLmcuIGluCisjLiBFbmdsaXNoIHRoaXMgaXM6CisjLgorIy4gJCBnaXQgc3Rhc2ggc2F2ZSAtLWJsYWgtYmxhaCAyPiYxIHwgaGVhZCAtbiAyCisjLiBlcnJvcjogdW5rbm93biBvcHRpb24gZm9yICdzdGFzaCBzYXZlJzogLS1ibGFoLWJsYWgKKyMuIFRvIHByb3ZpZGUgYSBtZXNzYWdlLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJy0tYmxhaC1ibGFoJworIzogZ2l0LXN0YXNoLnNoOjIzOQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorImVycm9yOiB1bmtub3duIG9wdGlvbiBmb3IgJ3N0YXNoIHNhdmUnOiAkb3B0aW9uXG4iCisiICAgICAgIFRvIHByb3ZpZGUgYSBtZXNzYWdlLCB1c2UgZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorbXNnc3RyICIiCisi6ZSZ6K+v77yaJ3N0YXNoIHNhdmUnIOeahOacquefpemAiemhue+8miRvcHRpb25cbiIKKyIgICAgICDopoHmj5DkvpvkuIDkuKrmj4/ov7Dkv6Hmga/vvIzkvb/nlKggZ2l0IHN0YXNoIHNhdmUgLS0gJyRvcHRpb24nIgorCisjOiBnaXQtc3Rhc2guc2g6MjYwCittc2dpZCAiTm8gbG9jYWwgY2hhbmdlcyB0byBzYXZlIgorbXNnc3RyICLmsqHmnInopoHkv53lrZjnmoTmnKzlnLDkv67mlLkiCisKKyM6IGdpdC1zdGFzaC5zaDoyNjQKK21zZ2lkICJDYW5ub3QgaW5pdGlhbGl6ZSBzdGFzaCIKK21zZ3N0ciAi5peg5rOV5Yid5aeL5YyWIHN0YXNoIgorCisjOiBnaXQtc3Rhc2guc2g6MjY4Cittc2dpZCAiQ2Fubm90IHNhdmUgdGhlIGN1cnJlbnQgc3RhdHVzIgorbXNnc3RyICLml6Dms5Xkv53lrZjlvZPliY3nirbmgIEiCisKKyM6IGdpdC1zdGFzaC5zaDoyODYKK21zZ2lkICJDYW5ub3QgcmVtb3ZlIHdvcmt0cmVlIGNoYW5nZXMiCittc2dzdHIgIuaXoOazleWIoOmZpOW3peS9nOWMuuWPmOabtCIKKworIzogZ2l0LXN0YXNoLnNoOjM4NworIywgc2gtZm9ybWF0Cittc2dpZCAidW5rbm93biBvcHRpb246ICRvcHQiCittc2dzdHIgIuacquefpemAiemhuTogJG9wdCIKKworIzogZ2l0LXN0YXNoLnNoOjM5NworbXNnaWQgIk5vIHN0YXNoIGZvdW5kLiIKK21zZ3N0ciAi5pyq5Y+R546wIHN0YXNo44CCIgorCisjOiBnaXQtc3Rhc2guc2g6NDA0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJUb28gbWFueSByZXZpc2lvbnMgc3BlY2lmaWVkOiAkUkVWIgorbXNnc3RyICLmjIflrprkuoblpKrlpJrnmoTniYjmnKzvvJokUkVWIgorCisjOiBnaXQtc3Rhc2guc2g6NDEwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIkcmVmZXJlbmNlIGlzIG5vdCBhIHZhbGlkIHJlZmVyZW5jZSIKK21zZ3N0ciAiJHJlZmVyZW5jZSDkuI3mmK/kuIDkuKrmnInmlYjnmoTlvJXnlKgiCisKKyM6IGdpdC1zdGFzaC5zaDo0MzgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickYXJncycgaXMgbm90IGEgc3Rhc2gtbGlrZSBjb21taXQiCittc2dzdHIgIickYXJncycg5LiN5pivIHN0YXNoIOagt+aPkOS6pCIKKworIzogZ2l0LXN0YXNoLnNoOjQ0OQorIywgc2gtZm9ybWF0Cittc2dpZCAiJyRhcmdzJyBpcyBub3QgYSBzdGFzaCByZWZlcmVuY2UiCittc2dzdHIgIickYXJncycg5LiN5piv5LiA5LiqIHN0YXNoIOW8leeUqCIKKworIzogZ2l0LXN0YXNoLnNoOjQ1NworbXNnaWQgInVuYWJsZSB0byByZWZyZXNoIGluZGV4IgorbXNnc3RyICLml6Dms5XliLfmlrDntKLlvJUiCisKKyM6IGdpdC1zdGFzaC5zaDo0NjEKK21zZ2lkICJDYW5ub3QgYXBwbHkgYSBzdGFzaCBpbiB0aGUgbWlkZGxlIG9mIGEgbWVyZ2UiCittc2dzdHIgIuaXoOazleWcqOWQiOW5tui/h+eoi+S4reaBouWkjei/m+W6piIKKworIzogZ2l0LXN0YXNoLnNoOjQ2OQorbXNnaWQgIkNvbmZsaWN0cyBpbiBpbmRleC4gVHJ5IHdpdGhvdXQgLS1pbmRleC4iCittc2dzdHIgIue0ouW8leS4reacieWGsueqgeOAguWwneivleS4jeS9v+eUqCAtLWluZGV444CCIgorCisjOiBnaXQtc3Rhc2guc2g6NDcxCittc2dpZCAiQ291bGQgbm90IHNhdmUgaW5kZXggdHJlZSIKK21zZ3N0ciAi5LiN6IO95L+d5a2Y57Si5byV5qCRIgorCisjOiBnaXQtc3Rhc2guc2g6NTA1Cittc2dpZCAiQ2Fubm90IHVuc3RhZ2UgbW9kaWZpZWQgZmlsZXMiCittc2dzdHIgIuaXoOazleWwhuS/ruaUueeahOaWh+S7tuWPlua2iOaaguWtmCIKKworIzogZ2l0LXN0YXNoLnNoOjUyMAorbXNnaWQgIkluZGV4IHdhcyBub3QgdW5zdGFzaGVkLiIKK21zZ3N0ciAi57Si5byV55qE6L+b5bqm5rKh5pyJ6KKr5oGi5aSN44CCIgorCisjOiBnaXQtc3Rhc2guc2g6NTQzCisjLCBzaC1mb3JtYXQKK21zZ2lkICJEcm9wcGVkICR7UkVWfSAoJHMpIgorbXNnc3RyICLkuKLlvIPkuoYgJHtSRVZ9ICgkcykiCisKKyM6IGdpdC1zdGFzaC5zaDo1NDQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiR7UkVWfTogQ291bGQgbm90IGRyb3Agc3Rhc2ggZW50cnkiCittc2dzdHIgIiR7UkVWfe+8muS4jeiDveS4ouW8g+i/m+W6puadoeebriIKKworIzogZ2l0LXN0YXNoLnNoOjU1MgorbXNnaWQgIk5vIGJyYW5jaCBuYW1lIHNwZWNpZmllZCIKK21zZ3N0ciAi5pyq5oyH5a6a5YiG5pSv5ZCNIgorCisjOiBnaXQtc3Rhc2guc2g6NjI0Cittc2dpZCAiKFRvIHJlc3RvcmUgdGhlbSB0eXBlIFwiZ2l0IHN0YXNoIGFwcGx5XCIpIgorbXNnc3RyICLvvIjkuLrmgaLlpI3mlbDmja7ovpPlhaUgXCJnaXQgc3Rhc2ggYXBwbHlcIu+8iSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiY2Fubm90IHN0cmlwIG9uZSBjb21wb25lbnQgb2ZmIHVybCAnJHJlbW90ZXVybCciCittc2dzdHIgIuaXoOazleS7jiB1cmwgJyRyZW1vdGV1cmwnIOWJpeemu+S4gOS4que7hOS7tiIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyMzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIk5vIHN1Ym1vZHVsZSBtYXBwaW5nIGZvdW5kIGluIC5naXRtb2R1bGVzIGZvciBwYXRoICckc21fcGF0aCciCittc2dzdHIgIuacquWcqCAuZ2l0bW9kdWxlcyDkuK3lj5HnjrDot6/lvoQgJyRzbV9wYXRoJyDnmoTlrZDmqKHnu4TmmKDlsIQiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Mjg3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJDbG9uZSBvZiAnJHVybCcgaW50byBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIGZhaWxlZCIKK21zZ3N0ciAi5peg5rOV5YWL6ZqGICckdXJsJyDliLDlrZDmqKHnu4Tot6/lvoQgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoyOTYKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkdpdGRpciAnJGEnIGlzIHBhcnQgb2YgdGhlIHN1Ym1vZHVsZSBwYXRoICckYicgb3IgdmljZSB2ZXJzYSIKK21zZ3N0ciAiR2l0ZGlyICckYScg5Zyo5a2Q5qih57uE6Lev5b6EICckYicg5LmL5LiL5oiW55u45Y+NIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQwNgorbXNnaWQgIlJlbGF0aXZlIHBhdGggY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSB0b3BsZXZlbCBvZiB0aGUgd29ya2luZyB0cmVlIgorbXNnc3RyICLlj6rog73lnKjlt6XkvZzljLrnmoTpobbnuqfnm67lvZXkuK3kvb/nlKjnm7jlr7not6/lvoQiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDE2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJyZXBvIFVSTDogJyRyZXBvJyBtdXN0IGJlIGFic29sdXRlIG9yIGJlZ2luIHdpdGggLi98Li4vIgorbXNnc3RyICLku5PlupMgVVJM77yaJyRyZXBvJyDlv4XpobvmmK/nu53lr7not6/lvoTmiJbku6UgLi98Li4vIOi1t+WniyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MzMKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4IgorbXNnc3RyICInJHNtX3BhdGgnIOW3sue7j+WtmOWcqOS6jue0ouW8leS4rSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0MzcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOlxuIgorIiRzbV9wYXRoXG4iCisiVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuIgorbXNnc3RyICIiCisi5Lul5LiL6Lev5b6E6KKr5oKo55qE5LiA5LiqIC5naXRpZ25vcmUg5paH5Lu25omA5b+955Wl77yaXG4iCisiJHNtX3BhdGhcbiIKKyLlpoLmnpzmgqjnoa7lrp7mg7Pmt7vliqDlroPvvIzkvb/nlKggLWYg5Y+C5pWw44CCIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ1NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQWRkaW5nIGV4aXN0aW5nIHJlcG8gYXQgJyRzbV9wYXRoJyB0byB0aGUgaW5kZXgiCittc2dzdHIgIua3u+WKoOS9jeS6jiAnJHNtX3BhdGgnIOeahOeOsOWtmOS7k+W6k+WIsOe0ouW8lSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NTcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIickc21fcGF0aCcgYWxyZWFkeSBleGlzdHMgYW5kIGlzIG5vdCBhIHZhbGlkIGdpdCByZXBvIgorbXNnc3RyICInJHNtX3BhdGgnIOW3suWtmOWcqOS4lOS4jeaYr+S4gOS4quacieaViOeahCBnaXQg5LuT5bqTIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2NQorIywgc2gtZm9ybWF0Cittc2dpZCAiQSBnaXQgZGlyZWN0b3J5IGZvciAnJHNtX25hbWUnIGlzIGZvdW5kIGxvY2FsbHkgd2l0aCByZW1vdGUocyk6IgorbXNnc3RyICLmnKzlnLDlj5HnjrAgJyRzbV9uYW1lJyDnmoTkuIDkuKogZ2l0IOebruW9le+8jOS4juWFtuWvueW6lOeahOi/nOeoi+S7k+W6k++8miIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0NjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJJZiB5b3Ugd2FudCB0byByZXVzZSB0aGlzIGxvY2FsIGdpdCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjbG9uaW5nIGFnYWluIGZyb20iCittc2dzdHIgIuWmguaenOaCqOaDs+mHjeeUqOatpOacrOWcsCBnaXQg55uu5b2V6ICM5LiN5piv6YeN5paw5YWL6ZqG6IeqIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ2OQorIywgc2gtZm9ybWF0Cittc2dpZCAiIgorInVzZSB0aGUgJy0tZm9yY2UnIG9wdGlvbi4gSWYgdGhlIGxvY2FsIGdpdCBkaXJlY3RvcnkgaXMgbm90IHRoZSBjb3JyZWN0IHJlcG8iCittc2dzdHIgIuS9v+eUqCAnLS1mb3JjZScg5Y+C5pWw44CC5aaC5p6c5pys5ZywIGdpdCDnm67lvZXkuI3mmK/mraPnoa7nmoTku5PlupMiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDcwCisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisib3IgeW91IGFyZSB1bnN1cmUgd2hhdCB0aGlzIG1lYW5zIGNob29zZSBhbm90aGVyIG5hbWUgd2l0aCB0aGUgJy0tbmFtZScgIgorIm9wdGlvbi4iCittc2dzdHIgIuaIluiAheaCqOS4jeehruWumuWFtuS4reWQq+S5ieS9v+eUqCAnLS1uYW1lJyDlj4LmlbDpgInmi6nlj6blpJbkuIDkuKrlkI3np7DjgIIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NDcyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJSZWFjdGl2YXRpbmcgbG9jYWwgZ2l0IGRpcmVjdG9yeSBmb3Igc3VibW9kdWxlICckc21fbmFtZScuIgorbXNnc3RyICLmv4DmtLvmnKzlnLAgZ2l0IOebruW9leWIsOWtkOaooee7hCAnJHNtX25hbWUn44CCIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ4NAorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGNoZWNrb3V0IHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLkuI3og73mo4Dlh7rlrZDmqKHnu4QgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo0ODkKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byBhZGQgc3VibW9kdWxlICckc21fcGF0aCciCittc2dzdHIgIuaXoOazlea3u+WKoOWtkOaooee7hCAnJHNtX3BhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjQ5OAorIywgc2gtZm9ybWF0Cittc2dpZCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1Ym1vZHVsZSAnJHNtX3BhdGgnIgorbXNnc3RyICLml6Dms5Xms6jlhozlrZDmqKHnu4QgJyRzbV9wYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkVudGVyaW5nICckcHJlZml4JGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5q2j5Zyo6L+b5YWlICckcHJlZml4JGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo1NjIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN0b3BwaW5nIGF0ICckcHJlZml4JGRpc3BsYXlwYXRoJzsgc2NyaXB0IHJldHVybmVkIG5vbi16ZXJvIHN0YXR1cy4iCittc2dzdHIgIuWBnOatouS6jiAnJHByZWZpeCRkaXNwbGF5cGF0aCfvvIzohJrmnKzov5Tlm57pnZ7pm7blgLzjgIIiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjA4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJObyB1cmwgZm91bmQgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIGluIC5naXRtb2R1bGVzIgorbXNnc3RyICLlnKggLmdpdG1vZHVsZXMg5Lit5pyq5om+5Yiw5a2Q5qih57uE6Lev5b6EICckZGlzcGxheXBhdGgnIOeahCB1cmwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjE3CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJsIGZvciBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5peg5rOV5Li65a2Q5qih57uE6Lev5b6EICckZGlzcGxheXBhdGgnIOazqOWGjCB1cmwiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjE5CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgcmVnaXN0ZXJlZCBmb3IgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5a2Q5qih57uEICckbmFtZScgKCR1cmwpIOacquWvuei3r+W+hCAnJGRpc3BsYXlwYXRoJyDms6jlhowiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NjM2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVnaXN0ZXIgdXBkYXRlIG1vZGUgZm9yIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLml6Dms5XkuLrlrZDmqKHnu4Tot6/lvoQgJyRkaXNwbGF5cGF0aCcg5rOo5YaM5pu05paw5qih5byPIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjY3NAorIywgc2gtZm9ybWF0Cittc2dpZCAiVXNlICcuJyBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gZGVpbml0aWFsaXplIGFsbCBzdWJtb2R1bGVzIgorbXNnc3RyICLkvb/nlKggJy4nIOWmguaenOaCqOecn+eahOaDs+imgeWvueaJgOacieWtkOaooee7hOWPlua2iOWIneWni+WMliIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTEKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSB3b3JrIHRyZWUgJyRkaXNwbGF5cGF0aCcgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeSIKK21zZ3N0ciAi5a2Q5qih57uE5bel5L2c5Yy6ICckZGlzcGxheXBhdGgnIOWMheWQq+S4gOS4qiAuZ2l0IOebruW9lSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo2OTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyIodXNlICdybSAtcmYnIGlmIHlvdSByZWFsbHkgd2FudCB0byByZW1vdmUgaXQgaW5jbHVkaW5nIGFsbCBvZiBpdHMgaGlzdG9yeSkiCittc2dzdHIgIu+8iOS9v+eUqCAncm0gLXJmJyDlkb3ku6TlpoLmnpzmgqjnnJ/nmoTmg7PliKDpmaTlroPlj4rlhbblhajpg6jljoblj7LvvIkiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6Njk4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIiCisiU3VibW9kdWxlIHdvcmsgdHJlZSAnJGRpc3BsYXlwYXRoJyBjb250YWlucyBsb2NhbCBtb2RpZmljYXRpb25zOyB1c2UgJy1mJyB0byAiCisiZGlzY2FyZCB0aGVtIgorbXNnc3RyICLlrZDmqKHnu4Tlt6XkvZzljLogJyRkaXNwbGF5cGF0aCcg5YyF5ZCr5pys5Zyw5L+u5pS577yb5L2/55SoICctZicg5Lii5byD5a6D5LusIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ2xlYXJlZCBkaXJlY3RvcnkgJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIuW3sua4hemZpOebruW9lSAnJGRpc3BsYXlwYXRoJyIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo3MDIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZW1vdmUgc3VibW9kdWxlIHdvcmsgdHJlZSAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5peg5rOV56e76Zmk5a2Q5qih57uE5bel5L2c5Yy6ICckZGlzcGxheXBhdGgnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjcwNQorIywgc2gtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGNyZWF0ZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5ICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLkuI3og73liJvlu7rnqbrnmoTlrZDmqKHnu4Tnm67lvZUgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6NzE0CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgJyRuYW1lJyAoJHVybCkgdW5yZWdpc3RlcmVkIGZvciBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLlrZDmqKHnu4QgJyRuYW1lJyAoJHVybCkg5pyq5a+56Lev5b6EICckZGlzcGxheXBhdGgnIOazqOWGjCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4MzAKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiIKKyJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyBub3QgaW5pdGlhbGl6ZWRcbiIKKyJNYXliZSB5b3Ugd2FudCB0byB1c2UgJ3VwZGF0ZSAtLWluaXQnPyIKK21zZ3N0ciAiIgorIuWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJyDmsqHmnInliJ3lp4vljJZcbiIKKyLkuZ/orrjmgqjmg7PnlKggJ3VwZGF0ZSAtLWluaXQn77yfIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg0MworIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIGZpbmQgY3VycmVudCByZXZpc2lvbiBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5peg5rOV5Zyo5a2Q5qih57uE6Lev5b6EICckZGlzcGxheXBhdGgnIOS4reaJvuWIsOW9k+WJjeeJiOacrCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo4NTIKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlVuYWJsZSB0byBmZXRjaCBpbiBzdWJtb2R1bGUgcGF0aCAnJHNtX3BhdGgnIgorbXNnc3RyICLml6Dms5XlnKjlrZDmqKHnu4Tot6/lvoQgJyRzbV9wYXRoJyDkuK3ojrflj5YiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODc2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gZmV0Y2ggaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIuaXoOazleWcqOWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJyDkuK3ojrflj5YiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODkwCisjLCBzaC1mb3JtYXQKK21zZ2lkICJVbmFibGUgdG8gY2hlY2tvdXQgJyRzaGExJyBpbiBzdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5peg5rOV5Zyo5a2Q5qih57uE6Lev5b6EICckZGlzcGxheXBhdGgnIOS4reajgOWHuiAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5MQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCc6IGNoZWNrZWQgb3V0ICckc2hhMSciCittc2dzdHIgIuWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJ++8muajgOWHuiAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjg5NQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIHJlYmFzZSAnJHNoYTEnIGluIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLml6Dms5XlnKjlrZDmqKHnu4Tot6/lvoQgJyRkaXNwbGF5cGF0aCcg5Lit5Y+Y5Z+6ICckc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6ODk2CisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogcmViYXNlZCBpbnRvICckc2hhMSciCittc2dzdHIgIuWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJ++8muWPmOWfuuiHsyAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwMQorIywgc2gtZm9ybWF0Cittc2dpZCAiVW5hYmxlIHRvIG1lcmdlICckc2hhMScgaW4gc3VibW9kdWxlIHBhdGggJyRkaXNwbGF5cGF0aCciCittc2dzdHIgIuaXoOazleWQiOW5tiAnJHNoYTEnIOWIsOWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJyDkuK0iCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTAyCisjLCBzaC1mb3JtYXQKK21zZ2lkICJTdWJtb2R1bGUgcGF0aCAnJGRpc3BsYXlwYXRoJzogbWVyZ2VkIGluICckc2hhMSciCittc2dzdHIgIuWtkOaooee7hOi3r+W+hCAnJGRpc3BsYXlwYXRoJ++8muW3suWQiOW5tuWFpSAnJHNoYTEnIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjkwNworIywgc2gtZm9ybWF0Cittc2dpZCAiIgorIkV4ZWN1dGlvbiBvZiAnJGNvbW1hbmQgJHNoYTEnIGZhaWxlZCBpbiBzdWJtb2R1bGUgcGF0aCAnJHByZWZpeCRzbV9wYXRoJyIKK21zZ3N0ciAi5Zyo5a2Q5qih57uE6Lev5b6EICckcHJlZml4JHNtX3BhdGgnIOS4reaJp+ihjCAnJGNvbW1hbmQgJHNoYTEnIOWksei0pSIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDo5MDgKKyMsIHNoLWZvcm1hdAorbXNnaWQgIlN1Ym1vZHVsZSBwYXRoICckcHJlZml4JHNtX3BhdGgnOiAnJGNvbW1hbmQgJHNoYTEnIgorbXNnc3RyICLlrZDmqKHnu4Tot6/lvoQgJyRwcmVmaXgkc21fcGF0aCc6ICckY29tbWFuZCAkc2hhMSciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6OTM4CisjLCBzaC1mb3JtYXQKK21zZ2lkICJGYWlsZWQgdG8gcmVjdXJzZSBpbnRvIHN1Ym1vZHVsZSBwYXRoICckZGlzcGxheXBhdGgnIgorbXNnc3RyICLml6Dms5XpgJLlvZLov5vlrZDmqKHnu4Tot6/lvoQgJyRkaXNwbGF5cGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA0NgorbXNnaWQgIlRoZSAtLWNhY2hlZCBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgLS1maWxlcyBvcHRpb24iCittc2dzdHIgIumAiemhuSAtLWNhY2hlZCDkuI3og73lkozpgInpobkgLS1maWxlcyDlkIzml7bkvb/nlKgiCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTA5OAorIywgc2gtZm9ybWF0Cittc2dpZCAidW5leHBlY3RlZCBtb2RlICRtb2RfZHN0IgorbXNnc3RyICLmhI/lpJbnmoTmqKHlvI8gJG1vZF9kc3QiCisKKyMgIOivkeiAhe+8muazqOaEj+S/neaMgeWJjeWvvOepuuagvAorIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTE4CisjLCBzaC1mb3JtYXQKK21zZ2lkICIgIFdhcm46ICRkaXNwbGF5X25hbWUgZG9lc24ndCBjb250YWluIGNvbW1pdCAkc2hhMV9zcmMiCittc2dzdHIgIiAg6K2m5ZGK77yaJGRpc3BsYXlfbmFtZSDmnKrljIXlkKvmj5DkuqQgJHNoYTFfc3JjIgorCisjICDor5HogIXvvJrms6jmhI/kv53mjIHliY3lr7znqbrmoLwKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTEyMQorIywgc2gtZm9ybWF0Cittc2dpZCAiICBXYXJuOiAkZGlzcGxheV9uYW1lIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJHNoYTFfZHN0IgorbXNnc3RyICIgIOitpuWRiu+8miRkaXNwbGF5X25hbWUg5pyq5YyF5ZCr5o+Q5LqkICRzaGExX2RzdCIKKworIyAg6K+R6ICF77ya5rOo5oSP5L+d5oyB5YmN5a+856m65qC8CisjOiBnaXQtc3VibW9kdWxlLnNoOjExMjQKKyMsIHNoLWZvcm1hdAorbXNnaWQgIiAgV2FybjogJGRpc3BsYXlfbmFtZSBkb2Vzbid0IGNvbnRhaW4gY29tbWl0cyAkc2hhMV9zcmMgYW5kICRzaGExX2RzdCIKK21zZ3N0ciAiICDorablkYrvvJokZGlzcGxheV9uYW1lIOacquWMheWQq+aPkOS6pCAkc2hhMV9zcmMg5ZKMICRzaGExX2RzdCIKKworIzogZ2l0LXN1Ym1vZHVsZS5zaDoxMTQ5Cittc2dpZCAiYmxvYiIKK21zZ3N0ciAi5pWw5o2u5a+56LGhIgorCisjOiBnaXQtc3VibW9kdWxlLnNoOjEyNjcKKyMsIHNoLWZvcm1hdAorbXNnaWQgIkZhaWxlZCB0byByZWN1cnNlIGludG8gc3VibW9kdWxlIHBhdGggJyRzbV9wYXRoJyIKK21zZ3N0ciAi5peg5rOV6YCS5b2S6L+b5a2Q5qih57uE6Lev5b6EICckc21fcGF0aCciCisKKyM6IGdpdC1zdWJtb2R1bGUuc2g6MTMzMQorIywgc2gtZm9ybWF0Cittc2dpZCAiU3luY2hyb25pemluZyBzdWJtb2R1bGUgdXJsIGZvciAnJGRpc3BsYXlwYXRoJyIKK21zZ3N0ciAi5Li6ICckZGlzcGxheXBhdGgnIOWQjOatpeWtkOaooee7hCB1cmwiCisKKyN+IG1zZ2lkICJmYWxzZXx0cnVlfHByZXNlcnZlIgorI34gbXNnc3RyICJmYWxzZXx0cnVlfHByZXNlcnZlIgorCisjfiBtc2dpZCAiQlVHOiByZW9wZW4gYSBsb2NrZmlsZSB0aGF0IGlzIHN0aWxsIG9wZW4iCisjfiBtc2dzdHIgIkJVRzog6YeN5paw5omT5byA5LiA5Liq5LuN5omT5byA552A55qE6ZSB5paH5Lu2IgorCisjfiBtc2dpZCAiQlVHOiByZW9wZW4gYSBsb2NrZmlsZSB0aGF0IGhhcyBiZWVuIGNvbW1pdHRlZCIKKyN+IG1zZ3N0ciAiQlVHOiDph43mlrDmiZPlvIDkuIDkuKrlt7Lmj5DkuqTnmoTplIHmlofku7YiCisKKyN+IG1zZ2lkICJvcHRpb24gJXMgZG9lcyBub3QgYWNjZXB0IG5lZ2F0aXZlIGZvcm0iCisjfiBtc2dzdHIgIumAiemhuSAlcyDkuI3mjqXlj5flkKblrprmoLzlvI8iCisKKyN+IG1zZ2lkICJ1bmFibGUgdG8gcGFyc2UgdmFsdWUgJyVzJyBmb3Igb3B0aW9uICVzIgorI34gbXNnc3RyICLkuI3og73op6PmnpDpgInpobkgJTEkcyDnmoTlgLwgJyUyJHMnIgorCisjfiBtc2dpZCAidW5hYmxlIHRvIHJlc29sdmUgSEVBRCIKKyN+IG1zZ3N0ciAi5LiN6IO96Kej5p6QIEhFQUQiCisKKyN+IG1zZ2lkICItYiBhbmQgLUIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKKyN+IG1zZ3N0ciAiLWIg5ZKMIC1CIOS6kuaWpSIKKworI34gbXNnaWQgIllvdSBuZWVkIHRvIHNldCB5b3VyIGNvbW1pdHRlciBpbmZvIGZpcnN0IgorI34gbXNnc3RyICLmgqjpnIDopoHlhYjorr7nva7kvaDnmoTmj5DkuqTogIXkv6Hmga8iCisKKyN+IG1zZ2lkICIiCisjfiAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIiRjbWRsaW5lIC0tY29udGludWVcIi5cbiIKKyN+ICJJZiB5b3UgcHJlZmVyIHRvIHNraXAgdGhpcyBwYXRjaCwgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIgaW5zdGVhZC5cbiIKKyN+ICJUbyByZXN0b3JlIHRoZSBvcmlnaW5hbCBicmFuY2ggYW5kIHN0b3AgcGF0Y2hpbmcsIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnQiCisjfiAiXCIuIgorI34gbXNnc3RyICIiCisjfiAi5b2T5oKo6Kej5Yaz5LqG5q2k6Zeu6aKY5ZCO77yM5omn6KGMIFwiJGNtZGxpbmUgLS1jb250aW51ZVwi44CCXG4iCisjfiAi5aaC5p6c5oKo5oOz6Lez6L+H5q2k6KGl5LiB77yM5YiZ5omn6KGMIFwiJGNtZGxpbmUgLS1za2lwXCLjgIJcbiIKKyN+ICLopoHmgaLlpI3ljp/liIbmlK/lubblgZzmraLmiZPooaXkuIHvvIzmiafooYwgXCIkY21kbGluZSAtLWFib3J0XCLjgIIiCisKKyN+IG1zZ2lkICJQYXRjaCBmb3JtYXQgJHBhdGNoX2Zvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiIKKyN+IG1zZ3N0ciAi5LiN5pSv5oyBICRwYXRjaF9mb3JtYXQg6KGl5LiB5qC85byP44CCIgorCisjfiBtc2dpZCAiUGxlYXNlIG1ha2UgdXAgeW91ciBtaW5kLiAtLXNraXAgb3IgLS1hYm9ydD8iCisjfiBtc2dzdHIgIuivt+S4i+WGs+W/g+OAgi0tc2tpcCDmiJbmmK8gLS1hYm9ydCDvvJ8iCisKKyN+IG1zZ2lkICIiCisjfiAiUGF0Y2ggaXMgZW1wdHkuICBXYXMgaXQgc3BsaXQgd3Jvbmc/XG4iCisjfiAiSWYgeW91IHdvdWxkIHByZWZlciB0byBza2lwIHRoaXMgcGF0Y2gsIGluc3RlYWQgcnVuIFwiJGNtZGxpbmUgLS1za2lwXCIuXG4iCisjfiAiVG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoIGFuZCBzdG9wIHBhdGNoaW5nIHJ1biBcIiRjbWRsaW5lIC0tYWJvcnRcIi4iCisjfiBtc2dzdHIgIiIKKyN+ICLooaXkuIHkuLrnqbrjgILmmK/kuI3mmK/liIfliIbplJnor6/vvJ9cbiIKKyN+ICLlpoLmnpzmgqjmg7PopoHot7Pov4fov5nkuKrooaXkuIHvvIzmiafooYwgXCIkY21kbGluZSAtLXNraXBcIuOAglxuIgorI34gIuimgeaBouWkjeWOn+WIhuaUr+W5tuWBnOatouaJk+ihpeS4ge+8jOaJp+ihjCBcIiRjbWRsaW5lIC0tYWJvcnRcIuOAgiIKKworI34gbXNnaWQgIlBhdGNoIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBlLW1haWwgYWRkcmVzcy4iCisjfiBtc2dzdHIgIuihpeS4geS4reayoeacieS4gOS4quacieaViOeahOmCruS7tuWcsOWdgOOAgiIKKworI34gbXNnaWQgIkFwcGx5aW5nOiAkRklSU1RMSU5FIgorI34gbXNnc3RyICLmraPlupTnlKjvvJokRklSU1RMSU5FIgorCisjfiBtc2dpZCAiUGF0Y2ggZmFpbGVkIGF0ICRtc2dudW0gJEZJUlNUTElORSIKKyN+IG1zZ3N0ciAi6KGl5LiB5aSx6LSl5LqOICRtc2dudW0gJEZJUlNUTElORSIKKworI34gbXNnaWQgIiIKKyN+ICJQdWxsIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHlvdSBoYXZlIHVubWVyZ2VkIGZpbGVzLlxuIgorI34gIlBsZWFzZSwgZml4IHRoZW0gdXAgaW4gdGhlIHdvcmsgdHJlZSwgYW5kIHRoZW4gdXNlICdnaXQgYWRkL3JtIDxmaWxlPidcbiIKKyN+ICJhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24gYW5kIG1ha2UgYSBjb21taXQuIgorI34gbXNnc3RyICIiCisjfiAiUHVsbCDkuI3lj6/nlKjvvIzlm6DkuLrmgqjlsJrmnInmnKrlkIjlubbnmoTmlofku7bjgILor7flhYjlnKjlt6XkvZzljLrmlLnmraPmlofku7bvvIxcbiIKKyN+ICLnhLblkI7phYzmg4Xkvb/nlKggJ2dpdCBhZGQvcm0gPOaWh+S7tj4nIOagh+iusOino+WGs+aWueahiO+8jOWGjeWBmuaPkOS6pOOAgiIKKworI34gbXNnaWQgIlB1bGwgaXMgbm90IHBvc3NpYmxlIGJlY2F1c2UgeW91IGhhdmUgdW5tZXJnZWQgZmlsZXMuIgorI34gbXNnc3RyICJQdWxsIOS4jeWPr+eUqO+8jOWboOS4uuaCqOWwmuacieacquWQiOW5tueahOaWh+S7tuOAgiIKZGlmZiAtLWdpdCBhL3BwYy9zaGExLmMgYi9wcGMvc2hhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNmExOTIKLS0tIC9kZXYvbnVsbAorKysgYi9wcGMvc2hhMS5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBTSEEtMSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+CisgKgorICogVGhpcyB2ZXJzaW9uIGFzc3VtZXMgd2UgYXJlIHJ1bm5pbmcgb24gYSBiaWctZW5kaWFuIG1hY2hpbmUuCisgKiBJdCBjYWxscyBhbiBleHRlcm5hbCBzaGExX2NvcmUoKSB0byBwcm9jZXNzIGJsb2NrcyBvZiA2NCBieXRlcy4KKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAic2hhMS5oIgorCitleHRlcm4gdm9pZCBwcGNfc2hhMV9jb3JlKHVpbnQzMl90ICpoYXNoLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwLAorCQkJICB1bnNpZ25lZCBpbnQgbmJsb2Nrcyk7CisKK2ludCBwcGNfU0hBMV9Jbml0KHBwY19TSEFfQ1RYICpjKQoreworCWMtPmhhc2hbMF0gPSAweDY3NDUyMzAxOworCWMtPmhhc2hbMV0gPSAweEVGQ0RBQjg5OworCWMtPmhhc2hbMl0gPSAweDk4QkFEQ0ZFOworCWMtPmhhc2hbM10gPSAweDEwMzI1NDc2OworCWMtPmhhc2hbNF0gPSAweEMzRDJFMUYwOworCWMtPmxlbiA9IDA7CisJYy0+Y250ID0gMDsKKwlyZXR1cm4gMDsKK30KKworaW50IHBwY19TSEExX1VwZGF0ZShwcGNfU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIG4pCit7CisJdW5zaWduZWQgbG9uZyBuYjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gcHRyOworCisJYy0+bGVuICs9ICh1aW50NjRfdCkgbiA8PCAzOworCXdoaWxlIChuICE9IDApIHsKKwkJaWYgKGMtPmNudCB8fCBuIDwgNjQpIHsKKwkJCW5iID0gNjQgLSBjLT5jbnQ7CisJCQlpZiAobmIgPiBuKQorCQkJCW5iID0gbjsKKwkJCW1lbWNweSgmYy0+YnVmLmJbYy0+Y250XSwgcCwgbmIpOworCQkJaWYgKChjLT5jbnQgKz0gbmIpID09IDY0KSB7CisJCQkJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBjLT5idWYuYiwgMSk7CisJCQkJYy0+Y250ID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW5iID0gbiA+PiA2OworCQkJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBwLCBuYik7CisJCQluYiA8PD0gNjsKKwkJfQorCQluIC09IG5iOworCQlwICs9IG5iOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHBwY19TSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmhhc2gsIHBwY19TSEFfQ1RYICpjKQoreworCXVuc2lnbmVkIGludCBjbnQgPSBjLT5jbnQ7CisKKwljLT5idWYuYltjbnQrK10gPSAweDgwOworCWlmIChjbnQgPiA1NikgeworCQlpZiAoY250IDwgNjQpCisJCQltZW1zZXQoJmMtPmJ1Zi5iW2NudF0sIDAsIDY0IC0gY250KTsKKwkJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBjLT5idWYuYiwgMSk7CisJCWNudCA9IDA7CisJfQorCWlmIChjbnQgPCA1NikKKwkJbWVtc2V0KCZjLT5idWYuYltjbnRdLCAwLCA1NiAtIGNudCk7CisJYy0+YnVmLmxbN10gPSBjLT5sZW47CisJcHBjX3NoYTFfY29yZShjLT5oYXNoLCBjLT5idWYuYiwgMSk7CisJbWVtY3B5KGhhc2gsIGMtPmhhc2gsIDIwKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3BwYy9zaGExLmggYi9wcGMvc2hhMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDVmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9wcGMvc2hhMS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBTSEEtMSBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+CisgKi8KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVpbnQzMl90IGhhc2hbNV07CisJdWludDMyX3QgY250OworCXVpbnQ2NF90IGxlbjsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGNoYXIgYls2NF07CisJCXVpbnQ2NF90IGxbOF07CisJfSBidWY7Cit9IHBwY19TSEFfQ1RYOworCitpbnQgcHBjX1NIQTFfSW5pdChwcGNfU0hBX0NUWCAqYyk7CitpbnQgcHBjX1NIQTFfVXBkYXRlKHBwY19TSEFfQ1RYICpjLCBjb25zdCB2b2lkICpwLCB1bnNpZ25lZCBsb25nIG4pOworaW50IHBwY19TSEExX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKmhhc2gsIHBwY19TSEFfQ1RYICpjKTsKKworI2RlZmluZSBnaXRfU0hBX0NUWAlwcGNfU0hBX0NUWAorI2RlZmluZSBnaXRfU0hBMV9Jbml0CXBwY19TSEExX0luaXQKKyNkZWZpbmUgZ2l0X1NIQTFfVXBkYXRlCXBwY19TSEExX1VwZGF0ZQorI2RlZmluZSBnaXRfU0hBMV9GaW5hbAlwcGNfU0hBMV9GaW5hbApkaWZmIC0tZ2l0IGEvcHBjL3NoYTFwcGMuUyBiL3BwYy9zaGExcHBjLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcxMWVlZgotLS0gL2Rldi9udWxsCisrKyBiL3BwYy9zaGExcHBjLlMKQEAgLTAsMCArMSwyMjQgQEAKKy8qCisgKiBTSEEtMSBpbXBsZW1lbnRhdGlvbiBmb3IgUG93ZXJQQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BzYW1iYS5vcmc+CisgKi8KKworLyoKKyAqIFBvd2VyUEMgY2FsbGluZyBjb252ZW50aW9uOgorICogJXIwIC0gdm9sYXRpbGUgdGVtcAorICogJXIxIC0gc3RhY2sgcG9pbnRlci4KKyAqICVyMiAtIHJlc2VydmVkCisgKiAlcjMtJXIxMiAtIEluY29taW5nIGFyZ3VtZW50cyAmIHJldHVybiB2YWx1ZXM7IHZvbGF0aWxlLgorICogJXIxMy0lcjMxIC0gQ2FsbGVlLXNhdmUgcmVnaXN0ZXJzCisgKiAlbHIgLSBSZXR1cm4gYWRkcmVzcywgdm9sYXRpbGUKKyAqICVjdHIgLSB2b2xhdGlsZQorICoKKyAqIFJlZ2lzdGVyIHVzYWdlIGluIHRoaXMgcm91dGluZToKKyAqICVyMCAtIHRlbXAKKyAqICVyMyAtIGFyZ3VtZW50IChwb2ludGVyIHRvIDUgd29yZHMgb2YgU0hBIHN0YXRlKQorICogJXI0IC0gYXJndW1lbnQgKHBvaW50ZXIgdG8gZGF0YSB0byBoYXNoKQorICogJXI1IC0gQ29uc3RhbnQgSyBpbiBTSEEgcm91bmQgKGluaXRpYWxseSBudW1iZXIgb2YgYmxvY2tzIHRvIGhhc2gpCisgKiAlcjYtJXIxMCAtIFdvcmtpbmcgY29waWVzIG9mIFNIQSB2YXJpYWJsZXMgQS4uRSAoYWN0dWFsbHkgRS4uQSBvcmRlcikKKyAqICVyMTEtJXIyNiAtIERhdGEgYmVpbmcgaGFzaGVkIFdbXS4KKyAqICVyMjctJXIzMSAtIFByZXZpb3VzIGNvcGllcyBvZiBBLi5FLCBmb3IgZmluYWwgYWRkIGJhY2suCisgKiAlY3RyIC0gbG9vcCBjb3VudAorICovCisKKworLyoKKyAqIFdlIHJvbGwgdGhlIHJlZ2lzdGVycyBmb3IgQSwgQiwgQywgRCwgRSBhcm91bmQgb24gZWFjaAorICogaXRlcmF0aW9uOyBFIG9uIGl0ZXJhdGlvbiB0IGlzIEQgb24gaXRlcmF0aW9uIHQrMSwgYW5kIHNvIG9uLgorICogV2UgdXNlIHJlZ2lzdGVycyA2IC0gMTAgZm9yIHRoaXMuICAoUmVnaXN0ZXJzIDI3IC0gMzEgaG9sZAorICogdGhlIHByZXZpb3VzIHZhbHVlcy4pCisgKi8KKyNkZWZpbmUgUkEodCkJKCgodCkrNCklNSs2KQorI2RlZmluZSBSQih0KQkoKCh0KSszKSU1KzYpCisjZGVmaW5lIFJDKHQpCSgoKHQpKzIpJTUrNikKKyNkZWZpbmUgUkQodCkJKCgodCkrMSklNSs2KQorI2RlZmluZSBSRSh0KQkoKCh0KSswKSU1KzYpCisKKy8qIFdlIHVzZSByZWdpc3RlcnMgMTEgLSAyNiBmb3IgdGhlIFcgdmFsdWVzICovCisjZGVmaW5lIFcodCkJKCh0KSUxNisxMSkKKworLyogUmVnaXN0ZXIgNSBpcyB1c2VkIGZvciB0aGUgY29uc3RhbnQgayAqLworCisvKgorICogVGhlIGJhc2ljIFNIQS0xIHJvdW5kIGZ1bmN0aW9uIGlzOgorICogRSArPSBST1RMKEEsNSkgKyBGKEIsQyxEKSArIFdbaV0gKyBLOyAgQiA9IFJPVEwoQiwzMCkKKyAqIFRoZW4gdGhlIHZhcmlhYmxlcyBhcmUgcmVuYW1lZDogKEEsQixDLEQsRSkgPSAoRSxBLEIsQyxEKS4KKyAqCisgKiBFdmVyeSAyMCByb3VuZHMsIHRoZSBmdW5jdGlvbiBGKCkgYW5kIHRoZSBjb25zdGFudCBLIGNoYW5nZXM6CisgKiAtIDIwIHJvdW5kcyBvZiBmMChiLGMsZCkgPSAiYml0IHdpc2UgYiA/IGMgOiBkIiA9ICAoXmIgJiBkKSArIChiICYgYykKKyAqIC0gMjAgcm91bmRzIG9mIGYxKGIsYyxkKSA9IGJeY15kID0gKGJeZCleYworICogLSAyMCByb3VuZHMgb2YgZjIoYixjLGQpID0gbWFqb3JpdHkoYixjLGQpID0gKGImZCkgKyAoKGJeZCkmYykKKyAqIC0gMjAgbW9yZSByb3VuZHMgb2YgZjEoYixjLGQpCisgKgorICogVGhlc2UgYXJlIGFsbCBzY2hlZHVsZWQgZm9yIG5lYXItb3B0aW1hbCBwZXJmb3JtYW5jZSBvbiBhIEc0LgorICogVGhlIEc0IGlzIGEgMy1pc3N1ZSBvdXQtb2Ytb3JkZXIgbWFjaGluZSB3aXRoIDMgQUxVcywgYnV0IGl0IGNhbiBvbmx5CisgKiAqY29uc2lkZXIqIHN0YXJ0aW5nIHRoZSBvbGRlc3QgMyBpbnN0cnVjdGlvbnMgcGVyIGN5Y2xlLiAgU28gdG8gZ2V0CisgKiBtYXhpbXVtIHBlcmZvcm1hbmNlIG91dCBvZiBpdCwgeW91IGhhdmUgdG8gdHJlYXQgaXQgYXMgYW4gaW4tb3JkZXIKKyAqIG1hY2hpbmUuICBXaGljaCBtZWFucyBpbnRlcmxlYXZpbmcgdGhlIGNvbXB1dGF0aW9uIHJvdW5kIHQgd2l0aCB0aGUKKyAqIGNvbXB1dGF0aW9uIG9mIFdbdCs0XS4KKyAqCisgKiBUaGUgZmlyc3QgMTYgcm91bmRzIHVzZSBXIHZhbHVlcyBsb2FkZWQgZGlyZWN0bHkgZnJvbSBtZW1vcnksIHdoaWxlIHRoZQorICogcmVtYWluaW5nIDY0IHVzZSB2YWx1ZXMgY29tcHV0ZWQgZnJvbSB0aG9zZSBmaXJzdCAxNi4gIFdlIHByZWxvYWQKKyAqIDQgdmFsdWVzIGJlZm9yZSBzdGFydGluZywgc28gdGhlcmUgYXJlIHRocmVlIGtpbmRzIG9mIHJvdW5kczoKKyAqIC0gVGhlIGZpcnN0IDEyIChhbGwgZjApIGFsc28gbG9hZCB0aGUgVyB2YWx1ZXMgZnJvbSBtZW1vcnkuCisgKiAtIFRoZSBuZXh0IDY0IGNvbXB1dGUgVyhpKzQpIGluIHBhcmFsbGVsLiA4KmYwLCAyMCpmMSwgMjAqZjIsIDE2KmYxLgorICogLSBUaGUgbGFzdCA0IChhbGwgZjEpIGRvIG5vdCBkbyBhbnl0aGluZyB3aXRoIFcuCisgKgorICogVGhlcmVmb3JlLCB3ZSBoYXZlIDYgZGlmZmVyZW50IHJvdW5kIGZ1bmN0aW9uczoKKyAqIFNURVBEMF9MT0FEKHQscykgLSBQZXJmb3JtIHJvdW5kIHQgYW5kIGxvYWQgVyhzKS4gIHMgPCAxNgorICogU1RFUEQwX1VQREFURSh0LHMpIC0gUGVyZm9ybSByb3VuZCB0IGFuZCBjb21wdXRlIFcocykuICBzID49IDE2LgorICogU1RFUEQxX1VQREFURSh0LHMpCisgKiBTVEVQRDJfVVBEQVRFKHQscykKKyAqIFNURVBEMSh0KSAtIFBlcmZvcm0gcm91bmQgdCB3aXRoIG5vIGxvYWQgb3IgdXBkYXRlLgorICoKKyAqIFRoZSBHNSBpcyBtb3JlIGZ1bGx5IG91dC1vZi1vcmRlciwgYW5kIGNhbiBmaW5kIHRoZSBwYXJhbGxlbGlzbQorICogYnkgaXRzZWxmLiAgVGhlIGJpZyBsaW1pdCBpcyB0aGF0IGl0IGhhcyBhIDItY3ljbGUgQUxVIGxhdGVuY3ksIHNvCisgKiBldmVuIHRob3VnaCBpdCdzIDItd2F5LCB0aGUgY29kZSBoYXMgdG8gYmUgc2NoZWR1bGVkIGFzIGlmIGl0J3MKKyAqIDQtd2F5LCB3aGljaCBjYW4gYmUgYSBsaW1pdC4gIFRvIGhlbHAgaXQsIHdlIHRyeSB0byBzY2hlZHVsZSB0aGUKKyAqIHJlYWQgb2YgUkEodCkgYXMgbGF0ZSBhcyBwb3NzaWJsZSBzbyBpdCBkb2Vzbid0IHN0YWxsIHdhaXRpbmcgZm9yCisgKiB0aGUgcHJldmlvdXMgcm91bmQncyBSRSh0LTEpLCBhbmQgd2UgdHJ5IHRvIHJvdGF0ZSBSQih0KSBhcyBlYXJseQorICogYXMgcG9zc2libGUgd2hpbGUgcmVhZGluZyBSQyh0KSAoPSBSQih0LTEpKSBhcyBsYXRlIGFzIHBvc3NpYmxlLgorICovCisKKy8qIHRoZSBpbml0aWFsIGxvYWRzLiAqLworI2RlZmluZSBMT0FEVyhzKSBcCisJbHd6CVcocyksKHMpKjQoJXI0KQorCisvKgorICogUGVyZm9ybSBhIHN0ZXAgd2l0aCBGMCwgYW5kIGxvYWQgVyhzKS4gIFVzZXMgVyhzKSBhcyBhIHRlbXBvcmFyeQorICogYmVmb3JlIGxvYWRpbmcgaXQuCisgKiBUaGlzIGlzIGFjdHVhbGx5IDEwIGluc3RydWN0aW9ucywgd2hpY2ggaXMgYW4gYXdrd2FyZCBmaXQuCisgKiBJdCBjYW4gZXhlY3V0ZSBncm91cGVkIGFzIGxpc3RlZCwgb3IgZGVsYXllZCBvbmUgaW5zdHJ1Y3Rpb24uCisgKiAoSWYgZGVsYXllZCB0d28gaW5zdHJ1Y3Rpb25zLCB0aGVyZSBpcyBhIHN0YWxsIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlCisgKiBzZWNvbmQgbGluZS4pICBUaHVzLCB0d28gaXRlcmF0aW9ucyB0YWtlIDcgY3ljbGVzLCAzLjUgY3ljbGVzIHBlciByb3VuZC4KKyAqLworI2RlZmluZSBTVEVQRDBfTE9BRCh0LHMpIFwKK2FkZCBSRSh0KSxSRSh0KSxXKHQpOyBhbmRjICAgJXIwLFJEKHQpLFJCKHQpOyAgYW5kICAgIFcocyksUkModCksUkIodCk7IFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICByb3Rsd2kgJXIwLFJBKHQpLDU7ICAgICAgcm90bHdpIFJCKHQpLFJCKHQpLDMwOyAgIFwKK2FkZCBSRSh0KSxSRSh0KSxXKHMpOyBhZGQgICAgJXIwLCVyMCwlcjU7ICAgICAgbHd6ICAgIFcocyksKHMpKjQoJXI0KTsgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjAKKworLyoKKyAqIFRoaXMgaXMgbGlrZXdpc2UgYXdrd2FyZCwgMTMgaW5zdHJ1Y3Rpb25zLiAgSG93ZXZlciwgaXQgY2FuIGFsc28KKyAqIGV4ZWN1dGUgc3RhcnRpbmcgd2l0aCAyIG91dCBvZiAzIHBvc3NpYmxlIG1vZHVsaSwgc28gaXQgZG9lcyAyIHJvdW5kcworICogaW4gOSBjeWNsZXMsIDQuNSBjeWNsZXMvcm91bmQuCisgKi8KKyNkZWZpbmUgU1RFUEQwX1VQREFURSh0LHMsbG9hZGsuLi4pIFwKK2FkZCBSRSh0KSxSRSh0KSxXKHQpOyBhbmRjICAgJXIwLFJEKHQpLFJCKHQpOyB4b3IgICAgVyhzKSxXKChzKS0xNiksVygocyktMyk7IFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICBhbmQgICAgJXIwLFJDKHQpLFJCKHQpOyB4b3IgICAgVyhzKSxXKHMpLFcoKHMpLTgpOyAgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjA7ICByb3Rsd2kgJXIwLFJBKHQpLDU7ICAgICB4b3IgICAgVyhzKSxXKHMpLFcoKHMpLTE0KTsgICAgIFwKK2FkZCBSRSh0KSxSRSh0KSwlcjU7ICBsb2Fkazsgcm90bHdpIFJCKHQpLFJCKHQpLDMwOyAgcm90bHdpIFcocyksVyhzKSwxOyAgICAgXAorYWRkIFJFKHQpLFJFKHQpLCVyMAorCisvKiBOaWNlbHkgb3B0aW1hbC4gIENvbnZlbmllbnRseSwgYWxzbyB0aGUgbW9zdCBjb21tb24uICovCisjZGVmaW5lIFNURVBEMV9VUERBVEUodCxzLGxvYWRrLi4uKSBcCithZGQgUkUodCksUkUodCksVyh0KTsgeG9yICAgICVyMCxSRCh0KSxSQih0KTsgeG9yICAgIFcocyksVygocyktMTYpLFcoKHMpLTMpOyBcCithZGQgUkUodCksUkUodCksJXI1OyAgbG9hZGs7IHhvciAlcjAsJXIwLFJDKHQpOyAgeG9yIFcocyksVyhzKSxXKChzKS04KTsgICAgICBcCithZGQgUkUodCksUkUodCksJXIwOyAgcm90bHdpICVyMCxSQSh0KSw1OyAgICAgeG9yICAgIFcocyksVyhzKSxXKChzKS0xNCk7ICAgICBcCithZGQgUkUodCksUkUodCksJXIwOyAgcm90bHdpIFJCKHQpLFJCKHQpLDMwOyAgcm90bHdpIFcocyksVyhzKSwxCisKKy8qCisgKiBUaGUgbmFrZWQgdmVyc2lvbiwgbm8gVVBEQVRFLCBmb3IgdGhlIGxhc3QgNCByb3VuZHMuICAzIGN5Y2xlcyBwZXIuCisgKiBXZSBjb3VsZCB1c2UgVyhzKSBhcyBhIHRlbXAgcmVnaXN0ZXIsIGJ1dCB3ZSBkb24ndCBuZWVkIGl0LgorICovCisjZGVmaW5lIFNURVBEMSh0KSBcCisgICAgICAgICAgICAgICAgICAgICAgICBhZGQgICBSRSh0KSxSRSh0KSxXKHQpOyB4b3IgICAgJXIwLFJEKHQpLFJCKHQpOyBcCityb3Rsd2kgUkIodCksUkIodCksMzA7ICBhZGQgICBSRSh0KSxSRSh0KSwlcjU7ICB4b3IgICAgJXIwLCVyMCxSQyh0KTsgICBcCithZGQgICAgUkUodCksUkUodCksJXIwOyByb3Rsd2kgJXIwLFJBKHQpLDU7ICAgICAvKiBzcGFyZSBzbG90ICovICAgICAgICBcCithZGQgICAgUkUodCksUkUodCksJXIwCisKKy8qCisgKiAxNCBpbnN0cnVjdGlvbnMsIDUgY3ljbGVzIHBlci4gIFRoZSBtYWpvcml0eSBmdW5jdGlvbiBpcyBhIGJpdAorICogYXdrd2FyZCB0byBjb21wdXRlLiAgVGhpcyBjYW4gZXhlY3V0ZSB3aXRoIGEgMS1pbnN0cnVjdGlvbiBkZWxheSwKKyAqIGJ1dCBpdCBjYXVzZXMgYSAyLWluc3RydWN0aW9uIGRlbGF5LCB3aGljaCB0cmlnZ2VycyBhIHN0YWxsLgorICovCisjZGVmaW5lIFNURVBEMl9VUERBVEUodCxzLGxvYWRrLi4uKSBcCithZGQgUkUodCksUkUodCksVyh0KTsgYW5kICAgICVyMCxSRCh0KSxSQih0KTsgeG9yICAgIFcocyksVygocyktMTYpLFcoKHMpLTMpOyBcCithZGQgUkUodCksUkUodCksJXIwOyAgeG9yICAgICVyMCxSRCh0KSxSQih0KTsgeG9yICAgIFcocyksVyhzKSxXKChzKS04KTsgICAgICBcCithZGQgUkUodCksUkUodCksJXI1OyAgbG9hZGs7IGFuZCAlcjAsJXIwLFJDKHQpOyAgeG9yIFcocyksVyhzKSxXKChzKS0xNCk7ICAgICBcCithZGQgUkUodCksUkUodCksJXIwOyAgcm90bHdpICVyMCxSQSh0KSw1OyAgICAgcm90bHdpIFcocyksVyhzKSwxOyAgICAgICAgICAgICBcCithZGQgUkUodCksUkUodCksJXIwOyAgcm90bHdpIFJCKHQpLFJCKHQpLDMwCisKKyNkZWZpbmUgU1RFUDBfTE9BRDQodCxzKQkJXAorCVNURVBEMF9MT0FEKHQscyk7CQlcCisJU1RFUEQwX0xPQUQoKHQrMSksKHMpKzEpOwlcCisJU1RFUEQwX0xPQUQoKHQpKzIsKHMpKzIpOwlcCisJU1RFUEQwX0xPQUQoKHQpKzMsKHMpKzMpCisKKyNkZWZpbmUgU1RFUFVQNChmbiwgdCwgcywgbG9hZGsuLi4pCQlcCisJU1RFUCMjZm4jI19VUERBVEUodCxzLCk7CQlcCisJU1RFUCMjZm4jI19VUERBVEUoKHQpKzEsKHMpKzEsKTsJXAorCVNURVAjI2ZuIyNfVVBEQVRFKCh0KSsyLChzKSsyLCk7CVwKKwlTVEVQIyNmbiMjX1VQREFURSgodCkrMywocykrMyxsb2FkaykKKworI2RlZmluZSBTVEVQVVAyMChmbiwgdCwgcywgbG9hZGsuLi4pCVwKKwlTVEVQVVA0KGZuLCB0LCBzLCk7CQlcCisJU1RFUFVQNChmbiwgKHQpKzQsIChzKSs0LCk7CVwKKwlTVEVQVVA0KGZuLCAodCkrOCwgKHMpKzgsKTsJXAorCVNURVBVUDQoZm4sICh0KSsxMiwgKHMpKzEyLCk7CVwKKwlTVEVQVVA0KGZuLCAodCkrMTYsIChzKSsxNiwgbG9hZGspCisKKwkuZ2xvYmwJcHBjX3NoYTFfY29yZQorcHBjX3NoYTFfY29yZToKKwlzdHd1CSVyMSwtODAoJXIxKQorCXN0bXcJJXIxMyw0KCVyMSkKKworCS8qIExvYWQgdXAgQSAtIEUgKi8KKwlsbXcJJXIyNywwKCVyMykKKworCW10Y3RyCSVyNQorCisxOgorCUxPQURXKDApCisJbGlzCSVyNSwweDVhODIKKwltcglSRSgwKSwlcjMxCisJTE9BRFcoMSkKKwltcglSRCgwKSwlcjMwCisJbXIJUkMoMCksJXIyOQorCUxPQURXKDIpCisJb3JpCSVyNSwlcjUsMHg3OTk5CS8qIEswLTE5ICovCisJbXIJUkIoMCksJXIyOAorCUxPQURXKDMpCisJbXIJUkEoMCksJXIyNworCisJU1RFUDBfTE9BRDQoMCwgNCkKKwlTVEVQMF9MT0FENCg0LCA4KQorCVNURVAwX0xPQUQ0KDgsIDEyKQorCVNURVBVUDQoRDAsIDEyLCAxNiwpCisJU1RFUFVQNChEMCwgMTYsIDIwLCBsaXMgJXI1LDB4NmVkOSkKKworCW9yaQklcjUsJXI1LDB4ZWJhMQkvKiBLMjAtMzkgKi8KKwlTVEVQVVAyMChEMSwgMjAsIDI0LCBsaXMgJXI1LDB4OGYxYikKKworCW9yaQklcjUsJXI1LDB4YmNkYwkvKiBLNDAtNTkgKi8KKwlTVEVQVVAyMChEMiwgNDAsIDQ0LCBsaXMgJXI1LDB4Y2E2MikKKworCW9yaQklcjUsJXI1LDB4YzFkNgkvKiBLNjAtNzkgKi8KKwlTVEVQVVA0KEQxLCA2MCwgNjQsKQorCVNURVBVUDQoRDEsIDY0LCA2OCwpCisJU1RFUFVQNChEMSwgNjgsIDcyLCkKKwlTVEVQVVA0KEQxLCA3MiwgNzYsKQorCWFkZGkJJXI0LCVyNCw2NAorCVNURVBEMSg3NikKKwlTVEVQRDEoNzcpCisJU1RFUEQxKDc4KQorCVNURVBEMSg3OSkKKworCS8qIEFkZCByZXN1bHRzIHRvIG9yaWdpbmFsIHZhbHVlcyAqLworCWFkZAklcjMxLCVyMzEsUkUoMCkKKwlhZGQJJXIzMCwlcjMwLFJEKDApCisJYWRkCSVyMjksJXIyOSxSQygwKQorCWFkZAklcjI4LCVyMjgsUkIoMCkKKwlhZGQJJXIyNywlcjI3LFJBKDApCisKKwliZG56CTFiCisKKwkvKiBTYXZlIGZpbmFsIGhhc2gsIHJlc3RvcmUgcmVnaXN0ZXJzLCBhbmQgcmV0dXJuICovCisJc3RtdwklcjI3LDAoJXIzKQorCWxtdwklcjEzLDQoJXIxKQorCWFkZGkJJXIxLCVyMSw4MAorCWJscgpkaWZmIC0tZ2l0IGEvcHJlbG9hZC1pbmRleC5jIGIvcHJlbG9hZC1pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZmUzYTMKLS0tIC9kZXYvbnVsbAorKysgYi9wcmVsb2FkLWluZGV4LmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTGludXMgVG9ydmFsZHMKKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworI2lmZGVmIE5PX1BUSFJFQURTCitzdGF0aWMgdm9pZCBwcmVsb2FkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXgsCisJCQkgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJOyAvKiBub3RoaW5nICovCit9CisjZWxzZQorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisvKgorICogTW9zdGx5IHJhbmRvbWx5IGNob3NlbiBtYXhpbXVtIHRocmVhZCBjb3VudHM6IHdlCisgKiBjYXAgdGhlIHBhcmFsbGVsaXNtIHRvIDIwIHRocmVhZHMsIGFuZCB3ZSB3YW50CisgKiB0byBoYXZlIGF0IGxlYXN0IDUwMCBsc3RhdCdzIHBlciB0aHJlYWQgZm9yIGl0IHRvCisgKiBiZSB3b3J0aCBzdGFydGluZyBhIHRocmVhZC4KKyAqLworI2RlZmluZSBNQVhfUEFSQUxMRUwgKDIwKQorI2RlZmluZSBUSFJFQURfQ09TVCAoNTAwKQorCitzdHJ1Y3QgdGhyZWFkX2RhdGEgeworCXB0aHJlYWRfdCBwdGhyZWFkOworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXg7CisJc3RydWN0IHBhdGhzcGVjIHBhdGhzcGVjOworCWludCBvZmZzZXQsIG5yOworfTsKKworc3RhdGljIHZvaWQgKnByZWxvYWRfdGhyZWFkKHZvaWQgKl9kYXRhKQoreworCWludCBucjsKKwlzdHJ1Y3QgdGhyZWFkX2RhdGEgKnAgPSBfZGF0YTsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4ID0gcC0+aW5kZXg7CisJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2VwID0gaW5kZXgtPmNhY2hlICsgcC0+b2Zmc2V0OworCXN0cnVjdCBjYWNoZV9kZWYgY2FjaGUgPSBDQUNIRV9ERUZfSU5JVDsKKworCW5yID0gcC0+bnI7CisJaWYgKG5yICsgcC0+b2Zmc2V0ID4gaW5kZXgtPmNhY2hlX25yKQorCQluciA9IGluZGV4LT5jYWNoZV9uciAtIHAtPm9mZnNldDsKKworCWRvIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9ICpjZXArKzsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJaWYgKGNlX3N0YWdlKGNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7CisJCWlmIChjZV91cHRvZGF0ZShjZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFjZV9wYXRoX21hdGNoKGNlLCAmcC0+cGF0aHNwZWMsIE5VTEwpKQorCQkJY29udGludWU7CisJCWlmICh0aHJlYWRlZF9oYXNfc3ltbGlua19sZWFkaW5nX3BhdGgoJmNhY2hlLCBjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpKQorCQkJY29udGludWU7CisJCWlmIChsc3RhdChjZS0+bmFtZSwgJnN0KSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaWVfbWF0Y2hfc3RhdChpbmRleCwgY2UsICZzdCwgQ0VfTUFUQ0hfUkFDWV9JU19ESVJUWSkpCisJCQljb250aW51ZTsKKwkJY2VfbWFya191cHRvZGF0ZShjZSk7CisJfSB3aGlsZSAoLS1uciA+IDApOworCWNhY2hlX2RlZl9jbGVhcigmY2FjaGUpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwcmVsb2FkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXgsCisJCQkgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJaW50IHRocmVhZHMsIGksIHdvcmssIG9mZnNldDsKKwlzdHJ1Y3QgdGhyZWFkX2RhdGEgZGF0YVtNQVhfUEFSQUxMRUxdOworCisJaWYgKCFjb3JlX3ByZWxvYWRfaW5kZXgpCisJCXJldHVybjsKKworCXRocmVhZHMgPSBpbmRleC0+Y2FjaGVfbnIgLyBUSFJFQURfQ09TVDsKKwlpZiAodGhyZWFkcyA8IDIpCisJCXJldHVybjsKKwlpZiAodGhyZWFkcyA+IE1BWF9QQVJBTExFTCkKKwkJdGhyZWFkcyA9IE1BWF9QQVJBTExFTDsKKwlvZmZzZXQgPSAwOworCXdvcmsgPSBESVZfUk9VTkRfVVAoaW5kZXgtPmNhY2hlX25yLCB0aHJlYWRzKTsKKwltZW1zZXQoJmRhdGEsIDAsIHNpemVvZihkYXRhKSk7CisJZm9yIChpID0gMDsgaSA8IHRocmVhZHM7IGkrKykgeworCQlzdHJ1Y3QgdGhyZWFkX2RhdGEgKnAgPSBkYXRhK2k7CisJCXAtPmluZGV4ID0gaW5kZXg7CisJCWlmIChwYXRoc3BlYykKKwkJCWNvcHlfcGF0aHNwZWMoJnAtPnBhdGhzcGVjLCBwYXRoc3BlYyk7CisJCXAtPm9mZnNldCA9IG9mZnNldDsKKwkJcC0+bnIgPSB3b3JrOworCQlvZmZzZXQgKz0gd29yazsKKwkJaWYgKHB0aHJlYWRfY3JlYXRlKCZwLT5wdGhyZWFkLCBOVUxMLCBwcmVsb2FkX3RocmVhZCwgcCkpCisJCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgdGhyZWFkZWQgbHN0YXQiKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IHRocmVhZHM7IGkrKykgeworCQlzdHJ1Y3QgdGhyZWFkX2RhdGEgKnAgPSBkYXRhK2k7CisJCWlmIChwdGhyZWFkX2pvaW4ocC0+cHRocmVhZCwgTlVMTCkpCisJCQlkaWUoInVuYWJsZSB0byBqb2luIHRocmVhZGVkIGxzdGF0Iik7CisJfQorfQorI2VuZGlmCisKK2ludCByZWFkX2luZGV4X3ByZWxvYWQoc3RydWN0IGluZGV4X3N0YXRlICppbmRleCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJaW50IHJldHZhbCA9IHJlYWRfaW5kZXgoaW5kZXgpOworCisJcHJlbG9hZF9pbmRleChpbmRleCwgcGF0aHNwZWMpOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9wcmV0dHkuYyBiL3ByZXR0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MWMyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9wcmV0dHkuYwpAQCAtMCwwICsxLDE3NDUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgIm1haWxtYXAuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgIm5vdGVzLmgiCisjaW5jbHVkZSAiY29sb3IuaCIKKyNpbmNsdWRlICJyZWZsb2ctd2Fsay5oIgorI2luY2x1ZGUgImdwZy1pbnRlcmZhY2UuaCIKKworc3RhdGljIGNoYXIgKnVzZXJfZm9ybWF0Oworc3RhdGljIHN0cnVjdCBjbXRfZm10X21hcCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwllbnVtIGNtaXRfZm10IGZvcm1hdDsKKwlpbnQgaXNfdGZvcm1hdDsKKwlpbnQgaXNfYWxpYXM7CisJY29uc3QgY2hhciAqdXNlcl9mb3JtYXQ7Cit9ICpjb21taXRfZm9ybWF0czsKK3N0YXRpYyBzaXplX3QgYnVpbHRpbl9mb3JtYXRzX2xlbjsKK3N0YXRpYyBzaXplX3QgY29tbWl0X2Zvcm1hdHNfbGVuOworc3RhdGljIHNpemVfdCBjb21taXRfZm9ybWF0c19hbGxvYzsKK3N0YXRpYyBzdHJ1Y3QgY210X2ZtdF9tYXAgKmZpbmRfY29tbWl0X2Zvcm1hdChjb25zdCBjaGFyICpzb3VnaHQpOworCitpbnQgY29tbWl0X2Zvcm1hdF9pc19lbXB0eShlbnVtIGNtaXRfZm10IGZtdCkKK3sKKwlyZXR1cm4gZm10ID09IENNSVRfRk1UX1VTRVJGT1JNQVQgJiYgISp1c2VyX2Zvcm1hdDsKK30KKworc3RhdGljIHZvaWQgc2F2ZV91c2VyX2Zvcm1hdChzdHJ1Y3QgcmV2X2luZm8gKnJldiwgY29uc3QgY2hhciAqY3AsIGludCBpc190Zm9ybWF0KQoreworCWZyZWUodXNlcl9mb3JtYXQpOworCXVzZXJfZm9ybWF0ID0geHN0cmR1cChjcCk7CisJaWYgKGlzX3Rmb3JtYXQpCisJCXJldi0+dXNlX3Rlcm1pbmF0b3IgPSAxOworCXJldi0+Y29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX1VTRVJGT1JNQVQ7Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3ByZXR0eV9mb3JtYXRzX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlzdHJ1Y3QgY210X2ZtdF9tYXAgKmNvbW1pdF9mb3JtYXQgPSBOVUxMOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZm10OworCWludCBpOworCisJaWYgKCFza2lwX3ByZWZpeCh2YXIsICJwcmV0dHkuIiwgJm5hbWUpKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBidWlsdGluX2Zvcm1hdHNfbGVuOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoY29tbWl0X2Zvcm1hdHNbaV0ubmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGkgPSBidWlsdGluX2Zvcm1hdHNfbGVuOyBpIDwgY29tbWl0X2Zvcm1hdHNfbGVuOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoY29tbWl0X2Zvcm1hdHNbaV0ubmFtZSwgbmFtZSkpIHsKKwkJCWNvbW1pdF9mb3JtYXQgPSAmY29tbWl0X2Zvcm1hdHNbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghY29tbWl0X2Zvcm1hdCkgeworCQlBTExPQ19HUk9XKGNvbW1pdF9mb3JtYXRzLCBjb21taXRfZm9ybWF0c19sZW4rMSwKKwkJCSAgIGNvbW1pdF9mb3JtYXRzX2FsbG9jKTsKKwkJY29tbWl0X2Zvcm1hdCA9ICZjb21taXRfZm9ybWF0c1tjb21taXRfZm9ybWF0c19sZW5dOworCQltZW1zZXQoY29tbWl0X2Zvcm1hdCwgMCwgc2l6ZW9mKCpjb21taXRfZm9ybWF0KSk7CisJCWNvbW1pdF9mb3JtYXRzX2xlbisrOworCX0KKworCWNvbW1pdF9mb3JtYXQtPm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCWNvbW1pdF9mb3JtYXQtPmZvcm1hdCA9IENNSVRfRk1UX1VTRVJGT1JNQVQ7CisJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZmbXQsIHZhciwgdmFsdWUpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoc2tpcF9wcmVmaXgoZm10LCAiZm9ybWF0OiIsICZmbXQpKQorCQljb21taXRfZm9ybWF0LT5pc190Zm9ybWF0ID0gMDsKKwllbHNlIGlmIChza2lwX3ByZWZpeChmbXQsICJ0Zm9ybWF0OiIsICZmbXQpIHx8IHN0cmNocihmbXQsICclJykpCisJCWNvbW1pdF9mb3JtYXQtPmlzX3Rmb3JtYXQgPSAxOworCWVsc2UKKwkJY29tbWl0X2Zvcm1hdC0+aXNfYWxpYXMgPSAxOworCWNvbW1pdF9mb3JtYXQtPnVzZXJfZm9ybWF0ID0gZm10OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX2NvbW1pdF9mb3JtYXRzKHZvaWQpCit7CisJc3RydWN0IGNtdF9mbXRfbWFwIGJ1aWx0aW5fZm9ybWF0c1tdID0geworCQl7ICJyYXciLAlDTUlUX0ZNVF9SQVcsCQkwIH0sCisJCXsgIm1lZGl1bSIsCUNNSVRfRk1UX01FRElVTSwJMCB9LAorCQl7ICJzaG9ydCIsCUNNSVRfRk1UX1NIT1JULAkJMCB9LAorCQl7ICJlbWFpbCIsCUNNSVRfRk1UX0VNQUlMLAkJMCB9LAorCQl7ICJmdWxsZXIiLAlDTUlUX0ZNVF9GVUxMRVIsCTAgfSwKKwkJeyAiZnVsbCIsCUNNSVRfRk1UX0ZVTEwsCQkwIH0sCisJCXsgIm9uZWxpbmUiLAlDTUlUX0ZNVF9PTkVMSU5FLAkxIH0KKwl9OworCWNvbW1pdF9mb3JtYXRzX2xlbiA9IEFSUkFZX1NJWkUoYnVpbHRpbl9mb3JtYXRzKTsKKwlidWlsdGluX2Zvcm1hdHNfbGVuID0gY29tbWl0X2Zvcm1hdHNfbGVuOworCUFMTE9DX0dST1coY29tbWl0X2Zvcm1hdHMsIGNvbW1pdF9mb3JtYXRzX2xlbiwgY29tbWl0X2Zvcm1hdHNfYWxsb2MpOworCW1lbWNweShjb21taXRfZm9ybWF0cywgYnVpbHRpbl9mb3JtYXRzLAorCSAgICAgICBzaXplb2YoKmJ1aWx0aW5fZm9ybWF0cykqQVJSQVlfU0laRShidWlsdGluX2Zvcm1hdHMpKTsKKworCWdpdF9jb25maWcoZ2l0X3ByZXR0eV9mb3JtYXRzX2NvbmZpZywgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY210X2ZtdF9tYXAgKmZpbmRfY29tbWl0X2Zvcm1hdF9yZWN1cnNpdmUoY29uc3QgY2hhciAqc291Z2h0LAorCQkJCQkJCWNvbnN0IGNoYXIgKm9yaWdpbmFsLAorCQkJCQkJCWludCBudW1fcmVkaXJlY3Rpb25zKQoreworCXN0cnVjdCBjbXRfZm10X21hcCAqZm91bmQgPSBOVUxMOworCXNpemVfdCBmb3VuZF9tYXRjaF9sZW4gPSAwOworCWludCBpOworCisJaWYgKG51bV9yZWRpcmVjdGlvbnMgPj0gY29tbWl0X2Zvcm1hdHNfbGVuKQorCQlkaWUoImludmFsaWQgLS1wcmV0dHkgZm9ybWF0OiAiCisJCSAgICAiJyVzJyByZWZlcmVuY2VzIGFuIGFsaWFzIHdoaWNoIHBvaW50cyB0byBpdHNlbGYiLAorCQkgICAgb3JpZ2luYWwpOworCisJZm9yIChpID0gMDsgaSA8IGNvbW1pdF9mb3JtYXRzX2xlbjsgaSsrKSB7CisJCXNpemVfdCBtYXRjaF9sZW47CisKKwkJaWYgKCFzdGFydHNfd2l0aChjb21taXRfZm9ybWF0c1tpXS5uYW1lLCBzb3VnaHQpKQorCQkJY29udGludWU7CisKKwkJbWF0Y2hfbGVuID0gc3RybGVuKGNvbW1pdF9mb3JtYXRzW2ldLm5hbWUpOworCQlpZiAoZm91bmQgPT0gTlVMTCB8fCBmb3VuZF9tYXRjaF9sZW4gPiBtYXRjaF9sZW4pIHsKKwkJCWZvdW5kID0gJmNvbW1pdF9mb3JtYXRzW2ldOworCQkJZm91bmRfbWF0Y2hfbGVuID0gbWF0Y2hfbGVuOworCQl9CisJfQorCisJaWYgKGZvdW5kICYmIGZvdW5kLT5pc19hbGlhcykgeworCQlmb3VuZCA9IGZpbmRfY29tbWl0X2Zvcm1hdF9yZWN1cnNpdmUoZm91bmQtPnVzZXJfZm9ybWF0LAorCQkJCQkJICAgICBvcmlnaW5hbCwKKwkJCQkJCSAgICAgbnVtX3JlZGlyZWN0aW9ucysxKTsKKwl9CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY210X2ZtdF9tYXAgKmZpbmRfY29tbWl0X2Zvcm1hdChjb25zdCBjaGFyICpzb3VnaHQpCit7CisJaWYgKCFjb21taXRfZm9ybWF0cykKKwkJc2V0dXBfY29tbWl0X2Zvcm1hdHMoKTsKKworCXJldHVybiBmaW5kX2NvbW1pdF9mb3JtYXRfcmVjdXJzaXZlKHNvdWdodCwgc291Z2h0LCAwKTsKK30KKwordm9pZCBnZXRfY29tbWl0X2Zvcm1hdChjb25zdCBjaGFyICphcmcsIHN0cnVjdCByZXZfaW5mbyAqcmV2KQoreworCXN0cnVjdCBjbXRfZm10X21hcCAqY29tbWl0X2Zvcm1hdDsKKworCXJldi0+dXNlX3Rlcm1pbmF0b3IgPSAwOworCWlmICghYXJnKSB7CisJCXJldi0+Y29tbWl0X2Zvcm1hdCA9IENNSVRfRk1UX0RFRkFVTFQ7CisJCXJldHVybjsKKwl9CisJaWYgKHNraXBfcHJlZml4KGFyZywgImZvcm1hdDoiLCAmYXJnKSkgeworCQlzYXZlX3VzZXJfZm9ybWF0KHJldiwgYXJnLCAwKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghKmFyZyB8fCBza2lwX3ByZWZpeChhcmcsICJ0Zm9ybWF0OiIsICZhcmcpIHx8IHN0cmNocihhcmcsICclJykpIHsKKwkJc2F2ZV91c2VyX2Zvcm1hdChyZXYsIGFyZywgMSk7CisJCXJldHVybjsKKwl9CisKKwljb21taXRfZm9ybWF0ID0gZmluZF9jb21taXRfZm9ybWF0KGFyZyk7CisJaWYgKCFjb21taXRfZm9ybWF0KQorCQlkaWUoImludmFsaWQgLS1wcmV0dHkgZm9ybWF0OiAlcyIsIGFyZyk7CisKKwlyZXYtPmNvbW1pdF9mb3JtYXQgPSBjb21taXRfZm9ybWF0LT5mb3JtYXQ7CisJcmV2LT51c2VfdGVybWluYXRvciA9IGNvbW1pdF9mb3JtYXQtPmlzX3Rmb3JtYXQ7CisJaWYgKGNvbW1pdF9mb3JtYXQtPmZvcm1hdCA9PSBDTUlUX0ZNVF9VU0VSRk9STUFUKSB7CisJCXNhdmVfdXNlcl9mb3JtYXQocmV2LCBjb21taXRfZm9ybWF0LT51c2VyX2Zvcm1hdCwKKwkJCQkgY29tbWl0X2Zvcm1hdC0+aXNfdGZvcm1hdCk7CisJfQorfQorCisvKgorICogR2VuZXJpYyBzdXBwb3J0IGZvciBwcmV0dHktcHJpbnRpbmcgdGhlIGhlYWRlcgorICovCitzdGF0aWMgaW50IGdldF9vbmVfbGluZShjb25zdCBjaGFyICptc2cpCit7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgYyA9ICptc2crKzsKKwkJaWYgKCFjKQorCQkJYnJlYWs7CisJCXJldCsrOworCQlpZiAoYyA9PSAnXG4nKQorCQkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIEhpZ2ggYml0IHNldCwgb3IgSVNPLTIwMjItSU5UICovCitzdGF0aWMgaW50IG5vbl9hc2NpaShpbnQgY2gpCit7CisJcmV0dXJuICFpc2FzY2lpKGNoKSB8fCBjaCA9PSAnXDAzMyc7Cit9CisKK2ludCBoYXNfbm9uX2FzY2lpKGNvbnN0IGNoYXIgKnMpCit7CisJaW50IGNoOworCWlmICghcykKKwkJcmV0dXJuIDA7CisJd2hpbGUgKChjaCA9ICpzKyspICE9ICdcMCcpIHsKKwkJaWYgKG5vbl9hc2NpaShjaCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXNfcmZjODIyX3NwZWNpYWwoY2hhciBjaCkKK3sKKwlzd2l0Y2ggKGNoKSB7CisJY2FzZSAnKCc6CisJY2FzZSAnKSc6CisJY2FzZSAnPCc6CisJY2FzZSAnPic6CisJY2FzZSAnWyc6CisJY2FzZSAnXSc6CisJY2FzZSAnOic6CisJY2FzZSAnOyc6CisJY2FzZSAnQCc6CisJY2FzZSAnLCc6CisJY2FzZSAnLic6CisJY2FzZSAnIic6CisJY2FzZSAnXFwnOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbmVlZHNfcmZjODIyX3F1b3RpbmcoY29uc3QgY2hhciAqcywgaW50IGxlbikKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWlmIChpc19yZmM4MjJfc3BlY2lhbChzW2ldKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxhc3RfbGluZV9sZW5ndGgoc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IGk7CisKKwkvKiBIb3cgbWFueSBieXRlcyBhcmUgYWxyZWFkeSB1c2VkIG9uIHRoZSBsYXN0IGxpbmU/ICovCisJZm9yIChpID0gc2ItPmxlbiAtIDE7IGkgPj0gMDsgaS0tKQorCQlpZiAoc2ItPmJ1ZltpXSA9PSAnXG4nKQorCQkJYnJlYWs7CisJcmV0dXJuIHNiLT5sZW4gLSAoaSArIDEpOworfQorCitzdGF0aWMgdm9pZCBhZGRfcmZjODIyX3F1b3RlZChzdHJ1Y3Qgc3RyYnVmICpvdXQsIGNvbnN0IGNoYXIgKnMsIGludCBsZW4pCit7CisJaW50IGk7CisKKwkvKiBqdXN0IGEgZ3Vlc3MsIHdlIG1heSBoYXZlIHRvIGFsc28gYmFja3NsYXNoLXF1b3RlICovCisJc3RyYnVmX2dyb3cob3V0LCBsZW4gKyAyKTsKKworCXN0cmJ1Zl9hZGRjaChvdXQsICciJyk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXN3aXRjaCAoc1tpXSkgeworCQljYXNlICciJzoKKwkJY2FzZSAnXFwnOgorCQkJc3RyYnVmX2FkZGNoKG91dCwgJ1xcJyk7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsIHNbaV0pOworCQl9CisJfQorCXN0cmJ1Zl9hZGRjaChvdXQsICciJyk7Cit9CisKK2VudW0gcmZjMjA0N190eXBlIHsKKwlSRkMyMDQ3X1NVQkpFQ1QsCisJUkZDMjA0N19BRERSRVNTCit9OworCitzdGF0aWMgaW50IGlzX3JmYzIwNDdfc3BlY2lhbChjaGFyIGNoLCBlbnVtIHJmYzIwNDdfdHlwZSB0eXBlKQoreworCS8qCisJICogcmZjMjA0Nywgc2VjdGlvbiA0LjI6CisJICoKKwkgKiAgICA4LWJpdCB2YWx1ZXMgd2hpY2ggY29ycmVzcG9uZCB0byBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyBvdGhlcgorCSAqICAgIHRoYW4gIj0iLCAiPyIsIGFuZCAiXyIgKHVuZGVyc2NvcmUpLCBNQVkgYmUgcmVwcmVzZW50ZWQgYXMgdGhvc2UKKwkgKiAgICBjaGFyYWN0ZXJzLiAgKEJ1dCBzZWUgc2VjdGlvbiA1IGZvciByZXN0cmljdGlvbnMuKSAgSW4KKwkgKiAgICBwYXJ0aWN1bGFyLCBTUEFDRSBhbmQgVEFCIE1VU1QgTk9UIGJlIHJlcHJlc2VudGVkIGFzIHRoZW1zZWx2ZXMKKwkgKiAgICB3aXRoaW4gZW5jb2RlZCB3b3Jkcy4KKwkgKi8KKworCS8qCisJICogcnVsZSBvdXQgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgYW5kIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyAodGhlCisJICogbm9uLUFTQ0lJIGNoZWNrIHNob3VsZCBiZSByZWR1bmRhbnQgYXMgaXNwcmludCgpIGlzIG5vdCBsb2NhbGl6ZWQKKwkgKiBhbmQgb25seSBrbm93cyBhYm91dCBBU0NJSSwgYnV0IGJlIGRlZmVuc2l2ZSBhYm91dCB0aGF0KQorCSAqLworCWlmIChub25fYXNjaWkoY2gpIHx8ICFpc3ByaW50KGNoKSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIHJ1bGUgb3V0IHNwZWNpYWwgcHJpbnRhYmxlIGNoYXJhY3RlcnMgKCcgJyBzaG91bGQgYmUgdGhlIG9ubHkKKwkgKiB3aGl0ZXNwYWNlIGNoYXJhY3RlciBjb25zaWRlcmVkIHByaW50YWJsZSwgYnV0IGJlIGRlZmVuc2l2ZSBhbmQgdXNlCisJICogaXNzcGFjZSgpKQorCSAqLworCWlmIChpc3NwYWNlKGNoKSB8fCBjaCA9PSAnPScgfHwgY2ggPT0gJz8nIHx8IGNoID09ICdfJykKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIHJmYzIwNDcsIHNlY3Rpb24gNS4zOgorCSAqCisJICogICAgQXMgYSByZXBsYWNlbWVudCBmb3IgYSAnd29yZCcgZW50aXR5IHdpdGhpbiBhICdwaHJhc2UnLCBmb3IgZXhhbXBsZSwKKwkgKiAgICBvbmUgdGhhdCBwcmVjZWRlcyBhbiBhZGRyZXNzIGluIGEgRnJvbSwgVG8sIG9yIENjIGhlYWRlci4gIFRoZSBBQk5GCisJICogICAgZGVmaW5pdGlvbiBmb3IgJ3BocmFzZScgZnJvbSBSRkMgODIyIHRodXMgYmVjb21lczoKKwkgKgorCSAqICAgIHBocmFzZSA9IDEqKCBlbmNvZGVkLXdvcmQgLyB3b3JkICkKKwkgKgorCSAqICAgIEluIHRoaXMgY2FzZSB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdGhhdCBtYXkgYmUgdXNlZCBpbiBhICJRIi1lbmNvZGVkCisJICogICAgJ2VuY29kZWQtd29yZCcgaXMgcmVzdHJpY3RlZCB0bzogPHVwcGVyIGFuZCBsb3dlciBjYXNlIEFTQ0lJCisJICogICAgbGV0dGVycywgZGVjaW1hbCBkaWdpdHMsICIhIiwgIioiLCAiKyIsICItIiwgIi8iLCAiPSIsIGFuZCAiXyIKKwkgKiAgICAodW5kZXJzY29yZSwgQVNDSUkgOTUuKT4uICBBbiAnZW5jb2RlZC13b3JkJyB0aGF0IGFwcGVhcnMgd2l0aGluIGEKKwkgKiAgICAncGhyYXNlJyBNVVNUIGJlIHNlcGFyYXRlZCBmcm9tIGFueSBhZGphY2VudCAnd29yZCcsICd0ZXh0JyBvcgorCSAqICAgICdzcGVjaWFsJyBieSAnbGluZWFyLXdoaXRlLXNwYWNlJy4KKwkgKi8KKworCWlmICh0eXBlICE9IFJGQzIwNDdfQUREUkVTUykKKwkJcmV0dXJuIDA7CisKKwkvKiAnPScgYW5kICdfJyBhcmUgc3BlY2lhbCBjYXNlcyBhbmQgaGF2ZSBiZWVuIGNoZWNrZWQgYWJvdmUgKi8KKwlyZXR1cm4gIShpc2FsbnVtKGNoKSB8fCBjaCA9PSAnIScgfHwgY2ggPT0gJyonIHx8IGNoID09ICcrJyB8fCBjaCA9PSAnLScgfHwgY2ggPT0gJy8nKTsKK30KKworc3RhdGljIGludCBuZWVkc19yZmMyMDQ3X2VuY29kaW5nKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sCisJCQkJICBlbnVtIHJmYzIwNDdfdHlwZSB0eXBlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWludCBjaCA9IGxpbmVbaV07CisJCWlmIChub25fYXNjaWkoY2gpIHx8IGNoID09ICdcbicpCisJCQlyZXR1cm4gMTsKKwkJaWYgKChpICsgMSA8IGxlbikgJiYgKGNoID09ICc9JyAmJiBsaW5lW2krMV0gPT0gJz8nKSkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhZGRfcmZjMjA0NyhzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqbGluZSwgc2l6ZV90IGxlbiwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBlbnVtIHJmYzIwNDdfdHlwZSB0eXBlKQoreworCXN0YXRpYyBjb25zdCBpbnQgbWF4X2VuY29kZWRfbGVuZ3RoID0gNzY7IC8qIHBlciByZmMyMDQ3ICovCisJaW50IGk7CisJaW50IGxpbmVfbGVuID0gbGFzdF9saW5lX2xlbmd0aChzYik7CisKKwlzdHJidWZfZ3JvdyhzYiwgbGVuICogMyArIHN0cmxlbihlbmNvZGluZykgKyAxMDApOworCXN0cmJ1Zl9hZGRmKHNiLCAiPT8lcz9xPyIsIGVuY29kaW5nKTsKKwlsaW5lX2xlbiArPSBzdHJsZW4oZW5jb2RpbmcpICsgNTsgLyogNSBmb3IgPT8/cT8gKi8KKworCXdoaWxlIChsZW4pIHsKKwkJLyoKKwkJICogUkZDIDIwNDcsIHNlY3Rpb24gNSAoMyk6CisJCSAqCisJCSAqIEVhY2ggJ2VuY29kZWQtd29yZCcgTVVTVCByZXByZXNlbnQgYW4gaW50ZWdyYWwgbnVtYmVyIG9mCisJCSAqIGNoYXJhY3RlcnMuICBBIG11bHRpLW9jdGV0IGNoYXJhY3RlciBtYXkgbm90IGJlIHNwbGl0IGFjcm9zcworCQkgKiBhZGphY2VudCAnZW5jb2RlZC0gd29yZCdzLgorCQkgKi8KKwkJY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopbGluZTsKKwkJaW50IGNocmxlbiA9IG1ic19jaHJsZW4oJmxpbmUsICZsZW4sIGVuY29kaW5nKTsKKwkJaW50IGlzX3NwZWNpYWwgPSAoY2hybGVuID4gMSkgfHwgaXNfcmZjMjA0N19zcGVjaWFsKCpwLCB0eXBlKTsKKworCQkvKiAiPSUwMlgiICogY2hybGVuLCBvciB0aGUgYnl0ZSBpdHNlbGYgKi8KKwkJY29uc3QgY2hhciAqZW5jb2RlZF9mbXQgPSBpc19zcGVjaWFsID8gIj0lMDJYIiAgICA6ICIlYyI7CisJCWludAkgICAgZW5jb2RlZF9sZW4gPSBpc19zcGVjaWFsID8gMyAqIGNocmxlbiA6IDE7CisKKwkJLyoKKwkJICogQWNjb3JkaW5nIHRvIFJGQyAyMDQ3LCB3ZSBjb3VsZCBlbmNvZGUgdGhlIHNwZWNpYWwgY2hhcmFjdGVyCisJCSAqICcgJyAoc3BhY2UpIHdpdGggJ18nICh1bmRlcnNjb3JlKSBmb3IgcmVhZGFiaWxpdHkuIEJ1dCBtYW55CisJCSAqIHByb2dyYW1zIGRvIG5vdCB1bmRlcnN0YW5kIHRoaXMgYW5kIGp1c3QgbGVhdmUgdGhlCisJCSAqIHVuZGVyc2NvcmUgaW4gcGxhY2UuIFRodXMsIHdlIGRvIG5vdGhpbmcgc3BlY2lhbCBoZXJlLCB3aGljaAorCQkgKiBjYXVzZXMgJyAnIHRvIGJlIGVuY29kZWQgYXMgJz0yMCcsIGF2b2lkaW5nIHRoaXMgcHJvYmxlbS4KKwkJICovCisKKwkJaWYgKGxpbmVfbGVuICsgZW5jb2RlZF9sZW4gKyAyID4gbWF4X2VuY29kZWRfbGVuZ3RoKSB7CisJCQkvKiBJdCB3b24ndCBmaXQgd2l0aCB0cmFpbGluZyAiPz0iIC0tLSBicmVhayB0aGUgbGluZSAqLworCQkJc3RyYnVmX2FkZGYoc2IsICI/PVxuID0/JXM/cT8iLCBlbmNvZGluZyk7CisJCQlsaW5lX2xlbiA9IHN0cmxlbihlbmNvZGluZykgKyA1ICsgMTsgLyogPT8/cT8gcGx1cyBTUCAqLworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IGNocmxlbjsgaSsrKQorCQkJc3RyYnVmX2FkZGYoc2IsIGVuY29kZWRfZm10LCBwW2ldKTsKKwkJbGluZV9sZW4gKz0gZW5jb2RlZF9sZW47CisJfQorCXN0cmJ1Zl9hZGRzdHIoc2IsICI/PSIpOworfQorCitjb25zdCBjaGFyICpzaG93X2lkZW50X2RhdGUoY29uc3Qgc3RydWN0IGlkZW50X3NwbGl0ICppZGVudCwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgZGF0ZV9tb2RlICptb2RlKQoreworCXVuc2lnbmVkIGxvbmcgZGF0ZSA9IDA7CisJbG9uZyB0eiA9IDA7CisKKwlpZiAoaWRlbnQtPmRhdGVfYmVnaW4gJiYgaWRlbnQtPmRhdGVfZW5kKQorCQlkYXRlID0gc3RydG91bChpZGVudC0+ZGF0ZV9iZWdpbiwgTlVMTCwgMTApOworCWlmIChkYXRlX292ZXJmbG93cyhkYXRlKSkKKwkJZGF0ZSA9IDA7CisJZWxzZSB7CisJCWlmIChpZGVudC0+dHpfYmVnaW4gJiYgaWRlbnQtPnR6X2VuZCkKKwkJCXR6ID0gc3RydG9sKGlkZW50LT50el9iZWdpbiwgTlVMTCwgMTApOworCQlpZiAodHogPj0gSU5UX01BWCB8fCB0eiA8PSBJTlRfTUlOKQorCQkJdHogPSAwOworCX0KKwlyZXR1cm4gc2hvd19kYXRlKGRhdGUsIHR6LCBtb2RlKTsKK30KKwordm9pZCBwcF91c2VyX2luZm8oc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJICBjb25zdCBjaGFyICp3aGF0LCBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJICBjb25zdCBjaGFyICpsaW5lLCBjb25zdCBjaGFyICplbmNvZGluZykKK3sKKwlzdHJ1Y3QgaWRlbnRfc3BsaXQgaWRlbnQ7CisJY2hhciAqbGluZV9lbmQ7CisJY29uc3QgY2hhciAqbWFpbGJ1ZiwgKm5hbWVidWY7CisJc2l6ZV90IG5hbWVsZW4sIG1haWxsZW47CisJaW50IG1heF9sZW5ndGggPSA3ODsgLyogcGVyIHJmYzI4MjIgKi8KKworCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX09ORUxJTkUpCisJCXJldHVybjsKKworCWxpbmVfZW5kID0gc3RyY2hybnVsKGxpbmUsICdcbicpOworCWlmIChzcGxpdF9pZGVudF9saW5lKCZpZGVudCwgbGluZSwgbGluZV9lbmQgLSBsaW5lKSkKKwkJcmV0dXJuOworCisJbWFpbGJ1ZiA9IGlkZW50Lm1haWxfYmVnaW47CisJbWFpbGxlbiA9IGlkZW50Lm1haWxfZW5kIC0gaWRlbnQubWFpbF9iZWdpbjsKKwluYW1lYnVmID0gaWRlbnQubmFtZV9iZWdpbjsKKwluYW1lbGVuID0gaWRlbnQubmFtZV9lbmQgLSBpZGVudC5uYW1lX2JlZ2luOworCisJaWYgKHBwLT5tYWlsbWFwKQorCQltYXBfdXNlcihwcC0+bWFpbG1hcCwgJm1haWxidWYsICZtYWlsbGVuLCAmbmFtZWJ1ZiwgJm5hbWVsZW4pOworCisJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfRU1BSUwpIHsKKwkJaWYgKHBwLT5mcm9tX2lkZW50ICYmIGlkZW50X2NtcChwcC0+ZnJvbV9pZGVudCwgJmlkZW50KSkgeworCQkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiRnJvbTogIik7CisJCQlzdHJidWZfYWRkKCZidWYsIG5hbWVidWYsIG5hbWVsZW4pOworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCAiIDwiKTsKKwkJCXN0cmJ1Zl9hZGQoJmJ1ZiwgbWFpbGJ1ZiwgbWFpbGxlbik7CisJCQlzdHJidWZfYWRkc3RyKCZidWYsICI+XG4iKTsKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmcHAtPmluX2JvZHlfaGVhZGVycywKKwkJCQkJICAgc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKSk7CisKKwkJCW1haWxidWYgPSBwcC0+ZnJvbV9pZGVudC0+bWFpbF9iZWdpbjsKKwkJCW1haWxsZW4gPSBwcC0+ZnJvbV9pZGVudC0+bWFpbF9lbmQgLSBtYWlsYnVmOworCQkJbmFtZWJ1ZiA9IHBwLT5mcm9tX2lkZW50LT5uYW1lX2JlZ2luOworCQkJbmFtZWxlbiA9IHBwLT5mcm9tX2lkZW50LT5uYW1lX2VuZCAtIG5hbWVidWY7CisJCX0KKworCQlzdHJidWZfYWRkc3RyKHNiLCAiRnJvbTogIik7CisJCWlmIChuZWVkc19yZmMyMDQ3X2VuY29kaW5nKG5hbWVidWYsIG5hbWVsZW4sIFJGQzIwNDdfQUREUkVTUykpIHsKKwkJCWFkZF9yZmMyMDQ3KHNiLCBuYW1lYnVmLCBuYW1lbGVuLAorCQkJCSAgICBlbmNvZGluZywgUkZDMjA0N19BRERSRVNTKTsKKwkJCW1heF9sZW5ndGggPSA3NjsgLyogcGVyIHJmYzIwNDcgKi8KKwkJfSBlbHNlIGlmIChuZWVkc19yZmM4MjJfcXVvdGluZyhuYW1lYnVmLCBuYW1lbGVuKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBxdW90ZWQgPSBTVFJCVUZfSU5JVDsKKwkJCWFkZF9yZmM4MjJfcXVvdGVkKCZxdW90ZWQsIG5hbWVidWYsIG5hbWVsZW4pOworCQkJc3RyYnVmX2FkZF93cmFwcGVkX2J5dGVzKHNiLCBxdW90ZWQuYnVmLCBxdW90ZWQubGVuLAorCQkJCQkJCS02LCAxLCBtYXhfbGVuZ3RoKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZxdW90ZWQpOworCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZF93cmFwcGVkX2J5dGVzKHNiLCBuYW1lYnVmLCBuYW1lbGVuLAorCQkJCQkJIC02LCAxLCBtYXhfbGVuZ3RoKTsKKwkJfQorCisJCWlmIChtYXhfbGVuZ3RoIDwKKwkJICAgIGxhc3RfbGluZV9sZW5ndGgoc2IpICsgc3RybGVuKCIgPCIpICsgbWFpbGxlbiArIHN0cmxlbigiPiIpKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKwkJc3RyYnVmX2FkZGYoc2IsICIgPCUuKnM+XG4iLCAoaW50KW1haWxsZW4sIG1haWxidWYpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRmKHNiLCAiJXM6ICUuKnMlLipzIDwlLipzPlxuIiwgd2hhdCwKKwkJCSAgICAocHAtPmZtdCA9PSBDTUlUX0ZNVF9GVUxMRVIpID8gNCA6IDAsICIgICAgIiwKKwkJCSAgICAoaW50KW5hbWVsZW4sIG5hbWVidWYsIChpbnQpbWFpbGxlbiwgbWFpbGJ1Zik7CisJfQorCisJc3dpdGNoIChwcC0+Zm10KSB7CisJY2FzZSBDTUlUX0ZNVF9NRURJVU06CisJCXN0cmJ1Zl9hZGRmKHNiLCAiRGF0ZTogICAlc1xuIiwKKwkJCSAgICBzaG93X2lkZW50X2RhdGUoJmlkZW50LCAmcHAtPmRhdGVfbW9kZSkpOworCQlicmVhazsKKwljYXNlIENNSVRfRk1UX0VNQUlMOgorCQlzdHJidWZfYWRkZihzYiwgIkRhdGU6ICVzXG4iLAorCQkJICAgIHNob3dfaWRlbnRfZGF0ZSgmaWRlbnQsIERBVEVfTU9ERShSRkMyODIyKSkpOworCQlicmVhazsKKwljYXNlIENNSVRfRk1UX0ZVTExFUjoKKwkJc3RyYnVmX2FkZGYoc2IsICIlc0RhdGU6ICVzXG4iLCB3aGF0LAorCQkJICAgIHNob3dfaWRlbnRfZGF0ZSgmaWRlbnQsICZwcC0+ZGF0ZV9tb2RlKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIG5vdGluJyAqLworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgaXNfZW1wdHlfbGluZShjb25zdCBjaGFyICpsaW5lLCBpbnQgKmxlbl9wKQoreworCWludCBsZW4gPSAqbGVuX3A7CisJd2hpbGUgKGxlbiAmJiBpc3NwYWNlKGxpbmVbbGVuIC0gMV0pKQorCQlsZW4tLTsKKwkqbGVuX3AgPSBsZW47CisJcmV0dXJuICFsZW47Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpza2lwX2VtcHR5X2xpbmVzKGNvbnN0IGNoYXIgKm1zZykKK3sKKwlmb3IgKDs7KSB7CisJCWludCBsaW5lbGVuID0gZ2V0X29uZV9saW5lKG1zZyk7CisJCWludCBsbCA9IGxpbmVsZW47CisJCWlmICghbGluZWxlbikKKwkJCWJyZWFrOworCQlpZiAoIWlzX2VtcHR5X2xpbmUobXNnLCAmbGwpKQorCQkJYnJlYWs7CisJCW1zZyArPSBsaW5lbGVuOworCX0KKwlyZXR1cm4gbXNnOworfQorCitzdGF0aWMgdm9pZCBhZGRfbWVyZ2VfaW5mbyhjb25zdCBzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsKKworCWlmICgocHAtPmZtdCA9PSBDTUlUX0ZNVF9PTkVMSU5FKSB8fCAocHAtPmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCkgfHwKKwkgICAgIXBhcmVudCB8fCAhcGFyZW50LT5uZXh0KQorCQlyZXR1cm47CisKKwlzdHJidWZfYWRkc3RyKHNiLCAiTWVyZ2U6Iik7CisKKwl3aGlsZSAocGFyZW50KSB7CisJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnQtPml0ZW07CisJCWNvbnN0IGNoYXIgKmhleCA9IE5VTEw7CisJCWlmIChwcC0+YWJicmV2KQorCQkJaGV4ID0gZmluZF91bmlxdWVfYWJicmV2KHAtPm9iamVjdC5zaGExLCBwcC0+YWJicmV2KTsKKwkJaWYgKCFoZXgpCisJCQloZXggPSBzaGExX3RvX2hleChwLT5vYmplY3Quc2hhMSk7CisJCXBhcmVudCA9IHBhcmVudC0+bmV4dDsKKworCQlzdHJidWZfYWRkZihzYiwgIiAlcyIsIGhleCk7CisJfQorCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRfaGVhZGVyKGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqa2V5KQoreworCXNpemVfdCBsZW47CisJY29uc3QgY2hhciAqdiA9IGZpbmRfY29tbWl0X2hlYWRlcihtc2csIGtleSwgJmxlbik7CisJcmV0dXJuIHYgPyB4bWVtZHVweih2LCBsZW4pIDogTlVMTDsKK30KKworc3RhdGljIGNoYXIgKnJlcGxhY2VfZW5jb2RpbmdfaGVhZGVyKGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisJc3RydWN0IHN0cmJ1ZiB0bXAgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3Qgc3RhcnQsIGxlbjsKKwljaGFyICpjcCA9IGJ1ZjsKKworCS8qIGd1ZXNzIGlmIHRoZXJlIGlzIGFuIGVuY29kaW5nIGhlYWRlciBiZWZvcmUgYSBcblxuICovCisJd2hpbGUgKCFzdGFydHNfd2l0aChjcCwgImVuY29kaW5nICIpKSB7CisJCWNwID0gc3RyY2hyKGNwLCAnXG4nKTsKKwkJaWYgKCFjcCB8fCAqKytjcCA9PSAnXG4nKQorCQkJcmV0dXJuIGJ1ZjsKKwl9CisJc3RhcnQgPSBjcCAtIGJ1ZjsKKwljcCA9IHN0cmNocihjcCwgJ1xuJyk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIGJ1ZjsgLyogc2hvdWxkIG5vdCBoYXBwZW4gYnV0IGJlIGRlZmVuc2l2ZSAqLworCWxlbiA9IGNwICsgMSAtIChidWYgKyBzdGFydCk7CisKKwlzdHJidWZfYXR0YWNoKCZ0bXAsIGJ1Ziwgc3RybGVuKGJ1ZiksIHN0cmxlbihidWYpICsgMSk7CisJaWYgKGlzX2VuY29kaW5nX3V0ZjgoZW5jb2RpbmcpKSB7CisJCS8qIHdlIGhhdmUgcmUtY29kZWQgdG8gVVRGLTg7IGRyb3AgdGhlIGhlYWRlciAqLworCQlzdHJidWZfcmVtb3ZlKCZ0bXAsIHN0YXJ0LCBsZW4pOworCX0gZWxzZSB7CisJCS8qIGp1c3QgcmVwbGFjZXMgWFhYWCBpbiAnZW5jb2RpbmcgWFhYWFxuJyAqLworCQlzdHJidWZfc3BsaWNlKCZ0bXAsIHN0YXJ0ICsgc3RybGVuKCJlbmNvZGluZyAiKSwKKwkJCQkJICBsZW4gLSBzdHJsZW4oImVuY29kaW5nIFxuIiksCisJCQkJCSAgZW5jb2RpbmcsIHN0cmxlbihlbmNvZGluZykpOworCX0KKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmdG1wLCBOVUxMKTsKK30KKworY29uc3QgY2hhciAqbG9nbXNnX3JlZW5jb2RlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgICBjaGFyICoqY29tbWl0X2VuY29kaW5nLAorCQkJICAgIGNvbnN0IGNoYXIgKm91dHB1dF9lbmNvZGluZykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqdXRmOCA9ICJVVEYtOCI7CisJY29uc3QgY2hhciAqdXNlX2VuY29kaW5nOworCWNoYXIgKmVuY29kaW5nOworCWNvbnN0IGNoYXIgKm1zZyA9IGdldF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCk7CisJY2hhciAqb3V0OworCisJaWYgKCFvdXRwdXRfZW5jb2RpbmcgfHwgISpvdXRwdXRfZW5jb2RpbmcpIHsKKwkJaWYgKGNvbW1pdF9lbmNvZGluZykKKwkJCSpjb21taXRfZW5jb2RpbmcgPSBnZXRfaGVhZGVyKG1zZywgImVuY29kaW5nIik7CisJCXJldHVybiBtc2c7CisJfQorCWVuY29kaW5nID0gZ2V0X2hlYWRlcihtc2csICJlbmNvZGluZyIpOworCWlmIChjb21taXRfZW5jb2RpbmcpCisJCSpjb21taXRfZW5jb2RpbmcgPSBlbmNvZGluZzsKKwl1c2VfZW5jb2RpbmcgPSBlbmNvZGluZyA/IGVuY29kaW5nIDogdXRmODsKKwlpZiAoc2FtZV9lbmNvZGluZyh1c2VfZW5jb2RpbmcsIG91dHB1dF9lbmNvZGluZykpIHsKKwkJLyoKKwkJICogTm8gZW5jb2Rpbmcgd29yayB0byBiZSBkb25lLiBJZiB3ZSBoYXZlIG5vIGVuY29kaW5nIGhlYWRlcgorCQkgKiBhdCBhbGwsIHRoZW4gdGhlcmUncyBub3RoaW5nIHRvIGRvLCBhbmQgd2UgY2FuIHJldHVybiB0aGUKKwkJICogbWVzc2FnZSB2ZXJiYXRpbSAod2hldGhlciBuZXdseSBhbGxvY2F0ZWQgb3Igbm90KS4KKwkJICovCisJCWlmICghZW5jb2RpbmcpCisJCQlyZXR1cm4gbXNnOworCisJCS8qCisJCSAqIE90aGVyd2lzZSwgd2Ugc3RpbGwgd2FudCB0byBtdW5nZSB0aGUgZW5jb2RpbmcgaGVhZGVyIGluIHRoZQorCQkgKiByZXN1bHQsIHdoaWNoIHdpbGwgYmUgZG9uZSBieSBtb2RpZnlpbmcgdGhlIGJ1ZmZlci4gSWYgd2UKKwkJICogYXJlIHVzaW5nIGEgZnJlc2ggY29weSwgd2UgY2FuIHJldXNlIGl0LiBCdXQgaWYgd2UgYXJlIHVzaW5nCisJCSAqIHRoZSBjYWNoZWQgY29weSBmcm9tIGdldF9jb21taXRfYnVmZmVyLCB3ZSBuZWVkIHRvIGR1cGxpY2F0ZSBpdAorCQkgKiB0byBhdm9pZCBtdW5naW5nIHRoZSBjYWNoZWQgY29weS4KKwkJICovCisJCWlmIChtc2cgPT0gZ2V0X2NhY2hlZF9jb21taXRfYnVmZmVyKGNvbW1pdCwgTlVMTCkpCisJCQlvdXQgPSB4c3RyZHVwKG1zZyk7CisJCWVsc2UKKwkJCW91dCA9IChjaGFyICopbXNnOworCX0KKwllbHNlIHsKKwkJLyoKKwkJICogVGhlcmUncyBhY3R1YWwgZW5jb2Rpbmcgd29yayB0byBkby4gRG8gdGhlIHJlZW5jb2RpbmcsIHdoaWNoCisJCSAqIHN0aWxsIGxlYXZlcyB0aGUgaGVhZGVyIHRvIGJlIHJlcGxhY2VkIGluIHRoZSBuZXh0IHN0ZXAuIEF0CisJCSAqIHRoaXMgcG9pbnQsIHdlIGFyZSBkb25lIHdpdGggbXNnLiBJZiB3ZSBhbGxvY2F0ZWQgYSBmcmVzaAorCQkgKiBjb3B5LCB3ZSBjYW4gZnJlZSBpdC4KKwkJICovCisJCW91dCA9IHJlZW5jb2RlX3N0cmluZyhtc2csIG91dHB1dF9lbmNvZGluZywgdXNlX2VuY29kaW5nKTsKKwkJaWYgKG91dCkKKwkJCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBtc2cpOworCX0KKworCS8qCisJICogVGhpcyByZXBsYWNlbWVudCBhY3R1YWxseSBjb25zdW1lcyB0aGUgYnVmZmVyIHdlIGhhbmQgaXQsIHNvIHdlIGRvCisJICogbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgZnJlZWluZyB0aGUgb2xkICJvdXQiIGhlcmUuCisJICovCisJaWYgKG91dCkKKwkJb3V0ID0gcmVwbGFjZV9lbmNvZGluZ19oZWFkZXIob3V0LCBvdXRwdXRfZW5jb2RpbmcpOworCisJaWYgKCFjb21taXRfZW5jb2RpbmcpCisJCWZyZWUoZW5jb2RpbmcpOworCS8qCisJICogSWYgdGhlIHJlLWVuY29kaW5nIGZhaWxlZCwgb3V0IG1pZ2h0IGJlIE5VTEwgaGVyZTsgaW4gdGhhdAorCSAqIGNhc2Ugd2UganVzdCByZXR1cm4gdGhlIGNvbW1pdCBtZXNzYWdlIHZlcmJhdGltLgorCSAqLworCXJldHVybiBvdXQgPyBvdXQgOiBtc2c7Cit9CisKK3N0YXRpYyBpbnQgbWFpbG1hcF9uYW1lKGNvbnN0IGNoYXIgKiplbWFpbCwgc2l6ZV90ICplbWFpbF9sZW4sCisJCQljb25zdCBjaGFyICoqbmFtZSwgc2l6ZV90ICpuYW1lX2xlbikKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0ICptYWlsX21hcDsKKwlpZiAoIW1haWxfbWFwKSB7CisJCW1haWxfbWFwID0geGNhbGxvYygxLCBzaXplb2YoKm1haWxfbWFwKSk7CisJCXJlYWRfbWFpbG1hcChtYWlsX21hcCwgTlVMTCk7CisJfQorCXJldHVybiBtYWlsX21hcC0+bnIgJiYgbWFwX3VzZXIobWFpbF9tYXAsIGVtYWlsLCBlbWFpbF9sZW4sIG5hbWUsIG5hbWVfbGVuKTsKK30KKworc3RhdGljIHNpemVfdCBmb3JtYXRfcGVyc29uX3BhcnQoc3RydWN0IHN0cmJ1ZiAqc2IsIGNoYXIgcGFydCwKKwkJCQkgY29uc3QgY2hhciAqbXNnLCBpbnQgbGVuLAorCQkJCSBjb25zdCBzdHJ1Y3QgZGF0ZV9tb2RlICpkbW9kZSkKK3sKKwkvKiBjdXJyZW50bHkgYWxsIHBsYWNlaG9sZGVycyBoYXZlIHNhbWUgbGVuZ3RoICovCisJY29uc3QgaW50IHBsYWNlaG9sZGVyX2xlbiA9IDI7CisJc3RydWN0IGlkZW50X3NwbGl0IHM7CisJY29uc3QgY2hhciAqbmFtZSwgKm1haWw7CisJc2l6ZV90IG1haWxsZW4sIG5hbWVsZW47CisKKwlpZiAoc3BsaXRfaWRlbnRfbGluZSgmcywgbXNnLCBsZW4pIDwgMCkKKwkJZ290byBza2lwOworCisJbmFtZSA9IHMubmFtZV9iZWdpbjsKKwluYW1lbGVuID0gcy5uYW1lX2VuZCAtIHMubmFtZV9iZWdpbjsKKwltYWlsID0gcy5tYWlsX2JlZ2luOworCW1haWxsZW4gPSBzLm1haWxfZW5kIC0gcy5tYWlsX2JlZ2luOworCisJaWYgKHBhcnQgPT0gJ04nIHx8IHBhcnQgPT0gJ0UnKSAvKiBtYWlsbWFwIGxvb2t1cCAqLworCQltYWlsbWFwX25hbWUoJm1haWwsICZtYWlsbGVuLCAmbmFtZSwgJm5hbWVsZW4pOworCWlmIChwYXJ0ID09ICduJyB8fCBwYXJ0ID09ICdOJykgewkvKiBuYW1lICovCisJCXN0cmJ1Zl9hZGQoc2IsIG5hbWUsIG5hbWVsZW4pOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCX0KKwlpZiAocGFydCA9PSAnZScgfHwgcGFydCA9PSAnRScpIHsJLyogZW1haWwgKi8KKwkJc3RyYnVmX2FkZChzYiwgbWFpbCwgbWFpbGxlbik7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CisJfQorCisJaWYgKCFzLmRhdGVfYmVnaW4pCisJCWdvdG8gc2tpcDsKKworCWlmIChwYXJ0ID09ICd0JykgewkvKiBkYXRlLCBVTklYIHRpbWVzdGFtcCAqLworCQlzdHJidWZfYWRkKHNiLCBzLmRhdGVfYmVnaW4sIHMuZGF0ZV9lbmQgLSBzLmRhdGVfYmVnaW4pOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCX0KKworCXN3aXRjaCAocGFydCkgeworCWNhc2UgJ2QnOgkvKiBkYXRlICovCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHNob3dfaWRlbnRfZGF0ZSgmcywgZG1vZGUpKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwljYXNlICdEJzoJLyogZGF0ZSwgUkZDMjgyMiBzdHlsZSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2lkZW50X2RhdGUoJnMsIERBVEVfTU9ERShSRkMyODIyKSkpOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCWNhc2UgJ3InOgkvKiBkYXRlLCByZWxhdGl2ZSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2lkZW50X2RhdGUoJnMsIERBVEVfTU9ERShSRUxBVElWRSkpKTsKKwkJcmV0dXJuIHBsYWNlaG9sZGVyX2xlbjsKKwljYXNlICdpJzoJLyogZGF0ZSwgSVNPIDg2MDEtbGlrZSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBzaG93X2lkZW50X2RhdGUoJnMsIERBVEVfTU9ERShJU084NjAxKSkpOworCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCWNhc2UgJ0knOgkvKiBkYXRlLCBJU08gODYwMSBzdHJpY3QgKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hvd19pZGVudF9kYXRlKCZzLCBEQVRFX01PREUoSVNPODYwMV9TVFJJQ1QpKSk7CisJCXJldHVybiBwbGFjZWhvbGRlcl9sZW47CisJfQorCitza2lwOgorCS8qCisJICogcmVhZGluZyBmcm9tIGVpdGhlciBhIGJvZ3VzIGNvbW1pdCwgb3IgYSByZWZsb2cgZW50cnkgd2l0aAorCSAqICVnbiwgJWdlLCBldGMuOyAnc2InIGNhbm5vdCBiZSB1cGRhdGVkLCBidXQgd2Ugc3RpbGwgbmVlZAorCSAqIHRvIGNvbXB1dGUgYSB2YWxpZCByZXR1cm4gdmFsdWUuCisJICovCisJaWYgKHBhcnQgPT0gJ24nIHx8IHBhcnQgPT0gJ2UnIHx8IHBhcnQgPT0gJ3QnIHx8IHBhcnQgPT0gJ2QnCisJICAgIHx8IHBhcnQgPT0gJ0QnIHx8IHBhcnQgPT0gJ3InIHx8IHBhcnQgPT0gJ2knKQorCQlyZXR1cm4gcGxhY2Vob2xkZXJfbGVuOworCisJcmV0dXJuIDA7IC8qIHVua25vd24gcGxhY2Vob2xkZXIgKi8KK30KKworc3RydWN0IGNodW5rIHsKKwlzaXplX3Qgb2ZmOworCXNpemVfdCBsZW47Cit9OworCitlbnVtIGZsdXNoX3R5cGUgeworCW5vX2ZsdXNoLAorCWZsdXNoX3JpZ2h0LAorCWZsdXNoX2xlZnQsCisJZmx1c2hfbGVmdF9hbmRfc3RlYWwsCisJZmx1c2hfYm90aAorfTsKKworZW51bSB0cnVuY190eXBlIHsKKwl0cnVuY19ub25lLAorCXRydW5jX2xlZnQsCisJdHJ1bmNfbWlkZGxlLAorCXRydW5jX3JpZ2h0Cit9OworCitzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0IHsKKwljb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJY29uc3Qgc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcmV0dHlfY3R4OworCXVuc2lnbmVkIGNvbW1pdF9oZWFkZXJfcGFyc2VkOjE7CisJdW5zaWduZWQgY29tbWl0X21lc3NhZ2VfcGFyc2VkOjE7CisJc3RydWN0IHNpZ25hdHVyZV9jaGVjayBzaWduYXR1cmVfY2hlY2s7CisJZW51bSBmbHVzaF90eXBlIGZsdXNoX3R5cGU7CisJZW51bSB0cnVuY190eXBlIHRydW5jYXRlOworCWNvbnN0IGNoYXIgKm1lc3NhZ2U7CisJY2hhciAqY29tbWl0X2VuY29kaW5nOworCXNpemVfdCB3aWR0aCwgaW5kZW50MSwgaW5kZW50MjsKKwlpbnQgYXV0b19jb2xvcjsKKwlpbnQgcGFkZGluZzsKKworCS8qIFRoZXNlIG9mZnNldHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UuICovCisJc3RydWN0IGNodW5rIGF1dGhvcjsKKwlzdHJ1Y3QgY2h1bmsgY29tbWl0dGVyOworCXNpemVfdCBtZXNzYWdlX29mZjsKKwlzaXplX3Qgc3ViamVjdF9vZmY7CisJc2l6ZV90IGJvZHlfb2ZmOworCisJLyogVGhlIGZvbGxvd2luZyBvbmVzIGFyZSByZWxhdGl2ZSB0byB0aGUgcmVzdWx0IHN0cnVjdCBzdHJidWYuICovCisJc3RydWN0IGNodW5rIGFiYnJldl9jb21taXRfaGFzaDsKKwlzdHJ1Y3QgY2h1bmsgYWJicmV2X3RyZWVfaGFzaDsKKwlzdHJ1Y3QgY2h1bmsgYWJicmV2X3BhcmVudF9oYXNoZXM7CisJc2l6ZV90IHdyYXBfc3RhcnQ7Cit9OworCitzdGF0aWMgaW50IGFkZF9hZ2FpbihzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IGNodW5rICpjaHVuaykKK3sKKwlpZiAoY2h1bmstPmxlbikgeworCQlzdHJidWZfYWRkZHVwKHNiLCBjaHVuay0+b2ZmLCBjaHVuay0+bGVuKTsKKwkJcmV0dXJuIDE7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlbid0IHNlZW4gdGhpcyBjaHVuayBiZWZvcmUuICBPdXIgY2FsbGVyIGlzIHN1cmVseQorCSAqIGdvaW5nIHRvIGFkZCBpdCB0aGUgaGFyZCB3YXkgbm93LiAgUmVtZW1iZXIgdGhlIG1vc3QgbGlrZWx5CisJICogc3RhcnQgb2YgdGhlIHRvLWJlLWFkZGVkIGNodW5rOiB0aGUgY3VycmVudCBlbmQgb2YgdGhlCisJICogc3RydWN0IHN0cmJ1Zi4KKwkgKi8KKwljaHVuay0+b2ZmID0gc2ItPmxlbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfY29tbWl0X2hlYWRlcihzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0ICpjb250ZXh0KQoreworCWNvbnN0IGNoYXIgKm1zZyA9IGNvbnRleHQtPm1lc3NhZ2U7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBtc2dbaV07IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lOworCQlpbnQgZW9sOworCQlmb3IgKGVvbCA9IGk7IG1zZ1tlb2xdICYmIG1zZ1tlb2xdICE9ICdcbic7IGVvbCsrKQorCQkJOyAvKiBkbyBub3RoaW5nICovCisKKwkJaWYgKGkgPT0gZW9sKSB7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChtc2cgKyBpLCAiYXV0aG9yICIsICZuYW1lKSkgeworCQkJY29udGV4dC0+YXV0aG9yLm9mZiA9IG5hbWUgLSBtc2c7CisJCQljb250ZXh0LT5hdXRob3IubGVuID0gbXNnICsgZW9sIC0gbmFtZTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChtc2cgKyBpLCAiY29tbWl0dGVyICIsICZuYW1lKSkgeworCQkJY29udGV4dC0+Y29tbWl0dGVyLm9mZiA9IG5hbWUgLSBtc2c7CisJCQljb250ZXh0LT5jb21taXR0ZXIubGVuID0gbXNnICsgZW9sIC0gbmFtZTsKKwkJfQorCQlpID0gZW9sOworCX0KKwljb250ZXh0LT5tZXNzYWdlX29mZiA9IGk7CisJY29udGV4dC0+Y29tbWl0X2hlYWRlcl9wYXJzZWQgPSAxOworfQorCitzdGF0aWMgaW50IGlzdGl0bGVjaGFyKGNoYXIgYykKK3sKKwlyZXR1cm4gKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8CisJCShjID49ICcwJyAmJiBjIDw9ICc5JykgfHwgYyA9PSAnLicgfHwgYyA9PSAnXyc7Cit9CisKK3N0YXRpYyB2b2lkIGZvcm1hdF9zYW5pdGl6ZWRfc3ViamVjdChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqbXNnKQoreworCXNpemVfdCB0cmltbGVuOworCXNpemVfdCBzdGFydF9sZW4gPSBzYi0+bGVuOworCWludCBzcGFjZSA9IDI7CisKKwlmb3IgKDsgKm1zZyAmJiAqbXNnICE9ICdcbic7IG1zZysrKSB7CisJCWlmIChpc3RpdGxlY2hhcigqbXNnKSkgeworCQkJaWYgKHNwYWNlID09IDEpCisJCQkJc3RyYnVmX2FkZGNoKHNiLCAnLScpOworCQkJc3BhY2UgPSAwOworCQkJc3RyYnVmX2FkZGNoKHNiLCAqbXNnKTsKKwkJCWlmICgqbXNnID09ICcuJykKKwkJCQl3aGlsZSAoKihtc2crMSkgPT0gJy4nKQorCQkJCQltc2crKzsKKwkJfSBlbHNlCisJCQlzcGFjZSB8PSAxOworCX0KKworCS8qIHRyaW0gYW55IHRyYWlsaW5nICcuJyBvciAnLScgY2hhcmFjdGVycyAqLworCXRyaW1sZW4gPSAwOworCXdoaWxlIChzYi0+bGVuIC0gdHJpbWxlbiA+IHN0YXJ0X2xlbiAmJgorCQkoc2ItPmJ1ZltzYi0+bGVuIC0gMSAtIHRyaW1sZW5dID09ICcuJworCQl8fCBzYi0+YnVmW3NiLT5sZW4gLSAxIC0gdHJpbWxlbl0gPT0gJy0nKSkKKwkJdHJpbWxlbisrOworCXN0cmJ1Zl9yZW1vdmUoc2IsIHNiLT5sZW4gLSB0cmltbGVuLCB0cmltbGVuKTsKK30KKworY29uc3QgY2hhciAqZm9ybWF0X3N1YmplY3Qoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgIGNvbnN0IGNoYXIgKmxpbmVfc2VwYXJhdG9yKQoreworCWludCBmaXJzdCA9IDE7CisKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKmxpbmUgPSBtc2c7CisJCWludCBsaW5lbGVuID0gZ2V0X29uZV9saW5lKGxpbmUpOworCisJCW1zZyArPSBsaW5lbGVuOworCQlpZiAoIWxpbmVsZW4gfHwgaXNfZW1wdHlfbGluZShsaW5lLCAmbGluZWxlbikpCisJCQlicmVhazsKKworCQlpZiAoIXNiKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9ncm93KHNiLCBsaW5lbGVuICsgMik7CisJCWlmICghZmlyc3QpCisJCQlzdHJidWZfYWRkc3RyKHNiLCBsaW5lX3NlcGFyYXRvcik7CisJCXN0cmJ1Zl9hZGQoc2IsIGxpbmUsIGxpbmVsZW4pOworCQlmaXJzdCA9IDA7CisJfQorCXJldHVybiBtc2c7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NvbW1pdF9tZXNzYWdlKHN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmMpCit7CisJY29uc3QgY2hhciAqbXNnID0gYy0+bWVzc2FnZSArIGMtPm1lc3NhZ2Vfb2ZmOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gYy0+bWVzc2FnZTsKKworCW1zZyA9IHNraXBfZW1wdHlfbGluZXMobXNnKTsKKwljLT5zdWJqZWN0X29mZiA9IG1zZyAtIHN0YXJ0OworCisJbXNnID0gZm9ybWF0X3N1YmplY3QoTlVMTCwgbXNnLCBOVUxMKTsKKwltc2cgPSBza2lwX2VtcHR5X2xpbmVzKG1zZyk7CisJYy0+Ym9keV9vZmYgPSBtc2cgLSBzdGFydDsKKworCWMtPmNvbW1pdF9tZXNzYWdlX3BhcnNlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHN0cmJ1Zl93cmFwKHN0cnVjdCBzdHJidWYgKnNiLCBzaXplX3QgcG9zLAorCQkJc2l6ZV90IHdpZHRoLCBzaXplX3QgaW5kZW50MSwgc2l6ZV90IGluZGVudDIpCit7CisJc3RydWN0IHN0cmJ1ZiB0bXAgPSBTVFJCVUZfSU5JVDsKKworCWlmIChwb3MpCisJCXN0cmJ1Zl9hZGQoJnRtcCwgc2ItPmJ1ZiwgcG9zKTsKKwlzdHJidWZfYWRkX3dyYXBwZWRfdGV4dCgmdG1wLCBzYi0+YnVmICsgcG9zLAorCQkJCShpbnQpIGluZGVudDEsIChpbnQpIGluZGVudDIsIChpbnQpIHdpZHRoKTsKKwlzdHJidWZfc3dhcCgmdG1wLCBzYik7CisJc3RyYnVmX3JlbGVhc2UoJnRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIHJld3JhcF9tZXNzYWdlX3RhaWwoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCAqYywKKwkJCQlzaXplX3QgbmV3X3dpZHRoLCBzaXplX3QgbmV3X2luZGVudDEsCisJCQkJc2l6ZV90IG5ld19pbmRlbnQyKQoreworCWlmIChjLT53aWR0aCA9PSBuZXdfd2lkdGggJiYgYy0+aW5kZW50MSA9PSBuZXdfaW5kZW50MSAmJgorCSAgICBjLT5pbmRlbnQyID09IG5ld19pbmRlbnQyKQorCQlyZXR1cm47CisJaWYgKGMtPndyYXBfc3RhcnQgPCBzYi0+bGVuKQorCQlzdHJidWZfd3JhcChzYiwgYy0+d3JhcF9zdGFydCwgYy0+d2lkdGgsIGMtPmluZGVudDEsIGMtPmluZGVudDIpOworCWMtPndyYXBfc3RhcnQgPSBzYi0+bGVuOworCWMtPndpZHRoID0gbmV3X3dpZHRoOworCWMtPmluZGVudDEgPSBuZXdfaW5kZW50MTsKKwljLT5pbmRlbnQyID0gbmV3X2luZGVudDI7Cit9CisKK3N0YXRpYyBpbnQgZm9ybWF0X3JlZmxvZ19wZXJzb24oc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJY2hhciBwYXJ0LAorCQkJCXN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpsb2csCisJCQkJY29uc3Qgc3RydWN0IGRhdGVfbW9kZSAqZG1vZGUpCit7CisJY29uc3QgY2hhciAqaWRlbnQ7CisKKwlpZiAoIWxvZykKKwkJcmV0dXJuIDI7CisKKwlpZGVudCA9IGdldF9yZWZsb2dfaWRlbnQobG9nKTsKKwlpZiAoIWlkZW50KQorCQlyZXR1cm4gMjsKKworCXJldHVybiBmb3JtYXRfcGVyc29uX3BhcnQoc2IsIHBhcnQsIGlkZW50LCBzdHJsZW4oaWRlbnQpLCBkbW9kZSk7Cit9CisKK3N0YXRpYyBzaXplX3QgcGFyc2VfY29sb3Ioc3RydWN0IHN0cmJ1ZiAqc2IsIC8qIGluIFVURi04ICovCisJCQkgIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJICBzdHJ1Y3QgZm9ybWF0X2NvbW1pdF9jb250ZXh0ICpjKQoreworCWNvbnN0IGNoYXIgKnJlc3QgPSBwbGFjZWhvbGRlcjsKKworCWlmIChwbGFjZWhvbGRlclsxXSA9PSAnKCcpIHsKKwkJY29uc3QgY2hhciAqYmVnaW4gPSBwbGFjZWhvbGRlciArIDI7CisJCWNvbnN0IGNoYXIgKmVuZCA9IHN0cmNocihiZWdpbiwgJyknKTsKKwkJY2hhciBjb2xvcltDT0xPUl9NQVhMRU5dOworCisJCWlmICghZW5kKQorCQkJcmV0dXJuIDA7CisJCWlmIChza2lwX3ByZWZpeChiZWdpbiwgImF1dG8sIiwgJmJlZ2luKSkgeworCQkJaWYgKCF3YW50X2NvbG9yKGMtPnByZXR0eV9jdHgtPmNvbG9yKSkKKwkJCQlyZXR1cm4gZW5kIC0gcGxhY2Vob2xkZXIgKyAxOworCQl9CisJCWlmIChjb2xvcl9wYXJzZV9tZW0oYmVnaW4sIGVuZCAtIGJlZ2luLCBjb2xvcikgPCAwKQorCQkJZGllKF8oInVuYWJsZSB0byBwYXJzZSAtLXByZXR0eSBmb3JtYXQiKSk7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGNvbG9yKTsKKwkJcmV0dXJuIGVuZCAtIHBsYWNlaG9sZGVyICsgMTsKKwl9CisJaWYgKHNraXBfcHJlZml4KHBsYWNlaG9sZGVyICsgMSwgInJlZCIsICZyZXN0KSkKKwkJc3RyYnVmX2FkZHN0cihzYiwgR0lUX0NPTE9SX1JFRCk7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgocGxhY2Vob2xkZXIgKyAxLCAiZ3JlZW4iLCAmcmVzdCkpCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIEdJVF9DT0xPUl9HUkVFTik7CisJZWxzZSBpZiAoc2tpcF9wcmVmaXgocGxhY2Vob2xkZXIgKyAxLCAiYmx1ZSIsICZyZXN0KSkKKwkJc3RyYnVmX2FkZHN0cihzYiwgR0lUX0NPTE9SX0JMVUUpOworCWVsc2UgaWYgKHNraXBfcHJlZml4KHBsYWNlaG9sZGVyICsgMSwgInJlc2V0IiwgJnJlc3QpKQorCQlzdHJidWZfYWRkc3RyKHNiLCBHSVRfQ09MT1JfUkVTRVQpOworCXJldHVybiByZXN0IC0gcGxhY2Vob2xkZXI7Cit9CisKK3N0YXRpYyBzaXplX3QgcGFyc2VfcGFkZGluZ19wbGFjZWhvbGRlcihzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCQkJY29uc3QgY2hhciAqcGxhY2Vob2xkZXIsCisJCQkJCXN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmMpCit7CisJY29uc3QgY2hhciAqY2ggPSBwbGFjZWhvbGRlcjsKKwllbnVtIGZsdXNoX3R5cGUgZmx1c2hfdHlwZTsKKwlpbnQgdG9fY29sdW1uID0gMDsKKworCXN3aXRjaCAoKmNoKyspIHsKKwljYXNlICc8JzoKKwkJZmx1c2hfdHlwZSA9IGZsdXNoX3JpZ2h0OworCQlicmVhazsKKwljYXNlICc+JzoKKwkJaWYgKCpjaCA9PSAnPCcpIHsKKwkJCWZsdXNoX3R5cGUgPSBmbHVzaF9ib3RoOworCQkJY2grKzsKKwkJfSBlbHNlIGlmICgqY2ggPT0gJz4nKSB7CisJCQlmbHVzaF90eXBlID0gZmx1c2hfbGVmdF9hbmRfc3RlYWw7CisJCQljaCsrOworCQl9IGVsc2UKKwkJCWZsdXNoX3R5cGUgPSBmbHVzaF9sZWZ0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwkvKiB0aGUgbmV4dCB2YWx1ZSBtZWFucyAid2lkZSBlbm91Z2ggdG8gdGhhdCBjb2x1bW4iICovCisJaWYgKCpjaCA9PSAnfCcpIHsKKwkJdG9fY29sdW1uID0gMTsKKwkJY2grKzsKKwl9CisKKwlpZiAoKmNoID09ICcoJykgeworCQljb25zdCBjaGFyICpzdGFydCA9IGNoICsgMTsKKwkJY29uc3QgY2hhciAqZW5kID0gc3RhcnQgKyBzdHJjc3BuKHN0YXJ0LCAiLCkiKTsKKwkJY2hhciAqbmV4dDsKKwkJaW50IHdpZHRoOworCQlpZiAoIWVuZCB8fCBlbmQgPT0gc3RhcnQpCisJCQlyZXR1cm4gMDsKKwkJd2lkdGggPSBzdHJ0b3VsKHN0YXJ0LCAmbmV4dCwgMTApOworCQlpZiAobmV4dCA9PSBzdGFydCB8fCB3aWR0aCA9PSAwKQorCQkJcmV0dXJuIDA7CisJCWMtPnBhZGRpbmcgPSB0b19jb2x1bW4gPyAtd2lkdGggOiB3aWR0aDsKKwkJYy0+Zmx1c2hfdHlwZSA9IGZsdXNoX3R5cGU7CisKKwkJaWYgKCplbmQgPT0gJywnKSB7CisJCQlzdGFydCA9IGVuZCArIDE7CisJCQllbmQgPSBzdHJjaHIoc3RhcnQsICcpJyk7CisJCQlpZiAoIWVuZCB8fCBlbmQgPT0gc3RhcnQpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAoc3RhcnRzX3dpdGgoc3RhcnQsICJ0cnVuYykiKSkKKwkJCQljLT50cnVuY2F0ZSA9IHRydW5jX3JpZ2h0OworCQkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc3RhcnQsICJsdHJ1bmMpIikpCisJCQkJYy0+dHJ1bmNhdGUgPSB0cnVuY19sZWZ0OworCQkJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc3RhcnQsICJtdHJ1bmMpIikpCisJCQkJYy0+dHJ1bmNhdGUgPSB0cnVuY19taWRkbGU7CisJCQllbHNlCisJCQkJcmV0dXJuIDA7CisJCX0gZWxzZQorCQkJYy0+dHJ1bmNhdGUgPSB0cnVuY19ub25lOworCisJCXJldHVybiBlbmQgLSBwbGFjZWhvbGRlciArIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90IGZvcm1hdF9jb21taXRfb25lKHN0cnVjdCBzdHJidWYgKnNiLCAvKiBpbiBVVEYtOCAqLworCQkJCWNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJCXZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCAqYyA9IGNvbnRleHQ7CisJY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gYy0+Y29tbWl0OworCWNvbnN0IGNoYXIgKm1zZyA9IGMtPm1lc3NhZ2U7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWludCBoMSwgaDI7CisKKwkvKiB0aGVzZSBhcmUgaW5kZXBlbmRlbnQgb2YgdGhlIGNvbW1pdCAqLworCXN3aXRjaCAocGxhY2Vob2xkZXJbMF0pIHsKKwljYXNlICdDJzoKKwkJaWYgKHN0YXJ0c193aXRoKHBsYWNlaG9sZGVyICsgMSwgIihhdXRvKSIpKSB7CisJCQljLT5hdXRvX2NvbG9yID0gMTsKKwkJCXJldHVybiA3OyAvKiBjb25zdW1lZCA3IGJ5dGVzLCAiQyhhdXRvKSIgKi8KKwkJfSBlbHNlIHsKKwkJCWludCByZXQgPSBwYXJzZV9jb2xvcihzYiwgcGxhY2Vob2xkZXIsIGMpOworCQkJaWYgKHJldCkKKwkJCQljLT5hdXRvX2NvbG9yID0gMDsKKwkJCS8qCisJCQkgKiBPdGhlcndpc2UsIHdlIGRlY2lkZWQgdG8gdHJlYXQgJUM8dW5rbm93bj4KKwkJCSAqIGFzIGEgbGl0ZXJhbCBzdHJpbmcsIGFuZCB0aGUgcHJldmlvdXMKKwkJCSAqICVDKGF1dG8pIGlzIHN0aWxsIHZhbGlkLgorCQkJICovCisJCQlyZXR1cm4gcmV0OworCQl9CisJY2FzZSAnbic6CQkvKiBuZXdsaW5lICovCisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisJCXJldHVybiAxOworCWNhc2UgJ3gnOgorCQkvKiAleDAwID09IE5VTCwgJXgwYSA9PSBMRiwgZXRjLiAqLworCQlpZiAoMCA8PSAoaDEgPSBoZXh2YWxfdGFibGVbMHhmZiAmIHBsYWNlaG9sZGVyWzFdXSkgJiYKKwkJICAgIGgxIDw9IDE2ICYmCisJCSAgICAwIDw9IChoMiA9IGhleHZhbF90YWJsZVsweGZmICYgcGxhY2Vob2xkZXJbMl1dKSAmJgorCQkgICAgaDIgPD0gMTYpIHsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgKGgxPDw0KXxoMik7CisJCQlyZXR1cm4gMzsKKwkJfSBlbHNlCisJCQlyZXR1cm4gMDsKKwljYXNlICd3JzoKKwkJaWYgKHBsYWNlaG9sZGVyWzFdID09ICcoJykgeworCQkJdW5zaWduZWQgbG9uZyB3aWR0aCA9IDAsIGluZGVudDEgPSAwLCBpbmRlbnQyID0gMDsKKwkJCWNoYXIgKm5leHQ7CisJCQljb25zdCBjaGFyICpzdGFydCA9IHBsYWNlaG9sZGVyICsgMjsKKwkJCWNvbnN0IGNoYXIgKmVuZCA9IHN0cmNocihzdGFydCwgJyknKTsKKwkJCWlmICghZW5kKQorCQkJCXJldHVybiAwOworCQkJaWYgKGVuZCA+IHN0YXJ0KSB7CisJCQkJd2lkdGggPSBzdHJ0b3VsKHN0YXJ0LCAmbmV4dCwgMTApOworCQkJCWlmICgqbmV4dCA9PSAnLCcpIHsKKwkJCQkJaW5kZW50MSA9IHN0cnRvdWwobmV4dCArIDEsICZuZXh0LCAxMCk7CisJCQkJCWlmICgqbmV4dCA9PSAnLCcpIHsKKwkJCQkJCWluZGVudDIgPSBzdHJ0b3VsKG5leHQgKyAxLAorCQkJCQkJCQkgJm5leHQsIDEwKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoKm5leHQgIT0gJyknKQorCQkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJld3JhcF9tZXNzYWdlX3RhaWwoc2IsIGMsIHdpZHRoLCBpbmRlbnQxLCBpbmRlbnQyKTsKKwkJCXJldHVybiBlbmQgLSBwbGFjZWhvbGRlciArIDE7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisKKwljYXNlICc8JzoKKwljYXNlICc+JzoKKwkJcmV0dXJuIHBhcnNlX3BhZGRpbmdfcGxhY2Vob2xkZXIoc2IsIHBsYWNlaG9sZGVyLCBjKTsKKwl9CisKKwkvKiB0aGVzZSBkZXBlbmQgb24gdGhlIGNvbW1pdCAqLworCWlmICghY29tbWl0LT5vYmplY3QucGFyc2VkKQorCQlwYXJzZV9vYmplY3QoY29tbWl0LT5vYmplY3Quc2hhMSk7CisKKwlzd2l0Y2ggKHBsYWNlaG9sZGVyWzBdKSB7CisJY2FzZSAnSCc6CQkvKiBjb21taXQgaGFzaCAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBkaWZmX2dldF9jb2xvcihjLT5hdXRvX2NvbG9yLCBESUZGX0NPTU1JVCkpOworCQlzdHJidWZfYWRkc3RyKHNiLCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGRpZmZfZ2V0X2NvbG9yKGMtPmF1dG9fY29sb3IsIERJRkZfUkVTRVQpKTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnaCc6CQkvKiBhYmJyZXZpYXRlZCBjb21taXQgaGFzaCAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBkaWZmX2dldF9jb2xvcihjLT5hdXRvX2NvbG9yLCBESUZGX0NPTU1JVCkpOworCQlpZiAoYWRkX2FnYWluKHNiLCAmYy0+YWJicmV2X2NvbW1pdF9oYXNoKSkgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgZGlmZl9nZXRfY29sb3IoYy0+YXV0b19jb2xvciwgRElGRl9SRVNFVCkpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJc3RyYnVmX2FkZHN0cihzYiwgZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsCisJCQkJCQkgICAgIGMtPnByZXR0eV9jdHgtPmFiYnJldikpOworCQlzdHJidWZfYWRkc3RyKHNiLCBkaWZmX2dldF9jb2xvcihjLT5hdXRvX2NvbG9yLCBESUZGX1JFU0VUKSk7CisJCWMtPmFiYnJldl9jb21taXRfaGFzaC5sZW4gPSBzYi0+bGVuIC0gYy0+YWJicmV2X2NvbW1pdF9oYXNoLm9mZjsKKwkJcmV0dXJuIDE7CisJY2FzZSAnVCc6CQkvKiB0cmVlIGhhc2ggKi8KKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hhMV90b19oZXgoY29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSkpOworCQlyZXR1cm4gMTsKKwljYXNlICd0JzoJCS8qIGFiYnJldmlhdGVkIHRyZWUgaGFzaCAqLworCQlpZiAoYWRkX2FnYWluKHNiLCAmYy0+YWJicmV2X3RyZWVfaGFzaCkpCisJCQlyZXR1cm4gMTsKKwkJc3RyYnVmX2FkZHN0cihzYiwgZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+dHJlZS0+b2JqZWN0LnNoYTEsCisJCQkJCQkgICAgIGMtPnByZXR0eV9jdHgtPmFiYnJldikpOworCQljLT5hYmJyZXZfdHJlZV9oYXNoLmxlbiA9IHNiLT5sZW4gLSBjLT5hYmJyZXZfdHJlZV9oYXNoLm9mZjsKKwkJcmV0dXJuIDE7CisJY2FzZSAnUCc6CQkvKiBwYXJlbnQgaGFzaGVzICovCisJCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCWlmIChwICE9IGNvbW1pdC0+cGFyZW50cykKKwkJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBzaGExX3RvX2hleChwLT5pdGVtLT5vYmplY3Quc2hhMSkpOworCQl9CisJCXJldHVybiAxOworCWNhc2UgJ3AnOgkJLyogYWJicmV2aWF0ZWQgcGFyZW50IGhhc2hlcyAqLworCQlpZiAoYWRkX2FnYWluKHNiLCAmYy0+YWJicmV2X3BhcmVudF9oYXNoZXMpKQorCQkJcmV0dXJuIDE7CisJCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpIHsKKwkJCWlmIChwICE9IGNvbW1pdC0+cGFyZW50cykKKwkJCQlzdHJidWZfYWRkY2goc2IsICcgJyk7CisJCQlzdHJidWZfYWRkc3RyKHNiLCBmaW5kX3VuaXF1ZV9hYmJyZXYoCisJCQkJCXAtPml0ZW0tPm9iamVjdC5zaGExLAorCQkJCQljLT5wcmV0dHlfY3R4LT5hYmJyZXYpKTsKKwkJfQorCQljLT5hYmJyZXZfcGFyZW50X2hhc2hlcy5sZW4gPSBzYi0+bGVuIC0KKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+YWJicmV2X3BhcmVudF9oYXNoZXMub2ZmOworCQlyZXR1cm4gMTsKKwljYXNlICdtJzoJCS8qIGxlZnQvcmlnaHQvYm90dG9tICovCisJCXN0cmJ1Zl9hZGRzdHIoc2IsIGdldF9yZXZpc2lvbl9tYXJrKE5VTEwsIGNvbW1pdCkpOworCQlyZXR1cm4gMTsKKwljYXNlICdkJzoKKwkJbG9hZF9yZWZfZGVjb3JhdGlvbnMoREVDT1JBVEVfU0hPUlRfUkVGUyk7CisJCWZvcm1hdF9kZWNvcmF0aW9ucyhzYiwgY29tbWl0LCBjLT5hdXRvX2NvbG9yKTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnRCc6CisJCWxvYWRfcmVmX2RlY29yYXRpb25zKERFQ09SQVRFX1NIT1JUX1JFRlMpOworCQlmb3JtYXRfZGVjb3JhdGlvbnNfZXh0ZW5kZWQoc2IsIGNvbW1pdCwgYy0+YXV0b19jb2xvciwgIiIsICIsICIsICIiKTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnZyc6CQkvKiByZWZsb2cgaW5mbyAqLworCQlzd2l0Y2gocGxhY2Vob2xkZXJbMV0pIHsKKwkJY2FzZSAnZCc6CS8qIHJlZmxvZyBzZWxlY3RvciAqLworCQljYXNlICdEJzoKKwkJCWlmIChjLT5wcmV0dHlfY3R4LT5yZWZsb2dfaW5mbykKKwkJCQlnZXRfcmVmbG9nX3NlbGVjdG9yKHNiLAorCQkJCQkJICAgIGMtPnByZXR0eV9jdHgtPnJlZmxvZ19pbmZvLAorCQkJCQkJICAgICZjLT5wcmV0dHlfY3R4LT5kYXRlX21vZGUsCisJCQkJCQkgICAgYy0+cHJldHR5X2N0eC0+ZGF0ZV9tb2RlX2V4cGxpY2l0LAorCQkJCQkJICAgIChwbGFjZWhvbGRlclsxXSA9PSAnZCcpKTsKKwkJCXJldHVybiAyOworCQljYXNlICdzJzoJLyogcmVmbG9nIG1lc3NhZ2UgKi8KKwkJCWlmIChjLT5wcmV0dHlfY3R4LT5yZWZsb2dfaW5mbykKKwkJCQlnZXRfcmVmbG9nX21lc3NhZ2Uoc2IsIGMtPnByZXR0eV9jdHgtPnJlZmxvZ19pbmZvKTsKKwkJCXJldHVybiAyOworCQljYXNlICduJzoKKwkJY2FzZSAnTic6CisJCWNhc2UgJ2UnOgorCQljYXNlICdFJzoKKwkJCXJldHVybiBmb3JtYXRfcmVmbG9nX3BlcnNvbihzYiwKKwkJCQkJCSAgICBwbGFjZWhvbGRlclsxXSwKKwkJCQkJCSAgICBjLT5wcmV0dHlfY3R4LT5yZWZsb2dfaW5mbywKKwkJCQkJCSAgICAmYy0+cHJldHR5X2N0eC0+ZGF0ZV9tb2RlKTsKKwkJfQorCQlyZXR1cm4gMDsJLyogdW5rbm93biAlZyBwbGFjZWhvbGRlciAqLworCWNhc2UgJ04nOgorCQlpZiAoYy0+cHJldHR5X2N0eC0+bm90ZXNfbWVzc2FnZSkgeworCQkJc3RyYnVmX2FkZHN0cihzYiwgYy0+cHJldHR5X2N0eC0+bm90ZXNfbWVzc2FnZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocGxhY2Vob2xkZXJbMF0gPT0gJ0cnKSB7CisJCWlmICghYy0+c2lnbmF0dXJlX2NoZWNrLnJlc3VsdCkKKwkJCWNoZWNrX2NvbW1pdF9zaWduYXR1cmUoYy0+Y29tbWl0LCAmKGMtPnNpZ25hdHVyZV9jaGVjaykpOworCQlzd2l0Y2ggKHBsYWNlaG9sZGVyWzFdKSB7CisJCWNhc2UgJ0cnOgorCQkJaWYgKGMtPnNpZ25hdHVyZV9jaGVjay5ncGdfb3V0cHV0KQorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGMtPnNpZ25hdHVyZV9jaGVjay5ncGdfb3V0cHV0KTsKKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCXN3aXRjaCAoYy0+c2lnbmF0dXJlX2NoZWNrLnJlc3VsdCkgeworCQkJY2FzZSAnRyc6CisJCQljYXNlICdCJzoKKwkJCWNhc2UgJ1UnOgorCQkJY2FzZSAnTic6CisJCQkJc3RyYnVmX2FkZGNoKHNiLCBjLT5zaWduYXR1cmVfY2hlY2sucmVzdWx0KTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdTJzoKKwkJCWlmIChjLT5zaWduYXR1cmVfY2hlY2suc2lnbmVyKQorCQkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGMtPnNpZ25hdHVyZV9jaGVjay5zaWduZXIpOworCQkJYnJlYWs7CisJCWNhc2UgJ0snOgorCQkJaWYgKGMtPnNpZ25hdHVyZV9jaGVjay5rZXkpCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgYy0+c2lnbmF0dXJlX2NoZWNrLmtleSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJCXJldHVybiAyOworCX0KKworCisJLyogRm9yIHRoZSByZXN0IHdlIGhhdmUgdG8gcGFyc2UgdGhlIGNvbW1pdCBoZWFkZXIuICovCisJaWYgKCFjLT5jb21taXRfaGVhZGVyX3BhcnNlZCkKKwkJcGFyc2VfY29tbWl0X2hlYWRlcihjKTsKKworCXN3aXRjaCAocGxhY2Vob2xkZXJbMF0pIHsKKwljYXNlICdhJzoJLyogYXV0aG9yIC4uLiAqLworCQlyZXR1cm4gZm9ybWF0X3BlcnNvbl9wYXJ0KHNiLCBwbGFjZWhvbGRlclsxXSwKKwkJCQkgICBtc2cgKyBjLT5hdXRob3Iub2ZmLCBjLT5hdXRob3IubGVuLAorCQkJCSAgICZjLT5wcmV0dHlfY3R4LT5kYXRlX21vZGUpOworCWNhc2UgJ2MnOgkvKiBjb21taXR0ZXIgLi4uICovCisJCXJldHVybiBmb3JtYXRfcGVyc29uX3BhcnQoc2IsIHBsYWNlaG9sZGVyWzFdLAorCQkJCSAgIG1zZyArIGMtPmNvbW1pdHRlci5vZmYsIGMtPmNvbW1pdHRlci5sZW4sCisJCQkJICAgJmMtPnByZXR0eV9jdHgtPmRhdGVfbW9kZSk7CisJY2FzZSAnZSc6CS8qIGVuY29kaW5nICovCisJCWlmIChjLT5jb21taXRfZW5jb2RpbmcpCisJCQlzdHJidWZfYWRkc3RyKHNiLCBjLT5jb21taXRfZW5jb2RpbmcpOworCQlyZXR1cm4gMTsKKwljYXNlICdCJzoJLyogcmF3IGJvZHkgKi8KKwkJLyogbWVzc2FnZV9vZmYgaXMgYWx3YXlzIGxlZnQgYXQgdGhlIGluaXRpYWwgbmV3bGluZSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBtc2cgKyBjLT5tZXNzYWdlX29mZiArIDEpOworCQlyZXR1cm4gMTsKKwl9CisKKwkvKiBOb3cgd2UgbmVlZCB0byBwYXJzZSB0aGUgY29tbWl0IG1lc3NhZ2UuICovCisJaWYgKCFjLT5jb21taXRfbWVzc2FnZV9wYXJzZWQpCisJCXBhcnNlX2NvbW1pdF9tZXNzYWdlKGMpOworCisJc3dpdGNoIChwbGFjZWhvbGRlclswXSkgeworCWNhc2UgJ3MnOgkvKiBzdWJqZWN0ICovCisJCWZvcm1hdF9zdWJqZWN0KHNiLCBtc2cgKyBjLT5zdWJqZWN0X29mZiwgIiAiKTsKKwkJcmV0dXJuIDE7CisJY2FzZSAnZic6CS8qIHNhbml0aXplZCBzdWJqZWN0ICovCisJCWZvcm1hdF9zYW5pdGl6ZWRfc3ViamVjdChzYiwgbXNnICsgYy0+c3ViamVjdF9vZmYpOworCQlyZXR1cm4gMTsKKwljYXNlICdiJzoJLyogYm9keSAqLworCQlzdHJidWZfYWRkc3RyKHNiLCBtc2cgKyBjLT5ib2R5X29mZik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsJLyogdW5rbm93biBwbGFjZWhvbGRlciAqLworfQorCitzdGF0aWMgc2l6ZV90IGZvcm1hdF9hbmRfcGFkX2NvbW1pdChzdHJ1Y3Qgc3RyYnVmICpzYiwgLyogaW4gVVRGLTggKi8KKwkJCQkgICAgY29uc3QgY2hhciAqcGxhY2Vob2xkZXIsCisJCQkJICAgIHN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKmMpCit7CisJc3RydWN0IHN0cmJ1ZiBsb2NhbF9zYiA9IFNUUkJVRl9JTklUOworCWludCB0b3RhbF9jb25zdW1lZCA9IDAsIGxlbiwgcGFkZGluZyA9IGMtPnBhZGRpbmc7CisJaWYgKHBhZGRpbmcgPCAwKSB7CisJCWNvbnN0IGNoYXIgKnN0YXJ0ID0gc3RycmNocihzYi0+YnVmLCAnXG4nKTsKKwkJaW50IG9jY3VwaWVkOworCQlpZiAoIXN0YXJ0KQorCQkJc3RhcnQgPSBzYi0+YnVmOworCQlvY2N1cGllZCA9IHV0Zjhfc3RybndpZHRoKHN0YXJ0LCAtMSwgMSk7CisJCXBhZGRpbmcgPSAoLXBhZGRpbmcpIC0gb2NjdXBpZWQ7CisJfQorCXdoaWxlICgxKSB7CisJCWludCBtb2RpZmllciA9ICpwbGFjZWhvbGRlciA9PSAnQyc7CisJCWludCBjb25zdW1lZCA9IGZvcm1hdF9jb21taXRfb25lKCZsb2NhbF9zYiwgcGxhY2Vob2xkZXIsIGMpOworCQl0b3RhbF9jb25zdW1lZCArPSBjb25zdW1lZDsKKworCQlpZiAoIW1vZGlmaWVyKQorCQkJYnJlYWs7CisKKwkJcGxhY2Vob2xkZXIgKz0gY29uc3VtZWQ7CisJCWlmICgqcGxhY2Vob2xkZXIgIT0gJyUnKQorCQkJYnJlYWs7CisJCXBsYWNlaG9sZGVyKys7CisJCXRvdGFsX2NvbnN1bWVkKys7CisJfQorCWxlbiA9IHV0Zjhfc3RybndpZHRoKGxvY2FsX3NiLmJ1ZiwgLTEsIDEpOworCisJaWYgKGMtPmZsdXNoX3R5cGUgPT0gZmx1c2hfbGVmdF9hbmRfc3RlYWwpIHsKKwkJY29uc3QgY2hhciAqY2ggPSBzYi0+YnVmICsgc2ItPmxlbiAtIDE7CisJCXdoaWxlIChsZW4gPiBwYWRkaW5nICYmIGNoID4gc2ItPmJ1ZikgeworCQkJY29uc3QgY2hhciAqcDsKKwkJCWlmICgqY2ggPT0gJyAnKSB7CisJCQkJY2gtLTsKKwkJCQlwYWRkaW5nKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBjaGVjayBmb3IgdHJhaWxpbmcgYW5zaSBzZXF1ZW5jZXMgKi8KKwkJCWlmICgqY2ggIT0gJ20nKQorCQkJCWJyZWFrOworCQkJcCA9IGNoIC0gMTsKKwkJCXdoaWxlIChjaCAtIHAgPCAxMCAmJiAqcCAhPSAnXDAzMycpCisJCQkJcC0tOworCQkJaWYgKCpwICE9ICdcMDMzJyB8fAorCQkJICAgIGNoICsgMSAtIHAgIT0gZGlzcGxheV9tb2RlX2VzY19zZXF1ZW5jZV9sZW4ocCkpCisJCQkJYnJlYWs7CisJCQkvKgorCQkJICogZ290IGEgZ29vZCBhbnNpIHNlcXVlbmNlLCBwdXQgaXQgYmFjayB0bworCQkJICogbG9jYWxfc2IgYXMgd2UncmUgY3V0dGluZyBzYgorCQkJICovCisJCQlzdHJidWZfaW5zZXJ0KCZsb2NhbF9zYiwgMCwgcCwgY2ggKyAxIC0gcCk7CisJCQljaCA9IHAgLSAxOworCQl9CisJCXN0cmJ1Zl9zZXRsZW4oc2IsIGNoICsgMSAtIHNiLT5idWYpOworCQljLT5mbHVzaF90eXBlID0gZmx1c2hfbGVmdDsKKwl9CisKKwlpZiAobGVuID4gcGFkZGluZykgeworCQlzd2l0Y2ggKGMtPnRydW5jYXRlKSB7CisJCWNhc2UgdHJ1bmNfbGVmdDoKKwkJCXN0cmJ1Zl91dGY4X3JlcGxhY2UoJmxvY2FsX3NiLAorCQkJCQkgICAgMCwgbGVuIC0gKHBhZGRpbmcgLSAyKSwKKwkJCQkJICAgICIuLiIpOworCQkJYnJlYWs7CisJCWNhc2UgdHJ1bmNfbWlkZGxlOgorCQkJc3RyYnVmX3V0ZjhfcmVwbGFjZSgmbG9jYWxfc2IsCisJCQkJCSAgICBwYWRkaW5nIC8gMiAtIDEsCisJCQkJCSAgICBsZW4gLSAocGFkZGluZyAtIDIpLAorCQkJCQkgICAgIi4uIik7CisJCQlicmVhazsKKwkJY2FzZSB0cnVuY19yaWdodDoKKwkJCXN0cmJ1Zl91dGY4X3JlcGxhY2UoJmxvY2FsX3NiLAorCQkJCQkgICAgcGFkZGluZyAtIDIsIGxlbiAtIChwYWRkaW5nIC0gMiksCisJCQkJCSAgICAiLi4iKTsKKwkJCWJyZWFrOworCQljYXNlIHRydW5jX25vbmU6CisJCQlicmVhazsKKwkJfQorCQlzdHJidWZfYWRkYnVmKHNiLCAmbG9jYWxfc2IpOworCX0gZWxzZSB7CisJCWludCBzYl9sZW4gPSBzYi0+bGVuLCBvZmZzZXQgPSAwOworCQlpZiAoYy0+Zmx1c2hfdHlwZSA9PSBmbHVzaF9sZWZ0KQorCQkJb2Zmc2V0ID0gcGFkZGluZyAtIGxlbjsKKwkJZWxzZSBpZiAoYy0+Zmx1c2hfdHlwZSA9PSBmbHVzaF9ib3RoKQorCQkJb2Zmc2V0ID0gKHBhZGRpbmcgLSBsZW4pIC8gMjsKKwkJLyoKKwkJICogd2UgY2FsY3VsYXRlIHBhZGRpbmcgaW4gY29sdW1ucywgbm93CisJCSAqIGNvbnZlcnQgaXQgYmFjayB0byBjaGFycworCQkgKi8KKwkJcGFkZGluZyA9IHBhZGRpbmcgLSBsZW4gKyBsb2NhbF9zYi5sZW47CisJCXN0cmJ1Zl9hZGRjaGFycyhzYiwgJyAnLCBwYWRkaW5nKTsKKwkJbWVtY3B5KHNiLT5idWYgKyBzYl9sZW4gKyBvZmZzZXQsIGxvY2FsX3NiLmJ1ZiwKKwkJICAgICAgIGxvY2FsX3NiLmxlbik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZsb2NhbF9zYik7CisJYy0+Zmx1c2hfdHlwZSA9IG5vX2ZsdXNoOworCXJldHVybiB0b3RhbF9jb25zdW1lZDsKK30KKworc3RhdGljIHNpemVfdCBmb3JtYXRfY29tbWl0X2l0ZW0oc3RydWN0IHN0cmJ1ZiAqc2IsIC8qIGluIFVURi04ICovCisJCQkJIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJCSB2b2lkICpjb250ZXh0KQoreworCWludCBjb25zdW1lZDsKKwlzaXplX3Qgb3JpZ19sZW47CisJZW51bSB7CisJCU5PX01BR0lDLAorCQlBRERfTEZfQkVGT1JFX05PTl9FTVBUWSwKKwkJREVMX0xGX0JFRk9SRV9FTVBUWSwKKwkJQUREX1NQX0JFRk9SRV9OT05fRU1QVFkKKwl9IG1hZ2ljID0gTk9fTUFHSUM7CisKKwlzd2l0Y2ggKHBsYWNlaG9sZGVyWzBdKSB7CisJY2FzZSAnLSc6CisJCW1hZ2ljID0gREVMX0xGX0JFRk9SRV9FTVBUWTsKKwkJYnJlYWs7CisJY2FzZSAnKyc6CisJCW1hZ2ljID0gQUREX0xGX0JFRk9SRV9OT05fRU1QVFk7CisJCWJyZWFrOworCWNhc2UgJyAnOgorCQltYWdpYyA9IEFERF9TUF9CRUZPUkVfTk9OX0VNUFRZOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJaWYgKG1hZ2ljICE9IE5PX01BR0lDKQorCQlwbGFjZWhvbGRlcisrOworCisJb3JpZ19sZW4gPSBzYi0+bGVuOworCWlmICgoKHN0cnVjdCBmb3JtYXRfY29tbWl0X2NvbnRleHQgKiljb250ZXh0KS0+Zmx1c2hfdHlwZSAhPSBub19mbHVzaCkKKwkJY29uc3VtZWQgPSBmb3JtYXRfYW5kX3BhZF9jb21taXQoc2IsIHBsYWNlaG9sZGVyLCBjb250ZXh0KTsKKwllbHNlCisJCWNvbnN1bWVkID0gZm9ybWF0X2NvbW1pdF9vbmUoc2IsIHBsYWNlaG9sZGVyLCBjb250ZXh0KTsKKwlpZiAobWFnaWMgPT0gTk9fTUFHSUMpCisJCXJldHVybiBjb25zdW1lZDsKKworCWlmICgob3JpZ19sZW4gPT0gc2ItPmxlbikgJiYgbWFnaWMgPT0gREVMX0xGX0JFRk9SRV9FTVBUWSkgeworCQl3aGlsZSAoc2ItPmxlbiAmJiBzYi0+YnVmW3NiLT5sZW4gLSAxXSA9PSAnXG4nKQorCQkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiAtIDEpOworCX0gZWxzZSBpZiAob3JpZ19sZW4gIT0gc2ItPmxlbikgeworCQlpZiAobWFnaWMgPT0gQUREX0xGX0JFRk9SRV9OT05fRU1QVFkpCisJCQlzdHJidWZfaW5zZXJ0KHNiLCBvcmlnX2xlbiwgIlxuIiwgMSk7CisJCWVsc2UgaWYgKG1hZ2ljID09IEFERF9TUF9CRUZPUkVfTk9OX0VNUFRZKQorCQkJc3RyYnVmX2luc2VydChzYiwgb3JpZ19sZW4sICIgIiwgMSk7CisJfQorCXJldHVybiBjb25zdW1lZCArIDE7Cit9CisKK3N0YXRpYyBzaXplX3QgdXNlcmZvcm1hdF93YW50X2l0ZW0oc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyLAorCQkJCSAgIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHVzZXJmb3JtYXRfd2FudCAqdyA9IGNvbnRleHQ7CisKKwlpZiAoKnBsYWNlaG9sZGVyID09ICcrJyB8fCAqcGxhY2Vob2xkZXIgPT0gJy0nIHx8ICpwbGFjZWhvbGRlciA9PSAnICcpCisJCXBsYWNlaG9sZGVyKys7CisKKwlzd2l0Y2ggKCpwbGFjZWhvbGRlcikgeworCWNhc2UgJ04nOgorCQl3LT5ub3RlcyA9IDE7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCB1c2VyZm9ybWF0X2ZpbmRfcmVxdWlyZW1lbnRzKGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHVzZXJmb3JtYXRfd2FudCAqdykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGR1bW15ID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIWZtdCkgeworCQlpZiAoIXVzZXJfZm9ybWF0KQorCQkJcmV0dXJuOworCQlmbXQgPSB1c2VyX2Zvcm1hdDsKKwl9CisJc3RyYnVmX2V4cGFuZCgmZHVtbXksIGZtdCwgdXNlcmZvcm1hdF93YW50X2l0ZW0sIHcpOworCXN0cmJ1Zl9yZWxlYXNlKCZkdW1teSk7Cit9CisKK3ZvaWQgZm9ybWF0X2NvbW1pdF9tZXNzYWdlKGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJCSAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgICBjb25zdCBzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnByZXR0eV9jdHgpCit7CisJc3RydWN0IGZvcm1hdF9jb21taXRfY29udGV4dCBjb250ZXh0OworCWNvbnN0IGNoYXIgKm91dHB1dF9lbmMgPSBwcmV0dHlfY3R4LT5vdXRwdXRfZW5jb2Rpbmc7CisJY29uc3QgY2hhciAqdXRmOCA9ICJVVEYtOCI7CisKKwltZW1zZXQoJmNvbnRleHQsIDAsIHNpemVvZihjb250ZXh0KSk7CisJY29udGV4dC5jb21taXQgPSBjb21taXQ7CisJY29udGV4dC5wcmV0dHlfY3R4ID0gcHJldHR5X2N0eDsKKwljb250ZXh0LndyYXBfc3RhcnQgPSBzYi0+bGVuOworCS8qCisJICogY29udmVydCBhIGNvbW1pdCBtZXNzYWdlIHRvIFVURi04IGZpcnN0CisJICogYXMgZmFyIGFzICdmb3JtYXRfY29tbWl0X2l0ZW0nIGFzc3VtZXMgaXQgaW4gVVRGLTgKKwkgKi8KKwljb250ZXh0Lm1lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LAorCQkJCQkgICZjb250ZXh0LmNvbW1pdF9lbmNvZGluZywKKwkJCQkJICB1dGY4KTsKKworCXN0cmJ1Zl9leHBhbmQoc2IsIGZvcm1hdCwgZm9ybWF0X2NvbW1pdF9pdGVtLCAmY29udGV4dCk7CisJcmV3cmFwX21lc3NhZ2VfdGFpbChzYiwgJmNvbnRleHQsIDAsIDAsIDApOworCisJLyogdGhlbiBjb252ZXJ0IGEgY29tbWl0IG1lc3NhZ2UgdG8gYW4gYWN0dWFsIG91dHB1dCBlbmNvZGluZyAqLworCWlmIChvdXRwdXRfZW5jKSB7CisJCWlmIChzYW1lX2VuY29kaW5nKHV0ZjgsIG91dHB1dF9lbmMpKQorCQkJb3V0cHV0X2VuYyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJaWYgKGNvbnRleHQuY29tbWl0X2VuY29kaW5nICYmCisJCSAgICAhc2FtZV9lbmNvZGluZyhjb250ZXh0LmNvbW1pdF9lbmNvZGluZywgdXRmOCkpCisJCQlvdXRwdXRfZW5jID0gY29udGV4dC5jb21taXRfZW5jb2Rpbmc7CisJfQorCisJaWYgKG91dHB1dF9lbmMpIHsKKwkJaW50IG91dHN6OworCQljaGFyICpvdXQgPSByZWVuY29kZV9zdHJpbmdfbGVuKHNiLT5idWYsIHNiLT5sZW4sCisJCQkJCQlvdXRwdXRfZW5jLCB1dGY4LCAmb3V0c3opOworCQlpZiAob3V0KQorCQkJc3RyYnVmX2F0dGFjaChzYiwgb3V0LCBvdXRzeiwgb3V0c3ogKyAxKTsKKwl9CisKKwlmcmVlKGNvbnRleHQuY29tbWl0X2VuY29kaW5nKTsKKwl1bnVzZV9jb21taXRfYnVmZmVyKGNvbW1pdCwgY29udGV4dC5tZXNzYWdlKTsKK30KKworc3RhdGljIHZvaWQgcHBfaGVhZGVyKHN0cnVjdCBwcmV0dHlfcHJpbnRfY29udGV4dCAqcHAsCisJCSAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorCQkgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCSAgICAgIGNvbnN0IGNoYXIgKiptc2dfcCwKKwkJICAgICAgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJaW50IHBhcmVudHNfc2hvd24gPSAwOworCisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpuYW1lLCAqbGluZSA9ICptc2dfcDsKKwkJaW50IGxpbmVsZW4gPSBnZXRfb25lX2xpbmUoKm1zZ19wKTsKKworCQlpZiAoIWxpbmVsZW4pCisJCQlyZXR1cm47CisJCSptc2dfcCArPSBsaW5lbGVuOworCisJCWlmIChsaW5lbGVuID09IDEpCisJCQkvKiBFbmQgb2YgaGVhZGVyICovCisJCQlyZXR1cm47CisKKwkJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfUkFXKSB7CisJCQlzdHJidWZfYWRkKHNiLCBsaW5lLCBsaW5lbGVuKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN0YXJ0c193aXRoKGxpbmUsICJwYXJlbnQgIikpIHsKKwkJCWlmIChsaW5lbGVuICE9IDQ4KQorCQkJCWRpZSgiYmFkIHBhcmVudCBsaW5lIGluIGNvbW1pdCIpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoIXBhcmVudHNfc2hvd24pIHsKKwkJCXVuc2lnbmVkIG51bSA9IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cyk7CisJCQkvKiB3aXRoIGVub3VnaCBzbG9wICovCisJCQlzdHJidWZfZ3JvdyhzYiwgbnVtICogNTAgKyAyMCk7CisJCQlhZGRfbWVyZ2VfaW5mbyhwcCwgc2IsIGNvbW1pdCk7CisJCQlwYXJlbnRzX3Nob3duID0gMTsKKwkJfQorCisJCS8qCisJCSAqIE1FRElVTSA9PSBERUZBVUxUIHNob3dzIG9ubHkgYXV0aG9yIHdpdGggZGF0ZXMuCisJCSAqIEZVTEwgc2hvd3MgYm90aCBhdXRob3JzIGJ1dCBub3QgZGF0ZXMuCisJCSAqIEZVTExFUiBzaG93cyBib3RoIGF1dGhvcnMgYW5kIGRhdGVzLgorCQkgKi8KKwkJaWYgKHNraXBfcHJlZml4KGxpbmUsICJhdXRob3IgIiwgJm5hbWUpKSB7CisJCQlzdHJidWZfZ3JvdyhzYiwgbGluZWxlbiArIDgwKTsKKwkJCXBwX3VzZXJfaW5mbyhwcCwgIkF1dGhvciIsIHNiLCBuYW1lLCBlbmNvZGluZyk7CisJCX0KKwkJaWYgKHNraXBfcHJlZml4KGxpbmUsICJjb21taXR0ZXIgIiwgJm5hbWUpICYmCisJCSAgICAocHAtPmZtdCA9PSBDTUlUX0ZNVF9GVUxMIHx8IHBwLT5mbXQgPT0gQ01JVF9GTVRfRlVMTEVSKSkgeworCQkJc3RyYnVmX2dyb3coc2IsIGxpbmVsZW4gKyA4MCk7CisJCQlwcF91c2VyX2luZm8ocHAsICJDb21taXQiLCBzYiwgbmFtZSwgZW5jb2RpbmcpOworCQl9CisJfQorfQorCit2b2lkIHBwX3RpdGxlX2xpbmUoc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJICAgY29uc3QgY2hhciAqKm1zZ19wLAorCQkgICBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisJCSAgIGludCBuZWVkXzhiaXRfY3RlKQoreworCXN0YXRpYyBjb25zdCBpbnQgbWF4X2xlbmd0aCA9IDc4OyAvKiBwZXIgcmZjMjA0NyAqLworCXN0cnVjdCBzdHJidWYgdGl0bGU7CisKKwlzdHJidWZfaW5pdCgmdGl0bGUsIDgwKTsKKwkqbXNnX3AgPSBmb3JtYXRfc3ViamVjdCgmdGl0bGUsICptc2dfcCwKKwkJCQlwcC0+cHJlc2VydmVfc3ViamVjdCA/ICJcbiIgOiAiICIpOworCisJc3RyYnVmX2dyb3coc2IsIHRpdGxlLmxlbiArIDEwMjQpOworCWlmIChwcC0+c3ViamVjdCkgeworCQlzdHJidWZfYWRkc3RyKHNiLCBwcC0+c3ViamVjdCk7CisJCWlmIChuZWVkc19yZmMyMDQ3X2VuY29kaW5nKHRpdGxlLmJ1ZiwgdGl0bGUubGVuLCBSRkMyMDQ3X1NVQkpFQ1QpKQorCQkJYWRkX3JmYzIwNDcoc2IsIHRpdGxlLmJ1ZiwgdGl0bGUubGVuLAorCQkJCQkJZW5jb2RpbmcsIFJGQzIwNDdfU1VCSkVDVCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRfd3JhcHBlZF9ieXRlcyhzYiwgdGl0bGUuYnVmLCB0aXRsZS5sZW4sCisJCQkJCSAtbGFzdF9saW5lX2xlbmd0aChzYiksIDEsIG1heF9sZW5ndGgpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRidWYoc2IsICZ0aXRsZSk7CisJfQorCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisKKwlpZiAobmVlZF84Yml0X2N0ZSA9PSAwKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgcHAtPmluX2JvZHlfaGVhZGVycy5ucjsgaSsrKSB7CisJCQlpZiAoaGFzX25vbl9hc2NpaShwcC0+aW5fYm9keV9oZWFkZXJzLml0ZW1zW2ldLnN0cmluZykpIHsKKwkJCQluZWVkXzhiaXRfY3RlID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmIChuZWVkXzhiaXRfY3RlID4gMCkgeworCQljb25zdCBjaGFyICpoZWFkZXJfZm10ID0KKwkJCSJNSU1FLVZlcnNpb246IDEuMFxuIgorCQkJIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0lc1xuIgorCQkJIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiI7CisJCXN0cmJ1Zl9hZGRmKHNiLCBoZWFkZXJfZm10LCBlbmNvZGluZyk7CisJfQorCWlmIChwcC0+YWZ0ZXJfc3ViamVjdCkgeworCQlzdHJidWZfYWRkc3RyKHNiLCBwcC0+YWZ0ZXJfc3ViamVjdCk7CisJfQorCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX0VNQUlMKSB7CisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisJfQorCisJaWYgKHBwLT5pbl9ib2R5X2hlYWRlcnMubnIpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBwcC0+aW5fYm9keV9oZWFkZXJzLm5yOyBpKyspIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIHBwLT5pbl9ib2R5X2hlYWRlcnMuaXRlbXNbaV0uc3RyaW5nKTsKKwkJCWZyZWUocHAtPmluX2JvZHlfaGVhZGVycy5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisJCXN0cmluZ19saXN0X2NsZWFyKCZwcC0+aW5fYm9keV9oZWFkZXJzLCAwKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmdGl0bGUpOworfQorCit2b2lkIHBwX3JlbWFpbmRlcihzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgKnBwLAorCQkgIGNvbnN0IGNoYXIgKiptc2dfcCwKKwkJICBzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJICBpbnQgaW5kZW50KQoreworCWludCBmaXJzdCA9IDE7CisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpsaW5lID0gKm1zZ19wOworCQlpbnQgbGluZWxlbiA9IGdldF9vbmVfbGluZShsaW5lKTsKKwkJKm1zZ19wICs9IGxpbmVsZW47CisKKwkJaWYgKCFsaW5lbGVuKQorCQkJYnJlYWs7CisKKwkJaWYgKGlzX2VtcHR5X2xpbmUobGluZSwgJmxpbmVsZW4pKSB7CisJCQlpZiAoZmlyc3QpCisJCQkJY29udGludWU7CisJCQlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9TSE9SVCkKKwkJCQlicmVhazsKKwkJfQorCQlmaXJzdCA9IDA7CisKKwkJc3RyYnVmX2dyb3coc2IsIGxpbmVsZW4gKyBpbmRlbnQgKyAyMCk7CisJCWlmIChpbmRlbnQpCisJCQlzdHJidWZfYWRkY2hhcnMoc2IsICcgJywgaW5kZW50KTsKKwkJc3RyYnVmX2FkZChzYiwgbGluZSwgbGluZWxlbik7CisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisJfQorfQorCit2b2lkIHByZXR0eV9wcmludF9jb21taXQoc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0ICpwcCwKKwkJCSBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCQkgc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJdW5zaWduZWQgbG9uZyBiZWdpbm5pbmdfb2ZfYm9keTsKKwlpbnQgaW5kZW50ID0gNDsKKwljb25zdCBjaGFyICptc2c7CisJY29uc3QgY2hhciAqcmVlbmNvZGVkOworCWNvbnN0IGNoYXIgKmVuY29kaW5nOworCWludCBuZWVkXzhiaXRfY3RlID0gcHAtPm5lZWRfOGJpdF9jdGU7CisKKwlpZiAocHAtPmZtdCA9PSBDTUlUX0ZNVF9VU0VSRk9STUFUKSB7CisJCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsIHVzZXJfZm9ybWF0LCBzYiwgcHApOworCQlyZXR1cm47CisJfQorCisJZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCW1zZyA9IHJlZW5jb2RlZCA9IGxvZ21zZ19yZWVuY29kZShjb21taXQsIE5VTEwsIGVuY29kaW5nKTsKKworCWlmIChwcC0+Zm10ID09IENNSVRfRk1UX09ORUxJTkUgfHwgcHAtPmZtdCA9PSBDTUlUX0ZNVF9FTUFJTCkKKwkJaW5kZW50ID0gMDsKKworCS8qCisJICogV2UgbmVlZCB0byBjaGVjayBhbmQgZW1pdCBDb250ZW50LXR5cGU6IHRvIG1hcmsgaXQKKwkgKiBhcyA4LWJpdCBpZiB3ZSBoYXZlbid0IGRvbmUgc28uCisJICovCisJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfRU1BSUwgJiYgbmVlZF84Yml0X2N0ZSA9PSAwKSB7CisJCWludCBpLCBjaCwgaW5fYm9keTsKKworCQlmb3IgKGluX2JvZHkgPSBpID0gMDsgKGNoID0gbXNnW2ldKTsgaSsrKSB7CisJCQlpZiAoIWluX2JvZHkpIHsKKwkJCQkvKiBhdXRob3IgY291bGQgYmUgbm9uIDctYml0IEFTQ0lJIGJ1dAorCQkJCSAqIHRoZSBsb2cgbWF5IGJlIHNvOyBza2lwIG92ZXIgdGhlCisJCQkJICogaGVhZGVyIHBhcnQgZmlyc3QuCisJCQkJICovCisJCQkJaWYgKGNoID09ICdcbicgJiYgbXNnW2krMV0gPT0gJ1xuJykKKwkJCQkJaW5fYm9keSA9IDE7CisJCQl9CisJCQllbHNlIGlmIChub25fYXNjaWkoY2gpKSB7CisJCQkJbmVlZF84Yml0X2N0ZSA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlwcF9oZWFkZXIocHAsIGVuY29kaW5nLCBjb21taXQsICZtc2csIHNiKTsKKwlpZiAocHAtPmZtdCAhPSBDTUlUX0ZNVF9PTkVMSU5FICYmICFwcC0+c3ViamVjdCkgeworCQlzdHJidWZfYWRkY2goc2IsICdcbicpOworCX0KKworCS8qIFNraXAgZXhjZXNzIGJsYW5rIGxpbmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYm9keSwgaWYgYW55Li4uICovCisJbXNnID0gc2tpcF9lbXB0eV9saW5lcyhtc2cpOworCisJLyogVGhlc2UgZm9ybWF0cyB0cmVhdCB0aGUgdGl0bGUgbGluZSBzcGVjaWFsbHkuICovCisJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfT05FTElORSB8fCBwcC0+Zm10ID09IENNSVRfRk1UX0VNQUlMKQorCQlwcF90aXRsZV9saW5lKHBwLCAmbXNnLCBzYiwgZW5jb2RpbmcsIG5lZWRfOGJpdF9jdGUpOworCisJYmVnaW5uaW5nX29mX2JvZHkgPSBzYi0+bGVuOworCWlmIChwcC0+Zm10ICE9IENNSVRfRk1UX09ORUxJTkUpCisJCXBwX3JlbWFpbmRlcihwcCwgJm1zZywgc2IsIGluZGVudCk7CisJc3RyYnVmX3J0cmltKHNiKTsKKworCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBhbiBFT0xOIGZvciB0aGUgbm9uLW9uZWxpbmUgY2FzZSAqLworCWlmIChwcC0+Zm10ICE9IENNSVRfRk1UX09ORUxJTkUpCisJCXN0cmJ1Zl9hZGRjaChzYiwgJ1xuJyk7CisKKwkvKgorCSAqIFRoZSBjYWxsZXIgbWF5IGFwcGVuZCBhZGRpdGlvbmFsIGJvZHkgdGV4dCBpbiBlLW1haWwKKwkgKiBmb3JtYXQuICBNYWtlIHN1cmUgd2UgZGlkIG5vdCBzdHJpcCB0aGUgYmxhbmsgbGluZQorCSAqIGJldHdlZW4gdGhlIGhlYWRlciBhbmQgdGhlIGJvZHkuCisJICovCisJaWYgKHBwLT5mbXQgPT0gQ01JVF9GTVRfRU1BSUwgJiYgc2ItPmxlbiA8PSBiZWdpbm5pbmdfb2ZfYm9keSkKKwkJc3RyYnVmX2FkZGNoKHNiLCAnXG4nKTsKKworCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCByZWVuY29kZWQpOworfQorCit2b2lkIHBwX2NvbW1pdF9lYXN5KGVudW0gY21pdF9mbXQgZm10LCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJCSAgICBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgcHAgPSB7MH07CisJcHAuZm10ID0gZm10OworCXByZXR0eV9wcmludF9jb21taXQoJnBwLCBjb21taXQsIHNiKTsKK30KZGlmZiAtLWdpdCBhL3ByaW8tcXVldWUuYyBiL3ByaW8tcXVldWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDM2NWIwCi0tLSAvZGV2L251bGwKKysrIGIvcHJpby1xdWV1ZS5jCkBAIC0wLDAgKzEsOTAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInByaW8tcXVldWUuaCIKKworc3RhdGljIGlubGluZSBpbnQgY29tcGFyZShzdHJ1Y3QgcHJpb19xdWV1ZSAqcXVldWUsIGludCBpLCBpbnQgaikKK3sKKwlpbnQgY21wID0gcXVldWUtPmNvbXBhcmUocXVldWUtPmFycmF5W2ldLmRhdGEsIHF1ZXVlLT5hcnJheVtqXS5kYXRhLAorCQkJCSBxdWV1ZS0+Y2JfZGF0YSk7CisJaWYgKCFjbXApCisJCWNtcCA9IHF1ZXVlLT5hcnJheVtpXS5jdHIgLSBxdWV1ZS0+YXJyYXlbal0uY3RyOworCXJldHVybiBjbXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwKHN0cnVjdCBwcmlvX3F1ZXVlICpxdWV1ZSwgaW50IGksIGludCBqKQoreworCXN0cnVjdCBwcmlvX3F1ZXVlX2VudHJ5IHRtcCA9IHF1ZXVlLT5hcnJheVtpXTsKKwlxdWV1ZS0+YXJyYXlbaV0gPSBxdWV1ZS0+YXJyYXlbal07CisJcXVldWUtPmFycmF5W2pdID0gdG1wOworfQorCit2b2lkIHByaW9fcXVldWVfcmV2ZXJzZShzdHJ1Y3QgcHJpb19xdWV1ZSAqcXVldWUpCit7CisJaW50IGksIGo7CisKKwlpZiAocXVldWUtPmNvbXBhcmUgIT0gTlVMTCkKKwkJZGllKCJCVUc6IHByaW9fcXVldWVfcmV2ZXJzZSgpIG9uIG5vbi1MSUZPIHF1ZXVlIik7CisJZm9yIChpID0gMDsgaSA8PSAoaiA9IChxdWV1ZS0+bnIgLSAxKSAtIGkpOyBpKyspCisJCXN3YXAocXVldWUsIGksIGopOworfQorCit2b2lkIGNsZWFyX3ByaW9fcXVldWUoc3RydWN0IHByaW9fcXVldWUgKnF1ZXVlKQoreworCWZyZWUocXVldWUtPmFycmF5KTsKKwlxdWV1ZS0+bnIgPSAwOworCXF1ZXVlLT5hbGxvYyA9IDA7CisJcXVldWUtPmFycmF5ID0gTlVMTDsKKwlxdWV1ZS0+aW5zZXJ0aW9uX2N0ciA9IDA7Cit9CisKK3ZvaWQgcHJpb19xdWV1ZV9wdXQoc3RydWN0IHByaW9fcXVldWUgKnF1ZXVlLCB2b2lkICp0aGluZykKK3sKKwlpbnQgaXgsIHBhcmVudDsKKworCS8qIEFwcGVuZCBhdCB0aGUgZW5kICovCisJQUxMT0NfR1JPVyhxdWV1ZS0+YXJyYXksIHF1ZXVlLT5uciArIDEsIHF1ZXVlLT5hbGxvYyk7CisJcXVldWUtPmFycmF5W3F1ZXVlLT5ucl0uY3RyID0gcXVldWUtPmluc2VydGlvbl9jdHIrKzsKKwlxdWV1ZS0+YXJyYXlbcXVldWUtPm5yXS5kYXRhID0gdGhpbmc7CisJcXVldWUtPm5yKys7CisJaWYgKCFxdWV1ZS0+Y29tcGFyZSkKKwkJcmV0dXJuOyAvKiBMSUZPICovCisKKwkvKiBCdWJibGUgdXAgdGhlIG5ldyBvbmUgKi8KKwlmb3IgKGl4ID0gcXVldWUtPm5yIC0gMTsgaXg7IGl4ID0gcGFyZW50KSB7CisJCXBhcmVudCA9IChpeCAtIDEpIC8gMjsKKwkJaWYgKGNvbXBhcmUocXVldWUsIHBhcmVudCwgaXgpIDw9IDApCisJCQlicmVhazsKKworCQlzd2FwKHF1ZXVlLCBwYXJlbnQsIGl4KTsKKwl9Cit9CisKK3ZvaWQgKnByaW9fcXVldWVfZ2V0KHN0cnVjdCBwcmlvX3F1ZXVlICpxdWV1ZSkKK3sKKwl2b2lkICpyZXN1bHQ7CisJaW50IGl4LCBjaGlsZDsKKworCWlmICghcXVldWUtPm5yKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIXF1ZXVlLT5jb21wYXJlKQorCQlyZXR1cm4gcXVldWUtPmFycmF5Wy0tcXVldWUtPm5yXS5kYXRhOyAvKiBMSUZPICovCisKKwlyZXN1bHQgPSBxdWV1ZS0+YXJyYXlbMF0uZGF0YTsKKwlpZiAoIS0tcXVldWUtPm5yKQorCQlyZXR1cm4gcmVzdWx0OworCisJcXVldWUtPmFycmF5WzBdID0gcXVldWUtPmFycmF5W3F1ZXVlLT5ucl07CisKKwkvKiBQdXNoIGRvd24gdGhlIG9uZSBhdCB0aGUgcm9vdCAqLworCWZvciAoaXggPSAwOyBpeCAqIDIgKyAxIDwgcXVldWUtPm5yOyBpeCA9IGNoaWxkKSB7CisJCWNoaWxkID0gaXggKiAyICsgMTsgLyogbGVmdCAqLworCQlpZiAoY2hpbGQgKyAxIDwgcXVldWUtPm5yICYmCisJCSAgICBjb21wYXJlKHF1ZXVlLCBjaGlsZCwgY2hpbGQgKyAxKSA+PSAwKQorCQkJY2hpbGQrKzsgLyogdXNlIHJpZ2h0IGNoaWxkICovCisKKwkJaWYgKGNvbXBhcmUocXVldWUsIGl4LCBjaGlsZCkgPD0gMCkKKwkJCWJyZWFrOworCisJCXN3YXAocXVldWUsIGNoaWxkLCBpeCk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9wcmlvLXF1ZXVlLmggYi9wcmlvLXF1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAzMGVjOQotLS0gL2Rldi9udWxsCisrKyBiL3ByaW8tcXVldWUuaApAQCAtMCwwICsxLDU0IEBACisjaWZuZGVmIFBSSU9fUVVFVUVfSAorI2RlZmluZSBQUklPX1FVRVVFX0gKKworLyoKKyAqIEEgcHJpb3JpdHkgcXVldWUgaW1wbGVtZW50YXRpb24sIHByaW1hcmlseSBmb3Iga2VlcGluZyB0cmFjayBvZgorICogY29tbWl0cyBpbiB0aGUgJ2RhdGUtb3JkZXInIHNvIHRoYXQgd2UgcHJvY2VzcyB0aGVtIGZyb20gbmV3IHRvIG9sZAorICogYXMgdGhleSBhcmUgZGlzY292ZXJlZCwgYnV0IGNhbiBiZSB1c2VkIHRvIGhvbGQgYW55IHBvaW50ZXIgdG8KKyAqIHN0cnVjdC4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHN1cHBseWluZyBhIGZ1bmN0aW9uIHRvCisgKiBjb21wYXJlIHR3byAidGhpbmdzIi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIGRhdGEgc3RydWN0dXJlIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBMSUZPIHN0YWNrCisgKiBieSBzcGVjaWZ5aW5nIE5VTEwgYXMgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24uCisgKi8KKworLyoKKyAqIENvbXBhcmUgdHdvICJ0aGluZ3MiLCBvbmUgYW5kIHR3bzsgdGhlIHRoaXJkIHBhcmFtZXRlciBpcyBjYl9kYXRhCisgKiBpbiB0aGUgcHJpb19xdWV1ZSBzdHJ1Y3R1cmUuICBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzIGEgc2lnbiBvZgorICogdGhlIHJldHVybiB2YWx1ZSwgYmVpbmcgdGhlIHNhbWUgYXMgdGhlIHNpZ24gb2YgdGhlIHJlc3VsdCBvZgorICogc3VidHJhY3RpbmcgInR3byIgZnJvbSAib25lIiAoaS5lLiBuZWdhdGl2ZSBpZiAib25lIiBzb3J0cyBlYXJsaWVyCisgKiB0aGFuICJ0d28iKS4KKyAqLwordHlwZWRlZiBpbnQgKCpwcmlvX3F1ZXVlX2NvbXBhcmVfZm4pKGNvbnN0IHZvaWQgKm9uZSwgY29uc3Qgdm9pZCAqdHdvLCB2b2lkICpjYl9kYXRhKTsKKworc3RydWN0IHByaW9fcXVldWVfZW50cnkgeworCXVuc2lnbmVkIGN0cjsKKwl2b2lkICpkYXRhOworfTsKKworc3RydWN0IHByaW9fcXVldWUgeworCXByaW9fcXVldWVfY29tcGFyZV9mbiBjb21wYXJlOworCXVuc2lnbmVkIGluc2VydGlvbl9jdHI7CisJdm9pZCAqY2JfZGF0YTsKKwlpbnQgYWxsb2MsIG5yOworCXN0cnVjdCBwcmlvX3F1ZXVlX2VudHJ5ICphcnJheTsKK307CisKKy8qCisgKiBBZGQgdGhlICJ0aGluZyIgdG8gdGhlIHF1ZXVlLgorICovCitleHRlcm4gdm9pZCBwcmlvX3F1ZXVlX3B1dChzdHJ1Y3QgcHJpb19xdWV1ZSAqLCB2b2lkICp0aGluZyk7CisKKy8qCisgKiBFeHRyYWN0IHRoZSAidGhpbmciIHRoYXQgY29tcGFyZXMgdGhlIHNtYWxsZXN0IG91dCBvZiB0aGUgcXVldWUsCisgKiBvciBOVUxMLiAgSWYgY29tcGFyZSBmdW5jdGlvbiBpcyBOVUxMLCB0aGUgcXVldWUgYWN0cyBhcyBhIExJRk8KKyAqIHN0YWNrLgorICovCitleHRlcm4gdm9pZCAqcHJpb19xdWV1ZV9nZXQoc3RydWN0IHByaW9fcXVldWUgKik7CisKK2V4dGVybiB2b2lkIGNsZWFyX3ByaW9fcXVldWUoc3RydWN0IHByaW9fcXVldWUgKik7CisKKy8qIFJldmVyc2UgdGhlIExJRk8gZWxlbWVudHMgKi8KK2V4dGVybiB2b2lkIHByaW9fcXVldWVfcmV2ZXJzZShzdHJ1Y3QgcHJpb19xdWV1ZSAqKTsKKworI2VuZGlmIC8qIFBSSU9fUVVFVUVfSCAqLwpkaWZmIC0tZ2l0IGEvcHJvZ3Jlc3MuYyBiL3Byb2dyZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUzYmQzNwotLS0gL2Rldi9udWxsCisrKyBiL3Byb2dyZXNzLmMKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiBTaW1wbGUgdGV4dC1iYXNlZCBwcm9ncmVzcyBkaXNwbGF5IG1vZHVsZSBmb3IgR0lUCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3IGJ5IE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+CisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiZ2V0dGV4dC5oIgorI2luY2x1ZGUgInByb2dyZXNzLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidHJhY2UuaCIKKworI2RlZmluZSBUUF9JRFhfTUFYICAgICAgOAorCitzdHJ1Y3QgdGhyb3VnaHB1dCB7CisJb2ZmX3QgY3Vycl90b3RhbDsKKwlvZmZfdCBwcmV2X3RvdGFsOworCXVpbnQ2NF90IHByZXZfbnM7CisJdW5zaWduZWQgaW50IGF2Z19ieXRlczsKKwl1bnNpZ25lZCBpbnQgYXZnX21pc2VjczsKKwl1bnNpZ25lZCBpbnQgbGFzdF9ieXRlc1tUUF9JRFhfTUFYXTsKKwl1bnNpZ25lZCBpbnQgbGFzdF9taXNlY3NbVFBfSURYX01BWF07CisJdW5zaWduZWQgaW50IGlkeDsKKwlzdHJ1Y3Qgc3RyYnVmIGRpc3BsYXk7Cit9OworCitzdHJ1Y3QgcHJvZ3Jlc3MgeworCWNvbnN0IGNoYXIgKnRpdGxlOworCWludCBsYXN0X3ZhbHVlOworCXVuc2lnbmVkIHRvdGFsOworCXVuc2lnbmVkIGxhc3RfcGVyY2VudDsKKwl1bnNpZ25lZCBkZWxheTsKKwl1bnNpZ25lZCBkZWxheWVkX3BlcmNlbnRfdHJlc2hvbGQ7CisJc3RydWN0IHRocm91Z2hwdXQgKnRocm91Z2hwdXQ7Cit9OworCitzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHByb2dyZXNzX3VwZGF0ZTsKKworc3RhdGljIHZvaWQgcHJvZ3Jlc3NfaW50ZXJ2YWwoaW50IHNpZ251bSkKK3sKKwlwcm9ncmVzc191cGRhdGUgPSAxOworfQorCitzdGF0aWMgdm9pZCBzZXRfcHJvZ3Jlc3Nfc2lnbmFsKHZvaWQpCit7CisJc3RydWN0IHNpZ2FjdGlvbiBzYTsKKwlzdHJ1Y3QgaXRpbWVydmFsIHY7CisKKwlwcm9ncmVzc191cGRhdGUgPSAwOworCisJbWVtc2V0KCZzYSwgMCwgc2l6ZW9mKHNhKSk7CisJc2Euc2FfaGFuZGxlciA9IHByb2dyZXNzX2ludGVydmFsOworCXNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKKwlzYS5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisJc2lnYWN0aW9uKFNJR0FMUk0sICZzYSwgTlVMTCk7CisKKwl2Lml0X2ludGVydmFsLnR2X3NlYyA9IDE7CisJdi5pdF9pbnRlcnZhbC50dl91c2VjID0gMDsKKwl2Lml0X3ZhbHVlID0gdi5pdF9pbnRlcnZhbDsKKwlzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZ2LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfcHJvZ3Jlc3Nfc2lnbmFsKHZvaWQpCit7CisJc3RydWN0IGl0aW1lcnZhbCB2ID0ge3swLH0sfTsKKwlzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZ2LCBOVUxMKTsKKwlzaWduYWwoU0lHQUxSTSwgU0lHX0lHTik7CisJcHJvZ3Jlc3NfdXBkYXRlID0gMDsKK30KKworc3RhdGljIGludCBpc19mb3JlZ3JvdW5kX2ZkKGludCBmZCkKK3sKKwlpbnQgdHBncnAgPSB0Y2dldHBncnAoZmQpOworCXJldHVybiB0cGdycCA8IDAgfHwgdHBncnAgPT0gZ2V0cGdpZCgwKTsKK30KKworc3RhdGljIGludCBkaXNwbGF5KHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIHVuc2lnbmVkIG4sIGNvbnN0IGNoYXIgKmRvbmUpCit7CisJY29uc3QgY2hhciAqZW9sLCAqdHA7CisKKwlpZiAocHJvZ3Jlc3MtPmRlbGF5KSB7CisJCWlmICghcHJvZ3Jlc3NfdXBkYXRlIHx8IC0tcHJvZ3Jlc3MtPmRlbGF5KQorCQkJcmV0dXJuIDA7CisJCWlmIChwcm9ncmVzcy0+dG90YWwpIHsKKwkJCXVuc2lnbmVkIHBlcmNlbnQgPSBuICogMTAwIC8gcHJvZ3Jlc3MtPnRvdGFsOworCQkJaWYgKHBlcmNlbnQgPiBwcm9ncmVzcy0+ZGVsYXllZF9wZXJjZW50X3RyZXNob2xkKSB7CisJCQkJLyogaW5oaWJpdCB0aGlzIHByb2dyZXNzIHJlcG9ydCBlbnRpcmVseSAqLworCQkJCWNsZWFyX3Byb2dyZXNzX3NpZ25hbCgpOworCQkJCXByb2dyZXNzLT5kZWxheSA9IC0xOworCQkJCXByb2dyZXNzLT50b3RhbCA9IDA7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisKKwlwcm9ncmVzcy0+bGFzdF92YWx1ZSA9IG47CisJdHAgPSAocHJvZ3Jlc3MtPnRocm91Z2hwdXQpID8gcHJvZ3Jlc3MtPnRocm91Z2hwdXQtPmRpc3BsYXkuYnVmIDogIiI7CisJZW9sID0gZG9uZSA/IGRvbmUgOiAiICAgXHIiOworCWlmIChwcm9ncmVzcy0+dG90YWwpIHsKKwkJdW5zaWduZWQgcGVyY2VudCA9IG4gKiAxMDAgLyBwcm9ncmVzcy0+dG90YWw7CisJCWlmIChwZXJjZW50ICE9IHByb2dyZXNzLT5sYXN0X3BlcmNlbnQgfHwgcHJvZ3Jlc3NfdXBkYXRlKSB7CisJCQlwcm9ncmVzcy0+bGFzdF9wZXJjZW50ID0gcGVyY2VudDsKKwkJCWlmIChpc19mb3JlZ3JvdW5kX2ZkKGZpbGVubyhzdGRlcnIpKSB8fCBkb25lKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIlczogJTN1JSUgKCV1LyV1KSVzJXMiLAorCQkJCQlwcm9ncmVzcy0+dGl0bGUsIHBlcmNlbnQsIG4sCisJCQkJCXByb2dyZXNzLT50b3RhbCwgdHAsIGVvbCk7CisJCQkJZmZsdXNoKHN0ZGVycik7CisJCQl9CisJCQlwcm9ncmVzc191cGRhdGUgPSAwOworCQkJcmV0dXJuIDE7CisJCX0KKwl9IGVsc2UgaWYgKHByb2dyZXNzX3VwZGF0ZSkgeworCQlpZiAoaXNfZm9yZWdyb3VuZF9mZChmaWxlbm8oc3RkZXJyKSkgfHwgZG9uZSkgeworCQkJZnByaW50ZihzdGRlcnIsICIlczogJXUlcyVzIiwKKwkJCQlwcm9ncmVzcy0+dGl0bGUsIG4sIHRwLCBlb2wpOworCQkJZmZsdXNoKHN0ZGVycik7CisJCX0KKwkJcHJvZ3Jlc3NfdXBkYXRlID0gMDsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRocm91Z2hwdXRfc3RyaW5nKHN0cnVjdCBzdHJidWYgKmJ1Ziwgb2ZmX3QgdG90YWwsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcmF0ZSkKK3sKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlzdHJidWZfYWRkc3RyKGJ1ZiwgIiwgIik7CisJc3RyYnVmX2h1bWFuaXNlX2J5dGVzKGJ1ZiwgdG90YWwpOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiIHwgIik7CisJc3RyYnVmX2h1bWFuaXNlX2J5dGVzKGJ1ZiwgcmF0ZSAqIDEwMjQpOworCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiL3MiKTsKK30KKwordm9pZCBkaXNwbGF5X3Rocm91Z2hwdXQoc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgb2ZmX3QgdG90YWwpCit7CisJc3RydWN0IHRocm91Z2hwdXQgKnRwOworCXVpbnQ2NF90IG5vd19uczsKKwl1bnNpZ25lZCBpbnQgbWlzZWNzLCBjb3VudCwgcmF0ZTsKKworCWlmICghcHJvZ3Jlc3MpCisJCXJldHVybjsKKwl0cCA9IHByb2dyZXNzLT50aHJvdWdocHV0OworCisJbm93X25zID0gZ2V0bmFub3RpbWUoKTsKKworCWlmICghdHApIHsKKwkJcHJvZ3Jlc3MtPnRocm91Z2hwdXQgPSB0cCA9IGNhbGxvYygxLCBzaXplb2YoKnRwKSk7CisJCWlmICh0cCkgeworCQkJdHAtPnByZXZfdG90YWwgPSB0cC0+Y3Vycl90b3RhbCA9IHRvdGFsOworCQkJdHAtPnByZXZfbnMgPSBub3dfbnM7CisJCQlzdHJidWZfaW5pdCgmdHAtPmRpc3BsYXksIDApOworCQl9CisJCXJldHVybjsKKwl9CisJdHAtPmN1cnJfdG90YWwgPSB0b3RhbDsKKworCS8qIG9ubHkgdXBkYXRlIHRocm91Z2hwdXQgZXZlcnkgMC41IHMgKi8KKwlpZiAobm93X25zIC0gdHAtPnByZXZfbnMgPD0gNTAwMDAwMDAwKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdlIGhhdmUgeCA9IGJ5dGVzIGFuZCB5ID0gbmFub3NlY3MuICBXZSB3YW50IHogPSBLaUIvczoKKwkgKgorCSAqCXogPSAoeCAvIDEwMjQpIC8gKHkgLyAxMDAwMDAwMDAwKQorCSAqCXogPSB4IC8geSAqIDEwMDAwMDAwMDAgLyAxMDI0CisJICoJeiA9IHggLyAoeSAqIDEwMjQgLyAxMDAwMDAwMDAwKQorCSAqCXogPSB4IC8geScKKwkgKgorCSAqIFRvIHNpbXBsaWZ5IHRoaW5ncyB3ZSdsbCBrZWVwIHRyYWNrIG9mIG1pc2Vjcywgb3IgMTAyNHRoIG9mIGEgc2VjCisJICogb2J0YWluZWQgd2l0aDoKKwkgKgorCSAqCXknID0geSAqIDEwMjQgLyAxMDAwMDAwMDAwCisJICoJeScgPSB5ICogKDJeMTAgLyAyXjQyKSAqICgyXjQyIC8gMTAwMDAwMDAwMCkKKwkgKgl5JyA9IHkgLyAyXjMyICogNDM5OAorCSAqCXknID0gKHkgKiA0Mzk4KSA+PiAzMgorCSAqLworCW1pc2VjcyA9ICgobm93X25zIC0gdHAtPnByZXZfbnMpICogNDM5OCkgPj4gMzI7CisKKwljb3VudCA9IHRvdGFsIC0gdHAtPnByZXZfdG90YWw7CisJdHAtPnByZXZfdG90YWwgPSB0b3RhbDsKKwl0cC0+cHJldl9ucyA9IG5vd19uczsKKwl0cC0+YXZnX2J5dGVzICs9IGNvdW50OworCXRwLT5hdmdfbWlzZWNzICs9IG1pc2VjczsKKwlyYXRlID0gdHAtPmF2Z19ieXRlcyAvIHRwLT5hdmdfbWlzZWNzOworCXRwLT5hdmdfYnl0ZXMgLT0gdHAtPmxhc3RfYnl0ZXNbdHAtPmlkeF07CisJdHAtPmF2Z19taXNlY3MgLT0gdHAtPmxhc3RfbWlzZWNzW3RwLT5pZHhdOworCXRwLT5sYXN0X2J5dGVzW3RwLT5pZHhdID0gY291bnQ7CisJdHAtPmxhc3RfbWlzZWNzW3RwLT5pZHhdID0gbWlzZWNzOworCXRwLT5pZHggPSAodHAtPmlkeCArIDEpICUgVFBfSURYX01BWDsKKworCXRocm91Z2hwdXRfc3RyaW5nKCZ0cC0+ZGlzcGxheSwgdG90YWwsIHJhdGUpOworCWlmIChwcm9ncmVzcy0+bGFzdF92YWx1ZSAhPSAtMSAmJiBwcm9ncmVzc191cGRhdGUpCisJCWRpc3BsYXkocHJvZ3Jlc3MsIHByb2dyZXNzLT5sYXN0X3ZhbHVlLCBOVUxMKTsKK30KKworaW50IGRpc3BsYXlfcHJvZ3Jlc3Moc3RydWN0IHByb2dyZXNzICpwcm9ncmVzcywgdW5zaWduZWQgbikKK3sKKwlyZXR1cm4gcHJvZ3Jlc3MgPyBkaXNwbGF5KHByb2dyZXNzLCBuLCBOVUxMKSA6IDA7Cit9CisKK3N0cnVjdCBwcm9ncmVzcyAqc3RhcnRfcHJvZ3Jlc3NfZGVsYXkoY29uc3QgY2hhciAqdGl0bGUsIHVuc2lnbmVkIHRvdGFsLAorCQkJCSAgICAgICB1bnNpZ25lZCBwZXJjZW50X3RyZXNob2xkLCB1bnNpZ25lZCBkZWxheSkKK3sKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gbWFsbG9jKHNpemVvZigqcHJvZ3Jlc3MpKTsKKwlpZiAoIXByb2dyZXNzKSB7CisJCS8qIHVubGlrZWx5LCBidXQgaGVyZSdzIGEgZ29vZCBmYWxsYmFjayAqLworCQlmcHJpbnRmKHN0ZGVyciwgIiVzLi4uXG4iLCB0aXRsZSk7CisJCWZmbHVzaChzdGRlcnIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcHJvZ3Jlc3MtPnRpdGxlID0gdGl0bGU7CisJcHJvZ3Jlc3MtPnRvdGFsID0gdG90YWw7CisJcHJvZ3Jlc3MtPmxhc3RfdmFsdWUgPSAtMTsKKwlwcm9ncmVzcy0+bGFzdF9wZXJjZW50ID0gLTE7CisJcHJvZ3Jlc3MtPmRlbGF5ZWRfcGVyY2VudF90cmVzaG9sZCA9IHBlcmNlbnRfdHJlc2hvbGQ7CisJcHJvZ3Jlc3MtPmRlbGF5ID0gZGVsYXk7CisJcHJvZ3Jlc3MtPnRocm91Z2hwdXQgPSBOVUxMOworCXNldF9wcm9ncmVzc19zaWduYWwoKTsKKwlyZXR1cm4gcHJvZ3Jlc3M7Cit9CisKK3N0cnVjdCBwcm9ncmVzcyAqc3RhcnRfcHJvZ3Jlc3MoY29uc3QgY2hhciAqdGl0bGUsIHVuc2lnbmVkIHRvdGFsKQoreworCXJldHVybiBzdGFydF9wcm9ncmVzc19kZWxheSh0aXRsZSwgdG90YWwsIDAsIDApOworfQorCit2b2lkIHN0b3BfcHJvZ3Jlc3Moc3RydWN0IHByb2dyZXNzICoqcF9wcm9ncmVzcykKK3sKKwlzdG9wX3Byb2dyZXNzX21zZyhwX3Byb2dyZXNzLCBfKCJkb25lIikpOworfQorCit2b2lkIHN0b3BfcHJvZ3Jlc3NfbXNnKHN0cnVjdCBwcm9ncmVzcyAqKnBfcHJvZ3Jlc3MsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gKnBfcHJvZ3Jlc3M7CisJaWYgKCFwcm9ncmVzcykKKwkJcmV0dXJuOworCSpwX3Byb2dyZXNzID0gTlVMTDsKKwlpZiAocHJvZ3Jlc3MtPmxhc3RfdmFsdWUgIT0gLTEpIHsKKwkJLyogRm9yY2UgdGhlIGxhc3QgdXBkYXRlICovCisJCWNoYXIgYnVmWzEyOF0sICpidWZwOworCQlzaXplX3QgbGVuID0gc3RybGVuKG1zZykgKyA1OworCQlzdHJ1Y3QgdGhyb3VnaHB1dCAqdHAgPSBwcm9ncmVzcy0+dGhyb3VnaHB1dDsKKworCQlidWZwID0gKGxlbiA8IHNpemVvZihidWYpKSA/IGJ1ZiA6IHhtYWxsb2MobGVuICsgMSk7CisJCWlmICh0cCkgeworCQkJdW5zaWduZWQgaW50IHJhdGUgPSAhdHAtPmF2Z19taXNlY3MgPyAwIDoKKwkJCQkJdHAtPmF2Z19ieXRlcyAvIHRwLT5hdmdfbWlzZWNzOworCQkJdGhyb3VnaHB1dF9zdHJpbmcoJnRwLT5kaXNwbGF5LCB0cC0+Y3Vycl90b3RhbCwgcmF0ZSk7CisJCX0KKwkJcHJvZ3Jlc3NfdXBkYXRlID0gMTsKKwkJeHNucHJpbnRmKGJ1ZnAsIGxlbiArIDEsICIsICVzLlxuIiwgbXNnKTsKKwkJZGlzcGxheShwcm9ncmVzcywgcHJvZ3Jlc3MtPmxhc3RfdmFsdWUsIGJ1ZnApOworCQlpZiAoYnVmICE9IGJ1ZnApCisJCQlmcmVlKGJ1ZnApOworCX0KKwljbGVhcl9wcm9ncmVzc19zaWduYWwoKTsKKwlpZiAocHJvZ3Jlc3MtPnRocm91Z2hwdXQpCisJCXN0cmJ1Zl9yZWxlYXNlKCZwcm9ncmVzcy0+dGhyb3VnaHB1dC0+ZGlzcGxheSk7CisJZnJlZShwcm9ncmVzcy0+dGhyb3VnaHB1dCk7CisJZnJlZShwcm9ncmVzcyk7Cit9CmRpZmYgLS1naXQgYS9wcm9ncmVzcy5oIGIvcHJvZ3Jlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTFlNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3Jlc3MuaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIFBST0dSRVNTX0gKKyNkZWZpbmUgUFJPR1JFU1NfSAorCitzdHJ1Y3QgcHJvZ3Jlc3M7CisKK3ZvaWQgZGlzcGxheV90aHJvdWdocHV0KHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIG9mZl90IHRvdGFsKTsKK2ludCBkaXNwbGF5X3Byb2dyZXNzKHN0cnVjdCBwcm9ncmVzcyAqcHJvZ3Jlc3MsIHVuc2lnbmVkIG4pOworc3RydWN0IHByb2dyZXNzICpzdGFydF9wcm9ncmVzcyhjb25zdCBjaGFyICp0aXRsZSwgdW5zaWduZWQgdG90YWwpOworc3RydWN0IHByb2dyZXNzICpzdGFydF9wcm9ncmVzc19kZWxheShjb25zdCBjaGFyICp0aXRsZSwgdW5zaWduZWQgdG90YWwsCisJCQkJICAgICAgIHVuc2lnbmVkIHBlcmNlbnRfdHJlc2hvbGQsIHVuc2lnbmVkIGRlbGF5KTsKK3ZvaWQgc3RvcF9wcm9ncmVzcyhzdHJ1Y3QgcHJvZ3Jlc3MgKipwcm9ncmVzcyk7Cit2b2lkIHN0b3BfcHJvZ3Jlc3NfbXNnKHN0cnVjdCBwcm9ncmVzcyAqKnByb2dyZXNzLCBjb25zdCBjaGFyICptc2cpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Byb21wdC5jIGIvcHJvbXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU0MDYzOQotLS0gL2Rldi9udWxsCisrKyBiL3Byb21wdC5jCkBAIC0wLDAgKzEsNzUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicHJvbXB0LmgiCisjaW5jbHVkZSAiY29tcGF0L3Rlcm1pbmFsLmgiCisKK3N0YXRpYyBjaGFyICpkb19hc2twYXNzKGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqcHJvbXB0KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHBhc3MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqYXJnc1szXTsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgZXJyID0gMDsKKworCWFyZ3NbMF0gPSBjbWQ7CisJYXJnc1sxXQk9IHByb21wdDsKKwlhcmdzWzJdID0gTlVMTDsKKworCXBhc3MuYXJndiA9IGFyZ3M7CisJcGFzcy5vdXQgPSAtMTsKKworCWlmIChzdGFydF9jb21tYW5kKCZwYXNzKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdHJidWZfcmVzZXQoJmJ1ZmZlcik7CisJaWYgKHN0cmJ1Zl9yZWFkKCZidWZmZXIsIHBhc3Mub3V0LCAyMCkgPCAwKQorCQllcnIgPSAxOworCisJY2xvc2UocGFzcy5vdXQpOworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZwYXNzKSkKKwkJZXJyID0gMTsKKworCWlmIChlcnIpIHsKKwkJZXJyb3IoInVuYWJsZSB0byByZWFkIGFza3Bhc3MgcmVzcG9uc2UgZnJvbSAnJXMnIiwgY21kKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCXN0cmJ1Zl9zZXRsZW4oJmJ1ZmZlciwgc3RyY3NwbihidWZmZXIuYnVmLCAiXHJcbiIpKTsKKworCXJldHVybiBidWZmZXIuYnVmOworfQorCitjaGFyICpnaXRfcHJvbXB0KGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGZsYWdzKQoreworCWNoYXIgKnIgPSBOVUxMOworCisJaWYgKGZsYWdzICYgUFJPTVBUX0FTS1BBU1MpIHsKKwkJY29uc3QgY2hhciAqYXNrcGFzczsKKworCQlhc2twYXNzID0gZ2V0ZW52KCJHSVRfQVNLUEFTUyIpOworCQlpZiAoIWFza3Bhc3MpCisJCQlhc2twYXNzID0gYXNrcGFzc19wcm9ncmFtOworCQlpZiAoIWFza3Bhc3MpCisJCQlhc2twYXNzID0gZ2V0ZW52KCJTU0hfQVNLUEFTUyIpOworCQlpZiAoYXNrcGFzcyAmJiAqYXNrcGFzcykKKwkJCXIgPSBkb19hc2twYXNzKGFza3Bhc3MsIHByb21wdCk7CisJfQorCisJaWYgKCFyKSB7CisJCWNvbnN0IGNoYXIgKmVycjsKKworCQlpZiAoZ2l0X2Vudl9ib29sKCJHSVRfVEVSTUlOQUxfUFJPTVBUIiwgMSkpIHsKKwkJCXIgPSBnaXRfdGVybWluYWxfcHJvbXB0KHByb21wdCwgZmxhZ3MgJiBQUk9NUFRfRUNITyk7CisJCQllcnIgPSBzdHJlcnJvcihlcnJubyk7CisJCX0gZWxzZSB7CisJCQllcnIgPSAidGVybWluYWwgcHJvbXB0cyBkaXNhYmxlZCI7CisJCX0KKwkJaWYgKCFyKSB7CisJCQkvKiBwcm9tcHRzIGFscmVhZHkgY29udGFpbiAiOiAiIGF0IHRoZSBlbmQgKi8KKwkJCWRpZSgiY291bGQgbm90IHJlYWQgJXMlcyIsIHByb21wdCwgZXJyKTsKKwkJfQorCX0KKwlyZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL3Byb21wdC5oIGIvcHJvbXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA0Y2NlZAotLS0gL2Rldi9udWxsCisrKyBiL3Byb21wdC5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBQUk9NUFRfSAorI2RlZmluZSBQUk9NUFRfSAorCisjZGVmaW5lIFBST01QVF9BU0tQQVNTICgxPDwwKQorI2RlZmluZSBQUk9NUFRfRUNITyAgICAoMTw8MSkKKworY2hhciAqZ2l0X3Byb21wdChjb25zdCBjaGFyICpwcm9tcHQsIGludCBmbGFncyk7CisKKyNlbmRpZiAvKiBQUk9NUFRfSCAqLwpkaWZmIC0tZ2l0IGEvcXVvdGUuYyBiL3F1b3RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU4ODRkMgotLS0gL2Rldi9udWxsCisrKyBiL3F1b3RlLmMKQEAgLTAsMCArMSw0NDIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCitpbnQgcXVvdGVfcGF0aF9mdWxseSA9IDE7CisKK3N0YXRpYyBpbmxpbmUgaW50IG5lZWRfYnNfcXVvdGUoY2hhciBjKQoreworCXJldHVybiAoYyA9PSAnXCcnIHx8IGMgPT0gJyEnKTsKK30KKworLyogSGVscCB0byBjb3B5IHRoZSB0aGluZyBwcm9wZXJseSBxdW90ZWQgZm9yIHRoZSBzaGVsbCBzYWZldHkuCisgKiBhbnkgc2luZ2xlIHF1b3RlIGlzIHJlcGxhY2VkIHdpdGggJ1wnJywgYW55IGV4Y2xhbWF0aW9uIHBvaW50CisgKiBpcyByZXBsYWNlZCB3aXRoICdcIScsIGFuZCB0aGUgd2hvbGUgdGhpbmcgaXMgZW5jbG9zZWQgaW4gYQorICogc2luZ2xlIHF1b3RlIHBhaXIuCisgKgorICogRS5nLgorICogIG9yaWdpbmFsICAgICBzcV9xdW90ZSAgICAgcmVzdWx0CisgKiAgbmFtZSAgICAgPT0+IG5hbWUgICAgICA9PT4gJ25hbWUnCisgKiAgYSBiICAgICAgPT0+IGEgYiAgICAgICA9PT4gJ2EgYicKKyAqICBhJ2IgICAgICA9PT4gYSdcJydiICAgID09PiAnYSdcJydiJworICogIGEhYiAgICAgID09PiBhJ1whJ2IgICAgPT0+ICdhJ1whJ2InCisgKi8KK3ZvaWQgc3FfcXVvdGVfYnVmKHN0cnVjdCBzdHJidWYgKmRzdCwgY29uc3QgY2hhciAqc3JjKQoreworCWNoYXIgKnRvX2ZyZWUgPSBOVUxMOworCisJaWYgKGRzdC0+YnVmID09IHNyYykKKwkJdG9fZnJlZSA9IHN0cmJ1Zl9kZXRhY2goZHN0LCBOVUxMKTsKKworCXN0cmJ1Zl9hZGRjaChkc3QsICdcJycpOworCXdoaWxlICgqc3JjKSB7CisJCXNpemVfdCBsZW4gPSBzdHJjc3BuKHNyYywgIichIik7CisJCXN0cmJ1Zl9hZGQoZHN0LCBzcmMsIGxlbik7CisJCXNyYyArPSBsZW47CisJCXdoaWxlIChuZWVkX2JzX3F1b3RlKCpzcmMpKSB7CisJCQlzdHJidWZfYWRkc3RyKGRzdCwgIidcXCIpOworCQkJc3RyYnVmX2FkZGNoKGRzdCwgKnNyYysrKTsKKwkJCXN0cmJ1Zl9hZGRjaChkc3QsICdcJycpOworCQl9CisJfQorCXN0cmJ1Zl9hZGRjaChkc3QsICdcJycpOworCWZyZWUodG9fZnJlZSk7Cit9CisKK3ZvaWQgc3FfcXVvdGVfYXJndihzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIqKiBhcmd2LCBzaXplX3QgbWF4bGVuKQoreworCWludCBpOworCisJLyogQ29weSBpbnRvIGRlc3RpbmF0aW9uIGJ1ZmZlci4gKi8KKwlzdHJidWZfZ3Jvdyhkc3QsIDI1NSk7CisJZm9yIChpID0gMDsgYXJndltpXTsgKytpKSB7CisJCXN0cmJ1Zl9hZGRjaChkc3QsICcgJyk7CisJCXNxX3F1b3RlX2J1Zihkc3QsIGFyZ3ZbaV0pOworCQlpZiAobWF4bGVuICYmIGRzdC0+bGVuID4gbWF4bGVuKQorCQkJZGllKCJUb28gbWFueSBvciBsb25nIGFyZ3VtZW50cyIpOworCX0KK30KKworc3RhdGljIGNoYXIgKnNxX2RlcXVvdGVfc3RlcChjaGFyICphcmcsIGNoYXIgKipuZXh0KQoreworCWNoYXIgKmRzdCA9IGFyZzsKKwljaGFyICpzcmMgPSBhcmc7CisJY2hhciBjOworCisJaWYgKCpzcmMgIT0gJ1wnJykKKwkJcmV0dXJuIE5VTEw7CisJZm9yICg7OykgeworCQljID0gKisrc3JjOworCQlpZiAoIWMpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGMgIT0gJ1wnJykgeworCQkJKmRzdCsrID0gYzsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIFdlIHN0ZXBwZWQgb3V0IG9mIHNxICovCisJCXN3aXRjaCAoKisrc3JjKSB7CisJCWNhc2UgJ1wwJzoKKwkJCSpkc3QgPSAwOworCQkJaWYgKG5leHQpCisJCQkJKm5leHQgPSBOVUxMOworCQkJcmV0dXJuIGFyZzsKKwkJY2FzZSAnXFwnOgorCQkJYyA9ICorK3NyYzsKKwkJCWlmIChuZWVkX2JzX3F1b3RlKGMpICYmICorK3NyYyA9PSAnXCcnKSB7CisJCQkJKmRzdCsrID0gYzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJLyogRmFsbHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCWlmICghbmV4dCB8fCAhaXNzcGFjZSgqc3JjKSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWRvIHsKKwkJCQljID0gKisrc3JjOworCQkJfSB3aGlsZSAoaXNzcGFjZShjKSk7CisJCQkqZHN0ID0gMDsKKwkJCSpuZXh0ID0gc3JjOworCQkJcmV0dXJuIGFyZzsKKwkJfQorCX0KK30KKworY2hhciAqc3FfZGVxdW90ZShjaGFyICphcmcpCit7CisJcmV0dXJuIHNxX2RlcXVvdGVfc3RlcChhcmcsIE5VTEwpOworfQorCitzdGF0aWMgaW50IHNxX2RlcXVvdGVfdG9fYXJndl9pbnRlcm5hbChjaGFyICphcmcsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKioqYXJndiwgaW50ICpuciwgaW50ICphbGxvYywKKwkJCQkgICAgICAgc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5KQoreworCWNoYXIgKm5leHQgPSBhcmc7CisKKwlpZiAoISphcmcpCisJCXJldHVybiAwOworCWRvIHsKKwkJY2hhciAqZGVxdW90ZWQgPSBzcV9kZXF1b3RlX3N0ZXAobmV4dCwgJm5leHQpOworCQlpZiAoIWRlcXVvdGVkKQorCQkJcmV0dXJuIC0xOworCQlpZiAoYXJndikgeworCQkJQUxMT0NfR1JPVygqYXJndiwgKm5yICsgMSwgKmFsbG9jKTsKKwkJCSgqYXJndilbKCpucikrK10gPSBkZXF1b3RlZDsKKwkJfQorCQlpZiAoYXJyYXkpCisJCQlhcmd2X2FycmF5X3B1c2goYXJyYXksIGRlcXVvdGVkKTsKKwl9IHdoaWxlIChuZXh0KTsKKworCXJldHVybiAwOworfQorCitpbnQgc3FfZGVxdW90ZV90b19hcmd2KGNoYXIgKmFyZywgY29uc3QgY2hhciAqKiphcmd2LCBpbnQgKm5yLCBpbnQgKmFsbG9jKQoreworCXJldHVybiBzcV9kZXF1b3RlX3RvX2FyZ3ZfaW50ZXJuYWwoYXJnLCBhcmd2LCBuciwgYWxsb2MsIE5VTEwpOworfQorCitpbnQgc3FfZGVxdW90ZV90b19hcmd2X2FycmF5KGNoYXIgKmFyZywgc3RydWN0IGFyZ3ZfYXJyYXkgKmFycmF5KQoreworCXJldHVybiBzcV9kZXF1b3RlX3RvX2FyZ3ZfaW50ZXJuYWwoYXJnLCBOVUxMLCBOVUxMLCBOVUxMLCBhcnJheSk7Cit9CisKKy8qIDEgbWVhbnM6IHF1b3RlIGFzIG9jdGFsCisgKiAwIG1lYW5zOiBxdW90ZSBhcyBvY3RhbCBpZiAocXVvdGVfcGF0aF9mdWxseSkKKyAqIC0xIG1lYW5zOiBuZXZlciBxdW90ZQorICogYzogcXVvdGUgYXMgIlxcYyIKKyAqLworI2RlZmluZSBYOCh4KSAgIHgsIHgsIHgsIHgsIHgsIHgsIHgsIHgKKyNkZWZpbmUgWDE2KHgpICBYOCh4KSwgWDgoeCkKK3N0YXRpYyBzaWduZWQgY2hhciBjb25zdCBzcV9sb29rdXBbMjU2XSA9IHsKKwkvKiAgICAgICAgICAgMCAgICAxICAgIDIgICAgMyAgICA0ICAgIDUgICAgNiAgICA3ICovCisJLyogMHgwMCAqLyAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICdhJywKKwkvKiAweDA4ICovICdiJywgJ3QnLCAnbicsICd2JywgJ2YnLCAncicsICAgMSwgICAxLAorCS8qIDB4MTAgKi8gWDE2KDEpLAorCS8qIDB4MjAgKi8gIC0xLCAgLTEsICciJywgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsCisJLyogMHgyOCAqLyBYMTYoLTEpLCBYMTYoLTEpLCBYMTYoLTEpLAorCS8qIDB4NTggKi8gIC0xLCAgLTEsICAtMSwgIC0xLCdcXCcsICAtMSwgIC0xLCAgLTEsCisJLyogMHg2MCAqLyBYMTYoLTEpLCBYOCgtMSksCisJLyogMHg3OCAqLyAgLTEsICAtMSwgIC0xLCAgLTEsICAtMSwgIC0xLCAgLTEsICAgMSwKKwkvKiAweDgwICovIC8qIHNldCB0byAwICovCit9OworCitzdGF0aWMgaW5saW5lIGludCBzcV9tdXN0X3F1b3RlKGNoYXIgYykKK3sKKwlyZXR1cm4gc3FfbG9va3VwWyh1bnNpZ25lZCBjaGFyKWNdICsgcXVvdGVfcGF0aF9mdWxseSA+IDA7Cit9CisKKy8qIHJldHVybnMgdGhlIGxvbmdlc3QgcHJlZml4IG5vdCBuZWVkaW5nIGEgcXVvdGUgdXAgdG8gbWF4bGVuIGlmIHBvc2l0aXZlLgorICAgVGhpcyBzdG9wcyBhdCB0aGUgZmlyc3QgXDAgYmVjYXVzZSBpdCdzIG1hcmtlZCBhcyBhIGNoYXJhY3RlciBuZWVkaW5nIGFuCisgICBlc2NhcGUgKi8KK3N0YXRpYyBzaXplX3QgbmV4dF9xdW90ZV9wb3MoY29uc3QgY2hhciAqcywgc3NpemVfdCBtYXhsZW4pCit7CisJc2l6ZV90IGxlbjsKKwlpZiAobWF4bGVuIDwgMCkgeworCQlmb3IgKGxlbiA9IDA7ICFzcV9tdXN0X3F1b3RlKHNbbGVuXSk7IGxlbisrKTsKKwl9IGVsc2UgeworCQlmb3IgKGxlbiA9IDA7IGxlbiA8IG1heGxlbiAmJiAhc3FfbXVzdF9xdW90ZShzW2xlbl0pOyBsZW4rKyk7CisJfQorCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBDLXN0eWxlIG5hbWUgcXVvdGluZy4KKyAqCisgKiAoMSkgaWYgc2IgYW5kIGZwIGFyZSBib3RoIE5VTEwsIGluc3BlY3QgdGhlIGlucHV0IG5hbWUgYW5kIGNvdW50cyB0aGUKKyAqICAgICBudW1iZXIgb2YgYnl0ZXMgdGhhdCBhcmUgbmVlZGVkIHRvIGhvbGQgY19zdHlsZSBxdW90ZWQgdmVyc2lvbiBvZiBuYW1lLAorICogICAgIGNvdW50aW5nIHRoZSBkb3VibGUgcXVvdGVzIGFyb3VuZCBpdCBidXQgbm90IHRlcm1pbmF0aW5nIE5VTCwgYW5kCisgKiAgICAgcmV0dXJucyBpdC4KKyAqICAgICBIb3dldmVyLCBpZiBuYW1lIGRvZXMgbm90IG5lZWQgY19zdHlsZSBxdW90aW5nLCBpdCByZXR1cm5zIDAuCisgKgorICogKDIpIGlmIHNiIG9yIGZwIGFyZSBub3QgTlVMTCwgaXQgZW1pdHMgdGhlIGNfc3R5bGUgcXVvdGVkIHZlcnNpb24KKyAqICAgICBvZiBuYW1lLCBlbmNsb3NlZCB3aXRoIGRvdWJsZSBxdW90ZXMgaWYgYXNrZWQgYW5kIG5lZWRlZCBvbmx5LgorICogICAgIFJldHVybiB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBpbiAoMSkuCisgKi8KK3N0YXRpYyBzaXplX3QgcXVvdGVfY19zdHlsZV9jb3VudGVkKGNvbnN0IGNoYXIgKm5hbWUsIHNzaXplX3QgbWF4bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwLCBpbnQgbm9fZHEpCit7CisjdW5kZWYgRU1JVAorI2RlZmluZSBFTUlUKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoc2IpIHN0cmJ1Zl9hZGRjaChzYiwgKGMpKTsgICAgICAgICAgXAorCQlpZiAoZnApIGZwdXRjKChjKSwgZnApOyAgICAgICAgICAgICAgICAgXAorCQljb3VudCsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIEVNSVRCVUYocywgbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChzYikgc3RyYnVmX2FkZChzYiwgKHMpLCAobCkpOyAgICAgICBcCisJCWlmIChmcCkgZndyaXRlKChzKSwgKGwpLCAxLCBmcCk7ICAgICAgICBcCisJCWNvdW50ICs9IChsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSB3aGlsZSAoMCkKKworCXNpemVfdCBsZW4sIGNvdW50ID0gMDsKKwljb25zdCBjaGFyICpwID0gbmFtZTsKKworCWZvciAoOzspIHsKKwkJaW50IGNoOworCisJCWxlbiA9IG5leHRfcXVvdGVfcG9zKHAsIG1heGxlbik7CisJCWlmIChsZW4gPT0gbWF4bGVuIHx8IChtYXhsZW4gPCAwICYmICFwW2xlbl0pKQorCQkJYnJlYWs7CisKKwkJaWYgKCFub19kcSAmJiBwID09IG5hbWUpCisJCQlFTUlUKCciJyk7CisKKwkJRU1JVEJVRihwLCBsZW4pOworCQlFTUlUKCdcXCcpOworCQlwICs9IGxlbjsKKwkJY2ggPSAodW5zaWduZWQgY2hhcikqcCsrOworCQlpZiAobWF4bGVuID49IDApCisJCQltYXhsZW4gLT0gbGVuICsgMTsKKwkJaWYgKHNxX2xvb2t1cFtjaF0gPj0gJyAnKSB7CisJCQlFTUlUKHNxX2xvb2t1cFtjaF0pOworCQl9IGVsc2UgeworCQkJRU1JVCgoKGNoID4+IDYpICYgMDMpICsgJzAnKTsKKwkJCUVNSVQoKChjaCA+PiAzKSAmIDA3KSArICcwJyk7CisJCQlFTUlUKCgoY2ggPj4gMCkgJiAwNykgKyAnMCcpOworCQl9CisJfQorCisJRU1JVEJVRihwLCBsZW4pOworCWlmIChwID09IG5hbWUpICAgLyogbm8gZW5kaW5nIHF1b3RlIG5lZWRlZCAqLworCQlyZXR1cm4gMDsKKworCWlmICghbm9fZHEpCisJCUVNSVQoJyInKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3NpemVfdCBxdW90ZV9jX3N0eWxlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCwgaW50IG5vZHEpCit7CisJcmV0dXJuIHF1b3RlX2Nfc3R5bGVfY291bnRlZChuYW1lLCAtMSwgc2IsIGZwLCBub2RxKTsKK30KKwordm9pZCBxdW90ZV90d29fY19zdHlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbm9kcSkKK3sKKwlpZiAocXVvdGVfY19zdHlsZShwcmVmaXgsIE5VTEwsIE5VTEwsIDApIHx8CisJICAgIHF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgTlVMTCwgMCkpIHsKKwkJaWYgKCFub2RxKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnIicpOworCQlxdW90ZV9jX3N0eWxlKHByZWZpeCwgc2IsIE5VTEwsIDEpOworCQlxdW90ZV9jX3N0eWxlKHBhdGgsIHNiLCBOVUxMLCAxKTsKKwkJaWYgKCFub2RxKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnIicpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHByZWZpeCk7CisJCXN0cmJ1Zl9hZGRzdHIoc2IsIHBhdGgpOworCX0KK30KKwordm9pZCB3cml0ZV9uYW1lX3F1b3RlZChjb25zdCBjaGFyICpuYW1lLCBGSUxFICpmcCwgaW50IHRlcm1pbmF0b3IpCit7CisJaWYgKHRlcm1pbmF0b3IpIHsKKwkJcXVvdGVfY19zdHlsZShuYW1lLCBOVUxMLCBmcCwgMCk7CisJfSBlbHNlIHsKKwkJZnB1dHMobmFtZSwgZnApOworCX0KKwlmcHV0Yyh0ZXJtaW5hdG9yLCBmcCk7Cit9CisKK3ZvaWQgd3JpdGVfbmFtZV9xdW90ZWRfcmVsYXRpdmUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCUZJTEUgKmZwLCBpbnQgdGVybWluYXRvcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwluYW1lID0gcmVsYXRpdmVfcGF0aChuYW1lLCBwcmVmaXgsICZzYik7CisJd3JpdGVfbmFtZV9xdW90ZWQobmFtZSwgZnAsIHRlcm1pbmF0b3IpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworLyogcXVvdGUgcGF0aCBhcyByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gcHJlZml4ICovCitjaGFyICpxdW90ZV9wYXRoX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIHN0cnVjdCBzdHJidWYgKm91dCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqcmVsID0gcmVsYXRpdmVfcGF0aChpbiwgcHJlZml4LCAmc2IpOworCXN0cmJ1Zl9yZXNldChvdXQpOworCXF1b3RlX2Nfc3R5bGVfY291bnRlZChyZWwsIHN0cmxlbihyZWwpLCBvdXQsIE5VTEwsIDApOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlyZXR1cm4gb3V0LT5idWY7Cit9CisKKy8qCisgKiBDLXN0eWxlIG5hbWUgdW5xdW90aW5nLgorICoKKyAqIFF1b3RlZCBzaG91bGQgcG9pbnQgYXQgdGhlIG9wZW5pbmcgZG91YmxlIHF1b3RlLgorICogKyBSZXR1cm5zIDAgaWYgaXQgd2FzIGFibGUgdG8gdW5xdW90ZSB0aGUgc3RyaW5nIHByb3Blcmx5LCBhbmQgYXBwZW5kcyB0aGUKKyAqICAgcmVzdWx0IGluIHRoZSBzdHJidWYgYHNiJy4KKyAqICsgUmV0dXJucyAtMSBpbiBjYXNlIG9mIGVycm9yLCBhbmQgZG9lc24ndCB0b3VjaCB0aGUgc3RyYnVmLiBUaG91Z2ggbm90ZQorICogICB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSBtZW1vcnkgaW4gdGhlIHN0cmJ1Ziwgc28gY2FsbGluZworICogICBzdHJidWZfcmVsZWFzZSBpcyBtYW5kYXRvcnkgd2hpY2hldmVyIHJlc3VsdCB1bnF1b3RlX2Nfc3R5bGUgcmV0dXJucy4KKyAqCisgKiBVcGRhdGVzIGVuZHAgcG9pbnRlciB0byBwb2ludCBhdCBvbmUgcGFzdCB0aGUgZW5kaW5nIGRvdWJsZSBxdW90ZSBpZiBnaXZlbi4KKyAqLworaW50IHVucXVvdGVfY19zdHlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcXVvdGVkLCBjb25zdCBjaGFyICoqZW5kcCkKK3sKKwlzaXplX3Qgb2xkbGVuID0gc2ItPmxlbiwgbGVuOworCWludCBjaCwgYWM7CisKKwlpZiAoKnF1b3RlZCsrICE9ICciJykKKwkJcmV0dXJuIC0xOworCisJZm9yICg7OykgeworCQlsZW4gPSBzdHJjc3BuKHF1b3RlZCwgIlwiXFwiKTsKKwkJc3RyYnVmX2FkZChzYiwgcXVvdGVkLCBsZW4pOworCQlxdW90ZWQgKz0gbGVuOworCisJCXN3aXRjaCAoKnF1b3RlZCsrKSB7CisJCSAgY2FzZSAnIic6CisJCQlpZiAoZW5kcCkKKwkJCQkqZW5kcCA9IHF1b3RlZDsKKwkJCXJldHVybiAwOworCQkgIGNhc2UgJ1xcJzoKKwkJCWJyZWFrOworCQkgIGRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJc3dpdGNoICgoY2ggPSAqcXVvdGVkKyspKSB7CisJCWNhc2UgJ2EnOiBjaCA9ICdcYSc7IGJyZWFrOworCQljYXNlICdiJzogY2ggPSAnXGInOyBicmVhazsKKwkJY2FzZSAnZic6IGNoID0gJ1xmJzsgYnJlYWs7CisJCWNhc2UgJ24nOiBjaCA9ICdcbic7IGJyZWFrOworCQljYXNlICdyJzogY2ggPSAnXHInOyBicmVhazsKKwkJY2FzZSAndCc6IGNoID0gJ1x0JzsgYnJlYWs7CisJCWNhc2UgJ3YnOiBjaCA9ICdcdic7IGJyZWFrOworCisJCWNhc2UgJ1xcJzogY2FzZSAnIic6CisJCQlicmVhazsgLyogdmVyYmF0aW0gKi8KKworCQkvKiBvY3RhbCB2YWx1ZXMgd2l0aCBmaXJzdCBkaWdpdCBvdmVyIDQgb3ZlcmZsb3cgKi8KKwkJY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6CisJCQkJCWFjID0gKChjaCAtICcwJykgPDwgNik7CisJCQlpZiAoKGNoID0gKnF1b3RlZCsrKSA8ICcwJyB8fCAnNycgPCBjaCkKKwkJCQlnb3RvIGVycm9yOworCQkJCQlhYyB8PSAoKGNoIC0gJzAnKSA8PCAzKTsKKwkJCWlmICgoY2ggPSAqcXVvdGVkKyspIDwgJzAnIHx8ICc3JyA8IGNoKQorCQkJCWdvdG8gZXJyb3I7CisJCQkJCWFjIHw9IChjaCAtICcwJyk7CisJCQkJCWNoID0gYWM7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQlnb3RvIGVycm9yOworCQkJfQorCQlzdHJidWZfYWRkY2goc2IsIGNoKTsKKwkJfQorCisgIGVycm9yOgorCXN0cmJ1Zl9zZXRsZW4oc2IsIG9sZGxlbik7CisJcmV0dXJuIC0xOworfQorCisvKiBxdW90aW5nIGFzIGEgc3RyaW5nIGxpdGVyYWwgZm9yIG90aGVyIGxhbmd1YWdlcyAqLworCit2b2lkIHBlcmxfcXVvdGVfYnVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzcmMpCit7CisJY29uc3QgY2hhciBzcSA9ICdcJyc7CisJY29uc3QgY2hhciBicSA9ICdcXCc7CisJY2hhciBjOworCisJc3RyYnVmX2FkZGNoKHNiLCBzcSk7CisJd2hpbGUgKChjID0gKnNyYysrKSkgeworCQlpZiAoYyA9PSBzcSB8fCBjID09IGJxKQorCQkJc3RyYnVmX2FkZGNoKHNiLCBicSk7CisJCXN0cmJ1Zl9hZGRjaChzYiwgYyk7CisJfQorCXN0cmJ1Zl9hZGRjaChzYiwgc3EpOworfQorCit2b2lkIHB5dGhvbl9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwljb25zdCBjaGFyIHNxID0gJ1wnJzsKKwljb25zdCBjaGFyIGJxID0gJ1xcJzsKKwljb25zdCBjaGFyIG5sID0gJ1xuJzsKKwljaGFyIGM7CisKKwlzdHJidWZfYWRkY2goc2IsIHNxKTsKKwl3aGlsZSAoKGMgPSAqc3JjKyspKSB7CisJCWlmIChjID09IG5sKSB7CisJCQlzdHJidWZfYWRkY2goc2IsIGJxKTsKKwkJCXN0cmJ1Zl9hZGRjaChzYiwgJ24nKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjID09IHNxIHx8IGMgPT0gYnEpCisJCQlzdHJidWZfYWRkY2goc2IsIGJxKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCBjKTsKKwl9CisJc3RyYnVmX2FkZGNoKHNiLCBzcSk7Cit9CisKK3ZvaWQgdGNsX3F1b3RlX2J1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqc3JjKQoreworCWNoYXIgYzsKKworCXN0cmJ1Zl9hZGRjaChzYiwgJyInKTsKKwl3aGlsZSAoKGMgPSAqc3JjKyspKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICdbJzogY2FzZSAnXSc6CisJCWNhc2UgJ3snOiBjYXNlICd9JzoKKwkJY2FzZSAnJCc6IGNhc2UgJ1xcJzogY2FzZSAnIic6CisJCQlzdHJidWZfYWRkY2goc2IsICdcXCcpOworCQlkZWZhdWx0OgorCQkJc3RyYnVmX2FkZGNoKHNiLCBjKTsKKwkJCWJyZWFrOworCQljYXNlICdcZic6CisJCQlzdHJidWZfYWRkc3RyKHNiLCAiXFxmIik7CisJCQlicmVhazsKKwkJY2FzZSAnXHInOgorCQkJc3RyYnVmX2FkZHN0cihzYiwgIlxcciIpOworCQkJYnJlYWs7CisJCWNhc2UgJ1xuJzoKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsICJcXG4iKTsKKwkJCWJyZWFrOworCQljYXNlICdcdCc6CisJCQlzdHJidWZfYWRkc3RyKHNiLCAiXFx0Iik7CisJCQlicmVhazsKKwkJY2FzZSAnXHYnOgorCQkJc3RyYnVmX2FkZHN0cihzYiwgIlxcdiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3RyYnVmX2FkZGNoKHNiLCAnIicpOworfQpkaWZmIC0tZ2l0IGEvcXVvdGUuaCBiL3F1b3RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTllMDRkMwotLS0gL2Rldi9udWxsCisrKyBiL3F1b3RlLmgKQEAgLTAsMCArMSw3MSBAQAorI2lmbmRlZiBRVU9URV9ICisjZGVmaW5lIFFVT1RFX0gKKworc3RydWN0IHN0cmJ1ZjsKKworLyogSGVscCB0byBjb3B5IHRoZSB0aGluZyBwcm9wZXJseSBxdW90ZWQgZm9yIHRoZSBzaGVsbCBzYWZldHkuCisgKiBhbnkgc2luZ2xlIHF1b3RlIGlzIHJlcGxhY2VkIHdpdGggJ1wnJywgYW55IGV4Y2xhbWF0aW9uIHBvaW50CisgKiBpcyByZXBsYWNlZCB3aXRoICdcIScsIGFuZCB0aGUgd2hvbGUgdGhpbmcgaXMgZW5jbG9zZWQgaW4gYQorICogc2luZ2xlIHF1b3RlIHBhaXIuCisgKgorICogRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgcGFzc2luZyB0aGUgcmVzdWx0IHRvIHN5c3RlbSgpIGFzIGFuCisgKiBhcmd1bWVudDoKKyAqCisgKiBzcHJpbnRmKGNtZCwgImZvb2JhciAlcyAlcyIsIHNxX3F1b3RlKGFyZzApLCBzcV9xdW90ZShhcmcxKSkKKyAqCisgKiB3b3VsZCBiZSBhcHByb3ByaWF0ZS4gIElmIHRoZSBzeXN0ZW0oKSBpcyBnb2luZyB0byBjYWxsIHNzaCB0bworICogcnVuIHRoZSBjb21tYW5kIG9uIHRoZSBvdGhlciBzaWRlOgorICoKKyAqIHNwcmludGYoY21kLCAiZ2l0LWRpZmYtdHJlZSAlcyAlcyIsIHNxX3F1b3RlKGFyZzApLCBzcV9xdW90ZShhcmcxKSk7CisgKiBzcHJpbnRmKHJjbWQsICJzc2ggJXMgJXMiLCBzcV9xdW90ZShob3N0KSwgc3FfcXVvdGUoY21kKSk7CisgKgorICogTm90ZSB0aGF0IHRoZSBhYm92ZSBleGFtcGxlcyBsZWFrIG1lbW9yeSEgIFJlbWVtYmVyIHRvIGZyZWUgcmVzdWx0IGZyb20KKyAqIHNxX3F1b3RlKCkgaW4gYSByZWFsIGFwcGxpY2F0aW9uLgorICoKKyAqIHNxX3F1b3RlX2J1ZigpIHdyaXRlcyB0byBhbiBleGlzdGluZyBidWZmZXIgb2Ygc3BlY2lmaWVkIHNpemU7IGl0CisgKiB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gd3JpdHRlbgorICogZXhjbHVkaW5nIHRoZSBmaW5hbCBudWxsIHJlZ2FyZGxlc3Mgb2YgdGhlIGJ1ZmZlciBzaXplLgorICovCisKK2V4dGVybiB2b2lkIHNxX3F1b3RlX2J1ZihzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKnNyYyk7CitleHRlcm4gdm9pZCBzcV9xdW90ZV9hcmd2KHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqKmFyZ3YsIHNpemVfdCBtYXhsZW4pOworCisvKiBUaGlzIHVud3JhcHMgd2hhdCBzcV9xdW90ZSgpIHByb2R1Y2VzIGluIHBsYWNlLCBidXQgcmV0dXJucworICogTlVMTCBpZiB0aGUgaW5wdXQgZG9lcyBub3QgbG9vayBsaWtlIHdoYXQgc3FfcXVvdGUgd291bGQgaGF2ZQorICogcHJvZHVjZWQuCisgKi8KK2V4dGVybiBjaGFyICpzcV9kZXF1b3RlKGNoYXIgKik7CisKKy8qCisgKiBTYW1lIGFzIHRoZSBhYm92ZSwgYnV0IGNhbiBiZSB1c2VkIHRvIHVud3JhcCBtYW55IGFyZ3VtZW50cyBpbiB0aGUKKyAqIHNhbWUgc3RyaW5nIHNlcGFyYXRlZCBieSBzcGFjZS4gTGlrZSBzcV9xdW90ZSwgaXQgd29ya3MgaW4gcGxhY2UsCisgKiBtb2RpZnlpbmcgYXJnIGFuZCBhcHBlbmRpbmcgcG9pbnRlcnMgaW50byBpdCB0byBhcmd2LgorICovCitleHRlcm4gaW50IHNxX2RlcXVvdGVfdG9fYXJndihjaGFyICphcmcsIGNvbnN0IGNoYXIgKioqYXJndiwgaW50ICpuciwgaW50ICphbGxvYyk7CisKKy8qCisgKiBTYW1lIGFzIGFib3ZlLCBidXQgc3RvcmUgdGhlIHVucXVvdGVkIHN0cmluZ3MgaW4gYW4gYXJndl9hcnJheS4gV2Ugd2lsbAorICogc3RpbGwgbW9kaWZ5IGFyZyBpbiBwbGFjZSwgYnV0IHVubGlrZSBzcV9kZXF1b3RlX3RvX2FyZ3YsIHRoZSBhcmd2X2FycmF5CisgKiB3aWxsIGR1cGxpY2F0ZSBhbmQgdGFrZSBvd25lcnNoaXAgb2YgdGhlIHN0cmluZ3MuCisgKi8KK3N0cnVjdCBhcmd2X2FycmF5OworZXh0ZXJuIGludCBzcV9kZXF1b3RlX3RvX2FyZ3ZfYXJyYXkoY2hhciAqYXJnLCBzdHJ1Y3QgYXJndl9hcnJheSAqKTsKKworZXh0ZXJuIGludCB1bnF1b3RlX2Nfc3R5bGUoc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBjaGFyICpxdW90ZWQsIGNvbnN0IGNoYXIgKiplbmRwKTsKK2V4dGVybiBzaXplX3QgcXVvdGVfY19zdHlsZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3RyYnVmICosIEZJTEUgKiwgaW50IG5vX2RxKTsKK2V4dGVybiB2b2lkIHF1b3RlX3R3b19jX3N0eWxlKHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisKK2V4dGVybiB2b2lkIHdyaXRlX25hbWVfcXVvdGVkKGNvbnN0IGNoYXIgKm5hbWUsIEZJTEUgKiwgaW50IHRlcm1pbmF0b3IpOworZXh0ZXJuIHZvaWQgd3JpdGVfbmFtZV9xdW90ZWRfcmVsYXRpdmUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcHJlZml4LAorCQlGSUxFICpmcCwgaW50IHRlcm1pbmF0b3IpOworCisvKiBxdW90ZSBwYXRoIGFzIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBwcmVmaXggKi8KK2V4dGVybiBjaGFyICpxdW90ZV9wYXRoX3JlbGF0aXZlKGNvbnN0IGNoYXIgKmluLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgIHN0cnVjdCBzdHJidWYgKm91dCk7CisKKy8qIHF1b3RpbmcgYXMgYSBzdHJpbmcgbGl0ZXJhbCBmb3Igb3RoZXIgbGFuZ3VhZ2VzICovCitleHRlcm4gdm9pZCBwZXJsX3F1b3RlX2J1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqc3JjKTsKK2V4dGVybiB2b2lkIHB5dGhvbl9xdW90ZV9idWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnNyYyk7CitleHRlcm4gdm9pZCB0Y2xfcXVvdGVfYnVmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzcmMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3JlYWNoYWJsZS5jIGIvcmVhY2hhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2MTZkNAotLS0gL2Rldi9udWxsCisrKyBiL3JlYWNoYWJsZS5jCkBAIC0wLDAgKzEsMjA4IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgInJlYWNoYWJsZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgImxpc3Qtb2JqZWN0cy5oIgorCitzdHJ1Y3QgY29ubmVjdGl2aXR5X3Byb2dyZXNzIHsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzOworCXVuc2lnbmVkIGxvbmcgY291bnQ7Cit9OworCitzdGF0aWMgdm9pZCB1cGRhdGVfcHJvZ3Jlc3Moc3RydWN0IGNvbm5lY3Rpdml0eV9wcm9ncmVzcyAqY3ApCit7CisJY3AtPmNvdW50Kys7CisJaWYgKChjcC0+Y291bnQgJiAxMDIzKSA9PSAwKQorCQlkaXNwbGF5X3Byb2dyZXNzKGNwLT5wcm9ncmVzcywgY3AtPmNvdW50KTsKK30KKworc3RhdGljIGludCBhZGRfb25lX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gKnJldnMgPSAoc3RydWN0IHJldl9pbmZvICopY2JfZGF0YTsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisKKwlpZiAoKGZsYWcgJiBSRUZfSVNTWU1SRUYpICYmIChmbGFnICYgUkVGX0lTQlJPS0VOKSkgeworCQl3YXJuaW5nKCJzeW1ib2xpYyByZWYgaXMgZGFuZ2xpbmc6ICVzIiwgcGF0aCk7CisJCXJldHVybiAwOworCX0KKworCW9iamVjdCA9IHBhcnNlX29iamVjdF9vcl9kaWUob2lkLT5oYXNoLCBwYXRoKTsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCAiIik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSB0cmF2ZXJzYWwgd2lsbCBoYXZlIGFscmVhZHkgbWFya2VkIHVzIGFzIFNFRU4sIHNvIHdlCisgKiBvbmx5IG5lZWQgdG8gaGFuZGxlIGFueSBwcm9ncmVzcyByZXBvcnRpbmcgaGVyZS4KKyAqLworc3RhdGljIHZvaWQgbWFya19vYmplY3Qoc3RydWN0IG9iamVjdCAqb2JqLCBjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLAorCQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSkKK3sKKwl1cGRhdGVfcHJvZ3Jlc3MoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfY29tbWl0KHN0cnVjdCBjb21taXQgKmMsIHZvaWQgKmRhdGEpCit7CisJbWFya19vYmplY3QoJmMtPm9iamVjdCwgTlVMTCwgTlVMTCwgZGF0YSk7Cit9CisKK3N0cnVjdCByZWNlbnRfZGF0YSB7CisJc3RydWN0IHJldl9pbmZvICpyZXZzOworCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOworfTsKKworc3RhdGljIHZvaWQgYWRkX3JlY2VudF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbXRpbWUsCisJCQkgICAgICBzdHJ1Y3QgcmVjZW50X2RhdGEgKmRhdGEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCWlmIChtdGltZSA8PSBkYXRhLT50aW1lc3RhbXApCisJCXJldHVybjsKKworCS8qCisJICogV2UgZG8gbm90IHdhbnQgdG8gY2FsbCBwYXJzZV9vYmplY3QgaGVyZSwgYmVjYXVzZQorCSAqIGluZmxhdGluZyBibG9icyBhbmQgdHJlZXMgY291bGQgYmUgdmVyeSBleHBlbnNpdmUuCisJICogSG93ZXZlciwgd2UgZG8gbmVlZCB0byBrbm93IHRoZSBjb3JyZWN0IHR5cGUgZm9yCisJICogbGF0ZXIgcHJvY2Vzc2luZywgYW5kIHRoZSByZXZpc2lvbiBtYWNoaW5lcnkgZXhwZWN0cworCSAqIGNvbW1pdHMgYW5kIHRhZ3MgdG8gaGF2ZSBiZWVuIHBhcnNlZC4KKwkgKi8KKwl0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlpZiAodHlwZSA8IDApCisJCWRpZSgidW5hYmxlIHRvIGdldCBvYmplY3QgaW5mbyBmb3IgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE9CSl9UQUc6CisJY2FzZSBPQkpfQ09NTUlUOgorCQlvYmogPSBwYXJzZV9vYmplY3Rfb3JfZGllKHNoYTEsIE5VTEwpOworCQlicmVhazsKKwljYXNlIE9CSl9UUkVFOgorCQlvYmogPSAoc3RydWN0IG9iamVjdCAqKWxvb2t1cF90cmVlKHNoYTEpOworCQlicmVhazsKKwljYXNlIE9CSl9CTE9COgorCQlvYmogPSAoc3RydWN0IG9iamVjdCAqKWxvb2t1cF9ibG9iKHNoYTEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoInVua25vd24gb2JqZWN0IHR5cGUgZm9yICVzOiAlcyIsCisJCSAgICBzaGExX3RvX2hleChzaGExKSwgdHlwZW5hbWUodHlwZSkpOworCX0KKworCWlmICghb2JqKQorCQlkaWUoInVuYWJsZSB0byBsb29rdXAgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisKKwlhZGRfcGVuZGluZ19vYmplY3QoZGF0YS0+cmV2cywgb2JqLCAiIik7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3JlY2VudF9sb29zZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChzaGExKTsKKworCWlmIChvYmogJiYgb2JqLT5mbGFncyAmIFNFRU4pCisJCXJldHVybiAwOworCisJaWYgKHN0YXQocGF0aCwgJnN0KSA8IDApIHsKKwkJLyoKKwkJICogSXQncyBPSyBpZiBhbiBvYmplY3Qgd2VudCBhd2F5IGR1cmluZyBvdXIgaXRlcmF0aW9uOyB0aGlzCisJCSAqIGNvdWxkIGJlIGR1ZSB0byBhIHNpbXVsdGFuZW91cyByZXBhY2suIEJ1dCBhbnl0aGluZyBlbHNlCisJCSAqIHdlIHNob3VsZCBhYm9ydCwgc2luY2Ugd2UgbWlnaHQgdGhlbiBmYWlsIHRvIG1hcmsgb2JqZWN0cworCQkgKiB3aGljaCBzaG91bGQgbm90IGJlIHBydW5lZC4KKwkJICovCisJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gc3RhdCAlczogJXMiLAorCQkJICAgICBzaGExX3RvX2hleChzaGExKSwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisKKwlhZGRfcmVjZW50X29iamVjdChzaGExLCBzdC5zdF9tdGltZSwgZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3JlY2VudF9wYWNrZWQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgICAgc3RydWN0IHBhY2tlZF9naXQgKnAsIHVpbnQzMl90IHBvcywKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBsb29rdXBfb2JqZWN0KHNoYTEpOworCisJaWYgKG9iaiAmJiBvYmotPmZsYWdzICYgU0VFTikKKwkJcmV0dXJuIDA7CisJYWRkX3JlY2VudF9vYmplY3Qoc2hhMSwgcC0+bXRpbWUsIGRhdGEpOworCXJldHVybiAwOworfQorCitpbnQgYWRkX3Vuc2Vlbl9yZWNlbnRfb2JqZWN0c190b190cmF2ZXJzYWwoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCkKK3sKKwlzdHJ1Y3QgcmVjZW50X2RhdGEgZGF0YTsKKwlpbnQgcjsKKworCWRhdGEucmV2cyA9IHJldnM7CisJZGF0YS50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisKKwlyID0gZm9yX2VhY2hfbG9vc2Vfb2JqZWN0KGFkZF9yZWNlbnRfbG9vc2UsICZkYXRhLAorCQkJCSAgRk9SX0VBQ0hfT0JKRUNUX0xPQ0FMX09OTFkpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyZXR1cm4gZm9yX2VhY2hfcGFja2VkX29iamVjdChhZGRfcmVjZW50X3BhY2tlZCwgJmRhdGEsCisJCQkJICAgICAgRk9SX0VBQ0hfT0JKRUNUX0xPQ0FMX09OTFkpOworfQorCit2b2lkIG1hcmtfcmVhY2hhYmxlX29iamVjdHMoc3RydWN0IHJldl9pbmZvICpyZXZzLCBpbnQgbWFya19yZWZsb2csCisJCQkgICAgdW5zaWduZWQgbG9uZyBtYXJrX3JlY2VudCwKKwkJCSAgICBzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzKQoreworCXN0cnVjdCBjb25uZWN0aXZpdHlfcHJvZ3Jlc3MgY3A7CisKKwkvKgorCSAqIFNldCB1cCByZXZpc2lvbiBwYXJzaW5nLCBhbmQgbWFyayB1cyBhcyBiZWluZyBpbnRlcmVzdGVkCisJICogaW4gYWxsIG9iamVjdCB0eXBlcywgbm90IGp1c3QgY29tbWl0cy4KKwkgKi8KKwlyZXZzLT50YWdfb2JqZWN0cyA9IDE7CisJcmV2cy0+YmxvYl9vYmplY3RzID0gMTsKKwlyZXZzLT50cmVlX29iamVjdHMgPSAxOworCisJLyogQWRkIGFsbCByZWZzIGZyb20gdGhlIGluZGV4IGZpbGUgKi8KKwlhZGRfaW5kZXhfb2JqZWN0c190b19wZW5kaW5nKHJldnMsIDApOworCisJLyogQWRkIGFsbCBleHRlcm5hbCByZWZzICovCisJZm9yX2VhY2hfcmVmKGFkZF9vbmVfcmVmLCByZXZzKTsKKworCS8qIGRldGFjaGVkIEhFQUQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsaXN0IGFib3ZlICovCisJaGVhZF9yZWYoYWRkX29uZV9yZWYsIHJldnMpOworCisJLyogQWRkIGFsbCByZWZsb2cgaW5mbyAqLworCWlmIChtYXJrX3JlZmxvZykKKwkJYWRkX3JlZmxvZ3NfdG9fcGVuZGluZyhyZXZzLCAwKTsKKworCWNwLnByb2dyZXNzID0gcHJvZ3Jlc3M7CisJY3AuY291bnQgPSAwOworCisJLyoKKwkgKiBTZXQgdXAgdGhlIHJldmlzaW9uIHdhbGsgLSB0aGlzIHdpbGwgbW92ZSBhbGwgY29tbWl0cworCSAqIGZyb20gdGhlIHBlbmRpbmcgbGlzdCB0byB0aGUgY29tbWl0IHdhbGtpbmcgbGlzdC4KKwkgKi8KKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisJdHJhdmVyc2VfY29tbWl0X2xpc3QocmV2cywgbWFya19jb21taXQsIG1hcmtfb2JqZWN0LCAmY3ApOworCisJaWYgKG1hcmtfcmVjZW50KSB7CisJCXJldnMtPmlnbm9yZV9taXNzaW5nX2xpbmtzID0gMTsKKwkJaWYgKGFkZF91bnNlZW5fcmVjZW50X29iamVjdHNfdG9fdHJhdmVyc2FsKHJldnMsIG1hcmtfcmVjZW50KSkKKwkJCWRpZSgidW5hYmxlIHRvIG1hcmsgcmVjZW50IG9iamVjdHMiKTsKKwkJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhyZXZzKSkKKwkJCWRpZSgicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKTsKKwkJdHJhdmVyc2VfY29tbWl0X2xpc3QocmV2cywgbWFya19jb21taXQsIG1hcmtfb2JqZWN0LCAmY3ApOworCX0KKworCWRpc3BsYXlfcHJvZ3Jlc3MoY3AucHJvZ3Jlc3MsIGNwLmNvdW50KTsKK30KZGlmZiAtLWdpdCBhL3JlYWNoYWJsZS5oIGIvcmVhY2hhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzZWZjMwotLS0gL2Rldi9udWxsCisrKyBiL3JlYWNoYWJsZS5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgUkVBQ0hFQUJMRV9ICisjZGVmaW5lIFJFQUNIRUFCTEVfSAorCitzdHJ1Y3QgcHJvZ3Jlc3M7CitleHRlcm4gaW50IGFkZF91bnNlZW5fcmVjZW50X29iamVjdHNfdG9fdHJhdmVyc2FsKHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJCSAgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXApOworZXh0ZXJuIHZvaWQgbWFya19yZWFjaGFibGVfb2JqZWN0cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGludCBtYXJrX3JlZmxvZywKKwkJCQkgICB1bnNpZ25lZCBsb25nIG1hcmtfcmVjZW50LCBzdHJ1Y3QgcHJvZ3Jlc3MgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVhZC1jYWNoZS5jIGIvcmVhZC1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NjE2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWFkLWNhY2hlLmMKQEAgLTAsMCArMSwyMzAzIEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjZGVmaW5lIE5PX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJyZXNvbHZlLXVuZG8uaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ2YXJpbnQuaCIKKyNpbmNsdWRlICJzcGxpdC1pbmRleC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVmcmVzaF9jYWNoZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IG9wdGlvbnMpOworCisvKiBNYXNrIGZvciB0aGUgbmFtZSBsZW5ndGggaW4gY2VfZmxhZ3MgaW4gdGhlIG9uLWRpc2sgaW5kZXggKi8KKworI2RlZmluZSBDRV9OQU1FTUFTSyAgKDB4MGZmZikKKworLyogSW5kZXggZXh0ZW5zaW9ucy4KKyAqCisgKiBUaGUgZmlyc3QgbGV0dGVyIHNob3VsZCBiZSAnQScuLidaJyBmb3IgZXh0ZW5zaW9ucyB0aGF0IGFyZSBub3QKKyAqIG5lY2Vzc2FyeSBmb3IgYSBjb3JyZWN0IG9wZXJhdGlvbiAoaS5lLiBvcHRpbWl6YXRpb24gZGF0YSkuCisgKiBXaGVuIG5ldyBleHRlbnNpb25zIGFyZSBhZGRlZCB0aGF0IF9uZWVkc18gdG8gYmUgdW5kZXJzdG9vZCBpbgorICogb3JkZXIgdG8gY29ycmVjdGx5IGludGVycHJldCB0aGUgaW5kZXggZmlsZSwgcGljayBjaGFyYWN0ZXIgdGhhdAorICogaXMgb3V0c2lkZSB0aGUgcmFuZ2UsIHRvIGNhdXNlIHRoZSByZWFkZXIgdG8gYWJvcnQuCisgKi8KKworI2RlZmluZSBDQUNIRV9FWFQocykgKCAoc1swXTw8MjQpfChzWzFdPDwxNil8KHNbMl08PDgpfChzWzNdKSApCisjZGVmaW5lIENBQ0hFX0VYVF9UUkVFIDB4NTQ1MjQ1NDUJLyogIlRSRUUiICovCisjZGVmaW5lIENBQ0hFX0VYVF9SRVNPTFZFX1VORE8gMHg1MjQ1NTU0MyAvKiAiUkVVQyIgKi8KKyNkZWZpbmUgQ0FDSEVfRVhUX0xJTksgMHg2YzY5NmU2YgkgIC8qICJsaW5rIiAqLworI2RlZmluZSBDQUNIRV9FWFRfVU5UUkFDS0VEIDB4NTU0RTU0NTIJICAvKiAiVU5UUiIgKi8KKworLyogY2hhbmdlcyB0aGF0IGNhbiBiZSBrZXB0IGluICRHSVRfRElSL2luZGV4IChiYXNpY2FsbHkgYWxsIGV4dGVuc2lvbnMpICovCisjZGVmaW5lIEVYVE1BU0sgKFJFU09MVkVfVU5ET19DSEFOR0VEIHwgQ0FDSEVfVFJFRV9DSEFOR0VEIHwgXAorCQkgQ0VfRU5UUllfQURERUQgfCBDRV9FTlRSWV9SRU1PVkVEIHwgQ0VfRU5UUllfQ0hBTkdFRCB8IFwKKwkJIFNQTElUX0lOREVYX09SREVSRUQgfCBVTlRSQUNLRURfQ0hBTkdFRCkKKworc3RydWN0IGluZGV4X3N0YXRlIHRoZV9pbmRleDsKK3N0YXRpYyBjb25zdCBjaGFyICphbHRlcm5hdGVfaW5kZXhfb3V0cHV0OworCitzdGF0aWMgdm9pZCBzZXRfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuciwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlpc3RhdGUtPmNhY2hlW25yXSA9IGNlOworCWFkZF9uYW1lX2hhc2goaXN0YXRlLCBjZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcGxhY2VfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuciwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCA9IGlzdGF0ZS0+Y2FjaGVbbnJdOworCisJcmVwbGFjZV9pbmRleF9lbnRyeV9pbl9iYXNlKGlzdGF0ZSwgb2xkLCBjZSk7CisJcmVtb3ZlX25hbWVfaGFzaChpc3RhdGUsIG9sZCk7CisJZnJlZShvbGQpOworCXNldF9pbmRleF9lbnRyeShpc3RhdGUsIG5yLCBjZSk7CisJY2UtPmNlX2ZsYWdzIHw9IENFX1VQREFURV9JTl9CQVNFOworCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBDRV9FTlRSWV9DSEFOR0VEOworfQorCit2b2lkIHJlbmFtZV9pbmRleF9lbnRyeV9hdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgaW50IG5yLCBjb25zdCBjaGFyICpuZXdfbmFtZSkKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCA9IGlzdGF0ZS0+Y2FjaGVbbnJdLCAqbmV3OworCWludCBuYW1lbGVuID0gc3RybGVuKG5ld19uYW1lKTsKKworCW5ldyA9IHhtYWxsb2MoY2FjaGVfZW50cnlfc2l6ZShuYW1lbGVuKSk7CisJY29weV9jYWNoZV9lbnRyeShuZXcsIG9sZCk7CisJbmV3LT5jZV9mbGFncyAmPSB+Q0VfSEFTSEVEOworCW5ldy0+Y2VfbmFtZWxlbiA9IG5hbWVsZW47CisJbmV3LT5pbmRleCA9IDA7CisJbWVtY3B5KG5ldy0+bmFtZSwgbmV3X25hbWUsIG5hbWVsZW4gKyAxKTsKKworCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKGlzdGF0ZSwgb2xkLT5uYW1lKTsKKwl1bnRyYWNrZWRfY2FjaGVfcmVtb3ZlX2Zyb21faW5kZXgoaXN0YXRlLCBvbGQtPm5hbWUpOworCXJlbW92ZV9pbmRleF9lbnRyeV9hdChpc3RhdGUsIG5yKTsKKwlhZGRfaW5kZXhfZW50cnkoaXN0YXRlLCBuZXcsIEFERF9DQUNIRV9PS19UT19BRER8QUREX0NBQ0hFX09LX1RPX1JFUExBQ0UpOworfQorCit2b2lkIGZpbGxfc3RhdF9kYXRhKHN0cnVjdCBzdGF0X2RhdGEgKnNkLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJc2QtPnNkX2N0aW1lLnNlYyA9ICh1bnNpZ25lZCBpbnQpc3QtPnN0X2N0aW1lOworCXNkLT5zZF9tdGltZS5zZWMgPSAodW5zaWduZWQgaW50KXN0LT5zdF9tdGltZTsKKwlzZC0+c2RfY3RpbWUubnNlYyA9IFNUX0NUSU1FX05TRUMoKnN0KTsKKwlzZC0+c2RfbXRpbWUubnNlYyA9IFNUX01USU1FX05TRUMoKnN0KTsKKwlzZC0+c2RfZGV2ID0gc3QtPnN0X2RldjsKKwlzZC0+c2RfaW5vID0gc3QtPnN0X2lubzsKKwlzZC0+c2RfdWlkID0gc3QtPnN0X3VpZDsKKwlzZC0+c2RfZ2lkID0gc3QtPnN0X2dpZDsKKwlzZC0+c2Rfc2l6ZSA9IHN0LT5zdF9zaXplOworfQorCitpbnQgbWF0Y2hfc3RhdF9kYXRhKGNvbnN0IHN0cnVjdCBzdGF0X2RhdGEgKnNkLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaW50IGNoYW5nZWQgPSAwOworCisJaWYgKHNkLT5zZF9tdGltZS5zZWMgIT0gKHVuc2lnbmVkIGludClzdC0+c3RfbXRpbWUpCisJCWNoYW5nZWQgfD0gTVRJTUVfQ0hBTkdFRDsKKwlpZiAodHJ1c3RfY3RpbWUgJiYgY2hlY2tfc3RhdCAmJgorCSAgICBzZC0+c2RfY3RpbWUuc2VjICE9ICh1bnNpZ25lZCBpbnQpc3QtPnN0X2N0aW1lKQorCQljaGFuZ2VkIHw9IENUSU1FX0NIQU5HRUQ7CisKKyNpZmRlZiBVU0VfTlNFQworCWlmIChjaGVja19zdGF0ICYmIHNkLT5zZF9tdGltZS5uc2VjICE9IFNUX01USU1FX05TRUMoKnN0KSkKKwkJY2hhbmdlZCB8PSBNVElNRV9DSEFOR0VEOworCWlmICh0cnVzdF9jdGltZSAmJiBjaGVja19zdGF0ICYmCisJICAgIHNkLT5zZF9jdGltZS5uc2VjICE9IFNUX0NUSU1FX05TRUMoKnN0KSkKKwkJY2hhbmdlZCB8PSBDVElNRV9DSEFOR0VEOworI2VuZGlmCisKKwlpZiAoY2hlY2tfc3RhdCkgeworCQlpZiAoc2QtPnNkX3VpZCAhPSAodW5zaWduZWQgaW50KSBzdC0+c3RfdWlkIHx8CisJCQlzZC0+c2RfZ2lkICE9ICh1bnNpZ25lZCBpbnQpIHN0LT5zdF9naWQpCisJCQljaGFuZ2VkIHw9IE9XTkVSX0NIQU5HRUQ7CisJCWlmIChzZC0+c2RfaW5vICE9ICh1bnNpZ25lZCBpbnQpIHN0LT5zdF9pbm8pCisJCQljaGFuZ2VkIHw9IElOT0RFX0NIQU5HRUQ7CisJfQorCisjaWZkZWYgVVNFX1NUREVWCisJLyoKKwkgKiBzdF9kZXYgYnJlYWtzIG9uIG5ldHdvcmsgZmlsZXN5c3RlbXMgd2hlcmUgZGlmZmVyZW50CisJICogY2xpZW50cyB3aWxsIGhhdmUgZGlmZmVyZW50IHZpZXdzIG9mIHdoYXQgImRldmljZSIKKwkgKiB0aGUgZmlsZXN5c3RlbSBpcyBvbgorCSAqLworCWlmIChjaGVja19zdGF0ICYmIHNkLT5zZF9kZXYgIT0gKHVuc2lnbmVkIGludCkgc3QtPnN0X2RldikKKwkJCWNoYW5nZWQgfD0gSU5PREVfQ0hBTkdFRDsKKyNlbmRpZgorCisJaWYgKHNkLT5zZF9zaXplICE9ICh1bnNpZ25lZCBpbnQpIHN0LT5zdF9zaXplKQorCQljaGFuZ2VkIHw9IERBVEFfQ0hBTkdFRDsKKworCXJldHVybiBjaGFuZ2VkOworfQorCisvKgorICogVGhpcyBvbmx5IHVwZGF0ZXMgdGhlICJub24tY3JpdGljYWwiIHBhcnRzIG9mIHRoZSBkaXJlY3RvcnkKKyAqIGNhY2hlLCBpZSB0aGUgcGFydHMgdGhhdCBhcmVuJ3QgdHJhY2tlZCBieSBHSVQsIGFuZCBvbmx5IHVzZWQKKyAqIHRvIHZhbGlkYXRlIHRoZSBjYWNoZS4KKyAqLwordm9pZCBmaWxsX3N0YXRfY2FjaGVfaW5mbyhzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJZmlsbF9zdGF0X2RhdGEoJmNlLT5jZV9zdGF0X2RhdGEsIHN0KTsKKworCWlmIChhc3N1bWVfdW5jaGFuZ2VkKQorCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVkFMSUQ7CisKKwlpZiAoU19JU1JFRyhzdC0+c3RfbW9kZSkpCisJCWNlX21hcmtfdXB0b2RhdGUoY2UpOworfQorCitzdGF0aWMgaW50IGNlX2NvbXBhcmVfZGF0YShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJaW50IG1hdGNoID0gLTE7CisJaW50IGZkID0gb3BlbihjZS0+bmFtZSwgT19SRE9OTFkpOworCisJaWYgKGZkID49IDApIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJaWYgKCFpbmRleF9mZChzaGExLCBmZCwgc3QsIE9CSl9CTE9CLCBjZS0+bmFtZSwgMCkpCisJCQltYXRjaCA9IGhhc2hjbXAoc2hhMSwgY2UtPnNoYTEpOworCQkvKiBpbmRleF9mZCgpIGNsb3NlZCB0aGUgZmlsZSBkZXNjcmlwdG9yIGFscmVhZHkgKi8KKwl9CisJcmV0dXJuIG1hdGNoOworfQorCitzdGF0aWMgaW50IGNlX2NvbXBhcmVfbGluayhjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzaXplX3QgZXhwZWN0ZWRfc2l6ZSkKK3sKKwlpbnQgbWF0Y2ggPSAtMTsKKwl2b2lkICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoc3RyYnVmX3JlYWRsaW5rKCZzYiwgY2UtPm5hbWUsIGV4cGVjdGVkX3NpemUpKQorCQlyZXR1cm4gLTE7CisKKwlidWZmZXIgPSByZWFkX3NoYTFfZmlsZShjZS0+c2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoYnVmZmVyKSB7CisJCWlmIChzaXplID09IHNiLmxlbikKKwkJCW1hdGNoID0gbWVtY21wKGJ1ZmZlciwgc2IuYnVmLCBzaXplKTsKKwkJZnJlZShidWZmZXIpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiBtYXRjaDsKK30KKworc3RhdGljIGludCBjZV9jb21wYXJlX2dpdGxpbmsoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJLyoKKwkgKiBXZSBkb24ndCBhY3R1YWxseSByZXF1aXJlIHRoYXQgdGhlIC5naXQgZGlyZWN0b3J5CisJICogdW5kZXIgR0lUTElOSyBkaXJlY3RvcnkgYmUgYSB2YWxpZCBnaXQgZGlyZWN0b3J5LiBJdAorCSAqIG1pZ2h0IGV2ZW4gYmUgbWlzc2luZyAoaW4gY2FzZSBub2JvZHkgcG9wdWxhdGVkIHRoYXQKKwkgKiBzdWItcHJvamVjdCkuCisJICoKKwkgKiBJZiBzbywgd2UgY29uc2lkZXIgaXQgYWx3YXlzIHRvIG1hdGNoLgorCSAqLworCWlmIChyZXNvbHZlX2dpdGxpbmtfcmVmKGNlLT5uYW1lLCAiSEVBRCIsIHNoYTEpIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGhhc2hjbXAoc2hhMSwgY2UtPnNoYTEpOworfQorCitzdGF0aWMgaW50IGNlX21vZGlmaWVkX2NoZWNrX2ZzKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwlzd2l0Y2ggKHN0LT5zdF9tb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGUkVHOgorCQlpZiAoY2VfY29tcGFyZV9kYXRhKGNlLCBzdCkpCisJCQlyZXR1cm4gREFUQV9DSEFOR0VEOworCQlicmVhazsKKwljYXNlIFNfSUZMTks6CisJCWlmIChjZV9jb21wYXJlX2xpbmsoY2UsIHhzaXplX3Qoc3QtPnN0X3NpemUpKSkKKwkJCXJldHVybiBEQVRBX0NIQU5HRUQ7CisJCWJyZWFrOworCWNhc2UgU19JRkRJUjoKKwkJaWYgKFNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCXJldHVybiBjZV9jb21wYXJlX2dpdGxpbmsoY2UpID8gREFUQV9DSEFOR0VEIDogMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gVFlQRV9DSEFOR0VEOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZV9tYXRjaF9zdGF0X2Jhc2ljKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCBzdGF0ICpzdCkKK3sKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZCA9IDA7CisKKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKQorCQlyZXR1cm4gTU9ERV9DSEFOR0VEIHwgREFUQV9DSEFOR0VEIHwgVFlQRV9DSEFOR0VEOworCisJc3dpdGNoIChjZS0+Y2VfbW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRlJFRzoKKwkJY2hhbmdlZCB8PSAhU19JU1JFRyhzdC0+c3RfbW9kZSkgPyBUWVBFX0NIQU5HRUQgOiAwOworCQkvKiBXZSBjb25zaWRlciBvbmx5IHRoZSBvd25lciB4IGJpdCB0byBiZSByZWxldmFudCBmb3IKKwkJICogIm1vZGUgY2hhbmdlcyIKKwkJICovCisJCWlmICh0cnVzdF9leGVjdXRhYmxlX2JpdCAmJgorCQkgICAgKDAxMDAgJiAoY2UtPmNlX21vZGUgXiBzdC0+c3RfbW9kZSkpKQorCQkJY2hhbmdlZCB8PSBNT0RFX0NIQU5HRUQ7CisJCWJyZWFrOworCWNhc2UgU19JRkxOSzoKKwkJaWYgKCFTX0lTTE5LKHN0LT5zdF9tb2RlKSAmJgorCQkgICAgKGhhc19zeW1saW5rcyB8fCAhU19JU1JFRyhzdC0+c3RfbW9kZSkpKQorCQkJY2hhbmdlZCB8PSBUWVBFX0NIQU5HRUQ7CisJCWJyZWFrOworCWNhc2UgU19JRkdJVExJTks6CisJCS8qIFdlIGlnbm9yZSBtb3N0IG9mIHRoZSBzdF94eHggZmllbGRzIGZvciBnaXRsaW5rcyAqLworCQlpZiAoIVNfSVNESVIoc3QtPnN0X21vZGUpKQorCQkJY2hhbmdlZCB8PSBUWVBFX0NIQU5HRUQ7CisJCWVsc2UgaWYgKGNlX2NvbXBhcmVfZ2l0bGluayhjZSkpCisJCQljaGFuZ2VkIHw9IERBVEFfQ0hBTkdFRDsKKwkJcmV0dXJuIGNoYW5nZWQ7CisJZGVmYXVsdDoKKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogY2VfbW9kZSBpcyAlbyIsIGNlLT5jZV9tb2RlKTsKKwl9CisKKwljaGFuZ2VkIHw9IG1hdGNoX3N0YXRfZGF0YSgmY2UtPmNlX3N0YXRfZGF0YSwgc3QpOworCisJLyogUmFjaWx5IHNtdWRnZWQgZW50cnk/ICovCisJaWYgKCFjZS0+Y2Vfc3RhdF9kYXRhLnNkX3NpemUpIHsKKwkJaWYgKCFpc19lbXB0eV9ibG9iX3NoYTEoY2UtPnNoYTEpKQorCQkJY2hhbmdlZCB8PSBEQVRBX0NIQU5HRUQ7CisJfQorCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgaXNfcmFjeV9zdGF0KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJY29uc3Qgc3RydWN0IHN0YXRfZGF0YSAqc2QpCit7CisJcmV0dXJuIChpc3RhdGUtPnRpbWVzdGFtcC5zZWMgJiYKKyNpZmRlZiBVU0VfTlNFQworCQkgLyogbmFub3NlY29uZCB0aW1lc3RhbXBlZCBmaWxlcyBjYW4gYWxzbyBiZSByYWN5ISAqLworCQkoaXN0YXRlLT50aW1lc3RhbXAuc2VjIDwgc2QtPnNkX210aW1lLnNlYyB8fAorCQkgKGlzdGF0ZS0+dGltZXN0YW1wLnNlYyA9PSBzZC0+c2RfbXRpbWUuc2VjICYmCisJCSAgaXN0YXRlLT50aW1lc3RhbXAubnNlYyA8PSBzZC0+c2RfbXRpbWUubnNlYykpCisjZWxzZQorCQlpc3RhdGUtPnRpbWVzdGFtcC5zZWMgPD0gc2QtPnNkX210aW1lLnNlYworI2VuZGlmCisJCSk7Cit9CisKK3N0YXRpYyBpbnQgaXNfcmFjeV90aW1lc3RhbXAoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJcmV0dXJuICghU19JU0dJVExJTksoY2UtPmNlX21vZGUpICYmCisJCWlzX3JhY3lfc3RhdChpc3RhdGUsICZjZS0+Y2Vfc3RhdF9kYXRhKSk7Cit9CisKK2ludCBtYXRjaF9zdGF0X2RhdGFfcmFjeShjb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCSBjb25zdCBzdHJ1Y3Qgc3RhdF9kYXRhICpzZCwgc3RydWN0IHN0YXQgKnN0KQoreworCWlmIChpc19yYWN5X3N0YXQoaXN0YXRlLCBzZCkpCisJCXJldHVybiBNVElNRV9DSEFOR0VEOworCXJldHVybiBtYXRjaF9zdGF0X2RhdGEoc2QsIHN0KTsKK30KKworaW50IGllX21hdGNoX3N0YXQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCSAgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IHN0YXQgKnN0LAorCQkgIHVuc2lnbmVkIGludCBvcHRpb25zKQoreworCXVuc2lnbmVkIGludCBjaGFuZ2VkOworCWludCBpZ25vcmVfdmFsaWQgPSBvcHRpb25zICYgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEOworCWludCBpZ25vcmVfc2tpcF93b3JrdHJlZSA9IG9wdGlvbnMgJiBDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRTsKKwlpbnQgYXNzdW1lX3JhY3lfaXNfbW9kaWZpZWQgPSBvcHRpb25zICYgQ0VfTUFUQ0hfUkFDWV9JU19ESVJUWTsKKworCS8qCisJICogSWYgaXQncyBtYXJrZWQgYXMgYWx3YXlzIHZhbGlkIGluIHRoZSBpbmRleCwgaXQncworCSAqIHZhbGlkIHdoYXRldmVyIHRoZSBjaGVja2VkLW91dCBjb3B5IHNheXMuCisJICoKKwkgKiBza2lwLXdvcmt0cmVlIGhhcyB0aGUgc2FtZSBlZmZlY3Qgd2l0aCBoaWdoZXIgcHJlY2VkZW5jZQorCSAqLworCWlmICghaWdub3JlX3NraXBfd29ya3RyZWUgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpCisJCXJldHVybiAwOworCWlmICghaWdub3JlX3ZhbGlkICYmIChjZS0+Y2VfZmxhZ3MgJiBDRV9WQUxJRCkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJbnRlbnQtdG8tYWRkIGVudHJpZXMgaGF2ZSBub3QgYmVlbiBhZGRlZCwgc28gdGhlIGluZGV4IGVudHJ5CisJICogYnkgZGVmaW5pdGlvbiBuZXZlciBtYXRjaGVzIHdoYXQgaXMgaW4gdGhlIHdvcmsgdHJlZSB1bnRpbCBpdAorCSAqIGFjdHVhbGx5IGdldHMgYWRkZWQuCisJICovCisJaWYgKGNlLT5jZV9mbGFncyAmIENFX0lOVEVOVF9UT19BREQpCisJCXJldHVybiBEQVRBX0NIQU5HRUQgfCBUWVBFX0NIQU5HRUQgfCBNT0RFX0NIQU5HRUQ7CisKKwljaGFuZ2VkID0gY2VfbWF0Y2hfc3RhdF9iYXNpYyhjZSwgc3QpOworCisJLyoKKwkgKiBXaXRoaW4gMSBzZWNvbmQgb2YgdGhpcyBzZXF1ZW5jZToKKwkgKiAJZWNobyB4eXp6eSA+ZmlsZSAmJiBnaXQtdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUKKwkgKiBydW5uaW5nIHRoaXMgY29tbWFuZDoKKwkgKiAJZWNobyBmcm90eiA+ZmlsZQorCSAqIHdvdWxkIGdpdmUgYSBmYWxzZWx5IGNsZWFuIGNhY2hlIGVudHJ5LiAgVGhlIG10aW1lIGFuZAorCSAqIGxlbmd0aCBtYXRjaCB0aGUgY2FjaGUsIGFuZCBvdGhlciBzdGF0IGZpZWxkcyBkbyBub3QgY2hhbmdlLgorCSAqCisJICogV2UgY291bGQgZGV0ZWN0IHRoaXMgYXQgdXBkYXRlLWluZGV4IHRpbWUgKHRoZSBjYWNoZSBlbnRyeQorCSAqIGJlaW5nIHJlZ2lzdGVyZWQvdXBkYXRlZCByZWNvcmRzIHRoZSBzYW1lIHRpbWUgYXMgIm5vdyIpCisJICogYW5kIGRlbGF5IHRoZSByZXR1cm4gZnJvbSBnaXQtdXBkYXRlLWluZGV4LCBidXQgdGhhdCB3b3VsZAorCSAqIGVmZmVjdGl2ZWx5IG1lYW4gd2UgY2FuIG1ha2UgYXQgbW9zdCBvbmUgY29tbWl0IHBlciBzZWNvbmQsCisJICogd2hpY2ggaXMgbm90IGFjY2VwdGFibGUuICBJbnN0ZWFkLCB3ZSBjaGVjayBjYWNoZSBlbnRyaWVzCisJICogd2hvc2UgbXRpbWUgYXJlIHRoZSBzYW1lIGFzIHRoZSBpbmRleCBmaWxlIHRpbWVzdGFtcCBtb3JlCisJICogY2FyZWZ1bGx5IHRoYW4gb3RoZXJzLgorCSAqLworCWlmICghY2hhbmdlZCAmJiBpc19yYWN5X3RpbWVzdGFtcChpc3RhdGUsIGNlKSkgeworCQlpZiAoYXNzdW1lX3JhY3lfaXNfbW9kaWZpZWQpCisJCQljaGFuZ2VkIHw9IERBVEFfQ0hBTkdFRDsKKwkJZWxzZQorCQkJY2hhbmdlZCB8PSBjZV9tb2RpZmllZF9jaGVja19mcyhjZSwgc3QpOworCX0KKworCXJldHVybiBjaGFuZ2VkOworfQorCitpbnQgaWVfbW9kaWZpZWQoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCXN0cnVjdCBzdGF0ICpzdCwgdW5zaWduZWQgaW50IG9wdGlvbnMpCit7CisJaW50IGNoYW5nZWQsIGNoYW5nZWRfZnM7CisKKwljaGFuZ2VkID0gaWVfbWF0Y2hfc3RhdChpc3RhdGUsIGNlLCBzdCwgb3B0aW9ucyk7CisJaWYgKCFjaGFuZ2VkKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIElmIHRoZSBtb2RlIG9yIHR5cGUgaGFzIGNoYW5nZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gdHJ5aW5nCisJICogdG8gcmVmcmVzaCB0aGUgZW50cnkgLSBpdCdzIG5vdCBnb2luZyB0byBtYXRjaAorCSAqLworCWlmIChjaGFuZ2VkICYgKE1PREVfQ0hBTkdFRCB8IFRZUEVfQ0hBTkdFRCkpCisJCXJldHVybiBjaGFuZ2VkOworCisJLyoKKwkgKiBJbW1lZGlhdGVseSBhZnRlciByZWFkLXRyZWUgb3IgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvLAorCSAqIHRoZSBsZW5ndGggZmllbGQgaXMgemVybywgYXMgd2UgaGF2ZSBuZXZlciBldmVuIHJlYWQgdGhlCisJICogbHN0YXQoMikgaW5mb3JtYXRpb24gb25jZSwgYW5kIHdlIGNhbm5vdCB0cnVzdCBEQVRBX0NIQU5HRUQKKwkgKiByZXR1cm5lZCBieSBpZV9tYXRjaF9zdGF0KCkgd2hpY2ggaW4gdHVybiB3YXMgcmV0dXJuZWQgYnkKKwkgKiBjZV9tYXRjaF9zdGF0X2Jhc2ljKCkgdG8gc2lnbmFsIHRoYXQgdGhlIGZpbGVzaXplIG9mIHRoZQorCSAqIGJsb2IgY2hhbmdlZC4gIFdlIGhhdmUgdG8gYWN0dWFsbHkgZ28gdG8gdGhlIGZpbGVzeXN0ZW0gdG8KKwkgKiBzZWUgaWYgdGhlIGNvbnRlbnRzIG1hdGNoLCBhbmQgaWYgc28sIHNob3VsZCBhbnN3ZXIgInVuY2hhbmdlZCIuCisJICoKKwkgKiBUaGUgbG9naWMgZG9lcyBub3QgYXBwbHkgdG8gZ2l0bGlua3MsIGFzIGNlX21hdGNoX3N0YXRfYmFzaWMoKQorCSAqIGFscmVhZHkgaGFzIGNoZWNrZWQgdGhlIGFjdHVhbCBIRUFEIGZyb20gdGhlIGZpbGVzeXN0ZW0gaW4gdGhlCisJICogc3VicHJvamVjdC4gIElmIGllX21hdGNoX3N0YXQoKSBhbHJlYWR5IHNhaWQgaXQgaXMgZGlmZmVyZW50LAorCSAqIHRoZW4gd2Uga25vdyBpdCBpcy4KKwkgKi8KKwlpZiAoKGNoYW5nZWQgJiBEQVRBX0NIQU5HRUQpICYmCisJICAgIChTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkgfHwgY2UtPmNlX3N0YXRfZGF0YS5zZF9zaXplICE9IDApKQorCQlyZXR1cm4gY2hhbmdlZDsKKworCWNoYW5nZWRfZnMgPSBjZV9tb2RpZmllZF9jaGVja19mcyhjZSwgc3QpOworCWlmIChjaGFuZ2VkX2ZzKQorCQlyZXR1cm4gY2hhbmdlZCB8IGNoYW5nZWRfZnM7CisJcmV0dXJuIDA7Cit9CisKK2ludCBiYXNlX25hbWVfY29tcGFyZShjb25zdCBjaGFyICpuYW1lMSwgaW50IGxlbjEsIGludCBtb2RlMSwKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZTIsIGludCBsZW4yLCBpbnQgbW9kZTIpCit7CisJdW5zaWduZWQgY2hhciBjMSwgYzI7CisJaW50IGxlbiA9IGxlbjEgPCBsZW4yID8gbGVuMSA6IGxlbjI7CisJaW50IGNtcDsKKworCWNtcCA9IG1lbWNtcChuYW1lMSwgbmFtZTIsIGxlbik7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwljMSA9IG5hbWUxW2xlbl07CisJYzIgPSBuYW1lMltsZW5dOworCWlmICghYzEgJiYgU19JU0RJUihtb2RlMSkpCisJCWMxID0gJy8nOworCWlmICghYzIgJiYgU19JU0RJUihtb2RlMikpCisJCWMyID0gJy8nOworCXJldHVybiAoYzEgPCBjMikgPyAtMSA6IChjMSA+IGMyKSA/IDEgOiAwOworfQorCisvKgorICogZGZfbmFtZV9jb21wYXJlKCkgaXMgaWRlbnRpY2FsIHRvIGJhc2VfbmFtZV9jb21wYXJlKCksIGV4Y2VwdCBpdAorICogY29tcGFyZXMgY29uZmxpY3RpbmcgZGlyZWN0b3J5L2ZpbGUgZW50cmllcyBhcyBlcXVhbC4gTm90ZSB0aGF0CisgKiB3aGlsZSBhIGRpcmVjdG9yeSBuYW1lIGNvbXBhcmVzIGFzIGVxdWFsIHRvIGEgcmVndWxhciBmaWxlLCB0aGV5CisgKiB0aGVuIGluZGl2aWR1YWxseSBjb21wYXJlIF9kaWZmZXJlbnRseV8gdG8gYSBmaWxlbmFtZSB0aGF0IGhhcworICogYSBkb3QgYWZ0ZXIgdGhlIGJhc2VuYW1lIChiZWNhdXNlICdcMCcgPCAnLicgPCAnLycpLgorICoKKyAqIFRoaXMgaXMgdXNlZCBieSByb3V0aW5lcyB0aGF0IHdhbnQgdG8gdHJhdmVyc2UgdGhlIGdpdCBuYW1lc3BhY2UKKyAqIGJ1dCB0aGVuIGhhbmRsZSBjb25mbGljdGluZyBlbnRyaWVzIHRvZ2V0aGVyIHdoZW4gcG9zc2libGUuCisgKi8KK2ludCBkZl9uYW1lX2NvbXBhcmUoY29uc3QgY2hhciAqbmFtZTEsIGludCBsZW4xLCBpbnQgbW9kZTEsCisJCSAgICBjb25zdCBjaGFyICpuYW1lMiwgaW50IGxlbjIsIGludCBtb2RlMikKK3sKKwlpbnQgbGVuID0gbGVuMSA8IGxlbjIgPyBsZW4xIDogbGVuMiwgY21wOworCXVuc2lnbmVkIGNoYXIgYzEsIGMyOworCisJY21wID0gbWVtY21wKG5hbWUxLCBuYW1lMiwgbGVuKTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCS8qIERpcmVjdG9yaWVzIGFuZCBmaWxlcyBjb21wYXJlIGVxdWFsIChzYW1lIGxlbmd0aCwgc2FtZSBuYW1lKSAqLworCWlmIChsZW4xID09IGxlbjIpCisJCXJldHVybiAwOworCWMxID0gbmFtZTFbbGVuXTsKKwlpZiAoIWMxICYmIFNfSVNESVIobW9kZTEpKQorCQljMSA9ICcvJzsKKwljMiA9IG5hbWUyW2xlbl07CisJaWYgKCFjMiAmJiBTX0lTRElSKG1vZGUyKSkKKwkJYzIgPSAnLyc7CisJaWYgKGMxID09ICcvJyAmJiAhYzIpCisJCXJldHVybiAwOworCWlmIChjMiA9PSAnLycgJiYgIWMxKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYzEgLSBjMjsKK30KKworaW50IG5hbWVfY29tcGFyZShjb25zdCBjaGFyICpuYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IGNoYXIgKm5hbWUyLCBzaXplX3QgbGVuMikKK3sKKwlzaXplX3QgbWluX2xlbiA9IChsZW4xIDwgbGVuMikgPyBsZW4xIDogbGVuMjsKKwlpbnQgY21wID0gbWVtY21wKG5hbWUxLCBuYW1lMiwgbWluX2xlbik7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwlpZiAobGVuMSA8IGxlbjIpCisJCXJldHVybiAtMTsKKwlpZiAobGVuMSA+IGxlbjIpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitpbnQgY2FjaGVfbmFtZV9zdGFnZV9jb21wYXJlKGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMSwgaW50IHN0YWdlMSwgY29uc3QgY2hhciAqbmFtZTIsIGludCBsZW4yLCBpbnQgc3RhZ2UyKQoreworCWludCBjbXA7CisKKwljbXAgPSBuYW1lX2NvbXBhcmUobmFtZTEsIGxlbjEsIG5hbWUyLCBsZW4yKTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCisJaWYgKHN0YWdlMSA8IHN0YWdlMikKKwkJcmV0dXJuIC0xOworCWlmIChzdGFnZTEgPiBzdGFnZTIpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluZGV4X25hbWVfc3RhZ2VfcG9zKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IHN0YWdlKQoreworCWludCBmaXJzdCwgbGFzdDsKKworCWZpcnN0ID0gMDsKKwlsYXN0ID0gaXN0YXRlLT5jYWNoZV9ucjsKKwl3aGlsZSAobGFzdCA+IGZpcnN0KSB7CisJCWludCBuZXh0ID0gKGxhc3QgKyBmaXJzdCkgPj4gMTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbbmV4dF07CisJCWludCBjbXAgPSBjYWNoZV9uYW1lX3N0YWdlX2NvbXBhcmUobmFtZSwgbmFtZWxlbiwgc3RhZ2UsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgY2Vfc3RhZ2UoY2UpKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbmV4dDsKKwkJaWYgKGNtcCA8IDApIHsKKwkJCWxhc3QgPSBuZXh0OworCQkJY29udGludWU7CisJCX0KKwkJZmlyc3QgPSBuZXh0KzE7CisJfQorCXJldHVybiAtZmlyc3QtMTsKK30KKworaW50IGluZGV4X25hbWVfcG9zKGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKK3sKKwlyZXR1cm4gaW5kZXhfbmFtZV9zdGFnZV9wb3MoaXN0YXRlLCBuYW1lLCBuYW1lbGVuLCAwKTsKK30KKworLyogUmVtb3ZlIGVudHJ5LCByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgbW9yZSBlbnRyaWVzIHRvIGdvLi4gKi8KK2ludCByZW1vdmVfaW5kZXhfZW50cnlfYXQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBwb3MpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKworCXJlY29yZF9yZXNvbHZlX3VuZG8oaXN0YXRlLCBjZSk7CisJcmVtb3ZlX25hbWVfaGFzaChpc3RhdGUsIGNlKTsKKwlzYXZlX29yX2ZyZWVfaW5kZXhfZW50cnkoaXN0YXRlLCBjZSk7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IENFX0VOVFJZX1JFTU9WRUQ7CisJaXN0YXRlLT5jYWNoZV9uci0tOworCWlmIChwb3MgPj0gaXN0YXRlLT5jYWNoZV9ucikKKwkJcmV0dXJuIDA7CisJbWVtbW92ZShpc3RhdGUtPmNhY2hlICsgcG9zLAorCQlpc3RhdGUtPmNhY2hlICsgcG9zICsgMSwKKwkJKGlzdGF0ZS0+Y2FjaGVfbnIgLSBwb3MpICogc2l6ZW9mKHN0cnVjdCBjYWNoZV9lbnRyeSAqKSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBSZW1vdmUgYWxsIGNhY2hlIGVudHJpZXMgbWFya2VkIGZvciByZW1vdmFsLCB0aGF0IGlzIHdoZXJlCisgKiBDRV9SRU1PVkUgaXMgc2V0IGluIGNlX2ZsYWdzLiAgVGhpcyBpcyBtdWNoIG1vcmUgZWZmZWN0aXZlIHRoYW4KKyAqIGNhbGxpbmcgcmVtb3ZlX2luZGV4X2VudHJ5X2F0KCkgZm9yIGVhY2ggZW50cnkgdG8gYmUgcmVtb3ZlZC4KKyAqLwordm9pZCByZW1vdmVfbWFya2VkX2NhY2hlX2VudHJpZXMoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2VfYXJyYXkgPSBpc3RhdGUtPmNhY2hlOworCXVuc2lnbmVkIGludCBpLCBqOworCisJZm9yIChpID0gaiA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJaWYgKGNlX2FycmF5W2ldLT5jZV9mbGFncyAmIENFX1JFTU9WRSkgeworCQkJcmVtb3ZlX25hbWVfaGFzaChpc3RhdGUsIGNlX2FycmF5W2ldKTsKKwkJCXNhdmVfb3JfZnJlZV9pbmRleF9lbnRyeShpc3RhdGUsIGNlX2FycmF5W2ldKTsKKwkJfQorCQllbHNlCisJCQljZV9hcnJheVtqKytdID0gY2VfYXJyYXlbaV07CisJfQorCWlmIChqID09IGlzdGF0ZS0+Y2FjaGVfbnIpCisJCXJldHVybjsKKwlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gQ0VfRU5UUllfUkVNT1ZFRDsKKwlpc3RhdGUtPmNhY2hlX25yID0gajsKK30KKworaW50IHJlbW92ZV9maWxlX2Zyb21faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgc3RybGVuKHBhdGgpKTsKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLXBvcy0xOworCWNhY2hlX3RyZWVfaW52YWxpZGF0ZV9wYXRoKGlzdGF0ZSwgcGF0aCk7CisJdW50cmFja2VkX2NhY2hlX3JlbW92ZV9mcm9tX2luZGV4KGlzdGF0ZSwgcGF0aCk7CisJd2hpbGUgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIgJiYgIXN0cmNtcChpc3RhdGUtPmNhY2hlW3Bvc10tPm5hbWUsIHBhdGgpKQorCQlyZW1vdmVfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCBwb3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfbmFtZShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBjaGFyICpwYXRoLCBpbnQgbmFtZWxlbikKK3sKKwlyZXR1cm4gbmFtZWxlbiAhPSBjZV9uYW1lbGVuKGNlKSB8fCBtZW1jbXAocGF0aCwgY2UtPm5hbWUsIG5hbWVsZW4pOworfQorCitzdGF0aWMgaW50IGluZGV4X25hbWVfcG9zX2Fsc29fdW5tZXJnZWQoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJY29uc3QgY2hhciAqcGF0aCwgaW50IG5hbWVsZW4pCit7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGlzdGF0ZSwgcGF0aCwgbmFtZWxlbik7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKworCWlmIChwb3MgPj0gMCkKKwkJcmV0dXJuIHBvczsKKworCS8qIG1heWJlIHVubWVyZ2VkPyAqLworCXBvcyA9IC0xIC0gcG9zOworCWlmIChwb3MgPj0gaXN0YXRlLT5jYWNoZV9uciB8fAorCQkJY29tcGFyZV9uYW1lKChjZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXSksIHBhdGgsIG5hbWVsZW4pKQorCQlyZXR1cm4gLTE7CisKKwkvKiBvcmRlciBvZiBwcmVmZXJlbmNlOiBzdGFnZSAyLCAxLCAzICovCisJaWYgKGNlX3N0YWdlKGNlKSA9PSAxICYmIHBvcyArIDEgPCBpc3RhdGUtPmNhY2hlX25yICYmCisJCQljZV9zdGFnZSgoY2UgPSBpc3RhdGUtPmNhY2hlW3BvcyArIDFdKSkgPT0gMiAmJgorCQkJIWNvbXBhcmVfbmFtZShjZSwgcGF0aCwgbmFtZWxlbikpCisJCXBvcysrOworCXJldHVybiBwb3M7Cit9CisKK3N0YXRpYyBpbnQgZGlmZmVyZW50X25hbWUoc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgc3RydWN0IGNhY2hlX2VudHJ5ICphbGlhcykKK3sKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisJcmV0dXJuIGNlX25hbWVsZW4oYWxpYXMpICE9IGxlbiB8fCBtZW1jbXAoY2UtPm5hbWUsIGFsaWFzLT5uYW1lLCBsZW4pOworfQorCisvKgorICogSWYgd2UgYWRkIGEgZmlsZW5hbWUgdGhhdCBhbGlhc2VzIGluIHRoZSBjYWNoZSwgd2Ugd2lsbCB1c2UgdGhlCisgKiBuYW1lIHRoYXQgd2UgYWxyZWFkeSBoYXZlIC0gYnV0IHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHRoZSBzYW1lCisgKiBhbGlhcyB0d2ljZSwgYmVjYXVzZSB0aGF0IGltcGxpZXMgdGhhdCB0aGVyZSB3ZXJlIGFjdHVhbGx5IHR3bworICogZGlmZmVyZW50IGZpbGVzIHdpdGggYWxpYXNpbmcgbmFtZXMhCisgKgorICogU28gd2UgdXNlIHRoZSBDRV9BRERFRCBmbGFnIHRvIHZlcmlmeSB0aGF0IHRoZSBhbGlhcyB3YXMgYW4gb2xkCisgKiBvbmUgYmVmb3JlIHdlIGFjY2VwdCBpdCBhcworICovCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpjcmVhdGVfYWxpYXNfY2Uoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkJCSAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJCSAgIHN0cnVjdCBjYWNoZV9lbnRyeSAqYWxpYXMpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ldzsKKworCWlmIChhbGlhcy0+Y2VfZmxhZ3MgJiBDRV9BRERFRCkKKwkJZGllKCJXaWxsIG5vdCBhZGQgZmlsZSBhbGlhcyAnJXMnICgnJXMnIGFscmVhZHkgZXhpc3RzIGluIGluZGV4KSIsIGNlLT5uYW1lLCBhbGlhcy0+bmFtZSk7CisKKwkvKiBPaywgY3JlYXRlIHRoZSBuZXcgZW50cnkgdXNpbmcgdGhlIG5hbWUgb2YgdGhlIGV4aXN0aW5nIGFsaWFzICovCisJbGVuID0gY2VfbmFtZWxlbihhbGlhcyk7CisJbmV3ID0geGNhbGxvYygxLCBjYWNoZV9lbnRyeV9zaXplKGxlbikpOworCW1lbWNweShuZXctPm5hbWUsIGFsaWFzLT5uYW1lLCBsZW4pOworCWNvcHlfY2FjaGVfZW50cnkobmV3LCBjZSk7CisJc2F2ZV9vcl9mcmVlX2luZGV4X2VudHJ5KGlzdGF0ZSwgY2UpOworCXJldHVybiBuZXc7Cit9CisKK3ZvaWQgc2V0X29iamVjdF9uYW1lX2Zvcl9pbnRlbnRfdG9fYWRkX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpZiAod3JpdGVfc2hhMV9maWxlKCIiLCAwLCBibG9iX3R5cGUsIHNoYTEpKQorCQlkaWUoImNhbm5vdCBjcmVhdGUgYW4gZW1wdHkgYmxvYiBpbiB0aGUgb2JqZWN0IGRhdGFiYXNlIik7CisJaGFzaGNweShjZS0+c2hhMSwgc2hhMSk7Cit9CisKK2ludCBhZGRfdG9faW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpzdCwgaW50IGZsYWdzKQoreworCWludCBzaXplLCBuYW1lbGVuLCB3YXNfc2FtZTsKKwltb2RlX3Qgc3RfbW9kZSA9IHN0LT5zdF9tb2RlOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsICphbGlhczsKKwl1bnNpZ25lZCBjZV9vcHRpb24gPSBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUV8Q0VfTUFUQ0hfUkFDWV9JU19ESVJUWTsKKwlpbnQgdmVyYm9zZSA9IGZsYWdzICYgKEFERF9DQUNIRV9WRVJCT1NFIHwgQUREX0NBQ0hFX1BSRVRFTkQpOworCWludCBwcmV0ZW5kID0gZmxhZ3MgJiBBRERfQ0FDSEVfUFJFVEVORDsKKwlpbnQgaW50ZW50X29ubHkgPSBmbGFncyAmIEFERF9DQUNIRV9JTlRFTlQ7CisJaW50IGFkZF9vcHRpb24gPSAoQUREX0NBQ0hFX09LX1RPX0FERHxBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRXwKKwkJCSAgKGludGVudF9vbmx5ID8gQUREX0NBQ0hFX05FV19PTkxZIDogMCkpOworCisJaWYgKCFTX0lTUkVHKHN0X21vZGUpICYmICFTX0lTTE5LKHN0X21vZGUpICYmICFTX0lTRElSKHN0X21vZGUpKQorCQlyZXR1cm4gZXJyb3IoIiVzOiBjYW4gb25seSBhZGQgcmVndWxhciBmaWxlcywgc3ltYm9saWMgbGlua3Mgb3IgZ2l0LWRpcmVjdG9yaWVzIiwgcGF0aCk7CisKKwluYW1lbGVuID0gc3RybGVuKHBhdGgpOworCWlmIChTX0lTRElSKHN0X21vZGUpKSB7CisJCXdoaWxlIChuYW1lbGVuICYmIHBhdGhbbmFtZWxlbi0xXSA9PSAnLycpCisJCQluYW1lbGVuLS07CisJfQorCXNpemUgPSBjYWNoZV9lbnRyeV9zaXplKG5hbWVsZW4pOworCWNlID0geGNhbGxvYygxLCBzaXplKTsKKwltZW1jcHkoY2UtPm5hbWUsIHBhdGgsIG5hbWVsZW4pOworCWNlLT5jZV9uYW1lbGVuID0gbmFtZWxlbjsKKwlpZiAoIWludGVudF9vbmx5KQorCQlmaWxsX3N0YXRfY2FjaGVfaW5mbyhjZSwgc3QpOworCWVsc2UKKwkJY2UtPmNlX2ZsYWdzIHw9IENFX0lOVEVOVF9UT19BREQ7CisKKwlpZiAodHJ1c3RfZXhlY3V0YWJsZV9iaXQgJiYgaGFzX3N5bWxpbmtzKQorCQljZS0+Y2VfbW9kZSA9IGNyZWF0ZV9jZV9tb2RlKHN0X21vZGUpOworCWVsc2UgeworCQkvKiBJZiB0aGVyZSBpcyBhbiBleGlzdGluZyBlbnRyeSwgcGljayB0aGUgbW9kZSBiaXRzIGFuZCB0eXBlCisJCSAqIGZyb20gaXQsIG90aGVyd2lzZSBhc3N1bWUgdW5leGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KKwkJICovCisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqZW50OworCQlpbnQgcG9zID0gaW5kZXhfbmFtZV9wb3NfYWxzb191bm1lcmdlZChpc3RhdGUsIHBhdGgsIG5hbWVsZW4pOworCisJCWVudCA9ICgwIDw9IHBvcykgPyBpc3RhdGUtPmNhY2hlW3Bvc10gOiBOVUxMOworCQljZS0+Y2VfbW9kZSA9IGNlX21vZGVfZnJvbV9zdGF0KGVudCwgc3RfbW9kZSk7CisJfQorCisJLyogV2hlbiBjb3JlLmlnbm9yZWNhc2U9dHJ1ZSwgZGV0ZXJtaW5lIGlmIGEgZGlyZWN0b3J5IG9mIHRoZSBzYW1lIG5hbWUgYnV0IGRpZmZlcmluZworCSAqIGNhc2UgYWxyZWFkeSBleGlzdHMgd2l0aGluIHRoZSBHaXQgcmVwb3NpdG9yeS4gIElmIGl0IGRvZXMsIGVuc3VyZSB0aGUgZGlyZWN0b3J5CisJICogY2FzZSBvZiB0aGUgZmlsZSBiZWluZyBhZGRlZCB0byB0aGUgcmVwb3NpdG9yeSBtYXRjaGVzIChpcyBmb2xkZWQgaW50bykgdGhlIGV4aXN0aW5nCisJICogZW50cnkncyBkaXJlY3RvcnkgY2FzZS4KKwkgKi8KKwlpZiAoaWdub3JlX2Nhc2UpIHsKKwkJYWRqdXN0X2Rpcm5hbWVfY2FzZShpc3RhdGUsIGNlLT5uYW1lKTsKKwl9CisKKwlhbGlhcyA9IGluZGV4X2ZpbGVfZXhpc3RzKGlzdGF0ZSwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCBpZ25vcmVfY2FzZSk7CisJaWYgKGFsaWFzICYmICFjZV9zdGFnZShhbGlhcykgJiYgIWllX21hdGNoX3N0YXQoaXN0YXRlLCBhbGlhcywgc3QsIGNlX29wdGlvbikpIHsKKwkJLyogTm90aGluZyBjaGFuZ2VkLCByZWFsbHkgKi8KKwkJaWYgKCFTX0lTR0lUTElOSyhhbGlhcy0+Y2VfbW9kZSkpCisJCQljZV9tYXJrX3VwdG9kYXRlKGFsaWFzKTsKKwkJYWxpYXMtPmNlX2ZsYWdzIHw9IENFX0FEREVEOworCisJCWZyZWUoY2UpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFpbnRlbnRfb25seSkgeworCQlpZiAoaW5kZXhfcGF0aChjZS0+c2hhMSwgcGF0aCwgc3QsIEhBU0hfV1JJVEVfT0JKRUNUKSkgeworCQkJZnJlZShjZSk7CisJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBpbmRleCBmaWxlICVzIiwgcGF0aCk7CisJCX0KKwl9IGVsc2UKKwkJc2V0X29iamVjdF9uYW1lX2Zvcl9pbnRlbnRfdG9fYWRkX2VudHJ5KGNlKTsKKworCWlmIChpZ25vcmVfY2FzZSAmJiBhbGlhcyAmJiBkaWZmZXJlbnRfbmFtZShjZSwgYWxpYXMpKQorCQljZSA9IGNyZWF0ZV9hbGlhc19jZShpc3RhdGUsIGNlLCBhbGlhcyk7CisJY2UtPmNlX2ZsYWdzIHw9IENFX0FEREVEOworCisJLyogSXQgd2FzIHN1c3BlY3RlZCB0byBiZSByYWNpbHkgY2xlYW4sIGJ1dCBpdCB0dXJucyBvdXQgdG8gYmUgT2sgKi8KKwl3YXNfc2FtZSA9IChhbGlhcyAmJgorCQkgICAgIWNlX3N0YWdlKGFsaWFzKSAmJgorCQkgICAgIWhhc2hjbXAoYWxpYXMtPnNoYTEsIGNlLT5zaGExKSAmJgorCQkgICAgY2UtPmNlX21vZGUgPT0gYWxpYXMtPmNlX21vZGUpOworCisJaWYgKHByZXRlbmQpCisJCWZyZWUoY2UpOworCWVsc2UgaWYgKGFkZF9pbmRleF9lbnRyeShpc3RhdGUsIGNlLCBhZGRfb3B0aW9uKSkgeworCQlmcmVlKGNlKTsKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gYWRkICVzIHRvIGluZGV4IiwgcGF0aCk7CisJfQorCWlmICh2ZXJib3NlICYmICF3YXNfc2FtZSkKKwkJcHJpbnRmKCJhZGQgJyVzJ1xuIiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhZGRfZmlsZV90b19pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzdGF0IHN0OworCWlmIChsc3RhdChwYXRoLCAmc3QpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBzdGF0ICclcyciLCBwYXRoKTsKKwlyZXR1cm4gYWRkX3RvX2luZGV4KGlzdGF0ZSwgcGF0aCwgJnN0LCBmbGFncyk7Cit9CisKK3N0cnVjdCBjYWNoZV9lbnRyeSAqbWFrZV9jYWNoZV9lbnRyeSh1bnNpZ25lZCBpbnQgbW9kZSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqcGF0aCwgaW50IHN0YWdlLAorCQl1bnNpZ25lZCBpbnQgcmVmcmVzaF9vcHRpb25zKQoreworCWludCBzaXplLCBsZW47CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgKnJldDsKKworCWlmICghdmVyaWZ5X3BhdGgocGF0aCkpIHsKKwkJZXJyb3IoIkludmFsaWQgcGF0aCAnJXMnIiwgcGF0aCk7CisJCXJldHVybiBOVUxMOworCX0KKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlzaXplID0gY2FjaGVfZW50cnlfc2l6ZShsZW4pOworCWNlID0geGNhbGxvYygxLCBzaXplKTsKKworCWhhc2hjcHkoY2UtPnNoYTEsIHNoYTEpOworCW1lbWNweShjZS0+bmFtZSwgcGF0aCwgbGVuKTsKKwljZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3Moc3RhZ2UpOworCWNlLT5jZV9uYW1lbGVuID0gbGVuOworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisKKwlyZXQgPSByZWZyZXNoX2NhY2hlX2VudHJ5KGNlLCByZWZyZXNoX29wdGlvbnMpOworCWlmIChyZXQgIT0gY2UpCisJCWZyZWUoY2UpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBjZV9zYW1lX25hbWUoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICphLCBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmIpCit7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oYSk7CisJcmV0dXJuIGNlX25hbWVsZW4oYikgPT0gbGVuICYmICFtZW1jbXAoYS0+bmFtZSwgYi0+bmFtZSwgbGVuKTsKK30KKworLyoKKyAqIFdlIGZ1bmRhbWVudGFsbHkgZG9uJ3QgbGlrZSBzb21lIHBhdGhzOiB3ZSBkb24ndCB3YW50CisgKiBkb3Qgb3IgZG90LWRvdCBhbnl3aGVyZSwgYW5kIGZvciBvYnZpb3VzIHJlYXNvbnMgZG9uJ3QKKyAqIHdhbnQgdG8gcmVjdXJzZSBpbnRvICIuZ2l0IiBlaXRoZXIuCisgKgorICogQWxzbywgd2UgZG9uJ3Qgd2FudCBkb3VibGUgc2xhc2hlcyBvciBzbGFzaGVzIGF0IHRoZQorICogZW5kIHRoYXQgY2FuIG1ha2UgcGF0aG5hbWVzIGFtYmlndW91cy4KKyAqLworc3RhdGljIGludCB2ZXJpZnlfZG90ZmlsZShjb25zdCBjaGFyICpyZXN0KQoreworCS8qCisJICogVGhlIGZpcnN0IGNoYXJhY3RlciB3YXMgJy4nLCBidXQgdGhhdAorCSAqIGhhcyBhbHJlYWR5IGJlZW4gZGlzY2FyZGVkLCB3ZSBub3cgdGVzdAorCSAqIHRoZSByZXN0LgorCSAqLworCisJLyogIi4iIGlzIG5vdCBhbGxvd2VkICovCisJaWYgKCpyZXN0ID09ICdcMCcgfHwgaXNfZGlyX3NlcCgqcmVzdCkpCisJCXJldHVybiAwOworCisJc3dpdGNoICgqcmVzdCkgeworCS8qCisJICogIi5naXQiIGZvbGxvd2VkIGJ5ICBOVUwgb3Igc2xhc2ggaXMgYmFkLiBUaGlzCisJICogc2hhcmVzIHRoZSBwYXRoIGVuZCB0ZXN0IHdpdGggdGhlICIuLiIgY2FzZS4KKwkgKi8KKwljYXNlICdnJzoKKwljYXNlICdHJzoKKwkJaWYgKHJlc3RbMV0gIT0gJ2knICYmIHJlc3RbMV0gIT0gJ0knKQorCQkJYnJlYWs7CisJCWlmIChyZXN0WzJdICE9ICd0JyAmJiByZXN0WzJdICE9ICdUJykKKwkJCWJyZWFrOworCQlyZXN0ICs9IDI7CisJLyogZmFsbHRocm91Z2ggKi8KKwljYXNlICcuJzoKKwkJaWYgKHJlc3RbMV0gPT0gJ1wwJyB8fCBpc19kaXJfc2VwKHJlc3RbMV0pKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitpbnQgdmVyaWZ5X3BhdGgoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyIGM7CisKKwlpZiAoaGFzX2Rvc19kcml2ZV9wcmVmaXgocGF0aCkpCisJCXJldHVybiAwOworCisJZ290byBpbnNpZGU7CisJZm9yICg7OykgeworCQlpZiAoIWMpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGlzX2Rpcl9zZXAoYykpIHsKK2luc2lkZToKKwkJCWlmIChwcm90ZWN0X2hmcyAmJiBpc19oZnNfZG90Z2l0KHBhdGgpKQorCQkJCXJldHVybiAwOworCQkJaWYgKHByb3RlY3RfbnRmcyAmJiBpc19udGZzX2RvdGdpdChwYXRoKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWMgPSAqcGF0aCsrOworCQkJaWYgKChjID09ICcuJyAmJiAhdmVyaWZ5X2RvdGZpbGUocGF0aCkpIHx8CisJCQkgICAgaXNfZGlyX3NlcChjKSB8fCBjID09ICdcMCcpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJYyA9ICpwYXRoKys7CisJfQorfQorCisvKgorICogRG8gd2UgaGF2ZSBhbm90aGVyIGZpbGUgdGhhdCBoYXMgdGhlIGJlZ2lubmluZyBjb21wb25lbnRzIGJlaW5nIGEKKyAqIHByb3BlciBzdXBlcnNldCBvZiB0aGUgbmFtZSB3ZSdyZSB0cnlpbmcgdG8gYWRkPworICovCitzdGF0aWMgaW50IGhhc19maWxlX25hbWUoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcywgaW50IG9rX3RvX3JlcGxhY2UpCit7CisJaW50IHJldHZhbCA9IDA7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCWludCBzdGFnZSA9IGNlX3N0YWdlKGNlKTsKKwljb25zdCBjaGFyICpuYW1lID0gY2UtPm5hbWU7CisKKwl3aGlsZSAocG9zIDwgaXN0YXRlLT5jYWNoZV9ucikgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKnAgPSBpc3RhdGUtPmNhY2hlW3BvcysrXTsKKworCQlpZiAobGVuID49IGNlX25hbWVsZW4ocCkpCisJCQlicmVhazsKKwkJaWYgKG1lbWNtcChuYW1lLCBwLT5uYW1lLCBsZW4pKQorCQkJYnJlYWs7CisJCWlmIChjZV9zdGFnZShwKSAhPSBzdGFnZSkKKwkJCWNvbnRpbnVlOworCQlpZiAocC0+bmFtZVtsZW5dICE9ICcvJykKKwkJCWNvbnRpbnVlOworCQlpZiAocC0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpCisJCQljb250aW51ZTsKKwkJcmV0dmFsID0gLTE7CisJCWlmICghb2tfdG9fcmVwbGFjZSkKKwkJCWJyZWFrOworCQlyZW1vdmVfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCAtLXBvcyk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBEbyB3ZSBoYXZlIGFub3RoZXIgZmlsZSB3aXRoIGEgcGF0aG5hbWUgdGhhdCBpcyBhIHByb3BlcgorICogc3Vic2V0IG9mIHRoZSBuYW1lIHdlJ3JlIHRyeWluZyB0byBhZGQ/CisgKi8KK3N0YXRpYyBpbnQgaGFzX2Rpcl9uYW1lKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IHBvcywgaW50IG9rX3RvX3JlcGxhY2UpCit7CisJaW50IHJldHZhbCA9IDA7CisJaW50IHN0YWdlID0gY2Vfc3RhZ2UoY2UpOworCWNvbnN0IGNoYXIgKm5hbWUgPSBjZS0+bmFtZTsKKwljb25zdCBjaGFyICpzbGFzaCA9IG5hbWUgKyBjZV9uYW1lbGVuKGNlKTsKKworCWZvciAoOzspIHsKKwkJaW50IGxlbjsKKworCQlmb3IgKDs7KSB7CisJCQlpZiAoKi0tc2xhc2ggPT0gJy8nKQorCQkJCWJyZWFrOworCQkJaWYgKHNsYXNoIDw9IGNlLT5uYW1lKQorCQkJCXJldHVybiByZXR2YWw7CisJCX0KKwkJbGVuID0gc2xhc2ggLSBuYW1lOworCisJCXBvcyA9IGluZGV4X25hbWVfc3RhZ2VfcG9zKGlzdGF0ZSwgbmFtZSwgbGVuLCBzdGFnZSk7CisJCWlmIChwb3MgPj0gMCkgeworCQkJLyoKKwkJCSAqIEZvdW5kIG9uZSwgYnV0IG5vdCBzbyBmYXN0LiAgVGhpcyBjb3VsZAorCQkJICogYmUgYSBtYXJrZXIgdGhhdCBzYXlzICJJIHdhcyBoZXJlLCBidXQKKwkJCSAqIEkgYW0gYmVpbmcgcmVtb3ZlZCIuICBTdWNoIGFuIGVudHJ5IGlzCisJCQkgKiBub3QgYSBwYXJ0IG9mIHRoZSByZXN1bHRpbmcgdHJlZSwgYW5kCisJCQkgKiBpdCBpcyBPayB0byBoYXZlIGEgZGlyZWN0b3J5IGF0IHRoZSBzYW1lCisJCQkgKiBwYXRoLgorCQkJICovCisJCQlpZiAoIShpc3RhdGUtPmNhY2hlW3Bvc10tPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKSkgeworCQkJCXJldHZhbCA9IC0xOworCQkJCWlmICghb2tfdG9fcmVwbGFjZSkKKwkJCQkJYnJlYWs7CisJCQkJcmVtb3ZlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgcG9zKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQllbHNlCisJCQlwb3MgPSAtcG9zLTE7CisKKwkJLyoKKwkJICogVHJpdmlhbCBvcHRpbWl6YXRpb246IGlmIHdlIGZpbmQgYW4gZW50cnkgdGhhdAorCQkgKiBhbHJlYWR5IG1hdGNoZXMgdGhlIHN1Yi1kaXJlY3RvcnksIHRoZW4gd2Uga25vdworCQkgKiB3ZSdyZSBvaywgYW5kIHdlIGNhbiBleGl0LgorCQkgKi8KKwkJd2hpbGUgKHBvcyA8IGlzdGF0ZS0+Y2FjaGVfbnIpIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqcCA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKwkJCWlmICgoY2VfbmFtZWxlbihwKSA8PSBsZW4pIHx8CisJCQkgICAgKHAtPm5hbWVbbGVuXSAhPSAnLycpIHx8CisJCQkgICAgbWVtY21wKHAtPm5hbWUsIG5hbWUsIGxlbikpCisJCQkJYnJlYWs7IC8qIG5vdCBvdXIgc3ViZGlyZWN0b3J5ICovCisJCQlpZiAoY2Vfc3RhZ2UocCkgPT0gc3RhZ2UgJiYgIShwLT5jZV9mbGFncyAmIENFX1JFTU9WRSkpCisJCQkJLyoKKwkJCQkgKiBwIGlzIGF0IHRoZSBzYW1lIHN0YWdlIGFzIG91ciBlbnRyeSwgYW5kCisJCQkJICogaXMgYSBzdWJkaXJlY3Rvcnkgb2Ygd2hhdCB3ZSBhcmUgbG9va2luZworCQkJCSAqIGF0LCBzbyB3ZSBjYW5ub3QgaGF2ZSBjb25mbGljdHMgYXQgb3VyCisJCQkJICogbGV2ZWwgb3IgYW55dGhpbmcgc2hvcnRlci4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJcG9zKys7CisJCX0KKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworLyogV2UgbWF5IGJlIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdlIGFscmVhZHkgaGF2ZSBwYXRoL2ZpbGUgYW5kIHBhdGgKKyAqIGlzIGJlaW5nIGFkZGVkLCBvciB3ZSBhbHJlYWR5IGhhdmUgcGF0aCBhbmQgcGF0aC9maWxlIGlzIGJlaW5nCisgKiBhZGRlZC4gIEVpdGhlciBvbmUgd291bGQgcmVzdWx0IGluIGEgbm9uc2Vuc2UgdHJlZSB0aGF0IGhhcyBwYXRoCisgKiB0d2ljZSB3aGVuIGdpdC13cml0ZS10cmVlIHRyaWVzIHRvIHdyaXRlIGl0IG91dC4gIFByZXZlbnQgaXQuCisgKgorICogSWYgb2stdG8tcmVwbGFjZSBpcyBzcGVjaWZpZWQsIHdlIHJlbW92ZSB0aGUgY29uZmxpY3RpbmcgZW50cmllcworICogZnJvbSB0aGUgY2FjaGUgc28gdGhlIGNhbGxlciBzaG91bGQgcmVjb21wdXRlIHRoZSBpbnNlcnQgcG9zaXRpb24uCisgKiBXaGVuIHRoaXMgaGFwcGVucywgd2UgcmV0dXJuIG5vbi16ZXJvLgorICovCitzdGF0aWMgaW50IGNoZWNrX2ZpbGVfZGlyZWN0b3J5X2NvbmZsaWN0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCQkJIGludCBwb3MsIGludCBva190b19yZXBsYWNlKQoreworCWludCByZXR2YWw7CisKKwkvKgorCSAqIFdoZW4gY2UgaXMgYW4gIkkgYW0gZ29pbmcgYXdheSIgZW50cnksIHdlIGFsbG93IGl0IHRvIGJlIGFkZGVkCisJICovCisJaWYgKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFdlIGNoZWNrIGlmIHRoZSBwYXRoIGlzIGEgc3ViLXBhdGggb2YgYSBzdWJzZXF1ZW50IHBhdGhuYW1lCisJICogZmlyc3QsIHNpbmNlIHJlbW92aW5nIHRob3NlIHdpbGwgbm90IGNoYW5nZSB0aGUgcG9zaXRpb24KKwkgKiBpbiB0aGUgYXJyYXkuCisJICovCisJcmV0dmFsID0gaGFzX2ZpbGVfbmFtZShpc3RhdGUsIGNlLCBwb3MsIG9rX3RvX3JlcGxhY2UpOworCisJLyoKKwkgKiBUaGVuIGNoZWNrIGlmIHRoZSBwYXRoIG1pZ2h0IGhhdmUgYSBjbGFzaGluZyBzdWItZGlyZWN0b3J5CisJICogYmVmb3JlIGl0LgorCSAqLworCXJldHVybiByZXR2YWwgKyBoYXNfZGlyX25hbWUoaXN0YXRlLCBjZSwgcG9zLCBva190b19yZXBsYWNlKTsKK30KKworc3RhdGljIGludCBhZGRfaW5kZXhfZW50cnlfd2l0aF9jaGVjayhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwgaW50IG9wdGlvbikKK3sKKwlpbnQgcG9zOworCWludCBva190b19hZGQgPSBvcHRpb24gJiBBRERfQ0FDSEVfT0tfVE9fQUREOworCWludCBva190b19yZXBsYWNlID0gb3B0aW9uICYgQUREX0NBQ0hFX09LX1RPX1JFUExBQ0U7CisJaW50IHNraXBfZGZfY2hlY2sgPSBvcHRpb24gJiBBRERfQ0FDSEVfU0tJUF9ERkNIRUNLOworCWludCBuZXdfb25seSA9IG9wdGlvbiAmIEFERF9DQUNIRV9ORVdfT05MWTsKKworCWlmICghKG9wdGlvbiAmIEFERF9DQUNIRV9LRUVQX0NBQ0hFX1RSRUUpKQorCQljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChpc3RhdGUsIGNlLT5uYW1lKTsKKwlwb3MgPSBpbmRleF9uYW1lX3N0YWdlX3Bvcyhpc3RhdGUsIGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwgY2Vfc3RhZ2UoY2UpKTsKKworCS8qIGV4aXN0aW5nIG1hdGNoPyBKdXN0IHJlcGxhY2UgaXQuICovCisJaWYgKHBvcyA+PSAwKSB7CisJCWlmICghbmV3X29ubHkpCisJCQlyZXBsYWNlX2luZGV4X2VudHJ5KGlzdGF0ZSwgcG9zLCBjZSk7CisJCXJldHVybiAwOworCX0KKwlwb3MgPSAtcG9zLTE7CisKKwlpZiAoIShvcHRpb24gJiBBRERfQ0FDSEVfS0VFUF9DQUNIRV9UUkVFKSkKKwkJdW50cmFja2VkX2NhY2hlX2FkZF90b19pbmRleChpc3RhdGUsIGNlLT5uYW1lKTsKKworCS8qCisJICogSW5zZXJ0aW5nIGEgbWVyZ2VkIGVudHJ5ICgic3RhZ2UgMCIpIGludG8gdGhlIGluZGV4CisJICogd2lsbCBhbHdheXMgcmVwbGFjZSBhbGwgbm9uLW1lcmdlZCBlbnRyaWVzLi4KKwkgKi8KKwlpZiAocG9zIDwgaXN0YXRlLT5jYWNoZV9uciAmJiBjZV9zdGFnZShjZSkgPT0gMCkgeworCQl3aGlsZSAoY2Vfc2FtZV9uYW1lKGlzdGF0ZS0+Y2FjaGVbcG9zXSwgY2UpKSB7CisJCQlva190b19hZGQgPSAxOworCQkJaWYgKCFyZW1vdmVfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCBwb3MpKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFva190b19hZGQpCisJCXJldHVybiAtMTsKKwlpZiAoIXZlcmlmeV9wYXRoKGNlLT5uYW1lKSkKKwkJcmV0dXJuIGVycm9yKCJJbnZhbGlkIHBhdGggJyVzJyIsIGNlLT5uYW1lKTsKKworCWlmICghc2tpcF9kZl9jaGVjayAmJgorCSAgICBjaGVja19maWxlX2RpcmVjdG9yeV9jb25mbGljdChpc3RhdGUsIGNlLCBwb3MsIG9rX3RvX3JlcGxhY2UpKSB7CisJCWlmICghb2tfdG9fcmVwbGFjZSkKKwkJCXJldHVybiBlcnJvcigiJyVzJyBhcHBlYXJzIGFzIGJvdGggYSBmaWxlIGFuZCBhcyBhIGRpcmVjdG9yeSIsCisJCQkJICAgICBjZS0+bmFtZSk7CisJCXBvcyA9IGluZGV4X25hbWVfc3RhZ2VfcG9zKGlzdGF0ZSwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLCBjZV9zdGFnZShjZSkpOworCQlwb3MgPSAtcG9zLTE7CisJfQorCXJldHVybiBwb3MgKyAxOworfQorCitpbnQgYWRkX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBpbnQgb3B0aW9uKQoreworCWludCBwb3M7CisKKwlpZiAob3B0aW9uICYgQUREX0NBQ0hFX0pVU1RfQVBQRU5EKQorCQlwb3MgPSBpc3RhdGUtPmNhY2hlX25yOworCWVsc2UgeworCQlpbnQgcmV0OworCQlyZXQgPSBhZGRfaW5kZXhfZW50cnlfd2l0aF9jaGVjayhpc3RhdGUsIGNlLCBvcHRpb24pOworCQlpZiAocmV0IDw9IDApCisJCQlyZXR1cm4gcmV0OworCQlwb3MgPSByZXQgLSAxOworCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUgYXJyYXkgaXMgYmlnIGVub3VnaCAuLiAqLworCUFMTE9DX0dST1coaXN0YXRlLT5jYWNoZSwgaXN0YXRlLT5jYWNoZV9uciArIDEsIGlzdGF0ZS0+Y2FjaGVfYWxsb2MpOworCisJLyogQWRkIGl0IGluLi4gKi8KKwlpc3RhdGUtPmNhY2hlX25yKys7CisJaWYgKGlzdGF0ZS0+Y2FjaGVfbnIgPiBwb3MgKyAxKQorCQltZW1tb3ZlKGlzdGF0ZS0+Y2FjaGUgKyBwb3MgKyAxLAorCQkJaXN0YXRlLT5jYWNoZSArIHBvcywKKwkJCShpc3RhdGUtPmNhY2hlX25yIC0gcG9zIC0gMSkgKiBzaXplb2YoY2UpKTsKKwlzZXRfaW5kZXhfZW50cnkoaXN0YXRlLCBwb3MsIGNlKTsKKwlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfD0gQ0VfRU5UUllfQURERUQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAicmVmcmVzaCIgZG9lcyBub3QgY2FsY3VsYXRlIGEgbmV3IHNoYTEgZmlsZSBvciBicmluZyB0aGUKKyAqIGNhY2hlIHVwLXRvLWRhdGUgZm9yIG1vZGUvY29udGVudCBjaGFuZ2VzLiBCdXQgd2hhdCBpdAorICogX2RvZXNfIGRvIGlzIHRvICJyZS1tYXRjaCIgdGhlIHN0YXQgaW5mb3JtYXRpb24gb2YgYSBmaWxlCisgKiB3aXRoIHRoZSBjYWNoZSwgc28gdGhhdCB5b3UgY2FuIHJlZnJlc2ggdGhlIGNhY2hlIGZvciBhCisgKiBmaWxlIHRoYXQgaGFzbid0IGJlZW4gY2hhbmdlZCBidXQgd2hlcmUgdGhlIHN0YXQgZW50cnkgaXMKKyAqIG91dCBvZiBkYXRlLgorICoKKyAqIEZvciBleGFtcGxlLCB5b3UnZCB3YW50IHRvIGRvIHRoaXMgYWZ0ZXIgZG9pbmcgYSAiZ2l0LXJlYWQtdHJlZSIsCisgKiB0byBsaW5rIHVwIHRoZSBzdGF0IGNhY2hlIGRldGFpbHMgd2l0aCB0aGUgcHJvcGVyIGZpbGVzLgorICovCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpyZWZyZXNoX2NhY2hlX2VudChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwKKwkJCQkJICAgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBvcHRpb25zLCBpbnQgKmVyciwKKwkJCQkJICAgICBpbnQgKmNoYW5nZWRfcmV0KQoreworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqdXBkYXRlZDsKKwlpbnQgY2hhbmdlZCwgc2l6ZTsKKwlpbnQgcmVmcmVzaCA9IG9wdGlvbnMgJiBDRV9NQVRDSF9SRUZSRVNIOworCWludCBpZ25vcmVfdmFsaWQgPSBvcHRpb25zICYgQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEOworCWludCBpZ25vcmVfc2tpcF93b3JrdHJlZSA9IG9wdGlvbnMgJiBDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRTsKKwlpbnQgaWdub3JlX21pc3NpbmcgPSBvcHRpb25zICYgQ0VfTUFUQ0hfSUdOT1JFX01JU1NJTkc7CisKKwlpZiAoIXJlZnJlc2ggfHwgY2VfdXB0b2RhdGUoY2UpKQorCQlyZXR1cm4gY2U7CisKKwkvKgorCSAqIENFX1ZBTElEIG9yIENFX1NLSVBfV09SS1RSRUUgbWVhbnMgdGhlIHVzZXIgcHJvbWlzZWQgdXMKKwkgKiB0aGF0IHRoZSBjaGFuZ2UgdG8gdGhlIHdvcmsgdHJlZSBkb2VzIG5vdCBtYXR0ZXIgYW5kIHRvbGQKKwkgKiB1cyBub3QgdG8gd29ycnkuCisJICovCisJaWYgKCFpZ25vcmVfc2tpcF93b3JrdHJlZSAmJiBjZV9za2lwX3dvcmt0cmVlKGNlKSkgeworCQljZV9tYXJrX3VwdG9kYXRlKGNlKTsKKwkJcmV0dXJuIGNlOworCX0KKwlpZiAoIWlnbm9yZV92YWxpZCAmJiAoY2UtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpKSB7CisJCWNlX21hcmtfdXB0b2RhdGUoY2UpOworCQlyZXR1cm4gY2U7CisJfQorCisJaWYgKGhhc19zeW1saW5rX2xlYWRpbmdfcGF0aChjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpKSB7CisJCWlmIChpZ25vcmVfbWlzc2luZykKKwkJCXJldHVybiBjZTsKKwkJaWYgKGVycikKKwkJCSplcnIgPSBFTk9FTlQ7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChsc3RhdChjZS0+bmFtZSwgJnN0KSA8IDApIHsKKwkJaWYgKGlnbm9yZV9taXNzaW5nICYmIGVycm5vID09IEVOT0VOVCkKKwkJCXJldHVybiBjZTsKKwkJaWYgKGVycikKKwkJCSplcnIgPSBlcnJubzsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJY2hhbmdlZCA9IGllX21hdGNoX3N0YXQoaXN0YXRlLCBjZSwgJnN0LCBvcHRpb25zKTsKKwlpZiAoY2hhbmdlZF9yZXQpCisJCSpjaGFuZ2VkX3JldCA9IGNoYW5nZWQ7CisJaWYgKCFjaGFuZ2VkKSB7CisJCS8qCisJCSAqIFRoZSBwYXRoIGlzIHVuY2hhbmdlZC4gIElmIHdlIHdlcmUgdG9sZCB0byBpZ25vcmUKKwkJICogdmFsaWQgYml0LCB0aGVuIHdlIGRpZCB0aGUgYWN0dWFsIHN0YXQgY2hlY2sgYW5kCisJCSAqIGZvdW5kIHRoYXQgdGhlIGVudHJ5IGlzIHVubW9kaWZpZWQuICBJZiB0aGUgZW50cnkKKwkJICogaXMgbm90IG1hcmtlZCBWQUxJRCwgdGhpcyBpcyB0aGUgcGxhY2UgdG8gbWFyayBpdAorCQkgKiB2YWxpZCBhZ2FpbiwgdW5kZXIgImFzc3VtZSB1bmNoYW5nZWQiIG1vZGUuCisJCSAqLworCQlpZiAoaWdub3JlX3ZhbGlkICYmIGFzc3VtZV91bmNoYW5nZWQgJiYKKwkJICAgICEoY2UtPmNlX2ZsYWdzICYgQ0VfVkFMSUQpKQorCQkJOyAvKiBtYXJrIHRoaXMgb25lIFZBTElEIGFnYWluICovCisJCWVsc2UgeworCQkJLyoKKwkJCSAqIFdlIGRvIG5vdCBtYXJrIHRoZSBpbmRleCBpdHNlbGYgIm1vZGlmaWVkIgorCQkJICogYmVjYXVzZSBDRV9VUFRPREFURSBmbGFnIGlzIGluLWNvcmUgb25seTsKKwkJCSAqIHdlIGFyZSBub3QgZ29pbmcgdG8gd3JpdGUgdGhpcyBjaGFuZ2Ugb3V0LgorCQkJICovCisJCQlpZiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCQljZV9tYXJrX3VwdG9kYXRlKGNlKTsKKwkJCXJldHVybiBjZTsKKwkJfQorCX0KKworCWlmIChpZV9tb2RpZmllZChpc3RhdGUsIGNlLCAmc3QsIG9wdGlvbnMpKSB7CisJCWlmIChlcnIpCisJCQkqZXJyID0gRUlOVkFMOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzaXplID0gY2Vfc2l6ZShjZSk7CisJdXBkYXRlZCA9IHhtYWxsb2Moc2l6ZSk7CisJbWVtY3B5KHVwZGF0ZWQsIGNlLCBzaXplKTsKKwlmaWxsX3N0YXRfY2FjaGVfaW5mbyh1cGRhdGVkLCAmc3QpOworCS8qCisJICogSWYgaWdub3JlX3ZhbGlkIGlzIG5vdCBzZXQsIHdlIHNob3VsZCBsZWF2ZSBDRV9WQUxJRCBiaXQKKwkgKiBhbG9uZS4gIE90aGVyd2lzZSwgcGF0aHMgbWFya2VkIHdpdGggLS1uby1hc3N1bWUtdW5jaGFuZ2VkCisJICogKGkuZS4gdGhpbmdzIHRvIGJlIGVkaXRlZCkgd2lsbCByZWFjcXVpcmUgQ0VfVkFMSUQgYml0CisJICogYXV0b21hdGljYWxseSwgd2hpY2ggaXMgbm90IHJlYWxseSB3aGF0IHdlIHdhbnQuCisJICovCisJaWYgKCFpZ25vcmVfdmFsaWQgJiYgYXNzdW1lX3VuY2hhbmdlZCAmJgorCSAgICAhKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSkKKwkJdXBkYXRlZC0+Y2VfZmxhZ3MgJj0gfkNFX1ZBTElEOworCisJLyogaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIGlzIHVwZGF0ZWQgaW4gdGhlIGNhbGxlciAqLworCXJldHVybiB1cGRhdGVkOworfQorCitzdGF0aWMgdm9pZCBzaG93X2ZpbGUoY29uc3QgY2hhciAqIGZtdCwgY29uc3QgY2hhciAqIG5hbWUsIGludCBpbl9wb3JjZWxhaW4sCisJCSAgICAgIGludCAqIGZpcnN0LCBjb25zdCBjaGFyICpoZWFkZXJfbXNnKQoreworCWlmIChpbl9wb3JjZWxhaW4gJiYgKmZpcnN0ICYmIGhlYWRlcl9tc2cpIHsKKwkJcHJpbnRmKCIlc1xuIiwgaGVhZGVyX21zZyk7CisJCSpmaXJzdCA9IDA7CisJfQorCXByaW50ZihmbXQsIG5hbWUpOworfQorCitpbnQgcmVmcmVzaF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgdW5zaWduZWQgaW50IGZsYWdzLAorCQkgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCSAgY2hhciAqc2VlbiwgY29uc3QgY2hhciAqaGVhZGVyX21zZykKK3sKKwlpbnQgaTsKKwlpbnQgaGFzX2Vycm9ycyA9IDA7CisJaW50IHJlYWxseSA9IChmbGFncyAmIFJFRlJFU0hfUkVBTExZKSAhPSAwOworCWludCBhbGxvd191bm1lcmdlZCA9IChmbGFncyAmIFJFRlJFU0hfVU5NRVJHRUQpICE9IDA7CisJaW50IHF1aWV0ID0gKGZsYWdzICYgUkVGUkVTSF9RVUlFVCkgIT0gMDsKKwlpbnQgbm90X25ldyA9IChmbGFncyAmIFJFRlJFU0hfSUdOT1JFX01JU1NJTkcpICE9IDA7CisJaW50IGlnbm9yZV9zdWJtb2R1bGVzID0gKGZsYWdzICYgUkVGUkVTSF9JR05PUkVfU1VCTU9EVUxFUykgIT0gMDsKKwlpbnQgZmlyc3QgPSAxOworCWludCBpbl9wb3JjZWxhaW4gPSAoZmxhZ3MgJiBSRUZSRVNIX0lOX1BPUkNFTEFJTik7CisJdW5zaWduZWQgaW50IG9wdGlvbnMgPSAoQ0VfTUFUQ0hfUkVGUkVTSCB8CisJCQkJKHJlYWxseSA/IENFX01BVENIX0lHTk9SRV9WQUxJRCA6IDApIHwKKwkJCQkobm90X25ldyA/IENFX01BVENIX0lHTk9SRV9NSVNTSU5HIDogMCkpOworCWNvbnN0IGNoYXIgKm1vZGlmaWVkX2ZtdDsKKwljb25zdCBjaGFyICpkZWxldGVkX2ZtdDsKKwljb25zdCBjaGFyICp0eXBlY2hhbmdlX2ZtdDsKKwljb25zdCBjaGFyICphZGRlZF9mbXQ7CisJY29uc3QgY2hhciAqdW5tZXJnZWRfZm10OworCisJbW9kaWZpZWRfZm10ID0gKGluX3BvcmNlbGFpbiA/ICJNXHQlc1xuIiA6ICIlczogbmVlZHMgdXBkYXRlXG4iKTsKKwlkZWxldGVkX2ZtdCA9IChpbl9wb3JjZWxhaW4gPyAiRFx0JXNcbiIgOiAiJXM6IG5lZWRzIHVwZGF0ZVxuIik7CisJdHlwZWNoYW5nZV9mbXQgPSAoaW5fcG9yY2VsYWluID8gIlRcdCVzXG4iIDogIiVzIG5lZWRzIHVwZGF0ZVxuIik7CisJYWRkZWRfZm10ID0gKGluX3BvcmNlbGFpbiA/ICJBXHQlc1xuIiA6ICIlcyBuZWVkcyB1cGRhdGVcbiIpOworCXVubWVyZ2VkX2ZtdCA9IChpbl9wb3JjZWxhaW4gPyAiVVx0JXNcbiIgOiAiJXM6IG5lZWRzIG1lcmdlXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsICpuZXc7CisJCWludCBjYWNoZV9lcnJubyA9IDA7CisJCWludCBjaGFuZ2VkID0gMDsKKwkJaW50IGZpbHRlcmVkID0gMDsKKworCQljZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWlmIChpZ25vcmVfc3VibW9kdWxlcyAmJiBTX0lTR0lUTElOSyhjZS0+Y2VfbW9kZSkpCisJCQljb250aW51ZTsKKworCQlpZiAocGF0aHNwZWMgJiYgIWNlX3BhdGhfbWF0Y2goY2UsIHBhdGhzcGVjLCBzZWVuKSkKKwkJCWZpbHRlcmVkID0gMTsKKworCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCQl3aGlsZSAoKGkgPCBpc3RhdGUtPmNhY2hlX25yKSAmJgorCQkJICAgICAgICEgc3RyY21wKGlzdGF0ZS0+Y2FjaGVbaV0tPm5hbWUsIGNlLT5uYW1lKSkKKwkJCQlpKys7CisJCQlpLS07CisJCQlpZiAoYWxsb3dfdW5tZXJnZWQpCisJCQkJY29udGludWU7CisJCQlpZiAoIWZpbHRlcmVkKQorCQkJCXNob3dfZmlsZSh1bm1lcmdlZF9mbXQsIGNlLT5uYW1lLCBpbl9wb3JjZWxhaW4sCisJCQkJCSAgJmZpcnN0LCBoZWFkZXJfbXNnKTsKKwkJCWhhc19lcnJvcnMgPSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZmlsdGVyZWQpCisJCQljb250aW51ZTsKKworCQluZXcgPSByZWZyZXNoX2NhY2hlX2VudChpc3RhdGUsIGNlLCBvcHRpb25zLCAmY2FjaGVfZXJybm8sICZjaGFuZ2VkKTsKKwkJaWYgKG5ldyA9PSBjZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIW5ldykgeworCQkJY29uc3QgY2hhciAqZm10OworCisJCQlpZiAocmVhbGx5ICYmIGNhY2hlX2Vycm5vID09IEVJTlZBTCkgeworCQkJCS8qIElmIHdlIGFyZSBkb2luZyAtLXJlYWxseS1yZWZyZXNoIHRoYXQKKwkJCQkgKiBtZWFucyB0aGUgaW5kZXggaXMgbm90IHZhbGlkIGFueW1vcmUuCisJCQkJICovCisJCQkJY2UtPmNlX2ZsYWdzICY9IH5DRV9WQUxJRDsKKwkJCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVVBEQVRFX0lOX0JBU0U7CisJCQkJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IENFX0VOVFJZX0NIQU5HRUQ7CisJCQl9CisJCQlpZiAocXVpZXQpCisJCQkJY29udGludWU7CisKKwkJCWlmIChjYWNoZV9lcnJubyA9PSBFTk9FTlQpCisJCQkJZm10ID0gZGVsZXRlZF9mbXQ7CisJCQllbHNlIGlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9JTlRFTlRfVE9fQUREKQorCQkJCWZtdCA9IGFkZGVkX2ZtdDsgLyogbXVzdCBiZSBiZWZvcmUgb3RoZXIgY2hlY2tzICovCisJCQllbHNlIGlmIChjaGFuZ2VkICYgVFlQRV9DSEFOR0VEKQorCQkJCWZtdCA9IHR5cGVjaGFuZ2VfZm10OworCQkJZWxzZQorCQkJCWZtdCA9IG1vZGlmaWVkX2ZtdDsKKwkJCXNob3dfZmlsZShmbXQsCisJCQkJICBjZS0+bmFtZSwgaW5fcG9yY2VsYWluLCAmZmlyc3QsIGhlYWRlcl9tc2cpOworCQkJaGFzX2Vycm9ycyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCXJlcGxhY2VfaW5kZXhfZW50cnkoaXN0YXRlLCBpLCBuZXcpOworCX0KKwlyZXR1cm4gaGFzX2Vycm9yczsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVmcmVzaF9jYWNoZV9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IG9wdGlvbnMpCit7CisJcmV0dXJuIHJlZnJlc2hfY2FjaGVfZW50KCZ0aGVfaW5kZXgsIGNlLCBvcHRpb25zLCBOVUxMLCBOVUxMKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluZGV4IEZpbGUgSS9PCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgSU5ERVhfRk9STUFUX0RFRkFVTFQgMworCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9pbmRleF9mb3JtYXRfZGVmYXVsdCh2b2lkKQoreworCWNoYXIgKmVudnZlcnNpb24gPSBnZXRlbnYoIkdJVF9JTkRFWF9WRVJTSU9OIik7CisJY2hhciAqZW5kcDsKKwlpbnQgdmFsdWU7CisJdW5zaWduZWQgaW50IHZlcnNpb24gPSBJTkRFWF9GT1JNQVRfREVGQVVMVDsKKworCWlmICghZW52dmVyc2lvbikgeworCQlpZiAoIWdpdF9jb25maWdfZ2V0X2ludCgiaW5kZXgudmVyc2lvbiIsICZ2YWx1ZSkpCisJCQl2ZXJzaW9uID0gdmFsdWU7CisJCWlmICh2ZXJzaW9uIDwgSU5ERVhfRk9STUFUX0xCIHx8IElOREVYX0ZPUk1BVF9VQiA8IHZlcnNpb24pIHsKKwkJCXdhcm5pbmcoXygiaW5kZXgudmVyc2lvbiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKwkJCQkgICJVc2luZyB2ZXJzaW9uICVpIiksIElOREVYX0ZPUk1BVF9ERUZBVUxUKTsKKwkJCXJldHVybiBJTkRFWF9GT1JNQVRfREVGQVVMVDsKKwkJfQorCQlyZXR1cm4gdmVyc2lvbjsKKwl9CisKKwl2ZXJzaW9uID0gc3RydG91bChlbnZ2ZXJzaW9uLCAmZW5kcCwgMTApOworCWlmICgqZW5kcCB8fAorCSAgICB2ZXJzaW9uIDwgSU5ERVhfRk9STUFUX0xCIHx8IElOREVYX0ZPUk1BVF9VQiA8IHZlcnNpb24pIHsKKwkJd2FybmluZyhfKCJHSVRfSU5ERVhfVkVSU0lPTiBzZXQsIGJ1dCB0aGUgdmFsdWUgaXMgaW52YWxpZC5cbiIKKwkJCSAgIlVzaW5nIHZlcnNpb24gJWkiKSwgSU5ERVhfRk9STUFUX0RFRkFVTFQpOworCQl2ZXJzaW9uID0gSU5ERVhfRk9STUFUX0RFRkFVTFQ7CisJfQorCXJldHVybiB2ZXJzaW9uOworfQorCisvKgorICogZGV2L2luby91aWQvZ2lkL3NpemUgYXJlIGFsc28ganVzdCB0cmFja2VkIHRvIHRoZSBsb3cgMzIgYml0cworICogQWdhaW4gLSB0aGlzIGlzIGp1c3QgYSAodmVyeSBzdHJvbmcgaW4gcHJhY3RpY2UpIGhldXJpc3RpYyB0aGF0CisgKiB0aGUgaW5vZGUgaGFzbid0IGNoYW5nZWQuCisgKgorICogV2Ugc2F2ZSB0aGUgZmllbGRzIGluIGJpZy1lbmRpYW4gb3JkZXIgdG8gYWxsb3cgdXNpbmcgdGhlCisgKiBpbmRleCBmaWxlIG92ZXIgTkZTIHRyYW5zcGFyZW50bHkuCisgKi8KK3N0cnVjdCBvbmRpc2tfY2FjaGVfZW50cnkgeworCXN0cnVjdCBjYWNoZV90aW1lIGN0aW1lOworCXN0cnVjdCBjYWNoZV90aW1lIG10aW1lOworCXVpbnQzMl90IGRldjsKKwl1aW50MzJfdCBpbm87CisJdWludDMyX3QgbW9kZTsKKwl1aW50MzJfdCB1aWQ7CisJdWludDMyX3QgZ2lkOworCXVpbnQzMl90IHNpemU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1aW50MTZfdCBmbGFnczsKKwljaGFyIG5hbWVbRkxFWF9BUlJBWV07IC8qIG1vcmUgKi8KK307CisKKy8qCisgKiBUaGlzIHN0cnVjdCBpcyB1c2VkIHdoZW4gQ0VfRVhURU5ERUQgYml0IGlzIDEKKyAqIFRoZSBzdHJ1Y3QgbXVzdCBtYXRjaCBvbmRpc2tfY2FjaGVfZW50cnkgZXhhY3RseSBmcm9tCisgKiBjdGltZSB0aWxsIGZsYWdzCisgKi8KK3N0cnVjdCBvbmRpc2tfY2FjaGVfZW50cnlfZXh0ZW5kZWQgeworCXN0cnVjdCBjYWNoZV90aW1lIGN0aW1lOworCXN0cnVjdCBjYWNoZV90aW1lIG10aW1lOworCXVpbnQzMl90IGRldjsKKwl1aW50MzJfdCBpbm87CisJdWludDMyX3QgbW9kZTsKKwl1aW50MzJfdCB1aWQ7CisJdWludDMyX3QgZ2lkOworCXVpbnQzMl90IHNpemU7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1aW50MTZfdCBmbGFnczsKKwl1aW50MTZfdCBmbGFnczI7CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCisvKiBUaGVzZSBhcmUgb25seSB1c2VkIGZvciB2MyBvciBsb3dlciAqLworI2RlZmluZSBhbGlnbl9mbGV4X25hbWUoU1RSVUNULGxlbikgKChvZmZzZXRvZihzdHJ1Y3QgU1RSVUNULG5hbWUpICsgKGxlbikgKyA4KSAmIH43KQorI2RlZmluZSBvbmRpc2tfY2FjaGVfZW50cnlfc2l6ZShsZW4pIGFsaWduX2ZsZXhfbmFtZShvbmRpc2tfY2FjaGVfZW50cnksbGVuKQorI2RlZmluZSBvbmRpc2tfY2FjaGVfZW50cnlfZXh0ZW5kZWRfc2l6ZShsZW4pIGFsaWduX2ZsZXhfbmFtZShvbmRpc2tfY2FjaGVfZW50cnlfZXh0ZW5kZWQsbGVuKQorI2RlZmluZSBvbmRpc2tfY2Vfc2l6ZShjZSkgKCgoY2UpLT5jZV9mbGFncyAmIENFX0VYVEVOREVEKSA/IFwKKwkJCSAgICBvbmRpc2tfY2FjaGVfZW50cnlfZXh0ZW5kZWRfc2l6ZShjZV9uYW1lbGVuKGNlKSkgOiBcCisJCQkgICAgb25kaXNrX2NhY2hlX2VudHJ5X3NpemUoY2VfbmFtZWxlbihjZSkpKQorCitzdGF0aWMgaW50IHZlcmlmeV9oZHIoc3RydWN0IGNhY2hlX2hlYWRlciAqaGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJZ2l0X1NIQV9DVFggYzsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBoZHJfdmVyc2lvbjsKKworCWlmIChoZHItPmhkcl9zaWduYXR1cmUgIT0gaHRvbmwoQ0FDSEVfU0lHTkFUVVJFKSkKKwkJcmV0dXJuIGVycm9yKCJiYWQgc2lnbmF0dXJlIik7CisJaGRyX3ZlcnNpb24gPSBudG9obChoZHItPmhkcl92ZXJzaW9uKTsKKwlpZiAoaGRyX3ZlcnNpb24gPCBJTkRFWF9GT1JNQVRfTEIgfHwgSU5ERVhfRk9STUFUX1VCIDwgaGRyX3ZlcnNpb24pCisJCXJldHVybiBlcnJvcigiYmFkIGluZGV4IHZlcnNpb24gJWQiLCBoZHJfdmVyc2lvbik7CisJZ2l0X1NIQTFfSW5pdCgmYyk7CisJZ2l0X1NIQTFfVXBkYXRlKCZjLCBoZHIsIHNpemUgLSAyMCk7CisJZ2l0X1NIQTFfRmluYWwoc2hhMSwgJmMpOworCWlmIChoYXNoY21wKHNoYTEsICh1bnNpZ25lZCBjaGFyICopaGRyICsgc2l6ZSAtIDIwKSkKKwkJcmV0dXJuIGVycm9yKCJiYWQgaW5kZXggZmlsZSBzaGExIHNpZ25hdHVyZSIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfaW5kZXhfZXh0ZW5zaW9uKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCWNvbnN0IGNoYXIgKmV4dCwgdm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBzeikKK3sKKwlzd2l0Y2ggKENBQ0hFX0VYVChleHQpKSB7CisJY2FzZSBDQUNIRV9FWFRfVFJFRToKKwkJaXN0YXRlLT5jYWNoZV90cmVlID0gY2FjaGVfdHJlZV9yZWFkKGRhdGEsIHN6KTsKKwkJYnJlYWs7CisJY2FzZSBDQUNIRV9FWFRfUkVTT0xWRV9VTkRPOgorCQlpc3RhdGUtPnJlc29sdmVfdW5kbyA9IHJlc29sdmVfdW5kb19yZWFkKGRhdGEsIHN6KTsKKwkJYnJlYWs7CisJY2FzZSBDQUNIRV9FWFRfTElOSzoKKwkJaWYgKHJlYWRfbGlua19leHRlbnNpb24oaXN0YXRlLCBkYXRhLCBzeikpCisJCQlyZXR1cm4gLTE7CisJCWJyZWFrOworCWNhc2UgQ0FDSEVfRVhUX1VOVFJBQ0tFRDoKKwkJaXN0YXRlLT51bnRyYWNrZWQgPSByZWFkX3VudHJhY2tlZF9leHRlbnNpb24oZGF0YSwgc3opOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoKmV4dCA8ICdBJyB8fCAnWicgPCAqZXh0KQorCQkJcmV0dXJuIGVycm9yKCJpbmRleCB1c2VzICUuNHMgZXh0ZW5zaW9uLCB3aGljaCB3ZSBkbyBub3QgdW5kZXJzdGFuZCIsCisJCQkJICAgICBleHQpOworCQlmcHJpbnRmKHN0ZGVyciwgImlnbm9yaW5nICUuNHMgZXh0ZW5zaW9uXG4iLCBleHQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBob2xkX2xvY2tlZF9pbmRleChzdHJ1Y3QgbG9ja19maWxlICpsaywgaW50IGRpZV9vbl9lcnJvcikKK3sKKwlyZXR1cm4gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShsaywgZ2V0X2luZGV4X2ZpbGUoKSwKKwkJCQkJIGRpZV9vbl9lcnJvcgorCQkJCQkgPyBMT0NLX0RJRV9PTl9FUlJPUgorCQkJCQkgOiAwKTsKK30KKworaW50IHJlYWRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJcmV0dXJuIHJlYWRfaW5kZXhfZnJvbShpc3RhdGUsIGdldF9pbmRleF9maWxlKCkpOworfQorCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpjYWNoZV9lbnRyeV9mcm9tX29uZGlzayhzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5ICpvbmRpc2ssCisJCQkJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkJCQkgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkJICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0geG1hbGxvYyhjYWNoZV9lbnRyeV9zaXplKGxlbikpOworCisJY2UtPmNlX3N0YXRfZGF0YS5zZF9jdGltZS5zZWMgPSBnZXRfYmUzMigmb25kaXNrLT5jdGltZS5zZWMpOworCWNlLT5jZV9zdGF0X2RhdGEuc2RfbXRpbWUuc2VjID0gZ2V0X2JlMzIoJm9uZGlzay0+bXRpbWUuc2VjKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX2N0aW1lLm5zZWMgPSBnZXRfYmUzMigmb25kaXNrLT5jdGltZS5uc2VjKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX210aW1lLm5zZWMgPSBnZXRfYmUzMigmb25kaXNrLT5tdGltZS5uc2VjKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX2RldiAgID0gZ2V0X2JlMzIoJm9uZGlzay0+ZGV2KTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX2lubyAgID0gZ2V0X2JlMzIoJm9uZGlzay0+aW5vKTsKKwljZS0+Y2VfbW9kZSAgPSBnZXRfYmUzMigmb25kaXNrLT5tb2RlKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX3VpZCAgID0gZ2V0X2JlMzIoJm9uZGlzay0+dWlkKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX2dpZCAgID0gZ2V0X2JlMzIoJm9uZGlzay0+Z2lkKTsKKwljZS0+Y2Vfc3RhdF9kYXRhLnNkX3NpemUgID0gZ2V0X2JlMzIoJm9uZGlzay0+c2l6ZSk7CisJY2UtPmNlX2ZsYWdzID0gZmxhZ3MgJiB+Q0VfTkFNRU1BU0s7CisJY2UtPmNlX25hbWVsZW4gPSBsZW47CisJY2UtPmluZGV4ID0gMDsKKwloYXNoY3B5KGNlLT5zaGExLCBvbmRpc2stPnNoYTEpOworCW1lbWNweShjZS0+bmFtZSwgbmFtZSwgbGVuKTsKKwljZS0+bmFtZVtsZW5dID0gJ1wwJzsKKwlyZXR1cm4gY2U7Cit9CisKKy8qCisgKiBBZGphY2VudCBjYWNoZSBlbnRyaWVzIHRlbmQgdG8gc2hhcmUgdGhlIGxlYWRpbmcgcGF0aHMsIHNvIGl0IG1ha2VzCisgKiBzZW5zZSB0byBvbmx5IHN0b3JlIHRoZSBkaWZmZXJlbmNlcyBpbiBsYXRlciBlbnRyaWVzLiAgSW4gdGhlIHY0CisgKiBvbi1kaXNrIGZvcm1hdCBvZiB0aGUgaW5kZXgsIGVhY2ggb24tZGlzayBjYWNoZSBlbnRyeSBzdG9yZXMgdGhlCisgKiBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgc3RyaXBwZWQgZnJvbSB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBuYW1lLAorICogYW5kIHRoZSBieXRlcyB0byBhcHBlbmQgdG8gdGhlIHJlc3VsdCwgdG8gY29tZSB1cCB3aXRoIGl0cyBuYW1lLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBleHBhbmRfbmFtZV9maWVsZChzdHJ1Y3Qgc3RyYnVmICpuYW1lLCBjb25zdCBjaGFyICpjcF8pCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZXAsICpjcCA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopY3BfOworCXNpemVfdCBsZW4gPSBkZWNvZGVfdmFyaW50KCZjcCk7CisKKwlpZiAobmFtZS0+bGVuIDwgbGVuKQorCQlkaWUoIm1hbGZvcm1lZCBuYW1lIGZpZWxkIGluIHRoZSBpbmRleCIpOworCXN0cmJ1Zl9yZW1vdmUobmFtZSwgbmFtZS0+bGVuIC0gbGVuLCBsZW4pOworCWZvciAoZXAgPSBjcDsgKmVwOyBlcCsrKQorCQk7IC8qIGZpbmQgdGhlIGVuZCAqLworCXN0cmJ1Zl9hZGQobmFtZSwgY3AsIGVwIC0gY3ApOworCXJldHVybiAoY29uc3QgY2hhciAqKWVwICsgMSAtIGNwXzsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqY3JlYXRlX2Zyb21fZGlzayhzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5ICpvbmRpc2ssCisJCQkJCSAgICB1bnNpZ25lZCBsb25nICplbnRfc2l6ZSwKKwkJCQkJICAgIHN0cnVjdCBzdHJidWYgKnByZXZpb3VzX25hbWUpCit7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlzaXplX3QgbGVuOworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IGZsYWdzOworCisJLyogT24tZGlzayBmbGFncyBhcmUganVzdCAxNiBiaXRzICovCisJZmxhZ3MgPSBnZXRfYmUxNigmb25kaXNrLT5mbGFncyk7CisJbGVuID0gZmxhZ3MgJiBDRV9OQU1FTUFTSzsKKworCWlmIChmbGFncyAmIENFX0VYVEVOREVEKSB7CisJCXN0cnVjdCBvbmRpc2tfY2FjaGVfZW50cnlfZXh0ZW5kZWQgKm9uZGlzazI7CisJCWludCBleHRlbmRlZF9mbGFnczsKKwkJb25kaXNrMiA9IChzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5X2V4dGVuZGVkICopb25kaXNrOworCQlleHRlbmRlZF9mbGFncyA9IGdldF9iZTE2KCZvbmRpc2syLT5mbGFnczIpIDw8IDE2OworCQkvKiBXZSBkbyBub3QgeWV0IHVuZGVyc3RhbmQgYW55IGJpdCBvdXQgb2YgQ0VfRVhURU5ERURfRkxBR1MgKi8KKwkJaWYgKGV4dGVuZGVkX2ZsYWdzICYgfkNFX0VYVEVOREVEX0ZMQUdTKQorCQkJZGllKCJVbmtub3duIGluZGV4IGVudHJ5IGZvcm1hdCAlMDh4IiwgZXh0ZW5kZWRfZmxhZ3MpOworCQlmbGFncyB8PSBleHRlbmRlZF9mbGFnczsKKwkJbmFtZSA9IG9uZGlzazItPm5hbWU7CisJfQorCWVsc2UKKwkJbmFtZSA9IG9uZGlzay0+bmFtZTsKKworCWlmICghcHJldmlvdXNfbmFtZSkgeworCQkvKiB2MyBhbmQgZWFybGllciAqLworCQlpZiAobGVuID09IENFX05BTUVNQVNLKQorCQkJbGVuID0gc3RybGVuKG5hbWUpOworCQljZSA9IGNhY2hlX2VudHJ5X2Zyb21fb25kaXNrKG9uZGlzaywgZmxhZ3MsIG5hbWUsIGxlbik7CisKKwkJKmVudF9zaXplID0gb25kaXNrX2NlX3NpemUoY2UpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgY29uc3VtZWQ7CisJCWNvbnN1bWVkID0gZXhwYW5kX25hbWVfZmllbGQocHJldmlvdXNfbmFtZSwgbmFtZSk7CisJCWNlID0gY2FjaGVfZW50cnlfZnJvbV9vbmRpc2sob25kaXNrLCBmbGFncywKKwkJCQkJICAgICBwcmV2aW91c19uYW1lLT5idWYsCisJCQkJCSAgICAgcHJldmlvdXNfbmFtZS0+bGVuKTsKKworCQkqZW50X3NpemUgPSAobmFtZSAtICgoY2hhciAqKW9uZGlzaykpICsgY29uc3VtZWQ7CisJfQorCXJldHVybiBjZTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfY2Vfb3JkZXIoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAxOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2kgLSAxXTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpuZXh0X2NlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJaW50IG5hbWVfY29tcGFyZSA9IHN0cmNtcChjZS0+bmFtZSwgbmV4dF9jZS0+bmFtZSk7CisKKwkJaWYgKDAgPCBuYW1lX2NvbXBhcmUpCisJCQlkaWUoInVub3JkZXJlZCBzdGFnZSBlbnRyaWVzIGluIGluZGV4Iik7CisJCWlmICghbmFtZV9jb21wYXJlKSB7CisJCQlpZiAoIWNlX3N0YWdlKGNlKSkKKwkJCQlkaWUoIm11bHRpcGxlIHN0YWdlIGVudHJpZXMgZm9yIG1lcmdlZCBmaWxlICclcyciLAorCQkJCSAgICBjZS0+bmFtZSk7CisJCQlpZiAoY2Vfc3RhZ2UoY2UpID4gY2Vfc3RhZ2UobmV4dF9jZSkpCisJCQkJZGllKCJ1bm9yZGVyZWQgc3RhZ2UgZW50cmllcyBmb3IgJyVzJyIsCisJCQkJICAgIGNlLT5uYW1lKTsKKwkJfQorCX0KK30KKworLyogcmVtZW1iZXIgdG8gZGlzY2FyZF9jYWNoZSgpIGJlZm9yZSByZWFkaW5nIGEgZGlmZmVyZW50IGNhY2hlISAqLworaW50IGRvX3JlYWRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBtdXN0X2V4aXN0KQoreworCWludCBmZCwgaTsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl1bnNpZ25lZCBsb25nIHNyY19vZmZzZXQ7CisJc3RydWN0IGNhY2hlX2hlYWRlciAqaGRyOworCXZvaWQgKm1tYXA7CisJc2l6ZV90IG1tYXBfc2l6ZTsKKwlzdHJ1Y3Qgc3RyYnVmIHByZXZpb3VzX25hbWVfYnVmID0gU1RSQlVGX0lOSVQsICpwcmV2aW91c19uYW1lOworCisJaWYgKGlzdGF0ZS0+aW5pdGlhbGl6ZWQpCisJCXJldHVybiBpc3RhdGUtPmNhY2hlX25yOworCisJaXN0YXRlLT50aW1lc3RhbXAuc2VjID0gMDsKKwlpc3RhdGUtPnRpbWVzdGFtcC5uc2VjID0gMDsKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApIHsKKwkJaWYgKCFtdXN0X2V4aXN0ICYmIGVycm5vID09IEVOT0VOVCkKKwkJCXJldHVybiAwOworCQlkaWVfZXJybm8oIiVzOiBpbmRleCBmaWxlIG9wZW4gZmFpbGVkIiwgcGF0aCk7CisJfQorCisJaWYgKGZzdGF0KGZkLCAmc3QpKQorCQlkaWVfZXJybm8oImNhbm5vdCBzdGF0IHRoZSBvcGVuIGluZGV4Iik7CisKKwltbWFwX3NpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCWlmIChtbWFwX3NpemUgPCBzaXplb2Yoc3RydWN0IGNhY2hlX2hlYWRlcikgKyAyMCkKKwkJZGllKCJpbmRleCBmaWxlIHNtYWxsZXIgdGhhbiBleHBlY3RlZCIpOworCisJbW1hcCA9IHhtbWFwKE5VTEwsIG1tYXBfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCWlmIChtbWFwID09IE1BUF9GQUlMRUQpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIG1hcCBpbmRleCBmaWxlIik7CisJY2xvc2UoZmQpOworCisJaGRyID0gbW1hcDsKKwlpZiAodmVyaWZ5X2hkcihoZHIsIG1tYXBfc2l6ZSkgPCAwKQorCQlnb3RvIHVubWFwOworCisJaGFzaGNweShpc3RhdGUtPnNoYTEsIChjb25zdCB1bnNpZ25lZCBjaGFyICopaGRyICsgbW1hcF9zaXplIC0gMjApOworCWlzdGF0ZS0+dmVyc2lvbiA9IG50b2hsKGhkci0+aGRyX3ZlcnNpb24pOworCWlzdGF0ZS0+Y2FjaGVfbnIgPSBudG9obChoZHItPmhkcl9lbnRyaWVzKTsKKwlpc3RhdGUtPmNhY2hlX2FsbG9jID0gYWxsb2NfbnIoaXN0YXRlLT5jYWNoZV9ucik7CisJaXN0YXRlLT5jYWNoZSA9IHhjYWxsb2MoaXN0YXRlLT5jYWNoZV9hbGxvYywgc2l6ZW9mKCppc3RhdGUtPmNhY2hlKSk7CisJaXN0YXRlLT5pbml0aWFsaXplZCA9IDE7CisKKwlpZiAoaXN0YXRlLT52ZXJzaW9uID09IDQpCisJCXByZXZpb3VzX25hbWUgPSAmcHJldmlvdXNfbmFtZV9idWY7CisJZWxzZQorCQlwcmV2aW91c19uYW1lID0gTlVMTDsKKworCXNyY19vZmZzZXQgPSBzaXplb2YoKmhkcik7CisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5ICpkaXNrX2NlOworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCQl1bnNpZ25lZCBsb25nIGNvbnN1bWVkOworCisJCWRpc2tfY2UgPSAoc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSAqKSgoY2hhciAqKW1tYXAgKyBzcmNfb2Zmc2V0KTsKKwkJY2UgPSBjcmVhdGVfZnJvbV9kaXNrKGRpc2tfY2UsICZjb25zdW1lZCwgcHJldmlvdXNfbmFtZSk7CisJCXNldF9pbmRleF9lbnRyeShpc3RhdGUsIGksIGNlKTsKKworCQlzcmNfb2Zmc2V0ICs9IGNvbnN1bWVkOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcHJldmlvdXNfbmFtZV9idWYpOworCWlzdGF0ZS0+dGltZXN0YW1wLnNlYyA9IHN0LnN0X210aW1lOworCWlzdGF0ZS0+dGltZXN0YW1wLm5zZWMgPSBTVF9NVElNRV9OU0VDKHN0KTsKKworCXdoaWxlIChzcmNfb2Zmc2V0IDw9IG1tYXBfc2l6ZSAtIDIwIC0gOCkgeworCQkvKiBBZnRlciBhbiBhcnJheSBvZiBhY3RpdmVfbnIgaW5kZXggZW50cmllcywKKwkJICogdGhlcmUgY2FuIGJlIGFyYml0cmFyeSBudW1iZXIgb2YgZXh0ZW5kZWQKKwkJICogc2VjdGlvbnMsIGVhY2ggb2Ygd2hpY2ggaXMgcHJlZml4ZWQgd2l0aAorCQkgKiBleHRlbnNpb24gbmFtZSAoNC1ieXRlKSBhbmQgc2VjdGlvbiBsZW5ndGgKKwkJICogaW4gNC1ieXRlIG5ldHdvcmsgYnl0ZSBvcmRlci4KKwkJICovCisJCXVpbnQzMl90IGV4dHNpemU7CisJCW1lbWNweSgmZXh0c2l6ZSwgKGNoYXIgKiltbWFwICsgc3JjX29mZnNldCArIDQsIDQpOworCQlleHRzaXplID0gbnRvaGwoZXh0c2l6ZSk7CisJCWlmIChyZWFkX2luZGV4X2V4dGVuc2lvbihpc3RhdGUsCisJCQkJCSAoY29uc3QgY2hhciAqKSBtbWFwICsgc3JjX29mZnNldCwKKwkJCQkJIChjaGFyICopIG1tYXAgKyBzcmNfb2Zmc2V0ICsgOCwKKwkJCQkJIGV4dHNpemUpIDwgMCkKKwkJCWdvdG8gdW5tYXA7CisJCXNyY19vZmZzZXQgKz0gODsKKwkJc3JjX29mZnNldCArPSBleHRzaXplOworCX0KKwltdW5tYXAobW1hcCwgbW1hcF9zaXplKTsKKwlyZXR1cm4gaXN0YXRlLT5jYWNoZV9ucjsKKwordW5tYXA6CisJbXVubWFwKG1tYXAsIG1tYXBfc2l6ZSk7CisJZGllKCJpbmRleCBmaWxlIGNvcnJ1cHQiKTsKK30KKworaW50IHJlYWRfaW5kZXhfZnJvbShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3BsaXRfaW5kZXggKnNwbGl0X2luZGV4OworCWludCByZXQ7CisKKwkvKiBpc3RhdGUtPmluaXRpYWxpemVkIGNvdmVycyBib3RoIC5naXQvaW5kZXggYW5kIC5naXQvc2hhcmVkaW5kZXgueHh4ICovCisJaWYgKGlzdGF0ZS0+aW5pdGlhbGl6ZWQpCisJCXJldHVybiBpc3RhdGUtPmNhY2hlX25yOworCisJcmV0ID0gZG9fcmVhZF9pbmRleChpc3RhdGUsIHBhdGgsIDApOworCXNwbGl0X2luZGV4ID0gaXN0YXRlLT5zcGxpdF9pbmRleDsKKwlpZiAoIXNwbGl0X2luZGV4IHx8IGlzX251bGxfc2hhMShzcGxpdF9pbmRleC0+YmFzZV9zaGExKSkgeworCQljaGVja19jZV9vcmRlcihpc3RhdGUpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChzcGxpdF9pbmRleC0+YmFzZSkKKwkJZGlzY2FyZF9pbmRleChzcGxpdF9pbmRleC0+YmFzZSk7CisJZWxzZQorCQlzcGxpdF9pbmRleC0+YmFzZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpzcGxpdF9pbmRleC0+YmFzZSkpOworCXJldCA9IGRvX3JlYWRfaW5kZXgoc3BsaXRfaW5kZXgtPmJhc2UsCisJCQkgICAgZ2l0X3BhdGgoInNoYXJlZGluZGV4LiVzIiwKKwkJCQkgICAgIHNoYTFfdG9faGV4KHNwbGl0X2luZGV4LT5iYXNlX3NoYTEpKSwgMSk7CisJaWYgKGhhc2hjbXAoc3BsaXRfaW5kZXgtPmJhc2Vfc2hhMSwgc3BsaXRfaW5kZXgtPmJhc2UtPnNoYTEpKQorCQlkaWUoImJyb2tlbiBpbmRleCwgZXhwZWN0ICVzIGluICVzLCBnb3QgJXMiLAorCQkgICAgc2hhMV90b19oZXgoc3BsaXRfaW5kZXgtPmJhc2Vfc2hhMSksCisJCSAgICBnaXRfcGF0aCgic2hhcmVkaW5kZXguJXMiLAorCQkJICAgICBzaGExX3RvX2hleChzcGxpdF9pbmRleC0+YmFzZV9zaGExKSksCisJCSAgICBzaGExX3RvX2hleChzcGxpdF9pbmRleC0+YmFzZS0+c2hhMSkpOworCW1lcmdlX2Jhc2VfaW5kZXgoaXN0YXRlKTsKKwljaGVja19jZV9vcmRlcihpc3RhdGUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBpc19pbmRleF91bmJvcm4oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJcmV0dXJuICghaXN0YXRlLT5jYWNoZV9uciAmJiAhaXN0YXRlLT50aW1lc3RhbXAuc2VjKTsKK30KKworaW50IGRpc2NhcmRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCWlmIChpc3RhdGUtPmNhY2hlW2ldLT5pbmRleCAmJgorCQkgICAgaXN0YXRlLT5zcGxpdF9pbmRleCAmJgorCQkgICAgaXN0YXRlLT5zcGxpdF9pbmRleC0+YmFzZSAmJgorCQkgICAgaXN0YXRlLT5jYWNoZVtpXS0+aW5kZXggPD0gaXN0YXRlLT5zcGxpdF9pbmRleC0+YmFzZS0+Y2FjaGVfbnIgJiYKKwkJICAgIGlzdGF0ZS0+Y2FjaGVbaV0gPT0gaXN0YXRlLT5zcGxpdF9pbmRleC0+YmFzZS0+Y2FjaGVbaXN0YXRlLT5jYWNoZVtpXS0+aW5kZXggLSAxXSkKKwkJCWNvbnRpbnVlOworCQlmcmVlKGlzdGF0ZS0+Y2FjaGVbaV0pOworCX0KKwlyZXNvbHZlX3VuZG9fY2xlYXJfaW5kZXgoaXN0YXRlKTsKKwlpc3RhdGUtPmNhY2hlX25yID0gMDsKKwlpc3RhdGUtPmNhY2hlX2NoYW5nZWQgPSAwOworCWlzdGF0ZS0+dGltZXN0YW1wLnNlYyA9IDA7CisJaXN0YXRlLT50aW1lc3RhbXAubnNlYyA9IDA7CisJZnJlZV9uYW1lX2hhc2goaXN0YXRlKTsKKwljYWNoZV90cmVlX2ZyZWUoJihpc3RhdGUtPmNhY2hlX3RyZWUpKTsKKwlpc3RhdGUtPmluaXRpYWxpemVkID0gMDsKKwlmcmVlKGlzdGF0ZS0+Y2FjaGUpOworCWlzdGF0ZS0+Y2FjaGUgPSBOVUxMOworCWlzdGF0ZS0+Y2FjaGVfYWxsb2MgPSAwOworCWRpc2NhcmRfc3BsaXRfaW5kZXgoaXN0YXRlKTsKKwlmcmVlX3VudHJhY2tlZF9jYWNoZShpc3RhdGUtPnVudHJhY2tlZCk7CisJaXN0YXRlLT51bnRyYWNrZWQgPSBOVUxMOworCXJldHVybiAwOworfQorCitpbnQgdW5tZXJnZWRfaW5kZXgoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlpZiAoY2Vfc3RhZ2UoaXN0YXRlLT5jYWNoZVtpXSkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgV1JJVEVfQlVGRkVSX1NJWkUgODE5Mgorc3RhdGljIHVuc2lnbmVkIGNoYXIgd3JpdGVfYnVmZmVyW1dSSVRFX0JVRkZFUl9TSVpFXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlX2J1ZmZlcl9sZW47CisKK3N0YXRpYyBpbnQgY2Vfd3JpdGVfZmx1c2goZ2l0X1NIQV9DVFggKmNvbnRleHQsIGludCBmZCkKK3sKKwl1bnNpZ25lZCBpbnQgYnVmZmVyZWQgPSB3cml0ZV9idWZmZXJfbGVuOworCWlmIChidWZmZXJlZCkgeworCQlnaXRfU0hBMV9VcGRhdGUoY29udGV4dCwgd3JpdGVfYnVmZmVyLCBidWZmZXJlZCk7CisJCWlmICh3cml0ZV9pbl9mdWxsKGZkLCB3cml0ZV9idWZmZXIsIGJ1ZmZlcmVkKSAhPSBidWZmZXJlZCkKKwkJCXJldHVybiAtMTsKKwkJd3JpdGVfYnVmZmVyX2xlbiA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNlX3dyaXRlKGdpdF9TSEFfQ1RYICpjb250ZXh0LCBpbnQgZmQsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCit7CisJd2hpbGUgKGxlbikgeworCQl1bnNpZ25lZCBpbnQgYnVmZmVyZWQgPSB3cml0ZV9idWZmZXJfbGVuOworCQl1bnNpZ25lZCBpbnQgcGFydGlhbCA9IFdSSVRFX0JVRkZFUl9TSVpFIC0gYnVmZmVyZWQ7CisJCWlmIChwYXJ0aWFsID4gbGVuKQorCQkJcGFydGlhbCA9IGxlbjsKKwkJbWVtY3B5KHdyaXRlX2J1ZmZlciArIGJ1ZmZlcmVkLCBkYXRhLCBwYXJ0aWFsKTsKKwkJYnVmZmVyZWQgKz0gcGFydGlhbDsKKwkJaWYgKGJ1ZmZlcmVkID09IFdSSVRFX0JVRkZFUl9TSVpFKSB7CisJCQl3cml0ZV9idWZmZXJfbGVuID0gYnVmZmVyZWQ7CisJCQlpZiAoY2Vfd3JpdGVfZmx1c2goY29udGV4dCwgZmQpKQorCQkJCXJldHVybiAtMTsKKwkJCWJ1ZmZlcmVkID0gMDsKKwkJfQorCQl3cml0ZV9idWZmZXJfbGVuID0gYnVmZmVyZWQ7CisJCWxlbiAtPSBwYXJ0aWFsOworCQlkYXRhID0gKGNoYXIgKikgZGF0YSArIHBhcnRpYWw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX2luZGV4X2V4dF9oZWFkZXIoZ2l0X1NIQV9DVFggKmNvbnRleHQsIGludCBmZCwKKwkJCQkgIHVuc2lnbmVkIGludCBleHQsIHVuc2lnbmVkIGludCBzeikKK3sKKwlleHQgPSBodG9ubChleHQpOworCXN6ID0gaHRvbmwoc3opOworCXJldHVybiAoKGNlX3dyaXRlKGNvbnRleHQsIGZkLCAmZXh0LCA0KSA8IDApIHx8CisJCShjZV93cml0ZShjb250ZXh0LCBmZCwgJnN6LCA0KSA8IDApKSA/IC0xIDogMDsKK30KKworc3RhdGljIGludCBjZV9mbHVzaChnaXRfU0hBX0NUWCAqY29udGV4dCwgaW50IGZkLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGludCBsZWZ0ID0gd3JpdGVfYnVmZmVyX2xlbjsKKworCWlmIChsZWZ0KSB7CisJCXdyaXRlX2J1ZmZlcl9sZW4gPSAwOworCQlnaXRfU0hBMV9VcGRhdGUoY29udGV4dCwgd3JpdGVfYnVmZmVyLCBsZWZ0KTsKKwl9CisKKwkvKiBGbHVzaCBmaXJzdCBpZiBub3QgZW5vdWdoIHNwYWNlIGZvciBTSEExIHNpZ25hdHVyZSAqLworCWlmIChsZWZ0ICsgMjAgPiBXUklURV9CVUZGRVJfU0laRSkgeworCQlpZiAod3JpdGVfaW5fZnVsbChmZCwgd3JpdGVfYnVmZmVyLCBsZWZ0KSAhPSBsZWZ0KQorCQkJcmV0dXJuIC0xOworCQlsZWZ0ID0gMDsKKwl9CisKKwkvKiBBcHBlbmQgdGhlIFNIQTEgc2lnbmF0dXJlIGF0IHRoZSBlbmQgKi8KKwlnaXRfU0hBMV9GaW5hbCh3cml0ZV9idWZmZXIgKyBsZWZ0LCBjb250ZXh0KTsKKwloYXNoY3B5KHNoYTEsIHdyaXRlX2J1ZmZlciArIGxlZnQpOworCWxlZnQgKz0gMjA7CisJcmV0dXJuICh3cml0ZV9pbl9mdWxsKGZkLCB3cml0ZV9idWZmZXIsIGxlZnQpICE9IGxlZnQpID8gLTEgOiAwOworfQorCitzdGF0aWMgdm9pZCBjZV9zbXVkZ2VfcmFjaWx5X2NsZWFuX2VudHJ5KHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJLyoKKwkgKiBUaGUgb25seSB0aGluZyB3ZSBjYXJlIGFib3V0IGluIHRoaXMgZnVuY3Rpb24gaXMgdG8gc211ZGdlIHRoZQorCSAqIGZhbHNlbHkgY2xlYW4gZW50cnkgZHVlIHRvIHRvdWNoLXVwZGF0ZS10b3VjaCByYWNlLCBzbyB3ZSBsZWF2ZQorCSAqIGV2ZXJ5dGhpbmcgZWxzZSBhcyB0aGV5IGFyZS4gIFdlIGFyZSBjYWxsZWQgZm9yIGVudHJpZXMgd2hvc2UKKwkgKiBjZV9zdGF0X2RhdGEuc2RfbXRpbWUgbWF0Y2ggdGhlIGluZGV4IGZpbGUgbXRpbWUuCisJICoKKwkgKiBOb3RlIHRoYXQgdGhpcyBhY3R1YWxseSBkb2VzIG5vdCBkbyBtdWNoIGZvciBnaXRsaW5rcywgZm9yCisJICogd2hpY2ggY2VfbWF0Y2hfc3RhdF9iYXNpYygpIGFsd2F5cyBnb2VzIHRvIHRoZSBhY3R1YWwKKwkgKiBjb250ZW50cy4gIFRoZSBjYWxsZXIgY2hlY2tzIHdpdGggaXNfcmFjeV90aW1lc3RhbXAoKSB3aGljaAorCSAqIGFsd2F5cyBzYXlzICJubyIgZm9yIGdpdGxpbmtzLCBzbyB3ZSBhcmUgbm90IGNhbGxlZCBmb3IgdGhlbSA7LSkKKwkgKi8KKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChsc3RhdChjZS0+bmFtZSwgJnN0KSA8IDApCisJCXJldHVybjsKKwlpZiAoY2VfbWF0Y2hfc3RhdF9iYXNpYyhjZSwgJnN0KSkKKwkJcmV0dXJuOworCWlmIChjZV9tb2RpZmllZF9jaGVja19mcyhjZSwgJnN0KSkgeworCQkvKiBUaGlzIGlzICJyYWNpbHkgY2xlYW4iOyBzbXVkZ2UgaXQuICBOb3RlIHRoYXQgdGhpcworCQkgKiBpcyBhIHRyaWNreSBjb2RlLiAgQXQgZmlyc3QgZ2xhbmNlLCBpdCBtYXkgYXBwZWFyCisJCSAqIHRoYXQgaXQgY2FuIGJyZWFrIHdpdGggdGhpcyBzZXF1ZW5jZToKKwkJICoKKwkJICogJCBlY2hvIHh5enp5ID5mcm90egorCQkgKiAkIGdpdC11cGRhdGUtaW5kZXggLS1hZGQgZnJvdHoKKwkJICogJCA6ID5mcm90egorCQkgKiAkIHNsZWVwIDMKKwkJICogJCBlY2hvIGZpbGZyZSA+bml0Zm9sCisJCSAqICQgZ2l0LXVwZGF0ZS1pbmRleCAtLWFkZCBuaXRmb2wKKwkJICoKKwkJICogYnV0IGl0IGRvZXMgbm90LiAgV2hlbiB0aGUgc2Vjb25kIHVwZGF0ZS1pbmRleCBydW5zLAorCQkgKiBpdCBub3RpY2VzIHRoYXQgdGhlIGVudHJ5ICJmcm90eiIgaGFzIHRoZSBzYW1lIHRpbWVzdGFtcAorCQkgKiBhcyBpbmRleCwgYW5kIGlmIHdlIHdlcmUgdG8gc211ZGdlIGl0IGJ5IHJlc2V0dGluZyBpdHMKKwkJICogc2l6ZSB0byB6ZXJvIGhlcmUsIHRoZW4gdGhlIG9iamVjdCBuYW1lIHJlY29yZGVkCisJCSAqIGluIGluZGV4IGlzIHRoZSA2LWJ5dGUgZmlsZSBidXQgdGhlIGNhY2hlZCBzdGF0IGluZm9ybWF0aW9uCisJCSAqIGJlY29tZXMgemVybyAtLS0gd2hpY2ggd291bGQgdGhlbiBtYXRjaCB3aGF0IHdlIHdvdWxkCisJCSAqIG9idGFpbiBmcm9tIHRoZSBmaWxlc3lzdGVtIG5leHQgdGltZSB3ZSBzdGF0KCJmcm90eiIpLgorCQkgKgorCQkgKiBIb3dldmVyLCB0aGUgc2Vjb25kIHVwZGF0ZS1pbmRleCwgYmVmb3JlIGNhbGxpbmcKKwkJICogdGhpcyBmdW5jdGlvbiwgbm90aWNlcyB0aGF0IHRoZSBjYWNoZWQgc2l6ZSBpcyA2CisJCSAqIGJ5dGVzIGFuZCB3aGF0IGlzIG9uIHRoZSBmaWxlc3lzdGVtIGlzIGFuIGVtcHR5CisJCSAqIGZpbGUsIGFuZCBuZXZlciBjYWxscyB1cywgc28gdGhlIGNhY2hlZCBzaXplIGluZm9ybWF0aW9uCisJCSAqIGZvciAiZnJvdHoiIHN0YXlzIDYgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGZpbGVzeXN0ZW0uCisJCSAqLworCQljZS0+Y2Vfc3RhdF9kYXRhLnNkX3NpemUgPSAwOworCX0KK30KKworLyogQ29weSBtaXNjZWxsYW5lb3VzIGZpZWxkcyBidXQgbm90IHRoZSBuYW1lICovCitzdGF0aWMgY2hhciAqY29weV9jYWNoZV9lbnRyeV90b19vbmRpc2soc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeSAqb25kaXNrLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCXNob3J0IGZsYWdzOworCisJb25kaXNrLT5jdGltZS5zZWMgPSBodG9ubChjZS0+Y2Vfc3RhdF9kYXRhLnNkX2N0aW1lLnNlYyk7CisJb25kaXNrLT5tdGltZS5zZWMgPSBodG9ubChjZS0+Y2Vfc3RhdF9kYXRhLnNkX210aW1lLnNlYyk7CisJb25kaXNrLT5jdGltZS5uc2VjID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF9jdGltZS5uc2VjKTsKKwlvbmRpc2stPm10aW1lLm5zZWMgPSBodG9ubChjZS0+Y2Vfc3RhdF9kYXRhLnNkX210aW1lLm5zZWMpOworCW9uZGlzay0+ZGV2ICA9IGh0b25sKGNlLT5jZV9zdGF0X2RhdGEuc2RfZGV2KTsKKwlvbmRpc2stPmlubyAgPSBodG9ubChjZS0+Y2Vfc3RhdF9kYXRhLnNkX2lubyk7CisJb25kaXNrLT5tb2RlID0gaHRvbmwoY2UtPmNlX21vZGUpOworCW9uZGlzay0+dWlkICA9IGh0b25sKGNlLT5jZV9zdGF0X2RhdGEuc2RfdWlkKTsKKwlvbmRpc2stPmdpZCAgPSBodG9ubChjZS0+Y2Vfc3RhdF9kYXRhLnNkX2dpZCk7CisJb25kaXNrLT5zaXplID0gaHRvbmwoY2UtPmNlX3N0YXRfZGF0YS5zZF9zaXplKTsKKwloYXNoY3B5KG9uZGlzay0+c2hhMSwgY2UtPnNoYTEpOworCisJZmxhZ3MgPSBjZS0+Y2VfZmxhZ3MgJiB+Q0VfTkFNRU1BU0s7CisJZmxhZ3MgfD0gKGNlX25hbWVsZW4oY2UpID49IENFX05BTUVNQVNLID8gQ0VfTkFNRU1BU0sgOiBjZV9uYW1lbGVuKGNlKSk7CisJb25kaXNrLT5mbGFncyA9IGh0b25zKGZsYWdzKTsKKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfRVhURU5ERUQpIHsKKwkJc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeV9leHRlbmRlZCAqb25kaXNrMjsKKwkJb25kaXNrMiA9IChzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5X2V4dGVuZGVkICopb25kaXNrOworCQlvbmRpc2syLT5mbGFnczIgPSBodG9ucygoY2UtPmNlX2ZsYWdzICYgQ0VfRVhURU5ERURfRkxBR1MpID4+IDE2KTsKKwkJcmV0dXJuIG9uZGlzazItPm5hbWU7CisJfQorCWVsc2UgeworCQlyZXR1cm4gb25kaXNrLT5uYW1lOworCX0KK30KKworc3RhdGljIGludCBjZV93cml0ZV9lbnRyeShnaXRfU0hBX0NUWCAqYywgaW50IGZkLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJICBzdHJ1Y3Qgc3RyYnVmICpwcmV2aW91c19uYW1lKQoreworCWludCBzaXplOworCXN0cnVjdCBvbmRpc2tfY2FjaGVfZW50cnkgKm9uZGlzazsKKwlpbnQgc2F2ZWRfbmFtZWxlbiA9IHNhdmVkX25hbWVsZW47IC8qIGNvbXBpbGVyIHdvcmthcm91bmQgKi8KKwljaGFyICpuYW1lOworCWludCByZXN1bHQ7CisKKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfU1RSSVBfTkFNRSkgeworCQlzYXZlZF9uYW1lbGVuID0gY2VfbmFtZWxlbihjZSk7CisJCWNlLT5jZV9uYW1lbGVuID0gMDsKKwl9CisKKwlpZiAoIXByZXZpb3VzX25hbWUpIHsKKwkJc2l6ZSA9IG9uZGlza19jZV9zaXplKGNlKTsKKwkJb25kaXNrID0geGNhbGxvYygxLCBzaXplKTsKKwkJbmFtZSA9IGNvcHlfY2FjaGVfZW50cnlfdG9fb25kaXNrKG9uZGlzaywgY2UpOworCQltZW1jcHkobmFtZSwgY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKTsKKwl9IGVsc2UgeworCQlpbnQgY29tbW9uLCB0b19yZW1vdmUsIHByZWZpeF9zaXplOworCQl1bnNpZ25lZCBjaGFyIHRvX3JlbW92ZV92aVsxNl07CisJCWZvciAoY29tbW9uID0gMDsKKwkJICAgICAoY2UtPm5hbWVbY29tbW9uXSAmJgorCQkgICAgICBjb21tb24gPCBwcmV2aW91c19uYW1lLT5sZW4gJiYKKwkJICAgICAgY2UtPm5hbWVbY29tbW9uXSA9PSBwcmV2aW91c19uYW1lLT5idWZbY29tbW9uXSk7CisJCSAgICAgY29tbW9uKyspCisJCQk7IC8qIHN0aWxsIG1hdGNoaW5nICovCisJCXRvX3JlbW92ZSA9IHByZXZpb3VzX25hbWUtPmxlbiAtIGNvbW1vbjsKKwkJcHJlZml4X3NpemUgPSBlbmNvZGVfdmFyaW50KHRvX3JlbW92ZSwgdG9fcmVtb3ZlX3ZpKTsKKworCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfRVhURU5ERUQpCisJCQlzaXplID0gb2Zmc2V0b2Yoc3RydWN0IG9uZGlza19jYWNoZV9lbnRyeV9leHRlbmRlZCwgbmFtZSk7CisJCWVsc2UKKwkJCXNpemUgPSBvZmZzZXRvZihzdHJ1Y3Qgb25kaXNrX2NhY2hlX2VudHJ5LCBuYW1lKTsKKwkJc2l6ZSArPSBwcmVmaXhfc2l6ZSArIChjZV9uYW1lbGVuKGNlKSAtIGNvbW1vbiArIDEpOworCisJCW9uZGlzayA9IHhjYWxsb2MoMSwgc2l6ZSk7CisJCW5hbWUgPSBjb3B5X2NhY2hlX2VudHJ5X3RvX29uZGlzayhvbmRpc2ssIGNlKTsKKwkJbWVtY3B5KG5hbWUsIHRvX3JlbW92ZV92aSwgcHJlZml4X3NpemUpOworCQltZW1jcHkobmFtZSArIHByZWZpeF9zaXplLCBjZS0+bmFtZSArIGNvbW1vbiwgY2VfbmFtZWxlbihjZSkgLSBjb21tb24pOworCisJCXN0cmJ1Zl9zcGxpY2UocHJldmlvdXNfbmFtZSwgY29tbW9uLCB0b19yZW1vdmUsCisJCQkgICAgICBjZS0+bmFtZSArIGNvbW1vbiwgY2VfbmFtZWxlbihjZSkgLSBjb21tb24pOworCX0KKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfU1RSSVBfTkFNRSkgeworCQljZS0+Y2VfbmFtZWxlbiA9IHNhdmVkX25hbWVsZW47CisJCWNlLT5jZV9mbGFncyAmPSB+Q0VfU1RSSVBfTkFNRTsKKwl9CisKKwlyZXN1bHQgPSBjZV93cml0ZShjLCBmZCwgb25kaXNrLCBzaXplKTsKKwlmcmVlKG9uZGlzayk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gdmVyaWZpZXMgaWYgaW5kZXhfc3RhdGUgaGFzIHRoZSBjb3JyZWN0IHNoYTEgb2YgdGhlCisgKiBpbmRleCBmaWxlLiAgRG9uJ3QgZGllIGlmIHdlIGhhdmUgYW55IG90aGVyIGZhaWx1cmUsIGp1c3QgcmV0dXJuIDAuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X2luZGV4X2Zyb20oY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGZkOworCXNzaXplX3QgbjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJaWYgKCFpc3RhdGUtPmluaXRpYWxpemVkKQorCQlyZXR1cm4gMDsKKworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZnN0YXQoZmQsICZzdCkpCisJCWdvdG8gb3V0OworCisJaWYgKHN0LnN0X3NpemUgPCBzaXplb2Yoc3RydWN0IGNhY2hlX2hlYWRlcikgKyAyMCkKKwkJZ290byBvdXQ7CisKKwluID0gcHJlYWRfaW5fZnVsbChmZCwgc2hhMSwgMjAsIHN0LnN0X3NpemUgLSAyMCk7CisJaWYgKG4gIT0gMjApCisJCWdvdG8gb3V0OworCisJaWYgKGhhc2hjbXAoaXN0YXRlLT5zaGExLCBzaGExKSkKKwkJZ290byBvdXQ7CisKKwljbG9zZShmZCk7CisJcmV0dXJuIDE7CisKK291dDoKKwljbG9zZShmZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2luZGV4KGNvbnN0IHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXJldHVybiB2ZXJpZnlfaW5kZXhfZnJvbShpc3RhdGUsIGdldF9pbmRleF9maWxlKCkpOworfQorCitzdGF0aWMgaW50IGhhc19yYWN5X3RpbWVzdGFtcChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpbnQgZW50cmllcyA9IGlzdGF0ZS0+Y2FjaGVfbnI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlpZiAoaXNfcmFjeV90aW1lc3RhbXAoaXN0YXRlLCBjZSkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBPcHBvcnR1bmlzdGljYWxseSB1cGRhdGUgdGhlIGluZGV4IGJ1dCBkbyBub3QgY29tcGxhaW4gaWYgd2UgY2FuJ3QKKyAqLwordm9pZCB1cGRhdGVfaW5kZXhfaWZfYWJsZShzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgc3RydWN0IGxvY2tfZmlsZSAqbG9ja2ZpbGUpCit7CisJaWYgKChpc3RhdGUtPmNhY2hlX2NoYW5nZWQgfHwgaGFzX3JhY3lfdGltZXN0YW1wKGlzdGF0ZSkpICYmCisJICAgIHZlcmlmeV9pbmRleChpc3RhdGUpICYmCisJICAgIHdyaXRlX2xvY2tlZF9pbmRleChpc3RhdGUsIGxvY2tmaWxlLCBDT01NSVRfTE9DSykpCisJCXJvbGxiYWNrX2xvY2tfZmlsZShsb2NrZmlsZSk7Cit9CisKK3N0YXRpYyBpbnQgZG9fd3JpdGVfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGludCBuZXdmZCwKKwkJCSAgaW50IHN0cmlwX2V4dGVuc2lvbnMpCit7CisJZ2l0X1NIQV9DVFggYzsKKwlzdHJ1Y3QgY2FjaGVfaGVhZGVyIGhkcjsKKwlpbnQgaSwgZXJyLCByZW1vdmVkLCBleHRlbmRlZCwgaGRyX3ZlcnNpb247CisJc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUgPSBpc3RhdGUtPmNhY2hlOworCWludCBlbnRyaWVzID0gaXN0YXRlLT5jYWNoZV9ucjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3Qgc3RyYnVmIHByZXZpb3VzX25hbWVfYnVmID0gU1RSQlVGX0lOSVQsICpwcmV2aW91c19uYW1lOworCisJZm9yIChpID0gcmVtb3ZlZCA9IGV4dGVuZGVkID0gMDsgaSA8IGVudHJpZXM7IGkrKykgeworCQlpZiAoY2FjaGVbaV0tPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKQorCQkJcmVtb3ZlZCsrOworCisJCS8qIHJlZHVjZSBleHRlbmRlZCBlbnRyaWVzIGlmIHBvc3NpYmxlICovCisJCWNhY2hlW2ldLT5jZV9mbGFncyAmPSB+Q0VfRVhURU5ERUQ7CisJCWlmIChjYWNoZVtpXS0+Y2VfZmxhZ3MgJiBDRV9FWFRFTkRFRF9GTEFHUykgeworCQkJZXh0ZW5kZWQrKzsKKwkJCWNhY2hlW2ldLT5jZV9mbGFncyB8PSBDRV9FWFRFTkRFRDsKKwkJfQorCX0KKworCWlmICghaXN0YXRlLT52ZXJzaW9uKSB7CisJCWlzdGF0ZS0+dmVyc2lvbiA9IGdldF9pbmRleF9mb3JtYXRfZGVmYXVsdCgpOworCQlpZiAoZ2V0ZW52KCJHSVRfVEVTVF9TUExJVF9JTkRFWCIpKQorCQkJaW5pdF9zcGxpdF9pbmRleChpc3RhdGUpOworCX0KKworCS8qIGRlbW90ZSB2ZXJzaW9uIDMgdG8gdmVyc2lvbiAyIHdoZW4gdGhlIGxhdHRlciBzdWZmaWNlcyAqLworCWlmIChpc3RhdGUtPnZlcnNpb24gPT0gMyB8fCBpc3RhdGUtPnZlcnNpb24gPT0gMikKKwkJaXN0YXRlLT52ZXJzaW9uID0gZXh0ZW5kZWQgPyAzIDogMjsKKworCWhkcl92ZXJzaW9uID0gaXN0YXRlLT52ZXJzaW9uOworCisJaGRyLmhkcl9zaWduYXR1cmUgPSBodG9ubChDQUNIRV9TSUdOQVRVUkUpOworCWhkci5oZHJfdmVyc2lvbiA9IGh0b25sKGhkcl92ZXJzaW9uKTsKKwloZHIuaGRyX2VudHJpZXMgPSBodG9ubChlbnRyaWVzIC0gcmVtb3ZlZCk7CisKKwlnaXRfU0hBMV9Jbml0KCZjKTsKKwlpZiAoY2Vfd3JpdGUoJmMsIG5ld2ZkLCAmaGRyLCBzaXplb2YoaGRyKSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlwcmV2aW91c19uYW1lID0gKGhkcl92ZXJzaW9uID09IDQpID8gJnByZXZpb3VzX25hbWVfYnVmIDogTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllczsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBjYWNoZVtpXTsKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNlX3VwdG9kYXRlKGNlKSAmJiBpc19yYWN5X3RpbWVzdGFtcChpc3RhdGUsIGNlKSkKKwkJCWNlX3NtdWRnZV9yYWNpbHlfY2xlYW5fZW50cnkoY2UpOworCQlpZiAoaXNfbnVsbF9zaGExKGNlLT5zaGExKSkgeworCQkJc3RhdGljIGNvbnN0IGNoYXIgbXNnW10gPSAiY2FjaGUgZW50cnkgaGFzIG51bGwgc2hhMTogJXMiOworCQkJc3RhdGljIGludCBhbGxvdyA9IC0xOworCisJCQlpZiAoYWxsb3cgPCAwKQorCQkJCWFsbG93ID0gZ2l0X2Vudl9ib29sKCJHSVRfQUxMT1dfTlVMTF9TSEExIiwgMCk7CisJCQlpZiAoYWxsb3cpCisJCQkJd2FybmluZyhtc2csIGNlLT5uYW1lKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gZXJyb3IobXNnLCBjZS0+bmFtZSk7CisJCX0KKwkJaWYgKGNlX3dyaXRlX2VudHJ5KCZjLCBuZXdmZCwgY2UsIHByZXZpb3VzX25hbWUpIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnByZXZpb3VzX25hbWVfYnVmKTsKKworCS8qIFdyaXRlIGV4dGVuc2lvbiBkYXRhIGhlcmUgKi8KKwlpZiAoIXN0cmlwX2V4dGVuc2lvbnMgJiYgaXN0YXRlLT5zcGxpdF9pbmRleCkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJZXJyID0gd3JpdGVfbGlua19leHRlbnNpb24oJnNiLCBpc3RhdGUpIDwgMCB8fAorCQkJd3JpdGVfaW5kZXhfZXh0X2hlYWRlcigmYywgbmV3ZmQsIENBQ0hFX0VYVF9MSU5LLAorCQkJCQkgICAgICAgc2IubGVuKSA8IDAgfHwKKwkJCWNlX3dyaXRlKCZjLCBuZXdmZCwgc2IuYnVmLCBzYi5sZW4pIDwgMDsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtMTsKKwl9CisJaWYgKCFzdHJpcF9leHRlbnNpb25zICYmIGlzdGF0ZS0+Y2FjaGVfdHJlZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJY2FjaGVfdHJlZV93cml0ZSgmc2IsIGlzdGF0ZS0+Y2FjaGVfdHJlZSk7CisJCWVyciA9IHdyaXRlX2luZGV4X2V4dF9oZWFkZXIoJmMsIG5ld2ZkLCBDQUNIRV9FWFRfVFJFRSwgc2IubGVuKSA8IDAKKwkJCXx8IGNlX3dyaXRlKCZjLCBuZXdmZCwgc2IuYnVmLCBzYi5sZW4pIDwgMDsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtMTsKKwl9CisJaWYgKCFzdHJpcF9leHRlbnNpb25zICYmIGlzdGF0ZS0+cmVzb2x2ZV91bmRvKSB7CisJCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCQlyZXNvbHZlX3VuZG9fd3JpdGUoJnNiLCBpc3RhdGUtPnJlc29sdmVfdW5kbyk7CisJCWVyciA9IHdyaXRlX2luZGV4X2V4dF9oZWFkZXIoJmMsIG5ld2ZkLCBDQUNIRV9FWFRfUkVTT0xWRV9VTkRPLAorCQkJCQkgICAgIHNiLmxlbikgPCAwCisJCQl8fCBjZV93cml0ZSgmYywgbmV3ZmQsIHNiLmJ1Ziwgc2IubGVuKSA8IDA7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gLTE7CisJfQorCWlmICghc3RyaXBfZXh0ZW5zaW9ucyAmJiBpc3RhdGUtPnVudHJhY2tlZCkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwkJd3JpdGVfdW50cmFja2VkX2V4dGVuc2lvbigmc2IsIGlzdGF0ZS0+dW50cmFja2VkKTsKKwkJZXJyID0gd3JpdGVfaW5kZXhfZXh0X2hlYWRlcigmYywgbmV3ZmQsIENBQ0hFX0VYVF9VTlRSQUNLRUQsCisJCQkJCSAgICAgc2IubGVuKSA8IDAgfHwKKwkJCWNlX3dyaXRlKCZjLCBuZXdmZCwgc2IuYnVmLCBzYi5sZW4pIDwgMDsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoY2VfZmx1c2goJmMsIG5ld2ZkLCBpc3RhdGUtPnNoYTEpIHx8IGZzdGF0KG5ld2ZkLCAmc3QpKQorCQlyZXR1cm4gLTE7CisJaXN0YXRlLT50aW1lc3RhbXAuc2VjID0gKHVuc2lnbmVkIGludClzdC5zdF9tdGltZTsKKwlpc3RhdGUtPnRpbWVzdGFtcC5uc2VjID0gU1RfTVRJTUVfTlNFQyhzdCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2V0X2FsdGVybmF0ZV9pbmRleF9vdXRwdXQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlhbHRlcm5hdGVfaW5kZXhfb3V0cHV0ID0gbmFtZTsKK30KKworc3RhdGljIGludCBjb21taXRfbG9ja2VkX2luZGV4KHN0cnVjdCBsb2NrX2ZpbGUgKmxrKQoreworCWlmIChhbHRlcm5hdGVfaW5kZXhfb3V0cHV0KQorCQlyZXR1cm4gY29tbWl0X2xvY2tfZmlsZV90byhsaywgYWx0ZXJuYXRlX2luZGV4X291dHB1dCk7CisJZWxzZQorCQlyZXR1cm4gY29tbWl0X2xvY2tfZmlsZShsayk7Cit9CisKK3N0YXRpYyBpbnQgZG9fd3JpdGVfbG9ja2VkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgbG9ja19maWxlICpsb2NrLAorCQkJCSB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmV0ID0gZG9fd3JpdGVfaW5kZXgoaXN0YXRlLCBnZXRfbG9ja19maWxlX2ZkKGxvY2spLCAwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWFzc2VydCgoZmxhZ3MgJiAoQ09NTUlUX0xPQ0sgfCBDTE9TRV9MT0NLKSkgIT0KKwkgICAgICAgKENPTU1JVF9MT0NLIHwgQ0xPU0VfTE9DSykpOworCWlmIChmbGFncyAmIENPTU1JVF9MT0NLKQorCQlyZXR1cm4gY29tbWl0X2xvY2tlZF9pbmRleChsb2NrKTsKKwllbHNlIGlmIChmbGFncyAmIENMT1NFX0xPQ0spCisJCXJldHVybiBjbG9zZV9sb2NrX2ZpbGUobG9jayk7CisJZWxzZQorCQlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdyaXRlX3NwbGl0X2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJICAgICBzdHJ1Y3QgbG9ja19maWxlICpsb2NrLAorCQkJICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgcmV0OworCXByZXBhcmVfdG9fd3JpdGVfc3BsaXRfaW5kZXgoaXN0YXRlKTsKKwlyZXQgPSBkb193cml0ZV9sb2NrZWRfaW5kZXgoaXN0YXRlLCBsb2NrLCBmbGFncyk7CisJZmluaXNoX3dyaXRpbmdfc3BsaXRfaW5kZXgoaXN0YXRlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHRlbXBmaWxlIHRlbXBvcmFyeV9zaGFyZWRpbmRleDsKKworc3RhdGljIGludCB3cml0ZV9zaGFyZWRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQkgICAgICBzdHJ1Y3QgbG9ja19maWxlICpsb2NrLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3Qgc3BsaXRfaW5kZXggKnNpID0gaXN0YXRlLT5zcGxpdF9pbmRleDsKKwlpbnQgZmQsIHJldDsKKworCWZkID0gbWtzX3RlbXBmaWxlKCZ0ZW1wb3Jhcnlfc2hhcmVkaW5kZXgsIGdpdF9wYXRoKCJzaGFyZWRpbmRleF9YWFhYWFgiKSk7CisJaWYgKGZkIDwgMCkgeworCQloYXNoY2xyKHNpLT5iYXNlX3NoYTEpOworCQlyZXR1cm4gZG9fd3JpdGVfbG9ja2VkX2luZGV4KGlzdGF0ZSwgbG9jaywgZmxhZ3MpOworCX0KKwltb3ZlX2NhY2hlX3RvX2Jhc2VfaW5kZXgoaXN0YXRlKTsKKwlyZXQgPSBkb193cml0ZV9pbmRleChzaS0+YmFzZSwgZmQsIDEpOworCWlmIChyZXQpIHsKKwkJZGVsZXRlX3RlbXBmaWxlKCZ0ZW1wb3Jhcnlfc2hhcmVkaW5kZXgpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSByZW5hbWVfdGVtcGZpbGUoJnRlbXBvcmFyeV9zaGFyZWRpbmRleCwKKwkJCSAgICAgIGdpdF9wYXRoKCJzaGFyZWRpbmRleC4lcyIsIHNoYTFfdG9faGV4KHNpLT5iYXNlLT5zaGExKSkpOworCWlmICghcmV0KQorCQloYXNoY3B5KHNpLT5iYXNlX3NoYTEsIHNpLT5iYXNlLT5zaGExKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd3JpdGVfbG9ja2VkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgbG9ja19maWxlICpsb2NrLAorCQkgICAgICAgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHNwbGl0X2luZGV4ICpzaSA9IGlzdGF0ZS0+c3BsaXRfaW5kZXg7CisKKwlpZiAoIXNpIHx8IGFsdGVybmF0ZV9pbmRleF9vdXRwdXQgfHwKKwkgICAgKGlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCAmIH5FWFRNQVNLKSkgeworCQlpZiAoc2kpCisJCQloYXNoY2xyKHNpLT5iYXNlX3NoYTEpOworCQlyZXR1cm4gZG9fd3JpdGVfbG9ja2VkX2luZGV4KGlzdGF0ZSwgbG9jaywgZmxhZ3MpOworCX0KKworCWlmIChnZXRlbnYoIkdJVF9URVNUX1NQTElUX0lOREVYIikpIHsKKwkJaW50IHYgPSBzaS0+YmFzZV9zaGExWzBdOworCQlpZiAoKHYgJiAxNSkgPCA2KQorCQkJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IFNQTElUX0lOREVYX09SREVSRUQ7CisJfQorCWlmIChpc3RhdGUtPmNhY2hlX2NoYW5nZWQgJiBTUExJVF9JTkRFWF9PUkRFUkVEKSB7CisJCWludCByZXQgPSB3cml0ZV9zaGFyZWRfaW5kZXgoaXN0YXRlLCBsb2NrLCBmbGFncyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiB3cml0ZV9zcGxpdF9pbmRleChpc3RhdGUsIGxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFJlYWQgdGhlIGluZGV4IGZpbGUgdGhhdCBpcyBwb3RlbnRpYWxseSB1bm1lcmdlZCBpbnRvIGdpdmVuCisgKiBpbmRleF9zdGF0ZSwgZHJvcHBpbmcgYW55IHVubWVyZ2VkIGVudHJpZXMuICBSZXR1cm5zIHRydWUgaWYKKyAqIHRoZSBpbmRleCBpcyB1bm1lcmdlZC4gIENhbGxlcnMgd2hvIHdhbnQgdG8gcmVmdXNlIHRvIHdvcmsKKyAqIGZyb20gYW4gdW5tZXJnZWQgc3RhdGUgY2FuIGNhbGwgdGhpcyBhbmQgY2hlY2sgaXRzIHJldHVybiB2YWx1ZSwKKyAqIGluc3RlYWQgb2YgY2FsbGluZyByZWFkX2NhY2hlKCkuCisgKi8KK2ludCByZWFkX2luZGV4X3VubWVyZ2VkKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCWludCBpOworCWludCB1bm1lcmdlZCA9IDA7CisKKwlyZWFkX2luZGV4KGlzdGF0ZSk7CisJZm9yIChpID0gMDsgaSA8IGlzdGF0ZS0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaXN0YXRlLT5jYWNoZVtpXTsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpuZXdfY2U7CisJCWludCBzaXplLCBsZW47CisKKwkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQljb250aW51ZTsKKwkJdW5tZXJnZWQgPSAxOworCQlsZW4gPSBjZV9uYW1lbGVuKGNlKTsKKwkJc2l6ZSA9IGNhY2hlX2VudHJ5X3NpemUobGVuKTsKKwkJbmV3X2NlID0geGNhbGxvYygxLCBzaXplKTsKKwkJbWVtY3B5KG5ld19jZS0+bmFtZSwgY2UtPm5hbWUsIGxlbik7CisJCW5ld19jZS0+Y2VfZmxhZ3MgPSBjcmVhdGVfY2VfZmxhZ3MoMCkgfCBDRV9DT05GTElDVEVEOworCQluZXdfY2UtPmNlX25hbWVsZW4gPSBsZW47CisJCW5ld19jZS0+Y2VfbW9kZSA9IGNlLT5jZV9tb2RlOworCQlpZiAoYWRkX2luZGV4X2VudHJ5KGlzdGF0ZSwgbmV3X2NlLCAwKSkKKwkJCXJldHVybiBlcnJvcigiJXM6IGNhbm5vdCBkcm9wIHRvIHN0YWdlICMwIiwKKwkJCQkgICAgIG5ld19jZS0+bmFtZSk7CisJfQorCXJldHVybiB1bm1lcmdlZDsKK30KKworLyoKKyAqIFJldHVybnMgMSBpZiB0aGUgcGF0aCBpcyBhbiAib3RoZXIiIHBhdGggd2l0aCByZXNwZWN0IHRvCisgKiB0aGUgaW5kZXg7IHRoYXQgaXMsIHRoZSBwYXRoIGlzIG5vdCBtZW50aW9uZWQgaW4gdGhlIGluZGV4IGF0IGFsbCwKKyAqIGVpdGhlciBhcyBhIGZpbGUsIGEgZGlyZWN0b3J5IHdpdGggc29tZSBmaWxlcyBpbiB0aGUgaW5kZXgsCisgKiBvciBhcyBhbiB1bm1lcmdlZCBlbnRyeS4KKyAqCisgKiBXZSBoZWxwZnVsbHkgcmVtb3ZlIGEgdHJhaWxpbmcgIi8iIGZyb20gZGlyZWN0b3JpZXMgc28gdGhhdAorICogdGhlIG91dHB1dCBvZiByZWFkX2RpcmVjdG9yeSBjYW4gYmUgdXNlZCBhcy1pcy4KKyAqLworaW50IGluZGV4X25hbWVfaXNfb3RoZXIoY29uc3Qgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCWludCBuYW1lbGVuKQoreworCWludCBwb3M7CisJaWYgKG5hbWVsZW4gJiYgbmFtZVtuYW1lbGVuIC0gMV0gPT0gJy8nKQorCQluYW1lbGVuLS07CisJcG9zID0gaW5kZXhfbmFtZV9wb3MoaXN0YXRlLCBuYW1lLCBuYW1lbGVuKTsKKwlpZiAoMCA8PSBwb3MpCisJCXJldHVybiAwOwkvKiBleGFjdCBtYXRjaCAqLworCXBvcyA9IC1wb3MgLSAxOworCWlmIChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpc3RhdGUtPmNhY2hlW3Bvc107CisJCWlmIChjZV9uYW1lbGVuKGNlKSA9PSBuYW1lbGVuICYmCisJCSAgICAhbWVtY21wKGNlLT5uYW1lLCBuYW1lLCBuYW1lbGVuKSkKKwkJCXJldHVybiAwOyAvKiBZdXAsIHRoaXMgb25lIGV4aXN0cyB1bm1lcmdlZCAqLworCX0KKwlyZXR1cm4gMTsKK30KKwordm9pZCAqcmVhZF9ibG9iX2RhdGFfZnJvbV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwlpbnQgcG9zLCBsZW47CisJdW5zaWduZWQgbG9uZyBzejsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdm9pZCAqZGF0YTsKKworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlwb3MgPSBpbmRleF9uYW1lX3Bvcyhpc3RhdGUsIHBhdGgsIGxlbik7CisJaWYgKHBvcyA8IDApIHsKKwkJLyoKKwkJICogV2UgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIG1lcmdlLCBpbiB3aGljaAorCQkgKiBjYXNlIHdlIHdvdWxkIHJlYWQgc3RhZ2UgIzIgKG91cnMpLgorCQkgKi8KKwkJaW50IGk7CisJCWZvciAoaSA9IC1wb3MgLSAxOworCQkgICAgIChwb3MgPCAwICYmIGkgPCBpc3RhdGUtPmNhY2hlX25yICYmCisJCSAgICAgICFzdHJjbXAoaXN0YXRlLT5jYWNoZVtpXS0+bmFtZSwgcGF0aCkpOworCQkgICAgIGkrKykKKwkJCWlmIChjZV9zdGFnZShpc3RhdGUtPmNhY2hlW2ldKSA9PSAyKQorCQkJCXBvcyA9IGk7CisJfQorCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlkYXRhID0gcmVhZF9zaGExX2ZpbGUoaXN0YXRlLT5jYWNoZVtwb3NdLT5zaGExLCAmdHlwZSwgJnN6KTsKKwlpZiAoIWRhdGEgfHwgdHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKGRhdGEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKHNpemUpCisJCSpzaXplID0gc3o7CisJcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgc3RhdF92YWxpZGl0eV9jbGVhcihzdHJ1Y3Qgc3RhdF92YWxpZGl0eSAqc3YpCit7CisJZnJlZShzdi0+c2QpOworCXN2LT5zZCA9IE5VTEw7Cit9CisKK2ludCBzdGF0X3ZhbGlkaXR5X2NoZWNrKHN0cnVjdCBzdGF0X3ZhbGlkaXR5ICpzdiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChzdGF0KHBhdGgsICZzdCkgPCAwKQorCQlyZXR1cm4gc3YtPnNkID09IE5VTEw7CisJaWYgKCFzdi0+c2QpCisJCXJldHVybiAwOworCXJldHVybiBTX0lTUkVHKHN0LnN0X21vZGUpICYmICFtYXRjaF9zdGF0X2RhdGEoc3YtPnNkLCAmc3QpOworfQorCit2b2lkIHN0YXRfdmFsaWRpdHlfdXBkYXRlKHN0cnVjdCBzdGF0X3ZhbGlkaXR5ICpzdiwgaW50IGZkKQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGZzdGF0KGZkLCAmc3QpIDwgMCB8fCAhU19JU1JFRyhzdC5zdF9tb2RlKSkKKwkJc3RhdF92YWxpZGl0eV9jbGVhcihzdik7CisJZWxzZSB7CisJCWlmICghc3YtPnNkKQorCQkJc3YtPnNkID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHN0YXRfZGF0YSkpOworCQlmaWxsX3N0YXRfZGF0YShzdi0+c2QsICZzdCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvcmVmLWZpbHRlci5jIGIvcmVmLWZpbHRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOTRmMTAKLS0tIC9kZXYvbnVsbAorKysgYi9yZWYtZmlsdGVyLmMKQEAgLTAsMCArMSwxNjIyIEBACisjaW5jbHVkZSAiYnVpbHRpbi5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJ3aWxkbWF0Y2guaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicmVmLWZpbHRlci5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAidXRmOC5oIgorI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKwordHlwZWRlZiBlbnVtIHsgRklFTERfU1RSLCBGSUVMRF9VTE9ORywgRklFTERfVElNRSB9IGNtcF90eXBlOworCitzdGF0aWMgc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWNtcF90eXBlIGNtcF90eXBlOworfSB2YWxpZF9hdG9tW10gPSB7CisJeyAicmVmbmFtZSIgfSwKKwl7ICJvYmplY3R0eXBlIiB9LAorCXsgIm9iamVjdHNpemUiLCBGSUVMRF9VTE9ORyB9LAorCXsgIm9iamVjdG5hbWUiIH0sCisJeyAidHJlZSIgfSwKKwl7ICJwYXJlbnQiIH0sCisJeyAibnVtcGFyZW50IiwgRklFTERfVUxPTkcgfSwKKwl7ICJvYmplY3QiIH0sCisJeyAidHlwZSIgfSwKKwl7ICJ0YWciIH0sCisJeyAiYXV0aG9yIiB9LAorCXsgImF1dGhvcm5hbWUiIH0sCisJeyAiYXV0aG9yZW1haWwiIH0sCisJeyAiYXV0aG9yZGF0ZSIsIEZJRUxEX1RJTUUgfSwKKwl7ICJjb21taXR0ZXIiIH0sCisJeyAiY29tbWl0dGVybmFtZSIgfSwKKwl7ICJjb21taXR0ZXJlbWFpbCIgfSwKKwl7ICJjb21taXR0ZXJkYXRlIiwgRklFTERfVElNRSB9LAorCXsgInRhZ2dlciIgfSwKKwl7ICJ0YWdnZXJuYW1lIiB9LAorCXsgInRhZ2dlcmVtYWlsIiB9LAorCXsgInRhZ2dlcmRhdGUiLCBGSUVMRF9USU1FIH0sCisJeyAiY3JlYXRvciIgfSwKKwl7ICJjcmVhdG9yZGF0ZSIsIEZJRUxEX1RJTUUgfSwKKwl7ICJzdWJqZWN0IiB9LAorCXsgImJvZHkiIH0sCisJeyAiY29udGVudHMiIH0sCisJeyAidXBzdHJlYW0iIH0sCisJeyAicHVzaCIgfSwKKwl7ICJzeW1yZWYiIH0sCisJeyAiZmxhZyIgfSwKKwl7ICJIRUFEIiB9LAorCXsgImNvbG9yIiB9LAorCXsgImFsaWduIiB9LAorCXsgImVuZCIgfSwKK307CisKKyNkZWZpbmUgUkVGX0ZPUk1BVFRJTkdfU1RBVEVfSU5JVCAgeyAwLCBOVUxMIH0KKworc3RydWN0IGFsaWduIHsKKwlhbGlnbl90eXBlIHBvc2l0aW9uOworCXVuc2lnbmVkIGludCB3aWR0aDsKK307CisKK3N0cnVjdCBjb250ZW50cyB7CisJdW5zaWduZWQgaW50IGxpbmVzOworCXN0cnVjdCBvYmplY3RfaWQgb2lkOworfTsKKworc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YWNrIHsKKwlzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2sgKnByZXY7CisJc3RydWN0IHN0cmJ1ZiBvdXRwdXQ7CisJdm9pZCAoKmF0X2VuZCkoc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YWNrICpzdGFjayk7CisJdm9pZCAqYXRfZW5kX2RhdGE7Cit9OworCitzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhdGUgeworCWludCBxdW90ZV9zdHlsZTsKKwlzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2sgKnN0YWNrOworfTsKKworc3RydWN0IGF0b21fdmFsdWUgeworCWNvbnN0IGNoYXIgKnM7CisJdW5pb24geworCQlzdHJ1Y3QgYWxpZ24gYWxpZ247CisJCXN0cnVjdCBjb250ZW50cyBjb250ZW50czsKKwl9IHU7CisJdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBhdG9tX3ZhbHVlICphdG9tdiwgc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YXRlICpzdGF0ZSk7CisJdW5zaWduZWQgbG9uZyB1bDsgLyogdXNlZCBmb3Igc29ydGluZyB3aGVuIG5vdCBGSUVMRF9TVFIgKi8KK307CisKKy8qCisgKiBBbiBhdG9tIGlzIGEgdmFsaWQgZmllbGQgYXRvbSBsaXN0ZWQgYWJvdmUsIHBvc3NpYmx5IHByZWZpeGVkIHdpdGgKKyAqIGEgIioiIHRvIGRlbm90ZSBkZXJlZl90YWcoKS4KKyAqCisgKiBXZSBwYXJzZSBnaXZlbiBmb3JtYXQgc3RyaW5nIGFuZCBzb3J0IHNwZWNpZmllcnMsIGFuZCBtYWtlIGEgbGlzdAorICogb2YgcHJvcGVydGllcyB0aGF0IHdlIG5lZWQgdG8gZXh0cmFjdCBvdXQgb2Ygb2JqZWN0cy4gIHJlZl9hcnJheV9pdGVtCisgKiBzdHJ1Y3R1cmUgd2lsbCBob2xkIGFuIGFycmF5IG9mIHZhbHVlcyBleHRyYWN0ZWQgdGhhdCBjYW4gYmUKKyAqIGluZGV4ZWQgd2l0aCB0aGUgImF0b20gbnVtYmVyIiwgd2hpY2ggaXMgYW4gaW5kZXggaW50byB0aGlzCisgKiBhcnJheS4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKip1c2VkX2F0b207CitzdGF0aWMgY21wX3R5cGUgKnVzZWRfYXRvbV90eXBlOworc3RhdGljIGludCB1c2VkX2F0b21fY250LCBuZWVkX3RhZ2dlZCwgbmVlZF9zeW1yZWY7CitzdGF0aWMgaW50IG5lZWRfY29sb3JfcmVzZXRfYXRfZW9sOworCisvKgorICogVXNlZCB0byBwYXJzZSBmb3JtYXQgc3RyaW5nIGFuZCBzb3J0IHNwZWNpZmllcnMKKyAqLworaW50IHBhcnNlX3JlZl9maWx0ZXJfYXRvbShjb25zdCBjaGFyICphdG9tLCBjb25zdCBjaGFyICplcCkKK3sKKwljb25zdCBjaGFyICpzcDsKKwlpbnQgaSwgYXQ7CisKKwlzcCA9IGF0b207CisJaWYgKCpzcCA9PSAnKicgJiYgc3AgPCBlcCkKKwkJc3ArKzsgLyogZGVyZWYgKi8KKwlpZiAoZXAgPD0gc3ApCisJCWRpZSgibWFsZm9ybWVkIGZpZWxkIG5hbWU6ICUuKnMiLCAoaW50KShlcC1hdG9tKSwgYXRvbSk7CisKKwkvKiBEbyB3ZSBoYXZlIHRoZSBhdG9tIGFscmVhZHkgdXNlZCBlbHNld2hlcmU/ICovCisJZm9yIChpID0gMDsgaSA8IHVzZWRfYXRvbV9jbnQ7IGkrKykgeworCQlpbnQgbGVuID0gc3RybGVuKHVzZWRfYXRvbVtpXSk7CisJCWlmIChsZW4gPT0gZXAgLSBhdG9tICYmICFtZW1jbXAodXNlZF9hdG9tW2ldLCBhdG9tLCBsZW4pKQorCQkJcmV0dXJuIGk7CisJfQorCisJLyogSXMgdGhlIGF0b20gYSB2YWxpZCBvbmU/ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmFsaWRfYXRvbSk7IGkrKykgeworCQlpbnQgbGVuID0gc3RybGVuKHZhbGlkX2F0b21baV0ubmFtZSk7CisJCS8qCisJCSAqIElmIHRoZSBhdG9tIG5hbWUgaGFzIGEgY29sb24sIHN0cmlwIGl0IGFuZCBldmVyeXRoaW5nIGFmdGVyCisJCSAqIGl0IG9mZiAtIGl0IHNwZWNpZmllcyB0aGUgZm9ybWF0IGZvciB0aGlzIGVudHJ5LCBhbmQKKwkJICogc2hvdWxkbid0IGJlIHVzZWQgZm9yIGNoZWNraW5nIGFnYWluc3QgdGhlIHZhbGlkX2F0b20KKwkJICogdGFibGUuCisJCSAqLworCQljb25zdCBjaGFyICpmb3JtYXRwID0gc3RyY2hyKHNwLCAnOicpOworCQlpZiAoIWZvcm1hdHAgfHwgZXAgPCBmb3JtYXRwKQorCQkJZm9ybWF0cCA9IGVwOworCQlpZiAobGVuID09IGZvcm1hdHAgLSBzcCAmJiAhbWVtY21wKHZhbGlkX2F0b21baV0ubmFtZSwgc3AsIGxlbikpCisJCQlicmVhazsKKwl9CisKKwlpZiAoQVJSQVlfU0laRSh2YWxpZF9hdG9tKSA8PSBpKQorCQlkaWUoInVua25vd24gZmllbGQgbmFtZTogJS4qcyIsIChpbnQpKGVwLWF0b20pLCBhdG9tKTsKKworCS8qIEFkZCBpdCBpbiwgaW5jbHVkaW5nIHRoZSBkZXJlZiBwcmVmaXggKi8KKwlhdCA9IHVzZWRfYXRvbV9jbnQ7CisJdXNlZF9hdG9tX2NudCsrOworCVJFQUxMT0NfQVJSQVkodXNlZF9hdG9tLCB1c2VkX2F0b21fY250KTsKKwlSRUFMTE9DX0FSUkFZKHVzZWRfYXRvbV90eXBlLCB1c2VkX2F0b21fY250KTsKKwl1c2VkX2F0b21bYXRdID0geG1lbWR1cHooYXRvbSwgZXAgLSBhdG9tKTsKKwl1c2VkX2F0b21fdHlwZVthdF0gPSB2YWxpZF9hdG9tW2ldLmNtcF90eXBlOworCWlmICgqYXRvbSA9PSAnKicpCisJCW5lZWRfdGFnZ2VkID0gMTsKKwlpZiAoIXN0cmNtcCh1c2VkX2F0b21bYXRdLCAic3ltcmVmIikpCisJCW5lZWRfc3ltcmVmID0gMTsKKwlyZXR1cm4gYXQ7Cit9CisKK3N0YXRpYyB2b2lkIHF1b3RlX2Zvcm1hdHRpbmcoc3RydWN0IHN0cmJ1ZiAqcywgY29uc3QgY2hhciAqc3RyLCBpbnQgcXVvdGVfc3R5bGUpCit7CisJc3dpdGNoIChxdW90ZV9zdHlsZSkgeworCWNhc2UgUVVPVEVfTk9ORToKKwkJc3RyYnVmX2FkZHN0cihzLCBzdHIpOworCQlicmVhazsKKwljYXNlIFFVT1RFX1NIRUxMOgorCQlzcV9xdW90ZV9idWYocywgc3RyKTsKKwkJYnJlYWs7CisJY2FzZSBRVU9URV9QRVJMOgorCQlwZXJsX3F1b3RlX2J1ZihzLCBzdHIpOworCQlicmVhazsKKwljYXNlIFFVT1RFX1BZVEhPTjoKKwkJcHl0aG9uX3F1b3RlX2J1ZihzLCBzdHIpOworCQlicmVhazsKKwljYXNlIFFVT1RFX1RDTDoKKwkJdGNsX3F1b3RlX2J1ZihzLCBzdHIpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9hdG9tKHN0cnVjdCBhdG9tX3ZhbHVlICp2LCBzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhdGUgKnN0YXRlKQoreworCS8qCisJICogUXVvdGUgZm9ybWF0dGluZyBpcyBvbmx5IGRvbmUgd2hlbiB0aGUgc3RhY2sgaGFzIGEgc2luZ2xlCisJICogZWxlbWVudC4gT3RoZXJ3aXNlIHF1b3RlIGZvcm1hdHRpbmcgaXMgZG9uZSBvbiB0aGUKKwkgKiBlbGVtZW50J3MgZW50aXJlIG91dHB1dCBzdHJidWYgd2hlbiB0aGUgJShlbmQpIGF0b20gaXMKKwkgKiBlbmNvdW50ZXJlZC4KKwkgKi8KKwlpZiAoIXN0YXRlLT5zdGFjay0+cHJldikKKwkJcXVvdGVfZm9ybWF0dGluZygmc3RhdGUtPnN0YWNrLT5vdXRwdXQsIHYtPnMsIHN0YXRlLT5xdW90ZV9zdHlsZSk7CisJZWxzZQorCQlzdHJidWZfYWRkc3RyKCZzdGF0ZS0+c3RhY2stPm91dHB1dCwgdi0+cyk7Cit9CisKK3N0YXRpYyB2b2lkIHB1c2hfc3RhY2tfZWxlbWVudChzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2sgKipzdGFjaykKK3sKKwlzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2sgKnMgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2spKTsKKworCXN0cmJ1Zl9pbml0KCZzLT5vdXRwdXQsIDApOworCXMtPnByZXYgPSAqc3RhY2s7CisJKnN0YWNrID0gczsKK30KKworc3RhdGljIHZvaWQgcG9wX3N0YWNrX2VsZW1lbnQoc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YWNrICoqc3RhY2spCit7CisJc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YWNrICpjdXJyZW50ID0gKnN0YWNrOworCXN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayAqcHJldiA9IGN1cnJlbnQtPnByZXY7CisKKwlpZiAocHJldikKKwkJc3RyYnVmX2FkZGJ1ZigmcHJldi0+b3V0cHV0LCAmY3VycmVudC0+b3V0cHV0KTsKKwlzdHJidWZfcmVsZWFzZSgmY3VycmVudC0+b3V0cHV0KTsKKwlmcmVlKGN1cnJlbnQpOworCSpzdGFjayA9IHByZXY7Cit9CisKK3N0YXRpYyB2b2lkIGVuZF9hbGlnbl9oYW5kbGVyKHN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGFjayAqc3RhY2spCit7CisJc3RydWN0IGFsaWduICphbGlnbiA9IChzdHJ1Y3QgYWxpZ24gKilzdGFjay0+YXRfZW5kX2RhdGE7CisJc3RydWN0IHN0cmJ1ZiBzID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfdXRmOF9hbGlnbigmcywgYWxpZ24tPnBvc2l0aW9uLCBhbGlnbi0+d2lkdGgsIHN0YWNrLT5vdXRwdXQuYnVmKTsKKwlzdHJidWZfc3dhcCgmc3RhY2stPm91dHB1dCwgJnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZzKTsKK30KKworc3RhdGljIHZvaWQgYWxpZ25fYXRvbV9oYW5kbGVyKHN0cnVjdCBhdG9tX3ZhbHVlICphdG9tdiwgc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2sgKm5ldzsKKworCXB1c2hfc3RhY2tfZWxlbWVudCgmc3RhdGUtPnN0YWNrKTsKKwluZXcgPSBzdGF0ZS0+c3RhY2s7CisJbmV3LT5hdF9lbmQgPSBlbmRfYWxpZ25faGFuZGxlcjsKKwluZXctPmF0X2VuZF9kYXRhID0gJmF0b212LT51LmFsaWduOworfQorCitzdGF0aWMgdm9pZCBlbmRfYXRvbV9oYW5kbGVyKHN0cnVjdCBhdG9tX3ZhbHVlICphdG9tdiwgc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgcmVmX2Zvcm1hdHRpbmdfc3RhY2sgKmN1cnJlbnQgPSBzdGF0ZS0+c3RhY2s7CisJc3RydWN0IHN0cmJ1ZiBzID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoIWN1cnJlbnQtPmF0X2VuZCkKKwkJZGllKF8oImZvcm1hdDogJSUoZW5kKSBhdG9tIHVzZWQgd2l0aG91dCBjb3JyZXNwb25kaW5nIGF0b20iKSk7CisJY3VycmVudC0+YXRfZW5kKGN1cnJlbnQpOworCisJLyoKKwkgKiBQZXJmb3JtIHF1b3RlIGZvcm1hdHRpbmcgd2hlbiB0aGUgc3RhY2sgZWxlbWVudCBpcyB0aGF0IG9mCisJICogYSBzdXBwb3J0aW5nIGF0b20uIElmIG5lc3RlZCB0aGVuIHBlcmZvcm0gcXVvdGUgZm9ybWF0dGluZworCSAqIG9ubHkgb24gdGhlIHRvcG1vc3Qgc3VwcG9ydGluZyBhdG9tLgorCSAqLworCWlmICghc3RhdGUtPnN0YWNrLT5wcmV2LT5wcmV2KSB7CisJCXF1b3RlX2Zvcm1hdHRpbmcoJnMsIGN1cnJlbnQtPm91dHB1dC5idWYsIHN0YXRlLT5xdW90ZV9zdHlsZSk7CisJCXN0cmJ1Zl9zd2FwKCZjdXJyZW50LT5vdXRwdXQsICZzKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnMpOworCXBvcF9zdGFja19lbGVtZW50KCZzdGF0ZS0+c3RhY2spOworfQorCitzdGF0aWMgaW50IG1hdGNoX2F0b21fbmFtZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphdG9tX25hbWUsIGNvbnN0IGNoYXIgKip2YWwpCit7CisJY29uc3QgY2hhciAqYm9keTsKKworCWlmICghc2tpcF9wcmVmaXgobmFtZSwgYXRvbV9uYW1lLCAmYm9keSkpCisJCXJldHVybiAwOyAvKiBkb2Vzbid0IGV2ZW4gYmVnaW4gd2l0aCAiYXRvbV9uYW1lIiAqLworCWlmICghYm9keVswXSkgeworCQkqdmFsID0gTlVMTDsgLyogJShhdG9tX25hbWUpIGFuZCBubyBjdXN0b21pemF0aW9uICovCisJCXJldHVybiAxOworCX0KKwlpZiAoYm9keVswXSAhPSAnOicpCisJCXJldHVybiAwOyAvKiAiYXRvbV9uYW1lZm9vIiBpcyBub3QgImF0b21fbmFtZSIgb3IgImF0b21fbmFtZTouLi4iICovCisJKnZhbCA9IGJvZHkgKyAxOyAvKiAiYXRvbV9uYW1lOnZhbCIgKi8KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIEluIGEgZm9ybWF0IHN0cmluZywgZmluZCB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mICUoYXRvbSkuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX25leHQoY29uc3QgY2hhciAqY3ApCit7CisJd2hpbGUgKCpjcCkgeworCQlpZiAoKmNwID09ICclJykgeworCQkJLyoKKwkJCSAqICUoIGlzIHRoZSBzdGFydCBvZiBhbiBhdG9tOworCQkJICogJSUgaXMgYSBxdW90ZWQgcGVyLWNlbnQuCisJCQkgKi8KKwkJCWlmIChjcFsxXSA9PSAnKCcpCisJCQkJcmV0dXJuIGNwOworCQkJZWxzZSBpZiAoY3BbMV0gPT0gJyUnKQorCQkJCWNwKys7IC8qIHNraXAgb3ZlciB0d28gJSAqLworCQkJLyogb3RoZXJ3aXNlIHRoaXMgaXMgYSBzaW5nbGV0b24sIGxpdGVyYWwgJSAqLworCQl9CisJCWNwKys7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogTWFrZSBzdXJlIHRoZSBmb3JtYXQgc3RyaW5nIGlzIHdlbGwgZm9ybWVkLCBhbmQgcGFyc2Ugb3V0CisgKiB0aGUgdXNlZCBhdG9tcy4KKyAqLworaW50IHZlcmlmeV9yZWZfZm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCkKK3sKKwljb25zdCBjaGFyICpjcCwgKnNwOworCisJbmVlZF9jb2xvcl9yZXNldF9hdF9lb2wgPSAwOworCWZvciAoY3AgPSBmb3JtYXQ7ICpjcCAmJiAoc3AgPSBmaW5kX25leHQoY3ApKTsgKSB7CisJCWNvbnN0IGNoYXIgKmNvbG9yLCAqZXAgPSBzdHJjaHIoc3AsICcpJyk7CisJCWludCBhdDsKKworCQlpZiAoIWVwKQorCQkJcmV0dXJuIGVycm9yKCJtYWxmb3JtZWQgZm9ybWF0IHN0cmluZyAlcyIsIHNwKTsKKwkJLyogc3AgcG9pbnRzIGF0ICIlKCIgYW5kIGVwIHBvaW50cyBhdCB0aGUgY2xvc2luZyAiKSIgKi8KKwkJYXQgPSBwYXJzZV9yZWZfZmlsdGVyX2F0b20oc3AgKyAyLCBlcCk7CisJCWNwID0gZXAgKyAxOworCisJCWlmIChza2lwX3ByZWZpeCh1c2VkX2F0b21bYXRdLCAiY29sb3I6IiwgJmNvbG9yKSkKKwkJCW5lZWRfY29sb3JfcmVzZXRfYXRfZW9sID0gISFzdHJjbXAoY29sb3IsICJyZXNldCIpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdpdmVuIGFuIG9iamVjdCBuYW1lLCByZWFkIHRoZSBvYmplY3QgZGF0YSBhbmQgc2l6ZSwgYW5kIHJldHVybiBhCisgKiAic3RydWN0IG9iamVjdCIuICBJZiB0aGUgb2JqZWN0IGRhdGEgd2UgYXJlIHJldHVybmluZyBpcyBhbHNvIGJvcnJvd2VkCisgKiBieSB0aGUgInN0cnVjdCBvYmplY3QiIHJlcHJlc2VudGF0aW9uLCBzZXQgKmVhdGVuIGFzIHdlbGwtLS1pdCBpcyBhCisgKiBzaWduYWwgZnJvbSBwYXJzZV9vYmplY3RfYnVmZmVyIHRvIHVzIG5vdCB0byBmcmVlIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkICpnZXRfb2JqKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBvYmplY3QgKipvYmosIHVuc2lnbmVkIGxvbmcgKnN6LCBpbnQgKmVhdGVuKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgc3opOworCisJaWYgKGJ1ZikKKwkJKm9iaiA9IHBhcnNlX29iamVjdF9idWZmZXIoc2hhMSwgdHlwZSwgKnN6LCBidWYsIGVhdGVuKTsKKwllbHNlCisJCSpvYmogPSBOVUxMOworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbnQgZ3JhYl9vYmplY3RuYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgc3RydWN0IGF0b21fdmFsdWUgKnYpCit7CisJaWYgKCFzdHJjbXAobmFtZSwgIm9iamVjdG5hbWUiKSkgeworCQl2LT5zID0geHN0cmR1cChzaGExX3RvX2hleChzaGExKSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoIXN0cmNtcChuYW1lLCAib2JqZWN0bmFtZTpzaG9ydCIpKSB7CisJCXYtPnMgPSB4c3RyZHVwKGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVikpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFNlZSBncmFiX3ZhbHVlcyAqLworc3RhdGljIHZvaWQgZ3JhYl9jb21tb25fdmFsdWVzKHN0cnVjdCBhdG9tX3ZhbHVlICp2YWwsIGludCBkZXJlZiwgc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc3opCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXNlZF9hdG9tX2NudDsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB1c2VkX2F0b21baV07CisJCXN0cnVjdCBhdG9tX3ZhbHVlICp2ID0gJnZhbFtpXTsKKwkJaWYgKCEhZGVyZWYgIT0gKCpuYW1lID09ICcqJykpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcmVmKQorCQkJbmFtZSsrOworCQlpZiAoIXN0cmNtcChuYW1lLCAib2JqZWN0dHlwZSIpKQorCQkJdi0+cyA9IHR5cGVuYW1lKG9iai0+dHlwZSk7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgIm9iamVjdHNpemUiKSkgeworCQkJdi0+dWwgPSBzejsKKwkJCXYtPnMgPSB4c3RyZm10KCIlbHUiLCBzeik7CisJCX0KKwkJZWxzZSBpZiAoZGVyZWYpCisJCQlncmFiX29iamVjdG5hbWUobmFtZSwgb2JqLT5zaGExLCB2KTsKKwl9Cit9CisKKy8qIFNlZSBncmFiX3ZhbHVlcyAqLworc3RhdGljIHZvaWQgZ3JhYl90YWdfdmFsdWVzKHN0cnVjdCBhdG9tX3ZhbHVlICp2YWwsIGludCBkZXJlZiwgc3RydWN0IG9iamVjdCAqb2JqLCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgc3opCit7CisJaW50IGk7CisJc3RydWN0IHRhZyAqdGFnID0gKHN0cnVjdCB0YWcgKikgb2JqOworCisJZm9yIChpID0gMDsgaSA8IHVzZWRfYXRvbV9jbnQ7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gdXNlZF9hdG9tW2ldOworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZ2YWxbaV07CisJCWlmICghIWRlcmVmICE9ICgqbmFtZSA9PSAnKicpKQorCQkJY29udGludWU7CisJCWlmIChkZXJlZikKKwkJCW5hbWUrKzsKKwkJaWYgKCFzdHJjbXAobmFtZSwgInRhZyIpKQorCQkJdi0+cyA9IHRhZy0+dGFnOworCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJ0eXBlIikgJiYgdGFnLT50YWdnZWQpCisJCQl2LT5zID0gdHlwZW5hbWUodGFnLT50YWdnZWQtPnR5cGUpOworCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJvYmplY3QiKSAmJiB0YWctPnRhZ2dlZCkKKwkJCXYtPnMgPSB4c3RyZHVwKHNoYTFfdG9faGV4KHRhZy0+dGFnZ2VkLT5zaGExKSk7CisJfQorfQorCisvKiBTZWUgZ3JhYl92YWx1ZXMgKi8KK3N0YXRpYyB2b2lkIGdyYWJfY29tbWl0X3ZhbHVlcyhzdHJ1Y3QgYXRvbV92YWx1ZSAqdmFsLCBpbnQgZGVyZWYsIHN0cnVjdCBvYmplY3QgKm9iaiwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHN6KQoreworCWludCBpOworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopIG9iajsKKworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHVzZWRfYXRvbVtpXTsKKwkJc3RydWN0IGF0b21fdmFsdWUgKnYgPSAmdmFsW2ldOworCQlpZiAoISFkZXJlZiAhPSAoKm5hbWUgPT0gJyonKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZGVyZWYpCisJCQluYW1lKys7CisJCWlmICghc3RyY21wKG5hbWUsICJ0cmVlIikpIHsKKwkJCXYtPnMgPSB4c3RyZHVwKHNoYTFfdG9faGV4KGNvbW1pdC0+dHJlZS0+b2JqZWN0LnNoYTEpKTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJudW1wYXJlbnQiKSkgeworCQkJdi0+dWwgPSBjb21taXRfbGlzdF9jb3VudChjb21taXQtPnBhcmVudHMpOworCQkJdi0+cyA9IHhzdHJmbXQoIiVsdSIsIHYtPnVsKTsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG5hbWUsICJwYXJlbnQiKSkgeworCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQkJc3RydWN0IHN0cmJ1ZiBzID0gU1RSQlVGX0lOSVQ7CisJCQlmb3IgKHBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7IHBhcmVudHM7IHBhcmVudHMgPSBwYXJlbnRzLT5uZXh0KSB7CisJCQkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcGFyZW50cy0+aXRlbTsKKwkJCQlpZiAocGFyZW50cyAhPSBjb21taXQtPnBhcmVudHMpCisJCQkJCXN0cmJ1Zl9hZGRjaCgmcywgJyAnKTsKKwkJCQlzdHJidWZfYWRkc3RyKCZzLCBzaGExX3RvX2hleChwYXJlbnQtPm9iamVjdC5zaGExKSk7CisJCQl9CisJCQl2LT5zID0gc3RyYnVmX2RldGFjaCgmcywgTlVMTCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX3dob2xpbmUoY29uc3QgY2hhciAqd2hvLCBpbnQgd2hvbGVuLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc3opCit7CisJY29uc3QgY2hhciAqZW9sOworCXdoaWxlICgqYnVmKSB7CisJCWlmICghc3RybmNtcChidWYsIHdobywgd2hvbGVuKSAmJgorCQkgICAgYnVmW3dob2xlbl0gPT0gJyAnKQorCQkJcmV0dXJuIGJ1ZiArIHdob2xlbiArIDE7CisJCWVvbCA9IHN0cmNocihidWYsICdcbicpOworCQlpZiAoIWVvbCkKKwkJCXJldHVybiAiIjsKKwkJZW9sKys7CisJCWlmICgqZW9sID09ICdcbicpCisJCQlyZXR1cm4gIiI7IC8qIGVuZCBvZiBoZWFkZXIgKi8KKwkJYnVmID0gZW9sOworCX0KKwlyZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb3B5X2xpbmUoY29uc3QgY2hhciAqYnVmKQoreworCWNvbnN0IGNoYXIgKmVvbCA9IHN0cmNocm51bChidWYsICdcbicpOworCXJldHVybiB4bWVtZHVweihidWYsIGVvbCAtIGJ1Zik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb3B5X25hbWUoY29uc3QgY2hhciAqYnVmKQoreworCWNvbnN0IGNoYXIgKmNwOworCWZvciAoY3AgPSBidWY7ICpjcCAmJiAqY3AgIT0gJ1xuJzsgY3ArKykgeworCQlpZiAoIXN0cm5jbXAoY3AsICIgPCIsIDIpKQorCQkJcmV0dXJuIHhtZW1kdXB6KGJ1ZiwgY3AgLSBidWYpOworCX0KKwlyZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb3B5X2VtYWlsKGNvbnN0IGNoYXIgKmJ1ZikKK3sKKwljb25zdCBjaGFyICplbWFpbCA9IHN0cmNocihidWYsICc8Jyk7CisJY29uc3QgY2hhciAqZW9lbWFpbDsKKwlpZiAoIWVtYWlsKQorCQlyZXR1cm4gIiI7CisJZW9lbWFpbCA9IHN0cmNocihlbWFpbCwgJz4nKTsKKwlpZiAoIWVvZW1haWwpCisJCXJldHVybiAiIjsKKwlyZXR1cm4geG1lbWR1cHooZW1haWwsIGVvZW1haWwgKyAxIC0gZW1haWwpOworfQorCitzdGF0aWMgY2hhciAqY29weV9zdWJqZWN0KGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4pCit7CisJY2hhciAqciA9IHhtZW1kdXB6KGJ1ZiwgbGVuKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJaWYgKHJbaV0gPT0gJ1xuJykKKwkJCXJbaV0gPSAnICc7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgZ3JhYl9kYXRlKGNvbnN0IGNoYXIgKmJ1Ziwgc3RydWN0IGF0b21fdmFsdWUgKnYsIGNvbnN0IGNoYXIgKmF0b21uYW1lKQoreworCWNvbnN0IGNoYXIgKmVvZW1haWwgPSBzdHJzdHIoYnVmLCAiPiAiKTsKKwljaGFyICp6b25lOworCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOworCWxvbmcgdHo7CisJc3RydWN0IGRhdGVfbW9kZSBkYXRlX21vZGUgPSB7IERBVEVfTk9STUFMIH07CisJY29uc3QgY2hhciAqZm9ybWF0cDsKKworCS8qCisJICogV2UgZ290IGhlcmUgYmVjYXVzZSBhdG9tbmFtZSBlbmRzIGluICJkYXRlIiBvciAiZGF0ZTxzb21ldGhpbmc+IjsKKwkgKiBpdCdzIG5vdCBwb3NzaWJsZSB0aGF0IDxzb21ldGhpbmc+IGlzIG5vdCAiOjxmb3JtYXQ+IiBiZWNhdXNlCisJICogcGFyc2VfcmVmX2ZpbHRlcl9hdG9tKCkgd291bGRuJ3QgaGF2ZSBhbGxvd2VkIGl0LCBzbyB3ZSBjYW4gYXNzdW1lIHRoYXQgbm8KKwkgKiAiOiIgbWVhbnMgbm8gZm9ybWF0IGlzIHNwZWNpZmllZCwgYW5kIHVzZSB0aGUgZGVmYXVsdC4KKwkgKi8KKwlmb3JtYXRwID0gc3RyY2hyKGF0b21uYW1lLCAnOicpOworCWlmIChmb3JtYXRwICE9IE5VTEwpIHsKKwkJZm9ybWF0cCsrOworCQlwYXJzZV9kYXRlX2Zvcm1hdChmb3JtYXRwLCAmZGF0ZV9tb2RlKTsKKwl9CisKKwlpZiAoIWVvZW1haWwpCisJCWdvdG8gYmFkOworCXRpbWVzdGFtcCA9IHN0cnRvdWwoZW9lbWFpbCArIDIsICZ6b25lLCAxMCk7CisJaWYgKHRpbWVzdGFtcCA9PSBVTE9OR19NQVgpCisJCWdvdG8gYmFkOworCXR6ID0gc3RydG9sKHpvbmUsIE5VTEwsIDEwKTsKKwlpZiAoKHR6ID09IExPTkdfTUlOIHx8IHR6ID09IExPTkdfTUFYKSAmJiBlcnJubyA9PSBFUkFOR0UpCisJCWdvdG8gYmFkOworCXYtPnMgPSB4c3RyZHVwKHNob3dfZGF0ZSh0aW1lc3RhbXAsIHR6LCAmZGF0ZV9tb2RlKSk7CisJdi0+dWwgPSB0aW1lc3RhbXA7CisJcmV0dXJuOworIGJhZDoKKwl2LT5zID0gIiI7CisJdi0+dWwgPSAwOworfQorCisvKiBTZWUgZ3JhYl92YWx1ZXMgKi8KK3N0YXRpYyB2b2lkIGdyYWJfcGVyc29uKGNvbnN0IGNoYXIgKndobywgc3RydWN0IGF0b21fdmFsdWUgKnZhbCwgaW50IGRlcmVmLCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzeikKK3sKKwlpbnQgaTsKKwlpbnQgd2hvbGVuID0gc3RybGVuKHdobyk7CisJY29uc3QgY2hhciAqd2hvbGluZSA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXNlZF9hdG9tX2NudDsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB1c2VkX2F0b21baV07CisJCXN0cnVjdCBhdG9tX3ZhbHVlICp2ID0gJnZhbFtpXTsKKwkJaWYgKCEhZGVyZWYgIT0gKCpuYW1lID09ICcqJykpCisJCQljb250aW51ZTsKKwkJaWYgKGRlcmVmKQorCQkJbmFtZSsrOworCQlpZiAoc3RybmNtcCh3aG8sIG5hbWUsIHdob2xlbikpCisJCQljb250aW51ZTsKKwkJaWYgKG5hbWVbd2hvbGVuXSAhPSAwICYmCisJCSAgICBzdHJjbXAobmFtZSArIHdob2xlbiwgIm5hbWUiKSAmJgorCQkgICAgc3RyY21wKG5hbWUgKyB3aG9sZW4sICJlbWFpbCIpICYmCisJCSAgICAhc3RhcnRzX3dpdGgobmFtZSArIHdob2xlbiwgImRhdGUiKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXdob2xpbmUpCisJCQl3aG9saW5lID0gZmluZF93aG9saW5lKHdobywgd2hvbGVuLCBidWYsIHN6KTsKKwkJaWYgKCF3aG9saW5lKQorCQkJcmV0dXJuOyAvKiBubyBwb2ludCBsb29raW5nIGZvciBpdCAqLworCQlpZiAobmFtZVt3aG9sZW5dID09IDApCisJCQl2LT5zID0gY29weV9saW5lKHdob2xpbmUpOworCQllbHNlIGlmICghc3RyY21wKG5hbWUgKyB3aG9sZW4sICJuYW1lIikpCisJCQl2LT5zID0gY29weV9uYW1lKHdob2xpbmUpOworCQllbHNlIGlmICghc3RyY21wKG5hbWUgKyB3aG9sZW4sICJlbWFpbCIpKQorCQkJdi0+cyA9IGNvcHlfZW1haWwod2hvbGluZSk7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKG5hbWUgKyB3aG9sZW4sICJkYXRlIikpCisJCQlncmFiX2RhdGUod2hvbGluZSwgdiwgbmFtZSk7CisJfQorCisJLyoKKwkgKiBGb3IgYSB0YWcgb3IgYSBjb21taXQgb2JqZWN0LCBpZiAiY3JlYXRvciIgb3IgImNyZWF0b3JkYXRlIiBpcworCSAqIHJlcXVlc3RlZCwgZG8gc29tZXRoaW5nIHNwZWNpYWwuCisJICovCisJaWYgKHN0cmNtcCh3aG8sICJ0YWdnZXIiKSAmJiBzdHJjbXAod2hvLCAiY29tbWl0dGVyIikpCisJCXJldHVybjsgLyogImF1dGhvciIgZm9yIGNvbW1pdCBvYmplY3QgaXMgbm90IHdhbnRlZCAqLworCWlmICghd2hvbGluZSkKKwkJd2hvbGluZSA9IGZpbmRfd2hvbGluZSh3aG8sIHdob2xlbiwgYnVmLCBzeik7CisJaWYgKCF3aG9saW5lKQorCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8IHVzZWRfYXRvbV9jbnQ7IGkrKykgeworCQljb25zdCBjaGFyICpuYW1lID0gdXNlZF9hdG9tW2ldOworCQlzdHJ1Y3QgYXRvbV92YWx1ZSAqdiA9ICZ2YWxbaV07CisJCWlmICghIWRlcmVmICE9ICgqbmFtZSA9PSAnKicpKQorCQkJY29udGludWU7CisJCWlmIChkZXJlZikKKwkJCW5hbWUrKzsKKworCQlpZiAoc3RhcnRzX3dpdGgobmFtZSwgImNyZWF0b3JkYXRlIikpCisJCQlncmFiX2RhdGUod2hvbGluZSwgdiwgbmFtZSk7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNyZWF0b3IiKSkKKwkJCXYtPnMgPSBjb3B5X2xpbmUod2hvbGluZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5kX3N1YnBvcyhjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgc3osCisJCQljb25zdCBjaGFyICoqc3ViLCB1bnNpZ25lZCBsb25nICpzdWJsZW4sCisJCQljb25zdCBjaGFyICoqYm9keSwgdW5zaWduZWQgbG9uZyAqYm9keWxlbiwKKwkJCXVuc2lnbmVkIGxvbmcgKm5vbnNpZ2xlbiwKKwkJCWNvbnN0IGNoYXIgKipzaWcsIHVuc2lnbmVkIGxvbmcgKnNpZ2xlbikKK3sKKwljb25zdCBjaGFyICplb2w7CisJLyogc2tpcCBwYXN0IGhlYWRlciB1bnRpbCB3ZSBoaXQgZW1wdHkgbGluZSAqLworCXdoaWxlICgqYnVmICYmICpidWYgIT0gJ1xuJykgeworCQllb2wgPSBzdHJjaHJudWwoYnVmLCAnXG4nKTsKKwkJaWYgKCplb2wpCisJCQllb2wrKzsKKwkJYnVmID0gZW9sOworCX0KKwkvKiBza2lwIGFueSBlbXB0eSBsaW5lcyAqLworCXdoaWxlICgqYnVmID09ICdcbicpCisJCWJ1ZisrOworCisJLyogcGFyc2Ugc2lnbmF0dXJlIGZpcnN0OyB3ZSBtaWdodCBub3QgZXZlbiBoYXZlIGEgc3ViamVjdCBsaW5lICovCisJKnNpZyA9IGJ1ZiArIHBhcnNlX3NpZ25hdHVyZShidWYsIHN0cmxlbihidWYpKTsKKwkqc2lnbGVuID0gc3RybGVuKCpzaWcpOworCisJLyogc3ViamVjdCBpcyBmaXJzdCBub24tZW1wdHkgbGluZSAqLworCSpzdWIgPSBidWY7CisJLyogc3ViamVjdCBnb2VzIHRvIGZpcnN0IGVtcHR5IGxpbmUgKi8KKwl3aGlsZSAoYnVmIDwgKnNpZyAmJiAqYnVmICYmICpidWYgIT0gJ1xuJykgeworCQllb2wgPSBzdHJjaHJudWwoYnVmLCAnXG4nKTsKKwkJaWYgKCplb2wpCisJCQllb2wrKzsKKwkJYnVmID0gZW9sOworCX0KKwkqc3VibGVuID0gYnVmIC0gKnN1YjsKKwkvKiBkcm9wIHRyYWlsaW5nIG5ld2xpbmUsIGlmIHByZXNlbnQgKi8KKwlpZiAoKnN1YmxlbiAmJiAoKnN1YilbKnN1YmxlbiAtIDFdID09ICdcbicpCisJCSpzdWJsZW4gLT0gMTsKKworCS8qIHNraXAgYW55IGVtcHR5IGxpbmVzICovCisJd2hpbGUgKCpidWYgPT0gJ1xuJykKKwkJYnVmKys7CisJKmJvZHkgPSBidWY7CisJKmJvZHlsZW4gPSBzdHJsZW4oYnVmKTsKKwkqbm9uc2lnbGVuID0gKnNpZyAtIGJ1ZjsKK30KKworLyoKKyAqIElmICdsaW5lcycgaXMgZ3JlYXRlciB0aGFuIDAsIGFwcGVuZCB0aGF0IG1hbnkgbGluZXMgZnJvbSB0aGUgZ2l2ZW4KKyAqICdidWYnIG9mIGxlbmd0aCAnc2l6ZScgdG8gdGhlIGdpdmVuIHN0cmJ1Zi4KKyAqLworc3RhdGljIHZvaWQgYXBwZW5kX2xpbmVzKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUsIGludCBsaW5lcykKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICpzcCwgKmVvbDsKKwlzaXplX3QgbGVuOworCisJc3AgPSBidWY7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGluZXMgJiYgc3AgPCBidWYgKyBzaXplOyBpKyspIHsKKwkJaWYgKGkpCisJCQlzdHJidWZfYWRkc3RyKG91dCwgIlxuICAgICIpOworCQllb2wgPSBtZW1jaHIoc3AsICdcbicsIHNpemUgLSAoc3AgLSBidWYpKTsKKwkJbGVuID0gZW9sID8gZW9sIC0gc3AgOiBzaXplIC0gKHNwIC0gYnVmKTsKKwkJc3RyYnVmX2FkZChvdXQsIHNwLCBsZW4pOworCQlpZiAoIWVvbCkKKwkJCWJyZWFrOworCQlzcCA9IGVvbCArIDE7CisJfQorfQorCisvKiBTZWUgZ3JhYl92YWx1ZXMgKi8KK3N0YXRpYyB2b2lkIGdyYWJfc3ViX2JvZHlfY29udGVudHMoc3RydWN0IGF0b21fdmFsdWUgKnZhbCwgaW50IGRlcmVmLCBzdHJ1Y3Qgb2JqZWN0ICpvYmosIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBzeikKK3sKKwlpbnQgaTsKKwljb25zdCBjaGFyICpzdWJwb3MgPSBOVUxMLCAqYm9keXBvcyA9IE5VTEwsICpzaWdwb3MgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgc3VibGVuID0gMCwgYm9keWxlbiA9IDAsIG5vbnNpZ2xlbiA9IDAsIHNpZ2xlbiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgdXNlZF9hdG9tX2NudDsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB1c2VkX2F0b21baV07CisJCXN0cnVjdCBhdG9tX3ZhbHVlICp2ID0gJnZhbFtpXTsKKwkJY29uc3QgY2hhciAqdmFscCA9IE5VTEw7CisJCWlmICghIWRlcmVmICE9ICgqbmFtZSA9PSAnKicpKQorCQkJY29udGludWU7CisJCWlmIChkZXJlZikKKwkJCW5hbWUrKzsKKwkJaWYgKHN0cmNtcChuYW1lLCAic3ViamVjdCIpICYmCisJCSAgICBzdHJjbXAobmFtZSwgImJvZHkiKSAmJgorCQkgICAgc3RyY21wKG5hbWUsICJjb250ZW50cyIpICYmCisJCSAgICBzdHJjbXAobmFtZSwgImNvbnRlbnRzOnN1YmplY3QiKSAmJgorCQkgICAgc3RyY21wKG5hbWUsICJjb250ZW50czpib2R5IikgJiYKKwkJICAgIHN0cmNtcChuYW1lLCAiY29udGVudHM6c2lnbmF0dXJlIikgJiYKKwkJICAgICFzdGFydHNfd2l0aChuYW1lLCAiY29udGVudHM6bGluZXM9IikpCisJCQljb250aW51ZTsKKwkJaWYgKCFzdWJwb3MpCisJCQlmaW5kX3N1YnBvcyhidWYsIHN6LAorCQkJCSAgICAmc3VicG9zLCAmc3VibGVuLAorCQkJCSAgICAmYm9keXBvcywgJmJvZHlsZW4sICZub25zaWdsZW4sCisJCQkJICAgICZzaWdwb3MsICZzaWdsZW4pOworCisJCWlmICghc3RyY21wKG5hbWUsICJzdWJqZWN0IikpCisJCQl2LT5zID0gY29weV9zdWJqZWN0KHN1YnBvcywgc3VibGVuKTsKKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY29udGVudHM6c3ViamVjdCIpKQorCQkJdi0+cyA9IGNvcHlfc3ViamVjdChzdWJwb3MsIHN1Ymxlbik7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImJvZHkiKSkKKwkJCXYtPnMgPSB4bWVtZHVweihib2R5cG9zLCBib2R5bGVuKTsKKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY29udGVudHM6Ym9keSIpKQorCQkJdi0+cyA9IHhtZW1kdXB6KGJvZHlwb3MsIG5vbnNpZ2xlbik7CisJCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNvbnRlbnRzOnNpZ25hdHVyZSIpKQorCQkJdi0+cyA9IHhtZW1kdXB6KHNpZ3Bvcywgc2lnbGVuKTsKKwkJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY29udGVudHMiKSkKKwkJCXYtPnMgPSB4c3RyZHVwKHN1YnBvcyk7CisJCWVsc2UgaWYgKHNraXBfcHJlZml4KG5hbWUsICJjb250ZW50czpsaW5lcz0iLCAmdmFscCkpIHsKKwkJCXN0cnVjdCBzdHJidWYgcyA9IFNUUkJVRl9JTklUOworCQkJY29uc3QgY2hhciAqY29udGVudHNfZW5kID0gYm9keWxlbiArIGJvZHlwb3MgLSBzaWdsZW47CisKKwkJCWlmIChzdHJ0b3VsX3VpKHZhbHAsIDEwLCAmdi0+dS5jb250ZW50cy5saW5lcykpCisJCQkJZGllKF8oInBvc2l0aXZlIHZhbHVlIGV4cGVjdGVkIGNvbnRlbnRzOmxpbmVzPSVzIiksIHZhbHApOworCQkJLyogIFNpemUgaXMgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSBhZnRlciByZW1vdmluZyB0aGUgc2lnbmF0dXJlICovCisJCQlhcHBlbmRfbGluZXMoJnMsIHN1YnBvcywgY29udGVudHNfZW5kIC0gc3VicG9zLCB2LT51LmNvbnRlbnRzLmxpbmVzKTsKKwkJCXYtPnMgPSBzdHJidWZfZGV0YWNoKCZzLCBOVUxMKTsKKwkJfQorCX0KK30KKworLyoKKyAqIFdlIHdhbnQgdG8gaGF2ZSBlbXB0eSBwcmludC1zdHJpbmcgZm9yIGZpZWxkIHJlcXVlc3RzCisgKiB0aGF0IGRvIG5vdCBhcHBseSAoZS5nLiAiYXV0aG9yZGF0ZSIgZm9yIGEgdGFnIG9iamVjdCkKKyAqLworc3RhdGljIHZvaWQgZmlsbF9taXNzaW5nX3ZhbHVlcyhzdHJ1Y3QgYXRvbV92YWx1ZSAqdmFsKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJc3RydWN0IGF0b21fdmFsdWUgKnYgPSAmdmFsW2ldOworCQlpZiAodi0+cyA9PSBOVUxMKQorCQkJdi0+cyA9ICIiOworCX0KK30KKworLyoKKyAqIHZhbCBpcyBhIGxpc3Qgb2YgYXRvbV92YWx1ZSB0byBob2xkIHJldHVybmVkIHZhbHVlcy4gIEV4dHJhY3QKKyAqIHRoZSB2YWx1ZXMgZm9yIGF0b21zIGluIHVzZWRfYXRvbSBhcnJheSBvdXQgb2YgKG9iaiwgYnVmLCBzeikuCisgKiB3aGVuIGRlcmVmIGlzIGZhbHNlLCAob2JqLCBidWYsIHN6KSBpcyB0aGUgb2JqZWN0IHRoYXQgaXMKKyAqIHBvaW50ZWQgYXQgYnkgdGhlIHJlZiBpdHNlbGY7IG90aGVyd2lzZSBpdCBpcyB0aGUgb2JqZWN0IHRoZQorICogcmVmICh3aGljaCBpcyBhIHRhZykgcmVmZXJzIHRvLgorICovCitzdGF0aWMgdm9pZCBncmFiX3ZhbHVlcyhzdHJ1Y3QgYXRvbV92YWx1ZSAqdmFsLCBpbnQgZGVyZWYsIHN0cnVjdCBvYmplY3QgKm9iaiwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHN6KQoreworCWdyYWJfY29tbW9uX3ZhbHVlcyh2YWwsIGRlcmVmLCBvYmosIGJ1Ziwgc3opOworCXN3aXRjaCAob2JqLT50eXBlKSB7CisJY2FzZSBPQkpfVEFHOgorCQlncmFiX3RhZ192YWx1ZXModmFsLCBkZXJlZiwgb2JqLCBidWYsIHN6KTsKKwkJZ3JhYl9zdWJfYm9keV9jb250ZW50cyh2YWwsIGRlcmVmLCBvYmosIGJ1Ziwgc3opOworCQlncmFiX3BlcnNvbigidGFnZ2VyIiwgdmFsLCBkZXJlZiwgb2JqLCBidWYsIHN6KTsKKwkJYnJlYWs7CisJY2FzZSBPQkpfQ09NTUlUOgorCQlncmFiX2NvbW1pdF92YWx1ZXModmFsLCBkZXJlZiwgb2JqLCBidWYsIHN6KTsKKwkJZ3JhYl9zdWJfYm9keV9jb250ZW50cyh2YWwsIGRlcmVmLCBvYmosIGJ1Ziwgc3opOworCQlncmFiX3BlcnNvbigiYXV0aG9yIiwgdmFsLCBkZXJlZiwgb2JqLCBidWYsIHN6KTsKKwkJZ3JhYl9wZXJzb24oImNvbW1pdHRlciIsIHZhbCwgZGVyZWYsIG9iaiwgYnVmLCBzeik7CisJCWJyZWFrOworCWNhc2UgT0JKX1RSRUU6CisJCS8qIGdyYWJfdHJlZV92YWx1ZXModmFsLCBkZXJlZiwgb2JqLCBidWYsIHN6KTsgKi8KKwkJYnJlYWs7CisJY2FzZSBPQkpfQkxPQjoKKwkJLyogZ3JhYl9ibG9iX3ZhbHVlcyh2YWwsIGRlcmVmLCBvYmosIGJ1Ziwgc3opOyAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoIkVoPyAgT2JqZWN0IG9mIHR5cGUgJWQ/Iiwgb2JqLT50eXBlKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqY29weV9hZHZhbmNlKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKQoreworCXdoaWxlICgqc3JjKQorCQkqZHN0KysgPSAqc3JjKys7CisJcmV0dXJuIGRzdDsKK30KKworLyoKKyAqIFBhcnNlIHRoZSBvYmplY3QgcmVmZXJyZWQgYnkgcmVmLCBhbmQgZ3JhYiBuZWVkZWQgdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIHBvcHVsYXRlX3ZhbHVlKHN0cnVjdCByZWZfYXJyYXlfaXRlbSAqcmVmKQoreworCXZvaWQgKmJ1ZjsKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJaW50IGVhdGVuLCBpOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICp0YWdnZWQ7CisKKwlyZWYtPnZhbHVlID0geGNhbGxvYyh1c2VkX2F0b21fY250LCBzaXplb2Yoc3RydWN0IGF0b21fdmFsdWUpKTsKKworCWlmIChuZWVkX3N5bXJlZiAmJiAocmVmLT5mbGFnICYgUkVGX0lTU1lNUkVGKSAmJiAhcmVmLT5zeW1yZWYpIHsKKwkJdW5zaWduZWQgY2hhciB1bnVzZWQxWzIwXTsKKwkJcmVmLT5zeW1yZWYgPSByZXNvbHZlX3JlZmR1cChyZWYtPnJlZm5hbWUsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCSAgICAgdW51c2VkMSwgTlVMTCk7CisJCWlmICghcmVmLT5zeW1yZWYpCisJCQlyZWYtPnN5bXJlZiA9ICIiOworCX0KKworCS8qIEZpbGwgaW4gc3BlY2lhbHMgZmlyc3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdXNlZF9hdG9tX2NudDsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKm5hbWUgPSB1c2VkX2F0b21baV07CisJCXN0cnVjdCBhdG9tX3ZhbHVlICp2ID0gJnJlZi0+dmFsdWVbaV07CisJCWludCBkZXJlZiA9IDA7CisJCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisJCWNvbnN0IGNoYXIgKmZvcm1hdHA7CisJCWNvbnN0IGNoYXIgKnZhbHA7CisJCXN0cnVjdCBicmFuY2ggKmJyYW5jaCA9IE5VTEw7CisKKwkJdi0+aGFuZGxlciA9IGFwcGVuZF9hdG9tOworCisJCWlmICgqbmFtZSA9PSAnKicpIHsKKwkJCWRlcmVmID0gMTsKKwkJCW5hbWUrKzsKKwkJfQorCisJCWlmIChzdGFydHNfd2l0aChuYW1lLCAicmVmbmFtZSIpKQorCQkJcmVmbmFtZSA9IHJlZi0+cmVmbmFtZTsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgobmFtZSwgInN5bXJlZiIpKQorCQkJcmVmbmFtZSA9IHJlZi0+c3ltcmVmID8gcmVmLT5zeW1yZWYgOiAiIjsKKwkJZWxzZSBpZiAoc3RhcnRzX3dpdGgobmFtZSwgInVwc3RyZWFtIikpIHsKKwkJCWNvbnN0IGNoYXIgKmJyYW5jaF9uYW1lOworCQkJLyogb25seSBsb2NhbCBicmFuY2hlcyBtYXkgaGF2ZSBhbiB1cHN0cmVhbSAqLworCQkJaWYgKCFza2lwX3ByZWZpeChyZWYtPnJlZm5hbWUsICJyZWZzL2hlYWRzLyIsCisJCQkJCSAmYnJhbmNoX25hbWUpKQorCQkJCWNvbnRpbnVlOworCQkJYnJhbmNoID0gYnJhbmNoX2dldChicmFuY2hfbmFtZSk7CisKKwkJCXJlZm5hbWUgPSBicmFuY2hfZ2V0X3Vwc3RyZWFtKGJyYW5jaCwgTlVMTCk7CisJCQlpZiAoIXJlZm5hbWUpCisJCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgobmFtZSwgInB1c2giKSkgeworCQkJY29uc3QgY2hhciAqYnJhbmNoX25hbWU7CisJCQlpZiAoIXNraXBfcHJlZml4KHJlZi0+cmVmbmFtZSwgInJlZnMvaGVhZHMvIiwKKwkJCQkJICZicmFuY2hfbmFtZSkpCisJCQkJY29udGludWU7CisJCQlicmFuY2ggPSBicmFuY2hfZ2V0KGJyYW5jaF9uYW1lKTsKKworCQkJcmVmbmFtZSA9IGJyYW5jaF9nZXRfcHVzaChicmFuY2gsIE5VTEwpOworCQkJaWYgKCFyZWZuYW1lKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKG1hdGNoX2F0b21fbmFtZShuYW1lLCAiY29sb3IiLCAmdmFscCkpIHsKKwkJCWNoYXIgY29sb3JbQ09MT1JfTUFYTEVOXSA9ICIiOworCisJCQlpZiAoIXZhbHApCisJCQkJZGllKF8oImV4cGVjdGVkIGZvcm1hdDogJSUoY29sb3I6PGNvbG9yPikiKSk7CisJCQlpZiAoY29sb3JfcGFyc2UodmFscCwgY29sb3IpIDwgMCkKKwkJCQlkaWUoXygidW5hYmxlIHRvIHBhcnNlIGZvcm1hdCIpKTsKKwkJCXYtPnMgPSB4c3RyZHVwKGNvbG9yKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImZsYWciKSkgeworCQkJY2hhciBidWZbMjU2XSwgKmNwID0gYnVmOworCQkJaWYgKHJlZi0+ZmxhZyAmIFJFRl9JU1NZTVJFRikKKwkJCQljcCA9IGNvcHlfYWR2YW5jZShjcCwgIixzeW1yZWYiKTsKKwkJCWlmIChyZWYtPmZsYWcgJiBSRUZfSVNQQUNLRUQpCisJCQkJY3AgPSBjb3B5X2FkdmFuY2UoY3AsICIscGFja2VkIik7CisJCQlpZiAoY3AgPT0gYnVmKQorCQkJCXYtPnMgPSAiIjsKKwkJCWVsc2UgeworCQkJCSpjcCA9ICdcMCc7CisJCQkJdi0+cyA9IHhzdHJkdXAoYnVmICsgMSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICghZGVyZWYgJiYgZ3JhYl9vYmplY3RuYW1lKG5hbWUsIHJlZi0+b2JqZWN0bmFtZSwgdikpIHsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgIkhFQUQiKSkgeworCQkJY29uc3QgY2hhciAqaGVhZDsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwkJCWhlYWQgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkJICBzaGExLCBOVUxMKTsKKwkJCWlmICghc3RyY21wKHJlZi0+cmVmbmFtZSwgaGVhZCkpCisJCQkJdi0+cyA9ICIqIjsKKwkJCWVsc2UKKwkJCQl2LT5zID0gIiAiOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAobWF0Y2hfYXRvbV9uYW1lKG5hbWUsICJhbGlnbiIsICZ2YWxwKSkgeworCQkJc3RydWN0IGFsaWduICphbGlnbiA9ICZ2LT51LmFsaWduOworCQkJc3RydWN0IHN0cmJ1ZiAqKnMsICoqdG9fZnJlZTsKKwkJCWludCB3aWR0aCA9IC0xOworCisJCQlpZiAoIXZhbHApCisJCQkJZGllKF8oImV4cGVjdGVkIGZvcm1hdDogJSUoYWxpZ246PHdpZHRoPiw8cG9zaXRpb24+KSIpKTsKKworCQkJLyoKKwkJCSAqIFRPRE86IEltcGxlbWVudCBhIGZ1bmN0aW9uIHNpbWlsYXIgdG8gc3RyYnVmX3NwbGl0X3N0cigpCisJCQkgKiB3aGljaCB3b3VsZCBvbWl0IHRoZSBzZXBhcmF0b3IgZnJvbSB0aGUgZW5kIG9mIGVhY2ggdmFsdWUuCisJCQkgKi8KKwkJCXMgPSB0b19mcmVlID0gc3RyYnVmX3NwbGl0X3N0cih2YWxwLCAnLCcsIDApOworCisJCQlhbGlnbi0+cG9zaXRpb24gPSBBTElHTl9MRUZUOworCisJCQl3aGlsZSAoKnMpIHsKKwkJCQkvKiAgU3RyaXAgdHJhaWxpbmcgY29tbWEgKi8KKwkJCQlpZiAoc1sxXSkKKwkJCQkJc3RyYnVmX3NldGxlbihzWzBdLCBzWzBdLT5sZW4gLSAxKTsKKwkJCQlpZiAoIXN0cnRvdWxfdWkoc1swXS0+YnVmLCAxMCwgKHVuc2lnbmVkIGludCAqKSZ3aWR0aCkpCisJCQkJCTsKKwkJCQllbHNlIGlmICghc3RyY21wKHNbMF0tPmJ1ZiwgImxlZnQiKSkKKwkJCQkJYWxpZ24tPnBvc2l0aW9uID0gQUxJR05fTEVGVDsKKwkJCQllbHNlIGlmICghc3RyY21wKHNbMF0tPmJ1ZiwgInJpZ2h0IikpCisJCQkJCWFsaWduLT5wb3NpdGlvbiA9IEFMSUdOX1JJR0hUOworCQkJCWVsc2UgaWYgKCFzdHJjbXAoc1swXS0+YnVmLCAibWlkZGxlIikpCisJCQkJCWFsaWduLT5wb3NpdGlvbiA9IEFMSUdOX01JRERMRTsKKwkJCQllbHNlCisJCQkJCWRpZShfKCJpbXByb3BlciBmb3JtYXQgZW50ZXJlZCBhbGlnbjolcyIpLCBzWzBdLT5idWYpOworCQkJCXMrKzsKKwkJCX0KKworCQkJaWYgKHdpZHRoIDwgMCkKKwkJCQlkaWUoXygicG9zaXRpdmUgd2lkdGggZXhwZWN0ZWQgd2l0aCB0aGUgJSUoYWxpZ24pIGF0b20iKSk7CisJCQlhbGlnbi0+d2lkdGggPSB3aWR0aDsKKwkJCXN0cmJ1Zl9saXN0X2ZyZWUodG9fZnJlZSk7CisJCQl2LT5oYW5kbGVyID0gYWxpZ25fYXRvbV9oYW5kbGVyOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZW5kIikpIHsKKwkJCXYtPmhhbmRsZXIgPSBlbmRfYXRvbV9oYW5kbGVyOworCQkJY29udGludWU7CisJCX0gZWxzZQorCQkJY29udGludWU7CisKKwkJZm9ybWF0cCA9IHN0cmNocihuYW1lLCAnOicpOworCQlpZiAoZm9ybWF0cCkgeworCQkJaW50IG51bV9vdXJzLCBudW1fdGhlaXJzOworCisJCQlmb3JtYXRwKys7CisJCQlpZiAoIXN0cmNtcChmb3JtYXRwLCAic2hvcnQiKSkKKwkJCQlyZWZuYW1lID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYocmVmbmFtZSwKKwkJCQkJCSAgICAgIHdhcm5fYW1iaWd1b3VzX3JlZnMpOworCQkJZWxzZSBpZiAoIXN0cmNtcChmb3JtYXRwLCAidHJhY2siKSAmJgorCQkJCSAoc3RhcnRzX3dpdGgobmFtZSwgInVwc3RyZWFtIikgfHwKKwkJCQkgIHN0YXJ0c193aXRoKG5hbWUsICJwdXNoIikpKSB7CisKKwkJCQlpZiAoc3RhdF90cmFja2luZ19pbmZvKGJyYW5jaCwgJm51bV9vdXJzLAorCQkJCQkJICAgICAgICZudW1fdGhlaXJzLCBOVUxMKSkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAoIW51bV9vdXJzICYmICFudW1fdGhlaXJzKQorCQkJCQl2LT5zID0gIiI7CisJCQkJZWxzZSBpZiAoIW51bV9vdXJzKQorCQkJCQl2LT5zID0geHN0cmZtdCgiW2JlaGluZCAlZF0iLCBudW1fdGhlaXJzKTsKKwkJCQllbHNlIGlmICghbnVtX3RoZWlycykKKwkJCQkJdi0+cyA9IHhzdHJmbXQoIlthaGVhZCAlZF0iLCBudW1fb3Vycyk7CisJCQkJZWxzZQorCQkJCQl2LT5zID0geHN0cmZtdCgiW2FoZWFkICVkLCBiZWhpbmQgJWRdIiwKKwkJCQkJCSAgICAgICBudW1fb3VycywgbnVtX3RoZWlycyk7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoZm9ybWF0cCwgInRyYWNrc2hvcnQiKSAmJgorCQkJCSAgIChzdGFydHNfd2l0aChuYW1lLCAidXBzdHJlYW0iKSB8fAorCQkJCSAgICBzdGFydHNfd2l0aChuYW1lLCAicHVzaCIpKSkgeworCQkJCWFzc2VydChicmFuY2gpOworCisJCQkJaWYgKHN0YXRfdHJhY2tpbmdfaW5mbyhicmFuY2gsICZudW1fb3VycywKKwkJCQkJCQkmbnVtX3RoZWlycywgTlVMTCkpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKCFudW1fb3VycyAmJiAhbnVtX3RoZWlycykKKwkJCQkJdi0+cyA9ICI9IjsKKwkJCQllbHNlIGlmICghbnVtX291cnMpCisJCQkJCXYtPnMgPSAiPCI7CisJCQkJZWxzZSBpZiAoIW51bV90aGVpcnMpCisJCQkJCXYtPnMgPSAiPiI7CisJCQkJZWxzZQorCQkJCQl2LT5zID0gIjw+IjsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZQorCQkJCWRpZSgidW5rbm93biAlLipzIGZvcm1hdCAlcyIsCisJCQkJICAgIChpbnQpKGZvcm1hdHAgLSBuYW1lKSwgbmFtZSwgZm9ybWF0cCk7CisJCX0KKworCQlpZiAoIWRlcmVmKQorCQkJdi0+cyA9IHJlZm5hbWU7CisJCWVsc2UKKwkJCXYtPnMgPSB4c3RyZm10KCIlc157fSIsIHJlZm5hbWUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB1c2VkX2F0b21fY250OyBpKyspIHsKKwkJc3RydWN0IGF0b21fdmFsdWUgKnYgPSAmcmVmLT52YWx1ZVtpXTsKKwkJaWYgKHYtPnMgPT0gTlVMTCkKKwkJCWdvdG8gbmVlZF9vYmo7CisJfQorCXJldHVybjsKKworIG5lZWRfb2JqOgorCWJ1ZiA9IGdldF9vYmoocmVmLT5vYmplY3RuYW1lLCAmb2JqLCAmc2l6ZSwgJmVhdGVuKTsKKwlpZiAoIWJ1ZikKKwkJZGllKCJtaXNzaW5nIG9iamVjdCAlcyBmb3IgJXMiLAorCQkgICAgc2hhMV90b19oZXgocmVmLT5vYmplY3RuYW1lKSwgcmVmLT5yZWZuYW1lKTsKKwlpZiAoIW9iaikKKwkJZGllKCJwYXJzZV9vYmplY3RfYnVmZmVyIGZhaWxlZCBvbiAlcyBmb3IgJXMiLAorCQkgICAgc2hhMV90b19oZXgocmVmLT5vYmplY3RuYW1lKSwgcmVmLT5yZWZuYW1lKTsKKworCWdyYWJfdmFsdWVzKHJlZi0+dmFsdWUsIDAsIG9iaiwgYnVmLCBzaXplKTsKKwlpZiAoIWVhdGVuKQorCQlmcmVlKGJ1Zik7CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIGF0b20gdGhhdCB3YW50cyB0byBrbm93IGFib3V0IHRhZ2dlZAorCSAqIG9iamVjdCwgd2UgYXJlIGRvbmUuCisJICovCisJaWYgKCFuZWVkX3RhZ2dlZCB8fCAob2JqLT50eXBlICE9IE9CSl9UQUcpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIElmIGl0IGlzIGEgdGFnIG9iamVjdCwgc2VlIGlmIHdlIHVzZSBhIHZhbHVlIHRoYXQgZGVyZWZzCisJICogdGhlIG9iamVjdCwgYW5kIGlmIHdlIGRvIGdyYWIgdGhlIG9iamVjdCBpdCByZWZlcnMgdG8uCisJICovCisJdGFnZ2VkID0gKChzdHJ1Y3QgdGFnICopb2JqKS0+dGFnZ2VkLT5zaGExOworCisJLyoKKwkgKiBORUVEU1dPUks6IFRoaXMgZGVyZWZzIHRhZyBvbmx5IG9uY2UsIHdoaWNoCisJICogaXMgZ29vZCB0byBkZWFsIHdpdGggY2hhaW5zIG9mIHRydXN0LCBidXQKKwkgKiBpcyBub3QgY29uc2lzdGVudCB3aXRoIHdoYXQgZGVyZWZfdGFnKCkgZG9lcworCSAqIHdoaWNoIHBlZWxzIHRoZSBvbmlvbiB0byB0aGUgY29yZS4KKwkgKi8KKwlidWYgPSBnZXRfb2JqKHRhZ2dlZCwgJm9iaiwgJnNpemUsICZlYXRlbik7CisJaWYgKCFidWYpCisJCWRpZSgibWlzc2luZyBvYmplY3QgJXMgZm9yICVzIiwKKwkJICAgIHNoYTFfdG9faGV4KHRhZ2dlZCksIHJlZi0+cmVmbmFtZSk7CisJaWYgKCFvYmopCisJCWRpZSgicGFyc2Vfb2JqZWN0X2J1ZmZlciBmYWlsZWQgb24gJXMgZm9yICVzIiwKKwkJICAgIHNoYTFfdG9faGV4KHRhZ2dlZCksIHJlZi0+cmVmbmFtZSk7CisJZ3JhYl92YWx1ZXMocmVmLT52YWx1ZSwgMSwgb2JqLCBidWYsIHNpemUpOworCWlmICghZWF0ZW4pCisJCWZyZWUoYnVmKTsKK30KKworLyoKKyAqIEdpdmVuIGEgcmVmLCByZXR1cm4gdGhlIHZhbHVlIGZvciB0aGUgYXRvbS4gIFRoaXMgbGF6aWx5IGdldHMgdmFsdWUKKyAqIG91dCBvZiB0aGUgb2JqZWN0IGJ5IGNhbGxpbmcgcG9wdWxhdGUgdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9yZWZfYXRvbV92YWx1ZShzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZiwgaW50IGF0b20sIHN0cnVjdCBhdG9tX3ZhbHVlICoqdikKK3sKKwlpZiAoIXJlZi0+dmFsdWUpIHsKKwkJcG9wdWxhdGVfdmFsdWUocmVmKTsKKwkJZmlsbF9taXNzaW5nX3ZhbHVlcyhyZWYtPnZhbHVlKTsKKwl9CisJKnYgPSAmcmVmLT52YWx1ZVthdG9tXTsKK30KKworZW51bSBjb250YWluc19yZXN1bHQgeworCUNPTlRBSU5TX1VOS05PV04gPSAtMSwKKwlDT05UQUlOU19OTyA9IDAsCisJQ09OVEFJTlNfWUVTID0gMQorfTsKKworLyoKKyAqIE1pbWlja2luZyB0aGUgcmVhbCBzdGFjaywgdGhpcyBzdGFjayBsaXZlcyBvbiB0aGUgaGVhcCwgYXZvaWRpbmcgc3RhY2sKKyAqIG92ZXJmbG93cy4KKyAqCisgKiBBdCBlYWNoIHJlY3Vyc2lvbiBzdGVwLCB0aGUgc3RhY2sgaXRlbXMgcG9pbnRzIHRvIHRoZSBjb21taXRzIHdob3NlCisgKiBhbmNlc3RvcnMgYXJlIHRvIGJlIGluc3BlY3RlZC4KKyAqLworc3RydWN0IGNvbnRhaW5zX3N0YWNrIHsKKwlpbnQgbnIsIGFsbG9jOworCXN0cnVjdCBjb250YWluc19zdGFja19lbnRyeSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCX0gKmNvbnRhaW5zX3N0YWNrOworfTsKKworc3RhdGljIGludCBpbl9jb21taXRfbGlzdChjb25zdCBzdHJ1Y3QgY29tbWl0X2xpc3QgKndhbnQsIHN0cnVjdCBjb21taXQgKmMpCit7CisJZm9yICg7IHdhbnQ7IHdhbnQgPSB3YW50LT5uZXh0KQorCQlpZiAoIWhhc2hjbXAod2FudC0+aXRlbS0+b2JqZWN0LnNoYTEsIGMtPm9iamVjdC5zaGExKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogVGVzdCB3aGV0aGVyIHRoZSBjYW5kaWRhdGUgb3Igb25lIG9mIGl0cyBwYXJlbnRzIGlzIGNvbnRhaW5lZCBpbiB0aGUgbGlzdC4KKyAqIERvIG5vdCByZWN1cnNlIHRvIGZpbmQgb3V0LCB0aG91Z2gsIGJ1dCByZXR1cm4gLTEgaWYgaW5jb25jbHVzaXZlLgorICovCitzdGF0aWMgZW51bSBjb250YWluc19yZXN1bHQgY29udGFpbnNfdGVzdChzdHJ1Y3QgY29tbWl0ICpjYW5kaWRhdGUsCisJCQkgICAgY29uc3Qgc3RydWN0IGNvbW1pdF9saXN0ICp3YW50KQoreworCS8qIHdhcyBpdCBwcmV2aW91c2x5IG1hcmtlZCBhcyBjb250YWluaW5nIGEgd2FudCBjb21taXQ/ICovCisJaWYgKGNhbmRpZGF0ZS0+b2JqZWN0LmZsYWdzICYgVE1QX01BUkspCisJCXJldHVybiAxOworCS8qIG9yIG1hcmtlZCBhcyBub3QgcG9zc2libHkgY29udGFpbmluZyBhIHdhbnQgY29tbWl0PyAqLworCWlmIChjYW5kaWRhdGUtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXJldHVybiAwOworCS8qIG9yIGFyZSB3ZSBpdD8gKi8KKwlpZiAoaW5fY29tbWl0X2xpc3Qod2FudCwgY2FuZGlkYXRlKSkgeworCQljYW5kaWRhdGUtPm9iamVjdC5mbGFncyB8PSBUTVBfTUFSSzsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHBhcnNlX2NvbW1pdChjYW5kaWRhdGUpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHB1c2hfdG9fY29udGFpbnNfc3RhY2soc3RydWN0IGNvbW1pdCAqY2FuZGlkYXRlLCBzdHJ1Y3QgY29udGFpbnNfc3RhY2sgKmNvbnRhaW5zX3N0YWNrKQoreworCUFMTE9DX0dST1coY29udGFpbnNfc3RhY2stPmNvbnRhaW5zX3N0YWNrLCBjb250YWluc19zdGFjay0+bnIgKyAxLCBjb250YWluc19zdGFjay0+YWxsb2MpOworCWNvbnRhaW5zX3N0YWNrLT5jb250YWluc19zdGFja1tjb250YWluc19zdGFjay0+bnJdLmNvbW1pdCA9IGNhbmRpZGF0ZTsKKwljb250YWluc19zdGFjay0+Y29udGFpbnNfc3RhY2tbY29udGFpbnNfc3RhY2stPm5yKytdLnBhcmVudHMgPSBjYW5kaWRhdGUtPnBhcmVudHM7Cit9CisKK3N0YXRpYyBlbnVtIGNvbnRhaW5zX3Jlc3VsdCBjb250YWluc190YWdfYWxnbyhzdHJ1Y3QgY29tbWl0ICpjYW5kaWRhdGUsCisJCWNvbnN0IHN0cnVjdCBjb21taXRfbGlzdCAqd2FudCkKK3sKKwlzdHJ1Y3QgY29udGFpbnNfc3RhY2sgY29udGFpbnNfc3RhY2sgPSB7IDAsIDAsIE5VTEwgfTsKKwlpbnQgcmVzdWx0ID0gY29udGFpbnNfdGVzdChjYW5kaWRhdGUsIHdhbnQpOworCisJaWYgKHJlc3VsdCAhPSBDT05UQUlOU19VTktOT1dOKQorCQlyZXR1cm4gcmVzdWx0OworCisJcHVzaF90b19jb250YWluc19zdGFjayhjYW5kaWRhdGUsICZjb250YWluc19zdGFjayk7CisJd2hpbGUgKGNvbnRhaW5zX3N0YWNrLm5yKSB7CisJCXN0cnVjdCBjb250YWluc19zdGFja19lbnRyeSAqZW50cnkgPSAmY29udGFpbnNfc3RhY2suY29udGFpbnNfc3RhY2tbY29udGFpbnNfc3RhY2subnIgLSAxXTsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gZW50cnktPmNvbW1pdDsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzID0gZW50cnktPnBhcmVudHM7CisKKwkJaWYgKCFwYXJlbnRzKSB7CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQkJY29udGFpbnNfc3RhY2subnItLTsKKwkJfQorCQkvKgorCQkgKiBJZiB3ZSBqdXN0IHBvcHBlZCB0aGUgc3RhY2ssIHBhcmVudHMtPml0ZW0gaGFzIGJlZW4gbWFya2VkLAorCQkgKiB0aGVyZWZvcmUgY29udGFpbnNfdGVzdCB3aWxsIHJldHVybiBhIG1lYW5pbmdmdWwgMCBvciAxLgorCQkgKi8KKwkJZWxzZSBzd2l0Y2ggKGNvbnRhaW5zX3Rlc3QocGFyZW50cy0+aXRlbSwgd2FudCkpIHsKKwkJY2FzZSBDT05UQUlOU19ZRVM6CisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBUTVBfTUFSSzsKKwkJCWNvbnRhaW5zX3N0YWNrLm5yLS07CisJCQlicmVhazsKKwkJY2FzZSBDT05UQUlOU19OTzoKKwkJCWVudHJ5LT5wYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJCWJyZWFrOworCQljYXNlIENPTlRBSU5TX1VOS05PV046CisJCQlwdXNoX3RvX2NvbnRhaW5zX3N0YWNrKHBhcmVudHMtPml0ZW0sICZjb250YWluc19zdGFjayk7CisJCQlicmVhazsKKwkJfQorCX0KKwlmcmVlKGNvbnRhaW5zX3N0YWNrLmNvbnRhaW5zX3N0YWNrKTsKKwlyZXR1cm4gY29udGFpbnNfdGVzdChjYW5kaWRhdGUsIHdhbnQpOworfQorCitzdGF0aWMgaW50IGNvbW1pdF9jb250YWlucyhzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaWYgKGZpbHRlci0+d2l0aF9jb21taXRfdGFnX2FsZ28pCisJCXJldHVybiBjb250YWluc190YWdfYWxnbyhjb21taXQsIGZpbHRlci0+d2l0aF9jb21taXQpOworCXJldHVybiBpc19kZXNjZW5kYW50X29mKGNvbW1pdCwgZmlsdGVyLT53aXRoX2NvbW1pdCk7Cit9CisKKy8qCisgKiBSZXR1cm4gMSBpZiB0aGUgcmVmbmFtZSBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMsIG90aGVyd2lzZSAwLgorICogQSBwYXR0ZXJuIGNhbiBiZSBhIGxpdGVyYWwgcHJlZml4IChlLmcuIGEgcmVmbmFtZSAicmVmcy9oZWFkcy9tYXN0ZXIiCisgKiBtYXRjaGVzIGEgcGF0dGVybiAicmVmcy9oZWFkcy9tYXMiKSBvciBhIHdpbGRjYXJkIChlLmcuIHRoZSBzYW1lIHJlZgorICogbWF0Y2hlcyAicmVmcy9oZWFkcy9tYXMqIiwgdG9vKS4KKyAqLworc3RhdGljIGludCBtYXRjaF9wYXR0ZXJuKGNvbnN0IGNoYXIgKipwYXR0ZXJucywgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwkvKgorCSAqIFdoZW4gbm8gJy0tZm9ybWF0JyBvcHRpb24gaXMgZ2l2ZW4gd2UgbmVlZCB0byBza2lwIHRoZSBwcmVmaXgKKwkgKiBmb3IgbWF0Y2hpbmcgcmVmcyBvZiB0YWdzIGFuZCBicmFuY2hlcy4KKwkgKi8KKwkodm9pZCkoc2tpcF9wcmVmaXgocmVmbmFtZSwgInJlZnMvdGFncy8iLCAmcmVmbmFtZSkgfHwKKwkgICAgICAgc2tpcF9wcmVmaXgocmVmbmFtZSwgInJlZnMvaGVhZHMvIiwgJnJlZm5hbWUpIHx8CisJICAgICAgIHNraXBfcHJlZml4KHJlZm5hbWUsICJyZWZzL3JlbW90ZXMvIiwgJnJlZm5hbWUpIHx8CisJICAgICAgIHNraXBfcHJlZml4KHJlZm5hbWUsICJyZWZzLyIsICZyZWZuYW1lKSk7CisKKwlmb3IgKDsgKnBhdHRlcm5zOyBwYXR0ZXJucysrKSB7CisJCWlmICghd2lsZG1hdGNoKCpwYXR0ZXJucywgcmVmbmFtZSwgMCwgTlVMTCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm4gMSBpZiB0aGUgcmVmbmFtZSBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMsIG90aGVyd2lzZSAwLgorICogQSBwYXR0ZXJuIGNhbiBiZSBwYXRoIHByZWZpeCAoZS5nLiBhIHJlZm5hbWUgInJlZnMvaGVhZHMvbWFzdGVyIgorICogbWF0Y2hlcyBhIHBhdHRlcm4gInJlZnMvaGVhZHMvIiBidXQgbm90ICJyZWZzL2hlYWRzL20iKSBvciBhCisgKiB3aWxkY2FyZCAoZS5nLiB0aGUgc2FtZSByZWYgbWF0Y2hlcyAicmVmcy9oZWFkcy9tKiIsIHRvbykuCisgKi8KK3N0YXRpYyBpbnQgbWF0Y2hfbmFtZV9hc19wYXRoKGNvbnN0IGNoYXIgKipwYXR0ZXJuLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWludCBuYW1lbGVuID0gc3RybGVuKHJlZm5hbWUpOworCWZvciAoOyAqcGF0dGVybjsgcGF0dGVybisrKSB7CisJCWNvbnN0IGNoYXIgKnAgPSAqcGF0dGVybjsKKwkJaW50IHBsZW4gPSBzdHJsZW4ocCk7CisKKwkJaWYgKChwbGVuIDw9IG5hbWVsZW4pICYmCisJCSAgICAhc3RybmNtcChyZWZuYW1lLCBwLCBwbGVuKSAmJgorCQkgICAgKHJlZm5hbWVbcGxlbl0gPT0gJ1wwJyB8fAorCQkgICAgIHJlZm5hbWVbcGxlbl0gPT0gJy8nIHx8CisJCSAgICAgcFtwbGVuLTFdID09ICcvJykpCisJCQlyZXR1cm4gMTsKKwkJaWYgKCF3aWxkbWF0Y2gocCwgcmVmbmFtZSwgV01fUEFUSE5BTUUsIE5VTEwpKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKiBSZXR1cm4gMSBpZiB0aGUgcmVmbmFtZSBtYXRjaGVzIG9uZSBvZiB0aGUgcGF0dGVybnMsIG90aGVyd2lzZSAwLiAqLworc3RhdGljIGludCBmaWx0ZXJfcGF0dGVybl9tYXRjaChzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWlmICghKmZpbHRlci0+bmFtZV9wYXR0ZXJucykKKwkJcmV0dXJuIDE7IC8qIE5vIHBhdHRlcm4gYWx3YXlzIG1hdGNoZXMgKi8KKwlpZiAoZmlsdGVyLT5tYXRjaF9hc19wYXRoKQorCQlyZXR1cm4gbWF0Y2hfbmFtZV9hc19wYXRoKGZpbHRlci0+bmFtZV9wYXR0ZXJucywgcmVmbmFtZSk7CisJcmV0dXJuIG1hdGNoX3BhdHRlcm4oZmlsdGVyLT5uYW1lX3BhdHRlcm5zLCByZWZuYW1lKTsKK30KKworLyoKKyAqIEdpdmVuIGEgcmVmIChzaGExLCByZWZuYW1lKSwgY2hlY2sgaWYgdGhlIHJlZiBiZWxvbmdzIHRvIHRoZSBhcnJheQorICogb2Ygc2hhMXMuIElmIHRoZSBnaXZlbiByZWYgaXMgYSB0YWcsIGNoZWNrIGlmIHRoZSBnaXZlbiB0YWcgcG9pbnRzCisgKiBhdCBvbmUgb2YgdGhlIHNoYTFzIGluIHRoZSBnaXZlbiBzaGExIGFycmF5LgorICogdGhlIGdpdmVuIHNoYTFfYXJyYXkuCisgKiBORUVEU1dPUks6CisgKiAxLiBPbmx5IGEgc2luZ2xlIGxldmVsIG9mIGluZGVyZWN0aW9uIGlzIG9idGFpbmVkLCB3ZSBtaWdodCB3YW50IHRvCisgKiBjaGFuZ2UgdGhpcyB0byBhY2NvdW50IGZvciBtdWx0aXBsZSBsZXZlbHMgKGUuZy4gYW5ub3RhdGVkIHRhZ3MKKyAqIHBvaW50aW5nIHRvIGFubm90YXRlZCB0YWdzIHBvaW50aW5nIHRvIGEgY29tbWl0LikKKyAqIDIuIEFzIHRoZSByZWZzIGFyZSBjYWNoZWQgd2UgbWlnaHQga25vdyB3aGF0IHJlZm5hbWUgcGVlbHMgdG8gd2l0aG91dAorICogdGhlIG5lZWQgdG8gcGFyc2UgdGhlIG9iamVjdCB2aWEgcGFyc2Vfb2JqZWN0KCkuIHBlZWxfcmVmKCkgbWlnaHQgYmUgYQorICogbW9yZSBlZmZpY2llbnQgYWx0ZXJuYXRpdmUgdG8gb2J0YWluIHRoZSBwb2ludGVlLgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqbWF0Y2hfcG9pbnRzX2F0KHN0cnVjdCBzaGExX2FycmF5ICpwb2ludHNfYXQsCisJCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCQkgICAgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICp0YWdnZWRfc2hhMSA9IE5VTEw7CisJc3RydWN0IG9iamVjdCAqb2JqOworCisJaWYgKHNoYTFfYXJyYXlfbG9va3VwKHBvaW50c19hdCwgc2hhMSkgPj0gMCkKKwkJcmV0dXJuIHNoYTE7CisJb2JqID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlkaWUoXygibWFsZm9ybWVkIG9iamVjdCBhdCAnJXMnIiksIHJlZm5hbWUpOworCWlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykKKwkJdGFnZ2VkX3NoYTEgPSAoKHN0cnVjdCB0YWcgKilvYmopLT50YWdnZWQtPnNoYTE7CisJaWYgKHRhZ2dlZF9zaGExICYmIHNoYTFfYXJyYXlfbG9va3VwKHBvaW50c19hdCwgdGFnZ2VkX3NoYTEpID49IDApCisJCXJldHVybiB0YWdnZWRfc2hhMTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogQWxsb2NhdGUgc3BhY2UgZm9yIGEgbmV3IHJlZl9hcnJheV9pdGVtIGFuZCBjb3B5IHRoZSBvYmplY3RuYW1lIGFuZCBmbGFnIHRvIGl0ICovCitzdGF0aWMgc3RydWN0IHJlZl9hcnJheV9pdGVtICpuZXdfcmVmX2FycmF5X2l0ZW0oY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpvYmplY3RuYW1lLAorCQkJCQkJIGludCBmbGFnKQoreworCXNpemVfdCBsZW4gPSBzdHJsZW4ocmVmbmFtZSk7CisJc3RydWN0IHJlZl9hcnJheV9pdGVtICpyZWYgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0pICsgbGVuICsgMSk7CisJbWVtY3B5KHJlZi0+cmVmbmFtZSwgcmVmbmFtZSwgbGVuKTsKKwlyZWYtPnJlZm5hbWVbbGVuXSA9ICdcMCc7CisJaGFzaGNweShyZWYtPm9iamVjdG5hbWUsIG9iamVjdG5hbWUpOworCXJlZi0+ZmxhZyA9IGZsYWc7CisKKwlyZXR1cm4gcmVmOworfQorCitzdGF0aWMgaW50IGZpbHRlcl9yZWZfa2luZChzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXVuc2lnbmVkIGludCBpOworCisJc3RhdGljIHN0cnVjdCB7CisJCWNvbnN0IGNoYXIgKnByZWZpeDsKKwkJdW5zaWduZWQgaW50IGtpbmQ7CisJfSByZWZfa2luZFtdID0geworCQl7ICJyZWZzL2hlYWRzLyIgLCBGSUxURVJfUkVGU19CUkFOQ0hFUyB9LAorCQl7ICJyZWZzL3JlbW90ZXMvIiAsIEZJTFRFUl9SRUZTX1JFTU9URVMgfSwKKwkJeyAicmVmcy90YWdzLyIsIEZJTFRFUl9SRUZTX1RBR1N9CisJfTsKKworCWlmIChmaWx0ZXItPmtpbmQgPT0gRklMVEVSX1JFRlNfQlJBTkNIRVMgfHwKKwkgICAgZmlsdGVyLT5raW5kID09IEZJTFRFUl9SRUZTX1JFTU9URVMgfHwKKwkgICAgZmlsdGVyLT5raW5kID09IEZJTFRFUl9SRUZTX1RBR1MpCisJCXJldHVybiBmaWx0ZXItPmtpbmQ7CisJZWxzZSBpZiAoIXN0cmNtcChyZWZuYW1lLCAiSEVBRCIpKQorCQlyZXR1cm4gRklMVEVSX1JFRlNfREVUQUNIRURfSEVBRDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZl9raW5kKTsgaSsrKSB7CisJCWlmIChzdGFydHNfd2l0aChyZWZuYW1lLCByZWZfa2luZFtpXS5wcmVmaXgpKQorCQkJcmV0dXJuIHJlZl9raW5kW2ldLmtpbmQ7CisJfQorCisJcmV0dXJuIEZJTFRFUl9SRUZTX09USEVSUzsKK30KKworLyoKKyAqIEEgY2FsbC1iYWNrIGdpdmVuIHRvIGZvcl9lYWNoX3JlZigpLiAgRmlsdGVyIHJlZnMgYW5kIGtlZXAgdGhlbSBmb3IKKyAqIGxhdGVyIG9iamVjdCBwcm9jZXNzaW5nLgorICovCitzdGF0aWMgaW50IHJlZl9maWx0ZXJfaGFuZGxlcihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZWZfZmlsdGVyX2NiZGF0YSAqcmVmX2NiZGF0YSA9IGNiX2RhdGE7CisJc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciA9IHJlZl9jYmRhdGEtPmZpbHRlcjsKKwlzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKnJlZjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBOVUxMOworCXVuc2lnbmVkIGludCBraW5kOworCisJaWYgKGZsYWcgJiBSRUZfQkFEX05BTUUpIHsKKwkJd2FybmluZygiaWdub3JpbmcgcmVmIHdpdGggYnJva2VuIG5hbWUgJXMiLCByZWZuYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGZsYWcgJiBSRUZfSVNCUk9LRU4pIHsKKwkJd2FybmluZygiaWdub3JpbmcgYnJva2VuIHJlZiAlcyIsIHJlZm5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBPYnRhaW4gdGhlIGN1cnJlbnQgcmVmIGtpbmQgZnJvbSBmaWx0ZXJfcmVmX2tpbmQoKSBhbmQgaWdub3JlIHVud2FudGVkIHJlZnMuICovCisJa2luZCA9IGZpbHRlcl9yZWZfa2luZChmaWx0ZXIsIHJlZm5hbWUpOworCWlmICghKGtpbmQgJiBmaWx0ZXItPmtpbmQpKQorCQlyZXR1cm4gMDsKKworCWlmICghZmlsdGVyX3BhdHRlcm5fbWF0Y2goZmlsdGVyLCByZWZuYW1lKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZmlsdGVyLT5wb2ludHNfYXQubnIgJiYgIW1hdGNoX3BvaW50c19hdCgmZmlsdGVyLT5wb2ludHNfYXQsIG9pZC0+aGFzaCwgcmVmbmFtZSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBBIG1lcmdlIGZpbHRlciBpcyBhcHBsaWVkIG9uIHJlZnMgcG9pbnRpbmcgdG8gY29tbWl0cy4gSGVuY2UKKwkgKiBvYnRhaW4gdGhlIGNvbW1pdCB1c2luZyB0aGUgJ29pZCcgYXZhaWxhYmxlIGFuZCBkaXNjYXJkIGFsbAorCSAqIG5vbi1jb21taXRzIGVhcmx5LiBUaGUgYWN0dWFsIGZpbHRlcmluZyBpcyBkb25lIGxhdGVyLgorCSAqLworCWlmIChmaWx0ZXItPm1lcmdlX2NvbW1pdCB8fCBmaWx0ZXItPndpdGhfY29tbWl0IHx8IGZpbHRlci0+dmVyYm9zZSkgeworCQljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkob2lkLT5oYXNoLCAxKTsKKwkJaWYgKCFjb21taXQpCisJCQlyZXR1cm4gMDsKKwkJLyogV2UgcGVyZm9ybSB0aGUgZmlsdGVyaW5nIGZvciB0aGUgJy0tY29udGFpbnMnIG9wdGlvbiAqLworCQlpZiAoZmlsdGVyLT53aXRoX2NvbW1pdCAmJgorCQkgICAgIWNvbW1pdF9jb250YWlucyhmaWx0ZXIsIGNvbW1pdCkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIFdlIGRvIG5vdCBvcGVuIHRoZSBvYmplY3QgeWV0OyBzb3J0IG1heSBvbmx5IG5lZWQgcmVmbmFtZQorCSAqIHRvIGRvIGl0cyBqb2IgYW5kIHRoZSByZXN1bHRpbmcgbGlzdCBtYXkgeWV0IHRvIGJlIHBydW5lZAorCSAqIGJ5IG1heGNvdW50IGxvZ2ljLgorCSAqLworCXJlZiA9IG5ld19yZWZfYXJyYXlfaXRlbShyZWZuYW1lLCBvaWQtPmhhc2gsIGZsYWcpOworCXJlZi0+Y29tbWl0ID0gY29tbWl0OworCisJUkVBTExPQ19BUlJBWShyZWZfY2JkYXRhLT5hcnJheS0+aXRlbXMsIHJlZl9jYmRhdGEtPmFycmF5LT5uciArIDEpOworCXJlZl9jYmRhdGEtPmFycmF5LT5pdGVtc1tyZWZfY2JkYXRhLT5hcnJheS0+bnIrK10gPSByZWY7CisJcmVmLT5raW5kID0ga2luZDsKKwlyZXR1cm4gMDsKK30KKworLyogIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgYSByZWZfYXJyYXlfaXRlbSAqLworc3RhdGljIHZvaWQgZnJlZV9hcnJheV9pdGVtKHN0cnVjdCByZWZfYXJyYXlfaXRlbSAqaXRlbSkKK3sKKwlmcmVlKChjaGFyICopaXRlbS0+c3ltcmVmKTsKKwlmcmVlKGl0ZW0pOworfQorCisvKiBGcmVlIGFsbCBtZW1vcnkgYWxsb2NhdGVkIGZvciByZWZfYXJyYXkgKi8KK3ZvaWQgcmVmX2FycmF5X2NsZWFyKHN0cnVjdCByZWZfYXJyYXkgKmFycmF5KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKQorCQlmcmVlX2FycmF5X2l0ZW0oYXJyYXktPml0ZW1zW2ldKTsKKwlmcmVlKGFycmF5LT5pdGVtcyk7CisJYXJyYXktPml0ZW1zID0gTlVMTDsKKwlhcnJheS0+bnIgPSBhcnJheS0+YWxsb2MgPSAwOworfQorCitzdGF0aWMgdm9pZCBkb19tZXJnZV9maWx0ZXIoc3RydWN0IHJlZl9maWx0ZXJfY2JkYXRhICpyZWZfY2JkYXRhKQoreworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCWludCBpLCBvbGRfbnI7CisJc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciA9IHJlZl9jYmRhdGEtPmZpbHRlcjsKKwlzdHJ1Y3QgcmVmX2FycmF5ICphcnJheSA9IHJlZl9jYmRhdGEtPmFycmF5OworCXN0cnVjdCBjb21taXQgKip0b19jbGVhciA9IHhjYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21taXQgKiksIGFycmF5LT5ucik7CisKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJyYXktPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl9hcnJheV9pdGVtICppdGVtID0gYXJyYXktPml0ZW1zW2ldOworCQlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsICZpdGVtLT5jb21taXQtPm9iamVjdCwgaXRlbS0+cmVmbmFtZSk7CisJCXRvX2NsZWFyW2ldID0gaXRlbS0+Y29tbWl0OworCX0KKworCWZpbHRlci0+bWVyZ2VfY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwlhZGRfcGVuZGluZ19vYmplY3QoJnJldnMsICZmaWx0ZXItPm1lcmdlX2NvbW1pdC0+b2JqZWN0LCAiIik7CisKKwlyZXZzLmxpbWl0ZWQgPSAxOworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisKKwlvbGRfbnIgPSBhcnJheS0+bnI7CisJYXJyYXktPm5yID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBvbGRfbnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKml0ZW0gPSBhcnJheS0+aXRlbXNbaV07CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGl0ZW0tPmNvbW1pdDsKKworCQlpbnQgaXNfbWVyZ2VkID0gISEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKTsKKworCQlpZiAoaXNfbWVyZ2VkID09IChmaWx0ZXItPm1lcmdlID09IFJFRl9GSUxURVJfTUVSR0VEX0lOQ0xVREUpKQorCQkJYXJyYXktPml0ZW1zW2FycmF5LT5ucisrXSA9IGFycmF5LT5pdGVtc1tpXTsKKwkJZWxzZQorCQkJZnJlZV9hcnJheV9pdGVtKGl0ZW0pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBvbGRfbnI7IGkrKykKKwkJY2xlYXJfY29tbWl0X21hcmtzKHRvX2NsZWFyW2ldLCBBTExfUkVWX0ZMQUdTKTsKKwljbGVhcl9jb21taXRfbWFya3MoZmlsdGVyLT5tZXJnZV9jb21taXQsIEFMTF9SRVZfRkxBR1MpOworCWZyZWUodG9fY2xlYXIpOworfQorCisvKgorICogQVBJIGZvciBmaWx0ZXJpbmcgYSBzZXQgb2YgcmVmcy4gQmFzZWQgb24gdGhlIHR5cGUgb2YgcmVmcyB0aGUgdXNlcgorICogaGFzIHJlcXVlc3RlZCwgd2UgaXRlcmF0ZSB0aHJvdWdoIHRob3NlIHJlZnMgYW5kIGFwcGx5IGZpbHRlcnMKKyAqIGFzIHBlciB0aGUgZ2l2ZW4gcmVmX2ZpbHRlciBzdHJ1Y3R1cmUgYW5kIGZpbmFsbHkgc3RvcmUgdGhlCisgKiBmaWx0ZXJlZCByZWZzIGluIHRoZSByZWZfYXJyYXkgc3RydWN0dXJlLgorICovCitpbnQgZmlsdGVyX3JlZnMoc3RydWN0IHJlZl9hcnJheSAqYXJyYXksIHN0cnVjdCByZWZfZmlsdGVyICpmaWx0ZXIsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCByZWZfZmlsdGVyX2NiZGF0YSByZWZfY2JkYXRhOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBicm9rZW4gPSAwOworCisJcmVmX2NiZGF0YS5hcnJheSA9IGFycmF5OworCXJlZl9jYmRhdGEuZmlsdGVyID0gZmlsdGVyOworCisJaWYgKHR5cGUgJiBGSUxURVJfUkVGU19JTkNMVURFX0JST0tFTikKKwkJYnJva2VuID0gMTsKKwlmaWx0ZXItPmtpbmQgPSB0eXBlICYgRklMVEVSX1JFRlNfS0lORF9NQVNLOworCisJLyogIFNpbXBsZSBwZXItcmVmIGZpbHRlcmluZyAqLworCWlmICghZmlsdGVyLT5raW5kKQorCQlkaWUoImZpbHRlcl9yZWZzOiBpbnZhbGlkIHR5cGUiKTsKKwllbHNlIHsKKwkJLyoKKwkJICogRm9yIGNvbW1vbiBjYXNlcyB3aGVyZSB3ZSBuZWVkIG9ubHkgYnJhbmNoZXMgb3IgcmVtb3RlcyBvciB0YWdzLAorCQkgKiB3ZSBvbmx5IGl0ZXJhdGUgdGhyb3VnaCB0aG9zZSByZWZzLiBJZiBhIG1peCBvZiByZWZzIGlzIG5lZWRlZCwKKwkJICogd2UgaXRlcmF0ZSBvdmVyIGFsbCByZWZzIGFuZCBmaWx0ZXIgb3V0IHJlcXVpcmVkIHJlZnMgd2l0aCB0aGUgaGVscAorCQkgKiBvZiBmaWx0ZXJfcmVmX2tpbmQoKS4KKwkJICovCisJCWlmIChmaWx0ZXItPmtpbmQgPT0gRklMVEVSX1JFRlNfQlJBTkNIRVMpCisJCQlyZXQgPSBmb3JfZWFjaF9mdWxscmVmX2luKCJyZWZzL2hlYWRzLyIsIHJlZl9maWx0ZXJfaGFuZGxlciwgJnJlZl9jYmRhdGEsIGJyb2tlbik7CisJCWVsc2UgaWYgKGZpbHRlci0+a2luZCA9PSBGSUxURVJfUkVGU19SRU1PVEVTKQorCQkJcmV0ID0gZm9yX2VhY2hfZnVsbHJlZl9pbigicmVmcy9yZW1vdGVzLyIsIHJlZl9maWx0ZXJfaGFuZGxlciwgJnJlZl9jYmRhdGEsIGJyb2tlbik7CisJCWVsc2UgaWYgKGZpbHRlci0+a2luZCA9PSBGSUxURVJfUkVGU19UQUdTKQorCQkJcmV0ID0gZm9yX2VhY2hfZnVsbHJlZl9pbigicmVmcy90YWdzLyIsIHJlZl9maWx0ZXJfaGFuZGxlciwgJnJlZl9jYmRhdGEsIGJyb2tlbik7CisJCWVsc2UgaWYgKGZpbHRlci0+a2luZCAmIEZJTFRFUl9SRUZTX0FMTCkKKwkJCXJldCA9IGZvcl9lYWNoX2Z1bGxyZWZfaW4oIiIsIHJlZl9maWx0ZXJfaGFuZGxlciwgJnJlZl9jYmRhdGEsIGJyb2tlbik7CisJCWlmICghcmV0ICYmIChmaWx0ZXItPmtpbmQgJiBGSUxURVJfUkVGU19ERVRBQ0hFRF9IRUFEKSkKKwkJCWhlYWRfcmVmKHJlZl9maWx0ZXJfaGFuZGxlciwgJnJlZl9jYmRhdGEpOworCX0KKworCisJLyogIEZpbHRlcnMgdGhhdCBuZWVkIHJldmlzaW9uIHdhbGtpbmcgKi8KKwlpZiAoZmlsdGVyLT5tZXJnZV9jb21taXQpCisJCWRvX21lcmdlX2ZpbHRlcigmcmVmX2NiZGF0YSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNtcF9yZWZfc29ydGluZyhzdHJ1Y3QgcmVmX3NvcnRpbmcgKnMsIHN0cnVjdCByZWZfYXJyYXlfaXRlbSAqYSwgc3RydWN0IHJlZl9hcnJheV9pdGVtICpiKQoreworCXN0cnVjdCBhdG9tX3ZhbHVlICp2YSwgKnZiOworCWludCBjbXA7CisJY21wX3R5cGUgY21wX3R5cGUgPSB1c2VkX2F0b21fdHlwZVtzLT5hdG9tXTsKKworCWdldF9yZWZfYXRvbV92YWx1ZShhLCBzLT5hdG9tLCAmdmEpOworCWdldF9yZWZfYXRvbV92YWx1ZShiLCBzLT5hdG9tLCAmdmIpOworCWlmIChzLT52ZXJzaW9uKQorCQljbXAgPSB2ZXJzaW9uY21wKHZhLT5zLCB2Yi0+cyk7CisJZWxzZSBpZiAoY21wX3R5cGUgPT0gRklFTERfU1RSKQorCQljbXAgPSBzdHJjbXAodmEtPnMsIHZiLT5zKTsKKwllbHNlIHsKKwkJaWYgKHZhLT51bCA8IHZiLT51bCkKKwkJCWNtcCA9IC0xOworCQllbHNlIGlmICh2YS0+dWwgPT0gdmItPnVsKQorCQkJY21wID0gMDsKKwkJZWxzZQorCQkJY21wID0gMTsKKwl9CisKKwlyZXR1cm4gKHMtPnJldmVyc2UpID8gLWNtcCA6IGNtcDsKK30KKworc3RhdGljIHN0cnVjdCByZWZfc29ydGluZyAqcmVmX3NvcnRpbmc7CitzdGF0aWMgaW50IGNvbXBhcmVfcmVmcyhjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IHJlZl9hcnJheV9pdGVtICphID0gKigoc3RydWN0IHJlZl9hcnJheV9pdGVtICoqKWFfKTsKKwlzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKmIgPSAqKChzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKiopYl8pOworCXN0cnVjdCByZWZfc29ydGluZyAqczsKKworCWZvciAocyA9IHJlZl9zb3J0aW5nOyBzOyBzID0gcy0+bmV4dCkgeworCQlpbnQgY21wID0gY21wX3JlZl9zb3J0aW5nKHMsIGEsIGIpOworCQlpZiAoY21wKQorCQkJcmV0dXJuIGNtcDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmVmX2FycmF5X3NvcnQoc3RydWN0IHJlZl9zb3J0aW5nICpzb3J0aW5nLCBzdHJ1Y3QgcmVmX2FycmF5ICphcnJheSkKK3sKKwlyZWZfc29ydGluZyA9IHNvcnRpbmc7CisJcXNvcnQoYXJyYXktPml0ZW1zLCBhcnJheS0+bnIsIHNpemVvZihzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKiksIGNvbXBhcmVfcmVmcyk7Cit9CisKK3N0YXRpYyBpbnQgaGV4MShjaGFyIGNoKQoreworCWlmICgnMCcgPD0gY2ggJiYgY2ggPD0gJzknKQorCQlyZXR1cm4gY2ggLSAnMCc7CisJZWxzZSBpZiAoJ2EnIDw9IGNoICYmIGNoIDw9ICdmJykKKwkJcmV0dXJuIGNoIC0gJ2EnICsgMTA7CisJZWxzZSBpZiAoJ0EnIDw9IGNoICYmIGNoIDw9ICdGJykKKwkJcmV0dXJuIGNoIC0gJ0EnICsgMTA7CisJcmV0dXJuIC0xOworfQorc3RhdGljIGludCBoZXgyKGNvbnN0IGNoYXIgKmNwKQoreworCWlmIChjcFswXSAmJiBjcFsxXSkKKwkJcmV0dXJuIChoZXgxKGNwWzBdKSA8PCA0KSB8IGhleDEoY3BbMV0pOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfbGl0ZXJhbChjb25zdCBjaGFyICpjcCwgY29uc3QgY2hhciAqZXAsIHN0cnVjdCByZWZfZm9ybWF0dGluZ19zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IHN0cmJ1ZiAqcyA9ICZzdGF0ZS0+c3RhY2stPm91dHB1dDsKKworCXdoaWxlICgqY3AgJiYgKCFlcCB8fCBjcCA8IGVwKSkgeworCQlpZiAoKmNwID09ICclJykgeworCQkJaWYgKGNwWzFdID09ICclJykKKwkJCQljcCsrOworCQkJZWxzZSB7CisJCQkJaW50IGNoID0gaGV4MihjcCArIDEpOworCQkJCWlmICgwIDw9IGNoKSB7CisJCQkJCXN0cmJ1Zl9hZGRjaChzLCBjaCk7CisJCQkJCWNwICs9IDM7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCQlzdHJidWZfYWRkY2gocywgKmNwKTsKKwkJY3ArKzsKKwl9Cit9CisKK3ZvaWQgc2hvd19yZWZfYXJyYXlfaXRlbShzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKmluZm8sIGNvbnN0IGNoYXIgKmZvcm1hdCwgaW50IHF1b3RlX3N0eWxlKQoreworCWNvbnN0IGNoYXIgKmNwLCAqc3AsICplcDsKKwlzdHJ1Y3Qgc3RyYnVmICpmaW5hbF9idWY7CisJc3RydWN0IHJlZl9mb3JtYXR0aW5nX3N0YXRlIHN0YXRlID0gUkVGX0ZPUk1BVFRJTkdfU1RBVEVfSU5JVDsKKworCXN0YXRlLnF1b3RlX3N0eWxlID0gcXVvdGVfc3R5bGU7CisJcHVzaF9zdGFja19lbGVtZW50KCZzdGF0ZS5zdGFjayk7CisKKwlmb3IgKGNwID0gZm9ybWF0OyAqY3AgJiYgKHNwID0gZmluZF9uZXh0KGNwKSk7IGNwID0gZXAgKyAxKSB7CisJCXN0cnVjdCBhdG9tX3ZhbHVlICphdG9tdjsKKworCQllcCA9IHN0cmNocihzcCwgJyknKTsKKwkJaWYgKGNwIDwgc3ApCisJCQlhcHBlbmRfbGl0ZXJhbChjcCwgc3AsICZzdGF0ZSk7CisJCWdldF9yZWZfYXRvbV92YWx1ZShpbmZvLCBwYXJzZV9yZWZfZmlsdGVyX2F0b20oc3AgKyAyLCBlcCksICZhdG9tdik7CisJCWF0b212LT5oYW5kbGVyKGF0b212LCAmc3RhdGUpOworCX0KKwlpZiAoKmNwKSB7CisJCXNwID0gY3AgKyBzdHJsZW4oY3ApOworCQlhcHBlbmRfbGl0ZXJhbChjcCwgc3AsICZzdGF0ZSk7CisJfQorCWlmIChuZWVkX2NvbG9yX3Jlc2V0X2F0X2VvbCkgeworCQlzdHJ1Y3QgYXRvbV92YWx1ZSByZXNldHY7CisJCWNoYXIgY29sb3JbQ09MT1JfTUFYTEVOXSA9ICIiOworCisJCWlmIChjb2xvcl9wYXJzZSgicmVzZXQiLCBjb2xvcikgPCAwKQorCQkJZGllKCJCVUc6IGNvdWxkbid0IHBhcnNlICdyZXNldCcgYXMgYSBjb2xvciIpOworCQlyZXNldHYucyA9IGNvbG9yOworCQlhcHBlbmRfYXRvbSgmcmVzZXR2LCAmc3RhdGUpOworCX0KKwlpZiAoc3RhdGUuc3RhY2stPnByZXYpCisJCWRpZShfKCJmb3JtYXQ6ICUlKGVuZCkgYXRvbSBtaXNzaW5nIikpOworCWZpbmFsX2J1ZiA9ICZzdGF0ZS5zdGFjay0+b3V0cHV0OworCWZ3cml0ZShmaW5hbF9idWYtPmJ1ZiwgMSwgZmluYWxfYnVmLT5sZW4sIHN0ZG91dCk7CisJcG9wX3N0YWNrX2VsZW1lbnQoJnN0YXRlLnN0YWNrKTsKKwlwdXRjaGFyKCdcbicpOworfQorCisvKiAgSWYgbm8gc29ydGluZyBvcHRpb24gaXMgZ2l2ZW4sIHVzZSByZWZuYW1lIHRvIHNvcnQgYXMgZGVmYXVsdCAqLworc3RydWN0IHJlZl9zb3J0aW5nICpyZWZfZGVmYXVsdF9zb3J0aW5nKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgY3N0cl9uYW1lW10gPSAicmVmbmFtZSI7CisKKwlzdHJ1Y3QgcmVmX3NvcnRpbmcgKnNvcnRpbmcgPSB4Y2FsbG9jKDEsIHNpemVvZigqc29ydGluZykpOworCisJc29ydGluZy0+bmV4dCA9IE5VTEw7CisJc29ydGluZy0+YXRvbSA9IHBhcnNlX3JlZl9maWx0ZXJfYXRvbShjc3RyX25hbWUsIGNzdHJfbmFtZSArIHN0cmxlbihjc3RyX25hbWUpKTsKKwlyZXR1cm4gc29ydGluZzsKK30KKworaW50IHBhcnNlX29wdF9yZWZfc29ydGluZyhjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXN0cnVjdCByZWZfc29ydGluZyAqKnNvcnRpbmdfdGFpbCA9IG9wdC0+dmFsdWU7CisJc3RydWN0IHJlZl9zb3J0aW5nICpzOworCWludCBsZW47CisKKwlpZiAoIWFyZykgLyogc2hvdWxkIC0tbm8tc29ydCB2b2lkIHRoZSBsaXN0ID8gKi8KKwkJcmV0dXJuIC0xOworCisJcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpzKSk7CisJcy0+bmV4dCA9ICpzb3J0aW5nX3RhaWw7CisJKnNvcnRpbmdfdGFpbCA9IHM7CisKKwlpZiAoKmFyZyA9PSAnLScpIHsKKwkJcy0+cmV2ZXJzZSA9IDE7CisJCWFyZysrOworCX0KKwlpZiAoc2tpcF9wcmVmaXgoYXJnLCAidmVyc2lvbjoiLCAmYXJnKSB8fAorCSAgICBza2lwX3ByZWZpeChhcmcsICJ2OiIsICZhcmcpKQorCQlzLT52ZXJzaW9uID0gMTsKKwlsZW4gPSBzdHJsZW4oYXJnKTsKKwlzLT5hdG9tID0gcGFyc2VfcmVmX2ZpbHRlcl9hdG9tKGFyZywgYXJnK2xlbik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV9vcHRfbWVyZ2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJc3RydWN0IHJlZl9maWx0ZXIgKnJmID0gb3B0LT52YWx1ZTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJcmYtPm1lcmdlID0gc3RhcnRzX3dpdGgob3B0LT5sb25nX25hbWUsICJubyIpCisJCT8gUkVGX0ZJTFRFUl9NRVJHRURfT01JVAorCQk6IFJFRl9GSUxURVJfTUVSR0VEX0lOQ0xVREU7CisKKwlpZiAoZ2V0X3NoYTEoYXJnLCBzaGExKSkKKwkJZGllKF8oIm1hbGZvcm1lZCBvYmplY3QgbmFtZSAlcyIpLCBhcmcpOworCisJcmYtPm1lcmdlX2NvbW1pdCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShzaGExLCAwKTsKKwlpZiAoIXJmLT5tZXJnZV9jb21taXQpCisJCXJldHVybiBvcHRlcnJvcihvcHQsICJtdXN0IHBvaW50IHRvIGEgY29tbWl0IiwgMCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3JlZi1maWx0ZXIuaCBiL3JlZi1maWx0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGQ0MzVlCi0tLSAvZGV2L251bGwKKysrIGIvcmVmLWZpbHRlci5oCkBAIC0wLDAgKzEsMTEwIEBACisjaWZuZGVmIFJFRl9GSUxURVJfSAorI2RlZmluZSBSRUZfRklMVEVSX0gKKworI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicGFyc2Utb3B0aW9ucy5oIgorCisvKiBRdW90aW5nIHN0eWxlcyAqLworI2RlZmluZSBRVU9URV9OT05FIDAKKyNkZWZpbmUgUVVPVEVfU0hFTEwgMQorI2RlZmluZSBRVU9URV9QRVJMIDIKKyNkZWZpbmUgUVVPVEVfUFlUSE9OIDQKKyNkZWZpbmUgUVVPVEVfVENMIDgKKworI2RlZmluZSBGSUxURVJfUkVGU19JTkNMVURFX0JST0tFTiAweDAwMDEKKyNkZWZpbmUgRklMVEVSX1JFRlNfVEFHUyAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEZJTFRFUl9SRUZTX0JSQU5DSEVTICAgICAgIDB4MDAwNAorI2RlZmluZSBGSUxURVJfUkVGU19SRU1PVEVTICAgICAgICAweDAwMDgKKyNkZWZpbmUgRklMVEVSX1JFRlNfT1RIRVJTICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEZJTFRFUl9SRUZTX0FMTCAgICAgICAgICAgIChGSUxURVJfUkVGU19UQUdTIHwgRklMVEVSX1JFRlNfQlJBTkNIRVMgfCBcCisJCQkJICAgIEZJTFRFUl9SRUZTX1JFTU9URVMgfCBGSUxURVJfUkVGU19PVEhFUlMpCisjZGVmaW5lIEZJTFRFUl9SRUZTX0RFVEFDSEVEX0hFQUQgIDB4MDAyMAorI2RlZmluZSBGSUxURVJfUkVGU19LSU5EX01BU0sgICAgICAoRklMVEVSX1JFRlNfQUxMIHwgRklMVEVSX1JFRlNfREVUQUNIRURfSEVBRCkKKworc3RydWN0IGF0b21fdmFsdWU7CisKK3N0cnVjdCByZWZfc29ydGluZyB7CisJc3RydWN0IHJlZl9zb3J0aW5nICpuZXh0OworCWludCBhdG9tOyAvKiBpbmRleCBpbnRvIHVzZWRfYXRvbSBhcnJheSAoaW50ZXJuYWwpICovCisJdW5zaWduZWQgcmV2ZXJzZSA6IDEsCisJCXZlcnNpb24gOiAxOworfTsKKworc3RydWN0IHJlZl9hcnJheV9pdGVtIHsKKwl1bnNpZ25lZCBjaGFyIG9iamVjdG5hbWVbMjBdOworCWludCBmbGFnOworCXVuc2lnbmVkIGludCBraW5kOworCWNvbnN0IGNoYXIgKnN5bXJlZjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGF0b21fdmFsdWUgKnZhbHVlOworCWNoYXIgcmVmbmFtZVtGTEVYX0FSUkFZXTsKK307CisKK3N0cnVjdCByZWZfYXJyYXkgeworCWludCBuciwgYWxsb2M7CisJc3RydWN0IHJlZl9hcnJheV9pdGVtICoqaXRlbXM7CisJc3RydWN0IHJldl9pbmZvICpyZXZzOworfTsKKworc3RydWN0IHJlZl9maWx0ZXIgeworCWNvbnN0IGNoYXIgKipuYW1lX3BhdHRlcm5zOworCXN0cnVjdCBzaGExX2FycmF5IHBvaW50c19hdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKndpdGhfY29tbWl0OworCisJZW51bSB7CisJCVJFRl9GSUxURVJfTUVSR0VEX05PTkUgPSAwLAorCQlSRUZfRklMVEVSX01FUkdFRF9JTkNMVURFLAorCQlSRUZfRklMVEVSX01FUkdFRF9PTUlUCisJfSBtZXJnZTsKKwlzdHJ1Y3QgY29tbWl0ICptZXJnZV9jb21taXQ7CisKKwl1bnNpZ25lZCBpbnQgd2l0aF9jb21taXRfdGFnX2FsZ28gOiAxLAorCQltYXRjaF9hc19wYXRoIDogMSwKKwkJZGV0YWNoZWQgOiAxOworCXVuc2lnbmVkIGludCBraW5kLAorCQlsaW5lczsKKwlpbnQgYWJicmV2LAorCQl2ZXJib3NlOworfTsKKworc3RydWN0IHJlZl9maWx0ZXJfY2JkYXRhIHsKKwlzdHJ1Y3QgcmVmX2FycmF5ICphcnJheTsKKwlzdHJ1Y3QgcmVmX2ZpbHRlciAqZmlsdGVyOworfTsKKworLyogIE1hY3JvcyBmb3IgY2hlY2tpbmcgLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgKi8KKyNkZWZpbmUgX09QVF9NRVJHRURfTk9fTUVSR0VEKG9wdGlvbiwgZmlsdGVyLCBoKSBcCisJeyBPUFRJT05fQ0FMTEJBQ0ssIDAsIG9wdGlvbiwgKGZpbHRlciksIE5fKCJjb21taXQiKSwgKGgpLCBcCisJICBQQVJTRV9PUFRfTEFTVEFSR19ERUZBVUxUIHwgUEFSU0VfT1BUX05PTkVHLCBcCisJICBwYXJzZV9vcHRfbWVyZ2VfZmlsdGVyLCAoaW50cHRyX3QpICJIRUFEIiBcCisJfQorI2RlZmluZSBPUFRfTUVSR0VEKGYsIGgpIF9PUFRfTUVSR0VEX05PX01FUkdFRCgibWVyZ2VkIiwgZiwgaCkKKyNkZWZpbmUgT1BUX05PX01FUkdFRChmLCBoKSBfT1BUX01FUkdFRF9OT19NRVJHRUQoIm5vLW1lcmdlZCIsIGYsIGgpCisKKy8qCisgKiBBUEkgZm9yIGZpbHRlcmluZyBhIHNldCBvZiByZWZzLiBCYXNlZCBvbiB0aGUgdHlwZSBvZiByZWZzIHRoZSB1c2VyCisgKiBoYXMgcmVxdWVzdGVkLCB3ZSBpdGVyYXRlIHRocm91Z2ggdGhvc2UgcmVmcyBhbmQgYXBwbHkgZmlsdGVycworICogYXMgcGVyIHRoZSBnaXZlbiByZWZfZmlsdGVyIHN0cnVjdHVyZSBhbmQgZmluYWxseSBzdG9yZSB0aGUKKyAqIGZpbHRlcmVkIHJlZnMgaW4gdGhlIHJlZl9hcnJheSBzdHJ1Y3R1cmUuCisgKi8KK2ludCBmaWx0ZXJfcmVmcyhzdHJ1Y3QgcmVmX2FycmF5ICphcnJheSwgc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciwgdW5zaWduZWQgaW50IHR5cGUpOworLyogIENsZWFyIGFsbCBtZW1vcnkgYWxsb2NhdGVkIHRvIHJlZl9hcnJheSAqLwordm9pZCByZWZfYXJyYXlfY2xlYXIoc3RydWN0IHJlZl9hcnJheSAqYXJyYXkpOworLyogIFBhcnNlIGZvcm1hdCBzdHJpbmcgYW5kIHNvcnQgc3BlY2lmaWVycyAqLworaW50IHBhcnNlX3JlZl9maWx0ZXJfYXRvbShjb25zdCBjaGFyICphdG9tLCBjb25zdCBjaGFyICplcCk7CisvKiAgVXNlZCB0byB2ZXJpZnkgaWYgdGhlIGdpdmVuIGZvcm1hdCBpcyBjb3JyZWN0IGFuZCB0byBwYXJzZSBvdXQgdGhlIHVzZWQgYXRvbXMgKi8KK2ludCB2ZXJpZnlfcmVmX2Zvcm1hdChjb25zdCBjaGFyICpmb3JtYXQpOworLyogIFNvcnQgdGhlIGdpdmVuIHJlZl9hcnJheSBhcyBwZXIgdGhlIHJlZl9zb3J0aW5nIHByb3ZpZGVkICovCit2b2lkIHJlZl9hcnJheV9zb3J0KHN0cnVjdCByZWZfc29ydGluZyAqc29ydCwgc3RydWN0IHJlZl9hcnJheSAqYXJyYXkpOworLyogIFByaW50IHRoZSByZWYgdXNpbmcgdGhlIGdpdmVuIGZvcm1hdCBhbmQgcXVvdGVfc3R5bGUgKi8KK3ZvaWQgc2hvd19yZWZfYXJyYXlfaXRlbShzdHJ1Y3QgcmVmX2FycmF5X2l0ZW0gKmluZm8sIGNvbnN0IGNoYXIgKmZvcm1hdCwgaW50IHF1b3RlX3N0eWxlKTsKKy8qICBDYWxsYmFjayBmdW5jdGlvbiBmb3IgcGFyc2luZyB0aGUgc29ydCBvcHRpb24gKi8KK2ludCBwYXJzZV9vcHRfcmVmX3NvcnRpbmcoY29uc3Qgc3RydWN0IG9wdGlvbiAqb3B0LCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCk7CisvKiAgRGVmYXVsdCBzb3J0IG9wdGlvbiBiYXNlZCBvbiByZWZuYW1lICovCitzdHJ1Y3QgcmVmX3NvcnRpbmcgKnJlZl9kZWZhdWx0X3NvcnRpbmcodm9pZCk7CisvKiAgRnVuY3Rpb24gdG8gcGFyc2UgLS1tZXJnZWQgYW5kIC0tbm8tbWVyZ2VkIG9wdGlvbnMgKi8KK2ludCBwYXJzZV9vcHRfbWVyZ2VfZmlsdGVyKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpOworCisjZW5kaWYgLyogIFJFRl9GSUxURVJfSCAgKi8KZGlmZiAtLWdpdCBhL3JlZmxvZy13YWxrLmMgYi9yZWZsb2ctd2Fsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YjhhNTQKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZsb2ctd2Fsay5jCkBAIC0wLDAgKzEsMzMyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJyZWZsb2ctd2Fsay5oIgorCitzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyB7CisJY2hhciAqcmVmOworCWNvbnN0IGNoYXIgKnNob3J0X3JlZjsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8geworCQl1bnNpZ25lZCBjaGFyIG9zaGExWzIwXSwgbnNoYTFbMjBdOworCQljaGFyICplbWFpbDsKKwkJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXA7CisJCWludCB0ejsKKwkJY2hhciAqbWVzc2FnZTsKKwl9ICppdGVtczsKKwlpbnQgbnIsIGFsbG9jOworfTsKKworc3RhdGljIGludCByZWFkX29uZV9yZWZsb2codW5zaWduZWQgY2hhciAqb3NoYTEsIHVuc2lnbmVkIGNoYXIgKm5zaGExLAorCQljb25zdCBjaGFyICplbWFpbCwgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAsIGludCB0eiwKKwkJY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqYXJyYXkgPSBjYl9kYXRhOworCXN0cnVjdCByZWZsb2dfaW5mbyAqaXRlbTsKKworCUFMTE9DX0dST1coYXJyYXktPml0ZW1zLCBhcnJheS0+bnIgKyAxLCBhcnJheS0+YWxsb2MpOworCWl0ZW0gPSBhcnJheS0+aXRlbXMgKyBhcnJheS0+bnI7CisJaGFzaGNweShpdGVtLT5vc2hhMSwgb3NoYTEpOworCWhhc2hjcHkoaXRlbS0+bnNoYTEsIG5zaGExKTsKKwlpdGVtLT5lbWFpbCA9IHhzdHJkdXAoZW1haWwpOworCWl0ZW0tPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwlpdGVtLT50eiA9IHR6OworCWl0ZW0tPm1lc3NhZ2UgPSB4c3RyZHVwKG1lc3NhZ2UpOworCWFycmF5LT5ucisrOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgKnJlYWRfY29tcGxldGVfcmVmbG9nKGNvbnN0IGNoYXIgKnJlZikKK3sKKwlzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqcmVmbG9ncyA9CisJCXhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzKSk7CisJcmVmbG9ncy0+cmVmID0geHN0cmR1cChyZWYpOworCWZvcl9lYWNoX3JlZmxvZ19lbnQocmVmLCByZWFkX29uZV9yZWZsb2csIHJlZmxvZ3MpOworCWlmIChyZWZsb2dzLT5uciA9PSAwKSB7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCWNvbnN0IGNoYXIgKm5hbWU7CisJCXZvaWQgKm5hbWVfdG9fZnJlZTsKKwkJbmFtZSA9IG5hbWVfdG9fZnJlZSA9IHJlc29sdmVfcmVmZHVwKHJlZiwgUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkJCSAgICAgc2hhMSwgTlVMTCk7CisJCWlmIChuYW1lKSB7CisJCQlmb3JfZWFjaF9yZWZsb2dfZW50KG5hbWUsIHJlYWRfb25lX3JlZmxvZywgcmVmbG9ncyk7CisJCQlmcmVlKG5hbWVfdG9fZnJlZSk7CisJCX0KKwl9CisJaWYgKHJlZmxvZ3MtPm5yID09IDApIHsKKwkJY2hhciAqcmVmbmFtZSA9IHhzdHJmbXQoInJlZnMvJXMiLCByZWYpOworCQlmb3JfZWFjaF9yZWZsb2dfZW50KHJlZm5hbWUsIHJlYWRfb25lX3JlZmxvZywgcmVmbG9ncyk7CisJCWlmIChyZWZsb2dzLT5uciA9PSAwKSB7CisJCQlmcmVlKHJlZm5hbWUpOworCQkJcmVmbmFtZSA9IHhzdHJmbXQoInJlZnMvaGVhZHMvJXMiLCByZWYpOworCQkJZm9yX2VhY2hfcmVmbG9nX2VudChyZWZuYW1lLCByZWFkX29uZV9yZWZsb2csIHJlZmxvZ3MpOworCQl9CisJCWZyZWUocmVmbmFtZSk7CisJfQorCXJldHVybiByZWZsb2dzOworfQorCitzdGF0aWMgaW50IGdldF9yZWZsb2dfcmVjbm9fYnlfdGltZShzdHJ1Y3QgY29tcGxldGVfcmVmbG9ncyAqYXJyYXksCisJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXApCit7CisJaW50IGk7CisJZm9yIChpID0gYXJyYXktPm5yIC0gMTsgaSA+PSAwOyBpLS0pCisJCWlmICh0aW1lc3RhbXAgPj0gYXJyYXktPml0ZW1zW2ldLnRpbWVzdGFtcCkKKwkJCXJldHVybiBpOworCXJldHVybiAtMTsKK30KKworc3RydWN0IGNvbW1pdF9pbmZvX2xpZm8geworCXN0cnVjdCBjb21taXRfaW5mbyB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwkJdm9pZCAqdXRpbDsKKwl9ICppdGVtczsKKwlpbnQgbnIsIGFsbG9jOworfTsKKworc3RhdGljIHN0cnVjdCBjb21taXRfaW5mbyAqZ2V0X2NvbW1pdF9pbmZvKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJc3RydWN0IGNvbW1pdF9pbmZvX2xpZm8gKmxpZm8sIGludCBwb3ApCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGxpZm8tPm5yOyBpKyspCisJCWlmIChsaWZvLT5pdGVtc1tpXS5jb21taXQgPT0gY29tbWl0KSB7CisJCQlzdHJ1Y3QgY29tbWl0X2luZm8gKnJlc3VsdCA9ICZsaWZvLT5pdGVtc1tpXTsKKwkJCWlmIChwb3ApIHsKKwkJCQlpZiAoaSArIDEgPCBsaWZvLT5ucikKKwkJCQkJbWVtbW92ZShsaWZvLT5pdGVtcyArIGksCisJCQkJCQlsaWZvLT5pdGVtcyArIGkgKyAxLAorCQkJCQkJKGxpZm8tPm5yIC0gaSkgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCBjb21taXRfaW5mbykpOworCQkJCWxpZm8tPm5yLS07CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9jb21taXRfaW5mbyhzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHZvaWQgKnV0aWwsCisJCXN0cnVjdCBjb21taXRfaW5mb19saWZvICpsaWZvKQoreworCXN0cnVjdCBjb21taXRfaW5mbyAqaW5mbzsKKwlBTExPQ19HUk9XKGxpZm8tPml0ZW1zLCBsaWZvLT5uciArIDEsIGxpZm8tPmFsbG9jKTsKKwlpbmZvID0gbGlmby0+aXRlbXMgKyBsaWZvLT5ucjsKKwlpbmZvLT5jb21taXQgPSBjb21taXQ7CisJaW5mby0+dXRpbCA9IHV0aWw7CisJbGlmby0+bnIrKzsKK30KKworc3RydWN0IGNvbW1pdF9yZWZsb2cgeworCWludCByZWNubzsKKwllbnVtIHNlbGVjdG9yX3R5cGUgeworCQlTRUxFQ1RPUl9OT05FLAorCQlTRUxFQ1RPUl9JTkRFWCwKKwkJU0VMRUNUT1JfREFURQorCX0gc2VsZWN0b3I7CisJc3RydWN0IGNvbXBsZXRlX3JlZmxvZ3MgKnJlZmxvZ3M7Cit9OworCitzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyB7CisJc3RydWN0IGNvbW1pdF9pbmZvX2xpZm8gcmVmbG9nczsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY29tcGxldGVfcmVmbG9nczsKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqbGFzdF9jb21taXRfcmVmbG9nOworfTsKKwordm9pZCBpbml0X3JlZmxvZ193YWxrKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICoqaW5mbykKK3sKKwkqaW5mbyA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvKSk7Cit9CisKK2ludCBhZGRfcmVmbG9nX2Zvcl93YWxrKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLAorCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAgPSAwOworCWludCByZWNubyA9IC0xOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCBjb21wbGV0ZV9yZWZsb2dzICpyZWZsb2dzOworCWNoYXIgKmJyYW5jaCwgKmF0ID0gc3RyY2hyKG5hbWUsICdAJyk7CisJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmNvbW1pdF9yZWZsb2c7CisJZW51bSBzZWxlY3Rvcl90eXBlIHNlbGVjdG9yID0gU0VMRUNUT1JfTk9ORTsKKworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCWRpZSAoIkNhbm5vdCB3YWxrIHJlZmxvZ3MgZm9yICVzIiwgbmFtZSk7CisKKwlicmFuY2ggPSB4c3RyZHVwKG5hbWUpOworCWlmIChhdCAmJiBhdFsxXSA9PSAneycpIHsKKwkJY2hhciAqZXA7CisJCWJyYW5jaFthdCAtIG5hbWVdID0gJ1wwJzsKKwkJcmVjbm8gPSBzdHJ0b3VsKGF0ICsgMiwgJmVwLCAxMCk7CisJCWlmICgqZXAgIT0gJ30nKSB7CisJCQlyZWNubyA9IC0xOworCQkJdGltZXN0YW1wID0gYXBwcm94aWRhdGUoYXQgKyAyKTsKKwkJCXNlbGVjdG9yID0gU0VMRUNUT1JfREFURTsKKwkJfQorCQllbHNlCisJCQlzZWxlY3RvciA9IFNFTEVDVE9SX0lOREVYOworCX0gZWxzZQorCQlyZWNubyA9IDA7CisKKwlpdGVtID0gc3RyaW5nX2xpc3RfbG9va3VwKCZpbmZvLT5jb21wbGV0ZV9yZWZsb2dzLCBicmFuY2gpOworCWlmIChpdGVtKQorCQlyZWZsb2dzID0gaXRlbS0+dXRpbDsKKwllbHNlIHsKKwkJaWYgKCpicmFuY2ggPT0gJ1wwJykgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJCWZyZWUoYnJhbmNoKTsKKwkJCWJyYW5jaCA9IHJlc29sdmVfcmVmZHVwKCJIRUFEIiwgMCwgc2hhMSwgTlVMTCk7CisJCQlpZiAoIWJyYW5jaCkKKwkJCQlkaWUgKCJObyBjdXJyZW50IGJyYW5jaCIpOworCisJCX0KKwkJcmVmbG9ncyA9IHJlYWRfY29tcGxldGVfcmVmbG9nKGJyYW5jaCk7CisJCWlmICghcmVmbG9ncyB8fCByZWZsb2dzLT5uciA9PSAwKSB7CisJCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQkJY2hhciAqYjsKKwkJCWlmIChkd2ltX2xvZyhicmFuY2gsIHN0cmxlbihicmFuY2gpLCBzaGExLCAmYikgPT0gMSkgeworCQkJCWlmIChyZWZsb2dzKSB7CisJCQkJCWZyZWUocmVmbG9ncy0+cmVmKTsKKwkJCQkJZnJlZShyZWZsb2dzKTsKKwkJCQl9CisJCQkJZnJlZShicmFuY2gpOworCQkJCWJyYW5jaCA9IGI7CisJCQkJcmVmbG9ncyA9IHJlYWRfY29tcGxldGVfcmVmbG9nKGJyYW5jaCk7CisJCQl9CisJCX0KKwkJaWYgKCFyZWZsb2dzIHx8IHJlZmxvZ3MtPm5yID09IDApCisJCQlyZXR1cm4gLTE7CisJCXN0cmluZ19saXN0X2luc2VydCgmaW5mby0+Y29tcGxldGVfcmVmbG9ncywgYnJhbmNoKS0+dXRpbAorCQkJPSByZWZsb2dzOworCX0KKworCWNvbW1pdF9yZWZsb2cgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgY29tbWl0X3JlZmxvZykpOworCWlmIChyZWNubyA8IDApIHsKKwkJY29tbWl0X3JlZmxvZy0+cmVjbm8gPSBnZXRfcmVmbG9nX3JlY25vX2J5X3RpbWUocmVmbG9ncywgdGltZXN0YW1wKTsKKwkJaWYgKGNvbW1pdF9yZWZsb2ctPnJlY25vIDwgMCkgeworCQkJZnJlZShicmFuY2gpOworCQkJZnJlZShjb21taXRfcmVmbG9nKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZQorCQljb21taXRfcmVmbG9nLT5yZWNubyA9IHJlZmxvZ3MtPm5yIC0gcmVjbm8gLSAxOworCWNvbW1pdF9yZWZsb2ctPnNlbGVjdG9yID0gc2VsZWN0b3I7CisJY29tbWl0X3JlZmxvZy0+cmVmbG9ncyA9IHJlZmxvZ3M7CisKKwlhZGRfY29tbWl0X2luZm8oY29tbWl0LCBjb21taXRfcmVmbG9nLCAmaW5mby0+cmVmbG9ncyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZmFrZV9yZWZsb2dfcGFyZW50KHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9pbmZvICpjb21taXRfaW5mbyA9CisJCWdldF9jb21taXRfaW5mbyhjb21taXQsICZpbmZvLT5yZWZsb2dzLCAwKTsKKwlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZzsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8gKnJlZmxvZzsKKworCWluZm8tPmxhc3RfY29tbWl0X3JlZmxvZyA9IE5VTEw7CisJaWYgKCFjb21taXRfaW5mbykKKwkJcmV0dXJuOworCisJY29tbWl0X3JlZmxvZyA9IGNvbW1pdF9pbmZvLT51dGlsOworCWlmIChjb21taXRfcmVmbG9nLT5yZWNubyA8IDApIHsKKwkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCXJlZmxvZyA9ICZjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5pdGVtc1tjb21taXRfcmVmbG9nLT5yZWNub107CisJaW5mby0+bGFzdF9jb21taXRfcmVmbG9nID0gY29tbWl0X3JlZmxvZzsKKwljb21taXRfcmVmbG9nLT5yZWNuby0tOworCWNvbW1pdF9pbmZvLT5jb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKXBhcnNlX29iamVjdChyZWZsb2ctPm9zaGExKTsKKwlpZiAoIWNvbW1pdF9pbmZvLT5jb21taXQpIHsKKwkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCWNvbW1pdC0+cGFyZW50cyA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb21taXRfbGlzdCkpOworCWNvbW1pdC0+cGFyZW50cy0+aXRlbSA9IGNvbW1pdF9pbmZvLT5jb21taXQ7Cit9CisKK3ZvaWQgZ2V0X3JlZmxvZ19zZWxlY3RvcihzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSBzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8sCisJCQkgY29uc3Qgc3RydWN0IGRhdGVfbW9kZSAqZG1vZGUsIGludCBmb3JjZV9kYXRlLAorCQkJIGludCBzaG9ydGVuKQoreworCXN0cnVjdCBjb21taXRfcmVmbG9nICpjb21taXRfcmVmbG9nID0gcmVmbG9nX2luZm8tPmxhc3RfY29tbWl0X3JlZmxvZzsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8gKmluZm87CisJY29uc3QgY2hhciAqcHJpbnRlZF9yZWY7CisKKwlpZiAoIWNvbW1pdF9yZWZsb2cpCisJCXJldHVybjsKKworCWlmIChzaG9ydGVuKSB7CisJCWlmICghY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+c2hvcnRfcmVmKQorCQkJY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+c2hvcnRfcmVmCisJCQkJPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5yZWYsIDApOworCQlwcmludGVkX3JlZiA9IGNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPnNob3J0X3JlZjsKKwl9IGVsc2UgeworCQlwcmludGVkX3JlZiA9IGNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPnJlZjsKKwl9CisKKwlzdHJidWZfYWRkZihzYiwgIiVzQHsiLCBwcmludGVkX3JlZik7CisJaWYgKGNvbW1pdF9yZWZsb2ctPnNlbGVjdG9yID09IFNFTEVDVE9SX0RBVEUgfHwKKwkgICAgKGNvbW1pdF9yZWZsb2ctPnNlbGVjdG9yID09IFNFTEVDVE9SX05PTkUgJiYgZm9yY2VfZGF0ZSkpIHsKKwkJaW5mbyA9ICZjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5pdGVtc1tjb21taXRfcmVmbG9nLT5yZWNubysxXTsKKwkJc3RyYnVmX2FkZHN0cihzYiwgc2hvd19kYXRlKGluZm8tPnRpbWVzdGFtcCwgaW5mby0+dHosIGRtb2RlKSk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGYoc2IsICIlZCIsIGNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPm5yCisJCQkgICAgLSAyIC0gY29tbWl0X3JlZmxvZy0+cmVjbm8pOworCX0KKworCXN0cmJ1Zl9hZGRjaChzYiwgJ30nKTsKK30KKwordm9pZCBnZXRfcmVmbG9nX21lc3NhZ2Uoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8pCit7CisJc3RydWN0IGNvbW1pdF9yZWZsb2cgKmNvbW1pdF9yZWZsb2cgPSByZWZsb2dfaW5mby0+bGFzdF9jb21taXRfcmVmbG9nOworCXN0cnVjdCByZWZsb2dfaW5mbyAqaW5mbzsKKwlzaXplX3QgbGVuOworCisJaWYgKCFjb21taXRfcmVmbG9nKQorCQlyZXR1cm47CisKKwlpbmZvID0gJmNvbW1pdF9yZWZsb2ctPnJlZmxvZ3MtPml0ZW1zW2NvbW1pdF9yZWZsb2ctPnJlY25vKzFdOworCWxlbiA9IHN0cmxlbihpbmZvLT5tZXNzYWdlKTsKKwlpZiAobGVuID4gMCkKKwkJbGVuLS07IC8qIHN0cmlwIGF3YXkgdHJhaWxpbmcgbmV3bGluZSAqLworCXN0cmJ1Zl9hZGQoc2IsIGluZm8tPm1lc3NhZ2UsIGxlbik7Cit9CisKK2NvbnN0IGNoYXIgKmdldF9yZWZsb2dfaWRlbnQoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvKQoreworCXN0cnVjdCBjb21taXRfcmVmbG9nICpjb21taXRfcmVmbG9nID0gcmVmbG9nX2luZm8tPmxhc3RfY29tbWl0X3JlZmxvZzsKKwlzdHJ1Y3QgcmVmbG9nX2luZm8gKmluZm87CisKKwlpZiAoIWNvbW1pdF9yZWZsb2cpCisJCXJldHVybiBOVUxMOworCisJaW5mbyA9ICZjb21taXRfcmVmbG9nLT5yZWZsb2dzLT5pdGVtc1tjb21taXRfcmVmbG9nLT5yZWNubysxXTsKKwlyZXR1cm4gaW5mby0+ZW1haWw7Cit9CisKK3ZvaWQgc2hvd19yZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8sIGludCBvbmVsaW5lLAorCQkJIGNvbnN0IHN0cnVjdCBkYXRlX21vZGUgKmRtb2RlLCBpbnQgZm9yY2VfZGF0ZSkKK3sKKwlpZiAocmVmbG9nX2luZm8gJiYgcmVmbG9nX2luZm8tPmxhc3RfY29tbWl0X3JlZmxvZykgeworCQlzdHJ1Y3QgY29tbWl0X3JlZmxvZyAqY29tbWl0X3JlZmxvZyA9IHJlZmxvZ19pbmZvLT5sYXN0X2NvbW1pdF9yZWZsb2c7CisJCXN0cnVjdCByZWZsb2dfaW5mbyAqaW5mbzsKKwkJc3RydWN0IHN0cmJ1ZiBzZWxlY3RvciA9IFNUUkJVRl9JTklUOworCisJCWluZm8gPSAmY29tbWl0X3JlZmxvZy0+cmVmbG9ncy0+aXRlbXNbY29tbWl0X3JlZmxvZy0+cmVjbm8rMV07CisJCWdldF9yZWZsb2dfc2VsZWN0b3IoJnNlbGVjdG9yLCByZWZsb2dfaW5mbywgZG1vZGUsIGZvcmNlX2RhdGUsIDApOworCQlpZiAob25lbGluZSkgeworCQkJcHJpbnRmKCIlczogJXMiLCBzZWxlY3Rvci5idWYsIGluZm8tPm1lc3NhZ2UpOworCQl9CisJCWVsc2UgeworCQkJcHJpbnRmKCJSZWZsb2c6ICVzICglcylcblJlZmxvZyBtZXNzYWdlOiAlcyIsCisJCQkgICAgICAgc2VsZWN0b3IuYnVmLCBpbmZvLT5lbWFpbCwgaW5mby0+bWVzc2FnZSk7CisJCX0KKworCQlzdHJidWZfcmVsZWFzZSgmc2VsZWN0b3IpOworCX0KK30KZGlmZiAtLWdpdCBhL3JlZmxvZy13YWxrLmggYi9yZWZsb2ctd2Fsay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ODg2ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZsb2ctd2Fsay5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgUkVGTE9HX1dBTEtfSAorI2RlZmluZSBSRUZMT0dfV0FMS19ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbzsKKworZXh0ZXJuIHZvaWQgaW5pdF9yZWZsb2dfd2FsayhzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqKmluZm8pOworZXh0ZXJuIGludCBhZGRfcmVmbG9nX2Zvcl93YWxrKHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLAorCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQsIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgZmFrZV9yZWZsb2dfcGFyZW50KHN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICppbmZvLAorCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworZXh0ZXJuIHZvaWQgc2hvd19yZWZsb2dfbWVzc2FnZShzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqaW5mbywgaW50LAorCQkJCWNvbnN0IHN0cnVjdCBkYXRlX21vZGUgKiwgaW50IGZvcmNlX2RhdGUpOworZXh0ZXJuIHZvaWQgZ2V0X3JlZmxvZ19tZXNzYWdlKHN0cnVjdCBzdHJidWYgKnNiLAorCQlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm8pOworZXh0ZXJuIGNvbnN0IGNoYXIgKmdldF9yZWZsb2dfaWRlbnQoc3RydWN0IHJlZmxvZ193YWxrX2luZm8gKnJlZmxvZ19pbmZvKTsKK2V4dGVybiB2b2lkIGdldF9yZWZsb2dfc2VsZWN0b3Ioc3RydWN0IHN0cmJ1ZiAqc2IsCisJCXN0cnVjdCByZWZsb2dfd2Fsa19pbmZvICpyZWZsb2dfaW5mbywKKwkJY29uc3Qgc3RydWN0IGRhdGVfbW9kZSAqZG1vZGUsIGludCBmb3JjZV9kYXRlLAorCQlpbnQgc2hvcnRlbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVmcy5jIGIvcmVmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMmVmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9yZWZzLmMKQEAgLTAsMCArMSw0NzAyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCitzdHJ1Y3QgcmVmX2xvY2sgeworCWNoYXIgKnJlZl9uYW1lOworCWNoYXIgKm9yaWdfcmVmX25hbWU7CisJc3RydWN0IGxvY2tfZmlsZSAqbGs7CisJc3RydWN0IG9iamVjdF9pZCBvbGRfb2lkOworfTsKKworLyoKKyAqIEhvdyB0byBoYW5kbGUgdmFyaW91cyBjaGFyYWN0ZXJzIGluIHJlZm5hbWVzOgorICogMDogQW4gYWNjZXB0YWJsZSBjaGFyYWN0ZXIgZm9yIHJlZnMKKyAqIDE6IEVuZC1vZi1jb21wb25lbnQKKyAqIDI6IC4sIGxvb2sgZm9yIGEgcHJlY2VkaW5nIC4gdG8gcmVqZWN0IC4uIGluIHJlZnMKKyAqIDM6IHssIGxvb2sgZm9yIGEgcHJlY2VkaW5nIEAgdG8gcmVqZWN0IEB7IGluIHJlZnMKKyAqIDQ6IEEgYmFkIGNoYXJhY3RlcjogQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzLCBhbmQKKyAqICAgICI6IiwgIj8iLCAiWyIsICJcIiwgIl4iLCAifiIsIFNQLCBvciBUQUIKKyAqIDU6ICosIHJlamVjdCB1bmxlc3MgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gaXMgc2V0CisgKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIHJlZm5hbWVfZGlzcG9zaXRpb25bMjU2XSA9IHsKKwkxLCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LAorCTQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCisJNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgMCwgMCwgMCwgMiwgMSwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0LCAwLCAwLCAwLCAwLCA0LAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNCwgNCwgMCwgNCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDQsIDQKK307CisKKy8qCisgKiBGbGFnIHBhc3NlZCB0byBsb2NrX3JlZl9zaGExX2Jhc2ljKCkgdGVsbGluZyBpdCB0byB0b2xlcmF0ZSBicm9rZW4KKyAqIHJlZnMgKGkuZS4sIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBpcyBhYm91dCB0byBiZSBkZWxldGVkIGFueXdheSkuCisgKi8KKyNkZWZpbmUgUkVGX0RFTEVUSU5HCTB4MDIKKworLyoKKyAqIFVzZWQgYXMgYSBmbGFnIGluIHJlZl91cGRhdGU6OmZsYWdzIHdoZW4gYSBsb29zZSByZWYgaXMgYmVpbmcKKyAqIHBydW5lZC4KKyAqLworI2RlZmluZSBSRUZfSVNQUlVOSU5HCTB4MDQKKworLyoKKyAqIFVzZWQgYXMgYSBmbGFnIGluIHJlZl91cGRhdGU6OmZsYWdzIHdoZW4gdGhlIHJlZmVyZW5jZSBzaG91bGQgYmUKKyAqIHVwZGF0ZWQgdG8gbmV3X3NoYTEuCisgKi8KKyNkZWZpbmUgUkVGX0hBVkVfTkVXCTB4MDgKKworLyoKKyAqIFVzZWQgYXMgYSBmbGFnIGluIHJlZl91cGRhdGU6OmZsYWdzIHdoZW4gb2xkX3NoYTEgc2hvdWxkIGJlCisgKiBjaGVja2VkLgorICovCisjZGVmaW5lIFJFRl9IQVZFX09MRAkweDEwCisKKy8qCisgKiBVc2VkIGFzIGEgZmxhZyBpbiByZWZfdXBkYXRlOjpmbGFncyB3aGVuIHRoZSBsb2NrZmlsZSBuZWVkcyB0byBiZQorICogY29tbWl0dGVkLgorICovCisjZGVmaW5lIFJFRl9ORUVEU19DT01NSVQgMHgyMAorCisvKgorICogMHg0MCBpcyBSRUZfRk9SQ0VfQ1JFQVRFX1JFRkxPRywgc28gc2tpcCBpdCBpZiB5b3UncmUgYWRkaW5nIGEKKyAqIHZhbHVlIHRvIHJlZl91cGRhdGU6OmZsYWdzCisgKi8KKworLyoKKyAqIFRyeSB0byByZWFkIG9uZSByZWZuYW1lIGNvbXBvbmVudCBmcm9tIHRoZSBmcm9udCBvZiByZWZuYW1lLgorICogUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBvbmVudCBmb3VuZCwgb3IgLTEgaWYgdGhlIGNvbXBvbmVudCBpcworICogbm90IGxlZ2FsLiAgSXQgaXMgbGVnYWwgaWYgaXQgaXMgc29tZXRoaW5nIHJlYXNvbmFibGUgdG8gaGF2ZSB1bmRlcgorICogIi5naXQvcmVmcy8iOyBXZSBkbyBub3QgbGlrZSBpdCBpZjoKKyAqCisgKiAtIGFueSBwYXRoIGNvbXBvbmVudCBvZiBpdCBiZWdpbnMgd2l0aCAiLiIsIG9yCisgKiAtIGl0IGhhcyBkb3VibGUgZG90cyAiLi4iLCBvcgorICogLSBpdCBoYXMgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzLCBvcgorICogLSBpdCBoYXMgIjoiLCAiPyIsICJbIiwgIlwiLCAiXiIsICJ+IiwgU1AsIG9yIFRBQiBhbnl3aGVyZSwgb3IKKyAqIC0gaXQgaGFzICIqIiBhbnl3aGVyZSB1bmxlc3MgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gaXMgc2V0LCBvcgorICogLSBpdCBlbmRzIHdpdGggYSAiLyIsIG9yCisgKiAtIGl0IGVuZHMgd2l0aCAiLmxvY2siLCBvcgorICogLSBpdCBjb250YWlucyBhICJAeyIgcG9ydGlvbgorICovCitzdGF0aWMgaW50IGNoZWNrX3JlZm5hbWVfY29tcG9uZW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCAqZmxhZ3MpCit7CisJY29uc3QgY2hhciAqY3A7CisJY2hhciBsYXN0ID0gJ1wwJzsKKworCWZvciAoY3AgPSByZWZuYW1lOyA7IGNwKyspIHsKKwkJaW50IGNoID0gKmNwICYgMjU1OworCQl1bnNpZ25lZCBjaGFyIGRpc3AgPSByZWZuYW1lX2Rpc3Bvc2l0aW9uW2NoXTsKKwkJc3dpdGNoIChkaXNwKSB7CisJCWNhc2UgMToKKwkJCWdvdG8gb3V0OworCQljYXNlIDI6CisJCQlpZiAobGFzdCA9PSAnLicpCisJCQkJcmV0dXJuIC0xOyAvKiBSZWZuYW1lIGNvbnRhaW5zICIuLiIuICovCisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJaWYgKGxhc3QgPT0gJ0AnKQorCQkJCXJldHVybiAtMTsgLyogUmVmbmFtZSBjb250YWlucyAiQHsiLiAqLworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXJldHVybiAtMTsKKwkJY2FzZSA1OgorCQkJaWYgKCEoKmZsYWdzICYgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4pKQorCQkJCXJldHVybiAtMTsgLyogcmVmc3BlYyBjYW4ndCBiZSBhIHBhdHRlcm4gKi8KKworCQkJLyoKKwkJCSAqIFVuc2V0IHRoZSBwYXR0ZXJuIGZsYWcgc28gdGhhdCB3ZSBvbmx5IGFjY2VwdAorCQkJICogYSBzaW5nbGUgYXN0ZXJpc2sgZm9yIG9uZSBzaWRlIG9mIHJlZnNwZWMuCisJCQkgKi8KKwkJCSpmbGFncyAmPSB+IFJFRk5BTUVfUkVGU1BFQ19QQVRURVJOOworCQkJYnJlYWs7CisJCX0KKwkJbGFzdCA9IGNoOworCX0KK291dDoKKwlpZiAoY3AgPT0gcmVmbmFtZSkKKwkJcmV0dXJuIDA7IC8qIENvbXBvbmVudCBoYXMgemVybyBsZW5ndGguICovCisJaWYgKHJlZm5hbWVbMF0gPT0gJy4nKQorCQlyZXR1cm4gLTE7IC8qIENvbXBvbmVudCBzdGFydHMgd2l0aCAnLicuICovCisJaWYgKGNwIC0gcmVmbmFtZSA+PSBMT0NLX1NVRkZJWF9MRU4gJiYKKwkgICAgIW1lbWNtcChjcCAtIExPQ0tfU1VGRklYX0xFTiwgTE9DS19TVUZGSVgsIExPQ0tfU1VGRklYX0xFTikpCisJCXJldHVybiAtMTsgLyogUmVmbmFtZSBlbmRzIHdpdGggIi5sb2NrIi4gKi8KKwlyZXR1cm4gY3AgLSByZWZuYW1lOworfQorCitpbnQgY2hlY2tfcmVmbmFtZV9mb3JtYXQoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IGZsYWdzKQoreworCWludCBjb21wb25lbnRfbGVuLCBjb21wb25lbnRfY291bnQgPSAwOworCisJaWYgKCFzdHJjbXAocmVmbmFtZSwgIkAiKSkKKwkJLyogUmVmbmFtZSBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIgJ0AnLiAqLworCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoMSkgeworCQkvKiBXZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIGEgcGF0aCBjb21wb25lbnQuICovCisJCWNvbXBvbmVudF9sZW4gPSBjaGVja19yZWZuYW1lX2NvbXBvbmVudChyZWZuYW1lLCAmZmxhZ3MpOworCQlpZiAoY29tcG9uZW50X2xlbiA8PSAwKQorCQkJcmV0dXJuIC0xOworCisJCWNvbXBvbmVudF9jb3VudCsrOworCQlpZiAocmVmbmFtZVtjb21wb25lbnRfbGVuXSA9PSAnXDAnKQorCQkJYnJlYWs7CisJCS8qIFNraXAgdG8gbmV4dCBjb21wb25lbnQuICovCisJCXJlZm5hbWUgKz0gY29tcG9uZW50X2xlbiArIDE7CisJfQorCisJaWYgKHJlZm5hbWVbY29tcG9uZW50X2xlbiAtIDFdID09ICcuJykKKwkJcmV0dXJuIC0xOyAvKiBSZWZuYW1lIGVuZHMgd2l0aCAnLicuICovCisJaWYgKCEoZmxhZ3MgJiBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSAmJiBjb21wb25lbnRfY291bnQgPCAyKQorCQlyZXR1cm4gLTE7IC8qIFJlZm5hbWUgaGFzIG9ubHkgb25lIGNvbXBvbmVudC4gKi8KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlZl9lbnRyeTsKKworLyoKKyAqIEluZm9ybWF0aW9uIHVzZWQgKGFsb25nIHdpdGggdGhlIGluZm9ybWF0aW9uIGluIHJlZl9lbnRyeSkgdG8KKyAqIGRlc2NyaWJlIGEgc2luZ2xlIGNhY2hlZCByZWZlcmVuY2UuICBUaGlzIGRhdGEgc3RydWN0dXJlIG9ubHkKKyAqIG9jY3VycyBlbWJlZGRlZCBpbiBhIHVuaW9uIGluIHN0cnVjdCByZWZfZW50cnksIGFuZCBvbmx5IHdoZW4KKyAqIChyZWZfZW50cnktPmZsYWcgJiBSRUZfRElSKSBpcyB6ZXJvLgorICovCitzdHJ1Y3QgcmVmX3ZhbHVlIHsKKwkvKgorCSAqIFRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdG8gd2hpY2ggdGhpcyByZWZlcmVuY2UgcmVzb2x2ZXMKKwkgKiAod2hpY2ggbWF5IGJlIGEgdGFnIG9iamVjdCkuICBJZiBSRUZfSVNCUk9LRU4sIHRoaXMgaXMKKwkgKiBudWxsLiAgSWYgUkVGX0lTU1lNUkVGLCB0aGVuIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIG9iamVjdAorCSAqIHJlZmVycmVkIHRvIGJ5IHRoZSBsYXN0IHJlZmVyZW5jZSBpbiB0aGUgc3ltbGluayBjaGFpbi4KKwkgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIG9pZDsKKworCS8qCisJICogSWYgUkVGX0tOT1dTX1BFRUxFRCwgdGhlbiB0aGlzIGZpZWxkIGhvbGRzIHRoZSBwZWVsZWQgdmFsdWUKKwkgKiBvZiB0aGlzIHJlZmVyZW5jZSwgb3IgbnVsbCBpZiB0aGUgcmVmZXJlbmNlIGlzIGtub3duIG5vdCB0bworCSAqIGJlIHBlZWxhYmxlLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciBwZWVsX3JlZigpIGZvciBhbgorCSAqIGV4YWN0IGRlZmluaXRpb24gb2YgInBlZWxhYmxlIi4KKwkgKi8KKwlzdHJ1Y3Qgb2JqZWN0X2lkIHBlZWxlZDsKK307CisKK3N0cnVjdCByZWZfY2FjaGU7CisKKy8qCisgKiBJbmZvcm1hdGlvbiB1c2VkIChhbG9uZyB3aXRoIHRoZSBpbmZvcm1hdGlvbiBpbiByZWZfZW50cnkpIHRvCisgKiBkZXNjcmliZSBhIGxldmVsIGluIHRoZSBoaWVyYXJjaHkgb2YgcmVmZXJlbmNlcy4gIFRoaXMgZGF0YQorICogc3RydWN0dXJlIG9ubHkgb2NjdXJzIGVtYmVkZGVkIGluIGEgdW5pb24gaW4gc3RydWN0IHJlZl9lbnRyeSwgYW5kCisgKiBvbmx5IHdoZW4gKHJlZl9lbnRyeS5mbGFnICYgUkVGX0RJUikgaXMgc2V0LiAgSW4gdGhhdCBjYXNlLAorICogKHJlZl9lbnRyeS5mbGFnICYgUkVGX0lOQ09NUExFVEUpIGRldGVybWluZXMgd2hldGhlciB0aGUgcmVmZXJlbmNlcworICogaW4gdGhlIGRpcmVjdG9yeSBoYXZlIGFscmVhZHkgYmVlbiByZWFkOgorICoKKyAqICAgICAocmVmX2VudHJ5LmZsYWcgJiBSRUZfSU5DT01QTEVURSkgdW5zZXQgLS0gYSBkaXJlY3Rvcnkgb2YgbG9vc2UKKyAqICAgICAgICAgb3IgcGFja2VkIHJlZmVyZW5jZXMsIGFscmVhZHkgcmVhZC4KKyAqCisgKiAgICAgKHJlZl9lbnRyeS5mbGFnICYgUkVGX0lOQ09NUExFVEUpIHNldCAtLSBhIGRpcmVjdG9yeSBvZiBsb29zZQorICogICAgICAgICByZWZlcmVuY2VzIHRoYXQgaGFzbid0IGJlZW4gcmVhZCB5ZXQgKG5vciBoYXMgYW55IG9mIGl0cworICogICAgICAgICBzdWJkaXJlY3RvcmllcykuCisgKgorICogRW50cmllcyB3aXRoaW4gYSBkaXJlY3RvcnkgYXJlIHN0b3JlZCB3aXRoaW4gYSBncm93YWJsZSBhcnJheSBvZgorICogcG9pbnRlcnMgdG8gcmVmX2VudHJpZXMgKGVudHJpZXMsIG5yLCBhbGxvYykuICBFbnRyaWVzIDAgPD0gaSA8CisgKiBzb3J0ZWQgYXJlIHNvcnRlZCBieSB0aGVpciBjb21wb25lbnQgbmFtZSBpbiBzdHJjbXAoKSBvcmRlciBhbmQgdGhlCisgKiByZW1haW5pbmcgZW50cmllcyBhcmUgdW5zb3J0ZWQuCisgKgorICogTG9vc2UgcmVmZXJlbmNlcyBhcmUgcmVhZCBsYXppbHksIG9uZSBkaXJlY3RvcnkgYXQgYSB0aW1lLiAgV2hlbiBhCisgKiBkaXJlY3Rvcnkgb2YgbG9vc2UgcmVmZXJlbmNlcyBpcyByZWFkLCB0aGVuIGFsbCBvZiB0aGUgcmVmZXJlbmNlcworICogaW4gdGhhdCBkaXJlY3RvcnkgYXJlIHN0b3JlZCwgYW5kIFJFRl9JTkNPTVBMRVRFIHN0dWJzIGFyZSBjcmVhdGVkCisgKiBmb3IgYW55IHN1YmRpcmVjdG9yaWVzLCBidXQgdGhlIHN1YmRpcmVjdG9yaWVzIHRoZW1zZWx2ZXMgYXJlIG5vdAorICogcmVhZC4gIFRoZSByZWFkaW5nIGlzIHRyaWdnZXJlZCBieSBnZXRfcmVmX2RpcigpLgorICovCitzdHJ1Y3QgcmVmX2RpciB7CisJaW50IG5yLCBhbGxvYzsKKworCS8qCisJICogRW50cmllcyB3aXRoIGluZGV4IDAgPD0gaSA8IHNvcnRlZCBhcmUgc29ydGVkIGJ5IG5hbWUuICBOZXcKKwkgKiBlbnRyaWVzIGFyZSBhcHBlbmRlZCB0byB0aGUgbGlzdCB1bnNvcnRlZCwgYW5kIGFyZSBzb3J0ZWQKKwkgKiBvbmx5IHdoZW4gcmVxdWlyZWQ7IHRodXMgd2UgYXZvaWQgdGhlIG5lZWQgdG8gc29ydCB0aGUgbGlzdAorCSAqIGFmdGVyIHRoZSBhZGRpdGlvbiBvZiBldmVyeSByZWZlcmVuY2UuCisJICovCisJaW50IHNvcnRlZDsKKworCS8qIEEgcG9pbnRlciB0byB0aGUgcmVmX2NhY2hlIHRoYXQgY29udGFpbnMgdGhpcyByZWZfZGlyLiAqLworCXN0cnVjdCByZWZfY2FjaGUgKnJlZl9jYWNoZTsKKworCXN0cnVjdCByZWZfZW50cnkgKiplbnRyaWVzOworfTsKKworLyoKKyAqIEJpdCB2YWx1ZXMgZm9yIHJlZl9lbnRyeTo6ZmxhZy4gIFJFRl9JU1NZTVJFRj0weDAxLAorICogUkVGX0lTUEFDS0VEPTB4MDIsIFJFRl9JU0JST0tFTj0weDA0IGFuZCBSRUZfQkFEX05BTUU9MHgwOCBhcmUKKyAqIHB1YmxpYyB2YWx1ZXM7IHNlZSByZWZzLmguCisgKi8KKworLyoKKyAqIFRoZSBmaWVsZCByZWZfZW50cnktPnUudmFsdWUucGVlbGVkIG9mIHRoaXMgdmFsdWUgZW50cnkgY29udGFpbnMKKyAqIHRoZSBjb3JyZWN0IHBlZWxlZCB2YWx1ZSBmb3IgdGhlIHJlZmVyZW5jZSwgd2hpY2ggbWlnaHQgYmUKKyAqIG51bGxfc2hhMSBpZiB0aGUgcmVmZXJlbmNlIGlzIG5vdCBhIHRhZyBvciBpZiBpdCBpcyBicm9rZW4uCisgKi8KKyNkZWZpbmUgUkVGX0tOT1dTX1BFRUxFRCAweDEwCisKKy8qIHJlZl9lbnRyeSByZXByZXNlbnRzIGEgZGlyZWN0b3J5IG9mIHJlZmVyZW5jZXMgKi8KKyNkZWZpbmUgUkVGX0RJUiAweDIwCisKKy8qCisgKiBFbnRyeSBoYXMgbm90IHlldCBiZWVuIHJlYWQgZnJvbSBkaXNrICh1c2VkIG9ubHkgZm9yIFJFRl9ESVIKKyAqIGVudHJpZXMgcmVwcmVzZW50aW5nIGxvb3NlIHJlZmVyZW5jZXMpCisgKi8KKyNkZWZpbmUgUkVGX0lOQ09NUExFVEUgMHg0MAorCisvKgorICogQSByZWZfZW50cnkgcmVwcmVzZW50cyBlaXRoZXIgYSByZWZlcmVuY2Ugb3IgYSAic3ViZGlyZWN0b3J5IiBvZgorICogcmVmZXJlbmNlcy4KKyAqCisgKiBFYWNoIGRpcmVjdG9yeSBpbiB0aGUgcmVmZXJlbmNlIG5hbWVzcGFjZSBpcyByZXByZXNlbnRlZCBieSBhCisgKiByZWZfZW50cnkgd2l0aCAoZmxhZ3MgJiBSRUZfRElSKSBzZXQgYW5kIGNvbnRhaW5pbmcgYSBzdWJkaXIgbWVtYmVyCisgKiB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzIGluIHRoYXQgZGlyZWN0b3J5IHRoYXQgaGF2ZSBiZWVuIHJlYWQgc28KKyAqIGZhci4gIElmIChmbGFncyAmIFJFRl9JTkNPTVBMRVRFKSBpcyBzZXQsIHRoZW4gdGhlIGRpcmVjdG9yeSBhbmQKKyAqIGl0cyBzdWJkaXJlY3RvcmllcyBoYXZlbid0IGJlZW4gcmVhZCB5ZXQuICBSRUZfSU5DT01QTEVURSBpcyBvbmx5CisgKiB1c2VkIGZvciBsb29zZSByZWZlcmVuY2UgZGlyZWN0b3JpZXMuCisgKgorICogUmVmZXJlbmNlcyBhcmUgcmVwcmVzZW50ZWQgYnkgYSByZWZfZW50cnkgd2l0aCAoZmxhZ3MgJiBSRUZfRElSKQorICogdW5zZXQgYW5kIGEgdmFsdWUgbWVtYmVyIHRoYXQgZGVzY3JpYmVzIHRoZSByZWZlcmVuY2UncyB2YWx1ZS4gIFRoZQorICogZmxhZyBtZW1iZXIgaXMgYXQgdGhlIHJlZl9lbnRyeSBsZXZlbCwgYnV0IGl0IGlzIGFsc28gbmVlZGVkIHRvCisgKiBpbnRlcnByZXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB2YWx1ZSBmaWVsZCAoaW4gb3RoZXIgd29yZHMsIGEKKyAqIHJlZl92YWx1ZSBvYmplY3QgaXMgbm90IHZlcnkgbXVjaCB1c2Ugd2l0aG91dCB0aGUgZW5jbG9zaW5nCisgKiByZWZfZW50cnkpLgorICoKKyAqIFJlZmVyZW5jZSBuYW1lcyBjYW5ub3QgZW5kIHdpdGggc2xhc2ggYW5kIGRpcmVjdG9yaWVzJyBuYW1lcyBhcmUKKyAqIGFsd2F5cyBzdG9yZWQgd2l0aCBhIHRyYWlsaW5nIHNsYXNoIChleGNlcHQgZm9yIHRoZSB0b3AtbGV2ZWwKKyAqIGRpcmVjdG9yeSwgd2hpY2ggaXMgYWx3YXlzIGRlbm90ZWQgYnkgIiIpLiAgVGhpcyBoYXMgdHdvIG5pY2UKKyAqIGNvbnNlcXVlbmNlczogKDEpIHdoZW4gdGhlIGVudHJpZXMgaW4gZWFjaCBzdWJkaXIgYXJlIHNvcnRlZAorICogbGV4aWNvZ3JhcGhpY2FsbHkgYnkgbmFtZSAoYXMgdGhleSB1c3VhbGx5IGFyZSksIHRoZSByZWZlcmVuY2VzIGluCisgKiBhIHdob2xlIHRyZWUgY2FuIGJlIGdlbmVyYXRlZCBpbiBsZXhpY29ncmFwaGljIG9yZGVyIGJ5IHRyYXZlcnNpbmcKKyAqIHRoZSB0cmVlIGluIGxlZnQtdG8tcmlnaHQsIGRlcHRoLWZpcnN0IG9yZGVyOyAoMikgdGhlIG5hbWVzIG9mCisgKiByZWZlcmVuY2VzIGFuZCBzdWJkaXJlY3RvcmllcyBjYW5ub3QgY29uZmxpY3QsIGFuZCB0aGVyZWZvcmUgdGhlCisgKiBwcmVzZW5jZSBvZiBhbiBlbXB0eSBzdWJkaXJlY3RvcnkgZG9lcyBub3QgYmxvY2sgdGhlIGNyZWF0aW9uIG9mIGEKKyAqIHNpbWlsYXJseS1uYW1lZCByZWZlcmVuY2UuICAoVGhlIGZhY3QgdGhhdCByZWZlcmVuY2UgbmFtZXMgd2l0aCB0aGUKKyAqIHNhbWUgbGVhZGluZyBjb21wb25lbnRzIGNhbiBjb25mbGljdCAqd2l0aCBlYWNoIG90aGVyKiBpcyBhCisgKiBzZXBhcmF0ZSBpc3N1ZSB0aGF0IGlzIHJlZ3VsYXRlZCBieSB2ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUoKS4pCisgKgorICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgbmFtZSBmaWVsZCBjb250YWlucyB0aGUgZnVsbHktcXVhbGlmaWVkCisgKiByZWZlcmVuY2UgKG9yIHN1YmRpcmVjdG9yeSkgbmFtZS4gIFNwYWNlIGNvdWxkIGJlIHNhdmVkIGJ5IG9ubHkKKyAqIHN0b3JpbmcgdGhlIHJlbGF0aXZlIG5hbWVzLiAgQnV0IHRoYXQgd291bGQgcmVxdWlyZSB0aGUgZnVsbCBuYW1lcworICogdG8gYmUgZ2VuZXJhdGVkIG9uIHRoZSBmbHkgd2hlbiBpdGVyYXRpbmcgaW4gZG9fZm9yX2VhY2hfcmVmKCksIGFuZAorICogd291bGQgYnJlYWsgY2FsbGJhY2sgZnVuY3Rpb25zLCB3aG8gaGF2ZSBhbHdheXMgYmVlbiBhYmxlIHRvIGFzc3VtZQorICogdGhhdCB0aGUgbmFtZSBzdHJpbmdzIHRoYXQgdGhleSBhcmUgcGFzc2VkIHdpbGwgbm90IGJlIGZyZWVkIGR1cmluZworICogdGhlIGl0ZXJhdGlvbi4KKyAqLworc3RydWN0IHJlZl9lbnRyeSB7CisJdW5zaWduZWQgY2hhciBmbGFnOyAvKiBJU1NZTVJFRj8gSVNQQUNLRUQ/ICovCisJdW5pb24geworCQlzdHJ1Y3QgcmVmX3ZhbHVlIHZhbHVlOyAvKiBpZiBub3QgKGZsYWdzJlJFRl9ESVIpICovCisJCXN0cnVjdCByZWZfZGlyIHN1YmRpcjsgLyogaWYgKGZsYWdzJlJFRl9ESVIpICovCisJfSB1OworCS8qCisJICogVGhlIGZ1bGwgbmFtZSBvZiB0aGUgcmVmZXJlbmNlIChlLmcuLCAicmVmcy9oZWFkcy9tYXN0ZXIiKQorCSAqIG9yIHRoZSBmdWxsIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB3aXRoIGEgdHJhaWxpbmcgc2xhc2gKKwkgKiAoZS5nLiwgInJlZnMvaGVhZHMvIik6CisJICovCisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKKworc3RhdGljIHZvaWQgcmVhZF9sb29zZV9yZWZzKGNvbnN0IGNoYXIgKmRpcm5hbWUsIHN0cnVjdCByZWZfZGlyICpkaXIpOworc3RhdGljIGludCBzZWFyY2hfcmVmX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyLCBjb25zdCBjaGFyICpyZWZuYW1lLCBzaXplX3QgbGVuKTsKK3N0YXRpYyBzdHJ1Y3QgcmVmX2VudHJ5ICpjcmVhdGVfZGlyX2VudHJ5KHN0cnVjdCByZWZfY2FjaGUgKnJlZl9jYWNoZSwKKwkJCQkJICBjb25zdCBjaGFyICpkaXJuYW1lLCBzaXplX3QgbGVuLAorCQkJCQkgIGludCBpbmNvbXBsZXRlKTsKK3N0YXRpYyB2b2lkIGFkZF9lbnRyeV90b19kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwgc3RydWN0IHJlZl9lbnRyeSAqZW50cnkpOworCitzdGF0aWMgc3RydWN0IHJlZl9kaXIgKmdldF9yZWZfZGlyKHN0cnVjdCByZWZfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCByZWZfZGlyICpkaXI7CisJYXNzZXJ0KGVudHJ5LT5mbGFnICYgUkVGX0RJUik7CisJZGlyID0gJmVudHJ5LT51LnN1YmRpcjsKKwlpZiAoZW50cnktPmZsYWcgJiBSRUZfSU5DT01QTEVURSkgeworCQlyZWFkX2xvb3NlX3JlZnMoZW50cnktPm5hbWUsIGRpcik7CisKKwkJLyoKKwkJICogTWFudWFsbHkgYWRkIHJlZnMvYmlzZWN0LCB3aGljaCwgYmVpbmcKKwkJICogcGVyLXdvcmt0cmVlLCBtaWdodCBub3QgYXBwZWFyIGluIHRoZSBkaXJlY3RvcnkKKwkJICogbGlzdGluZyBmb3IgcmVmcy8gaW4gdGhlIG1haW4gcmVwby4KKwkJICovCisJCWlmICghc3RyY21wKGVudHJ5LT5uYW1lLCAicmVmcy8iKSkgeworCQkJaW50IHBvcyA9IHNlYXJjaF9yZWZfZGlyKGRpciwgInJlZnMvYmlzZWN0LyIsIDEyKTsKKwkJCWlmIChwb3MgPCAwKSB7CisJCQkJc3RydWN0IHJlZl9lbnRyeSAqY2hpbGRfZW50cnk7CisJCQkJY2hpbGRfZW50cnkgPSBjcmVhdGVfZGlyX2VudHJ5KGRpci0+cmVmX2NhY2hlLAorCQkJCQkJCSAgICAgICAicmVmcy9iaXNlY3QvIiwKKwkJCQkJCQkgICAgICAgMTIsIDEpOworCQkJCWFkZF9lbnRyeV90b19kaXIoZGlyLCBjaGlsZF9lbnRyeSk7CisJCQkJcmVhZF9sb29zZV9yZWZzKCJyZWZzL2Jpc2VjdCIsCisJCQkJCQkmY2hpbGRfZW50cnktPnUuc3ViZGlyKTsKKwkJCX0KKwkJfQorCQllbnRyeS0+ZmxhZyAmPSB+UkVGX0lOQ09NUExFVEU7CisJfQorCXJldHVybiBkaXI7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHJlZm5hbWUgaXMgc2FmZS4KKyAqIEZvciByZWZzIHRoYXQgc3RhcnQgd2l0aCAicmVmcy8iIHdlIGNvbnNpZGVyIGl0IHNhZmUgYXMgbG9uZyB0aGV5IGRvCisgKiBub3QgdHJ5IHRvIHJlc29sdmUgdG8gb3V0c2lkZSBvZiByZWZzLy4KKyAqCisgKiBGb3IgYWxsIG90aGVyIHJlZnMgd2Ugb25seSBjb25zaWRlciB0aGVtIHNhZmUgaWZmIHRoZXkgb25seSBjb250YWluCisgKiB1cHBlciBjYXNlIGNoYXJhY3RlcnMgYW5kICdfJyAobGlrZSAiSEVBRCIgQU5EICJNRVJHRV9IRUFEIiwgYW5kIG5vdCBsaWtlCisgKiAiY29uZmlnIikuCisgKi8KK3N0YXRpYyBpbnQgcmVmbmFtZV9pc19zYWZlKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJaWYgKHN0YXJ0c193aXRoKHJlZm5hbWUsICJyZWZzLyIpKSB7CisJCWNoYXIgKmJ1ZjsKKwkJaW50IHJlc3VsdDsKKworCQlidWYgPSB4bWFsbG9jKHN0cmxlbihyZWZuYW1lKSArIDEpOworCQkvKgorCQkgKiBEb2VzIHRoZSByZWZuYW1lIHRyeSB0byBlc2NhcGUgcmVmcy8/CisJCSAqIEZvciBleGFtcGxlOiByZWZzL2Zvby8uLi9iYXIgaXMgc2FmZSBidXQgcmVmcy9mb28vLi4vLi4vYmFyCisJCSAqIGlzIG5vdC4KKwkJICovCisJCXJlc3VsdCA9ICFub3JtYWxpemVfcGF0aF9jb3B5KGJ1ZiwgcmVmbmFtZSArIHN0cmxlbigicmVmcy8iKSk7CisJCWZyZWUoYnVmKTsKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisJd2hpbGUgKCpyZWZuYW1lKSB7CisJCWlmICghaXN1cHBlcigqcmVmbmFtZSkgJiYgKnJlZm5hbWUgIT0gJ18nKQorCQkJcmV0dXJuIDA7CisJCXJlZm5hbWUrKzsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2VudHJ5ICpjcmVhdGVfcmVmX2VudHJ5KGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWcsCisJCQkJCSAgaW50IGNoZWNrX25hbWUpCit7CisJaW50IGxlbjsKKwlzdHJ1Y3QgcmVmX2VudHJ5ICpyZWY7CisKKwlpZiAoY2hlY2tfbmFtZSAmJgorCSAgICBjaGVja19yZWZuYW1lX2Zvcm1hdChyZWZuYW1lLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSkKKwkJZGllKCJSZWZlcmVuY2UgaGFzIGludmFsaWQgZm9ybWF0OiAnJXMnIiwgcmVmbmFtZSk7CisJbGVuID0gc3RybGVuKHJlZm5hbWUpICsgMTsKKwlyZWYgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVmX2VudHJ5KSArIGxlbik7CisJaGFzaGNweShyZWYtPnUudmFsdWUub2lkLmhhc2gsIHNoYTEpOworCW9pZGNscigmcmVmLT51LnZhbHVlLnBlZWxlZCk7CisJbWVtY3B5KHJlZi0+bmFtZSwgcmVmbmFtZSwgbGVuKTsKKwlyZWYtPmZsYWcgPSBmbGFnOworCXJldHVybiByZWY7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX3JlZl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpcik7CisKK3N0YXRpYyB2b2lkIGZyZWVfcmVmX2VudHJ5KHN0cnVjdCByZWZfZW50cnkgKmVudHJ5KQoreworCWlmIChlbnRyeS0+ZmxhZyAmIFJFRl9ESVIpIHsKKwkJLyoKKwkJICogRG8gbm90IHVzZSBnZXRfcmVmX2RpcigpIGhlcmUsIGFzIHRoYXQgbWlnaHQKKwkJICogdHJpZ2dlciB0aGUgcmVhZGluZyBvZiBsb29zZSByZWZzLgorCQkgKi8KKwkJY2xlYXJfcmVmX2RpcigmZW50cnktPnUuc3ViZGlyKTsKKwl9CisJZnJlZShlbnRyeSk7Cit9CisKKy8qCisgKiBBZGQgYSByZWZfZW50cnkgdG8gdGhlIGVuZCBvZiBkaXIgKHVuc29ydGVkKS4gIEVudHJ5IGlzIGFsd2F5cworICogc3RvcmVkIGRpcmVjdGx5IGluIGRpcjsgbm8gcmVjdXJzaW9uIGludG8gc3ViZGlyZWN0b3JpZXMgaXMKKyAqIGRvbmUuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF9lbnRyeV90b19kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwgc3RydWN0IHJlZl9lbnRyeSAqZW50cnkpCit7CisJQUxMT0NfR1JPVyhkaXItPmVudHJpZXMsIGRpci0+bnIgKyAxLCBkaXItPmFsbG9jKTsKKwlkaXItPmVudHJpZXNbZGlyLT5ucisrXSA9IGVudHJ5OworCS8qIG9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0IGVudHJpZXMgYXJlIGFkZGVkIGluIG9yZGVyICovCisJaWYgKGRpci0+bnIgPT0gMSB8fAorCSAgICAoZGlyLT5uciA9PSBkaXItPnNvcnRlZCArIDEgJiYKKwkgICAgIHN0cmNtcChkaXItPmVudHJpZXNbZGlyLT5uciAtIDJdLT5uYW1lLAorCQkgICAgZGlyLT5lbnRyaWVzW2Rpci0+bnIgLSAxXS0+bmFtZSkgPCAwKSkKKwkJZGlyLT5zb3J0ZWQgPSBkaXItPm5yOworfQorCisvKgorICogQ2xlYXIgYW5kIGZyZWUgYWxsIGVudHJpZXMgaW4gZGlyLCByZWN1cnNpdmVseS4KKyAqLworc3RhdGljIHZvaWQgY2xlYXJfcmVmX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspCisJCWZyZWVfcmVmX2VudHJ5KGRpci0+ZW50cmllc1tpXSk7CisJZnJlZShkaXItPmVudHJpZXMpOworCWRpci0+c29ydGVkID0gZGlyLT5uciA9IGRpci0+YWxsb2MgPSAwOworCWRpci0+ZW50cmllcyA9IE5VTEw7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBzdHJ1Y3QgcmVmX2VudHJ5IG9iamVjdCBmb3IgdGhlIHNwZWNpZmllZCBkaXJuYW1lLgorICogZGlybmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHdpdGggYSB0cmFpbGluZyBzbGFzaCAoZS5nLiwKKyAqICJyZWZzL2hlYWRzLyIpIG9yICIiIGZvciB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4KKyAqLworc3RhdGljIHN0cnVjdCByZWZfZW50cnkgKmNyZWF0ZV9kaXJfZW50cnkoc3RydWN0IHJlZl9jYWNoZSAqcmVmX2NhY2hlLAorCQkJCQkgIGNvbnN0IGNoYXIgKmRpcm5hbWUsIHNpemVfdCBsZW4sCisJCQkJCSAgaW50IGluY29tcGxldGUpCit7CisJc3RydWN0IHJlZl9lbnRyeSAqZGlyZW50cnk7CisJZGlyZW50cnkgPSB4Y2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmVmX2VudHJ5KSArIGxlbiArIDEpOworCW1lbWNweShkaXJlbnRyeS0+bmFtZSwgZGlybmFtZSwgbGVuKTsKKwlkaXJlbnRyeS0+bmFtZVtsZW5dID0gJ1wwJzsKKwlkaXJlbnRyeS0+dS5zdWJkaXIucmVmX2NhY2hlID0gcmVmX2NhY2hlOworCWRpcmVudHJ5LT5mbGFnID0gUkVGX0RJUiB8IChpbmNvbXBsZXRlID8gUkVGX0lOQ09NUExFVEUgOiAwKTsKKwlyZXR1cm4gZGlyZW50cnk7Cit9CisKK3N0YXRpYyBpbnQgcmVmX2VudHJ5X2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCXN0cnVjdCByZWZfZW50cnkgKm9uZSA9ICooc3RydWN0IHJlZl9lbnRyeSAqKilhOworCXN0cnVjdCByZWZfZW50cnkgKnR3byA9ICooc3RydWN0IHJlZl9lbnRyeSAqKiliOworCXJldHVybiBzdHJjbXAob25lLT5uYW1lLCB0d28tPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBzb3J0X3JlZl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpcik7CisKK3N0cnVjdCBzdHJpbmdfc2xpY2UgeworCXNpemVfdCBsZW47CisJY29uc3QgY2hhciAqc3RyOworfTsKKworc3RhdGljIGludCByZWZfZW50cnlfY21wX3NzbGljZShjb25zdCB2b2lkICprZXlfLCBjb25zdCB2b2lkICplbnRfKQoreworCWNvbnN0IHN0cnVjdCBzdHJpbmdfc2xpY2UgKmtleSA9IGtleV87CisJY29uc3Qgc3RydWN0IHJlZl9lbnRyeSAqZW50ID0gKihjb25zdCBzdHJ1Y3QgcmVmX2VudHJ5ICogY29uc3QgKillbnRfOworCWludCBjbXAgPSBzdHJuY21wKGtleS0+c3RyLCBlbnQtPm5hbWUsIGtleS0+bGVuKTsKKwlpZiAoY21wKQorCQlyZXR1cm4gY21wOworCXJldHVybiAnXDAnIC0gKHVuc2lnbmVkIGNoYXIpZW50LT5uYW1lW2tleS0+bGVuXTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IHdpdGggdGhlIGdpdmVuIHJlZm5hbWUgZnJvbSB0aGUKKyAqIHJlZl9kaXIgKG5vbi1yZWN1cnNpdmVseSksIHNvcnRpbmcgZGlyIGlmIG5lY2Vzc2FyeS4gIFJldHVybiAtMSBpZgorICogbm8gc3VjaCBlbnRyeSBpcyBmb3VuZC4gIGRpciBtdXN0IGFscmVhZHkgYmUgY29tcGxldGUuCisgKi8KK3N0YXRpYyBpbnQgc2VhcmNoX3JlZl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwgY29uc3QgY2hhciAqcmVmbmFtZSwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgcmVmX2VudHJ5ICoqcjsKKwlzdHJ1Y3Qgc3RyaW5nX3NsaWNlIGtleTsKKworCWlmIChyZWZuYW1lID09IE5VTEwgfHwgIWRpci0+bnIpCisJCXJldHVybiAtMTsKKworCXNvcnRfcmVmX2RpcihkaXIpOworCWtleS5sZW4gPSBsZW47CisJa2V5LnN0ciA9IHJlZm5hbWU7CisJciA9IGJzZWFyY2goJmtleSwgZGlyLT5lbnRyaWVzLCBkaXItPm5yLCBzaXplb2YoKmRpci0+ZW50cmllcyksCisJCSAgICByZWZfZW50cnlfY21wX3NzbGljZSk7CisKKwlpZiAociA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gciAtIGRpci0+ZW50cmllczsKK30KKworLyoKKyAqIFNlYXJjaCBmb3IgYSBkaXJlY3RvcnkgZW50cnkgZGlyZWN0bHkgd2l0aGluIGRpciAod2l0aG91dAorICogcmVjdXJzaW5nKS4gIFNvcnQgZGlyIGlmIG5lY2Vzc2FyeS4gIHN1YmRpcm5hbWUgbXVzdCBiZSBhIGRpcmVjdG9yeQorICogbmFtZSAoaS5lLiwgZW5kIGluICcvJykuICBJZiBta2RpciBpcyBzZXQsIHRoZW4gY3JlYXRlIHRoZQorICogZGlyZWN0b3J5IGlmIGl0IGlzIG1pc3Npbmc7IG90aGVyd2lzZSwgcmV0dXJuIE5VTEwgaWYgdGhlIGRlc2lyZWQKKyAqIGRpcmVjdG9yeSBjYW5ub3QgYmUgZm91bmQuICBkaXIgbXVzdCBhbHJlYWR5IGJlIGNvbXBsZXRlLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9kaXIgKnNlYXJjaF9mb3Jfc3ViZGlyKHN0cnVjdCByZWZfZGlyICpkaXIsCisJCQkJCSBjb25zdCBjaGFyICpzdWJkaXJuYW1lLCBzaXplX3QgbGVuLAorCQkJCQkgaW50IG1rZGlyKQoreworCWludCBlbnRyeV9pbmRleCA9IHNlYXJjaF9yZWZfZGlyKGRpciwgc3ViZGlybmFtZSwgbGVuKTsKKwlzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeTsKKwlpZiAoZW50cnlfaW5kZXggPT0gLTEpIHsKKwkJaWYgKCFta2RpcikKKwkJCXJldHVybiBOVUxMOworCQkvKgorCQkgKiBTaW5jZSBkaXIgaXMgY29tcGxldGUsIHRoZSBhYnNlbmNlIG9mIGEgc3ViZGlyCisJCSAqIG1lYW5zIHRoYXQgdGhlIHN1YmRpciByZWFsbHkgZG9lc24ndCBleGlzdDsKKwkJICogdGhlcmVmb3JlLCBjcmVhdGUgYW4gZW1wdHkgcmVjb3JkIGZvciBpdCBidXQgbWFyaworCQkgKiB0aGUgcmVjb3JkIGNvbXBsZXRlLgorCQkgKi8KKwkJZW50cnkgPSBjcmVhdGVfZGlyX2VudHJ5KGRpci0+cmVmX2NhY2hlLCBzdWJkaXJuYW1lLCBsZW4sIDApOworCQlhZGRfZW50cnlfdG9fZGlyKGRpciwgZW50cnkpOworCX0gZWxzZSB7CisJCWVudHJ5ID0gZGlyLT5lbnRyaWVzW2VudHJ5X2luZGV4XTsKKwl9CisJcmV0dXJuIGdldF9yZWZfZGlyKGVudHJ5KTsKK30KKworLyoKKyAqIElmIHJlZm5hbWUgaXMgYSByZWZlcmVuY2UgbmFtZSwgZmluZCB0aGUgcmVmX2RpciB3aXRoaW4gdGhlIGRpcgorICogdHJlZSB0aGF0IHNob3VsZCBob2xkIHJlZm5hbWUuICBJZiByZWZuYW1lIGlzIGEgZGlyZWN0b3J5IG5hbWUKKyAqIChpLmUuLCBlbmRzIGluICcvJyksIHRoZW4gcmV0dXJuIHRoYXQgcmVmX2RpciBpdHNlbGYuICBkaXIgbXVzdAorICogcmVwcmVzZW50IHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IGFuZCBtdXN0IGFscmVhZHkgYmUgY29tcGxldGUuCisgKiBTb3J0IHJlZl9kaXJzIGFuZCByZWN1cnNlIGludG8gc3ViZGlyZWN0b3JpZXMgYXMgbmVjZXNzYXJ5LiAgSWYKKyAqIG1rZGlyIGlzIHNldCwgdGhlbiBjcmVhdGUgYW55IG1pc3NpbmcgZGlyZWN0b3JpZXM7IG90aGVyd2lzZSwKKyAqIHJldHVybiBOVUxMIGlmIHRoZSBkZXNpcmVkIGRpcmVjdG9yeSBjYW5ub3QgYmUgZm91bmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVmX2RpciAqZmluZF9jb250YWluaW5nX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyLAorCQkJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgbWtkaXIpCit7CisJY29uc3QgY2hhciAqc2xhc2g7CisJZm9yIChzbGFzaCA9IHN0cmNocihyZWZuYW1lLCAnLycpOyBzbGFzaDsgc2xhc2ggPSBzdHJjaHIoc2xhc2ggKyAxLCAnLycpKSB7CisJCXNpemVfdCBkaXJuYW1lbGVuID0gc2xhc2ggLSByZWZuYW1lICsgMTsKKwkJc3RydWN0IHJlZl9kaXIgKnN1YmRpcjsKKwkJc3ViZGlyID0gc2VhcmNoX2Zvcl9zdWJkaXIoZGlyLCByZWZuYW1lLCBkaXJuYW1lbGVuLCBta2Rpcik7CisJCWlmICghc3ViZGlyKSB7CisJCQlkaXIgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJZGlyID0gc3ViZGlyOworCX0KKworCXJldHVybiBkaXI7Cit9CisKKy8qCisgKiBGaW5kIHRoZSB2YWx1ZSBlbnRyeSB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIGRpciwgc29ydGluZyByZWZfZGlycworICogYW5kIHJlY3Vyc2luZyBpbnRvIHN1YmRpcmVjdG9yaWVzIGFzIG5lY2Vzc2FyeS4gIElmIHRoZSBuYW1lIGlzIG5vdAorICogZm91bmQgb3IgaXQgY29ycmVzcG9uZHMgdG8gYSBkaXJlY3RvcnkgZW50cnksIHJldHVybiBOVUxMLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9lbnRyeSAqZmluZF9yZWYoc3RydWN0IHJlZl9kaXIgKmRpciwgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlpbnQgZW50cnlfaW5kZXg7CisJc3RydWN0IHJlZl9lbnRyeSAqZW50cnk7CisJZGlyID0gZmluZF9jb250YWluaW5nX2RpcihkaXIsIHJlZm5hbWUsIDApOworCWlmICghZGlyKQorCQlyZXR1cm4gTlVMTDsKKwllbnRyeV9pbmRleCA9IHNlYXJjaF9yZWZfZGlyKGRpciwgcmVmbmFtZSwgc3RybGVuKHJlZm5hbWUpKTsKKwlpZiAoZW50cnlfaW5kZXggPT0gLTEpCisJCXJldHVybiBOVUxMOworCWVudHJ5ID0gZGlyLT5lbnRyaWVzW2VudHJ5X2luZGV4XTsKKwlyZXR1cm4gKGVudHJ5LT5mbGFnICYgUkVGX0RJUikgPyBOVUxMIDogZW50cnk7Cit9CisKKy8qCisgKiBSZW1vdmUgdGhlIGVudHJ5IHdpdGggdGhlIGdpdmVuIG5hbWUgZnJvbSBkaXIsIHJlY3Vyc2luZyBpbnRvCisgKiBzdWJkaXJlY3RvcmllcyBhcyBuZWNlc3NhcnkuICBJZiByZWZuYW1lIGlzIHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5CisgKiAoaS5lLiwgZW5kcyB3aXRoICcvJyksIHRoZW4gcmVtb3ZlIHRoZSBkaXJlY3RvcnkgYW5kIGl0cyBjb250ZW50cy4KKyAqIElmIHRoZSByZW1vdmFsIHdhcyBzdWNjZXNzZnVsLCByZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzCisgKiByZW1haW5pbmcgaW4gdGhlIGRpcmVjdG9yeSBlbnRyeSB0aGF0IGNvbnRhaW5lZCB0aGUgZGVsZXRlZCBlbnRyeS4KKyAqIElmIHRoZSBuYW1lIHdhcyBub3QgZm91bmQsIHJldHVybiAtMS4gIFBsZWFzZSBub3RlIHRoYXQgdGhpcworICogZnVuY3Rpb24gb25seSBkZWxldGVzIHRoZSBlbnRyeSBmcm9tIHRoZSBjYWNoZTsgaXQgZG9lcyBub3QgZGVsZXRlCisgKiBpdCBmcm9tIHRoZSBmaWxlc3lzdGVtIG9yIGVuc3VyZSB0aGF0IG90aGVyIGNhY2hlIGVudHJpZXMgKHdoaWNoCisgKiBtaWdodCBiZSBzeW1ib2xpYyByZWZlcmVuY2VzIHRvIHRoZSByZW1vdmVkIGVudHJ5KSBhcmUgdXBkYXRlZC4KKyAqIE5vciBkb2VzIGl0IHJlbW92ZSBhbnkgY29udGFpbmluZyBkaXIgZW50cmllcyB0aGF0IG1pZ2h0IGJlIG1hZGUKKyAqIGVtcHR5IGJ5IHRoZSByZW1vdmFsLiAgZGlyIG11c3QgcmVwcmVzZW50IHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5CisgKiBhbmQgbXVzdCBhbHJlYWR5IGJlIGNvbXBsZXRlLgorICovCitzdGF0aWMgaW50IHJlbW92ZV9lbnRyeShzdHJ1Y3QgcmVmX2RpciAqZGlyLCBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWludCByZWZuYW1lX2xlbiA9IHN0cmxlbihyZWZuYW1lKTsKKwlpbnQgZW50cnlfaW5kZXg7CisJc3RydWN0IHJlZl9lbnRyeSAqZW50cnk7CisJaW50IGlzX2RpciA9IHJlZm5hbWVbcmVmbmFtZV9sZW4gLSAxXSA9PSAnLyc7CisJaWYgKGlzX2RpcikgeworCQkvKgorCQkgKiByZWZuYW1lIHJlcHJlc2VudHMgYSByZWZlcmVuY2UgZGlyZWN0b3J5LiAgUmVtb3ZlCisJCSAqIHRoZSB0cmFpbGluZyBzbGFzaDsgb3RoZXJ3aXNlIHdlIHdpbGwgZ2V0IHRoZQorCQkgKiBkaXJlY3RvcnkgKnJlcHJlc2VudGluZyogcmVmbmFtZSByYXRoZXIgdGhhbiB0aGUKKwkJICogb25lICpjb250YWluaW5nKiBpdC4KKwkJICovCisJCWNoYXIgKmRpcm5hbWUgPSB4bWVtZHVweihyZWZuYW1lLCByZWZuYW1lX2xlbiAtIDEpOworCQlkaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKGRpciwgZGlybmFtZSwgMCk7CisJCWZyZWUoZGlybmFtZSk7CisJfSBlbHNlIHsKKwkJZGlyID0gZmluZF9jb250YWluaW5nX2RpcihkaXIsIHJlZm5hbWUsIDApOworCX0KKwlpZiAoIWRpcikKKwkJcmV0dXJuIC0xOworCWVudHJ5X2luZGV4ID0gc2VhcmNoX3JlZl9kaXIoZGlyLCByZWZuYW1lLCByZWZuYW1lX2xlbik7CisJaWYgKGVudHJ5X2luZGV4ID09IC0xKQorCQlyZXR1cm4gLTE7CisJZW50cnkgPSBkaXItPmVudHJpZXNbZW50cnlfaW5kZXhdOworCisJbWVtbW92ZSgmZGlyLT5lbnRyaWVzW2VudHJ5X2luZGV4XSwKKwkJJmRpci0+ZW50cmllc1tlbnRyeV9pbmRleCArIDFdLAorCQkoZGlyLT5uciAtIGVudHJ5X2luZGV4IC0gMSkgKiBzaXplb2YoKmRpci0+ZW50cmllcykKKwkJKTsKKwlkaXItPm5yLS07CisJaWYgKGRpci0+c29ydGVkID4gZW50cnlfaW5kZXgpCisJCWRpci0+c29ydGVkLS07CisJZnJlZV9yZWZfZW50cnkoZW50cnkpOworCXJldHVybiBkaXItPm5yOworfQorCisvKgorICogQWRkIGEgcmVmX2VudHJ5IHRvIHRoZSByZWZfZGlyICh1bnNvcnRlZCksIHJlY3Vyc2luZyBpbnRvCisgKiBzdWJkaXJlY3RvcmllcyBhcyBuZWNlc3NhcnkuICBkaXIgbXVzdCByZXByZXNlbnQgdGhlIHRvcC1sZXZlbAorICogZGlyZWN0b3J5LiAgUmV0dXJuIDAgb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBhZGRfcmVmKHN0cnVjdCByZWZfZGlyICpkaXIsIHN0cnVjdCByZWZfZW50cnkgKnJlZikKK3sKKwlkaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKGRpciwgcmVmLT5uYW1lLCAxKTsKKwlpZiAoIWRpcikKKwkJcmV0dXJuIC0xOworCWFkZF9lbnRyeV90b19kaXIoZGlyLCByZWYpOworCXJldHVybiAwOworfQorCisvKgorICogRW1pdCBhIHdhcm5pbmcgYW5kIHJldHVybiB0cnVlIGlmZiByZWYxIGFuZCByZWYyIGhhdmUgdGhlIHNhbWUgbmFtZQorICogYW5kIHRoZSBzYW1lIHNoYTEuICBEaWUgaWYgdGhleSBoYXZlIHRoZSBzYW1lIG5hbWUgYnV0IGRpZmZlcmVudAorICogc2hhMXMuCisgKi8KK3N0YXRpYyBpbnQgaXNfZHVwX3JlZihjb25zdCBzdHJ1Y3QgcmVmX2VudHJ5ICpyZWYxLCBjb25zdCBzdHJ1Y3QgcmVmX2VudHJ5ICpyZWYyKQoreworCWlmIChzdHJjbXAocmVmMS0+bmFtZSwgcmVmMi0+bmFtZSkpCisJCXJldHVybiAwOworCisJLyogRHVwbGljYXRlIG5hbWU7IG1ha2Ugc3VyZSB0aGF0IHRoZXkgZG9uJ3QgY29uZmxpY3Q6ICovCisKKwlpZiAoKHJlZjEtPmZsYWcgJiBSRUZfRElSKSB8fCAocmVmMi0+ZmxhZyAmIFJFRl9ESVIpKQorCQkvKiBUaGlzIGlzIGltcG9zc2libGUgYnkgY29uc3RydWN0aW9uICovCisJCWRpZSgiUmVmZXJlbmNlIGRpcmVjdG9yeSBjb25mbGljdDogJXMiLCByZWYxLT5uYW1lKTsKKworCWlmIChvaWRjbXAoJnJlZjEtPnUudmFsdWUub2lkLCAmcmVmMi0+dS52YWx1ZS5vaWQpKQorCQlkaWUoIkR1cGxpY2F0ZWQgcmVmLCBhbmQgU0hBMXMgZG9uJ3QgbWF0Y2g6ICVzIiwgcmVmMS0+bmFtZSk7CisKKwl3YXJuaW5nKCJEdXBsaWNhdGVkIHJlZjogJXMiLCByZWYxLT5uYW1lKTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFNvcnQgdGhlIGVudHJpZXMgaW4gZGlyIG5vbi1yZWN1cnNpdmVseSAoaWYgdGhleSBhcmUgbm90IGFscmVhZHkKKyAqIHNvcnRlZCkgYW5kIHJlbW92ZSBhbnkgZHVwbGljYXRlIGVudHJpZXMuCisgKi8KK3N0YXRpYyB2b2lkIHNvcnRfcmVmX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyKQoreworCWludCBpLCBqOworCXN0cnVjdCByZWZfZW50cnkgKmxhc3QgPSBOVUxMOworCisJLyoKKwkgKiBUaGlzIGNoZWNrIGFsc28gcHJldmVudHMgcGFzc2luZyBhIHplcm8tbGVuZ3RoIGFycmF5IHRvIHFzb3J0KCksCisJICogd2hpY2ggaXMgYSBwcm9ibGVtIG9uIHNvbWUgcGxhdGZvcm1zLgorCSAqLworCWlmIChkaXItPnNvcnRlZCA9PSBkaXItPm5yKQorCQlyZXR1cm47CisKKwlxc29ydChkaXItPmVudHJpZXMsIGRpci0+bnIsIHNpemVvZigqZGlyLT5lbnRyaWVzKSwgcmVmX2VudHJ5X2NtcCk7CisKKwkvKiBSZW1vdmUgYW55IGR1cGxpY2F0ZXM6ICovCisJZm9yIChpID0gMCwgaiA9IDA7IGogPCBkaXItPm5yOyBqKyspIHsKKwkJc3RydWN0IHJlZl9lbnRyeSAqZW50cnkgPSBkaXItPmVudHJpZXNbal07CisJCWlmIChsYXN0ICYmIGlzX2R1cF9yZWYobGFzdCwgZW50cnkpKQorCQkJZnJlZV9yZWZfZW50cnkoZW50cnkpOworCQllbHNlCisJCQlsYXN0ID0gZGlyLT5lbnRyaWVzW2krK10gPSBlbnRyeTsKKwl9CisJZGlyLT5zb3J0ZWQgPSBkaXItPm5yID0gaTsKK30KKworLyogSW5jbHVkZSBicm9rZW4gcmVmZXJlbmNlcyBpbiBhIGRvX2Zvcl9lYWNoX3JlZiooKSBpdGVyYXRpb246ICovCisjZGVmaW5lIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOIDB4MDEKKworLyoKKyAqIFJldHVybiB0cnVlIGlmZiB0aGUgcmVmZXJlbmNlIGRlc2NyaWJlZCBieSBlbnRyeSBjYW4gYmUgcmVzb2x2ZWQgdG8KKyAqIGFuIG9iamVjdCBpbiB0aGUgZGF0YWJhc2UuICBFbWl0IGEgd2FybmluZyBpZiB0aGUgcmVmZXJyZWQtdG8KKyAqIG9iamVjdCBkb2VzIG5vdCBleGlzdC4KKyAqLworc3RhdGljIGludCByZWZfcmVzb2x2ZXNfdG9fb2JqZWN0KHN0cnVjdCByZWZfZW50cnkgKmVudHJ5KQoreworCWlmIChlbnRyeS0+ZmxhZyAmIFJFRl9JU0JST0tFTikKKwkJcmV0dXJuIDA7CisJaWYgKCFoYXNfc2hhMV9maWxlKGVudHJ5LT51LnZhbHVlLm9pZC5oYXNoKSkgeworCQllcnJvcigiJXMgZG9lcyBub3QgcG9pbnQgdG8gYSB2YWxpZCBvYmplY3QhIiwgZW50cnktPm5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBjdXJyZW50X3JlZiBpcyBhIHBlcmZvcm1hbmNlIGhhY2s6IHdoZW4gaXRlcmF0aW5nIG92ZXIgcmVmZXJlbmNlcworICogdXNpbmcgdGhlIGZvcl9lYWNoX3JlZiooKSBmdW5jdGlvbnMsIGN1cnJlbnRfcmVmIGlzIHNldCB0byB0aGUKKyAqIGN1cnJlbnQgcmVmZXJlbmNlJ3MgZW50cnkgYmVmb3JlIGNhbGxpbmcgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiAgSWYKKyAqIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYWxscyBwZWVsX3JlZigpLCB0aGVuIHBlZWxfcmVmKCkgZmlyc3QKKyAqIGNoZWNrcyB3aGV0aGVyIHRoZSByZWZlcmVuY2UgdG8gYmUgcGVlbGVkIGlzIHRoZSBjdXJyZW50IHJlZmVyZW5jZQorICogKGl0IHVzdWFsbHkgaXMpIGFuZCBpZiBzbywgcmV0dXJucyB0aGF0IHJlZmVyZW5jZSdzIHBlZWxlZCB2ZXJzaW9uCisgKiBpZiBpdCBpcyBhdmFpbGFibGUuICBUaGlzIGF2b2lkcyBhIHJlZm5hbWUgbG9va3VwIGluIGEgY29tbW9uIGNhc2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVmX2VudHJ5ICpjdXJyZW50X3JlZjsKKwordHlwZWRlZiBpbnQgZWFjaF9yZWZfZW50cnlfZm4oc3RydWN0IHJlZl9lbnRyeSAqZW50cnksIHZvaWQgKmNiX2RhdGEpOworCitzdHJ1Y3QgcmVmX2VudHJ5X2NiIHsKKwljb25zdCBjaGFyICpiYXNlOworCWludCB0cmltOworCWludCBmbGFnczsKKwllYWNoX3JlZl9mbiAqZm47CisJdm9pZCAqY2JfZGF0YTsKK307CisKKy8qCisgKiBIYW5kbGUgb25lIHJlZmVyZW5jZSBpbiBhIGRvX2Zvcl9lYWNoX3JlZiooKS1zdHlsZSBpdGVyYXRpb24sCisgKiBjYWxsaW5nIGFuIGVhY2hfcmVmX2ZuIGZvciBlYWNoIGVudHJ5LgorICovCitzdGF0aWMgaW50IGRvX29uZV9yZWYoc3RydWN0IHJlZl9lbnRyeSAqZW50cnksIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHJlZl9lbnRyeV9jYiAqZGF0YSA9IGNiX2RhdGE7CisJc3RydWN0IHJlZl9lbnRyeSAqb2xkX2N1cnJlbnRfcmVmOworCWludCByZXR2YWw7CisKKwlpZiAoIXN0YXJ0c193aXRoKGVudHJ5LT5uYW1lLCBkYXRhLT5iYXNlKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShkYXRhLT5mbGFncyAmIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOKSAmJgorCSAgICAgICFyZWZfcmVzb2x2ZXNfdG9fb2JqZWN0KGVudHJ5KSkKKwkJcmV0dXJuIDA7CisKKwkvKiBTdG9yZSB0aGUgb2xkIHZhbHVlLCBpbiBjYXNlIHRoaXMgaXMgYSByZWN1cnNpdmUgY2FsbDogKi8KKwlvbGRfY3VycmVudF9yZWYgPSBjdXJyZW50X3JlZjsKKwljdXJyZW50X3JlZiA9IGVudHJ5OworCXJldHZhbCA9IGRhdGEtPmZuKGVudHJ5LT5uYW1lICsgZGF0YS0+dHJpbSwgJmVudHJ5LT51LnZhbHVlLm9pZCwKKwkJCSAgZW50cnktPmZsYWcsIGRhdGEtPmNiX2RhdGEpOworCWN1cnJlbnRfcmVmID0gb2xkX2N1cnJlbnRfcmVmOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBDYWxsIGZuIGZvciBlYWNoIHJlZmVyZW5jZSBpbiBkaXIgdGhhdCBoYXMgaW5kZXggaW4gdGhlIHJhbmdlCisgKiBvZmZzZXQgPD0gaW5kZXggPCBkaXItPm5yLiAgUmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzIHRoYXQgYXJlIGluCisgKiB0aGF0IGluZGV4IHJhbmdlLCBzb3J0aW5nIHRoZW0gYmVmb3JlIGl0ZXJhdGluZy4gIFRoaXMgZnVuY3Rpb24KKyAqIGRvZXMgbm90IHNvcnQgZGlyIGl0c2VsZjsgaXQgc2hvdWxkIGJlIHNvcnRlZCBiZWZvcmVoYW5kLiAgZm4gaXMKKyAqIGNhbGxlZCBmb3IgYWxsIHJlZmVyZW5jZXMsIGluY2x1ZGluZyBicm9rZW4gb25lcy4KKyAqLworc3RhdGljIGludCBkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXIoc3RydWN0IHJlZl9kaXIgKmRpciwgaW50IG9mZnNldCwKKwkJCQkgICAgZWFjaF9yZWZfZW50cnlfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJaW50IGk7CisJYXNzZXJ0KGRpci0+c29ydGVkID09IGRpci0+bnIpOworCWZvciAoaSA9IG9mZnNldDsgaSA8IGRpci0+bnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSA9IGRpci0+ZW50cmllc1tpXTsKKwkJaW50IHJldHZhbDsKKwkJaWYgKGVudHJ5LT5mbGFnICYgUkVGX0RJUikgeworCQkJc3RydWN0IHJlZl9kaXIgKnN1YmRpciA9IGdldF9yZWZfZGlyKGVudHJ5KTsKKwkJCXNvcnRfcmVmX2RpcihzdWJkaXIpOworCQkJcmV0dmFsID0gZG9fZm9yX2VhY2hfZW50cnlfaW5fZGlyKHN1YmRpciwgMCwgZm4sIGNiX2RhdGEpOworCQl9IGVsc2UgeworCQkJcmV0dmFsID0gZm4oZW50cnksIGNiX2RhdGEpOworCQl9CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhbGwgZm4gZm9yIGVhY2ggcmVmZXJlbmNlIGluIHRoZSB1bmlvbiBvZiBkaXIxIGFuZCBkaXIyLCBpbiBvcmRlcgorICogYnkgcmVmbmFtZS4gIFJlY3Vyc2UgaW50byBzdWJkaXJlY3Rvcmllcy4gIElmIGEgdmFsdWUgZW50cnkgYXBwZWFycworICogaW4gYm90aCBkaXIxIGFuZCBkaXIyLCB0aGVuIG9ubHkgcHJvY2VzcyB0aGUgdmVyc2lvbiB0aGF0IGlzIGluCisgKiBkaXIyLiAgVGhlIGlucHV0IGRpcnMgbXVzdCBhbHJlYWR5IGJlIHNvcnRlZCwgYnV0IHN1YmRpcnMgd2lsbCBiZQorICogc29ydGVkIGFzIG5lZWRlZC4gIGZuIGlzIGNhbGxlZCBmb3IgYWxsIHJlZmVyZW5jZXMsIGluY2x1ZGluZworICogYnJva2VuIG9uZXMuCisgKi8KK3N0YXRpYyBpbnQgZG9fZm9yX2VhY2hfZW50cnlfaW5fZGlycyhzdHJ1Y3QgcmVmX2RpciAqZGlyMSwKKwkJCQkgICAgIHN0cnVjdCByZWZfZGlyICpkaXIyLAorCQkJCSAgICAgZWFjaF9yZWZfZW50cnlfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJaW50IHJldHZhbDsKKwlpbnQgaTEgPSAwLCBpMiA9IDA7CisKKwlhc3NlcnQoZGlyMS0+c29ydGVkID09IGRpcjEtPm5yKTsKKwlhc3NlcnQoZGlyMi0+c29ydGVkID09IGRpcjItPm5yKTsKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgcmVmX2VudHJ5ICplMSwgKmUyOworCQlpbnQgY21wOworCQlpZiAoaTEgPT0gZGlyMS0+bnIpIHsKKwkJCXJldHVybiBkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXIoZGlyMiwgaTIsIGZuLCBjYl9kYXRhKTsKKwkJfQorCQlpZiAoaTIgPT0gZGlyMi0+bnIpIHsKKwkJCXJldHVybiBkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXIoZGlyMSwgaTEsIGZuLCBjYl9kYXRhKTsKKwkJfQorCQllMSA9IGRpcjEtPmVudHJpZXNbaTFdOworCQllMiA9IGRpcjItPmVudHJpZXNbaTJdOworCQljbXAgPSBzdHJjbXAoZTEtPm5hbWUsIGUyLT5uYW1lKTsKKwkJaWYgKGNtcCA9PSAwKSB7CisJCQlpZiAoKGUxLT5mbGFnICYgUkVGX0RJUikgJiYgKGUyLT5mbGFnICYgUkVGX0RJUikpIHsKKwkJCQkvKiBCb3RoIGFyZSBkaXJlY3RvcmllczsgZGVzY2VuZCB0aGVtIGluIHBhcmFsbGVsLiAqLworCQkJCXN0cnVjdCByZWZfZGlyICpzdWJkaXIxID0gZ2V0X3JlZl9kaXIoZTEpOworCQkJCXN0cnVjdCByZWZfZGlyICpzdWJkaXIyID0gZ2V0X3JlZl9kaXIoZTIpOworCQkJCXNvcnRfcmVmX2RpcihzdWJkaXIxKTsKKwkJCQlzb3J0X3JlZl9kaXIoc3ViZGlyMik7CisJCQkJcmV0dmFsID0gZG9fZm9yX2VhY2hfZW50cnlfaW5fZGlycygKKwkJCQkJCXN1YmRpcjEsIHN1YmRpcjIsIGZuLCBjYl9kYXRhKTsKKwkJCQlpMSsrOworCQkJCWkyKys7CisJCQl9IGVsc2UgaWYgKCEoZTEtPmZsYWcgJiBSRUZfRElSKSAmJiAhKGUyLT5mbGFnICYgUkVGX0RJUikpIHsKKwkJCQkvKiBCb3RoIGFyZSByZWZlcmVuY2VzOyBpZ25vcmUgdGhlIG9uZSBmcm9tIGRpcjEuICovCisJCQkJcmV0dmFsID0gZm4oZTIsIGNiX2RhdGEpOworCQkJCWkxKys7CisJCQkJaTIrKzsKKwkJCX0gZWxzZSB7CisJCQkJZGllKCJjb25mbGljdCBiZXR3ZWVuIHJlZmVyZW5jZSBhbmQgZGlyZWN0b3J5OiAlcyIsCisJCQkJICAgIGUxLT5uYW1lKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCByZWZfZW50cnkgKmU7CisJCQlpZiAoY21wIDwgMCkgeworCQkJCWUgPSBlMTsKKwkJCQlpMSsrOworCQkJfSBlbHNlIHsKKwkJCQllID0gZTI7CisJCQkJaTIrKzsKKwkJCX0KKwkJCWlmIChlLT5mbGFnICYgUkVGX0RJUikgeworCQkJCXN0cnVjdCByZWZfZGlyICpzdWJkaXIgPSBnZXRfcmVmX2RpcihlKTsKKwkJCQlzb3J0X3JlZl9kaXIoc3ViZGlyKTsKKwkJCQlyZXR2YWwgPSBkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXIoCisJCQkJCQlzdWJkaXIsIDAsIGZuLCBjYl9kYXRhKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dmFsID0gZm4oZSwgY2JfZGF0YSk7CisJCQl9CisJCX0KKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CisJfQorfQorCisvKgorICogTG9hZCBhbGwgb2YgdGhlIHJlZnMgZnJvbSB0aGUgZGlyIGludG8gb3VyIGluLW1lbW9yeSBjYWNoZS4gVGhlIGhhcmQgd29yaworICogb2YgbG9hZGluZyBsb29zZSByZWZzIGlzIGRvbmUgYnkgZ2V0X3JlZl9kaXIoKSwgc28gd2UganVzdCBuZWVkIHRvIHJlY3Vyc2UKKyAqIHRocm91Z2ggYWxsIG9mIHRoZSBzdWItZGlyZWN0b3JpZXMuIFdlIGRvIG5vdCBldmVuIG5lZWQgdG8gY2FyZSBhYm91dAorICogc29ydGluZywgYXMgdHJhdmVyc2FsIG9yZGVyIGRvZXMgbm90IG1hdHRlciB0byB1cy4KKyAqLworc3RhdGljIHZvaWQgcHJpbWVfcmVmX2RpcihzdHJ1Y3QgcmVmX2RpciAqZGlyKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkaXItPm5yOyBpKyspIHsKKwkJc3RydWN0IHJlZl9lbnRyeSAqZW50cnkgPSBkaXItPmVudHJpZXNbaV07CisJCWlmIChlbnRyeS0+ZmxhZyAmIFJFRl9ESVIpCisJCQlwcmltZV9yZWZfZGlyKGdldF9yZWZfZGlyKGVudHJ5KSk7CisJfQorfQorCitzdHJ1Y3Qgbm9ubWF0Y2hpbmdfcmVmX2RhdGEgeworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc2tpcDsKKwljb25zdCBjaGFyICpjb25mbGljdGluZ19yZWZuYW1lOworfTsKKworc3RhdGljIGludCBub25tYXRjaGluZ19yZWZfZm4oc3RydWN0IHJlZl9lbnRyeSAqZW50cnksIHZvaWQgKnZkYXRhKQoreworCXN0cnVjdCBub25tYXRjaGluZ19yZWZfZGF0YSAqZGF0YSA9IHZkYXRhOworCisJaWYgKGRhdGEtPnNraXAgJiYgc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhkYXRhLT5za2lwLCBlbnRyeS0+bmFtZSkpCisJCXJldHVybiAwOworCisJZGF0YS0+Y29uZmxpY3RpbmdfcmVmbmFtZSA9IGVudHJ5LT5uYW1lOworCXJldHVybiAxOworfQorCisvKgorICogUmV0dXJuIDAgaWYgYSByZWZlcmVuY2UgbmFtZWQgcmVmbmFtZSBjb3VsZCBiZSBjcmVhdGVkIHdpdGhvdXQKKyAqIGNvbmZsaWN0aW5nIHdpdGggdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgcmVmZXJlbmNlIGluIGRpci4KKyAqIE90aGVyd2lzZSwgcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgYW5kIHdyaXRlIGFuIGV4cGxhbmF0aW9uIHRvIGVyci4KKyAqIElmIGV4dHJhcyBpcyBub24tTlVMTCwgaXQgaXMgYSBsaXN0IG9mIGFkZGl0aW9uYWwgcmVmbmFtZXMgd2l0aAorICogd2hpY2ggcmVmbmFtZSBpcyBub3QgYWxsb3dlZCB0byBjb25mbGljdC4gSWYgc2tpcCBpcyBub24tTlVMTCwKKyAqIGlnbm9yZSBwb3RlbnRpYWwgY29uZmxpY3RzIHdpdGggcmVmcyBpbiBza2lwIChlLmcuLCBiZWNhdXNlIHRoZXkKKyAqIGFyZSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIGluIHRoZSBzYW1lIG9wZXJhdGlvbikuIEJlaGF2aW9yIGlzCisgKiB1bmRlZmluZWQgaWYgdGhlIHNhbWUgbmFtZSBpcyBsaXN0ZWQgaW4gYm90aCBleHRyYXMgYW5kIHNraXAuCisgKgorICogVHdvIHJlZmVyZW5jZSBuYW1lcyBjb25mbGljdCBpZiBvbmUgb2YgdGhlbSBleGFjdGx5IG1hdGNoZXMgdGhlCisgKiBsZWFkaW5nIGNvbXBvbmVudHMgb2YgdGhlIG90aGVyOyBlLmcuLCAicmVmcy9mb28vYmFyIiBjb25mbGljdHMKKyAqIHdpdGggYm90aCAicmVmcy9mb28iIGFuZCB3aXRoICJyZWZzL2Zvby9iYXIvYmF6IiBidXQgbm90IHdpdGgKKyAqICJyZWZzL2Zvby9iYXIiIG9yICJyZWZzL2Zvby9iYXJiYWRvcyIuCisgKgorICogZXh0cmFzIGFuZCBza2lwIG11c3QgYmUgc29ydGVkLgorICovCitzdGF0aWMgaW50IHZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZShjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmV4dHJhcywKKwkJCQkgICAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpza2lwLAorCQkJCSAgICBzdHJ1Y3QgcmVmX2RpciAqZGlyLAorCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJY29uc3QgY2hhciAqc2xhc2g7CisJaW50IHBvczsKKwlzdHJ1Y3Qgc3RyYnVmIGRpcm5hbWUgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gLTE7CisKKwkvKgorCSAqIEZvciB0aGUgc2FrZSBvZiBjb21tZW50cyBpbiB0aGlzIGZ1bmN0aW9uLCBzdXBwb3NlIHRoYXQKKwkgKiByZWZuYW1lIGlzICJyZWZzL2Zvby9iYXIiLgorCSAqLworCisJYXNzZXJ0KGVycik7CisKKwlzdHJidWZfZ3JvdygmZGlybmFtZSwgc3RybGVuKHJlZm5hbWUpICsgMSk7CisJZm9yIChzbGFzaCA9IHN0cmNocihyZWZuYW1lLCAnLycpOyBzbGFzaDsgc2xhc2ggPSBzdHJjaHIoc2xhc2ggKyAxLCAnLycpKSB7CisJCS8qIEV4cGFuZCBkaXJuYW1lIHRvIHRoZSBuZXcgcHJlZml4LCBub3QgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyBzbGFzaDogKi8KKwkJc3RyYnVmX2FkZCgmZGlybmFtZSwgcmVmbmFtZSArIGRpcm5hbWUubGVuLCBzbGFzaCAtIHJlZm5hbWUgLSBkaXJuYW1lLmxlbik7CisKKwkJLyoKKwkJICogV2UgYXJlIHN0aWxsIGF0IGEgbGVhZGluZyBkaXIgb2YgdGhlIHJlZm5hbWUgKGUuZy4sCisJCSAqICJyZWZzL2ZvbyI7IGlmIHRoZXJlIGlzIGEgcmVmZXJlbmNlIHdpdGggdGhhdCBuYW1lLAorCQkgKiBpdCBpcyBhIGNvbmZsaWN0LCAqdW5sZXNzKiBpdCBpcyBpbiBza2lwLgorCQkgKi8KKwkJaWYgKGRpcikgeworCQkJcG9zID0gc2VhcmNoX3JlZl9kaXIoZGlyLCBkaXJuYW1lLmJ1ZiwgZGlybmFtZS5sZW4pOworCQkJaWYgKHBvcyA+PSAwICYmCisJCQkgICAgKCFza2lwIHx8ICFzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHNraXAsIGRpcm5hbWUuYnVmKSkpIHsKKwkJCQkvKgorCQkJCSAqIFdlIGZvdW5kIGEgcmVmZXJlbmNlIHdob3NlIG5hbWUgaXMKKwkJCQkgKiBhIHByb3BlciBwcmVmaXggb2YgcmVmbmFtZTsgZS5nLiwKKwkJCQkgKiAicmVmcy9mb28iLCBhbmQgaXMgbm90IGluIHNraXAuCisJCQkJICovCisJCQkJc3RyYnVmX2FkZGYoZXJyLCAiJyVzJyBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJyVzJyIsCisJCQkJCSAgICBkaXJuYW1lLmJ1ZiwgcmVmbmFtZSk7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQl9CisKKwkJaWYgKGV4dHJhcyAmJiBzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKGV4dHJhcywgZGlybmFtZS5idWYpICYmCisJCSAgICAoIXNraXAgfHwgIXN0cmluZ19saXN0X2hhc19zdHJpbmcoc2tpcCwgZGlybmFtZS5idWYpKSkgeworCQkJc3RyYnVmX2FkZGYoZXJyLCAiY2Fubm90IHByb2Nlc3MgJyVzJyBhbmQgJyVzJyBhdCB0aGUgc2FtZSB0aW1lIiwKKwkJCQkgICAgcmVmbmFtZSwgZGlybmFtZS5idWYpOworCQkJZ290byBjbGVhbnVwOworCQl9CisKKwkJLyoKKwkJICogT3RoZXJ3aXNlLCB3ZSBjYW4gdHJ5IHRvIGNvbnRpbnVlIG91ciBzZWFyY2ggd2l0aAorCQkgKiB0aGUgbmV4dCBjb21wb25lbnQuIFNvIHRyeSB0byBsb29rIHVwIHRoZQorCQkgKiBkaXJlY3RvcnksIGUuZy4sICJyZWZzL2Zvby8iLiBJZiB3ZSBjb21lIHVwIGVtcHR5LAorCQkgKiB3ZSBrbm93IHRoZXJlIGlzIG5vdGhpbmcgdW5kZXIgdGhpcyB3aG9sZSBwcmVmaXgsCisJCSAqIGJ1dCBldmVuIGluIHRoYXQgY2FzZSB3ZSBzdGlsbCBoYXZlIHRvIGNvbnRpbnVlIHRoZQorCQkgKiBzZWFyY2ggZm9yIGNvbmZsaWN0cyB3aXRoIGV4dHJhcy4KKwkJICovCisJCXN0cmJ1Zl9hZGRjaCgmZGlybmFtZSwgJy8nKTsKKwkJaWYgKGRpcikgeworCQkJcG9zID0gc2VhcmNoX3JlZl9kaXIoZGlyLCBkaXJuYW1lLmJ1ZiwgZGlybmFtZS5sZW4pOworCQkJaWYgKHBvcyA8IDApIHsKKwkJCQkvKgorCQkJCSAqIFRoZXJlIHdhcyBubyBkaXJlY3RvcnkgInJlZnMvZm9vLyIsCisJCQkJICogc28gdGhlcmUgaXMgbm90aGluZyB1bmRlciB0aGlzCisJCQkJICogd2hvbGUgcHJlZml4LiBTbyB0aGVyZSBpcyBubyBuZWVkCisJCQkJICogdG8gY29udGludWUgbG9va2luZyBmb3IgY29uZmxpY3RpbmcKKwkJCQkgKiByZWZlcmVuY2VzLiBCdXQgd2UgbmVlZCB0byBjb250aW51ZQorCQkJCSAqIGxvb2tpbmcgZm9yIGNvbmZsaWN0aW5nIGV4dHJhcy4KKwkJCQkgKi8KKwkJCQlkaXIgPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQlkaXIgPSBnZXRfcmVmX2RpcihkaXItPmVudHJpZXNbcG9zXSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGFyZSBhdCB0aGUgbGVhZiBvZiBvdXIgcmVmbmFtZSAoZS5nLiwgInJlZnMvZm9vL2JhciIpLgorCSAqIFRoZXJlIGlzIG5vIHBvaW50IGluIHNlYXJjaGluZyBmb3IgYSByZWZlcmVuY2Ugd2l0aCB0aGF0CisJICogbmFtZSwgYmVjYXVzZSBhIHJlZm5hbWUgaXNuJ3QgY29uc2lkZXJlZCB0byBjb25mbGljdCB3aXRoCisJICogaXRzZWxmLiBCdXQgd2Ugc3RpbGwgbmVlZCB0byBjaGVjayBmb3IgcmVmZXJlbmNlcyB3aG9zZQorCSAqIG5hbWVzIGFyZSBpbiB0aGUgInJlZnMvZm9vL2Jhci8iIG5hbWVzcGFjZSwgYmVjYXVzZSB0aGV5CisJICogKmRvKiBjb25mbGljdC4KKwkgKi8KKwlzdHJidWZfYWRkc3RyKCZkaXJuYW1lLCByZWZuYW1lICsgZGlybmFtZS5sZW4pOworCXN0cmJ1Zl9hZGRjaCgmZGlybmFtZSwgJy8nKTsKKworCWlmIChkaXIpIHsKKwkJcG9zID0gc2VhcmNoX3JlZl9kaXIoZGlyLCBkaXJuYW1lLmJ1ZiwgZGlybmFtZS5sZW4pOworCisJCWlmIChwb3MgPj0gMCkgeworCQkJLyoKKwkJCSAqIFdlIGZvdW5kIGEgZGlyZWN0b3J5IG5hbWVkICIkcmVmbmFtZS8iCisJCQkgKiAoZS5nLiwgInJlZnMvZm9vL2Jhci8iKS4gSXQgaXMgYSBwcm9ibGVtCisJCQkgKiBpZmYgaXQgY29udGFpbnMgYW55IHJlZiB0aGF0IGlzIG5vdCBpbgorCQkJICogInNraXAiLgorCQkJICovCisJCQlzdHJ1Y3Qgbm9ubWF0Y2hpbmdfcmVmX2RhdGEgZGF0YTsKKworCQkJZGF0YS5za2lwID0gc2tpcDsKKwkJCWRhdGEuY29uZmxpY3RpbmdfcmVmbmFtZSA9IE5VTEw7CisJCQlkaXIgPSBnZXRfcmVmX2RpcihkaXItPmVudHJpZXNbcG9zXSk7CisJCQlzb3J0X3JlZl9kaXIoZGlyKTsKKwkJCWlmIChkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXIoZGlyLCAwLCBub25tYXRjaGluZ19yZWZfZm4sICZkYXRhKSkgeworCQkJCXN0cmJ1Zl9hZGRmKGVyciwgIiclcycgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICclcyciLAorCQkJCQkgICAgZGF0YS5jb25mbGljdGluZ19yZWZuYW1lLCByZWZuYW1lKTsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXh0cmFzKSB7CisJCS8qCisJCSAqIENoZWNrIGZvciBlbnRyaWVzIGluIGV4dHJhcyB0aGF0IHN0YXJ0IHdpdGgKKwkJICogIiRyZWZuYW1lLyIuIFdlIGRvIHRoYXQgYnkgbG9va2luZyBmb3IgdGhlIHBsYWNlCisJCSAqIHdoZXJlICIkcmVmbmFtZS8iIHdvdWxkIGJlIGluc2VydGVkIGluIGV4dHJhcy4gSWYKKwkJICogdGhlcmUgaXMgYW4gZW50cnkgYXQgdGhhdCBwb3NpdGlvbiB0aGF0IHN0YXJ0cyB3aXRoCisJCSAqICIkcmVmbmFtZS8iIGFuZCBpcyBub3QgaW4gc2tpcCwgdGhlbiB3ZSBoYXZlIGEKKwkJICogY29uZmxpY3QuCisJCSAqLworCQlmb3IgKHBvcyA9IHN0cmluZ19saXN0X2ZpbmRfaW5zZXJ0X2luZGV4KGV4dHJhcywgZGlybmFtZS5idWYsIDApOworCQkgICAgIHBvcyA8IGV4dHJhcy0+bnI7IHBvcysrKSB7CisJCQljb25zdCBjaGFyICpleHRyYV9yZWZuYW1lID0gZXh0cmFzLT5pdGVtc1twb3NdLnN0cmluZzsKKworCQkJaWYgKCFzdGFydHNfd2l0aChleHRyYV9yZWZuYW1lLCBkaXJuYW1lLmJ1ZikpCisJCQkJYnJlYWs7CisKKwkJCWlmICghc2tpcCB8fCAhc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhza2lwLCBleHRyYV9yZWZuYW1lKSkgeworCQkJCXN0cmJ1Zl9hZGRmKGVyciwgImNhbm5vdCBwcm9jZXNzICclcycgYW5kICclcycgYXQgdGhlIHNhbWUgdGltZSIsCisJCQkJCSAgICByZWZuYW1lLCBleHRyYV9yZWZuYW1lKTsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCX0KKwl9CisKKwkvKiBObyBjb25mbGljdHMgd2VyZSBmb3VuZCAqLworCXJldCA9IDA7CisKK2NsZWFudXA6CisJc3RyYnVmX3JlbGVhc2UoJmRpcm5hbWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBwYWNrZWRfcmVmX2NhY2hlIHsKKwlzdHJ1Y3QgcmVmX2VudHJ5ICpyb290OworCisJLyoKKwkgKiBDb3VudCBvZiByZWZlcmVuY2VzIHRvIHRoZSBkYXRhIHN0cnVjdHVyZSBpbiB0aGlzIGluc3RhbmNlLAorCSAqIGluY2x1ZGluZyB0aGUgcG9pbnRlciBmcm9tIHJlZl9jYWNoZTo6cGFja2VkIGlmIGFueS4gIFRoZQorCSAqIGRhdGEgd2lsbCBub3QgYmUgZnJlZWQgYXMgbG9uZyBhcyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzCisJICogbm9uemVyby4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgcmVmZXJyZXJzOworCisJLyoKKwkgKiBJZmYgdGhlIHBhY2tlZC1yZWZzIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UgaXMKKwkgKiBjdXJyZW50bHkgbG9ja2VkIGZvciB3cml0aW5nLCB0aGlzIHBvaW50cyBhdCB0aGUgYXNzb2NpYXRlZAorCSAqIGxvY2sgKHdoaWNoIGlzIG93bmVkIGJ5IHNvbWVib2R5IGVsc2UpLiAgVGhlIHJlZmVycmVyIGNvdW50CisJICogaXMgYWxzbyBpbmNyZW1lbnRlZCB3aGVuIHRoZSBmaWxlIGlzIGxvY2tlZCBhbmQgZGVjcmVtZW50ZWQKKwkgKiB3aGVuIGl0IGlzIHVubG9ja2VkLgorCSAqLworCXN0cnVjdCBsb2NrX2ZpbGUgKmxvY2s7CisKKwkvKiBUaGUgbWV0YWRhdGEgZnJvbSB3aGVuIHRoaXMgcGFja2VkLXJlZnMgY2FjaGUgd2FzIHJlYWQgKi8KKwlzdHJ1Y3Qgc3RhdF92YWxpZGl0eSB2YWxpZGl0eTsKK307CisKKy8qCisgKiBGdXR1cmU6IG5lZWQgdG8gYmUgaW4gInN0cnVjdCByZXBvc2l0b3J5IgorICogd2hlbiBkb2luZyBhIGZ1bGwgbGliaWZpY2F0aW9uLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9jYWNoZSB7CisJc3RydWN0IHJlZl9jYWNoZSAqbmV4dDsKKwlzdHJ1Y3QgcmVmX2VudHJ5ICpsb29zZTsKKwlzdHJ1Y3QgcGFja2VkX3JlZl9jYWNoZSAqcGFja2VkOworCS8qCisJICogVGhlIHN1Ym1vZHVsZSBuYW1lLCBvciAiIiBmb3IgdGhlIG1haW4gcmVwby4gIFdlIGFsbG9jYXRlCisJICogbGVuZ3RoIDEgcmF0aGVyIHRoYW4gRkxFWF9BUlJBWSBzbyB0aGF0IHRoZSBtYWluIHJlZl9jYWNoZQorCSAqIGlzIGluaXRpYWxpemVkIGNvcnJlY3RseS4KKwkgKi8KKwljaGFyIG5hbWVbMV07Cit9IHJlZl9jYWNoZSwgKnN1Ym1vZHVsZV9yZWZfY2FjaGVzOworCisvKiBMb2NrIHVzZWQgZm9yIHRoZSBtYWluIHBhY2tlZC1yZWZzIGZpbGU6ICovCitzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBwYWNrbG9jazsKKworLyoKKyAqIEluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mICpwYWNrZWRfcmVmcy4KKyAqLworc3RhdGljIHZvaWQgYWNxdWlyZV9wYWNrZWRfcmVmX2NhY2hlKHN0cnVjdCBwYWNrZWRfcmVmX2NhY2hlICpwYWNrZWRfcmVmcykKK3sKKwlwYWNrZWRfcmVmcy0+cmVmZXJyZXJzKys7Cit9CisKKy8qCisgKiBEZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mICpwYWNrZWRfcmVmcy4gIElmIGl0IGdvZXMgdG8gemVybywKKyAqIGZyZWUgKnBhY2tlZF9yZWZzIGFuZCByZXR1cm4gdHJ1ZTsgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4KKyAqLworc3RhdGljIGludCByZWxlYXNlX3BhY2tlZF9yZWZfY2FjaGUoc3RydWN0IHBhY2tlZF9yZWZfY2FjaGUgKnBhY2tlZF9yZWZzKQoreworCWlmICghLS1wYWNrZWRfcmVmcy0+cmVmZXJyZXJzKSB7CisJCWZyZWVfcmVmX2VudHJ5KHBhY2tlZF9yZWZzLT5yb290KTsKKwkJc3RhdF92YWxpZGl0eV9jbGVhcigmcGFja2VkX3JlZnMtPnZhbGlkaXR5KTsKKwkJZnJlZShwYWNrZWRfcmVmcyk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIHZvaWQgY2xlYXJfcGFja2VkX3JlZl9jYWNoZShzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzKQoreworCWlmIChyZWZzLT5wYWNrZWQpIHsKKwkJc3RydWN0IHBhY2tlZF9yZWZfY2FjaGUgKnBhY2tlZF9yZWZzID0gcmVmcy0+cGFja2VkOworCisJCWlmIChwYWNrZWRfcmVmcy0+bG9jaykKKwkJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IHBhY2tlZC1yZWYgY2FjaGUgY2xlYXJlZCB3aGlsZSBsb2NrZWQiKTsKKwkJcmVmcy0+cGFja2VkID0gTlVMTDsKKwkJcmVsZWFzZV9wYWNrZWRfcmVmX2NhY2hlKHBhY2tlZF9yZWZzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2xvb3NlX3JlZl9jYWNoZShzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzKQoreworCWlmIChyZWZzLT5sb29zZSkgeworCQlmcmVlX3JlZl9lbnRyeShyZWZzLT5sb29zZSk7CisJCXJlZnMtPmxvb3NlID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmX2NhY2hlICpjcmVhdGVfcmVmX2NhY2hlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSkKK3sKKwlpbnQgbGVuOworCXN0cnVjdCByZWZfY2FjaGUgKnJlZnM7CisJaWYgKCFzdWJtb2R1bGUpCisJCXN1Ym1vZHVsZSA9ICIiOworCWxlbiA9IHN0cmxlbihzdWJtb2R1bGUpICsgMTsKKwlyZWZzID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlZl9jYWNoZSkgKyBsZW4pOworCW1lbWNweShyZWZzLT5uYW1lLCBzdWJtb2R1bGUsIGxlbik7CisJcmV0dXJuIHJlZnM7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIGEgcmVmX2NhY2hlIGZvciB0aGUgc3BlY2lmaWVkIHN1Ym1vZHVsZS4gRm9yCisgKiB0aGUgbWFpbiByZXBvc2l0b3J5LCB1c2Ugc3VibW9kdWxlPT1OVUxMLiBUaGUgcmV0dXJuZWQgc3RydWN0dXJlCisgKiB3aWxsIGJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYnV0IG5vdCBuZWNlc3NhcmlseSBwb3B1bGF0ZWQ7IGl0CisgKiBzaG91bGQgbm90IGJlIGZyZWVkLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9jYWNoZSAqZ2V0X3JlZl9jYWNoZShjb25zdCBjaGFyICpzdWJtb2R1bGUpCit7CisJc3RydWN0IHJlZl9jYWNoZSAqcmVmczsKKworCWlmICghc3VibW9kdWxlIHx8ICEqc3VibW9kdWxlKQorCQlyZXR1cm4gJnJlZl9jYWNoZTsKKworCWZvciAocmVmcyA9IHN1Ym1vZHVsZV9yZWZfY2FjaGVzOyByZWZzOyByZWZzID0gcmVmcy0+bmV4dCkKKwkJaWYgKCFzdHJjbXAoc3VibW9kdWxlLCByZWZzLT5uYW1lKSkKKwkJCXJldHVybiByZWZzOworCisJcmVmcyA9IGNyZWF0ZV9yZWZfY2FjaGUoc3VibW9kdWxlKTsKKwlyZWZzLT5uZXh0ID0gc3VibW9kdWxlX3JlZl9jYWNoZXM7CisJc3VibW9kdWxlX3JlZl9jYWNoZXMgPSByZWZzOworCXJldHVybiByZWZzOworfQorCisvKiBUaGUgbGVuZ3RoIG9mIGEgcGVlbGVkIHJlZmVyZW5jZSBsaW5lIGluIHBhY2tlZC1yZWZzLCBpbmNsdWRpbmcgRU9MOiAqLworI2RlZmluZSBQRUVMRURfTElORV9MRU5HVEggNDIKKworLyoKKyAqIFRoZSBwYWNrZWQtcmVmcyBoZWFkZXIgbGluZSB0aGF0IHdlIHdyaXRlIG91dC4gIFBlcmhhcHMgb3RoZXIKKyAqIHRyYWl0cyB3aWxsIGJlIGFkZGVkIGxhdGVyLiAgVGhlIHRyYWlsaW5nIHNwYWNlIGlzIHJlcXVpcmVkLgorICovCitzdGF0aWMgY29uc3QgY2hhciBQQUNLRURfUkVGU19IRUFERVJbXSA9CisJIiMgcGFjay1yZWZzIHdpdGg6IHBlZWxlZCBmdWxseS1wZWVsZWQgXG4iOworCisvKgorICogUGFyc2Ugb25lIGxpbmUgZnJvbSBhIHBhY2tlZC1yZWZzIGZpbGUuICBXcml0ZSB0aGUgU0hBMSB0byBzaGExLgorICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVmbmFtZSB3aXRoaW4gdGhlIGxpbmUgKG51bGwtdGVybWluYXRlZCksCisgKiBvciBOVUxMIGlmIHRoZXJlIHdhcyBhIHByb2JsZW0uCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpwYXJzZV9yZWZfbGluZShzdHJ1Y3Qgc3RyYnVmICpsaW5lLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNvbnN0IGNoYXIgKnJlZjsKKworCS8qCisJICogNDI6IHRoZSBhbnN3ZXIgdG8gZXZlcnl0aGluZy4KKwkgKgorCSAqIEluIHRoaXMgY2FzZSwgaXQgaGFwcGVucyB0byBiZSB0aGUgYW5zd2VyIHRvCisJICogIDQwIChsZW5ndGggb2Ygc2hhMSBoZXggcmVwcmVzZW50YXRpb24pCisJICogICsxIChzcGFjZSBpbiBiZXR3ZWVuIGhleCBhbmQgbmFtZSkKKwkgKiAgKzEgKG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSkKKwkgKi8KKwlpZiAobGluZS0+bGVuIDw9IDQyKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChnZXRfc2hhMV9oZXgobGluZS0+YnVmLCBzaGExKSA8IDApCisJCXJldHVybiBOVUxMOworCWlmICghaXNzcGFjZShsaW5lLT5idWZbNDBdKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZWYgPSBsaW5lLT5idWYgKyA0MTsKKwlpZiAoaXNzcGFjZSgqcmVmKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAobGluZS0+YnVmW2xpbmUtPmxlbiAtIDFdICE9ICdcbicpCisJCXJldHVybiBOVUxMOworCWxpbmUtPmJ1ZlstLWxpbmUtPmxlbl0gPSAwOworCisJcmV0dXJuIHJlZjsKK30KKworLyoKKyAqIFJlYWQgZiwgd2hpY2ggaXMgYSBwYWNrZWQtcmVmcyBmaWxlLCBpbnRvIGRpci4KKyAqCisgKiBBIGNvbW1lbnQgbGluZSBvZiB0aGUgZm9ybSAiIyBwYWNrLXJlZnMgd2l0aDogIiBtYXkgY29udGFpbiB6ZXJvIG9yCisgKiBtb3JlIHRyYWl0cy4gV2UgaW50ZXJwcmV0IHRoZSB0cmFpdHMgYXMgZm9sbG93czoKKyAqCisgKiAgIE5vIHRyYWl0czoKKyAqCisgKiAgICAgIFByb2JhYmx5IG5vIHJlZmVyZW5jZXMgYXJlIHBlZWxlZC4gQnV0IGlmIHRoZSBmaWxlIGNvbnRhaW5zIGEKKyAqICAgICAgcGVlbGVkIHZhbHVlIGZvciBhIHJlZmVyZW5jZSwgd2Ugd2lsbCB1c2UgaXQuCisgKgorICogICBwZWVsZWQ6CisgKgorICogICAgICBSZWZlcmVuY2VzIHVuZGVyICJyZWZzL3RhZ3MvIiwgaWYgdGhleSAqY2FuKiBiZSBwZWVsZWQsICphcmUqCisgKiAgICAgIHBlZWxlZCBpbiB0aGlzIGZpbGUuIFJlZmVyZW5jZXMgb3V0c2lkZSBvZiAicmVmcy90YWdzLyIgYXJlCisgKiAgICAgIHByb2JhYmx5IG5vdCBwZWVsZWQgZXZlbiBpZiB0aGV5IGNvdWxkIGhhdmUgYmVlbiwgYnV0IGlmIHdlIGZpbmQKKyAqICAgICAgYSBwZWVsZWQgdmFsdWUgZm9yIHN1Y2ggYSByZWZlcmVuY2Ugd2Ugd2lsbCB1c2UgaXQuCisgKgorICogICBmdWxseS1wZWVsZWQ6CisgKgorICogICAgICBBbGwgcmVmZXJlbmNlcyBpbiB0aGUgZmlsZSB0aGF0IGNhbiBiZSBwZWVsZWQgYXJlIHBlZWxlZC4KKyAqICAgICAgSW52ZXJzZWx5IChhbmQgdGhpcyBpcyBtb3JlIGltcG9ydGFudCksIGFueSByZWZlcmVuY2VzIGluIHRoZQorICogICAgICBmaWxlIGZvciB3aGljaCBubyBwZWVsZWQgdmFsdWUgaXMgcmVjb3JkZWQgaXMgbm90IHBlZWxhYmxlLiBUaGlzCisgKiAgICAgIHRyYWl0IHNob3VsZCB0eXBpY2FsbHkgYmUgd3JpdHRlbiBhbG9uZ3NpZGUgInBlZWxlZCIgZm9yCisgKiAgICAgIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBjbGllbnRzLCBidXQgd2UgZG8gbm90IHJlcXVpcmUgaXQKKyAqICAgICAgKGkuZS4sICJwZWVsZWQiIGlzIGEgbm8tb3AgaWYgImZ1bGx5LXBlZWxlZCIgaXMgc2V0KS4KKyAqLworc3RhdGljIHZvaWQgcmVhZF9wYWNrZWRfcmVmcyhGSUxFICpmLCBzdHJ1Y3QgcmVmX2RpciAqZGlyKQoreworCXN0cnVjdCByZWZfZW50cnkgKmxhc3QgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCWVudW0geyBQRUVMRURfTk9ORSwgUEVFTEVEX1RBR1MsIFBFRUxFRF9GVUxMWSB9IHBlZWxlZCA9IFBFRUxFRF9OT05FOworCisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoJmxpbmUsIGYsICdcbicpICE9IEVPRikgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljb25zdCBjaGFyICpyZWZuYW1lOworCQljb25zdCBjaGFyICp0cmFpdHM7CisKKwkJaWYgKHNraXBfcHJlZml4KGxpbmUuYnVmLCAiIyBwYWNrLXJlZnMgd2l0aDoiLCAmdHJhaXRzKSkgeworCQkJaWYgKHN0cnN0cih0cmFpdHMsICIgZnVsbHktcGVlbGVkICIpKQorCQkJCXBlZWxlZCA9IFBFRUxFRF9GVUxMWTsKKwkJCWVsc2UgaWYgKHN0cnN0cih0cmFpdHMsICIgcGVlbGVkICIpKQorCQkJCXBlZWxlZCA9IFBFRUxFRF9UQUdTOworCQkJLyogcGVyaGFwcyBvdGhlciB0cmFpdHMgbGF0ZXIgYXMgd2VsbCAqLworCQkJY29udGludWU7CisJCX0KKworCQlyZWZuYW1lID0gcGFyc2VfcmVmX2xpbmUoJmxpbmUsIHNoYTEpOworCQlpZiAocmVmbmFtZSkgeworCQkJaW50IGZsYWcgPSBSRUZfSVNQQUNLRUQ7CisKKwkJCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChyZWZuYW1lLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSkgeworCQkJCWlmICghcmVmbmFtZV9pc19zYWZlKHJlZm5hbWUpKQorCQkJCQlkaWUoInBhY2tlZCByZWZuYW1lIGlzIGRhbmdlcm91czogJXMiLCByZWZuYW1lKTsKKwkJCQloYXNoY2xyKHNoYTEpOworCQkJCWZsYWcgfD0gUkVGX0JBRF9OQU1FIHwgUkVGX0lTQlJPS0VOOworCQkJfQorCQkJbGFzdCA9IGNyZWF0ZV9yZWZfZW50cnkocmVmbmFtZSwgc2hhMSwgZmxhZywgMCk7CisJCQlpZiAocGVlbGVkID09IFBFRUxFRF9GVUxMWSB8fAorCQkJICAgIChwZWVsZWQgPT0gUEVFTEVEX1RBR1MgJiYgc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvdGFncy8iKSkpCisJCQkJbGFzdC0+ZmxhZyB8PSBSRUZfS05PV1NfUEVFTEVEOworCQkJYWRkX3JlZihkaXIsIGxhc3QpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGxhc3QgJiYKKwkJICAgIGxpbmUuYnVmWzBdID09ICdeJyAmJgorCQkgICAgbGluZS5sZW4gPT0gUEVFTEVEX0xJTkVfTEVOR1RIICYmCisJCSAgICBsaW5lLmJ1ZltQRUVMRURfTElORV9MRU5HVEggLSAxXSA9PSAnXG4nICYmCisJCSAgICAhZ2V0X3NoYTFfaGV4KGxpbmUuYnVmICsgMSwgc2hhMSkpIHsKKwkJCWhhc2hjcHkobGFzdC0+dS52YWx1ZS5wZWVsZWQuaGFzaCwgc2hhMSk7CisJCQkvKgorCQkJICogUmVnYXJkbGVzcyBvZiB3aGF0IHRoZSBmaWxlIGhlYWRlciBzYWlkLAorCQkJICogd2UgZGVmaW5pdGVseSBrbm93IHRoZSB2YWx1ZSBvZiAqdGhpcyoKKwkJCSAqIHJlZmVyZW5jZToKKwkJCSAqLworCQkJbGFzdC0+ZmxhZyB8PSBSRUZfS05PV1NfUEVFTEVEOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmxpbmUpOworfQorCisvKgorICogR2V0IHRoZSBwYWNrZWRfcmVmX2NhY2hlIGZvciB0aGUgc3BlY2lmaWVkIHJlZl9jYWNoZSwgY3JlYXRpbmcgaXQKKyAqIGlmIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIHN0cnVjdCBwYWNrZWRfcmVmX2NhY2hlICpnZXRfcGFja2VkX3JlZl9jYWNoZShzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzKQoreworCWNoYXIgKnBhY2tlZF9yZWZzX2ZpbGU7CisKKwlpZiAoKnJlZnMtPm5hbWUpCisJCXBhY2tlZF9yZWZzX2ZpbGUgPSBnaXRfcGF0aGR1cF9zdWJtb2R1bGUocmVmcy0+bmFtZSwgInBhY2tlZC1yZWZzIik7CisJZWxzZQorCQlwYWNrZWRfcmVmc19maWxlID0gZ2l0X3BhdGhkdXAoInBhY2tlZC1yZWZzIik7CisKKwlpZiAocmVmcy0+cGFja2VkICYmCisJICAgICFzdGF0X3ZhbGlkaXR5X2NoZWNrKCZyZWZzLT5wYWNrZWQtPnZhbGlkaXR5LCBwYWNrZWRfcmVmc19maWxlKSkKKwkJY2xlYXJfcGFja2VkX3JlZl9jYWNoZShyZWZzKTsKKworCWlmICghcmVmcy0+cGFja2VkKSB7CisJCUZJTEUgKmY7CisKKwkJcmVmcy0+cGFja2VkID0geGNhbGxvYygxLCBzaXplb2YoKnJlZnMtPnBhY2tlZCkpOworCQlhY3F1aXJlX3BhY2tlZF9yZWZfY2FjaGUocmVmcy0+cGFja2VkKTsKKwkJcmVmcy0+cGFja2VkLT5yb290ID0gY3JlYXRlX2Rpcl9lbnRyeShyZWZzLCAiIiwgMCwgMCk7CisJCWYgPSBmb3BlbihwYWNrZWRfcmVmc19maWxlLCAiciIpOworCQlpZiAoZikgeworCQkJc3RhdF92YWxpZGl0eV91cGRhdGUoJnJlZnMtPnBhY2tlZC0+dmFsaWRpdHksIGZpbGVubyhmKSk7CisJCQlyZWFkX3BhY2tlZF9yZWZzKGYsIGdldF9yZWZfZGlyKHJlZnMtPnBhY2tlZC0+cm9vdCkpOworCQkJZmNsb3NlKGYpOworCQl9CisJfQorCWZyZWUocGFja2VkX3JlZnNfZmlsZSk7CisJcmV0dXJuIHJlZnMtPnBhY2tlZDsKK30KKworc3RhdGljIHN0cnVjdCByZWZfZGlyICpnZXRfcGFja2VkX3JlZl9kaXIoc3RydWN0IHBhY2tlZF9yZWZfY2FjaGUgKnBhY2tlZF9yZWZfY2FjaGUpCit7CisJcmV0dXJuIGdldF9yZWZfZGlyKHBhY2tlZF9yZWZfY2FjaGUtPnJvb3QpOworfQorCitzdGF0aWMgc3RydWN0IHJlZl9kaXIgKmdldF9wYWNrZWRfcmVmcyhzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzKQoreworCXJldHVybiBnZXRfcGFja2VkX3JlZl9kaXIoZ2V0X3BhY2tlZF9yZWZfY2FjaGUocmVmcykpOworfQorCisvKgorICogQWRkIGEgcmVmZXJlbmNlIHRvIHRoZSBpbi1tZW1vcnkgcGFja2VkIHJlZmVyZW5jZSBjYWNoZS4gIFRoaXMgbWF5CisgKiBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGUgcGFja2VkLXJlZnMgZmlsZSBpcyBsb2NrZWQgKHNlZQorICogbG9ja19wYWNrZWRfcmVmcygpKS4gIFRvIGFjdHVhbGx5IHdyaXRlIHRoZSBwYWNrZWQtcmVmcyBmaWxlLCBjYWxsCisgKiBjb21taXRfcGFja2VkX3JlZnMoKS4KKyAqLworc3RhdGljIHZvaWQgYWRkX3BhY2tlZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9jYWNoZSAqcGFja2VkX3JlZl9jYWNoZSA9CisJCWdldF9wYWNrZWRfcmVmX2NhY2hlKCZyZWZfY2FjaGUpOworCisJaWYgKCFwYWNrZWRfcmVmX2NhY2hlLT5sb2NrKQorCQlkaWUoImludGVybmFsIGVycm9yOiBwYWNrZWQgcmVmcyBub3QgbG9ja2VkIik7CisJYWRkX3JlZihnZXRfcGFja2VkX3JlZl9kaXIocGFja2VkX3JlZl9jYWNoZSksCisJCWNyZWF0ZV9yZWZfZW50cnkocmVmbmFtZSwgc2hhMSwgUkVGX0lTUEFDS0VELCAxKSk7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBsb29zZSByZWZlcmVuY2VzIGZyb20gdGhlIG5hbWVzcGFjZSBkaXJuYW1lIGludG8gZGlyCisgKiAod2l0aG91dCByZWN1cnNpbmcpLiAgZGlybmFtZSBtdXN0IGVuZCB3aXRoICcvJy4gIGRpciBtdXN0IGJlIHRoZQorICogZGlyZWN0b3J5IGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gZGlybmFtZS4KKyAqLworc3RhdGljIHZvaWQgcmVhZF9sb29zZV9yZWZzKGNvbnN0IGNoYXIgKmRpcm5hbWUsIHN0cnVjdCByZWZfZGlyICpkaXIpCit7CisJc3RydWN0IHJlZl9jYWNoZSAqcmVmcyA9IGRpci0+cmVmX2NhY2hlOworCURJUiAqZDsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlpbnQgZGlybmFtZWxlbiA9IHN0cmxlbihkaXJuYW1lKTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZm5hbWU7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc2l6ZV90IHBhdGhfYmFzZWxlbjsKKworCWlmICgqcmVmcy0+bmFtZSkKKwkJc3RyYnVmX2dpdF9wYXRoX3N1Ym1vZHVsZSgmcGF0aCwgcmVmcy0+bmFtZSwgIiVzIiwgZGlybmFtZSk7CisJZWxzZQorCQlzdHJidWZfZ2l0X3BhdGgoJnBhdGgsICIlcyIsIGRpcm5hbWUpOworCXBhdGhfYmFzZWxlbiA9IHBhdGgubGVuOworCisJZCA9IG9wZW5kaXIocGF0aC5idWYpOworCWlmICghZCkgeworCQlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJCXJldHVybjsKKwl9CisKKwlzdHJidWZfaW5pdCgmcmVmbmFtZSwgZGlybmFtZWxlbiArIDI1Nyk7CisJc3RyYnVmX2FkZCgmcmVmbmFtZSwgZGlybmFtZSwgZGlybmFtZWxlbik7CisKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJaW50IGZsYWc7CisKKwkJaWYgKGRlLT5kX25hbWVbMF0gPT0gJy4nKQorCQkJY29udGludWU7CisJCWlmIChlbmRzX3dpdGgoZGUtPmRfbmFtZSwgIi5sb2NrIikpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX2FkZHN0cigmcmVmbmFtZSwgZGUtPmRfbmFtZSk7CisJCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsIGRlLT5kX25hbWUpOworCQlpZiAoc3RhdChwYXRoLmJ1ZiwgJnN0KSA8IDApIHsKKwkJCTsgLyogc2lsZW50bHkgaWdub3JlICovCisJCX0gZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJc3RyYnVmX2FkZGNoKCZyZWZuYW1lLCAnLycpOworCQkJYWRkX2VudHJ5X3RvX2RpcihkaXIsCisJCQkJCSBjcmVhdGVfZGlyX2VudHJ5KHJlZnMsIHJlZm5hbWUuYnVmLAorCQkJCQkJCSAgcmVmbmFtZS5sZW4sIDEpKTsKKwkJfSBlbHNlIHsKKwkJCWludCByZWFkX29rOworCisJCQlpZiAoKnJlZnMtPm5hbWUpIHsKKwkJCQloYXNoY2xyKHNoYTEpOworCQkJCWZsYWcgPSAwOworCQkJCXJlYWRfb2sgPSAhcmVzb2x2ZV9naXRsaW5rX3JlZihyZWZzLT5uYW1lLAorCQkJCQkJCSAgICAgICByZWZuYW1lLmJ1Ziwgc2hhMSk7CisJCQl9IGVsc2UgeworCQkJCXJlYWRfb2sgPSAhcmVhZF9yZWZfZnVsbChyZWZuYW1lLmJ1ZiwKKwkJCQkJCQkgUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkJCQkgc2hhMSwgJmZsYWcpOworCQkJfQorCisJCQlpZiAoIXJlYWRfb2spIHsKKwkJCQloYXNoY2xyKHNoYTEpOworCQkJCWZsYWcgfD0gUkVGX0lTQlJPS0VOOworCQkJfSBlbHNlIGlmIChpc19udWxsX3NoYTEoc2hhMSkpIHsKKwkJCQkvKgorCQkJCSAqIEl0IGlzIHNvIGFzdHJvbm9taWNhbGx5IHVubGlrZWx5CisJCQkJICogdGhhdCBOVUxMX1NIQTEgaXMgdGhlIFNIQS0xIG9mIGFuCisJCQkJICogYWN0dWFsIG9iamVjdCB0aGF0IHdlIGNvbnNpZGVyIGl0cworCQkJCSAqIGFwcGVhcmFuY2UgaW4gYSBsb29zZSByZWZlcmVuY2UKKwkJCQkgKiBmaWxlIHRvIGJlIHJlcG8gY29ycnVwdGlvbgorCQkJCSAqIChwcm9iYWJseSBkdWUgdG8gYSBzb2Z0d2FyZSBidWcpLgorCQkJCSAqLworCQkJCWZsYWcgfD0gUkVGX0lTQlJPS0VOOworCQkJfQorCisJCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmbmFtZS5idWYsCisJCQkJCQkgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkpIHsKKwkJCQlpZiAoIXJlZm5hbWVfaXNfc2FmZShyZWZuYW1lLmJ1ZikpCisJCQkJCWRpZSgibG9vc2UgcmVmbmFtZSBpcyBkYW5nZXJvdXM6ICVzIiwgcmVmbmFtZS5idWYpOworCQkJCWhhc2hjbHIoc2hhMSk7CisJCQkJZmxhZyB8PSBSRUZfQkFEX05BTUUgfCBSRUZfSVNCUk9LRU47CisJCQl9CisJCQlhZGRfZW50cnlfdG9fZGlyKGRpciwKKwkJCQkJIGNyZWF0ZV9yZWZfZW50cnkocmVmbmFtZS5idWYsIHNoYTEsIGZsYWcsIDApKTsKKwkJfQorCQlzdHJidWZfc2V0bGVuKCZyZWZuYW1lLCBkaXJuYW1lbGVuKTsKKwkJc3RyYnVmX3NldGxlbigmcGF0aCwgcGF0aF9iYXNlbGVuKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnJlZm5hbWUpOworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwljbG9zZWRpcihkKTsKK30KKworc3RhdGljIHN0cnVjdCByZWZfZGlyICpnZXRfbG9vc2VfcmVmcyhzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzKQoreworCWlmICghcmVmcy0+bG9vc2UpIHsKKwkJLyoKKwkJICogTWFyayB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBjb21wbGV0ZSBiZWNhdXNlIHdlCisJCSAqIGFyZSBhYm91dCB0byByZWFkIHRoZSBvbmx5IHN1YmRpcmVjdG9yeSB0aGF0IGNhbgorCQkgKiBob2xkIHJlZmVyZW5jZXM6CisJCSAqLworCQlyZWZzLT5sb29zZSA9IGNyZWF0ZV9kaXJfZW50cnkocmVmcywgIiIsIDAsIDApOworCQkvKgorCQkgKiBDcmVhdGUgYW4gaW5jb21wbGV0ZSBlbnRyeSBmb3IgInJlZnMvIjoKKwkJICovCisJCWFkZF9lbnRyeV90b19kaXIoZ2V0X3JlZl9kaXIocmVmcy0+bG9vc2UpLAorCQkJCSBjcmVhdGVfZGlyX2VudHJ5KHJlZnMsICJyZWZzLyIsIDUsIDEpKTsKKwl9CisJcmV0dXJuIGdldF9yZWZfZGlyKHJlZnMtPmxvb3NlKTsKK30KKworLyogV2UgYWxsb3cgInJlY3Vyc2l2ZSIgc3ltYm9saWMgcmVmcy4gT25seSB3aXRoaW4gcmVhc29uLCB0aG91Z2ggKi8KKyNkZWZpbmUgTUFYREVQVEggNQorI2RlZmluZSBNQVhSRUZMRU4gKDEwMjQpCisKKy8qCisgKiBDYWxsZWQgYnkgcmVzb2x2ZV9naXRsaW5rX3JlZl9yZWN1cnNpdmUoKSBhZnRlciBpdCBmYWlsZWQgdG8gcmVhZAorICogZnJvbSB0aGUgbG9vc2UgcmVmcyBpbiByZWZfY2FjaGUgcmVmcy4gRmluZCA8cmVmbmFtZT4gaW4gdGhlCisgKiBwYWNrZWQtcmVmcyBmaWxlIGZvciB0aGUgc3VibW9kdWxlLgorICovCitzdGF0aWMgaW50IHJlc29sdmVfZ2l0bGlua19wYWNrZWRfcmVmKHN0cnVjdCByZWZfY2FjaGUgKnJlZnMsCisJCQkJICAgICAgY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgcmVmX2VudHJ5ICpyZWY7CisJc3RydWN0IHJlZl9kaXIgKmRpciA9IGdldF9wYWNrZWRfcmVmcyhyZWZzKTsKKworCXJlZiA9IGZpbmRfcmVmKGRpciwgcmVmbmFtZSk7CisJaWYgKHJlZiA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwloYXNoY3B5KHNoYTEsIHJlZi0+dS52YWx1ZS5vaWQuaGFzaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVzb2x2ZV9naXRsaW5rX3JlZl9yZWN1cnNpdmUoc3RydWN0IHJlZl9jYWNoZSAqcmVmcywKKwkJCQkJIGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJCSBpbnQgcmVjdXJzaW9uKQoreworCWludCBmZCwgbGVuOworCWNoYXIgYnVmZmVyWzEyOF0sICpwOworCWNoYXIgKnBhdGg7CisKKwlpZiAocmVjdXJzaW9uID4gTUFYREVQVEggfHwgc3RybGVuKHJlZm5hbWUpID4gTUFYUkVGTEVOKQorCQlyZXR1cm4gLTE7CisJcGF0aCA9ICpyZWZzLT5uYW1lCisJCT8gZ2l0X3BhdGhkdXBfc3VibW9kdWxlKHJlZnMtPm5hbWUsICIlcyIsIHJlZm5hbWUpCisJCTogZ2l0X3BhdGhkdXAoIiVzIiwgcmVmbmFtZSk7CisJZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKKwlmcmVlKHBhdGgpOworCWlmIChmZCA8IDApCisJCXJldHVybiByZXNvbHZlX2dpdGxpbmtfcGFja2VkX3JlZihyZWZzLCByZWZuYW1lLCBzaGExKTsKKworCWxlbiA9IHJlYWQoZmQsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciktMSk7CisJY2xvc2UoZmQpOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gLTE7CisJd2hpbGUgKGxlbiAmJiBpc3NwYWNlKGJ1ZmZlcltsZW4tMV0pKQorCQlsZW4tLTsKKwlidWZmZXJbbGVuXSA9IDA7CisKKwkvKiBXYXMgaXQgYSBkZXRhY2hlZCBoZWFkIG9yIGFuIG9sZC1mYXNoaW9uZWQgc3ltbGluaz8gKi8KKwlpZiAoIWdldF9zaGExX2hleChidWZmZXIsIHNoYTEpKQorCQlyZXR1cm4gMDsKKworCS8qIFN5bXJlZj8gKi8KKwlpZiAoc3RybmNtcChidWZmZXIsICJyZWY6IiwgNCkpCisJCXJldHVybiAtMTsKKwlwID0gYnVmZmVyICsgNDsKKwl3aGlsZSAoaXNzcGFjZSgqcCkpCisJCXArKzsKKworCXJldHVybiByZXNvbHZlX2dpdGxpbmtfcmVmX3JlY3Vyc2l2ZShyZWZzLCBwLCBzaGExLCByZWN1cnNpb24rMSk7Cit9CisKK2ludCByZXNvbHZlX2dpdGxpbmtfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IGxlbiA9IHN0cmxlbihwYXRoKSwgcmV0dmFsOworCWNoYXIgKnN1Ym1vZHVsZTsKKwlzdHJ1Y3QgcmVmX2NhY2hlICpyZWZzOworCisJd2hpbGUgKGxlbiAmJiBwYXRoW2xlbi0xXSA9PSAnLycpCisJCWxlbi0tOworCWlmICghbGVuKQorCQlyZXR1cm4gLTE7CisJc3VibW9kdWxlID0geHN0cm5kdXAocGF0aCwgbGVuKTsKKwlyZWZzID0gZ2V0X3JlZl9jYWNoZShzdWJtb2R1bGUpOworCWZyZWUoc3VibW9kdWxlKTsKKworCXJldHZhbCA9IHJlc29sdmVfZ2l0bGlua19yZWZfcmVjdXJzaXZlKHJlZnMsIHJlZm5hbWUsIHNoYTEsIDApOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIHJlZl9lbnRyeSBmb3IgdGhlIGdpdmVuIHJlZm5hbWUgZnJvbSB0aGUgcGFja2VkCisgKiByZWZlcmVuY2VzLiAgSWYgaXQgZG9lcyBub3QgZXhpc3QsIHJldHVybiBOVUxMLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9lbnRyeSAqZ2V0X3BhY2tlZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlyZXR1cm4gZmluZF9yZWYoZ2V0X3BhY2tlZF9yZWZzKCZyZWZfY2FjaGUpLCByZWZuYW1lKTsKK30KKworLyoKKyAqIEEgbG9vc2UgcmVmIGZpbGUgZG9lc24ndCBleGlzdDsgY2hlY2sgZm9yIGEgcGFja2VkIHJlZi4gIFRoZQorICogb3B0aW9ucyBhcmUgZm9yd2FyZGVkIGZyb20gcmVzb2x2ZV9zYWZlX3Vuc2FmZSgpLgorICovCitzdGF0aWMgaW50IHJlc29sdmVfbWlzc2luZ19sb29zZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgICAgIGludCByZXNvbHZlX2ZsYWdzLAorCQkJCSAgICAgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgICAgIGludCAqZmxhZ3MpCit7CisJc3RydWN0IHJlZl9lbnRyeSAqZW50cnk7CisKKwkvKgorCSAqIFRoZSBsb29zZSByZWZlcmVuY2UgZmlsZSBkb2VzIG5vdCBleGlzdDsgY2hlY2sgZm9yIGEgcGFja2VkCisJICogcmVmZXJlbmNlLgorCSAqLworCWVudHJ5ID0gZ2V0X3BhY2tlZF9yZWYocmVmbmFtZSk7CisJaWYgKGVudHJ5KSB7CisJCWhhc2hjcHkoc2hhMSwgZW50cnktPnUudmFsdWUub2lkLmhhc2gpOworCQlpZiAoZmxhZ3MpCisJCQkqZmxhZ3MgfD0gUkVGX0lTUEFDS0VEOworCQlyZXR1cm4gMDsKKwl9CisJLyogVGhlIHJlZmVyZW5jZSBpcyBub3QgYSBwYWNrZWQgcmVmZXJlbmNlLCBlaXRoZXIuICovCisJaWYgKHJlc29sdmVfZmxhZ3MgJiBSRVNPTFZFX1JFRl9SRUFESU5HKSB7CisJCWVycm5vID0gRU5PRU5UOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIHsKKwkJaGFzaGNscihzaGExKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKiBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhIG1lYW5pbmdmdWwgZXJybm8gb24gZmFpbHVyZSAqLworc3RhdGljIGNvbnN0IGNoYXIgKnJlc29sdmVfcmVmXzEoY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgaW50IHJlc29sdmVfZmxhZ3MsCisJCQkJIHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJIGludCAqZmxhZ3MsCisJCQkJIHN0cnVjdCBzdHJidWYgKnNiX3JlZm5hbWUsCisJCQkJIHN0cnVjdCBzdHJidWYgKnNiX3BhdGgsCisJCQkJIHN0cnVjdCBzdHJidWYgKnNiX2NvbnRlbnRzKQoreworCWludCBkZXB0aCA9IE1BWERFUFRIOworCWludCBiYWRfbmFtZSA9IDA7CisKKwlpZiAoZmxhZ3MpCisJCSpmbGFncyA9IDA7CisKKwlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVmbmFtZSwgUkVGTkFNRV9BTExPV19PTkVMRVZFTCkpIHsKKwkJaWYgKGZsYWdzKQorCQkJKmZsYWdzIHw9IFJFRl9CQURfTkFNRTsKKworCQlpZiAoIShyZXNvbHZlX2ZsYWdzICYgUkVTT0xWRV9SRUZfQUxMT1dfQkFEX05BTUUpIHx8CisJCSAgICAhcmVmbmFtZV9pc19zYWZlKHJlZm5hbWUpKSB7CisJCQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCS8qCisJCSAqIGR3aW1fcmVmKCkgdXNlcyBSRUZfSVNCUk9LRU4gdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbgorCQkgKiBtaXNzaW5nIHJlZnMgYW5kIHJlZnMgdGhhdCB3ZXJlIHByZXNlbnQgYnV0IGludmFsaWQsCisJCSAqIHRvIGNvbXBsYWluIGFib3V0IHRoZSBsYXR0ZXIgdG8gc3RkZXJyLgorCQkgKgorCQkgKiBXZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHJlZiBleGlzdHMsIHNvIGRvbid0IHNldAorCQkgKiBSRUZfSVNCUk9LRU4geWV0LgorCQkgKi8KKwkJYmFkX25hbWUgPSAxOworCX0KKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKnBhdGg7CisJCXN0cnVjdCBzdGF0IHN0OworCQljaGFyICpidWY7CisJCWludCBmZDsKKworCQlpZiAoLS1kZXB0aCA8IDApIHsKKwkJCWVycm5vID0gRUxPT1A7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCXN0cmJ1Zl9yZXNldChzYl9wYXRoKTsKKwkJc3RyYnVmX2dpdF9wYXRoKHNiX3BhdGgsICIlcyIsIHJlZm5hbWUpOworCQlwYXRoID0gc2JfcGF0aC0+YnVmOworCisJCS8qCisJCSAqIFdlIG1pZ2h0IGhhdmUgdG8gbG9vcCBiYWNrIGhlcmUgdG8gYXZvaWQgYSByYWNlCisJCSAqIGNvbmRpdGlvbjogZmlyc3Qgd2UgbHN0YXQoKSB0aGUgZmlsZSwgdGhlbiB3ZSB0cnkKKwkJICogdG8gcmVhZCBpdCBhcyBhIGxpbmsgb3IgYXMgYSBmaWxlLiAgQnV0IGlmIHNvbWVib2R5CisJCSAqIGNoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIGZpbGUgKGZpbGUgPC0+IGRpcmVjdG9yeQorCQkgKiA8LT4gc3ltbGluaykgYmV0d2VlbiB0aGUgbHN0YXQoKSBhbmQgcmVhZGluZywgdGhlbgorCQkgKiB3ZSBkb24ndCB3YW50IHRvIHJlcG9ydCB0aGF0IGFzIGFuIGVycm9yIGJ1dCByYXRoZXIKKwkJICogdHJ5IGFnYWluIHN0YXJ0aW5nIHdpdGggdGhlIGxzdGF0KCkuCisJCSAqLworCXN0YXRfcmVmOgorCQlpZiAobHN0YXQocGF0aCwgJnN0KSA8IDApIHsKKwkJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlpZiAocmVzb2x2ZV9taXNzaW5nX2xvb3NlX3JlZihyZWZuYW1lLCByZXNvbHZlX2ZsYWdzLAorCQkJCQkJICAgICAgc2hhMSwgZmxhZ3MpKQorCQkJCXJldHVybiBOVUxMOworCQkJaWYgKGJhZF9uYW1lKSB7CisJCQkJaGFzaGNscihzaGExKTsKKwkJCQlpZiAoZmxhZ3MpCisJCQkJCSpmbGFncyB8PSBSRUZfSVNCUk9LRU47CisJCQl9CisJCQlyZXR1cm4gcmVmbmFtZTsKKwkJfQorCisJCS8qIEZvbGxvdyAibm9ybWFsaXplZCIgLSBpZSAicmVmcy8uLiIgc3ltbGlua3MgYnkgaGFuZCAqLworCQlpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJc3RyYnVmX3Jlc2V0KHNiX2NvbnRlbnRzKTsKKwkJCWlmIChzdHJidWZfcmVhZGxpbmsoc2JfY29udGVudHMsIHBhdGgsIDApIDwgMCkgeworCQkJCWlmIChlcnJubyA9PSBFTk9FTlQgfHwgZXJybm8gPT0gRUlOVkFMKQorCQkJCQkvKiBpbmNvbnNpc3RlbnQgd2l0aCBsc3RhdDsgcmV0cnkgKi8KKwkJCQkJZ290byBzdGF0X3JlZjsKKwkJCQllbHNlCisJCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJaWYgKHN0YXJ0c193aXRoKHNiX2NvbnRlbnRzLT5idWYsICJyZWZzLyIpICYmCisJCQkgICAgIWNoZWNrX3JlZm5hbWVfZm9ybWF0KHNiX2NvbnRlbnRzLT5idWYsIDApKSB7CisJCQkJc3RyYnVmX3N3YXAoc2JfcmVmbmFtZSwgc2JfY29udGVudHMpOworCQkJCXJlZm5hbWUgPSBzYl9yZWZuYW1lLT5idWY7CisJCQkJaWYgKGZsYWdzKQorCQkJCQkqZmxhZ3MgfD0gUkVGX0lTU1lNUkVGOworCQkJCWlmIChyZXNvbHZlX2ZsYWdzICYgUkVTT0xWRV9SRUZfTk9fUkVDVVJTRSkgeworCQkJCQloYXNoY2xyKHNoYTEpOworCQkJCQlyZXR1cm4gcmVmbmFtZTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQkvKiBJcyBpdCBhIGRpcmVjdG9yeT8gKi8KKwkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpIHsKKwkJCWVycm5vID0gRUlTRElSOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkvKgorCQkgKiBBbnl0aGluZyBlbHNlLCBqdXN0IG9wZW4gaXQgYW5kIHRyeSB0byB1c2UgaXQgYXMKKwkJICogYSByZWYKKwkJICovCisJCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJCWlmIChmZCA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFTk9FTlQpCisJCQkJLyogaW5jb25zaXN0ZW50IHdpdGggbHN0YXQ7IHJldHJ5ICovCisJCQkJZ290byBzdGF0X3JlZjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlzdHJidWZfcmVzZXQoc2JfY29udGVudHMpOworCQlpZiAoc3RyYnVmX3JlYWQoc2JfY29udGVudHMsIGZkLCAyNTYpIDwgMCkgeworCQkJaW50IHNhdmVfZXJybm8gPSBlcnJubzsKKwkJCWNsb3NlKGZkKTsKKwkJCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWNsb3NlKGZkKTsKKwkJc3RyYnVmX3J0cmltKHNiX2NvbnRlbnRzKTsKKworCQkvKgorCQkgKiBJcyBpdCBhIHN5bWJvbGljIHJlZj8KKwkJICovCisJCWlmICghc3RhcnRzX3dpdGgoc2JfY29udGVudHMtPmJ1ZiwgInJlZjoiKSkgeworCQkJLyoKKwkJCSAqIFBsZWFzZSBub3RlIHRoYXQgRkVUQ0hfSEVBRCBoYXMgYSBzZWNvbmQKKwkJCSAqIGxpbmUgY29udGFpbmluZyBvdGhlciBkYXRhLgorCQkJICovCisJCQlpZiAoZ2V0X3NoYTFfaGV4KHNiX2NvbnRlbnRzLT5idWYsIHNoYTEpIHx8CisJCQkgICAgKHNiX2NvbnRlbnRzLT5idWZbNDBdICE9ICdcMCcgJiYgIWlzc3BhY2Uoc2JfY29udGVudHMtPmJ1Zls0MF0pKSkgeworCQkJCWlmIChmbGFncykKKwkJCQkJKmZsYWdzIHw9IFJFRl9JU0JST0tFTjsKKwkJCQllcnJubyA9IEVJTlZBTDsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWlmIChiYWRfbmFtZSkgeworCQkJCWhhc2hjbHIoc2hhMSk7CisJCQkJaWYgKGZsYWdzKQorCQkJCQkqZmxhZ3MgfD0gUkVGX0lTQlJPS0VOOworCQkJfQorCQkJcmV0dXJuIHJlZm5hbWU7CisJCX0KKwkJaWYgKGZsYWdzKQorCQkJKmZsYWdzIHw9IFJFRl9JU1NZTVJFRjsKKwkJYnVmID0gc2JfY29udGVudHMtPmJ1ZiArIDQ7CisJCXdoaWxlIChpc3NwYWNlKCpidWYpKQorCQkJYnVmKys7CisJCXN0cmJ1Zl9yZXNldChzYl9yZWZuYW1lKTsKKwkJc3RyYnVmX2FkZHN0cihzYl9yZWZuYW1lLCBidWYpOworCQlyZWZuYW1lID0gc2JfcmVmbmFtZS0+YnVmOworCQlpZiAocmVzb2x2ZV9mbGFncyAmIFJFU09MVkVfUkVGX05PX1JFQ1VSU0UpIHsKKwkJCWhhc2hjbHIoc2hhMSk7CisJCQlyZXR1cm4gcmVmbmFtZTsKKwkJfQorCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQoYnVmLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSkgeworCQkJaWYgKGZsYWdzKQorCQkJCSpmbGFncyB8PSBSRUZfSVNCUk9LRU47CisKKwkJCWlmICghKHJlc29sdmVfZmxhZ3MgJiBSRVNPTFZFX1JFRl9BTExPV19CQURfTkFNRSkgfHwKKwkJCSAgICAhcmVmbmFtZV9pc19zYWZlKGJ1ZikpIHsKKwkJCQllcnJubyA9IEVJTlZBTDsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWJhZF9uYW1lID0gMTsKKwkJfQorCX0KK30KKworY29uc3QgY2hhciAqcmVzb2x2ZV9yZWZfdW5zYWZlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLAorCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCAqZmxhZ3MpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgc2JfcmVmbmFtZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgc2JfY29udGVudHMgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNiX3BhdGggPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpyZXQ7CisKKwlyZXQgPSByZXNvbHZlX3JlZl8xKHJlZm5hbWUsIHJlc29sdmVfZmxhZ3MsIHNoYTEsIGZsYWdzLAorCQkJICAgICZzYl9yZWZuYW1lLCAmc2JfcGF0aCwgJnNiX2NvbnRlbnRzKTsKKwlzdHJidWZfcmVsZWFzZSgmc2JfcGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiX2NvbnRlbnRzKTsKKwlyZXR1cm4gcmV0OworfQorCitjaGFyICpyZXNvbHZlX3JlZmR1cChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgcmVzb2x2ZV9mbGFncywKKwkJICAgICB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgKmZsYWdzKQoreworCXJldHVybiB4c3RyZHVwX29yX251bGwocmVzb2x2ZV9yZWZfdW5zYWZlKHJlZm5hbWUsIHJlc29sdmVfZmxhZ3MsCisJCQkJCQkgIHNoYTEsIGZsYWdzKSk7Cit9CisKKy8qIFRoZSBhcmd1bWVudCB0byBmaWx0ZXJfcmVmcyAqLworc3RydWN0IHJlZl9maWx0ZXIgeworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJZWFjaF9yZWZfZm4gKmZuOworCXZvaWQgKmNiX2RhdGE7Cit9OworCitpbnQgcmVhZF9yZWZfZnVsbChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgcmVzb2x2ZV9mbGFncywgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50ICpmbGFncykKK3sKKwlpZiAocmVzb2x2ZV9yZWZfdW5zYWZlKHJlZm5hbWUsIHJlc29sdmVfZmxhZ3MsIHNoYTEsIGZsYWdzKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC0xOworfQorCitpbnQgcmVhZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gcmVhZF9yZWZfZnVsbChyZWZuYW1lLCBSRVNPTFZFX1JFRl9SRUFESU5HLCBzaGExLCBOVUxMKTsKK30KKworaW50IHJlZl9leGlzdHMoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXJldHVybiAhIXJlc29sdmVfcmVmX3Vuc2FmZShyZWZuYW1lLCBSRVNPTFZFX1JFRl9SRUFESU5HLCBzaGExLCBOVUxMKTsKK30KKworc3RhdGljIGludCBmaWx0ZXJfcmVmcyhjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICBpbnQgZmxhZ3MsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJlZl9maWx0ZXIgKmZpbHRlciA9IChzdHJ1Y3QgcmVmX2ZpbHRlciAqKWRhdGE7CisKKwlpZiAod2lsZG1hdGNoKGZpbHRlci0+cGF0dGVybiwgcmVmbmFtZSwgMCwgTlVMTCkpCisJCXJldHVybiAwOworCXJldHVybiBmaWx0ZXItPmZuKHJlZm5hbWUsIG9pZCwgZmxhZ3MsIGZpbHRlci0+Y2JfZGF0YSk7Cit9CisKK2VudW0gcGVlbF9zdGF0dXMgeworCS8qIG9iamVjdCB3YXMgcGVlbGVkIHN1Y2Nlc3NmdWxseTogKi8KKwlQRUVMX1BFRUxFRCA9IDAsCisKKwkvKgorCSAqIG9iamVjdCBjYW5ub3QgYmUgcGVlbGVkIGJlY2F1c2UgdGhlIG5hbWVkIG9iamVjdCAob3IgYW4KKwkgKiBvYmplY3QgcmVmZXJyZWQgdG8gYnkgYSB0YWcgaW4gdGhlIHBlZWwgY2hhaW4pLCBkb2VzIG5vdAorCSAqIGV4aXN0LgorCSAqLworCVBFRUxfSU5WQUxJRCA9IC0xLAorCisJLyogb2JqZWN0IGNhbm5vdCBiZSBwZWVsZWQgYmVjYXVzZSBpdCBpcyBub3QgYSB0YWc6ICovCisJUEVFTF9OT05fVEFHID0gLTIsCisKKwkvKiByZWZfZW50cnkgY29udGFpbnMgbm8gcGVlbGVkIHZhbHVlIGJlY2F1c2UgaXQgaXMgYSBzeW1yZWY6ICovCisJUEVFTF9JU19TWU1SRUYgPSAtMywKKworCS8qCisJICogcmVmX2VudHJ5IGNhbm5vdCBiZSBwZWVsZWQgYmVjYXVzZSBpdCBpcyBicm9rZW4gKGkuZS4sIHRoZQorCSAqIHN5bWJvbGljIHJlZmVyZW5jZSBjYW5ub3QgZXZlbiBiZSByZXNvbHZlZCB0byBhbiBvYmplY3QKKwkgKiBuYW1lKToKKwkgKi8KKwlQRUVMX0JST0tFTiA9IC00Cit9OworCisvKgorICogUGVlbCB0aGUgbmFtZWQgb2JqZWN0OyBpLmUuLCBpZiB0aGUgb2JqZWN0IGlzIGEgdGFnLCByZXNvbHZlIHRoZQorICogdGFnIHJlY3Vyc2l2ZWx5IHVudGlsIGEgbm9uLXRhZyBpcyBmb3VuZC4gIElmIHN1Y2Nlc3NmdWwsIHN0b3JlIHRoZQorICogcmVzdWx0IHRvIHNoYTEgYW5kIHJldHVybiBQRUVMX1BFRUxFRC4gIElmIHRoZSBvYmplY3QgaXMgbm90IGEgdGFnCisgKiBvciBpcyBub3QgdmFsaWQsIHJldHVybiBQRUVMX05PTl9UQUcgb3IgUEVFTF9JTlZBTElELCByZXNwZWN0aXZlbHksCisgKiBhbmQgbGVhdmUgc2hhMSB1bmNoYW5nZWQuCisgKi8KK3N0YXRpYyBlbnVtIHBlZWxfc3RhdHVzIHBlZWxfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG9iamVjdCAqbyA9IGxvb2t1cF91bmtub3duX29iamVjdChuYW1lKTsKKworCWlmIChvLT50eXBlID09IE9CSl9OT05FKSB7CisJCWludCB0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhuYW1lLCBOVUxMKTsKKwkJaWYgKHR5cGUgPCAwIHx8ICFvYmplY3RfYXNfdHlwZShvLCB0eXBlLCAwKSkKKwkJCXJldHVybiBQRUVMX0lOVkFMSUQ7CisJfQorCisJaWYgKG8tPnR5cGUgIT0gT0JKX1RBRykKKwkJcmV0dXJuIFBFRUxfTk9OX1RBRzsKKworCW8gPSBkZXJlZl90YWdfbm92ZXJpZnkobyk7CisJaWYgKCFvKQorCQlyZXR1cm4gUEVFTF9JTlZBTElEOworCisJaGFzaGNweShzaGExLCBvLT5zaGExKTsKKwlyZXR1cm4gUEVFTF9QRUVMRUQ7Cit9CisKKy8qCisgKiBQZWVsIHRoZSBlbnRyeSAoaWYgcG9zc2libGUpIGFuZCByZXR1cm4gaXRzIG5ldyBwZWVsX3N0YXR1cy4gIElmCisgKiByZXBlZWwgaXMgdHJ1ZSwgcmUtcGVlbCB0aGUgZW50cnkgZXZlbiBpZiB0aGVyZSBpcyBhbiBvbGQgcGVlbGVkCisgKiB2YWx1ZSB0aGF0IGlzIGFscmVhZHkgc3RvcmVkIGluIGl0LgorICoKKyAqIEl0IGlzIE9LIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGEgcGFja2VkIHJlZmVyZW5jZSBlbnRyeSB0aGF0CisgKiBtaWdodCBiZSBzdGFsZSBhbmQgbWlnaHQgZXZlbiByZWZlciB0byBhbiBvYmplY3QgdGhhdCBoYXMgc2luY2UKKyAqIGJlZW4gZ2FyYmFnZS1jb2xsZWN0ZWQuICBJbiBzdWNoIGEgY2FzZSwgaWYgdGhlIGVudHJ5IGhhcworICogUkVGX0tOT1dTX1BFRUxFRCB0aGVuIGxlYXZlIHRoZSBzdGF0dXMgdW5jaGFuZ2VkIGFuZCByZXR1cm4KKyAqIFBFRUxfUEVFTEVEIG9yIFBFRUxfTk9OX1RBRzsgb3RoZXJ3aXNlLCByZXR1cm4gUEVFTF9JTlZBTElELgorICovCitzdGF0aWMgZW51bSBwZWVsX3N0YXR1cyBwZWVsX2VudHJ5KHN0cnVjdCByZWZfZW50cnkgKmVudHJ5LCBpbnQgcmVwZWVsKQoreworCWVudW0gcGVlbF9zdGF0dXMgc3RhdHVzOworCisJaWYgKGVudHJ5LT5mbGFnICYgUkVGX0tOT1dTX1BFRUxFRCkgeworCQlpZiAocmVwZWVsKSB7CisJCQllbnRyeS0+ZmxhZyAmPSB+UkVGX0tOT1dTX1BFRUxFRDsKKwkJCW9pZGNscigmZW50cnktPnUudmFsdWUucGVlbGVkKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBpc19udWxsX29pZCgmZW50cnktPnUudmFsdWUucGVlbGVkKSA/CisJCQkJUEVFTF9OT05fVEFHIDogUEVFTF9QRUVMRUQ7CisJCX0KKwl9CisJaWYgKGVudHJ5LT5mbGFnICYgUkVGX0lTQlJPS0VOKQorCQlyZXR1cm4gUEVFTF9CUk9LRU47CisJaWYgKGVudHJ5LT5mbGFnICYgUkVGX0lTU1lNUkVGKQorCQlyZXR1cm4gUEVFTF9JU19TWU1SRUY7CisKKwlzdGF0dXMgPSBwZWVsX29iamVjdChlbnRyeS0+dS52YWx1ZS5vaWQuaGFzaCwgZW50cnktPnUudmFsdWUucGVlbGVkLmhhc2gpOworCWlmIChzdGF0dXMgPT0gUEVFTF9QRUVMRUQgfHwgc3RhdHVzID09IFBFRUxfTk9OX1RBRykKKwkJZW50cnktPmZsYWcgfD0gUkVGX0tOT1dTX1BFRUxFRDsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgcGVlbF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlpbnQgZmxhZzsKKwl1bnNpZ25lZCBjaGFyIGJhc2VbMjBdOworCisJaWYgKGN1cnJlbnRfcmVmICYmIChjdXJyZW50X3JlZi0+bmFtZSA9PSByZWZuYW1lCisJCQkgICAgfHwgIXN0cmNtcChjdXJyZW50X3JlZi0+bmFtZSwgcmVmbmFtZSkpKSB7CisJCWlmIChwZWVsX2VudHJ5KGN1cnJlbnRfcmVmLCAwKSkKKwkJCXJldHVybiAtMTsKKwkJaGFzaGNweShzaGExLCBjdXJyZW50X3JlZi0+dS52YWx1ZS5wZWVsZWQuaGFzaCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChyZWFkX3JlZl9mdWxsKHJlZm5hbWUsIFJFU09MVkVfUkVGX1JFQURJTkcsIGJhc2UsICZmbGFnKSkKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBJZiB0aGUgcmVmZXJlbmNlIGlzIHBhY2tlZCwgcmVhZCBpdHMgcmVmX2VudHJ5IGZyb20gdGhlCisJICogY2FjaGUgaW4gdGhlIGhvcGUgdGhhdCB3ZSBhbHJlYWR5IGtub3cgaXRzIHBlZWxlZCB2YWx1ZS4KKwkgKiBXZSBvbmx5IHRyeSB0aGlzIG9wdGltaXphdGlvbiBvbiBwYWNrZWQgcmVmZXJlbmNlcyBiZWNhdXNlCisJICogKGEpIGZvcmNpbmcgdGhlIGZpbGxpbmcgb2YgdGhlIGxvb3NlIHJlZmVyZW5jZSBjYWNoZSBjb3VsZAorCSAqIGJlIGV4cGVuc2l2ZSBhbmQgKGIpIGxvb3NlIHJlZmVyZW5jZXMgYW55d2F5IHVzdWFsbHkgZG8gbm90CisJICogaGF2ZSBSRUZfS05PV1NfUEVFTEVELgorCSAqLworCWlmIChmbGFnICYgUkVGX0lTUEFDS0VEKSB7CisJCXN0cnVjdCByZWZfZW50cnkgKnIgPSBnZXRfcGFja2VkX3JlZihyZWZuYW1lKTsKKwkJaWYgKHIpIHsKKwkJCWlmIChwZWVsX2VudHJ5KHIsIDApKQorCQkJCXJldHVybiAtMTsKKwkJCWhhc2hjcHkoc2hhMSwgci0+dS52YWx1ZS5wZWVsZWQuaGFzaCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiBwZWVsX29iamVjdChiYXNlLCBzaGExKTsKK30KKworc3RydWN0IHdhcm5faWZfZGFuZ2xpbmdfZGF0YSB7CisJRklMRSAqZnA7CisJY29uc3QgY2hhciAqcmVmbmFtZTsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZm5hbWVzOworCWNvbnN0IGNoYXIgKm1zZ19mbXQ7Cit9OworCitzdGF0aWMgaW50IHdhcm5faWZfZGFuZ2xpbmdfc3ltcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQkgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHdhcm5faWZfZGFuZ2xpbmdfZGF0YSAqZCA9IGNiX2RhdGE7CisJY29uc3QgY2hhciAqcmVzb2x2ZXNfdG87CisJc3RydWN0IG9iamVjdF9pZCBqdW5rOworCisJaWYgKCEoZmxhZ3MgJiBSRUZfSVNTWU1SRUYpKQorCQlyZXR1cm4gMDsKKworCXJlc29sdmVzX3RvID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHJlZm5hbWUsIDAsIGp1bmsuaGFzaCwgTlVMTCk7CisJaWYgKCFyZXNvbHZlc190bworCSAgICB8fCAoZC0+cmVmbmFtZQorCQk/IHN0cmNtcChyZXNvbHZlc190bywgZC0+cmVmbmFtZSkKKwkJOiAhc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhkLT5yZWZuYW1lcywgcmVzb2x2ZXNfdG8pKSkgeworCQlyZXR1cm4gMDsKKwl9CisKKwlmcHJpbnRmKGQtPmZwLCBkLT5tc2dfZm10LCByZWZuYW1lKTsKKwlmcHV0YygnXG4nLCBkLT5mcCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Fybl9kYW5nbGluZ19zeW1yZWYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKm1zZ19mbXQsIGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJc3RydWN0IHdhcm5faWZfZGFuZ2xpbmdfZGF0YSBkYXRhOworCisJZGF0YS5mcCA9IGZwOworCWRhdGEucmVmbmFtZSA9IHJlZm5hbWU7CisJZGF0YS5yZWZuYW1lcyA9IE5VTEw7CisJZGF0YS5tc2dfZm10ID0gbXNnX2ZtdDsKKwlmb3JfZWFjaF9yYXdyZWYod2Fybl9pZl9kYW5nbGluZ19zeW1yZWYsICZkYXRhKTsKK30KKwordm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZnMoRklMRSAqZnAsIGNvbnN0IGNoYXIgKm1zZ19mbXQsIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMpCit7CisJc3RydWN0IHdhcm5faWZfZGFuZ2xpbmdfZGF0YSBkYXRhOworCisJZGF0YS5mcCA9IGZwOworCWRhdGEucmVmbmFtZSA9IE5VTEw7CisJZGF0YS5yZWZuYW1lcyA9IHJlZm5hbWVzOworCWRhdGEubXNnX2ZtdCA9IG1zZ19mbXQ7CisJZm9yX2VhY2hfcmF3cmVmKHdhcm5faWZfZGFuZ2xpbmdfc3ltcmVmLCAmZGF0YSk7Cit9CisKKy8qCisgKiBDYWxsIGZuIGZvciBlYWNoIHJlZmVyZW5jZSBpbiB0aGUgc3BlY2lmaWVkIHJlZl9jYWNoZSwgb21pdHRpbmcKKyAqIHJlZmVyZW5jZXMgbm90IGluIHRoZSBjb250YWluaW5nX2RpciBvZiBiYXNlLiAgZm4gaXMgY2FsbGVkIGZvciBhbGwKKyAqIHJlZmVyZW5jZXMsIGluY2x1ZGluZyBicm9rZW4gb25lcy4gIElmIGZuIGV2ZXIgcmV0dXJucyBhIG5vbi16ZXJvCisgKiB2YWx1ZSwgc3RvcCB0aGUgaXRlcmF0aW9uIGFuZCByZXR1cm4gdGhhdCB2YWx1ZTsgb3RoZXJ3aXNlLCByZXR1cm4KKyAqIDAuCisgKi8KK3N0YXRpYyBpbnQgZG9fZm9yX2VhY2hfZW50cnkoc3RydWN0IHJlZl9jYWNoZSAqcmVmcywgY29uc3QgY2hhciAqYmFzZSwKKwkJCSAgICAgZWFjaF9yZWZfZW50cnlfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHBhY2tlZF9yZWZfY2FjaGUgKnBhY2tlZF9yZWZfY2FjaGU7CisJc3RydWN0IHJlZl9kaXIgKmxvb3NlX2RpcjsKKwlzdHJ1Y3QgcmVmX2RpciAqcGFja2VkX2RpcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCS8qCisJICogV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBhbGwgbG9vc2UgcmVmcyBhcmUgcmVhZCBiZWZvcmUgYWNjZXNzaW5nIHRoZQorCSAqIHBhY2tlZC1yZWZzIGZpbGU7IHRoaXMgYXZvaWRzIGEgcmFjZSBjb25kaXRpb24gaW4gd2hpY2ggbG9vc2UgcmVmcworCSAqIGFyZSBtaWdyYXRlZCB0byB0aGUgcGFja2VkLXJlZnMgZmlsZSBieSBhIHNpbXVsdGFuZW91cyBwcm9jZXNzLCBidXQKKwkgKiBvdXIgaW4tbWVtb3J5IHZpZXcgaXMgZnJvbSBiZWZvcmUgdGhlIG1pZ3JhdGlvbi4gZ2V0X3BhY2tlZF9yZWZfY2FjaGUoKQorCSAqIHRha2VzIGNhcmUgb2YgbWFraW5nIHN1cmUgb3VyIHZpZXcgaXMgdXAgdG8gZGF0ZSB3aXRoIHdoYXQgaXMgb24KKwkgKiBkaXNrLgorCSAqLworCWxvb3NlX2RpciA9IGdldF9sb29zZV9yZWZzKHJlZnMpOworCWlmIChiYXNlICYmICpiYXNlKSB7CisJCWxvb3NlX2RpciA9IGZpbmRfY29udGFpbmluZ19kaXIobG9vc2VfZGlyLCBiYXNlLCAwKTsKKwl9CisJaWYgKGxvb3NlX2RpcikKKwkJcHJpbWVfcmVmX2Rpcihsb29zZV9kaXIpOworCisJcGFja2VkX3JlZl9jYWNoZSA9IGdldF9wYWNrZWRfcmVmX2NhY2hlKHJlZnMpOworCWFjcXVpcmVfcGFja2VkX3JlZl9jYWNoZShwYWNrZWRfcmVmX2NhY2hlKTsKKwlwYWNrZWRfZGlyID0gZ2V0X3BhY2tlZF9yZWZfZGlyKHBhY2tlZF9yZWZfY2FjaGUpOworCWlmIChiYXNlICYmICpiYXNlKSB7CisJCXBhY2tlZF9kaXIgPSBmaW5kX2NvbnRhaW5pbmdfZGlyKHBhY2tlZF9kaXIsIGJhc2UsIDApOworCX0KKworCWlmIChwYWNrZWRfZGlyICYmIGxvb3NlX2RpcikgeworCQlzb3J0X3JlZl9kaXIocGFja2VkX2Rpcik7CisJCXNvcnRfcmVmX2Rpcihsb29zZV9kaXIpOworCQlyZXR2YWwgPSBkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXJzKAorCQkJCXBhY2tlZF9kaXIsIGxvb3NlX2RpciwgZm4sIGNiX2RhdGEpOworCX0gZWxzZSBpZiAocGFja2VkX2RpcikgeworCQlzb3J0X3JlZl9kaXIocGFja2VkX2Rpcik7CisJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcigKKwkJCQlwYWNrZWRfZGlyLCAwLCBmbiwgY2JfZGF0YSk7CisJfSBlbHNlIGlmIChsb29zZV9kaXIpIHsKKwkJc29ydF9yZWZfZGlyKGxvb3NlX2Rpcik7CisJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX2VudHJ5X2luX2RpcigKKwkJCQlsb29zZV9kaXIsIDAsIGZuLCBjYl9kYXRhKTsKKwl9CisKKwlyZWxlYXNlX3BhY2tlZF9yZWZfY2FjaGUocGFja2VkX3JlZl9jYWNoZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoKKyAqIENhbGwgZm4gZm9yIGVhY2ggcmVmZXJlbmNlIGluIHRoZSBzcGVjaWZpZWQgcmVmX2NhY2hlIGZvciB3aGljaCB0aGUKKyAqIHJlZm5hbWUgYmVnaW5zIHdpdGggYmFzZS4gIElmIHRyaW0gaXMgbm9uLXplcm8sIHRoZW4gdHJpbSB0aGF0IG1hbnkKKyAqIGNoYXJhY3RlcnMgb2ZmIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCByZWZuYW1lIGJlZm9yZSBwYXNzaW5nIHRoZQorICogcmVmbmFtZSB0byBmbi4gIGZsYWdzIGNhbiBiZSBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTiB0byBpbmNsdWRlCisgKiBicm9rZW4gcmVmZXJlbmNlcyBpbiB0aGUgaXRlcmF0aW9uLiAgSWYgZm4gZXZlciByZXR1cm5zIGEgbm9uLXplcm8KKyAqIHZhbHVlLCBzdG9wIHRoZSBpdGVyYXRpb24gYW5kIHJldHVybiB0aGF0IHZhbHVlOyBvdGhlcndpc2UsIHJldHVybgorICogMC4KKyAqLworc3RhdGljIGludCBkb19mb3JfZWFjaF9yZWYoc3RydWN0IHJlZl9jYWNoZSAqcmVmcywgY29uc3QgY2hhciAqYmFzZSwKKwkJCSAgIGVhY2hfcmVmX2ZuIGZuLCBpbnQgdHJpbSwgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZWZfZW50cnlfY2IgZGF0YTsKKwlkYXRhLmJhc2UgPSBiYXNlOworCWRhdGEudHJpbSA9IHRyaW07CisJZGF0YS5mbGFncyA9IGZsYWdzOworCWRhdGEuZm4gPSBmbjsKKwlkYXRhLmNiX2RhdGEgPSBjYl9kYXRhOworCisJaWYgKHJlZl9wYXJhbm9pYSA8IDApCisJCXJlZl9wYXJhbm9pYSA9IGdpdF9lbnZfYm9vbCgiR0lUX1JFRl9QQVJBTk9JQSIsIDApOworCWlmIChyZWZfcGFyYW5vaWEpCisJCWRhdGEuZmxhZ3MgfD0gRE9fRk9SX0VBQ0hfSU5DTFVERV9CUk9LRU47CisKKwlyZXR1cm4gZG9fZm9yX2VhY2hfZW50cnkocmVmcywgYmFzZSwgZG9fb25lX3JlZiwgJmRhdGEpOworfQorCitzdGF0aWMgaW50IGRvX2hlYWRfcmVmKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGZsYWc7CisKKwlpZiAoc3VibW9kdWxlKSB7CisJCWlmIChyZXNvbHZlX2dpdGxpbmtfcmVmKHN1Ym1vZHVsZSwgIkhFQUQiLCBvaWQuaGFzaCkgPT0gMCkKKwkJCXJldHVybiBmbigiSEVBRCIsICZvaWQsIDAsIGNiX2RhdGEpOworCisJCXJldHVybiAwOworCX0KKworCWlmICghcmVhZF9yZWZfZnVsbCgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsIG9pZC5oYXNoLCAmZmxhZykpCisJCXJldHVybiBmbigiSEVBRCIsICZvaWQsIGZsYWcsIGNiX2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBoZWFkX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZG9faGVhZF9yZWYoTlVMTCwgZm4sIGNiX2RhdGEpOworfQorCitpbnQgaGVhZF9yZWZfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGRvX2hlYWRfcmVmKHN1Ym1vZHVsZSwgZm4sIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBkb19mb3JfZWFjaF9yZWYoJnJlZl9jYWNoZSwgIiIsIGZuLCAwLCAwLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKGdldF9yZWZfY2FjaGUoc3VibW9kdWxlKSwgIiIsIGZuLCAwLCAwLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX3JlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBkb19mb3JfZWFjaF9yZWYoJnJlZl9jYWNoZSwgcHJlZml4LCBmbiwgc3RybGVuKHByZWZpeCksIDAsIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfZnVsbHJlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhLCB1bnNpZ25lZCBpbnQgYnJva2VuKQoreworCXVuc2lnbmVkIGludCBmbGFnID0gMDsKKworCWlmIChicm9rZW4pCisJCWZsYWcgPSBET19GT1JfRUFDSF9JTkNMVURFX0JST0tFTjsKKwlyZXR1cm4gZG9fZm9yX2VhY2hfcmVmKCZyZWZfY2FjaGUsIHByZWZpeCwgZm4sIDAsIGZsYWcsIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmVmX2luX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZihnZXRfcmVmX2NhY2hlKHN1Ym1vZHVsZSksIHByZWZpeCwgZm4sIHN0cmxlbihwcmVmaXgpLCAwLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX3RhZ19yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGZvcl9lYWNoX3JlZl9pbigicmVmcy90YWdzLyIsIGZuLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX3RhZ19yZWZfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGZvcl9lYWNoX3JlZl9pbl9zdWJtb2R1bGUoc3VibW9kdWxlLCAicmVmcy90YWdzLyIsIGZuLCBjYl9kYXRhKTsKK30KKworaW50IGZvcl9lYWNoX2JyYW5jaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGZvcl9lYWNoX3JlZl9pbigicmVmcy9oZWFkcy8iLCBmbiwgY2JfZGF0YSk7Cit9CisKK2ludCBmb3JfZWFjaF9icmFuY2hfcmVmX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBmb3JfZWFjaF9yZWZfaW5fc3VibW9kdWxlKHN1Ym1vZHVsZSwgInJlZnMvaGVhZHMvIiwgZm4sIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmVtb3RlX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfcmVmX2luKCJyZWZzL3JlbW90ZXMvIiwgZm4sIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmVtb3RlX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfcmVmX2luX3N1Ym1vZHVsZShzdWJtb2R1bGUsICJyZWZzL3JlbW90ZXMvIiwgZm4sIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmVwbGFjZV9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJcmV0dXJuIGRvX2Zvcl9lYWNoX3JlZigmcmVmX2NhY2hlLCBnaXRfcmVwbGFjZV9yZWZfYmFzZSwgZm4sCisJCQkgICAgICAgc3RybGVuKGdpdF9yZXBsYWNlX3JlZl9iYXNlKSwgMCwgY2JfZGF0YSk7Cit9CisKK2ludCBoZWFkX3JlZl9uYW1lc3BhY2VkKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG9iamVjdF9pZCBvaWQ7CisJaW50IGZsYWc7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXNIRUFEIiwgZ2V0X2dpdF9uYW1lc3BhY2UoKSk7CisJaWYgKCFyZWFkX3JlZl9mdWxsKGJ1Zi5idWYsIFJFU09MVkVfUkVGX1JFQURJTkcsIG9pZC5oYXNoLCAmZmxhZykpCisJCXJldCA9IGZuKGJ1Zi5idWYsICZvaWQsIGZsYWcsIGNiX2RhdGEpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGZvcl9lYWNoX25hbWVzcGFjZWRfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldDsKKwlzdHJidWZfYWRkZigmYnVmLCAiJXNyZWZzLyIsIGdldF9naXRfbmFtZXNwYWNlKCkpOworCXJldCA9IGRvX2Zvcl9lYWNoX3JlZigmcmVmX2NhY2hlLCBidWYuYnVmLCBmbiwgMCwgMCwgY2JfZGF0YSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGZvcl9lYWNoX2dsb2JfcmVmX2luKGVhY2hfcmVmX2ZuIGZuLCBjb25zdCBjaGFyICpwYXR0ZXJuLAorCWNvbnN0IGNoYXIgKnByZWZpeCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlYWxfcGF0dGVybiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCByZWZfZmlsdGVyIGZpbHRlcjsKKwlpbnQgcmV0OworCisJaWYgKCFwcmVmaXggJiYgIXN0YXJ0c193aXRoKHBhdHRlcm4sICJyZWZzLyIpKQorCQlzdHJidWZfYWRkc3RyKCZyZWFsX3BhdHRlcm4sICJyZWZzLyIpOworCWVsc2UgaWYgKHByZWZpeCkKKwkJc3RyYnVmX2FkZHN0cigmcmVhbF9wYXR0ZXJuLCBwcmVmaXgpOworCXN0cmJ1Zl9hZGRzdHIoJnJlYWxfcGF0dGVybiwgcGF0dGVybik7CisKKwlpZiAoIWhhc19nbG9iX3NwZWNpYWxzKHBhdHRlcm4pKSB7CisJCS8qIEFwcGVuZCBpbXBsaWVkICcvJyAnKicgaWYgbm90IHByZXNlbnQuICovCisJCXN0cmJ1Zl9jb21wbGV0ZSgmcmVhbF9wYXR0ZXJuLCAnLycpOworCQkvKiBObyBuZWVkIHRvIGNoZWNrIGZvciAnKicsIHRoZXJlIGlzIG5vbmUuICovCisJCXN0cmJ1Zl9hZGRjaCgmcmVhbF9wYXR0ZXJuLCAnKicpOworCX0KKworCWZpbHRlci5wYXR0ZXJuID0gcmVhbF9wYXR0ZXJuLmJ1ZjsKKwlmaWx0ZXIuZm4gPSBmbjsKKwlmaWx0ZXIuY2JfZGF0YSA9IGNiX2RhdGE7CisJcmV0ID0gZm9yX2VhY2hfcmVmKGZpbHRlcl9yZWZzLCAmZmlsdGVyKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWFsX3BhdHRlcm4pOworCXJldHVybiByZXQ7Cit9CisKK2ludCBmb3JfZWFjaF9nbG9iX3JlZihlYWNoX3JlZl9mbiBmbiwgY29uc3QgY2hhciAqcGF0dGVybiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfZ2xvYl9yZWZfaW4oZm4sIHBhdHRlcm4sIE5VTEwsIGNiX2RhdGEpOworfQorCitpbnQgZm9yX2VhY2hfcmF3cmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBkb19mb3JfZWFjaF9yZWYoJnJlZl9jYWNoZSwgIiIsIGZuLCAwLAorCQkJICAgICAgIERPX0ZPUl9FQUNIX0lOQ0xVREVfQlJPS0VOLCBjYl9kYXRhKTsKK30KKworY29uc3QgY2hhciAqcHJldHRpZnlfcmVmbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiBuYW1lICsgKAorCQlzdGFydHNfd2l0aChuYW1lLCAicmVmcy9oZWFkcy8iKSA/IDExIDoKKwkJc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvdGFncy8iKSA/IDEwIDoKKwkJc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvcmVtb3Rlcy8iKSA/IDEzIDoKKwkJMCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZWZfcmV2X3BhcnNlX3J1bGVzW10gPSB7CisJIiUuKnMiLAorCSJyZWZzLyUuKnMiLAorCSJyZWZzL3RhZ3MvJS4qcyIsCisJInJlZnMvaGVhZHMvJS4qcyIsCisJInJlZnMvcmVtb3Rlcy8lLipzIiwKKwkicmVmcy9yZW1vdGVzLyUuKnMvSEVBRCIsCisJTlVMTAorfTsKKworaW50IHJlZm5hbWVfbWF0Y2goY29uc3QgY2hhciAqYWJicmV2X25hbWUsIGNvbnN0IGNoYXIgKmZ1bGxfbmFtZSkKK3sKKwljb25zdCBjaGFyICoqcDsKKwljb25zdCBpbnQgYWJicmV2X25hbWVfbGVuID0gc3RybGVuKGFiYnJldl9uYW1lKTsKKworCWZvciAocCA9IHJlZl9yZXZfcGFyc2VfcnVsZXM7ICpwOyBwKyspIHsKKwkJaWYgKCFzdHJjbXAoZnVsbF9uYW1lLCBta3BhdGgoKnAsIGFiYnJldl9uYW1lX2xlbiwgYWJicmV2X25hbWUpKSkgeworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdW5sb2NrX3JlZihzdHJ1Y3QgcmVmX2xvY2sgKmxvY2spCit7CisJLyogRG8gbm90IGZyZWUgbG9jay0+bGsgLS0gYXRleGl0KCkgc3RpbGwgbG9va3MgYXQgdGhlbSAqLworCWlmIChsb2NrLT5saykKKwkJcm9sbGJhY2tfbG9ja19maWxlKGxvY2stPmxrKTsKKwlmcmVlKGxvY2stPnJlZl9uYW1lKTsKKwlmcmVlKGxvY2stPm9yaWdfcmVmX25hbWUpOworCWZyZWUobG9jayk7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCB0aGUgcmVmZXJlbmNlIGxvY2tlZCBieSBsb2NrIGhhcyB0aGUgdmFsdWUgb2xkX3NoYTEuCisgKiBGYWlsIGlmIHRoZSByZWZlcmVuY2UgZG9lc24ndCBleGlzdCBhbmQgbXVzdGV4aXN0IGlzIHNldC4gUmV0dXJuIDAKKyAqIG9uIHN1Y2Nlc3MuIE9uIGVycm9yLCB3cml0ZSBhbiBlcnJvciBtZXNzYWdlIHRvIGVyciwgc2V0IGVycm5vLCBhbmQKKyAqIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlLgorICovCitzdGF0aWMgaW50IHZlcmlmeV9sb2NrKHN0cnVjdCByZWZfbG9jayAqbG9jaywKKwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLCBpbnQgbXVzdGV4aXN0LAorCQkgICAgICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWFzc2VydChlcnIpOworCisJaWYgKHJlYWRfcmVmX2Z1bGwobG9jay0+cmVmX25hbWUsCisJCQkgIG11c3RleGlzdCA/IFJFU09MVkVfUkVGX1JFQURJTkcgOiAwLAorCQkJICBsb2NrLT5vbGRfb2lkLmhhc2gsIE5VTEwpKSB7CisJCWludCBzYXZlX2Vycm5vID0gZXJybm87CisJCXN0cmJ1Zl9hZGRmKGVyciwgImNhbid0IHZlcmlmeSByZWYgJXMiLCBsb2NrLT5yZWZfbmFtZSk7CisJCWVycm5vID0gc2F2ZV9lcnJubzsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoaGFzaGNtcChsb2NrLT5vbGRfb2lkLmhhc2gsIG9sZF9zaGExKSkgeworCQlzdHJidWZfYWRkZihlcnIsICJyZWYgJXMgaXMgYXQgJXMgYnV0IGV4cGVjdGVkICVzIiwKKwkJCSAgICBsb2NrLT5yZWZfbmFtZSwKKwkJCSAgICBzaGExX3RvX2hleChsb2NrLT5vbGRfb2lkLmhhc2gpLAorCQkJICAgIHNoYTFfdG9faGV4KG9sZF9zaGExKSk7CisJCWVycm5vID0gRUJVU1k7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVtb3ZlX2VtcHR5X2RpcmVjdG9yaWVzKHN0cnVjdCBzdHJidWYgKnBhdGgpCit7CisJLyoKKwkgKiB3ZSB3YW50IHRvIGNyZWF0ZSBhIGZpbGUgYnV0IHRoZXJlIGlzIGEgZGlyZWN0b3J5IHRoZXJlOworCSAqIGlmIHRoYXQgaXMgYW4gZW1wdHkgZGlyZWN0b3J5IChvciBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zCisJICogb25seSBlbXB0eSBkaXJlY3RvcmllcyksIHJlbW92ZSB0aGVtLgorCSAqLworCXJldHVybiByZW1vdmVfZGlyX3JlY3Vyc2l2ZWx5KHBhdGgsIFJFTU9WRV9ESVJfRU1QVFlfT05MWSk7Cit9CisKKy8qCisgKiAqc3RyaW5nIGFuZCAqbGVuIHdpbGwgb25seSBiZSBzdWJzdGl0dXRlZCwgYW5kICpzdHJpbmcgcmV0dXJuZWQgKGZvcgorICogbGF0ZXIgZnJlZSgpaW5nKSBpZiB0aGUgc3RyaW5nIHBhc3NlZCBpbiBpcyBhIG1hZ2ljIHNob3J0LWhhbmQgZm9ybQorICogdG8gbmFtZSBhIGJyYW5jaC4KKyAqLworc3RhdGljIGNoYXIgKnN1YnN0aXR1dGVfYnJhbmNoX25hbWUoY29uc3QgY2hhciAqKnN0cmluZywgaW50ICpsZW4pCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gaW50ZXJwcmV0X2JyYW5jaF9uYW1lKCpzdHJpbmcsICpsZW4sICZidWYpOworCisJaWYgKHJldCA9PSAqbGVuKSB7CisJCXNpemVfdCBzaXplOworCQkqc3RyaW5nID0gc3RyYnVmX2RldGFjaCgmYnVmLCAmc2l6ZSk7CisJCSpsZW4gPSBzaXplOworCQlyZXR1cm4gKGNoYXIgKikqc3RyaW5nOworCX0KKworCXJldHVybiBOVUxMOworfQorCitpbnQgZHdpbV9yZWYoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqcmVmKQoreworCWNoYXIgKmxhc3RfYnJhbmNoID0gc3Vic3RpdHV0ZV9icmFuY2hfbmFtZSgmc3RyLCAmbGVuKTsKKwljb25zdCBjaGFyICoqcCwgKnI7CisJaW50IHJlZnNfZm91bmQgPSAwOworCisJKnJlZiA9IE5VTEw7CisJZm9yIChwID0gcmVmX3Jldl9wYXJzZV9ydWxlczsgKnA7IHArKykgeworCQljaGFyIGZ1bGxyZWZbUEFUSF9NQVhdOworCQl1bnNpZ25lZCBjaGFyIHNoYTFfZnJvbV9yZWZbMjBdOworCQl1bnNpZ25lZCBjaGFyICp0aGlzX3Jlc3VsdDsKKwkJaW50IGZsYWc7CisKKwkJdGhpc19yZXN1bHQgPSByZWZzX2ZvdW5kID8gc2hhMV9mcm9tX3JlZiA6IHNoYTE7CisJCW1rc25wYXRoKGZ1bGxyZWYsIHNpemVvZihmdWxscmVmKSwgKnAsIGxlbiwgc3RyKTsKKwkJciA9IHJlc29sdmVfcmVmX3Vuc2FmZShmdWxscmVmLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCSAgICAgICB0aGlzX3Jlc3VsdCwgJmZsYWcpOworCQlpZiAocikgeworCQkJaWYgKCFyZWZzX2ZvdW5kKyspCisJCQkJKnJlZiA9IHhzdHJkdXAocik7CisJCQlpZiAoIXdhcm5fYW1iaWd1b3VzX3JlZnMpCisJCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoKGZsYWcgJiBSRUZfSVNTWU1SRUYpICYmIHN0cmNtcChmdWxscmVmLCAiSEVBRCIpKSB7CisJCQl3YXJuaW5nKCJpZ25vcmluZyBkYW5nbGluZyBzeW1yZWYgJXMuIiwgZnVsbHJlZik7CisJCX0gZWxzZSBpZiAoKGZsYWcgJiBSRUZfSVNCUk9LRU4pICYmIHN0cmNocihmdWxscmVmLCAnLycpKSB7CisJCQl3YXJuaW5nKCJpZ25vcmluZyBicm9rZW4gcmVmICVzLiIsIGZ1bGxyZWYpOworCQl9CisJfQorCWZyZWUobGFzdF9icmFuY2gpOworCXJldHVybiByZWZzX2ZvdW5kOworfQorCitpbnQgZHdpbV9sb2coY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqbG9nKQoreworCWNoYXIgKmxhc3RfYnJhbmNoID0gc3Vic3RpdHV0ZV9icmFuY2hfbmFtZSgmc3RyLCAmbGVuKTsKKwljb25zdCBjaGFyICoqcDsKKwlpbnQgbG9nc19mb3VuZCA9IDA7CisKKwkqbG9nID0gTlVMTDsKKwlmb3IgKHAgPSByZWZfcmV2X3BhcnNlX3J1bGVzOyAqcDsgcCsrKSB7CisJCXVuc2lnbmVkIGNoYXIgaGFzaFsyMF07CisJCWNoYXIgcGF0aFtQQVRIX01BWF07CisJCWNvbnN0IGNoYXIgKnJlZiwgKml0OworCisJCW1rc25wYXRoKHBhdGgsIHNpemVvZihwYXRoKSwgKnAsIGxlbiwgc3RyKTsKKwkJcmVmID0gcmVzb2x2ZV9yZWZfdW5zYWZlKHBhdGgsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCSBoYXNoLCBOVUxMKTsKKwkJaWYgKCFyZWYpCisJCQljb250aW51ZTsKKwkJaWYgKHJlZmxvZ19leGlzdHMocGF0aCkpCisJCQlpdCA9IHBhdGg7CisJCWVsc2UgaWYgKHN0cmNtcChyZWYsIHBhdGgpICYmIHJlZmxvZ19leGlzdHMocmVmKSkKKwkJCWl0ID0gcmVmOworCQllbHNlCisJCQljb250aW51ZTsKKwkJaWYgKCFsb2dzX2ZvdW5kKyspIHsKKwkJCSpsb2cgPSB4c3RyZHVwKGl0KTsKKwkJCWhhc2hjcHkoc2hhMSwgaGFzaCk7CisJCX0KKwkJaWYgKCF3YXJuX2FtYmlndW91c19yZWZzKQorCQkJYnJlYWs7CisJfQorCWZyZWUobGFzdF9icmFuY2gpOworCXJldHVybiBsb2dzX2ZvdW5kOworfQorCisvKgorICogTG9ja3MgYSByZWYgcmV0dXJuaW5nIHRoZSBsb2NrIG9uIHN1Y2Nlc3MgYW5kIE5VTEwgb24gZmFpbHVyZS4KKyAqIE9uIGZhaWx1cmUgZXJybm8gaXMgc2V0IHRvIHNvbWV0aGluZyBtZWFuaW5nZnVsLgorICovCitzdGF0aWMgc3RydWN0IHJlZl9sb2NrICpsb2NrX3JlZl9zaGExX2Jhc2ljKGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqZXh0cmFzLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpza2lwLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgKnR5cGVfcCwKKwkJCQkJICAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlZl9maWxlID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBvcmlnX3JlZl9maWxlID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqb3JpZ19yZWZuYW1lID0gcmVmbmFtZTsKKwlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2s7CisJaW50IGxhc3RfZXJybm8gPSAwOworCWludCB0eXBlLCBsZmxhZ3M7CisJaW50IG11c3RleGlzdCA9IChvbGRfc2hhMSAmJiAhaXNfbnVsbF9zaGExKG9sZF9zaGExKSk7CisJaW50IHJlc29sdmVfZmxhZ3MgPSAwOworCWludCBhdHRlbXB0c19yZW1haW5pbmcgPSAzOworCisJYXNzZXJ0KGVycik7CisKKwlsb2NrID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlZl9sb2NrKSk7CisKKwlpZiAobXVzdGV4aXN0KQorCQlyZXNvbHZlX2ZsYWdzIHw9IFJFU09MVkVfUkVGX1JFQURJTkc7CisJaWYgKGZsYWdzICYgUkVGX0RFTEVUSU5HKSB7CisJCXJlc29sdmVfZmxhZ3MgfD0gUkVTT0xWRV9SRUZfQUxMT1dfQkFEX05BTUU7CisJCWlmIChmbGFncyAmIFJFRl9OT0RFUkVGKQorCQkJcmVzb2x2ZV9mbGFncyB8PSBSRVNPTFZFX1JFRl9OT19SRUNVUlNFOworCX0KKworCXJlZm5hbWUgPSByZXNvbHZlX3JlZl91bnNhZmUocmVmbmFtZSwgcmVzb2x2ZV9mbGFncywKKwkJCQkgICAgIGxvY2stPm9sZF9vaWQuaGFzaCwgJnR5cGUpOworCWlmICghcmVmbmFtZSAmJiBlcnJubyA9PSBFSVNESVIpIHsKKwkJLyoKKwkJICogd2UgYXJlIHRyeWluZyB0byBsb2NrIGZvbyBidXQgd2UgdXNlZCB0bworCQkgKiBoYXZlIGZvby9iYXIgd2hpY2ggbm93IGRvZXMgbm90IGV4aXN0OworCQkgKiBpdCBpcyBub3JtYWwgZm9yIHRoZSBlbXB0eSBkaXJlY3RvcnkgJ2ZvbycKKwkJICogdG8gcmVtYWluLgorCQkgKi8KKwkJc3RyYnVmX2dpdF9wYXRoKCZvcmlnX3JlZl9maWxlLCAiJXMiLCBvcmlnX3JlZm5hbWUpOworCQlpZiAocmVtb3ZlX2VtcHR5X2RpcmVjdG9yaWVzKCZvcmlnX3JlZl9maWxlKSkgeworCQkJbGFzdF9lcnJubyA9IGVycm5vOworCQkJaWYgKCF2ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUob3JpZ19yZWZuYW1lLCBleHRyYXMsIHNraXAsCisJCQkJCQkgICAgICBnZXRfbG9vc2VfcmVmcygmcmVmX2NhY2hlKSwgZXJyKSkKKwkJCQlzdHJidWZfYWRkZihlcnIsICJ0aGVyZSBhcmUgc3RpbGwgcmVmcyB1bmRlciAnJXMnIiwKKwkJCQkJICAgIG9yaWdfcmVmbmFtZSk7CisJCQlnb3RvIGVycm9yX3JldHVybjsKKwkJfQorCQlyZWZuYW1lID0gcmVzb2x2ZV9yZWZfdW5zYWZlKG9yaWdfcmVmbmFtZSwgcmVzb2x2ZV9mbGFncywKKwkJCQkJICAgICBsb2NrLT5vbGRfb2lkLmhhc2gsICZ0eXBlKTsKKwl9CisJaWYgKHR5cGVfcCkKKwkgICAgKnR5cGVfcCA9IHR5cGU7CisJaWYgKCFyZWZuYW1lKSB7CisJCWxhc3RfZXJybm8gPSBlcnJubzsKKwkJaWYgKGxhc3RfZXJybm8gIT0gRU5PVERJUiB8fAorCQkgICAgIXZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZShvcmlnX3JlZm5hbWUsIGV4dHJhcywgc2tpcCwKKwkJCQkJICAgICAgZ2V0X2xvb3NlX3JlZnMoJnJlZl9jYWNoZSksIGVycikpCisJCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gcmVzb2x2ZSByZWZlcmVuY2UgJXM6ICVzIiwKKwkJCQkgICAgb3JpZ19yZWZuYW1lLCBzdHJlcnJvcihsYXN0X2Vycm5vKSk7CisKKwkJZ290byBlcnJvcl9yZXR1cm47CisJfQorCS8qCisJICogSWYgdGhlIHJlZiBkaWQgbm90IGV4aXN0IGFuZCB3ZSBhcmUgY3JlYXRpbmcgaXQsIG1ha2Ugc3VyZQorCSAqIHRoZXJlIGlzIG5vIGV4aXN0aW5nIHBhY2tlZCByZWYgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBvdXIKKwkgKiByZWZuYW1lLCBub3IgYSBwYWNrZWQgcmVmIHdob3NlIG5hbWUgaXMgYSBwcm9wZXIgcHJlZml4IG9mCisJICogb3VyIHJlZm5hbWUuCisJICovCisJaWYgKGlzX251bGxfb2lkKCZsb2NrLT5vbGRfb2lkKSAmJgorCSAgICB2ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUocmVmbmFtZSwgZXh0cmFzLCBza2lwLAorCQkJCSAgICAgZ2V0X3BhY2tlZF9yZWZzKCZyZWZfY2FjaGUpLCBlcnIpKSB7CisJCWxhc3RfZXJybm8gPSBFTk9URElSOworCQlnb3RvIGVycm9yX3JldHVybjsKKwl9CisKKwlsb2NrLT5sayA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBsb2NrX2ZpbGUpKTsKKworCWxmbGFncyA9IDA7CisJaWYgKGZsYWdzICYgUkVGX05PREVSRUYpIHsKKwkJcmVmbmFtZSA9IG9yaWdfcmVmbmFtZTsKKwkJbGZsYWdzIHw9IExPQ0tfTk9fREVSRUY7CisJfQorCWxvY2stPnJlZl9uYW1lID0geHN0cmR1cChyZWZuYW1lKTsKKwlsb2NrLT5vcmlnX3JlZl9uYW1lID0geHN0cmR1cChvcmlnX3JlZm5hbWUpOworCXN0cmJ1Zl9naXRfcGF0aCgmcmVmX2ZpbGUsICIlcyIsIHJlZm5hbWUpOworCisgcmV0cnk6CisJc3dpdGNoIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzX2NvbnN0KHJlZl9maWxlLmJ1ZikpIHsKKwljYXNlIFNDTERfT0s6CisJCWJyZWFrOyAvKiBzdWNjZXNzICovCisJY2FzZSBTQ0xEX1ZBTklTSEVEOgorCQlpZiAoLS1hdHRlbXB0c19yZW1haW5pbmcgPiAwKQorCQkJZ290byByZXRyeTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJbGFzdF9lcnJubyA9IGVycm5vOworCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgJXMiLAorCQkJICAgIHJlZl9maWxlLmJ1Zik7CisJCWdvdG8gZXJyb3JfcmV0dXJuOworCX0KKworCWlmIChob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKGxvY2stPmxrLCByZWZfZmlsZS5idWYsIGxmbGFncykgPCAwKSB7CisJCWxhc3RfZXJybm8gPSBlcnJubzsKKwkJaWYgKGVycm5vID09IEVOT0VOVCAmJiAtLWF0dGVtcHRzX3JlbWFpbmluZyA+IDApCisJCQkvKgorCQkJICogTWF5YmUgc29tZWJvZHkganVzdCBkZWxldGVkIG9uZSBvZiB0aGUKKwkJCSAqIGRpcmVjdG9yaWVzIGxlYWRpbmcgdG8gcmVmX2ZpbGUuICBUcnkKKwkJCSAqIGFnYWluOgorCQkJICovCisJCQlnb3RvIHJldHJ5OworCQllbHNlIHsKKwkJCXVuYWJsZV90b19sb2NrX21lc3NhZ2UocmVmX2ZpbGUuYnVmLCBlcnJubywgZXJyKTsKKwkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQl9CisJfQorCWlmIChvbGRfc2hhMSAmJiB2ZXJpZnlfbG9jayhsb2NrLCBvbGRfc2hhMSwgbXVzdGV4aXN0LCBlcnIpKSB7CisJCWxhc3RfZXJybm8gPSBlcnJubzsKKwkJZ290byBlcnJvcl9yZXR1cm47CisJfQorCWdvdG8gb3V0OworCisgZXJyb3JfcmV0dXJuOgorCXVubG9ja19yZWYobG9jayk7CisJbG9jayA9IE5VTEw7CisKKyBvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnJlZl9maWxlKTsKKwlzdHJidWZfcmVsZWFzZSgmb3JpZ19yZWZfZmlsZSk7CisJZXJybm8gPSBsYXN0X2Vycm5vOworCXJldHVybiBsb2NrOworfQorCisvKgorICogV3JpdGUgYW4gZW50cnkgdG8gdGhlIHBhY2tlZC1yZWZzIGZpbGUgZm9yIHRoZSBzcGVjaWZpZWQgcmVmbmFtZS4KKyAqIElmIHBlZWxlZCBpcyBub24tTlVMTCwgd3JpdGUgaXQgYXMgdGhlIGVudHJ5J3MgcGVlbGVkIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCB3cml0ZV9wYWNrZWRfZW50cnkoRklMRSAqZmgsIGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqcGVlbGVkKQoreworCWZwcmludGZfb3JfZGllKGZoLCAiJXMgJXNcbiIsIHNoYTFfdG9faGV4KHNoYTEpLCByZWZuYW1lKTsKKwlpZiAocGVlbGVkKQorCQlmcHJpbnRmX29yX2RpZShmaCwgIl4lc1xuIiwgc2hhMV90b19oZXgocGVlbGVkKSk7Cit9CisKKy8qCisgKiBBbiBlYWNoX3JlZl9lbnRyeV9mbiB0aGF0IHdyaXRlcyB0aGUgZW50cnkgdG8gYSBwYWNrZWQtcmVmcyBmaWxlLgorICovCitzdGF0aWMgaW50IHdyaXRlX3BhY2tlZF9lbnRyeV9mbihzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSwgdm9pZCAqY2JfZGF0YSkKK3sKKwllbnVtIHBlZWxfc3RhdHVzIHBlZWxfc3RhdHVzID0gcGVlbF9lbnRyeShlbnRyeSwgMCk7CisKKwlpZiAocGVlbF9zdGF0dXMgIT0gUEVFTF9QRUVMRUQgJiYgcGVlbF9zdGF0dXMgIT0gUEVFTF9OT05fVEFHKQorCQllcnJvcigiaW50ZXJuYWwgZXJyb3I6ICVzIGlzIG5vdCBhIHZhbGlkIHBhY2tlZCByZWZlcmVuY2UhIiwKKwkJICAgICAgZW50cnktPm5hbWUpOworCXdyaXRlX3BhY2tlZF9lbnRyeShjYl9kYXRhLCBlbnRyeS0+bmFtZSwgZW50cnktPnUudmFsdWUub2lkLmhhc2gsCisJCQkgICBwZWVsX3N0YXR1cyA9PSBQRUVMX1BFRUxFRCA/CisJCQkgICBlbnRyeS0+dS52YWx1ZS5wZWVsZWQuaGFzaCA6IE5VTEwpOworCXJldHVybiAwOworfQorCisvKgorICogTG9jayB0aGUgcGFja2VkLXJlZnMgZmlsZSBmb3Igd3JpdGluZy4gRmxhZ3MgaXMgcGFzc2VkIHRvCisgKiBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCkuIFJldHVybiAwIG9uIHN1Y2Nlc3MuIE9uIGVycm9ycywgc2V0CisgKiBlcnJubyBhcHByb3ByaWF0ZWx5IGFuZCByZXR1cm4gYSBub256ZXJvIHZhbHVlLgorICovCitzdGF0aWMgaW50IGxvY2tfcGFja2VkX3JlZnMoaW50IGZsYWdzKQoreworCXN0YXRpYyBpbnQgdGltZW91dF9jb25maWd1cmVkID0gMDsKKwlzdGF0aWMgaW50IHRpbWVvdXRfdmFsdWUgPSAxMDAwOworCisJc3RydWN0IHBhY2tlZF9yZWZfY2FjaGUgKnBhY2tlZF9yZWZfY2FjaGU7CisKKwlpZiAoIXRpbWVvdXRfY29uZmlndXJlZCkgeworCQlnaXRfY29uZmlnX2dldF9pbnQoImNvcmUucGFja2VkcmVmc3RpbWVvdXQiLCAmdGltZW91dF92YWx1ZSk7CisJCXRpbWVvdXRfY29uZmlndXJlZCA9IDE7CisJfQorCisJaWYgKGhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGVfdGltZW91dCgKKwkJCSAgICAmcGFja2xvY2ssIGdpdF9wYXRoKCJwYWNrZWQtcmVmcyIpLAorCQkJICAgIGZsYWdzLCB0aW1lb3V0X3ZhbHVlKSA8IDApCisJCXJldHVybiAtMTsKKwkvKgorCSAqIEdldCB0aGUgY3VycmVudCBwYWNrZWQtcmVmcyB3aGlsZSBob2xkaW5nIHRoZSBsb2NrLiAgSWYgdGhlCisJICogcGFja2VkLXJlZnMgZmlsZSBoYXMgYmVlbiBtb2RpZmllZCBzaW5jZSB3ZSBsYXN0IHJlYWQgaXQsCisJICogdGhpcyB3aWxsIGF1dG9tYXRpY2FsbHkgaW52YWxpZGF0ZSB0aGUgY2FjaGUgYW5kIHJlLXJlYWQKKwkgKiB0aGUgcGFja2VkLXJlZnMgZmlsZS4KKwkgKi8KKwlwYWNrZWRfcmVmX2NhY2hlID0gZ2V0X3BhY2tlZF9yZWZfY2FjaGUoJnJlZl9jYWNoZSk7CisJcGFja2VkX3JlZl9jYWNoZS0+bG9jayA9ICZwYWNrbG9jazsKKwkvKiBJbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZnJlZWQ6ICovCisJYWNxdWlyZV9wYWNrZWRfcmVmX2NhY2hlKHBhY2tlZF9yZWZfY2FjaGUpOworCXJldHVybiAwOworfQorCisvKgorICogV3JpdGUgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgcGFja2VkIHJlZnMgY2FjaGUgZnJvbSBtZW1vcnkgdG8KKyAqIGRpc2suIFRoZSBwYWNrZWQtcmVmcyBmaWxlIG11c3QgYWxyZWFkeSBiZSBsb2NrZWQgZm9yIHdyaXRpbmcgKHNlZQorICogbG9ja19wYWNrZWRfcmVmcygpKS4gUmV0dXJuIHplcm8gb24gc3VjY2Vzcy4gT24gZXJyb3JzLCBzZXQgZXJybm8KKyAqIGFuZCByZXR1cm4gYSBub256ZXJvIHZhbHVlCisgKi8KK3N0YXRpYyBpbnQgY29tbWl0X3BhY2tlZF9yZWZzKHZvaWQpCit7CisJc3RydWN0IHBhY2tlZF9yZWZfY2FjaGUgKnBhY2tlZF9yZWZfY2FjaGUgPQorCQlnZXRfcGFja2VkX3JlZl9jYWNoZSgmcmVmX2NhY2hlKTsKKwlpbnQgZXJyb3IgPSAwOworCWludCBzYXZlX2Vycm5vID0gMDsKKwlGSUxFICpvdXQ7CisKKwlpZiAoIXBhY2tlZF9yZWZfY2FjaGUtPmxvY2spCisJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IHBhY2tlZC1yZWZzIG5vdCBsb2NrZWQiKTsKKworCW91dCA9IGZkb3Blbl9sb2NrX2ZpbGUocGFja2VkX3JlZl9jYWNoZS0+bG9jaywgInciKTsKKwlpZiAoIW91dCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gZmRvcGVuIHBhY2tlZC1yZWZzIGRlc2NyaXB0b3IiKTsKKworCWZwcmludGZfb3JfZGllKG91dCwgIiVzIiwgUEFDS0VEX1JFRlNfSEVBREVSKTsKKwlkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXIoZ2V0X3BhY2tlZF9yZWZfZGlyKHBhY2tlZF9yZWZfY2FjaGUpLAorCQkJCSAwLCB3cml0ZV9wYWNrZWRfZW50cnlfZm4sIG91dCk7CisKKwlpZiAoY29tbWl0X2xvY2tfZmlsZShwYWNrZWRfcmVmX2NhY2hlLT5sb2NrKSkgeworCQlzYXZlX2Vycm5vID0gZXJybm87CisJCWVycm9yID0gLTE7CisJfQorCXBhY2tlZF9yZWZfY2FjaGUtPmxvY2sgPSBOVUxMOworCXJlbGVhc2VfcGFja2VkX3JlZl9jYWNoZShwYWNrZWRfcmVmX2NhY2hlKTsKKwllcnJubyA9IHNhdmVfZXJybm87CisJcmV0dXJuIGVycm9yOworfQorCisvKgorICogUm9sbGJhY2sgdGhlIGxvY2tmaWxlIGZvciB0aGUgcGFja2VkLXJlZnMgZmlsZSwgYW5kIGRpc2NhcmQgdGhlCisgKiBpbi1tZW1vcnkgcGFja2VkIHJlZmVyZW5jZSBjYWNoZS4gIChUaGUgcGFja2VkLXJlZnMgZmlsZSB3aWxsIGJlCisgKiByZWFkIGFuZXcgaWYgaXQgaXMgbmVlZGVkIGFnYWluIGFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLikKKyAqLworc3RhdGljIHZvaWQgcm9sbGJhY2tfcGFja2VkX3JlZnModm9pZCkKK3sKKwlzdHJ1Y3QgcGFja2VkX3JlZl9jYWNoZSAqcGFja2VkX3JlZl9jYWNoZSA9CisJCWdldF9wYWNrZWRfcmVmX2NhY2hlKCZyZWZfY2FjaGUpOworCisJaWYgKCFwYWNrZWRfcmVmX2NhY2hlLT5sb2NrKQorCQlkaWUoImludGVybmFsIGVycm9yOiBwYWNrZWQtcmVmcyBub3QgbG9ja2VkIik7CisJcm9sbGJhY2tfbG9ja19maWxlKHBhY2tlZF9yZWZfY2FjaGUtPmxvY2spOworCXBhY2tlZF9yZWZfY2FjaGUtPmxvY2sgPSBOVUxMOworCXJlbGVhc2VfcGFja2VkX3JlZl9jYWNoZShwYWNrZWRfcmVmX2NhY2hlKTsKKwljbGVhcl9wYWNrZWRfcmVmX2NhY2hlKCZyZWZfY2FjaGUpOworfQorCitzdHJ1Y3QgcmVmX3RvX3BydW5lIHsKKwlzdHJ1Y3QgcmVmX3RvX3BydW5lICpuZXh0OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOworfTsKKworc3RydWN0IHBhY2tfcmVmc19jYl9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJc3RydWN0IHJlZl9kaXIgKnBhY2tlZF9yZWZzOworCXN0cnVjdCByZWZfdG9fcHJ1bmUgKnJlZl90b19wcnVuZTsKK307CisKK3N0YXRpYyBpbnQgaXNfcGVyX3dvcmt0cmVlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lKTsKKworLyoKKyAqIEFuIGVhY2hfcmVmX2VudHJ5X2ZuIHRoYXQgaXMgcnVuIG92ZXIgbG9vc2UgcmVmZXJlbmNlcyBvbmx5LiAgSWYKKyAqIHRoZSBsb29zZSByZWZlcmVuY2UgY2FuIGJlIHBhY2tlZCwgYWRkIGFuIGVudHJ5IGluIHRoZSBwYWNrZWQgcmVmCisgKiBjYWNoZS4gIElmIHRoZSByZWZlcmVuY2Ugc2hvdWxkIGJlIHBydW5lZCwgYWxzbyBhZGQgaXQgdG8KKyAqIHJlZl90b19wcnVuZSBpbiB0aGUgcGFja19yZWZzX2NiX2RhdGEuCisgKi8KK3N0YXRpYyBpbnQgcGFja19pZl9wb3NzaWJsZV9mbihzdHJ1Y3QgcmVmX2VudHJ5ICplbnRyeSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcGFja19yZWZzX2NiX2RhdGEgKmNiID0gY2JfZGF0YTsKKwllbnVtIHBlZWxfc3RhdHVzIHBlZWxfc3RhdHVzOworCXN0cnVjdCByZWZfZW50cnkgKnBhY2tlZF9lbnRyeTsKKwlpbnQgaXNfdGFnX3JlZiA9IHN0YXJ0c193aXRoKGVudHJ5LT5uYW1lLCAicmVmcy90YWdzLyIpOworCisJLyogRG8gbm90IHBhY2sgcGVyLXdvcmt0cmVlIHJlZnM6ICovCisJaWYgKGlzX3Blcl93b3JrdHJlZV9yZWYoZW50cnktPm5hbWUpKQorCQlyZXR1cm4gMDsKKworCS8qIEFMV0FZUyBwYWNrIHRhZ3MgKi8KKwlpZiAoIShjYi0+ZmxhZ3MgJiBQQUNLX1JFRlNfQUxMKSAmJiAhaXNfdGFnX3JlZikKKwkJcmV0dXJuIDA7CisKKwkvKiBEbyBub3QgcGFjayBzeW1ib2xpYyBvciBicm9rZW4gcmVmczogKi8KKwlpZiAoKGVudHJ5LT5mbGFnICYgUkVGX0lTU1lNUkVGKSB8fCAhcmVmX3Jlc29sdmVzX3RvX29iamVjdChlbnRyeSkpCisJCXJldHVybiAwOworCisJLyogQWRkIGEgcGFja2VkIHJlZiBjYWNoZSBlbnRyeSBlcXVpdmFsZW50IHRvIHRoZSBsb29zZSBlbnRyeS4gKi8KKwlwZWVsX3N0YXR1cyA9IHBlZWxfZW50cnkoZW50cnksIDEpOworCWlmIChwZWVsX3N0YXR1cyAhPSBQRUVMX1BFRUxFRCAmJiBwZWVsX3N0YXR1cyAhPSBQRUVMX05PTl9UQUcpCisJCWRpZSgiaW50ZXJuYWwgZXJyb3IgcGVlbGluZyByZWZlcmVuY2UgJXMgKCVzKSIsCisJCSAgICBlbnRyeS0+bmFtZSwgb2lkX3RvX2hleCgmZW50cnktPnUudmFsdWUub2lkKSk7CisJcGFja2VkX2VudHJ5ID0gZmluZF9yZWYoY2ItPnBhY2tlZF9yZWZzLCBlbnRyeS0+bmFtZSk7CisJaWYgKHBhY2tlZF9lbnRyeSkgeworCQkvKiBPdmVyd3JpdGUgZXhpc3RpbmcgcGFja2VkIGVudHJ5IHdpdGggaW5mbyBmcm9tIGxvb3NlIGVudHJ5ICovCisJCXBhY2tlZF9lbnRyeS0+ZmxhZyA9IFJFRl9JU1BBQ0tFRCB8IFJFRl9LTk9XU19QRUVMRUQ7CisJCW9pZGNweSgmcGFja2VkX2VudHJ5LT51LnZhbHVlLm9pZCwgJmVudHJ5LT51LnZhbHVlLm9pZCk7CisJfSBlbHNlIHsKKwkJcGFja2VkX2VudHJ5ID0gY3JlYXRlX3JlZl9lbnRyeShlbnRyeS0+bmFtZSwgZW50cnktPnUudmFsdWUub2lkLmhhc2gsCisJCQkJCQlSRUZfSVNQQUNLRUQgfCBSRUZfS05PV1NfUEVFTEVELCAwKTsKKwkJYWRkX3JlZihjYi0+cGFja2VkX3JlZnMsIHBhY2tlZF9lbnRyeSk7CisJfQorCW9pZGNweSgmcGFja2VkX2VudHJ5LT51LnZhbHVlLnBlZWxlZCwgJmVudHJ5LT51LnZhbHVlLnBlZWxlZCk7CisKKwkvKiBTY2hlZHVsZSB0aGUgbG9vc2UgcmVmZXJlbmNlIGZvciBwcnVuaW5nIGlmIHJlcXVlc3RlZC4gKi8KKwlpZiAoKGNiLT5mbGFncyAmIFBBQ0tfUkVGU19QUlVORSkpIHsKKwkJaW50IG5hbWVsZW4gPSBzdHJsZW4oZW50cnktPm5hbWUpICsgMTsKKwkJc3RydWN0IHJlZl90b19wcnVuZSAqbiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpuKSArIG5hbWVsZW4pOworCQloYXNoY3B5KG4tPnNoYTEsIGVudHJ5LT51LnZhbHVlLm9pZC5oYXNoKTsKKwkJbWVtY3B5KG4tPm5hbWUsIGVudHJ5LT5uYW1lLCBuYW1lbGVuKTsgLyogaW5jbHVkZXMgTlVMICovCisJCW4tPm5leHQgPSBjYi0+cmVmX3RvX3BydW5lOworCQljYi0+cmVmX3RvX3BydW5lID0gbjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZW1vdmUgZW1wdHkgcGFyZW50cywgYnV0IHNwYXJlIHJlZnMvIGFuZCBpbW1lZGlhdGUgc3ViZGlycy4KKyAqIE5vdGU6IG11bmdlcyAqbmFtZS4KKyAqLworc3RhdGljIHZvaWQgdHJ5X3JlbW92ZV9lbXB0eV9wYXJlbnRzKGNoYXIgKm5hbWUpCit7CisJY2hhciAqcCwgKnE7CisJaW50IGk7CisJcCA9IG5hbWU7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeyAvKiByZWZzL3toZWFkcyx0YWdzLC4uLn0vICovCisJCXdoaWxlICgqcCAmJiAqcCAhPSAnLycpCisJCQlwKys7CisJCS8qIHRvbGVyYXRlIGR1cGxpY2F0ZSBzbGFzaGVzOyBzZWUgY2hlY2tfcmVmbmFtZV9mb3JtYXQoKSAqLworCQl3aGlsZSAoKnAgPT0gJy8nKQorCQkJcCsrOworCX0KKwlmb3IgKHEgPSBwOyAqcTsgcSsrKQorCQk7CisJd2hpbGUgKDEpIHsKKwkJd2hpbGUgKHEgPiBwICYmICpxICE9ICcvJykKKwkJCXEtLTsKKwkJd2hpbGUgKHEgPiBwICYmICoocS0xKSA9PSAnLycpCisJCQlxLS07CisJCWlmIChxID09IHApCisJCQlicmVhazsKKwkJKnEgPSAnXDAnOworCQlpZiAocm1kaXIoZ2l0X3BhdGgoIiVzIiwgbmFtZSkpKQorCQkJYnJlYWs7CisJfQorfQorCisvKiBtYWtlIHN1cmUgbm9ib2R5IHRvdWNoZWQgdGhlIHJlZiwgYW5kIHVubGluayAqLworc3RhdGljIHZvaWQgcHJ1bmVfcmVmKHN0cnVjdCByZWZfdG9fcHJ1bmUgKnIpCit7CisJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKworCWlmIChjaGVja19yZWZuYW1lX2Zvcm1hdChyLT5uYW1lLCAwKSkKKwkJcmV0dXJuOworCisJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0cmFuc2FjdGlvbiB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fZGVsZXRlKHRyYW5zYWN0aW9uLCByLT5uYW1lLCByLT5zaGExLAorCQkJCSAgIFJFRl9JU1BSVU5JTkcsIE5VTEwsICZlcnIpIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpKSB7CisJCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlyZXR1cm47CisJfQorCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwl0cnlfcmVtb3ZlX2VtcHR5X3BhcmVudHMoci0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBydW5lX3JlZnMoc3RydWN0IHJlZl90b19wcnVuZSAqcikKK3sKKwl3aGlsZSAocikgeworCQlwcnVuZV9yZWYocik7CisJCXIgPSByLT5uZXh0OworCX0KK30KKworaW50IHBhY2tfcmVmcyh1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHBhY2tfcmVmc19jYl9kYXRhIGNiZGF0YTsKKworCW1lbXNldCgmY2JkYXRhLCAwLCBzaXplb2YoY2JkYXRhKSk7CisJY2JkYXRhLmZsYWdzID0gZmxhZ3M7CisKKwlsb2NrX3BhY2tlZF9yZWZzKExPQ0tfRElFX09OX0VSUk9SKTsKKwljYmRhdGEucGFja2VkX3JlZnMgPSBnZXRfcGFja2VkX3JlZnMoJnJlZl9jYWNoZSk7CisKKwlkb19mb3JfZWFjaF9lbnRyeV9pbl9kaXIoZ2V0X2xvb3NlX3JlZnMoJnJlZl9jYWNoZSksIDAsCisJCQkJIHBhY2tfaWZfcG9zc2libGVfZm4sICZjYmRhdGEpOworCisJaWYgKGNvbW1pdF9wYWNrZWRfcmVmcygpKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBvdmVyd3JpdGUgb2xkIHJlZi1wYWNrIGZpbGUiKTsKKworCXBydW5lX3JlZnMoY2JkYXRhLnJlZl90b19wcnVuZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXdyaXRlIHRoZSBwYWNrZWQtcmVmcyBmaWxlLCBvbWl0dGluZyBhbnkgcmVmcyBsaXN0ZWQgaW4KKyAqICdyZWZuYW1lcycuIE9uIGVycm9yLCBsZWF2ZSBwYWNrZWQtcmVmcyB1bmNoYW5nZWQsIHdyaXRlIGFuIGVycm9yCisgKiBtZXNzYWdlIHRvICdlcnInLCBhbmQgcmV0dXJuIGEgbm9uemVybyB2YWx1ZS4KKyAqCisgKiBUaGUgcmVmcyBpbiAncmVmbmFtZXMnIG5lZWRuJ3QgYmUgc29ydGVkLiBgZXJyYCBtdXN0IG5vdCBiZSBOVUxMLgorICovCitzdGF0aWMgaW50IHJlcGFja193aXRob3V0X3JlZnMoc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcywgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCXN0cnVjdCByZWZfZGlyICpwYWNrZWQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnJlZm5hbWU7CisJaW50IHJldCwgbmVlZHNfcmVwYWNraW5nID0gMCwgcmVtb3ZlZCA9IDA7CisKKwlhc3NlcnQoZXJyKTsKKworCS8qIExvb2sgZm9yIGEgcGFja2VkIHJlZiAqLworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0ocmVmbmFtZSwgcmVmbmFtZXMpIHsKKwkJaWYgKGdldF9wYWNrZWRfcmVmKHJlZm5hbWUtPnN0cmluZykpIHsKKwkJCW5lZWRzX3JlcGFja2luZyA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEF2b2lkIGxvY2tpbmcgaWYgd2UgaGF2ZSBub3RoaW5nIHRvIGRvICovCisJaWYgKCFuZWVkc19yZXBhY2tpbmcpCisJCXJldHVybiAwOyAvKiBubyByZWZuYW1lIGV4aXN0cyBpbiBwYWNrZWQgcmVmcyAqLworCisJaWYgKGxvY2tfcGFja2VkX3JlZnMoMCkpIHsKKwkJdW5hYmxlX3RvX2xvY2tfbWVzc2FnZShnaXRfcGF0aCgicGFja2VkLXJlZnMiKSwgZXJybm8sIGVycik7CisJCXJldHVybiAtMTsKKwl9CisJcGFja2VkID0gZ2V0X3BhY2tlZF9yZWZzKCZyZWZfY2FjaGUpOworCisJLyogUmVtb3ZlIHJlZm5hbWVzIGZyb20gdGhlIGNhY2hlICovCisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShyZWZuYW1lLCByZWZuYW1lcykKKwkJaWYgKHJlbW92ZV9lbnRyeShwYWNrZWQsIHJlZm5hbWUtPnN0cmluZykgIT0gLTEpCisJCQlyZW1vdmVkID0gMTsKKwlpZiAoIXJlbW92ZWQpIHsKKwkJLyoKKwkJICogQWxsIHBhY2tlZCBlbnRyaWVzIGRpc2FwcGVhcmVkIHdoaWxlIHdlIHdlcmUKKwkJICogYWNxdWlyaW5nIHRoZSBsb2NrLgorCQkgKi8KKwkJcm9sbGJhY2tfcGFja2VkX3JlZnMoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogV3JpdGUgd2hhdCByZW1haW5zICovCisJcmV0ID0gY29tbWl0X3BhY2tlZF9yZWZzKCk7CisJaWYgKHJldCkKKwkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIG92ZXJ3cml0ZSBvbGQgcmVmLXBhY2sgZmlsZTogJXMiLAorCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkZWxldGVfcmVmX2xvb3NlKHN0cnVjdCByZWZfbG9jayAqbG9jaywgaW50IGZsYWcsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlhc3NlcnQoZXJyKTsKKworCWlmICghKGZsYWcgJiBSRUZfSVNQQUNLRUQpIHx8IGZsYWcgJiBSRUZfSVNTWU1SRUYpIHsKKwkJLyoKKwkJICogbG9vc2UuICBUaGUgbG9vc2UgZmlsZSBuYW1lIGlzIHRoZSBzYW1lIGFzIHRoZQorCQkgKiBsb2NrZmlsZSBuYW1lLCBtaW51cyAiLmxvY2siOgorCQkgKi8KKwkJY2hhciAqbG9vc2VfZmlsZW5hbWUgPSBnZXRfbG9ja2VkX2ZpbGVfcGF0aChsb2NrLT5sayk7CisJCWludCByZXMgPSB1bmxpbmtfb3JfbXNnKGxvb3NlX2ZpbGVuYW1lLCBlcnIpOworCQlmcmVlKGxvb3NlX2ZpbGVuYW1lKTsKKwkJaWYgKHJlcykKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19wZXJfd29ya3RyZWVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJcmV0dXJuICFzdHJjbXAocmVmbmFtZSwgIkhFQUQiKSB8fAorCQlzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9iaXNlY3QvIik7Cit9CisKK3N0YXRpYyBpbnQgaXNfcHNldWRvcmVmX3N5bnRheChjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWNvbnN0IGNoYXIgKmM7CisKKwlmb3IgKGMgPSByZWZuYW1lOyAqYzsgYysrKSB7CisJCWlmICghaXN1cHBlcigqYykgJiYgKmMgIT0gJy0nICYmICpjICE9ICdfJykKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitlbnVtIHJlZl90eXBlIHJlZl90eXBlKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJaWYgKGlzX3Blcl93b3JrdHJlZV9yZWYocmVmbmFtZSkpCisJCXJldHVybiBSRUZfVFlQRV9QRVJfV09SS1RSRUU7CisJaWYgKGlzX3BzZXVkb3JlZl9zeW50YXgocmVmbmFtZSkpCisJCXJldHVybiBSRUZfVFlQRV9QU0VVRE9SRUY7CisgICAgICAgcmV0dXJuIFJFRl9UWVBFX05PUk1BTDsKK30KKworc3RhdGljIGludCB3cml0ZV9wc2V1ZG9yZWYoY29uc3QgY2hhciAqcHNldWRvcmVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwlpbnQgZmQ7CisJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgbG9jazsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAtMTsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJZmlsZW5hbWUgPSBnaXRfcGF0aCgiJXMiLCBwc2V1ZG9yZWYpOworCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbG9jaywgZmlsZW5hbWUsIExPQ0tfRElFX09OX0VSUk9SKTsKKwlpZiAoZmQgPCAwKSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwgIkNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmc6ICVzIiwKKwkJCSAgICBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChvbGRfc2hhMSkgeworCQl1bnNpZ25lZCBjaGFyIGFjdHVhbF9vbGRfc2hhMVsyMF07CisKKwkJaWYgKHJlYWRfcmVmKHBzZXVkb3JlZiwgYWN0dWFsX29sZF9zaGExKSkKKwkJCWRpZSgiY291bGQgbm90IHJlYWQgcmVmICclcyciLCBwc2V1ZG9yZWYpOworCQlpZiAoaGFzaGNtcChhY3R1YWxfb2xkX3NoYTEsIG9sZF9zaGExKSkgeworCQkJc3RyYnVmX2FkZGYoZXJyLCAiVW5leHBlY3RlZCBzaGExIHdoZW4gd3JpdGluZyAlcyIsIHBzZXVkb3JlZik7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCQkJZ290byBkb25lOworCQl9CisJfQorCisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1Zi5idWYsIGJ1Zi5sZW4pICE9IGJ1Zi5sZW4pIHsKKwkJc3RyYnVmX2FkZGYoZXJyLCAiQ291bGQgbm90IHdyaXRlIHRvICclcyciLCBmaWxlbmFtZSk7CisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwljb21taXRfbG9ja19maWxlKCZsb2NrKTsKKwlyZXQgPSAwOworZG9uZToKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRlbGV0ZV9wc2V1ZG9yZWYoY29uc3QgY2hhciAqcHNldWRvcmVmLCBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSkKK3sKKwlzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBsb2NrOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCisJZmlsZW5hbWUgPSBnaXRfcGF0aCgiJXMiLCBwc2V1ZG9yZWYpOworCisJaWYgKG9sZF9zaGExICYmICFpc19udWxsX3NoYTEob2xkX3NoYTEpKSB7CisJCWludCBmZDsKKwkJdW5zaWduZWQgY2hhciBhY3R1YWxfb2xkX3NoYTFbMjBdOworCisJCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmbG9jaywgZmlsZW5hbWUsCisJCQkJCSAgICAgICBMT0NLX0RJRV9PTl9FUlJPUik7CisJCWlmIChmZCA8IDApCisJCQlkaWVfZXJybm8oXygiQ291bGQgbm90IG9wZW4gJyVzJyBmb3Igd3JpdGluZyIpLCBmaWxlbmFtZSk7CisJCWlmIChyZWFkX3JlZihwc2V1ZG9yZWYsIGFjdHVhbF9vbGRfc2hhMSkpCisJCQlkaWUoImNvdWxkIG5vdCByZWFkIHJlZiAnJXMnIiwgcHNldWRvcmVmKTsKKwkJaWYgKGhhc2hjbXAoYWN0dWFsX29sZF9zaGExLCBvbGRfc2hhMSkpIHsKKwkJCXdhcm5pbmcoIlVuZXhwZWN0ZWQgc2hhMSB3aGVuIGRlbGV0aW5nICVzIiwgcHNldWRvcmVmKTsKKwkJCXJvbGxiYWNrX2xvY2tfZmlsZSgmbG9jayk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQl1bmxpbmsoZmlsZW5hbWUpOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJmxvY2spOworCX0gZWxzZSB7CisJCXVubGluayhmaWxlbmFtZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBkZWxldGVfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKworCWlmIChyZWZfdHlwZShyZWZuYW1lKSA9PSBSRUZfVFlQRV9QU0VVRE9SRUYpCisJCXJldHVybiBkZWxldGVfcHNldWRvcmVmKHJlZm5hbWUsIG9sZF9zaGExKTsKKworCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCWlmICghdHJhbnNhY3Rpb24gfHwKKwkgICAgcmVmX3RyYW5zYWN0aW9uX2RlbGV0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZSwgb2xkX3NoYTEsCisJCQkJICAgZmxhZ3MsIE5VTEwsICZlcnIpIHx8CisJICAgIHJlZl90cmFuc2FjdGlvbl9jb21taXQodHJhbnNhY3Rpb24sICZlcnIpKSB7CisJCWVycm9yKCIlcyIsIGVyci5idWYpOworCQlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlyZXR1cm4gMTsKKwl9CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCXJldHVybiAwOworfQorCitpbnQgZGVsZXRlX3JlZnMoc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCWludCBpLCByZXN1bHQgPSAwOworCisJaWYgKCFyZWZuYW1lcy0+bnIpCisJCXJldHVybiAwOworCisJcmVzdWx0ID0gcmVwYWNrX3dpdGhvdXRfcmVmcyhyZWZuYW1lcywgJmVycik7CisJaWYgKHJlc3VsdCkgeworCQkvKgorCQkgKiBJZiB3ZSBmYWlsZWQgdG8gcmV3cml0ZSB0aGUgcGFja2VkLXJlZnMgZmlsZSwgdGhlbgorCQkgKiBpdCBpcyB1bnNhZmUgdG8gdHJ5IHRvIHJlbW92ZSBsb29zZSByZWZzLCBiZWNhdXNlCisJCSAqIGRvaW5nIHNvIG1pZ2h0IGV4cG9zZSBhbiBvYnNvbGV0ZSBwYWNrZWQgdmFsdWUgZm9yCisJCSAqIGEgcmVmZXJlbmNlIHRoYXQgbWlnaHQgZXZlbiBwb2ludCBhdCBhbiBvYmplY3QgdGhhdAorCQkgKiBoYXMgYmVlbiBnYXJiYWdlIGNvbGxlY3RlZC4KKwkJICovCisJCWlmIChyZWZuYW1lcy0+bnIgPT0gMSkKKwkJCWVycm9yKF8oImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlICVzOiAlcyIpLAorCQkJICAgICAgcmVmbmFtZXMtPml0ZW1zWzBdLnN0cmluZywgZXJyLmJ1Zik7CisJCWVsc2UKKwkJCWVycm9yKF8oImNvdWxkIG5vdCBkZWxldGUgcmVmZXJlbmNlczogJXMiKSwgZXJyLmJ1Zik7CisKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHJlZm5hbWVzLT5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnJlZm5hbWUgPSByZWZuYW1lcy0+aXRlbXNbaV0uc3RyaW5nOworCisJCWlmIChkZWxldGVfcmVmKHJlZm5hbWUsIE5VTEwsIDApKQorCQkJcmVzdWx0IHw9IGVycm9yKF8oImNvdWxkIG5vdCByZW1vdmUgcmVmZXJlbmNlICVzIiksIHJlZm5hbWUpOworCX0KKworb3V0OgorCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBQZW9wbGUgdXNpbmcgY29udHJpYidzIGdpdC1uZXctd29ya2RpciBoYXZlIC5naXQvbG9ncy9yZWZzIC0+CisgKiAvc29tZS9vdGhlci9wYXRoLy5naXQvbG9ncy9yZWZzLCBhbmQgdGhhdCBtYXkgbGl2ZSBvbiBhbm90aGVyIGRldmljZS4KKyAqCisgKiBJT1csIHRvIGF2b2lkIGNyb3NzIGRldmljZSByZW5hbWUgZXJyb3JzLCB0aGUgdGVtcG9yYXJ5IHJlbmFtZWQgbG9nIG11c3QKKyAqIGxpdmUgaW50byBsb2dzL3JlZnMuCisgKi8KKyNkZWZpbmUgVE1QX1JFTkFNRURfTE9HICAibG9ncy9yZWZzLy50bXAtcmVuYW1lZC1sb2ciCisKK3N0YXRpYyBpbnQgcmVuYW1lX3RtcF9sb2coY29uc3QgY2hhciAqbmV3cmVmbmFtZSkKK3sKKwlpbnQgYXR0ZW1wdHNfcmVtYWluaW5nID0gNDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0ID0gLTE7CisKKyByZXRyeToKKwlzdHJidWZfcmVzZXQoJnBhdGgpOworCXN0cmJ1Zl9naXRfcGF0aCgmcGF0aCwgImxvZ3MvJXMiLCBuZXdyZWZuYW1lKTsKKwlzd2l0Y2ggKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QocGF0aC5idWYpKSB7CisJY2FzZSBTQ0xEX09LOgorCQlicmVhazsgLyogc3VjY2VzcyAqLworCWNhc2UgU0NMRF9WQU5JU0hFRDoKKwkJaWYgKC0tYXR0ZW1wdHNfcmVtYWluaW5nID4gMCkKKwkJCWdvdG8gcmV0cnk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCWVycm9yKCJ1bmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSBmb3IgJXMiLCBuZXdyZWZuYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJlbmFtZShnaXRfcGF0aChUTVBfUkVOQU1FRF9MT0cpLCBwYXRoLmJ1ZikpIHsKKwkJaWYgKChlcnJubz09RUlTRElSIHx8IGVycm5vPT1FTk9URElSKSAmJiAtLWF0dGVtcHRzX3JlbWFpbmluZyA+IDApIHsKKwkJCS8qCisJCQkgKiByZW5hbWUoYSwgYikgd2hlbiBiIGlzIGFuIGV4aXN0aW5nCisJCQkgKiBkaXJlY3Rvcnkgb3VnaHQgdG8gcmVzdWx0IGluIElTRElSLCBidXQKKwkJCSAqIFNvbGFyaXMgNS44IGdpdmVzIEVOT1RESVIuICBTaGVlc2guCisJCQkgKi8KKwkJCWlmIChyZW1vdmVfZW1wdHlfZGlyZWN0b3JpZXMoJnBhdGgpKSB7CisJCQkJZXJyb3IoIkRpcmVjdG9yeSBub3QgZW1wdHk6IGxvZ3MvJXMiLCBuZXdyZWZuYW1lKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWdvdG8gcmV0cnk7CisJCX0gZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5UICYmIC0tYXR0ZW1wdHNfcmVtYWluaW5nID4gMCkgeworCQkJLyoKKwkJCSAqIE1heWJlIGFub3RoZXIgcHJvY2VzcyBqdXN0IGRlbGV0ZWQgb25lIG9mCisJCQkgKiB0aGUgZGlyZWN0b3JpZXMgaW4gdGhlIHBhdGggdG8gbmV3cmVmbmFtZS4KKwkJCSAqIFRyeSBhZ2FpbiBmcm9tIHRoZSBiZWdpbm5pbmcuCisJCQkgKi8KKwkJCWdvdG8gcmV0cnk7CisJCX0gZWxzZSB7CisJCQllcnJvcigidW5hYmxlIHRvIG1vdmUgbG9nZmlsZSAiVE1QX1JFTkFNRURfTE9HIiB0byBsb2dzLyVzOiAlcyIsCisJCQkJbmV3cmVmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCXJldCA9IDA7CitvdXQ6CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmVuYW1lX3JlZl9hdmFpbGFibGUoY29uc3QgY2hhciAqb2xkbmFtZSwgY29uc3QgY2hhciAqbmV3bmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc2tpcCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJc3RyaW5nX2xpc3RfaW5zZXJ0KCZza2lwLCBvbGRuYW1lKTsKKwlyZXQgPSAhdmVyaWZ5X3JlZm5hbWVfYXZhaWxhYmxlKG5ld25hbWUsIE5VTEwsICZza2lwLAorCQkJCQlnZXRfcGFja2VkX3JlZnMoJnJlZl9jYWNoZSksICZlcnIpCisJCSYmICF2ZXJpZnlfcmVmbmFtZV9hdmFpbGFibGUobmV3bmFtZSwgTlVMTCwgJnNraXAsCisJCQkJCSAgICAgZ2V0X2xvb3NlX3JlZnMoJnJlZl9jYWNoZSksICZlcnIpOworCWlmICghcmV0KQorCQllcnJvcigiJXMiLCBlcnIuYnVmKTsKKworCXN0cmluZ19saXN0X2NsZWFyKCZza2lwLCAwKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdyaXRlX3JlZl90b19sb2NrZmlsZShzdHJ1Y3QgcmVmX2xvY2sgKmxvY2ssCisJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHN0cnVjdCBzdHJidWYgKmVycik7CitzdGF0aWMgaW50IGNvbW1pdF9yZWZfdXBkYXRlKHN0cnVjdCByZWZfbG9jayAqbG9jaywKKwkJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqbG9nbXNnLAorCQkJICAgICBpbnQgZmxhZ3MsIHN0cnVjdCBzdHJidWYgKmVycik7CisKK2ludCByZW5hbWVfcmVmKGNvbnN0IGNoYXIgKm9sZHJlZm5hbWUsIGNvbnN0IGNoYXIgKm5ld3JlZm5hbWUsIGNvbnN0IGNoYXIgKmxvZ21zZykKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLCBvcmlnX3NoYTFbMjBdOworCWludCBmbGFnID0gMCwgbG9nbW92ZWQgPSAwOworCXN0cnVjdCByZWZfbG9jayAqbG9jazsKKwlzdHJ1Y3Qgc3RhdCBsb2dpbmZvOworCWludCBsb2cgPSAhbHN0YXQoZ2l0X3BhdGgoImxvZ3MvJXMiLCBvbGRyZWZuYW1lKSwgJmxvZ2luZm8pOworCWNvbnN0IGNoYXIgKnN5bXJlZiA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKworCWlmIChsb2cgJiYgU19JU0xOSyhsb2dpbmZvLnN0X21vZGUpKQorCQlyZXR1cm4gZXJyb3IoInJlZmxvZyBmb3IgJXMgaXMgYSBzeW1saW5rIiwgb2xkcmVmbmFtZSk7CisKKwlzeW1yZWYgPSByZXNvbHZlX3JlZl91bnNhZmUob2xkcmVmbmFtZSwgUkVTT0xWRV9SRUZfUkVBRElORywKKwkJCQkgICAgb3JpZ19zaGExLCAmZmxhZyk7CisJaWYgKGZsYWcgJiBSRUZfSVNTWU1SRUYpCisJCXJldHVybiBlcnJvcigicmVmbmFtZSAlcyBpcyBhIHN5bWJvbGljIHJlZiwgcmVuYW1pbmcgaXQgaXMgbm90IHN1cHBvcnRlZCIsCisJCQlvbGRyZWZuYW1lKTsKKwlpZiAoIXN5bXJlZikKKwkJcmV0dXJuIGVycm9yKCJyZWZuYW1lICVzIG5vdCBmb3VuZCIsIG9sZHJlZm5hbWUpOworCisJaWYgKCFyZW5hbWVfcmVmX2F2YWlsYWJsZShvbGRyZWZuYW1lLCBuZXdyZWZuYW1lKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAobG9nICYmIHJlbmFtZShnaXRfcGF0aCgibG9ncy8lcyIsIG9sZHJlZm5hbWUpLCBnaXRfcGF0aChUTVBfUkVOQU1FRF9MT0cpKSkKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gbW92ZSBsb2dmaWxlIGxvZ3MvJXMgdG8gIlRNUF9SRU5BTUVEX0xPRyI6ICVzIiwKKwkJCW9sZHJlZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisKKwlpZiAoZGVsZXRlX3JlZihvbGRyZWZuYW1lLCBvcmlnX3NoYTEsIFJFRl9OT0RFUkVGKSkgeworCQllcnJvcigidW5hYmxlIHRvIGRlbGV0ZSBvbGQgJXMiLCBvbGRyZWZuYW1lKTsKKwkJZ290byByb2xsYmFjazsKKwl9CisKKwlpZiAoIXJlYWRfcmVmX2Z1bGwobmV3cmVmbmFtZSwgUkVTT0xWRV9SRUZfUkVBRElORywgc2hhMSwgTlVMTCkgJiYKKwkgICAgZGVsZXRlX3JlZihuZXdyZWZuYW1lLCBzaGExLCBSRUZfTk9ERVJFRikpIHsKKwkJaWYgKGVycm5vPT1FSVNESVIpIHsKKwkJCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCQkJaW50IHJlc3VsdDsKKworCQkJc3RyYnVmX2dpdF9wYXRoKCZwYXRoLCAiJXMiLCBuZXdyZWZuYW1lKTsKKwkJCXJlc3VsdCA9IHJlbW92ZV9lbXB0eV9kaXJlY3RvcmllcygmcGF0aCk7CisJCQlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisKKwkJCWlmIChyZXN1bHQpIHsKKwkJCQllcnJvcigiRGlyZWN0b3J5IG5vdCBlbXB0eTogJXMiLCBuZXdyZWZuYW1lKTsKKwkJCQlnb3RvIHJvbGxiYWNrOworCQkJfQorCQl9IGVsc2UgeworCQkJZXJyb3IoInVuYWJsZSB0byBkZWxldGUgZXhpc3RpbmcgJXMiLCBuZXdyZWZuYW1lKTsKKwkJCWdvdG8gcm9sbGJhY2s7CisJCX0KKwl9CisKKwlpZiAobG9nICYmIHJlbmFtZV90bXBfbG9nKG5ld3JlZm5hbWUpKQorCQlnb3RvIHJvbGxiYWNrOworCisJbG9nbW92ZWQgPSBsb2c7CisKKwlsb2NrID0gbG9ja19yZWZfc2hhMV9iYXNpYyhuZXdyZWZuYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBOVUxMLCAmZXJyKTsKKwlpZiAoIWxvY2spIHsKKwkJZXJyb3IoInVuYWJsZSB0byByZW5hbWUgJyVzJyB0byAnJXMnOiAlcyIsIG9sZHJlZm5hbWUsIG5ld3JlZm5hbWUsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJZ290byByb2xsYmFjazsKKwl9CisJaGFzaGNweShsb2NrLT5vbGRfb2lkLmhhc2gsIG9yaWdfc2hhMSk7CisKKwlpZiAod3JpdGVfcmVmX3RvX2xvY2tmaWxlKGxvY2ssIG9yaWdfc2hhMSwgJmVycikgfHwKKwkgICAgY29tbWl0X3JlZl91cGRhdGUobG9jaywgb3JpZ19zaGExLCBsb2dtc2csIDAsICZlcnIpKSB7CisJCWVycm9yKCJ1bmFibGUgdG8gd3JpdGUgY3VycmVudCBzaGExIGludG8gJXM6ICVzIiwgbmV3cmVmbmFtZSwgZXJyLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlnb3RvIHJvbGxiYWNrOworCX0KKworCXJldHVybiAwOworCisgcm9sbGJhY2s6CisJbG9jayA9IGxvY2tfcmVmX3NoYTFfYmFzaWMob2xkcmVmbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgMCwgTlVMTCwgJmVycik7CisJaWYgKCFsb2NrKSB7CisJCWVycm9yKCJ1bmFibGUgdG8gbG9jayAlcyBmb3Igcm9sbGJhY2s6ICVzIiwgb2xkcmVmbmFtZSwgZXJyLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQlnb3RvIHJvbGxiYWNrbG9nOworCX0KKworCWZsYWcgPSBsb2dfYWxsX3JlZl91cGRhdGVzOworCWxvZ19hbGxfcmVmX3VwZGF0ZXMgPSAwOworCWlmICh3cml0ZV9yZWZfdG9fbG9ja2ZpbGUobG9jaywgb3JpZ19zaGExLCAmZXJyKSB8fAorCSAgICBjb21taXRfcmVmX3VwZGF0ZShsb2NrLCBvcmlnX3NoYTEsIE5VTEwsIDAsICZlcnIpKSB7CisJCWVycm9yKCJ1bmFibGUgdG8gd3JpdGUgY3VycmVudCBzaGExIGludG8gJXM6ICVzIiwgb2xkcmVmbmFtZSwgZXJyLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCX0KKwlsb2dfYWxsX3JlZl91cGRhdGVzID0gZmxhZzsKKworIHJvbGxiYWNrbG9nOgorCWlmIChsb2dtb3ZlZCAmJiByZW5hbWUoZ2l0X3BhdGgoImxvZ3MvJXMiLCBuZXdyZWZuYW1lKSwgZ2l0X3BhdGgoImxvZ3MvJXMiLCBvbGRyZWZuYW1lKSkpCisJCWVycm9yKCJ1bmFibGUgdG8gcmVzdG9yZSBsb2dmaWxlICVzIGZyb20gJXM6ICVzIiwKKwkJCW9sZHJlZm5hbWUsIG5ld3JlZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJaWYgKCFsb2dtb3ZlZCAmJiBsb2cgJiYKKwkgICAgcmVuYW1lKGdpdF9wYXRoKFRNUF9SRU5BTUVEX0xPRyksIGdpdF9wYXRoKCJsb2dzLyVzIiwgb2xkcmVmbmFtZSkpKQorCQllcnJvcigidW5hYmxlIHRvIHJlc3RvcmUgbG9nZmlsZSAlcyBmcm9tICJUTVBfUkVOQU1FRF9MT0ciOiAlcyIsCisJCQlvbGRyZWZuYW1lLCBzdHJlcnJvcihlcnJubykpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2xvc2VfcmVmKHN0cnVjdCByZWZfbG9jayAqbG9jaykKK3sKKwlpZiAoY2xvc2VfbG9ja19maWxlKGxvY2stPmxrKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbW1pdF9yZWYoc3RydWN0IHJlZl9sb2NrICpsb2NrKQoreworCWlmIChjb21taXRfbG9ja19maWxlKGxvY2stPmxrKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisvKgorICogY29weSB0aGUgcmVmbG9nIG1lc3NhZ2UgbXNnIHRvIGJ1Ziwgd2hpY2ggaGFzIGJlZW4gYWxsb2NhdGVkIHN1ZmZpY2llbnRseQorICogbGFyZ2UsIHdoaWxlIGNsZWFuaW5nIHVwIHRoZSB3aGl0ZXNwYWNlcy4gIEVzcGVjaWFsbHksIGNvbnZlcnQgTEYgdG8gc3BhY2UsCisgKiBiZWNhdXNlIHJlZmxvZyBmaWxlIGlzIG9uZSBsaW5lIHBlciBlbnRyeS4KKyAqLworc3RhdGljIGludCBjb3B5X21zZyhjaGFyICpidWYsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwljaGFyICpjcCA9IGJ1ZjsKKwljaGFyIGM7CisJaW50IHdhc3NwYWNlID0gMTsKKworCSpjcCsrID0gJ1x0JzsKKwl3aGlsZSAoKGMgPSAqbXNnKyspKSB7CisJCWlmICh3YXNzcGFjZSAmJiBpc3NwYWNlKGMpKQorCQkJY29udGludWU7CisJCXdhc3NwYWNlID0gaXNzcGFjZShjKTsKKwkJaWYgKHdhc3NwYWNlKQorCQkJYyA9ICcgJzsKKwkJKmNwKysgPSBjOworCX0KKwl3aGlsZSAoYnVmIDwgY3AgJiYgaXNzcGFjZShjcFstMV0pKQorCQljcC0tOworCSpjcCsrID0gJ1xuJzsKKwlyZXR1cm4gY3AgLSBidWY7Cit9CisKK3N0YXRpYyBpbnQgc2hvdWxkX2F1dG9jcmVhdGVfcmVmbG9nKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJaWYgKCFsb2dfYWxsX3JlZl91cGRhdGVzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvaGVhZHMvIikgfHwKKwkJc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvcmVtb3Rlcy8iKSB8fAorCQlzdGFydHNfd2l0aChyZWZuYW1lLCAicmVmcy9ub3Rlcy8iKSB8fAorCQkhc3RyY21wKHJlZm5hbWUsICJIRUFEIik7Cit9CisKKy8qCisgKiBDcmVhdGUgYSByZWZsb2cgZm9yIGEgcmVmLiAgSWYgZm9yY2VfY3JlYXRlID0gMCwgdGhlIHJlZmxvZyB3aWxsCisgKiBvbmx5IGJlIGNyZWF0ZWQgZm9yIGNlcnRhaW4gcmVmcyAodGhvc2UgZm9yIHdoaWNoCisgKiBzaG91bGRfYXV0b2NyZWF0ZV9yZWZsb2cgcmV0dXJucyBub24temVyby4gIE90aGVyd2lzZSwgY3JlYXRlIGl0CisgKiByZWdhcmRsZXNzIG9mIHRoZSByZWYgbmFtZS4gIEZpbGwgaW4gKmVyciBhbmQgcmV0dXJuIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgbG9nX3JlZl9zZXR1cChjb25zdCBjaGFyICpyZWZuYW1lLCBzdHJ1Y3Qgc3RyYnVmICpsb2dmaWxlLCBzdHJ1Y3Qgc3RyYnVmICplcnIsIGludCBmb3JjZV9jcmVhdGUpCit7CisJaW50IGxvZ2ZkLCBvZmxhZ3MgPSBPX0FQUEVORCB8IE9fV1JPTkxZOworCisJc3RyYnVmX2dpdF9wYXRoKGxvZ2ZpbGUsICJsb2dzLyVzIiwgcmVmbmFtZSk7CisJaWYgKGZvcmNlX2NyZWF0ZSB8fCBzaG91bGRfYXV0b2NyZWF0ZV9yZWZsb2cocmVmbmFtZSkpIHsKKwkJaWYgKHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXMobG9nZmlsZS0+YnVmKSA8IDApIHsKKwkJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byBjcmVhdGUgZGlyZWN0b3J5IGZvciAlczogIgorCQkJCSAgICAiJXMiLCBsb2dmaWxlLT5idWYsIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJb2ZsYWdzIHw9IE9fQ1JFQVQ7CisJfQorCisJbG9nZmQgPSBvcGVuKGxvZ2ZpbGUtPmJ1Ziwgb2ZsYWdzLCAwNjY2KTsKKwlpZiAobG9nZmQgPCAwKSB7CisJCWlmICghKG9mbGFncyAmIE9fQ1JFQVQpICYmIChlcnJubyA9PSBFTk9FTlQgfHwgZXJybm8gPT0gRUlTRElSKSkKKwkJCXJldHVybiAwOworCisJCWlmIChlcnJubyA9PSBFSVNESVIpIHsKKwkJCWlmIChyZW1vdmVfZW1wdHlfZGlyZWN0b3JpZXMobG9nZmlsZSkpIHsKKwkJCQlzdHJidWZfYWRkZihlcnIsICJUaGVyZSBhcmUgc3RpbGwgbG9ncyB1bmRlciAiCisJCQkJCSAgICAiJyVzJyIsIGxvZ2ZpbGUtPmJ1Zik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJbG9nZmQgPSBvcGVuKGxvZ2ZpbGUtPmJ1Ziwgb2ZsYWdzLCAwNjY2KTsKKwkJfQorCisJCWlmIChsb2dmZCA8IDApIHsKKwkJCXN0cmJ1Zl9hZGRmKGVyciwgInVuYWJsZSB0byBhcHBlbmQgdG8gJXM6ICVzIiwKKwkJCQkgICAgbG9nZmlsZS0+YnVmLCBzdHJlcnJvcihlcnJubykpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJYWRqdXN0X3NoYXJlZF9wZXJtKGxvZ2ZpbGUtPmJ1Zik7CisJY2xvc2UobG9nZmQpOworCXJldHVybiAwOworfQorCisKK2ludCBzYWZlX2NyZWF0ZV9yZWZsb2coY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IGZvcmNlX2NyZWF0ZSwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWludCByZXQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJcmV0ID0gbG9nX3JlZl9zZXR1cChyZWZuYW1lLCAmc2IsIGVyciwgZm9yY2VfY3JlYXRlKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbG9nX3JlZl93cml0ZV9mZChpbnQgZmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAorCQkJICAgIGNvbnN0IGNoYXIgKmNvbW1pdHRlciwgY29uc3QgY2hhciAqbXNnKQoreworCWludCBtc2dsZW4sIHdyaXR0ZW47CisJdW5zaWduZWQgbWF4bGVuLCBsZW47CisJY2hhciAqbG9ncmVjOworCisJbXNnbGVuID0gbXNnID8gc3RybGVuKG1zZykgOiAwOworCW1heGxlbiA9IHN0cmxlbihjb21taXR0ZXIpICsgbXNnbGVuICsgMTAwOworCWxvZ3JlYyA9IHhtYWxsb2MobWF4bGVuKTsKKwlsZW4gPSB4c25wcmludGYobG9ncmVjLCBtYXhsZW4sICIlcyAlcyAlc1xuIiwKKwkJCXNoYTFfdG9faGV4KG9sZF9zaGExKSwKKwkJCXNoYTFfdG9faGV4KG5ld19zaGExKSwKKwkJCWNvbW1pdHRlcik7CisJaWYgKG1zZ2xlbikKKwkJbGVuICs9IGNvcHlfbXNnKGxvZ3JlYyArIGxlbiAtIDEsIG1zZykgLSAxOworCisJd3JpdHRlbiA9IGxlbiA8PSBtYXhsZW4gPyB3cml0ZV9pbl9mdWxsKGZkLCBsb2dyZWMsIGxlbikgOiAtMTsKKwlmcmVlKGxvZ3JlYyk7CisJaWYgKHdyaXR0ZW4gIT0gbGVuKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dfcmVmX3dyaXRlXzEoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwgY29uc3QgY2hhciAqbXNnLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqbG9nZmlsZSwgaW50IGZsYWdzLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWludCBsb2dmZCwgcmVzdWx0LCBvZmxhZ3MgPSBPX0FQUEVORCB8IE9fV1JPTkxZOworCisJaWYgKGxvZ19hbGxfcmVmX3VwZGF0ZXMgPCAwKQorCQlsb2dfYWxsX3JlZl91cGRhdGVzID0gIWlzX2JhcmVfcmVwb3NpdG9yeSgpOworCisJcmVzdWx0ID0gbG9nX3JlZl9zZXR1cChyZWZuYW1lLCBsb2dmaWxlLCBlcnIsIGZsYWdzICYgUkVGX0ZPUkNFX0NSRUFURV9SRUZMT0cpOworCisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWxvZ2ZkID0gb3Blbihsb2dmaWxlLT5idWYsIG9mbGFncyk7CisJaWYgKGxvZ2ZkIDwgMCkKKwkJcmV0dXJuIDA7CisJcmVzdWx0ID0gbG9nX3JlZl93cml0ZV9mZChsb2dmZCwgb2xkX3NoYTEsIG5ld19zaGExLAorCQkJCSAgZ2l0X2NvbW1pdHRlcl9pbmZvKDApLCBtc2cpOworCWlmIChyZXN1bHQpIHsKKwkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGFwcGVuZCB0byAlczogJXMiLCBsb2dmaWxlLT5idWYsCisJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJY2xvc2UobG9nZmQpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChjbG9zZShsb2dmZCkpIHsKKwkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGFwcGVuZCB0byAlczogJXMiLCBsb2dmaWxlLT5idWYsCisJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dfcmVmX3dyaXRlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLCBjb25zdCBjaGFyICptc2csCisJCQkgaW50IGZsYWdzLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSBsb2dfcmVmX3dyaXRlXzEocmVmbmFtZSwgb2xkX3NoYTEsIG5ld19zaGExLCBtc2csICZzYiwgZmxhZ3MsCisJCQkJICBlcnIpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGlzX2JyYW5jaChjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXJldHVybiAhc3RyY21wKHJlZm5hbWUsICJIRUFEIikgfHwgc3RhcnRzX3dpdGgocmVmbmFtZSwgInJlZnMvaGVhZHMvIik7Cit9CisKKy8qCisgKiBXcml0ZSBzaGExIGludG8gdGhlIG9wZW4gbG9ja2ZpbGUsIHRoZW4gY2xvc2UgdGhlIGxvY2tmaWxlLiBPbgorICogZXJyb3JzLCByb2xsYmFjayB0aGUgbG9ja2ZpbGUsIGZpbGwgaW4gKmVyciBhbmQKKyAqIHJldHVybiAtMS4KKyAqLworc3RhdGljIGludCB3cml0ZV9yZWZfdG9fbG9ja2ZpbGUoc3RydWN0IHJlZl9sb2NrICpsb2NrLAorCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RhdGljIGNoYXIgdGVybSA9ICdcbic7CisJc3RydWN0IG9iamVjdCAqbzsKKwlpbnQgZmQ7CisKKwlvID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCWlmICghbykgeworCQlzdHJidWZfYWRkZihlcnIsCisJCQkgICAgIlRyeWluZyB0byB3cml0ZSByZWYgJXMgd2l0aCBub25leGlzdGVudCBvYmplY3QgJXMiLAorCQkJICAgIGxvY2stPnJlZl9uYW1lLCBzaGExX3RvX2hleChzaGExKSk7CisJCXVubG9ja19yZWYobG9jayk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKG8tPnR5cGUgIT0gT0JKX0NPTU1JVCAmJiBpc19icmFuY2gobG9jay0+cmVmX25hbWUpKSB7CisJCXN0cmJ1Zl9hZGRmKGVyciwKKwkJCSAgICAiVHJ5aW5nIHRvIHdyaXRlIG5vbi1jb21taXQgb2JqZWN0ICVzIHRvIGJyYW5jaCAlcyIsCisJCQkgICAgc2hhMV90b19oZXgoc2hhMSksIGxvY2stPnJlZl9uYW1lKTsKKwkJdW5sb2NrX3JlZihsb2NrKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmZCA9IGdldF9sb2NrX2ZpbGVfZmQobG9jay0+bGspOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzaGExX3RvX2hleChzaGExKSwgNDApICE9IDQwIHx8CisJICAgIHdyaXRlX2luX2Z1bGwoZmQsICZ0ZXJtLCAxKSAhPSAxIHx8CisJICAgIGNsb3NlX3JlZihsb2NrKSA8IDApIHsKKwkJc3RyYnVmX2FkZGYoZXJyLAorCQkJICAgICJDb3VsZG4ndCB3cml0ZSAlcyIsIGdldF9sb2NrX2ZpbGVfcGF0aChsb2NrLT5saykpOworCQl1bmxvY2tfcmVmKGxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQ29tbWl0IGEgY2hhbmdlIHRvIGEgbG9vc2UgcmVmZXJlbmNlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuCisgKiB0byB0aGUgbG9vc2UgcmVmZXJlbmNlIGxvY2tmaWxlLiBBbHNvIHVwZGF0ZSB0aGUgcmVmbG9ncyBpZgorICogbmVjZXNzYXJ5LCB1c2luZyB0aGUgc3BlY2lmaWVkIGxvY2ttc2cgKHdoaWNoIGNhbiBiZSBOVUxMKS4KKyAqLworc3RhdGljIGludCBjb21taXRfcmVmX3VwZGF0ZShzdHJ1Y3QgcmVmX2xvY2sgKmxvY2ssCisJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKmxvZ21zZywKKwkJCSAgICAgaW50IGZsYWdzLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJY2xlYXJfbG9vc2VfcmVmX2NhY2hlKCZyZWZfY2FjaGUpOworCWlmIChsb2dfcmVmX3dyaXRlKGxvY2stPnJlZl9uYW1lLCBsb2NrLT5vbGRfb2lkLmhhc2gsIHNoYTEsIGxvZ21zZywgZmxhZ3MsIGVycikgPCAwIHx8CisJICAgIChzdHJjbXAobG9jay0+cmVmX25hbWUsIGxvY2stPm9yaWdfcmVmX25hbWUpICYmCisJICAgICBsb2dfcmVmX3dyaXRlKGxvY2stPm9yaWdfcmVmX25hbWUsIGxvY2stPm9sZF9vaWQuaGFzaCwgc2hhMSwgbG9nbXNnLCBmbGFncywgZXJyKSA8IDApKSB7CisJCWNoYXIgKm9sZF9tc2cgPSBzdHJidWZfZGV0YWNoKGVyciwgTlVMTCk7CisJCXN0cmJ1Zl9hZGRmKGVyciwgIkNhbm5vdCB1cGRhdGUgdGhlIHJlZiAnJXMnOiAlcyIsCisJCQkgICAgbG9jay0+cmVmX25hbWUsIG9sZF9tc2cpOworCQlmcmVlKG9sZF9tc2cpOworCQl1bmxvY2tfcmVmKGxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChzdHJjbXAobG9jay0+b3JpZ19yZWZfbmFtZSwgIkhFQUQiKSAhPSAwKSB7CisJCS8qCisJCSAqIFNwZWNpYWwgaGFjazogSWYgYSBicmFuY2ggaXMgdXBkYXRlZCBkaXJlY3RseSBhbmQgSEVBRAorCQkgKiBwb2ludHMgdG8gaXQgKG1heSBoYXBwZW4gb24gdGhlIHJlbW90ZSBzaWRlIG9mIGEgcHVzaAorCQkgKiBmb3IgZXhhbXBsZSkgdGhlbiBsb2dpY2FsbHkgdGhlIEhFQUQgcmVmbG9nIHNob3VsZCBiZQorCQkgKiB1cGRhdGVkIHRvby4KKwkJICogQSBnZW5lcmljIHNvbHV0aW9uIGltcGxpZXMgcmV2ZXJzZSBzeW1yZWYgaW5mb3JtYXRpb24sCisJCSAqIGJ1dCBmaW5kaW5nIGFsbCBzeW1yZWZzIHBvaW50aW5nIHRvIHRoZSBnaXZlbiBicmFuY2gKKwkJICogd291bGQgYmUgcmF0aGVyIGNvc3RseSBmb3IgdGhpcyByYXJlIGV2ZW50ICh0aGUgZGlyZWN0CisJCSAqIHVwZGF0ZSBvZiBhIGJyYW5jaCkgdG8gYmUgd29ydGggaXQuICBTbyBsZXQncyBjaGVhdCBhbmQKKwkJICogY2hlY2sgd2l0aCBIRUFEIG9ubHkgd2hpY2ggc2hvdWxkIGNvdmVyIDk5JSBvZiBhbGwgdXNhZ2UKKwkJICogc2NlbmFyaW9zIChldmVuIDEwMCUgb2YgdGhlIGRlZmF1bHQgb25lcykuCisJCSAqLworCQl1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF07CisJCWludCBoZWFkX2ZsYWc7CisJCWNvbnN0IGNoYXIgKmhlYWRfcmVmOworCQloZWFkX3JlZiA9IHJlc29sdmVfcmVmX3Vuc2FmZSgiSEVBRCIsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCSAgICAgIGhlYWRfc2hhMSwgJmhlYWRfZmxhZyk7CisJCWlmIChoZWFkX3JlZiAmJiAoaGVhZF9mbGFnICYgUkVGX0lTU1lNUkVGKSAmJgorCQkgICAgIXN0cmNtcChoZWFkX3JlZiwgbG9jay0+cmVmX25hbWUpKSB7CisJCQlzdHJ1Y3Qgc3RyYnVmIGxvZ19lcnIgPSBTVFJCVUZfSU5JVDsKKwkJCWlmIChsb2dfcmVmX3dyaXRlKCJIRUFEIiwgbG9jay0+b2xkX29pZC5oYXNoLCBzaGExLAorCQkJCQkgIGxvZ21zZywgMCwgJmxvZ19lcnIpKSB7CisJCQkJZXJyb3IoIiVzIiwgbG9nX2Vyci5idWYpOworCQkJCXN0cmJ1Zl9yZWxlYXNlKCZsb2dfZXJyKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoY29tbWl0X3JlZihsb2NrKSkgeworCQllcnJvcigiQ291bGRuJ3Qgc2V0ICVzIiwgbG9jay0+cmVmX25hbWUpOworCQl1bmxvY2tfcmVmKGxvY2spOworCQlyZXR1cm4gLTE7CisJfQorCisJdW5sb2NrX3JlZihsb2NrKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNyZWF0ZV9zeW1yZWYoY29uc3QgY2hhciAqcmVmX3RhcmdldCwgY29uc3QgY2hhciAqcmVmc19oZWFkc19tYXN0ZXIsCisJCSAgY29uc3QgY2hhciAqbG9nbXNnKQoreworCWNoYXIgKmxvY2twYXRoID0gTlVMTDsKKwljaGFyIHJlZlsxMDAwXTsKKwlpbnQgZmQsIGxlbiwgd3JpdHRlbjsKKwljaGFyICpnaXRfSEVBRCA9IGdpdF9wYXRoZHVwKCIlcyIsIHJlZl90YXJnZXQpOworCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdLCBuZXdfc2hhMVsyMF07CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKworCWlmIChsb2dtc2cgJiYgcmVhZF9yZWYocmVmX3RhcmdldCwgb2xkX3NoYTEpKQorCQloYXNoY2xyKG9sZF9zaGExKTsKKworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGdpdF9IRUFEKSA8IDApCisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgZm9yICVzIiwgZ2l0X0hFQUQpOworCisjaWZuZGVmIE5PX1NZTUxJTktfSEVBRAorCWlmIChwcmVmZXJfc3ltbGlua19yZWZzKSB7CisJCXVubGluayhnaXRfSEVBRCk7CisJCWlmICghc3ltbGluayhyZWZzX2hlYWRzX21hc3RlciwgZ2l0X0hFQUQpKQorCQkJZ290byBkb25lOworCQlmcHJpbnRmKHN0ZGVyciwgIm5vIHN5bWxpbmsgLSBmYWxsaW5nIGJhY2sgdG8gc3ltYm9saWMgcmVmXG4iKTsKKwl9CisjZW5kaWYKKworCWxlbiA9IHNucHJpbnRmKHJlZiwgc2l6ZW9mKHJlZiksICJyZWY6ICVzXG4iLCByZWZzX2hlYWRzX21hc3Rlcik7CisJaWYgKHNpemVvZihyZWYpIDw9IGxlbikgeworCQllcnJvcigicmVmbmFtZSB0b28gbG9uZzogJXMiLCByZWZzX2hlYWRzX21hc3Rlcik7CisJCWdvdG8gZXJyb3JfZnJlZV9yZXR1cm47CisJfQorCWxvY2twYXRoID0gbWtwYXRoZHVwKCIlcy5sb2NrIiwgZ2l0X0hFQUQpOworCWZkID0gb3Blbihsb2NrcGF0aCwgT19DUkVBVCB8IE9fRVhDTCB8IE9fV1JPTkxZLCAwNjY2KTsKKwlpZiAoZmQgPCAwKSB7CisJCWVycm9yKCJVbmFibGUgdG8gb3BlbiAlcyBmb3Igd3JpdGluZyIsIGxvY2twYXRoKTsKKwkJZ290byBlcnJvcl9mcmVlX3JldHVybjsKKwl9CisJd3JpdHRlbiA9IHdyaXRlX2luX2Z1bGwoZmQsIHJlZiwgbGVuKTsKKwlpZiAoY2xvc2UoZmQpICE9IDAgfHwgd3JpdHRlbiAhPSBsZW4pIHsKKwkJZXJyb3IoIlVuYWJsZSB0byB3cml0ZSB0byAlcyIsIGxvY2twYXRoKTsKKwkJZ290byBlcnJvcl91bmxpbmtfcmV0dXJuOworCX0KKwlpZiAocmVuYW1lKGxvY2twYXRoLCBnaXRfSEVBRCkgPCAwKSB7CisJCWVycm9yKCJVbmFibGUgdG8gY3JlYXRlICVzIiwgZ2l0X0hFQUQpOworCQlnb3RvIGVycm9yX3VubGlua19yZXR1cm47CisJfQorCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0oZ2l0X0hFQUQpKSB7CisJCWVycm9yKCJVbmFibGUgdG8gZml4IHBlcm1pc3Npb25zIG9uICVzIiwgbG9ja3BhdGgpOworCWVycm9yX3VubGlua19yZXR1cm46CisJCXVubGlua19vcl93YXJuKGxvY2twYXRoKTsKKwllcnJvcl9mcmVlX3JldHVybjoKKwkJZnJlZShsb2NrcGF0aCk7CisJCWZyZWUoZ2l0X0hFQUQpOworCQlyZXR1cm4gLTE7CisJfQorCWZyZWUobG9ja3BhdGgpOworCisjaWZuZGVmIE5PX1NZTUxJTktfSEVBRAorCWRvbmU6CisjZW5kaWYKKwlpZiAobG9nbXNnICYmICFyZWFkX3JlZihyZWZzX2hlYWRzX21hc3RlciwgbmV3X3NoYTEpICYmCisJCWxvZ19yZWZfd3JpdGUocmVmX3RhcmdldCwgb2xkX3NoYTEsIG5ld19zaGExLCBsb2dtc2csIDAsICZlcnIpKSB7CisJCWVycm9yKCIlcyIsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwl9CisKKwlmcmVlKGdpdF9IRUFEKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlYWRfcmVmX2F0X2NiIHsKKwljb25zdCBjaGFyICpyZWZuYW1lOworCXVuc2lnbmVkIGxvbmcgYXRfdGltZTsKKwlpbnQgY250OworCWludCByZWNjbnQ7CisJdW5zaWduZWQgY2hhciAqc2hhMTsKKwlpbnQgZm91bmRfaXQ7CisKKwl1bnNpZ25lZCBjaGFyIG9zaGExWzIwXTsKKwl1bnNpZ25lZCBjaGFyIG5zaGExWzIwXTsKKwlpbnQgdHo7CisJdW5zaWduZWQgbG9uZyBkYXRlOworCWNoYXIgKiptc2c7CisJdW5zaWduZWQgbG9uZyAqY3V0b2ZmX3RpbWU7CisJaW50ICpjdXRvZmZfdHo7CisJaW50ICpjdXRvZmZfY250OworfTsKKworc3RhdGljIGludCByZWFkX3JlZl9hdF9lbnQodW5zaWduZWQgY2hhciAqb3NoYTEsIHVuc2lnbmVkIGNoYXIgKm5zaGExLAorCQljb25zdCBjaGFyICplbWFpbCwgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAsIGludCB0eiwKKwkJY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmVhZF9yZWZfYXRfY2IgKmNiID0gY2JfZGF0YTsKKworCWNiLT5yZWNjbnQrKzsKKwljYi0+dHogPSB0ejsKKwljYi0+ZGF0ZSA9IHRpbWVzdGFtcDsKKworCWlmICh0aW1lc3RhbXAgPD0gY2ItPmF0X3RpbWUgfHwgY2ItPmNudCA9PSAwKSB7CisJCWlmIChjYi0+bXNnKQorCQkJKmNiLT5tc2cgPSB4c3RyZHVwKG1lc3NhZ2UpOworCQlpZiAoY2ItPmN1dG9mZl90aW1lKQorCQkJKmNiLT5jdXRvZmZfdGltZSA9IHRpbWVzdGFtcDsKKwkJaWYgKGNiLT5jdXRvZmZfdHopCisJCQkqY2ItPmN1dG9mZl90eiA9IHR6OworCQlpZiAoY2ItPmN1dG9mZl9jbnQpCisJCQkqY2ItPmN1dG9mZl9jbnQgPSBjYi0+cmVjY250IC0gMTsKKwkJLyoKKwkJICogd2UgaGF2ZSBub3QgeWV0IHVwZGF0ZWQgY2ItPltufG9dc2hhMSBzbyB0aGV5IHN0aWxsCisJCSAqIGhvbGQgdGhlIHZhbHVlcyBmb3IgdGhlIHByZXZpb3VzIHJlY29yZC4KKwkJICovCisJCWlmICghaXNfbnVsbF9zaGExKGNiLT5vc2hhMSkpIHsKKwkJCWhhc2hjcHkoY2ItPnNoYTEsIG5zaGExKTsKKwkJCWlmIChoYXNoY21wKGNiLT5vc2hhMSwgbnNoYTEpKQorCQkJCXdhcm5pbmcoIkxvZyBmb3IgcmVmICVzIGhhcyBnYXAgYWZ0ZXIgJXMuIiwKKwkJCQkJY2ItPnJlZm5hbWUsIHNob3dfZGF0ZShjYi0+ZGF0ZSwgY2ItPnR6LCBEQVRFX01PREUoUkZDMjgyMikpKTsKKwkJfQorCQllbHNlIGlmIChjYi0+ZGF0ZSA9PSBjYi0+YXRfdGltZSkKKwkJCWhhc2hjcHkoY2ItPnNoYTEsIG5zaGExKTsKKwkJZWxzZSBpZiAoaGFzaGNtcChuc2hhMSwgY2ItPnNoYTEpKQorCQkJd2FybmluZygiTG9nIGZvciByZWYgJXMgdW5leHBlY3RlZGx5IGVuZGVkIG9uICVzLiIsCisJCQkJY2ItPnJlZm5hbWUsIHNob3dfZGF0ZShjYi0+ZGF0ZSwgY2ItPnR6LAorCQkJCQkJICAgICAgIERBVEVfTU9ERShSRkMyODIyKSkpOworCQloYXNoY3B5KGNiLT5vc2hhMSwgb3NoYTEpOworCQloYXNoY3B5KGNiLT5uc2hhMSwgbnNoYTEpOworCQljYi0+Zm91bmRfaXQgPSAxOworCQlyZXR1cm4gMTsKKwl9CisJaGFzaGNweShjYi0+b3NoYTEsIG9zaGExKTsKKwloYXNoY3B5KGNiLT5uc2hhMSwgbnNoYTEpOworCWlmIChjYi0+Y250ID4gMCkKKwkJY2ItPmNudC0tOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfcmVmX2F0X2VudF9vbGRlc3QodW5zaWduZWQgY2hhciAqb3NoYTEsIHVuc2lnbmVkIGNoYXIgKm5zaGExLAorCQkJCSAgY29uc3QgY2hhciAqZW1haWwsIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wLAorCQkJCSAgaW50IHR6LCBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCByZWFkX3JlZl9hdF9jYiAqY2IgPSBjYl9kYXRhOworCisJaWYgKGNiLT5tc2cpCisJCSpjYi0+bXNnID0geHN0cmR1cChtZXNzYWdlKTsKKwlpZiAoY2ItPmN1dG9mZl90aW1lKQorCQkqY2ItPmN1dG9mZl90aW1lID0gdGltZXN0YW1wOworCWlmIChjYi0+Y3V0b2ZmX3R6KQorCQkqY2ItPmN1dG9mZl90eiA9IHR6OworCWlmIChjYi0+Y3V0b2ZmX2NudCkKKwkJKmNiLT5jdXRvZmZfY250ID0gY2ItPnJlY2NudDsKKwloYXNoY3B5KGNiLT5zaGExLCBvc2hhMSk7CisJaWYgKGlzX251bGxfc2hhMShjYi0+c2hhMSkpCisJCWhhc2hjcHkoY2ItPnNoYTEsIG5zaGExKTsKKwkvKiBXZSBqdXN0IHdhbnQgdGhlIGZpcnN0IGVudHJ5ICovCisJcmV0dXJuIDE7Cit9CisKK2ludCByZWFkX3JlZl9hdChjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgYXRfdGltZSwgaW50IGNudCwKKwkJdW5zaWduZWQgY2hhciAqc2hhMSwgY2hhciAqKm1zZywKKwkJdW5zaWduZWQgbG9uZyAqY3V0b2ZmX3RpbWUsIGludCAqY3V0b2ZmX3R6LCBpbnQgKmN1dG9mZl9jbnQpCit7CisJc3RydWN0IHJlYWRfcmVmX2F0X2NiIGNiOworCisJbWVtc2V0KCZjYiwgMCwgc2l6ZW9mKGNiKSk7CisJY2IucmVmbmFtZSA9IHJlZm5hbWU7CisJY2IuYXRfdGltZSA9IGF0X3RpbWU7CisJY2IuY250ID0gY250OworCWNiLm1zZyA9IG1zZzsKKwljYi5jdXRvZmZfdGltZSA9IGN1dG9mZl90aW1lOworCWNiLmN1dG9mZl90eiA9IGN1dG9mZl90ejsKKwljYi5jdXRvZmZfY250ID0gY3V0b2ZmX2NudDsKKwljYi5zaGExID0gc2hhMTsKKworCWZvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZShyZWZuYW1lLCByZWFkX3JlZl9hdF9lbnQsICZjYik7CisKKwlpZiAoIWNiLnJlY2NudCkgeworCQlpZiAoZmxhZ3MgJiBHRVRfU0hBMV9RVUlFVExZKQorCQkJZXhpdCgxMjgpOworCQllbHNlCisJCQlkaWUoIkxvZyBmb3IgJXMgaXMgZW1wdHkuIiwgcmVmbmFtZSk7CisJfQorCWlmIChjYi5mb3VuZF9pdCkKKwkJcmV0dXJuIDA7CisKKwlmb3JfZWFjaF9yZWZsb2dfZW50KHJlZm5hbWUsIHJlYWRfcmVmX2F0X2VudF9vbGRlc3QsICZjYik7CisKKwlyZXR1cm4gMTsKK30KKworaW50IHJlZmxvZ19leGlzdHMoY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCXJldHVybiAhbHN0YXQoZ2l0X3BhdGgoImxvZ3MvJXMiLCByZWZuYW1lKSwgJnN0KSAmJgorCQlTX0lTUkVHKHN0LnN0X21vZGUpOworfQorCitpbnQgZGVsZXRlX3JlZmxvZyhjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXJldHVybiByZW1vdmVfcGF0aChnaXRfcGF0aCgibG9ncy8lcyIsIHJlZm5hbWUpKTsKK30KKworc3RhdGljIGludCBzaG93X29uZV9yZWZsb2dfZW50KHN0cnVjdCBzdHJidWYgKnNiLCBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJdW5zaWduZWQgY2hhciBvc2hhMVsyMF0sIG5zaGExWzIwXTsKKwljaGFyICplbWFpbF9lbmQsICptZXNzYWdlOworCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOworCWludCB0ejsKKworCS8qIG9sZCBTUCBuZXcgU1AgbmFtZSA8ZW1haWw+IFNQIHRpbWUgVEFCIG1zZyBMRiAqLworCWlmIChzYi0+bGVuIDwgODMgfHwgc2ItPmJ1ZltzYi0+bGVuIC0gMV0gIT0gJ1xuJyB8fAorCSAgICBnZXRfc2hhMV9oZXgoc2ItPmJ1Ziwgb3NoYTEpIHx8IHNiLT5idWZbNDBdICE9ICcgJyB8fAorCSAgICBnZXRfc2hhMV9oZXgoc2ItPmJ1ZiArIDQxLCBuc2hhMSkgfHwgc2ItPmJ1Zls4MV0gIT0gJyAnIHx8CisJICAgICEoZW1haWxfZW5kID0gc3RyY2hyKHNiLT5idWYgKyA4MiwgJz4nKSkgfHwKKwkgICAgZW1haWxfZW5kWzFdICE9ICcgJyB8fAorCSAgICAhKHRpbWVzdGFtcCA9IHN0cnRvdWwoZW1haWxfZW5kICsgMiwgJm1lc3NhZ2UsIDEwKSkgfHwKKwkgICAgIW1lc3NhZ2UgfHwgbWVzc2FnZVswXSAhPSAnICcgfHwKKwkgICAgKG1lc3NhZ2VbMV0gIT0gJysnICYmIG1lc3NhZ2VbMV0gIT0gJy0nKSB8fAorCSAgICAhaXNkaWdpdChtZXNzYWdlWzJdKSB8fCAhaXNkaWdpdChtZXNzYWdlWzNdKSB8fAorCSAgICAhaXNkaWdpdChtZXNzYWdlWzRdKSB8fCAhaXNkaWdpdChtZXNzYWdlWzVdKSkKKwkJcmV0dXJuIDA7IC8qIGNvcnJ1cHQ/ICovCisJZW1haWxfZW5kWzFdID0gJ1wwJzsKKwl0eiA9IHN0cnRvbChtZXNzYWdlICsgMSwgTlVMTCwgMTApOworCWlmIChtZXNzYWdlWzZdICE9ICdcdCcpCisJCW1lc3NhZ2UgKz0gNjsKKwllbHNlCisJCW1lc3NhZ2UgKz0gNzsKKwlyZXR1cm4gZm4ob3NoYTEsIG5zaGExLCBzYi0+YnVmICsgODIsIHRpbWVzdGFtcCwgdHosIG1lc3NhZ2UsIGNiX2RhdGEpOworfQorCitzdGF0aWMgY2hhciAqZmluZF9iZWdpbm5pbmdfb2ZfbGluZShjaGFyICpib2IsIGNoYXIgKnNjYW4pCit7CisJd2hpbGUgKGJvYiA8IHNjYW4gJiYgKigtLXNjYW4pICE9ICdcbicpCisJCTsgLyoga2VlcCBzY2FubmluZyBiYWNrd2FyZHMgKi8KKwkvKgorCSAqIFJldHVybiBlaXRoZXIgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIsIG9yIExGIGF0IHRoZSBlbmQgb2YKKwkgKiB0aGUgcHJldmlvdXMgbGluZS4KKwkgKi8KKwlyZXR1cm4gc2NhbjsKK30KKworaW50IGZvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZShjb25zdCBjaGFyICpyZWZuYW1lLCBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCUZJTEUgKmxvZ2ZwOworCWxvbmcgcG9zOworCWludCByZXQgPSAwLCBhdF90YWlsID0gMTsKKworCWxvZ2ZwID0gZm9wZW4oZ2l0X3BhdGgoImxvZ3MvJXMiLCByZWZuYW1lKSwgInIiKTsKKwlpZiAoIWxvZ2ZwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBKdW1wIHRvIHRoZSBlbmQgKi8KKwlpZiAoZnNlZWsobG9nZnAsIDAsIFNFRUtfRU5EKSA8IDApCisJCXJldHVybiBlcnJvcigiY2Fubm90IHNlZWsgYmFjayByZWZsb2cgZm9yICVzOiAlcyIsCisJCQkgICAgIHJlZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJcG9zID0gZnRlbGwobG9nZnApOworCXdoaWxlICghcmV0ICYmIDAgPCBwb3MpIHsKKwkJaW50IGNudDsKKwkJc2l6ZV90IG5yZWFkOworCQljaGFyIGJ1ZltCVUZTSVpdOworCQljaGFyICplbmRwLCAqc2NhbnA7CisKKwkJLyogRmlsbCBuZXh0IGJsb2NrIGZyb20gdGhlIGVuZCAqLworCQljbnQgPSAoc2l6ZW9mKGJ1ZikgPCBwb3MpID8gc2l6ZW9mKGJ1ZikgOiBwb3M7CisJCWlmIChmc2Vlayhsb2dmcCwgcG9zIC0gY250LCBTRUVLX1NFVCkpCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBzZWVrIGJhY2sgcmVmbG9nIGZvciAlczogJXMiLAorCQkJCSAgICAgcmVmbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJbnJlYWQgPSBmcmVhZChidWYsIGNudCwgMSwgbG9nZnApOworCQlpZiAobnJlYWQgIT0gMSkKKwkJCXJldHVybiBlcnJvcigiY2Fubm90IHJlYWQgJWQgYnl0ZXMgZnJvbSByZWZsb2cgZm9yICVzOiAlcyIsCisJCQkJICAgICBjbnQsIHJlZm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCXBvcyAtPSBjbnQ7CisKKwkJc2NhbnAgPSBlbmRwID0gYnVmICsgY250OworCQlpZiAoYXRfdGFpbCAmJiBzY2FucFstMV0gPT0gJ1xuJykKKwkJCS8qIExvb2tpbmcgYXQgdGhlIGZpbmFsIExGIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KKwkJCXNjYW5wLS07CisJCWF0X3RhaWwgPSAwOworCisJCXdoaWxlIChidWYgPCBzY2FucCkgeworCQkJLyoKKwkJCSAqIHRlcm1pbmF0aW5nIExGIG9mIHRoZSBwcmV2aW91cyBsaW5lLCBvciB0aGUgYmVnaW5uaW5nCisJCQkgKiBvZiB0aGUgYnVmZmVyLgorCQkJICovCisJCQljaGFyICpicDsKKworCQkJYnAgPSBmaW5kX2JlZ2lubmluZ19vZl9saW5lKGJ1Ziwgc2NhbnApOworCisJCQlpZiAoKmJwID09ICdcbicpIHsKKwkJCQkvKgorCQkJCSAqIFRoZSBuZXdsaW5lIGlzIHRoZSBlbmQgb2YgdGhlIHByZXZpb3VzIGxpbmUsCisJCQkJICogc28gd2Uga25vdyB3ZSBoYXZlIGNvbXBsZXRlIGxpbmUgc3RhcnRpbmcKKwkJCQkgKiBhdCAoYnAgKyAxKS4gUHJlZml4IGl0IG9udG8gYW55IHByaW9yIGRhdGEKKwkJCQkgKiB3ZSBjb2xsZWN0ZWQgZm9yIHRoZSBsaW5lIGFuZCBwcm9jZXNzIGl0LgorCQkJCSAqLworCQkJCXN0cmJ1Zl9zcGxpY2UoJnNiLCAwLCAwLCBicCArIDEsIGVuZHAgLSAoYnAgKyAxKSk7CisJCQkJc2NhbnAgPSBicDsKKwkJCQllbmRwID0gYnAgKyAxOworCQkJCXJldCA9IHNob3dfb25lX3JlZmxvZ19lbnQoJnNiLCBmbiwgY2JfZGF0YSk7CisJCQkJc3RyYnVmX3Jlc2V0KCZzYik7CisJCQkJaWYgKHJldCkKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKCFwb3MpIHsKKwkJCQkvKgorCQkJCSAqIFdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciwgYW5kIHRoZQorCQkJCSAqIHN0YXJ0IG9mIHRoZSBmaWxlOyB0aGVyZSBpcyBubyBwcmV2aW91cworCQkJCSAqIGxpbmUsIGFuZCB3ZSBoYXZlIGV2ZXJ5dGhpbmcgZm9yIHRoaXMgb25lLgorCQkJCSAqIFByb2Nlc3MgaXQsIGFuZCB3ZSBjYW4gZW5kIHRoZSBsb29wLgorCQkJCSAqLworCQkJCXN0cmJ1Zl9zcGxpY2UoJnNiLCAwLCAwLCBidWYsIGVuZHAgLSBidWYpOworCQkJCXJldCA9IHNob3dfb25lX3JlZmxvZ19lbnQoJnNiLCBmbiwgY2JfZGF0YSk7CisJCQkJc3RyYnVmX3Jlc2V0KCZzYik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChicCA9PSBidWYpIHsKKwkJCQkvKgorCQkJCSAqIFdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciwgYW5kIHRoZXJlCisJCQkJICogaXMgbW9yZSBmaWxlIHRvIHJlYWQgYmFja3dhcmRzLiBXaGljaCBtZWFucworCQkJCSAqIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGEgbGluZS4gTm90ZSB0aGF0IHdlCisJCQkJICogbWF5IGdldCBoZXJlIGV2ZW4gaWYgKmJwIHdhcyBhIG5ld2xpbmU7IHRoYXQKKwkJCQkgKiBqdXN0IG1lYW5zIHdlIGFyZSBhdCB0aGUgZXhhY3QgZW5kIG9mIHRoZQorCQkJCSAqIHByZXZpb3VzIGxpbmUsIHJhdGhlciB0aGFuIHNvbWUgc3BvdCBpbiB0aGUKKwkJCQkgKiBtaWRkbGUuCisJCQkJICoKKwkJCQkgKiBTYXZlIGF3YXkgd2hhdCB3ZSBoYXZlIHRvIGJlIGNvbWJpbmVkIHdpdGgKKwkJCQkgKiB0aGUgZGF0YSBmcm9tIHRoZSBuZXh0IHJlYWQuCisJCQkJICovCisJCQkJc3RyYnVmX3NwbGljZSgmc2IsIDAsIDAsIGJ1ZiwgZW5kcCAtIGJ1Zik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCX0KKwlpZiAoIXJldCAmJiBzYi5sZW4pCisJCWRpZSgiQlVHOiByZXZlcnNlIHJlZmxvZyBwYXJzZXIgaGFkIGxlZnRvdmVyIGRhdGEiKTsKKworCWZjbG9zZShsb2dmcCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZm9yX2VhY2hfcmVmbG9nX2VudChjb25zdCBjaGFyICpyZWZuYW1lLCBlYWNoX3JlZmxvZ19lbnRfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJRklMRSAqbG9nZnA7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOworCisJbG9nZnAgPSBmb3BlbihnaXRfcGF0aCgibG9ncy8lcyIsIHJlZm5hbWUpLCAiciIpOworCWlmICghbG9nZnApCisJCXJldHVybiAtMTsKKworCXdoaWxlICghcmV0ICYmICFzdHJidWZfZ2V0d2hvbGVsaW5lKCZzYiwgbG9nZnAsICdcbicpKQorCQlyZXQgPSBzaG93X29uZV9yZWZsb2dfZW50KCZzYiwgZm4sIGNiX2RhdGEpOworCWZjbG9zZShsb2dmcCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorLyoKKyAqIENhbGwgZm4gZm9yIGVhY2ggcmVmbG9nIGluIHRoZSBuYW1lc3BhY2UgaW5kaWNhdGVkIGJ5IG5hbWUuICBuYW1lCisgKiBtdXN0IGJlIGVtcHR5IG9yIGVuZCB3aXRoICcvJy4gIE5hbWUgd2lsbCBiZSB1c2VkIGFzIGEgc2NyYXRjaAorICogc3BhY2UsIGJ1dCBpdHMgY29udGVudHMgd2lsbCBiZSByZXN0b3JlZCBiZWZvcmUgcmV0dXJuLgorICovCitzdGF0aWMgaW50IGRvX2Zvcl9lYWNoX3JlZmxvZyhzdHJ1Y3Qgc3RyYnVmICpuYW1lLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlESVIgKmQgPSBvcGVuZGlyKGdpdF9wYXRoKCJsb2dzLyVzIiwgbmFtZS0+YnVmKSk7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGRpcmVudCAqZGU7CisJaW50IG9sZGxlbiA9IG5hbWUtPmxlbjsKKworCWlmICghZCkKKwkJcmV0dXJuIG5hbWUtPmxlbiA/IGVycm5vIDogMDsKKworCXdoaWxlICgoZGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCWlmIChkZS0+ZF9uYW1lWzBdID09ICcuJykKKwkJCWNvbnRpbnVlOworCQlpZiAoZW5kc193aXRoKGRlLT5kX25hbWUsICIubG9jayIpKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9hZGRzdHIobmFtZSwgZGUtPmRfbmFtZSk7CisJCWlmIChzdGF0KGdpdF9wYXRoKCJsb2dzLyVzIiwgbmFtZS0+YnVmKSwgJnN0KSA8IDApIHsKKwkJCTsgLyogc2lsZW50bHkgaWdub3JlICovCisJCX0gZWxzZSB7CisJCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJCXN0cmJ1Zl9hZGRjaChuYW1lLCAnLycpOworCQkJCXJldHZhbCA9IGRvX2Zvcl9lYWNoX3JlZmxvZyhuYW1lLCBmbiwgY2JfZGF0YSk7CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCisJCQkJaWYgKHJlYWRfcmVmX2Z1bGwobmFtZS0+YnVmLCAwLCBvaWQuaGFzaCwgTlVMTCkpCisJCQkJCXJldHZhbCA9IGVycm9yKCJiYWQgcmVmIGZvciAlcyIsIG5hbWUtPmJ1Zik7CisJCQkJZWxzZQorCQkJCQlyZXR2YWwgPSBmbihuYW1lLT5idWYsICZvaWQsIDAsIGNiX2RhdGEpOworCQkJfQorCQkJaWYgKHJldHZhbCkKKwkJCQlicmVhazsKKwkJfQorCQlzdHJidWZfc2V0bGVuKG5hbWUsIG9sZGxlbik7CisJfQorCWNsb3NlZGlyKGQpOworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBmb3JfZWFjaF9yZWZsb2coZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWU7CisJc3RyYnVmX2luaXQoJm5hbWUsIFBBVEhfTUFYKTsKKwlyZXR2YWwgPSBkb19mb3JfZWFjaF9yZWZsb2coJm5hbWUsIGZuLCBjYl9kYXRhKTsKKwlzdHJidWZfcmVsZWFzZSgmbmFtZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworLyoqCisgKiBJbmZvcm1hdGlvbiBuZWVkZWQgZm9yIGEgc2luZ2xlIHJlZiB1cGRhdGUuIFNldCBuZXdfc2hhMSB0byB0aGUgbmV3CisgKiB2YWx1ZSBvciB0byBudWxsX3NoYTEgdG8gZGVsZXRlIHRoZSByZWYuIFRvIGNoZWNrIHRoZSBvbGQgdmFsdWUKKyAqIHdoaWxlIHRoZSByZWYgaXMgbG9ja2VkLCBzZXQgKGZsYWdzICYgUkVGX0hBVkVfT0xEKSBhbmQgc2V0CisgKiBvbGRfc2hhMSB0byB0aGUgb2xkIHZhbHVlLCBvciB0byBudWxsX3NoYTEgdG8gZW5zdXJlIHRoZSByZWYgZG9lcworICogbm90IGV4aXN0IGJlZm9yZSB1cGRhdGUuCisgKi8KK3N0cnVjdCByZWZfdXBkYXRlIHsKKwkvKgorCSAqIElmIChmbGFncyAmIFJFRl9IQVZFX05FVyksIHNldCB0aGUgcmVmZXJlbmNlIHRvIHRoaXMgdmFsdWU6CisJICovCisJdW5zaWduZWQgY2hhciBuZXdfc2hhMVsyMF07CisJLyoKKwkgKiBJZiAoZmxhZ3MgJiBSRUZfSEFWRV9PTEQpLCBjaGVjayB0aGF0IHRoZSByZWZlcmVuY2UKKwkgKiBwcmV2aW91c2x5IGhhZCB0aGlzIHZhbHVlOgorCSAqLworCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCS8qCisJICogT25lIG9yIG1vcmUgb2YgUkVGX0hBVkVfTkVXLCBSRUZfSEFWRV9PTEQsIFJFRl9OT0RFUkVGLAorCSAqIFJFRl9ERUxFVElORywgYW5kIFJFRl9JU1BSVU5JTkc6CisJICovCisJdW5zaWduZWQgaW50IGZsYWdzOworCXN0cnVjdCByZWZfbG9jayAqbG9jazsKKwlpbnQgdHlwZTsKKwljaGFyICptc2c7CisJY29uc3QgY2hhciByZWZuYW1lW0ZMRVhfQVJSQVldOworfTsKKworLyoKKyAqIFRyYW5zYWN0aW9uIHN0YXRlcy4KKyAqIE9QRU46ICAgVGhlIHRyYW5zYWN0aW9uIGlzIGluIGEgdmFsaWQgc3RhdGUgYW5kIGNhbiBhY2NlcHQgbmV3IHVwZGF0ZXMuCisgKiAgICAgICAgIEFuIE9QRU4gdHJhbnNhY3Rpb24gY2FuIGJlIGNvbW1pdHRlZC4KKyAqIENMT1NFRDogQSBjbG9zZWQgdHJhbnNhY3Rpb24gaXMgbm8gbG9uZ2VyIGFjdGl2ZSBhbmQgbm8gb3RoZXIgb3BlcmF0aW9ucworICogICAgICAgICB0aGFuIGZyZWUgY2FuIGJlIHVzZWQgb24gaXQgaW4gdGhpcyBzdGF0ZS4KKyAqICAgICAgICAgQSB0cmFuc2FjdGlvbiBjYW4gZWl0aGVyIGJlY29tZSBjbG9zZWQgYnkgc3VjY2Vzc2Z1bGx5IGNvbW1pdHRpbmcKKyAqICAgICAgICAgYW4gYWN0aXZlIHRyYW5zYWN0aW9uIG9yIGlmIHRoZXJlIGlzIGEgZmFpbHVyZSB3aGlsZSBidWlsZGluZworICogICAgICAgICB0aGUgdHJhbnNhY3Rpb24gdGh1cyByZW5kZXJpbmcgaXQgZmFpbGVkL2luYWN0aXZlLgorICovCitlbnVtIHJlZl90cmFuc2FjdGlvbl9zdGF0ZSB7CisJUkVGX1RSQU5TQUNUSU9OX09QRU4gICA9IDAsCisJUkVGX1RSQU5TQUNUSU9OX0NMT1NFRCA9IDEKK307CisKKy8qCisgKiBEYXRhIHN0cnVjdHVyZSBmb3IgaG9sZGluZyBhIHJlZmVyZW5jZSB0cmFuc2FjdGlvbiwgd2hpY2ggY2FuCisgKiBjb25zaXN0IG9mIGNoZWNrcyBhbmQgdXBkYXRlcyB0byBtdWx0aXBsZSByZWZlcmVuY2VzLCBjYXJyaWVkIG91dAorICogYXMgYXRvbWljYWxseSBhcyBwb3NzaWJsZS4gIFRoaXMgc3RydWN0dXJlIGlzIG9wYXF1ZSB0byBjYWxsZXJzLgorICovCitzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uIHsKKwlzdHJ1Y3QgcmVmX3VwZGF0ZSAqKnVwZGF0ZXM7CisJc2l6ZV90IGFsbG9jOworCXNpemVfdCBucjsKKwllbnVtIHJlZl90cmFuc2FjdGlvbl9zdGF0ZSBzdGF0ZTsKK307CisKK3N0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnJlZl90cmFuc2FjdGlvbl9iZWdpbihzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJYXNzZXJ0KGVycik7CisKKwlyZXR1cm4geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlZl90cmFuc2FjdGlvbikpOworfQorCit2b2lkIHJlZl90cmFuc2FjdGlvbl9mcmVlKHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uKQoreworCWludCBpOworCisJaWYgKCF0cmFuc2FjdGlvbikKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHRyYW5zYWN0aW9uLT5ucjsgaSsrKSB7CisJCWZyZWUodHJhbnNhY3Rpb24tPnVwZGF0ZXNbaV0tPm1zZyk7CisJCWZyZWUodHJhbnNhY3Rpb24tPnVwZGF0ZXNbaV0pOworCX0KKwlmcmVlKHRyYW5zYWN0aW9uLT51cGRhdGVzKTsKKwlmcmVlKHRyYW5zYWN0aW9uKTsKK30KKworc3RhdGljIHN0cnVjdCByZWZfdXBkYXRlICphZGRfdXBkYXRlKHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJCSAgICAgY29uc3QgY2hhciAqcmVmbmFtZSkKK3sKKwlzaXplX3QgbGVuID0gc3RybGVuKHJlZm5hbWUpICsgMTsKKwlzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlID0geGNhbGxvYygxLCBzaXplb2YoKnVwZGF0ZSkgKyBsZW4pOworCisJbWVtY3B5KChjaGFyICopdXBkYXRlLT5yZWZuYW1lLCByZWZuYW1lLCBsZW4pOyAvKiBpbmNsdWRlcyBOVUwgKi8KKwlBTExPQ19HUk9XKHRyYW5zYWN0aW9uLT51cGRhdGVzLCB0cmFuc2FjdGlvbi0+bnIgKyAxLCB0cmFuc2FjdGlvbi0+YWxsb2MpOworCXRyYW5zYWN0aW9uLT51cGRhdGVzW3RyYW5zYWN0aW9uLT5ucisrXSA9IHVwZGF0ZTsKKwlyZXR1cm4gdXBkYXRlOworfQorCitpbnQgcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICptc2csCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZTsKKworCWFzc2VydChlcnIpOworCisJaWYgKHRyYW5zYWN0aW9uLT5zdGF0ZSAhPSBSRUZfVFJBTlNBQ1RJT05fT1BFTikKKwkJZGllKCJCVUc6IHVwZGF0ZSBjYWxsZWQgZm9yIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IG9wZW4iKTsKKworCWlmIChuZXdfc2hhMSAmJiAhaXNfbnVsbF9zaGExKG5ld19zaGExKSAmJgorCSAgICBjaGVja19yZWZuYW1lX2Zvcm1hdChyZWZuYW1lLCBSRUZOQU1FX0FMTE9XX09ORUxFVkVMKSkgeworCQlzdHJidWZfYWRkZihlcnIsICJyZWZ1c2luZyB0byB1cGRhdGUgcmVmIHdpdGggYmFkIG5hbWUgJXMiLAorCQkJICAgIHJlZm5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJdXBkYXRlID0gYWRkX3VwZGF0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZSk7CisJaWYgKG5ld19zaGExKSB7CisJCWhhc2hjcHkodXBkYXRlLT5uZXdfc2hhMSwgbmV3X3NoYTEpOworCQlmbGFncyB8PSBSRUZfSEFWRV9ORVc7CisJfQorCWlmIChvbGRfc2hhMSkgeworCQloYXNoY3B5KHVwZGF0ZS0+b2xkX3NoYTEsIG9sZF9zaGExKTsKKwkJZmxhZ3MgfD0gUkVGX0hBVkVfT0xEOworCX0KKwl1cGRhdGUtPmZsYWdzID0gZmxhZ3M7CisJaWYgKG1zZykKKwkJdXBkYXRlLT5tc2cgPSB4c3RyZHVwKG1zZyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCByZWZfdHJhbnNhY3Rpb25fY3JlYXRlKHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLCBjb25zdCBjaGFyICptc2csCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJaWYgKCFuZXdfc2hhMSB8fCBpc19udWxsX3NoYTEobmV3X3NoYTEpKQorCQlkaWUoIkJVRzogY3JlYXRlIGNhbGxlZCB3aXRob3V0IHZhbGlkIG5ld19zaGExIik7CisJcmV0dXJuIHJlZl90cmFuc2FjdGlvbl91cGRhdGUodHJhbnNhY3Rpb24sIHJlZm5hbWUsIG5ld19zaGExLAorCQkJCSAgICAgIG51bGxfc2hhMSwgZmxhZ3MsIG1zZywgZXJyKTsKK30KKworaW50IHJlZl90cmFuc2FjdGlvbl9kZWxldGUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlpZiAob2xkX3NoYTEgJiYgaXNfbnVsbF9zaGExKG9sZF9zaGExKSkKKwkJZGllKCJCVUc6IGRlbGV0ZSBjYWxsZWQgd2l0aCBvbGRfc2hhMSBzZXQgdG8gemVyb3MiKTsKKwlyZXR1cm4gcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZSwKKwkJCQkgICAgICBudWxsX3NoYTEsIG9sZF9zaGExLAorCQkJCSAgICAgIGZsYWdzLCBtc2csIGVycik7Cit9CisKK2ludCByZWZfdHJhbnNhY3Rpb25fdmVyaWZ5KHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCQkJICAgdW5zaWduZWQgaW50IGZsYWdzLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWlmICghb2xkX3NoYTEpCisJCWRpZSgiQlVHOiB2ZXJpZnkgY2FsbGVkIHdpdGggb2xkX3NoYTEgc2V0IHRvIE5VTEwiKTsKKwlyZXR1cm4gcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0cmFuc2FjdGlvbiwgcmVmbmFtZSwKKwkJCQkgICAgICBOVUxMLCBvbGRfc2hhMSwKKwkJCQkgICAgICBmbGFncywgTlVMTCwgZXJyKTsKK30KKworaW50IHVwZGF0ZV9yZWYoY29uc3QgY2hhciAqbXNnLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCisJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgZW51bSBhY3Rpb25fb25fZXJyIG9uZXJyKQoreworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnQgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlpZiAocmVmX3R5cGUocmVmbmFtZSkgPT0gUkVGX1RZUEVfUFNFVURPUkVGKSB7CisJCXJldCA9IHdyaXRlX3BzZXVkb3JlZihyZWZuYW1lLCBuZXdfc2hhMSwgb2xkX3NoYTEsICZlcnIpOworCX0gZWxzZSB7CisJCXQgPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJCWlmICghdCB8fAorCQkgICAgcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSh0LCByZWZuYW1lLCBuZXdfc2hhMSwgb2xkX3NoYTEsCisJCQkJCSAgIGZsYWdzLCBtc2csICZlcnIpIHx8CisJCSAgICByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHQsICZlcnIpKSB7CisJCQlyZXQgPSAxOworCQkJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodCk7CisJCX0KKwl9CisJaWYgKHJldCkgeworCQljb25zdCBjaGFyICpzdHIgPSAidXBkYXRlX3JlZiBmYWlsZWQgZm9yIHJlZiAnJXMnOiAlcyI7CisKKwkJc3dpdGNoIChvbmVycikgeworCQljYXNlIFVQREFURV9SRUZTX01TR19PTl9FUlI6CisJCQllcnJvcihzdHIsIHJlZm5hbWUsIGVyci5idWYpOworCQkJYnJlYWs7CisJCWNhc2UgVVBEQVRFX1JFRlNfRElFX09OX0VSUjoKKwkJCWRpZShzdHIsIHJlZm5hbWUsIGVyci5idWYpOworCQkJYnJlYWs7CisJCWNhc2UgVVBEQVRFX1JFRlNfUVVJRVRfT05fRVJSOgorCQkJYnJlYWs7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCXJldHVybiAxOworCX0KKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlpZiAodCkKKwkJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVmX3VwZGF0ZV9yZWplY3RfZHVwbGljYXRlcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZm5hbWVzLAorCQkJCQlzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJaW50IGksIG4gPSByZWZuYW1lcy0+bnI7CisKKwlhc3NlcnQoZXJyKTsKKworCWZvciAoaSA9IDE7IGkgPCBuOyBpKyspCisJCWlmICghc3RyY21wKHJlZm5hbWVzLT5pdGVtc1tpIC0gMV0uc3RyaW5nLCByZWZuYW1lcy0+aXRlbXNbaV0uc3RyaW5nKSkgeworCQkJc3RyYnVmX2FkZGYoZXJyLAorCQkJCSAgICAiTXVsdGlwbGUgdXBkYXRlcyBmb3IgcmVmICclcycgbm90IGFsbG93ZWQuIiwKKwkJCQkgICAgcmVmbmFtZXMtPml0ZW1zW2ldLnN0cmluZyk7CisJCQlyZXR1cm4gMTsKKwkJfQorCXJldHVybiAwOworfQorCitpbnQgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdChzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlpbnQgcmV0ID0gMCwgaTsKKwlpbnQgbiA9IHRyYW5zYWN0aW9uLT5ucjsKKwlzdHJ1Y3QgcmVmX3VwZGF0ZSAqKnVwZGF0ZXMgPSB0cmFuc2FjdGlvbi0+dXBkYXRlczsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgcmVmc190b19kZWxldGUgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpyZWZfdG9fZGVsZXRlOworCXN0cnVjdCBzdHJpbmdfbGlzdCBhZmZlY3RlZF9yZWZuYW1lcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisKKwlhc3NlcnQoZXJyKTsKKworCWlmICh0cmFuc2FjdGlvbi0+c3RhdGUgIT0gUkVGX1RSQU5TQUNUSU9OX09QRU4pCisJCWRpZSgiQlVHOiBjb21taXQgY2FsbGVkIGZvciB0cmFuc2FjdGlvbiB0aGF0IGlzIG5vdCBvcGVuIik7CisKKwlpZiAoIW4pIHsKKwkJdHJhbnNhY3Rpb24tPnN0YXRlID0gUkVGX1RSQU5TQUNUSU9OX0NMT1NFRDsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogRmFpbCBpZiBhIHJlZm5hbWUgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiB0aGUgdHJhbnNhY3Rpb246ICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZhZmZlY3RlZF9yZWZuYW1lcywgdXBkYXRlc1tpXS0+cmVmbmFtZSk7CisJc3RyaW5nX2xpc3Rfc29ydCgmYWZmZWN0ZWRfcmVmbmFtZXMpOworCWlmIChyZWZfdXBkYXRlX3JlamVjdF9kdXBsaWNhdGVzKCZhZmZlY3RlZF9yZWZuYW1lcywgZXJyKSkgeworCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyoKKwkgKiBBY3F1aXJlIGFsbCBsb2NrcywgdmVyaWZ5IG9sZCB2YWx1ZXMgaWYgcHJvdmlkZWQsIGNoZWNrCisJICogdGhhdCBuZXcgdmFsdWVzIGFyZSB2YWxpZCwgYW5kIHdyaXRlIG5ldyB2YWx1ZXMgdG8gdGhlCisJICogbG9ja2ZpbGVzLCByZWFkeSB0byBiZSBhY3RpdmF0ZWQuIE9ubHkga2VlcCBvbmUgbG9ja2ZpbGUKKwkgKiBvcGVuIGF0IGEgdGltZSB0byBhdm9pZCBydW5uaW5nIG91dCBvZiBmaWxlIGRlc2NyaXB0b3JzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3RydWN0IHJlZl91cGRhdGUgKnVwZGF0ZSA9IHVwZGF0ZXNbaV07CisKKwkJaWYgKCh1cGRhdGUtPmZsYWdzICYgUkVGX0hBVkVfTkVXKSAmJgorCQkgICAgaXNfbnVsbF9zaGExKHVwZGF0ZS0+bmV3X3NoYTEpKQorCQkJdXBkYXRlLT5mbGFncyB8PSBSRUZfREVMRVRJTkc7CisJCXVwZGF0ZS0+bG9jayA9IGxvY2tfcmVmX3NoYTFfYmFzaWMoCisJCQkJdXBkYXRlLT5yZWZuYW1lLAorCQkJCSgodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX09MRCkgPworCQkJCSB1cGRhdGUtPm9sZF9zaGExIDogTlVMTCksCisJCQkJJmFmZmVjdGVkX3JlZm5hbWVzLCBOVUxMLAorCQkJCXVwZGF0ZS0+ZmxhZ3MsCisJCQkJJnVwZGF0ZS0+dHlwZSwKKwkJCQllcnIpOworCQlpZiAoIXVwZGF0ZS0+bG9jaykgeworCQkJY2hhciAqcmVhc29uOworCisJCQlyZXQgPSAoZXJybm8gPT0gRU5PVERJUikKKwkJCQk/IFRSQU5TQUNUSU9OX05BTUVfQ09ORkxJQ1QKKwkJCQk6IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisJCQlyZWFzb24gPSBzdHJidWZfZGV0YWNoKGVyciwgTlVMTCk7CisJCQlzdHJidWZfYWRkZihlcnIsICJjYW5ub3QgbG9jayByZWYgJyVzJzogJXMiLAorCQkJCSAgICB1cGRhdGUtPnJlZm5hbWUsIHJlYXNvbik7CisJCQlmcmVlKHJlYXNvbik7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaWYgKCh1cGRhdGUtPmZsYWdzICYgUkVGX0hBVkVfTkVXKSAmJgorCQkgICAgISh1cGRhdGUtPmZsYWdzICYgUkVGX0RFTEVUSU5HKSkgeworCQkJaW50IG92ZXJ3cml0aW5nX3N5bXJlZiA9ICgodXBkYXRlLT50eXBlICYgUkVGX0lTU1lNUkVGKSAmJgorCQkJCQkJICAodXBkYXRlLT5mbGFncyAmIFJFRl9OT0RFUkVGKSk7CisKKwkJCWlmICghb3ZlcndyaXRpbmdfc3ltcmVmICYmCisJCQkgICAgIWhhc2hjbXAodXBkYXRlLT5sb2NrLT5vbGRfb2lkLmhhc2gsIHVwZGF0ZS0+bmV3X3NoYTEpKSB7CisJCQkJLyoKKwkJCQkgKiBUaGUgcmVmZXJlbmNlIGFscmVhZHkgaGFzIHRoZSBkZXNpcmVkCisJCQkJICogdmFsdWUsIHNvIHdlIGRvbid0IG5lZWQgdG8gd3JpdGUgaXQuCisJCQkJICovCisJCQl9IGVsc2UgaWYgKHdyaXRlX3JlZl90b19sb2NrZmlsZSh1cGRhdGUtPmxvY2ssCisJCQkJCQkJIHVwZGF0ZS0+bmV3X3NoYTEsCisJCQkJCQkJIGVycikpIHsKKwkJCQljaGFyICp3cml0ZV9lcnIgPSBzdHJidWZfZGV0YWNoKGVyciwgTlVMTCk7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBsb2NrIHdhcyBmcmVlZCB1cG9uIGZhaWx1cmUgb2YKKwkJCQkgKiB3cml0ZV9yZWZfdG9fbG9ja2ZpbGUoKToKKwkJCQkgKi8KKwkJCQl1cGRhdGUtPmxvY2sgPSBOVUxMOworCQkJCXN0cmJ1Zl9hZGRmKGVyciwKKwkJCQkJICAgICJjYW5ub3QgdXBkYXRlIHRoZSByZWYgJyVzJzogJXMiLAorCQkJCQkgICAgdXBkYXRlLT5yZWZuYW1lLCB3cml0ZV9lcnIpOworCQkJCWZyZWUod3JpdGVfZXJyKTsKKwkJCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0gZWxzZSB7CisJCQkJdXBkYXRlLT5mbGFncyB8PSBSRUZfTkVFRFNfQ09NTUlUOworCQkJfQorCQl9CisJCWlmICghKHVwZGF0ZS0+ZmxhZ3MgJiBSRUZfTkVFRFNfQ09NTUlUKSkgeworCQkJLyoKKwkJCSAqIFdlIGRpZG4ndCBoYXZlIHRvIHdyaXRlIGFueXRoaW5nIHRvIHRoZSBsb2NrZmlsZS4KKwkJCSAqIENsb3NlIGl0IHRvIGZyZWUgdXAgdGhlIGZpbGUgZGVzY3JpcHRvcjoKKwkJCSAqLworCQkJaWYgKGNsb3NlX3JlZih1cGRhdGUtPmxvY2spKSB7CisJCQkJc3RyYnVmX2FkZGYoZXJyLCAiQ291bGRuJ3QgY2xvc2UgJXMubG9jayIsCisJCQkJCSAgICB1cGRhdGUtPnJlZm5hbWUpOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKwkJfQorCX0KKworCS8qIFBlcmZvcm0gdXBkYXRlcyBmaXJzdCBzbyBsaXZlIGNvbW1pdHMgcmVtYWluIHJlZmVyZW5jZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB1cGRhdGVzW2ldOworCisJCWlmICh1cGRhdGUtPmZsYWdzICYgUkVGX05FRURTX0NPTU1JVCkgeworCQkJaWYgKGNvbW1pdF9yZWZfdXBkYXRlKHVwZGF0ZS0+bG9jaywKKwkJCQkJICAgICAgdXBkYXRlLT5uZXdfc2hhMSwgdXBkYXRlLT5tc2csCisJCQkJCSAgICAgIHVwZGF0ZS0+ZmxhZ3MsIGVycikpIHsKKwkJCQkvKiBmcmVlZCBieSBjb21taXRfcmVmX3VwZGF0ZSgpOiAqLworCQkJCXVwZGF0ZS0+bG9jayA9IE5VTEw7CisJCQkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9IGVsc2UgeworCQkJCS8qIGZyZWVkIGJ5IGNvbW1pdF9yZWZfdXBkYXRlKCk6ICovCisJCQkJdXBkYXRlLT5sb2NrID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KKworCS8qIFBlcmZvcm0gZGVsZXRlcyBub3cgdGhhdCB1cGRhdGVzIGFyZSBzYWZlbHkgY29tcGxldGVkICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlzdHJ1Y3QgcmVmX3VwZGF0ZSAqdXBkYXRlID0gdXBkYXRlc1tpXTsKKworCQlpZiAodXBkYXRlLT5mbGFncyAmIFJFRl9ERUxFVElORykgeworCQkJaWYgKGRlbGV0ZV9yZWZfbG9vc2UodXBkYXRlLT5sb2NrLCB1cGRhdGUtPnR5cGUsIGVycikpIHsKKwkJCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQkJCWdvdG8gY2xlYW51cDsKKwkJCX0KKworCQkJaWYgKCEodXBkYXRlLT5mbGFncyAmIFJFRl9JU1BSVU5JTkcpKQorCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmVmc190b19kZWxldGUsCisJCQkJCQkgICB1cGRhdGUtPmxvY2stPnJlZl9uYW1lKTsKKwkJfQorCX0KKworCWlmIChyZXBhY2tfd2l0aG91dF9yZWZzKCZyZWZzX3RvX2RlbGV0ZSwgZXJyKSkgeworCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQlnb3RvIGNsZWFudXA7CisJfQorCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0ocmVmX3RvX2RlbGV0ZSwgJnJlZnNfdG9fZGVsZXRlKQorCQl1bmxpbmtfb3Jfd2FybihnaXRfcGF0aCgibG9ncy8lcyIsIHJlZl90b19kZWxldGUtPnN0cmluZykpOworCWNsZWFyX2xvb3NlX3JlZl9jYWNoZSgmcmVmX2NhY2hlKTsKKworY2xlYW51cDoKKwl0cmFuc2FjdGlvbi0+c3RhdGUgPSBSRUZfVFJBTlNBQ1RJT05fQ0xPU0VEOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJaWYgKHVwZGF0ZXNbaV0tPmxvY2spCisJCQl1bmxvY2tfcmVmKHVwZGF0ZXNbaV0tPmxvY2spOworCXN0cmluZ19saXN0X2NsZWFyKCZyZWZzX3RvX2RlbGV0ZSwgMCk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmFmZmVjdGVkX3JlZm5hbWVzLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJlZl9wcmVzZW50KGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsIGludCBmbGFncywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmFmZmVjdGVkX3JlZm5hbWVzID0gY2JfZGF0YTsKKworCXJldHVybiBzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKGFmZmVjdGVkX3JlZm5hbWVzLCByZWZuYW1lKTsKK30KKworaW50IGluaXRpYWxfcmVmX3RyYW5zYWN0aW9uX2NvbW1pdChzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHJlZl9kaXIgKmxvb3NlX3JlZnMgPSBnZXRfbG9vc2VfcmVmcygmcmVmX2NhY2hlKTsKKwlzdHJ1Y3QgcmVmX2RpciAqcGFja2VkX3JlZnMgPSBnZXRfcGFja2VkX3JlZnMoJnJlZl9jYWNoZSk7CisJaW50IHJldCA9IDAsIGk7CisJaW50IG4gPSB0cmFuc2FjdGlvbi0+bnI7CisJc3RydWN0IHJlZl91cGRhdGUgKip1cGRhdGVzID0gdHJhbnNhY3Rpb24tPnVwZGF0ZXM7CisJc3RydWN0IHN0cmluZ19saXN0IGFmZmVjdGVkX3JlZm5hbWVzID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKworCWFzc2VydChlcnIpOworCisJaWYgKHRyYW5zYWN0aW9uLT5zdGF0ZSAhPSBSRUZfVFJBTlNBQ1RJT05fT1BFTikKKwkJZGllKCJCVUc6IGNvbW1pdCBjYWxsZWQgZm9yIHRyYW5zYWN0aW9uIHRoYXQgaXMgbm90IG9wZW4iKTsKKworCS8qIEZhaWwgaWYgYSByZWZuYW1lIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHRyYW5zYWN0aW9uOiAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXN0cmluZ19saXN0X2FwcGVuZCgmYWZmZWN0ZWRfcmVmbmFtZXMsIHVwZGF0ZXNbaV0tPnJlZm5hbWUpOworCXN0cmluZ19saXN0X3NvcnQoJmFmZmVjdGVkX3JlZm5hbWVzKTsKKwlpZiAocmVmX3VwZGF0ZV9yZWplY3RfZHVwbGljYXRlcygmYWZmZWN0ZWRfcmVmbmFtZXMsIGVycikpIHsKKwkJcmV0ID0gVFJBTlNBQ1RJT05fR0VORVJJQ19FUlJPUjsKKwkJZ290byBjbGVhbnVwOworCX0KKworCS8qCisJICogSXQncyByZWFsbHkgdW5kZWZpbmVkIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpbiBhbiBhY3RpdmUKKwkgKiByZXBvc2l0b3J5IG9yIHdoZW4gdGhlcmUgYXJlIGV4aXN0aW5nIHJlZmVyZW5jZXM6IHdlIGFyZQorCSAqIG9ubHkgbG9ja2luZyBhbmQgY2hhbmdpbmcgcGFja2VkLXJlZnMsIHNvICgxKSBhbnkKKwkgKiBzaW11bHRhbmVvdXMgcHJvY2Vzc2VzIG1pZ2h0IHRyeSB0byBjaGFuZ2UgYSByZWZlcmVuY2UgYXQKKwkgKiB0aGUgc2FtZSB0aW1lIHdlIGRvLCBhbmQgKDIpIGFueSBleGlzdGluZyBsb29zZSB2ZXJzaW9ucyBvZgorCSAqIHRoZSByZWZlcmVuY2VzIHRoYXQgd2UgYXJlIHNldHRpbmcgd291bGQgaGF2ZSBwcmVjZWRlbmNlCisJICogb3ZlciBvdXIgdmFsdWVzLiBCdXQgc29tZSByZW1vdGUgaGVscGVycyBjcmVhdGUgdGhlIHJlbW90ZQorCSAqICJIRUFEIiBhbmQgIm1hc3RlciIgYnJhbmNoZXMgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwKKwkgKiBzbyBoZXJlIHdlIHJlYWxseSBvbmx5IGNoZWNrIHRoYXQgbm9uZSBvZiB0aGUgcmVmZXJlbmNlcworCSAqIHRoYXQgd2UgYXJlIGNyZWF0aW5nIGFscmVhZHkgZXhpc3RzLgorCSAqLworCWlmIChmb3JfZWFjaF9yYXdyZWYocmVmX3ByZXNlbnQsICZhZmZlY3RlZF9yZWZuYW1lcykpCisJCWRpZSgiQlVHOiBpbml0aWFsIHJlZiB0cmFuc2FjdGlvbiBjYWxsZWQgd2l0aCBleGlzdGluZyByZWZzIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB1cGRhdGVzW2ldOworCisJCWlmICgodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX09MRCkgJiYKKwkJICAgICFpc19udWxsX3NoYTEodXBkYXRlLT5vbGRfc2hhMSkpCisJCQlkaWUoIkJVRzogaW5pdGlhbCByZWYgdHJhbnNhY3Rpb24gd2l0aCBvbGRfc2hhMSBzZXQiKTsKKwkJaWYgKHZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZSh1cGRhdGUtPnJlZm5hbWUsCisJCQkJCSAgICAgJmFmZmVjdGVkX3JlZm5hbWVzLCBOVUxMLAorCQkJCQkgICAgIGxvb3NlX3JlZnMsIGVycikgfHwKKwkJICAgIHZlcmlmeV9yZWZuYW1lX2F2YWlsYWJsZSh1cGRhdGUtPnJlZm5hbWUsCisJCQkJCSAgICAgJmFmZmVjdGVkX3JlZm5hbWVzLCBOVUxMLAorCQkJCQkgICAgIHBhY2tlZF9yZWZzLCBlcnIpKSB7CisJCQlyZXQgPSBUUkFOU0FDVElPTl9OQU1FX0NPTkZMSUNUOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCisJaWYgKGxvY2tfcGFja2VkX3JlZnMoMCkpIHsKKwkJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIGxvY2sgcGFja2VkLXJlZnMgZmlsZTogJXMiLAorCQkJICAgIHN0cmVycm9yKGVycm5vKSk7CisJCXJldCA9IFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1I7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN0cnVjdCByZWZfdXBkYXRlICp1cGRhdGUgPSB1cGRhdGVzW2ldOworCisJCWlmICgodXBkYXRlLT5mbGFncyAmIFJFRl9IQVZFX05FVykgJiYKKwkJICAgICFpc19udWxsX3NoYTEodXBkYXRlLT5uZXdfc2hhMSkpCisJCQlhZGRfcGFja2VkX3JlZih1cGRhdGUtPnJlZm5hbWUsIHVwZGF0ZS0+bmV3X3NoYTEpOworCX0KKworCWlmIChjb21taXRfcGFja2VkX3JlZnMoKSkgeworCQlzdHJidWZfYWRkZihlcnIsICJ1bmFibGUgdG8gY29tbWl0IHBhY2tlZC1yZWZzIGZpbGU6ICVzIiwKKwkJCSAgICBzdHJlcnJvcihlcnJubykpOworCQlyZXQgPSBUUkFOU0FDVElPTl9HRU5FUklDX0VSUk9SOworCQlnb3RvIGNsZWFudXA7CisJfQorCitjbGVhbnVwOgorCXRyYW5zYWN0aW9uLT5zdGF0ZSA9IFJFRl9UUkFOU0FDVElPTl9DTE9TRUQ7CisJc3RyaW5nX2xpc3RfY2xlYXIoJmFmZmVjdGVkX3JlZm5hbWVzLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitjaGFyICpzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgc3RyaWN0KQoreworCWludCBpOworCXN0YXRpYyBjaGFyICoqc2NhbmZfZm10czsKKwlzdGF0aWMgaW50IG5yX3J1bGVzOworCWNoYXIgKnNob3J0X25hbWU7CisKKwlpZiAoIW5yX3J1bGVzKSB7CisJCS8qCisJCSAqIFByZS1nZW5lcmF0ZSBzY2FuZiBmb3JtYXRzIGZyb20gcmVmX3Jldl9wYXJzZV9ydWxlc1tdLgorCQkgKiBHZW5lcmF0ZSBhIGZvcm1hdCBzdWl0YWJsZSBmb3Igc2NhbmYgZnJvbSBhCisJCSAqIHJlZl9yZXZfcGFyc2VfcnVsZXMgcnVsZSBieSBpbnRlcnBvbGF0aW5nICIlcyIgYXQgdGhlCisJCSAqIGxvY2F0aW9uIG9mIHRoZSAiJS4qcyIuCisJCSAqLworCQlzaXplX3QgdG90YWxfbGVuID0gMDsKKwkJc2l6ZV90IG9mZnNldCA9IDA7CisKKwkJLyogdGhlIHJ1bGUgbGlzdCBpcyBOVUxMIHRlcm1pbmF0ZWQsIGNvdW50IHRoZW0gZmlyc3QgKi8KKwkJZm9yIChucl9ydWxlcyA9IDA7IHJlZl9yZXZfcGFyc2VfcnVsZXNbbnJfcnVsZXNdOyBucl9ydWxlcysrKQorCQkJLyogLTIgZm9yIHN0cmxlbigiJS4qcyIpIC0gc3RybGVuKCIlcyIpOyArMSBmb3IgTlVMICovCisJCQl0b3RhbF9sZW4gKz0gc3RybGVuKHJlZl9yZXZfcGFyc2VfcnVsZXNbbnJfcnVsZXNdKSAtIDIgKyAxOworCisJCXNjYW5mX2ZtdHMgPSB4bWFsbG9jKG5yX3J1bGVzICogc2l6ZW9mKGNoYXIgKikgKyB0b3RhbF9sZW4pOworCisJCW9mZnNldCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBucl9ydWxlczsgaSsrKSB7CisJCQlhc3NlcnQob2Zmc2V0IDwgdG90YWxfbGVuKTsKKwkJCXNjYW5mX2ZtdHNbaV0gPSAoY2hhciAqKSZzY2FuZl9mbXRzW25yX3J1bGVzXSArIG9mZnNldDsKKwkJCW9mZnNldCArPSBzbnByaW50ZihzY2FuZl9mbXRzW2ldLCB0b3RhbF9sZW4gLSBvZmZzZXQsCisJCQkJCSAgIHJlZl9yZXZfcGFyc2VfcnVsZXNbaV0sIDIsICIlcyIpICsgMTsKKwkJfQorCX0KKworCS8qIGJhaWwgb3V0IGlmIHRoZXJlIGFyZSBubyBydWxlcyAqLworCWlmICghbnJfcnVsZXMpCisJCXJldHVybiB4c3RyZHVwKHJlZm5hbWUpOworCisJLyogYnVmZmVyIGZvciBzY2FuZiByZXN1bHQsIGF0IG1vc3QgcmVmbmFtZSBtdXN0IGZpdCAqLworCXNob3J0X25hbWUgPSB4c3RyZHVwKHJlZm5hbWUpOworCisJLyogc2tpcCBmaXJzdCBydWxlLCBpdCB3aWxsIGFsd2F5cyBtYXRjaCAqLworCWZvciAoaSA9IG5yX3J1bGVzIC0gMTsgaSA+IDAgOyAtLWkpIHsKKwkJaW50IGo7CisJCWludCBydWxlc190b19mYWlsID0gaTsKKwkJaW50IHNob3J0X25hbWVfbGVuOworCisJCWlmICgxICE9IHNzY2FuZihyZWZuYW1lLCBzY2FuZl9mbXRzW2ldLCBzaG9ydF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCXNob3J0X25hbWVfbGVuID0gc3RybGVuKHNob3J0X25hbWUpOworCisJCS8qCisJCSAqIGluIHN0cmljdCBtb2RlLCBhbGwgKGV4Y2VwdCB0aGUgbWF0Y2hlZCBvbmUpIHJ1bGVzCisJCSAqIG11c3QgZmFpbCB0byByZXNvbHZlIHRvIGEgdmFsaWQgbm9uLWFtYmlndW91cyByZWYKKwkJICovCisJCWlmIChzdHJpY3QpCisJCQlydWxlc190b19mYWlsID0gbnJfcnVsZXM7CisKKwkJLyoKKwkJICogY2hlY2sgaWYgdGhlIHNob3J0IG5hbWUgcmVzb2x2ZXMgdG8gYSB2YWxpZCByZWYsCisJCSAqIGJ1dCB1c2Ugb25seSBydWxlcyBwcmlvciB0byB0aGUgbWF0Y2hlZCBvbmUKKwkJICovCisJCWZvciAoaiA9IDA7IGogPCBydWxlc190b19mYWlsOyBqKyspIHsKKwkJCWNvbnN0IGNoYXIgKnJ1bGUgPSByZWZfcmV2X3BhcnNlX3J1bGVzW2pdOworCQkJY2hhciByZWZuYW1lW1BBVEhfTUFYXTsKKworCQkJLyogc2tpcCBtYXRjaGVkIHJ1bGUgKi8KKwkJCWlmIChpID09IGopCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiB0aGUgc2hvcnQgbmFtZSBpcyBhbWJpZ3VvdXMsIGlmIGl0IHJlc29sdmVzCisJCQkgKiAod2l0aCB0aGlzIHByZXZpb3VzIHJ1bGUpIHRvIGEgdmFsaWQgcmVmCisJCQkgKiByZWFkX3JlZigpIHJldHVybnMgMCBvbiBzdWNjZXNzCisJCQkgKi8KKwkJCW1rc25wYXRoKHJlZm5hbWUsIHNpemVvZihyZWZuYW1lKSwKKwkJCQkgcnVsZSwgc2hvcnRfbmFtZV9sZW4sIHNob3J0X25hbWUpOworCQkJaWYgKHJlZl9leGlzdHMocmVmbmFtZSkpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKgorCQkgKiBzaG9ydCBuYW1lIGlzIG5vbi1hbWJpZ3VvdXMgaWYgYWxsIHByZXZpb3VzIHJ1bGVzCisJCSAqIGhhdmVuJ3QgcmVzb2x2ZWQgdG8gYSB2YWxpZCByZWYKKwkJICovCisJCWlmIChqID09IHJ1bGVzX3RvX2ZhaWwpCisJCQlyZXR1cm4gc2hvcnRfbmFtZTsKKwl9CisKKwlmcmVlKHNob3J0X25hbWUpOworCXJldHVybiB4c3RyZHVwKHJlZm5hbWUpOworfQorCitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0ICpoaWRlX3JlZnM7CisKK2ludCBwYXJzZV9oaWRlX3JlZnNfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIGNvbnN0IGNoYXIgKnNlY3Rpb24pCit7CisJaWYgKCFzdHJjbXAoInRyYW5zZmVyLmhpZGVyZWZzIiwgdmFyKSB8fAorCSAgICAvKiBORUVEU1dPUks6IHVzZSBwYXJzZV9jb25maWdfa2V5KCkgb25jZSBib3RoIGFyZSBtZXJnZWQgKi8KKwkgICAgKHN0YXJ0c193aXRoKHZhciwgc2VjdGlvbikgJiYgdmFyW3N0cmxlbihzZWN0aW9uKV0gPT0gJy4nICYmCisJICAgICAhc3RyY21wKHZhciArIHN0cmxlbihzZWN0aW9uKSwgIi5oaWRlcmVmcyIpKSkgeworCQljaGFyICpyZWY7CisJCWludCBsZW47CisKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQlyZWYgPSB4c3RyZHVwKHZhbHVlKTsKKwkJbGVuID0gc3RybGVuKHJlZik7CisJCXdoaWxlIChsZW4gJiYgcmVmW2xlbiAtIDFdID09ICcvJykKKwkJCXJlZlstLWxlbl0gPSAnXDAnOworCQlpZiAoIWhpZGVfcmVmcykgeworCQkJaGlkZV9yZWZzID0geGNhbGxvYygxLCBzaXplb2YoKmhpZGVfcmVmcykpOworCQkJaGlkZV9yZWZzLT5zdHJkdXBfc3RyaW5ncyA9IDE7CisJCX0KKwkJc3RyaW5nX2xpc3RfYXBwZW5kKGhpZGVfcmVmcywgcmVmKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByZWZfaXNfaGlkZGVuKGNvbnN0IGNoYXIgKnJlZm5hbWUpCit7CisJaW50IGk7CisKKwlpZiAoIWhpZGVfcmVmcykKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gaGlkZV9yZWZzLT5uciAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWNvbnN0IGNoYXIgKm1hdGNoID0gaGlkZV9yZWZzLT5pdGVtc1tpXS5zdHJpbmc7CisJCWludCBuZWcgPSAwOworCQlpbnQgbGVuOworCisJCWlmICgqbWF0Y2ggPT0gJyEnKSB7CisJCQluZWcgPSAxOworCQkJbWF0Y2grKzsKKwkJfQorCisJCWlmICghc3RhcnRzX3dpdGgocmVmbmFtZSwgbWF0Y2gpKQorCQkJY29udGludWU7CisJCWxlbiA9IHN0cmxlbihtYXRjaCk7CisJCWlmICghcmVmbmFtZVtsZW5dIHx8IHJlZm5hbWVbbGVuXSA9PSAnLycpCisJCQlyZXR1cm4gIW5lZzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBleHBpcmVfcmVmbG9nX2NiIHsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJcmVmbG9nX2V4cGlyeV9zaG91bGRfcHJ1bmVfZm4gKnNob3VsZF9wcnVuZV9mbjsKKwl2b2lkICpwb2xpY3lfY2I7CisJRklMRSAqbmV3bG9nOworCXVuc2lnbmVkIGNoYXIgbGFzdF9rZXB0X3NoYTFbMjBdOworfTsKKworc3RhdGljIGludCBleHBpcmVfcmVmbG9nX2VudCh1bnNpZ25lZCBjaGFyICpvc2hhMSwgdW5zaWduZWQgY2hhciAqbnNoYTEsCisJCQkgICAgIGNvbnN0IGNoYXIgKmVtYWlsLCB1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCwgaW50IHR6LAorCQkJICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBleHBpcmVfcmVmbG9nX2NiICpjYiA9IGNiX2RhdGE7CisJc3RydWN0IGV4cGlyZV9yZWZsb2dfcG9saWN5X2NiICpwb2xpY3lfY2IgPSBjYi0+cG9saWN5X2NiOworCisJaWYgKGNiLT5mbGFncyAmIEVYUElSRV9SRUZMT0dTX1JFV1JJVEUpCisJCW9zaGExID0gY2ItPmxhc3Rfa2VwdF9zaGExOworCisJaWYgKCgqY2ItPnNob3VsZF9wcnVuZV9mbikob3NoYTEsIG5zaGExLCBlbWFpbCwgdGltZXN0YW1wLCB0eiwKKwkJCQkgICBtZXNzYWdlLCBwb2xpY3lfY2IpKSB7CisJCWlmICghY2ItPm5ld2xvZykKKwkJCXByaW50Zigid291bGQgcHJ1bmUgJXMiLCBtZXNzYWdlKTsKKwkJZWxzZSBpZiAoY2ItPmZsYWdzICYgRVhQSVJFX1JFRkxPR1NfVkVSQk9TRSkKKwkJCXByaW50ZigicHJ1bmUgJXMiLCBtZXNzYWdlKTsKKwl9IGVsc2UgeworCQlpZiAoY2ItPm5ld2xvZykgeworCQkJZnByaW50ZihjYi0+bmV3bG9nLCAiJXMgJXMgJXMgJWx1ICUrMDVkXHQlcyIsCisJCQkJc2hhMV90b19oZXgob3NoYTEpLCBzaGExX3RvX2hleChuc2hhMSksCisJCQkJZW1haWwsIHRpbWVzdGFtcCwgdHosIG1lc3NhZ2UpOworCQkJaGFzaGNweShjYi0+bGFzdF9rZXB0X3NoYTEsIG5zaGExKTsKKwkJfQorCQlpZiAoY2ItPmZsYWdzICYgRVhQSVJFX1JFRkxPR1NfVkVSQk9TRSkKKwkJCXByaW50Zigia2VlcCAlcyIsIG1lc3NhZ2UpOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJlZmxvZ19leHBpcmUoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJIHVuc2lnbmVkIGludCBmbGFncywKKwkJIHJlZmxvZ19leHBpcnlfcHJlcGFyZV9mbiBwcmVwYXJlX2ZuLAorCQkgcmVmbG9nX2V4cGlyeV9zaG91bGRfcHJ1bmVfZm4gc2hvdWxkX3BydW5lX2ZuLAorCQkgcmVmbG9nX2V4cGlyeV9jbGVhbnVwX2ZuIGNsZWFudXBfZm4sCisJCSB2b2lkICpwb2xpY3lfY2JfZGF0YSkKK3sKKwlzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSByZWZsb2dfbG9jazsKKwlzdHJ1Y3QgZXhwaXJlX3JlZmxvZ19jYiBjYjsKKwlzdHJ1Y3QgcmVmX2xvY2sgKmxvY2s7CisJY2hhciAqbG9nX2ZpbGU7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IHR5cGU7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKworCW1lbXNldCgmY2IsIDAsIHNpemVvZihjYikpOworCWNiLmZsYWdzID0gZmxhZ3M7CisJY2IucG9saWN5X2NiID0gcG9saWN5X2NiX2RhdGE7CisJY2Iuc2hvdWxkX3BydW5lX2ZuID0gc2hvdWxkX3BydW5lX2ZuOworCisJLyoKKwkgKiBUaGUgcmVmbG9nIGZpbGUgaXMgbG9ja2VkIGJ5IGhvbGRpbmcgdGhlIGxvY2sgb24gdGhlCisJICogcmVmZXJlbmNlIGl0c2VsZiwgcGx1cyB3ZSBtaWdodCBuZWVkIHRvIHVwZGF0ZSB0aGUKKwkgKiByZWZlcmVuY2UgaWYgLS11cGRhdGVyZWYgd2FzIHNwZWNpZmllZDoKKwkgKi8KKwlsb2NrID0gbG9ja19yZWZfc2hhMV9iYXNpYyhyZWZuYW1lLCBzaGExLCBOVUxMLCBOVUxMLCAwLCAmdHlwZSwgJmVycik7CisJaWYgKCFsb2NrKSB7CisJCWVycm9yKCJjYW5ub3QgbG9jayByZWYgJyVzJzogJXMiLCByZWZuYW1lLCBlcnIuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKCFyZWZsb2dfZXhpc3RzKHJlZm5hbWUpKSB7CisJCXVubG9ja19yZWYobG9jayk7CisJCXJldHVybiAwOworCX0KKworCWxvZ19maWxlID0gZ2l0X3BhdGhkdXAoImxvZ3MvJXMiLCByZWZuYW1lKTsKKwlpZiAoIShmbGFncyAmIEVYUElSRV9SRUZMT0dTX0RSWV9SVU4pKSB7CisJCS8qCisJCSAqIEV2ZW4gdGhvdWdoIGhvbGRpbmcgJEdJVF9ESVIvbG9ncy8kcmVmbG9nLmxvY2sgaGFzCisJCSAqIG5vIGxvY2tpbmcgaW1wbGljYXRpb25zLCB3ZSB1c2UgdGhlIGxvY2tfZmlsZQorCQkgKiBtYWNoaW5lcnkgaGVyZSBhbnl3YXkgYmVjYXVzZSBpdCBkb2VzIGEgbG90IG9mIHRoZQorCQkgKiB3b3JrIHdlIG5lZWQsIGluY2x1ZGluZyBjbGVhbmluZyB1cCBpZiB0aGUgcHJvZ3JhbQorCQkgKiBleGl0cyB1bmV4cGVjdGVkbHkuCisJCSAqLworCQlpZiAoaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmcmVmbG9nX2xvY2ssIGxvZ19maWxlLCAwKSA8IDApIHsKKwkJCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJCQl1bmFibGVfdG9fbG9ja19tZXNzYWdlKGxvZ19maWxlLCBlcnJubywgJmVycik7CisJCQllcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZlcnIpOworCQkJZ290byBmYWlsdXJlOworCQl9CisJCWNiLm5ld2xvZyA9IGZkb3Blbl9sb2NrX2ZpbGUoJnJlZmxvZ19sb2NrLCAidyIpOworCQlpZiAoIWNiLm5ld2xvZykgeworCQkJZXJyb3IoImNhbm5vdCBmZG9wZW4gJXMgKCVzKSIsCisJCQkgICAgICBnZXRfbG9ja19maWxlX3BhdGgoJnJlZmxvZ19sb2NrKSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWdvdG8gZmFpbHVyZTsKKwkJfQorCX0KKworCSgqcHJlcGFyZV9mbikocmVmbmFtZSwgc2hhMSwgY2IucG9saWN5X2NiKTsKKwlmb3JfZWFjaF9yZWZsb2dfZW50KHJlZm5hbWUsIGV4cGlyZV9yZWZsb2dfZW50LCAmY2IpOworCSgqY2xlYW51cF9mbikoY2IucG9saWN5X2NiKTsKKworCWlmICghKGZsYWdzICYgRVhQSVJFX1JFRkxPR1NfRFJZX1JVTikpIHsKKwkJLyoKKwkJICogSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGFkanVzdCBhIHJlZmVyZW5jZSBwb2ludGVkCisJCSAqIHRvIGJ5IGEgc3ltYm9saWMgcmVmIGJhc2VkIG9uIGV4cGlyaW5nIGVudHJpZXMgaW4KKwkJICogdGhlIHN5bWJvbGljIHJlZmVyZW5jZSdzIHJlZmxvZy4gTm9yIGNhbiB3ZSB1cGRhdGUKKwkJICogYSByZWZlcmVuY2UgaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyByZWZsb2cKKwkJICogZW50cmllcy4KKwkJICovCisJCWludCB1cGRhdGUgPSAoZmxhZ3MgJiBFWFBJUkVfUkVGTE9HU19VUERBVEVfUkVGKSAmJgorCQkJISh0eXBlICYgUkVGX0lTU1lNUkVGKSAmJgorCQkJIWlzX251bGxfc2hhMShjYi5sYXN0X2tlcHRfc2hhMSk7CisKKwkJaWYgKGNsb3NlX2xvY2tfZmlsZSgmcmVmbG9nX2xvY2spKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoImNvdWxkbid0IHdyaXRlICVzOiAlcyIsIGxvZ19maWxlLAorCQkJCQlzdHJlcnJvcihlcnJubykpOworCQl9IGVsc2UgaWYgKHVwZGF0ZSAmJgorCQkJICAgKHdyaXRlX2luX2Z1bGwoZ2V0X2xvY2tfZmlsZV9mZChsb2NrLT5sayksCisJCQkJc2hhMV90b19oZXgoY2IubGFzdF9rZXB0X3NoYTEpLCA0MCkgIT0gNDAgfHwKKwkJCSAgICB3cml0ZV9zdHJfaW5fZnVsbChnZXRfbG9ja19maWxlX2ZkKGxvY2stPmxrKSwgIlxuIikgIT0gMSB8fAorCQkJICAgIGNsb3NlX3JlZihsb2NrKSA8IDApKSB7CisJCQlzdGF0dXMgfD0gZXJyb3IoImNvdWxkbid0IHdyaXRlICVzIiwKKwkJCQkJZ2V0X2xvY2tfZmlsZV9wYXRoKGxvY2stPmxrKSk7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUoJnJlZmxvZ19sb2NrKTsKKwkJfSBlbHNlIGlmIChjb21taXRfbG9ja19maWxlKCZyZWZsb2dfbG9jaykpIHsKKwkJCXN0YXR1cyB8PSBlcnJvcigidW5hYmxlIHRvIGNvbW1pdCByZWZsb2cgJyVzJyAoJXMpIiwKKwkJCQkJbG9nX2ZpbGUsIHN0cmVycm9yKGVycm5vKSk7CisJCX0gZWxzZSBpZiAodXBkYXRlICYmIGNvbW1pdF9yZWYobG9jaykpIHsKKwkJCXN0YXR1cyB8PSBlcnJvcigiY291bGRuJ3Qgc2V0ICVzIiwgbG9jay0+cmVmX25hbWUpOworCQl9CisJfQorCWZyZWUobG9nX2ZpbGUpOworCXVubG9ja19yZWYobG9jayk7CisJcmV0dXJuIHN0YXR1czsKKworIGZhaWx1cmU6CisJcm9sbGJhY2tfbG9ja19maWxlKCZyZWZsb2dfbG9jayk7CisJZnJlZShsb2dfZmlsZSk7CisJdW5sb2NrX3JlZihsb2NrKTsKKwlyZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9yZWZzLmggYi9yZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzMGM5OAotLS0gL2Rldi9udWxsCisrKyBiL3JlZnMuaApAQCAtMCwwICsxLDUwMyBAQAorI2lmbmRlZiBSRUZTX0gKKyNkZWZpbmUgUkVGU19ICisKKy8qCisgKiBSZXNvbHZlIGEgcmVmZXJlbmNlLCByZWN1cnNpdmVseSBmb2xsb3dpbmcgc3ltYm9saWMgcmVmZXJlcmVuY2VzLgorICoKKyAqIFN0b3JlIHRoZSByZWZlcnJlZC10byBvYmplY3QncyBuYW1lIGluIHNoYTEgYW5kIHJldHVybiB0aGUgbmFtZSBvZgorICogdGhlIG5vbi1zeW1ib2xpYyByZWZlcmVuY2UgdGhhdCB1bHRpbWF0ZWx5IHBvaW50ZWQgYXQgaXQuICBUaGUKKyAqIHJldHVybiB2YWx1ZSwgaWYgbm90IE5VTEwsIGlzIGEgcG9pbnRlciBpbnRvIGVpdGhlciBhIHN0YXRpYyBidWZmZXIKKyAqIG9yIHRoZSBpbnB1dCByZWYuCisgKgorICogSWYgdGhlIHJlZmVyZW5jZSBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gYW4gb2JqZWN0LCB0aGUgYmVoYXZpb3IKKyAqIGRlcGVuZHMgb24gdGhlIFJFU09MVkVfUkVGX1JFQURJTkcgZmxhZzoKKyAqCisgKiAtIElmIFJFU09MVkVfUkVGX1JFQURJTkcgaXMgc2V0LCByZXR1cm4gTlVMTC4KKyAqCisgKiAtIElmIFJFU09MVkVfUkVGX1JFQURJTkcgaXMgbm90IHNldCwgY2xlYXIgc2hhMSBhbmQgcmV0dXJuIHRoZSBuYW1lIG9mCisgKiAgIHRoZSBsYXN0IHJlZmVyZW5jZSBuYW1lIGluIHRoZSBjaGFpbiwgd2hpY2ggd2lsbCBlaXRoZXIgYmUgYSBub24tc3ltYm9saWMKKyAqICAgcmVmZXJlbmNlIG9yIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UuICBJZiB0aGlzIGlzIGEgcHJlbHVkZSB0bworICogICAid3JpdGluZyIgdG8gdGhlIHJlZiwgdGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbmFtZSBvZiB0aGUgcmVmCisgKiAgIHRoYXQgd2lsbCBhY3R1YWxseSBiZSBjcmVhdGVkIG9yIGNoYW5nZWQuCisgKgorICogSWYgdGhlIFJFU09MVkVfUkVGX05PX1JFQ1VSU0UgZmxhZyBpcyBwYXNzZWQsIG9ubHkgcmVzb2x2ZXMgb25lCisgKiBsZXZlbCBvZiBzeW1ib2xpYyByZWZlcmVuY2UuICBUaGUgdmFsdWUgc3RvcmVkIGluIHNoYTEgZm9yIGEgc3ltYm9saWMKKyAqIHJlZmVyZW5jZSB3aWxsIGFsd2F5cyBiZSBudWxsX3NoYTEgaW4gdGhpcyBjYXNlLCBhbmQgdGhlIHJldHVybgorICogdmFsdWUgaXMgdGhlIHJlZmVyZW5jZSB0aGF0IHRoZSBzeW1yZWYgcmVmZXJzIHRvIGRpcmVjdGx5LgorICoKKyAqIElmIGZsYWdzIGlzIG5vbi1OVUxMLCBzZXQgdGhlIHZhbHVlIHRoYXQgaXQgcG9pbnRzIHRvIHRoZQorICogY29tYmluYXRpb24gb2YgUkVGX0lTUEFDS0VEIChpZiB0aGUgcmVmZXJlbmNlIHdhcyBmb3VuZCBhbW9uZyB0aGUKKyAqIHBhY2tlZCByZWZlcmVuY2VzKSwgUkVGX0lTU1lNUkVGIChpZiB0aGUgaW5pdGlhbCByZWZlcmVuY2Ugd2FzIGEKKyAqIHN5bWJvbGljIHJlZmVyZW5jZSksIFJFRl9CQURfTkFNRSAoaWYgdGhlIHJlZmVyZW5jZSBuYW1lIGlzIGlsbAorICogZm9ybWVkIC0tLSBzZWUgUkVTT0xWRV9SRUZfQUxMT1dfQkFEX05BTUUgYmVsb3cpLCBhbmQgUkVGX0lTQlJPS0VOCisgKiAoaWYgdGhlIHJlZiBpcyBtYWxmb3JtZWQgb3IgaGFzIGEgYmFkIG5hbWUpLiBTZWUgcmVmcy5oIGZvciBtb3JlIGRldGFpbAorICogb24gZWFjaCBmbGFnLgorICoKKyAqIElmIHJlZiBpcyBub3QgYSBwcm9wZXJseS1mb3JtYXR0ZWQsIG5vcm1hbGl6ZWQgcmVmZXJlbmNlLCByZXR1cm4KKyAqIE5VTEwuICBJZiBtb3JlIHRoYW4gTUFYREVQVEggcmVjdXJzaXZlIHN5bWJvbGljIGxvb2t1cHMgYXJlIG5lZWRlZCwKKyAqIGdpdmUgdXAgYW5kIHJldHVybiBOVUxMLgorICoKKyAqIFJFU09MVkVfUkVGX0FMTE9XX0JBRF9OQU1FIGFsbG93cyByZXNvbHZpbmcgcmVmcyBldmVuIHdoZW4gdGhlaXIKKyAqIG5hbWUgaXMgaW52YWxpZCBhY2NvcmRpbmcgdG8gZ2l0LWNoZWNrLXJlZi1mb3JtYXQoMSkuICBJZiB0aGUgbmFtZQorICogaXMgYmFkIHRoZW4gdGhlIHZhbHVlIHN0b3JlZCBpbiBzaGExIHdpbGwgYmUgbnVsbF9zaGExIGFuZCB0aGUgdHdvCisgKiBmbGFncyBSRUZfSVNCUk9LRU4gYW5kIFJFRl9CQURfTkFNRSB3aWxsIGJlIHNldC4KKyAqCisgKiBFdmVuIHdpdGggUkVTT0xWRV9SRUZfQUxMT1dfQkFEX05BTUUsIG5hbWVzIHRoYXQgZXNjYXBlIHRoZSByZWZzLworICogZGlyZWN0b3J5IGFuZCBkbyBub3QgY29uc2lzdCBvZiBhbGwgY2FwcyBhbmQgdW5kZXJzY29yZXMgY2Fubm90IGJlCisgKiByZXNvbHZlZC4gVGhlIGZ1bmN0aW9uIHJldHVybnMgTlVMTCBmb3Igc3VjaCByZWYgbmFtZXMuCisgKiBDYXBzIGFuZCB1bmRlcnNjb3JlcyByZWZlcnMgdG8gdGhlIHNwZWNpYWwgcmVmcywgc3VjaCBhcyBIRUFELAorICogRkVUQ0hfSEVBRCBhbmQgZnJpZW5kcywgdGhhdCBhbGwgbGl2ZSBvdXRzaWRlIG9mIHRoZSByZWZzLyBkaXJlY3RvcnkuCisgKi8KKyNkZWZpbmUgUkVTT0xWRV9SRUZfUkVBRElORyAweDAxCisjZGVmaW5lIFJFU09MVkVfUkVGX05PX1JFQ1VSU0UgMHgwMgorI2RlZmluZSBSRVNPTFZFX1JFRl9BTExPV19CQURfTkFNRSAweDA0CisKK2V4dGVybiBjb25zdCBjaGFyICpyZXNvbHZlX3JlZl91bnNhZmUoY29uc3QgY2hhciAqcmVmbmFtZSwgaW50IHJlc29sdmVfZmxhZ3MsCisJCQkJICAgICAgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50ICpmbGFncyk7CisKK2V4dGVybiBjaGFyICpyZXNvbHZlX3JlZmR1cChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgcmVzb2x2ZV9mbGFncywKKwkJCSAgICB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgKmZsYWdzKTsKKworZXh0ZXJuIGludCByZWFkX3JlZl9mdWxsKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCByZXNvbHZlX2ZsYWdzLAorCQkJIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCAqZmxhZ3MpOworZXh0ZXJuIGludCByZWFkX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKTsKKworZXh0ZXJuIGludCByZWZfZXhpc3RzKGNvbnN0IGNoYXIgKnJlZm5hbWUpOworCitleHRlcm4gaW50IGlzX2JyYW5jaChjb25zdCBjaGFyICpyZWZuYW1lKTsKKworLyoKKyAqIElmIHJlZm5hbWUgaXMgYSBub24tc3ltYm9saWMgcmVmZXJlbmNlIHRoYXQgcmVmZXJzIHRvIGEgdGFnIG9iamVjdCwKKyAqIGFuZCB0aGUgdGFnIGNhbiBiZSAocmVjdXJzaXZlbHkpIGRlcmVmZXJlbmNlZCB0byBhIG5vbi10YWcgb2JqZWN0LAorICogc3RvcmUgdGhlIFNIQTEgb2YgdGhlIHJlZmVycmVkLXRvIG9iamVjdCB0byBzaGExIGFuZCByZXR1cm4gMC4gIElmCisgKiBhbnkgb2YgdGhlc2UgY29uZGl0aW9ucyBhcmUgbm90IG1ldCwgcmV0dXJuIGEgbm9uLXplcm8gdmFsdWUuCisgKiBTeW1ib2xpYyByZWZlcmVuY2VzIGFyZSBjb25zaWRlcmVkIHVucGVlbGFibGUsIGV2ZW4gaWYgdGhleQorICogdWx0aW1hdGVseSByZXNvbHZlIHRvIGEgcGVlbGFibGUgdGFnLgorICovCitleHRlcm4gaW50IHBlZWxfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCisvKioKKyAqIFJlc29sdmUgcmVmbmFtZSBpbiB0aGUgbmVzdGVkICJnaXRsaW5rIiByZXBvc2l0b3J5IHRoYXQgaXMgbG9jYXRlZAorICogYXQgcGF0aC4gIElmIHRoZSByZXNvbHV0aW9uIGlzIHN1Y2Nlc3NmdWwsIHJldHVybiAwIGFuZCBzZXQgc2hhMSB0bworICogdGhlIG5hbWUgb2YgdGhlIG9iamVjdDsgb3RoZXJ3aXNlLCByZXR1cm4gYSBub24temVybyB2YWx1ZS4KKyAqLworZXh0ZXJuIGludCByZXNvbHZlX2dpdGxpbmtfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnJlZm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCisvKgorICogUmV0dXJuIHRydWUgaWZmIGFiYnJldl9uYW1lIGlzIGEgcG9zc2libGUgYWJicmV2aWF0aW9uIGZvcgorICogZnVsbF9uYW1lIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZGVmaW5lZCBieSByZWZfcmV2X3BhcnNlX3J1bGVzIGluCisgKiByZWZzLmMuCisgKi8KK2V4dGVybiBpbnQgcmVmbmFtZV9tYXRjaChjb25zdCBjaGFyICphYmJyZXZfbmFtZSwgY29uc3QgY2hhciAqZnVsbF9uYW1lKTsKKworZXh0ZXJuIGludCBkd2ltX3JlZihjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKipyZWYpOworZXh0ZXJuIGludCBkd2ltX2xvZyhjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNoYXIgKipyZWYpOworCisvKgorICogQSByZWZfdHJhbnNhY3Rpb24gcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgcmVmIHVwZGF0ZXMKKyAqIHRoYXQgc2hvdWxkIHN1Y2NlZWQgb3IgZmFpbCB0b2dldGhlci4KKyAqCisgKiBDYWxsaW5nIHNlcXVlbmNlCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKiAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgYHN0cnVjdCByZWZfdHJhbnNhY3Rpb25gIGJ5IGNhbGxpbmcKKyAqICAgYHJlZl90cmFuc2FjdGlvbl9iZWdpbigpYC4KKyAqCisgKiAtIExpc3QgaW50ZW5kZWQgcmVmIHVwZGF0ZXMgYnkgY2FsbGluZyBmdW5jdGlvbnMgbGlrZQorICogICBgcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSgpYCBhbmQgYHJlZl90cmFuc2FjdGlvbl9jcmVhdGUoKWAuCisgKgorICogLSBDYWxsIGByZWZfdHJhbnNhY3Rpb25fY29tbWl0KClgIHRvIGV4ZWN1dGUgdGhlIHRyYW5zYWN0aW9uLgorICogICBJZiB0aGlzIHN1Y2NlZWRzLCB0aGUgcmVmIHVwZGF0ZXMgd2lsbCBoYXZlIHRha2VuIHBsYWNlIGFuZAorICogICB0aGUgdHJhbnNhY3Rpb24gY2Fubm90IGJlIHJvbGxlZCBiYWNrLgorICoKKyAqIC0gQXQgYW55IHRpbWUgY2FsbCBgcmVmX3RyYW5zYWN0aW9uX2ZyZWUoKWAgdG8gZGlzY2FyZCB0aGUKKyAqICAgdHJhbnNhY3Rpb24gYW5kIGZyZWUgYXNzb2NpYXRlZCByZXNvdXJjZXMuICBJbiBwYXJ0aWN1bGFyLAorICogICB0aGlzIHJvbGxzIGJhY2sgdGhlIHRyYW5zYWN0aW9uIGlmIGl0IGhhcyBub3QgYmVlbgorICogICBzdWNjZXNzZnVsbHkgY29tbWl0dGVkLgorICoKKyAqIEVycm9yIGhhbmRsaW5nCisgKiAtLS0tLS0tLS0tLS0tLQorICoKKyAqIE9uIGVycm9yLCB0cmFuc2FjdGlvbiBmdW5jdGlvbnMgYXBwZW5kIGEgbWVzc2FnZSBhYm91dCB3aGF0CisgKiB3ZW50IHdyb25nIHRvIHRoZSAnZXJyJyBhcmd1bWVudC4gIFRoZSBtZXNzYWdlIG1lbnRpb25zIHdoYXQKKyAqIHJlZiB3YXMgYmVpbmcgdXBkYXRlZCAoaWYgYW55KSB3aGVuIHRoZSBlcnJvciBvY2N1cnJlZCBzbyBpdAorICogY2FuIGJlIHBhc3NlZCB0byAnZGllJyBvciAnZXJyb3InIGFzLWlzLgorICoKKyAqIFRoZSBtZXNzYWdlIGlzIGFwcGVuZGVkIHRvIGVyciB3aXRob3V0IGZpcnN0IGNsZWFyaW5nIGVyci4KKyAqIGVyciB3aWxsIG5vdCBiZSAnXG4nIHRlcm1pbmF0ZWQuCisgKi8KK3N0cnVjdCByZWZfdHJhbnNhY3Rpb247CisKKy8qCisgKiBCaXQgdmFsdWVzIHNldCBpbiB0aGUgZmxhZ3MgYXJndW1lbnQgcGFzc2VkIHRvIGVhY2hfcmVmX2ZuKCk6CisgKi8KKworLyogUmVmZXJlbmNlIGlzIGEgc3ltYm9saWMgcmVmZXJlbmNlLiAqLworI2RlZmluZSBSRUZfSVNTWU1SRUYgMHgwMQorCisvKiBSZWZlcmVuY2UgaXMgYSBwYWNrZWQgcmVmZXJlbmNlLiAqLworI2RlZmluZSBSRUZfSVNQQUNLRUQgMHgwMgorCisvKgorICogUmVmZXJlbmNlIGNhbm5vdCBiZSByZXNvbHZlZCB0byBhbiBvYmplY3QgbmFtZTogZGFuZ2xpbmcgc3ltYm9saWMKKyAqIHJlZmVyZW5jZSAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSksIGNvcnJ1cHQgcmVmZXJlbmNlIGZpbGUsCisgKiByZWZlcmVuY2UgZXhpc3RzIGJ1dCBuYW1lIGlzIGJhZCwgb3Igc3ltYm9saWMgcmVmZXJlbmNlIHJlZmVycyB0bworICogaWxsLWZvcm1hdHRlZCByZWZlcmVuY2UgbmFtZS4KKyAqLworI2RlZmluZSBSRUZfSVNCUk9LRU4gMHgwNAorCisvKgorICogUmVmZXJlbmNlIG5hbWUgaXMgbm90IHdlbGwgZm9ybWVkLgorICoKKyAqIFNlZSBnaXQtY2hlY2stcmVmLWZvcm1hdCgxKSBmb3IgdGhlIGRlZmluaXRpb24gb2Ygd2VsbCBmb3JtZWQgcmVmIG5hbWVzLgorICovCisjZGVmaW5lIFJFRl9CQURfTkFNRSAweDA4CisKKy8qCisgKiBUaGUgc2lnbmF0dXJlIGZvciB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBmb3JfZWFjaF8qKCkKKyAqIGZ1bmN0aW9ucyBiZWxvdy4gIFRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSB0aGUgcmVmbmFtZSBhbmQgc2hhMQorICogYXJndW1lbnRzIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGEKKyAqIHNpbmdsZSBjYWxsYmFjayBpbnZvY2F0aW9uLgorICovCit0eXBlZGVmIGludCBlYWNoX3JlZl9mbihjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLCBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpOworCisvKgorICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaW52b2tlIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yCisgKiBlYWNoIHJlZmVyZW5jZSBpbmRpY2F0ZWQuICBJZiB0aGUgZnVuY3Rpb24gZXZlciByZXR1cm5zIGEgbm9uemVybworICogdmFsdWUsIHN0b3AgdGhlIGl0ZXJhdGlvbiBhbmQgcmV0dXJuIHRoYXQgdmFsdWUuICBQbGVhc2Ugbm90ZSB0aGF0CisgKiBpdCBpcyBub3Qgc2FmZSB0byBtb2RpZnkgcmVmZXJlbmNlcyB3aGlsZSBhbiBpdGVyYXRpb24gaXMgaW4KKyAqIHByb2dyZXNzLCB1bmxlc3MgdGhlIHNhbWUgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2NhdGlvbiB0aGF0CisgKiBtb2RpZmllcyB0aGUgcmVmZXJlbmNlIGFsc28gcmV0dXJucyBhIG5vbnplcm8gdmFsdWUgdG8gaW1tZWRpYXRlbHkKKyAqIHN0b3AgdGhlIGl0ZXJhdGlvbi4KKyAqLworZXh0ZXJuIGludCBoZWFkX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitleHRlcm4gaW50IGZvcl9lYWNoX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitleHRlcm4gaW50IGZvcl9lYWNoX3JlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfZnVsbHJlZl9pbihjb25zdCBjaGFyICpwcmVmaXgsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhLCB1bnNpZ25lZCBpbnQgYnJva2VuKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfdGFnX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitleHRlcm4gaW50IGZvcl9lYWNoX2JyYW5jaF9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworZXh0ZXJuIGludCBmb3JfZWFjaF9yZW1vdGVfcmVmKGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfcmVwbGFjZV9yZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworZXh0ZXJuIGludCBmb3JfZWFjaF9nbG9iX3JlZihlYWNoX3JlZl9mbiBmbiwgY29uc3QgY2hhciAqcGF0dGVybiwgdm9pZCAqY2JfZGF0YSk7CitleHRlcm4gaW50IGZvcl9lYWNoX2dsb2JfcmVmX2luKGVhY2hfcmVmX2ZuIGZuLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpwcmVmaXgsIHZvaWQgKmNiX2RhdGEpOworCitleHRlcm4gaW50IGhlYWRfcmVmX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfcmVmX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfcmVmX2luX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworZXh0ZXJuIGludCBmb3JfZWFjaF90YWdfcmVmX3N1Ym1vZHVsZShjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2V4dGVybiBpbnQgZm9yX2VhY2hfYnJhbmNoX3JlZl9zdWJtb2R1bGUoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CitleHRlcm4gaW50IGZvcl9lYWNoX3JlbW90ZV9yZWZfc3VibW9kdWxlKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCitleHRlcm4gaW50IGhlYWRfcmVmX25hbWVzcGFjZWQoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworZXh0ZXJuIGludCBmb3JfZWFjaF9uYW1lc3BhY2VkX3JlZihlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSk7CisKKy8qIGNhbiBiZSB1c2VkIHRvIGxlYXJuIGFib3V0IGJyb2tlbiByZWYgYW5kIHN5bXJlZiAqLworZXh0ZXJuIGludCBmb3JfZWFjaF9yYXdyZWYoZWFjaF9yZWZfZm4gZm4sIHZvaWQgKmNiX2RhdGEpOworCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmhhc19nbG9iX3NwZWNpYWxzKGNvbnN0IGNoYXIgKnBhdHRlcm4pCit7CisJcmV0dXJuIHN0cnBicmsocGF0dGVybiwgIj8qWyIpOworfQorCitleHRlcm4gdm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZihGSUxFICpmcCwgY29uc3QgY2hhciAqbXNnX2ZtdCwgY29uc3QgY2hhciAqcmVmbmFtZSk7CitleHRlcm4gdm9pZCB3YXJuX2RhbmdsaW5nX3N5bXJlZnMoRklMRSAqZnAsIGNvbnN0IGNoYXIgKm1zZ19mbXQsIGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVmbmFtZXMpOworCisvKgorICogRmxhZ3MgZm9yIGNvbnRyb2xsaW5nIGJlaGF2aW91ciBvZiBwYWNrX3JlZnMoKQorICogUEFDS19SRUZTX1BSVU5FOiBQcnVuZSBsb29zZSByZWZzIGFmdGVyIHBhY2tpbmcKKyAqIFBBQ0tfUkVGU19BTEw6ICAgUGFjayBfYWxsXyByZWZzLCBub3QganVzdCB0YWdzIGFuZCBhbHJlYWR5IHBhY2tlZCByZWZzCisgKi8KKyNkZWZpbmUgUEFDS19SRUZTX1BSVU5FIDB4MDAwMQorI2RlZmluZSBQQUNLX1JFRlNfQUxMICAgMHgwMDAyCisKKy8qCisgKiBXcml0ZSBhIHBhY2tlZC1yZWZzIGZpbGUgZm9yIHRoZSBjdXJyZW50IHJlcG9zaXRvcnkuCisgKiBmbGFnczogQ29tYmluYXRpb24gb2YgdGhlIGFib3ZlIFBBQ0tfUkVGU18qIGZsYWdzLgorICovCitpbnQgcGFja19yZWZzKHVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qCisgKiBGbGFncyBjb250cm9sbGluZyByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKCksIHJlZl90cmFuc2FjdGlvbl9jcmVhdGUoKSwgZXRjLgorICogUkVGX05PREVSRUY6IGFjdCBvbiB0aGUgcmVmIGRpcmVjdGx5LCBpbnN0ZWFkIG9mIGRlcmVmZXJlbmNpbmcKKyAqICAgICAgICAgICAgICBzeW1ib2xpYyByZWZlcmVuY2VzLgorICoKKyAqIE90aGVyIGZsYWdzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlLgorICovCisjZGVmaW5lIFJFRl9OT0RFUkVGCTB4MDEKKyNkZWZpbmUgUkVGX0ZPUkNFX0NSRUFURV9SRUZMT0cgMHg0MAorCisvKgorICogU2V0dXAgcmVmbG9nIGJlZm9yZSB1c2luZy4gRmlsbCBpbiBlcnIgYW5kIHJldHVybiAtMSBvbiBmYWlsdXJlLgorICovCitpbnQgc2FmZV9jcmVhdGVfcmVmbG9nKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBmb3JjZV9jcmVhdGUsIHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qKiBSZWFkcyBsb2cgZm9yIHRoZSB2YWx1ZSBvZiByZWYgZHVyaW5nIGF0X3RpbWUuICoqLworZXh0ZXJuIGludCByZWFkX3JlZl9hdChjb25zdCBjaGFyICpyZWZuYW1lLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGF0X3RpbWUsIGludCBjbnQsCisJCSAgICAgICB1bnNpZ25lZCBjaGFyICpzaGExLCBjaGFyICoqbXNnLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqY3V0b2ZmX3RpbWUsIGludCAqY3V0b2ZmX3R6LCBpbnQgKmN1dG9mZl9jbnQpOworCisvKiogQ2hlY2sgaWYgYSBwYXJ0aWN1bGFyIHJlZmxvZyBleGlzdHMgKi8KK2V4dGVybiBpbnQgcmVmbG9nX2V4aXN0cyhjb25zdCBjaGFyICpyZWZuYW1lKTsKKworLyoKKyAqIERlbGV0ZSB0aGUgc3BlY2lmaWVkIHJlZmVyZW5jZS4gSWYgb2xkX3NoYTEgaXMgbm9uLU5VTEwsIHRoZW4KKyAqIHZlcmlmeSB0aGF0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSByZWZlcmVuY2UgaXMgb2xkX3NoYTEgYmVmb3JlCisgKiBkZWxldGluZyBpdC4gSWYgb2xkX3NoYTEgaXMgTlVMTCwgZGVsZXRlIHRoZSByZWZlcmVuY2UgaWYgaXQKKyAqIGV4aXN0cywgcmVnYXJkbGVzcyBvZiBpdHMgb2xkIHZhbHVlLiBJdCBpcyBhbiBlcnJvciBmb3Igb2xkX3NoYTEgdG8KKyAqIGJlIE5VTExfU0hBMS4gZmxhZ3MgaXMgcGFzc2VkIHRocm91Z2ggdG8gcmVmX3RyYW5zYWN0aW9uX2RlbGV0ZSgpLgorICovCitleHRlcm4gaW50IGRlbGV0ZV9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCisJCSAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CisKKy8qCisgKiBEZWxldGUgdGhlIHNwZWNpZmllZCByZWZlcmVuY2VzLiBJZiB0aGVyZSBhcmUgYW55IHByb2JsZW1zLCBlbWl0CisgKiBlcnJvcnMgYnV0IGF0dGVtcHQgdG8ga2VlcCBnb2luZyAoaS5lLiwgdGhlIGRlbGV0ZXMgYXJlIG5vdCBkb25lIGluCisgKiBhbiBhbGwtb3Itbm90aGluZyB0cmFuc2FjdGlvbikuCisgKi8KK2V4dGVybiBpbnQgZGVsZXRlX3JlZnMoc3RydWN0IHN0cmluZ19saXN0ICpyZWZuYW1lcyk7CisKKy8qKiBEZWxldGUgYSByZWZsb2cgKi8KK2V4dGVybiBpbnQgZGVsZXRlX3JlZmxvZyhjb25zdCBjaGFyICpyZWZuYW1lKTsKKworLyogaXRlcmF0ZSBvdmVyIHJlZmxvZyBlbnRyaWVzICovCit0eXBlZGVmIGludCBlYWNoX3JlZmxvZ19lbnRfZm4odW5zaWduZWQgY2hhciAqb3NoYTEsIHVuc2lnbmVkIGNoYXIgKm5zaGExLCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcsIGludCwgY29uc3QgY2hhciAqLCB2b2lkICopOworaW50IGZvcl9lYWNoX3JlZmxvZ19lbnQoY29uc3QgY2hhciAqcmVmbmFtZSwgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKK2ludCBmb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2UoY29uc3QgY2hhciAqcmVmbmFtZSwgZWFjaF9yZWZsb2dfZW50X2ZuIGZuLCB2b2lkICpjYl9kYXRhKTsKKworLyoKKyAqIENhbGxzIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gZm9yIGVhY2ggcmVmbG9nIGZpbGUgdW50aWwgaXQgcmV0dXJucyBub256ZXJvLAorICogYW5kIHJldHVybnMgdGhlIHZhbHVlCisgKi8KK2V4dGVybiBpbnQgZm9yX2VhY2hfcmVmbG9nKGVhY2hfcmVmX2ZuLCB2b2lkICopOworCisjZGVmaW5lIFJFRk5BTUVfQUxMT1dfT05FTEVWRUwgMQorI2RlZmluZSBSRUZOQU1FX1JFRlNQRUNfUEFUVEVSTiAyCisKKy8qCisgKiBSZXR1cm4gMCBpZmYgcmVmbmFtZSBoYXMgdGhlIGNvcnJlY3QgZm9ybWF0IGZvciBhIHJlZm5hbWUgYWNjb3JkaW5nCisgKiB0byB0aGUgcnVsZXMgZGVzY3JpYmVkIGluIERvY3VtZW50YXRpb24vZ2l0LWNoZWNrLXJlZi1mb3JtYXQudHh0LgorICogSWYgUkVGTkFNRV9BTExPV19PTkVMRVZFTCBpcyBzZXQgaW4gZmxhZ3MsIHRoZW4gYWNjZXB0IG9uZS1sZXZlbAorICogcmVmZXJlbmNlIG5hbWVzLiAgSWYgUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gaXMgc2V0IGluIGZsYWdzLCB0aGVuCisgKiBhbGxvdyBhIHNpbmdsZSAiKiIgd2lsZGNhcmQgY2hhcmFjdGVyIGluIHRoZSByZWZzcGVjLiBObyBsZWFkaW5nIG9yCisgKiByZXBlYXRlZCBzbGFzaGVzIGFyZSBhY2NlcHRlZC4KKyAqLworZXh0ZXJuIGludCBjaGVja19yZWZuYW1lX2Zvcm1hdChjb25zdCBjaGFyICpyZWZuYW1lLCBpbnQgZmxhZ3MpOworCitleHRlcm4gY29uc3QgY2hhciAqcHJldHRpZnlfcmVmbmFtZShjb25zdCBjaGFyICpyZWZuYW1lKTsKKworZXh0ZXJuIGNoYXIgKnNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGludCBzdHJpY3QpOworCisvKiogcmVuYW1lIHJlZiwgcmV0dXJuIDAgb24gc3VjY2VzcyAqKi8KK2V4dGVybiBpbnQgcmVuYW1lX3JlZihjb25zdCBjaGFyICpvbGRyZWYsIGNvbnN0IGNoYXIgKm5ld3JlZiwgY29uc3QgY2hhciAqbG9nbXNnKTsKKworZXh0ZXJuIGludCBjcmVhdGVfc3ltcmVmKGNvbnN0IGNoYXIgKnJlZiwgY29uc3QgY2hhciAqcmVmc19oZWFkc19tYXN0ZXIsIGNvbnN0IGNoYXIgKmxvZ21zZyk7CisKK2VudW0gYWN0aW9uX29uX2VyciB7CisJVVBEQVRFX1JFRlNfTVNHX09OX0VSUiwKKwlVUERBVEVfUkVGU19ESUVfT05fRVJSLAorCVVQREFURV9SRUZTX1FVSUVUX09OX0VSUgorfTsKKworLyoKKyAqIEJlZ2luIGEgcmVmZXJlbmNlIHRyYW5zYWN0aW9uLiAgVGhlIHJlZmVyZW5jZSB0cmFuc2FjdGlvbiBtdXN0CisgKiBiZSBmcmVlZCBieSBjYWxsaW5nIHJlZl90cmFuc2FjdGlvbl9mcmVlKCkuCisgKi8KK3N0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnJlZl90cmFuc2FjdGlvbl9iZWdpbihzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKgorICogUmVmZXJlbmNlIHRyYW5zYWN0aW9uIHVwZGF0ZXMKKyAqCisgKiBUaGUgZm9sbG93aW5nIGZvdXIgZnVuY3Rpb25zIGFkZCBhIHJlZmVyZW5jZSBjaGVjayBvciB1cGRhdGUgdG8gYQorICogcmVmX3RyYW5zYWN0aW9uLiAgVGhleSBoYXZlIHNvbWUgY29tbW9uIHNpbWlsYXIgcGFyYW1ldGVyczoKKyAqCisgKiAgICAgdHJhbnNhY3Rpb24gLS0gYSBwb2ludGVyIHRvIGFuIG9wZW4gcmVmX3RyYW5zYWN0aW9uLCBvYnRhaW5lZAorICogICAgICAgICBmcm9tIHJlZl90cmFuc2FjdGlvbl9iZWdpbigpLgorICoKKyAqICAgICByZWZuYW1lIC0tIHRoZSBuYW1lIG9mIHRoZSByZWZlcmVuY2UgdG8gYmUgYWZmZWN0ZWQuCisgKgorICogICAgIGZsYWdzIC0tIGZsYWdzIGFmZmVjdGluZyB0aGUgdXBkYXRlLCBwYXNzZWQgdG8KKyAqICAgICAgICAgdXBkYXRlX3JlZl9sb2NrKCkuIENhbiBiZSBSRUZfTk9ERVJFRiwgd2hpY2ggbWVhbnMgdGhhdAorICogICAgICAgICBzeW1ib2xpYyByZWZlcmVuY2VzIHNob3VsZCBub3QgYmUgZm9sbG93ZWQuCisgKgorICogICAgIG1zZyAtLSBhIG1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgY2hhbmdlIChmb3IgdGhlIHJlZmxvZykuCisgKgorICogICAgIGVyciAtLSBhIHN0cmJ1ZiBmb3IgcmVjZWl2aW5nIGEgZGVzY3JpcHRpb24gb2YgYW55IGVycm9yIHRoYXQKKyAqICAgICAgICAgbWlnaHQgaGF2ZSBvY2N1cmVkLgorICoKKyAqIFRoZSBmdW5jdGlvbnMgbWFrZSBpbnRlcm5hbCBjb3BpZXMgb2YgcmVmbmFtZSBhbmQgbXNnLCBzbyB0aGUKKyAqIGNhbGxlciByZXRhaW5zIG93bmVyc2hpcCBvZiB0aGVzZSBwYXJhbWV0ZXJzLgorICoKKyAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgbm9uLXplcm8gb24gZmFpbHVyZS4gQQorICogZmFpbHVyZSBtZWFucyB0aGF0IHRoZSB0cmFuc2FjdGlvbiBhcyBhIHdob2xlIGhhcyBmYWlsZWQgYW5kIG5lZWRzCisgKiB0byBiZSByb2xsZWQgYmFjay4KKyAqLworCisvKgorICogQWRkIGEgcmVmZXJlbmNlIHVwZGF0ZSB0byB0cmFuc2FjdGlvbi4gbmV3X3NoYTEgaXMgdGhlIHZhbHVlIHRoYXQKKyAqIHRoZSByZWZlcmVuY2Ugc2hvdWxkIGhhdmUgYWZ0ZXIgdGhlIHVwZGF0ZSwgb3IgbnVsbF9zaGExIGlmIGl0CisgKiBzaG91bGQgYmUgZGVsZXRlZC4gSWYgbmV3X3NoYTEgaXMgTlVMTCwgdGhlbiB0aGUgcmVmZXJlbmNlIGlzIG5vdAorICogY2hhbmdlZCBhdCBhbGwuIG9sZF9zaGExIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSByZWZlcmVuY2UgbXVzdCBoYXZlCisgKiBiZWZvcmUgdGhlIHVwZGF0ZSwgb3IgbnVsbF9zaGExIGlmIGl0IG11c3Qgbm90IGhhdmUgZXhpc3RlZAorICogYmVmb3JlaGFuZC4gVGhlIG9sZCB2YWx1ZSBpcyBjaGVja2VkIGFmdGVyIHRoZSBsb2NrIGlzIHRha2VuIHRvCisgKiBwcmV2ZW50IHJhY2VzLiBJZiB0aGUgb2xkIHZhbHVlIGRvZXNuJ3QgYWdyZWUgd2l0aCBvbGRfc2hhMSwgdGhlCisgKiB3aG9sZSB0cmFuc2FjdGlvbiBmYWlscy4gSWYgb2xkX3NoYTEgaXMgTlVMTCwgdGhlbiB0aGUgcHJldmlvdXMKKyAqIHZhbHVlIGlzIG5vdCBjaGVja2VkLgorICoKKyAqIFNlZSB0aGUgYWJvdmUgY29tbWVudCAiUmVmZXJlbmNlIHRyYW5zYWN0aW9uIHVwZGF0ZXMiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbi4KKyAqLworaW50IHJlZl90cmFuc2FjdGlvbl91cGRhdGUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgY29uc3QgY2hhciAqbXNnLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoKKyAqIEFkZCBhIHJlZmVyZW5jZSBjcmVhdGlvbiB0byB0cmFuc2FjdGlvbi4gbmV3X3NoYTEgaXMgdGhlIHZhbHVlIHRoYXQKKyAqIHRoZSByZWZlcmVuY2Ugc2hvdWxkIGhhdmUgYWZ0ZXIgdGhlIHVwZGF0ZTsgaXQgbXVzdCBub3QgYmUKKyAqIG51bGxfc2hhMS4gSXQgaXMgdmVyaWZpZWQgdGhhdCB0aGUgcmVmZXJlbmNlIGRvZXMgbm90IGV4aXN0CisgKiBhbHJlYWR5LgorICoKKyAqIFNlZSB0aGUgYWJvdmUgY29tbWVudCAiUmVmZXJlbmNlIHRyYW5zYWN0aW9uIHVwZGF0ZXMiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbi4KKyAqLworaW50IHJlZl90cmFuc2FjdGlvbl9jcmVhdGUoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKm1zZywKKwkJCSAgIHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qCisgKiBBZGQgYSByZWZlcmVuY2UgZGVsZXRpb24gdG8gdHJhbnNhY3Rpb24uIElmIG9sZF9zaGExIGlzIG5vbi1OVUxMLAorICogdGhlbiBpdCBob2xkcyB0aGUgdmFsdWUgdGhhdCB0aGUgcmVmZXJlbmNlIHNob3VsZCBoYXZlIGhhZCBiZWZvcmUKKyAqIHRoZSB1cGRhdGUgKHdoaWNoIG11c3Qgbm90IGJlIG51bGxfc2hhMSkuCisgKgorICogU2VlIHRoZSBhYm92ZSBjb21tZW50ICJSZWZlcmVuY2UgdHJhbnNhY3Rpb24gdXBkYXRlcyIgZm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uLgorICovCitpbnQgcmVmX3RyYW5zYWN0aW9uX2RlbGV0ZShzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgIGNvbnN0IGNoYXIgKnJlZm5hbWUsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgY29uc3QgY2hhciAqbXNnLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoKKyAqIFZlcmlmeSwgd2l0aGluIGEgdHJhbnNhY3Rpb24sIHRoYXQgcmVmbmFtZSBoYXMgdGhlIHZhbHVlIG9sZF9zaGExLAorICogb3IsIGlmIG9sZF9zaGExIGlzIG51bGxfc2hhMSwgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgcmVmZXJlbmNlCisgKiBkb2Vzbid0IGV4aXN0LiBvbGRfc2hhMSBtdXN0IGJlIG5vbi1OVUxMLgorICoKKyAqIFNlZSB0aGUgYWJvdmUgY29tbWVudCAiUmVmZXJlbmNlIHRyYW5zYWN0aW9uIHVwZGF0ZXMiIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbi4KKyAqLworaW50IHJlZl90cmFuc2FjdGlvbl92ZXJpZnkoc3RydWN0IHJlZl90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24sCisJCQkgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCisJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgICBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKgorICogQ29tbWl0IGFsbCBvZiB0aGUgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBxdWV1ZWQgaW4gdHJhbnNhY3Rpb24sIGFzCisgKiBhdG9taWNhbGx5IGFzIHBvc3NpYmxlLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgb3Igb25lIG9mIHRoZSBiZWxvdyBlcnJvciBjb2RlcyBmb3IgZXJyb3JzLgorICovCisvKiBOYW1pbmcgY29uZmxpY3QgKGZvciBleGFtcGxlLCB0aGUgcmVmIG5hbWVzIEEgYW5kIEEvQiBjb25mbGljdCkuICovCisjZGVmaW5lIFRSQU5TQUNUSU9OX05BTUVfQ09ORkxJQ1QgLTEKKy8qIEFsbCBvdGhlciBlcnJvcnMuICovCisjZGVmaW5lIFRSQU5TQUNUSU9OX0dFTkVSSUNfRVJST1IgLTIKK2ludCByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqZXJyKTsKKworLyoKKyAqIExpa2UgcmVmX3RyYW5zYWN0aW9uX2NvbW1pdCgpLCBidXQgb3B0aW1pemVkIGZvciBjcmVhdGluZworICogcmVmZXJlbmNlcyB3aGVuIG9yaWdpbmFsbHkgaW5pdGlhbGl6aW5nIGEgcmVwb3NpdG9yeSAoZS5nLiwgYnkgImdpdAorICogY2xvbmUiKS4gSXQgd3JpdGVzIHRoZSBuZXcgcmVmZXJlbmNlcyBkaXJlY3RseSB0byBwYWNrZWQtcmVmcworICogd2l0aG91dCBsb2NraW5nIHRoZSBpbmRpdmlkdWFsIHJlZmVyZW5jZXMuCisgKgorICogSXQgaXMgYSBidWcgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhlcmUgbWlnaHQgYmUgb3RoZXIKKyAqIHByb2Nlc3NlcyBhY2Nlc3NpbmcgdGhlIHJlcG9zaXRvcnkgb3IgaWYgdGhlcmUgYXJlIGV4aXN0aW5nCisgKiByZWZlcmVuY2VzIHRoYXQgbWlnaHQgY29uZmxpY3Qgd2l0aCB0aGUgb25lcyBiZWluZyBjcmVhdGVkLiBBbGwKKyAqIG9sZF9zaGExIHZhbHVlcyBtdXN0IGVpdGhlciBiZSBhYnNlbnQgb3IgTlVMTF9TSEExLgorICovCitpbnQgaW5pdGlhbF9yZWZfdHJhbnNhY3Rpb25fY29tbWl0KHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uLAorCQkJCSAgIHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qCisgKiBGcmVlIGFuIGV4aXN0aW5nIHRyYW5zYWN0aW9uIGFuZCBhbGwgYXNzb2NpYXRlZCBkYXRhLgorICovCit2b2lkIHJlZl90cmFuc2FjdGlvbl9mcmVlKHN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uKTsKKworLyoqCisgKiBMb2NrLCB1cGRhdGUsIGFuZCB1bmxvY2sgYSBzaW5nbGUgcmVmZXJlbmNlLiBUaGlzIGZ1bmN0aW9uCisgKiBiYXNpY2FsbHkgZG9lcyBhIHRyYW5zYWN0aW9uIGNvbnRhaW5pbmcgYSBzaW5nbGUgY2FsbCB0bworICogcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSgpLiBUaGUgcGFyYW1ldGVycyB0byB0aGlzIGZ1bmN0aW9uIGhhdmUgdGhlCisgKiBzYW1lIG1lYW5pbmcgYXMgdGhlIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVycyB0bworICogcmVmX3RyYW5zYWN0aW9uX3VwZGF0ZSgpLiBIYW5kbGUgZXJyb3JzIGFzIHJlcXVlc3RlZCBieSB0aGUgYG9uZXJyYAorICogYXJndW1lbnQuCisgKi8KK2ludCB1cGRhdGVfcmVmKGNvbnN0IGNoYXIgKm1zZywgY29uc3QgY2hhciAqcmVmbmFtZSwKKwkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3X3NoYTEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9zaGExLAorCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIGVudW0gYWN0aW9uX29uX2VyciBvbmVycik7CisKK2V4dGVybiBpbnQgcGFyc2VfaGlkZV9yZWZzX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCBjb25zdCBjaGFyICopOworCitleHRlcm4gaW50IHJlZl9pc19oaWRkZW4oY29uc3QgY2hhciAqKTsKKworZW51bSByZWZfdHlwZSB7CisJUkVGX1RZUEVfUEVSX1dPUktUUkVFLAorCVJFRl9UWVBFX1BTRVVET1JFRiwKKwlSRUZfVFlQRV9OT1JNQUwsCit9OworCitlbnVtIHJlZl90eXBlIHJlZl90eXBlKGNvbnN0IGNoYXIgKnJlZm5hbWUpOworCitlbnVtIGV4cGlyZV9yZWZsb2dfZmxhZ3MgeworCUVYUElSRV9SRUZMT0dTX0RSWV9SVU4gPSAxIDw8IDAsCisJRVhQSVJFX1JFRkxPR1NfVVBEQVRFX1JFRiA9IDEgPDwgMSwKKwlFWFBJUkVfUkVGTE9HU19WRVJCT1NFID0gMSA8PCAyLAorCUVYUElSRV9SRUZMT0dTX1JFV1JJVEUgPSAxIDw8IDMKK307CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGludGVyZmFjZSBpcyB1c2VkIGZvciByZWZsb2cgZXhwaXJhdGlvbi4gVGhlIGNhbGxlcgorICogY2FsbHMgcmVmbG9nX2V4cGlyZSgpLCBzdXBwbHlpbmcgaXQgd2l0aCB0aHJlZSBjYWxsYmFjayBmdW5jdGlvbnMsCisgKiBvZiB0aGUgZm9sbG93aW5nIHR5cGVzLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb25zIGRlZmluZSB0aGUKKyAqIGV4cGlyYXRpb24gcG9saWN5IHRoYXQgaXMgZGVzaXJlZC4KKyAqCisgKiByZWZsb2dfZXhwaXJ5X3ByZXBhcmVfZm4gLS0gQ2FsbGVkIG9uY2UgYWZ0ZXIgdGhlIHJlZmVyZW5jZSBpcworICogICAgIGxvY2tlZC4KKyAqCisgKiByZWZsb2dfZXhwaXJ5X3Nob3VsZF9wcnVuZV9mbiAtLSBDYWxsZWQgb25jZSBmb3IgZWFjaCBlbnRyeSBpbiB0aGUKKyAqICAgICBleGlzdGluZyByZWZsb2cuIEl0IHNob3VsZCByZXR1cm4gdHJ1ZSBpZmYgdGhhdCBlbnRyeSBzaG91bGQgYmUKKyAqICAgICBwcnVuZWQuCisgKgorICogcmVmbG9nX2V4cGlyeV9jbGVhbnVwX2ZuIC0tIENhbGxlZCBvbmNlIGJlZm9yZSB0aGUgcmVmZXJlbmNlIGlzCisgKiAgICAgdW5sb2NrZWQgYWdhaW4uCisgKi8KK3R5cGVkZWYgdm9pZCByZWZsb2dfZXhwaXJ5X3ByZXBhcmVfZm4oY29uc3QgY2hhciAqcmVmbmFtZSwKKwkJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgICAgIHZvaWQgKmNiX2RhdGEpOwordHlwZWRlZiBpbnQgcmVmbG9nX2V4cGlyeV9zaG91bGRfcHJ1bmVfZm4odW5zaWduZWQgY2hhciAqb3NoYTEsCisJCQkJCSAgdW5zaWduZWQgY2hhciAqbnNoYTEsCisJCQkJCSAgY29uc3QgY2hhciAqZW1haWwsCisJCQkJCSAgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAsIGludCB0eiwKKwkJCQkJICBjb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKTsKK3R5cGVkZWYgdm9pZCByZWZsb2dfZXhwaXJ5X2NsZWFudXBfZm4odm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBFeHBpcmUgcmVmbG9nIGVudHJpZXMgZm9yIHRoZSBzcGVjaWZpZWQgcmVmZXJlbmNlLiBzaGExIGlzIHRoZSBvbGQKKyAqIHZhbHVlIG9mIHRoZSByZWZlcmVuY2UuIGZsYWdzIGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGNvbnN0YW50cyBpbgorICogZW51bSBleHBpcmVfcmVmbG9nX2ZsYWdzLiBUaGUgdGhyZWUgZnVuY3Rpb24gcG9pbnRlcnMgYXJlIGRlc2NyaWJlZAorICogYWJvdmUuIE9uIHN1Y2Nlc3MsIHJldHVybiB6ZXJvLgorICovCitleHRlcm4gaW50IHJlZmxvZ19leHBpcmUoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgcmVmbG9nX2V4cGlyeV9wcmVwYXJlX2ZuIHByZXBhcmVfZm4sCisJCQkgcmVmbG9nX2V4cGlyeV9zaG91bGRfcHJ1bmVfZm4gc2hvdWxkX3BydW5lX2ZuLAorCQkJIHJlZmxvZ19leHBpcnlfY2xlYW51cF9mbiBjbGVhbnVwX2ZuLAorCQkJIHZvaWQgKnBvbGljeV9jYl9kYXRhKTsKKworI2VuZGlmIC8qIFJFRlNfSCAqLwpkaWZmIC0tZ2l0IGEvcmVtb3RlLWN1cmwuYyBiL3JlbW90ZS1jdXJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M3YThhNgotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZS1jdXJsLmMKQEAgLTAsMCArMSwxMDQ3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ3YWxrZXIuaCIKKyNpbmNsdWRlICJodHRwLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJjcmVkZW50aWFsLmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgInNlbmQtcGFjay5oIgorCitzdGF0aWMgc3RydWN0IHJlbW90ZSAqcmVtb3RlOworLyogYWx3YXlzIGVuZHMgd2l0aCBhIHRyYWlsaW5nIHNsYXNoICovCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiB1cmwgPSBTVFJCVUZfSU5JVDsKKworc3RydWN0IG9wdGlvbnMgeworCWludCB2ZXJib3NpdHk7CisJdW5zaWduZWQgbG9uZyBkZXB0aDsKKwl1bnNpZ25lZCBwcm9ncmVzcyA6IDEsCisJCWNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgOiAxLAorCQljbG9uaW5nIDogMSwKKwkJdXBkYXRlX3NoYWxsb3cgOiAxLAorCQlmb2xsb3d0YWdzIDogMSwKKwkJZHJ5X3J1biA6IDEsCisJCXRoaW4gOiAxLAorCQkvKiBPbmUgb2YgdGhlIFNFTkRfUEFDS19QVVNIX0NFUlRfKiBjb25zdGFudHMuICovCisJCXB1c2hfY2VydCA6IDI7Cit9Oworc3RhdGljIHN0cnVjdCBvcHRpb25zIG9wdGlvbnM7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGNhc19vcHRpb25zID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKK3N0YXRpYyBpbnQgc2V0X29wdGlvbihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcChuYW1lLCAidmVyYm9zaXR5IikpIHsKKwkJY2hhciAqZW5kOworCQlpbnQgdiA9IHN0cnRvbCh2YWx1ZSwgJmVuZCwgMTApOworCQlpZiAodmFsdWUgPT0gZW5kIHx8ICplbmQpCisJCQlyZXR1cm4gLTE7CisJCW9wdGlvbnMudmVyYm9zaXR5ID0gdjsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgInByb2dyZXNzIikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLnByb2dyZXNzID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImZhbHNlIikpCisJCQlvcHRpb25zLnByb2dyZXNzID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZGVwdGgiKSkgeworCQljaGFyICplbmQ7CisJCXVuc2lnbmVkIGxvbmcgdiA9IHN0cnRvdWwodmFsdWUsICZlbmQsIDEwKTsKKwkJaWYgKHZhbHVlID09IGVuZCB8fCAqZW5kKQorCQkJcmV0dXJuIC0xOworCQlvcHRpb25zLmRlcHRoID0gdjsKKwkJcmV0dXJuIDA7CisJfQorCWVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImZvbGxvd3RhZ3MiKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInRydWUiKSkKKwkJCW9wdGlvbnMuZm9sbG93dGFncyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy5mb2xsb3d0YWdzID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiZHJ5LXJ1biIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAidHJ1ZSIpKQorCQkJb3B0aW9ucy5kcnlfcnVuID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImZhbHNlIikpCisJCQlvcHRpb25zLmRyeV9ydW4gPSAwOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwllbHNlIGlmICghc3RyY21wKG5hbWUsICJjaGVjay1jb25uZWN0aXZpdHkiKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInRydWUiKSkKKwkJCW9wdGlvbnMuY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY2FzIikpIHsKKwkJc3RydWN0IHN0cmJ1ZiB2YWwgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGYoJnZhbCwgIi0tIiBDQVNfT1BUX05BTUUgIj0lcyIsIHZhbHVlKTsKKwkJc3RyaW5nX2xpc3RfYXBwZW5kKCZjYXNfb3B0aW9ucywgdmFsLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZ2YWwpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgImNsb25pbmciKSkgeworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgInRydWUiKSkKKwkJCW9wdGlvbnMuY2xvbmluZyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAodmFsdWUsICJmYWxzZSIpKQorCQkJb3B0aW9ucy5jbG9uaW5nID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgInVwZGF0ZS1zaGFsbG93IikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLnVwZGF0ZV9zaGFsbG93ID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImZhbHNlIikpCisJCQlvcHRpb25zLnVwZGF0ZV9zaGFsbG93ID0gMDsKKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAobmFtZSwgInB1c2hjZXJ0IikpIHsKKwkJaWYgKCFzdHJjbXAodmFsdWUsICJ0cnVlIikpCisJCQlvcHRpb25zLnB1c2hfY2VydCA9IFNFTkRfUEFDS19QVVNIX0NFUlRfQUxXQVlTOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAiZmFsc2UiKSkKKwkJCW9wdGlvbnMucHVzaF9jZXJ0ID0gU0VORF9QQUNLX1BVU0hfQ0VSVF9ORVZFUjsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgImlmLWFza2VkIikpCisJCQlvcHRpb25zLnB1c2hfY2VydCA9IFNFTkRfUEFDS19QVVNIX0NFUlRfSUZfQVNLRUQ7CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcmV0dXJuIDEgLyogdW5zdXBwb3J0ZWQgKi87CisJfQorfQorCitzdHJ1Y3QgZGlzY292ZXJ5IHsKKwljb25zdCBjaGFyICpzZXJ2aWNlOworCWNoYXIgKmJ1Zl9hbGxvYzsKKwljaGFyICpidWY7CisJc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgcmVmICpyZWZzOworCXN0cnVjdCBzaGExX2FycmF5IHNoYWxsb3c7CisJdW5zaWduZWQgcHJvdG9fZ2l0IDogMTsKK307CitzdGF0aWMgc3RydWN0IGRpc2NvdmVyeSAqbGFzdF9kaXNjb3Zlcnk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpwYXJzZV9naXRfcmVmcyhzdHJ1Y3QgZGlzY292ZXJ5ICpoZWFkcywgaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCByZWYgKmxpc3QgPSBOVUxMOworCWdldF9yZW1vdGVfaGVhZHMoLTEsIGhlYWRzLT5idWYsIGhlYWRzLT5sZW4sICZsaXN0LAorCQkJIGZvcl9wdXNoID8gUkVGX05PUk1BTCA6IDAsIE5VTEwsICZoZWFkcy0+c2hhbGxvdyk7CisJcmV0dXJuIGxpc3Q7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpwYXJzZV9pbmZvX3JlZnMoc3RydWN0IGRpc2NvdmVyeSAqaGVhZHMpCit7CisJY2hhciAqZGF0YSwgKnN0YXJ0LCAqbWlkOworCWNoYXIgKnJlZl9uYW1lOworCWludCBpID0gMDsKKworCXN0cnVjdCByZWYgKnJlZnMgPSBOVUxMOworCXN0cnVjdCByZWYgKnJlZiA9IE5VTEw7CisJc3RydWN0IHJlZiAqbGFzdF9yZWYgPSBOVUxMOworCisJZGF0YSA9IGhlYWRzLT5idWY7CisJc3RhcnQgPSBOVUxMOworCW1pZCA9IGRhdGE7CisJd2hpbGUgKGkgPCBoZWFkcy0+bGVuKSB7CisJCWlmICghc3RhcnQpIHsKKwkJCXN0YXJ0ID0gJmRhdGFbaV07CisJCX0KKwkJaWYgKGRhdGFbaV0gPT0gJ1x0JykKKwkJCW1pZCA9ICZkYXRhW2ldOworCQlpZiAoZGF0YVtpXSA9PSAnXG4nKSB7CisJCQlpZiAobWlkIC0gc3RhcnQgIT0gNDApCisJCQkJZGllKCIlc2luZm8vcmVmcyBub3QgdmFsaWQ6IGlzIHRoaXMgYSBnaXQgcmVwb3NpdG9yeT8iLAorCQkJCSAgICB1cmwuYnVmKTsKKwkJCWRhdGFbaV0gPSAwOworCQkJcmVmX25hbWUgPSBtaWQgKyAxOworCQkJcmVmID0gYWxsb2NfcmVmKHJlZl9uYW1lKTsKKwkJCWdldF9zaGExX2hleChzdGFydCwgcmVmLT5vbGRfc2hhMSk7CisJCQlpZiAoIXJlZnMpCisJCQkJcmVmcyA9IHJlZjsKKwkJCWlmIChsYXN0X3JlZikKKwkJCQlsYXN0X3JlZi0+bmV4dCA9IHJlZjsKKwkJCWxhc3RfcmVmID0gcmVmOworCQkJc3RhcnQgPSBOVUxMOworCQl9CisJCWkrKzsKKwl9CisKKwlyZWYgPSBhbGxvY19yZWYoIkhFQUQiKTsKKwlpZiAoIWh0dHBfZmV0Y2hfcmVmKHVybC5idWYsIHJlZikgJiYKKwkgICAgIXJlc29sdmVfcmVtb3RlX3N5bXJlZihyZWYsIHJlZnMpKSB7CisJCXJlZi0+bmV4dCA9IHJlZnM7CisJCXJlZnMgPSByZWY7CisJfSBlbHNlIHsKKwkJZnJlZShyZWYpOworCX0KKworCXJldHVybiByZWZzOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2Rpc2NvdmVyeShzdHJ1Y3QgZGlzY292ZXJ5ICpkKQoreworCWlmIChkKSB7CisJCWlmIChkID09IGxhc3RfZGlzY292ZXJ5KQorCQkJbGFzdF9kaXNjb3ZlcnkgPSBOVUxMOworCQlmcmVlKGQtPnNoYWxsb3cuc2hhMSk7CisJCWZyZWUoZC0+YnVmX2FsbG9jKTsKKwkJZnJlZV9yZWZzKGQtPnJlZnMpOworCQlmcmVlKGQpOworCX0KK30KKworc3RhdGljIGludCBzaG93X2h0dHBfbWVzc2FnZShzdHJ1Y3Qgc3RyYnVmICp0eXBlLCBzdHJ1Y3Qgc3RyYnVmICpjaGFyc2V0LAorCQkJICAgICBzdHJ1Y3Qgc3RyYnVmICptc2cpCit7CisJY29uc3QgY2hhciAqcCwgKmVvbDsKKworCS8qCisJICogV2Ugb25seSBzaG93IHRleHQvcGxhaW4gcGFydHMsIGFzIG90aGVyIHR5cGVzIGFyZSBsaWtlbHkKKwkgKiB0byBiZSB1Z2x5IHRvIGxvb2sgYXQgb24gdGhlIHVzZXIncyB0ZXJtaW5hbC4KKwkgKi8KKwlpZiAoc3RyY21wKHR5cGUtPmJ1ZiwgInRleHQvcGxhaW4iKSkKKwkJcmV0dXJuIC0xOworCWlmIChjaGFyc2V0LT5sZW4pCisJCXN0cmJ1Zl9yZWVuY29kZShtc2csIGNoYXJzZXQtPmJ1ZiwgZ2V0X2xvZ19vdXRwdXRfZW5jb2RpbmcoKSk7CisKKwlzdHJidWZfdHJpbShtc2cpOworCWlmICghbXNnLT5sZW4pCisJCXJldHVybiAtMTsKKworCXAgPSBtc2ctPmJ1ZjsKKwlkbyB7CisJCWVvbCA9IHN0cmNocm51bChwLCAnXG4nKTsKKwkJZnByaW50ZihzdGRlcnIsICJyZW1vdGU6ICUuKnNcbiIsIChpbnQpKGVvbCAtIHApLCBwKTsKKwkJcCA9IGVvbCArIDE7CisJfSB3aGlsZSgqZW9sKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkaXNjb3ZlcnkgKmRpc2NvdmVyX3JlZnMoY29uc3QgY2hhciAqc2VydmljZSwgaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBzdHJidWYgZXhwID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB0eXBlID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBjaGFyc2V0ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWZmZXIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHJlZnNfdXJsID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBlZmZlY3RpdmVfdXJsID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGRpc2NvdmVyeSAqbGFzdCA9IGxhc3RfZGlzY292ZXJ5OworCWludCBodHRwX3JldCwgbWF5YmVfc21hcnQgPSAwOworCXN0cnVjdCBodHRwX2dldF9vcHRpb25zIG9wdGlvbnM7CisKKwlpZiAobGFzdCAmJiAhc3RyY21wKHNlcnZpY2UsIGxhc3QtPnNlcnZpY2UpKQorCQlyZXR1cm4gbGFzdDsKKwlmcmVlX2Rpc2NvdmVyeShsYXN0KTsKKworCXN0cmJ1Zl9hZGRmKCZyZWZzX3VybCwgIiVzaW5mby9yZWZzIiwgdXJsLmJ1Zik7CisJaWYgKChzdGFydHNfd2l0aCh1cmwuYnVmLCAiaHR0cDovLyIpIHx8IHN0YXJ0c193aXRoKHVybC5idWYsICJodHRwczovLyIpKSAmJgorCSAgICAgZ2l0X2Vudl9ib29sKCJHSVRfU01BUlRfSFRUUCIsIDEpKSB7CisJCW1heWJlX3NtYXJ0ID0gMTsKKwkJaWYgKCFzdHJjaHIodXJsLmJ1ZiwgJz8nKSkKKwkJCXN0cmJ1Zl9hZGRjaCgmcmVmc191cmwsICc/Jyk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRjaCgmcmVmc191cmwsICcmJyk7CisJCXN0cmJ1Zl9hZGRmKCZyZWZzX3VybCwgInNlcnZpY2U9JXMiLCBzZXJ2aWNlKTsKKwl9CisKKwltZW1zZXQoJm9wdGlvbnMsIDAsIHNpemVvZihvcHRpb25zKSk7CisJb3B0aW9ucy5jb250ZW50X3R5cGUgPSAmdHlwZTsKKwlvcHRpb25zLmNoYXJzZXQgPSAmY2hhcnNldDsKKwlvcHRpb25zLmVmZmVjdGl2ZV91cmwgPSAmZWZmZWN0aXZlX3VybDsKKwlvcHRpb25zLmJhc2VfdXJsID0gJnVybDsKKwlvcHRpb25zLm5vX2NhY2hlID0gMTsKKwlvcHRpb25zLmtlZXBfZXJyb3IgPSAxOworCisJaHR0cF9yZXQgPSBodHRwX2dldF9zdHJidWYocmVmc191cmwuYnVmLCAmYnVmZmVyLCAmb3B0aW9ucyk7CisJc3dpdGNoIChodHRwX3JldCkgeworCWNhc2UgSFRUUF9PSzoKKwkJYnJlYWs7CisJY2FzZSBIVFRQX01JU1NJTkdfVEFSR0VUOgorCQlzaG93X2h0dHBfbWVzc2FnZSgmdHlwZSwgJmNoYXJzZXQsICZidWZmZXIpOworCQlkaWUoInJlcG9zaXRvcnkgJyVzJyBub3QgZm91bmQiLCB1cmwuYnVmKTsKKwljYXNlIEhUVFBfTk9BVVRIOgorCQlzaG93X2h0dHBfbWVzc2FnZSgmdHlwZSwgJmNoYXJzZXQsICZidWZmZXIpOworCQlkaWUoIkF1dGhlbnRpY2F0aW9uIGZhaWxlZCBmb3IgJyVzJyIsIHVybC5idWYpOworCWRlZmF1bHQ6CisJCXNob3dfaHR0cF9tZXNzYWdlKCZ0eXBlLCAmY2hhcnNldCwgJmJ1ZmZlcik7CisJCWRpZSgidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIsIHVybC5idWYsIGN1cmxfZXJyb3JzdHIpOworCX0KKworCWxhc3Q9IHhjYWxsb2MoMSwgc2l6ZW9mKCpsYXN0X2Rpc2NvdmVyeSkpOworCWxhc3QtPnNlcnZpY2UgPSBzZXJ2aWNlOworCWxhc3QtPmJ1Zl9hbGxvYyA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZmZlciwgJmxhc3QtPmxlbik7CisJbGFzdC0+YnVmID0gbGFzdC0+YnVmX2FsbG9jOworCisJc3RyYnVmX2FkZGYoJmV4cCwgImFwcGxpY2F0aW9uL3gtJXMtYWR2ZXJ0aXNlbWVudCIsIHNlcnZpY2UpOworCWlmIChtYXliZV9zbWFydCAmJgorCSAgICAoNSA8PSBsYXN0LT5sZW4gJiYgbGFzdC0+YnVmWzRdID09ICcjJykgJiYKKwkgICAgIXN0cmJ1Zl9jbXAoJmV4cCwgJnR5cGUpKSB7CisJCWNoYXIgKmxpbmU7CisKKwkJLyoKKwkJICogc21hcnQgSFRUUCByZXNwb25zZTsgdmFsaWRhdGUgdGhhdCB0aGUgc2VydmljZQorCQkgKiBwa3QtbGluZSBtYXRjaGVzIG91ciByZXF1ZXN0LgorCQkgKi8KKwkJbGluZSA9IHBhY2tldF9yZWFkX2xpbmVfYnVmKCZsYXN0LT5idWYsICZsYXN0LT5sZW4sIE5VTEwpOworCisJCXN0cmJ1Zl9yZXNldCgmZXhwKTsKKwkJc3RyYnVmX2FkZGYoJmV4cCwgIiMgc2VydmljZT0lcyIsIHNlcnZpY2UpOworCQlpZiAoc3RyY21wKGxpbmUsIGV4cC5idWYpKQorCQkJZGllKCJpbnZhbGlkIHNlcnZlciByZXNwb25zZTsgZ290ICclcyciLCBsaW5lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmV4cCk7CisKKwkJLyogVGhlIGhlYWRlciBjYW4gaW5jbHVkZSBhZGRpdGlvbmFsIG1ldGFkYXRhIGxpbmVzLCB1cAorCQkgKiB1bnRpbCBhIHBhY2tldCBmbHVzaCBtYXJrZXIuICBJZ25vcmUgdGhlc2Ugbm93LCBidXQKKwkJICogaW4gdGhlIGZ1dHVyZSB3ZSBtaWdodCBzdGFydCB0byBzY2FuIHRoZW0uCisJCSAqLworCQl3aGlsZSAocGFja2V0X3JlYWRfbGluZV9idWYoJmxhc3QtPmJ1ZiwgJmxhc3QtPmxlbiwgTlVMTCkpCisJCQk7CisKKwkJbGFzdC0+cHJvdG9fZ2l0ID0gMTsKKwl9CisKKwlpZiAobGFzdC0+cHJvdG9fZ2l0KQorCQlsYXN0LT5yZWZzID0gcGFyc2VfZ2l0X3JlZnMobGFzdCwgZm9yX3B1c2gpOworCWVsc2UKKwkJbGFzdC0+cmVmcyA9IHBhcnNlX2luZm9fcmVmcyhsYXN0KTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZWZzX3VybCk7CisJc3RyYnVmX3JlbGVhc2UoJmV4cCk7CisJc3RyYnVmX3JlbGVhc2UoJnR5cGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZjaGFyc2V0KTsKKwlzdHJidWZfcmVsZWFzZSgmZWZmZWN0aXZlX3VybCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1ZmZlcik7CisJbGFzdF9kaXNjb3ZlcnkgPSBsYXN0OworCXJldHVybiBsYXN0OworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnMoaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzOworCisJaWYgKGZvcl9wdXNoKQorCQloZWFkcyA9IGRpc2NvdmVyX3JlZnMoImdpdC1yZWNlaXZlLXBhY2siLCBmb3JfcHVzaCk7CisJZWxzZQorCQloZWFkcyA9IGRpc2NvdmVyX3JlZnMoImdpdC11cGxvYWQtcGFjayIsIGZvcl9wdXNoKTsKKworCXJldHVybiBoZWFkcy0+cmVmczsKK30KKworc3RhdGljIHZvaWQgb3V0cHV0X3JlZnMoc3RydWN0IHJlZiAqcmVmcykKK3sKKwlzdHJ1Y3QgcmVmICpwb3NuOworCWZvciAocG9zbiA9IHJlZnM7IHBvc247IHBvc24gPSBwb3NuLT5uZXh0KSB7CisJCWlmIChwb3NuLT5zeW1yZWYpCisJCQlwcmludGYoIkAlcyAlc1xuIiwgcG9zbi0+c3ltcmVmLCBwb3NuLT5uYW1lKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlcyAlc1xuIiwgc2hhMV90b19oZXgocG9zbi0+b2xkX3NoYTEpLCBwb3NuLT5uYW1lKTsKKwl9CisJcHJpbnRmKCJcbiIpOworCWZmbHVzaChzdGRvdXQpOworfQorCitzdHJ1Y3QgcnBjX3N0YXRlIHsKKwljb25zdCBjaGFyICpzZXJ2aWNlX25hbWU7CisJY29uc3QgY2hhciAqKmFyZ3Y7CisJc3RydWN0IHN0cmJ1ZiAqc3RkaW5fcHJlYW1ibGU7CisJY2hhciAqc2VydmljZV91cmw7CisJY2hhciAqaGRyX2NvbnRlbnRfdHlwZTsKKwljaGFyICpoZHJfYWNjZXB0OworCWNoYXIgKmJ1ZjsKKwlzaXplX3QgYWxsb2M7CisJc2l6ZV90IGxlbjsKKwlzaXplX3QgcG9zOworCWludCBpbjsKKwlpbnQgb3V0OworCXN0cnVjdCBzdHJidWYgcmVzdWx0OworCXVuc2lnbmVkIGd6aXBfcmVxdWVzdCA6IDE7CisJdW5zaWduZWQgaW5pdGlhbF9idWZmZXIgOiAxOworfTsKKworc3RhdGljIHNpemVfdCBycGNfb3V0KHZvaWQgKnB0ciwgc2l6ZV90IGVsdHNpemUsCisJCXNpemVfdCBubWVtYiwgdm9pZCAqYnVmZmVyXykKK3sKKwlzaXplX3QgbWF4ID0gZWx0c2l6ZSAqIG5tZW1iOworCXN0cnVjdCBycGNfc3RhdGUgKnJwYyA9IGJ1ZmZlcl87CisJc2l6ZV90IGF2YWlsID0gcnBjLT5sZW4gLSBycGMtPnBvczsKKworCWlmICghYXZhaWwpIHsKKwkJcnBjLT5pbml0aWFsX2J1ZmZlciA9IDA7CisJCWF2YWlsID0gcGFja2V0X3JlYWQocnBjLT5vdXQsIE5VTEwsIE5VTEwsIHJwYy0+YnVmLCBycGMtPmFsbG9jLCAwKTsKKwkJaWYgKCFhdmFpbCkKKwkJCXJldHVybiAwOworCQlycGMtPnBvcyA9IDA7CisJCXJwYy0+bGVuID0gYXZhaWw7CisJfQorCisJaWYgKG1heCA8IGF2YWlsKQorCQlhdmFpbCA9IG1heDsKKwltZW1jcHkocHRyLCBycGMtPmJ1ZiArIHJwYy0+cG9zLCBhdmFpbCk7CisJcnBjLT5wb3MgKz0gYXZhaWw7CisJcmV0dXJuIGF2YWlsOworfQorCisjaWZuZGVmIE5PX0NVUkxfSU9DVEwKK3N0YXRpYyBjdXJsaW9lcnIgcnBjX2lvY3RsKENVUkwgKmhhbmRsZSwgaW50IGNtZCwgdm9pZCAqY2xpZW50cCkKK3sKKwlzdHJ1Y3QgcnBjX3N0YXRlICpycGMgPSBjbGllbnRwOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIENVUkxJT0NNRF9OT1A6CisJCXJldHVybiBDVVJMSU9FX09LOworCisJY2FzZSBDVVJMSU9DTURfUkVTVEFSVFJFQUQ6CisJCWlmIChycGMtPmluaXRpYWxfYnVmZmVyKSB7CisJCQlycGMtPnBvcyA9IDA7CisJCQlyZXR1cm4gQ1VSTElPRV9PSzsKKwkJfQorCQllcnJvcigidW5hYmxlIHRvIHJld2luZCBycGMgcG9zdCBkYXRhIC0gdHJ5IGluY3JlYXNpbmcgaHR0cC5wb3N0QnVmZmVyIik7CisJCXJldHVybiBDVVJMSU9FX0ZBSUxSRVNUQVJUOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIENVUkxJT0VfVU5LTk9XTkNNRDsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIHNpemVfdCBycGNfaW4oY2hhciAqcHRyLCBzaXplX3QgZWx0c2l6ZSwKKwkJc2l6ZV90IG5tZW1iLCB2b2lkICpidWZmZXJfKQoreworCXNpemVfdCBzaXplID0gZWx0c2l6ZSAqIG5tZW1iOworCXN0cnVjdCBycGNfc3RhdGUgKnJwYyA9IGJ1ZmZlcl87CisJd3JpdGVfb3JfZGllKHJwYy0+aW4sIHB0ciwgc2l6ZSk7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3Nsb3Qoc3RydWN0IGFjdGl2ZV9yZXF1ZXN0X3Nsb3QgKnNsb3QsCisJCSAgICBzdHJ1Y3Qgc2xvdF9yZXN1bHRzICpyZXN1bHRzKQoreworCWludCBlcnI7CisJc3RydWN0IHNsb3RfcmVzdWx0cyByZXN1bHRzX2J1ZjsKKworCWlmICghcmVzdWx0cykKKwkJcmVzdWx0cyA9ICZyZXN1bHRzX2J1ZjsKKworCWVyciA9IHJ1bl9vbmVfc2xvdChzbG90LCByZXN1bHRzKTsKKworCWlmIChlcnIgIT0gSFRUUF9PSyAmJiBlcnIgIT0gSFRUUF9SRUFVVEgpIHsKKwkJZXJyb3IoIlJQQyBmYWlsZWQ7IHJlc3VsdD0lZCwgSFRUUCBjb2RlID0gJWxkIiwKKwkJICAgICAgcmVzdWx0cy0+Y3VybF9yZXN1bHQsIHJlc3VsdHMtPmh0dHBfY29kZSk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwcm9iZV9ycGMoc3RydWN0IHJwY19zdGF0ZSAqcnBjLCBzdHJ1Y3Qgc2xvdF9yZXN1bHRzICpyZXN1bHRzKQoreworCXN0cnVjdCBhY3RpdmVfcmVxdWVzdF9zbG90ICpzbG90OworCXN0cnVjdCBjdXJsX3NsaXN0ICpoZWFkZXJzID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBlcnI7CisKKwlzbG90ID0gZ2V0X2FjdGl2ZV9zbG90KCk7CisKKwloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgcnBjLT5oZHJfY29udGVudF90eXBlKTsKKwloZWFkZXJzID0gY3VybF9zbGlzdF9hcHBlbmQoaGVhZGVycywgcnBjLT5oZHJfYWNjZXB0KTsKKworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9OT0JPRFksIDApOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NULCAxKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfVVJMLCBycGMtPnNlcnZpY2VfdXJsKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRU5DT0RJTkcsIE5VTEwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCAiMDAwMCIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NURklFTERTSVpFLCA0KTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgaGVhZGVycyk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1dSSVRFRlVOQ1RJT04sIGZ3cml0ZV9idWZmZXIpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9GSUxFLCAmYnVmKTsKKworCWVyciA9IHJ1bl9zbG90KHNsb3QsIHJlc3VsdHMpOworCisJY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHBvc3RfcnBjKHN0cnVjdCBycGNfc3RhdGUgKnJwYykKK3sKKwlzdHJ1Y3QgYWN0aXZlX3JlcXVlc3Rfc2xvdCAqc2xvdDsKKwlzdHJ1Y3QgY3VybF9zbGlzdCAqaGVhZGVycyA9IE5VTEw7CisJaW50IHVzZV9nemlwID0gcnBjLT5nemlwX3JlcXVlc3Q7CisJY2hhciAqZ3ppcF9ib2R5ID0gTlVMTDsKKwlzaXplX3QgZ3ppcF9zaXplID0gMDsKKwlpbnQgZXJyLCBsYXJnZV9yZXF1ZXN0ID0gMDsKKwlpbnQgbmVlZHNfMTAwX2NvbnRpbnVlID0gMDsKKworCS8qIFRyeSB0byBsb2FkIHRoZSBlbnRpcmUgcmVxdWVzdCwgaWYgd2UgY2FuIGZpdCBpdCBpbnRvIHRoZQorCSAqIGFsbG9jYXRlZCBidWZmZXIgc3BhY2Ugd2UgY2FuIHVzZSBIVFRQLzEuMCBhbmQgYXZvaWQgdGhlCisJICogY2h1bmtlZCBlbmNvZGluZyBtZXNzLgorCSAqLworCXdoaWxlICgxKSB7CisJCXNpemVfdCBsZWZ0ID0gcnBjLT5hbGxvYyAtIHJwYy0+bGVuOworCQljaGFyICpidWYgPSBycGMtPmJ1ZiArIHJwYy0+bGVuOworCQlpbnQgbjsKKworCQlpZiAobGVmdCA8IExBUkdFX1BBQ0tFVF9NQVgpIHsKKwkJCWxhcmdlX3JlcXVlc3QgPSAxOworCQkJdXNlX2d6aXAgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQluID0gcGFja2V0X3JlYWQocnBjLT5vdXQsIE5VTEwsIE5VTEwsIGJ1ZiwgbGVmdCwgMCk7CisJCWlmICghbikKKwkJCWJyZWFrOworCQlycGMtPmxlbiArPSBuOworCX0KKworCWlmIChsYXJnZV9yZXF1ZXN0KSB7CisJCXN0cnVjdCBzbG90X3Jlc3VsdHMgcmVzdWx0czsKKworCQlkbyB7CisJCQllcnIgPSBwcm9iZV9ycGMocnBjLCAmcmVzdWx0cyk7CisJCQlpZiAoZXJyID09IEhUVFBfUkVBVVRIKQorCQkJCWNyZWRlbnRpYWxfZmlsbCgmaHR0cF9hdXRoKTsKKwkJfSB3aGlsZSAoZXJyID09IEhUVFBfUkVBVVRIKTsKKwkJaWYgKGVyciAhPSBIVFRQX09LKQorCQkJcmV0dXJuIC0xOworCisJCWlmIChyZXN1bHRzLmF1dGhfYXZhaWwgJiBDVVJMQVVUSF9HU1NORUdPVElBVEUpCisJCQluZWVkc18xMDBfY29udGludWUgPSAxOworCX0KKworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBycGMtPmhkcl9jb250ZW50X3R5cGUpOworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBycGMtPmhkcl9hY2NlcHQpOworCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBuZWVkc18xMDBfY29udGludWUgPworCQkiRXhwZWN0OiAxMDAtY29udGludWUiIDogIkV4cGVjdDoiKTsKKworcmV0cnk6CisJc2xvdCA9IGdldF9hY3RpdmVfc2xvdCgpOworCisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX05PQk9EWSwgMCk7CisJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1QsIDEpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9VUkwsIHJwYy0+c2VydmljZV91cmwpOworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9FTkNPRElORywgImd6aXAiKTsKKworCWlmIChsYXJnZV9yZXF1ZXN0KSB7CisJCS8qIFRoZSByZXF1ZXN0IGJvZHkgaXMgbGFyZ2UgYW5kIHRoZSBzaXplIGNhbm5vdCBiZSBwcmVkaWN0ZWQuCisJCSAqIFdlIG11c3QgdXNlIGNodW5rZWQgZW5jb2RpbmcgdG8gc2VuZCBpdC4KKwkJICovCisJCWhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCAiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiKTsKKwkJcnBjLT5pbml0aWFsX2J1ZmZlciA9IDE7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9SRUFERlVOQ1RJT04sIHJwY19vdXQpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU5GSUxFLCBycGMpOworI2lmbmRlZiBOT19DVVJMX0lPQ1RMCisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9JT0NUTEZVTkNUSU9OLCBycGNfaW9jdGwpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfSU9DVExEQVRBLCBycGMpOworI2VuZGlmCisJCWlmIChvcHRpb25zLnZlcmJvc2l0eSA+IDEpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiUE9TVCAlcyAoY2h1bmtlZClcbiIsIHJwYy0+c2VydmljZV9uYW1lKTsKKwkJCWZmbHVzaChzdGRlcnIpOworCQl9CisKKwl9IGVsc2UgaWYgKGd6aXBfYm9keSkgeworCQkvKgorCQkgKiBJZiB3ZSBhcmUgbG9vcGluZyB0byByZXRyeSBhdXRoZW50aWNhdGlvbiwgdGhlbiB0aGUgcHJldmlvdXMKKwkJICogcnVuIHdpbGwgaGF2ZSBzZXQgdXAgdGhlIGhlYWRlcnMgYW5kIGd6aXAgYnVmZmVyIGFscmVhZHksCisJCSAqIGFuZCB3ZSBqdXN0IG5lZWQgdG8gc2VuZCBpdC4KKwkJICovCisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCBnemlwX2JvZHkpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUE9TVEZJRUxEU0laRSwgZ3ppcF9zaXplKTsKKworCX0gZWxzZSBpZiAodXNlX2d6aXAgJiYgMTAyNCA8IHJwYy0+bGVuKSB7CisJCS8qIFRoZSBjbGllbnQgYmFja2VuZCBpc24ndCBnaXZpbmcgdXMgY29tcHJlc3NlZCBkYXRhIHNvCisJCSAqIHdlIGNhbiB0cnkgdG8gZGVmbGF0ZSBpdCBvdXJzZWx2ZXMsIHRoaXMgbWF5IHNhdmUgb24uCisJCSAqIHRoZSB0cmFuc2ZlciB0aW1lLgorCQkgKi8KKwkJZ2l0X3pzdHJlYW0gc3RyZWFtOworCQlpbnQgcmV0OworCisJCWdpdF9kZWZsYXRlX2luaXRfZ3ppcCgmc3RyZWFtLCBaX0JFU1RfQ09NUFJFU1NJT04pOworCQlnemlwX3NpemUgPSBnaXRfZGVmbGF0ZV9ib3VuZCgmc3RyZWFtLCBycGMtPmxlbik7CisJCWd6aXBfYm9keSA9IHhtYWxsb2MoZ3ppcF9zaXplKTsKKworCQlzdHJlYW0ubmV4dF9pbiA9ICh1bnNpZ25lZCBjaGFyICopcnBjLT5idWY7CisJCXN0cmVhbS5hdmFpbF9pbiA9IHJwYy0+bGVuOworCQlzdHJlYW0ubmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKWd6aXBfYm9keTsKKwkJc3RyZWFtLmF2YWlsX291dCA9IGd6aXBfc2l6ZTsKKworCQlyZXQgPSBnaXRfZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKQorCQkJZGllKCJjYW5ub3QgZGVmbGF0ZSByZXF1ZXN0OyB6bGliIGRlZmxhdGUgZXJyb3IgJWQiLCByZXQpOworCisJCXJldCA9IGdpdF9kZWZsYXRlX2VuZF9nZW50bHkoJnN0cmVhbSk7CisJCWlmIChyZXQgIT0gWl9PSykKKwkJCWRpZSgiY2Fubm90IGRlZmxhdGUgcmVxdWVzdDsgemxpYiBlbmQgZXJyb3IgJWQiLCByZXQpOworCisJCWd6aXBfc2l6ZSA9IHN0cmVhbS50b3RhbF9vdXQ7CisKKwkJaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhlYWRlcnMsICJDb250ZW50LUVuY29kaW5nOiBnemlwIik7CisJCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9QT1NURklFTERTLCBnemlwX2JvZHkpOworCQljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfUE9TVEZJRUxEU0laRSwgZ3ppcF9zaXplKTsKKworCQlpZiAob3B0aW9ucy52ZXJib3NpdHkgPiAxKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlBPU1QgJXMgKGd6aXAgJWx1IHRvICVsdSBieXRlcylcbiIsCisJCQkJcnBjLT5zZXJ2aWNlX25hbWUsCisJCQkJKHVuc2lnbmVkIGxvbmcpcnBjLT5sZW4sICh1bnNpZ25lZCBsb25nKWd6aXBfc2l6ZSk7CisJCQlmZmx1c2goc3RkZXJyKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFdlIGtub3cgdGhlIGNvbXBsZXRlIHJlcXVlc3Qgc2l6ZSBpbiBhZHZhbmNlLCB1c2UgdGhlCisJCSAqIG1vcmUgbm9ybWFsIENvbnRlbnQtTGVuZ3RoIGFwcHJvYWNoLgorCQkgKi8KKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsIHJwYy0+YnVmKTsKKwkJY3VybF9lYXN5X3NldG9wdChzbG90LT5jdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIHJwYy0+bGVuKTsKKwkJaWYgKG9wdGlvbnMudmVyYm9zaXR5ID4gMSkgeworCQkJZnByaW50ZihzdGRlcnIsICJQT1NUICVzICglbHUgYnl0ZXMpXG4iLAorCQkJCXJwYy0+c2VydmljZV9uYW1lLCAodW5zaWduZWQgbG9uZylycGMtPmxlbik7CisJCQlmZmx1c2goc3RkZXJyKTsKKwkJfQorCX0KKworCWN1cmxfZWFzeV9zZXRvcHQoc2xvdC0+Y3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBoZWFkZXJzKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfV1JJVEVGVU5DVElPTiwgcnBjX2luKTsKKwljdXJsX2Vhc3lfc2V0b3B0KHNsb3QtPmN1cmwsIENVUkxPUFRfRklMRSwgcnBjKTsKKworCWVyciA9IHJ1bl9zbG90KHNsb3QsIE5VTEwpOworCWlmIChlcnIgPT0gSFRUUF9SRUFVVEggJiYgIWxhcmdlX3JlcXVlc3QpIHsKKwkJY3JlZGVudGlhbF9maWxsKCZodHRwX2F1dGgpOworCQlnb3RvIHJldHJ5OworCX0KKwlpZiAoZXJyICE9IEhUVFBfT0spCisJCWVyciA9IC0xOworCisJY3VybF9zbGlzdF9mcmVlX2FsbChoZWFkZXJzKTsKKwlmcmVlKGd6aXBfYm9keSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBycGNfc2VydmljZShzdHJ1Y3QgcnBjX3N0YXRlICpycGMsIHN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzKQoreworCWNvbnN0IGNoYXIgKnN2YyA9IHJwYy0+c2VydmljZV9uYW1lOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiAqcHJlYW1ibGUgPSBycGMtPnN0ZGluX3ByZWFtYmxlOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNsaWVudCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlpbnQgZXJyID0gMDsKKworCWNsaWVudC5pbiA9IC0xOworCWNsaWVudC5vdXQgPSAtMTsKKwljbGllbnQuZ2l0X2NtZCA9IDE7CisJY2xpZW50LmFyZ3YgPSBycGMtPmFyZ3Y7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNsaWVudCkpCisJCWV4aXQoMSk7CisJaWYgKHByZWFtYmxlKQorCQl3cml0ZV9vcl9kaWUoY2xpZW50LmluLCBwcmVhbWJsZS0+YnVmLCBwcmVhbWJsZS0+bGVuKTsKKwlpZiAoaGVhZHMpCisJCXdyaXRlX29yX2RpZShjbGllbnQuaW4sIGhlYWRzLT5idWYsIGhlYWRzLT5sZW4pOworCisJcnBjLT5hbGxvYyA9IGh0dHBfcG9zdF9idWZmZXI7CisJcnBjLT5idWYgPSB4bWFsbG9jKHJwYy0+YWxsb2MpOworCXJwYy0+aW4gPSBjbGllbnQuaW47CisJcnBjLT5vdXQgPSBjbGllbnQub3V0OworCXN0cmJ1Zl9pbml0KCZycGMtPnJlc3VsdCwgMCk7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMlcyIsIHVybC5idWYsIHN2Yyk7CisJcnBjLT5zZXJ2aWNlX3VybCA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LSVzLXJlcXVlc3QiLCBzdmMpOworCXJwYy0+aGRyX2NvbnRlbnRfdHlwZSA9IHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiQWNjZXB0OiBhcHBsaWNhdGlvbi94LSVzLXJlc3VsdCIsIHN2Yyk7CisJcnBjLT5oZHJfYWNjZXB0ID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKKworCXdoaWxlICghZXJyKSB7CisJCWludCBuID0gcGFja2V0X3JlYWQocnBjLT5vdXQsIE5VTEwsIE5VTEwsIHJwYy0+YnVmLCBycGMtPmFsbG9jLCAwKTsKKwkJaWYgKCFuKQorCQkJYnJlYWs7CisJCXJwYy0+cG9zID0gMDsKKwkJcnBjLT5sZW4gPSBuOworCQllcnIgfD0gcG9zdF9ycGMocnBjKTsKKwl9CisKKwljbG9zZShjbGllbnQuaW4pOworCWNsaWVudC5pbiA9IC0xOworCWlmICghZXJyKSB7CisJCXN0cmJ1Zl9yZWFkKCZycGMtPnJlc3VsdCwgY2xpZW50Lm91dCwgMCk7CisJfSBlbHNlIHsKKwkJY2hhciBidWZbNDA5Nl07CisJCWZvciAoOzspCisJCQlpZiAoeHJlYWQoY2xpZW50Lm91dCwgYnVmLCBzaXplb2YoYnVmKSkgPD0gMCkKKwkJCQlicmVhazsKKwl9CisKKwljbG9zZShjbGllbnQub3V0KTsKKwljbGllbnQub3V0ID0gLTE7CisKKwllcnIgfD0gZmluaXNoX2NvbW1hbmQoJmNsaWVudCk7CisJZnJlZShycGMtPnNlcnZpY2VfdXJsKTsKKwlmcmVlKHJwYy0+aGRyX2NvbnRlbnRfdHlwZSk7CisJZnJlZShycGMtPmhkcl9hY2NlcHQpOworCWZyZWUocnBjLT5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfZHVtYihpbnQgbnJfaGVhZHMsIHN0cnVjdCByZWYgKip0b19mZXRjaCkKK3sKKwlzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXI7CisJY2hhciAqKnRhcmdldHMgPSB4bWFsbG9jKG5yX2hlYWRzICogc2l6ZW9mKGNoYXIqKSk7CisJaW50IHJldCwgaTsKKworCWlmIChvcHRpb25zLmRlcHRoKQorCQlkaWUoImR1bWIgaHR0cCB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCAtLWRlcHRoIik7CisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCisJCXRhcmdldHNbaV0gPSB4c3RyZHVwKHNoYTFfdG9faGV4KHRvX2ZldGNoW2ldLT5vbGRfc2hhMSkpOworCisJd2Fsa2VyID0gZ2V0X2h0dHBfd2Fsa2VyKHVybC5idWYpOworCXdhbGtlci0+Z2V0X2FsbCA9IDE7CisJd2Fsa2VyLT5nZXRfdHJlZSA9IDE7CisJd2Fsa2VyLT5nZXRfaGlzdG9yeSA9IDE7CisJd2Fsa2VyLT5nZXRfdmVyYm9zZWx5ID0gb3B0aW9ucy52ZXJib3NpdHkgPj0gMzsKKwl3YWxrZXItPmdldF9yZWNvdmVyID0gMDsKKwlyZXQgPSB3YWxrZXJfZmV0Y2god2Fsa2VyLCBucl9oZWFkcywgdGFyZ2V0cywgTlVMTCwgTlVMTCk7CisJd2Fsa2VyX2ZyZWUod2Fsa2VyKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9oZWFkczsgaSsrKQorCQlmcmVlKHRhcmdldHNbaV0pOworCWZyZWUodGFyZ2V0cyk7CisKKwlyZXR1cm4gcmV0ID8gZXJyb3IoImZldGNoIGZhaWxlZC4iKSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfZ2l0KHN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzLAorCWludCBucl9oZWFkcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQoreworCXN0cnVjdCBycGNfc3RhdGUgcnBjOworCXN0cnVjdCBzdHJidWYgcHJlYW1ibGUgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpkZXB0aF9hcmcgPSBOVUxMOworCWludCBhcmdjID0gMCwgaSwgZXJyOworCWNvbnN0IGNoYXIgKmFyZ3ZbMTddOworCisJYXJndlthcmdjKytdID0gImZldGNoLXBhY2siOworCWFyZ3ZbYXJnYysrXSA9ICItLXN0YXRlbGVzcy1ycGMiOworCWFyZ3ZbYXJnYysrXSA9ICItLXN0ZGluIjsKKwlhcmd2W2FyZ2MrK10gPSAiLS1sb2NrLXBhY2siOworCWlmIChvcHRpb25zLmZvbGxvd3RhZ3MpCisJCWFyZ3ZbYXJnYysrXSA9ICItLWluY2x1ZGUtdGFnIjsKKwlpZiAob3B0aW9ucy50aGluKQorCQlhcmd2W2FyZ2MrK10gPSAiLS10aGluIjsKKwlpZiAob3B0aW9ucy52ZXJib3NpdHkgPj0gMykgeworCQlhcmd2W2FyZ2MrK10gPSAiLXYiOworCQlhcmd2W2FyZ2MrK10gPSAiLXYiOworCX0KKwlpZiAob3B0aW9ucy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkKQorCQlhcmd2W2FyZ2MrK10gPSAiLS1jaGVjay1zZWxmLWNvbnRhaW5lZC1hbmQtY29ubmVjdGVkIjsKKwlpZiAob3B0aW9ucy5jbG9uaW5nKQorCQlhcmd2W2FyZ2MrK10gPSAiLS1jbG9uaW5nIjsKKwlpZiAob3B0aW9ucy51cGRhdGVfc2hhbGxvdykKKwkJYXJndlthcmdjKytdID0gIi0tdXBkYXRlLXNoYWxsb3ciOworCWlmICghb3B0aW9ucy5wcm9ncmVzcykKKwkJYXJndlthcmdjKytdID0gIi0tbm8tcHJvZ3Jlc3MiOworCWlmIChvcHRpb25zLmRlcHRoKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICItLWRlcHRoPSVsdSIsIG9wdGlvbnMuZGVwdGgpOworCQlkZXB0aF9hcmcgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCQlhcmd2W2FyZ2MrK10gPSBkZXB0aF9hcmc7CisJfQorCWFyZ3ZbYXJnYysrXSA9IHVybC5idWY7CisJYXJndlthcmdjKytdID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBucl9oZWFkczsgaSsrKSB7CisJCXN0cnVjdCByZWYgKnJlZiA9IHRvX2ZldGNoW2ldOworCQlpZiAoISpyZWYtPm5hbWUpCisJCQlkaWUoImNhbm5vdCBmZXRjaCBieSBzaGExIG92ZXIgc21hcnQgaHR0cCIpOworCQlwYWNrZXRfYnVmX3dyaXRlKCZwcmVhbWJsZSwgIiVzICVzXG4iLAorCQkJCSBzaGExX3RvX2hleChyZWYtPm9sZF9zaGExKSwgcmVmLT5uYW1lKTsKKwl9CisJcGFja2V0X2J1Zl9mbHVzaCgmcHJlYW1ibGUpOworCisJbWVtc2V0KCZycGMsIDAsIHNpemVvZihycGMpKTsKKwlycGMuc2VydmljZV9uYW1lID0gImdpdC11cGxvYWQtcGFjayIsCisJcnBjLmFyZ3YgPSBhcmd2OworCXJwYy5zdGRpbl9wcmVhbWJsZSA9ICZwcmVhbWJsZTsKKwlycGMuZ3ppcF9yZXF1ZXN0ID0gMTsKKworCWVyciA9IHJwY19zZXJ2aWNlKCZycGMsIGhlYWRzKTsKKwlpZiAocnBjLnJlc3VsdC5sZW4pCisJCXdyaXRlX29yX2RpZSgxLCBycGMucmVzdWx0LmJ1ZiwgcnBjLnJlc3VsdC5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZycGMucmVzdWx0KTsKKwlzdHJidWZfcmVsZWFzZSgmcHJlYW1ibGUpOworCWZyZWUoZGVwdGhfYXJnKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGZldGNoKGludCBucl9oZWFkcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQoreworCXN0cnVjdCBkaXNjb3ZlcnkgKmQgPSBkaXNjb3Zlcl9yZWZzKCJnaXQtdXBsb2FkLXBhY2siLCAwKTsKKwlpZiAoZC0+cHJvdG9fZ2l0KQorCQlyZXR1cm4gZmV0Y2hfZ2l0KGQsIG5yX2hlYWRzLCB0b19mZXRjaCk7CisJZWxzZQorCQlyZXR1cm4gZmV0Y2hfZHVtYihucl9oZWFkcywgdG9fZmV0Y2gpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9mZXRjaChzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc3RydWN0IHJlZiAqKnRvX2ZldGNoID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICpsaXN0X2hlYWQgPSBOVUxMOworCXN0cnVjdCByZWYgKipsaXN0ID0gJmxpc3RfaGVhZDsKKwlpbnQgYWxsb2NfaGVhZHMgPSAwLCBucl9oZWFkcyA9IDA7CisKKwlkbyB7CisJCWNvbnN0IGNoYXIgKnA7CisJCWlmIChza2lwX3ByZWZpeChidWYtPmJ1ZiwgImZldGNoICIsICZwKSkgeworCQkJY29uc3QgY2hhciAqbmFtZTsKKwkJCXN0cnVjdCByZWYgKnJlZjsKKwkJCXVuc2lnbmVkIGNoYXIgb2xkX3NoYTFbMjBdOworCisJCQlpZiAoc3RybGVuKHApIDwgNDAgfHwgZ2V0X3NoYTFfaGV4KHAsIG9sZF9zaGExKSkKKwkJCQlkaWUoInByb3RvY29sIGVycm9yOiBleHBlY3RlZCBzaGEvcmVmLCBnb3QgJXMnIiwgcCk7CisJCQlpZiAocFs0MF0gPT0gJyAnKQorCQkJCW5hbWUgPSBwICsgNDE7CisJCQllbHNlIGlmICghcFs0MF0pCisJCQkJbmFtZSA9ICIiOworCQkJZWxzZQorCQkJCWRpZSgicHJvdG9jb2wgZXJyb3I6IGV4cGVjdGVkIHNoYS9yZWYsIGdvdCAlcyciLCBwKTsKKworCQkJcmVmID0gYWxsb2NfcmVmKG5hbWUpOworCQkJaGFzaGNweShyZWYtPm9sZF9zaGExLCBvbGRfc2hhMSk7CisKKwkJCSpsaXN0ID0gcmVmOworCQkJbGlzdCA9ICZyZWYtPm5leHQ7CisKKwkJCUFMTE9DX0dST1codG9fZmV0Y2gsIG5yX2hlYWRzICsgMSwgYWxsb2NfaGVhZHMpOworCQkJdG9fZmV0Y2hbbnJfaGVhZHMrK10gPSByZWY7CisJCX0KKwkJZWxzZQorCQkJZGllKCJodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0ICVzIiwgYnVmLT5idWYpOworCisJCXN0cmJ1Zl9yZXNldChidWYpOworCQlpZiAoc3RyYnVmX2dldGxpbmUoYnVmLCBzdGRpbiwgJ1xuJykgPT0gRU9GKQorCQkJcmV0dXJuOworCQlpZiAoISpidWYtPmJ1ZikKKwkJCWJyZWFrOworCX0gd2hpbGUgKDEpOworCisJaWYgKGZldGNoKG5yX2hlYWRzLCB0b19mZXRjaCkpCisJCWV4aXQoMTI4KTsgLyogZXJyb3IgYWxyZWFkeSByZXBvcnRlZCAqLworCWZyZWVfcmVmcyhsaXN0X2hlYWQpOworCWZyZWUodG9fZmV0Y2gpOworCisJcHJpbnRmKCJcbiIpOworCWZmbHVzaChzdGRvdXQpOworCXN0cmJ1Zl9yZXNldChidWYpOworfQorCitzdGF0aWMgaW50IHB1c2hfZGF2KGludCBucl9zcGVjLCBjaGFyICoqc3BlY3MpCit7CisJY29uc3QgY2hhciAqKmFyZ3YgPSB4bWFsbG9jKCgxMCArIG5yX3NwZWMpICogc2l6ZW9mKGNoYXIqKSk7CisJaW50IGFyZ2MgPSAwLCBpOworCisJYXJndlthcmdjKytdID0gImh0dHAtcHVzaCI7CisJYXJndlthcmdjKytdID0gIi0taGVscGVyLXN0YXR1cyI7CisJaWYgKG9wdGlvbnMuZHJ5X3J1bikKKwkJYXJndlthcmdjKytdID0gIi0tZHJ5LXJ1biI7CisJaWYgKG9wdGlvbnMudmVyYm9zaXR5ID4gMSkKKwkJYXJndlthcmdjKytdID0gIi0tdmVyYm9zZSI7CisJYXJndlthcmdjKytdID0gdXJsLmJ1ZjsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc3BlYzsgaSsrKQorCQlhcmd2W2FyZ2MrK10gPSBzcGVjc1tpXTsKKwlhcmd2W2FyZ2MrK10gPSBOVUxMOworCisJaWYgKHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9HSVRfQ01EKSkKKwkJZGllKCJnaXQtJXMgZmFpbGVkIiwgYXJndlswXSk7CisJZnJlZShhcmd2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwdXNoX2dpdChzdHJ1Y3QgZGlzY292ZXJ5ICpoZWFkcywgaW50IG5yX3NwZWMsIGNoYXIgKipzcGVjcykKK3sKKwlzdHJ1Y3QgcnBjX3N0YXRlIHJwYzsKKwlpbnQgaSwgZXJyOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3M7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmNhc19vcHRpb247CisJc3RydWN0IHN0cmJ1ZiBwcmVhbWJsZSA9IFNUUkJVRl9JTklUOworCisJYXJndl9hcnJheV9pbml0KCZhcmdzKTsKKwlhcmd2X2FycmF5X3B1c2hsKCZhcmdzLCAic2VuZC1wYWNrIiwgIi0tc3RhdGVsZXNzLXJwYyIsICItLWhlbHBlci1zdGF0dXMiLAorCQkJIE5VTEwpOworCisJaWYgKG9wdGlvbnMudGhpbikKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS10aGluIik7CisJaWYgKG9wdGlvbnMuZHJ5X3J1bikKKwkJYXJndl9hcnJheV9wdXNoKCZhcmdzLCAiLS1kcnktcnVuIik7CisJaWYgKG9wdGlvbnMucHVzaF9jZXJ0ID09IFNFTkRfUEFDS19QVVNIX0NFUlRfQUxXQVlTKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXNpZ25lZD15ZXMiKTsKKwllbHNlIGlmIChvcHRpb25zLnB1c2hfY2VydCA9PSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0lGX0FTS0VEKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXNpZ25lZD1pZi1hc2tlZCIpOworCWlmIChvcHRpb25zLnZlcmJvc2l0eSA9PSAwKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXF1aWV0Iik7CisJZWxzZSBpZiAob3B0aW9ucy52ZXJib3NpdHkgPiAxKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsICItLXZlcmJvc2UiKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIG9wdGlvbnMucHJvZ3Jlc3MgPyAiLS1wcm9ncmVzcyIgOiAiLS1uby1wcm9ncmVzcyIpOworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oY2FzX29wdGlvbiwgJmNhc19vcHRpb25zKQorCQlhcmd2X2FycmF5X3B1c2goJmFyZ3MsIGNhc19vcHRpb24tPnN0cmluZyk7CisJYXJndl9hcnJheV9wdXNoKCZhcmdzLCB1cmwuYnVmKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJncywgIi0tc3RkaW4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc3BlYzsgaSsrKQorCQlwYWNrZXRfYnVmX3dyaXRlKCZwcmVhbWJsZSwgIiVzXG4iLCBzcGVjc1tpXSk7CisJcGFja2V0X2J1Zl9mbHVzaCgmcHJlYW1ibGUpOworCisJbWVtc2V0KCZycGMsIDAsIHNpemVvZihycGMpKTsKKwlycGMuc2VydmljZV9uYW1lID0gImdpdC1yZWNlaXZlLXBhY2siLAorCXJwYy5hcmd2ID0gYXJncy5hcmd2OworCXJwYy5zdGRpbl9wcmVhbWJsZSA9ICZwcmVhbWJsZTsKKworCWVyciA9IHJwY19zZXJ2aWNlKCZycGMsIGhlYWRzKTsKKwlpZiAocnBjLnJlc3VsdC5sZW4pCisJCXdyaXRlX29yX2RpZSgxLCBycGMucmVzdWx0LmJ1ZiwgcnBjLnJlc3VsdC5sZW4pOworCXN0cmJ1Zl9yZWxlYXNlKCZycGMucmVzdWx0KTsKKwlzdHJidWZfcmVsZWFzZSgmcHJlYW1ibGUpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFyZ3MpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcHVzaChpbnQgbnJfc3BlYywgY2hhciAqKnNwZWNzKQoreworCXN0cnVjdCBkaXNjb3ZlcnkgKmhlYWRzID0gZGlzY292ZXJfcmVmcygiZ2l0LXJlY2VpdmUtcGFjayIsIDEpOworCWludCByZXQ7CisKKwlpZiAoaGVhZHMtPnByb3RvX2dpdCkKKwkJcmV0ID0gcHVzaF9naXQoaGVhZHMsIG5yX3NwZWMsIHNwZWNzKTsKKwllbHNlCisJCXJldCA9IHB1c2hfZGF2KG5yX3NwZWMsIHNwZWNzKTsKKwlmcmVlX2Rpc2NvdmVyeShoZWFkcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfcHVzaChzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY2hhciAqKnNwZWNzID0gTlVMTDsKKwlpbnQgYWxsb2Nfc3BlYyA9IDAsIG5yX3NwZWMgPSAwLCBpLCByZXQ7CisKKwlkbyB7CisJCWlmIChzdGFydHNfd2l0aChidWYtPmJ1ZiwgInB1c2ggIikpIHsKKwkJCUFMTE9DX0dST1coc3BlY3MsIG5yX3NwZWMgKyAxLCBhbGxvY19zcGVjKTsKKwkJCXNwZWNzW25yX3NwZWMrK10gPSB4c3RyZHVwKGJ1Zi0+YnVmICsgNSk7CisJCX0KKwkJZWxzZQorCQkJZGllKCJodHRwIHRyYW5zcG9ydCBkb2VzIG5vdCBzdXBwb3J0ICVzIiwgYnVmLT5idWYpOworCisJCXN0cmJ1Zl9yZXNldChidWYpOworCQlpZiAoc3RyYnVmX2dldGxpbmUoYnVmLCBzdGRpbiwgJ1xuJykgPT0gRU9GKQorCQkJZ290byBmcmVlX3NwZWNzOworCQlpZiAoISpidWYtPmJ1ZikKKwkJCWJyZWFrOworCX0gd2hpbGUgKDEpOworCisJcmV0ID0gcHVzaChucl9zcGVjLCBzcGVjcyk7CisJcHJpbnRmKCJcbiIpOworCWZmbHVzaChzdGRvdXQpOworCisJaWYgKHJldCkKKwkJZXhpdCgxMjgpOyAvKiBlcnJvciBhbHJlYWR5IHJlcG9ydGVkICovCisKKyBmcmVlX3NwZWNzOgorCWZvciAoaSA9IDA7IGkgPCBucl9zcGVjOyBpKyspCisJCWZyZWUoc3BlY3NbaV0pOworCWZyZWUoc3BlY3MpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgbm9uZ2l0OworCisJZ2l0X3NldHVwX2dldHRleHQoKTsKKworCWdpdF9leHRyYWN0X2FyZ3YwX3BhdGgoYXJndlswXSk7CisJc2V0dXBfZ2l0X2RpcmVjdG9yeV9nZW50bHkoJm5vbmdpdCk7CisJaWYgKGFyZ2MgPCAyKSB7CisJCWVycm9yKCJyZW1vdGUtY3VybDogdXNhZ2U6IGdpdCByZW1vdGUtY3VybCA8cmVtb3RlPiBbPHVybD5dIik7CisJCXJldHVybiAxOworCX0KKworCW9wdGlvbnMudmVyYm9zaXR5ID0gMTsKKwlvcHRpb25zLnByb2dyZXNzID0gISFpc2F0dHkoMik7CisJb3B0aW9ucy50aGluID0gMTsKKworCXJlbW90ZSA9IHJlbW90ZV9nZXQoYXJndlsxXSk7CisKKwlpZiAoYXJnYyA+IDIpIHsKKwkJZW5kX3VybF93aXRoX3NsYXNoKCZ1cmwsIGFyZ3ZbMl0pOworCX0gZWxzZSB7CisJCWVuZF91cmxfd2l0aF9zbGFzaCgmdXJsLCByZW1vdGUtPnVybFswXSk7CisJfQorCisJaHR0cF9pbml0KHJlbW90ZSwgdXJsLmJ1ZiwgMCk7CisKKwlkbyB7CisJCWNvbnN0IGNoYXIgKmFyZzsKKworCQlpZiAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sICdcbicpID09IEVPRikgeworCQkJaWYgKGZlcnJvcihzdGRpbikpCisJCQkJZXJyb3IoInJlbW90ZS1jdXJsOiBlcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIGZyb20gZ2l0Iik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoYnVmLmxlbiA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChzdGFydHNfd2l0aChidWYuYnVmLCAiZmV0Y2ggIikpIHsKKwkJCWlmIChub25naXQpCisJCQkJZGllKCJyZW1vdGUtY3VybDogZmV0Y2ggYXR0ZW1wdGVkIHdpdGhvdXQgYSBsb2NhbCByZXBvIik7CisJCQlwYXJzZV9mZXRjaCgmYnVmKTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLmJ1ZiwgImxpc3QiKSB8fCBzdGFydHNfd2l0aChidWYuYnVmLCAibGlzdCAiKSkgeworCQkJaW50IGZvcl9wdXNoID0gISFzdHJzdHIoYnVmLmJ1ZiArIDQsICJmb3ItcHVzaCIpOworCQkJb3V0cHV0X3JlZnMoZ2V0X3JlZnMoZm9yX3B1c2gpKTsKKworCQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGJ1Zi5idWYsICJwdXNoICIpKSB7CisJCQlwYXJzZV9wdXNoKCZidWYpOworCisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoYnVmLmJ1ZiwgIm9wdGlvbiAiLCAmYXJnKSkgeworCQkJY2hhciAqdmFsdWUgPSBzdHJjaHIoYXJnLCAnICcpOworCQkJaW50IHJlc3VsdDsKKworCQkJaWYgKHZhbHVlKQorCQkJCSp2YWx1ZSsrID0gJ1wwJzsKKwkJCWVsc2UKKwkJCQl2YWx1ZSA9ICJ0cnVlIjsKKworCQkJcmVzdWx0ID0gc2V0X29wdGlvbihhcmcsIHZhbHVlKTsKKwkJCWlmICghcmVzdWx0KQorCQkJCXByaW50Zigib2tcbiIpOworCQkJZWxzZSBpZiAocmVzdWx0IDwgMCkKKwkJCQlwcmludGYoImVycm9yIGludmFsaWQgdmFsdWVcbiIpOworCQkJZWxzZQorCQkJCXByaW50ZigidW5zdXBwb3J0ZWRcbiIpOworCQkJZmZsdXNoKHN0ZG91dCk7CisKKwkJfSBlbHNlIGlmICghc3RyY21wKGJ1Zi5idWYsICJjYXBhYmlsaXRpZXMiKSkgeworCQkJcHJpbnRmKCJmZXRjaFxuIik7CisJCQlwcmludGYoIm9wdGlvblxuIik7CisJCQlwcmludGYoInB1c2hcbiIpOworCQkJcHJpbnRmKCJjaGVjay1jb25uZWN0aXZpdHlcbiIpOworCQkJcHJpbnRmKCJcbiIpOworCQkJZmZsdXNoKHN0ZG91dCk7CisJCX0gZWxzZSB7CisJCQllcnJvcigicmVtb3RlLWN1cmw6IHVua25vd24gY29tbWFuZCAnJXMnIGZyb20gZ2l0IiwgYnVmLmJ1Zik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJfSB3aGlsZSAoMSk7CisKKwlodHRwX2NsZWFudXAoKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvcmVtb3RlLXRlc3Rzdm4uYyBiL3JlbW90ZS10ZXN0c3ZuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5OWMzNwotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZS10ZXN0c3ZuLmMKQEAgLTAsMCArMSwzNDIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ1cmwuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAidmNzLXN2bi9zdm5kdW1wLmgiCisjaW5jbHVkZSAibm90ZXMuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICp1cmw7CitzdGF0aWMgaW50IGR1bXBfZnJvbV9maWxlOworc3RhdGljIGNvbnN0IGNoYXIgKnByaXZhdGVfcmVmOworc3RhdGljIGNvbnN0IGNoYXIgKnJlbW90ZV9yZWYgPSAicmVmcy9oZWFkcy9tYXN0ZXIiOworc3RhdGljIGNvbnN0IGNoYXIgKm1hcmtzZmlsZW5hbWUsICpub3Rlc19yZWY7CitzdHJ1Y3QgcmV2X25vdGUgeyB1bnNpZ25lZCBpbnQgcmV2X25yOyB9OworCitzdGF0aWMgaW50IGNtZF9jYXBhYmlsaXRpZXMoY29uc3QgY2hhciAqbGluZSk7CitzdGF0aWMgaW50IGNtZF9pbXBvcnQoY29uc3QgY2hhciAqbGluZSk7CitzdGF0aWMgaW50IGNtZF9saXN0KGNvbnN0IGNoYXIgKmxpbmUpOworCit0eXBlZGVmIGludCAoKmlucHV0X2NvbW1hbmRfaGFuZGxlcikoY29uc3QgY2hhciAqKTsKK3N0cnVjdCBpbnB1dF9jb21tYW5kX2VudHJ5IHsKKwljb25zdCBjaGFyICpuYW1lOworCWlucHV0X2NvbW1hbmRfaGFuZGxlciBmbjsKKwl1bnNpZ25lZCBjaGFyIGJhdGNoYWJsZTsJLyogd2hldGhlciB0aGUgY29tbWFuZCBzdGFydHMgb3IgaXMgcGFydCBvZiBhIGJhdGNoICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlucHV0X2NvbW1hbmRfZW50cnkgaW5wdXRfY29tbWFuZF9saXN0W10gPSB7CisJeyAiY2FwYWJpbGl0aWVzIiwgY21kX2NhcGFiaWxpdGllcywgMCB9LAorCXsgImltcG9ydCIsIGNtZF9pbXBvcnQsIDEgfSwKKwl7ICJsaXN0IiwgY21kX2xpc3QsIDAgfSwKKwl7IE5VTEwsIE5VTEwgfQorfTsKKworc3RhdGljIGludCBjbWRfY2FwYWJpbGl0aWVzKGNvbnN0IGNoYXIgKmxpbmUpCit7CisJcHJpbnRmKCJpbXBvcnRcbiIpOworCXByaW50ZigiYmlkaS1pbXBvcnRcbiIpOworCXByaW50ZigicmVmc3BlYyAlczolc1xuXG4iLCByZW1vdGVfcmVmLCBwcml2YXRlX3JlZik7CisJZmZsdXNoKHN0ZG91dCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRlcm1pbmF0ZV9iYXRjaCh2b2lkKQoreworCS8qIHRlcm1pbmF0ZSBhIGN1cnJlbnQgYmF0Y2gncyBmYXN0LWltcG9ydCBzdHJlYW0gKi8KKwlwcmludGYoImRvbmVcbiIpOworCWZmbHVzaChzdGRvdXQpOworfQorCisvKiBOT1RFOiAncmVmJyByZWZlcnMgdG8gYSBnaXQgcmVmZXJlbmNlLCB3aGlsZSAncmV2JyByZWZlcnMgdG8gYSBzdm4gcmV2aXNpb24uICovCitzdGF0aWMgY2hhciAqcmVhZF9yZWZfbm90ZShjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vdGVfc2hhMTsKKwljaGFyICptc2cgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgbXNnbGVuOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCWluaXRfbm90ZXMoTlVMTCwgbm90ZXNfcmVmLCBOVUxMLCAwKTsKKwlpZiAoIShub3RlX3NoYTEgPSBnZXRfbm90ZShOVUxMLCBzaGExKSkpCisJCXJldHVybiBOVUxMOwkvKiBub3RlIHRyZWUgbm90IGZvdW5kICovCisJaWYgKCEobXNnID0gcmVhZF9zaGExX2ZpbGUobm90ZV9zaGExLCAmdHlwZSwgJm1zZ2xlbikpKQorCQllcnJvcigiRW1wdHkgbm90ZXMgdHJlZS4gJXMiLCBub3Rlc19yZWYpOworCWVsc2UgaWYgKCFtc2dsZW4gfHwgdHlwZSAhPSBPQkpfQkxPQikgeworCQllcnJvcigiTm90ZSBjb250YWlucyB1bnVzYWJsZSBjb250ZW50LiAiCisJCQkiSXMgc29tZXRoaW5nIGVsc2UgdXNpbmcgdGhpcyBub3RlcyB0cmVlPyAlcyIsIG5vdGVzX3JlZik7CisJCWZyZWUobXNnKTsKKwkJbXNnID0gTlVMTDsKKwl9CisJZnJlZV9ub3RlcyhOVUxMKTsKKwlyZXR1cm4gbXNnOworfQorCitzdGF0aWMgaW50IHBhcnNlX3Jldl9ub3RlKGNvbnN0IGNoYXIgKm1zZywgc3RydWN0IHJldl9ub3RlICpyZXMpCit7CisJY29uc3QgY2hhciAqa2V5LCAqdmFsdWUsICplbmQ7CisJc2l6ZV90IGxlbjsKKworCXdoaWxlICgqbXNnKSB7CisJCWVuZCA9IHN0cmNocm51bChtc2csICdcbicpOworCQlsZW4gPSBlbmQgLSBtc2c7CisKKwkJa2V5ID0gIlJldmlzaW9uLW51bWJlcjogIjsKKwkJaWYgKHN0YXJ0c193aXRoKG1zZywga2V5KSkgeworCQkJbG9uZyBpOworCQkJY2hhciAqZW5kOworCQkJdmFsdWUgPSBtc2cgKyBzdHJsZW4oa2V5KTsKKwkJCWkgPSBzdHJ0b2wodmFsdWUsICZlbmQsIDApOworCQkJaWYgKGVuZCA9PSB2YWx1ZSB8fCBpIDwgMCB8fCBpID4gVUlOVDMyX01BWCkKKwkJCQlyZXR1cm4gLTE7CisJCQlyZXMtPnJldl9uciA9IGk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQltc2cgKz0gbGVuICsgMTsKKwl9CisJLyogZGlkbid0IGZpbmQgaXQgKi8KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgbm90ZTJtYXJrX2NiKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9iamVjdF9zaGExLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICpub3RlX3NoYTEsIGNoYXIgKm5vdGVfcGF0aCwKKwkJdm9pZCAqY2JfZGF0YSkKK3sKKwlGSUxFICpmaWxlID0gKEZJTEUgKiljYl9kYXRhOworCWNoYXIgKm1zZzsKKwl1bnNpZ25lZCBsb25nIG1zZ2xlbjsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJc3RydWN0IHJldl9ub3RlIG5vdGU7CisKKwlpZiAoIShtc2cgPSByZWFkX3NoYTFfZmlsZShub3RlX3NoYTEsICZ0eXBlLCAmbXNnbGVuKSkgfHwKKwkJCSFtc2dsZW4gfHwgdHlwZSAhPSBPQkpfQkxPQikgeworCQlmcmVlKG1zZyk7CisJCXJldHVybiAxOworCX0KKwlpZiAocGFyc2VfcmV2X25vdGUobXNnLCAmbm90ZSkpCisJCXJldHVybiAyOworCWlmIChmcHJpbnRmKGZpbGUsICI6JWQgJXNcbiIsIG5vdGUucmV2X25yLCBzaGExX3RvX2hleChvYmplY3Rfc2hhMSkpIDwgMSkKKwkJcmV0dXJuIDM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ2VuZXJhdGVfbWFya3Modm9pZCkKK3sKKwlpbnQgcmV0OworCUZJTEUgKm1hcmtzZmlsZSA9IGZvcGVuKG1hcmtzZmlsZW5hbWUsICJ3KyIpOworCisJaWYgKCFtYXJrc2ZpbGUpCisJCWRpZV9lcnJubygiQ291bGRuJ3QgY3JlYXRlIG1hcmsgZmlsZSAlcy4iLCBtYXJrc2ZpbGVuYW1lKTsKKwlyZXQgPSBmb3JfZWFjaF9ub3RlKE5VTEwsIDAsIG5vdGUybWFya19jYiwgbWFya3NmaWxlKTsKKwlpZiAocmV0KQorCQlkaWUoIlJlZ2VuZXJhdGlvbiBvZiBtYXJrcyBmYWlsZWQsIHJldHVybmVkICVkLiIsIHJldCk7CisJZmNsb3NlKG1hcmtzZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX29yX3JlZ2VuZXJhdGVfbWFya3MoaW50IGxhdGVzdHJldikKK3sKKwlGSUxFICptYXJrc2ZpbGU7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCWludCBmb3VuZCA9IDA7CisKKwlpZiAobGF0ZXN0cmV2IDwgMSkKKwkJcmV0dXJuOworCisJaW5pdF9ub3RlcyhOVUxMLCBub3Rlc19yZWYsIE5VTEwsIDApOworCW1hcmtzZmlsZSA9IGZvcGVuKG1hcmtzZmlsZW5hbWUsICJyIik7CisJaWYgKCFtYXJrc2ZpbGUpIHsKKwkJcmVnZW5lcmF0ZV9tYXJrcygpOworCQltYXJrc2ZpbGUgPSBmb3BlbihtYXJrc2ZpbGVuYW1lLCAiciIpOworCQlpZiAoIW1hcmtzZmlsZSkKKwkJCWRpZV9lcnJubygiY2Fubm90IHJlYWQgbWFya3MgZmlsZSAlcyEiLCBtYXJrc2ZpbGVuYW1lKTsKKwkJZmNsb3NlKG1hcmtzZmlsZSk7CisJfSBlbHNlIHsKKwkJc3RyYnVmX2FkZGYoJnNiLCAiOiVkICIsIGxhdGVzdHJldik7CisJCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgbWFya3NmaWxlLCAnXG4nKSAhPSBFT0YpIHsKKwkJCWlmIChzdGFydHNfd2l0aChsaW5lLmJ1Ziwgc2IuYnVmKSkgeworCQkJCWZvdW5kKys7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJZmNsb3NlKG1hcmtzZmlsZSk7CisJCWlmICghZm91bmQpCisJCQlyZWdlbmVyYXRlX21hcmtzKCk7CisJfQorCWZyZWVfbm90ZXMoTlVMTCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlzdHJidWZfcmVsZWFzZSgmbGluZSk7Cit9CisKK3N0YXRpYyBpbnQgY21kX2ltcG9ydChjb25zdCBjaGFyICpsaW5lKQoreworCWludCBjb2RlOworCWludCBkdW1waW5fZmQ7CisJY2hhciAqbm90ZV9tc2c7CisJdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOworCXVuc2lnbmVkIGludCBzdGFydHJldjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBzdm5kdW1wX3Byb2MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqY29tbWFuZCA9ICJzdm5yZHVtcCI7CisKKwlpZiAocmVhZF9yZWYocHJpdmF0ZV9yZWYsIGhlYWRfc2hhMSkpCisJCXN0YXJ0cmV2ID0gMDsKKwllbHNlIHsKKwkJbm90ZV9tc2cgPSByZWFkX3JlZl9ub3RlKGhlYWRfc2hhMSk7CisJCWlmKG5vdGVfbXNnID09IE5VTEwpIHsKKwkJCXdhcm5pbmcoIk5vIG5vdGUgZm91bmQgZm9yICVzLiIsIHByaXZhdGVfcmVmKTsKKwkJCXN0YXJ0cmV2ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCByZXZfbm90ZSBub3RlID0geyAwIH07CisJCQlpZiAocGFyc2VfcmV2X25vdGUobm90ZV9tc2csICZub3RlKSkKKwkJCQlkaWUoIlJldmlzaW9uIG51bWJlciBjb3VsZG4ndCBiZSBwYXJzZWQgZnJvbSBub3RlLiIpOworCQkJc3RhcnRyZXYgPSBub3RlLnJldl9uciArIDE7CisJCQlmcmVlKG5vdGVfbXNnKTsKKwkJfQorCX0KKwljaGVja19vcl9yZWdlbmVyYXRlX21hcmtzKHN0YXJ0cmV2IC0gMSk7CisKKwlpZiAoZHVtcF9mcm9tX2ZpbGUpIHsKKwkJZHVtcGluX2ZkID0gb3Blbih1cmwsIE9fUkRPTkxZKTsKKwkJaWYoZHVtcGluX2ZkIDwgMCkKKwkJCWRpZV9lcnJubygiQ291bGRuJ3Qgb3BlbiBzdm4gZHVtcCBmaWxlICVzLiIsIHVybCk7CisJfSBlbHNlIHsKKwkJc3ZuZHVtcF9wcm9jLm91dCA9IC0xOworCQlhcmd2X2FycmF5X3B1c2goJnN2bmR1bXBfcHJvYy5hcmdzLCBjb21tYW5kKTsKKwkJYXJndl9hcnJheV9wdXNoKCZzdm5kdW1wX3Byb2MuYXJncywgImR1bXAiKTsKKwkJYXJndl9hcnJheV9wdXNoKCZzdm5kdW1wX3Byb2MuYXJncywgdXJsKTsKKwkJYXJndl9hcnJheV9wdXNoZigmc3ZuZHVtcF9wcm9jLmFyZ3MsICItciV1OkhFQUQiLCBzdGFydHJldik7CisKKwkJY29kZSA9IHN0YXJ0X2NvbW1hbmQoJnN2bmR1bXBfcHJvYyk7CisJCWlmIChjb2RlKQorCQkJZGllKCJVbmFibGUgdG8gc3RhcnQgJXMsIGNvZGUgJWQiLCBjb21tYW5kLCBjb2RlKTsKKwkJZHVtcGluX2ZkID0gc3ZuZHVtcF9wcm9jLm91dDsKKwl9CisJLyogc2V0dXAgbWFya3MgZmlsZSBpbXBvcnQvZXhwb3J0ICovCisJcHJpbnRmKCJmZWF0dXJlIGltcG9ydC1tYXJrcy1pZi1leGlzdHM9JXNcbiIKKwkJCSJmZWF0dXJlIGV4cG9ydC1tYXJrcz0lc1xuIiwgbWFya3NmaWxlbmFtZSwgbWFya3NmaWxlbmFtZSk7CisKKwlzdm5kdW1wX2luaXRfZmQoZHVtcGluX2ZkLCBTVERJTl9GSUxFTk8pOworCXN2bmR1bXBfcmVhZCh1cmwsIHByaXZhdGVfcmVmLCBub3Rlc19yZWYpOworCXN2bmR1bXBfZGVpbml0KCk7CisJc3ZuZHVtcF9yZXNldCgpOworCisJY2xvc2UoZHVtcGluX2ZkKTsKKwlpZiAoIWR1bXBfZnJvbV9maWxlKSB7CisJCWNvZGUgPSBmaW5pc2hfY29tbWFuZCgmc3ZuZHVtcF9wcm9jKTsKKwkJaWYgKGNvZGUpCisJCQl3YXJuaW5nKCIlcywgcmV0dXJuZWQgJWQiLCBjb21tYW5kLCBjb2RlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWRfbGlzdChjb25zdCBjaGFyICpsaW5lKQoreworCXByaW50ZigiPyAlc1xuXG4iLCByZW1vdGVfcmVmKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkb19jb21tYW5kKHN0cnVjdCBzdHJidWYgKmxpbmUpCit7CisJY29uc3Qgc3RydWN0IGlucHV0X2NvbW1hbmRfZW50cnkgKnAgPSBpbnB1dF9jb21tYW5kX2xpc3Q7CisJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBiYXRjaGxpbmVzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnB1dF9jb21tYW5kX2VudHJ5ICpiYXRjaF9jbWQ7CisJLyoKKwkgKiBjb21tYW5kcyBjYW4gYmUgZ3JvdXBlZCB0b2dldGhlciBpbiBhIGJhdGNoLgorCSAqIEJhdGNoZXMgYXJlIGVuZGVkIGJ5IFxuLiBJZiBubyBiYXRjaCBpcyBhY3RpdmUgdGhlIHByb2dyYW0gZW5kcy4KKwkgKiBEdXJpbmcgYSBiYXRjaCBhbGwgbGluZXMgYXJlIGJ1ZmZlcmVkIGFuZCBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgZnVuY3Rpb24KKwkgKiB3aGVuIHRoZSBiYXRjaCBpcyB0ZXJtaW5hdGVkLgorCSAqLworCWlmIChsaW5lLT5sZW4gPT0gMCkgeworCQlpZiAoYmF0Y2hfY21kKSB7CisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwkJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJmJhdGNobGluZXMpCisJCQkJYmF0Y2hfY21kLT5mbihpdGVtLT5zdHJpbmcpOworCQkJdGVybWluYXRlX2JhdGNoKCk7CisJCQliYXRjaF9jbWQgPSBOVUxMOworCQkJc3RyaW5nX2xpc3RfY2xlYXIoJmJhdGNobGluZXMsIDApOworCQkJcmV0dXJuIDA7CS8qIGVuZCBvZiB0aGUgYmF0Y2gsIGNvbnRpbnVlIHJlYWRpbmcgb3RoZXIgY29tbWFuZHMuICovCisJCX0KKwkJcmV0dXJuIDE7CS8qIGVuZCBvZiBjb21tYW5kIHN0cmVhbSwgcXVpdCAqLworCX0KKwlpZiAoYmF0Y2hfY21kKSB7CisJCWlmICghc3RhcnRzX3dpdGgoYmF0Y2hfY21kLT5uYW1lLCBsaW5lLT5idWYpKQorCQkJZGllKCJBY3RpdmUgJXMgYmF0Y2ggaW50ZXJydXB0ZWQgYnkgJXMiLCBiYXRjaF9jbWQtPm5hbWUsIGxpbmUtPmJ1Zik7CisJCS8qIGJ1ZmZlciBiYXRjaCBsaW5lcyAqLworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmJhdGNobGluZXMsIGxpbmUtPmJ1Zik7CisJCXJldHVybiAwOworCX0KKworCWZvciAocCA9IGlucHV0X2NvbW1hbmRfbGlzdDsgcC0+bmFtZTsgcCsrKSB7CisJCWlmIChzdGFydHNfd2l0aChsaW5lLT5idWYsIHAtPm5hbWUpICYmIChzdHJsZW4ocC0+bmFtZSkgPT0gbGluZS0+bGVuIHx8CisJCQkJbGluZS0+YnVmW3N0cmxlbihwLT5uYW1lKV0gPT0gJyAnKSkgeworCQkJaWYgKHAtPmJhdGNoYWJsZSkgeworCQkJCWJhdGNoX2NtZCA9IHA7CisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZiYXRjaGxpbmVzLCBsaW5lLT5idWYpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmV0dXJuIHAtPmZuKGxpbmUtPmJ1Zik7CisJCX0KKwl9CisJZGllKCJVbmtub3duIGNvbW1hbmQgJyVzJ1xuIiwgbGluZS0+YnVmKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIHVybF9zYiA9IFNUUkJVRl9JTklULAorCQkJcHJpdmF0ZV9yZWZfc2IgPSBTVFJCVUZfSU5JVCwgbWFya3NmaWxlbmFtZV9zYiA9IFNUUkJVRl9JTklULAorCQkJbm90ZXNfcmVmX3NiID0gU1RSQlVGX0lOSVQ7CisJc3RhdGljIHN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwljb25zdCBjaGFyICp1cmxfaW47CisKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCXNldHVwX2dpdF9kaXJlY3RvcnkoKTsKKwlpZiAoYXJnYyA8IDIgfHwgYXJnYyA+IDMpIHsKKwkJdXNhZ2UoImdpdC1yZW1vdGUtc3ZuIDxyZW1vdGUtbmFtZT4gWzx1cmw+XSIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KGFyZ3ZbMV0pOworCXVybF9pbiA9IChhcmdjID09IDMpID8gYXJndlsyXSA6IHJlbW90ZS0+dXJsWzBdOworCisJaWYgKHN0YXJ0c193aXRoKHVybF9pbiwgImZpbGU6Ly8iKSkgeworCQlkdW1wX2Zyb21fZmlsZSA9IDE7CisJCXVybCA9IHVybF9kZWNvZGUodXJsX2luICsgc2l6ZW9mKCJmaWxlOi8vIiktMSk7CisJfSBlbHNlIHsKKwkJZHVtcF9mcm9tX2ZpbGUgPSAwOworCQllbmRfdXJsX3dpdGhfc2xhc2goJnVybF9zYiwgdXJsX2luKTsKKwkJdXJsID0gdXJsX3NiLmJ1ZjsKKwl9CisKKwlzdHJidWZfYWRkZigmcHJpdmF0ZV9yZWZfc2IsICJyZWZzL3N2bi8lcy9tYXN0ZXIiLCByZW1vdGUtPm5hbWUpOworCXByaXZhdGVfcmVmID0gcHJpdmF0ZV9yZWZfc2IuYnVmOworCisJc3RyYnVmX2FkZGYoJm5vdGVzX3JlZl9zYiwgInJlZnMvbm90ZXMvJXMvcmV2cyIsIHJlbW90ZS0+bmFtZSk7CisJbm90ZXNfcmVmID0gbm90ZXNfcmVmX3NiLmJ1ZjsKKworCXN0cmJ1Zl9hZGRmKCZtYXJrc2ZpbGVuYW1lX3NiLCAiJXMvaW5mby9mYXN0LWltcG9ydC9yZW1vdGUtc3ZuLyVzLm1hcmtzIiwKKwkJZ2V0X2dpdF9kaXIoKSwgcmVtb3RlLT5uYW1lKTsKKwltYXJrc2ZpbGVuYW1lID0gbWFya3NmaWxlbmFtZV9zYi5idWY7CisKKwl3aGlsZSAoMSkgeworCQlpZiAoc3RyYnVmX2dldGxpbmUoJmJ1Ziwgc3RkaW4sICdcbicpID09IEVPRikgeworCQkJaWYgKGZlcnJvcihzdGRpbikpCisJCQkJZGllKCJFcnJvciByZWFkaW5nIGNvbW1hbmQgc3RyZWFtIik7CisJCQllbHNlCisJCQkJZGllKCJVbmV4cGVjdGVkIGVuZCBvZiBjb21tYW5kIHN0cmVhbSIpOworCQl9CisJCWlmIChkb19jb21tYW5kKCZidWYpKQorCQkJYnJlYWs7CisJCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdXJsX3NiKTsKKwlzdHJidWZfcmVsZWFzZSgmcHJpdmF0ZV9yZWZfc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZub3Rlc19yZWZfc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZtYXJrc2ZpbGVuYW1lX3NiKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3JlbW90ZS5jIGIvcmVtb3RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxNjE1MwotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZS5jCkBAIC0wLDAgKzEsMjM4MCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibWVyZ2Vzb3J0LmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorCitlbnVtIG1hcF9kaXJlY3Rpb24geyBGUk9NX1NSQywgRlJPTV9EU1QgfTsKKworc3RhdGljIHN0cnVjdCByZWZzcGVjIHNfdGFnX3JlZnNwZWMgPSB7CisJMCwKKwkxLAorCTAsCisJMCwKKwkicmVmcy90YWdzLyoiLAorCSJyZWZzL3RhZ3MvKiIKK307CisKK2NvbnN0IHN0cnVjdCByZWZzcGVjICp0YWdfcmVmc3BlYyA9ICZzX3RhZ19yZWZzcGVjOworCitzdHJ1Y3QgY291bnRlZF9zdHJpbmcgeworCXNpemVfdCBsZW47CisJY29uc3QgY2hhciAqczsKK307CitzdHJ1Y3QgcmV3cml0ZSB7CisJY29uc3QgY2hhciAqYmFzZTsKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgY291bnRlZF9zdHJpbmcgKmluc3RlYWRfb2Y7CisJaW50IGluc3RlYWRfb2ZfbnI7CisJaW50IGluc3RlYWRfb2ZfYWxsb2M7Cit9Oworc3RydWN0IHJld3JpdGVzIHsKKwlzdHJ1Y3QgcmV3cml0ZSAqKnJld3JpdGU7CisJaW50IHJld3JpdGVfYWxsb2M7CisJaW50IHJld3JpdGVfbnI7Cit9OworCitzdGF0aWMgc3RydWN0IHJlbW90ZSAqKnJlbW90ZXM7CitzdGF0aWMgaW50IHJlbW90ZXNfYWxsb2M7CitzdGF0aWMgaW50IHJlbW90ZXNfbnI7CitzdGF0aWMgc3RydWN0IGhhc2htYXAgcmVtb3Rlc19oYXNoOworCitzdGF0aWMgc3RydWN0IGJyYW5jaCAqKmJyYW5jaGVzOworc3RhdGljIGludCBicmFuY2hlc19hbGxvYzsKK3N0YXRpYyBpbnQgYnJhbmNoZXNfbnI7CisKK3N0YXRpYyBzdHJ1Y3QgYnJhbmNoICpjdXJyZW50X2JyYW5jaDsKK3N0YXRpYyBjb25zdCBjaGFyICpwdXNocmVtb3RlX25hbWU7CisKK3N0YXRpYyBzdHJ1Y3QgcmV3cml0ZXMgcmV3cml0ZXM7CitzdGF0aWMgc3RydWN0IHJld3JpdGVzIHJld3JpdGVzX3B1c2g7CisKK3N0YXRpYyBpbnQgdmFsaWRfcmVtb3RlKGNvbnN0IHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlyZXR1cm4gKCEhcmVtb3RlLT51cmwpIHx8ICghIXJlbW90ZS0+Zm9yZWlnbl92Y3MpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYWxpYXNfdXJsKGNvbnN0IGNoYXIgKnVybCwgc3RydWN0IHJld3JpdGVzICpyKQoreworCWludCBpLCBqOworCXN0cnVjdCBjb3VudGVkX3N0cmluZyAqbG9uZ2VzdDsKKwlpbnQgbG9uZ2VzdF9pOworCisJbG9uZ2VzdCA9IE5VTEw7CisJbG9uZ2VzdF9pID0gLTE7CisJZm9yIChpID0gMDsgaSA8IHItPnJld3JpdGVfbnI7IGkrKykgeworCQlpZiAoIXItPnJld3JpdGVbaV0pCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IHItPnJld3JpdGVbaV0tPmluc3RlYWRfb2ZfbnI7IGorKykgeworCQkJaWYgKHN0YXJ0c193aXRoKHVybCwgci0+cmV3cml0ZVtpXS0+aW5zdGVhZF9vZltqXS5zKSAmJgorCQkJICAgICghbG9uZ2VzdCB8fAorCQkJICAgICBsb25nZXN0LT5sZW4gPCByLT5yZXdyaXRlW2ldLT5pbnN0ZWFkX29mW2pdLmxlbikpIHsKKwkJCQlsb25nZXN0ID0gJihyLT5yZXdyaXRlW2ldLT5pbnN0ZWFkX29mW2pdKTsKKwkJCQlsb25nZXN0X2kgPSBpOworCQkJfQorCQl9CisJfQorCWlmICghbG9uZ2VzdCkKKwkJcmV0dXJuIHVybDsKKworCXJldHVybiB4c3RyZm10KCIlcyVzIiwgci0+cmV3cml0ZVtsb25nZXN0X2ldLT5iYXNlLCB1cmwgKyBsb25nZXN0LT5sZW4pOworfQorCitzdGF0aWMgdm9pZCBhZGRfcHVzaF9yZWZzcGVjKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqcmVmKQoreworCUFMTE9DX0dST1cocmVtb3RlLT5wdXNoX3JlZnNwZWMsCisJCSAgIHJlbW90ZS0+cHVzaF9yZWZzcGVjX25yICsgMSwKKwkJICAgcmVtb3RlLT5wdXNoX3JlZnNwZWNfYWxsb2MpOworCXJlbW90ZS0+cHVzaF9yZWZzcGVjW3JlbW90ZS0+cHVzaF9yZWZzcGVjX25yKytdID0gcmVmOworfQorCitzdGF0aWMgdm9pZCBhZGRfZmV0Y2hfcmVmc3BlYyhzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnJlZikKK3sKKwlBTExPQ19HUk9XKHJlbW90ZS0+ZmV0Y2hfcmVmc3BlYywKKwkJICAgcmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yICsgMSwKKwkJICAgcmVtb3RlLT5mZXRjaF9yZWZzcGVjX2FsbG9jKTsKKwlyZW1vdGUtPmZldGNoX3JlZnNwZWNbcmVtb3RlLT5mZXRjaF9yZWZzcGVjX25yKytdID0gcmVmOworfQorCitzdGF0aWMgdm9pZCBhZGRfdXJsKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsKQoreworCUFMTE9DX0dST1cocmVtb3RlLT51cmwsIHJlbW90ZS0+dXJsX25yICsgMSwgcmVtb3RlLT51cmxfYWxsb2MpOworCXJlbW90ZS0+dXJsW3JlbW90ZS0+dXJsX25yKytdID0gdXJsOworfQorCitzdGF0aWMgdm9pZCBhZGRfcHVzaHVybChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnB1c2h1cmwpCit7CisJQUxMT0NfR1JPVyhyZW1vdGUtPnB1c2h1cmwsIHJlbW90ZS0+cHVzaHVybF9uciArIDEsIHJlbW90ZS0+cHVzaHVybF9hbGxvYyk7CisJcmVtb3RlLT5wdXNodXJsW3JlbW90ZS0+cHVzaHVybF9ucisrXSA9IHB1c2h1cmw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wdXNodXJsX2FsaWFzKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsKQoreworCWNvbnN0IGNoYXIgKnB1c2h1cmwgPSBhbGlhc191cmwodXJsLCAmcmV3cml0ZXNfcHVzaCk7CisJaWYgKHB1c2h1cmwgIT0gdXJsKQorCQlhZGRfcHVzaHVybChyZW1vdGUsIHB1c2h1cmwpOworfQorCitzdGF0aWMgdm9pZCBhZGRfdXJsX2FsaWFzKHN0cnVjdCByZW1vdGUgKnJlbW90ZSwgY29uc3QgY2hhciAqdXJsKQoreworCWFkZF91cmwocmVtb3RlLCBhbGlhc191cmwodXJsLCAmcmV3cml0ZXMpKTsKKwlhZGRfcHVzaHVybF9hbGlhcyhyZW1vdGUsIHVybCk7Cit9CisKK3N0cnVjdCByZW1vdGVzX2hhc2hfa2V5IHsKKwljb25zdCBjaGFyICpzdHI7CisJaW50IGxlbjsKK307CisKK3N0YXRpYyBpbnQgcmVtb3Rlc19oYXNoX2NtcChjb25zdCBzdHJ1Y3QgcmVtb3RlICphLCBjb25zdCBzdHJ1Y3QgcmVtb3RlICpiLCBjb25zdCBzdHJ1Y3QgcmVtb3Rlc19oYXNoX2tleSAqa2V5KQoreworCWlmIChrZXkpCisJCXJldHVybiBzdHJuY21wKGEtPm5hbWUsIGtleS0+c3RyLCBrZXktPmxlbikgfHwgYS0+bmFtZVtrZXktPmxlbl07CisJZWxzZQorCQlyZXR1cm4gc3RyY21wKGEtPm5hbWUsIGItPm5hbWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9yZW1vdGVzX2hhc2godm9pZCkKK3sKKwlpZiAoIXJlbW90ZXNfaGFzaC5jbXBmbikKKwkJaGFzaG1hcF9pbml0KCZyZW1vdGVzX2hhc2gsIChoYXNobWFwX2NtcF9mbilyZW1vdGVzX2hhc2hfY21wLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCByZW1vdGUgKm1ha2VfcmVtb3RlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJc3RydWN0IHJlbW90ZSAqcmV0LCAqcmVwbGFjZWQ7CisJc3RydWN0IHJlbW90ZXNfaGFzaF9rZXkgbG9va3VwOworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGxvb2t1cF9lbnRyeTsKKworCWlmICghbGVuKQorCQlsZW4gPSBzdHJsZW4obmFtZSk7CisKKwlpbml0X3JlbW90ZXNfaGFzaCgpOworCWxvb2t1cC5zdHIgPSBuYW1lOworCWxvb2t1cC5sZW4gPSBsZW47CisJaGFzaG1hcF9lbnRyeV9pbml0KCZsb29rdXBfZW50cnksIG1lbWhhc2gobmFtZSwgbGVuKSk7CisKKwlpZiAoKHJldCA9IGhhc2htYXBfZ2V0KCZyZW1vdGVzX2hhc2gsICZsb29rdXBfZW50cnksICZsb29rdXApKSAhPSBOVUxMKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHJlbW90ZSkpOworCXJldC0+cHJ1bmUgPSAtMTsgIC8qIHVuc3BlY2lmaWVkICovCisJQUxMT0NfR1JPVyhyZW1vdGVzLCByZW1vdGVzX25yICsgMSwgcmVtb3Rlc19hbGxvYyk7CisJcmVtb3Rlc1tyZW1vdGVzX25yKytdID0gcmV0OworCXJldC0+bmFtZSA9IHhzdHJuZHVwKG5hbWUsIGxlbik7CisKKwloYXNobWFwX2VudHJ5X2luaXQocmV0LCBsb29rdXBfZW50cnkuaGFzaCk7CisJcmVwbGFjZWQgPSBoYXNobWFwX3B1dCgmcmVtb3Rlc19oYXNoLCByZXQpOworCWFzc2VydChyZXBsYWNlZCA9PSBOVUxMKTsgIC8qIG5vIHByZXZpb3VzIGVudHJ5IG92ZXJ3cml0dGVuICovCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYWRkX21lcmdlKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlBTExPQ19HUk9XKGJyYW5jaC0+bWVyZ2VfbmFtZSwgYnJhbmNoLT5tZXJnZV9uciArIDEsCisJCSAgIGJyYW5jaC0+bWVyZ2VfYWxsb2MpOworCWJyYW5jaC0+bWVyZ2VfbmFtZVticmFuY2gtPm1lcmdlX25yKytdID0gbmFtZTsKK30KKworc3RhdGljIHN0cnVjdCBicmFuY2ggKm1ha2VfYnJhbmNoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJc3RydWN0IGJyYW5jaCAqcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGJyYW5jaGVzX25yOyBpKyspIHsKKwkJaWYgKGxlbiA/ICghc3RybmNtcChuYW1lLCBicmFuY2hlc1tpXS0+bmFtZSwgbGVuKSAmJgorCQkJICAgIWJyYW5jaGVzW2ldLT5uYW1lW2xlbl0pIDoKKwkJICAgICFzdHJjbXAobmFtZSwgYnJhbmNoZXNbaV0tPm5hbWUpKQorCQkJcmV0dXJuIGJyYW5jaGVzW2ldOworCX0KKworCUFMTE9DX0dST1coYnJhbmNoZXMsIGJyYW5jaGVzX25yICsgMSwgYnJhbmNoZXNfYWxsb2MpOworCXJldCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBicmFuY2gpKTsKKwlicmFuY2hlc1ticmFuY2hlc19ucisrXSA9IHJldDsKKwlpZiAobGVuKQorCQlyZXQtPm5hbWUgPSB4c3RybmR1cChuYW1lLCBsZW4pOworCWVsc2UKKwkJcmV0LT5uYW1lID0geHN0cmR1cChuYW1lKTsKKwlyZXQtPnJlZm5hbWUgPSB4c3RyZm10KCJyZWZzL2hlYWRzLyVzIiwgcmV0LT5uYW1lKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmV3cml0ZSAqbWFrZV9yZXdyaXRlKHN0cnVjdCByZXdyaXRlcyAqciwgY29uc3QgY2hhciAqYmFzZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgcmV3cml0ZSAqcmV0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHItPnJld3JpdGVfbnI7IGkrKykgeworCQlpZiAobGVuCisJCSAgICA/IChsZW4gPT0gci0+cmV3cml0ZVtpXS0+YmFzZWxlbiAmJgorCQkgICAgICAgIXN0cm5jbXAoYmFzZSwgci0+cmV3cml0ZVtpXS0+YmFzZSwgbGVuKSkKKwkJICAgIDogIXN0cmNtcChiYXNlLCByLT5yZXdyaXRlW2ldLT5iYXNlKSkKKwkJCXJldHVybiByLT5yZXdyaXRlW2ldOworCX0KKworCUFMTE9DX0dST1coci0+cmV3cml0ZSwgci0+cmV3cml0ZV9uciArIDEsIHItPnJld3JpdGVfYWxsb2MpOworCXJldCA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByZXdyaXRlKSk7CisJci0+cmV3cml0ZVtyLT5yZXdyaXRlX25yKytdID0gcmV0OworCWlmIChsZW4pIHsKKwkJcmV0LT5iYXNlID0geHN0cm5kdXAoYmFzZSwgbGVuKTsKKwkJcmV0LT5iYXNlbGVuID0gbGVuOworCX0KKwllbHNlIHsKKwkJcmV0LT5iYXNlID0geHN0cmR1cChiYXNlKTsKKwkJcmV0LT5iYXNlbGVuID0gc3RybGVuKGJhc2UpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhZGRfaW5zdGVhZF9vZihzdHJ1Y3QgcmV3cml0ZSAqcmV3cml0ZSwgY29uc3QgY2hhciAqaW5zdGVhZF9vZikKK3sKKwlBTExPQ19HUk9XKHJld3JpdGUtPmluc3RlYWRfb2YsIHJld3JpdGUtPmluc3RlYWRfb2ZfbnIgKyAxLCByZXdyaXRlLT5pbnN0ZWFkX29mX2FsbG9jKTsKKwlyZXdyaXRlLT5pbnN0ZWFkX29mW3Jld3JpdGUtPmluc3RlYWRfb2ZfbnJdLnMgPSBpbnN0ZWFkX29mOworCXJld3JpdGUtPmluc3RlYWRfb2ZbcmV3cml0ZS0+aW5zdGVhZF9vZl9ucl0ubGVuID0gc3RybGVuKGluc3RlYWRfb2YpOworCXJld3JpdGUtPmluc3RlYWRfb2ZfbnIrKzsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfc3BhY2VzKGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKGlzc3BhY2UoKnMpKQorCQlzKys7CisJcmV0dXJuIHM7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRfcmVtb3Rlc19maWxlKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCUZJTEUgKmYgPSBmb3BlbihnaXRfcGF0aCgicmVtb3Rlcy8lcyIsIHJlbW90ZS0+bmFtZSksICJyIik7CisKKwlpZiAoIWYpCisJCXJldHVybjsKKwlyZW1vdGUtPm9yaWdpbiA9IFJFTU9URV9SRU1PVEVTOworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmYnVmLCBmLCAnXG4nKSAhPSBFT0YpIHsKKwkJY29uc3QgY2hhciAqdjsKKworCQlzdHJidWZfcnRyaW0oJmJ1Zik7CisKKwkJaWYgKHNraXBfcHJlZml4KGJ1Zi5idWYsICJVUkw6IiwgJnYpKQorCQkJYWRkX3VybF9hbGlhcyhyZW1vdGUsIHhzdHJkdXAoc2tpcF9zcGFjZXModikpKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYnVmLmJ1ZiwgIlB1c2g6IiwgJnYpKQorCQkJYWRkX3B1c2hfcmVmc3BlYyhyZW1vdGUsIHhzdHJkdXAoc2tpcF9zcGFjZXModikpKTsKKwkJZWxzZSBpZiAoc2tpcF9wcmVmaXgoYnVmLmJ1ZiwgIlB1bGw6IiwgJnYpKQorCQkJYWRkX2ZldGNoX3JlZnNwZWMocmVtb3RlLCB4c3RyZHVwKHNraXBfc3BhY2VzKHYpKSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWZjbG9zZShmKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9icmFuY2hlc19maWxlKHN0cnVjdCByZW1vdGUgKnJlbW90ZSkKK3sKKwljaGFyICpmcmFnOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqZiA9IGZvcGVuKGdpdF9wYXRoKCJicmFuY2hlcy8lcyIsIHJlbW90ZS0+bmFtZSksICJyIik7CisKKwlpZiAoIWYpCisJCXJldHVybjsKKworCXN0cmJ1Zl9nZXRsaW5lKCZidWYsIGYsICdcbicpOworCWZjbG9zZShmKTsKKwlzdHJidWZfdHJpbSgmYnVmKTsKKwlpZiAoIWJ1Zi5sZW4pIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlyZW1vdGUtPm9yaWdpbiA9IFJFTU9URV9CUkFOQ0hFUzsKKworCS8qCisJICogVGhlIGJyYW5jaGVzIGZpbGUgd291bGQgaGF2ZSBVUkwgYW5kIG9wdGlvbmFsbHkKKwkgKiAjYnJhbmNoIHNwZWNpZmllZC4gIFRoZSAibWFzdGVyIiAob3Igc3BlY2lmaWVkKSBicmFuY2ggaXMKKwkgKiBmZXRjaGVkIGFuZCBzdG9yZWQgaW4gdGhlIGxvY2FsIGJyYW5jaCBtYXRjaGluZyB0aGUKKwkgKiByZW1vdGUgbmFtZS4KKwkgKi8KKwlmcmFnID0gc3RyY2hyKGJ1Zi5idWYsICcjJyk7CisJaWYgKGZyYWcpCisJCSooZnJhZysrKSA9ICdcMCc7CisJZWxzZQorCQlmcmFnID0gIm1hc3RlciI7CisKKwlhZGRfdXJsX2FsaWFzKHJlbW90ZSwgc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKSk7CisJYWRkX2ZldGNoX3JlZnNwZWMocmVtb3RlLCB4c3RyZm10KCJyZWZzL2hlYWRzLyVzOnJlZnMvaGVhZHMvJXMiLAorCQkJCQkgIGZyYWcsIHJlbW90ZS0+bmFtZSkpOworCisJLyoKKwkgKiBDb2dpdG8gY29tcGF0aWJsZSBwdXNoOiBwdXNoIGN1cnJlbnQgSEVBRCB0byByZW1vdGUgI2JyYW5jaAorCSAqIChtYXN0ZXIgaWYgbWlzc2luZykKKwkgKi8KKwlhZGRfcHVzaF9yZWZzcGVjKHJlbW90ZSwgeHN0cmZtdCgiSEVBRDpyZWZzL2hlYWRzLyVzIiwgZnJhZykpOworCXJlbW90ZS0+ZmV0Y2hfdGFncyA9IDE7IC8qIGFsd2F5cyBhdXRvLWZvbGxvdyAqLworfQorCitzdGF0aWMgaW50IGhhbmRsZV9jb25maWcoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpzdWJrZXk7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCXN0cnVjdCBicmFuY2ggKmJyYW5jaDsKKwlpZiAoc3RhcnRzX3dpdGgoa2V5LCAiYnJhbmNoLiIpKSB7CisJCW5hbWUgPSBrZXkgKyA3OworCQlzdWJrZXkgPSBzdHJyY2hyKG5hbWUsICcuJyk7CisJCWlmICghc3Via2V5KQorCQkJcmV0dXJuIDA7CisJCWJyYW5jaCA9IG1ha2VfYnJhbmNoKG5hbWUsIHN1YmtleSAtIG5hbWUpOworCQlpZiAoIXN0cmNtcChzdWJrZXksICIucmVtb3RlIikpIHsKKwkJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmYnJhbmNoLT5yZW1vdGVfbmFtZSwga2V5LCB2YWx1ZSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICIucHVzaHJlbW90ZSIpKSB7CisJCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmJyYW5jaC0+cHVzaHJlbW90ZV9uYW1lLCBrZXksIHZhbHVlKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5tZXJnZSIpKSB7CisJCQlpZiAoIXZhbHVlKQorCQkJCXJldHVybiBjb25maWdfZXJyb3Jfbm9uYm9vbChrZXkpOworCQkJYWRkX21lcmdlKGJyYW5jaCwgeHN0cmR1cCh2YWx1ZSkpOworCQl9CisJCXJldHVybiAwOworCX0KKwlpZiAoc3RhcnRzX3dpdGgoa2V5LCAidXJsLiIpKSB7CisJCXN0cnVjdCByZXdyaXRlICpyZXdyaXRlOworCQluYW1lID0ga2V5ICsgNDsKKwkJc3Via2V5ID0gc3RycmNocihuYW1lLCAnLicpOworCQlpZiAoIXN1YmtleSkKKwkJCXJldHVybiAwOworCQlpZiAoIXN0cmNtcChzdWJrZXksICIuaW5zdGVhZG9mIikpIHsKKwkJCXJld3JpdGUgPSBtYWtlX3Jld3JpdGUoJnJld3JpdGVzLCBuYW1lLCBzdWJrZXkgLSBuYW1lKTsKKwkJCWlmICghdmFsdWUpCisJCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGtleSk7CisJCQlhZGRfaW5zdGVhZF9vZihyZXdyaXRlLCB4c3RyZHVwKHZhbHVlKSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICIucHVzaGluc3RlYWRvZiIpKSB7CisJCQlyZXdyaXRlID0gbWFrZV9yZXdyaXRlKCZyZXdyaXRlc19wdXNoLCBuYW1lLCBzdWJrZXkgLSBuYW1lKTsKKwkJCWlmICghdmFsdWUpCisJCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKGtleSk7CisJCQlhZGRfaW5zdGVhZF9vZihyZXdyaXRlLCB4c3RyZHVwKHZhbHVlKSk7CisJCX0KKwl9CisKKwlpZiAoIXN0YXJ0c193aXRoKGtleSwgICJyZW1vdGUuIikpCisJCXJldHVybiAwOworCW5hbWUgPSBrZXkgKyA3OworCisJLyogSGFuZGxlIHJlbW90ZS4qIHZhcmlhYmxlcyAqLworCWlmICghc3RyY21wKG5hbWUsICJwdXNoZGVmYXVsdCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJnB1c2hyZW1vdGVfbmFtZSwga2V5LCB2YWx1ZSk7CisKKwkvKiBIYW5kbGUgcmVtb3RlLjxuYW1lPi4qIHZhcmlhYmxlcyAqLworCWlmICgqbmFtZSA9PSAnLycpIHsKKwkJd2FybmluZygiQ29uZmlnIHJlbW90ZSBzaG9ydGhhbmQgY2Fubm90IGJlZ2luIHdpdGggJy8nOiAlcyIsCisJCQluYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCXN1YmtleSA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKwlpZiAoIXN1YmtleSkKKwkJcmV0dXJuIDA7CisJcmVtb3RlID0gbWFrZV9yZW1vdGUobmFtZSwgc3Via2V5IC0gbmFtZSk7CisJcmVtb3RlLT5vcmlnaW4gPSBSRU1PVEVfQ09ORklHOworCWlmICghc3RyY21wKHN1YmtleSwgIi5taXJyb3IiKSkKKwkJcmVtb3RlLT5taXJyb3IgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICIuc2tpcGRlZmF1bHR1cGRhdGUiKSkKKwkJcmVtb3RlLT5za2lwX2RlZmF1bHRfdXBkYXRlID0gZ2l0X2NvbmZpZ19ib29sKGtleSwgdmFsdWUpOworCWVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnNraXBmZXRjaGFsbCIpKQorCQlyZW1vdGUtPnNraXBfZGVmYXVsdF91cGRhdGUgPSBnaXRfY29uZmlnX2Jvb2woa2V5LCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcChzdWJrZXksICIucHJ1bmUiKSkKKwkJcmVtb3RlLT5wcnVuZSA9IGdpdF9jb25maWdfYm9vbChrZXksIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi51cmwiKSkgeworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCQlhZGRfdXJsKHJlbW90ZSwgdik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5wdXNodXJsIikpIHsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZ2LCBrZXksIHZhbHVlKSkKKwkJCXJldHVybiAtMTsKKwkJYWRkX3B1c2h1cmwocmVtb3RlLCB2KTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnB1c2giKSkgeworCQljb25zdCBjaGFyICp2OworCQlpZiAoZ2l0X2NvbmZpZ19zdHJpbmcoJnYsIGtleSwgdmFsdWUpKQorCQkJcmV0dXJuIC0xOworCQlhZGRfcHVzaF9yZWZzcGVjKHJlbW90ZSwgdik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5mZXRjaCIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCWFkZF9mZXRjaF9yZWZzcGVjKHJlbW90ZSwgdik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi5yZWNlaXZlcGFjayIpKSB7CisJCWNvbnN0IGNoYXIgKnY7CisJCWlmIChnaXRfY29uZmlnX3N0cmluZygmdiwga2V5LCB2YWx1ZSkpCisJCQlyZXR1cm4gLTE7CisJCWlmICghcmVtb3RlLT5yZWNlaXZlcGFjaykKKwkJCXJlbW90ZS0+cmVjZWl2ZXBhY2sgPSB2OworCQllbHNlCisJCQllcnJvcigibW9yZSB0aGFuIG9uZSByZWNlaXZlcGFjayBnaXZlbiwgdXNpbmcgdGhlIGZpcnN0Iik7CisJfSBlbHNlIGlmICghc3RyY21wKHN1YmtleSwgIi51cGxvYWRwYWNrIikpIHsKKwkJY29uc3QgY2hhciAqdjsKKwkJaWYgKGdpdF9jb25maWdfc3RyaW5nKCZ2LCBrZXksIHZhbHVlKSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKCFyZW1vdGUtPnVwbG9hZHBhY2spCisJCQlyZW1vdGUtPnVwbG9hZHBhY2sgPSB2OworCQllbHNlCisJCQllcnJvcigibW9yZSB0aGFuIG9uZSB1cGxvYWRwYWNrIGdpdmVuLCB1c2luZyB0aGUgZmlyc3QiKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnRhZ29wdCIpKSB7CisJCWlmICghc3RyY21wKHZhbHVlLCAiLS1uby10YWdzIikpCisJCQlyZW1vdGUtPmZldGNoX3RhZ3MgPSAtMTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh2YWx1ZSwgIi0tdGFncyIpKQorCQkJcmVtb3RlLT5mZXRjaF90YWdzID0gMjsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnByb3h5IikpIHsKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKChjb25zdCBjaGFyICoqKSZyZW1vdGUtPmh0dHBfcHJveHksCisJCQkJCSBrZXksIHZhbHVlKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc3Via2V5LCAiLnZjcyIpKSB7CisJCXJldHVybiBnaXRfY29uZmlnX3N0cmluZygmcmVtb3RlLT5mb3JlaWduX3Zjcywga2V5LCB2YWx1ZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhbGlhc19hbGxfdXJscyh2b2lkKQoreworCWludCBpLCBqOworCWZvciAoaSA9IDA7IGkgPCByZW1vdGVzX25yOyBpKyspIHsKKwkJaW50IGFkZF9wdXNodXJsX2FsaWFzZXM7CisJCWlmICghcmVtb3Rlc1tpXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgcmVtb3Rlc1tpXS0+cHVzaHVybF9ucjsgaisrKSB7CisJCQlyZW1vdGVzW2ldLT5wdXNodXJsW2pdID0gYWxpYXNfdXJsKHJlbW90ZXNbaV0tPnB1c2h1cmxbal0sICZyZXdyaXRlcyk7CisJCX0KKwkJYWRkX3B1c2h1cmxfYWxpYXNlcyA9IHJlbW90ZXNbaV0tPnB1c2h1cmxfbnIgPT0gMDsKKwkJZm9yIChqID0gMDsgaiA8IHJlbW90ZXNbaV0tPnVybF9ucjsgaisrKSB7CisJCQlpZiAoYWRkX3B1c2h1cmxfYWxpYXNlcykKKwkJCQlhZGRfcHVzaHVybF9hbGlhcyhyZW1vdGVzW2ldLCByZW1vdGVzW2ldLT51cmxbal0pOworCQkJcmVtb3Rlc1tpXS0+dXJsW2pdID0gYWxpYXNfdXJsKHJlbW90ZXNbaV0tPnVybFtqXSwgJnJld3JpdGVzKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcmVhZF9jb25maWcodm9pZCkKK3sKKwlzdGF0aWMgaW50IGxvYWRlZDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNvbnN0IGNoYXIgKmhlYWRfcmVmOworCWludCBmbGFnOworCisJaWYgKGxvYWRlZCkKKwkJcmV0dXJuOworCWxvYWRlZCA9IDE7CisKKwljdXJyZW50X2JyYW5jaCA9IE5VTEw7CisJaGVhZF9yZWYgPSByZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCAwLCBzaGExLCAmZmxhZyk7CisJaWYgKGhlYWRfcmVmICYmIChmbGFnICYgUkVGX0lTU1lNUkVGKSAmJgorCSAgICBza2lwX3ByZWZpeChoZWFkX3JlZiwgInJlZnMvaGVhZHMvIiwgJmhlYWRfcmVmKSkgeworCQljdXJyZW50X2JyYW5jaCA9IG1ha2VfYnJhbmNoKGhlYWRfcmVmLCAwKTsKKwl9CisJZ2l0X2NvbmZpZyhoYW5kbGVfY29uZmlnLCBOVUxMKTsKKwlhbGlhc19hbGxfdXJscygpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBmcmVlcyBhIHJlZnNwZWMgYXJyYXkuCisgKiBXYXJuaW5nOiBjb2RlIHBhdGhzIHNob3VsZCBiZSBjaGVja2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBzcmMKKyAqICAgICAgICAgIGFuZCBkc3QgcG9pbnRlcnMgYXJlIGFsd2F5cyBmcmVlYWJsZSBwb2ludGVycyBhcyB3ZWxsCisgKiAgICAgICAgICBhcyB0aGUgcmVmc3BlYyBwb2ludGVyIGl0c2VsZi4KKyAqLworc3RhdGljIHZvaWQgZnJlZV9yZWZzcGVjcyhzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYywgaW50IG5yX3JlZnNwZWMpCit7CisJaW50IGk7CisKKwlpZiAoIXJlZnNwZWMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBucl9yZWZzcGVjOyBpKyspIHsKKwkJZnJlZShyZWZzcGVjW2ldLnNyYyk7CisJCWZyZWUocmVmc3BlY1tpXS5kc3QpOworCX0KKwlmcmVlKHJlZnNwZWMpOworfQorCitzdGF0aWMgc3RydWN0IHJlZnNwZWMgKnBhcnNlX3JlZnNwZWNfaW50ZXJuYWwoaW50IG5yX3JlZnNwZWMsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmV0Y2gsIGludCB2ZXJpZnkpCit7CisJaW50IGk7CisJc3RydWN0IHJlZnNwZWMgKnJzID0geGNhbGxvYyhucl9yZWZzcGVjLCBzaXplb2YoKnJzKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmVmc3BlYzsgaSsrKSB7CisJCXNpemVfdCBsbGVuOworCQlpbnQgaXNfZ2xvYjsKKwkJY29uc3QgY2hhciAqbGhzLCAqcmhzOworCQlpbnQgZmxhZ3M7CisKKwkJaXNfZ2xvYiA9IDA7CisKKwkJbGhzID0gcmVmc3BlY1tpXTsKKwkJaWYgKCpsaHMgPT0gJysnKSB7CisJCQlyc1tpXS5mb3JjZSA9IDE7CisJCQlsaHMrKzsKKwkJfQorCisJCXJocyA9IHN0cnJjaHIobGhzLCAnOicpOworCisJCS8qCisJCSAqIEJlZm9yZSBnb2luZyBvbiwgc3BlY2lhbCBjYXNlICI6IiAob3IgIis6IikgYXMgYSByZWZzcGVjCisJCSAqIGZvciBwdXNoaW5nIG1hdGNoaW5nIHJlZnMuCisJCSAqLworCQlpZiAoIWZldGNoICYmIHJocyA9PSBsaHMgJiYgcmhzWzFdID09ICdcMCcpIHsKKwkJCXJzW2ldLm1hdGNoaW5nID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJocykgeworCQkJc2l6ZV90IHJsZW4gPSBzdHJsZW4oKytyaHMpOworCQkJaXNfZ2xvYiA9ICgxIDw9IHJsZW4gJiYgc3RyY2hyKHJocywgJyonKSk7CisJCQlyc1tpXS5kc3QgPSB4c3RybmR1cChyaHMsIHJsZW4pOworCQl9CisKKwkJbGxlbiA9IChyaHMgPyAocmhzIC0gbGhzIC0gMSkgOiBzdHJsZW4obGhzKSk7CisJCWlmICgxIDw9IGxsZW4gJiYgbWVtY2hyKGxocywgJyonLCBsbGVuKSkgeworCQkJaWYgKChyaHMgJiYgIWlzX2dsb2IpIHx8ICghcmhzICYmIGZldGNoKSkKKwkJCQlnb3RvIGludmFsaWQ7CisJCQlpc19nbG9iID0gMTsKKwkJfSBlbHNlIGlmIChyaHMgJiYgaXNfZ2xvYikgeworCQkJZ290byBpbnZhbGlkOworCQl9CisKKwkJcnNbaV0ucGF0dGVybiA9IGlzX2dsb2I7CisJCXJzW2ldLnNyYyA9IHhzdHJuZHVwKGxocywgbGxlbik7CisJCWZsYWdzID0gUkVGTkFNRV9BTExPV19PTkVMRVZFTCB8IChpc19nbG9iID8gUkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4gOiAwKTsKKworCQlpZiAoZmV0Y2gpIHsKKwkJCXVuc2lnbmVkIGNoYXIgdW51c2VkWzQwXTsKKworCQkJLyogTEhTICovCisJCQlpZiAoISpyc1tpXS5zcmMpCisJCQkJOyAvKiBlbXB0eSBpcyBvazsgaXQgbWVhbnMgIkhFQUQiICovCisJCQllbHNlIGlmIChsbGVuID09IDQwICYmICFnZXRfc2hhMV9oZXgocnNbaV0uc3JjLCB1bnVzZWQpKQorCQkJCXJzW2ldLmV4YWN0X3NoYTEgPSAxOyAvKiBvayAqLworCQkJZWxzZSBpZiAoIWNoZWNrX3JlZm5hbWVfZm9ybWF0KHJzW2ldLnNyYywgZmxhZ3MpKQorCQkJCTsgLyogdmFsaWQgbG9va2luZyByZWYgaXMgb2sgKi8KKwkJCWVsc2UKKwkJCQlnb3RvIGludmFsaWQ7CisJCQkvKiBSSFMgKi8KKwkJCWlmICghcnNbaV0uZHN0KQorCQkJCTsgLyogbWlzc2luZyBpcyBvazsgaXQgaXMgdGhlIHNhbWUgYXMgZW1wdHkgKi8KKwkJCWVsc2UgaWYgKCEqcnNbaV0uZHN0KQorCQkJCTsgLyogZW1wdHkgaXMgb2s7IGl0IG1lYW5zICJkbyBub3Qgc3RvcmUiICovCisJCQllbHNlIGlmICghY2hlY2tfcmVmbmFtZV9mb3JtYXQocnNbaV0uZHN0LCBmbGFncykpCisJCQkJOyAvKiB2YWxpZCBsb29raW5nIHJlZiBpcyBvayAqLworCQkJZWxzZQorCQkJCWdvdG8gaW52YWxpZDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBMSFMKKwkJCSAqIC0gZW1wdHkgaXMgYWxsb3dlZDsgaXQgbWVhbnMgZGVsZXRlLgorCQkJICogLSB3aGVuIHdpbGRjYXJkZWQsIGl0IG11c3QgYmUgYSB2YWxpZCBsb29raW5nIHJlZi4KKwkJCSAqIC0gb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIGFuIGV4dGVuZGVkIFNIQS0xLCBidXQKKwkJCSAqICAgdGhlcmUgaXMgbm8gZXhpc3Rpbmcgd2F5IHRvIHZhbGlkYXRlIHRoaXMuCisJCQkgKi8KKwkJCWlmICghKnJzW2ldLnNyYykKKwkJCQk7IC8qIGVtcHR5IGlzIG9rICovCisJCQllbHNlIGlmIChpc19nbG9iKSB7CisJCQkJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJzW2ldLnNyYywgZmxhZ3MpKQorCQkJCQlnb3RvIGludmFsaWQ7CisJCQl9CisJCQllbHNlCisJCQkJOyAvKiBhbnl0aGluZyBnb2VzLCBmb3Igbm93ICovCisJCQkvKgorCQkJICogUkhTCisJCQkgKiAtIG1pc3NpbmcgaXMgYWxsb3dlZCwgYnV0IExIUyB0aGVuIG11c3QgYmUgYQorCQkJICogICB2YWxpZCBsb29raW5nIHJlZi4KKwkJCSAqIC0gZW1wdHkgaXMgbm90IGFsbG93ZWQuCisJCQkgKiAtIG90aGVyd2lzZSBpdCBtdXN0IGJlIGEgdmFsaWQgbG9va2luZyByZWYuCisJCQkgKi8KKwkJCWlmICghcnNbaV0uZHN0KSB7CisJCQkJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJzW2ldLnNyYywgZmxhZ3MpKQorCQkJCQlnb3RvIGludmFsaWQ7CisJCQl9IGVsc2UgaWYgKCEqcnNbaV0uZHN0KSB7CisJCQkJZ290byBpbnZhbGlkOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocnNbaV0uZHN0LCBmbGFncykpCisJCQkJCWdvdG8gaW52YWxpZDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gcnM7CisKKyBpbnZhbGlkOgorCWlmICh2ZXJpZnkpIHsKKwkJLyoKKwkJICogbnJfcmVmc3BlYyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBpIG11c3QgYmUgdmFsaWQKKwkJICogc2luY2UgaXQgaXMgb25seSBwb3NzaWJsZSB0byByZWFjaCB0aGlzIHBvaW50IGZyb20gd2l0aGluCisJCSAqIHRoZSBmb3IgbG9vcCBhYm92ZS4KKwkJICovCisJCWZyZWVfcmVmc3BlY3MocnMsIGkrMSk7CisJCXJldHVybiBOVUxMOworCX0KKwlkaWUoIkludmFsaWQgcmVmc3BlYyAnJXMnIiwgcmVmc3BlY1tpXSk7Cit9CisKK2ludCB2YWxpZF9mZXRjaF9yZWZzcGVjKGNvbnN0IGNoYXIgKmZldGNoX3JlZnNwZWNfc3RyKQoreworCXN0cnVjdCByZWZzcGVjICpyZWZzcGVjOworCisJcmVmc3BlYyA9IHBhcnNlX3JlZnNwZWNfaW50ZXJuYWwoMSwgJmZldGNoX3JlZnNwZWNfc3RyLCAxLCAxKTsKKwlmcmVlX3JlZnNwZWNzKHJlZnNwZWMsIDEpOworCXJldHVybiAhIXJlZnNwZWM7Cit9CisKK3N0cnVjdCByZWZzcGVjICpwYXJzZV9mZXRjaF9yZWZzcGVjKGludCBucl9yZWZzcGVjLCBjb25zdCBjaGFyICoqcmVmc3BlYykKK3sKKwlyZXR1cm4gcGFyc2VfcmVmc3BlY19pbnRlcm5hbChucl9yZWZzcGVjLCByZWZzcGVjLCAxLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCByZWZzcGVjICpwYXJzZV9wdXNoX3JlZnNwZWMoaW50IG5yX3JlZnNwZWMsIGNvbnN0IGNoYXIgKipyZWZzcGVjKQoreworCXJldHVybiBwYXJzZV9yZWZzcGVjX2ludGVybmFsKG5yX3JlZnNwZWMsIHJlZnNwZWMsIDAsIDApOworfQorCit2b2lkIGZyZWVfcmVmc3BlYyhpbnQgbnJfcmVmc3BlYywgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5yX3JlZnNwZWM7IGkrKykgeworCQlmcmVlKHJlZnNwZWNbaV0uc3JjKTsKKwkJZnJlZShyZWZzcGVjW2ldLmRzdCk7CisJfQorCWZyZWUocmVmc3BlYyk7Cit9CisKK3N0YXRpYyBpbnQgdmFsaWRfcmVtb3RlX25pY2soY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpZiAoIW5hbWVbMF0gfHwgaXNfZG90X29yX2RvdGRvdChuYW1lKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICFzdHJjaHIobmFtZSwgJy8nKTsgLyogbm8gc2xhc2ggKi8KK30KKworY29uc3QgY2hhciAqcmVtb3RlX2Zvcl9icmFuY2goc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBpbnQgKmV4cGxpY2l0KQoreworCWlmIChicmFuY2ggJiYgYnJhbmNoLT5yZW1vdGVfbmFtZSkgeworCQlpZiAoZXhwbGljaXQpCisJCQkqZXhwbGljaXQgPSAxOworCQlyZXR1cm4gYnJhbmNoLT5yZW1vdGVfbmFtZTsKKwl9CisJaWYgKGV4cGxpY2l0KQorCQkqZXhwbGljaXQgPSAwOworCXJldHVybiAib3JpZ2luIjsKK30KKworY29uc3QgY2hhciAqcHVzaHJlbW90ZV9mb3JfYnJhbmNoKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgaW50ICpleHBsaWNpdCkKK3sKKwlpZiAoYnJhbmNoICYmIGJyYW5jaC0+cHVzaHJlbW90ZV9uYW1lKSB7CisJCWlmIChleHBsaWNpdCkKKwkJCSpleHBsaWNpdCA9IDE7CisJCXJldHVybiBicmFuY2gtPnB1c2hyZW1vdGVfbmFtZTsKKwl9CisJaWYgKHB1c2hyZW1vdGVfbmFtZSkgeworCQlpZiAoZXhwbGljaXQpCisJCQkqZXhwbGljaXQgPSAxOworCQlyZXR1cm4gcHVzaHJlbW90ZV9uYW1lOworCX0KKwlyZXR1cm4gcmVtb3RlX2Zvcl9icmFuY2goYnJhbmNoLCBleHBsaWNpdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVtb3RlICpyZW1vdGVfZ2V0XzEoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICBjb25zdCBjaGFyICooKmdldF9kZWZhdWx0KShzdHJ1Y3QgYnJhbmNoICosIGludCAqKSkKK3sKKwlzdHJ1Y3QgcmVtb3RlICpyZXQ7CisJaW50IG5hbWVfZ2l2ZW4gPSAwOworCisJcmVhZF9jb25maWcoKTsKKworCWlmIChuYW1lKQorCQluYW1lX2dpdmVuID0gMTsKKwllbHNlCisJCW5hbWUgPSBnZXRfZGVmYXVsdChjdXJyZW50X2JyYW5jaCwgJm5hbWVfZ2l2ZW4pOworCisJcmV0ID0gbWFrZV9yZW1vdGUobmFtZSwgMCk7CisJaWYgKHZhbGlkX3JlbW90ZV9uaWNrKG5hbWUpKSB7CisJCWlmICghdmFsaWRfcmVtb3RlKHJldCkpCisJCQlyZWFkX3JlbW90ZXNfZmlsZShyZXQpOworCQlpZiAoIXZhbGlkX3JlbW90ZShyZXQpKQorCQkJcmVhZF9icmFuY2hlc19maWxlKHJldCk7CisJfQorCWlmIChuYW1lX2dpdmVuICYmICF2YWxpZF9yZW1vdGUocmV0KSkKKwkJYWRkX3VybF9hbGlhcyhyZXQsIG5hbWUpOworCWlmICghdmFsaWRfcmVtb3RlKHJldCkpCisJCXJldHVybiBOVUxMOworCXJldC0+ZmV0Y2ggPSBwYXJzZV9mZXRjaF9yZWZzcGVjKHJldC0+ZmV0Y2hfcmVmc3BlY19uciwgcmV0LT5mZXRjaF9yZWZzcGVjKTsKKwlyZXQtPnB1c2ggPSBwYXJzZV9wdXNoX3JlZnNwZWMocmV0LT5wdXNoX3JlZnNwZWNfbnIsIHJldC0+cHVzaF9yZWZzcGVjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcmVtb3RlICpyZW1vdGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIHJlbW90ZV9nZXRfMShuYW1lLCByZW1vdGVfZm9yX2JyYW5jaCk7Cit9CisKK3N0cnVjdCByZW1vdGUgKnB1c2hyZW1vdGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIHJlbW90ZV9nZXRfMShuYW1lLCBwdXNocmVtb3RlX2Zvcl9icmFuY2gpOworfQorCitpbnQgcmVtb3RlX2lzX2NvbmZpZ3VyZWQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcmVtb3Rlc19oYXNoX2tleSBsb29rdXA7CisJc3RydWN0IGhhc2htYXBfZW50cnkgbG9va3VwX2VudHJ5OworCXJlYWRfY29uZmlnKCk7CisKKwlpbml0X3JlbW90ZXNfaGFzaCgpOworCWxvb2t1cC5zdHIgPSBuYW1lOworCWxvb2t1cC5sZW4gPSBzdHJsZW4obmFtZSk7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZsb29rdXBfZW50cnksIG1lbWhhc2gobmFtZSwgbG9va3VwLmxlbikpOworCisJcmV0dXJuIGhhc2htYXBfZ2V0KCZyZW1vdGVzX2hhc2gsICZsb29rdXBfZW50cnksICZsb29rdXApICE9IE5VTEw7Cit9CisKK2ludCBmb3JfZWFjaF9yZW1vdGUoZWFjaF9yZW1vdGVfZm4gZm4sIHZvaWQgKnByaXYpCit7CisJaW50IGksIHJlc3VsdCA9IDA7CisJcmVhZF9jb25maWcoKTsKKwlmb3IgKGkgPSAwOyBpIDwgcmVtb3Rlc19uciAmJiAhcmVzdWx0OyBpKyspIHsKKwkJc3RydWN0IHJlbW90ZSAqciA9IHJlbW90ZXNbaV07CisJCWlmICghcikKKwkJCWNvbnRpbnVlOworCQlpZiAoIXItPmZldGNoKQorCQkJci0+ZmV0Y2ggPSBwYXJzZV9mZXRjaF9yZWZzcGVjKHItPmZldGNoX3JlZnNwZWNfbnIsCisJCQkJCQkgICAgICAgci0+ZmV0Y2hfcmVmc3BlYyk7CisJCWlmICghci0+cHVzaCkKKwkJCXItPnB1c2ggPSBwYXJzZV9wdXNoX3JlZnNwZWMoci0+cHVzaF9yZWZzcGVjX25yLAorCQkJCQkJICAgICByLT5wdXNoX3JlZnNwZWMpOworCQlyZXN1bHQgPSBmbihyLCBwcml2KTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2R1cGxpY2F0ZShzdHJ1Y3QgcmVmICpyZWYxLCBzdHJ1Y3QgcmVmICpyZWYyKQoreworCWlmIChzdHJjbXAocmVmMS0+bmFtZSwgcmVmMi0+bmFtZSkpIHsKKwkJaWYgKHJlZjEtPmZldGNoX2hlYWRfc3RhdHVzICE9IEZFVENIX0hFQURfSUdOT1JFICYmCisJCSAgICByZWYyLT5mZXRjaF9oZWFkX3N0YXR1cyAhPSBGRVRDSF9IRUFEX0lHTk9SRSkgeworCQkJZGllKF8oIkNhbm5vdCBmZXRjaCBib3RoICVzIGFuZCAlcyB0byAlcyIpLAorCQkJICAgIHJlZjEtPm5hbWUsIHJlZjItPm5hbWUsIHJlZjItPnBlZXJfcmVmLT5uYW1lKTsKKwkJfSBlbHNlIGlmIChyZWYxLT5mZXRjaF9oZWFkX3N0YXR1cyAhPSBGRVRDSF9IRUFEX0lHTk9SRSAmJgorCQkJICAgcmVmMi0+ZmV0Y2hfaGVhZF9zdGF0dXMgPT0gRkVUQ0hfSEVBRF9JR05PUkUpIHsKKwkJCXdhcm5pbmcoXygiJXMgdXN1YWxseSB0cmFja3MgJXMsIG5vdCAlcyIpLAorCQkJCXJlZjItPnBlZXJfcmVmLT5uYW1lLCByZWYyLT5uYW1lLCByZWYxLT5uYW1lKTsKKwkJfSBlbHNlIGlmIChyZWYxLT5mZXRjaF9oZWFkX3N0YXR1cyA9PSBGRVRDSF9IRUFEX0lHTk9SRSAmJgorCQkJICAgcmVmMi0+ZmV0Y2hfaGVhZF9zdGF0dXMgPT0gRkVUQ0hfSEVBRF9JR05PUkUpIHsKKwkJCWRpZShfKCIlcyB0cmFja3MgYm90aCAlcyBhbmQgJXMiKSwKKwkJCSAgICByZWYyLT5wZWVyX3JlZi0+bmFtZSwgcmVmMS0+bmFtZSwgcmVmMi0+bmFtZSk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVGhpcyBsYXN0IHBvc3NpYmlsaXR5IGRvZXNuJ3Qgb2NjdXIgYmVjYXVzZQorCQkJICogRkVUQ0hfSEVBRF9JR05PUkUgZW50cmllcyBhbHdheXMgYXBwZWFyIGF0CisJCQkgKiB0aGUgZW5kIG9mIHRoZSBsaXN0LgorCQkJICovCisJCQlkaWUoXygiSW50ZXJuYWwgZXJyb3IiKSk7CisJCX0KKwl9CisJZnJlZShyZWYyLT5wZWVyX3JlZik7CisJZnJlZShyZWYyKTsKK30KKworc3RydWN0IHJlZiAqcmVmX3JlbW92ZV9kdXBsaWNhdGVzKHN0cnVjdCByZWYgKnJlZl9tYXApCit7CisJc3RydWN0IHN0cmluZ19saXN0IHJlZnMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCByZWYgKnJldHZhbCA9IE5VTEw7CisJc3RydWN0IHJlZiAqKnAgPSAmcmV0dmFsOworCisJd2hpbGUgKHJlZl9tYXApIHsKKwkJc3RydWN0IHJlZiAqcmVmID0gcmVmX21hcDsKKworCQlyZWZfbWFwID0gcmVmX21hcC0+bmV4dDsKKwkJcmVmLT5uZXh0ID0gTlVMTDsKKworCQlpZiAoIXJlZi0+cGVlcl9yZWYpIHsKKwkJCSpwID0gcmVmOworCQkJcCA9ICZyZWYtPm5leHQ7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9CisJCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZyZWZzLCByZWYtPnBlZXJfcmVmLT5uYW1lKTsKKworCQkJaWYgKGl0ZW0tPnV0aWwpIHsKKwkJCQkvKiBFbnRyeSBhbHJlYWR5IGV4aXN0ZWQgKi8KKwkJCQloYW5kbGVfZHVwbGljYXRlKChzdHJ1Y3QgcmVmICopaXRlbS0+dXRpbCwgcmVmKTsKKwkJCX0gZWxzZSB7CisJCQkJKnAgPSByZWY7CisJCQkJcCA9ICZyZWYtPm5leHQ7CisJCQkJaXRlbS0+dXRpbCA9IHJlZjsKKwkJCX0KKwkJfQorCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZyZWZzLCAwKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgcmVtb3RlX2hhc191cmwoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICp1cmwpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJlbW90ZS0+dXJsX25yOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAocmVtb3RlLT51cmxbaV0sIHVybCkpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfbmFtZV93aXRoX3BhdHRlcm4oY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIGNvbnN0IGNoYXIgKnZhbHVlLCBjaGFyICoqcmVzdWx0KQoreworCWNvbnN0IGNoYXIgKmtzdGFyID0gc3RyY2hyKGtleSwgJyonKTsKKwlzaXplX3Qga2xlbjsKKwlzaXplX3Qga3N1ZmZpeGxlbjsKKwlzaXplX3QgbmFtZWxlbjsKKwlpbnQgcmV0OworCWlmICgha3N0YXIpCisJCWRpZSgiS2V5ICclcycgb2YgcGF0dGVybiBoYWQgbm8gJyonIiwga2V5KTsKKwlrbGVuID0ga3N0YXIgLSBrZXk7CisJa3N1ZmZpeGxlbiA9IHN0cmxlbihrc3RhciArIDEpOworCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJcmV0ID0gIXN0cm5jbXAobmFtZSwga2V5LCBrbGVuKSAmJiBuYW1lbGVuID49IGtsZW4gKyBrc3VmZml4bGVuICYmCisJCSFtZW1jbXAobmFtZSArIG5hbWVsZW4gLSBrc3VmZml4bGVuLCBrc3RhciArIDEsIGtzdWZmaXhsZW4pOworCWlmIChyZXQgJiYgdmFsdWUpIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICp2c3RhciA9IHN0cmNocih2YWx1ZSwgJyonKTsKKwkJaWYgKCF2c3RhcikKKwkJCWRpZSgiVmFsdWUgJyVzJyBvZiBwYXR0ZXJuIGhhcyBubyAnKiciLCB2YWx1ZSk7CisJCXN0cmJ1Zl9hZGQoJnNiLCB2YWx1ZSwgdnN0YXIgLSB2YWx1ZSk7CisJCXN0cmJ1Zl9hZGQoJnNiLCBuYW1lICsga2xlbiwgbmFtZWxlbiAtIGtsZW4gLSBrc3VmZml4bGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmc2IsIHZzdGFyICsgMSk7CisJCSpyZXN1bHQgPSBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHF1ZXJ5X3JlZnNwZWNzX211bHRpcGxlKHN0cnVjdCByZWZzcGVjICpyZWZzLCBpbnQgcmVmX2NvdW50LCBzdHJ1Y3QgcmVmc3BlYyAqcXVlcnksIHN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzdWx0cykKK3sKKwlpbnQgaTsKKwlpbnQgZmluZF9zcmMgPSAhcXVlcnktPnNyYzsKKworCWlmIChmaW5kX3NyYyAmJiAhcXVlcnktPmRzdCkKKwkJZXJyb3IoInF1ZXJ5X3JlZnNwZWNzX211bHRpcGxlOiBuZWVkIGVpdGhlciBzcmMgb3IgZHN0Iik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVmX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMgPSAmcmVmc1tpXTsKKwkJY29uc3QgY2hhciAqa2V5ID0gZmluZF9zcmMgPyByZWZzcGVjLT5kc3QgOiByZWZzcGVjLT5zcmM7CisJCWNvbnN0IGNoYXIgKnZhbHVlID0gZmluZF9zcmMgPyByZWZzcGVjLT5zcmMgOiByZWZzcGVjLT5kc3Q7CisJCWNvbnN0IGNoYXIgKm5lZWRsZSA9IGZpbmRfc3JjID8gcXVlcnktPmRzdCA6IHF1ZXJ5LT5zcmM7CisJCWNoYXIgKipyZXN1bHQgPSBmaW5kX3NyYyA/ICZxdWVyeS0+c3JjIDogJnF1ZXJ5LT5kc3Q7CisKKwkJaWYgKCFyZWZzcGVjLT5kc3QpCisJCQljb250aW51ZTsKKwkJaWYgKHJlZnNwZWMtPnBhdHRlcm4pIHsKKwkJCWlmIChtYXRjaF9uYW1lX3dpdGhfcGF0dGVybihrZXksIG5lZWRsZSwgdmFsdWUsIHJlc3VsdCkpCisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKHJlc3VsdHMsICpyZXN1bHQpOworCQl9IGVsc2UgaWYgKCFzdHJjbXAobmVlZGxlLCBrZXkpKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQocmVzdWx0cywgdmFsdWUpOworCQl9CisJfQorfQorCitpbnQgcXVlcnlfcmVmc3BlY3Moc3RydWN0IHJlZnNwZWMgKnJlZnMsIGludCByZWZfY291bnQsIHN0cnVjdCByZWZzcGVjICpxdWVyeSkKK3sKKwlpbnQgaTsKKwlpbnQgZmluZF9zcmMgPSAhcXVlcnktPnNyYzsKKwljb25zdCBjaGFyICpuZWVkbGUgPSBmaW5kX3NyYyA/IHF1ZXJ5LT5kc3QgOiBxdWVyeS0+c3JjOworCWNoYXIgKipyZXN1bHQgPSBmaW5kX3NyYyA/ICZxdWVyeS0+c3JjIDogJnF1ZXJ5LT5kc3Q7CisKKwlpZiAoZmluZF9zcmMgJiYgIXF1ZXJ5LT5kc3QpCisJCXJldHVybiBlcnJvcigicXVlcnlfcmVmc3BlY3M6IG5lZWQgZWl0aGVyIHNyYyBvciBkc3QiKTsKKworCWZvciAoaSA9IDA7IGkgPCByZWZfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYyA9ICZyZWZzW2ldOworCQljb25zdCBjaGFyICprZXkgPSBmaW5kX3NyYyA/IHJlZnNwZWMtPmRzdCA6IHJlZnNwZWMtPnNyYzsKKwkJY29uc3QgY2hhciAqdmFsdWUgPSBmaW5kX3NyYyA/IHJlZnNwZWMtPnNyYyA6IHJlZnNwZWMtPmRzdDsKKworCQlpZiAoIXJlZnNwZWMtPmRzdCkKKwkJCWNvbnRpbnVlOworCQlpZiAocmVmc3BlYy0+cGF0dGVybikgeworCQkJaWYgKG1hdGNoX25hbWVfd2l0aF9wYXR0ZXJuKGtleSwgbmVlZGxlLCB2YWx1ZSwgcmVzdWx0KSkgeworCQkJCXF1ZXJ5LT5mb3JjZSA9IHJlZnNwZWMtPmZvcmNlOworCQkJCXJldHVybiAwOworCQkJfQorCQl9IGVsc2UgaWYgKCFzdHJjbXAobmVlZGxlLCBrZXkpKSB7CisJCQkqcmVzdWx0ID0geHN0cmR1cCh2YWx1ZSk7CisJCQlxdWVyeS0+Zm9yY2UgPSByZWZzcGVjLT5mb3JjZTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworY2hhciAqYXBwbHlfcmVmc3BlY3Moc3RydWN0IHJlZnNwZWMgKnJlZnNwZWNzLCBpbnQgbnJfcmVmc3BlYywKKwkJICAgICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByZWZzcGVjIHF1ZXJ5OworCisJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHN0cnVjdCByZWZzcGVjKSk7CisJcXVlcnkuc3JjID0gKGNoYXIgKiluYW1lOworCisJaWYgKHF1ZXJ5X3JlZnNwZWNzKHJlZnNwZWNzLCBucl9yZWZzcGVjLCAmcXVlcnkpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBxdWVyeS5kc3Q7Cit9CisKK2ludCByZW1vdGVfZmluZF90cmFja2luZyhzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCByZWZzcGVjICpyZWZzcGVjKQoreworCXJldHVybiBxdWVyeV9yZWZzcGVjcyhyZW1vdGUtPmZldGNoLCByZW1vdGUtPmZldGNoX3JlZnNwZWNfbnIsIHJlZnNwZWMpOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqYWxsb2NfcmVmX3dpdGhfcHJlZml4KGNvbnN0IGNoYXIgKnByZWZpeCwgc2l6ZV90IHByZWZpeGxlbiwKKwkJY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzaXplX3QgbGVuID0gc3RybGVuKG5hbWUpOworCXN0cnVjdCByZWYgKnJlZiA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByZWYpICsgcHJlZml4bGVuICsgbGVuICsgMSk7CisJbWVtY3B5KHJlZi0+bmFtZSwgcHJlZml4LCBwcmVmaXhsZW4pOworCW1lbWNweShyZWYtPm5hbWUgKyBwcmVmaXhsZW4sIG5hbWUsIGxlbik7CisJcmV0dXJuIHJlZjsKK30KKworc3RydWN0IHJlZiAqYWxsb2NfcmVmKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGFsbG9jX3JlZl93aXRoX3ByZWZpeCgiIiwgMCwgbmFtZSk7Cit9CisKK3N0cnVjdCByZWYgKmNvcHlfcmVmKGNvbnN0IHN0cnVjdCByZWYgKnJlZikKK3sKKwlzdHJ1Y3QgcmVmICpjcHk7CisJc2l6ZV90IGxlbjsKKwlpZiAoIXJlZikKKwkJcmV0dXJuIE5VTEw7CisJbGVuID0gc3RybGVuKHJlZi0+bmFtZSk7CisJY3B5ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHJlZikgKyBsZW4gKyAxKTsKKwltZW1jcHkoY3B5LCByZWYsIHNpemVvZihzdHJ1Y3QgcmVmKSArIGxlbiArIDEpOworCWNweS0+bmV4dCA9IE5VTEw7CisJY3B5LT5zeW1yZWYgPSB4c3RyZHVwX29yX251bGwocmVmLT5zeW1yZWYpOworCWNweS0+cmVtb3RlX3N0YXR1cyA9IHhzdHJkdXBfb3JfbnVsbChyZWYtPnJlbW90ZV9zdGF0dXMpOworCWNweS0+cGVlcl9yZWYgPSBjb3B5X3JlZihyZWYtPnBlZXJfcmVmKTsKKwlyZXR1cm4gY3B5OworfQorCitzdHJ1Y3QgcmVmICpjb3B5X3JlZl9saXN0KGNvbnN0IHN0cnVjdCByZWYgKnJlZikKK3sKKwlzdHJ1Y3QgcmVmICpyZXQgPSBOVUxMOworCXN0cnVjdCByZWYgKip0YWlsID0gJnJldDsKKwl3aGlsZSAocmVmKSB7CisJCSp0YWlsID0gY29weV9yZWYocmVmKTsKKwkJcmVmID0gcmVmLT5uZXh0OworCQl0YWlsID0gJigoKnRhaWwpLT5uZXh0KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9yZWYoc3RydWN0IHJlZiAqcmVmKQoreworCWlmICghcmVmKQorCQlyZXR1cm47CisJZnJlZV9yZWYocmVmLT5wZWVyX3JlZik7CisJZnJlZShyZWYtPnJlbW90ZV9zdGF0dXMpOworCWZyZWUocmVmLT5zeW1yZWYpOworCWZyZWUocmVmKTsKK30KKwordm9pZCBmcmVlX3JlZnMoc3RydWN0IHJlZiAqcmVmKQoreworCXN0cnVjdCByZWYgKm5leHQ7CisJd2hpbGUgKHJlZikgeworCQluZXh0ID0gcmVmLT5uZXh0OworCQlmcmVlX3JlZihyZWYpOworCQlyZWYgPSBuZXh0OworCX0KK30KKworaW50IHJlZl9jb21wYXJlX25hbWUoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQoreworCWNvbnN0IHN0cnVjdCByZWYgKmEgPSB2YSwgKmIgPSB2YjsKKwlyZXR1cm4gc3RyY21wKGEtPm5hbWUsIGItPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCAqcmVmX2xpc3RfZ2V0X25leHQoY29uc3Qgdm9pZCAqYSkKK3sKKwlyZXR1cm4gKChjb25zdCBzdHJ1Y3QgcmVmICopYSktPm5leHQ7Cit9CisKK3N0YXRpYyB2b2lkIHJlZl9saXN0X3NldF9uZXh0KHZvaWQgKmEsIHZvaWQgKm5leHQpCit7CisJKChzdHJ1Y3QgcmVmICopYSktPm5leHQgPSBuZXh0OworfQorCit2b2lkIHNvcnRfcmVmX2xpc3Qoc3RydWN0IHJlZiAqKmwsIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworCSpsID0gbGxpc3RfbWVyZ2Vzb3J0KCpsLCByZWZfbGlzdF9nZXRfbmV4dCwgcmVmX2xpc3Rfc2V0X25leHQsIGNtcCk7Cit9CisKK2ludCBjb3VudF9yZWZzcGVjX21hdGNoKGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQlzdHJ1Y3QgcmVmICpyZWZzLAorCQkJc3RydWN0IHJlZiAqKm1hdGNoZWRfcmVmKQoreworCWludCBwYXRsZW4gPSBzdHJsZW4ocGF0dGVybik7CisJc3RydWN0IHJlZiAqbWF0Y2hlZF93ZWFrID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICptYXRjaGVkID0gTlVMTDsKKwlpbnQgd2Vha19tYXRjaCA9IDA7CisJaW50IG1hdGNoID0gMDsKKworCWZvciAod2Vha19tYXRjaCA9IG1hdGNoID0gMDsgcmVmczsgcmVmcyA9IHJlZnMtPm5leHQpIHsKKwkJY2hhciAqbmFtZSA9IHJlZnMtPm5hbWU7CisJCWludCBuYW1lbGVuID0gc3RybGVuKG5hbWUpOworCisJCWlmICghcmVmbmFtZV9tYXRjaChwYXR0ZXJuLCBuYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEEgbWF0Y2ggaXMgIndlYWsiIGlmIGl0IGlzIHdpdGggcmVmcyBvdXRzaWRlCisJCSAqIGhlYWRzIG9yIHRhZ3MsIGFuZCBkaWQgbm90IHNwZWNpZnkgdGhlIHBhdHRlcm4KKwkJICogaW4gZnVsbCAoZS5nLiAicmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiKSBvciBhdAorCQkgKiBsZWFzdCBmcm9tIHRoZSB0b3BsZXZlbCAoZS5nLiAicmVtb3Rlcy9vcmlnaW4vbWFzdGVyIik7CisJCSAqIG90aGVyd2lzZSAiZ2l0IHB1c2ggJFVSTCBtYXN0ZXIiIHdvdWxkIHJlc3VsdCBpbgorCQkgKiBhbWJpZ3VpdHkgYmV0d2VlbiByZW1vdGVzL29yaWdpbi9tYXN0ZXIgYW5kIGhlYWRzL21hc3RlcgorCQkgKiBhdCB0aGUgcmVtb3RlIHNpdGUuCisJCSAqLworCQlpZiAobmFtZWxlbiAhPSBwYXRsZW4gJiYKKwkJICAgIHBhdGxlbiAhPSBuYW1lbGVuIC0gNSAmJgorCQkgICAgIXN0YXJ0c193aXRoKG5hbWUsICJyZWZzL2hlYWRzLyIpICYmCisJCSAgICAhc3RhcnRzX3dpdGgobmFtZSwgInJlZnMvdGFncy8iKSkgeworCQkJLyogV2Ugd2FudCB0byBjYXRjaCB0aGUgY2FzZSB3aGVyZSBvbmx5IHdlYWsKKwkJCSAqIG1hdGNoZXMgYXJlIGZvdW5kIGFuZCB0aGVyZSBhcmUgbXVsdGlwbGUKKwkJCSAqIG1hdGNoZXMsIGFuZCB3aGVyZSBtb3JlIHRoYW4gb25lIHN0cm9uZworCQkJICogbWF0Y2hlcyBhcmUgZm91bmQsIGFzIGFtYmlndW91cy4gIE9uZQorCQkJICogc3Ryb25nIG1hdGNoIHdpdGggemVybyBvciBtb3JlIHdlYWsgbWF0Y2hlcworCQkJICogYXJlIGFjY2VwdGFibGUgYXMgYSB1bmlxdWUgbWF0Y2guCisJCQkgKi8KKwkJCW1hdGNoZWRfd2VhayA9IHJlZnM7CisJCQl3ZWFrX21hdGNoKys7CisJCX0KKwkJZWxzZSB7CisJCQltYXRjaGVkID0gcmVmczsKKwkJCW1hdGNoKys7CisJCX0KKwl9CisJaWYgKCFtYXRjaGVkKSB7CisJCWlmIChtYXRjaGVkX3JlZikKKwkJCSptYXRjaGVkX3JlZiA9IG1hdGNoZWRfd2VhazsKKwkJcmV0dXJuIHdlYWtfbWF0Y2g7CisJfQorCWVsc2UgeworCQlpZiAobWF0Y2hlZF9yZWYpCisJCQkqbWF0Y2hlZF9yZWYgPSBtYXRjaGVkOworCQlyZXR1cm4gbWF0Y2g7CisJfQorfQorCitzdGF0aWMgdm9pZCB0YWlsX2xpbmtfcmVmKHN0cnVjdCByZWYgKnJlZiwgc3RydWN0IHJlZiAqKip0YWlsKQoreworCSoqdGFpbCA9IHJlZjsKKwl3aGlsZSAocmVmLT5uZXh0KQorCQlyZWYgPSByZWYtPm5leHQ7CisJKnRhaWwgPSAmcmVmLT5uZXh0OworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqYWxsb2NfZGVsZXRlX3JlZih2b2lkKQoreworCXN0cnVjdCByZWYgKnJlZiA9IGFsbG9jX3JlZigiKGRlbGV0ZSkiKTsKKwloYXNoY2xyKHJlZi0+bmV3X3NoYTEpOworCXJldHVybiByZWY7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X2V4cGxpY2l0X29iamVjdF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIHN0cnVjdCByZWYgKiptYXRjaCkKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJaWYgKCEqbmFtZSkgeworCQlpZiAobWF0Y2gpCisJCQkqbWF0Y2ggPSBhbGxvY19kZWxldGVfcmVmKCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChnZXRfc2hhMShuYW1lLCBzaGExKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKG1hdGNoKSB7CisJCSptYXRjaCA9IGFsbG9jX3JlZihuYW1lKTsKKwkJaGFzaGNweSgoKm1hdGNoKS0+bmV3X3NoYTEsIHNoYTEpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKm1ha2VfbGlua2VkX3JlZihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcmVmICoqKnRhaWwpCit7CisJc3RydWN0IHJlZiAqcmV0ID0gYWxsb2NfcmVmKG5hbWUpOworCXRhaWxfbGlua19yZWYocmV0LCB0YWlsKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY2hhciAqZ3Vlc3NfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCByZWYgKnBlZXIpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJY29uc3QgY2hhciAqciA9IHJlc29sdmVfcmVmX3Vuc2FmZShwZWVyLT5uYW1lLCBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkgICBzaGExLCBOVUxMKTsKKwlpZiAoIXIpCisJCXJldHVybiBOVUxMOworCisJaWYgKHN0YXJ0c193aXRoKHIsICJyZWZzL2hlYWRzLyIpKQorCQlzdHJidWZfYWRkc3RyKCZidWYsICJyZWZzL2hlYWRzLyIpOworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHIsICJyZWZzL3RhZ3MvIikpCisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgInJlZnMvdGFncy8iKTsKKwllbHNlCisJCXJldHVybiBOVUxMOworCisJc3RyYnVmX2FkZHN0cigmYnVmLCBuYW1lKTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KKworc3RhdGljIGludCBtYXRjaF9leHBsaWNpdF9saHMoc3RydWN0IHJlZiAqc3JjLAorCQkJICAgICAgc3RydWN0IHJlZnNwZWMgKnJzLAorCQkJICAgICAgc3RydWN0IHJlZiAqKm1hdGNoLAorCQkJICAgICAgaW50ICphbGxvY2F0ZWRfbWF0Y2gpCit7CisJc3dpdGNoIChjb3VudF9yZWZzcGVjX21hdGNoKHJzLT5zcmMsIHNyYywgbWF0Y2gpKSB7CisJY2FzZSAxOgorCQlpZiAoYWxsb2NhdGVkX21hdGNoKQorCQkJKmFsbG9jYXRlZF9tYXRjaCA9IDA7CisJCXJldHVybiAwOworCWNhc2UgMDoKKwkJLyogVGhlIHNvdXJjZSBjb3VsZCBiZSBpbiB0aGUgZ2V0X3NoYTEoKSBmb3JtYXQKKwkJICogbm90IGEgcmVmZXJlbmNlIG5hbWUuICA6cmVmcy9vdGhlciBpcyBhCisJCSAqIHdheSB0byBkZWxldGUgJ290aGVyJyByZWYgYXQgdGhlIHJlbW90ZSBlbmQuCisJCSAqLworCQlpZiAodHJ5X2V4cGxpY2l0X29iamVjdF9uYW1lKHJzLT5zcmMsIG1hdGNoKSA8IDApCisJCQlyZXR1cm4gZXJyb3IoInNyYyByZWZzcGVjICVzIGRvZXMgbm90IG1hdGNoIGFueS4iLCBycy0+c3JjKTsKKwkJaWYgKGFsbG9jYXRlZF9tYXRjaCkKKwkJCSphbGxvY2F0ZWRfbWF0Y2ggPSAxOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZXJyb3IoInNyYyByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZS4iLCBycy0+c3JjKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2hfZXhwbGljaXQoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICpkc3QsCisJCQkgIHN0cnVjdCByZWYgKioqZHN0X3RhaWwsCisJCQkgIHN0cnVjdCByZWZzcGVjICpycykKK3sKKwlzdHJ1Y3QgcmVmICptYXRjaGVkX3NyYywgKm1hdGNoZWRfZHN0OworCWludCBhbGxvY2F0ZWRfc3JjOworCisJY29uc3QgY2hhciAqZHN0X3ZhbHVlID0gcnMtPmRzdDsKKwljaGFyICpkc3RfZ3Vlc3M7CisKKwlpZiAocnMtPnBhdHRlcm4gfHwgcnMtPm1hdGNoaW5nKQorCQlyZXR1cm4gMDsKKworCW1hdGNoZWRfc3JjID0gbWF0Y2hlZF9kc3QgPSBOVUxMOworCWlmIChtYXRjaF9leHBsaWNpdF9saHMoc3JjLCBycywgJm1hdGNoZWRfc3JjLCAmYWxsb2NhdGVkX3NyYykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWRzdF92YWx1ZSkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlpbnQgZmxhZzsKKworCQlkc3RfdmFsdWUgPSByZXNvbHZlX3JlZl91bnNhZmUobWF0Y2hlZF9zcmMtPm5hbWUsCisJCQkJCSAgICAgICBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkgICAgICAgc2hhMSwgJmZsYWcpOworCQlpZiAoIWRzdF92YWx1ZSB8fAorCQkgICAgKChmbGFnICYgUkVGX0lTU1lNUkVGKSAmJgorCQkgICAgICFzdGFydHNfd2l0aChkc3RfdmFsdWUsICJyZWZzL2hlYWRzLyIpKSkKKwkJCWRpZSgiJXMgY2Fubm90IGJlIHJlc29sdmVkIHRvIGJyYW5jaC4iLAorCQkJICAgIG1hdGNoZWRfc3JjLT5uYW1lKTsKKwl9CisKKwlzd2l0Y2ggKGNvdW50X3JlZnNwZWNfbWF0Y2goZHN0X3ZhbHVlLCBkc3QsICZtYXRjaGVkX2RzdCkpIHsKKwljYXNlIDE6CisJCWJyZWFrOworCWNhc2UgMDoKKwkJaWYgKHN0YXJ0c193aXRoKGRzdF92YWx1ZSwgInJlZnMvIikpCisJCQltYXRjaGVkX2RzdCA9IG1ha2VfbGlua2VkX3JlZihkc3RfdmFsdWUsIGRzdF90YWlsKTsKKwkJZWxzZSBpZiAoaXNfbnVsbF9zaGExKG1hdGNoZWRfc3JjLT5uZXdfc2hhMSkpCisJCQllcnJvcigidW5hYmxlIHRvIGRlbGV0ZSAnJXMnOiByZW1vdGUgcmVmIGRvZXMgbm90IGV4aXN0IiwKKwkJCSAgICAgIGRzdF92YWx1ZSk7CisJCWVsc2UgaWYgKChkc3RfZ3Vlc3MgPSBndWVzc19yZWYoZHN0X3ZhbHVlLCBtYXRjaGVkX3NyYykpKQorCQkJbWF0Y2hlZF9kc3QgPSBtYWtlX2xpbmtlZF9yZWYoZHN0X2d1ZXNzLCBkc3RfdGFpbCk7CisJCWVsc2UKKwkJCWVycm9yKCJ1bmFibGUgdG8gcHVzaCB0byB1bnF1YWxpZmllZCBkZXN0aW5hdGlvbjogJXNcbiIKKwkJCSAgICAgICJUaGUgZGVzdGluYXRpb24gcmVmc3BlYyBuZWl0aGVyIG1hdGNoZXMgYW4gIgorCQkJICAgICAgImV4aXN0aW5nIHJlZiBvbiB0aGUgcmVtb3RlIG5vclxuIgorCQkJICAgICAgImJlZ2lucyB3aXRoIHJlZnMvLCBhbmQgd2UgYXJlIHVuYWJsZSB0byAiCisJCQkgICAgICAiZ3Vlc3MgYSBwcmVmaXggYmFzZWQgb24gdGhlIHNvdXJjZSByZWYuIiwKKwkJCSAgICAgIGRzdF92YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW1hdGNoZWRfZHN0ID0gTlVMTDsKKwkJZXJyb3IoImRzdCByZWZzcGVjICVzIG1hdGNoZXMgbW9yZSB0aGFuIG9uZS4iLAorCQkgICAgICBkc3RfdmFsdWUpOworCQlicmVhazsKKwl9CisJaWYgKCFtYXRjaGVkX2RzdCkKKwkJcmV0dXJuIC0xOworCWlmIChtYXRjaGVkX2RzdC0+cGVlcl9yZWYpCisJCXJldHVybiBlcnJvcigiZHN0IHJlZiAlcyByZWNlaXZlcyBmcm9tIG1vcmUgdGhhbiBvbmUgc3JjLiIsCisJCSAgICAgIG1hdGNoZWRfZHN0LT5uYW1lKTsKKwllbHNlIHsKKwkJbWF0Y2hlZF9kc3QtPnBlZXJfcmVmID0gYWxsb2NhdGVkX3NyYyA/CisJCQkJCW1hdGNoZWRfc3JjIDoKKwkJCQkJY29weV9yZWYobWF0Y2hlZF9zcmMpOworCQltYXRjaGVkX2RzdC0+Zm9yY2UgPSBycy0+Zm9yY2U7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hdGNoX2V4cGxpY2l0X3JlZnMoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICpkc3QsCisJCQkgICAgICAgc3RydWN0IHJlZiAqKipkc3RfdGFpbCwgc3RydWN0IHJlZnNwZWMgKnJzLAorCQkJICAgICAgIGludCByc19ucikKK3sKKwlpbnQgaSwgZXJyczsKKwlmb3IgKGkgPSBlcnJzID0gMDsgaSA8IHJzX25yOyBpKyspCisJCWVycnMgKz0gbWF0Y2hfZXhwbGljaXQoc3JjLCBkc3QsIGRzdF90YWlsLCAmcnNbaV0pOworCXJldHVybiBlcnJzOworfQorCitzdGF0aWMgY2hhciAqZ2V0X3JlZl9tYXRjaChjb25zdCBzdHJ1Y3QgcmVmc3BlYyAqcnMsIGludCByc19uciwgY29uc3Qgc3RydWN0IHJlZiAqcmVmLAorCQlpbnQgc2VuZF9taXJyb3IsIGludCBkaXJlY3Rpb24sIGNvbnN0IHN0cnVjdCByZWZzcGVjICoqcmV0X3BhdCkKK3sKKwljb25zdCBzdHJ1Y3QgcmVmc3BlYyAqcGF0OworCWNoYXIgKm5hbWU7CisJaW50IGk7CisJaW50IG1hdGNoaW5nX3JlZnMgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgcnNfbnI7IGkrKykgeworCQlpZiAocnNbaV0ubWF0Y2hpbmcgJiYKKwkJICAgIChtYXRjaGluZ19yZWZzID09IC0xIHx8IHJzW2ldLmZvcmNlKSkgeworCQkJbWF0Y2hpbmdfcmVmcyA9IGk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChyc1tpXS5wYXR0ZXJuKSB7CisJCQljb25zdCBjaGFyICpkc3Rfc2lkZSA9IHJzW2ldLmRzdCA/IHJzW2ldLmRzdCA6IHJzW2ldLnNyYzsKKwkJCWludCBtYXRjaDsKKwkJCWlmIChkaXJlY3Rpb24gPT0gRlJPTV9TUkMpCisJCQkJbWF0Y2ggPSBtYXRjaF9uYW1lX3dpdGhfcGF0dGVybihyc1tpXS5zcmMsIHJlZi0+bmFtZSwgZHN0X3NpZGUsICZuYW1lKTsKKwkJCWVsc2UKKwkJCQltYXRjaCA9IG1hdGNoX25hbWVfd2l0aF9wYXR0ZXJuKGRzdF9zaWRlLCByZWYtPm5hbWUsIHJzW2ldLnNyYywgJm5hbWUpOworCQkJaWYgKG1hdGNoKSB7CisJCQkJbWF0Y2hpbmdfcmVmcyA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKG1hdGNoaW5nX3JlZnMgPT0gLTEpCisJCXJldHVybiBOVUxMOworCisJcGF0ID0gcnMgKyBtYXRjaGluZ19yZWZzOworCWlmIChwYXQtPm1hdGNoaW5nKSB7CisJCS8qCisJCSAqICJtYXRjaGluZyByZWZzIjsgdHJhZGl0aW9uYWxseSB3ZSBwdXNoZWQgZXZlcnl0aGluZworCQkgKiBpbmNsdWRpbmcgcmVmcyBvdXRzaWRlIHJlZnMvaGVhZHMvIGhpZXJhcmNoeSwgYnV0CisJCSAqIHRoYXQgZG9lcyBub3QgbWFrZSBtdWNoIHNlbnNlIHRoZXNlIGRheXMuCisJCSAqLworCQlpZiAoIXNlbmRfbWlycm9yICYmICFzdGFydHNfd2l0aChyZWYtPm5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQkJcmV0dXJuIE5VTEw7CisJCW5hbWUgPSB4c3RyZHVwKHJlZi0+bmFtZSk7CisJfQorCWlmIChyZXRfcGF0KQorCQkqcmV0X3BhdCA9IHBhdDsKKwlyZXR1cm4gbmFtZTsKK30KKworc3RhdGljIHN0cnVjdCByZWYgKip0YWlsX3JlZihzdHJ1Y3QgcmVmICoqaGVhZCkKK3sKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9IGhlYWQ7CisJd2hpbGUgKCp0YWlsKQorCQl0YWlsID0gJigoKnRhaWwpLT5uZXh0KTsKKwlyZXR1cm4gdGFpbDsKK30KKworc3RydWN0IHRpcHMgeworCXN0cnVjdCBjb21taXQgKip0aXA7CisJaW50IG5yLCBhbGxvYzsKK307CisKK3N0YXRpYyB2b2lkIGFkZF90b190aXBzKHN0cnVjdCB0aXBzICp0aXBzLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWlmIChpc19udWxsX3NoYTEoc2hhMSkpCisJCXJldHVybjsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSk7CisJaWYgKCFjb21taXQgfHwgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVE1QX01BUkspKQorCQlyZXR1cm47CisJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVE1QX01BUks7CisJQUxMT0NfR1JPVyh0aXBzLT50aXAsIHRpcHMtPm5yICsgMSwgdGlwcy0+YWxsb2MpOworCXRpcHMtPnRpcFt0aXBzLT5ucisrXSA9IGNvbW1pdDsKK30KKworc3RhdGljIHZvaWQgYWRkX21pc3NpbmdfdGFncyhzdHJ1Y3QgcmVmICpzcmMsIHN0cnVjdCByZWYgKipkc3QsIHN0cnVjdCByZWYgKioqZHN0X3RhaWwpCit7CisJc3RydWN0IHN0cmluZ19saXN0IGRzdF90YWcgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBzcmNfdGFnID0gU1RSSU5HX0xJU1RfSU5JVF9OT0RVUDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IHRpcHMgc2VudF90aXBzOworCisJLyoKKwkgKiBDb2xsZWN0IGV2ZXJ5dGhpbmcgd2Uga25vdyB0aGV5IHdvdWxkIGhhdmUgYXQgdGhlIGVuZCBvZgorCSAqIHRoaXMgcHVzaCwgYW5kIGNvbGxlY3QgYWxsIHRhZ3MgdGhleSBoYXZlLgorCSAqLworCW1lbXNldCgmc2VudF90aXBzLCAwLCBzaXplb2Yoc2VudF90aXBzKSk7CisJZm9yIChyZWYgPSAqZHN0OyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAocmVmLT5wZWVyX3JlZiAmJgorCQkgICAgIWlzX251bGxfc2hhMShyZWYtPnBlZXJfcmVmLT5uZXdfc2hhMSkpCisJCQlhZGRfdG9fdGlwcygmc2VudF90aXBzLCByZWYtPnBlZXJfcmVmLT5uZXdfc2hhMSk7CisJCWVsc2UKKwkJCWFkZF90b190aXBzKCZzZW50X3RpcHMsIHJlZi0+b2xkX3NoYTEpOworCQlpZiAoc3RhcnRzX3dpdGgocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZkc3RfdGFnLCByZWYtPm5hbWUpOworCX0KKwljbGVhcl9jb21taXRfbWFya3NfbWFueShzZW50X3RpcHMubnIsIHNlbnRfdGlwcy50aXAsIFRNUF9NQVJLKTsKKworCXN0cmluZ19saXN0X3NvcnQoJmRzdF90YWcpOworCisJLyogQ29sbGVjdCB0YWdzIHRoZXkgZG8gbm90IGhhdmUuICovCisJZm9yIChyZWYgPSBzcmM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICghc3RhcnRzX3dpdGgocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpKQorCQkJY29udGludWU7IC8qIG5vdCBhIHRhZyAqLworCQlpZiAoc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmZHN0X3RhZywgcmVmLT5uYW1lKSkKKwkJCWNvbnRpbnVlOyAvKiB0aGV5IGFscmVhZHkgaGF2ZSBpdCAqLworCQlpZiAoc2hhMV9vYmplY3RfaW5mbyhyZWYtPm5ld19zaGExLCBOVUxMKSAhPSBPQkpfVEFHKQorCQkJY29udGludWU7IC8qIGJlIGNvbnNlcnZhdGl2ZSAqLworCQlpdGVtID0gc3RyaW5nX2xpc3RfYXBwZW5kKCZzcmNfdGFnLCByZWYtPm5hbWUpOworCQlpdGVtLT51dGlsID0gcmVmOworCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmZHN0X3RhZywgMCk7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsIHNyY190YWcgbGlzdHMgdGFncyB0aGF0IGFyZSBtaXNzaW5nIGZyb20KKwkgKiBkc3QsIGFuZCBzZW50X3RpcHMgbGlzdHMgdGhlIHRpcHMgd2UgYXJlIHB1c2hpbmcgb3IgdGhvc2UKKwkgKiB0aGF0IHdlIGtub3cgdGhleSBhbHJlYWR5IGhhdmUuIEFuIGVsZW1lbnQgaW4gdGhlIHNyY190YWcKKwkgKiB0aGF0IGlzIGFuIGFuY2VzdG9yIG9mIGFueSBvZiB0aGUgc2VudF90aXBzIG5lZWRzIHRvIGJlCisJICogc2VudCB0byB0aGUgb3RoZXIgc2lkZS4KKwkgKi8KKwlpZiAoc2VudF90aXBzLm5yKSB7CisJCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oaXRlbSwgJnNyY190YWcpIHsKKwkJCXN0cnVjdCByZWYgKnJlZiA9IGl0ZW0tPnV0aWw7CisJCQlzdHJ1Y3QgcmVmICpkc3RfcmVmOworCQkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCisJCQlpZiAoaXNfbnVsbF9zaGExKHJlZi0+bmV3X3NoYTEpKQorCQkJCWNvbnRpbnVlOworCQkJY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHJlZi0+bmV3X3NoYTEsIDEpOworCQkJaWYgKCFjb21taXQpCisJCQkJLyogbm90IHB1c2hpbmcgYSBjb21taXQsIHdoaWNoIGlzIG5vdCBhbiBlcnJvciAqLworCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogSXMgdGhpcyB0YWcsIHdoaWNoIHRoZXkgZG8gbm90IGhhdmUsIHJlYWNoYWJsZSBmcm9tCisJCQkgKiBhbnkgb2YgdGhlIGNvbW1pdHMgd2UgYXJlIHNlbmRpbmc/CisJCQkgKi8KKwkJCWlmICghaW5fbWVyZ2VfYmFzZXNfbWFueShjb21taXQsIHNlbnRfdGlwcy5uciwgc2VudF90aXBzLnRpcCkpCisJCQkJY29udGludWU7CisKKwkJCS8qIEFkZCBpdCBpbiAqLworCQkJZHN0X3JlZiA9IG1ha2VfbGlua2VkX3JlZihyZWYtPm5hbWUsIGRzdF90YWlsKTsKKwkJCWhhc2hjcHkoZHN0X3JlZi0+bmV3X3NoYTEsIHJlZi0+bmV3X3NoYTEpOworCQkJZHN0X3JlZi0+cGVlcl9yZWYgPSBjb3B5X3JlZihyZWYpOworCQl9CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZzcmNfdGFnLCAwKTsKKwlmcmVlKHNlbnRfdGlwcy50aXApOworfQorCitzdHJ1Y3QgcmVmICpmaW5kX3JlZl9ieV9uYW1lKGNvbnN0IHN0cnVjdCByZWYgKmxpc3QsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJZm9yICggOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwkJaWYgKCFzdHJjbXAobGlzdC0+bmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gKHN0cnVjdCByZWYgKilsaXN0OworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3JlZl9pbmRleChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlZl9pbmRleCwgc3RydWN0IHJlZiAqcmVmKQoreworCWZvciAoIDsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cChyZWZfaW5kZXgsIHJlZi0+bmFtZSktPnV0aWwgPSByZWY7CisKKwlzdHJpbmdfbGlzdF9zb3J0KHJlZl9pbmRleCk7Cit9CisKKy8qCisgKiBHaXZlbiBvbmx5IHRoZSBzZXQgb2YgbG9jYWwgcmVmcywgc2FuaXR5LWNoZWNrIHRoZSBzZXQgb2YgcHVzaAorICogcmVmc3BlY3MuIFdlIGNhbid0IGNhdGNoIGFsbCBlcnJvcnMgdGhhdCBtYXRjaF9wdXNoX3JlZnMgd291bGQsCisgKiBidXQgd2UgY2FuIGNhdGNoIHNvbWUgZXJyb3JzIGVhcmx5IGJlZm9yZSBldmVuIHRhbGtpbmcgdG8gdGhlCisgKiByZW1vdGUgc2lkZS4KKyAqLworaW50IGNoZWNrX3B1c2hfcmVmcyhzdHJ1Y3QgcmVmICpzcmMsIGludCBucl9yZWZzcGVjLCBjb25zdCBjaGFyICoqcmVmc3BlY19uYW1lcykKK3sKKwlzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYyA9IHBhcnNlX3B1c2hfcmVmc3BlYyhucl9yZWZzcGVjLCByZWZzcGVjX25hbWVzKTsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9yZWZzcGVjOyBpKyspIHsKKwkJc3RydWN0IHJlZnNwZWMgKnJzID0gcmVmc3BlYyArIGk7CisKKwkJaWYgKHJzLT5wYXR0ZXJuIHx8IHJzLT5tYXRjaGluZykKKwkJCWNvbnRpbnVlOworCisJCXJldCB8PSBtYXRjaF9leHBsaWNpdF9saHMoc3JjLCBycywgTlVMTCwgTlVMTCk7CisJfQorCisJZnJlZV9yZWZzcGVjKG5yX3JlZnNwZWMsIHJlZnNwZWMpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBHaXZlbiB0aGUgc2V0IG9mIHJlZnMgdGhlIGxvY2FsIHJlcG9zaXRvcnkgaGFzLCB0aGUgc2V0IG9mIHJlZnMgdGhlCisgKiByZW1vdGUgcmVwb3NpdG9yeSBoYXMsIGFuZCB0aGUgcmVmc3BlYyB1c2VkIGZvciBwdXNoLCBkZXRlcm1pbmUKKyAqIHdoYXQgcmVtb3RlIHJlZnMgd2Ugd2lsbCB1cGRhdGUgYW5kIHdpdGggd2hhdCB2YWx1ZSBieSBzZXR0aW5nCisgKiBwZWVyX3JlZiAod2hpY2ggb2JqZWN0IGlzIGJlaW5nIHB1c2hlZCkgYW5kIGZvcmNlIChpZiB0aGUgcHVzaCBpcworICogZm9yY2VkKSBpbiBlbGVtZW50cyBvZiAiZHN0Ii4gVGhlIGZ1bmN0aW9uIG1heSBhZGQgbmV3IGVsZW1lbnRzIHRvCisgKiBkc3QgKGUuZy4gcHVzaGluZyB0byBhIG5ldyBicmFuY2gsIGRvbmUgaW4gbWF0Y2hfZXhwbGljaXRfcmVmcykuCisgKi8KK2ludCBtYXRjaF9wdXNoX3JlZnMoc3RydWN0IHJlZiAqc3JjLCBzdHJ1Y3QgcmVmICoqZHN0LAorCQkgICAgaW50IG5yX3JlZnNwZWMsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHJlZnNwZWMgKnJzOworCWludCBzZW5kX2FsbCA9IGZsYWdzICYgTUFUQ0hfUkVGU19BTEw7CisJaW50IHNlbmRfbWlycm9yID0gZmxhZ3MgJiBNQVRDSF9SRUZTX01JUlJPUjsKKwlpbnQgc2VuZF9wcnVuZSA9IGZsYWdzICYgTUFUQ0hfUkVGU19QUlVORTsKKwlpbnQgZXJyczsKKwlzdGF0aWMgY29uc3QgY2hhciAqZGVmYXVsdF9yZWZzcGVjW10gPSB7ICI6IiwgTlVMTCB9OworCXN0cnVjdCByZWYgKnJlZiwgKipkc3RfdGFpbCA9IHRhaWxfcmVmKGRzdCk7CisJc3RydWN0IHN0cmluZ19saXN0IGRzdF9yZWZfaW5kZXggPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCisJaWYgKCFucl9yZWZzcGVjKSB7CisJCW5yX3JlZnNwZWMgPSAxOworCQlyZWZzcGVjID0gZGVmYXVsdF9yZWZzcGVjOworCX0KKwlycyA9IHBhcnNlX3B1c2hfcmVmc3BlYyhucl9yZWZzcGVjLCAoY29uc3QgY2hhciAqKikgcmVmc3BlYyk7CisJZXJycyA9IG1hdGNoX2V4cGxpY2l0X3JlZnMoc3JjLCAqZHN0LCAmZHN0X3RhaWwsIHJzLCBucl9yZWZzcGVjKTsKKworCS8qIHBpY2sgdGhlIHJlbWFpbmRlciAqLworCWZvciAocmVmID0gc3JjOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqZHN0X2l0ZW07CisJCXN0cnVjdCByZWYgKmRzdF9wZWVyOworCQljb25zdCBzdHJ1Y3QgcmVmc3BlYyAqcGF0ID0gTlVMTDsKKwkJY2hhciAqZHN0X25hbWU7CisKKwkJZHN0X25hbWUgPSBnZXRfcmVmX21hdGNoKHJzLCBucl9yZWZzcGVjLCByZWYsIHNlbmRfbWlycm9yLCBGUk9NX1NSQywgJnBhdCk7CisJCWlmICghZHN0X25hbWUpCisJCQljb250aW51ZTsKKworCQlpZiAoIWRzdF9yZWZfaW5kZXgubnIpCisJCQlwcmVwYXJlX3JlZl9pbmRleCgmZHN0X3JlZl9pbmRleCwgKmRzdCk7CisKKwkJZHN0X2l0ZW0gPSBzdHJpbmdfbGlzdF9sb29rdXAoJmRzdF9yZWZfaW5kZXgsIGRzdF9uYW1lKTsKKwkJZHN0X3BlZXIgPSBkc3RfaXRlbSA/IGRzdF9pdGVtLT51dGlsIDogTlVMTDsKKwkJaWYgKGRzdF9wZWVyKSB7CisJCQlpZiAoZHN0X3BlZXItPnBlZXJfcmVmKQorCQkJCS8qIFdlJ3JlIGFscmVhZHkgc2VuZGluZyBzb21ldGhpbmcgdG8gdGhpcyByZWYuICovCisJCQkJZ290byBmcmVlX25hbWU7CisJCX0gZWxzZSB7CisJCQlpZiAocGF0LT5tYXRjaGluZyAmJiAhKHNlbmRfYWxsIHx8IHNlbmRfbWlycm9yKSkKKwkJCQkvKgorCQkJCSAqIFJlbW90ZSBkb2Vzbid0IGhhdmUgaXQsIGFuZCB3ZSBoYXZlIG5vCisJCQkJICogZXhwbGljaXQgcGF0dGVybiwgYW5kIHdlIGRvbid0IGhhdmUKKwkJCQkgKiAtLWFsbCBvciAtLW1pcnJvci4KKwkJCQkgKi8KKwkJCQlnb3RvIGZyZWVfbmFtZTsKKworCQkJLyogQ3JlYXRlIGEgbmV3IG9uZSBhbmQgbGluayBpdCAqLworCQkJZHN0X3BlZXIgPSBtYWtlX2xpbmtlZF9yZWYoZHN0X25hbWUsICZkc3RfdGFpbCk7CisJCQloYXNoY3B5KGRzdF9wZWVyLT5uZXdfc2hhMSwgcmVmLT5uZXdfc2hhMSk7CisJCQlzdHJpbmdfbGlzdF9pbnNlcnQoJmRzdF9yZWZfaW5kZXgsCisJCQkJZHN0X3BlZXItPm5hbWUpLT51dGlsID0gZHN0X3BlZXI7CisJCX0KKwkJZHN0X3BlZXItPnBlZXJfcmVmID0gY29weV9yZWYocmVmKTsKKwkJZHN0X3BlZXItPmZvcmNlID0gcGF0LT5mb3JjZTsKKwlmcmVlX25hbWU6CisJCWZyZWUoZHN0X25hbWUpOworCX0KKworCXN0cmluZ19saXN0X2NsZWFyKCZkc3RfcmVmX2luZGV4LCAwKTsKKworCWlmIChmbGFncyAmIE1BVENIX1JFRlNfRk9MTE9XX1RBR1MpCisJCWFkZF9taXNzaW5nX3RhZ3Moc3JjLCBkc3QsICZkc3RfdGFpbCk7CisKKwlpZiAoc2VuZF9wcnVuZSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3Qgc3JjX3JlZl9pbmRleCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJCS8qIGNoZWNrIGZvciBtaXNzaW5nIHJlZnMgb24gdGhlIHJlbW90ZSAqLworCQlmb3IgKHJlZiA9ICpkc3Q7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCQljaGFyICpzcmNfbmFtZTsKKworCQkJaWYgKHJlZi0+cGVlcl9yZWYpCisJCQkJLyogV2UncmUgYWxyZWFkeSBzZW5kaW5nIHNvbWV0aGluZyB0byB0aGlzIHJlZi4gKi8KKwkJCQljb250aW51ZTsKKworCQkJc3JjX25hbWUgPSBnZXRfcmVmX21hdGNoKHJzLCBucl9yZWZzcGVjLCByZWYsIHNlbmRfbWlycm9yLCBGUk9NX0RTVCwgTlVMTCk7CisJCQlpZiAoc3JjX25hbWUpIHsKKwkJCQlpZiAoIXNyY19yZWZfaW5kZXgubnIpCisJCQkJCXByZXBhcmVfcmVmX2luZGV4KCZzcmNfcmVmX2luZGV4LCBzcmMpOworCQkJCWlmICghc3RyaW5nX2xpc3RfaGFzX3N0cmluZygmc3JjX3JlZl9pbmRleCwKKwkJCQkJICAgIHNyY19uYW1lKSkKKwkJCQkJcmVmLT5wZWVyX3JlZiA9IGFsbG9jX2RlbGV0ZV9yZWYoKTsKKwkJCQlmcmVlKHNyY19uYW1lKTsKKwkJCX0KKwkJfQorCQlzdHJpbmdfbGlzdF9jbGVhcigmc3JjX3JlZl9pbmRleCwgMCk7CisJfQorCWlmIChlcnJzKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2goc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIGludCBzZW5kX21pcnJvciwKKwkJCSAgICAgaW50IGZvcmNlX3VwZGF0ZSkKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpbnQgZm9yY2VfcmVmX3VwZGF0ZSA9IHJlZi0+Zm9yY2UgfHwgZm9yY2VfdXBkYXRlOworCQlpbnQgcmVqZWN0X3JlYXNvbiA9IDA7CisKKwkJaWYgKHJlZi0+cGVlcl9yZWYpCisJCQloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIHJlZi0+cGVlcl9yZWYtPm5ld19zaGExKTsKKwkJZWxzZSBpZiAoIXNlbmRfbWlycm9yKQorCQkJY29udGludWU7CisKKwkJcmVmLT5kZWxldGlvbiA9IGlzX251bGxfc2hhMShyZWYtPm5ld19zaGExKTsKKwkJaWYgKCFyZWYtPmRlbGV0aW9uICYmCisJCQkhaGFzaGNtcChyZWYtPm9sZF9zaGExLCByZWYtPm5ld19zaGExKSkgeworCQkJcmVmLT5zdGF0dXMgPSBSRUZfU1RBVFVTX1VQVE9EQVRFOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBCeXBhc3MgdGhlIHVzdWFsICJtdXN0IGZhc3QtZm9yd2FyZCIgY2hlY2sgYnV0CisJCSAqIHJlcGxhY2UgaXQgd2l0aCBhIHdlYWtlciAidGhlIG9sZCB2YWx1ZSBtdXN0IGJlCisJCSAqIHRoaXMgdmFsdWUgd2Ugb2JzZXJ2ZWQiLiAgSWYgdGhlIHJlbW90ZSByZWYgaGFzCisJCSAqIG1vdmVkIGFuZCBpcyBub3cgZGlmZmVyZW50IGZyb20gd2hhdCB3ZSBleHBlY3QsCisJCSAqIHJlamVjdCBhbnkgcHVzaC4KKwkJICoKKwkJICogSXQgYWxzbyBpcyBhbiBlcnJvciBpZiB0aGUgdXNlciB0b2xkIHVzIHRvIGNoZWNrCisJCSAqIHdpdGggdGhlIHJlbW90ZS10cmFja2luZyBicmFuY2ggdG8gZmluZCB0aGUgdmFsdWUKKwkJICogdG8gZXhwZWN0LCBidXQgd2UgZGlkIG5vdCBoYXZlIHN1Y2ggYSB0cmFja2luZworCQkgKiBicmFuY2guCisJCSAqLworCQlpZiAocmVmLT5leHBlY3Rfb2xkX3NoYTEpIHsKKwkJCWlmIChyZWYtPmV4cGVjdF9vbGRfbm9fdHJhY2tiYWNrIHx8CisJCQkgICAgaGFzaGNtcChyZWYtPm9sZF9zaGExLCByZWYtPm9sZF9zaGExX2V4cGVjdCkpCisJCQkJcmVqZWN0X3JlYXNvbiA9IFJFRl9TVEFUVVNfUkVKRUNUX1NUQUxFOworCQl9CisKKwkJLyoKKwkJICogVGhlIHVzdWFsICJtdXN0IGZhc3QtZm9yd2FyZCIgcnVsZXMuCisJCSAqCisJCSAqIERlY2lkZSB3aGV0aGVyIGFuIGluZGl2aWR1YWwgcmVmc3BlYyBBOkIgY2FuIGJlCisJCSAqIHB1c2hlZC4gIFRoZSBwdXNoIHdpbGwgc3VjY2VlZCBpZiBhbnkgb2YgdGhlCisJCSAqIGZvbGxvd2luZyBhcmUgdHJ1ZToKKwkJICoKKwkJICogKDEpIHRoZSByZW1vdGUgcmVmZXJlbmNlIEIgZG9lcyBub3QgZXhpc3QKKwkJICoKKwkJICogKDIpIHRoZSByZW1vdGUgcmVmZXJlbmNlIEIgaXMgYmVpbmcgcmVtb3ZlZCAoaS5lLiwKKwkJICogICAgIHB1c2hpbmcgOkIgd2hlcmUgbm8gc291cmNlIGlzIHNwZWNpZmllZCkKKwkJICoKKwkJICogKDMpIHRoZSBkZXN0aW5hdGlvbiBpcyBub3QgdW5kZXIgcmVmcy90YWdzLywgYW5kCisJCSAqICAgICBpZiB0aGUgb2xkIGFuZCBuZXcgdmFsdWUgaXMgYSBjb21taXQsIHRoZSBuZXcKKwkJICogICAgIGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgb2xkLgorCQkgKgorCQkgKiAoNCkgaXQgaXMgZm9yY2VkIHVzaW5nIHRoZSArQTpCIG5vdGF0aW9uLCBvciBieQorCQkgKiAgICAgcGFzc2luZyB0aGUgLS1mb3JjZSBhcmd1bWVudAorCQkgKi8KKworCQllbHNlIGlmICghcmVmLT5kZWxldGlvbiAmJiAhaXNfbnVsbF9zaGExKHJlZi0+b2xkX3NoYTEpKSB7CisJCQlpZiAoc3RhcnRzX3dpdGgocmVmLT5uYW1lLCAicmVmcy90YWdzLyIpKQorCQkJCXJlamVjdF9yZWFzb24gPSBSRUZfU1RBVFVTX1JFSkVDVF9BTFJFQURZX0VYSVNUUzsKKwkJCWVsc2UgaWYgKCFoYXNfc2hhMV9maWxlKHJlZi0+b2xkX3NoYTEpKQorCQkJCXJlamVjdF9yZWFzb24gPSBSRUZfU1RBVFVTX1JFSkVDVF9GRVRDSF9GSVJTVDsKKwkJCWVsc2UgaWYgKCFsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkocmVmLT5vbGRfc2hhMSwgMSkgfHwKKwkJCQkgIWxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShyZWYtPm5ld19zaGExLCAxKSkKKwkJCQlyZWplY3RfcmVhc29uID0gUkVGX1NUQVRVU19SRUpFQ1RfTkVFRFNfRk9SQ0U7CisJCQllbHNlIGlmICghcmVmX25ld2VyKHJlZi0+bmV3X3NoYTEsIHJlZi0+b2xkX3NoYTEpKQorCQkJCXJlamVjdF9yZWFzb24gPSBSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRDsKKwkJfQorCisJCS8qCisJCSAqICItLWZvcmNlIiB3aWxsIGRlZmVhdCBhbnkgcmVqZWN0aW9uIGltcGxlbWVudGVkCisJCSAqIGJ5IHRoZSBydWxlcyBhYm92ZS4KKwkJICovCisJCWlmICghZm9yY2VfcmVmX3VwZGF0ZSkKKwkJCXJlZi0+c3RhdHVzID0gcmVqZWN0X3JlYXNvbjsKKwkJZWxzZSBpZiAocmVqZWN0X3JlYXNvbikKKwkJCXJlZi0+Zm9yY2VkX3VwZGF0ZSA9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfbWVyZ2Uoc3RydWN0IGJyYW5jaCAqcmV0KQoreworCXN0cnVjdCByZW1vdGUgKnJlbW90ZTsKKwljaGFyICpyZWY7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwlpbnQgaTsKKworCWlmICghcmV0KQorCQlyZXR1cm47IC8qIG5vIGJyYW5jaCAqLworCWlmIChyZXQtPm1lcmdlKQorCQlyZXR1cm47IC8qIGFscmVhZHkgcnVuICovCisJaWYgKCFyZXQtPnJlbW90ZV9uYW1lIHx8ICFyZXQtPm1lcmdlX25yKSB7CisJCS8qCisJCSAqIG5vIG1lcmdlIGNvbmZpZzsgbGV0J3MgbWFrZSBzdXJlIHdlIGRvbid0IGNvbmZ1c2UgY2FsbGVycworCQkgKiB3aXRoIGEgbm9uLXplcm8gbWVyZ2VfbnIgYnV0IGEgTlVMTCBtZXJnZQorCQkgKi8KKwkJcmV0LT5tZXJnZV9uciA9IDA7CisJCXJldHVybjsKKwl9CisKKwlyZW1vdGUgPSByZW1vdGVfZ2V0KHJldC0+cmVtb3RlX25hbWUpOworCisJcmV0LT5tZXJnZSA9IHhjYWxsb2MocmV0LT5tZXJnZV9uciwgc2l6ZW9mKCpyZXQtPm1lcmdlKSk7CisJZm9yIChpID0gMDsgaSA8IHJldC0+bWVyZ2VfbnI7IGkrKykgeworCQlyZXQtPm1lcmdlW2ldID0geGNhbGxvYygxLCBzaXplb2YoKipyZXQtPm1lcmdlKSk7CisJCXJldC0+bWVyZ2VbaV0tPnNyYyA9IHhzdHJkdXAocmV0LT5tZXJnZV9uYW1lW2ldKTsKKwkJaWYgKCFyZW1vdGVfZmluZF90cmFja2luZyhyZW1vdGUsIHJldC0+bWVyZ2VbaV0pIHx8CisJCSAgICBzdHJjbXAocmV0LT5yZW1vdGVfbmFtZSwgIi4iKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZHdpbV9yZWYocmV0LT5tZXJnZV9uYW1lW2ldLCBzdHJsZW4ocmV0LT5tZXJnZV9uYW1lW2ldKSwKKwkJCSAgICAgc2hhMSwgJnJlZikgPT0gMSkKKwkJCXJldC0+bWVyZ2VbaV0tPmRzdCA9IHJlZjsKKwkJZWxzZQorCQkJcmV0LT5tZXJnZVtpXS0+ZHN0ID0geHN0cmR1cChyZXQtPm1lcmdlX25hbWVbaV0pOworCX0KK30KKworc3RydWN0IGJyYW5jaCAqYnJhbmNoX2dldChjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBicmFuY2ggKnJldDsKKworCXJlYWRfY29uZmlnKCk7CisJaWYgKCFuYW1lIHx8ICEqbmFtZSB8fCAhc3RyY21wKG5hbWUsICJIRUFEIikpCisJCXJldCA9IGN1cnJlbnRfYnJhbmNoOworCWVsc2UKKwkJcmV0ID0gbWFrZV9icmFuY2gobmFtZSwgMCk7CisJc2V0X21lcmdlKHJldCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKHN0cnVjdCBicmFuY2ggKmJyYW5jaCkKK3sKKwlyZXR1cm4gYnJhbmNoICYmICEhYnJhbmNoLT5tZXJnZTsKK30KKworaW50IGJyYW5jaF9tZXJnZV9tYXRjaGVzKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwKKwkJICAgICAgICAgICAgICAgICBpbnQgaSwKKwkJICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpyZWZuYW1lKQoreworCWlmICghYnJhbmNoIHx8IGkgPCAwIHx8IGkgPj0gYnJhbmNoLT5tZXJnZV9ucikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHJlZm5hbWVfbWF0Y2goYnJhbmNoLT5tZXJnZVtpXS0+c3JjLCByZWZuYW1lKTsKK30KKworX19hdHRyaWJ1dGUoKGZvcm1hdCAocHJpbnRmLDIsMykpKQorc3RhdGljIGNvbnN0IGNoYXIgKmVycm9yX2J1ZihzdHJ1Y3Qgc3RyYnVmICplcnIsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWlmIChlcnIpIHsKKwkJdmFfbGlzdCBhcDsKKwkJdmFfc3RhcnQoYXAsIGZtdCk7CisJCXN0cmJ1Zl92YWRkZihlcnIsIGZtdCwgYXApOworCQl2YV9lbmQoYXApOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworY29uc3QgY2hhciAqYnJhbmNoX2dldF91cHN0cmVhbShzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwlpZiAoIWJyYW5jaCkKKwkJcmV0dXJuIGVycm9yX2J1ZihlcnIsIF8oIkhFQUQgZG9lcyBub3QgcG9pbnQgdG8gYSBicmFuY2giKSk7CisKKwlpZiAoIWJyYW5jaC0+bWVyZ2UgfHwgIWJyYW5jaC0+bWVyZ2VbMF0pIHsKKwkJLyoKKwkJICogbm8gbWVyZ2UgY29uZmlnOyBpcyBpdCBiZWNhdXNlIHRoZSB1c2VyIGRpZG4ndCBkZWZpbmUgYW55LAorCQkgKiBvciBiZWNhdXNlIGl0IGlzIG5vdCBhIHJlYWwgYnJhbmNoLCBhbmQgZ2V0X2JyYW5jaAorCQkgKiBhdXRvLXZpdmlmaWVkIGl0PworCQkgKi8KKwkJaWYgKCFyZWZfZXhpc3RzKGJyYW5jaC0+cmVmbmFtZSkpCisJCQlyZXR1cm4gZXJyb3JfYnVmKGVyciwgXygibm8gc3VjaCBicmFuY2g6ICclcyciKSwKKwkJCQkJIGJyYW5jaC0+bmFtZSk7CisJCXJldHVybiBlcnJvcl9idWYoZXJyLAorCQkJCSBfKCJubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJyVzJyIpLAorCQkJCSBicmFuY2gtPm5hbWUpOworCX0KKworCWlmICghYnJhbmNoLT5tZXJnZVswXS0+ZHN0KQorCQlyZXR1cm4gZXJyb3JfYnVmKGVyciwKKwkJCQkgXygidXBzdHJlYW0gYnJhbmNoICclcycgbm90IHN0b3JlZCBhcyBhIHJlbW90ZS10cmFja2luZyBicmFuY2giKSwKKwkJCQkgYnJhbmNoLT5tZXJnZVswXS0+c3JjKTsKKworCXJldHVybiBicmFuY2gtPm1lcmdlWzBdLT5kc3Q7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp0cmFja2luZ19mb3JfcHVzaF9kZXN0KHN0cnVjdCByZW1vdGUgKnJlbW90ZSwKKwkJCQkJICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCQkgIHN0cnVjdCBzdHJidWYgKmVycikKK3sKKwljaGFyICpyZXQ7CisKKwlyZXQgPSBhcHBseV9yZWZzcGVjcyhyZW1vdGUtPmZldGNoLCByZW1vdGUtPmZldGNoX3JlZnNwZWNfbnIsIHJlZm5hbWUpOworCWlmICghcmV0KQorCQlyZXR1cm4gZXJyb3JfYnVmKGVyciwKKwkJCQkgXygicHVzaCBkZXN0aW5hdGlvbiAnJXMnIG9uIHJlbW90ZSAnJXMnIGhhcyBubyBsb2NhbCB0cmFja2luZyBicmFuY2giKSwKKwkJCQkgcmVmbmFtZSwgcmVtb3RlLT5uYW1lKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYnJhbmNoX2dldF9wdXNoXzEoc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBzdHJ1Y3Qgc3RyYnVmICplcnIpCit7CisJc3RydWN0IHJlbW90ZSAqcmVtb3RlOworCisJaWYgKCFicmFuY2gpCisJCXJldHVybiBlcnJvcl9idWYoZXJyLCBfKCJIRUFEIGRvZXMgbm90IHBvaW50IHRvIGEgYnJhbmNoIikpOworCisJcmVtb3RlID0gcmVtb3RlX2dldChwdXNocmVtb3RlX2Zvcl9icmFuY2goYnJhbmNoLCBOVUxMKSk7CisJaWYgKCFyZW1vdGUpCisJCXJldHVybiBlcnJvcl9idWYoZXJyLAorCQkJCSBfKCJicmFuY2ggJyVzJyBoYXMgbm8gcmVtb3RlIGZvciBwdXNoaW5nIiksCisJCQkJIGJyYW5jaC0+bmFtZSk7CisKKwlpZiAocmVtb3RlLT5wdXNoX3JlZnNwZWNfbnIpIHsKKwkJY2hhciAqZHN0OworCQljb25zdCBjaGFyICpyZXQ7CisKKwkJZHN0ID0gYXBwbHlfcmVmc3BlY3MocmVtb3RlLT5wdXNoLCByZW1vdGUtPnB1c2hfcmVmc3BlY19uciwKKwkJCQkgICAgIGJyYW5jaC0+cmVmbmFtZSk7CisJCWlmICghZHN0KQorCQkJcmV0dXJuIGVycm9yX2J1ZihlcnIsCisJCQkJCSBfKCJwdXNoIHJlZnNwZWNzIGZvciAnJXMnIGRvIG5vdCBpbmNsdWRlICclcyciKSwKKwkJCQkJIHJlbW90ZS0+bmFtZSwgYnJhbmNoLT5uYW1lKTsKKworCQlyZXQgPSB0cmFja2luZ19mb3JfcHVzaF9kZXN0KHJlbW90ZSwgZHN0LCBlcnIpOworCQlmcmVlKGRzdCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHJlbW90ZS0+bWlycm9yKQorCQlyZXR1cm4gdHJhY2tpbmdfZm9yX3B1c2hfZGVzdChyZW1vdGUsIGJyYW5jaC0+cmVmbmFtZSwgZXJyKTsKKworCXN3aXRjaCAocHVzaF9kZWZhdWx0KSB7CisJY2FzZSBQVVNIX0RFRkFVTFRfTk9USElORzoKKwkJcmV0dXJuIGVycm9yX2J1ZihlcnIsIF8oInB1c2ggaGFzIG5vIGRlc3RpbmF0aW9uIChwdXNoLmRlZmF1bHQgaXMgJ25vdGhpbmcnKSIpKTsKKworCWNhc2UgUFVTSF9ERUZBVUxUX01BVENISU5HOgorCWNhc2UgUFVTSF9ERUZBVUxUX0NVUlJFTlQ6CisJCXJldHVybiB0cmFja2luZ19mb3JfcHVzaF9kZXN0KHJlbW90ZSwgYnJhbmNoLT5yZWZuYW1lLCBlcnIpOworCisJY2FzZSBQVVNIX0RFRkFVTFRfVVBTVFJFQU06CisJCXJldHVybiBicmFuY2hfZ2V0X3Vwc3RyZWFtKGJyYW5jaCwgZXJyKTsKKworCWNhc2UgUFVTSF9ERUZBVUxUX1VOU1BFQ0lGSUVEOgorCWNhc2UgUFVTSF9ERUZBVUxUX1NJTVBMRToKKwkJeworCQkJY29uc3QgY2hhciAqdXAsICpjdXI7CisKKwkJCXVwID0gYnJhbmNoX2dldF91cHN0cmVhbShicmFuY2gsIGVycik7CisJCQlpZiAoIXVwKQorCQkJCXJldHVybiBOVUxMOworCQkJY3VyID0gdHJhY2tpbmdfZm9yX3B1c2hfZGVzdChyZW1vdGUsIGJyYW5jaC0+cmVmbmFtZSwgZXJyKTsKKwkJCWlmICghY3VyKQorCQkJCXJldHVybiBOVUxMOworCQkJaWYgKHN0cmNtcChjdXIsIHVwKSkKKwkJCQlyZXR1cm4gZXJyb3JfYnVmKGVyciwKKwkJCQkJCSBfKCJjYW5ub3QgcmVzb2x2ZSAnc2ltcGxlJyBwdXNoIHRvIGEgc2luZ2xlIGRlc3RpbmF0aW9uIikpOworCQkJcmV0dXJuIGN1cjsKKwkJfQorCX0KKworCWRpZSgiQlVHOiB1bmhhbmRsZWQgcHVzaCBzaXR1YXRpb24iKTsKK30KKworY29uc3QgY2hhciAqYnJhbmNoX2dldF9wdXNoKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWlmICghYnJhbmNoLT5wdXNoX3RyYWNraW5nX3JlZikKKwkJYnJhbmNoLT5wdXNoX3RyYWNraW5nX3JlZiA9IGJyYW5jaF9nZXRfcHVzaF8xKGJyYW5jaCwgZXJyKTsKKwlyZXR1cm4gYnJhbmNoLT5wdXNoX3RyYWNraW5nX3JlZjsKK30KKworc3RhdGljIGludCBpZ25vcmVfc3ltcmVmX3VwZGF0ZShjb25zdCBjaGFyICpyZWZuYW1lKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IGZsYWc7CisKKwlpZiAoIXJlc29sdmVfcmVmX3Vuc2FmZShyZWZuYW1lLCAwLCBzaGExLCAmZmxhZykpCisJCXJldHVybiAwOyAvKiBub24tZXhpc3RpbmcgcmVmcyBhcmUgT0sgKi8KKwlyZXR1cm4gKGZsYWcgJiBSRUZfSVNTWU1SRUYpOworfQorCisvKgorICogQ3JlYXRlIGFuZCByZXR1cm4gYSBsaXN0IG9mIChzdHJ1Y3QgcmVmKSBjb25zaXN0aW5nIG9mIGNvcGllcyBvZgorICogZWFjaCByZW1vdGVfcmVmIHRoYXQgbWF0Y2hlcyByZWZzcGVjLiAgcmVmc3BlYyBtdXN0IGJlIGEgcGF0dGVybi4KKyAqIEZpbGwgaW4gdGhlIGNvcGllcycgcGVlcl9yZWYgdG8gZGVzY3JpYmUgdGhlIGxvY2FsIHRyYWNraW5nIHJlZnMgdG8KKyAqIHdoaWNoIHRoZXkgbWFwLiAgT21pdCBhbnkgcmVmZXJlbmNlcyB0aGF0IHdvdWxkIG1hcCB0byBhbiBleGlzdGluZworICogbG9jYWwgc3ltYm9saWMgcmVmLgorICovCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X2V4cGFuZGVkX21hcChjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwkJCQkgICAgY29uc3Qgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCByZWYgKnJldCA9IE5VTEw7CisJc3RydWN0IHJlZiAqKnRhaWwgPSAmcmV0OworCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJY2hhciAqZXhwbl9uYW1lID0gTlVMTDsKKworCQlpZiAoc3RyY2hyKHJlZi0+bmFtZSwgJ14nKSkKKwkJCWNvbnRpbnVlOyAvKiBhIGRlcmVmZXJlbmNlIGl0ZW0gKi8KKwkJaWYgKG1hdGNoX25hbWVfd2l0aF9wYXR0ZXJuKHJlZnNwZWMtPnNyYywgcmVmLT5uYW1lLAorCQkJCQkgICAgcmVmc3BlYy0+ZHN0LCAmZXhwbl9uYW1lKSAmJgorCQkgICAgIWlnbm9yZV9zeW1yZWZfdXBkYXRlKGV4cG5fbmFtZSkpIHsKKwkJCXN0cnVjdCByZWYgKmNweSA9IGNvcHlfcmVmKHJlZik7CisKKwkJCWNweS0+cGVlcl9yZWYgPSBhbGxvY19yZWYoZXhwbl9uYW1lKTsKKwkJCWlmIChyZWZzcGVjLT5mb3JjZSkKKwkJCQljcHktPnBlZXJfcmVmLT5mb3JjZSA9IDE7CisJCQkqdGFpbCA9IGNweTsKKwkJCXRhaWwgPSAmY3B5LT5uZXh0OworCQl9CisJCWZyZWUoZXhwbl9uYW1lKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZiAqZmluZF9yZWZfYnlfbmFtZV9hYmJyZXYoY29uc3Qgc3RydWN0IHJlZiAqcmVmcywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgcmVmICpyZWY7CisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAocmVmbmFtZV9tYXRjaChuYW1lLCByZWYtPm5hbWUpKQorCQkJcmV0dXJuIHJlZjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCByZWYgKmdldF9yZW1vdGVfcmVmKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IHN0cnVjdCByZWYgKnJlZiA9IGZpbmRfcmVmX2J5X25hbWVfYWJicmV2KHJlbW90ZV9yZWZzLCBuYW1lKTsKKworCWlmICghcmVmKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBjb3B5X3JlZihyZWYpOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X2xvY2FsX3JlZihjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghbmFtZSB8fCBuYW1lWzBdID09ICdcMCcpCisJCXJldHVybiBOVUxMOworCisJaWYgKHN0YXJ0c193aXRoKG5hbWUsICJyZWZzLyIpKQorCQlyZXR1cm4gYWxsb2NfcmVmKG5hbWUpOworCisJaWYgKHN0YXJ0c193aXRoKG5hbWUsICJoZWFkcy8iKSB8fAorCSAgICBzdGFydHNfd2l0aChuYW1lLCAidGFncy8iKSB8fAorCSAgICBzdGFydHNfd2l0aChuYW1lLCAicmVtb3Rlcy8iKSkKKwkJcmV0dXJuIGFsbG9jX3JlZl93aXRoX3ByZWZpeCgicmVmcy8iLCA1LCBuYW1lKTsKKworCXJldHVybiBhbGxvY19yZWZfd2l0aF9wcmVmaXgoInJlZnMvaGVhZHMvIiwgMTEsIG5hbWUpOworfQorCitpbnQgZ2V0X2ZldGNoX21hcChjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwkJICBjb25zdCBzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYywKKwkJICBzdHJ1Y3QgcmVmICoqKnRhaWwsCisJCSAgaW50IG1pc3Npbmdfb2spCit7CisJc3RydWN0IHJlZiAqcmVmX21hcCwgKipybXA7CisKKwlpZiAocmVmc3BlYy0+cGF0dGVybikgeworCQlyZWZfbWFwID0gZ2V0X2V4cGFuZGVkX21hcChyZW1vdGVfcmVmcywgcmVmc3BlYyk7CisJfSBlbHNlIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHJlZnNwZWMtPnNyY1swXSA/IHJlZnNwZWMtPnNyYyA6ICJIRUFEIjsKKworCQlpZiAocmVmc3BlYy0+ZXhhY3Rfc2hhMSkgeworCQkJcmVmX21hcCA9IGFsbG9jX3JlZihuYW1lKTsKKwkJCWdldF9zaGExX2hleChuYW1lLCByZWZfbWFwLT5vbGRfc2hhMSk7CisJCX0gZWxzZSB7CisJCQlyZWZfbWFwID0gZ2V0X3JlbW90ZV9yZWYocmVtb3RlX3JlZnMsIG5hbWUpOworCQl9CisJCWlmICghbWlzc2luZ19vayAmJiAhcmVmX21hcCkKKwkJCWRpZSgiQ291bGRuJ3QgZmluZCByZW1vdGUgcmVmICVzIiwgbmFtZSk7CisJCWlmIChyZWZfbWFwKSB7CisJCQlyZWZfbWFwLT5wZWVyX3JlZiA9IGdldF9sb2NhbF9yZWYocmVmc3BlYy0+ZHN0KTsKKwkJCWlmIChyZWZfbWFwLT5wZWVyX3JlZiAmJiByZWZzcGVjLT5mb3JjZSkKKwkJCQlyZWZfbWFwLT5wZWVyX3JlZi0+Zm9yY2UgPSAxOworCQl9CisJfQorCisJZm9yIChybXAgPSAmcmVmX21hcDsgKnJtcDsgKSB7CisJCWlmICgoKnJtcCktPnBlZXJfcmVmKSB7CisJCQlpZiAoIXN0YXJ0c193aXRoKCgqcm1wKS0+cGVlcl9yZWYtPm5hbWUsICJyZWZzLyIpIHx8CisJCQkgICAgY2hlY2tfcmVmbmFtZV9mb3JtYXQoKCpybXApLT5wZWVyX3JlZi0+bmFtZSwgMCkpIHsKKwkJCQlzdHJ1Y3QgcmVmICppZ25vcmUgPSAqcm1wOworCQkJCWVycm9yKCIqIElnbm9yaW5nIGZ1bm55IHJlZiAnJXMnIGxvY2FsbHkiLAorCQkJCSAgICAgICgqcm1wKS0+cGVlcl9yZWYtPm5hbWUpOworCQkJCSpybXAgPSAoKnJtcCktPm5leHQ7CisJCQkJZnJlZShpZ25vcmUtPnBlZXJfcmVmKTsKKwkJCQlmcmVlKGlnbm9yZSk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJcm1wID0gJigoKnJtcCktPm5leHQpOworCX0KKworCWlmIChyZWZfbWFwKQorCQl0YWlsX2xpbmtfcmVmKHJlZl9tYXAsIHRhaWwpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCByZXNvbHZlX3JlbW90ZV9zeW1yZWYoc3RydWN0IHJlZiAqcmVmLCBzdHJ1Y3QgcmVmICpsaXN0KQoreworCWlmICghcmVmLT5zeW1yZWYpCisJCXJldHVybiAwOworCWZvciAoOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKKwkJaWYgKCFzdHJjbXAocmVmLT5zeW1yZWYsIGxpc3QtPm5hbWUpKSB7CisJCQloYXNoY3B5KHJlZi0+b2xkX3NoYTEsIGxpc3QtPm9sZF9zaGExKTsKKwkJCXJldHVybiAwOworCQl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHVubWFya19hbmRfZnJlZShzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIHVuc2lnbmVkIGludCBtYXJrKQoreworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqdGVtcCA9IGxpc3Q7CisJCXRlbXAtPml0ZW0tPm9iamVjdC5mbGFncyAmPSB+bWFyazsKKwkJbGlzdCA9IHRlbXAtPm5leHQ7CisJCWZyZWUodGVtcCk7CisJfQorfQorCitpbnQgcmVmX25ld2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvOworCXN0cnVjdCBjb21taXQgKm9sZCwgKm5ldzsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsICp1c2VkOworCWludCBmb3VuZCA9IDA7CisKKwkvKgorCSAqIEJvdGggbmV3IGFuZCBvbGQgbXVzdCBiZSBjb21taXQtaXNoIGFuZCBuZXcgaXMgZGVzY2VuZGFudCBvZgorCSAqIG9sZC4gIE90aGVyd2lzZSB3ZSByZXF1aXJlIC0tZm9yY2UuCisJICovCisJbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3Qob2xkX3NoYTEpLCBOVUxMLCAwKTsKKwlpZiAoIW8gfHwgby0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gMDsKKwlvbGQgPSAoc3RydWN0IGNvbW1pdCAqKSBvOworCisJbyA9IGRlcmVmX3RhZyhwYXJzZV9vYmplY3QobmV3X3NoYTEpLCBOVUxMLCAwKTsKKwlpZiAoIW8gfHwgby0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gMDsKKwluZXcgPSAoc3RydWN0IGNvbW1pdCAqKSBvOworCisJaWYgKHBhcnNlX2NvbW1pdChuZXcpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwl1c2VkID0gbGlzdCA9IE5VTEw7CisJY29tbWl0X2xpc3RfaW5zZXJ0KG5ldywgJmxpc3QpOworCXdoaWxlIChsaXN0KSB7CisJCW5ldyA9IHBvcF9tb3N0X3JlY2VudF9jb21taXQoJmxpc3QsIFRNUF9NQVJLKTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KG5ldywgJnVzZWQpOworCQlpZiAobmV3ID09IG9sZCkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJdW5tYXJrX2FuZF9mcmVlKGxpc3QsIFRNUF9NQVJLKTsKKwl1bm1hcmtfYW5kX2ZyZWUodXNlZCwgVE1QX01BUkspOworCXJldHVybiBmb3VuZDsKK30KKworLyoKKyAqIENvbXBhcmUgYSBicmFuY2ggd2l0aCBpdHMgdXBzdHJlYW0sIGFuZCBzYXZlIHRoZWlyIGRpZmZlcmVuY2VzIChudW1iZXIKKyAqIG9mIGNvbW1pdHMpIGluICpudW1fb3VycyBhbmQgKm51bV90aGVpcnMuIFRoZSBuYW1lIG9mIHRoZSB1cHN0cmVhbSBicmFuY2gKKyAqIChvciBOVUxMIGlmIG5vIHVwc3RyZWFtIGlzIGRlZmluZWQpIGlzIHJldHVybmVkIHZpYSAqdXBzdHJlYW1fbmFtZSwgaWYgaXQKKyAqIGlzIG5vdCBpdHNlbGYgTlVMTC4KKyAqCisgKiBSZXR1cm5zIC0xIGlmIG51bV9vdXJzIGFuZCBudW1fdGhlaXJzIGNvdWxkIG5vdCBiZSBmaWxsZWQgaW4gKGUuZy4sIG5vCisgKiB1cHN0cmVhbSBkZWZpbmVkLCBvciByZWYgZG9lcyBub3QgZXhpc3QpLCAwIG90aGVyd2lzZS4KKyAqLworaW50IHN0YXRfdHJhY2tpbmdfaW5mbyhzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIGludCAqbnVtX291cnMsIGludCAqbnVtX3RoZWlycywKKwkJICAgICAgIGNvbnN0IGNoYXIgKip1cHN0cmVhbV9uYW1lKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IGNvbW1pdCAqb3VycywgKnRoZWlyczsKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2czsKKwljb25zdCBjaGFyICpiYXNlOworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3YgPSBBUkdWX0FSUkFZX0lOSVQ7CisKKwkvKiBDYW5ub3Qgc3RhdCB1bmxlc3Mgd2UgYXJlIG1hcmtlZCB0byBidWlsZCBvbiB0b3Agb2Ygc29tZWJvZHkgZWxzZS4gKi8KKwliYXNlID0gYnJhbmNoX2dldF91cHN0cmVhbShicmFuY2gsIE5VTEwpOworCWlmICh1cHN0cmVhbV9uYW1lKQorCQkqdXBzdHJlYW1fbmFtZSA9IGJhc2U7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLTE7CisKKwkvKiBDYW5ub3Qgc3RhdCBpZiB3aGF0IHdlIHVzZWQgdG8gYnVpbGQgb24gbm8gbG9uZ2VyIGV4aXN0cyAqLworCWlmIChyZWFkX3JlZihiYXNlLCBzaGExKSkKKwkJcmV0dXJuIC0xOworCXRoZWlycyA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpOworCWlmICghdGhlaXJzKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocmVhZF9yZWYoYnJhbmNoLT5yZWZuYW1lLCBzaGExKSkKKwkJcmV0dXJuIC0xOworCW91cnMgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwlpZiAoIW91cnMpCisJCXJldHVybiAtMTsKKworCS8qIGFyZSB3ZSB0aGUgc2FtZT8gKi8KKwlpZiAodGhlaXJzID09IG91cnMpIHsKKwkJKm51bV90aGVpcnMgPSAqbnVtX291cnMgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBSdW4gInJldi1saXN0IC0tbGVmdC1yaWdodCBvdXJzLi4udGhlaXJzIiBpbnRlcm5hbGx5Li4uICovCisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiIik7IC8qIGlnbm9yZWQgKi8KKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICItLWxlZnQtcmlnaHQiKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZhcmd2LCAiJXMuLi4lcyIsCisJCQkgc2hhMV90b19oZXgob3Vycy0+b2JqZWN0LnNoYTEpLAorCQkJIHNoYTFfdG9faGV4KHRoZWlycy0+b2JqZWN0LnNoYTEpKTsKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICItLSIpOworCisJaW5pdF9yZXZpc2lvbnMoJnJldnMsIE5VTEwpOworCXNldHVwX3JldmlzaW9ucyhhcmd2LmFyZ2MsIGFyZ3YuYXJndiwgJnJldnMsIE5VTEwpOworCWlmIChwcmVwYXJlX3JldmlzaW9uX3dhbGsoJnJldnMpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisKKwkvKiAuLi4gYW5kIGNvdW50IHRoZSBjb21taXRzIG9uIGVhY2ggc2lkZS4gKi8KKwkqbnVtX291cnMgPSAwOworCSpudW1fdGhlaXJzID0gMDsKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gZ2V0X3JldmlzaW9uKCZyZXZzKTsKKwkJaWYgKCFjKQorCQkJYnJlYWs7CisJCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKKwkJCSgqbnVtX291cnMpKys7CisJCWVsc2UKKwkJCSgqbnVtX3RoZWlycykrKzsKKwl9CisKKwkvKiBjbGVhciBvYmplY3QgZmxhZ3Mgc211ZGdlZCBieSB0aGUgYWJvdmUgdHJhdmVyc2FsICovCisJY2xlYXJfY29tbWl0X21hcmtzKG91cnMsIEFMTF9SRVZfRkxBR1MpOworCWNsZWFyX2NvbW1pdF9tYXJrcyh0aGVpcnMsIEFMTF9SRVZfRkxBR1MpOworCisJYXJndl9hcnJheV9jbGVhcigmYXJndik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSB3aGVuIHRoZXJlIGlzIGFueXRoaW5nIHRvIHJlcG9ydCwgb3RoZXJ3aXNlIGZhbHNlLgorICovCitpbnQgZm9ybWF0X3RyYWNraW5nX2luZm8oc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpbnQgb3VycywgdGhlaXJzOworCWNvbnN0IGNoYXIgKmZ1bGxfYmFzZTsKKwljaGFyICpiYXNlOworCWludCB1cHN0cmVhbV9pc19nb25lID0gMDsKKworCWlmIChzdGF0X3RyYWNraW5nX2luZm8oYnJhbmNoLCAmb3VycywgJnRoZWlycywgJmZ1bGxfYmFzZSkgPCAwKSB7CisJCWlmICghZnVsbF9iYXNlKQorCQkJcmV0dXJuIDA7CisJCXVwc3RyZWFtX2lzX2dvbmUgPSAxOworCX0KKworCWJhc2UgPSBzaG9ydGVuX3VuYW1iaWd1b3VzX3JlZihmdWxsX2Jhc2UsIDApOworCWlmICh1cHN0cmVhbV9pc19nb25lKSB7CisJCXN0cmJ1Zl9hZGRmKHNiLAorCQkJXygiWW91ciBicmFuY2ggaXMgYmFzZWQgb24gJyVzJywgYnV0IHRoZSB1cHN0cmVhbSBpcyBnb25lLlxuIiksCisJCQliYXNlKTsKKwkJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpCisJCQlzdHJidWZfYWRkZihzYiwKKwkJCQlfKCIgICh1c2UgXCJnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW1cIiB0byBmaXh1cClcbiIpKTsKKwl9IGVsc2UgaWYgKCFvdXJzICYmICF0aGVpcnMpIHsKKwkJc3RyYnVmX2FkZGYoc2IsCisJCQlfKCJZb3VyIGJyYW5jaCBpcyB1cC10by1kYXRlIHdpdGggJyVzJy5cbiIpLAorCQkJYmFzZSk7CisJfSBlbHNlIGlmICghdGhlaXJzKSB7CisJCXN0cmJ1Zl9hZGRmKHNiLAorCQkJUV8oIllvdXIgYnJhbmNoIGlzIGFoZWFkIG9mICclcycgYnkgJWQgY29tbWl0LlxuIiwKKwkJCSAgICJZb3VyIGJyYW5jaCBpcyBhaGVhZCBvZiAnJXMnIGJ5ICVkIGNvbW1pdHMuXG4iLAorCQkJICAgb3VycyksCisJCQliYXNlLCBvdXJzKTsKKwkJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpCisJCQlzdHJidWZfYWRkZihzYiwKKwkJCQlfKCIgICh1c2UgXCJnaXQgcHVzaFwiIHRvIHB1Ymxpc2ggeW91ciBsb2NhbCBjb21taXRzKVxuIikpOworCX0gZWxzZSBpZiAoIW91cnMpIHsKKwkJc3RyYnVmX2FkZGYoc2IsCisJCQlRXygiWW91ciBicmFuY2ggaXMgYmVoaW5kICclcycgYnkgJWQgY29tbWl0LCAiCisJCQkgICAgICAgImFuZCBjYW4gYmUgZmFzdC1mb3J3YXJkZWQuXG4iLAorCQkJICAgIllvdXIgYnJhbmNoIGlzIGJlaGluZCAnJXMnIGJ5ICVkIGNvbW1pdHMsICIKKwkJCSAgICAgICAiYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC5cbiIsCisJCQkgICB0aGVpcnMpLAorCQkJYmFzZSwgdGhlaXJzKTsKKwkJaWYgKGFkdmljZV9zdGF0dXNfaGludHMpCisJCQlzdHJidWZfYWRkZihzYiwKKwkJCQlfKCIgICh1c2UgXCJnaXQgcHVsbFwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaClcbiIpKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZihzYiwKKwkJCVFfKCJZb3VyIGJyYW5jaCBhbmQgJyVzJyBoYXZlIGRpdmVyZ2VkLFxuIgorCQkJICAgICAgICJhbmQgaGF2ZSAlZCBhbmQgJWQgZGlmZmVyZW50IGNvbW1pdCBlYWNoLCAiCisJCQkgICAgICAgInJlc3BlY3RpdmVseS5cbiIsCisJCQkgICAiWW91ciBicmFuY2ggYW5kICclcycgaGF2ZSBkaXZlcmdlZCxcbiIKKwkJCSAgICAgICAiYW5kIGhhdmUgJWQgYW5kICVkIGRpZmZlcmVudCBjb21taXRzIGVhY2gsICIKKwkJCSAgICAgICAicmVzcGVjdGl2ZWx5LlxuIiwKKwkJCSAgIHRoZWlycyksCisJCQliYXNlLCBvdXJzLCB0aGVpcnMpOworCQlpZiAoYWR2aWNlX3N0YXR1c19oaW50cykKKwkJCXN0cmJ1Zl9hZGRmKHNiLAorCQkJCV8oIiAgKHVzZSBcImdpdCBwdWxsXCIgdG8gbWVyZ2UgdGhlIHJlbW90ZSBicmFuY2ggaW50byB5b3VycylcbiIpKTsKKwl9CisJZnJlZShiYXNlKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBvbmVfbG9jYWxfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgcmVmICoqKmxvY2FsX3RhaWwgPSBjYl9kYXRhOworCXN0cnVjdCByZWYgKnJlZjsKKwlpbnQgbGVuOworCisJLyogd2UgYWxyZWFkeSBrbm93IGl0IHN0YXJ0cyB3aXRoIHJlZnMvIHRvIGdldCBoZXJlICovCisJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZm5hbWUgKyA1LCAwKSkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBzdHJsZW4ocmVmbmFtZSkgKyAxOworCXJlZiA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpyZWYpICsgbGVuKTsKKwloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIG9pZC0+aGFzaCk7CisJbWVtY3B5KHJlZi0+bmFtZSwgcmVmbmFtZSwgbGVuKTsKKwkqKmxvY2FsX3RhaWwgPSByZWY7CisJKmxvY2FsX3RhaWwgPSAmcmVmLT5uZXh0OworCXJldHVybiAwOworfQorCitzdHJ1Y3QgcmVmICpnZXRfbG9jYWxfaGVhZHModm9pZCkKK3sKKwlzdHJ1Y3QgcmVmICpsb2NhbF9yZWZzID0gTlVMTCwgKipsb2NhbF90YWlsID0gJmxvY2FsX3JlZnM7CisKKwlmb3JfZWFjaF9yZWYob25lX2xvY2FsX3JlZiwgJmxvY2FsX3RhaWwpOworCXJldHVybiBsb2NhbF9yZWZzOworfQorCitzdHJ1Y3QgcmVmICpndWVzc19yZW1vdGVfaGVhZChjb25zdCBzdHJ1Y3QgcmVmICpoZWFkLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHJlZiAqcmVmcywKKwkJCSAgICAgIGludCBhbGwpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcjsKKwlzdHJ1Y3QgcmVmICpsaXN0ID0gTlVMTDsKKwlzdHJ1Y3QgcmVmICoqdGFpbCA9ICZsaXN0OworCisJaWYgKCFoZWFkKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogU29tZSB0cmFuc3BvcnRzIHN1cHBvcnQgZGlyZWN0bHkgcGVla2luZyBhdAorCSAqIHdoZXJlIEhFQUQgcG9pbnRzOyBpZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGVuCisJICogd2UgZG9uJ3QgaGF2ZSB0byBndWVzcy4KKwkgKi8KKwlpZiAoaGVhZC0+c3ltcmVmKQorCQlyZXR1cm4gY29weV9yZWYoZmluZF9yZWZfYnlfbmFtZShyZWZzLCBoZWFkLT5zeW1yZWYpKTsKKworCS8qIElmIHJlZnMvaGVhZHMvbWFzdGVyIGNvdWxkIGJlIHJpZ2h0LCBpdCBpcy4gKi8KKwlpZiAoIWFsbCkgeworCQlyID0gZmluZF9yZWZfYnlfbmFtZShyZWZzLCAicmVmcy9oZWFkcy9tYXN0ZXIiKTsKKwkJaWYgKHIgJiYgIWhhc2hjbXAoci0+b2xkX3NoYTEsIGhlYWQtPm9sZF9zaGExKSkKKwkJCXJldHVybiBjb3B5X3JlZihyKTsKKwl9CisKKwkvKiBMb29rIGZvciBhbm90aGVyIHJlZiB0aGF0IHBvaW50cyB0aGVyZSAqLworCWZvciAociA9IHJlZnM7IHI7IHIgPSByLT5uZXh0KSB7CisJCWlmIChyICE9IGhlYWQgJiYKKwkJICAgIHN0YXJ0c193aXRoKHItPm5hbWUsICJyZWZzL2hlYWRzLyIpICYmCisJCSAgICAhaGFzaGNtcChyLT5vbGRfc2hhMSwgaGVhZC0+b2xkX3NoYTEpKSB7CisJCQkqdGFpbCA9IGNvcHlfcmVmKHIpOworCQkJdGFpbCA9ICYoKCp0YWlsKS0+bmV4dCk7CisJCQlpZiAoIWFsbCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBsaXN0OworfQorCitzdHJ1Y3Qgc3RhbGVfaGVhZHNfaW5mbyB7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZWZfbmFtZXM7CisJc3RydWN0IHJlZiAqKnN0YWxlX3JlZnNfdGFpbDsKKwlzdHJ1Y3QgcmVmc3BlYyAqcmVmczsKKwlpbnQgcmVmX2NvdW50OworfTsKKworc3RhdGljIGludCBnZXRfc3RhbGVfaGVhZHNfY2IoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBzdGFsZV9oZWFkc19pbmZvICppbmZvID0gY2JfZGF0YTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbWF0Y2hlcyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCByZWZzcGVjIHF1ZXJ5OworCWludCBpLCBzdGFsZSA9IDE7CisJbWVtc2V0KCZxdWVyeSwgMCwgc2l6ZW9mKHN0cnVjdCByZWZzcGVjKSk7CisJcXVlcnkuZHN0ID0gKGNoYXIgKilyZWZuYW1lOworCisJcXVlcnlfcmVmc3BlY3NfbXVsdGlwbGUoaW5mby0+cmVmcywgaW5mby0+cmVmX2NvdW50LCAmcXVlcnksICZtYXRjaGVzKTsKKwlpZiAobWF0Y2hlcy5uciA9PSAwKQorCQlnb3RvIGNsZWFuX2V4aXQ7IC8qIE5vIG1hdGNoZXMgKi8KKworCS8qCisJICogSWYgd2UgZGlkIGZpbmQgYSBzdWl0YWJsZSByZWZzcGVjIGFuZCBpdCdzIG5vdCBhIHN5bXJlZiBhbmQKKwkgKiBpdCdzIG5vdCBpbiB0aGUgbGlzdCBvZiByZWZzIHRoYXQgY3VycmVudGx5IGV4aXN0IGluIHRoYXQKKwkgKiByZW1vdGUsIHdlIGNvbnNpZGVyIGl0IHRvIGJlIHN0YWxlLiBJbiBvcmRlciB0byBkZWFsIHdpdGgKKwkgKiBvdmVybGFwcGluZyByZWZzcGVjcywgd2UgbmVlZCB0byBnbyBvdmVyIGFsbCBvZiB0aGUKKwkgKiBtYXRjaGluZyByZWZzLgorCSAqLworCWlmIChmbGFncyAmIFJFRl9JU1NZTVJFRikKKwkJZ290byBjbGVhbl9leGl0OworCisJZm9yIChpID0gMDsgc3RhbGUgJiYgaSA8IG1hdGNoZXMubnI7IGkrKykKKwkJaWYgKHN0cmluZ19saXN0X2hhc19zdHJpbmcoaW5mby0+cmVmX25hbWVzLCBtYXRjaGVzLml0ZW1zW2ldLnN0cmluZykpCisJCQlzdGFsZSA9IDA7CisKKwlpZiAoc3RhbGUpIHsKKwkJc3RydWN0IHJlZiAqcmVmID0gbWFrZV9saW5rZWRfcmVmKHJlZm5hbWUsICZpbmZvLT5zdGFsZV9yZWZzX3RhaWwpOworCQloYXNoY3B5KHJlZi0+bmV3X3NoYTEsIG9pZC0+aGFzaCk7CisJfQorCitjbGVhbl9leGl0OgorCXN0cmluZ19saXN0X2NsZWFyKCZtYXRjaGVzLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJlZiAqZ2V0X3N0YWxlX2hlYWRzKHN0cnVjdCByZWZzcGVjICpyZWZzLCBpbnQgcmVmX2NvdW50LCBzdHJ1Y3QgcmVmICpmZXRjaF9tYXApCit7CisJc3RydWN0IHJlZiAqcmVmLCAqc3RhbGVfcmVmcyA9IE5VTEw7CisJc3RydWN0IHN0cmluZ19saXN0IHJlZl9uYW1lcyA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJc3RydWN0IHN0YWxlX2hlYWRzX2luZm8gaW5mbzsKKworCWluZm8ucmVmX25hbWVzID0gJnJlZl9uYW1lczsKKwlpbmZvLnN0YWxlX3JlZnNfdGFpbCA9ICZzdGFsZV9yZWZzOworCWluZm8ucmVmcyA9IHJlZnM7CisJaW5mby5yZWZfY291bnQgPSByZWZfY291bnQ7CisJZm9yIChyZWYgPSBmZXRjaF9tYXA7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJlZl9uYW1lcywgcmVmLT5uYW1lKTsKKwlzdHJpbmdfbGlzdF9zb3J0KCZyZWZfbmFtZXMpOworCWZvcl9lYWNoX3JlZihnZXRfc3RhbGVfaGVhZHNfY2IsICZpbmZvKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmcmVmX25hbWVzLCAwKTsKKwlyZXR1cm4gc3RhbGVfcmVmczsKK30KKworLyoKKyAqIENvbXBhcmUtYW5kLXN3YXAKKyAqLworc3RhdGljIHZvaWQgY2xlYXJfY2FzX29wdGlvbihzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICpjYXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FzLT5ucjsgaSsrKQorCQlmcmVlKGNhcy0+ZW50cnlbaV0ucmVmbmFtZSk7CisJZnJlZShjYXMtPmVudHJ5KTsKKwltZW1zZXQoY2FzLCAwLCBzaXplb2YoKmNhcykpOworfQorCitzdGF0aWMgc3RydWN0IHB1c2hfY2FzICphZGRfY2FzX2VudHJ5KHN0cnVjdCBwdXNoX2Nhc19vcHRpb24gKmNhcywKKwkJCQkgICAgICBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCSAgICAgIHNpemVfdCByZWZuYW1lbGVuKQoreworCXN0cnVjdCBwdXNoX2NhcyAqZW50cnk7CisJQUxMT0NfR1JPVyhjYXMtPmVudHJ5LCBjYXMtPm5yICsgMSwgY2FzLT5hbGxvYyk7CisJZW50cnkgPSAmY2FzLT5lbnRyeVtjYXMtPm5yKytdOworCW1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOworCWVudHJ5LT5yZWZuYW1lID0geG1lbWR1cHoocmVmbmFtZSwgcmVmbmFtZWxlbik7CisJcmV0dXJuIGVudHJ5OworfQorCitpbnQgcGFyc2VfcHVzaF9jYXNfb3B0aW9uKHN0cnVjdCBwdXNoX2Nhc19vcHRpb24gKmNhcywgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJY29uc3QgY2hhciAqY29sb247CisJc3RydWN0IHB1c2hfY2FzICplbnRyeTsKKworCWlmICh1bnNldCkgeworCQkvKiAiLS1uby08b3B0aW9uPiIgKi8KKwkJY2xlYXJfY2FzX29wdGlvbihjYXMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIWFyZykgeworCQkvKiBqdXN0ICItLTxvcHRpb24+IiAqLworCQljYXMtPnVzZV90cmFja2luZ19mb3JfcmVzdCA9IDE7CisJCXJldHVybiAwOworCX0KKworCS8qICItLTxvcHRpb24+PXJlZm5hbWUiIG9yICItLTxvcHRpb24+PXJlZm5hbWU6dmFsdWUiICovCisJY29sb24gPSBzdHJjaHJudWwoYXJnLCAnOicpOworCWVudHJ5ID0gYWRkX2Nhc19lbnRyeShjYXMsIGFyZywgY29sb24gLSBhcmcpOworCWlmICghKmNvbG9uKQorCQllbnRyeS0+dXNlX3RyYWNraW5nID0gMTsKKwllbHNlIGlmIChnZXRfc2hhMShjb2xvbiArIDEsIGVudHJ5LT5leHBlY3QpKQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBwYXJzZSBleHBlY3RlZCBvYmplY3QgbmFtZSAnJXMnIiwgY29sb24gKyAxKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlb3B0X3B1c2hfY2FzX29wdGlvbihjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCXJldHVybiBwYXJzZV9wdXNoX2Nhc19vcHRpb24ob3B0LT52YWx1ZSwgYXJnLCB1bnNldCk7Cit9CisKK2ludCBpc19lbXB0eV9jYXMoY29uc3Qgc3RydWN0IHB1c2hfY2FzX29wdGlvbiAqY2FzKQoreworCXJldHVybiAhY2FzLT51c2VfdHJhY2tpbmdfZm9yX3Jlc3QgJiYgIWNhcy0+bnI7Cit9CisKKy8qCisgKiBMb29rIGF0IHJlbW90ZS5mZXRjaCByZWZzcGVjIGFuZCBzZWUgaWYgd2UgaGF2ZSBhIHJlbW90ZQorICogdHJhY2tpbmcgYnJhbmNoIGZvciB0aGUgcmVmbmFtZSB0aGVyZS4gIEZpbGwgaXRzIGN1cnJlbnQKKyAqIHZhbHVlIGluIHNoYTFbXS4KKyAqIElmIHdlIGNhbm5vdCBkbyBzbywgcmV0dXJuIG5lZ2F0aXZlIHRvIHNpZ25hbCBhbiBlcnJvci4KKyAqLworc3RhdGljIGludCByZW1vdGVfdHJhY2tpbmcoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJICAgdW5zaWduZWQgY2hhciBzaGExWzIwXSkKK3sKKwljaGFyICpkc3Q7CisKKwlkc3QgPSBhcHBseV9yZWZzcGVjcyhyZW1vdGUtPmZldGNoLCByZW1vdGUtPmZldGNoX3JlZnNwZWNfbnIsIHJlZm5hbWUpOworCWlmICghZHN0KQorCQlyZXR1cm4gLTE7IC8qIG5vIHRyYWNraW5nIHJlZiBmb3IgcmVmbmFtZSBhdCByZW1vdGUgKi8KKwlpZiAocmVhZF9yZWYoZHN0LCBzaGExKSkKKwkJcmV0dXJuIC0xOyAvKiB3ZSBrbm93IHdoYXQgdGhlIHRyYWNraW5nIHJlZiBpcyBidXQgd2UgY2Fubm90IHJlYWQgaXQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXBwbHlfY2FzKHN0cnVjdCBwdXNoX2Nhc19vcHRpb24gKmNhcywKKwkJICAgICAgc3RydWN0IHJlbW90ZSAqcmVtb3RlLAorCQkgICAgICBzdHJ1Y3QgcmVmICpyZWYpCit7CisJaW50IGk7CisKKwkvKiBGaW5kIGFuIGV4cGxpY2l0IC0tPG9wdGlvbj49PG5hbWU+Wzo8dmFsdWU+XSBlbnRyeSAqLworCWZvciAoaSA9IDA7IGkgPCBjYXMtPm5yOyBpKyspIHsKKwkJc3RydWN0IHB1c2hfY2FzICplbnRyeSA9ICZjYXMtPmVudHJ5W2ldOworCQlpZiAoIXJlZm5hbWVfbWF0Y2goZW50cnktPnJlZm5hbWUsIHJlZi0+bmFtZSkpCisJCQljb250aW51ZTsKKwkJcmVmLT5leHBlY3Rfb2xkX3NoYTEgPSAxOworCQlpZiAoIWVudHJ5LT51c2VfdHJhY2tpbmcpCisJCQloYXNoY3B5KHJlZi0+b2xkX3NoYTFfZXhwZWN0LCBjYXMtPmVudHJ5W2ldLmV4cGVjdCk7CisJCWVsc2UgaWYgKHJlbW90ZV90cmFja2luZyhyZW1vdGUsIHJlZi0+bmFtZSwgcmVmLT5vbGRfc2hhMV9leHBlY3QpKQorCQkJcmVmLT5leHBlY3Rfb2xkX25vX3RyYWNrYmFjayA9IDE7CisJCXJldHVybjsKKwl9CisKKwkvKiBBcmUgd2UgdXNpbmcgIi0tPG9wdGlvbj4iIHRvIGNvdmVyIGFsbD8gKi8KKwlpZiAoIWNhcy0+dXNlX3RyYWNraW5nX2Zvcl9yZXN0KQorCQlyZXR1cm47CisKKwlyZWYtPmV4cGVjdF9vbGRfc2hhMSA9IDE7CisJaWYgKHJlbW90ZV90cmFja2luZyhyZW1vdGUsIHJlZi0+bmFtZSwgcmVmLT5vbGRfc2hhMV9leHBlY3QpKQorCQlyZWYtPmV4cGVjdF9vbGRfbm9fdHJhY2tiYWNrID0gMTsKK30KKwordm9pZCBhcHBseV9wdXNoX2NhcyhzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICpjYXMsCisJCSAgICBzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsCisJCSAgICBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcykKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCWFwcGx5X2NhcyhjYXMsIHJlbW90ZSwgcmVmKTsKK30KZGlmZiAtLWdpdCBhL3JlbW90ZS5oIGIvcmVtb3RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyYjdjYQotLS0gL2Rldi9udWxsCisrKyBiL3JlbW90ZS5oCkBAIC0wLDAgKzEsMjkyIEBACisjaWZuZGVmIFJFTU9URV9ICisjZGVmaW5lIFJFTU9URV9ICisKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorCitlbnVtIHsKKwlSRU1PVEVfQ09ORklHLAorCVJFTU9URV9SRU1PVEVTLAorCVJFTU9URV9CUkFOQ0hFUworfTsKKworc3RydWN0IHJlbW90ZSB7CisJc3RydWN0IGhhc2htYXBfZW50cnkgZW50OyAgLyogbXVzdCBiZSBmaXJzdCAqLworCisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgb3JpZ2luOworCisJY29uc3QgY2hhciAqZm9yZWlnbl92Y3M7CisKKwljb25zdCBjaGFyICoqdXJsOworCWludCB1cmxfbnI7CisJaW50IHVybF9hbGxvYzsKKworCWNvbnN0IGNoYXIgKipwdXNodXJsOworCWludCBwdXNodXJsX25yOworCWludCBwdXNodXJsX2FsbG9jOworCisJY29uc3QgY2hhciAqKnB1c2hfcmVmc3BlYzsKKwlzdHJ1Y3QgcmVmc3BlYyAqcHVzaDsKKwlpbnQgcHVzaF9yZWZzcGVjX25yOworCWludCBwdXNoX3JlZnNwZWNfYWxsb2M7CisKKwljb25zdCBjaGFyICoqZmV0Y2hfcmVmc3BlYzsKKwlzdHJ1Y3QgcmVmc3BlYyAqZmV0Y2g7CisJaW50IGZldGNoX3JlZnNwZWNfbnI7CisJaW50IGZldGNoX3JlZnNwZWNfYWxsb2M7CisKKwkvKgorCSAqIC0xIHRvIG5ldmVyIGZldGNoIHRhZ3MKKwkgKiAwIHRvIGF1dG8tZm9sbG93IHRhZ3Mgb24gaGV1cmlzdGljIChkZWZhdWx0KQorCSAqIDEgdG8gYWx3YXlzIGF1dG8tZm9sbG93IHRhZ3MKKwkgKiAyIHRvIGFsd2F5cyBmZXRjaCB0YWdzCisJICovCisJaW50IGZldGNoX3RhZ3M7CisJaW50IHNraXBfZGVmYXVsdF91cGRhdGU7CisJaW50IG1pcnJvcjsKKwlpbnQgcHJ1bmU7CisKKwljb25zdCBjaGFyICpyZWNlaXZlcGFjazsKKwljb25zdCBjaGFyICp1cGxvYWRwYWNrOworCisJLyoKKwkgKiBmb3IgY3VybCByZW1vdGVzIG9ubHkKKwkgKi8KKwljaGFyICpodHRwX3Byb3h5OworfTsKKworc3RydWN0IHJlbW90ZSAqcmVtb3RlX2dldChjb25zdCBjaGFyICpuYW1lKTsKK3N0cnVjdCByZW1vdGUgKnB1c2hyZW1vdGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpOworaW50IHJlbW90ZV9pc19jb25maWd1cmVkKGNvbnN0IGNoYXIgKm5hbWUpOworCit0eXBlZGVmIGludCBlYWNoX3JlbW90ZV9mbihzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHZvaWQgKnByaXYpOworaW50IGZvcl9lYWNoX3JlbW90ZShlYWNoX3JlbW90ZV9mbiBmbiwgdm9pZCAqcHJpdik7CisKK2ludCByZW1vdGVfaGFzX3VybChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCk7CisKK3N0cnVjdCByZWZzcGVjIHsKKwl1bnNpZ25lZCBmb3JjZSA6IDE7CisJdW5zaWduZWQgcGF0dGVybiA6IDE7CisJdW5zaWduZWQgbWF0Y2hpbmcgOiAxOworCXVuc2lnbmVkIGV4YWN0X3NoYTEgOiAxOworCisJY2hhciAqc3JjOworCWNoYXIgKmRzdDsKK307CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVmc3BlYyAqdGFnX3JlZnNwZWM7CisKK3N0cnVjdCByZWYgeworCXN0cnVjdCByZWYgKm5leHQ7CisJdW5zaWduZWQgY2hhciBvbGRfc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciBuZXdfc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciBvbGRfc2hhMV9leHBlY3RbMjBdOyAvKiB1c2VkIGJ5IGV4cGVjdC1vbGQgKi8KKwljaGFyICpzeW1yZWY7CisJdW5zaWduZWQgaW50CisJCWZvcmNlOjEsCisJCWZvcmNlZF91cGRhdGU6MSwKKwkJZXhwZWN0X29sZF9zaGExOjEsCisJCWV4cGVjdF9vbGRfbm9fdHJhY2tiYWNrOjEsCisJCWRlbGV0aW9uOjEsCisJCW1hdGNoZWQ6MTsKKworCS8qCisJICogT3JkZXIgaXMgaW1wb3J0YW50IGhlcmUsIGFzIHdlIHdyaXRlIHRvIEZFVENIX0hFQUQKKwkgKiBpbiBudW1lcmljIG9yZGVyLiBBbmQgdGhlIGRlZmF1bHQgTk9UX0ZPUl9NRVJHRQorCSAqIHNob3VsZCBiZSAwLCBzbyB0aGF0IHhjYWxsb2MnZCBzdHJ1Y3R1cmVzIGdldCBpdAorCSAqIGJ5IGRlZmF1bHQuCisJICovCisJZW51bSB7CisJCUZFVENIX0hFQURfTUVSR0UgPSAtMSwKKwkJRkVUQ0hfSEVBRF9OT1RfRk9SX01FUkdFID0gMCwKKwkJRkVUQ0hfSEVBRF9JR05PUkUgPSAxCisJfSBmZXRjaF9oZWFkX3N0YXR1czsKKworCWVudW0geworCQlSRUZfU1RBVFVTX05PTkUgPSAwLAorCQlSRUZfU1RBVFVTX09LLAorCQlSRUZfU1RBVFVTX1JFSkVDVF9OT05GQVNURk9SV0FSRCwKKwkJUkVGX1NUQVRVU19SRUpFQ1RfQUxSRUFEWV9FWElTVFMsCisJCVJFRl9TVEFUVVNfUkVKRUNUX05PREVMRVRFLAorCQlSRUZfU1RBVFVTX1JFSkVDVF9GRVRDSF9GSVJTVCwKKwkJUkVGX1NUQVRVU19SRUpFQ1RfTkVFRFNfRk9SQ0UsCisJCVJFRl9TVEFUVVNfUkVKRUNUX1NUQUxFLAorCQlSRUZfU1RBVFVTX1JFSkVDVF9TSEFMTE9XLAorCQlSRUZfU1RBVFVTX1VQVE9EQVRFLAorCQlSRUZfU1RBVFVTX1JFTU9URV9SRUpFQ1QsCisJCVJFRl9TVEFUVVNfRVhQRUNUSU5HX1JFUE9SVCwKKwkJUkVGX1NUQVRVU19BVE9NSUNfUFVTSF9GQUlMRUQKKwl9IHN0YXR1czsKKwljaGFyICpyZW1vdGVfc3RhdHVzOworCXN0cnVjdCByZWYgKnBlZXJfcmVmOyAvKiB3aGVuIHJlbmFtaW5nICovCisJY2hhciBuYW1lW0ZMRVhfQVJSQVldOyAvKiBtb3JlICovCit9OworCisjZGVmaW5lIFJFRl9OT1JNQUwJKDF1IDw8IDApCisjZGVmaW5lIFJFRl9IRUFEUwkoMXUgPDwgMSkKKyNkZWZpbmUgUkVGX1RBR1MJKDF1IDw8IDIpCisKK2V4dGVybiBzdHJ1Y3QgcmVmICpmaW5kX3JlZl9ieV9uYW1lKGNvbnN0IHN0cnVjdCByZWYgKmxpc3QsIGNvbnN0IGNoYXIgKm5hbWUpOworCitzdHJ1Y3QgcmVmICphbGxvY19yZWYoY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgcmVmICpjb3B5X3JlZihjb25zdCBzdHJ1Y3QgcmVmICpyZWYpOworc3RydWN0IHJlZiAqY29weV9yZWZfbGlzdChjb25zdCBzdHJ1Y3QgcmVmICpyZWYpOwordm9pZCBzb3J0X3JlZl9saXN0KHN0cnVjdCByZWYgKiosIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKK2V4dGVybiBpbnQgY291bnRfcmVmc3BlY19tYXRjaChjb25zdCBjaGFyICosIHN0cnVjdCByZWYgKnJlZnMsIHN0cnVjdCByZWYgKiptYXRjaGVkX3JlZik7CitpbnQgcmVmX2NvbXBhcmVfbmFtZShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisKK2ludCBjaGVja19yZWZfdHlwZShjb25zdCBzdHJ1Y3QgcmVmICpyZWYsIGludCBmbGFncyk7CisKKy8qCisgKiBGcmVlcyB0aGUgZW50aXJlIGxpc3QgYW5kIHBlZXJzIG9mIGVsZW1lbnRzLgorICovCit2b2lkIGZyZWVfcmVmcyhzdHJ1Y3QgcmVmICpyZWYpOworCitzdHJ1Y3Qgc2hhMV9hcnJheTsKK2V4dGVybiBzdHJ1Y3QgcmVmICoqZ2V0X3JlbW90ZV9oZWFkcyhpbnQgaW4sIGNoYXIgKnNyY19idWYsIHNpemVfdCBzcmNfbGVuLAorCQkJCSAgICAgc3RydWN0IHJlZiAqKmxpc3QsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCQkgICAgIHN0cnVjdCBzaGExX2FycmF5ICpleHRyYV9oYXZlLAorCQkJCSAgICAgc3RydWN0IHNoYTFfYXJyYXkgKnNoYWxsb3cpOworCitpbnQgcmVzb2x2ZV9yZW1vdGVfc3ltcmVmKHN0cnVjdCByZWYgKnJlZiwgc3RydWN0IHJlZiAqbGlzdCk7CitpbnQgcmVmX25ld2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19zaGExLCBjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfc2hhMSk7CisKKy8qCisgKiBSZW1vdmUgYW5kIGZyZWUgYWxsIGJ1dCB0aGUgZmlyc3Qgb2YgYW55IGVudHJpZXMgaW4gdGhlIGlucHV0IGxpc3QKKyAqIHRoYXQgbWFwIHRoZSBzYW1lIHJlbW90ZSByZWZlcmVuY2UgdG8gdGhlIHNhbWUgbG9jYWwgcmVmZXJlbmNlLiAgSWYKKyAqIHRoZXJlIGFyZSB0d28gZW50cmllcyB0aGF0IG1hcCBkaWZmZXJlbnQgcmVtb3RlIHJlZmVyZW5jZXMgdG8gdGhlCisgKiBzYW1lIGxvY2FsIHJlZmVyZW5jZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlIGFuZCBkaWUuICBSZXR1cm4gYQorICogcG9pbnRlciB0byB0aGUgaGVhZCBvZiB0aGUgcmVzdWx0aW5nIGxpc3QuCisgKi8KK3N0cnVjdCByZWYgKnJlZl9yZW1vdmVfZHVwbGljYXRlcyhzdHJ1Y3QgcmVmICpyZWZfbWFwKTsKKworaW50IHZhbGlkX2ZldGNoX3JlZnNwZWMoY29uc3QgY2hhciAqcmVmc3BlYyk7CitzdHJ1Y3QgcmVmc3BlYyAqcGFyc2VfZmV0Y2hfcmVmc3BlYyhpbnQgbnJfcmVmc3BlYywgY29uc3QgY2hhciAqKnJlZnNwZWMpOworCit2b2lkIGZyZWVfcmVmc3BlYyhpbnQgbnJfcmVmc3BlYywgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMpOworCitleHRlcm4gaW50IHF1ZXJ5X3JlZnNwZWNzKHN0cnVjdCByZWZzcGVjICpzcGVjcywgaW50IG5yLCBzdHJ1Y3QgcmVmc3BlYyAqcXVlcnkpOworY2hhciAqYXBwbHlfcmVmc3BlY3Moc3RydWN0IHJlZnNwZWMgKnJlZnNwZWNzLCBpbnQgbnJfcmVmc3BlYywKKwkJICAgICBjb25zdCBjaGFyICpuYW1lKTsKKworaW50IGNoZWNrX3B1c2hfcmVmcyhzdHJ1Y3QgcmVmICpzcmMsIGludCBucl9yZWZzcGVjLCBjb25zdCBjaGFyICoqcmVmc3BlYyk7CitpbnQgbWF0Y2hfcHVzaF9yZWZzKHN0cnVjdCByZWYgKnNyYywgc3RydWN0IHJlZiAqKmRzdCwKKwkJICAgIGludCBucl9yZWZzcGVjLCBjb25zdCBjaGFyICoqcmVmc3BlYywgaW50IGFsbCk7Cit2b2lkIHNldF9yZWZfc3RhdHVzX2Zvcl9wdXNoKHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgc2VuZF9taXJyb3IsCisJaW50IGZvcmNlX3VwZGF0ZSk7CisKKy8qCisgKiBHaXZlbiBhIGxpc3Qgb2YgdGhlIHJlbW90ZSByZWZzIGFuZCB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGluZ3MgdG8KKyAqIGZldGNoLCBtYWtlcyBhIChzZXBhcmF0ZSkgbGlzdCBvZiB0aGUgcmVmcyB0byBmZXRjaCBhbmQgdGhlIGxvY2FsCisgKiByZWZzIHRvIHN0b3JlIGludG8uCisgKgorICogKnRhaWwgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIHRhaWwgcG9pbnRlciBvZiB0aGUgbGlzdCBvZiByZXN1bHRzCisgKiBiZWZvcmVoYW5kLCBhbmQgd2lsbCBiZSBzZXQgdG8gdGhlIHRhaWwgcG9pbnRlciBvZiB0aGUgbGlzdCBvZgorICogcmVzdWx0cyBhZnRlcndhcmQuCisgKgorICogbWlzc2luZ19vayBpcyB1c3VhbGx5IGZhbHNlLCBidXQgd2hlbiB3ZSBhcmUgYWRkaW5nIGJyYW5jaC4kbmFtZS5tZXJnZQorICogaXQgaXMgT2sgaWYgdGhlIGJyYW5jaCBpcyBub3QgYXQgdGhlIHJlbW90ZSBhbnltb3JlLgorICovCitpbnQgZ2V0X2ZldGNoX21hcChjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywgY29uc3Qgc3RydWN0IHJlZnNwZWMgKnJlZnNwZWMsCisJCSAgc3RydWN0IHJlZiAqKip0YWlsLCBpbnQgbWlzc2luZ19vayk7CisKK3N0cnVjdCByZWYgKmdldF9yZW1vdGVfcmVmKGNvbnN0IHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBjb25zdCBjaGFyICpuYW1lKTsKKworLyoKKyAqIEZvciB0aGUgZ2l2ZW4gcmVtb3RlLCByZWFkcyB0aGUgcmVmc3BlYydzIHNyYyBhbmQgc2V0cyB0aGUgb3RoZXIgZmllbGRzLgorICovCitpbnQgcmVtb3RlX2ZpbmRfdHJhY2tpbmcoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBzdHJ1Y3QgcmVmc3BlYyAqcmVmc3BlYyk7CisKK3N0cnVjdCBicmFuY2ggeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqcmVmbmFtZTsKKworCWNvbnN0IGNoYXIgKnJlbW90ZV9uYW1lOworCWNvbnN0IGNoYXIgKnB1c2hyZW1vdGVfbmFtZTsKKworCWNvbnN0IGNoYXIgKiptZXJnZV9uYW1lOworCXN0cnVjdCByZWZzcGVjICoqbWVyZ2U7CisJaW50IG1lcmdlX25yOworCWludCBtZXJnZV9hbGxvYzsKKworCWNvbnN0IGNoYXIgKnB1c2hfdHJhY2tpbmdfcmVmOworfTsKKworc3RydWN0IGJyYW5jaCAqYnJhbmNoX2dldChjb25zdCBjaGFyICpuYW1lKTsKK2NvbnN0IGNoYXIgKnJlbW90ZV9mb3JfYnJhbmNoKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgaW50ICpleHBsaWNpdCk7Citjb25zdCBjaGFyICpwdXNocmVtb3RlX2Zvcl9icmFuY2goc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBpbnQgKmV4cGxpY2l0KTsKKworaW50IGJyYW5jaF9oYXNfbWVyZ2VfY29uZmlnKHN0cnVjdCBicmFuY2ggKmJyYW5jaCk7CitpbnQgYnJhbmNoX21lcmdlX21hdGNoZXMoc3RydWN0IGJyYW5jaCAqLCBpbnQgbiwgY29uc3QgY2hhciAqKTsKKworLyoqCisgKiBSZXR1cm4gdGhlIGZ1bGx5LXF1YWxpZmllZCByZWZuYW1lIG9mIHRoZSB0cmFja2luZyBicmFuY2ggZm9yIGBicmFuY2hgLgorICogSS5lLiwgd2hhdCAiYnJhbmNoQHt1cHN0cmVhbX0iIHdvdWxkIGdpdmUgeW91LiBSZXR1cm5zIE5VTEwgaWYgbm8KKyAqIHVwc3RyZWFtIGlzIGRlZmluZWQuCisgKgorICogSWYgYGVycmAgaXMgbm90IE5VTEwgYW5kIG5vIHVwc3RyZWFtIGlzIGRlZmluZWQsIGEgbW9yZSBzcGVjaWZpYyBlcnJvcgorICogbWVzc2FnZSBpcyByZWNvcmRlZCB0aGVyZSAoaWYgdGhlIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBOVUxMLCB0aGVuCisgKiBgZXJyYCBpcyBub3QgdG91Y2hlZCkuCisgKi8KK2NvbnN0IGNoYXIgKmJyYW5jaF9nZXRfdXBzdHJlYW0oc3RydWN0IGJyYW5jaCAqYnJhbmNoLCBzdHJ1Y3Qgc3RyYnVmICplcnIpOworCisvKioKKyAqIFJldHVybiB0aGUgdHJhY2tpbmcgYnJhbmNoIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHJlZiB3ZSB3b3VsZCBwdXNoIHRvCisgKiBnaXZlbiBhIGJhcmUgYGdpdCBwdXNoYCB3aGlsZSBgYnJhbmNoYCBpcyBjaGVja2VkIG91dC4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGFuZCBgZXJyYCBjb252ZW50aW9ucyBtYXRjaCB0aG9zZSBvZiBgYnJhbmNoX2dldF91cHN0cmVhbWAuCisgKi8KK2NvbnN0IGNoYXIgKmJyYW5jaF9nZXRfcHVzaChzdHJ1Y3QgYnJhbmNoICpicmFuY2gsIHN0cnVjdCBzdHJidWYgKmVycik7CisKKy8qIEZsYWdzIHRvIG1hdGNoX3JlZnMuICovCitlbnVtIG1hdGNoX3JlZnNfZmxhZ3MgeworCU1BVENIX1JFRlNfTk9ORQkJPSAwLAorCU1BVENIX1JFRlNfQUxMIAkJPSAoMSA8PCAwKSwKKwlNQVRDSF9SRUZTX01JUlJPUgk9ICgxIDw8IDEpLAorCU1BVENIX1JFRlNfUFJVTkUJPSAoMSA8PCAyKSwKKwlNQVRDSF9SRUZTX0ZPTExPV19UQUdTCT0gKDEgPDwgMykKK307CisKKy8qIFJlcG9ydGluZyBvZiB0cmFja2luZyBpbmZvICovCitpbnQgc3RhdF90cmFja2luZ19pbmZvKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgaW50ICpudW1fb3VycywgaW50ICpudW1fdGhlaXJzLAorCQkgICAgICAgY29uc3QgY2hhciAqKnVwc3RyZWFtX25hbWUpOworaW50IGZvcm1hdF90cmFja2luZ19pbmZvKHN0cnVjdCBicmFuY2ggKmJyYW5jaCwgc3RydWN0IHN0cmJ1ZiAqc2IpOworCitzdHJ1Y3QgcmVmICpnZXRfbG9jYWxfaGVhZHModm9pZCk7CisvKgorICogRmluZCByZWZzIGZyb20gYSBsaXN0IHdoaWNoIGFyZSBsaWtlbHkgdG8gYmUgcG9pbnRlZCB0byBieSB0aGUgZ2l2ZW4gSEVBRAorICogcmVmLiBJZiAnYWxsJyBpcyBmYWxzZSwgcmV0dXJucyB0aGUgbW9zdCBsaWtlbHkgcmVmOyBvdGhlcndpc2UsIHJldHVybnMgYQorICogbGlzdCBvZiBhbGwgY2FuZGlkYXRlIHJlZnMuIElmIG5vIG1hdGNoIGlzIGZvdW5kIChvciAnaGVhZCcgaXMgTlVMTCksCisgKiByZXR1cm5zIE5VTEwuIEFsbCByZXR1cm5zIGFyZSBuZXdseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBiZSBmcmVlZC4KKyAqLworc3RydWN0IHJlZiAqZ3Vlc3NfcmVtb3RlX2hlYWQoY29uc3Qgc3RydWN0IHJlZiAqaGVhZCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCByZWYgKnJlZnMsCisJCQkgICAgICBpbnQgYWxsKTsKKworLyogUmV0dXJuIHJlZnMgd2hpY2ggbm8gbG9uZ2VyIGV4aXN0IG9uIHJlbW90ZSAqLworc3RydWN0IHJlZiAqZ2V0X3N0YWxlX2hlYWRzKHN0cnVjdCByZWZzcGVjICpyZWZzLCBpbnQgcmVmX2NvdW50LCBzdHJ1Y3QgcmVmICpmZXRjaF9tYXApOworCisvKgorICogQ29tcGFyZS1hbmQtc3dhcAorICovCisjZGVmaW5lIENBU19PUFRfTkFNRSAiZm9yY2Utd2l0aC1sZWFzZSIKKworc3RydWN0IHB1c2hfY2FzX29wdGlvbiB7CisJdW5zaWduZWQgdXNlX3RyYWNraW5nX2Zvcl9yZXN0OjE7CisJc3RydWN0IHB1c2hfY2FzIHsKKwkJdW5zaWduZWQgY2hhciBleHBlY3RbMjBdOworCQl1bnNpZ25lZCB1c2VfdHJhY2tpbmc6MTsKKwkJY2hhciAqcmVmbmFtZTsKKwl9ICplbnRyeTsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworfTsKKworZXh0ZXJuIGludCBwYXJzZW9wdF9wdXNoX2Nhc19vcHRpb24oY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBjb25zdCBjaGFyICphcmcsIGludCB1bnNldCk7CitleHRlcm4gaW50IHBhcnNlX3B1c2hfY2FzX29wdGlvbihzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICosIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KTsKKworZXh0ZXJuIGludCBpc19lbXB0eV9jYXMoY29uc3Qgc3RydWN0IHB1c2hfY2FzX29wdGlvbiAqKTsKK3ZvaWQgYXBwbHlfcHVzaF9jYXMoc3RydWN0IHB1c2hfY2FzX29wdGlvbiAqLCBzdHJ1Y3QgcmVtb3RlICosIHN0cnVjdCByZWYgKik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmVwbGFjZV9vYmplY3QuYyBiL3JlcGxhY2Vfb2JqZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBiMzlmMAotLS0gL2Rldi9udWxsCisrKyBiL3JlcGxhY2Vfb2JqZWN0LmMKQEAgLTAsMCArMSwxMjIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorCisvKgorICogQW4gYXJyYXkgb2YgcmVwbGFjZW1lbnRzLiAgVGhlIGFycmF5IGlzIGtlcHQgc29ydGVkIGJ5IHRoZSBvcmlnaW5hbAorICogc2hhMS4KKyAqLworc3RhdGljIHN0cnVjdCByZXBsYWNlX29iamVjdCB7CisJdW5zaWduZWQgY2hhciBvcmlnaW5hbFsyMF07CisJdW5zaWduZWQgY2hhciByZXBsYWNlbWVudFsyMF07Cit9ICoqcmVwbGFjZV9vYmplY3Q7CisKK3N0YXRpYyBpbnQgcmVwbGFjZV9vYmplY3RfYWxsb2MsIHJlcGxhY2Vfb2JqZWN0X25yOworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqcmVwbGFjZV9zaGExX2FjY2VzcyhzaXplX3QgaW5kZXgsIHZvaWQgKnRhYmxlKQoreworCXN0cnVjdCByZXBsYWNlX29iamVjdCAqKnJlcGxhY2UgPSB0YWJsZTsKKwlyZXR1cm4gcmVwbGFjZVtpbmRleF0tPm9yaWdpbmFsOworfQorCitzdGF0aWMgaW50IHJlcGxhY2Vfb2JqZWN0X3Bvcyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXJldHVybiBzaGExX3BvcyhzaGExLCByZXBsYWNlX29iamVjdCwgcmVwbGFjZV9vYmplY3RfbnIsCisJCQlyZXBsYWNlX3NoYTFfYWNjZXNzKTsKK30KKworc3RhdGljIGludCByZWdpc3Rlcl9yZXBsYWNlX29iamVjdChzdHJ1Y3QgcmVwbGFjZV9vYmplY3QgKnJlcGxhY2UsCisJCQkJICAgaW50IGlnbm9yZV9kdXBzKQoreworCWludCBwb3MgPSByZXBsYWNlX29iamVjdF9wb3MocmVwbGFjZS0+b3JpZ2luYWwpOworCisJaWYgKDAgPD0gcG9zKSB7CisJCWlmIChpZ25vcmVfZHVwcykKKwkJCWZyZWUocmVwbGFjZSk7CisJCWVsc2UgeworCQkJZnJlZShyZXBsYWNlX29iamVjdFtwb3NdKTsKKwkJCXJlcGxhY2Vfb2JqZWN0W3Bvc10gPSByZXBsYWNlOworCQl9CisJCXJldHVybiAxOworCX0KKwlwb3MgPSAtcG9zIC0gMTsKKwlBTExPQ19HUk9XKHJlcGxhY2Vfb2JqZWN0LCByZXBsYWNlX29iamVjdF9uciArIDEsIHJlcGxhY2Vfb2JqZWN0X2FsbG9jKTsKKwlyZXBsYWNlX29iamVjdF9ucisrOworCWlmIChwb3MgPCByZXBsYWNlX29iamVjdF9ucikKKwkJbWVtbW92ZShyZXBsYWNlX29iamVjdCArIHBvcyArIDEsCisJCQlyZXBsYWNlX29iamVjdCArIHBvcywKKwkJCShyZXBsYWNlX29iamVjdF9uciAtIHBvcyAtIDEpICoKKwkJCXNpemVvZigqcmVwbGFjZV9vYmplY3QpKTsKKwlyZXBsYWNlX29iamVjdFtwb3NdID0gcmVwbGFjZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWdpc3Rlcl9yZXBsYWNlX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLAorCQkJCWNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCQlpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwkvKiBHZXQgc2hhMSBmcm9tIHJlZm5hbWUgKi8KKwljb25zdCBjaGFyICpzbGFzaCA9IHN0cnJjaHIocmVmbmFtZSwgJy8nKTsKKwljb25zdCBjaGFyICpoYXNoID0gc2xhc2ggPyBzbGFzaCArIDEgOiByZWZuYW1lOworCXN0cnVjdCByZXBsYWNlX29iamVjdCAqcmVwbF9vYmogPSB4bWFsbG9jKHNpemVvZigqcmVwbF9vYmopKTsKKworCWlmIChzdHJsZW4oaGFzaCkgIT0gNDAgfHwgZ2V0X3NoYTFfaGV4KGhhc2gsIHJlcGxfb2JqLT5vcmlnaW5hbCkpIHsKKwkJZnJlZShyZXBsX29iaik7CisJCXdhcm5pbmcoImJhZCByZXBsYWNlIHJlZiBuYW1lOiAlcyIsIHJlZm5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDb3B5IHNoYTEgZnJvbSB0aGUgcmVhZCByZWYgKi8KKwloYXNoY3B5KHJlcGxfb2JqLT5yZXBsYWNlbWVudCwgb2lkLT5oYXNoKTsKKworCS8qIFJlZ2lzdGVyIG5ldyBvYmplY3QgKi8KKwlpZiAocmVnaXN0ZXJfcmVwbGFjZV9vYmplY3QocmVwbF9vYmosIDEpKQorCQlkaWUoImR1cGxpY2F0ZSByZXBsYWNlIHJlZjogJXMiLCByZWZuYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3JlcGxhY2Vfb2JqZWN0KHZvaWQpCit7CisJc3RhdGljIGludCByZXBsYWNlX29iamVjdF9wcmVwYXJlZDsKKworCWlmIChyZXBsYWNlX29iamVjdF9wcmVwYXJlZCkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfcmVwbGFjZV9yZWYocmVnaXN0ZXJfcmVwbGFjZV9yZWYsIE5VTEwpOworCXJlcGxhY2Vfb2JqZWN0X3ByZXBhcmVkID0gMTsKKwlpZiAoIXJlcGxhY2Vfb2JqZWN0X25yKQorCQljaGVja19yZXBsYWNlX3JlZnMgPSAwOworfQorCisvKiBXZSBhbGxvdyAicmVjdXJzaXZlIiByZXBsYWNlbWVudC4gT25seSB3aXRoaW4gcmVhc29uLCB0aG91Z2ggKi8KKyNkZWZpbmUgTUFYUkVQTEFDRURFUFRIIDUKKworLyoKKyAqIElmIGEgcmVwbGFjZW1lbnQgZm9yIG9iamVjdCBzaGExIGhhcyBiZWVuIHNldCB1cCwgcmV0dXJuIHRoZQorICogcmVwbGFjZW1lbnQgb2JqZWN0J3MgbmFtZSAocmVwbGFjZWQgcmVjdXJzaXZlbHksIGlmIG5lY2Vzc2FyeSkuCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGVpdGhlciBzaGExIG9yIGEgcG9pbnRlciB0byBhCisgKiBwZXJtYW5lbnRseS1hbGxvY2F0ZWQgdmFsdWUuICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyByZXNwZWN0cyByZXBsYWNlCisgKiByZWZlcmVuY2VzLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBjaGVja19yZXBsYWNlX3JlZnMuCisgKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgKmRvX2xvb2t1cF9yZXBsYWNlX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBwb3MsIGRlcHRoID0gTUFYUkVQTEFDRURFUFRIOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1ciA9IHNoYTE7CisKKwlwcmVwYXJlX3JlcGxhY2Vfb2JqZWN0KCk7CisKKwkvKiBUcnkgdG8gcmVjdXJzaXZlbHkgcmVwbGFjZSB0aGUgb2JqZWN0ICovCisJZG8geworCQlpZiAoLS1kZXB0aCA8IDApCisJCQlkaWUoInJlcGxhY2UgZGVwdGggdG9vIGhpZ2ggZm9yIG9iamVjdCAlcyIsCisJCQkgICAgc2hhMV90b19oZXgoc2hhMSkpOworCisJCXBvcyA9IHJlcGxhY2Vfb2JqZWN0X3BvcyhjdXIpOworCQlpZiAoMCA8PSBwb3MpCisJCQljdXIgPSByZXBsYWNlX29iamVjdFtwb3NdLT5yZXBsYWNlbWVudDsKKwl9IHdoaWxlICgwIDw9IHBvcyk7CisKKwlyZXR1cm4gY3VyOworfQpkaWZmIC0tZ2l0IGEvcmVyZXJlLmMgYi9yZXJlcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDNjNzAwCi0tLSAvZGV2L251bGwKKysrIGIvcmVyZXJlLmMKQEAgLTAsMCArMSwxMDA4IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAieGRpZmYtaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCisjaW5jbHVkZSAibGwtbWVyZ2UuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAicGF0aHNwZWMuaCIKKworI2RlZmluZSBSRVNPTFZFRCAwCisjZGVmaW5lIFBVTlRFRCAxCisjZGVmaW5lIFRIUkVFX1NUQUdFRCAyCit2b2lkICpSRVJFUkVfUkVTT0xWRUQgPSAmUkVSRVJFX1JFU09MVkVEOworCisvKiBpZiByZXJlcmVfZW5hYmxlZCA9PSAtMSwgZmFsbCBiYWNrIHRvIGRldGVjdGlvbiBvZiAuZ2l0L3JyLWNhY2hlICovCitzdGF0aWMgaW50IHJlcmVyZV9lbmFibGVkID0gLTE7CisKKy8qIGF1dG9tYXRpY2FsbHkgdXBkYXRlIGNsZWFubHkgcmVzb2x2ZWQgcGF0aHMgdG8gdGhlIGluZGV4ICovCitzdGF0aWMgaW50IHJlcmVyZV9hdXRvdXBkYXRlOworCitzdGF0aWMgdm9pZCBmcmVlX3JlcmVyZV9pZChzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSkKK3sKKwlmcmVlKGl0ZW0tPnV0aWwpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcmVyZXJlX2lkX2hleChjb25zdCBzdHJ1Y3QgcmVyZXJlX2lkICppZCkKK3sKKwlyZXR1cm4gaWQtPmhleDsKK30KKworY29uc3QgY2hhciAqcmVyZXJlX3BhdGgoY29uc3Qgc3RydWN0IHJlcmVyZV9pZCAqaWQsIGNvbnN0IGNoYXIgKmZpbGUpCit7CisJaWYgKCFmaWxlKQorCQlyZXR1cm4gZ2l0X3BhdGgoInJyLWNhY2hlLyVzIiwgcmVyZXJlX2lkX2hleChpZCkpOworCisJcmV0dXJuIGdpdF9wYXRoKCJyci1jYWNoZS8lcy8lcyIsIHJlcmVyZV9pZF9oZXgoaWQpLCBmaWxlKTsKK30KKworc3RhdGljIGludCBoYXNfcmVyZXJlX3Jlc29sdXRpb24oY29uc3Qgc3RydWN0IHJlcmVyZV9pZCAqaWQpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlyZXR1cm4gIXN0YXQocmVyZXJlX3BhdGgoaWQsICJwb3N0aW1hZ2UiKSwgJnN0KTsKK30KKworc3RhdGljIHN0cnVjdCByZXJlcmVfaWQgKm5ld19yZXJlcmVfaWRfaGV4KGNoYXIgKmhleCkKK3sKKwlzdHJ1Y3QgcmVyZXJlX2lkICppZCA9IHhtYWxsb2Moc2l6ZW9mKCppZCkpOworCXN0cmNweShpZC0+aGV4LCBoZXgpOworCXJldHVybiBpZDsKK30KKworc3RhdGljIHN0cnVjdCByZXJlcmVfaWQgKm5ld19yZXJlcmVfaWQodW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gbmV3X3JlcmVyZV9pZF9oZXgoc2hhMV90b19oZXgoc2hhMSkpOworfQorCisvKgorICogJEdJVF9ESVIvTUVSR0VfUlIgZmlsZSBpcyBhIGNvbGxlY3Rpb24gb2YgcmVjb3JkcywgZWFjaCBvZiB3aGljaCBpcworICogImNvbmZsaWN0IElEIiwgYSBIVCBhbmQgcGF0aG5hbWUsIHRlcm1pbmF0ZWQgd2l0aCBhIE5VTCwgYW5kIGlzCisgKiB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHNldCBvZiBwYXRocyB0aGF0ICJyZXJlcmUiIG1heSBuZWVkIHRvCisgKiB3b3JrIG9uIChpLmUuIHdoYXQgaXMgbGVmdCBieSB0aGUgcHJldmlvdXMgaW52b2NhdGlvbiBvZiAiZ2l0CisgKiByZXJlcmUiIGR1cmluZyB0aGUgY3VycmVudCBjb25mbGljdCByZXNvbHV0aW9uIHNlc3Npb24pLgorICovCitzdGF0aWMgdm9pZCByZWFkX3JyKHN0cnVjdCBzdHJpbmdfbGlzdCAqcnIpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlGSUxFICppbiA9IGZvcGVuKGdpdF9wYXRoX21lcmdlX3JyKCksICJyIik7CisKKwlpZiAoIWluKQorCQlyZXR1cm47CisJd2hpbGUgKCFzdHJidWZfZ2V0d2hvbGVsaW5lKCZidWYsIGluLCAnXDAnKSkgeworCQljaGFyICpwYXRoOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlzdHJ1Y3QgcmVyZXJlX2lkICppZDsKKworCQkvKiBUaGVyZSBoYXMgdG8gYmUgdGhlIGhhc2gsIHRhYiwgcGF0aCBhbmQgdGhlbiBOVUwgKi8KKwkJaWYgKGJ1Zi5sZW4gPCA0MiB8fCBnZXRfc2hhMV9oZXgoYnVmLmJ1Ziwgc2hhMSkpCisJCQlkaWUoImNvcnJ1cHQgTUVSR0VfUlIiKTsKKworCQlpZiAoYnVmLmJ1Zls0MF0gIT0gJ1x0JykKKwkJCWRpZSgiY29ycnVwdCBNRVJHRV9SUiIpOworCQlidWYuYnVmWzQwXSA9ICdcMCc7CisJCXBhdGggPSBidWYuYnVmICsgNDE7CisJCWlkID0gbmV3X3JlcmVyZV9pZF9oZXgoYnVmLmJ1Zik7CisJCXN0cmluZ19saXN0X2luc2VydChyciwgcGF0aCktPnV0aWwgPSBpZDsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJZmNsb3NlKGluKTsKK30KKworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgd3JpdGVfbG9jazsKKworc3RhdGljIGludCB3cml0ZV9ycihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJyLCBpbnQgb3V0X2ZkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCByci0+bnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlzdHJ1Y3QgcmVyZXJlX2lkICppZDsKKworCQlhc3NlcnQocnItPml0ZW1zW2ldLnV0aWwgIT0gUkVSRVJFX1JFU09MVkVEKTsKKworCQlpZCA9IHJyLT5pdGVtc1tpXS51dGlsOworCQlpZiAoIWlkKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICIlc1x0JXMlYyIsCisJCQkgICAgcmVyZXJlX2lkX2hleChpZCksCisJCQkgICAgcnItPml0ZW1zW2ldLnN0cmluZywgMCk7CisJCWlmICh3cml0ZV9pbl9mdWxsKG91dF9mZCwgYnVmLmJ1ZiwgYnVmLmxlbikgIT0gYnVmLmxlbikKKwkJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHJlcmVyZSByZWNvcmQiKTsKKworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwl9CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJndyaXRlX2xvY2spICE9IDApCisJCWRpZSgidW5hYmxlIHRvIHdyaXRlIHJlcmVyZSByZWNvcmQiKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqICJyZXJlcmUiIGludGVyYWN0cyB3aXRoIGNvbmZsaWN0ZWQgZmlsZSBjb250ZW50cyB1c2luZyB0aGlzIEkvTworICogYWJzdHJhY3Rpb24uICBJdCByZWFkcyBhIGNvbmZsaWN0ZWQgY29udGVudHMgZnJvbSBvbmUgcGxhY2UgdmlhCisgKiAiZ2V0bGluZSgpIiBtZXRob2QsIGFuZCBvcHRpb25hbGx5IGNhbiB3cml0ZSBpdCBvdXQgYWZ0ZXIKKyAqIG5vcm1hbGl6aW5nIHRoZSBjb25mbGljdGVkIGh1bmtzIHRvIHRoZSAib3V0cHV0Ii4gIFN1YmNsYXNzZXMgb2YKKyAqIHJlcmVyZV9pbyBlbWJlZCB0aGlzIHN0cnVjdHVyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZWlyIG93bgorICogcmVyZXJlX2lvIG9iamVjdC4KKyAqLworc3RydWN0IHJlcmVyZV9pbyB7CisJaW50ICgqZ2V0bGluZSkoc3RydWN0IHN0cmJ1ZiAqLCBzdHJ1Y3QgcmVyZXJlX2lvICopOworCUZJTEUgKm91dHB1dDsKKwlpbnQgd3JlcnJvcjsKKwkvKiBzb21lIG1vcmUgc3R1ZmYgKi8KK307CisKK3N0YXRpYyB2b2lkIGZlcnJfd3JpdGUoY29uc3Qgdm9pZCAqcCwgc2l6ZV90IGNvdW50LCBGSUxFICpmcCwgaW50ICplcnIpCit7CisJaWYgKCFjb3VudCB8fCAqZXJyKQorCQlyZXR1cm47CisJaWYgKGZ3cml0ZShwLCBjb3VudCwgMSwgZnApICE9IDEpCisJCSplcnIgPSBlcnJubzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZlcnJfcHV0cyhjb25zdCBjaGFyICpzLCBGSUxFICpmcCwgaW50ICplcnIpCit7CisJZmVycl93cml0ZShzLCBzdHJsZW4ocyksIGZwLCBlcnIpOworfQorCitzdGF0aWMgdm9pZCByZXJlcmVfaW9fcHV0c3RyKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHJlcmVyZV9pbyAqaW8pCit7CisJaWYgKGlvLT5vdXRwdXQpCisJCWZlcnJfcHV0cyhzdHIsIGlvLT5vdXRwdXQsICZpby0+d3JlcnJvcik7Cit9CisKKy8qCisgKiBXcml0ZSBhIGNvbmZsaWN0IG1hcmtlciB0byBpby0+b3V0cHV0IChpZiBkZWZpbmVkKS4KKyAqLworc3RhdGljIHZvaWQgcmVyZXJlX2lvX3B1dGNvbmZsaWN0KGludCBjaCwgaW50IHNpemUsIHN0cnVjdCByZXJlcmVfaW8gKmlvKQoreworCWNoYXIgYnVmWzY0XTsKKworCXdoaWxlIChzaXplKSB7CisJCWlmIChzaXplIDw9IHNpemVvZihidWYpIC0gMikgeworCQkJbWVtc2V0KGJ1ZiwgY2gsIHNpemUpOworCQkJYnVmW3NpemVdID0gJ1xuJzsKKwkJCWJ1ZltzaXplICsgMV0gPSAnXDAnOworCQkJc2l6ZSA9IDA7CisJCX0gZWxzZSB7CisJCQlpbnQgc3ogPSBzaXplb2YoYnVmKSAtIDE7CisKKwkJCS8qCisJCQkgKiBNYWtlIHN1cmUgd2Ugd2lsbCBub3Qgd3JpdGUgZXZlcnl0aGluZyBvdXQKKwkJCSAqIGluIHRoaXMgcm91bmQgYnkgbGVhdmluZyBhdCBsZWFzdCAxIGJ5dGUKKwkJCSAqIGZvciB0aGUgbmV4dCByb3VuZCwgZ2l2aW5nIHRoZSBuZXh0IHJvdW5kCisJCQkgKiBhIGNoYW5jZSB0byBhZGQgdGhlIHRlcm1pbmF0aW5nIExGLiAgWXVjay4KKwkJCSAqLworCQkJaWYgKHNpemUgPD0gc3opCisJCQkJc3ogLT0gKHN6IC0gc2l6ZSkgKyAxOworCQkJbWVtc2V0KGJ1ZiwgY2gsIHN6KTsKKwkJCWJ1Zltzel0gPSAnXDAnOworCQkJc2l6ZSAtPSBzejsKKwkJfQorCQlyZXJlcmVfaW9fcHV0c3RyKGJ1ZiwgaW8pOworCX0KK30KKworc3RhdGljIHZvaWQgcmVyZXJlX2lvX3B1dG1lbShjb25zdCBjaGFyICptZW0sIHNpemVfdCBzeiwgc3RydWN0IHJlcmVyZV9pbyAqaW8pCit7CisJaWYgKGlvLT5vdXRwdXQpCisJCWZlcnJfd3JpdGUobWVtLCBzeiwgaW8tPm91dHB1dCwgJmlvLT53cmVycm9yKTsKK30KKworLyoKKyAqIFN1YmNsYXNzIG9mIHJlcmVyZV9pbyB0aGF0IHJlYWRzIGZyb20gYW4gb24tZGlzayBmaWxlCisgKi8KK3N0cnVjdCByZXJlcmVfaW9fZmlsZSB7CisJc3RydWN0IHJlcmVyZV9pbyBpbzsKKwlGSUxFICppbnB1dDsKK307CisKKy8qCisgKiAuLi4gYW5kIGl0cyBnZXRsaW5lKCkgbWV0aG9kIGltcGxlbWVudGF0aW9uCisgKi8KK3N0YXRpYyBpbnQgcmVyZXJlX2ZpbGVfZ2V0bGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IHJlcmVyZV9pbyAqaW9fKQoreworCXN0cnVjdCByZXJlcmVfaW9fZmlsZSAqaW8gPSAoc3RydWN0IHJlcmVyZV9pb19maWxlICopaW9fOworCXJldHVybiBzdHJidWZfZ2V0d2hvbGVsaW5lKHNiLCBpby0+aW5wdXQsICdcbicpOworfQorCisvKgorICogUmVxdWlyZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGNvbmZsaWN0IG1hcmtlciBsZXR0ZXJzLCBubyBtb3JlLCBubworICogbGVzcywgZm9sbG93ZWQgYnkgU1Agb3IgYW55IHdoaXRlc3BhY2UKKyAqIChpbmNsdWRpbmcgTEYpLgorICovCitzdGF0aWMgaW50IGlzX2NtYXJrZXIoY2hhciAqYnVmLCBpbnQgbWFya2VyX2NoYXIsIGludCBtYXJrZXJfc2l6ZSkKK3sKKwlpbnQgd2FudF9zcDsKKworCS8qCisJICogVGhlIGJlZ2lubmluZyBvZiBvdXIgdmVyc2lvbiBhbmQgdGhlIGVuZCBvZiB0aGVpciB2ZXJzaW9uCisJICogYWx3YXlzIGFyZSBsYWJlbGVkIGxpa2UgIjw8PDw8IG91cnMiIG9yICI+Pj4+PiB0aGVpcnMiLAorCSAqIGhlbmNlIHdlIHNldCB3YW50X3NwIGZvciB0aGVtLiAgTm90ZSB0aGF0IHRoZSB2ZXJzaW9uIGZyb20KKwkgKiB0aGUgY29tbW9uIGFuY2VzdG9yIGluIGRpZmYzLXN0eWxlIG91dHB1dCBpcyBub3QgYWx3YXlzCisJICogbGFiZWxsZWQgKGUuZy4gInx8fHx8IGNvbW1vbiIgaXMgb2Z0ZW4gc2VlbiBidXQgInx8fHx8IgorCSAqIGFsb25lIGlzIGFsc28gdmFsaWQpLCBzbyB3ZSBkbyBub3Qgc2V0IHdhbnRfc3AuCisJICovCisJd2FudF9zcCA9IChtYXJrZXJfY2hhciA9PSAnPCcpIHx8IChtYXJrZXJfY2hhciA9PSAnPicpOworCisJd2hpbGUgKG1hcmtlcl9zaXplLS0pCisJCWlmICgqYnVmKysgIT0gbWFya2VyX2NoYXIpCisJCQlyZXR1cm4gMDsKKwlpZiAod2FudF9zcCAmJiAqYnVmICE9ICcgJykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGlzc3BhY2UoKmJ1Zik7Cit9CisKKy8qCisgKiBSZWFkIGNvbnRlbnRzIGEgZmlsZSB3aXRoIGNvbmZsaWN0cywgbm9ybWFsaXplIHRoZSBjb25mbGljdHMKKyAqIGJ5ICgxKSBkaXNjYXJkaW5nIHRoZSBjb21tb24gYW5jZXN0b3IgdmVyc2lvbiBpbiBkaWZmMy1zdHlsZSwKKyAqICgyKSByZW9yZGVyaW5nIG91ciBzaWRlIGFuZCB0aGVpciBzaWRlIHNvIHRoYXQgd2hpY2hldmVyIHNvcnRzCisgKiBhbHBoYWJldGljYWxseSBlYXJsaWVyIGNvbWVzIGJlZm9yZSB0aGUgb3RoZXIgb25lLCB3aGlsZQorICogY29tcHV0aW5nIHRoZSAiY29uZmxpY3QgSUQiLCB3aGljaCBpcyBqdXN0IGFuIFNIQS0xIGhhc2ggb2YKKyAqIG9uZSBzaWRlIG9mIHRoZSBjb25mbGljdCwgTlVMLCB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgY29uZmxpY3QsCisgKiBhbmQgTlVMIGNvbmNhdGVuYXRlZCB0b2dldGhlci4KKyAqCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjb25mbGljdCBodW5rcyBmb3VuZC4KKyAqCisgKiBORUVEU1dPUks6IHRoZSBsb2dpYyBhbmQgdGhlb3J5IG9mIG9wZXJhdGlvbiBiZWhpbmQgdGhpcyBjb25mbGljdAorICogbm9ybWFsaXphdGlvbiBtYXkgZGVzZXJ2ZSB0byBiZSBkb2N1bWVudGVkIHNvbWV3aGVyZSwgcGVyaGFwcyBpbgorICogRG9jdW1lbnRhdGlvbi90ZWNobmljYWwvcmVyZXJlLnR4dC4KKyAqLworc3RhdGljIGludCBoYW5kbGVfcGF0aCh1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3QgcmVyZXJlX2lvICppbywgaW50IG1hcmtlcl9zaXplKQoreworCWdpdF9TSEFfQ1RYIGN0eDsKKwlpbnQgaHVua19ubyA9IDA7CisJZW51bSB7CisJCVJSX0NPTlRFWFQgPSAwLCBSUl9TSURFXzEsIFJSX1NJREVfMiwgUlJfT1JJR0lOQUwKKwl9IGh1bmsgPSBSUl9DT05URVhUOworCXN0cnVjdCBzdHJidWYgb25lID0gU1RSQlVGX0lOSVQsIHR3byA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoc2hhMSkKKwkJZ2l0X1NIQTFfSW5pdCgmY3R4KTsKKworCXdoaWxlICghaW8tPmdldGxpbmUoJmJ1ZiwgaW8pKSB7CisJCWlmIChpc19jbWFya2VyKGJ1Zi5idWYsICc8JywgbWFya2VyX3NpemUpKSB7CisJCQlpZiAoaHVuayAhPSBSUl9DT05URVhUKQorCQkJCWdvdG8gYmFkOworCQkJaHVuayA9IFJSX1NJREVfMTsKKwkJfSBlbHNlIGlmIChpc19jbWFya2VyKGJ1Zi5idWYsICd8JywgbWFya2VyX3NpemUpKSB7CisJCQlpZiAoaHVuayAhPSBSUl9TSURFXzEpCisJCQkJZ290byBiYWQ7CisJCQlodW5rID0gUlJfT1JJR0lOQUw7CisJCX0gZWxzZSBpZiAoaXNfY21hcmtlcihidWYuYnVmLCAnPScsIG1hcmtlcl9zaXplKSkgeworCQkJaWYgKGh1bmsgIT0gUlJfU0lERV8xICYmIGh1bmsgIT0gUlJfT1JJR0lOQUwpCisJCQkJZ290byBiYWQ7CisJCQlodW5rID0gUlJfU0lERV8yOworCQl9IGVsc2UgaWYgKGlzX2NtYXJrZXIoYnVmLmJ1ZiwgJz4nLCBtYXJrZXJfc2l6ZSkpIHsKKwkJCWlmIChodW5rICE9IFJSX1NJREVfMikKKwkJCQlnb3RvIGJhZDsKKwkJCWlmIChzdHJidWZfY21wKCZvbmUsICZ0d28pID4gMCkKKwkJCQlzdHJidWZfc3dhcCgmb25lLCAmdHdvKTsKKwkJCWh1bmtfbm8rKzsKKwkJCWh1bmsgPSBSUl9DT05URVhUOworCQkJcmVyZXJlX2lvX3B1dGNvbmZsaWN0KCc8JywgbWFya2VyX3NpemUsIGlvKTsKKwkJCXJlcmVyZV9pb19wdXRtZW0ob25lLmJ1Ziwgb25lLmxlbiwgaW8pOworCQkJcmVyZXJlX2lvX3B1dGNvbmZsaWN0KCc9JywgbWFya2VyX3NpemUsIGlvKTsKKwkJCXJlcmVyZV9pb19wdXRtZW0odHdvLmJ1ZiwgdHdvLmxlbiwgaW8pOworCQkJcmVyZXJlX2lvX3B1dGNvbmZsaWN0KCc+JywgbWFya2VyX3NpemUsIGlvKTsKKwkJCWlmIChzaGExKSB7CisJCQkJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIG9uZS5idWYgPyBvbmUuYnVmIDogIiIsCisJCQkJCSAgICBvbmUubGVuICsgMSk7CisJCQkJZ2l0X1NIQTFfVXBkYXRlKCZjdHgsIHR3by5idWYgPyB0d28uYnVmIDogIiIsCisJCQkJCSAgICB0d28ubGVuICsgMSk7CisJCQl9CisJCQlzdHJidWZfcmVzZXQoJm9uZSk7CisJCQlzdHJidWZfcmVzZXQoJnR3byk7CisJCX0gZWxzZSBpZiAoaHVuayA9PSBSUl9TSURFXzEpCisJCQlzdHJidWZfYWRkYnVmKCZvbmUsICZidWYpOworCQllbHNlIGlmIChodW5rID09IFJSX09SSUdJTkFMKQorCQkJOyAvKiBkaXNjYXJkICovCisJCWVsc2UgaWYgKGh1bmsgPT0gUlJfU0lERV8yKQorCQkJc3RyYnVmX2FkZGJ1ZigmdHdvLCAmYnVmKTsKKwkJZWxzZQorCQkJcmVyZXJlX2lvX3B1dHN0cihidWYuYnVmLCBpbyk7CisJCWNvbnRpbnVlOworCWJhZDoKKwkJaHVuayA9IDk5OyAvKiBmb3JjZSBlcnJvciBleGl0ICovCisJCWJyZWFrOworCX0KKwlzdHJidWZfcmVsZWFzZSgmb25lKTsKKwlzdHJidWZfcmVsZWFzZSgmdHdvKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCWlmIChzaGExKQorCQlnaXRfU0hBMV9GaW5hbChzaGExLCAmY3R4KTsKKwlpZiAoaHVuayAhPSBSUl9DT05URVhUKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIGh1bmtfbm87Cit9CisKKy8qCisgKiBTY2FuIHRoZSBwYXRoIGZvciBjb25mbGljdHMsIGRvIHRoZSAiaGFuZGxlX3BhdGgoKSIgdGhpbmcgYWJvdmUsIGFuZAorICogcmV0dXJuIHRoZSBudW1iZXIgb2YgY29uZmxpY3QgaHVua3MgZm91bmQuCisgKi8KK3N0YXRpYyBpbnQgaGFuZGxlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgY2hhciAqc2hhMSwgY29uc3QgY2hhciAqb3V0cHV0KQoreworCWludCBodW5rX25vID0gMDsKKwlzdHJ1Y3QgcmVyZXJlX2lvX2ZpbGUgaW87CisJaW50IG1hcmtlcl9zaXplID0gbGxfbWVyZ2VfbWFya2VyX3NpemUocGF0aCk7CisKKwltZW1zZXQoJmlvLCAwLCBzaXplb2YoaW8pKTsKKwlpby5pby5nZXRsaW5lID0gcmVyZXJlX2ZpbGVfZ2V0bGluZTsKKwlpby5pbnB1dCA9IGZvcGVuKHBhdGgsICJyIik7CisJaW8uaW8ud3JlcnJvciA9IDA7CisJaWYgKCFpby5pbnB1dCkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgb3BlbiAlcyIsIHBhdGgpOworCisJaWYgKG91dHB1dCkgeworCQlpby5pby5vdXRwdXQgPSBmb3BlbihvdXRwdXQsICJ3Iik7CisJCWlmICghaW8uaW8ub3V0cHV0KSB7CisJCQlmY2xvc2UoaW8uaW5wdXQpOworCQkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgd3JpdGUgJXMiLCBvdXRwdXQpOworCQl9CisJfQorCisJaHVua19ubyA9IGhhbmRsZV9wYXRoKHNoYTEsIChzdHJ1Y3QgcmVyZXJlX2lvICopJmlvLCBtYXJrZXJfc2l6ZSk7CisKKwlmY2xvc2UoaW8uaW5wdXQpOworCWlmIChpby5pby53cmVycm9yKQorCQllcnJvcigiVGhlcmUgd2VyZSBlcnJvcnMgd2hpbGUgd3JpdGluZyAlcyAoJXMpIiwKKwkJICAgICAgcGF0aCwgc3RyZXJyb3IoaW8uaW8ud3JlcnJvcikpOworCWlmIChpby5pby5vdXRwdXQgJiYgZmNsb3NlKGlvLmlvLm91dHB1dCkpCisJCWlvLmlvLndyZXJyb3IgPSBlcnJvcigiRmFpbGVkIHRvIGZsdXNoICVzOiAlcyIsCisJCQkJICAgICAgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKworCWlmIChodW5rX25vIDwgMCkgeworCQlpZiAob3V0cHV0KQorCQkJdW5saW5rX29yX3dhcm4ob3V0cHV0KTsKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3QgcGFyc2UgY29uZmxpY3QgaHVua3MgaW4gJXMiLCBwYXRoKTsKKwl9CisJaWYgKGlvLmlvLndyZXJyb3IpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gaHVua19ubzsKK30KKworLyoKKyAqIFN1YmNsYXNzIG9mIHJlcmVyZV9pbyB0aGF0IHJlYWRzIGZyb20gYW4gaW4tY29yZSBidWZmZXIgdGhhdCBpcyBhCisgKiBzdHJidWYKKyAqLworc3RydWN0IHJlcmVyZV9pb19tZW0geworCXN0cnVjdCByZXJlcmVfaW8gaW87CisJc3RydWN0IHN0cmJ1ZiBpbnB1dDsKK307CisKKy8qCisgKiAuLi4gYW5kIGl0cyBnZXRsaW5lKCkgbWV0aG9kIGltcGxlbWVudGF0aW9uCisgKi8KK3N0YXRpYyBpbnQgcmVyZXJlX21lbV9nZXRsaW5lKHN0cnVjdCBzdHJidWYgKnNiLCBzdHJ1Y3QgcmVyZXJlX2lvICppb18pCit7CisJc3RydWN0IHJlcmVyZV9pb19tZW0gKmlvID0gKHN0cnVjdCByZXJlcmVfaW9fbWVtICopaW9fOworCWNoYXIgKmVwOworCXNpemVfdCBsZW47CisKKwlzdHJidWZfcmVsZWFzZShzYik7CisJaWYgKCFpby0+aW5wdXQubGVuKQorCQlyZXR1cm4gLTE7CisJZXAgPSBtZW1jaHIoaW8tPmlucHV0LmJ1ZiwgJ1xuJywgaW8tPmlucHV0Lmxlbik7CisJaWYgKCFlcCkKKwkJZXAgPSBpby0+aW5wdXQuYnVmICsgaW8tPmlucHV0LmxlbjsKKwllbHNlIGlmICgqZXAgPT0gJ1xuJykKKwkJZXArKzsKKwlsZW4gPSBlcCAtIGlvLT5pbnB1dC5idWY7CisJc3RyYnVmX2FkZChzYiwgaW8tPmlucHV0LmJ1ZiwgbGVuKTsKKwlzdHJidWZfcmVtb3ZlKCZpby0+aW5wdXQsIDAsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGFuZGxlX2NhY2hlKGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKm91dHB1dCkKK3sKKwltbWZpbGVfdCBtbWZpbGVbM10gPSB7e05VTEx9fTsKKwltbWJ1ZmZlcl90IHJlc3VsdCA9IHtOVUxMLCAwfTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCWludCBwb3MsIGxlbiwgaSwgaHVua19ubzsKKwlzdHJ1Y3QgcmVyZXJlX2lvX21lbSBpbzsKKwlpbnQgbWFya2VyX3NpemUgPSBsbF9tZXJnZV9tYXJrZXJfc2l6ZShwYXRoKTsKKworCS8qCisJICogUmVwcm9kdWNlIHRoZSBjb25mbGljdGVkIG1lcmdlIGluLWNvcmUKKwkgKi8KKwlsZW4gPSBzdHJsZW4ocGF0aCk7CisJcG9zID0gY2FjaGVfbmFtZV9wb3MocGF0aCwgbGVuKTsKKwlpZiAoMCA8PSBwb3MpCisJCXJldHVybiAtMTsKKwlwb3MgPSAtcG9zIC0gMTsKKworCXdoaWxlIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCQl1bnNpZ25lZCBsb25nIHNpemU7CisKKwkJY2UgPSBhY3RpdmVfY2FjaGVbcG9zKytdOworCQlpZiAoY2VfbmFtZWxlbihjZSkgIT0gbGVuIHx8IG1lbWNtcChjZS0+bmFtZSwgcGF0aCwgbGVuKSkKKwkJCWJyZWFrOworCQlpID0gY2Vfc3RhZ2UoY2UpIC0gMTsKKwkJaWYgKCFtbWZpbGVbaV0ucHRyKSB7CisJCQltbWZpbGVbaV0ucHRyID0gcmVhZF9zaGExX2ZpbGUoY2UtPnNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJCQltbWZpbGVbaV0uc2l6ZSA9IHNpemU7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJaWYgKCFtbWZpbGVbaV0ucHRyICYmICFtbWZpbGVbaV0uc2l6ZSkKKwkJCW1tZmlsZVtpXS5wdHIgPSB4c3RyZHVwKCIiKTsKKworCS8qCisJICogTkVFRFNXT1JLOiBoYW5kbGUgY29uZmxpY3RzIGZyb20gbWVyZ2VzIHdpdGgKKwkgKiBtZXJnZS5yZW5vcm1hbGl6ZSBzZXQsIHRvbworCSAqLworCWxsX21lcmdlKCZyZXN1bHQsIHBhdGgsICZtbWZpbGVbMF0sIE5VTEwsCisJCSAmbW1maWxlWzFdLCAib3VycyIsCisJCSAmbW1maWxlWzJdLCAidGhlaXJzIiwgTlVMTCk7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJZnJlZShtbWZpbGVbaV0ucHRyKTsKKworCW1lbXNldCgmaW8sIDAsIHNpemVvZihpbykpOworCWlvLmlvLmdldGxpbmUgPSByZXJlcmVfbWVtX2dldGxpbmU7CisJaWYgKG91dHB1dCkKKwkJaW8uaW8ub3V0cHV0ID0gZm9wZW4ob3V0cHV0LCAidyIpOworCWVsc2UKKwkJaW8uaW8ub3V0cHV0ID0gTlVMTDsKKwlzdHJidWZfaW5pdCgmaW8uaW5wdXQsIDApOworCXN0cmJ1Zl9hdHRhY2goJmlvLmlucHV0LCByZXN1bHQucHRyLCByZXN1bHQuc2l6ZSwgcmVzdWx0LnNpemUpOworCisJLyoKKwkgKiBHcmFiIHRoZSBjb25mbGljdCBJRCBhbmQgb3B0aW9uYWxseSB3cml0ZSB0aGUgb3JpZ2luYWwKKwkgKiBjb250ZW50cyB3aXRoIGNvbmZsaWN0IG1hcmtlcnMgb3V0LgorCSAqLworCWh1bmtfbm8gPSBoYW5kbGVfcGF0aChzaGExLCAoc3RydWN0IHJlcmVyZV9pbyAqKSZpbywgbWFya2VyX3NpemUpOworCXN0cmJ1Zl9yZWxlYXNlKCZpby5pbnB1dCk7CisJaWYgKGlvLmlvLm91dHB1dCkKKwkJZmNsb3NlKGlvLmlvLm91dHB1dCk7CisJcmV0dXJuIGh1bmtfbm87Cit9CisKKy8qCisgKiBMb29rIGF0IGEgY2FjaGUgZW50cnkgYXQgImkiIGFuZCBzZWUgaWYgaXQgaXMgbm90IGNvbmZsaWN0aW5nLAorICogY29uZmxpY3RpbmcgYW5kIHdlIGFyZSB3aWxsaW5nIHRvIGhhbmRsZSwgb3IgY29uZmxpY3RpbmcgYW5kCisgKiB3ZSBhcmUgdW5hYmxlIHRvIGhhbmRsZSwgYW5kIHJldHVybiB0aGUgZGV0ZXJtaW5hdGlvbiBpbiAqdHlwZS4KKyAqIFJldHVybiB0aGUgY2FjaGUgaW5kZXggdG8gYmUgbG9va2VkIGF0IG5leHQsIGJ5IHNraXBwaW5nIHRoZQorICogc3RhZ2VzIHdlIGhhdmUgYWxyZWFkeSBsb29rZWQgYXQgaW4gdGhpcyBpbnZvY2F0aW9uIG9mIHRoaXMKKyAqIGZ1bmN0aW9uLgorICovCitzdGF0aWMgaW50IGNoZWNrX29uZV9jb25mbGljdChpbnQgaSwgaW50ICp0eXBlKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqZSA9IGFjdGl2ZV9jYWNoZVtpXTsKKworCWlmICghY2Vfc3RhZ2UoZSkpIHsKKwkJKnR5cGUgPSBSRVNPTFZFRDsKKwkJcmV0dXJuIGkgKyAxOworCX0KKworCSp0eXBlID0gUFVOVEVEOworCXdoaWxlIChjZV9zdGFnZShhY3RpdmVfY2FjaGVbaV0pID09IDEpCisJCWkrKzsKKworCS8qIE9ubHkgaGFuZGxlIHJlZ3VsYXIgZmlsZXMgd2l0aCBib3RoIHN0YWdlcyAjMiBhbmQgIzMgKi8KKwlpZiAoaSArIDEgPCBhY3RpdmVfbnIpIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICplMiA9IGFjdGl2ZV9jYWNoZVtpXTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICplMyA9IGFjdGl2ZV9jYWNoZVtpICsgMV07CisJCWlmIChjZV9zdGFnZShlMikgPT0gMiAmJgorCQkgICAgY2Vfc3RhZ2UoZTMpID09IDMgJiYKKwkJICAgIGNlX3NhbWVfbmFtZShlLCBlMykgJiYKKwkJICAgIFNfSVNSRUcoZTItPmNlX21vZGUpICYmCisJCSAgICBTX0lTUkVHKGUzLT5jZV9tb2RlKSkKKwkJCSp0eXBlID0gVEhSRUVfU1RBR0VEOworCX0KKworCS8qIFNraXAgdGhlIGVudHJpZXMgd2l0aCB0aGUgc2FtZSBuYW1lICovCisJd2hpbGUgKGkgPCBhY3RpdmVfbnIgJiYgY2Vfc2FtZV9uYW1lKGUsIGFjdGl2ZV9jYWNoZVtpXSkpCisJCWkrKzsKKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIFNjYW4gdGhlIGluZGV4IGFuZCBmaW5kIHBhdGhzIHRoYXQgaGF2ZSBjb25mbGljdHMgdGhhdCByZXJlcmUgY2FuCisgKiBoYW5kbGUsIGkuZS4gdGhlIG9uZXMgdGhhdCBoYXMgYm90aCBzdGFnZXMgIzIgYW5kICMzLgorICoKKyAqIE5FRURTV09SSzogd2UgZG8gbm90IHJlY29yZCBvciByZXBsYXkgYSBwcmV2aW91cyAicmVzb2x2ZSBieQorICogZGVsZXRpb24iIGZvciBhIGRlbGV0ZS1tb2RpZnkgY29uZmxpY3QsIGFzIHRoYXQgaXMgaW5oZXJlbnRseSByaXNreQorICogd2l0aG91dCBrbm93aW5nIHdoYXQgbW9kaWZpY2F0aW9uIGlzIGJlaW5nIGRpc2NhcmRlZC4gIFRoZSBvbmx5CisgKiBzYWZlIGNhc2UsIGkuZS4gYm90aCBzaWRlIGRvaW5nIHRoZSBkZWxldGlvbiBhbmQgbW9kaWZpY2F0aW9uIHRoYXQKKyAqIGFyZSBpZGVudGljYWwgdG8gdGhlIHByZXZpb3VzIHJvdW5kLCBtaWdodCB3YW50IHRvIGJlIGhhbmRsZWQsCisgKiB0aG91Z2guCisgKi8KK3N0YXRpYyBpbnQgZmluZF9jb25mbGljdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmNvbmZsaWN0KQoreworCWludCBpOworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCByZWFkIGluZGV4Iik7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOykgeworCQlpbnQgY29uZmxpY3RfdHlwZTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICplID0gYWN0aXZlX2NhY2hlW2ldOworCQlpID0gY2hlY2tfb25lX2NvbmZsaWN0KGksICZjb25mbGljdF90eXBlKTsKKwkJaWYgKGNvbmZsaWN0X3R5cGUgPT0gVEhSRUVfU1RBR0VEKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KGNvbmZsaWN0LCAoY29uc3QgY2hhciAqKWUtPm5hbWUpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBtZXJnZV9yciBsaXN0IGlzIG1lYW50IHRvIGhvbGQgb3V0c3RhbmRpbmcgY29uZmxpY3RlZCBwYXRocworICogdGhhdCByZXJlcmUgY291bGQgaGFuZGxlLiAgQWJ1c2UgdGhlIGxpc3QgYnkgYWRkaW5nIG90aGVyIHR5cGVzIG9mCisgKiBlbnRyaWVzIHRvIGFsbG93IHRoZSBjYWxsZXIgdG8gc2hvdyAicmVyZXJlIHJlbWFpbmluZyIuCisgKgorICogLSBDb25mbGljdGVkIHBhdGhzIHRoYXQgcmVyZXJlIGRvZXMgbm90IGhhbmRsZSBhcmUgYWRkZWQKKyAqIC0gQ29uZmxpY3RlZCBwYXRocyB0aGF0IGhhdmUgYmVlbiByZXNvbHZlZCBhcmUgbWFya2VkIGFzIHN1Y2gKKyAqICAgYnkgc3RvcmluZyBSRVJFUkVfUkVTT0xWRUQgdG8gLnV0aWwgZmllbGQgKHdoZXJlIGNvbmZsaWN0IElECisgKiAgIGlzIGV4cGVjdGVkIHRvIGJlIHN0b3JlZCkuCisgKgorICogRG8gKm5vdCogd3JpdGUgTUVSR0VfUlIgZmlsZSBvdXQgYWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIE5FRURTV09SSzogd2UgbWF5IHdhbnQgdG8gZml4IHRoZSBjYWxsZXIgdGhhdCBpbXBsZW1lbnRzICJyZXJlcmUKKyAqIHJlbWFpbmluZyIgdG8gZG8gdGhpcyB3aXRob3V0IGFidXNpbmcgbWVyZ2VfcnIuCisgKi8KK2ludCByZXJlcmVfcmVtYWluaW5nKHN0cnVjdCBzdHJpbmdfbGlzdCAqbWVyZ2VfcnIpCit7CisJaW50IGk7CisJaWYgKHNldHVwX3JlcmVyZShtZXJnZV9yciwgUkVSRVJFX1JFQURPTkxZKSkKKwkJcmV0dXJuIDA7CisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHJlYWQgaW5kZXgiKTsKKworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7KSB7CisJCWludCBjb25mbGljdF90eXBlOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmUgPSBhY3RpdmVfY2FjaGVbaV07CisJCWkgPSBjaGVja19vbmVfY29uZmxpY3QoaSwgJmNvbmZsaWN0X3R5cGUpOworCQlpZiAoY29uZmxpY3RfdHlwZSA9PSBQVU5URUQpCisJCQlzdHJpbmdfbGlzdF9pbnNlcnQobWVyZ2VfcnIsIChjb25zdCBjaGFyICopZS0+bmFtZSk7CisJCWVsc2UgaWYgKGNvbmZsaWN0X3R5cGUgPT0gUkVTT0xWRUQpIHsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJCWl0ID0gc3RyaW5nX2xpc3RfbG9va3VwKG1lcmdlX3JyLCAoY29uc3QgY2hhciAqKWUtPm5hbWUpOworCQkJaWYgKGl0ICE9IE5VTEwpIHsKKwkJCQlmcmVlX3JlcmVyZV9pZChpdCk7CisJCQkJaXQtPnV0aWwgPSBSRVJFUkVfUkVTT0xWRUQ7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBjb25mbGljdCBpZGVudGlmaWVkIGJ5ICJpZCI7IHRoZSBjaGFuZ2UgYmV0d2VlbiBpdHMKKyAqICJwcmVpbWFnZSIgKGkuZS4gYSBwcmV2aW91cyBjb250ZW50cyB3aXRoIGNvbmZsaWN0IG1hcmtlcnMpIGFuZCBpdHMKKyAqICJwb3N0aW1hZ2UiIChpLmUuIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRlbnRzIHdpdGggY29uZmxpY3RzCisgKiByZXNvbHZlZCkgbWF5IGFwcGx5IGNsZWFubHkgdG8gdGhlIGNvbnRlbnRzIHN0b3JlZCBpbiAicGF0aCIsIGkuZS4KKyAqIHRoZSBjb25mbGljdCB0aGlzIHRpbWUgYXJvdW5kLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzc2Z1bCByZXBsYXkgb2YgcmVjb3JkZWQgcmVzb2x1dGlvbiwgb3Igbm9uLXplcm8KKyAqIGZvciBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IG1lcmdlKGNvbnN0IHN0cnVjdCByZXJlcmVfaWQgKmlkLCBjb25zdCBjaGFyICpwYXRoKQoreworCUZJTEUgKmY7CisJaW50IHJldDsKKwltbWZpbGVfdCBjdXIgPSB7TlVMTCwgMH0sIGJhc2UgPSB7TlVMTCwgMH0sIG90aGVyID0ge05VTEwsIDB9OworCW1tYnVmZmVyX3QgcmVzdWx0ID0ge05VTEwsIDB9OworCisJLyoKKwkgKiBOb3JtYWxpemUgdGhlIGNvbmZsaWN0cyBpbiBwYXRoIGFuZCB3cml0ZSBpdCBvdXQgdG8KKwkgKiAidGhpc2ltYWdlIiB0ZW1wb3JhcnkgZmlsZS4KKwkgKi8KKwlpZiAoaGFuZGxlX2ZpbGUocGF0aCwgTlVMTCwgcmVyZXJlX3BhdGgoaWQsICJ0aGlzaW1hZ2UiKSkgPCAwKSB7CisJCXJldCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChyZWFkX21tZmlsZSgmY3VyLCByZXJlcmVfcGF0aChpZCwgInRoaXNpbWFnZSIpKSB8fAorCSAgICByZWFkX21tZmlsZSgmYmFzZSwgcmVyZXJlX3BhdGgoaWQsICJwcmVpbWFnZSIpKSB8fAorCSAgICByZWFkX21tZmlsZSgmb3RoZXIsIHJlcmVyZV9wYXRoKGlkLCAicG9zdGltYWdlIikpKSB7CisJCXJldCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogQSB0aHJlZS13YXkgbWVyZ2UuIE5vdGUgdGhhdCB0aGlzIGhvbm9ycyB1c2VyLWN1c3RvbWl6YWJsZQorCSAqIGxvdy1sZXZlbCBtZXJnZSBkcml2ZXIgc2V0dGluZ3MuCisJICovCisJcmV0ID0gbGxfbWVyZ2UoJnJlc3VsdCwgcGF0aCwgJmJhc2UsIE5VTEwsICZjdXIsICIiLCAmb3RoZXIsICIiLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCS8qCisJICogQSBzdWNjZXNzZnVsIHJlcGxheSBvZiByZWNvcmRlZCByZXNvbHV0aW9uLgorCSAqIE1hcmsgdGhhdCAicG9zdGltYWdlIiB3YXMgdXNlZCB0byBoZWxwIGdjLgorCSAqLworCWlmICh1dGltZShyZXJlcmVfcGF0aChpZCwgInBvc3RpbWFnZSIpLCBOVUxMKSA8IDApCisJCXdhcm5pbmcoImZhaWxlZCB1dGltZSgpIG9uICVzOiAlcyIsCisJCQlyZXJlcmVfcGF0aChpZCwgInBvc3RpbWFnZSIpLAorCQkJc3RyZXJyb3IoZXJybm8pKTsKKworCS8qIFVwZGF0ZSAicGF0aCIgd2l0aCB0aGUgcmVzb2x1dGlvbiAqLworCWYgPSBmb3BlbihwYXRoLCAidyIpOworCWlmICghZikKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgb3BlbiAlczogJXMiLCBwYXRoLAorCQkJICAgICBzdHJlcnJvcihlcnJubykpOworCWlmIChmd3JpdGUocmVzdWx0LnB0ciwgcmVzdWx0LnNpemUsIDEsIGYpICE9IDEpCisJCWVycm9yKCJDb3VsZCBub3Qgd3JpdGUgJXM6ICVzIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKwlpZiAoZmNsb3NlKGYpKQorCQlyZXR1cm4gZXJyb3IoIldyaXRpbmcgJXMgZmFpbGVkOiAlcyIsIHBhdGgsCisJCQkgICAgIHN0cmVycm9yKGVycm5vKSk7CisKK291dDoKKwlmcmVlKGN1ci5wdHIpOworCWZyZWUoYmFzZS5wdHIpOworCWZyZWUob3RoZXIucHRyKTsKKwlmcmVlKHJlc3VsdC5wdHIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsKKworc3RhdGljIHZvaWQgdXBkYXRlX3BhdGhzKHN0cnVjdCBzdHJpbmdfbGlzdCAqdXBkYXRlKQoreworCWludCBpOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIDEpOworCisJZm9yIChpID0gMDsgaSA8IHVwZGF0ZS0+bnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSA9ICZ1cGRhdGUtPml0ZW1zW2ldOworCQlpZiAoYWRkX2ZpbGVfdG9fY2FjaGUoaXRlbS0+c3RyaW5nLCAwKSkKKwkJCWV4aXQoMTI4KTsKKwkJZnByaW50ZihzdGRlcnIsICJTdGFnZWQgJyVzJyB1c2luZyBwcmV2aW91cyByZXNvbHV0aW9uLlxuIiwKKwkJCWl0ZW0tPnN0cmluZyk7CisJfQorCisJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkKSB7CisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmluZGV4X2xvY2ssIENPTU1JVF9MT0NLKSkKKwkJCWRpZSgiVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIik7CisJfSBlbHNlCisJCXJvbGxiYWNrX2xvY2tfZmlsZSgmaW5kZXhfbG9jayk7Cit9CisKKy8qCisgKiBUaGUgcGF0aCBpbmRpY2F0ZWQgYnkgcnJfaXRlbSBtYXkgc3RpbGwgaGF2ZSBjb25mbGljdCBmb3Igd2hpY2ggd2UKKyAqIGhhdmUgYSByZWNvcmRlZCByZXNvbHV0aW9uLCBpbiB3aGljaCBjYXNlIHJlcGxheSBpdCBhbmQgb3B0aW9uYWxseQorICogdXBkYXRlIGl0LiAgT3IgaXQgbWF5IGhhdmUgYmVlbiByZXNvbHZlZCBieSB0aGUgdXNlciBhbmQgd2UgbWF5CisgKiBvbmx5IGhhdmUgdGhlIHByZWltYWdlIGZvciB0aGF0IGNvbmZsaWN0LCBpbiB3aGljaCBjYXNlIHRoZSByZXN1bHQKKyAqIG5lZWRzIHRvIGJlIHJlY29yZGVkIGFzIGEgcmVzb2x1dGlvbiBpbiBhIHBvc3RpbWFnZSBmaWxlLgorICovCitzdGF0aWMgdm9pZCBkb19yZXJlcmVfb25lX3BhdGgoc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnJyX2l0ZW0sCisJCQkgICAgICAgc3RydWN0IHN0cmluZ19saXN0ICp1cGRhdGUpCit7CisJY29uc3QgY2hhciAqcGF0aCA9IHJyX2l0ZW0tPnN0cmluZzsKKwljb25zdCBzdHJ1Y3QgcmVyZXJlX2lkICppZCA9IHJyX2l0ZW0tPnV0aWw7CisKKwkvKiBJcyB0aGVyZSBhIHJlY29yZGVkIHJlc29sdXRpb24gd2UgY291bGQgYXR0ZW1wdCB0byBhcHBseT8gKi8KKwlpZiAoaGFzX3JlcmVyZV9yZXNvbHV0aW9uKGlkKSkgeworCQlpZiAobWVyZ2UoaWQsIHBhdGgpKQorCQkJcmV0dXJuOyAvKiBmYWlsZWQgdG8gcmVwbGF5ICovCisKKwkJaWYgKHJlcmVyZV9hdXRvdXBkYXRlKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KHVwZGF0ZSwgcGF0aCk7CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJSZXNvbHZlZCAnJXMnIHVzaW5nIHByZXZpb3VzIHJlc29sdXRpb24uXG4iLAorCQkJCXBhdGgpOworCX0gZWxzZSBpZiAoIWhhbmRsZV9maWxlKHBhdGgsIE5VTEwsIE5VTEwpKSB7CisJCS8qIFRoZSB1c2VyIGhhcyByZXNvbHZlZCBpdC4gKi8KKwkJY29weV9maWxlKHJlcmVyZV9wYXRoKGlkLCAicG9zdGltYWdlIiksIHBhdGgsIDA2NjYpOworCQlmcHJpbnRmKHN0ZGVyciwgIlJlY29yZGVkIHJlc29sdXRpb24gZm9yICclcycuXG4iLCBwYXRoKTsKKwl9IGVsc2UgeworCQlyZXR1cm47CisJfQorCWZyZWVfcmVyZXJlX2lkKHJyX2l0ZW0pOworCXJyX2l0ZW0tPnV0aWwgPSBOVUxMOworfQorCitzdGF0aWMgaW50IGRvX3BsYWluX3JlcmVyZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJyLCBpbnQgZmQpCit7CisJc3RydWN0IHN0cmluZ19saXN0IGNvbmZsaWN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RydWN0IHN0cmluZ19saXN0IHVwZGF0ZSA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWludCBpOworCisJZmluZF9jb25mbGljdCgmY29uZmxpY3QpOworCisJLyoKKwkgKiBNRVJHRV9SUiByZWNvcmRzIHBhdGhzIHdpdGggY29uZmxpY3RzIGltbWVkaWF0ZWx5IGFmdGVyCisJICogbWVyZ2UgZmFpbGVkLiAgU29tZSBvZiB0aGUgY29uZmxpY3RlZCBwYXRocyBtaWdodCBoYXZlIGJlZW4KKwkgKiBoYW5kIHJlc29sdmVkIGluIHRoZSB3b3JraW5nIHRyZWUgc2luY2UgdGhlbiwgYnV0IHRoZQorCSAqIGluaXRpYWwgcnVuIHdvdWxkIGNhdGNoIGFsbCBhbmQgcmVnaXN0ZXIgdGhlaXIgcHJlaW1hZ2VzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBjb25mbGljdC5ucjsgaSsrKSB7CisJCXN0cnVjdCByZXJlcmVfaWQgKmlkOworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljb25zdCBjaGFyICpwYXRoID0gY29uZmxpY3QuaXRlbXNbaV0uc3RyaW5nOworCQlpbnQgcmV0OworCisJCWlmIChzdHJpbmdfbGlzdF9oYXNfc3RyaW5nKHJyLCBwYXRoKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEFzayBoYW5kbGVfZmlsZSgpIHRvIHNjYW4gYW5kIGFzc2lnbiBhCisJCSAqIGNvbmZsaWN0IElELiAgTm8gbmVlZCB0byB3cml0ZSBhbnl0aGluZyBvdXQKKwkJICogeWV0LgorCQkgKi8KKwkJcmV0ID0gaGFuZGxlX2ZpbGUocGF0aCwgc2hhMSwgTlVMTCk7CisJCWlmIChyZXQgPCAxKQorCQkJY29udGludWU7CisKKwkJaWQgPSBuZXdfcmVyZXJlX2lkKHNoYTEpOworCQlzdHJpbmdfbGlzdF9pbnNlcnQocnIsIHBhdGgpLT51dGlsID0gaWQ7CisKKwkJLyoKKwkJICogSWYgdGhlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCwgY3JlYXRlCisJCSAqIGl0LiAgbWtkaXJfaW5fZ2l0ZGlyKCkgd2lsbCBmYWlsIHdpdGgKKwkJICogRUVYSVNUIGlmIHRoZXJlIGFscmVhZHkgaXMgb25lLgorCQkgKgorCQkgKiBORUVEU1dPUks6IG1ha2Ugc3VyZSAiZ2MiIGRvZXMgbm90IHJlbW92ZQorCQkgKiBwcmVpbWFnZSB3aXRob3V0IHJlbW92aW5nIHRoZSBkaXJlY3RvcnkuCisJCSAqLworCQlpZiAobWtkaXJfaW5fZ2l0ZGlyKHJlcmVyZV9wYXRoKGlkLCBOVUxMKSkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBXZSBhcmUgdGhlIGZpcnN0IHRvIGVuY291bnRlciB0aGlzCisJCSAqIGNvbmZsaWN0LiAgQXNrIGhhbmRsZV9maWxlKCkgdG8gd3JpdGUgdGhlCisJCSAqIG5vcm1hbGl6ZWQgY29udGVudHMgdG8gdGhlICJwcmVpbWFnZSIgZmlsZS4KKwkJICovCisJCWhhbmRsZV9maWxlKHBhdGgsIE5VTEwsIHJlcmVyZV9wYXRoKGlkLCAicHJlaW1hZ2UiKSk7CisJCWZwcmludGYoc3RkZXJyLCAiUmVjb3JkZWQgcHJlaW1hZ2UgZm9yICclcydcbiIsIHBhdGgpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCByci0+bnI7IGkrKykKKwkJZG9fcmVyZXJlX29uZV9wYXRoKCZyci0+aXRlbXNbaV0sICZ1cGRhdGUpOworCisJaWYgKHVwZGF0ZS5ucikKKwkJdXBkYXRlX3BhdGhzKCZ1cGRhdGUpOworCisJcmV0dXJuIHdyaXRlX3JyKHJyLCBmZCk7Cit9CisKK3N0YXRpYyB2b2lkIGdpdF9yZXJlcmVfY29uZmlnKHZvaWQpCit7CisJZ2l0X2NvbmZpZ19nZXRfYm9vbCgicmVyZXJlLmVuYWJsZWQiLCAmcmVyZXJlX2VuYWJsZWQpOworCWdpdF9jb25maWdfZ2V0X2Jvb2woInJlcmVyZS5hdXRvdXBkYXRlIiwgJnJlcmVyZV9hdXRvdXBkYXRlKTsKKwlnaXRfY29uZmlnKGdpdF9kZWZhdWx0X2NvbmZpZywgTlVMTCk7Cit9CisKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX3JyX2NhY2hlLCAicnItY2FjaGUiKQorCitzdGF0aWMgaW50IGlzX3JlcmVyZV9lbmFibGVkKHZvaWQpCit7CisJaW50IHJyX2NhY2hlX2V4aXN0czsKKworCWlmICghcmVyZXJlX2VuYWJsZWQpCisJCXJldHVybiAwOworCisJcnJfY2FjaGVfZXhpc3RzID0gaXNfZGlyZWN0b3J5KGdpdF9wYXRoX3JyX2NhY2hlKCkpOworCWlmIChyZXJlcmVfZW5hYmxlZCA8IDApCisJCXJldHVybiBycl9jYWNoZV9leGlzdHM7CisKKwlpZiAoIXJyX2NhY2hlX2V4aXN0cyAmJiBta2Rpcl9pbl9naXRkaXIoZ2l0X3BhdGhfcnJfY2FjaGUoKSkpCisJCWRpZSgiQ291bGQgbm90IGNyZWF0ZSBkaXJlY3RvcnkgJXMiLCBnaXRfcGF0aF9ycl9jYWNoZSgpKTsKKwlyZXR1cm4gMTsKK30KKworaW50IHNldHVwX3JlcmVyZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm1lcmdlX3JyLCBpbnQgZmxhZ3MpCit7CisJaW50IGZkOworCisJZ2l0X3JlcmVyZV9jb25maWcoKTsKKwlpZiAoIWlzX3JlcmVyZV9lbmFibGVkKCkpCisJCXJldHVybiAtMTsKKworCWlmIChmbGFncyAmIChSRVJFUkVfQVVUT1VQREFURXxSRVJFUkVfTk9BVVRPVVBEQVRFKSkKKwkJcmVyZXJlX2F1dG91cGRhdGUgPSAhIShmbGFncyAmIFJFUkVSRV9BVVRPVVBEQVRFKTsKKwlpZiAoZmxhZ3MgJiBSRVJFUkVfUkVBRE9OTFkpCisJCWZkID0gMDsKKwllbHNlCisJCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmd3JpdGVfbG9jaywgZ2l0X3BhdGhfbWVyZ2VfcnIoKSwKKwkJCQkJICAgICAgIExPQ0tfRElFX09OX0VSUk9SKTsKKwlyZWFkX3JyKG1lcmdlX3JyKTsKKwlyZXR1cm4gZmQ7Cit9CisKKy8qCisgKiBUaGUgbWFpbiBlbnRyeSBwb2ludCB0aGF0IGlzIGNhbGxlZCBpbnRlcm5hbGx5IGZyb20gY29kZXBhdGhzIHRoYXQKKyAqIHBlcmZvcm0gbWVyZ3kgb3BlcmF0aW9ucywgcG9zc2libHkgbGVhdmluZyBjb25mbGljdGVkIGluZGV4IGVudHJpZXMKKyAqIGFuZCB3b3JraW5nIHRyZWUgZmlsZXMuCisgKi8KK2ludCByZXJlcmUoaW50IGZsYWdzKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCBtZXJnZV9yciA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCWludCBmZDsKKworCWZkID0gc2V0dXBfcmVyZXJlKCZtZXJnZV9yciwgZmxhZ3MpOworCWlmIChmZCA8IDApCisJCXJldHVybiAwOworCXJldHVybiBkb19wbGFpbl9yZXJlcmUoJm1lcmdlX3JyLCBmZCk7Cit9CisKK3N0YXRpYyBpbnQgcmVyZXJlX2ZvcmdldF9vbmVfcGF0aChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJyKQoreworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCXN0cnVjdCByZXJlcmVfaWQgKmlkOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbTsKKworCS8qCisJICogUmVjcmVhdGUgdGhlIG9yaWdpbmFsIGNvbmZsaWN0IGZyb20gdGhlIHN0YWdlcyBpbiB0aGUKKwkgKiBpbmRleCBhbmQgY29tcHV0ZSB0aGUgY29uZmxpY3QgSUQKKwkgKi8KKwlyZXQgPSBoYW5kbGVfY2FjaGUocGF0aCwgc2hhMSwgTlVMTCk7CisJaWYgKHJldCA8IDEpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHBhcnNlIGNvbmZsaWN0IGh1bmtzIGluICclcyciLCBwYXRoKTsKKworCS8qIE51a2UgdGhlIHJlY29yZGVkIHJlc29sdXRpb24gZm9yIHRoZSBjb25mbGljdCAqLworCWlkID0gbmV3X3JlcmVyZV9pZChzaGExKTsKKwlmaWxlbmFtZSA9IHJlcmVyZV9wYXRoKGlkLCAicG9zdGltYWdlIik7CisJaWYgKHVubGluayhmaWxlbmFtZSkpCisJCXJldHVybiAoZXJybm8gPT0gRU5PRU5UCisJCQk/IGVycm9yKCJubyByZW1lbWJlcmVkIHJlc29sdXRpb24gZm9yICVzIiwgcGF0aCkKKwkJCTogZXJyb3IoImNhbm5vdCB1bmxpbmsgJXM6ICVzIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSkpOworCisJLyoKKwkgKiBVcGRhdGUgdGhlIHByZWltYWdlIHNvIHRoYXQgdGhlIHVzZXIgY2FuIHJlc29sdmUgdGhlCisJICogY29uZmxpY3QgaW4gdGhlIHdvcmtpbmcgdHJlZSwgcnVuIHVzIGFnYWluIHRvIHJlY29yZAorCSAqIHRoZSBwb3N0aW1hZ2UuCisJICovCisJaGFuZGxlX2NhY2hlKHBhdGgsIHNoYTEsIHJlcmVyZV9wYXRoKGlkLCAicHJlaW1hZ2UiKSk7CisJZnByaW50ZihzdGRlcnIsICJVcGRhdGVkIHByZWltYWdlIGZvciAnJXMnXG4iLCBwYXRoKTsKKworCS8qCisJICogQW5kIHJlbWVtYmVyIHRoYXQgd2UgY2FuIHJlY29yZCByZXNvbHV0aW9uIGZvciB0aGlzCisJICogY29uZmxpY3Qgd2hlbiB0aGUgdXNlciBpcyBkb25lLgorCSAqLworCWl0ZW0gPSBzdHJpbmdfbGlzdF9pbnNlcnQocnIsIHBhdGgpOworCWZyZWVfcmVyZXJlX2lkKGl0ZW0pOworCWl0ZW0tPnV0aWwgPSBpZDsKKwlmcHJpbnRmKHN0ZGVyciwgIkZvcmdvdCByZXNvbHV0aW9uIGZvciAlc1xuIiwgcGF0aCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCByZXJlcmVfZm9yZ2V0KHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMpCit7CisJaW50IGksIGZkOworCXN0cnVjdCBzdHJpbmdfbGlzdCBjb25mbGljdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdCBtZXJnZV9yciA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHJlYWQgaW5kZXgiKTsKKworCWZkID0gc2V0dXBfcmVyZXJlKCZtZXJnZV9yciwgUkVSRVJFX05PQVVUT1VQREFURSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIFRoZSBwYXRocyBtYXkgaGF2ZSBiZWVuIHJlc29sdmVkIChpbmNvcnJlY3RseSk7CisJICogcmVjb3ZlciB0aGUgb3JpZ2luYWwgY29uZmxpY3RlZCBzdGF0ZSBhbmQgdGhlbgorCSAqIGZpbmQgdGhlIGNvbmZsaWN0ZWQgcGF0aHMuCisJICovCisJdW5tZXJnZV9jYWNoZShwYXRoc3BlYyk7CisJZmluZF9jb25mbGljdCgmY29uZmxpY3QpOworCWZvciAoaSA9IDA7IGkgPCBjb25mbGljdC5ucjsgaSsrKSB7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCA9ICZjb25mbGljdC5pdGVtc1tpXTsKKwkJaWYgKCFtYXRjaF9wYXRoc3BlYyhwYXRoc3BlYywgaXQtPnN0cmluZywKKwkJCQkgICAgc3RybGVuKGl0LT5zdHJpbmcpLCAwLCBOVUxMLCAwKSkKKwkJCWNvbnRpbnVlOworCQlyZXJlcmVfZm9yZ2V0X29uZV9wYXRoKGl0LT5zdHJpbmcsICZtZXJnZV9ycik7CisJfQorCXJldHVybiB3cml0ZV9ycigmbWVyZ2VfcnIsIGZkKTsKK30KKworLyoKKyAqIEdhcmJhZ2UgY29sbGVjdGlvbiBzdXBwb3J0CisgKi8KKworLyoKKyAqIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCByZWVudHJhbnQgYnV0IGlzIHVzZWQgb25seSBvbmUtYXQtYS10aW1lCisgKiBzbyBpdCBkb2VzIG5vdCBtYXR0ZXIgcmlnaHQgbm93LgorICovCitzdGF0aWMgc3RydWN0IHJlcmVyZV9pZCAqZGlybmFtZV90b19pZChjb25zdCBjaGFyICpuYW1lKQoreworCXN0YXRpYyBzdHJ1Y3QgcmVyZXJlX2lkIGlkOworCXN0cmNweShpZC5oZXgsIG5hbWUpOworCXJldHVybiAmaWQ7Cit9CisKK3N0YXRpYyB0aW1lX3QgcmVyZXJlX2NyZWF0ZWRfYXQoY29uc3QgY2hhciAqZGlyX25hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJc3RydWN0IHJlcmVyZV9pZCAqaWQgPSBkaXJuYW1lX3RvX2lkKGRpcl9uYW1lKTsKKworCXJldHVybiBzdGF0KHJlcmVyZV9wYXRoKGlkLCAicHJlaW1hZ2UiKSwgJnN0KSA/ICh0aW1lX3QpIDAgOiBzdC5zdF9tdGltZTsKK30KKworc3RhdGljIHRpbWVfdCByZXJlcmVfbGFzdF91c2VkX2F0KGNvbnN0IGNoYXIgKmRpcl9uYW1lKQoreworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCByZXJlcmVfaWQgKmlkID0gZGlybmFtZV90b19pZChkaXJfbmFtZSk7CisKKwlyZXR1cm4gc3RhdChyZXJlcmVfcGF0aChpZCwgInBvc3RpbWFnZSIpLCAmc3QpID8gKHRpbWVfdCkgMCA6IHN0LnN0X210aW1lOworfQorCisvKgorICogUmVtb3ZlIHRoZSByZWNvcmRlZCByZXNvbHV0aW9uIGZvciBhIGdpdmVuIGNvbmZsaWN0IElECisgKi8KK3N0YXRpYyB2b2lkIHVubGlua19ycl9pdGVtKHN0cnVjdCByZXJlcmVfaWQgKmlkKQoreworCXVubGluayhyZXJlcmVfcGF0aChpZCwgInRoaXNpbWFnZSIpKTsKKwl1bmxpbmsocmVyZXJlX3BhdGgoaWQsICJwcmVpbWFnZSIpKTsKKwl1bmxpbmsocmVyZXJlX3BhdGgoaWQsICJwb3N0aW1hZ2UiKSk7CisJLyoKKwkgKiBORUVEU1dPUks6IHdoYXQgaWYgdGhpcyBybWRpcigpIGZhaWxzPyAgV291bGRuJ3Qgd2UgdGhlbgorCSAqIGFzc3VtZSB0aGF0IHdlIGFscmVhZHkgaGF2ZSBwcmVpbWFnZSByZWNvcmRlZCBpbgorCSAqIGRvX3BsYWluX3JlcmVyZSgpPworCSAqLworCXJtZGlyKHJlcmVyZV9wYXRoKGlkLCBOVUxMKSk7Cit9CisKK3ZvaWQgcmVyZXJlX2djKHN0cnVjdCBzdHJpbmdfbGlzdCAqcnIpCit7CisJc3RydWN0IHN0cmluZ19saXN0IHRvX3JlbW92ZSA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCURJUiAqZGlyOworCXN0cnVjdCBkaXJlbnQgKmU7CisJaW50IGksIGN1dG9mZjsKKwl0aW1lX3Qgbm93ID0gdGltZShOVUxMKSwgdGhlbjsKKwlpbnQgY3V0b2ZmX25vcmVzb2x2ZSA9IDE1OworCWludCBjdXRvZmZfcmVzb2x2ZSA9IDYwOworCisJaWYgKHNldHVwX3JlcmVyZShyciwgMCkgPCAwKQorCQlyZXR1cm47CisKKwlnaXRfY29uZmlnX2dldF9pbnQoImdjLnJlcmVyZXJlc29sdmVkIiwgJmN1dG9mZl9yZXNvbHZlKTsKKwlnaXRfY29uZmlnX2dldF9pbnQoImdjLnJlcmVyZXVucmVzb2x2ZWQiLCAmY3V0b2ZmX25vcmVzb2x2ZSk7CisJZ2l0X2NvbmZpZyhnaXRfZGVmYXVsdF9jb25maWcsIE5VTEwpOworCWRpciA9IG9wZW5kaXIoZ2l0X3BhdGgoInJyLWNhY2hlIikpOworCWlmICghZGlyKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBvcGVuIHJyLWNhY2hlIGRpcmVjdG9yeSIpOworCS8qIENvbGxlY3Qgc3RhbGUgY29uZmxpY3QgSURzIC4uLiAqLworCXdoaWxlICgoZSA9IHJlYWRkaXIoZGlyKSkpIHsKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCXRoZW4gPSByZXJlcmVfbGFzdF91c2VkX2F0KGUtPmRfbmFtZSk7CisJCWlmICh0aGVuKSB7CisJCQljdXRvZmYgPSBjdXRvZmZfcmVzb2x2ZTsKKwkJfSBlbHNlIHsKKwkJCXRoZW4gPSByZXJlcmVfY3JlYXRlZF9hdChlLT5kX25hbWUpOworCQkJaWYgKCF0aGVuKQorCQkJCWNvbnRpbnVlOworCQkJY3V0b2ZmID0gY3V0b2ZmX25vcmVzb2x2ZTsKKwkJfQorCQlpZiAodGhlbiA8IG5vdyAtIGN1dG9mZiAqIDg2NDAwKQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZ0b19yZW1vdmUsIGUtPmRfbmFtZSk7CisJfQorCWNsb3NlZGlyKGRpcik7CisJLyogLi4uIGFuZCB0aGVuIHJlbW92ZSB0aGVtIG9uZS1ieS1vbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdG9fcmVtb3ZlLm5yOyBpKyspCisJCXVubGlua19ycl9pdGVtKGRpcm5hbWVfdG9faWQodG9fcmVtb3ZlLml0ZW1zW2ldLnN0cmluZykpOworCXN0cmluZ19saXN0X2NsZWFyKCZ0b19yZW1vdmUsIDApOworCXJvbGxiYWNrX2xvY2tfZmlsZSgmd3JpdGVfbG9jayk7Cit9CisKKy8qCisgKiBEdXJpbmcgYSBjb25mbGljdCByZXNvbHV0aW9uLCBhZnRlciAicmVyZXJlIiByZWNvcmRlZCB0aGUKKyAqIHByZWltYWdlcywgYWJhbmRvbiB0aGVtIGlmIHRoZSB1c2VyIGRpZCBub3QgcmVzb2x2ZSB0aGVtIG9yCisgKiByZWNvcmQgdGhlaXIgcmVzb2x1dGlvbnMuICBBbmQgZHJvcCAkR0lUX0RJUi9NRVJHRV9SUi4KKyAqCisgKiBORUVEU1dPUks6IHNob3VsZG4ndCB3ZSBiZSBjYWxsaW5nIHRoaXMgZnJvbSAicmVzZXQgLS1oYXJkIj8KKyAqLwordm9pZCByZXJlcmVfY2xlYXIoc3RydWN0IHN0cmluZ19saXN0ICptZXJnZV9ycikKK3sKKwlpbnQgaTsKKworCWlmIChzZXR1cF9yZXJlcmUobWVyZ2VfcnIsIDApIDwgMCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IG1lcmdlX3JyLT5ucjsgaSsrKSB7CisJCXN0cnVjdCByZXJlcmVfaWQgKmlkID0gbWVyZ2VfcnItPml0ZW1zW2ldLnV0aWw7CisJCWlmICghaGFzX3JlcmVyZV9yZXNvbHV0aW9uKGlkKSkKKwkJCXVubGlua19ycl9pdGVtKGlkKTsKKwl9CisJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGhfbWVyZ2VfcnIoKSk7CisJcm9sbGJhY2tfbG9ja19maWxlKCZ3cml0ZV9sb2NrKTsKK30KZGlmZiAtLWdpdCBhL3JlcmVyZS5oIGIvcmVyZXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTIyMmU5MQotLS0gL2Rldi9udWxsCisrKyBiL3JlcmVyZS5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgUkVSRVJFX0gKKyNkZWZpbmUgUkVSRVJFX0gKKworI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0cnVjdCBwYXRoc3BlYzsKKworI2RlZmluZSBSRVJFUkVfQVVUT1VQREFURSAgIDAxCisjZGVmaW5lIFJFUkVSRV9OT0FVVE9VUERBVEUgMDIKKyNkZWZpbmUgUkVSRVJFX1JFQURPTkxZICAgICAwNAorCisvKgorICogTWFya3MgcGF0aHMgdGhhdCBoYXZlIGJlZW4gaGFuZC1yZXNvbHZlZCBhbmQgYWRkZWQgdG8gdGhlCisgKiBpbmRleC4gU2V0IGluIHRoZSB1dGlsIGZpZWxkIG9mIHN1Y2ggcGF0aHMgYWZ0ZXIgY2FsbGluZworICogcmVyZXJlX3JlbWFpbmluZy4KKyAqLworZXh0ZXJuIHZvaWQgKlJFUkVSRV9SRVNPTFZFRDsKKworc3RydWN0IHJlcmVyZV9pZCB7CisJY2hhciBoZXhbNDFdOworfTsKKworZXh0ZXJuIGludCBzZXR1cF9yZXJlcmUoc3RydWN0IHN0cmluZ19saXN0ICosIGludCk7CitleHRlcm4gaW50IHJlcmVyZShpbnQpOworLyoKKyAqIEdpdmVuIHRoZSBjb25mbGljdCBJRCBhbmQgdGhlIG5hbWUgb2YgYSAiZmlsZSIgdXNlZCBmb3IgcmVwbGF5aW5nCisgKiB0aGUgcmVjb3JkZWQgcmVzb2x1dGlvbiAoZS5nLiAicHJlaW1hZ2UiLCAicG9zdGltYWdlIiksIHJldHVybiB0aGUKKyAqIHBhdGggdG8gdGhhdCBmaWxlc3lzdGVtIGVudGl0eS4gIFdpdGggImZpbGUiIHNwZWNpZmllZCB3aXRoIE5VTEwsCisgKiByZXR1cm4gdGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB0aGF0IGhvdXNlcyB0aGVzZSBmaWxlcy4KKyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKnJlcmVyZV9wYXRoKGNvbnN0IHN0cnVjdCByZXJlcmVfaWQgKiwgY29uc3QgY2hhciAqZmlsZSk7CitleHRlcm4gaW50IHJlcmVyZV9mb3JnZXQoc3RydWN0IHBhdGhzcGVjICopOworZXh0ZXJuIGludCByZXJlcmVfcmVtYWluaW5nKHN0cnVjdCBzdHJpbmdfbGlzdCAqKTsKK2V4dGVybiB2b2lkIHJlcmVyZV9jbGVhcihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKik7CitleHRlcm4gdm9pZCByZXJlcmVfZ2Moc3RydWN0IHN0cmluZ19saXN0ICopOworCisjZGVmaW5lIE9QVF9SRVJFUkVfQVVUT1VQREFURSh2KSBPUFRfVVlOKDAsICJyZXJlcmUtYXV0b3VwZGF0ZSIsICh2KSwgXAorCU5fKCJ1cGRhdGUgdGhlIGluZGV4IHdpdGggcmV1c2VkIGNvbmZsaWN0IHJlc29sdXRpb24gaWYgcG9zc2libGUiKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZXNvbHZlLXVuZG8uYyBiL3Jlc29sdmUtdW5kby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2OGEyZWIKLS0tIC9kZXYvbnVsbAorKysgYi9yZXNvbHZlLXVuZG8uYwpAQCAtMCwwICsxLDE5MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAicmVzb2x2ZS11bmRvLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyogVGhlIG9ubHkgZXJyb3IgY2FzZSBpcyB0byBydW4gb3V0IG9mIG1lbW9yeSBpbiBzdHJpbmctbGlzdCAqLwordm9pZCByZWNvcmRfcmVzb2x2ZV91bmRvKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpsb3N0OworCXN0cnVjdCByZXNvbHZlX3VuZG9faW5mbyAqdWk7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZXNvbHZlX3VuZG87CisJaW50IHN0YWdlID0gY2Vfc3RhZ2UoY2UpOworCisJaWYgKCFzdGFnZSkKKwkJcmV0dXJuOworCisJaWYgKCFpc3RhdGUtPnJlc29sdmVfdW5kbykgeworCQlyZXNvbHZlX3VuZG8gPSB4Y2FsbG9jKDEsIHNpemVvZigqcmVzb2x2ZV91bmRvKSk7CisJCXJlc29sdmVfdW5kby0+c3RyZHVwX3N0cmluZ3MgPSAxOworCQlpc3RhdGUtPnJlc29sdmVfdW5kbyA9IHJlc29sdmVfdW5kbzsKKwl9CisJcmVzb2x2ZV91bmRvID0gaXN0YXRlLT5yZXNvbHZlX3VuZG87CisJbG9zdCA9IHN0cmluZ19saXN0X2luc2VydChyZXNvbHZlX3VuZG8sIGNlLT5uYW1lKTsKKwlpZiAoIWxvc3QtPnV0aWwpCisJCWxvc3QtPnV0aWwgPSB4Y2FsbG9jKDEsIHNpemVvZigqdWkpKTsKKwl1aSA9IGxvc3QtPnV0aWw7CisJaGFzaGNweSh1aS0+c2hhMVtzdGFnZSAtIDFdLCBjZS0+c2hhMSk7CisJdWktPm1vZGVbc3RhZ2UgLSAxXSA9IGNlLT5jZV9tb2RlOworfQorCit2b2lkIHJlc29sdmVfdW5kb193cml0ZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IHN0cmluZ19saXN0ICpyZXNvbHZlX3VuZG8pCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCByZXNvbHZlX3VuZG8pIHsKKwkJc3RydWN0IHJlc29sdmVfdW5kb19pbmZvICp1aSA9IGl0ZW0tPnV0aWw7CisJCWludCBpOworCisJCWlmICghdWkpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX2FkZHN0cihzYiwgaXRlbS0+c3RyaW5nKTsKKwkJc3RyYnVmX2FkZGNoKHNiLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiJW8lYyIsIHVpLT5tb2RlW2ldLCAwKTsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJaWYgKCF1aS0+bW9kZVtpXSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmJ1Zl9hZGQoc2IsIHVpLT5zaGExW2ldLCAyMCk7CisJCX0KKwl9Cit9CisKK3N0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvX3JlYWQoY29uc3QgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvOworCXNpemVfdCBsZW47CisJY2hhciAqZW5kcHRyOworCWludCBpOworCisJcmVzb2x2ZV91bmRvID0geGNhbGxvYygxLCBzaXplb2YoKnJlc29sdmVfdW5kbykpOworCXJlc29sdmVfdW5kby0+c3RyZHVwX3N0cmluZ3MgPSAxOworCisJd2hpbGUgKHNpemUpIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKmxvc3Q7CisJCXN0cnVjdCByZXNvbHZlX3VuZG9faW5mbyAqdWk7CisKKwkJbGVuID0gc3RybGVuKGRhdGEpICsgMTsKKwkJaWYgKHNpemUgPD0gbGVuKQorCQkJZ290byBlcnJvcjsKKwkJbG9zdCA9IHN0cmluZ19saXN0X2luc2VydChyZXNvbHZlX3VuZG8sIGRhdGEpOworCQlpZiAoIWxvc3QtPnV0aWwpCisJCQlsb3N0LT51dGlsID0geGNhbGxvYygxLCBzaXplb2YoKnVpKSk7CisJCXVpID0gbG9zdC0+dXRpbDsKKwkJc2l6ZSAtPSBsZW47CisJCWRhdGEgKz0gbGVuOworCisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCXVpLT5tb2RlW2ldID0gc3RydG91bChkYXRhLCAmZW5kcHRyLCA4KTsKKwkJCWlmICghZW5kcHRyIHx8IGVuZHB0ciA9PSBkYXRhIHx8ICplbmRwdHIpCisJCQkJZ290byBlcnJvcjsKKwkJCWxlbiA9IChlbmRwdHIgKyAxKSAtIChjaGFyKilkYXRhOworCQkJaWYgKHNpemUgPD0gbGVuKQorCQkJCWdvdG8gZXJyb3I7CisJCQlzaXplIC09IGxlbjsKKwkJCWRhdGEgKz0gbGVuOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJaWYgKCF1aS0+bW9kZVtpXSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzaXplIDwgMjApCisJCQkJZ290byBlcnJvcjsKKwkJCWhhc2hjcHkodWktPnNoYTFbaV0sIChjb25zdCB1bnNpZ25lZCBjaGFyICopZGF0YSk7CisJCQlzaXplIC09IDIwOworCQkJZGF0YSArPSAyMDsKKwkJfQorCX0KKwlyZXR1cm4gcmVzb2x2ZV91bmRvOworCitlcnJvcjoKKwlzdHJpbmdfbGlzdF9jbGVhcihyZXNvbHZlX3VuZG8sIDEpOworCWVycm9yKCJJbmRleCByZWNvcmRzIGludmFsaWQgcmVzb2x2ZS11bmRvIGluZm9ybWF0aW9uIik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgcmVzb2x2ZV91bmRvX2NsZWFyX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdCAqcmVzb2x2ZV91bmRvID0gaXN0YXRlLT5yZXNvbHZlX3VuZG87CisJaWYgKCFyZXNvbHZlX3VuZG8pCisJCXJldHVybjsKKwlzdHJpbmdfbGlzdF9jbGVhcihyZXNvbHZlX3VuZG8sIDEpOworCWZyZWUocmVzb2x2ZV91bmRvKTsKKwlpc3RhdGUtPnJlc29sdmVfdW5kbyA9IE5VTEw7CisJaXN0YXRlLT5jYWNoZV9jaGFuZ2VkIHw9IFJFU09MVkVfVU5ET19DSEFOR0VEOworfQorCitpbnQgdW5tZXJnZV9pbmRleF9lbnRyeV9hdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgaW50IHBvcykKK3sKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCByZXNvbHZlX3VuZG9faW5mbyAqcnU7CisJaW50IGksIGVyciA9IDAsIG1hdGNoZWQ7CisJY2hhciAqbmFtZTsKKworCWlmICghaXN0YXRlLT5yZXNvbHZlX3VuZG8pCisJCXJldHVybiBwb3M7CisKKwljZSA9IGlzdGF0ZS0+Y2FjaGVbcG9zXTsKKwlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCS8qIGFscmVhZHkgdW5tZXJnZWQgKi8KKwkJd2hpbGUgKChwb3MgPCBpc3RhdGUtPmNhY2hlX25yKSAmJgorCQkgICAgICAgISBzdHJjbXAoaXN0YXRlLT5jYWNoZVtwb3NdLT5uYW1lLCBjZS0+bmFtZSkpCisJCQlwb3MrKzsKKwkJcmV0dXJuIHBvcyAtIDE7IC8qIHJldHVybiB0aGUgbGFzdCBlbnRyeSBwcm9jZXNzZWQgKi8KKwl9CisJaXRlbSA9IHN0cmluZ19saXN0X2xvb2t1cChpc3RhdGUtPnJlc29sdmVfdW5kbywgY2UtPm5hbWUpOworCWlmICghaXRlbSkKKwkJcmV0dXJuIHBvczsKKwlydSA9IGl0ZW0tPnV0aWw7CisJaWYgKCFydSkKKwkJcmV0dXJuIHBvczsKKwltYXRjaGVkID0gY2UtPmNlX2ZsYWdzICYgQ0VfTUFUQ0hFRDsKKwluYW1lID0geHN0cmR1cChjZS0+bmFtZSk7CisJcmVtb3ZlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgcG9zKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmNlOworCQlpZiAoIXJ1LT5tb2RlW2ldKQorCQkJY29udGludWU7CisJCW5jZSA9IG1ha2VfY2FjaGVfZW50cnkocnUtPm1vZGVbaV0sIHJ1LT5zaGExW2ldLAorCQkJCSAgICAgICBuYW1lLCBpICsgMSwgMCk7CisJCWlmIChtYXRjaGVkKQorCQkJbmNlLT5jZV9mbGFncyB8PSBDRV9NQVRDSEVEOworCQlpZiAoYWRkX2luZGV4X2VudHJ5KGlzdGF0ZSwgbmNlLCBBRERfQ0FDSEVfT0tfVE9fQUREKSkgeworCQkJZXJyID0gMTsKKwkJCWVycm9yKCJjYW5ub3QgdW5tZXJnZSAnJXMnIiwgbmFtZSk7CisJCX0KKwl9CisJZnJlZShuYW1lKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gcG9zOworCWZyZWUocnUpOworCWl0ZW0tPnV0aWwgPSBOVUxMOworCXJldHVybiB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgcG9zKTsKK30KKwordm9pZCB1bm1lcmdlX21hcmtlZF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpbnQgaTsKKworCWlmICghaXN0YXRlLT5yZXNvbHZlX3VuZG8pCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9NQVRDSEVEKQorCQkJaSA9IHVubWVyZ2VfaW5kZXhfZW50cnlfYXQoaXN0YXRlLCBpKTsKKwl9Cit9CisKK3ZvaWQgdW5tZXJnZV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYykKK3sKKwlpbnQgaTsKKworCWlmICghaXN0YXRlLT5yZXNvbHZlX3VuZG8pCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGlzdGF0ZS0+Y2FjaGVbaV07CisJCWlmICghY2VfcGF0aF9tYXRjaChjZSwgcGF0aHNwZWMsIE5VTEwpKQorCQkJY29udGludWU7CisJCWkgPSB1bm1lcmdlX2luZGV4X2VudHJ5X2F0KGlzdGF0ZSwgaSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvcmVzb2x2ZS11bmRvLmggYi9yZXNvbHZlLXVuZG8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjMwNjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVzb2x2ZS11bmRvLmgKQEAgLTAsMCArMSwxNyBAQAorI2lmbmRlZiBSRVNPTFZFX1VORE9fSAorI2RlZmluZSBSRVNPTFZFX1VORE9fSAorCitzdHJ1Y3QgcmVzb2x2ZV91bmRvX2luZm8geworCXVuc2lnbmVkIGludCBtb2RlWzNdOworCXVuc2lnbmVkIGNoYXIgc2hhMVszXVsyMF07Cit9OworCitleHRlcm4gdm9pZCByZWNvcmRfcmVzb2x2ZV91bmRvKHN0cnVjdCBpbmRleF9zdGF0ZSAqLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKik7CitleHRlcm4gdm9pZCByZXNvbHZlX3VuZG9fd3JpdGUoc3RydWN0IHN0cmJ1ZiAqLCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKik7CitleHRlcm4gc3RydWN0IHN0cmluZ19saXN0ICpyZXNvbHZlX3VuZG9fcmVhZChjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOworZXh0ZXJuIHZvaWQgcmVzb2x2ZV91bmRvX2NsZWFyX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKK2V4dGVybiBpbnQgdW5tZXJnZV9pbmRleF9lbnRyeV9hdChzdHJ1Y3QgaW5kZXhfc3RhdGUgKiwgaW50KTsKK2V4dGVybiB2b2lkIHVubWVyZ2VfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICosIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqKTsKK2V4dGVybiB2b2lkIHVubWVyZ2VfbWFya2VkX2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9yZXZpc2lvbi5jIGIvcmV2aXNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjM2NDYzCi0tLSAvZGV2L251bGwKKysrIGIvcmV2aXNpb24uYwpAQCAtMCwwICsxLDMzNzggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZXZpc2lvbi5oIgorI2luY2x1ZGUgImdyYXBoLmgiCisjaW5jbHVkZSAiZ3JlcC5oIgorI2luY2x1ZGUgInJlZmxvZy13YWxrLmgiCisjaW5jbHVkZSAicGF0Y2gtaWRzLmgiCisjaW5jbHVkZSAiZGVjb3JhdGUuaCIKKyNpbmNsdWRlICJsb2ctdHJlZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibGluZS1sb2cuaCIKKyNpbmNsdWRlICJtYWlsbWFwLmgiCisjaW5jbHVkZSAiY29tbWl0LXNsYWIuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAiYmlzZWN0LmgiCisKK3ZvbGF0aWxlIHNob3dfZWFybHlfb3V0cHV0X2ZuX3Qgc2hvd19lYXJseV9vdXRwdXQ7CisKK3N0YXRpYyBjb25zdCBjaGFyICp0ZXJtX2JhZDsKK3N0YXRpYyBjb25zdCBjaGFyICp0ZXJtX2dvb2Q7CisKK2NoYXIgKnBhdGhfbmFtZShjb25zdCBzdHJ1Y3QgbmFtZV9wYXRoICpwYXRoLCBjb25zdCBjaGFyICpuYW1lKQoreworCWNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKnA7CisJY2hhciAqbiwgKm07CisJaW50IG5sZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IGxlbiA9IG5sZW4gKyAxOworCisJZm9yIChwID0gcGF0aDsgcDsgcCA9IHAtPnVwKSB7CisJCWlmIChwLT5lbGVtX2xlbikKKwkJCWxlbiArPSBwLT5lbGVtX2xlbiArIDE7CisJfQorCW4gPSB4bWFsbG9jKGxlbik7CisJbSA9IG4gKyBsZW4gLSAobmxlbiArIDEpOworCW1lbWNweShtLCBuYW1lLCBubGVuICsgMSk7CisJZm9yIChwID0gcGF0aDsgcDsgcCA9IHAtPnVwKSB7CisJCWlmIChwLT5lbGVtX2xlbikgeworCQkJbSAtPSBwLT5lbGVtX2xlbiArIDE7CisJCQltZW1jcHkobSwgcC0+ZWxlbSwgcC0+ZWxlbV9sZW4pOworCQkJbVtwLT5lbGVtX2xlbl0gPSAnLyc7CisJCX0KKwl9CisJcmV0dXJuIG47Cit9CisKK3N0YXRpYyBpbnQgc2hvd19wYXRoX2NvbXBvbmVudF90cnVuY2F0ZWQoRklMRSAqb3V0LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCWludCBjbnQ7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBsZW47IGNudCsrKSB7CisJCWludCBjaCA9IG5hbWVbY250XTsKKwkJaWYgKCFjaCB8fCBjaCA9PSAnXG4nKQorCQkJcmV0dXJuIC0xOworCQlmcHV0YyhjaCwgb3V0KTsKKwl9CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBzaG93X3BhdGhfdHJ1bmNhdGVkKEZJTEUgKm91dCwgY29uc3Qgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCkKK3sKKwlpbnQgZW1pdHRlZCwgb3VyczsKKworCWlmICghcGF0aCkKKwkJcmV0dXJuIDA7CisJZW1pdHRlZCA9IHNob3dfcGF0aF90cnVuY2F0ZWQob3V0LCBwYXRoLT51cCk7CisJaWYgKGVtaXR0ZWQgPCAwKQorCQlyZXR1cm4gZW1pdHRlZDsKKwlpZiAoZW1pdHRlZCkKKwkJZnB1dGMoJy8nLCBvdXQpOworCW91cnMgPSBzaG93X3BhdGhfY29tcG9uZW50X3RydW5jYXRlZChvdXQsIHBhdGgtPmVsZW0sIHBhdGgtPmVsZW1fbGVuKTsKKwlpZiAob3VycyA8IDApCisJCXJldHVybiBvdXJzOworCXJldHVybiBvdXJzIHx8IGVtaXR0ZWQ7Cit9CisKK3ZvaWQgc2hvd19vYmplY3Rfd2l0aF9uYW1lKEZJTEUgKm91dCwgc3RydWN0IG9iamVjdCAqb2JqLAorCQkJICAgY29uc3Qgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwgY29uc3QgY2hhciAqY29tcG9uZW50KQoreworCXN0cnVjdCBuYW1lX3BhdGggbGVhZjsKKwlsZWFmLnVwID0gKHN0cnVjdCBuYW1lX3BhdGggKilwYXRoOworCWxlYWYuZWxlbSA9IGNvbXBvbmVudDsKKwlsZWFmLmVsZW1fbGVuID0gc3RybGVuKGNvbXBvbmVudCk7CisKKwlmcHJpbnRmKG91dCwgIiVzICIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCXNob3dfcGF0aF90cnVuY2F0ZWQob3V0LCAmbGVhZik7CisJZnB1dGMoJ1xuJywgb3V0KTsKK30KKworc3RhdGljIHZvaWQgbWFya19ibG9iX3VuaW50ZXJlc3Rpbmcoc3RydWN0IGJsb2IgKmJsb2IpCit7CisJaWYgKCFibG9iKQorCQlyZXR1cm47CisJaWYgKGJsb2ItPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXJldHVybjsKKwlibG9iLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKK30KKworc3RhdGljIHZvaWQgbWFya190cmVlX2NvbnRlbnRzX3VuaW50ZXJlc3Rpbmcoc3RydWN0IHRyZWUgKnRyZWUpCit7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZ0cmVlLT5vYmplY3Q7CisKKwlpZiAoIWhhc19zaGExX2ZpbGUob2JqLT5zaGExKSkKKwkJcmV0dXJuOworCWlmIChwYXJzZV90cmVlKHRyZWUpIDwgMCkKKwkJZGllKCJiYWQgdHJlZSAlcyIsIHNoYTFfdG9faGV4KG9iai0+c2hhMSkpOworCisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIHRyZWUtPmJ1ZmZlciwgdHJlZS0+c2l6ZSk7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpIHsKKwkJc3dpdGNoIChvYmplY3RfdHlwZShlbnRyeS5tb2RlKSkgeworCQljYXNlIE9CSl9UUkVFOgorCQkJbWFya190cmVlX3VuaW50ZXJlc3RpbmcobG9va3VwX3RyZWUoZW50cnkuc2hhMSkpOworCQkJYnJlYWs7CisJCWNhc2UgT0JKX0JMT0I6CisJCQltYXJrX2Jsb2JfdW5pbnRlcmVzdGluZyhsb29rdXBfYmxvYihlbnRyeS5zaGExKSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIFN1YnByb2plY3QgY29tbWl0IC0gbm90IGluIHRoaXMgcmVwb3NpdG9yeSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHRyZWUgYW55IG1vcmUKKwkgKiBhZnRlciBpdCBoYXMgYmVlbiBtYXJrZWQgdW5pbnRlcmVzdGluZy4KKwkgKi8KKwlmcmVlX3RyZWVfYnVmZmVyKHRyZWUpOworfQorCit2b2lkIG1hcmtfdHJlZV91bmludGVyZXN0aW5nKHN0cnVjdCB0cmVlICp0cmVlKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9ICZ0cmVlLT5vYmplY3Q7CisKKwlpZiAoIXRyZWUpCisJCXJldHVybjsKKwlpZiAob2JqLT5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXJldHVybjsKKwlvYmotPmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJbWFya190cmVlX2NvbnRlbnRzX3VuaW50ZXJlc3RpbmcodHJlZSk7Cit9CisKK3ZvaWQgbWFya19wYXJlbnRzX3VuaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcGFyZW50cyA9IE5VTEwsICpsOworCisJZm9yIChsID0gY29tbWl0LT5wYXJlbnRzOyBsOyBsID0gbC0+bmV4dCkKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGwtPml0ZW0sICZwYXJlbnRzKTsKKworCXdoaWxlIChwYXJlbnRzKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHBhcmVudHMtPml0ZW07CisJCWwgPSBwYXJlbnRzOworCQlwYXJlbnRzID0gcGFyZW50cy0+bmV4dDsKKwkJZnJlZShsKTsKKworCQl3aGlsZSAoY29tbWl0KSB7CisJCQkvKgorCQkJICogQSBtaXNzaW5nIGNvbW1pdCBpcyBvayBpZmYgaXRzIHBhcmVudCBpcyBtYXJrZWQKKwkJCSAqIHVuaW50ZXJlc3RpbmcuCisJCQkgKgorCQkJICogV2UganVzdCBtYXJrIHN1Y2ggYSB0aGluZyBwYXJzZWQsIHNvIHRoYXQgd2hlbgorCQkJICogaXQgaXMgcG9wcGVkIG5leHQgdGltZSBhcm91bmQsIHdlIHdvbid0IGJlIHRyeWluZworCQkJICogdG8gcGFyc2UgaXQgYW5kIGdldCBhbiBlcnJvci4KKwkJCSAqLworCQkJaWYgKCFoYXNfc2hhMV9maWxlKGNvbW1pdC0+b2JqZWN0LnNoYTEpKQorCQkJCWNvbW1pdC0+b2JqZWN0LnBhcnNlZCA9IDE7CisKKwkJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJYnJlYWs7CisKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisKKwkJCS8qCisJCQkgKiBOb3JtYWxseSB3ZSBoYXZlbid0IHBhcnNlZCB0aGUgcGFyZW50CisJCQkgKiB5ZXQsIHNvIHdlIHdvbid0IGhhdmUgYSBwYXJlbnQgb2YgYSBwYXJlbnQKKwkJCSAqIGhlcmUuIEhvd2V2ZXIsIGl0IG1heSB0dXJuIG91dCB0aGF0IHdlJ3ZlCisJCQkgKiByZWFjaGVkIHRoaXMgY29tbWl0IHNvbWUgb3RoZXIgd2F5ICh3aGVyZSBpdAorCQkJICogd2Fzbid0IHVuaW50ZXJlc3RpbmcpLCBpbiB3aGljaCBjYXNlIHdlIG5lZWQKKwkJCSAqIHRvIG1hcmsgaXRzIHBhcmVudHMgcmVjdXJzaXZlbHkgdG9vLi4KKwkJCSAqLworCQkJaWYgKCFjb21taXQtPnBhcmVudHMpCisJCQkJYnJlYWs7CisKKwkJCWZvciAobCA9IGNvbW1pdC0+cGFyZW50cy0+bmV4dDsgbDsgbCA9IGwtPm5leHQpCisJCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGwtPml0ZW0sICZwYXJlbnRzKTsKKwkJCWNvbW1pdCA9IGNvbW1pdC0+cGFyZW50cy0+aXRlbTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfcGF0aChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSBzdHJ1Y3Qgb2JqZWN0ICpvYmosCisJCQkJCSBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBtb2RlLAorCQkJCQkgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoIW9iaikKKwkJcmV0dXJuOworCWlmIChyZXZzLT5ub193YWxrICYmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCXJldnMtPm5vX3dhbGsgPSAwOworCWlmIChyZXZzLT5yZWZsb2dfaW5mbyAmJiBvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgbGVuID0gaW50ZXJwcmV0X2JyYW5jaF9uYW1lKG5hbWUsIDAsICZidWYpOworCQlpbnQgc3Q7CisKKwkJaWYgKDAgPCBsZW4gJiYgbmFtZVtsZW5dICYmIGJ1Zi5sZW4pCisJCQlzdHJidWZfYWRkc3RyKCZidWYsIG5hbWUgKyBsZW4pOworCQlzdCA9IGFkZF9yZWZsb2dfZm9yX3dhbGsocmV2cy0+cmVmbG9nX2luZm8sCisJCQkJCSAoc3RydWN0IGNvbW1pdCAqKW9iaiwKKwkJCQkJIGJ1Zi5idWZbMF0gPyBidWYuYnVmOiBuYW1lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCWlmIChzdCkKKwkJCXJldHVybjsKKwl9CisJYWRkX29iamVjdF9hcnJheV93aXRoX3BhdGgob2JqLCBuYW1lLCAmcmV2cy0+cGVuZGluZywgbW9kZSwgcGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9wZW5kaW5nX29iamVjdF93aXRoX21vZGUoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgc3RydWN0IG9iamVjdCAqb2JqLAorCQkJCQkgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbW9kZSkKK3sKKwlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9wYXRoKHJldnMsIG9iaiwgbmFtZSwgbW9kZSwgTlVMTCk7Cit9CisKK3ZvaWQgYWRkX3BlbmRpbmdfb2JqZWN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCXN0cnVjdCBvYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlhZGRfcGVuZGluZ19vYmplY3Rfd2l0aF9tb2RlKHJldnMsIG9iaiwgbmFtZSwgU19JRklOVkFMSUQpOworfQorCit2b2lkIGFkZF9oZWFkX3RvX3BlbmRpbmcoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IG9iamVjdCAqb2JqOworCWlmIChnZXRfc2hhMSgiSEVBRCIsIHNoYTEpKQorCQlyZXR1cm47CisJb2JqID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCWlmICghb2JqKQorCQlyZXR1cm47CisJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIG9iaiwgIkhFQUQiKTsKK30KKworc3RhdGljIHN0cnVjdCBvYmplY3QgKmdldF9yZWZlcmVuY2Uoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCisJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCWlmICghb2JqZWN0KSB7CisJCWlmIChyZXZzLT5pZ25vcmVfbWlzc2luZykKKwkJCXJldHVybiBvYmplY3Q7CisJCWRpZSgiYmFkIG9iamVjdCAlcyIsIG5hbWUpOworCX0KKwlvYmplY3QtPmZsYWdzIHw9IGZsYWdzOworCXJldHVybiBvYmplY3Q7Cit9CisKK3ZvaWQgYWRkX3BlbmRpbmdfc2hhMShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBnZXRfcmVmZXJlbmNlKHJldnMsIG5hbWUsIHNoYTEsIGZsYWdzKTsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCBuYW1lKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmhhbmRsZV9jb21taXQoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCSAgICBzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnRyeSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBlbnRyeS0+aXRlbTsKKwljb25zdCBjaGFyICpuYW1lID0gZW50cnktPm5hbWU7CisJY29uc3QgY2hhciAqcGF0aCA9IGVudHJ5LT5wYXRoOworCXVuc2lnbmVkIGludCBtb2RlID0gZW50cnktPm1vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IG9iamVjdC0+ZmxhZ3M7CisKKwkvKgorCSAqIFRhZyBvYmplY3Q/IExvb2sgd2hhdCBpdCBwb2ludHMgdG8uLgorCSAqLworCXdoaWxlIChvYmplY3QtPnR5cGUgPT0gT0JKX1RBRykgeworCQlzdHJ1Y3QgdGFnICp0YWcgPSAoc3RydWN0IHRhZyAqKSBvYmplY3Q7CisJCWlmIChyZXZzLT50YWdfb2JqZWN0cyAmJiAhKGZsYWdzICYgVU5JTlRFUkVTVElORykpCisJCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgb2JqZWN0LCB0YWctPnRhZyk7CisJCWlmICghdGFnLT50YWdnZWQpCisJCQlkaWUoImJhZCB0YWciKTsKKwkJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHRhZy0+dGFnZ2VkLT5zaGExKTsKKwkJaWYgKCFvYmplY3QpIHsKKwkJCWlmIChmbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlkaWUoImJhZCBvYmplY3QgJXMiLCBzaGExX3RvX2hleCh0YWctPnRhZ2dlZC0+c2hhMSkpOworCQl9CisJCW9iamVjdC0+ZmxhZ3MgfD0gZmxhZ3M7CisJCS8qCisJCSAqIFdlJ2xsIGhhbmRsZSB0aGUgdGFnZ2VkIG9iamVjdCBieSBsb29waW5nIG9yIGRyb3BwaW5nCisJCSAqIHRocm91Z2ggdG8gdGhlIG5vbi10YWcgaGFuZGxlcnMgYmVsb3cuIERvIG5vdAorCQkgKiBwcm9wYWdhdGUgZGF0YSBmcm9tIHRoZSB0YWcncyBwZW5kaW5nIGVudHJ5LgorCQkgKi8KKwkJbmFtZSA9ICIiOworCQlwYXRoID0gTlVMTDsKKwkJbW9kZSA9IDA7CisJfQorCisJLyoKKwkgKiBDb21taXQgb2JqZWN0PyBKdXN0IHJldHVybiBpdCwgd2UnbGwgZG8gYWxsIHRoZSBjb21wbGV4CisJICogcmVhY2hhYmlsaXR5IGNydWQuCisJICovCisJaWYgKG9iamVjdC0+dHlwZSA9PSBPQkpfQ09NTUlUKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IChzdHJ1Y3QgY29tbWl0ICopb2JqZWN0OworCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkgPCAwKQorCQkJZGllKCJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIiwgbmFtZSk7CisJCWlmIChmbGFncyAmIFVOSU5URVJFU1RJTkcpIHsKKwkJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKGNvbW1pdCk7CisJCQlyZXZzLT5saW1pdGVkID0gMTsKKwkJfQorCQlpZiAocmV2cy0+c2hvd19zb3VyY2UgJiYgIWNvbW1pdC0+dXRpbCkKKwkJCWNvbW1pdC0+dXRpbCA9IHhzdHJkdXAobmFtZSk7CisJCXJldHVybiBjb21taXQ7CisJfQorCisJLyoKKwkgKiBUcmVlIG9iamVjdD8gRWl0aGVyIG1hcmsgaXQgdW5pbnRlcmVzdGluZywgb3IgYWRkIGl0CisJICogdG8gdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBsb29rIGF0IGxhdGVyLi4KKwkgKi8KKwlpZiAob2JqZWN0LT50eXBlID09IE9CSl9UUkVFKSB7CisJCXN0cnVjdCB0cmVlICp0cmVlID0gKHN0cnVjdCB0cmVlICopb2JqZWN0OworCQlpZiAoIXJldnMtPnRyZWVfb2JqZWN0cykKKwkJCXJldHVybiBOVUxMOworCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCQltYXJrX3RyZWVfY29udGVudHNfdW5pbnRlcmVzdGluZyh0cmVlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX3BhdGgocmV2cywgb2JqZWN0LCBuYW1lLCBtb2RlLCBwYXRoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBCbG9iIG9iamVjdD8gWW91IGtub3cgdGhlIGRyaWxsIGJ5IG5vdy4uCisJICovCisJaWYgKG9iamVjdC0+dHlwZSA9PSBPQkpfQkxPQikgeworCQlpZiAoIXJldnMtPmJsb2Jfb2JqZWN0cykKKwkJCXJldHVybiBOVUxMOworCQlpZiAoZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJcmV0dXJuIE5VTEw7CisJCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX3BhdGgocmV2cywgb2JqZWN0LCBuYW1lLCBtb2RlLCBwYXRoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWRpZSgiJXMgaXMgdW5rbm93biBvYmplY3QiLCBuYW1lKTsKK30KKworc3RhdGljIGludCBldmVyeWJvZHlfdW5pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0X2xpc3QgKm9yaWcsCisJCQkJICAgc3RydWN0IGNvbW1pdCAqKmludGVyZXN0aW5nX2NhY2hlKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IG9yaWc7CisKKwlpZiAoKmludGVyZXN0aW5nX2NhY2hlKSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9ICppbnRlcmVzdGluZ19jYWNoZTsKKwkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSkKKwkJCXJldHVybiAwOworCX0KKworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGxpc3QtPml0ZW07CisJCWxpc3QgPSBsaXN0LT5uZXh0OworCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJY29udGludWU7CisKKwkJKmludGVyZXN0aW5nX2NhY2hlID0gY29tbWl0OworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBBIGRlZmluaXRpb24gb2YgInJlbGV2YW50IiBjb21taXQgdGhhdCB3ZSBjYW4gdXNlIHRvIHNpbXBsaWZ5IGxpbWl0ZWQgZ3JhcGhzCisgKiBieSBlbGltaW5hdGluZyBzaWRlIGJyYW5jaGVzLgorICoKKyAqIEEgInJlbGV2YW50IiBjb21taXQgaXMgb25lIHRoYXQgaXMgIVVOSU5URVJFU1RJTkcgKGllIHdlIGFyZSBpbmNsdWRpbmcgaXQKKyAqIGluIG91ciBsaXN0KSwgb3IgdGhhdCBpcyBhIHNwZWNpZmllZCBCT1RUT00gY29tbWl0LiBUaGVuIGFmdGVyIGNvbXB1dGluZworICogYSBsaW1pdGVkIGxpc3QsIGR1cmluZyBwcm9jZXNzaW5nIHdlIGNhbiBnZW5lcmFsbHkgaWdub3JlIGJvdW5kYXJ5IG1lcmdlcworICogY29taW5nIGZyb20gb3V0c2lkZSB0aGUgZ3JhcGgsIChpZSBmcm9tIGlycmVsZXZhbnQgcGFyZW50cyksIGFuZCB0cmVhdAorICogdGhvc2UgbWVyZ2VzIGFzIGlmIHRoZXkgd2VyZSBzaW5nbGUtcGFyZW50LiBUUkVFU0FNRSBpcyBkZWZpbmVkIHRvIGNvbnNpZGVyCisgKiBvbmx5IHJlbGV2YW50IHBhcmVudHMsIGlmIGFueS4gSWYgd2UgYXJlIFRSRUVTQU1FIHRvIG91ciBvbi1ncmFwaCBwYXJlbnRzLAorICogd2UgZG9uJ3QgY2FyZSBpZiB3ZSB3ZXJlICFUUkVFU0FNRSB0byBub24tZ3JhcGggcGFyZW50cy4KKyAqCisgKiBUcmVhdGluZyBib3R0b20gY29tbWl0cyBhcyByZWxldmFudCBlbnN1cmVzIHRoYXQgYSBsaW1pdGVkIGdyYXBoJ3MKKyAqIGNvbm5lY3Rpb24gdG8gdGhlIGFjdHVhbCBib3R0b20gY29tbWl0IGlzIG5vdCB2aWV3ZWQgYXMgYSBzaWRlIGJyYW5jaCwgYnV0CisgKiB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIGdyYXBoLiBGb3IgZXhhbXBsZToKKyAqCisgKiAgIC4uLi5aLi4uQS0tLVgtLS1vLS0tby0tLUIKKyAqICAgICAgICAuICAgICAvCisgKiAgICAgICAgIFctLS1ZCisgKgorICogV2hlbiBjb21wdXRpbmcgIkEuLkIiLCB0aGUgQS1YIGNvbm5lY3Rpb24gaXMgYXQgbGVhc3QgYXMgaW1wb3J0YW50IGFzCisgKiBZLVgsIGRlc3BpdGUgQSBiZWluZyBmbGFnZ2VkIFVOSU5URVJFU1RJTkcuCisgKgorICogQW5kIHdoZW4gY29tcHV0aW5nIC0tYW5jZXN0cnktcGF0aCAiQS4uQiIsIHRoZSBBLVggY29ubmVjdGlvbiBpcyBtb3JlCisgKiBpbXBvcnRhbnQgdGhhbiBZLVgsIGRlc3BpdGUgYm90aCBBIGFuZCBZIGJlaW5nIGZsYWdnZWQgVU5JTlRFUkVTVElORy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcmVsZXZhbnRfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlyZXR1cm4gKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBCT1RUT00pKSAhPSBVTklOVEVSRVNUSU5HOworfQorCisvKgorICogUmV0dXJuIGEgc2luZ2xlIHJlbGV2YW50IGNvbW1pdCBmcm9tIGEgcGFyZW50IGxpc3QuIElmIHdlIGFyZSBhIFRSRUVTQU1FCisgKiBjb21taXQsIGFuZCB0aGlzIHNlbGVjdHMgb25lIG9mIG91ciBwYXJlbnRzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2ltcGxpZnkgdG8KKyAqIHRoYXQgcGFyZW50LgorICovCitzdGF0aWMgc3RydWN0IGNvbW1pdCAqb25lX3JlbGV2YW50X3BhcmVudChjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJCSAgc3RydWN0IGNvbW1pdF9saXN0ICpvcmlnKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IG9yaWc7CisJc3RydWN0IGNvbW1pdCAqcmVsZXZhbnQgPSBOVUxMOworCisJaWYgKCFvcmlnKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogRm9yIDEtcGFyZW50IGNvbW1pdHMsIG9yIGlmIGZpcnN0LXBhcmVudC1vbmx5LCB0aGVuIHJldHVybiB0aGF0CisJICogZmlyc3QgcGFyZW50IChldmVuIGlmIG5vdCAicmVsZXZhbnQiIGJ5IHRoZSBhYm92ZSBkZWZpbml0aW9uKS4KKwkgKiBUUkVFU0FNRSB3aWxsIGhhdmUgYmVlbiBzZXQgcHVyZWx5IG9uIHRoYXQgcGFyZW50LgorCSAqLworCWlmIChyZXZzLT5maXJzdF9wYXJlbnRfb25seSB8fCAhb3JpZy0+bmV4dCkKKwkJcmV0dXJuIG9yaWctPml0ZW07CisKKwkvKgorCSAqIEZvciBtdWx0aS1wYXJlbnQgY29tbWl0cywgaWRlbnRpZnkgYSBzb2xlIHJlbGV2YW50IHBhcmVudCwgaWYgYW55LgorCSAqIElmIHdlIGhhdmUgb25seSBvbmUgcmVsZXZhbnQgcGFyZW50LCB0aGVuIFRSRUVTQU1FIHdpbGwgYmUgc2V0IHB1cmVseQorCSAqIHdpdGggcmVnYXJkIHRvIHRoYXQgcGFyZW50LCBhbmQgd2UgY2FuIHNpbXBsaWZ5IGFjY29yZGluZ2x5LgorCSAqCisJICogSWYgd2UgaGF2ZSBtb3JlIHRoYW4gb25lIHJlbGV2YW50IHBhcmVudCwgb3Igbm8gcmVsZXZhbnQgcGFyZW50cworCSAqIChhbmQgbXVsdGlwbGUgaXJyZWxldmFudCBvbmVzKSwgdGhlbiB3ZSBjYW4ndCBzZWxlY3QgYSBwYXJlbnQgaGVyZQorCSAqIGFuZCByZXR1cm4gTlVMTC4KKwkgKi8KKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsaXN0LT5pdGVtOworCQlsaXN0ID0gbGlzdC0+bmV4dDsKKwkJaWYgKHJlbGV2YW50X2NvbW1pdChjb21taXQpKSB7CisJCQlpZiAocmVsZXZhbnQpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlyZWxldmFudCA9IGNvbW1pdDsKKwkJfQorCX0KKwlyZXR1cm4gcmVsZXZhbnQ7Cit9CisKKy8qCisgKiBUaGUgZ29hbCBpcyB0byBnZXQgUkVWX1RSRUVfTkVXIGFzIHRoZSByZXN1bHQgb25seSBpZiB0aGUKKyAqIGRpZmYgY29uc2lzdHMgb2YgYWxsICcrJyAoYW5kIG5vIG90aGVyIGNoYW5nZXMpLCBSRVZfVFJFRV9PTEQKKyAqIGlmIHRoZSB3aG9sZSBkaWZmIGlzIHJlbW92YWwgb2Ygb2xkIGRhdGEsIGFuZCBvdGhlcndpc2UKKyAqIFJFVl9UUkVFX0RJRkZFUkVOVCAob2YgY291cnNlIGlmIHRoZSB0cmVlcyBhcmUgdGhlIHNhbWUgd2UKKyAqIHdhbnQgUkVWX1RSRUVfU0FNRSkuCisgKiBUaGF0IG1lYW5zIHRoYXQgb25jZSB3ZSBnZXQgdG8gUkVWX1RSRUVfRElGRkVSRU5ULCB3ZSBkbyBub3QKKyAqIGhhdmUgdG8gbG9vayBhbnkgZnVydGhlci4KKyAqLworc3RhdGljIGludCB0cmVlX2RpZmZlcmVuY2UgPSBSRVZfVFJFRV9TQU1FOworCitzdGF0aWMgdm9pZCBmaWxlX2FkZF9yZW1vdmUoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJICAgIGludCBhZGRyZW1vdmUsIHVuc2lnbmVkIG1vZGUsCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkgICAgaW50IHNoYTFfdmFsaWQsCisJCSAgICBjb25zdCBjaGFyICpmdWxscGF0aCwgdW5zaWduZWQgZGlydHlfc3VibW9kdWxlKQoreworCWludCBkaWZmID0gYWRkcmVtb3ZlID09ICcrJyA/IFJFVl9UUkVFX05FVyA6IFJFVl9UUkVFX09MRDsKKworCXRyZWVfZGlmZmVyZW5jZSB8PSBkaWZmOworCWlmICh0cmVlX2RpZmZlcmVuY2UgPT0gUkVWX1RSRUVfRElGRkVSRU5UKQorCQlESUZGX09QVF9TRVQob3B0aW9ucywgSEFTX0NIQU5HRVMpOworfQorCitzdGF0aWMgdm9pZCBmaWxlX2NoYW5nZShzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkgdW5zaWduZWQgb2xkX21vZGUsIHVuc2lnbmVkIG5ld19tb2RlLAorCQkgY29uc3QgdW5zaWduZWQgY2hhciAqb2xkX3NoYTEsCisJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXdfc2hhMSwKKwkJIGludCBvbGRfc2hhMV92YWxpZCwgaW50IG5ld19zaGExX3ZhbGlkLAorCQkgY29uc3QgY2hhciAqZnVsbHBhdGgsCisJCSB1bnNpZ25lZCBvbGRfZGlydHlfc3VibW9kdWxlLCB1bnNpZ25lZCBuZXdfZGlydHlfc3VibW9kdWxlKQoreworCXRyZWVfZGlmZmVyZW5jZSA9IFJFVl9UUkVFX0RJRkZFUkVOVDsKKwlESUZGX09QVF9TRVQob3B0aW9ucywgSEFTX0NIQU5HRVMpOworfQorCitzdGF0aWMgaW50IHJldl9jb21wYXJlX3RyZWUoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgIHN0cnVjdCBjb21taXQgKnBhcmVudCwgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCB0cmVlICp0MSA9IHBhcmVudC0+dHJlZTsKKwlzdHJ1Y3QgdHJlZSAqdDIgPSBjb21taXQtPnRyZWU7CisKKwlpZiAoIXQxKQorCQlyZXR1cm4gUkVWX1RSRUVfTkVXOworCWlmICghdDIpCisJCXJldHVybiBSRVZfVFJFRV9PTEQ7CisKKwlpZiAocmV2cy0+c2ltcGxpZnlfYnlfZGVjb3JhdGlvbikgeworCQkvKgorCQkgKiBJZiB3ZSBhcmUgc2ltcGxpZnlpbmcgYnkgZGVjb3JhdGlvbiwgdGhlbiB0aGUgY29tbWl0CisJCSAqIGlzIHdvcnRoIHNob3dpbmcgaWYgaXQgaGFzIGEgdGFnIHBvaW50aW5nIGF0IGl0LgorCQkgKi8KKwkJaWYgKGdldF9uYW1lX2RlY29yYXRpb24oJmNvbW1pdC0+b2JqZWN0KSkKKwkJCXJldHVybiBSRVZfVFJFRV9ESUZGRVJFTlQ7CisJCS8qCisJCSAqIEEgY29tbWl0IHRoYXQgaXMgbm90IHBvaW50ZWQgYnkgYSB0YWcgaXMgdW5pbnRlcmVzdGluZworCQkgKiBpZiB3ZSBhcmUgbm90IGxpbWl0ZWQgYnkgcGF0aC4gIFRoaXMgbWVhbnMgdGhhdCB5b3Ugd2lsbAorCQkgKiBzZWUgdGhlIHVzdWFsICJjb21taXRzIHRoYXQgdG91Y2ggdGhlIHBhdGhzIiBwbHVzIGFueQorCQkgKiB0YWdnZWQgY29tbWl0IGJ5IHNwZWNpZnlpbmcgYm90aCAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24KKwkJICogYW5kIHBhdGhzcGVjLgorCQkgKi8KKwkJaWYgKCFyZXZzLT5wcnVuZV9kYXRhLm5yKQorCQkJcmV0dXJuIFJFVl9UUkVFX1NBTUU7CisJfQorCisJdHJlZV9kaWZmZXJlbmNlID0gUkVWX1RSRUVfU0FNRTsKKwlESUZGX09QVF9DTFIoJnJldnMtPnBydW5pbmcsIEhBU19DSEFOR0VTKTsKKwlpZiAoZGlmZl90cmVlX3NoYTEodDEtPm9iamVjdC5zaGExLCB0Mi0+b2JqZWN0LnNoYTEsICIiLAorCQkJICAgJnJldnMtPnBydW5pbmcpIDwgMCkKKwkJcmV0dXJuIFJFVl9UUkVFX0RJRkZFUkVOVDsKKwlyZXR1cm4gdHJlZV9kaWZmZXJlbmNlOworfQorCitzdGF0aWMgaW50IHJldl9zYW1lX3RyZWVfYXNfZW1wdHkoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdHJlZSAqdDEgPSBjb21taXQtPnRyZWU7CisKKwlpZiAoIXQxKQorCQlyZXR1cm4gMDsKKworCXRyZWVfZGlmZmVyZW5jZSA9IFJFVl9UUkVFX1NBTUU7CisJRElGRl9PUFRfQ0xSKCZyZXZzLT5wcnVuaW5nLCBIQVNfQ0hBTkdFUyk7CisJcmV0dmFsID0gZGlmZl90cmVlX3NoYTEoTlVMTCwgdDEtPm9iamVjdC5zaGExLCAiIiwgJnJldnMtPnBydW5pbmcpOworCisJcmV0dXJuIHJldHZhbCA+PSAwICYmICh0cmVlX2RpZmZlcmVuY2UgPT0gUkVWX1RSRUVfU0FNRSk7Cit9CisKK3N0cnVjdCB0cmVlc2FtZV9zdGF0ZSB7CisJdW5zaWduZWQgaW50IG5wYXJlbnRzOworCXVuc2lnbmVkIGNoYXIgdHJlZXNhbWVbRkxFWF9BUlJBWV07Cit9OworCitzdGF0aWMgc3RydWN0IHRyZWVzYW1lX3N0YXRlICppbml0aWFsaXNlX3RyZWVzYW1lKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXVuc2lnbmVkIG4gPSBjb21taXRfbGlzdF9jb3VudChjb21taXQtPnBhcmVudHMpOworCXN0cnVjdCB0cmVlc2FtZV9zdGF0ZSAqc3QgPSB4Y2FsbG9jKDEsIHNpemVvZigqc3QpICsgbik7CisJc3QtPm5wYXJlbnRzID0gbjsKKwlhZGRfZGVjb3JhdGlvbigmcmV2cy0+dHJlZXNhbWUsICZjb21taXQtPm9iamVjdCwgc3QpOworCXJldHVybiBzdDsKK30KKworLyoKKyAqIE11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIHJlbW92aW5nIHRoZSBudGhfcGFyZW50IGZyb20gYSBjb21taXQncworICogcGFyZW50IGxpc3QsIGlmIHdlIGFyZSBtYWludGFpbmluZyB0aGUgcGVyLXBhcmVudCB0cmVlc2FtZVtdIGRlY29yYXRpb24uCisgKiBUaGlzIGRvZXMgbm90IHJlY2FsY3VsYXRlIHRoZSBtYXN0ZXIgVFJFRVNBTUUgZmxhZyAtIHVwZGF0ZV90cmVlc2FtZSgpCisgKiBzaG91bGQgYmUgY2FsbGVkIHRvIHVwZGF0ZSBpdCBhZnRlciBhIHNlcXVlbmNlIG9mIHRyZWVzYW1lW10gbW9kaWZpY2F0aW9ucworICogdGhhdCBtYXkgaGF2ZSBhZmZlY3RlZCBpdC4KKyAqLworc3RhdGljIGludCBjb21wYWN0X3RyZWVzYW1lKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LCB1bnNpZ25lZCBudGhfcGFyZW50KQoreworCXN0cnVjdCB0cmVlc2FtZV9zdGF0ZSAqc3Q7CisJaW50IG9sZF9zYW1lOworCisJaWYgKCFjb21taXQtPnBhcmVudHMpIHsKKwkJLyoKKwkJICogSGF2ZSBqdXN0IHJlbW92ZWQgdGhlIG9ubHkgcGFyZW50IGZyb20gYSBub24tbWVyZ2UuCisJCSAqIERpZmZlcmVudCBoYW5kbGluZywgYXMgd2UgbGFjayBkZWNvcmF0aW9uLgorCQkgKi8KKwkJaWYgKG50aF9wYXJlbnQgIT0gMCkKKwkJCWRpZSgiY29tcGFjdF90cmVlc2FtZSAldSIsIG50aF9wYXJlbnQpOworCQlvbGRfc2FtZSA9ICEhKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpOworCQlpZiAocmV2X3NhbWVfdHJlZV9hc19lbXB0eShyZXZzLCBjb21taXQpKQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJCWVsc2UKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5UUkVFU0FNRTsKKwkJcmV0dXJuIG9sZF9zYW1lOworCX0KKworCXN0ID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPnRyZWVzYW1lLCAmY29tbWl0LT5vYmplY3QpOworCWlmICghc3QgfHwgbnRoX3BhcmVudCA+PSBzdC0+bnBhcmVudHMpCisJCWRpZSgiY29tcGFjdF90cmVlc2FtZSAldSIsIG50aF9wYXJlbnQpOworCisJb2xkX3NhbWUgPSBzdC0+dHJlZXNhbWVbbnRoX3BhcmVudF07CisJbWVtbW92ZShzdC0+dHJlZXNhbWUgKyBudGhfcGFyZW50LAorCQlzdC0+dHJlZXNhbWUgKyBudGhfcGFyZW50ICsgMSwKKwkJc3QtPm5wYXJlbnRzIC0gbnRoX3BhcmVudCAtIDEpOworCisJLyoKKwkgKiBJZiB3ZSd2ZSBqdXN0IGJlY29tZSBhIG5vbi1tZXJnZSBjb21taXQsIHVwZGF0ZSBUUkVFU0FNRQorCSAqIGltbWVkaWF0ZWx5LCBhbmQgcmVtb3ZlIHRoZSBuby1sb25nZXItbmVlZGVkIGRlY29yYXRpb24uCisJICogSWYgc3RpbGwgYSBtZXJnZSwgZGVmZXIgdXBkYXRlIHVudGlsIHVwZGF0ZV90cmVlc2FtZSgpLgorCSAqLworCWlmICgtLXN0LT5ucGFyZW50cyA9PSAxKSB7CisJCWlmIChjb21taXQtPnBhcmVudHMtPm5leHQpCisJCQlkaWUoImNvbXBhY3RfdHJlZXNhbWUgcGFyZW50cyBtaXNtYXRjaCIpOworCQlpZiAoc3QtPnRyZWVzYW1lWzBdICYmIHJldnMtPmRlbnNlKQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJCWVsc2UKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5UUkVFU0FNRTsKKwkJZnJlZShhZGRfZGVjb3JhdGlvbigmcmV2cy0+dHJlZXNhbWUsICZjb21taXQtPm9iamVjdCwgTlVMTCkpOworCX0KKworCXJldHVybiBvbGRfc2FtZTsKK30KKworc3RhdGljIHVuc2lnbmVkIHVwZGF0ZV90cmVlc2FtZShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpZiAoY29tbWl0LT5wYXJlbnRzICYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkgeworCQl1bnNpZ25lZCBuOworCQlzdHJ1Y3QgdHJlZXNhbWVfc3RhdGUgKnN0OworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJCXVuc2lnbmVkIHJlbGV2YW50X3BhcmVudHM7CisJCXVuc2lnbmVkIHJlbGV2YW50X2NoYW5nZSwgaXJyZWxldmFudF9jaGFuZ2U7CisKKwkJc3QgPSBsb29rdXBfZGVjb3JhdGlvbigmcmV2cy0+dHJlZXNhbWUsICZjb21taXQtPm9iamVjdCk7CisJCWlmICghc3QpCisJCQlkaWUoInVwZGF0ZV90cmVlc2FtZSAlcyIsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwkJcmVsZXZhbnRfcGFyZW50cyA9IDA7CisJCXJlbGV2YW50X2NoYW5nZSA9IGlycmVsZXZhbnRfY2hhbmdlID0gMDsKKwkJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzLCBuID0gMDsgcDsgbisrLCBwID0gcC0+bmV4dCkgeworCQkJaWYgKHJlbGV2YW50X2NvbW1pdChwLT5pdGVtKSkgeworCQkJCXJlbGV2YW50X2NoYW5nZSB8PSAhc3QtPnRyZWVzYW1lW25dOworCQkJCXJlbGV2YW50X3BhcmVudHMrKzsKKwkJCX0gZWxzZQorCQkJCWlycmVsZXZhbnRfY2hhbmdlIHw9ICFzdC0+dHJlZXNhbWVbbl07CisJCX0KKwkJaWYgKHJlbGV2YW50X3BhcmVudHMgPyByZWxldmFudF9jaGFuZ2UgOiBpcnJlbGV2YW50X2NoYW5nZSkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzICY9IH5UUkVFU0FNRTsKKwkJZWxzZQorCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJfQorCisJcmV0dXJuIGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxpbWl0aW5nX2Nhbl9pbmNyZWFzZV90cmVlc2FtZShjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJLyoKKwkgKiBUUkVFU0FNRSBpcyBpcnJlbGV2YW50IHVubGVzcyBwcnVuZSAmJiBkZW5zZTsKKwkgKiBpZiBzaW1wbGlmeV9oaXN0b3J5IGlzIHNldCwgd2UgY2FuJ3QgaGF2ZSBhIG1peHR1cmUgb2YgVFJFRVNBTUUgYW5kCisJICogICAgIVRSRUVTQU1FIElOVEVSRVNUSU5HIHBhcmVudHMgKGFuZCB3ZSBkb24ndCBoYXZlIHRyZWVzYW1lW10KKwkgKiAgICBkZWNvcmF0aW9uIGFueXdheSk7CisJICogaWYgZmlyc3RfcGFyZW50X29ubHkgaXMgc2V0LCB0aGVuIHRoZSBUUkVFU0FNRSBmbGFnIGlzIGxvY2tlZAorCSAqICAgIGFnYWluc3QgdGhlIGZpcnN0IHBhcmVudCAoYW5kIGFnYWluIHdlIGxhY2sgdHJlZXNhbWVbXSBkZWNvcmF0aW9uKS4KKwkgKi8KKwlyZXR1cm4gcmV2cy0+cHJ1bmUgJiYgcmV2cy0+ZGVuc2UgJiYKKwkgICAgICAgIXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgJiYKKwkgICAgICAgIXJldnMtPmZpcnN0X3BhcmVudF9vbmx5OworfQorCitzdGF0aWMgdm9pZCB0cnlfdG9fc2ltcGxpZnlfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwLCAqcGFyZW50OworCXN0cnVjdCB0cmVlc2FtZV9zdGF0ZSAqdHMgPSBOVUxMOworCWludCByZWxldmFudF9jaGFuZ2UgPSAwLCBpcnJlbGV2YW50X2NoYW5nZSA9IDA7CisJaW50IHJlbGV2YW50X3BhcmVudHMsIG50aF9wYXJlbnQ7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGRvIHBydW5pbmcsIGV2ZXJ5dGhpbmcgaXMgaW50ZXJlc3RpbmcKKwkgKi8KKwlpZiAoIXJldnMtPnBydW5lKQorCQlyZXR1cm47CisKKwlpZiAoIWNvbW1pdC0+dHJlZSkKKwkJcmV0dXJuOworCisJaWYgKCFjb21taXQtPnBhcmVudHMpIHsKKwkJaWYgKHJldl9zYW1lX3RyZWVfYXNfZW1wdHkocmV2cywgY29tbWl0KSkKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFRSRUVTQU1FOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBOb3JtYWwgbm9uLW1lcmdlIGNvbW1pdD8gSWYgd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZQorCSAqIGhpc3RvcnkgZGVuc2UsIHdlIGNvbnNpZGVyIGl0IGFsd2F5cyB0byBiZSBhIGNoYW5nZS4uCisJICovCisJaWYgKCFyZXZzLT5kZW5zZSAmJiAhY29tbWl0LT5wYXJlbnRzLT5uZXh0KQorCQlyZXR1cm47CisKKwlmb3IgKHBwID0gJmNvbW1pdC0+cGFyZW50cywgbnRoX3BhcmVudCA9IDAsIHJlbGV2YW50X3BhcmVudHMgPSAwOworCSAgICAgKHBhcmVudCA9ICpwcCkgIT0gTlVMTDsKKwkgICAgIHBwID0gJnBhcmVudC0+bmV4dCwgbnRoX3BhcmVudCsrKSB7CisJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnQtPml0ZW07CisJCWlmIChyZWxldmFudF9jb21taXQocCkpCisJCQlyZWxldmFudF9wYXJlbnRzKys7CisKKwkJaWYgKG50aF9wYXJlbnQgPT0gMSkgeworCQkJLyoKKwkJCSAqIFRoaXMgb3VyIHNlY29uZCBsb29wIGl0ZXJhdGlvbiAtIHNvIHdlIG5vdyBrbm93CisJCQkgKiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBtZXJnZS4KKwkJCSAqCisJCQkgKiBEbyBub3QgY29tcGFyZSB3aXRoIGxhdGVyIHBhcmVudHMgd2hlbiB3ZSBjYXJlIG9ubHkgYWJvdXQKKwkJCSAqIHRoZSBmaXJzdCBwYXJlbnQgY2hhaW4sIGluIG9yZGVyIHRvIGF2b2lkIGRlcmFpbGluZyB0aGUKKwkJCSAqIHRyYXZlcnNhbCB0byBmb2xsb3cgYSBzaWRlIGJyYW5jaCB0aGF0IGJyb3VnaHQgZXZlcnl0aGluZworCQkJICogaW4gdGhlIHBhdGggd2UgYXJlIGxpbWl0ZWQgdG8gYnkgdGhlIHBhdGhzcGVjLgorCQkJICovCisJCQlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCQkJYnJlYWs7CisJCQkvKgorCQkJICogSWYgdGhpcyB3aWxsIHJlbWFpbiBhIHBvdGVudGlhbGx5LXNpbXBsaWZpYWJsZQorCQkJICogbWVyZ2UsIHJlbWVtYmVyIHBlci1wYXJlbnQgdHJlZXNhbWUgaWYgbmVlZGVkLgorCQkJICogSW5pdGlhbGlzZSB0aGUgYXJyYXkgd2l0aCB0aGUgY29tcGFyaXNvbiBmcm9tIG91cgorCQkJICogZmlyc3QgaXRlcmF0aW9uLgorCQkJICovCisJCQlpZiAocmV2cy0+dHJlZXNhbWUubmFtZSAmJgorCQkJICAgICFyZXZzLT5zaW1wbGlmeV9oaXN0b3J5ICYmCisJCQkgICAgIShjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpKSB7CisJCQkJdHMgPSBpbml0aWFsaXNlX3RyZWVzYW1lKHJldnMsIGNvbW1pdCk7CisJCQkJaWYgKCEoaXJyZWxldmFudF9jaGFuZ2UgfHwgcmVsZXZhbnRfY2hhbmdlKSkKKwkJCQkJdHMtPnRyZWVzYW1lWzBdID0gMTsKKwkJCX0KKwkJfQorCQlpZiAocGFyc2VfY29tbWl0KHApIDwgMCkKKwkJCWRpZSgiY2Fubm90IHNpbXBsaWZ5IGNvbW1pdCAlcyAoYmVjYXVzZSBvZiAlcykiLAorCQkJICAgIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpLAorCQkJICAgIHNoYTFfdG9faGV4KHAtPm9iamVjdC5zaGExKSk7CisJCXN3aXRjaCAocmV2X2NvbXBhcmVfdHJlZShyZXZzLCBwLCBjb21taXQpKSB7CisJCWNhc2UgUkVWX1RSRUVfU0FNRToKKwkJCWlmICghcmV2cy0+c2ltcGxpZnlfaGlzdG9yeSB8fCAhcmVsZXZhbnRfY29tbWl0KHApKSB7CisJCQkJLyogRXZlbiBpZiBhIG1lcmdlIHdpdGggYW4gdW5pbnRlcmVzdGluZworCQkJCSAqIHNpZGUgYnJhbmNoIGJyb3VnaHQgdGhlIGVudGlyZSBjaGFuZ2UKKwkJCQkgKiB3ZSBhcmUgaW50ZXJlc3RlZCBpbiwgd2UgZG8gbm90IHdhbnQKKwkJCQkgKiB0byBsb3NlIHRoZSBvdGhlciBicmFuY2hlcyBvZiB0aGlzCisJCQkJICogbWVyZ2UsIHNvIHdlIGp1c3Qga2VlcCBnb2luZy4KKwkJCQkgKi8KKwkJCQlpZiAodHMpCisJCQkJCXRzLT50cmVlc2FtZVtudGhfcGFyZW50XSA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCQlwYXJlbnQtPm5leHQgPSBOVUxMOworCQkJY29tbWl0LT5wYXJlbnRzID0gcGFyZW50OworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gVFJFRVNBTUU7CisJCQlyZXR1cm47CisKKwkJY2FzZSBSRVZfVFJFRV9ORVc6CisJCQlpZiAocmV2cy0+cmVtb3ZlX2VtcHR5X3RyZWVzICYmCisJCQkgICAgcmV2X3NhbWVfdHJlZV9hc19lbXB0eShyZXZzLCBwKSkgeworCQkJCS8qIFdlIGFyZSBhZGRpbmcgYWxsIHRoZSBzcGVjaWZpZWQKKwkJCQkgKiBwYXRocyBmcm9tIHRoaXMgcGFyZW50LCBzbyB0aGUKKwkJCQkgKiBoaXN0b3J5IGJleW9uZCB0aGlzIHBhcmVudCBpcyBub3QKKwkJCQkgKiBpbnRlcmVzdGluZy4gIFJlbW92ZSBpdHMgcGFyZW50cworCQkJCSAqICh0aGV5IGFyZSBncmFuZHBhcmVudHMgZm9yIHVzKS4KKwkJCQkgKiBJT1csIHdlIHByZXRlbmQgdGhpcyBwYXJlbnQgaXMgYQorCQkJCSAqICJyb290IiBjb21taXQuCisJCQkJICovCisJCQkJaWYgKHBhcnNlX2NvbW1pdChwKSA8IDApCisJCQkJCWRpZSgiY2Fubm90IHNpbXBsaWZ5IGNvbW1pdCAlcyAoaW52YWxpZCAlcykiLAorCQkJCQkgICAgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSksCisJCQkJCSAgICBzaGExX3RvX2hleChwLT5vYmplY3Quc2hhMSkpOworCQkJCXAtPnBhcmVudHMgPSBOVUxMOworCQkJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIFJFVl9UUkVFX09MRDoKKwkJY2FzZSBSRVZfVFJFRV9ESUZGRVJFTlQ6CisJCQlpZiAocmVsZXZhbnRfY29tbWl0KHApKQorCQkJCXJlbGV2YW50X2NoYW5nZSA9IDE7CisJCQllbHNlCisJCQkJaXJyZWxldmFudF9jaGFuZ2UgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJZGllKCJiYWQgdHJlZSBjb21wYXJlIGZvciBjb21taXQgJXMiLCBzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSk7CisJfQorCisJLyoKKwkgKiBUUkVFU0FNRSBpcyBzdHJhaWdodGZvcndhcmQgZm9yIHNpbmdsZS1wYXJlbnQgY29tbWl0cy4gRm9yIG1lcmdlCisJICogY29tbWl0cywgaXQgaXMgbW9zdCB1c2VmdWwgdG8gZGVmaW5lIGl0IHNvIHRoYXQgImlycmVsZXZhbnQiCisJICogcGFyZW50cyBjYW5ub3QgbWFrZSB1cyAhVFJFRVNBTUUgLSBpZiB3ZSBoYXZlIGFueSByZWxldmFudAorCSAqIHBhcmVudHMsIHRoZW4gd2Ugb25seSBjb25zaWRlciBUUkVFU0FNRW5lc3Mgd2l0aCByZXNwZWN0IHRvIHRoZW0sCisJICogYWxsb3dpbmcgaXJyZWxldmFudCBtZXJnZXMgZnJvbSB1bmludGVyZXN0aW5nIGJyYW5jaGVzIHRvIGJlCisJICogc2ltcGxpZmllZCBhd2F5LiBPbmx5IGlmIHdlIGhhdmUgb25seSBpcnJlbGV2YW50IHBhcmVudHMgZG8gd2UKKwkgKiBiYXNlIFRSRUVTQU1FIG9uIHRoZW0uIE5vdGUgdGhhdCB0aGlzIGxvZ2ljIGlzIHJlcGxpY2F0ZWQgaW4KKwkgKiB1cGRhdGVfdHJlZXNhbWUsIHdoaWNoIHNob3VsZCBiZSBrZXB0IGluIHN5bmMuCisJICovCisJaWYgKHJlbGV2YW50X3BhcmVudHMgPyAhcmVsZXZhbnRfY2hhbmdlIDogIWlycmVsZXZhbnRfY2hhbmdlKQorCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBUUkVFU0FNRTsKK30KKworc3RhdGljIHZvaWQgY29tbWl0X2xpc3RfaW5zZXJ0X2J5X2RhdGVfY2FjaGVkKHN0cnVjdCBjb21taXQgKnAsIHN0cnVjdCBjb21taXRfbGlzdCAqKmhlYWQsCisJCSAgICBzdHJ1Y3QgY29tbWl0X2xpc3QgKmNhY2hlZF9iYXNlLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKipjYWNoZSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKm5ld19lbnRyeTsKKworCWlmIChjYWNoZWRfYmFzZSAmJiBwLT5kYXRlIDwgY2FjaGVkX2Jhc2UtPml0ZW0tPmRhdGUpCisJCW5ld19lbnRyeSA9IGNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHAsICZjYWNoZWRfYmFzZS0+bmV4dCk7CisJZWxzZQorCQluZXdfZW50cnkgPSBjb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZShwLCBoZWFkKTsKKworCWlmIChjYWNoZSAmJiAoISpjYWNoZSB8fCBwLT5kYXRlIDwgKCpjYWNoZSktPml0ZW0tPmRhdGUpKQorCQkqY2FjaGUgPSBuZXdfZW50cnk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3BhcmVudHNfdG9fbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJICAgIHN0cnVjdCBjb21taXRfbGlzdCAqKmxpc3QsIHN0cnVjdCBjb21taXRfbGlzdCAqKmNhY2hlX3B0cikKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudCA9IGNvbW1pdC0+cGFyZW50czsKKwl1bnNpZ25lZCBsZWZ0X2ZsYWc7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjYWNoZWRfYmFzZSA9IGNhY2hlX3B0ciA/ICpjYWNoZV9wdHIgOiBOVUxMOworCisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQURERUQpCisJCXJldHVybiAwOworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IEFEREVEOworCisJaWYgKHJldnMtPmluY2x1ZGVfY2hlY2sgJiYKKwkgICAgIXJldnMtPmluY2x1ZGVfY2hlY2soY29tbWl0LCByZXZzLT5pbmNsdWRlX2NoZWNrX2RhdGEpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgdGhlIGNvbW1pdCBpcyB1bmludGVyZXN0aW5nLCBkb24ndCB0cnkgdG8KKwkgKiBwcnVuZSBwYXJlbnRzIC0gd2Ugd2FudCB0aGUgbWF4aW1hbCB1bmludGVyZXN0aW5nCisJICogc2V0LgorCSAqCisJICogTm9ybWFsbHkgd2UgaGF2ZW4ndCBwYXJzZWQgdGhlIHBhcmVudAorCSAqIHlldCwgc28gd2Ugd29uJ3QgaGF2ZSBhIHBhcmVudCBvZiBhIHBhcmVudAorCSAqIGhlcmUuIEhvd2V2ZXIsIGl0IG1heSB0dXJuIG91dCB0aGF0IHdlJ3ZlCisJICogcmVhY2hlZCB0aGlzIGNvbW1pdCBzb21lIG90aGVyIHdheSAod2hlcmUgaXQKKwkgKiB3YXNuJ3QgdW5pbnRlcmVzdGluZyksIGluIHdoaWNoIGNhc2Ugd2UgbmVlZAorCSAqIHRvIG1hcmsgaXRzIHBhcmVudHMgcmVjdXJzaXZlbHkgdG9vLi4KKwkgKi8KKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKSB7CisJCXdoaWxlIChwYXJlbnQpIHsKKwkJCXN0cnVjdCBjb21taXQgKnAgPSBwYXJlbnQtPml0ZW07CisJCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJCQlpZiAocCkKKwkJCQlwLT5vYmplY3QuZmxhZ3MgfD0gVU5JTlRFUkVTVElORzsKKwkJCWlmIChwYXJzZV9jb21taXRfZ2VudGx5KHAsIDEpIDwgMCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChwLT5wYXJlbnRzKQorCQkJCW1hcmtfcGFyZW50c191bmludGVyZXN0aW5nKHApOworCQkJaWYgKHAtPm9iamVjdC5mbGFncyAmIFNFRU4pCisJCQkJY29udGludWU7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKwkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlX2NhY2hlZChwLCBsaXN0LCBjYWNoZWRfYmFzZSwgY2FjaGVfcHRyKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE9rLCB0aGUgY29tbWl0IHdhc24ndCB1bmludGVyZXN0aW5nLiBUcnkgdG8KKwkgKiBzaW1wbGlmeSB0aGUgY29tbWl0IGhpc3RvcnkgYW5kIGZpbmQgdGhlIHBhcmVudAorCSAqIHRoYXQgaGFzIG5vIGRpZmZlcmVuY2VzIGluIHRoZSBwYXRoIHNldCBpZiBvbmUgZXhpc3RzLgorCSAqLworCXRyeV90b19zaW1wbGlmeV9jb21taXQocmV2cywgY29tbWl0KTsKKworCWlmIChyZXZzLT5ub193YWxrKQorCQlyZXR1cm4gMDsKKworCWxlZnRfZmxhZyA9IChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKTsKKworCWZvciAocGFyZW50ID0gY29tbWl0LT5wYXJlbnRzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpwID0gcGFyZW50LT5pdGVtOworCisJCWlmIChwYXJzZV9jb21taXRfZ2VudGx5KHAsIHJldnMtPmlnbm9yZV9taXNzaW5nX2xpbmtzKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChyZXZzLT5zaG93X3NvdXJjZSAmJiAhcC0+dXRpbCkKKwkJCXAtPnV0aWwgPSBjb21taXQtPnV0aWw7CisJCXAtPm9iamVjdC5mbGFncyB8PSBsZWZ0X2ZsYWc7CisJCWlmICghKHAtPm9iamVjdC5mbGFncyAmIFNFRU4pKSB7CisJCQlwLT5vYmplY3QuZmxhZ3MgfD0gU0VFTjsKKwkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlX2NhY2hlZChwLCBsaXN0LCBjYWNoZWRfYmFzZSwgY2FjaGVfcHRyKTsKKwkJfQorCQlpZiAocmV2cy0+Zmlyc3RfcGFyZW50X29ubHkpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNoZXJyeV9waWNrX2xpc3Qoc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCWludCBsZWZ0X2NvdW50ID0gMCwgcmlnaHRfY291bnQgPSAwOworCWludCBsZWZ0X2ZpcnN0OworCXN0cnVjdCBwYXRjaF9pZHMgaWRzOworCXVuc2lnbmVkIGNoZXJyeV9mbGFnOworCisJLyogRmlyc3QgY291bnQgdGhlIGNvbW1pdHMgb24gdGhlIGxlZnQgYW5kIG9uIHRoZSByaWdodCAqLworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisJCWlmIChmbGFncyAmIEJPVU5EQVJZKQorCQkJOworCQllbHNlIGlmIChmbGFncyAmIFNZTU1FVFJJQ19MRUZUKQorCQkJbGVmdF9jb3VudCsrOworCQllbHNlCisJCQlyaWdodF9jb3VudCsrOworCX0KKworCWlmICghbGVmdF9jb3VudCB8fCAhcmlnaHRfY291bnQpCisJCXJldHVybjsKKworCWxlZnRfZmlyc3QgPSBsZWZ0X2NvdW50IDwgcmlnaHRfY291bnQ7CisJaW5pdF9wYXRjaF9pZHMoJmlkcyk7CisJaWRzLmRpZmZvcHRzLnBhdGhzcGVjID0gcmV2cy0+ZGlmZm9wdC5wYXRoc3BlYzsKKworCS8qIENvbXB1dGUgcGF0Y2gtaWRzIGZvciBvbmUgc2lkZSAqLworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXVuc2lnbmVkIGZsYWdzID0gY29tbWl0LT5vYmplY3QuZmxhZ3M7CisKKwkJaWYgKGZsYWdzICYgQk9VTkRBUlkpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBmZXdlciBsZWZ0LCBsZWZ0X2ZpcnN0IGlzIHNldCBhbmQgd2Ugb21pdAorCQkgKiBjb21taXRzIG9uIHRoZSByaWdodCBicmFuY2ggaW4gdGhpcyBsb29wLiAgSWYgd2UgaGF2ZQorCQkgKiBmZXdlciByaWdodCwgd2Ugc2tpcCB0aGUgbGVmdCBvbmVzLgorCQkgKi8KKwkJaWYgKGxlZnRfZmlyc3QgIT0gISEoZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkpCisJCQljb250aW51ZTsKKwkJY29tbWl0LT51dGlsID0gYWRkX2NvbW1pdF9wYXRjaF9pZChjb21taXQsICZpZHMpOworCX0KKworCS8qIGVpdGhlciBjaGVycnlfbWFyayBvciBjaGVycnlfcGljayBhcmUgdHJ1ZSAqLworCWNoZXJyeV9mbGFnID0gcmV2cy0+Y2hlcnJ5X21hcmsgPyBQQVRDSFNBTUUgOiBTSE9XTjsKKworCS8qIENoZWNrIHRoZSBvdGhlciBzaWRlICovCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gcC0+aXRlbTsKKwkJc3RydWN0IHBhdGNoX2lkICppZDsKKwkJdW5zaWduZWQgZmxhZ3MgPSBjb21taXQtPm9iamVjdC5mbGFnczsKKworCQlpZiAoZmxhZ3MgJiBCT1VOREFSWSkKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIGZld2VyIGxlZnQsIGxlZnRfZmlyc3QgaXMgc2V0IGFuZCB3ZSBvbWl0CisJCSAqIGNvbW1pdHMgb24gdGhlIGxlZnQgYnJhbmNoIGluIHRoaXMgbG9vcC4KKwkJICovCisJCWlmIChsZWZ0X2ZpcnN0ID09ICEhKGZsYWdzICYgU1lNTUVUUklDX0xFRlQpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSGF2ZSB3ZSBzZWVuIHRoZSBzYW1lIHBhdGNoIGlkPworCQkgKi8KKwkJaWQgPSBoYXNfY29tbWl0X3BhdGNoX2lkKGNvbW1pdCwgJmlkcyk7CisJCWlmICghaWQpCisJCQljb250aW51ZTsKKwkJaWQtPnNlZW4gPSAxOworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBjaGVycnlfZmxhZzsKKwl9CisKKwkvKiBOb3cgY2hlY2sgdGhlIG9yaWdpbmFsIHNpZGUgZm9yIHNlZW4gb25lcyAqLworCWZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IHAtPml0ZW07CisJCXN0cnVjdCBwYXRjaF9pZCAqZW50OworCisJCWVudCA9IGNvbW1pdC0+dXRpbDsKKwkJaWYgKCFlbnQpCisJCQljb250aW51ZTsKKwkJaWYgKGVudC0+c2VlbikKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IGNoZXJyeV9mbGFnOworCQljb21taXQtPnV0aWwgPSBOVUxMOworCX0KKworCWZyZWVfcGF0Y2hfaWRzKCZpZHMpOworfQorCisvKiBIb3cgbWFueSBleHRyYSB1bmludGVyZXN0aW5nIGNvbW1pdHMgd2Ugd2FudCB0byBzZWUuLiAqLworI2RlZmluZSBTTE9QIDUKKworc3RhdGljIGludCBzdGlsbF9pbnRlcmVzdGluZyhzdHJ1Y3QgY29tbWl0X2xpc3QgKnNyYywgdW5zaWduZWQgbG9uZyBkYXRlLCBpbnQgc2xvcCwKKwkJCSAgICAgc3RydWN0IGNvbW1pdCAqKmludGVyZXN0aW5nX2NhY2hlKQoreworCS8qCisJICogTm8gc291cmNlIGxpc3QgYXQgYWxsPyBXZSdyZSBkZWZpbml0ZWx5IGRvbmUuLgorCSAqLworCWlmICghc3JjKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRG9lcyB0aGUgZGVzdGluYXRpb24gbGlzdCBjb250YWluIGVudHJpZXMgd2l0aCBhIGRhdGUKKwkgKiBiZWZvcmUgdGhlIHNvdXJjZSBsaXN0PyBEZWZpbml0ZWx5IF9ub3RfIGRvbmUuCisJICovCisJaWYgKGRhdGUgPD0gc3JjLT5pdGVtLT5kYXRlKQorCQlyZXR1cm4gU0xPUDsKKworCS8qCisJICogRG9lcyB0aGUgc291cmNlIGxpc3Qgc3RpbGwgaGF2ZSBpbnRlcmVzdGluZyBjb21taXRzIGluCisJICogaXQ/IERlZmluaXRlbHkgbm90IGRvbmUuLgorCSAqLworCWlmICghZXZlcnlib2R5X3VuaW50ZXJlc3Rpbmcoc3JjLCBpbnRlcmVzdGluZ19jYWNoZSkpCisJCXJldHVybiBTTE9QOworCisJLyogT2ssIHdlJ3JlIGNsb3NpbmcgaW4uLiAqLworCXJldHVybiBzbG9wLTE7Cit9CisKKy8qCisgKiAicmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIEEuLkIiIGNvbXB1dGVzIGNvbW1pdHMgdGhhdCBhcmUgYW5jZXN0b3JzCisgKiBvZiBCIGJ1dCBub3QgYW5jZXN0b3JzIG9mIEEgYnV0IGZ1cnRoZXIgbGltaXRzIHRoZSByZXN1bHQgdG8gdGhvc2UKKyAqIHRoYXQgYXJlIGRlc2NlbmRhbnRzIG9mIEEuICBUaGlzIHRha2VzIHRoZSBsaXN0IG9mIGJvdHRvbSBjb21taXRzIGFuZAorICogdGhlIHJlc3VsdCBvZiAiQS4uQiIgd2l0aG91dCAtLWFuY2VzdHJ5LXBhdGgsIGFuZCBsaW1pdHMgdGhlIGxhdHRlcgorICogZnVydGhlciB0byB0aGUgb25lcyB0aGF0IGNhbiByZWFjaCBvbmUgb2YgdGhlIGNvbW1pdHMgaW4gImJvdHRvbSIuCisgKi8KK3N0YXRpYyB2b2lkIGxpbWl0X3RvX2FuY2VzdHJ5KHN0cnVjdCBjb21taXRfbGlzdCAqYm90dG9tLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCXN0cnVjdCBjb21taXRfbGlzdCAqcmxpc3QgPSBOVUxMOworCWludCBtYWRlX3Byb2dyZXNzOworCisJLyoKKwkgKiBSZXZlcnNlIHRoZSBsaXN0IHNvIHRoYXQgaXQgd2lsbCBiZSBsaWtlbHkgdGhhdCB3ZSB3b3VsZAorCSAqIHByb2Nlc3MgcGFyZW50cyBiZWZvcmUgY2hpbGRyZW4uCisJICovCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpCisJCWNvbW1pdF9saXN0X2luc2VydChwLT5pdGVtLCAmcmxpc3QpOworCisJZm9yIChwID0gYm90dG9tOyBwOyBwID0gcC0+bmV4dCkKKwkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFRNUF9NQVJLOworCisJLyoKKwkgKiBNYXJrIHRoZSBvbmVzIHRoYXQgY2FuIHJlYWNoIGJvdHRvbSBjb21taXRzIGluICJsaXN0IiwKKwkgKiBpbiBhIGJvdHRvbS11cCBmYXNoaW9uLgorCSAqLworCWRvIHsKKwkJbWFkZV9wcm9ncmVzcyA9IDA7CisJCWZvciAocCA9IHJsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqYyA9IHAtPml0ZW07CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgKFRNUF9NQVJLIHwgVU5JTlRFUkVTVElORykpCisJCQkJY29udGludWU7CisJCQlmb3IgKHBhcmVudHMgPSBjLT5wYXJlbnRzOworCQkJICAgICBwYXJlbnRzOworCQkJICAgICBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQkJCWlmICghKHBhcmVudHMtPml0ZW0tPm9iamVjdC5mbGFncyAmIFRNUF9NQVJLKSkKKwkJCQkJY29udGludWU7CisJCQkJYy0+b2JqZWN0LmZsYWdzIHw9IFRNUF9NQVJLOworCQkJCW1hZGVfcHJvZ3Jlc3MgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSB3aGlsZSAobWFkZV9wcm9ncmVzcyk7CisKKwkvKgorCSAqIE5FRURTV09SSzogZGVjaWRlIGlmIHdlIHdhbnQgdG8gcmVtb3ZlIHBhcmVudHMgdGhhdCBhcmUKKwkgKiBub3QgbWFya2VkIHdpdGggVE1QX01BUksgZnJvbSBjb21taXQtPnBhcmVudHMgZm9yIGNvbW1pdHMKKwkgKiBpbiB0aGUgcmVzdWx0aW5nIGxpc3QuICBXZSBtYXkgbm90IHdhbnQgdG8gZG8gdGhhdCwgdGhvdWdoLgorCSAqLworCisJLyoKKwkgKiBUaGUgb25lcyB0aGF0IGFyZSBub3QgbWFya2VkIHdpdGggVE1QX01BUksgYXJlIHVuaW50ZXJlc3RpbmcKKwkgKi8KKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gcC0+aXRlbTsKKwkJaWYgKGMtPm9iamVjdC5mbGFncyAmIFRNUF9NQVJLKQorCQkJY29udGludWU7CisJCWMtPm9iamVjdC5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCX0KKworCS8qIFdlIGFyZSBkb25lIHdpdGggdGhlIFRNUF9NQVJLICovCisJZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpCisJCXAtPml0ZW0tPm9iamVjdC5mbGFncyAmPSB+VE1QX01BUks7CisJZm9yIChwID0gYm90dG9tOyBwOyBwID0gcC0+bmV4dCkKKwkJcC0+aXRlbS0+b2JqZWN0LmZsYWdzICY9IH5UTVBfTUFSSzsKKwlmcmVlX2NvbW1pdF9saXN0KHJsaXN0KTsKK30KKworLyoKKyAqIEJlZm9yZSB3YWxraW5nIHRoZSBoaXN0b3J5LCBrZWVwIHRoZSBzZXQgb2YgIm5lZ2F0aXZlIiByZWZzIHRoZQorICogY2FsbGVyIGhhcyBhc2tlZCB0byBleGNsdWRlLgorICoKKyAqIFRoaXMgaXMgdXNlZCB0byBjb21wdXRlICJyZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggQS4uQiIsIGFzIHdlIG5lZWQKKyAqIHRvIGZpbHRlciB0aGUgcmVzdWx0IG9mICJBLi5CIiBmdXJ0aGVyIHRvIHRoZSBvbmVzIHRoYXQgY2FuIGFjdHVhbGx5CisgKiByZWFjaCBBLgorICovCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpjb2xsZWN0X2JvdHRvbV9jb21taXRzKHN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVsZW0sICpib3R0b20gPSBOVUxMOworCWZvciAoZWxlbSA9IGxpc3Q7IGVsZW07IGVsZW0gPSBlbGVtLT5uZXh0KQorCQlpZiAoZWxlbS0+aXRlbS0+b2JqZWN0LmZsYWdzICYgQk9UVE9NKQorCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGVsZW0tPml0ZW0sICZib3R0b20pOworCXJldHVybiBib3R0b207Cit9CisKKy8qIEFzc3VtZXMgZWl0aGVyIGxlZnRfb25seSBvciByaWdodF9vbmx5IGlzIHNldCAqLworc3RhdGljIHZvaWQgbGltaXRfbGVmdF9yaWdodChzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QsIHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisKKwlmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBwLT5pdGVtOworCisJCWlmIChyZXZzLT5yaWdodF9vbmx5KSB7CisJCQlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTWU1NRVRSSUNfTEVGVCkKKwkJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBTSE9XTjsKKwkJfSBlbHNlCS8qIHJldnMtPmxlZnRfb25seSBpcyBzZXQgKi8KKwkJCWlmICghKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgU1lNTUVUUklDX0xFRlQpKQorCQkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFNIT1dOOworCX0KK30KKworc3RhdGljIGludCBsaW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpbnQgc2xvcCA9IFNMT1A7CisJdW5zaWduZWQgbG9uZyBkYXRlID0gfjB1bDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSByZXZzLT5jb21taXRzOworCXN0cnVjdCBjb21taXRfbGlzdCAqbmV3bGlzdCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcCA9ICZuZXdsaXN0OworCXN0cnVjdCBjb21taXRfbGlzdCAqYm90dG9tID0gTlVMTDsKKwlzdHJ1Y3QgY29tbWl0ICppbnRlcmVzdGluZ19jYWNoZSA9IE5VTEw7CisKKwlpZiAocmV2cy0+YW5jZXN0cnlfcGF0aCkgeworCQlib3R0b20gPSBjb2xsZWN0X2JvdHRvbV9jb21taXRzKGxpc3QpOworCQlpZiAoIWJvdHRvbSkKKwkJCWRpZSgiLS1hbmNlc3RyeS1wYXRoIGdpdmVuIGJ1dCB0aGVyZSBhcmUgbm8gYm90dG9tIGNvbW1pdHMiKTsKKwl9CisKKwl3aGlsZSAobGlzdCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVudHJ5ID0gbGlzdDsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gJmNvbW1pdC0+b2JqZWN0OworCQlzaG93X2Vhcmx5X291dHB1dF9mbl90IHNob3c7CisKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCWZyZWUoZW50cnkpOworCisJCWlmIChjb21taXQgPT0gaW50ZXJlc3RpbmdfY2FjaGUpCisJCQlpbnRlcmVzdGluZ19jYWNoZSA9IE5VTEw7CisKKwkJaWYgKHJldnMtPm1heF9hZ2UgIT0gLTEgJiYgKGNvbW1pdC0+ZGF0ZSA8IHJldnMtPm1heF9hZ2UpKQorCQkJb2JqLT5mbGFncyB8PSBVTklOVEVSRVNUSU5HOworCQlpZiAoYWRkX3BhcmVudHNfdG9fbGlzdChyZXZzLCBjb21taXQsICZsaXN0LCBOVUxMKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChvYmotPmZsYWdzICYgVU5JTlRFUkVTVElORykgeworCQkJbWFya19wYXJlbnRzX3VuaW50ZXJlc3RpbmcoY29tbWl0KTsKKwkJCWlmIChyZXZzLT5zaG93X2FsbCkKKwkJCQlwID0gJmNvbW1pdF9saXN0X2luc2VydChjb21taXQsIHApLT5uZXh0OworCQkJc2xvcCA9IHN0aWxsX2ludGVyZXN0aW5nKGxpc3QsIGRhdGUsIHNsb3AsICZpbnRlcmVzdGluZ19jYWNoZSk7CisJCQlpZiAoc2xvcCkKKwkJCQljb250aW51ZTsKKwkJCS8qIElmIHNob3dpbmcgYWxsLCBhZGQgdGhlIHdob2xlIHBlbmRpbmcgbGlzdCB0byB0aGUgZW5kICovCisJCQlpZiAocmV2cy0+c2hvd19hbGwpCisJCQkJKnAgPSBsaXN0OworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJldnMtPm1pbl9hZ2UgIT0gLTEgJiYgKGNvbW1pdC0+ZGF0ZSA+IHJldnMtPm1pbl9hZ2UpKQorCQkJY29udGludWU7CisJCWRhdGUgPSBjb21taXQtPmRhdGU7CisJCXAgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgcCktPm5leHQ7CisKKwkJc2hvdyA9IHNob3dfZWFybHlfb3V0cHV0OworCQlpZiAoIXNob3cpCisJCQljb250aW51ZTsKKworCQlzaG93KHJldnMsIG5ld2xpc3QpOworCQlzaG93X2Vhcmx5X291dHB1dCA9IE5VTEw7CisJfQorCWlmIChyZXZzLT5jaGVycnlfcGljayB8fCByZXZzLT5jaGVycnlfbWFyaykKKwkJY2hlcnJ5X3BpY2tfbGlzdChuZXdsaXN0LCByZXZzKTsKKworCWlmIChyZXZzLT5sZWZ0X29ubHkgfHwgcmV2cy0+cmlnaHRfb25seSkKKwkJbGltaXRfbGVmdF9yaWdodChuZXdsaXN0LCByZXZzKTsKKworCWlmIChib3R0b20pIHsKKwkJbGltaXRfdG9fYW5jZXN0cnkoYm90dG9tLCBuZXdsaXN0KTsKKwkJZnJlZV9jb21taXRfbGlzdChib3R0b20pOworCX0KKworCS8qCisJICogQ2hlY2sgaWYgYW55IGNvbW1pdHMgaGF2ZSBiZWNvbWUgVFJFRVNBTUUgYnkgc29tZSBvZiB0aGVpciBwYXJlbnRzCisJICogYmVjb21pbmcgVU5JTlRFUkVTVElORy4KKwkgKi8KKwlpZiAobGltaXRpbmdfY2FuX2luY3JlYXNlX3RyZWVzYW1lKHJldnMpKQorCQlmb3IgKGxpc3QgPSBuZXdsaXN0OyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkgeworCQkJc3RydWN0IGNvbW1pdCAqYyA9IGxpc3QtPml0ZW07CisJCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgKFVOSU5URVJFU1RJTkcgfCBUUkVFU0FNRSkpCisJCQkJY29udGludWU7CisJCQl1cGRhdGVfdHJlZXNhbWUocmV2cywgYyk7CisJCX0KKworCXJldnMtPmNvbW1pdHMgPSBuZXdsaXN0OworCXJldHVybiAwOworfQorCisvKgorICogQWRkIGFuIGVudHJ5IHRvIHJlZnMtPmNtZGxpbmUgd2l0aCB0aGUgc3BlY2lmaWVkIGluZm9ybWF0aW9uLgorICogKm5hbWUgaXMgY29waWVkLgorICovCitzdGF0aWMgdm9pZCBhZGRfcmV2X2NtZGxpbmUoc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgIHN0cnVjdCBvYmplY3QgKml0ZW0sCisJCQkgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICBpbnQgd2hlbmNlLAorCQkJICAgIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCByZXZfY21kbGluZV9pbmZvICppbmZvID0gJnJldnMtPmNtZGxpbmU7CisJaW50IG5yID0gaW5mby0+bnI7CisKKwlBTExPQ19HUk9XKGluZm8tPnJldiwgbnIgKyAxLCBpbmZvLT5hbGxvYyk7CisJaW5mby0+cmV2W25yXS5pdGVtID0gaXRlbTsKKwlpbmZvLT5yZXZbbnJdLm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCWluZm8tPnJldltucl0ud2hlbmNlID0gd2hlbmNlOworCWluZm8tPnJldltucl0uZmxhZ3MgPSBmbGFnczsKKwlpbmZvLT5ucisrOworfQorCitzdGF0aWMgdm9pZCBhZGRfcmV2X2NtZGxpbmVfbGlzdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJIHN0cnVjdCBjb21taXRfbGlzdCAqY29tbWl0X2xpc3QsCisJCQkJIGludCB3aGVuY2UsCisJCQkJIHVuc2lnbmVkIGZsYWdzKQoreworCXdoaWxlIChjb21taXRfbGlzdCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSAmY29tbWl0X2xpc3QtPml0ZW0tPm9iamVjdDsKKwkJYWRkX3Jldl9jbWRsaW5lKHJldnMsIG9iamVjdCwgc2hhMV90b19oZXgob2JqZWN0LT5zaGExKSwKKwkJCQl3aGVuY2UsIGZsYWdzKTsKKwkJY29tbWl0X2xpc3QgPSBjb21taXRfbGlzdC0+bmV4dDsKKwl9Cit9CisKK3N0cnVjdCBhbGxfcmVmc19jYiB7CisJaW50IGFsbF9mbGFnczsKKwlpbnQgd2FybmVkX2JhZF9yZWZsb2c7CisJc3RydWN0IHJldl9pbmZvICphbGxfcmV2czsKKwljb25zdCBjaGFyICpuYW1lX2Zvcl9lcnJvcm1zZzsKK307CisKK2ludCByZWZfZXhjbHVkZWQoc3RydWN0IHN0cmluZ19saXN0ICpyZWZfZXhjbHVkZXMsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwlpZiAoIXJlZl9leGNsdWRlcykKKwkJcmV0dXJuIDA7CisJZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLCByZWZfZXhjbHVkZXMpIHsKKwkJaWYgKCF3aWxkbWF0Y2goaXRlbS0+c3RyaW5nLCBwYXRoLCAwLCBOVUxMKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVfb25lX3JlZihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBhbGxfcmVmc19jYiAqY2IgPSBjYl9kYXRhOworCXN0cnVjdCBvYmplY3QgKm9iamVjdDsKKworCWlmIChyZWZfZXhjbHVkZWQoY2ItPmFsbF9yZXZzLT5yZWZfZXhjbHVkZXMsIHBhdGgpKQorCSAgICByZXR1cm4gMDsKKworCW9iamVjdCA9IGdldF9yZWZlcmVuY2UoY2ItPmFsbF9yZXZzLCBwYXRoLCBvaWQtPmhhc2gsIGNiLT5hbGxfZmxhZ3MpOworCWFkZF9yZXZfY21kbGluZShjYi0+YWxsX3JldnMsIG9iamVjdCwgcGF0aCwgUkVWX0NNRF9SRUYsIGNiLT5hbGxfZmxhZ3MpOworCWFkZF9wZW5kaW5nX3NoYTEoY2ItPmFsbF9yZXZzLCBwYXRoLCBvaWQtPmhhc2gsIGNiLT5hbGxfZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpbml0X2FsbF9yZWZzX2NiKHN0cnVjdCBhbGxfcmVmc19jYiAqY2IsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwl1bnNpZ25lZCBmbGFncykKK3sKKwljYi0+YWxsX3JldnMgPSByZXZzOworCWNiLT5hbGxfZmxhZ3MgPSBmbGFnczsKK30KKwordm9pZCBjbGVhcl9yZWZfZXhjbHVzaW9uKHN0cnVjdCBzdHJpbmdfbGlzdCAqKnJlZl9leGNsdWRlc19wKQoreworCWlmICgqcmVmX2V4Y2x1ZGVzX3ApIHsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoKnJlZl9leGNsdWRlc19wLCAwKTsKKwkJZnJlZSgqcmVmX2V4Y2x1ZGVzX3ApOworCX0KKwkqcmVmX2V4Y2x1ZGVzX3AgPSBOVUxMOworfQorCit2b2lkIGFkZF9yZWZfZXhjbHVzaW9uKHN0cnVjdCBzdHJpbmdfbGlzdCAqKnJlZl9leGNsdWRlc19wLCBjb25zdCBjaGFyICpleGNsdWRlKQoreworCWlmICghKnJlZl9leGNsdWRlc19wKSB7CisJCSpyZWZfZXhjbHVkZXNfcCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCoqcmVmX2V4Y2x1ZGVzX3ApKTsKKwkJKCpyZWZfZXhjbHVkZXNfcCktPnN0cmR1cF9zdHJpbmdzID0gMTsKKwl9CisJc3RyaW5nX2xpc3RfYXBwZW5kKCpyZWZfZXhjbHVkZXNfcCwgZXhjbHVkZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9yZWZzKGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwgc3RydWN0IHJldl9pbmZvICpyZXZzLCB1bnNpZ25lZCBmbGFncywKKwkJaW50ICgqZm9yX2VhY2gpKGNvbnN0IGNoYXIgKiwgZWFjaF9yZWZfZm4sIHZvaWQgKikpCit7CisJc3RydWN0IGFsbF9yZWZzX2NiIGNiOworCWluaXRfYWxsX3JlZnNfY2IoJmNiLCByZXZzLCBmbGFncyk7CisJZm9yX2VhY2goc3VibW9kdWxlLCBoYW5kbGVfb25lX3JlZiwgJmNiKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX29uZV9yZWZsb2dfY29tbWl0KHVuc2lnbmVkIGNoYXIgKnNoYTEsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGFsbF9yZWZzX2NiICpjYiA9IGNiX2RhdGE7CisJaWYgKCFpc19udWxsX3NoYTEoc2hhMSkpIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IHBhcnNlX29iamVjdChzaGExKTsKKwkJaWYgKG8pIHsKKwkJCW8tPmZsYWdzIHw9IGNiLT5hbGxfZmxhZ3M7CisJCQkvKiA/Pz8gQ01ETElORUZMQUdTID8/PyAqLworCQkJYWRkX3BlbmRpbmdfb2JqZWN0KGNiLT5hbGxfcmV2cywgbywgIiIpOworCQl9CisJCWVsc2UgaWYgKCFjYi0+d2FybmVkX2JhZF9yZWZsb2cpIHsKKwkJCXdhcm5pbmcoInJlZmxvZyBvZiAnJXMnIHJlZmVyZW5jZXMgcHJ1bmVkIGNvbW1pdHMiLAorCQkJCWNiLT5uYW1lX2Zvcl9lcnJvcm1zZyk7CisJCQljYi0+d2FybmVkX2JhZF9yZWZsb2cgPSAxOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGhhbmRsZV9vbmVfcmVmbG9nX2VudCh1bnNpZ25lZCBjaGFyICpvc2hhMSwgdW5zaWduZWQgY2hhciAqbnNoYTEsCisJCWNvbnN0IGNoYXIgKmVtYWlsLCB1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCwgaW50IHR6LAorCQljb25zdCBjaGFyICptZXNzYWdlLCB2b2lkICpjYl9kYXRhKQoreworCWhhbmRsZV9vbmVfcmVmbG9nX2NvbW1pdChvc2hhMSwgY2JfZGF0YSk7CisJaGFuZGxlX29uZV9yZWZsb2dfY29tbWl0KG5zaGExLCBjYl9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoYW5kbGVfb25lX3JlZmxvZyhjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCXN0cnVjdCBhbGxfcmVmc19jYiAqY2IgPSBjYl9kYXRhOworCWNiLT53YXJuZWRfYmFkX3JlZmxvZyA9IDA7CisJY2ItPm5hbWVfZm9yX2Vycm9ybXNnID0gcGF0aDsKKwlmb3JfZWFjaF9yZWZsb2dfZW50KHBhdGgsIGhhbmRsZV9vbmVfcmVmbG9nX2VudCwgY2JfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYWRkX3JlZmxvZ3NfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBhbGxfcmVmc19jYiBjYjsKKworCWNiLmFsbF9yZXZzID0gcmV2czsKKwljYi5hbGxfZmxhZ3MgPSBmbGFnczsKKwlmb3JfZWFjaF9yZWZsb2coaGFuZGxlX29uZV9yZWZsb2csICZjYik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9jYWNoZV90cmVlKHN0cnVjdCBjYWNoZV90cmVlICppdCwgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgc3RydWN0IHN0cmJ1ZiAqcGF0aCkKK3sKKwlzaXplX3QgYmFzZWxlbiA9IHBhdGgtPmxlbjsKKwlpbnQgaTsKKworCWlmIChpdC0+ZW50cnlfY291bnQgPj0gMCkgeworCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IGxvb2t1cF90cmVlKGl0LT5zaGExKTsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfcGF0aChyZXZzLCAmdHJlZS0+b2JqZWN0LCAiIiwKKwkJCQkJICAgICAwNDAwMDAsIHBhdGgtPmJ1Zik7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGl0LT5zdWJ0cmVlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpzdWIgPSBpdC0+ZG93bltpXTsKKwkJc3RyYnVmX2FkZGYocGF0aCwgIiVzJXMiLCBiYXNlbGVuID8gIi8iIDogIiIsIHN1Yi0+bmFtZSk7CisJCWFkZF9jYWNoZV90cmVlKHN1Yi0+Y2FjaGVfdHJlZSwgcmV2cywgcGF0aCk7CisJCXN0cmJ1Zl9zZXRsZW4ocGF0aCwgYmFzZWxlbik7CisJfQorCit9CisKK3ZvaWQgYWRkX2luZGV4X29iamVjdHNfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCBpOworCisJcmVhZF9jYWNoZSgpOworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQlzdHJ1Y3QgYmxvYiAqYmxvYjsKKworCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJY29udGludWU7CisKKwkJYmxvYiA9IGxvb2t1cF9ibG9iKGNlLT5zaGExKTsKKwkJaWYgKCFibG9iKQorCQkJZGllKCJ1bmFibGUgdG8gYWRkIGluZGV4IGJsb2IgdG8gdHJhdmVyc2FsIik7CisJCWFkZF9wZW5kaW5nX29iamVjdF93aXRoX3BhdGgocmV2cywgJmJsb2ItPm9iamVjdCwgIiIsCisJCQkJCSAgICAgY2UtPmNlX21vZGUsIGNlLT5uYW1lKTsKKwl9CisKKwlpZiAoYWN0aXZlX2NhY2hlX3RyZWUpIHsKKwkJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJCWFkZF9jYWNoZV90cmVlKGFjdGl2ZV9jYWNoZV90cmVlLCByZXZzLCAmcGF0aCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWRkX3BhcmVudHNfb25seShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKmFyZ18sIGludCBmbGFncykKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXN0cnVjdCBvYmplY3QgKml0OworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisJY29uc3QgY2hhciAqYXJnID0gYXJnXzsKKworCWlmICgqYXJnID09ICdeJykgeworCQlmbGFncyBePSBVTklOVEVSRVNUSU5HIHwgQk9UVE9NOworCQlhcmcrKzsKKwl9CisJaWYgKGdldF9zaGExX2NvbW1pdHRpc2goYXJnLCBzaGExKSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKDEpIHsKKwkJaXQgPSBnZXRfcmVmZXJlbmNlKHJldnMsIGFyZywgc2hhMSwgMCk7CisJCWlmICghaXQgJiYgcmV2cy0+aWdub3JlX21pc3NpbmcpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGl0LT50eXBlICE9IE9CSl9UQUcpCisJCQlicmVhazsKKwkJaWYgKCEoKHN0cnVjdCB0YWcqKWl0KS0+dGFnZ2VkKQorCQkJcmV0dXJuIDA7CisJCWhhc2hjcHkoc2hhMSwgKChzdHJ1Y3QgdGFnKilpdCktPnRhZ2dlZC0+c2hhMSk7CisJfQorCWlmIChpdC0+dHlwZSAhPSBPQkpfQ09NTUlUKQorCQlyZXR1cm4gMDsKKwljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKWl0OworCWZvciAocGFyZW50cyA9IGNvbW1pdC0+cGFyZW50czsgcGFyZW50czsgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpIHsKKwkJaXQgPSAmcGFyZW50cy0+aXRlbS0+b2JqZWN0OworCQlpdC0+ZmxhZ3MgfD0gZmxhZ3M7CisJCWFkZF9yZXZfY21kbGluZShyZXZzLCBpdCwgYXJnXywgUkVWX0NNRF9QQVJFTlRTX09OTFksIGZsYWdzKTsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIGl0LCBhcmcpOworCX0KKwlyZXR1cm4gMTsKK30KKwordm9pZCBpbml0X3JldmlzaW9ucyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwltZW1zZXQocmV2cywgMCwgc2l6ZW9mKCpyZXZzKSk7CisKKwlyZXZzLT5hYmJyZXYgPSBERUZBVUxUX0FCQlJFVjsKKwlyZXZzLT5pZ25vcmVfbWVyZ2VzID0gMTsKKwlyZXZzLT5zaW1wbGlmeV9oaXN0b3J5ID0gMTsKKwlESUZGX09QVF9TRVQoJnJldnMtPnBydW5pbmcsIFJFQ1VSU0lWRSk7CisJRElGRl9PUFRfU0VUKCZyZXZzLT5wcnVuaW5nLCBRVUlDSyk7CisJcmV2cy0+cHJ1bmluZy5hZGRfcmVtb3ZlID0gZmlsZV9hZGRfcmVtb3ZlOworCXJldnMtPnBydW5pbmcuY2hhbmdlID0gZmlsZV9jaGFuZ2U7CisJcmV2cy0+c29ydF9vcmRlciA9IFJFVl9TT1JUX0lOX0dSQVBIX09SREVSOworCXJldnMtPmRlbnNlID0gMTsKKwlyZXZzLT5wcmVmaXggPSBwcmVmaXg7CisJcmV2cy0+bWF4X2FnZSA9IC0xOworCXJldnMtPm1pbl9hZ2UgPSAtMTsKKwlyZXZzLT5za2lwX2NvdW50ID0gLTE7CisJcmV2cy0+bWF4X2NvdW50ID0gLTE7CisJcmV2cy0+bWF4X3BhcmVudHMgPSAtMTsKKworCXJldnMtPmNvbW1pdF9mb3JtYXQgPSBDTUlUX0ZNVF9ERUZBVUxUOworCisJaW5pdF9ncmVwX2RlZmF1bHRzKCk7CisJZ3JlcF9pbml0KCZyZXZzLT5ncmVwX2ZpbHRlciwgcHJlZml4KTsKKwlyZXZzLT5ncmVwX2ZpbHRlci5zdGF0dXNfb25seSA9IDE7CisJcmV2cy0+Z3JlcF9maWx0ZXIucmVnZmxhZ3MgPSBSRUdfTkVXTElORTsKKworCWRpZmZfc2V0dXAoJnJldnMtPmRpZmZvcHQpOworCWlmIChwcmVmaXggJiYgIXJldnMtPmRpZmZvcHQucHJlZml4KSB7CisJCXJldnMtPmRpZmZvcHQucHJlZml4ID0gcHJlZml4OworCQlyZXZzLT5kaWZmb3B0LnByZWZpeF9sZW5ndGggPSBzdHJsZW4ocHJlZml4KTsKKwl9CisKKwlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAtMTsKK30KKworc3RhdGljIHZvaWQgYWRkX3BlbmRpbmdfY29tbWl0X2xpc3Qoc3RydWN0IHJldl9pbmZvICpyZXZzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbW1pdF9saXN0ICpjb21taXRfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl3aGlsZSAoY29tbWl0X2xpc3QpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gJmNvbW1pdF9saXN0LT5pdGVtLT5vYmplY3Q7CisJCW9iamVjdC0+ZmxhZ3MgfD0gZmxhZ3M7CisJCWFkZF9wZW5kaW5nX29iamVjdChyZXZzLCBvYmplY3QsIHNoYTFfdG9faGV4KG9iamVjdC0+c2hhMSkpOworCQljb21taXRfbGlzdCA9IGNvbW1pdF9saXN0LT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9zaG93X21lcmdlKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmJhc2VzOworCXN0cnVjdCBjb21taXQgKmhlYWQsICpvdGhlcjsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWNvbnN0IGNoYXIgKipwcnVuZSA9IE5VTEw7CisJaW50IGksIHBydW5lX251bSA9IDE7IC8qIGNvdW50aW5nIHRlcm1pbmF0aW5nIE5VTEwgKi8KKworCWlmIChnZXRfc2hhMSgiSEVBRCIsIHNoYTEpKQorCQlkaWUoIi0tbWVyZ2Ugd2l0aG91dCBIRUFEPyIpOworCWhlYWQgPSBsb29rdXBfY29tbWl0X29yX2RpZShzaGExLCAiSEVBRCIpOworCWlmIChnZXRfc2hhMSgiTUVSR0VfSEVBRCIsIHNoYTEpKQorCQlkaWUoIi0tbWVyZ2Ugd2l0aG91dCBNRVJHRV9IRUFEPyIpOworCW90aGVyID0gbG9va3VwX2NvbW1pdF9vcl9kaWUoc2hhMSwgIk1FUkdFX0hFQUQiKTsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJmhlYWQtPm9iamVjdCwgIkhFQUQiKTsKKwlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgJm90aGVyLT5vYmplY3QsICJNRVJHRV9IRUFEIik7CisJYmFzZXMgPSBnZXRfbWVyZ2VfYmFzZXMoaGVhZCwgb3RoZXIpOworCWFkZF9yZXZfY21kbGluZV9saXN0KHJldnMsIGJhc2VzLCBSRVZfQ01EX01FUkdFX0JBU0UsIFVOSU5URVJFU1RJTkcgfCBCT1RUT00pOworCWFkZF9wZW5kaW5nX2NvbW1pdF9saXN0KHJldnMsIGJhc2VzLCBVTklOVEVSRVNUSU5HIHwgQk9UVE9NKTsKKwlmcmVlX2NvbW1pdF9saXN0KGJhc2VzKTsKKwloZWFkLT5vYmplY3QuZmxhZ3MgfD0gU1lNTUVUUklDX0xFRlQ7CisKKwlpZiAoIWFjdGl2ZV9ucikKKwkJcmVhZF9jYWNoZSgpOworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQlpZiAoIWNlX3N0YWdlKGNlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY2VfcGF0aF9tYXRjaChjZSwgJnJldnMtPnBydW5lX2RhdGEsIE5VTEwpKSB7CisJCQlwcnVuZV9udW0rKzsKKwkJCVJFQUxMT0NfQVJSQVkocHJ1bmUsIHBydW5lX251bSk7CisJCQlwcnVuZVtwcnVuZV9udW0tMl0gPSBjZS0+bmFtZTsKKwkJCXBydW5lW3BydW5lX251bS0xXSA9IE5VTEw7CisJCX0KKwkJd2hpbGUgKChpKzEgPCBhY3RpdmVfbnIpICYmCisJCSAgICAgICBjZV9zYW1lX25hbWUoY2UsIGFjdGl2ZV9jYWNoZVtpKzFdKSkKKwkJCWkrKzsKKwl9CisJZnJlZV9wYXRoc3BlYygmcmV2cy0+cHJ1bmVfZGF0YSk7CisJcGFyc2VfcGF0aHNwZWMoJnJldnMtPnBydW5lX2RhdGEsIFBBVEhTUEVDX0FMTF9NQUdJQyAmIH5QQVRIU1BFQ19MSVRFUkFMLAorCQkgICAgICAgUEFUSFNQRUNfUFJFRkVSX0ZVTEwgfCBQQVRIU1BFQ19MSVRFUkFMX1BBVEgsICIiLCBwcnVuZSk7CisJcmV2cy0+bGltaXRlZCA9IDE7Cit9CisKK2ludCBoYW5kbGVfcmV2aXNpb25fYXJnKGNvbnN0IGNoYXIgKmFyZ18sIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGZsYWdzLCB1bnNpZ25lZCByZXZhcmdfb3B0KQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCBvYzsKKwljaGFyICpkb3Rkb3Q7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IGxvY2FsX2ZsYWdzOworCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ187CisJaW50IGNhbnRfYmVfZmlsZW5hbWUgPSByZXZhcmdfb3B0ICYgUkVWQVJHX0NBTk5PVF9CRV9GSUxFTkFNRTsKKwl1bnNpZ25lZCBnZXRfc2hhMV9mbGFncyA9IDA7CisKKwlmbGFncyA9IGZsYWdzICYgVU5JTlRFUkVTVElORyA/IGZsYWdzIHwgQk9UVE9NIDogZmxhZ3MgJiB+Qk9UVE9NOworCisJZG90ZG90ID0gc3Ryc3RyKGFyZywgIi4uIik7CisJaWYgKGRvdGRvdCkgeworCQl1bnNpZ25lZCBjaGFyIGZyb21fc2hhMVsyMF07CisJCWNvbnN0IGNoYXIgKm5leHQgPSBkb3Rkb3QgKyAyOworCQljb25zdCBjaGFyICp0aGlzID0gYXJnOworCQlpbnQgc3ltbWV0cmljID0gKm5leHQgPT0gJy4nOworCQl1bnNpZ25lZCBpbnQgZmxhZ3NfZXhjbHVkZSA9IGZsYWdzIF4gKFVOSU5URVJFU1RJTkcgfCBCT1RUT00pOworCQlzdGF0aWMgY29uc3QgY2hhciBoZWFkX2J5X2RlZmF1bHRbXSA9ICJIRUFEIjsKKwkJdW5zaWduZWQgaW50IGFfZmxhZ3M7CisKKwkJKmRvdGRvdCA9IDA7CisJCW5leHQgKz0gc3ltbWV0cmljOworCisJCWlmICghKm5leHQpCisJCQluZXh0ID0gaGVhZF9ieV9kZWZhdWx0OworCQlpZiAoZG90ZG90ID09IGFyZykKKwkJCXRoaXMgPSBoZWFkX2J5X2RlZmF1bHQ7CisJCWlmICh0aGlzID09IGhlYWRfYnlfZGVmYXVsdCAmJiBuZXh0ID09IGhlYWRfYnlfZGVmYXVsdCAmJgorCQkgICAgIXN5bW1ldHJpYykgeworCQkJLyoKKwkJCSAqIEp1c3QgIi4uIj8gIFRoYXQgaXMgbm90IGEgcmFuZ2UgYnV0IHRoZQorCQkJICogcGF0aHNwZWMgZm9yIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgorCQkJICovCisJCQlpZiAoIWNhbnRfYmVfZmlsZW5hbWUpIHsKKwkJCQkqZG90ZG90ID0gJy4nOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlpZiAoIWdldF9zaGExX2NvbW1pdHRpc2godGhpcywgZnJvbV9zaGExKSAmJgorCQkgICAgIWdldF9zaGExX2NvbW1pdHRpc2gobmV4dCwgc2hhMSkpIHsKKwkJCXN0cnVjdCBvYmplY3QgKmFfb2JqLCAqYl9vYmo7CisKKwkJCWlmICghY2FudF9iZV9maWxlbmFtZSkgeworCQkJCSpkb3Rkb3QgPSAnLic7CisJCQkJdmVyaWZ5X25vbl9maWxlbmFtZShyZXZzLT5wcmVmaXgsIGFyZyk7CisJCQl9CisKKwkJCWFfb2JqID0gcGFyc2Vfb2JqZWN0KGZyb21fc2hhMSk7CisJCQliX29iaiA9IHBhcnNlX29iamVjdChzaGExKTsKKwkJCWlmICghYV9vYmogfHwgIWJfb2JqKSB7CisJCQltaXNzaW5nOgorCQkJCWlmIChyZXZzLT5pZ25vcmVfbWlzc2luZykKKwkJCQkJcmV0dXJuIDA7CisJCQkJZGllKHN5bW1ldHJpYworCQkJCSAgICA/ICJJbnZhbGlkIHN5bW1ldHJpYyBkaWZmZXJlbmNlIGV4cHJlc3Npb24gJXMiCisJCQkJICAgIDogIkludmFsaWQgcmV2aXNpb24gcmFuZ2UgJXMiLCBhcmcpOworCQkJfQorCisJCQlpZiAoIXN5bW1ldHJpYykgeworCQkJCS8qIGp1c3QgQS4uQiAqLworCQkJCWFfZmxhZ3MgPSBmbGFnc19leGNsdWRlOworCQkJfSBlbHNlIHsKKwkJCQkvKiBBLi4uQiAtLSBmaW5kIG1lcmdlIGJhc2VzIGJldHdlZW4gdGhlIHR3byAqLworCQkJCXN0cnVjdCBjb21taXQgKmEsICpiOworCQkJCXN0cnVjdCBjb21taXRfbGlzdCAqZXhjbHVkZTsKKworCQkJCWEgPSAoYV9vYmotPnR5cGUgPT0gT0JKX0NPTU1JVAorCQkJCSAgICAgPyAoc3RydWN0IGNvbW1pdCAqKWFfb2JqCisJCQkJICAgICA6IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKGFfb2JqLT5zaGExKSk7CisJCQkJYiA9IChiX29iai0+dHlwZSA9PSBPQkpfQ09NTUlUCisJCQkJICAgICA/IChzdHJ1Y3QgY29tbWl0ICopYl9vYmoKKwkJCQkgICAgIDogbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UoYl9vYmotPnNoYTEpKTsKKwkJCQlpZiAoIWEgfHwgIWIpCisJCQkJCWdvdG8gbWlzc2luZzsKKwkJCQlleGNsdWRlID0gZ2V0X21lcmdlX2Jhc2VzKGEsIGIpOworCQkJCWFkZF9yZXZfY21kbGluZV9saXN0KHJldnMsIGV4Y2x1ZGUsCisJCQkJCQkgICAgIFJFVl9DTURfTUVSR0VfQkFTRSwKKwkJCQkJCSAgICAgZmxhZ3NfZXhjbHVkZSk7CisJCQkJYWRkX3BlbmRpbmdfY29tbWl0X2xpc3QocmV2cywgZXhjbHVkZSwKKwkJCQkJCQlmbGFnc19leGNsdWRlKTsKKwkJCQlmcmVlX2NvbW1pdF9saXN0KGV4Y2x1ZGUpOworCisJCQkJYV9mbGFncyA9IGZsYWdzIHwgU1lNTUVUUklDX0xFRlQ7CisJCQl9CisKKwkJCWFfb2JqLT5mbGFncyB8PSBhX2ZsYWdzOworCQkJYl9vYmotPmZsYWdzIHw9IGZsYWdzOworCQkJYWRkX3Jldl9jbWRsaW5lKHJldnMsIGFfb2JqLCB0aGlzLAorCQkJCQlSRVZfQ01EX0xFRlQsIGFfZmxhZ3MpOworCQkJYWRkX3Jldl9jbWRsaW5lKHJldnMsIGJfb2JqLCBuZXh0LAorCQkJCQlSRVZfQ01EX1JJR0hULCBmbGFncyk7CisJCQlhZGRfcGVuZGluZ19vYmplY3QocmV2cywgYV9vYmosIHRoaXMpOworCQkJYWRkX3BlbmRpbmdfb2JqZWN0KHJldnMsIGJfb2JqLCBuZXh0KTsKKwkJCXJldHVybiAwOworCQl9CisJCSpkb3Rkb3QgPSAnLic7CisJfQorCWRvdGRvdCA9IHN0cnN0cihhcmcsICJeQCIpOworCWlmIChkb3Rkb3QgJiYgIWRvdGRvdFsyXSkgeworCQkqZG90ZG90ID0gMDsKKwkJaWYgKGFkZF9wYXJlbnRzX29ubHkocmV2cywgYXJnLCBmbGFncykpCisJCQlyZXR1cm4gMDsKKwkJKmRvdGRvdCA9ICdeJzsKKwl9CisJZG90ZG90ID0gc3Ryc3RyKGFyZywgIl4hIik7CisJaWYgKGRvdGRvdCAmJiAhZG90ZG90WzJdKSB7CisJCSpkb3Rkb3QgPSAwOworCQlpZiAoIWFkZF9wYXJlbnRzX29ubHkocmV2cywgYXJnLCBmbGFncyBeIChVTklOVEVSRVNUSU5HIHwgQk9UVE9NKSkpCisJCQkqZG90ZG90ID0gJ14nOworCX0KKworCWxvY2FsX2ZsYWdzID0gMDsKKwlpZiAoKmFyZyA9PSAnXicpIHsKKwkJbG9jYWxfZmxhZ3MgPSBVTklOVEVSRVNUSU5HIHwgQk9UVE9NOworCQlhcmcrKzsKKwl9CisKKwlpZiAocmV2YXJnX29wdCAmIFJFVkFSR19DT01NSVRUSVNIKQorCQlnZXRfc2hhMV9mbGFncyA9IEdFVF9TSEExX0NPTU1JVFRJU0g7CisKKwlpZiAoZ2V0X3NoYTFfd2l0aF9jb250ZXh0KGFyZywgZ2V0X3NoYTFfZmxhZ3MsIHNoYTEsICZvYykpCisJCXJldHVybiByZXZzLT5pZ25vcmVfbWlzc2luZyA/IDAgOiAtMTsKKwlpZiAoIWNhbnRfYmVfZmlsZW5hbWUpCisJCXZlcmlmeV9ub25fZmlsZW5hbWUocmV2cy0+cHJlZml4LCBhcmcpOworCW9iamVjdCA9IGdldF9yZWZlcmVuY2UocmV2cywgYXJnLCBzaGExLCBmbGFncyBeIGxvY2FsX2ZsYWdzKTsKKwlhZGRfcmV2X2NtZGxpbmUocmV2cywgb2JqZWN0LCBhcmdfLCBSRVZfQ01EX1JFViwgZmxhZ3MgXiBsb2NhbF9mbGFncyk7CisJYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfbW9kZShyZXZzLCBvYmplY3QsIGFyZywgb2MubW9kZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjbWRsaW5lX3BhdGhzcGVjIHsKKwlpbnQgYWxsb2M7CisJaW50IG5yOworCWNvbnN0IGNoYXIgKipwYXRoOworfTsKKworc3RhdGljIHZvaWQgYXBwZW5kX3BydW5lX2RhdGEoc3RydWN0IGNtZGxpbmVfcGF0aHNwZWMgKnBydW5lLCBjb25zdCBjaGFyICoqYXYpCit7CisJd2hpbGUgKCphdikgeworCQlBTExPQ19HUk9XKHBydW5lLT5wYXRoLCBwcnVuZS0+bnIgKyAxLCBwcnVuZS0+YWxsb2MpOworCQlwcnVuZS0+cGF0aFtwcnVuZS0+bnIrK10gPSAqKGF2KyspOworCX0KK30KKworc3RhdGljIHZvaWQgcmVhZF9wYXRoc3BlY19mcm9tX3N0ZGluKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJICAgICBzdHJ1Y3QgY21kbGluZV9wYXRoc3BlYyAqcHJ1bmUpCit7CisJd2hpbGUgKHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc2IsIHN0ZGluLCAnXG4nKSAhPSBFT0YpIHsKKwkJaW50IGxlbiA9IHNiLT5sZW47CisJCWlmIChsZW4gJiYgc2ItPmJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQkJc2ItPmJ1ZlstLWxlbl0gPSAnXDAnOworCQlBTExPQ19HUk9XKHBydW5lLT5wYXRoLCBwcnVuZS0+bnIgKyAxLCBwcnVuZS0+YWxsb2MpOworCQlwcnVuZS0+cGF0aFtwcnVuZS0+bnIrK10gPSB4c3RyZHVwKHNiLT5idWYpOworCX0KK30KKworc3RhdGljIHZvaWQgcmVhZF9yZXZpc2lvbnNfZnJvbV9zdGRpbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJICAgICAgc3RydWN0IGNtZGxpbmVfcGF0aHNwZWMgKnBydW5lKQoreworCXN0cnVjdCBzdHJidWYgc2I7CisJaW50IHNlZW5fZGFzaGRhc2ggPSAwOworCWludCBzYXZlX3dhcm5pbmc7CisKKwlzYXZlX3dhcm5pbmcgPSB3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eTsKKwl3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eSA9IDA7CisKKwlzdHJidWZfaW5pdCgmc2IsIDEwMDApOworCXdoaWxlIChzdHJidWZfZ2V0d2hvbGVsaW5lKCZzYiwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQlpbnQgbGVuID0gc2IubGVuOworCQlpZiAobGVuICYmIHNiLmJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQkJc2IuYnVmWy0tbGVuXSA9ICdcMCc7CisJCWlmICghbGVuKQorCQkJYnJlYWs7CisJCWlmIChzYi5idWZbMF0gPT0gJy0nKSB7CisJCQlpZiAobGVuID09IDIgJiYgc2IuYnVmWzFdID09ICctJykgeworCQkJCXNlZW5fZGFzaGRhc2ggPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJZGllKCJvcHRpb25zIG5vdCBzdXBwb3J0ZWQgaW4gLS1zdGRpbiBtb2RlIik7CisJCX0KKwkJaWYgKGhhbmRsZV9yZXZpc2lvbl9hcmcoc2IuYnVmLCByZXZzLCAwLAorCQkJCQlSRVZBUkdfQ0FOTk9UX0JFX0ZJTEVOQU1FKSkKKwkJCWRpZSgiYmFkIHJldmlzaW9uICclcyciLCBzYi5idWYpOworCX0KKwlpZiAoc2Vlbl9kYXNoZGFzaCkKKwkJcmVhZF9wYXRoc3BlY19mcm9tX3N0ZGluKHJldnMsICZzYiwgcHJ1bmUpOworCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl3YXJuX29uX29iamVjdF9yZWZuYW1lX2FtYmlndWl0eSA9IHNhdmVfd2FybmluZzsKK30KKworc3RhdGljIHZvaWQgYWRkX2dyZXAoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpwdG4sIGVudW0gZ3JlcF9wYXRfdG9rZW4gd2hhdCkKK3sKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZyZXZzLT5ncmVwX2ZpbHRlciwgcHRuLCAiY29tbWFuZCBsaW5lIiwgMCwgd2hhdCk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9oZWFkZXJfZ3JlcChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGVudW0gZ3JlcF9oZWFkZXJfZmllbGQgZmllbGQsIGNvbnN0IGNoYXIgKnBhdHRlcm4pCit7CisJYXBwZW5kX2hlYWRlcl9ncmVwX3BhdHRlcm4oJnJldnMtPmdyZXBfZmlsdGVyLCBmaWVsZCwgcGF0dGVybik7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9tZXNzYWdlX2dyZXAoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpwYXR0ZXJuKQoreworCWFkZF9ncmVwKHJldnMsIHBhdHRlcm4sIEdSRVBfUEFUVEVSTl9CT0RZKTsKK30KKworc3RhdGljIGludCBoYW5kbGVfcmV2aXNpb25fb3B0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICAgICAgIGludCAqdW5rYywgY29uc3QgY2hhciAqKnVua3YpCit7CisJY29uc3QgY2hhciAqYXJnID0gYXJndlswXTsKKwljb25zdCBjaGFyICpvcHRhcmc7CisJaW50IGFyZ2NvdW50OworCisJLyogcHNldWRvIHJldmlzaW9uIGFyZ3VtZW50cyAqLworCWlmICghc3RyY21wKGFyZywgIi0tYWxsIikgfHwgIXN0cmNtcChhcmcsICItLWJyYW5jaGVzIikgfHwKKwkgICAgIXN0cmNtcChhcmcsICItLXRhZ3MiKSB8fCAhc3RyY21wKGFyZywgIi0tcmVtb3RlcyIpIHx8CisJICAgICFzdHJjbXAoYXJnLCAiLS1yZWZsb2ciKSB8fCAhc3RyY21wKGFyZywgIi0tbm90IikgfHwKKwkgICAgIXN0cmNtcChhcmcsICItLW5vLXdhbGsiKSB8fCAhc3RyY21wKGFyZywgIi0tZG8td2FsayIpIHx8CisJICAgICFzdHJjbXAoYXJnLCAiLS1iaXNlY3QiKSB8fCBzdGFydHNfd2l0aChhcmcsICItLWdsb2I9IikgfHwKKwkgICAgIXN0cmNtcChhcmcsICItLWluZGV4ZWQtb2JqZWN0cyIpIHx8CisJICAgIHN0YXJ0c193aXRoKGFyZywgIi0tZXhjbHVkZT0iKSB8fAorCSAgICBzdGFydHNfd2l0aChhcmcsICItLWJyYW5jaGVzPSIpIHx8IHN0YXJ0c193aXRoKGFyZywgIi0tdGFncz0iKSB8fAorCSAgICBzdGFydHNfd2l0aChhcmcsICItLXJlbW90ZXM9IikgfHwgc3RhcnRzX3dpdGgoYXJnLCAiLS1uby13YWxrPSIpKQorCXsKKwkJdW5rdlsoKnVua2MpKytdID0gYXJnOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoIm1heC1jb3VudCIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5tYXhfY291bnQgPSBhdG9pKG9wdGFyZyk7CisJCXJldnMtPm5vX3dhbGsgPSAwOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgic2tpcCIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5za2lwX2NvdW50ID0gYXRvaShvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoKmFyZyA9PSAnLScpICYmIGlzZGlnaXQoYXJnWzFdKSkgeworCQkvKiBhY2NlcHQgLTxkaWdpdD4sIGxpa2UgdHJhZGl0aW9uYWwgImhlYWQiICovCisJCWlmIChzdHJ0b2xfaShhcmcgKyAxLCAxMCwgJnJldnMtPm1heF9jb3VudCkgPCAwIHx8CisJCSAgICByZXZzLT5tYXhfY291bnQgPCAwKQorCQkJZGllKCInJXMnOiBub3QgYSBub24tbmVnYXRpdmUgaW50ZWdlciIsIGFyZyArIDEpOworCQlyZXZzLT5ub193YWxrID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLW4iKSkgeworCQlpZiAoYXJnYyA8PSAxKQorCQkJcmV0dXJuIGVycm9yKCItbiByZXF1aXJlcyBhbiBhcmd1bWVudCIpOworCQlyZXZzLT5tYXhfY291bnQgPSBhdG9pKGFyZ3ZbMV0pOworCQlyZXZzLT5ub193YWxrID0gMDsKKwkJcmV0dXJuIDI7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItbiIpKSB7CisJCXJldnMtPm1heF9jb3VudCA9IGF0b2koYXJnICsgMik7CisJCXJldnMtPm5vX3dhbGsgPSAwOworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoIm1heC1hZ2UiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+bWF4X2FnZSA9IGF0b2kob3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoInNpbmNlIiwgYXJndiwgJm9wdGFyZykpKSB7CisJCXJldnMtPm1heF9hZ2UgPSBhcHByb3hpZGF0ZShvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiYWZ0ZXIiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+bWF4X2FnZSA9IGFwcHJveGlkYXRlKG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJtaW4tYWdlIiwgYXJndiwgJm9wdGFyZykpKSB7CisJCXJldnMtPm1pbl9hZ2UgPSBhdG9pKG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJiZWZvcmUiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJcmV2cy0+bWluX2FnZSA9IGFwcHJveGlkYXRlKG9wdGFyZyk7CisJCXJldHVybiBhcmdjb3VudDsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJ1bnRpbCIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlyZXZzLT5taW5fYWdlID0gYXBwcm94aWRhdGUob3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZpcnN0LXBhcmVudCIpKSB7CisJCXJldnMtPmZpcnN0X3BhcmVudF9vbmx5ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1hbmNlc3RyeS1wYXRoIikpIHsKKwkJcmV2cy0+YW5jZXN0cnlfcGF0aCA9IDE7CisJCXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgPSAwOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWciKSB8fCAhc3RyY21wKGFyZywgIi0td2Fsay1yZWZsb2dzIikpIHsKKwkJaW5pdF9yZWZsb2dfd2FsaygmcmV2cy0+cmVmbG9nX2luZm8pOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWRlZmF1bHQiKSkgeworCQlpZiAoYXJnYyA8PSAxKQorCQkJcmV0dXJuIGVycm9yKCJiYWQgLS1kZWZhdWx0IGFyZ3VtZW50Iik7CisJCXJldnMtPmRlZiA9IGFyZ3ZbMV07CisJCXJldHVybiAyOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW1lcmdlIikpIHsKKwkJcmV2cy0+c2hvd19tZXJnZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdG9wby1vcmRlciIpKSB7CisJCXJldnMtPnNvcnRfb3JkZXIgPSBSRVZfU09SVF9JTl9HUkFQSF9PUkRFUjsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2ltcGxpZnktbWVyZ2VzIikpIHsKKwkJcmV2cy0+c2ltcGxpZnlfbWVyZ2VzID0gMTsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJCXJldnMtPnJld3JpdGVfcGFyZW50cyA9IDE7CisJCXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgPSAwOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uIikpIHsKKwkJcmV2cy0+c2ltcGxpZnlfbWVyZ2VzID0gMTsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJCXJldnMtPnJld3JpdGVfcGFyZW50cyA9IDE7CisJCXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgPSAwOworCQlyZXZzLT5zaW1wbGlmeV9ieV9kZWNvcmF0aW9uID0gMTsKKwkJcmV2cy0+bGltaXRlZCA9IDE7CisJCXJldnMtPnBydW5lID0gMTsKKwkJbG9hZF9yZWZfZGVjb3JhdGlvbnMoREVDT1JBVEVfU0hPUlRfUkVGUyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZGF0ZS1vcmRlciIpKSB7CisJCXJldnMtPnNvcnRfb3JkZXIgPSBSRVZfU09SVF9CWV9DT01NSVRfREFURTsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYXV0aG9yLWRhdGUtb3JkZXIiKSkgeworCQlyZXZzLT5zb3J0X29yZGVyID0gUkVWX1NPUlRfQllfQVVUSE9SX0RBVEU7CisJCXJldnMtPnRvcG9fb3JkZXIgPSAxOworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1lYXJseS1vdXRwdXQiKSkgeworCQlpbnQgY291bnQgPSAxMDA7CisJCXN3aXRjaCAoYXJnWzE0XSkgeworCQljYXNlICc9JzoKKwkJCWNvdW50ID0gYXRvaShhcmcrMTUpOworCQkJLyogRmFsbHRocm91Z2ggKi8KKwkJY2FzZSAwOgorCQkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJCSAgICAgICByZXZzLT5lYXJseV9vdXRwdXQgPSBjb3VudDsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXBhcmVudHMiKSkgeworCQlyZXZzLT5yZXdyaXRlX3BhcmVudHMgPSAxOworCQlyZXZzLT5wcmludF9wYXJlbnRzID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1kZW5zZSIpKSB7CisJCXJldnMtPmRlbnNlID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1zcGFyc2UiKSkgeworCQlyZXZzLT5kZW5zZSA9IDA7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1hbGwiKSkgeworCQlyZXZzLT5zaG93X2FsbCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmVtb3ZlLWVtcHR5IikpIHsKKwkJcmV2cy0+cmVtb3ZlX2VtcHR5X3RyZWVzID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1tZXJnZXMiKSkgeworCQlyZXZzLT5taW5fcGFyZW50cyA9IDI7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tbWVyZ2VzIikpIHsKKwkJcmV2cy0+bWF4X3BhcmVudHMgPSAxOworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1taW4tcGFyZW50cz0iKSkgeworCQlyZXZzLT5taW5fcGFyZW50cyA9IGF0b2koYXJnKzE0KTsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tbm8tbWluLXBhcmVudHMiKSkgeworCQlyZXZzLT5taW5fcGFyZW50cyA9IDA7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItLW1heC1wYXJlbnRzPSIpKSB7CisJCXJldnMtPm1heF9wYXJlbnRzID0gYXRvaShhcmcrMTQpOworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1uby1tYXgtcGFyZW50cyIpKSB7CisJCXJldnMtPm1heF9wYXJlbnRzID0gLTE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYm91bmRhcnkiKSkgeworCQlyZXZzLT5ib3VuZGFyeSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbGVmdC1yaWdodCIpKSB7CisJCXJldnMtPmxlZnRfcmlnaHQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWxlZnQtb25seSIpKSB7CisJCWlmIChyZXZzLT5yaWdodF9vbmx5KQorCQkJZGllKCItLWxlZnQtb25seSBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLXJpZ2h0LW9ubHkiCisJCQkgICAgIiBvciAtLWNoZXJyeSIpOworCQlyZXZzLT5sZWZ0X29ubHkgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJpZ2h0LW9ubHkiKSkgeworCQlpZiAocmV2cy0+bGVmdF9vbmx5KQorCQkJZGllKCItLXJpZ2h0LW9ubHkgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1sZWZ0LW9ubHkiKTsKKwkJcmV2cy0+cmlnaHRfb25seSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tY2hlcnJ5IikpIHsKKwkJaWYgKHJldnMtPmxlZnRfb25seSkKKwkJCWRpZSgiLS1jaGVycnkgaXMgaW5jb21wYXRpYmxlIHdpdGggLS1sZWZ0LW9ubHkiKTsKKwkJcmV2cy0+Y2hlcnJ5X21hcmsgPSAxOworCQlyZXZzLT5yaWdodF9vbmx5ID0gMTsKKwkJcmV2cy0+bWF4X3BhcmVudHMgPSAxOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jb3VudCIpKSB7CisJCXJldnMtPmNvdW50ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jaGVycnktbWFyayIpKSB7CisJCWlmIChyZXZzLT5jaGVycnlfcGljaykKKwkJCWRpZSgiLS1jaGVycnktbWFyayBpcyBpbmNvbXBhdGlibGUgd2l0aCAtLWNoZXJyeS1waWNrIik7CisJCXJldnMtPmNoZXJyeV9tYXJrID0gMTsKKwkJcmV2cy0+bGltaXRlZCA9IDE7IC8qIG5lZWRzIGxpbWl0X2xpc3QoKSAqLworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNoZXJyeS1waWNrIikpIHsKKwkJaWYgKHJldnMtPmNoZXJyeV9tYXJrKQorCQkJZGllKCItLWNoZXJyeS1waWNrIGlzIGluY29tcGF0aWJsZSB3aXRoIC0tY2hlcnJ5LW1hcmsiKTsKKwkJcmV2cy0+Y2hlcnJ5X3BpY2sgPSAxOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1vYmplY3RzIikpIHsKKwkJcmV2cy0+dGFnX29iamVjdHMgPSAxOworCQlyZXZzLT50cmVlX29iamVjdHMgPSAxOworCQlyZXZzLT5ibG9iX29iamVjdHMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW9iamVjdHMtZWRnZSIpKSB7CisJCXJldnMtPnRhZ19vYmplY3RzID0gMTsKKwkJcmV2cy0+dHJlZV9vYmplY3RzID0gMTsKKwkJcmV2cy0+YmxvYl9vYmplY3RzID0gMTsKKwkJcmV2cy0+ZWRnZV9oaW50ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1vYmplY3RzLWVkZ2UtYWdncmVzc2l2ZSIpKSB7CisJCXJldnMtPnRhZ19vYmplY3RzID0gMTsKKwkJcmV2cy0+dHJlZV9vYmplY3RzID0gMTsKKwkJcmV2cy0+YmxvYl9vYmplY3RzID0gMTsKKwkJcmV2cy0+ZWRnZV9oaW50ID0gMTsKKwkJcmV2cy0+ZWRnZV9oaW50X2FnZ3Jlc3NpdmUgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXZlcmlmeS1vYmplY3RzIikpIHsKKwkJcmV2cy0+dGFnX29iamVjdHMgPSAxOworCQlyZXZzLT50cmVlX29iamVjdHMgPSAxOworCQlyZXZzLT5ibG9iX29iamVjdHMgPSAxOworCQlyZXZzLT52ZXJpZnlfb2JqZWN0cyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tdW5wYWNrZWQiKSkgeworCQlyZXZzLT51bnBhY2tlZCA9IDE7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItLXVucGFja2VkPSIpKSB7CisJCWRpZSgiLS11bnBhY2tlZD08cGFja2ZpbGU+IG5vIGxvbmdlciBzdXBwb3J0ZWQuIik7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi1yIikpIHsKKwkJcmV2cy0+ZGlmZiA9IDE7CisJCURJRkZfT1BUX1NFVCgmcmV2cy0+ZGlmZm9wdCwgUkVDVVJTSVZFKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXQiKSkgeworCQlyZXZzLT5kaWZmID0gMTsKKwkJRElGRl9PUFRfU0VUKCZyZXZzLT5kaWZmb3B0LCBSRUNVUlNJVkUpOworCQlESUZGX09QVF9TRVQoJnJldnMtPmRpZmZvcHQsIFRSRUVfSU5fUkVDVVJTSVZFKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLW0iKSkgeworCQlyZXZzLT5pZ25vcmVfbWVyZ2VzID0gMDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLWMiKSkgeworCQlyZXZzLT5kaWZmID0gMTsKKwkJcmV2cy0+ZGVuc2VfY29tYmluZWRfbWVyZ2VzID0gMDsKKwkJcmV2cy0+Y29tYmluZV9tZXJnZXMgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWNjIikpIHsKKwkJcmV2cy0+ZGlmZiA9IDE7CisJCXJldnMtPmRlbnNlX2NvbWJpbmVkX21lcmdlcyA9IDE7CisJCXJldnMtPmNvbWJpbmVfbWVyZ2VzID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLXYiKSkgeworCQlyZXZzLT52ZXJib3NlX2hlYWRlciA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcHJldHR5IikpIHsKKwkJcmV2cy0+dmVyYm9zZV9oZWFkZXIgPSAxOworCQlyZXZzLT5wcmV0dHlfZ2l2ZW4gPSAxOworCQlnZXRfY29tbWl0X2Zvcm1hdChOVUxMLCByZXZzKTsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tcHJldHR5PSIpIHx8IHN0YXJ0c193aXRoKGFyZywgIi0tZm9ybWF0PSIpKSB7CisJCS8qCisJCSAqIERldGFjaGVkIGZvcm0gKCItLXByZXR0eSBYIiBhcyBvcHBvc2VkIHRvICItLXByZXR0eT1YIikKKwkJICogbm90IGFsbG93ZWQsIHNpbmNlIHRoZSBhcmd1bWVudCBpcyBvcHRpb25hbC4KKwkJICovCisJCXJldnMtPnZlcmJvc2VfaGVhZGVyID0gMTsKKwkJcmV2cy0+cHJldHR5X2dpdmVuID0gMTsKKwkJZ2V0X2NvbW1pdF9mb3JtYXQoYXJnKzksIHJldnMpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXNob3ctbm90ZXMiKSB8fCAhc3RyY21wKGFyZywgIi0tbm90ZXMiKSkgeworCQlyZXZzLT5zaG93X25vdGVzID0gMTsKKwkJcmV2cy0+c2hvd19ub3Rlc19naXZlbiA9IDE7CisJCXJldnMtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1zaWduYXR1cmUiKSkgeworCQlyZXZzLT5zaG93X3NpZ25hdHVyZSA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tc2hvdy1saW5lYXItYnJlYWsiKSB8fAorCQkgICBzdGFydHNfd2l0aChhcmcsICItLXNob3ctbGluZWFyLWJyZWFrPSIpKSB7CisJCWlmIChzdGFydHNfd2l0aChhcmcsICItLXNob3ctbGluZWFyLWJyZWFrPSIpKQorCQkJcmV2cy0+YnJlYWtfYmFyID0geHN0cmR1cChhcmcgKyAyMCk7CisJCWVsc2UKKwkJCXJldnMtPmJyZWFrX2JhciA9ICIgICAgICAgICAgICAgICAgICAgIC4uLi4uLi4uLi4iOworCQlyZXZzLT50cmFja19saW5lYXIgPSAxOworCQlyZXZzLT50cmFja19maXJzdF90aW1lID0gMTsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tc2hvdy1ub3Rlcz0iKSB8fAorCQkgICBzdGFydHNfd2l0aChhcmcsICItLW5vdGVzPSIpKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXJldnMtPnNob3dfbm90ZXMgPSAxOworCQlyZXZzLT5zaG93X25vdGVzX2dpdmVuID0gMTsKKwkJaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tc2hvdy1ub3RlcyIpKSB7CisJCQlpZiAocmV2cy0+bm90ZXNfb3B0LnVzZV9kZWZhdWx0X25vdGVzIDwgMCkKKwkJCQlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAxOworCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBhcmcrMTMpOworCQl9CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgYXJnKzgpOworCQlleHBhbmRfbm90ZXNfcmVmKCZidWYpOworCQlzdHJpbmdfbGlzdF9hcHBlbmQoJnJldnMtPm5vdGVzX29wdC5leHRyYV9ub3Rlc19yZWZzLAorCQkJCSAgIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLW5vdGVzIikpIHsKKwkJcmV2cy0+c2hvd19ub3RlcyA9IDA7CisJCXJldnMtPnNob3dfbm90ZXNfZ2l2ZW4gPSAxOworCQlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAtMTsKKwkJLyogd2UgaGF2ZSBiZWVuIHN0cmR1cCdpbmcgb3Vyc2VsdmVzLCBzbyB0cmljaworCQkgKiBzdHJpbmdfbGlzdCBpbnRvIGZyZWUoKWluZyBzdHJpbmdzICovCisJCXJldnMtPm5vdGVzX29wdC5leHRyYV9ub3Rlc19yZWZzLnN0cmR1cF9zdHJpbmdzID0gMTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJnJldnMtPm5vdGVzX29wdC5leHRyYV9ub3Rlc19yZWZzLCAwKTsKKwkJcmV2cy0+bm90ZXNfb3B0LmV4dHJhX25vdGVzX3JlZnMuc3RyZHVwX3N0cmluZ3MgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXN0YW5kYXJkLW5vdGVzIikpIHsKKwkJcmV2cy0+c2hvd19ub3Rlc19naXZlbiA9IDE7CisJCXJldnMtPm5vdGVzX29wdC51c2VfZGVmYXVsdF9ub3RlcyA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tc3RhbmRhcmQtbm90ZXMiKSkgeworCQlyZXZzLT5ub3Rlc19vcHQudXNlX2RlZmF1bHRfbm90ZXMgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW9uZWxpbmUiKSkgeworCQlyZXZzLT52ZXJib3NlX2hlYWRlciA9IDE7CisJCWdldF9jb21taXRfZm9ybWF0KCJvbmVsaW5lIiwgcmV2cyk7CisJCXJldnMtPnByZXR0eV9naXZlbiA9IDE7CisJCXJldnMtPmFiYnJldl9jb21taXQgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWdyYXBoIikpIHsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJCXJldnMtPnJld3JpdGVfcGFyZW50cyA9IDE7CisJCXJldnMtPmdyYXBoID0gZ3JhcGhfaW5pdChyZXZzKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yb290IikpIHsKKwkJcmV2cy0+c2hvd19yb290X2RpZmYgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLWNvbW1pdC1pZCIpKSB7CisJCXJldnMtPm5vX2NvbW1pdF9pZCA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYWx3YXlzIikpIHsKKwkJcmV2cy0+YWx3YXlzX3Nob3dfaGVhZGVyID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1uby1hYmJyZXYiKSkgeworCQlyZXZzLT5hYmJyZXYgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFiYnJldiIpKSB7CisJCXJldnMtPmFiYnJldiA9IERFRkFVTFRfQUJCUkVWOworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1hYmJyZXY9IikpIHsKKwkJcmV2cy0+YWJicmV2ID0gc3RydG91bChhcmcgKyA5LCBOVUxMLCAxMCk7CisJCWlmIChyZXZzLT5hYmJyZXYgPCBNSU5JTVVNX0FCQlJFVikKKwkJCXJldnMtPmFiYnJldiA9IE1JTklNVU1fQUJCUkVWOworCQllbHNlIGlmIChyZXZzLT5hYmJyZXYgPiA0MCkKKwkJCXJldnMtPmFiYnJldiA9IDQwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWFiYnJldi1jb21taXQiKSkgeworCQlyZXZzLT5hYmJyZXZfY29tbWl0ID0gMTsKKwkJcmV2cy0+YWJicmV2X2NvbW1pdF9naXZlbiA9IDE7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbm8tYWJicmV2LWNvbW1pdCIpKSB7CisJCXJldnMtPmFiYnJldl9jb21taXQgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZ1bGwtZGlmZiIpKSB7CisJCXJldnMtPmRpZmYgPSAxOworCQlyZXZzLT5mdWxsX2RpZmYgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWZ1bGwtaGlzdG9yeSIpKSB7CisJCXJldnMtPnNpbXBsaWZ5X2hpc3RvcnkgPSAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlbGF0aXZlLWRhdGUiKSkgeworCQlyZXZzLT5kYXRlX21vZGUudHlwZSA9IERBVEVfUkVMQVRJVkU7CisJCXJldnMtPmRhdGVfbW9kZV9leHBsaWNpdCA9IDE7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiZGF0ZSIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlwYXJzZV9kYXRlX2Zvcm1hdChvcHRhcmcsICZyZXZzLT5kYXRlX21vZGUpOworCQlyZXZzLT5kYXRlX21vZGVfZXhwbGljaXQgPSAxOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tbG9nLXNpemUiKSkgeworCQlyZXZzLT5zaG93X2xvZ19zaXplID0gMTsKKwl9CisJLyoKKwkgKiBHcmVwcGluZyB0aGUgY29tbWl0IGxvZworCSAqLworCWVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJhdXRob3IiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJYWRkX2hlYWRlcl9ncmVwKHJldnMsIEdSRVBfSEVBREVSX0FVVEhPUiwgb3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoImNvbW1pdHRlciIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlhZGRfaGVhZGVyX2dyZXAocmV2cywgR1JFUF9IRUFERVJfQ09NTUlUVEVSLCBvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICgoYXJnY291bnQgPSBwYXJzZV9sb25nX29wdCgiZ3JlcC1yZWZsb2ciLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJYWRkX2hlYWRlcl9ncmVwKHJldnMsIEdSRVBfSEVBREVSX1JFRkxPRywgb3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoImdyZXAiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJYWRkX21lc3NhZ2VfZ3JlcChyZXZzLCBvcHRhcmcpOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZ3JlcC1kZWJ1ZyIpKSB7CisJCXJldnMtPmdyZXBfZmlsdGVyLmRlYnVnID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1iYXNpYy1yZWdleHAiKSkgeworCQlncmVwX3NldF9wYXR0ZXJuX3R5cGVfb3B0aW9uKEdSRVBfUEFUVEVSTl9UWVBFX0JSRSwgJnJldnMtPmdyZXBfZmlsdGVyKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1leHRlbmRlZC1yZWdleHAiKSB8fCAhc3RyY21wKGFyZywgIi1FIikpIHsKKwkJZ3JlcF9zZXRfcGF0dGVybl90eXBlX29wdGlvbihHUkVQX1BBVFRFUk5fVFlQRV9FUkUsICZyZXZzLT5ncmVwX2ZpbHRlcik7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmVnZXhwLWlnbm9yZS1jYXNlIikgfHwgIXN0cmNtcChhcmcsICItaSIpKSB7CisJCXJldnMtPmdyZXBfZmlsdGVyLnJlZ2ZsYWdzIHw9IFJFR19JQ0FTRTsKKwkJRElGRl9PUFRfU0VUKCZyZXZzLT5kaWZmb3B0LCBQSUNLQVhFX0lHTk9SRV9DQVNFKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1maXhlZC1zdHJpbmdzIikgfHwgIXN0cmNtcChhcmcsICItRiIpKSB7CisJCWdyZXBfc2V0X3BhdHRlcm5fdHlwZV9vcHRpb24oR1JFUF9QQVRURVJOX1RZUEVfRklYRUQsICZyZXZzLT5ncmVwX2ZpbHRlcik7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcGVybC1yZWdleHAiKSkgeworCQlncmVwX3NldF9wYXR0ZXJuX3R5cGVfb3B0aW9uKEdSRVBfUEFUVEVSTl9UWVBFX1BDUkUsICZyZXZzLT5ncmVwX2ZpbHRlcik7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYWxsLW1hdGNoIikpIHsKKwkJcmV2cy0+Z3JlcF9maWx0ZXIuYWxsX21hdGNoID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1pbnZlcnQtZ3JlcCIpKSB7CisJCXJldnMtPmludmVydF9ncmVwID0gMTsKKwl9IGVsc2UgaWYgKChhcmdjb3VudCA9IHBhcnNlX2xvbmdfb3B0KCJlbmNvZGluZyIsIGFyZ3YsICZvcHRhcmcpKSkgeworCQlpZiAoc3RyY21wKG9wdGFyZywgIm5vbmUiKSkKKwkJCWdpdF9sb2dfb3V0cHV0X2VuY29kaW5nID0geHN0cmR1cChvcHRhcmcpOworCQllbHNlCisJCQlnaXRfbG9nX291dHB1dF9lbmNvZGluZyA9ICIiOworCQlyZXR1cm4gYXJnY291bnQ7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tcmV2ZXJzZSIpKSB7CisJCXJldnMtPnJldmVyc2UgXj0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1jaGlsZHJlbiIpKSB7CisJCXJldnMtPmNoaWxkcmVuLm5hbWUgPSAiY2hpbGRyZW4iOworCQlyZXZzLT5saW1pdGVkID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1pZ25vcmUtbWlzc2luZyIpKSB7CisJCXJldnMtPmlnbm9yZV9taXNzaW5nID0gMTsKKwl9IGVsc2UgeworCQlpbnQgb3B0cyA9IGRpZmZfb3B0X3BhcnNlKCZyZXZzLT5kaWZmb3B0LCBhcmd2LCBhcmdjKTsKKwkJaWYgKCFvcHRzKQorCQkJdW5rdlsoKnVua2MpKytdID0gYXJnOworCQlyZXR1cm4gb3B0czsKKwl9CisJaWYgKHJldnMtPmdyYXBoICYmIHJldnMtPnRyYWNrX2xpbmVhcikKKwkJZGllKCItLXNob3ctbGluZWFyLWJyZWFrIGFuZCAtLWdyYXBoIGFyZSBpbmNvbXBhdGlibGUiKTsKKworCXJldHVybiAxOworfQorCit2b2lkIHBhcnNlX3JldmlzaW9uX29wdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCWNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdGlvbnMsCisJCQljb25zdCBjaGFyICogY29uc3QgdXNhZ2VzdHJbXSkKK3sKKwlpbnQgbiA9IGhhbmRsZV9yZXZpc2lvbl9vcHQocmV2cywgY3R4LT5hcmdjLCBjdHgtPmFyZ3YsCisJCQkJICAgICZjdHgtPmNwaWR4LCBjdHgtPm91dCk7CisJaWYgKG4gPD0gMCkgeworCQllcnJvcigidW5rbm93biBvcHRpb24gYCVzJyIsIGN0eC0+YXJndlswXSk7CisJCXVzYWdlX3dpdGhfb3B0aW9ucyh1c2FnZXN0ciwgb3B0aW9ucyk7CisJfQorCWN0eC0+YXJndiArPSBuOworCWN0eC0+YXJnYyAtPSBuOworfQorCitzdGF0aWMgaW50IGZvcl9lYWNoX2Jpc2VjdF9yZWYoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSwgY29uc3QgY2hhciAqdGVybSkgeworCXN0cnVjdCBzdHJidWYgYmlzZWN0X3JlZnMgPSBTVFJCVUZfSU5JVDsKKwlpbnQgc3RhdHVzOworCXN0cmJ1Zl9hZGRmKCZiaXNlY3RfcmVmcywgInJlZnMvYmlzZWN0LyVzIiwgdGVybSk7CisJc3RhdHVzID0gZm9yX2VhY2hfcmVmX2luX3N1Ym1vZHVsZShzdWJtb2R1bGUsIGJpc2VjdF9yZWZzLmJ1ZiwgZm4sIGNiX2RhdGEpOworCXN0cmJ1Zl9yZWxlYXNlKCZiaXNlY3RfcmVmcyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBmb3JfZWFjaF9iYWRfYmlzZWN0X3JlZihjb25zdCBjaGFyICpzdWJtb2R1bGUsIGVhY2hfcmVmX2ZuIGZuLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiBmb3JfZWFjaF9iaXNlY3RfcmVmKHN1Ym1vZHVsZSwgZm4sIGNiX2RhdGEsIHRlcm1fYmFkKTsKK30KKworc3RhdGljIGludCBmb3JfZWFjaF9nb29kX2Jpc2VjdF9yZWYoY29uc3QgY2hhciAqc3VibW9kdWxlLCBlYWNoX3JlZl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwlyZXR1cm4gZm9yX2VhY2hfYmlzZWN0X3JlZihzdWJtb2R1bGUsIGZuLCBjYl9kYXRhLCB0ZXJtX2dvb2QpOworfQorCitzdGF0aWMgaW50IGhhbmRsZV9yZXZpc2lvbl9wc2V1ZG9fb3B0KGNvbnN0IGNoYXIgKnN1Ym1vZHVsZSwKKwkJCQlzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkJaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBpbnQgKmZsYWdzKQoreworCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbMF07CisJY29uc3QgY2hhciAqb3B0YXJnOworCWludCBhcmdjb3VudDsKKworCS8qCisJICogTk9URSEKKwkgKgorCSAqIENvbW1hbmRzIGxpa2UgImdpdCBzaG9ydGxvZyIgd2lsbCBub3QgYWNjZXB0IHRoZSBvcHRpb25zIGJlbG93CisJICogdW5sZXNzIHBhcnNlX3JldmlzaW9uX29wdCBxdWV1ZXMgdGhlbSAoYXMgb3Bwb3NlZCB0byBlcnJvcmluZworCSAqIG91dCkuCisJICoKKwkgKiBXaGVuIGltcGxlbWVudGluZyB5b3VyIG5ldyBwc2V1ZG8tb3B0aW9uLCByZW1lbWJlciB0bworCSAqIHJlZ2lzdGVyIGl0IGluIHRoZSBsaXN0IGF0IHRoZSB0b3Agb2YgaGFuZGxlX3JldmlzaW9uX29wdC4KKwkgKi8KKwlpZiAoIXN0cmNtcChhcmcsICItLWFsbCIpKSB7CisJCWhhbmRsZV9yZWZzKHN1Ym1vZHVsZSwgcmV2cywgKmZsYWdzLCBmb3JfZWFjaF9yZWZfc3VibW9kdWxlKTsKKwkJaGFuZGxlX3JlZnMoc3VibW9kdWxlLCByZXZzLCAqZmxhZ3MsIGhlYWRfcmVmX3N1Ym1vZHVsZSk7CisJCWNsZWFyX3JlZl9leGNsdXNpb24oJnJldnMtPnJlZl9leGNsdWRlcyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tYnJhbmNoZXMiKSkgeworCQloYW5kbGVfcmVmcyhzdWJtb2R1bGUsIHJldnMsICpmbGFncywgZm9yX2VhY2hfYnJhbmNoX3JlZl9zdWJtb2R1bGUpOworCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZXZzLT5yZWZfZXhjbHVkZXMpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLWJpc2VjdCIpKSB7CisJCXJlYWRfYmlzZWN0X3Rlcm1zKCZ0ZXJtX2JhZCwgJnRlcm1fZ29vZCk7CisJCWhhbmRsZV9yZWZzKHN1Ym1vZHVsZSwgcmV2cywgKmZsYWdzLCBmb3JfZWFjaF9iYWRfYmlzZWN0X3JlZik7CisJCWhhbmRsZV9yZWZzKHN1Ym1vZHVsZSwgcmV2cywgKmZsYWdzIF4gKFVOSU5URVJFU1RJTkcgfCBCT1RUT00pLCBmb3JfZWFjaF9nb29kX2Jpc2VjdF9yZWYpOworCQlyZXZzLT5iaXNlY3QgPSAxOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXRhZ3MiKSkgeworCQloYW5kbGVfcmVmcyhzdWJtb2R1bGUsIHJldnMsICpmbGFncywgZm9yX2VhY2hfdGFnX3JlZl9zdWJtb2R1bGUpOworCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZXZzLT5yZWZfZXhjbHVkZXMpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLXJlbW90ZXMiKSkgeworCQloYW5kbGVfcmVmcyhzdWJtb2R1bGUsIHJldnMsICpmbGFncywgZm9yX2VhY2hfcmVtb3RlX3JlZl9zdWJtb2R1bGUpOworCQljbGVhcl9yZWZfZXhjbHVzaW9uKCZyZXZzLT5yZWZfZXhjbHVkZXMpOworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoImdsb2IiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJc3RydWN0IGFsbF9yZWZzX2NiIGNiOworCQlpbml0X2FsbF9yZWZzX2NiKCZjYiwgcmV2cywgKmZsYWdzKTsKKwkJZm9yX2VhY2hfZ2xvYl9yZWYoaGFuZGxlX29uZV9yZWYsIG9wdGFyZywgJmNiKTsKKwkJY2xlYXJfcmVmX2V4Y2x1c2lvbigmcmV2cy0+cmVmX2V4Y2x1ZGVzKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoKGFyZ2NvdW50ID0gcGFyc2VfbG9uZ19vcHQoImV4Y2x1ZGUiLCBhcmd2LCAmb3B0YXJnKSkpIHsKKwkJYWRkX3JlZl9leGNsdXNpb24oJnJldnMtPnJlZl9leGNsdWRlcywgb3B0YXJnKTsKKwkJcmV0dXJuIGFyZ2NvdW50OworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYXJnLCAiLS1icmFuY2hlcz0iKSkgeworCQlzdHJ1Y3QgYWxsX3JlZnNfY2IgY2I7CisJCWluaXRfYWxsX3JlZnNfY2IoJmNiLCByZXZzLCAqZmxhZ3MpOworCQlmb3JfZWFjaF9nbG9iX3JlZl9pbihoYW5kbGVfb25lX3JlZiwgYXJnICsgMTEsICJyZWZzL2hlYWRzLyIsICZjYik7CisJCWNsZWFyX3JlZl9leGNsdXNpb24oJnJldnMtPnJlZl9leGNsdWRlcyk7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aChhcmcsICItLXRhZ3M9IikpIHsKKwkJc3RydWN0IGFsbF9yZWZzX2NiIGNiOworCQlpbml0X2FsbF9yZWZzX2NiKCZjYiwgcmV2cywgKmZsYWdzKTsKKwkJZm9yX2VhY2hfZ2xvYl9yZWZfaW4oaGFuZGxlX29uZV9yZWYsIGFyZyArIDcsICJyZWZzL3RhZ3MvIiwgJmNiKTsKKwkJY2xlYXJfcmVmX2V4Y2x1c2lvbigmcmV2cy0+cmVmX2V4Y2x1ZGVzKTsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tcmVtb3Rlcz0iKSkgeworCQlzdHJ1Y3QgYWxsX3JlZnNfY2IgY2I7CisJCWluaXRfYWxsX3JlZnNfY2IoJmNiLCByZXZzLCAqZmxhZ3MpOworCQlmb3JfZWFjaF9nbG9iX3JlZl9pbihoYW5kbGVfb25lX3JlZiwgYXJnICsgMTAsICJyZWZzL3JlbW90ZXMvIiwgJmNiKTsKKwkJY2xlYXJfcmVmX2V4Y2x1c2lvbigmcmV2cy0+cmVmX2V4Y2x1ZGVzKTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiLS1yZWZsb2ciKSkgeworCQlhZGRfcmVmbG9nc190b19wZW5kaW5nKHJldnMsICpmbGFncyk7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0taW5kZXhlZC1vYmplY3RzIikpIHsKKwkJYWRkX2luZGV4X29iamVjdHNfdG9fcGVuZGluZyhyZXZzLCAqZmxhZ3MpOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vdCIpKSB7CisJCSpmbGFncyBePSBVTklOVEVSRVNUSU5HIHwgQk9UVE9NOworCX0gZWxzZSBpZiAoIXN0cmNtcChhcmcsICItLW5vLXdhbGsiKSkgeworCQlyZXZzLT5ub193YWxrID0gUkVWSVNJT05fV0FMS19OT19XQUxLX1NPUlRFRDsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tbm8td2Fsaz0iKSkgeworCQkvKgorCQkgKiBEZXRhY2hlZCBmb3JtICgiLS1uby13YWxrIFgiIGFzIG9wcG9zZWQgdG8gIi0tbm8td2Fsaz1YIikKKwkJICogbm90IGFsbG93ZWQsIHNpbmNlIHRoZSBhcmd1bWVudCBpcyBvcHRpb25hbC4KKwkJICovCisJCWlmICghc3RyY21wKGFyZyArIDEwLCAic29ydGVkIikpCisJCQlyZXZzLT5ub193YWxrID0gUkVWSVNJT05fV0FMS19OT19XQUxLX1NPUlRFRDsKKwkJZWxzZSBpZiAoIXN0cmNtcChhcmcgKyAxMCwgInVuc29ydGVkIikpCisJCQlyZXZzLT5ub193YWxrID0gUkVWSVNJT05fV0FMS19OT19XQUxLX1VOU09SVEVEOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3IoImludmFsaWQgYXJndW1lbnQgdG8gLS1uby13YWxrIik7CisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIi0tZG8td2FsayIpKSB7CisJCXJldnMtPm5vX3dhbGsgPSAwOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBOT1JFVFVSTiBkaWFnbm9zZV9taXNzaW5nX2RlZmF1bHQoY29uc3QgY2hhciAqZGVmKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IGZsYWdzOworCWNvbnN0IGNoYXIgKnJlZm5hbWU7CisKKwlyZWZuYW1lID0gcmVzb2x2ZV9yZWZfdW5zYWZlKGRlZiwgMCwgc2hhMSwgJmZsYWdzKTsKKwlpZiAoIXJlZm5hbWUgfHwgIShmbGFncyAmIFJFRl9JU1NZTVJFRikgfHwgKGZsYWdzICYgUkVGX0lTQlJPS0VOKSkKKwkJZGllKF8oInlvdXIgY3VycmVudCBicmFuY2ggYXBwZWFycyB0byBiZSBicm9rZW4iKSk7CisKKwlza2lwX3ByZWZpeChyZWZuYW1lLCAicmVmcy9oZWFkcy8iLCAmcmVmbmFtZSk7CisJZGllKF8oInlvdXIgY3VycmVudCBicmFuY2ggJyVzJyBkb2VzIG5vdCBoYXZlIGFueSBjb21taXRzIHlldCIpLAorCSAgICByZWZuYW1lKTsKK30KKworLyoKKyAqIFBhcnNlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBmaWxsaW5nIGluIHRoZSAicmV2X2luZm8iIHN0cnVjdHVyZSwKKyAqIGFuZCByZW1vdmluZyB0aGUgdXNlZCBhcmd1bWVudHMgZnJvbSB0aGUgYXJndW1lbnQgbGlzdC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGxlZnQgdGhhdCB3ZXJlbid0IHJlY29nbml6ZWQKKyAqICh3aGljaCBhcmUgYWxzbyBtb3ZlZCB0byB0aGUgaGVhZCBvZiB0aGUgYXJndW1lbnQgbGlzdCkKKyAqLworaW50IHNldHVwX3JldmlzaW9ucyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqb3B0KQoreworCWludCBpLCBmbGFncywgbGVmdCwgc2Vlbl9kYXNoZGFzaCwgcmVhZF9mcm9tX3N0ZGluLCBnb3RfcmV2X2FyZyA9IDAsIHJldmFyZ19vcHQ7CisJc3RydWN0IGNtZGxpbmVfcGF0aHNwZWMgcHJ1bmVfZGF0YTsKKwljb25zdCBjaGFyICpzdWJtb2R1bGUgPSBOVUxMOworCisJbWVtc2V0KCZwcnVuZV9kYXRhLCAwLCBzaXplb2YocHJ1bmVfZGF0YSkpOworCWlmIChvcHQpCisJCXN1Ym1vZHVsZSA9IG9wdC0+c3VibW9kdWxlOworCisJLyogRmlyc3QsIHNlYXJjaCBmb3IgIi0tIiAqLworCWlmIChvcHQgJiYgb3B0LT5hc3N1bWVfZGFzaGRhc2gpIHsKKwkJc2Vlbl9kYXNoZGFzaCA9IDE7CisJfSBlbHNlIHsKKwkJc2Vlbl9kYXNoZGFzaCA9IDA7CisJCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJCWNvbnN0IGNoYXIgKmFyZyA9IGFyZ3ZbaV07CisJCQlpZiAoc3RyY21wKGFyZywgIi0tIikpCisJCQkJY29udGludWU7CisJCQlhcmd2W2ldID0gTlVMTDsKKwkJCWFyZ2MgPSBpOworCQkJaWYgKGFyZ3ZbaSArIDFdKQorCQkJCWFwcGVuZF9wcnVuZV9kYXRhKCZwcnVuZV9kYXRhLCBhcmd2ICsgaSArIDEpOworCQkJc2Vlbl9kYXNoZGFzaCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFNlY29uZCwgZGVhbCB3aXRoIGFyZ3VtZW50cyBhbmQgb3B0aW9ucyAqLworCWZsYWdzID0gMDsKKwlyZXZhcmdfb3B0ID0gb3B0ID8gb3B0LT5yZXZhcmdfb3B0IDogMDsKKwlpZiAoc2Vlbl9kYXNoZGFzaCkKKwkJcmV2YXJnX29wdCB8PSBSRVZBUkdfQ0FOTk9UX0JFX0ZJTEVOQU1FOworCXJlYWRfZnJvbV9zdGRpbiA9IDA7CisJZm9yIChsZWZ0ID0gaSA9IDE7IGkgPCBhcmdjOyBpKyspIHsKKwkJY29uc3QgY2hhciAqYXJnID0gYXJndltpXTsKKwkJaWYgKCphcmcgPT0gJy0nKSB7CisJCQlpbnQgb3B0czsKKworCQkJb3B0cyA9IGhhbmRsZV9yZXZpc2lvbl9wc2V1ZG9fb3B0KHN1Ym1vZHVsZSwKKwkJCQkJCXJldnMsIGFyZ2MgLSBpLCBhcmd2ICsgaSwKKwkJCQkJCSZmbGFncyk7CisJCQlpZiAob3B0cyA+IDApIHsKKwkJCQlpICs9IG9wdHMgLSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoIXN0cmNtcChhcmcsICItLXN0ZGluIikpIHsKKwkJCQlpZiAocmV2cy0+ZGlzYWJsZV9zdGRpbikgeworCQkJCQlhcmd2W2xlZnQrK10gPSBhcmc7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAocmVhZF9mcm9tX3N0ZGluKyspCisJCQkJCWRpZSgiLS1zdGRpbiBnaXZlbiB0d2ljZT8iKTsKKwkJCQlyZWFkX3JldmlzaW9uc19mcm9tX3N0ZGluKHJldnMsICZwcnVuZV9kYXRhKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJb3B0cyA9IGhhbmRsZV9yZXZpc2lvbl9vcHQocmV2cywgYXJnYyAtIGksIGFyZ3YgKyBpLCAmbGVmdCwgYXJndik7CisJCQlpZiAob3B0cyA+IDApIHsKKwkJCQlpICs9IG9wdHMgLSAxOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG9wdHMgPCAwKQorCQkJCWV4aXQoMTI4KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKworCQlpZiAoaGFuZGxlX3JldmlzaW9uX2FyZyhhcmcsIHJldnMsIGZsYWdzLCByZXZhcmdfb3B0KSkgeworCQkJaW50IGo7CisJCQlpZiAoc2Vlbl9kYXNoZGFzaCB8fCAqYXJnID09ICdeJykKKwkJCQlkaWUoImJhZCByZXZpc2lvbiAnJXMnIiwgYXJnKTsKKworCQkJLyogSWYgd2UgZGlkbid0IGhhdmUgYSAiLS0iOgorCQkJICogKDEpIGFsbCBmaWxlbmFtZXMgbXVzdCBleGlzdDsKKwkJCSAqICgyKSBhbGwgcmV2LWFyZ3MgbXVzdCBub3QgYmUgaW50ZXJwcmV0YWJsZQorCQkJICogICAgIGFzIGEgdmFsaWQgZmlsZW5hbWUuCisJCQkgKiBidXQgdGhlIGxhdHRlciB3ZSBoYXZlIGNoZWNrZWQgaW4gdGhlIG1haW4gbG9vcC4KKwkJCSAqLworCQkJZm9yIChqID0gaTsgaiA8IGFyZ2M7IGorKykKKwkJCQl2ZXJpZnlfZmlsZW5hbWUocmV2cy0+cHJlZml4LCBhcmd2W2pdLCBqID09IGkpOworCisJCQlhcHBlbmRfcHJ1bmVfZGF0YSgmcHJ1bmVfZGF0YSwgYXJndiArIGkpOworCQkJYnJlYWs7CisJCX0KKwkJZWxzZQorCQkJZ290X3Jldl9hcmcgPSAxOworCX0KKworCWlmIChwcnVuZV9kYXRhLm5yKSB7CisJCS8qCisJCSAqIElmIHdlIG5lZWQgdG8gaW50cm9kdWNlIHRoZSBtYWdpYyAiYSBsb25lICc6JyBtZWFucyBubworCQkgKiBwYXRoc3BlYyB3aGF0c29ldmVyIiwgaGVyZSBpcyB0aGUgcGxhY2UgdG8gZG8gc28uCisJCSAqCisJCSAqIGlmIChwcnVuZV9kYXRhLm5yID09IDEgJiYgIXN0cmNtcChwcnVuZV9kYXRhWzBdLCAiOiIpKSB7CisJCSAqCXBydW5lX2RhdGEubnIgPSAwOworCQkgKglwcnVuZV9kYXRhLmFsbG9jID0gMDsKKwkJICoJZnJlZShwcnVuZV9kYXRhLnBhdGgpOworCQkgKglwcnVuZV9kYXRhLnBhdGggPSBOVUxMOworCQkgKiB9IGVsc2UgeworCQkgKgl0ZXJtaW5hdGUgcHJ1bmVfZGF0YS5hbGxvYyB3aXRoIE5VTEwgYW5kCisJCSAqCWNhbGwgaW5pdF9wYXRoc3BlYygpIHRvIHNldCByZXZzLT5wcnVuZV9kYXRhIGhlcmUuCisJCSAqIH0KKwkJICovCisJCUFMTE9DX0dST1cocHJ1bmVfZGF0YS5wYXRoLCBwcnVuZV9kYXRhLm5yICsgMSwgcHJ1bmVfZGF0YS5hbGxvYyk7CisJCXBydW5lX2RhdGEucGF0aFtwcnVuZV9kYXRhLm5yKytdID0gTlVMTDsKKwkJcGFyc2VfcGF0aHNwZWMoJnJldnMtPnBydW5lX2RhdGEsIDAsIDAsCisJCQkgICAgICAgcmV2cy0+cHJlZml4LCBwcnVuZV9kYXRhLnBhdGgpOworCX0KKworCWlmIChyZXZzLT5kZWYgPT0gTlVMTCkKKwkJcmV2cy0+ZGVmID0gb3B0ID8gb3B0LT5kZWYgOiBOVUxMOworCWlmIChvcHQgJiYgb3B0LT50d2VhaykKKwkJb3B0LT50d2VhayhyZXZzLCBvcHQpOworCWlmIChyZXZzLT5zaG93X21lcmdlKQorCQlwcmVwYXJlX3Nob3dfbWVyZ2UocmV2cyk7CisJaWYgKHJldnMtPmRlZiAmJiAhcmV2cy0+cGVuZGluZy5uciAmJiAhZ290X3Jldl9hcmcpIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJc3RydWN0IG9iamVjdCAqb2JqZWN0OworCQlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgb2M7CisJCWlmIChnZXRfc2hhMV93aXRoX2NvbnRleHQocmV2cy0+ZGVmLCAwLCBzaGExLCAmb2MpKQorCQkJZGlhZ25vc2VfbWlzc2luZ19kZWZhdWx0KHJldnMtPmRlZik7CisJCW9iamVjdCA9IGdldF9yZWZlcmVuY2UocmV2cywgcmV2cy0+ZGVmLCBzaGExLCAwKTsKKwkJYWRkX3BlbmRpbmdfb2JqZWN0X3dpdGhfbW9kZShyZXZzLCBvYmplY3QsIHJldnMtPmRlZiwgb2MubW9kZSk7CisJfQorCisJLyogRGlkIHRoZSB1c2VyIGFzayBmb3IgYW55IGRpZmYgb3V0cHV0PyBSdW4gdGhlIGRpZmYhICovCisJaWYgKHJldnMtPmRpZmZvcHQub3V0cHV0X2Zvcm1hdCAmIH5ESUZGX0ZPUk1BVF9OT19PVVRQVVQpCisJCXJldnMtPmRpZmYgPSAxOworCisJLyogUGlja2F4ZSwgZGlmZi1maWx0ZXIgYW5kIHJlbmFtZSBmb2xsb3dpbmcgbmVlZCBkaWZmcyAqLworCWlmIChyZXZzLT5kaWZmb3B0LnBpY2theGUgfHwKKwkgICAgcmV2cy0+ZGlmZm9wdC5maWx0ZXIgfHwKKwkgICAgRElGRl9PUFRfVFNUKCZyZXZzLT5kaWZmb3B0LCBGT0xMT1dfUkVOQU1FUykpCisJCXJldnMtPmRpZmYgPSAxOworCisJaWYgKHJldnMtPnRvcG9fb3JkZXIpCisJCXJldnMtPmxpbWl0ZWQgPSAxOworCisJaWYgKHJldnMtPnBydW5lX2RhdGEubnIpIHsKKwkJY29weV9wYXRoc3BlYygmcmV2cy0+cHJ1bmluZy5wYXRoc3BlYywgJnJldnMtPnBydW5lX2RhdGEpOworCQkvKiBDYW4ndCBwcnVuZSBjb21taXRzIHdpdGggcmVuYW1lIGZvbGxvd2luZzogdGhlIHBhdGhzIGNoYW5nZS4uICovCisJCWlmICghRElGRl9PUFRfVFNUKCZyZXZzLT5kaWZmb3B0LCBGT0xMT1dfUkVOQU1FUykpCisJCQlyZXZzLT5wcnVuZSA9IDE7CisJCWlmICghcmV2cy0+ZnVsbF9kaWZmKQorCQkJY29weV9wYXRoc3BlYygmcmV2cy0+ZGlmZm9wdC5wYXRoc3BlYywKKwkJCQkgICAgICAmcmV2cy0+cHJ1bmVfZGF0YSk7CisJfQorCWlmIChyZXZzLT5jb21iaW5lX21lcmdlcykKKwkJcmV2cy0+aWdub3JlX21lcmdlcyA9IDA7CisJcmV2cy0+ZGlmZm9wdC5hYmJyZXYgPSByZXZzLT5hYmJyZXY7CisKKwlpZiAocmV2cy0+bGluZV9sZXZlbF90cmF2ZXJzZSkgeworCQlyZXZzLT5saW1pdGVkID0gMTsKKwkJcmV2cy0+dG9wb19vcmRlciA9IDE7CisJfQorCisJZGlmZl9zZXR1cF9kb25lKCZyZXZzLT5kaWZmb3B0KTsKKworCWdyZXBfY29tbWl0X3BhdHRlcm5fdHlwZShHUkVQX1BBVFRFUk5fVFlQRV9VTlNQRUNJRklFRCwKKwkJCQkgJnJldnMtPmdyZXBfZmlsdGVyKTsKKwljb21waWxlX2dyZXBfcGF0dGVybnMoJnJldnMtPmdyZXBfZmlsdGVyKTsKKworCWlmIChyZXZzLT5yZXZlcnNlICYmIHJldnMtPnJlZmxvZ19pbmZvKQorCQlkaWUoImNhbm5vdCBjb21iaW5lIC0tcmV2ZXJzZSB3aXRoIC0td2Fsay1yZWZsb2dzIik7CisJaWYgKHJldnMtPnJld3JpdGVfcGFyZW50cyAmJiByZXZzLT5jaGlsZHJlbi5uYW1lKQorCQlkaWUoImNhbm5vdCBjb21iaW5lIC0tcGFyZW50cyBhbmQgLS1jaGlsZHJlbiIpOworCisJLyoKKwkgKiBMaW1pdGF0aW9ucyBvbiB0aGUgZ3JhcGggZnVuY3Rpb25hbGl0eQorCSAqLworCWlmIChyZXZzLT5yZXZlcnNlICYmIHJldnMtPmdyYXBoKQorCQlkaWUoImNhbm5vdCBjb21iaW5lIC0tcmV2ZXJzZSB3aXRoIC0tZ3JhcGgiKTsKKworCWlmIChyZXZzLT5yZWZsb2dfaW5mbyAmJiByZXZzLT5ncmFwaCkKKwkJZGllKCJjYW5ub3QgY29tYmluZSAtLXdhbGstcmVmbG9ncyB3aXRoIC0tZ3JhcGgiKTsKKwlpZiAocmV2cy0+bm9fd2FsayAmJiByZXZzLT5ncmFwaCkKKwkJZGllKCJjYW5ub3QgY29tYmluZSAtLW5vLXdhbGsgd2l0aCAtLWdyYXBoIik7CisJaWYgKCFyZXZzLT5yZWZsb2dfaW5mbyAmJiByZXZzLT5ncmVwX2ZpbHRlci51c2VfcmVmbG9nX2ZpbHRlcikKKwkJZGllKCJjYW5ub3QgdXNlIC0tZ3JlcC1yZWZsb2cgd2l0aG91dCAtLXdhbGstcmVmbG9ncyIpOworCisJaWYgKHJldnMtPmZpcnN0X3BhcmVudF9vbmx5ICYmIHJldnMtPmJpc2VjdCkKKwkJZGllKF8oIi0tZmlyc3QtcGFyZW50IGlzIGluY29tcGF0aWJsZSB3aXRoIC0tYmlzZWN0IikpOworCisJcmV0dXJuIGxlZnQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9jaGlsZChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKnBhcmVudCwgc3RydWN0IGNvbW1pdCAqY2hpbGQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsID0geGNhbGxvYygxLCBzaXplb2YoKmwpKTsKKworCWwtPml0ZW0gPSBjaGlsZDsKKwlsLT5uZXh0ID0gYWRkX2RlY29yYXRpb24oJnJldnMtPmNoaWxkcmVuLCAmcGFyZW50LT5vYmplY3QsIGwpOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9kdXBsaWNhdGVfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgdHJlZXNhbWVfc3RhdGUgKnRzID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPnRyZWVzYW1lLCAmY29tbWl0LT5vYmplY3QpOworCXN0cnVjdCBjb21taXRfbGlzdCAqKnBwLCAqcDsKKwlpbnQgc3Vydml2aW5nX3BhcmVudHM7CisKKwkvKiBFeGFtaW5lIGV4aXN0aW5nIHBhcmVudHMgd2hpbGUgbWFya2luZyBvbmVzIHdlIGhhdmUgc2Vlbi4uLiAqLworCXBwID0gJmNvbW1pdC0+cGFyZW50czsKKwlzdXJ2aXZpbmdfcGFyZW50cyA9IDA7CisJd2hpbGUgKChwID0gKnBwKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IHAtPml0ZW07CisJCWlmIChwYXJlbnQtPm9iamVjdC5mbGFncyAmIFRNUF9NQVJLKSB7CisJCQkqcHAgPSBwLT5uZXh0OworCQkJaWYgKHRzKQorCQkJCWNvbXBhY3RfdHJlZXNhbWUocmV2cywgY29tbWl0LCBzdXJ2aXZpbmdfcGFyZW50cyk7CisJCQljb250aW51ZTsKKwkJfQorCQlwYXJlbnQtPm9iamVjdC5mbGFncyB8PSBUTVBfTUFSSzsKKwkJc3Vydml2aW5nX3BhcmVudHMrKzsKKwkJcHAgPSAmcC0+bmV4dDsKKwl9CisJLyogY2xlYXIgdGhlIHRlbXBvcmFyeSBtYXJrICovCisJZm9yIChwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkgeworCQlwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJj0gflRNUF9NQVJLOworCX0KKwkvKiBubyB1cGRhdGVfdHJlZXNhbWUoKSAtIHJlbW92aW5nIGR1cGxpY2F0ZXMgY2FuJ3QgYWZmZWN0IFRSRUVTQU1FICovCisJcmV0dXJuIHN1cnZpdmluZ19wYXJlbnRzOworfQorCitzdHJ1Y3QgbWVyZ2Vfc2ltcGxpZnlfc3RhdGUgeworCXN0cnVjdCBjb21taXQgKnNpbXBsaWZpZWQ7Cit9OworCitzdGF0aWMgc3RydWN0IG1lcmdlX3NpbXBsaWZ5X3N0YXRlICpsb2NhdGVfc2ltcGxpZnlfc3RhdGUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IG1lcmdlX3NpbXBsaWZ5X3N0YXRlICpzdDsKKworCXN0ID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPm1lcmdlX3NpbXBsaWZpY2F0aW9uLCAmY29tbWl0LT5vYmplY3QpOworCWlmICghc3QpIHsKKwkJc3QgPSB4Y2FsbG9jKDEsIHNpemVvZigqc3QpKTsKKwkJYWRkX2RlY29yYXRpb24oJnJldnMtPm1lcmdlX3NpbXBsaWZpY2F0aW9uLCAmY29tbWl0LT5vYmplY3QsIHN0KTsKKwl9CisJcmV0dXJuIHN0OworfQorCitzdGF0aWMgaW50IG1hcmtfcmVkdW5kYW50X3BhcmVudHMoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpoID0gcmVkdWNlX2hlYWRzKGNvbW1pdC0+cGFyZW50cyk7CisJaW50IGkgPSAwLCBtYXJrZWQgPSAwOworCXN0cnVjdCBjb21taXRfbGlzdCAqcG8sICpwbjsKKworCS8qIFdhbnQgdGhlc2UgZm9yIHNhbml0eS1jaGVja2luZyBvbmx5ICovCisJaW50IG9yaWdfY250ID0gY29tbWl0X2xpc3RfY291bnQoY29tbWl0LT5wYXJlbnRzKTsKKwlpbnQgY250ID0gY29tbWl0X2xpc3RfY291bnQoaCk7CisKKwkvKgorCSAqIE5vdCByZWFkeSB0byByZW1vdmUgaXRlbXMgeWV0LCBqdXN0IG1hcmsgdGhlbSBmb3Igbm93LCBiYXNlZAorCSAqIG9uIHRoZSBvdXRwdXQgb2YgcmVkdWNlX2hlYWRzKCkuIHJlZHVjZV9oZWFkcyBvdXRwdXRzIHRoZSByZWR1Y2VkCisJICogc2V0IGluIGl0cyBvcmlnaW5hbCBvcmRlciwgc28gdGhpcyBpc24ndCB0b28gaGFyZC4KKwkgKi8KKwlwbyA9IGNvbW1pdC0+cGFyZW50czsKKwlwbiA9IGg7CisJd2hpbGUgKHBvKSB7CisJCWlmIChwbiAmJiBwby0+aXRlbSA9PSBwbi0+aXRlbSkgeworCQkJcG4gPSBwbi0+bmV4dDsKKwkJCWkrKzsKKwkJfSBlbHNlIHsKKwkJCXBvLT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gVE1QX01BUks7CisJCQltYXJrZWQrKzsKKwkJfQorCQlwbz1wby0+bmV4dDsKKwl9CisKKwlpZiAoaSAhPSBjbnQgfHwgY250K21hcmtlZCAhPSBvcmlnX2NudCkKKwkJZGllKCJtYXJrX3JlZHVuZGFudF9wYXJlbnRzICVkICVkICVkICVkIiwgb3JpZ19jbnQsIGNudCwgaSwgbWFya2VkKTsKKworCWZyZWVfY29tbWl0X2xpc3QoaCk7CisKKwlyZXR1cm4gbWFya2VkOworfQorCitzdGF0aWMgaW50IG1hcmtfdHJlZXNhbWVfcm9vdF9wYXJlbnRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlpbnQgbWFya2VkID0gMDsKKworCWZvciAocCA9IGNvbW1pdC0+cGFyZW50czsgcDsgcCA9IHAtPm5leHQpIHsKKwkJc3RydWN0IGNvbW1pdCAqcGFyZW50ID0gcC0+aXRlbTsKKwkJaWYgKCFwYXJlbnQtPnBhcmVudHMgJiYgKHBhcmVudC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpKSB7CisJCQlwYXJlbnQtPm9iamVjdC5mbGFncyB8PSBUTVBfTUFSSzsKKwkJCW1hcmtlZCsrOworCQl9CisJfQorCisJcmV0dXJuIG1hcmtlZDsKK30KKworLyoKKyAqIEF3a3dhcmQgbmFtaW5nIC0gdGhpcyBtZWFucyBvbmUgcGFyZW50IHdlIGFyZSBUUkVFU0FNRSB0by4KKyAqIGNmIG1hcmtfdHJlZXNhbWVfcm9vdF9wYXJlbnRzOiByb290IHBhcmVudHMgdGhhdCBhcmUgVFJFRVNBTUUgKHRvIGFuCisgKiBlbXB0eSB0cmVlKS4gQmV0dGVyIG5hbWUgc3VnZ2VzdGlvbnM/CisgKi8KK3N0YXRpYyBpbnQgbGVhdmVfb25lX3RyZWVzYW1lX3RvX3BhcmVudChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgdHJlZXNhbWVfc3RhdGUgKnRzID0gbG9va3VwX2RlY29yYXRpb24oJnJldnMtPnRyZWVzYW1lLCAmY29tbWl0LT5vYmplY3QpOworCXN0cnVjdCBjb21taXQgKnVubWFya2VkID0gTlVMTCwgKm1hcmtlZCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCXVuc2lnbmVkIG47CisKKwlmb3IgKHAgPSBjb21taXQtPnBhcmVudHMsIG4gPSAwOyBwOyBwID0gcC0+bmV4dCwgbisrKSB7CisJCWlmICh0cy0+dHJlZXNhbWVbbl0pIHsKKwkJCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBUTVBfTUFSSykgeworCQkJCWlmICghbWFya2VkKQorCQkJCQltYXJrZWQgPSBwLT5pdGVtOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIXVubWFya2VkKSB7CisJCQkJCXVubWFya2VkID0gcC0+aXRlbTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgVFJFRVNBTUUgdG8gYSBtYXJrZWQtZm9yLWRlbGV0aW9uIHBhcmVudCwgYnV0IG5vdCB0byBhbnkKKwkgKiB1bm1hcmtlZCBwYXJlbnRzLCB1bm1hcmsgdGhlIGZpcnN0IFRSRUVTQU1FIHBhcmVudC4gVGhpcyBpcyB0aGUKKwkgKiBwYXJlbnQgdGhhdCB0aGUgZGVmYXVsdCBzaW1wbGlmeV9oaXN0b3J5PT0xIHNjYW4gd291bGQgaGF2ZSBmb2xsb3dlZCwKKwkgKiBhbmQgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIG9taXQgdGhhdCBwYXRoIHdoZW4gYXNraW5nIGZvciBhCisJICogc2ltcGxpZmllZCBmdWxsIGhpc3RvcnkuIFJldGFpbmluZyBpdCBpbXByb3ZlcyB0aGUgY2hhbmNlcyBvZgorCSAqIHVuZGVyc3RhbmRpbmcgb2RkIG1pc3NlZCBtZXJnZXMgdGhhdCB0b29rIGFuIG9sZCB2ZXJzaW9uIG9mIGEgZmlsZS4KKwkgKgorCSAqIEV4YW1wbGU6CisJICoKKwkgKiAgIEktLS0tLS0tLSpYICAgICAgIEEgbW9kaWZpZWQgdGhlIGZpbGUsIGJ1dCBtYWlubGluZSBtZXJnZSBYIHVzZWQKKwkgKiAgICBcICAgICAgIC8gICAgICAgICItcyBvdXJzIiwgc28gdG9vayB0aGUgdmVyc2lvbiBmcm9tIEkuIFggaXMKKwkgKiAgICAgYC0qQS0tJyAgICAgICAgIFRSRUVTQU1FIHRvIEkgYW5kICFUUkVFU0FNRSB0byBBLgorCSAqCisJICogRGVmYXVsdCBsb2cgZnJvbSBYIHdvdWxkIHByb2R1Y2UgIkkiLiBXaXRob3V0IHRoaXMgY2hlY2ssCisJICogLS1mdWxsLWhpc3RvcnkgLS1zaW1wbGlmeS1tZXJnZXMgd291bGQgcHJvZHVjZSAiSS1BLVgiLCBzaG93aW5nCisJICogdGhlIG1lcmdlIGNvbW1pdCBYIGFuZCB0aGF0IGl0IGNoYW5nZWQgQSwgYnV0IG5vdCBtYWtpbmcgY2xlYXIgdGhhdAorCSAqIGl0IGhhZCBqdXN0IHRha2VuIHRoZSBJIHZlcnNpb24uIFdpdGggdGhpcyBjaGVjaywgdGhlIHRvcG9sb2d5IGFib3ZlCisJICogaXMgcmV0YWluZWQuCisJICoKKwkgKiBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUgc2ltcGxpZmljYXRpb24gY2hvb3NlcyBhIGRpZmZlcmVudAorCSAqIFRSRUVTQU1FIHBhcmVudCBmcm9tIHRoZSBkZWZhdWx0LCBpbiB3aGljaCBjYXNlIHRoaXMgdGVzdCBkb2Vzbid0CisJICogYWN0aXZhdGUsIGFuZCB3ZSBfZG9fIGRyb3AgdGhlIGRlZmF1bHQgcGFyZW50LiBFeGFtcGxlOgorCSAqCisJICogICBJLS0tLS0tWCAgICAgICAgIEEgbW9kaWZpZWQgdGhlIGZpbGUsIGJ1dCBpdCB3YXMgcmV2ZXJ0ZWQgaW4gQiwKKwkgKiAgICBcICAgIC8gICAgICAgICAgbWVhbmluZyBtYWlubGluZSBtZXJnZSBYIGlzIFRSRUVTQU1FIHRvIGJvdGgKKwkgKiAgICAqQS0qQiAgICAgICAgICAgcGFyZW50cy4KKwkgKgorCSAqIERlZmF1bHQgbG9nIHdvdWxkIHByb2R1Y2UgIkkiIGJ5IGZvbGxvd2luZyB0aGUgZmlyc3QgcGFyZW50OworCSAqIC0tZnVsbC1oaXN0b3J5IC0tc2ltcGxpZnktbWVyZ2VzIHdpbGwgcHJvZHVjZSAiSS1BLUIiLiBCdXQgdGhpcyBpcyBhCisJICogcmVhc29uYWJsZSByZXN1bHQgLSBpdCBwcmVzZW50cyBhIGxvZ2ljYWwgZnVsbCBoaXN0b3J5IGxlYWRpbmcgZnJvbQorCSAqIEkgdG8gWCwgYW5kIFggaXMgbm90IGFuIGltcG9ydGFudCBtZXJnZS4KKwkgKi8KKwlpZiAoIXVubWFya2VkICYmIG1hcmtlZCkgeworCQltYXJrZWQtPm9iamVjdC5mbGFncyAmPSB+VE1QX01BUks7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9tYXJrZWRfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcCwgKnA7CisJaW50IG50aF9wYXJlbnQsIHJlbW92ZWQgPSAwOworCisJcHAgPSAmY29tbWl0LT5wYXJlbnRzOworCW50aF9wYXJlbnQgPSAwOworCXdoaWxlICgocCA9ICpwcCkgIT0gTlVMTCkgeworCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBwLT5pdGVtOworCQlpZiAocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBUTVBfTUFSSykgeworCQkJcGFyZW50LT5vYmplY3QuZmxhZ3MgJj0gflRNUF9NQVJLOworCQkJKnBwID0gcC0+bmV4dDsKKwkJCWZyZWUocCk7CisJCQlyZW1vdmVkKys7CisJCQljb21wYWN0X3RyZWVzYW1lKHJldnMsIGNvbW1pdCwgbnRoX3BhcmVudCk7CisJCQljb250aW51ZTsKKwkJfQorCQlwcCA9ICZwLT5uZXh0OworCQludGhfcGFyZW50Kys7CisJfQorCisJLyogUmVtb3ZpbmcgcGFyZW50cyBjYW4gb25seSBpbmNyZWFzZSBUUkVFU0FNRW5lc3MgKi8KKwlpZiAocmVtb3ZlZCAmJiAhKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVFJFRVNBTUUpKQorCQl1cGRhdGVfdHJlZXNhbWUocmV2cywgY29tbWl0KTsKKworCXJldHVybiBudGhfcGFyZW50OworfQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICoqc2ltcGxpZnlfb25lKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0YWlsKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQ7CisJc3RydWN0IG1lcmdlX3NpbXBsaWZ5X3N0YXRlICpzdCwgKnBzdDsKKwlpbnQgY250OworCisJc3QgPSBsb2NhdGVfc2ltcGxpZnlfc3RhdGUocmV2cywgY29tbWl0KTsKKworCS8qCisJICogSGF2ZSB3ZSBoYW5kbGVkIHRoaXMgb25lPworCSAqLworCWlmIChzdC0+c2ltcGxpZmllZCkKKwkJcmV0dXJuIHRhaWw7CisKKwkvKgorCSAqIEFuIFVOSU5URVJFU1RJTkcgY29tbWl0IHNpbXBsaWZpZXMgdG8gaXRzZWxmLCBzbyBkb2VzIGEKKwkgKiByb290IGNvbW1pdC4gIFdlIGRvIG5vdCByZXdyaXRlIHBhcmVudHMgb2Ygc3VjaCBjb21taXQKKwkgKiBhbnl3YXkuCisJICovCisJaWYgKChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHx8ICFjb21taXQtPnBhcmVudHMpIHsKKwkJc3QtPnNpbXBsaWZpZWQgPSBjb21taXQ7CisJCXJldHVybiB0YWlsOworCX0KKworCS8qCisJICogRG8gd2Uga25vdyB3aGF0IGNvbW1pdCBhbGwgb2Ygb3VyIHBhcmVudHMgdGhhdCBtYXR0ZXIKKwkgKiBzaG91bGQgYmUgcmV3cml0dGVuIHRvPyAgT3RoZXJ3aXNlIHdlIGFyZSBub3QgcmVhZHkgdG8KKwkgKiByZXdyaXRlIHRoaXMgb25lIHlldC4KKwkgKi8KKwlmb3IgKGNudCA9IDAsIHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXBzdCA9IGxvY2F0ZV9zaW1wbGlmeV9zdGF0ZShyZXZzLCBwLT5pdGVtKTsKKwkJaWYgKCFwc3QtPnNpbXBsaWZpZWQpIHsKKwkJCXRhaWwgPSAmY29tbWl0X2xpc3RfaW5zZXJ0KHAtPml0ZW0sIHRhaWwpLT5uZXh0OworCQkJY250Kys7CisJCX0KKwkJaWYgKHJldnMtPmZpcnN0X3BhcmVudF9vbmx5KQorCQkJYnJlYWs7CisJfQorCWlmIChjbnQpIHsKKwkJdGFpbCA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCB0YWlsKS0+bmV4dDsKKwkJcmV0dXJuIHRhaWw7CisJfQorCisJLyoKKwkgKiBSZXdyaXRlIG91ciBsaXN0IG9mIHBhcmVudHMuIE5vdGUgdGhhdCB0aGlzIGNhbm5vdAorCSAqIGFmZmVjdCBvdXIgVFJFRVNBTUUgZmxhZ3MgaW4gYW55IHdheSAtIGEgY29tbWl0IGlzCisJICogYWx3YXlzIFRSRUVTQU1FIHRvIGl0cyBzaW1wbGlmaWNhdGlvbi4KKwkgKi8KKwlmb3IgKHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCXBzdCA9IGxvY2F0ZV9zaW1wbGlmeV9zdGF0ZShyZXZzLCBwLT5pdGVtKTsKKwkJcC0+aXRlbSA9IHBzdC0+c2ltcGxpZmllZDsKKwkJaWYgKHJldnMtPmZpcnN0X3BhcmVudF9vbmx5KQorCQkJYnJlYWs7CisJfQorCisJaWYgKHJldnMtPmZpcnN0X3BhcmVudF9vbmx5KQorCQljbnQgPSAxOworCWVsc2UKKwkJY250ID0gcmVtb3ZlX2R1cGxpY2F0ZV9wYXJlbnRzKHJldnMsIGNvbW1pdCk7CisKKwkvKgorCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgYXJlIGEgbWVyZ2UgYW5kIG9uZSBzaWRlIGJyYW5jaAorCSAqIGRvZXMgbm90IGhhdmUgYW55IGNvbW1pdCB0aGF0IHRvdWNoZXMgdGhlIGdpdmVuIHBhdGhzOworCSAqIGluIHN1Y2ggYSBjYXNlLCB0aGUgaW1tZWRpYXRlIHBhcmVudCBmcm9tIHRoYXQgYnJhbmNoCisJICogd2lsbCBiZSByZXdyaXR0ZW4gdG8gYmUgdGhlIG1lcmdlIGJhc2UuCisJICoKKwkgKiAgICAgIG8tLS0tWAkJWDogdGhlIGNvbW1pdCB3ZSBhcmUgbG9va2luZyBhdDsKKwkgKiAgICAgLyAgICAvCQlvOiBhIGNvbW1pdCB0aGF0IHRvdWNoZXMgdGhlIHBhdGhzOworCSAqIC0tLW8tLS0tJworCSAqCisJICogRnVydGhlciwgYSBtZXJnZSBvZiBhbiBpbmRlcGVuZGVudCBicmFuY2ggdGhhdCBkb2Vzbid0CisJICogdG91Y2ggdGhlIHBhdGggd2lsbCByZWR1Y2UgdG8gYSB0cmVlc2FtZSByb290IHBhcmVudDoKKwkgKgorCSAqICAtLS0tby0tLS1YCQlYOiB0aGUgY29tbWl0IHdlIGFyZSBsb29raW5nIGF0OworCSAqICAgICAgICAgIC8JCW86IGEgY29tbWl0IHRoYXQgdG91Y2hlcyB0aGUgcGF0aHM7CisJICogICAgICAgICByCQlyOiBhIHJvb3QgY29tbWl0IG5vdCB0b3VjaGluZyB0aGUgcGF0aHMKKwkgKgorCSAqIERldGVjdCBhbmQgc2ltcGxpZnkgYm90aCBjYXNlcy4KKwkgKi8KKwlpZiAoMSA8IGNudCkgeworCQlpbnQgbWFya2VkID0gbWFya19yZWR1bmRhbnRfcGFyZW50cyhyZXZzLCBjb21taXQpOworCQltYXJrZWQgKz0gbWFya190cmVlc2FtZV9yb290X3BhcmVudHMocmV2cywgY29tbWl0KTsKKwkJaWYgKG1hcmtlZCkKKwkJCW1hcmtlZCAtPSBsZWF2ZV9vbmVfdHJlZXNhbWVfdG9fcGFyZW50KHJldnMsIGNvbW1pdCk7CisJCWlmIChtYXJrZWQpCisJCQljbnQgPSByZW1vdmVfbWFya2VkX3BhcmVudHMocmV2cywgY29tbWl0KTsKKwl9CisKKwkvKgorCSAqIEEgY29tbWl0IHNpbXBsaWZpZXMgdG8gaXRzZWxmIGlmIGl0IGlzIGEgcm9vdCwgaWYgaXQgaXMKKwkgKiBVTklOVEVSRVNUSU5HLCBpZiBpdCB0b3VjaGVzIHRoZSBnaXZlbiBwYXRocywgb3IgaWYgaXQgaXMgYQorCSAqIG1lcmdlIGFuZCBpdHMgcGFyZW50cyBkb24ndCBzaW1wbGlmeSB0byBvbmUgcmVsZXZhbnQgY29tbWl0CisJICogKHRoZSBmaXJzdCB0d28gY2FzZXMgYXJlIGFscmVhZHkgaGFuZGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mCisJICogdGhpcyBmdW5jdGlvbikuCisJICoKKwkgKiBPdGhlcndpc2UsIGl0IHNpbXBsaWZpZXMgdG8gd2hhdCBpdHMgc29sZSByZWxldmFudCBwYXJlbnQKKwkgKiBzaW1wbGlmaWVzIHRvLgorCSAqLworCWlmICghY250IHx8CisJICAgIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpIHx8CisJICAgICEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkgfHwKKwkgICAgKHBhcmVudCA9IG9uZV9yZWxldmFudF9wYXJlbnQocmV2cywgY29tbWl0LT5wYXJlbnRzKSkgPT0gTlVMTCkKKwkJc3QtPnNpbXBsaWZpZWQgPSBjb21taXQ7CisJZWxzZSB7CisJCXBzdCA9IGxvY2F0ZV9zaW1wbGlmeV9zdGF0ZShyZXZzLCBwYXJlbnQpOworCQlzdC0+c2ltcGxpZmllZCA9IHBzdC0+c2ltcGxpZmllZDsKKwl9CisJcmV0dXJuIHRhaWw7Cit9CisKK3N0YXRpYyB2b2lkIHNpbXBsaWZ5X21lcmdlcyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0LCAqbmV4dDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnlldF90b19kbywgKip0YWlsOworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCWlmICghcmV2cy0+cHJ1bmUpCisJCXJldHVybjsKKworCS8qIGZlZWQgdGhlIGxpc3QgcmV2ZXJzZWQgKi8KKwl5ZXRfdG9fZG8gPSBOVUxMOworCWZvciAobGlzdCA9IHJldnMtPmNvbW1pdHM7IGxpc3Q7IGxpc3QgPSBuZXh0KSB7CisJCWNvbW1pdCA9IGxpc3QtPml0ZW07CisJCW5leHQgPSBsaXN0LT5uZXh0OworCQkvKgorCQkgKiBEbyBub3QgZnJlZShsaXN0KSBoZXJlIHlldDsgdGhlIG9yaWdpbmFsIGxpc3QKKwkJICogaXMgdXNlZCBsYXRlciBpbiB0aGlzIGZ1bmN0aW9uLgorCQkgKi8KKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGNvbW1pdCwgJnlldF90b19kbyk7CisJfQorCXdoaWxlICh5ZXRfdG9fZG8pIHsKKwkJbGlzdCA9IHlldF90b19kbzsKKwkJeWV0X3RvX2RvID0gTlVMTDsKKwkJdGFpbCA9ICZ5ZXRfdG9fZG87CisJCXdoaWxlIChsaXN0KSB7CisJCQljb21taXQgPSBsaXN0LT5pdGVtOworCQkJbmV4dCA9IGxpc3QtPm5leHQ7CisJCQlmcmVlKGxpc3QpOworCQkJbGlzdCA9IG5leHQ7CisJCQl0YWlsID0gc2ltcGxpZnlfb25lKHJldnMsIGNvbW1pdCwgdGFpbCk7CisJCX0KKwl9CisKKwkvKiBjbGVhbiB1cCB0aGUgcmVzdWx0LCByZW1vdmluZyB0aGUgc2ltcGxpZmllZCBvbmVzICovCisJbGlzdCA9IHJldnMtPmNvbW1pdHM7CisJcmV2cy0+Y29tbWl0cyA9IE5VTEw7CisJdGFpbCA9ICZyZXZzLT5jb21taXRzOworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCBtZXJnZV9zaW1wbGlmeV9zdGF0ZSAqc3Q7CisKKwkJY29tbWl0ID0gbGlzdC0+aXRlbTsKKwkJbmV4dCA9IGxpc3QtPm5leHQ7CisJCWZyZWUobGlzdCk7CisJCWxpc3QgPSBuZXh0OworCQlzdCA9IGxvY2F0ZV9zaW1wbGlmeV9zdGF0ZShyZXZzLCBjb21taXQpOworCQlpZiAoc3QtPnNpbXBsaWZpZWQgPT0gY29tbWl0KQorCQkJdGFpbCA9ICZjb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCB0YWlsKS0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jaGlsZHJlbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsOworCWZvciAobCA9IHJldnMtPmNvbW1pdHM7IGw7IGwgPSBsLT5uZXh0KSB7CisJCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IGwtPml0ZW07CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCQlmb3IgKHAgPSBjb21taXQtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KQorCQkJYWRkX2NoaWxkKHJldnMsIHAtPml0ZW0sIGNvbW1pdCk7CisJfQorfQorCit2b2lkIHJlc2V0X3JldmlzaW9uX3dhbGsodm9pZCkKK3sKKwljbGVhcl9vYmplY3RfZmxhZ3MoU0VFTiB8IEFEREVEIHwgU0hPV04pOworfQorCitpbnQgcHJlcGFyZV9yZXZpc2lvbl93YWxrKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5IG9sZF9wZW5kaW5nOworCXN0cnVjdCBjb21taXRfbGlzdCAqKm5leHQgPSAmcmV2cy0+Y29tbWl0czsKKworCW1lbWNweSgmb2xkX3BlbmRpbmcsICZyZXZzLT5wZW5kaW5nLCBzaXplb2Yob2xkX3BlbmRpbmcpKTsKKwlyZXZzLT5wZW5kaW5nLm5yID0gMDsKKwlyZXZzLT5wZW5kaW5nLmFsbG9jID0gMDsKKwlyZXZzLT5wZW5kaW5nLm9iamVjdHMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBvbGRfcGVuZGluZy5ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfYXJyYXlfZW50cnkgKmUgPSBvbGRfcGVuZGluZy5vYmplY3RzICsgaTsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gaGFuZGxlX2NvbW1pdChyZXZzLCBlKTsKKwkJaWYgKGNvbW1pdCkgeworCQkJaWYgKCEoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTRUVOKSkgeworCQkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFNFRU47CisJCQkJbmV4dCA9IGNvbW1pdF9saXN0X2FwcGVuZChjb21taXQsIG5leHQpOworCQkJfQorCQl9CisJfQorCWlmICghcmV2cy0+bGVha19wZW5kaW5nKQorCQlvYmplY3RfYXJyYXlfY2xlYXIoJm9sZF9wZW5kaW5nKTsKKworCS8qIFNpZ25hbCB3aGV0aGVyIHdlIG5lZWQgcGVyLXBhcmVudCB0cmVlc2FtZSBkZWNvcmF0aW9uICovCisJaWYgKHJldnMtPnNpbXBsaWZ5X21lcmdlcyB8fAorCSAgICAocmV2cy0+bGltaXRlZCAmJiBsaW1pdGluZ19jYW5faW5jcmVhc2VfdHJlZXNhbWUocmV2cykpKQorCQlyZXZzLT50cmVlc2FtZS5uYW1lID0gInRyZWVzYW1lIjsKKworCWlmIChyZXZzLT5ub193YWxrICE9IFJFVklTSU9OX1dBTEtfTk9fV0FMS19VTlNPUlRFRCkKKwkJY29tbWl0X2xpc3Rfc29ydF9ieV9kYXRlKCZyZXZzLT5jb21taXRzKTsKKwlpZiAocmV2cy0+bm9fd2FsaykKKwkJcmV0dXJuIDA7CisJaWYgKHJldnMtPmxpbWl0ZWQpCisJCWlmIChsaW1pdF9saXN0KHJldnMpIDwgMCkKKwkJCXJldHVybiAtMTsKKwlpZiAocmV2cy0+dG9wb19vcmRlcikKKwkJc29ydF9pbl90b3BvbG9naWNhbF9vcmRlcigmcmV2cy0+Y29tbWl0cywgcmV2cy0+c29ydF9vcmRlcik7CisJaWYgKHJldnMtPmxpbmVfbGV2ZWxfdHJhdmVyc2UpCisJCWxpbmVfbG9nX2ZpbHRlcihyZXZzKTsKKwlpZiAocmV2cy0+c2ltcGxpZnlfbWVyZ2VzKQorCQlzaW1wbGlmeV9tZXJnZXMocmV2cyk7CisJaWYgKHJldnMtPmNoaWxkcmVuLm5hbWUpCisJCXNldF9jaGlsZHJlbihyZXZzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gcmV3cml0ZV9yZXN1bHQgcmV3cml0ZV9vbmUoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICoqcHApCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICpjYWNoZSA9IE5VTEw7CisKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBjb21taXQgKnAgPSAqcHA7CisJCWlmICghcmV2cy0+bGltaXRlZCkKKwkJCWlmIChhZGRfcGFyZW50c190b19saXN0KHJldnMsIHAsICZyZXZzLT5jb21taXRzLCAmY2FjaGUpIDwgMCkKKwkJCQlyZXR1cm4gcmV3cml0ZV9vbmVfZXJyb3I7CisJCWlmIChwLT5vYmplY3QuZmxhZ3MgJiBVTklOVEVSRVNUSU5HKQorCQkJcmV0dXJuIHJld3JpdGVfb25lX29rOworCQlpZiAoIShwLT5vYmplY3QuZmxhZ3MgJiBUUkVFU0FNRSkpCisJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CisJCWlmICghcC0+cGFyZW50cykKKwkJCXJldHVybiByZXdyaXRlX29uZV9ub3BhcmVudHM7CisJCWlmICgocCA9IG9uZV9yZWxldmFudF9wYXJlbnQocmV2cywgcC0+cGFyZW50cykpID09IE5VTEwpCisJCQlyZXR1cm4gcmV3cml0ZV9vbmVfb2s7CisJCSpwcCA9IHA7CisJfQorfQorCitpbnQgcmV3cml0ZV9wYXJlbnRzKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0LAorCXJld3JpdGVfcGFyZW50X2ZuX3QgcmV3cml0ZV9wYXJlbnQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqcHAgPSAmY29tbWl0LT5wYXJlbnRzOworCXdoaWxlICgqcHApIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSAqcHA7CisJCXN3aXRjaCAocmV3cml0ZV9wYXJlbnQocmV2cywgJnBhcmVudC0+aXRlbSkpIHsKKwkJY2FzZSByZXdyaXRlX29uZV9vazoKKwkJCWJyZWFrOworCQljYXNlIHJld3JpdGVfb25lX25vcGFyZW50czoKKwkJCSpwcCA9IHBhcmVudC0+bmV4dDsKKwkJCWNvbnRpbnVlOworCQljYXNlIHJld3JpdGVfb25lX2Vycm9yOgorCQkJcmV0dXJuIC0xOworCQl9CisJCXBwID0gJnBhcmVudC0+bmV4dDsKKwl9CisJcmVtb3ZlX2R1cGxpY2F0ZV9wYXJlbnRzKHJldnMsIGNvbW1pdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tbWl0X3Jld3JpdGVfcGVyc29uKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqd2hhdCwgc3RydWN0IHN0cmluZ19saXN0ICptYWlsbWFwKQoreworCWNoYXIgKnBlcnNvbiwgKmVuZHA7CisJc2l6ZV90IGxlbiwgbmFtZWxlbiwgbWFpbGxlbjsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm1haWw7CisJc3RydWN0IGlkZW50X3NwbGl0IGlkZW50OworCisJcGVyc29uID0gc3Ryc3RyKGJ1Zi0+YnVmLCB3aGF0KTsKKwlpZiAoIXBlcnNvbikKKwkJcmV0dXJuIDA7CisKKwlwZXJzb24gKz0gc3RybGVuKHdoYXQpOworCWVuZHAgPSBzdHJjaHIocGVyc29uLCAnXG4nKTsKKwlpZiAoIWVuZHApCisJCXJldHVybiAwOworCisJbGVuID0gZW5kcCAtIHBlcnNvbjsKKworCWlmIChzcGxpdF9pZGVudF9saW5lKCZpZGVudCwgcGVyc29uLCBsZW4pKQorCQlyZXR1cm4gMDsKKworCW1haWwgPSBpZGVudC5tYWlsX2JlZ2luOworCW1haWxsZW4gPSBpZGVudC5tYWlsX2VuZCAtIGlkZW50Lm1haWxfYmVnaW47CisJbmFtZSA9IGlkZW50Lm5hbWVfYmVnaW47CisJbmFtZWxlbiA9IGlkZW50Lm5hbWVfZW5kIC0gaWRlbnQubmFtZV9iZWdpbjsKKworCWlmIChtYXBfdXNlcihtYWlsbWFwLCAmbWFpbCwgJm1haWxsZW4sICZuYW1lLCAmbmFtZWxlbikpIHsKKwkJc3RydWN0IHN0cmJ1ZiBuYW1lbWFpbCA9IFNUUkJVRl9JTklUOworCisJCXN0cmJ1Zl9hZGRmKCZuYW1lbWFpbCwgIiUuKnMgPCUuKnM+IiwKKwkJCSAgICAoaW50KW5hbWVsZW4sIG5hbWUsIChpbnQpbWFpbGxlbiwgbWFpbCk7CisKKwkJc3RyYnVmX3NwbGljZShidWYsIGlkZW50Lm5hbWVfYmVnaW4gLSBidWYtPmJ1ZiwKKwkJCSAgICAgIGlkZW50Lm1haWxfZW5kIC0gaWRlbnQubmFtZV9iZWdpbiArIDEsCisJCQkgICAgICBuYW1lbWFpbC5idWYsIG5hbWVtYWlsLmxlbik7CisKKwkJc3RyYnVmX3JlbGVhc2UoJm5hbWVtYWlsKTsKKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21taXRfbWF0Y2goc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgcmV2X2luZm8gKm9wdCkKK3sKKwlpbnQgcmV0dmFsOworCWNvbnN0IGNoYXIgKmVuY29kaW5nOworCWNvbnN0IGNoYXIgKm1lc3NhZ2U7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghb3B0LT5ncmVwX2ZpbHRlci5wYXR0ZXJuX2xpc3QgJiYgIW9wdC0+Z3JlcF9maWx0ZXIuaGVhZGVyX2xpc3QpCisJCXJldHVybiAxOworCisJLyogUHJlcGVuZCAiZmFrZSIgaGVhZGVycyBhcyBuZWVkZWQgKi8KKwlpZiAob3B0LT5ncmVwX2ZpbHRlci51c2VfcmVmbG9nX2ZpbHRlcikgeworCQlzdHJidWZfYWRkc3RyKCZidWYsICJyZWZsb2cgIik7CisJCWdldF9yZWZsb2dfbWVzc2FnZSgmYnVmLCBvcHQtPnJlZmxvZ19pbmZvKTsKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCX0KKworCS8qCisJICogV2UgZ3JlcCBpbiB0aGUgdXNlcidzIG91dHB1dCBlbmNvZGluZywgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCBpdAorCSAqIGlzIHRoZSBlbmNvZGluZyB0aGV5IGFyZSBtb3N0IGxpa2VseSB0byB3cml0ZSB0aGVpciBncmVwIHBhdHRlcm4KKwkgKiBmb3IuIEluIGFkZGl0aW9uLCBpdCBtZWFucyB3ZSB3aWxsIG1hdGNoIHRoZSAibm90ZXMiIGVuY29kaW5nIGJlbG93LAorCSAqIHNvIHdlIHdpbGwgbm90IGVuZCB1cCB3aXRoIGEgYnVmZmVyIHRoYXQgaGFzIHR3byBkaWZmZXJlbnQgZW5jb2RpbmdzCisJICogaW4gaXQuCisJICovCisJZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCW1lc3NhZ2UgPSBsb2dtc2dfcmVlbmNvZGUoY29tbWl0LCBOVUxMLCBlbmNvZGluZyk7CisKKwkvKiBDb3B5IHRoZSBjb21taXQgdG8gdGVtcG9yYXJ5IGlmIHdlIGFyZSB1c2luZyAiZmFrZSIgaGVhZGVycyAqLworCWlmIChidWYubGVuKQorCQlzdHJidWZfYWRkc3RyKCZidWYsIG1lc3NhZ2UpOworCisJaWYgKG9wdC0+Z3JlcF9maWx0ZXIuaGVhZGVyX2xpc3QgJiYgb3B0LT5tYWlsbWFwKSB7CisJCWlmICghYnVmLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgbWVzc2FnZSk7CisKKwkJY29tbWl0X3Jld3JpdGVfcGVyc29uKCZidWYsICJcbmF1dGhvciAiLCBvcHQtPm1haWxtYXApOworCQljb21taXRfcmV3cml0ZV9wZXJzb24oJmJ1ZiwgIlxuY29tbWl0dGVyICIsIG9wdC0+bWFpbG1hcCk7CisJfQorCisJLyogQXBwZW5kICJmYWtlIiBtZXNzYWdlIHBhcnRzIGFzIG5lZWRlZCAqLworCWlmIChvcHQtPnNob3dfbm90ZXMpIHsKKwkJaWYgKCFidWYubGVuKQorCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBtZXNzYWdlKTsKKwkJZm9ybWF0X2Rpc3BsYXlfbm90ZXMoY29tbWl0LT5vYmplY3Quc2hhMSwgJmJ1ZiwgZW5jb2RpbmcsIDEpOworCX0KKworCS8qCisJICogRmluZCBlaXRoZXIgaW4gdGhlIG9yaWdpbmFsIGNvbW1pdCBtZXNzYWdlLCBvciBpbiB0aGUgdGVtcG9yYXJ5LgorCSAqIE5vdGUgdGhhdCB3ZSBjYXN0IGF3YXkgdGhlIGNvbnN0bmVzcyBvZiAibWVzc2FnZSIgaGVyZS4gSXQgaXMKKwkgKiBjb25zdCBiZWNhdXNlIGl0IG1heSBjb21lIGZyb20gdGhlIGNhY2hlZCBjb21taXQgYnVmZmVyLiBUaGF0J3MgT0ssCisJICogYmVjYXVzZSB3ZSBrbm93IHRoYXQgaXQgaXMgbW9kaWZpYWJsZSBoZWFwIG1lbW9yeSwgYW5kIHRoYXQgd2hpbGUKKwkgKiBncmVwX2J1ZmZlciBtYXkgbW9kaWZ5IGl0IGZvciBzcGVlZCwgaXQgd2lsbCByZXN0b3JlIGFueQorCSAqIGNoYW5nZXMgYmVmb3JlIHJldHVybmluZy4KKwkgKi8KKwlpZiAoYnVmLmxlbikKKwkJcmV0dmFsID0gZ3JlcF9idWZmZXIoJm9wdC0+Z3JlcF9maWx0ZXIsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCWVsc2UKKwkJcmV0dmFsID0gZ3JlcF9idWZmZXIoJm9wdC0+Z3JlcF9maWx0ZXIsCisJCQkJICAgICAoY2hhciAqKW1lc3NhZ2UsIHN0cmxlbihtZXNzYWdlKSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJdW51c2VfY29tbWl0X2J1ZmZlcihjb21taXQsIG1lc3NhZ2UpOworCXJldHVybiBvcHQtPmludmVydF9ncmVwID8gIXJldHZhbCA6IHJldHZhbDsKK30KKworc3RhdGljIGlubGluZSBpbnQgd2FudF9hbmNlc3RyeShjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJcmV0dXJuIChyZXZzLT5yZXdyaXRlX3BhcmVudHMgfHwgcmV2cy0+Y2hpbGRyZW4ubmFtZSk7Cit9CisKK2VudW0gY29tbWl0X2FjdGlvbiBnZXRfY29tbWl0X2FjdGlvbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlpZiAoY29tbWl0LT5vYmplY3QuZmxhZ3MgJiBTSE9XTikKKwkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CisJaWYgKHJldnMtPnVucGFja2VkICYmIGhhc19zaGExX3BhY2soY29tbWl0LT5vYmplY3Quc2hhMSkpCisJCXJldHVybiBjb21taXRfaWdub3JlOworCWlmIChyZXZzLT5zaG93X2FsbCkKKwkJcmV0dXJuIGNvbW1pdF9zaG93OworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFVOSU5URVJFU1RJTkcpCisJCXJldHVybiBjb21taXRfaWdub3JlOworCWlmIChyZXZzLT5taW5fYWdlICE9IC0xICYmIChjb21taXQtPmRhdGUgPiByZXZzLT5taW5fYWdlKSkKKwkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CisJaWYgKHJldnMtPm1pbl9wYXJlbnRzIHx8IChyZXZzLT5tYXhfcGFyZW50cyA+PSAwKSkgeworCQlpbnQgbiA9IGNvbW1pdF9saXN0X2NvdW50KGNvbW1pdC0+cGFyZW50cyk7CisJCWlmICgobiA8IHJldnMtPm1pbl9wYXJlbnRzKSB8fAorCQkgICAgKChyZXZzLT5tYXhfcGFyZW50cyA+PSAwKSAmJiAobiA+IHJldnMtPm1heF9wYXJlbnRzKSkpCisJCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwl9CisJaWYgKCFjb21taXRfbWF0Y2goY29tbWl0LCByZXZzKSkKKwkJcmV0dXJuIGNvbW1pdF9pZ25vcmU7CisJaWYgKHJldnMtPnBydW5lICYmIHJldnMtPmRlbnNlKSB7CisJCS8qIENvbW1pdCB3aXRob3V0IGNoYW5nZXM/ICovCisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFRSRUVTQU1FKSB7CisJCQlpbnQgbjsKKwkJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKwkJCS8qIGRyb3AgbWVyZ2VzIHVubGVzcyB3ZSB3YW50IHBhcmVudGhvb2QgKi8KKwkJCWlmICghd2FudF9hbmNlc3RyeShyZXZzKSkKKwkJCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwkJCS8qCisJCQkgKiBJZiB3ZSB3YW50IGFuY2VzdHJ5LCB0aGVuIG5lZWQgdG8ga2VlcCBhbnkgbWVyZ2VzCisJCQkgKiBiZXR3ZWVuIHJlbGV2YW50IGNvbW1pdHMgdG8gdGllIHRvZ2V0aGVyIHRvcG9sb2d5LgorCQkJICogRm9yIGNvbnNpc3RlbmN5IHdpdGggVFJFRVNBTUUgYW5kIHNpbXBsaWZpY2F0aW9uCisJCQkgKiB1c2UgInJlbGV2YW50IiBoZXJlIHJhdGhlciB0aGFuIGp1c3QgSU5URVJFU1RJTkcsCisJCQkgKiB0byB0cmVhdCBib3R0b20gY29tbWl0KHMpIGFzIHBhcnQgb2YgdGhlIHRvcG9sb2d5LgorCQkJICovCisJCQlmb3IgKG4gPSAwLCBwID0gY29tbWl0LT5wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkKKwkJCQlpZiAocmVsZXZhbnRfY29tbWl0KHAtPml0ZW0pKQorCQkJCQlpZiAoKytuID49IDIpCisJCQkJCQlyZXR1cm4gY29tbWl0X3Nob3c7CisJCQlyZXR1cm4gY29tbWl0X2lnbm9yZTsKKwkJfQorCX0KKwlyZXR1cm4gY29tbWl0X3Nob3c7Cit9CisKK2RlZmluZV9jb21taXRfc2xhYihzYXZlZF9wYXJlbnRzLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKik7CisKKyNkZWZpbmUgRU1QVFlfUEFSRU5UX0xJU1QgKChzdHJ1Y3QgY29tbWl0X2xpc3QgKiktMSkKKworLyoKKyAqIFlvdSBtYXkgb25seSBjYWxsIHNhdmVfcGFyZW50cygpIG9uY2UgcGVyIGNvbW1pdCAodGhpcyBpcyBjaGVja2VkCisgKiBmb3Igbm9uLXJvb3QgY29tbWl0cykuCisgKi8KK3N0YXRpYyB2b2lkIHNhdmVfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKipwcDsKKworCWlmICghcmV2cy0+c2F2ZWRfcGFyZW50c19zbGFiKSB7CisJCXJldnMtPnNhdmVkX3BhcmVudHNfc2xhYiA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzYXZlZF9wYXJlbnRzKSk7CisJCWluaXRfc2F2ZWRfcGFyZW50cyhyZXZzLT5zYXZlZF9wYXJlbnRzX3NsYWIpOworCX0KKworCXBwID0gc2F2ZWRfcGFyZW50c19hdChyZXZzLT5zYXZlZF9wYXJlbnRzX3NsYWIsIGNvbW1pdCk7CisKKwkvKgorCSAqIFdoZW4gd2Fsa2luZyB3aXRoIHJlZmxvZ3MsIHdlIG1heSB2aXNpdCB0aGUgc2FtZSBjb21taXQKKwkgKiBzZXZlcmFsIHRpbWVzOiBvbmNlIGZvciBlYWNoIGFwcGVhcmFuY2UgaW4gdGhlIHJlZmxvZy4KKwkgKgorCSAqIEluIHRoaXMgY2FzZSwgc2F2ZV9wYXJlbnRzKCkgd2lsbCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuCisJICogV2Ugd2FudCB0byBrZWVwIG9ubHkgdGhlIGZpcnN0IHNldCBvZiBwYXJlbnRzLiAgV2UgbmVlZCB0bworCSAqIHN0b3JlIGEgc2VudGluZWwgdmFsdWUgZm9yIGFuIGVtcHR5IChpLmUuLCBOVUxMKSBwYXJlbnQKKwkgKiBsaXN0IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gYSBub3QteWV0LXNhdmVkIGxpc3QsIGhvd2V2ZXIuCisJICovCisJaWYgKCpwcCkKKwkJcmV0dXJuOworCWlmIChjb21taXQtPnBhcmVudHMpCisJCSpwcCA9IGNvcHlfY29tbWl0X2xpc3QoY29tbWl0LT5wYXJlbnRzKTsKKwllbHNlCisJCSpwcCA9IEVNUFRZX1BBUkVOVF9MSVNUOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3NhdmVkX3BhcmVudHMoc3RydWN0IHJldl9pbmZvICpyZXZzKQoreworCWlmIChyZXZzLT5zYXZlZF9wYXJlbnRzX3NsYWIpCisJCWNsZWFyX3NhdmVkX3BhcmVudHMocmV2cy0+c2F2ZWRfcGFyZW50c19zbGFiKTsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfc2F2ZWRfcGFyZW50cyhzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHM7CisKKwlpZiAoIXJldnMtPnNhdmVkX3BhcmVudHNfc2xhYikKKwkJcmV0dXJuIGNvbW1pdC0+cGFyZW50czsKKworCXBhcmVudHMgPSAqc2F2ZWRfcGFyZW50c19hdChyZXZzLT5zYXZlZF9wYXJlbnRzX3NsYWIsIGNvbW1pdCk7CisJaWYgKHBhcmVudHMgPT0gRU1QVFlfUEFSRU5UX0xJU1QpCisJCXJldHVybiBOVUxMOworCXJldHVybiBwYXJlbnRzOworfQorCitlbnVtIGNvbW1pdF9hY3Rpb24gc2ltcGxpZnlfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWVudW0gY29tbWl0X2FjdGlvbiBhY3Rpb24gPSBnZXRfY29tbWl0X2FjdGlvbihyZXZzLCBjb21taXQpOworCisJaWYgKGFjdGlvbiA9PSBjb21taXRfc2hvdyAmJgorCSAgICAhcmV2cy0+c2hvd19hbGwgJiYKKwkgICAgcmV2cy0+cHJ1bmUgJiYgcmV2cy0+ZGVuc2UgJiYgd2FudF9hbmNlc3RyeShyZXZzKSkgeworCQkvKgorCQkgKiAtLWZ1bGwtZGlmZiBvbiBzaW1wbGlmaWVkIHBhcmVudHMgaXMgbm8gZ29vZDogaXQKKwkJICogd2lsbCBzaG93IHNwdXJpb3VzIGNoYW5nZXMgZnJvbSB0aGUgY29tbWl0cyB0aGF0CisJCSAqIHdlcmUgZWxpZGVkLiAgU28gd2Ugc2F2ZSB0aGUgcGFyZW50cyBvbiB0aGUgc2lkZQorCQkgKiB3aGVuIC0tZnVsbC1kaWZmIGlzIGluIGVmZmVjdC4KKwkJICovCisJCWlmIChyZXZzLT5mdWxsX2RpZmYpCisJCQlzYXZlX3BhcmVudHMocmV2cywgY29tbWl0KTsKKwkJaWYgKHJld3JpdGVfcGFyZW50cyhyZXZzLCBjb21taXQsIHJld3JpdGVfb25lKSA8IDApCisJCQlyZXR1cm4gY29tbWl0X2Vycm9yOworCX0KKwlyZXR1cm4gYWN0aW9uOworfQorCitzdGF0aWMgdm9pZCB0cmFja19saW5lYXIoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaWYgKHJldnMtPnRyYWNrX2ZpcnN0X3RpbWUpIHsKKwkJcmV2cy0+bGluZWFyID0gMTsKKwkJcmV2cy0+dHJhY2tfZmlyc3RfdGltZSA9IDA7CisJfSBlbHNlIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCQlmb3IgKHAgPSByZXZzLT5wcmV2aW91c19wYXJlbnRzOyBwOyBwID0gcC0+bmV4dCkKKwkJCWlmIChwLT5pdGVtID09IE5VTEwgfHwgLyogZmlyc3QgY29tbWl0ICovCisJCQkgICAgIWhhc2hjbXAocC0+aXRlbS0+b2JqZWN0LnNoYTEsIGNvbW1pdC0+b2JqZWN0LnNoYTEpKQorCQkJCWJyZWFrOworCQlyZXZzLT5saW5lYXIgPSBwICE9IE5VTEw7CisJfQorCWlmIChyZXZzLT5yZXZlcnNlKSB7CisJCWlmIChyZXZzLT5saW5lYXIpCisJCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBUUkFDS19MSU5FQVI7CisJfQorCWZyZWVfY29tbWl0X2xpc3QocmV2cy0+cHJldmlvdXNfcGFyZW50cyk7CisJcmV2cy0+cHJldmlvdXNfcGFyZW50cyA9IGNvcHlfY29tbWl0X2xpc3QoY29tbWl0LT5wYXJlbnRzKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9yZXZpc2lvbl8xKHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwlpZiAoIXJldnMtPmNvbW1pdHMpCisJCXJldHVybiBOVUxMOworCisJZG8geworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmVudHJ5ID0gcmV2cy0+Y29tbWl0czsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gZW50cnktPml0ZW07CisKKwkJcmV2cy0+Y29tbWl0cyA9IGVudHJ5LT5uZXh0OworCQlmcmVlKGVudHJ5KTsKKworCQlpZiAocmV2cy0+cmVmbG9nX2luZm8pIHsKKwkJCXNhdmVfcGFyZW50cyhyZXZzLCBjb21taXQpOworCQkJZmFrZV9yZWZsb2dfcGFyZW50KHJldnMtPnJlZmxvZ19pbmZvLCBjb21taXQpOworCQkJY29tbWl0LT5vYmplY3QuZmxhZ3MgJj0gfihBRERFRCB8IFNFRU4gfCBTSE9XTik7CisJCX0KKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlbid0IGRvbmUgdGhlIGxpc3QgbGltaXRpbmcsIHdlIG5lZWQgdG8gbG9vayBhdAorCQkgKiB0aGUgcGFyZW50cyBoZXJlLiBXZSBhbHNvIG5lZWQgdG8gZG8gdGhlIGRhdGUtYmFzZWQgbGltaXRpbmcKKwkJICogdGhhdCB3ZSdkIG90aGVyd2lzZSBoYXZlIGRvbmUgaW4gbGltaXRfbGlzdCgpLgorCQkgKi8KKwkJaWYgKCFyZXZzLT5saW1pdGVkKSB7CisJCQlpZiAocmV2cy0+bWF4X2FnZSAhPSAtMSAmJgorCQkJICAgIChjb21taXQtPmRhdGUgPCByZXZzLT5tYXhfYWdlKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChhZGRfcGFyZW50c190b19saXN0KHJldnMsIGNvbW1pdCwgJnJldnMtPmNvbW1pdHMsIE5VTEwpIDwgMCkgeworCQkJCWlmICghcmV2cy0+aWdub3JlX21pc3NpbmdfbGlua3MpCisJCQkJCWRpZSgiRmFpbGVkIHRvIHRyYXZlcnNlIHBhcmVudHMgb2YgY29tbWl0ICVzIiwKKwkJCQkJCXNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwkJCX0KKwkJfQorCisJCXN3aXRjaCAoc2ltcGxpZnlfY29tbWl0KHJldnMsIGNvbW1pdCkpIHsKKwkJY2FzZSBjb21taXRfaWdub3JlOgorCQkJY29udGludWU7CisJCWNhc2UgY29tbWl0X2Vycm9yOgorCQkJZGllKCJGYWlsZWQgdG8gc2ltcGxpZnkgcGFyZW50cyBvZiBjb21taXQgJXMiLAorCQkJICAgIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwkJZGVmYXVsdDoKKwkJCWlmIChyZXZzLT50cmFja19saW5lYXIpCisJCQkJdHJhY2tfbGluZWFyKHJldnMsIGNvbW1pdCk7CisJCQlyZXR1cm4gY29tbWl0OworCQl9CisJfSB3aGlsZSAocmV2cy0+Y29tbWl0cyk7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBmb3IgZW50cmllcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHNob3duLiAgKFRoaXMgaXMgYW4KKyAqIG9iamVjdF9hcnJheV9lYWNoX2Z1bmNfdC4pCisgKi8KK3N0YXRpYyBpbnQgZW50cnlfdW5zaG93bihzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICplbnRyeSwgdm9pZCAqY2JfZGF0YV91bnVzZWQpCit7CisJcmV0dXJuICEoZW50cnktPml0ZW0tPmZsYWdzICYgU0hPV04pOworfQorCisvKgorICogSWYgYXJyYXkgaXMgb24gdGhlIHZlcmdlIG9mIGEgcmVhbGxvYywgZ2FyYmFnZS1jb2xsZWN0IGFueSBlbnRyaWVzCisgKiB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHNob3duIHRvIHRyeSB0byBmcmVlIHVwIHNvbWUgc3BhY2UuCisgKi8KK3N0YXRpYyB2b2lkIGdjX2JvdW5kYXJ5KHN0cnVjdCBvYmplY3RfYXJyYXkgKmFycmF5KQoreworCWlmIChhcnJheS0+bnIgPT0gYXJyYXktPmFsbG9jKQorCQlvYmplY3RfYXJyYXlfZmlsdGVyKGFycmF5LCBlbnRyeV91bnNob3duLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX2JvdW5kYXJ5X2NvbW1pdF9saXN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cykKK3sKKwl1bnNpZ25lZCBpOworCXN0cnVjdCBjb21taXQgKmM7CisJc3RydWN0IG9iamVjdF9hcnJheSAqYXJyYXkgPSAmcmV2cy0+Ym91bmRhcnlfY29tbWl0czsKKwlzdHJ1Y3Qgb2JqZWN0X2FycmF5X2VudHJ5ICpvYmplY3RzID0gYXJyYXktPm9iamVjdHM7CisKKwkvKgorCSAqIElmIHJldnMtPmNvbW1pdHMgaXMgbm9uLU5VTEwgYXQgdGhpcyBwb2ludCwgYW4gZXJyb3Igb2NjdXJyZWQgaW4KKwkgKiBnZXRfcmV2aXNpb25fMSgpLiAgSWdub3JlIHRoZSBlcnJvciBhbmQgY29udGludWUgcHJpbnRpbmcgdGhlCisJICogYm91bmRhcnkgY29tbWl0cyBhbnl3YXkuICAoVGhpcyBpcyB3aGF0IHRoZSBjb2RlIGhhcyBhbHdheXMKKwkgKiBkb25lLikKKwkgKi8KKwlpZiAocmV2cy0+Y29tbWl0cykgeworCQlmcmVlX2NvbW1pdF9saXN0KHJldnMtPmNvbW1pdHMpOworCQlyZXZzLT5jb21taXRzID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIFB1dCBhbGwgb2YgdGhlIGFjdHVhbCBib3VuZGFyeSBjb21taXRzIGZyb20gcmV2cy0+Ym91bmRhcnlfY29tbWl0cworCSAqIGludG8gcmV2cy0+Y29tbWl0cworCSAqLworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+bnI7IGkrKykgeworCQljID0gKHN0cnVjdCBjb21taXQgKikob2JqZWN0c1tpXS5pdGVtKTsKKwkJaWYgKCFjKQorCQkJY29udGludWU7CisJCWlmICghKGMtPm9iamVjdC5mbGFncyAmIENISUxEX1NIT1dOKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoYy0+b2JqZWN0LmZsYWdzICYgKFNIT1dOIHwgQk9VTkRBUlkpKQorCQkJY29udGludWU7CisJCWMtPm9iamVjdC5mbGFncyB8PSBCT1VOREFSWTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KGMsICZyZXZzLT5jb21taXRzKTsKKwl9CisKKwkvKgorCSAqIElmIHJldnMtPnRvcG9fb3JkZXIgaXMgc2V0LCBzb3J0IHRoZSBib3VuZGFyeSBjb21taXRzCisJICogaW4gdG9wb2xvZ2ljYWwgb3JkZXIKKwkgKi8KKwlzb3J0X2luX3RvcG9sb2dpY2FsX29yZGVyKCZyZXZzLT5jb21taXRzLCByZXZzLT5zb3J0X29yZGVyKTsKK30KKworc3RhdGljIHN0cnVjdCBjb21taXQgKmdldF9yZXZpc2lvbl9pbnRlcm5hbChzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdCAqYyA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9saXN0ICpsOworCisJaWYgKHJldnMtPmJvdW5kYXJ5ID09IDIpIHsKKwkJLyoKKwkJICogQWxsIG9mIHRoZSBub3JtYWwgY29tbWl0cyBoYXZlIGFscmVhZHkgYmVlbiByZXR1cm5lZCwKKwkJICogYW5kIHdlIGFyZSBub3cgcmV0dXJuaW5nIGJvdW5kYXJ5IGNvbW1pdHMuCisJCSAqIGNyZWF0ZV9ib3VuZGFyeV9jb21taXRfbGlzdCgpIGhhcyBwb3B1bGF0ZWQKKwkJICogcmV2cy0+Y29tbWl0cyB3aXRoIHRoZSByZW1haW5pbmcgY29tbWl0cyB0byByZXR1cm4uCisJCSAqLworCQljID0gcG9wX2NvbW1pdCgmcmV2cy0+Y29tbWl0cyk7CisJCWlmIChjKQorCQkJYy0+b2JqZWN0LmZsYWdzIHw9IFNIT1dOOworCQlyZXR1cm4gYzsKKwl9CisKKwkvKgorCSAqIElmIG91ciBtYXhfY291bnQgY291bnRlciBoYXMgcmVhY2hlZCB6ZXJvLCB0aGVuIHdlIGFyZSBkb25lLiBXZQorCSAqIGRvbid0IHNpbXBseSByZXR1cm4gTlVMTCBiZWNhdXNlIHdlIHN0aWxsIG1pZ2h0IG5lZWQgdG8gc2hvdworCSAqIGJvdW5kYXJ5IGNvbW1pdHMuIEJ1dCB3ZSB3YW50IHRvIGF2b2lkIGNhbGxpbmcgZ2V0X3JldmlzaW9uXzEsIHdoaWNoCisJICogbWlnaHQgZG8gYSBjb25zaWRlcmFibGUgYW1vdW50IG9mIHdvcmsgZmluZGluZyB0aGUgbmV4dCBjb21taXQgb25seQorCSAqIGZvciB1cyB0byB0aHJvdyBpdCBhd2F5LgorCSAqCisJICogSWYgaXQgaXMgbm9uLXplcm8sIHRoZW4gZWl0aGVyIHdlIGRvbid0IGhhdmUgYSBtYXhfY291bnQgYXQgYWxsCisJICogKC0xKSwgb3IgaXQgaXMgc3RpbGwgY291bnRpbmcsIGluIHdoaWNoIGNhc2Ugd2UgZGVjcmVtZW50LgorCSAqLworCWlmIChyZXZzLT5tYXhfY291bnQpIHsKKwkJYyA9IGdldF9yZXZpc2lvbl8xKHJldnMpOworCQlpZiAoYykgeworCQkJd2hpbGUgKHJldnMtPnNraXBfY291bnQgPiAwKSB7CisJCQkJcmV2cy0+c2tpcF9jb3VudC0tOworCQkJCWMgPSBnZXRfcmV2aXNpb25fMShyZXZzKTsKKwkJCQlpZiAoIWMpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKHJldnMtPm1heF9jb3VudCA+IDApCisJCQlyZXZzLT5tYXhfY291bnQtLTsKKwl9CisKKwlpZiAoYykKKwkJYy0+b2JqZWN0LmZsYWdzIHw9IFNIT1dOOworCisJaWYgKCFyZXZzLT5ib3VuZGFyeSkKKwkJcmV0dXJuIGM7CisKKwlpZiAoIWMpIHsKKwkJLyoKKwkJICogZ2V0X3JldmlzaW9uXzEoKSBydW5zIG91dCB0aGUgY29tbWl0cywgYW5kCisJCSAqIHdlIGFyZSBkb25lIGNvbXB1dGluZyB0aGUgYm91bmRhcmllcy4KKwkJICogc3dpdGNoIHRvIGJvdW5kYXJ5IGNvbW1pdHMgb3V0cHV0IG1vZGUuCisJCSAqLworCQlyZXZzLT5ib3VuZGFyeSA9IDI7CisKKwkJLyoKKwkJICogVXBkYXRlIHJldnMtPmNvbW1pdHMgdG8gY29udGFpbiB0aGUgbGlzdCBvZgorCQkgKiBib3VuZGFyeSBjb21taXRzLgorCQkgKi8KKwkJY3JlYXRlX2JvdW5kYXJ5X2NvbW1pdF9saXN0KHJldnMpOworCisJCXJldHVybiBnZXRfcmV2aXNpb25faW50ZXJuYWwocmV2cyk7CisJfQorCisJLyoKKwkgKiBib3VuZGFyeSBjb21taXRzIGFyZSB0aGUgY29tbWl0cyB0aGF0IGFyZSBwYXJlbnRzIG9mIHRoZQorCSAqIG9uZXMgd2UgZ290IGZyb20gZ2V0X3JldmlzaW9uXzEoKSBidXQgdGhleSB0aGVtc2VsdmVzIGFyZQorCSAqIG5vdCByZXR1cm5lZCBmcm9tIGdldF9yZXZpc2lvbl8xKCkuICBCZWZvcmUgcmV0dXJuaW5nCisJICogJ2MnLCB3ZSBuZWVkIHRvIG1hcmsgaXRzIHBhcmVudHMgdGhhdCB0aGV5IGNvdWxkIGJlIGJvdW5kYXJpZXMuCisJICovCisKKwlmb3IgKGwgPSBjLT5wYXJlbnRzOyBsOyBsID0gbC0+bmV4dCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpwOworCQlwID0gJihsLT5pdGVtLT5vYmplY3QpOworCQlpZiAocC0+ZmxhZ3MgJiAoQ0hJTERfU0hPV04gfCBTSE9XTikpCisJCQljb250aW51ZTsKKwkJcC0+ZmxhZ3MgfD0gQ0hJTERfU0hPV047CisJCWdjX2JvdW5kYXJ5KCZyZXZzLT5ib3VuZGFyeV9jb21taXRzKTsKKwkJYWRkX29iamVjdF9hcnJheShwLCBOVUxMLCAmcmV2cy0+Ym91bmRhcnlfY29tbWl0cyk7CisJfQorCisJcmV0dXJuIGM7Cit9CisKK3N0cnVjdCBjb21taXQgKmdldF9yZXZpc2lvbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMpCit7CisJc3RydWN0IGNvbW1pdCAqYzsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJldmVyc2VkOworCisJaWYgKHJldnMtPnJldmVyc2UpIHsKKwkJcmV2ZXJzZWQgPSBOVUxMOworCQl3aGlsZSAoKGMgPSBnZXRfcmV2aXNpb25faW50ZXJuYWwocmV2cykpKQorCQkJY29tbWl0X2xpc3RfaW5zZXJ0KGMsICZyZXZlcnNlZCk7CisJCXJldnMtPmNvbW1pdHMgPSByZXZlcnNlZDsKKwkJcmV2cy0+cmV2ZXJzZSA9IDA7CisJCXJldnMtPnJldmVyc2Vfb3V0cHV0X3N0YWdlID0gMTsKKwl9CisKKwlpZiAocmV2cy0+cmV2ZXJzZV9vdXRwdXRfc3RhZ2UpIHsKKwkJYyA9IHBvcF9jb21taXQoJnJldnMtPmNvbW1pdHMpOworCQlpZiAocmV2cy0+dHJhY2tfbGluZWFyKQorCQkJcmV2cy0+bGluZWFyID0gISEoYyAmJiBjLT5vYmplY3QuZmxhZ3MgJiBUUkFDS19MSU5FQVIpOworCQlyZXR1cm4gYzsKKwl9CisKKwljID0gZ2V0X3JldmlzaW9uX2ludGVybmFsKHJldnMpOworCWlmIChjICYmIHJldnMtPmdyYXBoKQorCQlncmFwaF91cGRhdGUocmV2cy0+Z3JhcGgsIGMpOworCWlmICghYykgeworCQlmcmVlX3NhdmVkX3BhcmVudHMocmV2cyk7CisJCWlmIChyZXZzLT5wcmV2aW91c19wYXJlbnRzKSB7CisJCQlmcmVlX2NvbW1pdF9saXN0KHJldnMtPnByZXZpb3VzX3BhcmVudHMpOworCQkJcmV2cy0+cHJldmlvdXNfcGFyZW50cyA9IE5VTEw7CisJCX0KKwl9CisJcmV0dXJuIGM7Cit9CisKK2NoYXIgKmdldF9yZXZpc2lvbl9tYXJrKGNvbnN0IHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIEJPVU5EQVJZKQorCQlyZXR1cm4gIi0iOworCWVsc2UgaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVU5JTlRFUkVTVElORykKKwkJcmV0dXJuICJeIjsKKwllbHNlIGlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFBBVENIU0FNRSkKKwkJcmV0dXJuICI9IjsKKwllbHNlIGlmICghcmV2cyB8fCByZXZzLT5sZWZ0X3JpZ2h0KSB7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKQorCQkJcmV0dXJuICI8IjsKKwkJZWxzZQorCQkJcmV0dXJuICI+IjsKKwl9IGVsc2UgaWYgKHJldnMtPmdyYXBoKQorCQlyZXR1cm4gIioiOworCWVsc2UgaWYgKHJldnMtPmNoZXJyeV9tYXJrKQorCQlyZXR1cm4gIisiOworCXJldHVybiAiIjsKK30KKwordm9pZCBwdXRfcmV2aXNpb25fbWFyayhjb25zdCBzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIGNvbnN0IHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwljaGFyICptYXJrID0gZ2V0X3JldmlzaW9uX21hcmsocmV2cywgY29tbWl0KTsKKwlpZiAoIXN0cmxlbihtYXJrKSkKKwkJcmV0dXJuOworCWZwdXRzKG1hcmssIHN0ZG91dCk7CisJcHV0Y2hhcignICcpOworfQpkaWZmIC0tZ2l0IGEvcmV2aXNpb24uaCBiL3JldmlzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjOTY4NgotLS0gL2Rldi9udWxsCisrKyBiL3JldmlzaW9uLmgKQEAgLTAsMCArMSwzMTMgQEAKKyNpZm5kZWYgUkVWSVNJT05fSAorI2RlZmluZSBSRVZJU0lPTl9ICisKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAiZ3JlcC5oIgorI2luY2x1ZGUgIm5vdGVzLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZGlmZi5oIgorCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBTRUVOCQkoMXU8PDApCisjZGVmaW5lIFVOSU5URVJFU1RJTkcgICAoMXU8PDEpCisjZGVmaW5lIFRSRUVTQU1FCSgxdTw8MikKKyNkZWZpbmUgU0hPV04JCSgxdTw8MykKKyNkZWZpbmUgVE1QX01BUksJKDF1PDw0KSAvKiBmb3IgaXNvbGF0ZWQgY2FzZXM7IGNsZWFuIGFmdGVyIHVzZSAqLworI2RlZmluZSBCT1VOREFSWQkoMXU8PDUpCisjZGVmaW5lIENISUxEX1NIT1dOCSgxdTw8NikKKyNkZWZpbmUgQURERUQJCSgxdTw8NykJLyogUGFyZW50cyBhbHJlYWR5IHBhcnNlZCBhbmQgYWRkZWQ/ICovCisjZGVmaW5lIFNZTU1FVFJJQ19MRUZUCSgxdTw8OCkKKyNkZWZpbmUgUEFUQ0hTQU1FCSgxdTw8OSkKKyNkZWZpbmUgQk9UVE9NCQkoMXU8PDEwKQorI2RlZmluZSBUUkFDS19MSU5FQVIJKDF1PDwyNikKKyNkZWZpbmUgQUxMX1JFVl9GTEFHUwkoKCgxdTw8MTEpLTEpIHwgVFJBQ0tfTElORUFSKQorCisjZGVmaW5lIERFQ09SQVRFX1NIT1JUX1JFRlMJMQorI2RlZmluZSBERUNPUkFURV9GVUxMX1JFRlMJMgorCitzdHJ1Y3QgcmV2X2luZm87CitzdHJ1Y3QgbG9nX2luZm87CitzdHJ1Y3Qgc3RyaW5nX2xpc3Q7CitzdHJ1Y3Qgc2F2ZWRfcGFyZW50czsKKworc3RydWN0IHJldl9jbWRsaW5lX2luZm8geworCXVuc2lnbmVkIGludCBucjsKKwl1bnNpZ25lZCBpbnQgYWxsb2M7CisJc3RydWN0IHJldl9jbWRsaW5lX2VudHJ5IHsKKwkJc3RydWN0IG9iamVjdCAqaXRlbTsKKwkJY29uc3QgY2hhciAqbmFtZTsKKwkJZW51bSB7CisJCQlSRVZfQ01EX1JFRiwKKwkJCVJFVl9DTURfUEFSRU5UU19PTkxZLAorCQkJUkVWX0NNRF9MRUZULAorCQkJUkVWX0NNRF9SSUdIVCwKKwkJCVJFVl9DTURfTUVSR0VfQkFTRSwKKwkJCVJFVl9DTURfUkVWCisJCX0gd2hlbmNlOworCQl1bnNpZ25lZCBmbGFnczsKKwl9ICpyZXY7Cit9OworCisjZGVmaW5lIFJFVklTSU9OX1dBTEtfV0FMSyAwCisjZGVmaW5lIFJFVklTSU9OX1dBTEtfTk9fV0FMS19TT1JURUQgMQorI2RlZmluZSBSRVZJU0lPTl9XQUxLX05PX1dBTEtfVU5TT1JURUQgMgorCitzdHJ1Y3QgcmV2X2luZm8geworCS8qIFN0YXJ0aW5nIGxpc3QgKi8KKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKmNvbW1pdHM7CisJc3RydWN0IG9iamVjdF9hcnJheSBwZW5kaW5nOworCisJLyogUGFyZW50cyBvZiBzaG93biBjb21taXRzICovCisJc3RydWN0IG9iamVjdF9hcnJheSBib3VuZGFyeV9jb21taXRzOworCisJLyogVGhlIGVuZC1wb2ludHMgc3BlY2lmaWVkIGJ5IHRoZSBlbmQgdXNlciAqLworCXN0cnVjdCByZXZfY21kbGluZV9pbmZvIGNtZGxpbmU7CisKKwkvKiBleGNsdWRpbmcgZnJvbSAtLWJyYW5jaGVzLCAtLXJlZnMsIGV0Yy4gZXhwYW5zaW9uICovCisJc3RydWN0IHN0cmluZ19saXN0ICpyZWZfZXhjbHVkZXM7CisKKwkvKiBCYXNpYyBpbmZvcm1hdGlvbiAqLworCWNvbnN0IGNoYXIgKnByZWZpeDsKKwljb25zdCBjaGFyICpkZWY7CisJc3RydWN0IHBhdGhzcGVjIHBydW5lX2RhdGE7CisKKwkvKiB0b3BvLXNvcnQgKi8KKwllbnVtIHJldl9zb3J0X29yZGVyIHNvcnRfb3JkZXI7CisKKwl1bnNpZ25lZCBpbnQJZWFybHlfb3V0cHV0OjEsCisJCQlpZ25vcmVfbWlzc2luZzoxLAorCQkJaWdub3JlX21pc3NpbmdfbGlua3M6MTsKKworCS8qIFRyYXZlcnNhbCBmbGFncyAqLworCXVuc2lnbmVkIGludAlkZW5zZToxLAorCQkJcHJ1bmU6MSwKKwkJCW5vX3dhbGs6MiwKKwkJCXNob3dfYWxsOjEsCisJCQlyZW1vdmVfZW1wdHlfdHJlZXM6MSwKKwkJCXNpbXBsaWZ5X2hpc3Rvcnk6MSwKKwkJCXRvcG9fb3JkZXI6MSwKKwkJCXNpbXBsaWZ5X21lcmdlczoxLAorCQkJc2ltcGxpZnlfYnlfZGVjb3JhdGlvbjoxLAorCQkJdGFnX29iamVjdHM6MSwKKwkJCXRyZWVfb2JqZWN0czoxLAorCQkJYmxvYl9vYmplY3RzOjEsCisJCQl2ZXJpZnlfb2JqZWN0czoxLAorCQkJZWRnZV9oaW50OjEsCisJCQllZGdlX2hpbnRfYWdncmVzc2l2ZToxLAorCQkJbGltaXRlZDoxLAorCQkJdW5wYWNrZWQ6MSwKKwkJCWJvdW5kYXJ5OjIsCisJCQljb3VudDoxLAorCQkJbGVmdF9yaWdodDoxLAorCQkJbGVmdF9vbmx5OjEsCisJCQlyaWdodF9vbmx5OjEsCisJCQlyZXdyaXRlX3BhcmVudHM6MSwKKwkJCXByaW50X3BhcmVudHM6MSwKKwkJCXNob3dfc291cmNlOjEsCisJCQlzaG93X2RlY29yYXRpb25zOjEsCisJCQlyZXZlcnNlOjEsCisJCQlyZXZlcnNlX291dHB1dF9zdGFnZToxLAorCQkJY2hlcnJ5X3BpY2s6MSwKKwkJCWNoZXJyeV9tYXJrOjEsCisJCQliaXNlY3Q6MSwKKwkJCWFuY2VzdHJ5X3BhdGg6MSwKKwkJCWZpcnN0X3BhcmVudF9vbmx5OjEsCisJCQlsaW5lX2xldmVsX3RyYXZlcnNlOjE7CisKKwkvKiBEaWZmIGZsYWdzICovCisJdW5zaWduZWQgaW50CWRpZmY6MSwKKwkJCWZ1bGxfZGlmZjoxLAorCQkJc2hvd19yb290X2RpZmY6MSwKKwkJCW5vX2NvbW1pdF9pZDoxLAorCQkJdmVyYm9zZV9oZWFkZXI6MSwKKwkJCWlnbm9yZV9tZXJnZXM6MSwKKwkJCWNvbWJpbmVfbWVyZ2VzOjEsCisJCQlkZW5zZV9jb21iaW5lZF9tZXJnZXM6MSwKKwkJCWFsd2F5c19zaG93X2hlYWRlcjoxOworCisJLyogRm9ybWF0IGluZm8gKi8KKwl1bnNpZ25lZCBpbnQJc2hvd25fb25lOjEsCisJCQlzaG93bl9kYXNoZXM6MSwKKwkJCXNob3dfbWVyZ2U6MSwKKwkJCXNob3dfbm90ZXM6MSwKKwkJCXNob3dfbm90ZXNfZ2l2ZW46MSwKKwkJCXNob3dfc2lnbmF0dXJlOjEsCisJCQlwcmV0dHlfZ2l2ZW46MSwKKwkJCWFiYnJldl9jb21taXQ6MSwKKwkJCWFiYnJldl9jb21taXRfZ2l2ZW46MSwKKwkJCXVzZV90ZXJtaW5hdG9yOjEsCisJCQltaXNzaW5nX25ld2xpbmU6MSwKKwkJCWRhdGVfbW9kZV9leHBsaWNpdDoxLAorCQkJcHJlc2VydmVfc3ViamVjdDoxOworCXVuc2lnbmVkIGludAlkaXNhYmxlX3N0ZGluOjE7CisJdW5zaWduZWQgaW50CWxlYWtfcGVuZGluZzoxOworCS8qIC0tc2hvdy1saW5lYXItYnJlYWsgKi8KKwl1bnNpZ25lZCBpbnQJdHJhY2tfbGluZWFyOjEsCisJCQl0cmFja19maXJzdF90aW1lOjEsCisJCQlsaW5lYXI6MTsKKworCXN0cnVjdCBkYXRlX21vZGUgZGF0ZV9tb2RlOworCisJdW5zaWduZWQgaW50CWFiYnJldjsKKwllbnVtIGNtaXRfZm10CWNvbW1pdF9mb3JtYXQ7CisJc3RydWN0IGxvZ19pbmZvICpsb2dpbmZvOworCWludAkJbnIsIHRvdGFsOworCWNvbnN0IGNoYXIJKm1pbWVfYm91bmRhcnk7CisJY29uc3QgY2hhcgkqcGF0Y2hfc3VmZml4OworCWludAkJbnVtYmVyZWRfZmlsZXM7CisJaW50CQlyZXJvbGxfY291bnQ7CisJY2hhcgkJKm1lc3NhZ2VfaWQ7CisJc3RydWN0IGlkZW50X3NwbGl0IGZyb21faWRlbnQ7CisJc3RydWN0IHN0cmluZ19saXN0ICpyZWZfbWVzc2FnZV9pZHM7CisJaW50CQlhZGRfc2lnbm9mZjsKKwljb25zdCBjaGFyCSpleHRyYV9oZWFkZXJzOworCWNvbnN0IGNoYXIJKmxvZ19yZWVuY29kZTsKKwljb25zdCBjaGFyCSpzdWJqZWN0X3ByZWZpeDsKKwlpbnQJCW5vX2lubGluZTsKKwlpbnQJCXNob3dfbG9nX3NpemU7CisJc3RydWN0IHN0cmluZ19saXN0ICptYWlsbWFwOworCisJLyogRmlsdGVyIGJ5IGNvbW1pdCBsb2cgbWVzc2FnZSAqLworCXN0cnVjdCBncmVwX29wdAlncmVwX2ZpbHRlcjsKKwkvKiBOZWdhdGUgdGhlIG1hdGNoIG9mIGdyZXBfZmlsdGVyICovCisJaW50IGludmVydF9ncmVwOworCisJLyogRGlzcGxheSBoaXN0b3J5IGdyYXBoICovCisJc3RydWN0IGdpdF9ncmFwaCAqZ3JhcGg7CisKKwkvKiBzcGVjaWFsIGxpbWl0cyAqLworCWludCBza2lwX2NvdW50OworCWludCBtYXhfY291bnQ7CisJdW5zaWduZWQgbG9uZyBtYXhfYWdlOworCXVuc2lnbmVkIGxvbmcgbWluX2FnZTsKKwlpbnQgbWluX3BhcmVudHM7CisJaW50IG1heF9wYXJlbnRzOworCWludCAoKmluY2x1ZGVfY2hlY2spKHN0cnVjdCBjb21taXQgKiwgdm9pZCAqKTsKKwl2b2lkICppbmNsdWRlX2NoZWNrX2RhdGE7CisKKwkvKiBkaWZmIGluZm8gZm9yIHBhdGNoZXMgYW5kIGZvciBwYXRocyBsaW1pdGluZyAqLworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZm9wdDsKKwlzdHJ1Y3QgZGlmZl9vcHRpb25zIHBydW5pbmc7CisKKwlzdHJ1Y3QgcmVmbG9nX3dhbGtfaW5mbyAqcmVmbG9nX2luZm87CisJc3RydWN0IGRlY29yYXRpb24gY2hpbGRyZW47CisJc3RydWN0IGRlY29yYXRpb24gbWVyZ2Vfc2ltcGxpZmljYXRpb247CisJc3RydWN0IGRlY29yYXRpb24gdHJlZXNhbWU7CisKKwkvKiBub3Rlcy1zcGVjaWZpYyBvcHRpb25zOiB3aGljaCByZWZzIHRvIHNob3cgKi8KKwlzdHJ1Y3QgZGlzcGxheV9ub3Rlc19vcHQgbm90ZXNfb3B0OworCisJLyogY29tbWl0IGNvdW50cyAqLworCWludCBjb3VudF9sZWZ0OworCWludCBjb3VudF9yaWdodDsKKwlpbnQgY291bnRfc2FtZTsKKworCS8qIGxpbmUgbGV2ZWwgcmFuZ2UgdGhhdCB3ZSBhcmUgY2hhc2luZyAqLworCXN0cnVjdCBkZWNvcmF0aW9uIGxpbmVfbG9nX2RhdGE7CisKKwkvKiBjb3BpZXMgb2YgdGhlIHBhcmVudCBsaXN0cywgZm9yIC0tZnVsbC1kaWZmIGRpc3BsYXkgKi8KKwlzdHJ1Y3Qgc2F2ZWRfcGFyZW50cyAqc2F2ZWRfcGFyZW50c19zbGFiOworCisJc3RydWN0IGNvbW1pdF9saXN0ICpwcmV2aW91c19wYXJlbnRzOworCWNvbnN0IGNoYXIgKmJyZWFrX2JhcjsKK307CisKK2V4dGVybiBpbnQgcmVmX2V4Y2x1ZGVkKHN0cnVjdCBzdHJpbmdfbGlzdCAqLCBjb25zdCBjaGFyICpwYXRoKTsKK3ZvaWQgY2xlYXJfcmVmX2V4Y2x1c2lvbihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKiopOwordm9pZCBhZGRfcmVmX2V4Y2x1c2lvbihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKiosIGNvbnN0IGNoYXIgKmV4Y2x1ZGUpOworCisKKyNkZWZpbmUgUkVWX1RSRUVfU0FNRQkJMAorI2RlZmluZSBSRVZfVFJFRV9ORVcJCTEJLyogT25seSBuZXcgZmlsZXMgKi8KKyNkZWZpbmUgUkVWX1RSRUVfT0xECQkyCS8qIE9ubHkgZmlsZXMgcmVtb3ZlZCAqLworI2RlZmluZSBSRVZfVFJFRV9ESUZGRVJFTlQJMwkvKiBNaXhlZCBjaGFuZ2VzICovCisKKy8qIHJldmlzaW9uLmMgKi8KK3R5cGVkZWYgdm9pZCAoKnNob3dfZWFybHlfb3V0cHV0X2ZuX3QpKHN0cnVjdCByZXZfaW5mbyAqLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKik7CitleHRlcm4gdm9sYXRpbGUgc2hvd19lYXJseV9vdXRwdXRfZm5fdCBzaG93X2Vhcmx5X291dHB1dDsKKworc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCB7CisJY29uc3QgY2hhciAqZGVmOworCXZvaWQgKCp0d2Vhaykoc3RydWN0IHJldl9pbmZvICosIHN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgKik7CisJY29uc3QgY2hhciAqc3VibW9kdWxlOworCWludCBhc3N1bWVfZGFzaGRhc2g7CisJdW5zaWduZWQgcmV2YXJnX29wdDsKK307CisKK2V4dGVybiB2b2lkIGluaXRfcmV2aXNpb25zKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgc2V0dXBfcmV2aXNpb25zKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndiwgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCAqKTsKK2V4dGVybiB2b2lkIHBhcnNlX3JldmlzaW9uX29wdChzdHJ1Y3QgcmV2X2luZm8gKnJldnMsIHN0cnVjdCBwYXJzZV9vcHRfY3R4X3QgKmN0eCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHRpb25zLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZXN0cltdKTsKKyNkZWZpbmUgUkVWQVJHX0NBTk5PVF9CRV9GSUxFTkFNRSAwMQorI2RlZmluZSBSRVZBUkdfQ09NTUlUVElTSCAwMgorZXh0ZXJuIGludCBoYW5kbGVfcmV2aXNpb25fYXJnKGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgICAgIGludCBmbGFncywgdW5zaWduZWQgcmV2YXJnX29wdCk7CisKK2V4dGVybiB2b2lkIHJlc2V0X3JldmlzaW9uX3dhbGsodm9pZCk7CitleHRlcm4gaW50IHByZXBhcmVfcmV2aXNpb25fd2FsayhzdHJ1Y3QgcmV2X2luZm8gKnJldnMpOworZXh0ZXJuIHN0cnVjdCBjb21taXQgKmdldF9yZXZpc2lvbihzdHJ1Y3QgcmV2X2luZm8gKnJldnMpOworZXh0ZXJuIGNoYXIgKmdldF9yZXZpc2lvbl9tYXJrKGNvbnN0IHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworZXh0ZXJuIHZvaWQgcHV0X3JldmlzaW9uX21hcmsoY29uc3Qgc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKKworZXh0ZXJuIHZvaWQgbWFya19wYXJlbnRzX3VuaW50ZXJlc3Rpbmcoc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKK2V4dGVybiB2b2lkIG1hcmtfdHJlZV91bmludGVyZXN0aW5nKHN0cnVjdCB0cmVlICp0cmVlKTsKKworc3RydWN0IG5hbWVfcGF0aCB7CisJc3RydWN0IG5hbWVfcGF0aCAqdXA7CisJaW50IGVsZW1fbGVuOworCWNvbnN0IGNoYXIgKmVsZW07Cit9OworCitjaGFyICpwYXRoX25hbWUoY29uc3Qgc3RydWN0IG5hbWVfcGF0aCAqcGF0aCwgY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiB2b2lkIHNob3dfb2JqZWN0X3dpdGhfbmFtZShGSUxFICosIHN0cnVjdCBvYmplY3QgKiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBuYW1lX3BhdGggKiwgY29uc3QgY2hhciAqKTsKKworZXh0ZXJuIHZvaWQgYWRkX3BlbmRpbmdfb2JqZWN0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgYWRkX3BlbmRpbmdfc2hhMShzdHJ1Y3QgcmV2X2luZm8gKnJldnMsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CisKK2V4dGVybiB2b2lkIGFkZF9oZWFkX3RvX3BlbmRpbmcoc3RydWN0IHJldl9pbmZvICopOworZXh0ZXJuIHZvaWQgYWRkX3JlZmxvZ3NfdG9fcGVuZGluZyhzdHJ1Y3QgcmV2X2luZm8gKiwgdW5zaWduZWQgaW50IGZsYWdzKTsKK2V4dGVybiB2b2lkIGFkZF9pbmRleF9vYmplY3RzX3RvX3BlbmRpbmcoc3RydWN0IHJldl9pbmZvICosIHVuc2lnbmVkIGludCBmbGFncyk7CisKK2VudW0gY29tbWl0X2FjdGlvbiB7CisJY29tbWl0X2lnbm9yZSwKKwljb21taXRfc2hvdywKKwljb21taXRfZXJyb3IKK307CisKK2V4dGVybiBlbnVtIGNvbW1pdF9hY3Rpb24gZ2V0X2NvbW1pdF9hY3Rpb24oc3RydWN0IHJldl9pbmZvICpyZXZzLAorCQkJCQkgICAgc3RydWN0IGNvbW1pdCAqY29tbWl0KTsKK2V4dGVybiBlbnVtIGNvbW1pdF9hY3Rpb24gc2ltcGxpZnlfY29tbWl0KHN0cnVjdCByZXZfaW5mbyAqcmV2cywKKwkJCQkJICBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCitlbnVtIHJld3JpdGVfcmVzdWx0IHsKKwlyZXdyaXRlX29uZV9vaywKKwlyZXdyaXRlX29uZV9ub3BhcmVudHMsCisJcmV3cml0ZV9vbmVfZXJyb3IKK307CisKK3R5cGVkZWYgZW51bSByZXdyaXRlX3Jlc3VsdCAoKnJld3JpdGVfcGFyZW50X2ZuX3QpKHN0cnVjdCByZXZfaW5mbyAqcmV2cywgc3RydWN0IGNvbW1pdCAqKnBwKTsKKworZXh0ZXJuIGludCByZXdyaXRlX3BhcmVudHMoc3RydWN0IHJldl9pbmZvICpyZXZzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQsCisJcmV3cml0ZV9wYXJlbnRfZm5fdCByZXdyaXRlX3BhcmVudCk7CisKKy8qCisgKiBUaGUgbG9nIG1hY2hpbmVyeSBzYXZlcyB0aGUgb3JpZ2luYWwgcGFyZW50IGxpc3Qgc28gdGhhdAorICogZ2V0X3NhdmVkX3BhcmVudHMoKSBjYW4gbGF0ZXIgdGVsbCB3aGF0IHRoZSByZWFsIHBhcmVudHMgb2YgdGhlCisgKiBjb21taXRzIGFyZSwgd2hlbiBjb21taXQtPnBhcmVudHMgaGFzIGJlZW4gbW9kaWZpZWQgYnkgaGlzdG9yeQorICogc2ltcGlmaWNhdGlvbi4KKyAqCisgKiBnZXRfc2F2ZWRfcGFyZW50cygpIHdpbGwgdHJhbnNwYXJlbnRseSByZXR1cm4gY29tbWl0LT5wYXJlbnRzIGlmCisgKiBoaXN0b3J5IHNpbXBsaWZpY2F0aW9uIGlzIG9mZi4KKyAqLworZXh0ZXJuIHN0cnVjdCBjb21taXRfbGlzdCAqZ2V0X3NhdmVkX3BhcmVudHMoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3J1bi1jb21tYW5kLmMgYi9ydW4tY29tbWFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxN2U0NTYKLS0tIC9kZXYvbnVsbAorKysgYi9ydW4tY29tbWFuZC5jCkBAIC0wLDAgKzEsODY0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImV4ZWNfY21kLmgiCisjaW5jbHVkZSAic2lnY2hhaW4uaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisKK3ZvaWQgY2hpbGRfcHJvY2Vzc19pbml0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjaGlsZCkKK3sKKwltZW1zZXQoY2hpbGQsIDAsIHNpemVvZigqY2hpbGQpKTsKKwlhcmd2X2FycmF5X2luaXQoJmNoaWxkLT5hcmdzKTsKKwlhcmd2X2FycmF5X2luaXQoJmNoaWxkLT5lbnZfYXJyYXkpOworfQorCitzdHJ1Y3QgY2hpbGRfdG9fY2xlYW4geworCXBpZF90IHBpZDsKKwlzdHJ1Y3QgY2hpbGRfdG9fY2xlYW4gKm5leHQ7Cit9Oworc3RhdGljIHN0cnVjdCBjaGlsZF90b19jbGVhbiAqY2hpbGRyZW5fdG9fY2xlYW47CitzdGF0aWMgaW50IGluc3RhbGxlZF9jaGlsZF9jbGVhbnVwX2hhbmRsZXI7CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfY2hpbGRyZW4oaW50IHNpZywgaW50IGluX3NpZ25hbCkKK3sKKwl3aGlsZSAoY2hpbGRyZW5fdG9fY2xlYW4pIHsKKwkJc3RydWN0IGNoaWxkX3RvX2NsZWFuICpwID0gY2hpbGRyZW5fdG9fY2xlYW47CisJCWNoaWxkcmVuX3RvX2NsZWFuID0gcC0+bmV4dDsKKwkJa2lsbChwLT5waWQsIHNpZyk7CisJCWlmICghaW5fc2lnbmFsKQorCQkJZnJlZShwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfY2hpbGRyZW5fb25fc2lnbmFsKGludCBzaWcpCit7CisJY2xlYW51cF9jaGlsZHJlbihzaWcsIDEpOworCXNpZ2NoYWluX3BvcChzaWcpOworCXJhaXNlKHNpZyk7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXBfY2hpbGRyZW5fb25fZXhpdCh2b2lkKQoreworCWNsZWFudXBfY2hpbGRyZW4oU0lHVEVSTSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfY2hpbGRfZm9yX2NsZWFudXAocGlkX3QgcGlkKQoreworCXN0cnVjdCBjaGlsZF90b19jbGVhbiAqcCA9IHhtYWxsb2Moc2l6ZW9mKCpwKSk7CisJcC0+cGlkID0gcGlkOworCXAtPm5leHQgPSBjaGlsZHJlbl90b19jbGVhbjsKKwljaGlsZHJlbl90b19jbGVhbiA9IHA7CisKKwlpZiAoIWluc3RhbGxlZF9jaGlsZF9jbGVhbnVwX2hhbmRsZXIpIHsKKwkJYXRleGl0KGNsZWFudXBfY2hpbGRyZW5fb25fZXhpdCk7CisJCXNpZ2NoYWluX3B1c2hfY29tbW9uKGNsZWFudXBfY2hpbGRyZW5fb25fc2lnbmFsKTsKKwkJaW5zdGFsbGVkX2NoaWxkX2NsZWFudXBfaGFuZGxlciA9IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBjbGVhcl9jaGlsZF9mb3JfY2xlYW51cChwaWRfdCBwaWQpCit7CisJc3RydWN0IGNoaWxkX3RvX2NsZWFuICoqcHA7CisKKwlmb3IgKHBwID0gJmNoaWxkcmVuX3RvX2NsZWFuOyAqcHA7IHBwID0gJigqcHApLT5uZXh0KSB7CisJCXN0cnVjdCBjaGlsZF90b19jbGVhbiAqY2xlYW5fbWUgPSAqcHA7CisKKwkJaWYgKGNsZWFuX21lLT5waWQgPT0gcGlkKSB7CisJCQkqcHAgPSBjbGVhbl9tZS0+bmV4dDsKKwkJCWZyZWUoY2xlYW5fbWUpOworCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xvc2VfcGFpcihpbnQgZmRbMl0pCit7CisJY2xvc2UoZmRbMF0pOworCWNsb3NlKGZkWzFdKTsKK30KKworI2lmbmRlZiBHSVRfV0lORE9XU19OQVRJVkUKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdXBfZGV2bnVsbChpbnQgdG8pCit7CisJaW50IGZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oXygib3BlbiAvZGV2L251bGwgZmFpbGVkIikpOworCWlmIChkdXAyKGZkLCB0bykgPCAwKQorCQlkaWVfZXJybm8oXygiZHVwMiglZCwlZCkgZmFpbGVkIiksIGZkLCB0byk7CisJY2xvc2UoZmQpOworfQorI2VuZGlmCisKK3N0YXRpYyBjaGFyICpsb2NhdGVfaW5fUEFUSChjb25zdCBjaGFyICpmaWxlKQoreworCWNvbnN0IGNoYXIgKnAgPSBnZXRlbnYoIlBBVEgiKTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFwIHx8ICEqcCkKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSAoMSkgeworCQljb25zdCBjaGFyICplbmQgPSBzdHJjaHJudWwocCwgJzonKTsKKworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisKKwkJLyogUE9TSVggc3BlY2lmaWVzIGFuIGVtcHR5IGVudHJ5IGFzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gKi8KKwkJaWYgKGVuZCAhPSBwKSB7CisJCQlzdHJidWZfYWRkKCZidWYsIHAsIGVuZCAtIHApOworCQkJc3RyYnVmX2FkZGNoKCZidWYsICcvJyk7CisJCX0KKwkJc3RyYnVmX2FkZHN0cigmYnVmLCBmaWxlKTsKKworCQlpZiAoIWFjY2VzcyhidWYuYnVmLCBGX09LKSkKKwkJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCisJCWlmICghKmVuZCkKKwkJCWJyZWFrOworCQlwID0gZW5kICsgMTsKKwl9CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBleGlzdHNfaW5fUEFUSChjb25zdCBjaGFyICpmaWxlKQoreworCWNoYXIgKnIgPSBsb2NhdGVfaW5fUEFUSChmaWxlKTsKKwlmcmVlKHIpOworCXJldHVybiByICE9IE5VTEw7Cit9CisKK2ludCBzYW5lX2V4ZWN2cChjb25zdCBjaGFyICpmaWxlLCBjaGFyICogY29uc3QgYXJndltdKQoreworCWlmICghZXhlY3ZwKGZpbGUsIGFyZ3YpKQorCQlyZXR1cm4gMDsgLyogY2Fubm90IGhhcHBlbiA7LSkgKi8KKworCS8qCisJICogV2hlbiBhIGNvbW1hbmQgY2FuJ3QgYmUgZm91bmQgYmVjYXVzZSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzCisJICogbGlzdGVkIGluICRQQVRIIGlzIHVuc2VhcmNoYWJsZSwgZXhlY3ZwIHJlcG9ydHMgRUFDQ0VTLCBidXQKKwkgKiBjYXJlZnVsIHVzYWJpbGl0eSB0ZXN0aW5nIChyZWFkOiBhbmFseXNpcyBvZiBvY2Nhc2lvbmFsIGJ1ZworCSAqIHJlcG9ydHMpIHJldmVhbHMgdGhhdCAiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIgaXMgbW9yZQorCSAqIGludHVpdGl2ZS4KKwkgKgorCSAqIFdlIGF2b2lkIGNvbW1hbmRzIHdpdGggIi8iLCBiZWNhdXNlIGV4ZWN2cCB3aWxsIG5vdCBkbyAkUEFUSAorCSAqIGxvb2t1cHMgaW4gdGhhdCBjYXNlLgorCSAqCisJICogVGhlIHJlYXNzaWdubWVudCBvZiBFQUNDRVMgdG8gZXJybm8gbG9va3MgbGlrZSBhIG5vLW9wIGJlbG93LAorCSAqIGJ1dCB3ZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBleGlzdHNfaW5fUEFUSCBvdmVyd3JpdGluZyBlcnJuby4KKwkgKi8KKwlpZiAoZXJybm8gPT0gRUFDQ0VTICYmICFzdHJjaHIoZmlsZSwgJy8nKSkKKwkJZXJybm8gPSBleGlzdHNfaW5fUEFUSChmaWxlKSA/IEVBQ0NFUyA6IEVOT0VOVDsKKwllbHNlIGlmIChlcnJubyA9PSBFTk9URElSICYmICFzdHJjaHIoZmlsZSwgJy8nKSkKKwkJZXJybm8gPSBFTk9FTlQ7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqKnByZXBhcmVfc2hlbGxfY21kKGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludCBhcmdjLCBuYXJnYyA9IDA7CisJY29uc3QgY2hhciAqKm5hcmd2OworCisJZm9yIChhcmdjID0gMDsgYXJndlthcmdjXTsgYXJnYysrKQorCQk7IC8qIGp1c3QgY291bnRpbmcgKi8KKwkvKiArMSBmb3IgTlVMTCwgKzMgZm9yICJzaCAtYyIgcGx1cyBleHRyYSAkMCAqLworCW5hcmd2ID0geG1hbGxvYyhzaXplb2YoKm5hcmd2KSAqIChhcmdjICsgMSArIDMpKTsKKworCWlmIChhcmdjIDwgMSkKKwkJZGllKCJCVUc6IHNoZWxsIGNvbW1hbmQgaXMgZW1wdHkiKTsKKworCWlmIChzdHJjc3BuKGFyZ3ZbMF0sICJ8Jjs8PigpJGBcXFwiJyBcdFxuKj9bI349JSIpICE9IHN0cmxlbihhcmd2WzBdKSkgeworI2lmbmRlZiBHSVRfV0lORE9XU19OQVRJVkUKKwkJbmFyZ3ZbbmFyZ2MrK10gPSBTSEVMTF9QQVRIOworI2Vsc2UKKwkJbmFyZ3ZbbmFyZ2MrK10gPSAic2giOworI2VuZGlmCisJCW5hcmd2W25hcmdjKytdID0gIi1jIjsKKworCQlpZiAoYXJnYyA8IDIpCisJCQluYXJndltuYXJnYysrXSA9IGFyZ3ZbMF07CisJCWVsc2UgeworCQkJc3RydWN0IHN0cmJ1ZiBhcmcwID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkZigmYXJnMCwgIiVzIFwiJEBcIiIsIGFyZ3ZbMF0pOworCQkJbmFyZ3ZbbmFyZ2MrK10gPSBzdHJidWZfZGV0YWNoKCZhcmcwLCBOVUxMKTsKKwkJfQorCX0KKworCWZvciAoYXJnYyA9IDA7IGFyZ3ZbYXJnY107IGFyZ2MrKykKKwkJbmFyZ3ZbbmFyZ2MrK10gPSBhcmd2W2FyZ2NdOworCW5hcmd2W25hcmdjXSA9IE5VTEw7CisKKwlyZXR1cm4gbmFyZ3Y7Cit9CisKKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCitzdGF0aWMgaW50IGV4ZWN2X3NoZWxsX2NtZChjb25zdCBjaGFyICoqYXJndikKK3sKKwljb25zdCBjaGFyICoqbmFyZ3YgPSBwcmVwYXJlX3NoZWxsX2NtZChhcmd2KTsKKwl0cmFjZV9hcmd2X3ByaW50ZihuYXJndiwgInRyYWNlOiBleGVjOiIpOworCXNhbmVfZXhlY3ZwKG5hcmd2WzBdLCAoY2hhciAqKiluYXJndik7CisJZnJlZShuYXJndik7CisJcmV0dXJuIC0xOworfQorI2VuZGlmCisKKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCitzdGF0aWMgaW50IGNoaWxkX25vdGlmaWVyID0gLTE7CisKK3N0YXRpYyB2b2lkIG5vdGlmeV9wYXJlbnQodm9pZCkKK3sKKwkvKgorCSAqIGV4ZWN2cCBmYWlsZWQuICBJZiBwb3NzaWJsZSwgd2UnZCBsaWtlIHRvIGxldCBzdGFydF9jb21tYW5kCisJICoga25vdywgc28gZmFpbHVyZXMgbGlrZSBFTk9FTlQgY2FuIGJlIGhhbmRsZWQgcmlnaHQgYXdheTsgYnV0CisJICogb3RoZXJ3aXNlLCBmaW5pc2hfY29tbWFuZCB3aWxsIHN0aWxsIHJlcG9ydCB0aGUgZXJyb3IuCisJICovCisJeHdyaXRlKGNoaWxkX25vdGlmaWVyLCAiIiwgMSk7Cit9CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkIHNldF9jbG9leGVjKGludCBmZCkKK3sKKwlpbnQgZmxhZ3MgPSBmY250bChmZCwgRl9HRVRGRCk7CisJaWYgKGZsYWdzID49IDApCisJCWZjbnRsKGZkLCBGX1NFVEZELCBmbGFncyB8IEZEX0NMT0VYRUMpOworfQorCitzdGF0aWMgaW50IHdhaXRfb3Jfd2hpbmUocGlkX3QgcGlkLCBjb25zdCBjaGFyICphcmd2MCwgaW50IGluX3NpZ25hbCkKK3sKKwlpbnQgc3RhdHVzLCBjb2RlID0gLTE7CisJcGlkX3Qgd2FpdGluZzsKKwlpbnQgZmFpbGVkX2Vycm5vID0gMDsKKworCXdoaWxlICgod2FpdGluZyA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCAwKSkgPCAwICYmIGVycm5vID09IEVJTlRSKQorCQk7CS8qIG5vdGhpbmcgKi8KKwlpZiAoaW5fc2lnbmFsKQorCQlyZXR1cm4gMDsKKworCWlmICh3YWl0aW5nIDwgMCkgeworCQlmYWlsZWRfZXJybm8gPSBlcnJubzsKKwkJZXJyb3IoIndhaXRwaWQgZm9yICVzIGZhaWxlZDogJXMiLCBhcmd2MCwgc3RyZXJyb3IoZXJybm8pKTsKKwl9IGVsc2UgaWYgKHdhaXRpbmcgIT0gcGlkKSB7CisJCWVycm9yKCJ3YWl0cGlkIGlzIGNvbmZ1c2VkICglcykiLCBhcmd2MCk7CisJfSBlbHNlIGlmIChXSUZTSUdOQUxFRChzdGF0dXMpKSB7CisJCWNvZGUgPSBXVEVSTVNJRyhzdGF0dXMpOworCQlpZiAoY29kZSAhPSBTSUdJTlQgJiYgY29kZSAhPSBTSUdRVUlUKQorCQkJZXJyb3IoIiVzIGRpZWQgb2Ygc2lnbmFsICVkIiwgYXJndjAsIGNvZGUpOworCQkvKgorCQkgKiBUaGlzIHJldHVybiB2YWx1ZSBpcyBjaG9zZW4gc28gdGhhdCBjb2RlICYgMHhmZgorCQkgKiBtaW1pY3MgdGhlIGV4aXQgY29kZSB0aGF0IGEgUE9TSVggc2hlbGwgd291bGQgcmVwb3J0IGZvcgorCQkgKiBhIHByb2dyYW0gdGhhdCBkaWVkIGZyb20gdGhpcyBzaWduYWwuCisJCSAqLworCQljb2RlICs9IDEyODsKKwl9IGVsc2UgaWYgKFdJRkVYSVRFRChzdGF0dXMpKSB7CisJCWNvZGUgPSBXRVhJVFNUQVRVUyhzdGF0dXMpOworCQkvKgorCQkgKiBDb252ZXJ0IHNwZWNpYWwgZXhpdCBjb2RlIHdoZW4gZXhlY3ZwIGZhaWxlZC4KKwkJICovCisJCWlmIChjb2RlID09IDEyNykgeworCQkJY29kZSA9IC0xOworCQkJZmFpbGVkX2Vycm5vID0gRU5PRU5UOworCQl9CisJfSBlbHNlIHsKKwkJZXJyb3IoIndhaXRwaWQgaXMgY29uZnVzZWQgKCVzKSIsIGFyZ3YwKTsKKwl9CisKKwljbGVhcl9jaGlsZF9mb3JfY2xlYW51cChwaWQpOworCisJZXJybm8gPSBmYWlsZWRfZXJybm87CisJcmV0dXJuIGNvZGU7Cit9CisKK2ludCBzdGFydF9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQpCit7CisJaW50IG5lZWRfaW4sIG5lZWRfb3V0LCBuZWVkX2VycjsKKwlpbnQgZmRpblsyXSwgZmRvdXRbMl0sIGZkZXJyWzJdOworCWludCBmYWlsZWRfZXJybm87CisJY2hhciAqc3RyOworCisJaWYgKCFjbWQtPmFyZ3YpCisJCWNtZC0+YXJndiA9IGNtZC0+YXJncy5hcmd2OworCWlmICghY21kLT5lbnYpCisJCWNtZC0+ZW52ID0gY21kLT5lbnZfYXJyYXkuYXJndjsKKworCS8qCisJICogSW4gY2FzZSBvZiBlcnJvcnMgd2UgbXVzdCBrZWVwIHRoZSBwcm9taXNlIHRvIGNsb3NlIEZEcworCSAqIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCBpbiB2aWEgLT5pbiBhbmQgLT5vdXQuCisJICovCisKKwluZWVkX2luID0gIWNtZC0+bm9fc3RkaW4gJiYgY21kLT5pbiA8IDA7CisJaWYgKG5lZWRfaW4pIHsKKwkJaWYgKHBpcGUoZmRpbikgPCAwKSB7CisJCQlmYWlsZWRfZXJybm8gPSBlcnJubzsKKwkJCWlmIChjbWQtPm91dCA+IDApCisJCQkJY2xvc2UoY21kLT5vdXQpOworCQkJc3RyID0gInN0YW5kYXJkIGlucHV0IjsKKwkJCWdvdG8gZmFpbF9waXBlOworCQl9CisJCWNtZC0+aW4gPSBmZGluWzFdOworCX0KKworCW5lZWRfb3V0ID0gIWNtZC0+bm9fc3Rkb3V0CisJCSYmICFjbWQtPnN0ZG91dF90b19zdGRlcnIKKwkJJiYgY21kLT5vdXQgPCAwOworCWlmIChuZWVkX291dCkgeworCQlpZiAocGlwZShmZG91dCkgPCAwKSB7CisJCQlmYWlsZWRfZXJybm8gPSBlcnJubzsKKwkJCWlmIChuZWVkX2luKQorCQkJCWNsb3NlX3BhaXIoZmRpbik7CisJCQllbHNlIGlmIChjbWQtPmluKQorCQkJCWNsb3NlKGNtZC0+aW4pOworCQkJc3RyID0gInN0YW5kYXJkIG91dHB1dCI7CisJCQlnb3RvIGZhaWxfcGlwZTsKKwkJfQorCQljbWQtPm91dCA9IGZkb3V0WzBdOworCX0KKworCW5lZWRfZXJyID0gIWNtZC0+bm9fc3RkZXJyICYmIGNtZC0+ZXJyIDwgMDsKKwlpZiAobmVlZF9lcnIpIHsKKwkJaWYgKHBpcGUoZmRlcnIpIDwgMCkgeworCQkJZmFpbGVkX2Vycm5vID0gZXJybm87CisJCQlpZiAobmVlZF9pbikKKwkJCQljbG9zZV9wYWlyKGZkaW4pOworCQkJZWxzZSBpZiAoY21kLT5pbikKKwkJCQljbG9zZShjbWQtPmluKTsKKwkJCWlmIChuZWVkX291dCkKKwkJCQljbG9zZV9wYWlyKGZkb3V0KTsKKwkJCWVsc2UgaWYgKGNtZC0+b3V0KQorCQkJCWNsb3NlKGNtZC0+b3V0KTsKKwkJCXN0ciA9ICJzdGFuZGFyZCBlcnJvciI7CitmYWlsX3BpcGU6CisJCQllcnJvcigiY2Fubm90IGNyZWF0ZSAlcyBwaXBlIGZvciAlczogJXMiLAorCQkJCXN0ciwgY21kLT5hcmd2WzBdLCBzdHJlcnJvcihmYWlsZWRfZXJybm8pKTsKKwkJCWFyZ3ZfYXJyYXlfY2xlYXIoJmNtZC0+YXJncyk7CisJCQlhcmd2X2FycmF5X2NsZWFyKCZjbWQtPmVudl9hcnJheSk7CisJCQllcnJubyA9IGZhaWxlZF9lcnJubzsKKwkJCXJldHVybiAtMTsKKwkJfQorCQljbWQtPmVyciA9IGZkZXJyWzBdOworCX0KKworCXRyYWNlX2FyZ3ZfcHJpbnRmKGNtZC0+YXJndiwgInRyYWNlOiBydW5fY29tbWFuZDoiKTsKKwlmZmx1c2goTlVMTCk7CisKKyNpZm5kZWYgR0lUX1dJTkRPV1NfTkFUSVZFCit7CisJaW50IG5vdGlmeV9waXBlWzJdOworCWlmIChwaXBlKG5vdGlmeV9waXBlKSkKKwkJbm90aWZ5X3BpcGVbMF0gPSBub3RpZnlfcGlwZVsxXSA9IC0xOworCisJY21kLT5waWQgPSBmb3JrKCk7CisJZmFpbGVkX2Vycm5vID0gZXJybm87CisJaWYgKCFjbWQtPnBpZCkgeworCQkvKgorCQkgKiBSZWRpcmVjdCB0aGUgY2hhbm5lbCB0byB3cml0ZSBzeXNjYWxsIGVycm9yIG1lc3NhZ2VzIHRvCisJCSAqIGJlZm9yZSByZWRpcmVjdGluZyB0aGUgcHJvY2VzcydzIHN0ZGVyciBzbyB0aGF0IGFsbCBkaWUoKQorCQkgKiBpbiBzdWJzZXF1ZW50IGNhbGwgcGF0aHMgdXNlIHRoZSBwYXJlbnQncyBzdGRlcnIuCisJCSAqLworCQlpZiAoY21kLT5ub19zdGRlcnIgfHwgbmVlZF9lcnIpIHsKKwkJCWludCBjaGlsZF9lcnIgPSBkdXAoMik7CisJCQlzZXRfY2xvZXhlYyhjaGlsZF9lcnIpOworCQkJc2V0X2Vycm9yX2hhbmRsZShmZG9wZW4oY2hpbGRfZXJyLCAidyIpKTsKKwkJfQorCisJCWNsb3NlKG5vdGlmeV9waXBlWzBdKTsKKwkJc2V0X2Nsb2V4ZWMobm90aWZ5X3BpcGVbMV0pOworCQljaGlsZF9ub3RpZmllciA9IG5vdGlmeV9waXBlWzFdOworCQlhdGV4aXQobm90aWZ5X3BhcmVudCk7CisKKwkJaWYgKGNtZC0+bm9fc3RkaW4pCisJCQlkdXBfZGV2bnVsbCgwKTsKKwkJZWxzZSBpZiAobmVlZF9pbikgeworCQkJZHVwMihmZGluWzBdLCAwKTsKKwkJCWNsb3NlX3BhaXIoZmRpbik7CisJCX0gZWxzZSBpZiAoY21kLT5pbikgeworCQkJZHVwMihjbWQtPmluLCAwKTsKKwkJCWNsb3NlKGNtZC0+aW4pOworCQl9CisKKwkJaWYgKGNtZC0+bm9fc3RkZXJyKQorCQkJZHVwX2Rldm51bGwoMik7CisJCWVsc2UgaWYgKG5lZWRfZXJyKSB7CisJCQlkdXAyKGZkZXJyWzFdLCAyKTsKKwkJCWNsb3NlX3BhaXIoZmRlcnIpOworCQl9IGVsc2UgaWYgKGNtZC0+ZXJyID4gMSkgeworCQkJZHVwMihjbWQtPmVyciwgMik7CisJCQljbG9zZShjbWQtPmVycik7CisJCX0KKworCQlpZiAoY21kLT5ub19zdGRvdXQpCisJCQlkdXBfZGV2bnVsbCgxKTsKKwkJZWxzZSBpZiAoY21kLT5zdGRvdXRfdG9fc3RkZXJyKQorCQkJZHVwMigyLCAxKTsKKwkJZWxzZSBpZiAobmVlZF9vdXQpIHsKKwkJCWR1cDIoZmRvdXRbMV0sIDEpOworCQkJY2xvc2VfcGFpcihmZG91dCk7CisJCX0gZWxzZSBpZiAoY21kLT5vdXQgPiAxKSB7CisJCQlkdXAyKGNtZC0+b3V0LCAxKTsKKwkJCWNsb3NlKGNtZC0+b3V0KTsKKwkJfQorCisJCWlmIChjbWQtPmRpciAmJiBjaGRpcihjbWQtPmRpcikpCisJCQlkaWVfZXJybm8oImV4ZWMgJyVzJzogY2QgdG8gJyVzJyBmYWlsZWQiLCBjbWQtPmFyZ3ZbMF0sCisJCQkgICAgY21kLT5kaXIpOworCQlpZiAoY21kLT5lbnYpIHsKKwkJCWZvciAoOyAqY21kLT5lbnY7IGNtZC0+ZW52KyspIHsKKwkJCQlpZiAoc3RyY2hyKCpjbWQtPmVudiwgJz0nKSkKKwkJCQkJcHV0ZW52KChjaGFyICopKmNtZC0+ZW52KTsKKwkJCQllbHNlCisJCQkJCXVuc2V0ZW52KCpjbWQtPmVudik7CisJCQl9CisJCX0KKwkJaWYgKGNtZC0+Z2l0X2NtZCkKKwkJCWV4ZWN2X2dpdF9jbWQoY21kLT5hcmd2KTsKKwkJZWxzZSBpZiAoY21kLT51c2Vfc2hlbGwpCisJCQlleGVjdl9zaGVsbF9jbWQoY21kLT5hcmd2KTsKKwkJZWxzZQorCQkJc2FuZV9leGVjdnAoY21kLT5hcmd2WzBdLCAoY2hhciAqY29uc3QqKSBjbWQtPmFyZ3YpOworCQlpZiAoZXJybm8gPT0gRU5PRU5UKSB7CisJCQlpZiAoIWNtZC0+c2lsZW50X2V4ZWNfZmFpbHVyZSkKKwkJCQllcnJvcigiY2Fubm90IHJ1biAlczogJXMiLCBjbWQtPmFyZ3ZbMF0sCisJCQkJCXN0cmVycm9yKEVOT0VOVCkpOworCQkJZXhpdCgxMjcpOworCQl9IGVsc2UgeworCQkJZGllX2Vycm5vKCJjYW5ub3QgZXhlYyAnJXMnIiwgY21kLT5hcmd2WzBdKTsKKwkJfQorCX0KKwlpZiAoY21kLT5waWQgPCAwKQorCQllcnJvcigiY2Fubm90IGZvcmsoKSBmb3IgJXM6ICVzIiwgY21kLT5hcmd2WzBdLAorCQkJc3RyZXJyb3IoZXJybm8pKTsKKwllbHNlIGlmIChjbWQtPmNsZWFuX29uX2V4aXQpCisJCW1hcmtfY2hpbGRfZm9yX2NsZWFudXAoY21kLT5waWQpOworCisJLyoKKwkgKiBXYWl0IGZvciBjaGlsZCdzIGV4ZWN2cC4gSWYgdGhlIGV4ZWN2cCBzdWNjZWVkcyAob3IgaWYgZm9yaygpCisJICogZmFpbGVkKSwgRU9GIGlzIHNlZW4gaW1tZWRpYXRlbHkgYnkgdGhlIHBhcmVudC4gT3RoZXJ3aXNlLCB0aGUKKwkgKiBjaGlsZCBwcm9jZXNzIHNlbmRzIGEgc2luZ2xlIGJ5dGUuCisJICogTm90ZSB0aGF0IHVzZSBvZiB0aGlzIGluZnJhc3RydWN0dXJlIGlzIGNvbXBsZXRlbHkgYWR2aXNvcnksCisJICogdGhlcmVmb3JlLCB3ZSBrZWVwIGVycm9yIGNoZWNrcyBtaW5pbWFsLgorCSAqLworCWNsb3NlKG5vdGlmeV9waXBlWzFdKTsKKwlpZiAocmVhZChub3RpZnlfcGlwZVswXSwgJm5vdGlmeV9waXBlWzFdLCAxKSA9PSAxKSB7CisJCS8qCisJCSAqIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IGZvcmsoKSBzdWNjZWVkZWQsIGJ1dCBleGVjdnAoKQorCQkgKiBmYWlsZWQuIEVycm9ycyBoYXZlIGJlZW4gcmVwb3J0ZWQgdG8gb3VyIHN0ZGVyci4KKwkJICovCisJCXdhaXRfb3Jfd2hpbmUoY21kLT5waWQsIGNtZC0+YXJndlswXSwgMCk7CisJCWZhaWxlZF9lcnJubyA9IGVycm5vOworCQljbWQtPnBpZCA9IC0xOworCX0KKwljbG9zZShub3RpZnlfcGlwZVswXSk7Cit9CisjZWxzZQoreworCWludCBmaGluID0gMCwgZmhvdXQgPSAxLCBmaGVyciA9IDI7CisJY29uc3QgY2hhciAqKnNhcmd2ID0gY21kLT5hcmd2OworCisJaWYgKGNtZC0+bm9fc3RkaW4pCisJCWZoaW4gPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOworCWVsc2UgaWYgKG5lZWRfaW4pCisJCWZoaW4gPSBkdXAoZmRpblswXSk7CisJZWxzZSBpZiAoY21kLT5pbikKKwkJZmhpbiA9IGR1cChjbWQtPmluKTsKKworCWlmIChjbWQtPm5vX3N0ZGVycikKKwkJZmhlcnIgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOworCWVsc2UgaWYgKG5lZWRfZXJyKQorCQlmaGVyciA9IGR1cChmZGVyclsxXSk7CisJZWxzZSBpZiAoY21kLT5lcnIgPiAyKQorCQlmaGVyciA9IGR1cChjbWQtPmVycik7CisKKwlpZiAoY21kLT5ub19zdGRvdXQpCisJCWZob3V0ID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKwllbHNlIGlmIChjbWQtPnN0ZG91dF90b19zdGRlcnIpCisJCWZob3V0ID0gZHVwKGZoZXJyKTsKKwllbHNlIGlmIChuZWVkX291dCkKKwkJZmhvdXQgPSBkdXAoZmRvdXRbMV0pOworCWVsc2UgaWYgKGNtZC0+b3V0ID4gMSkKKwkJZmhvdXQgPSBkdXAoY21kLT5vdXQpOworCisJaWYgKGNtZC0+Z2l0X2NtZCkKKwkJY21kLT5hcmd2ID0gcHJlcGFyZV9naXRfY21kKGNtZC0+YXJndik7CisJZWxzZSBpZiAoY21kLT51c2Vfc2hlbGwpCisJCWNtZC0+YXJndiA9IHByZXBhcmVfc2hlbGxfY21kKGNtZC0+YXJndik7CisKKwljbWQtPnBpZCA9IG1pbmd3X3NwYXdudnBlKGNtZC0+YXJndlswXSwgY21kLT5hcmd2LCAoY2hhcioqKSBjbWQtPmVudiwKKwkJCWNtZC0+ZGlyLCBmaGluLCBmaG91dCwgZmhlcnIpOworCWZhaWxlZF9lcnJubyA9IGVycm5vOworCWlmIChjbWQtPnBpZCA8IDAgJiYgKCFjbWQtPnNpbGVudF9leGVjX2ZhaWx1cmUgfHwgZXJybm8gIT0gRU5PRU5UKSkKKwkJZXJyb3IoImNhbm5vdCBzcGF3biAlczogJXMiLCBjbWQtPmFyZ3ZbMF0sIHN0cmVycm9yKGVycm5vKSk7CisJaWYgKGNtZC0+Y2xlYW5fb25fZXhpdCAmJiBjbWQtPnBpZCA+PSAwKQorCQltYXJrX2NoaWxkX2Zvcl9jbGVhbnVwKGNtZC0+cGlkKTsKKworCWlmIChjbWQtPmdpdF9jbWQpCisJCWZyZWUoY21kLT5hcmd2KTsKKworCWNtZC0+YXJndiA9IHNhcmd2OworCWlmIChmaGluICE9IDApCisJCWNsb3NlKGZoaW4pOworCWlmIChmaG91dCAhPSAxKQorCQljbG9zZShmaG91dCk7CisJaWYgKGZoZXJyICE9IDIpCisJCWNsb3NlKGZoZXJyKTsKK30KKyNlbmRpZgorCisJaWYgKGNtZC0+cGlkIDwgMCkgeworCQlpZiAobmVlZF9pbikKKwkJCWNsb3NlX3BhaXIoZmRpbik7CisJCWVsc2UgaWYgKGNtZC0+aW4pCisJCQljbG9zZShjbWQtPmluKTsKKwkJaWYgKG5lZWRfb3V0KQorCQkJY2xvc2VfcGFpcihmZG91dCk7CisJCWVsc2UgaWYgKGNtZC0+b3V0KQorCQkJY2xvc2UoY21kLT5vdXQpOworCQlpZiAobmVlZF9lcnIpCisJCQljbG9zZV9wYWlyKGZkZXJyKTsKKwkJZWxzZSBpZiAoY21kLT5lcnIpCisJCQljbG9zZShjbWQtPmVycik7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmNtZC0+YXJncyk7CisJCWFyZ3ZfYXJyYXlfY2xlYXIoJmNtZC0+ZW52X2FycmF5KTsKKwkJZXJybm8gPSBmYWlsZWRfZXJybm87CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAobmVlZF9pbikKKwkJY2xvc2UoZmRpblswXSk7CisJZWxzZSBpZiAoY21kLT5pbikKKwkJY2xvc2UoY21kLT5pbik7CisKKwlpZiAobmVlZF9vdXQpCisJCWNsb3NlKGZkb3V0WzFdKTsKKwllbHNlIGlmIChjbWQtPm91dCkKKwkJY2xvc2UoY21kLT5vdXQpOworCisJaWYgKG5lZWRfZXJyKQorCQljbG9zZShmZGVyclsxXSk7CisJZWxzZSBpZiAoY21kLT5lcnIpCisJCWNsb3NlKGNtZC0+ZXJyKTsKKworCXJldHVybiAwOworfQorCitpbnQgZmluaXNoX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNtZCkKK3sKKwlpbnQgcmV0ID0gd2FpdF9vcl93aGluZShjbWQtPnBpZCwgY21kLT5hcmd2WzBdLCAwKTsKKwlhcmd2X2FycmF5X2NsZWFyKCZjbWQtPmFyZ3MpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmNtZC0+ZW52X2FycmF5KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZmluaXNoX2NvbW1hbmRfaW5fc2lnbmFsKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQpCit7CisJcmV0dXJuIHdhaXRfb3Jfd2hpbmUoY21kLT5waWQsIGNtZC0+YXJndlswXSwgMSk7Cit9CisKKworaW50IHJ1bl9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQpCit7CisJaW50IGNvZGU7CisKKwlpZiAoY21kLT5vdXQgPCAwIHx8IGNtZC0+ZXJyIDwgMCkKKwkJZGllKCJCVUc6IHJ1bl9jb21tYW5kIHdpdGggYSBwaXBlIGNhbiBjYXVzZSBkZWFkbG9jayIpOworCisJY29kZSA9IHN0YXJ0X2NvbW1hbmQoY21kKTsKKwlpZiAoY29kZSkKKwkJcmV0dXJuIGNvZGU7CisJcmV0dXJuIGZpbmlzaF9jb21tYW5kKGNtZCk7Cit9CisKK2ludCBydW5fY29tbWFuZF92X29wdChjb25zdCBjaGFyICoqYXJndiwgaW50IG9wdCkKK3sKKwlyZXR1cm4gcnVuX2NvbW1hbmRfdl9vcHRfY2RfZW52KGFyZ3YsIG9wdCwgTlVMTCwgTlVMTCk7Cit9CisKK2ludCBydW5fY29tbWFuZF92X29wdF9jZF9lbnYoY29uc3QgY2hhciAqKmFyZ3YsIGludCBvcHQsIGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqY29uc3QgKmVudikKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY21kLmFyZ3YgPSBhcmd2OworCWNtZC5ub19zdGRpbiA9IG9wdCAmIFJVTl9DT01NQU5EX05PX1NURElOID8gMSA6IDA7CisJY21kLmdpdF9jbWQgPSBvcHQgJiBSVU5fR0lUX0NNRCA/IDEgOiAwOworCWNtZC5zdGRvdXRfdG9fc3RkZXJyID0gb3B0ICYgUlVOX0NPTU1BTkRfU1RET1VUX1RPX1NUREVSUiA/IDEgOiAwOworCWNtZC5zaWxlbnRfZXhlY19mYWlsdXJlID0gb3B0ICYgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkUgPyAxIDogMDsKKwljbWQudXNlX3NoZWxsID0gb3B0ICYgUlVOX1VTSU5HX1NIRUxMID8gMSA6IDA7CisJY21kLmNsZWFuX29uX2V4aXQgPSBvcHQgJiBSVU5fQ0xFQU5fT05fRVhJVCA/IDEgOiAwOworCWNtZC5kaXIgPSBkaXI7CisJY21kLmVudiA9IGVudjsKKwlyZXR1cm4gcnVuX2NvbW1hbmQoJmNtZCk7Cit9CisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKK3N0YXRpYyBwdGhyZWFkX3QgbWFpbl90aHJlYWQ7CitzdGF0aWMgaW50IG1haW5fdGhyZWFkX3NldDsKK3N0YXRpYyBwdGhyZWFkX2tleV90IGFzeW5jX2tleTsKK3N0YXRpYyBwdGhyZWFkX2tleV90IGFzeW5jX2RpZV9jb3VudGVyOworCitzdGF0aWMgdm9pZCAqcnVuX3RocmVhZCh2b2lkICpkYXRhKQoreworCXN0cnVjdCBhc3luYyAqYXN5bmMgPSBkYXRhOworCWludHB0cl90IHJldDsKKworCXB0aHJlYWRfc2V0c3BlY2lmaWMoYXN5bmNfa2V5LCBhc3luYyk7CisJcmV0ID0gYXN5bmMtPnByb2MoYXN5bmMtPnByb2NfaW4sIGFzeW5jLT5wcm9jX291dCwgYXN5bmMtPmRhdGEpOworCXJldHVybiAodm9pZCAqKXJldDsKK30KKworc3RhdGljIE5PUkVUVVJOIHZvaWQgZGllX2FzeW5jKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpCit7CisJdnJlcG9ydGYoImZhdGFsOiAiLCBlcnIsIHBhcmFtcyk7CisKKwlpZiAoaW5fYXN5bmMoKSkgeworCQlzdHJ1Y3QgYXN5bmMgKmFzeW5jID0gcHRocmVhZF9nZXRzcGVjaWZpYyhhc3luY19rZXkpOworCQlpZiAoYXN5bmMtPnByb2NfaW4gPj0gMCkKKwkJCWNsb3NlKGFzeW5jLT5wcm9jX2luKTsKKwkJaWYgKGFzeW5jLT5wcm9jX291dCA+PSAwKQorCQkJY2xvc2UoYXN5bmMtPnByb2Nfb3V0KTsKKwkJcHRocmVhZF9leGl0KCh2b2lkICopMTI4KTsKKwl9CisKKwlleGl0KDEyOCk7Cit9CisKK3N0YXRpYyBpbnQgYXN5bmNfZGllX2lzX3JlY3Vyc2luZyh2b2lkKQoreworCXZvaWQgKnJldCA9IHB0aHJlYWRfZ2V0c3BlY2lmaWMoYXN5bmNfZGllX2NvdW50ZXIpOworCXB0aHJlYWRfc2V0c3BlY2lmaWMoYXN5bmNfZGllX2NvdW50ZXIsICh2b2lkICopMSk7CisJcmV0dXJuIHJldCAhPSBOVUxMOworfQorCitpbnQgaW5fYXN5bmModm9pZCkKK3sKKwlpZiAoIW1haW5fdGhyZWFkX3NldCkKKwkJcmV0dXJuIDA7IC8qIG5vIGFzeW5jcyBzdGFydGVkIHlldCAqLworCXJldHVybiAhcHRocmVhZF9lcXVhbChtYWluX3RocmVhZCwgcHRocmVhZF9zZWxmKCkpOworfQorCisjZWxzZQorCitzdGF0aWMgc3RydWN0IHsKKwl2b2lkICgqKmhhbmRsZXJzKSh2b2lkKTsKKwlzaXplX3QgbnI7CisJc2l6ZV90IGFsbG9jOworfSBnaXRfYXRleGl0X2hkbHJzOworCitzdGF0aWMgaW50IGdpdF9hdGV4aXRfaW5zdGFsbGVkOworCitzdGF0aWMgdm9pZCBnaXRfYXRleGl0X2Rpc3BhdGNoKHZvaWQpCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGk9Z2l0X2F0ZXhpdF9oZGxycy5uciA7IGkgOyBpLS0pCisJCWdpdF9hdGV4aXRfaGRscnMuaGFuZGxlcnNbaS0xXSgpOworfQorCitzdGF0aWMgdm9pZCBnaXRfYXRleGl0X2NsZWFyKHZvaWQpCit7CisJZnJlZShnaXRfYXRleGl0X2hkbHJzLmhhbmRsZXJzKTsKKwltZW1zZXQoJmdpdF9hdGV4aXRfaGRscnMsIDAsIHNpemVvZihnaXRfYXRleGl0X2hkbHJzKSk7CisJZ2l0X2F0ZXhpdF9pbnN0YWxsZWQgPSAwOworfQorCisjdW5kZWYgYXRleGl0CitpbnQgZ2l0X2F0ZXhpdCh2b2lkICgqaGFuZGxlcikodm9pZCkpCit7CisJQUxMT0NfR1JPVyhnaXRfYXRleGl0X2hkbHJzLmhhbmRsZXJzLCBnaXRfYXRleGl0X2hkbHJzLm5yICsgMSwgZ2l0X2F0ZXhpdF9oZGxycy5hbGxvYyk7CisJZ2l0X2F0ZXhpdF9oZGxycy5oYW5kbGVyc1tnaXRfYXRleGl0X2hkbHJzLm5yKytdID0gaGFuZGxlcjsKKwlpZiAoIWdpdF9hdGV4aXRfaW5zdGFsbGVkKSB7CisJCWlmIChhdGV4aXQoJmdpdF9hdGV4aXRfZGlzcGF0Y2gpKQorCQkJcmV0dXJuIC0xOworCQlnaXRfYXRleGl0X2luc3RhbGxlZCA9IDE7CisJfQorCXJldHVybiAwOworfQorI2RlZmluZSBhdGV4aXQgZ2l0X2F0ZXhpdAorCitzdGF0aWMgaW50IHByb2Nlc3NfaXNfYXN5bmM7CitpbnQgaW5fYXN5bmModm9pZCkKK3sKKwlyZXR1cm4gcHJvY2Vzc19pc19hc3luYzsKK30KKworI2VuZGlmCisKK2ludCBzdGFydF9hc3luYyhzdHJ1Y3QgYXN5bmMgKmFzeW5jKQoreworCWludCBuZWVkX2luLCBuZWVkX291dDsKKwlpbnQgZmRpblsyXSwgZmRvdXRbMl07CisJaW50IHByb2NfaW4sIHByb2Nfb3V0OworCisJbmVlZF9pbiA9IGFzeW5jLT5pbiA8IDA7CisJaWYgKG5lZWRfaW4pIHsKKwkJaWYgKHBpcGUoZmRpbikgPCAwKSB7CisJCQlpZiAoYXN5bmMtPm91dCA+IDApCisJCQkJY2xvc2UoYXN5bmMtPm91dCk7CisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBjcmVhdGUgcGlwZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQl9CisJCWFzeW5jLT5pbiA9IGZkaW5bMV07CisJfQorCisJbmVlZF9vdXQgPSBhc3luYy0+b3V0IDwgMDsKKwlpZiAobmVlZF9vdXQpIHsKKwkJaWYgKHBpcGUoZmRvdXQpIDwgMCkgeworCQkJaWYgKG5lZWRfaW4pCisJCQkJY2xvc2VfcGFpcihmZGluKTsKKwkJCWVsc2UgaWYgKGFzeW5jLT5pbikKKwkJCQljbG9zZShhc3luYy0+aW4pOworCQkJcmV0dXJuIGVycm9yKCJjYW5ub3QgY3JlYXRlIHBpcGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJfQorCQlhc3luYy0+b3V0ID0gZmRvdXRbMF07CisJfQorCisJaWYgKG5lZWRfaW4pCisJCXByb2NfaW4gPSBmZGluWzBdOworCWVsc2UgaWYgKGFzeW5jLT5pbikKKwkJcHJvY19pbiA9IGFzeW5jLT5pbjsKKwllbHNlCisJCXByb2NfaW4gPSAtMTsKKworCWlmIChuZWVkX291dCkKKwkJcHJvY19vdXQgPSBmZG91dFsxXTsKKwllbHNlIGlmIChhc3luYy0+b3V0KQorCQlwcm9jX291dCA9IGFzeW5jLT5vdXQ7CisJZWxzZQorCQlwcm9jX291dCA9IC0xOworCisjaWZkZWYgTk9fUFRIUkVBRFMKKwkvKiBGbHVzaCBzdGRpbyBiZWZvcmUgZm9yaygpIHRvIGF2b2lkIGNsb25pbmcgYnVmZmVycyAqLworCWZmbHVzaChOVUxMKTsKKworCWFzeW5jLT5waWQgPSBmb3JrKCk7CisJaWYgKGFzeW5jLT5waWQgPCAwKSB7CisJCWVycm9yKCJmb3JrIChhc3luYykgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmICghYXN5bmMtPnBpZCkgeworCQlpZiAobmVlZF9pbikKKwkJCWNsb3NlKGZkaW5bMV0pOworCQlpZiAobmVlZF9vdXQpCisJCQljbG9zZShmZG91dFswXSk7CisJCWdpdF9hdGV4aXRfY2xlYXIoKTsKKwkJcHJvY2Vzc19pc19hc3luYyA9IDE7CisJCWV4aXQoISFhc3luYy0+cHJvYyhwcm9jX2luLCBwcm9jX291dCwgYXN5bmMtPmRhdGEpKTsKKwl9CisKKwltYXJrX2NoaWxkX2Zvcl9jbGVhbnVwKGFzeW5jLT5waWQpOworCisJaWYgKG5lZWRfaW4pCisJCWNsb3NlKGZkaW5bMF0pOworCWVsc2UgaWYgKGFzeW5jLT5pbikKKwkJY2xvc2UoYXN5bmMtPmluKTsKKworCWlmIChuZWVkX291dCkKKwkJY2xvc2UoZmRvdXRbMV0pOworCWVsc2UgaWYgKGFzeW5jLT5vdXQpCisJCWNsb3NlKGFzeW5jLT5vdXQpOworI2Vsc2UKKwlpZiAoIW1haW5fdGhyZWFkX3NldCkgeworCQkvKgorCQkgKiBXZSBhc3N1bWUgdGhhdCB0aGUgZmlyc3QgdGltZSB0aGF0IHN0YXJ0X2FzeW5jIGlzIGNhbGxlZAorCQkgKiBpdCBpcyBmcm9tIHRoZSBtYWluIHRocmVhZC4KKwkJICovCisJCW1haW5fdGhyZWFkX3NldCA9IDE7CisJCW1haW5fdGhyZWFkID0gcHRocmVhZF9zZWxmKCk7CisJCXB0aHJlYWRfa2V5X2NyZWF0ZSgmYXN5bmNfa2V5LCBOVUxMKTsKKwkJcHRocmVhZF9rZXlfY3JlYXRlKCZhc3luY19kaWVfY291bnRlciwgTlVMTCk7CisJCXNldF9kaWVfcm91dGluZShkaWVfYXN5bmMpOworCQlzZXRfZGllX2lzX3JlY3Vyc2luZ19yb3V0aW5lKGFzeW5jX2RpZV9pc19yZWN1cnNpbmcpOworCX0KKworCWlmIChwcm9jX2luID49IDApCisJCXNldF9jbG9leGVjKHByb2NfaW4pOworCWlmIChwcm9jX291dCA+PSAwKQorCQlzZXRfY2xvZXhlYyhwcm9jX291dCk7CisJYXN5bmMtPnByb2NfaW4gPSBwcm9jX2luOworCWFzeW5jLT5wcm9jX291dCA9IHByb2Nfb3V0OworCXsKKwkJaW50IGVyciA9IHB0aHJlYWRfY3JlYXRlKCZhc3luYy0+dGlkLCBOVUxMLCBydW5fdGhyZWFkLCBhc3luYyk7CisJCWlmIChlcnIpIHsKKwkJCWVycm9yKCJjYW5ub3QgY3JlYXRlIHRocmVhZDogJXMiLCBzdHJlcnJvcihlcnIpKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJaWYgKG5lZWRfaW4pCisJCWNsb3NlX3BhaXIoZmRpbik7CisJZWxzZSBpZiAoYXN5bmMtPmluKQorCQljbG9zZShhc3luYy0+aW4pOworCisJaWYgKG5lZWRfb3V0KQorCQljbG9zZV9wYWlyKGZkb3V0KTsKKwllbHNlIGlmIChhc3luYy0+b3V0KQorCQljbG9zZShhc3luYy0+b3V0KTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBmaW5pc2hfYXN5bmMoc3RydWN0IGFzeW5jICphc3luYykKK3sKKyNpZmRlZiBOT19QVEhSRUFEUworCXJldHVybiB3YWl0X29yX3doaW5lKGFzeW5jLT5waWQsICJjaGlsZCBwcm9jZXNzIiwgMCk7CisjZWxzZQorCXZvaWQgKnJldCA9ICh2b2lkICopKGludHB0cl90KSgtMSk7CisKKwlpZiAocHRocmVhZF9qb2luKGFzeW5jLT50aWQsICZyZXQpKQorCQllcnJvcigicHRocmVhZF9qb2luIGZhaWxlZCIpOworCXJldHVybiAoaW50KShpbnRwdHJfdClyZXQ7CisjZW5kaWYKK30KKworY29uc3QgY2hhciAqZmluZF9ob29rKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCisJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwlzdHJidWZfZ2l0X3BhdGgoJnBhdGgsICJob29rcy8lcyIsIG5hbWUpOworCWlmIChhY2Nlc3MocGF0aC5idWYsIFhfT0spIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIHBhdGguYnVmOworfQorCitpbnQgcnVuX2hvb2tfdmUoY29uc3QgY2hhciAqY29uc3QgKmVudiwgY29uc3QgY2hhciAqbmFtZSwgdmFfbGlzdCBhcmdzKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGhvb2sgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqcDsKKworCXAgPSBmaW5kX2hvb2sobmFtZSk7CisJaWYgKCFwKQorCQlyZXR1cm4gMDsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmaG9vay5hcmdzLCBwKTsKKwl3aGlsZSAoKHAgPSB2YV9hcmcoYXJncywgY29uc3QgY2hhciAqKSkpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmaG9vay5hcmdzLCBwKTsKKwlob29rLmVudiA9IGVudjsKKwlob29rLm5vX3N0ZGluID0gMTsKKwlob29rLnN0ZG91dF90b19zdGRlcnIgPSAxOworCisJcmV0dXJuIHJ1bl9jb21tYW5kKCZob29rKTsKK30KKworaW50IHJ1bl9ob29rX2xlKGNvbnN0IGNoYXIgKmNvbnN0ICplbnYsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IHJldDsKKworCXZhX3N0YXJ0KGFyZ3MsIG5hbWUpOworCXJldCA9IHJ1bl9ob29rX3ZlKGVudiwgbmFtZSwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGNhcHR1cmVfY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY21kLCBzdHJ1Y3Qgc3RyYnVmICpidWYsIHNpemVfdCBoaW50KQoreworCWNtZC0+b3V0ID0gLTE7CisJaWYgKHN0YXJ0X2NvbW1hbmQoY21kKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChzdHJidWZfcmVhZChidWYsIGNtZC0+b3V0LCBoaW50KSA8IDApIHsKKwkJY2xvc2UoY21kLT5vdXQpOworCQlmaW5pc2hfY29tbWFuZChjbWQpOyAvKiB0aHJvdyBhd2F5IGV4aXQgY29kZSAqLworCQlyZXR1cm4gLTE7CisJfQorCisJY2xvc2UoY21kLT5vdXQpOworCXJldHVybiBmaW5pc2hfY29tbWFuZChjbWQpOworfQpkaWZmIC0tZ2l0IGEvcnVuLWNvbW1hbmQuaCBiL3J1bi1jb21tYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyOGIwNAotLS0gL2Rldi9udWxsCisrKyBiL3J1bi1jb21tYW5kLmgKQEAgLTAsMCArMSwxMjQgQEAKKyNpZm5kZWYgUlVOX0NPTU1BTkRfSAorI2RlZmluZSBSVU5fQ09NTUFORF9ICisKKyNpZm5kZWYgTk9fUFRIUkVBRFMKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworc3RydWN0IGNoaWxkX3Byb2Nlc3MgeworCWNvbnN0IGNoYXIgKiphcmd2OworCXN0cnVjdCBhcmd2X2FycmF5IGFyZ3M7CisJc3RydWN0IGFyZ3ZfYXJyYXkgZW52X2FycmF5OworCXBpZF90IHBpZDsKKwkvKgorCSAqIFVzaW5nIC5pbiwgLm91dCwgLmVycjoKKwkgKiAtIFNwZWNpZnkgMCBmb3Igbm8gcmVkaXJlY3Rpb25zIChjaGlsZCBpbmhlcml0cyBzdGRpbiwgc3Rkb3V0LAorCSAqICAgc3RkZXJyIGZyb20gcGFyZW50KS4KKwkgKiAtIFNwZWNpZnkgLTEgdG8gaGF2ZSBhIHBpcGUgYWxsb2NhdGVkIGFzIGZvbGxvd3M6CisJICogICAgIC5pbjogcmV0dXJucyB0aGUgd3JpdGFibGUgcGlwZSBlbmQ7IHBhcmVudCB3cml0ZXMgdG8gaXQsCisJICogICAgICAgICAgdGhlIHJlYWRhYmxlIHBpcGUgZW5kIGJlY29tZXMgY2hpbGQncyBzdGRpbgorCSAqICAgICAub3V0LCAuZXJyOiByZXR1cm5zIHRoZSByZWFkYWJsZSBwaXBlIGVuZDsgcGFyZW50IHJlYWRzIGZyb20KKwkgKiAgICAgICAgICBpdCwgdGhlIHdyaXRhYmxlIHBpcGUgZW5kIGJlY29tZXMgY2hpbGQncyBzdGRvdXQvc3RkZXJyCisJICogICBUaGUgY2FsbGVyIG9mIHN0YXJ0X2NvbW1hbmQoKSBtdXN0IGNsb3NlIHRoZSByZXR1cm5lZCBGRHMKKwkgKiAgIGFmdGVyIGl0IGhhcyBjb21wbGV0ZWQgcmVhZGluZyBmcm9tL3dyaXRpbmcgdG8gaXQhCisJICogLSBTcGVjaWZ5ID4gMCB0byBzZXQgYSBjaGFubmVsIHRvIGEgcGFydGljdWxhciBGRCBhcyBmb2xsb3dzOgorCSAqICAgICAuaW46IGEgcmVhZGFibGUgRkQsIGJlY29tZXMgY2hpbGQncyBzdGRpbgorCSAqICAgICAub3V0OiBhIHdyaXRhYmxlIEZELCBiZWNvbWVzIGNoaWxkJ3Mgc3Rkb3V0L3N0ZGVycgorCSAqICAgICAuZXJyOiBhIHdyaXRhYmxlIEZELCBiZWNvbWVzIGNoaWxkJ3Mgc3RkZXJyCisJICogICBUaGUgc3BlY2lmaWVkIEZEIGlzIGNsb3NlZCBieSBzdGFydF9jb21tYW5kKCksIGV2ZW4gaW4gY2FzZQorCSAqICAgb2YgZXJyb3JzIQorCSAqLworCWludCBpbjsKKwlpbnQgb3V0OworCWludCBlcnI7CisJY29uc3QgY2hhciAqZGlyOworCWNvbnN0IGNoYXIgKmNvbnN0ICplbnY7CisJdW5zaWduZWQgbm9fc3RkaW46MTsKKwl1bnNpZ25lZCBub19zdGRvdXQ6MTsKKwl1bnNpZ25lZCBub19zdGRlcnI6MTsKKwl1bnNpZ25lZCBnaXRfY21kOjE7IC8qIGlmIHRoaXMgaXMgdG8gYmUgZ2l0IHN1Yi1jb21tYW5kICovCisJdW5zaWduZWQgc2lsZW50X2V4ZWNfZmFpbHVyZToxOworCXVuc2lnbmVkIHN0ZG91dF90b19zdGRlcnI6MTsKKwl1bnNpZ25lZCB1c2Vfc2hlbGw6MTsKKwl1bnNpZ25lZCBjbGVhbl9vbl9leGl0OjE7Cit9OworCisjZGVmaW5lIENISUxEX1BST0NFU1NfSU5JVCB7IE5VTEwsIEFSR1ZfQVJSQVlfSU5JVCwgQVJHVl9BUlJBWV9JTklUIH0KK3ZvaWQgY2hpbGRfcHJvY2Vzc19pbml0KHN0cnVjdCBjaGlsZF9wcm9jZXNzICopOworCitpbnQgc3RhcnRfY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqKTsKK2ludCBmaW5pc2hfY29tbWFuZChzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqKTsKK2ludCBmaW5pc2hfY29tbWFuZF9pbl9zaWduYWwoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKik7CitpbnQgcnVuX2NvbW1hbmQoc3RydWN0IGNoaWxkX3Byb2Nlc3MgKik7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBob29rIGZpbGUsIG9yIE5VTEwgaWYgdGhlIGhvb2sgaXMgbWlzc2luZworICogb3IgZGlzYWJsZWQuIE5vdGUgdGhhdCB0aGlzIHBvaW50cyB0byBzdGF0aWMgc3RvcmFnZSB0aGF0IHdpbGwgYmUKKyAqIG92ZXJ3cml0dGVuIGJ5IGZ1cnRoZXIgY2FsbHMgdG8gZmluZF9ob29rIGFuZCBydW5faG9va18qLgorICovCitleHRlcm4gY29uc3QgY2hhciAqZmluZF9ob29rKGNvbnN0IGNoYXIgKm5hbWUpOworTEFTVF9BUkdfTVVTVF9CRV9OVUxMCitleHRlcm4gaW50IHJ1bl9ob29rX2xlKGNvbnN0IGNoYXIgKmNvbnN0ICplbnYsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLik7CitleHRlcm4gaW50IHJ1bl9ob29rX3ZlKGNvbnN0IGNoYXIgKmNvbnN0ICplbnYsIGNvbnN0IGNoYXIgKm5hbWUsIHZhX2xpc3QgYXJncyk7CisKKyNkZWZpbmUgUlVOX0NPTU1BTkRfTk9fU1RESU4gMQorI2RlZmluZSBSVU5fR0lUX0NNRAkgICAgIDIJLypJZiB0aGlzIGlzIHRvIGJlIGdpdCBzdWItY29tbWFuZCAqLworI2RlZmluZSBSVU5fQ09NTUFORF9TVERPVVRfVE9fU1RERVJSIDQKKyNkZWZpbmUgUlVOX1NJTEVOVF9FWEVDX0ZBSUxVUkUgOAorI2RlZmluZSBSVU5fVVNJTkdfU0hFTEwgMTYKKyNkZWZpbmUgUlVOX0NMRUFOX09OX0VYSVQgMzIKK2ludCBydW5fY29tbWFuZF92X29wdChjb25zdCBjaGFyICoqYXJndiwgaW50IG9wdCk7CisKKy8qCisgKiBlbnYgKHRoZSBlbnZpcm9ubWVudCkgaXMgdG8gYmUgZm9ybWF0dGVkIGxpa2UgZW52aXJvbjogIlZBUj1WQUxVRSIuCisgKiBUbyB1bnNldCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB1c2UganVzdCAiVkFSIi4KKyAqLworaW50IHJ1bl9jb21tYW5kX3Zfb3B0X2NkX2Vudihjb25zdCBjaGFyICoqYXJndiwgaW50IG9wdCwgY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpjb25zdCAqZW52KTsKKworLyoqCisgKiBFeGVjdXRlIHRoZSBnaXZlbiBjb21tYW5kLCBjYXB0dXJpbmcgaXRzIHN0ZG91dCBpbiB0aGUgZ2l2ZW4gc3RyYnVmLgorICogUmV0dXJucyAtMSBpZiBzdGFydGluZyB0aGUgY29tbWFuZCBmYWlscyBvciByZWFkaW5nIGZhaWxzLCBhbmQgb3RoZXJ3aXNlCisgKiByZXR1cm5zIHRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuIFRoZSBvdXRwdXQgY29sbGVjdGVkIGluIHRoZQorICogYnVmZmVyIGlzIGtlcHQgZXZlbiBpZiB0aGUgY29tbWFuZCByZXR1cm5zIGEgbm9uLXplcm8gZXhpdC4gVGhlIGhpbnQgZmllbGQKKyAqIGdpdmVzIGEgc3RhcnRpbmcgc2l6ZSBmb3IgdGhlIHN0cmJ1ZiBhbGxvY2F0aW9uLgorICoKKyAqIFRoZSBmaWVsZHMgb2YgImNtZCIgc2hvdWxkIGJlIHNldCB1cCBhcyB0aGV5IHdvdWxkIGZvciBhIG5vcm1hbCBydW5fY29tbWFuZAorICogaW52b2NhdGlvbi4gQnV0IG5vdGUgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIHNldCBjbWQtPm91dDsgdGhlIGZ1bmN0aW9uCisgKiBzZXRzIGl0IHVwIGZvciB0aGUgY2FsbGVyLgorICovCitpbnQgY2FwdHVyZV9jb21tYW5kKHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjbWQsIHN0cnVjdCBzdHJidWYgKmJ1Ziwgc2l6ZV90IGhpbnQpOworCisvKgorICogVGhlIHB1cnBvc2Ugb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgaXMgdG8gZmVlZCBhIHBpcGUgYnkgcnVubmluZworICogYSBmdW5jdGlvbiBhc3luY2hyb25vdXNseSBhbmQgcHJvdmlkaW5nIG91dHB1dCB0aGF0IHRoZSBjYWxsZXIgcmVhZHMuCisgKgorICogSXQgaXMgZXhwZWN0ZWQgdGhhdCBubyBzeW5jaHJvbml6YXRpb24gYW5kIG11dHVhbCBleGNsdXNpb24gYmV0d2VlbgorICogdGhlIGNhbGxlciBhbmQgdGhlIGZlZWQgZnVuY3Rpb24gaXMgbmVjZXNzYXJ5IHNvIHRoYXQgdGhlIGZ1bmN0aW9uCisgKiBjYW4gcnVuIGluIGEgdGhyZWFkIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgY2FsbGVyLgorICovCitzdHJ1Y3QgYXN5bmMgeworCS8qCisJICogcHJvYyByZWFkcyBmcm9tIGluOyBjbG9zZXMgaXQgYmVmb3JlIHJldHVybgorCSAqIHByb2Mgd3JpdGVzIHRvIG91dDsgY2xvc2VzIGl0IGJlZm9yZSByZXR1cm4KKwkgKiByZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZQorCSAqLworCWludCAoKnByb2MpKGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSk7CisJdm9pZCAqZGF0YTsKKwlpbnQgaW47CQkvKiBjYWxsZXIgd3JpdGVzIGhlcmUgYW5kIGNsb3NlcyBpdCAqLworCWludCBvdXQ7CS8qIGNhbGxlciByZWFkcyBmcm9tIGhlcmUgYW5kIGNsb3NlcyBpdCAqLworI2lmZGVmIE5PX1BUSFJFQURTCisJcGlkX3QgcGlkOworI2Vsc2UKKwlwdGhyZWFkX3QgdGlkOworCWludCBwcm9jX2luOworCWludCBwcm9jX291dDsKKyNlbmRpZgorfTsKKworaW50IHN0YXJ0X2FzeW5jKHN0cnVjdCBhc3luYyAqYXN5bmMpOworaW50IGZpbmlzaF9hc3luYyhzdHJ1Y3QgYXN5bmMgKmFzeW5jKTsKK2ludCBpbl9hc3luYyh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zZW5kLXBhY2suYyBiL3NlbmQtcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YTQwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9zZW5kLXBhY2suYwpAQCAtMCwwICsxLDU3OCBAQAorI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAicGt0LWxpbmUuaCIKKyNpbmNsdWRlICJzaWRlYmFuZC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAiY29ubmVjdC5oIgorI2luY2x1ZGUgInNlbmQtcGFjay5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAidHJhbnNwb3J0LmgiCisjaW5jbHVkZSAidmVyc2lvbi5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJncGctaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IG9wdGlvbl9wYXJzZV9wdXNoX3NpZ25lZChjb25zdCBzdHJ1Y3Qgb3B0aW9uICpvcHQsCisJCQkgICAgIGNvbnN0IGNoYXIgKmFyZywgaW50IHVuc2V0KQoreworCWlmICh1bnNldCkgeworCQkqKGludCAqKShvcHQtPnZhbHVlKSA9IFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVI7CisJCXJldHVybiAwOworCX0KKwlzd2l0Y2ggKGdpdF9wYXJzZV9tYXliZV9ib29sKGFyZykpIHsKKwljYXNlIDE6CisJCSooaW50ICopKG9wdC0+dmFsdWUpID0gU0VORF9QQUNLX1BVU0hfQ0VSVF9BTFdBWVM7CisJCXJldHVybiAwOworCWNhc2UgMDoKKwkJKihpbnQgKikob3B0LT52YWx1ZSkgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX05FVkVSOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCFzdHJjYXNlY21wKCJpZi1hc2tlZCIsIGFyZykpIHsKKwkJKihpbnQgKikob3B0LT52YWx1ZSkgPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0lGX0FTS0VEOworCQlyZXR1cm4gMDsKKwl9CisJZGllKCJiYWQgJXMgYXJndW1lbnQ6ICVzIiwgb3B0LT5sb25nX25hbWUsIGFyZyk7Cit9CisKK3N0YXRpYyBpbnQgZmVlZF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBpbnQgbmVnYXRpdmUpCit7CisJY2hhciBidWZbNDJdOworCisJaWYgKG5lZ2F0aXZlICYmICFoYXNfc2hhMV9maWxlKHNoYTEpKQorCQlyZXR1cm4gMTsKKworCW1lbWNweShidWYgKyBuZWdhdGl2ZSwgc2hhMV90b19oZXgoc2hhMSksIDQwKTsKKwlpZiAobmVnYXRpdmUpCisJCWJ1ZlswXSA9ICdeJzsKKwlidWZbNDAgKyBuZWdhdGl2ZV0gPSAnXG4nOworCXJldHVybiB3cml0ZV9vcl93aGluZShmZCwgYnVmLCA0MSArIG5lZ2F0aXZlLCAic2VuZC1wYWNrOiBzZW5kIHJlZnMiKTsKK30KKworLyoKKyAqIE1ha2UgYSBwYWNrIHN0cmVhbSBhbmQgc3BpdCBpdCBvdXQgaW50byBmaWxlIGRlc2NyaXB0b3IgZmQKKyAqLworc3RhdGljIGludCBwYWNrX29iamVjdHMoaW50IGZkLCBzdHJ1Y3QgcmVmICpyZWZzLCBzdHJ1Y3Qgc2hhMV9hcnJheSAqZXh0cmEsIHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncykKK3sKKwkvKgorCSAqIFRoZSBjaGlsZCBiZWNvbWVzIHBhY2stb2JqZWN0cyAtLXJldnM7IHdlIGZlZWQKKwkgKiB0aGUgcmV2aXNpb24gcGFyYW1ldGVycyB0byBpdCB2aWEgaXRzIHN0ZGluIGFuZAorCSAqIGxldCBpdHMgc3Rkb3V0IGdvIGJhY2sgdG8gdGhlIG90aGVyIGVuZC4KKwkgKi8KKwljb25zdCBjaGFyICphcmd2W10gPSB7CisJCSJwYWNrLW9iamVjdHMiLAorCQkiLS1hbGwtcHJvZ3Jlc3MtaW1wbGllZCIsCisJCSItLXJldnMiLAorCQkiLS1zdGRvdXQiLAorCQlOVUxMLAorCQlOVUxMLAorCQlOVUxMLAorCQlOVUxMLAorCQlOVUxMLAorCQlOVUxMLAorCX07CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcG8gPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJaW50IGk7CisKKwlpID0gNDsKKwlpZiAoYXJncy0+dXNlX3RoaW5fcGFjaykKKwkJYXJndltpKytdID0gIi0tdGhpbiI7CisJaWYgKGFyZ3MtPnVzZV9vZnNfZGVsdGEpCisJCWFyZ3ZbaSsrXSA9ICItLWRlbHRhLWJhc2Utb2Zmc2V0IjsKKwlpZiAoYXJncy0+cXVpZXQgfHwgIWFyZ3MtPnByb2dyZXNzKQorCQlhcmd2W2krK10gPSAiLXEiOworCWlmIChhcmdzLT5wcm9ncmVzcykKKwkJYXJndltpKytdID0gIi0tcHJvZ3Jlc3MiOworCWlmIChpc19yZXBvc2l0b3J5X3NoYWxsb3coKSkKKwkJYXJndltpKytdID0gIi0tc2hhbGxvdyI7CisJcG8uYXJndiA9IGFyZ3Y7CisJcG8uaW4gPSAtMTsKKwlwby5vdXQgPSBhcmdzLT5zdGF0ZWxlc3NfcnBjID8gLTEgOiBmZDsKKwlwby5naXRfY21kID0gMTsKKwlpZiAoc3RhcnRfY29tbWFuZCgmcG8pKQorCQlkaWVfZXJybm8oImdpdCBwYWNrLW9iamVjdHMgZmFpbGVkIik7CisKKwkvKgorCSAqIFdlIGZlZWQgdGhlIHBhY2stb2JqZWN0cyB3ZSBqdXN0IHNwYXduZWQgd2l0aCByZXZpc2lvbgorCSAqIHBhcmFtZXRlcnMgYnkgd3JpdGluZyB0byB0aGUgcGlwZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZXh0cmEtPm5yOyBpKyspCisJCWlmICghZmVlZF9vYmplY3QoZXh0cmEtPnNoYTFbaV0sIHBvLmluLCAxKSkKKwkJCWJyZWFrOworCisJd2hpbGUgKHJlZnMpIHsKKwkJaWYgKCFpc19udWxsX3NoYTEocmVmcy0+b2xkX3NoYTEpICYmCisJCSAgICAhZmVlZF9vYmplY3QocmVmcy0+b2xkX3NoYTEsIHBvLmluLCAxKSkKKwkJCWJyZWFrOworCQlpZiAoIWlzX251bGxfc2hhMShyZWZzLT5uZXdfc2hhMSkgJiYKKwkJICAgICFmZWVkX29iamVjdChyZWZzLT5uZXdfc2hhMSwgcG8uaW4sIDApKQorCQkJYnJlYWs7CisJCXJlZnMgPSByZWZzLT5uZXh0OworCX0KKworCWNsb3NlKHBvLmluKTsKKworCWlmIChhcmdzLT5zdGF0ZWxlc3NfcnBjKSB7CisJCWNoYXIgKmJ1ZiA9IHhtYWxsb2MoTEFSR0VfUEFDS0VUX01BWCk7CisJCXdoaWxlICgxKSB7CisJCQlzc2l6ZV90IG4gPSB4cmVhZChwby5vdXQsIGJ1ZiwgTEFSR0VfUEFDS0VUX01BWCk7CisJCQlpZiAobiA8PSAwKQorCQkJCWJyZWFrOworCQkJc2VuZF9zaWRlYmFuZChmZCwgLTEsIGJ1ZiwgbiwgTEFSR0VfUEFDS0VUX01BWCk7CisJCX0KKwkJZnJlZShidWYpOworCQljbG9zZShwby5vdXQpOworCQlwby5vdXQgPSAtMTsKKwl9CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJnBvKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlY2VpdmVfc3RhdHVzKGludCBpbiwgc3RydWN0IHJlZiAqcmVmcykKK3sKKwlzdHJ1Y3QgcmVmICpoaW50OworCWludCByZXQgPSAwOworCWNoYXIgKmxpbmUgPSBwYWNrZXRfcmVhZF9saW5lKGluLCBOVUxMKTsKKwlpZiAoIXN0YXJ0c193aXRoKGxpbmUsICJ1bnBhY2sgIikpCisJCXJldHVybiBlcnJvcigiZGlkIG5vdCByZWNlaXZlIHJlbW90ZSBzdGF0dXMiKTsKKwlpZiAoc3RyY21wKGxpbmUsICJ1bnBhY2sgb2siKSkgeworCQllcnJvcigidW5wYWNrIGZhaWxlZDogJXMiLCBsaW5lICsgNyk7CisJCXJldCA9IC0xOworCX0KKwloaW50ID0gTlVMTDsKKwl3aGlsZSAoMSkgeworCQljaGFyICpyZWZuYW1lOworCQljaGFyICptc2c7CisJCWxpbmUgPSBwYWNrZXRfcmVhZF9saW5lKGluLCBOVUxMKTsKKwkJaWYgKCFsaW5lKQorCQkJYnJlYWs7CisJCWlmICghc3RhcnRzX3dpdGgobGluZSwgIm9rICIpICYmICFzdGFydHNfd2l0aChsaW5lLCAibmcgIikpIHsKKwkJCWVycm9yKCJpbnZhbGlkIHJlZiBzdGF0dXMgZnJvbSByZW1vdGU6ICVzIiwgbGluZSk7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJcmVmbmFtZSA9IGxpbmUgKyAzOworCQltc2cgPSBzdHJjaHIocmVmbmFtZSwgJyAnKTsKKwkJaWYgKG1zZykKKwkJCSptc2crKyA9ICdcMCc7CisKKwkJLyogZmlyc3QgdHJ5IHNlYXJjaGluZyBhdCBvdXIgaGludCwgZmFsbGluZyBiYWNrIHRvIGFsbCByZWZzICovCisJCWlmIChoaW50KQorCQkJaGludCA9IGZpbmRfcmVmX2J5X25hbWUoaGludCwgcmVmbmFtZSk7CisJCWlmICghaGludCkKKwkJCWhpbnQgPSBmaW5kX3JlZl9ieV9uYW1lKHJlZnMsIHJlZm5hbWUpOworCQlpZiAoIWhpbnQpIHsKKwkJCXdhcm5pbmcoInJlbW90ZSByZXBvcnRlZCBzdGF0dXMgb24gdW5rbm93biByZWY6ICVzIiwKKwkJCQkJcmVmbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoaGludC0+c3RhdHVzICE9IFJFRl9TVEFUVVNfRVhQRUNUSU5HX1JFUE9SVCkgeworCQkJd2FybmluZygicmVtb3RlIHJlcG9ydGVkIHN0YXR1cyBvbiB1bmV4cGVjdGVkIHJlZjogJXMiLAorCQkJCQlyZWZuYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGxpbmVbMF0gPT0gJ28nICYmIGxpbmVbMV0gPT0gJ2snKQorCQkJaGludC0+c3RhdHVzID0gUkVGX1NUQVRVU19PSzsKKwkJZWxzZSB7CisJCQloaW50LT5zdGF0dXMgPSBSRUZfU1RBVFVTX1JFTU9URV9SRUpFQ1Q7CisJCQlyZXQgPSAtMTsKKwkJfQorCQlpZiAobXNnKQorCQkJaGludC0+cmVtb3RlX3N0YXR1cyA9IHhzdHJkdXAobXNnKTsKKwkJLyogc3RhcnQgb3VyIG5leHQgc2VhcmNoIGZyb20gdGhlIG5leHQgcmVmICovCisJCWhpbnQgPSBoaW50LT5uZXh0OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpZGViYW5kX2RlbXV4KGludCBpbiwgaW50IG91dCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgKmZkID0gZGF0YSwgcmV0OworI2lmZGVmIE5PX1BUSFJFQURTCisJY2xvc2UoZmRbMV0pOworI2VuZGlmCisJcmV0ID0gcmVjdl9zaWRlYmFuZCgic2VuZC1wYWNrIiwgZmRbMF0sIG91dCk7CisJY2xvc2Uob3V0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFkdmVydGlzZV9zaGFsbG93X2dyYWZ0c19jYihjb25zdCBzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCwgdm9pZCAqY2IpCit7CisJc3RydWN0IHN0cmJ1ZiAqc2IgPSBjYjsKKwlpZiAoZ3JhZnQtPm5yX3BhcmVudCA9PSAtMSkKKwkJcGFja2V0X2J1Zl93cml0ZShzYiwgInNoYWxsb3cgJXNcbiIsIG9pZF90b19oZXgoJmdyYWZ0LT5vaWQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzX2J1ZihzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlpZiAoIWlzX3JlcG9zaXRvcnlfc2hhbGxvdygpKQorCQlyZXR1cm47CisJZm9yX2VhY2hfY29tbWl0X2dyYWZ0KGFkdmVydGlzZV9zaGFsbG93X2dyYWZ0c19jYiwgc2IpOworfQorCisjZGVmaW5lIENIRUNLX1JFRl9OT19QVVNIIC0xCisjZGVmaW5lIENIRUNLX1JFRl9TVEFUVVNfUkVKRUNURUQgLTIKKyNkZWZpbmUgQ0hFQ0tfUkVGX1VQVE9EQVRFIC0zCitzdGF0aWMgaW50IGNoZWNrX3RvX3NlbmRfdXBkYXRlKGNvbnN0IHN0cnVjdCByZWYgKnJlZiwgY29uc3Qgc3RydWN0IHNlbmRfcGFja19hcmdzICphcmdzKQoreworCWlmICghcmVmLT5wZWVyX3JlZiAmJiAhYXJncy0+c2VuZF9taXJyb3IpCisJCXJldHVybiBDSEVDS19SRUZfTk9fUFVTSDsKKworCS8qIENoZWNrIGZvciBzdGF0dXNlcyBzZXQgYnkgc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2goKSAqLworCXN3aXRjaCAocmVmLT5zdGF0dXMpIHsKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOgorCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfQUxSRUFEWV9FWElTVFM6CisJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9GRVRDSF9GSVJTVDoKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05FRURTX0ZPUkNFOgorCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfU1RBTEU6CisJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT0RFTEVURToKKwkJcmV0dXJuIENIRUNLX1JFRl9TVEFUVVNfUkVKRUNURUQ7CisJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQlyZXR1cm4gQ0hFQ0tfUkVGX1VQVE9EQVRFOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZSwgb3IgdGhlIGVuZCBvZiBidWZmZXIuCisgKgorICogTkVFRFNXT1JLOiBwZXJoYXBzIG1vdmUgdGhpcyB0byBnaXQtY29tcGF0LXV0aWwuaCBvciBzb21ld2hlcmUgYW5kCisgKiBjb252ZXJ0IG1hbnkgc2ltaWxhciB1c2VzIGZvdW5kIGJ5ICJnaXQgZ3JlcCAtQTQgbWVtY2hyIi4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKm5leHRfbGluZShjb25zdCBjaGFyICpsaW5lLCBzaXplX3QgbGVuKQoreworCWNvbnN0IGNoYXIgKm5sID0gbWVtY2hyKGxpbmUsICdcbicsIGxlbik7CisJaWYgKCFubCkKKwkJcmV0dXJuIGxpbmUgKyBsZW47IC8qIGluY29tcGxldGUgbGluZSAqLworCXJldHVybiBubCArIDE7Cit9CisKK3N0YXRpYyBpbnQgZ2VuZXJhdGVfcHVzaF9jZXJ0KHN0cnVjdCBzdHJidWYgKnJlcV9idWYsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwkJCSAgICAgIHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmNhcF9zdHJpbmcsCisJCQkgICAgICBjb25zdCBjaGFyICpwdXNoX2NlcnRfbm9uY2UpCit7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVmOworCWNoYXIgKnNpZ25pbmdfa2V5ID0geHN0cmR1cChnZXRfc2lnbmluZ19rZXkoKSk7CisJY29uc3QgY2hhciAqY3AsICpucDsKKwlzdHJ1Y3Qgc3RyYnVmIGNlcnQgPSBTVFJCVUZfSU5JVDsKKwlpbnQgdXBkYXRlX3NlZW4gPSAwOworCisJc3RyYnVmX2FkZGYoJmNlcnQsICJjZXJ0aWZpY2F0ZSB2ZXJzaW9uIDAuMVxuIik7CisJc3RyYnVmX2FkZGYoJmNlcnQsICJwdXNoZXIgJXMgIiwgc2lnbmluZ19rZXkpOworCWRhdGVzdGFtcCgmY2VydCk7CisJc3RyYnVmX2FkZGNoKCZjZXJ0LCAnXG4nKTsKKwlpZiAoYXJncy0+dXJsICYmICphcmdzLT51cmwpIHsKKwkJY2hhciAqYW5vbl91cmwgPSB0cmFuc3BvcnRfYW5vbnltaXplX3VybChhcmdzLT51cmwpOworCQlzdHJidWZfYWRkZigmY2VydCwgInB1c2hlZSAlc1xuIiwgYW5vbl91cmwpOworCQlmcmVlKGFub25fdXJsKTsKKwl9CisJaWYgKHB1c2hfY2VydF9ub25jZVswXSkKKwkJc3RyYnVmX2FkZGYoJmNlcnQsICJub25jZSAlc1xuIiwgcHVzaF9jZXJ0X25vbmNlKTsKKwlzdHJidWZfYWRkc3RyKCZjZXJ0LCAiXG4iKTsKKworCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmIChjaGVja190b19zZW5kX3VwZGF0ZShyZWYsIGFyZ3MpIDwgMCkKKwkJCWNvbnRpbnVlOworCQl1cGRhdGVfc2VlbiA9IDE7CisJCXN0cmJ1Zl9hZGRmKCZjZXJ0LCAiJXMgJXMgJXNcbiIsCisJCQkgICAgc2hhMV90b19oZXgocmVmLT5vbGRfc2hhMSksCisJCQkgICAgc2hhMV90b19oZXgocmVmLT5uZXdfc2hhMSksCisJCQkgICAgcmVmLT5uYW1lKTsKKwl9CisJaWYgKCF1cGRhdGVfc2VlbikKKwkJZ290byBmcmVlX3JldHVybjsKKworCWlmIChzaWduX2J1ZmZlcigmY2VydCwgJmNlcnQsIHNpZ25pbmdfa2V5KSkKKwkJZGllKF8oImZhaWxlZCB0byBzaWduIHRoZSBwdXNoIGNlcnRpZmljYXRlIikpOworCisJcGFja2V0X2J1Zl93cml0ZShyZXFfYnVmLCAicHVzaC1jZXJ0JWMlcyIsIDAsIGNhcF9zdHJpbmcpOworCWZvciAoY3AgPSBjZXJ0LmJ1ZjsgY3AgPCBjZXJ0LmJ1ZiArIGNlcnQubGVuOyBjcCA9IG5wKSB7CisJCW5wID0gbmV4dF9saW5lKGNwLCBjZXJ0LmJ1ZiArIGNlcnQubGVuIC0gY3ApOworCQlwYWNrZXRfYnVmX3dyaXRlKHJlcV9idWYsCisJCQkJICIlLipzIiwgKGludCkobnAgLSBjcCksIGNwKTsKKwl9CisJcGFja2V0X2J1Zl93cml0ZShyZXFfYnVmLCAicHVzaC1jZXJ0LWVuZFxuIik7CisKK2ZyZWVfcmV0dXJuOgorCWZyZWUoc2lnbmluZ19rZXkpOworCXN0cmJ1Zl9yZWxlYXNlKCZjZXJ0KTsKKwlyZXR1cm4gdXBkYXRlX3NlZW47Cit9CisKKworc3RhdGljIGludCBhdG9taWNfcHVzaF9mYWlsdXJlKHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncywKKwkJCSAgICAgICBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcywKKwkJCSAgICAgICBzdHJ1Y3QgcmVmICpmYWlsaW5nX3JlZikKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisJLyogTWFyayBvdGhlciByZWZzIGFzIGZhaWxlZCAqLworCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWlmICghcmVmLT5wZWVyX3JlZiAmJiAhYXJncy0+c2VuZF9taXJyb3IpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKHJlZi0+c3RhdHVzKSB7CisJCWNhc2UgUkVGX1NUQVRVU19FWFBFQ1RJTkdfUkVQT1JUOgorCQkJcmVmLT5zdGF0dXMgPSBSRUZfU1RBVFVTX0FUT01JQ19QVVNIX0ZBSUxFRDsKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJYnJlYWs7IC8qIGRvIG5vdGhpbmcgKi8KKwkJfQorCX0KKwlyZXR1cm4gZXJyb3IoImF0b21pYyBwdXNoIGZhaWxlZCBmb3IgcmVmICVzLiBzdGF0dXM6ICVkXG4iLAorCQkgICAgIGZhaWxpbmdfcmVmLT5uYW1lLCBmYWlsaW5nX3JlZi0+c3RhdHVzKTsKK30KKworI2RlZmluZSBOT05DRV9MRU5fTElNSVQgMjU2CisKK3N0YXRpYyB2b2lkIHJlamVjdF9pbnZhbGlkX25vbmNlKGNvbnN0IGNoYXIgKm5vbmNlLCBpbnQgbGVuKQoreworCWludCBpID0gMDsKKworCWlmIChOT05DRV9MRU5fTElNSVQgPD0gbGVuKQorCQlkaWUoInRoZSByZWNlaXZpbmcgZW5kIGFza2VkIHRvIHNpZ24gYW4gaW52YWxpZCBub25jZSA8JS4qcz4iLAorCQkgICAgbGVuLCBub25jZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaW50IGNoID0gbm9uY2VbaV0gJiAweEZGOworCQlpZiAoaXNhbG51bShjaCkgfHwKKwkJICAgIGNoID09ICctJyB8fCBjaCA9PSAnLicgfHwKKwkJICAgIGNoID09ICcvJyB8fCBjaCA9PSAnKycgfHwKKwkJICAgIGNoID09ICc9JyB8fCBjaCA9PSAnXycpCisJCQljb250aW51ZTsKKwkJZGllKCJ0aGUgcmVjZWl2aW5nIGVuZCBhc2tlZCB0byBzaWduIGFuIGludmFsaWQgbm9uY2UgPCUuKnM+IiwKKwkJICAgIGxlbiwgbm9uY2UpOworCX0KK30KKworaW50IHNlbmRfcGFjayhzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgKmFyZ3MsCisJICAgICAgaW50IGZkW10sIHN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uLAorCSAgICAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLAorCSAgICAgIHN0cnVjdCBzaGExX2FycmF5ICpleHRyYV9oYXZlKQoreworCWludCBpbiA9IGZkWzBdOworCWludCBvdXQgPSBmZFsxXTsKKwlzdHJ1Y3Qgc3RyYnVmIHJlcV9idWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNhcF9idWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmICpyZWY7CisJaW50IG5lZWRfcGFja19kYXRhID0gMDsKKwlpbnQgYWxsb3dfZGVsZXRpbmdfcmVmcyA9IDA7CisJaW50IHN0YXR1c19yZXBvcnQgPSAwOworCWludCB1c2Vfc2lkZWJhbmQgPSAwOworCWludCBxdWlldF9zdXBwb3J0ZWQgPSAwOworCWludCBhZ2VudF9zdXBwb3J0ZWQgPSAwOworCWludCB1c2VfYXRvbWljID0gMDsKKwlpbnQgYXRvbWljX3N1cHBvcnRlZCA9IDA7CisJdW5zaWduZWQgY21kc19zZW50ID0gMDsKKwlpbnQgcmV0OworCXN0cnVjdCBhc3luYyBkZW11eDsKKwljb25zdCBjaGFyICpwdXNoX2NlcnRfbm9uY2UgPSBOVUxMOworCisJLyogRG9lcyB0aGUgb3RoZXIgZW5kIHN1cHBvcnQgdGhlIHJlcG9ydGluZz8gKi8KKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJyZXBvcnQtc3RhdHVzIikpCisJCXN0YXR1c19yZXBvcnQgPSAxOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoImRlbGV0ZS1yZWZzIikpCisJCWFsbG93X2RlbGV0aW5nX3JlZnMgPSAxOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm9mcy1kZWx0YSIpKQorCQlhcmdzLT51c2Vfb2ZzX2RlbHRhID0gMTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJzaWRlLWJhbmQtNjRrIikpCisJCXVzZV9zaWRlYmFuZCA9IDE7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygicXVpZXQiKSkKKwkJcXVpZXRfc3VwcG9ydGVkID0gMTsKKwlpZiAoc2VydmVyX3N1cHBvcnRzKCJhZ2VudCIpKQorCQlhZ2VudF9zdXBwb3J0ZWQgPSAxOworCWlmIChzZXJ2ZXJfc3VwcG9ydHMoIm5vLXRoaW4iKSkKKwkJYXJncy0+dXNlX3RoaW5fcGFjayA9IDA7CisJaWYgKHNlcnZlcl9zdXBwb3J0cygiYXRvbWljIikpCisJCWF0b21pY19zdXBwb3J0ZWQgPSAxOworCisJaWYgKGFyZ3MtPnB1c2hfY2VydCAhPSBTRU5EX1BBQ0tfUFVTSF9DRVJUX05FVkVSKSB7CisJCWludCBsZW47CisJCXB1c2hfY2VydF9ub25jZSA9IHNlcnZlcl9mZWF0dXJlX3ZhbHVlKCJwdXNoLWNlcnQiLCAmbGVuKTsKKwkJaWYgKHB1c2hfY2VydF9ub25jZSkgeworCQkJcmVqZWN0X2ludmFsaWRfbm9uY2UocHVzaF9jZXJ0X25vbmNlLCBsZW4pOworCQkJcHVzaF9jZXJ0X25vbmNlID0geG1lbWR1cHoocHVzaF9jZXJ0X25vbmNlLCBsZW4pOworCQl9IGVsc2UgaWYgKGFyZ3MtPnB1c2hfY2VydCA9PSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0FMV0FZUykgeworCQkJZGllKF8oInRoZSByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQgcHVzaCIpKTsKKwkJfSBlbHNlIGlmIChhcmdzLT5wdXNoX2NlcnQgPT0gU0VORF9QQUNLX1BVU0hfQ0VSVF9JRl9BU0tFRCkgeworCQkJd2FybmluZyhfKCJub3Qgc2VuZGluZyBhIHB1c2ggY2VydGlmaWNhdGUgc2luY2UgdGhlIgorCQkJCSAgIiByZWNlaXZpbmcgZW5kIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQiCisJCQkJICAiIHB1c2giKSk7CisJCX0KKwl9CisKKwlpZiAoIXJlbW90ZV9yZWZzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiTm8gcmVmcyBpbiBjb21tb24gYW5kIG5vbmUgc3BlY2lmaWVkOyBkb2luZyBub3RoaW5nLlxuIgorCQkJIlBlcmhhcHMgeW91IHNob3VsZCBzcGVjaWZ5IGEgYnJhbmNoIHN1Y2ggYXMgJ21hc3RlcicuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChhcmdzLT5hdG9taWMgJiYgIWF0b21pY19zdXBwb3J0ZWQpCisJCWRpZShfKCJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IC0tYXRvbWljIHB1c2giKSk7CisKKwl1c2VfYXRvbWljID0gYXRvbWljX3N1cHBvcnRlZCAmJiBhcmdzLT5hdG9taWM7CisKKwlpZiAoc3RhdHVzX3JlcG9ydCkKKwkJc3RyYnVmX2FkZHN0cigmY2FwX2J1ZiwgIiByZXBvcnQtc3RhdHVzIik7CisJaWYgKHVzZV9zaWRlYmFuZCkKKwkJc3RyYnVmX2FkZHN0cigmY2FwX2J1ZiwgIiBzaWRlLWJhbmQtNjRrIik7CisJaWYgKHF1aWV0X3N1cHBvcnRlZCAmJiAoYXJncy0+cXVpZXQgfHwgIWFyZ3MtPnByb2dyZXNzKSkKKwkJc3RyYnVmX2FkZHN0cigmY2FwX2J1ZiwgIiBxdWlldCIpOworCWlmICh1c2VfYXRvbWljKQorCQlzdHJidWZfYWRkc3RyKCZjYXBfYnVmLCAiIGF0b21pYyIpOworCWlmIChhZ2VudF9zdXBwb3J0ZWQpCisJCXN0cmJ1Zl9hZGRmKCZjYXBfYnVmLCAiIGFnZW50PSVzIiwgZ2l0X3VzZXJfYWdlbnRfc2FuaXRpemVkKCkpOworCisJLyoKKwkgKiBORUVEU1dPUks6IHdoeSBkb2VzIGRlbGV0ZS1yZWZzIGhhdmUgdG8gYmUgc28gc3BlY2lmaWMgdG8KKwkgKiBzZW5kLXBhY2sgbWFjaGluZXJ5IHRoYXQgc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2goKSBjYW5ub3QKKwkgKiBzZXQgdGhpcyBiaXQgZm9yIHVzPz8/CisJICovCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCWlmIChyZWYtPmRlbGV0aW9uICYmICFhbGxvd19kZWxldGluZ19yZWZzKQorCQkJcmVmLT5zdGF0dXMgPSBSRUZfU1RBVFVTX1JFSkVDVF9OT0RFTEVURTsKKworCWlmICghYXJncy0+ZHJ5X3J1bikKKwkJYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzX2J1ZigmcmVxX2J1Zik7CisKKwlpZiAoIWFyZ3MtPmRyeV9ydW4gJiYgcHVzaF9jZXJ0X25vbmNlKQorCQljbWRzX3NlbnQgPSBnZW5lcmF0ZV9wdXNoX2NlcnQoJnJlcV9idWYsIHJlbW90ZV9yZWZzLCBhcmdzLAorCQkJCQkgICAgICAgY2FwX2J1Zi5idWYsIHB1c2hfY2VydF9ub25jZSk7CisKKwkvKgorCSAqIENsZWFyIHRoZSBzdGF0dXMgZm9yIGVhY2ggcmVmIGFuZCBzZWUgaWYgd2UgbmVlZCB0byBzZW5kCisJICogdGhlIHBhY2sgZGF0YS4KKwkgKi8KKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlzd2l0Y2ggKGNoZWNrX3RvX3NlbmRfdXBkYXRlKHJlZiwgYXJncykpIHsKKwkJY2FzZSAwOiAvKiBubyBlcnJvciAqLworCQkJYnJlYWs7CisJCWNhc2UgQ0hFQ0tfUkVGX1NUQVRVU19SRUpFQ1RFRDoKKwkJCS8qCisJCQkgKiBXaGVuIHdlIGtub3cgdGhlIHNlcnZlciB3b3VsZCByZWplY3QgYSByZWYgdXBkYXRlIGlmCisJCQkgKiB3ZSB3ZXJlIHRvIHNlbmQgaXQgYW5kIHdlJ3JlIHRyeWluZyB0byBzZW5kIHRoZSByZWZzCisJCQkgKiBhdG9taWNhbGx5LCBhYm9ydCB0aGUgd2hvbGUgb3BlcmF0aW9uLgorCQkJICovCisJCQlpZiAodXNlX2F0b21pYykKKwkJCQlyZXR1cm4gYXRvbWljX3B1c2hfZmFpbHVyZShhcmdzLCByZW1vdGVfcmVmcywgcmVmKTsKKwkJCS8qIEZhbGx0aHJvdWdoIGZvciBub24gYXRvbWljIGNhc2UuICovCisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXJlZi0+ZGVsZXRpb24pCisJCQluZWVkX3BhY2tfZGF0YSA9IDE7CisKKwkJaWYgKGFyZ3MtPmRyeV9ydW4gfHwgIXN0YXR1c19yZXBvcnQpCisJCQlyZWYtPnN0YXR1cyA9IFJFRl9TVEFUVVNfT0s7CisJCWVsc2UKKwkJCXJlZi0+c3RhdHVzID0gUkVGX1NUQVRVU19FWFBFQ1RJTkdfUkVQT1JUOworCX0KKworCS8qCisJICogRmluYWxseSwgdGVsbCB0aGUgb3RoZXIgZW5kIQorCSAqLworCWZvciAocmVmID0gcmVtb3RlX3JlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCWNoYXIgKm9sZF9oZXgsICpuZXdfaGV4OworCisJCWlmIChhcmdzLT5kcnlfcnVuIHx8IHB1c2hfY2VydF9ub25jZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjaGVja190b19zZW5kX3VwZGF0ZShyZWYsIGFyZ3MpIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCW9sZF9oZXggPSBzaGExX3RvX2hleChyZWYtPm9sZF9zaGExKTsKKwkJbmV3X2hleCA9IHNoYTFfdG9faGV4KHJlZi0+bmV3X3NoYTEpOworCQlpZiAoIWNtZHNfc2VudCkgeworCQkJcGFja2V0X2J1Zl93cml0ZSgmcmVxX2J1ZiwKKwkJCQkJICIlcyAlcyAlcyVjJXMiLAorCQkJCQkgb2xkX2hleCwgbmV3X2hleCwgcmVmLT5uYW1lLCAwLAorCQkJCQkgY2FwX2J1Zi5idWYpOworCQkJY21kc19zZW50ID0gMTsKKwkJfSBlbHNlIHsKKwkJCXBhY2tldF9idWZfd3JpdGUoJnJlcV9idWYsICIlcyAlcyAlcyIsCisJCQkJCSBvbGRfaGV4LCBuZXdfaGV4LCByZWYtPm5hbWUpOworCQl9CisJfQorCisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpIHsKKwkJaWYgKCFhcmdzLT5kcnlfcnVuICYmIChjbWRzX3NlbnQgfHwgaXNfcmVwb3NpdG9yeV9zaGFsbG93KCkpKSB7CisJCQlwYWNrZXRfYnVmX2ZsdXNoKCZyZXFfYnVmKTsKKwkJCXNlbmRfc2lkZWJhbmQob3V0LCAtMSwgcmVxX2J1Zi5idWYsIHJlcV9idWYubGVuLCBMQVJHRV9QQUNLRVRfTUFYKTsKKwkJfQorCX0gZWxzZSB7CisJCXdyaXRlX29yX2RpZShvdXQsIHJlcV9idWYuYnVmLCByZXFfYnVmLmxlbik7CisJCXBhY2tldF9mbHVzaChvdXQpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmcmVxX2J1Zik7CisJc3RyYnVmX3JlbGVhc2UoJmNhcF9idWYpOworCisJaWYgKHVzZV9zaWRlYmFuZCAmJiBjbWRzX3NlbnQpIHsKKwkJbWVtc2V0KCZkZW11eCwgMCwgc2l6ZW9mKGRlbXV4KSk7CisJCWRlbXV4LnByb2MgPSBzaWRlYmFuZF9kZW11eDsKKwkJZGVtdXguZGF0YSA9IGZkOworCQlkZW11eC5vdXQgPSAtMTsKKwkJaWYgKHN0YXJ0X2FzeW5jKCZkZW11eCkpCisJCQlkaWUoInNlbmQtcGFjazogdW5hYmxlIHRvIGZvcmsgb2ZmIHNpZGViYW5kIGRlbXVsdGlwbGV4ZXIiKTsKKwkJaW4gPSBkZW11eC5vdXQ7CisJfQorCisJaWYgKG5lZWRfcGFja19kYXRhICYmIGNtZHNfc2VudCkgeworCQlpZiAocGFja19vYmplY3RzKG91dCwgcmVtb3RlX3JlZnMsIGV4dHJhX2hhdmUsIGFyZ3MpIDwgMCkgeworCQkJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpCisJCQkJcmVmLT5zdGF0dXMgPSBSRUZfU1RBVFVTX05PTkU7CisJCQlpZiAoYXJncy0+c3RhdGVsZXNzX3JwYykKKwkJCQljbG9zZShvdXQpOworCQkJaWYgKGdpdF9jb25uZWN0aW9uX2lzX3NvY2tldChjb25uKSkKKwkJCQlzaHV0ZG93bihmZFswXSwgU0hVVF9XUik7CisJCQlpZiAodXNlX3NpZGViYW5kKQorCQkJCWZpbmlzaF9hc3luYygmZGVtdXgpOworCQkJZmRbMV0gPSAtMTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoIWFyZ3MtPnN0YXRlbGVzc19ycGMpCisJCQkvKiBDbG9zZWQgYnkgcGFja19vYmplY3RzKCkgdmlhIHN0YXJ0X2NvbW1hbmQoKSAqLworCQkJZmRbMV0gPSAtMTsKKwl9CisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMgJiYgY21kc19zZW50KQorCQlwYWNrZXRfZmx1c2gob3V0KTsKKworCWlmIChzdGF0dXNfcmVwb3J0ICYmIGNtZHNfc2VudCkKKwkJcmV0ID0gcmVjZWl2ZV9zdGF0dXMoaW4sIHJlbW90ZV9yZWZzKTsKKwllbHNlCisJCXJldCA9IDA7CisJaWYgKGFyZ3MtPnN0YXRlbGVzc19ycGMpCisJCXBhY2tldF9mbHVzaChvdXQpOworCisJaWYgKHVzZV9zaWRlYmFuZCAmJiBjbWRzX3NlbnQpIHsKKwkJaWYgKGZpbmlzaF9hc3luYygmZGVtdXgpKSB7CisJCQllcnJvcigiZXJyb3IgaW4gc2lkZWJhbmQgZGVtdWx0aXBsZXhlciIpOworCQkJcmV0ID0gLTE7CisJCX0KKwkJY2xvc2UoZGVtdXgub3V0KTsKKwl9CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChhcmdzLT5wb3JjZWxhaW4pCisJCXJldHVybiAwOworCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJc3dpdGNoIChyZWYtPnN0YXR1cykgeworCQljYXNlIFJFRl9TVEFUVVNfTk9ORToKKwkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQljYXNlIFJFRl9TVEFUVVNfT0s6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NlbmQtcGFjay5oIGIvc2VuZC1wYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdmMjIyYQotLS0gL2Rldi9udWxsCisrKyBiL3NlbmQtcGFjay5oCkBAIC0wLDAgKzEsMzQgQEAKKyNpZm5kZWYgU0VORF9QQUNLX0gKKyNkZWZpbmUgU0VORF9QQUNLX0gKKworLyogUG9zc2libGUgdmFsdWVzIGZvciBwdXNoX2NlcnQgZmllbGQgaW4gc2VuZF9wYWNrX2FyZ3MuICovCisjZGVmaW5lIFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVIgMAorI2RlZmluZSBTRU5EX1BBQ0tfUFVTSF9DRVJUX0lGX0FTS0VEIDEKKyNkZWZpbmUgU0VORF9QQUNLX1BVU0hfQ0VSVF9BTFdBWVMgMgorCitzdHJ1Y3Qgc2VuZF9wYWNrX2FyZ3MgeworCWNvbnN0IGNoYXIgKnVybDsKKwl1bnNpZ25lZCB2ZXJib3NlOjEsCisJCXF1aWV0OjEsCisJCXBvcmNlbGFpbjoxLAorCQlwcm9ncmVzczoxLAorCQlzZW5kX21pcnJvcjoxLAorCQlmb3JjZV91cGRhdGU6MSwKKwkJdXNlX3RoaW5fcGFjazoxLAorCQl1c2Vfb2ZzX2RlbHRhOjEsCisJCWRyeV9ydW46MSwKKwkJLyogT25lIG9mIHRoZSBTRU5EX1BBQ0tfUFVTSF9DRVJUXyogY29uc3RhbnRzLiAqLworCQlwdXNoX2NlcnQ6MiwKKwkJc3RhdGVsZXNzX3JwYzoxLAorCQlhdG9taWM6MTsKK307CisKK3N0cnVjdCBvcHRpb247CitpbnQgb3B0aW9uX3BhcnNlX3B1c2hfc2lnbmVkKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwKKwkJCSAgICAgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpOworCitpbnQgc2VuZF9wYWNrKHN0cnVjdCBzZW5kX3BhY2tfYXJncyAqYXJncywKKwkgICAgICBpbnQgZmRbXSwgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmNvbm4sCisJICAgICAgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIHN0cnVjdCBzaGExX2FycmF5ICpleHRyYV9oYXZlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zZXF1ZW5jZXIuYyBiL3NlcXVlbmNlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNjAwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9zZXF1ZW5jZXIuYwpAQCAtMCwwICsxLDExNzIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImxvY2tmaWxlLmgiCisjaW5jbHVkZSAic2VxdWVuY2VyLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJleGVjX2NtZC5oIgorI2luY2x1ZGUgInV0ZjguaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAiZGlmZi5oIgorI2luY2x1ZGUgInJldmlzaW9uLmgiCisjaW5jbHVkZSAicmVyZXJlLmgiCisjaW5jbHVkZSAibWVyZ2UtcmVjdXJzaXZlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKworI2RlZmluZSBHSVRfUkVGTE9HX0FDVElPTiAiR0lUX1JFRkxPR19BQ1RJT04iCisKK2NvbnN0IGNoYXIgc2lnbl9vZmZfaGVhZGVyW10gPSAiU2lnbmVkLW9mZi1ieTogIjsKK3N0YXRpYyBjb25zdCBjaGFyIGNoZXJyeV9waWNrZWRfcHJlZml4W10gPSAiKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgIjsKKworc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfdG9kb19maWxlLCBTRVFfVE9ET19GSUxFKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfb3B0c19maWxlLCBTRVFfT1BUU19GSUxFKQorc3RhdGljIEdJVF9QQVRIX0ZVTkMoZ2l0X3BhdGhfc2VxX2RpciwgU0VRX0RJUikKK3N0YXRpYyBHSVRfUEFUSF9GVU5DKGdpdF9wYXRoX2hlYWRfZmlsZSwgU0VRX0hFQURfRklMRSkKKworc3RhdGljIGludCBpc19yZmMyODIyX2xpbmUoY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWludCBjaCA9IGJ1ZltpXTsKKwkJaWYgKGNoID09ICc6JykKKwkJCXJldHVybiAxOworCQlpZiAoIWlzYWxudW0oY2gpICYmIGNoICE9ICctJykKKwkJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX2NoZXJyeV9waWNrZWRfZnJvbV9saW5lKGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwkvKgorCSAqIFdlIG9ubHkgY2FyZSB0aGF0IGl0IGxvb2tzIHJvdWdobHkgbGlrZSAoY2hlcnJ5IHBpY2tlZCBmcm9tIC4uLikKKwkgKi8KKwlyZXR1cm4gbGVuID4gc3RybGVuKGNoZXJyeV9waWNrZWRfcHJlZml4KSArIDEgJiYKKwkJc3RhcnRzX3dpdGgoYnVmLCBjaGVycnlfcGlja2VkX3ByZWZpeCkgJiYgYnVmW2xlbiAtIDFdID09ICcpJzsKK30KKworLyoKKyAqIFJldHVybnMgMCBmb3Igbm9uLWNvbmZvcm1pbmcgZm9vdGVyCisgKiBSZXR1cm5zIDEgZm9yIGNvbmZvcm1pbmcgZm9vdGVyCisgKiBSZXR1cm5zIDIgd2hlbiBzb2IgZXhpc3RzIHdpdGhpbiBjb25mb3JtaW5nIGZvb3RlcgorICogUmV0dXJucyAzIHdoZW4gc29iIGV4aXN0cyB3aXRoaW4gY29uZm9ybWluZyBmb290ZXIgYXMgbGFzdCBlbnRyeQorICovCitzdGF0aWMgaW50IGhhc19jb25mb3JtaW5nX2Zvb3RlcihzdHJ1Y3Qgc3RyYnVmICpzYiwgc3RydWN0IHN0cmJ1ZiAqc29iLAorCWludCBpZ25vcmVfZm9vdGVyKQoreworCWNoYXIgcHJldjsKKwlpbnQgaSwgazsKKwlpbnQgbGVuID0gc2ItPmxlbiAtIGlnbm9yZV9mb290ZXI7CisJY29uc3QgY2hhciAqYnVmID0gc2ItPmJ1ZjsKKwlpbnQgZm91bmRfc29iID0gMDsKKworCS8qIGZvb3RlciBtdXN0IGVuZCB3aXRoIG5ld2xpbmUgKi8KKwlpZiAoIWxlbiB8fCBidWZbbGVuIC0gMV0gIT0gJ1xuJykKKwkJcmV0dXJuIDA7CisKKwlwcmV2ID0gJ1wwJzsKKwlmb3IgKGkgPSBsZW4gLSAxOyBpID4gMDsgaS0tKSB7CisJCWNoYXIgY2ggPSBidWZbaV07CisJCWlmIChwcmV2ID09ICdcbicgJiYgY2ggPT0gJ1xuJykgLyogcGFyYWdyYXBoIGJyZWFrICovCisJCQlicmVhazsKKwkJcHJldiA9IGNoOworCX0KKworCS8qIHJlcXVpcmUgYXQgbGVhc3Qgb25lIGJsYW5rIGxpbmUgKi8KKwlpZiAocHJldiAhPSAnXG4nIHx8IGJ1ZltpXSAhPSAnXG4nKQorCQlyZXR1cm4gMDsKKworCS8qIGFkdmFuY2UgdG8gc3RhcnQgb2YgbGFzdCBwYXJhZ3JhcGggKi8KKwl3aGlsZSAoaSA8IGxlbiAtIDEgJiYgYnVmW2ldID09ICdcbicpCisJCWkrKzsKKworCWZvciAoOyBpIDwgbGVuOyBpID0gaykgeworCQlpbnQgZm91bmRfcmZjMjgyMjsKKworCQlmb3IgKGsgPSBpOyBrIDwgbGVuICYmIGJ1ZltrXSAhPSAnXG4nOyBrKyspCisJCQk7IC8qIGRvIG5vdGhpbmcgKi8KKwkJaysrOworCisJCWZvdW5kX3JmYzI4MjIgPSBpc19yZmMyODIyX2xpbmUoYnVmICsgaSwgayAtIGkgLSAxKTsKKwkJaWYgKGZvdW5kX3JmYzI4MjIgJiYgc29iICYmCisJCSAgICAhc3RybmNtcChidWYgKyBpLCBzb2ItPmJ1Ziwgc29iLT5sZW4pKQorCQkJZm91bmRfc29iID0gazsKKworCQlpZiAoIShmb3VuZF9yZmMyODIyIHx8CisJCSAgICAgIGlzX2NoZXJyeV9waWNrZWRfZnJvbV9saW5lKGJ1ZiArIGksIGsgLSBpIC0gMSkpKQorCQkJcmV0dXJuIDA7CisJfQorCWlmIChmb3VuZF9zb2IgPT0gaSkKKwkJcmV0dXJuIDM7CisJaWYgKGZvdW5kX3NvYikKKwkJcmV0dXJuIDI7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9zZXF1ZW5jZXJfc3RhdGUodm9pZCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNlcV9kaXIgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZzZXFfZGlyLCAiJXMiLCBnaXRfcGF0aChTRVFfRElSKSk7CisJcmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmc2VxX2RpciwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJnNlcV9kaXIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqYWN0aW9uX25hbWUoY29uc3Qgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXJldHVybiBvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1JFVkVSVCA/ICJyZXZlcnQiIDogImNoZXJyeS1waWNrIjsKK30KKworc3RydWN0IGNvbW1pdF9tZXNzYWdlIHsKKwljaGFyICpwYXJlbnRfbGFiZWw7CisJY29uc3QgY2hhciAqbGFiZWw7CisJY29uc3QgY2hhciAqc3ViamVjdDsKKwljb25zdCBjaGFyICptZXNzYWdlOworfTsKKworc3RhdGljIGludCBnZXRfbWVzc2FnZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbWVzc2FnZSAqb3V0KQoreworCWNvbnN0IGNoYXIgKmFiYnJldiwgKnN1YmplY3Q7CisJaW50IGFiYnJldl9sZW4sIHN1YmplY3RfbGVuOworCWNoYXIgKnE7CisKKwlpZiAoIWdpdF9jb21taXRfZW5jb2RpbmcpCisJCWdpdF9jb21taXRfZW5jb2RpbmcgPSAiVVRGLTgiOworCisJb3V0LT5tZXNzYWdlID0gbG9nbXNnX3JlZW5jb2RlKGNvbW1pdCwgTlVMTCwgZ2l0X2NvbW1pdF9lbmNvZGluZyk7CisJYWJicmV2ID0gZmluZF91bmlxdWVfYWJicmV2KGNvbW1pdC0+b2JqZWN0LnNoYTEsIERFRkFVTFRfQUJCUkVWKTsKKwlhYmJyZXZfbGVuID0gc3RybGVuKGFiYnJldik7CisKKwlzdWJqZWN0X2xlbiA9IGZpbmRfY29tbWl0X3N1YmplY3Qob3V0LT5tZXNzYWdlLCAmc3ViamVjdCk7CisKKwlvdXQtPnBhcmVudF9sYWJlbCA9IHhtYWxsb2Moc3RybGVuKCJwYXJlbnQgb2YgIikgKyBhYmJyZXZfbGVuICsKKwkJCSAgICAgIHN0cmxlbigiLi4uICIpICsgc3ViamVjdF9sZW4gKyAxKTsKKwlxID0gb3V0LT5wYXJlbnRfbGFiZWw7CisJcSA9IG1lbXBjcHkocSwgInBhcmVudCBvZiAiLCBzdHJsZW4oInBhcmVudCBvZiAiKSk7CisJb3V0LT5sYWJlbCA9IHE7CisJcSA9IG1lbXBjcHkocSwgYWJicmV2LCBhYmJyZXZfbGVuKTsKKwlxID0gbWVtcGNweShxLCAiLi4uICIsIHN0cmxlbigiLi4uICIpKTsKKwlvdXQtPnN1YmplY3QgPSBxOworCXEgPSBtZW1wY3B5KHEsIHN1YmplY3QsIHN1YmplY3RfbGVuKTsKKwkqcSA9ICdcMCc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbWVzc2FnZShzdHJ1Y3QgY29tbWl0ICpjb21taXQsIHN0cnVjdCBjb21taXRfbWVzc2FnZSAqbXNnKQoreworCWZyZWUobXNnLT5wYXJlbnRfbGFiZWwpOworCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBtc2ctPm1lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9hZHZpY2UoaW50IHNob3dfaGludCwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCWNoYXIgKm1zZyA9IGdldGVudigiR0lUX0NIRVJSWV9QSUNLX0hFTFAiKTsKKworCWlmIChtc2cpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlc1xuIiwgbXNnKTsKKwkJLyoKKwkJICogQSBjb25mbGljdCBoYXMgb2NjdXJyZWQgYnV0IHRoZSBwb3JjZWxhaW4KKwkJICogKHR5cGljYWxseSByZWJhc2UgLS1pbnRlcmFjdGl2ZSkgd2FudHMgdG8gdGFrZSBjYXJlCisJCSAqIG9mIHRoZSBjb21taXQgaXRzZWxmIHNvIHJlbW92ZSBDSEVSUllfUElDS19IRUFECisJCSAqLworCQl1bmxpbmsoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZCgpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzaG93X2hpbnQpIHsKKwkJaWYgKG9wdHMtPm5vX2NvbW1pdCkKKwkJCWFkdmlzZShfKCJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisJCQkJICJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPiciKSk7CisJCWVsc2UKKwkJCWFkdmlzZShfKCJhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzXG4iCisJCQkJICJ3aXRoICdnaXQgYWRkIDxwYXRocz4nIG9yICdnaXQgcm0gPHBhdGhzPidcbiIKKwkJCQkgImFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JyIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX21lc3NhZ2Uoc3RydWN0IHN0cmJ1ZiAqbXNnYnVmLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBtc2dfZmlsZTsKKworCWludCBtc2dfZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZtc2dfZmlsZSwgZmlsZW5hbWUsCisJCQkJCSAgICAgICBMT0NLX0RJRV9PTl9FUlJPUik7CisJaWYgKHdyaXRlX2luX2Z1bGwobXNnX2ZkLCBtc2didWYtPmJ1ZiwgbXNnYnVmLT5sZW4pIDwgMCkKKwkJZGllX2Vycm5vKF8oIkNvdWxkIG5vdCB3cml0ZSB0byAlcyIpLCBmaWxlbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UobXNnYnVmKTsKKwlpZiAoY29tbWl0X2xvY2tfZmlsZSgmbXNnX2ZpbGUpIDwgMCkKKwkJZGllKF8oIkVycm9yIHdyYXBwaW5nIHVwICVzIiksIGZpbGVuYW1lKTsKK30KKworc3RhdGljIHN0cnVjdCB0cmVlICplbXB0eV90cmVlKHZvaWQpCit7CisJcmV0dXJuIGxvb2t1cF90cmVlKEVNUFRZX1RSRUVfU0hBMV9CSU4pOworfQorCitzdGF0aWMgaW50IGVycm9yX2RpcnR5X2luZGV4KHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlpZiAocmVhZF9jYWNoZV91bm1lcmdlZCgpKQorCQlyZXR1cm4gZXJyb3JfcmVzb2x2ZV9jb25mbGljdChhY3Rpb25fbmFtZShvcHRzKSk7CisKKwkvKiBEaWZmZXJlbnQgdHJhbnNsYXRpb24gc3RyaW5ncyBmb3IgY2hlcnJ5LXBpY2sgYW5kIHJldmVydCAqLworCWlmIChvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1BJQ0spCisJCWVycm9yKF8oIllvdXIgbG9jYWwgY2hhbmdlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVycnktcGljay4iKSk7CisJZWxzZQorCQllcnJvcihfKCJZb3VyIGxvY2FsIGNoYW5nZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgcmV2ZXJ0LiIpKTsKKworCWlmIChhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZSkKKwkJYWR2aXNlKF8oIkNvbW1pdCB5b3VyIGNoYW5nZXMgb3Igc3Rhc2ggdGhlbSB0byBwcm9jZWVkLiIpKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZmFzdF9mb3J3YXJkX3RvKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRvLCBjb25zdCB1bnNpZ25lZCBjaGFyICpmcm9tLAorCQkJaW50IHVuYm9ybiwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCByZWZfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGVyciA9IFNUUkJVRl9JTklUOworCisJcmVhZF9jYWNoZSgpOworCWlmIChjaGVja291dF9mYXN0X2ZvcndhcmQoZnJvbSwgdG8sIDEpKQorCQlleGl0KDEyOCk7IC8qIHRoZSBjYWxsZWUgc2hvdWxkIGhhdmUgY29tcGxhaW5lZCBhbHJlYWR5ICovCisKKwlzdHJidWZfYWRkZigmc2IsICIlczogZmFzdC1mb3J3YXJkIiwgYWN0aW9uX25hbWUob3B0cykpOworCisJdHJhbnNhY3Rpb24gPSByZWZfdHJhbnNhY3Rpb25fYmVnaW4oJmVycik7CisJaWYgKCF0cmFuc2FjdGlvbiB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCAiSEVBRCIsCisJCQkJICAgdG8sIHVuYm9ybiA/IG51bGxfc2hhMSA6IGZyb20sCisJCQkJICAgMCwgc2IuYnVmLCAmZXJyKSB8fAorCSAgICByZWZfdHJhbnNhY3Rpb25fY29tbWl0KHRyYW5zYWN0aW9uLCAmZXJyKSkgeworCQlyZWZfdHJhbnNhY3Rpb25fZnJlZSh0cmFuc2FjdGlvbik7CisJCWVycm9yKCIlcyIsIGVyci5idWYpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJc3RyYnVmX3JlbGVhc2UoJmVycik7CisJcmVmX3RyYW5zYWN0aW9uX2ZyZWUodHJhbnNhY3Rpb24pOworCXJldHVybiAwOworfQorCit2b2lkIGFwcGVuZF9jb25mbGljdHNfaGludChzdHJ1Y3Qgc3RyYnVmICptc2didWYpCit7CisJaW50IGk7CisKKwlzdHJidWZfYWRkY2gobXNnYnVmLCAnXG4nKTsKKwlzdHJidWZfY29tbWVudGVkX2FkZGYobXNnYnVmLCAiQ29uZmxpY3RzOlxuIik7CisJZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9ucjspIHsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtpKytdOworCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCQlzdHJidWZfY29tbWVudGVkX2FkZGYobXNnYnVmLCAiXHQlc1xuIiwgY2UtPm5hbWUpOworCQkJd2hpbGUgKGkgPCBhY3RpdmVfbnIgJiYgIXN0cmNtcChjZS0+bmFtZSwKKwkJCQkJCQlhY3RpdmVfY2FjaGVbaV0tPm5hbWUpKQorCQkJCWkrKzsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBkb19yZWN1cnNpdmVfbWVyZ2Uoc3RydWN0IGNvbW1pdCAqYmFzZSwgc3RydWN0IGNvbW1pdCAqbmV4dCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJhc2VfbGFiZWwsIGNvbnN0IGNoYXIgKm5leHRfbGFiZWwsCisJCQkgICAgICB1bnNpZ25lZCBjaGFyICpoZWFkLCBzdHJ1Y3Qgc3RyYnVmICptc2didWYsCisJCQkgICAgICBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IG1lcmdlX29wdGlvbnMgbzsKKwlzdHJ1Y3QgdHJlZSAqcmVzdWx0LCAqbmV4dF90cmVlLCAqYmFzZV90cmVlLCAqaGVhZF90cmVlOworCWludCBjbGVhbjsKKwljb25zdCBjaGFyICoqeG9wdDsKKwlzdGF0aWMgc3RydWN0IGxvY2tfZmlsZSBpbmRleF9sb2NrOworCisJaG9sZF9sb2NrZWRfaW5kZXgoJmluZGV4X2xvY2ssIDEpOworCisJcmVhZF9jYWNoZSgpOworCisJaW5pdF9tZXJnZV9vcHRpb25zKCZvKTsKKwlvLmFuY2VzdG9yID0gYmFzZSA/IGJhc2VfbGFiZWwgOiAiKGVtcHR5IHRyZWUpIjsKKwlvLmJyYW5jaDEgPSAiSEVBRCI7CisJby5icmFuY2gyID0gbmV4dCA/IG5leHRfbGFiZWwgOiAiKGVtcHR5IHRyZWUpIjsKKworCWhlYWRfdHJlZSA9IHBhcnNlX3RyZWVfaW5kaXJlY3QoaGVhZCk7CisJbmV4dF90cmVlID0gbmV4dCA/IG5leHQtPnRyZWUgOiBlbXB0eV90cmVlKCk7CisJYmFzZV90cmVlID0gYmFzZSA/IGJhc2UtPnRyZWUgOiBlbXB0eV90cmVlKCk7CisKKwlmb3IgKHhvcHQgPSBvcHRzLT54b3B0czsgeG9wdCAhPSBvcHRzLT54b3B0cyArIG9wdHMtPnhvcHRzX25yOyB4b3B0KyspCisJCXBhcnNlX21lcmdlX29wdCgmbywgKnhvcHQpOworCisJY2xlYW4gPSBtZXJnZV90cmVlcygmbywKKwkJCSAgICBoZWFkX3RyZWUsCisJCQkgICAgbmV4dF90cmVlLCBiYXNlX3RyZWUsICZyZXN1bHQpOworCisJaWYgKGFjdGl2ZV9jYWNoZV9jaGFuZ2VkICYmCisJICAgIHdyaXRlX2xvY2tlZF9pbmRleCgmdGhlX2luZGV4LCAmaW5kZXhfbG9jaywgQ09NTUlUX0xPQ0spKQorCQkvKiBUUkFOU0xBVE9SUzogJXMgd2lsbCBiZSAicmV2ZXJ0IiBvciAiY2hlcnJ5LXBpY2siICovCisJCWRpZShfKCIlczogVW5hYmxlIHRvIHdyaXRlIG5ldyBpbmRleCBmaWxlIiksIGFjdGlvbl9uYW1lKG9wdHMpKTsKKwlyb2xsYmFja19sb2NrX2ZpbGUoJmluZGV4X2xvY2spOworCisJaWYgKG9wdHMtPnNpZ25vZmYpCisJCWFwcGVuZF9zaWdub2ZmKG1zZ2J1ZiwgMCwgMCk7CisKKwlpZiAoIWNsZWFuKQorCQlhcHBlbmRfY29uZmxpY3RzX2hpbnQobXNnYnVmKTsKKworCXJldHVybiAhY2xlYW47Cit9CisKK3N0YXRpYyBpbnQgaXNfaW5kZXhfdW5jaGFuZ2VkKHZvaWQpCit7CisJdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOworCXN0cnVjdCBjb21taXQgKmhlYWRfY29tbWl0OworCisJaWYgKCFyZXNvbHZlX3JlZl91bnNhZmUoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLCBoZWFkX3NoYTEsIE5VTEwpKQorCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHJlc29sdmUgSEVBRCBjb21taXRcbiIpKTsKKworCWhlYWRfY29tbWl0ID0gbG9va3VwX2NvbW1pdChoZWFkX3NoYTEpOworCisJLyoKKwkgKiBJZiBoZWFkX2NvbW1pdCBpcyBOVUxMLCBjaGVja19jb21taXQsIGNhbGxlZCBmcm9tCisJICogbG9va3VwX2NvbW1pdCwgd291bGQgaGF2ZSBpbmRpY2F0ZWQgdGhhdCBoZWFkX2NvbW1pdCBpcyBub3QKKwkgKiBhIGNvbW1pdCBvYmplY3QgYWxyZWFkeS4gIHBhcnNlX2NvbW1pdCgpIHdpbGwgcmV0dXJuIGZhaWx1cmUKKwkgKiB3aXRob3V0IGZ1cnRoZXIgY29tcGxhaW50cyBpbiBzdWNoIGEgY2FzZS4gIE90aGVyd2lzZSwgaWYKKwkgKiB0aGUgY29tbWl0IGlzIGludmFsaWQsIHBhcnNlX2NvbW1pdCgpIHdpbGwgY29tcGxhaW4uICBTbworCSAqIHRoZXJlIGlzIG5vdGhpbmcgZm9yIHVzIHRvIHNheSBoZXJlLiAgSnVzdCByZXR1cm4gZmFpbHVyZS4KKwkgKi8KKwlpZiAocGFyc2VfY29tbWl0KGhlYWRfY29tbWl0KSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFhY3RpdmVfY2FjaGVfdHJlZSkKKwkJYWN0aXZlX2NhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CisKKwlpZiAoIWNhY2hlX3RyZWVfZnVsbHlfdmFsaWQoYWN0aXZlX2NhY2hlX3RyZWUpKQorCQlpZiAoY2FjaGVfdHJlZV91cGRhdGUoJnRoZV9pbmRleCwgMCkpCisJCQlyZXR1cm4gZXJyb3IoXygiVW5hYmxlIHRvIHVwZGF0ZSBjYWNoZSB0cmVlXG4iKSk7CisKKwlyZXR1cm4gIWhhc2hjbXAoYWN0aXZlX2NhY2hlX3RyZWUtPnNoYTEsIGhlYWRfY29tbWl0LT50cmVlLT5vYmplY3Quc2hhMSk7Cit9CisKKy8qCisgKiBJZiB3ZSBhcmUgY2hlcnJ5LXBpY2ssIGFuZCBpZiB0aGUgbWVyZ2UgZGlkIG5vdCByZXN1bHQgaW4KKyAqIGhhbmQtZWRpdGluZywgd2Ugd2lsbCBoaXQgdGhpcyBjb21taXQgYW5kIGluaGVyaXQgdGhlIG9yaWdpbmFsCisgKiBhdXRob3IgZGF0ZSBhbmQgbmFtZS4KKyAqIElmIHdlIGFyZSByZXZlcnQsIG9yIGlmIG91ciBjaGVycnktcGljayByZXN1bHRzIGluIGEgaGFuZCBtZXJnZSwKKyAqIHdlIGhhZCBiZXR0ZXIgc2F5IHRoYXQgdGhlIGN1cnJlbnQgdXNlciBpcyByZXNwb25zaWJsZSBmb3IgdGhhdC4KKyAqLworc3RhdGljIGludCBydW5fZ2l0X2NvbW1pdChjb25zdCBjaGFyICpkZWZtc2csIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cywKKwkJCSAgaW50IGFsbG93X2VtcHR5KQoreworCXN0cnVjdCBhcmd2X2FycmF5IGFycmF5OworCWludCByYzsKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCWFyZ3ZfYXJyYXlfaW5pdCgmYXJyYXkpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJyYXksICJjb21taXQiKTsKKwlhcmd2X2FycmF5X3B1c2goJmFycmF5LCAiLW4iKTsKKworCWlmIChvcHRzLT5ncGdfc2lnbikKKwkJYXJndl9hcnJheV9wdXNoZigmYXJyYXksICItUyVzIiwgb3B0cy0+Z3BnX3NpZ24pOworCWlmIChvcHRzLT5zaWdub2ZmKQorCQlhcmd2X2FycmF5X3B1c2goJmFycmF5LCAiLXMiKTsKKwlpZiAoIW9wdHMtPmVkaXQpIHsKKwkJYXJndl9hcnJheV9wdXNoKCZhcnJheSwgIi1GIik7CisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJyYXksIGRlZm1zZyk7CisJCWlmICghb3B0cy0+c2lnbm9mZiAmJgorCQkgICAgIW9wdHMtPnJlY29yZF9vcmlnaW4gJiYKKwkJICAgIGdpdF9jb25maWdfZ2V0X3ZhbHVlKCJjb21taXQuY2xlYW51cCIsICZ2YWx1ZSkpCisJCQlhcmd2X2FycmF5X3B1c2goJmFycmF5LCAiLS1jbGVhbnVwPXZlcmJhdGltIik7CisJfQorCisJaWYgKGFsbG93X2VtcHR5KQorCQlhcmd2X2FycmF5X3B1c2goJmFycmF5LCAiLS1hbGxvdy1lbXB0eSIpOworCisJaWYgKG9wdHMtPmFsbG93X2VtcHR5X21lc3NhZ2UpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJyYXksICItLWFsbG93LWVtcHR5LW1lc3NhZ2UiKTsKKworCXJjID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJyYXkuYXJndiwgUlVOX0dJVF9DTUQpOworCWFyZ3ZfYXJyYXlfY2xlYXIoJmFycmF5KTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgaXNfb3JpZ2luYWxfY29tbWl0X2VtcHR5KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwdHJlZV9zaGExOworCisJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHBhcnNlIGNvbW1pdCAlc1xuIiksCisJCQkgICAgIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwlpZiAoY29tbWl0LT5wYXJlbnRzKSB7CisJCXN0cnVjdCBjb21taXQgKnBhcmVudCA9IGNvbW1pdC0+cGFyZW50cy0+aXRlbTsKKwkJaWYgKHBhcnNlX2NvbW1pdChwYXJlbnQpKQorCQkJcmV0dXJuIGVycm9yKF8oIkNvdWxkIG5vdCBwYXJzZSBwYXJlbnQgY29tbWl0ICVzXG4iKSwKKwkJCQlzaGExX3RvX2hleChwYXJlbnQtPm9iamVjdC5zaGExKSk7CisJCXB0cmVlX3NoYTEgPSBwYXJlbnQtPnRyZWUtPm9iamVjdC5zaGExOworCX0gZWxzZSB7CisJCXB0cmVlX3NoYTEgPSBFTVBUWV9UUkVFX1NIQTFfQklOOyAvKiBjb21taXQgaXMgcm9vdCAqLworCX0KKworCXJldHVybiAhaGFzaGNtcChwdHJlZV9zaGExLCBjb21taXQtPnRyZWUtPm9iamVjdC5zaGExKTsKK30KKworLyoKKyAqIERvIHdlIHJ1biAiZ2l0IGNvbW1pdCIgd2l0aCAiLS1hbGxvdy1lbXB0eSI/CisgKi8KK3N0YXRpYyBpbnQgYWxsb3dfZW1wdHkoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaW50IGluZGV4X3VuY2hhbmdlZCwgZW1wdHlfY29tbWl0OworCisJLyoKKwkgKiBUaHJlZSBjYXNlczoKKwkgKgorCSAqICgxKSB3ZSBkbyBub3QgYWxsb3cgZW1wdHkgYXQgYWxsIGFuZCBlcnJvciBvdXQuCisJICoKKwkgKiAoMikgd2UgYWxsb3cgb25lcyB0aGF0IHdlcmUgaW5pdGlhbGx5IGVtcHR5LCBidXQKKwkgKiBmb3JiaWQgdGhlIG9uZXMgdGhhdCBiZWNvbWUgZW1wdHk7CisJICoKKwkgKiAoMykgd2UgYWxsb3cgYm90aC4KKwkgKi8KKwlpZiAoIW9wdHMtPmFsbG93X2VtcHR5KQorCQlyZXR1cm4gMDsgLyogbGV0ICJnaXQgY29tbWl0IiBiYXJmIGFzIG5lY2Vzc2FyeSAqLworCisJaW5kZXhfdW5jaGFuZ2VkID0gaXNfaW5kZXhfdW5jaGFuZ2VkKCk7CisJaWYgKGluZGV4X3VuY2hhbmdlZCA8IDApCisJCXJldHVybiBpbmRleF91bmNoYW5nZWQ7CisJaWYgKCFpbmRleF91bmNoYW5nZWQpCisJCXJldHVybiAwOyAvKiB3ZSBkbyBub3QgaGF2ZSB0byBzYXkgLS1hbGxvdy1lbXB0eSAqLworCisJaWYgKG9wdHMtPmtlZXBfcmVkdW5kYW50X2NvbW1pdHMpCisJCXJldHVybiAxOworCisJZW1wdHlfY29tbWl0ID0gaXNfb3JpZ2luYWxfY29tbWl0X2VtcHR5KGNvbW1pdCk7CisJaWYgKGVtcHR5X2NvbW1pdCA8IDApCisJCXJldHVybiBlbXB0eV9jb21taXQ7CisJaWYgKCFlbXB0eV9jb21taXQpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZG9fcGlja19jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0LCBzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJdW5zaWduZWQgY2hhciBoZWFkWzIwXTsKKwlzdHJ1Y3QgY29tbWl0ICpiYXNlLCAqbmV4dCwgKnBhcmVudDsKKwljb25zdCBjaGFyICpiYXNlX2xhYmVsLCAqbmV4dF9sYWJlbDsKKwlzdHJ1Y3QgY29tbWl0X21lc3NhZ2UgbXNnID0geyBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH07CisJc3RydWN0IHN0cmJ1ZiBtc2didWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmVzLCB1bmJvcm4gPSAwLCBhbGxvdzsKKworCWlmIChvcHRzLT5ub19jb21taXQpIHsKKwkJLyoKKwkJICogV2UgZG8gbm90IGludGVuZCB0byBjb21taXQgaW1tZWRpYXRlbHkuICBXZSBqdXN0IHdhbnQgdG8KKwkJICogbWVyZ2UgdGhlIGRpZmZlcmVuY2VzIGluLCBzbyBsZXQncyBjb21wdXRlIHRoZSB0cmVlCisJCSAqIHRoYXQgcmVwcmVzZW50cyB0aGUgImN1cnJlbnQiIHN0YXRlIGZvciBtZXJnZS1yZWN1cnNpdmUKKwkJICogdG8gd29yayBvbi4KKwkJICovCisJCWlmICh3cml0ZV9jYWNoZV9hc190cmVlKGhlYWQsIDAsIE5VTEwpKQorCQkJZGllIChfKCJZb3VyIGluZGV4IGZpbGUgaXMgdW5tZXJnZWQuIikpOworCX0gZWxzZSB7CisJCXVuYm9ybiA9IGdldF9zaGExKCJIRUFEIiwgaGVhZCk7CisJCWlmICh1bmJvcm4pCisJCQloYXNoY3B5KGhlYWQsIEVNUFRZX1RSRUVfU0hBMV9CSU4pOworCQlpZiAoaW5kZXhfZGlmZmVyc19mcm9tKHVuYm9ybiA/IEVNUFRZX1RSRUVfU0hBMV9IRVggOiAiSEVBRCIsIDApKQorCQkJcmV0dXJuIGVycm9yX2RpcnR5X2luZGV4KG9wdHMpOworCX0KKwlkaXNjYXJkX2NhY2hlKCk7CisKKwlpZiAoIWNvbW1pdC0+cGFyZW50cykgeworCQlwYXJlbnQgPSBOVUxMOworCX0KKwllbHNlIGlmIChjb21taXQtPnBhcmVudHMtPm5leHQpIHsKKwkJLyogUmV2ZXJ0aW5nIG9yIGNoZXJyeS1waWNraW5nIGEgbWVyZ2UgY29tbWl0ICovCisJCWludCBjbnQ7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcDsKKworCQlpZiAoIW9wdHMtPm1haW5saW5lKQorCQkJcmV0dXJuIGVycm9yKF8oIkNvbW1pdCAlcyBpcyBhIG1lcmdlIGJ1dCBubyAtbSBvcHRpb24gd2FzIGdpdmVuLiIpLAorCQkJCXNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKworCQlmb3IgKGNudCA9IDEsIHAgPSBjb21taXQtPnBhcmVudHM7CisJCSAgICAgY250ICE9IG9wdHMtPm1haW5saW5lICYmIHA7CisJCSAgICAgY250KyspCisJCQlwID0gcC0+bmV4dDsKKwkJaWYgKGNudCAhPSBvcHRzLT5tYWlubGluZSB8fCAhcCkKKwkJCXJldHVybiBlcnJvcihfKCJDb21taXQgJXMgZG9lcyBub3QgaGF2ZSBwYXJlbnQgJWQiKSwKKwkJCQlzaGExX3RvX2hleChjb21taXQtPm9iamVjdC5zaGExKSwgb3B0cy0+bWFpbmxpbmUpOworCQlwYXJlbnQgPSBwLT5pdGVtOworCX0gZWxzZSBpZiAoMCA8IG9wdHMtPm1haW5saW5lKQorCQlyZXR1cm4gZXJyb3IoXygiTWFpbmxpbmUgd2FzIHNwZWNpZmllZCBidXQgY29tbWl0ICVzIGlzIG5vdCBhIG1lcmdlLiIpLAorCQkJc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCWVsc2UKKwkJcGFyZW50ID0gY29tbWl0LT5wYXJlbnRzLT5pdGVtOworCisJaWYgKG9wdHMtPmFsbG93X2ZmICYmCisJICAgICgocGFyZW50ICYmICFoYXNoY21wKHBhcmVudC0+b2JqZWN0LnNoYTEsIGhlYWQpKSB8fAorCSAgICAgKCFwYXJlbnQgJiYgdW5ib3JuKSkpCisJCXJldHVybiBmYXN0X2ZvcndhcmRfdG8oY29tbWl0LT5vYmplY3Quc2hhMSwgaGVhZCwgdW5ib3JuLCBvcHRzKTsKKworCWlmIChwYXJlbnQgJiYgcGFyc2VfY29tbWl0KHBhcmVudCkgPCAwKQorCQkvKiBUUkFOU0xBVE9SUzogVGhlIGZpcnN0ICVzIHdpbGwgYmUgInJldmVydCIgb3IKKwkJICAgImNoZXJyeS1waWNrIiwgdGhlIHNlY29uZCAlcyBhIFNIQTEgKi8KKwkJcmV0dXJuIGVycm9yKF8oIiVzOiBjYW5ub3QgcGFyc2UgcGFyZW50IGNvbW1pdCAlcyIpLAorCQkJYWN0aW9uX25hbWUob3B0cyksIHNoYTFfdG9faGV4KHBhcmVudC0+b2JqZWN0LnNoYTEpKTsKKworCWlmIChnZXRfbWVzc2FnZShjb21taXQsICZtc2cpICE9IDApCisJCXJldHVybiBlcnJvcihfKCJDYW5ub3QgZ2V0IGNvbW1pdCBtZXNzYWdlIGZvciAlcyIpLAorCQkJc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCisJLyoKKwkgKiAiY29tbWl0IiBpcyBhbiBleGlzdGluZyBjb21taXQuICBXZSB3b3VsZCB3YW50IHRvIGFwcGx5CisJICogdGhlIGRpZmZlcmVuY2UgaXQgaW50cm9kdWNlcyBzaW5jZSBpdHMgZmlyc3QgcGFyZW50ICJwcmV2IgorCSAqIG9uIHRvcCBvZiB0aGUgY3VycmVudCBIRUFEIGlmIHdlIGFyZSBjaGVycnktcGljay4gIE9yIHRoZQorCSAqIHJldmVyc2Ugb2YgaXQgaWYgd2UgYXJlIHJldmVydC4KKwkgKi8KKworCWlmIChvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1JFVkVSVCkgeworCQliYXNlID0gY29tbWl0OworCQliYXNlX2xhYmVsID0gbXNnLmxhYmVsOworCQluZXh0ID0gcGFyZW50OworCQluZXh0X2xhYmVsID0gbXNnLnBhcmVudF9sYWJlbDsKKwkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiUmV2ZXJ0IFwiIik7CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgbXNnLnN1YmplY3QpOworCQlzdHJidWZfYWRkc3RyKCZtc2didWYsICJcIlxuXG5UaGlzIHJldmVydHMgY29tbWl0ICIpOworCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKworCQlpZiAoY29tbWl0LT5wYXJlbnRzICYmIGNvbW1pdC0+cGFyZW50cy0+bmV4dCkgeworCQkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCAiLCByZXZlcnNpbmdcbmNoYW5nZXMgbWFkZSB0byAiKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1Ziwgc2hhMV90b19oZXgocGFyZW50LT5vYmplY3Quc2hhMSkpOworCQl9CisJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgIi5cbiIpOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKnA7CisKKwkJYmFzZSA9IHBhcmVudDsKKwkJYmFzZV9sYWJlbCA9IG1zZy5wYXJlbnRfbGFiZWw7CisJCW5leHQgPSBjb21taXQ7CisJCW5leHRfbGFiZWwgPSBtc2cubGFiZWw7CisKKwkJLyoKKwkJICogQXBwZW5kIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgdG8gbXNnYnVmOyBpdCBzdGFydHMKKwkJICogYWZ0ZXIgdGhlIHRyZWUsIHBhcmVudCwgYXV0aG9yLCBjb21taXR0ZXIKKwkJICogaW5mb3JtYXRpb24gZm9sbG93ZWQgYnkgIlxuXG4iLgorCQkgKi8KKwkJcCA9IHN0cnN0cihtc2cubWVzc2FnZSwgIlxuXG4iKTsKKwkJaWYgKHApIHsKKwkJCXAgKz0gMjsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgcCk7CisJCX0KKworCQlpZiAob3B0cy0+cmVjb3JkX29yaWdpbikgeworCQkJaWYgKCFoYXNfY29uZm9ybWluZ19mb290ZXIoJm1zZ2J1ZiwgTlVMTCwgMCkpCisJCQkJc3RyYnVmX2FkZGNoKCZtc2didWYsICdcbicpOworCQkJc3RyYnVmX2FkZHN0cigmbXNnYnVmLCBjaGVycnlfcGlja2VkX3ByZWZpeCk7CisJCQlzdHJidWZfYWRkc3RyKCZtc2didWYsIHNoYTFfdG9faGV4KGNvbW1pdC0+b2JqZWN0LnNoYTEpKTsKKwkJCXN0cmJ1Zl9hZGRzdHIoJm1zZ2J1ZiwgIilcbiIpOworCQl9CisJfQorCisJaWYgKCFvcHRzLT5zdHJhdGVneSB8fCAhc3RyY21wKG9wdHMtPnN0cmF0ZWd5LCAicmVjdXJzaXZlIikgfHwgb3B0cy0+YWN0aW9uID09IFJFUExBWV9SRVZFUlQpIHsKKwkJcmVzID0gZG9fcmVjdXJzaXZlX21lcmdlKGJhc2UsIG5leHQsIGJhc2VfbGFiZWwsIG5leHRfbGFiZWwsCisJCQkJCSBoZWFkLCAmbXNnYnVmLCBvcHRzKTsKKwkJd3JpdGVfbWVzc2FnZSgmbXNnYnVmLCBnaXRfcGF0aF9tZXJnZV9tc2coKSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpjb21tb24gPSBOVUxMOworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlbW90ZXMgPSBOVUxMOworCisJCXdyaXRlX21lc3NhZ2UoJm1zZ2J1ZiwgZ2l0X3BhdGhfbWVyZ2VfbXNnKCkpOworCisJCWNvbW1pdF9saXN0X2luc2VydChiYXNlLCAmY29tbW9uKTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KG5leHQsICZyZW1vdGVzKTsKKwkJcmVzID0gdHJ5X21lcmdlX2NvbW1hbmQob3B0cy0+c3RyYXRlZ3ksIG9wdHMtPnhvcHRzX25yLCBvcHRzLT54b3B0cywKKwkJCQkJY29tbW9uLCBzaGExX3RvX2hleChoZWFkKSwgcmVtb3Rlcyk7CisJCWZyZWVfY29tbWl0X2xpc3QoY29tbW9uKTsKKwkJZnJlZV9jb21taXRfbGlzdChyZW1vdGVzKTsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBtZXJnZSB3YXMgY2xlYW4gb3IgaWYgaXQgZmFpbGVkIGR1ZSB0byBjb25mbGljdCwgd2Ugd3JpdGUKKwkgKiBDSEVSUllfUElDS19IRUFEIGZvciB0aGUgc3Vic2VxdWVudCBpbnZvY2F0aW9uIG9mIGNvbW1pdCB0byB1c2UuCisJICogSG93ZXZlciwgaWYgdGhlIG1lcmdlIGRpZCBub3QgZXZlbiBzdGFydCwgdGhlbiB3ZSBkb24ndCB3YW50IHRvCisJICogd3JpdGUgaXQgYXQgYWxsLgorCSAqLworCWlmIChvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1BJQ0sgJiYgIW9wdHMtPm5vX2NvbW1pdCAmJiAocmVzID09IDAgfHwgcmVzID09IDEpKQorCQl1cGRhdGVfcmVmKE5VTEwsICJDSEVSUllfUElDS19IRUFEIiwgY29tbWl0LT5vYmplY3Quc2hhMSwgTlVMTCwKKwkJCSAgIFJFRl9OT0RFUkVGLCBVUERBVEVfUkVGU19ESUVfT05fRVJSKTsKKwlpZiAob3B0cy0+YWN0aW9uID09IFJFUExBWV9SRVZFUlQgJiYgKChvcHRzLT5ub19jb21taXQgJiYgcmVzID09IDApIHx8IHJlcyA9PSAxKSkKKwkJdXBkYXRlX3JlZihOVUxMLCAiUkVWRVJUX0hFQUQiLCBjb21taXQtPm9iamVjdC5zaGExLCBOVUxMLAorCQkJICAgUkVGX05PREVSRUYsIFVQREFURV9SRUZTX0RJRV9PTl9FUlIpOworCisJaWYgKHJlcykgeworCQllcnJvcihvcHRzLT5hY3Rpb24gPT0gUkVQTEFZX1JFVkVSVAorCQkgICAgICA/IF8oImNvdWxkIG5vdCByZXZlcnQgJXMuLi4gJXMiKQorCQkgICAgICA6IF8oImNvdWxkIG5vdCBhcHBseSAlcy4uLiAlcyIpLAorCQkgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYoY29tbWl0LT5vYmplY3Quc2hhMSwgREVGQVVMVF9BQkJSRVYpLAorCQkgICAgICBtc2cuc3ViamVjdCk7CisJCXByaW50X2FkdmljZShyZXMgPT0gMSwgb3B0cyk7CisJCXJlcmVyZShvcHRzLT5hbGxvd19yZXJlcmVfYXV0byk7CisJCWdvdG8gbGVhdmU7CisJfQorCisJYWxsb3cgPSBhbGxvd19lbXB0eShvcHRzLCBjb21taXQpOworCWlmIChhbGxvdyA8IDApIHsKKwkJcmVzID0gYWxsb3c7CisJCWdvdG8gbGVhdmU7CisJfQorCWlmICghb3B0cy0+bm9fY29tbWl0KQorCQlyZXMgPSBydW5fZ2l0X2NvbW1pdChnaXRfcGF0aF9tZXJnZV9tc2coKSwgb3B0cywgYWxsb3cpOworCitsZWF2ZToKKwlmcmVlX21lc3NhZ2UoY29tbWl0LCAmbXNnKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfcmV2cyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJLyoKKwkgKiBwaWNraW5nIChidXQgbm90IHJldmVydGluZykgcmFuZ2VzIChidXQgbm90IGluZGl2aWR1YWwgcmV2aXNpb25zKQorCSAqIHNob3VsZCBiZSBkb25lIGluIHJldmVyc2UKKwkgKi8KKwlpZiAob3B0cy0+YWN0aW9uID09IFJFUExBWV9QSUNLICYmICFvcHRzLT5yZXZzLT5ub193YWxrKQorCQlvcHRzLT5yZXZzLT5yZXZlcnNlIF49IDE7CisKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKG9wdHMtPnJldnMpKQorCQlkaWUoXygicmV2aXNpb24gd2FsayBzZXR1cCBmYWlsZWQiKSk7CisKKwlpZiAoIW9wdHMtPnJldnMtPmNvbW1pdHMpCisJCWRpZShfKCJlbXB0eSBjb21taXQgc2V0IHBhc3NlZCIpKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9hbmRfcmVmcmVzaF9jYWNoZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgaW5kZXhfbG9jazsKKwlpbnQgaW5kZXhfZmQgPSBob2xkX2xvY2tlZF9pbmRleCgmaW5kZXhfbG9jaywgMCk7CisJaWYgKHJlYWRfaW5kZXhfcHJlbG9hZCgmdGhlX2luZGV4LCBOVUxMKSA8IDApCisJCWRpZShfKCJnaXQgJXM6IGZhaWxlZCB0byByZWFkIHRoZSBpbmRleCIpLCBhY3Rpb25fbmFtZShvcHRzKSk7CisJcmVmcmVzaF9pbmRleCgmdGhlX2luZGV4LCBSRUZSRVNIX1FVSUVUfFJFRlJFU0hfVU5NRVJHRUQsIE5VTEwsIE5VTEwsIE5VTEwpOworCWlmICh0aGVfaW5kZXguY2FjaGVfY2hhbmdlZCAmJiBpbmRleF9mZCA+PSAwKSB7CisJCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmluZGV4X2xvY2ssIENPTU1JVF9MT0NLKSkKKwkJCWRpZShfKCJnaXQgJXM6IGZhaWxlZCB0byByZWZyZXNoIHRoZSBpbmRleCIpLCBhY3Rpb25fbmFtZShvcHRzKSk7CisJfQorCXJvbGxiYWNrX2xvY2tfZmlsZSgmaW5kZXhfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgZm9ybWF0X3RvZG8oc3RydWN0IHN0cmJ1ZiAqYnVmLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKnRvZG9fbGlzdCwKKwkJc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqY3VyID0gTlVMTDsKKwljb25zdCBjaGFyICpzaGExX2FiYnJldiA9IE5VTEw7CisJY29uc3QgY2hhciAqYWN0aW9uX3N0ciA9IG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUkVWRVJUID8gInJldmVydCIgOiAicGljayI7CisJY29uc3QgY2hhciAqc3ViamVjdDsKKwlpbnQgc3ViamVjdF9sZW47CisKKwlmb3IgKGN1ciA9IHRvZG9fbGlzdDsgY3VyOyBjdXIgPSBjdXItPm5leHQpIHsKKwkJY29uc3QgY2hhciAqY29tbWl0X2J1ZmZlciA9IGdldF9jb21taXRfYnVmZmVyKGN1ci0+aXRlbSwgTlVMTCk7CisJCXNoYTFfYWJicmV2ID0gZmluZF91bmlxdWVfYWJicmV2KGN1ci0+aXRlbS0+b2JqZWN0LnNoYTEsIERFRkFVTFRfQUJCUkVWKTsKKwkJc3ViamVjdF9sZW4gPSBmaW5kX2NvbW1pdF9zdWJqZWN0KGNvbW1pdF9idWZmZXIsICZzdWJqZWN0KTsKKwkJc3RyYnVmX2FkZGYoYnVmLCAiJXMgJXMgJS4qc1xuIiwgYWN0aW9uX3N0ciwgc2hhMV9hYmJyZXYsCisJCQlzdWJqZWN0X2xlbiwgc3ViamVjdCk7CisJCXVudXNlX2NvbW1pdF9idWZmZXIoY3VyLT5pdGVtLCBjb21taXRfYnVmZmVyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29tbWl0ICpwYXJzZV9pbnNuX2xpbmUoY2hhciAqYm9sLCBjaGFyICplb2wsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwl1bnNpZ25lZCBjaGFyIGNvbW1pdF9zaGExWzIwXTsKKwllbnVtIHJlcGxheV9hY3Rpb24gYWN0aW9uOworCWNoYXIgKmVuZF9vZl9vYmplY3RfbmFtZTsKKwlpbnQgc2F2ZWQsIHN0YXR1cywgcGFkZGluZzsKKworCWlmIChzdGFydHNfd2l0aChib2wsICJwaWNrIikpIHsKKwkJYWN0aW9uID0gUkVQTEFZX1BJQ0s7CisJCWJvbCArPSBzdHJsZW4oInBpY2siKTsKKwl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGJvbCwgInJldmVydCIpKSB7CisJCWFjdGlvbiA9IFJFUExBWV9SRVZFUlQ7CisJCWJvbCArPSBzdHJsZW4oInJldmVydCIpOworCX0gZWxzZQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEVhdCB1cCBleHRyYSBzcGFjZXMvIHRhYnMgYmVmb3JlIG9iamVjdCBuYW1lICovCisJcGFkZGluZyA9IHN0cnNwbihib2wsICIgXHQiKTsKKwlpZiAoIXBhZGRpbmcpCisJCXJldHVybiBOVUxMOworCWJvbCArPSBwYWRkaW5nOworCisJZW5kX29mX29iamVjdF9uYW1lID0gYm9sICsgc3RyY3Nwbihib2wsICIgXHRcbiIpOworCXNhdmVkID0gKmVuZF9vZl9vYmplY3RfbmFtZTsKKwkqZW5kX29mX29iamVjdF9uYW1lID0gJ1wwJzsKKwlzdGF0dXMgPSBnZXRfc2hhMShib2wsIGNvbW1pdF9zaGExKTsKKwkqZW5kX29mX29iamVjdF9uYW1lID0gc2F2ZWQ7CisKKwkvKgorCSAqIFZlcmlmeSB0aGF0IHRoZSBhY3Rpb24gbWF0Y2hlcyB1cCB3aXRoIHRoZSBvbmUgaW4KKwkgKiBvcHRzOyB3ZSBkb24ndCBzdXBwb3J0IGFyYml0cmFyeSBpbnN0cnVjdGlvbnMKKwkgKi8KKwlpZiAoYWN0aW9uICE9IG9wdHMtPmFjdGlvbikgeworCQljb25zdCBjaGFyICphY3Rpb25fc3RyOworCQlhY3Rpb25fc3RyID0gYWN0aW9uID09IFJFUExBWV9SRVZFUlQgPyAicmV2ZXJ0IiA6ICJjaGVycnktcGljayI7CisJCWVycm9yKF8oIkNhbm5vdCAlcyBkdXJpbmcgYSAlcyIpLCBhY3Rpb25fc3RyLCBhY3Rpb25fbmFtZShvcHRzKSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShjb21taXRfc2hhMSk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfaW5zbl9idWZmZXIoY2hhciAqYnVmLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKip0b2RvX2xpc3QsCisJCQlzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqbmV4dCA9IHRvZG9fbGlzdDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJY2hhciAqcCA9IGJ1ZjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7ICpwOyBpKyspIHsKKwkJY2hhciAqZW9sID0gc3RyY2hybnVsKHAsICdcbicpOworCQljb21taXQgPSBwYXJzZV9pbnNuX2xpbmUocCwgZW9sLCBvcHRzKTsKKwkJaWYgKCFjb21taXQpCisJCQlyZXR1cm4gZXJyb3IoXygiQ291bGQgbm90IHBhcnNlIGxpbmUgJWQuIiksIGkpOworCQluZXh0ID0gY29tbWl0X2xpc3RfYXBwZW5kKGNvbW1pdCwgbmV4dCk7CisJCXAgPSAqZW9sID8gZW9sICsgMSA6IGVvbDsKKwl9CisJaWYgKCEqdG9kb19saXN0KQorCQlyZXR1cm4gZXJyb3IoXygiTm8gY29tbWl0cyBwYXJzZWQuIikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWFkX3BvcHVsYXRlX3RvZG8oc3RydWN0IGNvbW1pdF9saXN0ICoqdG9kb19saXN0LAorCQkJc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGZkLCByZXM7CisKKwlmZCA9IG9wZW4oZ2l0X3BhdGhfdG9kb19maWxlKCksIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IG9wZW4gJXMiKSwgZ2l0X3BhdGhfdG9kb19maWxlKCkpOworCWlmIChzdHJidWZfcmVhZCgmYnVmLCBmZCwgMCkgPCAwKSB7CisJCWNsb3NlKGZkKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCWRpZShfKCJDb3VsZCBub3QgcmVhZCAlcy4iKSwgZ2l0X3BhdGhfdG9kb19maWxlKCkpOworCX0KKwljbG9zZShmZCk7CisKKwlyZXMgPSBwYXJzZV9pbnNuX2J1ZmZlcihidWYuYnVmLCB0b2RvX2xpc3QsIG9wdHMpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWlmIChyZXMpCisJCWRpZShfKCJVbnVzYWJsZSBpbnN0cnVjdGlvbiBzaGVldDogJXMiKSwgZ2l0X3BhdGhfdG9kb19maWxlKCkpOworfQorCitzdGF0aWMgaW50IHBvcHVsYXRlX29wdHNfY2IoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMgPSBkYXRhOworCWludCBlcnJvcl9mbGFnID0gMTsKKworCWlmICghdmFsdWUpCisJCWVycm9yX2ZsYWcgPSAwOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5uby1jb21taXQiKSkKKwkJb3B0cy0+bm9fY29tbWl0ID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCAmZXJyb3JfZmxhZyk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLmVkaXQiKSkKKwkJb3B0cy0+ZWRpdCA9IGdpdF9jb25maWdfYm9vbF9vcl9pbnQoa2V5LCB2YWx1ZSwgJmVycm9yX2ZsYWcpOworCWVsc2UgaWYgKCFzdHJjbXAoa2V5LCAib3B0aW9ucy5zaWdub2ZmIikpCisJCW9wdHMtPnNpZ25vZmYgPSBnaXRfY29uZmlnX2Jvb2xfb3JfaW50KGtleSwgdmFsdWUsICZlcnJvcl9mbGFnKTsKKwllbHNlIGlmICghc3RyY21wKGtleSwgIm9wdGlvbnMucmVjb3JkLW9yaWdpbiIpKQorCQlvcHRzLT5yZWNvcmRfb3JpZ2luID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCAmZXJyb3JfZmxhZyk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLmFsbG93LWZmIikpCisJCW9wdHMtPmFsbG93X2ZmID0gZ2l0X2NvbmZpZ19ib29sX29yX2ludChrZXksIHZhbHVlLCAmZXJyb3JfZmxhZyk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLm1haW5saW5lIikpCisJCW9wdHMtPm1haW5saW5lID0gZ2l0X2NvbmZpZ19pbnQoa2V5LCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLnN0cmF0ZWd5IikpCisJCWdpdF9jb25maWdfc3RyaW5nKCZvcHRzLT5zdHJhdGVneSwga2V5LCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLmdwZy1zaWduIikpCisJCWdpdF9jb25maWdfc3RyaW5nKCZvcHRzLT5ncGdfc2lnbiwga2V5LCB2YWx1ZSk7CisJZWxzZSBpZiAoIXN0cmNtcChrZXksICJvcHRpb25zLnN0cmF0ZWd5LW9wdGlvbiIpKSB7CisJCUFMTE9DX0dST1cob3B0cy0+eG9wdHMsIG9wdHMtPnhvcHRzX25yICsgMSwgb3B0cy0+eG9wdHNfYWxsb2MpOworCQlvcHRzLT54b3B0c1tvcHRzLT54b3B0c19ucisrXSA9IHhzdHJkdXAodmFsdWUpOworCX0gZWxzZQorCQlyZXR1cm4gZXJyb3IoXygiSW52YWxpZCBrZXk6ICVzIiksIGtleSk7CisKKwlpZiAoIWVycm9yX2ZsYWcpCisJCXJldHVybiBlcnJvcihfKCJJbnZhbGlkIHZhbHVlIGZvciAlczogJXMiKSwga2V5LCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVhZF9wb3B1bGF0ZV9vcHRzKHN0cnVjdCByZXBsYXlfb3B0cyAqKm9wdHNfcHRyKQoreworCWlmICghZmlsZV9leGlzdHMoZ2l0X3BhdGhfb3B0c19maWxlKCkpKQorCQlyZXR1cm47CisJaWYgKGdpdF9jb25maWdfZnJvbV9maWxlKHBvcHVsYXRlX29wdHNfY2IsIGdpdF9wYXRoX29wdHNfZmlsZSgpLCAqb3B0c19wdHIpIDwgMCkKKwkJZGllKF8oIk1hbGZvcm1lZCBvcHRpb25zIHNoZWV0OiAlcyIpLCBnaXRfcGF0aF9vcHRzX2ZpbGUoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdhbGtfcmV2c19wb3B1bGF0ZV90b2RvKHN0cnVjdCBjb21taXRfbGlzdCAqKnRvZG9fbGlzdCwKKwkJCQlzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCXN0cnVjdCBjb21taXRfbGlzdCAqKm5leHQ7CisKKwlwcmVwYXJlX3JldnMob3B0cyk7CisKKwluZXh0ID0gdG9kb19saXN0OworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKG9wdHMtPnJldnMpKSkKKwkJbmV4dCA9IGNvbW1pdF9saXN0X2FwcGVuZChjb21taXQsIG5leHQpOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9zZXFfZGlyKHZvaWQpCit7CisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX3NlcV9kaXIoKSkpIHsKKwkJZXJyb3IoXygiYSBjaGVycnktcGljayBvciByZXZlcnQgaXMgYWxyZWFkeSBpbiBwcm9ncmVzcyIpKTsKKwkJYWR2aXNlKF8oInRyeSBcImdpdCBjaGVycnktcGljayAoLS1jb250aW51ZSB8IC0tcXVpdCB8IC0tYWJvcnQpXCIiKSk7CisJCXJldHVybiAtMTsKKwl9CisJZWxzZSBpZiAobWtkaXIoZ2l0X3BhdGhfc2VxX2RpcigpLCAwNzc3KSA8IDApCisJCWRpZV9lcnJubyhfKCJDb3VsZCBub3QgY3JlYXRlIHNlcXVlbmNlciBkaXJlY3RvcnkgJXMiKSwKKwkJCSAgZ2l0X3BhdGhfc2VxX2RpcigpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2F2ZV9oZWFkKGNvbnN0IGNoYXIgKmhlYWQpCit7CisJc3RhdGljIHN0cnVjdCBsb2NrX2ZpbGUgaGVhZF9sb2NrOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGZkOworCisJZmQgPSBob2xkX2xvY2tfZmlsZV9mb3JfdXBkYXRlKCZoZWFkX2xvY2ssIGdpdF9wYXRoX2hlYWRfZmlsZSgpLCBMT0NLX0RJRV9PTl9FUlJPUik7CisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzXG4iLCBoZWFkKTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLmJ1ZiwgYnVmLmxlbikgPCAwKQorCQlkaWVfZXJybm8oXygiQ291bGQgbm90IHdyaXRlIHRvICVzIiksIGdpdF9wYXRoX2hlYWRfZmlsZSgpKTsKKwlpZiAoY29tbWl0X2xvY2tfZmlsZSgmaGVhZF9sb2NrKSA8IDApCisJCWRpZShfKCJFcnJvciB3cmFwcGluZyB1cCAlcy4iKSwgZ2l0X3BhdGhfaGVhZF9maWxlKCkpOworfQorCitzdGF0aWMgaW50IHJlc2V0X2Zvcl9yb2xsYmFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWNvbnN0IGNoYXIgKmFyZ3ZbNF07CS8qIHJlc2V0IC0tbWVyZ2UgPGFyZz4gKyBOVUxMICovCisJYXJndlswXSA9ICJyZXNldCI7CisJYXJndlsxXSA9ICItLW1lcmdlIjsKKwlhcmd2WzJdID0gc2hhMV90b19oZXgoc2hhMSk7CisJYXJndlszXSA9IE5VTEw7CisJcmV0dXJuIHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9HSVRfQ01EKTsKK30KKworc3RhdGljIGludCByb2xsYmFja19zaW5nbGVfcGljayh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgaGVhZF9zaGExWzIwXTsKKworCWlmICghZmlsZV9leGlzdHMoZ2l0X3BhdGhfY2hlcnJ5X3BpY2tfaGVhZCgpKSAmJgorCSAgICAhZmlsZV9leGlzdHMoZ2l0X3BhdGhfcmV2ZXJ0X2hlYWQoKSkpCisJCXJldHVybiBlcnJvcihfKCJubyBjaGVycnktcGljayBvciByZXZlcnQgaW4gcHJvZ3Jlc3MiKSk7CisJaWYgKHJlYWRfcmVmX2Z1bGwoIkhFQUQiLCAwLCBoZWFkX3NoYTEsIE5VTEwpKQorCQlyZXR1cm4gZXJyb3IoXygiY2Fubm90IHJlc29sdmUgSEVBRCIpKTsKKwlpZiAoaXNfbnVsbF9zaGExKGhlYWRfc2hhMSkpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3QgYWJvcnQgZnJvbSBhIGJyYW5jaCB5ZXQgdG8gYmUgYm9ybiIpKTsKKwlyZXR1cm4gcmVzZXRfZm9yX3JvbGxiYWNrKGhlYWRfc2hhMSk7Cit9CisKK3N0YXRpYyBpbnQgc2VxdWVuY2VyX3JvbGxiYWNrKHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlGSUxFICpmOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWYgPSBmb3BlbihnaXRfcGF0aF9oZWFkX2ZpbGUoKSwgInIiKTsKKwlpZiAoIWYgJiYgZXJybm8gPT0gRU5PRU5UKSB7CisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG11bHRpcGxlLWNoZXJyeS1waWNrIGluIHByb2dyZXNzLgorCQkgKiBJZiBDSEVSUllfUElDS19IRUFEIG9yIFJFVkVSVF9IRUFEIGluZGljYXRlcworCQkgKiBhIHNpbmdsZS1jaGVycnktcGljayBpbiBwcm9ncmVzcywgYWJvcnQgdGhhdC4KKwkJICovCisJCXJldHVybiByb2xsYmFja19zaW5nbGVfcGljaygpOworCX0KKwlpZiAoIWYpCisJCXJldHVybiBlcnJvcihfKCJjYW5ub3Qgb3BlbiAlczogJXMiKSwgZ2l0X3BhdGhfaGVhZF9maWxlKCksCisJCQkJCQlzdHJlcnJvcihlcnJubykpOworCWlmIChzdHJidWZfZ2V0bGluZSgmYnVmLCBmLCAnXG4nKSkgeworCQllcnJvcihfKCJjYW5ub3QgcmVhZCAlczogJXMiKSwgZ2l0X3BhdGhfaGVhZF9maWxlKCksCisJCSAgICAgIGZlcnJvcihmKSA/ICBzdHJlcnJvcihlcnJubykgOiBfKCJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIikpOworCQlmY2xvc2UoZik7CisJCWdvdG8gZmFpbDsKKwl9CisJZmNsb3NlKGYpOworCWlmIChnZXRfc2hhMV9oZXgoYnVmLmJ1Ziwgc2hhMSkgfHwgYnVmLmJ1Zls0MF0gIT0gJ1wwJykgeworCQllcnJvcihfKCJzdG9yZWQgcHJlLWNoZXJyeS1waWNrIEhFQUQgZmlsZSAnJXMnIGlzIGNvcnJ1cHQiKSwKKwkJCWdpdF9wYXRoX2hlYWRfZmlsZSgpKTsKKwkJZ290byBmYWlsOworCX0KKwlpZiAocmVzZXRfZm9yX3JvbGxiYWNrKHNoYTEpKQorCQlnb3RvIGZhaWw7CisJcmVtb3ZlX3NlcXVlbmNlcl9zdGF0ZSgpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiAwOworZmFpbDoKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHNhdmVfdG9kbyhzdHJ1Y3QgY29tbWl0X2xpc3QgKnRvZG9fbGlzdCwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIHRvZG9fbG9jazsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBmZDsKKworCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmdG9kb19sb2NrLCBnaXRfcGF0aF90b2RvX2ZpbGUoKSwgTE9DS19ESUVfT05fRVJST1IpOworCWlmIChmb3JtYXRfdG9kbygmYnVmLCB0b2RvX2xpc3QsIG9wdHMpIDwgMCkKKwkJZGllKF8oIkNvdWxkIG5vdCBmb3JtYXQgJXMuIiksIGdpdF9wYXRoX3RvZG9fZmlsZSgpKTsKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLmJ1ZiwgYnVmLmxlbikgPCAwKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlkaWVfZXJybm8oXygiQ291bGQgbm90IHdyaXRlIHRvICVzIiksIGdpdF9wYXRoX3RvZG9fZmlsZSgpKTsKKwl9CisJaWYgKGNvbW1pdF9sb2NrX2ZpbGUoJnRvZG9fbG9jaykgPCAwKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlkaWUoXygiRXJyb3Igd3JhcHBpbmcgdXAgJXMuIiksIGdpdF9wYXRoX3RvZG9fZmlsZSgpKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHNhdmVfb3B0cyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJY29uc3QgY2hhciAqb3B0c19maWxlID0gZ2l0X3BhdGhfb3B0c19maWxlKCk7CisKKwlpZiAob3B0cy0+bm9fY29tbWl0KQorCQlnaXRfY29uZmlnX3NldF9pbl9maWxlKG9wdHNfZmlsZSwgIm9wdGlvbnMubm8tY29tbWl0IiwgInRydWUiKTsKKwlpZiAob3B0cy0+ZWRpdCkKKwkJZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShvcHRzX2ZpbGUsICJvcHRpb25zLmVkaXQiLCAidHJ1ZSIpOworCWlmIChvcHRzLT5zaWdub2ZmKQorCQlnaXRfY29uZmlnX3NldF9pbl9maWxlKG9wdHNfZmlsZSwgIm9wdGlvbnMuc2lnbm9mZiIsICJ0cnVlIik7CisJaWYgKG9wdHMtPnJlY29yZF9vcmlnaW4pCisJCWdpdF9jb25maWdfc2V0X2luX2ZpbGUob3B0c19maWxlLCAib3B0aW9ucy5yZWNvcmQtb3JpZ2luIiwgInRydWUiKTsKKwlpZiAob3B0cy0+YWxsb3dfZmYpCisJCWdpdF9jb25maWdfc2V0X2luX2ZpbGUob3B0c19maWxlLCAib3B0aW9ucy5hbGxvdy1mZiIsICJ0cnVlIik7CisJaWYgKG9wdHMtPm1haW5saW5lKSB7CisJCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJCXN0cmJ1Zl9hZGRmKCZidWYsICIlZCIsIG9wdHMtPm1haW5saW5lKTsKKwkJZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZShvcHRzX2ZpbGUsICJvcHRpb25zLm1haW5saW5lIiwgYnVmLmJ1Zik7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKwlpZiAob3B0cy0+c3RyYXRlZ3kpCisJCWdpdF9jb25maWdfc2V0X2luX2ZpbGUob3B0c19maWxlLCAib3B0aW9ucy5zdHJhdGVneSIsIG9wdHMtPnN0cmF0ZWd5KTsKKwlpZiAob3B0cy0+Z3BnX3NpZ24pCisJCWdpdF9jb25maWdfc2V0X2luX2ZpbGUob3B0c19maWxlLCAib3B0aW9ucy5ncGctc2lnbiIsIG9wdHMtPmdwZ19zaWduKTsKKwlpZiAob3B0cy0+eG9wdHMpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBvcHRzLT54b3B0c19ucjsgaSsrKQorCQkJZ2l0X2NvbmZpZ19zZXRfbXVsdGl2YXJfaW5fZmlsZShvcHRzX2ZpbGUsCisJCQkJCQkJIm9wdGlvbnMuc3RyYXRlZ3ktb3B0aW9uIiwKKwkJCQkJCQlvcHRzLT54b3B0c1tpXSwgIl4kIiwgMCk7CisJfQorfQorCitzdGF0aWMgaW50IHBpY2tfY29tbWl0cyhzdHJ1Y3QgY29tbWl0X2xpc3QgKnRvZG9fbGlzdCwgc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqY3VyOworCWludCByZXM7CisKKwlzZXRlbnYoR0lUX1JFRkxPR19BQ1RJT04sIGFjdGlvbl9uYW1lKG9wdHMpLCAwKTsKKwlpZiAob3B0cy0+YWxsb3dfZmYpCisJCWFzc2VydCghKG9wdHMtPnNpZ25vZmYgfHwgb3B0cy0+bm9fY29tbWl0IHx8CisJCQkJb3B0cy0+cmVjb3JkX29yaWdpbiB8fCBvcHRzLT5lZGl0KSk7CisJcmVhZF9hbmRfcmVmcmVzaF9jYWNoZShvcHRzKTsKKworCWZvciAoY3VyID0gdG9kb19saXN0OyBjdXI7IGN1ciA9IGN1ci0+bmV4dCkgeworCQlzYXZlX3RvZG8oY3VyLCBvcHRzKTsKKwkJcmVzID0gZG9fcGlja19jb21taXQoY3VyLT5pdGVtLCBvcHRzKTsKKwkJaWYgKHJlcykKKwkJCXJldHVybiByZXM7CisJfQorCisJLyoKKwkgKiBTZXF1ZW5jZSBvZiBwaWNrcyBmaW5pc2hlZCBzdWNjZXNzZnVsbHk7IGNsZWFudXAgYnkKKwkgKiByZW1vdmluZyB0aGUgLmdpdC9zZXF1ZW5jZXIgZGlyZWN0b3J5CisJICovCisJcmVtb3ZlX3NlcXVlbmNlcl9zdGF0ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbnRpbnVlX3NpbmdsZV9waWNrKHZvaWQpCit7CisJY29uc3QgY2hhciAqYXJndltdID0geyAiY29tbWl0IiwgTlVMTCB9OworCisJaWYgKCFmaWxlX2V4aXN0cyhnaXRfcGF0aF9jaGVycnlfcGlja19oZWFkKCkpICYmCisJICAgICFmaWxlX2V4aXN0cyhnaXRfcGF0aF9yZXZlcnRfaGVhZCgpKSkKKwkJcmV0dXJuIGVycm9yKF8oIm5vIGNoZXJyeS1waWNrIG9yIHJldmVydCBpbiBwcm9ncmVzcyIpKTsKKwlyZXR1cm4gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgUlVOX0dJVF9DTUQpOworfQorCitzdGF0aWMgaW50IHNlcXVlbmNlcl9jb250aW51ZShzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICp0b2RvX2xpc3QgPSBOVUxMOworCisJaWYgKCFmaWxlX2V4aXN0cyhnaXRfcGF0aF90b2RvX2ZpbGUoKSkpCisJCXJldHVybiBjb250aW51ZV9zaW5nbGVfcGljaygpOworCXJlYWRfcG9wdWxhdGVfb3B0cygmb3B0cyk7CisJcmVhZF9wb3B1bGF0ZV90b2RvKCZ0b2RvX2xpc3QsIG9wdHMpOworCisJLyogVmVyaWZ5IHRoYXQgdGhlIGNvbmZsaWN0IGhhcyBiZWVuIHJlc29sdmVkICovCisJaWYgKGZpbGVfZXhpc3RzKGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQoKSkgfHwKKwkgICAgZmlsZV9leGlzdHMoZ2l0X3BhdGhfcmV2ZXJ0X2hlYWQoKSkpIHsKKwkJaW50IHJldCA9IGNvbnRpbnVlX3NpbmdsZV9waWNrKCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwlpZiAoaW5kZXhfZGlmZmVyc19mcm9tKCJIRUFEIiwgMCkpCisJCXJldHVybiBlcnJvcl9kaXJ0eV9pbmRleChvcHRzKTsKKwl0b2RvX2xpc3QgPSB0b2RvX2xpc3QtPm5leHQ7CisJcmV0dXJuIHBpY2tfY29tbWl0cyh0b2RvX2xpc3QsIG9wdHMpOworfQorCitzdGF0aWMgaW50IHNpbmdsZV9waWNrKHN0cnVjdCBjb21taXQgKmNtaXQsIHN0cnVjdCByZXBsYXlfb3B0cyAqb3B0cykKK3sKKwlzZXRlbnYoR0lUX1JFRkxPR19BQ1RJT04sIGFjdGlvbl9uYW1lKG9wdHMpLCAwKTsKKwlyZXR1cm4gZG9fcGlja19jb21taXQoY21pdCwgb3B0cyk7Cit9CisKK2ludCBzZXF1ZW5jZXJfcGlja19yZXZpc2lvbnMoc3RydWN0IHJlcGxheV9vcHRzICpvcHRzKQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqdG9kb19saXN0ID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBpOworCisJaWYgKG9wdHMtPnN1YmNvbW1hbmQgPT0gUkVQTEFZX05PTkUpCisJCWFzc2VydChvcHRzLT5yZXZzKTsKKworCXJlYWRfYW5kX3JlZnJlc2hfY2FjaGUob3B0cyk7CisKKwkvKgorCSAqIERlY2lkZSB3aGF0IHRvIGRvIGRlcGVuZGluZyBvbiB0aGUgYXJndW1lbnRzOyBhIGZyZXNoCisJICogY2hlcnJ5LXBpY2sgc2hvdWxkIGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgZnJvbSBhbiBleGlzdGluZworCSAqIG9uZSB0aGF0IGlzIGJlaW5nIGNvbnRpbnVlZAorCSAqLworCWlmIChvcHRzLT5zdWJjb21tYW5kID09IFJFUExBWV9SRU1PVkVfU1RBVEUpIHsKKwkJcmVtb3ZlX3NlcXVlbmNlcl9zdGF0ZSgpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG9wdHMtPnN1YmNvbW1hbmQgPT0gUkVQTEFZX1JPTExCQUNLKQorCQlyZXR1cm4gc2VxdWVuY2VyX3JvbGxiYWNrKG9wdHMpOworCWlmIChvcHRzLT5zdWJjb21tYW5kID09IFJFUExBWV9DT05USU5VRSkKKwkJcmV0dXJuIHNlcXVlbmNlcl9jb250aW51ZShvcHRzKTsKKworCWZvciAoaSA9IDA7IGkgPCBvcHRzLT5yZXZzLT5wZW5kaW5nLm5yOyBpKyspIHsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJY29uc3QgY2hhciAqbmFtZSA9IG9wdHMtPnJldnMtPnBlbmRpbmcub2JqZWN0c1tpXS5uYW1lOworCisJCS8qIFRoaXMgaGFwcGVucyB3aGVuIHVzaW5nIC0tc3RkaW4uICovCisJCWlmICghc3RybGVuKG5hbWUpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFnZXRfc2hhMShuYW1lLCBzaGExKSkgeworCQkJaWYgKCFsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSkpIHsKKwkJCQllbnVtIG9iamVjdF90eXBlIHR5cGUgPSBzaGExX29iamVjdF9pbmZvKHNoYTEsIE5VTEwpOworCQkJCWRpZShfKCIlczogY2FuJ3QgY2hlcnJ5LXBpY2sgYSAlcyIpLCBuYW1lLCB0eXBlbmFtZSh0eXBlKSk7CisJCQl9CisJCX0gZWxzZQorCQkJZGllKF8oIiVzOiBiYWQgcmV2aXNpb24iKSwgbmFtZSk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGNhbGxlZCBhcyAiZ2l0IGNoZXJyeS1waWNrIDxjb21taXQ+IiwganVzdAorCSAqIGNoZXJyeS1waWNrL3JldmVydCBpdCwgc2V0IENIRVJSWV9QSUNLX0hFQUQgLworCSAqIFJFVkVSVF9IRUFELCBhbmQgZG9uJ3QgdG91Y2ggdGhlIHNlcXVlbmNlciBzdGF0ZS4KKwkgKiBUaGlzIG1lYW5zIGl0IGlzIHBvc3NpYmxlIHRvIGNoZXJyeS1waWNrIGluIHRoZSBtaWRkbGUKKwkgKiBvZiBhIGNoZXJyeS1waWNrIHNlcXVlbmNlLgorCSAqLworCWlmIChvcHRzLT5yZXZzLT5jbWRsaW5lLm5yID09IDEgJiYKKwkgICAgb3B0cy0+cmV2cy0+Y21kbGluZS5yZXYtPndoZW5jZSA9PSBSRVZfQ01EX1JFViAmJgorCSAgICBvcHRzLT5yZXZzLT5ub193YWxrICYmCisJICAgICFvcHRzLT5yZXZzLT5jbWRsaW5lLnJldi0+ZmxhZ3MpIHsKKwkJc3RydWN0IGNvbW1pdCAqY21pdDsKKwkJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsayhvcHRzLT5yZXZzKSkKKwkJCWRpZShfKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpKTsKKwkJY21pdCA9IGdldF9yZXZpc2lvbihvcHRzLT5yZXZzKTsKKwkJaWYgKCFjbWl0IHx8IGdldF9yZXZpc2lvbihvcHRzLT5yZXZzKSkKKwkJCWRpZSgiQlVHOiBleHBlY3RlZCBleGFjdGx5IG9uZSBjb21taXQgZnJvbSB3YWxrIik7CisJCXJldHVybiBzaW5nbGVfcGljayhjbWl0LCBvcHRzKTsKKwl9CisKKwkvKgorCSAqIFN0YXJ0IGEgbmV3IGNoZXJyeS1waWNrLyByZXZlcnQgc2VxdWVuY2U7IGJ1dAorCSAqIGZpcnN0LCBtYWtlIHN1cmUgdGhhdCBhbiBleGlzdGluZyBvbmUgaXNuJ3QgaW4KKwkgKiBwcm9ncmVzcworCSAqLworCisJd2Fsa19yZXZzX3BvcHVsYXRlX3RvZG8oJnRvZG9fbGlzdCwgb3B0cyk7CisJaWYgKGNyZWF0ZV9zZXFfZGlyKCkgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGdldF9zaGExKCJIRUFEIiwgc2hhMSkpIHsKKwkJaWYgKG9wdHMtPmFjdGlvbiA9PSBSRVBMQVlfUkVWRVJUKQorCQkJcmV0dXJuIGVycm9yKF8oIkNhbid0IHJldmVydCBhcyBpbml0aWFsIGNvbW1pdCIpKTsKKwkJcmV0dXJuIGVycm9yKF8oIkNhbid0IGNoZXJyeS1waWNrIGludG8gZW1wdHkgaGVhZCIpKTsKKwl9CisJc2F2ZV9oZWFkKHNoYTFfdG9faGV4KHNoYTEpKTsKKwlzYXZlX29wdHMob3B0cyk7CisJcmV0dXJuIHBpY2tfY29tbWl0cyh0b2RvX2xpc3QsIG9wdHMpOworfQorCit2b2lkIGFwcGVuZF9zaWdub2ZmKHN0cnVjdCBzdHJidWYgKm1zZ2J1ZiwgaW50IGlnbm9yZV9mb290ZXIsIHVuc2lnbmVkIGZsYWcpCit7CisJdW5zaWduZWQgbm9fZHVwX3NvYiA9IGZsYWcgJiBBUFBFTkRfU0lHTk9GRl9ERURVUDsKKwlzdHJ1Y3Qgc3RyYnVmIHNvYiA9IFNUUkJVRl9JTklUOworCWludCBoYXNfZm9vdGVyOworCisJc3RyYnVmX2FkZHN0cigmc29iLCBzaWduX29mZl9oZWFkZXIpOworCXN0cmJ1Zl9hZGRzdHIoJnNvYiwgZm10X25hbWUoZ2V0ZW52KCJHSVRfQ09NTUlUVEVSX05BTUUiKSwKKwkJCQlnZXRlbnYoIkdJVF9DT01NSVRURVJfRU1BSUwiKSkpOworCXN0cmJ1Zl9hZGRjaCgmc29iLCAnXG4nKTsKKworCS8qCisJICogSWYgdGhlIHdob2xlIG1lc3NhZ2UgYnVmZmVyIGlzIGVxdWFsIHRvIHRoZSBzb2IsIHByZXRlbmQgdGhhdCB3ZQorCSAqIGZvdW5kIGEgY29uZm9ybWluZyBmb290ZXIgd2l0aCBhIG1hdGNoaW5nIHNvYgorCSAqLworCWlmIChtc2didWYtPmxlbiAtIGlnbm9yZV9mb290ZXIgPT0gc29iLmxlbiAmJgorCSAgICAhc3RybmNtcChtc2didWYtPmJ1Ziwgc29iLmJ1Ziwgc29iLmxlbikpCisJCWhhc19mb290ZXIgPSAzOworCWVsc2UKKwkJaGFzX2Zvb3RlciA9IGhhc19jb25mb3JtaW5nX2Zvb3Rlcihtc2didWYsICZzb2IsIGlnbm9yZV9mb290ZXIpOworCisJaWYgKCFoYXNfZm9vdGVyKSB7CisJCWNvbnN0IGNoYXIgKmFwcGVuZF9uZXdsaW5lcyA9IE5VTEw7CisJCXNpemVfdCBsZW4gPSBtc2didWYtPmxlbiAtIGlnbm9yZV9mb290ZXI7CisKKwkJaWYgKCFsZW4pIHsKKwkJCS8qCisJCQkgKiBUaGUgYnVmZmVyIGlzIGNvbXBsZXRlbHkgZW1wdHkuICBMZWF2ZSBmb29tIGZvcgorCQkJICogdGhlIHRpdGxlIGFuZCBib2R5IHRvIGJlIGZpbGxlZCBpbiBieSB0aGUgdXNlci4KKwkJCSAqLworCQkJYXBwZW5kX25ld2xpbmVzID0gIlxuXG4iOworCQl9IGVsc2UgaWYgKG1zZ2J1Zi0+YnVmW2xlbiAtIDFdICE9ICdcbicpIHsKKwkJCS8qCisJCQkgKiBJbmNvbXBsZXRlIGxpbmUuICBDb21wbGV0ZSB0aGUgbGluZSBhbmQgYWRkIGEKKwkJCSAqIGJsYW5rIG9uZSBzbyB0aGF0IHRoZXJlIGlzIGFuIGVtcHR5IGxpbmUgYmV0d2VlbgorCQkJICogdGhlIG1lc3NhZ2UgYm9keSBhbmQgdGhlIHNvYi4KKwkJCSAqLworCQkJYXBwZW5kX25ld2xpbmVzID0gIlxuXG4iOworCQl9IGVsc2UgaWYgKGxlbiA9PSAxKSB7CisJCQkvKgorCQkJICogQnVmZmVyIGNvbnRhaW5zIGEgc2luZ2xlIG5ld2xpbmUuICBBZGQgYW5vdGhlcgorCQkJICogc28gdGhhdCB3ZSBsZWF2ZSByb29tIGZvciB0aGUgdGl0bGUgYW5kIGJvZHkuCisJCQkgKi8KKwkJCWFwcGVuZF9uZXdsaW5lcyA9ICJcbiI7CisJCX0gZWxzZSBpZiAobXNnYnVmLT5idWZbbGVuIC0gMl0gIT0gJ1xuJykgeworCQkJLyoKKwkJCSAqIEJ1ZmZlciBlbmRzIHdpdGggYSBzaW5nbGUgbmV3bGluZS4gIEFkZCBhbm90aGVyCisJCQkgKiBzbyB0aGF0IHRoZXJlIGlzIGFuIGVtcHR5IGxpbmUgYmV0d2VlbiB0aGUgbWVzc2FnZQorCQkJICogYm9keSBhbmQgdGhlIHNvYi4KKwkJCSAqLworCQkJYXBwZW5kX25ld2xpbmVzID0gIlxuIjsKKwkJfSAvKiBlbHNlLCB0aGUgYnVmZmVyIGFscmVhZHkgZW5kcyB3aXRoIHR3byBuZXdsaW5lcy4gKi8KKworCQlpZiAoYXBwZW5kX25ld2xpbmVzKQorCQkJc3RyYnVmX3NwbGljZShtc2didWYsIG1zZ2J1Zi0+bGVuIC0gaWdub3JlX2Zvb3RlciwgMCwKKwkJCQlhcHBlbmRfbmV3bGluZXMsIHN0cmxlbihhcHBlbmRfbmV3bGluZXMpKTsKKwl9CisKKwlpZiAoaGFzX2Zvb3RlciAhPSAzICYmICghbm9fZHVwX3NvYiB8fCBoYXNfZm9vdGVyICE9IDIpKQorCQlzdHJidWZfc3BsaWNlKG1zZ2J1ZiwgbXNnYnVmLT5sZW4gLSBpZ25vcmVfZm9vdGVyLCAwLAorCQkJCXNvYi5idWYsIHNvYi5sZW4pOworCisJc3RyYnVmX3JlbGVhc2UoJnNvYik7Cit9CmRpZmYgLS1naXQgYS9zZXF1ZW5jZXIuaCBiL3NlcXVlbmNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZDVjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9zZXF1ZW5jZXIuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIFNFUVVFTkNFUl9ICisjZGVmaW5lIFNFUVVFTkNFUl9ICisKKyNkZWZpbmUgU0VRX0RJUgkJInNlcXVlbmNlciIKKyNkZWZpbmUgU0VRX0hFQURfRklMRQkic2VxdWVuY2VyL2hlYWQiCisjZGVmaW5lIFNFUV9UT0RPX0ZJTEUJInNlcXVlbmNlci90b2RvIgorI2RlZmluZSBTRVFfT1BUU19GSUxFCSJzZXF1ZW5jZXIvb3B0cyIKKworI2RlZmluZSBBUFBFTkRfU0lHTk9GRl9ERURVUCAoMXUgPDwgMCkKKworZW51bSByZXBsYXlfYWN0aW9uIHsKKwlSRVBMQVlfUkVWRVJULAorCVJFUExBWV9QSUNLCit9OworCitlbnVtIHJlcGxheV9zdWJjb21tYW5kIHsKKwlSRVBMQVlfTk9ORSwKKwlSRVBMQVlfUkVNT1ZFX1NUQVRFLAorCVJFUExBWV9DT05USU5VRSwKKwlSRVBMQVlfUk9MTEJBQ0sKK307CisKK3N0cnVjdCByZXBsYXlfb3B0cyB7CisJZW51bSByZXBsYXlfYWN0aW9uIGFjdGlvbjsKKwllbnVtIHJlcGxheV9zdWJjb21tYW5kIHN1YmNvbW1hbmQ7CisKKwkvKiBCb29sZWFuIG9wdGlvbnMgKi8KKwlpbnQgZWRpdDsKKwlpbnQgcmVjb3JkX29yaWdpbjsKKwlpbnQgbm9fY29tbWl0OworCWludCBzaWdub2ZmOworCWludCBhbGxvd19mZjsKKwlpbnQgYWxsb3dfcmVyZXJlX2F1dG87CisJaW50IGFsbG93X2VtcHR5OworCWludCBhbGxvd19lbXB0eV9tZXNzYWdlOworCWludCBrZWVwX3JlZHVuZGFudF9jb21taXRzOworCisJaW50IG1haW5saW5lOworCisJY29uc3QgY2hhciAqZ3BnX3NpZ247CisKKwkvKiBNZXJnZSBzdHJhdGVneSAqLworCWNvbnN0IGNoYXIgKnN0cmF0ZWd5OworCWNvbnN0IGNoYXIgKip4b3B0czsKKwlzaXplX3QgeG9wdHNfbnIsIHhvcHRzX2FsbG9jOworCisJLyogT25seSB1c2VkIGJ5IFJFUExBWV9OT05FICovCisJc3RydWN0IHJldl9pbmZvICpyZXZzOworfTsKKworaW50IHNlcXVlbmNlcl9waWNrX3JldmlzaW9ucyhzdHJ1Y3QgcmVwbGF5X29wdHMgKm9wdHMpOworCitleHRlcm4gY29uc3QgY2hhciBzaWduX29mZl9oZWFkZXJbXTsKKwordm9pZCBhcHBlbmRfc2lnbm9mZihzdHJ1Y3Qgc3RyYnVmICptc2didWYsIGludCBpZ25vcmVfZm9vdGVyLCB1bnNpZ25lZCBmbGFnKTsKK3ZvaWQgYXBwZW5kX2NvbmZsaWN0c19oaW50KHN0cnVjdCBzdHJidWYgKm1zZ2J1Zik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2VydmVyLWluZm8uYyBiL3NlcnZlci1pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgyZTllZQotLS0gL2Rldi9udWxsCisrKyBiL3NlcnZlci1pbmZvLmMKQEAgLTAsMCArMSwyODUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKworLyoKKyAqIENyZWF0ZSB0aGUgZmlsZSAicGF0aCIgYnkgd3JpdGluZyB0byBhIHRlbXBvcmFyeSBmaWxlIGFuZCByZW5hbWluZworICogaXQgaW50byBwbGFjZS4gVGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGNvbWUgZnJvbSAiZ2VuZXJhdGUiLCB3aGljaAorICogc2hvdWxkIHJldHVybiBub24temVybyBpZiBpdCBlbmNvdW50ZXJzIGFuIGVycm9yLgorICovCitzdGF0aWMgaW50IHVwZGF0ZV9pbmZvX2ZpbGUoY2hhciAqcGF0aCwgaW50ICgqZ2VuZXJhdGUpKEZJTEUgKikpCit7CisJY2hhciAqdG1wID0gbWtwYXRoZHVwKCIlc19YWFhYWFgiLCBwYXRoKTsKKwlpbnQgcmV0ID0gLTE7CisJaW50IGZkID0gLTE7CisJRklMRSAqZnAgPSBOVUxMOworCisJc2FmZV9jcmVhdGVfbGVhZGluZ19kaXJlY3RvcmllcyhwYXRoKTsKKwlmZCA9IGdpdF9ta3N0ZW1wX21vZGUodG1wLCAwNjY2KTsKKwlpZiAoZmQgPCAwKQorCQlnb3RvIG91dDsKKwlmcCA9IGZkb3BlbihmZCwgInciKTsKKwlpZiAoIWZwKQorCQlnb3RvIG91dDsKKwlyZXQgPSBnZW5lcmF0ZShmcCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJaWYgKGZjbG9zZShmcCkpCisJCWdvdG8gb3V0OworCWlmIChhZGp1c3Rfc2hhcmVkX3Blcm0odG1wKSA8IDApCisJCWdvdG8gb3V0OworCWlmIChyZW5hbWUodG1wLCBwYXRoKSA8IDApCisJCWdvdG8gb3V0OworCXJldCA9IDA7CisKK291dDoKKwlpZiAocmV0KSB7CisJCWVycm9yKCJ1bmFibGUgdG8gdXBkYXRlICVzOiAlcyIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisJCWlmIChmcCkKKwkJCWZjbG9zZShmcCk7CisJCWVsc2UgaWYgKGZkID49IDApCisJCQljbG9zZShmZCk7CisJCXVubGluayh0bXApOworCX0KKwlmcmVlKHRtcCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhZGRfaW5mb19yZWYoY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJRklMRSAqZnAgPSBjYl9kYXRhOworCXN0cnVjdCBvYmplY3QgKm8gPSBwYXJzZV9vYmplY3Qob2lkLT5oYXNoKTsKKwlpZiAoIW8pCisJCXJldHVybiAtMTsKKworCWlmIChmcHJpbnRmKGZwLCAiJXMJJXNcbiIsIG9pZF90b19oZXgob2lkKSwgcGF0aCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW8gPSBkZXJlZl90YWcobywgcGF0aCwgMCk7CisJCWlmIChvKQorCQkJaWYgKGZwcmludGYoZnAsICIlcwklc157fVxuIiwKKwkJCQlzaGExX3RvX2hleChvLT5zaGExKSwgcGF0aCkgPCAwKQorCQkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2VuZXJhdGVfaW5mb19yZWZzKEZJTEUgKmZwKQoreworCXJldHVybiBmb3JfZWFjaF9yZWYoYWRkX2luZm9fcmVmLCBmcCk7Cit9CisKK3N0YXRpYyBpbnQgdXBkYXRlX2luZm9fcmVmcyhpbnQgZm9yY2UpCit7CisJY2hhciAqcGF0aCA9IGdpdF9wYXRoZHVwKCJpbmZvL3JlZnMiKTsKKwlpbnQgcmV0ID0gdXBkYXRlX2luZm9fZmlsZShwYXRoLCBnZW5lcmF0ZV9pbmZvX3JlZnMpOworCWZyZWUocGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworLyogcGFja3MgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFja19pbmZvIHsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlpbnQgb2xkX251bTsKKwlpbnQgbmV3X251bTsKKwlpbnQgbnJfYWxsb2M7CisJaW50IG5yX2hlYWRzOworCXVuc2lnbmVkIGNoYXIgKCpoZWFkKVsyMF07Cit9ICoqaW5mbzsKK3N0YXRpYyBpbnQgbnVtX3BhY2s7CitzdGF0aWMgY29uc3QgY2hhciAqb2JqZGlyOworc3RhdGljIGludCBvYmpkaXJsZW47CisKK3N0YXRpYyBzdHJ1Y3QgcGFja19pbmZvICpmaW5kX3BhY2tfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFjazsgaSsrKSB7CisJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0gaW5mb1tpXS0+cDsKKwkJLyogc2tpcCAiL3BhY2svIiBhZnRlciAiLmdpdC9vYmplY3RzIiAqLworCQlpZiAoIXN0cmNtcChwLT5wYWNrX25hbWUgKyBvYmpkaXJsZW4gKyA2LCBuYW1lKSkKKwkJCXJldHVybiBpbmZvW2ldOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogUmV0dXJucyBub24temVybyB3aGVuIHdlIGRldGVjdCB0aGF0IHRoZSBpbmZvIGluIHRoZQorICogb2xkIGZpbGUgaXMgdXNlbGVzcy4KKyAqLworc3RhdGljIGludCBwYXJzZV9wYWNrX2RlZihjb25zdCBjaGFyICpsaW5lLCBpbnQgb2xkX2NudCkKK3sKKwlzdHJ1Y3QgcGFja19pbmZvICppID0gZmluZF9wYWNrX2J5X25hbWUobGluZSArIDIpOworCWlmIChpKSB7CisJCWktPm9sZF9udW0gPSBvbGRfY250OworCQlyZXR1cm4gMDsKKwl9CisJZWxzZSB7CisJCS8qIFRoZSBmaWxlIGRlc2NyaWJlcyBhIHBhY2sgdGhhdCBpcyBubyBsb25nZXIgaGVyZSAqLworCQlyZXR1cm4gMTsKKwl9Cit9CisKKy8qIFJldHVybnMgbm9uLXplcm8gd2hlbiB3ZSBkZXRlY3QgdGhhdCB0aGUgaW5mbyBpbiB0aGUKKyAqIG9sZCBmaWxlIGlzIHVzZWxlc3MuCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9wYWNrX2luZm9fZmlsZShjb25zdCBjaGFyICppbmZvZmlsZSkKK3sKKwlGSUxFICpmcDsKKwljaGFyIGxpbmVbMTAwMF07CisJaW50IG9sZF9jbnQgPSAwOworCisJZnAgPSBmb3BlbihpbmZvZmlsZSwgInIiKTsKKwlpZiAoIWZwKQorCQlyZXR1cm4gMTsgLyogbm9uZXhpc3RlbnQgaXMgbm90IGFuIGVycm9yLiAqLworCisJd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZnApKSB7CisJCWludCBsZW4gPSBzdHJsZW4obGluZSk7CisJCWlmIChsZW4gJiYgbGluZVtsZW4tMV0gPT0gJ1xuJykKKwkJCWxpbmVbLS1sZW5dID0gMDsKKworCQlpZiAoIWxlbikKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAobGluZVswXSkgeworCQljYXNlICdQJzogLyogUCBuYW1lICovCisJCQlpZiAocGFyc2VfcGFja19kZWYobGluZSwgb2xkX2NudCsrKSkKKwkJCQlnb3RvIG91dF9zdGFsZTsKKwkJCWJyZWFrOworCQljYXNlICdEJzogLyogd2UgdXNlZCB0byBlbWl0IEQgYnV0IHRoYXQgd2FzIG1pc2d1aWRlZC4gKi8KKwkJY2FzZSAnVCc6IC8qIHdlIHVzZWQgdG8gZW1pdCBUIGJ1dCBub2JvZHkgdXNlcyBpdC4gKi8KKwkJCWdvdG8gb3V0X3N0YWxlOworCQlkZWZhdWx0OgorCQkJZXJyb3IoInVucmVjb2duaXplZDogJXMiLCBsaW5lKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWZjbG9zZShmcCk7CisJcmV0dXJuIDA7Cisgb3V0X3N0YWxlOgorCWZjbG9zZShmcCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9pbmZvKGNvbnN0IHZvaWQgKmFfLCBjb25zdCB2b2lkICpiXykKK3sKKwlzdHJ1Y3QgcGFja19pbmZvICpjb25zdCAqYSA9IGFfOworCXN0cnVjdCBwYWNrX2luZm8gKmNvbnN0ICpiID0gYl87CisKKwlpZiAoMCA8PSAoKmEpLT5vbGRfbnVtICYmIDAgPD0gKCpiKS0+b2xkX251bSkKKwkJLyogS2VlcCB0aGUgb3JkZXIgaW4gdGhlIG9yaWdpbmFsICovCisJCXJldHVybiAoKmEpLT5vbGRfbnVtIC0gKCpiKS0+b2xkX251bTsKKwllbHNlIGlmICgwIDw9ICgqYSktPm9sZF9udW0pCisJCS8qIE9ubHkgQSBleGlzdGVkIGluIHRoZSBvcmlnaW5hbCBzbyBCIGlzIG9idmlvdXNseSBuZXdlciAqLworCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoMCA8PSAoKmIpLT5vbGRfbnVtKQorCQkvKiBUaGUgb3RoZXIgd2F5IGFyb3VuZC4gKi8KKwkJcmV0dXJuIDE7CisKKwkvKiB0aGVuIGl0IGRvZXMgbm90IG1hdHRlciBidXQgYXQgbGVhc3Qga2VlcCB0aGUgY29tcGFyaXNvbiBzdGFibGUgKi8KKwlpZiAoKCphKS0+cCA9PSAoKmIpLT5wKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmICgoKmEpLT5wIDwgKCpiKS0+cCkKKwkJcmV0dXJuIC0xOworCWVsc2UKKwkJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfcGFja19pbmZvKGNvbnN0IGNoYXIgKmluZm9maWxlLCBpbnQgZm9yY2UpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJaW50IHN0YWxlOworCWludCBpID0gMDsKKworCW9iamRpciA9IGdldF9vYmplY3RfZGlyZWN0b3J5KCk7CisJb2JqZGlybGVuID0gc3RybGVuKG9iamRpcik7CisKKwlwcmVwYXJlX3BhY2tlZF9naXQoKTsKKwlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQkvKiB3ZSBpZ25vcmUgdGhpbmdzIG9uIGFsdGVybmF0ZSBwYXRoIHNpbmNlIHRoZXkgYXJlCisJCSAqIG5vdCBhdmFpbGFibGUgdG8gdGhlIHB1bGxlcnMgaW4gZ2VuZXJhbC4KKwkJICovCisJCWlmICghcC0+cGFja19sb2NhbCkKKwkJCWNvbnRpbnVlOworCQlpKys7CisJfQorCW51bV9wYWNrID0gaTsKKwlpbmZvID0geGNhbGxvYyhudW1fcGFjaywgc2l6ZW9mKHN0cnVjdCBwYWNrX2luZm8gKikpOworCWZvciAoaSA9IDAsIHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAoIXAtPnBhY2tfbG9jYWwpCisJCQljb250aW51ZTsKKwkJaW5mb1tpXSA9IHhjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBwYWNrX2luZm8pKTsKKwkJaW5mb1tpXS0+cCA9IHA7CisJCWluZm9baV0tPm9sZF9udW0gPSAtMTsKKwkJaSsrOworCX0KKworCWlmIChpbmZvZmlsZSAmJiAhZm9yY2UpCisJCXN0YWxlID0gcmVhZF9wYWNrX2luZm9fZmlsZShpbmZvZmlsZSk7CisJZWxzZQorCQlzdGFsZSA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhY2s7IGkrKykgeworCQlpZiAoc3RhbGUpIHsKKwkJCWluZm9baV0tPm9sZF9udW0gPSAtMTsKKwkJCWluZm9baV0tPm5yX2hlYWRzID0gMDsKKwkJfQorCX0KKworCS8qIHJlbnVtYmVyIHRoZW0gKi8KKwlxc29ydChpbmZvLCBudW1fcGFjaywgc2l6ZW9mKGluZm9bMF0pLCBjb21wYXJlX2luZm8pOworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFjazsgaSsrKQorCQlpbmZvW2ldLT5uZXdfbnVtID0gaTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9wYWNrX2luZm8odm9pZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhY2s7IGkrKykKKwkJZnJlZShpbmZvW2ldKTsKKwlmcmVlKGluZm8pOworfQorCitzdGF0aWMgaW50IHdyaXRlX3BhY2tfaW5mb19maWxlKEZJTEUgKmZwKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFjazsgaSsrKSB7CisJCWlmIChmcHJpbnRmKGZwLCAiUCAlc1xuIiwgaW5mb1tpXS0+cC0+cGFja19uYW1lICsgb2JqZGlybGVuICsgNikgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKwlpZiAoZnB1dGMoJ1xuJywgZnApID09IEVPRikKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVwZGF0ZV9pbmZvX3BhY2tzKGludCBmb3JjZSkKK3sKKwljaGFyICppbmZvZmlsZSA9IG1rcGF0aGR1cCgiJXMvaW5mby9wYWNrcyIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCWludCByZXQ7CisKKwlpbml0X3BhY2tfaW5mbyhpbmZvZmlsZSwgZm9yY2UpOworCXJldCA9IHVwZGF0ZV9pbmZvX2ZpbGUoaW5mb2ZpbGUsIHdyaXRlX3BhY2tfaW5mb19maWxlKTsKKwlmcmVlX3BhY2tfaW5mbygpOworCWZyZWUoaW5mb2ZpbGUpOworCXJldHVybiByZXQ7Cit9CisKKy8qIHB1YmxpYyAqLworaW50IHVwZGF0ZV9zZXJ2ZXJfaW5mbyhpbnQgZm9yY2UpCit7CisJLyogV2Ugd291bGQgYWRkIG1vcmUgZHVtYi1zZXJ2ZXIgc3VwcG9ydCBmaWxlcyBsYXRlciwKKwkgKiBpbmNsdWRpbmcgaW5kZXggb2YgYXZhaWxhYmxlIHBhY2sgZmlsZXMgYW5kIHRoZWlyCisJICogaW50ZW5kZWQgYXVkaWVuY2VzLgorCSAqLworCWludCBlcnJzID0gMDsKKworCWVycnMgPSBlcnJzIHwgdXBkYXRlX2luZm9fcmVmcyhmb3JjZSk7CisJZXJycyA9IGVycnMgfCB1cGRhdGVfaW5mb19wYWNrcyhmb3JjZSk7CisKKwkvKiByZW1vdmUgbGVmdG92ZXIgcmV2LWNhY2hlIGZpbGUgaWYgdGhlcmUgaXMgYW55ICovCisJdW5saW5rX29yX3dhcm4oZ2l0X3BhdGgoImluZm8vcmV2LWNhY2hlIikpOworCisJcmV0dXJuIGVycnM7Cit9CmRpZmYgLS1naXQgYS9zZXR1cC5jIGIvc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzQzNzI1Ci0tLSAvZGV2L251bGwKKysrIGIvc2V0dXAuYwpAQCAtMCwwICsxLDEwNDAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3N0YXRpYyBpbnQgaW5zaWRlX2dpdF9kaXIgPSAtMTsKK3N0YXRpYyBpbnQgaW5zaWRlX3dvcmtfdHJlZSA9IC0xOworc3RhdGljIGludCB3b3JrX3RyZWVfY29uZmlnX2lzX2JvZ3VzOworc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCB1bmtub3duX2V4dGVuc2lvbnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworLyoKKyAqIFRoZSBpbnB1dCBwYXJhbWV0ZXIgbXVzdCBjb250YWluIGFuIGFic29sdXRlIHBhdGgsIGFuZCBpdCBtdXN0IGFscmVhZHkgYmUKKyAqIG5vcm1hbGl6ZWQuCisgKgorICogRmluZCB0aGUgcGFydCBvZiBhbiBhYnNvbHV0ZSBwYXRoIHRoYXQgbGllcyBpbnNpZGUgdGhlIHdvcmsgdHJlZSBieQorICogZGVyZWZlcmVuY2luZyBzeW1saW5rcyBvdXRzaWRlIHRoZSB3b3JrIHRyZWUsIGZvciBleGFtcGxlOgorICogL2RpcjEvcmVwby9kaXIyL2ZpbGUgICAod29yayB0cmVlIGlzIC9kaXIxL3JlcG8pICAgICAgLT4gZGlyMi9maWxlCisgKiAvZGlyL2ZpbGUgICAgICAgICAgICAgICh3b3JrIHRyZWUgaXMgLykgICAgICAgICAgICAgICAtPiBkaXIvZmlsZQorICogL2Rpci9zeW1saW5rMS9zeW1saW5rMiAoc3ltbGluazEgcG9pbnRzIHRvIHdvcmsgdHJlZSkgLT4gc3ltbGluazIKKyAqIC9kaXIvcmVwb2xpbmsvZmlsZSAgICAgKHJlcG9saW5rIHBvaW50cyB0byAvZGlyL3JlcG8pIC0+IGZpbGUKKyAqIC9kaXIvcmVwbyAgICAgICAgICAgICAgKGV4YWN0bHkgZXF1YWwgdG8gd29yayB0cmVlKSAgIC0+IChlbXB0eSBzdHJpbmcpCisgKi8KK3N0YXRpYyBpbnQgYWJzcGF0aF9wYXJ0X2luc2lkZV9yZXBvKGNoYXIgKnBhdGgpCit7CisJc2l6ZV90IGxlbjsKKwlzaXplX3Qgd3RsZW47CisJY2hhciAqcGF0aDA7CisJaW50IG9mZjsKKwljb25zdCBjaGFyICp3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCisJaWYgKCF3b3JrX3RyZWUpCisJCXJldHVybiAtMTsKKwl3dGxlbiA9IHN0cmxlbih3b3JrX3RyZWUpOworCWxlbiA9IHN0cmxlbihwYXRoKTsKKwlvZmYgPSBvZmZzZXRfMXN0X2NvbXBvbmVudChwYXRoKTsKKworCS8qIGNoZWNrIGlmIHdvcmsgdHJlZSBpcyBhbHJlYWR5IHRoZSBwcmVmaXggKi8KKwlpZiAod3RsZW4gPD0gbGVuICYmICFzdHJuY21wKHBhdGgsIHdvcmtfdHJlZSwgd3RsZW4pKSB7CisJCWlmIChwYXRoW3d0bGVuXSA9PSAnLycpIHsKKwkJCW1lbW1vdmUocGF0aCwgcGF0aCArIHd0bGVuICsgMSwgbGVuIC0gd3RsZW4pOworCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAocGF0aFt3dGxlbiAtIDFdID09ICcvJyB8fCBwYXRoW3d0bGVuXSA9PSAnXDAnKSB7CisJCQkvKiB3b3JrIHRyZWUgaXMgdGhlIHJvb3QsIG9yIHRoZSB3aG9sZSBwYXRoICovCisJCQltZW1tb3ZlKHBhdGgsIHBhdGggKyB3dGxlbiwgbGVuIC0gd3RsZW4gKyAxKTsKKwkJCXJldHVybiAwOworCQl9CisJCS8qIHdvcmsgdHJlZSBtaWdodCBtYXRjaCBiZWdpbm5pbmcgb2YgYSBzeW1saW5rIHRvIHdvcmsgdHJlZSAqLworCQlvZmYgPSB3dGxlbjsKKwl9CisJcGF0aDAgPSBwYXRoOworCXBhdGggKz0gb2ZmOworCisJLyogY2hlY2sgZWFjaCAnLyctdGVybWluYXRlZCBsZXZlbCAqLworCXdoaWxlICgqcGF0aCkgeworCQlwYXRoKys7CisJCWlmICgqcGF0aCA9PSAnLycpIHsKKwkJCSpwYXRoID0gJ1wwJzsKKwkJCWlmIChzdHJjbXAocmVhbF9wYXRoKHBhdGgwKSwgd29ya190cmVlKSA9PSAwKSB7CisJCQkJbWVtbW92ZShwYXRoMCwgcGF0aCArIDEsIGxlbiAtIChwYXRoIC0gcGF0aDApKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCSpwYXRoID0gJy8nOworCQl9CisJfQorCisJLyogY2hlY2sgd2hvbGUgcGF0aCAqLworCWlmIChzdHJjbXAocmVhbF9wYXRoKHBhdGgwKSwgd29ya190cmVlKSA9PSAwKSB7CisJCSpwYXRoMCA9ICdcMCc7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKK30KKworLyoKKyAqIE5vcm1hbGl6ZSAicGF0aCIsIHByZXBlbmRpbmcgdGhlICJwcmVmaXgiIGZvciByZWxhdGl2ZSBwYXRocy4gSWYKKyAqIHJlbWFpbmluZ19wcmVmaXggaXMgbm90IE5VTEwsIHJldHVybiB0aGUgYWN0dWFsIHByZWZpeCBzdGlsbAorICogcmVtYWlucyBpbiB0aGUgcGF0aC4gRm9yIGV4YW1wbGUsIHByZWZpeCA9IHN1YjEvc3ViMi8gYW5kIHBhdGggaXMKKyAqCisgKiAgZm9vICAgICAgICAgIC0+IHN1YjEvc3ViMi9mb28gIChmdWxsIHByZWZpeCkKKyAqICAuLi9mb28gICAgICAgLT4gc3ViMS9mb28gICAgICAgKHJlbWFpbmluZyBwcmVmaXggaXMgc3ViMS8pCisgKiAgLi4vLi4vYmFyICAgIC0+IGJhciAgICAgICAgICAgIChubyByZW1haW5pbmcgcHJlZml4KQorICogIC4uLy4uL3N1YjEvc3ViMi9mb28gLT4gc3ViMS9zdWIyL2ZvbyAoYnV0IG5vIHJlbWFpbmluZyBwcmVmaXgpCisgKiAgYHB3ZGAvLi4vYmFyIC0+IHN1YjEvYmFyICAgICAgIChubyByZW1haW5pbmcgcHJlZml4KQorICovCitjaGFyICpwcmVmaXhfcGF0aF9nZW50bHkoY29uc3QgY2hhciAqcHJlZml4LCBpbnQgbGVuLAorCQkJIGludCAqcmVtYWluaW5nX3ByZWZpeCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwljb25zdCBjaGFyICpvcmlnID0gcGF0aDsKKwljaGFyICpzYW5pdGl6ZWQ7CisJaWYgKGlzX2Fic29sdXRlX3BhdGgob3JpZykpIHsKKwkJc2FuaXRpemVkID0geG1hbGxvYyhzdHJsZW4ocGF0aCkgKyAxKTsKKwkJaWYgKHJlbWFpbmluZ19wcmVmaXgpCisJCQkqcmVtYWluaW5nX3ByZWZpeCA9IDA7CisJCWlmIChub3JtYWxpemVfcGF0aF9jb3B5X2xlbihzYW5pdGl6ZWQsIHBhdGgsIHJlbWFpbmluZ19wcmVmaXgpKSB7CisJCQlmcmVlKHNhbml0aXplZCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlpZiAoYWJzcGF0aF9wYXJ0X2luc2lkZV9yZXBvKHNhbml0aXplZCkpIHsKKwkJCWZyZWUoc2FuaXRpemVkKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJc2FuaXRpemVkID0geHN0cmZtdCgiJS4qcyVzIiwgbGVuLCBwcmVmaXgsIHBhdGgpOworCQlpZiAocmVtYWluaW5nX3ByZWZpeCkKKwkJCSpyZW1haW5pbmdfcHJlZml4ID0gbGVuOworCQlpZiAobm9ybWFsaXplX3BhdGhfY29weV9sZW4oc2FuaXRpemVkLCBzYW5pdGl6ZWQsIHJlbWFpbmluZ19wcmVmaXgpKSB7CisJCQlmcmVlKHNhbml0aXplZCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKwlyZXR1cm4gc2FuaXRpemVkOworfQorCitjaGFyICpwcmVmaXhfcGF0aChjb25zdCBjaGFyICpwcmVmaXgsIGludCBsZW4sIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY2hhciAqciA9IHByZWZpeF9wYXRoX2dlbnRseShwcmVmaXgsIGxlbiwgTlVMTCwgcGF0aCk7CisJaWYgKCFyKQorCQlkaWUoIiclcycgaXMgb3V0c2lkZSByZXBvc2l0b3J5IiwgcGF0aCk7CisJcmV0dXJuIHI7Cit9CisKK2ludCBwYXRoX2luc2lkZV9yZXBvKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgbGVuID0gcHJlZml4ID8gc3RybGVuKHByZWZpeCkgOiAwOworCWNoYXIgKnIgPSBwcmVmaXhfcGF0aF9nZW50bHkocHJlZml4LCBsZW4sIE5VTEwsIHBhdGgpOworCWlmIChyKSB7CisJCWZyZWUocik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGNoZWNrX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqYXJnKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoc3RhcnRzX3dpdGgoYXJnLCAiOi8iKSkgeworCQlpZiAoYXJnWzJdID09ICdcMCcpIC8qICI6LyIgaXMgcm9vdCBkaXIsIGFsd2F5cyBleGlzdHMgKi8KKwkJCXJldHVybiAxOworCQluYW1lID0gYXJnICsgMjsKKwl9IGVsc2UgaWYgKCFub193aWxkY2FyZChhcmcpKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChwcmVmaXgpCisJCW5hbWUgPSBwcmVmaXhfZmlsZW5hbWUocHJlZml4LCBzdHJsZW4ocHJlZml4KSwgYXJnKTsKKwllbHNlCisJCW5hbWUgPSBhcmc7CisJaWYgKCFsc3RhdChuYW1lLCAmc3QpKQorCQlyZXR1cm4gMTsgLyogZmlsZSBleGlzdHMgKi8KKwlpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RESVIpCisJCXJldHVybiAwOyAvKiBmaWxlIGRvZXMgbm90IGV4aXN0ICovCisJZGllX2Vycm5vKCJmYWlsZWQgdG8gc3RhdCAnJXMnIiwgYXJnKTsKK30KKworc3RhdGljIHZvaWQgTk9SRVRVUk4gZGllX3ZlcmlmeV9maWxlbmFtZShjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCSBjb25zdCBjaGFyICphcmcsCisJCQkJCSBpbnQgZGlhZ25vc2VfbWlzc3BlbHRfcmV2KQoreworCWlmICghZGlhZ25vc2VfbWlzc3BlbHRfcmV2KQorCQlkaWUoIiVzOiBubyBzdWNoIHBhdGggaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKwkJICAgICJVc2UgJ2dpdCA8Y29tbWFuZD4gLS0gPHBhdGg+Li4uJyB0byBzcGVjaWZ5IHBhdGhzIHRoYXQgZG8gbm90IGV4aXN0IGxvY2FsbHkuIiwKKwkJICAgIGFyZyk7CisJLyoKKwkgKiBTYXlpbmcgIicoaWNhc2UpZm9vJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW5kZXgiIHdoZW4gdGhlCisJICogdXNlciBnYXZlIHVzICI6KGljYXNlKWZvbyIgaXMganVzdCBzdHVwaWQuICBBIG1hZ2ljIHBhdGhzcGVjCisJICogYmVnaW5zIHdpdGggYSBjb2xvbiBhbmQgaXMgZm9sbG93ZWQgYnkgYSBub24tYWxudW07IGRvIG5vdAorCSAqIGxldCBtYXliZV9kaWVfb25fbWlzc3BlbHRfb2JqZWN0X25hbWUoKSBldmVuIHRyaWdnZXIuCisJICovCisJaWYgKCEoYXJnWzBdID09ICc6JyAmJiAhaXNhbG51bShhcmdbMV0pKSkKKwkJbWF5YmVfZGllX29uX21pc3NwZWx0X29iamVjdF9uYW1lKGFyZywgcHJlZml4KTsKKworCS8qIC4uLiBvciBmYWxsIGJhY2sgdGhlIG1vc3QgZ2VuZXJhbCBtZXNzYWdlLiAqLworCWRpZSgiYW1iaWd1b3VzIGFyZ3VtZW50ICclcyc6IHVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS5cbiIKKwkgICAgIlVzZSAnLS0nIHRvIHNlcGFyYXRlIHBhdGhzIGZyb20gcmV2aXNpb25zLCBsaWtlIHRoaXM6XG4iCisJICAgICInZ2l0IDxjb21tYW5kPiBbPHJldmlzaW9uPi4uLl0gLS0gWzxmaWxlPi4uLl0nIiwgYXJnKTsKKworfQorCisvKgorICogVmVyaWZ5IGEgZmlsZW5hbWUgdGhhdCB3ZSBnb3QgYXMgYW4gYXJndW1lbnQgZm9yIGEgcGF0aHNwZWMKKyAqIGVudHJ5LiBOb3RlIHRoYXQgYSBmaWxlbmFtZSB0aGF0IGJlZ2lucyB3aXRoICItIiBuZXZlciB2ZXJpZmllcworICogYXMgdHJ1ZSwgYmVjYXVzZSBldmVuIGlmIHN1Y2ggYSBmaWxlbmFtZSB3ZXJlIHRvIGV4aXN0LCB3ZSB3YW50CisgKiBpdCB0byBiZSBwcmVjZWRlZCBieSB0aGUgIi0tIiBtYXJrZXIgKG9yIHdlIHdhbnQgdGhlIHVzZXIgdG8KKyAqIHVzZSBhIGZvcm1hdCBsaWtlICIuLy1maWxlbmFtZSIpCisgKgorICogVGhlICJkaWFnbm9zZV9taXNzcGVsdF9yZXYiIGlzIHVzZWQgdG8gcHJvdmlkZSBhIHVzZXItZnJpZW5kbHkKKyAqIGRpYWdub3NpcyB3aGVuIGR5aW5nIHVwb24gZmluZGluZyB0aGF0ICJuYW1lIiBpcyBub3QgYSBwYXRobmFtZS4KKyAqIElmIHNldCB0byAxLCB0aGUgZGlhZ25vc2lzIHdpbGwgdHJ5IHRvIGRpYWdub3NlICJuYW1lIiBhcyBhbgorICogaW52YWxpZCBvYmplY3QgbmFtZSAoZS5nLiBIRUFEOmZvbykuIElmIHNldCB0byAwLCB0aGUgZGlhZ25vc2lzCisgKiB3aWxsIG9ubHkgY29tcGxhaW4gYWJvdXQgYW4gaW5leGlzdGluZyBmaWxlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCB0byBjaGVjayB0aGF0IGEgImZpbGUgb3IgcmV2IgorICogYXJndW1lbnQgaXMgdW5hbWJpZ3VvdXMuIEluIHRoaXMgY2FzZSwgdGhlIGNhbGxlciB3aWxsIHdhbnQKKyAqIGRpYWdub3NlX21pc3NwZWx0X3JldiA9PSAxIHdoZW4gdmVyaWZ5aW5nIHRoZSBmaXJzdCBub24tcmV2CisgKiBhcmd1bWVudCAod2hpY2ggY291bGQgaGF2ZSBiZWVuIGEgcmV2aXNpb24pLCBhbmQKKyAqIGRpYWdub3NlX21pc3NwZWx0X3JldiA9PSAwIGZvciB0aGUgbmV4dCBvbmVzIChiZWNhdXNlIHdlIGFscmVhZHkKKyAqIHNhdyBhIGZpbGVuYW1lLCB0aGVyZSdzIG5vdCBhbWJpZ3VpdHkgYW55bW9yZSkuCisgKi8KK3ZvaWQgdmVyaWZ5X2ZpbGVuYW1lKGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJICAgICBjb25zdCBjaGFyICphcmcsCisJCSAgICAgaW50IGRpYWdub3NlX21pc3NwZWx0X3JldikKK3sKKwlpZiAoKmFyZyA9PSAnLScpCisJCWRpZSgiYmFkIGZsYWcgJyVzJyB1c2VkIGFmdGVyIGZpbGVuYW1lIiwgYXJnKTsKKwlpZiAoY2hlY2tfZmlsZW5hbWUocHJlZml4LCBhcmcpKQorCQlyZXR1cm47CisJZGllX3ZlcmlmeV9maWxlbmFtZShwcmVmaXgsIGFyZywgZGlhZ25vc2VfbWlzc3BlbHRfcmV2KTsKK30KKworLyoKKyAqIE9wcG9zaXRlIG9mIHRoZSBhYm92ZTogdGhlIGNvbW1hbmQgbGluZSBkaWQgbm90IGhhdmUgLS0gbWFya2VyCisgKiBhbmQgd2UgcGFyc2VkIHRoZSBhcmcgYXMgYSByZWZuYW1lLiAgSXQgc2hvdWxkIG5vdCBiZSBpbnRlcnByZXRhYmxlCisgKiBhcyBhIGZpbGVuYW1lLgorICovCit2b2lkIHZlcmlmeV9ub25fZmlsZW5hbWUoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICphcmcpCit7CisJaWYgKCFpc19pbnNpZGVfd29ya190cmVlKCkgfHwgaXNfaW5zaWRlX2dpdF9kaXIoKSkKKwkJcmV0dXJuOworCWlmICgqYXJnID09ICctJykKKwkJcmV0dXJuOyAvKiBmbGFnICovCisJaWYgKCFjaGVja19maWxlbmFtZShwcmVmaXgsIGFyZykpCisJCXJldHVybjsKKwlkaWUoImFtYmlndW91cyBhcmd1bWVudCAnJXMnOiBib3RoIHJldmlzaW9uIGFuZCBmaWxlbmFtZVxuIgorCSAgICAiVXNlICctLScgdG8gc2VwYXJhdGUgcGF0aHMgZnJvbSByZXZpc2lvbnMsIGxpa2UgdGhpczpcbiIKKwkgICAgIidnaXQgPGNvbW1hbmQ+IFs8cmV2aXNpb24+Li4uXSAtLSBbPGZpbGU+Li4uXSciLCBhcmcpOworfQorCitpbnQgZ2V0X2NvbW1vbl9kaXIoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmdpdGRpcikKK3sKKwljb25zdCBjaGFyICpnaXRfZW52X2NvbW1vbl9kaXIgPSBnZXRlbnYoR0lUX0NPTU1PTl9ESVJfRU5WSVJPTk1FTlQpOworCWlmIChnaXRfZW52X2NvbW1vbl9kaXIpIHsKKwkJc3RyYnVmX2FkZHN0cihzYiwgZ2l0X2Vudl9jb21tb25fZGlyKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGdldF9jb21tb25fZGlyX25vZW52KHNiLCBnaXRkaXIpOworCX0KK30KKworaW50IGdldF9jb21tb25fZGlyX25vZW52KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpnaXRkaXIpCit7CisJc3RydWN0IHN0cmJ1ZiBkYXRhID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisKKwlzdHJidWZfYWRkZigmcGF0aCwgIiVzL2NvbW1vbmRpciIsIGdpdGRpcik7CisJaWYgKGZpbGVfZXhpc3RzKHBhdGguYnVmKSkgeworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmZGF0YSwgcGF0aC5idWYsIDApIDw9IDApCisJCQlkaWVfZXJybm8oXygiZmFpbGVkIHRvIHJlYWQgJXMiKSwgcGF0aC5idWYpOworCQl3aGlsZSAoZGF0YS5sZW4gJiYgKGRhdGEuYnVmW2RhdGEubGVuIC0gMV0gPT0gJ1xuJyB8fAorCQkJCSAgICBkYXRhLmJ1ZltkYXRhLmxlbiAtIDFdID09ICdccicpKQorCQkJZGF0YS5sZW4tLTsKKwkJZGF0YS5idWZbZGF0YS5sZW5dID0gJ1wwJzsKKwkJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwkJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGRhdGEuYnVmKSkKKwkJCXN0cmJ1Zl9hZGRmKCZwYXRoLCAiJXMvIiwgZ2l0ZGlyKTsKKwkJc3RyYnVmX2FkZGJ1ZigmcGF0aCwgJmRhdGEpOworCQlzdHJidWZfYWRkc3RyKHNiLCByZWFsX3BhdGgocGF0aC5idWYpKTsKKwkJcmV0ID0gMTsKKwl9IGVsc2UKKwkJc3RyYnVmX2FkZHN0cihzYiwgZ2l0ZGlyKTsKKwlzdHJidWZfcmVsZWFzZSgmZGF0YSk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUZXN0IGlmIGl0IGxvb2tzIGxpa2Ugd2UncmUgYXQgYSBnaXQgZGlyZWN0b3J5LgorICogV2Ugd2FudCB0byBzZWU6CisgKgorICogIC0gZWl0aGVyIGFuIG9iamVjdHMvIGRpcmVjdG9yeSBfb3JfIHRoZSBwcm9wZXIKKyAqICAgIEdJVF9PQkpFQ1RfRElSRUNUT1JZIGVudmlyb25tZW50IHZhcmlhYmxlCisgKiAgLSBhIHJlZnMvIGRpcmVjdG9yeQorICogIC0gZWl0aGVyIGEgSEVBRCBzeW1saW5rIG9yIGEgSEVBRCBmaWxlIHRoYXQgaXMgZm9ybWF0dGVkIGFzCisgKiAgICBhIHByb3BlciAicmVmOiIsIG9yIGEgcmVndWxhciBmaWxlIEhFQUQgdGhhdCBoYXMgYSBwcm9wZXJseQorICogICAgZm9ybWF0dGVkIHNoYTEgb2JqZWN0IG5hbWUuCisgKi8KK2ludCBpc19naXRfZGlyZWN0b3J5KGNvbnN0IGNoYXIgKnN1c3BlY3QpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJaW50IHJldCA9IDA7CisJc2l6ZV90IGxlbjsKKworCS8qIENoZWNrIHdvcmt0cmVlLXJlbGF0ZWQgc2lnbmF0dXJlcyAqLworCXN0cmJ1Zl9hZGRmKCZwYXRoLCAiJXMvSEVBRCIsIHN1c3BlY3QpOworCWlmICh2YWxpZGF0ZV9oZWFkcmVmKHBhdGguYnVmKSkKKwkJZ290byBkb25lOworCisJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwlnZXRfY29tbW9uX2RpcigmcGF0aCwgc3VzcGVjdCk7CisJbGVuID0gcGF0aC5sZW47CisKKwkvKiBDaGVjayBub24td29ya3RyZWUtcmVsYXRlZCBzaWduYXR1cmVzICovCisJaWYgKGdldGVudihEQl9FTlZJUk9OTUVOVCkpIHsKKwkJaWYgKGFjY2VzcyhnZXRlbnYoREJfRU5WSVJPTk1FTlQpLCBYX09LKSkKKwkJCWdvdG8gZG9uZTsKKwl9CisJZWxzZSB7CisJCXN0cmJ1Zl9zZXRsZW4oJnBhdGgsIGxlbik7CisJCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsICIvb2JqZWN0cyIpOworCQlpZiAoYWNjZXNzKHBhdGguYnVmLCBYX09LKSkKKwkJCWdvdG8gZG9uZTsKKwl9CisKKwlzdHJidWZfc2V0bGVuKCZwYXRoLCBsZW4pOworCXN0cmJ1Zl9hZGRzdHIoJnBhdGgsICIvcmVmcyIpOworCWlmIChhY2Nlc3MocGF0aC5idWYsIFhfT0spKQorCQlnb3RvIGRvbmU7CisKKwlyZXQgPSAxOworZG9uZToKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGlzX2luc2lkZV9naXRfZGlyKHZvaWQpCit7CisJaWYgKGluc2lkZV9naXRfZGlyIDwgMCkKKwkJaW5zaWRlX2dpdF9kaXIgPSBpc19pbnNpZGVfZGlyKGdldF9naXRfZGlyKCkpOworCXJldHVybiBpbnNpZGVfZ2l0X2RpcjsKK30KKworaW50IGlzX2luc2lkZV93b3JrX3RyZWUodm9pZCkKK3sKKwlpZiAoaW5zaWRlX3dvcmtfdHJlZSA8IDApCisJCWluc2lkZV93b3JrX3RyZWUgPSBpc19pbnNpZGVfZGlyKGdldF9naXRfd29ya190cmVlKCkpOworCXJldHVybiBpbnNpZGVfd29ya190cmVlOworfQorCit2b2lkIHNldHVwX3dvcmtfdHJlZSh2b2lkKQoreworCWNvbnN0IGNoYXIgKndvcmtfdHJlZSwgKmdpdF9kaXI7CisJc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7CisKKwlpZiAoaW5pdGlhbGl6ZWQpCisJCXJldHVybjsKKworCWlmICh3b3JrX3RyZWVfY29uZmlnX2lzX2JvZ3VzKQorCQlkaWUoInVuYWJsZSB0byBzZXQgdXAgd29yayB0cmVlIHVzaW5nIGludmFsaWQgY29uZmlnIik7CisKKwl3b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpOworCWdpdF9kaXIgPSBnZXRfZ2l0X2RpcigpOworCWlmICghaXNfYWJzb2x1dGVfcGF0aChnaXRfZGlyKSkKKwkJZ2l0X2RpciA9IHJlYWxfcGF0aChnZXRfZ2l0X2RpcigpKTsKKwlpZiAoIXdvcmtfdHJlZSB8fCBjaGRpcih3b3JrX3RyZWUpKQorCQlkaWUoIlRoaXMgb3BlcmF0aW9uIG11c3QgYmUgcnVuIGluIGEgd29yayB0cmVlIik7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBzdWJzZXF1ZW50IGdpdCBwcm9jZXNzZXMgZmluZCBjb3JyZWN0IHdvcmt0cmVlCisJICogaWYgJEdJVF9XT1JLX1RSRUUgaXMgc2V0IHJlbGF0aXZlCisJICovCisJaWYgKGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKSkKKwkJc2V0ZW52KEdJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsICIuIiwgMSk7CisKKwlzZXRfZ2l0X2RpcihyZW1vdmVfbGVhZGluZ19wYXRoKGdpdF9kaXIsIHdvcmtfdHJlZSkpOworCWluaXRpYWxpemVkID0gMTsKK30KKworc3RhdGljIGludCBjaGVja19yZXBvX2Zvcm1hdChjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwljb25zdCBjaGFyICpleHQ7CisKKwlpZiAoc3RyY21wKHZhciwgImNvcmUucmVwb3NpdG9yeWZvcm1hdHZlcnNpb24iKSA9PSAwKQorCQlyZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uID0gZ2l0X2NvbmZpZ19pbnQodmFyLCB2YWx1ZSk7CisJZWxzZSBpZiAoc3RyY21wKHZhciwgImNvcmUuc2hhcmVkcmVwb3NpdG9yeSIpID09IDApCisJCXNoYXJlZF9yZXBvc2l0b3J5ID0gZ2l0X2NvbmZpZ19wZXJtKHZhciwgdmFsdWUpOworCWVsc2UgaWYgKHNraXBfcHJlZml4KHZhciwgImV4dGVuc2lvbnMuIiwgJmV4dCkpIHsKKwkJLyoKKwkJICogcmVjb3JkIGFueSBrbm93biBleHRlbnNpb25zIGhlcmU7IG90aGVyd2lzZSwKKwkJICogd2UgZmFsbCB0aHJvdWdoIHRvIHJlY29yZGluZyBpdCBhcyB1bmtub3duLCBhbmQKKwkJICogY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXQgd2lsbCBjb21wbGFpbgorCQkgKi8KKwkJaWYgKCFzdHJjbXAoZXh0LCAibm9vcCIpKQorCQkJOworCQllbHNlIGlmICghc3RyY21wKGV4dCwgInByZWNpb3Vzb2JqZWN0cyIpKQorCQkJcmVwb3NpdG9yeV9mb3JtYXRfcHJlY2lvdXNfb2JqZWN0cyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJZWxzZQorCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZ1bmtub3duX2V4dGVuc2lvbnMsIGV4dCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X2dlbnRseShjb25zdCBjaGFyICpnaXRkaXIsIGludCAqbm9uZ2l0X29rKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpyZXBvX2NvbmZpZzsKKwljb25maWdfZm5fdCBmbjsKKwlpbnQgcmV0ID0gMDsKKworCXN0cmluZ19saXN0X2NsZWFyKCZ1bmtub3duX2V4dGVuc2lvbnMsIDApOworCisJaWYgKGdldF9jb21tb25fZGlyKCZzYiwgZ2l0ZGlyKSkKKwkJZm4gPSBjaGVja19yZXBvX2Zvcm1hdDsKKwllbHNlCisJCWZuID0gY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbjsKKwlzdHJidWZfYWRkc3RyKCZzYiwgIi9jb25maWciKTsKKwlyZXBvX2NvbmZpZyA9IHNiLmJ1ZjsKKworCS8qCisJICogZ2l0X2NvbmZpZygpIGNhbid0IGJlIHVzZWQgaGVyZSBiZWNhdXNlIGl0IGNhbGxzIGdpdF9wYXRoZHVwKCkKKwkgKiB0byBnZXQgJEdJVF9DT05GSUcvY29uZmlnLiBUaGF0IGNhbGwgd2lsbCBtYWtlIHNldHVwX2dpdF9lbnYoKQorCSAqIHNldCBnaXRfZGlyIHRvICIuZ2l0Ii4KKwkgKgorCSAqIFdlIGFyZSBpbiBnaXRkaXIgc2V0dXAsIG5vIGdpdCBkaXIgaGFzIGJlZW4gZm91bmQgdXNlYWJsZSB5ZXQuCisJICogVXNlIGEgZ2VudGxlciB2ZXJzaW9uIG9mIGdpdF9jb25maWcoKSB0byBjaGVjayBpZiB0aGlzIHJlcG8KKwkgKiBpcyBhIGdvb2Qgb25lLgorCSAqLworCWdpdF9jb25maWdfZWFybHkoZm4sIE5VTEwsIHJlcG9fY29uZmlnKTsKKwlpZiAoR0lUX1JFUE9fVkVSU0lPTl9SRUFEIDwgcmVwb3NpdG9yeV9mb3JtYXRfdmVyc2lvbikgeworCQlpZiAoIW5vbmdpdF9vaykKKwkJCWRpZSAoIkV4cGVjdGVkIGdpdCByZXBvIHZlcnNpb24gPD0gJWQsIGZvdW5kICVkIiwKKwkJCSAgICAgR0lUX1JFUE9fVkVSU0lPTl9SRUFELCByZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uKTsKKwkJd2FybmluZygiRXhwZWN0ZWQgZ2l0IHJlcG8gdmVyc2lvbiA8PSAlZCwgZm91bmQgJWQiLAorCQkJR0lUX1JFUE9fVkVSU0lPTl9SRUFELCByZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uKTsKKwkJd2FybmluZygiUGxlYXNlIHVwZ3JhZGUgR2l0Iik7CisJCSpub25naXRfb2sgPSAtMTsKKwkJcmV0ID0gLTE7CisJfQorCisJaWYgKHJlcG9zaXRvcnlfZm9ybWF0X3ZlcnNpb24gPj0gMSAmJiB1bmtub3duX2V4dGVuc2lvbnMubnIpIHsKKwkJaW50IGk7CisKKwkJaWYgKCFub25naXRfb2spCisJCQlkaWUoInVua25vd24gcmVwb3NpdG9yeSBleHRlbnNpb246ICVzIiwKKwkJCSAgICB1bmtub3duX2V4dGVuc2lvbnMuaXRlbXNbMF0uc3RyaW5nKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgdW5rbm93bl9leHRlbnNpb25zLm5yOyBpKyspCisJCQl3YXJuaW5nKCJ1bmtub3duIHJlcG9zaXRvcnkgZXh0ZW5zaW9uOiAlcyIsCisJCQkJdW5rbm93bl9leHRlbnNpb25zLml0ZW1zW2ldLnN0cmluZyk7CisJCSpub25naXRfb2sgPSAtMTsKKwkJcmV0ID0gLTE7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfbGlua2VkX2dpdGRpcihjb25zdCBjaGFyICpnaXRmaWxlLCBjb25zdCBjaGFyICpnaXRkaXIpCit7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlzdHJidWZfYWRkZigmcGF0aCwgIiVzL2dpdGRpciIsIGdpdGRpcik7CisJaWYgKHN0YXQocGF0aC5idWYsICZzdCkgfHwgc3Quc3RfbXRpbWUgKyAyNCAqIDM2MDAgPCB0aW1lKE5VTEwpKQorCQl3cml0ZV9maWxlKHBhdGguYnVmLCAiJXMiLCBnaXRmaWxlKTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7Cit9CisKKy8qCisgKiBUcnkgdG8gcmVhZCB0aGUgbG9jYXRpb24gb2YgdGhlIGdpdCBkaXJlY3RvcnkgZnJvbSB0aGUgLmdpdCBmaWxlLAorICogcmV0dXJuIHBhdGggdG8gZ2l0IGRpcmVjdG9yeSBpZiBmb3VuZC4KKyAqCisgKiBPbiBmYWlsdXJlLCBpZiByZXR1cm5fZXJyb3JfY29kZSBpcyBub3QgTlVMTCwgcmV0dXJuX2Vycm9yX2NvZGUKKyAqIHdpbGwgYmUgc2V0IHRvIGFuIGVycm9yIGNvZGUgYW5kIE5VTEwgd2lsbCBiZSByZXR1cm5lZC4gSWYKKyAqIHJldHVybl9lcnJvcl9jb2RlIGlzIE5VTEwgdGhlIGZ1bmN0aW9uIHdpbGwgZGllIGluc3RlYWQgKGZvciBtb3N0CisgKiBjYXNlcykuCisgKi8KK2NvbnN0IGNoYXIgKnJlYWRfZ2l0ZmlsZV9nZW50bHkoY29uc3QgY2hhciAqcGF0aCwgaW50ICpyZXR1cm5fZXJyb3JfY29kZSkKK3sKKwljb25zdCBpbnQgbWF4X2ZpbGVfc2l6ZSA9IDEgPDwgMjA7ICAvKiAxTUIgKi8KKwlpbnQgZXJyb3JfY29kZSA9IDA7CisJY2hhciAqYnVmID0gTlVMTDsKKwljaGFyICpkaXIgPSBOVUxMOworCWNvbnN0IGNoYXIgKnNsYXNoOworCXN0cnVjdCBzdGF0IHN0OworCWludCBmZDsKKwlzc2l6ZV90IGxlbjsKKworCWlmIChzdGF0KHBhdGgsICZzdCkpIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfU1RBVF9GQUlMRUQ7CisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisJfQorCWlmICghU19JU1JFRyhzdC5zdF9tb2RlKSkgeworCQllcnJvcl9jb2RlID0gUkVBRF9HSVRGSUxFX0VSUl9OT1RfQV9GSUxFOworCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCX0KKwlpZiAoc3Quc3Rfc2l6ZSA+IG1heF9maWxlX3NpemUpIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfVE9PX0xBUkdFOworCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCX0KKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA8IDApIHsKKwkJZXJyb3JfY29kZSA9IFJFQURfR0lURklMRV9FUlJfT1BFTl9GQUlMRUQ7CisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisJfQorCWJ1ZiA9IHhtYWxsb2Moc3Quc3Rfc2l6ZSArIDEpOworCWxlbiA9IHJlYWRfaW5fZnVsbChmZCwgYnVmLCBzdC5zdF9zaXplKTsKKwljbG9zZShmZCk7CisJaWYgKGxlbiAhPSBzdC5zdF9zaXplKSB7CisJCWVycm9yX2NvZGUgPSBSRUFEX0dJVEZJTEVfRVJSX1JFQURfRkFJTEVEOworCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCX0KKwlidWZbbGVuXSA9ICdcMCc7CisJaWYgKCFzdGFydHNfd2l0aChidWYsICJnaXRkaXI6ICIpKSB7CisJCWVycm9yX2NvZGUgPSBSRUFEX0dJVEZJTEVfRVJSX0lOVkFMSURfRk9STUFUOworCQlnb3RvIGNsZWFudXBfcmV0dXJuOworCX0KKwl3aGlsZSAoYnVmW2xlbiAtIDFdID09ICdcbicgfHwgYnVmW2xlbiAtIDFdID09ICdccicpCisJCWxlbi0tOworCWlmIChsZW4gPCA5KSB7CisJCWVycm9yX2NvZGUgPSBSRUFEX0dJVEZJTEVfRVJSX05PX1BBVEg7CisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisJfQorCWJ1ZltsZW5dID0gJ1wwJzsKKwlkaXIgPSBidWYgKyA4OworCisJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGRpcikgJiYgKHNsYXNoID0gc3RycmNocihwYXRoLCAnLycpKSkgeworCQlzaXplX3QgcGF0aGxlbiA9IHNsYXNoKzEgLSBwYXRoOworCQlkaXIgPSB4c3RyZm10KCIlLipzJS4qcyIsIChpbnQpcGF0aGxlbiwgcGF0aCwKKwkJCSAgICAgIChpbnQpKGxlbiAtIDgpLCBidWYgKyA4KTsKKwkJZnJlZShidWYpOworCQlidWYgPSBkaXI7CisJfQorCWlmICghaXNfZ2l0X2RpcmVjdG9yeShkaXIpKSB7CisJCWVycm9yX2NvZGUgPSBSRUFEX0dJVEZJTEVfRVJSX05PVF9BX1JFUE87CisJCWdvdG8gY2xlYW51cF9yZXR1cm47CisJfQorCXVwZGF0ZV9saW5rZWRfZ2l0ZGlyKHBhdGgsIGRpcik7CisJcGF0aCA9IHJlYWxfcGF0aChkaXIpOworCitjbGVhbnVwX3JldHVybjoKKwlpZiAocmV0dXJuX2Vycm9yX2NvZGUpCisJCSpyZXR1cm5fZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisJZWxzZSBpZiAoZXJyb3JfY29kZSkgeworCQlzd2l0Y2ggKGVycm9yX2NvZGUpIHsKKwkJY2FzZSBSRUFEX0dJVEZJTEVfRVJSX1NUQVRfRkFJTEVEOgorCQljYXNlIFJFQURfR0lURklMRV9FUlJfTk9UX0FfRklMRToKKwkJCS8qIG5vbi1mYXRhbDsgZm9sbG93IHJldHVybiBwYXRoICovCisJCQlicmVhazsKKwkJY2FzZSBSRUFEX0dJVEZJTEVfRVJSX09QRU5fRkFJTEVEOgorCQkJZGllX2Vycm5vKCJFcnJvciBvcGVuaW5nICclcyciLCBwYXRoKTsKKwkJY2FzZSBSRUFEX0dJVEZJTEVfRVJSX1RPT19MQVJHRToKKwkJCWRpZSgiVG9vIGxhcmdlIHRvIGJlIGEgLmdpdCBmaWxlOiAnJXMnIiwgcGF0aCk7CisJCWNhc2UgUkVBRF9HSVRGSUxFX0VSUl9SRUFEX0ZBSUxFRDoKKwkJCWRpZSgiRXJyb3IgcmVhZGluZyAlcyIsIHBhdGgpOworCQljYXNlIFJFQURfR0lURklMRV9FUlJfSU5WQUxJRF9GT1JNQVQ6CisJCQlkaWUoIkludmFsaWQgZ2l0ZmlsZSBmb3JtYXQ6ICVzIiwgcGF0aCk7CisJCWNhc2UgUkVBRF9HSVRGSUxFX0VSUl9OT19QQVRIOgorCQkJZGllKCJObyBwYXRoIGluIGdpdGZpbGU6ICVzIiwgcGF0aCk7CisJCWNhc2UgUkVBRF9HSVRGSUxFX0VSUl9OT1RfQV9SRVBPOgorCQkJZGllKCJOb3QgYSBnaXQgcmVwb3NpdG9yeTogJXMiLCBkaXIpOworCQlkZWZhdWx0OgorCQkJYXNzZXJ0KDApOworCQl9CisJfQorCisJZnJlZShidWYpOworCXJldHVybiBlcnJvcl9jb2RlID8gTlVMTCA6IHBhdGg7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzZXR1cF9leHBsaWNpdF9naXRfZGlyKGNvbnN0IGNoYXIgKmdpdGRpcmVudiwKKwkJCQkJICBzdHJ1Y3Qgc3RyYnVmICpjd2QsCisJCQkJCSAgaW50ICpub25naXRfb2spCit7CisJY29uc3QgY2hhciAqd29ya190cmVlX2VudiA9IGdldGVudihHSVRfV09SS19UUkVFX0VOVklST05NRU5UKTsKKwljb25zdCBjaGFyICp3b3JrdHJlZTsKKwljaGFyICpnaXRmaWxlOworCWludCBvZmZzZXQ7CisKKwlpZiAoUEFUSF9NQVggLSA0MCA8IHN0cmxlbihnaXRkaXJlbnYpKQorCQlkaWUoIickJXMnIHRvbyBiaWciLCBHSVRfRElSX0VOVklST05NRU5UKTsKKworCWdpdGZpbGUgPSAoY2hhciopcmVhZF9naXRmaWxlKGdpdGRpcmVudik7CisJaWYgKGdpdGZpbGUpIHsKKwkJZ2l0ZmlsZSA9IHhzdHJkdXAoZ2l0ZmlsZSk7CisJCWdpdGRpcmVudiA9IGdpdGZpbGU7CisJfQorCisJaWYgKCFpc19naXRfZGlyZWN0b3J5KGdpdGRpcmVudikpIHsKKwkJaWYgKG5vbmdpdF9vaykgeworCQkJKm5vbmdpdF9vayA9IDE7CisJCQlmcmVlKGdpdGZpbGUpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJZGllKCJOb3QgYSBnaXQgcmVwb3NpdG9yeTogJyVzJyIsIGdpdGRpcmVudik7CisJfQorCisJaWYgKGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X2dlbnRseShnaXRkaXJlbnYsIG5vbmdpdF9vaykpIHsKKwkJZnJlZShnaXRmaWxlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogIzMsICM3LCAjMTEsICMxNSwgIzE5LCAjMjMsICMyNywgIzMxIChzZWUgdDE1MTApICovCisJaWYgKHdvcmtfdHJlZV9lbnYpCisJCXNldF9naXRfd29ya190cmVlKHdvcmtfdHJlZV9lbnYpOworCWVsc2UgaWYgKGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPiAwKSB7CisJCWlmIChnaXRfd29ya190cmVlX2NmZykgeworCQkJLyogIzIyLjIsICMzMCAqLworCQkJd2FybmluZygiY29yZS5iYXJlIGFuZCBjb3JlLndvcmt0cmVlIGRvIG5vdCBtYWtlIHNlbnNlIik7CisJCQl3b3JrX3RyZWVfY29uZmlnX2lzX2JvZ3VzID0gMTsKKwkJfQorCisJCS8qICMxOCwgIzI2ICovCisJCXNldF9naXRfZGlyKGdpdGRpcmVudik7CisJCWZyZWUoZ2l0ZmlsZSk7CisJCXJldHVybiBOVUxMOworCX0KKwllbHNlIGlmIChnaXRfd29ya190cmVlX2NmZykgeyAvKiAjNiwgIzE0ICovCisJCWlmIChpc19hYnNvbHV0ZV9wYXRoKGdpdF93b3JrX3RyZWVfY2ZnKSkKKwkJCXNldF9naXRfd29ya190cmVlKGdpdF93b3JrX3RyZWVfY2ZnKTsKKwkJZWxzZSB7CisJCQljaGFyICpjb3JlX3dvcmt0cmVlOworCQkJaWYgKGNoZGlyKGdpdGRpcmVudikpCisJCQkJZGllX2Vycm5vKCJDb3VsZCBub3QgY2hkaXIgdG8gJyVzJyIsIGdpdGRpcmVudik7CisJCQlpZiAoY2hkaXIoZ2l0X3dvcmtfdHJlZV9jZmcpKQorCQkJCWRpZV9lcnJubygiQ291bGQgbm90IGNoZGlyIHRvICclcyciLCBnaXRfd29ya190cmVlX2NmZyk7CisJCQljb3JlX3dvcmt0cmVlID0geGdldGN3ZCgpOworCQkJaWYgKGNoZGlyKGN3ZC0+YnVmKSkKKwkJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBjb21lIGJhY2sgdG8gY3dkIik7CisJCQlzZXRfZ2l0X3dvcmtfdHJlZShjb3JlX3dvcmt0cmVlKTsKKwkJCWZyZWUoY29yZV93b3JrdHJlZSk7CisJCX0KKwl9CisJZWxzZSBpZiAoIWdpdF9lbnZfYm9vbChHSVRfSU1QTElDSVRfV09SS19UUkVFX0VOVklST05NRU5ULCAxKSkgeworCQkvKiAjMTZkICovCisJCXNldF9naXRfZGlyKGdpdGRpcmVudik7CisJCWZyZWUoZ2l0ZmlsZSk7CisJCXJldHVybiBOVUxMOworCX0KKwllbHNlIC8qICMyLCAjMTAgKi8KKwkJc2V0X2dpdF93b3JrX3RyZWUoIi4iKTsKKworCS8qIHNldF9naXRfd29ya190cmVlKCkgbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGJ5IG5vdyAqLworCXdvcmt0cmVlID0gZ2V0X2dpdF93b3JrX3RyZWUoKTsKKworCS8qIGJvdGggZ2V0X2dpdF93b3JrX3RyZWUoKSBhbmQgY3dkIGFyZSBhbHJlYWR5IG5vcm1hbGl6ZWQgKi8KKwlpZiAoIXN0cmNtcChjd2QtPmJ1Ziwgd29ya3RyZWUpKSB7IC8qIGN3ZCA9PSB3b3JrdHJlZSAqLworCQlzZXRfZ2l0X2RpcihnaXRkaXJlbnYpOworCQlmcmVlKGdpdGZpbGUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlvZmZzZXQgPSBkaXJfaW5zaWRlX29mKGN3ZC0+YnVmLCB3b3JrdHJlZSk7CisJaWYgKG9mZnNldCA+PSAwKSB7CS8qIGN3ZCBpbnNpZGUgd29ya3RyZWU/ICovCisJCXNldF9naXRfZGlyKHJlYWxfcGF0aChnaXRkaXJlbnYpKTsKKwkJaWYgKGNoZGlyKHdvcmt0cmVlKSkKKwkJCWRpZV9lcnJubygiQ291bGQgbm90IGNoZGlyIHRvICclcyciLCB3b3JrdHJlZSk7CisJCXN0cmJ1Zl9hZGRjaChjd2QsICcvJyk7CisJCWZyZWUoZ2l0ZmlsZSk7CisJCXJldHVybiBjd2QtPmJ1ZiArIG9mZnNldDsKKwl9CisKKwkvKiBjd2Qgb3V0c2lkZSB3b3JrdHJlZSAqLworCXNldF9naXRfZGlyKGdpdGRpcmVudik7CisJZnJlZShnaXRmaWxlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX2Rpc2NvdmVyZWRfZ2l0X2Rpcihjb25zdCBjaGFyICpnaXRkaXIsCisJCQkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpjd2QsIGludCBvZmZzZXQsCisJCQkJCSAgICBpbnQgKm5vbmdpdF9vaykKK3sKKwlpZiAoY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfZ2VudGx5KGdpdGRpciwgbm9uZ2l0X29rKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiAtLXdvcmstdHJlZSBpcyBzZXQgd2l0aG91dCAtLWdpdC1kaXI7IHVzZSBkaXNjb3ZlcmVkIG9uZSAqLworCWlmIChnZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCkgfHwgZ2l0X3dvcmtfdHJlZV9jZmcpIHsKKwkJaWYgKG9mZnNldCAhPSBjd2QtPmxlbiAmJiAhaXNfYWJzb2x1dGVfcGF0aChnaXRkaXIpKQorCQkJZ2l0ZGlyID0geHN0cmR1cChyZWFsX3BhdGgoZ2l0ZGlyKSk7CisJCWlmIChjaGRpcihjd2QtPmJ1ZikpCisJCQlkaWVfZXJybm8oIkNvdWxkIG5vdCBjb21lIGJhY2sgdG8gY3dkIik7CisJCXJldHVybiBzZXR1cF9leHBsaWNpdF9naXRfZGlyKGdpdGRpciwgY3dkLCBub25naXRfb2spOworCX0KKworCS8qICMxNi4yLCAjMTcuMiwgIzIwLjIsICMyMS4yLCAjMjQsICMyNSwgIzI4LCAjMjkgKHNlZSB0MTUxMCkgKi8KKwlpZiAoaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA+IDApIHsKKwkJc2V0X2dpdF9kaXIob2Zmc2V0ID09IGN3ZC0+bGVuID8gZ2l0ZGlyIDogcmVhbF9wYXRoKGdpdGRpcikpOworCQlpZiAoY2hkaXIoY3dkLT5idWYpKQorCQkJZGllX2Vycm5vKCJDb3VsZCBub3QgY29tZSBiYWNrIHRvIGN3ZCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiAjMCwgIzEsICM1LCAjOCwgIzksICMxMiwgIzEzICovCisJc2V0X2dpdF93b3JrX3RyZWUoIi4iKTsKKwlpZiAoc3RyY21wKGdpdGRpciwgREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKSkKKwkJc2V0X2dpdF9kaXIoZ2l0ZGlyKTsKKwlpbnNpZGVfZ2l0X2RpciA9IDA7CisJaW5zaWRlX3dvcmtfdHJlZSA9IDE7CisJaWYgKG9mZnNldCA9PSBjd2QtPmxlbikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBNYWtlICJvZmZzZXQiIHBvaW50IHRvIHBhc3QgdGhlICcvJywgYW5kIGFkZCBhICcvJyBhdCB0aGUgZW5kICovCisJb2Zmc2V0Kys7CisJc3RyYnVmX2FkZGNoKGN3ZCwgJy8nKTsKKwlyZXR1cm4gY3dkLT5idWYgKyBvZmZzZXQ7Cit9CisKKy8qICMxNi4xLCAjMTcuMSwgIzIwLjEsICMyMS4xLCAjMjIuMSAoc2VlIHQxNTEwKSAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX2JhcmVfZ2l0X2RpcihzdHJ1Y3Qgc3RyYnVmICpjd2QsIGludCBvZmZzZXQsCisJCQkJICAgICAgaW50ICpub25naXRfb2spCit7CisJaW50IHJvb3RfbGVuOworCisJaWYgKGNoZWNrX3JlcG9zaXRvcnlfZm9ybWF0X2dlbnRseSgiLiIsIG5vbmdpdF9vaykpCisJCXJldHVybiBOVUxMOworCisJc2V0ZW52KEdJVF9JTVBMSUNJVF9XT1JLX1RSRUVfRU5WSVJPTk1FTlQsICIwIiwgMSk7CisKKwkvKiAtLXdvcmstdHJlZSBpcyBzZXQgd2l0aG91dCAtLWdpdC1kaXI7IHVzZSBkaXNjb3ZlcmVkIG9uZSAqLworCWlmIChnZXRlbnYoR0lUX1dPUktfVFJFRV9FTlZJUk9OTUVOVCkgfHwgZ2l0X3dvcmtfdHJlZV9jZmcpIHsKKwkJY29uc3QgY2hhciAqZ2l0ZGlyOworCisJCWdpdGRpciA9IG9mZnNldCA9PSBjd2QtPmxlbiA/ICIuIiA6IHhtZW1kdXB6KGN3ZC0+YnVmLCBvZmZzZXQpOworCQlpZiAoY2hkaXIoY3dkLT5idWYpKQorCQkJZGllX2Vycm5vKCJDb3VsZCBub3QgY29tZSBiYWNrIHRvIGN3ZCIpOworCQlyZXR1cm4gc2V0dXBfZXhwbGljaXRfZ2l0X2RpcihnaXRkaXIsIGN3ZCwgbm9uZ2l0X29rKTsKKwl9CisKKwlpbnNpZGVfZ2l0X2RpciA9IDE7CisJaW5zaWRlX3dvcmtfdHJlZSA9IDA7CisJaWYgKG9mZnNldCAhPSBjd2QtPmxlbikgeworCQlpZiAoY2hkaXIoY3dkLT5idWYpKQorCQkJZGllX2Vycm5vKCJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpOworCQlyb290X2xlbiA9IG9mZnNldF8xc3RfY29tcG9uZW50KGN3ZC0+YnVmKTsKKwkJc3RyYnVmX3NldGxlbihjd2QsIG9mZnNldCA+IHJvb3RfbGVuID8gb2Zmc2V0IDogcm9vdF9sZW4pOworCQlzZXRfZ2l0X2Rpcihjd2QtPmJ1Zik7CisJfQorCWVsc2UKKwkJc2V0X2dpdF9kaXIoIi4iKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX25vbmdpdChjb25zdCBjaGFyICpjd2QsIGludCAqbm9uZ2l0X29rKQoreworCWlmICghbm9uZ2l0X29rKQorCQlkaWUoIk5vdCBhIGdpdCByZXBvc2l0b3J5IChvciBhbnkgb2YgdGhlIHBhcmVudCBkaXJlY3Rvcmllcyk6ICVzIiwgREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKTsKKwlpZiAoY2hkaXIoY3dkKSkKKwkJZGllX2Vycm5vKCJDYW5ub3QgY29tZSBiYWNrIHRvIGN3ZCIpOworCSpub25naXRfb2sgPSAxOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgZGV2X3QgZ2V0X2RldmljZV9vcl9kaWUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgcHJlZml4X2xlbikKK3sKKwlzdHJ1Y3Qgc3RhdCBidWY7CisJaWYgKHN0YXQocGF0aCwgJmJ1ZikpIHsKKwkJZGllX2Vycm5vKCJmYWlsZWQgdG8gc3RhdCAnJSpzJXMlcyciLAorCQkJCXByZWZpeF9sZW4sCisJCQkJcHJlZml4ID8gcHJlZml4IDogIiIsCisJCQkJcHJlZml4ID8gIi8iIDogIiIsIHBhdGgpOworCX0KKwlyZXR1cm4gYnVmLnN0X2RldjsKK30KKworLyoKKyAqIEEgInN0cmluZ19saXN0X2VhY2hfZnVuY190IiBmdW5jdGlvbiB0aGF0IGNhbm9uaWNhbGl6ZXMgYW4gZW50cnkKKyAqIGZyb20gR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgdXNpbmcgcmVhbF9wYXRoX2lmX3ZhbGlkKCksIG9yCisgKiBkaXNjYXJkcyBpdCBpZiB1bnVzYWJsZS4gIFRoZSBwcmVzZW5jZSBvZiBhbiBlbXB0eSBlbnRyeSBpbgorICogR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgdHVybnMgb2ZmIGNhbm9uaWNhbGl6YXRpb24gZm9yIGFsbAorICogc3Vic2VxdWVudCBlbnRyaWVzLgorICovCitzdGF0aWMgaW50IGNhbm9uaWNhbGl6ZV9jZWlsaW5nX2VudHJ5KHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLAorCQkJCSAgICAgIHZvaWQgKmNiX2RhdGEpCit7CisJaW50ICplbXB0eV9lbnRyeV9mb3VuZCA9IGNiX2RhdGE7CisJY2hhciAqY2VpbCA9IGl0ZW0tPnN0cmluZzsKKworCWlmICghKmNlaWwpIHsKKwkJKmVtcHR5X2VudHJ5X2ZvdW5kID0gMTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghaXNfYWJzb2x1dGVfcGF0aChjZWlsKSkgeworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCplbXB0eV9lbnRyeV9mb3VuZCkgeworCQkvKiBLZWVwIGVudHJ5IGJ1dCBkbyBub3QgY2Fub25pY2FsaXplIGl0ICovCisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKnJlYWxfcGF0aCA9IHJlYWxfcGF0aF9pZl92YWxpZChjZWlsKTsKKwkJaWYgKCFyZWFsX3BhdGgpCisJCQlyZXR1cm4gMDsKKwkJZnJlZShpdGVtLT5zdHJpbmcpOworCQlpdGVtLT5zdHJpbmcgPSB4c3RyZHVwKHJlYWxfcGF0aCk7CisJCXJldHVybiAxOworCX0KK30KKworLyoKKyAqIFdlIGNhbm5vdCBkZWNpZGUgaW4gdGhpcyBmdW5jdGlvbiB3aGV0aGVyIHdlIGFyZSBpbiB0aGUgd29yayB0cmVlIG9yCisgKiBub3QsIHNpbmNlIHRoZSBjb25maWcgY2FuIG9ubHkgYmUgcmVhZCBfYWZ0ZXJfIHRoaXMgZnVuY3Rpb24gd2FzIGNhbGxlZC4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5XzEoaW50ICpub25naXRfb2spCit7CisJY29uc3QgY2hhciAqZW52X2NlaWxpbmdfZGlycyA9IGdldGVudihDRUlMSU5HX0RJUkVDVE9SSUVTX0VOVklST05NRU5UKTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgY2VpbGluZ19kaXJzID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgY3dkID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqZ2l0ZGlyZW52LCAqcmV0OworCWNoYXIgKmdpdGZpbGU7CisJaW50IG9mZnNldCwgb2Zmc2V0X3BhcmVudCwgY2VpbF9vZmZzZXQgPSAtMTsKKwlkZXZfdCBjdXJyZW50X2RldmljZSA9IDA7CisJaW50IG9uZV9maWxlc3lzdGVtID0gMTsKKworCS8qCisJICogV2UgbWF5IGhhdmUgcmVhZCBhbiBpbmNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gYmVmb3JlCisJICogc2V0dGluZy11cCB0aGUgZ2l0IGRpcmVjdG9yeS4gSWYgc28sIGNsZWFyIHRoZSBjYWNoZSBzbworCSAqIHRoYXQgdGhlIG5leHQgcXVlcmllcyB0byB0aGUgY29uZmlndXJhdGlvbiByZWxvYWQgY29tcGxldGUKKwkgKiBjb25maWd1cmF0aW9uIChpbmNsdWRpbmcgdGhlIHBlci1yZXBvIGNvbmZpZyBmaWxlIHRoYXQgd2UKKwkgKiBpZ25vcmVkIHByZXZpb3VzbHkpLgorCSAqLworCWdpdF9jb25maWdfY2xlYXIoKTsKKworCS8qCisJICogTGV0J3MgYXNzdW1lIHRoYXQgd2UgYXJlIGluIGEgZ2l0IHJlcG9zaXRvcnkuCisJICogSWYgaXQgdHVybnMgb3V0IGxhdGVyIHRoYXQgd2UgYXJlIHNvbWV3aGVyZSBlbHNlLCB0aGUgdmFsdWUgd2lsbCBiZQorCSAqIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCisJICovCisJaWYgKG5vbmdpdF9vaykKKwkJKm5vbmdpdF9vayA9IDA7CisKKwlpZiAoc3RyYnVmX2dldGN3ZCgmY3dkKSkKKwkJZGllX2Vycm5vKCJVbmFibGUgdG8gcmVhZCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Iik7CisJb2Zmc2V0ID0gY3dkLmxlbjsKKworCS8qCisJICogSWYgR0lUX0RJUiBpcyBzZXQgZXhwbGljaXRseSwgd2UncmUgbm90IGdvaW5nCisJICogdG8gZG8gYW55IGRpc2NvdmVyeSwgYnV0IHdlIHN0aWxsIGRvIHJlcG9zaXRvcnkKKwkgKiB2YWxpZGF0aW9uLgorCSAqLworCWdpdGRpcmVudiA9IGdldGVudihHSVRfRElSX0VOVklST05NRU5UKTsKKwlpZiAoZ2l0ZGlyZW52KQorCQlyZXR1cm4gc2V0dXBfZXhwbGljaXRfZ2l0X2RpcihnaXRkaXJlbnYsICZjd2QsIG5vbmdpdF9vayk7CisKKwlpZiAoZW52X2NlaWxpbmdfZGlycykgeworCQlpbnQgZW1wdHlfZW50cnlfZm91bmQgPSAwOworCisJCXN0cmluZ19saXN0X3NwbGl0KCZjZWlsaW5nX2RpcnMsIGVudl9jZWlsaW5nX2RpcnMsIFBBVEhfU0VQLCAtMSk7CisJCWZpbHRlcl9zdHJpbmdfbGlzdCgmY2VpbGluZ19kaXJzLCAwLAorCQkJCSAgIGNhbm9uaWNhbGl6ZV9jZWlsaW5nX2VudHJ5LCAmZW1wdHlfZW50cnlfZm91bmQpOworCQljZWlsX29mZnNldCA9IGxvbmdlc3RfYW5jZXN0b3JfbGVuZ3RoKGN3ZC5idWYsICZjZWlsaW5nX2RpcnMpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmY2VpbGluZ19kaXJzLCAwKTsKKwl9CisKKwlpZiAoY2VpbF9vZmZzZXQgPCAwICYmIGhhc19kb3NfZHJpdmVfcHJlZml4KGN3ZC5idWYpKQorCQljZWlsX29mZnNldCA9IDE7CisKKwkvKgorCSAqIFRlc3QgaW4gdGhlIGZvbGxvd2luZyBvcmRlciAocmVsYXRpdmUgdG8gdGhlIGN3ZCk6CisJICogLSAuZ2l0IChmaWxlIGNvbnRhaW5pbmcgImdpdGRpcjogPHBhdGg+IikKKwkgKiAtIC5naXQvCisJICogLSAuLyAoYmFyZSkKKwkgKiAtIC4uLy5naXQKKwkgKiAtIC4uLy5naXQvCisJICogLSAuLi8gKGJhcmUpCisJICogLSAuLi8uLi8uZ2l0LworCSAqICAgZXRjLgorCSAqLworCW9uZV9maWxlc3lzdGVtID0gIWdpdF9lbnZfYm9vbCgiR0lUX0RJU0NPVkVSWV9BQ1JPU1NfRklMRVNZU1RFTSIsIDApOworCWlmIChvbmVfZmlsZXN5c3RlbSkKKwkJY3VycmVudF9kZXZpY2UgPSBnZXRfZGV2aWNlX29yX2RpZSgiLiIsIE5VTEwsIDApOworCWZvciAoOzspIHsKKwkJZ2l0ZmlsZSA9IChjaGFyKilyZWFkX2dpdGZpbGUoREVGQVVMVF9HSVRfRElSX0VOVklST05NRU5UKTsKKwkJaWYgKGdpdGZpbGUpCisJCQlnaXRkaXJlbnYgPSBnaXRmaWxlID0geHN0cmR1cChnaXRmaWxlKTsKKwkJZWxzZSB7CisJCQlpZiAoaXNfZ2l0X2RpcmVjdG9yeShERUZBVUxUX0dJVF9ESVJfRU5WSVJPTk1FTlQpKQorCQkJCWdpdGRpcmVudiA9IERFRkFVTFRfR0lUX0RJUl9FTlZJUk9OTUVOVDsKKwkJfQorCisJCWlmIChnaXRkaXJlbnYpIHsKKwkJCXJldCA9IHNldHVwX2Rpc2NvdmVyZWRfZ2l0X2RpcihnaXRkaXJlbnYsCisJCQkJCQkgICAgICAgJmN3ZCwgb2Zmc2V0LAorCQkJCQkJICAgICAgIG5vbmdpdF9vayk7CisJCQlmcmVlKGdpdGZpbGUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlmcmVlKGdpdGZpbGUpOworCisJCWlmIChpc19naXRfZGlyZWN0b3J5KCIuIikpCisJCQlyZXR1cm4gc2V0dXBfYmFyZV9naXRfZGlyKCZjd2QsIG9mZnNldCwgbm9uZ2l0X29rKTsKKworCQlvZmZzZXRfcGFyZW50ID0gb2Zmc2V0OworCQl3aGlsZSAoLS1vZmZzZXRfcGFyZW50ID4gY2VpbF9vZmZzZXQgJiYgY3dkLmJ1ZltvZmZzZXRfcGFyZW50XSAhPSAnLycpOworCQlpZiAob2Zmc2V0X3BhcmVudCA8PSBjZWlsX29mZnNldCkKKwkJCXJldHVybiBzZXR1cF9ub25naXQoY3dkLmJ1Ziwgbm9uZ2l0X29rKTsKKwkJaWYgKG9uZV9maWxlc3lzdGVtKSB7CisJCQlkZXZfdCBwYXJlbnRfZGV2aWNlID0gZ2V0X2RldmljZV9vcl9kaWUoIi4uIiwgY3dkLmJ1ZiwKKwkJCQkJCQkJb2Zmc2V0KTsKKwkJCWlmIChwYXJlbnRfZGV2aWNlICE9IGN1cnJlbnRfZGV2aWNlKSB7CisJCQkJaWYgKG5vbmdpdF9vaykgeworCQkJCQlpZiAoY2hkaXIoY3dkLmJ1ZikpCisJCQkJCQlkaWVfZXJybm8oIkNhbm5vdCBjb21lIGJhY2sgdG8gY3dkIik7CisJCQkJCSpub25naXRfb2sgPSAxOworCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQl9CisJCQkJc3RyYnVmX3NldGxlbigmY3dkLCBvZmZzZXQpOworCQkJCWRpZSgiTm90IGEgZ2l0IHJlcG9zaXRvcnkgKG9yIGFueSBwYXJlbnQgdXAgdG8gbW91bnQgcG9pbnQgJXMpXG4iCisJCQkJIlN0b3BwaW5nIGF0IGZpbGVzeXN0ZW0gYm91bmRhcnkgKEdJVF9ESVNDT1ZFUllfQUNST1NTX0ZJTEVTWVNURU0gbm90IHNldCkuIiwKKwkJCQkgICAgY3dkLmJ1Zik7CisJCQl9CisJCX0KKwkJaWYgKGNoZGlyKCIuLiIpKSB7CisJCQlzdHJidWZfc2V0bGVuKCZjd2QsIG9mZnNldCk7CisJCQlkaWVfZXJybm8oIkNhbm5vdCBjaGFuZ2UgdG8gJyVzLy4uJyIsIGN3ZC5idWYpOworCQl9CisJCW9mZnNldCA9IG9mZnNldF9wYXJlbnQ7CisJfQorfQorCitjb25zdCBjaGFyICpzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseShpbnQgKm5vbmdpdF9vaykKK3sKKwljb25zdCBjaGFyICpwcmVmaXg7CisKKwlwcmVmaXggPSBzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseV8xKG5vbmdpdF9vayk7CisJaWYgKHByZWZpeCkKKwkJc2V0ZW52KEdJVF9QUkVGSVhfRU5WSVJPTk1FTlQsIHByZWZpeCwgMSk7CisJZWxzZQorCQlzZXRlbnYoR0lUX1BSRUZJWF9FTlZJUk9OTUVOVCwgIiIsIDEpOworCisJaWYgKHN0YXJ0dXBfaW5mbykgeworCQlzdGFydHVwX2luZm8tPmhhdmVfcmVwb3NpdG9yeSA9ICFub25naXRfb2sgfHwgISpub25naXRfb2s7CisJCXN0YXJ0dXBfaW5mby0+cHJlZml4ID0gcHJlZml4OworCX0KKwlyZXR1cm4gcHJlZml4OworfQorCitpbnQgZ2l0X2NvbmZpZ19wZXJtKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaW50IGk7CisJY2hhciAqZW5kcHRyOworCisJaWYgKHZhbHVlID09IE5VTEwpCisJCXJldHVybiBQRVJNX0dST1VQOworCisJaWYgKCFzdHJjbXAodmFsdWUsICJ1bWFzayIpKQorCQlyZXR1cm4gUEVSTV9VTUFTSzsKKwlpZiAoIXN0cmNtcCh2YWx1ZSwgImdyb3VwIikpCisJCXJldHVybiBQRVJNX0dST1VQOworCWlmICghc3RyY21wKHZhbHVlLCAiYWxsIikgfHwKKwkgICAgIXN0cmNtcCh2YWx1ZSwgIndvcmxkIikgfHwKKwkgICAgIXN0cmNtcCh2YWx1ZSwgImV2ZXJ5Ym9keSIpKQorCQlyZXR1cm4gUEVSTV9FVkVSWUJPRFk7CisKKwkvKiBQYXJzZSBvY3RhbCBudW1iZXJzICovCisJaSA9IHN0cnRvbCh2YWx1ZSwgJmVuZHB0ciwgOCk7CisKKwkvKiBJZiBub3QgYW4gb2N0YWwgbnVtYmVyLCBtYXliZSB0cnVlL2ZhbHNlPyAqLworCWlmICgqZW5kcHRyICE9IDApCisJCXJldHVybiBnaXRfY29uZmlnX2Jvb2wodmFyLCB2YWx1ZSkgPyBQRVJNX0dST1VQIDogUEVSTV9VTUFTSzsKKworCS8qCisJICogVHJlYXQgdmFsdWVzIDAsIDEgYW5kIDIgYXMgY29tcGF0aWJpbGl0eSBjYXNlcywgb3RoZXJ3aXNlIGl0IGlzCisJICogYSBjaG1vZCB2YWx1ZSB0byByZXN0cmljdCB0by4KKwkgKi8KKwlzd2l0Y2ggKGkpIHsKKwljYXNlIFBFUk1fVU1BU0s6ICAgICAgICAgICAgICAgLyogMCAqLworCQlyZXR1cm4gUEVSTV9VTUFTSzsKKwljYXNlIE9MRF9QRVJNX0dST1VQOiAgICAgICAgICAgLyogMSAqLworCQlyZXR1cm4gUEVSTV9HUk9VUDsKKwljYXNlIE9MRF9QRVJNX0VWRVJZQk9EWTogICAgICAgLyogMiAqLworCQlyZXR1cm4gUEVSTV9FVkVSWUJPRFk7CisJfQorCisJLyogQSBmaWxlbW9kZSB2YWx1ZSB3YXMgZ2l2ZW46IDB4eHggKi8KKworCWlmICgoaSAmIDA2MDApICE9IDA2MDApCisJCWRpZSgiUHJvYmxlbSB3aXRoIGNvcmUuc2hhcmVkUmVwb3NpdG9yeSBmaWxlbW9kZSB2YWx1ZSAiCisJCSAgICAiKDAlLjNvKS5cblRoZSBvd25lciBvZiBmaWxlcyBtdXN0IGFsd2F5cyBoYXZlICIKKwkJICAgICJyZWFkIGFuZCB3cml0ZSBwZXJtaXNzaW9ucy4iLCBpKTsKKworCS8qCisJICogTWFzayBmaWxlbW9kZSB2YWx1ZS4gT3RoZXJzIGNhbiBub3QgZ2V0IHdyaXRlIHBlcm1pc3Npb24uCisJICogeCBmbGFncyBmb3IgZGlyZWN0b3JpZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS4KKwkgKi8KKwlyZXR1cm4gLShpICYgMDY2Nik7Cit9CisKK2ludCBjaGVja19yZXBvc2l0b3J5X2Zvcm1hdF92ZXJzaW9uKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWludCByZXQgPSBjaGVja19yZXBvX2Zvcm1hdCh2YXIsIHZhbHVlLCBjYik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoc3RyY21wKHZhciwgImNvcmUuYmFyZSIpID09IDApIHsKKwkJaXNfYmFyZV9yZXBvc2l0b3J5X2NmZyA9IGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKTsKKwkJaWYgKGlzX2JhcmVfcmVwb3NpdG9yeV9jZmcgPT0gMSkKKwkJCWluc2lkZV93b3JrX3RyZWUgPSAtMTsKKwl9IGVsc2UgaWYgKHN0cmNtcCh2YXIsICJjb3JlLndvcmt0cmVlIikgPT0gMCkgeworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWZyZWUoZ2l0X3dvcmtfdHJlZV9jZmcpOworCQlnaXRfd29ya190cmVlX2NmZyA9IHhzdHJkdXAodmFsdWUpOworCQlpbnNpZGVfd29ya190cmVlID0gLTE7CisJfQorCXJldHVybiAwOworfQorCitpbnQgY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXQodm9pZCkKK3sKKwlyZXR1cm4gY2hlY2tfcmVwb3NpdG9yeV9mb3JtYXRfZ2VudGx5KGdldF9naXRfZGlyKCksIE5VTEwpOworfQorCisvKgorICogUmV0dXJucyB0aGUgInByZWZpeCIsIGEgcGF0aCB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorICogcmVsYXRpdmUgdG8gdGhlIHdvcmsgdHJlZSByb290LCBvciBOVUxMLCBpZiB0aGUgY3VycmVudCB3b3JraW5nCisgKiBkaXJlY3RvcnkgaXMgbm90IGEgc3RyaWN0IHN1YmRpcmVjdG9yeSBvZiB0aGUgd29yayB0cmVlIHJvb3QuIFRoZQorICogcHJlZml4IGFsd2F5cyBlbmRzIHdpdGggYSAnLycgY2hhcmFjdGVyLgorICovCitjb25zdCBjaGFyICpzZXR1cF9naXRfZGlyZWN0b3J5KHZvaWQpCit7CisJcmV0dXJuIHNldHVwX2dpdF9kaXJlY3RvcnlfZ2VudGx5KE5VTEwpOworfQorCitjb25zdCBjaGFyICpyZXNvbHZlX2dpdGRpcihjb25zdCBjaGFyICpzdXNwZWN0KQoreworCWlmIChpc19naXRfZGlyZWN0b3J5KHN1c3BlY3QpKQorCQlyZXR1cm4gc3VzcGVjdDsKKwlyZXR1cm4gcmVhZF9naXRmaWxlKHN1c3BlY3QpOworfQorCisvKiBpZiBhbnkgc3RhbmRhcmQgZmlsZSBkZXNjcmlwdG9yIGlzIG1pc3Npbmcgb3BlbiBpdCB0byAvZGV2L251bGwgKi8KK3ZvaWQgc2FuaXRpemVfc3RkZmRzKHZvaWQpCit7CisJaW50IGZkID0gb3BlbigiL2Rldi9udWxsIiwgT19SRFdSLCAwKTsKKwl3aGlsZSAoZmQgIT0gLTEgJiYgZmQgPCAyKQorCQlmZCA9IGR1cChmZCk7CisJaWYgKGZkID09IC0xKQorCQlkaWVfZXJybm8oIm9wZW4gL2Rldi9udWxsIG9yIGR1cCBmYWlsZWQiKTsKKwlpZiAoZmQgPiAyKQorCQljbG9zZShmZCk7Cit9CisKK2ludCBkYWVtb25pemUodm9pZCkKK3sKKyNpZmRlZiBOT19QT1NJWF9HT09ESUVTCisJZXJybm8gPSBFTk9TWVM7CisJcmV0dXJuIC0xOworI2Vsc2UKKwlzd2l0Y2ggKGZvcmsoKSkgeworCQljYXNlIDA6CisJCQlicmVhazsKKwkJY2FzZSAtMToKKwkJCWRpZV9lcnJubygiZm9yayBmYWlsZWQiKTsKKwkJZGVmYXVsdDoKKwkJCWV4aXQoMCk7CisJfQorCWlmIChzZXRzaWQoKSA9PSAtMSkKKwkJZGllX2Vycm5vKCJzZXRzaWQgZmFpbGVkIik7CisJY2xvc2UoMCk7CisJY2xvc2UoMSk7CisJY2xvc2UoMik7CisJc2FuaXRpemVfc3RkZmRzKCk7CisJcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3NoLWkxOG4tLWVudnN1YnN0LmMgYi9zaC1pMThuLS1lbnZzdWJzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4NDJhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9zaC1pMThuLS1lbnZzdWJzdC5jCkBAIC0wLDAgKzEsNDI3IEBACisvKgorICogc2gtaTE4bi0tZW52c3Vic3QuYyAtIGEgc3RyaXBwZWQtZG93biB2ZXJzaW9uIG9mIGdldHRleHQncyBlbnZzdWJzdCgxKQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorICoKKyAqIFRoaXMgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mCisgKiA2N2QwODcxYThjOmdldHRleHQtcnVudGltZS9zcmMvZW52c3Vic3QuYyBmcm9tIHRoZSBnZXR0ZXh0LmdpdAorICogcmVwb3NpdG9yeS4gSXQgaGFzIGJlZW4gc3RyaXBwZWQgZG93biB0byBvbmx5IGltcGxlbWVudCB0aGUKKyAqIGVudnN1YnN0KDEpIGZlYXR1cmVzIHRoYXQgd2UgbmVlZCBpbiB0aGUgZ2l0LXNoLWkxOG4gZmFsbGJhY2tzLgorICoKKyAqIFRoZSAiQ2xvc2Ugc3RhbmRhcmQgZXJyb3IiIHBhcnQgaW4gbWFpbigpIGlzIGZyb20KKyAqIDhkYWMwMzNkZjA6Z251bGliLWxvY2FsL2xpYi9jbG9zZW91dC5jLiBUaGUgY29weXJpZ2h0IG5vdGljZXMgZm9yCisgKiBib3RoIGZpbGVzIGFyZSByZXByb2R1Y2VkIGltbWVkaWF0ZWx5IGJlbG93LgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworLyogU3Vic3RpdHV0aW9uIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiBzaGVsbCBmb3JtYXQgc3RyaW5ncy4KKyAgIENvcHlyaWdodCAoQykgMjAwMy0yMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBCcnVubyBIYWlibGUgPGJydW5vQGNsaXNwLm9yZz4sIDIwMDMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBjbG9zZW91dC5jIC0gY2xvc2Ugc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvcgorICAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBJZiB0cnVlLCBzdWJzdGl0dXRpb24gc2hhbGwgYmUgcGVyZm9ybWVkIG9uIGFsbCB2YXJpYWJsZXMuICAqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IGludCBhbGxfdmFyaWFibGVzOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIGxvY2FsIGZ1bmN0aW9ucy4gICovCitzdGF0aWMgdm9pZCBwcmludF92YXJpYWJsZXMgKGNvbnN0IGNoYXIgKnN0cmluZyk7CitzdGF0aWMgdm9pZCBub3RlX3ZhcmlhYmxlcyAoY29uc3QgY2hhciAqc3RyaW5nKTsKK3N0YXRpYyB2b2lkIHN1YnN0X2Zyb21fc3RkaW4gKHZvaWQpOworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIC8qIERlZmF1bHQgdmFsdWVzIGZvciBjb21tYW5kIGxpbmUgb3B0aW9ucy4gICovCisgIC8qIHVuc2lnbmVkIHNob3J0IGludCBzaG93X3ZhcmlhYmxlcyA9IDA7ICovCisKKyAgc3dpdGNoIChhcmdjKQorCXsKKwljYXNlIDE6CisJICBlcnJvciAoIndlIHdvbid0IHN1YnN0aXR1dGUgYWxsIHZhcmlhYmxlcyBvbiBzdGRpbiBmb3IgeW91Iik7CisJICBicmVhazsKKwkgIC8qCisJICBhbGxfdmFyaWFibGVzID0gMTsKKyAgICAgIHN1YnN0X2Zyb21fc3RkaW4gKCk7CisJICAqLworCWNhc2UgMjoKKwkgIC8qIGVjaG8gJyRmb28gYW5kICRiYXInIHwgZ2l0IHNoLWkxOG4tLWVudnN1YnN0IC0tdmFyaWFibGVzICckZm9vIGFuZCAkYmFyJyAqLworCSAgYWxsX3ZhcmlhYmxlcyA9IDA7CisJICBub3RlX3ZhcmlhYmxlcyAoYXJndlsxXSk7CisgICAgICBzdWJzdF9mcm9tX3N0ZGluICgpOworCSAgYnJlYWs7CisJY2FzZSAzOgorCSAgLyogZ2l0IHNoLWkxOG4tLWVudnN1YnN0IC0tdmFyaWFibGVzICckZm9vIGFuZCAkYmFyJyAqLworCSAgaWYgKHN0cmNtcChhcmd2WzFdLCAiLS12YXJpYWJsZXMiKSkKKwkJZXJyb3IgKCJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIC0tdmFyaWFibGVzIHdoZW4gdHdvIGFyZSBnaXZlbiIpOworCSAgLyogc2hvd192YXJpYWJsZXMgPSAxOyAqLworICAgICAgcHJpbnRfdmFyaWFibGVzIChhcmd2WzJdKTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBlcnJvciAoInRvbyBtYW55IGFyZ3VtZW50cyIpOworCSAgYnJlYWs7CisJfQorCisgIC8qIENsb3NlIHN0YW5kYXJkIGVycm9yLiAgVGhpcyBpcyBzaW1wbGVyIHRoYW4gZndyaXRlZXJyb3Jfbm9fZWJhZGYsIGJlY2F1c2UKKyAgICAgdXBvbiBmYWlsdXJlIHdlIGRvbid0IG5lZWQgYW4gZXJybm8gLSBhbGwgd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgaXMgdG8KKyAgICAgc2V0IGFuIGV4aXQgc3RhdHVzLiAgKi8KKyAgZXJybm8gPSAwOworICBpZiAoZmVycm9yIChzdGRlcnIpIHx8IGZmbHVzaCAoc3RkZXJyKSkKKyAgICB7CisgICAgICBmY2xvc2UgKHN0ZGVycik7CisgICAgICBleGl0IChFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgaWYgKGZjbG9zZSAoc3RkZXJyKSAmJiBlcnJubyAhPSBFQkFERikKKyAgICBleGl0IChFWElUX0ZBSUxVUkUpOworCisgIGV4aXQgKEVYSVRfU1VDQ0VTUyk7Cit9CisKKy8qIFBhcnNlIHRoZSBzdHJpbmcgYW5kIGludm9rZSB0aGUgY2FsbGJhY2sgZWFjaCB0aW1lIGEgJFZBUklBQkxFIG9yCisgICAke1ZBUklBQkxFfSBjb25zdHJ1Y3QgaXMgc2Vlbiwgd2hlcmUgVkFSSUFCTEUgaXMgYSBub25lbXB0eSBzZXF1ZW5jZQorICAgb2YgQVNDSUkgYWxwaGFudW1lcmljL3VuZGVyc2NvcmUgY2hhcmFjdGVycywgc3RhcnRpbmcgd2l0aCBhbiBBU0NJSQorICAgYWxwaGFiZXRpYy91bmRlcnNjb3JlIGNoYXJhY3Rlci4KKyAgIFdlIGFsbG93IG9ubHkgQVNDSUkgY2hhcmFjdGVycywgdG8gYXZvaWQgZGVwZW5kZW5jaWVzIHcuci50LiB0aGUgY3VycmVudAorICAgZW5jb2Rpbmc6IFdoaWxlICIke1x4ZTB9IiBsb29rcyBsaWtlIGEgdmFyaWFibGUgYWNjZXNzIGluIElTTy04ODU5LTEKKyAgIGVuY29kaW5nLCBpdCBkb2Vzbid0IGxvb2sgbGlrZSBvbmUgaW4gdGhlIEJJRzUsIEJJRzUtSEtTQ1MsIEdCSywgR0IxODAzMCwKKyAgIFNISUZUX0pJUywgSk9IQUIgZW5jb2RpbmdzLCBiZWNhdXNlIFx4ZTBceDdkIGlzIGEgc2luZ2xlIGNoYXJhY3RlciBpbiB0aGVzZQorICAgZW5jb2RpbmdzLiAgKi8KK3N0YXRpYyB2b2lkCitmaW5kX3ZhcmlhYmxlcyAoY29uc3QgY2hhciAqc3RyaW5nLAorCQl2b2lkICgqY2FsbGJhY2spIChjb25zdCBjaGFyICp2YXJfcHRyLCBzaXplX3QgdmFyX2xlbikpCit7CisgIGZvciAoOyAqc3RyaW5nICE9ICdcMCc7KQorICAgIGlmICgqc3RyaW5nKysgPT0gJyQnKQorICAgICAgeworCWNvbnN0IGNoYXIgKnZhcmlhYmxlX3N0YXJ0OworCWNvbnN0IGNoYXIgKnZhcmlhYmxlX2VuZDsKKwl1bnNpZ25lZCBzaG9ydCBpbnQgdmFsaWQ7CisJY2hhciBjOworCisJaWYgKCpzdHJpbmcgPT0gJ3snKQorCSAgc3RyaW5nKys7CisKKwl2YXJpYWJsZV9zdGFydCA9IHN0cmluZzsKKwljID0gKnN0cmluZzsKKwlpZiAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IGMgPT0gJ18nKQorCSAgeworCSAgICBkbworCSAgICAgIGMgPSAqKytzdHJpbmc7CisJICAgIHdoaWxlICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6JykKKwkJICAgfHwgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB8fCBjID09ICdfJyk7CisJICAgIHZhcmlhYmxlX2VuZCA9IHN0cmluZzsKKworCSAgICBpZiAodmFyaWFibGVfc3RhcnRbLTFdID09ICd7JykKKwkgICAgICB7CisJCWlmICgqc3RyaW5nID09ICd9JykKKwkJICB7CisJCSAgICBzdHJpbmcrKzsKKwkJICAgIHZhbGlkID0gMTsKKwkJICB9CisJCWVsc2UKKwkJICB2YWxpZCA9IDA7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgdmFsaWQgPSAxOworCisJICAgIGlmICh2YWxpZCkKKwkgICAgICBjYWxsYmFjayAodmFyaWFibGVfc3RhcnQsIHZhcmlhYmxlX2VuZCAtIHZhcmlhYmxlX3N0YXJ0KTsKKwkgIH0KKyAgICAgIH0KK30KKworCisvKiBQcmludCBhIHZhcmlhYmxlIHRvIHN0ZG91dCwgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLiAgKi8KK3N0YXRpYyB2b2lkCitwcmludF92YXJpYWJsZSAoY29uc3QgY2hhciAqdmFyX3B0ciwgc2l6ZV90IHZhcl9sZW4pCit7CisgIGZ3cml0ZSAodmFyX3B0ciwgdmFyX2xlbiwgMSwgc3Rkb3V0KTsKKyAgcHV0Y2hhciAoJ1xuJyk7Cit9CisKKy8qIFByaW50IHRoZSB2YXJpYWJsZXMgY29udGFpbmVkIGluIFNUUklORyB0byBzdGRvdXQsIGVhY2ggb25lIGZvbGxvd2VkIGJ5IGEKKyAgIG5ld2xpbmUuICAqLworc3RhdGljIHZvaWQKK3ByaW50X3ZhcmlhYmxlcyAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICBmaW5kX3ZhcmlhYmxlcyAoc3RyaW5nLCAmcHJpbnRfdmFyaWFibGUpOworfQorCisKKy8qIFR5cGUgZGVzY3JpYmluZyBsaXN0IG9mIGltbXV0YWJsZSBzdHJpbmdzLAorICAgaW1wbGVtZW50ZWQgdXNpbmcgYSBkeW5hbWljIGFycmF5LiAgKi8KK3R5cGVkZWYgc3RydWN0IHN0cmluZ19saXN0X3R5IHN0cmluZ19saXN0X3R5Oworc3RydWN0IHN0cmluZ19saXN0X3R5Cit7CisgIGNvbnN0IGNoYXIgKippdGVtOworICBzaXplX3Qgbml0ZW1zOworICBzaXplX3Qgbml0ZW1zX21heDsKK307CisKKy8qIEluaXRpYWxpemUgYW4gZW1wdHkgbGlzdCBvZiBzdHJpbmdzLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorc3RyaW5nX2xpc3RfaW5pdCAoc3RyaW5nX2xpc3RfdHkgKnNscCkKK3sKKyAgc2xwLT5pdGVtID0gTlVMTDsKKyAgc2xwLT5uaXRlbXMgPSAwOworICBzbHAtPm5pdGVtc19tYXggPSAwOworfQorCisvKiBBcHBlbmQgYSBzaW5nbGUgc3RyaW5nIHRvIHRoZSBlbmQgb2YgYSBsaXN0IG9mIHN0cmluZ3MuICAqLworc3RhdGljIGlubGluZSB2b2lkCitzdHJpbmdfbGlzdF9hcHBlbmQgKHN0cmluZ19saXN0X3R5ICpzbHAsIGNvbnN0IGNoYXIgKnMpCit7CisgIC8qIEdyb3cgdGhlIGxpc3QuICAqLworICBpZiAoc2xwLT5uaXRlbXMgPj0gc2xwLT5uaXRlbXNfbWF4KQorICAgIHsKKyAgICAgIHNscC0+bml0ZW1zX21heCA9IHNscC0+bml0ZW1zX21heCAqIDIgKyA0OworICAgICAgUkVBTExPQ19BUlJBWShzbHAtPml0ZW0sIHNscC0+bml0ZW1zX21heCk7CisgICAgfQorCisgIC8qIEFkZCB0aGUgc3RyaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuICAqLworICBzbHAtPml0ZW1bc2xwLT5uaXRlbXMrK10gPSBzOworfQorCisvKiBDb21wYXJlIHR3byBzdHJpbmdzIGdpdmVuIGJ5IHJlZmVyZW5jZS4gICovCitzdGF0aWMgaW50CitjbXBfc3RyaW5nIChjb25zdCB2b2lkICpwc3RyMSwgY29uc3Qgdm9pZCAqcHN0cjIpCit7CisgIGNvbnN0IGNoYXIgKnN0cjEgPSAqKGNvbnN0IGNoYXIgKiopcHN0cjE7CisgIGNvbnN0IGNoYXIgKnN0cjIgPSAqKGNvbnN0IGNoYXIgKiopcHN0cjI7CisKKyAgcmV0dXJuIHN0cmNtcCAoc3RyMSwgc3RyMik7Cit9CisKKy8qIFNvcnQgYSBsaXN0IG9mIHN0cmluZ3MuICAqLworc3RhdGljIGlubGluZSB2b2lkCitzdHJpbmdfbGlzdF9zb3J0IChzdHJpbmdfbGlzdF90eSAqc2xwKQoreworICBpZiAoc2xwLT5uaXRlbXMgPiAwKQorICAgIHFzb3J0IChzbHAtPml0ZW0sIHNscC0+bml0ZW1zLCBzaXplb2YgKHNscC0+aXRlbVswXSksIGNtcF9zdHJpbmcpOworfQorCisvKiBUZXN0IHdoZXRoZXIgYSBzb3J0ZWQgc3RyaW5nIGxpc3QgY29udGFpbnMgYSBnaXZlbiBzdHJpbmcuICAqLworc3RhdGljIGludAorc29ydGVkX3N0cmluZ19saXN0X21lbWJlciAoY29uc3Qgc3RyaW5nX2xpc3RfdHkgKnNscCwgY29uc3QgY2hhciAqcykKK3sKKyAgc2l6ZV90IGoxLCBqMjsKKworICBqMSA9IDA7CisgIGoyID0gc2xwLT5uaXRlbXM7CisgIGlmIChqMiA+IDApCisgICAgeworICAgICAgLyogQmluYXJ5IHNlYXJjaC4gICovCisgICAgICB3aGlsZSAoajIgLSBqMSA+IDEpCisJeworCSAgLyogSGVyZSB3ZSBrbm93IHRoYXQgaWYgcyBpcyBpbiB0aGUgbGlzdCwgaXQgaXMgYXQgYW4gaW5kZXggagorCSAgICAgd2l0aCBqMSA8PSBqIDwgajIuICAqLworCSAgc2l6ZV90IGogPSAoajEgKyBqMikgPj4gMTsKKwkgIGludCByZXN1bHQgPSBzdHJjbXAgKHNscC0+aXRlbVtqXSwgcyk7CisKKwkgIGlmIChyZXN1bHQgPiAwKQorCSAgICBqMiA9IGo7CisJICBlbHNlIGlmIChyZXN1bHQgPT0gMCkKKwkgICAgcmV0dXJuIDE7CisJICBlbHNlCisJICAgIGoxID0gaiArIDE7CisJfQorICAgICAgaWYgKGoyID4gajEpCisJaWYgKHN0cmNtcCAoc2xwLT5pdGVtW2oxXSwgcykgPT0gMCkKKwkgIHJldHVybiAxOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKworLyogU2V0IG9mIHZhcmlhYmxlcyBvbiB3aGljaCB0byBwZXJmb3JtIHN1YnN0aXR1dGlvbi4KKyAgIFVzZWQgb25seSBpZiAhYWxsX3ZhcmlhYmxlcy4gICovCitzdGF0aWMgc3RyaW5nX2xpc3RfdHkgdmFyaWFibGVzX3NldDsKKworLyogQWRkcyBhIHZhcmlhYmxlIHRvIHZhcmlhYmxlc19zZXQuICAqLworc3RhdGljIHZvaWQKK25vdGVfdmFyaWFibGUgKGNvbnN0IGNoYXIgKnZhcl9wdHIsIHNpemVfdCB2YXJfbGVuKQoreworICBjaGFyICpzdHJpbmcgPSB4bWVtZHVweiAodmFyX3B0ciwgdmFyX2xlbik7CisKKyAgc3RyaW5nX2xpc3RfYXBwZW5kICgmdmFyaWFibGVzX3NldCwgc3RyaW5nKTsKK30KKworLyogU3RvcmVzIHRoZSB2YXJpYWJsZXMgb2NjdXJyaW5nIGluIHRoZSBzdHJpbmcgaW4gdmFyaWFibGVzX3NldC4gICovCitzdGF0aWMgdm9pZAorbm90ZV92YXJpYWJsZXMgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgc3RyaW5nX2xpc3RfaW5pdCAoJnZhcmlhYmxlc19zZXQpOworICBmaW5kX3ZhcmlhYmxlcyAoc3RyaW5nLCAmbm90ZV92YXJpYWJsZSk7CisgIHN0cmluZ19saXN0X3NvcnQgKCZ2YXJpYWJsZXNfc2V0KTsKK30KKworCitzdGF0aWMgaW50Citkb19nZXRjICh2b2lkKQoreworICBpbnQgYyA9IGdldGMgKHN0ZGluKTsKKworICBpZiAoYyA9PSBFT0YpCisgICAgeworICAgICAgaWYgKGZlcnJvciAoc3RkaW4pKQorCWVycm9yICgiZXJyb3Igd2hpbGUgcmVhZGluZyBzdGFuZGFyZCBpbnB1dCIpOworICAgIH0KKworICByZXR1cm4gYzsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkb191bmdldGMgKGludCBjKQoreworICBpZiAoYyAhPSBFT0YpCisgICAgdW5nZXRjIChjLCBzdGRpbik7Cit9CisKKy8qIENvcGllcyBzdGRpbiB0byBzdGRvdXQsIHBlcmZvcm1pbmcgc3Vic3RpdHV0aW9ucy4gICovCitzdGF0aWMgdm9pZAorc3Vic3RfZnJvbV9zdGRpbiAodm9pZCkKK3sKKyAgc3RhdGljIGNoYXIgKmJ1ZmZlcjsKKyAgc3RhdGljIHNpemVfdCBidWZtYXg7CisgIHN0YXRpYyBzaXplX3QgYnVmbGVuOworICBpbnQgYzsKKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGMgPSBkb19nZXRjICgpOworICAgICAgaWYgKGMgPT0gRU9GKQorCWJyZWFrOworICAgICAgLyogTG9vayBmb3IgJFZBUklBQkxFIG9yICR7VkFSSUFCTEV9LiAgKi8KKyAgICAgIGlmIChjID09ICckJykKKwl7CisJICB1bnNpZ25lZCBzaG9ydCBpbnQgb3BlbmluZ19icmFjZSA9IDA7CisJICB1bnNpZ25lZCBzaG9ydCBpbnQgY2xvc2luZ19icmFjZSA9IDA7CisKKwkgIGMgPSBkb19nZXRjICgpOworCSAgaWYgKGMgPT0gJ3snKQorCSAgICB7CisJICAgICAgb3BlbmluZ19icmFjZSA9IDE7CisJICAgICAgYyA9IGRvX2dldGMgKCk7CisJICAgIH0KKwkgIGlmICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgYyA9PSAnXycpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBzaG9ydCBpbnQgdmFsaWQ7CisKKwkgICAgICAvKiBBY2N1bXVsYXRlIHRoZSBWQVJJQUJMRSBpbiBidWZmZXIuICAqLworCSAgICAgIGJ1ZmxlbiA9IDA7CisJICAgICAgZG8KKwkJeworCQkgIGlmIChidWZsZW4gPj0gYnVmbWF4KQorCQkgICAgeworCQkgICAgICBidWZtYXggPSAyICogYnVmbWF4ICsgMTA7CisJCSAgICAgIGJ1ZmZlciA9IHhyZWFsbG9jIChidWZmZXIsIGJ1Zm1heCk7CisJCSAgICB9CisJCSAgYnVmZmVyW2J1ZmxlbisrXSA9IGM7CisKKwkJICBjID0gZG9fZ2V0YyAoKTsKKwkJfQorCSAgICAgIHdoaWxlICgoYyA+PSAnQScgJiYgYyA8PSAnWicpIHx8IChjID49ICdhJyAmJiBjIDw9ICd6JykKKwkJICAgICB8fCAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHx8IGMgPT0gJ18nKTsKKworCSAgICAgIGlmIChvcGVuaW5nX2JyYWNlKQorCQl7CisJCSAgaWYgKGMgPT0gJ30nKQorCQkgICAgeworCQkgICAgICBjbG9zaW5nX2JyYWNlID0gMTsKKwkJICAgICAgdmFsaWQgPSAxOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgdmFsaWQgPSAwOworCQkgICAgICBkb191bmdldGMgKGMpOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgdmFsaWQgPSAxOworCQkgIGRvX3VuZ2V0YyAoYyk7CisJCX0KKworCSAgICAgIGlmICh2YWxpZCkKKwkJeworCQkgIC8qIFRlcm1pbmF0ZSB0aGUgdmFyaWFibGUgaW4gdGhlIGJ1ZmZlci4gICovCisJCSAgaWYgKGJ1ZmxlbiA+PSBidWZtYXgpCisJCSAgICB7CisJCSAgICAgIGJ1Zm1heCA9IDIgKiBidWZtYXggKyAxMDsKKwkJICAgICAgYnVmZmVyID0geHJlYWxsb2MgKGJ1ZmZlciwgYnVmbWF4KTsKKwkJICAgIH0KKwkJICBidWZmZXJbYnVmbGVuXSA9ICdcMCc7CisKKwkJICAvKiBUZXN0IHdoZXRoZXIgdGhlIHZhcmlhYmxlIHNoYWxsIGJlIHN1YnN0aXR1dGVkLiAgKi8KKwkJICBpZiAoIWFsbF92YXJpYWJsZXMKKwkJICAgICAgJiYgIXNvcnRlZF9zdHJpbmdfbGlzdF9tZW1iZXIgKCZ2YXJpYWJsZXNfc2V0LCBidWZmZXIpKQorCQkgICAgdmFsaWQgPSAwOworCQl9CisKKwkgICAgICBpZiAodmFsaWQpCisJCXsKKwkJICAvKiBTdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSdzIHZhbHVlIGZyb20gdGhlIGVudmlyb25tZW50LiAgKi8KKwkJICBjb25zdCBjaGFyICplbnZfdmFsdWUgPSBnZXRlbnYgKGJ1ZmZlcik7CisKKwkJICBpZiAoZW52X3ZhbHVlICE9IE5VTEwpCisJCSAgICBmcHV0cyAoZW52X3ZhbHVlLCBzdGRvdXQpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgLyogUGVyZm9ybSBubyBzdWJzdGl0dXRpb24gYXQgYWxsLiAgU2luY2UgdGhlIGJ1ZmZlcmVkIGlucHV0CisJCSAgICAgY29udGFpbnMgbm8gb3RoZXIgJyQnIHRoYW4gYXQgdGhlIHN0YXJ0LCB3ZSBjYW4ganVzdAorCQkgICAgIG91dHB1dCBhbGwgdGhlIGJ1ZmZlcmVkIGNvbnRlbnRzLiAgKi8KKwkJICBwdXRjaGFyICgnJCcpOworCQkgIGlmIChvcGVuaW5nX2JyYWNlKQorCQkgICAgcHV0Y2hhciAoJ3snKTsKKwkJICBmd3JpdGUgKGJ1ZmZlciwgYnVmbGVuLCAxLCBzdGRvdXQpOworCQkgIGlmIChjbG9zaW5nX2JyYWNlKQorCQkgICAgcHV0Y2hhciAoJ30nKTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBkb191bmdldGMgKGMpOworCSAgICAgIHB1dGNoYXIgKCckJyk7CisJICAgICAgaWYgKG9wZW5pbmdfYnJhY2UpCisJCXB1dGNoYXIgKCd7Jyk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJcHV0Y2hhciAoYyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2hhMS1hcnJheS5jIGIvc2hhMS1hcnJheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNGEyMjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaGExLWFycmF5LmMKQEAgLTAsMCArMSw1OSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgInNoYTEtbG9va3VwLmgiCisKK3ZvaWQgc2hhMV9hcnJheV9hcHBlbmQoc3RydWN0IHNoYTFfYXJyYXkgKmFycmF5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCUFMTE9DX0dST1coYXJyYXktPnNoYTEsIGFycmF5LT5uciArIDEsIGFycmF5LT5hbGxvYyk7CisJaGFzaGNweShhcnJheS0+c2hhMVthcnJheS0+bnIrK10sIHNoYTEpOworCWFycmF5LT5zb3J0ZWQgPSAwOworfQorCitzdGF0aWMgaW50IHZvaWRfaGFzaGNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCXJldHVybiBoYXNoY21wKGEsIGIpOworfQorCitzdGF0aWMgdm9pZCBzaGExX2FycmF5X3NvcnQoc3RydWN0IHNoYTFfYXJyYXkgKmFycmF5KQoreworCXFzb3J0KGFycmF5LT5zaGExLCBhcnJheS0+bnIsIHNpemVvZigqYXJyYXktPnNoYTEpLCB2b2lkX2hhc2hjbXApOworCWFycmF5LT5zb3J0ZWQgPSAxOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMV9hY2Nlc3Moc2l6ZV90IGluZGV4LCB2b2lkICp0YWJsZSkKK3sKKwl1bnNpZ25lZCBjaGFyICgqYXJyYXkpWzIwXSA9IHRhYmxlOworCXJldHVybiBhcnJheVtpbmRleF07Cit9CisKK2ludCBzaGExX2FycmF5X2xvb2t1cChzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaWYgKCFhcnJheS0+c29ydGVkKQorCQlzaGExX2FycmF5X3NvcnQoYXJyYXkpOworCXJldHVybiBzaGExX3BvcyhzaGExLCBhcnJheS0+c2hhMSwgYXJyYXktPm5yLCBzaGExX2FjY2Vzcyk7Cit9CisKK3ZvaWQgc2hhMV9hcnJheV9jbGVhcihzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXkpCit7CisJZnJlZShhcnJheS0+c2hhMSk7CisJYXJyYXktPnNoYTEgPSBOVUxMOworCWFycmF5LT5uciA9IDA7CisJYXJyYXktPmFsbG9jID0gMDsKKwlhcnJheS0+c29ydGVkID0gMDsKK30KKwordm9pZCBzaGExX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZShzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXksCisJCQkJZm9yX2VhY2hfc2hhMV9mbiBmbiwKKwkJCQl2b2lkICpkYXRhKQoreworCWludCBpOworCisJaWYgKCFhcnJheS0+c29ydGVkKQorCQlzaGExX2FycmF5X3NvcnQoYXJyYXkpOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5LT5ucjsgaSsrKSB7CisJCWlmIChpID4gMCAmJiAhaGFzaGNtcChhcnJheS0+c2hhMVtpXSwgYXJyYXktPnNoYTFbaS0xXSkpCisJCQljb250aW51ZTsKKwkJZm4oYXJyYXktPnNoYTFbaV0sIGRhdGEpOworCX0KK30KZGlmZiAtLWdpdCBhL3NoYTEtYXJyYXkuaCBiL3NoYTEtYXJyYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmJiMzNiCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMS1hcnJheS5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgU0hBMV9BUlJBWV9ICisjZGVmaW5lIFNIQTFfQVJSQVlfSAorCitzdHJ1Y3Qgc2hhMV9hcnJheSB7CisJdW5zaWduZWQgY2hhciAoKnNoYTEpWzIwXTsKKwlpbnQgbnI7CisJaW50IGFsbG9jOworCWludCBzb3J0ZWQ7Cit9OworCisjZGVmaW5lIFNIQTFfQVJSQVlfSU5JVCB7IE5VTEwsIDAsIDAsIDAgfQorCit2b2lkIHNoYTFfYXJyYXlfYXBwZW5kKHN0cnVjdCBzaGExX2FycmF5ICphcnJheSwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CitpbnQgc2hhMV9hcnJheV9sb29rdXAoc3RydWN0IHNoYTFfYXJyYXkgKmFycmF5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKTsKK3ZvaWQgc2hhMV9hcnJheV9jbGVhcihzdHJ1Y3Qgc2hhMV9hcnJheSAqYXJyYXkpOworCit0eXBlZGVmIHZvaWQgKCpmb3JfZWFjaF9zaGExX2ZuKShjb25zdCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdLAorCQkJCSB2b2lkICpkYXRhKTsKK3ZvaWQgc2hhMV9hcnJheV9mb3JfZWFjaF91bmlxdWUoc3RydWN0IHNoYTFfYXJyYXkgKmFycmF5LAorCQkJCWZvcl9lYWNoX3NoYTFfZm4gZm4sCisJCQkJdm9pZCAqZGF0YSk7CisKKyNlbmRpZiAvKiBTSEExX0FSUkFZX0ggKi8KZGlmZiAtLWdpdCBhL3NoYTEtbG9va3VwLmMgYi9zaGExLWxvb2t1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMDY5MjEKLS0tIC9kZXYvbnVsbAorKysgYi9zaGExLWxvb2t1cC5jCkBAIC0wLDAgKzEsMzE3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorCitzdGF0aWMgdWludDMyX3QgdGFrZTIoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gKChzaGExWzBdIDw8IDgpIHwgc2hhMVsxXSk7Cit9CisKKy8qCisgKiBDb252ZW50aW9uYWwgYmluYXJ5IHNlYXJjaCBsb29wIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKiAgICAgIGRvIHsKKyAqICAgICAgICAgICAgICBpbnQgbWkgPSAobG8gKyBoaSkgLyAyOworICogICAgICAgICAgICAgIGludCBjbXAgPSAiZW50cnkgcG9pbnRlZCBhdCBieSBtaSIgbWludXMgInRhcmdldCI7CisgKiAgICAgICAgICAgICAgaWYgKCFjbXApCisgKiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1pIGlzIHRoZSB3YW50ZWQgb25lKQorICogICAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICogICAgICAgICAgICAgICAgICAgICAgaGkgPSBtaTsgIm1pIGlzIGxhcmdlciB0aGFuIHRhcmdldCIKKyAqICAgICAgICAgICAgICBlbHNlCisgKiAgICAgICAgICAgICAgICAgICAgICBsbyA9IG1pKzE7ICJtaSBpcyBzbWFsbGVyIHRoYW4gdGFyZ2V0IgorICogICAgICB9IHdoaWxlIChsbyA8IGhpKTsKKyAqCisgKiBUaGUgaW52YXJpYW50cyBhcmU6CisgKgorICogLSBXaGVuIGVudGVyaW5nIHRoZSBsb29wLCBsbyBwb2ludHMgYXQgYSBzbG90IHRoYXQgaXMgbmV2ZXIKKyAqICAgYWJvdmUgdGhlIHRhcmdldCAoaXQgY291bGQgYmUgYXQgdGhlIHRhcmdldCksIGhpIHBvaW50cyBhdCBhCisgKiAgIHNsb3QgdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGFib3ZlIHRoZSB0YXJnZXQgKGl0IGNhbiBuZXZlcgorICogICBiZSBhdCB0aGUgdGFyZ2V0KS4KKyAqCisgKiAtIFdlIGZpbmQgYSBwb2ludCAnbWknIGJldHdlZW4gbG8gYW5kIGhpIChtaSBjb3VsZCBiZSB0aGUgc2FtZQorICogICBhcyBsbywgYnV0IG5ldmVyIGNhbiBiZSB0aGUgc2FtZSBhcyBoaSksIGFuZCBjaGVjayBpZiBpdCBoaXRzCisgKiAgIHRoZSB0YXJnZXQuICBUaGVyZSBhcmUgdGhyZWUgY2FzZXM6CisgKgorICogICAgLSBpZiBpdCBpcyBhIGhpdCwgd2UgYXJlIGhhcHB5LgorICoKKyAqICAgIC0gaWYgaXQgaXMgc3RyaWN0bHkgaGlnaGVyIHRoYW4gdGhlIHRhcmdldCwgd2UgdXBkYXRlIGhpIHdpdGgKKyAqICAgICAgaXQuCisgKgorICogICAgLSBpZiBpdCBpcyBzdHJpY3RseSBsb3dlciB0aGFuIHRoZSB0YXJnZXQsIHdlIHVwZGF0ZSBsbyB0byBiZQorICogICAgICBvbmUgc2xvdCBhZnRlciBpdCwgYmVjYXVzZSB3ZSBhbGxvdyBsbyB0byBiZSBhdCB0aGUgdGFyZ2V0LgorICoKKyAqIFdoZW4gY2hvb3NpbmcgJ21pJywgd2UgZG8gbm90IGhhdmUgdG8gdGFrZSB0aGUgIm1pZGRsZSIgYnV0CisgKiBhbnl3aGVyZSBpbiBiZXR3ZWVuIGxvIGFuZCBoaSwgYXMgbG9uZyBhcyBsbyA8PSBtaSA8IGhpIGlzCisgKiBzYXRpc2ZpZWQuICBXaGVuIHdlIHNvbWVob3cga25vdyB0aGF0IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZQorICogdGFyZ2V0IGFuZCBsbyBpcyBtdWNoIHNob3J0ZXIgdGhhbiB0aGUgdGFyZ2V0IGFuZCBoaSwgd2UgY291bGQKKyAqIHBpY2sgbWkgdGhhdCBpcyBtdWNoIGNsb3NlciB0byBsbyB0aGFuIHRoZSBtaWR3YXkuCisgKi8KKy8qCisgKiBUaGUgdGFibGUgc2hvdWxkIGNvbnRhaW4gIm5yIiBlbGVtZW50cy4KKyAqIFRoZSBzaGExIG9mIGVsZW1lbnQgaSAoYmV0d2VlbiAwIGFuZCBuciAtIDEpIHNob3VsZCBiZSByZXR1cm5lZAorICogYnkgImZuKGksIHRhYmxlKSIuCisgKi8KK2ludCBzaGExX3Bvcyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICp0YWJsZSwgc2l6ZV90IG5yLAorCSAgICAgc2hhMV9hY2Nlc3NfZm4gZm4pCit7CisJc2l6ZV90IGhpID0gbnI7CisJc2l6ZV90IGxvID0gMDsKKwlzaXplX3QgbWkgPSAwOworCisJaWYgKCFucikKKwkJcmV0dXJuIC0xOworCisJaWYgKG5yICE9IDEpIHsKKwkJc2l6ZV90IGxvdiwgaGl2LCBtaXYsIG9mczsKKworCQlmb3IgKG9mcyA9IDA7IG9mcyA8IDE4OyBvZnMgKz0gMikgeworCQkJbG92ID0gdGFrZTIoZm4oMCwgdGFibGUpICsgb2ZzKTsKKwkJCWhpdiA9IHRha2UyKGZuKG5yIC0gMSwgdGFibGUpICsgb2ZzKTsKKwkJCW1pdiA9IHRha2UyKHNoYTEgKyBvZnMpOworCQkJaWYgKG1pdiA8IGxvdikKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoaGl2IDwgbWl2KQorCQkJCXJldHVybiAtMSAtIG5yOworCQkJaWYgKGxvdiAhPSBoaXYpIHsKKwkJCQkvKgorCQkJCSAqIEF0IHRoaXMgcG9pbnQgbWl2IGNvdWxkIGJlIGVxdWFsCisJCQkJICogdG8gaGl2IChidXQgc2hhMSBjb3VsZCBzdGlsbCBiZSBoaWdoZXIpOworCQkJCSAqIHRoZSBpbnZhcmlhbnQgb2YgKG1pIDwgaGkpIHNob3VsZCBiZQorCQkJCSAqIGtlcHQuCisJCQkJICovCisJCQkJbWkgPSAobnIgLSAxKSAqIChtaXYgLSBsb3YpIC8gKGhpdiAtIGxvdik7CisJCQkJaWYgKGxvIDw9IG1pICYmIG1pIDwgaGkpCisJCQkJCWJyZWFrOworCQkJCWRpZSgiQlVHOiBhc3NlcnRpb24gZmFpbGVkIGluIGJpbmFyeSBzZWFyY2giKTsKKwkJCX0KKwkJfQorCX0KKworCWRvIHsKKwkJaW50IGNtcDsKKwkJY21wID0gaGFzaGNtcChmbihtaSwgdGFibGUpLCBzaGExKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbWk7CisJCWlmIChjbXAgPiAwKQorCQkJaGkgPSBtaTsKKwkJZWxzZQorCQkJbG8gPSBtaSArIDE7CisJCW1pID0gKGhpICsgbG8pIC8gMjsKKwl9IHdoaWxlIChsbyA8IGhpKTsKKwlyZXR1cm4gLWxvLTE7Cit9CisKKy8qCisgKiBDb252ZW50aW9uYWwgYmluYXJ5IHNlYXJjaCBsb29wIGxvb2tzIGxpa2UgdGhpczoKKyAqCisgKgl1bnNpZ25lZCBsbywgaGk7CisgKiAgICAgIGRvIHsKKyAqICAgICAgICAgICAgICB1bnNpZ25lZCBtaSA9IChsbyArIGhpKSAvIDI7CisgKiAgICAgICAgICAgICAgaW50IGNtcCA9ICJlbnRyeSBwb2ludGVkIGF0IGJ5IG1pIiBtaW51cyAidGFyZ2V0IjsKKyAqICAgICAgICAgICAgICBpZiAoIWNtcCkKKyAqICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobWkgaXMgdGhlIHdhbnRlZCBvbmUpCisgKiAgICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgKiAgICAgICAgICAgICAgICAgICAgICBoaSA9IG1pOyAibWkgaXMgbGFyZ2VyIHRoYW4gdGFyZ2V0IgorICogICAgICAgICAgICAgIGVsc2UKKyAqICAgICAgICAgICAgICAgICAgICAgIGxvID0gbWkrMTsgIm1pIGlzIHNtYWxsZXIgdGhhbiB0YXJnZXQiCisgKiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpOworICoKKyAqIFRoZSBpbnZhcmlhbnRzIGFyZToKKyAqCisgKiAtIFdoZW4gZW50ZXJpbmcgdGhlIGxvb3AsIGxvIHBvaW50cyBhdCBhIHNsb3QgdGhhdCBpcyBuZXZlcgorICogICBhYm92ZSB0aGUgdGFyZ2V0IChpdCBjb3VsZCBiZSBhdCB0aGUgdGFyZ2V0KSwgaGkgcG9pbnRzIGF0IGEKKyAqICAgc2xvdCB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYWJvdmUgdGhlIHRhcmdldCAoaXQgY2FuIG5ldmVyCisgKiAgIGJlIGF0IHRoZSB0YXJnZXQpLgorICoKKyAqIC0gV2UgZmluZCBhIHBvaW50ICdtaScgYmV0d2VlbiBsbyBhbmQgaGkgKG1pIGNvdWxkIGJlIHRoZSBzYW1lCisgKiAgIGFzIGxvLCBidXQgbmV2ZXIgY2FuIGJlIGFzIHNhbWUgYXMgaGkpLCBhbmQgY2hlY2sgaWYgaXQgaGl0cworICogICB0aGUgdGFyZ2V0LiAgVGhlcmUgYXJlIHRocmVlIGNhc2VzOgorICoKKyAqICAgIC0gaWYgaXQgaXMgYSBoaXQsIHdlIGFyZSBoYXBweS4KKyAqCisgKiAgICAtIGlmIGl0IGlzIHN0cmljdGx5IGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQsIHdlIHNldCBpdCB0byBoaSwKKyAqICAgICAgYW5kIHJlcGVhdCB0aGUgc2VhcmNoLgorICoKKyAqICAgIC0gaWYgaXQgaXMgc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGUgdGFyZ2V0LCB3ZSB1cGRhdGUgbG8gdG8KKyAqICAgICAgb25lIHNsb3QgYWZ0ZXIgaXQsIGJlY2F1c2Ugd2UgYWxsb3cgbG8gdG8gYmUgYXQgdGhlIHRhcmdldC4KKyAqCisgKiAgIElmIHRoZSBsb29wIGV4aXRzLCB0aGVyZSBpcyBubyBtYXRjaGluZyBlbnRyeS4KKyAqCisgKiBXaGVuIGNob29zaW5nICdtaScsIHdlIGRvIG5vdCBoYXZlIHRvIHRha2UgdGhlICJtaWRkbGUiIGJ1dAorICogYW55d2hlcmUgaW4gYmV0d2VlbiBsbyBhbmQgaGksIGFzIGxvbmcgYXMgbG8gPD0gbWkgPCBoaSBpcworICogc2F0aXNmaWVkLiAgV2hlbiB3ZSBzb21laG93IGtub3cgdGhhdCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUKKyAqIHRhcmdldCBhbmQgbG8gaXMgbXVjaCBzaG9ydGVyIHRoYW4gdGhlIHRhcmdldCBhbmQgaGksIHdlIGNvdWxkCisgKiBwaWNrIG1pIHRoYXQgaXMgbXVjaCBjbG9zZXIgdG8gbG8gdGhhbiB0aGUgbWlkd2F5LgorICoKKyAqIE5vdywgd2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQgU0hBLTEgaXMgYSBnb29kIGhhc2gKKyAqIGZ1bmN0aW9uLCBhbmQgYXMgbG9uZyBhcyB0aGVyZSBhcmUgZW5vdWdoIGVudHJpZXMgaW4gdGhlIHRhYmxlLCB3ZQorICogY2FuIGV4cGVjdCB1bmlmb3JtIGRpc3RyaWJ1dGlvbi4gIEFuIGVudHJ5IHRoYXQgYmVnaW5zIHdpdGggZm9yCisgKiBleGFtcGxlICJkZWFkYmVlZi4uLiIgaXMgbXVjaCBsaWtlbHkgdG8gYXBwZWFyIG11Y2ggbGF0ZXIgdGhhbiBpbgorICogdGhlIG1pZHdheSBvZiB0aGUgdGFibGUuICBJdCBjYW4gcmVhc29uYWJseSBiZSBleHBlY3RlZCB0byBiZSBuZWFyCisgKiA4NyUgKDIyMi8yNTYpIGZyb20gdGhlIHRvcCBvZiB0aGUgdGFibGUuCisgKgorICogSG93ZXZlciwgd2UgZG8gbm90IHdhbnQgdG8gcGljayAibWkiIHRvbyBwcmVjaXNlbHkuICBJZiB0aGUgZW50cnkgYXQKKyAqIHRoZSA4NyUgaW4gdGhlIGFib3ZlIGV4YW1wbGUgdHVybnMgb3V0IHRvIGJlIGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQKKyAqIHdlIGFyZSBsb29raW5nIGZvciwgd2Ugd291bGQgZW5kIHVwIG5hcnJvd2luZyB0aGUgc2VhcmNoIHNwYWNlIGRvd24KKyAqIG9ubHkgYnkgMTMlLCBpbnN0ZWFkIG9mIDUwJSB3ZSB3b3VsZCBnZXQgaWYgd2UgZGlkIGEgc2ltcGxlIGJpbmFyeQorICogc2VhcmNoLiAgU28gd2Ugd291bGQgd2FudCB0byBoZWRnZSBvdXIgYmV0cyBieSBiZWluZyBsZXNzIGFnZ3Jlc3NpdmUuCisgKgorICogVGhlIHRhYmxlIGF0ICJ0YWJsZSIgaG9sZHMgYXQgbGVhc3QgIm5yIiBlbnRyaWVzIG9mICJlbGVtX3NpemUiCisgKiBieXRlcyBlYWNoLiAgRWFjaCBlbnRyeSBoYXMgdGhlIFNIQS0xIGtleSBhdCAia2V5X29mZnNldCIuICBUaGUKKyAqIHRhYmxlIGlzIHNvcnRlZCBieSB0aGUgU0hBLTEga2V5IG9mIHRoZSBlbnRyaWVzLiAgVGhlIGNhbGxlciB3YW50cworICogdG8gZmluZCB0aGUgZW50cnkgd2l0aCAia2V5IiwgYW5kIGtub3dzIHRoYXQgdGhlIGVudHJ5IGF0ICJsbyIgaXMKKyAqIG5vdCBoaWdoZXIgdGhhbiB0aGUgZW50cnkgaXQgaXMgbG9va2luZyBmb3IsIGFuZCB0aGF0IHRoZSBlbnRyeSBhdAorICogImhpIiBpcyBoaWdoZXIgdGhhbiB0aGUgZW50cnkgaXQgaXMgbG9va2luZyBmb3IuCisgKi8KK2ludCBzaGExX2VudHJ5X3Bvcyhjb25zdCB2b2lkICp0YWJsZSwKKwkJICAgc2l6ZV90IGVsZW1fc2l6ZSwKKwkJICAgc2l6ZV90IGtleV9vZmZzZXQsCisJCSAgIHVuc2lnbmVkIGxvLCB1bnNpZ25lZCBoaSwgdW5zaWduZWQgbnIsCisJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSkKK3sKKwljb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlID0gdGFibGU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaGlfa2V5LCAqbG9fa2V5OworCXVuc2lnbmVkIG9mc18wOworCXN0YXRpYyBpbnQgZGVidWdfbG9va3VwID0gLTE7CisKKwlpZiAoZGVidWdfbG9va3VwIDwgMCkKKwkJZGVidWdfbG9va3VwID0gISFnZXRlbnYoIkdJVF9ERUJVR19MT09LVVAiKTsKKworCWlmICghbnIgfHwgbG8gPj0gaGkpCisJCXJldHVybiAtMTsKKworCWlmIChuciA9PSBoaSkKKwkJaGlfa2V5ID0gTlVMTDsKKwllbHNlCisJCWhpX2tleSA9IGJhc2UgKyBlbGVtX3NpemUgKiBoaSArIGtleV9vZmZzZXQ7CisJbG9fa2V5ID0gYmFzZSArIGVsZW1fc2l6ZSAqIGxvICsga2V5X29mZnNldDsKKworCW9mc18wID0gMDsKKwlkbyB7CisJCWludCBjbXA7CisJCXVuc2lnbmVkIG9mcywgbWksIHJhbmdlOworCQl1bnNpZ25lZCBsb3YsIGhpdiwga3l2OworCQljb25zdCB1bnNpZ25lZCBjaGFyICptaV9rZXk7CisKKwkJcmFuZ2UgPSBoaSAtIGxvOworCQlpZiAoaGlfa2V5KSB7CisJCQlmb3IgKG9mcyA9IG9mc18wOyBvZnMgPCAyMDsgb2ZzKyspCisJCQkJaWYgKGxvX2tleVtvZnNdICE9IGhpX2tleVtvZnNdKQorCQkJCQlicmVhazsKKwkJCW9mc18wID0gb2ZzOworCQkJLyoKKwkJCSAqIGJ5dGUgMCB0aHJ1IChvZnMtMSkgYXJlIHRoZSBzYW1lIGJldHdlZW4KKwkJCSAqIGxvIGFuZCBoaTsgb2ZzIGlzIHRoZSBmaXJzdCBieXRlIHRoYXQgaXMKKwkJCSAqIGRpZmZlcmVudC4KKwkJCSAqCisJCQkgKiBJZiBvZnM9PTIwLCB0aGVuIG5vIGJ5dGVzIGFyZSBkaWZmZXJlbnQsCisJCQkgKiBtZWFuaW5nIHdlIGhhdmUgZW50cmllcyB3aXRoIGR1cGxpY2F0ZQorCQkJICoga2V5cy4gV2Uga25vdyB0aGF0IHdlIGFyZSBpbiBhIHNvbGlkIHJ1bgorCQkJICogb2YgdGhpcyBlbnRyeSAoYmVjYXVzZSB0aGUgZW50cmllcyBhcmUKKwkJCSAqIHNvcnRlZCwgYW5kIG91ciBsbyBhbmQgaGkgYXJlIHRoZSBzYW1lLAorCQkJICogdGhlcmUgY2FuIGJlIG5vdGhpbmcgYnV0IHRoaXMgc2luZ2xlIGtleQorCQkJICogaW4gYmV0d2VlbikuIFNvIHdlIGNhbiBzdG9wIHRoZSBzZWFyY2guCisJCQkgKiBFaXRoZXIgb25lIG9mIHRoZXNlIGVudHJpZXMgaXMgaXQgKGFuZAorCQkJICogd2UgZG8gbm90IGNhcmUgd2hpY2gpLCBvciB3ZSBkbyBub3QgaGF2ZQorCQkJICogaXQuCisJCQkgKgorCQkJICogRnVydGhlcm1vcmUsIHdlIGtub3cgdGhhdCBvbmUgb2Ygb3VyCisJCQkgKiBlbmRwb2ludHMgbXVzdCBiZSB0aGUgZWRnZSBvZiB0aGUgcnVuIG9mCisJCQkgKiBkdXBsaWNhdGVzLiBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhpcworCQkJICogc2VxdWVuY2U6CisJCQkgKgorCQkJICogICAgIGlkeCAwIDEgMiAzIDQgNQorCQkJICogICAgIGtleSBBIEMgQyBDIEMgRAorCQkJICoKKwkJCSAqIElmIHdlIGFyZSBzZWFyY2hpbmcgZm9yICJCIiwgd2UgbWlnaHQKKwkJCSAqIGhpdCB0aGUgZHVwbGljYXRlIHJ1biBhdCBsbz0xLCBoaT0zCisJCQkgKiAoZS5nLiwgYnkgZmlyc3QgbWk9MywgdGhlbiBtaT0wKS4gQnV0IHdlCisJCQkgKiBjYW4gbmV2ZXIgaGF2ZSBsbyA+IDEsIGJlY2F1c2UgQiA8IEMuCisJCQkgKiBUaGF0IGlzLCBpZiBvdXIga2V5IGlzIGxlc3MgdGhhbiB0aGUKKwkJCSAqIHJ1biwgd2Uga25vdyB0aGF0ICJsbyIgaXMgdGhlIGVkZ2UsIGJ1dAorCQkJICogd2UgY2FuIHNheSBub3RoaW5nIG9mICJoaSIuIFNpbWlsYXJseSwKKwkJCSAqIGlmIG91ciBrZXkgaXMgZ3JlYXRlciB0aGFuIHRoZSBydW4sIHdlCisJCQkgKiBrbm93IHRoYXQgImhpIiBpcyB0aGUgZWRnZSwgYnV0IHdlIGNhbgorCQkJICogc2F5IG5vdGhpbmcgb2YgImxvIi4KKwkJCSAqCisJCQkgKiBUaGVyZWZvcmUgaWYgd2UgZG8gbm90IGZpbmQgaXQsIHdlIGFsc28KKwkJCSAqIGtub3cgd2hlcmUgaXQgd291bGQgZ28gaWYgaXQgZGlkIGV4aXN0OgorCQkJICoganVzdCBvbiB0aGUgZmFyIHNpZGUgb2YgdGhlIGVkZ2UgdGhhdCB3ZQorCQkJICoga25vdyBhYm91dC4KKwkJCSAqLworCQkJaWYgKG9mcyA9PSAyMCkgeworCQkJCW1pID0gbG87CisJCQkJbWlfa2V5ID0gYmFzZSArIGVsZW1fc2l6ZSAqIG1pICsga2V5X29mZnNldDsKKwkJCQljbXAgPSBtZW1jbXAobWlfa2V5LCBrZXksIDIwKTsKKwkJCQlpZiAoIWNtcCkKKwkJCQkJcmV0dXJuIG1pOworCQkJCWlmIChjbXAgPCAwKQorCQkJCQlyZXR1cm4gLTEgLSBoaTsKKwkJCQllbHNlCisJCQkJCXJldHVybiAtMSAtIGxvOworCQkJfQorCisJCQloaXYgPSBoaV9rZXlbb2ZzXzBdOworCQkJaWYgKG9mc18wIDwgMTkpCisJCQkJaGl2ID0gKGhpdiA8PCA4KSB8IGhpX2tleVtvZnNfMCsxXTsKKwkJfSBlbHNlIHsKKwkJCWhpdiA9IDI1NjsKKwkJCWlmIChvZnNfMCA8IDE5KQorCQkJCWhpdiA8PD0gODsKKwkJfQorCQlsb3YgPSBsb19rZXlbb2ZzXzBdOworCQlreXYgPSBrZXlbb2ZzXzBdOworCQlpZiAob2ZzXzAgPCAxOSkgeworCQkJbG92ID0gKGxvdiA8PCA4KSB8IGxvX2tleVtvZnNfMCsxXTsKKwkJCWt5diA9IChreXYgPDwgOCkgfCBrZXlbb2ZzXzArMV07CisJCX0KKwkJYXNzZXJ0KGxvdiA8IGhpdik7CisKKwkJaWYgKGt5diA8IGxvdikKKwkJCXJldHVybiAtMSAtIGxvOworCQlpZiAoaGl2IDwga3l2KQorCQkJcmV0dXJuIC0xIC0gaGk7CisKKwkJLyoKKwkJICogRXZlbiBpZiB3ZSBrbm93IHRoZSB0YXJnZXQgaXMgbXVjaCBjbG9zZXIgdG8gJ2hpJworCQkgKiB0aGFuICdsbycsIGlmIHdlIHBpY2sgdG9vIHByZWNpc2VseSBhbmQgb3ZlcnNob290CisJCSAqIChlLmcuIHdoZW4gd2Uga25vdyAnbWknIGlzIGNsb3NlciB0byAnaGknIHRoYW4gdG8KKwkJICogJ2xvJywgcGljayAnbWknIHRoYXQgaXMgaGlnaGVyIHRoYW4gdGhlIHRhcmdldCksIHdlCisJCSAqIGVuZCB1cCBuYXJyb3dpbmcgdGhlIHNlYXJjaCBzcGFjZSBieSBhIHNtYWxsZXIKKwkJICogYW1vdW50IChpLmUuIHRoZSBkaXN0YW5jZSBiZXR3ZWVuICdtaScgYW5kICdoaScpCisJCSAqIHRoYW4gd2hhdCB3ZSB3b3VsZCBoYXZlIChpLmUuIGFib3V0IGhhbGYgb2YgJ2xvJworCQkgKiBhbmQgJ2hpJykuICBIZWRnZSBvdXIgYmV0cyB0byBwaWNrICdtaScgbGVzcworCQkgKiBhZ2dyZXNzaXZlbHksIGkuZS4gbWFrZSAnbWknIGEgYml0IGNsb3NlciB0byB0aGUKKwkJICogbWlkZGxlIHRoYW4gd2Ugd291bGQgb3RoZXJ3aXNlIHBpY2suCisJCSAqLworCQlreXYgPSAoa3l2ICogNiArIGxvdiArIGhpdikgLyA4OworCQlpZiAobG92IDwgaGl2IC0gMSkgeworCQkJaWYgKGt5diA9PSBsb3YpCisJCQkJa3l2Kys7CisJCQllbHNlIGlmIChreXYgPT0gaGl2KQorCQkJCWt5di0tOworCQl9CisJCW1pID0gKHJhbmdlIC0gMSkgKiAoa3l2IC0gbG92KSAvIChoaXYgLSBsb3YpICsgbG87CisKKwkJaWYgKGRlYnVnX2xvb2t1cCkgeworCQkJcHJpbnRmKCJsbyAldSBoaSAldSByZyAldSBtaSAldSAiLCBsbywgaGksIHJhbmdlLCBtaSk7CisJCQlwcmludGYoIm9mcyAldSBsb3YgJXgsIGhpdiAleCwga3l2ICV4XG4iLAorCQkJICAgICAgIG9mc18wLCBsb3YsIGhpdiwga3l2KTsKKwkJfQorCQlpZiAoIShsbyA8PSBtaSAmJiBtaSA8IGhpKSkKKwkJCWRpZSgiYXNzZXJ0aW9uIGZhaWx1cmUgbG8gJXUgbWkgJXUgaGkgJXUgJXMiLAorCQkJICAgIGxvLCBtaSwgaGksIHNoYTFfdG9faGV4KGtleSkpOworCisJCW1pX2tleSA9IGJhc2UgKyBlbGVtX3NpemUgKiBtaSArIGtleV9vZmZzZXQ7CisJCWNtcCA9IG1lbWNtcChtaV9rZXkgKyBvZnNfMCwga2V5ICsgb2ZzXzAsIDIwIC0gb2ZzXzApOworCQlpZiAoIWNtcCkKKwkJCXJldHVybiBtaTsKKwkJaWYgKGNtcCA+IDApIHsKKwkJCWhpID0gbWk7CisJCQloaV9rZXkgPSBtaV9rZXk7CisJCX0gZWxzZSB7CisJCQlsbyA9IG1pICsgMTsKKwkJCWxvX2tleSA9IG1pX2tleSArIGVsZW1fc2l6ZTsKKwkJfQorCX0gd2hpbGUgKGxvIDwgaGkpOworCXJldHVybiAtbG8tMTsKK30KZGlmZiAtLWdpdCBhL3NoYTEtbG9va3VwLmggYi9zaGExLWxvb2t1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYWYyODUKLS0tIC9kZXYvbnVsbAorKysgYi9zaGExLWxvb2t1cC5oCkBAIC0wLDAgKzEsMTYgQEAKKyNpZm5kZWYgU0hBMV9MT09LVVBfSAorI2RlZmluZSBTSEExX0xPT0tVUF9ICisKK3R5cGVkZWYgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMV9hY2Nlc3NfZm4oc2l6ZV90IGluZGV4LCB2b2lkICp0YWJsZSk7CisKK2V4dGVybiBpbnQgc2hhMV9wb3MoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJICAgIHZvaWQgKnRhYmxlLAorCQkgICAgc2l6ZV90IG5yLAorCQkgICAgc2hhMV9hY2Nlc3NfZm4gZm4pOworCitleHRlcm4gaW50IHNoYTFfZW50cnlfcG9zKGNvbnN0IHZvaWQgKnRhYmxlLAorCQkJICBzaXplX3QgZWxlbV9zaXplLAorCQkJICBzaXplX3Qga2V5X29mZnNldCwKKwkJCSAgdW5zaWduZWQgbG8sIHVuc2lnbmVkIGhpLCB1bnNpZ25lZCBuciwKKwkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2hhMV9maWxlLmMgYi9zaGExX2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDg5NmZmCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMV9maWxlLmMKQEAgLTAsMCArMSwzNjM4IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICoKKyAqIFRoaXMgaGFuZGxlcyBiYXNpYyBnaXQgc2hhMSBvYmplY3QgZmlsZXMgLSBwYWNraW5nLCB1bnBhY2tpbmcsCisgKiBjcmVhdGlvbiBldGMuCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAibG9ja2ZpbGUuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgInBhY2suaCIKKyNpbmNsdWRlICJibG9iLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInBhY2stcmV2aW5kZXguaCIKKyNpbmNsdWRlICJzaGExLWxvb2t1cC5oIgorI2luY2x1ZGUgImJ1bGstY2hlY2tpbi5oIgorI2luY2x1ZGUgInN0cmVhbWluZy5oIgorI2luY2x1ZGUgImRpci5oIgorCisjaWZuZGVmIE9fTk9BVElNRQorI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX1BQQ19fKSkKKyNkZWZpbmUgT19OT0FUSU1FIDAxMDAwMDAwCisjZWxzZQorI2RlZmluZSBPX05PQVRJTUUgMAorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBTWl9GTVQgUFJJdU1BWAorc3RhdGljIGlubGluZSB1aW50bWF4X3Qgc3pfZm10KHNpemVfdCBzKSB7IHJldHVybiBzOyB9CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIgbnVsbF9zaGExWzIwXTsKKworLyoKKyAqIFRoaXMgaXMgbWVhbnQgdG8gaG9sZCBhICpzbWFsbCogbnVtYmVyIG9mIG9iamVjdHMgdGhhdCB5b3Ugd291bGQKKyAqIHdhbnQgcmVhZF9zaGExX2ZpbGUoKSB0byBiZSBhYmxlIHRvIHJldHVybiwgYnV0IHlldCB5b3UgZG8gbm90IHdhbnQKKyAqIHRvIHdyaXRlIHRoZW0gaW50byB0aGUgb2JqZWN0IHN0b3JlIChlLmcuIGEgYnJvd3NlLW9ubHkKKyAqIGFwcGxpY2F0aW9uKS4KKyAqLworc3RhdGljIHN0cnVjdCBjYWNoZWRfb2JqZWN0IHsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpidWY7CisJdW5zaWduZWQgbG9uZyBzaXplOworfSAqY2FjaGVkX29iamVjdHM7CitzdGF0aWMgaW50IGNhY2hlZF9vYmplY3RfbnIsIGNhY2hlZF9vYmplY3RfYWxsb2M7CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVkX29iamVjdCBlbXB0eV90cmVlID0geworCUVNUFRZX1RSRUVfU0hBMV9CSU5fTElURVJBTCwKKwlPQkpfVFJFRSwKKwkiIiwKKwkwCit9OworCisvKgorICogQSBwb2ludGVyIHRvIHRoZSBsYXN0IHBhY2tlZF9naXQgaW4gd2hpY2ggYW4gb2JqZWN0IHdhcyBmb3VuZC4KKyAqIFdoZW4gYW4gb2JqZWN0IGlzIHNvdWdodCwgd2UgbG9vayBpbiB0aGlzIHBhY2tmaWxlIGZpcnN0LCBiZWNhdXNlCisgKiBvYmplY3RzIHRoYXQgYXJlIGxvb2tlZCB1cCBhdCBzaW1pbGFyIHRpbWVzIGFyZSBvZnRlbiBpbiB0aGUgc2FtZQorICogcGFja2ZpbGUgYXMgb25lIGFub3RoZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFja2VkX2dpdCAqbGFzdF9mb3VuZF9wYWNrOworCitzdGF0aWMgc3RydWN0IGNhY2hlZF9vYmplY3QgKmZpbmRfY2FjaGVkX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBpOworCXN0cnVjdCBjYWNoZWRfb2JqZWN0ICpjbyA9IGNhY2hlZF9vYmplY3RzOworCisJZm9yIChpID0gMDsgaSA8IGNhY2hlZF9vYmplY3RfbnI7IGkrKywgY28rKykgeworCQlpZiAoIWhhc2hjbXAoY28tPnNoYTEsIHNoYTEpKQorCQkJcmV0dXJuIGNvOworCX0KKwlpZiAoIWhhc2hjbXAoc2hhMSwgZW1wdHlfdHJlZS5zaGExKSkKKwkJcmV0dXJuICZlbXB0eV90cmVlOworCXJldHVybiBOVUxMOworfQorCitpbnQgbWtkaXJfaW5fZ2l0ZGlyKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKG1rZGlyKHBhdGgsIDA3NzcpKSB7CisJCWludCBzYXZlZF9lcnJubyA9IGVycm5vOworCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQlyZXR1cm4gLTE7CisJCS8qCisJCSAqIEFyZSB3ZSBsb29raW5nIGF0IGEgcGF0aCBpbiBhIHN5bWxpbmtlZCB3b3JrdHJlZQorCQkgKiB3aG9zZSBvcmlnaW5hbCByZXBvc2l0b3J5IGRvZXMgbm90IHlldCBoYXZlIGl0PworCQkgKiBlLmcuIC5naXQvcnItY2FjaGUgcG9pbnRpbmcgYXQgaXRzIG9yaWdpbmFsCisJCSAqIHJlcG9zaXRvcnkgaW4gd2hpY2ggdGhlIHVzZXIgaGFzbid0IHBlcmZvcm1lZCBhbnkKKwkJICogY29uZmxpY3QgcmVzb2x1dGlvbiB5ZXQ/CisJCSAqLworCQlpZiAobHN0YXQocGF0aCwgJnN0KSB8fCAhU19JU0xOSyhzdC5zdF9tb2RlKSB8fAorCQkgICAgc3RyYnVmX3JlYWRsaW5rKCZzYiwgcGF0aCwgc3Quc3Rfc2l6ZSkgfHwKKwkJICAgICFpc19hYnNvbHV0ZV9wYXRoKHNiLmJ1ZikgfHwKKwkJICAgIG1rZGlyKHNiLmJ1ZiwgMDc3NykpIHsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQkJcmV0dXJuIC0xOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJfQorCXJldHVybiBhZGp1c3Rfc2hhcmVkX3Blcm0ocGF0aCk7Cit9CisKK2VudW0gc2NsZF9lcnJvciBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGNoYXIgKnBhdGgpCit7CisJY2hhciAqbmV4dF9jb21wb25lbnQgPSBwYXRoICsgb2Zmc2V0XzFzdF9jb21wb25lbnQocGF0aCk7CisJZW51bSBzY2xkX2Vycm9yIHJldCA9IFNDTERfT0s7CisKKwl3aGlsZSAocmV0ID09IFNDTERfT0sgJiYgbmV4dF9jb21wb25lbnQpIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisJCWNoYXIgKnNsYXNoID0gbmV4dF9jb21wb25lbnQsIHNsYXNoX2NoYXJhY3RlcjsKKworCQl3aGlsZSAoKnNsYXNoICYmICFpc19kaXJfc2VwKCpzbGFzaCkpCisJCQlzbGFzaCsrOworCisJCWlmICghKnNsYXNoKQorCQkJYnJlYWs7CisKKwkJbmV4dF9jb21wb25lbnQgPSBzbGFzaCArIDE7CisJCXdoaWxlIChpc19kaXJfc2VwKCpuZXh0X2NvbXBvbmVudCkpCisJCQluZXh0X2NvbXBvbmVudCsrOworCQlpZiAoISpuZXh0X2NvbXBvbmVudCkKKwkJCWJyZWFrOworCisJCXNsYXNoX2NoYXJhY3RlciA9ICpzbGFzaDsKKwkJKnNsYXNoID0gJ1wwJzsKKwkJaWYgKCFzdGF0KHBhdGgsICZzdCkpIHsKKwkJCS8qIHBhdGggZXhpc3RzICovCisJCQlpZiAoIVNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQkJcmV0ID0gU0NMRF9FWElTVFM7CisJCX0gZWxzZSBpZiAobWtkaXIocGF0aCwgMDc3NykpIHsKKwkJCWlmIChlcnJubyA9PSBFRVhJU1QgJiYKKwkJCSAgICAhc3RhdChwYXRoLCAmc3QpICYmIFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCQkJOyAvKiBzb21lYm9keSBjcmVhdGVkIGl0IHNpbmNlIHdlIGNoZWNrZWQgKi8KKwkJCWVsc2UgaWYgKGVycm5vID09IEVOT0VOVCkKKwkJCQkvKgorCQkJCSAqIEVpdGhlciBta2RpcigpIGZhaWxlZCBiZWNhdXNlCisJCQkJICogc29tZWJvZHkganVzdCBwcnVuZWQgdGhlIGNvbnRhaW5pbmcKKwkJCQkgKiBkaXJlY3RvcnksIG9yIHN0YXQoKSBmYWlsZWQgYmVjYXVzZQorCQkJCSAqIHRoZSBmaWxlIHRoYXQgd2FzIGluIG91ciB3YXkgd2FzCisJCQkJICoganVzdCByZW1vdmVkLiAgRWl0aGVyIHdheSwgaW5mb3JtCisJCQkJICogdGhlIGNhbGxlciB0aGF0IGl0IG1pZ2h0IGJlIHdvcnRoCisJCQkJICogdHJ5aW5nIGFnYWluOgorCQkJCSAqLworCQkJCXJldCA9IFNDTERfVkFOSVNIRUQ7CisJCQllbHNlCisJCQkJcmV0ID0gU0NMRF9GQUlMRUQ7CisJCX0gZWxzZSBpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKHBhdGgpKSB7CisJCQlyZXQgPSBTQ0xEX1BFUk1TOworCQl9CisJCSpzbGFzaCA9IHNsYXNoX2NoYXJhY3RlcjsKKwl9CisJcmV0dXJuIHJldDsKK30KKworZW51bSBzY2xkX2Vycm9yIHNhZmVfY3JlYXRlX2xlYWRpbmdfZGlyZWN0b3JpZXNfY29uc3QoY29uc3QgY2hhciAqcGF0aCkKK3sKKwkvKiBwYXRoIHBvaW50cyB0byBjYWNoZSBlbnRyaWVzLCBzbyB4c3RyZHVwIGJlZm9yZSBtZXNzaW5nIHdpdGggaXQgKi8KKwljaGFyICpidWYgPSB4c3RyZHVwKHBhdGgpOworCWVudW0gc2NsZF9lcnJvciByZXN1bHQgPSBzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGJ1Zik7CisJZnJlZShidWYpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGZpbGxfc2hhMV9wYXRoKGNoYXIgKnBhdGhidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJc3RhdGljIGNoYXIgaGV4W10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisJCXVuc2lnbmVkIGludCB2YWwgPSBzaGExW2ldOworCQljaGFyICpwb3MgPSBwYXRoYnVmICsgaSoyICsgKGkgPiAwKTsKKwkJKnBvcysrID0gaGV4W3ZhbCA+PiA0XTsKKwkJKnBvcyA9IGhleFt2YWwgJiAweGZdOworCX0KK30KKworY29uc3QgY2hhciAqc2hhMV9maWxlX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0aWMgY2hhciBidWZbUEFUSF9NQVhdOworCWNvbnN0IGNoYXIgKm9iamRpcjsKKwlpbnQgbGVuOworCisJb2JqZGlyID0gZ2V0X29iamVjdF9kaXJlY3RvcnkoKTsKKwlsZW4gPSBzdHJsZW4ob2JqZGlyKTsKKworCS8qICcvJyArIHNoYTEoMikgKyAnLycgKyBzaGExKDM4KSArICdcMCcgKi8KKwlpZiAobGVuICsgNDMgPiBQQVRIX01BWCkKKwkJZGllKCJpbnNhbmVseSBsb25nIG9iamVjdCBkaXJlY3RvcnkgJXMiLCBvYmpkaXIpOworCW1lbWNweShidWYsIG9iamRpciwgbGVuKTsKKwlidWZbbGVuXSA9ICcvJzsKKwlidWZbbGVuKzNdID0gJy8nOworCWJ1ZltsZW4rNDJdID0gJ1wwJzsKKwlmaWxsX3NoYTFfcGF0aChidWYgKyBsZW4gKyAxLCBzaGExKTsKKwlyZXR1cm4gYnVmOworfQorCisvKgorICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBwYWNrIG9yIGluZGV4IGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkIHNoYTEKKyAqIGluIGl0cyBmaWxlbmFtZS4gICpiYXNlIGFuZCAqbmFtZSBhcmUgc2NyYXRjaCBzcGFjZSB0aGF0IG11c3QgYmUKKyAqIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuICB3aGljaCBzaG91bGQgYmUgInBhY2siIG9yICJpZHgiLgorICovCitzdGF0aWMgY2hhciAqc2hhMV9nZXRfcGFja19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJc3RydWN0IHN0cmJ1ZiAqYnVmLAorCQkJCWNvbnN0IGNoYXIgKndoaWNoKQoreworCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiVzL3BhY2svcGFjay0lcy4lcyIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCksCisJCSAgICBzaGExX3RvX2hleChzaGExKSwgd2hpY2gpOworCXJldHVybiBidWYtPmJ1ZjsKK30KKworY2hhciAqc2hhMV9wYWNrX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlyZXR1cm4gc2hhMV9nZXRfcGFja19uYW1lKHNoYTEsICZidWYsICJwYWNrIik7Cit9CisKK2NoYXIgKnNoYTFfcGFja19pbmRleF9uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJcmV0dXJuIHNoYTFfZ2V0X3BhY2tfbmFtZShzaGExLCAmYnVmLCAiaWR4Iik7Cit9CisKK3N0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICphbHRfb2RiX2xpc3Q7CitzdGF0aWMgc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKiphbHRfb2RiX3RhaWw7CisKKy8qCisgKiBQcmVwYXJlIGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2UgcmVnaXN0cnkuCisgKgorICogVGhlIHZhcmlhYmxlIGFsdF9vZGJfbGlzdCBwb2ludHMgYXQgdGhlIGxpc3Qgb2Ygc3RydWN0CisgKiBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlLiAgVGhlIGVsZW1lbnRzIG9uIHRoaXMgbGlzdCBjb21lIGZyb20KKyAqIG5vbi1lbXB0eSBlbGVtZW50cyBmcm9tIGNvbG9uIHNlcGFyYXRlZCBBTFRFUk5BVEVfREJfRU5WSVJPTk1FTlQKKyAqIGVudmlyb25tZW50IHZhcmlhYmxlLCBhbmQgJEdJVF9PQkpFQ1RfRElSRUNUT1JZL2luZm8vYWx0ZXJuYXRlcywKKyAqIHdob3NlIGNvbnRlbnRzIGlzIHNpbWlsYXIgdG8gdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZSBidXQgY2FuIGJlCisgKiBMRiBzZXBhcmF0ZWQuICBJdHMgYmFzZSBwb2ludHMgYXQgYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIgdGhhdAorICogY29udGFpbnMgIi90aGUvZGlyZWN0b3J5L2NvcnJlc3BvbmRpbmcvdG8vLmdpdC9vYmplY3RzLy4uLiIsIHdoaWxlCisgKiBpdHMgbmFtZSBwb2ludHMganVzdCBhZnRlciB0aGUgc2xhc2ggYXQgdGhlIGVuZCBvZiAiLmdpdC9vYmplY3RzLyIKKyAqIGluIHRoZSBleGFtcGxlIGFib3ZlLCBhbmQgaGFzIGVub3VnaCBzcGFjZSB0byBob2xkIDQwLWJ5dGUgaGV4CisgKiBTSEExLCBhbiBleHRyYSBzbGFzaCBmb3IgdGhlIGZpcnN0IGxldmVsIGluZGlyZWN0aW9uLCBhbmQgdGhlCisgKiB0ZXJtaW5hdGluZyBOVUwuCisgKi8KK3N0YXRpYyBpbnQgbGlua19hbHRfb2RiX2VudHJ5KGNvbnN0IGNoYXIgKmVudHJ5LCBjb25zdCBjaGFyICpyZWxhdGl2ZV9iYXNlLAorCWludCBkZXB0aCwgY29uc3QgY2hhciAqbm9ybWFsaXplZF9vYmpkaXIpCit7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmVudDsKKwlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0OworCWludCBwZnhsZW4sIGVudGxlbjsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGhidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghaXNfYWJzb2x1dGVfcGF0aChlbnRyeSkgJiYgcmVsYXRpdmVfYmFzZSkgeworCQlzdHJidWZfYWRkc3RyKCZwYXRoYnVmLCByZWFsX3BhdGgocmVsYXRpdmVfYmFzZSkpOworCQlzdHJidWZfYWRkY2goJnBhdGhidWYsICcvJyk7CisJfQorCXN0cmJ1Zl9hZGRzdHIoJnBhdGhidWYsIGVudHJ5KTsKKworCW5vcm1hbGl6ZV9wYXRoX2NvcHkocGF0aGJ1Zi5idWYsIHBhdGhidWYuYnVmKTsKKworCXBmeGxlbiA9IHN0cmxlbihwYXRoYnVmLmJ1Zik7CisKKwkvKgorCSAqIFRoZSB0cmFpbGluZyBzbGFzaCBhZnRlciB0aGUgZGlyZWN0b3J5IG5hbWUgaXMgZ2l2ZW4gYnkKKwkgKiB0aGlzIGZ1bmN0aW9uIGF0IHRoZSBlbmQuIFJlbW92ZSBkdXBsaWNhdGVzLgorCSAqLworCXdoaWxlIChwZnhsZW4gJiYgcGF0aGJ1Zi5idWZbcGZ4bGVuLTFdID09ICcvJykKKwkJcGZ4bGVuIC09IDE7CisKKwllbnRsZW4gPSBwZnhsZW4gKyA0MzsgLyogJy8nICsgMiBoZXggKyAnLycgKyAzOCBoZXggKyBOVUwgKi8KKwllbnQgPSB4bWFsbG9jKHNpemVvZigqZW50KSArIGVudGxlbik7CisJbWVtY3B5KGVudC0+YmFzZSwgcGF0aGJ1Zi5idWYsIHBmeGxlbik7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGhidWYpOworCisJZW50LT5uYW1lID0gZW50LT5iYXNlICsgcGZ4bGVuICsgMTsKKwllbnQtPmJhc2VbcGZ4bGVuICsgM10gPSAnLyc7CisJZW50LT5iYXNlW3BmeGxlbl0gPSBlbnQtPmJhc2VbZW50bGVuLTFdID0gMDsKKworCS8qIERldGVjdCBjYXNlcyB3aGVyZSBhbHRlcm5hdGUgZGlzYXBwZWFyZWQgKi8KKwlpZiAoIWlzX2RpcmVjdG9yeShlbnQtPmJhc2UpKSB7CisJCWVycm9yKCJvYmplY3QgZGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0OyAiCisJCSAgICAgICJjaGVjayAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzLiIsCisJCSAgICAgIGVudC0+YmFzZSk7CisJCWZyZWUoZW50KTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIFByZXZlbnQgdGhlIGNvbW1vbiBtaXN0YWtlIG9mIGxpc3RpbmcgdGhlIHNhbWUKKwkgKiB0aGluZyB0d2ljZSwgb3Igb2JqZWN0IGRpcmVjdG9yeSBpdHNlbGYuCisJICovCisJZm9yIChhbHQgPSBhbHRfb2RiX2xpc3Q7IGFsdDsgYWx0ID0gYWx0LT5uZXh0KSB7CisJCWlmIChwZnhsZW4gPT0gYWx0LT5uYW1lIC0gYWx0LT5iYXNlIC0gMSAmJgorCQkgICAgIW1lbWNtcChlbnQtPmJhc2UsIGFsdC0+YmFzZSwgcGZ4bGVuKSkgeworCQkJZnJlZShlbnQpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCWlmICghc3RyY21wX2ljYXNlKGVudC0+YmFzZSwgbm9ybWFsaXplZF9vYmpkaXIpKSB7CisJCWZyZWUoZW50KTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIGFkZCB0aGUgYWx0ZXJuYXRlIGVudHJ5ICovCisJKmFsdF9vZGJfdGFpbCA9IGVudDsKKwlhbHRfb2RiX3RhaWwgPSAmKGVudC0+bmV4dCk7CisJZW50LT5uZXh0ID0gTlVMTDsKKworCS8qIHJlY3Vyc2l2ZWx5IGFkZCBhbHRlcm5hdGVzICovCisJcmVhZF9pbmZvX2FsdGVybmF0ZXMoZW50LT5iYXNlLCBkZXB0aCArIDEpOworCisJZW50LT5iYXNlW3BmeGxlbl0gPSAnLyc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbGlua19hbHRfb2RiX2VudHJpZXMoY29uc3QgY2hhciAqYWx0LCBpbnQgbGVuLCBpbnQgc2VwLAorCQkJCSBjb25zdCBjaGFyICpyZWxhdGl2ZV9iYXNlLCBpbnQgZGVwdGgpCit7CisJc3RydWN0IHN0cmluZ19saXN0IGVudHJpZXMgPSBTVFJJTkdfTElTVF9JTklUX05PRFVQOworCWNoYXIgKmFsdF9jb3B5OworCWludCBpOworCXN0cnVjdCBzdHJidWYgb2JqZGlyYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZGVwdGggPiA1KSB7CisJCWVycm9yKCIlczogaWdub3JpbmcgYWx0ZXJuYXRlIG9iamVjdCBzdG9yZXMsIG5lc3RpbmcgdG9vIGRlZXAuIiwKKwkJCQlyZWxhdGl2ZV9iYXNlKTsKKwkJcmV0dXJuOworCX0KKworCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmb2JqZGlyYnVmLCBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpKTsKKwlub3JtYWxpemVfcGF0aF9jb3B5KG9iamRpcmJ1Zi5idWYsIG9iamRpcmJ1Zi5idWYpOworCisJYWx0X2NvcHkgPSB4bWVtZHVweihhbHQsIGxlbik7CisJc3RyaW5nX2xpc3Rfc3BsaXRfaW5fcGxhY2UoJmVudHJpZXMsIGFsdF9jb3B5LCBzZXAsIC0xKTsKKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllcy5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmVudHJ5ID0gZW50cmllcy5pdGVtc1tpXS5zdHJpbmc7CisJCWlmIChlbnRyeVswXSA9PSAnXDAnIHx8IGVudHJ5WzBdID09ICcjJykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlzX2Fic29sdXRlX3BhdGgoZW50cnkpICYmIGRlcHRoKSB7CisJCQllcnJvcigiJXM6IGlnbm9yaW5nIHJlbGF0aXZlIGFsdGVybmF0ZSBvYmplY3Qgc3RvcmUgJXMiLAorCQkJCQlyZWxhdGl2ZV9iYXNlLCBlbnRyeSk7CisJCX0gZWxzZSB7CisJCQlsaW5rX2FsdF9vZGJfZW50cnkoZW50cnksIHJlbGF0aXZlX2Jhc2UsIGRlcHRoLCBvYmpkaXJidWYuYnVmKTsKKwkJfQorCX0KKwlzdHJpbmdfbGlzdF9jbGVhcigmZW50cmllcywgMCk7CisJZnJlZShhbHRfY29weSk7CisJc3RyYnVmX3JlbGVhc2UoJm9iamRpcmJ1Zik7Cit9CisKK3ZvaWQgcmVhZF9pbmZvX2FsdGVybmF0ZXMoY29uc3QgY2hhciAqIHJlbGF0aXZlX2Jhc2UsIGludCBkZXB0aCkKK3sKKwljaGFyICptYXA7CisJc2l6ZV90IG1hcHN6OworCXN0cnVjdCBzdGF0IHN0OworCWNoYXIgKnBhdGg7CisJaW50IGZkOworCisJcGF0aCA9IHhzdHJmbXQoIiVzL2luZm8vYWx0ZXJuYXRlcyIsIHJlbGF0aXZlX2Jhc2UpOworCWZkID0gZ2l0X29wZW5fbm9hdGltZShwYXRoKTsKKwlmcmVlKHBhdGgpOworCWlmIChmZCA8IDApCisJCXJldHVybjsKKwlpZiAoZnN0YXQoZmQsICZzdCkgfHwgKHN0LnN0X3NpemUgPT0gMCkpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm47CisJfQorCW1hcHN6ID0geHNpemVfdChzdC5zdF9zaXplKTsKKwltYXAgPSB4bW1hcChOVUxMLCBtYXBzeiwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCWNsb3NlKGZkKTsKKworCWxpbmtfYWx0X29kYl9lbnRyaWVzKG1hcCwgbWFwc3osICdcbicsIHJlbGF0aXZlX2Jhc2UsIGRlcHRoKTsKKworCW11bm1hcChtYXAsIG1hcHN6KTsKK30KKwordm9pZCBhZGRfdG9fYWx0ZXJuYXRlc19maWxlKGNvbnN0IGNoYXIgKnJlZmVyZW5jZSkKK3sKKwlzdHJ1Y3QgbG9ja19maWxlICpsb2NrID0geGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGxvY2tfZmlsZSkpOworCWNoYXIgKmFsdHMgPSBnaXRfcGF0aGR1cCgib2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMiKTsKKwlGSUxFICppbiwgKm91dDsKKworCWhvbGRfbG9ja19maWxlX2Zvcl91cGRhdGUobG9jaywgYWx0cywgTE9DS19ESUVfT05fRVJST1IpOworCW91dCA9IGZkb3Blbl9sb2NrX2ZpbGUobG9jaywgInciKTsKKwlpZiAoIW91dCkKKwkJZGllX2Vycm5vKCJ1bmFibGUgdG8gZmRvcGVuIGFsdGVybmF0ZXMgbG9ja2ZpbGUiKTsKKworCWluID0gZm9wZW4oYWx0cywgInIiKTsKKwlpZiAoaW4pIHsKKwkJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJCWludCBmb3VuZCA9IDA7CisKKwkJd2hpbGUgKHN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBpbiwgJ1xuJykgIT0gRU9GKSB7CisJCQlpZiAoIXN0cmNtcChyZWZlcmVuY2UsIGxpbmUuYnVmKSkgeworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZwcmludGZfb3JfZGllKG91dCwgIiVzXG4iLCBsaW5lLmJ1Zik7CisJCX0KKworCQlzdHJidWZfcmVsZWFzZSgmbGluZSk7CisJCWZjbG9zZShpbik7CisKKwkJaWYgKGZvdW5kKSB7CisJCQlyb2xsYmFja19sb2NrX2ZpbGUobG9jayk7CisJCQlsb2NrID0gTlVMTDsKKwkJfQorCX0KKwllbHNlIGlmIChlcnJubyAhPSBFTk9FTlQpCisJCWRpZV9lcnJubygidW5hYmxlIHRvIHJlYWQgYWx0ZXJuYXRlcyBmaWxlIik7CisKKwlpZiAobG9jaykgeworCQlmcHJpbnRmX29yX2RpZShvdXQsICIlc1xuIiwgcmVmZXJlbmNlKTsKKwkJaWYgKGNvbW1pdF9sb2NrX2ZpbGUobG9jaykpCisJCQlkaWVfZXJybm8oInVuYWJsZSB0byBtb3ZlIG5ldyBhbHRlcm5hdGVzIGZpbGUgaW50byBwbGFjZSIpOworCQlpZiAoYWx0X29kYl90YWlsKQorCQkJbGlua19hbHRfb2RiX2VudHJpZXMocmVmZXJlbmNlLCBzdHJsZW4ocmVmZXJlbmNlKSwgJ1xuJywgTlVMTCwgMCk7CisJfQorCWZyZWUoYWx0cyk7Cit9CisKK2ludCBmb3JlYWNoX2FsdF9vZGIoYWx0X29kYl9mbiBmbiwgdm9pZCAqY2IpCit7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmVudDsKKwlpbnQgciA9IDA7CisKKwlwcmVwYXJlX2FsdF9vZGIoKTsKKwlmb3IgKGVudCA9IGFsdF9vZGJfbGlzdDsgZW50OyBlbnQgPSBlbnQtPm5leHQpIHsKKwkJciA9IGZuKGVudCwgY2IpOworCQlpZiAocikKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gcjsKK30KKwordm9pZCBwcmVwYXJlX2FsdF9vZGIodm9pZCkKK3sKKwljb25zdCBjaGFyICphbHQ7CisKKwlpZiAoYWx0X29kYl90YWlsKQorCQlyZXR1cm47CisKKwlhbHQgPSBnZXRlbnYoQUxURVJOQVRFX0RCX0VOVklST05NRU5UKTsKKwlpZiAoIWFsdCkgYWx0ID0gIiI7CisKKwlhbHRfb2RiX3RhaWwgPSAmYWx0X29kYl9saXN0OworCWxpbmtfYWx0X29kYl9lbnRyaWVzKGFsdCwgc3RybGVuKGFsdCksIFBBVEhfU0VQLCBOVUxMLCAwKTsKKworCXJlYWRfaW5mb19hbHRlcm5hdGVzKGdldF9vYmplY3RfZGlyZWN0b3J5KCksIDApOworfQorCisvKiBSZXR1cm5zIDEgaWYgd2UgaGF2ZSBzdWNjZXNzZnVsbHkgZnJlc2hlbmVkIHRoZSBmaWxlLCAwIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBpbnQgZnJlc2hlbl9maWxlKGNvbnN0IGNoYXIgKmZuKQoreworCXN0cnVjdCB1dGltYnVmIHQ7CisJdC5hY3RpbWUgPSB0Lm1vZHRpbWUgPSB0aW1lKE5VTEwpOworCXJldHVybiAhdXRpbWUoZm4sICZ0KTsKK30KKworLyoKKyAqIEFsbCBvZiB0aGUgY2hlY2tfYW5kX2ZyZXNoZW4gZnVuY3Rpb25zIHJldHVybiAxIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgd2FzCisgKiBmcmVzaGVuZWQgKGlmIGZyZXNoZW5pbmcgd2FzIHJlcXVlc3RlZCksIDAgb3RoZXJ3aXNlLiBJZiB0aGV5IHJldHVybgorICogMCwgeW91IHNob3VsZCBub3QgYXNzdW1lIHRoYXQgaXQgaXMgc2FmZSB0byBza2lwIGEgd3JpdGUgb2YgdGhlIG9iamVjdCAoaXQKKyAqIGVpdGhlciBkb2VzIG5vdCBleGlzdCBvbiBkaXNrLCBvciBoYXMgYSBzdGFsZSBtdGltZSBhbmQgbWF5IGJlIHN1YmplY3QgdG8KKyAqIHBydW5pbmcpLgorICovCitzdGF0aWMgaW50IGNoZWNrX2FuZF9mcmVzaGVuX2ZpbGUoY29uc3QgY2hhciAqZm4sIGludCBmcmVzaGVuKQoreworCWlmIChhY2Nlc3MoZm4sIEZfT0spKQorCQlyZXR1cm4gMDsKKwlpZiAoZnJlc2hlbiAmJiAhZnJlc2hlbl9maWxlKGZuKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYW5kX2ZyZXNoZW5fbG9jYWwoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZyZXNoZW4pCit7CisJcmV0dXJuIGNoZWNrX2FuZF9mcmVzaGVuX2ZpbGUoc2hhMV9maWxlX25hbWUoc2hhMSksIGZyZXNoZW4pOworfQorCitzdGF0aWMgaW50IGNoZWNrX2FuZF9mcmVzaGVuX25vbmxvY2FsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGludCBmcmVzaGVuKQoreworCXN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICphbHQ7CisJcHJlcGFyZV9hbHRfb2RiKCk7CisJZm9yIChhbHQgPSBhbHRfb2RiX2xpc3Q7IGFsdDsgYWx0ID0gYWx0LT5uZXh0KSB7CisJCWZpbGxfc2hhMV9wYXRoKGFsdC0+bmFtZSwgc2hhMSk7CisJCWlmIChjaGVja19hbmRfZnJlc2hlbl9maWxlKGFsdC0+YmFzZSwgZnJlc2hlbikpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfYW5kX2ZyZXNoZW4oY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZyZXNoZW4pCit7CisJcmV0dXJuIGNoZWNrX2FuZF9mcmVzaGVuX2xvY2FsKHNoYTEsIGZyZXNoZW4pIHx8CisJICAgICAgIGNoZWNrX2FuZF9mcmVzaGVuX25vbmxvY2FsKHNoYTEsIGZyZXNoZW4pOworfQorCitpbnQgaGFzX2xvb3NlX29iamVjdF9ub25sb2NhbChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXJldHVybiBjaGVja19hbmRfZnJlc2hlbl9ub25sb2NhbChzaGExLCAwKTsKK30KKworc3RhdGljIGludCBoYXNfbG9vc2Vfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJcmV0dXJuIGNoZWNrX2FuZF9mcmVzaGVuKHNoYTEsIDApOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfdXNlZF9jdHI7CitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfbW1hcF9jYWxsczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGVha19wYWNrX29wZW5fd2luZG93czsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFja19vcGVuX3dpbmRvd3M7CitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfb3Blbl9mZHM7CitzdGF0aWMgdW5zaWduZWQgaW50IHBhY2tfbWF4X2ZkczsKK3N0YXRpYyBzaXplX3QgcGVha19wYWNrX21hcHBlZDsKK3N0YXRpYyBzaXplX3QgcGFja19tYXBwZWQ7CitzdHJ1Y3QgcGFja2VkX2dpdCAqcGFja2VkX2dpdDsKKwordm9pZCBwYWNrX3JlcG9ydCh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLAorCQkicGFja19yZXBvcnQ6IGdldHBhZ2VzaXplKCkgICAgICAgICAgICA9ICUxMCIgU1pfRk1UICJcbiIKKwkJInBhY2tfcmVwb3J0OiBjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUgPSAlMTAiIFNaX0ZNVCAiXG4iCisJCSJwYWNrX3JlcG9ydDogY29yZS5wYWNrZWRHaXRMaW1pdCAgICAgID0gJTEwIiBTWl9GTVQgIlxuIiwKKwkJc3pfZm10KGdldHBhZ2VzaXplKCkpLAorCQlzel9mbXQocGFja2VkX2dpdF93aW5kb3dfc2l6ZSksCisJCXN6X2ZtdChwYWNrZWRfZ2l0X2xpbWl0KSk7CisJZnByaW50ZihzdGRlcnIsCisJCSJwYWNrX3JlcG9ydDogcGFja191c2VkX2N0ciAgICAgICAgICAgID0gJTEwdVxuIgorCQkicGFja19yZXBvcnQ6IHBhY2tfbW1hcF9jYWxscyAgICAgICAgICA9ICUxMHVcbiIKKwkJInBhY2tfcmVwb3J0OiBwYWNrX29wZW5fd2luZG93cyAgICAgICAgPSAlMTB1IC8gJTEwdVxuIgorCQkicGFja19yZXBvcnQ6IHBhY2tfbWFwcGVkICAgICAgICAgICAgICA9ICIKKwkJCSIlMTAiIFNaX0ZNVCAiIC8gJTEwIiBTWl9GTVQgIlxuIiwKKwkJcGFja191c2VkX2N0ciwKKwkJcGFja19tbWFwX2NhbGxzLAorCQlwYWNrX29wZW5fd2luZG93cywgcGVha19wYWNrX29wZW5fd2luZG93cywKKwkJc3pfZm10KHBhY2tfbWFwcGVkKSwgc3pfZm10KHBlYWtfcGFja19tYXBwZWQpKTsKK30KKworLyoKKyAqIE9wZW4gYW5kIG1tYXAgdGhlIGluZGV4IGZpbGUgYXQgcGF0aCwgcGVyZm9ybSBhIGNvdXBsZSBvZgorICogY29uc2lzdGVuY3kgY2hlY2tzLCB0aGVuIHJlY29yZCBpdHMgaW5mb3JtYXRpb24gdG8gcC4gIFJldHVybiAwIG9uCisgKiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IGNoZWNrX3BhY2tlZF9naXRfaWR4KGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCXZvaWQgKmlkeF9tYXA7CisJc3RydWN0IHBhY2tfaWR4X2hlYWRlciAqaGRyOworCXNpemVfdCBpZHhfc2l6ZTsKKwl1aW50MzJfdCB2ZXJzaW9uLCBuciwgaSwgKmluZGV4OworCWludCBmZCA9IGdpdF9vcGVuX25vYXRpbWUocGF0aCk7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGZzdGF0KGZkLCAmc3QpKSB7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZHhfc2l6ZSA9IHhzaXplX3Qoc3Quc3Rfc2l6ZSk7CisJaWYgKGlkeF9zaXplIDwgNCAqIDI1NiArIDIwICsgMjApIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gZXJyb3IoImluZGV4IGZpbGUgJXMgaXMgdG9vIHNtYWxsIiwgcGF0aCk7CisJfQorCWlkeF9tYXAgPSB4bW1hcChOVUxMLCBpZHhfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCWNsb3NlKGZkKTsKKworCWhkciA9IGlkeF9tYXA7CisJaWYgKGhkci0+aWR4X3NpZ25hdHVyZSA9PSBodG9ubChQQUNLX0lEWF9TSUdOQVRVUkUpKSB7CisJCXZlcnNpb24gPSBudG9obChoZHItPmlkeF92ZXJzaW9uKTsKKwkJaWYgKHZlcnNpb24gPCAyIHx8IHZlcnNpb24gPiAyKSB7CisJCQltdW5tYXAoaWR4X21hcCwgaWR4X3NpemUpOworCQkJcmV0dXJuIGVycm9yKCJpbmRleCBmaWxlICVzIGlzIHZlcnNpb24gJSJQUkl1MzIKKwkJCQkgICAgICIgYW5kIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBiaW5hcnkiCisJCQkJICAgICAiICh0cnkgdXBncmFkaW5nIEdJVCB0byBhIG5ld2VyIHZlcnNpb24pIiwKKwkJCQkgICAgIHBhdGgsIHZlcnNpb24pOworCQl9CisJfSBlbHNlCisJCXZlcnNpb24gPSAxOworCisJbnIgPSAwOworCWluZGV4ID0gaWR4X21hcDsKKwlpZiAodmVyc2lvbiA+IDEpCisJCWluZGV4ICs9IDI7ICAvKiBza2lwIGluZGV4IGhlYWRlciAqLworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQl1aW50MzJfdCBuID0gbnRvaGwoaW5kZXhbaV0pOworCQlpZiAobiA8IG5yKSB7CisJCQltdW5tYXAoaWR4X21hcCwgaWR4X3NpemUpOworCQkJcmV0dXJuIGVycm9yKCJub24tbW9ub3RvbmljIGluZGV4ICVzIiwgcGF0aCk7CisJCX0KKwkJbnIgPSBuOworCX0KKworCWlmICh2ZXJzaW9uID09IDEpIHsKKwkJLyoKKwkJICogVG90YWwgc2l6ZToKKwkJICogIC0gMjU2IGluZGV4IGVudHJpZXMgNCBieXRlcyBlYWNoCisJCSAqICAtIDI0LWJ5dGUgZW50cmllcyAqIG5yICgyMC1ieXRlIHNoYTEgKyA0LWJ5dGUgb2Zmc2V0KQorCQkgKiAgLSAyMC1ieXRlIFNIQTEgb2YgdGhlIHBhY2tmaWxlCisJCSAqICAtIDIwLWJ5dGUgU0hBMSBmaWxlIGNoZWNrc3VtCisJCSAqLworCQlpZiAoaWR4X3NpemUgIT0gNCoyNTYgKyBuciAqIDI0ICsgMjAgKyAyMCkgeworCQkJbXVubWFwKGlkeF9tYXAsIGlkeF9zaXplKTsKKwkJCXJldHVybiBlcnJvcigid3JvbmcgaW5kZXggdjEgZmlsZSBzaXplIGluICVzIiwgcGF0aCk7CisJCX0KKwl9IGVsc2UgaWYgKHZlcnNpb24gPT0gMikgeworCQkvKgorCQkgKiBNaW5pbXVtIHNpemU6CisJCSAqICAtIDggYnl0ZXMgb2YgaGVhZGVyCisJCSAqICAtIDI1NiBpbmRleCBlbnRyaWVzIDQgYnl0ZXMgZWFjaAorCQkgKiAgLSAyMC1ieXRlIHNoYTEgZW50cnkgKiBucgorCQkgKiAgLSA0LWJ5dGUgY3JjIGVudHJ5ICogbnIKKwkJICogIC0gNC1ieXRlIG9mZnNldCBlbnRyeSAqIG5yCisJCSAqICAtIDIwLWJ5dGUgU0hBMSBvZiB0aGUgcGFja2ZpbGUKKwkJICogIC0gMjAtYnl0ZSBTSEExIGZpbGUgY2hlY2tzdW0KKwkJICogQW5kIGFmdGVyIHRoZSA0LWJ5dGUgb2Zmc2V0IHRhYmxlIG1pZ2h0IGJlIGEKKwkJICogdmFyaWFibGUgc2l6ZWQgdGFibGUgY29udGFpbmluZyA4LWJ5dGUgZW50cmllcworCQkgKiBmb3Igb2Zmc2V0cyBsYXJnZXIgdGhhbiAyXjMxLgorCQkgKi8KKwkJdW5zaWduZWQgbG9uZyBtaW5fc2l6ZSA9IDggKyA0KjI1NiArIG5yKigyMCArIDQgKyA0KSArIDIwICsgMjA7CisJCXVuc2lnbmVkIGxvbmcgbWF4X3NpemUgPSBtaW5fc2l6ZTsKKwkJaWYgKG5yKQorCQkJbWF4X3NpemUgKz0gKG5yIC0gMSkqODsKKwkJaWYgKGlkeF9zaXplIDwgbWluX3NpemUgfHwgaWR4X3NpemUgPiBtYXhfc2l6ZSkgeworCQkJbXVubWFwKGlkeF9tYXAsIGlkeF9zaXplKTsKKwkJCXJldHVybiBlcnJvcigid3JvbmcgaW5kZXggdjIgZmlsZSBzaXplIGluICVzIiwgcGF0aCk7CisJCX0KKwkJaWYgKGlkeF9zaXplICE9IG1pbl9zaXplICYmCisJCSAgICAvKgorCQkgICAgICogbWFrZSBzdXJlIHdlIGNhbiBkZWFsIHdpdGggbGFyZ2UgcGFjayBvZmZzZXRzLgorCQkgICAgICogMzEtYml0IHNpZ25lZCBvZmZzZXQgd29uJ3QgYmUgZW5vdWdoLCBuZWl0aGVyCisJCSAgICAgKiAzMi1iaXQgdW5zaWduZWQgb25lIHdpbGwgYmUuCisJCSAgICAgKi8KKwkJICAgIChzaXplb2Yob2ZmX3QpIDw9IDQpKSB7CisJCQltdW5tYXAoaWR4X21hcCwgaWR4X3NpemUpOworCQkJcmV0dXJuIGVycm9yKCJwYWNrIHRvbyBsYXJnZSBmb3IgY3VycmVudCBkZWZpbml0aW9uIG9mIG9mZl90IGluICVzIiwgcGF0aCk7CisJCX0KKwl9CisKKwlwLT5pbmRleF92ZXJzaW9uID0gdmVyc2lvbjsKKwlwLT5pbmRleF9kYXRhID0gaWR4X21hcDsKKwlwLT5pbmRleF9zaXplID0gaWR4X3NpemU7CisJcC0+bnVtX29iamVjdHMgPSBucjsKKwlyZXR1cm4gMDsKK30KKworaW50IG9wZW5fcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwljaGFyICppZHhfbmFtZTsKKwlzaXplX3QgbGVuOworCWludCByZXQ7CisKKwlpZiAocC0+aW5kZXhfZGF0YSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXN0cmlwX3N1ZmZpeChwLT5wYWNrX25hbWUsICIucGFjayIsICZsZW4pKQorCQlkaWUoIkJVRzogcGFja19uYW1lIGRvZXMgbm90IGVuZCBpbiAucGFjayIpOworCWlkeF9uYW1lID0geHN0cmZtdCgiJS4qcy5pZHgiLCAoaW50KWxlbiwgcC0+cGFja19uYW1lKTsKKwlyZXQgPSBjaGVja19wYWNrZWRfZ2l0X2lkeChpZHhfbmFtZSwgcCk7CisJZnJlZShpZHhfbmFtZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc2Nhbl93aW5kb3dzKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCXN0cnVjdCBwYWNrZWRfZ2l0ICoqbHJ1X3AsCisJc3RydWN0IHBhY2tfd2luZG93ICoqbHJ1X3csCisJc3RydWN0IHBhY2tfd2luZG93ICoqbHJ1X2wpCit7CisJc3RydWN0IHBhY2tfd2luZG93ICp3LCAqd19sOworCisJZm9yICh3X2wgPSBOVUxMLCB3ID0gcC0+d2luZG93czsgdzsgdyA9IHctPm5leHQpIHsKKwkJaWYgKCF3LT5pbnVzZV9jbnQpIHsKKwkJCWlmICghKmxydV93IHx8IHctPmxhc3RfdXNlZCA8ICgqbHJ1X3cpLT5sYXN0X3VzZWQpIHsKKwkJCQkqbHJ1X3AgPSBwOworCQkJCSpscnVfdyA9IHc7CisJCQkJKmxydV9sID0gd19sOworCQkJfQorCQl9CisJCXdfbCA9IHc7CisJfQorfQorCitzdGF0aWMgaW50IHVudXNlX29uZV93aW5kb3coc3RydWN0IHBhY2tlZF9naXQgKmN1cnJlbnQpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnAsICpscnVfcCA9IE5VTEw7CisJc3RydWN0IHBhY2tfd2luZG93ICpscnVfdyA9IE5VTEwsICpscnVfbCA9IE5VTEw7CisKKwlpZiAoY3VycmVudCkKKwkJc2Nhbl93aW5kb3dzKGN1cnJlbnQsICZscnVfcCwgJmxydV93LCAmbHJ1X2wpOworCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KQorCQlzY2FuX3dpbmRvd3MocCwgJmxydV9wLCAmbHJ1X3csICZscnVfbCk7CisJaWYgKGxydV9wKSB7CisJCW11bm1hcChscnVfdy0+YmFzZSwgbHJ1X3ctPmxlbik7CisJCXBhY2tfbWFwcGVkIC09IGxydV93LT5sZW47CisJCWlmIChscnVfbCkKKwkJCWxydV9sLT5uZXh0ID0gbHJ1X3ctPm5leHQ7CisJCWVsc2UKKwkJCWxydV9wLT53aW5kb3dzID0gbHJ1X3ctPm5leHQ7CisJCWZyZWUobHJ1X3cpOworCQlwYWNrX29wZW5fd2luZG93cy0tOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmVsZWFzZV9wYWNrX21lbW9yeShzaXplX3QgbmVlZCkKK3sKKwlzaXplX3QgY3VyID0gcGFja19tYXBwZWQ7CisJd2hpbGUgKG5lZWQgPj0gKGN1ciAtIHBhY2tfbWFwcGVkKSAmJiB1bnVzZV9vbmVfd2luZG93KE5VTEwpKQorCQk7IC8qIG5vdGhpbmcgKi8KK30KKworc3RhdGljIHZvaWQgbW1hcF9saW1pdF9jaGVjayhzaXplX3QgbGVuZ3RoKQoreworCXN0YXRpYyBzaXplX3QgbGltaXQgPSAwOworCWlmICghbGltaXQpIHsKKwkJbGltaXQgPSBnaXRfZW52X3Vsb25nKCJHSVRfTU1BUF9MSU1JVCIsIDApOworCQlpZiAoIWxpbWl0KQorCQkJbGltaXQgPSBTSVpFX01BWDsKKwl9CisJaWYgKGxlbmd0aCA+IGxpbWl0KQorCQlkaWUoImF0dGVtcHRpbmcgdG8gbW1hcCAlIlBSSXVNQVgiIG92ZXIgbGltaXQgJSJQUkl1TUFYLAorCQkgICAgKHVpbnRtYXhfdClsZW5ndGgsICh1aW50bWF4X3QpbGltaXQpOworfQorCit2b2lkICp4bW1hcF9nZW50bHkodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgsCisJCSAgaW50IHByb3QsIGludCBmbGFncywgaW50IGZkLCBvZmZfdCBvZmZzZXQpCit7CisJdm9pZCAqcmV0OworCisJbW1hcF9saW1pdF9jaGVjayhsZW5ndGgpOworCXJldCA9IG1tYXAoc3RhcnQsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQpOworCWlmIChyZXQgPT0gTUFQX0ZBSUxFRCkgeworCQlpZiAoIWxlbmd0aCkKKwkJCXJldHVybiBOVUxMOworCQlyZWxlYXNlX3BhY2tfbWVtb3J5KGxlbmd0aCk7CisJCXJldCA9IG1tYXAoc3RhcnQsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkICp4bW1hcCh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCwKKwlpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIG9mZl90IG9mZnNldCkKK3sKKwl2b2lkICpyZXQgPSB4bW1hcF9nZW50bHkoc3RhcnQsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQpOworCWlmIChyZXQgPT0gTUFQX0ZBSUxFRCkKKwkJZGllX2Vycm5vKCJtbWFwIGZhaWxlZCIpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgY2xvc2VfcGFja193aW5kb3dzKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCXdoaWxlIChwLT53aW5kb3dzKSB7CisJCXN0cnVjdCBwYWNrX3dpbmRvdyAqdyA9IHAtPndpbmRvd3M7CisKKwkJaWYgKHctPmludXNlX2NudCkKKwkJCWRpZSgicGFjayAnJXMnIHN0aWxsIGhhcyBvcGVuIHdpbmRvd3MgdG8gaXQiLAorCQkJICAgIHAtPnBhY2tfbmFtZSk7CisJCW11bm1hcCh3LT5iYXNlLCB3LT5sZW4pOworCQlwYWNrX21hcHBlZCAtPSB3LT5sZW47CisJCXBhY2tfb3Blbl93aW5kb3dzLS07CisJCXAtPndpbmRvd3MgPSB3LT5uZXh0OworCQlmcmVlKHcpOworCX0KK30KKworc3RhdGljIGludCBjbG9zZV9wYWNrX2ZkKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWlmIChwLT5wYWNrX2ZkIDwgMCkKKwkJcmV0dXJuIDA7CisKKwljbG9zZShwLT5wYWNrX2ZkKTsKKwlwYWNrX29wZW5fZmRzLS07CisJcC0+cGFja19mZCA9IC0xOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnApCit7CisJY2xvc2VfcGFja193aW5kb3dzKHApOworCWNsb3NlX3BhY2tfZmQocCk7CisJY2xvc2VfcGFja19pbmRleChwKTsKK30KKwordm9pZCBjbG9zZV9hbGxfcGFja3Modm9pZCkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KQorCQlpZiAocC0+ZG9fbm90X2Nsb3NlKQorCQkJZGllKCJCVUchIFdhbnQgdG8gY2xvc2UgcGFjayBtYXJrZWQgJ2RvLW5vdC1jbG9zZSciKTsKKwkJZWxzZQorCQkJY2xvc2VfcGFjayhwKTsKK30KKworCisvKgorICogVGhlIExSVSBwYWNrIGlzIHRoZSBvbmUgd2l0aCB0aGUgb2xkZXN0IE1SVSB3aW5kb3csIHByZWZlcnJpbmcgcGFja3MKKyAqIHdpdGggbm8gdXNlZCB3aW5kb3dzLCBvciB0aGUgb2xkZXN0IG10aW1lIGlmIGl0IGhhcyBubyB3aW5kb3dzIGFsbG9jYXRlZC4KKyAqLworc3RhdGljIHZvaWQgZmluZF9scnVfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgc3RydWN0IHBhY2tlZF9naXQgKipscnVfcCwgc3RydWN0IHBhY2tfd2luZG93ICoqbXJ1X3csIGludCAqYWNjZXB0X3dpbmRvd3NfaW51c2UpCit7CisJc3RydWN0IHBhY2tfd2luZG93ICp3LCAqdGhpc19tcnVfdzsKKwlpbnQgaGFzX3dpbmRvd3NfaW51c2UgPSAwOworCisJLyoKKwkgKiBSZWplY3QgdGhpcyBwYWNrIGlmIGl0IGhhcyB3aW5kb3dzIGFuZCB0aGUgcHJldmlvdXNseSBzZWxlY3RlZAorCSAqIG9uZSBkb2VzIG5vdC4gIElmIHRoaXMgcGFjayBkb2VzIG5vdCBoYXZlIHdpbmRvd3MsIHJlamVjdAorCSAqIGl0IGlmIHRoZSBwYWNrIGZpbGUgaXMgbmV3ZXIgdGhhbiB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBvbmUuCisJICovCisJaWYgKCpscnVfcCAmJiAhKm1ydV93ICYmIChwLT53aW5kb3dzIHx8IHAtPm10aW1lID4gKCpscnVfcCktPm10aW1lKSkKKwkJcmV0dXJuOworCisJZm9yICh3ID0gdGhpc19tcnVfdyA9IHAtPndpbmRvd3M7IHc7IHcgPSB3LT5uZXh0KSB7CisJCS8qCisJCSAqIFJlamVjdCB0aGlzIHBhY2sgaWYgYW55IG9mIGl0cyB3aW5kb3dzIGFyZSBpbiB1c2UsCisJCSAqIGJ1dCB0aGUgcHJldmlvdXNseSBzZWxlY3RlZCBwYWNrIGRpZCBub3QgaGF2ZSBhbnkKKwkJICogaW51c2Ugd2luZG93cy4gIE90aGVyd2lzZSwgcmVjb3JkIHRoYXQgdGhpcyBwYWNrCisJCSAqIGhhcyB3aW5kb3dzIGluIHVzZS4KKwkJICovCisJCWlmICh3LT5pbnVzZV9jbnQpIHsKKwkJCWlmICgqYWNjZXB0X3dpbmRvd3NfaW51c2UpCisJCQkJaGFzX3dpbmRvd3NfaW51c2UgPSAxOworCQkJZWxzZQorCQkJCXJldHVybjsKKwkJfQorCisJCWlmICh3LT5sYXN0X3VzZWQgPiB0aGlzX21ydV93LT5sYXN0X3VzZWQpCisJCQl0aGlzX21ydV93ID0gdzsKKworCQkvKgorCQkgKiBSZWplY3QgdGhpcyBwYWNrIGlmIGl0IGhhcyB3aW5kb3dzIHRoYXQgaGF2ZSBiZWVuCisJCSAqIHVzZWQgbW9yZSByZWNlbnRseSB0aGFuIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHBhY2suCisJCSAqIElmIHRoZSBwcmV2aW91c2x5IHNlbGVjdGVkIHBhY2sgaGFkIHdpbmRvd3MgaW51c2UgYW5kCisJCSAqIHdlIGhhdmUgbm90IGVuY291bnRlcmVkIGEgd2luZG93IGluIHRoaXMgcGFjayB0aGF0IGlzCisJCSAqIGludXNlLCBza2lwIHRoaXMgY2hlY2sgc2luY2Ugd2UgcHJlZmVyIGEgcGFjayB3aXRoIG5vCisJCSAqIGludXNlIHdpbmRvd3MgdG8gb25lIHRoYXQgaGFzIGludXNlIHdpbmRvd3MuCisJCSAqLworCQlpZiAoKm1ydV93ICYmICphY2NlcHRfd2luZG93c19pbnVzZSA9PSBoYXNfd2luZG93c19pbnVzZSAmJgorCQkgICAgdGhpc19tcnVfdy0+bGFzdF91c2VkID4gKCptcnVfdyktPmxhc3RfdXNlZCkKKwkJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFNlbGVjdCB0aGlzIHBhY2suCisJICovCisJKm1ydV93ID0gdGhpc19tcnVfdzsKKwkqbHJ1X3AgPSBwOworCSphY2NlcHRfd2luZG93c19pbnVzZSA9IGhhc193aW5kb3dzX2ludXNlOworfQorCitzdGF0aWMgaW50IGNsb3NlX29uZV9wYWNrKHZvaWQpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnAsICpscnVfcCA9IE5VTEw7CisJc3RydWN0IHBhY2tfd2luZG93ICptcnVfdyA9IE5VTEw7CisJaW50IGFjY2VwdF93aW5kb3dzX2ludXNlID0gMTsKKworCWZvciAocCA9IHBhY2tlZF9naXQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwLT5wYWNrX2ZkID09IC0xKQorCQkJY29udGludWU7CisJCWZpbmRfbHJ1X3BhY2socCwgJmxydV9wLCAmbXJ1X3csICZhY2NlcHRfd2luZG93c19pbnVzZSk7CisJfQorCisJaWYgKGxydV9wKQorCQlyZXR1cm4gY2xvc2VfcGFja19mZChscnVfcCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB1bnVzZV9wYWNrKHN0cnVjdCBwYWNrX3dpbmRvdyAqKndfY3Vyc29yKQoreworCXN0cnVjdCBwYWNrX3dpbmRvdyAqdyA9ICp3X2N1cnNvcjsKKwlpZiAodykgeworCQl3LT5pbnVzZV9jbnQtLTsKKwkJKndfY3Vyc29yID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgY2xvc2VfcGFja19pbmRleChzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlpZiAocC0+aW5kZXhfZGF0YSkgeworCQltdW5tYXAoKHZvaWQgKilwLT5pbmRleF9kYXRhLCBwLT5pbmRleF9zaXplKTsKKwkJcC0+aW5kZXhfZGF0YSA9IE5VTEw7CisJfQorfQorCisvKgorICogVGhpcyBpcyB1c2VkIGJ5IGdpdC1yZXBhY2sgaW4gY2FzZSBhIG5ld2x5IGNyZWF0ZWQgcGFjayBoYXBwZW5zIHRvCisgKiBjb250YWluIHRoZSBzYW1lIHNldCBvZiBvYmplY3RzIGFzIGFuIGV4aXN0aW5nIG9uZS4gIEluIHRoYXQgY2FzZQorICogdGhlIHJlc3VsdGluZyBmaWxlIG1pZ2h0IGJlIGRpZmZlcmVudCBldmVuIGlmIGl0cyBuYW1lIHdvdWxkIGJlIHRoZQorICogc2FtZS4gIEl0IGlzIGJlc3QgdG8gY2xvc2UgYW55IHJlZmVyZW5jZSB0byB0aGUgb2xkIHBhY2sgYmVmb3JlIGl0IGlzCisgKiByZXBsYWNlZCBvbiBkaXNrLiAgT2YgY291cnNlIG5vIGluZGV4IHBvaW50ZXJzIG9yIHdpbmRvd3MgZm9yIGdpdmVuIHBhY2sKKyAqIG11c3Qgc3Vic2lzdCBhdCB0aGlzIHBvaW50LiAgSWYgZXZlciBvYmplY3RzIGZyb20gdGhpcyBwYWNrIGFyZSByZXF1ZXN0ZWQKKyAqIGFnYWluLCB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIHBhY2sgd2lsbCBiZSByZWluaXRpYWxpemVkIHRocm91Z2gKKyAqIHJlcHJlcGFyZV9wYWNrZWRfZ2l0KCkuCisgKi8KK3ZvaWQgZnJlZV9wYWNrX2J5X25hbWUoY29uc3QgY2hhciAqcGFja19uYW1lKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwLCAqKnBwID0gJnBhY2tlZF9naXQ7CisKKwl3aGlsZSAoKnBwKSB7CisJCXAgPSAqcHA7CisJCWlmIChzdHJjbXAocGFja19uYW1lLCBwLT5wYWNrX25hbWUpID09IDApIHsKKwkJCWNsZWFyX2RlbHRhX2Jhc2VfY2FjaGUoKTsKKwkJCWNsb3NlX3BhY2socCk7CisJCQlmcmVlKHAtPmJhZF9vYmplY3Rfc2hhMSk7CisJCQkqcHAgPSBwLT5uZXh0OworCQkJaWYgKGxhc3RfZm91bmRfcGFjayA9PSBwKQorCQkJCWxhc3RfZm91bmRfcGFjayA9IE5VTEw7CisJCQlmcmVlKHApOworCQkJcmV0dXJuOworCQl9CisJCXBwID0gJnAtPm5leHQ7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9tYXhfZmRfbGltaXQodm9pZCkKK3sKKyNpZmRlZiBSTElNSVRfTk9GSUxFCisJeworCQlzdHJ1Y3QgcmxpbWl0IGxpbTsKKworCQlpZiAoIWdldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmbGltKSkKKwkJCXJldHVybiBsaW0ucmxpbV9jdXI7CisJfQorI2VuZGlmCisKKyNpZmRlZiBfU0NfT1BFTl9NQVgKKwl7CisJCWxvbmcgb3Blbl9tYXggPSBzeXNjb25mKF9TQ19PUEVOX01BWCk7CisJCWlmICgwIDwgb3Blbl9tYXgpCisJCQlyZXR1cm4gb3Blbl9tYXg7CisJCS8qCisJCSAqIE90aGVyd2lzZSwgd2UgZ290IC0xIGZvciBvbmUgb2YgdGhlIHR3bworCQkgKiByZWFzb25zOgorCQkgKgorCQkgKiAoMSkgc3lzY29uZigpIGRpZCBub3QgdW5kZXJzdGFuZCBfU0NfT1BFTl9NQVgKKwkJICogICAgIGFuZCBzaWduYWxlZCBhbiBlcnJvciB3aXRoIC0xOyBvcgorCQkgKiAoMikgc3lzY29uZigpIHNhaWQgdGhlcmUgaXMgbm8gbGltaXQuCisJCSAqCisJCSAqIFdlIF9jb3VsZF8gY2xlYXIgZXJybm8gYmVmb3JlIGNhbGxpbmcgc3lzY29uZigpIHRvCisJCSAqIHRlbGwgdGhlc2UgdHdvIGNhc2VzIGFwYXJ0IGFuZCByZXR1cm4gYSBodWdlIG51bWJlcgorCQkgKiBpbiB0aGUgbGF0dGVyIGNhc2UgdG8gbGV0IHRoZSBjYWxsZXIgY2FwIGl0IHRvIGEKKwkJICogdmFsdWUgdGhhdCBpcyBub3Qgc28gc2VsZmlzaCwgYnV0IGxldHRpbmcgdGhlCisJCSAqIGZhbGxiYWNrIE9QRU5fTUFYIGNvZGVwYXRoIHRha2UgY2FyZSBvZiB0aGVzZSBjYXNlcworCQkgKiBpcyBhIGxvdCBzaW1wbGVyLgorCQkgKi8KKwl9CisjZW5kaWYKKworI2lmZGVmIE9QRU5fTUFYCisJcmV0dXJuIE9QRU5fTUFYOworI2Vsc2UKKwlyZXR1cm4gMTsgLyogc2VlIHRoZSBjYWxsZXIgOy0pICovCisjZW5kaWYKK30KKworLyoKKyAqIERvIG5vdCBjYWxsIHRoaXMgZGlyZWN0bHkgYXMgdGhpcyBsZWFrcyBwLT5wYWNrX2ZkIG9uIGVycm9yIHJldHVybjsKKyAqIGNhbGwgb3Blbl9wYWNrZWRfZ2l0KCkgaW5zdGVhZC4KKyAqLworc3RhdGljIGludCBvcGVuX3BhY2tlZF9naXRfMShzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgcGFja19oZWFkZXIgaGRyOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciAqaWR4X3NoYTE7CisJbG9uZyBmZF9mbGFnOworCisJaWYgKCFwLT5pbmRleF9kYXRhICYmIG9wZW5fcGFja19pbmRleChwKSkKKwkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBpbmRleCB1bmF2YWlsYWJsZSIsIHAtPnBhY2tfbmFtZSk7CisKKwlpZiAoIXBhY2tfbWF4X2ZkcykgeworCQl1bnNpZ25lZCBpbnQgbWF4X2ZkcyA9IGdldF9tYXhfZmRfbGltaXQoKTsKKworCQkvKiBTYXZlIDMgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIsIDIyIGZvciB3b3JrICovCisJCWlmICgyNSA8IG1heF9mZHMpCisJCQlwYWNrX21heF9mZHMgPSBtYXhfZmRzIC0gMjU7CisJCWVsc2UKKwkJCXBhY2tfbWF4X2ZkcyA9IDE7CisJfQorCisJd2hpbGUgKHBhY2tfbWF4X2ZkcyA8PSBwYWNrX29wZW5fZmRzICYmIGNsb3NlX29uZV9wYWNrKCkpCisJCTsgLyogbm90aGluZyAqLworCisJcC0+cGFja19mZCA9IGdpdF9vcGVuX25vYXRpbWUocC0+cGFja19uYW1lKTsKKwlpZiAocC0+cGFja19mZCA8IDAgfHwgZnN0YXQocC0+cGFja19mZCwgJnN0KSkKKwkJcmV0dXJuIC0xOworCXBhY2tfb3Blbl9mZHMrKzsKKworCS8qIElmIHdlIGNyZWF0ZWQgdGhlIHN0cnVjdCBiZWZvcmUgd2UgaGFkIHRoZSBwYWNrIHdlIGxhY2sgc2l6ZS4gKi8KKwlpZiAoIXAtPnBhY2tfc2l6ZSkgeworCQlpZiAoIVNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIG5vdCBhIHJlZ3VsYXIgZmlsZSIsIHAtPnBhY2tfbmFtZSk7CisJCXAtPnBhY2tfc2l6ZSA9IHN0LnN0X3NpemU7CisJfSBlbHNlIGlmIChwLT5wYWNrX3NpemUgIT0gc3Quc3Rfc2l6ZSkKKwkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBzaXplIGNoYW5nZWQiLCBwLT5wYWNrX25hbWUpOworCisJLyogV2UgbGVhdmUgdGhlc2UgZmlsZSBkZXNjcmlwdG9ycyBvcGVuIHdpdGggc2xpZGluZyBtbWFwOworCSAqIHRoZXJlIGlzIG5vIHBvaW50IGtlZXBpbmcgdGhlbSBvcGVuIGFjcm9zcyBleGVjKCksIHRob3VnaC4KKwkgKi8KKwlmZF9mbGFnID0gZmNudGwocC0+cGFja19mZCwgRl9HRVRGRCwgMCk7CisJaWYgKGZkX2ZsYWcgPCAwKQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBkZXRlcm1pbmUgZmlsZSBkZXNjcmlwdG9yIGZsYWdzIik7CisJZmRfZmxhZyB8PSBGRF9DTE9FWEVDOworCWlmIChmY250bChwLT5wYWNrX2ZkLCBGX1NFVEZELCBmZF9mbGFnKSA9PSAtMSkKKwkJcmV0dXJuIGVycm9yKCJjYW5ub3Qgc2V0IEZEX0NMT0VYRUMiKTsKKworCS8qIFZlcmlmeSB3ZSByZWNvZ25pemUgdGhpcyBwYWNrIGZpbGUgZm9ybWF0LiAqLworCWlmIChyZWFkX2luX2Z1bGwocC0+cGFja19mZCwgJmhkciwgc2l6ZW9mKGhkcikpICE9IHNpemVvZihoZHIpKQorCQlyZXR1cm4gZXJyb3IoImZpbGUgJXMgaXMgZmFyIHRvbyBzaG9ydCB0byBiZSBhIHBhY2tmaWxlIiwgcC0+cGFja19uYW1lKTsKKwlpZiAoaGRyLmhkcl9zaWduYXR1cmUgIT0gaHRvbmwoUEFDS19TSUdOQVRVUkUpKQorCQlyZXR1cm4gZXJyb3IoImZpbGUgJXMgaXMgbm90IGEgR0lUIHBhY2tmaWxlIiwgcC0+cGFja19uYW1lKTsKKwlpZiAoIXBhY2tfdmVyc2lvbl9vayhoZHIuaGRyX3ZlcnNpb24pKQorCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGlzIHZlcnNpb24gJSJQUkl1MzIiIGFuZCBub3QiCisJCQkiIHN1cHBvcnRlZCAodHJ5IHVwZ3JhZGluZyBHSVQgdG8gYSBuZXdlciB2ZXJzaW9uKSIsCisJCQlwLT5wYWNrX25hbWUsIG50b2hsKGhkci5oZHJfdmVyc2lvbikpOworCisJLyogVmVyaWZ5IHRoZSBwYWNrIG1hdGNoZXMgaXRzIGluZGV4LiAqLworCWlmIChwLT5udW1fb2JqZWN0cyAhPSBudG9obChoZHIuaGRyX2VudHJpZXMpKQorCQlyZXR1cm4gZXJyb3IoInBhY2tmaWxlICVzIGNsYWltcyB0byBoYXZlICUiUFJJdTMyIiBvYmplY3RzIgorCQkJICAgICAiIHdoaWxlIGluZGV4IGluZGljYXRlcyAlIlBSSXUzMiIgb2JqZWN0cyIsCisJCQkgICAgIHAtPnBhY2tfbmFtZSwgbnRvaGwoaGRyLmhkcl9lbnRyaWVzKSwKKwkJCSAgICAgcC0+bnVtX29iamVjdHMpOworCWlmIChsc2VlayhwLT5wYWNrX2ZkLCBwLT5wYWNrX3NpemUgLSBzaXplb2Yoc2hhMSksIFNFRUtfU0VUKSA9PSAtMSkKKwkJcmV0dXJuIGVycm9yKCJlbmQgb2YgcGFja2ZpbGUgJXMgaXMgdW5hdmFpbGFibGUiLCBwLT5wYWNrX25hbWUpOworCWlmIChyZWFkX2luX2Z1bGwocC0+cGFja19mZCwgc2hhMSwgc2l6ZW9mKHNoYTEpKSAhPSBzaXplb2Yoc2hhMSkpCisJCXJldHVybiBlcnJvcigicGFja2ZpbGUgJXMgc2lnbmF0dXJlIGlzIHVuYXZhaWxhYmxlIiwgcC0+cGFja19uYW1lKTsKKwlpZHhfc2hhMSA9ICgodW5zaWduZWQgY2hhciAqKXAtPmluZGV4X2RhdGEpICsgcC0+aW5kZXhfc2l6ZSAtIDQwOworCWlmIChoYXNoY21wKHNoYTEsIGlkeF9zaGExKSkKKwkJcmV0dXJuIGVycm9yKCJwYWNrZmlsZSAlcyBkb2VzIG5vdCBtYXRjaCBpbmRleCIsIHAtPnBhY2tfbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Blbl9wYWNrZWRfZ2l0KHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWlmICghb3Blbl9wYWNrZWRfZ2l0XzEocCkpCisJCXJldHVybiAwOworCWNsb3NlX3BhY2tfZmQocCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGluX3dpbmRvdyhzdHJ1Y3QgcGFja193aW5kb3cgKndpbiwgb2ZmX3Qgb2Zmc2V0KQoreworCS8qIFdlIG11c3QgcHJvbWlzZSBhdCBsZWFzdCAyMCBieXRlcyAob25lIGhhc2gpIGFmdGVyIHRoZQorCSAqIG9mZnNldCBpcyBhdmFpbGFibGUgZnJvbSB0aGlzIHdpbmRvdywgb3RoZXJ3aXNlIHRoZSBvZmZzZXQKKwkgKiBpcyBub3QgYWN0dWFsbHkgaW4gdGhpcyB3aW5kb3cgYW5kIGEgZGlmZmVyZW50IHdpbmRvdyAod2hpY2gKKwkgKiBoYXMgdGhhdCBvbmUgaGFzaCBleGNlc3MpIG11c3QgYmUgdXNlZC4gIFRoaXMgaXMgdG8gc3VwcG9ydAorCSAqIHRoZSBvYmplY3QgaGVhZGVyIGFuZCBkZWx0YSBiYXNlIHBhcnNpbmcgcm91dGluZXMgYmVsb3cuCisJICovCisJb2ZmX3Qgd2luX29mZiA9IHdpbi0+b2Zmc2V0OworCXJldHVybiB3aW5fb2ZmIDw9IG9mZnNldAorCQkmJiAob2Zmc2V0ICsgMjApIDw9ICh3aW5fb2ZmICsgd2luLT5sZW4pOworfQorCit1bnNpZ25lZCBjaGFyICp1c2VfcGFjayhzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzb3IsCisJCW9mZl90IG9mZnNldCwKKwkJdW5zaWduZWQgbG9uZyAqbGVmdCkKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndpbiA9ICp3X2N1cnNvcjsKKworCS8qIFNpbmNlIHBhY2tmaWxlcyBlbmQgaW4gYSBoYXNoIG9mIHRoZWlyIGNvbnRlbnQgYW5kIGl0J3MKKwkgKiBwb2ludGxlc3MgdG8gYXNrIGZvciBhbiBvZmZzZXQgaW50byB0aGUgbWlkZGxlIG9mIHRoYXQKKwkgKiBoYXNoLCBhbmQgdGhlIGluX3dpbmRvdyBmdW5jdGlvbiBhYm92ZSB3b3VsZG4ndCBtYXRjaAorCSAqIGRvbid0IGFsbG93IGFuIG9mZnNldCB0b28gY2xvc2UgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkgKi8KKwlpZiAoIXAtPnBhY2tfc2l6ZSAmJiBwLT5wYWNrX2ZkID09IC0xICYmIG9wZW5fcGFja2VkX2dpdChwKSkKKwkJZGllKCJwYWNrZmlsZSAlcyBjYW5ub3QgYmUgYWNjZXNzZWQiLCBwLT5wYWNrX25hbWUpOworCWlmIChvZmZzZXQgPiAocC0+cGFja19zaXplIC0gMjApKQorCQlkaWUoIm9mZnNldCBiZXlvbmQgZW5kIG9mIHBhY2tmaWxlICh0cnVuY2F0ZWQgcGFjaz8pIik7CisKKwlpZiAoIXdpbiB8fCAhaW5fd2luZG93KHdpbiwgb2Zmc2V0KSkgeworCQlpZiAod2luKQorCQkJd2luLT5pbnVzZV9jbnQtLTsKKwkJZm9yICh3aW4gPSBwLT53aW5kb3dzOyB3aW47IHdpbiA9IHdpbi0+bmV4dCkgeworCQkJaWYgKGluX3dpbmRvdyh3aW4sIG9mZnNldCkpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKCF3aW4pIHsKKwkJCXNpemVfdCB3aW5kb3dfYWxpZ24gPSBwYWNrZWRfZ2l0X3dpbmRvd19zaXplIC8gMjsKKwkJCW9mZl90IGxlbjsKKworCQkJaWYgKHAtPnBhY2tfZmQgPT0gLTEgJiYgb3Blbl9wYWNrZWRfZ2l0KHApKQorCQkJCWRpZSgicGFja2ZpbGUgJXMgY2Fubm90IGJlIGFjY2Vzc2VkIiwgcC0+cGFja19uYW1lKTsKKworCQkJd2luID0geGNhbGxvYygxLCBzaXplb2YoKndpbikpOworCQkJd2luLT5vZmZzZXQgPSAob2Zmc2V0IC8gd2luZG93X2FsaWduKSAqIHdpbmRvd19hbGlnbjsKKwkJCWxlbiA9IHAtPnBhY2tfc2l6ZSAtIHdpbi0+b2Zmc2V0OworCQkJaWYgKGxlbiA+IHBhY2tlZF9naXRfd2luZG93X3NpemUpCisJCQkJbGVuID0gcGFja2VkX2dpdF93aW5kb3dfc2l6ZTsKKwkJCXdpbi0+bGVuID0gKHNpemVfdClsZW47CisJCQlwYWNrX21hcHBlZCArPSB3aW4tPmxlbjsKKwkJCXdoaWxlIChwYWNrZWRfZ2l0X2xpbWl0IDwgcGFja19tYXBwZWQKKwkJCQkmJiB1bnVzZV9vbmVfd2luZG93KHApKQorCQkJCTsgLyogbm90aGluZyAqLworCQkJd2luLT5iYXNlID0geG1tYXAoTlVMTCwgd2luLT5sZW4sCisJCQkJUFJPVF9SRUFELCBNQVBfUFJJVkFURSwKKwkJCQlwLT5wYWNrX2ZkLCB3aW4tPm9mZnNldCk7CisJCQlpZiAod2luLT5iYXNlID09IE1BUF9GQUlMRUQpCisJCQkJZGllKCJwYWNrZmlsZSAlcyBjYW5ub3QgYmUgbWFwcGVkOiAlcyIsCisJCQkJCXAtPnBhY2tfbmFtZSwKKwkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCWlmICghd2luLT5vZmZzZXQgJiYgd2luLT5sZW4gPT0gcC0+cGFja19zaXplCisJCQkJJiYgIXAtPmRvX25vdF9jbG9zZSkKKwkJCQljbG9zZV9wYWNrX2ZkKHApOworCQkJcGFja19tbWFwX2NhbGxzKys7CisJCQlwYWNrX29wZW5fd2luZG93cysrOworCQkJaWYgKHBhY2tfbWFwcGVkID4gcGVha19wYWNrX21hcHBlZCkKKwkJCQlwZWFrX3BhY2tfbWFwcGVkID0gcGFja19tYXBwZWQ7CisJCQlpZiAocGFja19vcGVuX3dpbmRvd3MgPiBwZWFrX3BhY2tfb3Blbl93aW5kb3dzKQorCQkJCXBlYWtfcGFja19vcGVuX3dpbmRvd3MgPSBwYWNrX29wZW5fd2luZG93czsKKwkJCXdpbi0+bmV4dCA9IHAtPndpbmRvd3M7CisJCQlwLT53aW5kb3dzID0gd2luOworCQl9CisJfQorCWlmICh3aW4gIT0gKndfY3Vyc29yKSB7CisJCXdpbi0+bGFzdF91c2VkID0gcGFja191c2VkX2N0cisrOworCQl3aW4tPmludXNlX2NudCsrOworCQkqd19jdXJzb3IgPSB3aW47CisJfQorCW9mZnNldCAtPSB3aW4tPm9mZnNldDsKKwlpZiAobGVmdCkKKwkJKmxlZnQgPSB3aW4tPmxlbiAtIHhzaXplX3Qob2Zmc2V0KTsKKwlyZXR1cm4gd2luLT5iYXNlICsgb2Zmc2V0OworfQorCitzdGF0aWMgc3RydWN0IHBhY2tlZF9naXQgKmFsbG9jX3BhY2tlZF9naXQoaW50IGV4dHJhKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwID0geG1hbGxvYyhzaXplb2YoKnApICsgZXh0cmEpOworCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKKwlwLT5wYWNrX2ZkID0gLTE7CisJcmV0dXJuIHA7Cit9CisKK3N0YXRpYyB2b2lkIHRyeV90b19mcmVlX3BhY2tfbWVtb3J5KHNpemVfdCBzaXplKQoreworCXJlbGVhc2VfcGFja19tZW1vcnkoc2l6ZSk7Cit9CisKK3N0cnVjdCBwYWNrZWRfZ2l0ICphZGRfcGFja2VkX2dpdChjb25zdCBjaGFyICpwYXRoLCBzaXplX3QgcGF0aF9sZW4sIGludCBsb2NhbCkKK3sKKwlzdGF0aWMgaW50IGhhdmVfc2V0X3RyeV90b19mcmVlX3JvdXRpbmU7CisJc3RydWN0IHN0YXQgc3Q7CisJc2l6ZV90IGFsbG9jOworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJaWYgKCFoYXZlX3NldF90cnlfdG9fZnJlZV9yb3V0aW5lKSB7CisJCWhhdmVfc2V0X3RyeV90b19mcmVlX3JvdXRpbmUgPSAxOworCQlzZXRfdHJ5X3RvX2ZyZWVfcm91dGluZSh0cnlfdG9fZnJlZV9wYWNrX21lbW9yeSk7CisJfQorCisJLyoKKwkgKiBNYWtlIHN1cmUgYSBjb3JyZXNwb25kaW5nIC5wYWNrIGZpbGUgZXhpc3RzIGFuZCB0aGF0CisJICogdGhlIGluZGV4IGxvb2tzIHNhbmUuCisJICovCisJaWYgKCFzdHJpcF9zdWZmaXhfbWVtKHBhdGgsICZwYXRoX2xlbiwgIi5pZHgiKSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqICIucGFjayIgaXMgbG9uZyBlbm91Z2ggdG8gaG9sZCBhbnkgc3VmZml4IHdlJ3JlIGFkZGluZyAoYW5kCisJICogdGhlIHVzZSB4c25wcmludGYgZG91YmxlLWNoZWNrcyB0aGF0KQorCSAqLworCWFsbG9jID0gcGF0aF9sZW4gKyBzdHJsZW4oIi5wYWNrIikgKyAxOworCXAgPSBhbGxvY19wYWNrZWRfZ2l0KGFsbG9jKTsKKwltZW1jcHkocC0+cGFja19uYW1lLCBwYXRoLCBwYXRoX2xlbik7CisKKwl4c25wcmludGYocC0+cGFja19uYW1lICsgcGF0aF9sZW4sIGFsbG9jIC0gcGF0aF9sZW4sICIua2VlcCIpOworCWlmICghYWNjZXNzKHAtPnBhY2tfbmFtZSwgRl9PSykpCisJCXAtPnBhY2tfa2VlcCA9IDE7CisKKwl4c25wcmludGYocC0+cGFja19uYW1lICsgcGF0aF9sZW4sIGFsbG9jIC0gcGF0aF9sZW4sICIucGFjayIpOworCWlmIChzdGF0KHAtPnBhY2tfbmFtZSwgJnN0KSB8fCAhU19JU1JFRyhzdC5zdF9tb2RlKSkgeworCQlmcmVlKHApOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBvaywgaXQgbG9va3Mgc2FuZSBhcyBmYXIgYXMgd2UgY2FuIGNoZWNrIHdpdGhvdXQKKwkgKiBhY3R1YWxseSBtYXBwaW5nIHRoZSBwYWNrIGZpbGUuCisJICovCisJcC0+cGFja19zaXplID0gc3Quc3Rfc2l6ZTsKKwlwLT5wYWNrX2xvY2FsID0gbG9jYWw7CisJcC0+bXRpbWUgPSBzdC5zdF9tdGltZTsKKwlpZiAocGF0aF9sZW4gPCA0MCB8fCBnZXRfc2hhMV9oZXgocGF0aCArIHBhdGhfbGVuIC0gNDAsIHAtPnNoYTEpKQorCQloYXNoY2xyKHAtPnNoYTEpOworCXJldHVybiBwOworfQorCitzdHJ1Y3QgcGFja2VkX2dpdCAqcGFyc2VfcGFja19pbmRleCh1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICppZHhfcGF0aCkKK3sKKwljb25zdCBjaGFyICpwYXRoID0gc2hhMV9wYWNrX25hbWUoc2hhMSk7CisJaW50IGFsbG9jID0gc3RybGVuKHBhdGgpICsgMTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcCA9IGFsbG9jX3BhY2tlZF9naXQoYWxsb2MpOworCisJbWVtY3B5KHAtPnBhY2tfbmFtZSwgcGF0aCwgYWxsb2MpOyAvKiBpbmNsdWRlcyBOVUwgKi8KKwloYXNoY3B5KHAtPnNoYTEsIHNoYTEpOworCWlmIChjaGVja19wYWNrZWRfZ2l0X2lkeChpZHhfcGF0aCwgcCkpIHsKKwkJZnJlZShwKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHA7Cit9CisKK3ZvaWQgaW5zdGFsbF9wYWNrZWRfZ2l0KHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrKQoreworCWlmIChwYWNrLT5wYWNrX2ZkICE9IC0xKQorCQlwYWNrX29wZW5fZmRzKys7CisKKwlwYWNrLT5uZXh0ID0gcGFja2VkX2dpdDsKKwlwYWNrZWRfZ2l0ID0gcGFjazsKK30KKwordm9pZCAoKnJlcG9ydF9nYXJiYWdlKShjb25zdCBjaGFyICpkZXNjLCBjb25zdCBjaGFyICpwYXRoKTsKKworc3RhdGljIHZvaWQgcmVwb3J0X2hlbHBlcihjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsCisJCQkgIGludCBzZWVuX2JpdHMsIGludCBmaXJzdCwgaW50IGxhc3QpCit7CisJY29uc3QgY2hhciAqbXNnOworCXN3aXRjaCAoc2Vlbl9iaXRzKSB7CisJY2FzZSAwOgorCQltc2cgPSAibm8gY29ycmVzcG9uZGluZyAuaWR4IG9yIC5wYWNrIjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltc2cgPSAibm8gY29ycmVzcG9uZGluZyAuaWR4IjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQltc2cgPSAibm8gY29ycmVzcG9uZGluZyAucGFjayI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJZm9yICg7IGZpcnN0IDwgbGFzdDsgZmlyc3QrKykKKwkJcmVwb3J0X2dhcmJhZ2UobXNnLCBsaXN0LT5pdGVtc1tmaXJzdF0uc3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0X3BhY2tfZ2FyYmFnZShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJaW50IGksIGJhc2VsZW4gPSAtMSwgZmlyc3QgPSAwLCBzZWVuX2JpdHMgPSAwOworCisJaWYgKCFyZXBvcnRfZ2FyYmFnZSkKKwkJcmV0dXJuOworCisJc3RyaW5nX2xpc3Rfc29ydChsaXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKnBhdGggPSBsaXN0LT5pdGVtc1tpXS5zdHJpbmc7CisJCWlmIChiYXNlbGVuICE9IC0xICYmCisJCSAgICBzdHJuY21wKHBhdGgsIGxpc3QtPml0ZW1zW2ZpcnN0XS5zdHJpbmcsIGJhc2VsZW4pKSB7CisJCQlyZXBvcnRfaGVscGVyKGxpc3QsIHNlZW5fYml0cywgZmlyc3QsIGkpOworCQkJYmFzZWxlbiA9IC0xOworCQkJc2Vlbl9iaXRzID0gMDsKKwkJfQorCQlpZiAoYmFzZWxlbiA9PSAtMSkgeworCQkJY29uc3QgY2hhciAqZG90ID0gc3RycmNocihwYXRoLCAnLicpOworCQkJaWYgKCFkb3QpIHsKKwkJCQlyZXBvcnRfZ2FyYmFnZSgiZ2FyYmFnZSBmb3VuZCIsIHBhdGgpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYmFzZWxlbiA9IGRvdCAtIHBhdGggKyAxOworCQkJZmlyc3QgPSBpOworCQl9CisJCWlmICghc3RyY21wKHBhdGggKyBiYXNlbGVuLCAicGFjayIpKQorCQkJc2Vlbl9iaXRzIHw9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAocGF0aCArIGJhc2VsZW4sICJpZHgiKSkKKwkJCXNlZW5fYml0cyB8PSAyOworCX0KKwlyZXBvcnRfaGVscGVyKGxpc3QsIHNlZW5fYml0cywgZmlyc3QsIGxpc3QtPm5yKTsKK30KKworc3RhdGljIHZvaWQgcHJlcGFyZV9wYWNrZWRfZ2l0X29uZShjaGFyICpvYmpkaXIsIGludCBsb2NhbCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgZGlybmFtZWxlbjsKKwlESVIgKmRpcjsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgZ2FyYmFnZSA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJc3RyYnVmX2FkZHN0cigmcGF0aCwgb2JqZGlyKTsKKwlzdHJidWZfYWRkc3RyKCZwYXRoLCAiL3BhY2siKTsKKwlkaXIgPSBvcGVuZGlyKHBhdGguYnVmKTsKKwlpZiAoIWRpcikgeworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJZXJyb3IoInVuYWJsZSB0byBvcGVuIG9iamVjdCBwYWNrIGRpcmVjdG9yeTogJXM6ICVzIiwKKwkJCSAgICAgIHBhdGguYnVmLCBzdHJlcnJvcihlcnJubykpOworCQlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJCXJldHVybjsKKwl9CisJc3RyYnVmX2FkZGNoKCZwYXRoLCAnLycpOworCWRpcm5hbWVsZW4gPSBwYXRoLmxlbjsKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCQlzaXplX3QgYmFzZV9sZW47CisKKwkJaWYgKGlzX2RvdF9vcl9kb3Rkb3QoZGUtPmRfbmFtZSkpCisJCQljb250aW51ZTsKKworCQlzdHJidWZfc2V0bGVuKCZwYXRoLCBkaXJuYW1lbGVuKTsKKwkJc3RyYnVmX2FkZHN0cigmcGF0aCwgZGUtPmRfbmFtZSk7CisKKwkJYmFzZV9sZW4gPSBwYXRoLmxlbjsKKwkJaWYgKHN0cmlwX3N1ZmZpeF9tZW0ocGF0aC5idWYsICZiYXNlX2xlbiwgIi5pZHgiKSkgeworCQkJLyogRG9uJ3QgcmVvcGVuIGEgcGFjayB3ZSBhbHJlYWR5IGhhdmUuICovCisJCQlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQkJCXNpemVfdCBsZW47CisJCQkJaWYgKHN0cmlwX3N1ZmZpeChwLT5wYWNrX25hbWUsICIucGFjayIsICZsZW4pICYmCisJCQkJICAgIGxlbiA9PSBiYXNlX2xlbiAmJgorCQkJCSAgICAhbWVtY21wKHAtPnBhY2tfbmFtZSwgcGF0aC5idWYsIGxlbikpCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHAgPT0gTlVMTCAmJgorCQkJICAgIC8qCisJCQkgICAgICogU2VlIGlmIGl0IHJlYWxseSBpcyBhIHZhbGlkIC5pZHggZmlsZSB3aXRoCisJCQkgICAgICogY29ycmVzcG9uZGluZyAucGFjayBmaWxlIHRoYXQgd2UgY2FuIG1hcC4KKwkJCSAgICAgKi8KKwkJCSAgICAocCA9IGFkZF9wYWNrZWRfZ2l0KHBhdGguYnVmLCBwYXRoLmxlbiwgbG9jYWwpKSAhPSBOVUxMKQorCQkJCWluc3RhbGxfcGFja2VkX2dpdChwKTsKKwkJfQorCisJCWlmICghcmVwb3J0X2dhcmJhZ2UpCisJCQljb250aW51ZTsKKworCQlpZiAoZW5kc193aXRoKGRlLT5kX25hbWUsICIuaWR4IikgfHwKKwkJICAgIGVuZHNfd2l0aChkZS0+ZF9uYW1lLCAiLnBhY2siKSB8fAorCQkgICAgZW5kc193aXRoKGRlLT5kX25hbWUsICIuYml0bWFwIikgfHwKKwkJICAgIGVuZHNfd2l0aChkZS0+ZF9uYW1lLCAiLmtlZXAiKSkKKwkJCXN0cmluZ19saXN0X2FwcGVuZCgmZ2FyYmFnZSwgcGF0aC5idWYpOworCQllbHNlCisJCQlyZXBvcnRfZ2FyYmFnZSgiZ2FyYmFnZSBmb3VuZCIsIHBhdGguYnVmKTsKKwl9CisJY2xvc2VkaXIoZGlyKTsKKwlyZXBvcnRfcGFja19nYXJiYWdlKCZnYXJiYWdlKTsKKwlzdHJpbmdfbGlzdF9jbGVhcigmZ2FyYmFnZSwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworfQorCitzdGF0aWMgaW50IHNvcnRfcGFjayhjb25zdCB2b2lkICphXywgY29uc3Qgdm9pZCAqYl8pCit7CisJc3RydWN0IHBhY2tlZF9naXQgKmEgPSAqKChzdHJ1Y3QgcGFja2VkX2dpdCAqKilhXyk7CisJc3RydWN0IHBhY2tlZF9naXQgKmIgPSAqKChzdHJ1Y3QgcGFja2VkX2dpdCAqKiliXyk7CisJaW50IHN0OworCisJLyoKKwkgKiBMb2NhbCBwYWNrcyB0ZW5kIHRvIGNvbnRhaW4gb2JqZWN0cyBzcGVjaWZpYyB0byBvdXIKKwkgKiB2YXJpYW50IG9mIHRoZSBwcm9qZWN0IHRoYW4gcmVtb3RlIG9uZXMuICBJbiBhZGRpdGlvbiwKKwkgKiByZW1vdGUgb25lcyBjb3VsZCBiZSBvbiBhIG5ldHdvcmsgbW91bnRlZCBmaWxlc3lzdGVtLgorCSAqIEZhdm9yIGxvY2FsIG9uZXMgZm9yIHRoZXNlIHJlYXNvbnMuCisJICovCisJc3QgPSBhLT5wYWNrX2xvY2FsIC0gYi0+cGFja19sb2NhbDsKKwlpZiAoc3QpCisJCXJldHVybiAtc3Q7CisKKwkvKgorCSAqIFlvdW5nZXIgcGFja3MgdGVuZCB0byBjb250YWluIG1vcmUgcmVjZW50IG9iamVjdHMsCisJICogYW5kIG1vcmUgcmVjZW50IG9iamVjdHMgdGVuZCB0byBnZXQgYWNjZXNzZWQgbW9yZQorCSAqIG9mdGVuLgorCSAqLworCWlmIChhLT5tdGltZSA8IGItPm10aW1lKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChhLT5tdGltZSA9PSBiLT5tdGltZSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCByZWFycmFuZ2VfcGFja2VkX2dpdCh2b2lkKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICoqYXJ5LCAqcDsKKwlpbnQgaSwgbjsKKworCWZvciAobiA9IDAsIHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkKKwkJbisrOworCWlmIChuIDwgMikKKwkJcmV0dXJuOworCisJLyogcHJlcGFyZSBhbiBhcnJheSBvZiBwYWNrZWRfZ2l0IGZvciBlYXNpZXIgc29ydGluZyAqLworCWFyeSA9IHhjYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBwYWNrZWRfZ2l0ICopKTsKKwlmb3IgKG4gPSAwLCBwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpCisJCWFyeVtuKytdID0gcDsKKworCXFzb3J0KGFyeSwgbiwgc2l6ZW9mKHN0cnVjdCBwYWNrZWRfZ2l0ICopLCBzb3J0X3BhY2spOworCisJLyogbGluayB0aGVtIGJhY2sgYWdhaW4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbiAtIDE7IGkrKykKKwkJYXJ5W2ldLT5uZXh0ID0gYXJ5W2kgKyAxXTsKKwlhcnlbbiAtIDFdLT5uZXh0ID0gTlVMTDsKKwlwYWNrZWRfZ2l0ID0gYXJ5WzBdOworCisJZnJlZShhcnkpOworfQorCitzdGF0aWMgaW50IHByZXBhcmVfcGFja2VkX2dpdF9ydW5fb25jZSA9IDA7Cit2b2lkIHByZXBhcmVfcGFja2VkX2dpdCh2b2lkKQoreworCXN0cnVjdCBhbHRlcm5hdGVfb2JqZWN0X2RhdGFiYXNlICphbHQ7CisKKwlpZiAocHJlcGFyZV9wYWNrZWRfZ2l0X3J1bl9vbmNlKQorCQlyZXR1cm47CisJcHJlcGFyZV9wYWNrZWRfZ2l0X29uZShnZXRfb2JqZWN0X2RpcmVjdG9yeSgpLCAxKTsKKwlwcmVwYXJlX2FsdF9vZGIoKTsKKwlmb3IgKGFsdCA9IGFsdF9vZGJfbGlzdDsgYWx0OyBhbHQgPSBhbHQtPm5leHQpIHsKKwkJYWx0LT5uYW1lWy0xXSA9IDA7CisJCXByZXBhcmVfcGFja2VkX2dpdF9vbmUoYWx0LT5iYXNlLCAwKTsKKwkJYWx0LT5uYW1lWy0xXSA9ICcvJzsKKwl9CisJcmVhcnJhbmdlX3BhY2tlZF9naXQoKTsKKwlwcmVwYXJlX3BhY2tlZF9naXRfcnVuX29uY2UgPSAxOworfQorCit2b2lkIHJlcHJlcGFyZV9wYWNrZWRfZ2l0KHZvaWQpCit7CisJcHJlcGFyZV9wYWNrZWRfZ2l0X3J1bl9vbmNlID0gMDsKKwlwcmVwYXJlX3BhY2tlZF9naXQoKTsKK30KKworc3RhdGljIHZvaWQgbWFya19iYWRfcGFja2VkX29iamVjdChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGk7CisJZm9yIChpID0gMDsgaSA8IHAtPm51bV9iYWRfb2JqZWN0czsgaSsrKQorCQlpZiAoIWhhc2hjbXAoc2hhMSwgcC0+YmFkX29iamVjdF9zaGExICsgMjAgKiBpKSkKKwkJCXJldHVybjsKKwlwLT5iYWRfb2JqZWN0X3NoYTEgPSB4cmVhbGxvYyhwLT5iYWRfb2JqZWN0X3NoYTEsIDIwICogKHAtPm51bV9iYWRfb2JqZWN0cyArIDEpKTsKKwloYXNoY3B5KHAtPmJhZF9vYmplY3Rfc2hhMSArIDIwICogcC0+bnVtX2JhZF9vYmplY3RzLCBzaGExKTsKKwlwLT5udW1fYmFkX29iamVjdHMrKzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpoYXNfcGFja2VkX2FuZF9iYWQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwl1bnNpZ25lZCBpOworCisJZm9yIChwID0gcGFja2VkX2dpdDsgcDsgcCA9IHAtPm5leHQpCisJCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fYmFkX29iamVjdHM7IGkrKykKKwkJCWlmICghaGFzaGNtcChzaGExLCBwLT5iYWRfb2JqZWN0X3NoYTEgKyAyMCAqIGkpKQorCQkJCXJldHVybiBwOworCXJldHVybiBOVUxMOworfQorCisvKgorICogV2l0aCBhbiBpbi1jb3JlIG9iamVjdCBkYXRhIGluICJtYXAiLCByZWhhc2ggaXQgdG8gbWFrZSBzdXJlIHRoZQorICogb2JqZWN0IG5hbWUgYWN0dWFsbHkgbWF0Y2hlcyAic2hhMSIgdG8gZGV0ZWN0IG9iamVjdCBjb3JydXB0aW9uLgorICogV2l0aCAibWFwIiA9PSBOVUxMLCB0cnkgcmVhZGluZyB0aGUgb2JqZWN0IG5hbWVkIHdpdGggInNoYTEiIHVzaW5nCisgKiB0aGUgc3RyZWFtaW5nIGludGVyZmFjZSBhbmQgcmVoYXNoIGl0IHRvIGRvIHRoZSBzYW1lLgorICovCitpbnQgY2hlY2tfc2hhMV9zaWduYXR1cmUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqbWFwLAorCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwgY29uc3QgY2hhciAqdHlwZSkKK3sKKwl1bnNpZ25lZCBjaGFyIHJlYWxfc2hhMVsyMF07CisJZW51bSBvYmplY3RfdHlwZSBvYmpfdHlwZTsKKwlzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0OworCWdpdF9TSEFfQ1RYIGM7CisJY2hhciBoZHJbMzJdOworCWludCBoZHJsZW47CisKKwlpZiAobWFwKSB7CisJCWhhc2hfc2hhMV9maWxlKG1hcCwgc2l6ZSwgdHlwZSwgcmVhbF9zaGExKTsKKwkJcmV0dXJuIGhhc2hjbXAoc2hhMSwgcmVhbF9zaGExKSA/IC0xIDogMDsKKwl9CisKKwlzdCA9IG9wZW5faXN0cmVhbShzaGExLCAmb2JqX3R5cGUsICZzaXplLCBOVUxMKTsKKwlpZiAoIXN0KQorCQlyZXR1cm4gLTE7CisKKwkvKiBHZW5lcmF0ZSB0aGUgaGVhZGVyICovCisJaGRybGVuID0geHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksICIlcyAlbHUiLCB0eXBlbmFtZShvYmpfdHlwZSksIHNpemUpICsgMTsKKworCS8qIFNoYTEuLiAqLworCWdpdF9TSEExX0luaXQoJmMpOworCWdpdF9TSEExX1VwZGF0ZSgmYywgaGRyLCBoZHJsZW4pOworCWZvciAoOzspIHsKKwkJY2hhciBidWZbMTAyNCAqIDE2XTsKKwkJc3NpemVfdCByZWFkbGVuID0gcmVhZF9pc3RyZWFtKHN0LCBidWYsIHNpemVvZihidWYpKTsKKworCQlpZiAocmVhZGxlbiA8IDApIHsKKwkJCWNsb3NlX2lzdHJlYW0oc3QpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICghcmVhZGxlbikKKwkJCWJyZWFrOworCQlnaXRfU0hBMV9VcGRhdGUoJmMsIGJ1ZiwgcmVhZGxlbik7CisJfQorCWdpdF9TSEExX0ZpbmFsKHJlYWxfc2hhMSwgJmMpOworCWNsb3NlX2lzdHJlYW0oc3QpOworCXJldHVybiBoYXNoY21wKHNoYTEsIHJlYWxfc2hhMSkgPyAtMSA6IDA7Cit9CisKK2ludCBnaXRfb3Blbl9ub2F0aW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RhdGljIGludCBzaGExX2ZpbGVfb3Blbl9mbGFnID0gT19OT0FUSU1FOworCisJZm9yICg7OykgeworCQlpbnQgZmQ7CisKKwkJZXJybm8gPSAwOworCQlmZCA9IG9wZW4obmFtZSwgT19SRE9OTFkgfCBzaGExX2ZpbGVfb3Blbl9mbGFnKTsKKwkJaWYgKGZkID49IDApCisJCQlyZXR1cm4gZmQ7CisKKwkJLyogTWlnaHQgdGhlIGZhaWx1cmUgYmUgZHVlIHRvIE9fTk9BVElNRT8gKi8KKwkJaWYgKGVycm5vICE9IEVOT0VOVCAmJiBzaGExX2ZpbGVfb3Blbl9mbGFnKSB7CisJCQlzaGExX2ZpbGVfb3Blbl9mbGFnID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0dXJuIC0xOworCX0KK30KKworc3RhdGljIGludCBzdGF0X3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgc3RhdCAqc3QpCit7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmFsdDsKKworCWlmICghbHN0YXQoc2hhMV9maWxlX25hbWUoc2hhMSksIHN0KSkKKwkJcmV0dXJuIDA7CisKKwlwcmVwYXJlX2FsdF9vZGIoKTsKKwllcnJubyA9IEVOT0VOVDsKKwlmb3IgKGFsdCA9IGFsdF9vZGJfbGlzdDsgYWx0OyBhbHQgPSBhbHQtPm5leHQpIHsKKwkJZmlsbF9zaGExX3BhdGgoYWx0LT5uYW1lLCBzaGExKTsKKwkJaWYgKCFsc3RhdChhbHQtPmJhc2UsIHN0KSkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBvcGVuX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBmZDsKKwlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0OworCWludCBtb3N0X2ludGVyZXN0aW5nX2Vycm5vOworCisJZmQgPSBnaXRfb3Blbl9ub2F0aW1lKHNoYTFfZmlsZV9uYW1lKHNoYTEpKTsKKwlpZiAoZmQgPj0gMCkKKwkJcmV0dXJuIGZkOworCW1vc3RfaW50ZXJlc3RpbmdfZXJybm8gPSBlcnJubzsKKworCXByZXBhcmVfYWx0X29kYigpOworCWZvciAoYWx0ID0gYWx0X29kYl9saXN0OyBhbHQ7IGFsdCA9IGFsdC0+bmV4dCkgeworCQlmaWxsX3NoYTFfcGF0aChhbHQtPm5hbWUsIHNoYTEpOworCQlmZCA9IGdpdF9vcGVuX25vYXRpbWUoYWx0LT5iYXNlKTsKKwkJaWYgKGZkID49IDApCisJCQlyZXR1cm4gZmQ7CisJCWlmIChtb3N0X2ludGVyZXN0aW5nX2Vycm5vID09IEVOT0VOVCkKKwkJCW1vc3RfaW50ZXJlc3RpbmdfZXJybm8gPSBlcnJubzsKKwl9CisJZXJybm8gPSBtb3N0X2ludGVyZXN0aW5nX2Vycm5vOworCXJldHVybiAtMTsKK30KKwordm9pZCAqbWFwX3NoYTFfZmlsZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXZvaWQgKm1hcDsKKwlpbnQgZmQ7CisKKwlmZCA9IG9wZW5fc2hhMV9maWxlKHNoYTEpOworCW1hcCA9IE5VTEw7CisJaWYgKGZkID49IDApIHsKKwkJc3RydWN0IHN0YXQgc3Q7CisKKwkJaWYgKCFmc3RhdChmZCwgJnN0KSkgeworCQkJKnNpemUgPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCQkJaWYgKCEqc2l6ZSkgeworCQkJCS8qIG1tYXAoKSBpcyBmb3JiaWRkZW4gb24gZW1wdHkgZmlsZXMgKi8KKwkJCQllcnJvcigib2JqZWN0IGZpbGUgJXMgaXMgZW1wdHkiLCBzaGExX2ZpbGVfbmFtZShzaGExKSk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQltYXAgPSB4bW1hcChOVUxMLCAqc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApOworCQl9CisJCWNsb3NlKGZkKTsKKwl9CisJcmV0dXJuIG1hcDsKK30KKwordW5zaWduZWQgbG9uZyB1bnBhY2tfb2JqZWN0X2hlYWRlcl9idWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQl1bnNpZ25lZCBsb25nIGxlbiwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyAqc2l6ZXApCit7CisJdW5zaWduZWQgc2hpZnQ7CisJdW5zaWduZWQgbG9uZyBzaXplLCBjOworCXVuc2lnbmVkIGxvbmcgdXNlZCA9IDA7CisKKwljID0gYnVmW3VzZWQrK107CisJKnR5cGUgPSAoYyA+PiA0KSAmIDc7CisJc2l6ZSA9IGMgJiAxNTsKKwlzaGlmdCA9IDQ7CisJd2hpbGUgKGMgJiAweDgwKSB7CisJCWlmIChsZW4gPD0gdXNlZCB8fCBiaXRzaXplb2YobG9uZykgPD0gc2hpZnQpIHsKKwkJCWVycm9yKCJiYWQgb2JqZWN0IGhlYWRlciIpOworCQkJc2l6ZSA9IHVzZWQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJYyA9IGJ1Zlt1c2VkKytdOworCQlzaXplICs9IChjICYgMHg3ZikgPDwgc2hpZnQ7CisJCXNoaWZ0ICs9IDc7CisJfQorCSpzaXplcCA9IHNpemU7CisJcmV0dXJuIHVzZWQ7Cit9CisKK2ludCB1bnBhY2tfc2hhMV9oZWFkZXIoZ2l0X3pzdHJlYW0gKnN0cmVhbSwgdW5zaWduZWQgY2hhciAqbWFwLCB1bnNpZ25lZCBsb25nIG1hcHNpemUsIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZzaXopCit7CisJLyogR2V0IHRoZSBkYXRhIHN0cmVhbSAqLworCW1lbXNldChzdHJlYW0sIDAsIHNpemVvZigqc3RyZWFtKSk7CisJc3RyZWFtLT5uZXh0X2luID0gbWFwOworCXN0cmVhbS0+YXZhaWxfaW4gPSBtYXBzaXplOworCXN0cmVhbS0+bmV4dF9vdXQgPSBidWZmZXI7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSBidWZzaXo7CisKKwlnaXRfaW5mbGF0ZV9pbml0KHN0cmVhbSk7CisJcmV0dXJuIGdpdF9pbmZsYXRlKHN0cmVhbSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgdW5wYWNrX3NoYTFfaGVhZGVyX3RvX3N0cmJ1ZihnaXRfenN0cmVhbSAqc3RyZWFtLCB1bnNpZ25lZCBjaGFyICptYXAsCisJCQkJCXVuc2lnbmVkIGxvbmcgbWFwc2l6ZSwgdm9pZCAqYnVmZmVyLAorCQkJCQl1bnNpZ25lZCBsb25nIGJ1ZnNpeiwgc3RydWN0IHN0cmJ1ZiAqaGVhZGVyKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSB1bnBhY2tfc2hhMV9oZWFkZXIoc3RyZWFtLCBtYXAsIG1hcHNpemUsIGJ1ZmZlciwgYnVmc2l6KTsKKworCS8qCisJICogQ2hlY2sgaWYgZW50aXJlIGhlYWRlciBpcyB1bnBhY2tlZCBpbiB0aGUgZmlyc3QgaXRlcmF0aW9uLgorCSAqLworCWlmIChtZW1jaHIoYnVmZmVyLCAnXDAnLCBzdHJlYW0tPm5leHRfb3V0IC0gKHVuc2lnbmVkIGNoYXIgKilidWZmZXIpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogYnVmZmVyWzAuLmJ1ZnNpel0gd2FzIG5vdCBsYXJnZSBlbm91Z2guICBDb3B5IHRoZSBwYXJ0aWFsCisJICogcmVzdWx0IG91dCB0byBoZWFkZXIsIGFuZCB0aGVuIGFwcGVuZCB0aGUgcmVzdWx0IG9mIGZ1cnRoZXIKKwkgKiByZWFkaW5nIHRoZSBzdHJlYW0uCisJICovCisJc3RyYnVmX2FkZChoZWFkZXIsIGJ1ZmZlciwgc3RyZWFtLT5uZXh0X291dCAtICh1bnNpZ25lZCBjaGFyICopYnVmZmVyKTsKKwlzdHJlYW0tPm5leHRfb3V0ID0gYnVmZmVyOworCXN0cmVhbS0+YXZhaWxfb3V0ID0gYnVmc2l6OworCisJZG8geworCQlzdGF0dXMgPSBnaXRfaW5mbGF0ZShzdHJlYW0sIDApOworCQlzdHJidWZfYWRkKGhlYWRlciwgYnVmZmVyLCBzdHJlYW0tPm5leHRfb3V0IC0gKHVuc2lnbmVkIGNoYXIgKilidWZmZXIpOworCQlpZiAobWVtY2hyKGJ1ZmZlciwgJ1wwJywgc3RyZWFtLT5uZXh0X291dCAtICh1bnNpZ25lZCBjaGFyICopYnVmZmVyKSkKKwkJCXJldHVybiAwOworCQlzdHJlYW0tPm5leHRfb3V0ID0gYnVmZmVyOworCQlzdHJlYW0tPmF2YWlsX291dCA9IGJ1ZnNpejsKKwl9IHdoaWxlIChzdGF0dXMgIT0gWl9TVFJFQU1fRU5EKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkICp1bnBhY2tfc2hhMV9yZXN0KGdpdF96c3RyZWFtICpzdHJlYW0sIHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCBieXRlcyA9IHN0cmxlbihidWZmZXIpICsgMTsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSB4bWFsbG9jeihzaXplKTsKKwl1bnNpZ25lZCBsb25nIG47CisJaW50IHN0YXR1cyA9IFpfT0s7CisKKwluID0gc3RyZWFtLT50b3RhbF9vdXQgLSBieXRlczsKKwlpZiAobiA+IHNpemUpCisJCW4gPSBzaXplOworCW1lbWNweShidWYsIChjaGFyICopIGJ1ZmZlciArIGJ5dGVzLCBuKTsKKwlieXRlcyA9IG47CisJaWYgKGJ5dGVzIDw9IHNpemUpIHsKKwkJLyoKKwkJICogVGhlIGFib3ZlIGNvbmRpdGlvbiBtdXN0IGJlIChieXRlcyA8PSBzaXplKSwgbm90CisJCSAqIChieXRlcyA8IHNpemUpLiAgSW4gb3RoZXIgd29yZHMsIGV2ZW4gdGhvdWdoIHdlCisJCSAqIGV4cGVjdCBubyBtb3JlIG91dHB1dCBhbmQgc2V0IGF2YWlsX291dCB0byB6ZXJvLAorCQkgKiB0aGUgaW5wdXQgemxpYiBzdHJlYW0gbWF5IGhhdmUgYnl0ZXMgdGhhdCBleHByZXNzCisJCSAqICJ0aGlzIGNvbmNsdWRlcyB0aGUgc3RyZWFtIiwgYW5kIHdlICpkbyogd2FudCB0bworCQkgKiBlYXQgdGhhdCBpbnB1dC4KKwkJICoKKwkJICogT3RoZXJ3aXNlIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIHRlc3QgdGhhdCB3ZQorCQkgKiBjb25zdW1lZCBhbGwgdGhlIGlucHV0IHRvIHJlYWNoIHRoZSBleHBlY3RlZCBzaXplOworCQkgKiB3ZSBhbHNvIHdhbnQgdG8gY2hlY2sgdGhhdCB6bGliIHRlbGxzIHVzIHRoYXQgYWxsCisJCSAqIHdlbnQgd2VsbCB3aXRoIHN0YXR1cyA9PSBaX1NUUkVBTV9FTkQgYXQgdGhlIGVuZC4KKwkJICovCisJCXN0cmVhbS0+bmV4dF9vdXQgPSBidWYgKyBieXRlczsKKwkJc3RyZWFtLT5hdmFpbF9vdXQgPSBzaXplIC0gYnl0ZXM7CisJCXdoaWxlIChzdGF0dXMgPT0gWl9PSykKKwkJCXN0YXR1cyA9IGdpdF9pbmZsYXRlKHN0cmVhbSwgWl9GSU5JU0gpOworCX0KKwlpZiAoc3RhdHVzID09IFpfU1RSRUFNX0VORCAmJiAhc3RyZWFtLT5hdmFpbF9pbikgeworCQlnaXRfaW5mbGF0ZV9lbmQoc3RyZWFtKTsKKwkJcmV0dXJuIGJ1ZjsKKwl9CisKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZXJyb3IoImNvcnJ1cHQgbG9vc2Ugb2JqZWN0ICclcyciLCBzaGExX3RvX2hleChzaGExKSk7CisJZWxzZSBpZiAoc3RyZWFtLT5hdmFpbF9pbikKKwkJZXJyb3IoImdhcmJhZ2UgYXQgZW5kIG9mIGxvb3NlIG9iamVjdCAnJXMnIiwKKwkJICAgICAgc2hhMV90b19oZXgoc2hhMSkpOworCWZyZWUoYnVmKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFdlIHVzZWQgdG8ganVzdCB1c2UgInNzY2FuZigpIiwgYnV0IHRoYXQncyBhY3R1YWxseSB3YXkKKyAqIHRvbyBwZXJtaXNzaXZlIGZvciB3aGF0IHdlIHdhbnQgdG8gY2hlY2suIFNvIGRvIGFuIGFuYWwKKyAqIG9iamVjdCBoZWFkZXIgcGFyc2UgYnkgaGFuZC4KKyAqLworc3RhdGljIGludCBwYXJzZV9zaGExX2hlYWRlcl9leHRlbmRlZChjb25zdCBjaGFyICpoZHIsIHN0cnVjdCBvYmplY3RfaW5mbyAqb2ksCisJCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQoreworCWNvbnN0IGNoYXIgKnR5cGVfYnVmID0gaGRyOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgdHlwZSwgdHlwZV9sZW4gPSAwOworCisJLyoKKwkgKiBUaGUgdHlwZSBjYW4gYmUgb2YgYW55IHNpemUgYnV0IGlzIGZvbGxvd2VkIGJ5CisJICogYSBzcGFjZS4KKwkgKi8KKwlmb3IgKDs7KSB7CisJCWNoYXIgYyA9ICpoZHIrKzsKKwkJaWYgKGMgPT0gJyAnKQorCQkJYnJlYWs7CisJCXR5cGVfbGVuKys7CisJfQorCisJdHlwZSA9IHR5cGVfZnJvbV9zdHJpbmdfZ2VudGx5KHR5cGVfYnVmLCB0eXBlX2xlbiwgMSk7CisJaWYgKG9pLT50eXBlbmFtZSkKKwkJc3RyYnVmX2FkZChvaS0+dHlwZW5hbWUsIHR5cGVfYnVmLCB0eXBlX2xlbik7CisJLyoKKwkgKiBTZXQgdHlwZSB0byAwIGlmIGl0cyBhbiB1bmtub3duIG9iamVjdCBhbmQKKwkgKiB3ZSdyZSBvYnRhaW5pbmcgdGhlIHR5cGUgdXNpbmcgJy0tYWxsb3ctdW5rb3duLXR5cGUnCisJICogb3B0aW9uLgorCSAqLworCWlmICgoZmxhZ3MgJiBMT09LVVBfVU5LTk9XTl9PQkpFQ1QpICYmICh0eXBlIDwgMCkpCisJCXR5cGUgPSAwOworCWVsc2UgaWYgKHR5cGUgPCAwKQorCQlkaWUoImludmFsaWQgb2JqZWN0IHR5cGUiKTsKKwlpZiAob2ktPnR5cGVwKQorCQkqb2ktPnR5cGVwID0gdHlwZTsKKworCS8qCisJICogVGhlIGxlbmd0aCBtdXN0IGZvbGxvdyBpbW1lZGlhdGVseSwgYW5kIGJlIGluIGNhbm9uaWNhbAorCSAqIGRlY2ltYWwgZm9ybWF0IChpZSAiMDEwIiBpcyBub3QgdmFsaWQpLgorCSAqLworCXNpemUgPSAqaGRyKysgLSAnMCc7CisJaWYgKHNpemUgPiA5KQorCQlyZXR1cm4gLTE7CisJaWYgKHNpemUpIHsKKwkJZm9yICg7OykgeworCQkJdW5zaWduZWQgbG9uZyBjID0gKmhkciAtICcwJzsKKwkJCWlmIChjID4gOSkKKwkJCQlicmVhazsKKwkJCWhkcisrOworCQkJc2l6ZSA9IHNpemUgKiAxMCArIGM7CisJCX0KKwl9CisKKwlpZiAob2ktPnNpemVwKQorCQkqb2ktPnNpemVwID0gc2l6ZTsKKworCS8qCisJICogVGhlIGxlbmd0aCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgemVybyBieXRlCisJICovCisJcmV0dXJuICpoZHIgPyAtMSA6IHR5cGU7Cit9CisKK2ludCBwYXJzZV9zaGExX2hlYWRlcihjb25zdCBjaGFyICpoZHIsIHVuc2lnbmVkIGxvbmcgKnNpemVwKQoreworCXN0cnVjdCBvYmplY3RfaW5mbyBvaTsKKworCW9pLnNpemVwID0gc2l6ZXA7CisJb2kudHlwZW5hbWUgPSBOVUxMOworCW9pLnR5cGVwID0gTlVMTDsKKwlyZXR1cm4gcGFyc2Vfc2hhMV9oZWFkZXJfZXh0ZW5kZWQoaGRyLCAmb2ksIExPT0tVUF9SRVBMQUNFX09CSkVDVCk7Cit9CisKK3N0YXRpYyB2b2lkICp1bnBhY2tfc2hhMV9maWxlKHZvaWQgKm1hcCwgdW5zaWduZWQgbG9uZyBtYXBzaXplLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLCB1bnNpZ25lZCBsb25nICpzaXplLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWludCByZXQ7CisJZ2l0X3pzdHJlYW0gc3RyZWFtOworCWNoYXIgaGRyWzgxOTJdOworCisJcmV0ID0gdW5wYWNrX3NoYTFfaGVhZGVyKCZzdHJlYW0sIG1hcCwgbWFwc2l6ZSwgaGRyLCBzaXplb2YoaGRyKSk7CisJaWYgKHJldCA8IFpfT0sgfHwgKCp0eXBlID0gcGFyc2Vfc2hhMV9oZWFkZXIoaGRyLCBzaXplKSkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiB1bnBhY2tfc2hhMV9yZXN0KCZzdHJlYW0sIGhkciwgKnNpemUsIHNoYTEpOworfQorCit1bnNpZ25lZCBsb25nIGdldF9zaXplX2Zyb21fZGVsdGEoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkJICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkgICAgICAgICAgb2ZmX3QgY3VycG9zKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7CisJdW5zaWduZWQgY2hhciBkZWx0YV9oZWFkWzIwXSwgKmluOworCWdpdF96c3RyZWFtIHN0cmVhbTsKKwlpbnQgc3Q7CisKKwltZW1zZXQoJnN0cmVhbSwgMCwgc2l6ZW9mKHN0cmVhbSkpOworCXN0cmVhbS5uZXh0X291dCA9IGRlbHRhX2hlYWQ7CisJc3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihkZWx0YV9oZWFkKTsKKworCWdpdF9pbmZsYXRlX2luaXQoJnN0cmVhbSk7CisJZG8geworCQlpbiA9IHVzZV9wYWNrKHAsIHdfY3VycywgY3VycG9zLCAmc3RyZWFtLmF2YWlsX2luKTsKKwkJc3RyZWFtLm5leHRfaW4gPSBpbjsKKwkJc3QgPSBnaXRfaW5mbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJCWN1cnBvcyArPSBzdHJlYW0ubmV4dF9pbiAtIGluOworCX0gd2hpbGUgKChzdCA9PSBaX09LIHx8IHN0ID09IFpfQlVGX0VSUk9SKSAmJgorCQkgc3RyZWFtLnRvdGFsX291dCA8IHNpemVvZihkZWx0YV9oZWFkKSk7CisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCWlmICgoc3QgIT0gWl9TVFJFQU1fRU5EKSAmJiBzdHJlYW0udG90YWxfb3V0ICE9IHNpemVvZihkZWx0YV9oZWFkKSkgeworCQllcnJvcigiZGVsdGEgZGF0YSB1bnBhY2staW5pdGlhbCBmYWlsZWQiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogRXhhbWluZSB0aGUgaW5pdGlhbCBwYXJ0IG9mIHRoZSBkZWx0YSB0byBmaWd1cmUgb3V0CisJICogdGhlIHJlc3VsdCBzaXplLgorCSAqLworCWRhdGEgPSBkZWx0YV9oZWFkOworCisJLyogaWdub3JlIGJhc2Ugc2l6ZSAqLworCWdldF9kZWx0YV9oZHJfc2l6ZSgmZGF0YSwgZGVsdGFfaGVhZCtzaXplb2YoZGVsdGFfaGVhZCkpOworCisJLyogUmVhZCB0aGUgcmVzdWx0IHNpemUgKi8KKwlyZXR1cm4gZ2V0X2RlbHRhX2hkcl9zaXplKCZkYXRhLCBkZWx0YV9oZWFkK3NpemVvZihkZWx0YV9oZWFkKSk7Cit9CisKK3N0YXRpYyBvZmZfdCBnZXRfZGVsdGFfYmFzZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCQkgICAgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkJCSAgICBvZmZfdCAqY3VycG9zLAorCQkJCSAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkJICAgIG9mZl90IGRlbHRhX29ial9vZmZzZXQpCit7CisJdW5zaWduZWQgY2hhciAqYmFzZV9pbmZvID0gdXNlX3BhY2socCwgd19jdXJzLCAqY3VycG9zLCBOVUxMKTsKKwlvZmZfdCBiYXNlX29mZnNldDsKKworCS8qIHVzZV9wYWNrKCkgYXNzdXJlZCB1cyB3ZSBoYXZlIFtiYXNlX2luZm8sIGJhc2VfaW5mbyArIDIwKQorCSAqIGFzIGEgcmFuZ2UgdGhhdCB3ZSBjYW4gbG9vayBhdCB3aXRob3V0IHdhbGtpbmcgb2ZmIHRoZQorCSAqIGVuZCBvZiB0aGUgbWFwcGVkIHdpbmRvdy4gIEl0cyBhY3R1YWxseSB0aGUgaGFzaCBzaXplCisJICogdGhhdCBpcyBhc3N1cmVkLiAgQW4gT0ZTX0RFTFRBIGxvbmdlciB0aGFuIHRoZSBoYXNoIHNpemUKKwkgKiBpcyBzdHVwaWQsIGFzIHRoZW4gYSBSRUZfREVMVEEgd291bGQgYmUgc21hbGxlciB0byBzdG9yZS4KKwkgKi8KKwlpZiAodHlwZSA9PSBPQkpfT0ZTX0RFTFRBKSB7CisJCXVuc2lnbmVkIHVzZWQgPSAwOworCQl1bnNpZ25lZCBjaGFyIGMgPSBiYXNlX2luZm9bdXNlZCsrXTsKKwkJYmFzZV9vZmZzZXQgPSBjICYgMTI3OworCQl3aGlsZSAoYyAmIDEyOCkgeworCQkJYmFzZV9vZmZzZXQgKz0gMTsKKwkJCWlmICghYmFzZV9vZmZzZXQgfHwgTVNCKGJhc2Vfb2Zmc2V0LCA3KSkKKwkJCQlyZXR1cm4gMDsgIC8qIG92ZXJmbG93ICovCisJCQljID0gYmFzZV9pbmZvW3VzZWQrK107CisJCQliYXNlX29mZnNldCA9IChiYXNlX29mZnNldCA8PCA3KSArIChjICYgMTI3KTsKKwkJfQorCQliYXNlX29mZnNldCA9IGRlbHRhX29ial9vZmZzZXQgLSBiYXNlX29mZnNldDsKKwkJaWYgKGJhc2Vfb2Zmc2V0IDw9IDAgfHwgYmFzZV9vZmZzZXQgPj0gZGVsdGFfb2JqX29mZnNldCkKKwkJCXJldHVybiAwOyAgLyogb3V0IG9mIGJvdW5kICovCisJCSpjdXJwb3MgKz0gdXNlZDsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gT0JKX1JFRl9ERUxUQSkgeworCQkvKiBUaGUgYmFzZSBlbnRyeSBfbXVzdF8gYmUgaW4gdGhlIHNhbWUgcGFjayAqLworCQliYXNlX29mZnNldCA9IGZpbmRfcGFja19lbnRyeV9vbmUoYmFzZV9pbmZvLCBwKTsKKwkJKmN1cnBvcyArPSAyMDsKKwl9IGVsc2UKKwkJZGllKCJJIGFtIHRvdGFsbHkgc2NyZXdlZCIpOworCXJldHVybiBiYXNlX29mZnNldDsKK30KKworLyoKKyAqIExpa2UgZ2V0X2RlbHRhX2Jhc2UgYWJvdmUsIGJ1dCB3ZSByZXR1cm4gdGhlIHNoYTEgaW5zdGVhZCBvZiB0aGUgcGFjaworICogb2Zmc2V0LiBUaGlzIG1lYW5zIGl0IGlzIGNoZWFwZXIgZm9yIFJFRiBkZWx0YXMgKHdlIGRvIG5vdCBoYXZlIHRvIGRvCisgKiB0aGUgZmluYWwgb2JqZWN0IGxvb2t1cCksIGJ1dCBtb3JlIGV4cGVuc2l2ZSBmb3IgT0ZTIGRlbHRhcyAod2UKKyAqIGhhdmUgdG8gbG9hZCB0aGUgcmV2aWR4IHRvIGNvbnZlcnQgdGhlIG9mZnNldCBiYWNrIGludG8gYSBzaGExKS4KKyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmdldF9kZWx0YV9iYXNlX3NoYTEoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkJCQlzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkJCQlvZmZfdCBjdXJwb3MsCisJCQkJCQllbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCQkJCQlvZmZfdCBkZWx0YV9vYmpfb2Zmc2V0KQoreworCWlmICh0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJdW5zaWduZWQgY2hhciAqYmFzZSA9IHVzZV9wYWNrKHAsIHdfY3VycywgY3VycG9zLCBOVUxMKTsKKwkJcmV0dXJuIGJhc2U7CisJfSBlbHNlIGlmICh0eXBlID09IE9CSl9PRlNfREVMVEEpIHsKKwkJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpZHg7CisJCW9mZl90IGJhc2Vfb2Zmc2V0ID0gZ2V0X2RlbHRhX2Jhc2UocCwgd19jdXJzLCAmY3VycG9zLAorCQkJCQkJICAgdHlwZSwgZGVsdGFfb2JqX29mZnNldCk7CisKKwkJaWYgKCFiYXNlX29mZnNldCkKKwkJCXJldHVybiBOVUxMOworCisJCXJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBiYXNlX29mZnNldCk7CisJCWlmICghcmV2aWR4KQorCQkJcmV0dXJuIE5VTEw7CisKKwkJcmV0dXJuIG50aF9wYWNrZWRfb2JqZWN0X3NoYTEocCwgcmV2aWR4LT5ucik7CisJfSBlbHNlCisJCXJldHVybiBOVUxMOworfQorCitpbnQgdW5wYWNrX29iamVjdF9oZWFkZXIoc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkgc3RydWN0IHBhY2tfd2luZG93ICoqd19jdXJzLAorCQkJIG9mZl90ICpjdXJwb3MsCisJCQkgdW5zaWduZWQgbG9uZyAqc2l6ZXApCit7CisJdW5zaWduZWQgY2hhciAqYmFzZTsKKwl1bnNpZ25lZCBsb25nIGxlZnQ7CisJdW5zaWduZWQgbG9uZyB1c2VkOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKworCS8qIHVzZV9wYWNrKCkgYXNzdXJlcyB1cyB3ZSBoYXZlIFtiYXNlLCBiYXNlICsgMjApIGF2YWlsYWJsZQorCSAqIGFzIGEgcmFuZ2UgdGhhdCB3ZSBjYW4gbG9vayBhdC4gIChJdHMgYWN0dWFsbHkgdGhlIGhhc2gKKwkgKiBzaXplIHRoYXQgaXMgYXNzdXJlZC4pICBXaXRoIG91ciBvYmplY3QgaGVhZGVyIGVuY29kaW5nCisJICogdGhlIG1heGltdW0gZGVmbGF0ZWQgb2JqZWN0IHNpemUgaXMgMl4xMzcsIHdoaWNoIGlzIGp1c3QKKwkgKiBpbnNhbmUsIHNvIHdlIGtub3cgd29uJ3QgZXhjZWVkIHdoYXQgd2UgaGF2ZSBiZWVuIGdpdmVuLgorCSAqLworCWJhc2UgPSB1c2VfcGFjayhwLCB3X2N1cnMsICpjdXJwb3MsICZsZWZ0KTsKKwl1c2VkID0gdW5wYWNrX29iamVjdF9oZWFkZXJfYnVmZmVyKGJhc2UsIGxlZnQsICZ0eXBlLCBzaXplcCk7CisJaWYgKCF1c2VkKSB7CisJCXR5cGUgPSBPQkpfQkFEOworCX0gZWxzZQorCQkqY3VycG9zICs9IHVzZWQ7CisKKwlyZXR1cm4gdHlwZTsKK30KKworc3RhdGljIGludCByZXRyeV9iYWRfcGFja2VkX29mZnNldChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3Qgb2JqX29mZnNldCkKK3sKKwlpbnQgdHlwZTsKKwlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCXJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBvYmpfb2Zmc2V0KTsKKwlpZiAoIXJldmlkeCkKKwkJcmV0dXJuIE9CSl9CQUQ7CisJc2hhMSA9IG50aF9wYWNrZWRfb2JqZWN0X3NoYTEocCwgcmV2aWR4LT5ucik7CisJbWFya19iYWRfcGFja2VkX29iamVjdChwLCBzaGExKTsKKwl0eXBlID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlpZiAodHlwZSA8PSBPQkpfTk9ORSkKKwkJcmV0dXJuIE9CSl9CQUQ7CisJcmV0dXJuIHR5cGU7Cit9CisKKyNkZWZpbmUgUE9JX1NUQUNLX1BSRUFMTE9DIDY0CisKK3N0YXRpYyBlbnVtIG9iamVjdF90eXBlIHBhY2tlZF90b19vYmplY3RfdHlwZShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCQkJICAgICAgb2ZmX3Qgb2JqX29mZnNldCwKKwkJCQkJICAgICAgZW51bSBvYmplY3RfdHlwZSB0eXBlLAorCQkJCQkgICAgICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkJCSAgICAgIG9mZl90IGN1cnBvcykKK3sKKwlvZmZfdCBzbWFsbF9wb2lfc3RhY2tbUE9JX1NUQUNLX1BSRUFMTE9DXTsKKwlvZmZfdCAqcG9pX3N0YWNrID0gc21hbGxfcG9pX3N0YWNrOworCWludCBwb2lfc3RhY2tfbnIgPSAwLCBwb2lfc3RhY2tfYWxsb2MgPSBQT0lfU1RBQ0tfUFJFQUxMT0M7CisKKwl3aGlsZSAodHlwZSA9PSBPQkpfT0ZTX0RFTFRBIHx8IHR5cGUgPT0gT0JKX1JFRl9ERUxUQSkgeworCQlvZmZfdCBiYXNlX29mZnNldDsKKwkJdW5zaWduZWQgbG9uZyBzaXplOworCQkvKiBQdXNoIHRoZSBvYmplY3Qgd2UncmUgZ29pbmcgdG8gbGVhdmUgYmVoaW5kICovCisJCWlmIChwb2lfc3RhY2tfbnIgPj0gcG9pX3N0YWNrX2FsbG9jICYmIHBvaV9zdGFjayA9PSBzbWFsbF9wb2lfc3RhY2spIHsKKwkJCXBvaV9zdGFja19hbGxvYyA9IGFsbG9jX25yKHBvaV9zdGFja19ucik7CisJCQlwb2lfc3RhY2sgPSB4bWFsbG9jKHNpemVvZihvZmZfdCkqcG9pX3N0YWNrX2FsbG9jKTsKKwkJCW1lbWNweShwb2lfc3RhY2ssIHNtYWxsX3BvaV9zdGFjaywgc2l6ZW9mKG9mZl90KSpwb2lfc3RhY2tfbnIpOworCQl9IGVsc2UgeworCQkJQUxMT0NfR1JPVyhwb2lfc3RhY2ssIHBvaV9zdGFja19ucisxLCBwb2lfc3RhY2tfYWxsb2MpOworCQl9CisJCXBvaV9zdGFja1twb2lfc3RhY2tfbnIrK10gPSBvYmpfb2Zmc2V0OworCQkvKiBJZiBwYXJzaW5nIHRoZSBiYXNlIG9mZnNldCBmYWlscywganVzdCB1bndpbmQgKi8KKwkJYmFzZV9vZmZzZXQgPSBnZXRfZGVsdGFfYmFzZShwLCB3X2N1cnMsICZjdXJwb3MsIHR5cGUsIG9ial9vZmZzZXQpOworCQlpZiAoIWJhc2Vfb2Zmc2V0KQorCQkJZ290byB1bndpbmQ7CisJCWN1cnBvcyA9IG9ial9vZmZzZXQgPSBiYXNlX29mZnNldDsKKwkJdHlwZSA9IHVucGFja19vYmplY3RfaGVhZGVyKHAsIHdfY3VycywgJmN1cnBvcywgJnNpemUpOworCQlpZiAodHlwZSA8PSBPQkpfTk9ORSkgeworCQkJLyogSWYgZ2V0dGluZyB0aGUgYmFzZSBpdHNlbGYgZmFpbHMsIHdlIGZpcnN0CisJCQkgKiByZXRyeSB0aGUgYmFzZSwgb3RoZXJ3aXNlIHVud2luZCAqLworCQkJdHlwZSA9IHJldHJ5X2JhZF9wYWNrZWRfb2Zmc2V0KHAsIGJhc2Vfb2Zmc2V0KTsKKwkJCWlmICh0eXBlID4gT0JKX05PTkUpCisJCQkJZ290byBvdXQ7CisJCQlnb3RvIHVud2luZDsKKwkJfQorCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgT0JKX0JBRDoKKwljYXNlIE9CSl9DT01NSVQ6CisJY2FzZSBPQkpfVFJFRToKKwljYXNlIE9CSl9CTE9COgorCWNhc2UgT0JKX1RBRzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyb3IoInVua25vd24gb2JqZWN0IHR5cGUgJWkgYXQgb2Zmc2V0ICUiUFJJdU1BWCIgaW4gJXMiLAorCQkgICAgICB0eXBlLCAodWludG1heF90KW9ial9vZmZzZXQsIHAtPnBhY2tfbmFtZSk7CisJCXR5cGUgPSBPQkpfQkFEOworCX0KKworb3V0OgorCWlmIChwb2lfc3RhY2sgIT0gc21hbGxfcG9pX3N0YWNrKQorCQlmcmVlKHBvaV9zdGFjayk7CisJcmV0dXJuIHR5cGU7CisKK3Vud2luZDoKKwl3aGlsZSAocG9pX3N0YWNrX25yKSB7CisJCW9ial9vZmZzZXQgPSBwb2lfc3RhY2tbLS1wb2lfc3RhY2tfbnJdOworCQl0eXBlID0gcmV0cnlfYmFkX3BhY2tlZF9vZmZzZXQocCwgb2JqX29mZnNldCk7CisJCWlmICh0eXBlID4gT0JKX05PTkUpCisJCQlnb3RvIG91dDsKKwl9CisJdHlwZSA9IE9CSl9CQUQ7CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFja2VkX29iamVjdF9pbmZvKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBvYmpfb2Zmc2V0LAorCQkJICAgICAgc3RydWN0IG9iamVjdF9pbmZvICpvaSkKK3sKKwlzdHJ1Y3QgcGFja193aW5kb3cgKndfY3VycyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBzaXplOworCW9mZl90IGN1cnBvcyA9IG9ial9vZmZzZXQ7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJLyoKKwkgKiBXZSBhbHdheXMgZ2V0IHRoZSByZXByZXNlbnRhdGlvbiB0eXBlLCBidXQgb25seSBjb252ZXJ0IGl0IHRvCisJICogYSAicmVhbCIgdHlwZSBsYXRlciBpZiB0aGUgY2FsbGVyIGlzIGludGVyZXN0ZWQuCisJICovCisJdHlwZSA9IHVucGFja19vYmplY3RfaGVhZGVyKHAsICZ3X2N1cnMsICZjdXJwb3MsICZzaXplKTsKKworCWlmIChvaS0+c2l6ZXApIHsKKwkJaWYgKHR5cGUgPT0gT0JKX09GU19ERUxUQSB8fCB0eXBlID09IE9CSl9SRUZfREVMVEEpIHsKKwkJCW9mZl90IHRtcF9wb3MgPSBjdXJwb3M7CisJCQlvZmZfdCBiYXNlX29mZnNldCA9IGdldF9kZWx0YV9iYXNlKHAsICZ3X2N1cnMsICZ0bXBfcG9zLAorCQkJCQkJCSAgIHR5cGUsIG9ial9vZmZzZXQpOworCQkJaWYgKCFiYXNlX29mZnNldCkgeworCQkJCXR5cGUgPSBPQkpfQkFEOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJKm9pLT5zaXplcCA9IGdldF9zaXplX2Zyb21fZGVsdGEocCwgJndfY3VycywgdG1wX3Bvcyk7CisJCQlpZiAoKm9pLT5zaXplcCA9PSAwKSB7CisJCQkJdHlwZSA9IE9CSl9CQUQ7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQkqb2ktPnNpemVwID0gc2l6ZTsKKwkJfQorCX0KKworCWlmIChvaS0+ZGlza19zaXplcCkgeworCQlzdHJ1Y3QgcmV2aW5kZXhfZW50cnkgKnJldmlkeCA9IGZpbmRfcGFja19yZXZpbmRleChwLCBvYmpfb2Zmc2V0KTsKKwkJKm9pLT5kaXNrX3NpemVwID0gcmV2aWR4WzFdLm9mZnNldCAtIG9ial9vZmZzZXQ7CisJfQorCisJaWYgKG9pLT50eXBlcCkgeworCQkqb2ktPnR5cGVwID0gcGFja2VkX3RvX29iamVjdF90eXBlKHAsIG9ial9vZmZzZXQsIHR5cGUsICZ3X2N1cnMsIGN1cnBvcyk7CisJCWlmICgqb2ktPnR5cGVwIDwgMCkgeworCQkJdHlwZSA9IE9CSl9CQUQ7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChvaS0+ZGVsdGFfYmFzZV9zaGExKSB7CisJCWlmICh0eXBlID09IE9CSl9PRlNfREVMVEEgfHwgdHlwZSA9PSBPQkpfUkVGX0RFTFRBKSB7CisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlOworCisJCQliYXNlID0gZ2V0X2RlbHRhX2Jhc2Vfc2hhMShwLCAmd19jdXJzLCBjdXJwb3MsCisJCQkJCQkgICB0eXBlLCBvYmpfb2Zmc2V0KTsKKwkJCWlmICghYmFzZSkgeworCQkJCXR5cGUgPSBPQkpfQkFEOworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQloYXNoY3B5KG9pLT5kZWx0YV9iYXNlX3NoYTEsIGJhc2UpOworCQl9IGVsc2UKKwkJCWhhc2hjbHIob2ktPmRlbHRhX2Jhc2Vfc2hhMSk7CisJfQorCitvdXQ6CisJdW51c2VfcGFjaygmd19jdXJzKTsKKwlyZXR1cm4gdHlwZTsKK30KKworc3RhdGljIHZvaWQgKnVucGFja19jb21wcmVzc2VkX2VudHJ5KHN0cnVjdCBwYWNrZWRfZ2l0ICpwLAorCQkJCSAgICBzdHJ1Y3QgcGFja193aW5kb3cgKip3X2N1cnMsCisJCQkJICAgIG9mZl90IGN1cnBvcywKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBzdDsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJdW5zaWduZWQgY2hhciAqYnVmZmVyLCAqaW47CisKKwlidWZmZXIgPSB4bWFsbG9jel9nZW50bHkoc2l6ZSk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiBOVUxMOworCW1lbXNldCgmc3RyZWFtLCAwLCBzaXplb2Yoc3RyZWFtKSk7CisJc3RyZWFtLm5leHRfb3V0ID0gYnVmZmVyOworCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplICsgMTsKKworCWdpdF9pbmZsYXRlX2luaXQoJnN0cmVhbSk7CisJZG8geworCQlpbiA9IHVzZV9wYWNrKHAsIHdfY3VycywgY3VycG9zLCAmc3RyZWFtLmF2YWlsX2luKTsKKwkJc3RyZWFtLm5leHRfaW4gPSBpbjsKKwkJc3QgPSBnaXRfaW5mbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJCWlmICghc3RyZWFtLmF2YWlsX291dCkKKwkJCWJyZWFrOyAvKiB0aGUgcGF5bG9hZCBpcyBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUgKi8KKwkJY3VycG9zICs9IHN0cmVhbS5uZXh0X2luIC0gaW47CisJfSB3aGlsZSAoc3QgPT0gWl9PSyB8fCBzdCA9PSBaX0JVRl9FUlJPUik7CisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCWlmICgoc3QgIT0gWl9TVFJFQU1fRU5EKSB8fCBzdHJlYW0udG90YWxfb3V0ICE9IHNpemUpIHsKKwkJZnJlZShidWZmZXIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gYnVmZmVyOworfQorCisjZGVmaW5lIE1BWF9ERUxUQV9DQUNIRSAoMjU2KQorCitzdGF0aWMgc2l6ZV90IGRlbHRhX2Jhc2VfY2FjaGVkOworCitzdGF0aWMgc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfbHJ1X2xpc3QgeworCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2xydV9saXN0ICpwcmV2OworCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2xydV9saXN0ICpuZXh0OworfSBkZWx0YV9iYXNlX2NhY2hlX2xydSA9IHsgJmRlbHRhX2Jhc2VfY2FjaGVfbHJ1LCAmZGVsdGFfYmFzZV9jYWNoZV9scnUgfTsKKworc3RhdGljIHN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5IHsKKwlzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9scnVfbGlzdCBscnU7CisJdm9pZCAqZGF0YTsKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKwlvZmZfdCBiYXNlX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworfSBkZWx0YV9iYXNlX2NhY2hlW01BWF9ERUxUQV9DQUNIRV07CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhY2tfZW50cnlfaGFzaChzdHJ1Y3QgcGFja2VkX2dpdCAqcCwgb2ZmX3QgYmFzZV9vZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyBoYXNoOworCisJaGFzaCA9ICh1bnNpZ25lZCBsb25nKXAgKyAodW5zaWduZWQgbG9uZyliYXNlX29mZnNldDsKKwloYXNoICs9IChoYXNoID4+IDgpICsgKGhhc2ggPj4gMTYpOworCXJldHVybiBoYXNoICUgTUFYX0RFTFRBX0NBQ0hFOworfQorCitzdGF0aWMgc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnkgKgorZ2V0X2RlbHRhX2Jhc2VfY2FjaGVfZW50cnkoc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IGJhc2Vfb2Zmc2V0KQoreworCXVuc2lnbmVkIGxvbmcgaGFzaCA9IHBhY2tfZW50cnlfaGFzaChwLCBiYXNlX29mZnNldCk7CisJcmV0dXJuIGRlbHRhX2Jhc2VfY2FjaGUgKyBoYXNoOworfQorCitzdGF0aWMgaW50IGVxX2RlbHRhX2Jhc2VfY2FjaGVfZW50cnkoc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfZW50cnkgKmVudCwKKwkJCQkgICAgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBiYXNlX29mZnNldCkKK3sKKwlyZXR1cm4gKGVudC0+ZGF0YSAmJiBlbnQtPnAgPT0gcCAmJiBlbnQtPmJhc2Vfb2Zmc2V0ID09IGJhc2Vfb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBpbl9kZWx0YV9iYXNlX2NhY2hlKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBiYXNlX29mZnNldCkKK3sKKwlzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqZW50OworCWVudCA9IGdldF9kZWx0YV9iYXNlX2NhY2hlX2VudHJ5KHAsIGJhc2Vfb2Zmc2V0KTsKKwlyZXR1cm4gZXFfZGVsdGFfYmFzZV9jYWNoZV9lbnRyeShlbnQsIHAsIGJhc2Vfb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgY2xlYXJfZGVsdGFfYmFzZV9jYWNoZV9lbnRyeShzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqZW50KQoreworCWVudC0+ZGF0YSA9IE5VTEw7CisJZW50LT5scnUubmV4dC0+cHJldiA9IGVudC0+bHJ1LnByZXY7CisJZW50LT5scnUucHJldi0+bmV4dCA9IGVudC0+bHJ1Lm5leHQ7CisJZGVsdGFfYmFzZV9jYWNoZWQgLT0gZW50LT5zaXplOworfQorCitzdGF0aWMgdm9pZCAqY2FjaGVfb3JfdW5wYWNrX2VudHJ5KHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBiYXNlX29mZnNldCwKKwl1bnNpZ25lZCBsb25nICpiYXNlX3NpemUsIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsIGludCBrZWVwX2NhY2hlKQoreworCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5ICplbnQ7CisJdm9pZCAqcmV0OworCisJZW50ID0gZ2V0X2RlbHRhX2Jhc2VfY2FjaGVfZW50cnkocCwgYmFzZV9vZmZzZXQpOworCisJaWYgKCFlcV9kZWx0YV9iYXNlX2NhY2hlX2VudHJ5KGVudCwgcCwgYmFzZV9vZmZzZXQpKQorCQlyZXR1cm4gdW5wYWNrX2VudHJ5KHAsIGJhc2Vfb2Zmc2V0LCB0eXBlLCBiYXNlX3NpemUpOworCisJcmV0ID0gZW50LT5kYXRhOworCisJaWYgKCFrZWVwX2NhY2hlKQorCQljbGVhcl9kZWx0YV9iYXNlX2NhY2hlX2VudHJ5KGVudCk7CisJZWxzZQorCQlyZXQgPSB4bWVtZHVweihlbnQtPmRhdGEsIGVudC0+c2l6ZSk7CisJKnR5cGUgPSBlbnQtPnR5cGU7CisJKmJhc2Vfc2l6ZSA9IGVudC0+c2l6ZTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVsZWFzZV9kZWx0YV9iYXNlX2NhY2hlKHN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5ICplbnQpCit7CisJaWYgKGVudC0+ZGF0YSkgeworCQlmcmVlKGVudC0+ZGF0YSk7CisJCWVudC0+ZGF0YSA9IE5VTEw7CisJCWVudC0+bHJ1Lm5leHQtPnByZXYgPSBlbnQtPmxydS5wcmV2OworCQllbnQtPmxydS5wcmV2LT5uZXh0ID0gZW50LT5scnUubmV4dDsKKwkJZGVsdGFfYmFzZV9jYWNoZWQgLT0gZW50LT5zaXplOworCX0KK30KKwordm9pZCBjbGVhcl9kZWx0YV9iYXNlX2NhY2hlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwOworCWZvciAocCA9IDA7IHAgPCBNQVhfREVMVEFfQ0FDSEU7IHArKykKKwkJcmVsZWFzZV9kZWx0YV9iYXNlX2NhY2hlKCZkZWx0YV9iYXNlX2NhY2hlW3BdKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2RlbHRhX2Jhc2VfY2FjaGUoc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IGJhc2Vfb2Zmc2V0LAorCXZvaWQgKmJhc2UsIHVuc2lnbmVkIGxvbmcgYmFzZV9zaXplLCBlbnVtIG9iamVjdF90eXBlIHR5cGUpCit7CisJdW5zaWduZWQgbG9uZyBoYXNoID0gcGFja19lbnRyeV9oYXNoKHAsIGJhc2Vfb2Zmc2V0KTsKKwlzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqZW50ID0gZGVsdGFfYmFzZV9jYWNoZSArIGhhc2g7CisJc3RydWN0IGRlbHRhX2Jhc2VfY2FjaGVfbHJ1X2xpc3QgKmxydTsKKworCXJlbGVhc2VfZGVsdGFfYmFzZV9jYWNoZShlbnQpOworCWRlbHRhX2Jhc2VfY2FjaGVkICs9IGJhc2Vfc2l6ZTsKKworCWZvciAobHJ1ID0gZGVsdGFfYmFzZV9jYWNoZV9scnUubmV4dDsKKwkgICAgIGRlbHRhX2Jhc2VfY2FjaGVkID4gZGVsdGFfYmFzZV9jYWNoZV9saW1pdAorCSAgICAgJiYgbHJ1ICE9ICZkZWx0YV9iYXNlX2NhY2hlX2xydTsKKwkgICAgIGxydSA9IGxydS0+bmV4dCkgeworCQlzdHJ1Y3QgZGVsdGFfYmFzZV9jYWNoZV9lbnRyeSAqZiA9ICh2b2lkICopbHJ1OworCQlpZiAoZi0+dHlwZSA9PSBPQkpfQkxPQikKKwkJCXJlbGVhc2VfZGVsdGFfYmFzZV9jYWNoZShmKTsKKwl9CisJZm9yIChscnUgPSBkZWx0YV9iYXNlX2NhY2hlX2xydS5uZXh0OworCSAgICAgZGVsdGFfYmFzZV9jYWNoZWQgPiBkZWx0YV9iYXNlX2NhY2hlX2xpbWl0CisJICAgICAmJiBscnUgIT0gJmRlbHRhX2Jhc2VfY2FjaGVfbHJ1OworCSAgICAgbHJ1ID0gbHJ1LT5uZXh0KSB7CisJCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5ICpmID0gKHZvaWQgKilscnU7CisJCXJlbGVhc2VfZGVsdGFfYmFzZV9jYWNoZShmKTsKKwl9CisKKwllbnQtPnAgPSBwOworCWVudC0+YmFzZV9vZmZzZXQgPSBiYXNlX29mZnNldDsKKwllbnQtPnR5cGUgPSB0eXBlOworCWVudC0+ZGF0YSA9IGJhc2U7CisJZW50LT5zaXplID0gYmFzZV9zaXplOworCWVudC0+bHJ1Lm5leHQgPSAmZGVsdGFfYmFzZV9jYWNoZV9scnU7CisJZW50LT5scnUucHJldiA9IGRlbHRhX2Jhc2VfY2FjaGVfbHJ1LnByZXY7CisJZGVsdGFfYmFzZV9jYWNoZV9scnUucHJldi0+bmV4dCA9ICZlbnQtPmxydTsKKwlkZWx0YV9iYXNlX2NhY2hlX2xydS5wcmV2ID0gJmVudC0+bHJ1OworfQorCitzdGF0aWMgdm9pZCAqcmVhZF9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCSB1bnNpZ25lZCBsb25nICpzaXplKTsKKworc3RhdGljIHZvaWQgd3JpdGVfcGFja19hY2Nlc3NfbG9nKHN0cnVjdCBwYWNrZWRfZ2l0ICpwLCBvZmZfdCBvYmpfb2Zmc2V0KQoreworCXN0YXRpYyBzdHJ1Y3QgdHJhY2Vfa2V5IHBhY2tfYWNjZXNzID0gVFJBQ0VfS0VZX0lOSVQoUEFDS19BQ0NFU1MpOworCXRyYWNlX3ByaW50Zl9rZXkoJnBhY2tfYWNjZXNzLCAiJXMgJSJQUkl1TUFYIlxuIiwKKwkJCSBwLT5wYWNrX25hbWUsICh1aW50bWF4X3Qpb2JqX29mZnNldCk7Cit9CisKK2ludCBkb19jaGVja19wYWNrZWRfb2JqZWN0X2NyYzsKKworI2RlZmluZSBVTlBBQ0tfRU5UUllfU1RBQ0tfUFJFQUxMT0MgNjQKK3N0cnVjdCB1bnBhY2tfZW50cnlfc3RhY2tfZW50IHsKKwlvZmZfdCBvYmpfb2Zmc2V0OworCW9mZl90IGN1cnBvczsKKwl1bnNpZ25lZCBsb25nIHNpemU7Cit9OworCit2b2lkICp1bnBhY2tfZW50cnkoc3RydWN0IHBhY2tlZF9naXQgKnAsIG9mZl90IG9ial9vZmZzZXQsCisJCSAgIGVudW0gb2JqZWN0X3R5cGUgKmZpbmFsX3R5cGUsIHVuc2lnbmVkIGxvbmcgKmZpbmFsX3NpemUpCit7CisJc3RydWN0IHBhY2tfd2luZG93ICp3X2N1cnMgPSBOVUxMOworCW9mZl90IGN1cnBvcyA9IG9ial9vZmZzZXQ7CisJdm9pZCAqZGF0YSA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwlzdHJ1Y3QgdW5wYWNrX2VudHJ5X3N0YWNrX2VudCBzbWFsbF9kZWx0YV9zdGFja1tVTlBBQ0tfRU5UUllfU1RBQ0tfUFJFQUxMT0NdOworCXN0cnVjdCB1bnBhY2tfZW50cnlfc3RhY2tfZW50ICpkZWx0YV9zdGFjayA9IHNtYWxsX2RlbHRhX3N0YWNrOworCWludCBkZWx0YV9zdGFja19uciA9IDAsIGRlbHRhX3N0YWNrX2FsbG9jID0gVU5QQUNLX0VOVFJZX1NUQUNLX1BSRUFMTE9DOworCWludCBiYXNlX2Zyb21fY2FjaGUgPSAwOworCisJd3JpdGVfcGFja19hY2Nlc3NfbG9nKHAsIG9ial9vZmZzZXQpOworCisJLyogUEhBU0UgMTogZHJpbGwgZG93biB0byB0aGUgaW5uZXJtb3N0IGJhc2Ugb2JqZWN0ICovCisJZm9yICg7OykgeworCQlvZmZfdCBiYXNlX29mZnNldDsKKwkJaW50IGk7CisJCXN0cnVjdCBkZWx0YV9iYXNlX2NhY2hlX2VudHJ5ICplbnQ7CisKKwkJZW50ID0gZ2V0X2RlbHRhX2Jhc2VfY2FjaGVfZW50cnkocCwgY3VycG9zKTsKKwkJaWYgKGVxX2RlbHRhX2Jhc2VfY2FjaGVfZW50cnkoZW50LCBwLCBjdXJwb3MpKSB7CisJCQl0eXBlID0gZW50LT50eXBlOworCQkJZGF0YSA9IGVudC0+ZGF0YTsKKwkJCXNpemUgPSBlbnQtPnNpemU7CisJCQljbGVhcl9kZWx0YV9iYXNlX2NhY2hlX2VudHJ5KGVudCk7CisJCQliYXNlX2Zyb21fY2FjaGUgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoZG9fY2hlY2tfcGFja2VkX29iamVjdF9jcmMgJiYgcC0+aW5kZXhfdmVyc2lvbiA+IDEpIHsKKwkJCXN0cnVjdCByZXZpbmRleF9lbnRyeSAqcmV2aWR4ID0gZmluZF9wYWNrX3JldmluZGV4KHAsIG9ial9vZmZzZXQpOworCQkJdW5zaWduZWQgbG9uZyBsZW4gPSByZXZpZHhbMV0ub2Zmc2V0IC0gb2JqX29mZnNldDsKKwkJCWlmIChjaGVja19wYWNrX2NyYyhwLCAmd19jdXJzLCBvYmpfb2Zmc2V0LCBsZW4sIHJldmlkeC0+bnIpKSB7CisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSA9CisJCQkJCW50aF9wYWNrZWRfb2JqZWN0X3NoYTEocCwgcmV2aWR4LT5ucik7CisJCQkJZXJyb3IoImJhZCBwYWNrZWQgb2JqZWN0IENSQyBmb3IgJXMiLAorCQkJCSAgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKwkJCQltYXJrX2JhZF9wYWNrZWRfb2JqZWN0KHAsIHNoYTEpOworCQkJCXVudXNlX3BhY2soJndfY3Vycyk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCX0KKworCQl0eXBlID0gdW5wYWNrX29iamVjdF9oZWFkZXIocCwgJndfY3VycywgJmN1cnBvcywgJnNpemUpOworCQlpZiAodHlwZSAhPSBPQkpfT0ZTX0RFTFRBICYmIHR5cGUgIT0gT0JKX1JFRl9ERUxUQSkKKwkJCWJyZWFrOworCisJCWJhc2Vfb2Zmc2V0ID0gZ2V0X2RlbHRhX2Jhc2UocCwgJndfY3VycywgJmN1cnBvcywgdHlwZSwgb2JqX29mZnNldCk7CisJCWlmICghYmFzZV9vZmZzZXQpIHsKKwkJCWVycm9yKCJmYWlsZWQgdG8gdmFsaWRhdGUgZGVsdGEgYmFzZSByZWZlcmVuY2UgIgorCQkJICAgICAgImF0IG9mZnNldCAlIlBSSXVNQVgiIGZyb20gJXMiLAorCQkJICAgICAgKHVpbnRtYXhfdCljdXJwb3MsIHAtPnBhY2tfbmFtZSk7CisJCQkvKiBiYWlsIHRvIHBoYXNlIDIsIGluIGhvcGVzIG9mIHJlY292ZXJ5ICovCisJCQlkYXRhID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogcHVzaCBvYmplY3QsIHByb2NlZWQgdG8gYmFzZSAqLworCQlpZiAoZGVsdGFfc3RhY2tfbnIgPj0gZGVsdGFfc3RhY2tfYWxsb2MKKwkJICAgICYmIGRlbHRhX3N0YWNrID09IHNtYWxsX2RlbHRhX3N0YWNrKSB7CisJCQlkZWx0YV9zdGFja19hbGxvYyA9IGFsbG9jX25yKGRlbHRhX3N0YWNrX25yKTsKKwkJCWRlbHRhX3N0YWNrID0geG1hbGxvYyhzaXplb2YoKmRlbHRhX3N0YWNrKSpkZWx0YV9zdGFja19hbGxvYyk7CisJCQltZW1jcHkoZGVsdGFfc3RhY2ssIHNtYWxsX2RlbHRhX3N0YWNrLAorCQkJICAgICAgIHNpemVvZigqZGVsdGFfc3RhY2spKmRlbHRhX3N0YWNrX25yKTsKKwkJfSBlbHNlIHsKKwkJCUFMTE9DX0dST1coZGVsdGFfc3RhY2ssIGRlbHRhX3N0YWNrX25yKzEsIGRlbHRhX3N0YWNrX2FsbG9jKTsKKwkJfQorCQlpID0gZGVsdGFfc3RhY2tfbnIrKzsKKwkJZGVsdGFfc3RhY2tbaV0ub2JqX29mZnNldCA9IG9ial9vZmZzZXQ7CisJCWRlbHRhX3N0YWNrW2ldLmN1cnBvcyA9IGN1cnBvczsKKwkJZGVsdGFfc3RhY2tbaV0uc2l6ZSA9IHNpemU7CisKKwkJY3VycG9zID0gb2JqX29mZnNldCA9IGJhc2Vfb2Zmc2V0OworCX0KKworCS8qIFBIQVNFIDI6IGhhbmRsZSB0aGUgYmFzZSAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgT0JKX09GU19ERUxUQToKKwljYXNlIE9CSl9SRUZfREVMVEE6CisJCWlmIChkYXRhKQorCQkJZGllKCJCVUcgaW4gdW5wYWNrX2VudHJ5OiBsZWZ0IGxvb3AgYXQgYSB2YWxpZCBkZWx0YSIpOworCQlicmVhazsKKwljYXNlIE9CSl9DT01NSVQ6CisJY2FzZSBPQkpfVFJFRToKKwljYXNlIE9CSl9CTE9COgorCWNhc2UgT0JKX1RBRzoKKwkJaWYgKCFiYXNlX2Zyb21fY2FjaGUpCisJCQlkYXRhID0gdW5wYWNrX2NvbXByZXNzZWRfZW50cnkocCwgJndfY3VycywgY3VycG9zLCBzaXplKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGF0YSA9IE5VTEw7CisJCWVycm9yKCJ1bmtub3duIG9iamVjdCB0eXBlICVpIGF0IG9mZnNldCAlIlBSSXVNQVgiIGluICVzIiwKKwkJICAgICAgdHlwZSwgKHVpbnRtYXhfdClvYmpfb2Zmc2V0LCBwLT5wYWNrX25hbWUpOworCX0KKworCS8qIFBIQVNFIDM6IGFwcGx5IGRlbHRhcyBpbiBvcmRlciAqLworCisJLyogaW52YXJpYW50czoKKwkgKiAgICdkYXRhJyBob2xkcyB0aGUgYmFzZSBkYXRhLCBvciBOVUxMIGlmIHRoZXJlIHdhcyBjb3JydXB0aW9uCisJICovCisJd2hpbGUgKGRlbHRhX3N0YWNrX25yKSB7CisJCXZvaWQgKmRlbHRhX2RhdGE7CisJCXZvaWQgKmJhc2UgPSBkYXRhOworCQl1bnNpZ25lZCBsb25nIGRlbHRhX3NpemUsIGJhc2Vfc2l6ZSA9IHNpemU7CisJCWludCBpOworCisJCWRhdGEgPSBOVUxMOworCisJCWlmIChiYXNlKQorCQkJYWRkX2RlbHRhX2Jhc2VfY2FjaGUocCwgb2JqX29mZnNldCwgYmFzZSwgYmFzZV9zaXplLCB0eXBlKTsKKworCQlpZiAoIWJhc2UpIHsKKwkJCS8qCisJCQkgKiBXZSdyZSBwcm9iYWJseSBpbiBkZWVwIHNoaXQsIGJ1dCBsZXQncyB0cnkgdG8gZmV0Y2gKKwkJCSAqIHRoZSByZXF1aXJlZCBiYXNlIGFueXdheSBmcm9tIGFub3RoZXIgcGFjayBvciBsb29zZS4KKwkJCSAqIFRoaXMgaXMgY29zdGx5IGJ1dCBzaG91bGQgaGFwcGVuIG9ubHkgaW4gdGhlIHByZXNlbmNlCisJCQkgKiBvZiBhIGNvcnJ1cHRlZCBwYWNrLCBhbmQgaXMgYmV0dGVyIHRoYW4gZmFpbGluZyBvdXRyaWdodC4KKwkJCSAqLworCQkJc3RydWN0IHJldmluZGV4X2VudHJ5ICpyZXZpZHg7CisJCQljb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlX3NoYTE7CisJCQlyZXZpZHggPSBmaW5kX3BhY2tfcmV2aW5kZXgocCwgb2JqX29mZnNldCk7CisJCQlpZiAocmV2aWR4KSB7CisJCQkJYmFzZV9zaGExID0gbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCByZXZpZHgtPm5yKTsKKwkJCQllcnJvcigiZmFpbGVkIHRvIHJlYWQgZGVsdGEgYmFzZSBvYmplY3QgJXMiCisJCQkJICAgICAgIiBhdCBvZmZzZXQgJSJQUkl1TUFYIiBmcm9tICVzIiwKKwkJCQkgICAgICBzaGExX3RvX2hleChiYXNlX3NoYTEpLCAodWludG1heF90KW9ial9vZmZzZXQsCisJCQkJICAgICAgcC0+cGFja19uYW1lKTsKKwkJCQltYXJrX2JhZF9wYWNrZWRfb2JqZWN0KHAsIGJhc2Vfc2hhMSk7CisJCQkJYmFzZSA9IHJlYWRfb2JqZWN0KGJhc2Vfc2hhMSwgJnR5cGUsICZiYXNlX3NpemUpOworCQkJfQorCQl9CisKKwkJaSA9IC0tZGVsdGFfc3RhY2tfbnI7CisJCW9ial9vZmZzZXQgPSBkZWx0YV9zdGFja1tpXS5vYmpfb2Zmc2V0OworCQljdXJwb3MgPSBkZWx0YV9zdGFja1tpXS5jdXJwb3M7CisJCWRlbHRhX3NpemUgPSBkZWx0YV9zdGFja1tpXS5zaXplOworCisJCWlmICghYmFzZSkKKwkJCWNvbnRpbnVlOworCisJCWRlbHRhX2RhdGEgPSB1bnBhY2tfY29tcHJlc3NlZF9lbnRyeShwLCAmd19jdXJzLCBjdXJwb3MsIGRlbHRhX3NpemUpOworCisJCWlmICghZGVsdGFfZGF0YSkgeworCQkJZXJyb3IoImZhaWxlZCB0byB1bnBhY2sgY29tcHJlc3NlZCBkZWx0YSAiCisJCQkgICAgICAiYXQgb2Zmc2V0ICUiUFJJdU1BWCIgZnJvbSAlcyIsCisJCQkgICAgICAodWludG1heF90KWN1cnBvcywgcC0+cGFja19uYW1lKTsKKwkJCWRhdGEgPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKworCQlkYXRhID0gcGF0Y2hfZGVsdGEoYmFzZSwgYmFzZV9zaXplLAorCQkJCSAgIGRlbHRhX2RhdGEsIGRlbHRhX3NpemUsCisJCQkJICAgJnNpemUpOworCisJCS8qCisJCSAqIFdlIGNvdWxkIG5vdCBhcHBseSB0aGUgZGVsdGE7IHdhcm4gdGhlIHVzZXIsIGJ1dCBrZWVwIGdvaW5nLgorCQkgKiBPdXIgZmFpbHVyZSB3aWxsIGJlIG5vdGljZWQgZWl0aGVyIGluIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZgorCQkgKiB0aGUgbG9vcCwgb3IgaWYgdGhpcyBpcyB0aGUgZmluYWwgZGVsdGEsIGluIHRoZSBjYWxsZXIgd2hlbgorCQkgKiB3ZSByZXR1cm4gTlVMTC4gVGhvc2UgY29kZSBwYXRocyB3aWxsIHRha2UgY2FyZSBvZiBtYWtpbmcKKwkJICogYSBtb3JlIGV4cGxpY2l0IHdhcm5pbmcgYW5kIHJldHJ5aW5nIHdpdGggYW5vdGhlciBjb3B5IG9mCisJCSAqIHRoZSBvYmplY3QuCisJCSAqLworCQlpZiAoIWRhdGEpCisJCQllcnJvcigiZmFpbGVkIHRvIGFwcGx5IGRlbHRhIik7CisKKwkJZnJlZShkZWx0YV9kYXRhKTsKKwl9CisKKwkqZmluYWxfdHlwZSA9IHR5cGU7CisJKmZpbmFsX3NpemUgPSBzaXplOworCisJdW51c2VfcGFjaygmd19jdXJzKTsKKworCWlmIChkZWx0YV9zdGFjayAhPSBzbWFsbF9kZWx0YV9zdGFjaykKKwkJZnJlZShkZWx0YV9zdGFjayk7CisKKwlyZXR1cm4gZGF0YTsKK30KKworY29uc3QgdW5zaWduZWQgY2hhciAqbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShzdHJ1Y3QgcGFja2VkX2dpdCAqcCwKKwkJCQkJICAgIHVpbnQzMl90IG4pCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5kZXggPSBwLT5pbmRleF9kYXRhOworCWlmICghaW5kZXgpIHsKKwkJaWYgKG9wZW5fcGFja19pbmRleChwKSkKKwkJCXJldHVybiBOVUxMOworCQlpbmRleCA9IHAtPmluZGV4X2RhdGE7CisJfQorCWlmIChuID49IHAtPm51bV9vYmplY3RzKQorCQlyZXR1cm4gTlVMTDsKKwlpbmRleCArPSA0ICogMjU2OworCWlmIChwLT5pbmRleF92ZXJzaW9uID09IDEpIHsKKwkJcmV0dXJuIGluZGV4ICsgMjQgKiBuICsgNDsKKwl9IGVsc2UgeworCQlpbmRleCArPSA4OworCQlyZXR1cm4gaW5kZXggKyAyMCAqIG47CisJfQorfQorCitvZmZfdCBudGhfcGFja2VkX29iamVjdF9vZmZzZXQoY29uc3Qgc3RydWN0IHBhY2tlZF9naXQgKnAsIHVpbnQzMl90IG4pCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqaW5kZXggPSBwLT5pbmRleF9kYXRhOworCWluZGV4ICs9IDQgKiAyNTY7CisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPT0gMSkgeworCQlyZXR1cm4gbnRvaGwoKigodWludDMyX3QgKikoaW5kZXggKyAyNCAqIG4pKSk7CisJfSBlbHNlIHsKKwkJdWludDMyX3Qgb2ZmOworCQlpbmRleCArPSA4ICsgcC0+bnVtX29iamVjdHMgKiAoMjAgKyA0KTsKKwkJb2ZmID0gbnRvaGwoKigodWludDMyX3QgKikoaW5kZXggKyA0ICogbikpKTsKKwkJaWYgKCEob2ZmICYgMHg4MDAwMDAwMCkpCisJCQlyZXR1cm4gb2ZmOworCQlpbmRleCArPSBwLT5udW1fb2JqZWN0cyAqIDQgKyAob2ZmICYgMHg3ZmZmZmZmZikgKiA4OworCQlyZXR1cm4gKCgodWludDY0X3QpbnRvaGwoKigodWludDMyX3QgKikoaW5kZXggKyAwKSkpKSA8PCAzMikgfAorCQkJCSAgIG50b2hsKCooKHVpbnQzMl90ICopKGluZGV4ICsgNCkpKTsKKwl9Cit9CisKK29mZl90IGZpbmRfcGFja19lbnRyeV9vbmUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCWNvbnN0IHVpbnQzMl90ICpsZXZlbDFfb2ZzID0gcC0+aW5kZXhfZGF0YTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICppbmRleCA9IHAtPmluZGV4X2RhdGE7CisJdW5zaWduZWQgaGksIGxvLCBzdHJpZGU7CisJc3RhdGljIGludCB1c2VfbG9va3VwID0gLTE7CisJc3RhdGljIGludCBkZWJ1Z19sb29rdXAgPSAtMTsKKworCWlmIChkZWJ1Z19sb29rdXAgPCAwKQorCQlkZWJ1Z19sb29rdXAgPSAhIWdldGVudigiR0lUX0RFQlVHX0xPT0tVUCIpOworCisJaWYgKCFpbmRleCkgeworCQlpZiAob3Blbl9wYWNrX2luZGV4KHApKQorCQkJcmV0dXJuIDA7CisJCWxldmVsMV9vZnMgPSBwLT5pbmRleF9kYXRhOworCQlpbmRleCA9IHAtPmluZGV4X2RhdGE7CisJfQorCWlmIChwLT5pbmRleF92ZXJzaW9uID4gMSkgeworCQlsZXZlbDFfb2ZzICs9IDI7CisJCWluZGV4ICs9IDg7CisJfQorCWluZGV4ICs9IDQgKiAyNTY7CisJaGkgPSBudG9obChsZXZlbDFfb2ZzWypzaGExXSk7CisJbG8gPSAoKCpzaGExID09IDB4MCkgPyAwIDogbnRvaGwobGV2ZWwxX29mc1sqc2hhMSAtIDFdKSk7CisJaWYgKHAtPmluZGV4X3ZlcnNpb24gPiAxKSB7CisJCXN0cmlkZSA9IDIwOworCX0gZWxzZSB7CisJCXN0cmlkZSA9IDI0OworCQlpbmRleCArPSA0OworCX0KKworCWlmIChkZWJ1Z19sb29rdXApCisJCXByaW50ZigiJTAyeCUwMnglMDJ4Li4uIGxvICV1IGhpICV1IG5yICUiUFJJdTMyIlxuIiwKKwkJICAgICAgIHNoYTFbMF0sIHNoYTFbMV0sIHNoYTFbMl0sIGxvLCBoaSwgcC0+bnVtX29iamVjdHMpOworCisJaWYgKHVzZV9sb29rdXAgPCAwKQorCQl1c2VfbG9va3VwID0gISFnZXRlbnYoIkdJVF9VU0VfTE9PS1VQIik7CisJaWYgKHVzZV9sb29rdXApIHsKKwkJaW50IHBvcyA9IHNoYTFfZW50cnlfcG9zKGluZGV4LCBzdHJpZGUsIDAsCisJCQkJCSBsbywgaGksIHAtPm51bV9vYmplY3RzLCBzaGExKTsKKwkJaWYgKHBvcyA8IDApCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIG50aF9wYWNrZWRfb2JqZWN0X29mZnNldChwLCBwb3MpOworCX0KKworCWRvIHsKKwkJdW5zaWduZWQgbWkgPSAobG8gKyBoaSkgLyAyOworCQlpbnQgY21wID0gaGFzaGNtcChpbmRleCArIG1pICogc3RyaWRlLCBzaGExKTsKKworCQlpZiAoZGVidWdfbG9va3VwKQorCQkJcHJpbnRmKCJsbyAldSBoaSAldSByZyAldSBtaSAldVxuIiwKKwkJCSAgICAgICBsbywgaGksIGhpIC0gbG8sIG1pKTsKKwkJaWYgKCFjbXApCisJCQlyZXR1cm4gbnRoX3BhY2tlZF9vYmplY3Rfb2Zmc2V0KHAsIG1pKTsKKwkJaWYgKGNtcCA+IDApCisJCQloaSA9IG1pOworCQllbHNlCisJCQlsbyA9IG1pKzE7CisJfSB3aGlsZSAobG8gPCBoaSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBpc19wYWNrX3ZhbGlkKHN0cnVjdCBwYWNrZWRfZ2l0ICpwKQoreworCS8qIEFuIGFscmVhZHkgb3BlbiBwYWNrIGlzIGtub3duIHRvIGJlIHZhbGlkLiAqLworCWlmIChwLT5wYWNrX2ZkICE9IC0xKQorCQlyZXR1cm4gMTsKKworCS8qIElmIHRoZSBwYWNrIGhhcyBvbmUgd2luZG93IGNvbXBsZXRlbHkgY292ZXJpbmcgdGhlCisJICogZmlsZSBzaXplLCB0aGUgcGFjayBpcyBrbm93biB0byBiZSB2YWxpZCBldmVuIGlmCisJICogdGhlIGRlc2NyaXB0b3IgaXMgbm90IGN1cnJlbnRseSBvcGVuLgorCSAqLworCWlmIChwLT53aW5kb3dzKSB7CisJCXN0cnVjdCBwYWNrX3dpbmRvdyAqdyA9IHAtPndpbmRvd3M7CisKKwkJaWYgKCF3LT5vZmZzZXQgJiYgdy0+bGVuID09IHAtPnBhY2tfc2l6ZSkKKwkJCXJldHVybiAxOworCX0KKworCS8qIEZvcmNlIHRoZSBwYWNrIHRvIG9wZW4gdG8gcHJvdmUgaXRzIHZhbGlkLiAqLworCXJldHVybiAhb3Blbl9wYWNrZWRfZ2l0KHApOworfQorCitzdGF0aWMgaW50IGZpbGxfcGFja19lbnRyeShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgc3RydWN0IHBhY2tfZW50cnkgKmUsCisJCQkgICBzdHJ1Y3QgcGFja2VkX2dpdCAqcCkKK3sKKwlvZmZfdCBvZmZzZXQ7CisKKwlpZiAocC0+bnVtX2JhZF9vYmplY3RzKSB7CisJCXVuc2lnbmVkIGk7CisJCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fYmFkX29iamVjdHM7IGkrKykKKwkJCWlmICghaGFzaGNtcChzaGExLCBwLT5iYWRfb2JqZWN0X3NoYTEgKyAyMCAqIGkpKQorCQkJCXJldHVybiAwOworCX0KKworCW9mZnNldCA9IGZpbmRfcGFja19lbnRyeV9vbmUoc2hhMSwgcCk7CisJaWYgKCFvZmZzZXQpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBXZSBhcmUgYWJvdXQgdG8gdGVsbCB0aGUgY2FsbGVyIHdoZXJlIHRoZXkgY2FuIGxvY2F0ZSB0aGUKKwkgKiByZXF1ZXN0ZWQgb2JqZWN0LiAgV2UgYmV0dGVyIG1ha2Ugc3VyZSB0aGUgcGFja2ZpbGUgaXMKKwkgKiBzdGlsbCBoZXJlIGFuZCBjYW4gYmUgYWNjZXNzZWQgYmVmb3JlIHN1cHBseWluZyB0aGF0CisJICogYW5zd2VyLCBhcyBpdCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQgc2luY2UgdGhlIGluZGV4IHdhcworCSAqIGxvYWRlZCEKKwkgKi8KKwlpZiAoIWlzX3BhY2tfdmFsaWQocCkpCisJCXJldHVybiAwOworCWUtPm9mZnNldCA9IG9mZnNldDsKKwllLT5wID0gcDsKKwloYXNoY3B5KGUtPnNoYTEsIHNoYTEpOworCXJldHVybiAxOworfQorCisvKgorICogSWZmIGEgcGFjayBmaWxlIGNvbnRhaW5zIHRoZSBvYmplY3QgbmFtZWQgYnkgc2hhMSwgcmV0dXJuIHRydWUgYW5kCisgKiBzdG9yZSBpdHMgbG9jYXRpb24gdG8gZS4KKyAqLworc3RhdGljIGludCBmaW5kX3BhY2tfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IHBhY2tfZW50cnkgKmUpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisKKwlwcmVwYXJlX3BhY2tlZF9naXQoKTsKKwlpZiAoIXBhY2tlZF9naXQpCisJCXJldHVybiAwOworCisJaWYgKGxhc3RfZm91bmRfcGFjayAmJiBmaWxsX3BhY2tfZW50cnkoc2hhMSwgZSwgbGFzdF9mb3VuZF9wYWNrKSkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAocCA9PSBsYXN0X2ZvdW5kX3BhY2spCisJCQljb250aW51ZTsgLyogd2UgYWxyZWFkeSBjaGVja2VkIHRoaXMgb25lICovCisKKwkJaWYgKGZpbGxfcGFja19lbnRyeShzaGExLCBlLCBwKSkgeworCQkJbGFzdF9mb3VuZF9wYWNrID0gcDsKKwkJCXJldHVybiAxOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgcGFja2VkX2dpdCAqZmluZF9zaGExX3BhY2soY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgIHN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrcykKK3sKKwlzdHJ1Y3QgcGFja2VkX2dpdCAqcDsKKworCWZvciAocCA9IHBhY2tzOyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAoZmluZF9wYWNrX2VudHJ5X29uZShzaGExLCBwKSkKKwkJCXJldHVybiBwOworCX0KKwlyZXR1cm4gTlVMTDsKKworfQorCitzdGF0aWMgaW50IHNoYTFfbG9vc2Vfb2JqZWN0X2luZm8oY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgIHN0cnVjdCBvYmplY3RfaW5mbyAqb2ksCisJCQkJICBpbnQgZmxhZ3MpCit7CisJaW50IHN0YXR1cyA9IDA7CisJdW5zaWduZWQgbG9uZyBtYXBzaXplOworCXZvaWQgKm1hcDsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJY2hhciBoZHJbMzJdOworCXN0cnVjdCBzdHJidWYgaGRyYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAob2ktPmRlbHRhX2Jhc2Vfc2hhMSkKKwkJaGFzaGNscihvaS0+ZGVsdGFfYmFzZV9zaGExKTsKKworCS8qCisJICogSWYgd2UgZG9uJ3QgY2FyZSBhYm91dCB0eXBlIG9yIHNpemUsIHRoZW4gd2UgZG9uJ3QKKwkgKiBuZWVkIHRvIGxvb2sgaW5zaWRlIHRoZSBvYmplY3QgYXQgYWxsLiBOb3RlIHRoYXQgd2UKKwkgKiBkbyBub3Qgb3B0aW1pemUgb3V0IHRoZSBzdGF0IGNhbGwsIGV2ZW4gaWYgdGhlCisJICogY2FsbGVyIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZGlzay1zaXplLCBzaW5jZSBvdXIKKwkgKiByZXR1cm4gdmFsdWUgaW1wbGljaXRseSBpbmRpY2F0ZXMgd2hldGhlciB0aGUKKwkgKiBvYmplY3QgZXZlbiBleGlzdHMuCisJICovCisJaWYgKCFvaS0+dHlwZXAgJiYgIW9pLT50eXBlbmFtZSAmJiAhb2ktPnNpemVwKSB7CisJCXN0cnVjdCBzdGF0IHN0OworCQlpZiAoc3RhdF9zaGExX2ZpbGUoc2hhMSwgJnN0KSA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChvaS0+ZGlza19zaXplcCkKKwkJCSpvaS0+ZGlza19zaXplcCA9IHN0LnN0X3NpemU7CisJCXJldHVybiAwOworCX0KKworCW1hcCA9IG1hcF9zaGExX2ZpbGUoc2hhMSwgJm1hcHNpemUpOworCWlmICghbWFwKQorCQlyZXR1cm4gLTE7CisJaWYgKG9pLT5kaXNrX3NpemVwKQorCQkqb2ktPmRpc2tfc2l6ZXAgPSBtYXBzaXplOworCWlmICgoZmxhZ3MgJiBMT09LVVBfVU5LTk9XTl9PQkpFQ1QpKSB7CisJCWlmICh1bnBhY2tfc2hhMV9oZWFkZXJfdG9fc3RyYnVmKCZzdHJlYW0sIG1hcCwgbWFwc2l6ZSwgaGRyLCBzaXplb2YoaGRyKSwgJmhkcmJ1ZikgPCAwKQorCQkJc3RhdHVzID0gZXJyb3IoInVuYWJsZSB0byB1bnBhY2sgJXMgaGVhZGVyIHdpdGggLS1hbGxvdy11bmtub3duLXR5cGUiLAorCQkJCSAgICAgICBzaGExX3RvX2hleChzaGExKSk7CisJfSBlbHNlIGlmICh1bnBhY2tfc2hhMV9oZWFkZXIoJnN0cmVhbSwgbWFwLCBtYXBzaXplLCBoZHIsIHNpemVvZihoZHIpKSA8IDApCisJCXN0YXR1cyA9IGVycm9yKCJ1bmFibGUgdG8gdW5wYWNrICVzIGhlYWRlciIsCisJCQkgICAgICAgc2hhMV90b19oZXgoc2hhMSkpOworCWlmIChzdGF0dXMgPCAwKQorCQk7IC8qIERvIG5vdGhpbmcgKi8KKwllbHNlIGlmIChoZHJidWYubGVuKSB7CisJCWlmICgoc3RhdHVzID0gcGFyc2Vfc2hhMV9oZWFkZXJfZXh0ZW5kZWQoaGRyYnVmLmJ1Ziwgb2ksIGZsYWdzKSkgPCAwKQorCQkJc3RhdHVzID0gZXJyb3IoInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIgd2l0aCAtLWFsbG93LXVua25vd24tdHlwZSIsCisJCQkJICAgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKwl9IGVsc2UgaWYgKChzdGF0dXMgPSBwYXJzZV9zaGExX2hlYWRlcl9leHRlbmRlZChoZHIsIG9pLCBmbGFncykpIDwgMCkKKwkJc3RhdHVzID0gZXJyb3IoInVuYWJsZSB0byBwYXJzZSAlcyBoZWFkZXIiLCBzaGExX3RvX2hleChzaGExKSk7CisJZ2l0X2luZmxhdGVfZW5kKCZzdHJlYW0pOworCW11bm1hcChtYXAsIG1hcHNpemUpOworCWlmIChzdGF0dXMgJiYgb2ktPnR5cGVwKQorCQkqb2ktPnR5cGVwID0gc3RhdHVzOworCXN0cmJ1Zl9yZWxlYXNlKCZoZHJidWYpOworCXJldHVybiAwOworfQorCitpbnQgc2hhMV9vYmplY3RfaW5mb19leHRlbmRlZChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9pLCB1bnNpZ25lZCBmbGFncykKK3sKKwlzdHJ1Y3QgY2FjaGVkX29iamVjdCAqY287CisJc3RydWN0IHBhY2tfZW50cnkgZTsKKwlpbnQgcnR5cGU7CisJZW51bSBvYmplY3RfdHlwZSByZWFsX3R5cGU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcmVhbCA9IGxvb2t1cF9yZXBsYWNlX29iamVjdF9leHRlbmRlZChzaGExLCBmbGFncyk7CisKKwljbyA9IGZpbmRfY2FjaGVkX29iamVjdChyZWFsKTsKKwlpZiAoY28pIHsKKwkJaWYgKG9pLT50eXBlcCkKKwkJCSoob2ktPnR5cGVwKSA9IGNvLT50eXBlOworCQlpZiAob2ktPnNpemVwKQorCQkJKihvaS0+c2l6ZXApID0gY28tPnNpemU7CisJCWlmIChvaS0+ZGlza19zaXplcCkKKwkJCSoob2ktPmRpc2tfc2l6ZXApID0gMDsKKwkJaWYgKG9pLT5kZWx0YV9iYXNlX3NoYTEpCisJCQloYXNoY2xyKG9pLT5kZWx0YV9iYXNlX3NoYTEpOworCQlpZiAob2ktPnR5cGVuYW1lKQorCQkJc3RyYnVmX2FkZHN0cihvaS0+dHlwZW5hbWUsIHR5cGVuYW1lKGNvLT50eXBlKSk7CisJCW9pLT53aGVuY2UgPSBPSV9DQUNIRUQ7CisJCXJldHVybiAwOworCX0KKworCWlmICghZmluZF9wYWNrX2VudHJ5KHJlYWwsICZlKSkgeworCQkvKiBNb3N0IGxpa2VseSBpdCdzIGEgbG9vc2Ugb2JqZWN0LiAqLworCQlpZiAoIXNoYTFfbG9vc2Vfb2JqZWN0X2luZm8ocmVhbCwgb2ksIGZsYWdzKSkgeworCQkJb2ktPndoZW5jZSA9IE9JX0xPT1NFOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKiBOb3QgYSBsb29zZSBvYmplY3Q7IHNvbWVvbmUgZWxzZSBtYXkgaGF2ZSBqdXN0IHBhY2tlZCBpdC4gKi8KKwkJcmVwcmVwYXJlX3BhY2tlZF9naXQoKTsKKwkJaWYgKCFmaW5kX3BhY2tfZW50cnkocmVhbCwgJmUpKQorCQkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogcGFja2VkX29iamVjdF9pbmZvKCkgZG9lcyBub3QgZm9sbG93IHRoZSBkZWx0YSBjaGFpbiB0bworCSAqIGZpbmQgb3V0IHRoZSByZWFsIHR5cGUsIHVubGVzcyBpdCBpcyBnaXZlbiBvaS0+dHlwZXAuCisJICovCisJaWYgKG9pLT50eXBlbmFtZSAmJiAhb2ktPnR5cGVwKQorCQlvaS0+dHlwZXAgPSAmcmVhbF90eXBlOworCisJcnR5cGUgPSBwYWNrZWRfb2JqZWN0X2luZm8oZS5wLCBlLm9mZnNldCwgb2kpOworCWlmIChydHlwZSA8IDApIHsKKwkJbWFya19iYWRfcGFja2VkX29iamVjdChlLnAsIHJlYWwpOworCQlpZiAob2ktPnR5cGVwID09ICZyZWFsX3R5cGUpCisJCQlvaS0+dHlwZXAgPSBOVUxMOworCQlyZXR1cm4gc2hhMV9vYmplY3RfaW5mb19leHRlbmRlZChyZWFsLCBvaSwgMCk7CisJfSBlbHNlIGlmIChpbl9kZWx0YV9iYXNlX2NhY2hlKGUucCwgZS5vZmZzZXQpKSB7CisJCW9pLT53aGVuY2UgPSBPSV9EQkNBQ0hFRDsKKwl9IGVsc2UgeworCQlvaS0+d2hlbmNlID0gT0lfUEFDS0VEOworCQlvaS0+dS5wYWNrZWQub2Zmc2V0ID0gZS5vZmZzZXQ7CisJCW9pLT51LnBhY2tlZC5wYWNrID0gZS5wOworCQlvaS0+dS5wYWNrZWQuaXNfZGVsdGEgPSAocnR5cGUgPT0gT0JKX1JFRl9ERUxUQSB8fAorCQkJCQkgcnR5cGUgPT0gT0JKX09GU19ERUxUQSk7CisJfQorCWlmIChvaS0+dHlwZW5hbWUpCisJCXN0cmJ1Zl9hZGRzdHIob2ktPnR5cGVuYW1lLCB0eXBlbmFtZSgqb2ktPnR5cGVwKSk7CisJaWYgKG9pLT50eXBlcCA9PSAmcmVhbF90eXBlKQorCQlvaS0+dHlwZXAgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHJldHVybnMgZW51bSBvYmplY3RfdHlwZSBvciBuZWdhdGl2ZSAqLworaW50IHNoYTFfb2JqZWN0X2luZm8oY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdW5zaWduZWQgbG9uZyAqc2l6ZXApCit7CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCXN0cnVjdCBvYmplY3RfaW5mbyBvaSA9IHtOVUxMfTsKKworCW9pLnR5cGVwID0gJnR5cGU7CisJb2kuc2l6ZXAgPSBzaXplcDsKKwlpZiAoc2hhMV9vYmplY3RfaW5mb19leHRlbmRlZChzaGExLCAmb2ksIExPT0tVUF9SRVBMQUNFX09CSkVDVCkgPCAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHR5cGU7Cit9CisKK3N0YXRpYyB2b2lkICpyZWFkX3BhY2tlZF9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgICBlbnVtIG9iamVjdF90eXBlICp0eXBlLCB1bnNpZ25lZCBsb25nICpzaXplKQoreworCXN0cnVjdCBwYWNrX2VudHJ5IGU7CisJdm9pZCAqZGF0YTsKKworCWlmICghZmluZF9wYWNrX2VudHJ5KHNoYTEsICZlKSkKKwkJcmV0dXJuIE5VTEw7CisJZGF0YSA9IGNhY2hlX29yX3VucGFja19lbnRyeShlLnAsIGUub2Zmc2V0LCBzaXplLCB0eXBlLCAxKTsKKwlpZiAoIWRhdGEpIHsKKwkJLyoKKwkJICogV2UncmUgcHJvYmFibHkgaW4gZGVlcCBzaGl0LCBidXQgbGV0J3MgdHJ5IHRvIGZldGNoCisJCSAqIHRoZSByZXF1aXJlZCBvYmplY3QgYW55d2F5IGZyb20gYW5vdGhlciBwYWNrIG9yIGxvb3NlLgorCQkgKiBUaGlzIHNob3VsZCBoYXBwZW4gb25seSBpbiB0aGUgcHJlc2VuY2Ugb2YgYSBjb3JydXB0ZWQKKwkJICogcGFjaywgYW5kIGlzIGJldHRlciB0aGFuIGZhaWxpbmcgb3V0cmlnaHQuCisJCSAqLworCQllcnJvcigiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICVzIGF0IG9mZnNldCAlIlBSSXVNQVgiIGZyb20gJXMiLAorCQkgICAgICBzaGExX3RvX2hleChzaGExKSwgKHVpbnRtYXhfdCllLm9mZnNldCwgZS5wLT5wYWNrX25hbWUpOworCQltYXJrX2JhZF9wYWNrZWRfb2JqZWN0KGUucCwgc2hhMSk7CisJCWRhdGEgPSByZWFkX29iamVjdChzaGExLCB0eXBlLCBzaXplKTsKKwl9CisJcmV0dXJuIGRhdGE7Cit9CisKK2ludCBwcmV0ZW5kX3NoYTFfZmlsZSh2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGNhY2hlZF9vYmplY3QgKmNvOworCisJaGFzaF9zaGExX2ZpbGUoYnVmLCBsZW4sIHR5cGVuYW1lKHR5cGUpLCBzaGExKTsKKwlpZiAoaGFzX3NoYTFfZmlsZShzaGExKSB8fCBmaW5kX2NhY2hlZF9vYmplY3Qoc2hhMSkpCisJCXJldHVybiAwOworCUFMTE9DX0dST1coY2FjaGVkX29iamVjdHMsIGNhY2hlZF9vYmplY3RfbnIgKyAxLCBjYWNoZWRfb2JqZWN0X2FsbG9jKTsKKwljbyA9ICZjYWNoZWRfb2JqZWN0c1tjYWNoZWRfb2JqZWN0X25yKytdOworCWNvLT5zaXplID0gbGVuOworCWNvLT50eXBlID0gdHlwZTsKKwljby0+YnVmID0geG1hbGxvYyhsZW4pOworCW1lbWNweShjby0+YnVmLCBidWYsIGxlbik7CisJaGFzaGNweShjby0+c2hhMSwgc2hhMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICpyZWFkX29iamVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBlbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUpCit7CisJdW5zaWduZWQgbG9uZyBtYXBzaXplOworCXZvaWQgKm1hcCwgKmJ1ZjsKKwlzdHJ1Y3QgY2FjaGVkX29iamVjdCAqY287CisKKwljbyA9IGZpbmRfY2FjaGVkX29iamVjdChzaGExKTsKKwlpZiAoY28pIHsKKwkJKnR5cGUgPSBjby0+dHlwZTsKKwkJKnNpemUgPSBjby0+c2l6ZTsKKwkJcmV0dXJuIHhtZW1kdXB6KGNvLT5idWYsIGNvLT5zaXplKTsKKwl9CisKKwlidWYgPSByZWFkX3BhY2tlZF9zaGExKHNoYTEsIHR5cGUsIHNpemUpOworCWlmIChidWYpCisJCXJldHVybiBidWY7CisJbWFwID0gbWFwX3NoYTFfZmlsZShzaGExLCAmbWFwc2l6ZSk7CisJaWYgKG1hcCkgeworCQlidWYgPSB1bnBhY2tfc2hhMV9maWxlKG1hcCwgbWFwc2l6ZSwgdHlwZSwgc2l6ZSwgc2hhMSk7CisJCW11bm1hcChtYXAsIG1hcHNpemUpOworCQlyZXR1cm4gYnVmOworCX0KKwlyZXByZXBhcmVfcGFja2VkX2dpdCgpOworCXJldHVybiByZWFkX3BhY2tlZF9zaGExKHNoYTEsIHR5cGUsIHNpemUpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBkaWVzIG9uIGNvcnJ1cHQgb2JqZWN0czsgdGhlIGNhbGxlcnMgd2hvIHdhbnQgdG8KKyAqIGRlYWwgd2l0aCB0aGVtIHNob3VsZCBhcnJhbmdlIHRvIGNhbGwgcmVhZF9vYmplY3QoKSBhbmQgZ2l2ZSBlcnJvcgorICogbWVzc2FnZXMgdGhlbXNlbHZlcy4KKyAqLwordm9pZCAqcmVhZF9zaGExX2ZpbGVfZXh0ZW5kZWQoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCSAgICAgIGVudW0gb2JqZWN0X3R5cGUgKnR5cGUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nICpzaXplLAorCQkJICAgICAgdW5zaWduZWQgZmxhZykKK3sKKwl2b2lkICpkYXRhOworCWNvbnN0IHN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlcGwgPSBsb29rdXBfcmVwbGFjZV9vYmplY3RfZXh0ZW5kZWQoc2hhMSwgZmxhZyk7CisKKwllcnJubyA9IDA7CisJZGF0YSA9IHJlYWRfb2JqZWN0KHJlcGwsIHR5cGUsIHNpemUpOworCWlmIChkYXRhKQorCQlyZXR1cm4gZGF0YTsKKworCWlmIChlcnJubyAmJiBlcnJubyAhPSBFTk9FTlQpCisJCWRpZV9lcnJubygiZmFpbGVkIHRvIHJlYWQgb2JqZWN0ICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCisJLyogZGllIGlmIHdlIHJlcGxhY2VkIGFuIG9iamVjdCB3aXRoIG9uZSB0aGF0IGRvZXMgbm90IGV4aXN0ICovCisJaWYgKHJlcGwgIT0gc2hhMSkKKwkJZGllKCJyZXBsYWNlbWVudCAlcyBub3QgZm91bmQgZm9yICVzIiwKKwkJICAgIHNoYTFfdG9faGV4KHJlcGwpLCBzaGExX3RvX2hleChzaGExKSk7CisKKwlpZiAoaGFzX2xvb3NlX29iamVjdChyZXBsKSkgeworCQljb25zdCBjaGFyICpwYXRoID0gc2hhMV9maWxlX25hbWUoc2hhMSk7CisKKwkJZGllKCJsb29zZSBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIsCisJCSAgICBzaGExX3RvX2hleChyZXBsKSwgcGF0aCk7CisJfQorCisJaWYgKChwID0gaGFzX3BhY2tlZF9hbmRfYmFkKHJlcGwpKSAhPSBOVUxMKQorCQlkaWUoInBhY2tlZCBvYmplY3QgJXMgKHN0b3JlZCBpbiAlcykgaXMgY29ycnVwdCIsCisJCSAgICBzaGExX3RvX2hleChyZXBsKSwgcC0+cGFja19uYW1lKTsKKworCXJldHVybiBOVUxMOworfQorCit2b2lkICpyZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSBjb25zdCBjaGFyICpyZXF1aXJlZF90eXBlX25hbWUsCisJCQkJIHVuc2lnbmVkIGxvbmcgKnNpemUsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmFjdHVhbF9zaGExX3JldHVybikKK3sKKwllbnVtIG9iamVjdF90eXBlIHR5cGUsIHJlcXVpcmVkX3R5cGU7CisJdm9pZCAqYnVmZmVyOworCXVuc2lnbmVkIGxvbmcgaXNpemU7CisJdW5zaWduZWQgY2hhciBhY3R1YWxfc2hhMVsyMF07CisKKwlyZXF1aXJlZF90eXBlID0gdHlwZV9mcm9tX3N0cmluZyhyZXF1aXJlZF90eXBlX25hbWUpOworCWhhc2hjcHkoYWN0dWFsX3NoYTEsIHNoYTEpOworCXdoaWxlICgxKSB7CisJCWludCByZWZfbGVuZ3RoID0gLTE7CisJCWNvbnN0IGNoYXIgKnJlZl90eXBlID0gTlVMTDsKKworCQlidWZmZXIgPSByZWFkX3NoYTFfZmlsZShhY3R1YWxfc2hhMSwgJnR5cGUsICZpc2l6ZSk7CisJCWlmICghYnVmZmVyKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICh0eXBlID09IHJlcXVpcmVkX3R5cGUpIHsKKwkJCSpzaXplID0gaXNpemU7CisJCQlpZiAoYWN0dWFsX3NoYTFfcmV0dXJuKQorCQkJCWhhc2hjcHkoYWN0dWFsX3NoYTFfcmV0dXJuLCBhY3R1YWxfc2hhMSk7CisJCQlyZXR1cm4gYnVmZmVyOworCQl9CisJCS8qIEhhbmRsZSByZWZlcmVuY2VzICovCisJCWVsc2UgaWYgKHR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJCXJlZl90eXBlID0gInRyZWUgIjsKKwkJZWxzZSBpZiAodHlwZSA9PSBPQkpfVEFHKQorCQkJcmVmX3R5cGUgPSAib2JqZWN0ICI7CisJCWVsc2UgeworCQkJZnJlZShidWZmZXIpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcmVmX2xlbmd0aCA9IHN0cmxlbihyZWZfdHlwZSk7CisKKwkJaWYgKHJlZl9sZW5ndGggKyA0MCA+IGlzaXplIHx8CisJCSAgICBtZW1jbXAoYnVmZmVyLCByZWZfdHlwZSwgcmVmX2xlbmd0aCkgfHwKKwkJICAgIGdldF9zaGExX2hleCgoY2hhciAqKSBidWZmZXIgKyByZWZfbGVuZ3RoLCBhY3R1YWxfc2hhMSkpIHsKKwkJCWZyZWUoYnVmZmVyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWZyZWUoYnVmZmVyKTsKKwkJLyogTm93IHdlIGhhdmUgdGhlIElEIG9mIHRoZSByZWZlcnJlZC10byBvYmplY3QgaW4KKwkJICogYWN0dWFsX3NoYTEuICBDaGVjayBhZ2Fpbi4gKi8KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3NoYTFfZmlsZV9wcmVwYXJlKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlLCB1bnNpZ25lZCBjaGFyICpzaGExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaGRyLCBpbnQgKmhkcmxlbikKK3sKKwlnaXRfU0hBX0NUWCBjOworCisJLyogR2VuZXJhdGUgdGhlIGhlYWRlciAqLworCSpoZHJsZW4gPSB4c25wcmludGYoaGRyLCAqaGRybGVuLCAiJXMgJWx1IiwgdHlwZSwgbGVuKSsxOworCisJLyogU2hhMS4uICovCisJZ2l0X1NIQTFfSW5pdCgmYyk7CisJZ2l0X1NIQTFfVXBkYXRlKCZjLCBoZHIsICpoZHJsZW4pOworCWdpdF9TSEExX1VwZGF0ZSgmYywgYnVmLCBsZW4pOworCWdpdF9TSEExX0ZpbmFsKHNoYTEsICZjKTsKK30KKworLyoKKyAqIE1vdmUgdGhlIGp1c3Qgd3JpdHRlbiBvYmplY3QgaW50byBpdHMgZmluYWwgcmVzdGluZyBwbGFjZS4KKyAqLworaW50IGZpbmFsaXplX29iamVjdF9maWxlKGNvbnN0IGNoYXIgKnRtcGZpbGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWludCByZXQgPSAwOworCisJaWYgKG9iamVjdF9jcmVhdGlvbl9tb2RlID09IE9CSkVDVF9DUkVBVElPTl9VU0VTX1JFTkFNRVMpCisJCWdvdG8gdHJ5X3JlbmFtZTsKKwllbHNlIGlmIChsaW5rKHRtcGZpbGUsIGZpbGVuYW1lKSkKKwkJcmV0ID0gZXJybm87CisKKwkvKgorCSAqIENvZGEgaGFjayAtIGNvZGEgZG9lc24ndCBsaWtlIGNyb3NzLWRpcmVjdG9yeSBsaW5rcywKKwkgKiBzbyB3ZSBmYWxsIGJhY2sgdG8gYSByZW5hbWUsIHdoaWNoIHdpbGwgbWVhbiB0aGF0IGl0CisJICogd29uJ3QgYmUgYWJsZSB0byBjaGVjayBjb2xsaXNpb25zLCBidXQgdGhhdCdzIG5vdCBhCisJICogYmlnIGRlYWwuCisJICoKKwkgKiBUaGUgc2FtZSBob2xkcyBmb3IgRkFUIGZvcm1hdHRlZCBtZWRpYS4KKwkgKgorCSAqIFdoZW4gdGhpcyBzdWNjZWVkcywgd2UganVzdCByZXR1cm4uICBXZSBoYXZlIG5vdGhpbmcKKwkgKiBsZWZ0IHRvIHVubGluay4KKwkgKi8KKwlpZiAocmV0ICYmIHJldCAhPSBFRVhJU1QpIHsKKwl0cnlfcmVuYW1lOgorCQlpZiAoIXJlbmFtZSh0bXBmaWxlLCBmaWxlbmFtZSkpCisJCQlnb3RvIG91dDsKKwkJcmV0ID0gZXJybm87CisJfQorCXVubGlua19vcl93YXJuKHRtcGZpbGUpOworCWlmIChyZXQpIHsKKwkJaWYgKHJldCAhPSBFRVhJU1QpIHsKKwkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIHdyaXRlIHNoYTEgZmlsZW5hbWUgJXM6ICVzIiwgZmlsZW5hbWUsIHN0cmVycm9yKHJldCkpOworCQl9CisJCS8qIEZJWE1FISEhIENvbGxpc2lvbiBjaGVjayBoZXJlID8gKi8KKwl9CisKK291dDoKKwlpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKGZpbGVuYW1lKSkKKwkJcmV0dXJuIGVycm9yKCJ1bmFibGUgdG8gc2V0IHBlcm1pc3Npb24gdG8gJyVzJyIsIGZpbGVuYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9idWZmZXIoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1ZiwgbGVuKSA8IDApCisJCXJldHVybiBlcnJvcigiZmlsZSB3cml0ZSBlcnJvciAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGhhc2hfc2hhMV9maWxlKGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIGNvbnN0IGNoYXIgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwljaGFyIGhkclszMl07CisJaW50IGhkcmxlbiA9IHNpemVvZihoZHIpOworCXdyaXRlX3NoYTFfZmlsZV9wcmVwYXJlKGJ1ZiwgbGVuLCB0eXBlLCBzaGExLCBoZHIsICZoZHJsZW4pOworCXJldHVybiAwOworfQorCisvKiBGaW5hbGl6ZSBhIGZpbGUgb24gZGlzaywgYW5kIGNsb3NlIGl0LiAqLworc3RhdGljIHZvaWQgY2xvc2Vfc2hhMV9maWxlKGludCBmZCkKK3sKKwlpZiAoZnN5bmNfb2JqZWN0X2ZpbGVzKQorCQlmc3luY19vcl9kaWUoZmQsICJzaGExIGZpbGUiKTsKKwlpZiAoY2xvc2UoZmQpICE9IDApCisJCWRpZV9lcnJubygiZXJyb3Igd2hlbiBjbG9zaW5nIHNoYTEgZmlsZSIpOworfQorCisvKiBTaXplIG9mIGRpcmVjdG9yeSBjb21wb25lbnQsIGluY2x1ZGluZyB0aGUgZW5kaW5nICcvJyAqLworc3RhdGljIGlubGluZSBpbnQgZGlyZWN0b3J5X3NpemUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY29uc3QgY2hhciAqcyA9IHN0cnJjaHIoZmlsZW5hbWUsICcvJyk7CisJaWYgKCFzKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcyAtIGZpbGVuYW1lICsgMTsKK30KKworLyoKKyAqIFRoaXMgY3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgZmluYWwKKyAqICdmaWxlbmFtZScKKyAqCisgKiBXZSB3YW50IHRvIGF2b2lkIGNyb3NzLWRpcmVjdG9yeSBmaWxlbmFtZSByZW5hbWVzLCBiZWNhdXNlIHRob3NlCisgKiBjYW4gaGF2ZSBwcm9ibGVtcyBvbiB2YXJpb3VzIGZpbGVzeXN0ZW1zIChGQVQsIE5GUywgQ29kYSkuCisgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX3RtcGZpbGUoc3RydWN0IHN0cmJ1ZiAqdG1wLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlpbnQgZmQsIGRpcmxlbiA9IGRpcmVjdG9yeV9zaXplKGZpbGVuYW1lKTsKKworCXN0cmJ1Zl9yZXNldCh0bXApOworCXN0cmJ1Zl9hZGQodG1wLCBmaWxlbmFtZSwgZGlybGVuKTsKKwlzdHJidWZfYWRkc3RyKHRtcCwgInRtcF9vYmpfWFhYWFhYIik7CisJZmQgPSBnaXRfbWtzdGVtcF9tb2RlKHRtcC0+YnVmLCAwNDQ0KTsKKwlpZiAoZmQgPCAwICYmIGRpcmxlbiAmJiBlcnJubyA9PSBFTk9FTlQpIHsKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzOyBub3RlIHRoYXQgdGhlIGNvbnRlbnRzCisJCSAqIG9mIHRoZSBidWZmZXIgYXJlIHVuZGVmaW5lZCBhZnRlciBta3N0ZW1wIHJldHVybnMgYW4KKwkJICogZXJyb3IsIHNvIHdlIGhhdmUgdG8gcmV3cml0ZSB0aGUgd2hvbGUgYnVmZmVyIGZyb20KKwkJICogc2NyYXRjaC4KKwkJICovCisJCXN0cmJ1Zl9yZXNldCh0bXApOworCQlzdHJidWZfYWRkKHRtcCwgZmlsZW5hbWUsIGRpcmxlbiAtIDEpOworCQlpZiAobWtkaXIodG1wLT5idWYsIDA3NzcpICYmIGVycm5vICE9IEVFWElTVCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKGFkanVzdF9zaGFyZWRfcGVybSh0bXAtPmJ1ZikpCisJCQlyZXR1cm4gLTE7CisKKwkJLyogVHJ5IGFnYWluICovCisJCXN0cmJ1Zl9hZGRzdHIodG1wLCAiL3RtcF9vYmpfWFhYWFhYIik7CisJCWZkID0gZ2l0X21rc3RlbXBfbW9kZSh0bXAtPmJ1ZiwgMDQ0NCk7CisJfQorCXJldHVybiBmZDsKK30KKworc3RhdGljIGludCB3cml0ZV9sb29zZV9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgY2hhciAqaGRyLCBpbnQgaGRybGVuLAorCQkJICAgICAgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgdGltZV90IG10aW1lKQoreworCWludCBmZCwgcmV0OworCXVuc2lnbmVkIGNoYXIgY29tcHJlc3NlZFs0MDk2XTsKKwlnaXRfenN0cmVhbSBzdHJlYW07CisJZ2l0X1NIQV9DVFggYzsKKwl1bnNpZ25lZCBjaGFyIHBhcmFub19zaGExWzIwXTsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiB0bXBfZmlsZSA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lID0gc2hhMV9maWxlX25hbWUoc2hhMSk7CisKKwlmZCA9IGNyZWF0ZV90bXBmaWxlKCZ0bXBfZmlsZSwgZmlsZW5hbWUpOworCWlmIChmZCA8IDApIHsKKwkJaWYgKGVycm5vID09IEVBQ0NFUykKKwkJCXJldHVybiBlcnJvcigiaW5zdWZmaWNpZW50IHBlcm1pc3Npb24gZm9yIGFkZGluZyBhbiBvYmplY3QgdG8gcmVwb3NpdG9yeSBkYXRhYmFzZSAlcyIsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCQllbHNlCisJCQlyZXR1cm4gZXJyb3IoInVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisKKwkvKiBTZXQgaXQgdXAgKi8KKwlnaXRfZGVmbGF0ZV9pbml0KCZzdHJlYW0sIHpsaWJfY29tcHJlc3Npb25fbGV2ZWwpOworCXN0cmVhbS5uZXh0X291dCA9IGNvbXByZXNzZWQ7CisJc3RyZWFtLmF2YWlsX291dCA9IHNpemVvZihjb21wcmVzc2VkKTsKKwlnaXRfU0hBMV9Jbml0KCZjKTsKKworCS8qIEZpcnN0IGhlYWRlci4uICovCisJc3RyZWFtLm5leHRfaW4gPSAodW5zaWduZWQgY2hhciAqKWhkcjsKKwlzdHJlYW0uYXZhaWxfaW4gPSBoZHJsZW47CisJd2hpbGUgKGdpdF9kZWZsYXRlKCZzdHJlYW0sIDApID09IFpfT0spCisJCTsgLyogbm90aGluZyAqLworCWdpdF9TSEExX1VwZGF0ZSgmYywgaGRyLCBoZHJsZW4pOworCisJLyogVGhlbiB0aGUgZGF0YSBpdHNlbGYuLiAqLworCXN0cmVhbS5uZXh0X2luID0gKHZvaWQgKilidWY7CisJc3RyZWFtLmF2YWlsX2luID0gbGVuOworCWRvIHsKKwkJdW5zaWduZWQgY2hhciAqaW4wID0gc3RyZWFtLm5leHRfaW47CisJCXJldCA9IGdpdF9kZWZsYXRlKCZzdHJlYW0sIFpfRklOSVNIKTsKKwkJZ2l0X1NIQTFfVXBkYXRlKCZjLCBpbjAsIHN0cmVhbS5uZXh0X2luIC0gaW4wKTsKKwkJaWYgKHdyaXRlX2J1ZmZlcihmZCwgY29tcHJlc3NlZCwgc3RyZWFtLm5leHRfb3V0IC0gY29tcHJlc3NlZCkgPCAwKQorCQkJZGllKCJ1bmFibGUgdG8gd3JpdGUgc2hhMSBmaWxlIik7CisJCXN0cmVhbS5uZXh0X291dCA9IGNvbXByZXNzZWQ7CisJCXN0cmVhbS5hdmFpbF9vdXQgPSBzaXplb2YoY29tcHJlc3NlZCk7CisJfSB3aGlsZSAocmV0ID09IFpfT0spOworCisJaWYgKHJldCAhPSBaX1NUUkVBTV9FTkQpCisJCWRpZSgidW5hYmxlIHRvIGRlZmxhdGUgbmV3IG9iamVjdCAlcyAoJWQpIiwgc2hhMV90b19oZXgoc2hhMSksIHJldCk7CisJcmV0ID0gZ2l0X2RlZmxhdGVfZW5kX2dlbnRseSgmc3RyZWFtKTsKKwlpZiAocmV0ICE9IFpfT0spCisJCWRpZSgiZGVmbGF0ZUVuZCBvbiBvYmplY3QgJXMgZmFpbGVkICglZCkiLCBzaGExX3RvX2hleChzaGExKSwgcmV0KTsKKwlnaXRfU0hBMV9GaW5hbChwYXJhbm9fc2hhMSwgJmMpOworCWlmIChoYXNoY21wKHNoYTEsIHBhcmFub19zaGExKSAhPSAwKQorCQlkaWUoImNvbmZ1c2VkIGJ5IHVuc3RhYmxlIG9iamVjdCBzb3VyY2UgZGF0YSBmb3IgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisKKwljbG9zZV9zaGExX2ZpbGUoZmQpOworCisJaWYgKG10aW1lKSB7CisJCXN0cnVjdCB1dGltYnVmIHV0YjsKKwkJdXRiLmFjdGltZSA9IG10aW1lOworCQl1dGIubW9kdGltZSA9IG10aW1lOworCQlpZiAodXRpbWUodG1wX2ZpbGUuYnVmLCAmdXRiKSA8IDApCisJCQl3YXJuaW5nKCJmYWlsZWQgdXRpbWUoKSBvbiAlczogJXMiLAorCQkJCXRtcF9maWxlLmJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisKKwlyZXR1cm4gZmluYWxpemVfb2JqZWN0X2ZpbGUodG1wX2ZpbGUuYnVmLCBmaWxlbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgZnJlc2hlbl9sb29zZV9vYmplY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlyZXR1cm4gY2hlY2tfYW5kX2ZyZXNoZW4oc2hhMSwgMSk7Cit9CisKK3N0YXRpYyBpbnQgZnJlc2hlbl9wYWNrZWRfb2JqZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHBhY2tfZW50cnkgZTsKKwlpZiAoIWZpbmRfcGFja19lbnRyeShzaGExLCAmZSkpCisJCXJldHVybiAwOworCWlmIChlLnAtPmZyZXNoZW5lZCkKKwkJcmV0dXJuIDE7CisJaWYgKCFmcmVzaGVuX2ZpbGUoZS5wLT5wYWNrX25hbWUpKQorCQlyZXR1cm4gMDsKKwllLnAtPmZyZXNoZW5lZCA9IDE7CisJcmV0dXJuIDE7Cit9CisKK2ludCB3cml0ZV9zaGExX2ZpbGUoY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgY2hhciAqdHlwZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwljaGFyIGhkclszMl07CisJaW50IGhkcmxlbiA9IHNpemVvZihoZHIpOworCisJLyogTm9ybWFsbHkgaWYgd2UgaGF2ZSBpdCBpbiB0aGUgcGFjayB0aGVuIHdlIGRvIG5vdCBib3RoZXIgd3JpdGluZworCSAqIGl0IG91dCBpbnRvIC5naXQvb2JqZWN0cy8/Py8/ezM4fSBmaWxlLgorCSAqLworCXdyaXRlX3NoYTFfZmlsZV9wcmVwYXJlKGJ1ZiwgbGVuLCB0eXBlLCBzaGExLCBoZHIsICZoZHJsZW4pOworCWlmIChmcmVzaGVuX3BhY2tlZF9vYmplY3Qoc2hhMSkgfHwgZnJlc2hlbl9sb29zZV9vYmplY3Qoc2hhMSkpCisJCXJldHVybiAwOworCXJldHVybiB3cml0ZV9sb29zZV9vYmplY3Qoc2hhMSwgaGRyLCBoZHJsZW4sIGJ1ZiwgbGVuLCAwKTsKK30KKworaW50IGhhc2hfc2hhMV9maWxlX2xpdGVyYWxseShjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBjb25zdCBjaGFyICp0eXBlLAorCQkJICAgICB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBmbGFncykKK3sKKwljaGFyICpoZWFkZXI7CisJaW50IGhkcmxlbiwgc3RhdHVzID0gMDsKKworCS8qIHR5cGUgc3RyaW5nLCBTUCwgJWx1IG9mIHRoZSBsZW5ndGggcGx1cyBOVUwgbXVzdCBmaXQgdGhpcyAqLworCWhkcmxlbiA9IHN0cmxlbih0eXBlKSArIDMyOworCWhlYWRlciA9IHhtYWxsb2MoaGRybGVuKTsKKwl3cml0ZV9zaGExX2ZpbGVfcHJlcGFyZShidWYsIGxlbiwgdHlwZSwgc2hhMSwgaGVhZGVyLCAmaGRybGVuKTsKKworCWlmICghKGZsYWdzICYgSEFTSF9XUklURV9PQkpFQ1QpKQorCQlnb3RvIGNsZWFudXA7CisJaWYgKGZyZXNoZW5fcGFja2VkX29iamVjdChzaGExKSB8fCBmcmVzaGVuX2xvb3NlX29iamVjdChzaGExKSkKKwkJZ290byBjbGVhbnVwOworCXN0YXR1cyA9IHdyaXRlX2xvb3NlX29iamVjdChzaGExLCBoZWFkZXIsIGhkcmxlbiwgYnVmLCBsZW4sIDApOworCitjbGVhbnVwOgorCWZyZWUoaGVhZGVyKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgZm9yY2Vfb2JqZWN0X2xvb3NlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHRpbWVfdCBtdGltZSkKK3sKKwl2b2lkICpidWY7CisJdW5zaWduZWQgbG9uZyBsZW47CisJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCWNoYXIgaGRyWzMyXTsKKwlpbnQgaGRybGVuOworCWludCByZXQ7CisKKwlpZiAoaGFzX2xvb3NlX29iamVjdChzaGExKSkKKwkJcmV0dXJuIDA7CisJYnVmID0gcmVhZF9wYWNrZWRfc2hhMShzaGExLCAmdHlwZSwgJmxlbik7CisJaWYgKCFidWYpCisJCXJldHVybiBlcnJvcigiY2Fubm90IHJlYWQgc2hhMV9maWxlIGZvciAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwloZHJsZW4gPSB4c25wcmludGYoaGRyLCBzaXplb2YoaGRyKSwgIiVzICVsdSIsIHR5cGVuYW1lKHR5cGUpLCBsZW4pICsgMTsKKwlyZXQgPSB3cml0ZV9sb29zZV9vYmplY3Qoc2hhMSwgaGRyLCBoZHJsZW4sIGJ1ZiwgbGVuLCBtdGltZSk7CisJZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGhhc19wYWNrX2luZGV4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJaWYgKHN0YXQoc2hhMV9wYWNrX2luZGV4X25hbWUoc2hhMSksICZzdCkpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitpbnQgaGFzX3NoYTFfcGFjayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBwYWNrX2VudHJ5IGU7CisJcmV0dXJuIGZpbmRfcGFja19lbnRyeShzaGExLCAmZSk7Cit9CisKK2ludCBoYXNfc2hhMV9maWxlX3dpdGhfZmxhZ3MoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBwYWNrX2VudHJ5IGU7CisKKwlpZiAoZmluZF9wYWNrX2VudHJ5KHNoYTEsICZlKSkKKwkJcmV0dXJuIDE7CisJaWYgKGhhc19sb29zZV9vYmplY3Qoc2hhMSkpCisJCXJldHVybiAxOworCWlmIChmbGFncyAmIEhBU19TSEExX1FVSUNLKQorCQlyZXR1cm4gMDsKKwlyZXByZXBhcmVfcGFja2VkX2dpdCgpOworCXJldHVybiBmaW5kX3BhY2tfZW50cnkoc2hhMSwgJmUpOworfQorCitzdGF0aWMgdm9pZCBjaGVja190cmVlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHRyZWVfZGVzYyBkZXNjOworCXN0cnVjdCBuYW1lX2VudHJ5IGVudHJ5OworCisJaW5pdF90cmVlX2Rlc2MoJmRlc2MsIGJ1Ziwgc2l6ZSk7CisJd2hpbGUgKHRyZWVfZW50cnkoJmRlc2MsICZlbnRyeSkpCisJCS8qIGRvIG5vdGhpbmcKKwkJICogdHJlZV9lbnRyeSgpIHdpbGwgZGllKCkgb24gbWFsZm9ybWVkIGVudHJpZXMgKi8KKwkJOworfQorCitzdGF0aWMgdm9pZCBjaGVja19jb21taXQoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgY29tbWl0IGM7CisJbWVtc2V0KCZjLCAwLCBzaXplb2YoYykpOworCWlmIChwYXJzZV9jb21taXRfYnVmZmVyKCZjLCBidWYsIHNpemUpKQorCQlkaWUoImNvcnJ1cHQgY29tbWl0Iik7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3RhZyhjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCB0YWcgdDsKKwltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7CisJaWYgKHBhcnNlX3RhZ19idWZmZXIoJnQsIGJ1Ziwgc2l6ZSkpCisJCWRpZSgiY29ycnVwdCB0YWciKTsKK30KKworc3RhdGljIGludCBpbmRleF9tZW0odW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSwKKwkJICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCSAgICAgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IHJldCwgcmVfYWxsb2NhdGVkID0gMDsKKwlpbnQgd3JpdGVfb2JqZWN0ID0gZmxhZ3MgJiBIQVNIX1dSSVRFX09CSkVDVDsKKworCWlmICghdHlwZSkKKwkJdHlwZSA9IE9CSl9CTE9COworCisJLyoKKwkgKiBDb252ZXJ0IGJsb2JzIHRvIGdpdCBpbnRlcm5hbCBmb3JtYXQKKwkgKi8KKwlpZiAoKHR5cGUgPT0gT0JKX0JMT0IpICYmIHBhdGgpIHsKKwkJc3RydWN0IHN0cmJ1ZiBuYnVmID0gU1RSQlVGX0lOSVQ7CisJCWlmIChjb252ZXJ0X3RvX2dpdChwYXRoLCBidWYsIHNpemUsICZuYnVmLAorCQkJCSAgIHdyaXRlX29iamVjdCA/IHNhZmVfY3JsZiA6IFNBRkVfQ1JMRl9GQUxTRSkpIHsKKwkJCWJ1ZiA9IHN0cmJ1Zl9kZXRhY2goJm5idWYsICZzaXplKTsKKwkJCXJlX2FsbG9jYXRlZCA9IDE7CisJCX0KKwl9CisJaWYgKGZsYWdzICYgSEFTSF9GT1JNQVRfQ0hFQ0spIHsKKwkJaWYgKHR5cGUgPT0gT0JKX1RSRUUpCisJCQljaGVja190cmVlKGJ1Ziwgc2l6ZSk7CisJCWlmICh0eXBlID09IE9CSl9DT01NSVQpCisJCQljaGVja19jb21taXQoYnVmLCBzaXplKTsKKwkJaWYgKHR5cGUgPT0gT0JKX1RBRykKKwkJCWNoZWNrX3RhZyhidWYsIHNpemUpOworCX0KKworCWlmICh3cml0ZV9vYmplY3QpCisJCXJldCA9IHdyaXRlX3NoYTFfZmlsZShidWYsIHNpemUsIHR5cGVuYW1lKHR5cGUpLCBzaGExKTsKKwllbHNlCisJCXJldCA9IGhhc2hfc2hhMV9maWxlKGJ1Ziwgc2l6ZSwgdHlwZW5hbWUodHlwZSksIHNoYTEpOworCWlmIChyZV9hbGxvY2F0ZWQpCisJCWZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGluZGV4X3N0cmVhbV9jb252ZXJ0X2Jsb2IodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLAorCQkJCSAgICAgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IHJldDsKKwljb25zdCBpbnQgd3JpdGVfb2JqZWN0ID0gZmxhZ3MgJiBIQVNIX1dSSVRFX09CSkVDVDsKKwlzdHJ1Y3Qgc3RyYnVmIHNidWYgPSBTVFJCVUZfSU5JVDsKKworCWFzc2VydChwYXRoKTsKKwlhc3NlcnQod291bGRfY29udmVydF90b19naXRfZmlsdGVyX2ZkKHBhdGgpKTsKKworCWNvbnZlcnRfdG9fZ2l0X2ZpbHRlcl9mZChwYXRoLCBmZCwgJnNidWYsCisJCQkJIHdyaXRlX29iamVjdCA/IHNhZmVfY3JsZiA6IFNBRkVfQ1JMRl9GQUxTRSk7CisKKwlpZiAod3JpdGVfb2JqZWN0KQorCQlyZXQgPSB3cml0ZV9zaGExX2ZpbGUoc2J1Zi5idWYsIHNidWYubGVuLCB0eXBlbmFtZShPQkpfQkxPQiksCisJCQkJICAgICAgc2hhMSk7CisJZWxzZQorCQlyZXQgPSBoYXNoX3NoYTFfZmlsZShzYnVmLmJ1Ziwgc2J1Zi5sZW4sIHR5cGVuYW1lKE9CSl9CTE9CKSwKKwkJCQkgICAgIHNoYTEpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGluZGV4X3BpcGUodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBlbnVtIG9iamVjdF90eXBlIHR5cGUsCisJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBzdHJidWYgc2J1ZiA9IFNUUkJVRl9JTklUOworCWludCByZXQ7CisKKwlpZiAoc3RyYnVmX3JlYWQoJnNidWYsIGZkLCA0MDk2KSA+PSAwKQorCQlyZXQgPSBpbmRleF9tZW0oc2hhMSwgc2J1Zi5idWYsIHNidWYubGVuLCB0eXBlLAlwYXRoLCBmbGFncyk7CisJZWxzZQorCQlyZXQgPSAtMTsKKwlzdHJidWZfcmVsZWFzZSgmc2J1Zik7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBTTUFMTF9GSUxFX1NJWkUgKDMyKjEwMjQpCisKK3N0YXRpYyBpbnQgaW5kZXhfY29yZSh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmQsIHNpemVfdCBzaXplLAorCQkgICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKnBhdGgsCisJCSAgICAgIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXQ7CisKKwlpZiAoIXNpemUpIHsKKwkJcmV0ID0gaW5kZXhfbWVtKHNoYTEsICIiLCBzaXplLCB0eXBlLCBwYXRoLCBmbGFncyk7CisJfSBlbHNlIGlmIChzaXplIDw9IFNNQUxMX0ZJTEVfU0laRSkgeworCQljaGFyICpidWYgPSB4bWFsbG9jKHNpemUpOworCQlpZiAoc2l6ZSA9PSByZWFkX2luX2Z1bGwoZmQsIGJ1Ziwgc2l6ZSkpCisJCQlyZXQgPSBpbmRleF9tZW0oc2hhMSwgYnVmLCBzaXplLCB0eXBlLCBwYXRoLCBmbGFncyk7CisJCWVsc2UKKwkJCXJldCA9IGVycm9yKCJzaG9ydCByZWFkICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZnJlZShidWYpOworCX0gZWxzZSB7CisJCXZvaWQgKmJ1ZiA9IHhtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkLCAwKTsKKwkJcmV0ID0gaW5kZXhfbWVtKHNoYTEsIGJ1Ziwgc2l6ZSwgdHlwZSwgcGF0aCwgZmxhZ3MpOworCQltdW5tYXAoYnVmLCBzaXplKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgY3JlYXRlcyBvbmUgcGFja2ZpbGUgcGVyIGxhcmdlIGJsb2IgdW5sZXNzIGJ1bGstY2hlY2tpbgorICogbWFjaGluZXJ5IGlzICJwbHVnZ2VkIi4KKyAqCisgKiBUaGlzIGFsc28gYnlwYXNzZXMgdGhlIHVzdWFsICJjb252ZXJ0LXRvLWdpdCIgZGFuY2UsIGFuZCB0aGF0IGlzIG9uCisgKiBwdXJwb3NlLiBXZSBjb3VsZCB3cml0ZSBhIHN0cmVhbWluZyB2ZXJzaW9uIG9mIHRoZSBjb252ZXJ0aW5nCisgKiBmdW5jdGlvbnMgYW5kIGluc2VydCB0aGF0IGJlZm9yZSBmZWVkaW5nIHRoZSBkYXRhIHRvIGZhc3QtaW1wb3J0CisgKiAob3IgZXF1aXZhbGVudCBpbi1jb3JlIEFQSSBkZXNjcmliZWQgYWJvdmUpLiBIb3dldmVyLCB0aGF0IGlzCisgKiBzb21ld2hhdCBjb21wbGljYXRlZCwgYXMgd2UgZG8gbm90IGtub3cgdGhlIHNpemUgb2YgdGhlIGZpbHRlcgorICogcmVzdWx0LCB3aGljaCB3ZSBuZWVkIHRvIGtub3cgYmVmb3JlaGFuZCB3aGVuIHdyaXRpbmcgYSBnaXQgb2JqZWN0LgorICogU2luY2UgdGhlIHByaW1hcnkgbW90aXZhdGlvbiBmb3IgdHJ5aW5nIHRvIHN0cmVhbSBmcm9tIHRoZSB3b3JraW5nCisgKiB0cmVlIGZpbGUgYW5kIHRvIGF2b2lkIG1tYXBpbmcgaXQgaW4gY29yZSBpcyB0byBkZWFsIHdpdGggbGFyZ2UKKyAqIGJpbmFyeSBibG9icywgdGhleSBnZW5lcmFsbHkgZG8gbm90IHdhbnQgdG8gZ2V0IGFueSBjb252ZXJzaW9uLCBhbmQKKyAqIGNhbGxlcnMgc2hvdWxkIGF2b2lkIHRoaXMgY29kZSBwYXRoIHdoZW4gZmlsdGVycyBhcmUgcmVxdWVzdGVkLgorICovCitzdGF0aWMgaW50IGluZGV4X3N0cmVhbSh1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgZmQsIHNpemVfdCBzaXplLAorCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpwYXRoLAorCQkJdW5zaWduZWQgZmxhZ3MpCit7CisJcmV0dXJuIGluZGV4X2J1bGtfY2hlY2tpbihzaGExLCBmZCwgc2l6ZSwgdHlwZSwgcGF0aCwgZmxhZ3MpOworfQorCitpbnQgaW5kZXhfZmQodW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGZkLCBzdHJ1Y3Qgc3RhdCAqc3QsCisJICAgICBlbnVtIG9iamVjdF90eXBlIHR5cGUsIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIENhbGwgeHNpemVfdCgpIG9ubHkgd2hlbiBuZWVkZWQgdG8gYXZvaWQgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkKKwkgKiBkaWUoKSBmb3IgbGFyZ2UgZmlsZXMuCisJICovCisJaWYgKHR5cGUgPT0gT0JKX0JMT0IgJiYgcGF0aCAmJiB3b3VsZF9jb252ZXJ0X3RvX2dpdF9maWx0ZXJfZmQocGF0aCkpCisJCXJldCA9IGluZGV4X3N0cmVhbV9jb252ZXJ0X2Jsb2Ioc2hhMSwgZmQsIHBhdGgsIGZsYWdzKTsKKwllbHNlIGlmICghU19JU1JFRyhzdC0+c3RfbW9kZSkpCisJCXJldCA9IGluZGV4X3BpcGUoc2hhMSwgZmQsIHR5cGUsIHBhdGgsIGZsYWdzKTsKKwllbHNlIGlmIChzdC0+c3Rfc2l6ZSA8PSBiaWdfZmlsZV90aHJlc2hvbGQgfHwgdHlwZSAhPSBPQkpfQkxPQiB8fAorCQkgKHBhdGggJiYgd291bGRfY29udmVydF90b19naXQocGF0aCkpKQorCQlyZXQgPSBpbmRleF9jb3JlKHNoYTEsIGZkLCB4c2l6ZV90KHN0LT5zdF9zaXplKSwgdHlwZSwgcGF0aCwKKwkJCQkgZmxhZ3MpOworCWVsc2UKKwkJcmV0ID0gaW5kZXhfc3RyZWFtKHNoYTEsIGZkLCB4c2l6ZV90KHN0LT5zdF9zaXplKSwgdHlwZSwgcGF0aCwKKwkJCQkgICBmbGFncyk7CisJY2xvc2UoZmQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBpbmRleF9wYXRoKHVuc2lnbmVkIGNoYXIgKnNoYTEsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpzdCwgdW5zaWduZWQgZmxhZ3MpCit7CisJaW50IGZkOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCXN3aXRjaCAoc3QtPnN0X21vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZSRUc6CisJCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJCWlmIChmZCA8IDApCisJCQlyZXR1cm4gZXJyb3IoIm9wZW4oXCIlc1wiKTogJXMiLCBwYXRoLAorCQkJCSAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJaWYgKGluZGV4X2ZkKHNoYTEsIGZkLCBzdCwgT0JKX0JMT0IsIHBhdGgsIGZsYWdzKSA8IDApCisJCQlyZXR1cm4gZXJyb3IoIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IGludG8gZGF0YWJhc2UiLAorCQkJCSAgICAgcGF0aCk7CisJCWJyZWFrOworCWNhc2UgU19JRkxOSzoKKwkJaWYgKHN0cmJ1Zl9yZWFkbGluaygmc2IsIHBhdGgsIHN0LT5zdF9zaXplKSkgeworCQkJY2hhciAqZXJyc3RyID0gc3RyZXJyb3IoZXJybm8pOworCQkJcmV0dXJuIGVycm9yKCJyZWFkbGluayhcIiVzXCIpOiAlcyIsIHBhdGgsCisJCQkgICAgICAgICAgICAgZXJyc3RyKTsKKwkJfQorCQlpZiAoIShmbGFncyAmIEhBU0hfV1JJVEVfT0JKRUNUKSkKKwkJCWhhc2hfc2hhMV9maWxlKHNiLmJ1Ziwgc2IubGVuLCBibG9iX3R5cGUsIHNoYTEpOworCQllbHNlIGlmICh3cml0ZV9zaGExX2ZpbGUoc2IuYnVmLCBzYi5sZW4sIGJsb2JfdHlwZSwgc2hhMSkpCisJCQlyZXR1cm4gZXJyb3IoIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IGludG8gZGF0YWJhc2UiLAorCQkJCSAgICAgcGF0aCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCWJyZWFrOworCWNhc2UgU19JRkRJUjoKKwkJcmV0dXJuIHJlc29sdmVfZ2l0bGlua19yZWYocGF0aCwgIkhFQUQiLCBzaGExKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZXJyb3IoIiVzOiB1bnN1cHBvcnRlZCBmaWxlIHR5cGUiLCBwYXRoKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCByZWFkX3BhY2tfaGVhZGVyKGludCBmZCwgc3RydWN0IHBhY2tfaGVhZGVyICpoZWFkZXIpCit7CisJaWYgKHJlYWRfaW5fZnVsbChmZCwgaGVhZGVyLCBzaXplb2YoKmhlYWRlcikpIDwgc2l6ZW9mKCpoZWFkZXIpKQorCQkvKiAiZW9mIGJlZm9yZSBwYWNrIGhlYWRlciB3YXMgZnVsbHkgcmVhZCIgKi8KKwkJcmV0dXJuIFBIX0VSUk9SX0VPRjsKKworCWlmIChoZWFkZXItPmhkcl9zaWduYXR1cmUgIT0gaHRvbmwoUEFDS19TSUdOQVRVUkUpKQorCQkvKiAicHJvdG9jb2wgZXJyb3IgKHBhY2sgc2lnbmF0dXJlIG1pc21hdGNoIGRldGVjdGVkKSIgKi8KKwkJcmV0dXJuIFBIX0VSUk9SX1BBQ0tfU0lHTkFUVVJFOworCWlmICghcGFja192ZXJzaW9uX29rKGhlYWRlci0+aGRyX3ZlcnNpb24pKQorCQkvKiAicHJvdG9jb2wgZXJyb3IgKHBhY2sgdmVyc2lvbiB1bnN1cHBvcnRlZCkiICovCisJCXJldHVybiBQSF9FUlJPUl9QUk9UT0NPTDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhc3NlcnRfc2hhMV90eXBlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIGVudW0gb2JqZWN0X3R5cGUgZXhwZWN0KQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZSA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJaWYgKHR5cGUgPCAwKQorCQlkaWUoIiVzIGlzIG5vdCBhIHZhbGlkIG9iamVjdCIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlpZiAodHlwZSAhPSBleHBlY3QpCisJCWRpZSgiJXMgaXMgbm90IGEgdmFsaWQgJyVzJyBvYmplY3QiLCBzaGExX3RvX2hleChzaGExKSwKKwkJICAgIHR5cGVuYW1lKGV4cGVjdCkpOworfQorCitzdGF0aWMgaW50IGZvcl9lYWNoX2ZpbGVfaW5fb2JqX3N1YmRpcihpbnQgc3ViZGlyX25yLAorCQkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJCSAgICAgICBlYWNoX2xvb3NlX29iamVjdF9mbiBvYmpfY2IsCisJCQkJICAgICAgIGVhY2hfbG9vc2VfY3J1ZnRfZm4gY3J1ZnRfY2IsCisJCQkJICAgICAgIGVhY2hfbG9vc2Vfc3ViZGlyX2ZuIHN1YmRpcl9jYiwKKwkJCQkgICAgICAgdm9pZCAqZGF0YSkKK3sKKwlzaXplX3QgYmFzZWxlbiA9IHBhdGgtPmxlbjsKKwlESVIgKmRpciA9IG9wZW5kaXIocGF0aC0+YnVmKTsKKwlzdHJ1Y3QgZGlyZW50ICpkZTsKKwlpbnQgciA9IDA7CisKKwlpZiAoIWRpcikgeworCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIG9wZW4gJXM6ICVzIiwgcGF0aC0+YnVmLCBzdHJlcnJvcihlcnJubykpOworCX0KKworCXdoaWxlICgoZGUgPSByZWFkZGlyKGRpcikpKSB7CisJCWlmIChpc19kb3Rfb3JfZG90ZG90KGRlLT5kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJc3RyYnVmX3NldGxlbihwYXRoLCBiYXNlbGVuKTsKKwkJc3RyYnVmX2FkZGYocGF0aCwgIi8lcyIsIGRlLT5kX25hbWUpOworCisJCWlmIChzdHJsZW4oZGUtPmRfbmFtZSkgPT0gMzgpICB7CisJCQljaGFyIGhleFs0MV07CisJCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJCQlzbnByaW50ZihoZXgsIHNpemVvZihoZXgpLCAiJTAyeCVzIiwKKwkJCQkgc3ViZGlyX25yLCBkZS0+ZF9uYW1lKTsKKwkJCWlmICghZ2V0X3NoYTFfaGV4KGhleCwgc2hhMSkpIHsKKwkJCQlpZiAob2JqX2NiKSB7CisJCQkJCXIgPSBvYmpfY2Ioc2hhMSwgcGF0aC0+YnVmLCBkYXRhKTsKKwkJCQkJaWYgKHIpCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAoY3J1ZnRfY2IpIHsKKwkJCXIgPSBjcnVmdF9jYihkZS0+ZF9uYW1lLCBwYXRoLT5idWYsIGRhdGEpOworCQkJaWYgKHIpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJc3RyYnVmX3NldGxlbihwYXRoLCBiYXNlbGVuKTsKKworCWlmICghciAmJiBzdWJkaXJfY2IpCisJCXIgPSBzdWJkaXJfY2Ioc3ViZGlyX25yLCBwYXRoLT5idWYsIGRhdGEpOworCisJY2xvc2VkaXIoZGlyKTsKKwlyZXR1cm4gcjsKK30KKworaW50IGZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyX2J1ZihzdHJ1Y3Qgc3RyYnVmICpwYXRoLAorCQkJICAgIGVhY2hfbG9vc2Vfb2JqZWN0X2ZuIG9ial9jYiwKKwkJCSAgICBlYWNoX2xvb3NlX2NydWZ0X2ZuIGNydWZ0X2NiLAorCQkJICAgIGVhY2hfbG9vc2Vfc3ViZGlyX2ZuIHN1YmRpcl9jYiwKKwkJCSAgICB2b2lkICpkYXRhKQoreworCXNpemVfdCBiYXNlbGVuID0gcGF0aC0+bGVuOworCWludCByID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQlzdHJidWZfYWRkZihwYXRoLCAiLyUwMngiLCBpKTsKKwkJciA9IGZvcl9lYWNoX2ZpbGVfaW5fb2JqX3N1YmRpcihpLCBwYXRoLCBvYmpfY2IsIGNydWZ0X2NiLAorCQkJCQkJc3ViZGlyX2NiLCBkYXRhKTsKKwkJc3RyYnVmX3NldGxlbihwYXRoLCBiYXNlbGVuKTsKKwkJaWYgKHIpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcjsKK30KKworaW50IGZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyKGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJICBlYWNoX2xvb3NlX29iamVjdF9mbiBvYmpfY2IsCisJCQkJICBlYWNoX2xvb3NlX2NydWZ0X2ZuIGNydWZ0X2NiLAorCQkJCSAgZWFjaF9sb29zZV9zdWJkaXJfZm4gc3ViZGlyX2NiLAorCQkJCSAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCByOworCisJc3RyYnVmX2FkZHN0cigmYnVmLCBwYXRoKTsKKwlyID0gZm9yX2VhY2hfbG9vc2VfZmlsZV9pbl9vYmpkaXJfYnVmKCZidWYsIG9ial9jYiwgY3J1ZnRfY2IsCisJCQkJCSAgICAgIHN1YmRpcl9jYiwgZGF0YSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwlyZXR1cm4gcjsKK30KKworc3RydWN0IGxvb3NlX2FsdF9vZGJfZGF0YSB7CisJZWFjaF9sb29zZV9vYmplY3RfZm4gKmNiOworCXZvaWQgKmRhdGE7Cit9OworCitzdGF0aWMgaW50IGxvb3NlX2Zyb21fYWx0X29kYihzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0LAorCQkJICAgICAgdm9pZCAqdmRhdGEpCit7CisJc3RydWN0IGxvb3NlX2FsdF9vZGJfZGF0YSAqZGF0YSA9IHZkYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IHI7CisKKwkvKiBjb3B5IGJhc2Ugbm90IGluY2x1ZGluZyB0cmFpbGluZyAnLycgKi8KKwlzdHJidWZfYWRkKCZidWYsIGFsdC0+YmFzZSwgYWx0LT5uYW1lIC0gYWx0LT5iYXNlIC0gMSk7CisJciA9IGZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyX2J1ZigmYnVmLAorCQkJCQkgICAgICBkYXRhLT5jYiwgTlVMTCwgTlVMTCwKKwkJCQkJICAgICAgZGF0YS0+ZGF0YSk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIHI7Cit9CisKK2ludCBmb3JfZWFjaF9sb29zZV9vYmplY3QoZWFjaF9sb29zZV9vYmplY3RfZm4gY2IsIHZvaWQgKmRhdGEsIHVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBsb29zZV9hbHRfb2RiX2RhdGEgYWx0OworCWludCByOworCisJciA9IGZvcl9lYWNoX2xvb3NlX2ZpbGVfaW5fb2JqZGlyKGdldF9vYmplY3RfZGlyZWN0b3J5KCksCisJCQkJCSAgY2IsIE5VTEwsIE5VTEwsIGRhdGEpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWlmIChmbGFncyAmIEZPUl9FQUNIX09CSkVDVF9MT0NBTF9PTkxZKQorCQlyZXR1cm4gMDsKKworCWFsdC5jYiA9IGNiOworCWFsdC5kYXRhID0gZGF0YTsKKwlyZXR1cm4gZm9yZWFjaF9hbHRfb2RiKGxvb3NlX2Zyb21fYWx0X29kYiwgJmFsdCk7Cit9CisKK3N0YXRpYyBpbnQgZm9yX2VhY2hfb2JqZWN0X2luX3BhY2soc3RydWN0IHBhY2tlZF9naXQgKnAsIGVhY2hfcGFja2VkX29iamVjdF9mbiBjYiwgdm9pZCAqZGF0YSkKK3sKKwl1aW50MzJfdCBpOworCWludCByID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBwLT5udW1fb2JqZWN0czsgaSsrKSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEgPSBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIGkpOworCisJCWlmICghc2hhMSkKKwkJCXJldHVybiBlcnJvcigidW5hYmxlIHRvIGdldCBzaGExIG9mIG9iamVjdCAldSBpbiAlcyIsCisJCQkJICAgICBpLCBwLT5wYWNrX25hbWUpOworCisJCXIgPSBjYihzaGExLCBwLCBpLCBkYXRhKTsKKwkJaWYgKHIpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHI7Cit9CisKK2ludCBmb3JfZWFjaF9wYWNrZWRfb2JqZWN0KGVhY2hfcGFja2VkX29iamVjdF9mbiBjYiwgdm9pZCAqZGF0YSwgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHBhY2tlZF9naXQgKnA7CisJaW50IHIgPSAwOworCWludCBwYWNrX2Vycm9ycyA9IDA7CisKKwlwcmVwYXJlX3BhY2tlZF9naXQoKTsKKwlmb3IgKHAgPSBwYWNrZWRfZ2l0OyBwOyBwID0gcC0+bmV4dCkgeworCQlpZiAoKGZsYWdzICYgRk9SX0VBQ0hfT0JKRUNUX0xPQ0FMX09OTFkpICYmICFwLT5wYWNrX2xvY2FsKQorCQkJY29udGludWU7CisJCWlmIChvcGVuX3BhY2tfaW5kZXgocCkpIHsKKwkJCXBhY2tfZXJyb3JzID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXIgPSBmb3JfZWFjaF9vYmplY3RfaW5fcGFjayhwLCBjYiwgZGF0YSk7CisJCWlmIChyKQorCQkJYnJlYWs7CisJfQorCXJldHVybiByID8gciA6IHBhY2tfZXJyb3JzOworfQpkaWZmIC0tZ2l0IGEvc2hhMV9uYW1lLmMgYi9zaGExX25hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjQyYzVlCi0tLSAvZGV2L251bGwKKysrIGIvc2hhMV9uYW1lLmMKQEAgLTAsMCArMSwxNDk5IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKworc3RhdGljIGludCBnZXRfc2hhMV9vbmVsaW5lKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBzdHJ1Y3QgY29tbWl0X2xpc3QgKik7CisKK3R5cGVkZWYgaW50ICgqZGlzYW1iaWd1YXRlX2hpbnRfZm4pKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdm9pZCAqKTsKKworc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSB7CisJZGlzYW1iaWd1YXRlX2hpbnRfZm4gZm47CisJdm9pZCAqY2JfZGF0YTsKKwl1bnNpZ25lZCBjaGFyIGNhbmRpZGF0ZVsyMF07CisJdW5zaWduZWQgY2FuZGlkYXRlX2V4aXN0czoxOworCXVuc2lnbmVkIGNhbmRpZGF0ZV9jaGVja2VkOjE7CisJdW5zaWduZWQgY2FuZGlkYXRlX29rOjE7CisJdW5zaWduZWQgZGlzYW1iaWd1YXRlX2ZuX3VzZWQ6MTsKKwl1bnNpZ25lZCBhbWJpZ3VvdXM6MTsKKwl1bnNpZ25lZCBhbHdheXNfY2FsbF9mbjoxOworfTsKKworc3RhdGljIHZvaWQgdXBkYXRlX2NhbmRpZGF0ZXMoc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSAqZHMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnJlbnQpCit7CisJaWYgKGRzLT5hbHdheXNfY2FsbF9mbikgeworCQlkcy0+YW1iaWd1b3VzID0gZHMtPmZuKGN1cnJlbnQsIGRzLT5jYl9kYXRhKSA/IDEgOiAwOworCQlyZXR1cm47CisJfQorCWlmICghZHMtPmNhbmRpZGF0ZV9leGlzdHMpIHsKKwkJLyogdGhpcyBpcyB0aGUgZmlyc3QgY2FuZGlkYXRlICovCisJCWhhc2hjcHkoZHMtPmNhbmRpZGF0ZSwgY3VycmVudCk7CisJCWRzLT5jYW5kaWRhdGVfZXhpc3RzID0gMTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoIWhhc2hjbXAoZHMtPmNhbmRpZGF0ZSwgY3VycmVudCkpIHsKKwkJLyogdGhlIHNhbWUgYXMgd2hhdCB3ZSBhbHJlYWR5IGhhdmUgc2VlbiAqLworCQlyZXR1cm47CisJfQorCisJaWYgKCFkcy0+Zm4pIHsKKwkJLyogY2Fubm90IGRpc2FtYmlndWF0ZSBiZXR3ZWVuIGRzLT5jYW5kaWRhdGUgYW5kIGN1cnJlbnQgKi8KKwkJZHMtPmFtYmlndW91cyA9IDE7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWRzLT5jYW5kaWRhdGVfY2hlY2tlZCkgeworCQlkcy0+Y2FuZGlkYXRlX29rID0gZHMtPmZuKGRzLT5jYW5kaWRhdGUsIGRzLT5jYl9kYXRhKTsKKwkJZHMtPmRpc2FtYmlndWF0ZV9mbl91c2VkID0gMTsKKwkJZHMtPmNhbmRpZGF0ZV9jaGVja2VkID0gMTsKKwl9CisKKwlpZiAoIWRzLT5jYW5kaWRhdGVfb2spIHsKKwkJLyogZGlzY2FyZCB0aGUgY2FuZGlkYXRlOyB3ZSBrbm93IGl0IGRvZXMgbm90IHNhdGlzZnkgZm4gKi8KKwkJaGFzaGNweShkcy0+Y2FuZGlkYXRlLCBjdXJyZW50KTsKKwkJZHMtPmNhbmRpZGF0ZV9jaGVja2VkID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHdlIHJlYWNoIHRoaXMgcG9pbnQsIHdlIGtub3cgZHMtPmNhbmRpZGF0ZSBzYXRpc2ZpZXMgZm4gKi8KKwlpZiAoZHMtPmZuKGN1cnJlbnQsIGRzLT5jYl9kYXRhKSkgeworCQkvKgorCQkgKiBpZiBib3RoIGN1cnJlbnQgYW5kIGNhbmRpZGF0ZSBzYXRpc2Z5IGZuLCB3ZSBjYW5ub3QKKwkJICogZGlzYW1iaWd1YXRlLgorCQkgKi8KKwkJZHMtPmNhbmRpZGF0ZV9vayA9IDA7CisJCWRzLT5hbWJpZ3VvdXMgPSAxOworCX0KKworCS8qIG90aGVyd2lzZSwgY3VycmVudCBjYW4gYmUgZGlzY2FyZGVkIGFuZCBjYW5kaWRhdGUgaXMgc3RpbGwgZ29vZCAqLworfQorCitzdGF0aWMgdm9pZCBmaW5kX3Nob3J0X29iamVjdF9maWxlbmFtZShpbnQgbGVuLCBjb25zdCBjaGFyICpoZXhfcGZ4LCBzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlICpkcykKK3sKKwlzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqYWx0OworCWNoYXIgaGV4WzQwXTsKKwlzdGF0aWMgc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmZha2VlbnQ7CisKKwlpZiAoIWZha2VlbnQpIHsKKwkJLyoKKwkJICogQ3JlYXRlIGEgImZha2UiIGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2UgdGhhdAorCQkgKiBwb2ludHMgdG8gb3VyIG93biBvYmplY3QgZGF0YWJhc2UsIHRvIG1ha2UgaXQKKwkJICogZWFzaWVyIHRvIGdldCBhIHRlbXBvcmFyeSB3b3JraW5nIHNwYWNlIGluCisJCSAqIGFsdC0+bmFtZS9hbHQtPmJhc2Ugd2hpbGUgaXRlcmF0aW5nIG92ZXIgdGhlCisJCSAqIG9iamVjdCBkYXRhYmFzZXMgaW5jbHVkaW5nIG91ciBvd24uCisJCSAqLworCQljb25zdCBjaGFyICpvYmpkaXIgPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOworCQlpbnQgb2JqZGlyX2xlbiA9IHN0cmxlbihvYmpkaXIpOworCQlpbnQgZW50bGVuID0gb2JqZGlyX2xlbiArIDQzOworCQlmYWtlZW50ID0geG1hbGxvYyhzaXplb2YoKmZha2VlbnQpICsgZW50bGVuKTsKKwkJbWVtY3B5KGZha2VlbnQtPmJhc2UsIG9iamRpciwgb2JqZGlyX2xlbik7CisJCWZha2VlbnQtPm5hbWUgPSBmYWtlZW50LT5iYXNlICsgb2JqZGlyX2xlbiArIDE7CisJCWZha2VlbnQtPm5hbWVbLTFdID0gJy8nOworCX0KKwlmYWtlZW50LT5uZXh0ID0gYWx0X29kYl9saXN0OworCisJeHNucHJpbnRmKGhleCwgc2l6ZW9mKGhleCksICIlLjJzIiwgaGV4X3BmeCk7CisJZm9yIChhbHQgPSBmYWtlZW50OyBhbHQgJiYgIWRzLT5hbWJpZ3VvdXM7IGFsdCA9IGFsdC0+bmV4dCkgeworCQlzdHJ1Y3QgZGlyZW50ICpkZTsKKwkJRElSICpkaXI7CisJCS8qCisJCSAqIGV2ZXJ5IGFsdF9vZGIgc3RydWN0IGhhcyA0MiBleHRyYSBieXRlcyBhZnRlciB0aGUgYmFzZQorCQkgKiBmb3IgZXhhY3RseSB0aGlzIHB1cnBvc2UKKwkJICovCisJCXhzbnByaW50ZihhbHQtPm5hbWUsIDQyLCAiJS4ycy8iLCBoZXhfcGZ4KTsKKwkJZGlyID0gb3BlbmRpcihhbHQtPmJhc2UpOworCQlpZiAoIWRpcikKKwkJCWNvbnRpbnVlOworCisJCXdoaWxlICghZHMtPmFtYmlndW91cyAmJiAoZGUgPSByZWFkZGlyKGRpcikpICE9IE5VTEwpIHsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwkJCWlmIChzdHJsZW4oZGUtPmRfbmFtZSkgIT0gMzgpCisJCQkJY29udGludWU7CisJCQlpZiAobWVtY21wKGRlLT5kX25hbWUsIGhleF9wZnggKyAyLCBsZW4gLSAyKSkKKwkJCQljb250aW51ZTsKKwkJCW1lbWNweShoZXggKyAyLCBkZS0+ZF9uYW1lLCAzOCk7CisJCQlpZiAoIWdldF9zaGExX2hleChoZXgsIHNoYTEpKQorCQkJCXVwZGF0ZV9jYW5kaWRhdGVzKGRzLCBzaGExKTsKKwkJfQorCQljbG9zZWRpcihkaXIpOworCX0KK30KKworc3RhdGljIGludCBtYXRjaF9zaGEodW5zaWduZWQgbGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICphLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiKQoreworCWRvIHsKKwkJaWYgKCphICE9ICpiKQorCQkJcmV0dXJuIDA7CisJCWErKzsKKwkJYisrOworCQlsZW4gLT0gMjsKKwl9IHdoaWxlIChsZW4gPiAxKTsKKwlpZiAobGVuKQorCQlpZiAoKCphIF4gKmIpICYgMHhmMCkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB1bmlxdWVfaW5fcGFjayhpbnQgbGVuLAorCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpiaW5fcGZ4LAorCQkJICAgc3RydWN0IHBhY2tlZF9naXQgKnAsCisJCQkgICBzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlICpkcykKK3sKKwl1aW50MzJfdCBudW0sIGxhc3QsIGksIGZpcnN0ID0gMDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjdXJyZW50ID0gTlVMTDsKKworCW9wZW5fcGFja19pbmRleChwKTsKKwludW0gPSBwLT5udW1fb2JqZWN0czsKKwlsYXN0ID0gbnVtOworCXdoaWxlIChmaXJzdCA8IGxhc3QpIHsKKwkJdWludDMyX3QgbWlkID0gKGZpcnN0ICsgbGFzdCkgLyAyOworCQljb25zdCB1bnNpZ25lZCBjaGFyICpjdXJyZW50OworCQlpbnQgY21wOworCisJCWN1cnJlbnQgPSBudGhfcGFja2VkX29iamVjdF9zaGExKHAsIG1pZCk7CisJCWNtcCA9IGhhc2hjbXAoYmluX3BmeCwgY3VycmVudCk7CisJCWlmICghY21wKSB7CisJCQlmaXJzdCA9IG1pZDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjbXAgPiAwKSB7CisJCQlmaXJzdCA9IG1pZCsxOworCQkJY29udGludWU7CisJCX0KKwkJbGFzdCA9IG1pZDsKKwl9CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQsICJmaXJzdCIgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBsb3dlc3Qgb2JqZWN0CisJICogd2l0aCBhbiBvYmplY3QgbmFtZSB0aGF0IGNvdWxkIG1hdGNoICJiaW5fcGZ4Ii4gIFNlZSBpZiB3ZSBoYXZlCisJICogMCwgMSBvciBtb3JlIG9iamVjdHMgdGhhdCBhY3R1YWxseSBtYXRjaChlcykuCisJICovCisJZm9yIChpID0gZmlyc3Q7IGkgPCBudW0gJiYgIWRzLT5hbWJpZ3VvdXM7IGkrKykgeworCQljdXJyZW50ID0gbnRoX3BhY2tlZF9vYmplY3Rfc2hhMShwLCBpKTsKKwkJaWYgKCFtYXRjaF9zaGEobGVuLCBiaW5fcGZ4LCBjdXJyZW50KSkKKwkJCWJyZWFrOworCQl1cGRhdGVfY2FuZGlkYXRlcyhkcywgY3VycmVudCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5kX3Nob3J0X3BhY2tlZF9vYmplY3QoaW50IGxlbiwgY29uc3QgdW5zaWduZWQgY2hhciAqYmluX3BmeCwKKwkJCQkgICAgIHN0cnVjdCBkaXNhbWJpZ3VhdGVfc3RhdGUgKmRzKQoreworCXN0cnVjdCBwYWNrZWRfZ2l0ICpwOworCisJcHJlcGFyZV9wYWNrZWRfZ2l0KCk7CisJZm9yIChwID0gcGFja2VkX2dpdDsgcCAmJiAhZHMtPmFtYmlndW91czsgcCA9IHAtPm5leHQpCisJCXVuaXF1ZV9pbl9wYWNrKGxlbiwgYmluX3BmeCwgcCwgZHMpOworfQorCisjZGVmaW5lIFNIT1JUX05BTUVfTk9UX0ZPVU5EICgtMSkKKyNkZWZpbmUgU0hPUlRfTkFNRV9BTUJJR1VPVVMgKC0yKQorCitzdGF0aWMgaW50IGZpbmlzaF9vYmplY3RfZGlzYW1iaWd1YXRpb24oc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSAqZHMsCisJCQkJCXVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJaWYgKGRzLT5hbWJpZ3VvdXMpCisJCXJldHVybiBTSE9SVF9OQU1FX0FNQklHVU9VUzsKKworCWlmICghZHMtPmNhbmRpZGF0ZV9leGlzdHMpCisJCXJldHVybiBTSE9SVF9OQU1FX05PVF9GT1VORDsKKworCWlmICghZHMtPmNhbmRpZGF0ZV9jaGVja2VkKQorCQkvKgorCQkgKiBJZiB0aGlzIGlzIHRoZSBvbmx5IGNhbmRpZGF0ZSwgdGhlcmUgaXMgbm8gcG9pbnQKKwkJICogY2FsbGluZyB0aGUgZGlzYW1iaWd1YXRpb24gaGludCBjYWxsYmFjay4KKwkJICoKKwkJICogT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBjdXJyZW50IGNhbmRpZGF0ZQorCQkgKiByZXBsYWNlZCBhbiBlYXJsaWVyIGNhbmRpZGF0ZSB0aGF0IGRpZCBfbm90XyBwYXNzCisJCSAqIHRoZSBkaXNhbWJpZ3VhdGlvbiBoaW50IGNhbGxiYWNrLCB0aGVuIHdlIGRvIGhhdmUKKwkJICogbW9yZSB0aGFuIG9uZSBvYmplY3RzIHRoYXQgbWF0Y2ggdGhlIHNob3J0IG5hbWUKKwkJICogZ2l2ZW4sIHNvIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhpcyBvbmUgbWF0Y2hlczsKKwkJICogb3RoZXJ3aXNlLCBpZiB3ZSBkaXNjb3ZlcmVkIHRoaXMgb25lIGFuZCB0aGUgb25lCisJCSAqIHRoYXQgd2UgcHJldmlvdXNseSBkaXNjYXJkZWQgaW4gdGhlIHJldmVyc2Ugb3JkZXIsCisJCSAqIHdlIHdvdWxkIGVuZCB1cCBzaG93aW5nIGRpZmZlcmVudCByZXN1bHRzIGluIHRoZQorCQkgKiBzYW1lIHJlcG9zaXRvcnkhCisJCSAqLworCQlkcy0+Y2FuZGlkYXRlX29rID0gKCFkcy0+ZGlzYW1iaWd1YXRlX2ZuX3VzZWQgfHwKKwkJCQkgICAgZHMtPmZuKGRzLT5jYW5kaWRhdGUsIGRzLT5jYl9kYXRhKSk7CisKKwlpZiAoIWRzLT5jYW5kaWRhdGVfb2spCisJCXJldHVybiBTSE9SVF9OQU1FX0FNQklHVU9VUzsKKworCWhhc2hjcHkoc2hhMSwgZHMtPmNhbmRpZGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzYW1iaWd1YXRlX2NvbW1pdF9vbmx5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHZvaWQgKmNiX2RhdGFfdW51c2VkKQoreworCWludCBraW5kID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlyZXR1cm4ga2luZCA9PSBPQkpfQ09NTUlUOworfQorCitzdGF0aWMgaW50IGRpc2FtYmlndWF0ZV9jb21taXR0aXNoX29ubHkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgdm9pZCAqY2JfZGF0YV91bnVzZWQpCit7CisJc3RydWN0IG9iamVjdCAqb2JqOworCWludCBraW5kOworCisJa2luZCA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJaWYgKGtpbmQgPT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIDE7CisJaWYgKGtpbmQgIT0gT0JKX1RBRykKKwkJcmV0dXJuIDA7CisKKwkvKiBXZSBuZWVkIHRvIGRvIHRoaXMgdGhlIGhhcmQgd2F5Li4uICovCisJb2JqID0gZGVyZWZfdGFnKHBhcnNlX29iamVjdChzaGExKSwgTlVMTCwgMCk7CisJaWYgKG9iaiAmJiBvYmotPnR5cGUgPT0gT0JKX0NPTU1JVCkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzYW1iaWd1YXRlX3RyZWVfb25seShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpjYl9kYXRhX3VudXNlZCkKK3sKKwlpbnQga2luZCA9IHNoYTFfb2JqZWN0X2luZm8oc2hhMSwgTlVMTCk7CisJcmV0dXJuIGtpbmQgPT0gT0JKX1RSRUU7Cit9CisKK3N0YXRpYyBpbnQgZGlzYW1iaWd1YXRlX3RyZWVpc2hfb25seShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCB2b2lkICpjYl9kYXRhX3VudXNlZCkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvYmo7CisJaW50IGtpbmQ7CisKKwlraW5kID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlpZiAoa2luZCA9PSBPQkpfVFJFRSB8fCBraW5kID09IE9CSl9DT01NSVQpCisJCXJldHVybiAxOworCWlmIChraW5kICE9IE9CSl9UQUcpCisJCXJldHVybiAwOworCisJLyogV2UgbmVlZCB0byBkbyB0aGlzIHRoZSBoYXJkIHdheS4uLiAqLworCW9iaiA9IGRlcmVmX3RhZyhsb29rdXBfb2JqZWN0KHNoYTEpLCBOVUxMLCAwKTsKKwlpZiAob2JqICYmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUgfHwgb2JqLT50eXBlID09IE9CSl9DT01NSVQpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNhbWJpZ3VhdGVfYmxvYl9vbmx5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsIHZvaWQgKmNiX2RhdGFfdW51c2VkKQoreworCWludCBraW5kID0gc2hhMV9vYmplY3RfaW5mbyhzaGExLCBOVUxMKTsKKwlyZXR1cm4ga2luZCA9PSBPQkpfQkxPQjsKK30KKworc3RhdGljIGludCBwcmVwYXJlX3ByZWZpeGVzKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sCisJCQkgICAgdW5zaWduZWQgY2hhciAqYmluX3BmeCwKKwkJCSAgICBjaGFyICpoZXhfcGZ4KQoreworCWludCBpOworCisJaGFzaGNscihiaW5fcGZ4KTsKKwltZW1zZXQoaGV4X3BmeCwgJ3gnLCA0MCk7CisJZm9yIChpID0gMDsgaSA8IGxlbiA7aSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9IG5hbWVbaV07CisJCXVuc2lnbmVkIGNoYXIgdmFsOworCQlpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpCisJCQl2YWwgPSBjIC0gJzAnOworCQllbHNlIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKKwkJCXZhbCA9IGMgLSAnYScgKyAxMDsKKwkJZWxzZSBpZiAoYyA+PSAnQScgJiYgYyA8PSdGJykgeworCQkJdmFsID0gYyAtICdBJyArIDEwOworCQkJYyAtPSAnQScgLSAnYSc7CisJCX0KKwkJZWxzZQorCQkJcmV0dXJuIC0xOworCQloZXhfcGZ4W2ldID0gYzsKKwkJaWYgKCEoaSAmIDEpKQorCQkJdmFsIDw8PSA0OworCQliaW5fcGZ4W2kgPj4gMV0gfD0gdmFsOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZXRfc2hvcnRfc2hhMShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgc3RhdHVzOworCWNoYXIgaGV4X3BmeFs0MF07CisJdW5zaWduZWQgY2hhciBiaW5fcGZ4WzIwXTsKKwlzdHJ1Y3QgZGlzYW1iaWd1YXRlX3N0YXRlIGRzOworCWludCBxdWlldGx5ID0gISEoZmxhZ3MgJiBHRVRfU0hBMV9RVUlFVExZKTsKKworCWlmIChsZW4gPCBNSU5JTVVNX0FCQlJFViB8fCBsZW4gPiA0MCkKKwkJcmV0dXJuIC0xOworCWlmIChwcmVwYXJlX3ByZWZpeGVzKG5hbWUsIGxlbiwgYmluX3BmeCwgaGV4X3BmeCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlwcmVwYXJlX2FsdF9vZGIoKTsKKworCW1lbXNldCgmZHMsIDAsIHNpemVvZihkcykpOworCWlmIChmbGFncyAmIEdFVF9TSEExX0NPTU1JVCkKKwkJZHMuZm4gPSBkaXNhbWJpZ3VhdGVfY29tbWl0X29ubHk7CisJZWxzZSBpZiAoZmxhZ3MgJiBHRVRfU0hBMV9DT01NSVRUSVNIKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV9jb21taXR0aXNoX29ubHk7CisJZWxzZSBpZiAoZmxhZ3MgJiBHRVRfU0hBMV9UUkVFKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV90cmVlX29ubHk7CisJZWxzZSBpZiAoZmxhZ3MgJiBHRVRfU0hBMV9UUkVFSVNIKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV90cmVlaXNoX29ubHk7CisJZWxzZSBpZiAoZmxhZ3MgJiBHRVRfU0hBMV9CTE9CKQorCQlkcy5mbiA9IGRpc2FtYmlndWF0ZV9ibG9iX29ubHk7CisKKwlmaW5kX3Nob3J0X29iamVjdF9maWxlbmFtZShsZW4sIGhleF9wZngsICZkcyk7CisJZmluZF9zaG9ydF9wYWNrZWRfb2JqZWN0KGxlbiwgYmluX3BmeCwgJmRzKTsKKwlzdGF0dXMgPSBmaW5pc2hfb2JqZWN0X2Rpc2FtYmlndWF0aW9uKCZkcywgc2hhMSk7CisKKwlpZiAoIXF1aWV0bHkgJiYgKHN0YXR1cyA9PSBTSE9SVF9OQU1FX0FNQklHVU9VUykpCisJCXJldHVybiBlcnJvcigic2hvcnQgU0hBMSAlLipzIGlzIGFtYmlndW91cy4iLCBsZW4sIGhleF9wZngpOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCBmb3JfZWFjaF9hYmJyZXYoY29uc3QgY2hhciAqcHJlZml4LCBlYWNoX2FiYnJldl9mbiBmbiwgdm9pZCAqY2JfZGF0YSkKK3sKKwljaGFyIGhleF9wZnhbNDBdOworCXVuc2lnbmVkIGNoYXIgYmluX3BmeFsyMF07CisJc3RydWN0IGRpc2FtYmlndWF0ZV9zdGF0ZSBkczsKKwlpbnQgbGVuID0gc3RybGVuKHByZWZpeCk7CisKKwlpZiAobGVuIDwgTUlOSU1VTV9BQkJSRVYgfHwgbGVuID4gNDApCisJCXJldHVybiAtMTsKKwlpZiAocHJlcGFyZV9wcmVmaXhlcyhwcmVmaXgsIGxlbiwgYmluX3BmeCwgaGV4X3BmeCkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlwcmVwYXJlX2FsdF9vZGIoKTsKKworCW1lbXNldCgmZHMsIDAsIHNpemVvZihkcykpOworCWRzLmFsd2F5c19jYWxsX2ZuID0gMTsKKwlkcy5jYl9kYXRhID0gY2JfZGF0YTsKKwlkcy5mbiA9IGZuOworCisJZmluZF9zaG9ydF9vYmplY3RfZmlsZW5hbWUobGVuLCBoZXhfcGZ4LCAmZHMpOworCWZpbmRfc2hvcnRfcGFja2VkX29iamVjdChsZW4sIGJpbl9wZngsICZkcyk7CisJcmV0dXJuIGRzLmFtYmlndW91czsKK30KKworaW50IGZpbmRfdW5pcXVlX2FiYnJldl9yKGNoYXIgKmhleCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgaW50IGxlbikKK3sKKwlpbnQgc3RhdHVzLCBleGlzdHM7CisKKwlzaGExX3RvX2hleF9yKGhleCwgc2hhMSk7CisJaWYgKGxlbiA9PSA0MCB8fCAhbGVuKQorCQlyZXR1cm4gNDA7CisJZXhpc3RzID0gaGFzX3NoYTFfZmlsZShzaGExKTsKKwl3aGlsZSAobGVuIDwgNDApIHsKKwkJdW5zaWduZWQgY2hhciBzaGExX3JldFsyMF07CisJCXN0YXR1cyA9IGdldF9zaG9ydF9zaGExKGhleCwgbGVuLCBzaGExX3JldCwgR0VUX1NIQTFfUVVJRVRMWSk7CisJCWlmIChleGlzdHMKKwkJICAgID8gIXN0YXR1cworCQkgICAgOiBzdGF0dXMgPT0gU0hPUlRfTkFNRV9OT1RfRk9VTkQpIHsKKwkJCWhleFtsZW5dID0gMDsKKwkJCXJldHVybiBsZW47CisJCX0KKwkJbGVuKys7CisJfQorCXJldHVybiBsZW47Cit9CisKK2NvbnN0IGNoYXIgKmZpbmRfdW5pcXVlX2FiYnJldihjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBpbnQgbGVuKQoreworCXN0YXRpYyBjaGFyIGhleFtHSVRfU0hBMV9IRVhTWiArIDFdOworCWZpbmRfdW5pcXVlX2FiYnJldl9yKGhleCwgc2hhMSwgbGVuKTsKKwlyZXR1cm4gaGV4OworfQorCitzdGF0aWMgaW50IGFtYmlndW91c19wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGludCBsZW4pCit7CisJaW50IHNsYXNoID0gMTsKKwlpbnQgY250OworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBsZW47IGNudCsrKSB7CisJCXN3aXRjaCAoKnBhdGgrKykgeworCQljYXNlICdcMCc6CisJCQlicmVhazsKKwkJY2FzZSAnLyc6CisJCQlpZiAoc2xhc2gpCisJCQkJYnJlYWs7CisJCQlzbGFzaCA9IDE7CisJCQljb250aW51ZTsKKwkJY2FzZSAnLic6CisJCQljb250aW51ZTsKKwkJZGVmYXVsdDoKKwkJCXNsYXNoID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc2xhc2g7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0X21hcmsoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbGVuLAorCQkJICBjb25zdCBjaGFyICoqc3VmZml4LCBpbnQgbnIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlpbnQgc3VmZml4X2xlbiA9IHN0cmxlbihzdWZmaXhbaV0pOworCQlpZiAoc3VmZml4X2xlbiA8PSBsZW4KKwkJICAgICYmICFtZW1jbXAoc3RyaW5nLCBzdWZmaXhbaV0sIHN1ZmZpeF9sZW4pKQorCQkJcmV0dXJuIHN1ZmZpeF9sZW47CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB1cHN0cmVhbV9tYXJrKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxlbikKK3sKKwljb25zdCBjaGFyICpzdWZmaXhbXSA9IHsgIkB7dXBzdHJlYW19IiwgIkB7dX0iIH07CisJcmV0dXJuIGF0X21hcmsoc3RyaW5nLCBsZW4sIHN1ZmZpeCwgQVJSQVlfU0laRShzdWZmaXgpKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHVzaF9tYXJrKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxlbikKK3sKKwljb25zdCBjaGFyICpzdWZmaXhbXSA9IHsgIkB7cHVzaH0iIH07CisJcmV0dXJuIGF0X21hcmsoc3RyaW5nLCBsZW4sIHN1ZmZpeCwgQVJSQVlfU0laRShzdWZmaXgpKTsKK30KKworc3RhdGljIGludCBnZXRfc2hhMV8xKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEsIHVuc2lnbmVkIGxvb2t1cF9mbGFncyk7CitzdGF0aWMgaW50IGludGVycHJldF9udGhfcHJpb3JfY2hlY2tvdXQoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIHN0cnVjdCBzdHJidWYgKmJ1Zik7CisKK3N0YXRpYyBpbnQgZ2V0X3NoYTFfYmFzaWMoY29uc3QgY2hhciAqc3RyLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKndhcm5fbXNnID0gInJlZm5hbWUgJyUuKnMnIGlzIGFtYmlndW91cy4iOworCXN0YXRpYyBjb25zdCBjaGFyICpvYmplY3RfbmFtZV9tc2cgPSBOXygKKwkiR2l0IG5vcm1hbGx5IG5ldmVyIGNyZWF0ZXMgYSByZWYgdGhhdCBlbmRzIHdpdGggNDAgaGV4IGNoYXJhY3RlcnNcbiIKKwkiYmVjYXVzZSBpdCB3aWxsIGJlIGlnbm9yZWQgd2hlbiB5b3UganVzdCBzcGVjaWZ5IDQwLWhleC4gVGhlc2UgcmVmc1xuIgorCSJtYXkgYmUgY3JlYXRlZCBieSBtaXN0YWtlLiBGb3IgZXhhbXBsZSxcbiIKKwkiXG4iCisJIiAgZ2l0IGNoZWNrb3V0IC1iICRiciAkKGdpdCByZXYtcGFyc2UgLi4uKVxuIgorCSJcbiIKKwkid2hlcmUgXCIkYnJcIiBpcyBzb21laG93IGVtcHR5IGFuZCBhIDQwLWhleCByZWYgaXMgY3JlYXRlZC4gUGxlYXNlXG4iCisJImV4YW1pbmUgdGhlc2UgcmVmcyBhbmQgbWF5YmUgZGVsZXRlIHRoZW0uIFR1cm4gdGhpcyBtZXNzYWdlIG9mZiBieVxuIgorCSJydW5uaW5nIFwiZ2l0IGNvbmZpZyBhZHZpY2Uub2JqZWN0TmFtZVdhcm5pbmcgZmFsc2VcIiIpOworCXVuc2lnbmVkIGNoYXIgdG1wX3NoYTFbMjBdOworCWNoYXIgKnJlYWxfcmVmID0gTlVMTDsKKwlpbnQgcmVmc19mb3VuZCA9IDA7CisJaW50IGF0LCByZWZsb2dfbGVuLCBudGhfcHJpb3IgPSAwOworCisJaWYgKGxlbiA9PSA0MCAmJiAhZ2V0X3NoYTFfaGV4KHN0ciwgc2hhMSkpIHsKKwkJaWYgKHdhcm5fYW1iaWd1b3VzX3JlZnMgJiYgd2Fybl9vbl9vYmplY3RfcmVmbmFtZV9hbWJpZ3VpdHkpIHsKKwkJCXJlZnNfZm91bmQgPSBkd2ltX3JlZihzdHIsIGxlbiwgdG1wX3NoYTEsICZyZWFsX3JlZik7CisJCQlpZiAocmVmc19mb3VuZCA+IDApIHsKKwkJCQl3YXJuaW5nKHdhcm5fbXNnLCBsZW4sIHN0cik7CisJCQkJaWYgKGFkdmljZV9vYmplY3RfbmFtZV93YXJuaW5nKQorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBfKG9iamVjdF9uYW1lX21zZykpOworCQkJfQorCQkJZnJlZShyZWFsX3JlZik7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJLyogYmFzaWNAe3RpbWUgb3IgbnVtYmVyIG9yIC1udW1iZXJ9IGZvcm1hdCB0byBxdWVyeSByZWYtbG9nICovCisJcmVmbG9nX2xlbiA9IGF0ID0gMDsKKwlpZiAobGVuICYmIHN0cltsZW4tMV0gPT0gJ30nKSB7CisJCWZvciAoYXQgPSBsZW4tNDsgYXQgPj0gMDsgYXQtLSkgeworCQkJaWYgKHN0clthdF0gPT0gJ0AnICYmIHN0clthdCsxXSA9PSAneycpIHsKKwkJCQlpZiAoc3RyW2F0KzJdID09ICctJykgeworCQkJCQlpZiAoYXQgIT0gMCkKKwkJCQkJCS8qIEB7LU59IG5vdCBhdCBzdGFydCAqLworCQkJCQkJcmV0dXJuIC0xOworCQkJCQludGhfcHJpb3IgPSAxOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKCF1cHN0cmVhbV9tYXJrKHN0ciArIGF0LCBsZW4gLSBhdCkgJiYKKwkJCQkgICAgIXB1c2hfbWFyayhzdHIgKyBhdCwgbGVuIC0gYXQpKSB7CisJCQkJCXJlZmxvZ19sZW4gPSAobGVuLTEpIC0gKGF0KzIpOworCQkJCQlsZW4gPSBhdDsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBBY2NlcHQgb25seSB1bmFtYmlndW91cyByZWYgcGF0aHMuICovCisJaWYgKGxlbiAmJiBhbWJpZ3VvdXNfcGF0aChzdHIsIGxlbikpCisJCXJldHVybiAtMTsKKworCWlmIChudGhfcHJpb3IpIHsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkJaW50IGRldGFjaGVkOworCisJCWlmIChpbnRlcnByZXRfbnRoX3ByaW9yX2NoZWNrb3V0KHN0ciwgbGVuLCAmYnVmKSA+IDApIHsKKwkJCWRldGFjaGVkID0gKGJ1Zi5sZW4gPT0gNDAgJiYgIWdldF9zaGExX2hleChidWYuYnVmLCBzaGExKSk7CisJCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJCWlmIChkZXRhY2hlZCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmICghbGVuICYmIHJlZmxvZ19sZW4pCisJCS8qIGFsbG93ICJAey4uLn0iIHRvIG1lYW4gdGhlIGN1cnJlbnQgYnJhbmNoIHJlZmxvZyAqLworCQlyZWZzX2ZvdW5kID0gZHdpbV9yZWYoIkhFQUQiLCA0LCBzaGExLCAmcmVhbF9yZWYpOworCWVsc2UgaWYgKHJlZmxvZ19sZW4pCisJCXJlZnNfZm91bmQgPSBkd2ltX2xvZyhzdHIsIGxlbiwgc2hhMSwgJnJlYWxfcmVmKTsKKwllbHNlCisJCXJlZnNfZm91bmQgPSBkd2ltX3JlZihzdHIsIGxlbiwgc2hhMSwgJnJlYWxfcmVmKTsKKworCWlmICghcmVmc19mb3VuZCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHdhcm5fYW1iaWd1b3VzX3JlZnMgJiYgIShmbGFncyAmIEdFVF9TSEExX1FVSUVUTFkpICYmCisJICAgIChyZWZzX2ZvdW5kID4gMSB8fAorCSAgICAgIWdldF9zaG9ydF9zaGExKHN0ciwgbGVuLCB0bXBfc2hhMSwgR0VUX1NIQTFfUVVJRVRMWSkpKQorCQl3YXJuaW5nKHdhcm5fbXNnLCBsZW4sIHN0cik7CisKKwlpZiAocmVmbG9nX2xlbikgeworCQlpbnQgbnRoLCBpOworCQl1bnNpZ25lZCBsb25nIGF0X3RpbWU7CisJCXVuc2lnbmVkIGxvbmcgY29fdGltZTsKKwkJaW50IGNvX3R6LCBjb19jbnQ7CisKKwkJLyogSXMgaXQgYXNraW5nIGZvciBOLXRoIGVudHJ5LCBvciBhcHByb3hpZGF0ZT8gKi8KKwkJZm9yIChpID0gbnRoID0gMDsgMCA8PSBudGggJiYgaSA8IHJlZmxvZ19sZW47IGkrKykgeworCQkJY2hhciBjaCA9IHN0clthdCsyK2ldOworCQkJaWYgKCcwJyA8PSBjaCAmJiBjaCA8PSAnOScpCisJCQkJbnRoID0gbnRoICogMTAgKyBjaCAtICcwJzsKKwkJCWVsc2UKKwkJCQludGggPSAtMTsKKwkJfQorCQlpZiAoMTAwMDAwMDAwIDw9IG50aCkgeworCQkJYXRfdGltZSA9IG50aDsKKwkJCW50aCA9IC0xOworCQl9IGVsc2UgaWYgKDAgPD0gbnRoKQorCQkJYXRfdGltZSA9IDA7CisJCWVsc2UgeworCQkJaW50IGVycm9ycyA9IDA7CisJCQljaGFyICp0bXAgPSB4c3RybmR1cChzdHIgKyBhdCArIDIsIHJlZmxvZ19sZW4pOworCQkJYXRfdGltZSA9IGFwcHJveGlkYXRlX2NhcmVmdWwodG1wLCAmZXJyb3JzKTsKKwkJCWZyZWUodG1wKTsKKwkJCWlmIChlcnJvcnMpIHsKKwkJCQlmcmVlKHJlYWxfcmVmKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJaWYgKHJlYWRfcmVmX2F0KHJlYWxfcmVmLCBmbGFncywgYXRfdGltZSwgbnRoLCBzaGExLCBOVUxMLAorCQkJCSZjb190aW1lLCAmY29fdHosICZjb19jbnQpKSB7CisJCQlpZiAoIWxlbikgeworCQkJCWlmIChzdGFydHNfd2l0aChyZWFsX3JlZiwgInJlZnMvaGVhZHMvIikpIHsKKwkJCQkJc3RyID0gcmVhbF9yZWYgKyAxMTsKKwkJCQkJbGVuID0gc3RybGVuKHJlYWxfcmVmICsgMTEpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIGRldGFjaGVkIEhFQUQgKi8KKwkJCQkJc3RyID0gIkhFQUQiOworCQkJCQlsZW4gPSA0OworCQkJCX0KKwkJCX0KKwkJCWlmIChhdF90aW1lKSB7CisJCQkJaWYgKCEoZmxhZ3MgJiBHRVRfU0hBMV9RVUlFVExZKSkgeworCQkJCQl3YXJuaW5nKCJMb2cgZm9yICclLipzJyBvbmx5IGdvZXMgIgorCQkJCQkJImJhY2sgdG8gJXMuIiwgbGVuLCBzdHIsCisJCQkJCQlzaG93X2RhdGUoY29fdGltZSwgY29fdHosIERBVEVfTU9ERShSRkMyODIyKSkpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGZsYWdzICYgR0VUX1NIQTFfUVVJRVRMWSkgeworCQkJCQlleGl0KDEyOCk7CisJCQkJfQorCQkJCWRpZSgiTG9nIGZvciAnJS4qcycgb25seSBoYXMgJWQgZW50cmllcy4iLAorCQkJCSAgICBsZW4sIHN0ciwgY29fY250KTsKKwkJCX0KKwkJfQorCX0KKworCWZyZWUocmVhbF9yZWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9wYXJlbnQoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqcmVzdWx0LCBpbnQgaWR4KQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJaW50IHJldCA9IGdldF9zaGExXzEobmFtZSwgbGVuLCBzaGExLCBHRVRfU0hBMV9DT01NSVRUSVNIKTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkpCisJCXJldHVybiAtMTsKKwlpZiAoIWlkeCkgeworCQloYXNoY3B5KHJlc3VsdCwgY29tbWl0LT5vYmplY3Quc2hhMSk7CisJCXJldHVybiAwOworCX0KKwlwID0gY29tbWl0LT5wYXJlbnRzOworCXdoaWxlIChwKSB7CisJCWlmICghLS1pZHgpIHsKKwkJCWhhc2hjcHkocmVzdWx0LCBwLT5pdGVtLT5vYmplY3Quc2hhMSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlwID0gcC0+bmV4dDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGdldF9udGhfYW5jZXN0b3IoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJCSAgICB1bnNpZ25lZCBjaGFyICpyZXN1bHQsIGludCBnZW5lcmF0aW9uKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWludCByZXQ7CisKKwlyZXQgPSBnZXRfc2hhMV8xKG5hbWUsIGxlbiwgc2hhMSwgR0VUX1NIQTFfQ09NTUlUVElTSCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwljb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKTsKKwlpZiAoIWNvbW1pdCkKKwkJcmV0dXJuIC0xOworCisJd2hpbGUgKGdlbmVyYXRpb24tLSkgeworCQlpZiAocGFyc2VfY29tbWl0KGNvbW1pdCkgfHwgIWNvbW1pdC0+cGFyZW50cykKKwkJCXJldHVybiAtMTsKKwkJY29tbWl0ID0gY29tbWl0LT5wYXJlbnRzLT5pdGVtOworCX0KKwloYXNoY3B5KHJlc3VsdCwgY29tbWl0LT5vYmplY3Quc2hhMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBvYmplY3QgKnBlZWxfdG9fdHlwZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJCSAgICBzdHJ1Y3Qgb2JqZWN0ICpvLCBlbnVtIG9iamVjdF90eXBlIGV4cGVjdGVkX3R5cGUpCit7CisJaWYgKG5hbWUgJiYgIW5hbWVsZW4pCisJCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisJd2hpbGUgKDEpIHsKKwkJaWYgKCFvIHx8ICghby0+cGFyc2VkICYmICFwYXJzZV9vYmplY3Qoby0+c2hhMSkpKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChleHBlY3RlZF90eXBlID09IE9CSl9BTlkgfHwgby0+dHlwZSA9PSBleHBlY3RlZF90eXBlKQorCQkJcmV0dXJuIG87CisJCWlmIChvLT50eXBlID09IE9CSl9UQUcpCisJCQlvID0gKChzdHJ1Y3QgdGFnKikgbyktPnRhZ2dlZDsKKwkJZWxzZSBpZiAoby0+dHlwZSA9PSBPQkpfQ09NTUlUKQorCQkJbyA9ICYoKChzdHJ1Y3QgY29tbWl0ICopIG8pLT50cmVlLT5vYmplY3QpOworCQllbHNlIHsKKwkJCWlmIChuYW1lKQorCQkJCWVycm9yKCIlLipzOiBleHBlY3RlZCAlcyB0eXBlLCBidXQgdGhlIG9iamVjdCAiCisJCQkJICAgICAgImRlcmVmZXJlbmNlcyB0byAlcyB0eXBlIiwKKwkJCQkgICAgICBuYW1lbGVuLCBuYW1lLCB0eXBlbmFtZShleHBlY3RlZF90eXBlKSwKKwkJCQkgICAgICB0eXBlbmFtZShvLT50eXBlKSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBwZWVsX29uaW9uKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgY2hhciBvdXRlclsyMF07CisJY29uc3QgY2hhciAqc3A7CisJdW5zaWduZWQgaW50IGV4cGVjdGVkX3R5cGUgPSAwOworCXVuc2lnbmVkIGxvb2t1cF9mbGFncyA9IDA7CisJc3RydWN0IG9iamVjdCAqbzsKKworCS8qCisJICogInJlZl57dHlwZX0iIGRlcmVmZXJlbmNlcyByZWYgcmVwZWF0ZWRseSB1bnRpbCB5b3UgY2Fubm90CisJICogZGVyZWZlcmVuY2UgYW55bW9yZSwgb3IgeW91IGdldCBhbiBvYmplY3Qgb2YgZ2l2ZW4gdHlwZSwKKwkgKiB3aGljaGV2ZXIgY29tZXMgZmlyc3QuICAicmVmXnt9IiBtZWFucyBqdXN0IGRlcmVmZXJlbmNlCisJICogdGFncyB1bnRpbCB5b3UgZ2V0IGEgbm9uLXRhZy4gICJyZWZeMCIgaXMgYSBzaG9ydGhhbmQgZm9yCisJICogInJlZl57Y29tbWl0fSIuICAiY29tbWl0Xnt0cmVlfSIgY291bGQgYmUgdXNlZCB0byBmaW5kIHRoZQorCSAqIHRvcC1sZXZlbCB0cmVlIG9mIHRoZSBnaXZlbiBjb21taXQuCisJICovCisJaWYgKGxlbiA8IDQgfHwgbmFtZVtsZW4tMV0gIT0gJ30nKQorCQlyZXR1cm4gLTE7CisKKwlmb3IgKHNwID0gbmFtZSArIGxlbiAtIDE7IG5hbWUgPD0gc3A7IHNwLS0pIHsKKwkJaW50IGNoID0gKnNwOworCQlpZiAoY2ggPT0gJ3snICYmIG5hbWUgPCBzcCAmJiBzcFstMV0gPT0gJ14nKQorCQkJYnJlYWs7CisJfQorCWlmIChzcCA8PSBuYW1lKQorCQlyZXR1cm4gLTE7CisKKwlzcCsrOyAvKiBiZWdpbm5pbmcgb2YgdHlwZSBuYW1lLCBvciBjbG9zaW5nIGJyYWNlIGZvciBlbXB0eSAqLworCWlmIChzdGFydHNfd2l0aChzcCwgImNvbW1pdH0iKSkKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9DT01NSVQ7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc3AsICJ0YWd9IikpCisJCWV4cGVjdGVkX3R5cGUgPSBPQkpfVEFHOworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNwLCAidHJlZX0iKSkKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9UUkVFOworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNwLCAiYmxvYn0iKSkKKwkJZXhwZWN0ZWRfdHlwZSA9IE9CSl9CTE9COworCWVsc2UgaWYgKHN0YXJ0c193aXRoKHNwLCAib2JqZWN0fSIpKQorCQlleHBlY3RlZF90eXBlID0gT0JKX0FOWTsKKwllbHNlIGlmIChzcFswXSA9PSAnfScpCisJCWV4cGVjdGVkX3R5cGUgPSBPQkpfTk9ORTsKKwllbHNlIGlmIChzcFswXSA9PSAnLycpCisJCWV4cGVjdGVkX3R5cGUgPSBPQkpfQ09NTUlUOworCWVsc2UKKwkJcmV0dXJuIC0xOworCisJaWYgKGV4cGVjdGVkX3R5cGUgPT0gT0JKX0NPTU1JVCkKKwkJbG9va3VwX2ZsYWdzID0gR0VUX1NIQTFfQ09NTUlUVElTSDsKKwllbHNlIGlmIChleHBlY3RlZF90eXBlID09IE9CSl9UUkVFKQorCQlsb29rdXBfZmxhZ3MgPSBHRVRfU0hBMV9UUkVFSVNIOworCisJaWYgKGdldF9zaGExXzEobmFtZSwgc3AgLSBuYW1lIC0gMiwgb3V0ZXIsIGxvb2t1cF9mbGFncykpCisJCXJldHVybiAtMTsKKworCW8gPSBwYXJzZV9vYmplY3Qob3V0ZXIpOworCWlmICghbykKKwkJcmV0dXJuIC0xOworCWlmICghZXhwZWN0ZWRfdHlwZSkgeworCQlvID0gZGVyZWZfdGFnKG8sIG5hbWUsIHNwIC0gbmFtZSAtIDIpOworCQlpZiAoIW8gfHwgKCFvLT5wYXJzZWQgJiYgIXBhcnNlX29iamVjdChvLT5zaGExKSkpCisJCQlyZXR1cm4gLTE7CisJCWhhc2hjcHkoc2hhMSwgby0+c2hhMSk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogQXQgdGhpcyBwb2ludCwgdGhlIHN5bnRheCBsb29rIGNvcnJlY3QsIHNvCisJICogaWYgd2UgZG8gbm90IGdldCB0aGUgbmVlZGVkIG9iamVjdCwgd2Ugc2hvdWxkCisJICogYmFyZi4KKwkgKi8KKwlvID0gcGVlbF90b190eXBlKG5hbWUsIGxlbiwgbywgZXhwZWN0ZWRfdHlwZSk7CisJaWYgKCFvKQorCQlyZXR1cm4gLTE7CisKKwloYXNoY3B5KHNoYTEsIG8tPnNoYTEpOworCWlmIChzcFswXSA9PSAnLycpIHsKKwkJLyogIiRjb21taXReey9mb299IiAqLworCQljaGFyICpwcmVmaXg7CisJCWludCByZXQ7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqbGlzdCA9IE5VTEw7CisKKwkJLyoKKwkJICogJGNvbW1pdF57L30uIFNvbWUgcmVnZXggaW1wbGVtZW50YXRpb24gbWF5IHJlamVjdC4KKwkJICogV2UgZG9uJ3QgbmVlZCByZWdleCBhbnl3YXkuICcnIHBhdHRlcm4gYWx3YXlzIG1hdGNoZXMuCisJCSAqLworCQlpZiAoc3BbMV0gPT0gJ30nKQorCQkJcmV0dXJuIDA7CisKKwkJcHJlZml4ID0geHN0cm5kdXAoc3AgKyAxLCBuYW1lICsgbGVuIC0gMSAtIChzcCArIDEpKTsKKwkJY29tbWl0X2xpc3RfaW5zZXJ0KChzdHJ1Y3QgY29tbWl0ICopbywgJmxpc3QpOworCQlyZXQgPSBnZXRfc2hhMV9vbmVsaW5lKHByZWZpeCwgc2hhMSwgbGlzdCk7CisJCWZyZWUocHJlZml4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2Rlc2NyaWJlX25hbWUoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwljb25zdCBjaGFyICpjcDsKKwl1bnNpZ25lZCBmbGFncyA9IEdFVF9TSEExX1FVSUVUTFkgfCBHRVRfU0hBMV9DT01NSVQ7CisKKwlmb3IgKGNwID0gbmFtZSArIGxlbiAtIDE7IG5hbWUgKyAyIDw9IGNwOyBjcC0tKSB7CisJCWNoYXIgY2ggPSAqY3A7CisJCWlmICghaXN4ZGlnaXQoY2gpKSB7CisJCQkvKiBXZSBtdXN0IGJlIGxvb2tpbmcgYXQgZyBpbiAiU09NRVRISU5HLWciCisJCQkgKiBmb3IgaXQgdG8gYmUgZGVzY3JpYmUgb3V0cHV0LgorCQkJICovCisJCQlpZiAoY2ggPT0gJ2cnICYmIGNwWy0xXSA9PSAnLScpIHsKKwkJCQljcCsrOworCQkJCWxlbiAtPSBjcCAtIG5hbWU7CisJCQkJcmV0dXJuIGdldF9zaG9ydF9zaGExKGNwLCBsZW4sIHNoYTEsIGZsYWdzKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3NoYTFfMShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCBsb29rdXBfZmxhZ3MpCit7CisJaW50IHJldCwgaGFzX3N1ZmZpeDsKKwljb25zdCBjaGFyICpjcDsKKworCS8qCisJICogIm5hbWV+MyIgaXMgIm5hbWVeXl4iLCAibmFtZX4iIGlzICJuYW1lfjEiLCBhbmQgIm5hbWVeIiBpcyAibmFtZV4xIi4KKwkgKi8KKwloYXNfc3VmZml4ID0gMDsKKwlmb3IgKGNwID0gbmFtZSArIGxlbiAtIDE7IG5hbWUgPD0gY3A7IGNwLS0pIHsKKwkJaW50IGNoID0gKmNwOworCQlpZiAoJzAnIDw9IGNoICYmIGNoIDw9ICc5JykKKwkJCWNvbnRpbnVlOworCQlpZiAoY2ggPT0gJ34nIHx8IGNoID09ICdeJykKKwkJCWhhc19zdWZmaXggPSBjaDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGhhc19zdWZmaXgpIHsKKwkJaW50IG51bSA9IDA7CisJCWludCBsZW4xID0gY3AgLSBuYW1lOworCQljcCsrOworCQl3aGlsZSAoY3AgPCBuYW1lICsgbGVuKQorCQkJbnVtID0gbnVtICogMTAgKyAqY3ArKyAtICcwJzsKKwkJaWYgKCFudW0gJiYgbGVuMSA9PSBsZW4gLSAxKQorCQkJbnVtID0gMTsKKwkJaWYgKGhhc19zdWZmaXggPT0gJ14nKQorCQkJcmV0dXJuIGdldF9wYXJlbnQobmFtZSwgbGVuMSwgc2hhMSwgbnVtKTsKKwkJLyogZWxzZSBpZiAoaGFzX3N1ZmZpeCA9PSAnficpIC0tIGdvZXMgd2l0aG91dCBzYXlpbmcgKi8KKwkJcmV0dXJuIGdldF9udGhfYW5jZXN0b3IobmFtZSwgbGVuMSwgc2hhMSwgbnVtKTsKKwl9CisKKwlyZXQgPSBwZWVsX29uaW9uKG5hbWUsIGxlbiwgc2hhMSk7CisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisJcmV0ID0gZ2V0X3NoYTFfYmFzaWMobmFtZSwgbGVuLCBzaGExLCBsb29rdXBfZmxhZ3MpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCS8qIEl0IGNvdWxkIGJlIGRlc2NyaWJlIG91dHB1dCB0aGF0IGlzICJTT01FVEhJTkctZ1hYWFgiICovCisJcmV0ID0gZ2V0X2Rlc2NyaWJlX25hbWUobmFtZSwgbGVuLCBzaGExKTsKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gZ2V0X3Nob3J0X3NoYTEobmFtZSwgbGVuLCBzaGExLCBsb29rdXBfZmxhZ3MpOworfQorCisvKgorICogVGhpcyBpbnRlcnByZXRzIG5hbWVzIGxpa2UgJzovSW5pdGlhbCByZXZpc2lvbiBvZiAiZ2l0IicgYnkgc2VhcmNoaW5nCisgKiB0aHJvdWdoIGhpc3RvcnkgYW5kIHJldHVybmluZyB0aGUgZmlyc3QgY29tbWl0IHdob3NlIG1lc3NhZ2Ugc3RhcnRzCisgKiB0aGUgZ2l2ZW4gcmVndWxhciBleHByZXNzaW9uLgorICoKKyAqIEZvciBmdXR1cmUgZXh0ZW5zaW9uLCAnOi8hJyBpcyByZXNlcnZlZC4gSWYgeW91IHdhbnQgdG8gbWF0Y2ggYSBtZXNzYWdlCisgKiBiZWdpbm5pbmcgd2l0aCBhICchJywgeW91IGhhdmUgdG8gcmVwZWF0IHRoZSBleGNsYW1hdGlvbiBtYXJrLgorICovCisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIE9ORUxJTkVfU0VFTiAoMXU8PDIwKQorCitzdGF0aWMgaW50IGhhbmRsZV9vbmVfcmVmKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSAgaW50IGZsYWcsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICoqbGlzdCA9IGNiX2RhdGE7CisJc3RydWN0IG9iamVjdCAqb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KG9pZC0+aGFzaCk7CisJaWYgKCFvYmplY3QpCisJCXJldHVybiAwOworCWlmIChvYmplY3QtPnR5cGUgPT0gT0JKX1RBRykgeworCQlvYmplY3QgPSBkZXJlZl90YWcob2JqZWN0LCBwYXRoLCBzdHJsZW4ocGF0aCkpOworCQlpZiAoIW9iamVjdCkKKwkJCXJldHVybiAwOworCX0KKwlpZiAob2JqZWN0LT50eXBlICE9IE9CSl9DT01NSVQpCisJCXJldHVybiAwOworCWNvbW1pdF9saXN0X2luc2VydCgoc3RydWN0IGNvbW1pdCAqKW9iamVjdCwgbGlzdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3NoYTFfb25lbGluZShjb25zdCBjaGFyICpwcmVmaXgsIHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkgICAgc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqYmFja3VwID0gTlVMTCwgKmw7CisJaW50IGZvdW5kID0gMDsKKwlyZWdleF90IHJlZ2V4OworCisJaWYgKHByZWZpeFswXSA9PSAnIScpIHsKKwkJaWYgKHByZWZpeFsxXSAhPSAnIScpCisJCQlkaWUgKCJJbnZhbGlkIHNlYXJjaCBwYXR0ZXJuOiAlcyIsIHByZWZpeCk7CisJCXByZWZpeCsrOworCX0KKworCWlmIChyZWdjb21wKCZyZWdleCwgcHJlZml4LCBSRUdfRVhURU5ERUQpKQorCQlkaWUoIkludmFsaWQgc2VhcmNoIHBhdHRlcm46ICVzIiwgcHJlZml4KTsKKworCWZvciAobCA9IGxpc3Q7IGw7IGwgPSBsLT5uZXh0KSB7CisJCWwtPml0ZW0tPm9iamVjdC5mbGFncyB8PSBPTkVMSU5FX1NFRU47CisJCWNvbW1pdF9saXN0X2luc2VydChsLT5pdGVtLCAmYmFja3VwKTsKKwl9CisJd2hpbGUgKGxpc3QpIHsKKwkJY29uc3QgY2hhciAqcCwgKmJ1ZjsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCQlpbnQgbWF0Y2hlczsKKworCQljb21taXQgPSBwb3BfbW9zdF9yZWNlbnRfY29tbWl0KCZsaXN0LCBPTkVMSU5FX1NFRU4pOworCQlpZiAoIXBhcnNlX29iamVjdChjb21taXQtPm9iamVjdC5zaGExKSkKKwkJCWNvbnRpbnVlOworCQlidWYgPSBnZXRfY29tbWl0X2J1ZmZlcihjb21taXQsIE5VTEwpOworCQlwID0gc3Ryc3RyKGJ1ZiwgIlxuXG4iKTsKKwkJbWF0Y2hlcyA9IHAgJiYgIXJlZ2V4ZWMoJnJlZ2V4LCBwICsgMiwgMCwgTlVMTCwgMCk7CisJCXVudXNlX2NvbW1pdF9idWZmZXIoY29tbWl0LCBidWYpOworCisJCWlmIChtYXRjaGVzKSB7CisJCQloYXNoY3B5KHNoYTEsIGNvbW1pdC0+b2JqZWN0LnNoYTEpOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmVnZnJlZSgmcmVnZXgpOworCWZyZWVfY29tbWl0X2xpc3QobGlzdCk7CisJZm9yIChsID0gYmFja3VwOyBsOyBsID0gbC0+bmV4dCkKKwkJY2xlYXJfY29tbWl0X21hcmtzKGwtPml0ZW0sIE9ORUxJTkVfU0VFTik7CisJZnJlZV9jb21taXRfbGlzdChiYWNrdXApOworCXJldHVybiBmb3VuZCA/IDAgOiAtMTsKK30KKworc3RydWN0IGdyYWJfbnRoX2JyYW5jaF9zd2l0Y2hfY2JkYXRhIHsKKwlpbnQgcmVtYWluaW5nOworCXN0cnVjdCBzdHJidWYgYnVmOworfTsKKworc3RhdGljIGludCBncmFiX250aF9icmFuY2hfc3dpdGNoKHVuc2lnbmVkIGNoYXIgKm9zaGExLCB1bnNpZ25lZCBjaGFyICpuc2hhMSwKKwkJCQkgIGNvbnN0IGNoYXIgKmVtYWlsLCB1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCwgaW50IHR6LAorCQkJCSAgY29uc3QgY2hhciAqbWVzc2FnZSwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgZ3JhYl9udGhfYnJhbmNoX3N3aXRjaF9jYmRhdGEgKmNiID0gY2JfZGF0YTsKKwljb25zdCBjaGFyICptYXRjaCA9IE5VTEwsICp0YXJnZXQgPSBOVUxMOworCXNpemVfdCBsZW47CisKKwlpZiAoc2tpcF9wcmVmaXgobWVzc2FnZSwgImNoZWNrb3V0OiBtb3ZpbmcgZnJvbSAiLCAmbWF0Y2gpKQorCQl0YXJnZXQgPSBzdHJzdHIobWF0Y2gsICIgdG8gIik7CisKKwlpZiAoIW1hdGNoIHx8ICF0YXJnZXQpCisJCXJldHVybiAwOworCWlmICgtLShjYi0+cmVtYWluaW5nKSA9PSAwKSB7CisJCWxlbiA9IHRhcmdldCAtIG1hdGNoOworCQlzdHJidWZfcmVzZXQoJmNiLT5idWYpOworCQlzdHJidWZfYWRkKCZjYi0+YnVmLCBtYXRjaCwgbGVuKTsKKwkJcmV0dXJuIDE7IC8qIHdlIGFyZSBkb25lICovCisJfQorCXJldHVybiAwOworfQorCisvKgorICogUGFyc2UgQHstTn0gc3ludGF4LCByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBhcnNlZAorICogaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlIHNpZ25hbCBhbiBlcnJvciB3aXRoIG5lZ2F0aXZlIHZhbHVlLgorICovCitzdGF0aWMgaW50IGludGVycHJldF9udGhfcHJpb3JfY2hlY2tvdXQoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCQkJCXN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlsb25nIG50aDsKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBncmFiX250aF9icmFuY2hfc3dpdGNoX2NiZGF0YSBjYjsKKwljb25zdCBjaGFyICpicmFjZTsKKwljaGFyICpudW1fZW5kOworCisJaWYgKG5hbWVsZW4gPCA0KQorCQlyZXR1cm4gLTE7CisJaWYgKG5hbWVbMF0gIT0gJ0AnIHx8IG5hbWVbMV0gIT0gJ3snIHx8IG5hbWVbMl0gIT0gJy0nKQorCQlyZXR1cm4gLTE7CisJYnJhY2UgPSBtZW1jaHIobmFtZSwgJ30nLCBuYW1lbGVuKTsKKwlpZiAoIWJyYWNlKQorCQlyZXR1cm4gLTE7CisJbnRoID0gc3RydG9sKG5hbWUgKyAzLCAmbnVtX2VuZCwgMTApOworCWlmIChudW1fZW5kICE9IGJyYWNlKQorCQlyZXR1cm4gLTE7CisJaWYgKG50aCA8PSAwKQorCQlyZXR1cm4gLTE7CisJY2IucmVtYWluaW5nID0gbnRoOworCXN0cmJ1Zl9pbml0KCZjYi5idWYsIDIwKTsKKworCXJldHZhbCA9IDA7CisJaWYgKDAgPCBmb3JfZWFjaF9yZWZsb2dfZW50X3JldmVyc2UoIkhFQUQiLCBncmFiX250aF9icmFuY2hfc3dpdGNoLCAmY2IpKSB7CisJCXN0cmJ1Zl9yZXNldChidWYpOworCQlzdHJidWZfYWRkYnVmKGJ1ZiwgJmNiLmJ1Zik7CisJCXJldHZhbCA9IGJyYWNlIC0gbmFtZSArIDE7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmNiLmJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworaW50IGdldF9zaGExX21iKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGNvbW1pdCAqb25lLCAqdHdvOworCXN0cnVjdCBjb21taXRfbGlzdCAqbWJzOworCXVuc2lnbmVkIGNoYXIgc2hhMV90bXBbMjBdOworCWNvbnN0IGNoYXIgKmRvdHM7CisJaW50IHN0OworCisJZG90cyA9IHN0cnN0cihuYW1lLCAiLi4uIik7CisJaWYgKCFkb3RzKQorCQlyZXR1cm4gZ2V0X3NoYTEobmFtZSwgc2hhMSk7CisJaWYgKGRvdHMgPT0gbmFtZSkKKwkJc3QgPSBnZXRfc2hhMSgiSEVBRCIsIHNoYTFfdG1wKTsKKwllbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBzYjsKKwkJc3RyYnVmX2luaXQoJnNiLCBkb3RzIC0gbmFtZSk7CisJCXN0cmJ1Zl9hZGQoJnNiLCBuYW1lLCBkb3RzIC0gbmFtZSk7CisJCXN0ID0gZ2V0X3NoYTFfY29tbWl0dGlzaChzYi5idWYsIHNoYTFfdG1wKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwl9CisJaWYgKHN0KQorCQlyZXR1cm4gc3Q7CisJb25lID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KHNoYTFfdG1wLCAwKTsKKwlpZiAoIW9uZSkKKwkJcmV0dXJuIC0xOworCisJaWYgKGdldF9zaGExX2NvbW1pdHRpc2goZG90c1szXSA/IChkb3RzICsgMykgOiAiSEVBRCIsIHNoYTFfdG1wKSkKKwkJcmV0dXJuIC0xOworCXR3byA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShzaGExX3RtcCwgMCk7CisJaWYgKCF0d28pCisJCXJldHVybiAtMTsKKwltYnMgPSBnZXRfbWVyZ2VfYmFzZXMob25lLCB0d28pOworCWlmICghbWJzIHx8IG1icy0+bmV4dCkKKwkJc3QgPSAtMTsKKwllbHNlIHsKKwkJc3QgPSAwOworCQloYXNoY3B5KHNoYTEsIG1icy0+aXRlbS0+b2JqZWN0LnNoYTEpOworCX0KKwlmcmVlX2NvbW1pdF9saXN0KG1icyk7CisJcmV0dXJuIHN0OworfQorCisvKiBwYXJzZSBAc29tZXRoaW5nIHN5bnRheCwgd2hlbiAnc29tZXRoaW5nJyBpcyBub3Qgey4qfSAqLworc3RhdGljIGludCBpbnRlcnByZXRfZW1wdHlfYXQoY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGludCBsZW4sIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwljb25zdCBjaGFyICpuZXh0OworCisJaWYgKGxlbiB8fCBuYW1lWzFdID09ICd7JykKKwkJcmV0dXJuIC0xOworCisJLyogbWFrZSBzdXJlIGl0J3MgYSBzaW5nbGUgQCwgb3IgQEB7Lip9LCBub3QgQGZvbyAqLworCW5leHQgPSBtZW1jaHIobmFtZSArIGxlbiArIDEsICdAJywgbmFtZWxlbiAtIGxlbiAtIDEpOworCWlmIChuZXh0ICYmIG5leHRbMV0gIT0gJ3snKQorCQlyZXR1cm4gLTE7CisJaWYgKCFuZXh0KQorCQluZXh0ID0gbmFtZSArIG5hbWVsZW47CisJaWYgKG5leHQgIT0gbmFtZSArIDEpCisJCXJldHVybiAtMTsKKworCXN0cmJ1Zl9yZXNldChidWYpOworCXN0cmJ1Zl9hZGQoYnVmLCAiSEVBRCIsIDQpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJlaW50ZXJwcmV0KGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgbGVuLCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJLyogd2UgaGF2ZSBleHRyYSBkYXRhLCB3aGljaCBtaWdodCBuZWVkIGZ1cnRoZXIgcHJvY2Vzc2luZyAqLworCXN0cnVjdCBzdHJidWYgdG1wID0gU1RSQlVGX0lOSVQ7CisJaW50IHVzZWQgPSBidWYtPmxlbjsKKwlpbnQgcmV0OworCisJc3RyYnVmX2FkZChidWYsIG5hbWUgKyBsZW4sIG5hbWVsZW4gLSBsZW4pOworCXJldCA9IGludGVycHJldF9icmFuY2hfbmFtZShidWYtPmJ1ZiwgYnVmLT5sZW4sICZ0bXApOworCS8qIHRoYXQgZGF0YSB3YXMgbm90IGludGVycHJldGVkLCByZW1vdmUgb3VyIGNydWZ0ICovCisJaWYgKHJldCA8IDApIHsKKwkJc3RyYnVmX3NldGxlbihidWYsIHVzZWQpOworCQlyZXR1cm4gbGVuOworCX0KKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlzdHJidWZfYWRkYnVmKGJ1ZiwgJnRtcCk7CisJc3RyYnVmX3JlbGVhc2UoJnRtcCk7CisJLyogdHdlYWsgZm9yIHNpemUgb2Ygey1OfSB2ZXJzdXMgZXhwYW5kZWQgcmVmIG5hbWUgKi8KKwlyZXR1cm4gcmV0IC0gdXNlZCArIGxlbjsKK30KKworc3RhdGljIHZvaWQgc2V0X3Nob3J0ZW5lZF9yZWYoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICpyZWYpCit7CisJY2hhciAqcyA9IHNob3J0ZW5fdW5hbWJpZ3VvdXNfcmVmKHJlZiwgMCk7CisJc3RyYnVmX3Jlc2V0KGJ1Zik7CisJc3RyYnVmX2FkZHN0cihidWYsIHMpOworCWZyZWUocyk7Cit9CisKK3N0YXRpYyBpbnQgaW50ZXJwcmV0X2JyYW5jaF9tYXJrKGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJCSBpbnQgYXQsIHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCQkgaW50ICgqZ2V0X21hcmspKGNvbnN0IGNoYXIgKiwgaW50KSwKKwkJCQkgY29uc3QgY2hhciAqKCpnZXRfZGF0YSkoc3RydWN0IGJyYW5jaCAqLAorCQkJCQkJCSBzdHJ1Y3Qgc3RyYnVmICopKQoreworCWludCBsZW47CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoOworCXN0cnVjdCBzdHJidWYgZXJyID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqdmFsdWU7CisKKwlsZW4gPSBnZXRfbWFyayhuYW1lICsgYXQsIG5hbWVsZW4gLSBhdCk7CisJaWYgKCFsZW4pCisJCXJldHVybiAtMTsKKworCWlmIChtZW1jaHIobmFtZSwgJzonLCBhdCkpCisJCXJldHVybiAtMTsKKworCWlmIChhdCkgeworCQljaGFyICpuYW1lX3N0ciA9IHhtZW1kdXB6KG5hbWUsIGF0KTsKKwkJYnJhbmNoID0gYnJhbmNoX2dldChuYW1lX3N0cik7CisJCWZyZWUobmFtZV9zdHIpOworCX0gZWxzZQorCQlicmFuY2ggPSBicmFuY2hfZ2V0KE5VTEwpOworCisJdmFsdWUgPSBnZXRfZGF0YShicmFuY2gsICZlcnIpOworCWlmICghdmFsdWUpCisJCWRpZSgiJXMiLCBlcnIuYnVmKTsKKworCXNldF9zaG9ydGVuZWRfcmVmKGJ1ZiwgdmFsdWUpOworCXJldHVybiBsZW4gKyBhdDsKK30KKworLyoKKyAqIFRoaXMgcmVhZHMgc2hvcnQtaGFuZCBzeW50YXggdGhhdCBub3Qgb25seSBldmFsdWF0ZXMgdG8gYSBjb21taXQKKyAqIG9iamVjdCBuYW1lLCBidXQgYWxzbyBjYW4gYWN0IGFzIGlmIHRoZSBlbmQgdXNlciBzcGVsbGVkIHRoZSBuYW1lCisgKiBvZiB0aGUgYnJhbmNoIGZyb20gdGhlIGNvbW1hbmQgbGluZS4KKyAqCisgKiAtICJAey1OfSIgZmluZHMgdGhlIG5hbWUgb2YgdGhlIE50aCBwcmV2aW91cyBicmFuY2ggd2Ugd2VyZSBvbiwgYW5kCisgKiAgIHBsYWNlcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZSBnaXZlbiBidWYgYW5kIHJldHVybnMgdGhlCisgKiAgIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBhcnNlZCBpZiBzdWNjZXNzZnVsLgorICoKKyAqIC0gIjxicmFuY2g+QHt1cHN0cmVhbX0iIGZpbmRzIHRoZSBuYW1lIG9mIHRoZSBvdGhlciByZWYgdGhhdAorICogICA8YnJhbmNoPiBpcyBjb25maWd1cmVkIHRvIG1lcmdlIHdpdGggKG1pc3NpbmcgPGJyYW5jaD4gZGVmYXVsdHMKKyAqICAgdG8gdGhlIGN1cnJlbnQgYnJhbmNoKSwgYW5kIHBsYWNlcyB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIGluIHRoZQorICogICBnaXZlbiBidWYgYW5kIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBhcnNlZCBpZgorICogICBzdWNjZXNzZnVsLgorICoKKyAqIElmIHRoZSBpbnB1dCBpcyBub3Qgb2YgdGhlIGFjY2VwdGVkIGZvcm1hdCwgaXQgcmV0dXJucyBhIG5lZ2F0aXZlCisgKiBudW1iZXIgdG8gc2lnbmFsIGFuIGVycm9yLgorICoKKyAqIElmIHRoZSBpbnB1dCB3YXMgb2sgYnV0IHRoZXJlIGFyZSBub3QgTiBicmFuY2ggc3dpdGNoZXMgaW4gdGhlCisgKiByZWZsb2csIGl0IHJldHVybnMgMC4KKyAqLworaW50IGludGVycHJldF9icmFuY2hfbmFtZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgc3RydWN0IHN0cmJ1ZiAqYnVmKQoreworCWNoYXIgKmF0OworCWNvbnN0IGNoYXIgKnN0YXJ0OworCWludCBsZW4gPSBpbnRlcnByZXRfbnRoX3ByaW9yX2NoZWNrb3V0KG5hbWUsIG5hbWVsZW4sIGJ1Zik7CisKKwlpZiAoIW5hbWVsZW4pCisJCW5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisKKwlpZiAoIWxlbikgeworCQlyZXR1cm4gbGVuOyAvKiBzeW50YXggT2ssIG5vdCBlbm91Z2ggc3dpdGNoZXMgKi8KKwl9IGVsc2UgaWYgKGxlbiA+IDApIHsKKwkJaWYgKGxlbiA9PSBuYW1lbGVuKQorCQkJcmV0dXJuIGxlbjsgLyogY29uc3VtZWQgYWxsICovCisJCWVsc2UKKwkJCXJldHVybiByZWludGVycHJldChuYW1lLCBuYW1lbGVuLCBsZW4sIGJ1Zik7CisJfQorCisJZm9yIChzdGFydCA9IG5hbWU7CisJICAgICAoYXQgPSBtZW1jaHIoc3RhcnQsICdAJywgbmFtZWxlbiAtIChzdGFydCAtIG5hbWUpKSk7CisJICAgICBzdGFydCA9IGF0ICsgMSkgeworCisJCWxlbiA9IGludGVycHJldF9lbXB0eV9hdChuYW1lLCBuYW1lbGVuLCBhdCAtIG5hbWUsIGJ1Zik7CisJCWlmIChsZW4gPiAwKQorCQkJcmV0dXJuIHJlaW50ZXJwcmV0KG5hbWUsIG5hbWVsZW4sIGxlbiwgYnVmKTsKKworCQlsZW4gPSBpbnRlcnByZXRfYnJhbmNoX21hcmsobmFtZSwgbmFtZWxlbiwgYXQgLSBuYW1lLCBidWYsCisJCQkJCSAgICB1cHN0cmVhbV9tYXJrLCBicmFuY2hfZ2V0X3Vwc3RyZWFtKTsKKwkJaWYgKGxlbiA+IDApCisJCQlyZXR1cm4gbGVuOworCisJCWxlbiA9IGludGVycHJldF9icmFuY2hfbWFyayhuYW1lLCBuYW1lbGVuLCBhdCAtIG5hbWUsIGJ1ZiwKKwkJCQkJICAgIHB1c2hfbWFyaywgYnJhbmNoX2dldF9wdXNoKTsKKwkJaWYgKGxlbiA+IDApCisJCQlyZXR1cm4gbGVuOworCX0KKworCXJldHVybiAtMTsKK30KKworaW50IHN0cmJ1Zl9icmFuY2huYW1lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpuYW1lKQoreworCWludCBsZW4gPSBzdHJsZW4obmFtZSk7CisJaW50IHVzZWQgPSBpbnRlcnByZXRfYnJhbmNoX25hbWUobmFtZSwgbGVuLCBzYik7CisKKwlpZiAodXNlZCA9PSBsZW4pCisJCXJldHVybiAwOworCWlmICh1c2VkIDwgMCkKKwkJdXNlZCA9IDA7CisJc3RyYnVmX2FkZChzYiwgbmFtZSArIHVzZWQsIGxlbiAtIHVzZWQpOworCXJldHVybiBsZW47Cit9CisKK2ludCBzdHJidWZfY2hlY2tfYnJhbmNoX3JlZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJidWZfYnJhbmNobmFtZShzYiwgbmFtZSk7CisJaWYgKG5hbWVbMF0gPT0gJy0nKQorCQlyZXR1cm4gLTE7CisJc3RyYnVmX3NwbGljZShzYiwgMCwgMCwgInJlZnMvaGVhZHMvIiwgMTEpOworCXJldHVybiBjaGVja19yZWZuYW1lX2Zvcm1hdChzYi0+YnVmLCAwKTsKK30KKworLyoKKyAqIFRoaXMgaXMgbGlrZSAiZ2V0X3NoYTFfYmFzaWMoKSIsIGV4Y2VwdCBpdCBhbGxvd3MgInNoYTEgZXhwcmVzc2lvbnMiLAorICogbm90YWJseSAieHl6XiIgZm9yICJwYXJlbnQgb2YgeHl6IgorICovCitpbnQgZ2V0X3NoYTEoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgdW51c2VkOworCXJldHVybiBnZXRfc2hhMV93aXRoX2NvbnRleHQobmFtZSwgMCwgc2hhMSwgJnVudXNlZCk7Cit9CisKKy8qCisgKiBNYW55IGNhbGxlcnMga25vdyB0aGF0IHRoZSB1c2VyIG1lYW50IHRvIG5hbWUgYSBjb21taXQtaXNoIGJ5CisgKiBzeW50YWN0aWNhbCBwb3NpdGlvbnMgd2hlcmUgdGhlIG9iamVjdCBuYW1lIGFwcGVhcnMuICBDYWxsaW5nIHRoaXMKKyAqIGZ1bmN0aW9uIGFsbG93cyB0aGUgbWFjaGluZXJ5IHRvIGRpc2FtYmlndWF0ZSBzaG9ydGVyLXRoYW4tdW5pcXVlCisgKiBhYmJyZXZpYXRlZCBvYmplY3QgbmFtZXMgYmV0d2VlbiBjb21taXQtaXNoIGFuZCBvdGhlcnMuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZG9lcyBOT1QgZXJyb3Igb3V0IHdoZW4gdGhlIG5hbWVkIG9iamVjdCBpcyBub3QgYQorICogY29tbWl0LWlzaC4gSXQgaXMgbWVyZWx5IHRvIGdpdmUgYSBoaW50IHRvIHRoZSBkaXNhbWJpZ3VhdGlvbgorICogbWFjaGluZXJ5LgorICovCitpbnQgZ2V0X3NoYTFfY29tbWl0dGlzaChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisJcmV0dXJuIGdldF9zaGExX3dpdGhfY29udGV4dChuYW1lLCBHRVRfU0hBMV9DT01NSVRUSVNILAorCQkJCSAgICAgc2hhMSwgJnVudXNlZCk7Cit9CisKK2ludCBnZXRfc2hhMV90cmVlaXNoKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IHVudXNlZDsKKwlyZXR1cm4gZ2V0X3NoYTFfd2l0aF9jb250ZXh0KG5hbWUsIEdFVF9TSEExX1RSRUVJU0gsCisJCQkJICAgICBzaGExLCAmdW51c2VkKTsKK30KKworaW50IGdldF9zaGExX2NvbW1pdChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisJcmV0dXJuIGdldF9zaGExX3dpdGhfY29udGV4dChuYW1lLCBHRVRfU0hBMV9DT01NSVQsCisJCQkJICAgICBzaGExLCAmdW51c2VkKTsKK30KKworaW50IGdldF9zaGExX3RyZWUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgdW51c2VkOworCXJldHVybiBnZXRfc2hhMV93aXRoX2NvbnRleHQobmFtZSwgR0VUX1NIQTFfVFJFRSwKKwkJCQkgICAgIHNoYTEsICZ1bnVzZWQpOworfQorCitpbnQgZ2V0X3NoYTFfYmxvYihjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3RfY29udGV4dCB1bnVzZWQ7CisJcmV0dXJuIGdldF9zaGExX3dpdGhfY29udGV4dChuYW1lLCBHRVRfU0hBMV9CTE9CLAorCQkJCSAgICAgc2hhMSwgJnVudXNlZCk7Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiBvYmplY3RfbmFtZTpmaWxlbmFtZSBkb2Vzbid0IGV4aXN0LiAqLworc3RhdGljIHZvaWQgZGlhZ25vc2VfaW52YWxpZF9zaGExX3BhdGgoY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZV9zaGExLAorCQkJCSAgICAgICBjb25zdCBjaGFyICpvYmplY3RfbmFtZSwKKwkJCQkgICAgICAgaW50IG9iamVjdF9uYW1lX2xlbikKK3sKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCXVuc2lnbmVkIG1vZGU7CisKKwlpZiAoIXByZWZpeCkKKwkJcHJlZml4ID0gIiI7CisKKwlpZiAoZmlsZV9leGlzdHMoZmlsZW5hbWUpKQorCQlkaWUoIlBhdGggJyVzJyBleGlzdHMgb24gZGlzaywgYnV0IG5vdCBpbiAnJS4qcycuIiwKKwkJICAgIGZpbGVuYW1lLCBvYmplY3RfbmFtZV9sZW4sIG9iamVjdF9uYW1lKTsKKwlpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RESVIpIHsKKwkJY2hhciAqZnVsbG5hbWUgPSB4c3RyZm10KCIlcyVzIiwgcHJlZml4LCBmaWxlbmFtZSk7CisKKwkJaWYgKCFnZXRfdHJlZV9lbnRyeSh0cmVlX3NoYTEsIGZ1bGxuYW1lLAorCQkJCSAgICBzaGExLCAmbW9kZSkpIHsKKwkJCWRpZSgiUGF0aCAnJXMnIGV4aXN0cywgYnV0IG5vdCAnJXMnLlxuIgorCQkJICAgICJEaWQgeW91IG1lYW4gJyUuKnM6JXMnIGFrYSAnJS4qczouLyVzJz8iLAorCQkJICAgIGZ1bGxuYW1lLAorCQkJICAgIGZpbGVuYW1lLAorCQkJICAgIG9iamVjdF9uYW1lX2xlbiwgb2JqZWN0X25hbWUsCisJCQkgICAgZnVsbG5hbWUsCisJCQkgICAgb2JqZWN0X25hbWVfbGVuLCBvYmplY3RfbmFtZSwKKwkJCSAgICBmaWxlbmFtZSk7CisJCX0KKwkJZGllKCJQYXRoICclcycgZG9lcyBub3QgZXhpc3QgaW4gJyUuKnMnIiwKKwkJICAgIGZpbGVuYW1lLCBvYmplY3RfbmFtZV9sZW4sIG9iamVjdF9uYW1lKTsKKwl9Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiA6c3RhZ2U6ZmlsZW5hbWUgZG9lc24ndCBleGlzdC4gKi8KK3N0YXRpYyB2b2lkIGRpYWdub3NlX2ludmFsaWRfaW5kZXhfcGF0aChpbnQgc3RhZ2UsCisJCQkJCWNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwlpbnQgcG9zOworCXVuc2lnbmVkIG5hbWVsZW4gPSBzdHJsZW4oZmlsZW5hbWUpOworCXN0cnVjdCBzdHJidWYgZnVsbG5hbWUgPSBTVFJCVUZfSU5JVDsKKworCWlmICghcHJlZml4KQorCQlwcmVmaXggPSAiIjsKKworCS8qIFdyb25nIHN0YWdlIG51bWJlcj8gKi8KKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhmaWxlbmFtZSwgbmFtZWxlbik7CisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC1wb3MgLSAxOworCWlmIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKGNlX25hbWVsZW4oY2UpID09IG5hbWVsZW4gJiYKKwkJICAgICFtZW1jbXAoY2UtPm5hbWUsIGZpbGVuYW1lLCBuYW1lbGVuKSkKKwkJCWRpZSgiUGF0aCAnJXMnIGlzIGluIHRoZSBpbmRleCwgYnV0IG5vdCBhdCBzdGFnZSAlZC5cbiIKKwkJCSAgICAiRGlkIHlvdSBtZWFuICc6JWQ6JXMnPyIsCisJCQkgICAgZmlsZW5hbWUsIHN0YWdlLAorCQkJICAgIGNlX3N0YWdlKGNlKSwgZmlsZW5hbWUpOworCX0KKworCS8qIENvbmZ1c2lvbiBiZXR3ZWVuIHJlbGF0aXZlIGFuZCBhYnNvbHV0ZSBmaWxlbmFtZXM/ICovCisJc3RyYnVmX2FkZHN0cigmZnVsbG5hbWUsIHByZWZpeCk7CisJc3RyYnVmX2FkZHN0cigmZnVsbG5hbWUsIGZpbGVuYW1lKTsKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhmdWxsbmFtZS5idWYsIGZ1bGxuYW1lLmxlbik7CisJaWYgKHBvcyA8IDApCisJCXBvcyA9IC1wb3MgLSAxOworCWlmIChwb3MgPCBhY3RpdmVfbnIpIHsKKwkJY2UgPSBhY3RpdmVfY2FjaGVbcG9zXTsKKwkJaWYgKGNlX25hbWVsZW4oY2UpID09IGZ1bGxuYW1lLmxlbiAmJgorCQkgICAgIW1lbWNtcChjZS0+bmFtZSwgZnVsbG5hbWUuYnVmLCBmdWxsbmFtZS5sZW4pKQorCQkJZGllKCJQYXRoICclcycgaXMgaW4gdGhlIGluZGV4LCBidXQgbm90ICclcycuXG4iCisJCQkgICAgIkRpZCB5b3UgbWVhbiAnOiVkOiVzJyBha2EgJzolZDouLyVzJz8iLAorCQkJICAgIGZ1bGxuYW1lLmJ1ZiwgZmlsZW5hbWUsCisJCQkgICAgY2Vfc3RhZ2UoY2UpLCBmdWxsbmFtZS5idWYsCisJCQkgICAgY2Vfc3RhZ2UoY2UpLCBmaWxlbmFtZSk7CisJfQorCisJaWYgKGZpbGVfZXhpc3RzKGZpbGVuYW1lKSkKKwkJZGllKCJQYXRoICclcycgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4LiIsIGZpbGVuYW1lKTsKKwlpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOT1RESVIpCisJCWRpZSgiUGF0aCAnJXMnIGRvZXMgbm90IGV4aXN0IChuZWl0aGVyIG9uIGRpc2sgbm9yIGluIHRoZSBpbmRleCkuIiwKKwkJICAgIGZpbGVuYW1lKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZmdWxsbmFtZSk7Cit9CisKKworc3RhdGljIGNoYXIgKnJlc29sdmVfcmVsYXRpdmVfcGF0aChjb25zdCBjaGFyICpyZWwpCit7CisJaWYgKCFzdGFydHNfd2l0aChyZWwsICIuLyIpICYmICFzdGFydHNfd2l0aChyZWwsICIuLi8iKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIXN0YXJ0dXBfaW5mbykKKwkJZGllKCJCVUc6IHN0YXJ0dXBfaW5mbyBzdHJ1Y3QgaXMgbm90IGluaXRpYWxpemVkLiIpOworCisJaWYgKCFpc19pbnNpZGVfd29ya190cmVlKCkpCisJCWRpZSgicmVsYXRpdmUgcGF0aCBzeW50YXggY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIHdvcmtpbmcgdHJlZS4iKTsKKworCS8qIGRpZSgpIGluc2lkZSBwcmVmaXhfcGF0aCgpIGlmIHJlc29sdmVkIHBhdGggaXMgb3V0c2lkZSB3b3JrdHJlZSAqLworCXJldHVybiBwcmVmaXhfcGF0aChzdGFydHVwX2luZm8tPnByZWZpeCwKKwkJCSAgIHN0YXJ0dXBfaW5mby0+cHJlZml4ID8gc3RybGVuKHN0YXJ0dXBfaW5mby0+cHJlZml4KSA6IDAsCisJCQkgICByZWwpOworfQorCitzdGF0aWMgaW50IGdldF9zaGExX3dpdGhfY29udGV4dF8xKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgdW5zaWduZWQgZmxhZ3MsCisJCQkJICAgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCQkJICAgc3RydWN0IG9iamVjdF9jb250ZXh0ICpvYykKK3sKKwlpbnQgcmV0LCBicmFja2V0X2RlcHRoOworCWludCBuYW1lbGVuID0gc3RybGVuKG5hbWUpOworCWNvbnN0IGNoYXIgKmNwOworCWludCBvbmx5X3RvX2RpZSA9IGZsYWdzICYgR0VUX1NIQTFfT05MWV9UT19ESUU7CisKKwltZW1zZXQob2MsIDAsIHNpemVvZigqb2MpKTsKKwlvYy0+bW9kZSA9IFNfSUZJTlZBTElEOworCXJldCA9IGdldF9zaGExXzEobmFtZSwgbmFtZWxlbiwgc2hhMSwgZmxhZ3MpOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0OworCS8qCisJICogc2hhMTpwYXRoIC0tPiBvYmplY3QgbmFtZSBvZiBwYXRoIGluIGVudCBzaGExCisJICogOnBhdGggLT4gb2JqZWN0IG5hbWUgb2YgYWJzb2x1dGUgcGF0aCBpbiBpbmRleAorCSAqIDouL3BhdGggLT4gb2JqZWN0IG5hbWUgb2YgcGF0aCByZWxhdGl2ZSB0byBjd2QgaW4gaW5kZXgKKwkgKiA6WzAtM106cGF0aCAtPiBvYmplY3QgbmFtZSBvZiBwYXRoIGluIGluZGV4IGF0IHN0YWdlCisJICogOi9mb28gLT4gcmVjZW50IGNvbW1pdCBtYXRjaGluZyBmb28KKwkgKi8KKwlpZiAobmFtZVswXSA9PSAnOicpIHsKKwkJaW50IHN0YWdlID0gMDsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZTsKKwkJY2hhciAqbmV3X3BhdGggPSBOVUxMOworCQlpbnQgcG9zOworCQlpZiAoIW9ubHlfdG9fZGllICYmIG5hbWVsZW4gPiAyICYmIG5hbWVbMV0gPT0gJy8nKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKmxpc3QgPSBOVUxMOworCisJCQlmb3JfZWFjaF9yZWYoaGFuZGxlX29uZV9yZWYsICZsaXN0KTsKKwkJCWNvbW1pdF9saXN0X3NvcnRfYnlfZGF0ZSgmbGlzdCk7CisJCQlyZXR1cm4gZ2V0X3NoYTFfb25lbGluZShuYW1lICsgMiwgc2hhMSwgbGlzdCk7CisJCX0KKwkJaWYgKG5hbWVsZW4gPCAzIHx8CisJCSAgICBuYW1lWzJdICE9ICc6JyB8fAorCQkgICAgbmFtZVsxXSA8ICcwJyB8fCAnMycgPCBuYW1lWzFdKQorCQkJY3AgPSBuYW1lICsgMTsKKwkJZWxzZSB7CisJCQlzdGFnZSA9IG5hbWVbMV0gLSAnMCc7CisJCQljcCA9IG5hbWUgKyAzOworCQl9CisJCW5ld19wYXRoID0gcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoKGNwKTsKKwkJaWYgKCFuZXdfcGF0aCkgeworCQkJbmFtZWxlbiA9IG5hbWVsZW4gLSAoY3AgLSBuYW1lKTsKKwkJfSBlbHNlIHsKKwkJCWNwID0gbmV3X3BhdGg7CisJCQluYW1lbGVuID0gc3RybGVuKGNwKTsKKwkJfQorCisJCXN0cmxjcHkob2MtPnBhdGgsIGNwLCBzaXplb2Yob2MtPnBhdGgpKTsKKworCQlpZiAoIWFjdGl2ZV9jYWNoZSkKKwkJCXJlYWRfY2FjaGUoKTsKKwkJcG9zID0gY2FjaGVfbmFtZV9wb3MoY3AsIG5hbWVsZW4pOworCQlpZiAocG9zIDwgMCkKKwkJCXBvcyA9IC1wb3MgLSAxOworCQl3aGlsZSAocG9zIDwgYWN0aXZlX25yKSB7CisJCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQkJaWYgKGNlX25hbWVsZW4oY2UpICE9IG5hbWVsZW4gfHwKKwkJCSAgICBtZW1jbXAoY2UtPm5hbWUsIGNwLCBuYW1lbGVuKSkKKwkJCQlicmVhazsKKwkJCWlmIChjZV9zdGFnZShjZSkgPT0gc3RhZ2UpIHsKKwkJCQloYXNoY3B5KHNoYTEsIGNlLT5zaGExKTsKKwkJCQlvYy0+bW9kZSA9IGNlLT5jZV9tb2RlOworCQkJCWZyZWUobmV3X3BhdGgpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJcG9zKys7CisJCX0KKwkJaWYgKG9ubHlfdG9fZGllICYmIG5hbWVbMV0gJiYgbmFtZVsxXSAhPSAnLycpCisJCQlkaWFnbm9zZV9pbnZhbGlkX2luZGV4X3BhdGgoc3RhZ2UsIHByZWZpeCwgY3ApOworCQlmcmVlKG5ld19wYXRoKTsKKwkJcmV0dXJuIC0xOworCX0KKwlmb3IgKGNwID0gbmFtZSwgYnJhY2tldF9kZXB0aCA9IDA7ICpjcDsgY3ArKykgeworCQlpZiAoKmNwID09ICd7JykKKwkJCWJyYWNrZXRfZGVwdGgrKzsKKwkJZWxzZSBpZiAoYnJhY2tldF9kZXB0aCAmJiAqY3AgPT0gJ30nKQorCQkJYnJhY2tldF9kZXB0aC0tOworCQllbHNlIGlmICghYnJhY2tldF9kZXB0aCAmJiAqY3AgPT0gJzonKQorCQkJYnJlYWs7CisJfQorCWlmICgqY3AgPT0gJzonKSB7CisJCXVuc2lnbmVkIGNoYXIgdHJlZV9zaGExWzIwXTsKKwkJaW50IGxlbiA9IGNwIC0gbmFtZTsKKwkJaWYgKCFnZXRfc2hhMV8xKG5hbWUsIGxlbiwgdHJlZV9zaGExLCBHRVRfU0hBMV9UUkVFSVNIKSkgeworCQkJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBjcCsxOworCQkJY2hhciAqbmV3X2ZpbGVuYW1lID0gTlVMTDsKKworCQkJbmV3X2ZpbGVuYW1lID0gcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoKGZpbGVuYW1lKTsKKwkJCWlmIChuZXdfZmlsZW5hbWUpCisJCQkJZmlsZW5hbWUgPSBuZXdfZmlsZW5hbWU7CisJCQlpZiAoZmxhZ3MgJiBHRVRfU0hBMV9GT0xMT1dfU1lNTElOS1MpIHsKKwkJCQlyZXQgPSBnZXRfdHJlZV9lbnRyeV9mb2xsb3dfc3ltbGlua3ModHJlZV9zaGExLAorCQkJCQlmaWxlbmFtZSwgc2hhMSwgJm9jLT5zeW1saW5rX3BhdGgsCisJCQkJCSZvYy0+bW9kZSk7CisJCQl9IGVsc2UgeworCQkJCXJldCA9IGdldF90cmVlX2VudHJ5KHRyZWVfc2hhMSwgZmlsZW5hbWUsCisJCQkJCQkgICAgIHNoYTEsICZvYy0+bW9kZSk7CisJCQkJaWYgKHJldCAmJiBvbmx5X3RvX2RpZSkgeworCQkJCQlkaWFnbm9zZV9pbnZhbGlkX3NoYTFfcGF0aChwcmVmaXgsCisJCQkJCQkJCSAgIGZpbGVuYW1lLAorCQkJCQkJCQkgICB0cmVlX3NoYTEsCisJCQkJCQkJCSAgIG5hbWUsIGxlbik7CisJCQkJfQorCQkJfQorCQkJaGFzaGNweShvYy0+dHJlZSwgdHJlZV9zaGExKTsKKwkJCXN0cmxjcHkob2MtPnBhdGgsIGZpbGVuYW1lLCBzaXplb2Yob2MtPnBhdGgpKTsKKworCQkJZnJlZShuZXdfZmlsZW5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIHsKKwkJCWlmIChvbmx5X3RvX2RpZSkKKwkJCQlkaWUoIkludmFsaWQgb2JqZWN0IG5hbWUgJyUuKnMnLiIsIGxlbiwgbmFtZSk7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHlvdSBrbm93ICJuYW1lIiBnaXZlbiBieSB0aGUgZW5kIHVzZXIgbXVzdAorICogbmFtZSBhbiBvYmplY3QgYnV0IGl0IGRvZXNuJ3Q7IHRoZSBmdW5jdGlvbiBfbWF5XyBkaWUgd2l0aCBhIGJldHRlcgorICogZGlhZ25vc3RpYyBtZXNzYWdlIHRoYW4gIm5vIHN1Y2ggb2JqZWN0ICduYW1lJyIsIGUuZy4gIlBhdGggJ2RvYycgZG9lcyBub3QKKyAqIGV4aXN0IGluICdIRUFEJyIgd2hlbiBnaXZlbiAiSEVBRDpkb2MiLCBvciBpdCBtYXkgcmV0dXJuIGluIHdoaWNoIGNhc2UKKyAqIHlvdSBoYXZlIGEgY2hhbmNlIHRvIGRpYWdub3NlIHRoZSBlcnJvciBmdXJ0aGVyLgorICovCit2b2lkIG1heWJlX2RpZV9vbl9taXNzcGVsdF9vYmplY3RfbmFtZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpwcmVmaXgpCit7CisJc3RydWN0IG9iamVjdF9jb250ZXh0IG9jOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJZ2V0X3NoYTFfd2l0aF9jb250ZXh0XzEobmFtZSwgR0VUX1NIQTFfT05MWV9UT19ESUUsIHByZWZpeCwgc2hhMSwgJm9jKTsKK30KKworaW50IGdldF9zaGExX3dpdGhfY29udGV4dChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGZsYWdzLCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgb2JqZWN0X2NvbnRleHQgKm9yYykKK3sKKwlpZiAoZmxhZ3MgJiBHRVRfU0hBMV9GT0xMT1dfU1lNTElOS1MgJiYgZmxhZ3MgJiBHRVRfU0hBMV9PTkxZX1RPX0RJRSkKKwkJZGllKCJCVUc6IGluY29tcGF0aWJsZSBmbGFncyBmb3IgZ2V0X3NoYTFfd2l0aF9jb250ZXh0Iik7CisJcmV0dXJuIGdldF9zaGExX3dpdGhfY29udGV4dF8xKHN0ciwgZmxhZ3MsIE5VTEwsIHNoYTEsIG9yYyk7Cit9CmRpZmYgLS1naXQgYS9zaGFsbG93LmMgYi9zaGFsbG93LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5ZDY2NwotLS0gL2Rldi9udWxsCisrKyBiL3NoYWxsb3cuYwpAQCAtMCwwICsxLDY2OCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidGVtcGZpbGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgImNvbW1pdC5oIgorI2luY2x1ZGUgInRhZy5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInNoYTEtYXJyYXkuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJjb21taXQtc2xhYi5oIgorCitzdGF0aWMgaW50IGlzX3NoYWxsb3cgPSAtMTsKK3N0YXRpYyBzdHJ1Y3Qgc3RhdF92YWxpZGl0eSBzaGFsbG93X3N0YXQ7CitzdGF0aWMgY2hhciAqYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZTsKKwordm9pZCBzZXRfYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZShjb25zdCBjaGFyICpwYXRoLCBpbnQgb3ZlcnJpZGUpCit7CisJaWYgKGlzX3NoYWxsb3cgIT0gLTEpCisJCWRpZSgiQlVHOiBpc19yZXBvc2l0b3J5X3NoYWxsb3cgbXVzdCBub3QgYmUgY2FsbGVkIGJlZm9yZSBzZXRfYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSIpOworCWlmIChhbHRlcm5hdGVfc2hhbGxvd19maWxlICYmICFvdmVycmlkZSkKKwkJcmV0dXJuOworCWZyZWUoYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSk7CisJYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9IHhzdHJkdXBfb3JfbnVsbChwYXRoKTsKK30KKworaW50IHJlZ2lzdGVyX3NoYWxsb3coY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCA9CisJCXhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb21taXRfZ3JhZnQpKTsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0KHNoYTEpOworCisJaGFzaGNweShncmFmdC0+b2lkLmhhc2gsIHNoYTEpOworCWdyYWZ0LT5ucl9wYXJlbnQgPSAtMTsKKwlpZiAoY29tbWl0ICYmIGNvbW1pdC0+b2JqZWN0LnBhcnNlZCkKKwkJY29tbWl0LT5wYXJlbnRzID0gTlVMTDsKKwlyZXR1cm4gcmVnaXN0ZXJfY29tbWl0X2dyYWZ0KGdyYWZ0LCAwKTsKK30KKworaW50IGlzX3JlcG9zaXRvcnlfc2hhbGxvdyh2b2lkKQoreworCUZJTEUgKmZwOworCWNoYXIgYnVmWzEwMjRdOworCWNvbnN0IGNoYXIgKnBhdGggPSBhbHRlcm5hdGVfc2hhbGxvd19maWxlOworCisJaWYgKGlzX3NoYWxsb3cgPj0gMCkKKwkJcmV0dXJuIGlzX3NoYWxsb3c7CisKKwlpZiAoIXBhdGgpCisJCXBhdGggPSBnaXRfcGF0aF9zaGFsbG93KCk7CisJLyoKKwkgKiBmZXRjaC1wYWNrIHNldHMgJy0tc2hhbGxvdy1maWxlICIiJyBhcyBhbiBpbmRpY2F0b3IgdGhhdCBubworCSAqIHNoYWxsb3cgZmlsZSBzaG91bGQgYmUgdXNlZC4gV2UgY291bGQganVzdCBvcGVuIGl0IGFuZCBpdAorCSAqIHdpbGwgbGlrZWx5IGZhaWwuIEJ1dCBsZXQncyBkbyBhbiBleHBsaWNpdCBjaGVjayBpbnN0ZWFkLgorCSAqLworCWlmICghKnBhdGggfHwgKGZwID0gZm9wZW4ocGF0aCwgInIiKSkgPT0gTlVMTCkgeworCQlzdGF0X3ZhbGlkaXR5X2NsZWFyKCZzaGFsbG93X3N0YXQpOworCQlpc19zaGFsbG93ID0gMDsKKwkJcmV0dXJuIGlzX3NoYWxsb3c7CisJfQorCXN0YXRfdmFsaWRpdHlfdXBkYXRlKCZzaGFsbG93X3N0YXQsIGZpbGVubyhmcCkpOworCWlzX3NoYWxsb3cgPSAxOworCisJd2hpbGUgKGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKSkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQlpZiAoZ2V0X3NoYTFfaGV4KGJ1Ziwgc2hhMSkpCisJCQlkaWUoImJhZCBzaGFsbG93IGxpbmU6ICVzIiwgYnVmKTsKKwkJcmVnaXN0ZXJfc2hhbGxvdyhzaGExKTsKKwl9CisJZmNsb3NlKGZwKTsKKwlyZXR1cm4gaXNfc2hhbGxvdzsKK30KKworc3RydWN0IGNvbW1pdF9saXN0ICpnZXRfc2hhbGxvd19jb21taXRzKHN0cnVjdCBvYmplY3RfYXJyYXkgKmhlYWRzLCBpbnQgZGVwdGgsCisJCWludCBzaGFsbG93X2ZsYWcsIGludCBub3Rfc2hhbGxvd19mbGFnKQoreworCWludCBpID0gMCwgY3VyX2RlcHRoID0gMDsKKwlzdHJ1Y3QgY29tbWl0X2xpc3QgKnJlc3VsdCA9IE5VTEw7CisJc3RydWN0IG9iamVjdF9hcnJheSBzdGFjayA9IE9CSkVDVF9BUlJBWV9JTklUOworCXN0cnVjdCBjb21taXQgKmNvbW1pdCA9IE5VTEw7CisJc3RydWN0IGNvbW1pdF9ncmFmdCAqZ3JhZnQ7CisKKwl3aGlsZSAoY29tbWl0IHx8IGkgPCBoZWFkcy0+bnIgfHwgc3RhY2subnIpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwOworCQlpZiAoIWNvbW1pdCkgeworCQkJaWYgKGkgPCBoZWFkcy0+bnIpIHsKKwkJCQljb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKQorCQkJCQlkZXJlZl90YWcoaGVhZHMtPm9iamVjdHNbaSsrXS5pdGVtLCBOVUxMLCAwKTsKKwkJCQlpZiAoIWNvbW1pdCB8fCBjb21taXQtPm9iamVjdC50eXBlICE9IE9CSl9DT01NSVQpIHsKKwkJCQkJY29tbWl0ID0gTlVMTDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmICghY29tbWl0LT51dGlsKQorCQkJCQljb21taXQtPnV0aWwgPSB4bWFsbG9jKHNpemVvZihpbnQpKTsKKwkJCQkqKGludCAqKWNvbW1pdC0+dXRpbCA9IDA7CisJCQkJY3VyX2RlcHRoID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJY29tbWl0ID0gKHN0cnVjdCBjb21taXQgKikKKwkJCQkJc3RhY2sub2JqZWN0c1stLXN0YWNrLm5yXS5pdGVtOworCQkJCWN1cl9kZXB0aCA9ICooaW50ICopY29tbWl0LT51dGlsOworCQkJfQorCQl9CisJCXBhcnNlX2NvbW1pdF9vcl9kaWUoY29tbWl0KTsKKwkJY3VyX2RlcHRoKys7CisJCWlmICgoZGVwdGggIT0gSU5GSU5JVEVfREVQVEggJiYgY3VyX2RlcHRoID49IGRlcHRoKSB8fAorCQkgICAgKGlzX3JlcG9zaXRvcnlfc2hhbGxvdygpICYmICFjb21taXQtPnBhcmVudHMgJiYKKwkJICAgICAoZ3JhZnQgPSBsb29rdXBfY29tbWl0X2dyYWZ0KGNvbW1pdC0+b2JqZWN0LnNoYTEpKSAhPSBOVUxMICYmCisJCSAgICAgZ3JhZnQtPm5yX3BhcmVudCA8IDApKSB7CisJCQljb21taXRfbGlzdF9pbnNlcnQoY29tbWl0LCAmcmVzdWx0KTsKKwkJCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IHNoYWxsb3dfZmxhZzsKKwkJCWNvbW1pdCA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBub3Rfc2hhbGxvd19mbGFnOworCQlmb3IgKHAgPSBjb21taXQtPnBhcmVudHMsIGNvbW1pdCA9IE5VTEw7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQlpZiAoIXAtPml0ZW0tPnV0aWwpIHsKKwkJCQlpbnQgKnBvaW50ZXIgPSB4bWFsbG9jKHNpemVvZihpbnQpKTsKKwkJCQlwLT5pdGVtLT51dGlsID0gcG9pbnRlcjsKKwkJCQkqcG9pbnRlciA9ICBjdXJfZGVwdGg7CisJCQl9IGVsc2UgeworCQkJCWludCAqcG9pbnRlciA9IHAtPml0ZW0tPnV0aWw7CisJCQkJaWYgKGN1cl9kZXB0aCA+PSAqcG9pbnRlcikKKwkJCQkJY29udGludWU7CisJCQkJKnBvaW50ZXIgPSBjdXJfZGVwdGg7CisJCQl9CisJCQlpZiAocC0+bmV4dCkKKwkJCQlhZGRfb2JqZWN0X2FycmF5KCZwLT5pdGVtLT5vYmplY3QsCisJCQkJCQlOVUxMLCAmc3RhY2spOworCQkJZWxzZSB7CisJCQkJY29tbWl0ID0gcC0+aXRlbTsKKwkJCQljdXJfZGVwdGggPSAqKGludCAqKWNvbW1pdC0+dXRpbDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3NoYWxsb3dfZmlsZV9mb3JfdXBkYXRlKHZvaWQpCit7CisJaWYgKGlzX3NoYWxsb3cgPT0gLTEpCisJCWRpZSgiQlVHOiBzaGFsbG93IG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgbm93Iik7CisKKwlpZiAoIXN0YXRfdmFsaWRpdHlfY2hlY2soJnNoYWxsb3dfc3RhdCwgZ2l0X3BhdGhfc2hhbGxvdygpKSkKKwkJZGllKCJzaGFsbG93IGZpbGUgaGFzIGNoYW5nZWQgc2luY2Ugd2UgcmVhZCBpdCIpOworfQorCisjZGVmaW5lIFNFRU5fT05MWSAxCisjZGVmaW5lIFZFUkJPU0UgICAyCisKK3N0cnVjdCB3cml0ZV9zaGFsbG93X2RhdGEgeworCXN0cnVjdCBzdHJidWYgKm91dDsKKwlpbnQgdXNlX3BhY2tfcHJvdG9jb2w7CisJaW50IGNvdW50OworCXVuc2lnbmVkIGZsYWdzOworfTsKKworc3RhdGljIGludCB3cml0ZV9vbmVfc2hhbGxvdyhjb25zdCBzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3Qgd3JpdGVfc2hhbGxvd19kYXRhICpkYXRhID0gY2JfZGF0YTsKKwljb25zdCBjaGFyICpoZXggPSBvaWRfdG9faGV4KCZncmFmdC0+b2lkKTsKKwlpZiAoZ3JhZnQtPm5yX3BhcmVudCAhPSAtMSkKKwkJcmV0dXJuIDA7CisJaWYgKGRhdGEtPmZsYWdzICYgU0VFTl9PTkxZKSB7CisJCXN0cnVjdCBjb21taXQgKmMgPSBsb29rdXBfY29tbWl0KGdyYWZ0LT5vaWQuaGFzaCk7CisJCWlmICghYyB8fCAhKGMtPm9iamVjdC5mbGFncyAmIFNFRU4pKSB7CisJCQlpZiAoZGF0YS0+ZmxhZ3MgJiBWRVJCT1NFKQorCQkJCXByaW50ZigiUmVtb3ZpbmcgJXMgZnJvbSAuZ2l0L3NoYWxsb3dcbiIsCisJCQkJICAgICAgIHNoYTFfdG9faGV4KGMtPm9iamVjdC5zaGExKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlkYXRhLT5jb3VudCsrOworCWlmIChkYXRhLT51c2VfcGFja19wcm90b2NvbCkKKwkJcGFja2V0X2J1Zl93cml0ZShkYXRhLT5vdXQsICJzaGFsbG93ICVzIiwgaGV4KTsKKwllbHNlIHsKKwkJc3RyYnVmX2FkZHN0cihkYXRhLT5vdXQsIGhleCk7CisJCXN0cmJ1Zl9hZGRjaChkYXRhLT5vdXQsICdcbicpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9zaGFsbG93X2NvbW1pdHNfMShzdHJ1Y3Qgc3RyYnVmICpvdXQsIGludCB1c2VfcGFja19wcm90b2NvbCwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgc2hhMV9hcnJheSAqZXh0cmEsCisJCQkJICAgdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IHdyaXRlX3NoYWxsb3dfZGF0YSBkYXRhOworCWludCBpOworCWRhdGEub3V0ID0gb3V0OworCWRhdGEudXNlX3BhY2tfcHJvdG9jb2wgPSB1c2VfcGFja19wcm90b2NvbDsKKwlkYXRhLmNvdW50ID0gMDsKKwlkYXRhLmZsYWdzID0gZmxhZ3M7CisJZm9yX2VhY2hfY29tbWl0X2dyYWZ0KHdyaXRlX29uZV9zaGFsbG93LCAmZGF0YSk7CisJaWYgKCFleHRyYSkKKwkJcmV0dXJuIGRhdGEuY291bnQ7CisJZm9yIChpID0gMDsgaSA8IGV4dHJhLT5ucjsgaSsrKSB7CisJCXN0cmJ1Zl9hZGRzdHIob3V0LCBzaGExX3RvX2hleChleHRyYS0+c2hhMVtpXSkpOworCQlzdHJidWZfYWRkY2gob3V0LCAnXG4nKTsKKwkJZGF0YS5jb3VudCsrOworCX0KKwlyZXR1cm4gZGF0YS5jb3VudDsKK30KKworaW50IHdyaXRlX3NoYWxsb3dfY29tbWl0cyhzdHJ1Y3Qgc3RyYnVmICpvdXQsIGludCB1c2VfcGFja19wcm90b2NvbCwKKwkJCSAgY29uc3Qgc3RydWN0IHNoYTFfYXJyYXkgKmV4dHJhKQoreworCXJldHVybiB3cml0ZV9zaGFsbG93X2NvbW1pdHNfMShvdXQsIHVzZV9wYWNrX3Byb3RvY29sLCBleHRyYSwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGVtcGZpbGUgdGVtcG9yYXJ5X3NoYWxsb3c7CisKK2NvbnN0IGNoYXIgKnNldHVwX3RlbXBvcmFyeV9zaGFsbG93KGNvbnN0IHN0cnVjdCBzaGExX2FycmF5ICpleHRyYSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IGZkOworCisJaWYgKHdyaXRlX3NoYWxsb3dfY29tbWl0cygmc2IsIDAsIGV4dHJhKSkgeworCQlmZCA9IHhta3NfdGVtcGZpbGUoJnRlbXBvcmFyeV9zaGFsbG93LCBnaXRfcGF0aCgic2hhbGxvd19YWFhYWFgiKSk7CisKKwkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHNiLmJ1Ziwgc2IubGVuKSAhPSBzYi5sZW4pCisJCQlkaWVfZXJybm8oImZhaWxlZCB0byB3cml0ZSB0byAlcyIsCisJCQkJICBnZXRfdGVtcGZpbGVfcGF0aCgmdGVtcG9yYXJ5X3NoYWxsb3cpKTsKKwkJY2xvc2VfdGVtcGZpbGUoJnRlbXBvcmFyeV9zaGFsbG93KTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIGdldF90ZW1wZmlsZV9wYXRoKCZ0ZW1wb3Jhcnlfc2hhbGxvdyk7CisJfQorCS8qCisJICogaXNfcmVwb3NpdG9yeV9zaGFsbG93KCkgc2VlcyBlbXB0eSBzdHJpbmcgYXMgIm5vIHNoYWxsb3cKKwkgKiBmaWxlIi4KKwkgKi8KKwlyZXR1cm4gZ2V0X3RlbXBmaWxlX3BhdGgoJnRlbXBvcmFyeV9zaGFsbG93KTsKK30KKwordm9pZCBzZXR1cF9hbHRlcm5hdGVfc2hhbGxvdyhzdHJ1Y3QgbG9ja19maWxlICpzaGFsbG93X2xvY2ssCisJCQkgICAgIGNvbnN0IGNoYXIgKiphbHRlcm5hdGVfc2hhbGxvd19maWxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgc2hhMV9hcnJheSAqZXh0cmEpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBmZDsKKworCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZShzaGFsbG93X2xvY2ssIGdpdF9wYXRoX3NoYWxsb3coKSwKKwkJCQkgICAgICAgTE9DS19ESUVfT05fRVJST1IpOworCWNoZWNrX3NoYWxsb3dfZmlsZV9mb3JfdXBkYXRlKCk7CisJaWYgKHdyaXRlX3NoYWxsb3dfY29tbWl0cygmc2IsIDAsIGV4dHJhKSkgeworCQlpZiAod3JpdGVfaW5fZnVsbChmZCwgc2IuYnVmLCBzYi5sZW4pICE9IHNiLmxlbikKKwkJCWRpZV9lcnJubygiZmFpbGVkIHRvIHdyaXRlIHRvICVzIiwKKwkJCQkgIGdldF9sb2NrX2ZpbGVfcGF0aChzaGFsbG93X2xvY2spKTsKKwkJKmFsdGVybmF0ZV9zaGFsbG93X2ZpbGUgPSBnZXRfbG9ja19maWxlX3BhdGgoc2hhbGxvd19sb2NrKTsKKwl9IGVsc2UKKwkJLyoKKwkJICogaXNfcmVwb3NpdG9yeV9zaGFsbG93KCkgc2VlcyBlbXB0eSBzdHJpbmcgYXMgIm5vCisJCSAqIHNoYWxsb3cgZmlsZSIuCisJCSAqLworCQkqYWx0ZXJuYXRlX3NoYWxsb3dfZmlsZSA9ICIiOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyBpbnQgYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzX2NiKGNvbnN0IHN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0LCB2b2lkICpjYikKK3sKKwlpbnQgZmQgPSAqKGludCAqKWNiOworCWlmIChncmFmdC0+bnJfcGFyZW50ID09IC0xKQorCQlwYWNrZXRfd3JpdGUoZmQsICJzaGFsbG93ICVzXG4iLCBvaWRfdG9faGV4KCZncmFmdC0+b2lkKSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYWR2ZXJ0aXNlX3NoYWxsb3dfZ3JhZnRzKGludCBmZCkKK3sKKwlpZiAoIWlzX3JlcG9zaXRvcnlfc2hhbGxvdygpKQorCQlyZXR1cm47CisJZm9yX2VhY2hfY29tbWl0X2dyYWZ0KGFkdmVydGlzZV9zaGFsbG93X2dyYWZ0c19jYiwgJmZkKTsKK30KKworLyoKKyAqIG1hcmtfcmVhY2hhYmxlX29iamVjdHMoKSBzaG91bGQgaGF2ZSBiZWVuIHJ1biBwcmlvciB0byB0aGlzIGFuZCBhbGwKKyAqIHJlYWNoYWJsZSBjb21taXRzIG1hcmtlZCBhcyAiU0VFTiIuCisgKi8KK3ZvaWQgcHJ1bmVfc2hhbGxvdyhpbnQgc2hvd19vbmx5KQoreworCXN0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIHNoYWxsb3dfbG9jazsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IGZkOworCisJaWYgKHNob3dfb25seSkgeworCQl3cml0ZV9zaGFsbG93X2NvbW1pdHNfMSgmc2IsIDAsIE5VTEwsIFNFRU5fT05MWSB8IFZFUkJPU0UpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQlyZXR1cm47CisJfQorCWZkID0gaG9sZF9sb2NrX2ZpbGVfZm9yX3VwZGF0ZSgmc2hhbGxvd19sb2NrLCBnaXRfcGF0aF9zaGFsbG93KCksCisJCQkJICAgICAgIExPQ0tfRElFX09OX0VSUk9SKTsKKwljaGVja19zaGFsbG93X2ZpbGVfZm9yX3VwZGF0ZSgpOworCWlmICh3cml0ZV9zaGFsbG93X2NvbW1pdHNfMSgmc2IsIDAsIE5VTEwsIFNFRU5fT05MWSkpIHsKKwkJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIHNiLmJ1Ziwgc2IubGVuKSAhPSBzYi5sZW4pCisJCQlkaWVfZXJybm8oImZhaWxlZCB0byB3cml0ZSB0byAlcyIsCisJCQkJICBnZXRfbG9ja19maWxlX3BhdGgoJnNoYWxsb3dfbG9jaykpOworCQljb21taXRfbG9ja19maWxlKCZzaGFsbG93X2xvY2spOworCX0gZWxzZSB7CisJCXVubGluayhnaXRfcGF0aF9zaGFsbG93KCkpOworCQlyb2xsYmFja19sb2NrX2ZpbGUoJnNoYWxsb3dfbG9jayk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0cnVjdCB0cmFjZV9rZXkgdHJhY2Vfc2hhbGxvdyA9IFRSQUNFX0tFWV9JTklUKFNIQUxMT1cpOworCisvKgorICogU3RlcCAxLCBzcGxpdCBzZW5kZXIgc2hhbGxvdyBjb21taXRzIGludG8gIm91cnMiIGFuZCAidGhlaXJzIgorICogU3RlcCAyLCBjbGVhbiAib3VycyIgYmFzZWQgb24gLmdpdC9zaGFsbG93CisgKi8KK3ZvaWQgcHJlcGFyZV9zaGFsbG93X2luZm8oc3RydWN0IHNoYWxsb3dfaW5mbyAqaW5mbywgc3RydWN0IHNoYTFfYXJyYXkgKnNhKQoreworCWludCBpOworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NoYWxsb3csICJzaGFsbG93OiBwcmVwYXJlX3NoYWxsb3dfaW5mb1xuIik7CisJbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOworCWluZm8tPnNoYWxsb3cgPSBzYTsKKwlpZiAoIXNhKQorCQlyZXR1cm47CisJaW5mby0+b3VycyA9IHhtYWxsb2Moc2l6ZW9mKCppbmZvLT5vdXJzKSAqIHNhLT5ucik7CisJaW5mby0+dGhlaXJzID0geG1hbGxvYyhzaXplb2YoKmluZm8tPnRoZWlycykgKiBzYS0+bnIpOworCWZvciAoaSA9IDA7IGkgPCBzYS0+bnI7IGkrKykgeworCQlpZiAoaGFzX3NoYTFfZmlsZShzYS0+c2hhMVtpXSkpIHsKKwkJCXN0cnVjdCBjb21taXRfZ3JhZnQgKmdyYWZ0OworCQkJZ3JhZnQgPSBsb29rdXBfY29tbWl0X2dyYWZ0KHNhLT5zaGExW2ldKTsKKwkJCWlmIChncmFmdCAmJiBncmFmdC0+bnJfcGFyZW50IDwgMCkKKwkJCQljb250aW51ZTsKKwkJCWluZm8tPm91cnNbaW5mby0+bnJfb3VycysrXSA9IGk7CisJCX0gZWxzZQorCQkJaW5mby0+dGhlaXJzW2luZm8tPm5yX3RoZWlycysrXSA9IGk7CisJfQorfQorCit2b2lkIGNsZWFyX3NoYWxsb3dfaW5mbyhzdHJ1Y3Qgc2hhbGxvd19pbmZvICppbmZvKQoreworCWZyZWUoaW5mby0+b3Vycyk7CisJZnJlZShpbmZvLT50aGVpcnMpOworfQorCisvKiBTdGVwIDQsIHJlbW92ZSBub24tZXhpc3RlbnQgb25lcyBpbiAidGhlaXJzIiBhZnRlciBnZXR0aW5nIHRoZSBwYWNrICovCisKK3ZvaWQgcmVtb3ZlX25vbmV4aXN0ZW50X3RoZWlyc19zaGFsbG93KHN0cnVjdCBzaGFsbG93X2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgY2hhciAoKnNoYTEpWzIwXSA9IGluZm8tPnNoYWxsb3ctPnNoYTE7CisJaW50IGksIGRzdDsKKwl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9zaGFsbG93LCAic2hhbGxvdzogcmVtb3ZlX25vbmV4aXN0ZW50X3RoZWlyc19zaGFsbG93XG4iKTsKKwlmb3IgKGkgPSBkc3QgPSAwOyBpIDwgaW5mby0+bnJfdGhlaXJzOyBpKyspIHsKKwkJaWYgKGkgIT0gZHN0KQorCQkJaW5mby0+dGhlaXJzW2RzdF0gPSBpbmZvLT50aGVpcnNbaV07CisJCWlmIChoYXNfc2hhMV9maWxlKHNoYTFbaW5mby0+dGhlaXJzW2ldXSkpCisJCQlkc3QrKzsKKwl9CisJaW5mby0+bnJfdGhlaXJzID0gZHN0OworfQorCitkZWZpbmVfY29tbWl0X3NsYWIocmVmX2JpdG1hcCwgdWludDMyX3QgKik7CisKK3N0cnVjdCBwYWludF9pbmZvIHsKKwlzdHJ1Y3QgcmVmX2JpdG1hcCByZWZfYml0bWFwOworCXVuc2lnbmVkIG5yX2JpdHM7CisJY2hhciAqKnNsYWI7CisJY2hhciAqZnJlZSwgKmVuZDsKKwl1bnNpZ25lZCBzbGFiX2NvdW50OworfTsKKworc3RhdGljIHVpbnQzMl90ICpwYWludF9hbGxvYyhzdHJ1Y3QgcGFpbnRfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBuciA9IChpbmZvLT5ucl9iaXRzICsgMzEpIC8gMzI7CisJdW5zaWduZWQgc2l6ZSA9IG5yICogc2l6ZW9mKHVpbnQzMl90KTsKKwl2b2lkICpwOworCWlmICghaW5mby0+c2xhYl9jb3VudCB8fCBpbmZvLT5mcmVlICsgc2l6ZSA+IGluZm8tPmVuZCkgeworCQlpbmZvLT5zbGFiX2NvdW50Kys7CisJCVJFQUxMT0NfQVJSQVkoaW5mby0+c2xhYiwgaW5mby0+c2xhYl9jb3VudCk7CisJCWluZm8tPmZyZWUgPSB4bWFsbG9jKENPTU1JVF9TTEFCX1NJWkUpOworCQlpbmZvLT5zbGFiW2luZm8tPnNsYWJfY291bnQgLSAxXSA9IGluZm8tPmZyZWU7CisJCWluZm8tPmVuZCA9IGluZm8tPmZyZWUgKyBDT01NSVRfU0xBQl9TSVpFOworCX0KKwlwID0gaW5mby0+ZnJlZTsKKwlpbmZvLT5mcmVlICs9IHNpemU7CisJcmV0dXJuIHA7Cit9CisKKy8qCisgKiBHaXZlbiBhIGNvbW1pdCBTSEEtMSwgd2FsayBkb3duIHRvIHBhcmVudHMgdW50aWwgZWl0aGVyIFNFRU4sCisgKiBVTklOVEVSRVNUSU5HIG9yIEJPVFRPTSBpcyBoaXQuIFNldCB0aGUgaWQtdGggYml0IGluIHJlZl9iaXRtYXAgZm9yCisgKiBhbGwgd2Fsa2VkIGNvbW1pdHMuCisgKi8KK3N0YXRpYyB2b2lkIHBhaW50X2Rvd24oc3RydWN0IHBhaW50X2luZm8gKmluZm8sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJCSAgICAgICBpbnQgaWQpCit7CisJdW5zaWduZWQgaW50IGksIG5yOworCXN0cnVjdCBjb21taXRfbGlzdCAqaGVhZCA9IE5VTEw7CisJaW50IGJpdG1hcF9uciA9IChpbmZvLT5ucl9iaXRzICsgMzEpIC8gMzI7CisJaW50IGJpdG1hcF9zaXplID0gYml0bWFwX25yICogc2l6ZW9mKHVpbnQzMl90KTsKKwl1aW50MzJfdCAqdG1wID0geG1hbGxvYyhiaXRtYXBfc2l6ZSk7IC8qIHRvIGJlIGZyZWVkIGJlZm9yZSByZXR1cm4gKi8KKwl1aW50MzJfdCAqYml0bWFwID0gcGFpbnRfYWxsb2MoaW5mbyk7CisJc3RydWN0IGNvbW1pdCAqYyA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShzaGExLCAxKTsKKwlpZiAoIWMpCisJCXJldHVybjsKKwltZW1zZXQoYml0bWFwLCAwLCBiaXRtYXBfc2l6ZSk7CisJYml0bWFwW2lkIC8gMzJdIHw9ICgxIDw8IChpZCAlIDMyKSk7CisJY29tbWl0X2xpc3RfaW5zZXJ0KGMsICZoZWFkKTsKKwl3aGlsZSAoaGVhZCkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnA7CisJCXN0cnVjdCBjb21taXQgKmMgPSBoZWFkLT5pdGVtOworCQl1aW50MzJfdCAqKnJlZnMgPSByZWZfYml0bWFwX2F0KCZpbmZvLT5yZWZfYml0bWFwLCBjKTsKKworCQlwID0gaGVhZDsKKwkJaGVhZCA9IGhlYWQtPm5leHQ7CisJCWZyZWUocCk7CisKKwkJLyogWFhYIGNoZWNrICJVTklOVEVSRVNUSU5HIiBmcm9tIHBhY2sgYml0bWFwcyBpZiBhdmFpbGFibGUgKi8KKwkJaWYgKGMtPm9iamVjdC5mbGFncyAmIChTRUVOIHwgVU5JTlRFUkVTVElORykpCisJCQljb250aW51ZTsKKwkJZWxzZQorCQkJYy0+b2JqZWN0LmZsYWdzIHw9IFNFRU47CisKKwkJaWYgKCpyZWZzID09IE5VTEwpCisJCQkqcmVmcyA9IGJpdG1hcDsKKwkJZWxzZSB7CisJCQltZW1jcHkodG1wLCAqcmVmcywgYml0bWFwX3NpemUpOworCQkJZm9yIChpID0gMDsgaSA8IGJpdG1hcF9ucjsgaSsrKQorCQkJCXRtcFtpXSB8PSBiaXRtYXBbaV07CisJCQlpZiAobWVtY21wKHRtcCwgKnJlZnMsIGJpdG1hcF9zaXplKSkgeworCQkJCSpyZWZzID0gcGFpbnRfYWxsb2MoaW5mbyk7CisJCQkJbWVtY3B5KCpyZWZzLCB0bXAsIGJpdG1hcF9zaXplKTsKKwkJCX0KKwkJfQorCisJCWlmIChjLT5vYmplY3QuZmxhZ3MgJiBCT1RUT00pCisJCQljb250aW51ZTsKKworCQlpZiAocGFyc2VfY29tbWl0KGMpKQorCQkJZGllKCJ1bmFibGUgdG8gcGFyc2UgY29tbWl0ICVzIiwKKwkJCSAgICBzaGExX3RvX2hleChjLT5vYmplY3Quc2hhMSkpOworCisJCWZvciAocCA9IGMtPnBhcmVudHM7IHA7IHAgPSBwLT5uZXh0KSB7CisJCQl1aW50MzJfdCAqKnBfcmVmcyA9IHJlZl9iaXRtYXBfYXQoJmluZm8tPnJlZl9iaXRtYXAsCisJCQkJCQkJICBwLT5pdGVtKTsKKwkJCWlmIChwLT5pdGVtLT5vYmplY3QuZmxhZ3MgJiBTRUVOKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCpwX3JlZnMgPT0gTlVMTCB8fCAqcF9yZWZzID09ICpyZWZzKQorCQkJCSpwX3JlZnMgPSAqcmVmczsKKwkJCWNvbW1pdF9saXN0X2luc2VydChwLT5pdGVtLCAmaGVhZCk7CisJCX0KKwl9CisKKwluciA9IGdldF9tYXhfb2JqZWN0X2luZGV4KCk7CisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspIHsKKwkJc3RydWN0IG9iamVjdCAqbyA9IGdldF9pbmRleGVkX29iamVjdChpKTsKKwkJaWYgKG8gJiYgby0+dHlwZSA9PSBPQkpfQ09NTUlUKQorCQkJby0+ZmxhZ3MgJj0gflNFRU47CisJfQorCisJZnJlZSh0bXApOworfQorCitzdGF0aWMgaW50IG1hcmtfdW5pbnRlcmVzdGluZyhjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCQkgICAgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2VfZ2VudGx5KG9pZC0+aGFzaCwgMSk7CisJaWYgKCFjb21taXQpCisJCXJldHVybiAwOworCWNvbW1pdC0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJbWFya19wYXJlbnRzX3VuaW50ZXJlc3RpbmcoY29tbWl0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcG9zdF9hc3NpZ25fc2hhbGxvdyhzdHJ1Y3Qgc2hhbGxvd19pbmZvICppbmZvLAorCQkJCXN0cnVjdCByZWZfYml0bWFwICpyZWZfYml0bWFwLAorCQkJCWludCAqcmVmX3N0YXR1cyk7CisvKgorICogU3RlcCA2KCs3KSwgYXNzb2NpYXRlIHNoYWxsb3cgY29tbWl0cyB3aXRoIG5ldyByZWZzCisgKgorICogaW5mby0+cmVmIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBJZiB1c2VkIGlzIG5vdCBOVUxMLCBpdCdzIGFuIGFycmF5IG9mIGluZm8tPnNoYWxsb3ctPm5yCisgKiBiaXRtYXBzLiBUaGUgbi10aCBiaXQgc2V0IGluIHRoZSBtLXRoIGJpdG1hcCBpZiByZWZbbl0gbmVlZHMgdGhlCisgKiBtLXRoIHNoYWxsb3cgY29tbWl0IGZyb20gaW5mby0+c2hhbGxvdy4KKyAqCisgKiBJZiB1c2VkIGlzIE5VTEwsICJvdXJzIiBhbmQgInRoZWlycyIgYXJlIHVwZGF0ZWQuIEFuZCBpZiByZWZfc3RhdHVzCisgKiBpcyBub3QgTlVMTCBpdCdzIGFuIGFycmF5IG9mIHJlZi0+bnIgaW50cy4gcmVmX3N0YXR1c1tpXSBpcyB0cnVlIGlmCisgKiB0aGUgcmVmIG5lZWRzIHNvbWUgc2hhbGxvdyBjb21taXRzIGZyb20gZWl0aGVyIGluZm8tPm91cnMgb3IKKyAqIGluZm8tPnRoZWlycy4KKyAqLwordm9pZCBhc3NpZ25fc2hhbGxvd19jb21taXRzX3RvX3JlZnMoc3RydWN0IHNoYWxsb3dfaW5mbyAqaW5mbywKKwkJCQkgICAgdWludDMyX3QgKip1c2VkLCBpbnQgKnJlZl9zdGF0dXMpCit7CisJdW5zaWduZWQgY2hhciAoKnNoYTEpWzIwXSA9IGluZm8tPnNoYWxsb3ctPnNoYTE7CisJc3RydWN0IHNoYTFfYXJyYXkgKnJlZiA9IGluZm8tPnJlZjsKKwl1bnNpZ25lZCBpbnQgaSwgbnI7CisJaW50ICpzaGFsbG93LCBucl9zaGFsbG93ID0gMDsKKwlzdHJ1Y3QgcGFpbnRfaW5mbyBwaTsKKworCXRyYWNlX3ByaW50Zl9rZXkoJnRyYWNlX3NoYWxsb3csICJzaGFsbG93OiBhc3NpZ25fc2hhbGxvd19jb21taXRzX3RvX3JlZnNcbiIpOworCXNoYWxsb3cgPSB4bWFsbG9jKHNpemVvZigqc2hhbGxvdykgKiAoaW5mby0+bnJfb3VycyArIGluZm8tPm5yX3RoZWlycykpOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ucl9vdXJzOyBpKyspCisJCXNoYWxsb3dbbnJfc2hhbGxvdysrXSA9IGluZm8tPm91cnNbaV07CisJZm9yIChpID0gMDsgaSA8IGluZm8tPm5yX3RoZWlyczsgaSsrKQorCQlzaGFsbG93W25yX3NoYWxsb3crK10gPSBpbmZvLT50aGVpcnNbaV07CisKKwkvKgorCSAqIFByZXBhcmUgdGhlIGNvbW1pdCBncmFwaCB0byB0cmFjayB3aGF0IHJlZnMgY2FuIHJlYWNoIHdoYXQKKwkgKiAobmV3KSBzaGFsbG93IGNvbW1pdHMuCisJICovCisJbnIgPSBnZXRfbWF4X29iamVjdF9pbmRleCgpOworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3QgKm8gPSBnZXRfaW5kZXhlZF9vYmplY3QoaSk7CisJCWlmICghbyB8fCBvLT50eXBlICE9IE9CSl9DT01NSVQpCisJCQljb250aW51ZTsKKworCQlvLT5mbGFncyAmPSB+KFVOSU5URVJFU1RJTkcgfCBCT1RUT00gfCBTRUVOKTsKKwl9CisKKwltZW1zZXQoJnBpLCAwLCBzaXplb2YocGkpKTsKKwlpbml0X3JlZl9iaXRtYXAoJnBpLnJlZl9iaXRtYXApOworCXBpLm5yX2JpdHMgPSByZWYtPm5yOworCisJLyoKKwkgKiAiLS1ub3QgLS1hbGwiIHRvIGN1dCBzaG9ydCB0aGUgdHJhdmVyc2FsIGlmIG5ldyByZWZzCisJICogY29ubmVjdCB0byBvbGQgcmVmcy4gSWYgbm90IChlLmcuIGZvcmNlIHJlZiB1cGRhdGVzKSBpdCdsbAorCSAqIGhhdmUgdG8gZ28gZG93biB0byB0aGUgY3VycmVudCBzaGFsbG93IGNvbW1pdHMuCisJICovCisJaGVhZF9yZWYobWFya191bmludGVyZXN0aW5nLCBOVUxMKTsKKwlmb3JfZWFjaF9yZWYobWFya191bmludGVyZXN0aW5nLCBOVUxMKTsKKworCS8qIE1hcmsgcG90ZW50aWFsIGJvdHRvbXMgc28gd2Ugd29uJ3QgZ28gb3V0IG9mIGJvdW5kICovCisJZm9yIChpID0gMDsgaSA8IG5yX3NoYWxsb3c7IGkrKykgeworCQlzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdChzaGExW3NoYWxsb3dbaV1dKTsKKwkJYy0+b2JqZWN0LmZsYWdzIHw9IEJPVFRPTTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVmLT5ucjsgaSsrKQorCQlwYWludF9kb3duKCZwaSwgcmVmLT5zaGExW2ldLCBpKTsKKworCWlmICh1c2VkKSB7CisJCWludCBiaXRtYXBfc2l6ZSA9ICgocGkubnJfYml0cyArIDMxKSAvIDMyKSAqIHNpemVvZih1aW50MzJfdCk7CisJCW1lbXNldCh1c2VkLCAwLCBzaXplb2YoKnVzZWQpICogaW5mby0+c2hhbGxvdy0+bnIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfc2hhbGxvdzsgaSsrKSB7CisJCQljb25zdCBzdHJ1Y3QgY29tbWl0ICpjID0gbG9va3VwX2NvbW1pdChzaGExW3NoYWxsb3dbaV1dKTsKKwkJCXVpbnQzMl90ICoqbWFwID0gcmVmX2JpdG1hcF9hdCgmcGkucmVmX2JpdG1hcCwgYyk7CisJCQlpZiAoKm1hcCkKKwkJCQl1c2VkW3NoYWxsb3dbaV1dID0geG1lbWR1cHooKm1hcCwgYml0bWFwX3NpemUpOworCQl9CisJCS8qCisJCSAqIHVucmVhY2hhYmxlIHNoYWxsb3cgY29tbWl0cyBhcmUgbm90IHJlbW92ZWQgZnJvbQorCQkgKiAib3VycyIgYW5kICJ0aGVpcnMiLiBUaGUgdXNlciBpcyBzdXBwb3NlZCB0byBydW4KKwkJICogc3RlcCA3IG9uIGV2ZXJ5IHJlZiBzZXBhcmF0ZWx5IGFuZCBub3QgdHJ1c3QgIm91cnMiCisJCSAqIGFuZCAidGhlaXJzIiBhbnkgbW9yZS4KKwkJICovCisJfSBlbHNlCisJCXBvc3RfYXNzaWduX3NoYWxsb3coaW5mbywgJnBpLnJlZl9iaXRtYXAsIHJlZl9zdGF0dXMpOworCisJY2xlYXJfcmVmX2JpdG1hcCgmcGkucmVmX2JpdG1hcCk7CisJZm9yIChpID0gMDsgaSA8IHBpLnNsYWJfY291bnQ7IGkrKykKKwkJZnJlZShwaS5zbGFiW2ldKTsKKwlmcmVlKHBpLnNsYWIpOworCWZyZWUoc2hhbGxvdyk7Cit9CisKK3N0cnVjdCBjb21taXRfYXJyYXkgeworCXN0cnVjdCBjb21taXQgKipjb21taXRzOworCWludCBuciwgYWxsb2M7Cit9OworCitzdGF0aWMgaW50IGFkZF9yZWYoY29uc3QgY2hhciAqcmVmbmFtZSwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkgICBpbnQgZmxhZ3MsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGNvbW1pdF9hcnJheSAqY2EgPSBjYl9kYXRhOworCUFMTE9DX0dST1coY2EtPmNvbW1pdHMsIGNhLT5uciArIDEsIGNhLT5hbGxvYyk7CisJY2EtPmNvbW1pdHNbY2EtPm5yXSA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlX2dlbnRseShvaWQtPmhhc2gsIDEpOworCWlmIChjYS0+Y29tbWl0c1tjYS0+bnJdKQorCQljYS0+bnIrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX3JlZnN0YXR1cyhpbnQgKnJlZl9zdGF0dXMsIGludCBuciwgdWludDMyX3QgKmJpdG1hcCkKK3sKKwlpbnQgaTsKKwlpZiAoIXJlZl9zdGF0dXMpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJaWYgKGJpdG1hcFtpIC8gMzJdICYgKDEgPDwgKGkgJSAzMikpKQorCQkJcmVmX3N0YXR1c1tpXSsrOworfQorCisvKgorICogU3RlcCA3LCByZWFjaGFiaWxpdHkgdGVzdCBvbiAib3VycyIgYXQgY29tbWl0IGxldmVsCisgKi8KK3N0YXRpYyB2b2lkIHBvc3RfYXNzaWduX3NoYWxsb3coc3RydWN0IHNoYWxsb3dfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgcmVmX2JpdG1hcCAqcmVmX2JpdG1hcCwKKwkJCQlpbnQgKnJlZl9zdGF0dXMpCit7CisJdW5zaWduZWQgY2hhciAoKnNoYTEpWzIwXSA9IGluZm8tPnNoYWxsb3ctPnNoYTE7CisJc3RydWN0IGNvbW1pdCAqYzsKKwl1aW50MzJfdCAqKmJpdG1hcDsKKwlpbnQgZHN0LCBpLCBqOworCWludCBiaXRtYXBfbnIgPSAoaW5mby0+cmVmLT5uciArIDMxKSAvIDMyOworCXN0cnVjdCBjb21taXRfYXJyYXkgY2E7CisKKwl0cmFjZV9wcmludGZfa2V5KCZ0cmFjZV9zaGFsbG93LCAic2hhbGxvdzogcG9zdF9hc3NpZ25fc2hhbGxvd1xuIik7CisJaWYgKHJlZl9zdGF0dXMpCisJCW1lbXNldChyZWZfc3RhdHVzLCAwLCBzaXplb2YoKnJlZl9zdGF0dXMpICogaW5mby0+cmVmLT5ucik7CisKKwkvKiBSZW1vdmUgdW5yZWFjaGFibGUgc2hhbGxvdyBjb21taXRzIGZyb20gInRoZWlycyIgKi8KKwlmb3IgKGkgPSBkc3QgPSAwOyBpIDwgaW5mby0+bnJfdGhlaXJzOyBpKyspIHsKKwkJaWYgKGkgIT0gZHN0KQorCQkJaW5mby0+dGhlaXJzW2RzdF0gPSBpbmZvLT50aGVpcnNbaV07CisJCWMgPSBsb29rdXBfY29tbWl0KHNoYTFbaW5mby0+dGhlaXJzW2ldXSk7CisJCWJpdG1hcCA9IHJlZl9iaXRtYXBfYXQocmVmX2JpdG1hcCwgYyk7CisJCWlmICghKmJpdG1hcCkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgYml0bWFwX25yOyBqKyspCisJCQlpZiAoYml0bWFwWzBdW2pdKSB7CisJCQkJdXBkYXRlX3JlZnN0YXR1cyhyZWZfc3RhdHVzLCBpbmZvLT5yZWYtPm5yLCAqYml0bWFwKTsKKwkJCQlkc3QrKzsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisJaW5mby0+bnJfdGhlaXJzID0gZHN0OworCisJbWVtc2V0KCZjYSwgMCwgc2l6ZW9mKGNhKSk7CisJaGVhZF9yZWYoYWRkX3JlZiwgJmNhKTsKKwlmb3JfZWFjaF9yZWYoYWRkX3JlZiwgJmNhKTsKKworCS8qIFJlbW92ZSB1bnJlYWNoYWJsZSBzaGFsbG93IGNvbW1pdHMgZnJvbSAib3VycyIgKi8KKwlmb3IgKGkgPSBkc3QgPSAwOyBpIDwgaW5mby0+bnJfb3VyczsgaSsrKSB7CisJCWlmIChpICE9IGRzdCkKKwkJCWluZm8tPm91cnNbZHN0XSA9IGluZm8tPm91cnNbaV07CisJCWMgPSBsb29rdXBfY29tbWl0KHNoYTFbaW5mby0+b3Vyc1tpXV0pOworCQliaXRtYXAgPSByZWZfYml0bWFwX2F0KHJlZl9iaXRtYXAsIGMpOworCQlpZiAoISpiaXRtYXApCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IGJpdG1hcF9ucjsgaisrKQorCQkJaWYgKGJpdG1hcFswXVtqXSAmJgorCQkJICAgIC8qIFN0ZXAgNywgcmVhY2hhYmlsaXR5IHRlc3QgYXQgY29tbWl0IGxldmVsICovCisJCQkgICAgIWluX21lcmdlX2Jhc2VzX21hbnkoYywgY2EubnIsIGNhLmNvbW1pdHMpKSB7CisJCQkJdXBkYXRlX3JlZnN0YXR1cyhyZWZfc3RhdHVzLCBpbmZvLT5yZWYtPm5yLCAqYml0bWFwKTsKKwkJCQlkc3QrKzsKKwkJCQlicmVhazsKKwkJCX0KKwl9CisJaW5mby0+bnJfb3VycyA9IGRzdDsKKworCWZyZWUoY2EuY29tbWl0cyk7Cit9CisKKy8qIChEZWxheWVkKSBzdGVwIDcsIHJlYWNoYWJpbGl0eSB0ZXN0IGF0IGNvbW1pdCBsZXZlbCAqLworaW50IGRlbGF5ZWRfcmVhY2hhYmlsaXR5X3Rlc3Qoc3RydWN0IHNoYWxsb3dfaW5mbyAqc2ksIGludCBjKQoreworCWlmIChzaS0+bmVlZF9yZWFjaGFiaWxpdHlfdGVzdFtjXSkgeworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0KHNpLT5zaGFsbG93LT5zaGExW2NdKTsKKworCQlpZiAoIXNpLT5jb21taXRzKSB7CisJCQlzdHJ1Y3QgY29tbWl0X2FycmF5IGNhOworCisJCQltZW1zZXQoJmNhLCAwLCBzaXplb2YoY2EpKTsKKwkJCWhlYWRfcmVmKGFkZF9yZWYsICZjYSk7CisJCQlmb3JfZWFjaF9yZWYoYWRkX3JlZiwgJmNhKTsKKwkJCXNpLT5jb21taXRzID0gY2EuY29tbWl0czsKKwkJCXNpLT5ucl9jb21taXRzID0gY2EubnI7CisJCX0KKworCQlzaS0+cmVhY2hhYmxlW2NdID0gaW5fbWVyZ2VfYmFzZXNfbWFueShjb21taXQsCisJCQkJCQkgICAgICAgc2ktPm5yX2NvbW1pdHMsCisJCQkJCQkgICAgICAgc2ktPmNvbW1pdHMpOworCQlzaS0+bmVlZF9yZWFjaGFiaWxpdHlfdGVzdFtjXSA9IDA7CisJfQorCXJldHVybiBzaS0+cmVhY2hhYmxlW2NdOworfQpkaWZmIC0tZ2l0IGEvc2hlbGwuYyBiL3NoZWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlNjJlNAotLS0gL2Rldi9udWxsCisrKyBiL3NoZWxsLmMKQEAgLTAsMCArMSwyMjMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorCisjZGVmaW5lIENPTU1BTkRfRElSICJnaXQtc2hlbGwtY29tbWFuZHMiCisjZGVmaW5lIEhFTFBfQ09NTUFORCBDT01NQU5EX0RJUiAiL2hlbHAiCisjZGVmaW5lIE5PTE9HSU5fQ09NTUFORCBDT01NQU5EX0RJUiAiL25vLWludGVyYWN0aXZlLWxvZ2luIgorCitzdGF0aWMgaW50IGRvX2dlbmVyaWNfY21kKGNvbnN0IGNoYXIgKm1lLCBjaGFyICphcmcpCit7CisJY29uc3QgY2hhciAqbXlfYXJndls0XTsKKworCXNldHVwX3BhdGgoKTsKKwlpZiAoIWFyZyB8fCAhKGFyZyA9IHNxX2RlcXVvdGUoYXJnKSkpCisJCWRpZSgiYmFkIGFyZ3VtZW50Iik7CisJaWYgKCFzdGFydHNfd2l0aChtZSwgImdpdC0iKSkKKwkJZGllKCJiYWQgY29tbWFuZCIpOworCisJbXlfYXJndlswXSA9IG1lICsgNDsKKwlteV9hcmd2WzFdID0gYXJnOworCW15X2FyZ3ZbMl0gPSBOVUxMOworCisJcmV0dXJuIGV4ZWN2X2dpdF9jbWQobXlfYXJndik7Cit9CisKK3N0YXRpYyBpbnQgZG9fY3ZzX2NtZChjb25zdCBjaGFyICptZSwgY2hhciAqYXJnKQoreworCWNvbnN0IGNoYXIgKmN2c3NlcnZlcl9hcmd2WzNdID0geworCQkiY3Zzc2VydmVyIiwgInNlcnZlciIsIE5VTEwKKwl9OworCisJaWYgKCFhcmcgfHwgc3RyY21wKGFyZywgInNlcnZlciIpKQorCQlkaWUoImdpdC1jdnNzZXJ2ZXIgb25seSBoYW5kbGVzIHNlcnZlcjogJXMiLCBhcmcpOworCisJc2V0dXBfcGF0aCgpOworCXJldHVybiBleGVjdl9naXRfY21kKGN2c3NlcnZlcl9hcmd2KTsKK30KKworc3RhdGljIGludCBpc192YWxpZF9jbWRfbmFtZShjb25zdCBjaGFyICpjbWQpCit7CisJLyogVGVzdCBjb21tYW5kIGNvbnRhaW5zIG5vIC4gb3IgLyBjaGFyYWN0ZXJzICovCisJcmV0dXJuIGNtZFtzdHJjc3BuKGNtZCwgIi4vIildID09ICdcMCc7Cit9CisKK3N0YXRpYyBjaGFyICptYWtlX2NtZChjb25zdCBjaGFyICpwcm9nKQoreworCXJldHVybiB4c3RyZm10KCIlcy8lcyIsIENPTU1BTkRfRElSLCBwcm9nKTsKK30KKworc3RhdGljIHZvaWQgY2RfdG9faG9tZWRpcih2b2lkKQoreworCWNvbnN0IGNoYXIgKmhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKwlpZiAoIWhvbWUpCisJCWRpZSgiY291bGQgbm90IGRldGVybWluZSB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnk7IEhPTUUgaXMgdW5zZXQiKTsKKwlpZiAoY2hkaXIoaG9tZSkgPT0gLTEpCisJCWRpZSgiY291bGQgbm90IGNoZGlyIHRvIHVzZXIncyBob21lIGRpcmVjdG9yeSIpOworfQorCitzdGF0aWMgdm9pZCBydW5fc2hlbGwodm9pZCkKK3sKKwlpbnQgZG9uZSA9IDA7CisJc3RhdGljIGNvbnN0IGNoYXIgKmhlbHBfYXJndltdID0geyBIRUxQX0NPTU1BTkQsIE5VTEwgfTsKKworCWlmICghYWNjZXNzKE5PTE9HSU5fQ09NTUFORCwgRl9PSykpIHsKKwkJLyogSW50ZXJhY3RpdmUgbG9naW4gZGlzYWJsZWQuICovCisJCWNvbnN0IGNoYXIgKmFyZ3ZbXSA9IHsgTk9MT0dJTl9DT01NQU5ELCBOVUxMIH07CisJCWludCBzdGF0dXM7CisKKwkJc3RhdHVzID0gcnVuX2NvbW1hbmRfdl9vcHQoYXJndiwgMCk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZXhpdCgxMjcpOworCQlleGl0KHN0YXR1cyk7CisJfQorCisJLyogUHJpbnQgaGVscCBpZiBlbmFibGVkICovCisJcnVuX2NvbW1hbmRfdl9vcHQoaGVscF9hcmd2LCBSVU5fU0lMRU5UX0VYRUNfRkFJTFVSRSk7CisKKwlkbyB7CisJCXN0cnVjdCBzdHJidWYgbGluZSA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpwcm9nOworCQljaGFyICpmdWxsX2NtZDsKKwkJY2hhciAqcmF3YXJnczsKKwkJY2hhciAqc3BsaXRfYXJnczsKKwkJY29uc3QgY2hhciAqKmFyZ3Y7CisJCWludCBjb2RlOworCQlpbnQgY291bnQ7CisKKwkJZnByaW50ZihzdGRlcnIsICJnaXQ+ICIpOworCQlpZiAoc3RyYnVmX2dldGxpbmUoJmxpbmUsIHN0ZGluLCAnXG4nKSA9PSBFT0YpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lKTsKKwkJCWJyZWFrOworCQl9CisJCXN0cmJ1Zl90cmltKCZsaW5lKTsKKwkJcmF3YXJncyA9IHN0cmJ1Zl9kZXRhY2goJmxpbmUsIE5VTEwpOworCQlzcGxpdF9hcmdzID0geHN0cmR1cChyYXdhcmdzKTsKKwkJY291bnQgPSBzcGxpdF9jbWRsaW5lKHNwbGl0X2FyZ3MsICZhcmd2KTsKKwkJaWYgKGNvdW50IDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIGNvbW1hbmQgZm9ybWF0ICclcyc6ICVzXG4iLCByYXdhcmdzLAorCQkJCXNwbGl0X2NtZGxpbmVfc3RyZXJyb3IoY291bnQpKTsKKwkJCWZyZWUoc3BsaXRfYXJncyk7CisJCQlmcmVlKHJhd2FyZ3MpOworCQkJY29udGludWU7CisJCX0KKworCQlwcm9nID0gYXJndlswXTsKKwkJaWYgKCFzdHJjbXAocHJvZywgIiIpKSB7CisJCX0gZWxzZSBpZiAoIXN0cmNtcChwcm9nLCAicXVpdCIpIHx8ICFzdHJjbXAocHJvZywgImxvZ291dCIpIHx8CisJCQkgICAhc3RyY21wKHByb2csICJleGl0IikgfHwgIXN0cmNtcChwcm9nLCAiYnllIikpIHsKKwkJCWRvbmUgPSAxOworCQl9IGVsc2UgaWYgKGlzX3ZhbGlkX2NtZF9uYW1lKHByb2cpKSB7CisJCQlmdWxsX2NtZCA9IG1ha2VfY21kKHByb2cpOworCQkJYXJndlswXSA9IGZ1bGxfY21kOworCQkJY29kZSA9IHJ1bl9jb21tYW5kX3Zfb3B0KGFyZ3YsIFJVTl9TSUxFTlRfRVhFQ19GQUlMVVJFKTsKKwkJCWlmIChjb2RlID09IC0xICYmIGVycm5vID09IEVOT0VOVCkgeworCQkJCWZwcmludGYoc3RkZXJyLCAidW5yZWNvZ25pemVkIGNvbW1hbmQgJyVzJ1xuIiwgcHJvZyk7CisJCQl9CisJCQlmcmVlKGZ1bGxfY21kKTsKKwkJfSBlbHNlIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBjb21tYW5kIGZvcm1hdCAnJXMnXG4iLCBwcm9nKTsKKwkJfQorCisJCWZyZWUoYXJndik7CisJCWZyZWUocmF3YXJncyk7CisJfSB3aGlsZSAoIWRvbmUpOworfQorCitzdGF0aWMgc3RydWN0IGNvbW1hbmRzIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAoKmV4ZWMpKGNvbnN0IGNoYXIgKm1lLCBjaGFyICphcmcpOworfSBjbWRfbGlzdFtdID0geworCXsgImdpdC1yZWNlaXZlLXBhY2siLCBkb19nZW5lcmljX2NtZCB9LAorCXsgImdpdC11cGxvYWQtcGFjayIsIGRvX2dlbmVyaWNfY21kIH0sCisJeyAiZ2l0LXVwbG9hZC1hcmNoaXZlIiwgZG9fZ2VuZXJpY19jbWQgfSwKKwl7ICJjdnMiLCBkb19jdnNfY21kIH0sCisJeyBOVUxMIH0sCit9OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY2hhciAqcHJvZzsKKwljb25zdCBjaGFyICoqdXNlcl9hcmd2OworCXN0cnVjdCBjb21tYW5kcyAqY21kOworCWludCBjb3VudDsKKworCWdpdF9zZXR1cF9nZXR0ZXh0KCk7CisKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCisJLyoKKwkgKiBBbHdheXMgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIDAvMS8yIHRvIGF2b2lkIGNsb2JiZXJpbmcgZmlsZXMKKwkgKiBpbiBkaWUoKS4gIEl0IGFsc28gYXZvaWRzIG1lc3NpbmcgdXAgd2hlbiB0aGUgcGlwZXMgYXJlIGR1cCdlZAorCSAqIG9udG8gc3RkaW4vc3Rkb3V0L3N0ZGVyciBpbiB0aGUgY2hpbGQgcHJvY2Vzc2VzIHdlIHNwYXduLgorCSAqLworCXNhbml0aXplX3N0ZGZkcygpOworCisJLyoKKwkgKiBTcGVjaWFsIGhhY2sgdG8gcHJldGVuZCB0byBiZSBhIENWUyBzZXJ2ZXIKKwkgKi8KKwlpZiAoYXJnYyA9PSAyICYmICFzdHJjbXAoYXJndlsxXSwgImN2cyBzZXJ2ZXIiKSkgeworCQlhcmd2LS07CisJfSBlbHNlIGlmIChhcmdjID09IDEpIHsKKwkJLyogQWxsb3cgdGhlIHVzZXIgdG8gcnVuIGFuIGludGVyYWN0aXZlIHNoZWxsICovCisJCWNkX3RvX2hvbWVkaXIoKTsKKwkJaWYgKGFjY2VzcyhDT01NQU5EX0RJUiwgUl9PSyB8IFhfT0spID09IC0xKSB7CisJCQlkaWUoIkludGVyYWN0aXZlIGdpdCBzaGVsbCBpcyBub3QgZW5hYmxlZC5cbiIKKwkJCSAgICAiaGludDogfi8iIENPTU1BTkRfRElSICIgc2hvdWxkIGV4aXN0ICIKKwkJCSAgICAiYW5kIGhhdmUgcmVhZCBhbmQgZXhlY3V0ZSBhY2Nlc3MuIik7CisJCX0KKwkJcnVuX3NoZWxsKCk7CisJCWV4aXQoMCk7CisJfSBlbHNlIGlmIChhcmdjICE9IDMgfHwgc3RyY21wKGFyZ3ZbMV0sICItYyIpKSB7CisJCS8qCisJCSAqIFdlIGRvIG5vdCBhY2NlcHQgYW55IG90aGVyIG1vZGVzIGV4Y2VwdCAiLWMiIGZvbGxvd2VkIGJ5CisJCSAqICJjbWQgYXJnIiwgd2hlcmUgImNtZCIgaXMgYSB2ZXJ5IGxpbWl0ZWQgc3Vic2V0IG9mIGdpdAorCQkgKiBjb21tYW5kcyBvciBhIGNvbW1hbmQgaW4gdGhlIENPTU1BTkRfRElSCisJCSAqLworCQlkaWUoIlJ1biB3aXRoIG5vIGFyZ3VtZW50cyBvciB3aXRoIC1jIGNtZCIpOworCX0KKworCXByb2cgPSB4c3RyZHVwKGFyZ3ZbMl0pOworCWlmICghc3RybmNtcChwcm9nLCAiZ2l0IiwgMykgJiYgaXNzcGFjZShwcm9nWzNdKSkKKwkJLyogQWNjZXB0ICJnaXQgZm9vIiBhcyBpZiB0aGUgY2FsbGVyIHNhaWQgImdpdC1mb28iLiAqLworCQlwcm9nWzNdID0gJy0nOworCisJZm9yIChjbWQgPSBjbWRfbGlzdCA7IGNtZC0+bmFtZSA7IGNtZCsrKSB7CisJCWludCBsZW4gPSBzdHJsZW4oY21kLT5uYW1lKTsKKwkJY2hhciAqYXJnOworCQlpZiAoc3RybmNtcChjbWQtPm5hbWUsIHByb2csIGxlbikpCisJCQljb250aW51ZTsKKwkJYXJnID0gTlVMTDsKKwkJc3dpdGNoIChwcm9nW2xlbl0pIHsKKwkJY2FzZSAnXDAnOgorCQkJYXJnID0gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlICcgJzoKKwkJCWFyZyA9IHByb2cgKyBsZW4gKyAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCQlleGl0KGNtZC0+ZXhlYyhjbWQtPm5hbWUsIGFyZykpOworCX0KKworCWNkX3RvX2hvbWVkaXIoKTsKKwljb3VudCA9IHNwbGl0X2NtZGxpbmUocHJvZywgJnVzZXJfYXJndik7CisJaWYgKGNvdW50ID49IDApIHsKKwkJaWYgKGlzX3ZhbGlkX2NtZF9uYW1lKHVzZXJfYXJndlswXSkpIHsKKwkJCXByb2cgPSBtYWtlX2NtZCh1c2VyX2FyZ3ZbMF0pOworCQkJdXNlcl9hcmd2WzBdID0gcHJvZzsKKwkJCWV4ZWN2KHVzZXJfYXJndlswXSwgKGNoYXIgKmNvbnN0ICopIHVzZXJfYXJndik7CisJCX0KKwkJZnJlZShwcm9nKTsKKwkJZnJlZSh1c2VyX2FyZ3YpOworCQlkaWUoInVucmVjb2duaXplZCBjb21tYW5kICclcyciLCBhcmd2WzJdKTsKKwl9IGVsc2UgeworCQlmcmVlKHByb2cpOworCQlkaWUoImludmFsaWQgY29tbWFuZCBmb3JtYXQgJyVzJzogJXMiLCBhcmd2WzJdLAorCQkgICAgc3BsaXRfY21kbGluZV9zdHJlcnJvcihjb3VudCkpOworCX0KK30KZGlmZiAtLWdpdCBhL3Nob3J0bG9nLmggYi9zaG9ydGxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNGY4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9zaG9ydGxvZy5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgU0hPUlRMT0dfSAorI2RlZmluZSBTSE9SVExPR19ICisKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCitzdHJ1Y3Qgc2hvcnRsb2cgeworCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0OworCWludCBzdW1tYXJ5OworCWludCB3cmFwX2xpbmVzOworCWludCBzb3J0X2J5X251bWJlcjsKKwlpbnQgd3JhcDsKKwlpbnQgaW4xOworCWludCBpbjI7CisJaW50IHVzZXJfZm9ybWF0OworCWludCBhYmJyZXY7CisKKwljaGFyICpjb21tb25fcmVwb19wcmVmaXg7CisJaW50IGVtYWlsOworCXN0cnVjdCBzdHJpbmdfbGlzdCBtYWlsbWFwOworfTsKKwordm9pZCBzaG9ydGxvZ19pbml0KHN0cnVjdCBzaG9ydGxvZyAqbG9nKTsKKwordm9pZCBzaG9ydGxvZ19hZGRfY29tbWl0KHN0cnVjdCBzaG9ydGxvZyAqbG9nLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpOworCit2b2lkIHNob3J0bG9nX291dHB1dChzdHJ1Y3Qgc2hvcnRsb2cgKmxvZyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2hvdy1pbmRleC5jIGIvc2hvdy1pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZTQ5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9zaG93LWluZGV4LmMKQEAgLTAsMCArMSw4NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicGFjay5oIgorCitzdGF0aWMgY29uc3QgY2hhciBzaG93X2luZGV4X3VzYWdlW10gPQorImdpdCBzaG93LWluZGV4IjsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBpOworCXVuc2lnbmVkIG5yOworCXVuc2lnbmVkIGludCB2ZXJzaW9uOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgdG9wX2luZGV4WzI1Nl07CisKKwlnaXRfc2V0dXBfZ2V0dGV4dCgpOworCisJaWYgKGFyZ2MgIT0gMSkKKwkJdXNhZ2Uoc2hvd19pbmRleF91c2FnZSk7CisJaWYgKGZyZWFkKHRvcF9pbmRleCwgMiAqIDQsIDEsIHN0ZGluKSAhPSAxKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGhlYWRlciIpOworCWlmICh0b3BfaW5kZXhbMF0gPT0gaHRvbmwoUEFDS19JRFhfU0lHTkFUVVJFKSkgeworCQl2ZXJzaW9uID0gbnRvaGwodG9wX2luZGV4WzFdKTsKKwkJaWYgKHZlcnNpb24gPCAyIHx8IHZlcnNpb24gPiAyKQorCQkJZGllKCJ1bmtub3duIGluZGV4IHZlcnNpb24iKTsKKwkJaWYgKGZyZWFkKHRvcF9pbmRleCwgMjU2ICogNCwgMSwgc3RkaW4pICE9IDEpCisJCQlkaWUoInVuYWJsZSB0byByZWFkIGluZGV4Iik7CisJfSBlbHNlIHsKKwkJdmVyc2lvbiA9IDE7CisJCWlmIChmcmVhZCgmdG9wX2luZGV4WzJdLCAyNTQgKiA0LCAxLCBzdGRpbikgIT0gMSkKKwkJCWRpZSgidW5hYmxlIHRvIHJlYWQgaW5kZXgiKTsKKwl9CisJbnIgPSAwOworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQl1bnNpZ25lZCBuID0gbnRvaGwodG9wX2luZGV4W2ldKTsKKwkJaWYgKG4gPCBucikKKwkJCWRpZSgiY29ycnVwdCBpbmRleCBmaWxlIik7CisJCW5yID0gbjsKKwl9CisJaWYgKHZlcnNpb24gPT0gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQkJdW5zaWduZWQgaW50IG9mZnNldCwgZW50cnlbNl07CisKKwkJCWlmIChmcmVhZChlbnRyeSwgNCArIDIwLCAxLCBzdGRpbikgIT0gMSkKKwkJCQlkaWUoInVuYWJsZSB0byByZWFkIGVudHJ5ICV1LyV1IiwgaSwgbnIpOworCQkJb2Zmc2V0ID0gbnRvaGwoZW50cnlbMF0pOworCQkJcHJpbnRmKCIldSAlc1xuIiwgb2Zmc2V0LCBzaGExX3RvX2hleCgodm9pZCAqKShlbnRyeSsxKSkpOworCQl9CisJfSBlbHNlIHsKKwkJdW5zaWduZWQgb2ZmNjRfbnIgPSAwOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwkJCXVpbnQzMl90IGNyYzsKKwkJCXVpbnQzMl90IG9mZjsKKwkJfSAqZW50cmllcyA9IHhtYWxsb2MobnIgKiBzaXplb2YoZW50cmllc1swXSkpOworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKKwkJCWlmIChmcmVhZChlbnRyaWVzW2ldLnNoYTEsIDIwLCAxLCBzdGRpbikgIT0gMSkKKwkJCQlkaWUoInVuYWJsZSB0byByZWFkIHNoYTEgJXUvJXUiLCBpLCBucik7CisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQkJaWYgKGZyZWFkKCZlbnRyaWVzW2ldLmNyYywgNCwgMSwgc3RkaW4pICE9IDEpCisJCQkJZGllKCJ1bmFibGUgdG8gcmVhZCBjcmMgJXUvJXUiLCBpLCBucik7CisJCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorCQkJaWYgKGZyZWFkKCZlbnRyaWVzW2ldLm9mZiwgNCwgMSwgc3RkaW4pICE9IDEpCisJCQkJZGllKCJ1bmFibGUgdG8gcmVhZCAzMmIgb2Zmc2V0ICV1LyV1IiwgaSwgbnIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQkJdWludDY0X3Qgb2Zmc2V0OworCQkJdWludDMyX3Qgb2ZmID0gbnRvaGwoZW50cmllc1tpXS5vZmYpOworCQkJaWYgKCEob2ZmICYgMHg4MDAwMDAwMCkpIHsKKwkJCQlvZmZzZXQgPSBvZmY7CisJCQl9IGVsc2UgeworCQkJCXVpbnQzMl90IG9mZjY0WzJdOworCQkJCWlmICgob2ZmICYgMHg3ZmZmZmZmZikgIT0gb2ZmNjRfbnIpCisJCQkJCWRpZSgiaW5jb25zaXN0ZW50IDY0YiBvZmZzZXQgaW5kZXgiKTsKKwkJCQlpZiAoZnJlYWQob2ZmNjQsIDgsIDEsIHN0ZGluKSAhPSAxKQorCQkJCQlkaWUoInVuYWJsZSB0byByZWFkIDY0YiBvZmZzZXQgJXUiLCBvZmY2NF9ucik7CisJCQkJb2Zmc2V0ID0gKCgodWludDY0X3QpbnRvaGwob2ZmNjRbMF0pKSA8PCAzMikgfAorCQkJCQkJICAgICBudG9obChvZmY2NFsxXSk7CisJCQkJb2ZmNjRfbnIrKzsKKwkJCX0KKwkJCXByaW50ZigiJSIgUFJJdU1BWCAiICVzICglMDgiUFJJeDMyIilcbiIsCisJCQkgICAgICAgKHVpbnRtYXhfdCkgb2Zmc2V0LAorCQkJICAgICAgIHNoYTFfdG9faGV4KGVudHJpZXNbaV0uc2hhMSksCisJCQkgICAgICAgbnRvaGwoZW50cmllc1tpXS5jcmMpKTsKKwkJfQorCQlmcmVlKGVudHJpZXMpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NpZGViYW5kLmMgYi9zaWRlYmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZThhZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zaWRlYmFuZC5jCkBAIC0wLDAgKzEsMTUyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisKKy8qCisgKiBSZWNlaXZlIG11bHRpcGxleGVkIG91dHB1dCBzdHJlYW0gb3ZlciBnaXQgbmF0aXZlIHByb3RvY29sLgorICogaW5fc3RyZWFtIGlzIHRoZSBpbnB1dCBzdHJlYW0gZnJvbSB0aGUgcmVtb3RlLCB3aGljaCBjYXJyaWVzIGRhdGEKKyAqIGluIHBrdF9saW5lIGZvcm1hdCB3aXRoIGJhbmQgZGVzaWduYXRvci4gIERlbXVsdGlwbGV4IGl0IGludG8gb3V0CisgKiBhbmQgZXJyIGFuZCByZXR1cm4gZXJyb3IgYXBwcm9wcmlhdGVseS4gIEJhbmQgIzEgY2FycmllcyB0aGUKKyAqIHByaW1hcnkgcGF5bG9hZC4gIFRoaW5ncyBjb21pbmcgb3ZlciBiYW5kICMyIGlzIG5vdCBuZWNlc3NhcmlseQorICogZXJyb3I7IHRoZXkgYXJlIHVzdWFsbHkgaW5mb3JtYXRpdmUgbWVzc2FnZSBvbiB0aGUgc3RhbmRhcmQgZXJyb3IKKyAqIHN0cmVhbSwgYWthICJ2ZXJib3NlIikuICBBIG1lc3NhZ2Ugb3ZlciBiYW5kICMzIGlzIGEgc2lnbmFsIHRoYXQKKyAqIHRoZSByZW1vdGUgZGllZCB1bmV4cGVjdGVkbHkuICBBIGZsdXNoKCkgY29uY2x1ZGVzIHRoZSBzdHJlYW0uCisgKi8KKworI2RlZmluZSBQUkVGSVggInJlbW90ZToiCisKKyNkZWZpbmUgQU5TSV9TVUZGSVggIlwwMzNbSyIKKyNkZWZpbmUgRFVNQl9TVUZGSVggIiAgICAgICAgIgorCisjZGVmaW5lIEZJWF9TSVpFIDEwICAvKiBsYXJnZSBlbm91Z2ggZm9yIGFueSBvZiB0aGUgYWJvdmUgKi8KKworaW50IHJlY3Zfc2lkZWJhbmQoY29uc3QgY2hhciAqbWUsIGludCBpbl9zdHJlYW0sIGludCBvdXQpCit7CisJdW5zaWduZWQgcGYgPSBzdHJsZW4oUFJFRklYKTsKKwl1bnNpZ25lZCBzZjsKKwljaGFyIGJ1ZltMQVJHRV9QQUNLRVRfTUFYICsgMipGSVhfU0laRV07CisJY2hhciAqc3VmZml4LCAqdGVybTsKKwlpbnQgc2tpcF9wZiA9IDA7CisKKwltZW1jcHkoYnVmLCBQUkVGSVgsIHBmKTsKKwl0ZXJtID0gZ2V0ZW52KCJURVJNIik7CisJaWYgKGlzYXR0eSgyKSAmJiB0ZXJtICYmIHN0cmNtcCh0ZXJtLCAiZHVtYiIpKQorCQlzdWZmaXggPSBBTlNJX1NVRkZJWDsKKwllbHNlCisJCXN1ZmZpeCA9IERVTUJfU1VGRklYOworCXNmID0gc3RybGVuKHN1ZmZpeCk7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgYmFuZCwgbGVuOworCQlsZW4gPSBwYWNrZXRfcmVhZChpbl9zdHJlYW0sIE5VTEwsIE5VTEwsIGJ1ZiArIHBmLCBMQVJHRV9QQUNLRVRfTUFYLCAwKTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChsZW4gPCAxKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBwcm90b2NvbCBlcnJvcjogbm8gYmFuZCBkZXNpZ25hdG9yXG4iLCBtZSk7CisJCQlyZXR1cm4gU0lERUJBTkRfUFJPVE9DT0xfRVJST1I7CisJCX0KKwkJYmFuZCA9IGJ1ZltwZl0gJiAweGZmOworCQlsZW4tLTsKKwkJc3dpdGNoIChiYW5kKSB7CisJCWNhc2UgMzoKKwkJCWJ1ZltwZl0gPSAnICc7CisJCQlidWZbcGYrMStsZW5dID0gJ1wwJzsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGJ1Zik7CisJCQlyZXR1cm4gU0lERUJBTkRfUkVNT1RFX0VSUk9SOworCQljYXNlIDI6CisJCQlidWZbcGZdID0gJyAnOworCQkJZG8geworCQkJCWNoYXIgKmIgPSBidWY7CisJCQkJaW50IGJyayA9IDA7CisKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBsYXN0IGJ1ZmZlciBkaWRuJ3QgZW5kIHdpdGggYSBsaW5lCisJCQkJICogYnJlYWsgdGhlbiB3ZSBzaG91bGQgbm90IHByaW50IGEgcHJlZml4CisJCQkJICogdGhpcyB0aW1lIGFyb3VuZC4KKwkJCQkgKi8KKwkJCQlpZiAoc2tpcF9wZikgeworCQkJCQliICs9IHBmKzE7CisJCQkJfSBlbHNlIHsKKwkJCQkJbGVuICs9IHBmKzE7CisJCQkJCWJyayArPSBwZisxOworCQkJCX0KKworCQkJCS8qIExvb2sgZm9yIGEgbGluZSBicmVhay4gKi8KKwkJCQlmb3IgKDs7KSB7CisJCQkJCWJyaysrOworCQkJCQlpZiAoYnJrID4gbGVuKSB7CisJCQkJCQlicmsgPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYgKGJbYnJrLTFdID09ICdcbicgfHwKKwkJCQkJICAgIGJbYnJrLTFdID09ICdccicpCisJCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQkvKgorCQkJCSAqIExldCdzIGluc2VydCBhIHN1ZmZpeCB0byBjbGVhciB0aGUgZW5kCisJCQkJICogb2YgdGhlIHNjcmVlbiBsaW5lIGlmIGEgbGluZSBicmVhayB3YXMKKwkJCQkgKiBmb3VuZC4gIEFsc28sIGlmIHdlIGRvbid0IHNraXAgdGhlCisJCQkJICogcHJlZml4LCB0aGVuIGEgbm9uLWVtcHR5IHN0cmluZyBtdXN0IGJlCisJCQkJICogcHJlc2VudCB0b28uCisJCQkJICovCisJCQkJaWYgKGJyayA+IChza2lwX3BmID8gMCA6IChwZisxICsgMSkpKSB7CisJCQkJCWNoYXIgc2F2ZVtGSVhfU0laRV07CisJCQkJCW1lbWNweShzYXZlLCBiICsgYnJrLCBzZik7CisJCQkJCWJbYnJrICsgc2YgLSAxXSA9IGJbYnJrIC0gMV07CisJCQkJCW1lbWNweShiICsgYnJrIC0gMSwgc3VmZml4LCBzZik7CisJCQkJCWZwcmludGYoc3RkZXJyLCAiJS4qcyIsIGJyayArIHNmLCBiKTsKKwkJCQkJbWVtY3B5KGIgKyBicmssIHNhdmUsIHNmKTsKKwkJCQkJbGVuIC09IGJyazsKKwkJCQl9IGVsc2UgeworCQkJCQlpbnQgbCA9IGJyayA/IGJyayA6IGxlbjsKKwkJCQkJZnByaW50ZihzdGRlcnIsICIlLipzIiwgbCwgYik7CisJCQkJCWxlbiAtPSBsOworCQkJCX0KKworCQkJCXNraXBfcGYgPSAhYnJrOworCQkJCW1lbW1vdmUoYnVmICsgcGYrMSwgYiArIGJyaywgbGVuKTsKKwkJCX0gd2hpbGUgKGxlbik7CisJCQljb250aW51ZTsKKwkJY2FzZSAxOgorCQkJd3JpdGVfb3JfZGllKG91dCwgYnVmICsgcGYrMSwgbGVuKTsKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsICIlczogcHJvdG9jb2wgZXJyb3I6IGJhZCBiYW5kICMlZFxuIiwKKwkJCQltZSwgYmFuZCk7CisJCQlyZXR1cm4gU0lERUJBTkRfUFJPVE9DT0xfRVJST1I7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBmZCBpcyBjb25uZWN0ZWQgdG8gdGhlIHJlbW90ZSBzaWRlOyBzZW5kIHRoZSBzaWRlYmFuZCBkYXRhCisgKiBvdmVyIG11bHRpcGxleGVkIHBhY2tldCBzdHJlYW0uCisgKi8KK3NzaXplX3Qgc2VuZF9zaWRlYmFuZChpbnQgZmQsIGludCBiYW5kLCBjb25zdCBjaGFyICpkYXRhLCBzc2l6ZV90IHN6LCBpbnQgcGFja2V0X21heCkKK3sKKwlzc2l6ZV90IHNzeiA9IHN6OworCWNvbnN0IGNoYXIgKnAgPSBkYXRhOworCisJd2hpbGUgKHN6KSB7CisJCXVuc2lnbmVkIG47CisJCWNoYXIgaGRyWzVdOworCisJCW4gPSBzejsKKwkJaWYgKHBhY2tldF9tYXggLSA1IDwgbikKKwkJCW4gPSBwYWNrZXRfbWF4IC0gNTsKKwkJaWYgKDAgPD0gYmFuZCkgeworCQkJeHNucHJpbnRmKGhkciwgc2l6ZW9mKGhkciksICIlMDR4IiwgbiArIDUpOworCQkJaGRyWzRdID0gYmFuZDsKKwkJCXdyaXRlX29yX2RpZShmZCwgaGRyLCA1KTsKKwkJfSBlbHNlIHsKKwkJCXhzbnByaW50ZihoZHIsIHNpemVvZihoZHIpLCAiJTA0eCIsIG4gKyA0KTsKKwkJCXdyaXRlX29yX2RpZShmZCwgaGRyLCA0KTsKKwkJfQorCQl3cml0ZV9vcl9kaWUoZmQsIHAsIG4pOworCQlwICs9IG47CisJCXN6IC09IG47CisJfQorCXJldHVybiBzc3o7Cit9CmRpZmYgLS1naXQgYS9zaWRlYmFuZC5oIGIvc2lkZWJhbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDZiZWQwCi0tLSAvZGV2L251bGwKKysrIGIvc2lkZWJhbmQuaApAQCAtMCwwICsxLDEwIEBACisjaWZuZGVmIFNJREVCQU5EX0gKKyNkZWZpbmUgU0lERUJBTkRfSAorCisjZGVmaW5lIFNJREVCQU5EX1BST1RPQ09MX0VSUk9SIC0yCisjZGVmaW5lIFNJREVCQU5EX1JFTU9URV9FUlJPUiAtMQorCitpbnQgcmVjdl9zaWRlYmFuZChjb25zdCBjaGFyICptZSwgaW50IGluX3N0cmVhbSwgaW50IG91dCk7Citzc2l6ZV90IHNlbmRfc2lkZWJhbmQoaW50IGZkLCBpbnQgYmFuZCwgY29uc3QgY2hhciAqZGF0YSwgc3NpemVfdCBzeiwgaW50IHBhY2tldF9tYXgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NpZ2NoYWluLmMgYi9zaWdjaGFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTM3NWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdjaGFpbi5jCkBAIC0wLDAgKzEsNTIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisKKyNkZWZpbmUgU0lHQ0hBSU5fTUFYX1NJR05BTFMgMzIKKworc3RydWN0IHNpZ2NoYWluX3NpZ25hbCB7CisJc2lnY2hhaW5fZnVuICpvbGQ7CisJaW50IG47CisJaW50IGFsbG9jOworfTsKK3N0YXRpYyBzdHJ1Y3Qgc2lnY2hhaW5fc2lnbmFsIHNpZ25hbHNbU0lHQ0hBSU5fTUFYX1NJR05BTFNdOworCitzdGF0aWMgdm9pZCBjaGVja19zaWdudW0oaW50IHNpZykKK3sKKwlpZiAoc2lnIDwgMSB8fCBzaWcgPj0gU0lHQ0hBSU5fTUFYX1NJR05BTFMpCisJCWRpZSgiQlVHOiBzaWduYWwgb3V0IG9mIHJhbmdlOiAlZCIsIHNpZyk7Cit9CisKK2ludCBzaWdjaGFpbl9wdXNoKGludCBzaWcsIHNpZ2NoYWluX2Z1biBmKQoreworCXN0cnVjdCBzaWdjaGFpbl9zaWduYWwgKnMgPSBzaWduYWxzICsgc2lnOworCWNoZWNrX3NpZ251bShzaWcpOworCisJQUxMT0NfR1JPVyhzLT5vbGQsIHMtPm4gKyAxLCBzLT5hbGxvYyk7CisJcy0+b2xkW3MtPm5dID0gc2lnbmFsKHNpZywgZik7CisJaWYgKHMtPm9sZFtzLT5uXSA9PSBTSUdfRVJSKQorCQlyZXR1cm4gLTE7CisJcy0+bisrOworCXJldHVybiAwOworfQorCitpbnQgc2lnY2hhaW5fcG9wKGludCBzaWcpCit7CisJc3RydWN0IHNpZ2NoYWluX3NpZ25hbCAqcyA9IHNpZ25hbHMgKyBzaWc7CisJY2hlY2tfc2lnbnVtKHNpZyk7CisJaWYgKHMtPm4gPCAxKQorCQlyZXR1cm4gMDsKKworCWlmIChzaWduYWwoc2lnLCBzLT5vbGRbcy0+biAtIDFdKSA9PSBTSUdfRVJSKQorCQlyZXR1cm4gLTE7CisJcy0+bi0tOworCXJldHVybiAwOworfQorCit2b2lkIHNpZ2NoYWluX3B1c2hfY29tbW9uKHNpZ2NoYWluX2Z1biBmKQoreworCXNpZ2NoYWluX3B1c2goU0lHSU5ULCBmKTsKKwlzaWdjaGFpbl9wdXNoKFNJR0hVUCwgZik7CisJc2lnY2hhaW5fcHVzaChTSUdURVJNLCBmKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1FVSVQsIGYpOworCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgZik7Cit9CmRpZmYgLS1naXQgYS9zaWdjaGFpbi5oIGIvc2lnY2hhaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTgwODNiCi0tLSAvZGV2L251bGwKKysrIGIvc2lnY2hhaW4uaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIFNJR0NIQUlOX0gKKyNkZWZpbmUgU0lHQ0hBSU5fSAorCit0eXBlZGVmIHZvaWQgKCpzaWdjaGFpbl9mdW4pKGludCk7CisKK2ludCBzaWdjaGFpbl9wdXNoKGludCBzaWcsIHNpZ2NoYWluX2Z1biBmKTsKK2ludCBzaWdjaGFpbl9wb3AoaW50IHNpZyk7CisKK3ZvaWQgc2lnY2hhaW5fcHVzaF9jb21tb24oc2lnY2hhaW5fZnVuIGYpOworCisjZW5kaWYgLyogU0lHQ0hBSU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3BsaXQtaW5kZXguYyBiL3NwbGl0LWluZGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4Yjc4MAotLS0gL2Rldi9udWxsCisrKyBiL3NwbGl0LWluZGV4LmMKQEAgLTAsMCArMSwzMjEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNwbGl0LWluZGV4LmgiCisjaW5jbHVkZSAiZXdhaC9ld29rLmgiCisKK3N0cnVjdCBzcGxpdF9pbmRleCAqaW5pdF9zcGxpdF9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlpZiAoIWlzdGF0ZS0+c3BsaXRfaW5kZXgpIHsKKwkJaXN0YXRlLT5zcGxpdF9pbmRleCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCppc3RhdGUtPnNwbGl0X2luZGV4KSk7CisJCWlzdGF0ZS0+c3BsaXRfaW5kZXgtPnJlZmNvdW50ID0gMTsKKwl9CisJcmV0dXJuIGlzdGF0ZS0+c3BsaXRfaW5kZXg7Cit9CisKK2ludCByZWFkX2xpbmtfZXh0ZW5zaW9uKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJIGNvbnN0IHZvaWQgKmRhdGFfLCB1bnNpZ25lZCBsb25nIHN6KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEgPSBkYXRhXzsKKwlzdHJ1Y3Qgc3BsaXRfaW5kZXggKnNpOworCWludCByZXQ7CisKKwlpZiAoc3ogPCAyMCkKKwkJcmV0dXJuIGVycm9yKCJjb3JydXB0IGxpbmsgZXh0ZW5zaW9uICh0b28gc2hvcnQpIik7CisJc2kgPSBpbml0X3NwbGl0X2luZGV4KGlzdGF0ZSk7CisJaGFzaGNweShzaS0+YmFzZV9zaGExLCBkYXRhKTsKKwlkYXRhICs9IDIwOworCXN6IC09IDIwOworCWlmICghc3opCisJCXJldHVybiAwOworCXNpLT5kZWxldGVfYml0bWFwID0gZXdhaF9uZXcoKTsKKwlyZXQgPSBld2FoX3JlYWRfbW1hcChzaS0+ZGVsZXRlX2JpdG1hcCwgZGF0YSwgc3opOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gZXJyb3IoImNvcnJ1cHQgZGVsZXRlIGJpdG1hcCBpbiBsaW5rIGV4dGVuc2lvbiIpOworCWRhdGEgKz0gcmV0OworCXN6IC09IHJldDsKKwlzaS0+cmVwbGFjZV9iaXRtYXAgPSBld2FoX25ldygpOworCXJldCA9IGV3YWhfcmVhZF9tbWFwKHNpLT5yZXBsYWNlX2JpdG1hcCwgZGF0YSwgc3opOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gZXJyb3IoImNvcnJ1cHQgcmVwbGFjZSBiaXRtYXAgaW4gbGluayBleHRlbnNpb24iKTsKKwlpZiAocmV0ICE9IHN6KQorCQlyZXR1cm4gZXJyb3IoImdhcmJhZ2UgYXQgdGhlIGVuZCBvZiBsaW5rIGV4dGVuc2lvbiIpOworCXJldHVybiAwOworfQorCitpbnQgd3JpdGVfbGlua19leHRlbnNpb24oc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkgc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHNwbGl0X2luZGV4ICpzaSA9IGlzdGF0ZS0+c3BsaXRfaW5kZXg7CisJc3RyYnVmX2FkZChzYiwgc2ktPmJhc2Vfc2hhMSwgMjApOworCWlmICghc2ktPmRlbGV0ZV9iaXRtYXAgJiYgIXNpLT5yZXBsYWNlX2JpdG1hcCkKKwkJcmV0dXJuIDA7CisJZXdhaF9zZXJpYWxpemVfc3RyYnVmKHNpLT5kZWxldGVfYml0bWFwLCBzYik7CisJZXdhaF9zZXJpYWxpemVfc3RyYnVmKHNpLT5yZXBsYWNlX2JpdG1hcCwgc2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYXJrX2Jhc2VfaW5kZXhfZW50cmllcyhzdHJ1Y3QgaW5kZXhfc3RhdGUgKmJhc2UpCit7CisJaW50IGk7CisJLyoKKwkgKiBUbyBrZWVwIHRyYWNrIG9mIHRoZSBzaGFyZWQgZW50cmllcyBiZXR3ZWVuCisJICogaXN0YXRlLT5iYXNlLT5jYWNoZVtdIGFuZCBpc3RhdGUtPmNhY2hlW10sIGJhc2UgZW50cnkKKwkgKiBwb3NpdGlvbiBpcyBzdG9yZWQgaW4gZWFjaCBiYXNlIGVudHJ5LiBBbGwgcG9zaXRpb25zIHN0YXJ0CisJICogZnJvbSAxIGluc3RlYWQgb2YgMCwgd2hpY2ggaXMgcmVzcnZlZCB0byBzYXkgInRoaXMgaXMgYSBuZXcKKwkgKiBlbnRyeSIuCisJICovCisJZm9yIChpID0gMDsgaSA8IGJhc2UtPmNhY2hlX25yOyBpKyspCisJCWJhc2UtPmNhY2hlW2ldLT5pbmRleCA9IGkgKyAxOworfQorCit2b2lkIG1vdmVfY2FjaGVfdG9fYmFzZV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3BsaXRfaW5kZXggKnNpID0gaXN0YXRlLT5zcGxpdF9pbmRleDsKKwlpbnQgaTsKKworCS8qCisJICogZG8gbm90IGRlbGV0ZSBvbGQgc2ktPmJhc2UsIGl0cyBpbmRleCBlbnRyaWVzIG1heSBiZSBzaGFyZWQKKwkgKiB3aXRoIGlzdGF0ZS0+Y2FjaGVbXS4gQWNjZXB0IGEgYml0IG9mIGxlYWtpbmcgaGVyZSBiZWNhdXNlCisJICogdGhpcyBjb2RlIGlzIG9ubHkgdXNlZCBieSBzaG9ydC1saXZlZCB1cGRhdGUtaW5kZXguCisJICovCisJc2ktPmJhc2UgPSB4Y2FsbG9jKDEsIHNpemVvZigqc2ktPmJhc2UpKTsKKwlzaS0+YmFzZS0+dmVyc2lvbiA9IGlzdGF0ZS0+dmVyc2lvbjsKKwkvKiB6ZXJvIHRpbWVzdGFtcCBkaXNhYmxlcyByYWN5IHRlc3QgaW4gY2Vfd3JpdGVfaW5kZXgoKSAqLworCXNpLT5iYXNlLT50aW1lc3RhbXAgPSBpc3RhdGUtPnRpbWVzdGFtcDsKKwlBTExPQ19HUk9XKHNpLT5iYXNlLT5jYWNoZSwgaXN0YXRlLT5jYWNoZV9uciwgc2ktPmJhc2UtPmNhY2hlX2FsbG9jKTsKKwlzaS0+YmFzZS0+Y2FjaGVfbnIgPSBpc3RhdGUtPmNhY2hlX25yOworCW1lbWNweShzaS0+YmFzZS0+Y2FjaGUsIGlzdGF0ZS0+Y2FjaGUsCisJICAgICAgIHNpemVvZigqaXN0YXRlLT5jYWNoZSkgKiBpc3RhdGUtPmNhY2hlX25yKTsKKwltYXJrX2Jhc2VfaW5kZXhfZW50cmllcyhzaS0+YmFzZSk7CisJZm9yIChpID0gMDsgaSA8IHNpLT5iYXNlLT5jYWNoZV9ucjsgaSsrKQorCQlzaS0+YmFzZS0+Y2FjaGVbaV0tPmNlX2ZsYWdzICY9IH5DRV9VUERBVEVfSU5fQkFTRTsKK30KKworc3RhdGljIHZvaWQgbWFya19lbnRyeV9mb3JfZGVsZXRlKHNpemVfdCBwb3MsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSBkYXRhOworCWlmIChwb3MgPj0gaXN0YXRlLT5jYWNoZV9ucikKKwkJZGllKCJwb3NpdGlvbiBmb3IgZGVsZXRlICVkIGV4Y2VlZHMgYmFzZSBpbmRleCBzaXplICVkIiwKKwkJICAgIChpbnQpcG9zLCBpc3RhdGUtPmNhY2hlX25yKTsKKwlpc3RhdGUtPmNhY2hlW3Bvc10tPmNlX2ZsYWdzIHw9IENFX1JFTU9WRTsKKwlpc3RhdGUtPnNwbGl0X2luZGV4LT5ucl9kZWxldGlvbnMgPSAxOworfQorCitzdGF0aWMgdm9pZCByZXBsYWNlX2VudHJ5KHNpemVfdCBwb3MsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUgPSBkYXRhOworCXN0cnVjdCBzcGxpdF9pbmRleCAqc2kgPSBpc3RhdGUtPnNwbGl0X2luZGV4OworCXN0cnVjdCBjYWNoZV9lbnRyeSAqZHN0LCAqc3JjOworCisJaWYgKHBvcyA+PSBpc3RhdGUtPmNhY2hlX25yKQorCQlkaWUoInBvc2l0aW9uIGZvciByZXBsYWNlbWVudCAlZCBleGNlZWRzIGJhc2UgaW5kZXggc2l6ZSAlZCIsCisJCSAgICAoaW50KXBvcywgaXN0YXRlLT5jYWNoZV9ucik7CisJaWYgKHNpLT5ucl9yZXBsYWNlbWVudHMgPj0gc2ktPnNhdmVkX2NhY2hlX25yKQorCQlkaWUoInRvbyBtYW55IHJlcGxhY2VtZW50cyAoJWQgdnMgJWQpIiwKKwkJICAgIHNpLT5ucl9yZXBsYWNlbWVudHMsIHNpLT5zYXZlZF9jYWNoZV9ucik7CisJZHN0ID0gaXN0YXRlLT5jYWNoZVtwb3NdOworCWlmIChkc3QtPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKQorCQlkaWUoImVudHJ5ICVkIGlzIG1hcmtlZCBhcyBib3RoIHJlcGxhY2VkIGFuZCBkZWxldGVkIiwKKwkJICAgIChpbnQpcG9zKTsKKwlzcmMgPSBzaS0+c2F2ZWRfY2FjaGVbc2ktPm5yX3JlcGxhY2VtZW50c107CisJaWYgKGNlX25hbWVsZW4oc3JjKSkKKwkJZGllKCJjb3JydXB0IGxpbmsgZXh0ZW5zaW9uLCBlbnRyeSAlZCBzaG91bGQgaGF2ZSAiCisJCSAgICAiemVybyBsZW5ndGggbmFtZSIsIChpbnQpcG9zKTsKKwlzcmMtPmluZGV4ID0gcG9zICsgMTsKKwlzcmMtPmNlX2ZsYWdzIHw9IENFX1VQREFURV9JTl9CQVNFOworCXNyYy0+Y2VfbmFtZWxlbiA9IGRzdC0+Y2VfbmFtZWxlbjsKKwljb3B5X2NhY2hlX2VudHJ5KGRzdCwgc3JjKTsKKwlmcmVlKHNyYyk7CisJc2ktPm5yX3JlcGxhY2VtZW50cysrOworfQorCit2b2lkIG1lcmdlX2Jhc2VfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHNwbGl0X2luZGV4ICpzaSA9IGlzdGF0ZS0+c3BsaXRfaW5kZXg7CisJdW5zaWduZWQgaW50IGk7CisKKwltYXJrX2Jhc2VfaW5kZXhfZW50cmllcyhzaS0+YmFzZSk7CisKKwlzaS0+c2F2ZWRfY2FjaGUJICAgID0gaXN0YXRlLT5jYWNoZTsKKwlzaS0+c2F2ZWRfY2FjaGVfbnIgID0gaXN0YXRlLT5jYWNoZV9ucjsKKwlpc3RhdGUtPmNhY2hlX25yICAgID0gc2ktPmJhc2UtPmNhY2hlX25yOworCWlzdGF0ZS0+Y2FjaGUJICAgID0gTlVMTDsKKwlpc3RhdGUtPmNhY2hlX2FsbG9jID0gMDsKKwlBTExPQ19HUk9XKGlzdGF0ZS0+Y2FjaGUsIGlzdGF0ZS0+Y2FjaGVfbnIsIGlzdGF0ZS0+Y2FjaGVfYWxsb2MpOworCW1lbWNweShpc3RhdGUtPmNhY2hlLCBzaS0+YmFzZS0+Y2FjaGUsCisJICAgICAgIHNpemVvZigqaXN0YXRlLT5jYWNoZSkgKiBpc3RhdGUtPmNhY2hlX25yKTsKKworCXNpLT5ucl9kZWxldGlvbnMgPSAwOworCXNpLT5ucl9yZXBsYWNlbWVudHMgPSAwOworCWV3YWhfZWFjaF9iaXQoc2ktPnJlcGxhY2VfYml0bWFwLCByZXBsYWNlX2VudHJ5LCBpc3RhdGUpOworCWV3YWhfZWFjaF9iaXQoc2ktPmRlbGV0ZV9iaXRtYXAsIG1hcmtfZW50cnlfZm9yX2RlbGV0ZSwgaXN0YXRlKTsKKwlpZiAoc2ktPm5yX2RlbGV0aW9ucykKKwkJcmVtb3ZlX21hcmtlZF9jYWNoZV9lbnRyaWVzKGlzdGF0ZSk7CisKKwlmb3IgKGkgPSBzaS0+bnJfcmVwbGFjZW1lbnRzOyBpIDwgc2ktPnNhdmVkX2NhY2hlX25yOyBpKyspIHsKKwkJaWYgKCFjZV9uYW1lbGVuKHNpLT5zYXZlZF9jYWNoZVtpXSkpCisJCQlkaWUoImNvcnJ1cHQgbGluayBleHRlbnNpb24sIGVudHJ5ICVkIHNob3VsZCAiCisJCQkgICAgImhhdmUgbm9uLXplcm8gbGVuZ3RoIG5hbWUiLCBpKTsKKwkJYWRkX2luZGV4X2VudHJ5KGlzdGF0ZSwgc2ktPnNhdmVkX2NhY2hlW2ldLAorCQkJCUFERF9DQUNIRV9PS19UT19BREQgfAorCQkJCUFERF9DQUNIRV9LRUVQX0NBQ0hFX1RSRUUgfAorCQkJCS8qCisJCQkJICogd2UgbWF5IGhhdmUgdG8gcmVwbGF5IHdoYXQKKwkJCQkgKiBtZXJnZS1yZWN1cnNpdmUuYzp1cGRhdGVfc3RhZ2VzKCkKKwkJCQkgKiBkb2VzLCB3aGljaCBoYXMgdGhpcyBmbGFnIG9uCisJCQkJICovCisJCQkJQUREX0NBQ0hFX1NLSVBfREZDSEVDSyk7CisJCXNpLT5zYXZlZF9jYWNoZVtpXSA9IE5VTEw7CisJfQorCisJZXdhaF9mcmVlKHNpLT5kZWxldGVfYml0bWFwKTsKKwlld2FoX2ZyZWUoc2ktPnJlcGxhY2VfYml0bWFwKTsKKwlmcmVlKHNpLT5zYXZlZF9jYWNoZSk7CisJc2ktPmRlbGV0ZV9iaXRtYXAgID0gTlVMTDsKKwlzaS0+cmVwbGFjZV9iaXRtYXAgPSBOVUxMOworCXNpLT5zYXZlZF9jYWNoZQkgICA9IE5VTEw7CisJc2ktPnNhdmVkX2NhY2hlX25yID0gMDsKK30KKwordm9pZCBwcmVwYXJlX3RvX3dyaXRlX3NwbGl0X2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzcGxpdF9pbmRleCAqc2kgPSBpbml0X3NwbGl0X2luZGV4KGlzdGF0ZSk7CisJc3RydWN0IGNhY2hlX2VudHJ5ICoqZW50cmllcyA9IE5VTEwsICpjZTsKKwlpbnQgaSwgbnJfZW50cmllcyA9IDAsIG5yX2FsbG9jID0gMDsKKworCXNpLT5kZWxldGVfYml0bWFwID0gZXdhaF9uZXcoKTsKKwlzaS0+cmVwbGFjZV9iaXRtYXAgPSBld2FoX25ldygpOworCisJaWYgKHNpLT5iYXNlKSB7CisJCS8qIEdvIHRocm91Z2ggaXN0YXRlLT5jYWNoZVtdIGFuZCBtYXJrIENFX01BVENIRUQgdG8KKwkJICogZW50cnkgd2l0aCBwb3NpdGl2ZSBpbmRleC4gV2UnbGwgZ28gdGhyb3VnaAorCQkgKiBiYXNlLT5jYWNoZVtdIGxhdGVyIHRvIGRlbGV0ZSBhbGwgZW50cmllcyBpbiBiYXNlCisJCSAqIHRoYXQgYXJlIG5vdCBtYXJrZWQgZWl0aCBlaXRoZXIgQ0VfTUFUQ0hFRCBvcgorCQkgKiBDRV9VUERBVEVfSU5fQkFTRS4gSWYgaXN0YXRlLT5jYWNoZVtpXSBpcyBhCisJCSAqIGR1cGxpY2F0ZSwgZGVkdXBsaWNhdGUgaXQuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgaXN0YXRlLT5jYWNoZV9ucjsgaSsrKSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmJhc2U7CisJCQkvKiBuYW1lbGVuIGlzIGNoZWNrZWQgc2VwYXJhdGVseSAqLworCQkJY29uc3QgdW5zaWduZWQgaW50IG9uZGlza19mbGFncyA9CisJCQkJQ0VfU1RBR0VNQVNLIHwgQ0VfVkFMSUQgfCBDRV9FWFRFTkRFRF9GTEFHUzsKKwkJCXVuc2lnbmVkIGludCBjZV9mbGFncywgYmFzZV9mbGFncywgcmV0OworCQkJY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQkJaWYgKCFjZS0+aW5kZXgpCisJCQkJY29udGludWU7CisJCQlpZiAoY2UtPmluZGV4ID4gc2ktPmJhc2UtPmNhY2hlX25yKSB7CisJCQkJY2UtPmluZGV4ID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNlLT5jZV9mbGFncyB8PSBDRV9NQVRDSEVEOyAvKiBvciAic2hhcmVkIiAqLworCQkJYmFzZSA9IHNpLT5iYXNlLT5jYWNoZVtjZS0+aW5kZXggLSAxXTsKKwkJCWlmIChjZSA9PSBiYXNlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNlLT5jZV9uYW1lbGVuICE9IGJhc2UtPmNlX25hbWVsZW4gfHwKKwkJCSAgICBzdHJjbXAoY2UtPm5hbWUsIGJhc2UtPm5hbWUpKSB7CisJCQkJY2UtPmluZGV4ID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNlX2ZsYWdzID0gY2UtPmNlX2ZsYWdzOworCQkJYmFzZV9mbGFncyA9IGJhc2UtPmNlX2ZsYWdzOworCQkJLyogb25seSBvbi1kaXNrIGZsYWdzIG1hdHRlciAqLworCQkJY2UtPmNlX2ZsYWdzICAgJj0gb25kaXNrX2ZsYWdzOworCQkJYmFzZS0+Y2VfZmxhZ3MgJj0gb25kaXNrX2ZsYWdzOworCQkJcmV0ID0gbWVtY21wKCZjZS0+Y2Vfc3RhdF9kYXRhLCAmYmFzZS0+Y2Vfc3RhdF9kYXRhLAorCQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGNhY2hlX2VudHJ5LCBuYW1lKSAtCisJCQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgY2FjaGVfZW50cnksIGNlX3N0YXRfZGF0YSkpOworCQkJY2UtPmNlX2ZsYWdzID0gY2VfZmxhZ3M7CisJCQliYXNlLT5jZV9mbGFncyA9IGJhc2VfZmxhZ3M7CisJCQlpZiAocmV0KQorCQkJCWNlLT5jZV9mbGFncyB8PSBDRV9VUERBVEVfSU5fQkFTRTsKKwkJCWZyZWUoYmFzZSk7CisJCQlzaS0+YmFzZS0+Y2FjaGVbY2UtPmluZGV4IC0gMV0gPSBjZTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgc2ktPmJhc2UtPmNhY2hlX25yOyBpKyspIHsKKwkJCWNlID0gc2ktPmJhc2UtPmNhY2hlW2ldOworCQkJaWYgKChjZS0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpIHx8CisJCQkgICAgIShjZS0+Y2VfZmxhZ3MgJiBDRV9NQVRDSEVEKSkKKwkJCQlld2FoX3NldChzaS0+ZGVsZXRlX2JpdG1hcCwgaSk7CisJCQllbHNlIGlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEVfSU5fQkFTRSkgeworCQkJCWV3YWhfc2V0KHNpLT5yZXBsYWNlX2JpdG1hcCwgaSk7CisJCQkJY2UtPmNlX2ZsYWdzIHw9IENFX1NUUklQX05BTUU7CisJCQkJQUxMT0NfR1JPVyhlbnRyaWVzLCBucl9lbnRyaWVzKzEsIG5yX2FsbG9jKTsKKwkJCQllbnRyaWVzW25yX2VudHJpZXMrK10gPSBjZTsKKwkJCX0KKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBpc3RhdGUtPmNhY2hlX25yOyBpKyspIHsKKwkJY2UgPSBpc3RhdGUtPmNhY2hlW2ldOworCQlpZiAoKCFzaS0+YmFzZSB8fCAhY2UtPmluZGV4KSAmJiAhKGNlLT5jZV9mbGFncyAmIENFX1JFTU9WRSkpIHsKKwkJCWFzc2VydCghKGNlLT5jZV9mbGFncyAmIENFX1NUUklQX05BTUUpKTsKKwkJCUFMTE9DX0dST1coZW50cmllcywgbnJfZW50cmllcysxLCBucl9hbGxvYyk7CisJCQllbnRyaWVzW25yX2VudHJpZXMrK10gPSBjZTsKKwkJfQorCQljZS0+Y2VfZmxhZ3MgJj0gfkNFX01BVENIRUQ7CisJfQorCisJLyoKKwkgKiB0YWtlIGNhY2hlW10gb3V0IHRlbXBvcmFyaWx5LCBwdXQgZW50cmllc1tdIGluIGl0cyBwbGFjZQorCSAqIGZvciB3cml0aW5nCisJICovCisJc2ktPnNhdmVkX2NhY2hlID0gaXN0YXRlLT5jYWNoZTsKKwlzaS0+c2F2ZWRfY2FjaGVfbnIgPSBpc3RhdGUtPmNhY2hlX25yOworCWlzdGF0ZS0+Y2FjaGUgPSBlbnRyaWVzOworCWlzdGF0ZS0+Y2FjaGVfbnIgPSBucl9lbnRyaWVzOworfQorCit2b2lkIGZpbmlzaF93cml0aW5nX3NwbGl0X2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKQoreworCXN0cnVjdCBzcGxpdF9pbmRleCAqc2kgPSBpbml0X3NwbGl0X2luZGV4KGlzdGF0ZSk7CisKKwlld2FoX2ZyZWUoc2ktPmRlbGV0ZV9iaXRtYXApOworCWV3YWhfZnJlZShzaS0+cmVwbGFjZV9iaXRtYXApOworCXNpLT5kZWxldGVfYml0bWFwID0gTlVMTDsKKwlzaS0+cmVwbGFjZV9iaXRtYXAgPSBOVUxMOworCWZyZWUoaXN0YXRlLT5jYWNoZSk7CisJaXN0YXRlLT5jYWNoZSA9IHNpLT5zYXZlZF9jYWNoZTsKKwlpc3RhdGUtPmNhY2hlX25yID0gc2ktPnNhdmVkX2NhY2hlX25yOworfQorCit2b2lkIGRpc2NhcmRfc3BsaXRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpCit7CisJc3RydWN0IHNwbGl0X2luZGV4ICpzaSA9IGlzdGF0ZS0+c3BsaXRfaW5kZXg7CisJaWYgKCFzaSkKKwkJcmV0dXJuOworCWlzdGF0ZS0+c3BsaXRfaW5kZXggPSBOVUxMOworCXNpLT5yZWZjb3VudC0tOworCWlmIChzaS0+cmVmY291bnQpCisJCXJldHVybjsKKwlpZiAoc2ktPmJhc2UpIHsKKwkJZGlzY2FyZF9pbmRleChzaS0+YmFzZSk7CisJCWZyZWUoc2ktPmJhc2UpOworCX0KKwlmcmVlKHNpKTsKK30KKwordm9pZCBzYXZlX29yX2ZyZWVfaW5kZXhfZW50cnkoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJaWYgKGNlLT5pbmRleCAmJgorCSAgICBpc3RhdGUtPnNwbGl0X2luZGV4ICYmCisJICAgIGlzdGF0ZS0+c3BsaXRfaW5kZXgtPmJhc2UgJiYKKwkgICAgY2UtPmluZGV4IDw9IGlzdGF0ZS0+c3BsaXRfaW5kZXgtPmJhc2UtPmNhY2hlX25yICYmCisJICAgIGNlID09IGlzdGF0ZS0+c3BsaXRfaW5kZXgtPmJhc2UtPmNhY2hlW2NlLT5pbmRleCAtIDFdKQorCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfUkVNT1ZFOworCWVsc2UKKwkJZnJlZShjZSk7Cit9CisKK3ZvaWQgcmVwbGFjZV9pbmRleF9lbnRyeV9pbl9iYXNlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSBzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCwKKwkJCQkgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXcpCit7CisJaWYgKG9sZC0+aW5kZXggJiYKKwkgICAgaXN0YXRlLT5zcGxpdF9pbmRleCAmJgorCSAgICBpc3RhdGUtPnNwbGl0X2luZGV4LT5iYXNlICYmCisJICAgIG9sZC0+aW5kZXggPD0gaXN0YXRlLT5zcGxpdF9pbmRleC0+YmFzZS0+Y2FjaGVfbnIpIHsKKwkJbmV3LT5pbmRleCA9IG9sZC0+aW5kZXg7CisJCWlmIChvbGQgIT0gaXN0YXRlLT5zcGxpdF9pbmRleC0+YmFzZS0+Y2FjaGVbbmV3LT5pbmRleCAtIDFdKQorCQkJZnJlZShpc3RhdGUtPnNwbGl0X2luZGV4LT5iYXNlLT5jYWNoZVtuZXctPmluZGV4IC0gMV0pOworCQlpc3RhdGUtPnNwbGl0X2luZGV4LT5iYXNlLT5jYWNoZVtuZXctPmluZGV4IC0gMV0gPSBuZXc7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3BsaXQtaW5kZXguaCBiL3NwbGl0LWluZGV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzMjRmNQotLS0gL2Rldi9udWxsCisrKyBiL3NwbGl0LWluZGV4LmgKQEAgLTAsMCArMSwzNSBAQAorI2lmbmRlZiBTUExJVF9JTkRFWF9ICisjZGVmaW5lIFNQTElUX0lOREVYX0gKKworc3RydWN0IGluZGV4X3N0YXRlOworc3RydWN0IHN0cmJ1ZjsKK3N0cnVjdCBld2FoX2JpdG1hcDsKKworc3RydWN0IHNwbGl0X2luZGV4IHsKKwl1bnNpZ25lZCBjaGFyIGJhc2Vfc2hhMVsyMF07CisJc3RydWN0IGluZGV4X3N0YXRlICpiYXNlOworCXN0cnVjdCBld2FoX2JpdG1hcCAqZGVsZXRlX2JpdG1hcDsKKwlzdHJ1Y3QgZXdhaF9iaXRtYXAgKnJlcGxhY2VfYml0bWFwOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqKnNhdmVkX2NhY2hlOworCXVuc2lnbmVkIGludCBzYXZlZF9jYWNoZV9ucjsKKwl1bnNpZ25lZCBpbnQgbnJfZGVsZXRpb25zOworCXVuc2lnbmVkIGludCBucl9yZXBsYWNlbWVudHM7CisJaW50IHJlZmNvdW50OworfTsKKworc3RydWN0IHNwbGl0X2luZGV4ICppbml0X3NwbGl0X2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK3ZvaWQgc2F2ZV9vcl9mcmVlX2luZGV4X2VudHJ5KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKTsKK3ZvaWQgcmVwbGFjZV9pbmRleF9lbnRyeV9pbl9iYXNlKHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSBzdHJ1Y3QgY2FjaGVfZW50cnkgKm9sZCwKKwkJCQkgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXcpOworaW50IHJlYWRfbGlua19leHRlbnNpb24oc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUsCisJCQljb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHN6KTsKK2ludCB3cml0ZV9saW5rX2V4dGVuc2lvbihzdHJ1Y3Qgc3RyYnVmICpzYiwKKwkJCSBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7Cit2b2lkIG1vdmVfY2FjaGVfdG9fYmFzZV9pbmRleChzdHJ1Y3QgaW5kZXhfc3RhdGUgKmlzdGF0ZSk7Cit2b2lkIG1lcmdlX2Jhc2VfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOwordm9pZCBwcmVwYXJlX3RvX3dyaXRlX3NwbGl0X2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKK3ZvaWQgZmluaXNoX3dyaXRpbmdfc3BsaXRfaW5kZXgoc3RydWN0IGluZGV4X3N0YXRlICppc3RhdGUpOwordm9pZCBkaXNjYXJkX3NwbGl0X2luZGV4KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zdHJidWYuYyBiL3N0cmJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NmYwYWUKLS0tIC9kZXYvbnVsbAorKysgYi9zdHJidWYuYwpAQCAtMCwwICsxLDgyMCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworaW50IHN0YXJ0c193aXRoKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcHJlZml4KQoreworCWZvciAoOyA7IHN0cisrLCBwcmVmaXgrKykKKwkJaWYgKCEqcHJlZml4KQorCQkJcmV0dXJuIDE7CisJCWVsc2UgaWYgKCpzdHIgIT0gKnByZWZpeCkKKwkJCXJldHVybiAwOworfQorCisvKgorICogVXNlZCBhcyB0aGUgZGVmYXVsdCAtPmJ1ZiB2YWx1ZSwgc28gdGhhdCBwZW9wbGUgY2FuIGFsd2F5cyBhc3N1bWUKKyAqIGJ1ZiBpcyBub24gTlVMTCBhbmQgLT5idWYgaXMgTlVMIHRlcm1pbmF0ZWQgZXZlbiBmb3IgYSBmcmVzaGx5CisgKiBpbml0aWFsaXplZCBzdHJidWYuCisgKi8KK2NoYXIgc3RyYnVmX3Nsb3BidWZbMV07CisKK3ZvaWQgc3RyYnVmX2luaXQoc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBoaW50KQoreworCXNiLT5hbGxvYyA9IHNiLT5sZW4gPSAwOworCXNiLT5idWYgPSBzdHJidWZfc2xvcGJ1ZjsKKwlpZiAoaGludCkKKwkJc3RyYnVmX2dyb3coc2IsIGhpbnQpOworfQorCit2b2lkIHN0cmJ1Zl9yZWxlYXNlKHN0cnVjdCBzdHJidWYgKnNiKQoreworCWlmIChzYi0+YWxsb2MpIHsKKwkJZnJlZShzYi0+YnVmKTsKKwkJc3RyYnVmX2luaXQoc2IsIDApOworCX0KK30KKworY2hhciAqc3RyYnVmX2RldGFjaChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90ICpzeikKK3sKKwljaGFyICpyZXM7CisJc3RyYnVmX2dyb3coc2IsIDApOworCXJlcyA9IHNiLT5idWY7CisJaWYgKHN6KQorCQkqc3ogPSBzYi0+bGVuOworCXN0cmJ1Zl9pbml0KHNiLCAwKTsKKwlyZXR1cm4gcmVzOworfQorCit2b2lkIHN0cmJ1Zl9hdHRhY2goc3RydWN0IHN0cmJ1ZiAqc2IsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgc2l6ZV90IGFsbG9jKQoreworCXN0cmJ1Zl9yZWxlYXNlKHNiKTsKKwlzYi0+YnVmICAgPSBidWY7CisJc2ItPmxlbiAgID0gbGVuOworCXNiLT5hbGxvYyA9IGFsbG9jOworCXN0cmJ1Zl9ncm93KHNiLCAwKTsKKwlzYi0+YnVmW3NiLT5sZW5dID0gJ1wwJzsKK30KKwordm9pZCBzdHJidWZfZ3JvdyhzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IGV4dHJhKQoreworCWludCBuZXdfYnVmID0gIXNiLT5hbGxvYzsKKwlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhleHRyYSwgMSkgfHwKKwkgICAgdW5zaWduZWRfYWRkX292ZXJmbG93cyhzYi0+bGVuLCBleHRyYSArIDEpKQorCQlkaWUoInlvdSB3YW50IHRvIHVzZSB3YXkgdG9vIG11Y2ggbWVtb3J5Iik7CisJaWYgKG5ld19idWYpCisJCXNiLT5idWYgPSBOVUxMOworCUFMTE9DX0dST1coc2ItPmJ1Ziwgc2ItPmxlbiArIGV4dHJhICsgMSwgc2ItPmFsbG9jKTsKKwlpZiAobmV3X2J1ZikKKwkJc2ItPmJ1ZlswXSA9ICdcMCc7Cit9CisKK3ZvaWQgc3RyYnVmX3RyaW0oc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJc3RyYnVmX3J0cmltKHNiKTsKKwlzdHJidWZfbHRyaW0oc2IpOworfQordm9pZCBzdHJidWZfcnRyaW0oc3RydWN0IHN0cmJ1ZiAqc2IpCit7CisJd2hpbGUgKHNiLT5sZW4gPiAwICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpc2ItPmJ1ZltzYi0+bGVuIC0gMV0pKQorCQlzYi0+bGVuLS07CisJc2ItPmJ1ZltzYi0+bGVuXSA9ICdcMCc7Cit9CisKK3ZvaWQgc3RyYnVmX2x0cmltKHN0cnVjdCBzdHJidWYgKnNiKQoreworCWNoYXIgKmIgPSBzYi0+YnVmOworCXdoaWxlIChzYi0+bGVuID4gMCAmJiBpc3NwYWNlKCpiKSkgeworCQliKys7CisJCXNiLT5sZW4tLTsKKwl9CisJbWVtbW92ZShzYi0+YnVmLCBiLCBzYi0+bGVuKTsKKwlzYi0+YnVmW3NiLT5sZW5dID0gJ1wwJzsKK30KKworaW50IHN0cmJ1Zl9yZWVuY29kZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pCit7CisJY2hhciAqb3V0OworCWludCBsZW47CisKKwlpZiAoc2FtZV9lbmNvZGluZyhmcm9tLCB0bykpCisJCXJldHVybiAwOworCisJb3V0ID0gcmVlbmNvZGVfc3RyaW5nX2xlbihzYi0+YnVmLCBzYi0+bGVuLCB0bywgZnJvbSwgJmxlbik7CisJaWYgKCFvdXQpCisJCXJldHVybiAtMTsKKworCXN0cmJ1Zl9hdHRhY2goc2IsIG91dCwgbGVuLCBsZW4pOworCXJldHVybiAwOworfQorCit2b2lkIHN0cmJ1Zl90b2xvd2VyKHN0cnVjdCBzdHJidWYgKnNiKQoreworCWNoYXIgKnAgPSBzYi0+YnVmLCAqZW5kID0gc2ItPmJ1ZiArIHNiLT5sZW47CisJZm9yICg7IHAgPCBlbmQ7IHArKykKKwkJKnAgPSB0b2xvd2VyKCpwKTsKK30KKworc3RydWN0IHN0cmJ1ZiAqKnN0cmJ1Zl9zcGxpdF9idWYoY29uc3QgY2hhciAqc3RyLCBzaXplX3Qgc2xlbiwKKwkJCQkgaW50IHRlcm1pbmF0b3IsIGludCBtYXgpCit7CisJc3RydWN0IHN0cmJ1ZiAqKnJldCA9IE5VTEw7CisJc2l6ZV90IG5yID0gMCwgYWxsb2MgPSAwOworCXN0cnVjdCBzdHJidWYgKnQ7CisKKwl3aGlsZSAoc2xlbikgeworCQlpbnQgbGVuID0gc2xlbjsKKwkJaWYgKG1heCA8PSAwIHx8IG5yICsgMSA8IG1heCkgeworCQkJY29uc3QgY2hhciAqZW5kID0gbWVtY2hyKHN0ciwgdGVybWluYXRvciwgc2xlbik7CisJCQlpZiAoZW5kKQorCQkJCWxlbiA9IGVuZCAtIHN0ciArIDE7CisJCX0KKwkJdCA9IHhtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHJidWYpKTsKKwkJc3RyYnVmX2luaXQodCwgbGVuKTsKKwkJc3RyYnVmX2FkZCh0LCBzdHIsIGxlbik7CisJCUFMTE9DX0dST1cocmV0LCBuciArIDIsIGFsbG9jKTsKKwkJcmV0W25yKytdID0gdDsKKwkJc3RyICs9IGxlbjsKKwkJc2xlbiAtPSBsZW47CisJfQorCUFMTE9DX0dST1cocmV0LCBuciArIDEsIGFsbG9jKTsgLyogSW4gY2FzZSBzdHJpbmcgd2FzIGVtcHR5ICovCisJcmV0W25yXSA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzdHJidWZfbGlzdF9mcmVlKHN0cnVjdCBzdHJidWYgKipzYnMpCit7CisJc3RydWN0IHN0cmJ1ZiAqKnMgPSBzYnM7CisKKwl3aGlsZSAoKnMpIHsKKwkJc3RyYnVmX3JlbGVhc2UoKnMpOworCQlmcmVlKCpzKyspOworCX0KKwlmcmVlKHNicyk7Cit9CisKK2ludCBzdHJidWZfY21wKGNvbnN0IHN0cnVjdCBzdHJidWYgKmEsIGNvbnN0IHN0cnVjdCBzdHJidWYgKmIpCit7CisJaW50IGxlbiA9IGEtPmxlbiA8IGItPmxlbiA/IGEtPmxlbjogYi0+bGVuOworCWludCBjbXAgPSBtZW1jbXAoYS0+YnVmLCBiLT5idWYsIGxlbik7CisJaWYgKGNtcCkKKwkJcmV0dXJuIGNtcDsKKwlyZXR1cm4gYS0+bGVuIDwgYi0+bGVuID8gLTE6IGEtPmxlbiAhPSBiLT5sZW47Cit9CisKK3ZvaWQgc3RyYnVmX3NwbGljZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgc2l6ZV90IGxlbiwKKwkJCQkgICBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGxlbikKK3sKKwlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhwb3MsIGxlbikpCisJCWRpZSgieW91IHdhbnQgdG8gdXNlIHdheSB0b28gbXVjaCBtZW1vcnkiKTsKKwlpZiAocG9zID4gc2ItPmxlbikKKwkJZGllKCJgcG9zJyBpcyB0b28gZmFyIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpOworCWlmIChwb3MgKyBsZW4gPiBzYi0+bGVuKQorCQlkaWUoImBwb3MgKyBsZW4nIGlzIHRvbyBmYXIgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7CisKKwlpZiAoZGxlbiA+PSBsZW4pCisJCXN0cmJ1Zl9ncm93KHNiLCBkbGVuIC0gbGVuKTsKKwltZW1tb3ZlKHNiLT5idWYgKyBwb3MgKyBkbGVuLAorCQkJc2ItPmJ1ZiArIHBvcyArIGxlbiwKKwkJCXNiLT5sZW4gLSBwb3MgLSBsZW4pOworCW1lbWNweShzYi0+YnVmICsgcG9zLCBkYXRhLCBkbGVuKTsKKwlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgZGxlbiAtIGxlbik7Cit9CisKK3ZvaWQgc3RyYnVmX2luc2VydChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJidWZfc3BsaWNlKHNiLCBwb3MsIDAsIGRhdGEsIGxlbik7Cit9CisKK3ZvaWQgc3RyYnVmX3JlbW92ZShzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgc2l6ZV90IGxlbikKK3sKKwlzdHJidWZfc3BsaWNlKHNiLCBwb3MsIGxlbiwgTlVMTCwgMCk7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlzdHJidWZfZ3JvdyhzYiwgbGVuKTsKKwltZW1jcHkoc2ItPmJ1ZiArIHNiLT5sZW4sIGRhdGEsIGxlbik7CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIGxlbik7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZGR1cChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgc2l6ZV90IGxlbikKK3sKKwlzdHJidWZfZ3JvdyhzYiwgbGVuKTsKKwltZW1jcHkoc2ItPmJ1ZiArIHNiLT5sZW4sIHNiLT5idWYgKyBwb3MsIGxlbik7CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIGxlbik7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZGNoYXJzKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgYywgc2l6ZV90IG4pCit7CisJc3RyYnVmX2dyb3coc2IsIG4pOworCW1lbXNldChzYi0+YnVmICsgc2ItPmxlbiwgYywgbik7CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIG4pOworfQorCit2b2lkIHN0cmJ1Zl9hZGRmKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXN0cmJ1Zl92YWRkZihzYiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2xpbmVzKHN0cnVjdCBzdHJidWYgKm91dCwKKwkJCWNvbnN0IGNoYXIgKnByZWZpeDEsCisJCQljb25zdCBjaGFyICpwcmVmaXgyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwl3aGlsZSAoc2l6ZSkgeworCQljb25zdCBjaGFyICpwcmVmaXg7CisJCWNvbnN0IGNoYXIgKm5leHQgPSBtZW1jaHIoYnVmLCAnXG4nLCBzaXplKTsKKwkJbmV4dCA9IG5leHQgPyAobmV4dCArIDEpIDogKGJ1ZiArIHNpemUpOworCisJCXByZWZpeCA9ICgocHJlZml4MiAmJiAoYnVmWzBdID09ICdcbicgfHwgYnVmWzBdID09ICdcdCcpKQorCQkJICA/IHByZWZpeDIgOiBwcmVmaXgxKTsKKwkJc3RyYnVmX2FkZHN0cihvdXQsIHByZWZpeCk7CisJCXN0cmJ1Zl9hZGQob3V0LCBidWYsIG5leHQgLSBidWYpOworCQlzaXplIC09IG5leHQgLSBidWY7CisJCWJ1ZiA9IG5leHQ7CisJfQorCXN0cmJ1Zl9jb21wbGV0ZV9saW5lKG91dCk7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0YXRpYyBjaGFyIHByZWZpeDFbM107CisJc3RhdGljIGNoYXIgcHJlZml4MlsyXTsKKworCWlmIChwcmVmaXgxWzBdICE9IGNvbW1lbnRfbGluZV9jaGFyKSB7CisJCXhzbnByaW50ZihwcmVmaXgxLCBzaXplb2YocHJlZml4MSksICIlYyAiLCBjb21tZW50X2xpbmVfY2hhcik7CisJCXhzbnByaW50ZihwcmVmaXgyLCBzaXplb2YocHJlZml4MiksICIlYyIsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwl9CisJYWRkX2xpbmVzKG91dCwgcHJlZml4MSwgcHJlZml4MiwgYnVmLCBzaXplKTsKK30KKwordm9pZCBzdHJidWZfY29tbWVudGVkX2FkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IGluY29tcGxldGVfbGluZSA9IHNiLT5sZW4gJiYgc2ItPmJ1ZltzYi0+bGVuIC0gMV0gIT0gJ1xuJzsKKworCXZhX3N0YXJ0KHBhcmFtcywgZm10KTsKKwlzdHJidWZfdmFkZGYoJmJ1ZiwgZm10LCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCisJc3RyYnVmX2FkZF9jb21tZW50ZWRfbGluZXMoc2IsIGJ1Zi5idWYsIGJ1Zi5sZW4pOworCWlmIChpbmNvbXBsZXRlX2xpbmUpCisJCXNiLT5idWZbLS1zYi0+bGVuXSA9ICdcMCc7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKK30KKwordm9pZCBzdHJidWZfdmFkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwlpbnQgbGVuOworCXZhX2xpc3QgY3A7CisKKwlpZiAoIXN0cmJ1Zl9hdmFpbChzYikpCisJCXN0cmJ1Zl9ncm93KHNiLCA2NCk7CisJdmFfY29weShjcCwgYXApOworCWxlbiA9IHZzbnByaW50ZihzYi0+YnVmICsgc2ItPmxlbiwgc2ItPmFsbG9jIC0gc2ItPmxlbiwgZm10LCBjcCk7CisJdmFfZW5kKGNwKTsKKwlpZiAobGVuIDwgMCkKKwkJZGllKCJCVUc6IHlvdXIgdnNucHJpbnRmIGlzIGJyb2tlbiAocmV0dXJuZWQgJWQpIiwgbGVuKTsKKwlpZiAobGVuID4gc3RyYnVmX2F2YWlsKHNiKSkgeworCQlzdHJidWZfZ3JvdyhzYiwgbGVuKTsKKwkJbGVuID0gdnNucHJpbnRmKHNiLT5idWYgKyBzYi0+bGVuLCBzYi0+YWxsb2MgLSBzYi0+bGVuLCBmbXQsIGFwKTsKKwkJaWYgKGxlbiA+IHN0cmJ1Zl9hdmFpbChzYikpCisJCQlkaWUoIkJVRzogeW91ciB2c25wcmludGYgaXMgYnJva2VuIChpbnNhdGlhYmxlKSIpOworCX0KKwlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgbGVuKTsKK30KKwordm9pZCBzdHJidWZfZXhwYW5kKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpmb3JtYXQsIGV4cGFuZF9mbl90IGZuLAorCQkgICB2b2lkICpjb250ZXh0KQoreworCWZvciAoOzspIHsKKwkJY29uc3QgY2hhciAqcGVyY2VudDsKKwkJc2l6ZV90IGNvbnN1bWVkOworCisJCXBlcmNlbnQgPSBzdHJjaHJudWwoZm9ybWF0LCAnJScpOworCQlzdHJidWZfYWRkKHNiLCBmb3JtYXQsIHBlcmNlbnQgLSBmb3JtYXQpOworCQlpZiAoISpwZXJjZW50KQorCQkJYnJlYWs7CisJCWZvcm1hdCA9IHBlcmNlbnQgKyAxOworCisJCWlmICgqZm9ybWF0ID09ICclJykgeworCQkJc3RyYnVmX2FkZGNoKHNiLCAnJScpOworCQkJZm9ybWF0Kys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWNvbnN1bWVkID0gZm4oc2IsIGZvcm1hdCwgY29udGV4dCk7CisJCWlmIChjb25zdW1lZCkKKwkJCWZvcm1hdCArPSBjb25zdW1lZDsKKwkJZWxzZQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnJScpOworCX0KK30KKworc2l6ZV90IHN0cmJ1Zl9leHBhbmRfZGljdF9jYihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGxhY2Vob2xkZXIsCisJCXZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHN0cmJ1Zl9leHBhbmRfZGljdF9lbnRyeSAqZSA9IGNvbnRleHQ7CisJc2l6ZV90IGxlbjsKKworCWZvciAoOyBlLT5wbGFjZWhvbGRlciAmJiAobGVuID0gc3RybGVuKGUtPnBsYWNlaG9sZGVyKSk7IGUrKykgeworCQlpZiAoIXN0cm5jbXAocGxhY2Vob2xkZXIsIGUtPnBsYWNlaG9sZGVyLCBsZW4pKSB7CisJCQlpZiAoZS0+dmFsdWUpCisJCQkJc3RyYnVmX2FkZHN0cihzYiwgZS0+dmFsdWUpOworCQkJcmV0dXJuIGxlbjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBzdHJidWZfYWRkYnVmX3BlcmNlbnRxdW90ZShzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IHN0cnVjdCBzdHJidWYgKnNyYykKK3sKKwlpbnQgaSwgbGVuID0gc3JjLT5sZW47CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKHNyYy0+YnVmW2ldID09ICclJykKKwkJCXN0cmJ1Zl9hZGRjaChkc3QsICclJyk7CisJCXN0cmJ1Zl9hZGRjaChkc3QsIHNyYy0+YnVmW2ldKTsKKwl9Cit9CisKK3NpemVfdCBzdHJidWZfZnJlYWQoc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBzaXplLCBGSUxFICpmKQoreworCXNpemVfdCByZXM7CisJc2l6ZV90IG9sZGFsbG9jID0gc2ItPmFsbG9jOworCisJc3RyYnVmX2dyb3coc2IsIHNpemUpOworCXJlcyA9IGZyZWFkKHNiLT5idWYgKyBzYi0+bGVuLCAxLCBzaXplLCBmKTsKKwlpZiAocmVzID4gMCkKKwkJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIHJlcyk7CisJZWxzZSBpZiAob2xkYWxsb2MgPT0gMCkKKwkJc3RyYnVmX3JlbGVhc2Uoc2IpOworCXJldHVybiByZXM7Cit9CisKK3NzaXplX3Qgc3RyYnVmX3JlYWQoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBmZCwgc2l6ZV90IGhpbnQpCit7CisJc2l6ZV90IG9sZGxlbiA9IHNiLT5sZW47CisJc2l6ZV90IG9sZGFsbG9jID0gc2ItPmFsbG9jOworCisJc3RyYnVmX2dyb3coc2IsIGhpbnQgPyBoaW50IDogODE5Mik7CisJZm9yICg7OykgeworCQlzc2l6ZV90IHdhbnQgPSBzYi0+YWxsb2MgLSBzYi0+bGVuIC0gMTsKKwkJc3NpemVfdCBnb3QgPSByZWFkX2luX2Z1bGwoZmQsIHNiLT5idWYgKyBzYi0+bGVuLCB3YW50KTsKKworCQlpZiAoZ290IDwgMCkgeworCQkJaWYgKG9sZGFsbG9jID09IDApCisJCQkJc3RyYnVmX3JlbGVhc2Uoc2IpOworCQkJZWxzZQorCQkJCXN0cmJ1Zl9zZXRsZW4oc2IsIG9sZGxlbik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc2ItPmxlbiArPSBnb3Q7CisJCWlmIChnb3QgPCB3YW50KQorCQkJYnJlYWs7CisJCXN0cmJ1Zl9ncm93KHNiLCA4MTkyKTsKKwl9CisKKwlzYi0+YnVmW3NiLT5sZW5dID0gJ1wwJzsKKwlyZXR1cm4gc2ItPmxlbiAtIG9sZGxlbjsKK30KKworI2RlZmluZSBTVFJCVUZfTUFYTElOSyAoMipQQVRIX01BWCkKKworaW50IHN0cmJ1Zl9yZWFkbGluayhzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpCit7CisJc2l6ZV90IG9sZGFsbG9jID0gc2ItPmFsbG9jOworCisJaWYgKGhpbnQgPCAzMikKKwkJaGludCA9IDMyOworCisJd2hpbGUgKGhpbnQgPCBTVFJCVUZfTUFYTElOSykgeworCQlpbnQgbGVuOworCisJCXN0cmJ1Zl9ncm93KHNiLCBoaW50KTsKKwkJbGVuID0gcmVhZGxpbmsocGF0aCwgc2ItPmJ1ZiwgaGludCk7CisJCWlmIChsZW4gPCAwKSB7CisJCQlpZiAoZXJybm8gIT0gRVJBTkdFKQorCQkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGxlbiA8IGhpbnQpIHsKKwkJCXN0cmJ1Zl9zZXRsZW4oc2IsIGxlbik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCS8qIC4uIHRoZSBidWZmZXIgd2FzIHRvbyBzbWFsbCAtIHRyeSBhZ2FpbiAqLworCQloaW50ICo9IDI7CisJfQorCWlmIChvbGRhbGxvYyA9PSAwKQorCQlzdHJidWZfcmVsZWFzZShzYik7CisJcmV0dXJuIC0xOworfQorCitpbnQgc3RyYnVmX2dldGN3ZChzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlzaXplX3Qgb2xkYWxsb2MgPSBzYi0+YWxsb2M7CisJc2l6ZV90IGd1ZXNzZWRfbGVuID0gMTI4OworCisJZm9yICg7OyBndWVzc2VkX2xlbiAqPSAyKSB7CisJCXN0cmJ1Zl9ncm93KHNiLCBndWVzc2VkX2xlbik7CisJCWlmIChnZXRjd2Qoc2ItPmJ1Ziwgc2ItPmFsbG9jKSkgeworCQkJc3RyYnVmX3NldGxlbihzYiwgc3RybGVuKHNiLT5idWYpKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChlcnJubyAhPSBFUkFOR0UpCisJCQlicmVhazsKKwl9CisJaWYgKG9sZGFsbG9jID09IDApCisJCXN0cmJ1Zl9yZWxlYXNlKHNiKTsKKwllbHNlCisJCXN0cmJ1Zl9yZXNldChzYik7CisJcmV0dXJuIC0xOworfQorCisjaWZkZWYgSEFWRV9HRVRERUxJTQoraW50IHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc3RydWN0IHN0cmJ1ZiAqc2IsIEZJTEUgKmZwLCBpbnQgdGVybSkKK3sKKwlzc2l6ZV90IHI7CisKKwlpZiAoZmVvZihmcCkpCisJCXJldHVybiBFT0Y7CisKKwlzdHJidWZfcmVzZXQoc2IpOworCisJLyogVHJhbnNsYXRlIHNsb3BidWYgdG8gTlVMTCwgYXMgd2UgY2Fubm90IGNhbGwgcmVhbGxvYyBvbiBpdCAqLworCWlmICghc2ItPmFsbG9jKQorCQlzYi0+YnVmID0gTlVMTDsKKwlyID0gZ2V0ZGVsaW0oJnNiLT5idWYsICZzYi0+YWxsb2MsIHRlcm0sIGZwKTsKKworCWlmIChyID4gMCkgeworCQlzYi0+bGVuID0gcjsKKwkJcmV0dXJuIDA7CisJfQorCWFzc2VydChyID09IC0xKTsKKworCS8qCisJICogTm9ybWFsbHkgd2Ugd291bGQgaGF2ZSBjYWxsZWQgeHJlYWxsb2MsIHdoaWNoIHdpbGwgdHJ5IHRvIGZyZWUKKwkgKiBtZW1vcnkgYW5kIHJlY292ZXIuIEJ1dCB3ZSBoYXZlIG5vIHdheSB0byB0ZWxsIGdldGRlbGltKCkgdG8gZG8gc28uCisJICogV29yc2UsIHdlIGNhbm5vdCB0cnkgdG8gcmVjb3ZlciBFTk9NRU0gb3Vyc2VsdmVzLCBiZWNhdXNlIHdlIGhhdmUKKwkgKiBubyBpZGVhIGhvdyBtYW55IGJ5dGVzIHdlcmUgcmVhZCBieSBnZXRkZWxpbS4KKwkgKgorCSAqIER5aW5nIGhlcmUgaXMgcmVhc29uYWJsZS4gSXQgbWlycm9ycyB3aGF0IHhyZWFsbG9jIHdvdWxkIGRvIG9uCisJICogY2F0YXN0cm9waGljIG1lbW9yeSBmYWlsdXJlLiBXZSBza2lwIHRoZSBvcHBvcnR1bml0eSB0byBmcmVlIHBhY2sKKwkgKiBtZW1vcnkgYW5kIHJldHJ5LCBidXQgdGhhdCdzIHVubGlrZWx5IHRvIGhlbHAgZm9yIGEgbWFsbG9jIHNtYWxsCisJICogZW5vdWdoIHRvIGhvbGQgYSBzaW5nbGUgbGluZSBvZiBpbnB1dCwgYW55d2F5LgorCSAqLworCWlmIChlcnJubyA9PSBFTk9NRU0pCisJCWRpZSgiT3V0IG9mIG1lbW9yeSwgZ2V0ZGVsaW0gZmFpbGVkIik7CisKKwkvKiBSZXN0b3JlIHNsb3BidWYgdGhhdCB3ZSBtb3ZlZCBvdXQgb2YgdGhlIHdheSBiZWZvcmUgKi8KKwlpZiAoIXNiLT5idWYpCisJCXN0cmJ1Zl9pbml0KHNiLCAwKTsKKwlyZXR1cm4gRU9GOworfQorI2Vsc2UKK2ludCBzdHJidWZfZ2V0d2hvbGVsaW5lKHN0cnVjdCBzdHJidWYgKnNiLCBGSUxFICpmcCwgaW50IHRlcm0pCit7CisJaW50IGNoOworCisJaWYgKGZlb2YoZnApKQorCQlyZXR1cm4gRU9GOworCisJc3RyYnVmX3Jlc2V0KHNiKTsKKwlmbG9ja2ZpbGUoZnApOworCXdoaWxlICgoY2ggPSBnZXRjX3VubG9ja2VkKGZwKSkgIT0gRU9GKSB7CisJCWlmICghc3RyYnVmX2F2YWlsKHNiKSkKKwkJCXN0cmJ1Zl9ncm93KHNiLCAxKTsKKwkJc2ItPmJ1ZltzYi0+bGVuKytdID0gY2g7CisJCWlmIChjaCA9PSB0ZXJtKQorCQkJYnJlYWs7CisJfQorCWZ1bmxvY2tmaWxlKGZwKTsKKwlpZiAoY2ggPT0gRU9GICYmIHNiLT5sZW4gPT0gMCkKKwkJcmV0dXJuIEVPRjsKKworCXNiLT5idWZbc2ItPmxlbl0gPSAnXDAnOworCXJldHVybiAwOworfQorI2VuZGlmCisKK2ludCBzdHJidWZfZ2V0bGluZShzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqZnAsIGludCB0ZXJtKQoreworCWlmIChzdHJidWZfZ2V0d2hvbGVsaW5lKHNiLCBmcCwgdGVybSkpCisJCXJldHVybiBFT0Y7CisJaWYgKHNiLT5idWZbc2ItPmxlbi0xXSA9PSB0ZXJtKQorCQlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuLTEpOworCXJldHVybiAwOworfQorCitpbnQgc3RyYnVmX2dldHdob2xlbGluZV9mZChzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IGZkLCBpbnQgdGVybSkKK3sKKwlzdHJidWZfcmVzZXQoc2IpOworCisJd2hpbGUgKDEpIHsKKwkJY2hhciBjaDsKKwkJc3NpemVfdCBsZW4gPSB4cmVhZChmZCwgJmNoLCAxKTsKKwkJaWYgKGxlbiA8PSAwKQorCQkJcmV0dXJuIEVPRjsKKwkJc3RyYnVmX2FkZGNoKHNiLCBjaCk7CisJCWlmIChjaCA9PSB0ZXJtKQorCQkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzc2l6ZV90IHN0cmJ1Zl9yZWFkX2ZpbGUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBhdGgsIHNpemVfdCBoaW50KQoreworCWludCBmZDsKKwlzc2l6ZV90IGxlbjsKKworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIC0xOworCWxlbiA9IHN0cmJ1Zl9yZWFkKHNiLCBmZCwgaGludCk7CisJY2xvc2UoZmQpOworCWlmIChsZW4gPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gbGVuOworfQorCit2b2lkIHN0cmJ1Zl9hZGRfbGluZXMoc3RydWN0IHN0cmJ1ZiAqb3V0LCBjb25zdCBjaGFyICpwcmVmaXgsCisJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJYWRkX2xpbmVzKG91dCwgcHJlZml4LCBOVUxMLCBidWYsIHNpemUpOworfQorCit2b2lkIHN0cmJ1Zl9hZGRzdHJfeG1sX3F1b3RlZChzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKnMpCit7CisJd2hpbGUgKCpzKSB7CisJCXNpemVfdCBsZW4gPSBzdHJjc3BuKHMsICJcIjw+JiIpOworCQlzdHJidWZfYWRkKGJ1ZiwgcywgbGVuKTsKKwkJcyArPSBsZW47CisJCXN3aXRjaCAoKnMpIHsKKwkJY2FzZSAnIic6CisJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIiZxdW90OyIpOworCQkJYnJlYWs7CisJCWNhc2UgJzwnOgorCQkJc3RyYnVmX2FkZHN0cihidWYsICImbHQ7Iik7CisJCQlicmVhazsKKwkJY2FzZSAnPic6CisJCQlzdHJidWZfYWRkc3RyKGJ1ZiwgIiZndDsiKTsKKwkJCWJyZWFrOworCQljYXNlICcmJzoKKwkJCXN0cmJ1Zl9hZGRzdHIoYnVmLCAiJmFtcDsiKTsKKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQlyZXR1cm47CisJCX0KKwkJcysrOworCX0KK30KKworc3RhdGljIGludCBpc19yZmMzOTg2X3Jlc2VydmVkKGNoYXIgY2gpCit7CisJc3dpdGNoIChjaCkgeworCQljYXNlICchJzogY2FzZSAnKic6IGNhc2UgJ1wnJzogY2FzZSAnKCc6IGNhc2UgJyknOiBjYXNlICc7JzoKKwkJY2FzZSAnOic6IGNhc2UgJ0AnOiBjYXNlICcmJzogY2FzZSAnPSc6IGNhc2UgJysnOiBjYXNlICckJzoKKwkJY2FzZSAnLCc6IGNhc2UgJy8nOiBjYXNlICc/JzogY2FzZSAnIyc6IGNhc2UgJ1snOiBjYXNlICddJzoKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpc19yZmMzOTg2X3VucmVzZXJ2ZWQoY2hhciBjaCkKK3sKKwlyZXR1cm4gaXNhbG51bShjaCkgfHwKKwkJY2ggPT0gJy0nIHx8IGNoID09ICdfJyB8fCBjaCA9PSAnLicgfHwgY2ggPT0gJ34nOworfQorCitzdGF0aWMgdm9pZCBzdHJidWZfYWRkX3VybGVuY29kZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcywgc2l6ZV90IGxlbiwKKwkJCQkgaW50IHJlc2VydmVkKQoreworCXN0cmJ1Zl9ncm93KHNiLCBsZW4pOworCXdoaWxlIChsZW4tLSkgeworCQljaGFyIGNoID0gKnMrKzsKKwkJaWYgKGlzX3JmYzM5ODZfdW5yZXNlcnZlZChjaCkgfHwKKwkJICAgICghcmVzZXJ2ZWQgJiYgaXNfcmZjMzk4Nl9yZXNlcnZlZChjaCkpKQorCQkJc3RyYnVmX2FkZGNoKHNiLCBjaCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRmKHNiLCAiJSUlMDJ4IiwgY2gpOworCX0KK30KKwordm9pZCBzdHJidWZfYWRkc3RyX3VybGVuY29kZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcywKKwkJCSAgICAgaW50IHJlc2VydmVkKQoreworCXN0cmJ1Zl9hZGRfdXJsZW5jb2RlKHNiLCBzLCBzdHJsZW4ocyksIHJlc2VydmVkKTsKK30KKwordm9pZCBzdHJidWZfaHVtYW5pc2VfYnl0ZXMoc3RydWN0IHN0cmJ1ZiAqYnVmLCBvZmZfdCBieXRlcykKK3sKKwlpZiAoYnl0ZXMgPiAxIDw8IDMwKSB7CisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiV1LiUyLjJ1IEdpQiIsCisJCQkgICAgKGludCkoYnl0ZXMgPj4gMzApLAorCQkJICAgIChpbnQpKGJ5dGVzICYgKCgxIDw8IDMwKSAtIDEpKSAvIDEwNzM3NDE5KTsKKwl9IGVsc2UgaWYgKGJ5dGVzID4gMSA8PCAyMCkgeworCQlpbnQgeCA9IGJ5dGVzICsgNTI0MzsgIC8qIGZvciByb3VuZGluZyAqLworCQlzdHJidWZfYWRkZihidWYsICIldS4lMi4ydSBNaUIiLAorCQkJICAgIHggPj4gMjAsICgoeCAmICgoMSA8PCAyMCkgLSAxKSkgKiAxMDApID4+IDIwKTsKKwl9IGVsc2UgaWYgKGJ5dGVzID4gMSA8PCAxMCkgeworCQlpbnQgeCA9IGJ5dGVzICsgNTsgIC8qIGZvciByb3VuZGluZyAqLworCQlzdHJidWZfYWRkZihidWYsICIldS4lMi4ydSBLaUIiLAorCQkJICAgIHggPj4gMTAsICgoeCAmICgoMSA8PCAxMCkgLSAxKSkgKiAxMDApID4+IDEwKTsKKwl9IGVsc2UgeworCQlzdHJidWZfYWRkZihidWYsICIldSBieXRlcyIsIChpbnQpYnl0ZXMpOworCX0KK30KKwordm9pZCBzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaWYgKCEqcGF0aCkKKwkJZGllKCJUaGUgZW1wdHkgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIHBhdGgiKTsKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgocGF0aCkpIHsKKwkJc3RydWN0IHN0YXQgY3dkX3N0YXQsIHB3ZF9zdGF0OworCQlzaXplX3Qgb3JpZ19sZW4gPSBzYi0+bGVuOworCQljaGFyICpjd2QgPSB4Z2V0Y3dkKCk7CisJCWNoYXIgKnB3ZCA9IGdldGVudigiUFdEIik7CisJCWlmIChwd2QgJiYgc3RyY21wKHB3ZCwgY3dkKSAmJgorCQkgICAgIXN0YXQoY3dkLCAmY3dkX3N0YXQpICYmCisJCSAgICAoY3dkX3N0YXQuc3RfZGV2IHx8IGN3ZF9zdGF0LnN0X2lubykgJiYKKwkJICAgICFzdGF0KHB3ZCwgJnB3ZF9zdGF0KSAmJgorCQkgICAgcHdkX3N0YXQuc3RfZGV2ID09IGN3ZF9zdGF0LnN0X2RldiAmJgorCQkgICAgcHdkX3N0YXQuc3RfaW5vID09IGN3ZF9zdGF0LnN0X2lubykKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIHB3ZCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoc2IsIGN3ZCk7CisJCWlmIChzYi0+bGVuID4gb3JpZ19sZW4gJiYgIWlzX2Rpcl9zZXAoc2ItPmJ1ZltzYi0+bGVuIC0gMV0pKQorCQkJc3RyYnVmX2FkZGNoKHNiLCAnLycpOworCQlmcmVlKGN3ZCk7CisJfQorCXN0cmJ1Zl9hZGRzdHIoc2IsIHBhdGgpOworfQorCitpbnQgcHJpbnRmX2xuKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2cHJpbnRmKGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKHJldCA8IDAgfHwgcHV0Y2hhcignXG4nKSA9PSBFT0YpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gcmV0ICsgMTsKK30KKworaW50IGZwcmludGZfbG4oRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZnByaW50ZihmcCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlpZiAocmV0IDwgMCB8fCBwdXRjKCdcbicsIGZwKSA9PSBFT0YpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gcmV0ICsgMTsKK30KKworY2hhciAqeHN0cmR1cF90b2xvd2VyKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwljaGFyICpyZXN1bHQ7CisJc2l6ZV90IGxlbiwgaTsKKworCWxlbiA9IHN0cmxlbihzdHJpbmcpOworCXJlc3VsdCA9IHhtYWxsb2MobGVuICsgMSk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlyZXN1bHRbaV0gPSB0b2xvd2VyKHN0cmluZ1tpXSk7CisJcmVzdWx0W2ldID0gJ1wwJzsKKwlyZXR1cm4gcmVzdWx0OworfQorCitjaGFyICp4c3RydmZtdChjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJidWZfdmFkZGYoJmJ1ZiwgZm10LCBhcCk7CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCk7Cit9CisKK2NoYXIgKnhzdHJmbXQoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwljaGFyICpyZXQ7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB4c3RydmZtdChmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzdHJidWZfYWRkZnRpbWUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3Qgc3RydWN0IHRtICp0bSkKK3sKKwlzaXplX3QgaGludCA9IDEyODsKKwlzaXplX3QgbGVuOworCisJaWYgKCEqZm10KQorCQlyZXR1cm47CisKKwlzdHJidWZfZ3JvdyhzYiwgaGludCk7CisJbGVuID0gc3RyZnRpbWUoc2ItPmJ1ZiArIHNiLT5sZW4sIHNiLT5hbGxvYyAtIHNiLT5sZW4sIGZtdCwgdG0pOworCisJaWYgKCFsZW4pIHsKKwkJLyoKKwkJICogc3RyZnRpbWUgcmVwb3J0cyAiMCIgaWYgaXQgY291bGQgbm90IGZpdCB0aGUgcmVzdWx0IGluIHRoZSBidWZmZXIuCisJCSAqIFVuZm9ydHVuYXRlbHksIGl0IGFsc28gcmVwb3J0cyAiMCIgaWYgdGhlIHJlcXVlc3RlZCB0aW1lIHN0cmluZworCQkgKiB0YWtlcyAwIGJ5dGVzLiBTbyBvdXIgc3RyYXRlZ3kgaXMgdG8gbXVuZ2UgdGhlIGZvcm1hdCBzbyB0aGF0IHRoZQorCQkgKiBvdXRwdXQgY29udGFpbnMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgYW5kIHRoZW4gZHJvcCB0aGUgZXh0cmEKKwkJICogY2hhcmFjdGVyIGJlZm9yZSByZXR1cm5pbmcuCisJCSAqLworCQlzdHJ1Y3Qgc3RyYnVmIG11bmdlZF9mbXQgPSBTVFJCVUZfSU5JVDsKKwkJc3RyYnVmX2FkZGYoJm11bmdlZF9mbXQsICIlcyAiLCBmbXQpOworCQl3aGlsZSAoIWxlbikgeworCQkJaGludCAqPSAyOworCQkJc3RyYnVmX2dyb3coc2IsIGhpbnQpOworCQkJbGVuID0gc3RyZnRpbWUoc2ItPmJ1ZiArIHNiLT5sZW4sIHNiLT5hbGxvYyAtIHNiLT5sZW4sCisJCQkJICAgICAgIG11bmdlZF9mbXQuYnVmLCB0bSk7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJm11bmdlZF9mbXQpOworCQlsZW4tLTsgLyogZHJvcCBtdW5nZWQgc3BhY2UgKi8KKwl9CisJc3RyYnVmX3NldGxlbihzYiwgc2ItPmxlbiArIGxlbik7Cit9CisKK3ZvaWQgc3RyYnVmX2FkZF91bmlxdWVfYWJicmV2KHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJICAgICAgaW50IGFiYnJldl9sZW4pCit7CisJaW50IHI7CisJc3RyYnVmX2dyb3coc2IsIEdJVF9TSEExX0hFWFNaICsgMSk7CisJciA9IGZpbmRfdW5pcXVlX2FiYnJldl9yKHNiLT5idWYgKyBzYi0+bGVuLCBzaGExLCBhYmJyZXZfbGVuKTsKKwlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgcik7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgYSBsaW5lLCB3aXRob3V0IHRyYWlsaW5nIHNwYWNlcy4KKyAqCisgKiBJZiB0aGUgbGluZSBlbmRzIHdpdGggbmV3bGluZSwgaXQgd2lsbCBiZSByZW1vdmVkIHRvby4KKyAqLworc3RhdGljIHNpemVfdCBjbGVhbnVwKGNoYXIgKmxpbmUsIHNpemVfdCBsZW4pCit7CisJd2hpbGUgKGxlbikgeworCQl1bnNpZ25lZCBjaGFyIGMgPSBsaW5lW2xlbiAtIDFdOworCQlpZiAoIWlzc3BhY2UoYykpCisJCQlicmVhazsKKwkJbGVuLS07CisJfQorCisJcmV0dXJuIGxlbjsKK30KKworLyoKKyAqIFJlbW92ZSBlbXB0eSBsaW5lcyBmcm9tIHRoZSBiZWdpbm5pbmcgYW5kIGVuZAorICogYW5kIGFsc28gdHJhaWxpbmcgc3BhY2VzIGZyb20gZXZlcnkgbGluZS4KKyAqCisgKiBUdXJuIG11bHRpcGxlIGNvbnNlY3V0aXZlIGVtcHR5IGxpbmVzIGJldHdlZW4gcGFyYWdyYXBocworICogaW50byBqdXN0IG9uZSBlbXB0eSBsaW5lLgorICoKKyAqIElmIHRoZSBpbnB1dCBoYXMgb25seSBlbXB0eSBsaW5lcyBhbmQgc3BhY2VzLAorICogbm8gb3V0cHV0IHdpbGwgYmUgcHJvZHVjZWQuCisgKgorICogSWYgbGFzdCBsaW5lIGRvZXMgbm90IGhhdmUgYSBuZXdsaW5lIGF0IHRoZSBlbmQsIG9uZSBpcyBhZGRlZC4KKyAqCisgKiBFbmFibGUgc2tpcF9jb21tZW50cyB0byBza2lwIGV2ZXJ5IGxpbmUgc3RhcnRpbmcgd2l0aCBjb21tZW50CisgKiBjaGFyYWN0ZXIuCisgKi8KK3ZvaWQgc3RyYnVmX3N0cmlwc3BhY2Uoc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBza2lwX2NvbW1lbnRzKQoreworCWludCBlbXB0aWVzID0gMDsKKwlzaXplX3QgaSwgaiwgbGVuLCBuZXdsZW47CisJY2hhciAqZW9sOworCisJLyogV2UgbWF5IGhhdmUgdG8gYWRkIGEgbmV3bGluZS4gKi8KKwlzdHJidWZfZ3JvdyhzYiwgMSk7CisKKwlmb3IgKGkgPSBqID0gMDsgaSA8IHNiLT5sZW47IGkgKz0gbGVuLCBqICs9IG5ld2xlbikgeworCQllb2wgPSBtZW1jaHIoc2ItPmJ1ZiArIGksICdcbicsIHNiLT5sZW4gLSBpKTsKKwkJbGVuID0gZW9sID8gZW9sIC0gKHNiLT5idWYgKyBpKSArIDEgOiBzYi0+bGVuIC0gaTsKKworCQlpZiAoc2tpcF9jb21tZW50cyAmJiBsZW4gJiYgc2ItPmJ1ZltpXSA9PSBjb21tZW50X2xpbmVfY2hhcikgeworCQkJbmV3bGVuID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCW5ld2xlbiA9IGNsZWFudXAoc2ItPmJ1ZiArIGksIGxlbik7CisKKwkJLyogTm90IGp1c3QgYW4gZW1wdHkgbGluZT8gKi8KKwkJaWYgKG5ld2xlbikgeworCQkJaWYgKGVtcHRpZXMgPiAwICYmIGogPiAwKQorCQkJCXNiLT5idWZbaisrXSA9ICdcbic7CisJCQllbXB0aWVzID0gMDsKKwkJCW1lbW1vdmUoc2ItPmJ1ZiArIGosIHNiLT5idWYgKyBpLCBuZXdsZW4pOworCQkJc2ItPmJ1ZltuZXdsZW4gKyBqKytdID0gJ1xuJzsKKwkJfSBlbHNlIHsKKwkJCWVtcHRpZXMrKzsKKwkJfQorCX0KKworCXN0cmJ1Zl9zZXRsZW4oc2IsIGopOworfQpkaWZmIC0tZ2l0IGEvc3RyYnVmLmggYi9zdHJidWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTIzZmNhCi0tLSAvZGV2L251bGwKKysrIGIvc3RyYnVmLmgKQEAgLTAsMCArMSw1NTAgQEAKKyNpZm5kZWYgU1RSQlVGX0gKKyNkZWZpbmUgU1RSQlVGX0gKKworLyoqCisgKiBzdHJidWYncyBhcmUgbWVhbnQgdG8gYmUgdXNlZCB3aXRoIGFsbCB0aGUgdXN1YWwgQyBzdHJpbmcgYW5kIG1lbW9yeQorICogQVBJcy4gR2l2ZW4gdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgaXMga25vd24sIGl0J3Mgb2Z0ZW4gYmV0dGVyIHRvCisgKiB1c2UgdGhlIG1lbSogZnVuY3Rpb25zIHRoYW4gYSBzdHIqIG9uZSAobWVtY2hyIHZzLiBzdHJjaHIgZS5nLikuCisgKiBUaG91Z2gsIG9uZSBoYXMgdG8gYmUgY2FyZWZ1bCBhYm91dCB0aGUgZmFjdCB0aGF0IHN0ciogZnVuY3Rpb25zIG9mdGVuCisgKiBzdG9wIG9uIE5VTHMgYW5kIHRoYXQgc3RyYnVmcyBtYXkgaGF2ZSBlbWJlZGRlZCBOVUxzLgorICoKKyAqIEEgc3RyYnVmIGlzIE5VTCB0ZXJtaW5hdGVkIGZvciBjb252ZW5pZW5jZSwgYnV0IG5vIGZ1bmN0aW9uIGluIHRoZQorICogc3RyYnVmIEFQSSBhY3R1YWxseSByZWxpZXMgb24gdGhlIHN0cmluZyBiZWluZyBmcmVlIG9mIE5VTHMuCisgKgorICogc3RyYnVmcyBoYXZlIHNvbWUgaW52YXJpYW50cyB0aGF0IGFyZSB2ZXJ5IGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQ6CisgKgorICogIC0gVGhlIGBidWZgIG1lbWJlciBpcyBuZXZlciBOVUxMLCBzbyBpdCBjYW4gYmUgdXNlZCBpbiBhbnkgdXN1YWwgQworICogICAgc3RyaW5nIG9wZXJhdGlvbnMgc2FmZWx5LiBzdHJidWYncyBfaGF2ZV8gdG8gYmUgaW5pdGlhbGl6ZWQgZWl0aGVyIGJ5CisgKiAgICBgc3RyYnVmX2luaXQoKWAgb3IgYnkgYD0gU1RSQlVGX0lOSVRgIGJlZm9yZSB0aGUgaW52YXJpYW50cywgdGhvdWdoLgorICoKKyAqICAgIERvICpub3QqIGFzc3VtZSBhbnl0aGluZyBvbiB3aGF0IGBidWZgIHJlYWxseSBpcyAoZS5nLiBpZiBpdCBpcworICogICAgYWxsb2NhdGVkIG1lbW9yeSBvciBub3QpLCB1c2UgYHN0cmJ1Zl9kZXRhY2goKWAgdG8gdW53cmFwIGEgbWVtb3J5CisgKiAgICBidWZmZXIgZnJvbSBpdHMgc3RyYnVmIHNoZWxsIGluIGEgc2FmZSB3YXkuIFRoYXQgaXMgdGhlIHNvbGUgc3VwcG9ydGVkCisgKiAgICB3YXkuIFRoaXMgd2lsbCBnaXZlIHlvdSBhIG1hbGxvY2VkIGJ1ZmZlciB0aGF0IHlvdSBjYW4gbGF0ZXIgYGZyZWUoKWAuCisgKgorICogICAgSG93ZXZlciwgaXQgaXMgdG90YWxseSBzYWZlIHRvIG1vZGlmeSBhbnl0aGluZyBpbiB0aGUgc3RyaW5nIHBvaW50ZWQgYnkKKyAqICAgIHRoZSBgYnVmYCBtZW1iZXIsIGJldHdlZW4gdGhlIGluZGljZXMgYDBgIGFuZCBgbGVuLTFgIChpbmNsdXNpdmUpLgorICoKKyAqICAtIFRoZSBgYnVmYCBtZW1iZXIgaXMgYSBieXRlIGFycmF5IHRoYXQgaGFzIGF0IGxlYXN0IGBsZW4gKyAxYCBieXRlcworICogICAgYWxsb2NhdGVkLiBUaGUgZXh0cmEgYnl0ZSBpcyB1c2VkIHRvIHN0b3JlIGEgYCdcMCdgLCBhbGxvd2luZyB0aGUKKyAqICAgIGBidWZgIG1lbWJlciB0byBiZSBhIHZhbGlkIEMtc3RyaW5nLiBFdmVyeSBzdHJidWYgZnVuY3Rpb24gZW5zdXJlIHRoaXMKKyAqICAgIGludmFyaWFudCBpcyBwcmVzZXJ2ZWQuCisgKgorICogICAgTk9URTogSXQgaXMgT0sgdG8gInBsYXkiIHdpdGggdGhlIGJ1ZmZlciBkaXJlY3RseSBpZiB5b3Ugd29yayBpdCB0aGlzCisgKiAgICB3YXk6CisgKgorICogICAgICAgIHN0cmJ1Zl9ncm93KHNiLCBTT01FX1NJWkUpOyA8MT4KKyAqICAgICAgICBzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuICsgU09NRV9PVEhFUl9TSVpFKTsKKyAqCisgKiAgICA8MT4gSGVyZSwgdGhlIG1lbW9yeSBhcnJheSBzdGFydGluZyBhdCBgc2ItPmJ1ZmAsIGFuZCBvZiBsZW5ndGgKKyAqICAgIGBzdHJidWZfYXZhaWwoc2IpYCBpcyBhbGwgeW91cnMsIGFuZCB5b3UgY2FuIGJlIHN1cmUgdGhhdAorICogICAgYHN0cmJ1Zl9hdmFpbChzYilgIGlzIGF0IGxlYXN0IGBTT01FX1NJWkVgLgorICoKKyAqICAgIE5PVEU6IGBTT01FX09USEVSX1NJWkVgIG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0byBgc3RyYnVmX2F2YWlsKHNiKWAuCisgKgorICogICAgRG9pbmcgc28gaXMgc2FmZSwgdGhvdWdoIGlmIGl0IGhhcyB0byBiZSBkb25lIGluIG1hbnkgcGxhY2VzLCBhZGRpbmcgdGhlCisgKiAgICBtaXNzaW5nIEFQSSB0byB0aGUgc3RyYnVmIG1vZHVsZSBpcyB0aGUgd2F5IHRvIGdvLgorICoKKyAqICAgIFdBUk5JTkc6IERvIF9ub3RfIGFzc3VtZSB0aGF0IHRoZSBhcmVhIHRoYXQgaXMgeW91cnMgaXMgb2Ygc2l6ZSBgYWxsb2MKKyAqICAgIC0gMWAgZXZlbiBpZiBpdCdzIHRydWUgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uIEFsbG9jIGlzIHNvbWVob3cgYQorICogICAgInByaXZhdGUiIG1lbWJlciB0aGF0IHNob3VsZCBub3QgYmUgbWVzc2VkIHdpdGguIFVzZSBgc3RyYnVmX2F2YWlsKClgCisgKiAgICBpbnN0ZWFkLgorKi8KKworLyoqCisgKiBEYXRhIFN0cnVjdHVyZXMKKyAqIC0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qKgorICogVGhpcyBpcyB0aGUgc3RyaW5nIGJ1ZmZlciBzdHJ1Y3R1cmUuIFRoZSBgbGVuYCBtZW1iZXIgY2FuIGJlIHVzZWQgdG8KKyAqIGRldGVybWluZSB0aGUgY3VycmVudCBsZW5ndGggb2YgdGhlIHN0cmluZywgYW5kIGBidWZgIG1lbWJlciBwcm92aWRlcworICogYWNjZXNzIHRvIHRoZSBzdHJpbmcgaXRzZWxmLgorICovCitzdHJ1Y3Qgc3RyYnVmIHsKKwlzaXplX3QgYWxsb2M7CisJc2l6ZV90IGxlbjsKKwljaGFyICpidWY7Cit9OworCitleHRlcm4gY2hhciBzdHJidWZfc2xvcGJ1ZltdOworI2RlZmluZSBTVFJCVUZfSU5JVCAgeyAwLCAwLCBzdHJidWZfc2xvcGJ1ZiB9CisKKy8qKgorICogTGlmZSBDeWNsZSBGdW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBzdHJ1Y3R1cmUuIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGNhbiBiZSB6ZXJvIG9yIGEgYmlnZ2VyCisgKiBudW1iZXIgdG8gYWxsb2NhdGUgbWVtb3J5LCBpbiBjYXNlIHlvdSB3YW50IHRvIHByZXZlbnQgZnVydGhlciByZWFsbG9jcy4KKyAqLworZXh0ZXJuIHZvaWQgc3RyYnVmX2luaXQoc3RydWN0IHN0cmJ1ZiAqLCBzaXplX3QpOworCisvKioKKyAqIFJlbGVhc2UgYSBzdHJpbmcgYnVmZmVyIGFuZCB0aGUgbWVtb3J5IGl0IHVzZWQuIFlvdSBzaG91bGQgbm90IHVzZSB0aGUKKyAqIHN0cmluZyBidWZmZXIgYWZ0ZXIgdXNpbmcgdGhpcyBmdW5jdGlvbiwgdW5sZXNzIHlvdSBpbml0aWFsaXplIGl0IGFnYWluLgorICovCitleHRlcm4gdm9pZCBzdHJidWZfcmVsZWFzZShzdHJ1Y3Qgc3RyYnVmICopOworCisvKioKKyAqIERldGFjaCB0aGUgc3RyaW5nIGZyb20gdGhlIHN0cmJ1ZiBhbmQgcmV0dXJucyBpdDsgeW91IG5vdyBvd24gdGhlCisgKiBzdG9yYWdlIHRoZSBzdHJpbmcgb2NjdXBpZXMgYW5kIGl0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgZnJvbSB0aGVuIG9uCisgKiB0byByZWxlYXNlIGl0IHdpdGggYGZyZWUoMylgIHdoZW4geW91IGFyZSBkb25lIHdpdGggaXQuCisgKi8KK2V4dGVybiBjaGFyICpzdHJidWZfZGV0YWNoKHN0cnVjdCBzdHJidWYgKiwgc2l6ZV90ICopOworCisvKioKKyAqIEF0dGFjaCBhIHN0cmluZyB0byBhIGJ1ZmZlci4gWW91IHNob3VsZCBzcGVjaWZ5IHRoZSBzdHJpbmcgdG8gYXR0YWNoLAorICogdGhlIGN1cnJlbnQgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgYW5kIHRoZSBhbW91bnQgb2YgYWxsb2NhdGVkIG1lbW9yeS4KKyAqIFRoZSBhbW91bnQgbXVzdCBiZSBsYXJnZXIgdGhhbiB0aGUgc3RyaW5nIGxlbmd0aCwgYmVjYXVzZSB0aGUgc3RyaW5nIHlvdQorICogcGFzcyBpcyBzdXBwb3NlZCB0byBiZSBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZy4gIFRoaXMgc3RyaW5nIF9tdXN0XyBiZQorICogbWFsbG9jKCllZCwgYW5kIGFmdGVyIGF0dGFjaGluZywgdGhlIHBvaW50ZXIgY2Fubm90IGJlIHJlbGllZCB1cG9uCisgKiBhbnltb3JlLCBhbmQgbmVpdGhlciBiZSBmcmVlKClkIGRpcmVjdGx5LgorICovCitleHRlcm4gdm9pZCBzdHJidWZfYXR0YWNoKHN0cnVjdCBzdHJidWYgKiwgdm9pZCAqLCBzaXplX3QsIHNpemVfdCk7CisKKy8qKgorICogU3dhcCB0aGUgY29udGVudHMgb2YgdHdvIHN0cmluZyBidWZmZXJzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RyYnVmX3N3YXAoc3RydWN0IHN0cmJ1ZiAqYSwgc3RydWN0IHN0cmJ1ZiAqYikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHRtcCA9ICphOworCSphID0gKmI7CisJKmIgPSB0bXA7Cit9CisKKworLyoqCisgKiBGdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoqCisgKiBEZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBhbGxvY2F0ZWQgYnV0IHVudXNlZCBtZW1vcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cmJ1Zl9hdmFpbChjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzYikKK3sKKwlyZXR1cm4gc2ItPmFsbG9jID8gc2ItPmFsbG9jIC0gc2ItPmxlbiAtIDEgOiAwOworfQorCisvKioKKyAqIEVuc3VyZSB0aGF0IGF0IGxlYXN0IHRoaXMgYW1vdW50IG9mIHVudXNlZCBtZW1vcnkgaXMgYXZhaWxhYmxlIGFmdGVyCisgKiBgbGVuYC4gVGhpcyBpcyB1c2VkIHdoZW4geW91IGtub3cgYSB0eXBpY2FsIHNpemUgZm9yIHdoYXQgeW91IHdpbGwgYWRkCisgKiBhbmQgd2FudCB0byBhdm9pZCByZXBldGl0aXZlIGF1dG9tYXRpYyByZXNpemluZyBvZiB0aGUgdW5kZXJseWluZyBidWZmZXIuCisgKiBUaGlzIGlzIG5ldmVyIGEgbmVlZGVkIG9wZXJhdGlvbiwgYnV0IGNhbiBiZSBjcml0aWNhbCBmb3IgcGVyZm9ybWFuY2UgaW4KKyAqIHNvbWUgY2FzZXMuCisgKi8KK2V4dGVybiB2b2lkIHN0cmJ1Zl9ncm93KHN0cnVjdCBzdHJidWYgKiwgc2l6ZV90KTsKKworLyoqCisgKiBTZXQgdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyIHRvIGEgZ2l2ZW4gdmFsdWUuIFRoaXMgZnVuY3Rpb24gZG9lcyAqbm90KgorICogYWxsb2NhdGUgbmV3IG1lbW9yeSwgc28geW91IHNob3VsZCBub3QgcGVyZm9ybSBhIGBzdHJidWZfc2V0bGVuKClgIHRvIGEKKyAqIGxlbmd0aCB0aGF0IGlzIGxhcmdlciB0aGFuIGBsZW4gKyBzdHJidWZfYXZhaWwoKWAuIGBzdHJidWZfc2V0bGVuKClgIGlzCisgKiBqdXN0IG1lYW50IGFzIGEgJ3BsZWFzZSBmaXggaW52YXJpYW50cyBmcm9tIHRoaXMgc3RyYnVmIEkganVzdCBtZXNzZWQKKyAqIHdpdGgnLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RyYnVmX3NldGxlbihzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IGxlbikKK3sKKwlpZiAobGVuID4gKHNiLT5hbGxvYyA/IHNiLT5hbGxvYyAtIDEgOiAwKSkKKwkJZGllKCJCVUc6IHN0cmJ1Zl9zZXRsZW4oKSBiZXlvbmQgYnVmZmVyIik7CisJc2ItPmxlbiA9IGxlbjsKKwlzYi0+YnVmW2xlbl0gPSAnXDAnOworfQorCisvKioKKyAqIEVtcHR5IHRoZSBidWZmZXIgYnkgc2V0dGluZyB0aGUgc2l6ZSBvZiBpdCB0byB6ZXJvLgorICovCisjZGVmaW5lIHN0cmJ1Zl9yZXNldChzYikgIHN0cmJ1Zl9zZXRsZW4oc2IsIDApCisKKworLyoqCisgKiBGdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKioKKyAqIFN0cmlwIHdoaXRlc3BhY2UgZnJvbSB0aGUgYmVnaW5uaW5nIChgbHRyaW1gKSwgZW5kIChgcnRyaW1gKSwgb3IgYm90aCBzaWRlCisgKiAoYHRyaW1gKSBvZiBhIHN0cmluZy4KKyAqLworZXh0ZXJuIHZvaWQgc3RyYnVmX3RyaW0oc3RydWN0IHN0cmJ1ZiAqKTsKK2V4dGVybiB2b2lkIHN0cmJ1Zl9ydHJpbShzdHJ1Y3Qgc3RyYnVmICopOworZXh0ZXJuIHZvaWQgc3RyYnVmX2x0cmltKHN0cnVjdCBzdHJidWYgKik7CisKKy8qKgorICogUmVwbGFjZSB0aGUgY29udGVudHMgb2YgdGhlIHN0cmJ1ZiB3aXRoIGEgcmVlbmNvZGVkIGZvcm0uICBSZXR1cm5zIC0xCisgKiBvbiBlcnJvciwgMCBvbiBzdWNjZXNzLgorICovCitleHRlcm4gaW50IHN0cmJ1Zl9yZWVuY29kZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZnJvbSwgY29uc3QgY2hhciAqdG8pOworCisvKioKKyAqIExvd2VyY2FzZSBlYWNoIGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyIHVzaW5nIGB0b2xvd2VyYC4KKyAqLworZXh0ZXJuIHZvaWQgc3RyYnVmX3RvbG93ZXIoc3RydWN0IHN0cmJ1ZiAqc2IpOworCisvKioKKyAqIENvbXBhcmUgdHdvIGJ1ZmZlcnMuIFJldHVybnMgYW4gaW50ZWdlciBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyCisgKiB0aGFuIHplcm8gaWYgdGhlIGZpcnN0IGJ1ZmZlciBpcyBmb3VuZCwgcmVzcGVjdGl2ZWx5LCB0byBiZSBsZXNzIHRoYW4sCisgKiB0byBtYXRjaCwgb3IgYmUgZ3JlYXRlciB0aGFuIHRoZSBzZWNvbmQgYnVmZmVyLgorICovCitleHRlcm4gaW50IHN0cmJ1Zl9jbXAoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqLCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICopOworCisKKy8qKgorICogQWRkaW5nIGRhdGEgdG8gdGhlIGJ1ZmZlcgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIE5PVEU6IEFsbCBvZiB0aGUgZnVuY3Rpb25zIGluIHRoaXMgc2VjdGlvbiB3aWxsIGdyb3cgdGhlIGJ1ZmZlciBhcworICogbmVjZXNzYXJ5LiAgSWYgdGhleSBmYWlsIGZvciBzb21lIHJlYXNvbiBvdGhlciB0aGFuIG1lbW9yeSBzaG9ydGFnZSBhbmQgdGhlCisgKiBidWZmZXIgaGFkbid0IGJlZW4gYWxsb2NhdGVkIGJlZm9yZSAoaS5lLiB0aGUgYHN0cnVjdCBzdHJidWZgIHdhcyBzZXQgdG8KKyAqIGBTVFJCVUZfSU5JVGApLCB0aGVuIHRoZXkgd2lsbCBmcmVlKCkgaXQuCisgKi8KKworLyoqCisgKiBBZGQgYSBzaW5nbGUgY2hhcmFjdGVyIHRvIHRoZSBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJidWZfYWRkY2goc3RydWN0IHN0cmJ1ZiAqc2IsIGludCBjKQoreworCWlmICghc3RyYnVmX2F2YWlsKHNiKSkKKwkJc3RyYnVmX2dyb3coc2IsIDEpOworCXNiLT5idWZbc2ItPmxlbisrXSA9IGM7CisJc2ItPmJ1ZltzYi0+bGVuXSA9ICdcMCc7Cit9CisKKy8qKgorICogQWRkIGEgY2hhcmFjdGVyIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpbWVzIHRvIHRoZSBidWZmZXIuCisgKi8KK2V4dGVybiB2b2lkIHN0cmJ1Zl9hZGRjaGFycyhzdHJ1Y3Qgc3RyYnVmICpzYiwgaW50IGMsIHNpemVfdCBuKTsKKworLyoqCisgKiBJbnNlcnQgZGF0YSB0byB0aGUgZ2l2ZW4gcG9zaXRpb24gb2YgdGhlIGJ1ZmZlci4gVGhlIHJlbWFpbmluZyBjb250ZW50cworICogd2lsbCBiZSBzaGlmdGVkLCBub3Qgb3ZlcndyaXR0ZW4uCisgKi8KK2V4dGVybiB2b2lkIHN0cmJ1Zl9pbnNlcnQoc3RydWN0IHN0cmJ1ZiAqLCBzaXplX3QgcG9zLCBjb25zdCB2b2lkICosIHNpemVfdCk7CisKKy8qKgorICogUmVtb3ZlIGdpdmVuIGFtb3VudCBvZiBkYXRhIGZyb20gYSBnaXZlbiBwb3NpdGlvbiBvZiB0aGUgYnVmZmVyLgorICovCitleHRlcm4gdm9pZCBzdHJidWZfcmVtb3ZlKHN0cnVjdCBzdHJidWYgKiwgc2l6ZV90IHBvcywgc2l6ZV90IGxlbik7CisKKy8qKgorICogUmVtb3ZlIHRoZSBieXRlcyBiZXR3ZWVuIGBwb3MuLnBvcytsZW5gIGFuZCByZXBsYWNlIGl0IHdpdGggdGhlIGdpdmVuCisgKiBkYXRhLgorICovCitleHRlcm4gdm9pZCBzdHJidWZfc3BsaWNlKHN0cnVjdCBzdHJidWYgKiwgc2l6ZV90IHBvcywgc2l6ZV90IGxlbiwKKwkJCSAgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworCisvKioKKyAqIEFkZCBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgYnVmZmVyLiBFYWNoIGxpbmUgd2lsbCBiZSBwcmVwZW5kZWQKKyAqIGJ5IGEgY29tbWVudCBjaGFyYWN0ZXIgYW5kIGEgYmxhbmsuCisgKi8KK2V4dGVybiB2b2lkIHN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKHN0cnVjdCBzdHJidWYgKm91dCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CisKKworLyoqCisgKiBBZGQgZGF0YSBvZiBnaXZlbiBsZW5ndGggdG8gdGhlIGJ1ZmZlci4KKyAqLworZXh0ZXJuIHZvaWQgc3RyYnVmX2FkZChzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKKworLyoqCisgKiBBZGQgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gdGhlIGJ1ZmZlci4KKyAqCisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIHdpbGwgKmFsd2F5cyogYmUgaW1wbGVtZW50ZWQgYXMgYW4gaW5saW5lIG9yIGEgbWFjcm8KKyAqIHVzaW5nIHN0cmxlbiwgbWVhbmluZyB0aGF0IHRoaXMgaXMgZWZmaWNpZW50IHRvIHdyaXRlIHRoaW5ncyBsaWtlOgorICoKKyAqICAgICBzdHJidWZfYWRkc3RyKHNiLCAiaW1tZWRpYXRlIHN0cmluZyIpOworICoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN0cmJ1Zl9hZGRzdHIoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnMpCit7CisJc3RyYnVmX2FkZChzYiwgcywgc3RybGVuKHMpKTsKK30KKworLyoqCisgKiBDb3B5IHRoZSBjb250ZW50cyBvZiBhbm90aGVyIGJ1ZmZlciBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IG9uZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN0cmJ1Zl9hZGRidWYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IHN0cnVjdCBzdHJidWYgKnNiMikKK3sKKwlzdHJidWZfZ3JvdyhzYiwgc2IyLT5sZW4pOworCXN0cmJ1Zl9hZGQoc2IsIHNiMi0+YnVmLCBzYjItPmxlbik7Cit9CisKKy8qKgorICogQ29weSBwYXJ0IG9mIHRoZSBidWZmZXIgZnJvbSBhIGdpdmVuIHBvc2l0aW9uIHRpbGwgYSBnaXZlbiBsZW5ndGggdG8gdGhlCisgKiBlbmQgb2YgdGhlIGJ1ZmZlci4KKyAqLworZXh0ZXJuIHZvaWQgc3RyYnVmX2FkZGR1cChzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IHBvcywgc2l6ZV90IGxlbik7CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBleHBhbmQgYSBmb3JtYXQgc3RyaW5nIGNvbnRhaW5pbmcKKyAqIHBsYWNlaG9sZGVycy4gVG8gdGhhdCBlbmQsIGl0IHBhcnNlcyB0aGUgc3RyaW5nIGFuZCBjYWxscyB0aGUgc3BlY2lmaWVkCisgKiBmdW5jdGlvbiBmb3IgZXZlcnkgcGVyY2VudCBzaWduIGZvdW5kLgorICoKKyAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBnaXZlbiBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgYCVgCisgKiBhbmQgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3Qgc3RyYnVmLiAgSXQgaXMgZXhwZWN0ZWQgdG8gYWRkIHRoZSBleHBhbmRlZAorICogdmVyc2lvbiBvZiB0aGUgcGxhY2Vob2xkZXIgdG8gdGhlIHN0cmJ1ZiwgZS5nLiB0byBhZGQgYSBuZXdsaW5lCisgKiBjaGFyYWN0ZXIgaWYgdGhlIGxldHRlciBgbmAgYXBwZWFycyBhZnRlciBhIGAlYC4gIFRoZSBmdW5jdGlvbiByZXR1cm5zCisgKiB0aGUgbGVuZ3RoIG9mIHRoZSBwbGFjZWhvbGRlciByZWNvZ25pemVkIGFuZCBgc3RyYnVmX2V4cGFuZCgpYCBza2lwcworICogb3ZlciBpdC4KKyAqCisgKiBUaGUgZm9ybWF0IGAlJWAgaXMgYXV0b21hdGljYWxseSBleHBhbmRlZCB0byBhIHNpbmdsZSBgJWAgYXMgYSBxdW90aW5nCisgKiBtZWNoYW5pc207IGNhbGxlcnMgZG8gbm90IG5lZWQgdG8gaGFuZGxlIHRoZSBgJWAgcGxhY2Vob2xkZXIgdGhlbXNlbHZlcywKKyAqIGFuZCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBub3QgYmUgaW52b2tlZCBmb3IgdGhpcyBwbGFjZWhvbGRlci4KKyAqCisgKiBBbGwgb3RoZXIgY2hhcmFjdGVycyAobm9uLXBlcmNlbnQgYW5kIG5vdCBza2lwcGVkIG9uZXMpIGFyZSBjb3BpZWQKKyAqIHZlcmJhdGltIHRvIHRoZSBzdHJidWYuICBJZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQgemVybywgbWVhbmluZyB0aGF0IHRoZQorICogcGxhY2Vob2xkZXIgaXMgdW5rbm93biwgdGhlbiB0aGUgcGVyY2VudCBzaWduIGlzIGNvcGllZCwgdG9vLgorICoKKyAqIEluIG9yZGVyIHRvIGZhY2lsaXRhdGUgY2FjaGluZyBhbmQgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBnaXZlCisgKiBwYXJhbWV0ZXJzIHRvIHRoZSBjYWxsYmFjaywgYHN0cmJ1Zl9leHBhbmQoKWAgcGFzc2VzIGEgY29udGV4dCBwb2ludGVyLAorICogd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlIHByb2dyYW1tZXIgb2YgdGhlIGNhbGxiYWNrIGFzIHNoZSBzZWVzIGZpdC4KKyAqLwordHlwZWRlZiBzaXplX3QgKCpleHBhbmRfZm5fdCkgKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwbGFjZWhvbGRlciwgdm9pZCAqY29udGV4dCk7CitleHRlcm4gdm9pZCBzdHJidWZfZXhwYW5kKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpmb3JtYXQsIGV4cGFuZF9mbl90IGZuLCB2b2lkICpjb250ZXh0KTsKKworLyoqCisgKiBVc2VkIGFzIGNhbGxiYWNrIGZvciBgc3RyYnVmX2V4cGFuZCgpYCwgZXhwZWN0cyBhbiBhcnJheSBvZgorICogc3RydWN0IHN0cmJ1Zl9leHBhbmRfZGljdF9lbnRyeSBhcyBjb250ZXh0LCBpLmUuIHBhaXJzIG9mCisgKiBwbGFjZWhvbGRlciBhbmQgcmVwbGFjZW1lbnQgc3RyaW5nLiAgVGhlIGFycmF5IG5lZWRzIHRvIGJlCisgKiB0ZXJtaW5hdGVkIGJ5IGFuIGVudHJ5IHdpdGggcGxhY2Vob2xkZXIgc2V0IHRvIE5VTEwuCisgKi8KK3N0cnVjdCBzdHJidWZfZXhwYW5kX2RpY3RfZW50cnkgeworCWNvbnN0IGNoYXIgKnBsYWNlaG9sZGVyOworCWNvbnN0IGNoYXIgKnZhbHVlOworfTsKK2V4dGVybiBzaXplX3Qgc3RyYnVmX2V4cGFuZF9kaWN0X2NiKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpwbGFjZWhvbGRlciwgdm9pZCAqY29udGV4dCk7CisKKy8qKgorICogQXBwZW5kIHRoZSBjb250ZW50cyBvZiBvbmUgc3RyYnVmIHRvIGFub3RoZXIsIHF1b3RpbmcgYW55CisgKiBwZXJjZW50IHNpZ25zICgiJSIpIGludG8gZG91YmxlLXBlcmNlbnRzICgiJSUiKSBpbiB0aGUKKyAqIGRlc3RpbmF0aW9uLiBUaGlzIGlzIHVzZWZ1bCBmb3IgbGl0ZXJhbCBkYXRhIHRvIGJlIGZlZCB0byBlaXRoZXIKKyAqIHN0cmJ1Zl9leHBhbmQgb3IgdG8gdGhlICpwcmludGYgZmFtaWx5IG9mIGZ1bmN0aW9ucy4KKyAqLworZXh0ZXJuIHZvaWQgc3RyYnVmX2FkZGJ1Zl9wZXJjZW50cXVvdGUoc3RydWN0IHN0cmJ1ZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpzcmMpOworCisvKioKKyAqIEFwcGVuZCB0aGUgZ2l2ZW4gYnl0ZSBzaXplIGFzIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIChpLmUuIDEyLjIzIEtpQiwKKyAqIDMuNTAgTWlCKS4KKyAqLworZXh0ZXJuIHZvaWQgc3RyYnVmX2h1bWFuaXNlX2J5dGVzKHN0cnVjdCBzdHJidWYgKmJ1Ziwgb2ZmX3QgYnl0ZXMpOworCisvKioKKyAqIEFkZCBhIGZvcm1hdHRlZCBzdHJpbmcgdG8gdGhlIGJ1ZmZlci4KKyAqLworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsMiwzKSkpCitleHRlcm4gdm9pZCBzdHJidWZfYWRkZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCisvKioKKyAqIEFkZCBhIGZvcm1hdHRlZCBzdHJpbmcgcHJlcGVuZGVkIGJ5IGEgY29tbWVudCBjaGFyYWN0ZXIgYW5kIGEKKyAqIGJsYW5rIHRvIHRoZSBidWZmZXIuCisgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitleHRlcm4gdm9pZCBzdHJidWZfY29tbWVudGVkX2FkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsMiwwKSkpCitleHRlcm4gdm9pZCBzdHJidWZfdmFkZGYoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7CisKKy8qKgorICogQWRkIHRoZSB0aW1lIHNwZWNpZmllZCBieSBgdG1gLCBhcyBmb3JtYXR0ZWQgYnkgYHN0cmZ0aW1lYC4KKyAqLworZXh0ZXJuIHZvaWQgc3RyYnVmX2FkZGZ0aW1lKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpmbXQsIGNvbnN0IHN0cnVjdCB0bSAqdG0pOworCisvKioKKyAqIFJlYWQgYSBnaXZlbiBzaXplIG9mIGRhdGEgZnJvbSBhIEZJTEUqIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlci4KKyAqCisgKiBOT1RFOiBUaGUgYnVmZmVyIGlzIHJld291bmQgaWYgdGhlIHJlYWQgZmFpbHMuIElmIC0xIGlzIHJldHVybmVkLAorICogYGVycm5vYCBtdXN0IGJlIGNvbnN1bHRlZCwgbGlrZSB5b3Ugd291bGQgZG8gZm9yIGByZWFkKDMpYC4KKyAqIGBzdHJidWZfcmVhZCgpYCwgYHN0cmJ1Zl9yZWFkX2ZpbGUoKWAgYW5kIGBzdHJidWZfZ2V0bGluZSgpYCBoYXMgdGhlCisgKiBzYW1lIGJlaGF2aW91ciBhcyB3ZWxsLgorICovCitleHRlcm4gc2l6ZV90IHN0cmJ1Zl9mcmVhZChzdHJ1Y3Qgc3RyYnVmICosIHNpemVfdCwgRklMRSAqKTsKKworLyoqCisgKiBSZWFkIHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIGZpbGUgZGVzY3JpcHRvci4gVGhlIHRoaXJkIGFyZ3VtZW50IGNhbiBiZQorICogdXNlZCB0byBnaXZlIGEgaGludCBhYm91dCB0aGUgZmlsZSBzaXplLCB0byBhdm9pZCByZWFsbG9jcy4gIElmIHJlYWQgZmFpbHMsCisgKiBhbnkgcGFydGlhbCByZWFkIGlzIHVuZG9uZS4KKyAqLworZXh0ZXJuIHNzaXplX3Qgc3RyYnVmX3JlYWQoc3RydWN0IHN0cmJ1ZiAqLCBpbnQgZmQsIHNpemVfdCBoaW50KTsKKworLyoqCisgKiBSZWFkIHRoZSBjb250ZW50cyBvZiBhIGZpbGUsIHNwZWNpZmllZCBieSBpdHMgcGF0aC4gVGhlIHRoaXJkIGFyZ3VtZW50CisgKiBjYW4gYmUgdXNlZCB0byBnaXZlIGEgaGludCBhYm91dCB0aGUgZmlsZSBzaXplLCB0byBhdm9pZCByZWFsbG9jcy4KKyAqLworZXh0ZXJuIHNzaXplX3Qgc3RyYnVmX3JlYWRfZmlsZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpOworCisvKioKKyAqIFJlYWQgdGhlIHRhcmdldCBvZiBhIHN5bWJvbGljIGxpbmssIHNwZWNpZmllZCBieSBpdHMgcGF0aC4gIFRoZSB0aGlyZAorICogYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gZ2l2ZSBhIGhpbnQgYWJvdXQgdGhlIHNpemUsIHRvIGF2b2lkIHJlYWxsb2NzLgorICovCitleHRlcm4gaW50IHN0cmJ1Zl9yZWFkbGluayhzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IGhpbnQpOworCisvKioKKyAqIFJlYWQgYSBsaW5lIGZyb20gYSBGSUxFICosIG92ZXJ3cml0aW5nIHRoZSBleGlzdGluZyBjb250ZW50cworICogb2YgdGhlIHN0cmJ1Zi4gVGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGxpbmUKKyAqIHRlcm1pbmF0b3IgY2hhcmFjdGVyLCB0eXBpY2FsbHkgYCdcbidgLgorICogUmVhZGluZyBzdG9wcyBhZnRlciB0aGUgdGVybWluYXRvciBvciBhdCBFT0YuICBUaGUgdGVybWluYXRvcgorICogaXMgcmVtb3ZlZCBmcm9tIHRoZSBidWZmZXIgYmVmb3JlIHJldHVybmluZy4gIFJldHVybnMgMCB1bmxlc3MKKyAqIHRoZXJlIHdhcyBub3RoaW5nIGxlZnQgYmVmb3JlIEVPRiwgaW4gd2hpY2ggY2FzZSBpdCByZXR1cm5zIGBFT0ZgLgorICovCitleHRlcm4gaW50IHN0cmJ1Zl9nZXRsaW5lKHN0cnVjdCBzdHJidWYgKiwgRklMRSAqLCBpbnQpOworCisvKioKKyAqIExpa2UgYHN0cmJ1Zl9nZXRsaW5lYCwgYnV0IGtlZXBzIHRoZSB0cmFpbGluZyB0ZXJtaW5hdG9yIChpZgorICogYW55KSBpbiB0aGUgYnVmZmVyLgorICovCitleHRlcm4gaW50IHN0cmJ1Zl9nZXR3aG9sZWxpbmUoc3RydWN0IHN0cmJ1ZiAqLCBGSUxFICosIGludCk7CisKKy8qKgorICogTGlrZSBgc3RyYnVmX2dldHdob2xlbGluZWAsIGJ1dCBvcGVyYXRlcyBvbiBhIGZpbGUgZGVzY3JpcHRvci4KKyAqIEl0IHJlYWRzIG9uZSBjaGFyYWN0ZXIgYXQgYSB0aW1lLCBzbyBpdCBpcyB2ZXJ5IHNsb3cuICBEbyBub3QKKyAqIHVzZSBpdCB1bmxlc3MgeW91IG5lZWQgdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIGZpbGUKKyAqIGRlc2NyaXB0b3IuCisgKi8KK2V4dGVybiBpbnQgc3RyYnVmX2dldHdob2xlbGluZV9mZChzdHJ1Y3Qgc3RyYnVmICosIGludCwgaW50KTsKKworLyoqCisgKiBTZXQgdGhlIGJ1ZmZlciB0byB0aGUgcGF0aCBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKyAqLworZXh0ZXJuIGludCBzdHJidWZfZ2V0Y3dkKHN0cnVjdCBzdHJidWYgKnNiKTsKKworLyoqCisgKiBBZGQgYSBwYXRoIHRvIGEgYnVmZmVyLCBjb252ZXJ0aW5nIGEgcmVsYXRpdmUgcGF0aCB0byBhbgorICogYWJzb2x1dGUgb25lIGluIHRoZSBwcm9jZXNzLiAgU3ltYm9saWMgbGlua3MgYXJlIG5vdAorICogcmVzb2x2ZWQuCisgKi8KK2V4dGVybiB2b2lkIHN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aChzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcGF0aCk7CisKKy8qKgorICogU3RyaXAgd2hpdGVzcGFjZSBmcm9tIGEgYnVmZmVyLiBUaGUgc2Vjb25kIHBhcmFtZXRlciBjb250cm9scyBpZgorICogY29tbWVudHMgYXJlIGNvbnNpZGVyZWQgY29udGVudHMgdG8gYmUgcmVtb3ZlZCBvciBub3QuCisgKi8KK2V4dGVybiB2b2lkIHN0cmJ1Zl9zdHJpcHNwYWNlKHN0cnVjdCBzdHJidWYgKmJ1ZiwgaW50IHNraXBfY29tbWVudHMpOworCisvKioKKyAqIFRlbXBvcmFyeSBhbGlhcyB1bnRpbCBhbGwgdG9waWMgYnJhbmNoZXMgaGF2ZSBzd2l0Y2hlZCB0byB1c2UKKyAqIHN0cmJ1Zl9zdHJpcHNwYWNlIGRpcmVjdGx5LgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RyaXBzcGFjZShzdHJ1Y3Qgc3RyYnVmICpidWYsIGludCBza2lwX2NvbW1lbnRzKQoreworCXN0cmJ1Zl9zdHJpcHNwYWNlKGJ1Ziwgc2tpcF9jb21tZW50cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0cmJ1Zl9zdHJpcF9zdWZmaXgoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKwlpZiAoc3RyaXBfc3VmZml4X21lbShzYi0+YnVmLCAmc2ItPmxlbiwgc3VmZml4KSkgeworCQlzdHJidWZfc2V0bGVuKHNiLCBzYi0+bGVuKTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlCisJCXJldHVybiAwOworfQorCisvKioKKyAqIFNwbGl0IHN0ciAob2YgbGVuZ3RoIHNsZW4pIGF0IHRoZSBzcGVjaWZpZWQgdGVybWluYXRvciBjaGFyYWN0ZXIuCisgKiBSZXR1cm4gYSBudWxsLXRlcm1pbmF0ZWQgYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyYnVmIG9iamVjdHMKKyAqIGhvbGRpbmcgdGhlIHN1YnN0cmluZ3MuICBUaGUgc3Vic3RyaW5ncyBpbmNsdWRlIHRoZSB0ZXJtaW5hdG9yLAorICogZXhjZXB0IGZvciB0aGUgbGFzdCBzdWJzdHJpbmcsIHdoaWNoIG1pZ2h0IGJlIHVudGVybWluYXRlZCBpZiB0aGUKKyAqIG9yaWdpbmFsIHN0cmluZyBkaWQgbm90IGVuZCB3aXRoIGEgdGVybWluYXRvci4gIElmIG1heCBpcyBwb3NpdGl2ZSwKKyAqIHRoZW4gc3BsaXQgdGhlIHN0cmluZyBpbnRvIGF0IG1vc3QgbWF4IHN1YnN0cmluZ3MgKHdpdGggdGhlIGxhc3QKKyAqIHN1YnN0cmluZyBjb250YWluaW5nIGV2ZXJ5dGhpbmcgZm9sbG93aW5nIHRoZSAobWF4LTEpdGggdGVybWluYXRvcgorICogY2hhcmFjdGVyKS4KKyAqCisgKiBUaGUgbW9zdCBnZW5lcmljIGZvcm0gaXMgYHN0cmJ1Zl9zcGxpdF9idWZgLCB3aGljaCB0YWtlcyBhbiBhcmJpdHJhcnkKKyAqIHBvaW50ZXIvbGVuIGJ1ZmZlci4gVGhlIGBfc3RyYCB2YXJpYW50IHRha2VzIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nLAorICogdGhlIGBfbWF4YCB2YXJpYW50IHRha2VzIGEgc3RyYnVmLCBhbmQganVzdCBgc3RyYnVmX3NwbGl0YCBpcyBhIGNvbnZlbmllbmNlCisgKiB3cmFwcGVyIHRvIGRyb3AgdGhlIGBtYXhgIHBhcmFtZXRlci4KKyAqCisgKiBGb3IgbGlnaHRlci13ZWlnaHQgYWx0ZXJuYXRpdmVzLCBzZWUgc3RyaW5nX2xpc3Rfc3BsaXQoKSBhbmQKKyAqIHN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlKCkuCisgKi8KK2V4dGVybiBzdHJ1Y3Qgc3RyYnVmICoqc3RyYnVmX3NwbGl0X2J1Zihjb25zdCBjaGFyICosIHNpemVfdCwKKwkJCQkJaW50IHRlcm1pbmF0b3IsIGludCBtYXgpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzdHJidWYgKipzdHJidWZfc3BsaXRfc3RyKGNvbnN0IGNoYXIgKnN0ciwKKwkJCQkJICAgICAgIGludCB0ZXJtaW5hdG9yLCBpbnQgbWF4KQoreworCXJldHVybiBzdHJidWZfc3BsaXRfYnVmKHN0ciwgc3RybGVuKHN0ciksIHRlcm1pbmF0b3IsIG1heCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN0cmJ1ZiAqKnN0cmJ1Zl9zcGxpdF9tYXgoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJCQlpbnQgdGVybWluYXRvciwgaW50IG1heCkKK3sKKwlyZXR1cm4gc3RyYnVmX3NwbGl0X2J1ZihzYi0+YnVmLCBzYi0+bGVuLCB0ZXJtaW5hdG9yLCBtYXgpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzdHJidWYgKipzdHJidWZfc3BsaXQoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJCSAgIGludCB0ZXJtaW5hdG9yKQoreworCXJldHVybiBzdHJidWZfc3BsaXRfbWF4KHNiLCB0ZXJtaW5hdG9yLCAwKTsKK30KKworLyoqCisgKiBGcmVlIGEgTlVMTC10ZXJtaW5hdGVkIGxpc3Qgb2Ygc3RyYnVmcyAoZm9yIGV4YW1wbGUsIHRoZSByZXR1cm4KKyAqIHZhbHVlcyBvZiB0aGUgc3RyYnVmX3NwbGl0KigpIGZ1bmN0aW9ucykuCisgKi8KK2V4dGVybiB2b2lkIHN0cmJ1Zl9saXN0X2ZyZWUoc3RydWN0IHN0cmJ1ZiAqKik7CisKKy8qKgorICogQWRkIHRoZSBhYmJyZXZpYXRpb24sIGFzIGdlbmVyYXRlZCBieSBmaW5kX3VuaXF1ZV9hYmJyZXYsIG9mIGBzaGExYCB0bworICogdGhlIHN0cmJ1ZiBgc2JgLgorICovCitleHRlcm4gdm9pZCBzdHJidWZfYWRkX3VuaXF1ZV9hYmJyZXYoc3RydWN0IHN0cmJ1ZiAqc2IsCisJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgICAgaW50IGFiYnJldl9sZW4pOworCisvKioKKyAqIExhdW5jaCB0aGUgdXNlciBwcmVmZXJyZWQgZWRpdG9yIHRvIGVkaXQgYSBmaWxlIGFuZCBmaWxsIHRoZSBidWZmZXIKKyAqIHdpdGggdGhlIGZpbGUncyBjb250ZW50cyB1cG9uIHRoZSB1c2VyIGNvbXBsZXRpbmcgdGhlaXIgZWRpdGluZy4gVGhlCisgKiB0aGlyZCBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGVudmlyb25tZW50IHdoaWNoIHRoZSBlZGl0b3IgaXMKKyAqIHJ1biBpbi4gSWYgdGhlIGJ1ZmZlciBpcyBOVUxMIHRoZSBlZGl0b3IgaXMgbGF1bmNoZWQgYXMgdXN1YWwgYnV0IHRoZQorICogZmlsZSdzIGNvbnRlbnRzIGFyZSBub3QgcmVhZCBpbnRvIHRoZSBidWZmZXIgdXBvbiBjb21wbGV0aW9uLgorICovCitleHRlcm4gaW50IGxhdW5jaF9lZGl0b3IoY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0cmJ1ZiAqYnVmZmVyLCBjb25zdCBjaGFyICpjb25zdCAqZW52KTsKKworZXh0ZXJuIHZvaWQgc3RyYnVmX2FkZF9saW5lcyhzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKKworLyoqCisgKiBBcHBlbmQgcyB0byBzYiwgd2l0aCB0aGUgY2hhcmFjdGVycyAnPCcsICc+JywgJyYnIGFuZCAnIicgY29udmVydGVkCisgKiBpbnRvIFhNTCBlbnRpdGllcy4KKyAqLworZXh0ZXJuIHZvaWQgc3RyYnVmX2FkZHN0cl94bWxfcXVvdGVkKHN0cnVjdCBzdHJidWYgKnNiLCBjb25zdCBjaGFyICpzKTsKKworLyoqCisgKiAiQ29tcGxldGUiIHRoZSBjb250ZW50cyBvZiBgc2JgIGJ5IGVuc3VyaW5nIHRoYXQgZWl0aGVyIGl0IGVuZHMgd2l0aCB0aGUKKyAqIGNoYXJhY3RlciBgdGVybWAsIG9yIGl0IGlzIGVtcHR5LiAgVGhpcyBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsCisgKiB0byBlbnN1cmUgdGhhdCB0ZXh0IGVuZHMgd2l0aCBhIG5ld2xpbmUsIGJ1dCB3aXRob3V0IGNyZWF0aW5nIGFuIGVtcHR5CisgKiBibGFuayBsaW5lIGlmIHRoZXJlIGlzIG5vIGNvbnRlbnQgaW4gdGhlIGZpcnN0IHBsYWNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RyYnVmX2NvbXBsZXRlKHN0cnVjdCBzdHJidWYgKnNiLCBjaGFyIHRlcm0pCit7CisJaWYgKHNiLT5sZW4gJiYgc2ItPmJ1ZltzYi0+bGVuIC0gMV0gIT0gdGVybSkKKwkJc3RyYnVmX2FkZGNoKHNiLCB0ZXJtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0cmJ1Zl9jb21wbGV0ZV9saW5lKHN0cnVjdCBzdHJidWYgKnNiKQoreworCXN0cmJ1Zl9jb21wbGV0ZShzYiwgJ1xuJyk7Cit9CisKK2V4dGVybiBpbnQgc3RyYnVmX2JyYW5jaG5hbWUoc3RydWN0IHN0cmJ1ZiAqc2IsIGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIGludCBzdHJidWZfY2hlY2tfYnJhbmNoX3JlZihzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqbmFtZSk7CisKK2V4dGVybiB2b2lkIHN0cmJ1Zl9hZGRzdHJfdXJsZW5jb2RlKHN0cnVjdCBzdHJidWYgKiwgY29uc3QgY2hhciAqLAorCQkJCSAgICBpbnQgcmVzZXJ2ZWQpOworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwxLDIpKSkKK2V4dGVybiBpbnQgcHJpbnRmX2xuKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLDIsMykpKQorZXh0ZXJuIGludCBmcHJpbnRmX2xuKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKK2NoYXIgKnhzdHJkdXBfdG9sb3dlcihjb25zdCBjaGFyICopOworCisvKioKKyAqIENyZWF0ZSBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgdXNpbmcgcHJpbnRmIGZvcm1hdC4gWW91IGNhbiBkbyB0aGlzIGVhc2lseQorICogd2l0aCBhIHN0cmJ1ZiwgYnV0IHRoaXMgcHJvdmlkZXMgYSBzaG9ydGN1dCB0byBzYXZlIGEgZmV3IGxpbmVzLgorICovCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMCkpKQorY2hhciAqeHN0cnZmbXQoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCitjaGFyICp4c3RyZm10KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworI2VuZGlmIC8qIFNUUkJVRl9IICovCmRpZmYgLS1naXQgYS9zdHJlYW1pbmcuYyBiL3N0cmVhbWluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMWZjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9zdHJlYW1pbmcuYwpAQCAtMCwwICsxLDU1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4KKyAqLworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3RyZWFtaW5nLmgiCisKK2VudW0gaW5wdXRfc291cmNlIHsKKwlzdHJlYW1fZXJyb3IgPSAtMSwKKwlpbmNvcmUgPSAwLAorCWxvb3NlID0gMSwKKwlwYWNrX25vbl9kZWx0YSA9IDIKK307CisKK3R5cGVkZWYgaW50ICgqb3Blbl9pc3RyZWFtX2ZuKShzdHJ1Y3QgZ2l0X2lzdHJlYW0gKiwKKwkJCSAgICAgICBzdHJ1Y3Qgb2JqZWN0X2luZm8gKiwKKwkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICosCisJCQkgICAgICAgZW51bSBvYmplY3RfdHlwZSAqKTsKK3R5cGVkZWYgaW50ICgqY2xvc2VfaXN0cmVhbV9mbikoc3RydWN0IGdpdF9pc3RyZWFtICopOwordHlwZWRlZiBzc2l6ZV90ICgqcmVhZF9pc3RyZWFtX2ZuKShzdHJ1Y3QgZ2l0X2lzdHJlYW0gKiwgY2hhciAqLCBzaXplX3QpOworCitzdHJ1Y3Qgc3RyZWFtX3Z0YmwgeworCWNsb3NlX2lzdHJlYW1fZm4gY2xvc2U7CisJcmVhZF9pc3RyZWFtX2ZuIHJlYWQ7Cit9OworCisjZGVmaW5lIG9wZW5fbWV0aG9kX2RlY2wobmFtZSkgXAorCWludCBvcGVuX2lzdHJlYW1fICMjbmFtZSBcCisJKHN0cnVjdCBnaXRfaXN0cmVhbSAqc3QsIHN0cnVjdCBvYmplY3RfaW5mbyAqb2ksIFwKKwkgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgXAorCSBlbnVtIG9iamVjdF90eXBlICp0eXBlKQorCisjZGVmaW5lIGNsb3NlX21ldGhvZF9kZWNsKG5hbWUpIFwKKwlpbnQgY2xvc2VfaXN0cmVhbV8gIyNuYW1lIFwKKwkoc3RydWN0IGdpdF9pc3RyZWFtICpzdCkKKworI2RlZmluZSByZWFkX21ldGhvZF9kZWNsKG5hbWUpIFwKKwlzc2l6ZV90IHJlYWRfaXN0cmVhbV8gIyNuYW1lIFwKKwkoc3RydWN0IGdpdF9pc3RyZWFtICpzdCwgY2hhciAqYnVmLCBzaXplX3Qgc3opCisKKy8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyBvcGVuX21ldGhvZF9kZWNsKGluY29yZSk7CitzdGF0aWMgb3Blbl9tZXRob2RfZGVjbChsb29zZSk7CitzdGF0aWMgb3Blbl9tZXRob2RfZGVjbChwYWNrX25vbl9kZWx0YSk7CitzdGF0aWMgc3RydWN0IGdpdF9pc3RyZWFtICphdHRhY2hfc3RyZWFtX2ZpbHRlcihzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0LAorCQkJCQkJc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcik7CisKKworc3RhdGljIG9wZW5faXN0cmVhbV9mbiBvcGVuX2lzdHJlYW1fdGJsW10gPSB7CisJb3Blbl9pc3RyZWFtX2luY29yZSwKKwlvcGVuX2lzdHJlYW1fbG9vc2UsCisJb3Blbl9pc3RyZWFtX3BhY2tfbm9uX2RlbHRhLAorfTsKKworI2RlZmluZSBGSUxURVJfQlVGRkVSICgxMDI0KjE2KQorCitzdHJ1Y3QgZmlsdGVyZWRfaXN0cmVhbSB7CisJc3RydWN0IGdpdF9pc3RyZWFtICp1cHN0cmVhbTsKKwlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyOworCWNoYXIgaWJ1ZltGSUxURVJfQlVGRkVSXTsKKwljaGFyIG9idWZbRklMVEVSX0JVRkZFUl07CisJaW50IGlfZW5kLCBpX3B0cjsKKwlpbnQgb19lbmQsIG9fcHRyOworCWludCBpbnB1dF9maW5pc2hlZDsKK307CisKK3N0cnVjdCBnaXRfaXN0cmVhbSB7CisJY29uc3Qgc3RydWN0IHN0cmVhbV92dGJsICp2dGJsOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsgLyogaW5mbGF0ZWQgc2l6ZSBvZiBmdWxsIG9iamVjdCAqLworCWdpdF96c3RyZWFtIHo7CisJZW51bSB7IHpfdW51c2VkLCB6X3VzZWQsIHpfZG9uZSwgel9lcnJvciB9IHpfc3RhdGU7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQljaGFyICpidWY7IC8qIGZyb20gcmVhZF9vYmplY3QoKSAqLworCQkJdW5zaWduZWQgbG9uZyByZWFkX3B0cjsKKwkJfSBpbmNvcmU7CisKKwkJc3RydWN0IHsKKwkJCXZvaWQgKm1hcHBlZDsKKwkJCXVuc2lnbmVkIGxvbmcgbWFwc2l6ZTsKKwkJCWNoYXIgaGRyWzMyXTsKKwkJCWludCBoZHJfYXZhaWw7CisJCQlpbnQgaGRyX3VzZWQ7CisJCX0gbG9vc2U7CisKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBwYWNrZWRfZ2l0ICpwYWNrOworCQkJb2ZmX3QgcG9zOworCQl9IGluX3BhY2s7CisKKwkJc3RydWN0IGZpbHRlcmVkX2lzdHJlYW0gZmlsdGVyZWQ7CisJfSB1OworfTsKKworaW50IGNsb3NlX2lzdHJlYW0oc3RydWN0IGdpdF9pc3RyZWFtICpzdCkKK3sKKwlpbnQgciA9IHN0LT52dGJsLT5jbG9zZShzdCk7CisJZnJlZShzdCk7CisJcmV0dXJuIHI7Cit9CisKK3NzaXplX3QgcmVhZF9pc3RyZWFtKHN0cnVjdCBnaXRfaXN0cmVhbSAqc3QsIHZvaWQgKmJ1Ziwgc2l6ZV90IHN6KQoreworCXJldHVybiBzdC0+dnRibC0+cmVhZChzdCwgYnVmLCBzeik7Cit9CisKK3N0YXRpYyBlbnVtIGlucHV0X3NvdXJjZSBpc3RyZWFtX3NvdXJjZShjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCQllbnVtIG9iamVjdF90eXBlICp0eXBlLAorCQkJCQlzdHJ1Y3Qgb2JqZWN0X2luZm8gKm9pKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgc3RhdHVzOworCisJb2ktPnR5cGVwID0gdHlwZTsKKwlvaS0+c2l6ZXAgPSAmc2l6ZTsKKwlzdGF0dXMgPSBzaGExX29iamVjdF9pbmZvX2V4dGVuZGVkKHNoYTEsIG9pLCAwKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0cmVhbV9lcnJvcjsKKworCXN3aXRjaCAob2ktPndoZW5jZSkgeworCWNhc2UgT0lfTE9PU0U6CisJCXJldHVybiBsb29zZTsKKwljYXNlIE9JX1BBQ0tFRDoKKwkJaWYgKCFvaS0+dS5wYWNrZWQuaXNfZGVsdGEgJiYgYmlnX2ZpbGVfdGhyZXNob2xkIDwgc2l6ZSkKKwkJCXJldHVybiBwYWNrX25vbl9kZWx0YTsKKwkJLyogZmFsbHRocnUgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gaW5jb3JlOworCX0KK30KKworc3RydWN0IGdpdF9pc3RyZWFtICpvcGVuX2lzdHJlYW0oY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwkJCQkgZW51bSBvYmplY3RfdHlwZSAqdHlwZSwKKwkJCQkgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkgc3RydWN0IHN0cmVhbV9maWx0ZXIgKmZpbHRlcikKK3sKKwlzdHJ1Y3QgZ2l0X2lzdHJlYW0gKnN0OworCXN0cnVjdCBvYmplY3RfaW5mbyBvaSA9IHtOVUxMfTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpyZWFsID0gbG9va3VwX3JlcGxhY2Vfb2JqZWN0KHNoYTEpOworCWVudW0gaW5wdXRfc291cmNlIHNyYyA9IGlzdHJlYW1fc291cmNlKHJlYWwsIHR5cGUsICZvaSk7CisKKwlpZiAoc3JjIDwgMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdCA9IHhtYWxsb2Moc2l6ZW9mKCpzdCkpOworCWlmIChvcGVuX2lzdHJlYW1fdGJsW3NyY10oc3QsICZvaSwgcmVhbCwgdHlwZSkpIHsKKwkJaWYgKG9wZW5faXN0cmVhbV9pbmNvcmUoc3QsICZvaSwgcmVhbCwgdHlwZSkpIHsKKwkJCWZyZWUoc3QpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisJaWYgKGZpbHRlcikgeworCQkvKiBBZGQgIiYmICFpc19udWxsX3N0cmVhbV9maWx0ZXIoZmlsdGVyKSIgZm9yIHBlcmZvcm1hbmNlICovCisJCXN0cnVjdCBnaXRfaXN0cmVhbSAqbnN0ID0gYXR0YWNoX3N0cmVhbV9maWx0ZXIoc3QsIGZpbHRlcik7CisJCWlmICghbnN0KSB7CisJCQljbG9zZV9pc3RyZWFtKHN0KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXN0ID0gbnN0OworCX0KKworCSpzaXplID0gc3QtPnNpemU7CisJcmV0dXJuIHN0OworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvbW1vbiBoZWxwZXJzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBjbG9zZV9kZWZsYXRlZF9zdHJlYW0oc3RydWN0IGdpdF9pc3RyZWFtICpzdCkKK3sKKwlpZiAoc3QtPnpfc3RhdGUgPT0gel91c2VkKQorCQlnaXRfaW5mbGF0ZV9lbmQoJnN0LT56KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGaWx0ZXJlZCBzdHJlYW0KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBjbG9zZV9tZXRob2RfZGVjbChmaWx0ZXJlZCkKK3sKKwlmcmVlX3N0cmVhbV9maWx0ZXIoc3QtPnUuZmlsdGVyZWQuZmlsdGVyKTsKKwlyZXR1cm4gY2xvc2VfaXN0cmVhbShzdC0+dS5maWx0ZXJlZC51cHN0cmVhbSk7Cit9CisKK3N0YXRpYyByZWFkX21ldGhvZF9kZWNsKGZpbHRlcmVkKQoreworCXN0cnVjdCBmaWx0ZXJlZF9pc3RyZWFtICpmcyA9ICYoc3QtPnUuZmlsdGVyZWQpOworCXNpemVfdCBmaWxsZWQgPSAwOworCisJd2hpbGUgKHN6KSB7CisJCS8qIGRvIHdlIGFscmVhZHkgaGF2ZSBmaWx0ZXJlZCBvdXRwdXQ/ICovCisJCWlmIChmcy0+b19wdHIgPCBmcy0+b19lbmQpIHsKKwkJCXNpemVfdCB0b19tb3ZlID0gZnMtPm9fZW5kIC0gZnMtPm9fcHRyOworCQkJaWYgKHN6IDwgdG9fbW92ZSkKKwkJCQl0b19tb3ZlID0gc3o7CisJCQltZW1jcHkoYnVmICsgZmlsbGVkLCBmcy0+b2J1ZiArIGZzLT5vX3B0ciwgdG9fbW92ZSk7CisJCQlmcy0+b19wdHIgKz0gdG9fbW92ZTsKKwkJCXN6IC09IHRvX21vdmU7CisJCQlmaWxsZWQgKz0gdG9fbW92ZTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZzLT5vX2VuZCA9IGZzLT5vX3B0ciA9IDA7CisKKwkJLyogZG8gd2UgaGF2ZSBhbnl0aGluZyB0byBmZWVkIHRoZSBmaWx0ZXIgd2l0aD8gKi8KKwkJaWYgKGZzLT5pX3B0ciA8IGZzLT5pX2VuZCkgeworCQkJc2l6ZV90IHRvX2ZlZWQgPSBmcy0+aV9lbmQgLSBmcy0+aV9wdHI7CisJCQlzaXplX3QgdG9fcmVjZWl2ZSA9IEZJTFRFUl9CVUZGRVI7CisJCQlpZiAoc3RyZWFtX2ZpbHRlcihmcy0+ZmlsdGVyLAorCQkJCQkgIGZzLT5pYnVmICsgZnMtPmlfcHRyLCAmdG9fZmVlZCwKKwkJCQkJICBmcy0+b2J1ZiwgJnRvX3JlY2VpdmUpKQorCQkJCXJldHVybiAtMTsKKwkJCWZzLT5pX3B0ciA9IGZzLT5pX2VuZCAtIHRvX2ZlZWQ7CisJCQlmcy0+b19lbmQgPSBGSUxURVJfQlVGRkVSIC0gdG9fcmVjZWl2ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogdGVsbCB0aGUgZmlsdGVyIHRvIGRyYWluIHVwb24gbm8gbW9yZSBpbnB1dCAqLworCQlpZiAoZnMtPmlucHV0X2ZpbmlzaGVkKSB7CisJCQlzaXplX3QgdG9fcmVjZWl2ZSA9IEZJTFRFUl9CVUZGRVI7CisJCQlpZiAoc3RyZWFtX2ZpbHRlcihmcy0+ZmlsdGVyLAorCQkJCQkgIE5VTEwsIE5VTEwsCisJCQkJCSAgZnMtPm9idWYsICZ0b19yZWNlaXZlKSkKKwkJCQlyZXR1cm4gLTE7CisJCQlmcy0+b19lbmQgPSBGSUxURVJfQlVGRkVSIC0gdG9fcmVjZWl2ZTsKKwkJCWlmICghZnMtPm9fZW5kKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKwkJZnMtPmlfZW5kID0gZnMtPmlfcHRyID0gMDsKKworCQkvKiByZWZpbGwgdGhlIGlucHV0IGZyb20gdGhlIHVwc3RyZWFtICovCisJCWlmICghZnMtPmlucHV0X2ZpbmlzaGVkKSB7CisJCQlmcy0+aV9lbmQgPSByZWFkX2lzdHJlYW0oZnMtPnVwc3RyZWFtLCBmcy0+aWJ1ZiwgRklMVEVSX0JVRkZFUik7CisJCQlpZiAoZnMtPmlfZW5kIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAoZnMtPmlfZW5kKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWZzLT5pbnB1dF9maW5pc2hlZCA9IDE7CisJfQorCXJldHVybiBmaWxsZWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX3Z0YmwgZmlsdGVyZWRfdnRibCA9IHsKKwljbG9zZV9pc3RyZWFtX2ZpbHRlcmVkLAorCXJlYWRfaXN0cmVhbV9maWx0ZXJlZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ2l0X2lzdHJlYW0gKmF0dGFjaF9zdHJlYW1fZmlsdGVyKHN0cnVjdCBnaXRfaXN0cmVhbSAqc3QsCisJCQkJCQlzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyKQoreworCXN0cnVjdCBnaXRfaXN0cmVhbSAqaWZzID0geG1hbGxvYyhzaXplb2YoKmlmcykpOworCXN0cnVjdCBmaWx0ZXJlZF9pc3RyZWFtICpmcyA9ICYoaWZzLT51LmZpbHRlcmVkKTsKKworCWlmcy0+dnRibCA9ICZmaWx0ZXJlZF92dGJsOworCWZzLT51cHN0cmVhbSA9IHN0OworCWZzLT5maWx0ZXIgPSBmaWx0ZXI7CisJZnMtPmlfZW5kID0gZnMtPmlfcHRyID0gMDsKKwlmcy0+b19lbmQgPSBmcy0+b19wdHIgPSAwOworCWZzLT5pbnB1dF9maW5pc2hlZCA9IDA7CisJaWZzLT5zaXplID0gLTE7IC8qIHVua25vd24gKi8KKwlyZXR1cm4gaWZzOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBMb29zZSBvYmplY3Qgc3RyZWFtCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgcmVhZF9tZXRob2RfZGVjbChsb29zZSkKK3sKKwlzaXplX3QgdG90YWxfcmVhZCA9IDA7CisKKwlzd2l0Y2ggKHN0LT56X3N0YXRlKSB7CisJY2FzZSB6X2RvbmU6CisJCXJldHVybiAwOworCWNhc2Ugel9lcnJvcjoKKwkJcmV0dXJuIC0xOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChzdC0+dS5sb29zZS5oZHJfdXNlZCA8IHN0LT51Lmxvb3NlLmhkcl9hdmFpbCkgeworCQlzaXplX3QgdG9fY29weSA9IHN0LT51Lmxvb3NlLmhkcl9hdmFpbCAtIHN0LT51Lmxvb3NlLmhkcl91c2VkOworCQlpZiAoc3ogPCB0b19jb3B5KQorCQkJdG9fY29weSA9IHN6OworCQltZW1jcHkoYnVmLCBzdC0+dS5sb29zZS5oZHIgKyBzdC0+dS5sb29zZS5oZHJfdXNlZCwgdG9fY29weSk7CisJCXN0LT51Lmxvb3NlLmhkcl91c2VkICs9IHRvX2NvcHk7CisJCXRvdGFsX3JlYWQgKz0gdG9fY29weTsKKwl9CisKKwl3aGlsZSAodG90YWxfcmVhZCA8IHN6KSB7CisJCWludCBzdGF0dXM7CisKKwkJc3QtPnoubmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKWJ1ZiArIHRvdGFsX3JlYWQ7CisJCXN0LT56LmF2YWlsX291dCA9IHN6IC0gdG90YWxfcmVhZDsKKwkJc3RhdHVzID0gZ2l0X2luZmxhdGUoJnN0LT56LCBaX0ZJTklTSCk7CisKKwkJdG90YWxfcmVhZCA9IHN0LT56Lm5leHRfb3V0IC0gKHVuc2lnbmVkIGNoYXIgKilidWY7CisKKwkJaWYgKHN0YXR1cyA9PSBaX1NUUkVBTV9FTkQpIHsKKwkJCWdpdF9pbmZsYXRlX2VuZCgmc3QtPnopOworCQkJc3QtPnpfc3RhdGUgPSB6X2RvbmU7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc3RhdHVzICE9IFpfT0sgJiYgKHN0YXR1cyAhPSBaX0JVRl9FUlJPUiB8fCB0b3RhbF9yZWFkIDwgc3opKSB7CisJCQlnaXRfaW5mbGF0ZV9lbmQoJnN0LT56KTsKKwkJCXN0LT56X3N0YXRlID0gel9lcnJvcjsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gdG90YWxfcmVhZDsKK30KKworc3RhdGljIGNsb3NlX21ldGhvZF9kZWNsKGxvb3NlKQoreworCWNsb3NlX2RlZmxhdGVkX3N0cmVhbShzdCk7CisJbXVubWFwKHN0LT51Lmxvb3NlLm1hcHBlZCwgc3QtPnUubG9vc2UubWFwc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX3Z0YmwgbG9vc2VfdnRibCA9IHsKKwljbG9zZV9pc3RyZWFtX2xvb3NlLAorCXJlYWRfaXN0cmVhbV9sb29zZSwKK307CisKK3N0YXRpYyBvcGVuX21ldGhvZF9kZWNsKGxvb3NlKQoreworCXN0LT51Lmxvb3NlLm1hcHBlZCA9IG1hcF9zaGExX2ZpbGUoc2hhMSwgJnN0LT51Lmxvb3NlLm1hcHNpemUpOworCWlmICghc3QtPnUubG9vc2UubWFwcGVkKQorCQlyZXR1cm4gLTE7CisJaWYgKHVucGFja19zaGExX2hlYWRlcigmc3QtPnosCisJCQkgICAgICAgc3QtPnUubG9vc2UubWFwcGVkLAorCQkJICAgICAgIHN0LT51Lmxvb3NlLm1hcHNpemUsCisJCQkgICAgICAgc3QtPnUubG9vc2UuaGRyLAorCQkJICAgICAgIHNpemVvZihzdC0+dS5sb29zZS5oZHIpKSA8IDApIHsKKwkJZ2l0X2luZmxhdGVfZW5kKCZzdC0+eik7CisJCW11bm1hcChzdC0+dS5sb29zZS5tYXBwZWQsIHN0LT51Lmxvb3NlLm1hcHNpemUpOworCQlyZXR1cm4gLTE7CisJfQorCisJcGFyc2Vfc2hhMV9oZWFkZXIoc3QtPnUubG9vc2UuaGRyLCAmc3QtPnNpemUpOworCXN0LT51Lmxvb3NlLmhkcl91c2VkID0gc3RybGVuKHN0LT51Lmxvb3NlLmhkcikgKyAxOworCXN0LT51Lmxvb3NlLmhkcl9hdmFpbCA9IHN0LT56LnRvdGFsX291dDsKKwlzdC0+el9zdGF0ZSA9IHpfdXNlZDsKKworCXN0LT52dGJsID0gJmxvb3NlX3Z0Ymw7CisJcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTm9uLWRlbHRhIHBhY2tlZCBvYmplY3Qgc3RyZWFtCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgcmVhZF9tZXRob2RfZGVjbChwYWNrX25vbl9kZWx0YSkKK3sKKwlzaXplX3QgdG90YWxfcmVhZCA9IDA7CisKKwlzd2l0Y2ggKHN0LT56X3N0YXRlKSB7CisJY2FzZSB6X3VudXNlZDoKKwkJbWVtc2V0KCZzdC0+eiwgMCwgc2l6ZW9mKHN0LT56KSk7CisJCWdpdF9pbmZsYXRlX2luaXQoJnN0LT56KTsKKwkJc3QtPnpfc3RhdGUgPSB6X3VzZWQ7CisJCWJyZWFrOworCWNhc2Ugel9kb25lOgorCQlyZXR1cm4gMDsKKwljYXNlIHpfZXJyb3I6CisJCXJldHVybiAtMTsKKwljYXNlIHpfdXNlZDoKKwkJYnJlYWs7CisJfQorCisJd2hpbGUgKHRvdGFsX3JlYWQgPCBzeikgeworCQlpbnQgc3RhdHVzOworCQlzdHJ1Y3QgcGFja193aW5kb3cgKndpbmRvdyA9IE5VTEw7CisJCXVuc2lnbmVkIGNoYXIgKm1hcHBlZDsKKworCQltYXBwZWQgPSB1c2VfcGFjayhzdC0+dS5pbl9wYWNrLnBhY2ssICZ3aW5kb3csCisJCQkJICBzdC0+dS5pbl9wYWNrLnBvcywgJnN0LT56LmF2YWlsX2luKTsKKworCQlzdC0+ei5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopYnVmICsgdG90YWxfcmVhZDsKKwkJc3QtPnouYXZhaWxfb3V0ID0gc3ogLSB0b3RhbF9yZWFkOworCQlzdC0+ei5uZXh0X2luID0gbWFwcGVkOworCQlzdGF0dXMgPSBnaXRfaW5mbGF0ZSgmc3QtPnosIFpfRklOSVNIKTsKKworCQlzdC0+dS5pbl9wYWNrLnBvcyArPSBzdC0+ei5uZXh0X2luIC0gbWFwcGVkOworCQl0b3RhbF9yZWFkID0gc3QtPnoubmV4dF9vdXQgLSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKKwkJdW51c2VfcGFjaygmd2luZG93KTsKKworCQlpZiAoc3RhdHVzID09IFpfU1RSRUFNX0VORCkgeworCQkJZ2l0X2luZmxhdGVfZW5kKCZzdC0+eik7CisJCQlzdC0+el9zdGF0ZSA9IHpfZG9uZTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGF0dXMgIT0gWl9PSyAmJiBzdGF0dXMgIT0gWl9CVUZfRVJST1IpIHsKKwkJCWdpdF9pbmZsYXRlX2VuZCgmc3QtPnopOworCQkJc3QtPnpfc3RhdGUgPSB6X2Vycm9yOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCXJldHVybiB0b3RhbF9yZWFkOworfQorCitzdGF0aWMgY2xvc2VfbWV0aG9kX2RlY2wocGFja19ub25fZGVsdGEpCit7CisJY2xvc2VfZGVmbGF0ZWRfc3RyZWFtKHN0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzdHJlYW1fdnRibCBwYWNrX25vbl9kZWx0YV92dGJsID0geworCWNsb3NlX2lzdHJlYW1fcGFja19ub25fZGVsdGEsCisJcmVhZF9pc3RyZWFtX3BhY2tfbm9uX2RlbHRhLAorfTsKKworc3RhdGljIG9wZW5fbWV0aG9kX2RlY2wocGFja19ub25fZGVsdGEpCit7CisJc3RydWN0IHBhY2tfd2luZG93ICp3aW5kb3c7CisJZW51bSBvYmplY3RfdHlwZSBpbl9wYWNrX3R5cGU7CisKKwlzdC0+dS5pbl9wYWNrLnBhY2sgPSBvaS0+dS5wYWNrZWQucGFjazsKKwlzdC0+dS5pbl9wYWNrLnBvcyA9IG9pLT51LnBhY2tlZC5vZmZzZXQ7CisJd2luZG93ID0gTlVMTDsKKworCWluX3BhY2tfdHlwZSA9IHVucGFja19vYmplY3RfaGVhZGVyKHN0LT51LmluX3BhY2sucGFjaywKKwkJCQkJICAgICZ3aW5kb3csCisJCQkJCSAgICAmc3QtPnUuaW5fcGFjay5wb3MsCisJCQkJCSAgICAmc3QtPnNpemUpOworCXVudXNlX3BhY2soJndpbmRvdyk7CisJc3dpdGNoIChpbl9wYWNrX3R5cGUpIHsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7IC8qIHdlIGRvIG5vdCBkbyBkZWx0YXMgZm9yIG5vdyAqLworCWNhc2UgT0JKX0NPTU1JVDoKKwljYXNlIE9CSl9UUkVFOgorCWNhc2UgT0JKX0JMT0I6CisJY2FzZSBPQkpfVEFHOgorCQlicmVhazsKKwl9CisJc3QtPnpfc3RhdGUgPSB6X3VudXNlZDsKKwlzdC0+dnRibCA9ICZwYWNrX25vbl9kZWx0YV92dGJsOworCXJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEluLWNvcmUgc3RyZWFtCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgY2xvc2VfbWV0aG9kX2RlY2woaW5jb3JlKQoreworCWZyZWUoc3QtPnUuaW5jb3JlLmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyByZWFkX21ldGhvZF9kZWNsKGluY29yZSkKK3sKKwlzaXplX3QgcmVhZF9zaXplID0gc3o7CisJc2l6ZV90IHJlbWFpbmRlciA9IHN0LT5zaXplIC0gc3QtPnUuaW5jb3JlLnJlYWRfcHRyOworCisJaWYgKHJlbWFpbmRlciA8PSByZWFkX3NpemUpCisJCXJlYWRfc2l6ZSA9IHJlbWFpbmRlcjsKKwlpZiAocmVhZF9zaXplKSB7CisJCW1lbWNweShidWYsIHN0LT51LmluY29yZS5idWYgKyBzdC0+dS5pbmNvcmUucmVhZF9wdHIsIHJlYWRfc2l6ZSk7CisJCXN0LT51LmluY29yZS5yZWFkX3B0ciArPSByZWFkX3NpemU7CisJfQorCXJldHVybiByZWFkX3NpemU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyZWFtX3Z0YmwgaW5jb3JlX3Z0YmwgPSB7CisJY2xvc2VfaXN0cmVhbV9pbmNvcmUsCisJcmVhZF9pc3RyZWFtX2luY29yZSwKK307CisKK3N0YXRpYyBvcGVuX21ldGhvZF9kZWNsKGluY29yZSkKK3sKKwlzdC0+dS5pbmNvcmUuYnVmID0gcmVhZF9zaGExX2ZpbGVfZXh0ZW5kZWQoc2hhMSwgdHlwZSwgJnN0LT5zaXplLCAwKTsKKwlzdC0+dS5pbmNvcmUucmVhZF9wdHIgPSAwOworCXN0LT52dGJsID0gJmluY29yZV92dGJsOworCisJcmV0dXJuIHN0LT51LmluY29yZS5idWYgPyAwIDogLTE7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFVzZXJzIG9mIHN0cmVhbWluZyBpbnRlcmZhY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgc3RyZWFtX2Jsb2JfdG9fZmQoaW50IGZkLCB1bnNpZ25lZCBjb25zdCBjaGFyICpzaGExLCBzdHJ1Y3Qgc3RyZWFtX2ZpbHRlciAqZmlsdGVyLAorCQkgICAgICBpbnQgY2FuX3NlZWspCit7CisJc3RydWN0IGdpdF9pc3RyZWFtICpzdDsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisJdW5zaWduZWQgbG9uZyBzejsKKwlzc2l6ZV90IGtlcHQgPSAwOworCWludCByZXN1bHQgPSAtMTsKKworCXN0ID0gb3Blbl9pc3RyZWFtKHNoYTEsICZ0eXBlLCAmc3osIGZpbHRlcik7CisJaWYgKCFzdCkgeworCQlpZiAoZmlsdGVyKQorCQkJZnJlZV9zdHJlYW1fZmlsdGVyKGZpbHRlcik7CisJCXJldHVybiByZXN1bHQ7CisJfQorCWlmICh0eXBlICE9IE9CSl9CTE9CKQorCQlnb3RvIGNsb3NlX2FuZF9leGl0OworCWZvciAoOzspIHsKKwkJY2hhciBidWZbMTAyNCAqIDE2XTsKKwkJc3NpemVfdCB3cm90ZSwgaG9sZXRvOworCQlzc2l6ZV90IHJlYWRsZW4gPSByZWFkX2lzdHJlYW0oc3QsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJCWlmIChyZWFkbGVuIDwgMCkKKwkJCWdvdG8gY2xvc2VfYW5kX2V4aXQ7CisJCWlmICghcmVhZGxlbikKKwkJCWJyZWFrOworCQlpZiAoY2FuX3NlZWsgJiYgc2l6ZW9mKGJ1ZikgPT0gcmVhZGxlbikgeworCQkJZm9yIChob2xldG8gPSAwOyBob2xldG8gPCByZWFkbGVuOyBob2xldG8rKykKKwkJCQlpZiAoYnVmW2hvbGV0b10pCisJCQkJCWJyZWFrOworCQkJaWYgKHJlYWRsZW4gPT0gaG9sZXRvKSB7CisJCQkJa2VwdCArPSBob2xldG87CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlpZiAoa2VwdCAmJiBsc2VlayhmZCwga2VwdCwgU0VFS19DVVIpID09IChvZmZfdCkgLTEpCisJCQlnb3RvIGNsb3NlX2FuZF9leGl0OworCQllbHNlCisJCQlrZXB0ID0gMDsKKwkJd3JvdGUgPSB3cml0ZV9pbl9mdWxsKGZkLCBidWYsIHJlYWRsZW4pOworCisJCWlmICh3cm90ZSAhPSByZWFkbGVuKQorCQkJZ290byBjbG9zZV9hbmRfZXhpdDsKKwl9CisJaWYgKGtlcHQgJiYgKGxzZWVrKGZkLCBrZXB0IC0gMSwgU0VFS19DVVIpID09IChvZmZfdCkgLTEgfHwKKwkJICAgICB4d3JpdGUoZmQsICIiLCAxKSAhPSAxKSkKKwkJZ290byBjbG9zZV9hbmRfZXhpdDsKKwlyZXN1bHQgPSAwOworCisgY2xvc2VfYW5kX2V4aXQ6CisJY2xvc2VfaXN0cmVhbShzdCk7CisJcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL3N0cmVhbWluZy5oIGIvc3RyZWFtaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwNWMyYQotLS0gL2Rldi9udWxsCisrKyBiL3N0cmVhbWluZy5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuCisgKi8KKyNpZm5kZWYgU1RSRUFNSU5HX0gKKyNkZWZpbmUgU1RSRUFNSU5HX0ggMQorI2luY2x1ZGUgImNhY2hlLmgiCisKKy8qIG9wYXF1ZSAqLworc3RydWN0IGdpdF9pc3RyZWFtOworCitleHRlcm4gc3RydWN0IGdpdF9pc3RyZWFtICpvcGVuX2lzdHJlYW0oY29uc3QgdW5zaWduZWQgY2hhciAqLCBlbnVtIG9iamVjdF90eXBlICosIHVuc2lnbmVkIGxvbmcgKiwgc3RydWN0IHN0cmVhbV9maWx0ZXIgKik7CitleHRlcm4gaW50IGNsb3NlX2lzdHJlYW0oc3RydWN0IGdpdF9pc3RyZWFtICopOworZXh0ZXJuIHNzaXplX3QgcmVhZF9pc3RyZWFtKHN0cnVjdCBnaXRfaXN0cmVhbSAqLCB2b2lkICosIHNpemVfdCk7CisKK2V4dGVybiBpbnQgc3RyZWFtX2Jsb2JfdG9fZmQoaW50IGZkLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHN0cnVjdCBzdHJlYW1fZmlsdGVyICosIGludCBjYW5fc2Vlayk7CisKKyNlbmRpZiAvKiBTVFJFQU1JTkdfSCAqLwpkaWZmIC0tZ2l0IGEvc3RyaW5nLWxpc3QuYyBiL3N0cmluZy1saXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzMmEzZgotLS0gL2Rldi9udWxsCisrKyBiL3N0cmluZy1saXN0LmMKQEAgLTAsMCArMSwzMTAgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKK3ZvaWQgc3RyaW5nX2xpc3RfaW5pdChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCBzdHJkdXBfc3RyaW5ncykKK3sKKwltZW1zZXQobGlzdCwgMCwgc2l6ZW9mKCpsaXN0KSk7CisJbGlzdC0+c3RyZHVwX3N0cmluZ3MgPSBzdHJkdXBfc3RyaW5nczsKK30KKworLyogaWYgdGhlcmUgaXMgbm8gZXhhY3QgbWF0Y2gsIHBvaW50IHRvIHRoZSBpbmRleCB3aGVyZSB0aGUgZW50cnkgY291bGQgYmUKKyAqIGluc2VydGVkICovCitzdGF0aWMgaW50IGdldF9lbnRyeV9pbmRleChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJaW50ICpleGFjdF9tYXRjaCkKK3sKKwlpbnQgbGVmdCA9IC0xLCByaWdodCA9IGxpc3QtPm5yOworCWNvbXBhcmVfc3RyaW5nc19mbiBjbXAgPSBsaXN0LT5jbXAgPyBsaXN0LT5jbXAgOiBzdHJjbXA7CisKKwl3aGlsZSAobGVmdCArIDEgPCByaWdodCkgeworCQlpbnQgbWlkZGxlID0gKGxlZnQgKyByaWdodCkgLyAyOworCQlpbnQgY29tcGFyZSA9IGNtcChzdHJpbmcsIGxpc3QtPml0ZW1zW21pZGRsZV0uc3RyaW5nKTsKKwkJaWYgKGNvbXBhcmUgPCAwKQorCQkJcmlnaHQgPSBtaWRkbGU7CisJCWVsc2UgaWYgKGNvbXBhcmUgPiAwKQorCQkJbGVmdCA9IG1pZGRsZTsKKwkJZWxzZSB7CisJCQkqZXhhY3RfbWF0Y2ggPSAxOworCQkJcmV0dXJuIG1pZGRsZTsKKwkJfQorCX0KKworCSpleGFjdF9tYXRjaCA9IDA7CisJcmV0dXJuIHJpZ2h0OworfQorCisvKiByZXR1cm5zIC0xLWluZGV4IGlmIGFscmVhZHkgZXhpc3RzICovCitzdGF0aWMgaW50IGFkZF9lbnRyeShpbnQgaW5zZXJ0X2F0LCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlpbnQgZXhhY3RfbWF0Y2ggPSAwOworCWludCBpbmRleCA9IGluc2VydF9hdCAhPSAtMSA/IGluc2VydF9hdCA6IGdldF9lbnRyeV9pbmRleChsaXN0LCBzdHJpbmcsICZleGFjdF9tYXRjaCk7CisKKwlpZiAoZXhhY3RfbWF0Y2gpCisJCXJldHVybiAtMSAtIGluZGV4OworCisJaWYgKGxpc3QtPm5yICsgMSA+PSBsaXN0LT5hbGxvYykgeworCQlsaXN0LT5hbGxvYyArPSAzMjsKKwkJUkVBTExPQ19BUlJBWShsaXN0LT5pdGVtcywgbGlzdC0+YWxsb2MpOworCX0KKwlpZiAoaW5kZXggPCBsaXN0LT5ucikKKwkJbWVtbW92ZShsaXN0LT5pdGVtcyArIGluZGV4ICsgMSwgbGlzdC0+aXRlbXMgKyBpbmRleCwKKwkJCQkobGlzdC0+bnIgLSBpbmRleCkKKwkJCQkqIHNpemVvZihzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSkpOworCWxpc3QtPml0ZW1zW2luZGV4XS5zdHJpbmcgPSBsaXN0LT5zdHJkdXBfc3RyaW5ncyA/CisJCXhzdHJkdXAoc3RyaW5nKSA6IChjaGFyICopc3RyaW5nOworCWxpc3QtPml0ZW1zW2luZGV4XS51dGlsID0gTlVMTDsKKwlsaXN0LT5ucisrOworCisJcmV0dXJuIGluZGV4OworfQorCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfaW5zZXJ0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nKQoreworCWludCBpbmRleCA9IGFkZF9lbnRyeSgtMSwgbGlzdCwgc3RyaW5nKTsKKworCWlmIChpbmRleCA8IDApCisJCWluZGV4ID0gLTEgLSBpbmRleDsKKworCXJldHVybiBsaXN0LT5pdGVtcyArIGluZGV4OworfQorCitpbnQgc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlpbnQgZXhhY3RfbWF0Y2g7CisJZ2V0X2VudHJ5X2luZGV4KGxpc3QsIHN0cmluZywgJmV4YWN0X21hdGNoKTsKKwlyZXR1cm4gZXhhY3RfbWF0Y2g7Cit9CisKK2ludCBzdHJpbmdfbGlzdF9maW5kX2luc2VydF9pbmRleChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZywKKwkJCQkgIGludCBuZWdhdGl2ZV9leGlzdGluZ19pbmRleCkKK3sKKwlpbnQgZXhhY3RfbWF0Y2g7CisJaW50IGluZGV4ID0gZ2V0X2VudHJ5X2luZGV4KGxpc3QsIHN0cmluZywgJmV4YWN0X21hdGNoKTsKKwlpZiAoZXhhY3RfbWF0Y2gpCisJCWluZGV4ID0gLTEgLSAobmVnYXRpdmVfZXhpc3RpbmdfaW5kZXggPyBpbmRleCA6IDApOworCXJldHVybiBpbmRleDsKK30KKworc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2xvb2t1cChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlpbnQgZXhhY3RfbWF0Y2gsIGkgPSBnZXRfZW50cnlfaW5kZXgobGlzdCwgc3RyaW5nLCAmZXhhY3RfbWF0Y2gpOworCWlmICghZXhhY3RfbWF0Y2gpCisJCXJldHVybiBOVUxMOworCXJldHVybiBsaXN0LT5pdGVtcyArIGk7Cit9CisKK3ZvaWQgc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgZnJlZV91dGlsKQoreworCWlmIChsaXN0LT5uciA+IDEpIHsKKwkJaW50IHNyYywgZHN0OworCQljb21wYXJlX3N0cmluZ3NfZm4gY21wID0gbGlzdC0+Y21wID8gbGlzdC0+Y21wIDogc3RyY21wOworCQlmb3IgKHNyYyA9IGRzdCA9IDE7IHNyYyA8IGxpc3QtPm5yOyBzcmMrKykgeworCQkJaWYgKCFjbXAobGlzdC0+aXRlbXNbZHN0IC0gMV0uc3RyaW5nLCBsaXN0LT5pdGVtc1tzcmNdLnN0cmluZykpIHsKKwkJCQlpZiAobGlzdC0+c3RyZHVwX3N0cmluZ3MpCisJCQkJCWZyZWUobGlzdC0+aXRlbXNbc3JjXS5zdHJpbmcpOworCQkJCWlmIChmcmVlX3V0aWwpCisJCQkJCWZyZWUobGlzdC0+aXRlbXNbc3JjXS51dGlsKTsKKwkJCX0gZWxzZQorCQkJCWxpc3QtPml0ZW1zW2RzdCsrXSA9IGxpc3QtPml0ZW1zW3NyY107CisJCX0KKwkJbGlzdC0+bnIgPSBkc3Q7CisJfQorfQorCitpbnQgZm9yX2VhY2hfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJIHN0cmluZ19saXN0X2VhY2hfZnVuY190IGZuLCB2b2lkICpjYl9kYXRhKQoreworCWludCBpLCByZXQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQlpZiAoKHJldCA9IGZuKCZsaXN0LT5pdGVtc1tpXSwgY2JfZGF0YSkpKQorCQkJYnJlYWs7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBmaWx0ZXJfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgZnJlZV91dGlsLAorCQkJc3RyaW5nX2xpc3RfZWFjaF9mdW5jX3Qgd2FudCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlpbnQgc3JjLCBkc3QgPSAwOworCWZvciAoc3JjID0gMDsgc3JjIDwgbGlzdC0+bnI7IHNyYysrKSB7CisJCWlmICh3YW50KCZsaXN0LT5pdGVtc1tzcmNdLCBjYl9kYXRhKSkgeworCQkJbGlzdC0+aXRlbXNbZHN0KytdID0gbGlzdC0+aXRlbXNbc3JjXTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsaXN0LT5zdHJkdXBfc3RyaW5ncykKKwkJCQlmcmVlKGxpc3QtPml0ZW1zW3NyY10uc3RyaW5nKTsKKwkJCWlmIChmcmVlX3V0aWwpCisJCQkJZnJlZShsaXN0LT5pdGVtc1tzcmNdLnV0aWwpOworCQl9CisJfQorCWxpc3QtPm5yID0gZHN0OworfQorCitzdGF0aWMgaW50IGl0ZW1faXNfbm90X2VtcHR5KHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtLCB2b2lkICp1bnVzZWQpCit7CisJcmV0dXJuICppdGVtLT5zdHJpbmcgIT0gJ1wwJzsKK30KKwordm9pZCBzdHJpbmdfbGlzdF9yZW1vdmVfZW1wdHlfaXRlbXMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgZnJlZV91dGlsKSB7CisJZmlsdGVyX3N0cmluZ19saXN0KGxpc3QsIGZyZWVfdXRpbCwgaXRlbV9pc19ub3RfZW1wdHksIE5VTEwpOworfQorCit2b2lkIHN0cmluZ19saXN0X2NsZWFyKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IGZyZWVfdXRpbCkKK3sKKwlpZiAobGlzdC0+aXRlbXMpIHsKKwkJaW50IGk7CisJCWlmIChsaXN0LT5zdHJkdXBfc3RyaW5ncykgeworCQkJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspCisJCQkJZnJlZShsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisJCWlmIChmcmVlX3V0aWwpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQkJCWZyZWUobGlzdC0+aXRlbXNbaV0udXRpbCk7CisJCX0KKwkJZnJlZShsaXN0LT5pdGVtcyk7CisJfQorCWxpc3QtPml0ZW1zID0gTlVMTDsKKwlsaXN0LT5uciA9IGxpc3QtPmFsbG9jID0gMDsKK30KKwordm9pZCBzdHJpbmdfbGlzdF9jbGVhcl9mdW5jKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgc3RyaW5nX2xpc3RfY2xlYXJfZnVuY190IGNsZWFyZnVuYykKK3sKKwlpZiAobGlzdC0+aXRlbXMpIHsKKwkJaW50IGk7CisJCWlmIChjbGVhcmZ1bmMpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQkJCWNsZWFyZnVuYyhsaXN0LT5pdGVtc1tpXS51dGlsLCBsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisJCWlmIChsaXN0LT5zdHJkdXBfc3RyaW5ncykgeworCQkJZm9yIChpID0gMDsgaSA8IGxpc3QtPm5yOyBpKyspCisJCQkJZnJlZShsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQl9CisJCWZyZWUobGlzdC0+aXRlbXMpOworCX0KKwlsaXN0LT5pdGVtcyA9IE5VTEw7CisJbGlzdC0+bnIgPSBsaXN0LT5hbGxvYyA9IDA7Cit9CisKKwordm9pZCBwcmludF9zdHJpbmdfbGlzdChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnAsIGNvbnN0IGNoYXIgKnRleHQpCit7CisJaW50IGk7CisJaWYgKCB0ZXh0ICkKKwkJcHJpbnRmKCIlc1xuIiwgdGV4dCk7CisJZm9yIChpID0gMDsgaSA8IHAtPm5yOyBpKyspCisJCXByaW50ZigiJXM6JXBcbiIsIHAtPml0ZW1zW2ldLnN0cmluZywgcC0+aXRlbXNbaV0udXRpbCk7Cit9CisKK3N0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpzdHJpbmdfbGlzdF9hcHBlbmRfbm9kdXAoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJCQkJICBjaGFyICpzdHJpbmcpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnJldHZhbDsKKwlBTExPQ19HUk9XKGxpc3QtPml0ZW1zLCBsaXN0LT5uciArIDEsIGxpc3QtPmFsbG9jKTsKKwlyZXR2YWwgPSAmbGlzdC0+aXRlbXNbbGlzdC0+bnIrK107CisJcmV0dmFsLT5zdHJpbmcgPSBzdHJpbmc7CisJcmV0dmFsLT51dGlsID0gTlVMTDsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfYXBwZW5kKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlyZXR1cm4gc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKAorCQkJbGlzdCwKKwkJCWxpc3QtPnN0cmR1cF9zdHJpbmdzID8geHN0cmR1cChzdHJpbmcpIDogKGNoYXIgKilzdHJpbmcpOworfQorCisvKiBZdWNrICovCitzdGF0aWMgY29tcGFyZV9zdHJpbmdzX2ZuIGNvbXBhcmVfZm9yX3Fzb3J0OworCisvKiBPbmx5IGNhbGwgdGhpcyBmcm9tIGluc2lkZSBzdHJpbmdfbGlzdF9zb3J0ISAqLworc3RhdGljIGludCBjbXBfaXRlbXMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqb25lID0gYTsKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqdHdvID0gYjsKKwlyZXR1cm4gY29tcGFyZV9mb3JfcXNvcnQob25lLT5zdHJpbmcsIHR3by0+c3RyaW5nKTsKK30KKwordm9pZCBzdHJpbmdfbGlzdF9zb3J0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwljb21wYXJlX2Zvcl9xc29ydCA9IGxpc3QtPmNtcCA/IGxpc3QtPmNtcCA6IHN0cmNtcDsKKwlxc29ydChsaXN0LT5pdGVtcywgbGlzdC0+bnIsIHNpemVvZigqbGlzdC0+aXRlbXMpLCBjbXBfaXRlbXMpOworfQorCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJCSAgICAgY29uc3QgY2hhciAqc3RyaW5nKQoreworCWludCBpOworCWNvbXBhcmVfc3RyaW5nc19mbiBjbXAgPSBsaXN0LT5jbXAgPyBsaXN0LT5jbXAgOiBzdHJjbXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykKKwkJaWYgKCFjbXAoc3RyaW5nLCBsaXN0LT5pdGVtc1tpXS5zdHJpbmcpKQorCQkJcmV0dXJuIGxpc3QtPml0ZW1zICsgaTsKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHVuc29ydGVkX3N0cmluZ19saXN0X2hhc19zdHJpbmcoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJCSAgICBjb25zdCBjaGFyICpzdHJpbmcpCit7CisJcmV0dXJuIHVuc29ydGVkX3N0cmluZ19saXN0X2xvb2t1cChsaXN0LCBzdHJpbmcpICE9IE5VTEw7Cit9CisKK3ZvaWQgdW5zb3J0ZWRfc3RyaW5nX2xpc3RfZGVsZXRlX2l0ZW0oc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgaSwgaW50IGZyZWVfdXRpbCkKK3sKKwlpZiAobGlzdC0+c3RyZHVwX3N0cmluZ3MpCisJCWZyZWUobGlzdC0+aXRlbXNbaV0uc3RyaW5nKTsKKwlpZiAoZnJlZV91dGlsKQorCQlmcmVlKGxpc3QtPml0ZW1zW2ldLnV0aWwpOworCWxpc3QtPml0ZW1zW2ldID0gbGlzdC0+aXRlbXNbbGlzdC0+bnItMV07CisJbGlzdC0+bnItLTsKK30KKworaW50IHN0cmluZ19saXN0X3NwbGl0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nLAorCQkgICAgICBpbnQgZGVsaW0sIGludCBtYXhzcGxpdCkKK3sKKwlpbnQgY291bnQgPSAwOworCWNvbnN0IGNoYXIgKnAgPSBzdHJpbmcsICplbmQ7CisKKwlpZiAoIWxpc3QtPnN0cmR1cF9zdHJpbmdzKQorCQlkaWUoImludGVybmFsIGVycm9yIGluIHN0cmluZ19saXN0X3NwbGl0KCk6ICIKKwkJICAgICJsaXN0LT5zdHJkdXBfc3RyaW5ncyBtdXN0IGJlIHNldCIpOworCWZvciAoOzspIHsKKwkJY291bnQrKzsKKwkJaWYgKG1heHNwbGl0ID49IDAgJiYgY291bnQgPiBtYXhzcGxpdCkgeworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKGxpc3QsIHApOworCQkJcmV0dXJuIGNvdW50OworCQl9CisJCWVuZCA9IHN0cmNocihwLCBkZWxpbSk7CisJCWlmIChlbmQpIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZF9ub2R1cChsaXN0LCB4bWVtZHVweihwLCBlbmQgLSBwKSk7CisJCQlwID0gZW5kICsgMTsKKwkJfSBlbHNlIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCBwKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCX0KK30KKworaW50IHN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY2hhciAqc3RyaW5nLAorCQkJICAgICAgIGludCBkZWxpbSwgaW50IG1heHNwbGl0KQoreworCWludCBjb3VudCA9IDA7CisJY2hhciAqcCA9IHN0cmluZywgKmVuZDsKKworCWlmIChsaXN0LT5zdHJkdXBfc3RyaW5ncykKKwkJZGllKCJpbnRlcm5hbCBlcnJvciBpbiBzdHJpbmdfbGlzdF9zcGxpdF9pbl9wbGFjZSgpOiAiCisJCSAgICAibGlzdC0+c3RyZHVwX3N0cmluZ3MgbXVzdCBub3QgYmUgc2V0Iik7CisJZm9yICg7OykgeworCQljb3VudCsrOworCQlpZiAobWF4c3BsaXQgPj0gMCAmJiBjb3VudCA+IG1heHNwbGl0KSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcCk7CisJCQlyZXR1cm4gY291bnQ7CisJCX0KKwkJZW5kID0gc3RyY2hyKHAsIGRlbGltKTsKKwkJaWYgKGVuZCkgeworCQkJKmVuZCA9ICdcMCc7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQobGlzdCwgcCk7CisJCQlwID0gZW5kICsgMTsKKwkJfSBlbHNlIHsKKwkJCXN0cmluZ19saXN0X2FwcGVuZChsaXN0LCBwKTsKKwkJCXJldHVybiBjb3VudDsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL3N0cmluZy1saXN0LmggYi9zdHJpbmctbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODA5YTEKLS0tIC9kZXYvbnVsbAorKysgYi9zdHJpbmctbGlzdC5oCkBAIC0wLDAgKzEsMTMxIEBACisjaWZuZGVmIFNUUklOR19MSVNUX0gKKyNkZWZpbmUgU1RSSU5HX0xJU1RfSAorCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSB7CisJY2hhciAqc3RyaW5nOworCXZvaWQgKnV0aWw7Cit9OworCit0eXBlZGVmIGludCAoKmNvbXBhcmVfc3RyaW5nc19mbikoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCitzdHJ1Y3Qgc3RyaW5nX2xpc3QgeworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtczsKKwl1bnNpZ25lZCBpbnQgbnIsIGFsbG9jOworCXVuc2lnbmVkIGludCBzdHJkdXBfc3RyaW5nczoxOworCWNvbXBhcmVfc3RyaW5nc19mbiBjbXA7IC8qIE5VTEwgdXNlcyBzdHJjbXAoKSAqLworfTsKKworI2RlZmluZSBTVFJJTkdfTElTVF9JTklUX05PRFVQIHsgTlVMTCwgMCwgMCwgMCwgTlVMTCB9CisjZGVmaW5lIFNUUklOR19MSVNUX0lOSVRfRFVQICAgeyBOVUxMLCAwLCAwLCAxLCBOVUxMIH0KKwordm9pZCBzdHJpbmdfbGlzdF9pbml0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgaW50IHN0cmR1cF9zdHJpbmdzKTsKKwordm9pZCBwcmludF9zdHJpbmdfbGlzdChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnAsIGNvbnN0IGNoYXIgKnRleHQpOwordm9pZCBzdHJpbmdfbGlzdF9jbGVhcihzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCBmcmVlX3V0aWwpOworCisvKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBjYWxsIGEgY3VzdG9tIGNsZWFyIGZ1bmN0aW9uIG9uIGVhY2ggdXRpbCBwb2ludGVyICovCisvKiBUaGUgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXRpbCBwb2ludGVyIGlzIHBhc3NlZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50ICovCit0eXBlZGVmIHZvaWQgKCpzdHJpbmdfbGlzdF9jbGVhcl9mdW5jX3QpKHZvaWQgKnAsIGNvbnN0IGNoYXIgKnN0cik7Cit2b2lkIHN0cmluZ19saXN0X2NsZWFyX2Z1bmMoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBzdHJpbmdfbGlzdF9jbGVhcl9mdW5jX3QgY2xlYXJmdW5jKTsKKworLyogVXNlIHRoaXMgZnVuY3Rpb24gb3IgdGhlIG1hY3JvIGJlbG93IHRvIGl0ZXJhdGUgb3ZlciBlYWNoIGl0ZW0gKi8KK3R5cGVkZWYgaW50ICgqc3RyaW5nX2xpc3RfZWFjaF9mdW5jX3QpKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICosIHZvaWQgKik7CitpbnQgZm9yX2VhY2hfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LAorCQkJIHN0cmluZ19saXN0X2VhY2hfZnVuY190LCB2b2lkICpjYl9kYXRhKTsKKyNkZWZpbmUgZm9yX2VhY2hfc3RyaW5nX2xpc3RfaXRlbShpdGVtLGxpc3QpIFwKKwlmb3IgKGl0ZW0gPSAobGlzdCktPml0ZW1zOyBpdGVtIDwgKGxpc3QpLT5pdGVtcyArIChsaXN0KS0+bnI7ICsraXRlbSkKKworLyoKKyAqIEFwcGx5IHdhbnQgdG8gZWFjaCBpdGVtIGluIGxpc3QsIHJldGFpbmluZyBvbmx5IHRoZSBvbmVzIGZvciB3aGljaAorICogdGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZS4gIElmIGZyZWVfdXRpbCBpcyB0cnVlLCBjYWxsIGZyZWUoKSBvbgorICogdGhlIHV0aWwgbWVtYmVycyBvZiBhbnkgaXRlbXMgdGhhdCBoYXZlIHRvIGJlIGRlbGV0ZWQuICBQcmVzZXJ2ZQorICogdGhlIG9yZGVyIG9mIHRoZSBpdGVtcyB0aGF0IGFyZSByZXRhaW5lZC4KKyAqLwordm9pZCBmaWx0ZXJfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBpbnQgZnJlZV91dGlsLAorCQkJc3RyaW5nX2xpc3RfZWFjaF9mdW5jX3Qgd2FudCwgdm9pZCAqY2JfZGF0YSk7CisKKy8qCisgKiBSZW1vdmUgYW55IGVtcHR5IHN0cmluZ3MgZnJvbSB0aGUgbGlzdC4gIElmIGZyZWVfdXRpbCBpcyB0cnVlLCBjYWxsCisgKiBmcmVlKCkgb24gdGhlIHV0aWwgbWVtYmVycyBvZiBhbnkgaXRlbXMgdGhhdCBoYXZlIHRvIGJlIGRlbGV0ZWQuCisgKiBQcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgdGhlIGl0ZW1zIHRoYXQgYXJlIHJldGFpbmVkLgorICovCit2b2lkIHN0cmluZ19saXN0X3JlbW92ZV9lbXB0eV9pdGVtcyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCBmcmVlX3V0aWwpOworCisvKiBVc2UgdGhlc2UgZnVuY3Rpb25zIG9ubHkgb24gc29ydGVkIGxpc3RzOiAqLworaW50IHN0cmluZ19saXN0X2hhc19zdHJpbmcoY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcpOworaW50IHN0cmluZ19saXN0X2ZpbmRfaW5zZXJ0X2luZGV4KGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY29uc3QgY2hhciAqc3RyaW5nLAorCQkJCSAgaW50IG5lZ2F0aXZlX2V4aXN0aW5nX2luZGV4KTsKKy8qCisgKiBJbnNlcnRzIHRoZSBnaXZlbiBzdHJpbmcgaW50byB0aGUgc29ydGVkIGxpc3QuCisgKiBJZiB0aGUgc3RyaW5nIGFscmVhZHkgZXhpc3RzLCB0aGUgbGlzdCBpcyBub3QgYWx0ZXJlZC4KKyAqIFJldHVybnMgdGhlIHN0cmluZ19saXN0X2l0ZW0sIHRoZSBzdHJpbmcgaXMgcGFydCBvZi4KKyAqLworc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2luc2VydChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZyk7CisKKy8qCisgKiBDaGVja3MgaWYgdGhlIGdpdmVuIHN0cmluZyBpcyBwYXJ0IG9mIGEgc29ydGVkIGxpc3QuIElmIGl0IGlzIHBhcnQgb2YgdGhlIGxpc3QsCisgKiByZXR1cm4gdGhlIGNvcmVzcG9uZGluZyBzdHJpbmdfbGlzdF9pdGVtLCBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2xvb2t1cChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZyk7CisKKy8qCisgKiBSZW1vdmUgYWxsIGJ1dCB0aGUgZmlyc3Qgb2YgY29uc2VjdXRpdmUgZW50cmllcyB3aXRoIHRoZSBzYW1lCisgKiBzdHJpbmcgdmFsdWUuICBJZiBmcmVlX3V0aWwgaXMgdHJ1ZSwgY2FsbCBmcmVlKCkgb24gdGhlIHV0aWwKKyAqIG1lbWJlcnMgb2YgYW55IGl0ZW1zIHRoYXQgaGF2ZSB0byBiZSBkZWxldGVkLgorICovCit2b2lkIHN0cmluZ19saXN0X3JlbW92ZV9kdXBsaWNhdGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqc29ydGVkX2xpc3QsIGludCBmcmVlX3V0aWwpOworCisKKy8qIFVzZSB0aGVzZSBmdW5jdGlvbnMgb25seSBvbiB1bnNvcnRlZCBsaXN0czogKi8KKworLyoKKyAqIEFkZCBzdHJpbmcgdG8gdGhlIGVuZCBvZiBsaXN0LiAgSWYgbGlzdC0+c3RyZHVwX3N0cmluZyBpcyBzZXQsIHRoZW4KKyAqIHN0cmluZyBpcyBjb3BpZWQ7IG90aGVyd2lzZSB0aGUgbmV3IHN0cmluZ19saXN0X2VudHJ5IHJlZmVycyB0byB0aGUKKyAqIGlucHV0IHN0cmluZy4KKyAqLworc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnN0cmluZ19saXN0X2FwcGVuZChzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZyk7CisKKy8qCisgKiBMaWtlIHN0cmluZ19saXN0X2FwcGVuZCgpLCBleGNlcHQgc3RyaW5nIGlzIG5ldmVyIGNvcGllZC4gIFdoZW4KKyAqIGxpc3QtPnN0cmR1cF9zdHJpbmdzIGlzIHNldCwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBoYW5kCisgKiBvd25lcnNoaXAgb2YgYSBtYWxsb2MoKWVkIHN0cmluZyB0byBsaXN0IHdpdGhvdXQgbWFraW5nIGFuIGV4dHJhCisgKiBjb3B5LgorICovCitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqc3RyaW5nX2xpc3RfYXBwZW5kX25vZHVwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY2hhciAqc3RyaW5nKTsKKwordm9pZCBzdHJpbmdfbGlzdF9zb3J0KHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCk7CitpbnQgdW5zb3J0ZWRfc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGNvbnN0IGNoYXIgKnN0cmluZyk7CitzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwKKwkJCQkJCSAgICAgY29uc3QgY2hhciAqc3RyaW5nKTsKKwordm9pZCB1bnNvcnRlZF9zdHJpbmdfbGlzdF9kZWxldGVfaXRlbShzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QsIGludCBpLCBpbnQgZnJlZV91dGlsKTsKKworLyoKKyAqIFNwbGl0IHN0cmluZyBpbnRvIHN1YnN0cmluZ3Mgb24gY2hhcmFjdGVyIGRlbGltIGFuZCBhcHBlbmQgdGhlCisgKiBzdWJzdHJpbmdzIHRvIGxpc3QuICBUaGUgaW5wdXQgc3RyaW5nIGlzIG5vdCBtb2RpZmllZC4KKyAqIGxpc3QtPnN0cmR1cF9zdHJpbmdzIG11c3QgYmUgc2V0LCBhcyBuZXcgbWVtb3J5IG5lZWRzIHRvIGJlCisgKiBhbGxvY2F0ZWQgdG8gaG9sZCB0aGUgc3Vic3RyaW5ncy4gIElmIG1heHNwbGl0IGlzIG5vbi1uZWdhdGl2ZSwKKyAqIHRoZW4gc3BsaXQgYXQgbW9zdCBtYXhzcGxpdCB0aW1lcy4gIFJldHVybiB0aGUgbnVtYmVyIG9mIHN1YnN0cmluZ3MKKyAqIGFwcGVuZGVkIHRvIGxpc3QuCisgKgorICogRXhhbXBsZXM6CisgKiAgIHN0cmluZ19saXN0X3NwbGl0KGwsICJmb286YmFyOmJheiIsICc6JywgLTEpIC0+IFsiZm9vIiwgImJhciIsICJiYXoiXQorICogICBzdHJpbmdfbGlzdF9zcGxpdChsLCAiZm9vOmJhcjpiYXoiLCAnOicsIDApIC0+IFsiZm9vOmJhcjpiYXoiXQorICogICBzdHJpbmdfbGlzdF9zcGxpdChsLCAiZm9vOmJhcjpiYXoiLCAnOicsIDEpIC0+IFsiZm9vIiwgImJhcjpiYXoiXQorICogICBzdHJpbmdfbGlzdF9zcGxpdChsLCAiZm9vOmJhcjoiLCAnOicsIC0xKSAtPiBbImZvbyIsICJiYXIiLCAiIl0KKyAqICAgc3RyaW5nX2xpc3Rfc3BsaXQobCwgIiIsICc6JywgLTEpIC0+IFsiIl0KKyAqICAgc3RyaW5nX2xpc3Rfc3BsaXQobCwgIjoiLCAnOicsIC0xKSAtPiBbIiIsICIiXQorICovCitpbnQgc3RyaW5nX2xpc3Rfc3BsaXQoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICpzdHJpbmcsCisJCSAgICAgIGludCBkZWxpbSwgaW50IG1heHNwbGl0KTsKKworLyoKKyAqIExpa2Ugc3RyaW5nX2xpc3Rfc3BsaXQoKSwgZXhjZXB0IHRoYXQgc3RyaW5nIGlzIHNwbGl0IGluLXBsYWNlOiB0aGUKKyAqIGRlbGltaXRlciBjaGFyYWN0ZXJzIGluIHN0cmluZyBhcmUgb3ZlcndyaXR0ZW4gd2l0aCBOVUxzLCBhbmQgdGhlCisgKiBuZXcgc3RyaW5nX2xpc3RfaXRlbXMgcG9pbnQgaW50byBzdHJpbmcgKHdoaWNoIHRoZXJlZm9yZSBtdXN0IG5vdAorICogYmUgbW9kaWZpZWQgb3IgZnJlZWQgd2hpbGUgdGhlIHN0cmluZ19saXN0IGlzIGluIHVzZSkuCisgKiBsaXN0LT5zdHJkdXBfc3RyaW5ncyBtdXN0ICpub3QqIGJlIHNldC4KKyAqLworaW50IHN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlKHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCwgY2hhciAqc3RyaW5nLAorCQkJICAgICAgIGludCBkZWxpbSwgaW50IG1heHNwbGl0KTsKKyNlbmRpZiAvKiBTVFJJTkdfTElTVF9IICovCmRpZmYgLS1naXQgYS9zdWJtb2R1bGUtY29uZmlnLmMgYi9zdWJtb2R1bGUtY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZlMGVhOAotLS0gL2Rldi9udWxsCisrKyBiL3N1Ym1vZHVsZS1jb25maWcuYwpAQCAtMCwwICsxLDQ2NiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLWNvbmZpZy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisvKgorICogc3VibW9kdWxlIGNhY2hlIGxvb2t1cCBzdHJ1Y3R1cmUKKyAqIFRoZXJlIGlzIG9uZSBzaGFyZWQgc2V0IG9mICdzdHJ1Y3Qgc3VibW9kdWxlJyBlbnRyaWVzIHdoaWNoIGNhbiBiZQorICogbG9va2VkIHVwIGJ5IHRoZWlyIHNoYTEgYmxvYiBpZCBvZiB0aGUgLmdpdG1vZHVsZSBmaWxlIGFuZCBlaXRoZXIKKyAqIHVzaW5nIHBhdGggb3IgbmFtZSBhcyBrZXkuCisgKiBmb3JfcGF0aCBzdG9yZXMgc3VibW9kdWxlIGVudHJpZXMgd2l0aCBwYXRoIGFzIGtleQorICogZm9yX25hbWUgc3RvcmVzIHN1Ym1vZHVsZSBlbnRyaWVzIHdpdGggbmFtZSBhcyBrZXkKKyAqLworc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSB7CisJc3RydWN0IGhhc2htYXAgZm9yX3BhdGg7CisJc3RydWN0IGhhc2htYXAgZm9yX25hbWU7Cit9OworCisvKgorICogdGhpbiB3cmFwcGVyIHN0cnVjdCBuZWVkZWQgdG8gaW5zZXJ0ICdzdHJ1Y3Qgc3VibW9kdWxlJyBlbnRyaWVzIHRvCisgKiB0aGUgaGFzaG1hcAorICovCitzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5IHsKKwlzdHJ1Y3QgaGFzaG1hcF9lbnRyeSBlbnQ7CisJc3RydWN0IHN1Ym1vZHVsZSAqY29uZmlnOworfTsKKworZW51bSBsb29rdXBfdHlwZSB7CisJbG9va3VwX25hbWUsCisJbG9va3VwX3BhdGgKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlIGNhY2hlOworc3RhdGljIGludCBpc19jYWNoZV9pbml0OworCitzdGF0aWMgaW50IGNvbmZpZ19wYXRoX2NtcChjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5ICphLAorCQkJICAgY29uc3Qgc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqYiwKKwkJCSAgIGNvbnN0IHZvaWQgKnVudXNlZCkKK3sKKwlyZXR1cm4gc3RyY21wKGEtPmNvbmZpZy0+cGF0aCwgYi0+Y29uZmlnLT5wYXRoKSB8fAorCSAgICAgICBoYXNoY21wKGEtPmNvbmZpZy0+Z2l0bW9kdWxlc19zaGExLCBiLT5jb25maWctPmdpdG1vZHVsZXNfc2hhMSk7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX25hbWVfY21wKGNvbnN0IHN0cnVjdCBzdWJtb2R1bGVfZW50cnkgKmEsCisJCQkgICBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5ICpiLAorCQkJICAgY29uc3Qgdm9pZCAqdW51c2VkKQoreworCXJldHVybiBzdHJjbXAoYS0+Y29uZmlnLT5uYW1lLCBiLT5jb25maWctPm5hbWUpIHx8CisJICAgICAgIGhhc2hjbXAoYS0+Y29uZmlnLT5naXRtb2R1bGVzX3NoYTEsIGItPmNvbmZpZy0+Z2l0bW9kdWxlc19zaGExKTsKK30KKworc3RhdGljIHZvaWQgY2FjaGVfaW5pdChzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSkKK3sKKwloYXNobWFwX2luaXQoJmNhY2hlLT5mb3JfcGF0aCwgKGhhc2htYXBfY21wX2ZuKSBjb25maWdfcGF0aF9jbXAsIDApOworCWhhc2htYXBfaW5pdCgmY2FjaGUtPmZvcl9uYW1lLCAoaGFzaG1hcF9jbXBfZm4pIGNvbmZpZ19uYW1lX2NtcCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfb25lX2NvbmZpZyhzdHJ1Y3Qgc3VibW9kdWxlX2VudHJ5ICplbnRyeSkKK3sKKwlmcmVlKCh2b2lkICopIGVudHJ5LT5jb25maWctPnBhdGgpOworCWZyZWUoKHZvaWQgKikgZW50cnktPmNvbmZpZy0+bmFtZSk7CisJZnJlZShlbnRyeS0+Y29uZmlnKTsKK30KKworc3RhdGljIHZvaWQgY2FjaGVfZnJlZShzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSkKK3sKKwlzdHJ1Y3QgaGFzaG1hcF9pdGVyIGl0ZXI7CisJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZW50cnk7CisKKwkvKgorCSAqIFdlIGl0ZXJhdGUgb3ZlciB0aGUgbmFtZSBoYXNoIGhlcmUgdG8gYmUgc3ltbWV0cmljIHdpdGggdGhlCisJICogYWxsb2NhdGlvbiBvZiBzdHJ1Y3Qgc3VibW9kdWxlIGVudHJpZXMuIEVhY2ggaXMgYWxsb2NhdGVkIGJ5CisJICogdGhlaXIgLmdpdG1vZHVsZSBibG9iIHNoYTEgYW5kIHN1Ym1vZHVsZSBuYW1lLgorCSAqLworCWhhc2htYXBfaXRlcl9pbml0KCZjYWNoZS0+Zm9yX25hbWUsICZpdGVyKTsKKwl3aGlsZSAoKGVudHJ5ID0gaGFzaG1hcF9pdGVyX25leHQoJml0ZXIpKSkKKwkJZnJlZV9vbmVfY29uZmlnKGVudHJ5KTsKKworCWhhc2htYXBfZnJlZSgmY2FjaGUtPmZvcl9wYXRoLCAxKTsKKwloYXNobWFwX2ZyZWUoJmNhY2hlLT5mb3JfbmFtZSwgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaF9zaGExX3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCQkJCSAgICAgY29uc3QgY2hhciAqc3RyaW5nKQoreworCXJldHVybiBtZW1oYXNoKHNoYTEsIDIwKSArIHN0cmhhc2goc3RyaW5nKTsKK30KKworc3RhdGljIHZvaWQgY2FjaGVfcHV0X3BhdGgoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUsCisJCQkgICBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGUpCit7CisJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX3NoYTFfc3RyaW5nKHN1Ym1vZHVsZS0+Z2l0bW9kdWxlc19zaGExLAorCQkJCQkgICAgIHN1Ym1vZHVsZS0+cGF0aCk7CisJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZSA9IHhtYWxsb2Moc2l6ZW9mKCplKSk7CisJaGFzaG1hcF9lbnRyeV9pbml0KGUsIGhhc2gpOworCWUtPmNvbmZpZyA9IHN1Ym1vZHVsZTsKKwloYXNobWFwX3B1dCgmY2FjaGUtPmZvcl9wYXRoLCBlKTsKK30KKworc3RhdGljIHZvaWQgY2FjaGVfcmVtb3ZlX3BhdGgoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUsCisJCQkgICAgICBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGUpCit7CisJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX3NoYTFfc3RyaW5nKHN1Ym1vZHVsZS0+Z2l0bW9kdWxlc19zaGExLAorCQkJCQkgICAgIHN1Ym1vZHVsZS0+cGF0aCk7CisJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSBlOworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkgKnJlbW92ZWQ7CisJaGFzaG1hcF9lbnRyeV9pbml0KCZlLCBoYXNoKTsKKwllLmNvbmZpZyA9IHN1Ym1vZHVsZTsKKwlyZW1vdmVkID0gaGFzaG1hcF9yZW1vdmUoJmNhY2hlLT5mb3JfcGF0aCwgJmUsIE5VTEwpOworCWZyZWUocmVtb3ZlZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNhY2hlX2FkZChzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJICAgICAgc3RydWN0IHN1Ym1vZHVsZSAqc3VibW9kdWxlKQoreworCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9zaGExX3N0cmluZyhzdWJtb2R1bGUtPmdpdG1vZHVsZXNfc2hhMSwKKwkJCQkJICAgICBzdWJtb2R1bGUtPm5hbWUpOworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkgKmUgPSB4bWFsbG9jKHNpemVvZigqZSkpOworCWhhc2htYXBfZW50cnlfaW5pdChlLCBoYXNoKTsKKwllLT5jb25maWcgPSBzdWJtb2R1bGU7CisJaGFzaG1hcF9hZGQoJmNhY2hlLT5mb3JfbmFtZSwgZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpjYWNoZV9sb29rdXBfcGF0aChzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZ2l0bW9kdWxlc19zaGExLCBjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9zaGExX3N0cmluZyhnaXRtb2R1bGVzX3NoYTEsIHBhdGgpOworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkga2V5OworCXN0cnVjdCBzdWJtb2R1bGUga2V5X2NvbmZpZzsKKworCWhhc2hjcHkoa2V5X2NvbmZpZy5naXRtb2R1bGVzX3NoYTEsIGdpdG1vZHVsZXNfc2hhMSk7CisJa2V5X2NvbmZpZy5wYXRoID0gcGF0aDsKKworCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LCBoYXNoKTsKKwlrZXkuY29uZmlnID0gJmtleV9jb25maWc7CisKKwllbnRyeSA9IGhhc2htYXBfZ2V0KCZjYWNoZS0+Zm9yX3BhdGgsICZrZXksIE5VTEwpOworCWlmIChlbnRyeSkKKwkJcmV0dXJuIGVudHJ5LT5jb25maWc7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3VibW9kdWxlICpjYWNoZV9sb29rdXBfbmFtZShzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZ2l0bW9kdWxlc19zaGExLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkgKmVudHJ5OworCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9zaGExX3N0cmluZyhnaXRtb2R1bGVzX3NoYTEsIG5hbWUpOworCXN0cnVjdCBzdWJtb2R1bGVfZW50cnkga2V5OworCXN0cnVjdCBzdWJtb2R1bGUga2V5X2NvbmZpZzsKKworCWhhc2hjcHkoa2V5X2NvbmZpZy5naXRtb2R1bGVzX3NoYTEsIGdpdG1vZHVsZXNfc2hhMSk7CisJa2V5X2NvbmZpZy5uYW1lID0gbmFtZTsKKworCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LCBoYXNoKTsKKwlrZXkuY29uZmlnID0gJmtleV9jb25maWc7CisKKwllbnRyeSA9IGhhc2htYXBfZ2V0KCZjYWNoZS0+Zm9yX25hbWUsICZrZXksIE5VTEwpOworCWlmIChlbnRyeSkKKwkJcmV0dXJuIGVudHJ5LT5jb25maWc7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbmFtZV9hbmRfaXRlbV9mcm9tX3Zhcihjb25zdCBjaGFyICp2YXIsIHN0cnVjdCBzdHJidWYgKm5hbWUsCisJCQkJICBzdHJ1Y3Qgc3RyYnVmICppdGVtKQoreworCWNvbnN0IGNoYXIgKnN1YnNlY3Rpb24sICprZXk7CisJaW50IHN1YnNlY3Rpb25fbGVuLCBwYXJzZTsKKwlwYXJzZSA9IHBhcnNlX2NvbmZpZ19rZXkodmFyLCAic3VibW9kdWxlIiwgJnN1YnNlY3Rpb24sCisJCQkmc3Vic2VjdGlvbl9sZW4sICZrZXkpOworCWlmIChwYXJzZSA8IDAgfHwgIXN1YnNlY3Rpb24pCisJCXJldHVybiAwOworCisJc3RyYnVmX2FkZChuYW1lLCBzdWJzZWN0aW9uLCBzdWJzZWN0aW9uX2xlbik7CisJc3RyYnVmX2FkZHN0cihpdGVtLCBrZXkpOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3VibW9kdWxlICpsb29rdXBfb3JfY3JlYXRlX2J5X25hbWUoc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmdpdG1vZHVsZXNfc2hhMSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGU7CisJc3RydWN0IHN0cmJ1ZiBuYW1lX2J1ZiA9IFNUUkJVRl9JTklUOworCisJc3VibW9kdWxlID0gY2FjaGVfbG9va3VwX25hbWUoY2FjaGUsIGdpdG1vZHVsZXNfc2hhMSwgbmFtZSk7CisJaWYgKHN1Ym1vZHVsZSkKKwkJcmV0dXJuIHN1Ym1vZHVsZTsKKworCXN1Ym1vZHVsZSA9IHhtYWxsb2Moc2l6ZW9mKCpzdWJtb2R1bGUpKTsKKworCXN0cmJ1Zl9hZGRzdHIoJm5hbWVfYnVmLCBuYW1lKTsKKwlzdWJtb2R1bGUtPm5hbWUgPSBzdHJidWZfZGV0YWNoKCZuYW1lX2J1ZiwgTlVMTCk7CisKKwlzdWJtb2R1bGUtPnBhdGggPSBOVUxMOworCXN1Ym1vZHVsZS0+dXJsID0gTlVMTDsKKwlzdWJtb2R1bGUtPmZldGNoX3JlY3Vyc2UgPSBSRUNVUlNFX1NVQk1PRFVMRVNfTk9ORTsKKwlzdWJtb2R1bGUtPmlnbm9yZSA9IE5VTEw7CisKKwloYXNoY3B5KHN1Ym1vZHVsZS0+Z2l0bW9kdWxlc19zaGExLCBnaXRtb2R1bGVzX3NoYTEpOworCisJY2FjaGVfYWRkKGNhY2hlLCBzdWJtb2R1bGUpOworCisJcmV0dXJuIHN1Ym1vZHVsZTsKK30KKworc3RhdGljIGludCBwYXJzZV9mZXRjaF9yZWN1cnNlKGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqYXJnLAorCQkJICAgICAgIGludCBkaWVfb25fZXJyb3IpCit7CisJc3dpdGNoIChnaXRfY29uZmlnX21heWJlX2Jvb2wob3B0LCBhcmcpKSB7CisJY2FzZSAxOgorCQlyZXR1cm4gUkVDVVJTRV9TVUJNT0RVTEVTX09OOworCWNhc2UgMDoKKwkJcmV0dXJuIFJFQ1VSU0VfU1VCTU9EVUxFU19PRkY7CisJZGVmYXVsdDoKKwkJaWYgKCFzdHJjbXAoYXJnLCAib24tZGVtYW5kIikpCisJCQlyZXR1cm4gUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORDsKKworCQlpZiAoZGllX29uX2Vycm9yKQorCQkJZGllKCJiYWQgJXMgYXJndW1lbnQ6ICVzIiwgb3B0LCBhcmcpOworCQllbHNlCisJCQlyZXR1cm4gUkVDVVJTRV9TVUJNT0RVTEVTX0VSUk9SOworCX0KK30KKworaW50IHBhcnNlX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcoY29uc3QgY2hhciAqb3B0LCBjb25zdCBjaGFyICphcmcpCit7CisJcmV0dXJuIHBhcnNlX2ZldGNoX3JlY3Vyc2Uob3B0LCBhcmcsIDEpOworfQorCitzdGF0aWMgdm9pZCB3YXJuX211bHRpcGxlX2NvbmZpZyhjb25zdCB1bnNpZ25lZCBjaGFyICpjb21taXRfc2hhMSwKKwkJCQkgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqb3B0aW9uKQoreworCWNvbnN0IGNoYXIgKmNvbW1pdF9zdHJpbmcgPSAiV09SS1RSRUUiOworCWlmIChjb21taXRfc2hhMSkKKwkJY29tbWl0X3N0cmluZyA9IHNoYTFfdG9faGV4KGNvbW1pdF9zaGExKTsKKwl3YXJuaW5nKCIlczouZ2l0bW9kdWxlcywgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMgZm91bmQgZm9yICIKKwkJCSInc3VibW9kdWxlLiVzLiVzJy4gU2tpcHBpbmcgc2Vjb25kIG9uZSEiLAorCQkJY29tbWl0X3N0cmluZywgbmFtZSwgb3B0aW9uKTsKK30KKworc3RydWN0IHBhcnNlX2NvbmZpZ19wYXJhbWV0ZXIgeworCXN0cnVjdCBzdWJtb2R1bGVfY2FjaGUgKmNhY2hlOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9zaGExOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmdpdG1vZHVsZXNfc2hhMTsKKwlpbnQgb3ZlcndyaXRlOworfTsKKworc3RhdGljIGludCBwYXJzZV9jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGFyc2VfY29uZmlnX3BhcmFtZXRlciAqbWUgPSBkYXRhOworCXN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZTsKKwlzdHJ1Y3Qgc3RyYnVmIG5hbWUgPSBTVFJCVUZfSU5JVCwgaXRlbSA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOworCisJLyogdGhpcyBhbHNvIGVuc3VyZXMgdGhhdCB3ZSBvbmx5IHBhcnNlIHN1Ym1vZHVsZSBlbnRyaWVzICovCisJaWYgKCFuYW1lX2FuZF9pdGVtX2Zyb21fdmFyKHZhciwgJm5hbWUsICZpdGVtKSkKKwkJcmV0dXJuIDA7CisKKwlzdWJtb2R1bGUgPSBsb29rdXBfb3JfY3JlYXRlX2J5X25hbWUobWUtPmNhY2hlLAorCQkJCQkgICAgIG1lLT5naXRtb2R1bGVzX3NoYTEsCisJCQkJCSAgICAgbmFtZS5idWYpOworCisJaWYgKCFzdHJjbXAoaXRlbS5idWYsICJwYXRoIikpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCXJldCA9IGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCWVsc2UgaWYgKCFtZS0+b3ZlcndyaXRlICYmIHN1Ym1vZHVsZS0+cGF0aCAhPSBOVUxMKQorCQkJd2Fybl9tdWx0aXBsZV9jb25maWcobWUtPmNvbW1pdF9zaGExLCBzdWJtb2R1bGUtPm5hbWUsCisJCQkJCSJwYXRoIik7CisJCWVsc2UgeworCQkJaWYgKHN1Ym1vZHVsZS0+cGF0aCkKKwkJCQljYWNoZV9yZW1vdmVfcGF0aChtZS0+Y2FjaGUsIHN1Ym1vZHVsZSk7CisJCQlmcmVlKCh2b2lkICopIHN1Ym1vZHVsZS0+cGF0aCk7CisJCQlzdWJtb2R1bGUtPnBhdGggPSB4c3RyZHVwKHZhbHVlKTsKKwkJCWNhY2hlX3B1dF9wYXRoKG1lLT5jYWNoZSwgc3VibW9kdWxlKTsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChpdGVtLmJ1ZiwgImZldGNocmVjdXJzZXN1Ym1vZHVsZXMiKSkgeworCQkvKiB3aGVuIHBhcnNpbmcgd29ya3RyZWUgY29uZmlndXJhdGlvbnMgd2UgY2FuIGRpZSBlYXJseSAqLworCQlpbnQgZGllX29uX2Vycm9yID0gaXNfbnVsbF9zaGExKG1lLT5naXRtb2R1bGVzX3NoYTEpOworCQlpZiAoIW1lLT5vdmVyd3JpdGUgJiYKKwkJICAgIHN1Ym1vZHVsZS0+ZmV0Y2hfcmVjdXJzZSAhPSBSRUNVUlNFX1NVQk1PRFVMRVNfTk9ORSkKKwkJCXdhcm5fbXVsdGlwbGVfY29uZmlnKG1lLT5jb21taXRfc2hhMSwgc3VibW9kdWxlLT5uYW1lLAorCQkJCQkiZmV0Y2hyZWN1cnNlc3VibW9kdWxlcyIpOworCQllbHNlCisJCQlzdWJtb2R1bGUtPmZldGNoX3JlY3Vyc2UgPSBwYXJzZV9mZXRjaF9yZWN1cnNlKAorCQkJCQkJCQl2YXIsIHZhbHVlLAorCQkJCQkJCQlkaWVfb25fZXJyb3IpOworCX0gZWxzZSBpZiAoIXN0cmNtcChpdGVtLmJ1ZiwgImlnbm9yZSIpKSB7CisJCWlmICghdmFsdWUpCisJCQlyZXQgPSBjb25maWdfZXJyb3Jfbm9uYm9vbCh2YXIpOworCQllbHNlIGlmICghbWUtPm92ZXJ3cml0ZSAmJiBzdWJtb2R1bGUtPmlnbm9yZSAhPSBOVUxMKQorCQkJd2Fybl9tdWx0aXBsZV9jb25maWcobWUtPmNvbW1pdF9zaGExLCBzdWJtb2R1bGUtPm5hbWUsCisJCQkJCSJpZ25vcmUiKTsKKwkJZWxzZSBpZiAoc3RyY21wKHZhbHVlLCAidW50cmFja2VkIikgJiYKKwkJCSBzdHJjbXAodmFsdWUsICJkaXJ0eSIpICYmCisJCQkgc3RyY21wKHZhbHVlLCAiYWxsIikgJiYKKwkJCSBzdHJjbXAodmFsdWUsICJub25lIikpCisJCQl3YXJuaW5nKCJJbnZhbGlkIHBhcmFtZXRlciAnJXMnIGZvciBjb25maWcgb3B0aW9uICIKKwkJCQkJIidzdWJtb2R1bGUuJXMuaWdub3JlJyIsIHZhbHVlLCB2YXIpOworCQllbHNlIHsKKwkJCWZyZWUoKHZvaWQgKikgc3VibW9kdWxlLT5pZ25vcmUpOworCQkJc3VibW9kdWxlLT5pZ25vcmUgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChpdGVtLmJ1ZiwgInVybCIpKSB7CisJCWlmICghdmFsdWUpIHsKKwkJCXJldCA9IGNvbmZpZ19lcnJvcl9ub25ib29sKHZhcik7CisJCX0gZWxzZSBpZiAoIW1lLT5vdmVyd3JpdGUgJiYgc3VibW9kdWxlLT51cmwgIT0gTlVMTCkgeworCQkJd2Fybl9tdWx0aXBsZV9jb25maWcobWUtPmNvbW1pdF9zaGExLCBzdWJtb2R1bGUtPm5hbWUsCisJCQkJCSJ1cmwiKTsKKwkJfSBlbHNlIHsKKwkJCWZyZWUoKHZvaWQgKikgc3VibW9kdWxlLT51cmwpOworCQkJc3VibW9kdWxlLT51cmwgPSB4c3RyZHVwKHZhbHVlKTsKKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZuYW1lKTsKKwlzdHJidWZfcmVsZWFzZSgmaXRlbSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdpdG1vZHVsZV9zaGExX2Zyb21fY29tbWl0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9zaGExLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKmdpdG1vZHVsZXNfc2hhMSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJldiA9IFNUUkJVRl9JTklUOworCWludCByZXQgPSAwOworCisJaWYgKGlzX251bGxfc2hhMShjb21taXRfc2hhMSkpIHsKKwkJaGFzaGNweShnaXRtb2R1bGVzX3NoYTEsIG51bGxfc2hhMSk7CisJCXJldHVybiAxOworCX0KKworCXN0cmJ1Zl9hZGRmKCZyZXYsICIlczouZ2l0bW9kdWxlcyIsIHNoYTFfdG9faGV4KGNvbW1pdF9zaGExKSk7CisJaWYgKGdldF9zaGExKHJldi5idWYsIGdpdG1vZHVsZXNfc2hhMSkgPj0gMCkKKwkJcmV0ID0gMTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZyZXYpOworCXJldHVybiByZXQ7Cit9CisKKy8qIFRoaXMgZG9lcyBhIGxvb2t1cCBvZiBhIHN1Ym1vZHVsZSBjb25maWd1cmF0aW9uIGJ5IG5hbWUgb3IgYnkgcGF0aAorICogKGtleSkgd2l0aCBvbi1kZW1hbmQgcmVhZGluZyBvZiB0aGUgYXBwcm9wcmlhdGUgLmdpdG1vZHVsZXMgZnJvbQorICogcmV2aXNpb25zLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqY29uZmlnX2Zyb20oc3RydWN0IHN1Ym1vZHVsZV9jYWNoZSAqY2FjaGUsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9zaGExLCBjb25zdCBjaGFyICprZXksCisJCWVudW0gbG9va3VwX3R5cGUgbG9va3VwX3R5cGUpCit7CisJc3RydWN0IHN0cmJ1ZiByZXYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBsb25nIGNvbmZpZ19zaXplOworCWNoYXIgKmNvbmZpZzsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGUgPSBOVUxMOworCXN0cnVjdCBwYXJzZV9jb25maWdfcGFyYW1ldGVyIHBhcmFtZXRlcjsKKworCS8qCisJICogSWYgYW55IHBhcmFtZXRlciBleGNlcHQgdGhlIGNhY2hlIGlzIGEgTlVMTCBwb2ludGVyIGp1c3QKKwkgKiByZXR1cm4gdGhlIGZpcnN0IHN1Ym1vZHVsZS4gQ2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlcgorCSAqIHRoZXJlIGFyZSBhbnkgc3VibW9kdWxlcyBwYXJzZWQuCisJICovCisJaWYgKCFjb21taXRfc2hhMSB8fCAha2V5KSB7CisJCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwkJc3RydWN0IHN1Ym1vZHVsZV9lbnRyeSAqZW50cnk7CisKKwkJaGFzaG1hcF9pdGVyX2luaXQoJmNhY2hlLT5mb3JfbmFtZSwgJml0ZXIpOworCQllbnRyeSA9IGhhc2htYXBfaXRlcl9uZXh0KCZpdGVyKTsKKwkJaWYgKCFlbnRyeSkKKwkJCXJldHVybiBOVUxMOworCQlyZXR1cm4gZW50cnktPmNvbmZpZzsKKwl9CisKKwlpZiAoIWdpdG1vZHVsZV9zaGExX2Zyb21fY29tbWl0KGNvbW1pdF9zaGExLCBzaGExKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzd2l0Y2ggKGxvb2t1cF90eXBlKSB7CisJY2FzZSBsb29rdXBfbmFtZToKKwkJc3VibW9kdWxlID0gY2FjaGVfbG9va3VwX25hbWUoY2FjaGUsIHNoYTEsIGtleSk7CisJCWJyZWFrOworCWNhc2UgbG9va3VwX3BhdGg6CisJCXN1Ym1vZHVsZSA9IGNhY2hlX2xvb2t1cF9wYXRoKGNhY2hlLCBzaGExLCBrZXkpOworCQlicmVhazsKKwl9CisJaWYgKHN1Ym1vZHVsZSkKKwkJcmV0dXJuIHN1Ym1vZHVsZTsKKworCWNvbmZpZyA9IHJlYWRfc2hhMV9maWxlKHNoYTEsICZ0eXBlLCAmY29uZmlnX3NpemUpOworCWlmICghY29uZmlnKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICh0eXBlICE9IE9CSl9CTE9CKSB7CisJCWZyZWUoY29uZmlnKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogZmlsbCB0aGUgc3VibW9kdWxlIGNvbmZpZyBpbnRvIHRoZSBjYWNoZSAqLworCXBhcmFtZXRlci5jYWNoZSA9IGNhY2hlOworCXBhcmFtZXRlci5jb21taXRfc2hhMSA9IGNvbW1pdF9zaGExOworCXBhcmFtZXRlci5naXRtb2R1bGVzX3NoYTEgPSBzaGExOworCXBhcmFtZXRlci5vdmVyd3JpdGUgPSAwOworCWdpdF9jb25maWdfZnJvbV9idWYocGFyc2VfY29uZmlnLCByZXYuYnVmLCBjb25maWcsIGNvbmZpZ19zaXplLAorCQkJJnBhcmFtZXRlcik7CisJZnJlZShjb25maWcpOworCisJc3dpdGNoIChsb29rdXBfdHlwZSkgeworCWNhc2UgbG9va3VwX25hbWU6CisJCXJldHVybiBjYWNoZV9sb29rdXBfbmFtZShjYWNoZSwgc2hhMSwga2V5KTsKKwljYXNlIGxvb2t1cF9wYXRoOgorCQlyZXR1cm4gY2FjaGVfbG9va3VwX3BhdGgoY2FjaGUsIHNoYTEsIGtleSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqY29uZmlnX2Zyb21fcGF0aChzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWl0X3NoYTEsIGNvbnN0IGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIGNvbmZpZ19mcm9tKGNhY2hlLCBjb21taXRfc2hhMSwgcGF0aCwgbG9va3VwX3BhdGgpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqY29uZmlnX2Zyb21fbmFtZShzdHJ1Y3Qgc3VibW9kdWxlX2NhY2hlICpjYWNoZSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWl0X3NoYTEsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIGNvbmZpZ19mcm9tKGNhY2hlLCBjb21taXRfc2hhMSwgbmFtZSwgbG9va3VwX25hbWUpOworfQorCitzdGF0aWMgdm9pZCBlbnN1cmVfY2FjaGVfaW5pdCh2b2lkKQoreworCWlmIChpc19jYWNoZV9pbml0KQorCQlyZXR1cm47CisKKwljYWNoZV9pbml0KCZjYWNoZSk7CisJaXNfY2FjaGVfaW5pdCA9IDE7Cit9CisKK2ludCBwYXJzZV9zdWJtb2R1bGVfY29uZmlnX29wdGlvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCBwYXJzZV9jb25maWdfcGFyYW1ldGVyIHBhcmFtZXRlcjsKKwlwYXJhbWV0ZXIuY2FjaGUgPSAmY2FjaGU7CisJcGFyYW1ldGVyLmNvbW1pdF9zaGExID0gTlVMTDsKKwlwYXJhbWV0ZXIuZ2l0bW9kdWxlc19zaGExID0gbnVsbF9zaGExOworCXBhcmFtZXRlci5vdmVyd3JpdGUgPSAxOworCisJZW5zdXJlX2NhY2hlX2luaXQoKTsKKwlyZXR1cm4gcGFyc2VfY29uZmlnKHZhciwgdmFsdWUsICZwYXJhbWV0ZXIpOworfQorCitjb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGVfZnJvbV9uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbW1pdF9zaGExLAorCQljb25zdCBjaGFyICpuYW1lKQoreworCWVuc3VyZV9jYWNoZV9pbml0KCk7CisJcmV0dXJuIGNvbmZpZ19mcm9tX25hbWUoJmNhY2hlLCBjb21taXRfc2hhMSwgbmFtZSk7Cit9CisKK2NvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX3BhdGgoY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWl0X3NoYTEsCisJCWNvbnN0IGNoYXIgKnBhdGgpCit7CisJZW5zdXJlX2NhY2hlX2luaXQoKTsKKwlyZXR1cm4gY29uZmlnX2Zyb21fcGF0aCgmY2FjaGUsIGNvbW1pdF9zaGExLCBwYXRoKTsKK30KKwordm9pZCBzdWJtb2R1bGVfZnJlZSh2b2lkKQoreworCWNhY2hlX2ZyZWUoJmNhY2hlKTsKKwlpc19jYWNoZV9pbml0ID0gMDsKK30KZGlmZiAtLWdpdCBhL3N1Ym1vZHVsZS1jb25maWcuaCBiL3N1Ym1vZHVsZS1jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDYxZTRlCi0tLSAvZGV2L251bGwKKysrIGIvc3VibW9kdWxlLWNvbmZpZy5oCkBAIC0wLDAgKzEsMjkgQEAKKyNpZm5kZWYgU1VCTU9EVUxFX0NPTkZJR19DQUNIRV9ICisjZGVmaW5lIFNVQk1PRFVMRV9DT05GSUdfQ0FDSEVfSAorCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorCisvKgorICogU3VibW9kdWxlIGVudHJ5IGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgY2VydGFpbiBzdWJtb2R1bGUKKyAqIGluIGEgY2VydGFpbiByZXZpc2lvbi4KKyAqLworc3RydWN0IHN1Ym1vZHVsZSB7CisJY29uc3QgY2hhciAqcGF0aDsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnVybDsKKwlpbnQgZmV0Y2hfcmVjdXJzZTsKKwljb25zdCBjaGFyICppZ25vcmU7CisJLyogdGhlIHNoYTEgYmxvYiBpZCBvZiB0aGUgcmVzcG9uc2libGUgLmdpdG1vZHVsZXMgZmlsZSAqLworCXVuc2lnbmVkIGNoYXIgZ2l0bW9kdWxlc19zaGExWzIwXTsKK307CisKK2ludCBwYXJzZV9mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXNfYXJnKGNvbnN0IGNoYXIgKm9wdCwgY29uc3QgY2hhciAqYXJnKTsKK2ludCBwYXJzZV9zdWJtb2R1bGVfY29uZmlnX29wdGlvbihjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZV9mcm9tX25hbWUoY29uc3QgdW5zaWduZWQgY2hhciAqY29tbWl0X3NoYTEsCisJCWNvbnN0IGNoYXIgKm5hbWUpOworY29uc3Qgc3RydWN0IHN1Ym1vZHVsZSAqc3VibW9kdWxlX2Zyb21fcGF0aChjb25zdCB1bnNpZ25lZCBjaGFyICpjb21taXRfc2hhMSwKKwkJY29uc3QgY2hhciAqcGF0aCk7Cit2b2lkIHN1Ym1vZHVsZV9mcmVlKHZvaWQpOworCisjZW5kaWYgLyogU1VCTU9EVUxFX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9zdWJtb2R1bGUuYyBiL3N1Ym1vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NzljZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zdWJtb2R1bGUuYwpAQCAtMCwwICsxLDEwNDYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS1jb25maWcuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImRpZmZjb3JlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorI2luY2x1ZGUgImFyZ3YtYXJyYXkuaCIKKyNpbmNsdWRlICJibG9iLmgiCisKK3N0YXRpYyBpbnQgY29uZmlnX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcyA9IFJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQ7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGNoYW5nZWRfc3VibW9kdWxlX3BhdGhzOworc3RhdGljIGludCBpbml0aWFsaXplZF9mZXRjaF9yZWZfdGlwczsKK3N0YXRpYyBzdHJ1Y3Qgc2hhMV9hcnJheSByZWZfdGlwc19iZWZvcmVfZmV0Y2g7CitzdGF0aWMgc3RydWN0IHNoYTFfYXJyYXkgcmVmX3RpcHNfYWZ0ZXJfZmV0Y2g7CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZsYWcgaXMgc2V0IGlmIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGlzIHVubWVyZ2VkLiBXZSB0aGVuCisgKiBkaXNhYmxlIHJlY3Vyc2lvbiBmb3IgYWxsIHN1Ym1vZHVsZXMgd2hlcmUgLmdpdC9jb25maWcgZG9lc24ndCBoYXZlIGEKKyAqIG1hdGNoaW5nIGNvbmZpZyBlbnRyeSBiZWNhdXNlIHdlIGNhbid0IGd1ZXNzIHdoYXQgbWlnaHQgYmUgY29uZmlndXJlZCBpbgorICogLmdpdG1vZHVsZXMgdW5sZXNzIHRoZSB1c2VyIHJlc29sdmVzIHRoZSBjb25mbGljdC4gV2hlbiBhIGNvbW1hbmQgbGluZQorICogb3B0aW9uIGlzIGdpdmVuICh3aGljaCBhbHdheXMgb3ZlcnJpZGVzIGNvbmZpZ3VyYXRpb24pIHRoaXMgZmxhZyB3aWxsIGJlCisgKiBpZ25vcmVkLgorICovCitzdGF0aWMgaW50IGdpdG1vZHVsZXNfaXNfdW5tZXJnZWQ7CisKKy8qCisgKiBUaGlzIGZsYWcgaXMgc2V0IGlmIHRoZSAuZ2l0bW9kdWxlcyBmaWxlIGhhZCB1bnN0YWdlZCBtb2RpZmljYXRpb25zIG9uCisgKiBzdGFydHVwLiBUaGlzIG11c3QgYmUgY2hlY2tlZCBiZWZvcmUgYWxsb3dpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUKKyAqIC5naXRtb2R1bGVzIGZpbGUgd2l0aCB0aGUgaW50ZW50aW9uIHRvIHN0YWdlIHRoZW0gbGF0ZXIsIGJlY2F1c2Ugd2hlbgorICogY29udGludWluZyB3ZSB3b3VsZCBzdGFnZSB0aGUgbW9kaWZpY2F0aW9ucyB0aGUgdXNlciBkaWRuJ3Qgc3RhZ2UgaGVyc2VsZgorICogdG9vLiBUaGF0IG1pZ2h0IGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uIHdoZW4gd2UgbGVhcm4gdG8gc3RhZ2UgdGhlCisgKiBjaGFuZ2VzIHdlIGRvIG91cnNlbHZlcyB3aXRob3V0IHN0YWdpbmcgYW55IHByZXZpb3VzIG1vZGlmaWNhdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQgZ2l0bW9kdWxlc19pc19tb2RpZmllZDsKKworaW50IGlzX3N0YWdpbmdfZ2l0bW9kdWxlc19vayh2b2lkKQoreworCXJldHVybiAhZ2l0bW9kdWxlc19pc19tb2RpZmllZDsKK30KKworLyoKKyAqIFRyeSB0byB1cGRhdGUgdGhlICJwYXRoIiBlbnRyeSBpbiB0aGUgInN1Ym1vZHVsZS48bmFtZT4iIHNlY3Rpb24gb2YgdGhlCisgKiAuZ2l0bW9kdWxlcyBmaWxlLiBSZXR1cm4gMCBvbmx5IGlmIGEgLmdpdG1vZHVsZXMgZmlsZSB3YXMgZm91bmQsIGEgc2VjdGlvbgorICogd2l0aCB0aGUgY29ycmVjdCBwYXRoPTxvbGRwYXRoPiBzZXR0aW5nIHdhcyBmb3VuZCBhbmQgd2UgY291bGQgdXBkYXRlIGl0LgorICovCitpbnQgdXBkYXRlX3BhdGhfaW5fZ2l0bW9kdWxlcyhjb25zdCBjaGFyICpvbGRwYXRoLCBjb25zdCBjaGFyICpuZXdwYXRoKQoreworCXN0cnVjdCBzdHJidWYgZW50cnkgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBzdHJ1Y3Qgc3VibW9kdWxlICpzdWJtb2R1bGU7CisKKwlpZiAoIWZpbGVfZXhpc3RzKCIuZ2l0bW9kdWxlcyIpKSAvKiBEbyBub3RoaW5nIHdpdGhvdXQgLmdpdG1vZHVsZXMgKi8KKwkJcmV0dXJuIC0xOworCisJaWYgKGdpdG1vZHVsZXNfaXNfdW5tZXJnZWQpCisJCWRpZShfKCJDYW5ub3QgY2hhbmdlIHVubWVyZ2VkIC5naXRtb2R1bGVzLCByZXNvbHZlIG1lcmdlIGNvbmZsaWN0cyBmaXJzdCIpKTsKKworCXN1Ym1vZHVsZSA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgobnVsbF9zaGExLCBvbGRwYXRoKTsKKwlpZiAoIXN1Ym1vZHVsZSB8fCAhc3VibW9kdWxlLT5uYW1lKSB7CisJCXdhcm5pbmcoXygiQ291bGQgbm90IGZpbmQgc2VjdGlvbiBpbiAuZ2l0bW9kdWxlcyB3aGVyZSBwYXRoPSVzIiksIG9sZHBhdGgpOworCQlyZXR1cm4gLTE7CisJfQorCXN0cmJ1Zl9hZGRzdHIoJmVudHJ5LCAic3VibW9kdWxlLiIpOworCXN0cmJ1Zl9hZGRzdHIoJmVudHJ5LCBzdWJtb2R1bGUtPm5hbWUpOworCXN0cmJ1Zl9hZGRzdHIoJmVudHJ5LCAiLnBhdGgiKTsKKwlpZiAoZ2l0X2NvbmZpZ19zZXRfaW5fZmlsZSgiLmdpdG1vZHVsZXMiLCBlbnRyeS5idWYsIG5ld3BhdGgpIDwgMCkgeworCQkvKiBNYXliZSB0aGUgdXNlciBhbHJlYWR5IGRpZCB0aGF0LCBkb24ndCBlcnJvciBvdXQgaGVyZSAqLworCQl3YXJuaW5nKF8oIkNvdWxkIG5vdCB1cGRhdGUgLmdpdG1vZHVsZXMgZW50cnkgJXMiKSwgZW50cnkuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmVudHJ5KTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfcmVsZWFzZSgmZW50cnkpOworCXJldHVybiAwOworfQorCisvKgorICogVHJ5IHRvIHJlbW92ZSB0aGUgInN1Ym1vZHVsZS48bmFtZT4iIHNlY3Rpb24gZnJvbSAuZ2l0bW9kdWxlcyB3aGVyZSB0aGUgZ2l2ZW4KKyAqIHBhdGggaXMgY29uZmlndXJlZC4gUmV0dXJuIDAgb25seSBpZiBhIC5naXRtb2R1bGVzIGZpbGUgd2FzIGZvdW5kLCBhIHNlY3Rpb24KKyAqIHdpdGggdGhlIGNvcnJlY3QgcGF0aD08cGF0aD4gc2V0dGluZyB3YXMgZm91bmQgYW5kIHdlIGNvdWxkIHJlbW92ZSBpdC4KKyAqLworaW50IHJlbW92ZV9wYXRoX2Zyb21fZ2l0bW9kdWxlcyhjb25zdCBjaGFyICpwYXRoKQoreworCXN0cnVjdCBzdHJidWYgc2VjdCA9IFNUUkJVRl9JTklUOworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZTsKKworCWlmICghZmlsZV9leGlzdHMoIi5naXRtb2R1bGVzIikpIC8qIERvIG5vdGhpbmcgd2l0aG91dCAuZ2l0bW9kdWxlcyAqLworCQlyZXR1cm4gLTE7CisKKwlpZiAoZ2l0bW9kdWxlc19pc191bm1lcmdlZCkKKwkJZGllKF8oIkNhbm5vdCBjaGFuZ2UgdW5tZXJnZWQgLmdpdG1vZHVsZXMsIHJlc29sdmUgbWVyZ2UgY29uZmxpY3RzIGZpcnN0IikpOworCisJc3VibW9kdWxlID0gc3VibW9kdWxlX2Zyb21fcGF0aChudWxsX3NoYTEsIHBhdGgpOworCWlmICghc3VibW9kdWxlIHx8ICFzdWJtb2R1bGUtPm5hbWUpIHsKKwkJd2FybmluZyhfKCJDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9JXMiKSwgcGF0aCk7CisJCXJldHVybiAtMTsKKwl9CisJc3RyYnVmX2FkZHN0cigmc2VjdCwgInN1Ym1vZHVsZS4iKTsKKwlzdHJidWZfYWRkc3RyKCZzZWN0LCBzdWJtb2R1bGUtPm5hbWUpOworCWlmIChnaXRfY29uZmlnX3JlbmFtZV9zZWN0aW9uX2luX2ZpbGUoIi5naXRtb2R1bGVzIiwgc2VjdC5idWYsIE5VTEwpIDwgMCkgeworCQkvKiBNYXliZSB0aGUgdXNlciBhbHJlYWR5IGRpZCB0aGF0LCBkb24ndCBlcnJvciBvdXQgaGVyZSAqLworCQl3YXJuaW5nKF8oIkNvdWxkIG5vdCByZW1vdmUgLmdpdG1vZHVsZXMgZW50cnkgZm9yICVzIiksIHBhdGgpOworCQlzdHJidWZfcmVsZWFzZSgmc2VjdCk7CisJCXJldHVybiAtMTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJnNlY3QpOworCXJldHVybiAwOworfQorCit2b2lkIHN0YWdlX3VwZGF0ZWRfZ2l0bW9kdWxlcyh2b2lkKQoreworCWlmIChhZGRfZmlsZV90b19jYWNoZSgiLmdpdG1vZHVsZXMiLCAwKSkKKwkJZGllKF8oInN0YWdpbmcgdXBkYXRlZCAuZ2l0bW9kdWxlcyBmYWlsZWQiKSk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3N1Ym1vZHVsZV9vZGIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG9iamVjdHNfZGlyZWN0b3J5ID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGFsdGVybmF0ZV9vYmplY3RfZGF0YWJhc2UgKmFsdF9vZGI7CisJaW50IHJldCA9IDA7CisJaW50IGFsbG9jOworCisJc3RyYnVmX2dpdF9wYXRoX3N1Ym1vZHVsZSgmb2JqZWN0c19kaXJlY3RvcnksIHBhdGgsICJvYmplY3RzLyIpOworCWlmICghaXNfZGlyZWN0b3J5KG9iamVjdHNfZGlyZWN0b3J5LmJ1ZikpIHsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZG9uZTsKKwl9CisJLyogYXZvaWQgYWRkaW5nIGl0IHR3aWNlICovCisJZm9yIChhbHRfb2RiID0gYWx0X29kYl9saXN0OyBhbHRfb2RiOyBhbHRfb2RiID0gYWx0X29kYi0+bmV4dCkKKwkJaWYgKGFsdF9vZGItPm5hbWUgLSBhbHRfb2RiLT5iYXNlID09IG9iamVjdHNfZGlyZWN0b3J5LmxlbiAmJgorCQkJCSFzdHJuY21wKGFsdF9vZGItPmJhc2UsIG9iamVjdHNfZGlyZWN0b3J5LmJ1ZiwKKwkJCQkJb2JqZWN0c19kaXJlY3RvcnkubGVuKSkKKwkJCWdvdG8gZG9uZTsKKworCWFsbG9jID0gb2JqZWN0c19kaXJlY3RvcnkubGVuICsgNDI7IC8qIGZvciAiMTIvMzQ1Li4uIiBzaGExICovCisJYWx0X29kYiA9IHhtYWxsb2Moc2l6ZW9mKCphbHRfb2RiKSArIGFsbG9jKTsKKwlhbHRfb2RiLT5uZXh0ID0gYWx0X29kYl9saXN0OworCXhzbnByaW50ZihhbHRfb2RiLT5iYXNlLCBhbGxvYywgIiVzIiwgb2JqZWN0c19kaXJlY3RvcnkuYnVmKTsKKwlhbHRfb2RiLT5uYW1lID0gYWx0X29kYi0+YmFzZSArIG9iamVjdHNfZGlyZWN0b3J5LmxlbjsKKwlhbHRfb2RiLT5uYW1lWzJdID0gJy8nOworCWFsdF9vZGItPm5hbWVbNDBdID0gJ1wwJzsKKwlhbHRfb2RiLT5uYW1lWzQxXSA9ICdcMCc7CisJYWx0X29kYl9saXN0ID0gYWx0X29kYjsKKworCS8qIGFkZCBwb3NzaWJsZSBhbHRlcm5hdGVzIGZyb20gdGhlIHN1Ym1vZHVsZSAqLworCXJlYWRfaW5mb19hbHRlcm5hdGVzKG9iamVjdHNfZGlyZWN0b3J5LmJ1ZiwgMCk7CisJcHJlcGFyZV9hbHRfb2RiKCk7Citkb25lOgorCXN0cmJ1Zl9yZWxlYXNlKCZvYmplY3RzX2RpcmVjdG9yeSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBzZXRfZGlmZm9wdF9mbGFnc19mcm9tX3N1Ym1vZHVsZV9jb25maWcoc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCwKKwkJCQkJICAgICBjb25zdCBjaGFyICpwYXRoKQoreworCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZSA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgobnVsbF9zaGExLCBwYXRoKTsKKwlpZiAoc3VibW9kdWxlKSB7CisJCWlmIChzdWJtb2R1bGUtPmlnbm9yZSkKKwkJCWhhbmRsZV9pZ25vcmVfc3VibW9kdWxlc19hcmcoZGlmZm9wdCwgc3VibW9kdWxlLT5pZ25vcmUpOworCQllbHNlIGlmIChnaXRtb2R1bGVzX2lzX3VubWVyZ2VkKQorCQkJRElGRl9PUFRfU0VUKGRpZmZvcHQsIElHTk9SRV9TVUJNT0RVTEVTKTsKKwl9Cit9CisKK2ludCBzdWJtb2R1bGVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmIChzdGFydHNfd2l0aCh2YXIsICJzdWJtb2R1bGUuIikpCisJCXJldHVybiBwYXJzZV9zdWJtb2R1bGVfY29uZmlnX29wdGlvbih2YXIsIHZhbHVlKTsKKwllbHNlIGlmICghc3RyY21wKHZhciwgImZldGNoLnJlY3Vyc2VzdWJtb2R1bGVzIikpIHsKKwkJY29uZmlnX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcyA9IHBhcnNlX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlc19hcmcodmFyLCB2YWx1ZSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBnaXRtb2R1bGVzX2NvbmZpZyh2b2lkKQoreworCWNvbnN0IGNoYXIgKndvcmtfdHJlZSA9IGdldF9naXRfd29ya190cmVlKCk7CisJaWYgKHdvcmtfdHJlZSkgeworCQlzdHJ1Y3Qgc3RyYnVmIGdpdG1vZHVsZXNfcGF0aCA9IFNUUkJVRl9JTklUOworCQlpbnQgcG9zOworCQlzdHJidWZfYWRkc3RyKCZnaXRtb2R1bGVzX3BhdGgsIHdvcmtfdHJlZSk7CisJCXN0cmJ1Zl9hZGRzdHIoJmdpdG1vZHVsZXNfcGF0aCwgIi8uZ2l0bW9kdWxlcyIpOworCQlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CisJCXBvcyA9IGNhY2hlX25hbWVfcG9zKCIuZ2l0bW9kdWxlcyIsIDExKTsKKwkJaWYgKHBvcyA8IDApIHsgLyogLmdpdG1vZHVsZXMgbm90IGZvdW5kIG9yIGlzbid0IG1lcmdlZCAqLworCQkJcG9zID0gLTEgLSBwb3M7CisJCQlpZiAoYWN0aXZlX25yID4gcG9zKSB7ICAvKiB0aGVyZSBpcyBhIC5naXRtb2R1bGVzICovCisJCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IGFjdGl2ZV9jYWNoZVtwb3NdOworCQkJCWlmIChjZV9uYW1lbGVuKGNlKSA9PSAxMSAmJgorCQkJCSAgICAhbWVtY21wKGNlLT5uYW1lLCAiLmdpdG1vZHVsZXMiLCAxMSkpCisJCQkJCWdpdG1vZHVsZXNfaXNfdW5tZXJnZWQgPSAxOworCQkJfQorCQl9IGVsc2UgaWYgKHBvcyA8IGFjdGl2ZV9ucikgeworCQkJc3RydWN0IHN0YXQgc3Q7CisJCQlpZiAobHN0YXQoIi5naXRtb2R1bGVzIiwgJnN0KSA9PSAwICYmCisJCQkgICAgY2VfbWF0Y2hfc3RhdChhY3RpdmVfY2FjaGVbcG9zXSwgJnN0LCAwKSAmIERBVEFfQ0hBTkdFRCkKKwkJCQlnaXRtb2R1bGVzX2lzX21vZGlmaWVkID0gMTsKKwkJfQorCisJCWlmICghZ2l0bW9kdWxlc19pc191bm1lcmdlZCkKKwkJCWdpdF9jb25maWdfZnJvbV9maWxlKHN1Ym1vZHVsZV9jb25maWcsIGdpdG1vZHVsZXNfcGF0aC5idWYsIE5VTEwpOworCQlzdHJidWZfcmVsZWFzZSgmZ2l0bW9kdWxlc19wYXRoKTsKKwl9Cit9CisKK3ZvaWQgaGFuZGxlX2lnbm9yZV9zdWJtb2R1bGVzX2FyZyhzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0LAorCQkJCSAgY29uc3QgY2hhciAqYXJnKQoreworCURJRkZfT1BUX0NMUihkaWZmb3B0LCBJR05PUkVfU1VCTU9EVUxFUyk7CisJRElGRl9PUFRfQ0xSKGRpZmZvcHQsIElHTk9SRV9VTlRSQUNLRURfSU5fU1VCTU9EVUxFUyk7CisJRElGRl9PUFRfQ0xSKGRpZmZvcHQsIElHTk9SRV9ESVJUWV9TVUJNT0RVTEVTKTsKKworCWlmICghc3RyY21wKGFyZywgImFsbCIpKQorCQlESUZGX09QVF9TRVQoZGlmZm9wdCwgSUdOT1JFX1NVQk1PRFVMRVMpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAidW50cmFja2VkIikpCisJCURJRkZfT1BUX1NFVChkaWZmb3B0LCBJR05PUkVfVU5UUkFDS0VEX0lOX1NVQk1PRFVMRVMpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJnLCAiZGlydHkiKSkKKwkJRElGRl9PUFRfU0VUKGRpZmZvcHQsIElHTk9SRV9ESVJUWV9TVUJNT0RVTEVTKTsKKwllbHNlIGlmIChzdHJjbXAoYXJnLCAibm9uZSIpKQorCQlkaWUoImJhZCAtLWlnbm9yZS1zdWJtb2R1bGVzIGFyZ3VtZW50OiAlcyIsIGFyZyk7Cit9CisKK3N0YXRpYyBpbnQgcHJlcGFyZV9zdWJtb2R1bGVfc3VtbWFyeShzdHJ1Y3QgcmV2X2luZm8gKnJldiwgY29uc3QgY2hhciAqcGF0aCwKKwkJc3RydWN0IGNvbW1pdCAqbGVmdCwgc3RydWN0IGNvbW1pdCAqcmlnaHQsCisJCWludCAqZmFzdF9mb3J3YXJkLCBpbnQgKmZhc3RfYmFja3dhcmQpCit7CisJc3RydWN0IGNvbW1pdF9saXN0ICptZXJnZV9iYXNlcywgKmxpc3Q7CisKKwlpbml0X3JldmlzaW9ucyhyZXYsIE5VTEwpOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCByZXYsIE5VTEwpOworCXJldi0+bGVmdF9yaWdodCA9IDE7CisJcmV2LT5maXJzdF9wYXJlbnRfb25seSA9IDE7CisJbGVmdC0+b2JqZWN0LmZsYWdzIHw9IFNZTU1FVFJJQ19MRUZUOworCWFkZF9wZW5kaW5nX29iamVjdChyZXYsICZsZWZ0LT5vYmplY3QsIHBhdGgpOworCWFkZF9wZW5kaW5nX29iamVjdChyZXYsICZyaWdodC0+b2JqZWN0LCBwYXRoKTsKKwltZXJnZV9iYXNlcyA9IGdldF9tZXJnZV9iYXNlcyhsZWZ0LCByaWdodCk7CisJaWYgKG1lcmdlX2Jhc2VzKSB7CisJCWlmIChtZXJnZV9iYXNlcy0+aXRlbSA9PSBsZWZ0KQorCQkJKmZhc3RfZm9yd2FyZCA9IDE7CisJCWVsc2UgaWYgKG1lcmdlX2Jhc2VzLT5pdGVtID09IHJpZ2h0KQorCQkJKmZhc3RfYmFja3dhcmQgPSAxOworCX0KKwlmb3IgKGxpc3QgPSBtZXJnZV9iYXNlczsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKwkJbGlzdC0+aXRlbS0+b2JqZWN0LmZsYWdzIHw9IFVOSU5URVJFU1RJTkc7CisJCWFkZF9wZW5kaW5nX29iamVjdChyZXYsICZsaXN0LT5pdGVtLT5vYmplY3QsCisJCQlzaGExX3RvX2hleChsaXN0LT5pdGVtLT5vYmplY3Quc2hhMSkpOworCX0KKwlyZXR1cm4gcHJlcGFyZV9yZXZpc2lvbl93YWxrKHJldik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N1Ym1vZHVsZV9zdW1tYXJ5KHN0cnVjdCByZXZfaW5mbyAqcmV2LCBGSUxFICpmLAorCQljb25zdCBjaGFyICpsaW5lX3ByZWZpeCwKKwkJY29uc3QgY2hhciAqZGVsLCBjb25zdCBjaGFyICphZGQsIGNvbnN0IGNoYXIgKnJlc2V0KQoreworCXN0YXRpYyBjb25zdCBjaGFyIGZvcm1hdFtdID0gIiAgJW0gJXMiOworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbihyZXYpKSkgeworCQlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCQljdHguZGF0ZV9tb2RlID0gcmV2LT5kYXRlX21vZGU7CisJCWN0eC5vdXRwdXRfZW5jb2RpbmcgPSBnZXRfbG9nX291dHB1dF9lbmNvZGluZygpOworCQlzdHJidWZfc2V0bGVuKCZzYiwgMCk7CisJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBsaW5lX3ByZWZpeCk7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFNZTU1FVFJJQ19MRUZUKSB7CisJCQlpZiAoZGVsKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBkZWwpOworCQl9CisJCWVsc2UgaWYgKGFkZCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCBhZGQpOworCQlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCBmb3JtYXQsICZzYiwgJmN0eCk7CisJCWlmIChyZXNldCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnNiLCByZXNldCk7CisJCXN0cmJ1Zl9hZGRjaCgmc2IsICdcbicpOworCQlmcHJpbnRmKGYsICIlcyIsIHNiLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3ZvaWQgc2hvd19zdWJtb2R1bGVfc3VtbWFyeShGSUxFICpmLCBjb25zdCBjaGFyICpwYXRoLAorCQljb25zdCBjaGFyICpsaW5lX3ByZWZpeCwKKwkJdW5zaWduZWQgY2hhciBvbmVbMjBdLCB1bnNpZ25lZCBjaGFyIHR3b1syMF0sCisJCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSwgY29uc3QgY2hhciAqbWV0YSwKKwkJY29uc3QgY2hhciAqZGVsLCBjb25zdCBjaGFyICphZGQsIGNvbnN0IGNoYXIgKnJlc2V0KQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IGNvbW1pdCAqbGVmdCA9IE5VTEwsICpyaWdodCA9IE5VTEw7CisJY29uc3QgY2hhciAqbWVzc2FnZSA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBmYXN0X2ZvcndhcmQgPSAwLCBmYXN0X2JhY2t3YXJkID0gMDsKKworCWlmIChpc19udWxsX3NoYTEodHdvKSkKKwkJbWVzc2FnZSA9ICIoc3VibW9kdWxlIGRlbGV0ZWQpIjsKKwllbHNlIGlmIChhZGRfc3VibW9kdWxlX29kYihwYXRoKSkKKwkJbWVzc2FnZSA9ICIobm90IGNoZWNrZWQgb3V0KSI7CisJZWxzZSBpZiAoaXNfbnVsbF9zaGExKG9uZSkpCisJCW1lc3NhZ2UgPSAiKG5ldyBzdWJtb2R1bGUpIjsKKwllbHNlIGlmICghKGxlZnQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShvbmUpKSB8fAorCQkgIShyaWdodCA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHR3bykpKQorCQltZXNzYWdlID0gIihjb21taXRzIG5vdCBwcmVzZW50KSI7CisJZWxzZSBpZiAocHJlcGFyZV9zdWJtb2R1bGVfc3VtbWFyeSgmcmV2LCBwYXRoLCBsZWZ0LCByaWdodCwKKwkJCQkJICAgJmZhc3RfZm9yd2FyZCwgJmZhc3RfYmFja3dhcmQpKQorCQltZXNzYWdlID0gIihyZXZpc2lvbiB3YWxrZXIgZmFpbGVkKSI7CisKKwlpZiAoZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX1VOVFJBQ0tFRCkKKwkJZnByaW50ZihmLCAiJXNTdWJtb2R1bGUgJXMgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnRcbiIsCisJCQlsaW5lX3ByZWZpeCwgcGF0aCk7CisJaWYgKGRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRCkKKwkJZnByaW50ZihmLCAiJXNTdWJtb2R1bGUgJXMgY29udGFpbnMgbW9kaWZpZWQgY29udGVudFxuIiwKKwkJCWxpbmVfcHJlZml4LCBwYXRoKTsKKworCWlmICghaGFzaGNtcChvbmUsIHR3bykpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuOworCX0KKworCXN0cmJ1Zl9hZGRmKCZzYiwgIiVzJXNTdWJtb2R1bGUgJXMgJXMuLiIsIGxpbmVfcHJlZml4LCBtZXRhLCBwYXRoLAorCQkJZmluZF91bmlxdWVfYWJicmV2KG9uZSwgREVGQVVMVF9BQkJSRVYpKTsKKwlpZiAoIWZhc3RfYmFja3dhcmQgJiYgIWZhc3RfZm9yd2FyZCkKKwkJc3RyYnVmX2FkZGNoKCZzYiwgJy4nKTsKKwlzdHJidWZfYWRkZigmc2IsICIlcyIsIGZpbmRfdW5pcXVlX2FiYnJldih0d28sIERFRkFVTFRfQUJCUkVWKSk7CisJaWYgKG1lc3NhZ2UpCisJCXN0cmJ1Zl9hZGRmKCZzYiwgIiAlcyVzXG4iLCBtZXNzYWdlLCByZXNldCk7CisJZWxzZQorCQlzdHJidWZfYWRkZigmc2IsICIlczolc1xuIiwgZmFzdF9iYWNrd2FyZCA/ICIgKHJld2luZCkiIDogIiIsIHJlc2V0KTsKKwlmd3JpdGUoc2IuYnVmLCBzYi5sZW4sIDEsIGYpOworCisJaWYgKCFtZXNzYWdlKSAvKiBvbmx5IE5VTEwgaWYgd2Ugc3VjY2VlZGVkIGluIHNldHRpbmcgdXAgdGhlIHdhbGsgKi8KKwkJcHJpbnRfc3VibW9kdWxlX3N1bW1hcnkoJnJldiwgZiwgbGluZV9wcmVmaXgsIGRlbCwgYWRkLCByZXNldCk7CisJaWYgKGxlZnQpCisJCWNsZWFyX2NvbW1pdF9tYXJrcyhsZWZ0LCB+MCk7CisJaWYgKHJpZ2h0KQorCQljbGVhcl9jb21taXRfbWFya3MocmlnaHQsIH4wKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3ZvaWQgc2V0X2NvbmZpZ19mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXMoaW50IHZhbHVlKQoreworCWNvbmZpZ19mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXMgPSB2YWx1ZTsKK30KKworc3RhdGljIGludCBoYXNfcmVtb3RlKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgaW50IGZsYWdzLCB2b2lkICpjYl9kYXRhKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHN1Ym1vZHVsZV9uZWVkc19wdXNoaW5nKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0pCit7CisJaWYgKGFkZF9zdWJtb2R1bGVfb2RiKHBhdGgpIHx8ICFsb29rdXBfY29tbWl0X3JlZmVyZW5jZShzaGExKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZm9yX2VhY2hfcmVtb3RlX3JlZl9zdWJtb2R1bGUocGF0aCwgaGFzX3JlbW90ZSwgTlVMTCkgPiAwKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQljb25zdCBjaGFyICphcmd2W10gPSB7InJldi1saXN0IiwgTlVMTCwgIi0tbm90IiwgIi0tcmVtb3RlcyIsICItbiIsICIxIiAsIE5VTEx9OworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgbmVlZHNfcHVzaGluZyA9IDA7CisKKwkJYXJndlsxXSA9IHNoYTFfdG9faGV4KHNoYTEpOworCQljcC5hcmd2ID0gYXJndjsKKwkJY3AuZW52ID0gbG9jYWxfcmVwb19lbnY7CisJCWNwLmdpdF9jbWQgPSAxOworCQljcC5ub19zdGRpbiA9IDE7CisJCWNwLm91dCA9IC0xOworCQljcC5kaXIgPSBwYXRoOworCQlpZiAoc3RhcnRfY29tbWFuZCgmY3ApKQorCQkJZGllKCJDb3VsZCBub3QgcnVuICdnaXQgcmV2LWxpc3QgJXMgLS1ub3QgLS1yZW1vdGVzIC1uIDEnIGNvbW1hbmQgaW4gc3VibW9kdWxlICVzIiwKKwkJCQlzaGExX3RvX2hleChzaGExKSwgcGF0aCk7CisJCWlmIChzdHJidWZfcmVhZCgmYnVmLCBjcC5vdXQsIDQxKSkKKwkJCW5lZWRzX3B1c2hpbmcgPSAxOworCQlmaW5pc2hfY29tbWFuZCgmY3ApOworCQljbG9zZShjcC5vdXQpOworCQlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwkJcmV0dXJuIG5lZWRzX3B1c2hpbmc7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxlY3Rfc3VibW9kdWxlc19mcm9tX2RpZmYoc3RydWN0IGRpZmZfcXVldWVfc3RydWN0ICpxLAorCQkJCQkgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0aW9ucywKKwkJCQkJIHZvaWQgKmRhdGEpCit7CisJaW50IGk7CisJc3RydWN0IHN0cmluZ19saXN0ICpuZWVkc19wdXNoaW5nID0gZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwID0gcS0+cXVldWVbaV07CisJCWlmICghU19JU0dJVExJTksocC0+dHdvLT5tb2RlKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3VibW9kdWxlX25lZWRzX3B1c2hpbmcocC0+dHdvLT5wYXRoLCBwLT50d28tPnNoYTEpKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KG5lZWRzX3B1c2hpbmcsIHAtPnR3by0+cGF0aCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmaW5kX3VucHVzaGVkX3N1Ym1vZHVsZV9jb21taXRzKHN0cnVjdCBjb21taXQgKmNvbW1pdCwKKwkJc3RydWN0IHN0cmluZ19saXN0ICpuZWVkc19wdXNoaW5nKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX0NBTExCQUNLOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFjayA9IGNvbGxlY3Rfc3VibW9kdWxlc19mcm9tX2RpZmY7CisJcmV2LmRpZmZvcHQuZm9ybWF0X2NhbGxiYWNrX2RhdGEgPSBuZWVkc19wdXNoaW5nOworCWRpZmZfdHJlZV9jb21iaW5lZF9tZXJnZShjb21taXQsIDEsICZyZXYpOworfQorCitpbnQgZmluZF91bnB1c2hlZF9zdWJtb2R1bGVzKHVuc2lnbmVkIGNoYXIgbmV3X3NoYTFbMjBdLAorCQljb25zdCBjaGFyICpyZW1vdGVzX25hbWUsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbmVlZHNfcHVzaGluZykKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7TlVMTCwgTlVMTCwgIi0tbm90IiwgIk5VTEwiLCBOVUxMfTsKKwlpbnQgYXJnYyA9IEFSUkFZX1NJWkUoYXJndikgLSAxOworCWNoYXIgKnNoYTFfY29weTsKKworCXN0cnVjdCBzdHJidWYgcmVtb3Rlc19hcmcgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZyZW1vdGVzX2FyZywgIi0tcmVtb3Rlcz0lcyIsIHJlbW90ZXNfbmFtZSk7CisJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJc2hhMV9jb3B5ID0geHN0cmR1cChzaGExX3RvX2hleChuZXdfc2hhMSkpOworCWFyZ3ZbMV0gPSBzaGExX2NvcHk7CisJYXJndlszXSA9IHJlbW90ZXNfYXJnLmJ1ZjsKKwlzZXR1cF9yZXZpc2lvbnMoYXJnYywgYXJndiwgJnJldiwgTlVMTCk7CisJaWYgKHByZXBhcmVfcmV2aXNpb25fd2FsaygmcmV2KSkKKwkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCisJd2hpbGUgKChjb21taXQgPSBnZXRfcmV2aXNpb24oJnJldikpICE9IE5VTEwpCisJCWZpbmRfdW5wdXNoZWRfc3VibW9kdWxlX2NvbW1pdHMoY29tbWl0LCBuZWVkc19wdXNoaW5nKTsKKworCXJlc2V0X3JldmlzaW9uX3dhbGsoKTsKKwlmcmVlKHNoYTFfY29weSk7CisJc3RyYnVmX3JlbGVhc2UoJnJlbW90ZXNfYXJnKTsKKworCXJldHVybiBuZWVkc19wdXNoaW5nLT5ucjsKK30KKworc3RhdGljIGludCBwdXNoX3N1Ym1vZHVsZShjb25zdCBjaGFyICpwYXRoKQoreworCWlmIChhZGRfc3VibW9kdWxlX29kYihwYXRoKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoZm9yX2VhY2hfcmVtb3RlX3JlZl9zdWJtb2R1bGUocGF0aCwgaGFzX3JlbW90ZSwgTlVMTCkgPiAwKSB7CisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQljb25zdCBjaGFyICphcmd2W10gPSB7InB1c2giLCBOVUxMfTsKKworCQljcC5hcmd2ID0gYXJndjsKKwkJY3AuZW52ID0gbG9jYWxfcmVwb19lbnY7CisJCWNwLmdpdF9jbWQgPSAxOworCQljcC5ub19zdGRpbiA9IDE7CisJCWNwLmRpciA9IHBhdGg7CisJCWlmIChydW5fY29tbWFuZCgmY3ApKQorCQkJcmV0dXJuIDA7CisJCWNsb3NlKGNwLm91dCk7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK2ludCBwdXNoX3VucHVzaGVkX3N1Ym1vZHVsZXModW5zaWduZWQgY2hhciBuZXdfc2hhMVsyMF0sIGNvbnN0IGNoYXIgKnJlbW90ZXNfbmFtZSkKK3sKKwlpbnQgaSwgcmV0ID0gMTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbmVlZHNfcHVzaGluZyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJaWYgKCFmaW5kX3VucHVzaGVkX3N1Ym1vZHVsZXMobmV3X3NoYTEsIHJlbW90ZXNfbmFtZSwgJm5lZWRzX3B1c2hpbmcpKQorCQlyZXR1cm4gMTsKKworCWZvciAoaSA9IDA7IGkgPCBuZWVkc19wdXNoaW5nLm5yOyBpKyspIHsKKwkJY29uc3QgY2hhciAqcGF0aCA9IG5lZWRzX3B1c2hpbmcuaXRlbXNbaV0uc3RyaW5nOworCQlmcHJpbnRmKHN0ZGVyciwgIlB1c2hpbmcgc3VibW9kdWxlICclcydcbiIsIHBhdGgpOworCQlpZiAoIXB1c2hfc3VibW9kdWxlKHBhdGgpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBwdXNoIHN1Ym1vZHVsZSAnJXMnXG4iLCBwYXRoKTsKKwkJCXJldCA9IDA7CisJCX0KKwl9CisKKwlzdHJpbmdfbGlzdF9jbGVhcigmbmVlZHNfcHVzaGluZywgMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGlzX3N1Ym1vZHVsZV9jb21taXRfcHJlc2VudChjb25zdCBjaGFyICpwYXRoLCB1bnNpZ25lZCBjaGFyIHNoYTFbMjBdKQoreworCWludCBpc19wcmVzZW50ID0gMDsKKwlpZiAoIWFkZF9zdWJtb2R1bGVfb2RiKHBhdGgpICYmIGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKHNoYTEpKSB7CisJCS8qIEV2ZW4gaWYgdGhlIHN1Ym1vZHVsZSBpcyBjaGVja2VkIG91dCBhbmQgdGhlIGNvbW1pdCBpcworCQkgKiBwcmVzZW50LCBtYWtlIHN1cmUgaXQgaXMgcmVhY2hhYmxlIGZyb20gYSByZWYuICovCisJCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCQljb25zdCBjaGFyICphcmd2W10gPSB7InJldi1saXN0IiwgIi1uIiwgIjEiLCBOVUxMLCAiLS1ub3QiLCAiLS1hbGwiLCBOVUxMfTsKKwkJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCQlhcmd2WzNdID0gc2hhMV90b19oZXgoc2hhMSk7CisJCWNwLmFyZ3YgPSBhcmd2OworCQljcC5lbnYgPSBsb2NhbF9yZXBvX2VudjsKKwkJY3AuZ2l0X2NtZCA9IDE7CisJCWNwLm5vX3N0ZGluID0gMTsKKwkJY3AuZGlyID0gcGF0aDsKKwkJaWYgKCFjYXB0dXJlX2NvbW1hbmQoJmNwLCAmYnVmLCAxMDI0KSAmJiAhYnVmLmxlbikKKwkJCWlzX3ByZXNlbnQgPSAxOworCisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKwlyZXR1cm4gaXNfcHJlc2VudDsKK30KKworc3RhdGljIHZvaWQgc3VibW9kdWxlX2NvbGxlY3RfY2hhbmdlZF9jYihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkJCSBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkJCQkgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlpZiAoIVNfSVNHSVRMSU5LKHAtPnR3by0+bW9kZSkpCisJCQljb250aW51ZTsKKworCQlpZiAoU19JU0dJVExJTksocC0+b25lLT5tb2RlKSkgeworCQkJLyogTkVFRFNXT1JLOiBXZSBzaG91bGQgaG9ub3IgdGhlIG5hbWUgY29uZmlndXJlZCBpbgorCQkJICogdGhlIC5naXRtb2R1bGVzIGZpbGUgb2YgdGhlIGNvbW1pdCB3ZSBhcmUgZXhhbWluaW5nCisJCQkgKiBoZXJlIHRvIGJlIGFibGUgdG8gY29ycmVjdGx5IGZvbGxvdyBzdWJtb2R1bGVzCisJCQkgKiBiZWluZyBtb3ZlZCBhcm91bmQuICovCisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqcGF0aDsKKwkJCXBhdGggPSB1bnNvcnRlZF9zdHJpbmdfbGlzdF9sb29rdXAoJmNoYW5nZWRfc3VibW9kdWxlX3BhdGhzLCBwLT50d28tPnBhdGgpOworCQkJaWYgKCFwYXRoICYmICFpc19zdWJtb2R1bGVfY29tbWl0X3ByZXNlbnQocC0+dHdvLT5wYXRoLCBwLT50d28tPnNoYTEpKQorCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmY2hhbmdlZF9zdWJtb2R1bGVfcGF0aHMsIHhzdHJkdXAocC0+dHdvLT5wYXRoKSk7CisJCX0gZWxzZSB7CisJCQkvKiBTdWJtb2R1bGUgaXMgbmV3IG9yIHdhcyBtb3ZlZCBoZXJlICovCisJCQkvKiBORUVEU1dPUks6IFdoZW4gdGhlIC5naXQgZGlyZWN0b3JpZXMgb2Ygc3VibW9kdWxlcworCQkJICogbGl2ZSBpbnNpZGUgdGhlIHN1cGVycHJvamVjdHMgLmdpdCBkaXJlY3Rvcnkgc29tZQorCQkJICogZGF5IHdlIHNob3VsZCBmZXRjaCBuZXcgc3VibW9kdWxlcyBkaXJlY3RseSBpbnRvCisJCQkgKiB0aGF0IGxvY2F0aW9uIHRvbyB3aGVuIGNvbmZpZyBvciBvcHRpb25zIHJlcXVlc3QKKwkJCSAqIHRoYXQgc28gdGhleSBjYW4gYmUgY2hlY2tlZCBvdXQgZnJvbSB0aGVyZS4gKi8KKwkJCWNvbnRpbnVlOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGFkZF9zaGExX3RvX2FycmF5KGNvbnN0IGNoYXIgKnJlZiwgY29uc3Qgc3RydWN0IG9iamVjdF9pZCAqb2lkLAorCQkJICAgICBpbnQgZmxhZ3MsIHZvaWQgKmRhdGEpCit7CisJc2hhMV9hcnJheV9hcHBlbmQoZGF0YSwgb2lkLT5oYXNoKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjaGVja19mb3JfbmV3X3N1Ym1vZHVsZV9jb21taXRzKHVuc2lnbmVkIGNoYXIgbmV3X3NoYTFbMjBdKQoreworCWlmICghaW5pdGlhbGl6ZWRfZmV0Y2hfcmVmX3RpcHMpIHsKKwkJZm9yX2VhY2hfcmVmKGFkZF9zaGExX3RvX2FycmF5LCAmcmVmX3RpcHNfYmVmb3JlX2ZldGNoKTsKKwkJaW5pdGlhbGl6ZWRfZmV0Y2hfcmVmX3RpcHMgPSAxOworCX0KKworCXNoYTFfYXJyYXlfYXBwZW5kKCZyZWZfdGlwc19hZnRlcl9mZXRjaCwgbmV3X3NoYTEpOworfQorCitzdGF0aWMgdm9pZCBhZGRfc2hhMV90b19hcmd2KGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0sIHZvaWQgKmRhdGEpCit7CisJYXJndl9hcnJheV9wdXNoKGRhdGEsIHNoYTFfdG9faGV4KHNoYTEpKTsKK30KKworc3RhdGljIHZvaWQgY2FsY3VsYXRlX2NoYW5nZWRfc3VibW9kdWxlX3BhdGhzKHZvaWQpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJc3RydWN0IGFyZ3ZfYXJyYXkgYXJndiA9IEFSR1ZfQVJSQVlfSU5JVDsKKworCS8qIE5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIG5vIHN1Ym1vZHVsZXMgY29uZmlndXJlZCAqLworCWlmICghc3VibW9kdWxlX2Zyb21fcGF0aChOVUxMLCBOVUxMKSkKKwkJcmV0dXJuOworCisJaW5pdF9yZXZpc2lvbnMoJnJldiwgTlVMTCk7CisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiLS0iKTsgLyogYXJndlswXSBwcm9ncmFtIG5hbWUgKi8KKwlzaGExX2FycmF5X2Zvcl9lYWNoX3VuaXF1ZSgmcmVmX3RpcHNfYWZ0ZXJfZmV0Y2gsCisJCQkJICAgYWRkX3NoYTFfdG9fYXJndiwgJmFyZ3YpOworCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgIi0tbm90Iik7CisJc2hhMV9hcnJheV9mb3JfZWFjaF91bmlxdWUoJnJlZl90aXBzX2JlZm9yZV9mZXRjaCwKKwkJCQkgICBhZGRfc2hhMV90b19hcmd2LCAmYXJndik7CisJc2V0dXBfcmV2aXNpb25zKGFyZ3YuYXJnYywgYXJndi5hcmd2LCAmcmV2LCBOVUxMKTsKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXYpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisKKwkvKgorCSAqIENvbGxlY3QgYWxsIHN1Ym1vZHVsZXMgKHdoZXRoZXIgY2hlY2tlZCBvdXQgb3Igbm90KSBmb3Igd2hpY2ggbmV3CisJICogY29tbWl0cyBoYXZlIGJlZW4gcmVjb3JkZWQgdXBzdHJlYW0gaW4gImNoYW5nZWRfc3VibW9kdWxlX3BhdGhzIi4KKwkgKi8KKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2KSkpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnQgPSBjb21taXQtPnBhcmVudHM7CisJCXdoaWxlIChwYXJlbnQpIHsKKwkJCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRzOworCQkJZGlmZl9zZXR1cCgmZGlmZl9vcHRzKTsKKwkJCURJRkZfT1BUX1NFVCgmZGlmZl9vcHRzLCBSRUNVUlNJVkUpOworCQkJZGlmZl9vcHRzLm91dHB1dF9mb3JtYXQgfD0gRElGRl9GT1JNQVRfQ0FMTEJBQ0s7CisJCQlkaWZmX29wdHMuZm9ybWF0X2NhbGxiYWNrID0gc3VibW9kdWxlX2NvbGxlY3RfY2hhbmdlZF9jYjsKKwkJCWRpZmZfc2V0dXBfZG9uZSgmZGlmZl9vcHRzKTsKKwkJCWRpZmZfdHJlZV9zaGExKHBhcmVudC0+aXRlbS0+b2JqZWN0LnNoYTEsIGNvbW1pdC0+b2JqZWN0LnNoYTEsICIiLCAmZGlmZl9vcHRzKTsKKwkJCWRpZmZjb3JlX3N0ZCgmZGlmZl9vcHRzKTsKKwkJCWRpZmZfZmx1c2goJmRpZmZfb3B0cyk7CisJCQlwYXJlbnQgPSBwYXJlbnQtPm5leHQ7CisJCX0KKwl9CisKKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKKwlzaGExX2FycmF5X2NsZWFyKCZyZWZfdGlwc19iZWZvcmVfZmV0Y2gpOworCXNoYTFfYXJyYXlfY2xlYXIoJnJlZl90aXBzX2FmdGVyX2ZldGNoKTsKKwlpbml0aWFsaXplZF9mZXRjaF9yZWZfdGlwcyA9IDA7Cit9CisKK2ludCBmZXRjaF9wb3B1bGF0ZWRfc3VibW9kdWxlcyhjb25zdCBzdHJ1Y3QgYXJndl9hcnJheSAqb3B0aW9ucywKKwkJCSAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsIGludCBjb21tYW5kX2xpbmVfb3B0aW9uLAorCQkJICAgICAgIGludCBxdWlldCkKK3sKKwlpbnQgaSwgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3QgYXJndl9hcnJheSBhcmd2ID0gQVJHVl9BUlJBWV9JTklUOworCWNvbnN0IGNoYXIgKndvcmtfdHJlZSA9IGdldF9naXRfd29ya190cmVlKCk7CisJaWYgKCF3b3JrX3RyZWUpCisJCWdvdG8gb3V0OworCisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZSgiaW5kZXggZmlsZSBjb3JydXB0Iik7CisKKwlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICJmZXRjaCIpOworCWZvciAoaSA9IDA7IGkgPCBvcHRpb25zLT5hcmdjOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgb3B0aW9ucy0+YXJndltpXSk7CisJYXJndl9hcnJheV9wdXNoKCZhcmd2LCAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMtZGVmYXVsdCIpOworCS8qIGRlZmF1bHQgdmFsdWUsICItLXN1Ym1vZHVsZS1wcmVmaXgiIGFuZCBpdHMgdmFsdWUgYXJlIGFkZGVkIGxhdGVyICovCisKKwljcC5lbnYgPSBsb2NhbF9yZXBvX2VudjsKKwljcC5naXRfY21kID0gMTsKKwljcC5ub19zdGRpbiA9IDE7CisKKwljYWxjdWxhdGVfY2hhbmdlZF9zdWJtb2R1bGVfcGF0aHMoKTsKKworCWZvciAoaSA9IDA7IGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyYnVmIHN1Ym1vZHVsZV9wYXRoID0gU1RSQlVGX0lOSVQ7CisJCXN0cnVjdCBzdHJidWYgc3VibW9kdWxlX2dpdF9kaXIgPSBTVFJCVUZfSU5JVDsKKwkJc3RydWN0IHN0cmJ1ZiBzdWJtb2R1bGVfcHJlZml4ID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBhY3RpdmVfY2FjaGVbaV07CisJCWNvbnN0IGNoYXIgKmdpdF9kaXIsICpkZWZhdWx0X2FyZ3Y7CisJCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZTsKKworCQlpZiAoIVNfSVNHSVRMSU5LKGNlLT5jZV9tb2RlKSkKKwkJCWNvbnRpbnVlOworCisJCXN1Ym1vZHVsZSA9IHN1Ym1vZHVsZV9mcm9tX3BhdGgobnVsbF9zaGExLCBjZS0+bmFtZSk7CisJCWlmICghc3VibW9kdWxlKQorCQkJc3VibW9kdWxlID0gc3VibW9kdWxlX2Zyb21fbmFtZShudWxsX3NoYTEsIGNlLT5uYW1lKTsKKworCQlkZWZhdWx0X2FyZ3YgPSAieWVzIjsKKwkJaWYgKGNvbW1hbmRfbGluZV9vcHRpb24gPT0gUkVDVVJTRV9TVUJNT0RVTEVTX0RFRkFVTFQpIHsKKwkJCWlmIChzdWJtb2R1bGUgJiYKKwkJCSAgICBzdWJtb2R1bGUtPmZldGNoX3JlY3Vyc2UgIT0KKwkJCQkJCVJFQ1VSU0VfU1VCTU9EVUxFU19OT05FKSB7CisJCQkJaWYgKHN1Ym1vZHVsZS0+ZmV0Y2hfcmVjdXJzZSA9PQorCQkJCQkJUkVDVVJTRV9TVUJNT0RVTEVTX09GRikKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHN1Ym1vZHVsZS0+ZmV0Y2hfcmVjdXJzZSA9PQorCQkJCQkJUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCkgeworCQkJCQlpZiAoIXVuc29ydGVkX3N0cmluZ19saXN0X2xvb2t1cCgmY2hhbmdlZF9zdWJtb2R1bGVfcGF0aHMsIGNlLT5uYW1lKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlkZWZhdWx0X2FyZ3YgPSAib24tZGVtYW5kIjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmICgoY29uZmlnX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT0ZGKSB8fAorCQkJCSAgICBnaXRtb2R1bGVzX2lzX3VubWVyZ2VkKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoY29uZmlnX2ZldGNoX3JlY3Vyc2Vfc3VibW9kdWxlcyA9PSBSRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EKSB7CisJCQkJCWlmICghdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKCZjaGFuZ2VkX3N1Ym1vZHVsZV9wYXRocywgY2UtPm5hbWUpKQorCQkJCQkJY29udGludWU7CisJCQkJCWRlZmF1bHRfYXJndiA9ICJvbi1kZW1hbmQiOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChjb21tYW5kX2xpbmVfb3B0aW9uID09IFJFQ1VSU0VfU1VCTU9EVUxFU19PTl9ERU1BTkQpIHsKKwkJCWlmICghdW5zb3J0ZWRfc3RyaW5nX2xpc3RfbG9va3VwKCZjaGFuZ2VkX3N1Ym1vZHVsZV9wYXRocywgY2UtPm5hbWUpKQorCQkJCWNvbnRpbnVlOworCQkJZGVmYXVsdF9hcmd2ID0gIm9uLWRlbWFuZCI7CisJCX0KKworCQlzdHJidWZfYWRkZigmc3VibW9kdWxlX3BhdGgsICIlcy8lcyIsIHdvcmtfdHJlZSwgY2UtPm5hbWUpOworCQlzdHJidWZfYWRkZigmc3VibW9kdWxlX2dpdF9kaXIsICIlcy8uZ2l0Iiwgc3VibW9kdWxlX3BhdGguYnVmKTsKKwkJc3RyYnVmX2FkZGYoJnN1Ym1vZHVsZV9wcmVmaXgsICIlcyVzLyIsIHByZWZpeCwgY2UtPm5hbWUpOworCQlnaXRfZGlyID0gcmVhZF9naXRmaWxlKHN1Ym1vZHVsZV9naXRfZGlyLmJ1Zik7CisJCWlmICghZ2l0X2RpcikKKwkJCWdpdF9kaXIgPSBzdWJtb2R1bGVfZ2l0X2Rpci5idWY7CisJCWlmIChpc19kaXJlY3RvcnkoZ2l0X2RpcikpIHsKKwkJCWlmICghcXVpZXQpCisJCQkJcHJpbnRmKCJGZXRjaGluZyBzdWJtb2R1bGUgJXMlc1xuIiwgcHJlZml4LCBjZS0+bmFtZSk7CisJCQljcC5kaXIgPSBzdWJtb2R1bGVfcGF0aC5idWY7CisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3YsIGRlZmF1bHRfYXJndik7CisJCQlhcmd2X2FycmF5X3B1c2goJmFyZ3YsICItLXN1Ym1vZHVsZS1wcmVmaXgiKTsKKwkJCWFyZ3ZfYXJyYXlfcHVzaCgmYXJndiwgc3VibW9kdWxlX3ByZWZpeC5idWYpOworCQkJY3AuYXJndiA9IGFyZ3YuYXJndjsKKwkJCWlmIChydW5fY29tbWFuZCgmY3ApKQorCQkJCXJlc3VsdCA9IDE7CisJCQlhcmd2X2FycmF5X3BvcCgmYXJndik7CisJCQlhcmd2X2FycmF5X3BvcCgmYXJndik7CisJCQlhcmd2X2FycmF5X3BvcCgmYXJndik7CisJCX0KKwkJc3RyYnVmX3JlbGVhc2UoJnN1Ym1vZHVsZV9wYXRoKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnN1Ym1vZHVsZV9naXRfZGlyKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnN1Ym1vZHVsZV9wcmVmaXgpOworCX0KKwlhcmd2X2FycmF5X2NsZWFyKCZhcmd2KTsKK291dDoKKwlzdHJpbmdfbGlzdF9jbGVhcigmY2hhbmdlZF9zdWJtb2R1bGVfcGF0aHMsIDEpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIGlzX3N1Ym1vZHVsZV9tb2RpZmllZChjb25zdCBjaGFyICpwYXRoLCBpbnQgaWdub3JlX3VudHJhY2tlZCkKK3sKKwlzc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7CisJCSJzdGF0dXMiLAorCQkiLS1wb3JjZWxhaW4iLAorCQlOVUxMLAorCQlOVUxMLAorCX07CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwl1bnNpZ25lZCBkaXJ0eV9zdWJtb2R1bGUgPSAwOworCWNvbnN0IGNoYXIgKmxpbmUsICpuZXh0X2xpbmU7CisJY29uc3QgY2hhciAqZ2l0X2RpcjsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICIlcy8uZ2l0IiwgcGF0aCk7CisJZ2l0X2RpciA9IHJlYWRfZ2l0ZmlsZShidWYuYnVmKTsKKwlpZiAoIWdpdF9kaXIpCisJCWdpdF9kaXIgPSBidWYuYnVmOworCWlmICghaXNfZGlyZWN0b3J5KGdpdF9kaXIpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQkvKiBUaGUgc3VibW9kdWxlIGlzIG5vdCBjaGVja2VkIG91dCwgc28gaXQgaXMgbm90IG1vZGlmaWVkICovCisJCXJldHVybiAwOworCisJfQorCXN0cmJ1Zl9yZXNldCgmYnVmKTsKKworCWlmIChpZ25vcmVfdW50cmFja2VkKQorCQlhcmd2WzJdID0gIi11bm8iOworCisJY3AuYXJndiA9IGFyZ3Y7CisJY3AuZW52ID0gbG9jYWxfcmVwb19lbnY7CisJY3AuZ2l0X2NtZCA9IDE7CisJY3Aubm9fc3RkaW4gPSAxOworCWNwLm91dCA9IC0xOworCWNwLmRpciA9IHBhdGg7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNwKSkKKwkJZGllKCJDb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzIC0tcG9yY2VsYWluJyBpbiBzdWJtb2R1bGUgJXMiLCBwYXRoKTsKKworCWxlbiA9IHN0cmJ1Zl9yZWFkKCZidWYsIGNwLm91dCwgMTAyNCk7CisJbGluZSA9IGJ1Zi5idWY7CisJd2hpbGUgKGxlbiA+IDIpIHsKKwkJaWYgKChsaW5lWzBdID09ICc/JykgJiYgKGxpbmVbMV0gPT0gJz8nKSkgeworCQkJZGlydHlfc3VibW9kdWxlIHw9IERJUlRZX1NVQk1PRFVMRV9VTlRSQUNLRUQ7CisJCQlpZiAoZGlydHlfc3VibW9kdWxlICYgRElSVFlfU1VCTU9EVUxFX01PRElGSUVEKQorCQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJZGlydHlfc3VibW9kdWxlIHw9IERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRDsKKwkJCWlmIChpZ25vcmVfdW50cmFja2VkIHx8CisJCQkgICAgKGRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9VTlRSQUNLRUQpKQorCQkJCWJyZWFrOworCQl9CisJCW5leHRfbGluZSA9IHN0cmNocihsaW5lLCAnXG4nKTsKKwkJaWYgKCFuZXh0X2xpbmUpCisJCQlicmVhazsKKwkJbmV4dF9saW5lKys7CisJCWxlbiAtPSAobmV4dF9saW5lIC0gbGluZSk7CisJCWxpbmUgPSBuZXh0X2xpbmU7CisJfQorCWNsb3NlKGNwLm91dCk7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNwKSkKKwkJZGllKCInZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbicgZmFpbGVkIGluIHN1Ym1vZHVsZSAlcyIsIHBhdGgpOworCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIGRpcnR5X3N1Ym1vZHVsZTsKK30KKworaW50IHN1Ym1vZHVsZV91c2VzX2dpdGZpbGUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7CisJCSJzdWJtb2R1bGUiLAorCQkiZm9yZWFjaCIsCisJCSItLXF1aWV0IiwKKwkJIi0tcmVjdXJzaXZlIiwKKwkJInRlc3QgLWYgLmdpdCIsCisJCU5VTEwsCisJfTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmdpdF9kaXI7CisKKwlzdHJidWZfYWRkZigmYnVmLCAiJXMvLmdpdCIsIHBhdGgpOworCWdpdF9kaXIgPSByZWFkX2dpdGZpbGUoYnVmLmJ1Zik7CisJaWYgKCFnaXRfZGlyKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZXR1cm4gMDsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwkvKiBOb3cgdGVzdCB0aGF0IGFsbCBuZXN0ZWQgc3VibW9kdWxlcyB1c2UgYSBnaXRmaWxlIHRvbyAqLworCWNwLmFyZ3YgPSBhcmd2OworCWNwLmVudiA9IGxvY2FsX3JlcG9fZW52OworCWNwLmdpdF9jbWQgPSAxOworCWNwLm5vX3N0ZGluID0gMTsKKwljcC5ub19zdGRlcnIgPSAxOworCWNwLm5vX3N0ZG91dCA9IDE7CisJY3AuZGlyID0gcGF0aDsKKwlpZiAocnVuX2NvbW1hbmQoJmNwKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworaW50IG9rX3RvX3JlbW92ZV9zdWJtb2R1bGUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7CisJCSJzdGF0dXMiLAorCQkiLS1wb3JjZWxhaW4iLAorCQkiLXUiLAorCQkiLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lIiwKKwkJTlVMTCwKKwl9OworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJaW50IG9rX3RvX3JlbW92ZSA9IDE7CisKKwlpZiAoIWZpbGVfZXhpc3RzKHBhdGgpIHx8IGlzX2VtcHR5X2RpcihwYXRoKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIXN1Ym1vZHVsZV91c2VzX2dpdGZpbGUocGF0aCkpCisJCXJldHVybiAwOworCisJY3AuYXJndiA9IGFyZ3Y7CisJY3AuZW52ID0gbG9jYWxfcmVwb19lbnY7CisJY3AuZ2l0X2NtZCA9IDE7CisJY3Aubm9fc3RkaW4gPSAxOworCWNwLm91dCA9IC0xOworCWNwLmRpciA9IHBhdGg7CisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNwKSkKKwkJZGllKCJDb3VsZCBub3QgcnVuICdnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC11YWxsIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZScgaW4gc3VibW9kdWxlICVzIiwgcGF0aCk7CisKKwlsZW4gPSBzdHJidWZfcmVhZCgmYnVmLCBjcC5vdXQsIDEwMjQpOworCWlmIChsZW4gPiAyKQorCQlva190b19yZW1vdmUgPSAwOworCWNsb3NlKGNwLm91dCk7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNwKSkKKwkJZGllKCInZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtdWFsbCAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUnIGZhaWxlZCBpbiBzdWJtb2R1bGUgJXMiLCBwYXRoKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiBva190b19yZW1vdmU7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9maXJzdF9tZXJnZXMoc3RydWN0IG9iamVjdF9hcnJheSAqcmVzdWx0LCBjb25zdCBjaGFyICpwYXRoLAorCQlzdHJ1Y3QgY29tbWl0ICphLCBzdHJ1Y3QgY29tbWl0ICpiKQoreworCWludCBpLCBqOworCXN0cnVjdCBvYmplY3RfYXJyYXkgbWVyZ2VzID0gT0JKRUNUX0FSUkFZX0lOSVQ7CisJc3RydWN0IGNvbW1pdCAqY29tbWl0OworCWludCBjb250YWluc19hbm90aGVyOworCisJY2hhciBtZXJnZWRfcmV2aXNpb25bNDJdOworCWNvbnN0IGNoYXIgKnJldl9hcmdzW10gPSB7ICJyZXYtbGlzdCIsICItLW1lcmdlcyIsICItLWFuY2VzdHJ5LXBhdGgiLAorCQkJCSAgICItLWFsbCIsIG1lcmdlZF9yZXZpc2lvbiwgTlVMTCB9OworCXN0cnVjdCByZXZfaW5mbyByZXZzOworCXN0cnVjdCBzZXR1cF9yZXZpc2lvbl9vcHQgcmV2X29wdHM7CisKKwltZW1zZXQocmVzdWx0LCAwLCBzaXplb2Yoc3RydWN0IG9iamVjdF9hcnJheSkpOworCW1lbXNldCgmcmV2X29wdHMsIDAsIHNpemVvZihyZXZfb3B0cykpOworCisJLyogZ2V0IGFsbCByZXZpc2lvbnMgdGhhdCBtZXJnZSBjb21taXQgYSAqLworCXNucHJpbnRmKG1lcmdlZF9yZXZpc2lvbiwgc2l6ZW9mKG1lcmdlZF9yZXZpc2lvbiksICJeJXMiLAorCQkJc2hhMV90b19oZXgoYS0+b2JqZWN0LnNoYTEpKTsKKwlpbml0X3JldmlzaW9ucygmcmV2cywgTlVMTCk7CisJcmV2X29wdHMuc3VibW9kdWxlID0gcGF0aDsKKwlzZXR1cF9yZXZpc2lvbnMoQVJSQVlfU0laRShyZXZfYXJncyktMSwgcmV2X2FyZ3MsICZyZXZzLCAmcmV2X29wdHMpOworCisJLyogc2F2ZSBhbGwgcmV2aXNpb25zIGZyb20gdGhlIGFib3ZlIGxpc3QgdGhhdCBjb250YWluIGIgKi8KKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXZzKSkKKwkJZGllKCJyZXZpc2lvbiB3YWxrIHNldHVwIGZhaWxlZCIpOworCXdoaWxlICgoY29tbWl0ID0gZ2V0X3JldmlzaW9uKCZyZXZzKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvID0gJihjb21taXQtPm9iamVjdCk7CisJCWlmIChpbl9tZXJnZV9iYXNlcyhiLCBjb21taXQpKQorCQkJYWRkX29iamVjdF9hcnJheShvLCBOVUxMLCAmbWVyZ2VzKTsKKwl9CisJcmVzZXRfcmV2aXNpb25fd2FsaygpOworCisJLyogTm93IHdlJ3ZlIGdvdCBhbGwgbWVyZ2VzIHRoYXQgY29udGFpbiBhIGFuZCBiLiBQcnVuZSBhbGwKKwkgKiBtZXJnZXMgdGhhdCBjb250YWluIGFub3RoZXIgZm91bmQgbWVyZ2UgYW5kIHNhdmUgdGhlbSBpbgorCSAqIHJlc3VsdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWVyZ2VzLm5yOyBpKyspIHsKKwkJc3RydWN0IGNvbW1pdCAqbTEgPSAoc3RydWN0IGNvbW1pdCAqKSBtZXJnZXMub2JqZWN0c1tpXS5pdGVtOworCisJCWNvbnRhaW5zX2Fub3RoZXIgPSAwOworCQlmb3IgKGogPSAwOyBqIDwgbWVyZ2VzLm5yOyBqKyspIHsKKwkJCXN0cnVjdCBjb21taXQgKm0yID0gKHN0cnVjdCBjb21taXQgKikgbWVyZ2VzLm9iamVjdHNbal0uaXRlbTsKKwkJCWlmIChpICE9IGogJiYgaW5fbWVyZ2VfYmFzZXMobTIsIG0xKSkgeworCQkJCWNvbnRhaW5zX2Fub3RoZXIgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFjb250YWluc19hbm90aGVyKQorCQkJYWRkX29iamVjdF9hcnJheShtZXJnZXMub2JqZWN0c1tpXS5pdGVtLCBOVUxMLCByZXN1bHQpOworCX0KKworCWZyZWUobWVyZ2VzLm9iamVjdHMpOworCXJldHVybiByZXN1bHQtPm5yOworfQorCitzdGF0aWMgdm9pZCBwcmludF9jb21taXQoc3RydWN0IGNvbW1pdCAqY29tbWl0KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcHJldHR5X3ByaW50X2NvbnRleHQgY3R4ID0gezB9OworCWN0eC5kYXRlX21vZGUudHlwZSA9IERBVEVfTk9STUFMOworCWZvcm1hdF9jb21taXRfbWVzc2FnZShjb21taXQsICIgJWg6ICVtICVzIiwgJnNiLCAmY3R4KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBzYi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKKyNkZWZpbmUgTUVSR0VfV0FSTklORyhwYXRoLCBtc2cpIFwKKwl3YXJuaW5nKCJGYWlsZWQgdG8gbWVyZ2Ugc3VibW9kdWxlICVzICglcykiLCBwYXRoLCBtc2cpOworCitpbnQgbWVyZ2Vfc3VibW9kdWxlKHVuc2lnbmVkIGNoYXIgcmVzdWx0WzIwXSwgY29uc3QgY2hhciAqcGF0aCwKKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYmFzZVsyMF0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgYVsyMF0sCisJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGJbMjBdLCBpbnQgc2VhcmNoKQoreworCXN0cnVjdCBjb21taXQgKmNvbW1pdF9iYXNlLCAqY29tbWl0X2EsICpjb21taXRfYjsKKwlpbnQgcGFyZW50X2NvdW50OworCXN0cnVjdCBvYmplY3RfYXJyYXkgbWVyZ2VzOworCisJaW50IGk7CisKKwkvKiBzdG9yZSBhIGluIHJlc3VsdCBpbiBjYXNlIHdlIGZhaWwgKi8KKwloYXNoY3B5KHJlc3VsdCwgYSk7CisKKwkvKiB3ZSBjYW4gbm90IGhhbmRsZSBkZWxldGlvbiBjb25mbGljdHMgKi8KKwlpZiAoaXNfbnVsbF9zaGExKGJhc2UpKQorCQlyZXR1cm4gMDsKKwlpZiAoaXNfbnVsbF9zaGExKGEpKQorCQlyZXR1cm4gMDsKKwlpZiAoaXNfbnVsbF9zaGExKGIpKQorCQlyZXR1cm4gMDsKKworCWlmIChhZGRfc3VibW9kdWxlX29kYihwYXRoKSkgeworCQlNRVJHRV9XQVJOSU5HKHBhdGgsICJub3QgY2hlY2tlZCBvdXQiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCEoY29tbWl0X2Jhc2UgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZShiYXNlKSkgfHwKKwkgICAgIShjb21taXRfYSA9IGxvb2t1cF9jb21taXRfcmVmZXJlbmNlKGEpKSB8fAorCSAgICAhKGNvbW1pdF9iID0gbG9va3VwX2NvbW1pdF9yZWZlcmVuY2UoYikpKSB7CisJCU1FUkdFX1dBUk5JTkcocGF0aCwgImNvbW1pdHMgbm90IHByZXNlbnQiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogY2hlY2sgd2hldGhlciBib3RoIGNoYW5nZXMgYXJlIGZvcndhcmQgKi8KKwlpZiAoIWluX21lcmdlX2Jhc2VzKGNvbW1pdF9iYXNlLCBjb21taXRfYSkgfHwKKwkgICAgIWluX21lcmdlX2Jhc2VzKGNvbW1pdF9iYXNlLCBjb21taXRfYikpIHsKKwkJTUVSR0VfV0FSTklORyhwYXRoLCAiY29tbWl0cyBkb24ndCBmb2xsb3cgbWVyZ2UtYmFzZSIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBDYXNlICMxOiBhIGlzIGNvbnRhaW5lZCBpbiBiIG9yIHZpY2UgdmVyc2EgKi8KKwlpZiAoaW5fbWVyZ2VfYmFzZXMoY29tbWl0X2EsIGNvbW1pdF9iKSkgeworCQloYXNoY3B5KHJlc3VsdCwgYik7CisJCXJldHVybiAxOworCX0KKwlpZiAoaW5fbWVyZ2VfYmFzZXMoY29tbWl0X2IsIGNvbW1pdF9hKSkgeworCQloYXNoY3B5KHJlc3VsdCwgYSk7CisJCXJldHVybiAxOworCX0KKworCS8qCisJICogQ2FzZSAjMjogVGhlcmUgYXJlIG9uZSBvciBtb3JlIG1lcmdlcyB0aGF0IGNvbnRhaW4gYSBhbmQgYiBpbgorCSAqIHRoZSBzdWJtb2R1bGUuIElmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHByZXNlbnQgaXQgYXMgYQorCSAqIHN1Z2dlc3Rpb24gdG8gdGhlIHVzZXIsIGJ1dCBsZWF2ZSBpdCBtYXJrZWQgdW5tZXJnZWQgc28gdGhlCisJICogdXNlciBuZWVkcyB0byBjb25maXJtIHRoZSByZXNvbHV0aW9uLgorCSAqLworCisJLyogU2tpcCB0aGUgc2VhcmNoIGlmIG1ha2VzIG5vIHNlbnNlIHRvIHRoZSBjYWxsaW5nIGNvbnRleHQuICAqLworCWlmICghc2VhcmNoKQorCQlyZXR1cm4gMDsKKworCS8qIGZpbmQgY29tbWl0IHdoaWNoIG1lcmdlcyB0aGVtICovCisJcGFyZW50X2NvdW50ID0gZmluZF9maXJzdF9tZXJnZXMoJm1lcmdlcywgcGF0aCwgY29tbWl0X2EsIGNvbW1pdF9iKTsKKwlzd2l0Y2ggKHBhcmVudF9jb3VudCkgeworCWNhc2UgMDoKKwkJTUVSR0VfV0FSTklORyhwYXRoLCAibWVyZ2UgZm9sbG93aW5nIGNvbW1pdHMgbm90IGZvdW5kIik7CisJCWJyZWFrOworCisJY2FzZSAxOgorCQlNRVJHRV9XQVJOSU5HKHBhdGgsICJub3QgZmFzdC1mb3J3YXJkIik7CisJCWZwcmludGYoc3RkZXJyLCAiRm91bmQgYSBwb3NzaWJsZSBtZXJnZSByZXNvbHV0aW9uICIKKwkJCQkiZm9yIHRoZSBzdWJtb2R1bGU6XG4iKTsKKwkJcHJpbnRfY29tbWl0KChzdHJ1Y3QgY29tbWl0ICopIG1lcmdlcy5vYmplY3RzWzBdLml0ZW0pOworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJJZiB0aGlzIGlzIGNvcnJlY3Qgc2ltcGx5IGFkZCBpdCB0byB0aGUgaW5kZXggIgorCQkJImZvciBleGFtcGxlXG4iCisJCQkiYnkgdXNpbmc6XG5cbiIKKwkJCSIgIGdpdCB1cGRhdGUtaW5kZXggLS1jYWNoZWluZm8gMTYwMDAwICVzIFwiJXNcIlxuXG4iCisJCQkid2hpY2ggd2lsbCBhY2NlcHQgdGhpcyBzdWdnZXN0aW9uLlxuIiwKKwkJCXNoYTFfdG9faGV4KG1lcmdlcy5vYmplY3RzWzBdLml0ZW0tPnNoYTEpLCBwYXRoKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlNRVJHRV9XQVJOSU5HKHBhdGgsICJtdWx0aXBsZSBtZXJnZXMgZm91bmQiKTsKKwkJZm9yIChpID0gMDsgaSA8IG1lcmdlcy5ucjsgaSsrKQorCQkJcHJpbnRfY29tbWl0KChzdHJ1Y3QgY29tbWl0ICopIG1lcmdlcy5vYmplY3RzW2ldLml0ZW0pOworCX0KKworCWZyZWUobWVyZ2VzLm9iamVjdHMpOworCXJldHVybiAwOworfQorCisvKiBVcGRhdGUgZ2l0ZmlsZSBhbmQgY29yZS53b3JrdHJlZSBzZXR0aW5nIHRvIGNvbm5lY3Qgd29yayB0cmVlIGFuZCBnaXQgZGlyICovCit2b2lkIGNvbm5lY3Rfd29ya190cmVlX2FuZF9naXRfZGlyKGNvbnN0IGNoYXIgKndvcmtfdHJlZSwgY29uc3QgY2hhciAqZ2l0X2RpcikKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGZpbGVfbmFtZSA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgcmVsX3BhdGggPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpyZWFsX3dvcmtfdHJlZSA9IHhzdHJkdXAocmVhbF9wYXRoKHdvcmtfdHJlZSkpOworCisJLyogVXBkYXRlIGdpdGZpbGUgKi8KKwlzdHJidWZfYWRkZigmZmlsZV9uYW1lLCAiJXMvLmdpdCIsIHdvcmtfdHJlZSk7CisJd3JpdGVfZmlsZShmaWxlX25hbWUuYnVmLCAiZ2l0ZGlyOiAlcyIsCisJCSAgIHJlbGF0aXZlX3BhdGgoZ2l0X2RpciwgcmVhbF93b3JrX3RyZWUsICZyZWxfcGF0aCkpOworCisJLyogVXBkYXRlIGNvcmUud29ya3RyZWUgc2V0dGluZyAqLworCXN0cmJ1Zl9yZXNldCgmZmlsZV9uYW1lKTsKKwlzdHJidWZfYWRkZigmZmlsZV9uYW1lLCAiJXMvY29uZmlnIiwgZ2l0X2Rpcik7CisJaWYgKGdpdF9jb25maWdfc2V0X2luX2ZpbGUoZmlsZV9uYW1lLmJ1ZiwgImNvcmUud29ya3RyZWUiLAorCQkJCSAgIHJlbGF0aXZlX3BhdGgocmVhbF93b3JrX3RyZWUsIGdpdF9kaXIsCisJCQkJCQkgJnJlbF9wYXRoKSkpCisJCWRpZShfKCJDb3VsZCBub3Qgc2V0IGNvcmUud29ya3RyZWUgaW4gJXMiKSwKKwkJICAgIGZpbGVfbmFtZS5idWYpOworCisJc3RyYnVmX3JlbGVhc2UoJmZpbGVfbmFtZSk7CisJc3RyYnVmX3JlbGVhc2UoJnJlbF9wYXRoKTsKKwlmcmVlKCh2b2lkICopcmVhbF93b3JrX3RyZWUpOworfQpkaWZmIC0tZ2l0IGEvc3VibW9kdWxlLmggYi9zdWJtb2R1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTA3YzNkCi0tLSAvZGV2L251bGwKKysrIGIvc3VibW9kdWxlLmgKQEAgLTAsMCArMSw0NSBAQAorI2lmbmRlZiBTVUJNT0RVTEVfSAorI2RlZmluZSBTVUJNT0RVTEVfSAorCitzdHJ1Y3QgZGlmZl9vcHRpb25zOworc3RydWN0IGFyZ3ZfYXJyYXk7CisKK2VudW0geworCVJFQ1VSU0VfU1VCTU9EVUxFU19FUlJPUiA9IC0zLAorCVJFQ1VSU0VfU1VCTU9EVUxFU19OT05FID0gLTIsCisJUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCA9IC0xLAorCVJFQ1VSU0VfU1VCTU9EVUxFU19PRkYgPSAwLAorCVJFQ1VSU0VfU1VCTU9EVUxFU19ERUZBVUxUID0gMSwKKwlSRUNVUlNFX1NVQk1PRFVMRVNfT04gPSAyCit9OworCitpbnQgaXNfc3RhZ2luZ19naXRtb2R1bGVzX29rKHZvaWQpOworaW50IHVwZGF0ZV9wYXRoX2luX2dpdG1vZHVsZXMoY29uc3QgY2hhciAqb2xkcGF0aCwgY29uc3QgY2hhciAqbmV3cGF0aCk7CitpbnQgcmVtb3ZlX3BhdGhfZnJvbV9naXRtb2R1bGVzKGNvbnN0IGNoYXIgKnBhdGgpOwordm9pZCBzdGFnZV91cGRhdGVkX2dpdG1vZHVsZXModm9pZCk7Cit2b2lkIHNldF9kaWZmb3B0X2ZsYWdzX2Zyb21fc3VibW9kdWxlX2NvbmZpZyhzdHJ1Y3QgZGlmZl9vcHRpb25zICpkaWZmb3B0LAorCQljb25zdCBjaGFyICpwYXRoKTsKK2ludCBzdWJtb2R1bGVfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKK3ZvaWQgZ2l0bW9kdWxlc19jb25maWcodm9pZCk7Cit2b2lkIGhhbmRsZV9pZ25vcmVfc3VibW9kdWxlc19hcmcoc3RydWN0IGRpZmZfb3B0aW9ucyAqZGlmZm9wdCwgY29uc3QgY2hhciAqKTsKK3ZvaWQgc2hvd19zdWJtb2R1bGVfc3VtbWFyeShGSUxFICpmLCBjb25zdCBjaGFyICpwYXRoLAorCQljb25zdCBjaGFyICpsaW5lX3ByZWZpeCwKKwkJdW5zaWduZWQgY2hhciBvbmVbMjBdLCB1bnNpZ25lZCBjaGFyIHR3b1syMF0sCisJCXVuc2lnbmVkIGRpcnR5X3N1Ym1vZHVsZSwgY29uc3QgY2hhciAqbWV0YSwKKwkJY29uc3QgY2hhciAqZGVsLCBjb25zdCBjaGFyICphZGQsIGNvbnN0IGNoYXIgKnJlc2V0KTsKK3ZvaWQgc2V0X2NvbmZpZ19mZXRjaF9yZWN1cnNlX3N1Ym1vZHVsZXMoaW50IHZhbHVlKTsKK3ZvaWQgY2hlY2tfZm9yX25ld19zdWJtb2R1bGVfY29tbWl0cyh1bnNpZ25lZCBjaGFyIG5ld19zaGExWzIwXSk7CitpbnQgZmV0Y2hfcG9wdWxhdGVkX3N1Ym1vZHVsZXMoY29uc3Qgc3RydWN0IGFyZ3ZfYXJyYXkgKm9wdGlvbnMsCisJCQkgICAgICAgY29uc3QgY2hhciAqcHJlZml4LCBpbnQgY29tbWFuZF9saW5lX29wdGlvbiwKKwkJCSAgICAgICBpbnQgcXVpZXQpOwordW5zaWduZWQgaXNfc3VibW9kdWxlX21vZGlmaWVkKGNvbnN0IGNoYXIgKnBhdGgsIGludCBpZ25vcmVfdW50cmFja2VkKTsKK2ludCBzdWJtb2R1bGVfdXNlc19naXRmaWxlKGNvbnN0IGNoYXIgKnBhdGgpOworaW50IG9rX3RvX3JlbW92ZV9zdWJtb2R1bGUoY29uc3QgY2hhciAqcGF0aCk7CitpbnQgbWVyZ2Vfc3VibW9kdWxlKHVuc2lnbmVkIGNoYXIgcmVzdWx0WzIwXSwgY29uc3QgY2hhciAqcGF0aCwgY29uc3QgdW5zaWduZWQgY2hhciBiYXNlWzIwXSwKKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgYVsyMF0sIGNvbnN0IHVuc2lnbmVkIGNoYXIgYlsyMF0sIGludCBzZWFyY2gpOworaW50IGZpbmRfdW5wdXNoZWRfc3VibW9kdWxlcyh1bnNpZ25lZCBjaGFyIG5ld19zaGExWzIwXSwgY29uc3QgY2hhciAqcmVtb3Rlc19uYW1lLAorCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKm5lZWRzX3B1c2hpbmcpOworaW50IHB1c2hfdW5wdXNoZWRfc3VibW9kdWxlcyh1bnNpZ25lZCBjaGFyIG5ld19zaGExWzIwXSwgY29uc3QgY2hhciAqcmVtb3Rlc19uYW1lKTsKK3ZvaWQgY29ubmVjdF93b3JrX3RyZWVfYW5kX2dpdF9kaXIoY29uc3QgY2hhciAqd29ya190cmVlLCBjb25zdCBjaGFyICpnaXRfZGlyKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zeW1saW5rcy5jIGIvc3ltbGlua3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjYxZThjCi0tLSAvZGV2L251bGwKKysrIGIvc3ltbGlua3MuYwpAQCAtMCwwICsxLDMyMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBpbnQgdGhyZWFkZWRfY2hlY2tfbGVhZGluZ19wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKTsKK3N0YXRpYyBpbnQgdGhyZWFkZWRfaGFzX2RpcnNfb25seV9wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgcHJlZml4X2xlbik7CisKKy8qCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggKG9uIGEgcGF0aCBjb21wb25lbnQgYmFzaXMpIG9mIHRoZSBsb25nZXN0CisgKiBjb21tb24gcHJlZml4IG1hdGNoIG9mICduYW1lX2EnIGFuZCAnbmFtZV9iJy4KKyAqLworc3RhdGljIGludCBsb25nZXN0X3BhdGhfbWF0Y2goY29uc3QgY2hhciAqbmFtZV9hLCBpbnQgbGVuX2EsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lX2IsIGludCBsZW5fYiwKKwkJCSAgICAgIGludCAqcHJldmlvdXNfc2xhc2gpCit7CisJaW50IG1heF9sZW4sIG1hdGNoX2xlbiA9IDAsIG1hdGNoX2xlbl9wcmV2ID0gMCwgaSA9IDA7CisKKwltYXhfbGVuID0gbGVuX2EgPCBsZW5fYiA/IGxlbl9hIDogbGVuX2I7CisJd2hpbGUgKGkgPCBtYXhfbGVuICYmIG5hbWVfYVtpXSA9PSBuYW1lX2JbaV0pIHsKKwkJaWYgKG5hbWVfYVtpXSA9PSAnLycpIHsKKwkJCW1hdGNoX2xlbl9wcmV2ID0gbWF0Y2hfbGVuOworCQkJbWF0Y2hfbGVuID0gaTsKKwkJfQorCQlpKys7CisJfQorCS8qCisJICogSXMgJ25hbWVfYicgYSBzdWJzdHJpbmcgb2YgJ25hbWVfYScsIHRoZSBvdGhlciB3YXkgYXJvdW5kLAorCSAqIG9yIGlzICduYW1lX2EnIGFuZCAnbmFtZV9iJyB0aGUgZXhhY3Qgc2FtZSBzdHJpbmc/CisJICovCisJaWYgKGkgPj0gbWF4X2xlbiAmJiAoKGxlbl9hID4gbGVuX2IgJiYgbmFtZV9hW2xlbl9iXSA9PSAnLycpIHx8CisJCQkgICAgIChsZW5fYSA8IGxlbl9iICYmIG5hbWVfYltsZW5fYV0gPT0gJy8nKSB8fAorCQkJICAgICAobGVuX2EgPT0gbGVuX2IpKSkgeworCQltYXRjaF9sZW5fcHJldiA9IG1hdGNoX2xlbjsKKwkJbWF0Y2hfbGVuID0gaTsKKwl9CisJKnByZXZpb3VzX3NsYXNoID0gbWF0Y2hfbGVuX3ByZXY7CisJcmV0dXJuIG1hdGNoX2xlbjsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9kZWYgZGVmYXVsdF9jYWNoZSA9IENBQ0hFX0RFRl9JTklUOworCitzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfbHN0YXRfY2FjaGUoc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUpCit7CisJc3RyYnVmX3Jlc2V0KCZjYWNoZS0+cGF0aCk7CisJY2FjaGUtPmZsYWdzID0gMDsKKwkvKgorCSAqIFRoZSB0cmFja19mbGFncyBhbmQgcHJlZml4X2xlbl9zdGF0X2Z1bmMgbWVtYmVycyBpcyBvbmx5CisJICogc2V0IGJ5IHRoZSBzYWZlZ3VhcmQgcnVsZSBpbnNpZGUgbHN0YXRfY2FjaGUoKQorCSAqLworfQorCisjZGVmaW5lIEZMX0RJUiAgICAgICgxIDw8IDApCisjZGVmaW5lIEZMX05PRU5UICAgICgxIDw8IDEpCisjZGVmaW5lIEZMX1NZTUxJTksgICgxIDw8IDIpCisjZGVmaW5lIEZMX0xTVEFURVJSICgxIDw8IDMpCisjZGVmaW5lIEZMX0VSUiAgICAgICgxIDw8IDQpCisjZGVmaW5lIEZMX0ZVTExQQVRIICgxIDw8IDUpCisKKy8qCisgKiBDaGVjayBpZiBuYW1lICduYW1lJyBvZiBsZW5ndGggJ2xlbicgaGFzIGEgc3ltbGluayBsZWFkaW5nCisgKiBjb21wb25lbnQsIG9yIGlmIHRoZSBkaXJlY3RvcnkgZXhpc3RzIGFuZCBpcyByZWFsLCBvciBub3QuCisgKgorICogVG8gc3BlZWQgdXAgdGhlIGNoZWNrLCBzb21lIGluZm9ybWF0aW9uIGlzIGFsbG93ZWQgdG8gYmUgY2FjaGVkLgorICogVGhpcyBjYW4gYmUgaW5kaWNhdGVkIGJ5IHRoZSAndHJhY2tfZmxhZ3MnIGFyZ3VtZW50LCB3aGljaCBhbHNvIGNhbgorICogYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHdlIHNob3VsZCBjaGVjayB0aGUgZnVsbCBwYXRoLgorICoKKyAqIFRoZSAncHJlZml4X2xlbl9zdGF0X2Z1bmMnIHBhcmFtZXRlciBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIGxlbmd0aAorICogb2YgdGhlIHByZWZpeCwgd2hlcmUgdGhlIGNhY2hlIHNob3VsZCB1c2UgdGhlIHN0YXQoKSBmdW5jdGlvbgorICogaW5zdGVhZCBvZiB0aGUgbHN0YXQoKSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggcGF0aCBjb21wb25lbnQuCisgKi8KK3N0YXRpYyBpbnQgbHN0YXRfY2FjaGVfbWF0Y2hsZW4oc3RydWN0IGNhY2hlX2RlZiAqY2FjaGUsCisJCQkJY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJCQlpbnQgKnJldF9mbGFncywgaW50IHRyYWNrX2ZsYWdzLAorCQkJCWludCBwcmVmaXhfbGVuX3N0YXRfZnVuYykKK3sKKwlpbnQgbWF0Y2hfbGVuLCBsYXN0X3NsYXNoLCBsYXN0X3NsYXNoX2RpciwgcHJldmlvdXNfc2xhc2g7CisJaW50IHNhdmVfZmxhZ3MsIHJldDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChjYWNoZS0+dHJhY2tfZmxhZ3MgIT0gdHJhY2tfZmxhZ3MgfHwKKwkgICAgY2FjaGUtPnByZWZpeF9sZW5fc3RhdF9mdW5jICE9IHByZWZpeF9sZW5fc3RhdF9mdW5jKSB7CisJCS8qCisJCSAqIEFzIGEgc2FmZWd1YXJkIHJ1bGUgd2UgY2xlYXIgdGhlIGNhY2hlIGlmIHRoZQorCQkgKiB2YWx1ZXMgb2YgdHJhY2tfZmxhZ3MgYW5kL29yIHByZWZpeF9sZW5fc3RhdF9mdW5jCisJCSAqIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGxhc3Qgc3VwcGxpZWQgdmFsdWVzLgorCQkgKi8KKwkJcmVzZXRfbHN0YXRfY2FjaGUoY2FjaGUpOworCQljYWNoZS0+dHJhY2tfZmxhZ3MgPSB0cmFja19mbGFnczsKKwkJY2FjaGUtPnByZWZpeF9sZW5fc3RhdF9mdW5jID0gcHJlZml4X2xlbl9zdGF0X2Z1bmM7CisJCW1hdGNoX2xlbiA9IGxhc3Rfc2xhc2ggPSAwOworCX0gZWxzZSB7CisJCS8qCisJCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgbWF0Y2ggZnJvbSB0aGUgY2FjaGUgZm9yCisJCSAqIHRoZSAyICJleGNsdWRpbmciIHBhdGggdHlwZXMuCisJCSAqLworCQltYXRjaF9sZW4gPSBsYXN0X3NsYXNoID0KKwkJCWxvbmdlc3RfcGF0aF9tYXRjaChuYW1lLCBsZW4sIGNhY2hlLT5wYXRoLmJ1ZiwKKwkJCQkJICAgY2FjaGUtPnBhdGgubGVuLCAmcHJldmlvdXNfc2xhc2gpOworCQkqcmV0X2ZsYWdzID0gY2FjaGUtPmZsYWdzICYgdHJhY2tfZmxhZ3MgJiAoRkxfTk9FTlR8RkxfU1lNTElOSyk7CisKKwkJaWYgKCEodHJhY2tfZmxhZ3MgJiBGTF9GVUxMUEFUSCkgJiYgbWF0Y2hfbGVuID09IGxlbikKKwkJCW1hdGNoX2xlbiA9IGxhc3Rfc2xhc2ggPSBwcmV2aW91c19zbGFzaDsKKworCQlpZiAoKnJldF9mbGFncyAmJiBtYXRjaF9sZW4gPT0gY2FjaGUtPnBhdGgubGVuKQorCQkJcmV0dXJuIG1hdGNoX2xlbjsKKwkJLyoKKwkJICogSWYgd2Ugbm93IGhhdmUgbWF0Y2hfbGVuID4gMCwgd2Ugd291bGQga25vdyB0aGF0CisJCSAqIHRoZSBtYXRjaGVkIHBhcnQgd2lsbCBhbHdheXMgYmUgYSBkaXJlY3RvcnkuCisJCSAqCisJCSAqIEFsc28sIGlmIHdlIGFyZSB0cmFja2luZyBkaXJlY3RvcmllcyBhbmQgJ25hbWUnIGlzCisJCSAqIGEgc3Vic3RyaW5nIG9mIHRoZSBjYWNoZSBvbiBhIHBhdGggY29tcG9uZW50IGJhc2lzLAorCQkgKiB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJKnJldF9mbGFncyA9IHRyYWNrX2ZsYWdzICYgRkxfRElSOworCQlpZiAoKnJldF9mbGFncyAmJiBsZW4gPT0gbWF0Y2hfbGVuKQorCQkJcmV0dXJuIG1hdGNoX2xlbjsKKwl9CisKKwkvKgorCSAqIE9rYXksIG5vIG1hdGNoIGZyb20gdGhlIGNhY2hlIHNvIGZhciwgc28gbm93IHdlIGhhdmUgdG8KKwkgKiBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcGF0aCBjb21wb25lbnRzLgorCSAqLworCSpyZXRfZmxhZ3MgPSBGTF9ESVI7CisJbGFzdF9zbGFzaF9kaXIgPSBsYXN0X3NsYXNoOworCWlmIChsZW4gPiBjYWNoZS0+cGF0aC5sZW4pCisJCXN0cmJ1Zl9ncm93KCZjYWNoZS0+cGF0aCwgbGVuIC0gY2FjaGUtPnBhdGgubGVuKTsKKwl3aGlsZSAobWF0Y2hfbGVuIDwgbGVuKSB7CisJCWRvIHsKKwkJCWNhY2hlLT5wYXRoLmJ1ZlttYXRjaF9sZW5dID0gbmFtZVttYXRjaF9sZW5dOworCQkJbWF0Y2hfbGVuKys7CisJCX0gd2hpbGUgKG1hdGNoX2xlbiA8IGxlbiAmJiBuYW1lW21hdGNoX2xlbl0gIT0gJy8nKTsKKwkJaWYgKG1hdGNoX2xlbiA+PSBsZW4gJiYgISh0cmFja19mbGFncyAmIEZMX0ZVTExQQVRIKSkKKwkJCWJyZWFrOworCQlsYXN0X3NsYXNoID0gbWF0Y2hfbGVuOworCQljYWNoZS0+cGF0aC5idWZbbGFzdF9zbGFzaF0gPSAnXDAnOworCisJCWlmIChsYXN0X3NsYXNoIDw9IHByZWZpeF9sZW5fc3RhdF9mdW5jKQorCQkJcmV0ID0gc3RhdChjYWNoZS0+cGF0aC5idWYsICZzdCk7CisJCWVsc2UKKwkJCXJldCA9IGxzdGF0KGNhY2hlLT5wYXRoLmJ1ZiwgJnN0KTsKKworCQlpZiAocmV0KSB7CisJCQkqcmV0X2ZsYWdzID0gRkxfTFNUQVRFUlI7CisJCQlpZiAoZXJybm8gPT0gRU5PRU5UKQorCQkJCSpyZXRfZmxhZ3MgfD0gRkxfTk9FTlQ7CisJCX0gZWxzZSBpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkgeworCQkJbGFzdF9zbGFzaF9kaXIgPSBsYXN0X3NsYXNoOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoU19JU0xOSyhzdC5zdF9tb2RlKSkgeworCQkJKnJldF9mbGFncyA9IEZMX1NZTUxJTks7CisJCX0gZWxzZSB7CisJCQkqcmV0X2ZsYWdzID0gRkxfRVJSOworCQl9CisJCWJyZWFrOworCX0KKworCS8qCisJICogQXQgdGhlIGVuZCB1cGRhdGUgdGhlIGNhY2hlLiAgTm90ZSB0aGF0IG1heCAzIGRpZmZlcmVudAorCSAqIHBhdGggdHlwZXMsIEZMX05PRU5ULCBGTF9TWU1MSU5LIGFuZCBGTF9ESVIsIGNhbiBiZSBjYWNoZWQKKwkgKiBmb3IgdGhlIG1vbWVudCEKKwkgKi8KKwlzYXZlX2ZsYWdzID0gKnJldF9mbGFncyAmIHRyYWNrX2ZsYWdzICYgKEZMX05PRU5UfEZMX1NZTUxJTkspOworCWlmIChzYXZlX2ZsYWdzICYmIGxhc3Rfc2xhc2ggPiAwKSB7CisJCWNhY2hlLT5wYXRoLmJ1ZltsYXN0X3NsYXNoXSA9ICdcMCc7CisJCWNhY2hlLT5wYXRoLmxlbiA9IGxhc3Rfc2xhc2g7CisJCWNhY2hlLT5mbGFncyA9IHNhdmVfZmxhZ3M7CisJfSBlbHNlIGlmICgodHJhY2tfZmxhZ3MgJiBGTF9ESVIpICYmIGxhc3Rfc2xhc2hfZGlyID4gMCkgeworCQkvKgorCQkgKiBXZSBoYXZlIGEgc2VwYXJhdGUgdGVzdCBmb3IgdGhlIGRpcmVjdG9yeSBjYXNlLAorCQkgKiBzaW5jZSBpdCBjb3VsZCBiZSB0aGF0IHdlIGhhdmUgZm91bmQgYSBzeW1saW5rIG9yIGEKKwkJICogbm9uLWV4aXN0aW5nIGRpcmVjdG9yeSBhbmQgdGhlIHRyYWNrX2ZsYWdzIHNheXMKKwkJICogdGhhdCB3ZSBjYW5ub3QgY2FjaGUgdGhpcyBmYWN0LCBzbyB0aGUgY2FjaGUgd291bGQKKwkJICogdGhlbiBoYXZlIGJlZW4gbGVmdCBlbXB0eSBpbiB0aGlzIGNhc2UuCisJCSAqCisJCSAqIEJ1dCBpZiB3ZSBhcmUgYWxsb3dlZCB0byB0cmFjayByZWFsIGRpcmVjdG9yaWVzLCB3ZQorCQkgKiBjYW4gc3RpbGwgY2FjaGUgdGhlIHBhdGggY29tcG9uZW50cyBiZWZvcmUgdGhlIGxhc3QKKwkJICogb25lICh0aGUgZm91bmQgc3ltbGluayBvciBub24tZXhpc3RpbmcgY29tcG9uZW50KS4KKwkJICovCisJCWNhY2hlLT5wYXRoLmJ1ZltsYXN0X3NsYXNoX2Rpcl0gPSAnXDAnOworCQljYWNoZS0+cGF0aC5sZW4gPSBsYXN0X3NsYXNoX2RpcjsKKwkJY2FjaGUtPmZsYWdzID0gRkxfRElSOworCX0gZWxzZSB7CisJCXJlc2V0X2xzdGF0X2NhY2hlKGNhY2hlKTsKKwl9CisJcmV0dXJuIG1hdGNoX2xlbjsKK30KKworc3RhdGljIGludCBsc3RhdF9jYWNoZShzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKKwkJICAgICAgIGludCB0cmFja19mbGFncywgaW50IHByZWZpeF9sZW5fc3RhdF9mdW5jKQoreworCWludCBmbGFnczsKKwkodm9pZClsc3RhdF9jYWNoZV9tYXRjaGxlbihjYWNoZSwgbmFtZSwgbGVuLCAmZmxhZ3MsIHRyYWNrX2ZsYWdzLAorCQkJcHJlZml4X2xlbl9zdGF0X2Z1bmMpOworCXJldHVybiBmbGFnczsKK30KKworI2RlZmluZSBVU0VfT05MWV9MU1RBVCAgMAorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQKKyAqLworaW50IHRocmVhZGVkX2hhc19zeW1saW5rX2xlYWRpbmdfcGF0aChzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlyZXR1cm4gbHN0YXRfY2FjaGUoY2FjaGUsIG5hbWUsIGxlbiwgRkxfU1lNTElOS3xGTF9ESVIsIFVTRV9PTkxZX0xTVEFUKSAmIEZMX1NZTUxJTks7Cit9CisKKy8qCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgcGF0aCAnbmFtZScgaGFzIGEgbGVhZGluZyBzeW1saW5rIGNvbXBvbmVudAorICovCitpbnQgaGFzX3N5bWxpbmtfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisJcmV0dXJuIHRocmVhZGVkX2hhc19zeW1saW5rX2xlYWRpbmdfcGF0aCgmZGVmYXVsdF9jYWNoZSwgbmFtZSwgbGVuKTsKK30KKworLyoKKyAqIFJldHVybiB6ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQgb3IKKyAqIGlmIHNvbWUgbGVhZGluZyBwYXRoIGNvbXBvbmVudCBkb2VzIG5vdCBleGlzdHMuCisgKgorICogUmV0dXJuIC0xIGlmIGxlYWRpbmcgcGF0aCBleGlzdHMgYW5kIGlzIGEgZGlyZWN0b3J5LgorICoKKyAqIFJldHVybiBwYXRoIGxlbmd0aCBpZiBsZWFkaW5nIHBhdGggZXhpc3RzIGFuZCBpcyBuZWl0aGVyIGEKKyAqIGRpcmVjdG9yeSBub3IgYSBzeW1saW5rLgorICovCitpbnQgY2hlY2tfbGVhZGluZ19wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCit7CisgICAgcmV0dXJuIHRocmVhZGVkX2NoZWNrX2xlYWRpbmdfcGF0aCgmZGVmYXVsdF9jYWNoZSwgbmFtZSwgbGVuKTsKK30KKworLyoKKyAqIFJldHVybiB6ZXJvIGlmIHBhdGggJ25hbWUnIGhhcyBhIGxlYWRpbmcgc3ltbGluayBjb21wb25lbnQgb3IKKyAqIGlmIHNvbWUgbGVhZGluZyBwYXRoIGNvbXBvbmVudCBkb2VzIG5vdCBleGlzdHMuCisgKgorICogUmV0dXJuIC0xIGlmIGxlYWRpbmcgcGF0aCBleGlzdHMgYW5kIGlzIGEgZGlyZWN0b3J5LgorICoKKyAqIFJldHVybiBwYXRoIGxlbmd0aCBpZiBsZWFkaW5nIHBhdGggZXhpc3RzIGFuZCBpcyBuZWl0aGVyIGEKKyAqIGRpcmVjdG9yeSBub3IgYSBzeW1saW5rLgorICovCitzdGF0aWMgaW50IHRocmVhZGVkX2NoZWNrX2xlYWRpbmdfcGF0aChzdHJ1Y3QgY2FjaGVfZGVmICpjYWNoZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKK3sKKwlpbnQgZmxhZ3M7CisJaW50IG1hdGNoX2xlbiA9IGxzdGF0X2NhY2hlX21hdGNobGVuKGNhY2hlLCBuYW1lLCBsZW4sICZmbGFncywKKwkJCSAgIEZMX1NZTUxJTkt8RkxfTk9FTlR8RkxfRElSLCBVU0VfT05MWV9MU1RBVCk7CisJaWYgKGZsYWdzICYgRkxfTk9FTlQpCisJCXJldHVybiAwOworCWVsc2UgaWYgKGZsYWdzICYgRkxfRElSKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gbWF0Y2hfbGVuOworfQorCisvKgorICogUmV0dXJuIG5vbi16ZXJvIGlmIGFsbCBwYXRoIGNvbXBvbmVudHMgb2YgJ25hbWUnIGV4aXN0cyBhcyBhCisgKiBkaXJlY3RvcnkuICBJZiBwcmVmaXhfbGVuID4gMCwgd2Ugd2lsbCB0ZXN0IHdpdGggdGhlIHN0YXQoKQorICogZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgbHN0YXQoKSBmdW5jdGlvbiBmb3IgYSBwcmVmaXggbGVuZ3RoIG9mCisgKiAncHJlZml4X2xlbicsIHRodXMgd2UgdGhlbiBhbGxvdyBmb3Igc3ltbGlua3MgaW4gdGhlIHByZWZpeCBwYXJ0IGFzCisgKiBsb25nIGFzIHRob3NlIHBvaW50cyB0byByZWFsIGV4aXN0aW5nIGRpcmVjdG9yaWVzLgorICovCitpbnQgaGFzX2RpcnNfb25seV9wYXRoKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIGludCBwcmVmaXhfbGVuKQoreworCXJldHVybiB0aHJlYWRlZF9oYXNfZGlyc19vbmx5X3BhdGgoJmRlZmF1bHRfY2FjaGUsIG5hbWUsIGxlbiwgcHJlZml4X2xlbik7Cit9CisKKy8qCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgYWxsIHBhdGggY29tcG9uZW50cyBvZiAnbmFtZScgZXhpc3RzIGFzIGEKKyAqIGRpcmVjdG9yeS4gIElmIHByZWZpeF9sZW4gPiAwLCB3ZSB3aWxsIHRlc3Qgd2l0aCB0aGUgc3RhdCgpCisgKiBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBsc3RhdCgpIGZ1bmN0aW9uIGZvciBhIHByZWZpeCBsZW5ndGggb2YKKyAqICdwcmVmaXhfbGVuJywgdGh1cyB3ZSB0aGVuIGFsbG93IGZvciBzeW1saW5rcyBpbiB0aGUgcHJlZml4IHBhcnQgYXMKKyAqIGxvbmcgYXMgdGhvc2UgcG9pbnRzIHRvIHJlYWwgZXhpc3RpbmcgZGlyZWN0b3JpZXMuCisgKi8KK3N0YXRpYyBpbnQgdGhyZWFkZWRfaGFzX2RpcnNfb25seV9wYXRoKHN0cnVjdCBjYWNoZV9kZWYgKmNhY2hlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgcHJlZml4X2xlbikKK3sKKwlyZXR1cm4gbHN0YXRfY2FjaGUoY2FjaGUsIG5hbWUsIGxlbiwKKwkJCSAgIEZMX0RJUnxGTF9GVUxMUEFUSCwgcHJlZml4X2xlbikgJgorCQlGTF9ESVI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3RyYnVmIHJlbW92YWwgPSBTVFJCVUZfSU5JVDsKKworc3RhdGljIHZvaWQgZG9fcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKGludCBuZXdfbGVuKQoreworCXdoaWxlIChyZW1vdmFsLmxlbiA+IG5ld19sZW4pIHsKKwkJcmVtb3ZhbC5idWZbcmVtb3ZhbC5sZW5dID0gJ1wwJzsKKwkJaWYgKHJtZGlyKHJlbW92YWwuYnVmKSkKKwkJCWJyZWFrOworCQlkbyB7CisJCQlyZW1vdmFsLmxlbi0tOworCQl9IHdoaWxlIChyZW1vdmFsLmxlbiA+IG5ld19sZW4gJiYKKwkJCSByZW1vdmFsLmJ1ZltyZW1vdmFsLmxlbl0gIT0gJy8nKTsKKwl9CisJcmVtb3ZhbC5sZW4gPSBuZXdfbGVuOworfQorCit2b2lkIHNjaGVkdWxlX2Rpcl9mb3JfcmVtb3ZhbChjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuKQoreworCWludCBtYXRjaF9sZW4sIGxhc3Rfc2xhc2gsIGksIHByZXZpb3VzX3NsYXNoOworCisJbWF0Y2hfbGVuID0gbGFzdF9zbGFzaCA9IGkgPQorCQlsb25nZXN0X3BhdGhfbWF0Y2gobmFtZSwgbGVuLCByZW1vdmFsLmJ1ZiwgcmVtb3ZhbC5sZW4sCisJCQkJICAgJnByZXZpb3VzX3NsYXNoKTsKKwkvKiBGaW5kIGxhc3Qgc2xhc2ggaW5zaWRlICduYW1lJyAqLworCXdoaWxlIChpIDwgbGVuKSB7CisJCWlmIChuYW1lW2ldID09ICcvJykKKwkJCWxhc3Rfc2xhc2ggPSBpOworCQlpKys7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBhcmUgYWJvdXQgdG8gZ28gZG93biB0aGUgZGlyZWN0b3J5IHRyZWUsIHdlIGNoZWNrIGlmCisJICogd2UgbXVzdCBmaXJzdCBnbyB1cHdhcmRzIHRoZSB0cmVlLCBzdWNoIHRoYXQgd2UgdGhlbiBjYW4KKwkgKiByZW1vdmUgcG9zc2libGUgZW1wdHkgZGlyZWN0b3JpZXMgYXMgd2UgZ28gdXB3YXJkcy4KKwkgKi8KKwlpZiAobWF0Y2hfbGVuIDwgbGFzdF9zbGFzaCAmJiBtYXRjaF9sZW4gPCByZW1vdmFsLmxlbikKKwkJZG9fcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKG1hdGNoX2xlbik7CisJLyoKKwkgKiBJZiB3ZSBnbyBkZWVwZXIgZG93biB0aGUgZGlyZWN0b3J5IHRyZWUsIHdlIG9ubHkgbmVlZCB0bworCSAqIHNhdmUgdGhlIG5ldyBwYXRoIGNvbXBvbmVudHMgYXMgd2UgZ28gZG93bi4KKwkgKi8KKwlpZiAobWF0Y2hfbGVuIDwgbGFzdF9zbGFzaCkKKwkJc3RyYnVmX2FkZCgmcmVtb3ZhbCwgJm5hbWVbbWF0Y2hfbGVuXSwgbGFzdF9zbGFzaCAtIG1hdGNoX2xlbik7Cit9CisKK3ZvaWQgcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKHZvaWQpCit7CisJZG9fcmVtb3ZlX3NjaGVkdWxlZF9kaXJzKDApOworfQpkaWZmIC0tZ2l0IGEvdC8uZ2l0YXR0cmlidXRlcyBiL3QvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0NDA4OAotLS0gL2Rldi9udWxsCisrKyBiL3QvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSwyIEBACit0WzAtOV1bMC05XVswLTldWzAtOV0vKiAtd2hpdGVzcGFjZQordDAxMTAvdXJsLSogYmluYXJ5CmRpZmYgLS1naXQgYS90Ly5naXRpZ25vcmUgYi90Ly5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU3MzFkYwotLS0gL2Rldi9udWxsCisrKyBiL3QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKKy90cmFzaCBkaXJlY3RvcnkqCisvdGVzdC1yZXN1bHRzCisvLnByb3ZlCmRpZmYgLS1naXQgYS90L0dpdC1TVk4vMDBjb21waWxlLnQgYi90L0dpdC1TVk4vMDBjb21waWxlLnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzkyZmVlNAotLS0gL2Rldi9udWxsCisrKyBiL3QvR2l0LVNWTi8wMGNvbXBpbGUudApAQCAtMCwwICsxLDE0IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDc7CisKK3JlcXVpcmVfb2sgJ0dpdDo6U1ZOJzsKK3JlcXVpcmVfb2sgJ0dpdDo6U1ZOOjpVdGlscyc7CityZXF1aXJlX29rICdHaXQ6OlNWTjo6UmEnOworcmVxdWlyZV9vayAnR2l0OjpTVk46OkxvZyc7CityZXF1aXJlX29rICdHaXQ6OlNWTjo6TWlncmF0aW9uJzsKK3JlcXVpcmVfb2sgJ0dpdDo6SW5kZXhJbmZvJzsKK3JlcXVpcmVfb2sgJ0dpdDo6U1ZOOjpHbG9iU3BlYyc7CmRpZmYgLS1naXQgYS90L0dpdC1TVk4vVXRpbHMvYWRkX3BhdGhfdG9fdXJsLnQgYi90L0dpdC1TVk4vVXRpbHMvYWRkX3BhdGhfdG9fdXJsLnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmZiZDg3OAotLS0gL2Rldi9udWxsCisrKyBiL3QvR2l0LVNWTi9VdGlscy9hZGRfcGF0aF90b191cmwudApAQCAtMCwwICsxLDI3IEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlICdub19wbGFuJzsKKwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdygKKwlhZGRfcGF0aF90b191cmwKKyk7CisKKyMgQSByZWZlcmVuY2UgY2Fubm90IGJlIGEgaGFzaCBrZXksIHNvIHdlIHVzZSBhbiBhcnJheS4KK215IEB0ZXN0cyA9ICgKKwlbImh0dHA6Ly94LmNvbSIsICJiYXIiXQkJCT0+ICdodHRwOi8veC5jb20vYmFyJywKKwlbImh0dHA6Ly94LmNvbSIsICIiXQkJCT0+ICdodHRwOi8veC5jb20nLAorCVsiaHR0cDovL3guY29tL2Zvby8iLCB1bmRlZl0JCT0+ICdodHRwOi8veC5jb20vZm9vLycsCisJWyJodHRwOi8veC5jb20vZm9vLyIsICIvYmFyL2Jhei8iXQk9PiAnaHR0cDovL3guY29tL2Zvby9iYXIvYmF6LycsCisJWyJodHRwOi8veC5jb20iLCAncGVyJWNlbnQnXQkJPT4gJ2h0dHA6Ly94LmNvbS9wZXIlMjVjZW50JywKKyk7CisKK3doaWxlKEB0ZXN0cykgeworCW15KCRoYXZlLCAkd2FudCkgPSBzcGxpY2UgQHRlc3RzLCAwLCAyOworCisJbXkgJGFyZ3MgPSBqb2luICIsICIsIG1hcCB7IHFxWyckXyddIH0gbWFwIHsgZGVmaW5lZCgkXykgPyAkXyA6ICd1bmRlZicgfSBAJGhhdmU7CisJbXkgJG5hbWUgPSAiYWRkX3BhdGhfdG9fdXJsKCRhcmdzKSBlcSAkd2FudCI7CisJaXMgYWRkX3BhdGhfdG9fdXJsKEAkaGF2ZSksICR3YW50LCAkbmFtZTsKK30KZGlmZiAtLWdpdCBhL3QvR2l0LVNWTi9VdGlscy9jYW5fY29tcHJlc3MudCBiL3QvR2l0LVNWTi9VdGlscy9jYW5fY29tcHJlc3MudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kN2I0OWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2Nhbl9jb21wcmVzcy50CkBAIC0wLDAgKzEsMTEgQEAKKyMhL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgVGVzdDo6TW9yZSAnbm9fcGxhbic7CisKK3VzZSBHaXQ6OlNWTjo6VXRpbHMgcXcoY2FuX2NvbXByZXNzKTsKKworIyAhISBpcyB0aGUgImNvbnZlcnQgdGhpcyB0byBib29sZWFuIiBvcGVyYXRvci4KK2lzICEhY2FuX2NvbXByZXNzKCksICEhZXZhbCB7IHJlcXVpcmUgQ29tcHJlc3M6OlpsaWIgfTsKZGlmZiAtLWdpdCBhL3QvR2l0LVNWTi9VdGlscy9jYW5vbmljYWxpemVfdXJsLnQgYi90L0dpdC1TVk4vVXRpbHMvY2Fub25pY2FsaXplX3VybC50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1Nzk1YWIKLS0tIC9kZXYvbnVsbAorKysgYi90L0dpdC1TVk4vVXRpbHMvY2Fub25pY2FsaXplX3VybC50CkBAIC0wLDAgKzEsMjYgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKworIyBUZXN0IG91ciBvd24gaG9tZSByb2xsZWQgVVJMIGNhbm9uaWNhbGl6ZXIuICBUZXN0IHRoZSBwcml2YXRlIG9uZQorIyBkaXJlY3RseSBiZWNhdXNlIHdlIGNhbid0IHByZWRpY3Qgd2hhdCB0aGUgU1ZOIEFQSSBpcyBkb2luZyB0byBkby4KKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFRlc3Q6Ok1vcmUgJ25vX3BsYW4nOworCit1c2UgR2l0OjpTVk46OlV0aWxzOworbXkgJGNhbm9uaWNhbGl6ZV91cmwgPSBcJkdpdDo6U1ZOOjpVdGlsczo6X2Nhbm9uaWNhbGl6ZV91cmxfb3Vyc2VsdmVzOworCitteSAldGVzdHMgPSAoCisJImh0dHA6Ly94LmNvbSIJCQk9PiAiaHR0cDovL3guY29tIiwKKwkiaHR0cDovL3guY29tLyIJCQk9PiAiaHR0cDovL3guY29tIiwKKwkiaHR0cDovL3guY29tL2Zvby9iYXIiCQk9PiAiaHR0cDovL3guY29tL2Zvby9iYXIiLAorCSJodHRwOi8veC5jb20vL2Zvby8vYmFyLy8iCT0+ICJodHRwOi8veC5jb20vZm9vL2JhciIsCisJImh0dHA6Ly94LmNvbS8gIC8lLyIJCT0+ICJodHRwOi8veC5jb20vJTIwJTIwLyUyNSIsCispOworCitmb3IgbXkgJGFyZyAoa2V5cyAldGVzdHMpIHsKKwlteSAkd2FudCA9ICR0ZXN0c3skYXJnfTsKKworCWlzICRjYW5vbmljYWxpemVfdXJsLT4oJGFyZyksICR3YW50LCAiY2Fub25pY2FsaXplX3VybCgnJGFyZycpID0+ICR3YW50IjsKK30KZGlmZiAtLWdpdCBhL3QvR2l0LVNWTi9VdGlscy9jb2xsYXBzZV9kb3Rkb3QudCBiL3QvR2l0LVNWTi9VdGlscy9jb2xsYXBzZV9kb3Rkb3QudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZGExY2NlCi0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2NvbGxhcHNlX2RvdGRvdC50CkBAIC0wLDAgKzEsMjMgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKKwordXNlIFRlc3Q6Ok1vcmUgJ25vX3BsYW4nOworCit1c2UgR2l0OjpTVk46OlV0aWxzOworbXkgJGNvbGxhcHNlX2RvdGRvdCA9IFwmR2l0OjpTVk46OlV0aWxzOjpfY29sbGFwc2VfZG90ZG90OworCitteSAldGVzdHMgPSAoCisJImZvby9iYXIvYmF6IgkJCT0+ICJmb28vYmFyL2JheiIsCisJIi4uIgkJCQk9PiAiLi4iLAorCSJmb28vLi4iCQkJPT4gIiIsCisJIi9mb28vYmFyLy4uLy4uL2JheiIJCT0+ICIvYmF6IiwKKwkiZGVlcGx5Ly4uLy4vZGVlcGx5L25lc3RlZCIJPT4gIi4vZGVlcGx5L25lc3RlZCIsCispOworCitmb3IgbXkgJGFyZyAoa2V5cyAldGVzdHMpIHsKKwlteSAkd2FudCA9ICR0ZXN0c3skYXJnfTsKKworCWlzICRjb2xsYXBzZV9kb3Rkb3QtPigkYXJnKSwgJHdhbnQsICJfY29sbGFwc2VfZG90ZG90KCckYXJnJykgPT4gJHdhbnQiOworfQpkaWZmIC0tZ2l0IGEvdC9HaXQtU1ZOL1V0aWxzL2ZhdGFsLnQgYi90L0dpdC1TVk4vVXRpbHMvZmF0YWwudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OWUxNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2ZhdGFsLnQKQEAgLTAsMCArMSwzNCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlICdub19wbGFuJzsKKworQkVHSU4geworCSMgT3ZlcnJpZGUgZXhpdCBhdCBCRUdJTiB0aW1lIGJlZm9yZSBHaXQ6OlNWTjo6VXRpbHMgaXMgbG9hZGVkCisJIyBzbyBpdCB3aWxsIHNlZSBvdXIgbG9jYWwgZXhpdCBsYXRlci4KKwkqQ09SRTo6R0xPQkFMOjpleGl0ID0gc3ViKDskKSB7CisJcmV0dXJuIEBfID8gQ09SRTo6ZXhpdCgkX1swXSkgOiBDT1JFOjpleGl0KCk7CisJfTsKK30KKwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdyhmYXRhbCk7CisKKyMgZmF0YWwoKQoreworCSMgQ2FwdHVyZSB0aGUgZXhpdCBjb2RlIGFuZCBwcmV2ZW50IGV4aXQuCisJbXkgJGV4aXRfc3RhdHVzOworCW5vIHdhcm5pbmdzICdyZWRlZmluZSc7CisJbG9jYWwgKkNPUkU6OkdMT0JBTDo6ZXhpdCA9IHN1YiB7ICRleGl0X3N0YXR1cyA9ICRfWzBdIHx8IDAgfTsKKworCSMgVHJhcCBmYXRhbCdzIG1lc3NhZ2UgdG8gU1RERVJSCisJbXkgJHN0ZGVycjsKKwljbG9zZSBTVERFUlI7CisJb2sgb3BlbiBTVERFUlIsICI+IiwgXCRzdGRlcnI7CisKKwlmYXRhbCAiU29tZSIsICJTdHVmZiIsICJIYXBwZW5lZCI7CisKKwlpcyAkc3RkZXJyLCAiU29tZSBTdHVmZiBIYXBwZW5lZFxuIjsKKwlpcyAkZXhpdF9zdGF0dXMsIDE7Cit9CmRpZmYgLS1naXQgYS90L0dpdC1TVk4vVXRpbHMvam9pbl9wYXRocy50IGIvdC9HaXQtU1ZOL1V0aWxzL2pvaW5fcGF0aHMudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNDQ4OGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9HaXQtU1ZOL1V0aWxzL2pvaW5fcGF0aHMudApAQCAtMCwwICsxLDMyIEBACisjIS91c3IvYmluL2VudiBwZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBUZXN0OjpNb3JlICdub19wbGFuJzsKKwordXNlIEdpdDo6U1ZOOjpVdGlscyBxdygKKwlqb2luX3BhdGhzCispOworCisjIEEgcmVmZXJlbmNlIGNhbm5vdCBiZSBhIGhhc2gga2V5LCBzbyB3ZSB1c2UgYW4gYXJyYXkuCitteSBAdGVzdHMgPSAoCisJW10JCQkJCT0+ICcnLAorCVsiL3guY29tIiwgImJhciJdCQkJPT4gJy94LmNvbS9iYXInLAorCVsieC5jb20iLCAiIl0JCQkJPT4gJ3guY29tJywKKwlbIi94LmNvbS9mb28vIiwgdW5kZWYsICJiYXIiXQkJPT4gJy94LmNvbS9mb28vYmFyJywKKwlbInguY29tL2Zvby8iLCAiL2Jhci9iYXovIl0JCT0+ICd4LmNvbS9mb28vYmFyL2Jhei8nLAorCVsiZm9vIiwgImJhciJdCQkJCT0+ICdmb28vYmFyJywKKwlbIi9mb28vYmFyIiwgImJheiIsICIvYmlmZiJdCQk9PiAnL2Zvby9iYXIvYmF6L2JpZmYnLAorCVsiIiwgdW5kZWYsICIuIl0JCQk9PiAnLicsCisJW10JCQkJCT0+ICcnLAorCispOworCit3aGlsZShAdGVzdHMpIHsKKwlteSgkaGF2ZSwgJHdhbnQpID0gc3BsaWNlIEB0ZXN0cywgMCwgMjsKKworCW15ICRhcmdzID0gam9pbiAiLCAiLCBtYXAgeyBxcVsnJF8nXSB9IG1hcCB7IGRlZmluZWQoJF8pID8gJF8gOiAndW5kZWYnIH0gQCRoYXZlOworCW15ICRuYW1lID0gImpvaW5fcGF0aHMoJGFyZ3MpIGVxICckd2FudCciOworCWlzIGpvaW5fcGF0aHMoQCRoYXZlKSwgJHdhbnQsICRuYW1lOworfQpkaWZmIC0tZ2l0IGEvdC9NYWtlZmlsZSBiL3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNiMTVlMwotLS0gL2Rldi9udWxsCisrKyBiL3QvTWFrZWZpbGUKQEAgLTAsMCArMSw5NCBAQAorIyBSdW4gdGVzdHMKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKKy1pbmNsdWRlIC4uL2NvbmZpZy5tYWsuYXV0b2dlbgorLWluY2x1ZGUgLi4vY29uZmlnLm1haworCisjR0lUX1RFU1RfT1BUUyA9IC0tdmVyYm9zZSAtLWRlYnVnCitTSEVMTF9QQVRIID89ICQoU0hFTEwpCitQRVJMX1BBVEggPz0gL3Vzci9iaW4vcGVybAorVEFSID89ICQoVEFSKQorUk0gPz0gcm0gLWYKK1BST1ZFID89IHByb3ZlCitERUZBVUxUX1RFU1RfVEFSR0VUID89IHRlc3QKK1RFU1RfTElOVCA/PSB0ZXN0LWxpbnQKKworaWZkZWYgVEVTVF9PVVRQVVRfRElSRUNUT1JZCitURVNUX1JFU1VMVFNfRElSRUNUT1JZID0gJChURVNUX09VVFBVVF9ESVJFQ1RPUlkpL3Rlc3QtcmVzdWx0cworZWxzZQorVEVTVF9SRVNVTFRTX0RJUkVDVE9SWSA9IHRlc3QtcmVzdWx0cworZW5kaWYKKworIyBTaGVsbCBxdW90ZTsKK1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQorUEVSTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChQRVJMX1BBVEgpKQorVEVTVF9SRVNVTFRTX0RJUkVDVE9SWV9TUSA9ICQoc3Vic3QgJywnXCcnLCQoVEVTVF9SRVNVTFRTX0RJUkVDVE9SWSkpCisKK1QgPSAkKHNvcnQgJCh3aWxkY2FyZCB0WzAtOV1bMC05XVswLTldWzAtOV0tKi5zaCkpCitUU1ZOID0gJChzb3J0ICQod2lsZGNhcmQgdDkxWzAtOV1bMC05XS0qLnNoKSkKK1RHSVRXRUIgPSAkKHNvcnQgJCh3aWxkY2FyZCB0OTVbMC05XVswLTldLSouc2gpKQorVEhFTFBFUlMgPSAkKHNvcnQgJChmaWx0ZXItb3V0ICQoVCksJCh3aWxkY2FyZCAqLnNoKSkpCisKK2FsbDogJChERUZBVUxUX1RFU1RfVEFSR0VUKQorCit0ZXN0OiBwcmUtY2xlYW4gJChURVNUX0xJTlQpCisJJChNQUtFKSBhZ2dyZWdhdGUtcmVzdWx0cy1hbmQtY2xlYW51cAorCitwcm92ZTogcHJlLWNsZWFuICQoVEVTVF9MSU5UKQorCUBlY2hvICIqKiogcHJvdmUgKioqIjsgJChQUk9WRSkgLS1leGVjICckKFNIRUxMX1BBVEhfU1EpJyAkKEdJVF9QUk9WRV9PUFRTKSAkKFQpIDo6ICQoR0lUX1RFU1RfT1BUUykKKwkkKE1BS0UpIGNsZWFuLWV4Y2VwdC1wcm92ZS1jYWNoZQorCiskKFQpOgorCUBlY2hvICIqKiogJEAgKioqIjsgJyQoU0hFTExfUEFUSF9TUSknICRAICQoR0lUX1RFU1RfT1BUUykKKworcHJlLWNsZWFuOgorCSQoUk0pIC1yICckKFRFU1RfUkVTVUxUU19ESVJFQ1RPUllfU1EpJworCitjbGVhbi1leGNlcHQtcHJvdmUtY2FjaGU6CisJJChSTSkgLXIgJ3RyYXNoIGRpcmVjdG9yeScuKiAnJChURVNUX1JFU1VMVFNfRElSRUNUT1JZX1NRKScKKwkkKFJNKSAtciB2YWxncmluZC9iaW4KKworY2xlYW46IGNsZWFuLWV4Y2VwdC1wcm92ZS1jYWNoZQorCSQoUk0pIC5wcm92ZQorCit0ZXN0LWxpbnQ6IHRlc3QtbGludC1kdXBsaWNhdGVzIHRlc3QtbGludC1leGVjdXRhYmxlIHRlc3QtbGludC1zaGVsbC1zeW50YXgKKwordGVzdC1saW50LWR1cGxpY2F0ZXM6CisJQGR1cHM9YGVjaG8gJChUKSB8IHRyICcgJyAnXG4nIHwgc2VkICdzLy0uKi8vJyB8IHNvcnQgfCB1bmlxIC1kYCAmJiBcCisJCXRlc3QgLXogIiQkZHVwcyIgfHwgeyBcCisJCWVjaG8gPiYyICJkdXBsaWNhdGUgdGVzdCBudW1iZXJzOiIgJCRkdXBzOyBleGl0IDE7IH0KKwordGVzdC1saW50LWV4ZWN1dGFibGU6CisJQGJhZD1gZm9yIGkgaW4gJChUKTsgZG8gdGVzdCAteCAiJCRpIiB8fCBlY2hvICQkaTsgZG9uZWAgJiYgXAorCQl0ZXN0IC16ICIkJGJhZCIgfHwgeyBcCisJCWVjaG8gPiYyICJub24tZXhlY3V0YWJsZSB0ZXN0czoiICQkYmFkOyBleGl0IDE7IH0KKwordGVzdC1saW50LXNoZWxsLXN5bnRheDoKKwlAJyQoUEVSTF9QQVRIX1NRKScgY2hlY2stbm9uLXBvcnRhYmxlLXNoZWxsLnBsICQoVCkgJChUSEVMUEVSUykKKworYWdncmVnYXRlLXJlc3VsdHMtYW5kLWNsZWFudXA6ICQoVCkKKwkkKE1BS0UpIGFnZ3JlZ2F0ZS1yZXN1bHRzCisJJChNQUtFKSBjbGVhbgorCithZ2dyZWdhdGUtcmVzdWx0czoKKwlmb3IgZiBpbiAnJChURVNUX1JFU1VMVFNfRElSRUNUT1JZX1NRKScvdCotKi5jb3VudHM7IGRvIFwKKwkJZWNobyAiJCRmIjsgXAorCWRvbmUgfCAnJChTSEVMTF9QQVRIX1NRKScgLi9hZ2dyZWdhdGUtcmVzdWx0cy5zaAorCisjIHdlIGNhbiB0ZXN0IE5PX09QVElNSVpFX0NPTU1JVFMgaW5kZXBlbmRlbnRseSBvZiBMQ19BTEwKK2Z1bGwtc3ZuLXRlc3Q6CisJJChNQUtFKSAkKFRTVk4pIEdJVF9TVk5fTk9fT1BUSU1JWkVfQ09NTUlUUz0xIExDX0FMTD1DCisJJChNQUtFKSAkKFRTVk4pIEdJVF9TVk5fTk9fT1BUSU1JWkVfQ09NTUlUUz0wIExDX0FMTD1lbl9VUy5VVEYtOAorCitnaXR3ZWItdGVzdDoKKwkkKE1BS0UpICQoVEdJVFdFQikKKwordmFsZ3JpbmQ6CisJJChNQUtFKSBHSVRfVEVTVF9PUFRTPSIkKEdJVF9URVNUX09QVFMpIC0tdmFsZ3JpbmQiCisKK3BlcmY6CisJJChNQUtFKSAtQyBwZXJmLyBhbGwKKworLlBIT05ZOiBwcmUtY2xlYW4gJChUKSBhZ2dyZWdhdGUtcmVzdWx0cyBjbGVhbiB2YWxncmluZCBwZXJmCmRpZmYgLS1naXQgYS90L1JFQURNRSBiL3QvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDM4YmMKLS0tIC9kZXYvbnVsbAorKysgYi90L1JFQURNRQpAQCAtMCwwICsxLDg3MSBAQAorQ29yZSBHSVQgVGVzdHMKKz09PT09PT09PT09PT09CisKK1RoaXMgZGlyZWN0b3J5IGhvbGRzIG1hbnkgdGVzdCBzY3JpcHRzIGZvciBjb3JlIEdJVCB0b29scy4gIFRoZQorZmlyc3QgcGFydCBvZiB0aGlzIHNob3J0IGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gcnVuIHRoZSB0ZXN0cworYW5kIHJlYWQgdGhlaXIgb3V0cHV0LgorCitXaGVuIGZpeGluZyB0aGUgdG9vbHMgb3IgYWRkaW5nIGVuaGFuY2VtZW50cywgeW91IGFyZSBzdHJvbmdseQorZW5jb3VyYWdlZCB0byBhZGQgdGVzdHMgaW4gdGhpcyBkaXJlY3RvcnkgdG8gY292ZXIgd2hhdCB5b3UgYXJlCit0cnlpbmcgdG8gZml4IG9yIGVuaGFuY2UuICBUaGUgbGF0ZXIgcGFydCBvZiB0aGlzIHNob3J0IGRvY3VtZW50CitkZXNjcmliZXMgaG93IHlvdXIgdGVzdCBzY3JpcHRzIHNob3VsZCBiZSBvcmdhbml6ZWQuCisKKworUnVubmluZyBUZXN0cworLS0tLS0tLS0tLS0tLQorCitUaGUgZWFzaWVzdCB3YXkgdG8gcnVuIHRlc3RzIGlzIHRvIHNheSAibWFrZSIuICBUaGlzIHJ1bnMgYWxsCit0aGUgdGVzdHMuCisKKyAgICAqKiogdDAwMDAtYmFzaWMuc2ggKioqCisgICAgb2sgMSAtIC5naXQvb2JqZWN0cyBzaG91bGQgYmUgZW1wdHkgYWZ0ZXIgZ2l0IGluaXQgaW4gYW4gZW1wdHkgcmVwby4KKyAgICBvayAyIC0gLmdpdC9vYmplY3RzIHNob3VsZCBoYXZlIDMgc3ViZGlyZWN0b3JpZXMuCisgICAgb2sgMyAtIHN1Y2Nlc3MgaXMgcmVwb3J0ZWQgbGlrZSB0aGlzCisgICAgLi4uCisgICAgb2sgNDMgLSB2ZXJ5IGxvbmcgbmFtZSBpbiB0aGUgaW5kZXggaGFuZGxlZCBzYW5lbHkKKyAgICAjIGZpeGVkIDEga25vd24gYnJlYWthZ2UocykKKyAgICAjIHN0aWxsIGhhdmUgMSBrbm93biBicmVha2FnZShzKQorICAgICMgcGFzc2VkIGFsbCByZW1haW5pbmcgNDIgdGVzdChzKQorICAgIDEuLjQzCisgICAgKioqIHQwMDAxLWluaXQuc2ggKioqCisgICAgb2sgMSAtIHBsYWluCisgICAgb2sgMiAtIHBsYWluIHdpdGggR0lUX1dPUktfVFJFRQorICAgIG9rIDMgLSBwbGFpbiBiYXJlCisKK1NpbmNlIHRoZSB0ZXN0cyBhbGwgb3V0cHV0IFRBUCAoc2VlIGh0dHA6Ly90ZXN0YW55dGhpbmcub3JnKSB0aGV5IGNhbgorYmUgcnVuIHdpdGggYW55IFRBUCBoYXJuZXNzLiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBwYXJhbGxlbCB0ZXN0aW5nCitwb3dlcmVkIGJ5IGEgcmVjZW50IHZlcnNpb24gb2YgcHJvdmUoMSk6CisKKyAgICAkIHByb3ZlIC0tdGltZXIgLS1qb2JzIDE1IC4vdFswLTldKi5zaAorICAgIFsxOToxNzozM10gLi90MDAwNS1zaWduYWxzLnNoIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIG9rICAgICAgIDM2IG1zCisgICAgWzE5OjE3OjMzXSAuL3QwMDIyLWNybGYtcmVuYW1lLnNoIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gb2sgICAgICAgNjkgbXMKKyAgICBbMTk6MTc6MzNdIC4vdDAwMjQtY3JsZi1hcmNoaXZlLnNoIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBvayAgICAgIDE1NCBtcworICAgIFsxOToxNzozM10gLi90MDAwNC11bndyaXRhYmxlLnNoIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIG9rICAgICAgMjg5IG1zCisgICAgWzE5OjE3OjMzXSAuL3QwMDAyLWdpdGZpbGUuc2ggLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gb2sgICAgICA0ODAgbXMKKyAgICA9PT0oICAgICAxMDI7MCAgMjUvPyAgNi8/ICA1Lz8gIDE2Lz8gIDEvPyAgNC8/ICAyLz8gIDEvPyAgMy8/ICAxLi4uICk9PT0KKworcHJvdmUgYW5kIG90aGVyIGhhcm5lc3NlcyBjb21lIHdpdGggYSBsb3Qgb2YgdXNlZnVsIG9wdGlvbnMuIFRoZQorLS1zdGF0ZSBvcHRpb24gaW4gcGFydGljdWxhciBpcyB2ZXJ5IHVzZWZ1bDoKKworICAgICMgUmVwZWF0IHVudGlsIG5vIG1vcmUgZmFpbHVyZXMKKyAgICAkIHByb3ZlIC1qIDE1IC0tc3RhdGU9ZmFpbGVkLHNhdmUgLi90WzAtOV0qLnNoCisKK1lvdSBjYW4gZ2l2ZSBERUZBVUxUX1RFU1RfVEFSR0VUPXByb3ZlIG9uIHRoZSBtYWtlIGNvbW1hbmQgKG9yIGRlZmluZSBpdAoraW4gY29uZmlnLm1haykgdG8gY2F1c2UgIm1ha2UgdGVzdCIgdG8gcnVuIHRlc3RzIHVuZGVyIHByb3ZlLgorR0lUX1BST1ZFX09QVFMgY2FuIGJlIHVzZWQgdG8gcGFzcyBhZGRpdGlvbmFsIG9wdGlvbnMsIGUuZy4KKworICAgICQgbWFrZSBERUZBVUxUX1RFU1RfVEFSR0VUPXByb3ZlIEdJVF9QUk9WRV9PUFRTPSctLXRpbWVyIC0tam9icyAxNicgdGVzdAorCitZb3UgY2FuIGFsc28gcnVuIGVhY2ggdGVzdCBpbmRpdmlkdWFsbHkgZnJvbSBjb21tYW5kIGxpbmUsIGxpa2UgdGhpczoKKworICAgICQgc2ggLi90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2gKKyAgICBvayAxIC0gZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0byBhZGQgdmFyaW91cyBwYXRocy4KKyAgICBvayAyIC0gZ2l0IGxzLWZpbGVzIC1rIHRvIHNob3cga2lsbGVkIGZpbGVzLgorICAgIG9rIDMgLSB2YWxpZGF0ZSBnaXQgbHMtZmlsZXMgLWsgb3V0cHV0LgorICAgIG9rIDQgLSBnaXQgbHMtZmlsZXMgLW0gdG8gc2hvdyBtb2RpZmllZCBmaWxlcy4KKyAgICBvayA1IC0gdmFsaWRhdGUgZ2l0IGxzLWZpbGVzIC1tIG91dHB1dC4KKyAgICAjIHBhc3NlZCBhbGwgNSB0ZXN0KHMpCisgICAgMS4uNQorCitZb3UgY2FuIHBhc3MgLS12ZXJib3NlIChvciAtdiksIC0tZGVidWcgKG9yIC1kKSwgYW5kIC0taW1tZWRpYXRlCisob3IgLWkpIGNvbW1hbmQgbGluZSBhcmd1bWVudCB0byB0aGUgdGVzdCwgb3IgYnkgc2V0dGluZyBHSVRfVEVTVF9PUFRTCithcHByb3ByaWF0ZWx5IGJlZm9yZSBydW5uaW5nICJtYWtlIi4KKworLXY6OgorLS12ZXJib3NlOjoKKwlUaGlzIG1ha2VzIHRoZSB0ZXN0IG1vcmUgdmVyYm9zZS4gIFNwZWNpZmljYWxseSwgdGhlCisJY29tbWFuZCBiZWluZyBydW4gYW5kIHRoZWlyIG91dHB1dCBpZiBhbnkgYXJlIGFsc28KKwlvdXRwdXQuCisKKy0tdmVyYm9zZS1vbmx5PTxwYXR0ZXJuPjo6CisJTGlrZSAtLXZlcmJvc2UsIGJ1dCB0aGUgZWZmZWN0IGlzIGxpbWl0ZWQgdG8gdGVzdHMgd2l0aAorCW51bWJlcnMgbWF0Y2hpbmcgPHBhdHRlcm4+LiAgVGhlIG51bWJlciBtYXRjaGVkIGFnYWluc3QgaXMKKwlzaW1wbHkgdGhlIHJ1bm5pbmcgY291bnQgb2YgdGhlIHRlc3Qgd2l0aGluIHRoZSBmaWxlLgorCisteDo6CisJVHVybiBvbiBzaGVsbCB0cmFjaW5nIChpLmUuLCBgc2V0IC14YCkgZHVyaW5nIHRoZSB0ZXN0cworCXRoZW1zZWx2ZXMuIEltcGxpZXMgYC0tdmVyYm9zZWAuIE5vdGUgdGhhdCB0aGlzIGNhbiBjYXVzZQorCWZhaWx1cmVzIGluIHNvbWUgdGVzdHMgd2hpY2ggcmVkaXJlY3QgYW5kIHRlc3QgdGhlCisJb3V0cHV0IG9mIHNoZWxsIGZ1bmN0aW9ucy4gVXNlIHdpdGggY2F1dGlvbi4KKworLWQ6OgorLS1kZWJ1Zzo6CisJVGhpcyBtYXkgaGVscCB0aGUgcGVyc29uIHdobyBpcyBkZXZlbG9waW5nIGEgbmV3IHRlc3QuCisJSXQgY2F1c2VzIHRoZSBjb21tYW5kIGRlZmluZWQgd2l0aCB0ZXN0X2RlYnVnIHRvIHJ1bi4KKwlUaGUgInRyYXNoIiBkaXJlY3RvcnkgKHVzZWQgdG8gc3RvcmUgYWxsIHRlbXBvcmFyeSBkYXRhCisJZHVyaW5nIHRlc3RpbmcpIGlzIG5vdCBkZWxldGVkIGV2ZW4gaWYgdGhlcmUgYXJlIG5vCisJZmFpbGVkIHRlc3RzIHNvIHRoYXQgeW91IGNhbiBpbnNwZWN0IGl0cyBjb250ZW50cyBhZnRlcgorCXRoZSB0ZXN0IGZpbmlzaGVkLgorCistaTo6CistLWltbWVkaWF0ZTo6CisJVGhpcyBjYXVzZXMgdGhlIHRlc3QgdG8gaW1tZWRpYXRlbHkgZXhpdCB1cG9uIHRoZSBmaXJzdAorCWZhaWxlZCB0ZXN0LiBDbGVhbnVwIGNvbW1hbmRzIHJlcXVlc3RlZCB3aXRoCisJdGVzdF93aGVuX2ZpbmlzaGVkIGFyZSBub3QgZXhlY3V0ZWQgaWYgdGhlIHRlc3QgZmFpbGVkLAorCWluIG9yZGVyIHRvIGtlZXAgdGhlIHN0YXRlIGZvciBpbnNwZWN0aW9uIGJ5IHRoZSB0ZXN0ZXIKKwl0byBkaWFnbm9zZSB0aGUgYnVnLgorCistbDo6CistLWxvbmctdGVzdHM6OgorCVRoaXMgY2F1c2VzIGFkZGl0aW9uYWwgbG9uZy1ydW5uaW5nIHRlc3RzIHRvIGJlIHJ1biAod2hlcmUKKwlhdmFpbGFibGUpLCBmb3IgbW9yZSBleGhhdXN0aXZlIHRlc3RpbmcuCisKKy1yOjoKKy0tcnVuPTx0ZXN0LXNlbGVjdG9yPjo6CisJUnVuIG9ubHkgdGhlIHN1YnNldCBvZiB0ZXN0cyBpbmRpY2F0ZWQgYnkKKwk8dGVzdC1zZWxlY3Rvcj4uICBTZWUgc2VjdGlvbiAiU2tpcHBpbmcgVGVzdHMiIGJlbG93IGZvcgorCTx0ZXN0LXNlbGVjdG9yPiBzeW50YXguCisKKy0tdmFsZ3JpbmQ9PHRvb2w+OjoKKwlFeGVjdXRlIGFsbCBHaXQgYmluYXJpZXMgdW5kZXIgdmFsZ3JpbmQgdG9vbCA8dG9vbD4gYW5kIGV4aXQKKwl3aXRoIHN0YXR1cyAxMjYgb24gZXJyb3JzIChqdXN0IGxpa2UgcmVndWxhciB0ZXN0cywgdGhpcyB3aWxsCisJb25seSBzdG9wIHRoZSB0ZXN0IHNjcmlwdCB3aGVuIHJ1bm5pbmcgdW5kZXIgLWkpLgorCisJU2luY2UgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gcnVuIHRoZSB0ZXN0cyB3aXRoIC0tdmFsZ3JpbmQgYW5kCisJbm90IHNlZSBhbnkgb3V0cHV0LCB0aGlzIG9wdGlvbiBpbXBsaWVzIC0tdmVyYm9zZS4gIEZvcgorCWNvbnZlbmllbmNlLCBpdCBhbHNvIGltcGxpZXMgLS10ZWUuCisKKwk8dG9vbD4gZGVmYXVsdHMgdG8gJ21lbWNoZWNrJywganVzdCBsaWtlIHZhbGdyaW5kIGl0c2VsZi4KKwlPdGhlciBwYXJ0aWN1bGFybHkgdXNlZnVsIGNob2ljZXMgaW5jbHVkZSAnaGVsZ3JpbmQnIGFuZAorCSdkcmQnLCBidXQgeW91IG1heSB1c2UgYW55IHRvb2wgcmVjb2duaXplZCBieSB5b3VyIHZhbGdyaW5kCisJaW5zdGFsbGF0aW9uLgorCisJQXMgYSBzcGVjaWFsIGNhc2UsIDx0b29sPiBjYW4gYmUgJ21lbWNoZWNrLWZhc3QnLCB3aGljaCB1c2VzCisJbWVtY2hlY2sgYnV0IGRpc2FibGVzIC0tdHJhY2stb3JpZ2lucy4gIFVzZSB0aGlzIGlmIHlvdSBhcmUKKwlydW5uaW5nIHRlc3RzIGluIGJ1bGssIHRvIHNlZSBpZiB0aGVyZSBhcmUgX2FueV8gbWVtb3J5CisJaXNzdWVzLgorCisJTm90ZSB0aGF0IG1lbWNoZWNrIGlzIHJ1biB3aXRoIHRoZSBvcHRpb24gLS1sZWFrLWNoZWNrPW5vLAorCWFzIHRoZSBnaXQgcHJvY2VzcyBpcyBzaG9ydC1saXZlZCBhbmQgc29tZSBlcnJvcnMgYXJlIG5vdAorCWludGVyZXN0aW5nLiBJbiBvcmRlciB0byBydW4gYSBzaW5nbGUgY29tbWFuZCB1bmRlciB0aGUgc2FtZQorCWNvbmRpdGlvbnMgbWFudWFsbHksIHlvdSBzaG91bGQgc2V0IEdJVF9WQUxHUklORCB0byBwb2ludCB0bworCXRoZSAndC92YWxncmluZC8nIGRpcmVjdG9yeSBhbmQgdXNlIHRoZSBjb21tYW5kcyB1bmRlcgorCSd0L3ZhbGdyaW5kL2Jpbi8nLgorCistLXZhbGdyaW5kLW9ubHk9PHBhdHRlcm4+OjoKKwlMaWtlIC0tdmFsZ3JpbmQsIGJ1dCB0aGUgZWZmZWN0IGlzIGxpbWl0ZWQgdG8gdGVzdHMgd2l0aAorCW51bWJlcnMgbWF0Y2hpbmcgPHBhdHRlcm4+LiAgVGhlIG51bWJlciBtYXRjaGVkIGFnYWluc3QgaXMKKwlzaW1wbHkgdGhlIHJ1bm5pbmcgY291bnQgb2YgdGhlIHRlc3Qgd2l0aGluIHRoZSBmaWxlLgorCistLXRlZTo6CisJSW4gYWRkaXRpb24gdG8gcHJpbnRpbmcgdGhlIHRlc3Qgb3V0cHV0IHRvIHRoZSB0ZXJtaW5hbCwKKwl3cml0ZSBpdCB0byBmaWxlcyBuYW1lZCAndC90ZXN0LXJlc3VsdHMvJFRFU1RfTkFNRS5vdXQnLgorCUFzIHRoZSBuYW1lcyBkZXBlbmQgb24gdGhlIHRlc3RzJyBmaWxlIG5hbWVzLCBpdCBpcyBzYWZlIHRvCisJcnVuIHRoZSB0ZXN0cyB3aXRoIHRoaXMgb3B0aW9uIGluIHBhcmFsbGVsLgorCistLXdpdGgtZGFzaGVzOjoKKwlCeSBkZWZhdWx0IHRlc3RzIGFyZSBydW4gd2l0aG91dCBkYXNoZWQgZm9ybXMgb2YKKwljb21tYW5kcyAobGlrZSBnaXQtY29tbWl0KSBpbiB0aGUgUEFUSCAoaXQgb25seSB1c2VzCisJd3JhcHBlcnMgZnJvbSAuLi9iaW4td3JhcHBlcnMpLiAgVXNlIHRoaXMgb3B0aW9uIHRvIGluY2x1ZGUKKwl0aGUgYnVpbGQgZGlyZWN0b3J5ICguLikgaW4gdGhlIFBBVEgsIHdoaWNoIGNvbnRhaW5zIGFsbAorCXRoZSBkYXNoZWQgZm9ybXMgb2YgY29tbWFuZHMuICBUaGlzIG9wdGlvbiBpcyBjdXJyZW50bHkKKwlpbXBsaWVkIGJ5IG90aGVyIG9wdGlvbnMgbGlrZSAtLXZhbGdyaW5kIGFuZAorCUdJVF9URVNUX0lOU1RBTExFRC4KKworLS1yb290PTxkaXJlY3Rvcnk+OjoKKwlDcmVhdGUgInRyYXNoIiBkaXJlY3RvcmllcyB1c2VkIHRvIHN0b3JlIGFsbCB0ZW1wb3JhcnkgZGF0YSBkdXJpbmcKKwl0ZXN0aW5nIHVuZGVyIDxkaXJlY3Rvcnk+LCBpbnN0ZWFkIG9mIHRoZSB0LyBkaXJlY3RvcnkuCisJVXNpbmcgdGhpcyBvcHRpb24gd2l0aCBhIFJBTS1iYXNlZCBmaWxlc3lzdGVtIChzdWNoIGFzIHRtcGZzKQorCWNhbiBtYXNzaXZlbHkgc3BlZWQgdXAgdGhlIHRlc3Qgc3VpdGUuCisKKy0tY2hhaW4tbGludDo6CistLW5vLWNoYWluLWxpbnQ6OgorCUlmIC0tY2hhaW4tbGludCBpcyBlbmFibGVkLCB0aGUgdGVzdCBoYXJuZXNzIHdpbGwgY2hlY2sgZWFjaAorCXRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgaXQgcHJvcGVybHkgIiYmLWNoYWlucyIgYWxsIGNvbW1hbmRzIChzbworCXRoYXQgYSBmYWlsdXJlIGluIHRoZSBtaWRkbGUgZG9lcyBub3QgZ28gdW5ub3RpY2VkIGJ5IHRoZSBmaW5hbAorCWV4aXQgY29kZSBvZiB0aGUgdGVzdCkuIFRoaXMgY2hlY2sgaXMgcGVyZm9ybWVkIGluIGFkZGl0aW9uIHRvCisJcnVubmluZyB0aGUgdGVzdHMgdGhlbXNlbHZlcy4gWW91IG1heSBhbHNvIGVuYWJsZSBvciBkaXNhYmxlCisJdGhpcyBmZWF0dXJlIGJ5IHNldHRpbmcgdGhlIEdJVF9URVNUX0NIQUlOX0xJTlQgZW52aXJvbm1lbnQKKwl2YXJpYWJsZSB0byAiMSIgb3IgIjAiLCByZXNwZWN0aXZlbHkuCisKK1lvdSBjYW4gYWxzbyBzZXQgdGhlIEdJVF9URVNUX0lOU1RBTExFRCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0bwordGhlIGJpbmRpciBvZiBhbiBleGlzdGluZyBnaXQgaW5zdGFsbGF0aW9uIHRvIHRlc3QgdGhhdCBpbnN0YWxsYXRpb24uCitZb3Ugc3RpbGwgbmVlZCB0byBoYXZlIGJ1aWx0IHRoaXMgZ2l0IHNhbmRib3gsIGZyb20gd2hpY2ggdmFyaW91cwordGVzdC0qIHN1cHBvcnQgcHJvZ3JhbXMsIHRlbXBsYXRlcywgYW5kIHBlcmwgbGlicmFyaWVzIGFyZSB1c2VkLgorSWYgeW91ciBpbnN0YWxsZWQgZ2l0IGlzIGluY29tcGxldGUsIGl0IHdpbGwgc2lsZW50bHkgdGVzdCBwYXJ0cyBvZgoreW91ciBidWlsdCB2ZXJzaW9uIGluc3RlYWQuCisKK1doZW4gdXNpbmcgR0lUX1RFU1RfSU5TVEFMTEVELCB5b3UgY2FuIGFsc28gc2V0IEdJVF9URVNUX0VYRUNfUEFUSCB0bworb3ZlcnJpZGUgdGhlIGxvY2F0aW9uIG9mIHRoZSBkYXNoZWQtZm9ybSBzdWJjb21tYW5kcyAod2hhdAorR0lUX0VYRUNfUEFUSCB3b3VsZCBiZSB1c2VkIGZvciBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbikuCitHSVRfVEVTVF9FWEVDX1BBVEggZGVmYXVsdHMgdG8gYCRHSVRfVEVTVF9JTlNUQUxMRUQvZ2l0IC0tZXhlYy1wYXRoYC4KKworCitTa2lwcGluZyBUZXN0cworLS0tLS0tLS0tLS0tLS0KKworSW4gc29tZSBlbnZpcm9ubWVudHMsIGNlcnRhaW4gdGVzdHMgaGF2ZSBubyB3YXkgb2Ygc3VjY2VlZGluZworZHVlIHRvIHBsYXRmb3JtIGxpbWl0YXRpb24sIHN1Y2ggYXMgbGFjayBvZiAndW56aXAnIHByb2dyYW0sIG9yCitmaWxlc3lzdGVtIHRoYXQgZG8gbm90IGFsbG93IGFyYml0cmFyeSBzZXF1ZW5jZSBvZiBub24tTlVMIGJ5dGVzCithcyBwYXRobmFtZXMuCisKK1lvdSBzaG91bGQgYmUgYWJsZSB0byBzYXkgc29tZXRoaW5nIGxpa2UKKworICAgICQgR0lUX1NLSVBfVEVTVFM9dDkyMDAuOCBzaCAuL3Q5MjAwLWdpdC1jdnNleHBvcnQtY29tbWl0LnNoCisKK2FuZCBldmVuOgorCisgICAgJCBHSVRfU0tJUF9URVNUUz0ndFswLTRdPz8/IHQ5MT8/IHQ5MjAwLjgnIG1ha2UKKwordG8gb21pdCBzdWNoIHRlc3RzLiAgVGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBhCitTUCBzZXBhcmF0ZWQgbGlzdCBvZiBwYXR0ZXJucyB0aGF0IHRlbGxzIHdoaWNoIHRlc3RzIHRvIHNraXAsCithbmQgZWl0aGVyIGNhbiBtYXRjaCB0aGUgInRbMC05XXs0fSIgcGFydCB0byBza2lwIHRoZSB3aG9sZQordGVzdCwgb3IgdFswLTldezR9IGZvbGxvd2VkIGJ5ICIuJG51bWJlciIgdG8gc2F5IHdoaWNoCitwYXJ0aWN1bGFyIHRlc3QgdG8gc2tpcC4KKworRm9yIGFuIGluZGl2aWR1YWwgdGVzdCBzdWl0ZSAtLXJ1biBjb3VsZCBiZSB1c2VkIHRvIHNwZWNpZnkgdGhhdAorb25seSBzb21lIHRlc3RzIHNob3VsZCBiZSBydW4gb3IgdGhhdCBzb21lIHRlc3RzIHNob3VsZCBiZQorZXhjbHVkZWQgZnJvbSBhIHJ1bi4KKworVGhlIGFyZ3VtZW50IGZvciAtLXJ1biBpcyBhIGxpc3Qgb2YgaW5kaXZpZHVhbCB0ZXN0IG51bWJlcnMgb3IKK3JhbmdlcyB3aXRoIGFuIG9wdGlvbmFsIG5lZ2F0aW9uIHByZWZpeCB0aGF0IGRlZmluZSB3aGF0IHRlc3RzIGluCithIHRlc3Qgc3VpdGUgdG8gaW5jbHVkZSBpbiB0aGUgcnVuLiAgQSByYW5nZSBpcyB0d28gbnVtYmVycworc2VwYXJhdGVkIHdpdGggYSBkYXNoIGFuZCBtYXRjaGVzIGEgcmFuZ2Ugb2YgdGVzdHMgd2l0aCBib3RoIGVuZHMKK2JlZW4gaW5jbHVkZWQuICBZb3UgbWF5IG9taXQgdGhlIGZpcnN0IG9yIHRoZSBzZWNvbmQgbnVtYmVyIHRvCittZWFuICJmcm9tIHRoZSBmaXJzdCB0ZXN0IiBvciAidXAgdG8gdGhlIHZlcnkgbGFzdCB0ZXN0IgorcmVzcGVjdGl2ZWx5LgorCitPcHRpb25hbCBwcmVmaXggb2YgJyEnIG1lYW5zIHRoYXQgdGhlIHRlc3Qgb3IgYSByYW5nZSBvZiB0ZXN0cworc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIHJ1bi4KKworSWYgLS1ydW4gc3RhcnRzIHdpdGggYW4gdW5wcmVmaXhlZCBudW1iZXIgb3IgcmFuZ2UgdGhlIGluaXRpYWwKK3NldCBvZiB0ZXN0cyB0byBydW4gaXMgZW1wdHkuIElmIHRoZSBmaXJzdCBpdGVtIHN0YXJ0cyB3aXRoICchJworYWxsIHRoZSB0ZXN0cyBhcmUgYWRkZWQgdG8gdGhlIGluaXRpYWwgc2V0LiAgQWZ0ZXIgaW5pdGlhbCBzZXQgaXMKK2RldGVybWluZWQgZXZlcnkgdGVzdCBudW1iZXIgb3IgcmFuZ2UgaXMgYWRkZWQgb3IgZXhjbHVkZWQgZnJvbQordGhlIHNldCBvbmUgYnkgb25lLCBmcm9tIGxlZnQgdG8gcmlnaHQuCisKK0luZGl2aWR1YWwgbnVtYmVycyBvciByYW5nZXMgY291bGQgYmUgc2VwYXJhdGVkIGVpdGhlciBieSBhIHNwYWNlCitvciBhIGNvbW1hLgorCitGb3IgZXhhbXBsZSwgdG8gcnVuIG9ubHkgdGVzdHMgdXAgdG8gYSBzcGVjaWZpYyB0ZXN0ICgyMSksIG9uZQorY291bGQgZG8gdGhpczoKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nMS0yMScKKworb3IgdGhpczoKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nLTIxJworCitDb21tb24gY2FzZSBpcyB0byBydW4gc2V2ZXJhbCBzZXR1cCB0ZXN0cyAoMSwgMiwgMykgYW5kIHRoZW4gYQorc3BlY2lmaWMgdGVzdCAoMjEpIHRoYXQgcmVsaWVzIG9uIHRoYXQgc2V0dXA6CisKKyAgICAkIHNoIC4vdDkyMDAtZ2l0LWN2c2V4cG9ydC1jb21taXQuc2ggLS1ydW49JzEgMiAzIDIxJworCitvcjoKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0xLDIsMywyMQorCitvcjoKKworICAgICQgc2ggLi90OTIwMC1naXQtY3ZzZXhwb3J0LWNvbW1pdC5zaCAtLXJ1bj0nLTMgMjEnCisKK0FzIG5vdGVkIGFib3ZlLCB0aGUgdGVzdCBzZXQgaXMgYnVpbHQgZ29pbmcgdGhvdWdoIGl0ZW1zIGxlZnQgdG8KK3JpZ2h0LCBzbyB0aGlzOgorCisgICAgJCBzaCAuL3Q5MjAwLWdpdC1jdnNleHBvcnQtY29tbWl0LnNoIC0tcnVuPScxLTQgITMnCisKK3dpbGwgcnVuIHRlc3RzIDEsIDIsIGFuZCA0LiAgSXRlbXMgdGhhdCBjb21lcyBsYXRlciBoYXZlIGhpZ2hlcgorcHJlY2VuZGVuY2UuICBJdCBtZWFucyB0aGF0IHRoaXM6CisKKyAgICAkIHNoIC4vdDkyMDAtZ2l0LWN2c2V4cG9ydC1jb21taXQuc2ggLS1ydW49JyEzIDEtNCcKKword291bGQganVzdCBydW4gdGVzdHMgZnJvbSAxIHRvIDQsIGluY2x1ZGluZyAzLgorCitZb3UgbWF5IHVzZSBuZWdhdGlvbiB3aXRoIHJhbmdlcy4gIFRoZSBmb2xsb3dpbmcgd2lsbCBydW4gYWxsCit0ZXN0IGluIHRoZSB0ZXN0IHN1aXRlIGV4Y2VwdCBmcm9tIDcgdXAgdG8gMTE6CisKKyAgICAkIHNoIC4vdDkyMDAtZ2l0LWN2c2V4cG9ydC1jb21taXQuc2ggLS1ydW49JyE3LTExJworCitTb21lIHRlc3RzIGluIGEgdGVzdCBzdWl0ZSByZWx5IG9uIHRoZSBwcmV2aW91cyB0ZXN0cyBwZXJmb3JtaW5nCitjZXJ0YWluIGFjdGlvbnMsIHNwZWNpZmljYWxseSBzb21lIHRlc3RzIGFyZSBkZXNpZ25hdGVkIGFzCisic2V0dXAiIHRlc3QsIHNvIHlvdSBjYW5ub3QgX2FyYml0cmFyaWx5XyBkaXNhYmxlIG9uZSB0ZXN0IGFuZAorZXhwZWN0IHRoZSByZXN0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4KKworLS1ydW4gaXMgbW9zdGx5IHVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGZvY3VzIG9uIGEgc3BlY2lmaWMgdGVzdAorYW5kIGtub3cgd2hhdCBzZXR1cCBpcyBuZWVkZWQgZm9yIGl0LiAgT3Igd2hlbiB5b3Ugd2FudCB0byBydW4KK2V2ZXJ5dGhpbmcgdXAgdG8gYSBjZXJ0YWluIHRlc3QuCisKKworTmFtaW5nIFRlc3RzCistLS0tLS0tLS0tLS0KKworVGhlIHRlc3QgZmlsZXMgYXJlIG5hbWVkIGFzOgorCisJdE5OTk4tY29tbWFuZG5hbWUtZGV0YWlscy5zaAorCit3aGVyZSBOIGlzIGEgZGVjaW1hbCBkaWdpdC4KKworRmlyc3QgZGlnaXQgdGVsbHMgdGhlIGZhbWlseToKKworCTAgLSB0aGUgYWJzb2x1dGUgYmFzaWNzIGFuZCBnbG9iYWwgc3R1ZmYKKwkxIC0gdGhlIGJhc2ljIGNvbW1hbmRzIGNvbmNlcm5pbmcgZGF0YWJhc2UKKwkyIC0gdGhlIGJhc2ljIGNvbW1hbmRzIGNvbmNlcm5pbmcgdGhlIHdvcmtpbmcgdHJlZQorCTMgLSB0aGUgb3RoZXIgYmFzaWMgY29tbWFuZHMgKGUuZy4gbHMtZmlsZXMpCisJNCAtIHRoZSBkaWZmIGNvbW1hbmRzCisJNSAtIHRoZSBwdWxsIGFuZCBleHBvcnRpbmcgY29tbWFuZHMKKwk2IC0gdGhlIHJldmlzaW9uIHRyZWUgY29tbWFuZHMgKGV2ZW4gZS5nLiBtZXJnZS1iYXNlKQorCTcgLSB0aGUgcG9yY2VsYWluaXNoIGNvbW1hbmRzIGNvbmNlcm5pbmcgdGhlIHdvcmtpbmcgdHJlZQorCTggLSB0aGUgcG9yY2VsYWluaXNoIGNvbW1hbmRzIGNvbmNlcm5pbmcgZm9yZW5zaWNzCisJOSAtIHRoZSBnaXQgdG9vbHMKKworU2Vjb25kIGRpZ2l0IHRlbGxzIHRoZSBwYXJ0aWN1bGFyIGNvbW1hbmQgd2UgYXJlIHRlc3RpbmcuCisKK1RoaXJkIGRpZ2l0IChvcHRpb25hbGx5KSB0ZWxscyB0aGUgcGFydGljdWxhciBzd2l0Y2ggb3IgZ3JvdXAgb2Ygc3dpdGNoZXMKK3dlIGFyZSB0ZXN0aW5nLgorCitJZiB5b3UgY3JlYXRlIGZpbGVzIHVuZGVyIHQvIGRpcmVjdG9yeSAoaS5lLiBoZXJlKSB0aGF0IGlzIG5vdAordGhlIHRvcC1sZXZlbCB0ZXN0IHNjcmlwdCwgbmV2ZXIgbmFtZSB0aGUgZmlsZSB0byBtYXRjaCB0aGUgYWJvdmUKK3BhdHRlcm4uICBUaGUgTWFrZWZpbGUgaGVyZSBjb25zaWRlcnMgYWxsIHN1Y2ggZmlsZXMgYXMgdGhlCit0b3AtbGV2ZWwgdGVzdCBzY3JpcHQgYW5kIHRyaWVzIHRvIHJ1biBhbGwgb2YgdGhlbS4gIENhcmUgaXMKK2VzcGVjaWFsbHkgbmVlZGVkIGlmIHlvdSBhcmUgY3JlYXRpbmcgYSBjb21tb24gdGVzdCBsaWJyYXJ5CitmaWxlLCBzaW1pbGFyIHRvIHRlc3QtbGliLnNoLCBiZWNhdXNlIHN1Y2ggYSBsaWJyYXJ5IGZpbGUgbWF5Citub3QgYmUgc3VpdGFibGUgZm9yIHN0YW5kYWxvbmUgZXhlY3V0aW9uLgorCisKK1dyaXRpbmcgVGVzdHMKKy0tLS0tLS0tLS0tLS0KKworVGhlIHRlc3Qgc2NyaXB0IGlzIHdyaXR0ZW4gYXMgYSBzaGVsbCBzY3JpcHQuICBJdCBzaG91bGQgc3RhcnQKK3dpdGggdGhlIHN0YW5kYXJkICIjIS9iaW4vc2giIHdpdGggY29weXJpZ2h0IG5vdGljZXMsIGFuZCBhbgorYXNzaWdubWVudCB0byB2YXJpYWJsZSAndGVzdF9kZXNjcmlwdGlvbicsIGxpa2UgdGhpczoKKworCSMhL2Jpbi9zaAorCSMKKwkjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworCSMKKworCXRlc3RfZGVzY3JpcHRpb249J3h4eCB0ZXN0IChvcHRpb24gLS1mcm90eikKKworCVRoaXMgdGVzdCByZWdpc3RlcnMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIGNhY2hlCisJYW5kIHRyaWVzIHRvIHJ1biBnaXQtbHMtZmlsZXMgd2l0aCBvcHRpb24gLS1mcm90ei4nCisKKworU291cmNlICd0ZXN0LWxpYi5zaCcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FmdGVyIGFzc2lnbmluZyB0ZXN0X2Rlc2NyaXB0aW9uLCB0aGUgdGVzdCBzY3JpcHQgc2hvdWxkIHNvdXJjZQordGVzdC1saWIuc2ggbGlrZSB0aGlzOgorCisJLiAuL3Rlc3QtbGliLnNoCisKK1RoaXMgdGVzdCBoYXJuZXNzIGxpYnJhcnkgZG9lcyB0aGUgZm9sbG93aW5nIHRoaW5nczoKKworIC0gSWYgdGhlIHNjcmlwdCBpcyBpbnZva2VkIHdpdGggY29tbWFuZCBsaW5lIGFyZ3VtZW50IC0taGVscAorICAgKG9yIC1oKSwgaXQgc2hvd3MgdGhlIHRlc3RfZGVzY3JpcHRpb24gYW5kIGV4aXRzLgorCisgLSBDcmVhdGVzIGFuIGVtcHR5IHRlc3QgZGlyZWN0b3J5IHdpdGggYW4gZW1wdHkgLmdpdC9vYmplY3RzIGRhdGFiYXNlCisgICBhbmQgY2hkaXIoMikgaW50byBpdC4gIFRoaXMgZGlyZWN0b3J5IGlzICd0L3RyYXNoCisgICBkaXJlY3RvcnkuJHRlc3RfbmFtZV93aXRob3V0X2RvdHNoJywgd2l0aCB0LyBzdWJqZWN0IHRvIGNoYW5nZSBieQorICAgdGhlIC0tcm9vdCBvcHRpb24gZG9jdW1lbnRlZCBhYm92ZS4KKworIC0gRGVmaW5lcyBzdGFuZGFyZCB0ZXN0IGhlbHBlciBmdW5jdGlvbnMgZm9yIHlvdXIgc2NyaXB0cyB0bworICAgdXNlLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBkZXNpZ25lZCB0byBtYWtlIGFsbCBzY3JpcHRzIGJlaGF2ZQorICAgY29uc2lzdGVudGx5IHdoZW4gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAtLXZlcmJvc2UgKG9yIC12KSwKKyAgIC0tZGVidWcgKG9yIC1kKSwgYW5kIC0taW1tZWRpYXRlIChvciAtaSkgaXMgZ2l2ZW4uCisKK0RvJ3MsIGRvbid0cyAmIHRoaW5ncyB0byBrZWVwIGluIG1pbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSBhcmUgYSBmZXcgZXhhbXBsZXMgb2YgdGhpbmdzIHlvdSBwcm9iYWJseSBzaG91bGQgYW5kIHNob3VsZG4ndCBkbword2hlbiB3cml0aW5nIHRlc3RzLgorCitEbzoKKworIC0gUHV0IGFsbCBjb2RlIGluc2lkZSB0ZXN0X2V4cGVjdF9zdWNjZXNzIGFuZCBvdGhlciBhc3NlcnRpb25zLgorCisgICBFdmVuIGNvZGUgdGhhdCBpc24ndCBhIHRlc3QgcGVyIHNlLCBidXQgbWVyZWx5IHNvbWUgc2V0dXAgY29kZQorICAgc2hvdWxkIGJlIGluc2lkZSBhIHRlc3QgYXNzZXJ0aW9uLgorCisgLSBDaGFpbiB5b3VyIHRlc3QgYXNzZXJ0aW9ucworCisgICBXcml0ZSB0ZXN0IGNvZGUgbGlrZSB0aGlzOgorCisJZ2l0IG1lcmdlIGZvbyAmJgorCWdpdCBwdXNoIGJhciAmJgorCXRlc3QgLi4uCisKKyAgIEluc3RlYWQgb2Y6CisKKwlnaXQgbWVyZ2UgaGxhCisJZ2l0IHB1c2ggZ2gKKwl0ZXN0IC4uLgorCisgICBUaGF0IHdheSBhbGwgb2YgdGhlIGNvbW1hbmRzIGluIHlvdXIgdGVzdHMgd2lsbCBzdWNjZWVkIG9yIGZhaWwuIElmCisgICB5b3UgbXVzdCBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBvZiBzb21ldGhpbmcsIGNvbnNpZGVyIHVzaW5nIGEKKyAgIGhlbHBlciBmdW5jdGlvbiAoZS5nLiB1c2Ugc2FuZV91bnNldCBpbnN0ZWFkIG9mIHVuc2V0LCBpbiBvcmRlcgorICAgdG8gYXZvaWQgdW5wb3J0YWJsZSByZXR1cm4gdmFsdWUgZm9yIHVuc2V0dGluZyBhIHZhcmlhYmxlIHRoYXQgd2FzCisgICBhbHJlYWR5IHVuc2V0KSwgb3IgcHJlcGVuZGluZyB0aGUgY29tbWFuZCB3aXRoIHRlc3RfbWlnaHRfZmFpbCBvcgorICAgdGVzdF9tdXN0X2ZhaWwuCisKKyAtIENoZWNrIHRoZSB0ZXN0IGNvdmVyYWdlIGZvciB5b3VyIHRlc3RzLiBTZWUgdGhlICJUZXN0IGNvdmVyYWdlIgorICAgYmVsb3cuCisKKyAgIERvbid0IGJsaW5kbHkgZm9sbG93IHRlc3QgY292ZXJhZ2UgbWV0cmljczsgaWYgYSBuZXcgZnVuY3Rpb24geW91IGFkZGVkCisgICBkb2Vzbid0IGhhdmUgYW55IGNvdmVyYWdlLCB0aGVuIHlvdSdyZSBwcm9iYWJseSBkb2luZyBzb21ldGhpbmcgd3JvbmcsCisgICBidXQgaGF2aW5nIDEwMCUgY292ZXJhZ2UgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoYXQgeW91IHRlc3RlZAorICAgZXZlcnl0aGluZy4KKworICAgVGVzdHMgdGhhdCBhcmUgbGlrZWx5IHRvIHNtb2tlIG91dCBmdXR1cmUgcmVncmVzc2lvbnMgYXJlIGJldHRlcgorICAgdGhhbiB0ZXN0cyB0aGF0IGp1c3QgaW5mbGF0ZSB0aGUgY292ZXJhZ2UgbWV0cmljcy4KKworIC0gV2hlbiBhIHRlc3QgY2hlY2tzIGZvciBhbiBhYnNvbHV0ZSBwYXRoIHRoYXQgYSBnaXQgY29tbWFuZCBnZW5lcmF0ZWQsCisgICBjb25zdHJ1Y3QgdGhlIGV4cGVjdGVkIHZhbHVlIHVzaW5nICQocHdkKSByYXRoZXIgdGhhbiAkUFdELAorICAgJFRFU1RfRElSRUNUT1JZLCBvciAkVFJBU0hfRElSRUNUT1JZLiBJdCBtYWtlcyBhIGRpZmZlcmVuY2Ugb24KKyAgIFdpbmRvd3MsIHdoZXJlIHRoZSBzaGVsbCAoTVNZUyBiYXNoKSBtYW5nbGVzIGFic29sdXRlIHBhdGggbmFtZXMuCisgICBGb3IgZGV0YWlscywgc2VlIHRoZSBjb21taXQgbWVzc2FnZSBvZiA0MTE0MTU2YWU5LgorCitEb24ndDoKKworIC0gZXhpdCgpIHdpdGhpbiBhIDxzY3JpcHQ+IHBhcnQuCisKKyAgIFRoZSBoYXJuZXNzIHdpbGwgY2F0Y2ggdGhpcyBhcyBhIHByb2dyYW1taW5nIGVycm9yIG9mIHRoZSB0ZXN0LgorICAgVXNlIHRlc3RfZG9uZSBpbnN0ZWFkIGlmIHlvdSBuZWVkIHRvIHN0b3AgdGhlIHRlc3RzIGVhcmx5IChzZWUKKyAgICJTa2lwcGluZyB0ZXN0cyIgYmVsb3cpLgorCisgLSB1c2UgJyEgZ2l0IGNtZCcgd2hlbiB5b3Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIGdpdCBjb21tYW5kIGV4aXRzCisgICB3aXRoIGZhaWx1cmUgaW4gYSBjb250cm9sbGVkIHdheSBieSBjYWxsaW5nICJkaWUoKSIuICBJbnN0ZWFkLAorICAgdXNlICd0ZXN0X211c3RfZmFpbCBnaXQgY21kJy4gIFRoaXMgd2lsbCBzaWduYWwgYSBmYWlsdXJlIGlmIGdpdAorICAgZGllcyBpbiBhbiB1bmV4cGVjdGVkIHdheSAoZS5nLiBzZWdmYXVsdCkuCisKKyAgIE9uIHRoZSBvdGhlciBoYW5kLCBkb24ndCB1c2UgdGVzdF9tdXN0X2ZhaWwgZm9yIHJ1bm5pbmcgcmVndWxhcgorICAgcGxhdGZvcm0gY29tbWFuZHM7IGp1c3QgdXNlICchIGNtZCcuICBXZSBhcmUgbm90IGluIHRoZSBidXNpbmVzcworICAgb2YgdmVyaWZ5aW5nIHRoYXQgdGhlIHdvcmxkIGdpdmVuIHRvIHVzIHNhbmVseSB3b3Jrcy4KKworIC0gdXNlIHBlcmwgd2l0aG91dCBzcGVsbGluZyBpdCBhcyAiJFBFUkxfUEFUSCIuIFRoaXMgaXMgdG8gaGVscCBvdXIKKyAgIGZyaWVuZHMgb24gV2luZG93cyB3aGVyZSB0aGUgcGxhdGZvcm0gUGVybCBvZnRlbiBhZGRzIENSIGJlZm9yZQorICAgdGhlIGVuZCBvZiBsaW5lLCBhbmQgdGhleSBidW5kbGUgR2l0IHdpdGggYSB2ZXJzaW9uIG9mIFBlcmwgdGhhdAorICAgZG9lcyBub3QgZG8gc28sIHdob3NlIHBhdGggaXMgc3BlY2lmaWVkIHdpdGggJFBFUkxfUEFUSC4gTm90ZSB0aGF0IHdlCisgICBwcm92aWRlIGEgInBlcmwiIGZ1bmN0aW9uIHdoaWNoIHVzZXMgJFBFUkxfUEFUSCB1bmRlciB0aGUgaG9vZCwgc28KKyAgIHlvdSBkbyBub3QgbmVlZCB0byB3b3JyeSB3aGVuIHNpbXBseSBydW5uaW5nIHBlcmwgaW4gdGhlIHRlc3Qgc2NyaXB0cworICAgKGJ1dCB5b3UgZG8sIGZvciBleGFtcGxlLCBvbiBhIHNoZWJhbmcgbGluZSBvciBpbiBhIHN1YiBzY3JpcHQKKyAgIGNyZWF0ZWQgdmlhICJ3cml0ZV9zY3JpcHQiKS4KKworIC0gdXNlIHNoIHdpdGhvdXQgc3BlbGxpbmcgaXQgYXMgIiRTSEVMTF9QQVRIIiwgd2hlbiB0aGUgc2NyaXB0IGNhbgorICAgYmUgbWlzaW50ZXJwcmV0ZWQgYnkgYnJva2VuIHBsYXRmb3JtIHNoZWxsIChlLmcuIFNvbGFyaXMpLgorCisgLSBjaGRpciBhcm91bmQgaW4gdGVzdHMuICBJdCBpcyBub3Qgc3VmZmljaWVudCB0byBjaGRpciB0bworICAgc29tZXdoZXJlIGFuZCB0aGVuIGNoZGlyIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGxvY2F0aW9uIGxhdGVyIGluCisgICB0aGUgdGVzdCwgYXMgYW55IGludGVybWVkaWF0ZSBzdGVwIGNhbiBmYWlsIGFuZCBhYm9ydCB0aGUgdGVzdCwKKyAgIGNhdXNpbmcgdGhlIG5leHQgdGVzdCB0byBzdGFydCBpbiBhbiB1bmV4cGVjdGVkIGRpcmVjdG9yeS4gIERvIHNvCisgICBpbnNpZGUgYSBzdWJzaGVsbCBpZiBuZWNlc3NhcnkuCisKKyAtIEJyZWFrIHRoZSBUQVAgb3V0cHV0CisKKyAgIFRoZSByYXcgb3V0cHV0IGZyb20geW91ciB0ZXN0IG1heSBiZSBpbnRlcnByZXRlZCBieSBhIFRBUCBoYXJuZXNzLiBUQVAKKyAgIGhhcm5lc3NlcyB3aWxsIGlnbm9yZSBldmVyeXRoaW5nIHRoZXkgZG9uJ3Qga25vdyBhYm91dCwgYnV0IGRvbid0IHN0ZXAKKyAgIG9uIHRoZWlyIHRvZXMgaW4gdGhlc2UgYXJlYXM6CisKKyAgIC0gRG9uJ3QgcHJpbnQgbGluZXMgbGlrZSAiJHguLiR5IiB3aGVyZSAkeCBhbmQgJHkgYXJlIGludGVnZXJzLgorCisgICAtIERvbid0IHByaW50IGxpbmVzIHRoYXQgYmVnaW4gd2l0aCAib2siIG9yICJub3Qgb2siLgorCisgICBUQVAgaGFybmVzc2VzIGV4cGVjdCBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCBlaXRoZXIgIm9rIiBhbmQgIm5vdAorICAgb2siIHRvIHNpZ25hbCBhIHRlc3QgcGFzc2VkIG9yIGZhaWxlZCAoYW5kIG91ciBoYXJuZXNzIGFscmVhZHkKKyAgIHByb2R1Y2VzIHN1Y2ggbGluZXMpLCBzbyB5b3VyIHNjcmlwdCBzaG91bGRuJ3QgZW1pdCBzdWNoIGxpbmVzIHRvCisgICB0aGVpciBvdXRwdXQuCisKKyAgIFlvdSBjYW4gZ2xlYW4gc29tZSBmdXJ0aGVyIHBvc3NpYmxlIGlzc3VlcyBmcm9tIHRoZSBUQVAgZ3JhbW1hcgorICAgKHNlZSBodHRwOi8vc2VhcmNoLmNwYW4ub3JnL3Blcmxkb2M/VEFQOjpQYXJzZXI6OkdyYW1tYXIjVEFQX0dyYW1tYXIpCisgICBidXQgdGhlIGJlc3QgaW5kaWNhdGlvbiBpcyB0byBqdXN0IHJ1biB0aGUgdGVzdHMgd2l0aCBwcm92ZSgxKSwKKyAgIGl0J2xsIGNvbXBsYWluIGlmIGFueXRoaW5nIGlzIGFtaXNzLgorCitLZWVwIGluIG1pbmQ6CisKKyAtIEluc2lkZSA8c2NyaXB0PiBwYXJ0LCB0aGUgc3RhbmRhcmQgb3V0cHV0IGFuZCBzdGFuZGFyZCBlcnJvcgorICAgc3RyZWFtcyBhcmUgZGlzY2FyZGVkLCBhbmQgdGhlIHRlc3QgaGFybmVzcyBvbmx5IHJlcG9ydHMgIm9rIiBvcgorICAgIm5vdCBvayIgdG8gdGhlIGVuZCB1c2VyIHJ1bm5pbmcgdGhlIHRlc3RzLiBVbmRlciAtLXZlcmJvc2UsIHRoZXkKKyAgIGFyZSBzaG93biB0byBoZWxwIGRlYnVnZ2luZyB0aGUgdGVzdHMuCisKKworU2tpcHBpbmcgdGVzdHMKKy0tLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBuZWVkIHRvIHNraXAgdGVzdHMgeW91IHNob3VsZCBkbyBzbyBieSB1c2luZyB0aGUgdGhyZWUtYXJnIGZvcm0KK29mIHRoZSB0ZXN0XyogZnVuY3Rpb25zIChzZWUgdGhlICJUZXN0IGhhcm5lc3MgbGlicmFyeSIgc2VjdGlvbgorYmVsb3cpLCBlLmcuOgorCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdJIG5lZWQgUGVybCcgJworICAgICAgICBwZXJsIC1lICJobGFnaCgpIGlmIHVuZl91bmYoKSIKKyAgICAnCisKK1RoZSBhZHZhbnRhZ2Ugb2Ygc2tpcHBpbmcgdGVzdHMgbGlrZSB0aGlzIGlzIHRoYXQgcGxhdGZvcm1zIHRoYXQgZG9uJ3QKK2hhdmUgdGhlIFBFUkwgYW5kIG90aGVyIG9wdGlvbmFsIGRlcGVuZGVuY2llcyBnZXQgYW4gaW5kaWNhdGlvbiBvZiBob3cKK21hbnkgdGVzdHMgdGhleSdyZSBtaXNzaW5nLgorCitJZiB0aGUgdGVzdCBjb2RlIGlzIHRvbyBoYWlyeSBmb3IgdGhhdCAoaS5lLiBkb2VzIGEgbG90IG9mIHNldHVwIHdvcmsKK291dHNpZGUgdGVzdCBhc3NlcnRpb25zKSB5b3UgY2FuIGFsc28gc2tpcCBhbGwgcmVtYWluaW5nIHRlc3RzIGJ5CitzZXR0aW5nIHNraXBfYWxsIGFuZCBpbW1lZGlhdGVseSBjYWxsIHRlc3RfZG9uZToKKworCWlmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCisJdGhlbgorCSAgICBza2lwX2FsbD0nc2tpcHBpbmcgcGVybCBpbnRlcmZhY2UgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwkgICAgdGVzdF9kb25lCisJZmkKKworVGhlIHN0cmluZyB5b3UgZ2l2ZSB0byBza2lwX2FsbCB3aWxsIGJlIHVzZWQgYXMgYW4gZXhwbGFuYXRpb24gZm9yIHdoeQordGhlIHRlc3Qgd2FzIHNraXBwZWQuCisKK0VuZCB3aXRoIHRlc3RfZG9uZQorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdXIgc2NyaXB0IHdpbGwgYmUgYSBzZXF1ZW5jZSBvZiB0ZXN0cywgdXNpbmcgaGVscGVyIGZ1bmN0aW9ucworZnJvbSB0aGUgdGVzdCBoYXJuZXNzIGxpYnJhcnkuICBBdCB0aGUgZW5kIG9mIHRoZSBzY3JpcHQsIGNhbGwKKyd0ZXN0X2RvbmUnLgorCisKK1Rlc3QgaGFybmVzcyBsaWJyYXJ5CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgYSBoYW5kZnVsIGhlbHBlciBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgdGVzdCBoYXJuZXNzCitsaWJyYXJ5IGZvciB5b3VyIHNjcmlwdCB0byB1c2UuCisKKyAtIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgWzxwcmVyZXE+XSA8bWVzc2FnZT4gPHNjcmlwdD4KKworICAgVXN1YWxseSB0YWtlcyB0d28gc3RyaW5ncyBhcyBwYXJhbWV0ZXJzLCBhbmQgZXZhbHVhdGVzIHRoZQorICAgPHNjcmlwdD4uICBJZiBpdCB5aWVsZHMgc3VjY2VzcywgdGVzdCBpcyBjb25zaWRlcmVkCisgICBzdWNjZXNzZnVsLiAgPG1lc3NhZ2U+IHNob3VsZCBzdGF0ZSB3aGF0IGl0IGlzIHRlc3RpbmcuCisKKyAgIEV4YW1wbGU6CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkgICAgJ2dpdC13cml0ZS10cmVlIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlIGFuIGVtcHR5IHRyZWUuJyBcCisJICAgICd0cmVlPSQoZ2l0LXdyaXRlLXRyZWUpJworCisgICBJZiB5b3Ugc3VwcGx5IHRocmVlIHBhcmFtZXRlcnMgdGhlIGZpcnN0IHdpbGwgYmUgdGFrZW4gdG8gYmUgYQorICAgcHJlcmVxdWlzaXRlOyBzZWUgdGhlIHRlc3Rfc2V0X3ByZXJlcSBhbmQgdGVzdF9oYXZlX3ByZXJlcQorICAgZG9jdW1lbnRhdGlvbiBiZWxvdzoKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgLS1wYWdpbmF0ZSByZXYtbGlzdCB1c2VzIGEgcGFnZXInIFwKKwkgICAgJyAuLi4gJworCisgICBZb3UgY2FuIGFsc28gc3VwcGx5IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgcHJlcmVxdWlzaXRlcywgaW4gdGhlCisgICByYXJlIGNhc2Ugd2hlcmUgeW91ciB0ZXN0IGRlcGVuZHMgb24gbW9yZSB0aGFuIG9uZToKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCxQWVRIT04gJ3lvIGRhd2cnIFwKKwkgICAgJyB0ZXN0ICQocGVybCAtRSAncHJpbnQgZXZhbCAiMSArIiAuIHF4W3B5dGhvbiAtYyAicHJpbnQgMiJdJykgPT0gIjQiICcKKworIC0gdGVzdF9leHBlY3RfZmFpbHVyZSBbPHByZXJlcT5dIDxtZXNzYWdlPiA8c2NyaXB0PgorCisgICBUaGlzIGlzIE5PVCB0aGUgb3Bwb3NpdGUgb2YgdGVzdF9leHBlY3Rfc3VjY2VzcywgYnV0IGlzIHVzZWQKKyAgIHRvIG1hcmsgYSB0ZXN0IHRoYXQgZGVtb25zdHJhdGVzIGEga25vd24gYnJlYWthZ2UuICBVbmxpa2UKKyAgIHRoZSB1c3VhbCB0ZXN0X2V4cGVjdF9zdWNjZXNzIHRlc3RzLCB3aGljaCBzYXkgIm9rIiBvbgorICAgc3VjY2VzcyBhbmQgIkZBSUwiIG9uIGZhaWx1cmUsIHRoaXMgd2lsbCBzYXkgIkZJWEVEIiBvbgorICAgc3VjY2VzcyBhbmQgInN0aWxsIGJyb2tlbiIgb24gZmFpbHVyZS4gIEZhaWx1cmVzIGZyb20gdGhlc2UKKyAgIHRlc3RzIHdvbid0IGNhdXNlIC1pIChpbW1lZGlhdGUpIHRvIHN0b3AuCisKKyAgIExpa2UgdGVzdF9leHBlY3Rfc3VjY2VzcyB0aGlzIGZ1bmN0aW9uIGNhbiBvcHRpb25hbGx5IHVzZSBhIHRocmVlCisgICBhcmd1bWVudCBpbnZvY2F0aW9uIHdpdGggYSBwcmVyZXF1aXNpdGUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorCisgLSB0ZXN0X2RlYnVnIDxzY3JpcHQ+CisKKyAgIFRoaXMgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQsIDxzY3JpcHQ+LCBhbmQgZXZhbHVhdGVzIGl0IG9ubHkKKyAgIHdoZW4gdGhlIHRlc3Qgc2NyaXB0IGlzIHN0YXJ0ZWQgd2l0aCAtLWRlYnVnIGNvbW1hbmQgbGluZQorICAgYXJndW1lbnQuICBUaGlzIGlzIHByaW1hcmlseSBtZWFudCBmb3IgdXNlIGR1cmluZyB0aGUKKyAgIGRldmVsb3BtZW50IG9mIGEgbmV3IHRlc3Qgc2NyaXB0LgorCisgLSB0ZXN0X2RvbmUKKworICAgWW91ciB0ZXN0IHNjcmlwdCBtdXN0IGhhdmUgdGVzdF9kb25lIGF0IHRoZSBlbmQuICBJdHMgcHVycG9zZQorICAgaXMgdG8gc3VtbWFyaXplIHN1Y2Nlc3NlcyBhbmQgZmFpbHVyZXMgaW4gdGhlIHRlc3Qgc2NyaXB0IGFuZAorICAgZXhpdCB3aXRoIGFuIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCisKKyAtIHRlc3RfdGljaworCisgICBNYWtlIGNvbW1pdCBhbmQgdGFnIG5hbWVzIGNvbnNpc3RlbnQgYnkgc2V0dGluZyB0aGUgYXV0aG9yIGFuZAorICAgY29tbWl0dGVyIHRpbWVzIHRvIGRlZmluZWQgc3RhdGUuICBTdWJzZXF1ZW50IGNhbGxzIHdpbGwKKyAgIGFkdmFuY2UgdGhlIHRpbWVzIGJ5IGEgZml4ZWQgYW1vdW50LgorCisgLSB0ZXN0X2NvbW1pdCA8bWVzc2FnZT4gWzxmaWxlbmFtZT4gWzxjb250ZW50cz5dXQorCisgICBDcmVhdGVzIGEgY29tbWl0IHdpdGggdGhlIGdpdmVuIG1lc3NhZ2UsIGNvbW1pdHRpbmcgdGhlIGdpdmVuCisgICBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnRzIChkZWZhdWx0IGZvciBib3RoIGlzIHRvIHJldXNlIHRoZQorICAgbWVzc2FnZSBzdHJpbmcpLCBhbmQgYWRkcyBhIHRhZyAoYWdhaW4gcmV1c2luZyB0aGUgbWVzc2FnZQorICAgc3RyaW5nIGFzIG5hbWUpLiAgQ2FsbHMgdGVzdF90aWNrIHRvIG1ha2UgdGhlIFNIQS0xcworICAgcmVwcm9kdWNpYmxlLgorCisgLSB0ZXN0X21lcmdlIDxtZXNzYWdlPiA8Y29tbWl0LW9yLXRhZz4KKworICAgTWVyZ2VzIHRoZSBnaXZlbiByZXYgdXNpbmcgdGhlIGdpdmVuIG1lc3NhZ2UuICBMaWtlIHRlc3RfY29tbWl0LAorICAgY3JlYXRlcyBhIHRhZyBhbmQgY2FsbHMgdGVzdF90aWNrIGJlZm9yZSBjb21taXR0aW5nLgorCisgLSB0ZXN0X3NldF9wcmVyZXEgPHByZXJlcT4KKworICAgU2V0IGEgdGVzdCBwcmVyZXF1aXNpdGUgdG8gYmUgdXNlZCBsYXRlciB3aXRoIHRlc3RfaGF2ZV9wcmVyZXEuIFRoZQorICAgdGVzdC1saWIgd2lsbCBzZXQgc29tZSBwcmVyZXF1aXNpdGVzIGZvciB5b3UsIHNlZSB0aGUKKyAgICJQcmVyZXF1aXNpdGVzIiBzZWN0aW9uIGJlbG93IGZvciBhIGZ1bGwgbGlzdCBvZiB0aGVzZS4KKworICAgT3RoZXJzIHlvdSBjYW4gc2V0IHlvdXJzZWxmIGFuZCB1c2UgbGF0ZXIgd2l0aCBlaXRoZXIKKyAgIHRlc3RfaGF2ZV9wcmVyZXEgZGlyZWN0bHksIG9yIHRoZSB0aHJlZSBhcmd1bWVudCBpbnZvY2F0aW9uIG9mCisgICB0ZXN0X2V4cGVjdF9zdWNjZXNzIGFuZCB0ZXN0X2V4cGVjdF9mYWlsdXJlLgorCisgLSB0ZXN0X2hhdmVfcHJlcmVxIDxwcmVyZXE+CisKKyAgIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVyZXF1aXNpdGUgcHJldmlvdXNseSBzZXQgd2l0aAorICAgdGVzdF9zZXRfcHJlcmVxLiBUaGUgbW9zdCBjb21tb24gdXNlIG9mIHRoaXMgZGlyZWN0bHkgaXMgdG8gc2tpcAorICAgYWxsIHRoZSB0ZXN0cyBpZiB3ZSBkb24ndCBoYXZlIHNvbWUgZXNzZW50aWFsIHByZXJlcXVpc2l0ZToKKworCWlmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCisJdGhlbgorCSAgICBza2lwX2FsbD0nc2tpcHBpbmcgcGVybCBpbnRlcmZhY2UgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwkgICAgdGVzdF9kb25lCisJZmkKKworIC0gdGVzdF9leHRlcm5hbCBbPHByZXJlcT5dIDxtZXNzYWdlPiA8ZXh0ZXJuYWw+IDxzY3JpcHQ+CisKKyAgIEV4ZWN1dGUgYSA8c2NyaXB0PiB3aXRoIGFuIDxleHRlcm5hbD4gaW50ZXJwcmV0ZXIgKGxpa2UgcGVybCkuIFRoaXMKKyAgIHdhcyBhZGRlZCBmb3IgdGVzdHMgbGlrZSB0OTcwMC1wZXJsLWdpdC5zaCB3aGljaCBkbyBtb3N0IG9mIHRoZWlyCisgICB3b3JrIGluIGFuIGV4dGVybmFsIHRlc3Qgc2NyaXB0LgorCisJdGVzdF9leHRlcm5hbCBcCisJICAgICdHaXR3ZWJDYWNoZTo6KkZpbGVDYWNoZSonIFwKKwkgICAgcGVybCAiJFRFU1RfRElSRUNUT1JZIi90OTUwMy90ZXN0X2NhY2hlX2ludGVyZmFjZS5wbAorCisgICBJZiB0aGUgdGVzdCBpcyBvdXRwdXR0aW5nIGl0cyBvd24gVEFQIHlvdSBzaG91bGQgc2V0IHRoZQorICAgdGVzdF9leHRlcm5hbF9oYXNfdGFwIHZhcmlhYmxlIHNvbWV3aGVyZSBiZWZvcmUgY2FsbGluZyB0aGUgZmlyc3QKKyAgIHRlc3RfZXh0ZXJuYWwqIGZ1bmN0aW9uLiBTZWUgdDk3MDAtcGVybC1naXQuc2ggZm9yIGFuIGV4YW1wbGUuCisKKwkjIFRoZSBleHRlcm5hbCB0ZXN0IHdpbGwgb3V0cHV0cyBpdHMgb3duIHBsYW4KKwl0ZXN0X2V4dGVybmFsX2hhc190YXA9MQorCisgLSB0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyIFs8cHJlcmVxPl0gPG1lc3NhZ2U+IDxleHRlcm5hbD4gPHNjcmlwdD4KKworICAgTGlrZSB0ZXN0X2V4dGVybmFsIGJ1dCBmYWlsIGlmIHRoZXJlJ3MgYW55IG91dHB1dCBvbiBzdGRlcnIsCisgICBpbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSBleGl0IGNvZGUuCisKKwl0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyIFwKKwkgICAgJ1BlcmwgQVBJJyBcCisJICAgIHBlcmwgIiRURVNUX0RJUkVDVE9SWSIvdDk3MDAvdGVzdC5wbAorCisgLSB0ZXN0X2V4cGVjdF9jb2RlIDxleGl0LWNvZGU+IDxjb21tYW5kPgorCisgICBSdW4gYSBjb21tYW5kIGFuZCBlbnN1cmUgdGhhdCBpdCBleGl0cyB3aXRoIHRoZSBnaXZlbiBleGl0IGNvZGUuCisgICBGb3IgZXhhbXBsZToKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01lcmdlIHdpdGggZC9mIGNvbmZsaWN0cycgJworCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlICJtZXJnZSBtc2ciIEIgbWFzdGVyCisJJworCisgLSB0ZXN0X211c3RfZmFpbCA8Z2l0LWNvbW1hbmQ+CisKKyAgIFJ1biBhIGdpdCBjb21tYW5kIGFuZCBlbnN1cmUgaXQgZmFpbHMgaW4gYSBjb250cm9sbGVkIHdheS4gIFVzZQorICAgdGhpcyBpbnN0ZWFkIG9mICIhIDxnaXQtY29tbWFuZD4iLiAgV2hlbiBnaXQtY29tbWFuZCBkaWVzIGR1ZSB0byBhCisgICBzZWdmYXVsdCwgdGVzdF9tdXN0X2ZhaWwgZGlhZ25vc2VzIGl0IGFzIGFuIGVycm9yOyAiISA8Z2l0LWNvbW1hbmQ+IgorICAgdHJlYXRzIGl0IGFzIGp1c3QgYW5vdGhlciBleHBlY3RlZCBmYWlsdXJlLCB3aGljaCB3b3VsZCBsZXQgc3VjaCBhCisgICBidWcgZ28gdW5ub3RpY2VkLgorCisgLSB0ZXN0X21pZ2h0X2ZhaWwgPGdpdC1jb21tYW5kPgorCisgICBTaW1pbGFyIHRvIHRlc3RfbXVzdF9mYWlsLCBidXQgdG9sZXJhdGUgc3VjY2VzcywgdG9vLiAgVXNlIHRoaXMKKyAgIGluc3RlYWQgb2YgIjxnaXQtY29tbWFuZD4gfHwgOiIgdG8gY2F0Y2ggZmFpbHVyZXMgZHVlIHRvIHNlZ3YuCisKKyAtIHRlc3RfY21wIDxleHBlY3RlZD4gPGFjdHVhbD4KKworICAgQ2hlY2sgd2hldGhlciB0aGUgY29udGVudCBvZiB0aGUgPGFjdHVhbD4gZmlsZSBtYXRjaGVzIHRoZQorICAgPGV4cGVjdGVkPiBmaWxlLiAgVGhpcyBiZWhhdmVzIGxpa2UgImNtcCIgYnV0IHByb2R1Y2VzIG1vcmUKKyAgIGhlbHBmdWwgb3V0cHV0IHdoZW4gdGhlIHRlc3QgaXMgcnVuIHdpdGggIi12IiBvcHRpb24uCisKKyAtIHRlc3RfbGluZV9jb3VudCAoPSB8IC1sdCB8IC1nZSB8IC4uLikgPGxlbmd0aD4gPGZpbGU+CisKKyAgIENoZWNrIHdoZXRoZXIgYSBmaWxlIGhhcyB0aGUgbGVuZ3RoIGl0IGlzIGV4cGVjdGVkIHRvLgorCisgLSB0ZXN0X3BhdGhfaXNfZmlsZSA8cGF0aD4gWzxkaWFnbm9zaXM+XQorICAgdGVzdF9wYXRoX2lzX2RpciA8cGF0aD4gWzxkaWFnbm9zaXM+XQorICAgdGVzdF9wYXRoX2lzX21pc3NpbmcgPHBhdGg+IFs8ZGlhZ25vc2lzPl0KKworICAgQ2hlY2sgaWYgdGhlIG5hbWVkIHBhdGggaXMgYSBmaWxlLCBpZiB0aGUgbmFtZWQgcGF0aCBpcyBhCisgICBkaXJlY3RvcnksIG9yIGlmIHRoZSBuYW1lZCBwYXRoIGRvZXMgbm90IGV4aXN0LCByZXNwZWN0aXZlbHksCisgICBhbmQgZmFpbCBvdGhlcndpc2UsIHNob3dpbmcgdGhlIDxkaWFnbm9zaXM+IHRleHQuCisKKyAtIHRlc3Rfd2hlbl9maW5pc2hlZCA8c2NyaXB0PgorCisgICBQcmVwZW5kIDxzY3JpcHQ+IHRvIGEgbGlzdCBvZiBjb21tYW5kcyB0byBydW4gdG8gY2xlYW4gdXAKKyAgIGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgdGVzdC4gIElmIHNvbWUgY2xlYW4tdXAgY29tbWFuZAorICAgZmFpbHMsIHRoZSB0ZXN0IHdpbGwgbm90IHBhc3MuCisKKyAgIEV4YW1wbGU6CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggcG9pbnRpbmcgdG8gbm9uLWNvbW1pdCcgJworCQlnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9ID4uZ2l0L3JlZnMvaGVhZHMvaW52YWxpZCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvaW52YWxpZCIgJiYKKwkJLi4uCisJJworCisgLSB0ZXN0X3dyaXRlX2xpbmVzIDxsaW5lcz4KKworICAgV3JpdGUgPGxpbmVzPiBvbiBzdGFuZGFyZCBvdXRwdXQsIG9uZSBsaW5lIHBlciBhcmd1bWVudC4KKyAgIFVzZWZ1bCB0byBwcmVwYXJlIG11bHRpLWxpbmUgZmlsZXMgaW4gYSBjb21wYWN0IGZvcm0uCisKKyAgIEV4YW1wbGU6CisKKwl0ZXN0X3dyaXRlX2xpbmVzIGEgYiBjIGQgZSBmIGcgPmZvbworCisgICBJcyBhIG1vcmUgY29tcGFjdCBlcXVpdmFsZW50IG9mOgorCWNhdCA+Zm9vIDw8LUVPRgorCWEKKwliCisJYworCWQKKwllCisJZgorCWcKKwlFT0YKKworCisgLSB0ZXN0X3BhdXNlCisKKwlUaGlzIGNvbW1hbmQgaXMgdXNlZnVsIGZvciB3cml0aW5nIGFuZCBkZWJ1Z2dpbmcgdGVzdHMgYW5kIG11c3QgYmUKKwlyZW1vdmVkIGJlZm9yZSBzdWJtaXR0aW5nLiBJdCBoYWx0cyB0aGUgZXhlY3V0aW9uIG9mIHRoZSB0ZXN0IGFuZAorCXNwYXducyBhIHNoZWxsIGluIHRoZSB0cmFzaCBkaXJlY3RvcnkuIEV4aXQgdGhlIHNoZWxsIHRvIGNvbnRpbnVlCisJdGhlIHRlc3QuIEV4YW1wbGU6CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0JyAnCisJCWdpdCBkby1zb21ldGhpbmcgPmFjdHVhbCAmJgorCQl0ZXN0X3BhdXNlICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworIC0gdGVzdF9sbl9zX2FkZCA8cGF0aDE+IDxwYXRoMj4KKworICAgVGhpcyBmdW5jdGlvbiBoZWxwcyBzeXN0ZW1zIHdob3NlIGZpbGVzeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBzeW1ib2xpYworICAgbGlua3MuIFVzZSBpdCB0byBhZGQgYSBzeW1ib2xpYyBsaW5rIGVudHJ5IHRvIHRoZSBpbmRleCB3aGVuIGl0IGlzIG5vdAorICAgaW1wb3J0YW50IHRoYXQgdGhlIGZpbGUgc3lzdGVtIGVudHJ5IGlzIGEgc3ltYm9saWMgbGluaywgaS5lLiwgaW5zdGVhZAorICAgb2YgdGhlIHNlcXVlbmNlCisKKwlsbiAtcyBmb28gYmFyICYmCisJZ2l0IGFkZCBiYXIKKworICAgU29tZXRpbWVzIGl0IGlzIHBvc3NpYmxlIHRvIHNwbGl0IGEgdGVzdCBpbiBhIHBhcnQgdGhhdCBkb2VzIG5vdCBuZWVkCisgICB0aGUgc3ltYm9saWMgbGluayBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIGEgcGFydCB0aGF0IGRvZXM7IHRoZW4gb25seQorICAgdGhlIGxhdHRlciBwYXJ0IG5lZWQgYmUgcHJvdGVjdGVkIGJ5IGEgU1lNTElOS1MgcHJlcmVxdWlzaXRlIChzZWUgYmVsb3cpLgorCitQcmVyZXF1aXNpdGVzCistLS0tLS0tLS0tLS0tCisKK1RoZXNlIGFyZSB0aGUgcHJlcmVxdWlzaXRlcyB0aGF0IHRoZSB0ZXN0IGxpYnJhcnkgcHJlZGVmaW5lcyB3aXRoCit0ZXN0X2hhdmVfcHJlcmVxLgorCitTZWUgdGhlIHByZXJlcSBhcmd1bWVudCB0byB0aGUgdGVzdF8qIGZ1bmN0aW9ucyBpbiB0aGUgIlRlc3QgaGFybmVzcworbGlicmFyeSIgc2VjdGlvbiBhYm92ZSBhbmQgdGhlICJ0ZXN0X2hhdmVfcHJlcmVxIiBmdW5jdGlvbiBmb3IgaG93IHRvCit1c2UgdGhlc2UsIGFuZCAidGVzdF9zZXRfcHJlcmVxIiBmb3IgaG93IHRvIGRlZmluZSB5b3VyIG93bi4KKworIC0gUFlUSE9OCisKKyAgIEdpdCB3YXNuJ3QgY29tcGlsZWQgd2l0aCBOT19QWVRIT049WWVzUGxlYXNlLiBXcmFwIGFueSB0ZXN0cyB0aGF0CisgICBuZWVkIFB5dGhvbiB3aXRoIHRoaXMuCisKKyAtIFBFUkwKKworICAgR2l0IHdhc24ndCBjb21waWxlZCB3aXRoIE5PX1BFUkw9WWVzUGxlYXNlLgorCisgICBFdmVuIHdpdGhvdXQgdGhlIFBFUkwgcHJlcmVxdWlzaXRlLCB0ZXN0cyBjYW4gYXNzdW1lIHRoZXJlIGlzIGEKKyAgIHVzYWJsZSBwZXJsIGludGVycHJldGVyIGF0ICRQRVJMX1BBVEgsIHRob3VnaCBpdCBuZWVkIG5vdCBiZQorICAgcGFydGljdWxhcmx5IG1vZGVybi4KKworIC0gUE9TSVhQRVJNCisKKyAgIFRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIFBPU0lYIHN0eWxlIHBlcm1pc3Npb24gYml0cy4KKworIC0gQlNMQVNIUFNQRUMKKworICAgQmFja3NsYXNoZXMgaW4gcGF0aHNwZWMgYXJlIG5vdCBkaXJlY3Rvcnkgc2VwYXJhdG9ycy4gVGhpcyBpcyBub3QKKyAgIHNldCBvbiBXaW5kb3dzLiBTZWUgNmZkMTEwNmEgZm9yIGRldGFpbHMuCisKKyAtIEVYRUNLRUVQU1BJRAorCisgICBUaGUgcHJvY2VzcyByZXRhaW5zIHRoZSBzYW1lIHBpZCBhY3Jvc3MgZXhlYygyKS4gU2VlIGZiOWEyYmVhIGZvcgorICAgZGV0YWlscy4KKworIC0gUElQRQorCisgICBUaGUgZmlsZXN5c3RlbSB3ZSdyZSBvbiBzdXBwb3J0cyBjcmVhdGlvbiBvZiBGSUZPcyAobmFtZWQgcGlwZXMpCisgICB2aWEgbWtmaWZvKDEpLgorCisgLSBTWU1MSU5LUworCisgICBUaGUgZmlsZXN5c3RlbSB3ZSdyZSBvbiBzdXBwb3J0cyBzeW1ib2xpYyBsaW5rcy4gRS5nLiBhIEZBVAorICAgZmlsZXN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgdGhlc2UuIFNlZSA3MDRhMzE0MyBmb3IgZGV0YWlscy4KKworIC0gU0FOSVRZCisKKyAgIFRlc3QgaXMgbm90IHJ1biBieSByb290IHVzZXIsIGFuZCBhbiBhdHRlbXB0IHRvIHdyaXRlIHRvIGFuCisgICB1bndyaXRhYmxlIGZpbGUgaXMgZXhwZWN0ZWQgdG8gZmFpbCBjb3JyZWN0bHkuCisKKyAtIExJQlBDUkUKKworICAgR2l0IHdhcyBjb21waWxlZCB3aXRoIFVTRV9MSUJQQ1JFPVllc1BsZWFzZS4gV3JhcCBhbnkgdGVzdHMKKyAgIHRoYXQgdXNlIGdpdC1ncmVwIC0tcGVybC1yZWdleHAgb3IgZ2l0LWdyZXAgLVAgaW4gdGhlc2UuCisKKyAtIENBU0VfSU5TRU5TSVRJVkVfRlMKKworICAgVGVzdCBpcyBydW4gb24gYSBjYXNlIGluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtLgorCisgLSBVVEY4X05GRF9UT19ORkMKKworICAgVGVzdCBpcyBydW4gb24gYSBmaWxlc3lzdGVtIHdoaWNoIGNvbnZlcnRzIGRlY29tcG9zZWQgdXRmLTggKG5mZCkKKyAgIHRvIHByZWNvbXBvc2VkIHV0Zi04IChuZmMpLgorCitUaXBzIGZvciBXcml0aW5nIFRlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FzIHdpdGggYW55IHByb2dyYW1taW5nIHByb2plY3RzLCBleGlzdGluZyBwcm9ncmFtcyBhcmUgdGhlIGJlc3QKK3NvdXJjZSBvZiB0aGUgaW5mb3JtYXRpb24uICBIb3dldmVyLCBkbyBfbm90XyBlbXVsYXRlCit0MDAwMC1iYXNpYy5zaCB3aGVuIHdyaXRpbmcgeW91ciB0ZXN0cy4gIFRoZSB0ZXN0IGlzIHNwZWNpYWwgaW4KK3RoYXQgaXQgdHJpZXMgdG8gdmFsaWRhdGUgdGhlIHZlcnkgY29yZSBvZiBHSVQuICBGb3IgZXhhbXBsZSwgaXQKK2tub3dzIHRoYXQgdGhlcmUgd2lsbCBiZSAyNTYgc3ViZGlyZWN0b3JpZXMgdW5kZXIgLmdpdC9vYmplY3RzLywKK2FuZCBpdCBrbm93cyB0aGF0IHRoZSBvYmplY3QgSUQgb2YgYW4gZW1wdHkgdHJlZSBpcyBhIGNlcnRhaW4KKzQwLWJ5dGUgc3RyaW5nLiAgVGhpcyBpcyBkZWxpYmVyYXRlbHkgZG9uZSBzbyBpbiB0MDAwMC1iYXNpYy5zaAorYmVjYXVzZSB0aGUgdGhpbmdzIHRoZSB2ZXJ5IGJhc2ljIGNvcmUgdGVzdCB0cmllcyB0byBhY2hpZXZlIGlzCit0byBzZXJ2ZSBhcyBhIGJhc2lzIGZvciBwZW9wbGUgd2hvIGFyZSBjaGFuZ2luZyB0aGUgR0lUIGludGVybmFsCitkcmFzdGljYWxseS4gIEZvciB0aGVzZSBwZW9wbGUsIGFmdGVyIG1ha2luZyBjZXJ0YWluIGNoYW5nZXMsCitub3Qgc2VlaW5nIGZhaWx1cmVzIGZyb20gdGhlIGJhc2ljIHRlc3QgX2lzXyBhIGZhaWx1cmUuICBBbmQKK3N1Y2ggZHJhc3RpYyBjaGFuZ2VzIHRvIHRoZSBjb3JlIEdJVCB0aGF0IGV2ZW4gY2hhbmdlcyB0aGVzZQorb3RoZXJ3aXNlIHN1cHBvc2VkbHkgc3RhYmxlIG9iamVjdCBJRHMgc2hvdWxkIGJlIGFjY29tcGFuaWVkIGJ5CithbiB1cGRhdGUgdG8gdDAwMDAtYmFzaWMuc2guCisKK0hvd2V2ZXIsIG90aGVyIHRlc3RzIHRoYXQgc2ltcGx5IHJlbHkgb24gYmFzaWMgcGFydHMgb2YgdGhlIGNvcmUKK0dJVCB3b3JraW5nIHByb3Blcmx5IHNob3VsZCBub3QgaGF2ZSB0aGF0IGxldmVsIG9mIGludGltYXRlCitrbm93bGVkZ2Ugb2YgdGhlIGNvcmUgR0lUIGludGVybmFscy4gIElmIGFsbCB0aGUgdGVzdCBzY3JpcHRzCitoYXJkY29kZWQgdGhlIG9iamVjdCBJRHMgbGlrZSB0MDAwMC1iYXNpYy5zaCBkb2VzLCB0aGF0IGRlZmVhdHMKK3RoZSBwdXJwb3NlIG9mIHQwMDAwLWJhc2ljLnNoLCB3aGljaCBpcyB0byBpc29sYXRlIHRoYXQgbGV2ZWwgb2YKK3ZhbGlkYXRpb24gaW4gb25lIHBsYWNlLiAgWW91ciB0ZXN0IGFsc28gZW5kcyB1cCBuZWVkaW5nCit1cGRhdGluZyB3aGVuIHN1Y2ggYSBjaGFuZ2UgdG8gdGhlIGludGVybmFsIGhhcHBlbnMsIHNvIGRvIF9ub3RfCitkbyBpdCBhbmQgbGVhdmUgdGhlIGxvdyBsZXZlbCBvZiB2YWxpZGF0aW9uIHRvIHQwMDAwLWJhc2ljLnNoLgorCitUZXN0IGNvdmVyYWdlCistLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gdXNlIHRoZSBjb3ZlcmFnZSB0ZXN0cyB0byBmaW5kIGNvZGUgcGF0aHMgdGhhdCBhcmUgbm90IGJlaW5nCit1c2VkIG9yIHByb3Blcmx5IGV4ZXJjaXNlZCB5ZXQuCisKK1RvIGRvIHRoYXQsIHJ1biB0aGUgY292ZXJhZ2UgdGFyZ2V0IGF0IHRoZSB0b3AtbGV2ZWwgKG5vdCBpbiB0aGUgdC8KK2RpcmVjdG9yeSk6CisKKyAgICBtYWtlIGNvdmVyYWdlCisKK1RoYXQnbGwgY29tcGlsZSBHaXQgd2l0aCBHQ0MncyBjb3ZlcmFnZSBhcmd1bWVudHMsIGFuZCBnZW5lcmF0ZSBhIHRlc3QKK3JlcG9ydCB3aXRoIGdjb3YgYWZ0ZXIgdGhlIHRlc3RzIGZpbmlzaC4gUnVubmluZyB0aGUgY292ZXJhZ2UgdGVzdHMKK2NhbiB0YWtlIGEgd2hpbGUsIHNpbmNlIHJ1bm5pbmcgdGhlIHRlc3RzIGluIHBhcmFsbGVsIGlzIGluY29tcGF0aWJsZQord2l0aCBHQ0MncyBjb3ZlcmFnZSBtb2RlLgorCitBZnRlciB0aGUgdGVzdHMgaGF2ZSBydW4geW91IGNhbiBnZW5lcmF0ZSBhIGxpc3Qgb2YgdW50ZXN0ZWQKK2Z1bmN0aW9uczoKKworICAgIG1ha2UgY292ZXJhZ2UtdW50ZXN0ZWQtZnVuY3Rpb25zCisKK1lvdSBjYW4gYWxzbyBnZW5lcmF0ZSBhIGRldGFpbGVkIHBlci1maWxlIEhUTUwgcmVwb3J0IHVzaW5nIHRoZQorRGV2ZWw6OkNvdmVyIG1vZHVsZS4gVG8gaW5zdGFsbCBpdCBkbzoKKworICAgIyBPbiBEZWJpYW4gb3IgVWJ1bnR1OgorICAgc3VkbyBhcHRpdHVkZSBpbnN0YWxsIGxpYmRldmVsLWNvdmVyLXBlcmwKKworICAgIyBGcm9tIHRoZSBDUEFOIHdpdGggY3Bhbm1pbnVzCisgICBjdXJsIC1MIGh0dHA6Ly9jcGFubWluLnVzIHwgcGVybCAtIC0tc3VkbyAtLXNlbGYtdXBncmFkZQorICAgY3Bhbm0gLS1zdWRvIERldmVsOjpDb3ZlcgorCitUaGVuLCBhdCB0aGUgdG9wLWxldmVsOgorCisgICAgbWFrZSBjb3Zlcl9kYl9odG1sCisKK1RoYXQnbGwgZ2VuZXJhdGUgYSBkZXRhaWxlZCBjb3ZlciByZXBvcnQgaW4gdGhlICJjb3Zlcl9kYl9odG1sIgorZGlyZWN0b3J5LCB3aGljaCB5b3UgY2FuIHRoZW4gY29weSB0byBhIHdlYnNlcnZlciwgb3IgaW5zcGVjdCBsb2NhbGx5CitpbiBhIGJyb3dzZXIuCmRpZmYgLS1naXQgYS90L2FnZ3JlZ2F0ZS1yZXN1bHRzLnNoIGIvdC9hZ2dyZWdhdGUtcmVzdWx0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43OTEzZTIwCi0tLSAvZGV2L251bGwKKysrIGIvdC9hZ2dyZWdhdGUtcmVzdWx0cy5zaApAQCAtMCwwICsxLDQ2IEBACisjIS9iaW4vc2gKKworZmFpbGVkX3Rlc3RzPQorZml4ZWQ9MAorc3VjY2Vzcz0wCitmYWlsZWQ9MAorYnJva2VuPTAKK3RvdGFsPTAKKword2hpbGUgcmVhZCBmaWxlCitkbworCXdoaWxlIHJlYWQgdHlwZSB2YWx1ZQorCWRvCisJCWNhc2UgJHR5cGUgaW4KKwkJJycpCisJCQljb250aW51ZSA7OworCQlmaXhlZCkKKwkJCWZpeGVkPSQoKCRmaXhlZCArICR2YWx1ZSkpIDs7CisJCXN1Y2Nlc3MpCisJCQlzdWNjZXNzPSQoKCRzdWNjZXNzICsgJHZhbHVlKSkgOzsKKwkJZmFpbGVkKQorCQkJZmFpbGVkPSQoKCRmYWlsZWQgKyAkdmFsdWUpKQorCQkJaWYgdGVzdCAkdmFsdWUgIT0gMAorCQkJdGhlbgorCQkJCXRlc3RudW09JChleHByICIkZmlsZSIgOiAndGVzdC1yZXN1bHRzL1wodFswLTldKlwpLScpCisJCQkJZmFpbGVkX3Rlc3RzPSIkZmFpbGVkX3Rlc3RzICR0ZXN0bnVtIgorCQkJZmkKKwkJCTs7CisJCWJyb2tlbikKKwkJCWJyb2tlbj0kKCgkYnJva2VuICsgJHZhbHVlKSkgOzsKKwkJdG90YWwpCisJCQl0b3RhbD0kKCgkdG90YWwgKyAkdmFsdWUpKSA7OworCQllc2FjCisJZG9uZSA8IiRmaWxlIgorZG9uZQorCitpZiB0ZXN0IC1uICIkZmFpbGVkX3Rlc3RzIgordGhlbgorCXByaW50ZiAiXG5mYWlsZWQgdGVzdChzKTokZmFpbGVkX3Rlc3RzXG5cbiIKK2ZpCisKK3ByaW50ZiAiJS04cyVkXG4iIGZpeGVkICRmaXhlZAorcHJpbnRmICIlLThzJWRcbiIgc3VjY2VzcyAkc3VjY2VzcworcHJpbnRmICIlLThzJWRcbiIgZmFpbGVkICRmYWlsZWQKK3ByaW50ZiAiJS04cyVkXG4iIGJyb2tlbiAkYnJva2VuCitwcmludGYgIiUtOHMlZFxuIiB0b3RhbCAkdG90YWwKZGlmZiAtLWdpdCBhL3QvYW5ub3RhdGUtdGVzdHMuc2ggYi90L2Fubm90YXRlLXRlc3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNjczYjMKLS0tIC9kZXYvbnVsbAorKysgYi90L2Fubm90YXRlLXRlc3RzLnNoCkBAIC0wLDAgKzEsNTY5IEBACisjIFRoaXMgZmlsZSBpc24ndCB1c2VkIGFzIGEgdGVzdCBzY3JpcHQgZGlyZWN0bHksIGluc3RlYWQgaXQgaXMKKyMgc291cmNlZCBmcm9tIHQ4MDAxLWFubm90YXRlLnNoIGFuZCB0ODAwMi1ibGFtZS5zaC4KKworaWYgdGVzdF9oYXZlX3ByZXJlcSBNSU5HVwordGhlbgorICBzYW5pdGl6ZV9MICgpIHsKKwllY2hvICIkMSIgfCBzZWQgJ3NYXCheLUxcfCxcKVxeXD8vWCZcXDsqWGcnCisgIH0KK2Vsc2UKKyAgc2FuaXRpemVfTCAoKSB7CisJZWNobyAiJDEiCisgIH0KK2ZpCisKK2NoZWNrX2NvdW50ICgpIHsKKwloZWFkPSAmJgorCWZpbGU9J2ZpbGUnICYmCisJb3B0aW9ucz0gJiYKKwl3aGlsZSA6CisJZG8KKwkJY2FzZSAiJDEiIGluCisJCS1oKSBoZWFkPSIkMiI7IHNoaWZ0OyBzaGlmdCA7OworCQktZikgZmlsZT0iJDIiOyBzaGlmdDsgc2hpZnQgOzsKKwkJLUwqKSBvcHRpb25zPSIkb3B0aW9ucyAkKHNhbml0aXplX0wgIiQxIikiOyBzaGlmdCA7OworCQktKikgb3B0aW9ucz0iJG9wdGlvbnMgJDEiOyBzaGlmdCA7OworCQkqKSBicmVhayA7OworCQllc2FjCisJZG9uZSAmJgorCWVjaG8gIiRQUk9HICRvcHRpb25zICRmaWxlICRoZWFkIiA+JjQgJiYKKwkkUFJPRyAkb3B0aW9ucyAkZmlsZSAkaGVhZCA+YWN0dWFsICYmCisJcGVybCAtZSAnCisJCW15ICVleHBlY3QgPSAoQEFSR1YpOworCQlteSAlY291bnQgPSBtYXAgeyAkXyA9PiAwIH0ga2V5cyAlZXhwZWN0OworCQl3aGlsZSAoPFNURElOPikgeworCQkJaWYgKC9eWzAtOWEtZl0rXHRcKChbXlx0XSspXHQvKSB7CisJCQkJbXkgJGF1dGhvciA9ICQxOworCQkJCWZvciAoJGF1dGhvcikgeyBzL15ccyovLzsgcy9ccyokLy87IH0KKwkJCQkkY291bnR7JGF1dGhvcn0rKzsKKwkJCX0KKwkJfQorCQlteSAkYmFkID0gMDsKKwkJd2hpbGUgKG15ICgkYXV0aG9yLCAkY291bnQpID0gZWFjaCAlY291bnQpIHsKKwkJCW15ICRvazsKKwkJCW15ICR2YWx1ZSA9IDA7CisJCQkkdmFsdWUgPSAkZXhwZWN0eyRhdXRob3J9IGlmIGRlZmluZWQgJGV4cGVjdHskYXV0aG9yfTsKKwkJCWlmICgkdmFsdWUgIT0gJGNvdW50KSB7CisJCQkJJGJhZCA9IDE7CisJCQkJJG9rID0gImJhZCI7CisJCQl9CisJCQllbHNlIHsKKwkJCQkkb2sgPSAiZ29vZCI7CisJCQl9CisJCQlwcmludCBTVERFUlIgIkF1dGhvciAkYXV0aG9yIChleHBlY3RlZCAkdmFsdWUsIGF0dHJpYnV0ZWQgJGNvdW50KSAkb2tcbiI7CisJCX0KKwkJZXhpdCgkYmFkKTsKKwknICIkQCIgPGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBBIGxpbmVzJyAnCisJZWNobyAiMUEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIiA+ZmlsZSAmJgorCWVjaG8gImxhenkgZG9nIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkEiIEdJVF9BVVRIT1JfRU1BSUw9IkFAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJJbml0aWFsLiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgMSBhdXRob3InICcKKwljaGVja19jb3VudCBBIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgQiBsaW5lcycgJworCWVjaG8gIjJBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSIgPj5maWxlICYmCisJZWNobyAibGF6eSBkb2ciID4+ZmlsZSAmJgorCUdJVF9BVVRIT1JfTkFNRT0iQiIgR0lUX0FVVEhPUl9FTUFJTD0iQkB0ZXN0LmdpdCIgXAorCWdpdCBjb21taXQgLWEgLW0gIlNlY29uZC4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIDIgYXV0aG9ycycgJworCWNoZWNrX2NvdW50IEEgMiBCIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgQjEgbGluZXMgKGJyYW5jaDEpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDEgbWFzdGVyICYmCisJZWNobyAiM0Egc2xvdyBncmVlbiBmb3gganVtcHMgaW50byB0aGUiID4+ZmlsZSAmJgorCWVjaG8gIndlbGwuIiA+PmZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkIxIiBHSVRfQVVUSE9SX0VNQUlMPSJCMUB0ZXN0LmdpdCIgXAorCWdpdCBjb21taXQgLWEgLW0gIkJyYW5jaDEtMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgMiBhdXRob3JzICsgMSBicmFuY2gxIGF1dGhvcicgJworCWNoZWNrX2NvdW50IEEgMiBCIDIgQjEgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBCMiBsaW5lcyAoYnJhbmNoMiknICcKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBtYXN0ZXIgJiYKKwlzZWQgLWUgInMvMkEgcXVpY2sgYnJvd24vNEEgcXVpY2sgYnJvd24gbGF6eSBkb2cvIiA8ZmlsZSA+ZmlsZS5uZXcgJiYKKwltdiBmaWxlLm5ldyBmaWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSJCMiIgR0lUX0FVVEhPUl9FTUFJTD0iQjJAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJCcmFuY2gyLTEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIDIgYXV0aG9ycyArIDEgYnJhbmNoMiBhdXRob3InICcKKwljaGVja19jb3VudCBBIDIgQiAxIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYnJhbmNoMSAmIGJyYW5jaDInICcKKwlnaXQgbWVyZ2UgYnJhbmNoMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAyIGF1dGhvcnMgKyAyIG1lcmdlZC1pbiBhdXRob3JzJyAnCisJY2hlY2tfY291bnQgQSAyIEIgMSBCMSAyIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLS1maXJzdC1wYXJlbnQgYmxhbWVzIG1lcmdlIGZvciBicmFuY2gxJyAnCisJY2hlY2tfY291bnQgLS1maXJzdC1wYXJlbnQgQSAyIEIgMSAiQSBVIFRob3IiIDIgQjIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBhbmNlc3RvcicgJworCWNoZWNrX2NvdW50IC1oIG1hc3RlciBBIDIgQiAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGdyZWF0LWFuY2VzdG9yJyAnCisJY2hlY2tfY291bnQgLWggbWFzdGVyXiBBIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXZpbCBtZXJnZScgJworCWVjaG8gImV2aWwgbWVyZ2UuIiA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC0tYW1lbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZXZpbCBtZXJnZScgJworCWNoZWNrX2NvdW50IEEgMiBCIDEgQjEgMiBCMiAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBodWdlIGdyYWZ0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgYnJhbmNoMiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaW5mby9ncmFmdHMiICYmCisJZ3JhZnQ9ICYmCisJZm9yIGkgaW4gMCAxIDIKKwlkbworCQlmb3IgaiBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5CisJCWRvCisJCQlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gIiRpJGoiICYmCisJCQlwcmludGYgIiVzXG4iICIkaSIgIiRqIiA+ZmlsZSAmJgorCQkJdGVzdF90aWNrICYmCisJCQlHSVRfQVVUSE9SX05BTUU9JGkkaiBHSVRfQVVUSE9SX0VNQUlMPSRpJGpAdGVzdC5naXQgXAorCQkJZ2l0IGNvbW1pdCAtYSAtbSAiJGkkaiIgJiYKKwkJCWNvbW1pdD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkJCWdyYWZ0PSIkZ3JhZnQkY29tbWl0ICIKKwkJZG9uZQorCWRvbmUgJiYKKwlwcmludGYgIiVzICIgJGdyYWZ0ID4uZ2l0L2luZm8vZ3JhZnRzICYmCisJY2hlY2tfY291bnQgLWggMDAgMDEgMSAxMCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGluY29tcGxldGUgbGluZScgJworCWVjaG8gImluY29tcGxldGUiIHwgdHIgLWQgIlxcMDEyIiA+PmZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkMiIEdJVF9BVVRIT1JfRU1BSUw9IkNAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJJbmNvbXBsZXRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBpbmNvbXBsZXRlIGxpbmUnICcKKwljaGVja19jb3VudCBBIDIgQiAxIEIxIDIgQjIgMSAiQSBVIFRob3IiIDEgQyAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGVkaXRzJyAnCisJbXYgZmlsZSBmaWxlLm9yaWcgJiYKKwl7CisJCWNhdCBmaWxlLm9yaWcgJiYKKwkJZWNobworCX0gfCBzZWQgLWUgInMvXjNBLzk5LyIgLWUgIi9eMUEvZCIgLWUgIi9eaW5jb21wbGV0ZS9kIiA+ZmlsZSAmJgorCWVjaG8gImluY29tcGxldGUiIHwgdHIgLWQgIlxcMDEyIiA+PmZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkQiIEdJVF9BVVRIT1JfRU1BSUw9IkRAdGVzdC5naXQiIFwKKwlnaXQgY29tbWl0IC1hIC1tICJlZGl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBlZGl0cycgJworCWNoZWNrX2NvdW50IEEgMSBCIDEgQjEgMSBCMiAxICJBIFUgVGhvciIgMSBDIDEgRCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9iZnVzY2F0ZWQgZW1haWwnICcKKwllY2hvICJObyByb2JvdHMgYWxsb3dlZCIgPmZpbGUubmV3ICYmCisJY2F0IGZpbGUgPj5maWxlLm5ldyAmJgorCW12IGZpbGUubmV3IGZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkUiIEdJVF9BVVRIT1JfRU1BSUw9IkUgYXQgdGVzdCBkb3QgZ2l0IiBcCisJZ2l0IGNvbW1pdCAtYSAtbSAibm9yb2JvdHMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIG9iZnVzY2F0ZWQgZW1haWwnICcKKwljaGVja19jb3VudCBBIDEgQiAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEgQyAxIEQgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMSAoYWxsKScgJworCWNoZWNrX2NvdW50IC1MMSBBIDEgQiAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEgQyAxIEQgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgLCAoYWxsKScgJworCWNoZWNrX2NvdW50IC1MLCBBIDEgQiAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEgQyAxIEQgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCAoWCB0byBlbmQpJyAnCisJY2hlY2tfY291bnQgLUw1IEIxIDEgQyAxIEQgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwgKFggdG8gZW5kKScgJworCWNoZWNrX2NvdW50IC1MNSwgQjEgMSBDIDEgRCAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsWSAodXAgdG8gWSknICcKKwljaGVja19jb3VudCAtTCwzIEEgMSBCMiAxIEUgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLFgnICcKKwljaGVja19jb3VudCAtTDMsMyBCMiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsWScgJworCWNoZWNrX2NvdW50IC1MMyw2IEIgMSBCMSAxIEIyIDEgRCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFksWCAodW5kb2N1bWVudGVkKScgJworCWNoZWNrX2NvdW50IC1MNiwzIEIgMSBCMSAxIEIyIDEgRCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC1YJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwtMSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDAnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDAgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsMCcgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MLDAgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsKzAnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTCwrMCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsKzAnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEsKzAgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLCsxJyAnCisJY2hlY2tfY291bnQgLUwzLCsxIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwrTicgJworCWNoZWNrX2NvdW50IC1MMywrNCBCIDEgQjEgMSBCMiAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsLTAnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTCwtMCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsLTAnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEsLTAgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYLC0xJyAnCisJY2hlY2tfY291bnQgLUwzLC0xIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwtTicgJworCWNoZWNrX2NvdW50IC1MNiwtNCBCIDEgQjEgMSBCMiAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvIChSRSB0byBlbmQpJyAnCisJY2hlY2tfY291bnQgLUwvZXZpbC8gQyAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvLC9SRTIvJyAnCisJY2hlY2tfY291bnQgLUwvcm9ib3QvLC9ncmVlbi8gQSAxIEIgMSBCMiAxIEQgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwvUkUvJyAnCisJY2hlY2tfY291bnQgLUw1LC9ldmlsLyBCMSAxIEQgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgL1JFLyxZJyAnCisJY2hlY2tfY291bnQgLUwvOTkvLDcgQjEgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC9SRS8sK04nICcKKwljaGVja19jb3VudCAtTC85OS8sKzMgQjEgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC9SRS8sLU4nICcKKwljaGVja19jb3VudCAtTC85OS8sLTMgQiAxIEIyIDEgRCAxCisnCisKKyMgJ2ZpbGUnIGVuZHMgd2l0aCBhbiBpbmNvbXBsZXRlIGxpbmUsIHNvICd3YycgcmVwb3J0cyBvbmUgZmV3ZXIgbGluZXMgdGhhbgorIyBnaXQtYmxhbWUgc2VlcywgaGVuY2UgdGhlIGxhc3QgbGluZSBpcyBhY3R1YWxseSAkKHdjLi4uKSsxLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCAoWCA9PSBubGluZXMpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8ZmlsZSkgKyAxKSAmJgorCWNoZWNrX2NvdW50IC1MJG4gQyAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFggKFggPT0gbmxpbmVzICsgMSknICcKKwluPSQoZXhwciAkKHdjIC1sIDxmaWxlKSArIDIpICYmCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwkbiBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFggKFggPiBubGluZXMpJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxMjM0NSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MICxZIChZID09IG5saW5lcyknICcKKwluPSQoZXhwciAkKHdjIC1sIDxmaWxlKSArIDEpICYmCisJY2hlY2tfY291bnQgLUwsJG4gQSAxIEIgMSBCMSAxIEIyIDEgIkEgVSBUaG9yIiAxIEMgMSBEIDEgRSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MICxZIChZID09IG5saW5lcyArIDEpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8ZmlsZSkgKyAyKSAmJgorCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MLCRuIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgLFkgKFkgPiBubGluZXMpJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwsMTIzNDUgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBtdWx0aXBsZSAoZGlzam9pbnQpJyAnCisJY2hlY2tfY291bnQgLUwyLDMgLUw2LDcgQSAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgbXVsdGlwbGUgKGRpc2pvaW50OiB1bm9yZGVyZWQpJyAnCisJY2hlY2tfY291bnQgLUw2LDcgLUwyLDMgQSAxIEIxIDEgQjIgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgbXVsdGlwbGUgKGFkamFjZW50KScgJworCWNoZWNrX2NvdW50IC1MMiwzIC1MNCw1IEEgMSBCIDEgQjIgMSBEIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgbXVsdGlwbGUgKGFkamFjZW50OiB1bm9yZGVyZWQpJyAnCisJY2hlY2tfY291bnQgLUw0LDUgLUwyLDMgQSAxIEIgMSBCMiAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBtdWx0aXBsZSAob3ZlcmxhcHBpbmcpJyAnCisJY2hlY2tfY291bnQgLUwyLDQgLUwzLDUgQSAxIEIgMSBCMiAxIEQgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBtdWx0aXBsZSAob3ZlcmxhcHBpbmc6IHVub3JkZXJlZCknICcKKwljaGVja19jb3VudCAtTDMsNSAtTDIsNCBBIDEgQiAxIEIyIDEgRCAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIG11bHRpcGxlIChzdXBlcnNldC9zdWJzZXQpJyAnCisJY2hlY2tfY291bnQgLUwyLDggLUwzLDUgQSAxIEIgMSBCMSAxIEIyIDEgQyAxIEQgMSAiQSBVIFRob3IiIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgbXVsdGlwbGUgKHN1cGVyc2V0L3N1YnNldDogdW5vcmRlcmVkKScgJworCWNoZWNrX2NvdW50IC1MMyw1IC1MMiw4IEEgMSBCIDEgQjEgMSBCMiAxIEMgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC9SRS8gKHJlbGF0aXZlKScgJworCWNoZWNrX2NvdW50IC1MMywzIC1ML2ZveC8gQjEgMSBCMiAxIEMgMSBEIDEgIkEgVSBUaG9yIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC9SRS8gKHJlbGF0aXZlOiBubyBwcmVjZWRpbmcgcmFuZ2UpJyAnCisJY2hlY2tfY291bnQgLUwvZG9nLyBBIDEgQiAxIEIxIDEgQjIgMSBDIDEgRCAxICJBIFUgVGhvciIgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAvUkUvIChyZWxhdGl2ZTogYWRqYWNlbnQpJyAnCisJY2hlY2tfY291bnQgLUwxLDEgLUwvZG9nLywrMSBBIDEgRSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC9SRS8gKHJlbGF0aXZlOiBub3QgZm91bmQpJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUw0LDQgLUwvZG9nLyBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIC9SRS8gKHJlbGF0aXZlOiBlbmQtb2YtZmlsZSknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTCwgLUwvJC8gZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBeL1JFLyAoYWJzb2x1dGUpJyAnCisJY2hlY2tfY291bnQgLUwzLDMgLUxeL2RvZy8sKzIgQSAxIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgXi9SRS8gKGFic29sdXRlOiBubyBwcmVjZWRpbmcgcmFuZ2UpJyAnCisJY2hlY2tfY291bnQgLUxeL2RvZy8sKzIgQSAxIEIyIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgXi9SRS8gKGFic29sdXRlOiBub3QgZm91bmQpJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUw0LDQgLUxeL3RhbWJvdXJpbmUvIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgXi9SRS8gKGFic29sdXRlOiBlbmQtb2YtZmlsZSknICcKKwluPSQoZXhwciAkKHdjIC1sIDxmaWxlKSArIDEpICYmCisJY2hlY2tfY291bnQgLUwkbiAtTF4vJC8sKzIgQSAxIEMgMSBFIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLUwgOnJlZ2V4JyAnCisJdHIgUSAiXFx0IiA+aGVsbG8uYyA8PC1cRU9GICYmCisJaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKKwl7CisJUXB1dHMoImhlbGxvIik7CisJfQorCUVPRgorCWdpdCBhZGQgaGVsbG8uYyAmJgorCUdJVF9BVVRIT1JfTkFNRT0iRiIgR0lUX0FVVEhPUl9FTUFJTD0iRkB0ZXN0LmdpdCIgXAorCWdpdCBjb21taXQgLW0gImhlbGxvIiAmJgorCisJbXYgaGVsbG8uYyBoZWxsby5vcmlnICYmCisJc2VkIC1lICIvfS8ge3g7IHMvJC9RcHV0cyhcImdvb2RieWVcIik7LzsgRzt9IiA8aGVsbG8ub3JpZyB8CisJdHIgUSAiXFx0IiA+aGVsbG8uYyAmJgorCUdJVF9BVVRIT1JfTkFNRT0iRyIgR0lUX0FVVEhPUl9FTUFJTD0iR0B0ZXN0LmdpdCIgXAorCWdpdCBjb21taXQgLWEgLW0gImdvb2RieWUiICYmCisKKwltdiBoZWxsby5jIGhlbGxvLm9yaWcgJiYKKwllY2hvICIjaW5jbHVkZSA8c3RkaW8uaD4iID5oZWxsby5jICYmCisJY2F0IGhlbGxvLm9yaWcgPj5oZWxsby5jICYmCisJdHIgUSAiXFx0IiA+PmhlbGxvLmMgPDwtXEVPRiAmJgorCXZvaWQgbWFpbCgpCisJeworCVFwdXRzKCJtYWlsIik7CisJfQorCUVPRgorCUdJVF9BVVRIT1JfTkFNRT0iSCIgR0lUX0FVVEhPUl9FTUFJTD0iSEB0ZXN0LmdpdCIgXAorCWdpdCBjb21taXQgLWEgLW0gIm1haWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDpsaXRlcmFsJyAnCisJY2hlY2tfY291bnQgLWYgaGVsbG8uYyAtTDptYWluIEYgNCBHIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgOnJlZ2V4JyAnCisJY2hlY2tfY291bnQgLWYgaGVsbG8uYyAiLUw6bVthLXpdW2Etel1sIiBIIDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgOm5vbWF0Y2gnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDpub21hdGNoIGhlbGxvLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgOlJFIChyZWxhdGl2ZSknICcKKwljaGVja19jb3VudCAtZiBoZWxsby5jIC1MMywzIC1MOm1hLi4gRiAxIEggNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCA6UkUgKHJlbGF0aXZlOiBubyBwcmVjZWRpbmcgcmFuZ2UpJyAnCisJY2hlY2tfY291bnQgLWYgaGVsbG8uYyAtTDptYS4uIEYgNCBHIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgOlJFIChyZWxhdGl2ZTogbm90IGZvdW5kKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMywzIC1MOnRhbWJvdXJpbmUgaGVsbG8uYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCA6UkUgKHJlbGF0aXZlOiBlbmQtb2YtZmlsZSknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTCwgLUw6bWFpbiBoZWxsby5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIF46UkUgKGFic29sdXRlKScgJworCWNoZWNrX2NvdW50IC1mIGhlbGxvLmMgLUwzLDMgLUxeOm1hLi4gRiA0IEcgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBeOlJFIChhYnNvbHV0ZTogbm8gcHJlY2VkaW5nIHJhbmdlKScgJworCWNoZWNrX2NvdW50IC1mIGhlbGxvLmMgLUxeOm1hLi4gRiA0IEcgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBeOlJFIChhYnNvbHV0ZTogbm90IGZvdW5kKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MNCw0IC1MXjp0YW1ib3VyaW5lIGhlbGxvLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgXjpSRSAoYWJzb2x1dGU6IGVuZC1vZi1maWxlKScgJworCW49JChwcmludGYgIiVkIiAkKHdjIC1sIDxoZWxsby5jKSkgJiYKKwljaGVja19jb3VudCAtZiBoZWxsby5jIC1MJG4gLUxeOm1hLi4gRiA0IEcgMSBIIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgaW5jcmVtZW50YWwnICcKKwkoCisJR0lUX0FVVEhPUl9OQU1FPUkgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9OQU1FICYmCisJR0lUX0FVVEhPUl9FTUFJTD1JQHRlc3QuZ2l0ICYmCisJZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwgJiYKKwk+aW5jcmVtZW50YWwgJiYKKwlnaXQgYWRkIGluY3JlbWVudGFsICYmCisJZ2l0IGNvbW1pdCAtbSAic3RlcCAwIiAmJgorCXByaW50ZiAicGFydGlhbCIgPj5pbmNyZW1lbnRhbCAmJgorCWdpdCBjb21taXQgLWEgLW0gInN0ZXAgMC41IiAmJgorCWVjaG8gPj5pbmNyZW1lbnRhbCAmJgorCWdpdCBjb21taXQgLWEgLW0gInN0ZXAgMSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGVtcHR5JyAnCisJY2hlY2tfY291bnQgLWggSEVBRF5eIC1mIGluY3JlbWVudGFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDAgZW1wdHknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDAgaW5jcmVtZW50YWwgSEVBRF5eCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDEgZW1wdHknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEgaW5jcmVtZW50YWwgSEVBRF5eCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDIgZW1wdHknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDIgaW5jcmVtZW50YWwgSEVBRF5eCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGhhbGYnICcKKwljaGVja19jb3VudCAtaCBIRUFEXiAtZiBpbmNyZW1lbnRhbCBJIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMCBoYWxmJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwwIGluY3JlbWVudGFsIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDEgaGFsZicgJworCWNoZWNrX2NvdW50IC1oIEhFQUReIC1mIGluY3JlbWVudGFsIC1MMSBJIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgMiBoYWxmJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwyIGluY3JlbWVudGFsIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDMgaGFsZicgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMyBpbmNyZW1lbnRhbCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBmdWxsJyAnCisJY2hlY2tfY291bnQgLWYgaW5jcmVtZW50YWwgSSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDAgZnVsbCcgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMCBpbmNyZW1lbnRhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAxIGZ1bGwnICcKKwljaGVja19jb3VudCAtZiBpbmNyZW1lbnRhbCAtTDEgSSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIDIgZnVsbCcgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMiBpbmNyZW1lbnRhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAzIGZ1bGwnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDMgaW5jcmVtZW50YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwnICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsKycgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MMSwrIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwtJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxLC0gZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCBYIChub24tbnVtZXJpYyBYKScgJworCXRlc3RfbXVzdF9mYWlsICRQUk9HIC1MWCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsWSAobm9uLW51bWVyaWMgWSknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEsWSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIFgsK04gKG5vbi1udW1lcmljIE4pJyAnCisJdGVzdF9tdXN0X2ZhaWwgJFBST0cgLUwxLCtOIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgWCwtTiAobm9uLW51bWVyaWMgTiknICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEsLU4gZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtTCAsXi9SRS8nICcKKwl0ZXN0X211c3RfZmFpbCAkUFJPRyAtTDEsXi85OS8gZmlsZQorJwpkaWZmIC0tZ2l0IGEvdC9jaGVjay1ub24tcG9ydGFibGUtc2hlbGwucGwgYi90L2NoZWNrLW5vbi1wb3J0YWJsZS1zaGVsbC5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTcwY2JjCi0tLSAvZGV2L251bGwKKysrIGIvdC9jaGVjay1ub24tcG9ydGFibGUtc2hlbGwucGwKQEAgLTAsMCArMSwyOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgVGVzdCB0MDAwMC4udDk5OTkuc2ggZm9yIG5vbiBwb3J0YWJsZSBzaGVsbCBzY3JpcHRzCisjIFRoaXMgc2NyaXB0IGNhbiBiZSBjYWxsZWQgd2l0aCBvbmUgb3IgbW9yZSBmaWxlbmFtZXMgYXMgcGFyYW1ldGVycworCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCitteSAkZXhpdF9jb2RlPTA7CisKK3N1YiBlcnIgeworCW15ICRtc2cgPSBzaGlmdDsKKwlwcmludCAiJEFSR1Y6JC46IGVycm9yOiAkbXNnOiAkX1xuIjsKKwkkZXhpdF9jb2RlID0gMTsKK30KKword2hpbGUgKDw+KSB7CisJY2hvbXA7CisJL1xic2VkXHMrLWkvIGFuZCBlcnIgJ3NlZCAtaSBpcyBub3QgcG9ydGFibGUnOworCS9cYmVjaG9ccystbi8gYW5kIGVyciAnZWNobyAtbiBpcyBub3QgcG9ydGFibGUgKHBsZWFzZSB1c2UgcHJpbnRmKSc7CisJL15ccypkZWNsYXJlXHMrLyBhbmQgZXJyICdhcnJheXMvZGVjbGFyZSBub3QgcG9ydGFibGUnOworCS9eXHMqW14jXVxzKndoaWNoXHMvIGFuZCBlcnIgJ3doaWNoIGlzIG5vdCBwb3J0YWJsZSAocGxlYXNlIHVzZSB0eXBlKSc7CisJL1xidGVzdFxzK1tePV0qPT0vIGFuZCBlcnIgJyJ0ZXN0IGEgPT0gYiIgaXMgbm90IHBvcnRhYmxlIChwbGVhc2UgdXNlID0pJzsKKwkvXGJleHBvcnRccytbQS1aYS16MC05X10qPS8gYW5kIGVyciAnImV4cG9ydCBGT089YmFyIiBpcyBub3QgcG9ydGFibGUgKHBsZWFzZSB1c2UgRk9PPWJhciAmJiBleHBvcnQgRk9PKSc7CisJIyB0aGlzIHJlc2V0cyBvdXIgJC4gZm9yIGVhY2ggZmlsZQorCWNsb3NlIEFSR1YgaWYgZW9mOworfQorZXhpdCAkZXhpdF9jb2RlOwpkaWZmIC0tZ2l0IGEvdC9kaWZmLWxpYi5zaCBiL3QvZGlmZi1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxMWRjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvZGlmZi1saWIuc2gKQEAgLTAsMCArMSwzOSBAQAorOgorCitzYW5pdGl6ZV9kaWZmX3Jhdz0nL146L3MvICciXCgkX3g0MFwpIicgJyJcKCRfeDQwXCkiJyBcKFtBLVpdXClbMC05XSoJLyBcMSBcMiBcMyMJLycKK2NvbXBhcmVfZGlmZl9yYXcgKCkgeworICAgICMgV2hlbiBoZXVyaXN0aWNzIGFyZSBpbXByb3ZlZCwgdGhlIHNjb3JlIG51bWJlcnMgd291bGQgY2hhbmdlLgorICAgICMgSWdub3JlIHRoZW0gd2hpbGUgY29tcGFyaW5nLgorICAgICMgQWxzbyB3ZSBkbyBub3QgY2hlY2sgU0hBMSBoYXNoIGdlbmVyYXRpb24gaW4gdGhpcyB0ZXN0LCB3aGljaAorICAgICMgaXMgYSBqb2IgZm9yIHQwMDAwLWJhc2ljLnNoCisKKyAgICBzZWQgLWUgIiRzYW5pdGl6ZV9kaWZmX3JhdyIgPCIkMSIgPi50bXAtMQorICAgIHNlZCAtZSAiJHNhbml0aXplX2RpZmZfcmF3IiA8IiQyIiA+LnRtcC0yCisgICAgdGVzdF9jbXAgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCit9CisKK3Nhbml0aXplX2RpZmZfcmF3X3o9Jy9eOi9zLyAnIiRfeDQwIicgJyIkX3g0MCInIFwoW0EtWl1cKVswLTldKiQvIFggWCBcMSMvJworY29tcGFyZV9kaWZmX3Jhd196ICgpIHsKKyAgICAjIFdoZW4gaGV1cmlzdGljcyBhcmUgaW1wcm92ZWQsIHRoZSBzY29yZSBudW1iZXJzIHdvdWxkIGNoYW5nZS4KKyAgICAjIElnbm9yZSB0aGVtIHdoaWxlIGNvbXBhcmluZy4KKyAgICAjIEFsc28gd2UgZG8gbm90IGNoZWNrIFNIQTEgaGFzaCBnZW5lcmF0aW9uIGluIHRoaXMgdGVzdCwgd2hpY2gKKyAgICAjIGlzIGEgam9iIGZvciB0MDAwMC1iYXNpYy5zaAorCisgICAgcGVybCAtcGUgJ3kvXDAwMC9cMDEyLycgPCIkMSIgfCBzZWQgLWUgIiRzYW5pdGl6ZV9kaWZmX3Jhd196IiA+LnRtcC0xCisgICAgcGVybCAtcGUgJ3kvXDAwMC9cMDEyLycgPCIkMiIgfCBzZWQgLWUgIiRzYW5pdGl6ZV9kaWZmX3Jhd196IiA+LnRtcC0yCisgICAgdGVzdF9jbXAgLnRtcC0xIC50bXAtMiAmJiBybSAtZiAudG1wLTEgLnRtcC0yCit9CisKK2NvbXBhcmVfZGlmZl9wYXRjaCAoKSB7CisgICAgIyBXaGVuIGhldXJpc3RpY3MgYXJlIGltcHJvdmVkLCB0aGUgc2NvcmUgbnVtYmVycyB3b3VsZCBjaGFuZ2UuCisgICAgIyBJZ25vcmUgdGhlbSB3aGlsZSBjb21wYXJpbmcuCisgICAgc2VkIC1lICcKKwkvXltkaXNdKmltaWxhcml0eSBpbmRleCBbMC05XSolJC9kCisJL15pbmRleCBbMC05YS1mXSpcLlwuWzAtOWEtZl0vZAorICAgICcgPCIkMSIgPi50bXAtMQorICAgIHNlZCAtZSAnCisJL15bZGlzXSppbWlsYXJpdHkgaW5kZXggWzAtOV0qJSQvZAorCS9eaW5kZXggWzAtOWEtZl0qXC5cLlswLTlhLWZdL2QKKyAgICAnIDwiJDIiID4udG1wLTIKKyAgICB0ZXN0X2NtcCAudG1wLTEgLnRtcC0yICYmIHJtIC1mIC50bXAtMSAudG1wLTIKK30KZGlmZiAtLWdpdCBhL3QvZGlmZi1saWIvQ09QWUlORyBiL3QvZGlmZi1saWIvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmY4N2M0Ci0tLSAvZGV2L251bGwKKysrIGIvdC9kaWZmLWxpYi9DT1BZSU5HCkBAIC0wLDAgKzEsMzYxIEBACisKKyBOb3RlIHRoYXQgdGhlIG9ubHkgdmFsaWQgdmVyc2lvbiBvZiB0aGUgR1BMIGFzIGZhciBhcyB0aGlzIHByb2plY3QKKyBpcyBjb25jZXJuZWQgaXMgX3RoaXNfIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSAoaWUgdjIsIG5vdAorIHYyLjIgb3IgdjMueCBvciB3aGF0ZXZlciksIHVubGVzcyBleHBsaWNpdGx5IG90aGVyd2lzZSBzdGF0ZWQuCisKKyBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKKyBhIGdvb2QgaWRlYSwgSSBhbHNvIGFzayB0aGF0IHBlb3BsZSBpbnZvbHZlZCB3aXRoIHRoZSBwcm9qZWN0IG1ha2UKKyB0aGVpciBwcmVmZXJlbmNlcyBrbm93bi4gSW4gcGFydGljdWxhciwgaWYgeW91IHRydXN0IG1lIHRvIG1ha2UgdGhhdAorIGRlY2lzaW9uLCB5b3UgbWlnaHQgbm90ZSBzbyBpbiB5b3VyIGNvcHlyaWdodCBtZXNzYWdlLCBpZSBzb21ldGhpbmcKKyBsaWtlCisKKwlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCisJYXQgdGhlIGRpc2NyZXRpb24gb2YgTGludXMuCisKKyAgbWlnaHQgYXZvaWQgaXNzdWVzLiBCdXQgd2UgY2FuIGFsc28ganVzdCBkZWNpZGUgdG8gc3luY2hyb25pemUgYW5kCisgIGNvbnRhY3QgYWxsIGNvcHlyaWdodCBob2xkZXJzIG9uIHJlY29yZCBpZi93aGVuIHRoZSBvY2Nhc2lvbiBhcmlzZXMuCisKKwkJCUxpbnVzIFRvcnZhbGRzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL3QvZGlmZi1saWIvUkVBRE1FIGIvdC9kaWZmLWxpYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4MTQyYwotLS0gL2Rldi9udWxsCisrKyBiL3QvZGlmZi1saWIvUkVBRE1FCkBAIC0wLDAgKzEsNDYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCUdJVCAtIHRoZSBzdHVwaWQgY29udGVudCB0cmFja2VyCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworImdpdCIgY2FuIG1lYW4gYW55dGhpbmcsIGRlcGVuZGluZyBvbiB5b3VyIG1vb2QuCisKKyAtIHJhbmRvbSB0aHJlZS1sZXR0ZXIgY29tYmluYXRpb24gdGhhdCBpcyBwcm9ub3VuY2VhYmxlLCBhbmQgbm90CisgICBhY3R1YWxseSB1c2VkIGJ5IGFueSBjb21tb24gVU5JWCBjb21tYW5kLiAgVGhlIGZhY3QgdGhhdCBpdCBpcyBhCisgICBtaXNwcm9udW5jaWF0aW9uIG9mICJnZXQiIG1heSBvciBtYXkgbm90IGJlIHJlbGV2YW50LgorIC0gc3R1cGlkLiBjb250ZW1wdGlibGUgYW5kIGRlc3BpY2FibGUuIHNpbXBsZS4gVGFrZSB5b3VyIHBpY2sgZnJvbSB0aGUKKyAgIGRpY3Rpb25hcnkgb2Ygc2xhbmcuCisgLSAiZ2xvYmFsIGluZm9ybWF0aW9uIHRyYWNrZXIiOiB5b3UncmUgaW4gYSBnb29kIG1vb2QsIGFuZCBpdCBhY3R1YWxseQorICAgd29ya3MgZm9yIHlvdS4gQW5nZWxzIHNpbmcsIGFuZCBhIGxpZ2h0IHN1ZGRlbmx5IGZpbGxzIHRoZSByb29tLgorIC0gImdvZGRhbW4gaWRpb3RpYyB0cnVja2xvYWQgb2Ygc2gqdCI6IHdoZW4gaXQgYnJlYWtzCisKK0dpdCBpcyBhIGZhc3QsIHNjYWxhYmxlLCBkaXN0cmlidXRlZCByZXZpc2lvbiBjb250cm9sIHN5c3RlbSB3aXRoIGFuCit1bnVzdWFsbHkgcmljaCBjb21tYW5kIHNldCB0aGF0IHByb3ZpZGVzIGJvdGggaGlnaC1sZXZlbCBvcGVyYXRpb25zCithbmQgZnVsbCBhY2Nlc3MgdG8gaW50ZXJuYWxzLgorCitHaXQgaXMgYW4gT3BlbiBTb3VyY2UgcHJvamVjdCBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0l0IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgd2l0aCBoZWxwIG9mIGEgZ3JvdXAgb2YKK2hhY2tlcnMgYXJvdW5kIHRoZSBuZXQuIEl0IGlzIGN1cnJlbnRseSBtYWludGFpbmVkIGJ5IEp1bmlvIEMgSGFtYW5vLgorCitQbGVhc2UgcmVhZCB0aGUgZmlsZSBJTlNUQUxMIGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgorU2VlIERvY3VtZW50YXRpb24vdHV0b3JpYWwudHh0IHRvIGdldCBzdGFydGVkLCB0aGVuIHNlZQorRG9jdW1lbnRhdGlvbi9ldmVyeWRheS50eHQgZm9yIGEgdXNlZnVsIG1pbmltdW0gc2V0IG9mIGNvbW1hbmRzLAorYW5kICJtYW4gZ2l0LWNvbW1hbmRuYW1lIiBmb3IgZG9jdW1lbnRhdGlvbiBvZiBlYWNoIGNvbW1hbmQuCitDVlMgdXNlcnMgbWF5IGFsc28gd2FudCB0byByZWFkIERvY3VtZW50YXRpb24vY3ZzLW1pZ3JhdGlvbi50eHQuCisKK01hbnkgR2l0IG9ubGluZSByZXNvdXJjZXMgYXJlIGFjY2Vzc2libGUgZnJvbSBodHRwOi8vZ2l0Lm9yLmN6LworaW5jbHVkaW5nIGZ1bGwgZG9jdW1lbnRhdGlvbiBhbmQgR2l0IHJlbGF0ZWQgdG9vbHMuCisKK1RoZSB1c2VyIGRpc2N1c3Npb24gYW5kIGRldmVsb3BtZW50IG9mIEdpdCB0YWtlIHBsYWNlIG9uIHRoZSBHaXQKK21haWxpbmcgbGlzdCAtLSBldmVyeW9uZSBpcyB3ZWxjb21lIHRvIHBvc3QgYnVnIHJlcG9ydHMsIGZlYXR1cmUKK3JlcXVlc3RzLCBjb21tZW50cyBhbmQgcGF0Y2hlcyB0byBnaXRAdmdlci5rZXJuZWwub3JnLiBUbyBzdWJzY3JpYmUKK3RvIHRoZSBsaXN0LCBzZW5kIGFuIGVtYWlsIHdpdGgganVzdCAic3Vic2NyaWJlIGdpdCIgaW4gdGhlIGJvZHkgdG8KK21ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcuIFRoZSBtYWlsaW5nIGxpc3QgYXJjaGl2ZXMgYXJlIGF2YWlsYWJsZSBhdAoraHR0cDovL21hcmMudGhlYWltc2dyb3VwLmNvbS8/bD1naXQgYW5kIG90aGVyIGFyY2hpdmFsIHNpdGVzLgorCitUaGUgbWVzc2FnZXMgdGl0bGVkICJBIG5vdGUgZnJvbSB0aGUgbWFpbnRhaW5lciIsICJXaGF0J3MgaW4KK2dpdC5naXQgKHN0YWJsZSkiIGFuZCAiV2hhdCdzIGNvb2tpbmcgaW4gZ2l0LmdpdCAodG9waWNzKSIgYW5kCit0aGUgZGlzY3Vzc2lvbiBmb2xsb3dpbmcgdGhlbSBvbiB0aGUgbWFpbGluZyBsaXN0IGdpdmUgYSBnb29kCityZWZlcmVuY2UgZm9yIHByb2plY3Qgc3RhdHVzLCBkZXZlbG9wbWVudCBkaXJlY3Rpb24gYW5kCityZW1haW5pbmcgdGFza3MuCmRpZmYgLS1naXQgYS90L2dpdHdlYi1saWIuc2ggYi90L2dpdHdlYi1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVkYWI1YQotLS0gL2Rldi9udWxsCisrKyBiL3QvZ2l0d2ViLWxpYi5zaApAQCAtMCwwICsxLDExNyBAQAorIyBJbml0aWFsaXphdGlvbiBhbmQgaGVscGVycyBmb3IgR2l0d2ViIHRlc3RzLCB3aGljaCBzb3VyY2UgdGhpcworIyBzaGVsbCBsaWJyYXJ5IGluc3RlYWQgb2YgdGVzdC1saWIuc2guCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKYWt1YiBOYXJlYnNraQorIworCitnaXR3ZWJfaW5pdCAoKSB7CisJc2FmZV9wd2Q9IiQocGVybCAtTVBPU0lYPWdldGN3ZCAtZSAncHJpbnQgcXVvdGVtZXRhKGdldGN3ZCknKSIKKwljYXQgPmdpdHdlYl9jb25maWcucGVybCA8PEVPRgorIyEvdXNyL2Jpbi9wZXJsCisKKyMgZ2l0d2ViIGNvbmZpZ3VyYXRpb24gZm9yIHRlc3RzCisKK291ciBcJHZlcnNpb24gPSAnY3VycmVudCc7CitvdXIgXCRHSVQgPSAnZ2l0JzsKK291ciBcJHByb2plY3Ryb290ID0gIiRzYWZlX3B3ZCI7CitvdXIgXCRwcm9qZWN0X21heGRlcHRoID0gODsKK291ciBcJGhvbWVfbGlua19zdHIgPSAncHJvamVjdHMnOworb3VyIFwkc2l0ZV9uYW1lID0gJ1tsb2NhbGhvc3RdJzsKK291ciBcJHNpdGVfaHRtbF9oZWFkX3N0cmluZyA9ICcnOworb3VyIFwkc2l0ZV9oZWFkZXIgPSAnJzsKK291ciBcJHNpdGVfZm9vdGVyID0gJyc7CitvdXIgXCRob21lX3RleHQgPSAnaW5kZXh0ZXh0Lmh0bWwnOworb3VyIEBzdHlsZXNoZWV0cyA9ICgnZmlsZTovLy8kR0lUX0JVSUxEX0RJUi9naXR3ZWIvc3RhdGljL2dpdHdlYi5jc3MnKTsKK291ciBcJGxvZ28gPSAnZmlsZTovLy8kR0lUX0JVSUxEX0RJUi9naXR3ZWIvc3RhdGljL2dpdC1sb2dvLnBuZyc7CitvdXIgXCRmYXZpY29uID0gJ2ZpbGU6Ly8vJEdJVF9CVUlMRF9ESVIvZ2l0d2ViL3N0YXRpYy9naXQtZmF2aWNvbi5wbmcnOworb3VyIFwkcHJvamVjdHNfbGlzdCA9ICcnOworb3VyIFwkZXhwb3J0X29rID0gJyc7CitvdXIgXCRzdHJpY3RfZXhwb3J0ID0gJyc7CitvdXIgXCRtYXhsb2FkID0gdW5kZWY7CisKK0VPRgorCisJY2F0ID4uZ2l0L2Rlc2NyaXB0aW9uIDw8RU9GCiskMCB0ZXN0IHJlcG9zaXRvcnkKK0VPRgorCisJIyBZb3UgY2FuIHNldCB0aGUgR0lUV0VCX1RFU1RfSU5TVEFMTEVEIGVudmlyb25tZW50IHZhcmlhYmxlIHRvCisJIyB0aGUgZ2l0d2ViZGlyICh0aGUgZGlyZWN0b3J5IHdoZXJlIGdpdHdlYiBpcyBpbnN0YWxsZWQgLyBkZXBsb3llZCB0bykKKwkjIG9mIGFuIGV4aXN0aW5nIGdpdHdlYiBpbnN0YWxsYXRpb24gdG8gdGVzdCB0aGF0IGluc3RhbGxhdGlvbiwKKwkjIG9yIHNpbXBseSB0byBwYXRobmFtZSBvZiBpbnN0YWxsZWQgZ2l0d2ViIHNjcmlwdC4KKwlpZiB0ZXN0IC1uICIkR0lUV0VCX1RFU1RfSU5TVEFMTEVEIiA7IHRoZW4KKwkJaWYgdGVzdCAtZCAkR0lUV0VCX1RFU1RfSU5TVEFMTEVEOyB0aGVuCisJCQlTQ1JJUFRfTkFNRT0iJEdJVFdFQl9URVNUX0lOU1RBTExFRC9naXR3ZWIuY2dpIgorCQllbHNlCisJCQlTQ1JJUFRfTkFNRT0iJEdJVFdFQl9URVNUX0lOU1RBTExFRCIKKwkJZmkKKwkJdGVzdCAtZiAiJFNDUklQVF9OQU1FIiB8fAorCQllcnJvciAiQ2Fubm90IGZpbmQgZ2l0d2ViIGF0ICRHSVRXRUJfVEVTVF9JTlNUQUxMRUQuIgorCQlzYXkgIiMgVGVzdGluZyAkU0NSSVBUX05BTUUiCisJZWxzZSAjIG5vcm1hbCBjYXNlLCB1c2Ugc291cmNlIHZlcnNpb24gb2YgZ2l0d2ViCisJCVNDUklQVF9OQU1FPSIkR0lUX0JVSUxEX0RJUi9naXR3ZWIvZ2l0d2ViLnBlcmwiCisJZmkKKwlleHBvcnQgU0NSSVBUX05BTUUKK30KKworZ2l0d2ViX3J1biAoKSB7CisJR0FURVdBWV9JTlRFUkZBQ0U9J0NHSS8xLjEnCisJSFRUUF9BQ0NFUFQ9JyovKicKKwlSRVFVRVNUX01FVEhPRD0nR0VUJworCVFVRVJZX1NUUklORz0iIiQxIiIKKwlQQVRIX0lORk89IiIkMiIiCisJZXhwb3J0IEdBVEVXQVlfSU5URVJGQUNFIEhUVFBfQUNDRVBUIFJFUVVFU1RfTUVUSE9EIFwKKwkJUVVFUllfU1RSSU5HIFBBVEhfSU5GTworCisJR0lUV0VCX0NPTkZJRz0kKHB3ZCkvZ2l0d2ViX2NvbmZpZy5wZXJsCisJZXhwb3J0IEdJVFdFQl9DT05GSUcKKworCSMgc29tZSBvZiBnaXQgY29tbWFuZHMgd3JpdGUgdG8gU1RERVJSIG9uIGVycm9yLCBidXQgdGhpcyBpcyBub3QKKwkjIHdyaXR0ZW4gdG8gd2ViIHNlcnZlciBsb2dzLCBzbyB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhhdDoKKwkjIHdlIGFyZSBpbnRlcmVzdGVkIG9ubHkgaW4gcHJvcGVybHkgZm9ybWF0dGVkIGVycm9ycy93YXJuaW5ncworCXJtIC1mIGdpdHdlYi5sb2cgJiYKKwlwZXJsIC0tICIkU0NSSVBUX05BTUUiIFwKKwkJPmdpdHdlYi5vdXRwdXQgMj5naXR3ZWIubG9nICYmCisJcGVybCAtdyAtZSAnCisJCW9wZW4gTywgIj5naXR3ZWIuaGVhZGVycyI7CisJCXdoaWxlICg8PikgeworCQkJcHJpbnQgTzsKKwkJCWxhc3QgaWYgKC9eXHIkLyB8fCAvXiQvKTsKKwkJfQorCQlvcGVuIE8sICI+Z2l0d2ViLmJvZHkiOworCQl3aGlsZSAoPD4pIHsKKwkJCXByaW50IE87CisJCX0KKwkJY2xvc2UgTzsKKwknIGdpdHdlYi5vdXRwdXQgJiYKKwlpZiBncmVwICdeW1tdJyBnaXR3ZWIubG9nID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQl0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmxvZyA+JjInICYmCisJCWZhbHNlCisJZWxzZQorCQl0cnVlCisJZmkKKworCSMgZ2l0d2ViLmxvZyBpcyBsZWZ0IGZvciBkZWJ1Z2dpbmcKKwkjIGdpdHdlYi5vdXRwdXQgaXMgdXNlZCB0byBwYXJzZSBIVFRQIG91dHB1dAorCSMgZ2l0d2ViLmhlYWRlcnMgY29udGFpbnMgb25seSBIVFRQIGhlYWRlcnMKKwkjIGdpdHdlYi5ib2R5IGNvbnRhaW5zIGJvZHkgb2YgbWVzc2FnZSwgd2l0aG91dCBoZWFkZXJzCit9CisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXR3ZWIgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKK3BlcmwgLU1FbmNvZGUgLWUgJyRlPSIiO2RlY29kZV91dGY4KCRlLCBFbmNvZGU6OkZCX0NST0FLKScgPi9kZXYvbnVsbCAyPiYxIHx8IHsKKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0d2ViIHRlc3RzLCBwZXJsIHZlcnNpb24gaXMgdG9vIG9sZCcKKwl0ZXN0X2RvbmUKK30KKworcGVybCAtTUNHSSAtTUNHSTo6VXRpbCAtTUNHSTo6Q2FycCAtZSAwID4vZGV2L251bGwgMj4mMSB8fCB7CisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdHdlYiB0ZXN0cywgQ0dJIG1vZHVsZSB1bnVzYWJsZScKKwl0ZXN0X2RvbmUKK30KKworZ2l0d2ViX2luaXQKZGlmZiAtLWdpdCBhL3QvbGliLWJhc2guc2ggYi90L2xpYi1iYXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZTk1NWYKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1iYXNoLnNoCkBAIC0wLDAgKzEsMTcgQEAKKyMgU2hlbGwgbGlicmFyeSBzb3VyY2VkIGluc3RlYWQgb2YgLi90ZXN0LWxpYi5zaCBieSB0ZXN0cyB0aGF0IG5lZWQKKyMgdG8gcnVuIHVuZGVyIEJhc2g7IHByaW1hcmlseSBpbnRlbmRlZCBmb3IgdGVzdHMgb2YgdGhlIGNvbXBsZXRpb24KKyMgc2NyaXB0LgorCitpZiB0ZXN0IC1uICIkQkFTSCIgJiYgdGVzdCAteiAiJFBPU0lYTFlfQ09SUkVDVCI7IHRoZW4KKwkjIHdlIGFyZSBpbiBmdWxsLW9uIGJhc2ggbW9kZQorCXRydWUKK2VsaWYgdHlwZSBiYXNoID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSMgZXhlY3V0ZSBpbiBmdWxsLW9uIGJhc2ggbW9kZQorCXVuc2V0IFBPU0lYTFlfQ09SUkVDVAorCWV4ZWMgYmFzaCAiJDAiICIkQCIKK2Vsc2UKKwllY2hvICcxLi4wICNTS0lQIHNraXBwaW5nIGJhc2ggY29tcGxldGlvbiB0ZXN0czsgYmFzaCBub3QgYXZhaWxhYmxlJworCWV4aXQgMAorZmkKKworLiAuL3Rlc3QtbGliLnNoCmRpZmYgLS1naXQgYS90L2xpYi1jcmVkZW50aWFsLnNoIGIvdC9saWItY3JlZGVudGlhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kOGU0MWY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItY3JlZGVudGlhbC5zaApAQCAtMCwwICsxLDI4NyBAQAorIyEvYmluL3NoCisKKyMgVHJ5IGEgc2V0IG9mIGNyZWRlbnRpYWwgaGVscGVyczsgdGhlIGV4cGVjdGVkIHN0ZGluLAorIyBzdGRvdXQgYW5kIHN0ZGVyciBzaG91bGQgYmUgcHJvdmlkZWQgb24gc3RkaW4sCisjIHNlcGFyYXRlZCBieSAiLS0iLgorY2hlY2soKSB7CisJY3JlZGVudGlhbF9vcHRzPQorCWNyZWRlbnRpYWxfY21kPSQxCisJc2hpZnQKKwlmb3IgYXJnIGluICIkQCI7IGRvCisJCWNyZWRlbnRpYWxfb3B0cz0iJGNyZWRlbnRpYWxfb3B0cyAtYyBjcmVkZW50aWFsLmhlbHBlcj0nJGFyZyciCisJZG9uZQorCXJlYWRfY2h1bmsgPnN0ZGluICYmCisJcmVhZF9jaHVuayA+ZXhwZWN0LXN0ZG91dCAmJgorCXJlYWRfY2h1bmsgPmV4cGVjdC1zdGRlcnIgJiYKKwlpZiAhIGV2YWwgImdpdCAkY3JlZGVudGlhbF9vcHRzIGNyZWRlbnRpYWwgJGNyZWRlbnRpYWxfY21kIDxzdGRpbiA+c3Rkb3V0IDI+c3RkZXJyIjsgdGhlbgorCQllY2hvICJnaXQgY3JlZGVudGlhbCBmYWlsZWQgd2l0aCBjb2RlICQ/IiAmJgorCQljYXQgc3RkZXJyICYmCisJCWZhbHNlCisJZmkgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtc3Rkb3V0IHN0ZG91dCAmJgorCXRlc3RfY21wIGV4cGVjdC1zdGRlcnIgc3RkZXJyCit9CisKK3JlYWRfY2h1bmsoKSB7CisJd2hpbGUgcmVhZCBsaW5lOyBkbworCQljYXNlICIkbGluZSIgaW4KKwkJLS0pIGJyZWFrIDs7CisJCSopIGVjaG8gIiRsaW5lIiA7OworCQllc2FjCisJZG9uZQorfQorCisjIENsZWFyIGFueSByZXNpZHVhbCBkYXRhIGZyb20gcHJldmlvdXMgdGVzdHMuIFdlIG9ubHkKKyMgbmVlZCB0aGlzIHdoZW4gdGVzdGluZyB0aGlyZC1wYXJ0eSBoZWxwZXJzIHdoaWNoIHJlYWQgYW5kCisjIHdyaXRlIG91dHNpZGUgb2Ygb3VyIHRyYXNoLWRpcmVjdG9yeSBzYW5kYm94LgorIworIyBEb24ndCBib3RoZXIgY2hlY2tpbmcgZm9yIHN1Y2Nlc3MgaGVyZSwgYXMgaXQgaXMKKyMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGVzdHMgYW5kIHJlcHJlc2VudHMgYSBiZXN0IGVmZm9ydCB0bworIyBjbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMuCitoZWxwZXJfdGVzdF9jbGVhbigpIHsKKwlyZWplY3QgJDEgaHR0cHMgZXhhbXBsZS5jb20gc3RvcmUtdXNlcgorCXJlamVjdCAkMSBodHRwcyBleGFtcGxlLmNvbSB1c2VyMQorCXJlamVjdCAkMSBodHRwcyBleGFtcGxlLmNvbSB1c2VyMgorCXJlamVjdCAkMSBodHRwIHBhdGgudGxkIHVzZXIKKwlyZWplY3QgJDEgaHR0cHMgdGltZW91dC50bGQgdXNlcgorfQorCityZWplY3QoKSB7CisJKAorCQllY2hvIHByb3RvY29sPSQyCisJCWVjaG8gaG9zdD0kMworCQllY2hvIHVzZXJuYW1lPSQ0CisJKSB8IGdpdCAtYyBjcmVkZW50aWFsLmhlbHBlcj0kMSBjcmVkZW50aWFsIHJlamVjdAorfQorCitoZWxwZXJfdGVzdCgpIHsKKwlIRUxQRVI9JDEKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgaGFzIG5vIGV4aXN0aW5nIGRhdGEiICcKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPWFza3Bhc3MtdXNlcm5hbWUKKwkJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCQktLQorCQlhc2twYXNzOiBVc2VybmFtZSBmb3IgJ1wnJ2h0dHBzOi8vZXhhbXBsZS5jb20nXCcnOgorCQlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vYXNrcGFzcy11c2VybmFtZUBleGFtcGxlLmNvbSdcJyc6CisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgc3RvcmVzIHBhc3N3b3JkIiAnCisJCWNoZWNrIGFwcHJvdmUgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9c3RvcmUtdXNlcgorCQlwYXNzd29yZD1zdG9yZS1wYXNzCisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgY2FuIHJldHJpZXZlIHBhc3N3b3JkIiAnCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT1zdG9yZS11c2VyCisJCXBhc3N3b3JkPXN0b3JlLXBhc3MKKwkJLS0KKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSByZXF1aXJlcyBtYXRjaGluZyBwcm90b2NvbCIgJworCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJLS0KKwkJcHJvdG9jb2w9aHR0cAorCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPWFza3Bhc3MtdXNlcm5hbWUKKwkJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCQktLQorCQlhc2twYXNzOiBVc2VybmFtZSBmb3IgJ1wnJ2h0dHA6Ly9leGFtcGxlLmNvbSdcJyc6CisJCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cDovL2Fza3Bhc3MtdXNlcm5hbWVAZXhhbXBsZS5jb20nXCcnOgorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIHJlcXVpcmVzIG1hdGNoaW5nIGhvc3QiICcKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1vdGhlci50bGQKKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1vdGhlci50bGQKKwkJdXNlcm5hbWU9YXNrcGFzcy11c2VybmFtZQorCQlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJCS0tCisJCWFza3Bhc3M6IFVzZXJuYW1lIGZvciAnXCcnaHR0cHM6Ly9vdGhlci50bGQnXCcnOgorCQlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vYXNrcGFzcy11c2VybmFtZUBvdGhlci50bGQnXCcnOgorCQlFT0YKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIHJlcXVpcmVzIG1hdGNoaW5nIHVzZXJuYW1lIiAnCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9b3RoZXIKKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT1vdGhlcgorCQlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJCS0tCisJCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cHM6Ly9vdGhlckBleGFtcGxlLmNvbSdcJyc6CisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgcmVxdWlyZXMgbWF0Y2hpbmcgcGF0aCIgJworCQl0ZXN0X2NvbmZpZyBjcmVkZW50aWFsLnVzZWh0dHBwYXRoIHRydWUgJiYKKwkJY2hlY2sgYXBwcm92ZSAkSEVMUEVSIDw8LVxFT0YgJiYKKwkJcHJvdG9jb2w9aHR0cAorCQlob3N0PXBhdGgudGxkCisJCXBhdGg9Zm9vLmdpdAorCQl1c2VybmFtZT11c2VyCisJCXBhc3N3b3JkPXBhc3MKKwkJRU9GCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GCisJCXByb3RvY29sPWh0dHAKKwkJaG9zdD1wYXRoLnRsZAorCQlwYXRoPWJhci5naXQKKwkJLS0KKwkJcHJvdG9jb2w9aHR0cAorCQlob3N0PXBhdGgudGxkCisJCXBhdGg9YmFyLmdpdAorCQl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogVXNlcm5hbWUgZm9yICdcJydodHRwOi8vcGF0aC50bGQvYmFyLmdpdCdcJyc6CisJCWFza3Bhc3M6IFBhc3N3b3JkIGZvciAnXCcnaHR0cDovL2Fza3Bhc3MtdXNlcm5hbWVAcGF0aC50bGQvYmFyLmdpdCdcJyc6CisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgY2FuIGZvcmdldCBob3N0IiAnCisJCWNoZWNrIHJlamVjdCAkSEVMUEVSIDw8LVxFT0YgJiYKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQlFT0YKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPWFza3Bhc3MtdXNlcm5hbWUKKwkJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCQktLQorCQlhc2twYXNzOiBVc2VybmFtZSBmb3IgJ1wnJ2h0dHBzOi8vZXhhbXBsZS5jb20nXCcnOgorCQlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vYXNrcGFzcy11c2VybmFtZUBleGFtcGxlLmNvbSdcJyc6CisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgY2FuIHN0b3JlIG11bHRpcGxlIHVzZXJzIiAnCisJCWNoZWNrIGFwcHJvdmUgJEhFTFBFUiA8PC1cRU9GICYmCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjEKKwkJcGFzc3dvcmQ9cGFzczEKKwkJRU9GCisJCWNoZWNrIGFwcHJvdmUgJEhFTFBFUiA8PC1cRU9GICYmCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjIKKwkJcGFzc3dvcmQ9cGFzczIKKwkJRU9GCisJCWNoZWNrIGZpbGwgJEhFTFBFUiA8PC1cRU9GICYmCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjEKKwkJLS0KKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMQorCQlwYXNzd29yZD1wYXNzMQorCQlFT0YKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMgorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIyCisJCXBhc3N3b3JkPXBhc3MyCisJCUVPRgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImhlbHBlciAoJEhFTFBFUikgY2FuIGZvcmdldCB1c2VyIiAnCisJCWNoZWNrIHJlamVjdCAkSEVMUEVSIDw8LVxFT0YgJiYKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMQorCQlFT0YKKwkJY2hlY2sgZmlsbCAkSEVMUEVSIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD1leGFtcGxlLmNvbQorCQl1c2VybmFtZT11c2VyMQorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIxCisJCXBhc3N3b3JkPWFza3Bhc3MtcGFzc3dvcmQKKwkJLS0KKwkJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL3VzZXIxQGV4YW1wbGUuY29tJ1wnJzoKKwkJRU9GCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGVscGVyICgkSEVMUEVSKSByZW1lbWJlcnMgb3RoZXIgdXNlciIgJworCQljaGVjayBmaWxsICRIRUxQRVIgPDwtXEVPRgorCQlwcm90b2NvbD1odHRwcworCQlob3N0PWV4YW1wbGUuY29tCisJCXVzZXJuYW1lPXVzZXIyCisJCS0tCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9ZXhhbXBsZS5jb20KKwkJdXNlcm5hbWU9dXNlcjIKKwkJcGFzc3dvcmQ9cGFzczIKKwkJRU9GCisJJworfQorCitoZWxwZXJfdGVzdF90aW1lb3V0KCkgeworCUhFTFBFUj0iJCoiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWxwZXIgKCRIRUxQRVIpIHRpbWVzIG91dCIgJworCQljaGVjayBhcHByb3ZlICIkSEVMUEVSIiA8PC1cRU9GICYmCisJCXByb3RvY29sPWh0dHBzCisJCWhvc3Q9dGltZW91dC50bGQKKwkJdXNlcm5hbWU9dXNlcgorCQlwYXNzd29yZD1wYXNzCisJCUVPRgorCQlzbGVlcCAyICYmCisJCWNoZWNrIGZpbGwgIiRIRUxQRVIiIDw8LVxFT0YKKwkJcHJvdG9jb2w9aHR0cHMKKwkJaG9zdD10aW1lb3V0LnRsZAorCQktLQorCQlwcm90b2NvbD1odHRwcworCQlob3N0PXRpbWVvdXQudGxkCisJCXVzZXJuYW1lPWFza3Bhc3MtdXNlcm5hbWUKKwkJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCQktLQorCQlhc2twYXNzOiBVc2VybmFtZSBmb3IgJ1wnJ2h0dHBzOi8vdGltZW91dC50bGQnXCcnOgorCQlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vYXNrcGFzcy11c2VybmFtZUB0aW1lb3V0LnRsZCdcJyc6CisJCUVPRgorCScKK30KKword3JpdGVfc2NyaXB0IGFza3Bhc3MgPDxcRU9GCitlY2hvID4mMiBhc2twYXNzOiAkKgord2hhdD0kKGVjaG8gJDEgfCBjdXQgLWQiICIgLWYxIHwgdHIgQS1aIGEteiB8IHRyIC1jZCBhLXopCitlY2hvICJhc2twYXNzLSR3aGF0IgorRU9GCitHSVRfQVNLUEFTUz0iJFBXRC9hc2twYXNzIgorZXhwb3J0IEdJVF9BU0tQQVNTCmRpZmYgLS1naXQgYS90L2xpYi1jdnMuc2ggYi90L2xpYi1jdnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyYmNmYgotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWN2cy5zaApAQCAtMCwwICsxLDc4IEBACisjIFNoZWxsIGxpYnJhcnkgc291cmNlZCBpbnN0ZWFkIG9mIC4vdGVzdC1saWIuc2ggYnkgY3ZzaW1wb3J0IHRlc3RzLgorCisuIC4vdGVzdC1saWIuc2gKKwordW5zZXQgQ1ZTX1NFUlZFUgorCitpZiAhIHR5cGUgY3ZzID4vZGV2L251bGwgMj4mMQordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBjdnNpbXBvcnQgdGVzdHMsIGN2cyBub3QgZm91bmQnCisJdGVzdF9kb25lCitmaQorCitDVlM9ImN2cyAtZiIKK2V4cG9ydCBDVlMKKworY3ZzcHNfdmVyc2lvbj0kKGN2c3BzIC1oIDI+JjEgfCBzZWQgLW5lICdzL2N2c3BzIHZlcnNpb24gLy9wJykKK2Nhc2UgIiRjdnNwc192ZXJzaW9uIiBpbgorMi4xIHwgMi4yKikKKwk7OworJycpCisJc2tpcF9hbGw9J3NraXBwaW5nIGN2c2ltcG9ydCB0ZXN0cywgY3ZzcHMgbm90IGZvdW5kJworCXRlc3RfZG9uZQorCTs7CisqKQorCXNraXBfYWxsPSdza2lwcGluZyBjdnNpbXBvcnQgdGVzdHMsIHVuc3VwcG9ydGVkIGN2c3BzIHZlcnNpb24nCisJdGVzdF9kb25lCisJOzsKK2VzYWMKKworc2V0dXBfY3ZzX3Rlc3RfcmVwb3NpdG9yeSAoKSB7CisJQ1ZTUk9PVD0iJChwd2QpLy5jdnNyb290IiAmJgorCWNwIC1yICIkVEVTVF9ESVJFQ1RPUlkvJDEvY3Zzcm9vdCIgIiRDVlNST09UIiAmJgorCWV4cG9ydCBDVlNST09UCit9CisKK3Rlc3RfY3ZzX2NvICgpIHsKKwkjIFVzYWdlOiB0ZXN0X2N2c19jbyBCUkFOQ0hfTkFNRQorCXJtIC1yZiBtb2R1bGUtY3ZzLSIkMSIKKwlpZiBbICIkMSIgPSAibWFzdGVyIiBdCisJdGhlbgorCQkkQ1ZTIGNvIC1QIC1kIG1vZHVsZS1jdnMtIiQxIiAtQSBtb2R1bGUKKwllbHNlCisJCSRDVlMgY28gLVAgLWQgbW9kdWxlLWN2cy0iJDEiIC1yICIkMSIgbW9kdWxlCisJZmkKK30KKwordGVzdF9naXRfY28gKCkgeworCSMgVXNhZ2U6IHRlc3RfZ2l0X2NvIEJSQU5DSF9OQU1FCisJKGNkIG1vZHVsZS1naXQgJiYgZ2l0IGNoZWNrb3V0ICIkMSIpCit9CisKK3Rlc3RfY21wX2JyYW5jaF9maWxlICgpIHsKKwkjIFVzYWdlOiB0ZXN0X2NtcF9icmFuY2hfZmlsZSBCUkFOQ0hfTkFNRSBQQVRICisJIyBUaGUgYnJhbmNoIG11c3QgYWxyZWFkeSBiZSBjaGVja2VkIG91dCBvZiBDVlMgYW5kIGdpdC4KKwl0ZXN0X2NtcCBtb2R1bGUtY3ZzLSIkMSIvIiQyIiBtb2R1bGUtZ2l0LyIkMiIKK30KKwordGVzdF9jbXBfYnJhbmNoX3RyZWUgKCkgeworCSMgVXNhZ2U6IHRlc3RfY21wX2JyYW5jaF90cmVlIEJSQU5DSF9OQU1FCisJIyBDaGVjayBCUkFOQ0hfTkFNRSBvdXQgb2YgQ1ZTIGFuZCBnaXQgYW5kIG1ha2Ugc3VyZSB0aGF0IGFsbAorCSMgb2YgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBhcmUgaWRlbnRpY2FsLgorCisJdGVzdF9jdnNfY28gIiQxIiAmJgorCXRlc3RfZ2l0X2NvICIkMSIgJiYKKwkoCisJCWNkIG1vZHVsZS1jdnMtIiQxIgorCQlmaW5kIC4gLXR5cGUgZCAtbmFtZSBDVlMgLXBydW5lIC1vIC10eXBlIGYgLXByaW50CisJKSB8IHNvcnQgPm1vZHVsZS1jdnMtIiQxIi5saXN0ICYmCisJKAorCQljZCBtb2R1bGUtZ2l0CisJCWZpbmQgLiAtdHlwZSBkIC1uYW1lIC5naXQgLXBydW5lIC1vIC10eXBlIGYgLXByaW50CisJKSB8IHNvcnQgPm1vZHVsZS1naXQtIiQxIi5saXN0ICYmCisJdGVzdF9jbXAgbW9kdWxlLWN2cy0iJDEiLmxpc3QgbW9kdWxlLWdpdC0iJDEiLmxpc3QgJiYKKwljYXQgbW9kdWxlLWN2cy0iJDEiLmxpc3QgfCB3aGlsZSByZWFkIGYKKwlkbworCQl0ZXN0X2NtcF9icmFuY2hfZmlsZSAiJDEiICIkZiIgfHwgcmV0dXJuIDEKKwlkb25lCit9CmRpZmYgLS1naXQgYS90L2xpYi1kaWZmLWFsdGVybmF0aXZlLnNoIGIvdC9saWItZGlmZi1hbHRlcm5hdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjRkYmYyCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZGlmZi1hbHRlcm5hdGl2ZS5zaApAQCAtMCwwICsxLDE2NiBAQAorIyBIZWxwZXJzIHNoYXJlZCBieSB0aGUgdGVzdCBzY3JpcHRzIGZvciBkaWZmIGFsZ29yaXRobXMgKHBhdGllbmNlLAorIyBoaXN0b2dyYW0sIGV0YykuCisKK3Rlc3RfZGlmZl9mcm9ibml0eigpIHsKKwljYXQgPmZpbGUxIDw8XEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8vIEZyb2JzIGZvbyBoZWFydGlseQoraW50IGZyb2JuaXR6KGludCBmb28pCit7CisgICAgaW50IGk7CisgICAgZm9yKGkgPSAwOyBpIDwgMTA7IGkrKykKKyAgICB7CisgICAgICAgIHByaW50ZigiWW91ciBhbnN3ZXIgaXM6ICIpOworICAgICAgICBwcmludGYoIiVkXG4iLCBmb28pOworICAgIH0KK30KKworaW50IGZhY3QoaW50IG4pCit7CisgICAgaWYobiA+IDEpCisgICAgeworICAgICAgICByZXR1cm4gZmFjdChuLTEpICogbjsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBmcm9ibml0eihmYWN0KDEwKSk7Cit9CitFT0YKKworCWNhdCA+ZmlsZTIgPDxcRU9GCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IGZpYihpbnQgbikKK3sKKyAgICBpZihuID4gMikKKyAgICB7CisgICAgICAgIHJldHVybiBmaWIobi0xKSArIGZpYihuLTIpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworLy8gRnJvYnMgZm9vIGhlYXJ0aWx5CitpbnQgZnJvYm5pdHooaW50IGZvbykKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IoaSA9IDA7IGkgPCAxMDsgaSsrKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlZFxuIiwgZm9vKTsKKyAgICB9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBmcm9ibml0eihmaWIoMTApKTsKK30KK0VPRgorCisJY2F0ID5leHBlY3QgPDxcRU9GCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMgoraW5kZXggNmZhYTVhMy4uZTNhZjMyOSAxMDA2NDQKKy0tLSBhL2ZpbGUxCisrKysgYi9maWxlMgorQEAgLTEsMjYgKzEsMjUgQEAKKyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAKKytpbnQgZmliKGludCBuKQorK3sKKysgICAgaWYobiA+IDIpCisrICAgIHsKKysgICAgICAgIHJldHVybiBmaWIobi0xKSArIGZpYihuLTIpOworKyAgICB9CisrICAgIHJldHVybiAxOworK30KKysKKyAvLyBGcm9icyBmb28gaGVhcnRpbHkKKyBpbnQgZnJvYm5pdHooaW50IGZvbykKKyB7CisgICAgIGludCBpOworICAgICBmb3IoaSA9IDA7IGkgPCAxMDsgaSsrKQorICAgICB7CistICAgICAgICBwcmludGYoIllvdXIgYW5zd2VyIGlzOiAiKTsKKyAgICAgICAgIHByaW50ZigiJWRcbiIsIGZvbyk7CisgICAgIH0KKyB9CisgCistaW50IGZhY3QoaW50IG4pCisteworLSAgICBpZihuID4gMSkKKy0gICAgeworLSAgICAgICAgcmV0dXJuIGZhY3Qobi0xKSAqIG47CistICAgIH0KKy0gICAgcmV0dXJuIDE7CistfQorLQorIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyB7CistICAgIGZyb2JuaXR6KGZhY3QoMTApKTsKKysgICAgZnJvYm5pdHooZmliKDEwKSk7CisgfQorRU9GCisKKwlTVFJBVEVHWT0kMQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJFNUUkFURUdZIGRpZmYiICcKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAiLS0kU1RSQVRFR1kiIGZpbGUxIGZpbGUyID4gb3V0cHV0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkU1RSQVRFR1kgZGlmZiBvdXRwdXQgaXMgdmFsaWQiICcKKwkJbXYgZmlsZTIgZXhwZWN0ICYmCisJCWdpdCBhcHBseSA8IG91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgZmlsZTIKKwknCit9CisKK3Rlc3RfZGlmZl91bmlxdWUoKSB7CisJY2F0ID51bmlxMSA8PFxFT0YKKzEKKzIKKzMKKzQKKzUKKzYKK0VPRgorCisJY2F0ID51bmlxMiA8PFxFT0YKK2EKK2IKK2MKK2QKK2UKK2YKK0VPRgorCisJY2F0ID5leHBlY3QgPDxcRU9GCitkaWZmIC0tZ2l0IGEvdW5pcTEgYi91bmlxMgoraW5kZXggYjQxNDEwOC4uMGZkZjM5NyAxMDA2NDQKKy0tLSBhL3VuaXExCisrKysgYi91bmlxMgorQEAgLTEsNiArMSw2IEBACistMQorLTIKKy0zCistNAorLTUKKy02CisrYQorK2IKKytjCisrZAorK2UKKytmCitFT0YKKworCVNUUkFURUdZPSQxCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wbGV0ZWx5IGRpZmZlcmVudCBmaWxlcycgJworCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4ICItLSRTVFJBVEVHWSIgdW5pcTEgdW5pcTIgPiBvdXRwdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCScKK30KKwpkaWZmIC0tZ2l0IGEvdC9saWItZ2V0dGV4dC5zaCBiL3QvbGliLWdldHRleHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVjNzU3ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWdldHRleHQuc2gKQEAgLTAsMCArMSw1OCBAQAorIyBJbml0aWFsaXphdGlvbiBhbmQgSWNlbGFuZGljIGxvY2FsZSBmb3IgYmFzaWMgZ2l0IGkxOG4gdGVzdHMsCisjIHdoaWNoIHNvdXJjZSB0aGlzIHNjcmlwdGxldCBpbnN0ZWFkIG9mIC4vdGVzdC1saWIuc2guCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCisuIC4vdGVzdC1saWIuc2gKKworR0lUX1RFWFRET01BSU5ESVI9IiRHSVRfQlVJTERfRElSL3BvL2J1aWxkL2xvY2FsZSIKK0dJVF9QT19QQVRIPSIkR0lUX0JVSUxEX0RJUi9wbyIKK2V4cG9ydCBHSVRfVEVYVERPTUFJTkRJUiBHSVRfUE9fUEFUSAorCisuICIkR0lUX0JVSUxEX0RJUiIvZ2l0LXNoLWkxOG4KKworaWYgdGVzdF9oYXZlX3ByZXJlcSBHRVRURVhUICYmICEgdGVzdF9oYXZlX3ByZXJlcSBHRVRURVhUX1BPSVNPTgordGhlbgorCSMgaXNfSVMuVVRGLTggb24gU29sYXJpcyBhbmQgRnJlZUJTRCwgaXNfSVMudXRmOCBvbiBEZWJpYW4KKwlpc19JU19sb2NhbGU9JChsb2NhbGUgLWEgMj4vZGV2L251bGwgfAorCQlzZWQgLW4gJy9eaXNfSVNcLlt1VV1bdFRdW2ZGXS0qOCQveworCQlwCisJCXEKKwl9JykKKwkjIGlzX0lTLklTTzg4NTktMSBvbiBTb2xhcmlzIGFuZCBGcmVlQlNELCBpc19JUy5pc284ODU5MSBvbiBEZWJpYW4KKwlpc19JU19pc29fbG9jYWxlPSQobG9jYWxlIC1hIDI+L2Rldi9udWxsIHwKKwkJc2VkIC1uICcvXmlzX0lTXC5baUldW3NTXVtvT104ODU5LSoxJC97CisJCXAKKwkJcQorCX0nKQorCisJIyBFeHBvcnQgdGhlbSBhcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyB0aGUgdDAyMDIvdGVzdC5wbCBQZXJsCisJIyB0ZXN0IGNhbiB1c2UgaXQgdG9vCisJZXhwb3J0IGlzX0lTX2xvY2FsZSBpc19JU19pc29fbG9jYWxlCisKKwlpZiB0ZXN0IC1uICIkaXNfSVNfbG9jYWxlIiAmJgorCQl0ZXN0ICRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUgIT0gImZhbGx0aHJvdWdoIgorCXRoZW4KKwkJIyBTb21lIG9mIHRoZSB0ZXN0cyBuZWVkIHRoZSByZWZlcmVuY2UgSWNlbGFuZGljIGxvY2FsZQorCQl0ZXN0X3NldF9wcmVyZXEgR0VUVEVYVF9MT0NBTEUKKworCQkjIEV4cG9ydGluZyBmb3IgdDAyMDIvdGVzdC5wbAorCQlHRVRURVhUX0xPQ0FMRT0xCisJCWV4cG9ydCBHRVRURVhUX0xPQ0FMRQorCQlzYXkgIiMgbGliLWdldHRleHQ6IEZvdW5kICckaXNfSVNfbG9jYWxlJyBhcyBhbiBpc19JUyBVVEYtOCBsb2NhbGUiCisJZWxzZQorCQlzYXkgIiMgbGliLWdldHRleHQ6IE5vIGlzX0lTIFVURi04IGxvY2FsZSBhdmFpbGFibGUiCisJZmkKKworCWlmIHRlc3QgLW4gIiRpc19JU19pc29fbG9jYWxlIiAmJgorCQl0ZXN0ICRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUgIT0gImZhbGx0aHJvdWdoIgorCXRoZW4KKwkJIyBTb21lIG9mIHRoZSB0ZXN0cyBuZWVkIHRoZSByZWZlcmVuY2UgSWNlbGFuZGljIGxvY2FsZQorCQl0ZXN0X3NldF9wcmVyZXEgR0VUVEVYVF9JU09fTE9DQUxFCisKKwkJc2F5ICIjIGxpYi1nZXR0ZXh0OiBGb3VuZCAnJGlzX0lTX2lzb19sb2NhbGUnIGFzIGFuIGlzX0lTIElTTy04ODU5LTEgbG9jYWxlIgorCWVsc2UKKwkJc2F5ICIjIGxpYi1nZXR0ZXh0OiBObyBpc19JUyBJU08tODg1OS0xIGxvY2FsZSBhdmFpbGFibGUiCisJZmkKK2ZpCmRpZmYgLS1naXQgYS90L2xpYi1naXQtZGFlbW9uLnNoIGIvdC9saWItZ2l0LWRhZW1vbi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzRiMzQxCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ2l0LWRhZW1vbi5zaApAQCAtMCwwICsxLDg3IEBACisjIFNoZWxsIGxpYnJhcnkgdG8gcnVuIGdpdC1kYWVtb24gaW4gdGVzdHMuICBFbmRzIHRoZSB0ZXN0IGVhcmx5IGlmCisjIEdJVF9URVNUX0dJVF9EQUVNT04gaXMgbm90IHNldC4KKyMKKyMgVXNhZ2U6CisjCisjCS4gLi90ZXN0LWxpYi5zaAorIwkuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1naXQtZGFlbW9uLnNoCisjCXN0YXJ0X2dpdF9kYWVtb24KKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4uJyAnCisjCQkuLi4KKyMJJworIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzIC4uLgorIworIwlzdG9wX2dpdF9kYWVtb24KKyMJdGVzdF9kb25lCisKK3Rlc3RfdHJpc3RhdGUgR0lUX1RFU1RfR0lUX0RBRU1PTgoraWYgdGVzdCAiJEdJVF9URVNUX0dJVF9EQUVNT04iID0gZmFsc2UKK3RoZW4KKwlza2lwX2FsbD0iZ2l0LWRhZW1vbiB0ZXN0aW5nIGRpc2FibGVkICh1bnNldCBHSVRfVEVTVF9HSVRfREFFTU9OIHRvIGVuYWJsZSkiCisJdGVzdF9kb25lCitmaQorCitMSUJfR0lUX0RBRU1PTl9QT1JUPSR7TElCX0dJVF9EQUVNT05fUE9SVC0ke3RoaXNfdGVzdCN0fX0KKworR0lUX0RBRU1PTl9QSUQ9CitHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSD0iJFBXRCIvcmVwbworR0lUX0RBRU1PTl9VUkw9Z2l0Oi8vMTI3LjAuMC4xOiRMSUJfR0lUX0RBRU1PTl9QT1JUCisKK3N0YXJ0X2dpdF9kYWVtb24oKSB7CisJaWYgdGVzdCAtbiAiJEdJVF9EQUVNT05fUElEIgorCXRoZW4KKwkJZXJyb3IgInN0YXJ0X2dpdF9kYWVtb24gYWxyZWFkeSBjYWxsZWQiCisJZmkKKworCW1rZGlyIC1wICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiCisKKwl0cmFwICdjb2RlPSQ/OyBzdG9wX2dpdF9kYWVtb247IChleGl0ICRjb2RlKTsgZGllJyBFWElUCisKKwlzYXkgPiYzICJTdGFydGluZyBnaXQgZGFlbW9uIC4uLiIKKwlta2ZpZm8gZ2l0X2RhZW1vbl9vdXRwdXQKKwlnaXQgZGFlbW9uIC0tbGlzdGVuPTEyNy4wLjAuMSAtLXBvcnQ9IiRMSUJfR0lUX0RBRU1PTl9QT1JUIiBcCisJCS0tcmV1c2VhZGRyIC0tdmVyYm9zZSBcCisJCS0tYmFzZS1wYXRoPSIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiIFwKKwkJIiRAIiAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIiBcCisJCT4mMyAyPmdpdF9kYWVtb25fb3V0cHV0ICYKKwlHSVRfREFFTU9OX1BJRD0kIQorCXsKKwkJcmVhZCBsaW5lIDwmNworCQllY2hvID4mNCAiJGxpbmUiCisJCWNhdCA8JjcgPiY0ICYKKwl9IDc8Z2l0X2RhZW1vbl9vdXRwdXQgJiYKKworCSMgQ2hlY2sgZXhwZWN0ZWQgb3V0cHV0CisJaWYgdGVzdCB4IiQoZXhwciAiJGxpbmUiIDogIlxbWzAtOV0qXF0gXCguKlwpIikiICE9IHgiUmVhZHkgdG8gcnVtYmxlIgorCXRoZW4KKwkJa2lsbCAiJEdJVF9EQUVNT05fUElEIgorCQl3YWl0ICIkR0lUX0RBRU1PTl9QSUQiCisJCXRyYXAgJ2RpZScgRVhJVAorCQl0ZXN0X3NraXBfb3JfZGllICRHSVRfVEVTVF9HSVRfREFFTU9OIFwKKwkJCSJnaXQgZGFlbW9uIGZhaWxlZCB0byBzdGFydCIKKwlmaQorfQorCitzdG9wX2dpdF9kYWVtb24oKSB7CisJaWYgdGVzdCAteiAiJEdJVF9EQUVNT05fUElEIgorCXRoZW4KKwkJcmV0dXJuCisJZmkKKworCXRyYXAgJ2RpZScgRVhJVAorCisJIyBraWxsIGdpdC1kYWVtb24gY2hpbGQgb2YgZ2l0CisJc2F5ID4mMyAiU3RvcHBpbmcgZ2l0IGRhZW1vbiAuLi4iCisJa2lsbCAiJEdJVF9EQUVNT05fUElEIgorCXdhaXQgIiRHSVRfREFFTU9OX1BJRCIgPiYzIDI+JjQKKwlyZXQ9JD8KKwkjIGV4cGVjdCBleGl0IHdpdGggc3RhdHVzIDE0MyA9IDEyOCsxNSBmb3Igc2lnbmFsIFRFUk09MTUKKwlpZiB0ZXN0ICRyZXQgLW5lIDE0MworCXRoZW4KKwkJZXJyb3IgImdpdCBkYWVtb24gZXhpdGVkIHdpdGggc3RhdHVzOiAkcmV0IgorCWZpCisJR0lUX0RBRU1PTl9QSUQ9CisJcm0gLWYgZ2l0X2RhZW1vbl9vdXRwdXQKK30KZGlmZiAtLWdpdCBhL3QvbGliLWdpdC1wNC5zaCBiL3QvbGliLWdpdC1wNC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTQ4MjI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItZ2l0LXA0LnNoCkBAIC0wLDAgKzEsMTgzIEBACisjCisjIExpYnJhcnkgY29kZSBmb3IgZ2l0IHA0IHRlc3RzCisjCisKKyMgcDQgdGVzdHMgbmV2ZXIgdXNlIHRoZSB0b3AtbGV2ZWwgcmVwbzsgYWx3YXlzIGJ1aWxkL2Nsb25lIGludG8KKyMgYSBzdWJkaXJlY3RvcnkgY2FsbGVkICIkZ2l0IgorVEVTVF9OT19DUkVBVEVfUkVQTz1Ob1RoYW5rcworCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBZVEhPTgordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXQgcDQgdGVzdHM7IHB5dGhvbiBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKyggcDQgLWggJiYgcDRkIC1oICkgPi9kZXYvbnVsbCAyPiYxIHx8IHsKKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IHA0IHRlc3RzOyBubyBwNCBvciBwNGQnCisJdGVzdF9kb25lCit9CisKKyMgT24gY3lnd2luLCB0aGUgTlQgdmVyc2lvbiBvZiBQZXJmb3JjZSBjYW4gYmUgdXNlZC4gIFdoZW4gZ2l2aW5nCisjIGl0IHBhdGhzLCBlaXRoZXIgb24gdGhlIGNvbW1hbmQtbGluZSBvciBpbiBjbGllbnQgc3BlY2lmaWNhdGlvbnMsCisjIGJlIHN1cmUgdG8gdXNlIHRoZSBuYXRpdmUgd2luZG93cyBmb3JtLgorIworIyBPbGRlciB2ZXJzaW9ucyBvZiBwZXJmb3JjZSB3ZXJlIGF2YWlsYWJsZSBjb21waWxlZCBuYXRpdmVseSBmb3IKKyMgY3lnd2luLiAgVGhvc2UgZG8gbm90IGFjY2VwdCBuYXRpdmUgd2luZG93cyBwYXRocywgc28gbWFrZSBzdXJlCisjIG5vdCB0byBjb252ZXJ0IGZvciB0aGVtLgorbmF0aXZlX3BhdGgoKSB7CisJcGF0aD0iJDEiICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBDWUdXSU4gJiYgISBwNCAtViB8IGdyZXAgLXEgQ1lHV0lOCisJdGhlbgorCQlwYXRoPSQoY3lncGF0aCAtLXdpbmRvd3MgIiRwYXRoIikKKwllbHNlCisJCXBhdGg9JCh0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICIkcGF0aCIpCisJZmkgJiYKKwllY2hvICIkcGF0aCIKK30KKworIyBUcnkgdG8gcGljayBhIHVuaXF1ZSBwb3J0OiBndWVzcyBhIGxhcmdlIG51bWJlciwgdGhlbiBob3BlCisjIG5vIG1vcmUgdGhhbiBvbmUgb2YgZWFjaCB0ZXN0IGlzIHJ1bm5pbmcuCisjCisjIFRoaXMgZG9lcyBub3QgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHNvbWVib2R5IGVsc2UgaXMgcnVubmluZyB0aGUKKyMgc2FtZSB0ZXN0cyBhbmQgaGFzIGNob3NlbiB0aGUgc2FtZSBwb3J0cy4KK3Rlc3RpZD0ke3RoaXNfdGVzdCN0fQorZ2l0X3A0X3Rlc3Rfc3RhcnQ9OTgwMAorUDREUE9SVD0kKCgxMDY2OSArICgkdGVzdGlkIC0gJGdpdF9wNF90ZXN0X3N0YXJ0KSkpCisKK1A0UE9SVD1sb2NhbGhvc3Q6JFA0RFBPUlQKK1A0Q0xJRU5UPWNsaWVudAorUDRVU0VSPWF1dGhvcgorUDRFRElUT1I9dHJ1ZQordW5zZXQgUDRDSEFSU0VUCitleHBvcnQgUDRQT1JUIFA0Q0xJRU5UIFA0VVNFUiBQNEVESVRPUiBQNENIQVJTRVQKKworZGI9IiRUUkFTSF9ESVJFQ1RPUlkvZGIiCitjbGk9IiRUUkFTSF9ESVJFQ1RPUlkvY2xpIgorZ2l0PSIkVFJBU0hfRElSRUNUT1JZL2dpdCIKK3BpZGZpbGU9IiRUUkFTSF9ESVJFQ1RPUlkvcDRkLnBpZCIKKworIyBnaXQgcDQgc3VibWl0IGdlbmVyYXRlcyBhIHRlbXAgZmlsZSwgd2hpY2ggd2lsbAorIyBub3QgZ2V0IGNsZWFuZWQgdXAgaWYgdGhlIHN1Ym1pc3Npb24gZmFpbHMuICBEb24ndAorIyBjbHV0dGVyIHVwIC90bXAgb24gdGhlIHRlc3QgbWFjaGluZS4KK1RNUERJUj0iJFRSQVNIX0RJUkVDVE9SWSIKK2V4cG9ydCBUTVBESVIKKworc3RhcnRfcDRkKCkgeworCW1rZGlyIC1wICIkZGIiICIkY2xpIiAiJGdpdCIgJiYKKwlybSAtZiAiJHBpZGZpbGUiICYmCisJKAorCQljZCAiJGRiIiAmJgorCQl7CisJCQlwNGQgLXEgLXAgJFA0RFBPUlQgIiRAIiAmCisJCQllY2hvICQhID4iJHBpZGZpbGUiCisJCX0KKwkpICYmCisKKwkjIFRoaXMgZ2l2ZXMgcDRkIGEgbG9uZyB0aW1lIHRvIHN0YXJ0IHVwLCBhcyBpdCBjYW4gYmUKKwkjIHF1aXRlIHNsb3cgZGVwZW5kaW5nIG9uIHRoZSBtYWNoaW5lLiAgU2V0IHRoaXMgZW52aXJvbm1lbnQKKwkjIHZhcmlhYmxlIHRvIHNvbWV0aGluZyBzbWFsbGVyIHRvIGZhaWwgZmFzdGVyIGluLCBzYXksCisJIyBhbiBhdXRvbWF0ZWQgdGVzdCBzZXR1cC4gIElmIHRoZSBwNGQgcHJvY2VzcyBkaWVzLCB0aGF0CisJIyB3aWxsIGJlIGNhdWdodCB3aXRoIHRoZSAia2lsbCAtMCIgY2hlY2sgYmVsb3cuCisJaT0ke1A0RF9TVEFSVF9QQVRJRU5DRTotMzAwfQorCXBpZD0kKGNhdCAiJHBpZGZpbGUiKQorCXJlYWR5PQorCXdoaWxlIHRlc3QgJGkgLWd0IDAKKwlkbworCQkjIHN1Y2NlZWQgd2hlbiBwNCBjbGllbnQgY29tbWFuZHMgc3RhcnQgdG8gd29yaworCQlpZiBwNCBpbmZvID4vZGV2L251bGwgMj4mMQorCQl0aGVuCisJCQlyZWFkeT10cnVlCisJCQlicmVhaworCQlmaQorCQkjIGZhaWwgaWYgcDRkIGRpZWQKKwkJa2lsbCAtMCAkcGlkIDI+L2Rldi9udWxsIHx8IGJyZWFrCisJCWVjaG8gd2FpdGluZyBmb3IgcDRkIHRvIHN0YXJ0CisJCXNsZWVwIDEKKwkJaT0kKCggJGkgLSAxICkpCisJZG9uZQorCisJaWYgdGVzdCAteiAiJHJlYWR5IgorCXRoZW4KKwkJIyBwNGQgZmFpbGVkIHRvIHN0YXJ0CisJCXJldHVybiAxCisJZmkKKworCSMgYnVpbGQgYSBwNCB1c2VyIHNvIGF1dGhvckBleGFtcGxlLmNvbSBoYXMgYW4gZW50cnkKKwlwNF9hZGRfdXNlciBhdXRob3IKKworCSMgYnVpbGQgYSBjbGllbnQKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCisJcmV0dXJuIDAKK30KKworcDRfYWRkX3VzZXIoKSB7CisJbmFtZT0kMSAmJgorCXA0IHVzZXIgLWYgLWkgPDwtRU9GCisJVXNlcjogJG5hbWUKKwlFbWFpbDogJG5hbWVAZXhhbXBsZS5jb20KKwlGdWxsTmFtZTogRHIuICRuYW1lCisJRU9GCit9CisKK2tpbGxfcDRkKCkgeworCXBpZD0kKGNhdCAiJHBpZGZpbGUiKQorCSMgaXQgaGFkIGJldHRlciBleGlzdCBmb3IgdGhlIGZpcnN0IGtpbGwKKwlraWxsICRwaWQgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgOyBkbworCQlraWxsICRwaWQgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisJCXNsZWVwIDEKKwlkb25lICYmCisJIyBjb21wbGFpbiBpZiBpdCB3b3VsZCBub3QgZGllCisJdGVzdF9tdXN0X2ZhaWwga2lsbCAkcGlkID4vZGV2L251bGwgMj4mMSAmJgorCXJtIC1yZiAiJGRiIiAiJGNsaSIgIiRwaWRmaWxlIgorfQorCitjbGVhbnVwX2dpdCgpIHsKKwlybSAtcmYgIiRnaXQiICYmCisJbWtkaXIgIiRnaXQiCit9CisKK21hcnNoYWxfZHVtcCgpIHsKKwl3aGF0PSQxICYmCisJbGluZT0kezI6LTF9ICYmCisJY2F0ID4iJFRSQVNIX0RJUkVDVE9SWS9tYXJzaGFsLWR1bXAucHkiIDw8LUVPRiAmJgorCWltcG9ydCBtYXJzaGFsCisJaW1wb3J0IHN5cworCWZvciBpIGluIHJhbmdlKCRsaW5lKToKKwkgICAgZCA9IG1hcnNoYWwubG9hZChzeXMuc3RkaW4pCisJcHJpbnQgZFsnJHdoYXQnXQorCUVPRgorCSIkUFlUSE9OX1BBVEgiICIkVFJBU0hfRElSRUNUT1JZL21hcnNoYWwtZHVtcC5weSIKK30KKworIworIyBDb25zdHJ1Y3QgYSBjbGllbnQgd2l0aCB0aGlzIGxpc3Qgb2YgVmlldyBsaW5lcworIworY2xpZW50X3ZpZXcoKSB7CisJKAorCQljYXQgPDwtRU9GICYmCisJCUNsaWVudDogJFA0Q0xJRU5UCisJCURlc2NyaXB0aW9uOiAkUDRDTElFTlQKKwkJUm9vdDogJGNsaQorCQlBbHRSb290czogJChuYXRpdmVfcGF0aCAiJGNsaSIpCisJCUxpbmVFbmQ6IHVuaXgKKwkJVmlldzoKKwkJRU9GCisJCXByaW50ZiAiXHQlc1xuIiAiJEAiCisJKSB8IHA0IGNsaWVudCAtaQorfQorCitpc19jbGlfZmlsZV93cml0ZWFibGUoKSB7CisJIyBjeWd3aW4gdmVyc2lvbiBvZiBwNCBkb2VzIG5vdCBzZXQgcmVhZC1vbmx5IGF0dHIsCisJIyB3aWxsIGJlIG1hcmtlZCA0NDQgYnV0IC13IGlzIHRydWUKKwlmaWxlPSIkMSIgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIENZR1dJTiAmJiBwNCAtViB8IGdyZXAgLXEgQ1lHV0lOCisJdGhlbgorCQlzdGF0PSQoc3RhdCAtLWZvcm1hdD0lYSAiJGZpbGUiKSAmJgorCQl0ZXN0ICRzdGF0ID0gNjQ0CisJZWxzZQorCQl0ZXN0IC13ICIkZmlsZSIKKwlmaQorfQpkaWZmIC0tZ2l0IGEvdC9saWItZ2l0LXN2bi5zaCBiL3QvbGliLWdpdC1zdm4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlYzEyZgotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWdpdC1zdm4uc2gKQEAgLTAsMCArMSwxODggQEAKKy4gLi90ZXN0LWxpYi5zaAorCityZW1vdGVzX2dpdF9zdm49cmVtb3Rlcy9naXQiIi1zdm4KK2dpdF9zdm5faWQ9Z2l0IiItc3ZuLWlkCisKK2lmIHRlc3QgLW4gIiROT19TVk5fVEVTVFMiCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBzdm4gdGVzdHMsIE5PX1NWTl9URVNUUyBkZWZpbmVkJworCXRlc3RfZG9uZQorZmkKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBzdm4gdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKK0dJVF9ESVI9JFBXRC8uZ2l0CitHSVRfU1ZOX0RJUj0kR0lUX0RJUi9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4KK1NWTl9UUkVFPSRHSVRfU1ZOX0RJUi9zdm4tdHJlZQorCitzdm4gPi9kZXYvbnVsbCAyPiYxCitpZiB0ZXN0ICQ/IC1uZSAxCit0aGVuCisgICAgc2tpcF9hbGw9J3NraXBwaW5nIGdpdCBzdm4gdGVzdHMsIHN2biBub3QgZm91bmQnCisgICAgdGVzdF9kb25lCitmaQorCitzdm5yZXBvPSRQV0Qvc3ZucmVwbworZXhwb3J0IHN2bnJlcG8KK3N2bmNvbmY9JFBXRC9zdm5jb25mCitleHBvcnQgc3ZuY29uZgorCitwZXJsIC13IC1lICIKK3VzZSBTVk46OkNvcmU7Cit1c2UgU1ZOOjpSZXBvczsKK1wkU1ZOOjpDb3JlOjpWRVJTSU9OIGd0ICcxLjEuMCcgb3IgZXhpdCg0Mik7CitzeXN0ZW0ocXcvc3ZuYWRtaW4gY3JlYXRlIC0tZnMtdHlwZSBmc2ZzLywgXCRFTlZ7c3ZucmVwb30pID09IDAgb3IgZXhpdCg0MSk7CisiID4mMyAyPiY0Cit4PSQ/CitpZiB0ZXN0ICR4IC1uZSAwCit0aGVuCisJaWYgdGVzdCAkeCAtZXEgNDI7IHRoZW4KKwkJc2tpcF9hbGw9J1BlcmwgU1ZOIGxpYnJhcmllcyBtdXN0IGJlID49IDEuMS4wJworCWVsaWYgdGVzdCAkeCAtZXEgNDE7IHRoZW4KKwkJc2tpcF9hbGw9J3N2bmFkbWluIGZhaWxlZCB0byBjcmVhdGUgZnNmcyByZXBvc2l0b3J5JworCWVsc2UKKwkJc2tpcF9hbGw9J1BlcmwgU1ZOIGxpYnJhcmllcyBub3QgZm91bmQgb3IgdW51c2FibGUnCisJZmkKKwl0ZXN0X2RvbmUKK2ZpCisKK3Jhd3N2bnJlcG89IiRzdm5yZXBvIgorc3ZucmVwbz0iZmlsZTovLyRzdm5yZXBvIgorCitwb2tlKCkgeworCXRlc3QtY2htdGltZSArMSAiJDEiCit9CisKKyMgV2UgbmVlZCB0aGlzLCBiZWNhdXNlIHdlIHNob3VsZCBwYXNzIGVtcHR5IGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5IHRvCisjIHRoZSAnc3ZuIGNvbW1pdCcgdG8gYXZvaWQgYXV0b21hdGVkIHByb3BlcnR5IGNoYW5nZXMgYW5kIG90aGVyIHN0dWZmCisjIHRoYXQgY291bGQgYmUgc2V0IGZyb20gdXNlcidzIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gfi8uc3VidmVyc2lvbi4KK3N2bl9jbWQgKCkgeworCVsgLWQgIiRzdm5jb25mIiBdIHx8IG1rZGlyICIkc3ZuY29uZiIKKwlvcmlnX3N2bmNtZD0iJDEiOyBzaGlmdAorCWlmIFsgLXogIiRvcmlnX3N2bmNtZCIgXTsgdGhlbgorCQlzdm4KKwkJcmV0dXJuCisJZmkKKwlzdm4gIiRvcmlnX3N2bmNtZCIgLS1jb25maWctZGlyICIkc3ZuY29uZiIgIiRAIgorfQorCitwcmVwYXJlX2h0dHBkICgpIHsKKwlmb3IgZCBpbiBcCisJCSIkU1ZOX0hUVFBEX1BBVEgiIFwKKwkJL3Vzci9zYmluL2FwYWNoZTIgXAorCQkvdXNyL3NiaW4vaHR0cGQgXAorCTsgZG8KKwkJaWYgdGVzdCAtZiAiJGQiCisJCXRoZW4KKwkJCVNWTl9IVFRQRF9QQVRIPSIkZCIKKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCWlmIHRlc3QgLXogIiRTVk5fSFRUUERfUEFUSCIKKwl0aGVuCisJCWVjaG8gPiYyICcqKiogZXJyb3I6IEFwYWNoZSBub3QgZm91bmQnCisJCXJldHVybiAxCisJZmkKKwlmb3IgZCBpbiBcCisJCSIkU1ZOX0hUVFBEX01PRFVMRV9QQVRIIiBcCisJCS91c3IvbGliL2FwYWNoZTIvbW9kdWxlcyBcCisJCS91c3IvbGliZXhlYy9hcGFjaGUyIFwKKwk7IGRvCisJCWlmIHRlc3QgLWQgIiRkIgorCQl0aGVuCisJCQlTVk5fSFRUUERfTU9EVUxFX1BBVEg9IiRkIgorCQkJYnJlYWsKKwkJZmkKKwlkb25lCisJaWYgdGVzdCAteiAiJFNWTl9IVFRQRF9NT0RVTEVfUEFUSCIKKwl0aGVuCisJCWVjaG8gPiYyICcqKiogZXJyb3I6IEFwYWNoZSBtb2R1bGUgZGlyIG5vdCBmb3VuZCcKKwkJcmV0dXJuIDEKKwlmaQorCWlmIHRlc3QgISAtZiAiJFNWTl9IVFRQRF9NT0RVTEVfUEFUSC9tb2RfZGF2X3N2bi5zbyIKKwl0aGVuCisJCWVjaG8gPiYyICcqKiogZXJyb3I6IEFwYWNoZSBtb2R1bGUgIm1vZF9kYXZfc3ZuIiBub3QgZm91bmQnCisJCXJldHVybiAxCisJZmkKKworCXJlcG9fYmFzZV9wYXRoPSIkezEtc3ZufSIKKwlta2RpciAiJEdJVF9ESVIiL2xvZ3MKKworCWNhdCA+ICIkR0lUX0RJUi9odHRwZC5jb25mIiA8PEVPRgorU2VydmVyTmFtZSAiZ2l0IHN2biB0ZXN0IgorU2VydmVyUm9vdCAiJEdJVF9ESVIiCitEb2N1bWVudFJvb3QgIiRHSVRfRElSIgorUGlkRmlsZSAiJEdJVF9ESVIvaHR0cGQucGlkIgorTG9ja0ZpbGUgbG9ncy9hY2NlcHQubG9jaworTGlzdGVuIDEyNy4wLjAuMTokU1ZOX0hUVFBEX1BPUlQKK0xvYWRNb2R1bGUgZGF2X21vZHVsZSAkU1ZOX0hUVFBEX01PRFVMRV9QQVRIL21vZF9kYXYuc28KK0xvYWRNb2R1bGUgZGF2X3N2bl9tb2R1bGUgJFNWTl9IVFRQRF9NT0RVTEVfUEFUSC9tb2RfZGF2X3N2bi5zbworPExvY2F0aW9uIC8kcmVwb19iYXNlX3BhdGg+CisJREFWIHN2bgorCVNWTlBhdGggIiRyYXdzdm5yZXBvIgorPC9Mb2NhdGlvbj4KK0VPRgorfQorCitzdGFydF9odHRwZCAoKSB7CisJaWYgdGVzdCAteiAiJFNWTl9IVFRQRF9QT1JUIgorCXRoZW4KKwkJZWNobyA+JjIgJ1NWTl9IVFRQRF9QT1JUIGlzIG5vdCBkZWZpbmVkIScKKwkJcmV0dXJuCisJZmkKKworCXByZXBhcmVfaHR0cGQgIiQxIiB8fCByZXR1cm4gMQorCisJIiRTVk5fSFRUUERfUEFUSCIgLWYgIiRHSVRfRElSIi9odHRwZC5jb25mIC1rIHN0YXJ0CisJc3ZucmVwbz0iaHR0cDovLzEyNy4wLjAuMTokU1ZOX0hUVFBEX1BPUlQvJHJlcG9fYmFzZV9wYXRoIgorfQorCitzdG9wX2h0dHBkICgpIHsKKwl0ZXN0IC16ICIkU1ZOX0hUVFBEX1BPUlQiICYmIHJldHVybgorCXRlc3QgISAtZiAiJEdJVF9ESVIvaHR0cGQuY29uZiIgJiYgcmV0dXJuCisJIiRTVk5fSFRUUERfUEFUSCIgLWYgIiRHSVRfRElSIi9odHRwZC5jb25mIC1rIHN0b3AKK30KKworY29udmVydF90b19yZXZfZGIgKCkgeworCXBlcmwgLXcgLS0gLSAiJEAiIDw8XEVPRgordXNlIHN0cmljdDsKK0BBUkdWID09IDIgb3IgZGllICJ1c2FnZTogY29udmVydF90b19yZXZfZGIgPGlucHV0PiA8b3V0cHV0PiI7CitvcGVuIG15ICR3ciwgJys+JywgJEFSR1ZbMV0gb3IgZGllICIkITogY291bGRuJ3Qgb3BlbjogJEFSR1ZbMV0iOworb3BlbiBteSAkcmQsICc8JywgJEFSR1ZbMF0gb3IgZGllICIkITogY291bGRuJ3Qgb3BlbjogJEFSR1ZbMF0iOworbXkgJHNpemUgPSAoc3RhdCgkcmQpKVs3XTsKKygkc2l6ZSAlIDI0KSA9PSAwIG9yIGRpZSAiSW5jb25zaXN0ZW50IHNpemU6ICRzaXplIjsKK3doaWxlIChzeXNyZWFkKCRyZCwgbXkgJGJ1ZiwgMjQpID09IDI0KSB7CisJbXkgKCRyLCAkYykgPSB1bnBhY2soJ05INDAnLCAkYnVmKTsKKwlteSAkb2Zmc2V0ID0gJHIgKiA0MTsKKwlzZWVrICR3ciwgMCwgMiBvciBkaWUgJCE7CisJbXkgJHBvcyA9IHRlbGwgJHdyOworCWlmICgkcG9zIDwgJG9mZnNldCkgeworCQlmb3IgKDEgLi4gKCgkb2Zmc2V0IC0gJHBvcykgLyA0MSkpIHsKKwkJCXByaW50ICR3ciAoKCcwJyB4IDQwKSwiXG4iKSBvciBkaWUgJCE7CisJCX0KKwl9CisJc2VlayAkd3IsICRvZmZzZXQsIDAgb3IgZGllICQhOworCXByaW50ICR3ciAkYywiXG4iIG9yIGRpZSAkITsKK30KK2Nsb3NlICR3ciBvciBkaWUgJCE7CitjbG9zZSAkcmQgb3IgZGllICQhOworRU9GCit9CisKK3JlcXVpcmVfc3Zuc2VydmUgKCkgeworICAgIGlmIHRlc3QgLXogIiRTVk5TRVJWRV9QT1JUIgorICAgIHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgc3Zuc2VydmUgdGVzdC4gKHNldCAkU1ZOU0VSVkVfUE9SVCB0byBlbmFibGUpJworICAgICAgICB0ZXN0X2RvbmUKKyAgICBmaQorfQorCitzdGFydF9zdm5zZXJ2ZSAoKSB7CisgICAgc3Zuc2VydmUgLS1saXN0ZW4tcG9ydCAkU1ZOU0VSVkVfUE9SVCBcCisgICAgICAgICAgICAgLS1yb290ICIkcmF3c3ZucmVwbyIgXAorICAgICAgICAgICAgIC0tbGlzdGVuLW9uY2UgXAorICAgICAgICAgICAgIC0tbGlzdGVuLWhvc3QgMTI3LjAuMC4xICYKK30KKwpkaWZmIC0tZ2l0IGEvdC9saWItZ3BnLnNoIGIvdC9saWItZ3BnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRiMmVmMjIKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1ncGcuc2gKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisKK2dwZ192ZXJzaW9uPSQoZ3BnIC0tdmVyc2lvbiAyPiYxKQoraWYgdGVzdCAkPyA9IDEyNzsgdGhlbgorCXNheSAiWW91IGRvIG5vdCBzZWVtIHRvIGhhdmUgZ3BnIGluc3RhbGxlZCIKK2Vsc2UKKwkjIEFzIHNhaWQgaGVyZTogaHR0cDovL3d3dy5nbnVwZy5vcmcvZG9jdW1lbnRhdGlvbi9mYXFzLmh0bWwjcTYuMTkKKwkjIHRoZSBncGcgdmVyc2lvbiAxLjAuNiBkaWRuJ3QgcGFyc2UgdHJ1c3QgcGFja2V0cyBjb3JyZWN0bHksIHNvIGZvcgorCSMgdGhhdCB2ZXJzaW9uLCBjcmVhdGlvbiBvZiBzaWduZWQgdGFncyB1c2luZyB0aGUgZ2VuZXJhdGVkIGtleSBmYWlscy4KKwljYXNlICIkZ3BnX3ZlcnNpb24iIGluCisJJ2dwZyAoR251UEcpIDEuMC42JyopCisJCXNheSAiWW91ciB2ZXJzaW9uIG9mIGdwZyAoMS4wLjYpIGlzIHRvbyBidWdneSBmb3IgdGVzdGluZyIKKwkJOzsKKwkqKQorCQkjIEF2YWlsYWJsZSBrZXkgaW5mbzoKKwkJIyAqIFR5cGUgRFNBIGFuZCBFbGdhbWFsLCBzaXplIDIwNDggYml0cywgbm8gZXhwaXJhdGlvbiBkYXRlLAorCQkjICAgbmFtZSBhbmQgZW1haWw6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwkJIyAqIFR5cGUgUlNBLCBzaXplIDIwNDggYml0cywgbm8gZXhwaXJhdGlvbiBkYXRlLAorCQkjICAgbmFtZSBhbmQgZW1haWw6IEVyaXMgRGlzY29yZGlhIDxkaXNjb3JkQGV4YW1wbGUubmV0PgorCQkjIE5vIHBhc3N3b3JkIGdpdmVuLCB0byBlbmFibGUgbm9uLWludGVyYWN0aXZlIG9wZXJhdGlvbi4KKwkJIyBUbyBnZW5lcmF0ZSBuZXcga2V5OgorCQkjCWdwZyAtLWhvbWVkaXIgL3RtcC9ncGdob21lIC0tZ2VuLWtleQorCQkjIFRvIHdyaXRlIGFybW9yZWQgZXhwb3J0ZWQga2V5IHRvIGtleXJpbmc6CisJCSMJZ3BnIC0taG9tZWRpciAvdG1wL2dwZ2hvbWUgLS1leHBvcnQtc2VjcmV0LWtleXMgXAorCQkjCQktLWFybW9yIDB4REVBREJFRUYgPj4gbGliLWdwZy9rZXlyaW5nLmdwZworCQkjCWdwZyAtLWhvbWVkaXIgL3RtcC9ncGdob21lIC0tZXhwb3J0IFwKKwkJIwkJLS1hcm1vciAweERFQURCRUVGID4+IGxpYi1ncGcva2V5cmluZy5ncGcKKwkJIyBUbyBleHBvcnQgb3duZXJ0cnVzdDoKKwkJIwlncGcgLS1ob21lZGlyIC90bXAvZ3BnaG9tZSAtLWV4cG9ydC1vd25lcnRydXN0IFwKKwkJIwkJPiBsaWItZ3BnL293bmVydHJ1c3QKKwkJbWtkaXIgLi9ncGdob21lICYmCisJCWNobW9kIDA3MDAgLi9ncGdob21lICYmCisJCUdOVVBHSE9NRT0iJChwd2QpL2dwZ2hvbWUiICYmCisJCWV4cG9ydCBHTlVQR0hPTUUgJiYKKwkJZ3BnIC0taG9tZWRpciAiJHtHTlVQR0hPTUV9IiAyPi9kZXYvbnVsbCAtLWltcG9ydCBcCisJCQkiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnL2tleXJpbmcuZ3BnICYmCisJCWdwZyAtLWhvbWVkaXIgIiR7R05VUEdIT01FfSIgMj4vZGV2L251bGwgLS1pbXBvcnQtb3duZXJ0cnVzdCBcCisJCQkiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnL293bmVydHJ1c3QgJiYKKwkJZ3BnIC0taG9tZWRpciAiJHtHTlVQR0hPTUV9IiA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMSBcCisJCQktLXNpZ24gLXUgY29tbWl0dGVyQGV4YW1wbGUuY29tICYmCisJCXRlc3Rfc2V0X3ByZXJlcSBHUEcKKwkJOzsKKwllc2FjCitmaQorCitpZiB0ZXN0X2hhdmVfcHJlcmVxIEdQRyAmJgorICAgIGVjaG8gfCBncGcgLS1ob21lZGlyICIke0dOVVBHSE9NRX0iIC1iIC0tcmZjMTk5MSA+L2Rldi9udWxsIDI+JjEKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgUkZDMTk5MQorZmkKKworc2FuaXRpemVfcGdwKCkgeworCXBlcmwgLW5lICcKKwkJL14tLS0tLUVORCBQR1AvIGFuZCAkaW5fcGdwID0gMDsKKwkJcHJpbnQgdW5sZXNzICRpbl9wZ3A7CisJCS9eLS0tLS1CRUdJTiBQR1AvIGFuZCAkaW5fcGdwID0gMTsKKwknCit9CmRpZmYgLS1naXQgYS90L2xpYi1ncGcva2V5cmluZy5ncGcgYi90L2xpYi1ncGcva2V5cmluZy5ncGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3NTRhMQotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLWdwZy9rZXlyaW5nLmdwZwpAQCAtMCwwICsxLDE0MiBAQAorLS0tLS1CRUdJTiBQR1AgUFJJVkFURSBLRVkgQkxPQ0stLS0tLQorVmVyc2lvbjogR251UEcgdjEKKworbFFHN0JFWm55eWtSQkFDekNQaklwVFlOTDdZMnRRcWxFR1RURGx2WmNXTkxqRjVmN1p6dXlPcU5PaWRMVWdGRAorMzZxY2gxTFpMU1prU2hkUjNHYWUrYnNvbHlqeHJsRnVGUDBlWFJQTXRxSzIwYUx3N1dadlBGcEVWMVRoTW5lKworUFJKallydmdoV3czTDBWVklBSVo4R1h3clZCdVU5OXVFakhFSTBvallsb092RmMyalZQZ1Nhb0J2d0NnNDhUagorZm9sMmZvU29KYTdYVXU5eUFMOHN6ZzhEL1JVc1R6TkYrSTloU1JIbDdNWUtGTVlvS0VZOUJEZ3JnQXVqcDdZWQorOHFkR3NpVWIwR2d5enAya1JqWkZ0NGxwY3ZLaEdmSG41R0VqbXRrK2ZSYkQ1cVBmTXFLRlcrVDBOUGZZbFltTAorSko0ZnM0cVo4THg3eDZpRzZYNTF1K1lOd3NRdUlHak1DQzNDZU5pM0Y3b3I2NTFra05ZQVNiYVExTlJPa0NJTgorTnVkeUEvMGFhc3ZvWlVvTkpBYzJjUDVJZnM2V2hYTVdMZk1SMnAyWGJmS3dLTlluZWVjNjB1c25TQ29tY0txaAorc0pWazBHeXR2cjNGT1lWaFJrWG5LQWJ4KzBXMnVyRlA4T0ZWQlRFS082VHMyVnlnV0dnbmVRWW9IbnF6d2xVRQoreWpPamxyK2x5Zjd1MnMvS0F4cEtBNmpudHRFZFJaQW16V2todW94MXd3QVVrcjI3L1FBQW4zVEV6S1IxcHh4UgorK1IzZEh1RnBubmZhdE1JREM1TzBJa01nVHlCTmFYUjBaWElnUEdOdmJXMXBkSFJsY2tCbGVHRnRjR3hsTG1OdgorYlQ2SVhnUVRFUUlBSGdVQ1JtZkxLUUliQXdZTENRZ0hBd0lERlFJREF4WUNBUUllQVFJWGdBQUtDUkFUdHZVZQoremQ1RERYUWRBS0M5MmYrd09yVGtibVBFZit1K3FBL0d2NkJ4UXdDZlExMjhKWENpM01wTUI4dEkyS21vMTV0WQorZ25tZEFqMEVSbWZMVGhBSUFNNjVlVDlUNitnZzBmSm4rUXhoczNGRkRQanhLNkFPQlMzU2llV1dtWE82c3RaWgorcGx2YjdyMitzWFlwOEhNSG50bk9YM1RSUG9sSXgxZHNka3YzVzN3OHlVemY5TG1vMlhNUHNaMy9pc1dkRWJPSQorQTByTzNCMXh3YlFPN3ZFb1dIZUI3dXlZSUY2WXNJSDBwTXF4a0ltY2l3QjF0bkpQQjlPeHFQSGxEL0h5eUhyMgordm9qNm5tRUdhUFFXajgvZGtmeWVuWG02WG1OWlVaTC9zbGs2dFJoTnd2NGNXM1FRTGgzOW5iaXo5cnF2Wk1LRgorWFg4d2tZNEZkUWtKakNHd3F6Rys3eUpjeUh2ZW0yOS9pcS8valJMWmdkaU44QndWM01DVEp5RHA4L1diL2Q5eQoralpjVW0xUmR0d1Jpd2ZoZlErem1weXNwbTdPeElOZkg2NXJmN2Y4QUJBMElBTFJpTVJzL2VPRDU5anJZWG1QUworWlFVYmlBTGxiSkp0dVAyYzlOM1daNU9ncmhEaUFXK1NESU4raGdEeW5KOWI3QzJkRTN4TmF1ZDR6YVhBQUY0NAorSjRKMGJBbzJadFpvSmFqdytHWHdhWmZoNFo3blBOSHdFY2JGRDQvdVhQQ2o5alBrY0xPSnFHbVVZMWFYZHlnbwordDNIbjVVL3pvOEp4UFE4M1liSlFoa3pBT1ovSEdvd0xOcUtnR2tMTEhuMVg5cWF5MEN4bGZUUWVFTjVSWnlsMworYjRxUnpHZ0dBTEZ2b2hleVpJVXcxVGJqUnBibjNrcWxKb29FUVkwMlZ3WEZYZkxJL0x3emdsaWxINnNTY2t2cworMFdIS0xaKzBMNmIzQ2dKSE4yUnNaN1F4d0NCaTFhZW1zdnI2NUZlRVhwL0FZeGFHNWR1VWJzdWdHOFBnb0owNgorYnNFQUFWUU5RTzNjWFdwdWlKL25OTExuV3VQdW5CS0pVbHVya0JkZjJHRCttK211RjBWcHdEY2hocXFiVE80ZQorRnFPSVNRUVlFUUlBQ1FVQ1JtZkxUZ0liREFBS0NSQVR0dlVlemQ1RERjSHNBS0RRY29BdERXSkZ1cFZScWxlQgorQ2V6eDRRMmtoQUNjQ3MrL0x0RThMYjloQysyY3ZyM3VINXA4MkFJPQorPWFFaVUKKy0tLS0tRU5EIFBHUCBQUklWQVRFIEtFWSBCTE9DSy0tLS0tCistLS0tLUJFR0lOIFBHUCBQUklWQVRFIEtFWSBCTE9DSy0tLS0tCitWZXJzaW9uOiBHbnVQRyB2MQorCitsUU9ZQkZGTWxrY0JDQURKaS94bkFGOHlJMzRQSGlsU0NiTTdWdE9GTzE3b0ZNa3B1NGNnTjJRcFB1TTVNVmp5CitjdnJ6S1NndVpGdlBDREx6ZUFGSlcxdVB4TDRTSGFIU2tpc0NyRmhpakg3T0pXY09QTlBTRkN3dStpbkFvQXN2CitIbTRuczZwZkRaeVJqVlRIU1k0cmRNSVNxS0ZSb3phWHU4dkhlQlJ6SWhGbnViQkNlcEtaVzA3b0tQbnJuRUxWCitUVlVTVVZJKzZlbDhKRm1KSVd4eExOTGhmUlJTUEYwdjRNRFhQRi8vaUNXaVpESStKMXBMdlE1Vi9mN1l0ZnNECitHVjBvUFk2Nko3MkJGSkc1NTVlS0J0dG5OWTkwMUxtSTNvY241UDVpVm5YRGFxTUVsdzdGS3BuQU5YdWNnWTNICis0a0x5TmtJM3MzSjBDR2JYSTdiM01CV3RqY3R1aFd2MXEyRzVBQkVCQUFFQUIvd0xpdXphL3FFZnYxQ2ZqN0ZRCit5dEFYcHoxWW9BY3JjTS81M1RlUlFocmJ2SWVlNVpOR2hMZENreW90ODFRZXVKclNhWE8wRTlDeFJ5bnJqUVE3CitpYllxTjdIeTB1dTFrQWJRUUpqbVZkUVhUS25LSjdXbTdvTTRoWWhOc1ZDS05YYysxKzVBZkRZR2c0blpvYjM2CitxcWdIdGMrQXJkbDVWZlVnN3VGK2Vacm5TTXlualpBTmdpa0tiUHRFMDlES1Z0Vk90VUU0eFREOWlqa3BnbjY1CitnbHNaRHFiN0o0UVZnVGVFaUNES0pzUXZpbjNTd3JQQnFCeEJSVUxGMlRJYU1iT3dlNmRIaWlhSTg1cnN2QVdTCitWR3pvblVCM0lVMTQ3MFAyU0RJVmN6YlhZVUsvbkRTR3g2Wlowd0x1OVpjQ3lVUHZ4VkV5a3VoMlA0VVdIbGErCituSExSQkFETUxhdmNmanNDSTVDUlVzZHVyWXBnRThZM2JFYmNEcHZ6QXU1alQ1RDI1cDNZUERPRE9YRDNBS1R0CitQelZNQVJWdHY4dHdrYmdBeVdhb0Rldkp6OE90bW9Td3NXamRGbzRZdnNZdzlqVjdZZjNHd3pEM1lhMVpuVzMyCitKV1FyNmNYOHFjSzBBdWtBRDdVWmtWeWhVMktCdkIwMnQ4bEtITGJTY0hYVFlWcXJ5d1FBL0xOVVh3bUhqaSs2Citvc25TUUFDOFg5Z2dNT0VzOWRHbzdRbGs0SmdmR0FIMTdDRkkzUzN1YnNhVkVkeHozWXd6T2tEOFNObUViTHlXCithN0NaL1JucGRBWlUwbkI3a1NmYmZabDdhamhQYmdLQk1zYVYyeXZhRGRKZW9yNG01ZUtkWGZmUmswU2tzeGpMCitaLzRQMXRUSXVMOFd6ZXRHQi9hRGNXREZnc2VTQUFzRUFMem1mNTc5cHRsU21EeUdSQUtRcXViK21qNFYzRVVaCisxR1ZHY2ZCWTg2dzNCWlZEc2FSaUN0Y05qay9sY1A0QVoxVmJiNDJSTTZqazhuTHNFTlJjN3JmMnhhN1pQZjBUCis2bjVGNlcrdms3RUc3NlJvRmhLVnRHWm5nR0tpREdWYXZ4azNGVC95ZjhsS3JUM3dZaVQwM1NaRHVaMHBXdmt1CitGaUpHRXllc0FDOFdSejYwSkVWeWFYTWdSR2x6WTI5eVpHbGhJRHhrYVhOamIzSmtRR1Y0WVcxd2JHVXVibVYwCitQb2tCT0FRVEFRSUFJZ1VDVVV5V1J3SWJBd1lMQ1FnSEF3SUdGUWdDQ1FvTEJCWUNBd0VDSGdFQ0Y0QUFDZ2tRCitZUWt1aGJjaWNZbFlvd2Y3QitmK0ZEY0xWZnc4WHpHbEtrdTFGNlBJMXlHQ3Q3QU1PMi9Ka21PNExsZ0h1SWdGCitwcWU1Yi9YaktsMElzUmNiVkxpdHFpSW9rYzh1KzdIOHlZVTY3RERsaXE3dDFncUJ5K3FUaFNIY2duNldNS1RhCitxQ3FPRTJqekh5cXVsSUF6UXNKUStjNVNSb2ZFWkFLVDRRYTJEeStuc3FXRHBJRTc4YUpkMFZua2s5VTZIMlZ1CitBQnZVZU4vSU1ndnhQcjUyNW8rckJEN0xVNEozQ3RPemZWK3NPNiszM2RhK0JtOVVoa1I0dEM0SC9uMWRETjFKCitZdXhCUWJneFRxL2g4bUtlNC83L1l2eSs1V3NZZDk2WlJMRTJaRldlV1h0S2t3bVliUTQyRzNTWlVYYVo4UjhPCit0YlR5VXJqYkZLaXBPNHd2WHdoeWp1MWw5Y3hBc3JjYTZ4YlNDSjBEbUFSUlRKWkhBUWdBcVR0UEZjVFhxTStVCitvN2JPb28rZGNIaThYRGYvOFhTRW1aZk1LYy9VNXBTVEJrN2gxZ1NLdUd6akYybjN3UW02QTgrMTAxdlRMYVE2CitQb0ZERlc4dVFCMDBtanltR3JSRFlGZ3o4YmpobmFla1puQTRYVGhyMVJPamZmZ01oczN1VHBDZWJkVitsTDhLCiswb0pUSGMzOVRQTFRnMjNERmNSU0ROKzNBUkpKUzcrQ1JCSWJ0OUw1Z09icGdBNEhVYXAvbzZON08wNHJRT1BVCis4M01BcW53bzJKVE8vRGVkMHpvYWQwVm8zMU5tazRGK0t2RUU1MmZ0R0hiZDd5cUlVR0tCdDJTZVRBaDg1MGFjCitMZU5aUCtWMVk3YXRCQ3I3L3ptK0pwSFdxOU9INy9Ob21sRUlreEw4V0R0OEdmQUtvcVpncWVmTCtBQ0VuTGJBCit0MWR1M2YwRnN3QVJBUUFCQUFmOERjbGFJUURmUE01a1lvM3krWVZQb3lrQzExUnNrbVFXcFZpYmRsQ0xISm0vCisvSVNTbTFmVllUN2xwVE9wemwwWGZWWC9qdzlzL2N2aVB0TlMvcjBHL0l3a2krZ2k5QXY1YlREaVVtL29XV3FkCisxd2FQWVBER3dCNFFkS092aVkvZk9TRkk5dE9zc3p0NUN6czR3RFhXeTkwQVpEV2Q3ZmtIWWlzYmdvZlYxc2pLCitROGJZUVBhYmNlcGNaMkp5RVQrRXBaQkVtVUhIcVE3NmJUaXFqTitWejZrMU9GbHNFQnpHa0UrV0lha0Foa1EyCis1N29VclJnRmUraDZDaDdtZUIvdjZ2VmZJUlNzTHBaZTE4M3VjNFNpZ3F0ZnNnamJHOVBxT2NBSk9xb3ZEbmNCCitTY2czcXZwV0ZPQWtUQTNSZSt5QlBVZDJISGw5V0YvVFBhMmtCRENUMlFRQXhjSlplVUN1VWdEZ0NpenFFZ2ZzCitLem02ZHk0Ry9PSmRXMHE5bTlwc0hxRDFYV0xkN1pMRTQrZVRTMWN4a3RKaUdjR05kR29aRDBFdGd4a1YwOXVNCisxMlFZQ09CRXJGSnp2NC80b2xlZEhlRWhUYVJSL21GRkdScCtrV1R6MkFpL3pOcVVkM0QrK0RZVWU4ZzRtVlFKCis2SlAwMTRYaHZvUm5hQ2ZUOGNIOVpkMEVBTnNTTDcwV0dkaWZjVm9XS0E5akZKaGFoYzBzU0c2SVp2TU9jN2JzCitjU2JoQnFMRW5oZU9ia2FyQlArQSt6Z2xscUlmK3NiQ2Fzc01YamNWNTJtbmw5dGgzSjVSV3I3c2NyUUxKOVpYCitJdnozdW9QODV2d2xVSTk4ZEk5cm9ZSzBPcEttRzRoTkZwcEFjZ2lDVk5Wam5RbGh1US9Ib2V4Ukh4Um1ubWNiCiszOGpQQS9zRUhQQ0ZiTENHT1NCK0hRTkt4LzVXZjZWcEZYLzRvQk5iSVVpWW94Y1JsMGpwWVQ3TGMwemJjOFNvCitIdGhqUGZXaFhoS3pZdkVEQzVZZ0FTRXkxY05iR01VSmNHeXVBSW53SVFqcTQ0RlN3Uk1rSTNJU1NIbmJ2MWlICiswd0JWSlV6cGx1TWViRUFlc2RaVXoxRGNaV1ZmNmVWSkQwZGhaeEQ2RG9HN1hqMW05VGhVaVFFZkJCZ0JBZ0FKCitCUUpSVEpaSEFoc01BQW9KRUdFSkxvVzNJbkdKN0hFSUFNWGtNZjRjT1dtbkF1dnZjU20zS3BMZ2h1V2lrOWR5CitmbjFzWS9JRzVhdG9LSyt5cG1WL1RsQmxNWnFGUXp1UElKUVQ4VkxibXh0TGxEaEpHMDRMYkk2YzhheElaeE9PCitaS0x5NW5UVFN5MTZ6dHFFZVM3ZWlmSExQWmcxVUZGeUVFSVExWFcwQ05EQWV1V0toOTBFUmp5bDRDZzdQbldTCitaOUVpK3pqNkpENVBjZGkzQkpoUW85V09MT1ZFSjBOSG1ld1RZcWs5UVZYSC8wdjFIZGw0TE1KdGdjYmRiRFdrCis0VVRrWGJnOXBuM3VtQ2drTkozVnM4ZlduSVdPOUl6ZHIyL3dyRlkySnZVVDdZdmwrd3NOSVdhdHZPRXpHeTduCitCT1c3OFdVeHpodTBZSlRMS3kraUtDamc1SFM1ZHg2T0MrZTRhRUVnZmhOUENNa2J2RHNKanRRPQorPWhpZUoKKy0tLS0tRU5EIFBHUCBQUklWQVRFIEtFWSBCTE9DSy0tLS0tCistLS0tLUJFR0lOIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS0KK1ZlcnNpb246IEdudVBHIHYxCisKK21RR2lCRVpueXlrUkJBQ3pDUGpJcFRZTkw3WTJ0UXFsRUdUVERsdlpjV05MakY1ZjdaenV5T3FOT2lkTFVnRkQKKzM2cWNoMUxaTFNaa1NoZFIzR2FlK2Jzb2x5anhybEZ1RlAwZVhSUE10cUsyMGFMdzdXWnZQRnBFVjFUaE1uZSsKK1BSSmpZcnZnaFd3M0wwVlZJQUlaOEdYd3JWQnVVOTl1RWpIRUkwb2pZbG9PdkZjMmpWUGdTYW9CdndDZzQ4VGoKK2ZvbDJmb1NvSmE3WFV1OXlBTDhzemc4RC9SVXNUek5GK0k5aFNSSGw3TVlLRk1Zb0tFWTlCRGdyZ0F1anA3WVkKKzhxZEdzaVViMEdneXpwMmtSalpGdDRscGN2S2hHZkhuNUdFam10aytmUmJENXFQZk1xS0ZXK1QwTlBmWWxZbUwKK0pKNGZzNHFaOEx4N3g2aUc2WDUxdStZTndzUXVJR2pNQ0MzQ2VOaTNGN29yNjUxa2tOWUFTYmFRMU5ST2tDSU4KK051ZHlBLzBhYXN2b1pVb05KQWMyY1A1SWZzNldoWE1XTGZNUjJwMlhiZkt3S05ZbmVlYzYwdXNuU0NvbWNLcWgKK3NKVmswR3l0dnIzRk9ZVmhSa1huS0FieCswVzJ1ckZQOE9GVkJURUtPNlRzMlZ5Z1dHZ25lUVlvSG5xendsVUUKK3lqT2pscitseWY3dTJzL0tBeHBLQTZqbnR0RWRSWkFteldraHVveDF3d0FVa3IyNy9iUWlReUJQSUUxcGRIUmwKK2NpQThZMjl0YldsMGRHVnlRR1Y0WVcxd2JHVXVZMjl0UG9oZUJCTVJBZ0FlQlFKR1o4c3BBaHNEQmdzSkNBY0QKK0FnTVZBZ01ERmdJQkFoNEJBaGVBQUFvSkVCTzI5UjdOM2tNTmRCMEFvTDNaLzdBNnRPUnVZOFIvNjc2b0Q4YS8KK29IRkRBSjlEWGJ3bGNLTGN5a3dIeTBqWXFhalhtMWlDZWJrQ0RRUkdaOHRPRUFnQXpybDVQMVByNkNEUjhtZjUKK0RHR3pjVVVNK1BFcm9BNEZMZEtKNVphWmM3cXkxbG1tVzl2dXZiNnhkaW53Y3dlZTJjNWZkTkUraVVqSFYyeDIKK1MvZGJmRHpKVE4vMHVhalpjdyt4bmYrS3haMFJzNGdEU3M3Y0hYSEJ0QTd1OFNoWWQ0SHU3SmdnWHBpd2dmU2sKK3lyR1FpWnlMQUhXMmNrOEgwN0dvOGVVUDhmTElldmEraVBxZVlRWm85QmFQejkyUi9KNmRlYnBlWTFsUmt2K3kKK1dUcTFHRTNDL2h4YmRCQXVIZjJkdUxQMnVxOWt3b1ZkZnpDUmpnVjFDUW1NSWJDck1iN3ZJbHpJZTk2YmIzK0sKK3IvK05FdG1CMkkzd0hCWGN3Sk1uSU9uejladjkzM0tObHhTYlZGMjNCR0xCK0Y5RDdPYW5LeW1iczdFZzE4ZnIKK210L3Qvd0FFRFFnQXRHSXhHejk0NFBuMk90aGVZOUpsQlJ1SUF1VnNrbTI0L1p6MDNkWm5rNkN1RU9JQmI1SU0KK2czNkdBUEtjbjF2c0xaMFRmRTFxNTNqTnBjQUFYamduZ25Sc0NqWm0xbWdscVBENFpmQnBsK0hobnVjODBmQVIKK3hzVVBqKzVjOEtQMk0rUndzNG1vYVpSalZwZDNLQ2kzY2VmbFQvT2p3bkU5RHpkaHNsQ0dUTUE1bjhjYWpBczIKK29xQWFRc3NlZlZmMnByTFFMR1Y5TkI0UTNsRm5LWGR2aXBITWFBWUFzVytpRjdKa2hURFZOdU5HbHVmZVNxVW0KK2lnUkJqVFpYQmNWZDhzajh2RE9DV0tVZnF4SnlTK3pSWWNvdG43UXZwdmNLQWtjM1pHeG50REhBSUdMVnA2YXkKKyt2cmtWNFJlbjhCakZvYmwyNVJ1eTZBYncrQ2duVHB1d1loSkJCZ1JBZ0FKQlFKR1o4dE9BaHNNQUFvSkVCTzIKKzlSN04za01Od2V3QW9OQnlnQzBOWWtXNmxWR3FWNEVKN1BIaERhU0VBSndLejc4dTBUd3R2MkVMN1p5K3ZlNGYKK21uellBcGtCRFFSUlRKWkhBUWdBeVl2OFp3QmZNaU4rRHg0cFVnbXpPMWJUaFR0ZTZCVEpLYnVISURka0tUN2oKK09URlk4bkw2OHlrb0xtUmJ6d2d5ODNnQlNWdGJqOFMrRWgyaDBwSXJBcXhZWW94K3ppVm5EanpUMGhRc0x2b3AKK3dLQUxMeDV1SjdPcVh3MmNrWTFVeDBtT0szVENFcWloVWFNMmw3dkx4M2dVY3lJUlo3bXdRbnFTbVZ0TzZDajUKKzY1eEMxVTFWRWxGU1B1bnBmQ1JaaVNGc2NTelM0WDBVVWp4ZEwrREExenhmLzRnbG9tUXlQaWRhUzcwT1ZmMysKKzJMWDdBeGxkS0QyT3VpZTlnUlNSdWVlWGlnYmJaeldQZE5TNWlONkhKK1QrWWxaMXcycWpCSmNPeFNxWndEVjcKK25JR054K0pDOGpaQ043TnlkQWhtMXlPMjl6QVZyWTNMYm9WcjlhdGh1UUFSQVFBQnRDUkZjbWx6SUVScGMyTnYKK2NtUnBZU0E4WkdselkyOXlaRUJsZUdGdGNHeGxMbTVsZEQ2SkFUZ0VFd0VDQUNJRkFsRk1sa2NDR3dNR0N3a0kKK0J3TUNCaFVJQWdrS0N3UVdBZ01CQWg0QkFoZUFBQW9KRUdFSkxvVzNJbkdKV0tNSCt3Zm4vaFEzQzFYOFBGOHgKK3BTcEx0UmVqeU5jaGdyZXdERHR2eVpKanVDNVlCN2lJQmFhbnVXLzE0eXBkQ0xFWEcxUzRyYW9pS0pIUEx2dXgKKy9NbUZPdXd3NVlxdTdkWUtnY3ZxazRVaDNJSitsakNrMnFncWpoTm84eDhxcnBTQU0wTENVUG5PVWthSHhHUUMKK2srRUd0Zzh2cDdLbGc2U0JPL0dpWGRGWjVKUFZPaDlsYmdBYjFIamZ5RElMOFQ2K2R1YVBxd1EreTFPQ2R3clQKK3MzMWZyRHV2dDkzV3ZnWnZWSVpFZUxRdUIvNTlYUXpkU1dMc1FVRzRNVTZ2NGZKaW51UCsvMkw4dnVWckdIZmUKK21VU3hObVJWbmxsN1NwTUptRzBPTmh0MG1WRjJtZkVmRHJXMDhsSzQyeFNvcVR1TUwxOEljbzd0WmZYTVFMSzMKK0d1c1cwZ2k1QVEwRVVVeVdSd0VJQUtrN1R4WEUxNmpQbEtPMnpxS1BuWEI0dkZ3My8vRjBoSm1YekNuUDFPYVUKK2t3Wk80ZFlFaXJoczR4ZHA5OEVKdWdQUHRkTmIweTJrT2o2QlF4VnZMa0FkTkpvOHBocTBRMkJZTS9HNDRaMm4KK3BHWndPRjA0YTlVVG8zMzRESWJON2s2UW5tM1ZmcFMvQ3RLQ1V4M04vVXp5MDROdHd4WEVVZ3pmdHdFU1NVdS8KK2drUVNHN2ZTK1lEbTZZQU9CMUdxZjZPamV6dE9LMERqMVBOekFLcDhLTmlVenZ3M25kTTZHbmRGYU45VFpwT0IKK2ZpcnhCT2RuN1JoMjNlOHFpRkJpZ2Jka25rd0lmT2RHbkMzaldUL2xkV08yclFRcSsvODV2aWFSMXF2VGgrL3oKK2FKcFJDSk1TL0ZnN2ZCbndDcUttWUtubnkvZ0FoSnkyd0xkWGJ0MzlCYk1BRVFFQUFZa0JId1FZQVFJQUNRVUMKK1VVeVdSd0liREFBS0NSQmhDUzZGdHlKeGlleHhDQURGNURIK0hEbHBwd0xyNzNFcHR5cVM0SWJsb3BQWGNuNTkKK2JHUHlCdVdyYUNpdnNxWmxmMDVRWlRHYWhVTTdqeUNVRS9GUzI1c2JTNVE0U1J0T0MyeU9uUEdzU0djVGptU2kKKzh1WjAwMHN0ZXM3YWhIa3Uzb254eXoyWU5WQlJjaEJDRU5WMXRBalF3SHJsaW9mZEJFWThwZUFvT3o1MWttZlIKK0l2czQraVErVDNIWXR3U1lVS1BWaml6bFJDZERSNW5zRTJLcFBVRlZ4LzlMOVIzWmVDekNiWUhHM1d3MXBPRkUKKzVGMjRQYVo5N3Bnb0pEU2QxYlBIMXB5Rmp2U00zYTl2OEt4V05pYjFFKzJMNWZzTERTRm1yYnpoTXhzdTV3VGwKK3UvRmxNYzRidEdDVXl5c3ZvaWdvNE9SMHVYY2VqZ3ZudUdoQklINFRUd2pKRzd3N0NZN1UKKz1pWXYvCistLS0tLUVORCBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tCmRpZmYgLS1naXQgYS90L2xpYi1ncGcvb3duZXJ0cnVzdCBiL3QvbGliLWdwZy9vd25lcnRydXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZTNjNGYKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1ncGcvb3duZXJ0cnVzdApAQCAtMCwwICsxLDQgQEAKKyMgTGlzdCBvZiBhc3NpZ25lZCB0cnVzdHZhbHVlcywgY3JlYXRlZCBUaHUgMTEgRGVjIDIwMTQgMDE6MjY6MjggUE0gQ0VUCisjIChVc2UgImdwZyAtLWltcG9ydC1vd25lcnRydXN0IiB0byByZXN0b3JlIHRoZW0pCis3M0Q3NTg3NDRCRTcyMTY5OEVDNTRFODcxM0I2RjUxRUNEREU0MzBEOjY6CitENEJFMjIzMTFBRDMxMzFFNUVEQTI5QTQ2MTA5MkU4NUI3MjI3MTg5OjM6CmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC5zaCBiL3QvbGliLWh0dHBkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NzE0NDYKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1odHRwZC5zaApAQCAtMCwwICsxLDI4NiBAQAorIyBTaGVsbCBsaWJyYXJ5IHRvIHJ1biBhbiBIVFRQIHNlcnZlciBmb3IgdXNlIGluIHRlc3RzLgorIyBFbmRzIHRoZSB0ZXN0IGVhcmx5IGlmIGh0dHBkIHRlc3RzIHNob3VsZCBub3QgYmUgcnVuLAorIyBmb3IgZXhhbXBsZSBiZWNhdXNlIHRoZSB1c2VyIGhhcyBub3QgZW5hYmxlZCB0aGVtLgorIworIyBVc2FnZToKKyMKKyMJLiAuL3Rlc3QtbGliLnNoCisjCS4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCisjCXN0YXJ0X2h0dHBkCisjCisjCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uLicgJworIwkJLi4uCisjCScKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAuLi4KKyMKKyMJc3RvcF9odHRwZAorIwl0ZXN0X2RvbmUKKyMKKyMgQ2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMuCisjCisjICAgIEdJVF9URVNUX0hUVFBEICAgICAgICAgICAgICBlbmFibGUgSFRUUEQgdGVzdHMKKyMgICAgTElCX0hUVFBEX1BBVEggICAgICAgICAgICAgIHdlYiBzZXJ2ZXIgcGF0aAorIyAgICBMSUJfSFRUUERfTU9EVUxFX1BBVEggICAgICAgd2ViIHNlcnZlciBtb2R1bGVzIHBhdGgKKyMgICAgTElCX0hUVFBEX1BPUlQgICAgICAgICAgICAgIGxpc3RlbmluZyBwb3J0CisjICAgIExJQl9IVFRQRF9EQVYgICAgICAgICAgICAgICBlbmFibGUgREFWCisjICAgIExJQl9IVFRQRF9TVk4gICAgICAgICAgICAgICBlbmFibGUgU1ZOCisjICAgIExJQl9IVFRQRF9TU0wgICAgICAgICAgICAgICBlbmFibGUgU1NMCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBDbGVtZW5zIEJ1Y2hhY2hlciA8ZHJpenpkQGFvbi5hdD4KKyMKKworaWYgdGVzdCAtbiAiJE5PX0NVUkwiCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHRlc3QsIGdpdCBidWlsdCB3aXRob3V0IGh0dHAgc3VwcG9ydCcKKwl0ZXN0X2RvbmUKK2ZpCisKK2lmIHRlc3QgLW4gIiROT19FWFBBVCIgJiYgdGVzdCAtbiAiJExJQl9IVFRQRF9EQVYiCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHRlc3QsIGdpdCBidWlsdCB3aXRob3V0IGV4cGF0IHN1cHBvcnQnCisJdGVzdF9kb25lCitmaQorCit0ZXN0X3RyaXN0YXRlIEdJVF9URVNUX0hUVFBECitpZiB0ZXN0ICIkR0lUX1RFU1RfSFRUUEQiID0gZmFsc2UKK3RoZW4KKwlza2lwX2FsbD0iTmV0d29yayB0ZXN0aW5nIGRpc2FibGVkICh1bnNldCBHSVRfVEVTVF9IVFRQRCB0byBlbmFibGUpIgorCXRlc3RfZG9uZQorZmkKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIE5PVF9ST09UOyB0aGVuCisJdGVzdF9za2lwX29yX2RpZSAkR0lUX1RFU1RfSFRUUEQgXAorCQkiQ2Fubm90IHJ1biBodHRwZCB0ZXN0cyBhcyByb290IgorZmkKKworSFRUUERfUEFSQT0iIgorCitmb3IgREVGQVVMVF9IVFRQRF9QQVRIIGluICcvdXNyL3NiaW4vaHR0cGQnICcvdXNyL3NiaW4vYXBhY2hlMicKK2RvCisJaWYgdGVzdCAteCAiJERFRkFVTFRfSFRUUERfUEFUSCIKKwl0aGVuCisJCWJyZWFrCisJZmkKK2RvbmUKKworZm9yIERFRkFVTFRfSFRUUERfTU9EVUxFX1BBVEggaW4gJy91c3IvbGliZXhlYy9hcGFjaGUyJyBcCisJCQkJICcvdXNyL2xpYi9hcGFjaGUyL21vZHVsZXMnIFwKKwkJCQkgJy91c3IvbGliNjQvaHR0cGQvbW9kdWxlcycgXAorCQkJCSAnL3Vzci9saWIvaHR0cGQvbW9kdWxlcycKK2RvCisJaWYgdGVzdCAtZCAiJERFRkFVTFRfSFRUUERfTU9EVUxFX1BBVEgiCisJdGhlbgorCQlicmVhaworCWZpCitkb25lCisKK2Nhc2UgJCh1bmFtZSkgaW4KKwlEYXJ3aW4pCisJCUhUVFBEX1BBUkE9IiRIVFRQRF9QQVJBIC1ERGFyd2luIgorCTs7Citlc2FjCisKK0xJQl9IVFRQRF9QQVRIPSR7TElCX0hUVFBEX1BBVEgtIiRERUZBVUxUX0hUVFBEX1BBVEgifQorTElCX0hUVFBEX1BPUlQ9JHtMSUJfSFRUUERfUE9SVC0ke3RoaXNfdGVzdCN0fX0KKworVEVTVF9QQVRIPSIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZAorSFRUUERfUk9PVF9QQVRIPSIkUFdEIi9odHRwZAorSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIPSRIVFRQRF9ST09UX1BBVEgvd3d3CisKKyMgaGFjayB0byBzdXBwcmVzcyBhcGFjaGUgUGFzc0VudiB3YXJuaW5ncworR0lUX1ZBTEdSSU5EPSRHSVRfVkFMR1JJTkQ7IGV4cG9ydCBHSVRfVkFMR1JJTkQKK0dJVF9WQUxHUklORF9PUFRJT05TPSRHSVRfVkFMR1JJTkRfT1BUSU9OUzsgZXhwb3J0IEdJVF9WQUxHUklORF9PUFRJT05TCitHSVRfVFJBQ0U9JEdJVF9UUkFDRTsgZXhwb3J0IEdJVF9UUkFDRQorCitpZiAhIHRlc3QgLXggIiRMSUJfSFRUUERfUEFUSCIKK3RoZW4KKwl0ZXN0X3NraXBfb3JfZGllICRHSVRfVEVTVF9IVFRQRCAibm8gd2ViIHNlcnZlciBmb3VuZCBhdCAnJExJQl9IVFRQRF9QQVRIJyIKK2ZpCisKK0hUVFBEX1ZFUlNJT049YCRMSUJfSFRUUERfUEFUSCAtdiB8IFwKKwlzZWQgLW4gJ3MvXlNlcnZlciB2ZXJzaW9uOiBBcGFjaGVcL1woWzAtOV0qXClcLi4qJC9cMS9wOyBxJ2AKKworaWYgdGVzdCAtbiAiJEhUVFBEX1ZFUlNJT04iCit0aGVuCisJaWYgdGVzdCAteiAiJExJQl9IVFRQRF9NT0RVTEVfUEFUSCIKKwl0aGVuCisJCWlmICEgdGVzdCAkSFRUUERfVkVSU0lPTiAtZ2UgMgorCQl0aGVuCisJCQl0ZXN0X3NraXBfb3JfZGllICRHSVRfVEVTVF9IVFRQRCBcCisJCQkJImF0IGxlYXN0IEFwYWNoZSB2ZXJzaW9uIDIgaXMgcmVxdWlyZWQiCisJCWZpCisJCWlmICEgdGVzdCAtZCAiJERFRkFVTFRfSFRUUERfTU9EVUxFX1BBVEgiCisJCXRoZW4KKwkJCXRlc3Rfc2tpcF9vcl9kaWUgJEdJVF9URVNUX0hUVFBEIFwKKwkJCQkiQXBhY2hlIG1vZHVsZSBkaXJlY3Rvcnkgbm90IGZvdW5kIgorCQlmaQorCisJCUxJQl9IVFRQRF9NT0RVTEVfUEFUSD0iJERFRkFVTFRfSFRUUERfTU9EVUxFX1BBVEgiCisJZmkKK2Vsc2UKKwl0ZXN0X3NraXBfb3JfZGllICRHSVRfVEVTVF9IVFRQRCBcCisJCSJDb3VsZCBub3QgaWRlbnRpZnkgd2ViIHNlcnZlciBhdCAnJExJQl9IVFRQRF9QQVRIJyIKK2ZpCisKK2luc3RhbGxfc2NyaXB0ICgpIHsKKwl3cml0ZV9zY3JpcHQgIiRIVFRQRF9ST09UX1BBVEgvJDEiIDwiJFRFU1RfUEFUSC8kMSIKK30KKworcHJlcGFyZV9odHRwZCgpIHsKKwlta2RpciAtcCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIKKwljcCAiJFRFU1RfUEFUSCIvcGFzc3dkICIkSFRUUERfUk9PVF9QQVRIIgorCWluc3RhbGxfc2NyaXB0IGJyb2tlbi1zbWFydC1odHRwLnNoCisJaW5zdGFsbF9zY3JpcHQgZXJyb3Iuc2gKKworCWxuIC1zICIkTElCX0hUVFBEX01PRFVMRV9QQVRIIiAiJEhUVFBEX1JPT1RfUEFUSC9tb2R1bGVzIgorCisJaWYgdGVzdCAtbiAiJExJQl9IVFRQRF9TU0wiCisJdGhlbgorCQlIVFRQRF9QUk9UTz1odHRwcworCisJCVJBTkRGSUxFX1BBVEg9IiRIVFRQRF9ST09UX1BBVEgiLy5ybmQgb3BlbnNzbCByZXEgXAorCQkJLWNvbmZpZyAiJFRFU1RfUEFUSC9zc2wuY25mIiBcCisJCQktbmV3IC14NTA5IC1ub2RlcyBcCisJCQktb3V0ICIkSFRUUERfUk9PVF9QQVRIL2h0dHBkLnBlbSIgXAorCQkJLWtleW91dCAiJEhUVFBEX1JPT1RfUEFUSC9odHRwZC5wZW0iCisJCUdJVF9TU0xfTk9fVkVSSUZZPXQKKwkJZXhwb3J0IEdJVF9TU0xfTk9fVkVSSUZZCisJCUhUVFBEX1BBUkE9IiRIVFRQRF9QQVJBIC1EU1NMIgorCWVsc2UKKwkJSFRUUERfUFJPVE89aHR0cAorCWZpCisJSFRUUERfREVTVD0xMjcuMC4wLjE6JExJQl9IVFRQRF9QT1JUCisJSFRUUERfVVJMPSRIVFRQRF9QUk9UTzovLyRIVFRQRF9ERVNUCisJSFRUUERfVVJMX1VTRVI9JEhUVFBEX1BST1RPOi8vdXNlciU0MGhvc3RAJEhUVFBEX0RFU1QKKwlIVFRQRF9VUkxfVVNFUl9QQVNTPSRIVFRQRF9QUk9UTzovL3VzZXIlNDBob3N0OnBhc3MlNDBob3N0QCRIVFRQRF9ERVNUCisKKwlpZiB0ZXN0IC1uICIkTElCX0hUVFBEX0RBViIgfHwgdGVzdCAtbiAiJExJQl9IVFRQRF9TVk4iCisJdGhlbgorCQlIVFRQRF9QQVJBPSIkSFRUUERfUEFSQSAtRERBViIKKworCQlpZiB0ZXN0IC1uICIkTElCX0hUVFBEX1NWTiIKKwkJdGhlbgorCQkJSFRUUERfUEFSQT0iJEhUVFBEX1BBUkEgLURTVk4iCisJCQlyYXdzdm5yZXBvPSIkSFRUUERfUk9PVF9QQVRIL3N2bnJlcG8iCisJCQlzdm5yZXBvPSJodHRwOi8vMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVC9zdm4iCisJCWZpCisJZmkKK30KKworc3RhcnRfaHR0cGQoKSB7CisJcHJlcGFyZV9odHRwZCA+JjMgMj4mNAorCisJdHJhcCAnY29kZT0kPzsgc3RvcF9odHRwZDsgKGV4aXQgJGNvZGUpOyBkaWUnIEVYSVQKKworCSIkTElCX0hUVFBEX1BBVEgiIC1kICIkSFRUUERfUk9PVF9QQVRIIiBcCisJCS1mICIkVEVTVF9QQVRIL2FwYWNoZS5jb25mIiAkSFRUUERfUEFSQSBcCisJCS1jICJMaXN0ZW4gMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVCIgLWsgc3RhcnQgXAorCQk+JjMgMj4mNAorCWlmIHRlc3QgJD8gLW5lIDAKKwl0aGVuCisJCXRyYXAgJ2RpZScgRVhJVAorCQl0ZXN0X3NraXBfb3JfZGllICRHSVRfVEVTVF9IVFRQRCAid2ViIHNlcnZlciBzZXR1cCBmYWlsZWQiCisJZmkKK30KKworc3RvcF9odHRwZCgpIHsKKwl0cmFwICdkaWUnIEVYSVQKKworCSIkTElCX0hUVFBEX1BBVEgiIC1kICIkSFRUUERfUk9PVF9QQVRIIiBcCisJCS1mICIkVEVTVF9QQVRIL2FwYWNoZS5jb25mIiAkSFRUUERfUEFSQSAtayBzdG9wCit9CisKK3Rlc3RfaHR0cF9wdXNoX25vbmZmICgpIHsKKwlSRU1PVEVfUkVQTz0kMQorCUxPQ0FMX1JFUE89JDIKKwlCUkFOQ0g9JDMKKwlFWFBFQ1RfQ0FTX1JFU1VMVD0kezQtZmFpbHVyZX0KKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1mYXN0LWZvcndhcmQgcHVzaCBmYWlscycgJworCQljZCAiJFJFTU9URV9SRVBPIiAmJgorCQlIRUFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJCWNkICIkTE9DQUxfUkVQTyIgJiYKKwkJZ2l0IGNoZWNrb3V0ICRCUkFOQ0ggJiYKKwkJZWNobyAiY2hhbmdlZCIgPiBwYXRoMiAmJgorCQlnaXQgY29tbWl0IC1hIC1tIHBhdGgyIC0tYW1lbmQgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtdiBvcmlnaW4gPm91dHB1dCAyPiYxICYmCisJCShjZCAiJFJFTU9URV9SRVBPIiAmJgorCQkgdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tZmFzdC1mb3J3YXJkIHB1c2ggc2hvdyByZWYgc3RhdHVzJyAnCisJCWdyZXAgIl4gISBcW3JlamVjdGVkXF1bIF0qJEJSQU5DSCAtPiAkQlJBTkNIIChub24tZmFzdC1mb3J3YXJkKSQiIG91dHB1dAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1mYXN0LWZvcndhcmQgcHVzaCBzaG93cyBoZWxwIG1lc3NhZ2UnICcKKwkJdGVzdF9pMThuZ3JlcCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UiIG91dHB1dAorCScKKworCXRlc3RfZXhwZWN0XyR7RVhQRUNUX0NBU19SRVNVTFR9ICdmb3JjZSB3aXRoIGxlYXNlIGFrYSBjYXMnICcKKwkJSEVBRD0kKAljZCAiJFJFTU9URV9SRVBPIiAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgKSAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgJ1wnJworCQkJKGNkICIkUkVNT1RFX1JFUE8iICYmIGdpdCB1cGRhdGUtcmVmIEhFQUQgIiRIRUFEIikKKwkJJ1wnJyAmJgorCQkoCisJCQljZCAiJExPQ0FMX1JFUE8iICYmCisJCQlnaXQgcHVzaCAtdiAtLWZvcmNlLXdpdGgtbGVhc2U9JEJSQU5DSDokSEVBRCBvcmlnaW4KKwkJKSAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkQlJBTkNIIiA+ZXhwZWN0ICYmCisJCSgKKwkJCWNkICIkUkVNT1RFX1JFUE8iICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRAorCQkpID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKK30KKworc2V0dXBfYXNrcGFzc19oZWxwZXIoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYXNrcGFzcyBoZWxwZXInICcKKwkJd3JpdGVfc2NyaXB0ICIkVFJBU0hfRElSRUNUT1JZL2Fza3Bhc3MiIDw8LVxFT0YgJiYKKwkJZWNobyA+PiIkVFJBU0hfRElSRUNUT1JZL2Fza3Bhc3MtcXVlcnkiICJhc2twYXNzOiAkKiIgJiYKKwkJY2FzZSAiJCoiIGluCisJCSpVc2VybmFtZSopCisJCQl3aGF0PXVzZXIKKwkJCTs7CisJCSpQYXNzd29yZCopCisJCQl3aGF0PXBhc3MKKwkJCTs7CisJCWVzYWMgJiYKKwkJY2F0ICIkVFJBU0hfRElSRUNUT1JZL2Fza3Bhc3MtJHdoYXQiCisJCUVPRgorCQlHSVRfQVNLUEFTUz0iJFRSQVNIX0RJUkVDVE9SWS9hc2twYXNzIiAmJgorCQlleHBvcnQgR0lUX0FTS1BBU1MgJiYKKwkJZXhwb3J0IFRSQVNIX0RJUkVDVE9SWQorCScKK30KKworc2V0X2Fza3Bhc3MoKSB7CisJPiIkVFJBU0hfRElSRUNUT1JZL2Fza3Bhc3MtcXVlcnkiICYmCisJZWNobyAiJDEiID4iJFRSQVNIX0RJUkVDVE9SWS9hc2twYXNzLXVzZXIiICYmCisJZWNobyAiJDIiID4iJFRSQVNIX0RJUkVDVE9SWS9hc2twYXNzLXBhc3MiCit9CisKK2V4cGVjdF9hc2twYXNzKCkgeworCWRlc3Q9JEhUVFBEX0RFU1QkezMrLyQzfQorCisJeworCQljYXNlICIkMSIgaW4KKwkJbm9uZSkKKwkJCTs7CisJCXBhc3MpCisJCQllY2hvICJhc2twYXNzOiBQYXNzd29yZCBmb3IgJ2h0dHA6Ly8kMkAkZGVzdCc6ICIKKwkJCTs7CisJCWJvdGgpCisJCQllY2hvICJhc2twYXNzOiBVc2VybmFtZSBmb3IgJ2h0dHA6Ly8kZGVzdCc6ICIKKwkJCWVjaG8gImFza3Bhc3M6IFBhc3N3b3JkIGZvciAnaHR0cDovLyQyQCRkZXN0JzogIgorCQkJOzsKKwkJKikKKwkJCWZhbHNlCisJCQk7OworCQllc2FjCisJfSA+IiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcy1leHBlY3QiICYmCisJdGVzdF9jbXAgIiRUUkFTSF9ESVJFQ1RPUlkvYXNrcGFzcy1leHBlY3QiIFwKKwkJICIkVFJBU0hfRElSRUNUT1JZL2Fza3Bhc3MtcXVlcnkiCit9CmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC9hcGFjaGUuY29uZiBiL3QvbGliLWh0dHBkL2FwYWNoZS5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMTVlNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1odHRwZC9hcGFjaGUuY29uZgpAQCAtMCwwICsxLDE5NSBAQAorU2VydmVyTmFtZSBkdW1teQorUGlkRmlsZSBodHRwZC5waWQKK0RvY3VtZW50Um9vdCB3d3cKK0xvZ0Zvcm1hdCAiJWggJWwgJXUgJXQgXCIlclwiICU+cyAlYiIgY29tbW9uCitDdXN0b21Mb2cgYWNjZXNzLmxvZyBjb21tb24KK0Vycm9yTG9nIGVycm9yLmxvZworPElmTW9kdWxlICFtb2RfbG9nX2NvbmZpZy5jPgorCUxvYWRNb2R1bGUgbG9nX2NvbmZpZ19tb2R1bGUgbW9kdWxlcy9tb2RfbG9nX2NvbmZpZy5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX2FsaWFzLmM+CisJTG9hZE1vZHVsZSBhbGlhc19tb2R1bGUgbW9kdWxlcy9tb2RfYWxpYXMuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9jZ2kuYz4KKwlMb2FkTW9kdWxlIGNnaV9tb2R1bGUgbW9kdWxlcy9tb2RfY2dpLnNvCis8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfZW52LmM+CisJTG9hZE1vZHVsZSBlbnZfbW9kdWxlIG1vZHVsZXMvbW9kX2Vudi5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX3Jld3JpdGUuYz4KKwlMb2FkTW9kdWxlIHJld3JpdGVfbW9kdWxlIG1vZHVsZXMvbW9kX3Jld3JpdGUuc28KKzwvSUZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF92ZXJzaW9uLmM+CisJTG9hZE1vZHVsZSB2ZXJzaW9uX21vZHVsZSBtb2R1bGVzL21vZF92ZXJzaW9uLnNvCis8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfaGVhZGVycy5jPgorCUxvYWRNb2R1bGUgaGVhZGVyc19tb2R1bGUgbW9kdWxlcy9tb2RfaGVhZGVycy5zbworPC9JZk1vZHVsZT4KKworPElmVmVyc2lvbiA8IDIuND4KK0xvY2tGaWxlIGFjY2VwdC5sb2NrCis8L0lmVmVyc2lvbj4KKworPElmVmVyc2lvbiA8IDIuMT4KKzxJZk1vZHVsZSAhbW9kX2F1dGguYz4KKwlMb2FkTW9kdWxlIGF1dGhfbW9kdWxlIG1vZHVsZXMvbW9kX2F1dGguc28KKzwvSWZNb2R1bGU+Cis8L0lmVmVyc2lvbj4KKworPElmVmVyc2lvbiA+PSAyLjE+Cis8SWZNb2R1bGUgIW1vZF9hdXRoX2Jhc2ljLmM+CisJTG9hZE1vZHVsZSBhdXRoX2Jhc2ljX21vZHVsZSBtb2R1bGVzL21vZF9hdXRoX2Jhc2ljLnNvCis8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfYXV0aG5fZmlsZS5jPgorCUxvYWRNb2R1bGUgYXV0aG5fZmlsZV9tb2R1bGUgbW9kdWxlcy9tb2RfYXV0aG5fZmlsZS5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX2F1dGh6X3VzZXIuYz4KKwlMb2FkTW9kdWxlIGF1dGh6X3VzZXJfbW9kdWxlIG1vZHVsZXMvbW9kX2F1dGh6X3VzZXIuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9hdXRoel9ob3N0LmM+CisJTG9hZE1vZHVsZSBhdXRoel9ob3N0X21vZHVsZSBtb2R1bGVzL21vZF9hdXRoel9ob3N0LnNvCis8L0lmTW9kdWxlPgorPC9JZlZlcnNpb24+CisKKzxJZlZlcnNpb24gPj0gMi40PgorPElmTW9kdWxlICFtb2RfYXV0aG5fY29yZS5jPgorCUxvYWRNb2R1bGUgYXV0aG5fY29yZV9tb2R1bGUgbW9kdWxlcy9tb2RfYXV0aG5fY29yZS5zbworPC9JZk1vZHVsZT4KKzxJZk1vZHVsZSAhbW9kX2F1dGh6X2NvcmUuYz4KKwlMb2FkTW9kdWxlIGF1dGh6X2NvcmVfbW9kdWxlIG1vZHVsZXMvbW9kX2F1dGh6X2NvcmUuc28KKzwvSWZNb2R1bGU+Cis8SWZNb2R1bGUgIW1vZF9hY2Nlc3NfY29tcGF0LmM+CisJTG9hZE1vZHVsZSBhY2Nlc3NfY29tcGF0X21vZHVsZSBtb2R1bGVzL21vZF9hY2Nlc3NfY29tcGF0LnNvCis8L0lmTW9kdWxlPgorPElmTW9kdWxlICFtb2RfbXBtX3ByZWZvcmsuYz4KKwlMb2FkTW9kdWxlIG1wbV9wcmVmb3JrX21vZHVsZSBtb2R1bGVzL21vZF9tcG1fcHJlZm9yay5zbworPC9JZk1vZHVsZT4KKzwvSWZWZXJzaW9uPgorCitQYXNzRW52IEdJVF9WQUxHUklORAorUGFzc0VudiBHSVRfVkFMR1JJTkRfT1BUSU9OUworUGFzc0VudiBHTlVQR0hPTUUKK1Bhc3NFbnYgQVNBTl9PUFRJT05TCitQYXNzRW52IEdJVF9UUkFDRQorCitBbGlhcyAvZHVtYi8gd3d3LworQWxpYXMgL2F1dGgvZHVtYi8gd3d3L2F1dGgvZHVtYi8KKworPExvY2F0aW9uTWF0Y2ggL3NtYXJ0Lz4KKwlTZXRFbnYgR0lUX0VYRUNfUEFUSCAke0dJVF9FWEVDX1BBVEh9CisJU2V0RW52IEdJVF9IVFRQX0VYUE9SVF9BTEwKKzwvTG9jYXRpb25NYXRjaD4KKzxMb2NhdGlvbk1hdGNoIC9zbWFydF9ub2V4cG9ydC8+CisJU2V0RW52IEdJVF9FWEVDX1BBVEggJHtHSVRfRVhFQ19QQVRIfQorPC9Mb2NhdGlvbk1hdGNoPgorPExvY2F0aW9uTWF0Y2ggL3NtYXJ0X2N1c3RvbV9lbnYvPgorCVNldEVudiBHSVRfRVhFQ19QQVRIICR7R0lUX0VYRUNfUEFUSH0KKwlTZXRFbnYgR0lUX0hUVFBfRVhQT1JUX0FMTAorCVNldEVudiBHSVRfQ09NTUlUVEVSX05BTUUgIkN1c3RvbSBVc2VyIgorCVNldEVudiBHSVRfQ09NTUlUVEVSX0VNQUlMIGN1c3RvbUBleGFtcGxlLmNvbQorPC9Mb2NhdGlvbk1hdGNoPgorPExvY2F0aW9uTWF0Y2ggL3NtYXJ0X25hbWVzcGFjZS8+CisJU2V0RW52IEdJVF9FWEVDX1BBVEggJHtHSVRfRVhFQ19QQVRIfQorCVNldEVudiBHSVRfSFRUUF9FWFBPUlRfQUxMCisJU2V0RW52IEdJVF9OQU1FU1BBQ0UgbnMKKzwvTG9jYXRpb25NYXRjaD4KKzxMb2NhdGlvbk1hdGNoIC9zbWFydF9jb29raWVzLz4KKwlTZXRFbnYgR0lUX0VYRUNfUEFUSCAke0dJVF9FWEVDX1BBVEh9CisJU2V0RW52IEdJVF9IVFRQX0VYUE9SVF9BTEwKKwlIZWFkZXIgc2V0IFNldC1Db29raWUgbmFtZT12YWx1ZQorPC9Mb2NhdGlvbk1hdGNoPgorU2NyaXB0QWxpYXNNYXRjaCAvc21hcnRfKlteL10qLyguKikgJHtHSVRfRVhFQ19QQVRIfS9naXQtaHR0cC1iYWNrZW5kLyQxCitTY3JpcHRBbGlhcyAvYnJva2VuX3NtYXJ0LyBicm9rZW4tc21hcnQtaHR0cC5zaC8KK1NjcmlwdEFsaWFzIC9lcnJvci8gZXJyb3Iuc2gvCis8RGlyZWN0b3J5ICR7R0lUX0VYRUNfUEFUSH0+CisJT3B0aW9ucyBGb2xsb3dTeW1saW5rcworPC9EaXJlY3Rvcnk+Cis8RmlsZXMgYnJva2VuLXNtYXJ0LWh0dHAuc2g+CisJT3B0aW9ucyBFeGVjQ0dJCis8L0ZpbGVzPgorPEZpbGVzIGVycm9yLnNoPgorICBPcHRpb25zIEV4ZWNDR0kKKzwvRmlsZXM+Cis8RmlsZXMgJHtHSVRfRVhFQ19QQVRIfS9naXQtaHR0cC1iYWNrZW5kPgorCU9wdGlvbnMgRXhlY0NHSQorPC9GaWxlcz4KKworUmV3cml0ZUVuZ2luZSBvbgorUmV3cml0ZVJ1bGUgXi9zbWFydC1yZWRpci1wZXJtLyguKikkIC9zbWFydC8kMSBbUj0zMDFdCitSZXdyaXRlUnVsZSBeL3NtYXJ0LXJlZGlyLXRlbXAvKC4qKSQgL3NtYXJ0LyQxIFtSPTMwMl0KK1Jld3JpdGVSdWxlIF4vc21hcnQtcmVkaXItYXV0aC8oLiopJCAvYXV0aC9zbWFydC8kMSBbUj0zMDFdCitSZXdyaXRlUnVsZSBeL3NtYXJ0LXJlZGlyLWxpbWl0ZWQvKC4qKS9pbmZvL3JlZnMkIC9zbWFydC8kMS9pbmZvL3JlZnMgW1I9MzAxXQorUmV3cml0ZVJ1bGUgXi9mdHAtcmVkaXIvKC4qKSQgZnRwOi8vbG9jYWxob3N0OjEwMDAvJDEgW1I9MzAyXQorCitSZXdyaXRlUnVsZSBeL2xvb3AtcmVkaXIveC14LXgteC14LXgteC14LXgteC14LXgteC14LXgteC14LXgteC14LSguKikgLyQxIFtSPTMwMl0KK1Jld3JpdGVSdWxlIF4vbG9vcC1yZWRpci8oLiopJCAvbG9vcC1yZWRpci94LSQxIFtSPTMwMl0KKworPElmRGVmaW5lIFNTTD4KK0xvYWRNb2R1bGUgc3NsX21vZHVsZSBtb2R1bGVzL21vZF9zc2wuc28KKworU1NMQ2VydGlmaWNhdGVGaWxlIGh0dHBkLnBlbQorU1NMQ2VydGlmaWNhdGVLZXlGaWxlIGh0dHBkLnBlbQorU1NMUmFuZG9tU2VlZCBzdGFydHVwIGZpbGU6L2Rldi91cmFuZG9tIDUxMgorU1NMUmFuZG9tU2VlZCBjb25uZWN0IGZpbGU6L2Rldi91cmFuZG9tIDUxMgorU1NMU2Vzc2lvbkNhY2hlIG5vbmUKK1NTTE11dGV4IGZpbGU6c3NsX211dGV4CitTU0xFbmdpbmUgT24KKzwvSWZEZWZpbmU+CisKKzxMb2NhdGlvbiAvYXV0aC8+CisJQXV0aFR5cGUgQmFzaWMKKwlBdXRoTmFtZSAiZ2l0LWF1dGgiCisJQXV0aFVzZXJGaWxlIHBhc3N3ZAorCVJlcXVpcmUgdmFsaWQtdXNlcgorPC9Mb2NhdGlvbj4KKworPExvY2F0aW9uTWF0Y2ggIl4vYXV0aC1wdXNoLy4qL2dpdC1yZWNlaXZlLXBhY2skIj4KKwlBdXRoVHlwZSBCYXNpYworCUF1dGhOYW1lICJnaXQtYXV0aCIKKwlBdXRoVXNlckZpbGUgcGFzc3dkCisJUmVxdWlyZSB2YWxpZC11c2VyCis8L0xvY2F0aW9uTWF0Y2g+CisKKzxMb2NhdGlvbk1hdGNoICJeL2F1dGgtZmV0Y2gvLiovZ2l0LXVwbG9hZC1wYWNrJCI+CisJQXV0aFR5cGUgQmFzaWMKKwlBdXRoTmFtZSAiZ2l0LWF1dGgiCisJQXV0aFVzZXJGaWxlIHBhc3N3ZAorCVJlcXVpcmUgdmFsaWQtdXNlcgorPC9Mb2NhdGlvbk1hdGNoPgorCitSZXdyaXRlQ29uZCAle1FVRVJZX1NUUklOR30gc2VydmljZT1naXQtcmVjZWl2ZS1wYWNrIFtPUl0KK1Jld3JpdGVDb25kICV7UkVRVUVTVF9VUkl9IC9naXQtcmVjZWl2ZS1wYWNrJAorUmV3cml0ZVJ1bGUgXi9oYWxmLWF1dGgtY29tcGxldGUvIC0gW0U9QVVUSFJFUVVJUkVEOnllc10KKworPExvY2F0aW9uIC9oYWxmLWF1dGgtY29tcGxldGUvPgorICBPcmRlciBEZW55LEFsbG93CisgIERlbnkgZnJvbSBlbnY9QVVUSFJFUVVJUkVECisKKyAgQXV0aFR5cGUgQmFzaWMKKyAgQXV0aE5hbWUgIkdpdCBBY2Nlc3MiCisgIEF1dGhVc2VyRmlsZSBwYXNzd2QKKyAgUmVxdWlyZSB2YWxpZC11c2VyCisgIFNhdGlzZnkgQW55Cis8L0xvY2F0aW9uPgorCis8SWZEZWZpbmUgREFWPgorCUxvYWRNb2R1bGUgZGF2X21vZHVsZSBtb2R1bGVzL21vZF9kYXYuc28KKwlMb2FkTW9kdWxlIGRhdl9mc19tb2R1bGUgbW9kdWxlcy9tb2RfZGF2X2ZzLnNvCisKKwlEQVZMb2NrREIgREFWTG9jaworCTxMb2NhdGlvbiAvZHVtYi8+CisJCURhdiBvbgorCTwvTG9jYXRpb24+CisJPExvY2F0aW9uIC9hdXRoL2R1bWI+CisJCURhdiBvbgorCTwvTG9jYXRpb24+Cis8L0lmRGVmaW5lPgorCis8SWZEZWZpbmUgU1ZOPgorCUxvYWRNb2R1bGUgZGF2X3N2bl9tb2R1bGUgbW9kdWxlcy9tb2RfZGF2X3N2bi5zbworCisJPExvY2F0aW9uIC9zdm4+CisJCURBViBzdm4KKwkJU1ZOUGF0aCBzdm5yZXBvCisJPC9Mb2NhdGlvbj4KKzwvSWZEZWZpbmU+CmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC9icm9rZW4tc21hcnQtaHR0cC5zaCBiL3QvbGliLWh0dHBkL2Jyb2tlbi1zbWFydC1odHRwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyY2M2MTAKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1odHRwZC9icm9rZW4tc21hcnQtaHR0cC5zaApAQCAtMCwwICsxLDEwIEBACitwcmludGYgIkNvbnRlbnQtVHlwZTogdGV4dC8lc1xuIiAiaHRtbCIKK2VjaG8KK3ByaW50ZiAiJXNcbiIgIjAwMWUjIHNlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIgorcHJpbnRmICIlcyIgICAiMDAwMCIKK3ByaW50ZiAiJXMlYyVzJXNcbiIgXAorCSIwMGE1ODY4MWQ5ZjI4NmE0OGIwOGYzN2IzYTA5NTMzMGRhMTY2ODllMzY5MyBIRUFEIiBcCisJMCBcCisJIiBpbmNsdWRlLXRhZyBtdWx0aV9hY2tfZGV0YWlsZWQgbXVsdGlfYWNrIG9mcy1kZWx0YSIgXAorCSIgc2lkZS1iYW5kIHNpZGUtYmFuZC02NGsgdGhpbi1wYWNrIG5vLXByb2dyZXNzIHNoYWxsb3cgbm8tZG9uZSAiCitwcmludGYgIiVzIiAgICIwMDAwIgpkaWZmIC0tZ2l0IGEvdC9saWItaHR0cGQvZXJyb3Iuc2ggYi90L2xpYi1odHRwZC9lcnJvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNzdiOGU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvZXJyb3Iuc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKK3ByaW50ZiAiU3RhdHVzOiA1MDAgSW50ZW50aW9uYWwgQnJlYWthZ2VcbiIKKworcHJpbnRmICJDb250ZW50LVR5cGU6ICIKK2NoYXJzZXQ9aXNvLTg4NTktMQorY2FzZSAiJFBBVEhfSU5GTyIgaW4KKypodG1sKikKKwlwcmludGYgInRleHQvaHRtbCIKKwk7OworKnRleHQqKQorCXByaW50ZiAidGV4dC9wbGFpbiIKKwk7OworKmNoYXJzZXQqKQorCXByaW50ZiAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIKKwljaGFyc2V0PXV0Zi04CisJOzsKKyp1dGYxNiopCisJcHJpbnRmICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi0xNiIKKwljaGFyc2V0PXV0Zi0xNgorCTs7Cisqb2RkLXNwYWNpbmcqKQorCXByaW50ZiAidGV4dC9wbGFpbjsgZm9vPWJhciA7Y2hhcnNldD11dGYtMTY7IG90aGVyPW5vbnNlbnNlIgorCWNoYXJzZXQ9dXRmLTE2CisJOzsKK2VzYWMKK3ByaW50ZiAiXG4iCisKK3ByaW50ZiAiXG4iCitwcmludGYgInRoaXMgaXMgdGhlIGVycm9yIG1lc3NhZ2VcbiIgfAoraWNvbnYgLWYgdXMtYXNjaWkgLXQgJGNoYXJzZXQKZGlmZiAtLWdpdCBhL3QvbGliLWh0dHBkL3Bhc3N3ZCBiL3QvbGliLWh0dHBkL3Bhc3N3ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWEzNGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvcGFzc3dkCkBAIC0wLDAgKzEgQEAKK3VzZXJAaG9zdDp4YjRFOHBxRDgxS1FzCmRpZmYgLS1naXQgYS90L2xpYi1odHRwZC9zc2wuY25mIGIvdC9saWItaHR0cGQvc3NsLmNuZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGFiMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItaHR0cGQvc3NsLmNuZgpAQCAtMCwwICsxLDggQEAKK1JBTkRGSUxFICAgICAgICAgICAgICAgID0gJEVOVjo6UkFOREZJTEVfUEFUSAorCitbIHJlcSBdCitkZWZhdWx0X2JpdHMgICAgICAgICAgICA9IDEwMjQKK2Rpc3Rpbmd1aXNoZWRfbmFtZSAgICAgID0gcmVxX2Rpc3Rpbmd1aXNoZWRfbmFtZQorcHJvbXB0ICAgICAgICAgICAgICAgICAgPSBubworWyByZXFfZGlzdGluZ3Vpc2hlZF9uYW1lIF0KK2NvbW1vbk5hbWUgICAgICAgICAgICAgID0gMTI3LjAuMC4xCmRpZmYgLS1naXQgYS90L2xpYi1wYWNrLnNoIGIvdC9saWItcGFjay5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTA5ODQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItcGFjay5zaApAQCAtMCwwICsxLDk4IEBACisjIFN1cHBvcnQgcm91dGluZXMgZm9yIGhhbmQtY3JhZnRpbmcgd2VpcmQgb3IgbWFsaWNpb3VzIHBhY2tzLgorIworIyBZb3UgY2FuIG1ha2UgYSBjb21wbGV0ZSBwYWNrIGxpa2U6CisjCisjICAgcGFja19oZWFkZXIgMiA+Zm9vLnBhY2sgJiYKKyMgICBwYWNrX29iaiBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxID4+Zm9vLnBhY2sgJiYKKyMgICBwYWNrX29iaiBlNjhmZTgxMjliNTQ2YjEwMWFlZTk1MTBjNTMyOGU3ZjIxY2ExZDE4ID4+Zm9vLnBhY2sgJiYKKyMgICBwYWNrX3RyYWlsZXIgZm9vLnBhY2sKKworIyBQcmludCB0aGUgYmlnLWVuZGlhbiA0LWJ5dGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgJDEKK3VpbnQzMl9vY3RhbCAoKSB7CisJbj0kMQorCXByaW50ZiAnXFwlbycgJCgoJG4gLyAxNjc3NzIxNikpOyBuPSQoKG4gJSAxNjc3NzIxNikpCisJcHJpbnRmICdcXCVvJyAkKCgkbiAvICAgIDY1NTM2KSk7IG49JCgobiAlICAgIDY1NTM2KSkKKwlwcmludGYgJ1xcJW8nICQoKCRuIC8gICAgICAyNTYpKTsgbj0kKChuICUgICAgICAyNTYpKQorCXByaW50ZiAnXFwlbycgJCgoJG4gICAgICAgICAgICkpOworfQorCisjIFByaW50IHRoZSBiaWctZW5kaWFuIDQtYnl0ZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgJDEKK3VpbnQzMl9iaW5hcnkgKCkgeworCXByaW50ZiAiJCh1aW50MzJfb2N0YWwgIiQxIikiCit9CisKKyMgUHJpbnQgYSBwYWNrIGhlYWRlciwgdmVyc2lvbiAyLCBmb3IgYSBwYWNrIHdpdGggJDEgb2JqZWN0cworcGFja19oZWFkZXIgKCkgeworCXByaW50ZiAnUEFDSycgJiYKKwlwcmludGYgJ1wwXDBcMFwyJyAmJgorCXVpbnQzMl9iaW5hcnkgIiQxIgorfQorCisjIFByaW50IHRoZSBwYWNrIGRhdGEgZm9yIG9iamVjdCAkMSwgYXMgYSBkZWx0YSBhZ2FpbnN0IG9iamVjdCAkMiAob3IgYXMgYSBmdWxsCisjIG9iamVjdCBpZiAkMiBpcyBtaXNzaW5nIG9yIGVtcHR5KS4gVGhlIG91dHB1dCBpcyBzdWl0YWJsZSBmb3IgaW5jbHVkaW5nCisjIGRpcmVjdGx5IGluIHRoZSBwYWNrZmlsZSwgYW5kIHJlcHJlc2VudHMgdGhlIGVudGlyZXR5IG9mIHRoZSBvYmplY3QgZW50cnkuCisjIERvaW5nIHRoaXMgb24gdGhlIGZseSAoZXNwZWNpYWxseSBwaWNraW5nIHlvdXIgZGVsdGFzKSBpcyBxdWl0ZSB0cmlja3ksIHNvIHdlCisjIGhhdmUgaGFyZGNvZGVkIHNvbWUgd2VsbC1rbm93biBvYmplY3RzLiBTZWUgdGhlIGNhc2Ugc3RhdGVtZW50cyBiZWxvdyBmb3IgdGhlCisjIGNvbXBsZXRlIGxpc3QuCitwYWNrX29iaiAoKSB7CisJY2FzZSAiJDEiIGluCisJIyBlbXB0eSBibG9iCisJZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSkKKwkJY2FzZSAiJDIiIGluCisJCScnKQorCQkJcHJpbnRmICdcMDYwXDE3MFwyMzRcMDAzXDBcMFwwXDBcMScKKwkJCXJldHVybgorCQkJOzsKKwkJZXNhYworCQk7OworCisJIyBibG9iIGNvbnRhaW5pbmcgIlw3XDc2IgorCWU2OGZlODEyOWI1NDZiMTAxYWVlOTUxMGM1MzI4ZTdmMjFjYTFkMTgpCisJCWNhc2UgIiQyIiBpbgorCQknJykKKwkJCXByaW50ZiAnXDA2MlwxNzBcMjM0XDE0M1wyNjdcM1wwXDBcMTE2XDBcMTA2JworCQkJcmV0dXJuCisJCQk7OworCQkwMWQ3NzEzNjY2ZjRkZTgyMjc3NmM3NjIyYzEwZjFiMDdkZTI4MGRjKQorCQkJcHJpbnRmICdcMTY1XDFcMzI3XDE2MVw2NlwxNDZcMzY0XDMzNlwyMDJcNDdcMTY2JyAmJgorCQkJcHJpbnRmICdcMzA3XDE0Mlw1NFwyMFwzNjFcMjYwXDE3NVwzNDJcMjAwXDMzNFwxNzAnICYmCisJCQlwcmludGYgJ1wyMzRcMTQzXDE0MlwxNDJcMTQyXDI2N1wwMDNcMFwwXDE1MVwwXDExNCcKKwkJCXJldHVybgorCQkJOzsKKwkJZXNhYworCQk7OworCisJIyBibG9iIGNvbnRhaW5pbmcgIlw3XDAiCisJMDFkNzcxMzY2NmY0ZGU4MjI3NzZjNzYyMmMxMGYxYjA3ZGUyODBkYykKKwkJY2FzZSAiJDIiIGluCisJCScnKQorCQkJcHJpbnRmICdcMDYyXDE3MFwyMzRcMTQzXDE0N1wwXDBcMFwyMFwwXDEwJworCQkJcmV0dXJuCisJCQk7OworCQllNjhmZTgxMjliNTQ2YjEwMWFlZTk1MTBjNTMyOGU3ZjIxY2ExZDE4KQorCQkJcHJpbnRmICdcMTY1XDM0NlwyMTdcMzUwXDIyXDIzM1wxMjRcMTUzXDIwXDMyXDM1NicgJiYKKwkJCXByaW50ZiAnXDIyNVwyMFwzMDVcNjJcMjE2XDE3N1w0MVwzMTJcMzVcMzBcMTcwXDIzNCcgJiYKKwkJCXByaW50ZiAnXDE0M1wxNDJcMTQyXDE0MlwxNDdcMFwwXDBcNTNcMFwxNicKKwkJCXJldHVybgorCQkJOzsKKwkJZXNhYworCQk7OworCWVzYWMKKworCWVjaG8gPiYyICJCVUc6IGRvbid0IGtub3cgaG93IHRvIHByaW50ICQxJHsyOisgKGZyb20gJDIpfSIKKwlyZXR1cm4gMQorfQorCisjIENvbXB1dGUgYW5kIGFwcGVuZCBwYWNrIHRyYWlsZXIgdG8gIiQxIgorcGFja190cmFpbGVyICgpIHsKKwl0ZXN0LXNoYTEgLWIgPCIkMSIgPnRyYWlsZXIudG1wICYmCisJY2F0IHRyYWlsZXIudG1wID4+IiQxIiAmJgorCXJtIC1mIHRyYWlsZXIudG1wCit9CisKKyMgUmVtb3ZlIGFueSBleGlzdGluZyBwYWNrcyB0byBtYWtlIHN1cmUgdGhhdAorIyB3aGF0ZXZlciB3ZSBpbmRleCBuZXh0IHdpbGwgYmUgdGhlIHBhY2sgdGhhdCB3ZQorIyBhY3R1YWxseSB1c2UuCitjbGVhcl9wYWNrcyAoKSB7CisJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKgorfQpkaWZmIC0tZ2l0IGEvdC9saWItcGFnZXIuc2ggYi90L2xpYi1wYWdlci5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWE3YTNmCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItcGFnZXIuc2gKQEAgLTAsMCArMSwxNSBAQAorIyBIZWxwZXJzIGZvciB0ZXN0cyBvZiBnaXQncyBjaG9pY2Ugb2YgcGFnZXIuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVybWluZSBkZWZhdWx0IHBhZ2VyJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLnBhZ2VyICYmCisJbGVzcz0kKAorCQl1bnNldCBQQUdFUiBHSVRfUEFHRVI7CisJCWdpdCB2YXIgR0lUX1BBR0VSCisJKSAmJgorCXRlc3QgLW4gIiRsZXNzIgorJworCitpZiBleHByICIkbGVzcyIgOiAnW2Etel1bYS16XSokJyA+L2Rldi9udWxsCit0aGVuCisJdGVzdF9zZXRfcHJlcmVxIFNJTVBMRVBBR0VSCitmaQpkaWZmIC0tZ2l0IGEvdC9saWItcGF0Y2gtbW9kZS5zaCBiL3QvbGliLXBhdGNoLW1vZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZjM2M5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLXBhdGNoLW1vZGUuc2gKQEAgLTAsMCArMSwzOCBAQAorOiBpbmNsdWRlZCBmcm9tIHQyMDE2IGFuZCBvdGhlcnMKKworLiAuL3Rlc3QtbGliLnNoCisKK3NldF9zdGF0ZSAoKSB7CisJZWNobyAiJDMiID4gIiQxIiAmJgorCWdpdCBhZGQgIiQxIiAmJgorCWVjaG8gIiQyIiA+ICIkMSIKK30KKworc2F2ZV9zdGF0ZSAoKSB7CisJbm9zbGFzaD0iJChlY2hvICIkMSIgfCB0ciAvIF8pIiAmJgorCWNhdCAiJDEiID4gX3dvcmt0cmVlXyIkbm9zbGFzaCIgJiYKKwlnaXQgc2hvdyA6IiQxIiA+IF9pbmRleF8iJG5vc2xhc2giCit9CisKK3NldF9hbmRfc2F2ZV9zdGF0ZSAoKSB7CisJc2V0X3N0YXRlICIkQCIgJiYKKwlzYXZlX3N0YXRlICIkMSIKK30KKwordmVyaWZ5X3N0YXRlICgpIHsKKwl0ZXN0ICIkKGNhdCAiJDEiKSIgPSAiJDIiICYmCisJdGVzdCAiJChnaXQgc2hvdyA6IiQxIikiID0gIiQzIgorfQorCit2ZXJpZnlfc2F2ZWRfc3RhdGUgKCkgeworCW5vc2xhc2g9IiQoZWNobyAiJDEiIHwgdHIgLyBfKSIgJiYKKwl2ZXJpZnlfc3RhdGUgIiQxIiAiJChjYXQgX3dvcmt0cmVlXyIkbm9zbGFzaCIpIiAiJChjYXQgX2luZGV4XyIkbm9zbGFzaCIpIgorfQorCitzYXZlX2hlYWQgKCkgeworCWdpdCByZXYtcGFyc2UgSEVBRCA+IF9oZWFkCit9CisKK3ZlcmlmeV9zYXZlZF9oZWFkICgpIHsKKwl0ZXN0ICIkKGNhdCBfaGVhZCkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKK30KZGlmZiAtLWdpdCBhL3QvbGliLXByb3RvLWRpc2FibGUuc2ggYi90L2xpYi1wcm90by1kaXNhYmxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTE3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1wcm90by1kaXNhYmxlLnNoCkBAIC0wLDAgKzEsOTYgQEAKKyMgVGVzdCByb3V0aW5lcyBmb3IgY2hlY2tpbmcgcHJvdG9jb2wgZGlzYWJsaW5nLgorCisjIHRlc3QgY2xvbmluZyBhIHBhcnRpY3VsYXIgcHJvdG9jb2wKKyMgICAkMSAtIGRlc2NyaXB0aW9uIG9mIHRoZSBwcm90b2NvbAorIyAgICQyIC0gbWFjaGluZS1yZWFkYWJsZSBuYW1lIG9mIHRoZSBwcm90b2NvbAorIyAgICQzIC0gdGhlIFVSTCB0byB0cnkgY2xvbmluZwordGVzdF9wcm90byAoKSB7CisJZGVzYz0kMQorCXByb3RvPSQyCisJdXJsPSQzCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSAkMSAoZW5hYmxlZCkiICcKKwkJcm0gLXJmIHRtcC5naXQgJiYKKwkJKAorCQkJR0lUX0FMTE9XX1BST1RPQ09MPSRwcm90byAmJgorCQkJZXhwb3J0IEdJVF9BTExPV19QUk9UT0NPTCAmJgorCQkJZ2l0IGNsb25lIC0tYmFyZSAiJHVybCIgdG1wLmdpdAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggJDEgKGVuYWJsZWQpIiAnCisJCSgKKwkJCWNkIHRtcC5naXQgJiYKKwkJCUdJVF9BTExPV19QUk9UT0NPTD0kcHJvdG8gJiYKKwkJCWV4cG9ydCBHSVRfQUxMT1dfUFJPVE9DT0wgJiYKKwkJCWdpdCBmZXRjaAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicHVzaCAkMSAoZW5hYmxlZCkiICcKKwkJKAorCQkJY2QgdG1wLmdpdCAmJgorCQkJR0lUX0FMTE9XX1BST1RPQ09MPSRwcm90byAmJgorCQkJZXhwb3J0IEdJVF9BTExPV19QUk9UT0NPTCAmJgorCQkJZ2l0IHB1c2ggb3JpZ2luIEhFQUQ6cHVzaGVkCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJwdXNoICQxIChkaXNhYmxlZCkiICcKKwkJKAorCQkJY2QgdG1wLmdpdCAmJgorCQkJR0lUX0FMTE9XX1BST1RPQ09MPW5vbmUgJiYKKwkJCWV4cG9ydCBHSVRfQUxMT1dfUFJPVE9DT0wgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiBIRUFEOnB1c2hlZAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggJDEgKGRpc2FibGVkKSIgJworCQkoCisJCQljZCB0bXAuZ2l0ICYmCisJCQlHSVRfQUxMT1dfUFJPVE9DT0w9bm9uZSAmJgorCQkJZXhwb3J0IEdJVF9BTExPV19QUk9UT0NPTCAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSAkMSAoZGlzYWJsZWQpIiAnCisJCXJtIC1yZiB0bXAuZ2l0ICYmCisJCSgKKwkJCUdJVF9BTExPV19QUk9UT0NPTD1ub25lICYmCisJCQlleHBvcnQgR0lUX0FMTE9XX1BST1RPQ09MICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1iYXJlICIkdXJsIiB0bXAuZ2l0CisJCSkKKwknCit9CisKKyMgc2V0IHVwIGFuIHNzaCB3cmFwcGVyIHRoYXQgd2lsbCBhY2Nlc3MgJGhvc3QvJHJlcG8gaW4gdGhlCisjIHRyYXNoIGRpcmVjdG9yeSwgYW5kIGVuYWJsZSBpdCBmb3Igc3Vic2VxdWVudCB0ZXN0cy4KK3NldHVwX3NzaF93cmFwcGVyICgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzc2ggd3JhcHBlcicgJworCQl3cml0ZV9zY3JpcHQgc3NoLXdyYXBwZXIgPDwtXEVPRiAmJgorCQllY2hvID4mMiAic3NoOiAkKiIKKwkJaG9zdD0kMTsgc2hpZnQKKwkJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvJGhvc3QiICYmCisJCWV2YWwgIiQqIgorCQlFT0YKKwkJR0lUX1NTSD0iJFBXRC9zc2gtd3JhcHBlciIgJiYKKwkJZXhwb3J0IEdJVF9TU0ggJiYKKwkJZXhwb3J0IFRSQVNIX0RJUkVDVE9SWQorCScKK30KKworIyBzZXQgdXAgYSB3cmFwcGVyIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCByZW1vdGUtZXh0IHRvCisjIGFjY2VzcyByZXBvc2l0b3JpZXMgaW4gdGhlICJyZW1vdGUiIGRpcmVjdG9yeSBvZiB0cmFzaC1kaXIsCisjIGxpa2UgImV4dDo6ZmFrZS1yZW1vdGUgJVMgcmVwby5naXQiCitzZXR1cF9leHRfd3JhcHBlciAoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXh0IHdyYXBwZXInICcKKwkJd3JpdGVfc2NyaXB0IGZha2UtcmVtb3RlIDw8LVxFT0YgJiYKKwkJZWNobyA+JjIgImZha2UtcmVtb3RlOiAkKiIKKwkJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvcmVtb3RlIiAmJgorCQlldmFsICIkKiIKKwkJRU9GCisJCVBBVEg9JFRSQVNIX0RJUkVDVE9SWTokUEFUSCAmJgorCQlleHBvcnQgVFJBU0hfRElSRUNUT1JZCisJJworfQpkaWZmIC0tZ2l0IGEvdC9saWItcmVhZC10cmVlLW0tM3dheS5zaCBiL3QvbGliLXJlYWQtdHJlZS1tLTN3YXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY4MzI5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvbGliLXJlYWQtdHJlZS1tLTN3YXkuc2gKQEAgLTAsMCArMSwxNTggQEAKKzogSW5jbHVkZWQgZnJvbSB0MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoIGFuZCBvdGhlcnMKKyMgT3JpZ2luYWwgdHJlZS4KK21rZGlyIFoKK2ZvciBhIGluIE4gRCBNCitkbworICAgIGZvciBiIGluIE4gRCBNCisgICAgZG8KKyAgICAgICAgcD0kYSRiCisJZWNobyBUaGlzIGlzICRwIGZyb20gdGhlIG9yaWdpbmFsIHRyZWUuID4kcAorCWVjaG8gVGhpcyBpcyBaLyRwIGZyb20gdGhlIG9yaWdpbmFsIHRyZWUuID5aLyRwCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJICAgICJhZGRpbmcgdGVzdCBmaWxlICRwIGFuZCBaLyRwIiBcCisJICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkICRwICYmCisJICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgWi8kcCcKKyAgICBkb25lCitkb25lCitlY2hvIFRoaXMgaXMgU1MgZnJvbSB0aGUgb3JpZ2luYWwgdHJlZS4gPlNTCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYWRkaW5nIHRlc3QgZmlsZSBTUycgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIFNTJworY2F0ID5UVCA8PFxFT0YKK1RoaXMgaXMgYSB0cml2aWFsIG1lcmdlIHNhbXBsZSB0ZXh0LgorQnJhbmNoIEEgaXMgZXhwZWN0ZWQgdG8gdXBjYXNlIHRoaXMgd29yZCwgaGVyZS4KK1RoZXJlIGFyZSBzb21lIGZpbGxlciBsaW5lcyB0byBhdm9pZCBkaWZmIGNvbnRleHQKK2NvbmZsaWN0cyBoZXJlLAorbGlrZSB0aGlzIG9uZSwKK2FuZCB0aGlzIG9uZSwKK2FuZCB0aGlzIG9uZSBpcyB5ZXQgYW5vdGhlciBvbmUgb2YgdGhlbS4KK0F0IHRoZSB2ZXJ5IGVuZCwgaGVyZSBjb21lcyBhbm90aGVyIGxpbmUsIHRoYXQgaXMKK3RoZSB3b3JkLCBleHBlY3RlZCB0byBiZSB1cGNhc2VkIGJ5IEJyYW5jaCBCLgorVGhpcyBjb25jbHVkZXMgdGhlIHRyaXZpYWwgbWVyZ2Ugc2FtcGxlIGZpbGUuCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhZGRpbmcgdGVzdCBmaWxlIFRUJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgVFQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSBpbml0aWFsIHRyZWUnIFwKKyAgICAndHJlZV9PPSQoZ2l0IHdyaXRlLXRyZWUpJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYW5jaCBBIGFuZCBCIG1ha2VzIHRoZSBjaGFuZ2VzIGFjY29yZGluZyB0byB0aGUgYWJvdmUgbWF0cml4LgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYW5jaCBBCisKK3RvX3JlbW92ZT0kKGVjaG8gRD8gWi9EPykKK3JtIC1mICR0b19yZW1vdmUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGFuZ2UgaW4gYnJhbmNoIEEgKHJlbW92YWwpJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgJHRvX3JlbW92ZScKKworZm9yIHAgaW4gTT8gWi9NPworZG8KKyAgICBlY2hvIFRoaXMgaXMgbW9kaWZpZWQgJHAgaW4gdGhlIGJyYW5jaCBBLiA+JHAKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2hhbmdlIGluIGJyYW5jaCBBIChtb2RpZmljYXRpb24pJyBcCisgICAgICAgICJnaXQgdXBkYXRlLWluZGV4ICRwIgorZG9uZQorCitmb3IgcCBpbiBBTiBBQSBaL0FOIFovQUEKK2RvCisgICAgZWNobyBUaGlzIGlzIGFkZGVkICRwIGluIHRoZSBicmFuY2ggQS4gPiRwCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoYW5nZSBpbiBicmFuY2ggQSAoYWRkaXRpb24pJyBcCisJImdpdCB1cGRhdGUtaW5kZXggLS1hZGQgJHAiCitkb25lCisKK2VjaG8gVGhpcyBpcyBTUyBmcm9tIHRoZSBtb2RpZmllZCB0cmVlLiA+U1MKK2VjaG8gVGhpcyBpcyBMTCBmcm9tIHRoZSBtb2RpZmllZCB0cmVlLiA+TEwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGFuZ2UgaW4gYnJhbmNoIEEgKGFkZGl0aW9uKScgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIExMICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggU1MnCittdiBUVCBUVC0KK3NlZCAtZSAnL0JyYW5jaCBBL3Mvd29yZC9XT1JEL2cnIDxUVC0gPlRUCitybSAtZiBUVC0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGFuZ2UgaW4gYnJhbmNoIEEgKGVkaXQpJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggVFQnCisKK21rZGlyIERGCitlY2hvIEJyYW5jaCBBIG1ha2VzIGEgZmlsZSBhdCBERi9ERiwgY3JlYXRpbmcgYSBkaXJlY3RvcnkgREYuID5ERi9ERgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoYW5nZSBpbiBicmFuY2ggQSAoY2hhbmdlIGZpbGUgdG8gZGlyZWN0b3J5KScgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIERGL0RGJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVjb3JkaW5nIGJyYW5jaCBBIHRyZWUnIFwKKyAgICAndHJlZV9BPSQoZ2l0IHdyaXRlLXRyZWUpJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEJyYW5jaCBCCisjIFN0YXJ0IGZyb20gTworCitybSAtcmYgW05ETUFTTFRdW05ETUFTTFRdIFogREYKK21rZGlyIFoKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZWFkaW5nIG9yaWdpbmFsIHRyZWUgYW5kIGNoZWNraW5nIG91dCcgXAorICAgICdnaXQgcmVhZC10cmVlICR0cmVlX08gJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC1hJworCit0b19yZW1vdmU9JChlY2hvID9EIFovP0QpCitybSAtZiAkdG9fcmVtb3ZlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hhbmdlIGluIGJyYW5jaCBCIChyZW1vdmFsKScgXAorICAgICJnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlICR0b19yZW1vdmUiCisKK2ZvciBwIGluID9NIFovP00KK2RvCisgICAgZWNobyBUaGlzIGlzIG1vZGlmaWVkICRwIGluIHRoZSBicmFuY2ggQi4gPiRwCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoYW5nZSBpbiBicmFuY2ggQiAobW9kaWZpY2F0aW9uKScgXAorCSJnaXQgdXBkYXRlLWluZGV4ICRwIgorZG9uZQorCitmb3IgcCBpbiBOQSBBQSBaL05BIFovQUEKK2RvCisgICAgZWNobyBUaGlzIGlzIGFkZGVkICRwIGluIHRoZSBicmFuY2ggQi4gPiRwCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoYW5nZSBpbiBicmFuY2ggQiAoYWRkaXRpb24pJyBcCisJImdpdCB1cGRhdGUtaW5kZXggLS1hZGQgJHAiCitkb25lCitlY2hvIFRoaXMgaXMgU1MgZnJvbSB0aGUgbW9kaWZpZWQgdHJlZS4gPlNTCitlY2hvIFRoaXMgaXMgTEwgZnJvbSB0aGUgbW9kaWZpZWQgdHJlZS4gPkxMCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hhbmdlIGluIGJyYW5jaCBCIChhZGRpdGlvbiBhbmQgbW9kaWZpY2F0aW9uKScgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIExMICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggU1MnCittdiBUVCBUVC0KK3NlZCAtZSAnL0JyYW5jaCBCL3Mvd29yZC9XT1JEL2cnIDxUVC0gPlRUCitybSAtZiBUVC0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGFuZ2UgaW4gYnJhbmNoIEIgKG1vZGlmaWNhdGlvbiknIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCBUVCcKKworZWNobyBCcmFuY2ggQiBtYWtlcyBhIGZpbGUgYXQgREYuID5ERgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoYW5nZSBpbiBicmFuY2ggQiAoYWRkaXRpb24gb2YgYSBmaWxlIHRvIGNvbmZsaWN0IHdpdGggZGlyZWN0b3J5KScgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIERGJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVjb3JkaW5nIGJyYW5jaCBCIHRyZWUnIFwKKyAgICAndHJlZV9CPSQoZ2l0IHdyaXRlLXRyZWUpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAna2VlcCBjb250ZW50cyBvZiAzIHRyZWVzIGZvciBlYXN5IGFjY2VzcycgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIGdpdCByZWFkLXRyZWUgJHRyZWVfTyAmJgorICAgICBta2RpciAub3JpZy1PICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD0ub3JpZy1PLyAtZiAtcSAtYSAmJgorICAgICBybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIGdpdCByZWFkLXRyZWUgJHRyZWVfQSAmJgorICAgICBta2RpciAub3JpZy1BICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD0ub3JpZy1BLyAtZiAtcSAtYSAmJgorICAgICBybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIGdpdCByZWFkLXRyZWUgJHRyZWVfQiAmJgorICAgICBta2RpciAub3JpZy1CICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD0ub3JpZy1CLyAtZiAtcSAtYScKZGlmZiAtLWdpdCBhL3QvbGliLXJlYWQtdHJlZS5zaCBiL3QvbGliLXJlYWQtdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTVmNDg1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9saWItcmVhZC10cmVlLnNoCkBAIC0wLDAgKzEsNDEgQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyB0byBjaGVjayBpZiByZWFkLXRyZWUgd291bGQgc3VjY2VlZC9mYWlsIGFzIGV4cGVjdGVkIHdpdGgKKyMgYW5kIHdpdGhvdXQgdGhlIGRyeS1ydW4gb3B0aW9uLiBUaGV5IGFsc28gdGVzdCB0aGF0IHRoZSBkcnktcnVuIGRvZXMgbm90CisjIHdyaXRlIHRoZSBpbmRleCBhbmQgdGhhdCB0b2dldGhlciB3aXRoIC11IGl0IGRvZXNuJ3QgdG91Y2ggdGhlIHdvcmsgdHJlZS4KKyMKK3JlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgKCkgeworCWdpdCBscy1maWxlcyAtcyA+cHJlLWRyeS1ydW4gJiYKKwlnaXQgcmVhZC10cmVlIC1uICIkQCIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPnBvc3QtZHJ5LXJ1biAmJgorCXRlc3RfY21wIHByZS1kcnktcnVuIHBvc3QtZHJ5LXJ1biAmJgorCWdpdCByZWFkLXRyZWUgIiRAIgorfQorCityZWFkX3RyZWVfbXVzdF9mYWlsICgpIHsKKwlnaXQgbHMtZmlsZXMgLXMgPnByZS1kcnktcnVuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtbiAiJEAiICYmCisJZ2l0IGxzLWZpbGVzIC1zID5wb3N0LWRyeS1ydW4gJiYKKwl0ZXN0X2NtcCBwcmUtZHJ5LXJ1biBwb3N0LWRyeS1ydW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVhZC10cmVlICIkQCIKK30KKworcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkICgpIHsKKwlnaXQgbHMtZmlsZXMgLXMgPnByZS1kcnktcnVuICYmCisJZ2l0IGRpZmYtZmlsZXMgLXAgPnByZS1kcnktcnVuLXd0ICYmCisJZ2l0IHJlYWQtdHJlZSAtbiAiJEAiICYmCisJZ2l0IGxzLWZpbGVzIC1zID5wb3N0LWRyeS1ydW4gJiYKKwlnaXQgZGlmZi1maWxlcyAtcCA+cG9zdC1kcnktcnVuLXd0ICYmCisJdGVzdF9jbXAgcHJlLWRyeS1ydW4gcG9zdC1kcnktcnVuICYmCisJdGVzdF9jbXAgcHJlLWRyeS1ydW4td3QgcG9zdC1kcnktcnVuLXd0ICYmCisJZ2l0IHJlYWQtdHJlZSAiJEAiCit9CisKK3JlYWRfdHJlZV91X211c3RfZmFpbCAoKSB7CisJZ2l0IGxzLWZpbGVzIC1zID5wcmUtZHJ5LXJ1biAmJgorCWdpdCBkaWZmLWZpbGVzIC1wID5wcmUtZHJ5LXJ1bi13dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgLW4gIiRAIiAmJgorCWdpdCBscy1maWxlcyAtcyA+cG9zdC1kcnktcnVuICYmCisJZ2l0IGRpZmYtZmlsZXMgLXAgPnBvc3QtZHJ5LXJ1bi13dCAmJgorCXRlc3RfY21wIHByZS1kcnktcnVuIHBvc3QtZHJ5LXJ1biAmJgorCXRlc3RfY21wIHByZS1kcnktcnVuLXd0IHBvc3QtZHJ5LXJ1bi13dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgIiRAIgorfQpkaWZmIC0tZ2l0IGEvdC9saWItcmViYXNlLnNoIGIvdC9saWItcmViYXNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOTZlMTUKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1yZWJhc2Uuc2gKQEAgLTAsMCArMSwxMTkgQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IGludGVyYWN0aXZlIHJlYmFzZSB0ZXN0cy4KKworIyBBZnRlciBzZXR0aW5nIHRoZSBmYWtlIGVkaXRvciB3aXRoIHRoaXMgZnVuY3Rpb24sIHlvdSBjYW4KKyMKKyMgLSBvdmVycmlkZSB0aGUgY29tbWl0IG1lc3NhZ2Ugd2l0aCAkRkFLRV9DT01NSVRfTUVTU0FHRQorIyAtIGFtZW5kIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoICRGQUtFX0NPTU1JVF9BTUVORAorIyAtIGNoZWNrIHRoYXQgbm9uLWNvbW1pdCBtZXNzYWdlcyBoYXZlIGEgY2VydGFpbiBsaW5lIGNvdW50IHdpdGggJEVYUEVDVF9DT1VOVAorIyAtIGNoZWNrIHRoZSBjb21taXQgY291bnQgaW4gdGhlIGNvbW1pdCBtZXNzYWdlIGhlYWRlciB3aXRoICRFWFBFQ1RfSEVBREVSX0NPVU5UCisjIC0gcmV3cml0ZSBhIHJlYmFzZSAtaSBzY3JpcHQgYXMgZGlyZWN0ZWQgYnkgJEZBS0VfTElORVMuCisjICAgJEZBS0VfTElORVMgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiB3b3JkcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLgorIyAgIFRoZSBmb2xsb3dpbmcgd29yZCBjb21iaW5hdGlvbnMgYXJlIHBvc3NpYmxlOgorIworIyAgICI8bGluZW5vPiIgLS0gYWRkIGEgInBpY2siIGxpbmUgd2l0aCB0aGUgU0hBMSB0YWtlbiBmcm9tIHRoZQorIyAgICAgICBzcGVjaWZpZWQgbGluZS4KKyMKKyMgICAiPGNtZD4gPGxpbmVubz4iIC0tIGFkZCBhIGxpbmUgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbW1hbmQKKyMgICAgICAgKCJzcXVhc2giLCAiZml4dXAiLCAiZWRpdCIsICJyZXdvcmQiIG9yICJkcm9wIikgYW5kIHRoZSBTSEExIHRha2VuCisjICAgICAgIGZyb20gdGhlIHNwZWNpZmllZCBsaW5lLgorIworIyAgICJleGVjX2NtZF93aXRoX2FyZ3MiIC0tIGFkZCBhbiAiZXhlYyBjbWQgd2l0aCBhcmdzIiBsaW5lLgorIworIyAgICIjIiAtLSBBZGQgYSBjb21tZW50IGxpbmUuCisjCisjICAgIj4iIC0tIEFkZCBhIGJsYW5rIGxpbmUuCisKK3NldF9mYWtlX2VkaXRvciAoKSB7CisJd3JpdGVfc2NyaXB0IGZha2UtZWRpdG9yLnNoIDw8LVxFT0YKKwljYXNlICIkMSIgaW4KKwkqL0NPTU1JVF9FRElUTVNHKQorCQl0ZXN0IC16ICIkRVhQRUNUX0hFQURFUl9DT1VOVCIgfHwKKwkJCXRlc3QgIiRFWFBFQ1RfSEVBREVSX0NPVU5UIiA9ICIkKHNlZCAtbiAnMXMvXiMgVGhpcyBpcyBhIGNvbWJpbmF0aW9uIG9mIFwoLipcKSBjb21taXRzXC4vXDEvcCcgPCAiJDEiKSIgfHwKKwkJCWV4aXQKKwkJdGVzdCAteiAiJEZBS0VfQ09NTUlUX01FU1NBR0UiIHx8IGVjaG8gIiRGQUtFX0NPTU1JVF9NRVNTQUdFIiA+ICIkMSIKKwkJdGVzdCAteiAiJEZBS0VfQ09NTUlUX0FNRU5EIiB8fCBlY2hvICIkRkFLRV9DT01NSVRfQU1FTkQiID4+ICIkMSIKKwkJZXhpdAorCQk7OworCWVzYWMKKwl0ZXN0IC16ICIkRVhQRUNUX0NPVU5UIiB8fAorCQl0ZXN0ICIkRVhQRUNUX0NPVU5UIiA9ICQoc2VkIC1lICcvXiMvZCcgLWUgJy9eJC9kJyA8ICIkMSIgfCB3YyAtbCkgfHwKKwkJZXhpdAorCXRlc3QgLXogIiRGQUtFX0xJTkVTIiAmJiBleGl0CisJZ3JlcCAtdiAnXiMnIDwgIiQxIiA+ICIkMSIudG1wCisJcm0gLWYgIiQxIgorCWVjaG8gJ3JlYmFzZSAtaSBzY3JpcHQgYmVmb3JlIGVkaXRpbmc6JworCWNhdCAiJDEiLnRtcAorCWFjdGlvbj1waWNrCisJZm9yIGxpbmUgaW4gJEZBS0VfTElORVM7IGRvCisJCWNhc2UgJGxpbmUgaW4KKwkJc3F1YXNofGZpeHVwfGVkaXR8cmV3b3JkfGRyb3ApCisJCQlhY3Rpb249IiRsaW5lIjs7CisJCWV4ZWMqKQorCQkJZWNobyAiJGxpbmUiIHwgc2VkICdzL18vIC9nJyA+PiAiJDEiOzsKKwkJIiMiKQorCQkJZWNobyAnIyBjb21tZW50JyA+PiAiJDEiOzsKKwkJIj4iKQorCQkJZWNobyA+PiAiJDEiOzsKKwkJYmFkKQorCQkJYWN0aW9uPSJiYWRjbWQiOzsKKwkJZmFrZXNoYSkKKwkJCWVjaG8gIiRhY3Rpb24gWFhYWFhYWCBGYWxzZSBjb21taXQiID4+ICIkMSIKKwkJCWFjdGlvbj1waWNrOzsKKwkJKikKKwkJCXNlZCAtbiAiJHtsaW5lfXMvXnBpY2svJGFjdGlvbi9wIiA8ICIkMSIudG1wID4+ICIkMSIKKwkJCWFjdGlvbj1waWNrOzsKKwkJZXNhYworCWRvbmUKKwllY2hvICdyZWJhc2UgLWkgc2NyaXB0IGFmdGVyIGVkaXRpbmc6JworCWNhdCAiJDEiCisJRU9GCisKKwl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlLWVkaXRvci5zaCIKK30KKworIyBBZnRlciBzZXRfY2F0X3RvZG9fZWRpdG9yLCByZWJhc2UgLWkgd2lsbCB3cml0ZSB0aGUgdG9kbyBsaXN0IChpZ25vcmluZworIyBibGFuayBsaW5lcyBhbmQgY29tbWVudHMpIHRvIHN0ZG91dCwgYW5kIGV4aXQgZmFpbHVyZSAoc28geW91IHNob3VsZCBydW4KKyMgaXQgd2l0aCB0ZXN0X211c3RfZmFpbCkuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHZlcmlmeSB0aGUgZXhwZWN0ZWQgdXNlcgorIyBleHBlcmllbmNlLCBmb3IgdG9kbyBsaXN0IGNoYW5nZXMgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBvdXRjb21lIG9mCisjIHJlYmFzZTsgb3IgYXMgYW4gZXh0cmEgY2hlY2sgaW4gYWRkaXRpb24gdG8gY2hlY2tpbmcgdGhlIG91dGNvbWUuCisKK3NldF9jYXRfdG9kb19lZGl0b3IgKCkgeworCXdyaXRlX3NjcmlwdCBmYWtlLWVkaXRvci5zaCA8PC1cRU9GCisJZ3JlcCAiXlteI10iICIkMSIKKwlleGl0IDEKKwlFT0YKKwl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlLWVkaXRvci5zaCIKK30KKworIyBjaGVja3MgdGhhdCB0aGUgcmV2aXNpb25zIGluICIkMiIgcmVwcmVzZW50IGEgbGluZWFyIHJhbmdlIHdpdGggdGhlCisjIHN1YmplY3RzIGluICIkMSIKK3Rlc3RfbGluZWFyX3JhbmdlICgpIHsKKwlyZXZsaXN0X21lcmdlcz0kKGdpdCByZXYtbGlzdCAtLW1lcmdlcyAiJDIiKSAmJgorCXRlc3QgLXogIiRyZXZsaXN0X21lcmdlcyIgJiYKKwlleHBlY3RlZD0kMQorCXNldCAtLSAkKGdpdCBsb2cgLS1yZXZlcnNlIC0tZm9ybWF0PSVzICIkMiIpCisJdGVzdCAiJGV4cGVjdGVkIiA9ICIkKiIKK30KKworcmVzZXRfcmViYXNlICgpIHsKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjbGVhbiAtZgorfQorCitjaGVycnlfcGljayAoKSB7CisJZ2l0IGNoZXJyeS1waWNrIC1uICIkMiIgJiYKKwlnaXQgY29tbWl0IC1tICIkMSIgJiYKKwlnaXQgdGFnICIkMSIKK30KKworcmV2ZXJ0ICgpIHsKKwlnaXQgcmV2ZXJ0IC1uICIkMiIgJiYKKwlnaXQgY29tbWl0IC1tICIkMSIgJiYKKwlnaXQgdGFnICIkMSIKK30KKworbWFrZV9lbXB0eSAoKSB7CisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICIkMSIgJiYKKwlnaXQgdGFnICIkMSIKK30KZGlmZiAtLWdpdCBhL3QvbGliLXN1Ym1vZHVsZS11cGRhdGUuc2ggYi90L2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc5Y2RkMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCkBAIC0wLDAgKzEsNjgwIEBACisjIENyZWF0ZSBhIHN1Ym1vZHVsZSBsYXlvdXQgdXNlZCBmb3IgYWxsIHRlc3RzIGJlbG93LgorIworIyBUaGUgZm9sbG93aW5nIHVzZSBjYXNlcyBhcmUgY292ZXJlZDoKKyMgLSBOZXcgc3VibW9kdWxlIChub19zdWJtb2R1bGUgPT4gYWRkX3N1YjEpCisjIC0gUmVtb3ZlZCBzdWJtb2R1bGUgKGFkZF9zdWIxID0+IHJlbW92ZV9zdWIxKQorIyAtIFVwZGF0ZWQgc3VibW9kdWxlIChhZGRfc3ViMSA9PiBtb2RpZnlfc3ViMSkKKyMgLSBTdWJtb2R1bGUgdXBkYXRlZCB0byBpbnZhbGlkIGNvbW1pdCAoYWRkX3N1YjEgPT4gaW52YWxpZF9zdWIxKQorIyAtIFN1Ym1vZHVsZSB1cGRhdGVkIGZyb20gaW52YWxpZCBjb21taXQgKGludmFsaWRfc3ViMSA9PiB2YWxpZF9zdWIxKQorIyAtIFN1Ym1vZHVsZSByZXBsYWNlZCBieSB0cmFja2VkIGZpbGVzIGluIGRpcmVjdG9yeSAoYWRkX3N1YjEgPT4KKyMgICByZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkpCisjIC0gRGlyZWN0b3J5IGNvbnRhaW5pbmcgdHJhY2tlZCBmaWxlcyByZXBsYWNlZCBieSBzdWJtb2R1bGUKKyMgICAocmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ID0+IHJlcGxhY2VfZGlyZWN0b3J5X3dpdGhfc3ViMSkKKyMgLSBTdWJtb2R1bGUgcmVwbGFjZWQgYnkgdHJhY2tlZCBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSAoYWRkX3N1YjEgPT4KKyMgICByZXBsYWNlX3N1YjFfd2l0aF9maWxlKQorIyAtIFRyYWNrZWQgZmlsZSByZXBsYWNlZCBieSBzdWJtb2R1bGUgKHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgPT4KKyMgICByZXBsYWNlX2ZpbGVfd2l0aF9zdWIxKQorIworIyAgICAgICAgICAgICAgICAgICAtLU8tLS0tLU8KKyMgICAgICAgICAgICAgICAgICAvICBeICAgICByZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEKKyMgICAgICAgICAgICAgICAgIC8gICByZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkKKyMgICAgICAgICAgICAgICAgLy0tLS1PCisjICAgICAgICAgICAgICAgLyAgICAgXgorIyAgICAgICAgICAgICAgLyAgICAgIG1vZGlmeV9zdWIxCisjICAgICAgTy0tLS0tLU8tLS0tLS0tTworIyAgICAgIF4gICAgICBeXCAgICAgIF4KKyMgICAgICB8ICAgICAgfCBcICAgICByZW1vdmVfc3ViMQorIyAgICAgIHwgICAgICB8ICAtLS0tLU8tLS0tLU8KKyMgICAgICB8ICAgICAgfCAgIFwgICBeICAgICByZXBsYWNlX2ZpbGVfd2l0aF9zdWIxCisjICAgICAgfCAgICAgIHwgICAgXCAgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZQorIyAgICAgIHwgICBhZGRfc3ViMSAtLU8tLS0tLU8KKyMgbm9fc3VibW9kdWxlICAgICAgICBeICAgICB2YWxpZF9zdWIxCisjICAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9zdWIxCisjCitjcmVhdGVfbGliX3N1Ym1vZHVsZV9yZXBvICgpIHsKKwlnaXQgaW5pdCBzdWJtb2R1bGVfdXBkYXRlX3JlcG8gJiYKKwkoCisJCWNkIHN1Ym1vZHVsZV91cGRhdGVfcmVwbyAmJgorCQllY2hvICJleHBlY3QiID4+LmdpdGlnbm9yZSAmJgorCQllY2hvICJhY3R1YWwiID4+LmdpdGlnbm9yZSAmJgorCQllY2hvICJ4IiA+ZmlsZTEgJiYKKwkJZWNobyAieSIgPmZpbGUyICYmCisJCWdpdCBhZGQgLmdpdGlnbm9yZSBmaWxlMSBmaWxlMiAmJgorCQlnaXQgY29tbWl0IC1tICJCYXNlIiAmJgorCQlnaXQgYnJhbmNoICJub19zdWJtb2R1bGUiICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iICJhZGRfc3ViMSIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi8uIHN1YjEgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViMS5pZ25vcmUgYWxsICYmCisJCWdpdCBjb25maWcgc3VibW9kdWxlLnN1YjEuaWdub3JlIGFsbCAmJgorCQlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBzdWIxIiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmVtb3ZlX3N1YjEgJiYKKwkJZ2l0IHJldmVydCBIRUFEICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iICJtb2RpZnlfc3ViMSIgImFkZF9zdWIxIiAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCQkoCisJCQljZCBzdWIxICYmCisJCQlnaXQgZmV0Y2ggJiYKKwkJCWdpdCBjaGVja291dCAtYiAibW9kaWZpY2F0aW9ucyIgJiYKKwkJCWVjaG8gInoiID5maWxlMiAmJgorCQkJZWNobyAieCIgPmZpbGUzICYmCisJCQlnaXQgYWRkIGZpbGUyIGZpbGUzICYmCisJCQlnaXQgY29tbWl0IC1tICJtb2RpZmllZCBmaWxlMiBhbmQgYWRkZWQgZmlsZTMiICYmCisJCQlnaXQgcHVzaCBvcmlnaW4gbW9kaWZpY2F0aW9ucworCQkpICYmCisJCWdpdCBhZGQgc3ViMSAmJgorCQlnaXQgY29tbWl0IC1tICJNb2RpZnkgc3ViMSIgJiYKKworCQlnaXQgY2hlY2tvdXQgLWIgInJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSIgImFkZF9zdWIxIiAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCQkoCisJCQljZCBzdWIxICYmCisJCQlnaXQgY2hlY2tvdXQgbW9kaWZpY2F0aW9ucworCQkpICYmCisJCWdpdCBybSAtLWNhY2hlZCBzdWIxICYmCisJCXJtIHN1YjEvLmdpdCogJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLXJlbW92ZS1zZWN0aW9uICJzdWJtb2R1bGUuc3ViMSIgJiYKKwkJZ2l0IGFkZCAuZ2l0bW9kdWxlcyBzdWIxLyogJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVwbGFjZSBzdWIxIHdpdGggZGlyZWN0b3J5IiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxICYmCisJCWdpdCByZXZlcnQgSEVBRCAmJgorCisJCWdpdCBjaGVja291dCAtYiAicmVwbGFjZV9zdWIxX3dpdGhfZmlsZSIgImFkZF9zdWIxIiAmJgorCQlnaXQgcm0gc3ViMSAmJgorCQllY2hvICJjb250ZW50IiA+c3ViMSAmJgorCQlnaXQgYWRkIHN1YjEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiUmVwbGFjZSBzdWIxIHdpdGggZmlsZSIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlcGxhY2VfZmlsZV93aXRoX3N1YjEgJiYKKwkJZ2l0IHJldmVydCBIRUFEICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iICJpbnZhbGlkX3N1YjEiICJhZGRfc3ViMSIgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OSBzdWIxICYmCisJCWdpdCBjb21taXQgLW0gIkludmFsaWQgc3ViMSBjb21taXQiICYmCisJCWdpdCBjaGVja291dCAtYiB2YWxpZF9zdWIxICYmCisJCWdpdCByZXZlcnQgSEVBRCAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyCisJKQorfQorCisjIEhlbHBlciBmdW5jdGlvbiB0byByZXBsYWNlIGdpdGZpbGUgd2l0aCAuZ2l0IGRpcmVjdG9yeQorcmVwbGFjZV9naXRmaWxlX3dpdGhfZ2l0X2RpciAoKSB7CisJKAorCQljZCAiJDEiICYmCisJCWdpdF9kaXI9IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpIiAmJgorCQlybSAtZiAuZ2l0ICYmCisJCWNwIC1SICIkZ2l0X2RpciIgLmdpdCAmJgorCQlHSVRfV09SS19UUkVFPS4gZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud29ya3RyZWUKKwkpCit9CisKKyMgVGVzdCB0aGF0IHRoZSAuZ2l0IGRpcmVjdG9yeSBpbiB0aGUgc3VibW9kdWxlIGlzIHVuY2hhbmdlZCAoZXhjZXB0IGZvciB0aGUKKyMgY29yZS53b3JrdHJlZSBzZXR0aW5nLCB3aGljaCBhcHBlYXJzIG9ubHkgaW4gJEdJVF9ESVIvbW9kdWxlcy8kMS9jb25maWcpLgorIyBDYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIHRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgYXMgdGhlIGxhdHRlciBtaWdodAorIyB3cml0ZSB0aGUgaW5kZXggZmlsZSBsZWFkaW5nIHRvIGZhbHNlIHBvc2l0aXZlIGluZGV4IGRpZmZlcmVuY2VzLgorIworIyBOb3RlIHRoYXQgdGhpcyBvbmx5IHN1cHBvcnRzIHN1Ym1vZHVsZXMgYXQgdGhlIHJvb3QgbGV2ZWwgb2YgdGhlCisjIHN1cGVycHJvamVjdCwgd2l0aCB0aGUgZGVmYXVsdCBuYW1lLCBpLmUuIHNhbWUgYXMgaXRzIHBhdGguCit0ZXN0X2dpdF9kaXJlY3RvcnlfaXNfdW5jaGFuZ2VkICgpIHsKKwkoCisJCWNkICIuZ2l0L21vZHVsZXMvJDEiICYmCisJCSMgZG9lcyBjb3JlLndvcmt0cmVlIHBvaW50IGF0IHRoZSByaWdodCBwbGFjZT8KKwkJdGVzdCAiJChnaXQgY29uZmlnIGNvcmUud29ya3RyZWUpIiA9ICIuLi8uLi8uLi8kMSIgJiYKKwkJIyByZW1vdmUgaXQgdGVtcG9yYXJpbHkgYmVmb3JlIGNvbXBhcmluZywgYXMKKwkJIyAiJDEvLmdpdC9jb25maWciIGxhY2tzIGl0Li4uCisJCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJKSAmJgorCWRpZmYgLXIgIi5naXQvbW9kdWxlcy8kMSIgIiQxLy5naXQiICYmCisJKAorCQkjIC4uLiBhbmQgdGhlbiByZXN0b3JlLgorCQljZCAiLmdpdC9tb2R1bGVzLyQxIiAmJgorCQlnaXQgY29uZmlnIGNvcmUud29ya3RyZWUgIi4uLy4uLy4uLyQxIgorCSkKK30KKworIyBIZWxwZXIgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5IHRlc3QgYmVsb3csIGl0IHNldHMgdXAKKyMgdGhlIHN1Ym1vZHVsZSByZXBvIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYW5kIGNvbmZpZ3VyZXMgdGhlIG1vc3QgcHJvYmxlbWF0aWMKKyMgc2V0dGluZ3MgZm9yIGRpZmYuaWdub3JlU3VibW9kdWxlcy4KK3Byb2xvZyAoKSB7CisJKHRlc3QgLWQgc3VibW9kdWxlX3VwZGF0ZV9yZXBvIHx8IGNyZWF0ZV9saWJfc3VibW9kdWxlX3JlcG8pICYmCisJdGVzdF9jb25maWdfZ2xvYmFsIGRpZmYuaWdub3JlU3VibW9kdWxlcyBhbGwgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgYWxsCit9CisKKyMgSGVscGVyIGZ1bmN0aW9uIHRvIGJyaW5nIHdvcmsgdHJlZSBiYWNrIGludG8gdGhlIHN0YXRlIGdpdmVuIGJ5IHRoZQorIyBjb21taXQuIFRoaXMgaW5jbHVkZXMgdHJ5aW5nIHRvIHBvcHVsYXRlIHN1YjEgYWNjb3JkaW5nbHkgaWYgaXQgZXhpc3RzIGFuZAorIyBzaG91bGQgYmUgdXBkYXRlZCB0byBhbiBleGlzdGluZyBjb21taXQuCityZXNldF93b3JrX3RyZWVfdG8gKCkgeworCXJtIC1yZiBzdWJtb2R1bGVfdXBkYXRlICYmCisJZ2l0IGNsb25lIHN1Ym1vZHVsZV91cGRhdGVfcmVwbyBzdWJtb2R1bGVfdXBkYXRlICYmCisJKAorCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCXJtIC1yZiBzdWIxICYmCisJCWdpdCBjaGVja291dCAtZiAiJDEiICYmCisJCWdpdCBzdGF0dXMgLXUgLXMgPmFjdHVhbCAmJgorCQl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJCXNoYTE9JChnaXQgcmV2LXBhcnNlIC0tcmV2cy1vbmx5IEhFQUQ6c3ViMSkgJiYKKwkJaWYgdGVzdCAtbiAiJHNoYTEiICYmCisJCSAgIHRlc3QgJChjZCAic3ViMSIgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJHNoYTFee2NvbW1pdH0iKQorCQl0aGVuCisJCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgInN1YjEiCisJCWZpCisJKQorfQorCisjIFRlc3QgdGhhdCB0aGUgc3VwZXJwcm9qZWN0IGNvbnRhaW5zIHRoZSBjb250ZW50IGFjY29yZGluZyB0byBjb21taXQgIiQxIgorIyAodGhlIHdvcmsgdHJlZSBtdXN0IG1hdGNoIHRoZSBpbmRleCBmb3IgZXZlcnl0aGluZyBidXQgc3VibW9kdWxlcyBidXQgdGhlCisjIGluZGV4IG11c3QgZXhhY3RseSBtYXRjaCB0aGUgZ2l2ZW4gY29tbWl0IGluY2x1ZGluZyBhbnkgc3VibW9kdWxlIFNIQS0xcykuCit0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50ICgpIHsKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAiJDEiID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1pZ25vcmUtc3VibW9kdWxlcyA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorfQorCisjIFRlc3QgdGhhdCB0aGUgZ2l2ZW4gc3VibW9kdWxlIGF0IHBhdGggIiQxIiBjb250YWlucyB0aGUgY29udGVudCBhY2NvcmRpbmcKKyMgdG8gdGhlIHN1Ym1vZHVsZSBjb21taXQgcmVjb3JkZWQgaW4gdGhlIHN1cGVycHJvamVjdCdzIGNvbW1pdCAiJDIiCit0ZXN0X3N1Ym1vZHVsZV9jb250ZW50ICgpIHsKKwlpZiB0ZXN0ICQjICE9IDIKKwl0aGVuCisJCWVjaG8gInRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgbmVlZHMgdHdvIGFyZ3VtZW50cyIKKwkJcmV0dXJuIDEKKwlmaSAmJgorCXN1Ym1vZHVsZT0iJDEiICYmCisJY29tbWl0PSIkMiIgJiYKKwl0ZXN0IC1kICIkc3VibW9kdWxlIi8gJiYKKwlpZiAhIHRlc3QgLWYgIiRzdWJtb2R1bGUiLy5naXQgJiYgISB0ZXN0IC1kICIkc3VibW9kdWxlIi8uZ2l0CisJdGhlbgorCQllY2hvICJTdWJtb2R1bGUgJHN1Ym1vZHVsZSBpcyBub3QgcG9wdWxhdGVkIgorCQlyZXR1cm4gMQorCWZpICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiRjb21taXQ6JHN1Ym1vZHVsZSIpICYmCisJaWYgdGVzdCAteiAiJHNoYTEiCisJdGhlbgorCQllY2hvICJDb3VsZG4ndCByZXRyaWV2ZSBTSEEtMSBvZiAkc3VibW9kdWxlIGZvciAkY29tbWl0IgorCQlyZXR1cm4gMQorCWZpICYmCisJKAorCQljZCAiJHN1Ym1vZHVsZSIgJiYKKwkJZ2l0IHN0YXR1cyAtdSAtcyA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwkJZ2l0IGRpZmYgIiRzaGExIiA+YWN0dWFsICYmCisJCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwKKwkpCit9CisKKyMgVGVzdCB0aGF0IHRoZSBmb2xsb3dpbmcgdHJhbnNpdGlvbnMgYXJlIGNvcnJlY3RseSBoYW5kbGVkOgorIyAtIFVwZGF0ZWQgc3VibW9kdWxlCisjIC0gTmV3IHN1Ym1vZHVsZQorIyAtIFJlbW92ZWQgc3VibW9kdWxlCisjIC0gRGlyZWN0b3J5IGNvbnRhaW5pbmcgdHJhY2tlZCBmaWxlcyByZXBsYWNlZCBieSBzdWJtb2R1bGUKKyMgLSBTdWJtb2R1bGUgcmVwbGFjZWQgYnkgdHJhY2tlZCBmaWxlcyBpbiBkaXJlY3RvcnkKKyMgLSBTdWJtb2R1bGUgcmVwbGFjZWQgYnkgdHJhY2tlZCBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZQorIyAtIHRyYWNrZWQgZmlsZSByZXBsYWNlZCBieSBzdWJtb2R1bGUKKyMKKyMgVGhlIGRlZmF1bHQgaXMgdGhhdCBzdWJtb2R1bGUgY29udGVudHMgYXJlbid0IGNoYW5nZWQgdW50aWwgImdpdCBzdWJtb2R1bGUKKyMgdXBkYXRlIiBpcyBydW4uIEFuZCBldmVuIHRoZW4gdGhhdCBjb21tYW5kIGRvZXNuJ3QgZGVsZXRlIHRoZSB3b3JrIHRyZWUgb2YKKyMgYSByZW1vdmVkIHN1Ym1vZHVsZS4KKyMKKyMgUmVtb3ZpbmcgYSBzdWJtb2R1bGUgY29udGFpbmluZyBhIC5naXQgZGlyZWN0b3J5IG11c3QgZmFpbCBldmVuIHdoZW4gZm9yY2VkCisjIHRvIHByb3RlY3QgdGhlIGhpc3RvcnkhCisjCisKKyMgVGVzdCB0aGF0IHN1Ym1vZHVsZSBjb250ZW50cyBhcmUgY3VycmVudGx5IG5vdCB1cGRhdGVkIHdoZW4gc3dpdGNoaW5nCisjIGJldHdlZW4gY29tbWl0cyB0aGF0IGNoYW5nZSBhIHN1Ym1vZHVsZS4KK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAoKSB7CisJY29tbWFuZD0iJDEiCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBBcHBlYXJpbmcgc3VibW9kdWxlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFN3aXRjaGluZyB0byBhIGNvbW1pdCBsZXR0aW5nIGEgc3VibW9kdWxlIGFwcGVhciBjcmVhdGVzIGVtcHR5IGRpciAuLi4KKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9TVEFTSF9ET0VTX0lHTk9SRV9TVUJNT0RVTEVfQ0hBTkdFUyIgPSAxCisJdGhlbgorCQkjIFJlc3RvcmluZyBzdGFzaCBmYWlscyB0byByZXN0b3JlIHN1Ym1vZHVsZSBpbmRleCBlbnRyeQorCQlSRVNVTFQ9ImZhaWx1cmUiCisJZWxzZQorCQlSRVNVTFQ9InN1Y2Nlc3MiCisJZmkKKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogYWRkZWQgc3VibW9kdWxlIGNyZWF0ZXMgZW1wdHkgZGlyZWN0b3J5IiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgLi4uIGFuZCBkb2Vzbid0IGNhcmUgaWYgaXQgYWxyZWFkeSBleGlzdHMgLi4uCisJdGVzdF9leHBlY3RfJFJFU1VMVCAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBsZWF2ZXMgZXhpc3RpbmcgZW1wdHkgZGlyZWN0b3J5IGFsb25lIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCW1rZGlyIHN1YjEgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgLi4uIHVubGVzcyB0aGVyZSBpcyBhbiB1bnRyYWNrZWQgZmlsZSBpbiBpdHMgcGxhY2UuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBkb2Vzbid0IHJlbW92ZSB1bnRyYWNrZWQgdW5pZ25vcmVkIGZpbGUgd2l0aCBzYW1lIG5hbWUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBub19zdWJtb2R1bGUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCBhZGRfc3ViMSBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCT5zdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vbm9fc3VibW9kdWxlICYmCisJCQl0ZXN0X211c3RfYmVfZW1wdHkgc3ViMQorCQkpCisJJworCSMgUmVwbGFjaW5nIGEgdHJhY2tlZCBmaWxlIHdpdGggYSBzdWJtb2R1bGUgcHJvZHVjZXMgYW4gZW1wdHkKKwkjIGRpcmVjdG9yeSAuLi4KKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVwbGFjZSB0cmFja2VkIGZpbGUgd2l0aCBzdWJtb2R1bGUgY3JlYXRlcyBlbXB0eSBkaXJlY3RvcnkiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byByZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9maWxlX3dpdGhfc3ViMSBvcmlnaW4vcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJJGNvbW1hbmQgcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9maWxlX3dpdGhfc3ViMSAmJgorCQkJdGVzdF9kaXJfaXNfZW1wdHkgc3ViMSAmJgorCQkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL3JlcGxhY2VfZmlsZV93aXRoX3N1YjEKKwkJKQorCScKKwkjIC4uLiBhcyBkb2VzIHJlbW92aW5nIGEgZGlyZWN0b3J5IHdpdGggdHJhY2tlZCBmaWxlcyB3aXRoIGEKKwkjIHN1Ym1vZHVsZS4KKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9OT0ZGX01FUkdFX0RPRVNOVF9DUkVBVEVfRU1QVFlfU1VCTU9EVUxFX0RJUiIgPSAxCisJdGhlbgorCQkjIE5vbiBmYXN0LWZvcndhcmQgbWVyZ2VzIGZhaWwgd2l0aCAiRGlyZWN0b3J5IHN1YjEgZG9lc24ndAorCQkjIGV4aXN0LiBzdWIxIiBiZWNhdXNlIHRoZSBlbXB0eSBzdWJtb2R1bGUgZGlyZWN0b3J5IGlzIG5vdAorCQkjIGNyZWF0ZWQKKwkJUkVTVUxUPSJmYWlsdXJlIgorCWVsc2UKKwkJUkVTVUxUPSJzdWNjZXNzIgorCWZpCisJdGVzdF9leHBlY3RfJFJFU1VMVCAiJGNvbW1hbmQ6IHJlcGxhY2UgZGlyZWN0b3J5IHdpdGggc3VibW9kdWxlIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxIG9yaWdpbi9yZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2VfZGlyZWN0b3J5X3dpdGhfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxICYmCisJCQl0ZXN0X2Rpcl9pc19lbXB0eSBzdWIxICYmCisJCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxCisJCSkKKwknCisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRGlzYXBwZWFyaW5nIHN1Ym1vZHVsZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgUmVtb3ZpbmcgYSBzdWJtb2R1bGUgZG9lc24ndCByZW1vdmUgaXRzIHdvcmsgdHJlZSAuLi4KKwlpZiB0ZXN0ICIkS05PV05fRkFJTFVSRV9TVEFTSF9ET0VTX0lHTk9SRV9TVUJNT0RVTEVfQ0hBTkdFUyIgPSAxCisJdGhlbgorCQlSRVNVTFQ9ImZhaWx1cmUiCisJZWxzZQorCQlSRVNVTFQ9InN1Y2Nlc3MiCisJZmkKKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVtb3ZlZCBzdWJtb2R1bGUgbGVhdmVzIHN1Ym1vZHVsZSBkaXJlY3RvcnkgYW5kIGl0cyBjb250ZW50cyBpbiBwbGFjZSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVtb3ZlX3N1YjEgb3JpZ2luL3JlbW92ZV9zdWIxICYmCisJCQkkY29tbWFuZCByZW1vdmVfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVtb3ZlX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIC4uLiBlc3BlY2lhbGx5IHdoZW4gaXQgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeS4KKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVtb3ZlZCBzdWJtb2R1bGUgbGVhdmVzIHN1Ym1vZHVsZSBjb250YWluaW5nIGEgLmdpdCBkaXJlY3RvcnkgYWxvbmUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlbW92ZV9zdWIxIG9yaWdpbi9yZW1vdmVfc3ViMSAmJgorCQkJcmVwbGFjZV9naXRmaWxlX3dpdGhfZ2l0X2RpciBzdWIxICYmCisJCQkkY29tbWFuZCByZW1vdmVfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVtb3ZlX3N1YjEgJiYKKwkJCXRlc3RfZ2l0X2RpcmVjdG9yeV9pc191bmNoYW5nZWQgc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgUmVwbGFjaW5nIGEgc3VibW9kdWxlIHdpdGggZmlsZXMgaW4gYSBkaXJlY3RvcnkgbXVzdCBmYWlsIGFzIHRoZQorCSMgc3VibW9kdWxlIHdvcmsgdHJlZSBpc24ndCByZW1vdmVkIC4uLgorCWlmIHRlc3QgIiRLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfQVRURU1QVFNfVE9fTUVSR0VfUkVNT1ZFRF9TVUJNT0RVTEVfRklMRVMiID0gMQorCXRoZW4KKwkJIyBOb24gZmFzdC1mb3J3YXJkIG1lcmdlcyBhdHRlbXB0IHRvIG1lcmdlIHRoZSBmb3JtZXIKKwkJIyBzdWJtb2R1bGUgZmlsZXMgd2l0aCB0aGUgbmV3bHkgY2hlY2tlZCBvdXQgb25lcyBpbiB0aGUKKwkJIyBkaXJlY3Rvcnkgb2YgdGhlIHNhbWUgbmFtZSB3aGlsZSBpdCBzaG91bGRuJ3QuCisJCVJFU1VMVD0iZmFpbHVyZSIKKwllbHNlCisJCVJFU1VMVD0ic3VjY2VzcyIKKwlmaQorCXRlc3RfZXhwZWN0XyRSRVNVTFQgIiRjb21tYW5kOiByZXBsYWNlIHN1Ym1vZHVsZSB3aXRoIGEgZGlyZWN0b3J5IG11c3QgZmFpbCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXRlc3RfbXVzdF9mYWlsICRjb21tYW5kIHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIC4uLiBlc3BlY2lhbGx5IHdoZW4gaXQgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeS4KKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgY29udGFpbmluZyBhIC5naXQgZGlyZWN0b3J5IHdpdGggYSBkaXJlY3RvcnkgbXVzdCBmYWlsIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3Rvcnkgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkJcmVwbGFjZV9naXRmaWxlX3dpdGhfZ2l0X2RpciBzdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCByZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X2dpdF9kaXJlY3RvcnlfaXNfdW5jaGFuZ2VkIHN1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIFJlcGxhY2luZyBpdCB3aXRoIGEgZmlsZSBtdXN0IGZhaWwgYXMgaXQgY291bGQgdGhyb3cgYXdheSBhbnkgbG9jYWwKKwkjIHdvcmsgdHJlZSBjaGFuZ2VzIC4uLgorCXRlc3RfZXhwZWN0X2ZhaWx1cmUgIiRjb21tYW5kOiByZXBsYWNlIHN1Ym1vZHVsZSB3aXRoIGEgZmlsZSBtdXN0IGZhaWwiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJCXRlc3RfbXVzdF9mYWlsICRjb21tYW5kIHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCisJIyAuLi4gb3IgZXZlbiBkZXN0cm95IHVucHVzaGVkIHBhcnRzIG9mIHN1Ym1vZHVsZSBoaXN0b3J5IGlmIHRoYXQKKwkjIHN0aWxsIHVzZXMgYSAuZ2l0IGRpcmVjdG9yeS4KKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgY29udGFpbmluZyBhIC5naXQgZGlyZWN0b3J5IHdpdGggYSBmaWxlIG11c3QgZmFpbCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSAmJgorCQkJcmVwbGFjZV9naXRmaWxlX3dpdGhfZ2l0X2RpciBzdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCByZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9naXRfZGlyZWN0b3J5X2lzX3VuY2hhbmdlZCBzdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBNb2RpZmllZCBzdWJtb2R1bGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVXBkYXRpbmcgYSBzdWJtb2R1bGUgc2hhMSBkb2Vzbid0IHVwZGF0ZSB0aGUgc3VibW9kdWxlJ3Mgd29yayB0cmVlCisJaWYgdGVzdCAiJEtOT1dOX0ZBSUxVUkVfQ0hFUlJZX1BJQ0tfU0VFU19FTVBUWV9DT01NSVQiID0gMQorCXRoZW4KKwkJIyBXaGVuIGNoZXJyeSBwaWNraW5nIGEgU0hBLTEgdXBkYXRlIGZvciBhbiBpZ25vcmVkIHN1Ym1vZHVsZQorCQkjIHRoZSBjb21taXQgaW5jb3JyZWN0bHkgZmFpbHMgd2l0aCAiVGhlIHByZXZpb3VzIGNoZXJyeS1waWNrCisJCSMgaXMgbm93IGVtcHR5LCBwb3NzaWJseSBkdWUgdG8gY29uZmxpY3QgcmVzb2x1dGlvbi4iCisJCVJFU1VMVD0iZmFpbHVyZSIKKwllbHNlCisJCVJFU1VMVD0ic3VjY2VzcyIKKwlmaQorCXRlc3RfZXhwZWN0XyRSRVNVTFQgIiRjb21tYW5kOiBtb2RpZmllZCBzdWJtb2R1bGUgZG9lcyBub3QgdXBkYXRlIHN1Ym1vZHVsZSB3b3JrIHRyZWUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IG1vZGlmeV9zdWIxIG9yaWdpbi9tb2RpZnlfc3ViMSAmJgorCQkJJGNvbW1hbmQgbW9kaWZ5X3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL21vZGlmeV9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9tb2RpZnlfc3ViMQorCQkpCisJJworCisJIyBVcGRhdGluZyBhIHN1Ym1vZHVsZSB0byBhbiBpbnZhbGlkIHNoYTEgZG9lc24ndCB1cGRhdGUgdGhlCisJIyBzdWJtb2R1bGUncyB3b3JrIHRyZWUsIHN1YnNlcXVlbnQgdXBkYXRlIHdpbGwgZmFpbAorCXRlc3RfZXhwZWN0XyRSRVNVTFQgIiRjb21tYW5kOiBtb2RpZmllZCBzdWJtb2R1bGUgZG9lcyBub3QgdXBkYXRlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgdG8gaW52YWxpZCBjb21taXQiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IGludmFsaWRfc3ViMSBvcmlnaW4vaW52YWxpZF9zdWIxICYmCisJCQkkY29tbWFuZCBpbnZhbGlkX3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2ludmFsaWRfc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIFVwZGF0aW5nIGEgc3VibW9kdWxlIGZyb20gYW4gaW52YWxpZCBzaGExIGRvZXNuJ3QgdXBkYXRlIHRoZQorCSMgc3VibW9kdWxlJ3Mgd29yayB0cmVlLCBzdWJzZXF1ZW50IHVwZGF0ZSB3aWxsIHN1Y2NlZWQKKwl0ZXN0X2V4cGVjdF8kUkVTVUxUICIkY29tbWFuZDogbW9kaWZpZWQgc3VibW9kdWxlIGRvZXMgbm90IHVwZGF0ZSBzdWJtb2R1bGUgd29yayB0cmVlIGZyb20gaW52YWxpZCBjb21taXQiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBpbnZhbGlkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCB2YWxpZF9zdWIxIG9yaWdpbi92YWxpZF9zdWIxICYmCisJCQkkY29tbWFuZCB2YWxpZF9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi92YWxpZF9zdWIxICYmCisJCQl0ZXN0X2Rpcl9pc19lbXB0eSBzdWIxICYmCisJCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vdmFsaWRfc3ViMQorCQkpCisJJworfQorCisjIFRlc3QgdGhhdCBzdWJtb2R1bGUgY29udGVudHMgYXJlIGN1cnJlbnRseSBub3QgdXBkYXRlZCB3aGVuIHN3aXRjaGluZworIyBiZXR3ZWVuIGNvbW1pdHMgdGhhdCBjaGFuZ2UgYSBzdWJtb2R1bGUsIGJ1dCB0aHJvd2luZyBhd2F5IGxvY2FsIGNoYW5nZXMgaW4KKyMgdGhlIHN1cGVycHJvamVjdCBpcyBhbGxvd2VkLgordGVzdF9zdWJtb2R1bGVfZm9yY2VkX3N3aXRjaCAoKSB7CisJY29tbWFuZD0iJDEiCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBBcHBlYXJpbmcgc3VibW9kdWxlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFN3aXRjaGluZyB0byBhIGNvbW1pdCBsZXR0aW5nIGEgc3VibW9kdWxlIGFwcGVhciBjcmVhdGVzIGVtcHR5IGRpciAuLi4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogYWRkZWQgc3VibW9kdWxlIGNyZWF0ZXMgZW1wdHkgZGlyZWN0b3J5IiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgLi4uIGFuZCBkb2Vzbid0IGNhcmUgaWYgaXQgYWxyZWFkeSBleGlzdHMgLi4uCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBsZWF2ZXMgZXhpc3RpbmcgZW1wdHkgZGlyZWN0b3J5IGFsb25lIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gbm9fc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgYWRkX3N1YjEgb3JpZ2luL2FkZF9zdWIxICYmCisJCQlta2RpciBzdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgLi4uIHVubGVzcyB0aGVyZSBpcyBhbiB1bnRyYWNrZWQgZmlsZSBpbiBpdHMgcGxhY2UuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IGFkZGVkIHN1Ym1vZHVsZSBkb2VzIHJlbW92ZSB1bnRyYWNrZWQgdW5pZ25vcmVkIGZpbGUgd2l0aCBzYW1lIG5hbWUgd2hlbiBmb3JjZWQiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBub19zdWJtb2R1bGUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCBhZGRfc3ViMSBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCT5zdWIxICYmCisJCQkkY29tbWFuZCBhZGRfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEKKwkJKQorCScKKwkjIFJlcGxhY2luZyBhIHRyYWNrZWQgZmlsZSB3aXRoIGEgc3VibW9kdWxlIHByb2R1Y2VzIGFuIGVtcHR5CisJIyBkaXJlY3RvcnkgLi4uCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHJlcGxhY2UgdHJhY2tlZCBmaWxlIHdpdGggc3VibW9kdWxlIGNyZWF0ZXMgZW1wdHkgZGlyZWN0b3J5IiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlcGxhY2VfZmlsZV93aXRoX3N1YjEgb3JpZ2luL3JlcGxhY2VfZmlsZV93aXRoX3N1YjEgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2VfZmlsZV93aXRoX3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL3JlcGxhY2VfZmlsZV93aXRoX3N1YjEgJiYKKwkJCXRlc3RfZGlyX2lzX2VtcHR5IHN1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9yZXBsYWNlX2ZpbGVfd2l0aF9zdWIxCisJCSkKKwknCisJIyAuLi4gYXMgZG9lcyByZW1vdmluZyBhIGRpcmVjdG9yeSB3aXRoIHRyYWNrZWQgZmlsZXMgd2l0aCBhCisJIyBzdWJtb2R1bGUuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IHJlcGxhY2UgZGlyZWN0b3J5IHdpdGggc3VibW9kdWxlIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5ICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxIG9yaWdpbi9yZXBsYWNlX2RpcmVjdG9yeV93aXRoX3N1YjEgJiYKKwkJCSRjb21tYW5kIHJlcGxhY2VfZGlyZWN0b3J5X3dpdGhfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxICYmCisJCQl0ZXN0X2Rpcl9pc19lbXB0eSBzdWIxICYmCisJCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vcmVwbGFjZV9kaXJlY3Rvcnlfd2l0aF9zdWIxCisJCSkKKwknCisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRGlzYXBwZWFyaW5nIHN1Ym1vZHVsZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgUmVtb3ZpbmcgYSBzdWJtb2R1bGUgZG9lc24ndCByZW1vdmUgaXRzIHdvcmsgdHJlZSAuLi4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogcmVtb3ZlZCBzdWJtb2R1bGUgbGVhdmVzIHN1Ym1vZHVsZSBkaXJlY3RvcnkgYW5kIGl0cyBjb250ZW50cyBpbiBwbGFjZSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVtb3ZlX3N1YjEgb3JpZ2luL3JlbW92ZV9zdWIxICYmCisJCQkkY29tbWFuZCByZW1vdmVfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVtb3ZlX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIC4uLiBlc3BlY2lhbGx5IHdoZW4gaXQgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeS4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogcmVtb3ZlZCBzdWJtb2R1bGUgbGVhdmVzIHN1Ym1vZHVsZSBjb250YWluaW5nIGEgLmdpdCBkaXJlY3RvcnkgYWxvbmUiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlbW92ZV9zdWIxIG9yaWdpbi9yZW1vdmVfc3ViMSAmJgorCQkJcmVwbGFjZV9naXRmaWxlX3dpdGhfZ2l0X2RpciBzdWIxICYmCisJCQkkY29tbWFuZCByZW1vdmVfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vcmVtb3ZlX3N1YjEgJiYKKwkJCXRlc3RfZ2l0X2RpcmVjdG9yeV9pc191bmNoYW5nZWQgc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMQorCQkpCisJJworCSMgUmVwbGFjaW5nIGEgc3VibW9kdWxlIHdpdGggZmlsZXMgaW4gYSBkaXJlY3RvcnkgbXVzdCBmYWlsIGFzIHRoZQorCSMgc3VibW9kdWxlIHdvcmsgdHJlZSBpc24ndCByZW1vdmVkIC4uLgorCXRlc3RfZXhwZWN0X2ZhaWx1cmUgIiRjb21tYW5kOiByZXBsYWNlIHN1Ym1vZHVsZSB3aXRoIGEgZGlyZWN0b3J5IG11c3QgZmFpbCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZGlyZWN0b3J5IG9yaWdpbi9yZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXRlc3RfbXVzdF9mYWlsICRjb21tYW5kIHJlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIC4uLiBlc3BlY2lhbGx5IHdoZW4gaXQgY29udGFpbnMgYSAuZ2l0IGRpcmVjdG9yeS4KKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgY29udGFpbmluZyBhIC5naXQgZGlyZWN0b3J5IHdpdGggYSBkaXJlY3RvcnkgbXVzdCBmYWlsIiAnCisJCXByb2xvZyAmJgorCQlyZXNldF93b3JrX3RyZWVfdG8gYWRkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCByZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3Rvcnkgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2RpcmVjdG9yeSAmJgorCQkJcmVwbGFjZV9naXRmaWxlX3dpdGhfZ2l0X2RpciBzdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCByZXBsYWNlX3N1YjFfd2l0aF9kaXJlY3RvcnkgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X2dpdF9kaXJlY3RvcnlfaXNfdW5jaGFuZ2VkIHN1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIFJlcGxhY2luZyBpdCB3aXRoIGEgZmlsZSBtdXN0IGZhaWwgYXMgaXQgY291bGQgdGhyb3cgYXdheSBhbnkgbG9jYWwKKwkjIHdvcmsgdHJlZSBjaGFuZ2VzIC4uLgorCXRlc3RfZXhwZWN0X2ZhaWx1cmUgIiRjb21tYW5kOiByZXBsYWNlIHN1Ym1vZHVsZSB3aXRoIGEgZmlsZSBtdXN0IGZhaWwiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgb3JpZ2luL3JlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJCXRlc3RfbXVzdF9mYWlsICRjb21tYW5kIHJlcGxhY2Vfc3ViMV93aXRoX2ZpbGUgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2FkZF9zdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCisJIyAuLi4gb3IgZXZlbiBkZXN0cm95IHVucHVzaGVkIHBhcnRzIG9mIHN1Ym1vZHVsZSBoaXN0b3J5IGlmIHRoYXQKKwkjIHN0aWxsIHVzZXMgYSAuZ2l0IGRpcmVjdG9yeS4KKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICIkY29tbWFuZDogcmVwbGFjZSBzdWJtb2R1bGUgY29udGFpbmluZyBhIC5naXQgZGlyZWN0b3J5IHdpdGggYSBmaWxlIG11c3QgZmFpbCIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSBvcmlnaW4vcmVwbGFjZV9zdWIxX3dpdGhfZmlsZSAmJgorCQkJcmVwbGFjZV9naXRmaWxlX3dpdGhfZ2l0X2RpciBzdWIxICYmCisJCQl0ZXN0X211c3RfZmFpbCAkY29tbWFuZCByZXBsYWNlX3N1YjFfd2l0aF9maWxlICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9naXRfZGlyZWN0b3J5X2lzX3VuY2hhbmdlZCBzdWIxICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL2FkZF9zdWIxCisJCSkKKwknCisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBNb2RpZmllZCBzdWJtb2R1bGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVXBkYXRpbmcgYSBzdWJtb2R1bGUgc2hhMSBkb2Vzbid0IHVwZGF0ZSB0aGUgc3VibW9kdWxlJ3Mgd29yayB0cmVlCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNvbW1hbmQ6IG1vZGlmaWVkIHN1Ym1vZHVsZSBkb2VzIG5vdCB1cGRhdGUgc3VibW9kdWxlIHdvcmsgdHJlZSIgJworCQlwcm9sb2cgJiYKKwkJcmVzZXRfd29ya190cmVlX3RvIGFkZF9zdWIxICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZV91cGRhdGUgJiYKKwkJCWdpdCBicmFuY2ggLXQgbW9kaWZ5X3N1YjEgb3JpZ2luL21vZGlmeV9zdWIxICYmCisJCQkkY29tbWFuZCBtb2RpZnlfc3ViMSAmJgorCQkJdGVzdF9zdXBlcnByb2plY3RfY29udGVudCBvcmlnaW4vbW9kaWZ5X3N1YjEgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEgJiYKKwkJCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJCQl0ZXN0X3N1Ym1vZHVsZV9jb250ZW50IHN1YjEgb3JpZ2luL21vZGlmeV9zdWIxCisJCSkKKwknCisJIyBVcGRhdGluZyBhIHN1Ym1vZHVsZSB0byBhbiBpbnZhbGlkIHNoYTEgZG9lc24ndCB1cGRhdGUgdGhlCisJIyBzdWJtb2R1bGUncyB3b3JrIHRyZWUsIHN1YnNlcXVlbnQgdXBkYXRlIHdpbGwgZmFpbAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjb21tYW5kOiBtb2RpZmllZCBzdWJtb2R1bGUgZG9lcyBub3QgdXBkYXRlIHN1Ym1vZHVsZSB3b3JrIHRyZWUgdG8gaW52YWxpZCBjb21taXQiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBhZGRfc3ViMSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGVfdXBkYXRlICYmCisJCQlnaXQgYnJhbmNoIC10IGludmFsaWRfc3ViMSBvcmlnaW4vaW52YWxpZF9zdWIxICYmCisJCQkkY29tbWFuZCBpbnZhbGlkX3N1YjEgJiYKKwkJCXRlc3Rfc3VwZXJwcm9qZWN0X2NvbnRlbnQgb3JpZ2luL2ludmFsaWRfc3ViMSAmJgorCQkJdGVzdF9zdWJtb2R1bGVfY29udGVudCBzdWIxIG9yaWdpbi9hZGRfc3ViMSAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vYWRkX3N1YjEKKwkJKQorCScKKwkjIFVwZGF0aW5nIGEgc3VibW9kdWxlIGZyb20gYW4gaW52YWxpZCBzaGExIGRvZXNuJ3QgdXBkYXRlIHRoZQorCSMgc3VibW9kdWxlJ3Mgd29yayB0cmVlLCBzdWJzZXF1ZW50IHVwZGF0ZSB3aWxsIHN1Y2NlZWQKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY29tbWFuZDogbW9kaWZpZWQgc3VibW9kdWxlIGRvZXMgbm90IHVwZGF0ZSBzdWJtb2R1bGUgd29yayB0cmVlIGZyb20gaW52YWxpZCBjb21taXQiICcKKwkJcHJvbG9nICYmCisJCXJlc2V0X3dvcmtfdHJlZV90byBpbnZhbGlkX3N1YjEgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlX3VwZGF0ZSAmJgorCQkJZ2l0IGJyYW5jaCAtdCB2YWxpZF9zdWIxIG9yaWdpbi92YWxpZF9zdWIxICYmCisJCQkkY29tbWFuZCB2YWxpZF9zdWIxICYmCisJCQl0ZXN0X3N1cGVycHJvamVjdF9jb250ZW50IG9yaWdpbi92YWxpZF9zdWIxICYmCisJCQl0ZXN0X2Rpcl9pc19lbXB0eSBzdWIxICYmCisJCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgJiYKKwkJCXRlc3Rfc3VibW9kdWxlX2NvbnRlbnQgc3ViMSBvcmlnaW4vdmFsaWRfc3ViMQorCQkpCisJJworfQpkaWZmIC0tZ2l0IGEvdC9saWItdDYwMDAuc2ggYi90L2xpYi10NjAwMC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjJkODczCi0tLSAvZGV2L251bGwKKysrIGIvdC9saWItdDYwMDAuc2gKQEAgLTAsMCArMSwxMzcgQEAKKzogaW5jbHVkZWQgZnJvbSA2MDAyIGFuZCBvdGhlcnMKKworbWtkaXIgLXAgLmdpdC9yZWZzL3RhZ3MKKworPnNlZC5zY3JpcHQKKworIyBBbnN3ZXIgdGhlIHNoYTEgaGFzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFnLiBUaGUgdGFnIG11c3QgZXhpc3QgaW4gLmdpdC9yZWZzL3RhZ3MKK3RhZyAoKSB7CisJX3RhZz0kMQorCXRlc3QgLWYgIi5naXQvcmVmcy90YWdzLyRfdGFnIiB8fCBlcnJvciAidGFnOiBcIiRfdGFnXCIgZG9lcyBub3QgZXhpc3QiCisJY2F0ICIuZ2l0L3JlZnMvdGFncy8kX3RhZyIKK30KKworIyBHZW5lcmF0ZSBhIGNvbW1pdCB1c2luZyB0aGUgdGV4dCBzcGVjaWZpZWQgdG8gbWFrZSBpdCB1bmlxdWUgYW5kIHRoZSB0cmVlCisjIG5hbWVkIGJ5IHRoZSB0YWcgc3BlY2lmaWVkLgordW5pcXVlX2NvbW1pdCAoKSB7CisJX3RleHQ9JDEKKwlfdHJlZT0kMgorCXNoaWZ0IDIKKwllY2hvICIkX3RleHQiIHwgZ2l0IGNvbW1pdC10cmVlICQodGFnICIkX3RyZWUiKSAiJEAiCit9CisKKyMgU2F2ZSB0aGUgb3V0cHV0IG9mIGEgY29tbWFuZCBpbnRvIHRoZSB0YWcgc3BlY2lmaWVkLiBQcmVwZW5kCisjIGEgc3Vic3RpdHV0aW9uIHNjcmlwdCBmb3IgdGhlIHRhZyBvbnRvIHRoZSBmcm9udCBvZiBzZWQuc2NyaXB0CitzYXZlX3RhZyAoKSB7CisJX3RhZz0kMQorCXRlc3QgLW4gIiRfdGFnIiB8fCBlcnJvciAidXNhZ2U6IHNhdmVfdGFnIHRhZyBjb21taXQtYXJncyAuLi4iCisJc2hpZnQgMQorCSIkQCIgPiIuZ2l0L3JlZnMvdGFncy8kX3RhZyIKKworCWVjaG8gInMvJCh0YWcgJF90YWcpLyRfdGFnL2ciID5zZWQuc2NyaXB0LnRtcAorCWNhdCBzZWQuc2NyaXB0ID4+c2VkLnNjcmlwdC50bXAKKwlybSBzZWQuc2NyaXB0CisJbXYgc2VkLnNjcmlwdC50bXAgc2VkLnNjcmlwdAorfQorCisjIFJlcGxhY2UgdW5oZWxwZnVsIHNoYTEgaGFzaGVzIHdpdGggdGhlaXIgc3ltYm9saWMgZXF1aXZhbGVudHMKK2VudGFnICgpIHsKKwlzZWQgLWYgc2VkLnNjcmlwdAorfQorCisjIEV4ZWN1dGUgYSBjb21tYW5kIGFmdGVyIGZpcnN0IHNhdmluZywgdGhlbiBzZXR0aW5nIHRoZSBHSVRfQVVUSE9SX0VNQUlMCisjIHRhZyB0byBhIHNwZWNpZmllZCB2YWx1ZS4gUmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgb24gcmV0dXJuLgorYXNfYXV0aG9yICgpIHsKKwlfYXV0aG9yPSQxCisJc2hpZnQgMQorCV9zYXZlPSRHSVRfQVVUSE9SX0VNQUlMCisKKwlHSVRfQVVUSE9SX0VNQUlMPSIkX2F1dGhvciIKKwlleHBvcnQgR0lUX0FVVEhPUl9FTUFJTAorCSIkQCIKKwlpZiB0ZXN0IC16ICIkX3NhdmUiCisJdGhlbgorCQl1bnNldCBHSVRfQVVUSE9SX0VNQUlMCisJZWxzZQorCQlHSVRfQVVUSE9SX0VNQUlMPSIkX3NhdmUiCisJCWV4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCisJZmkKK30KKworY29tbWl0X2RhdGUgKCkgeworCV9jb21taXQ9JDEKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICRfY29tbWl0IHwKKwlzZWQgLW4gInMvXmNvbW1pdHRlciAuKj4gXChbMC05XSpcKSAuKi9cMS9wIgorfQorCisjIEFzc2lnbiB0aGUgdmFsdWUgb2YgZmFrZSBkYXRlIHRvIGEgdmFyaWFibGUsIGJ1dAorIyBhbGxvdyBmYWlybHkgY29tbW9uICIxOTcxLTA4LTE2IDAwOjAwIiB0byBiZSBvbWl0dGQKK2Fzc2lnbl9mYWtlX2RhdGUgKCkgeworCWNhc2UgIiQyIiBpbgorCT8/Oj8/Oj8/KQlldmFsICIkMT0nMTk3MS0wOC0xNiAkMiciIDs7CisJPz86Pz8pCQlldmFsICIkMT0nMTk3MS0wOC0xNiAwMDokMiciIDs7CisJPz8pCQlldmFsICIkMT0nMTk3MS0wOC0xNiAwMDowMDokMiciIDs7CisJKikJCWV2YWwgIiQxPSckMiciIDs7CisJZXNhYworfQorCitvbl9jb21taXR0ZXJfZGF0ZSAoKSB7CisJYXNzaWduX2Zha2VfZGF0ZSBHSVRfQ09NTUlUVEVSX0RBVEUgIiQxIgorCWV4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEUKKwlzaGlmdCAxCisJIiRAIgorfQorCitvbl9kYXRlcyAoKSB7CisJYXNzaWduX2Zha2VfZGF0ZSBHSVRfQ09NTUlUVEVSX0RBVEUgIiQxIgorCWFzc2lnbl9mYWtlX2RhdGUgR0lUX0FVVEhPUl9EQVRFICIkMiIKKwlleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFIEdJVF9BVVRIT1JfREFURQorCXNoaWZ0IDIKKwkiJEAiCit9CisKKyMgRXhlY3V0ZSBhIGNvbW1hbmQgYW5kIHN1cHByZXNzIGFueSBlcnJvciBvdXRwdXQuCitoaWRlX2Vycm9yICgpIHsKKwkiJEAiIDI+L2Rldi9udWxsCit9CisKK2NoZWNrX291dHB1dCAoKSB7CisJX25hbWU9JDEKKwlzaGlmdCAxCisJaWYgZXZhbCAiJCoiIHwgZW50YWcgPiIkX25hbWUuYWN0dWFsIgorCXRoZW4KKwkJdGVzdF9jbXAgIiRfbmFtZS5leHBlY3RlZCIgIiRfbmFtZS5hY3R1YWwiCisJZWxzZQorCQlyZXR1cm4gMQorCWZpCit9CisKKyMgVHVybiBhIHJlYXNvbmFibGUgdGVzdCBkZXNjcmlwdGlvbiBpbnRvIGEgcmVhc29uYWJsZSB0ZXN0IG5hbWUuCisjIEFsbCBhbHBoYW51bXMgdHJhbnNsYXRlZCBpbnRvIC0ncyB3aGljaCBhcmUgdGhlbiBjb21wcmVzc2VkIGFuZCBzdHJpcHBlZAorIyBmcm9tIGZyb250IGFuZCBiYWNrLgorbmFtZV9mcm9tX2Rlc2NyaXB0aW9uICgpIHsKKwlwZXJsIC1wZSAnCisJCXMvW15BLVphLXowLTkuXS8tL2c7CisJCXMvLSsvLS9nOworCQlzLy0kLy87CisJCXMvXi0vLzsKKwkJeS9BLVovYS16LzsKKwknCit9CisKKworIyBFeGVjdXRlIHRoZSB0ZXN0IGRlc2NyaWJlZCBieSB0aGUgZmlyc3QgYXJndW1lbnQsIGJ5IGV2YWwnaW5nCisjIGNvbW1hbmQgbGluZSBzcGVjaWZpZWQgaW4gdGhlIDJuZCBhcmd1bWVudC4gQ2hlY2sgdGhlIHN0YXR1cyBjb2RlCisjIGlzIHplcm8gYW5kIHRoYXQgdGhlIG91dHB1dCBtYXRjaGVzIHRoZSBzdHJlYW0gcmVhZCBmcm9tCisjIHN0ZGluLgordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MoKQoreworCV9kZXNjcmlwdGlvbj0kMQorCV90ZXN0PSQyCisJdGVzdCAkIyAtZXEgMiB8fAorCWVycm9yICJ1c2FnZTogdGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgZGVzY3JpcHRpb24gdGVzdCA8PEVPRiAuLi4gRU9GIgorCisJX25hbWU9JChlY2hvICRfZGVzY3JpcHRpb24gfCBuYW1lX2Zyb21fZGVzY3JpcHRpb24pCisJY2F0ID4iJF9uYW1lLmV4cGVjdGVkIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRfZGVzY3JpcHRpb24iICJjaGVja19vdXRwdXQgJF9uYW1lIFwiJF90ZXN0XCIiCit9CmRpZmYgLS1naXQgYS90L2xpYi10ZXJtaW5hbC5zaCBiL3QvbGliLXRlcm1pbmFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMjIwZTMKLS0tIC9kZXYvbnVsbAorKysgYi90L2xpYi10ZXJtaW5hbC5zaApAQCAtMCwwICsxLDM2IEBACisjIEhlbHBlcnMgZm9yIHRlcm1pbmFsIG91dHB1dCB0ZXN0cy4KKworIyBDYXRjaCB0ZXN0cyB3aGljaCBzaG91bGQgZGVwZW5kIG9uIFRUWSBidXQgZm9yZ290IHRvLiBUaGVyZSdzIG5vIG5lZWQKKyMgdG8gYWRkaXRpb25hbGx5IGNoZWNrIHRoYXQgdGhlIFRUWSBwcmVyZXEgaXMgc2V0IGhlcmUuICBJZiB0aGUgdGVzdCBkZWNsYXJlZAorIyBpdCBhbmQgd2UgYXJlIHJ1bm5pbmcgdGhlIHRlc3QsIHRoZW4gaXQgbXVzdCBoYXZlIGJlZW4gc2V0LgordGVzdF90ZXJtaW5hbCAoKSB7CisJaWYgISB0ZXN0X2RlY2xhcmVkX3ByZXJlcSBUVFkKKwl0aGVuCisJCWVjaG8gPiY0ICJ0ZXN0X3Rlcm1pbmFsOiBuZWVkIHRvIGRlY2xhcmUgVFRZIHByZXJlcXVpc2l0ZSIKKwkJcmV0dXJuIDEyNworCWZpCisJcGVybCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LXRlcm1pbmFsLnBlcmwgIiRAIgorfQorCit0ZXN0X2xhenlfcHJlcmVxIFRUWSAnCisJdGVzdF9oYXZlX3ByZXJlcSBQRVJMICYmCisKKwkjIFJlYWRpbmcgZnJvbSB0aGUgcHR5IG1hc3RlciBzZWVtcyB0byBnZXQgc3R1Y2sgX3NvbWV0aW1lc18KKwkjIG9uIE1hYyBPUyBYIDEwLjUuMCwgdXNpbmcgUGVybCA1LjEwLjAgb3IgNS44LjkuCisJIworCSMgUmVwcm9kdWN0aW9uIHJlY2lwZTogcnVuCisJIworCSMJaT0wCisJIwl3aGlsZSAuL3Rlc3QtdGVybWluYWwucGVybCBlY2hvIGhpICRpCisJIwlkbworCSMJCTogJCgoaSA9ICRpICsgMSkpCisJIwlkb25lCisJIworCSMgQWZ0ZXIgMjAwMCBpdGVyYXRpb25zIG9yIHNvIGl0IGhhbmdzLgorCSMgaHR0cHM6Ly9ydC5jcGFuLm9yZy9UaWNrZXQvRGlzcGxheS5odG1sP2lkPTY1NjkyCisJIworCXRlc3QgIiQodW5hbWUgLXMpIiAhPSBEYXJ3aW4gJiYKKworCXBlcmwgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC10ZXJtaW5hbC5wZXJsIFwKKwkJc2ggLWMgInRlc3QgLXQgMSAmJiB0ZXN0IC10IDIiCisnCmRpZmYgLS1naXQgYS90L3BlcmYvLmdpdGlnbm9yZSBiL3QvcGVyZi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MmViOGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKKy9idWlsZC8KKy90ZXN0LXJlc3VsdHMvCisvdHJhc2ggZGlyZWN0b3J5Ki8KZGlmZiAtLWdpdCBhL3QvcGVyZi9NYWtlZmlsZSBiL3QvcGVyZi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzQ3MTU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL01ha2VmaWxlCkBAIC0wLDAgKzEsMTUgQEAKKy1pbmNsdWRlIC4uLy4uL2NvbmZpZy5tYWsKK2V4cG9ydCBHSVRfVEVTVF9PUFRJT05TCisKK2FsbDogcGVyZgorCitwZXJmOiBwcmUtY2xlYW4KKwkuL3J1bgorCitwcmUtY2xlYW46CisJcm0gLXJmIHRlc3QtcmVzdWx0cworCitjbGVhbjoKKwlybSAtcmYgYnVpbGQgInRyYXNoIGRpcmVjdG9yeSIuKiB0ZXN0LXJlc3VsdHMKKworLlBIT05ZOiBhbGwgcGVyZiBwcmUtY2xlYW4gY2xlYW4KZGlmZiAtLWdpdCBhL3QvcGVyZi9SRUFETUUgYi90L3BlcmYvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NDhjMTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvUkVBRE1FCkBAIC0wLDAgKzEsMTQ2IEBACitHaXQgcGVyZm9ybWFuY2UgdGVzdHMKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRpcmVjdG9yeSBob2xkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nIHNjcmlwdHMgZm9yIGdpdCB0b29scy4gIFRoZQorZmlyc3QgcGFydCBvZiB0aGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgdmFyaW91cyB3YXlzIGluIHdoaWNoIHlvdQorY2FuIHJ1biB0aGVtLgorCitXaGVuIGZpeGluZyB0aGUgdG9vbHMgb3IgYWRkaW5nIGVuaGFuY2VtZW50cywgeW91IGFyZSBzdHJvbmdseQorZW5jb3VyYWdlZCB0byBhZGQgdGVzdHMgaW4gdGhpcyBkaXJlY3RvcnkgdG8gY292ZXIgd2hhdCB5b3UgYXJlCit0cnlpbmcgdG8gZml4IG9yIGVuaGFuY2UuICBUaGUgbGF0ZXIgcGFydCBvZiB0aGlzIHNob3J0IGRvY3VtZW50CitkZXNjcmliZXMgaG93IHlvdXIgdGVzdCBzY3JpcHRzIHNob3VsZCBiZSBvcmdhbml6ZWQuCisKKworUnVubmluZyBUZXN0cworLS0tLS0tLS0tLS0tLQorCitUaGUgZWFzaWVzdCB3YXkgdG8gcnVuIHRlc3RzIGlzIHRvIHNheSAibWFrZSIuICBUaGlzIHJ1bnMgYWxsCit0aGUgdGVzdHMgb24gdGhlIGN1cnJlbnQgZ2l0IHJlcG9zaXRvcnkuCisKKyAgICA9PT0gUnVubmluZyAyIHRlc3RzIGluIHRoaXMgdHJlZSA9PT0KKyAgICBbLi4uXQorICAgIFRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB0cmVlCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgMDAwMS4xOiByZXYtbGlzdCAtLWFsbCAgICAgICAgICAgICAgICAgICAwLjU0KDAuNTErMC4wMikKKyAgICAwMDAxLjI6IHJldi1saXN0IC0tYWxsIC0tb2JqZWN0cyAgICAgICAgIDYuMTQoNS45OSswLjExKQorICAgIDc4MTAuMTogZ3JlcCB3b3JrdHJlZSwgY2hlYXAgcmVnZXggICAgICAgMC4xNigwLjE2KzAuMzUpCisgICAgNzgxMC4yOiBncmVwIHdvcmt0cmVlLCBleHBlbnNpdmUgcmVnZXggICA3LjkwKDI5Ljc1KzAuMzcpCisgICAgNzgxMC4zOiBncmVwIC0tY2FjaGVkLCBjaGVhcCByZWdleCAgICAgICAzLjA3KDMuMDIrMC4yNSkKKyAgICA3ODEwLjQ6IGdyZXAgLS1jYWNoZWQsIGV4cGVuc2l2ZSByZWdleCAgIDkuMzkoMzAuNTcrMC4yNCkKKworWW91IGNhbiBjb21wYXJlIG11bHRpcGxlIHJlcG9zaXRvcmllcyBhbmQgZXZlbiBnaXQgcmV2aXNpb25zIHdpdGggdGhlCisncnVuJyBzY3JpcHQ6CisKKyAgICAkIC4vcnVuIC4gb3JpZ2luL25leHQgL3BhdGgvdG8vZ2l0LXRyZWUgcDAwMDEtcmV2LWxpc3Quc2gKKword2hlcmUgLiBzdGFuZHMgZm9yIHRoZSBjdXJyZW50IGdpdCB0cmVlLiAgVGhlIGZ1bGwgaW52b2NhdGlvbiBpcworCisgICAgLi9ydW4gWzxyZXZpc2lvbnxkaXJlY3Rvcnk+Li4uXSBbLS1dIFs8dGVzdC1zY3JpcHQ+Li4uXQorCitBICcuJyBhcmd1bWVudCBpcyBpbXBsaWVkIGlmIHlvdSBkbyBub3QgcGFzcyBhbnkgb3RoZXIKK3JldmlzaW9ucy9kaXJlY3Rvcmllcy4KKworWW91IGNhbiBhbHNvIG1hbnVhbGx5IHRlc3QgdGhpcyBvciBhbm90aGVyIGdpdCBidWlsZCB0cmVlLCBhbmQgdGhlbgorY2FsbCB0aGUgYWdncmVnYXRpb24gc2NyaXB0IHRvIHN1bW1hcml6ZSB0aGUgcmVzdWx0czoKKworICAgICQgLi9wMDAwMS1yZXYtbGlzdC5zaAorICAgIFsuLi5dCisgICAgJCBHSVRfQlVJTERfRElSPS9wYXRoL3RvL290aGVyL2dpdCAuL3AwMDAxLXJldi1saXN0LnNoCisgICAgWy4uLl0KKyAgICAkIC4vYWdncmVnYXRlLnBlcmwgLiAvcGF0aC90by9vdGhlci9naXQgLi9wMDAwMS1yZXYtbGlzdC5zaAorCithZ2dyZWdhdGUucGVybCBoYXMgdGhlIHNhbWUgaW52b2NhdGlvbiBhcyAncnVuJywgaXQganVzdCBkb2VzIG5vdCBydW4KK2FueXRoaW5nIGJlZm9yZWhhbmQuCisKK1lvdSBjYW4gc2V0IHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIChhbHNvIGluIHlvdXIgY29uZmlnLm1hayk6CisKKyAgICBHSVRfUEVSRl9SRVBFQVRfQ09VTlQKKwlOdW1iZXIgb2YgdGltZXMgYSB0ZXN0IHNob3VsZCBiZSByZXBlYXRlZCBmb3IgYmVzdC1vZi1OCisJbWVhc3VyZW1lbnRzLiAgRGVmYXVsdHMgdG8gMy4KKworICAgIEdJVF9QRVJGX01BS0VfT1BUUworCU9wdGlvbnMgdG8gdXNlIHdoZW4gYXV0b21hdGljYWxseSBidWlsZGluZyBhIGdpdCB0cmVlIGZvcgorCXBlcmZvcm1hbmNlIHRlc3RpbmcuICBFLmcuLCAtajYgd291bGQgYmUgdXNlZnVsLgorCisgICAgR0lUX1BFUkZfUkVQTworICAgIEdJVF9QRVJGX0xBUkdFX1JFUE8KKwlSZXBvc2l0b3JpZXMgdG8gY29weSBmb3IgdGhlIHBlcmZvcm1hbmNlIHRlc3RzLiAgVGhlIG5vcm1hbAorCXJlcG8gc2hvdWxkIGJlIGF0IGxlYXN0IGdpdC5naXQgc2l6ZS4gIFRoZSBsYXJnZSByZXBvIHNob3VsZAorCXByb2JhYmx5IGJlIGFib3V0IGxpbnV4LmdpdCBzaXplIGZvciBvcHRpbWFsIHJlc3VsdHMuCisJQm90aCBkZWZhdWx0IHRvIHRoZSBnaXQuZ2l0IHlvdSBhcmUgcnVubmluZyBmcm9tLgorCitZb3UgY2FuIGFsc28gcGFzcyB0aGUgb3B0aW9ucyB0YWtlbiBieSBvcmRpbmFyeSBnaXQgdGVzdHM7IHRoZSBtb3N0Cit1c2VmdWwgb25lIGlzOgorCistLXJvb3Q9PGRpcmVjdG9yeT46OgorCUNyZWF0ZSAidHJhc2giIGRpcmVjdG9yaWVzIHVzZWQgdG8gc3RvcmUgYWxsIHRlbXBvcmFyeSBkYXRhIGR1cmluZworCXRlc3RpbmcgdW5kZXIgPGRpcmVjdG9yeT4sIGluc3RlYWQgb2YgdGhlIHQvIGRpcmVjdG9yeS4KKwlVc2luZyB0aGlzIG9wdGlvbiB3aXRoIGEgUkFNLWJhc2VkIGZpbGVzeXN0ZW0gKHN1Y2ggYXMgdG1wZnMpCisJY2FuIG1hc3NpdmVseSBzcGVlZCB1cCB0aGUgdGVzdCBzdWl0ZS4KKworCitOYW1pbmcgVGVzdHMKKy0tLS0tLS0tLS0tLQorCitUaGUgcGVyZm9ybWFuY2UgdGVzdCBmaWxlcyBhcmUgbmFtZWQgYXM6CisKKwlwTk5OTi1jb21tYW5kbmFtZS1kZXRhaWxzLnNoCisKK3doZXJlIE4gaXMgYSBkZWNpbWFsIGRpZ2l0LiAgVGhlIHNhbWUgY29udmVudGlvbnMgZm9yIGNob29zaW5nIE5OTk4gYXMKK2ZvciBub3JtYWwgdGVzdHMgYXBwbHkuCisKKworV3JpdGluZyBUZXN0cworLS0tLS0tLS0tLS0tLQorCitUaGUgcGVyZiBzY3JpcHQgc3RhcnRzIG11Y2ggbGlrZSBhIG5vcm1hbCB0ZXN0IHNjcmlwdCwgZXhjZXB0IGl0Citzb3VyY2VzIHBlcmYtbGliLnNoOgorCisJIyEvYmluL3NoCisJIworCSMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisJIworCisJdGVzdF9kZXNjcmlwdGlvbj0neHh4IHBlcmZvcm1hbmNlIHRlc3QnCisJLiAuL3BlcmYtbGliLnNoCisKK0FmdGVyIHRoYXQgeW91IHdpbGwgd2FudCB0byB1c2Ugc29tZSBvZiB0aGUgZm9sbG93aW5nOgorCisJdGVzdF9wZXJmX2RlZmF1bHRfcmVwbyAgIyBzZXRzIHVwIGEgIm5vcm1hbCIgcmVwb3NpdG9yeQorCXRlc3RfcGVyZl9sYXJnZV9yZXBvICAgICMgc2V0cyB1cCBhICJsYXJnZSIgcmVwb3NpdG9yeQorCisJdGVzdF9wZXJmX2RlZmF1bHRfcmVwbyBzdWIgICMgZGl0dG8sIGluIGEgc3ViZGlyICJzdWIiCisKKyAgICAgICAgdGVzdF9jaGVja291dF93b3JrdHJlZSAgIyBpZiB5b3UgbmVlZCB0aGUgd29ya3RyZWUgdG9vCisKK0F0IGxlYXN0IG9uZSBvZiB0aGUgZmlyc3QgdHdvIGlzIHJlcXVpcmVkIQorCitZb3UgY2FuIHVzZSB0ZXN0X2V4cGVjdF9zdWNjZXNzIGFzIHVzdWFsLiAgRm9yIGFjdHVhbCBwZXJmb3JtYW5jZQordGVzdHMsIHVzZQorCisJdGVzdF9wZXJmICdkZXNjcmlwdGl2ZSBzdHJpbmcnICcKKwkJY29tbWFuZDEgJiYKKwkJY29tbWFuZDIKKwknCisKK3Rlc3RfcGVyZiBzcGF3bnMgYSBzdWJzaGVsbCwgZm9yIGxhY2sgb2YgYmV0dGVyIG9wdGlvbnMuICBUaGlzIG1lYW5zCit0aGF0CisKKyogeW91IF9tdXN0XyBleHBvcnQgYWxsIHZhcmlhYmxlcyB0aGF0IHlvdSBuZWVkIGluIHRoZSBzdWJzaGVsbAorCisqIHlvdSBfbXVzdF8gZmxhZyBhbGwgdmFyaWFibGVzIHRoYXQgeW91IHdhbnQgdG8gcGVyc2lzdCBmcm9tIHRoZQorICBzdWJzaGVsbCB3aXRoICd0ZXN0X2V4cG9ydCc6CisKKwl0ZXN0X3BlcmYgJ2Rlc2NyaXB0aXZlIHN0cmluZycgJworCQlmb289JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCXRlc3RfZXhwb3J0IGZvbworCScKKworICBUaGUgc28tZXhwb3J0ZWQgdmFyaWFibGVzIGFyZSBhdXRvbWF0aWNhbGx5IG1hcmtlZCBmb3IgZXhwb3J0IGluIHRoZQorICBzaGVsbCBleGVjdXRpbmcgdGhlIHBlcmYgdGVzdC4gIEZvciB5b3VyIGNvbnZlbmllbmNlLCB0ZXN0X2V4cG9ydCBpcworICB0aGUgc2FtZSBhcyBleHBvcnQgaW4gdGhlIG1haW4gc2hlbGwuCisKKyAgVGhpcyBmZWF0dXJlIHJlbGllcyBvbiBhIGJpdCBvZiBtYWdpYyB1c2luZyAnc2V0JyBhbmQgJ3NvdXJjZScuCisgIFdoaWxlIHdlIGhhdmUgdHJpZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgY2FuIGNvcGUgd2l0aCBlbWJlZGRlZAorICB3aGl0ZXNwYWNlIGFuZCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsIGl0IHdpbGwgbm90IHdvcmsgd2l0aAorICBtdWx0aS1saW5lIGRhdGEuCmRpZmYgLS1naXQgYS90L3BlcmYvYWdncmVnYXRlLnBlcmwgYi90L3BlcmYvYWdncmVnYXRlLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTI0YjE5ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9hZ2dyZWdhdGUucGVybApAQCAtMCwwICsxLDE2NyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBsaWIgJy4uLy4uL3BlcmwvYmxpYi9saWInOwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBHaXQ7CisKK3N1YiBnZXRfdGltZXMgeworCW15ICRuYW1lID0gc2hpZnQ7CisJb3BlbiBteSAkZmgsICI8IiwgJG5hbWUgb3IgcmV0dXJuIHVuZGVmOworCW15ICRsaW5lID0gPCRmaD47CisJcmV0dXJuIHVuZGVmIGlmIG5vdCBkZWZpbmVkICRsaW5lOworCWNsb3NlICRmaCBvciBkaWUgImNhbm5vdCBjbG9zZSAkbmFtZTogJCEiOworCSRsaW5lID1+IC9eKD86KFxkKyk6KT8oXGQrKTooXGQrKD86XC5cZCspPykgKFxkKyg/OlwuXGQrKT8pIChcZCsoPzpcLlxkKyk/KSQvCisJCW9yIGRpZSAiYmFkIGlucHV0IGxpbmU6ICRsaW5lIjsKKwlteSAkcnQgPSAoKGRlZmluZWQgJDEgPyAkMSA6IDAuMCkqNjArJDIpKjYwKyQzOworCXJldHVybiAoJHJ0LCAkNCwgJDUpOworfQorCitzdWIgZm9ybWF0X3RpbWVzIHsKKwlteSAoJHIsICR1LCAkcywgJGZpcnN0cikgPSBAXzsKKwlpZiAoIWRlZmluZWQgJHIpIHsKKwkJcmV0dXJuICI8bWlzc2luZz4iOworCX0KKwlteSAkb3V0ID0gc3ByaW50ZiAiJS4yZiglLjJmKyUuMmYpIiwgJHIsICR1LCAkczsKKwlpZiAoZGVmaW5lZCAkZmlyc3RyKSB7CisJCWlmICgkZmlyc3RyID4gMCkgeworCQkJJG91dCAuPSBzcHJpbnRmICIgJSsuMWYlJSIsIDEwMC4wKigkci0kZmlyc3RyKS8kZmlyc3RyOworCQl9IGVsc2lmICgkciA9PSAwKSB7CisJCQkkb3V0IC49ICIgPSI7CisJCX0gZWxzZSB7CisJCQkkb3V0IC49ICIgK2luZiI7CisJCX0KKwl9CisJcmV0dXJuICRvdXQ7Cit9CisKK215IChAZGlycywgJWRpcm5hbWVzLCAlZGlyYWJicmV2cywgJXByZWZpeGVzLCBAdGVzdHMpOword2hpbGUgKHNjYWxhciBAQVJHVikgeworCW15ICRhcmcgPSAkQVJHVlswXTsKKwlteSAkZGlyOworCWxhc3QgaWYgLWYgJGFyZyBvciAkYXJnIGVxICItLSI7CisJaWYgKCEgLWQgJGFyZykgeworCQlteSAkcmV2ID0gR2l0Ojpjb21tYW5kX29uZWxpbmUocXcocmV2LXBhcnNlIC0tdmVyaWZ5KSwgJGFyZyk7CisJCSRkaXIgPSAiYnVpbGQvIi4kcmV2OworCX0gZWxzZSB7CisJCSRhcmcgPX4gc3svKiR9e307CisJCSRkaXIgPSAkYXJnOworCQkkZGlyYWJicmV2c3skZGlyfSA9ICRkaXI7CisJfQorCXB1c2ggQGRpcnMsICRkaXI7CisJJGRpcm5hbWVzeyRkaXJ9ID0gJGFyZzsKKwlteSAkcHJlZml4ID0gJGRpcjsKKwkkcHJlZml4ID1+IHRyL15hLXpBLVowLTkvXy9jOworCSRwcmVmaXhlc3skZGlyfSA9ICRwcmVmaXggLiAnLic7CisJc2hpZnQgQEFSR1Y7Cit9CisKK2lmIChub3QgQGRpcnMpIHsKKwlAZGlycyA9ICgnLicpOworfQorJGRpcm5hbWVzeycuJ30gPSAkZGlyYWJicmV2c3snLid9ID0gInRoaXMgdHJlZSI7CiskcHJlZml4ZXN7Jy4nfSA9ICcnOworCitzaGlmdCBAQVJHViBpZiBzY2FsYXIgQEFSR1YgYW5kICRBUkdWWzBdIGVxICItLSI7CisKK0B0ZXN0cyA9IEBBUkdWOworaWYgKG5vdCBAdGVzdHMpIHsKKwlAdGVzdHMgPSBnbG9iICJwPz8/Py0qLnNoIjsKK30KKworbXkgQHN1YnRlc3RzOworbXkgJXNob3J0dGVzdHM7Citmb3IgbXkgJHQgKEB0ZXN0cykgeworCSR0ID1+IHN7KD86LiovKT8ocChcZCspLVteL10rKVwuc2gkfXskMX0gb3IgZGllICJiYWQgdGVzdCBuYW1lOiAkdCI7CisJbXkgJG4gPSAkMjsKKwlteSAkZm5hbWUgPSAidGVzdC1yZXN1bHRzLyR0LnN1YnRlc3RzIjsKKwlvcGVuIG15ICRmcCwgIjwiLCAkZm5hbWUgb3IgZGllICJjYW5ub3Qgb3BlbiAkZm5hbWU6ICQhIjsKKwlmb3IgKDwkZnA+KSB7CisJCWNob21wOworCQkvXihcZCspJC8gb3IgZGllICJtYWxmb3JtZWQgc3VidGVzdCBsaW5lOiAkXyI7CisJCXB1c2ggQHN1YnRlc3RzLCAiJHQuJDEiOworCQkkc2hvcnR0ZXN0c3siJHQuJDEifSA9ICIkbi4kMSI7CisJfQorCWNsb3NlICRmcCBvciBkaWUgImNhbm5vdCBjbG9zZSAkZm5hbWU6ICQhIjsKK30KKworc3ViIHJlYWRfZGVzY3IgeworCW15ICRuYW1lID0gc2hpZnQ7CisJb3BlbiBteSAkZmgsICI8IiwgJG5hbWUgb3IgcmV0dXJuICI8ZXJyb3IgcmVhZGluZyBkZXNjcmlwdGlvbj4iOworCW15ICRsaW5lID0gPCRmaD47CisJY2xvc2UgJGZoIG9yIGRpZSAiY2Fubm90IGNsb3NlICRuYW1lIjsKKwljaG9tcCAkbGluZTsKKwlyZXR1cm4gJGxpbmU7Cit9CisKK215ICVkZXNjcnM7CitteSAkZGVzY3JsZW4gPSA0OyAjICJUZXN0IgorZm9yIG15ICR0IChAc3VidGVzdHMpIHsKKwkkZGVzY3JzeyR0fSA9ICRzaG9ydHRlc3RzeyR0fS4iOiAiLnJlYWRfZGVzY3IoInRlc3QtcmVzdWx0cy8kdC5kZXNjciIpOworCSRkZXNjcmxlbiA9IGxlbmd0aCAkZGVzY3JzeyR0fSBpZiBsZW5ndGggJGRlc2Nyc3skdH0+JGRlc2NybGVuOworfQorCitzdWIgaGF2ZV9kdXBsaWNhdGUgeworCW15ICVzZWVuOworCWZvciAoQF8pIHsKKwkJcmV0dXJuIDEgaWYgZXhpc3RzICRzZWVueyRffTsKKwkJJHNlZW57JF99ID0gMTsKKwl9CisJcmV0dXJuIDA7Cit9CitzdWIgaGF2ZV9zbGFzaCB7CisJZm9yIChAXykgeworCQlyZXR1cm4gMSBpZiBtey99OworCX0KKwlyZXR1cm4gMDsKK30KKworbXkgJW5ld2RpcmFiYnJldnMgPSAlZGlyYWJicmV2czsKK3doaWxlICghaGF2ZV9kdXBsaWNhdGUodmFsdWVzICVuZXdkaXJhYmJyZXZzKSkgeworCSVkaXJhYmJyZXZzID0gJW5ld2RpcmFiYnJldnM7CisJbGFzdCBpZiAhaGF2ZV9zbGFzaCh2YWx1ZXMgJWRpcmFiYnJldnMpOworCSVuZXdkaXJhYmJyZXZzID0gJWRpcmFiYnJldnM7CisJZm9yICh2YWx1ZXMgJW5ld2RpcmFiYnJldnMpIHsKKwkJc3teW14vXSovfXt9OworCX0KK30KKworbXkgJXRpbWVzOworbXkgQGNvbHdpZHRoID0gKCgwKXhAZGlycyk7Citmb3IgbXkgJGkgKDAuLiQjZGlycykgeworCW15ICRkID0gJGRpcnNbJGldOworCW15ICR3ID0gbGVuZ3RoIChleGlzdHMgJGRpcmFiYnJldnN7JGR9ID8gJGRpcmFiYnJldnN7JGR9IDogJGRpcm5hbWVzeyRkfSk7CisJJGNvbHdpZHRoWyRpXSA9ICR3IGlmICR3ID4gJGNvbHdpZHRoWyRpXTsKK30KK2ZvciBteSAkdCAoQHN1YnRlc3RzKSB7CisJbXkgJGZpcnN0cjsKKwlmb3IgbXkgJGkgKDAuLiQjZGlycykgeworCQlteSAkZCA9ICRkaXJzWyRpXTsKKwkJJHRpbWVzeyRwcmVmaXhlc3skZH0uJHR9ID0gW2dldF90aW1lcygidGVzdC1yZXN1bHRzLyRwcmVmaXhlc3skZH0kdC50aW1lcyIpXTsKKwkJbXkgKCRyLCR1LCRzKSA9IEB7JHRpbWVzeyRwcmVmaXhlc3skZH0uJHR9fTsKKwkJbXkgJHcgPSBsZW5ndGggZm9ybWF0X3RpbWVzKCRyLCR1LCRzLCRmaXJzdHIpOworCQkkY29sd2lkdGhbJGldID0gJHcgaWYgJHcgPiAkY29sd2lkdGhbJGldOworCQkkZmlyc3RyID0gJHIgdW5sZXNzIGRlZmluZWQgJGZpcnN0cjsKKwl9Cit9CitteSAkdG90YWx3aWR0aCA9IDMqQGRpcnMrJGRlc2NybGVuOworJHRvdGFsd2lkdGggKz0gJF8gZm9yIChAY29sd2lkdGgpOworCitwcmludGYgIiUtJHtkZXNjcmxlbn1zIiwgIlRlc3QiOworZm9yIG15ICRpICgwLi4kI2RpcnMpIHsKKwlteSAkZCA9ICRkaXJzWyRpXTsKKwlwcmludGYgIiAgICUtJGNvbHdpZHRoWyRpXXMiLCAoZXhpc3RzICRkaXJhYmJyZXZzeyRkfSA/ICRkaXJhYmJyZXZzeyRkfSA6ICRkaXJuYW1lc3skZH0pOworfQorcHJpbnQgIlxuIjsKK3ByaW50ICItIngkdG90YWx3aWR0aCwgIlxuIjsKK2ZvciBteSAkdCAoQHN1YnRlc3RzKSB7CisJcHJpbnRmICIlLSR7ZGVzY3JsZW59cyIsICRkZXNjcnN7JHR9OworCW15ICRmaXJzdHI7CisJZm9yIG15ICRpICgwLi4kI2RpcnMpIHsKKwkJbXkgJGQgPSAkZGlyc1skaV07CisJCW15ICgkciwkdSwkcykgPSBAeyR0aW1lc3skcHJlZml4ZXN7JGR9LiR0fX07CisJCXByaW50ZiAiICAgJS0kY29sd2lkdGhbJGldcyIsIGZvcm1hdF90aW1lcygkciwkdSwkcywkZmlyc3RyKTsKKwkJJGZpcnN0ciA9ICRyIHVubGVzcyBkZWZpbmVkICRmaXJzdHI7CisJfQorCXByaW50ICJcbiI7Cit9CmRpZmYgLS1naXQgYS90L3BlcmYvbWluX3RpbWUucGVybCBiL3QvcGVyZi9taW5fdGltZS5wZXJsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxYTI3MTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvbWluX3RpbWUucGVybApAQCAtMCwwICsxLDIxIEBACisjIS91c3IvYmluL3BlcmwKKworbXkgJG1pbnJ0ID0gMWUxMDA7CitteSAkbWluOworCit3aGlsZSAoPD4pIHsKKwkjIFtoOl1tOnMueHggVS54eCBTLnh4CisJL14oPzooXGQrKTopPyhcZCspOihcZCsoPzpcLlxkKyk/KSAoXGQrKD86XC5cZCspPykgKFxkKyg/OlwuXGQrKT8pJC8KKwkJb3IgZGllICJiYWQgaW5wdXQgbGluZTogJF8iOworCW15ICRydCA9ICgoZGVmaW5lZCAkMSA/ICQxIDogMC4wKSo2MCskMikqNjArJDM7CisJaWYgKCRydCA8ICRtaW5ydCkgeworCQkkbWluID0gJF87CisJCSRtaW5ydCA9ICRydDsKKwl9Cit9CisKK2lmICghZGVmaW5lZCAkbWluKSB7CisJZGllICJubyBpbnB1dCBmb3VuZCI7Cit9CisKK3ByaW50ICRtaW47CmRpZmYgLS1naXQgYS90L3BlcmYvcDAwMDAtcGVyZi1saWItc2FuaXR5LnNoIGIvdC9wZXJmL3AwMDAwLXBlcmYtbGliLXNhbml0eS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZjhlMWVmCi0tLSAvZGV2L251bGwKKysrIGIvdC9wZXJmL3AwMDAwLXBlcmYtbGliLXNhbml0eS5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdHMgd2hldGhlciBwZXJmLWxpYiBmYWNpbGl0aWVzIHdvcmsnCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2RlZmF1bHRfcmVwbworCit0ZXN0X3BlcmYgJ3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8gd29ya3MnICcKKwlmb289JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF9leHBvcnQgZm9vCisnCisKK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUKKwordGVzdF9wZXJmICd0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlIHdvcmtzJyAnCisJd3Q9JChmaW5kIC4gfCB3YyAtbCkgJiYKKwlpZHg9JChnaXQgbHMtZmlsZXMgfCB3YyAtbCkgJiYKKwl0ZXN0ICR3dCAtZ3QgJGlkeAorJworCitiYXo9YmF6Cit0ZXN0X2V4cG9ydCBiYXoKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdF9leHBvcnQgd29ya3MnICcKKwllY2hvICIkZm9vIiAmJgorCXRlc3QgIiRmb28iID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwllY2hvICIkYmF6IiAmJgorCXRlc3QgIiRiYXoiID0gYmF6CisnCisKK3Rlc3RfcGVyZiAnZXhwb3J0IGEgd2VpcmQgdmFyJyAnCisJYmFyPSJ3ZWlyZCAjIHZhcmlhYmxlIiAmJgorCXRlc3RfZXhwb3J0IGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0X2V4cG9ydCB3b3JrcyB3aXRoIHdlaXJkIHZhcnMnICcKKwllY2hvICIkYmFyIiAmJgorCXRlc3QgIiRiYXIiID0gIndlaXJkICMgdmFyaWFibGUiCisnCisKK3Rlc3RfcGVyZiAnaW1wb3J0YW50IHZhcmlhYmxlcyBhdmFpbGFibGUgaW4gc3Vic2hlbGxzJyAnCisJdGVzdCAtbiAiJEhPTUUiICYmCisJdGVzdCAtbiAiJFRFU1RfRElSRUNUT1JZIiAmJgorCXRlc3QgLW4gIiRUUkFTSF9ESVJFQ1RPUlkiICYmCisJdGVzdCAtbiAiJEdJVF9CVUlMRF9ESVIiCisnCisKK3Rlc3RfcGVyZiAndGVzdC1saWItZnVuY3Rpb25zIGNvcnJlY3RseSBsb2FkZWQgaW4gc3Vic2hlbGxzJyAnCisJOiA+YSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEgJiYKKwk6ID5iICYmCisJdGVzdF9jbXAgYSBiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3AwMDAxLXJldi1saXN0LnNoIGIvdC9wZXJmL3AwMDAxLXJldi1saXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE2MzU5ZDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDAwMDEtcmV2LWxpc3Quc2gKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3RzIGhpc3Rvcnkgd2Fsa2luZyBwZXJmb3JtYW5jZSIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKwordGVzdF9wZXJmICdyZXYtbGlzdCAtLWFsbCcgJworCWdpdCByZXYtbGlzdCAtLWFsbCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAncmV2LWxpc3QgLS1hbGwgLS1vYmplY3RzJyAnCisJZ2l0IHJldi1saXN0IC0tYWxsIC0tb2JqZWN0cyA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBuZXcgdW5yZWZlcmVuY2VkIGNvbW1pdCcgJworCWNvbW1pdD0kKGdpdCBjb21taXQtdHJlZSBIRUFEXnt0cmVlfSAtcCBIRUFEKQorJworCit0ZXN0X3BlcmYgJ3Jldi1saXN0ICRjb21taXQgLS1ub3QgLS1hbGwnICcKKwlnaXQgcmV2LWxpc3QgJGNvbW1pdCAtLW5vdCAtLWFsbCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAncmV2LWxpc3QgLS1vYmplY3RzICRjb21taXQgLS1ub3QgLS1hbGwnICcKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzICRjb21taXQgLS1ub3QgLS1hbGwgPi9kZXYvbnVsbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wMDAwMi1yZWFkLWNhY2hlLnNoIGIvdC9wZXJmL3AwMDAyLXJlYWQtY2FjaGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTE4MGFlOQotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wMDAwMi1yZWFkLWNhY2hlLnNoCkBAIC0wLDAgKzEsMTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0cyBwZXJmb3JtYW5jZSBvZiByZWFkaW5nIHRoZSBpbmRleCIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKworY291bnQ9MTAwMAordGVzdF9wZXJmICJyZWFkX2NhY2hlL2Rpc2NhcmRfY2FjaGUgJGNvdW50IHRpbWVzIiAiCisJdGVzdC1yZWFkLWNhY2hlICRjb3VudAorIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNDAwMC1kaWZmLWFsZ29yaXRobXMuc2ggYi90L3BlcmYvcDQwMDAtZGlmZi1hbGdvcml0aG1zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlMDBjOWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDQwMDAtZGlmZi1hbGdvcml0aG1zLnNoCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0cyBkaWZmIGdlbmVyYXRpb24gcGVyZm9ybWFuY2UiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCisKK3Rlc3RfcGVyZiAnbG9nIC0zMDAwIChiYXNlbGluZSknICcKKwlnaXQgbG9nIC0zMDAwID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdsb2cgLS1yYXcgLTMwMDAgKHRyZWUtb25seSknICcKKwlnaXQgbG9nIC0tcmF3IC0zMDAwID4vZGV2L251bGwKKycKKwordGVzdF9wZXJmICdsb2cgLXAgLTMwMDAgKE15ZXJzKScgJworCWdpdCBsb2cgLXAgLTMwMDAgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2xvZyAtcCAtMzAwMCAtLWhpc3RvZ3JhbScgJworCWdpdCBsb2cgLXAgLTMwMDAgLS1oaXN0b2dyYW0gPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2xvZyAtcCAtMzAwMCAtLXBhdGllbmNlJyAnCisJZ2l0IGxvZyAtcCAtMzAwMCAtLXBhdGllbmNlID4vZGV2L251bGwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDQwMDEtZGlmZi1uby1pbmRleC5zaCBiL3QvcGVyZi9wNDAwMS1kaWZmLW5vLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4M2JlNjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDQwMDEtZGlmZi1uby1pbmRleC5zaApAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdCBkaWZmIC0tbm8taW5kZXggcGVyZm9ybWFuY2UiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfbGFyZ2VfcmVwbwordGVzdF9jaGVja291dF93b3JrdHJlZQorCitmaWxlMT0kKGdpdCBscy1maWxlcyB8IHRhaWwgLW4gMiB8IGhlYWQgLTEpCitmaWxlMj0kKGdpdCBscy1maWxlcyB8IHRhaWwgLW4gMSB8IGhlYWQgLTEpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImVtcHR5IGZpbGVzLCBzbyB0aGV5IHRha2Ugbm8gdGltZSB0byBkaWZmIiAiCisJZWNobyA+JGZpbGUxICYmCisJZWNobyA+JGZpbGUyCisiCisKK3Rlc3RfcGVyZiAiZGlmZiAtLW5vLWluZGV4IiAiCisJZ2l0IGRpZmYgLS1uby1pbmRleCAkZmlsZTEgJGZpbGUyID4vZGV2L251bGwKKyIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDQyMTEtbGluZS1sb2cuc2ggYi90L3BlcmYvcDQyMTEtbGluZS1sb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2QwNzRiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNDIxMS1saW5lLWxvZy5zaApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdHMgbG9nIC1MIHBlcmZvcm1hbmNlJworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8KKworIyBQaWNrIGEgZmlsZSB0byBsb2cgcHNldWRvLXJhbmRvbWx5LiAgVGhlIHNvcnQga2V5IGlzIHRoZSBibG9iIGhhc2gsCisjIHNvIGl0IGlzIHN0YWJsZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbGVjdCBhIGZpbGUnICcKKwlnaXQgbHMtdHJlZSBIRUFEIHwgZ3JlcCBeMTAwNjQ0IHwKKwlzb3J0IC1rIDMgfCBoZWFkIC0xIHwgY3V0IC1mIDIgPmZpbGVsaXN0CisnCisKK2ZpbGU9JChjYXQgZmlsZWxpc3QpCitleHBvcnQgZmlsZQorCit0ZXN0X3BlcmYgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgKGJhc2VsaW5lKScgJworCWdpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgSEVBRCA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAnZ2l0IGxvZyAtLWZvbGxvdyAoYmFzZWxpbmUgZm9yIC1NKScgJworCWdpdCBsb2cgLS1vbmVsaW5lIC0tZm9sbG93IC0tICIkZmlsZSIgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ2dpdCBsb2cgLUwnICcKKwlnaXQgbG9nIC1MIDE6IiRmaWxlIiA+L2Rldi9udWxsCisnCisKK3Rlc3RfcGVyZiAnZ2l0IGxvZyAtTSAtTCcgJworCWdpdCBsb2cgLU0gLUwgMToiJGZpbGUiID4vZGV2L251bGwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDUzMDItcGFjay1pbmRleC5zaCBiL3QvcGVyZi9wNTMwMi1wYWNrLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlZTkyMTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcDUzMDItcGFjay1pbmRleC5zaApAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdHMgaW5kZXgtcGFjayBwZXJmb3JtYW5jZSIKKworLiAuL3BlcmYtbGliLnNoCisKK3Rlc3RfcGVyZl9sYXJnZV9yZXBvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGFjaycgJworCWdpdCByZXBhY2sgLWFkICYmCisJUEFDSz0kKGxzIC5naXQvb2JqZWN0cy9wYWNrLyoucGFjayB8IGhlYWQgLW4xKSAmJgorCXRlc3QgLWYgIiRQQUNLIiAmJgorCWV4cG9ydCBQQUNLCisnCisKK3Rlc3RfcGVyZiAnaW5kZXgtcGFjayAwIHRocmVhZHMnICcKKwlHSVRfRElSPXQxIGdpdCBpbmRleC1wYWNrIC0tdGhyZWFkcz0xIC0tc3RkaW4gPCAkUEFDSworJworCit0ZXN0X3BlcmYgJ2luZGV4LXBhY2sgMSB0aHJlYWQgJyAnCisJR0lUX0RJUj10MiBHSVRfRk9SQ0VfVEhSRUFEUz0xIGdpdCBpbmRleC1wYWNrIC0tdGhyZWFkcz0xIC0tc3RkaW4gPCAkUEFDSworJworCit0ZXN0X3BlcmYgJ2luZGV4LXBhY2sgMiB0aHJlYWRzJyAnCisJR0lUX0RJUj10MyBnaXQgaW5kZXgtcGFjayAtLXRocmVhZHM9MiAtLXN0ZGluIDwgJFBBQ0sKKycKKwordGVzdF9wZXJmICdpbmRleC1wYWNrIDQgdGhyZWFkcycgJworCUdJVF9ESVI9dDQgZ2l0IGluZGV4LXBhY2sgLS10aHJlYWRzPTQgLS1zdGRpbiA8ICRQQUNLCisnCisKK3Rlc3RfcGVyZiAnaW5kZXgtcGFjayA4IHRocmVhZHMnICcKKwlHSVRfRElSPXQ1IGdpdCBpbmRleC1wYWNrIC0tdGhyZWFkcz04IC0tc3RkaW4gPCAkUEFDSworJworCit0ZXN0X3BlcmYgJ2luZGV4LXBhY2sgZGVmYXVsdCBudW1iZXIgb2YgdGhyZWFkcycgJworCUdJVF9ESVI9dDYgZ2l0IGluZGV4LXBhY2sgLS1zdGRpbiA8ICRQQUNLCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC9wZXJmL3A1MzEwLXBhY2stYml0bWFwcy5zaCBiL3QvcGVyZi9wNTMxMC1wYWNrLWJpdG1hcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGUyYTIyNAotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNTMxMC1wYWNrLWJpdG1hcHMuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIHBhY2sgcGVyZm9ybWFuY2UgdXNpbmcgYml0bWFwcycKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfbGFyZ2VfcmVwbworCisjIG5vdGUgdGhhdCB3ZSBkbyBldmVyeXRoaW5nIHRocm91Z2ggY29uZmlnLAorIyBzaW5jZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gY29tcGFyZSBiaXRtYXAtYXdhcmUKKyMgZ2l0IHZlcnN1cyBub24tYml0bWFwIGdpdAorIworIyBXZSBpbnRlbnRpb25hbGx5IHVzZSB0aGUgZGVwcmVjYXRlZCBwYWNrLndyaXRlYml0bWFwcworIyBjb25maWcgc28gdGhhdCB3ZSBjYW4gdGVzdCBhZ2FpbnN0IG9sZGVyIHZlcnNpb25zIG9mIGdpdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJpdG1hcCBjb25maWcnICcKKwlnaXQgY29uZmlnIHBhY2sud3JpdGViaXRtYXBzIHRydWUgJiYKKwlnaXQgY29uZmlnIHBhY2sud3JpdGViaXRtYXBoYXNoY2FjaGUgdHJ1ZQorJworCit0ZXN0X3BlcmYgJ3JlcGFjayB0byBkaXNrJyAnCisJZ2l0IHJlcGFjayAtYWQKKycKKwordGVzdF9wZXJmICdzaW11bGF0ZWQgY2xvbmUnICcKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IC0tYWxsIDwvZGV2L251bGwgPi9kZXYvbnVsbAorJworCit0ZXN0X3BlcmYgJ3NpbXVsYXRlZCBmZXRjaCcgJworCWhhdmU9JChnaXQgcmV2LWxpc3QgSEVBRH4xMDAgLTEpICYmCisJeworCQllY2hvIEhFQUQgJiYKKwkJZWNobyBeJGhhdmUKKwl9IHwgZ2l0IHBhY2stb2JqZWN0cyAtLXJldnMgLS1zdGRvdXQgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGFydGlhbCBiaXRtYXAgc3RhdGUnICcKKwkjIHBpY2sgYSBjb21taXQgdG8gcmVwcmVzZW50IHRoZSByZXBvIHRpcCBpbiB0aGUgcGFzdAorCWN1dG9mZj0kKGdpdCByZXYtbGlzdCBIRUFEfjEwMCAtMSkgJiYKKwlvcmlnX3RpcD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCSMgbm93IGtpbGwgb2ZmIGFsbCBvZiB0aGUgcmVmcyBhbmQgcHJldGVuZCB3ZSBoYWQKKwkjIGp1c3QgdGhlIG9uZSB0aXAKKwlybSAtcmYgLmdpdC9sb2dzIC5naXQvcmVmcy8qIC5naXQvcGFja2VkLXJlZnMgJiYKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRjdXRvZmYgJiYKKworCSMgYW5kIHRoZW4gcmVwYWNrLCB3aGljaCB3aWxsIGxlYXZlIHVzIHdpdGggYSBuaWNlCisJIyBiaWcgYml0bWFwIHBhY2sgb2YgdGhlICJvbGQiIGhpc3RvcnksIGFuZCBhbGwgb2YKKwkjIHRoZSBuZXcgaGlzdG9yeSB3aWxsIGJlIGxvb3NlLCBhcyBpZiBpdCBoYWQgYmVlbiBwdXNoZWQKKwkjIHVwIGluY3JlbWVudGFsbHkgYW5kIGV4cGxvZGVkIHZpYSB1bnBhY2stb2JqZWN0cworCWdpdCByZXBhY2sgLUFkICYmCisKKwkjIGFuZCBub3cgcmVzdG9yZSBvdXIgb3JpZ2luYWwgdGlwLCBhcyBpZiB0aGUgcHVzaGVzCisJIyBoYWQgaGFwcGVuZWQKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICRvcmlnX3RpcAorJworCit0ZXN0X3BlcmYgJ3BhcnRpYWwgYml0bWFwJyAnCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLWFsbCA8L2Rldi9udWxsID4vZGV2L251bGwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcDczMDAtY2xlYW4uc2ggYi90L3BlcmYvcDczMDAtY2xlYW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWM5NGNkZAotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNzMwMC1jbGVhbi5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdCBnaXQtY2xlYW4gcGVyZm9ybWFuY2UiCisKKy4gLi9wZXJmLWxpYi5zaAorCit0ZXN0X3BlcmZfZGVmYXVsdF9yZXBvCit0ZXN0X2NoZWNrb3V0X3dvcmt0cmVlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVudHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCBtYW55IHN1YiBkaXJzJyAnCisJcm0gLXJmIDUwMF9zdWJfZGlycyAxMDAwMDBfc3ViX2RpcnMgY2xlYW5fdGVzdF9kaXIgJiYKKwlta2RpciA1MDBfc3ViX2RpcnMgMTAwMDAwX3N1Yl9kaXJzIGNsZWFuX3Rlc3RfZGlyICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDUwMCkKKwlkbworCQlta2RpciA1MDBfc3ViX2RpcnMvZGlyJGkgfHwgcmV0dXJuICQ/CisJZG9uZSAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSAyMDApCisJZG8KKwkJY3AgLXIgNTAwX3N1Yl9kaXJzIDEwMDAwMF9zdWJfZGlycy9kaXIkaSB8fCByZXR1cm4gJD8KKwlkb25lCisnCisKK3Rlc3RfcGVyZiAnY2xlYW4gbWFueSB1bnRyYWNrZWQgc3ViIGRpcnMsIGNoZWNrIGZvciBuZXN0ZWQgZ2l0JyAnCisJZ2l0IGNsZWFuIC1uIC1xIC1mIC1kIDEwMDAwMF9zdWJfZGlycy8KKycKKwordGVzdF9wZXJmICdjbGVhbiBtYW55IHVudHJhY2tlZCBzdWIgZGlycywgaWdub3JlIG5lc3RlZCBnaXQnICcKKwlnaXQgY2xlYW4gLW4gLXEgLWYgLWYgLWQgMTAwMDAwX3N1Yl9kaXJzLworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvcGVyZi9wNzgxMC1ncmVwLnNoIGIvdC9wZXJmL3A3ODEwLWdyZXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWY0YWRlNgotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wNzgxMC1ncmVwLnNoCkBAIC0wLDAgKzEsMjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJnaXQtZ3JlcCBwZXJmb3JtYW5jZSBpbiB2YXJpb3VzIG1vZGVzIgorCisuIC4vcGVyZi1saWIuc2gKKwordGVzdF9wZXJmX2xhcmdlX3JlcG8KK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUKKwordGVzdF9wZXJmICdncmVwIHdvcmt0cmVlLCBjaGVhcCByZWdleCcgJworCWdpdCBncmVwIHNvbWVfbm9uZXhpc3RlbnRfc3RyaW5nIHx8IDoKKycKK3Rlc3RfcGVyZiAnZ3JlcCB3b3JrdHJlZSwgZXhwZW5zaXZlIHJlZ2V4JyAnCisJZ2l0IGdyZXAgIl4uKiAqc29tZV9ub25leGlzdGVudF9zdHJpbmckIiB8fCA6CisnCit0ZXN0X3BlcmYgJ2dyZXAgLS1jYWNoZWQsIGNoZWFwIHJlZ2V4JyAnCisJZ2l0IGdyZXAgLS1jYWNoZWQgc29tZV9ub25leGlzdGVudF9zdHJpbmcgfHwgOgorJwordGVzdF9wZXJmICdncmVwIC0tY2FjaGVkLCBleHBlbnNpdmUgcmVnZXgnICcKKwlnaXQgZ3JlcCAtLWNhY2hlZCAiXi4qICpzb21lX25vbmV4aXN0ZW50X3N0cmluZyQiIHx8IDoKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3BlcmYvcGVyZi1saWIuc2ggYi90L3BlcmYvcGVyZi1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNmNzRlZAotLS0gL2Rldi9udWxsCisrKyBiL3QvcGVyZi9wZXJmLWxpYi5zaApAQCAtMCwwICsxLDIwNiBAQAorIyBQZXJmb3JtYW5jZSB0ZXN0aW5nIGZyYW1ld29yay4gIEVhY2ggcGVyZiBzY3JpcHQgc3RhcnRzIG11Y2ggbGlrZQorIyBhIG5vcm1hbCB0ZXN0IHNjcmlwdCwgZXhjZXB0IGl0IHNvdXJjZXMgdGhpcyBsaWJyYXJ5IGluc3RlYWQgb2YKKyMgdGVzdC1saWIuc2guICBTZWUgdC9wZXJmL1JFQURNRSBmb3IgZG9jdW1lbnRhdGlvbi4KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDExIFRob21hcyBSYXN0CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLyAuCisKKyMgZG8gdGhlIC0tdGVlIHdvcmsgZWFybHk7IGl0IG90aGVyd2lzZSBjb25mdXNlcyBvdXIgY2FyZWZ1bAorIyBHSVRfQlVJTERfRElSIG1hbmdsaW5nCitjYXNlICIkR0lUX1RFU1RfVEVFX1NUQVJURUQsICQqICIgaW4KK2RvbmUsKikKKwkjIGRvIG5vdCByZWRpcmVjdCBhZ2FpbgorCTs7CisqJyAtLXRlZSAnKnwqJyAtLXZhJyopCisJbWtkaXIgLXAgdGVzdC1yZXN1bHRzCisJQkFTRT10ZXN0LXJlc3VsdHMvJChiYXNlbmFtZSAiJDAiIC5zaCkKKwkoR0lUX1RFU1RfVEVFX1NUQVJURUQ9ZG9uZSAke1NIRUxMLXNofSAiJDAiICIkQCIgMj4mMTsKKwkgZWNobyAkPyA+ICRCQVNFLmV4aXQpIHwgdGVlICRCQVNFLm91dAorCXRlc3QgIiQoY2F0ICRCQVNFLmV4aXQpIiA9IDAKKwlleGl0CisJOzsKK2VzYWMKKworVEVTVF9ESVJFQ1RPUlk9JChwd2QpLy4uCitURVNUX09VVFBVVF9ESVJFQ1RPUlk9JChwd2QpCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfSU5TVEFMTEVEIjsgdGhlbgorCXBlcmZfcmVzdWx0c19wcmVmaXg9CitlbHNlCisJcGVyZl9yZXN1bHRzX3ByZWZpeD0kKHByaW50ZiAiJXMiICIke0dJVF9URVNUX0lOU1RBTExFRCUvYmluLXdyYXBwZXJzfSIgfCB0ciAtYyAiW2EtekEtWjAtOV0iICJbXypdIikiLiIKKwkjIG1ha2UgdGhlIHRlc3RlZCBkaXIgYWJzb2x1dGUKKwlHSVRfVEVTVF9JTlNUQUxMRUQ9JChjZCAiJEdJVF9URVNUX0lOU1RBTExFRCIgJiYgcHdkKQorZmkKKworVEVTVF9OT19DUkVBVEVfUkVQTz10CitURVNUX05PX01BTExPQ19DSEVDSz10CisKKy4gLi4vdGVzdC1saWIuc2gKKworIyBWYXJpYWJsZXMgZnJvbSB0ZXN0LWxpYiB0aGF0IGFyZSBub3JtYWxseSBpbnRlcm5hbCB0byB0aGUgdGVzdHM7IHdlCisjIG5lZWQgdG8gZXhwb3J0IHRoZW0gZm9yIHRlc3RfcGVyZiBzdWJzaGVsbHMKK2V4cG9ydCBURVNUX0RJUkVDVE9SWSBUUkFTSF9ESVJFQ1RPUlkgR0lUX0JVSUxEX0RJUiBHSVRfVEVTVF9DTVAKKworcGVyZl9yZXN1bHRzX2Rpcj0kVEVTVF9PVVRQVVRfRElSRUNUT1JZL3Rlc3QtcmVzdWx0cworbWtkaXIgLXAgIiRwZXJmX3Jlc3VsdHNfZGlyIgorcm0gLWYgIiRwZXJmX3Jlc3VsdHNfZGlyIi8kKGJhc2VuYW1lICIkMCIgLnNoKS5zdWJ0ZXN0cworCitpZiB0ZXN0IC16ICIkR0lUX1BFUkZfUkVQRUFUX0NPVU5UIjsgdGhlbgorCUdJVF9QRVJGX1JFUEVBVF9DT1VOVD0zCitmaQorZGllX2lmX2J1aWxkX2Rpcl9ub3RfcmVwbyAoKSB7CisJaWYgISAoIGNkICIkVEVTVF9ESVJFQ1RPUlkvLi4iICYmCisJCSAgICBnaXQgcmV2LXBhcnNlIC0tYnVpbGQtZGlyID4vZGV2L251bGwgMj4mMSApOyB0aGVuCisJCWVycm9yICJObyAkMSBkZWZpbmVkLCBhbmQgeW91ciBidWlsZCBkaXJlY3RvcnkgaXMgbm90IGEgcmVwbyIKKwlmaQorfQorCitpZiB0ZXN0IC16ICIkR0lUX1BFUkZfUkVQTyI7IHRoZW4KKwlkaWVfaWZfYnVpbGRfZGlyX25vdF9yZXBvICckR0lUX1BFUkZfUkVQTycKKwlHSVRfUEVSRl9SRVBPPSRURVNUX0RJUkVDVE9SWS8uLgorZmkKK2lmIHRlc3QgLXogIiRHSVRfUEVSRl9MQVJHRV9SRVBPIjsgdGhlbgorCWRpZV9pZl9idWlsZF9kaXJfbm90X3JlcG8gJyRHSVRfUEVSRl9MQVJHRV9SRVBPJworCUdJVF9QRVJGX0xBUkdFX1JFUE89JFRFU1RfRElSRUNUT1JZLy4uCitmaQorCit0ZXN0X3BlcmZfY3JlYXRlX3JlcG9fZnJvbSAoKSB7CisJdGVzdCAiJCMiID0gMiB8fAorCWVycm9yICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiBub3QgMiBwYXJhbWV0ZXJzIHRvIHRlc3QtY3JlYXRlLXJlcG8iCisJcmVwbz0iJDEiCisJc291cmNlPSIkMiIKKwlzb3VyY2VfZ2l0PSRzb3VyY2UvJChjZCAiJHNvdXJjZSIgJiYgZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpCisJbWtkaXIgLXAgIiRyZXBvLy5naXQiCisJKAorCQljZCAiJHJlcG8vLmdpdCIgJiYKKwkJeyBjcCAtUmwgIiRzb3VyY2VfZ2l0L29iamVjdHMiIC4gMj4vZGV2L251bGwgfHwKKwkJCWNwIC1SICIkc291cmNlX2dpdC9vYmplY3RzIiAuOyB9ICYmCisJCWZvciBzdHVmZiBpbiAiJHNvdXJjZV9naXQiLyo7IGRvCisJCQljYXNlICIkc3R1ZmYiIGluCisJCQkJKi9vYmplY3RzfCovaG9va3N8Ki9jb25maWcpCisJCQkJCTs7CisJCQkJKikKKwkJCQkJY3AgLVIgIiRzdHVmZiIgLiB8fCBleGl0IDEKKwkJCQkJOzsKKwkJCWVzYWMKKwkJZG9uZSAmJgorCQljZCAuLiAmJgorCQlnaXQgaW5pdCAtcSAmJgorCQltdiAuZ2l0L2hvb2tzIC5naXQvaG9va3MtZGlzYWJsZWQgMj4vZGV2L251bGwKKwkpIHx8IGVycm9yICJmYWlsZWQgdG8gY29weSByZXBvc2l0b3J5ICckc291cmNlJyB0byAnJHJlcG8nIgorfQorCisjIGNhbGwgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIHRvIGVzdGFibGlzaCBhbiBhcHByb3ByaWF0ZWx5LXNpemVkIHJlcG9zaXRvcnkKK3Rlc3RfcGVyZl9kZWZhdWx0X3JlcG8gKCkgeworCXRlc3RfcGVyZl9jcmVhdGVfcmVwb19mcm9tICIkezE6LSRUUkFTSF9ESVJFQ1RPUll9IiAiJEdJVF9QRVJGX1JFUE8iCit9Cit0ZXN0X3BlcmZfbGFyZ2VfcmVwbyAoKSB7CisJaWYgdGVzdCAiJEdJVF9QRVJGX0xBUkdFX1JFUE8iID0gIiRHSVRfQlVJTERfRElSIjsgdGhlbgorCQllY2hvICJ3YXJuaW5nOiBcJEdJVF9QRVJGX0xBUkdFX1JFUE8gaXMgXCRHSVRfQlVJTERfRElSLiIgPiYyCisJCWVjaG8gIndhcm5pbmc6IFRoaXMgd2lsbCB3b3JrLCBidXQgbWF5IG5vdCBiZSBhIHN1ZmZpY2llbnRseSBsYXJnZSByZXBvIiA+JjIKKwkJZWNobyAid2FybmluZzogZm9yIHJlcHJlc2VudGF0aXZlIG1lYXN1cmVtZW50cy4iID4mMgorCWZpCisJdGVzdF9wZXJmX2NyZWF0ZV9yZXBvX2Zyb20gIiR7MTotJFRSQVNIX0RJUkVDVE9SWX0iICIkR0lUX1BFUkZfTEFSR0VfUkVQTyIKK30KK3Rlc3RfY2hlY2tvdXRfd29ya3RyZWUgKCkgeworCWdpdCBjaGVja291dC1pbmRleCAtdSAtYSB8fAorCWVycm9yICJnaXQgY2hlY2tvdXQtaW5kZXggZmFpbGVkIgorfQorCisjIFBlcmZvcm1hbmNlIHRlc3RzIHNob3VsZCBuZXZlciBmYWlsLiAgSWYgdGhleSBkbywgc3RvcCBpbW1lZGlhdGVseQoraW1tZWRpYXRlPXQKKwordGVzdF9ydW5fcGVyZl8gKCkgeworCXRlc3RfY2xlYW51cD06CisJdGVzdF9leHBvcnRfPSJ0ZXN0X2NsZWFudXAiCisJZXhwb3J0IHRlc3RfY2xlYW51cCB0ZXN0X2V4cG9ydF8KKwkvdXNyL2Jpbi90aW1lIC1mICIlRSAlVSAlUyIgLW8gdGVzdF90aW1lLiRpICIkU0hFTEwiIC1jICcKKy4gJyIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtbGliLWZ1bmN0aW9ucy5zaCcKK3Rlc3RfZXhwb3J0ICgpIHsKKwlbICQjICE9IDAgXSB8fCByZXR1cm4gMAorCXRlc3RfZXhwb3J0Xz0iJHRlc3RfZXhwb3J0X1xcfCQxIgorCXNoaWZ0CisJdGVzdF9leHBvcnQgIiRAIgorfQorJyIkMSInCityZXQ9JD8KK3NldCB8IHNlZCAtbiAicyciLycvJ1xcXFwnJy9nIic7cy9eXFwoJHRlc3RfZXhwb3J0X1xcKS9leHBvcnQgJyInJiciJy9wIiA+dGVzdF92YXJzCitleGl0ICRyZXQnID4mMyAyPiY0CisJZXZhbF9yZXQ9JD8KKworCWlmIHRlc3QgJGV2YWxfcmV0ID0gMCB8fCB0ZXN0IC1uICIkZXhwZWN0aW5nX2ZhaWx1cmUiCisJdGhlbgorCQl0ZXN0X2V2YWxfICIkdGVzdF9jbGVhbnVwIgorCQkuIC4vdGVzdF92YXJzIHx8IGVycm9yICJmYWlsZWQgdG8gbG9hZCB1cGRhdGVkIGVudmlyb25tZW50IgorCWZpCisJaWYgdGVzdCAiJHZlcmJvc2UiID0gInQiICYmIHRlc3QgLW4gIiRIQVJORVNTX0FDVElWRSI7IHRoZW4KKwkJZWNobyAiIgorCWZpCisJcmV0dXJuICIkZXZhbF9yZXQiCit9CisKKwordGVzdF9wZXJmICgpIHsKKwl0ZXN0X3N0YXJ0XworCXRlc3QgIiQjIiA9IDMgJiYgeyB0ZXN0X3ByZXJlcT0kMTsgc2hpZnQ7IH0gfHwgdGVzdF9wcmVyZXE9CisJdGVzdCAiJCMiID0gMiB8fAorCWVycm9yICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiBub3QgMiBvciAzIHBhcmFtZXRlcnMgdG8gdGVzdC1leHBlY3Qtc3VjY2VzcyIKKwlleHBvcnQgdGVzdF9wcmVyZXEKKwlpZiAhIHRlc3Rfc2tpcCAiJEAiCisJdGhlbgorCQliYXNlPSQoYmFzZW5hbWUgIiQwIiAuc2gpCisJCWVjaG8gIiR0ZXN0X2NvdW50IiA+PiIkcGVyZl9yZXN1bHRzX2RpciIvJGJhc2Uuc3VidGVzdHMKKwkJZWNobyAiJDEiID4iJHBlcmZfcmVzdWx0c19kaXIiLyRiYXNlLiR0ZXN0X2NvdW50LmRlc2NyCisJCWlmIHRlc3QgLXogIiR2ZXJib3NlIjsgdGhlbgorCQkJcHJpbnRmICIlcyIgInBlcmYgJHRlc3RfY291bnQgLSAkMToiCisJCWVsc2UKKwkJCWVjaG8gInBlcmYgJHRlc3RfY291bnQgLSAkMToiCisJCWZpCisJCWZvciBpIGluICQodGVzdF9zZXEgMSAkR0lUX1BFUkZfUkVQRUFUX0NPVU5UKTsgZG8KKwkJCXNheSA+JjMgInJ1bm5pbmc6ICQyIgorCQkJaWYgdGVzdF9ydW5fcGVyZl8gIiQyIgorCQkJdGhlbgorCQkJCWlmIHRlc3QgLXogIiR2ZXJib3NlIjsgdGhlbgorCQkJCQlwcmludGYgIiAlcyIgIiRpIgorCQkJCWVsc2UKKwkJCQkJZWNobyAiKiB0aW1pbmcgcnVuICRpLyRHSVRfUEVSRl9SRVBFQVRfQ09VTlQ6IgorCQkJCWZpCisJCQllbHNlCisJCQkJdGVzdCAteiAiJHZlcmJvc2UiICYmIGVjaG8KKwkJCQl0ZXN0X2ZhaWx1cmVfICIkQCIKKwkJCQlicmVhaworCQkJZmkKKwkJZG9uZQorCQlpZiB0ZXN0IC16ICIkdmVyYm9zZSI7IHRoZW4KKwkJCWVjaG8gIiBvayIKKwkJZWxzZQorCQkJdGVzdF9va18gIiQxIgorCQlmaQorCQliYXNlPSIkcGVyZl9yZXN1bHRzX2RpciIvIiRwZXJmX3Jlc3VsdHNfcHJlZml4JChiYXNlbmFtZSAiJDAiIC5zaCkiLiIkdGVzdF9jb3VudCIKKwkJIiRURVNUX0RJUkVDVE9SWSIvcGVyZi9taW5fdGltZS5wZXJsIHRlc3RfdGltZS4qID4iJGJhc2UiLnRpbWVzCisJZmkKKwl0ZXN0X2ZpbmlzaF8KK30KKworIyBXZSBleHRlbmQgdGVzdF9kb25lIHRvIHByaW50IHRpbWluZ3MgYXQgdGhlIGVuZCAoLi9ydW4gZGlzYWJsZXMgdGhpcworIyBhbmQgZG9lcyBpdCBhZnRlciBydW5uaW5nIGV2ZXJ5dGhpbmcpCit0ZXN0X2F0X2VuZF9ob29rXyAoKSB7CisJaWYgdGVzdCAteiAiJEdJVF9QRVJGX0FHR1JFR0FUSU5HX0xBVEVSIjsgdGhlbgorCQkoIGNkICIkVEVTVF9ESVJFQ1RPUlkiL3BlcmYgJiYgLi9hZ2dyZWdhdGUucGVybCAkKGJhc2VuYW1lICIkMCIpICkKKwlmaQorfQorCit0ZXN0X2V4cG9ydCAoKSB7CisJZXhwb3J0ICIkQCIKK30KZGlmZiAtLWdpdCBhL3QvcGVyZi9ydW4gYi90L3BlcmYvcnVuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmZDcwMTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3BlcmYvcnVuCkBAIC0wLDAgKzEsODIgQEAKKyMhL2Jpbi9zaAorCitjYXNlICIkMSIgaW4KKwktLWhlbHApCisJCWVjaG8gInVzYWdlOiAkMCBbb3RoZXJfZ2l0X3RyZWUuLi5dIFstLV0gW3Rlc3Rfc2NyaXB0c10iCisJCWV4aXQgMAorCQk7OworZXNhYworCitkaWUgKCkgeworCWVjaG8gPiYyICJlcnJvcjogJCoiCisJZXhpdCAxCit9CisKK3J1bl9vbmVfZGlyICgpIHsKKwlpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisJCXNldCAtLSBwPz8/Py0qLnNoCisJZmkKKwllY2hvICI9PT0gUnVubmluZyAkIyB0ZXN0cyBpbiAke0dJVF9URVNUX0lOU1RBTExFRDotdGhpcyB0cmVlfSA9PT0iCisJZm9yIHQgaW4gIiRAIjsgZG8KKwkJLi8kdCAkR0lUX1RFU1RfT1BUUworCWRvbmUKK30KKwordW5wYWNrX2dpdF9yZXYgKCkgeworCXJldj0kMQorCW1rZGlyIC1wIGJ1aWxkLyRyZXYKKwkoY2QgIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctY2R1cCkiICYmIGdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAkcmV2KSB8CisJKGNkIGJ1aWxkLyRyZXYgJiYgdGFyIHgpCit9CitidWlsZF9naXRfcmV2ICgpIHsKKwlyZXY9JDEKKwljcCAuLi8uLi9jb25maWcubWFrIGJ1aWxkLyRyZXYvY29uZmlnLm1haworCShjZCBidWlsZC8kcmV2ICYmIG1ha2UgJEdJVF9QRVJGX01BS0VfT1BUUykgfHwKKwlkaWUgImZhaWxlZCB0byBidWlsZCByZXZpc2lvbiAnJG15ZGlyJyIKK30KKworcnVuX2RpcnNfaGVscGVyICgpIHsKKwlteWRpcj0kezElL30KKwlzaGlmdAorCXdoaWxlIHRlc3QgJCMgLWd0IDAgLWEgIiQxIiAhPSAtLSAtYSAhIC1mICIkMSI7IGRvCisJCXNoaWZ0CisJZG9uZQorCWlmIHRlc3QgJCMgLWd0IDAgLWEgIiQxIiA9IC0tOyB0aGVuCisJCXNoaWZ0CisJZmkKKwlpZiBbICEgLWQgIiRteWRpciIgXTsgdGhlbgorCQlyZXY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkbXlkaXIiIDI+L2Rldi9udWxsKSB8fAorCQlkaWUgIickbXlkaXInIGlzIG5laXRoZXIgYSBkaXJlY3Rvcnkgbm9yIGEgdmFsaWQgcmV2aXNpb24iCisJCWlmIFsgISAtZCBidWlsZC8kcmV2IF07IHRoZW4KKwkJCXVucGFja19naXRfcmV2ICRyZXYKKwkJZmkKKwkJYnVpbGRfZ2l0X3JldiAkcmV2CisJCW15ZGlyPWJ1aWxkLyRyZXYKKwlmaQorCWlmIHRlc3QgIiRteWRpciIgPSAuOyB0aGVuCisJCXVuc2V0IEdJVF9URVNUX0lOU1RBTExFRAorCWVsc2UKKwkJR0lUX1RFU1RfSU5TVEFMTEVEPSIkbXlkaXIvYmluLXdyYXBwZXJzIgorCQlleHBvcnQgR0lUX1RFU1RfSU5TVEFMTEVECisJZmkKKwlydW5fb25lX2RpciAiJEAiCit9CisKK3J1bl9kaXJzICgpIHsKKwl3aGlsZSB0ZXN0ICQjIC1ndCAwIC1hICIkMSIgIT0gLS0gLWEgISAtZiAiJDEiOyBkbworCQlydW5fZGlyc19oZWxwZXIgIiRAIgorCQlzaGlmdAorCWRvbmUKK30KKworR0lUX1BFUkZfQUdHUkVHQVRJTkdfTEFURVI9dAorZXhwb3J0IEdJVF9QRVJGX0FHR1JFR0FUSU5HX0xBVEVSCisKK2NkICIkKGRpcm5hbWUgJDApIgorLiAuLi8uLi9HSVQtQlVJTEQtT1BUSU9OUworCitpZiB0ZXN0ICQjID0gMCAtbyAiJDEiID0gLS0gLW8gLWYgIiQxIjsgdGhlbgorCXNldCAtLSAuICIkQCIKK2ZpCitydW5fZGlycyAiJEAiCisuL2FnZ3JlZ2F0ZS5wZXJsICIkQCIKZGlmZiAtLWdpdCBhL3QvdDAwMDAtYmFzaWMuc2ggYi90L3QwMDAwLWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc5YjkwNzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDAwLWJhc2ljLnNoCkBAIC0wLDAgKzEsMTA2NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSB2ZXJ5IGJhc2ljcyBwYXJ0ICMxLgorCitUaGUgcmVzdCBvZiB0aGUgdGVzdCBzdWl0ZSBkb2VzIG5vdCBjaGVjayB0aGUgYmFzaWMgb3BlcmF0aW9uIG9mIGdpdAorcGx1bWJpbmcgY29tbWFuZHMgdG8gd29yayB2ZXJ5IGNhcmVmdWxseS4gIFRoZWlyIGpvYiBpcyB0byBjb25jZW50cmF0ZQorb24gdHJpY2t5IGZlYXR1cmVzIHRoYXQgY2F1c2VkIGJ1Z3MgaW4gdGhlIHBhc3QgdG8gZGV0ZWN0IHJlZ3Jlc3Npb24uCisKK1RoaXMgdGVzdCBydW5zIHZlcnkgYmFzaWMgZmVhdHVyZXMsIGxpa2UgcmVnaXN0ZXJpbmcgdGhpbmdzIGluIGNhY2hlLAord3JpdGluZyB0cmVlLCBldGMuCisKK05vdGUgdGhhdCB0aGlzIHRlc3QgKmRlbGliZXJhdGVseSogaGFyZC1jb2RlcyBtYW55IGV4cGVjdGVkIG9iamVjdAorSURzLiAgV2hlbiBvYmplY3QgSUQgY29tcHV0YXRpb24gY2hhbmdlcywgbGlrZSBpbiB0aGUgcHJldmlvdXMgY2FzZSBvZgorc3dhcHBpbmcgY29tcHJlc3Npb24gYW5kIGhhc2hpbmcgb3JkZXIsIHRoZSBwZXJzb24gd2hvIGlzIG1ha2luZyB0aGUKK21vZGlmaWNhdGlvbiAqc2hvdWxkKiB0YWtlIG5vdGljZSBhbmQgdXBkYXRlIHRoZSB0ZXN0IHZlY3RvcnMgaGVyZS4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZ2l0IGluaXQgaGFzIGJlZW4gZG9uZSBpbiBhbiBlbXB0eSByZXBvc2l0b3J5LgorIyBtYWtlIHN1cmUgaXQgaXMgZW1wdHkuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXQvb2JqZWN0cyBzaG91bGQgYmUgZW1wdHkgYWZ0ZXIgZ2l0IGluaXQgaW4gYW4gZW1wdHkgcmVwbycgJworCWZpbmQgLmdpdC9vYmplY3RzIC10eXBlIGYgLXByaW50ID5zaG91bGQtYmUtZW1wdHkgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIHNob3VsZC1iZS1lbXB0eQorJworCisjIGFsc28gaXQgc2hvdWxkIGhhdmUgMiBzdWJkaXJlY3Rvcmllczsgbm8gZmFuLW91dCBhbnltb3JlLCBwYWNrLCBhbmQgaW5mby4KKyMgMyBpcyBjb3VudGluZyAib2JqZWN0cyIgaXRzZWxmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0L29iamVjdHMgc2hvdWxkIGhhdmUgMyBzdWJkaXJlY3RvcmllcycgJworCWZpbmQgLmdpdC9vYmplY3RzIC10eXBlIGQgLXByaW50ID5mdWxsLW9mLWRpcmVjdG9yaWVzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBmdWxsLW9mLWRpcmVjdG9yaWVzCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGVzdCBoYXJuZXNzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzIGlzIHJlcG9ydGVkIGxpa2UgdGhpcycgJworCToKKycKKworX3J1bl9zdWJfdGVzdF9saWJfdGVzdF9jb21tb24gKCkgeworCW5lZz0iJDEiIG5hbWU9IiQyIiBkZXNjcj0iJDMiICMgc3RkaW4gaXMgdGhlIGJvZHkgb2YgdGhlIHRlc3QgY29kZQorCXNoaWZ0IDMKKwlta2RpciAiJG5hbWUiICYmCisJKAorCQkjIFByZXRlbmQgd2UncmUgbm90IHJ1bm5pbmcgdW5kZXIgYSB0ZXN0IGhhcm5lc3MsIHdoZXRoZXIgd2UKKwkJIyBhcmUgb3Igbm90LiBUaGUgdGVzdC1saWIgb3V0cHV0IGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YKKwkJIyB0aGlzIHZhcmlhYmxlLCBzbyB3ZSBuZWVkIGEgc3RhYmxlIHNldHRpbmcgdW5kZXIgd2hpY2ggdG8gcnVuCisJCSMgdGhlIHN1Yi10ZXN0LgorCQlzYW5lX3Vuc2V0IEhBUk5FU1NfQUNUSVZFICYmCisJCWNkICIkbmFtZSIgJiYKKwkJY2F0ID4iJG5hbWUuc2giIDw8LUVPRiAmJgorCQkjISRTSEVMTF9QQVRICisKKwkJdGVzdF9kZXNjcmlwdGlvbj0nJGRlc2NyIChydW4gaW4gc3ViIHRlc3QtbGliKQorCisJCVRoaXMgaXMgcnVuIGluIGEgc3ViIHRlc3QtbGliIHNvIHRoYXQgd2UgZG8gbm90IGdldCBpbmNvcnJlY3QKKwkJcGFzc2luZyBtZXRyaWNzCisJCScKKworCQkjIFBvaW50IHRvIHRoZSB0L3Rlc3QtbGliLnNoLCB3aGljaCBpc24ndCBpbiAuLi8gYXMgdXN1YWwKKwkJLiAiXCRURVNUX0RJUkVDVE9SWSIvdGVzdC1saWIuc2gKKwkJRU9GCisJCWNhdCA+PiIkbmFtZS5zaCIgJiYKKwkJY2htb2QgK3ggIiRuYW1lLnNoIiAmJgorCQlleHBvcnQgVEVTVF9ESVJFQ1RPUlkgJiYKKwkJVEVTVF9PVVRQVVRfRElSRUNUT1JZPSQocHdkKSAmJgorCQlleHBvcnQgVEVTVF9PVVRQVVRfRElSRUNUT1JZICYmCisJCWlmIHRlc3QgLXogIiRuZWciCisJCXRoZW4KKwkJCS4vIiRuYW1lLnNoIiAiJEAiID5vdXQgMj5lcnIKKwkJZWxzZQorCQkJISAgLi8iJG5hbWUuc2giICIkQCIgPm91dCAyPmVycgorCQlmaQorCSkKK30KKworcnVuX3N1Yl90ZXN0X2xpYl90ZXN0ICgpIHsKKwlfcnVuX3N1Yl90ZXN0X2xpYl90ZXN0X2NvbW1vbiAnJyAiJEAiCit9CisKK3J1bl9zdWJfdGVzdF9saWJfdGVzdF9lcnIgKCkgeworCV9ydW5fc3ViX3Rlc3RfbGliX3Rlc3RfY29tbW9uICchJyAiJEAiCit9CisKK2NoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0ICgpIHsKKwluYW1lPSIkMSIgIyBzdGRpbiBpcyB0aGUgZXhwZWN0ZWQgb3V0cHV0IGZyb20gdGhlIHRlc3QKKwkoCisJCWNkICIkbmFtZSIgJiYKKwkJISB0ZXN0IC1zIGVyciAmJgorCQlzZWQgLWUgJ3MvXj4gLy8nIC1lICdzL1okLy8nID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dAorCSkKK30KKworY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3RfZXJyICgpIHsKKwluYW1lPSIkMSIgIyBzdGRpbiBpcyB0aGUgZXhwZWN0ZWQgb3V0cHV0IG91dHB1dCBmcm9tIHRoZSB0ZXN0CisJIyBleHBlY3RlZCBlcnJvciBvdXRwdXQgaXMgaW4gZGVzY3JpcHRpb3IgMworCSgKKwkJY2QgIiRuYW1lIiAmJgorCQlzZWQgLWUgJ3MvXj4gLy8nIC1lICdzL1okLy8nID5leHBlY3Qub3V0ICYmCisJCXRlc3RfY21wIGV4cGVjdC5vdXQgb3V0ICYmCisJCXNlZCAtZSAncy9ePiAvLycgLWUgJ3MvWiQvLycgPCYzID5leHBlY3QuZXJyICYmCisJCXRlc3RfY21wIGV4cGVjdC5lcnIgZXJyCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0ZW5kIHdlIGhhdmUgYSBmdWxseSBwYXNzaW5nIHRlc3Qgc3VpdGUnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgZnVsbC1wYXNzICczIHBhc3NpbmcgdGVzdHMnIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgZnVsbC1wYXNzIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJPiBvayAyIC0gcGFzc2luZyB0ZXN0ICMyCisJPiBvayAzIC0gcGFzc2luZyB0ZXN0ICMzCisJPiAjIHBhc3NlZCBhbGwgMyB0ZXN0KHMpCisJPiAxLi4zCisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXRlbmQgd2UgaGF2ZSBhIHBhcnRpYWxseSBwYXNzaW5nIHRlc3Qgc3VpdGUnICIKKwl0ZXN0X211c3RfZmFpbCBydW5fc3ViX3Rlc3RfbGliX3Rlc3QgXAorCQlwYXJ0aWFsLXBhc3MgJzIvMyB0ZXN0cyBwYXNzaW5nJyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bhc3NpbmcgdGVzdCAjMScgJ3RydWUnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGluZyB0ZXN0ICMyJyAnZmFsc2UnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFzc2luZyB0ZXN0ICMzJyAndHJ1ZScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBwYXJ0aWFsLXBhc3MgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG5vdCBvayAyIC0gZmFpbGluZyB0ZXN0ICMyCisJIwlmYWxzZQorCT4gb2sgMyAtIHBhc3NpbmcgdGVzdCAjMworCT4gIyBmYWlsZWQgMSBhbW9uZyAzIHRlc3QocykKKwk+IDEuLjMKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldGVuZCB3ZSBoYXZlIGEga25vd24gYnJlYWthZ2UnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgZmFpbGluZy10b2RvICdBIGZhaWxpbmcgVE9ETyB0ZXN0JyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bhc3NpbmcgdGVzdCcgJ3RydWUnCisJdGVzdF9leHBlY3RfZmFpbHVyZSAncHJldGVuZCB3ZSBoYXZlIGEga25vd24gYnJlYWthZ2UnICdmYWxzZScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBmYWlsaW5nLXRvZG8gPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QKKwk+IG5vdCBvayAyIC0gcHJldGVuZCB3ZSBoYXZlIGEga25vd24gYnJlYWthZ2UgIyBUT0RPIGtub3duIGJyZWFrYWdlCisJPiAjIHN0aWxsIGhhdmUgMSBrbm93biBicmVha2FnZShzKQorCT4gIyBwYXNzZWQgYWxsIHJlbWFpbmluZyAxIHRlc3QocykKKwk+IDEuLjIKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldGVuZCB3ZSBoYXZlIGZpeGVkIGEga25vd24gYnJlYWthZ2UnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcGFzc2luZy10b2RvICdBIHBhc3NpbmcgVE9ETyB0ZXN0JyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3ByZXRlbmQgd2UgaGF2ZSBmaXhlZCBhIGtub3duIGJyZWFrYWdlJyAndHJ1ZScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBwYXNzaW5nLXRvZG8gPDwtXFxFT0YKKwk+IG9rIDEgLSBwcmV0ZW5kIHdlIGhhdmUgZml4ZWQgYSBrbm93biBicmVha2FnZSAjIFRPRE8ga25vd24gYnJlYWthZ2UgdmFuaXNoZWQKKwk+ICMgMSBrbm93biBicmVha2FnZShzKSB2YW5pc2hlZDsgcGxlYXNlIHVwZGF0ZSB0ZXN0KHMpCisJPiAxLi4xCisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXRlbmQgd2UgaGF2ZSBmaXhlZCBvbmUgb2YgdHdvIGtub3duIGJyZWFrYWdlcyAocnVuIGluIHN1YiB0ZXN0LWxpYiknICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcGFydGlhbGx5LXBhc3NpbmctdG9kb3MgXAorCQknMiBUT0RPIHRlc3RzLCBvbmUgcGFzc2luZycgPDwtXFxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICdwcmV0ZW5kIHdlIGhhdmUgYSBrbm93biBicmVha2FnZScgJ2ZhbHNlJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXRlbmQgd2UgaGF2ZSBhIHBhc3NpbmcgdGVzdCcgJ3RydWUnCisJdGVzdF9leHBlY3RfZmFpbHVyZSAncHJldGVuZCB3ZSBoYXZlIGZpeGVkIGFub3RoZXIga25vd24gYnJlYWthZ2UnICd0cnVlJworCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHBhcnRpYWxseS1wYXNzaW5nLXRvZG9zIDw8LVxcRU9GCisJPiBub3Qgb2sgMSAtIHByZXRlbmQgd2UgaGF2ZSBhIGtub3duIGJyZWFrYWdlICMgVE9ETyBrbm93biBicmVha2FnZQorCT4gb2sgMiAtIHByZXRlbmQgd2UgaGF2ZSBhIHBhc3NpbmcgdGVzdAorCT4gb2sgMyAtIHByZXRlbmQgd2UgaGF2ZSBmaXhlZCBhbm90aGVyIGtub3duIGJyZWFrYWdlICMgVE9ETyBrbm93biBicmVha2FnZSB2YW5pc2hlZAorCT4gIyAxIGtub3duIGJyZWFrYWdlKHMpIHZhbmlzaGVkOyBwbGVhc2UgdXBkYXRlIHRlc3QocykKKwk+ICMgc3RpbGwgaGF2ZSAxIGtub3duIGJyZWFrYWdlKHMpCisJPiAjIHBhc3NlZCBhbGwgcmVtYWluaW5nIDEgdGVzdChzKQorCT4gMS4uMworCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0ZW5kIHdlIGhhdmUgYSBwYXNzLCBmYWlsLCBhbmQga25vd24gYnJlYWthZ2UnICIKKwl0ZXN0X211c3RfZmFpbCBydW5fc3ViX3Rlc3RfbGliX3Rlc3QgXAorCQltaXhlZC1yZXN1bHRzMSAnbWl4ZWQgcmVzdWx0cyAjMScgPDwtXFxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXNzaW5nIHRlc3QnICd0cnVlJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxpbmcgdGVzdCcgJ2ZhbHNlJworCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3ByZXRlbmQgd2UgaGF2ZSBhIGtub3duIGJyZWFrYWdlJyAnZmFsc2UnCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgbWl4ZWQtcmVzdWx0czEgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QKKwk+IG5vdCBvayAyIC0gZmFpbGluZyB0ZXN0CisJPiAjCWZhbHNlCisJPiBub3Qgb2sgMyAtIHByZXRlbmQgd2UgaGF2ZSBhIGtub3duIGJyZWFrYWdlICMgVE9ETyBrbm93biBicmVha2FnZQorCT4gIyBzdGlsbCBoYXZlIDEga25vd24gYnJlYWthZ2UocykKKwk+ICMgZmFpbGVkIDEgYW1vbmcgcmVtYWluaW5nIDIgdGVzdChzKQorCT4gMS4uMworCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0ZW5kIHdlIGhhdmUgYSBtaXggb2YgYWxsIHBvc3NpYmxlIHJlc3VsdHMnICIKKwl0ZXN0X211c3RfZmFpbCBydW5fc3ViX3Rlc3RfbGliX3Rlc3QgXAorCQltaXhlZC1yZXN1bHRzMiAnbWl4ZWQgcmVzdWx0cyAjMicgPDwtXFxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXNzaW5nIHRlc3QnICd0cnVlJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bhc3NpbmcgdGVzdCcgJ3RydWUnCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAncGFzc2luZyB0ZXN0JyAndHJ1ZScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXNzaW5nIHRlc3QnICd0cnVlJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxpbmcgdGVzdCcgJ2ZhbHNlJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxpbmcgdGVzdCcgJ2ZhbHNlJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxpbmcgdGVzdCcgJ2ZhbHNlJworCXRlc3RfZXhwZWN0X2ZhaWx1cmUgJ3ByZXRlbmQgd2UgaGF2ZSBhIGtub3duIGJyZWFrYWdlJyAnZmFsc2UnCisJdGVzdF9leHBlY3RfZmFpbHVyZSAncHJldGVuZCB3ZSBoYXZlIGEga25vd24gYnJlYWthZ2UnICdmYWxzZScKKwl0ZXN0X2V4cGVjdF9mYWlsdXJlICdwcmV0ZW5kIHdlIGhhdmUgZml4ZWQgYSBrbm93biBicmVha2FnZScgJ3RydWUnCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgbWl4ZWQtcmVzdWx0czIgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QKKwk+IG9rIDIgLSBwYXNzaW5nIHRlc3QKKwk+IG9rIDMgLSBwYXNzaW5nIHRlc3QKKwk+IG9rIDQgLSBwYXNzaW5nIHRlc3QKKwk+IG5vdCBvayA1IC0gZmFpbGluZyB0ZXN0CisJPiAjCWZhbHNlCisJPiBub3Qgb2sgNiAtIGZhaWxpbmcgdGVzdAorCT4gIwlmYWxzZQorCT4gbm90IG9rIDcgLSBmYWlsaW5nIHRlc3QKKwk+ICMJZmFsc2UKKwk+IG5vdCBvayA4IC0gcHJldGVuZCB3ZSBoYXZlIGEga25vd24gYnJlYWthZ2UgIyBUT0RPIGtub3duIGJyZWFrYWdlCisJPiBub3Qgb2sgOSAtIHByZXRlbmQgd2UgaGF2ZSBhIGtub3duIGJyZWFrYWdlICMgVE9ETyBrbm93biBicmVha2FnZQorCT4gb2sgMTAgLSBwcmV0ZW5kIHdlIGhhdmUgZml4ZWQgYSBrbm93biBicmVha2FnZSAjIFRPRE8ga25vd24gYnJlYWthZ2UgdmFuaXNoZWQKKwk+ICMgMSBrbm93biBicmVha2FnZShzKSB2YW5pc2hlZDsgcGxlYXNlIHVwZGF0ZSB0ZXN0KHMpCisJPiAjIHN0aWxsIGhhdmUgMiBrbm93biBicmVha2FnZShzKQorCT4gIyBmYWlsZWQgMyBhbW9uZyByZW1haW5pbmcgNyB0ZXN0KHMpCisJPiAxLi4xMAorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tdmVyYm9zZScgJworCXRlc3RfbXVzdF9mYWlsIHJ1bl9zdWJfdGVzdF9saWJfdGVzdCBcCisJCXRlc3QtdmVyYm9zZSAidGVzdCB2ZXJib3NlIiAtLXZlcmJvc2UgPDwtXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInBhc3NpbmcgdGVzdCIgdHJ1ZQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInRlc3Qgd2l0aCBvdXRwdXQiICJlY2hvIGZvbyIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmYWlsaW5nIHRlc3QiIGZhbHNlCisJdGVzdF9kb25lCisJRU9GCisJbXYgdGVzdC12ZXJib3NlL291dCB0ZXN0LXZlcmJvc2Uvb3V0KyAmJgorCWdyZXAgLXYgIl5Jbml0aWFsaXplZCBlbXB0eSIgdGVzdC12ZXJib3NlL291dCsgPnRlc3QtdmVyYm9zZS9vdXQgJiYKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCB0ZXN0LXZlcmJvc2UgPDwtXEVPRgorCT4gZXhwZWN0aW5nIHN1Y2Nlc3M6IHRydWUKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QKKwk+IFoKKwk+IGV4cGVjdGluZyBzdWNjZXNzOiBlY2hvIGZvbworCT4gZm9vCisJPiBvayAyIC0gdGVzdCB3aXRoIG91dHB1dAorCT4gWgorCT4gZXhwZWN0aW5nIHN1Y2Nlc3M6IGZhbHNlCisJPiBub3Qgb2sgMyAtIGZhaWxpbmcgdGVzdAorCT4gIwlmYWxzZQorCT4gWgorCT4gIyBmYWlsZWQgMSBhbW9uZyAzIHRlc3QocykKKwk+IDEuLjMKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXZlcmJvc2Utb25seScgJworCXRlc3RfbXVzdF9mYWlsIHJ1bl9zdWJfdGVzdF9saWJfdGVzdCBcCisJCXRlc3QtdmVyYm9zZS1vbmx5LTIgInRlc3QgdmVyYm9zZS1vbmx5PTIiIFwKKwkJLS12ZXJib3NlLW9ubHk9MiA8PC1cRU9GICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicGFzc2luZyB0ZXN0IiB0cnVlCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAidGVzdCB3aXRoIG91dHB1dCIgImVjaG8gZm9vIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZhaWxpbmcgdGVzdCIgZmFsc2UKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCB0ZXN0LXZlcmJvc2Utb25seS0yIDw8LVxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QKKwk+IFoKKwk+IGV4cGVjdGluZyBzdWNjZXNzOiBlY2hvIGZvbworCT4gZm9vCisJPiBvayAyIC0gdGVzdCB3aXRoIG91dHB1dAorCT4gWgorCT4gbm90IG9rIDMgLSBmYWlsaW5nIHRlc3QKKwk+ICMJZmFsc2UKKwk+ICMgZmFpbGVkIDEgYW1vbmcgMyB0ZXN0KHMpCisJPiAxLi4zCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9TS0lQX1RFU1RTJyAiCisJKAorCQlHSVRfU0tJUF9URVNUUz0nZ2l0LjInICYmIGV4cG9ydCBHSVRfU0tJUF9URVNUUyAmJgorCQlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtYmFzaWMgXAorCQkJJ0dJVF9TS0lQX1RFU1RTJyA8PC1cXEVPRiAmJgorCQlmb3IgaSBpbiAxIDIgMworCQlkbworCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJCWRvbmUKKwkJdGVzdF9kb25lCisJCUVPRgorCQljaGVja19zdWJfdGVzdF9saWJfdGVzdCBnaXQtc2tpcC10ZXN0cy1iYXNpYyA8PC1cXEVPRgorCQk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwkJPiBvayAyICMgc2tpcCBwYXNzaW5nIHRlc3QgIzIgKEdJVF9TS0lQX1RFU1RTKQorCQk+IG9rIDMgLSBwYXNzaW5nIHRlc3QgIzMKKwkJPiAjIHBhc3NlZCBhbGwgMyB0ZXN0KHMpCisJCT4gMS4uMworCQlFT0YKKwkpCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9TS0lQX1RFU1RTIHNldmVyYWwgdGVzdHMnICIKKwkoCisJCUdJVF9TS0lQX1RFU1RTPSdnaXQuMiBnaXQuNScgJiYgZXhwb3J0IEdJVF9TS0lQX1RFU1RTICYmCisJCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBnaXQtc2tpcC10ZXN0cy1zZXZlcmFsIFwKKwkJCSdHSVRfU0tJUF9URVNUUyBzZXZlcmFsIHRlc3RzJyA8PC1cXEVPRiAmJgorCQlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCQlkbworCQkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJCWRvbmUKKwkJdGVzdF9kb25lCisJCUVPRgorCQljaGVja19zdWJfdGVzdF9saWJfdGVzdCBnaXQtc2tpcC10ZXN0cy1zZXZlcmFsIDw8LVxcRU9GCisJCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCQk+IG9rIDIgIyBza2lwIHBhc3NpbmcgdGVzdCAjMiAoR0lUX1NLSVBfVEVTVFMpCisJCT4gb2sgMyAtIHBhc3NpbmcgdGVzdCAjMworCQk+IG9rIDQgLSBwYXNzaW5nIHRlc3QgIzQKKwkJPiBvayA1ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzUgKEdJVF9TS0lQX1RFU1RTKQorCQk+IG9rIDYgLSBwYXNzaW5nIHRlc3QgIzYKKwkJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJCT4gMS4uNgorCQlFT0YKKwkpCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9TS0lQX1RFU1RTIHNoIHBhdHRlcm4nICIKKwkoCisJCUdJVF9TS0lQX1RFU1RTPSdnaXQuWzItNV0nICYmIGV4cG9ydCBHSVRfU0tJUF9URVNUUyAmJgorCQlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtc2gtcGF0dGVybiBcCisJCQknR0lUX1NLSVBfVEVTVFMgc2ggcGF0dGVybicgPDwtXFxFT0YgJiYKKwkJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwkJZG8KKwkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCQlkb25lCisJCXRlc3RfZG9uZQorCQlFT0YKKwkJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgZ2l0LXNraXAtdGVzdHMtc2gtcGF0dGVybiA8PC1cXEVPRgorCQk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwkJPiBvayAyICMgc2tpcCBwYXNzaW5nIHRlc3QgIzIgKEdJVF9TS0lQX1RFU1RTKQorCQk+IG9rIDMgIyBza2lwIHBhc3NpbmcgdGVzdCAjMyAoR0lUX1NLSVBfVEVTVFMpCisJCT4gb2sgNCAjIHNraXAgcGFzc2luZyB0ZXN0ICM0IChHSVRfU0tJUF9URVNUUykKKwkJPiBvayA1ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzUgKEdJVF9TS0lQX1RFU1RTKQorCQk+IG9rIDYgLSBwYXNzaW5nIHRlc3QgIzYKKwkJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJCT4gMS4uNgorCQlFT0YKKwkpCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIGJhc2ljJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1iYXNpYyBcCisJCSctLXJ1biBiYXNpYycgLS1ydW49JzEgMyA1JyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1iYXNpYyA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCT4gb2sgMiAjIHNraXAgcGFzc2luZyB0ZXN0ICMyICgtLXJ1bikKKwk+IG9rIDMgLSBwYXNzaW5nIHRlc3QgIzMKKwk+IG9rIDQgIyBza2lwIHBhc3NpbmcgdGVzdCAjNCAoLS1ydW4pCisJPiBvayA1IC0gcGFzc2luZyB0ZXN0ICM1CisJPiBvayA2ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzYgKC0tcnVuKQorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biB3aXRoIGEgcmFuZ2UnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXJhbmdlIFwKKwkJJy0tcnVuIHdpdGggYSByYW5nZScgLS1ydW49JzEtMycgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4tcmFuZ2UgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG9rIDIgLSBwYXNzaW5nIHRlc3QgIzIKKwk+IG9rIDMgLSBwYXNzaW5nIHRlc3QgIzMKKwk+IG9rIDQgIyBza2lwIHBhc3NpbmcgdGVzdCAjNCAoLS1ydW4pCisJPiBvayA1ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzUgKC0tcnVuKQorCT4gb2sgNiAjIHNraXAgcGFzc2luZyB0ZXN0ICM2ICgtLXJ1bikKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gd2l0aCB0d28gcmFuZ2VzJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi10d28tcmFuZ2VzIFwKKwkJJy0tcnVuIHdpdGggdHdvIHJhbmdlcycgLS1ydW49JzEtMiA1LTYnIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXR3by1yYW5nZXMgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG9rIDIgLSBwYXNzaW5nIHRlc3QgIzIKKwk+IG9rIDMgIyBza2lwIHBhc3NpbmcgdGVzdCAjMyAoLS1ydW4pCisJPiBvayA0ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzQgKC0tcnVuKQorCT4gb2sgNSAtIHBhc3NpbmcgdGVzdCAjNQorCT4gb2sgNiAtIHBhc3NpbmcgdGVzdCAjNgorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biB3aXRoIGEgbGVmdCBvcGVuIHJhbmdlJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1sZWZ0LW9wZW4tcmFuZ2UgXAorCQknLS1ydW4gd2l0aCBhIGxlZnQgb3BlbiByYW5nZScgLS1ydW49Jy0zJyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1sZWZ0LW9wZW4tcmFuZ2UgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG9rIDIgLSBwYXNzaW5nIHRlc3QgIzIKKwk+IG9rIDMgLSBwYXNzaW5nIHRlc3QgIzMKKwk+IG9rIDQgIyBza2lwIHBhc3NpbmcgdGVzdCAjNCAoLS1ydW4pCisJPiBvayA1ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzUgKC0tcnVuKQorCT4gb2sgNiAjIHNraXAgcGFzc2luZyB0ZXN0ICM2ICgtLXJ1bikKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gd2l0aCBhIHJpZ2h0IG9wZW4gcmFuZ2UnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXJpZ2h0LW9wZW4tcmFuZ2UgXAorCQknLS1ydW4gd2l0aCBhIHJpZ2h0IG9wZW4gcmFuZ2UnIC0tcnVuPSc0LScgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4tcmlnaHQtb3Blbi1yYW5nZSA8PC1cXEVPRgorCT4gb2sgMSAjIHNraXAgcGFzc2luZyB0ZXN0ICMxICgtLXJ1bikKKwk+IG9rIDIgIyBza2lwIHBhc3NpbmcgdGVzdCAjMiAoLS1ydW4pCisJPiBvayAzICMgc2tpcCBwYXNzaW5nIHRlc3QgIzMgKC0tcnVuKQorCT4gb2sgNCAtIHBhc3NpbmcgdGVzdCAjNAorCT4gb2sgNSAtIHBhc3NpbmcgdGVzdCAjNQorCT4gb2sgNiAtIHBhc3NpbmcgdGVzdCAjNgorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biB3aXRoIGJhc2ljIG5lZ2F0aW9uJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1iYXNpYy1uZWcgXAorCQknLS1ydW4gd2l0aCBiYXNpYyBuZWdhdGlvbicgLS1ydW49JyInITMnIicgPDwtXFxFT0YgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNgorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgI1wkaVwiICd0cnVlJworCWRvbmUKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBydW4tYmFzaWMtbmVnIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJPiBvayAyIC0gcGFzc2luZyB0ZXN0ICMyCisJPiBvayAzICMgc2tpcCBwYXNzaW5nIHRlc3QgIzMgKC0tcnVuKQorCT4gb2sgNCAtIHBhc3NpbmcgdGVzdCAjNAorCT4gb2sgNSAtIHBhc3NpbmcgdGVzdCAjNQorCT4gb2sgNiAtIHBhc3NpbmcgdGVzdCAjNgorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biB3aXRoIHR3byBuZWdhdGlvbnMnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXR3by1uZWcgXAorCQknLS1ydW4gd2l0aCB0d28gbmVnYXRpb25zJyAtLXJ1bj0nIichMyAhNiciJyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi10d28tbmVnIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJPiBvayAyIC0gcGFzc2luZyB0ZXN0ICMyCisJPiBvayAzICMgc2tpcCBwYXNzaW5nIHRlc3QgIzMgKC0tcnVuKQorCT4gb2sgNCAtIHBhc3NpbmcgdGVzdCAjNAorCT4gb2sgNSAtIHBhc3NpbmcgdGVzdCAjNQorCT4gb2sgNiAjIHNraXAgcGFzc2luZyB0ZXN0ICM2ICgtLXJ1bikKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gYSByYW5nZSBhbmQgbmVnYXRpb24nICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXJhbmdlLWFuZC1uZWcgXAorCQknLS1ydW4gYSByYW5nZSBhbmQgbmVnYXRpb24nIC0tcnVuPSciJy00ICEyJyInIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXJhbmdlLWFuZC1uZWcgPDwtXFxFT0YKKwk+IG9rIDEgLSBwYXNzaW5nIHRlc3QgIzEKKwk+IG9rIDIgIyBza2lwIHBhc3NpbmcgdGVzdCAjMiAoLS1ydW4pCisJPiBvayAzIC0gcGFzc2luZyB0ZXN0ICMzCisJPiBvayA0IC0gcGFzc2luZyB0ZXN0ICM0CisJPiBvayA1ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzUgKC0tcnVuKQorCT4gb2sgNiAjIHNraXAgcGFzc2luZyB0ZXN0ICM2ICgtLXJ1bikKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gcmFuZ2UgbmVnYXRpb24nICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLXJhbmdlLW5lZyBcCisJCSctLXJ1biByYW5nZSBuZWdhdGlvbicgLS1ydW49JyInITEtMyciJyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1yYW5nZS1uZWcgPDwtXFxFT0YKKwk+IG9rIDEgIyBza2lwIHBhc3NpbmcgdGVzdCAjMSAoLS1ydW4pCisJPiBvayAyICMgc2tpcCBwYXNzaW5nIHRlc3QgIzIgKC0tcnVuKQorCT4gb2sgMyAjIHNraXAgcGFzc2luZyB0ZXN0ICMzICgtLXJ1bikKKwk+IG9rIDQgLSBwYXNzaW5nIHRlc3QgIzQKKwk+IG9rIDUgLSBwYXNzaW5nIHRlc3QgIzUKKwk+IG9rIDYgLSBwYXNzaW5nIHRlc3QgIzYKKwk+ICMgcGFzc2VkIGFsbCA2IHRlc3QocykKKwk+IDEuLjYKKwlFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ydW4gaW5jbHVkZSwgZXhjbHVkZSBhbmQgaW5jbHVkZScgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4taW5jLW5lZy1pbmMgXAorCQknLS1ydW4gaW5jbHVkZSwgZXhjbHVkZSBhbmQgaW5jbHVkZScgXAorCQktLXJ1bj0nIicxLTUgITEtMyAyJyInIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWluYy1uZWctaW5jIDw8LVxcRU9GCisJPiBvayAxICMgc2tpcCBwYXNzaW5nIHRlc3QgIzEgKC0tcnVuKQorCT4gb2sgMiAtIHBhc3NpbmcgdGVzdCAjMgorCT4gb2sgMyAjIHNraXAgcGFzc2luZyB0ZXN0ICMzICgtLXJ1bikKKwk+IG9rIDQgLSBwYXNzaW5nIHRlc3QgIzQKKwk+IG9rIDUgLSBwYXNzaW5nIHRlc3QgIzUKKwk+IG9rIDYgIyBza2lwIHBhc3NpbmcgdGVzdCAjNiAoLS1ydW4pCisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIGluY2x1ZGUsIGV4Y2x1ZGUgYW5kIGluY2x1ZGUsIGNvbW1hIHNlcGFyYXRlZCcgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4taW5jLW5lZy1pbmMtY29tbWEgXAorCQknLS1ydW4gaW5jbHVkZSwgZXhjbHVkZSBhbmQgaW5jbHVkZSwgY29tbWEgc2VwYXJhdGVkJyBcCisJCS0tcnVuPTEtNSxcITEtMywyIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWluYy1uZWctaW5jLWNvbW1hIDw8LVxcRU9GCisJPiBvayAxICMgc2tpcCBwYXNzaW5nIHRlc3QgIzEgKC0tcnVuKQorCT4gb2sgMiAtIHBhc3NpbmcgdGVzdCAjMgorCT4gb2sgMyAjIHNraXAgcGFzc2luZyB0ZXN0ICMzICgtLXJ1bikKKwk+IG9rIDQgLSBwYXNzaW5nIHRlc3QgIzQKKwk+IG9rIDUgLSBwYXNzaW5nIHRlc3QgIzUKKwk+IG9rIDYgIyBza2lwIHBhc3NpbmcgdGVzdCAjNiAoLS1ydW4pCisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIGV4Y2x1ZGUgYW5kIGluY2x1ZGUnICIKKwlydW5fc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLW5lZy1pbmMgXAorCQknLS1ydW4gZXhjbHVkZSBhbmQgaW5jbHVkZScgXAorCQktLXJ1bj0nIichMy0gNSciJyA8PC1cXEVPRiAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2CisJZG8KKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyBcInBhc3NpbmcgdGVzdCAjXCRpXCIgJ3RydWUnCisJZG9uZQorCXRlc3RfZG9uZQorCUVPRgorCWNoZWNrX3N1Yl90ZXN0X2xpYl90ZXN0IHJ1bi1uZWctaW5jIDw8LVxcRU9GCisJPiBvayAxIC0gcGFzc2luZyB0ZXN0ICMxCisJPiBvayAyIC0gcGFzc2luZyB0ZXN0ICMyCisJPiBvayAzICMgc2tpcCBwYXNzaW5nIHRlc3QgIzMgKC0tcnVuKQorCT4gb2sgNCAjIHNraXAgcGFzc2luZyB0ZXN0ICM0ICgtLXJ1bikKKwk+IG9rIDUgLSBwYXNzaW5nIHRlc3QgIzUKKwk+IG9rIDYgIyBza2lwIHBhc3NpbmcgdGVzdCAjNiAoLS1ydW4pCisJPiAjIHBhc3NlZCBhbGwgNiB0ZXN0KHMpCisJPiAxLi42CisJRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIGVtcHR5IHNlbGVjdG9ycycgIgorCXJ1bl9zdWJfdGVzdF9saWJfdGVzdCBydW4tZW1wdHktc2VsIFwKKwkJJy0tcnVuIGVtcHR5IHNlbGVjdG9ycycgXAorCQktLXJ1bj0nMSwsMywsLDUnIDw8LVxcRU9GICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICNcJGlcIiAndHJ1ZScKKwlkb25lCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3QgcnVuLWVtcHR5LXNlbCA8PC1cXEVPRgorCT4gb2sgMSAtIHBhc3NpbmcgdGVzdCAjMQorCT4gb2sgMiAjIHNraXAgcGFzc2luZyB0ZXN0ICMyICgtLXJ1bikKKwk+IG9rIDMgLSBwYXNzaW5nIHRlc3QgIzMKKwk+IG9rIDQgIyBza2lwIHBhc3NpbmcgdGVzdCAjNCAoLS1ydW4pCisJPiBvayA1IC0gcGFzc2luZyB0ZXN0ICM1CisJPiBvayA2ICMgc2tpcCBwYXNzaW5nIHRlc3QgIzYgKC0tcnVuKQorCT4gIyBwYXNzZWQgYWxsIDYgdGVzdChzKQorCT4gMS4uNgorCUVPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biBpbnZhbGlkIHJhbmdlIHN0YXJ0JyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciBydW4taW52LXJhbmdlLXN0YXJ0IFwKKwkJJy0tcnVuIGludmFsaWQgcmFuZ2Ugc3RhcnQnIFwKKwkJLS1ydW49J2EtNScgPDwtXFxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwicGFzc2luZyB0ZXN0ICMxXCIgJ3RydWUnCisJdGVzdF9kb25lCisJRU9GCisJY2hlY2tfc3ViX3Rlc3RfbGliX3Rlc3RfZXJyIHJ1bi1pbnYtcmFuZ2Utc3RhcnQgXAorCQk8PC1cXEVPRl9PVVQgMzw8LVxcRU9GX0VSUgorCT4gRkFUQUw6IFVuZXhwZWN0ZWQgZXhpdCB3aXRoIGNvZGUgMQorCUVPRl9PVVQKKwk+IGVycm9yOiAtLXJ1bjogaW52YWxpZCBub24tbnVtZXJpYyBpbiByYW5nZSBzdGFydDogJ2EtNScKKwlFT0ZfRVJSCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcnVuIGludmFsaWQgcmFuZ2UgZW5kJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciBydW4taW52LXJhbmdlLWVuZCBcCisJCSctLXJ1biBpbnZhbGlkIHJhbmdlIGVuZCcgXAorCQktLXJ1bj0nMS16JyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgIzFcIiAndHJ1ZScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdF9lcnIgcnVuLWludi1yYW5nZS1lbmQgXAorCQk8PC1cXEVPRl9PVVQgMzw8LVxcRU9GX0VSUgorCT4gRkFUQUw6IFVuZXhwZWN0ZWQgZXhpdCB3aXRoIGNvZGUgMQorCUVPRl9PVVQKKwk+IGVycm9yOiAtLXJ1bjogaW52YWxpZCBub24tbnVtZXJpYyBpbiByYW5nZSBlbmQ6ICcxLXonCisJRU9GX0VSUgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJ1biBpbnZhbGlkIHNlbGVjdG9yJyAiCisJcnVuX3N1Yl90ZXN0X2xpYl90ZXN0X2VyciBydW4taW52LXNlbGVjdG9yIFwKKwkJJy0tcnVuIGludmFsaWQgc2VsZWN0b3InIFwKKwkJLS1ydW49JzE/JyA8PC1cXEVPRiAmJgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXCJwYXNzaW5nIHRlc3QgIzFcIiAndHJ1ZScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdF9lcnIgcnVuLWludi1zZWxlY3RvciBcCisJCTw8LVxcRU9GX09VVCAzPDwtXFxFT0ZfRVJSCisJPiBGQVRBTDogVW5leHBlY3RlZCBleGl0IHdpdGggY29kZSAxCisJRU9GX09VVAorCT4gZXJyb3I6IC0tcnVuOiBpbnZhbGlkIG5vbi1udW1lcmljIGluIHRlc3Qgc2VsZWN0b3I6ICcxPycKKwlFT0ZfRVJSCisiCisKKwordGVzdF9zZXRfcHJlcmVxIEhBVkVJVAoraGF2ZWl0PW5vCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhBVkVJVCAndGVzdCBydW5zIGlmIHByZXJlcXVpc2l0ZSBpcyBzYXRpc2ZpZWQnICcKKwl0ZXN0X2hhdmVfcHJlcmVxIEhBVkVJVCAmJgorCWhhdmVpdD15ZXMKKycKK2RvbnRoYXZlaXQ9eWVzCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERPTlRIQVZFSVQgJ3VubWV0IHByZXJlcXVpc2l0ZSBjYXVzZXMgdGVzdCB0byBiZSBza2lwcGVkJyAnCisJZG9udGhhdmVpdD1ubworJworaWYgdGVzdCAkaGF2ZWl0JGRvbnRoYXZlaXQgIT0geWVzeWVzCit0aGVuCisJc2F5ICJidWcgaW4gdGVzdCBmcmFtZXdvcms6IHByZXJlcXVpc2l0ZSB0YWdzIGRvIG5vdCB3b3JrIHJlbGlhYmx5IgorCWV4aXQgMQorZmkKKwordGVzdF9zZXRfcHJlcmVxIEhBVkVUSElTCitoYXZlaXQ9bm8KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSEFWRVRISVMsSEFWRUlUICd0ZXN0IHJ1bnMgaWYgcHJlcmVxdWlzaXRlcyBhcmUgc2F0aXNmaWVkJyAnCisJdGVzdF9oYXZlX3ByZXJlcSBIQVZFSVQgJiYKKwl0ZXN0X2hhdmVfcHJlcmVxIEhBVkVUSElTICYmCisJaGF2ZWl0PXllcworJworZG9udGhhdmVpdD15ZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSEFWRUlULERPTlRIQVZFSVQgJ3VubWV0IHByZXJlcXVpc2l0ZXMgY2F1c2VzIHRlc3QgdG8gYmUgc2tpcHBlZCcgJworCWRvbnRoYXZlaXQ9bm8KKycKK2RvbnRoYXZlaXRlaXRoZXI9eWVzCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERPTlRIQVZFSVQsSEFWRUlUICd1bm1ldCBwcmVyZXF1aXNpdGVzIGNhdXNlcyB0ZXN0IHRvIGJlIHNraXBwZWQnICcKKwlkb250aGF2ZWl0ZWl0aGVyPW5vCisnCitpZiB0ZXN0ICRoYXZlaXQkZG9udGhhdmVpdCRkb250aGF2ZWl0ZWl0aGVyICE9IHllc3llc3llcwordGhlbgorCXNheSAiYnVnIGluIHRlc3QgZnJhbWV3b3JrOiBtdWx0aXBsZSBwcmVyZXF1aXNpdGUgdGFncyBkbyBub3Qgd29yayByZWxpYWJseSIKKwlleGl0IDEKK2ZpCisKK3Rlc3RfbGF6eV9wcmVyZXEgTEFaWV9UUlVFIHRydWUKK2hhdmV0cnVlPW5vCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExBWllfVFJVRSAndGVzdCBydW5zIGlmIGxhenkgcHJlcmVxIGlzIHNhdGlzZmllZCcgJworCWhhdmV0cnVlPXllcworJworZG9udGhhdmV0cnVlPXllcwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTEFaWV9UUlVFICdtaXNzaW5nIGxhenkgcHJlcmVxcyBza2lwIHRlc3RzJyAnCisJZG9udGhhdmV0cnVlPW5vCisnCisKK2lmIHRlc3QgIiRoYXZldHJ1ZSRkb250aGF2ZXRydWUiICE9IHllc3llcwordGhlbgorCXNheSAnYnVnIGluIHRlc3QgZnJhbWV3b3JrOiBsYXp5IHByZXJlcXVpc2l0ZXMgZG8gbm90IHdvcmsnCisJZXhpdCAxCitmaQorCit0ZXN0X2xhenlfcHJlcmVxIExBWllfRkFMU0UgZmFsc2UKK25vdGhhdmVmYWxzZT1ubwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTEFaWV9GQUxTRSAnbmVnYXRpdmUgbGF6eSBwcmVyZXFzIGNoZWNrZWQnICcKKwlub3RoYXZlZmFsc2U9eWVzCisnCitoYXZlZmFsc2U9eWVzCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExBWllfRkFMU0UgJ21pc3NpbmcgbmVnYXRpdmUgbGF6eSBwcmVyZXFzIHdpbGwgc2tpcCcgJworCWhhdmVmYWxzZT1ubworJworCitpZiB0ZXN0ICIkbm90aGF2ZWZhbHNlJGhhdmVmYWxzZSIgIT0geWVzeWVzCit0aGVuCisJc2F5ICdidWcgaW4gdGVzdCBmcmFtZXdvcms6IG5lZ2F0aXZlIGxhenkgcHJlcmVxdWlzaXRlcyBkbyBub3Qgd29yaycKKwlleGl0IDEKK2ZpCisKK2NsZWFuPW5vCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0cyBjbGVhbiB1cCBhZnRlciB0aGVtc2VsdmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFuPXllcworJworCitpZiB0ZXN0ICRjbGVhbiAhPSB5ZXMKK3RoZW4KKwlzYXkgImJ1ZyBpbiB0ZXN0IGZyYW1ld29yazogYmFzaWMgY2xlYW51cCBjb21tYW5kIGRvZXMgbm90IHdvcmsgcmVsaWFibHkiCisJZXhpdCAxCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0cyBjbGVhbiB1cCBldmVuIG9uIGZhaWx1cmVzJyAiCisJdGVzdF9tdXN0X2ZhaWwgcnVuX3N1Yl90ZXN0X2xpYl90ZXN0IFwKKwkJZmFpbGluZy1jbGVhbnVwICdGYWlsaW5nIHRlc3RzIHdpdGggY2xlYW51cCBjb21tYW5kcycgPDwtXFxFT0YgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0cyBjbGVhbiB1cCBldmVuIGFmdGVyIGEgZmFpbHVyZScgJworCQl0b3VjaCBjbGVhbi1hZnRlci1mYWlsdXJlICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBybSBjbGVhbi1hZnRlci1mYWlsdXJlICYmCisJCShleGl0IDEpCisJJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWx1cmUgdG8gY2xlYW4gdXAgY2F1c2VzIHRoZSB0ZXN0IHRvIGZhaWwnICcKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIFwiKGV4aXQgMilcIgorCScKKwl0ZXN0X2RvbmUKKwlFT0YKKwljaGVja19zdWJfdGVzdF9saWJfdGVzdCBmYWlsaW5nLWNsZWFudXAgPDwtXFxFT0YKKwk+IG5vdCBvayAxIC0gdGVzdHMgY2xlYW4gdXAgZXZlbiBhZnRlciBhIGZhaWx1cmUKKwk+ICMJWgorCT4gIwl0b3VjaCBjbGVhbi1hZnRlci1mYWlsdXJlICYmCisJPiAjCXRlc3Rfd2hlbl9maW5pc2hlZCBybSBjbGVhbi1hZnRlci1mYWlsdXJlICYmCisJPiAjCShleGl0IDEpCisJPiAjCVoKKwk+IG5vdCBvayAyIC0gZmFpbHVyZSB0byBjbGVhbiB1cCBjYXVzZXMgdGhlIHRlc3QgdG8gZmFpbAorCT4gIwlaCisJPiAjCXRlc3Rfd2hlbl9maW5pc2hlZCBcIihleGl0IDIpXCIKKwk+ICMJWgorCT4gIyBmYWlsZWQgMiBhbW9uZyAyIHRlc3QocykKKwk+IDEuLjIKKwlFT0YKKyIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBCYXNpY3Mgb2YgdGhlIGJhc2ljcworCisjIHVwZGF0aW5nIGEgbmV3IGZpbGUgd2l0aG91dCAtLWFkZCBzaG91bGQgZmFpbC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB1cGRhdGUtaW5kZXggd2l0aG91dCAtLWFkZCBzaG91bGQgZmFpbCBhZGRpbmcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IHNob3VsZC1iZS1lbXB0eQorJworCisjIGFuZCB3aXRoIC0tYWRkIGl0IHNob3VsZCBzdWNjZWVkLCBldmVuIGlmIGl0IGlzIGVtcHR5IChpdCB1c2VkIHRvIGZhaWwpLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHVwZGF0ZS1pbmRleCB3aXRoIC0tYWRkIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBzaG91bGQtYmUtZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlJyAnCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKQorJworCisjIHdlIGtub3cgdGhlIHNoYXBlIGFuZCBjb250ZW50cyBvZiB0aGUgdHJlZSBhbmQga25vdyB0aGUgb2JqZWN0IElEIGZvciBpdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIG9iamVjdCBJRCBvZiBhIGtub3duIHRyZWUnICcKKwl0ZXN0ICIkdHJlZSIgPSA3YmI5NDM1NTlhMzA1YmRkNmJkZWUyY2VmNmU1ZGYyNDEzYzNkMzBhCisgICAgJworCisjIFJlbW92aW5nIHBhdGhzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHVwZGF0ZS1pbmRleCB3aXRob3V0IC0tcmVtb3ZlIHNob3VsZCBmYWlsIHJlbW92aW5nJyAnCisJcm0gLWYgc2hvdWxkLWJlLWVtcHR5IGZ1bGwtb2YtZGlyZWN0b3JpZXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IHNob3VsZC1iZS1lbXB0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdXBkYXRlLWluZGV4IHdpdGggLS1yZW1vdmUgc2hvdWxkIGJlIGFibGUgdG8gcmVtb3ZlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBzaG91bGQtYmUtZW1wdHkKKycKKworIyBFbXB0eSB0cmVlIGNhbiBiZSB3cml0dGVuIHdpdGggcmVjZW50IHdyaXRlLXRyZWUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgd3JpdGUtdHJlZSBzaG91bGQgYmUgYWJsZSB0byB3cml0ZSBhbiBlbXB0eSB0cmVlJyAnCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBvYmplY3QgSUQgb2YgYSBrbm93biB0cmVlJyAnCisJdGVzdCAiJHRyZWUiID0gNGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNAorJworCisjIFZhcmlvdXMgdHlwZXMgb2Ygb2JqZWN0cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpbmcgdmFyaW91cyB0eXBlcyBvZiBvYmplY3RzIHdpdGggZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCcgJworCW1rZGlyIHBhdGgyIHBhdGgzIHBhdGgzL3N1YnAzICYmCisJcGF0aHM9InBhdGgwIHBhdGgyL2ZpbGUyIHBhdGgzL2ZpbGUzIHBhdGgzL3N1YnAzL2ZpbGUzIiAmJgorCSgKKwkJZm9yIHAgaW4gJHBhdGhzCisJCWRvCisJCQllY2hvICJoZWxsbyAkcCIgPiRwIHx8IGV4aXQgMQorCQkJdGVzdF9sbl9zX2FkZCAiaGVsbG8gJHAiICR7cH1zeW0gfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisJZmluZCBwYXRoKiAhIC10eXBlIGQgLXByaW50IHwgeGFyZ3MgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZAorJworCisjIFNob3cgdGhlbSBhbmQgc2VlIHRoYXQgbWF0Y2hlcyB3aGF0IHdlIGV4cGVjdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgc3RhZ2Ugd2l0aCBnaXQgbHMtZmlsZXMgLS1zdGFnZScgJworCWdpdCBscy1maWxlcyAtLXN0YWdlID5jdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIGdpdCBscy1maWxlcyBvdXRwdXQgZm9yIGEga25vd24gdHJlZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTEwMDY0NCBmODcyOTBmOGViMmNiYmVhNzg1NzIxNDQ1OWEwNzM5OTI3ZWFiMTU0IDAJcGF0aDAKKwkxMjAwMDAgMTVhOTg0MzNhZTMzMTE0YjA4NWYzZWIzYmIwM2I4MzJiMzE4MGEwMSAwCXBhdGgwc3ltCisJMTAwNjQ0IDNmZWZmOTQ5ZWQwMGE2MmQ5ZjdhZjk3YzE1Y2Q4YTMwNTk1ZTdhYzcgMAlwYXRoMi9maWxlMgorCTEyMDAwMCBkOGNlMTYxYWRkYzUxNzM4NjdhM2MzYzczMDkyNDM4OGRhZWRiYzM4IDAJcGF0aDIvZmlsZTJzeW0KKwkxMDA2NDQgMGFhMzRjYWU2OGQwODc4NTc4YWQxMTljODZjYTJiNWVkNWIyODM3NiAwCXBhdGgzL2ZpbGUzCisJMTIwMDAwIDg1OTkxMDM5NjliNDNhZmY3ZTQzMGVmZWE3OWNhNDYzNjQ2Njc5NGYgMAlwYXRoMy9maWxlM3N5bQorCTEwMDY0NCAwMGZiNTkwOGNiOTdjMjU2NGE5NzgzYzBjNjQwODczMzNiM2I0NjRmIDAJcGF0aDMvc3VicDMvZmlsZTMKKwkxMjAwMDAgNjY0OWExZWJlOWU5ZjFjNTUzYjY2ZjVhNmU3NDEzNmEwN2NjYzU3YyAwCXBhdGgzL3N1YnAzL2ZpbGUzc3ltCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHRyZWUgb3V0IHdpdGggZ2l0IHdyaXRlLXRyZWUnICcKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIG9iamVjdCBJRCBmb3IgYSBrbm93biB0cmVlJyAnCisJdGVzdCAiJHRyZWUiID0gMDg3NzA0YTk2YmFmMWMyZDFjODY5YThiMDg0NDgxZTEyMWM4OGI1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIHRyZWUgd2l0aCBnaXQgbHMtdHJlZScgJworICAgIGdpdCBscy10cmVlICR0cmVlID5jdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy10cmVlIG91dHB1dCBmb3IgYSBrbm93biB0cmVlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJMTAwNjQ0IGJsb2IgZjg3MjkwZjhlYjJjYmJlYTc4NTcyMTQ0NTlhMDczOTkyN2VhYjE1NAlwYXRoMAorCTEyMDAwMCBibG9iIDE1YTk4NDMzYWUzMzExNGIwODVmM2ViM2JiMDNiODMyYjMxODBhMDEJcGF0aDBzeW0KKwkwNDAwMDAgdHJlZSA1OGEwOWMyM2UyY2ExNTIxOTNmMjc4NmUwNjk4NmI3YjY3MTJiZGJlCXBhdGgyCisJMDQwMDAwIHRyZWUgMjFhZTgyNjljYWNiZTU3YWUwOTEzOGRjYzNhMjg4N2Y5MDRkMDJiMwlwYXRoMworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKworIyBUaGlzIGNoYW5nZWQgaW4gbHMtdHJlZSBwYXRoc3BlYyBjaGFuZ2UgLS0gcmVjdXJzaXZlIGRvZXMKKyMgbm90IHNob3cgdHJlZSBub2RlcyBhbnltb3JlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyB0cmVlIHdpdGggZ2l0IGxzLXRyZWUgLXInICcKKwlnaXQgbHMtdHJlZSAtciAkdHJlZSA+Y3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtdHJlZSAtciBvdXRwdXQgZm9yIGEga25vd24gdHJlZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTEwMDY0NCBibG9iIGY4NzI5MGY4ZWIyY2JiZWE3ODU3MjE0NDU5YTA3Mzk5MjdlYWIxNTQJcGF0aDAKKwkxMjAwMDAgYmxvYiAxNWE5ODQzM2FlMzMxMTRiMDg1ZjNlYjNiYjAzYjgzMmIzMTgwYTAxCXBhdGgwc3ltCisJMTAwNjQ0IGJsb2IgM2ZlZmY5NDllZDAwYTYyZDlmN2FmOTdjMTVjZDhhMzA1OTVlN2FjNwlwYXRoMi9maWxlMgorCTEyMDAwMCBibG9iIGQ4Y2UxNjFhZGRjNTE3Mzg2N2EzYzNjNzMwOTI0Mzg4ZGFlZGJjMzgJcGF0aDIvZmlsZTJzeW0KKwkxMDA2NDQgYmxvYiAwYWEzNGNhZTY4ZDA4Nzg1NzhhZDExOWM4NmNhMmI1ZWQ1YjI4Mzc2CXBhdGgzL2ZpbGUzCisJMTIwMDAwIGJsb2IgODU5OTEwMzk2OWI0M2FmZjdlNDMwZWZlYTc5Y2E0NjM2NDY2Nzk0ZglwYXRoMy9maWxlM3N5bQorCTEwMDY0NCBibG9iIDAwZmI1OTA4Y2I5N2MyNTY0YTk3ODNjMGM2NDA4NzMzM2IzYjQ2NGYJcGF0aDMvc3VicDMvZmlsZTMKKwkxMjAwMDAgYmxvYiA2NjQ5YTFlYmU5ZTlmMWM1NTNiNjZmNWE2ZTc0MTM2YTA3Y2NjNTdjCXBhdGgzL3N1YnAzL2ZpbGUzc3ltCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCisjIEJ1dCB3aXRoIC1yIC10IHdlIGNhbiBoYXZlIGJvdGguCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIHRyZWUgd2l0aCBnaXQgbHMtdHJlZSAtciAtdCcgJworCWdpdCBscy10cmVlIC1yIC10ICR0cmVlID5jdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy10cmVlIC1yIG91dHB1dCBmb3IgYSBrbm93biB0cmVlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJMTAwNjQ0IGJsb2IgZjg3MjkwZjhlYjJjYmJlYTc4NTcyMTQ0NTlhMDczOTkyN2VhYjE1NAlwYXRoMAorCTEyMDAwMCBibG9iIDE1YTk4NDMzYWUzMzExNGIwODVmM2ViM2JiMDNiODMyYjMxODBhMDEJcGF0aDBzeW0KKwkwNDAwMDAgdHJlZSA1OGEwOWMyM2UyY2ExNTIxOTNmMjc4NmUwNjk4NmI3YjY3MTJiZGJlCXBhdGgyCisJMTAwNjQ0IGJsb2IgM2ZlZmY5NDllZDAwYTYyZDlmN2FmOTdjMTVjZDhhMzA1OTVlN2FjNwlwYXRoMi9maWxlMgorCTEyMDAwMCBibG9iIGQ4Y2UxNjFhZGRjNTE3Mzg2N2EzYzNjNzMwOTI0Mzg4ZGFlZGJjMzgJcGF0aDIvZmlsZTJzeW0KKwkwNDAwMDAgdHJlZSAyMWFlODI2OWNhY2JlNTdhZTA5MTM4ZGNjM2EyODg3ZjkwNGQwMmIzCXBhdGgzCisJMTAwNjQ0IGJsb2IgMGFhMzRjYWU2OGQwODc4NTc4YWQxMTljODZjYTJiNWVkNWIyODM3NglwYXRoMy9maWxlMworCTEyMDAwMCBibG9iIDg1OTkxMDM5NjliNDNhZmY3ZTQzMGVmZWE3OWNhNDYzNjQ2Njc5NGYJcGF0aDMvZmlsZTNzeW0KKwkwNDAwMDAgdHJlZSAzYzVlNTM5OWYzYTMzM2VkZGVjY2U3YTliOTQ2NWI2M2Y2NWY1MWUyCXBhdGgzL3N1YnAzCisJMTAwNjQ0IGJsb2IgMDBmYjU5MDhjYjk3YzI1NjRhOTc4M2MwYzY0MDg3MzMzYjNiNDY0ZglwYXRoMy9zdWJwMy9maWxlMworCTEyMDAwMCBibG9iIDY2NDlhMWViZTllOWYxYzU1M2I2NmY1YTZlNzQxMzZhMDdjY2M1N2MJcGF0aDMvc3VicDMvZmlsZTNzeW0KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgcGFydGlhbCB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlIC0tcHJlZml4JyAnCisJcHRyZWU9JChnaXQgd3JpdGUtdHJlZSAtLXByZWZpeD1wYXRoMykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgb2JqZWN0IElEIGZvciBhIGtub3duIHRyZWUnICcKKwl0ZXN0ICIkcHRyZWUiID0gMjFhZTgyNjljYWNiZTU3YWUwOTEzOGRjYzNhMjg4N2Y5MDRkMDJiMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHBhcnRpYWwgdHJlZSBvdXQgd2l0aCBnaXQgd3JpdGUtdHJlZSAtLXByZWZpeCcgJworCXB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUgLS1wcmVmaXg9cGF0aDMvc3VicDMpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIG9iamVjdCBJRCBmb3IgYSBrbm93biB0cmVlJyAnCisJdGVzdCAiJHB0cmVlIiA9IDNjNWU1Mzk5ZjNhMzMzZWRkZWNjZTdhOWI5NDY1YjYzZjY1ZjUxZTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHV0IGludmFsaWQgb2JqZWN0cyBpbnRvIHRoZSBpbmRleCcgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwljYXQgPmJhZG9iamVjdHMgPDwtXEVPRiAmJgorCTEwMDY0NCBibG9iIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAJZGlyL2ZpbGUxCisJMTAwNjQ0IGJsb2IgMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAlkaXIvZmlsZTIKKwkxMDA2NDQgYmxvYiAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCWRpci9maWxlMworCTEwMDY0NCBibG9iIDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAJZGlyL2ZpbGU0CisJMTAwNjQ0IGJsb2IgNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAlkaXIvZmlsZTUKKwlFT0YKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8YmFkb2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIHRoaXMgdHJlZSB3aXRob3V0IC0tbWlzc2luZy1vaycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB3cml0ZS10cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRpbmcgdGhpcyB0cmVlIHdpdGggLS1taXNzaW5nLW9rJyAnCisJZ2l0IHdyaXRlLXRyZWUgLS1taXNzaW5nLW9rCisnCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYWQtdHJlZSBmb2xsb3dlZCBieSB3cml0ZS10cmVlIHNob3VsZCBiZSBpZGVtcG90ZW50JyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCByZWFkLXRyZWUgJHRyZWUgJiYKKwl0ZXN0IC1mIC5naXQvaW5kZXggJiYKKwluZXd0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJdGVzdCAiJG5ld3RyZWUiID0gIiR0cmVlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSBnaXQgZGlmZi1maWxlcyBvdXRwdXQgZm9yIGEga25vdyBjYWNoZS93b3JrIHRyZWUgc3RhdGUnICcKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorOjEwMDY0NCAxMDA2NDQgZjg3MjkwZjhlYjJjYmJlYTc4NTcyMTQ0NTlhMDczOTkyN2VhYjE1NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE0JcGF0aDAKKzoxMjAwMDAgMTIwMDAwIDE1YTk4NDMzYWUzMzExNGIwODVmM2ViM2JiMDNiODMyYjMxODBhMDEgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCXBhdGgwc3ltCis6MTAwNjQ0IDEwMDY0NCAzZmVmZjk0OWVkMDBhNjJkOWY3YWY5N2MxNWNkOGEzMDU5NWU3YWM3IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTQlwYXRoMi9maWxlMgorOjEyMDAwMCAxMjAwMDAgZDhjZTE2MWFkZGM1MTczODY3YTNjM2M3MzA5MjQzODhkYWVkYmMzOCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE0JcGF0aDIvZmlsZTJzeW0KKzoxMDA2NDQgMTAwNjQ0IDBhYTM0Y2FlNjhkMDg3ODU3OGFkMTE5Yzg2Y2EyYjVlZDViMjgzNzYgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCXBhdGgzL2ZpbGUzCis6MTIwMDAwIDEyMDAwMCA4NTk5MTAzOTY5YjQzYWZmN2U0MzBlZmVhNzljYTQ2MzY0NjY3OTRmIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgTQlwYXRoMy9maWxlM3N5bQorOjEwMDY0NCAxMDA2NDQgMDBmYjU5MDhjYjk3YzI1NjRhOTc4M2MwYzY0MDg3MzMzYjNiNDY0ZiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIE0JcGF0aDMvc3VicDMvZmlsZTMKKzoxMjAwMDAgMTIwMDAwIDY2NDlhMWViZTllOWYxYzU1M2I2NmY1YTZlNzQxMzZhMDdjY2M1N2MgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCXBhdGgzL3N1YnAzL2ZpbGUzc3ltCitFT0YKKwlnaXQgZGlmZi1maWxlcyA+Y3VycmVudCAmJgorCXRlc3RfY21wIGN1cnJlbnQgZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBkaWZmIGFmdGVyIGNoZWNrb3V0IGFuZCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCcgJworCWdpdCBkaWZmLWZpbGVzID5jdXJyZW50ICYmCisJY21wIC1zIGN1cnJlbnQgL2Rldi9udWxsCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1A9MDg3NzA0YTk2YmFmMWMyZDFjODY5YThiMDg0NDgxZTEyMWM4OGI1YgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0LXRyZWUgcmVjb3JkcyB0aGUgY29ycmVjdCB0cmVlIGluIGEgY29tbWl0JyAnCisJY29tbWl0MD0kKGVjaG8gTk8gfCBnaXQgY29tbWl0LXRyZWUgJFApICYmCisJdHJlZT0kKGdpdCBzaG93IC0tcHJldHR5PXJhdyAkY29tbWl0MCB8CisJCSBzZWQgLW4gLWUgInMvXnRyZWUgLy9wIiAtZSAiL15hdXRob3IgL3EiKSAmJgorCXRlc3QgInokdHJlZSIgPSAieiRQIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0LXRyZWUgcmVjb3JkcyB0aGUgY29ycmVjdCBwYXJlbnQgaW4gYSBjb21taXQnICcKKwljb21taXQxPSQoZWNobyBOTyB8IGdpdCBjb21taXQtdHJlZSAkUCAtcCAkY29tbWl0MCkgJiYKKwlwYXJlbnQ9JChnaXQgc2hvdyAtLXByZXR0eT1yYXcgJGNvbW1pdDEgfAorCQlzZWQgLW4gLWUgInMvXnBhcmVudCAvL3AiIC1lICIvXmF1dGhvciAvcSIpICYmCisJdGVzdCAieiRjb21taXQwIiA9ICJ6JHBhcmVudCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdC10cmVlIG9taXRzIGR1cGxpY2F0ZWQgcGFyZW50IGluIGEgY29tbWl0JyAnCisJY29tbWl0Mj0kKGVjaG8gTk8gfCBnaXQgY29tbWl0LXRyZWUgJFAgLXAgJGNvbW1pdDAgLXAgJGNvbW1pdDApICYmCisJICAgICBwYXJlbnQ9JChnaXQgc2hvdyAtLXByZXR0eT1yYXcgJGNvbW1pdDIgfAorCQlzZWQgLW4gLWUgInMvXnBhcmVudCAvL3AiIC1lICIvXmF1dGhvciAvcSIgfAorCQlzb3J0IC11KSAmJgorCXRlc3QgInokY29tbWl0MCIgPSAieiRwYXJlbnQiICYmCisJbnVtcGFyZW50PSQoZ2l0IHNob3cgLS1wcmV0dHk9cmF3ICRjb21taXQyIHwKKwkJc2VkIC1uIC1lICJzL15wYXJlbnQgLy9wIiAtZSAiL15hdXRob3IgL3EiIHwKKwkJd2MgLWwpICYmCisJdGVzdCAkbnVtcGFyZW50ID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggRC9GIGNvbmZsaWN0JyAnCisJbXYgcGF0aDAgdG1wICYmCisJbXYgcGF0aDIgcGF0aDAgJiYKKwltdiB0bXAgcGF0aDIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVwbGFjZSBwYXRoMiBwYXRoMC9maWxlMiAmJgorCW51bXBhdGgwPSQoZ2l0IGxzLWZpbGVzIHBhdGgwIHwgd2MgLWwpICYmCisJdGVzdCAkbnVtcGF0aDAgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcnkgbG9uZyBuYW1lIGluIHRoZSBpbmRleCBoYW5kbGVkIHNhbmVseScgJworCisJYT1hICYmICMgMQorCWE9JGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEgJiYgIyAxNgorCWE9JGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEgJiYgIyAyNTYKKwlhPSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhJGEkYSRhICYmICMgNDA5NgorCWE9JHthfXEgJiYKKworCT5wYXRoNCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDQgJiYKKwkoCisJCWdpdCBscy1maWxlcyAtcyBwYXRoNCB8CisJCXNlZCAtZSAicy8JLiovCS8iIHwKKwkJdHIgLWQgIlwwMTIiCisJCWVjaG8gIiRhIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWxlbj0kKGdpdCBscy1maWxlcyAiYSoiIHwgd2MgLWMpICYmCisJdGVzdCAkbGVuID0gNDA5OAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDEtaW5pdC5zaCBiL3QvdDAwMDEtaW5pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOTFiYmNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwMS1pbml0LnNoCkBAIC0wLDAgKzEsMzQyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGluaXQnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19jb25maWcgKCkgeworCWlmIHRlc3QgLWQgIiQxIiAmJiB0ZXN0IC1mICIkMS9jb25maWciICYmIHRlc3QgLWQgIiQxL3JlZnMiCisJdGhlbgorCQk6IGhhcHB5CisJZWxzZQorCQllY2hvICJleHBlY3RlZCBhIGRpcmVjdG9yeSAkMSwgYSBmaWxlICQxL2NvbmZpZyBhbmQgJDEvcmVmcyIKKwkJcmV0dXJuIDEKKwlmaQorCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBQT1NJWFBFUk0gJiYgdGVzdCAteCAiJDEvY29uZmlnIgorCXRoZW4KKwkJZWNobyAiJDEvY29uZmlnIGlzIGV4ZWN1dGFibGU/IgorCQlyZXR1cm4gMQorCWZpCisKKwliYXJlPSQoY2QgIiQxIiAmJiBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmJhcmUpCisJd29ya3RyZWU9JChjZCAiJDEiICYmIGdpdCBjb25maWcgY29yZS53b3JrdHJlZSkgfHwKKwl3b3JrdHJlZT11bnNldAorCisJdGVzdCAiJGJhcmUiID0gIiQyIiAmJiB0ZXN0ICIkd29ya3RyZWUiID0gIiQzIiB8fCB7CisJCWVjaG8gImV4cGVjdGVkIGJhcmU9JDIgd29ya3RyZWU9JDMiCisJCWVjaG8gIiAgICAgZ290IGJhcmU9JGJhcmUgd29ya3RyZWU9JHdvcmt0cmVlIgorCQlyZXR1cm4gMQorCX0KK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4nICcKKwlnaXQgaW5pdCBwbGFpbiAmJgorCWNoZWNrX2NvbmZpZyBwbGFpbi8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWluIG5lc3RlZCBpbiBiYXJlJyAnCisJKAorCQlnaXQgaW5pdCAtLWJhcmUgYmFyZS1hbmNlc3Rvci5naXQgJiYKKwkJY2QgYmFyZS1hbmNlc3Rvci5naXQgJiYKKwkJbWtkaXIgcGxhaW4tbmVzdGVkICYmCisJCWNkIHBsYWluLW5lc3RlZCAmJgorCQlnaXQgaW5pdAorCSkgJiYKKwljaGVja19jb25maWcgYmFyZS1hbmNlc3Rvci5naXQvcGxhaW4tbmVzdGVkLy5naXQgZmFsc2UgdW5zZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4gdGhyb3VnaCBhbGlhc2VkIGNvbW1hbmQsIG91dHNpZGUgYW55IGdpdCByZXBvJyAnCisJKAorCQlIT01FPSQocHdkKS9hbGlhcy1jb25maWcgJiYKKwkJZXhwb3J0IEhPTUUgJiYKKwkJbWtkaXIgYWxpYXMtY29uZmlnICYmCisJCWVjaG8gIlthbGlhc10gYWxpYXNlZGluaXQgPSBpbml0IiA+YWxpYXMtY29uZmlnLy5naXRjb25maWcgJiYKKworCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0kKHB3ZCkgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCisKKwkJbWtkaXIgcGxhaW4tYWxpYXNlZCAmJgorCQljZCBwbGFpbi1hbGlhc2VkICYmCisJCWdpdCBhbGlhc2VkaW5pdAorCSkgJiYKKwljaGVja19jb25maWcgcGxhaW4tYWxpYXNlZC8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWluIG5lc3RlZCB0aHJvdWdoIGFsaWFzZWQgY29tbWFuZCcgJworCSgKKwkJZ2l0IGluaXQgcGxhaW4tYW5jZXN0b3ItYWxpYXNlZCAmJgorCQljZCBwbGFpbi1hbmNlc3Rvci1hbGlhc2VkICYmCisJCWVjaG8gIlthbGlhc10gYWxpYXNlZGluaXQgPSBpbml0IiA+Pi5naXQvY29uZmlnICYmCisJCW1rZGlyIHBsYWluLW5lc3RlZCAmJgorCQljZCBwbGFpbi1uZXN0ZWQgJiYKKwkJZ2l0IGFsaWFzZWRpbml0CisJKSAmJgorCWNoZWNrX2NvbmZpZyBwbGFpbi1hbmNlc3Rvci1hbGlhc2VkL3BsYWluLW5lc3RlZC8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWluIG5lc3RlZCBpbiBiYXJlIHRocm91Z2ggYWxpYXNlZCBjb21tYW5kJyAnCisJKAorCQlnaXQgaW5pdCAtLWJhcmUgYmFyZS1hbmNlc3Rvci1hbGlhc2VkLmdpdCAmJgorCQljZCBiYXJlLWFuY2VzdG9yLWFsaWFzZWQuZ2l0ICYmCisJCWVjaG8gIlthbGlhc10gYWxpYXNlZGluaXQgPSBpbml0IiA+PmNvbmZpZyAmJgorCQlta2RpciBwbGFpbi1uZXN0ZWQgJiYKKwkJY2QgcGxhaW4tbmVzdGVkICYmCisJCWdpdCBhbGlhc2VkaW5pdAorCSkgJiYKKwljaGVja19jb25maWcgYmFyZS1hbmNlc3Rvci1hbGlhc2VkLmdpdC9wbGFpbi1uZXN0ZWQvLmdpdCBmYWxzZSB1bnNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFpbiB3aXRoIEdJVF9XT1JLX1RSRUUnICcKKwlta2RpciBwbGFpbi13dCAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfV09SS19UUkVFPSIkKHB3ZCkvcGxhaW4td3QiIGdpdCBpbml0IHBsYWluLXd0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWluIGJhcmUnICcKKwlnaXQgLS1iYXJlIGluaXQgcGxhaW4tYmFyZS0xICYmCisJY2hlY2tfY29uZmlnIHBsYWluLWJhcmUtMSB0cnVlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsYWluIGJhcmUgd2l0aCBHSVRfV09SS19UUkVFJyAnCisJbWtkaXIgcGxhaW4tYmFyZS0yICYmCisJdGVzdF9tdXN0X2ZhaWwgXAorCQllbnYgR0lUX1dPUktfVFJFRT0iJChwd2QpL3BsYWluLWJhcmUtMiIgXAorCQlnaXQgLS1iYXJlIGluaXQgcGxhaW4tYmFyZS0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESVIgYmFyZScgJworCW1rZGlyIGdpdC1kaXItYmFyZS5naXQgJiYKKwlHSVRfRElSPWdpdC1kaXItYmFyZS5naXQgZ2l0IGluaXQgJiYKKwljaGVja19jb25maWcgZ2l0LWRpci1iYXJlLmdpdCB0cnVlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgLS1iYXJlJyAnCisJZ2l0IGluaXQgLS1iYXJlIGluaXQtYmFyZS5naXQgJiYKKwljaGVja19jb25maWcgaW5pdC1iYXJlLmdpdCB0cnVlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESVIgbm9uLWJhcmUnICcKKworCSgKKwkJbWtkaXIgbm9uLWJhcmUgJiYKKwkJY2Qgbm9uLWJhcmUgJiYKKwkJR0lUX0RJUj0uZ2l0IGdpdCBpbml0CisJKSAmJgorCWNoZWNrX2NvbmZpZyBub24tYmFyZS8uZ2l0IGZhbHNlIHVuc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESVIgJiBHSVRfV09SS19UUkVFICgxKScgJworCisJKAorCQlta2RpciBnaXQtZGlyLXd0LTEuZ2l0ICYmCisJCUdJVF9XT1JLX1RSRUU9JChwd2QpIEdJVF9ESVI9Z2l0LWRpci13dC0xLmdpdCBnaXQgaW5pdAorCSkgJiYKKwljaGVja19jb25maWcgZ2l0LWRpci13dC0xLmdpdCBmYWxzZSAiJChwd2QpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElSICYgR0lUX1dPUktfVFJFRSAoMiknICcKKwlta2RpciBnaXQtZGlyLXd0LTIuZ2l0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IFwKKwkJR0lUX1dPUktfVFJFRT0iJChwd2QpIiBcCisJCUdJVF9ESVI9Z2l0LWRpci13dC0yLmdpdCBcCisJCWdpdCAtLWJhcmUgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWluaXQnICcKKworCSgKKwkJbWtkaXIgYWdhaW4gJiYKKwkJY2QgYWdhaW4gJiYKKwkJZ2l0IGluaXQgPm91dDEgMj5lcnIxICYmCisJCWdpdCBpbml0ID5vdXQyIDI+ZXJyMgorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJJbml0aWFsaXplZCBlbXB0eSIgYWdhaW4vb3V0MSAmJgorCXRlc3RfaTE4bmdyZXAgIlJlaW5pdGlhbGl6ZWQgZXhpc3RpbmciIGFnYWluL291dDIgJiYKKwk+YWdhaW4vZW1wdHkgJiYKKwl0ZXN0X2kxOG5jbXAgYWdhaW4vZW1wdHkgYWdhaW4vZXJyMSAmJgorCXRlc3RfaTE4bmNtcCBhZ2Fpbi9lbXB0eSBhZ2Fpbi9lcnIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCAtLXRlbXBsYXRlJyAnCisJbWtkaXIgdGVtcGxhdGUtc291cmNlICYmCisJZWNobyBjb250ZW50ID50ZW1wbGF0ZS1zb3VyY2UvZmlsZSAmJgorCWdpdCBpbml0IC0tdGVtcGxhdGU9Li4vdGVtcGxhdGUtc291cmNlIHRlbXBsYXRlLWN1c3RvbSAmJgorCXRlc3RfY21wIHRlbXBsYXRlLXNvdXJjZS9maWxlIHRlbXBsYXRlLWN1c3RvbS8uZ2l0L2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCB3aXRoIC0tdGVtcGxhdGUgKGJsYW5rKScgJworCWdpdCBpbml0IHRlbXBsYXRlLXBsYWluICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdGVtcGxhdGUtcGxhaW4vLmdpdC9pbmZvL2V4Y2x1ZGUgJiYKKwlnaXQgaW5pdCAtLXRlbXBsYXRlPSB0ZW1wbGF0ZS1ibGFuayAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRlbXBsYXRlLWJsYW5rLy5naXQvaW5mby9leGNsdWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCBpbml0LnRlbXBsYXRlZGlyIHNldCcgJworCW1rZGlyIHRlbXBsYXRlZGlyLXNvdXJjZSAmJgorCWVjaG8gQ29udGVudCA+dGVtcGxhdGVkaXItc291cmNlL2ZpbGUgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgaW5pdC50ZW1wbGF0ZWRpciAiJHtIT01FfS90ZW1wbGF0ZWRpci1zb3VyY2UiICYmCisJKAorCQlta2RpciB0ZW1wbGF0ZWRpci1zZXQgJiYKKwkJY2QgdGVtcGxhdGVkaXItc2V0ICYmCisJCXNhbmVfdW5zZXQgR0lUX1RFTVBMQVRFX0RJUiAmJgorCQlOT19TRVRfR0lUX1RFTVBMQVRFX0RJUj10ICYmCisJCWV4cG9ydCBOT19TRVRfR0lUX1RFTVBMQVRFX0RJUiAmJgorCQlnaXQgaW5pdAorCSkgJiYKKwl0ZXN0X2NtcCB0ZW1wbGF0ZWRpci1zb3VyY2UvZmlsZSB0ZW1wbGF0ZWRpci1zZXQvLmdpdC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgLS1iYXJlLy0tc2hhcmVkIG92ZXJyaWRlcyBzeXN0ZW0vZ2xvYmFsIGNvbmZpZycgJworCXRlc3RfY29uZmlnX2dsb2JhbCBjb3JlLmJhcmUgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgY29yZS5zaGFyZWRSZXBvc2l0b3J5IDA2NDAgJiYKKwlnaXQgaW5pdCAtLWJhcmUgLS1zaGFyZWQ9MDY2NiBpbml0LWJhcmUtc2hhcmVkLW92ZXJyaWRlICYmCisJY2hlY2tfY29uZmlnIGluaXQtYmFyZS1zaGFyZWQtb3ZlcnJpZGUgdHJ1ZSB1bnNldCAmJgorCXRlc3QgeDA2NjYgPSBcCisJeCQoZ2l0IGNvbmZpZyAtZiBpbml0LWJhcmUtc2hhcmVkLW92ZXJyaWRlL2NvbmZpZyBjb3JlLnNoYXJlZFJlcG9zaXRvcnkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgaG9ub3JzIGdsb2JhbCBjb3JlLnNoYXJlZFJlcG9zaXRvcnknICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgY29yZS5zaGFyZWRSZXBvc2l0b3J5IDA2NjYgJiYKKwlnaXQgaW5pdCBzaGFyZWQtaG9ub3ItZ2xvYmFsICYmCisJdGVzdCB4MDY2NiA9IFwKKwl4JChnaXQgY29uZmlnIC1mIHNoYXJlZC1ob25vci1nbG9iYWwvLmdpdC9jb25maWcgY29yZS5zaGFyZWRSZXBvc2l0b3J5KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGFsbG93cyBpbnNhbmVseSBsb25nIC0tdGVtcGxhdGUnICcKKwlnaXQgaW5pdCAtLXRlbXBsYXRlPSQocHJpbnRmICJ4JTA5OTk5ZHgiIDEpIHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBjcmVhdGVzIGEgbmV3IGRpcmVjdG9yeScgJworCXJtIC1mciBuZXdkaXIgJiYKKwlnaXQgaW5pdCBuZXdkaXIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIG5ld2Rpci8uZ2l0L3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBjcmVhdGVzIGEgbmV3IGJhcmUgZGlyZWN0b3J5JyAnCisJcm0gLWZyIG5ld2RpciAmJgorCWdpdCBpbml0IC0tYmFyZSBuZXdkaXIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIG5ld2Rpci9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgcmVjcmVhdGVzIGEgZGlyZWN0b3J5JyAnCisJcm0gLWZyIG5ld2RpciAmJgorCW1rZGlyIG5ld2RpciAmJgorCWdpdCBpbml0IG5ld2RpciAmJgorCXRlc3RfcGF0aF9pc19kaXIgbmV3ZGlyLy5naXQvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHJlY3JlYXRlcyBhIG5ldyBiYXJlIGRpcmVjdG9yeScgJworCXJtIC1mciBuZXdkaXIgJiYKKwlta2RpciBuZXdkaXIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgbmV3ZGlyICYmCisJdGVzdF9wYXRoX2lzX2RpciBuZXdkaXIvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGNyZWF0ZXMgYSBuZXcgZGVlcCBkaXJlY3RvcnknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJZ2l0IGluaXQgbmV3ZGlyL2EvYi9jICYmCisJdGVzdF9wYXRoX2lzX2RpciBuZXdkaXIvYS9iL2MvLmdpdC9yZWZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICdpbml0IGNyZWF0ZXMgYSBuZXcgZGVlcCBkaXJlY3RvcnkgKHVtYXNrIHZzLiBzaGFyZWQpJyAnCisJcm0gLWZyIG5ld2RpciAmJgorCSgKKwkJIyBMZWFkaW5nIGRpcmVjdG9yaWVzIHNob3VsZCBob25vciB1bWFzayB3aGlsZQorCQkjIHRoZSByZXBvc2l0b3J5IGl0c2VsZiBzaG91bGQgZm9sbG93ICJzaGFyZWQiCisJCXVtYXNrIDAwMiAmJgorCQlnaXQgaW5pdCAtLWJhcmUgLS1zaGFyZWQ9MDY2MCBuZXdkaXIvYS9iL2MgJiYKKwkJdGVzdF9wYXRoX2lzX2RpciBuZXdkaXIvYS9iL2MvcmVmcyAmJgorCQlscyAtbGQgbmV3ZGlyL2EgbmV3ZGlyL2EvYiA+IGxzYWIub3V0ICYmCisJCSEgZ3JlcCAtdiAiXmRyd3hyd1tzeF1yLXgiIGxzYWIub3V0ICYmCisJCWxzIC1sZCBuZXdkaXIvYS9iL2MgPiBsc2Mub3V0ICYmCisJCSEgZ3JlcCAtdiAiXmRyd3hyd1tzeF0tLS0iIGxzYy5vdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgbm90aWNlcyBFRVhJU1QgKDEpJyAnCisJcm0gLWZyIG5ld2RpciAmJgorCT5uZXdkaXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW5pdCBuZXdkaXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBuZXdkaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBub3RpY2VzIEVFWElTVCAoMiknICcKKwlybSAtZnIgbmV3ZGlyICYmCisJbWtkaXIgbmV3ZGlyICYmCisJPm5ld2Rpci9hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluaXQgbmV3ZGlyL2EvYiAmJgorCXRlc3RfcGF0aF9pc19maWxlIG5ld2Rpci9hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnaW5pdCBub3RpY2VzIEVQRVJNJyAnCisJcm0gLWZyIG5ld2RpciAmJgorCW1rZGlyIG5ld2RpciAmJgorCWNobW9kIC13IG5ld2RpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBpbml0IG5ld2Rpci9hL2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBjcmVhdGVzIGEgbmV3IGJhcmUgZGlyZWN0b3J5IHdpdGggZ2xvYmFsIC0tYmFyZScgJworCXJtIC1yZiBuZXdkaXIgJiYKKwlnaXQgLS1iYXJlIGluaXQgbmV3ZGlyICYmCisJdGVzdF9wYXRoX2lzX2RpciBuZXdkaXIvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHByZWZlcnMgY29tbWFuZCBsaW5lIHRvIEdJVF9ESVInICcKKwlybSAtcmYgbmV3ZGlyICYmCisJbWtkaXIgb3RoZXJkaXIgJiYKKwlHSVRfRElSPW90aGVyZGlyIGdpdCAtLWJhcmUgaW5pdCBuZXdkaXIgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIG5ld2Rpci9yZWZzICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgb3RoZXJkaXIvcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGggc2VwYXJhdGUgZ2l0ZGlyJyAnCisJcm0gLXJmIG5ld2RpciAmJgorCWdpdCBpbml0IC0tc2VwYXJhdGUtZ2l0LWRpciByZWFsZ2l0ZGlyIG5ld2RpciAmJgorCWVjaG8gImdpdGRpcjogJChwd2QpL3JlYWxnaXRkaXIiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG5ld2Rpci8uZ2l0ICYmCisJdGVzdF9wYXRoX2lzX2RpciByZWFsZ2l0ZGlyL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtaW5pdCBvbiAuZ2l0IGZpbGUnICcKKwkoIGNkIG5ld2RpciAmJiBnaXQgaW5pdCApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlLWluaXQgdG8gdXBkYXRlIGdpdCBsaW5rJyAnCisJKAorCWNkIG5ld2RpciAmJgorCWdpdCBpbml0IC0tc2VwYXJhdGUtZ2l0LWRpciAuLi9zdXJyZWFsZ2l0ZGlyCisJKSAmJgorCWVjaG8gImdpdGRpcjogJChwd2QpL3N1cnJlYWxnaXRkaXIiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG5ld2Rpci8uZ2l0ICYmCisJdGVzdF9wYXRoX2lzX2RpciBzdXJyZWFsZ2l0ZGlyL3JlZnMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyByZWFsZ2l0ZGlyL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtaW5pdCB0byBtb3ZlIGdpdGRpcicgJworCXJtIC1yZiBuZXdkaXIgcmVhbGdpdGRpciBzdXJyZWFsZ2l0ZGlyICYmCisJZ2l0IGluaXQgbmV3ZGlyICYmCisJKAorCWNkIG5ld2RpciAmJgorCWdpdCBpbml0IC0tc2VwYXJhdGUtZ2l0LWRpciAuLi9yZWFsZ2l0ZGlyCisJKSAmJgorCWVjaG8gImdpdGRpcjogJChwd2QpL3JlYWxnaXRkaXIiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG5ld2Rpci8uZ2l0ICYmCisJdGVzdF9wYXRoX2lzX2RpciByZWFsZ2l0ZGlyL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncmUtaW5pdCB0byBtb3ZlIGdpdGRpciBzeW1saW5rJyAnCisJcm0gLXJmIG5ld2RpciByZWFsZ2l0ZGlyICYmCisJZ2l0IGluaXQgbmV3ZGlyICYmCisJKAorCWNkIG5ld2RpciAmJgorCW12IC5naXQgaGVyZSAmJgorCWxuIC1zIGhlcmUgLmdpdCAmJgorCWdpdCBpbml0IC0tc2VwYXJhdGUtZ2l0LWRpciAuLi9yZWFsZ2l0ZGlyCisJKSAmJgorCWVjaG8gImdpdGRpcjogJChwd2QpL3JlYWxnaXRkaXIiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG5ld2Rpci8uZ2l0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbmV3ZGlyL2hlcmUgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHJlYWxnaXRkaXIvcmVmcworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDItZ2l0ZmlsZS5zaCBiL3QvdDAwMDItZ2l0ZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjcwZThjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwMi1naXRmaWxlLnNoCkBAIC0wLDAgKzEsMTYxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nLmdpdCBmaWxlCisKK1ZlcmlmeSB0aGF0IHBsdW1iaW5nIGNvbW1hbmRzIHdvcmsgd2hlbiAuZ2l0IGlzIGEgZmlsZQorJworLiAuL3Rlc3QtbGliLnNoCisKK29ianBhdGgoKSB7CisJZWNobyAiJDEiIHwgc2VkIC1lICdzfFwoLi5cKXxcMS98JworfQorCitvYmpjaygpIHsKKwlwPSQob2JqcGF0aCAiJDEiKQorCWlmIHRlc3QgISAtZiAiJFJFQUwvb2JqZWN0cy8kcCIKKwl0aGVuCisJCWVjaG8gIk9iamVjdCBub3QgZm91bmQ6ICRSRUFML29iamVjdHMvJHAiCisJCWZhbHNlCisJZmkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCBzZXR1cCcgJworCVJFQUw9IiQocHdkKS8ucmVhbCIgJiYKKwltdiAuZ2l0ICIkUkVBTCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFkIHNldHVwOiBpbnZhbGlkIC5naXQgZmlsZSBmb3JtYXQnICcKKwllY2hvICJnaXRkaXIgJFJFQUwiID4uZ2l0ICYmCisJaWYgZ2l0IHJldi1wYXJzZSAyPi5lcnIKKwl0aGVuCisJCWVjaG8gImdpdCByZXYtcGFyc2UgYWNjZXB0ZWQgYW4gaW52YWxpZCAuZ2l0IGZpbGUiCisJCWZhbHNlCisJZmkgJiYKKwlpZiAhIGdyZXAgIkludmFsaWQgZ2l0ZmlsZSBmb3JtYXQiIC5lcnIKKwl0aGVuCisJCWVjaG8gImdpdCByZXYtcGFyc2UgcmV0dXJuZWQgd3JvbmcgZXJyb3IiCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFkIHNldHVwOiBpbnZhbGlkIC5naXQgZmlsZSBwYXRoJyAnCisJZWNobyAiZ2l0ZGlyOiAkUkVBTC5ub3QiID4uZ2l0ICYmCisJaWYgZ2l0IHJldi1wYXJzZSAyPi5lcnIKKwl0aGVuCisJCWVjaG8gImdpdCByZXYtcGFyc2UgYWNjZXB0ZWQgYW4gaW52YWxpZCAuZ2l0IGZpbGUgcGF0aCIKKwkJZmFsc2UKKwlmaSAmJgorCWlmICEgZ3JlcCAiTm90IGEgZ2l0IHJlcG9zaXRvcnkiIC5lcnIKKwl0aGVuCisJCWVjaG8gImdpdCByZXYtcGFyc2UgcmV0dXJuZWQgd3JvbmcgZXJyb3IiCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWwgc2V0dXAgKyBjaGVjayByZXYtcGFyc2UgLS1naXQtZGlyJyAnCisJZWNobyAiZ2l0ZGlyOiAkUkVBTCIgPi5naXQgJiYKKwl0ZXN0ICIkUkVBTCIgPSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGhhc2gtb2JqZWN0JyAnCisJZWNobyAiZm9vIiA+YmFyICYmCisJU0hBPSQoY2F0IGJhciB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCW9iamNrICRTSEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY2F0LWZpbGUnICcKKwlnaXQgY2F0LWZpbGUgYmxvYiAkU0hBID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBiYXIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHVwZGF0ZS1pbmRleCcgJworCWlmIHRlc3QgLWYgIiRSRUFML2luZGV4IgorCXRoZW4KKwkJZWNobyAiSG1tLCAkUkVBTC9pbmRleCBleGlzdHM/IgorCQlmYWxzZQorCWZpICYmCisJcm0gLWYgIiRSRUFML29iamVjdHMvJChvYmpwYXRoICRTSEEpIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYmFyICYmCisJaWYgISB0ZXN0IC1mICIkUkVBTC9pbmRleCIKKwl0aGVuCisJCWVjaG8gIiRSRUFML2luZGV4IG5vdCBmb3VuZCIKKwkJZmFsc2UKKwlmaSAmJgorCW9iamNrICRTSEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd3JpdGUtdHJlZScgJworCVNIQT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCW9iamNrICRTSEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29tbWl0LXRyZWUnICcKKwlTSEE9JChlY2hvICJjb21taXQgYmFyIiB8IGdpdCBjb21taXQtdHJlZSAkU0hBKSAmJgorCW9iamNrICRTSEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcmV2LWxpc3QnICcKKwllY2hvICRTSEEgPiIkUkVBTC9IRUFEIiAmJgorCXRlc3QgIiRTSEEiID0gIiQoZ2l0IHJldi1saXN0IEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cF9naXRfZGlyIHR3aWNlIGluIHN1YmRpcicgJworCWdpdCBpbml0IHNnZCAmJgorCSgKKwkJY2Qgc2dkICYmCisJCWdpdCBjb25maWcgYWxpYXMubHNmaSBscy1maWxlcyAmJgorCQltdiAuZ2l0IC5yZWFsZ2l0ICYmCisJCWVjaG8gImdpdGRpcjogLnJlYWxnaXQiID4uZ2l0ICYmCisJCW1rZGlyIHN1YmRpciAmJgorCQljZCBzdWJkaXIgJiYKKwkJPmZvbyAmJgorCQlnaXQgYWRkIGZvbyAmJgorCQlnaXQgbHNmaSA+YWN0dWFsICYmCisJCWVjaG8gZm9vID5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VudGVyX3JlcG8gbm9uLXN0cmljdCBtb2RlJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBlbnRlcl9yZXBvICYmCisJKAorCQljZCBlbnRlcl9yZXBvICYmCisJCXRlc3RfdGljayAmJgorCQl0ZXN0X2NvbW1pdCBmb28gJiYKKwkJbXYgLmdpdCAucmVhbGdpdCAmJgorCQllY2hvICJnaXRkaXI6IC5yZWFsZ2l0IiA+LmdpdAorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIGVudGVyX3JlcG8gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTk0NmU5ODVhYjIwZGU3NTdjYTViODcyYjE2ZDY0ZTkyZmYzODAzYTkJSEVBRAorCTk0NmU5ODVhYjIwZGU3NTdjYTViODcyYjE2ZDY0ZTkyZmYzODAzYTkJcmVmcy9oZWFkcy9tYXN0ZXIKKwk5NDZlOTg1YWIyMGRlNzU3Y2E1Yjg3MmIxNmQ2NGU5MmZmMzgwM2E5CXJlZnMvdGFncy9mb28KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW50ZXJfcmVwbyBsaW5rZWQgY2hlY2tvdXQnICcKKwkoCisJCWNkIGVudGVyX3JlcG8gJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAgLi4vZm9vIHJlZnMvdGFncy9mb28KKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBmb28gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTk0NmU5ODVhYjIwZGU3NTdjYTViODcyYjE2ZDY0ZTkyZmYzODAzYTkJSEVBRAorCTk0NmU5ODVhYjIwZGU3NTdjYTViODcyYjE2ZDY0ZTkyZmYzODAzYTkJcmVmcy9oZWFkcy9tYXN0ZXIKKwk5NDZlOTg1YWIyMGRlNzU3Y2E1Yjg3MmIxNmQ2NGU5MmZmMzgwM2E5CXJlZnMvdGFncy9mb28KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW50ZXJfcmVwbyBzdHJpY3QgbW9kZScgJworCWdpdCBscy1yZW1vdGUgLS11cGxvYWQtcGFjaz0iZ2l0IHVwbG9hZC1wYWNrIC0tc3RyaWN0IiBmb28vLmdpdCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJOTQ2ZTk4NWFiMjBkZTc1N2NhNWI4NzJiMTZkNjRlOTJmZjM4MDNhOQlIRUFECisJOTQ2ZTk4NWFiMjBkZTc1N2NhNWI4NzJiMTZkNjRlOTJmZjM4MDNhOQlyZWZzL2hlYWRzL21hc3RlcgorCTk0NmU5ODVhYjIwZGU3NTdjYTViODcyYjE2ZDY0ZTkyZmYzODAzYTkJcmVmcy90YWdzL2ZvbworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMDMtYXR0cmlidXRlcy5zaCBiL3QvdDAwMDMtYXR0cmlidXRlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMGZiYjQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAwMy1hdHRyaWJ1dGVzLnNoCkBAIC0wLDAgKzEsMzAwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj1naXRhdHRyaWJ1dGVzCisKKy4gLi90ZXN0LWxpYi5zaAorCithdHRyX2NoZWNrICgpIHsKKwlwYXRoPSIkMSIgZXhwZWN0PSIkMiIKKworCWdpdCAkMyBjaGVjay1hdHRyIHRlc3QgLS0gIiRwYXRoIiA+YWN0dWFsIDI+ZXJyICYmCisJZWNobyAiJHBhdGg6IHRlc3Q6ICQyIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgLXAgYS9iL2QgYS9jIGIgJiYKKwkoCisJCWVjaG8gIlthdHRyXW5vdGVzdCAhdGVzdCIKKwkJZWNobyAiZgl0ZXN0PWYiCisJCWVjaG8gImEvaSB0ZXN0PWEvaSIKKwkJZWNobyAib25vZmYgdGVzdCAtdGVzdCIKKwkJZWNobyAib2Zmb24gLXRlc3QgdGVzdCIKKwkJZWNobyAibm8gbm90ZXN0IgorCQllY2hvICJBL2UvRiB0ZXN0PUEvZS9GIgorCSkgPi5naXRhdHRyaWJ1dGVzICYmCisJKAorCQllY2hvICJnIHRlc3Q9YS9nIiAmJgorCQllY2hvICJiL2cgdGVzdD1hL2IvZyIKKwkpID5hLy5naXRhdHRyaWJ1dGVzICYmCisJKAorCQllY2hvICJoIHRlc3Q9YS9iL2giICYmCisJCWVjaG8gImQvKiB0ZXN0PWEvYi9kLyoiCisJCWVjaG8gImQveWVzIG5vdGVzdCIKKwkpID5hL2IvLmdpdGF0dHJpYnV0ZXMgJiYKKwkoCisJCWVjaG8gImdsb2JhbCB0ZXN0PWdsb2JhbCIKKwkpID4iJEhPTUUiL2dsb2JhbC1naXRhdHRyaWJ1dGVzICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0LWFsbAorCWY6IHRlc3Q6IGYKKwlhL2Y6IHRlc3Q6IGYKKwlhL2MvZjogdGVzdDogZgorCWEvZzogdGVzdDogYS9nCisJYS9iL2c6IHRlc3Q6IGEvYi9nCisJYi9nOiB0ZXN0OiB1bnNwZWNpZmllZAorCWEvYi9oOiB0ZXN0OiBhL2IvaAorCWEvYi9kL2c6IHRlc3Q6IGEvYi9kLyoKKwlvbm9mZjogdGVzdDogdW5zZXQKKwlvZmZvbjogdGVzdDogc2V0CisJbm86IG5vdGVzdDogc2V0CisJbm86IHRlc3Q6IHVuc3BlY2lmaWVkCisJYS9iL2Qvbm86IG5vdGVzdDogc2V0CisJYS9iL2Qvbm86IHRlc3Q6IGEvYi9kLyoKKwlhL2IvZC95ZXM6IG5vdGVzdDogc2V0CisJYS9iL2QveWVzOiB0ZXN0OiB1bnNwZWNpZmllZAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tYW5kIGxpbmUgY2hlY2tzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1hdHRyIHRlc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciB0ZXN0IC0tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgLS0gZiAmJgorCWVjaG8gImYiIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiAmJgorCWVjaG8gImYiIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiAtLSBmICYmCisJZWNobyAiZiIgfCB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stYXR0ciAtLXN0ZGluIHRlc3QgLS0gZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1hdHRyICIiIC0tIGYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0cmlidXRlIHRlc3QnICcKKwlhdHRyX2NoZWNrIGYgZiAmJgorCWF0dHJfY2hlY2sgYS9mIGYgJiYKKwlhdHRyX2NoZWNrIGEvYy9mIGYgJiYKKwlhdHRyX2NoZWNrIGEvZyBhL2cgJiYKKwlhdHRyX2NoZWNrIGEvYi9nIGEvYi9nICYmCisJYXR0cl9jaGVjayBiL2cgdW5zcGVjaWZpZWQgJiYKKwlhdHRyX2NoZWNrIGEvYi9oIGEvYi9oICYmCisJYXR0cl9jaGVjayBhL2IvZC9nICJhL2IvZC8qIiAmJgorCWF0dHJfY2hlY2sgb25vZmYgdW5zZXQgJiYKKwlhdHRyX2NoZWNrIG9mZm9uIHNldCAmJgorCWF0dHJfY2hlY2sgbm8gdW5zcGVjaWZpZWQgJiYKKwlhdHRyX2NoZWNrIGEvYi9kL25vICJhL2IvZC8qIiAmJgorCWF0dHJfY2hlY2sgYS9iL2QveWVzIHVuc3BlY2lmaWVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHJpYnV0ZSBtYXRjaGluZyBpcyBjYXNlIHNlbnNpdGl2ZSB3aGVuIGNvcmUuaWdub3JlY2FzZT0wJyAnCisKKwl0ZXN0X211c3RfZmFpbCBhdHRyX2NoZWNrIEYgZiAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJdGVzdF9tdXN0X2ZhaWwgYXR0cl9jaGVjayBhL0YgZiAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJdGVzdF9tdXN0X2ZhaWwgYXR0cl9jaGVjayBhL2MvRiBmICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwl0ZXN0X211c3RfZmFpbCBhdHRyX2NoZWNrIGEvRyBhL2cgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCXRlc3RfbXVzdF9mYWlsIGF0dHJfY2hlY2sgYS9CL2cgYS9iL2cgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCXRlc3RfbXVzdF9mYWlsIGF0dHJfY2hlY2sgYS9iL0cgYS9iL2cgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCXRlc3RfbXVzdF9mYWlsIGF0dHJfY2hlY2sgYS9iL0ggYS9iL2ggIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCXRlc3RfbXVzdF9mYWlsIGF0dHJfY2hlY2sgYS9iL0QvZyAiYS9iL2QvKiIgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCXRlc3RfbXVzdF9mYWlsIGF0dHJfY2hlY2sgb05vRmYgdW5zZXQgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCXRlc3RfbXVzdF9mYWlsIGF0dHJfY2hlY2sgb0ZmT24gc2V0ICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIE5PIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwl0ZXN0X211c3RfZmFpbCBhdHRyX2NoZWNrIGEvYi9EL05PICJhL2IvZC8qIiAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJYXR0cl9jaGVjayBhL2IvZC9ZRVMgYS9iL2QvKiAiLWMgY29yZS5pZ25vcmVjYXNlPTAiICYmCisJdGVzdF9tdXN0X2ZhaWwgYXR0cl9jaGVjayBhL0UvZiAiQS9lL0YiICItYyBjb3JlLmlnbm9yZWNhc2U9MCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRyaWJ1dGUgbWF0Y2hpbmcgaXMgY2FzZSBpbnNlbnNpdGl2ZSB3aGVuIGNvcmUuaWdub3JlY2FzZT0xJyAnCisKKwlhdHRyX2NoZWNrIEYgZiAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL0YgZiAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL2MvRiBmICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvRyBhL2cgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9CL2cgYS9iL2cgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9iL0cgYS9iL2cgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9iL0ggYS9iL2ggIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9iL0QvZyAiYS9iL2QvKiIgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgb05vRmYgdW5zZXQgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgb0ZmT24gc2V0ICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIE5PIHVuc3BlY2lmaWVkICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvYi9EL05PICJhL2IvZC8qIiAiLWMgY29yZS5pZ25vcmVjYXNlPTEiICYmCisJYXR0cl9jaGVjayBhL2IvZC9ZRVMgdW5zcGVjaWZpZWQgIi1jIGNvcmUuaWdub3JlY2FzZT0xIiAmJgorCWF0dHJfY2hlY2sgYS9FL2YgIkEvZS9GIiAiLWMgY29yZS5pZ25vcmVjYXNlPTEiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDQVNFX0lOU0VOU0lUSVZFX0ZTICdhZGRpdGlvbmFsIGNhc2UgaW5zZW5zaXRpdml0eSB0ZXN0cycgJworCXRlc3RfbXVzdF9mYWlsIGF0dHJfY2hlY2sgYS9CL0QvZyAiYS9iL2QvKiIgIi1jIGNvcmUuaWdub3JlY2FzZT0wIiAmJgorCXRlc3RfbXVzdF9mYWlsIGF0dHJfY2hlY2sgQS9CL0QvTk8gImEvYi9kLyoiICItYyBjb3JlLmlnbm9yZWNhc2U9MCIgJiYKKwlhdHRyX2NoZWNrIEEvYi9oIGEvYi9oICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIGEvQi9EL2cgImEvYi9kLyoiICItYyBjb3JlLmlnbm9yZWNhc2U9MSIgJiYKKwlhdHRyX2NoZWNrIEEvQi9EL05PICJhL2IvZC8qIiAiLWMgY29yZS5pZ25vcmVjYXNlPTEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vubm9ybWFsaXplZCBwYXRocycgJworCWF0dHJfY2hlY2sgLi9mIGYgJiYKKwlhdHRyX2NoZWNrIC4vYS9nIGEvZyAmJgorCWF0dHJfY2hlY2sgYS8uL2cgYS9nICYmCisJYXR0cl9jaGVjayBhL2MvLi4vYi9nIGEvYi9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbGF0aXZlIHBhdGhzJyAnCisJKGNkIGEgJiYgYXR0cl9jaGVjayAuLi9mIGYpICYmCisJKGNkIGEgJiYgYXR0cl9jaGVjayBmIGYpICYmCisJKGNkIGEgJiYgYXR0cl9jaGVjayBpIGEvaSkgJiYKKwkoY2QgYSAmJiBhdHRyX2NoZWNrIGcgYS9nKSAmJgorCShjZCBhICYmIGF0dHJfY2hlY2sgYi9nIGEvYi9nKSAmJgorCShjZCBiICYmIGF0dHJfY2hlY2sgLi4vYS9mIGYpICYmCisJKGNkIGIgJiYgYXR0cl9jaGVjayAuLi9hL2cgYS9nKSAmJgorCShjZCBiICYmIGF0dHJfY2hlY2sgLi4vYS9iL2cgYS9iL2cpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWZpeGVzIGFyZSBub3QgY29uZnVzZWQgd2l0aCBsZWFkaW5nIGRpcmVjdG9yaWVzJyAnCisJYXR0cl9jaGVjayBhX3BsdXMvZyB1bnNwZWNpZmllZCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlhL2c6IHRlc3Q6IGEvZworCWFfcGx1cy9nOiB0ZXN0OiB1bnNwZWNpZmllZAorCUVPRgorCWdpdCBjaGVjay1hdHRyIHRlc3QgYS9nIGFfcGx1cy9nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcmUuYXR0cmlidXRlc2ZpbGUnICcKKwlhdHRyX2NoZWNrIGdsb2JhbCB1bnNwZWNpZmllZCAmJgorCWdpdCBjb25maWcgY29yZS5hdHRyaWJ1dGVzZmlsZSAiJEhPTUUvZ2xvYmFsLWdpdGF0dHJpYnV0ZXMiICYmCisJYXR0cl9jaGVjayBnbG9iYWwgZ2xvYmFsICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF0dHJpYnV0ZXNmaWxlICJ+L2dsb2JhbC1naXRhdHRyaWJ1dGVzIiAmJgorCWF0dHJfY2hlY2sgZ2xvYmFsIGdsb2JhbCAmJgorCWVjaG8gImdsb2JhbCB0ZXN0PXByZWNlZGVuY2UiID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwlhdHRyX2NoZWNrIGdsb2JhbCBwcmVjZWRlbmNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHJpYnV0ZSB0ZXN0OiByZWFkIHBhdGhzIGZyb20gc3RkaW4nICcKKwlncmVwIC12IG5vdGVzdCA8ZXhwZWN0LWFsbCA+ZXhwZWN0ICYmCisJc2VkIC1lICJzLzouKi8vIiA8ZXhwZWN0IHwgZ2l0IGNoZWNrLWF0dHIgLS1zdGRpbiB0ZXN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHJpYnV0ZSB0ZXN0OiAtLWFsbCBvcHRpb24nICcKKwlncmVwIC12IHVuc3BlY2lmaWVkIDxleHBlY3QtYWxsIHwgc29ydCA+c3BlY2lmaWVkLWFsbCAmJgorCXNlZCAtZSAicy86LiovLyIgPGV4cGVjdC1hbGwgfCB1bmlxID5zdGRpbi1hbGwgJiYKKwlnaXQgY2hlY2stYXR0ciAtLXN0ZGluIC0tYWxsIDxzdGRpbi1hbGwgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBzcGVjaWZpZWQtYWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRyaWJ1dGUgdGVzdDogLS1jYWNoZWQgb3B0aW9uJyAnCisJOiA+ZW1wdHkgJiYKKwlnaXQgY2hlY2stYXR0ciAtLWNhY2hlZCAtLXN0ZGluIC0tYWxsIDxzdGRpbi1hbGwgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwgJiYKKwlnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIGEvLmdpdGF0dHJpYnV0ZXMgYS9iLy5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNoZWNrLWF0dHIgLS1jYWNoZWQgLS1zdGRpbiAtLWFsbCA8c3RkaW4tYWxsIHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgc3BlY2lmaWVkLWFsbCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm9vdCBzdWJkaXIgYXR0cmlidXRlIHRlc3QnICcKKwlhdHRyX2NoZWNrIGEvaSBhL2kgJiYKKwlhdHRyX2NoZWNrIHN1YmRpci9hL2kgdW5zcGVjaWZpZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVnYXRpdmUgcGF0dGVybnMnICcKKwllY2hvICIhZiB0ZXN0PWJhciIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNoZWNrLWF0dHIgdGVzdCAtLSAnIiciJyFmJyInIicgMj5lcnJvcnMgJiYKKwl0ZXN0X2kxOG5ncmVwICJOZWdhdGl2ZSBwYXR0ZXJucyBhcmUgaWdub3JlZCIgZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdHRlcm5zIHN0YXJ0aW5nIHdpdGggZXhjbGFtYXRpb24nICcKKwllY2hvICJcIWYgdGVzdD1mb28iID4uZ2l0YXR0cmlidXRlcyAmJgorCWF0dHJfY2hlY2sgIiFmIiBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIioqIiB0ZXN0JyAnCisJZWNobyAiKiovZiBmb289YmFyIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwljYXQgPDxcRU9GID5leHBlY3QgJiYKK2Y6IGZvbzogYmFyCithL2Y6IGZvbzogYmFyCithL2IvZjogZm9vOiBiYXIKK2EvYi9jL2Y6IGZvbzogYmFyCitFT0YKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImYiID5hY3R1YWwgMj5lcnIgJiYKKwlnaXQgY2hlY2stYXR0ciBmb28gLS0gImEvZiIgPj5hY3R1YWwgMj4+ZXJyICYmCisJZ2l0IGNoZWNrLWF0dHIgZm9vIC0tICJhL2IvZiIgPj5hY3R1YWwgMj4+ZXJyICYmCisJZ2l0IGNoZWNrLWF0dHIgZm9vIC0tICJhL2IvYy9mIiA+PmFjdHVhbCAyPj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIioqIiB3aXRoIG5vIHNsYXNoZXMgdGVzdCcgJworCWVjaG8gImEqKmYgZm9vPWJhciIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNoZWNrLWF0dHIgZm9vIC0tICJmIiA+YWN0dWFsICYmCisJY2F0IDw8XEVPRiA+ZXhwZWN0ICYmCitmOiBmb286IHVuc3BlY2lmaWVkCithZjogZm9vOiBiYXIKK2F4ZjogZm9vOiBiYXIKK2EvZjogZm9vOiB1bnNwZWNpZmllZAorYS9iL2Y6IGZvbzogdW5zcGVjaWZpZWQKK2EvYi9jL2Y6IGZvbzogdW5zcGVjaWZpZWQKK0VPRgorCWdpdCBjaGVjay1hdHRyIGZvbyAtLSAiZiIgPmFjdHVhbCAyPmVyciAmJgorCWdpdCBjaGVjay1hdHRyIGZvbyAtLSAiYWYiID4+YWN0dWFsIDI+ZXJyICYmCisJZ2l0IGNoZWNrLWF0dHIgZm9vIC0tICJheGYiID4+YWN0dWFsIDI+ZXJyICYmCisJZ2l0IGNoZWNrLWF0dHIgZm9vIC0tICJhL2YiID4+YWN0dWFsIDI+PmVyciAmJgorCWdpdCBjaGVjay1hdHRyIGZvbyAtLSAiYS9iL2YiID4+YWN0dWFsIDI+PmVyciAmJgorCWdpdCBjaGVjay1hdHRyIGZvbyAtLSAiYS9iL2MvZiIgPj5hY3R1YWwgMj4+ZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIC0tZ2l0LWRpciBhbmQgLS13b3JrLXRyZWUnICcKKwlta2RpciB1bnJlYWwgcmVhbCAmJgorCWdpdCBpbml0IHJlYWwgJiYKKwllY2hvICJmaWxlIHRlc3Q9aW4tcmVhbCIgPnJlYWwvLmdpdGF0dHJpYnV0ZXMgJiYKKwkoCisJCWNkIHVucmVhbCAmJgorCQlhdHRyX2NoZWNrIGZpbGUgaW4tcmVhbCAiLS1naXQtZGlyIC4uL3JlYWwvLmdpdCAtLXdvcmstdHJlZSAuLi9yZWFsIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmFyZScgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJlIHJlcG9zaXRvcnk6IGNoZWNrIHRoYXQgLmdpdGF0dHJpYnV0ZSBpcyBpZ25vcmVkJyAnCisJKAorCQljZCBiYXJlLmdpdCAmJgorCQkoCisJCQllY2hvICJmCXRlc3Q9ZiIKKwkJCWVjaG8gImEvaSB0ZXN0PWEvaSIKKwkJKSA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJYXR0cl9jaGVjayBmIHVuc3BlY2lmaWVkICYmCisJCWF0dHJfY2hlY2sgYS9mIHVuc3BlY2lmaWVkICYmCisJCWF0dHJfY2hlY2sgYS9jL2YgdW5zcGVjaWZpZWQgJiYKKwkJYXR0cl9jaGVjayBhL2kgdW5zcGVjaWZpZWQgJiYKKwkJYXR0cl9jaGVjayBzdWJkaXIvYS9pIHVuc3BlY2lmaWVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJlIHJlcG9zaXRvcnk6IGNoZWNrIHRoYXQgLS1jYWNoZWQgaG9ub3JzIGluZGV4JyAnCisJKAorCQljZCBiYXJlLmdpdCAmJgorCQlHSVRfSU5ERVhfRklMRT0uLi8uZ2l0L2luZGV4IFwKKwkJZ2l0IGNoZWNrLWF0dHIgLS1jYWNoZWQgLS1zdGRpbiAtLWFsbCA8Li4vc3RkaW4tYWxsIHwKKwkJc29ydCA+YWN0dWFsICYmCisJCXRlc3RfY21wIC4uL3NwZWNpZmllZC1hbGwgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJlIHJlcG9zaXRvcnk6IHRlc3QgaW5mby9hdHRyaWJ1dGVzJyAnCisJKAorCQljZCBiYXJlLmdpdCAmJgorCQkoCisJCQllY2hvICJmCXRlc3Q9ZiIKKwkJCWVjaG8gImEvaSB0ZXN0PWEvaSIKKwkJKSA+aW5mby9hdHRyaWJ1dGVzICYmCisJCWF0dHJfY2hlY2sgZiBmICYmCisJCWF0dHJfY2hlY2sgYS9mIGYgJiYKKwkJYXR0cl9jaGVjayBhL2MvZiBmICYmCisJCWF0dHJfY2hlY2sgYS9pIGEvaSAmJgorCQlhdHRyX2NoZWNrIHN1YmRpci9hL2kgdW5zcGVjaWZpZWQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwNC11bndyaXRhYmxlLnNoIGIvdC90MDAwNC11bndyaXRhYmxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzMTM3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDA0LXVud3JpdGFibGUuc2gKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RldGVjdCB1bndyaXRhYmxlIHJlcG9zaXRvcnkgYW5kIGZhaWwgY29ycmVjdGx5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ3dyaXRlLXRyZWUgc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIDc3NSAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/IiAmJgorCWNobW9kIGEtdyAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdyaXRlLXRyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdjb21taXQgc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIDc3NSAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/IiAmJgorCWNobW9kIGEtdyAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICd1cGRhdGUtaW5kZXggc2hvdWxkIG5vdGljZSB1bndyaXRhYmxlIHJlcG9zaXRvcnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNobW9kIDc3NSAuZ2l0L29iamVjdHMgLmdpdC9vYmplY3RzLz8/IiAmJgorCWVjaG8gNk8gPmZpbGUgJiYKKwljaG1vZCBhLXcgLmdpdC9vYmplY3RzIC5naXQvb2JqZWN0cy8/PyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ2FkZCBzaG91bGQgbm90aWNlIHVud3JpdGFibGUgcmVwb3NpdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgNzc1IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8iICYmCisJZWNobyBiID5maWxlICYmCisJY2htb2QgYS13IC5naXQvb2JqZWN0cyAuZ2l0L29iamVjdHMvPz8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGZpbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDA1LXNpZ25hbHMuc2ggYi90L3QwMDA1LXNpZ25hbHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTdmMjdlYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMDUtc2lnbmFscy5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc2lnbmFscyB3b3JrIGFzIHdlIGV4cGVjdCcKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdCA8PEVPRgordGhyZWUKK3R3bworb25lCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnY2hhaW4gd29ya3MnICcKKwl7IHRlc3Qtc2lnY2hhaW4gPmFjdHVhbDsgcmV0PSQ/OyB9ICYmCisJY2FzZSAiJHJldCIgaW4KKwkxNDMpIHRydWUgOzsgIyBQT1NJWCB3LyBTSUdURVJNPTE1CisJMjcxKSB0cnVlIDs7ICMga3NoIHcvIFNJR1RFUk09MTUKKwkgIDMpIHRydWUgOzsgIyBXaW5kb3dzCisJICAqKSBmYWxzZSA7OworCWVzYWMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdzaWduYWxzIGFyZSBwcm9wYWdhdGVkIHVzaW5nIHNoZWxsIGNvbnZlbnRpb24nICcKKwkjIHdlIHVzZSBleGVjIGhlcmUgdG8gYXZvaWQgYW55IHN1Yi1zaGVsbCBpbnRlcnByZXRhdGlvbgorCSMgb2YgdGhlIGV4aXQgY29kZQorCWdpdCBjb25maWcgYWxpYXMuc2lndGVybSAiIWV4ZWMgdGVzdC1zaWdjaGFpbiIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDE0MyBnaXQgc2lndGVybQorJworCitsYXJnZV9naXQgKCkgeworCWZvciBpIGluICQodGVzdF9zZXEgMSAxMDApCisJZG8KKwkJZ2l0IGRpZmYgLS1jYWNoZWQgLS1iaW5hcnkgfHwgcmV0dXJuCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYmxvYicgJworCXRlc3QtZ2VucmFuZG9tIGZvbyAxNjM4NCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnYSBjb25zdGlwYXRlZCBnaXQgZGllcyB3aXRoIFNJR1BJUEUnICcKKwlPVVQ9JCggKChsYXJnZV9naXQ7IGVjaG8gJD8gMT4mMykgfCA6KSAzPiYxICkgJiYKKwl0ZXN0ICIkT1VUIiAtZXEgMTQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdhIGNvbnN0aXBhdGVkIGdpdCBkaWVzIHdpdGggU0lHUElQRSBldmVuIGlmIHBhcmVudCBpZ25vcmVzIGl0JyAnCisJT1VUPSQoICgodHJhcCAiIiBQSVBFOyBsYXJnZV9naXQ7IGVjaG8gJD8gMT4mMykgfCA6KSAzPiYxICkgJiYKKwl0ZXN0ICIkT1VUIiAtZXEgMTQxCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwNi1kYXRlLnNoIGIvdC90MDAwNi1kYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZhYzA5ODYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDA2LWRhdGUuc2gKQEAgLTAsMCArMSw4OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGF0ZSBwYXJzaW5nIGFuZCBwcmludGluZycKKy4gLi90ZXN0LWxpYi5zaAorCisjIGFyYml0cmFyeSByZWZlcmVuY2UgdGltZTogMjAwOS0wOC0zMCAxOToyMDowMAorVEVTVF9EQVRFX05PVz0xMjUxNjYwMDAwOyBleHBvcnQgVEVTVF9EQVRFX05PVworCitjaGVja19zaG93KCkgeworCXQ9JCgoJFRFU1RfREFURV9OT1cgLSAkMSkpCisJZWNobyAiJHQgLT4gJDIiID5leHBlY3QKKwl0ZXN0X2V4cGVjdF8kezM6LXN1Y2Nlc3N9ICJyZWxhdGl2ZSBkYXRlICgkMikiICIKKwl0ZXN0LWRhdGUgc2hvdyAkdCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKwkiCit9CisKK2NoZWNrX3Nob3cgNSAnNSBzZWNvbmRzIGFnbycKK2NoZWNrX3Nob3cgMzAwICc1IG1pbnV0ZXMgYWdvJworY2hlY2tfc2hvdyAxODAwMCAnNSBob3VycyBhZ28nCitjaGVja19zaG93IDQzMjAwMCAnNSBkYXlzIGFnbycKK2NoZWNrX3Nob3cgMTcyODAwMCAnMyB3ZWVrcyBhZ28nCitjaGVja19zaG93IDEzMDAwMDAwICc1IG1vbnRocyBhZ28nCitjaGVja19zaG93IDM3NTAwMDAwICcxIHllYXIsIDIgbW9udGhzIGFnbycKK2NoZWNrX3Nob3cgNTUxODgwMDAgJzEgeWVhciwgOSBtb250aHMgYWdvJworY2hlY2tfc2hvdyA2MzAwMDAwMDAgJzIwIHllYXJzIGFnbycKK2NoZWNrX3Nob3cgMzE0NDk2MDAgJzEyIG1vbnRocyBhZ28nCitjaGVja19zaG93IDYyOTg1NjAwICcyIHllYXJzIGFnbycKKworY2hlY2tfcGFyc2UoKSB7CisJZWNobyAiJDEgLT4gJDIiID5leHBlY3QKKwl0ZXN0X2V4cGVjdF8kezQ6LXN1Y2Nlc3N9ICJwYXJzZSBkYXRlICgkMSR7MzorIFRaPSQzfSkiICIKKwlUWj0kezM6LSRUWn0gdGVzdC1kYXRlIHBhcnNlICckMScgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkiCit9CisKK2NoZWNrX3BhcnNlIDIwMDggYmFkCitjaGVja19wYXJzZSAyMDA4LTAyIGJhZAorY2hlY2tfcGFyc2UgMjAwOC0wMi0xNCBiYWQKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1JyAnMjAwOC0wMi0xNCAyMDozMDo0NSArMDAwMCcKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNTAwJyAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDUwMCcKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wMDE1JyAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDAxNScKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC01JyAnMjAwOC0wMi0xNCAyMDozMDo0NSArMDAwMCcKK2NoZWNrX3BhcnNlICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC01OicgJzIwMDgtMDItMTQgMjA6MzA6NDUgKzAwMDAnCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDUnICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNTAwJworY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUgLTozMCcgJzIwMDgtMDItMTQgMjA6MzA6NDUgKzAwMDAnCitjaGVja19wYXJzZSAnMjAwOC0wMi0xNCAyMDozMDo0NSAtMDU6MDAnICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNTAwJworY2hlY2tfcGFyc2UgJzIwMDgtMDItMTQgMjA6MzA6NDUnICcyMDA4LTAyLTE0IDIwOjMwOjQ1IC0wNTAwJyBFU1Q1CisKK2NoZWNrX2FwcHJveGlkYXRlKCkgeworCWVjaG8gIiQxIC0+ICQyICswMDAwIiA+ZXhwZWN0CisJdGVzdF9leHBlY3RfJHszOi1zdWNjZXNzfSAicGFyc2UgYXBwcm94aWRhdGUgKCQxKSIgIgorCXRlc3QtZGF0ZSBhcHByb3hpZGF0ZSAnJDEnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJIgorfQorCitjaGVja19hcHByb3hpZGF0ZSBub3cgJzIwMDktMDgtMzAgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnNSBzZWNvbmRzIGFnbycgJzIwMDktMDgtMzAgMTk6MTk6NTUnCitjaGVja19hcHByb3hpZGF0ZSA1LnNlY29uZHMuYWdvICcyMDA5LTA4LTMwIDE5OjE5OjU1JworY2hlY2tfYXBwcm94aWRhdGUgMTAubWludXRlcy5hZ28gJzIwMDktMDgtMzAgMTk6MTA6MDAnCitjaGVja19hcHByb3hpZGF0ZSB5ZXN0ZXJkYXkgJzIwMDktMDgtMjkgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAzLmRheXMuYWdvICcyMDA5LTA4LTI3IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgMy53ZWVrcy5hZ28gJzIwMDktMDgtMDkgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAzLm1vbnRocy5hZ28gJzIwMDktMDUtMzAgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAyLnllYXJzLjMubW9udGhzLmFnbyAnMjAwNy0wNS0zMCAxOToyMDowMCcKKworY2hlY2tfYXBwcm94aWRhdGUgJzZhbSB5ZXN0ZXJkYXknICcyMDA5LTA4LTI5IDA2OjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzZwbSB5ZXN0ZXJkYXknICcyMDA5LTA4LTI5IDE4OjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzM6MDAnICcyMDA5LTA4LTMwIDAzOjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzE1OjAwJyAnMjAwOS0wOC0zMCAxNTowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICdub29uIHRvZGF5JyAnMjAwOS0wOC0zMCAxMjowMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICdub29uIHllc3RlcmRheScgJzIwMDktMDgtMjkgMTI6MDA6MDAnCisKK2NoZWNrX2FwcHJveGlkYXRlICdsYXN0IHR1ZXNkYXknICcyMDA5LTA4LTI1IDE5OjIwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJ0p1bHkgNXRoJyAnMjAwOS0wNy0wNSAxOToyMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICcwNi8wNS8yMDA5JyAnMjAwOS0wNi0wNSAxOToyMDowMCcKK2NoZWNrX2FwcHJveGlkYXRlICcwNi4wNS4yMDA5JyAnMjAwOS0wNS0wNiAxOToyMDowMCcKKworY2hlY2tfYXBwcm94aWRhdGUgJ0p1biA2LCA1QU0nICcyMDA5LTA2LTA2IDA1OjAwOjAwJworY2hlY2tfYXBwcm94aWRhdGUgJzVBTSBKdW4gNicgJzIwMDktMDYtMDYgMDU6MDA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnNkFNLCBKdW5lIDcsIDIwMDknICcyMDA5LTA2LTA3IDA2OjAwOjAwJworCitjaGVja19hcHByb3hpZGF0ZSAnMjAwOC0xMi0wMScgJzIwMDgtMTItMDEgMTk6MjA6MDAnCitjaGVja19hcHByb3hpZGF0ZSAnMjAwOS0xMi0wMScgJzIwMDktMTItMDEgMTk6MjA6MDAnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwNy1naXQtdmFyLnNoIGIvdC90MDAwNy1naXQtdmFyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU4NjhhODcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDA3LWdpdC12YXIuc2gKQEAgLTAsMCArMSw0OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIHNhbml0eSBjaGVja3MgZm9yIGdpdCB2YXInCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IEdJVF9BVVRIT1JfSURFTlQnICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvICIkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gJEdJVF9BVVRIT1JfREFURSIgPmV4cGVjdCAmJgorCWdpdCB2YXIgR0lUX0FVVEhPUl9JREVOVCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgR0lUX0NPTU1JVFRFUl9JREVOVCcgJworCXRlc3RfdGljayAmJgorCWVjaG8gIiRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFIiA+ZXhwZWN0ICYmCisJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIUFVVE9JREVOVCAncmVxdWVzdGVkIGlkZW50aXRlcyBhcmUgc3RyaWN0JyAnCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfTkFNRSAmJgorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UCisJKQorJworCisjIEZvciBnaXQgdmFyIC1sLCB3ZSBjaGVjayBvbmx5IGEgcmVwcmVzZW50YXRpdmUgdmFyaWFibGU7CisjIHRlc3RpbmcgdGhlIHdob2xlIG91dHB1dCB3b3VsZCBtYWtlIG91ciB0ZXN0IHRvbyBicml0dGxlIHdpdGgKKyMgcmVzcGVjdCB0byB1bnJlbGF0ZWQgY2hhbmdlcyBpbiB0aGUgdGVzdCBzdWl0ZSdzIGVudmlyb25tZW50LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHZhciAtbCBsaXN0cyB2YXJpYWJsZXMnICcKKwlnaXQgdmFyIC1sID5hY3R1YWwgJiYKKwllY2hvICIkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gJEdJVF9BVVRIT1JfREFURSIgPmV4cGVjdCAmJgorCXNlZCAtbiBzL0dJVF9BVVRIT1JfSURFTlQ9Ly9wIDxhY3R1YWwgPmFjdHVhbC5hdXRob3IgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmF1dGhvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgdmFyIC1sIGxpc3RzIGNvbmZpZycgJworCWdpdCB2YXIgLWwgPmFjdHVhbCAmJgorCWVjaG8gZmFsc2UgPmV4cGVjdCAmJgorCXNlZCAtbiBzL2NvcmVcXC5iYXJlPS8vcCA8YWN0dWFsID5hY3R1YWwuYmFyZSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuYmFyZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIGFuZCBhc2tpbmcgZm9yIHZhcmlhYmxlcyBhcmUgZXhjbHVzaXZlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHZhciAtbCBHSVRfQ09NTUlUVEVSX0lERU5UCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwOC1pZ25vcmVzLnNoIGIvdC90MDAwOC1pZ25vcmVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRlZjVlZDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDA4LWlnbm9yZXMuc2gKQEAgLTAsMCArMSw4NDQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPWNoZWNrLWlnbm9yZQorCisuIC4vdGVzdC1saWIuc2gKKworaW5pdF92YXJzICgpIHsKKwlnbG9iYWxfZXhjbHVkZXM9IiQocHdkKS9nbG9iYWwtZXhjbHVkZXMiCit9CisKK2VuYWJsZV9nbG9iYWxfZXhjbHVkZXMgKCkgeworCWluaXRfdmFycyAmJgorCWdpdCBjb25maWcgY29yZS5leGNsdWRlc2ZpbGUgIiRnbG9iYWxfZXhjbHVkZXMiCit9CisKK2V4cGVjdF9pbiAoKSB7CisJZGVzdD0iJEhPTUUvZXhwZWN0ZWQtJDEiIHRleHQ9IiQyIgorCWlmIHRlc3QgLXogIiR0ZXh0IgorCXRoZW4KKwkJPiIkZGVzdCIgIyBhdm9pZCBuZXdsaW5lCisJZWxzZQorCQllY2hvICIkdGV4dCIgPiIkZGVzdCIKKwlmaQorfQorCitleHBlY3QgKCkgeworCWV4cGVjdF9pbiBzdGRvdXQgIiQxIgorfQorCitleHBlY3RfZnJvbV9zdGRpbiAoKSB7CisJY2F0ID4iJEhPTUUvZXhwZWN0ZWQtc3Rkb3V0IgorfQorCit0ZXN0X3N0ZGVyciAoKSB7CisJZXhwZWN0ZWQ9IiQxIgorCWV4cGVjdF9pbiBzdGRlcnIgIiQxIiAmJgorCXRlc3RfY21wICIkSE9NRS9leHBlY3RlZC1zdGRlcnIiICIkSE9NRS9zdGRlcnIiCit9CisKK2Jyb2tlbl9jX3VucXVvdGUgKCkgeworCSIkUEVSTF9QQVRIIiAtcGUgJ3MvXiIvLzsgcy9cXC8vOyBzLyIkLy87IHRyL1xuL1wwLycgIiRAIgorfQorCiticm9rZW5fY191bnF1b3RlX3ZlcmJvc2UgKCkgeworCSIkUEVSTF9QQVRIIiAtcGUgJ3MvCSIvCS87IHMvXFwvLzsgcy8iJC8vOyB0ci86XHRcbi9cMC8nICIkQCIKK30KKworc3RkZXJyX2NvbnRhaW5zICgpIHsKKwlyZWdleHA9IiQxIgorCWlmIGdyZXAgIiRyZWdleHAiICIkSE9NRS9zdGRlcnIiCisJdGhlbgorCQlyZXR1cm4gMAorCWVsc2UKKwkJZWNobyAiZGlkbid0IGZpbmQgLyRyZWdleHAvIGluICRIT01FL3N0ZGVyciIKKwkJY2F0ICIkSE9NRS9zdGRlcnIiCisJCXJldHVybiAxCisJZmkKK30KKworc3RkZXJyX2VtcHR5X29uX3N1Y2Nlc3MgKCkgeworCWV4cGVjdF9jb2RlPSIkMSIKKwlpZiB0ZXN0ICRleHBlY3RfY29kZSA9IDAKKwl0aGVuCisJCXRlc3Rfc3RkZXJyICIiCisJZWxzZQorCQkjIElmIHdlIGV4cGVjdCBmYWlsdXJlIHRoZW4gc3RkZXJyIG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBlbXB0eQorCQkjIGR1ZSB0byAtLXF1aWV0IC0gdGhlIGNhbGxlciBjYW4gY2hlY2sgaXRzIGNvbnRlbnRzCisJCXJldHVybiAwCisJZmkKK30KKwordGVzdF9jaGVja19pZ25vcmUgKCkgeworCWFyZ3M9IiQxIiBleHBlY3RfY29kZT0iJHsyOi0wfSIgZ2xvYmFsX2FyZ3M9IiQzIgorCisJaW5pdF92YXJzICYmCisJcm0gLWYgIiRIT01FL3N0ZG91dCIgIiRIT01FL3N0ZGVyciIgIiRIT01FL2NtZCIgJiYKKwllY2hvIGdpdCAkZ2xvYmFsX2FyZ3MgY2hlY2staWdub3JlICRxdWlldF9vcHQgJHZlcmJvc2Vfb3B0ICRub25fbWF0Y2hpbmdfb3B0ICRub19pbmRleF9vcHQgJGFyZ3MgXAorCQk+IiRIT01FL2NtZCIgJiYKKwllY2hvICIkZXhwZWN0X2NvZGUiID4iJEhPTUUvZXhwZWN0ZWQtZXhpdC1jb2RlIiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgIiRleHBlY3RfY29kZSIgXAorCQlnaXQgJGdsb2JhbF9hcmdzIGNoZWNrLWlnbm9yZSAkcXVpZXRfb3B0ICR2ZXJib3NlX29wdCAkbm9uX21hdGNoaW5nX29wdCAkbm9faW5kZXhfb3B0ICRhcmdzIFwKKwkJPiIkSE9NRS9zdGRvdXQiIDI+IiRIT01FL3N0ZGVyciIgJiYKKwl0ZXN0X2NtcCAiJEhPTUUvZXhwZWN0ZWQtc3Rkb3V0IiAiJEhPTUUvc3Rkb3V0IiAmJgorCXN0ZGVycl9lbXB0eV9vbl9zdWNjZXNzICIkZXhwZWN0X2NvZGUiCit9CisKKyMgUnVucyB0aGUgc2FtZSBjb2RlIHdpdGggNCBkaWZmZXJlbnQgbGV2ZWxzIG9mIG91dHB1dCB2ZXJib3NpdHk6CisjCisjICAgMS4gd2l0aCAtcSAvIC0tcXVpZXQKKyMgICAyLiB3aXRoIGRlZmF1bHQgdmVyYm9zaXR5CisjICAgMy4gd2l0aCAtdiAvIC0tdmVyYm9zZQorIyAgIDQuIHdpdGggLXYgLyAtLXZlcmJvc2UsICphbmQqIC1uIC8gLS1ub24tbWF0Y2hpbmcKKyMKKyMgZXhwZWN0aW5nIHN1Y2Nlc3MgZWFjaCB0aW1lLiAgVGFrZXMgYWR2YW50YWdlIG9mIHRoZSBmYWN0IHRoYXQKKyMgY2hlY2staWdub3JlIC0tdmVyYm9zZSBvdXRwdXQgaXMgdGhlIHNhbWUgYXMgbm9ybWFsIG91dHB1dCBleGNlcHQKKyMgZm9yIHRoZSBleHRyYSBmaXJzdCBjb2x1bW4uCisjCisjIEEgcGFyYW1ldGVyIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSB0ZXN0cyBhcmUgcnVuIHdpdGggdGhlCisjIG5vcm1hbCBjYXNlICh1c2luZyB0aGUgaW5kZXgpLCBvciB3aXRoIHRoZSAtLW5vLWluZGV4IG9wdGlvbi4KKyMKKyMgQXJndW1lbnRzOgorIyAgIC0gKG9wdGlvbmFsKSBwcmVyZXFzIGZvciB0aGlzIHRlc3QsIGUuZy4gJ1NZTUxJTktTJworIyAgIC0gdGVzdCBuYW1lCisjICAgLSBvdXRwdXQgdG8gZXhwZWN0IGZyb20gdGhlIGZvdXJ0aCB2ZXJib3NpdHkgbW9kZSAodGhlIG91dHB1dAorIyAgICAgZnJvbSB0aGUgb3RoZXIgdmVyYm9zaXR5IG1vZGVzIGlzIGF1dG9tYXRpY2FsbHkgaW5mZXJyZWQKKyMgICAgIGZyb20gdGhpcyB2YWx1ZSkKKyMgICAtIGNvZGUgdG8gcnVuIChzaG91bGQgaW52b2tlIHRlc3RfY2hlY2tfaWdub3JlKQorIyAgIC0gaW5kZXggb3B0aW9uOiAtLWluZGV4IG9yIC0tbm8taW5kZXgKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGlwbGUgKCkgeworCXByZXJlcT0KKwlpZiB0ZXN0ICQjIC1lcSA1CisJdGhlbgorCQlwcmVyZXE9JDEKKwkJc2hpZnQKKwlmaQorCWlmIHRlc3QgIiQ0IiA9ICItLWluZGV4IgorCXRoZW4KKwkJbm9faW5kZXhfb3B0PQorCWVsc2UKKwkJbm9faW5kZXhfb3B0PSQ0CisJZmkKKwl0ZXN0bmFtZT0iJDEiIGV4cGVjdF9hbGw9IiQyIiBjb2RlPSIkMyIKKworCWV4cGVjdF92ZXJib3NlPSQoIGVjaG8gIiRleHBlY3RfYWxsIiB8IGdyZXAgLXYgJ146OgknICkKKwlleHBlY3Q9JCggZWNobyAiJGV4cGVjdF92ZXJib3NlIiB8IHNlZCAtZSAncy8uKgkvLycgKQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICIkdGVzdG5hbWUke25vX2luZGV4X29wdDorIHdpdGggJG5vX2luZGV4X29wdH0iICcKKwkJZXhwZWN0ICIkZXhwZWN0IiAmJgorCQlldmFsICIkY29kZSIKKwknCisKKwkjIC0tcXVpZXQgaXMgb25seSB2YWxpZCB3aGVuIGEgc2luZ2xlIHBhdHRlcm4gaXMgcGFzc2VkCisJaWYgdGVzdCAkKCBlY2hvICIkZXhwZWN0X2FsbCIgfCB3YyAtbCApID0gMQorCXRoZW4KKwkJZm9yIHF1aWV0X29wdCBpbiAnLXEnICctLXF1aWV0JworCQlkbworCQkJb3B0cz0iJHtub19pbmRleF9vcHQ6KyRub19pbmRleF9vcHQgfSRxdWlldF9vcHQiCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwcmVyZXEgIiR0ZXN0bmFtZSR7b3B0czorIHdpdGggJG9wdHN9IiAiCisJCQlleHBlY3QgJycgJiYKKwkJCSRjb2RlCisJCSIKKwkJZG9uZQorCQlxdWlldF9vcHQ9CisJZmkKKworCWZvciB2ZXJib3NlX29wdCBpbiAnLXYnICctLXZlcmJvc2UnCisJZG8KKwkJZm9yIG5vbl9tYXRjaGluZ19vcHQgaW4gJycgJy1uJyAnLS1ub24tbWF0Y2hpbmcnCisJCWRvCisJCQlpZiB0ZXN0IC1uICIkbm9uX21hdGNoaW5nX29wdCIKKwkJCXRoZW4KKwkJCQlteV9leHBlY3Q9IiRleHBlY3RfYWxsIgorCQkJZWxzZQorCQkJCW15X2V4cGVjdD0iJGV4cGVjdF92ZXJib3NlIgorCQkJZmkKKworCQkJdGVzdF9jb2RlPSIKKwkJCQlleHBlY3QgJyRteV9leHBlY3QnICYmCisJCQkJJGNvZGUKKwkJCSIKKwkJCW9wdHM9IiR7bm9faW5kZXhfb3B0Oiskbm9faW5kZXhfb3B0IH0kdmVyYm9zZV9vcHQke25vbl9tYXRjaGluZ19vcHQ6KyAkbm9uX21hdGNoaW5nX29wdH0iCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwcmVyZXEgIiR0ZXN0bmFtZSR7b3B0czorIHdpdGggJG9wdHN9IiAiJHRlc3RfY29kZSIKKwkJZG9uZQorCWRvbmUKKwl2ZXJib3NlX29wdD0KKwlub25fbWF0Y2hpbmdfb3B0PQorCW5vX2luZGV4X29wdD0KK30KKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aXBsZSAiJEAiICItLWluZGV4IgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzX25vX2luZGV4X211bHRpICgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpcGxlICIkQCIgIi0tbm8taW5kZXgiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJaW5pdF92YXJzICYmCisJbWtkaXIgLXAgYS9iL2lnbm9yZWQtZGlyIGEvc3VibW9kdWxlIGIgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCisJdGhlbgorCQlsbiAtcyBiIGEvc3ltbGluaworCWZpICYmCisJKAorCQljZCBhL3N1Ym1vZHVsZSAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIGEgPmEgJiYKKwkJZ2l0IGFkZCBhICYmCisJCWdpdCBjb21taXQgLW0iY29tbWl0IGluIHN1Ym1vZHVsZSIKKwkpICYmCisJZ2l0IGFkZCBhL3N1Ym1vZHVsZSAmJgorCWNhdCA8PC1cRU9GID4uZ2l0aWdub3JlICYmCisJCW9uZQorCQlpZ25vcmVkLSoKKwkJdG9wLWxldmVsLWRpci8KKwlFT0YKKwlmb3IgZGlyIGluIC4gYQorCWRvCisJCTogPiRkaXIvbm90LWlnbm9yZWQgJiYKKwkJOiA+JGRpci9pZ25vcmVkLWFuZC11bnRyYWNrZWQgJiYKKwkJOiA+JGRpci9pZ25vcmVkLWJ1dC1pbi1pbmRleAorCWRvbmUgJiYKKwlnaXQgYWRkIC1mIGlnbm9yZWQtYnV0LWluLWluZGV4IGEvaWdub3JlZC1idXQtaW4taW5kZXggJiYKKwljYXQgPDwtXEVPRiA+YS8uZ2l0aWdub3JlICYmCisJCXR3byoKKwkJKnRocmVlCisJRU9GCisJY2F0IDw8LVxFT0YgPmEvYi8uZ2l0aWdub3JlICYmCisJCWZvdXIKKwkJZml2ZQorCQkjIHRoaXMgY29tbWVudCBzaG91bGQgYWZmZWN0IHRoZSBsaW5lIG51bWJlcnMKKwkJc2l4CisJCWlnbm9yZWQtZGlyLworCQkjIGFuZCBzbyBzaG91bGQgdGhpcyBibGFuayBsaW5lOgorCisJCSFvbioKKwkJIXR3bworCUVPRgorCWVjaG8gInNldmVuIiA+YS9iL2lnbm9yZWQtZGlyLy5naXRpZ25vcmUgJiYKKwl0ZXN0IC1uICIkSE9NRSIgJiYKKwljYXQgPDwtXEVPRiA+IiRnbG9iYWxfZXhjbHVkZXMiICYmCisJCWdsb2JhbG9uZQorCQkhZ2xvYmFsdHdvCisJCWdsb2JhbHRocmVlCisJRU9GCisJY2F0IDw8LVxFT0YgPj4uZ2l0L2luZm8vZXhjbHVkZQorCQlwZXItcmVwbworCUVPRgorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHRlc3QgaW52YWxpZCBpbnB1dHMKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLiBjb3JuZXItY2FzZScgJzo6CS4nICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAuIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnZW1wdHkgY29tbWFuZCBsaW5lJyAnJyAnCisJdGVzdF9jaGVja19pZ25vcmUgIiIgMTI4ICYmCisJc3RkZXJyX2NvbnRhaW5zICJmYXRhbDogbm8gcGF0aCBzcGVjaWZpZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgJy0tc3RkaW4gd2l0aCBlbXB0eSBTVERJTicgJycgJworCXRlc3RfY2hlY2tfaWdub3JlICItLXN0ZGluIiAxIDwvZGV2L251bGwgJiYKKwl0ZXN0X3N0ZGVyciAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctcSB3aXRoIG11bHRpcGxlIGFyZ3MnICcKKwlleHBlY3QgIiIgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLXEgb25lIHR3byIgMTI4ICYmCisJc3RkZXJyX2NvbnRhaW5zICJmYXRhbDogLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcXVpZXQgd2l0aCBtdWx0aXBsZSBhcmdzJyAnCisJZXhwZWN0ICIiICYmCisJdGVzdF9jaGVja19pZ25vcmUgIi0tcXVpZXQgb25lIHR3byIgMTI4ICYmCisJc3RkZXJyX2NvbnRhaW5zICJmYXRhbDogLS1xdWlldCBpcyBvbmx5IHZhbGlkIHdpdGggYSBzaW5nbGUgcGF0aG5hbWUiCisnCisKK2ZvciB2ZXJib3NlX29wdCBpbiAnLXYnICctLXZlcmJvc2UnCitkbworCWZvciBxdWlldF9vcHQgaW4gJy1xJyAnLS1xdWlldCcKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkcXVpZXRfb3B0ICR2ZXJib3NlX29wdCIgIgorCQkJZXhwZWN0ICcnICYmCisJCQl0ZXN0X2NoZWNrX2lnbm9yZSAnJHF1aWV0X29wdCAkdmVyYm9zZV9vcHQgZm9vJyAxMjggJiYKKwkJCXN0ZGVycl9jb250YWlucyAnZmF0YWw6IGNhbm5vdCBoYXZlIGJvdGggLS1xdWlldCBhbmQgLS12ZXJib3NlJworCQkiCisJZG9uZQorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXF1aWV0IHdpdGggbXVsdGlwbGUgYXJncycgJworCWV4cGVjdCAiIiAmJgorCXRlc3RfY2hlY2tfaWdub3JlICItLXF1aWV0IG9uZSB0d28iIDEyOCAmJgorCXN0ZGVycl9jb250YWlucyAiZmF0YWw6IC0tcXVpZXQgaXMgb25seSB2YWxpZCB3aXRoIGEgc2luZ2xlIHBhdGhuYW1lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICdlcnJvbmVvdXMgdXNlIG9mIC0tJyAnJyAnCisJdGVzdF9jaGVja19pZ25vcmUgIi0tIiAxMjggJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiBubyBwYXRoIHNwZWNpZmllZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLS1zdGRpbiB3aXRoIHN1cGVyZmx1b3VzIGFyZycgJycgJworCXRlc3RfY2hlY2tfaWdub3JlICItLXN0ZGluIGZvbyIgMTI4ICYmCisJc3RkZXJyX2NvbnRhaW5zICJmYXRhbDogY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLS1zdGRpbiAteiB3aXRoIHN1cGVyZmx1b3VzIGFyZycgJycgJworCXRlc3RfY2hlY2tfaWdub3JlICItLXN0ZGluIC16IGZvbyIgMTI4ICYmCisJc3RkZXJyX2NvbnRhaW5zICJmYXRhbDogY2Fubm90IHNwZWNpZnkgcGF0aG5hbWVzIHdpdGggLS1zdGRpbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLXogd2l0aG91dCAtLXN0ZGluJyAnJyAnCisJdGVzdF9jaGVja19pZ25vcmUgIi16IiAxMjggJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiAteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnLXogd2l0aG91dCAtLXN0ZGluIGFuZCBzdXBlcmZsdW91cyBhcmcnICcnICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLXogZm9vIiAxMjggJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiAteiBvbmx5IG1ha2VzIHNlbnNlIHdpdGggLS1zdGRpbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnbmVlZHMgd29yayB0cmVlJyAnJyAnCisJKAorCQljZCAuZ2l0ICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICJmb28iIDEyOAorCSkgJiYKKwlzdGRlcnJfY29udGFpbnMgImZhdGFsOiBUaGlzIG9wZXJhdGlvbiBtdXN0IGJlIHJ1biBpbiBhIHdvcmsgdHJlZSIKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyB0ZXN0IHN0YW5kYXJkIGlnbm9yZXMKKworIyBGaXJzdCBtYWtlIHN1cmUgdGhhdCB0aGUgcHJlc2VuY2Ugb2YgYSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUKKyMgZG9lcyBub3QgaW1wYWN0IHJlc3VsdHMsIGJ1dCB0aGF0IHRoZSBwcmVzZW5jZSBvZiBhIGZpbGUgaW4gdGhlCisjIGluZGV4IGRvZXMgdW5sZXNzIHRoZSAtLW5vLWluZGV4IG9wdGlvbiBpcyB1c2VkLgorCitmb3Igc3ViZGlyIGluICcnICdhLycKK2RvCisJaWYgdGVzdCAteiAiJHN1YmRpciIKKwl0aGVuCisJCXdoZXJlPSJhdCB0b3AtbGV2ZWwiCisJZWxzZQorCQl3aGVyZT0iaW4gc3ViZGlyICRzdWJkaXIiCisJZmkKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgIm5vbi1leGlzdGVudCBmaWxlICR3aGVyZSBub3QgaWdub3JlZCIgXAorCQkiOjoJJHtzdWJkaXJ9bm9uLWV4aXN0ZW50IiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnJHtzdWJkaXJ9bm9uLWV4aXN0ZW50JyAxIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19ub19pbmRleF9tdWx0aSAibm9uLWV4aXN0ZW50IGZpbGUgJHdoZXJlIG5vdCBpZ25vcmVkIiBcCisJCSI6Ogkke3N1YmRpcn1ub24tZXhpc3RlbnQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1ub24tZXhpc3RlbnQnIDEiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICJub24tZXhpc3RlbnQgZmlsZSAkd2hlcmUgaWdub3JlZCIgXAorCQkiLmdpdGlnbm9yZToxOm9uZQkke3N1YmRpcn1vbmUiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1vbmUnIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19ub19pbmRleF9tdWx0aSAibm9uLWV4aXN0ZW50IGZpbGUgJHdoZXJlIGlnbm9yZWQiIFwKKwkJIi5naXRpZ25vcmU6MTpvbmUJJHtzdWJkaXJ9b25lIiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnJHtzdWJkaXJ9b25lJyIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgImV4aXN0aW5nIHVudHJhY2tlZCBmaWxlICR3aGVyZSBub3QgaWdub3JlZCIgXAorCQkiOjoJJHtzdWJkaXJ9bm90LWlnbm9yZWQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1ub3QtaWdub3JlZCcgMSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3Nfbm9faW5kZXhfbXVsdGkgImV4aXN0aW5nIHVudHJhY2tlZCBmaWxlICR3aGVyZSBub3QgaWdub3JlZCIgXAorCQkiOjoJJHtzdWJkaXJ9bm90LWlnbm9yZWQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1ub3QtaWdub3JlZCcgMSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgImV4aXN0aW5nIHRyYWNrZWQgZmlsZSAkd2hlcmUgbm90IGlnbm9yZWQiIFwKKwkJIjo6CSR7c3ViZGlyfWlnbm9yZWQtYnV0LWluLWluZGV4IiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnJHtzdWJkaXJ9aWdub3JlZC1idXQtaW4taW5kZXgnIDEiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX25vX2luZGV4X211bHRpICJleGlzdGluZyB0cmFja2VkIGZpbGUgJHdoZXJlIHNob3duIGFzIGlnbm9yZWQiIFwKKwkJIi5naXRpZ25vcmU6MjppZ25vcmVkLSoJJHtzdWJkaXJ9aWdub3JlZC1idXQtaW4taW5kZXgiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1pZ25vcmVkLWJ1dC1pbi1pbmRleCciCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICJleGlzdGluZyB1bnRyYWNrZWQgZmlsZSAkd2hlcmUgaWdub3JlZCIgXAorCQkiLmdpdGlnbm9yZToyOmlnbm9yZWQtKgkke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQnIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19ub19pbmRleF9tdWx0aSAiZXhpc3RpbmcgdW50cmFja2VkIGZpbGUgJHdoZXJlIGlnbm9yZWQiIFwKKwkJIi5naXRpZ25vcmU6MjppZ25vcmVkLSoJJHtzdWJkaXJ9aWdub3JlZC1hbmQtdW50cmFja2VkIiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnJHtzdWJkaXJ9aWdub3JlZC1hbmQtdW50cmFja2VkJyIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgIm1peCBvZiBmaWxlIHR5cGVzICR3aGVyZSIgXAorIjo6CSR7c3ViZGlyfW5vbi1leGlzdGVudAorLmdpdGlnbm9yZToxOm9uZQkke3N1YmRpcn1vbmUKKzo6CSR7c3ViZGlyfW5vdC1pZ25vcmVkCis6Ogkke3N1YmRpcn1pZ25vcmVkLWJ1dC1pbi1pbmRleAorLmdpdGlnbm9yZToyOmlnbm9yZWQtKgkke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQiIFwKKwkJInRlc3RfY2hlY2tfaWdub3JlICcKKwkJCSR7c3ViZGlyfW5vbi1leGlzdGVudAorCQkJJHtzdWJkaXJ9b25lCisJCQkke3N1YmRpcn1ub3QtaWdub3JlZAorCQkJJHtzdWJkaXJ9aWdub3JlZC1idXQtaW4taW5kZXgKKwkJCSR7c3ViZGlyfWlnbm9yZWQtYW5kLXVudHJhY2tlZCcKKwkJIgorCisJdGVzdF9leHBlY3Rfc3VjY2Vzc19ub19pbmRleF9tdWx0aSAibWl4IG9mIGZpbGUgdHlwZXMgJHdoZXJlIiBcCisiOjoJJHtzdWJkaXJ9bm9uLWV4aXN0ZW50CisuZ2l0aWdub3JlOjE6b25lCSR7c3ViZGlyfW9uZQorOjoJJHtzdWJkaXJ9bm90LWlnbm9yZWQKKy5naXRpZ25vcmU6MjppZ25vcmVkLSoJJHtzdWJkaXJ9aWdub3JlZC1idXQtaW4taW5kZXgKKy5naXRpZ25vcmU6MjppZ25vcmVkLSoJJHtzdWJkaXJ9aWdub3JlZC1hbmQtdW50cmFja2VkIiBcCisJCSJ0ZXN0X2NoZWNrX2lnbm9yZSAnCisJCQkke3N1YmRpcn1ub24tZXhpc3RlbnQKKwkJCSR7c3ViZGlyfW9uZQorCQkJJHtzdWJkaXJ9bm90LWlnbm9yZWQKKwkJCSR7c3ViZGlyfWlnbm9yZWQtYnV0LWluLWluZGV4CisJCQkke3N1YmRpcn1pZ25vcmVkLWFuZC11bnRyYWNrZWQnCisJCSIKK2RvbmUKKworIyBIYXZpbmcgZXN0YWJsaXNoZWQgdGhlIGFib3ZlLCBmcm9tIG5vdyBvbiB3ZSBtb3N0bHkgdGVzdCBhZ2FpbnN0CisjIGZpbGVzIHdoaWNoIGRvIG5vdCBleGlzdCBpbiB0aGUgd29ya2luZyB0cmVlIG9yIGluZGV4LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWItZGlyZWN0b3J5IGxvY2FsIGlnbm9yZScgJworCWV4cGVjdCAiYS8zLXRocmVlIiAmJgorCXRlc3RfY2hlY2tfaWdub3JlICJhLzMtdGhyZWUgYS90aHJlZS1ub3QtdGhpcy1vbmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Yi1kaXJlY3RvcnkgbG9jYWwgaWdub3JlIHdpdGggLS12ZXJib3NlJyAgJworCWV4cGVjdCAiYS8uZ2l0aWdub3JlOjI6KnRocmVlCWEvMy10aHJlZSIgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLS12ZXJib3NlIGEvMy10aHJlZSBhL3RocmVlLW5vdC10aGlzLW9uZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9jYWwgaWdub3JlIGluc2lkZSBhIHN1Yi1kaXJlY3RvcnknICcKKwlleHBlY3QgIjMtdGhyZWUiICYmCisJKAorCQljZCBhICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICIzLXRocmVlIHRocmVlLW5vdC10aGlzLW9uZSIKKwkpCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBpZ25vcmUgaW5zaWRlIGEgc3ViLWRpcmVjdG9yeSB3aXRoIC0tdmVyYm9zZScgJworCWV4cGVjdCAiYS8uZ2l0aWdub3JlOjI6KnRocmVlCTMtdGhyZWUiICYmCisJKAorCQljZCBhICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICItLXZlcmJvc2UgMy10aHJlZSB0aHJlZS1ub3QtdGhpcy1vbmUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzX211bHRpICduZXN0ZWQgaW5jbHVkZScgXAorCSdhL2IvLmdpdGlnbm9yZTo4OiFvbioJYS9iL29uZScgJworCXRlc3RfY2hlY2tfaWdub3JlICJhL2Ivb25lIgorJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHRlc3QgaWdub3JlZCBzdWItZGlyZWN0b3JpZXMKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnaWdub3JlZCBzdWItZGlyZWN0b3J5JyBcCisJJ2EvYi8uZ2l0aWdub3JlOjU6aWdub3JlZC1kaXIvCWEvYi9pZ25vcmVkLWRpcicgJworCXRlc3RfY2hlY2tfaWdub3JlICJhL2IvaWdub3JlZC1kaXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGZpbGVzIGluc2lkZSBpZ25vcmVkIHN1Yi1kaXJlY3RvcnknICcKKwlleHBlY3RfZnJvbV9zdGRpbiA8PC1cRU9GICYmCisJCWEvYi9pZ25vcmVkLWRpci9mb28KKwkJYS9iL2lnbm9yZWQtZGlyL3R3b29vbworCQlhL2IvaWdub3JlZC1kaXIvc2V2ZW4KKwlFT0YKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiYS9iL2lnbm9yZWQtZGlyL2ZvbyBhL2IvaWdub3JlZC1kaXIvdHdvb29vIGEvYi9pZ25vcmVkLWRpci9zZXZlbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgZmlsZXMgaW5zaWRlIGlnbm9yZWQgc3ViLWRpcmVjdG9yeSB3aXRoIC12JyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPDwtXEVPRiAmJgorCQlhL2IvLmdpdGlnbm9yZTo1Omlnbm9yZWQtZGlyLwlhL2IvaWdub3JlZC1kaXIvZm9vCisJCWEvYi8uZ2l0aWdub3JlOjU6aWdub3JlZC1kaXIvCWEvYi9pZ25vcmVkLWRpci90d29vb28KKwkJYS9iLy5naXRpZ25vcmU6NTppZ25vcmVkLWRpci8JYS9iL2lnbm9yZWQtZGlyL3NldmVuCisJRU9GCisJdGVzdF9jaGVja19pZ25vcmUgIi12IGEvYi9pZ25vcmVkLWRpci9mb28gYS9iL2lnbm9yZWQtZGlyL3R3b29vbyBhL2IvaWdub3JlZC1kaXIvc2V2ZW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NkIHRvIGlnbm9yZWQgc3ViLWRpcmVjdG9yeScgJworCWV4cGVjdF9mcm9tX3N0ZGluIDw8LVxFT0YgJiYKKwkJZm9vCisJCXR3b29vbworCQkuLi9vbmUKKwkJc2V2ZW4KKwkJLi4vLi4vb25lCisJRU9GCisJKAorCQljZCBhL2IvaWdub3JlZC1kaXIgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgImZvbyB0d29vb28gLi4vb25lIHNldmVuIC4uLy4uL29uZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NkIHRvIGlnbm9yZWQgc3ViLWRpcmVjdG9yeSB3aXRoIC12JyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPDwtXEVPRiAmJgorCQlhL2IvLmdpdGlnbm9yZTo1Omlnbm9yZWQtZGlyLwlmb28KKwkJYS9iLy5naXRpZ25vcmU6NTppZ25vcmVkLWRpci8JdHdvb29vCisJCWEvYi8uZ2l0aWdub3JlOjg6IW9uKgkuLi9vbmUKKwkJYS9iLy5naXRpZ25vcmU6NTppZ25vcmVkLWRpci8Jc2V2ZW4KKwkJLmdpdGlnbm9yZToxOm9uZQkuLi8uLi9vbmUKKwlFT0YKKwkoCisJCWNkIGEvYi9pZ25vcmVkLWRpciAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAiLXYgZm9vIHR3b29vbyAuLi9vbmUgc2V2ZW4gLi4vLi4vb25lIgorCSkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyB0ZXN0IGhhbmRsaW5nIG9mIHN5bWxpbmtzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgU1lNTElOS1MgJ3N5bWxpbmsnICc6OglhL3N5bWxpbmsnICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiYS9zeW1saW5rIiAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3NfbXVsdGkgU1lNTElOS1MgJ2JleW9uZCBhIHN5bWxpbmsnICcnICcKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiYS9zeW1saW5rL2ZvbyIgMTI4ICYmCisJdGVzdF9zdGRlcnIgImZhdGFsOiBwYXRoc3BlYyAnXCcnYS9zeW1saW5rL2ZvbydcJycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSBTWU1MSU5LUyAnYmV5b25kIGEgc3ltbGluayBmcm9tIHN1YmRpcmVjdG9yeScgJycgJworCSgKKwkJY2QgYSAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAic3ltbGluay9mb28iIDEyOAorCSkgJiYKKwl0ZXN0X3N0ZGVyciAiZmF0YWw6IHBhdGhzcGVjICdcJydzeW1saW5rL2ZvbydcJycgaXMgYmV5b25kIGEgc3ltYm9saWMgbGluayIKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyB0ZXN0IGhhbmRsaW5nIG9mIHN1Ym1vZHVsZXMKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnc3VibW9kdWxlJyAnJyAnCisJdGVzdF9jaGVja19pZ25vcmUgImEvc3VibW9kdWxlL29uZSIgMTI4ICYmCisJdGVzdF9zdGRlcnIgImZhdGFsOiBQYXRoc3BlYyAnXCcnYS9zdWJtb2R1bGUvb25lJ1wnJyBpcyBpbiBzdWJtb2R1bGUgJ1wnJ2Evc3VibW9kdWxlJ1wnJyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2Vzc19tdWx0aSAnc3VibW9kdWxlIGZyb20gc3ViZGlyZWN0b3J5JyAnJyAnCisJKAorCQljZCBhICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICJzdWJtb2R1bGUvb25lIiAxMjgKKwkpICYmCisJdGVzdF9zdGRlcnIgImZhdGFsOiBQYXRoc3BlYyAnXCcnc3VibW9kdWxlL29uZSdcJycgaXMgaW4gc3VibW9kdWxlICdcJydhL3N1Ym1vZHVsZSdcJyciCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgdGVzdCBoYW5kbGluZyBvZiBnbG9iYWwgaWdub3JlIGZpbGVzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dsb2JhbCBpZ25vcmUgbm90IHlldCBlbmFibGVkJyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPDwtXEVPRiAmJgorCQkuZ2l0L2luZm8vZXhjbHVkZTo3OnBlci1yZXBvCXBlci1yZXBvCisJCWEvLmdpdGlnbm9yZToyOip0aHJlZQlhL2dsb2JhbHRocmVlCisJCS5naXQvaW5mby9leGNsdWRlOjc6cGVyLXJlcG8JYS9wZXItcmVwbworCUVPRgorCXRlc3RfY2hlY2tfaWdub3JlICItdiBnbG9iYWxvbmUgcGVyLXJlcG8gYS9nbG9iYWx0aHJlZSBhL3Blci1yZXBvIG5vdC1pZ25vcmVkIGEvZ2xvYmFsdHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbG9iYWwgaWdub3JlJyAnCisJZW5hYmxlX2dsb2JhbF9leGNsdWRlcyAmJgorCWV4cGVjdF9mcm9tX3N0ZGluIDw8LVxFT0YgJiYKKwkJZ2xvYmFsb25lCisJCXBlci1yZXBvCisJCWdsb2JhbHRocmVlCisJCWEvZ2xvYmFsdGhyZWUKKwkJYS9wZXItcmVwbworCQlnbG9iYWx0d28KKwlFT0YKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiZ2xvYmFsb25lIHBlci1yZXBvIGdsb2JhbHRocmVlIGEvZ2xvYmFsdGhyZWUgYS9wZXItcmVwbyBub3QtaWdub3JlZCBnbG9iYWx0d28iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dsb2JhbCBpZ25vcmUgd2l0aCAtdicgJworCWVuYWJsZV9nbG9iYWxfZXhjbHVkZXMgJiYKKwlleHBlY3RfZnJvbV9zdGRpbiA8PC1FT0YgJiYKKwkJJGdsb2JhbF9leGNsdWRlczoxOmdsb2JhbG9uZQlnbG9iYWxvbmUKKwkJLmdpdC9pbmZvL2V4Y2x1ZGU6NzpwZXItcmVwbwlwZXItcmVwbworCQkkZ2xvYmFsX2V4Y2x1ZGVzOjM6Z2xvYmFsdGhyZWUJZ2xvYmFsdGhyZWUKKwkJYS8uZ2l0aWdub3JlOjI6KnRocmVlCWEvZ2xvYmFsdGhyZWUKKwkJLmdpdC9pbmZvL2V4Y2x1ZGU6NzpwZXItcmVwbwlhL3Blci1yZXBvCisJCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCWdsb2JhbHR3bworCUVPRgorCXRlc3RfY2hlY2tfaWdub3JlICItdiBnbG9iYWxvbmUgcGVyLXJlcG8gZ2xvYmFsdGhyZWUgYS9nbG9iYWx0aHJlZSBhL3Blci1yZXBvIG5vdC1pZ25vcmVkIGdsb2JhbHR3byIKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyB0ZXN0IC0tc3RkaW4KKworY2F0IDw8LVxFT0YgPnN0ZGluCisJb25lCisJbm90LWlnbm9yZWQKKwlhL29uZQorCWEvbm90LWlnbm9yZWQKKwlhL2Ivb24KKwlhL2Ivb25lCisJYS9iL29uZSBvbmUKKwkiYS9iL29uZSB0d28iCisJImEvYi9vbmVcInRocmVlIgorCWEvYi9ub3QtaWdub3JlZAorCWEvYi90d28KKwlhL2IvdHdvb28KKwlnbG9iYWx0d28KKwlhL2dsb2JhbHR3bworCWEvYi9nbG9iYWx0d28KKwliL2dsb2JhbHR3bworRU9GCitjYXQgPDwtXEVPRiA+ZXhwZWN0ZWQtZGVmYXVsdAorCW9uZQorCWEvb25lCisJYS9iL29uCisJYS9iL29uZQorCWEvYi9vbmUgb25lCisJYS9iL29uZSB0d28KKwkiYS9iL29uZVwidGhyZWUiCisJYS9iL3R3bworCWEvYi90d29vbworCWdsb2JhbHR3bworCWEvZ2xvYmFsdHdvCisJYS9iL2dsb2JhbHR3bworCWIvZ2xvYmFsdHdvCitFT0YKK2NhdCA8PC1FT0YgPmV4cGVjdGVkLXZlcmJvc2UKKwkuZ2l0aWdub3JlOjE6b25lCW9uZQorCS5naXRpZ25vcmU6MTpvbmUJYS9vbmUKKwlhL2IvLmdpdGlnbm9yZTo4OiFvbioJYS9iL29uCisJYS9iLy5naXRpZ25vcmU6ODohb24qCWEvYi9vbmUKKwlhL2IvLmdpdGlnbm9yZTo4OiFvbioJYS9iL29uZSBvbmUKKwlhL2IvLmdpdGlnbm9yZTo4OiFvbioJYS9iL29uZSB0d28KKwlhL2IvLmdpdGlnbm9yZTo4OiFvbioJImEvYi9vbmVcInRocmVlIgorCWEvYi8uZ2l0aWdub3JlOjk6IXR3bwlhL2IvdHdvCisJYS8uZ2l0aWdub3JlOjE6dHdvKglhL2IvdHdvb28KKwkkZ2xvYmFsX2V4Y2x1ZGVzOjI6IWdsb2JhbHR3bwlnbG9iYWx0d28KKwkkZ2xvYmFsX2V4Y2x1ZGVzOjI6IWdsb2JhbHR3bwlhL2dsb2JhbHR3bworCSRnbG9iYWxfZXhjbHVkZXM6MjohZ2xvYmFsdHdvCWEvYi9nbG9iYWx0d28KKwkkZ2xvYmFsX2V4Y2x1ZGVzOjI6IWdsb2JhbHR3bwliL2dsb2JhbHR3bworRU9GCisKK2Jyb2tlbl9jX3VucXVvdGUgc3RkaW4gPnN0ZGluMAorCiticm9rZW5fY191bnF1b3RlIGV4cGVjdGVkLWRlZmF1bHQgPmV4cGVjdGVkLWRlZmF1bHQwCisKK2Jyb2tlbl9jX3VucXVvdGVfdmVyYm9zZSBleHBlY3RlZC12ZXJib3NlID5leHBlY3RlZC12ZXJib3NlMAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0ZGluJyAnCisJZXhwZWN0X2Zyb21fc3RkaW4gPGV4cGVjdGVkLWRlZmF1bHQgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLS1zdGRpbiIgPHN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RkaW4gLXEnICcKKwlleHBlY3QgIiIgJiYKKwl0ZXN0X2NoZWNrX2lnbm9yZSAiLXEgLS1zdGRpbiIgPHN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RkaW4gLXYnICcKKwlleHBlY3RfZnJvbV9zdGRpbiA8ZXhwZWN0ZWQtdmVyYm9zZSAmJgorCXRlc3RfY2hlY2tfaWdub3JlICItdiAtLXN0ZGluIiA8c3RkaW4KKycKKworZm9yIG9wdHMgaW4gJy0tc3RkaW4gLXonICcteiAtLXN0ZGluJworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3B0cyIgIgorCQlleHBlY3RfZnJvbV9zdGRpbiA8ZXhwZWN0ZWQtZGVmYXVsdDAgJiYKKwkJdGVzdF9jaGVja19pZ25vcmUgJyRvcHRzJyA8c3RkaW4wCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG9wdHMgLXEiICIKKwkJZXhwZWN0ICIiICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICctcSAkb3B0cycgPHN0ZGluMAorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRvcHRzIC12IiAiCisJCWV4cGVjdF9mcm9tX3N0ZGluIDxleHBlY3RlZC12ZXJib3NlMCAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAnLXYgJG9wdHMnIDxzdGRpbjAKKwkiCitkb25lCisKK2NhdCA8PC1cRU9GID5zdGRpbgorCS4uL29uZQorCS4uL25vdC1pZ25vcmVkCisJb25lCisJbm90LWlnbm9yZWQKKwliL29uCisJYi9vbmUKKwliL29uZSBvbmUKKwkiYi9vbmUgdHdvIgorCSJiL29uZVwidGhyZWUiCisJYi90d28KKwliL25vdC1pZ25vcmVkCisJYi90d29vbworCS4uL2dsb2JhbHR3bworCWdsb2JhbHR3bworCWIvZ2xvYmFsdHdvCisJLi4vYi9nbG9iYWx0d28KKwljL25vdC1pZ25vcmVkCitFT0YKKyMgTi5CLiB3ZSBkZWxpYmVyYXRlbHkgZW5kIFNURElOIHdpdGggYSBub24tbWF0Y2hpbmcgcGF0dGVybiBpbiBvcmRlcgorIyB0byB0ZXN0IHRoYXQgdGhlIGV4aXQgY29kZSBpbmRpY2F0ZXMgdGhhdCBvbmUgb3IgbW9yZSBvZiB0aGUKKyMgcHJvdmlkZWQgcGF0aHMgaXMgaWdub3JlZCAtIGluIG90aGVyIHdvcmRzLCB0aGF0IGl0IHJlcHJlc2VudHMgYW4KKyMgYWdncmVnYXRpb24gb2YgYWxsIHRoZSByZXN1bHRzLCBub3QganVzdCB0aGUgZmluYWwgcmVzdWx0LgorCitjYXQgPDwtRU9GID5leHBlY3RlZC1hbGwKKwkuZ2l0aWdub3JlOjE6b25lCS4uL29uZQorCTo6CS4uL25vdC1pZ25vcmVkCisJLmdpdGlnbm9yZToxOm9uZQlvbmUKKwk6Oglub3QtaWdub3JlZAorCWEvYi8uZ2l0aWdub3JlOjg6IW9uKgliL29uCisJYS9iLy5naXRpZ25vcmU6ODohb24qCWIvb25lCisJYS9iLy5naXRpZ25vcmU6ODohb24qCWIvb25lIG9uZQorCWEvYi8uZ2l0aWdub3JlOjg6IW9uKgliL29uZSB0d28KKwlhL2IvLmdpdGlnbm9yZTo4OiFvbioJImIvb25lXCJ0aHJlZSIKKwlhL2IvLmdpdGlnbm9yZTo5OiF0d28JYi90d28KKwk6OgliL25vdC1pZ25vcmVkCisJYS8uZ2l0aWdub3JlOjE6dHdvKgliL3R3b29vCisJJGdsb2JhbF9leGNsdWRlczoyOiFnbG9iYWx0d28JLi4vZ2xvYmFsdHdvCisJJGdsb2JhbF9leGNsdWRlczoyOiFnbG9iYWx0d28JZ2xvYmFsdHdvCisJJGdsb2JhbF9leGNsdWRlczoyOiFnbG9iYWx0d28JYi9nbG9iYWx0d28KKwkkZ2xvYmFsX2V4Y2x1ZGVzOjI6IWdsb2JhbHR3bwkuLi9iL2dsb2JhbHR3bworCTo6CWMvbm90LWlnbm9yZWQKK0VPRgorZ3JlcCAtdiAnXjo6CScgZXhwZWN0ZWQtYWxsID5leHBlY3RlZC12ZXJib3NlCitzZWQgLWUgJ3MvLioJLy8nIGV4cGVjdGVkLXZlcmJvc2UgPmV4cGVjdGVkLWRlZmF1bHQKKworYnJva2VuX2NfdW5xdW90ZSBzdGRpbiA+c3RkaW4wCisKK2Jyb2tlbl9jX3VucXVvdGUgZXhwZWN0ZWQtZGVmYXVsdCA+ZXhwZWN0ZWQtZGVmYXVsdDAKKworYnJva2VuX2NfdW5xdW90ZV92ZXJib3NlIGV4cGVjdGVkLXZlcmJvc2UgPmV4cGVjdGVkLXZlcmJvc2UwCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RkaW4gZnJvbSBzdWJkaXJlY3RvcnknICcKKwlleHBlY3RfZnJvbV9zdGRpbiA8ZXhwZWN0ZWQtZGVmYXVsdCAmJgorCSgKKwkJY2QgYSAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAiLS1zdGRpbiIgPC4uL3N0ZGluCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0ZGluIGZyb20gc3ViZGlyZWN0b3J5IHdpdGggLXYnICcKKwlleHBlY3RfZnJvbV9zdGRpbiA8ZXhwZWN0ZWQtdmVyYm9zZSAmJgorCSgKKwkJY2QgYSAmJgorCQl0ZXN0X2NoZWNrX2lnbm9yZSAiLS1zdGRpbiAtdiIgPC4uL3N0ZGluCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0ZGluIGZyb20gc3ViZGlyZWN0b3J5IHdpdGggLXYgLW4nICcKKwlleHBlY3RfZnJvbV9zdGRpbiA8ZXhwZWN0ZWQtYWxsICYmCisJKAorCQljZCBhICYmCisJCXRlc3RfY2hlY2tfaWdub3JlICItLXN0ZGluIC12IC1uIiA8Li4vc3RkaW4KKwkpCisnCisKK2ZvciBvcHRzIGluICctLXN0ZGluIC16JyAnLXogLS1zdGRpbicKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG9wdHMgZnJvbSBzdWJkaXJlY3RvcnkiICcKKwkJZXhwZWN0X2Zyb21fc3RkaW4gPGV4cGVjdGVkLWRlZmF1bHQwICYmCisJCSgKKwkJCWNkIGEgJiYKKwkJCXRlc3RfY2hlY2tfaWdub3JlICInIiRvcHRzIiciIDwuLi9zdGRpbjAKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRvcHRzIGZyb20gc3ViZGlyZWN0b3J5IHdpdGggLXYiICcKKwkJZXhwZWN0X2Zyb21fc3RkaW4gPGV4cGVjdGVkLXZlcmJvc2UwICYmCisJCSgKKwkJCWNkIGEgJiYKKwkJCXRlc3RfY2hlY2tfaWdub3JlICInIiRvcHRzIicgLXYiIDwuLi9zdGRpbjAKKwkJKQorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdzdHJlYW1pbmcgc3VwcG9ydCBmb3IgLS1zdGRpbicgJworCW1rZmlmbyBpbiBvdXQgJiYKKwkoZ2l0IGNoZWNrLWlnbm9yZSAtbiAtdiAtLXN0ZGluIDxpbiA+b3V0ICYpICYmCisKKwkjIFdlIGNhbm5vdCBqdXN0ICJlY2hvID5pbiIgYmVjYXVzZSBjaGVjay1pZ25vcmUgd291bGQgZ2V0IEVPRgorCSMgYWZ0ZXIgZWNobyBleGl0ZWQ7IGluc3RlYWQgd2Ugb3BlbiB0aGUgZGVzY3JpcHRvciBpbiBvdXIKKwkjIHNoZWxsLCBhbmQgdGhlbiBlY2hvIHRvIHRoZSBmZC4gV2UgbWFrZSBzdXJlIHRvIGNsb3NlIGl0IGF0CisJIyB0aGUgZW5kLCBzbyB0aGF0IHRoZSBzdWJwcm9jZXNzIGRvZXMgZ2V0IEVPRiBhbmQgZGllcworCSMgcHJvcGVybHkuCisJIworCSMgU2ltaWxhcmx5LCB3ZSBtdXN0IGtlZXAgIm91dCIgb3BlbiBzbyB0aGF0IGNoZWNrLWlnbm9yZSBkb2VzCisJIyBub3QgZXZlciBnZXQgU0lHUElQRSB0cnlpbmcgdG8gd3JpdGUgdG8gdXMuIE5vdCBvbmx5IHdvdWxkIHRoYXQKKwkjIHByb2R1Y2UgaW5jb3JyZWN0IHJlc3VsdHMsIGJ1dCB0aGVuIHRoZXJlIHdvdWxkIGJlIG5vIHdyaXRlciBvbiB0aGUKKwkjIG90aGVyIGVuZCBvZiB0aGUgcGlwZSwgYW5kIHdlIHdvdWxkIHBvdGVudGlhbGx5IGJsb2NrIGZvcmV2ZXIgdHJ5aW5nCisJIyB0byBvcGVuIGl0LgorCWV4ZWMgOT5pbiAmJgorCWV4ZWMgODxvdXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImV4ZWMgOT4mLSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImV4ZWMgODwmLSIgJiYKKwllY2hvID4mOSBvbmUgJiYKKwlyZWFkIHJlc3BvbnNlIDwmOCAmJgorCWVjaG8gIiRyZXNwb25zZSIgfCBncmVwICJeXC5naXRpZ25vcmU6MTpvbmUJb25lIiAmJgorCWVjaG8gPiY5IHR3byAmJgorCXJlYWQgcmVzcG9uc2UgPCY4ICYmCisJZWNobyAiJHJlc3BvbnNlIiB8IGdyZXAgIl46Ogl0d28iCisnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgdGVzdCB3aGl0ZXNwYWNlIGhhbmRsaW5nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIHdoaXRlc3BhY2UgaXMgaWdub3JlZCcgJworCW1rZGlyIHdoaXRlc3BhY2UgJiYKKwk+d2hpdGVzcGFjZS90cmFpbGluZyAmJgorCT53aGl0ZXNwYWNlL3VudHJhY2tlZCAmJgorCWVjaG8gIndoaXRlc3BhY2UvdHJhaWxpbmcgICAiID5pZ25vcmUgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgord2hpdGVzcGFjZS91bnRyYWNrZWQKK0VPRgorCTogPmVyci5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLW8gLVggaWdub3JlIHdoaXRlc3BhY2UgPmFjdHVhbCAyPmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBlcnIuZXhwZWN0IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAncXVvdGluZyBhbGxvd3MgdHJhaWxpbmcgd2hpdGVzcGFjZScgJworCXJtIC1yZiB3aGl0ZXNwYWNlICYmCisJbWtkaXIgd2hpdGVzcGFjZSAmJgorCT4id2hpdGVzcGFjZS90cmFpbGluZyAgIiAmJgorCT53aGl0ZXNwYWNlL3VudHJhY2tlZCAmJgorCWVjaG8gIndoaXRlc3BhY2UvdHJhaWxpbmdcXCBcXCAiID5pZ25vcmUgJiYKKwllY2hvIHdoaXRlc3BhY2UvdW50cmFja2VkID5leHBlY3QgJiYKKwk6ID5lcnIuZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1vIC1YIGlnbm9yZSB3aGl0ZXNwYWNlID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXJyLmV4cGVjdCBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1csIUNZR1dJTiAnY29ycmVjdCBoYW5kbGluZyBvZiBiYWNrc2xhc2hlcycgJworCXJtIC1yZiB3aGl0ZXNwYWNlICYmCisJbWtkaXIgd2hpdGVzcGFjZSAmJgorCT4id2hpdGVzcGFjZS90cmFpbGluZyAxICAiICYmCisJPiJ3aGl0ZXNwYWNlL3RyYWlsaW5nIDIgXFxcXCIgJiYKKwk+IndoaXRlc3BhY2UvdHJhaWxpbmcgMyBcXFxcIiAmJgorCT4id2hpdGVzcGFjZS90cmFpbGluZyA0ICAgXFwgIiAmJgorCT4id2hpdGVzcGFjZS90cmFpbGluZyA1IFxcIFxcICIgJiYKKwk+IndoaXRlc3BhY2UvdHJhaWxpbmcgNiBcXGFcXCIgJiYKKwk+d2hpdGVzcGFjZS91bnRyYWNrZWQgJiYKKwlzZWQgLWUgInMvWiQvLyIgPmlnbm9yZSA8PC1cRU9GICYmCisJd2hpdGVzcGFjZS90cmFpbGluZyAxIFwgICAgWgorCXdoaXRlc3BhY2UvdHJhaWxpbmcgMiBcXFxcWgorCXdoaXRlc3BhY2UvdHJhaWxpbmcgMyBcXFxcIFoKKwl3aGl0ZXNwYWNlL3RyYWlsaW5nIDQgICBcXFwgICAgWgorCXdoaXRlc3BhY2UvdHJhaWxpbmcgNSBcXCBcXFwgICBaCisJd2hpdGVzcGFjZS90cmFpbGluZyA2IFxcYVxcWgorCUVPRgorCWVjaG8gd2hpdGVzcGFjZS91bnRyYWNrZWQgPmV4cGVjdCAmJgorCT5lcnIuZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1vIC1YIGlnbm9yZSB3aGl0ZXNwYWNlID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXJyLmV4cGVjdCBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mby9leGNsdWRlIHRydW1wcyBjb3JlLmV4Y2x1ZGVzZmlsZScgJworCWVjaG8gPj5nbG9iYWwtZXhjbHVkZXMgdXN1YWxseS1pZ25vcmVkICYmCisJZWNobyA+Pi5naXQvaW5mby9leGNsdWRlICIhdXN1YWxseS1pZ25vcmVkIiAmJgorCT51c3VhbGx5LWlnbm9yZWQgJiYKKwllY2hvICI/PyB1c3VhbGx5LWlnbm9yZWQiID5leHBlY3QgJiYKKworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gdXN1YWxseS1pZ25vcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAwOS1wcmlvLXF1ZXVlLnNoIGIvdC90MDAwOS1wcmlvLXF1ZXVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0MDQ1YzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDA5LXByaW8tcXVldWUuc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIHRlc3RzIGZvciBwcmlvcml0eSBxdWV1ZSBpbXBsZW1lbnRhdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdCA8PCdFT0YnCisxCisyCiszCis0Cis1Cis1Cis2Cis3Cis4Cis5CisxMAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBvcmRlcmluZycgJworCXRlc3QtcHJpby1xdWV1ZSAyIDYgMyAxMCA5IDUgNyA0IDUgOCAxIGR1bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworMgorMworNAorMQorNQorNgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXhlZCBwdXQgYW5kIGdldCcgJworCXRlc3QtcHJpby1xdWV1ZSA2IDIgNCBnZXQgNSAzIGdldCBnZXQgMSBkdW1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKzEKKzIKK05VTEwKKzEKKzIKK05VTEwKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90aWNlIGVtcHR5IHF1ZXVlJyAnCisJdGVzdC1wcmlvLXF1ZXVlIDEgMiBnZXQgZ2V0IGdldCAxIDIgZ2V0IGdldCBnZXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDEwLXJhY3ktZ2l0LnNoIGIvdC90MDAxMC1yYWN5LWdpdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjU3YzVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxMC1yYWN5LWdpdC5zaApAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmFjeSBHSVQnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRoaXMgdGVzdCBjYW4gZ2l2ZSBmYWxzZSBzdWNjZXNzIGlmIHlvdXIgbWFjaGluZSBpcyBzdWZmaWNpZW50bHkKKyMgc2xvdyBvciB5b3VyIHRyaWFsIGhhcHBlbmVkIHRvIGhhcHBlbiBvbiBzZWNvbmQgYm91bmRhcnkuCisKK2ZvciB0cmlhbCBpbiAwIDEgMiAzIDQKK2RvCisJcm0gLWYgLmdpdC9pbmRleAorCWVjaG8gZnJvdHogPmluZm9jb20KKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGluZm9jb20KKwllY2hvIHh5enp5ID5pbmZvY29tCisKKwlmaWxlcz0kKGdpdCBkaWZmLWZpbGVzIC1wKQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJSYWN5IEdJVCB0cmlhbCAjJHRyaWFsIHBhcnQgQSIgXAorCSd0ZXN0ICIiICE9ICIkZmlsZXMiJworCisJc2xlZXAgMQorCWVjaG8geHl6enkgPmNvcm5lcnN0b25lCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBjb3JuZXJzdG9uZQorCisJZmlsZXM9JChnaXQgZGlmZi1maWxlcyAtcCkKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiUmFjeSBHSVQgdHJpYWwgIyR0cmlhbCBwYXJ0IEIiIFwKKwkndGVzdCAiIiAhPSAiJGZpbGVzIicKKworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMTEtaGFzaG1hcC5zaCBiL3QvdDAwMTEtaGFzaG1hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YzIxN2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDAxMS1oYXNobWFwLnNoCkBAIC0wLDAgKzEsMjUzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBoYXNobWFwIGFuZCBzdHJpbmcgaGFzaCBmdW5jdGlvbnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9oYXNobWFwKCkgeworCWVjaG8gIiQxIiB8IHRlc3QtaGFzaG1hcCAkMyA+IGFjdHVhbCAmJgorCWVjaG8gIiQyIiA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFzaCBmdW5jdGlvbnMnICcKKwordGVzdF9oYXNobWFwICJoYXNoIGtleTEiICIyMjE1OTgyNzQzIDIyMTU5ODI3NDMgMTE2MzcyMTUxIDExNjM3MjE1MSIgJiYKK3Rlc3RfaGFzaG1hcCAiaGFzaCBrZXkyIiAiMjIxNTk4Mjc0MCAyMjE1OTgyNzQwIDExNjM3MjE0OCAxMTYzNzIxNDgiICYmCit0ZXN0X2hhc2htYXAgImhhc2ggZm9vQmFyRnJvdHoiICIxMzgzOTEyODA3IDEzODM5MTI4MDcgMzE4OTc2NjcyNyAzMTg5NzY2NzI3IiAmJgordGVzdF9oYXNobWFwICJoYXNoIGZvb2JhcmZyb3R6IiAiMjg2MjMwNTk1OSAyODYyMzA1OTU5IDMxODk3NjY3MjcgMzE4OTc2NjcyNyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXQnICcKKwordGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKK3B1dCBrZXkyIHZhbHVlMgorcHV0IGZvb0JhckZyb3R6IHZhbHVlMworcHV0IGZvb2JhcmZyb3R6IHZhbHVlNAorc2l6ZSIgIk5VTEwKK05VTEwKK05VTEwKK05VTEwKKzY0IDQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHV0IChjYXNlIGluc2Vuc2l0aXZlKScgJworCit0ZXN0X2hhc2htYXAgInB1dCBrZXkxIHZhbHVlMQorcHV0IGtleTIgdmFsdWUyCitwdXQgZm9vQmFyRnJvdHogdmFsdWUzCitzaXplIiAiTlVMTAorTlVMTAorTlVMTAorNjQgMyIgaWdub3JlY2FzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2UnICcKKwordGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKK3B1dCBrZXkxIHZhbHVlMgorcHV0IGZvb0JhckZyb3R6IHZhbHVlMworcHV0IGZvb0JhckZyb3R6IHZhbHVlNAorc2l6ZSIgIk5VTEwKK3ZhbHVlMQorTlVMTAordmFsdWUzCis2NCAyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2UgKGNhc2UgaW5zZW5zaXRpdmUpJyAnCisKK3Rlc3RfaGFzaG1hcCAicHV0IGtleTEgdmFsdWUxCitwdXQgS2V5MSB2YWx1ZTIKK3B1dCBmb29CYXJGcm90eiB2YWx1ZTMKK3B1dCBmb29iYXJmcm90eiB2YWx1ZTQKK3NpemUiICJOVUxMCit2YWx1ZTEKK05VTEwKK3ZhbHVlMworNjQgMiIgaWdub3JlY2FzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCcgJworCit0ZXN0X2hhc2htYXAgInB1dCBrZXkxIHZhbHVlMQorcHV0IGtleTIgdmFsdWUyCitwdXQgZm9vQmFyRnJvdHogdmFsdWUzCitwdXQgZm9vYmFyZnJvdHogdmFsdWU0CitnZXQga2V5MQorZ2V0IGtleTIKK2dldCBmb29CYXJGcm90egorZ2V0IG5vdEluTWFwIiAiTlVMTAorTlVMTAorTlVMTAorTlVMTAordmFsdWUxCit2YWx1ZTIKK3ZhbHVlMworTlVMTCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgKGNhc2UgaW5zZW5zaXRpdmUpJyAnCisKK3Rlc3RfaGFzaG1hcCAicHV0IGtleTEgdmFsdWUxCitwdXQga2V5MiB2YWx1ZTIKK3B1dCBmb29CYXJGcm90eiB2YWx1ZTMKK2dldCBLZXkxCitnZXQga2VZMgorZ2V0IGZvb2JhcmZyb3R6CitnZXQgbm90SW5NYXAiICJOVUxMCitOVUxMCitOVUxMCit2YWx1ZTEKK3ZhbHVlMgordmFsdWUzCitOVUxMIiBpZ25vcmVjYXNlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkJyAnCisKK3Rlc3RfaGFzaG1hcCAiYWRkIGtleTEgdmFsdWUxCithZGQga2V5MSB2YWx1ZTIKK2FkZCBmb29CYXJGcm90eiB2YWx1ZTMKK2FkZCBmb29CYXJGcm90eiB2YWx1ZTQKK2dldCBrZXkxCitnZXQgZm9vQmFyRnJvdHoKK2dldCBub3RJbk1hcCIgInZhbHVlMgordmFsdWUxCit2YWx1ZTQKK3ZhbHVlMworTlVMTCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgKGNhc2UgaW5zZW5zaXRpdmUpJyAnCisKK3Rlc3RfaGFzaG1hcCAiYWRkIGtleTEgdmFsdWUxCithZGQgS2V5MSB2YWx1ZTIKK2FkZCBmb29CYXJGcm90eiB2YWx1ZTMKK2FkZCBmb29iYXJmcm90eiB2YWx1ZTQKK2dldCBrZXkxCitnZXQgRm9vYmFyZnJvdHoKK2dldCBub3RJbk1hcCIgInZhbHVlMgordmFsdWUxCit2YWx1ZTQKK3ZhbHVlMworTlVMTCIgaWdub3JlY2FzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZScgJworCit0ZXN0X2hhc2htYXAgInB1dCBrZXkxIHZhbHVlMQorcHV0IGtleTIgdmFsdWUyCitwdXQgZm9vQmFyRnJvdHogdmFsdWUzCityZW1vdmUga2V5MQorcmVtb3ZlIGtleTIKK3JlbW92ZSBub3RJbk1hcAorc2l6ZSIgIk5VTEwKK05VTEwKK05VTEwKK3ZhbHVlMQordmFsdWUyCitOVUxMCis2NCAxIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSAoY2FzZSBpbnNlbnNpdGl2ZSknICcKKwordGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKK3B1dCBrZXkyIHZhbHVlMgorcHV0IGZvb0JhckZyb3R6IHZhbHVlMworcmVtb3ZlIEtleTEKK3JlbW92ZSBrZVkyCityZW1vdmUgbm90SW5NYXAKK3NpemUiICJOVUxMCitOVUxMCitOVUxMCit2YWx1ZTEKK3ZhbHVlMgorTlVMTAorNjQgMSIgaWdub3JlY2FzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2l0ZXJhdGUnICcKKwordGVzdF9oYXNobWFwICJwdXQga2V5MSB2YWx1ZTEKK3B1dCBrZXkyIHZhbHVlMgorcHV0IGZvb0JhckZyb3R6IHZhbHVlMworaXRlcmF0ZSIgIk5VTEwKK05VTEwKK05VTEwKK2tleTIgdmFsdWUyCitrZXkxIHZhbHVlMQorZm9vQmFyRnJvdHogdmFsdWUzIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2l0ZXJhdGUgKGNhc2UgaW5zZW5zaXRpdmUpJyAnCisKK3Rlc3RfaGFzaG1hcCAicHV0IGtleTEgdmFsdWUxCitwdXQga2V5MiB2YWx1ZTIKK3B1dCBmb29CYXJGcm90eiB2YWx1ZTMKK2l0ZXJhdGUiICJOVUxMCitOVUxMCitOVUxMCitmb29CYXJGcm90eiB2YWx1ZTMKK2tleTIgdmFsdWUyCitrZXkxIHZhbHVlMSIgaWdub3JlY2FzZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyb3cgLyBzaHJpbmsnICcKKworCXJtIC1mIGluICYmCisJcm0gLWYgZXhwZWN0ICYmCisJZm9yIG4gaW4gJCh0ZXN0X3NlcSA1MSkKKwlkbworCQllY2hvIHB1dCBrZXkkbiB2YWx1ZSRuID4+IGluICYmCisJCWVjaG8gTlVMTCA+PiBleHBlY3QKKwlkb25lICYmCisJZWNobyBzaXplID4+IGluICYmCisJZWNobyA2NCA1MSA+PiBleHBlY3QgJiYKKwllY2hvIHB1dCBrZXk1MiB2YWx1ZTUyID4+IGluICYmCisJZWNobyBOVUxMID4+IGV4cGVjdCAmJgorCWVjaG8gc2l6ZSA+PiBpbiAmJgorCWVjaG8gMjU2IDUyID4+IGV4cGVjdCAmJgorCWZvciBuIGluICQodGVzdF9zZXEgMTIpCisJZG8KKwkJZWNobyByZW1vdmUga2V5JG4gPj4gaW4gJiYKKwkJZWNobyB2YWx1ZSRuID4+IGV4cGVjdAorCWRvbmUgJiYKKwllY2hvIHNpemUgPj4gaW4gJiYKKwllY2hvIDI1NiA0MCA+PiBleHBlY3QgJiYKKwllY2hvIHJlbW92ZSBrZXk0MCA+PiBpbiAmJgorCWVjaG8gdmFsdWU0MCA+PiBleHBlY3QgJiYKKwllY2hvIHNpemUgPj4gaW4gJiYKKwllY2hvIDY0IDM5ID4+IGV4cGVjdCAmJgorCWNhdCBpbiB8IHRlc3QtaGFzaG1hcCA+IG91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJpbmcgaW50ZXJuaW5nJyAnCisKK3Rlc3RfaGFzaG1hcCAiaW50ZXJuIHZhbHVlMQoraW50ZXJuIFZhbHVlMQoraW50ZXJuIHZhbHVlMgoraW50ZXJuIHZhbHVlMgorIiAidmFsdWUxCitWYWx1ZTEKK3ZhbHVlMgordmFsdWUyIgorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyMC1jcmxmLnNoIGIvdC90MDAyMC1jcmxmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5NDEyMGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDIwLWNybGYuc2gKQEAgLTAsMCArMSwzODUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDUkxGIGNvbnZlcnNpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCitoYXNfY3IoKSB7CisJdHIgJ1wwMTUnIFEgPCIkMSIgfCBncmVwIFEgPi9kZXYvbnVsbAorfQorCisjIGFkZCBvciByZW1vdmUgQ1JzIHRvIGRpc2sgZmlsZSBpbi1wbGFjZQorIyB1c2FnZTogbXVuZ2VfY3IgPGFwcGVuZHxyZW1vdmU+IDxmaWxlPgorbXVuZ2VfY3IgKCkgeworCSIkezF9X2NyIiA8IiQyIiA+dG1wICYmCisJbXYgdG1wICIkMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKworCWZvciB3IGluIEhlbGxvIHdvcmxkIGhvdyBhcmUgeW91OyBkbyBlY2hvICR3OyBkb25lID5vbmUgJiYKKwlta2RpciBkaXIgJiYKKwlmb3IgdyBpbiBJIGFtIHZlcnkgdmVyeSBmaW5lIHRoYW5rIHlvdTsgZG8gZWNobyAkdzsgZG9uZSA+ZGlyL3R3byAmJgorCWZvciB3IGluIE9oIGhlcmUgaXMgTlVMUWluIHRleHQgaGVyZTsgZG8gZWNobyAkdzsgZG9uZSB8IHFfdG9fbnVsID50aHJlZSAmJgorCWdpdCBhZGQgLiAmJgorCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUQ6b25lKSAmJgorCWRpcj0kKGdpdCByZXYtcGFyc2UgSEVBRDpkaXIpICYmCisJdHdvPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmRpci90d28pICYmCisJdGhyZWU9JChnaXQgcmV2LXBhcnNlIEhFQUQ6dGhyZWUpICYmCisKKwlmb3IgdyBpbiBTb21lIGV4dHJhIGxpbmVzIGhlcmU7IGRvIGVjaG8gJHc7IGRvbmUgPj5vbmUgJiYKKwlnaXQgZGlmZiA+cGF0Y2guZmlsZSAmJgorCXBhdGNoZWQ9JChnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8b25lKSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBhdXRvY3JsZj1pbnB1dCwgYWxsIENSTEYnICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiB0cnVlICYmCisKKwlmb3IgdyBpbiBJIGFtIGFsbCBDUkxGOyBkbyBlY2hvICR3OyBkb25lIHwgYXBwZW5kX2NyID5hbGxjcmxmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBhbGxjcmxmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBhdXRvY3JsZj1pbnB1dCwgbWl4ZWQgTEYvQ1JMRicgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHRydWUgJiYKKworCWZvciB3IGluIE9oIGhlcmUgaXMgQ1JMRlEgaW4gdGV4dDsgZG8gZWNobyAkdzsgZG9uZSB8IHFfdG9fY3IgPm1peGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBtaXhlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYWZlY3JsZjogYXV0b2NybGY9dHJ1ZSwgYWxsIExGJyAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiB0cnVlICYmCisKKwlmb3IgdyBpbiBJIGFtIGFsbCBMRjsgZG8gZWNobyAkdzsgZG9uZSA+YWxsbGYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGFsbGxmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhZmVjcmxmOiBhdXRvY3JsZj10cnVlIG1peGVkIExGL0NSTEYnICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLnNhZmVjcmxmIHRydWUgJiYKKworCWZvciB3IGluIE9oIGhlcmUgaXMgQ1JMRlEgaW4gdGV4dDsgZG8gZWNobyAkdzsgZG9uZSB8IHFfdG9fY3IgPm1peGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBtaXhlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYWZlY3JsZjogcHJpbnQgd2FybmluZyBvbmx5IG9uY2UnICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBpbnB1dCAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiB3YXJuICYmCisKKwlmb3IgdyBpbiBJIGFtIGFsbCBMRjsgZG8gZWNobyAkdzsgZG9uZSA+ZG91Ymxld2FybiAmJgorCWdpdCBhZGQgZG91Ymxld2FybiAmJgorCWdpdCBjb21taXQgLW0gIm5vd2FybiIgJiYKKwlmb3IgdyBpbiBPaCBoZXJlIGlzIENSTEZRIGluIHRleHQ7IGRvIGVjaG8gJHc7IGRvbmUgfCBxX3RvX2NyID5kb3VibGV3YXJuICYmCisJdGVzdCAkKGdpdCBhZGQgZG91Ymxld2FybiAyPiYxIHwgZ3JlcCAiQ1JMRiB3aWxsIGJlIHJlcGxhY2VkIGJ5IExGIiB8IHdjIC1sKSA9IDEKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYWZlY3JsZjogZ2l0IGRpZmYgZGVtb3RlcyBzYWZlY3JsZj10cnVlIHRvIHdhcm4nICcKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgaW5wdXQgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2FmZWNybGYgdHJ1ZSAmJgorCWdpdCBkaWZmIEhFQUQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggb2ZmIGF1dG9jcmxmLCBzYWZlY3JsZiwgcmVzZXQgSEVBRCcgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCWdpdCBjb25maWcgY29yZS5zYWZlY3JsZiBmYWxzZSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHdpdGggYXV0b2NybGY9aW5wdXQnICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJbXVuZ2VfY3IgYXBwZW5kIG9uZSAmJgorCW11bmdlX2NyIGFwcGVuZCBkaXIvdHdvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLSBvbmUgZGlyL3R3byAmJgorCWRpZmZlcnM9JChnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEKSAmJgorCXZlcmJvc2UgdGVzdCAteiAiJGRpZmZlcnMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHdpdGggYXV0b2NybGY9dHJ1ZScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCW11bmdlX2NyIGFwcGVuZCBvbmUgJiYKKwltdW5nZV9jciBhcHBlbmQgZGlyL3R3byAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS0gb25lIGRpci90d28gJiYKKwlkaWZmZXJzPSQoZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRCkgJiYKKwl2ZXJib3NlIHRlc3QgLXogIiRkaWZmZXJzIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggYXV0b2NybGY9dHJ1ZScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCW11bmdlX2NyIHJlbW92ZSBvbmUgJiYKKwltdW5nZV9jciByZW1vdmUgZGlyL3R3byAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS0gb25lIGRpci90d28gJiYKKwl0ZXN0ICIkb25lIiA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPG9uZSkgJiYKKwl0ZXN0ICIkdHdvIiA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPGRpci90d28pICYmCisJZGlmZmVycz0kKGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQpICYmCisJdmVyYm9zZSB0ZXN0IC16ICIkZGlmZmVycyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aCBhdXRvY3JsZj1pbnB1dCcgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBoYXNfY3Igb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgaGFzX2NyIHR3byAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS0gb25lIGRpci90d28gJiYKKwl0ZXN0ICIkb25lIiA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPG9uZSkgJiYKKwl0ZXN0ICIkdHdvIiA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPGRpci90d28pICYmCisJZGlmZmVycz0kKGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQpICYmCisJdmVyYm9zZSB0ZXN0IC16ICIkZGlmZmVycyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggKGF1dG9jcmxmPWlucHV0KScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWdpdCBhcHBseSBwYXRjaC5maWxlICYmCisJdmVyYm9zZSB0ZXN0ICIkcGF0Y2hlZCIgPSAiJChnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8b25lKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggLS1jYWNoZWQgKGF1dG9jcmxmPWlucHV0KScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWdpdCBhcHBseSAtLWNhY2hlZCBwYXRjaC5maWxlICYmCisJdmVyYm9zZSB0ZXN0ICIkcGF0Y2hlZCIgPSAkKGdpdCByZXYtcGFyc2UgOm9uZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggLS1pbmRleCAoYXV0b2NybGY9aW5wdXQpJyAnCisKKwlybSAtZiB0bXAgb25lIGRpci90d28gdGhyZWUgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgaW5wdXQgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2guZmlsZSAmJgorCXZlcmJvc2UgdGVzdCAiJHBhdGNoZWQiID0gJChnaXQgcmV2LXBhcnNlIDpvbmUpICYmCisJdmVyYm9zZSB0ZXN0ICIkcGF0Y2hlZCIgPSAkKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxvbmUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHBhdGNoIChhdXRvY3JsZj10cnVlKScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJZ2l0IGFwcGx5IHBhdGNoLmZpbGUgJiYKKwl2ZXJib3NlIHRlc3QgIiRwYXRjaGVkIiA9ICIkKHJlbW92ZV9jciA8b25lIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBwYXRjaCAtLWNhY2hlZCAoYXV0b2NybGY9dHJ1ZSknICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWdpdCBhcHBseSAtLWNhY2hlZCBwYXRjaC5maWxlICYmCisJdmVyYm9zZSB0ZXN0ICIkcGF0Y2hlZCIgPSAkKGdpdCByZXYtcGFyc2UgOm9uZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcGF0Y2ggLS1pbmRleCAoYXV0b2NybGY9dHJ1ZSknICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoLmZpbGUgJiYKKwl2ZXJib3NlIHRlc3QgIiRwYXRjaGVkIiA9ICQoZ2l0IHJldi1wYXJzZSA6b25lKSAmJgorCXZlcmJvc2UgdGVzdCAiJHBhdGNoZWQiID0gIiQocmVtb3ZlX2NyIDxvbmUgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRhdHRyaWJ1dGVzIHNheXMgdHdvIGlzIGJpbmFyeScgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZWNobyAidHdvIC1jcmxmIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwl0ZXN0X211c3RfZmFpbCBoYXNfY3IgZGlyL3R3byAmJgorCXZlcmJvc2UgaGFzX2NyIG9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGhhc19jciB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0YXR0cmlidXRlcyBzYXlzIHR3byBpcyBpbnB1dCcgJworCisJcm0gLWYgdG1wIG9uZSBkaXIvdHdvIHRocmVlICYmCisJZWNobyAidHdvIGNybGY9aW5wdXQiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwl0ZXN0X211c3RfZmFpbCBoYXNfY3IgZGlyL3R3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0YXR0cmlidXRlcyBzYXlzIHR3byBhbmQgdGhyZWUgYXJlIHRleHQnICcKKworCXJtIC1mIHRtcCBvbmUgZGlyL3R3byB0aHJlZSAmJgorCWVjaG8gInQqIGNybGYiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwl2ZXJib3NlIGhhc19jciBkaXIvdHdvICYmCisJdmVyYm9zZSBoYXNfY3IgdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4tdHJlZSAuZ2l0YXR0cmlidXRlcyAoMSknICcKKworCWVjaG8gIm9uZSAtY3JsZiIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgLmdpdGF0dHJpYnV0ZXMiICYmCisKKwlybSAtcmYgdG1wIG9uZSBkaXIgLmdpdGF0dHJpYnV0ZXMgcGF0Y2guZmlsZSB0aHJlZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwl0ZXN0X211c3RfZmFpbCBoYXNfY3Igb25lICYmCisJdmVyYm9zZSBoYXNfY3IgdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4tdHJlZSAuZ2l0YXR0cmlidXRlcyAoMiknICcKKworCXJtIC1yZiB0bXAgb25lIGRpciAuZ2l0YXR0cmlidXRlcyBwYXRjaC5maWxlIHRocmVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXEgLXUgLWEgJiYKKworCXRlc3RfbXVzdF9mYWlsIGhhc19jciBvbmUgJiYKKwl2ZXJib3NlIGhhc19jciB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbi10cmVlIC5naXRhdHRyaWJ1dGVzICgzKScgJworCisJcm0gLXJmIHRtcCBvbmUgZGlyIC5naXRhdHRyaWJ1dGVzIHBhdGNoLmZpbGUgdGhyZWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgSEVBRCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjaGVja291dC1pbmRleCAtdSBvbmUgZGlyL3R3byB0aHJlZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgaGFzX2NyIG9uZSAmJgorCXZlcmJvc2UgaGFzX2NyIHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luLXRyZWUgLmdpdGF0dHJpYnV0ZXMgKDQpJyAnCisKKwlybSAtcmYgdG1wIG9uZSBkaXIgLmdpdGF0dHJpYnV0ZXMgcGF0Y2guZmlsZSB0aHJlZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCBIRUFEICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IG9uZSBkaXIvdHdvIHRocmVlICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC11IC5naXRhdHRyaWJ1dGVzICYmCisKKwl0ZXN0X211c3RfZmFpbCBoYXNfY3Igb25lICYmCisJdmVyYm9zZSBoYXNfY3IgdGhyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd2l0aCBleGlzdGluZyAuZ2l0YXR0cmlidXRlcycgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5zYWZlY3JsZiAmJgorCWVjaG8gIi5maWxlMiAtY3JsZlEiIHwgcV90b19jciA+PiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvICIuZmlsZSAtY3JsZlEiIHwgcV90b19jciA+PiAuZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gImNvbnRlbnRzIiA+IC5maWxlICYmCisJZ2l0IGFkZCAuZ2l0YXR0cmlidXRlcyAuZmlsZSAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyfjEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLXJhdykiID0gIiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aGVuIGRlbGV0aW5nIC5naXRhdHRyaWJ1dGVzJyAnCisKKwlnaXQgcm0gLmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJjb250ZW50c1EiIHwgcV90b19jciA+IC5maWxlMiAmJgorCWdpdCBhZGQgLmZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcn4xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWhhc19jciAuZmlsZTIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIC5naXRhdHRyaWJ1dGVzIChtdXN0IG5vdCBjcmFzaCknICcKKworCWVjaG8gInRocmVlICtjcmxmIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGRpZmYKKworJworIyBTb21lIG1vcmUgdGVzdHMgaGVyZSB0byBhZGQgbmV3IGF1dG9jcmxmIGZ1bmN0aW9uYWxpdHkuCisjIFdlIHdhbnQgdG8gaGF2ZSBhIGtub3duIHN0YXRlIGhlcmUsIHNvIHN0YXJ0IGEgYml0IGZyb20gc2NyYXRjaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR0aW5nIHVwIGZvciBuZXcgYXV0b2NybGYgdGVzdHMnICcKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2FmZWNybGYgZmFsc2UgJiYKKwlybSAtcmYgLj8/Pz8qICogJiYKKwlmb3IgdyBpbiBJIGFtIGFsbCBMRjsgZG8gZWNobyAkdzsgZG9uZSA+YWxsbGYgJiYKKwlmb3IgdyBpbiBPaCBoZXJlIGlzIENSTEZRIGluIHRleHQ7IGRvIGVjaG8gJHc7IGRvbmUgfCBxX3RvX2NyID5taXhlZCAmJgorCWZvciB3IGluIEkgYW0gYWxsIENSTEY7IGRvIGVjaG8gJHc7IGRvbmUgfCBhcHBlbmRfY3IgPmFsbGNybGYgJiYKKwlnaXQgYWRkIC1BIC4gJiYKKwlnaXQgY29tbWl0IC1tICJhbGxsZiwgYWxsY3JsZiBhbmQgbWl4ZWQgb25seSIgJiYKKwlnaXQgdGFnIC1hIC1tICJtZXNzYWdlIiBhdXRvY3JsZi1jaGVja3BvaW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcG9ydCBubyBjaGFuZ2UgYWZ0ZXIgc2V0dGluZyBhdXRvY3JsZicgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJdG91Y2ggKiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGVzIGFyZSBjbGVhbiBhZnRlciBjaGVja291dCcgJworCXJtICogJiYKKwlnaXQgY2hlY2tvdXQgLWYgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZQorJworCitjcl90b19RX25vX05MICgpIHsKKyAgICB0ciAnXDAxNScgUSB8IHRyIC1kICdcMDEyJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdMRiBvbmx5IGZpbGUgZ2V0cyBDUkxGIHdpdGggYXV0b2NybGYnICcKKwl0ZXN0ICIkKGNyX3RvX1Ffbm9fTkwgPCBhbGxsZikiID0gIklRYW1RYWxsUUxGUSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTWl4ZWQgZmlsZSBpcyBzdGlsbCBtaXhlZCB3aXRoIGF1dG9jcmxmJyAnCisJdGVzdCAiJChjcl90b19RX25vX05MIDwgbWl4ZWQpIiA9ICJPaGhlcmVpc0NSTEZRaW50ZXh0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDUkxGIG9ubHkgZmlsZSBoYXMgQ1JMRiB3aXRoIGF1dG9jcmxmJyAnCisJdGVzdCAiJChjcl90b19RX25vX05MIDwgYWxsY3JsZikiID0gIklRYW1RYWxsUUNSTEZRIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOZXcgQ1JMRiBmaWxlIGdldHMgTEYgaW4gcmVwbycgJworCXRyIC1kICJcMDE1IiA8IGFsbGxmIHwgYXBwZW5kX2NyID4gYWxsbGYyICYmCisJZ2l0IGFkZCBhbGxsZjIgJiYKKwlnaXQgY29tbWl0IC1tICJhbGxsZjIgYWRkZWQiICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGZhbHNlICYmCisJcm0gKiAmJgorCWdpdCBjaGVja291dCAtZiAmJgorCXRlc3RfY21wIGFsbGxmIGFsbGxmMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjEtY29udmVyc2lvbi5zaCBiL3QvdDAwMjEtY29udmVyc2lvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MThlZmEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAyMS1jb252ZXJzaW9uLnNoCkBAIC0wLDAgKzEsMjU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmxvYiBjb252ZXJzaW9uIHZpYSBnaXRhdHRyaWJ1dGVzJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0IDw8RU9GID5yb3QxMy5zaAorIyEkU0hFTExfUEFUSAordHIgXAorICAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgXAorICAnbm9wcXJzdHV2d3h5emFiY2RlZmdoaWprbG1OT1BRUlNUVVZXWFlaQUJDREVGR0hJSktMTScKK0VPRgorY2htb2QgK3ggcm90MTMuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBmaWx0ZXIucm90MTMuc211ZGdlIC4vcm90MTMuc2ggJiYKKwlnaXQgY29uZmlnIGZpbHRlci5yb3QxMy5jbGVhbiAuL3JvdDEzLnNoICYmCisKKwl7CisJICAgIGVjaG8gIioudCBmaWx0ZXI9cm90MTMiCisJICAgIGVjaG8gIiouaSBpZGVudCIKKwl9ID4uZ2l0YXR0cmlidXRlcyAmJgorCisJeworCSAgICBlY2hvIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0KKwkgICAgZWNobyBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6CisJICAgIGVjaG8gJ1wnJyRJZCQnXCcnCisJfSA+dGVzdCAmJgorCWNhdCB0ZXN0ID50ZXN0LnQgJiYKKwljYXQgdGVzdCA+dGVzdC5vICYmCisJY2F0IHRlc3QgPnRlc3QuaSAmJgorCWdpdCBhZGQgdGVzdCB0ZXN0LnQgdGVzdC5pICYmCisJcm0gLWYgdGVzdCB0ZXN0LnQgdGVzdC5pICYmCisJZ2l0IGNoZWNrb3V0IC0tIHRlc3QgdGVzdC50IHRlc3QuaQorJworCitzY3JpcHQ9J3MvXlwkSWQ6IFwoWzAtOWEtZl0qXCkgXCQvXDEvcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBjaGVjayAnCisKKwljbXAgdGVzdC5vIHRlc3QgJiYKKwljbXAgdGVzdC5vIHRlc3QudCAmJgorCisJIyBpZGVudCBzaG91bGQgYmUgc3RyaXBwZWQgaW4gdGhlIHJlcG9zaXRvcnkKKwlnaXQgZGlmZiAtLXJhdyAtLWV4aXQtY29kZSA6dGVzdCA6dGVzdC5pICYmCisJaWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDp0ZXN0KSAmJgorCWVtYmVkZGVkPSQoc2VkIC1uZSAiJHNjcmlwdCIgdGVzdC5pKSAmJgorCXRlc3QgInokaWQiID0gInokZW1iZWRkZWQiICYmCisKKwlnaXQgY2F0LWZpbGUgYmxvYiA6dGVzdC50ID4gdGVzdC5yICYmCisKKwkuL3JvdDEzLnNoIDwgdGVzdC5vID4gdGVzdC50ICYmCisJY21wIHRlc3QuciB0ZXN0LnQKKycKKworIyBJZiBhbiBleHBhbmRlZCBpZGVudCBldmVyIGdldHMgaW50byB0aGUgcmVwb3NpdG9yeSwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdAorIyBpdCBpcyBjb2xsYXBzZWQgYmVmb3JlIGJlaW5nIGV4cGFuZGVkIGFnYWluIG9uIGNoZWNrb3V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIGV4cGFuZGVkX2luX3JlcG8gJworCXsKKwkJZWNobyAiRmlsZSB3aXRoIGV4cGFuZGVkIGtleXdvcmRzIgorCQllY2hvICJcJElkXCQiCisJCWVjaG8gIlwkSWQ6XCQiCisJCWVjaG8gIlwkSWQ6IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgXCQiCisJCWVjaG8gIlwkSWQ6IE5vU3BhY2VBdEVuZFwkIgorCQllY2hvICJcJElkOk5vU3BhY2VBdEZyb250IFwkIgorCQllY2hvICJcJElkOk5vU3BhY2VBdEVpdGhlckVuZFwkIgorCQllY2hvICJcJElkOiBOb1Rlcm1pbmF0aW5nU3ltYm9sIgorCQllY2hvICJcJElkOiBGb3JlaWduIENvbW1pdCBXaXRoIFNwYWNlcyBcJCIKKwl9ID5leHBhbmRlZC1rZXl3b3Jkcy4wICYmCisKKwl7CisJCWNhdCBleHBhbmRlZC1rZXl3b3Jkcy4wICYmCisJCXByaW50ZiAiXCRJZDogTm9UZXJtaW5hdGluZ1N5bWJvbEF0RU9GIgorCX0gPmV4cGFuZGVkLWtleXdvcmRzICYmCisJY2F0IGV4cGFuZGVkLWtleXdvcmRzID5leHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisJZ2l0IGFkZCBleHBhbmRlZC1rZXl3b3JkcyBleHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisJZ2l0IGNvbW1pdCAtbSAiRmlsZSB3aXRoIGtleXdvcmRzIGV4cGFuZGVkIiAmJgorCWlkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6ZXhwYW5kZWQta2V5d29yZHMpICYmCisKKwl7CisJCWVjaG8gIkZpbGUgd2l0aCBleHBhbmRlZCBrZXl3b3JkcyIKKwkJZWNobyAiXCRJZDogJGlkIFwkIgorCQllY2hvICJcJElkOiAkaWQgXCQiCisJCWVjaG8gIlwkSWQ6ICRpZCBcJCIKKwkJZWNobyAiXCRJZDogJGlkIFwkIgorCQllY2hvICJcJElkOiAkaWQgXCQiCisJCWVjaG8gIlwkSWQ6ICRpZCBcJCIKKwkJZWNobyAiXCRJZDogTm9UZXJtaW5hdGluZ1N5bWJvbCIKKwkJZWNobyAiXCRJZDogRm9yZWlnbiBDb21taXQgV2l0aCBTcGFjZXMgXCQiCisJfSA+ZXhwZWN0ZWQtb3V0cHV0LjAgJiYKKwl7CisJCWNhdCBleHBlY3RlZC1vdXRwdXQuMCAmJgorCQlwcmludGYgIlwkSWQ6IE5vVGVybWluYXRpbmdTeW1ib2xBdEVPRiIKKwl9ID5leHBlY3RlZC1vdXRwdXQgJiYKKwl7CisJCWFwcGVuZF9jciA8ZXhwZWN0ZWQtb3V0cHV0LjAgJiYKKwkJcHJpbnRmICJcJElkOiBOb1Rlcm1pbmF0aW5nU3ltYm9sQXRFT0YiCisJfSA+ZXhwZWN0ZWQtb3V0cHV0LWNybGYgJiYKKwl7CisJCWVjaG8gImV4cGFuZGVkLWtleXdvcmRzIGlkZW50IgorCQllY2hvICJleHBhbmRlZC1rZXl3b3Jkcy1jcmxmIGlkZW50IHRleHQgZW9sPWNybGYiCisJfSA+Pi5naXRhdHRyaWJ1dGVzICYmCisKKwlybSAtZiBleHBhbmRlZC1rZXl3b3JkcyBleHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisKKwlnaXQgY2hlY2tvdXQgLS0gZXhwYW5kZWQta2V5d29yZHMgJiYKKwl0ZXN0X2NtcCBleHBhbmRlZC1rZXl3b3JkcyBleHBlY3RlZC1vdXRwdXQgJiYKKworCWdpdCBjaGVja291dCAtLSBleHBhbmRlZC1rZXl3b3Jkcy1jcmxmICYmCisJdGVzdF9jbXAgZXhwYW5kZWQta2V5d29yZHMtY3JsZiBleHBlY3RlZC1vdXRwdXQtY3JsZgorJworCisjIFRoZSB1c2Ugb2YgJWYgaW4gYSBmaWx0ZXIgZGVmaW5pdGlvbiBpcyBleHBhbmRlZCB0byB0aGUgcGF0aCB0bworIyB0aGUgZmlsZW5hbWUgYmVpbmcgc211ZGdlZCBvciBjbGVhbmVkLiAgSXQgbXVzdCBiZSBzaGVsbCBlc2NhcGVkLgorIyBGaXJzdCwgc2V0IHVwIHNvbWUgaW50ZXJlc3RpbmcgZmlsZSBuYW1lcyBhbmQgcGV0IHRoZW0gaW4KKyMgLmdpdGF0dHJpYnV0ZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWx0ZXIgc2hlbGwtZXNjYXBlZCBmaWxlbmFtZXMnICcKKwljYXQgPmFyZ2Muc2ggPDwtRU9GICYmCisJIyEkU0hFTExfUEFUSAorCWNhdCA+L2Rldi9udWxsCisJZWNobyBhcmdjOiBcJCMgIlwkQCIKKwlFT0YKKwlub3JtYWw9bmFtZS1uby1tYWdpYyAmJgorCXNwZWNpYWw9Im5hbWUgIHdpdGggJ1wnJ3NxJ1wnJyBhbmQgXCR4IiAmJgorCWVjaG8gc29tZSB0ZXN0IHRleHQgPiIkbm9ybWFsIiAmJgorCWVjaG8gc29tZSB0ZXN0IHRleHQgPiIkc3BlY2lhbCIgJiYKKwlnaXQgYWRkICIkbm9ybWFsIiAiJHNwZWNpYWwiICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAiYWRkIGZpbGVzIiAmJgorCWVjaG8gIm5hbWUqIGZpbHRlcj1hcmdjIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCSMgZGVsZXRlIHRoZSBmaWxlcyBhbmQgY2hlY2sgdGhlbSBvdXQgYWdhaW4sIHVzaW5nIGEgc211ZGdlIGZpbHRlcgorCSMgdGhhdCB3aWxsIGNvdW50IHRoZSBhcmdzIGFuZCBlY2hvIHRoZSBjb21tYW5kLWxpbmUgYmFjayB0byB1cworCWdpdCBjb25maWcgZmlsdGVyLmFyZ2Muc211ZGdlICJzaCAuL2FyZ2Muc2ggJWYiICYmCisJcm0gIiRub3JtYWwiICIkc3BlY2lhbCIgJiYKKwlnaXQgY2hlY2tvdXQgLS0gIiRub3JtYWwiICIkc3BlY2lhbCIgJiYKKworCSMgbWFrZSBzdXJlIGFyZ2Muc2ggY291bnRlZCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3MKKwllY2hvICJhcmdjOiAxICRub3JtYWwiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgIiRub3JtYWwiICYmCisJZWNobyAiYXJnYzogMSAkc3BlY2lhbCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCAiJHNwZWNpYWwiICYmCisKKwkjIGRvIHRoZSBzYW1lIHRoaW5nLCBidXQgd2l0aCBtb3JlIGFyZ3MgaW4gdGhlIGZpbHRlciBleHByZXNzaW9uCisJZ2l0IGNvbmZpZyBmaWx0ZXIuYXJnYy5zbXVkZ2UgInNoIC4vYXJnYy5zaCAlZiAtLW15LWV4dHJhLWFyZyIgJiYKKwlybSAiJG5vcm1hbCIgIiRzcGVjaWFsIiAmJgorCWdpdCBjaGVja291dCAtLSAiJG5vcm1hbCIgIiRzcGVjaWFsIiAmJgorCisJIyBtYWtlIHN1cmUgYXJnYy5zaCBjb3VudGVkIHRoZSByaWdodCBudW1iZXIgb2YgYXJncworCWVjaG8gImFyZ2M6IDIgJG5vcm1hbCAtLW15LWV4dHJhLWFyZyIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCAiJG5vcm1hbCIgJiYKKwllY2hvICJhcmdjOiAyICRzcGVjaWFsIC0tbXktZXh0cmEtYXJnIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0ICIkc3BlY2lhbCIgJiYKKwk6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcXVpcmVkIGZpbHRlciBzaG91bGQgZmlsdGVyIGRhdGEnICcKKwlnaXQgY29uZmlnIGZpbHRlci5yZXF1aXJlZC5zbXVkZ2UgLi9yb3QxMy5zaCAmJgorCWdpdCBjb25maWcgZmlsdGVyLnJlcXVpcmVkLmNsZWFuIC4vcm90MTMuc2ggJiYKKwlnaXQgY29uZmlnIGZpbHRlci5yZXF1aXJlZC5yZXF1aXJlZCB0cnVlICYmCisKKwllY2hvICIqLnIgZmlsdGVyPXJlcXVpcmVkIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCWNhdCB0ZXN0Lm8gPnRlc3QuciAmJgorCWdpdCBhZGQgdGVzdC5yICYmCisKKwlybSAtZiB0ZXN0LnIgJiYKKwlnaXQgY2hlY2tvdXQgLS0gdGVzdC5yICYmCisJY21wIHRlc3QubyB0ZXN0LnIgJiYKKworCS4vcm90MTMuc2ggPHRlc3QubyA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6dGVzdC5yID5hY3R1YWwgJiYKKwljbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcXVpcmVkIGZpbHRlciBzbXVkZ2UgZmFpbHVyZScgJworCWdpdCBjb25maWcgZmlsdGVyLmZhaWxzbXVkZ2Uuc211ZGdlIGZhbHNlICYmCisJZ2l0IGNvbmZpZyBmaWx0ZXIuZmFpbHNtdWRnZS5jbGVhbiBjYXQgJiYKKwlnaXQgY29uZmlnIGZpbHRlci5mYWlsc211ZGdlLnJlcXVpcmVkIHRydWUgJiYKKworCWVjaG8gIiouZnMgZmlsdGVyPWZhaWxzbXVkZ2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCisJZWNobyB0ZXN0ID50ZXN0LmZzICYmCisJZ2l0IGFkZCB0ZXN0LmZzICYmCisJcm0gLWYgdGVzdC5mcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLSB0ZXN0LmZzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcXVpcmVkIGZpbHRlciBjbGVhbiBmYWlsdXJlJyAnCisJZ2l0IGNvbmZpZyBmaWx0ZXIuZmFpbGNsZWFuLnNtdWRnZSBjYXQgJiYKKwlnaXQgY29uZmlnIGZpbHRlci5mYWlsY2xlYW4uY2xlYW4gZmFsc2UgJiYKKwlnaXQgY29uZmlnIGZpbHRlci5mYWlsY2xlYW4ucmVxdWlyZWQgdHJ1ZSAmJgorCisJZWNobyAiKi5mYyBmaWx0ZXI9ZmFpbGNsZWFuIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCWVjaG8gdGVzdCA+dGVzdC5mYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgdGVzdC5mYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWx0ZXJpbmcgbGFyZ2UgaW5wdXQgdG8gc21hbGwgb3V0cHV0IHNob3VsZCB1c2UgbGl0dGxlIG1lbW9yeScgJworCWdpdCBjb25maWcgZmlsdGVyLmRldm51bGwuY2xlYW4gImNhdCA+L2Rldi9udWxsIiAmJgorCWdpdCBjb25maWcgZmlsdGVyLmRldm51bGwucmVxdWlyZWQgdHJ1ZSAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSAzMCk7IGRvIHByaW50ZiAiJTEwNDg1NzZkIiAxOyBkb25lID4zME1CICYmCisJZWNobyAiMzBNQiBmaWx0ZXI9ZGV2bnVsbCIgPi5naXRhdHRyaWJ1dGVzICYmCisJR0lUX01NQVBfTElNSVQ9MW0gR0lUX0FMTE9DX0xJTUlUPTFtIGdpdCBhZGQgMzBNQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWx0ZXIgdGhhdCBkb2VzIG5vdCByZWFkIGlzIGZpbmUnICcKKwl0ZXN0LWdlbnJhbmRvbSBmb28gJCgoMTI4ICogMTAyNCArIDEpKSA+YmlnICYmCisJZWNobyAiYmlnIGZpbHRlcj1lcGlwZSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBmaWx0ZXIuZXBpcGUuY2xlYW4gImVjaG8geHl6enkiICYmCisJZ2l0IGFkZCBiaWcgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6YmlnID5hY3R1YWwgJiYKKwllY2hvIHh5enp5ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFICdmaWx0ZXIgbGFyZ2UgZmlsZScgJworCWdpdCBjb25maWcgZmlsdGVyLmxhcmdlZmlsZS5zbXVkZ2UgY2F0ICYmCisJZ2l0IGNvbmZpZyBmaWx0ZXIubGFyZ2VmaWxlLmNsZWFuIGNhdCAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSAyMDQ4KTsgZG8gcHJpbnRmICIlMTA0ODU3NmQiIDE7IGRvbmUgPjJHQiAmJgorCWVjaG8gIjJHQiBmaWx0ZXI9bGFyZ2VmaWxlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIDJHQiAyPmVyciAmJgorCSEgdGVzdCAtcyBlcnIgJiYKKwlybSAtZiAyR0IgJiYKKwlnaXQgY2hlY2tvdXQgLS0gMkdCIDI+ZXJyICYmCisJISB0ZXN0IC1zIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmaWx0ZXI6IGNsZWFuIGVtcHR5IGZpbGUiICcKKwlnaXQgY29uZmlnIGZpbHRlci5pbi1yZXBvLWhlYWRlci5jbGVhbiAgImVjaG8gY2xlYW5lZCAmJiBjYXQiICYmCisJZ2l0IGNvbmZpZyBmaWx0ZXIuaW4tcmVwby1oZWFkZXIuc211ZGdlICJzZWQgMWQiICYmCisKKwllY2hvICJlbXB0eS1pbi13b3JrdHJlZSAgICBmaWx0ZXI9aW4tcmVwby1oZWFkZXIiID4+LmdpdGF0dHJpYnV0ZXMgJiYKKwk+ZW1wdHktaW4td29ya3RyZWUgJiYKKworCWVjaG8gY2xlYW5lZCA+ZXhwZWN0ZWQgJiYKKwlnaXQgYWRkIGVtcHR5LWluLXdvcmt0cmVlICYmCisJZ2l0IHNob3cgOmVtcHR5LWluLXdvcmt0cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmlsdGVyOiBzbXVkZ2UgZW1wdHkgZmlsZSIgJworCWdpdCBjb25maWcgZmlsdGVyLmVtcHR5LWluLXJlcG8uY2xlYW4gImNhdCA+L2Rldi9udWxsIiAmJgorCWdpdCBjb25maWcgZmlsdGVyLmVtcHR5LWluLXJlcG8uc211ZGdlICJlY2hvIHNtdWRnZWQgJiYgY2F0IiAmJgorCisJZWNobyAiZW1wdHktaW4tcmVwbyBmaWx0ZXI9ZW1wdHktaW4tcmVwbyIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gZGVhZCBkYXRhIHdhbGtpbmcgPmVtcHR5LWluLXJlcG8gJiYKKwlnaXQgYWRkIGVtcHR5LWluLXJlcG8gJiYKKworCWVjaG8gc211ZGdlZCA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9ZmlsdGVyZWQtIGVtcHR5LWluLXJlcG8gJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWx0ZXJlZC1lbXB0eS1pbi1yZXBvCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyMi1jcmxmLXJlbmFtZS5zaCBiL3QvdDAwMjItY3JsZi1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2FmM2ZiYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjItY3JsZi1yZW5hbWUuc2gKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2lnbm9yZSBDUiBpbiBDUkxGIHNlcXVlbmNlIHdoaWxlIGNvbXB1dGluZyBzaW1pbGlhcml0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL3QwMDIyLWNybGYtcmVuYW1lLnNoID5zYW1wbGUgJiYKKwlnaXQgYWRkIHNhbXBsZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisKKwlhcHBlbmRfY3IgPCIkVEVTVF9ESVJFQ1RPUlkiL3QwMDIyLWNybGYtcmVuYW1lLnNoID5lbHBtYXMgJiYKKwlnaXQgYWRkIGVscG1hcyAmJgorCXJtIC1mIHNhbXBsZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBTZWNvbmQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1NJyAnCisKKwlnaXQgZGlmZi10cmVlIC1NIC1yIC0tbmFtZS1zdGF0dXMgSEVBRF4gSEVBRCB8CisJc2VkIC1lICJzL1JbMC05XSovUk5VTS8iID5hY3R1YWwgJiYKKwllY2hvICJSTlVNCXNhbXBsZQllbHBtYXMiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDIzLWNybGYtYW0uc2ggYi90L3QwMDIzLWNybGYtYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjliYmI5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjMtY3JsZi1hbS5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBhbSB3aXRoIGF1dG8uY3JsZicKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+cGF0Y2hmaWxlIDw8XEVPRgorRnJvbSAzOGJlMTAwNzJlNDVkZDZiMDhjZTQwODUxZTNmY2E2MGEzMWEzNDBiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogTWFyaXVzIFN0b3JtLU9sc2VuIDx4QHkuY29tPgorRGF0ZTogVGh1LCAyMyBBdWcgMjAwNyAxMzowMDowMCArMDIwMAorU3ViamVjdDogdGVzdDEKKworLS0tCisgZm9vIHwgMSArCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZvbworCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTcxNmNhNTk4N2NiZjk3ZDZiYjU0OTIwYmVhNmFkZGUyNDJkODdlNgorLS0tIC9kZXYvbnVsbAorKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrYmFyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZWNobyBmb28gPmJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0nICcKKworCWdpdCBhbSAtMyA8cGF0Y2hmaWxlICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLXN0YXR1cyAtLWV4aXQtY29kZQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyNC1jcmxmLWFyY2hpdmUuc2ggYi90L3QwMDI0LWNybGYtYXJjaGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZTlmYTNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDAyNC1jcmxmLWFyY2hpdmUuc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jlc3BlY3QgY3JsZiBpbiBnaXQgYXJjaGl2ZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKworCXByaW50ZiAiQ1JMRiBsaW5lIGVuZGluZ1xyXG5BbmQgYW5vdGhlclxyXG4iID4gc2FtcGxlICYmCisJZ2l0IGFkZCBzYW1wbGUgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhciBhcmNoaXZlJyAnCisKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgSEVBRCB8CisJKCBta2RpciB1bnRhcnJlZCAmJiBjZCB1bnRhcnJlZCAmJiAiJFRBUiIgLXhmIC0gKSAmJgorCisJdGVzdF9jbXAgc2FtcGxlIHVudGFycmVkL3NhbXBsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgJ3ppcCBhcmNoaXZlJyAnCisKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgSEVBRCA+dGVzdC56aXAgJiYKKworCSggbWtkaXIgdW56aXBwZWQgJiYgY2QgdW56aXBwZWQgJiYgIiRHSVRfVU5aSVAiIC4uL3Rlc3QuemlwICkgJiYKKworCXRlc3RfY21wIHNhbXBsZSB1bnppcHBlZC9zYW1wbGUKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjUtY3JsZi1hdXRvLnNoIGIvdC90MDAyNS1jcmxmLWF1dG8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzE2NGI0NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjUtY3JsZi1hdXRvLnNoCkBAIC0wLDAgKzEsMTU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ1JMRiBjb252ZXJzaW9uJworCisuIC4vdGVzdC1saWIuc2gKKworaGFzX2NyKCkgeworCXRyICdcMDE1JyBRIDwiJDEiIHwgZ3JlcCBRID4vZGV2L251bGwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKworCWZvciB3IGluIEhlbGxvIHdvcmxkIGhvdyBhcmUgeW91OyBkbyBlY2hvICR3OyBkb25lID5MRm9ubHkgJiYKKwlmb3IgdyBpbiBJIGFtIHZlcnkgdmVyeSBmaW5lIHRoYW5rIHlvdTsgZG8gZWNobyAke3d9UTsgZG9uZSB8IHFfdG9fY3IgPkNSTEZvbmx5ICYmCisJZm9yIHcgaW4gT2ggaGVyZSBpcyBhIFFOVUwgYnl0ZSBob3cgYWxhcm1pbmc7IGRvIGVjaG8gJHt3fTsgZG9uZSB8IHFfdG9fbnVsID5MRndpdGhOVUwgJiYKKwlnaXQgYWRkIC4gJiYKKworCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJTEZvbmx5PSQoZ2l0IHJldi1wYXJzZSBIRUFEOkxGb25seSkgJiYKKwlDUkxGb25seT0kKGdpdCByZXYtcGFyc2UgSEVBRDpDUkxGb25seSkgJiYKKwlMRndpdGhOVUw9JChnaXQgcmV2LXBhcnNlIEhFQUQ6TEZ3aXRoTlVMKSAmJgorCisJZWNobyBoYXBweS4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCBzZXR0aW5ncyBjYXVzZSBubyBjaGFuZ2VzJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyB0bXAgTEZvbmx5IENSTEZvbmx5IExGd2l0aE5VTCAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwkhIGhhc19jciBMRm9ubHkgJiYKKwloYXNfY3IgQ1JMRm9ubHkgJiYKKwlMRm9ubHlkaWZmPSQoZ2l0IGRpZmYgTEZvbmx5KSAmJgorCUNSTEZvbmx5ZGlmZj0kKGdpdCBkaWZmIENSTEZvbmx5KSAmJgorCUxGd2l0aE5VTGRpZmY9JChnaXQgZGlmZiBMRndpdGhOVUwpICYmCisJdGVzdCAteiAiJExGb25seWRpZmYiIC1hIC16ICIkQ1JMRm9ubHlkaWZmIiAtYSAteiAiJExGd2l0aE5VTGRpZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NybGY9dHJ1ZSBjYXVzZXMgYSBDUkxGIGZpbGUgdG8gYmUgbm9ybWFsaXplZCcgJworCisJIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBjaGVjaworCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBMRm9ubHkgQ1JMRm9ubHkgTEZ3aXRoTlVMICYmCisJZWNobyAiQ1JMRm9ubHkgY3JsZiIgPiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwkjIE5vdGUsICJub3JtYWxpemVkIiBtZWFucyB0aGF0IGdpdCB3aWxsIG5vcm1hbGl6ZSBpdCBpZiBhZGRlZAorCWhhc19jciBDUkxGb25seSAmJgorCUNSTEZvbmx5ZGlmZj0kKGdpdCBkaWZmIENSTEZvbmx5KSAmJgorCXRlc3QgLW4gIiRDUkxGb25seWRpZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RleHQ9dHJ1ZSBjYXVzZXMgYSBDUkxGIGZpbGUgdG8gYmUgbm9ybWFsaXplZCcgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIExGb25seSBDUkxGb25seSBMRndpdGhOVUwgJiYKKwllY2hvICJDUkxGb25seSB0ZXh0IiA+IC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCSMgTm90ZSwgIm5vcm1hbGl6ZWQiIG1lYW5zIHRoYXQgZ2l0IHdpbGwgbm9ybWFsaXplIGl0IGlmIGFkZGVkCisJaGFzX2NyIENSTEZvbmx5ICYmCisJQ1JMRm9ubHlkaWZmPSQoZ2l0IGRpZmYgQ1JMRm9ubHkpICYmCisJdGVzdCAtbiAiJENSTEZvbmx5ZGlmZiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW9sPWNybGYgZ2l2ZXMgYSBub3JtYWxpemVkIGZpbGUgQ1JMRnMgd2l0aCBhdXRvY3JsZj1mYWxzZScgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIExGb25seSBDUkxGb25seSBMRndpdGhOVUwgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKwllY2hvICJMRm9ubHkgZW9sPWNybGYiID4gLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaGFzX2NyIExGb25seSAmJgorCUxGb25seWRpZmY9JChnaXQgZGlmZiBMRm9ubHkpICYmCisJdGVzdCAteiAiJExGb25seWRpZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VvbD1jcmxmIGdpdmVzIGEgbm9ybWFsaXplZCBmaWxlIENSTEZzIHdpdGggYXV0b2NybGY9aW5wdXQnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBMRm9ubHkgQ1JMRm9ubHkgTEZ3aXRoTlVMICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGlucHV0ICYmCisJZWNobyAiTEZvbmx5IGVvbD1jcmxmIiA+IC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWhhc19jciBMRm9ubHkgJiYKKwlMRm9ubHlkaWZmPSQoZ2l0IGRpZmYgTEZvbmx5KSAmJgorCXRlc3QgLXogIiRMRm9ubHlkaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlb2w9bGYgZ2l2ZXMgYSBub3JtYWxpemVkIGZpbGUgTEZzIHdpdGggYXV0b2NybGY9dHJ1ZScgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIExGb25seSBDUkxGb25seSBMRndpdGhOVUwgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWVjaG8gIkxGb25seSBlb2w9bGYiID4gLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJISBoYXNfY3IgTEZvbmx5ICYmCisJTEZvbmx5ZGlmZj0kKGdpdCBkaWZmIExGb25seSkgJiYKKwl0ZXN0IC16ICIkTEZvbmx5ZGlmZiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b2NybGY9dHJ1ZSBkb2VzIG5vdCBub3JtYWxpemUgQ1JMRiBmaWxlcycgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIExGb25seSBDUkxGb25seSBMRndpdGhOVUwgJiYKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwloYXNfY3IgTEZvbmx5ICYmCisJaGFzX2NyIENSTEZvbmx5ICYmCisJTEZvbmx5ZGlmZj0kKGdpdCBkaWZmIExGb25seSkgJiYKKwlDUkxGb25seWRpZmY9JChnaXQgZGlmZiBDUkxGb25seSkgJiYKKwlMRndpdGhOVUxkaWZmPSQoZ2l0IGRpZmYgTEZ3aXRoTlVMKSAmJgorCXRlc3QgLXogIiRMRm9ubHlkaWZmIiAtYSAteiAiJENSTEZvbmx5ZGlmZiIgLWEgLXogIiRMRndpdGhOVUxkaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXh0PWF1dG8sIGF1dG9jcmxmPXRydWUgX2RvZXNfIG5vcm1hbGl6ZSBDUkxGIGZpbGVzJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyB0bXAgTEZvbmx5IENSTEZvbmx5IExGd2l0aE5VTCAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZWNobyAiKiB0ZXh0PWF1dG8iID4gLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaGFzX2NyIExGb25seSAmJgorCWhhc19jciBDUkxGb25seSAmJgorCUxGb25seWRpZmY9JChnaXQgZGlmZiBMRm9ubHkpICYmCisJQ1JMRm9ubHlkaWZmPSQoZ2l0IGRpZmYgQ1JMRm9ubHkpICYmCisJTEZ3aXRoTlVMZGlmZj0kKGdpdCBkaWZmIExGd2l0aE5VTCkgJiYKKwl0ZXN0IC16ICIkTEZvbmx5ZGlmZiIgLWEgLW4gIiRDUkxGb25seWRpZmYiIC1hIC16ICIkTEZ3aXRoTlVMZGlmZiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGV4dD1hdXRvLCBhdXRvY3JsZj10cnVlIGRvZXMgbm90IG5vcm1hbGl6ZSBiaW5hcnkgZmlsZXMnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBMRm9ubHkgQ1JMRm9ubHkgTEZ3aXRoTlVMICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwllY2hvICIqIHRleHQ9YXV0byIgPiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwkhIGhhc19jciBMRndpdGhOVUwgJiYKKwlMRndpdGhOVUxkaWZmPSQoZ2l0IGRpZmYgTEZ3aXRoTlVMKSAmJgorCXRlc3QgLXogIiRMRndpdGhOVUxkaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlb2w9Y3JsZiBfZG9lc18gbm9ybWFsaXplIGJpbmFyeSBmaWxlcycgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIExGb25seSBDUkxGb25seSBMRndpdGhOVUwgJiYKKwllY2hvICJMRndpdGhOVUwgZW9sPWNybGYiID4gLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaGFzX2NyIExGd2l0aE5VTCAmJgorCUxGd2l0aE5VTGRpZmY9JChnaXQgZGlmZiBMRndpdGhOVUwpICYmCisJdGVzdCAteiAiJExGd2l0aE5VTGRpZmYiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDAyNi1lb2wtY29uZmlnLnNoIGIvdC90MDAyNi1lb2wtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM1MjAzZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDI2LWVvbC1jb25maWcuc2gKQEAgLTAsMCArMSwxMDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDUkxGIGNvbnZlcnNpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCitoYXNfY3IoKSB7CisJdHIgJ1wwMTUnIFEgPCIkMSIgfCBncmVwIFEgPi9kZXYvbnVsbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCisJZWNobyAib25lIHRleHQiID4gLmdpdGF0dHJpYnV0ZXMgJiYKKworCWZvciB3IGluIEhlbGxvIHdvcmxkIGhvdyBhcmUgeW91OyBkbyBlY2hvICR3OyBkb25lID5vbmUgJiYKKwlmb3IgdyBpbiBJIGFtIHZlcnkgdmVyeSBmaW5lIHRoYW5rIHlvdTsgZG8gZWNobyAkdzsgZG9uZSA+dHdvICYmCisJZ2l0IGFkZCAuICYmCisKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRDpvbmUpICYmCisJdHdvPSQoZ2l0IHJldi1wYXJzZSBIRUFEOnR3bykgJiYKKworCWVjaG8gaGFwcHkuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VvbD1sZiBwdXRzIExGcyBpbiBub3JtYWxpemVkIGZpbGUnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBvbmUgdHdvICYmCisJZ2l0IGNvbmZpZyBjb3JlLmVvbCBsZiAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisKKwkhIGhhc19jciBvbmUgJiYKKwkhIGhhc19jciB0d28gJiYKKwlvbmVkaWZmPSQoZ2l0IGRpZmYgb25lKSAmJgorCXR3b2RpZmY9JChnaXQgZGlmZiB0d28pICYmCisJdGVzdCAteiAiJG9uZWRpZmYiICYmIHRlc3QgLXogIiR0d29kaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlb2w9Y3JsZiBwdXRzIENSTEZzIGluIG5vcm1hbGl6ZWQgZmlsZScgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIG9uZSB0d28gJiYKKwlnaXQgY29uZmlnIGNvcmUuZW9sIGNybGYgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaGFzX2NyIG9uZSAmJgorCSEgaGFzX2NyIHR3byAmJgorCW9uZWRpZmY9JChnaXQgZGlmZiBvbmUpICYmCisJdHdvZGlmZj0kKGdpdCBkaWZmIHR3bykgJiYKKwl0ZXN0IC16ICIkb25lZGlmZiIgJiYgdGVzdCAteiAiJHR3b2RpZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9jcmxmPXRydWUgb3ZlcnJpZGVzIGVvbD1sZicgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgdG1wIG9uZSB0d28gJiYKKwlnaXQgY29uZmlnIGNvcmUuZW9sIGxmICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCisJaGFzX2NyIG9uZSAmJgorCWhhc19jciB0d28gJiYKKwlvbmVkaWZmPSQoZ2l0IGRpZmYgb25lKSAmJgorCXR3b2RpZmY9JChnaXQgZGlmZiB0d28pICYmCisJdGVzdCAteiAiJG9uZWRpZmYiICYmIHRlc3QgLXogIiR0d29kaWZmIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvY3JsZj10cnVlIG92ZXJyaWRlcyB1bnNldCBlb2wnICcKKworCXJtIC1mIC5naXRhdHRyaWJ1dGVzIHRtcCBvbmUgdHdvICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBjb3JlLmVvbCAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKworCWhhc19jciBvbmUgJiYKKwloYXNfY3IgdHdvICYmCisJb25lZGlmZj0kKGdpdCBkaWZmIG9uZSkgJiYKKwl0d29kaWZmPSQoZ2l0IGRpZmYgdHdvKSAmJgorCXRlc3QgLXogIiRvbmVkaWZmIiAmJiB0ZXN0IC16ICIkdHdvZGlmZiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBOQVRJVkVfQ1JMRiAnZW9sIG5hdGl2ZSBpcyBjcmxmJyAnCisKKwlybSAtcmYgbmF0aXZlX2VvbCAmJiBta2RpciBuYXRpdmVfZW9sICYmCisJKAorCQljZCBuYXRpdmVfZW9sICYmCisJCXByaW50ZiAiKi50eHQgdGV4dFxuIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJcHJpbnRmICJvbmVcclxudHdvXHJcbnRocmVlXHJcbiIgPmZpbGVkb3MudHh0ICYmCisJCXByaW50ZiAib25lXG50d29cbnRocmVlXG4iID5maWxldW5peC50eHQgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIGZhbHNlICYmCisJCWdpdCBjb25maWcgY29yZS5lb2wgbmF0aXZlICYmCisJCWdpdCBhZGQgZmlsZWRvcy50eHQgZmlsZXVuaXgudHh0ICYmCisJCWdpdCBjb21taXQgLW0gImZpcnN0IiAmJgorCQlybSBmaWxlKi50eHQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJCWhhc19jciBmaWxlZG9zLnR4dCAmJgorCQloYXNfY3IgZmlsZXVuaXgudHh0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwMjctYXV0by1jcmxmLnNoIGIvdC90MDAyNy1hdXRvLWNybGYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjM0MzY1MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMjctYXV0by1jcmxmLnNoCkBAIC0wLDAgKzEsNDgzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ1JMRiBjb252ZXJzaW9uIGFsbCBjb21iaW5hdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgRVhQRU5TSVZFCit0aGVuCisJc2tpcF9hbGw9IkVYUEVOU0lWRSBub3Qgc2V0IgorCXRlc3RfZG9uZQorZmkKKworY29tcGFyZV9maWxlcyAoKSB7CisJdHIgJ1wwMTVcMDAwJyBRTiA8IiQxIiA+IiQxIi5leHBlY3QgJiYKKwl0ciAnXDAxNVwwMDAnIFFOIDwiJDIiID4iJDIiLmFjdHVhbCAmJgorCXRlc3RfY21wICIkMSIuZXhwZWN0ICIkMiIuYWN0dWFsICYmCisJcm0gIiQxIi5leHBlY3QgIiQyIi5hY3R1YWwKK30KKworY29tcGFyZV93c19maWxlICgpIHsKKwlwZng9JDEKKwlleHA9JDIuZXhwZWN0CisJYWN0PSRwZnguYWN0dWFsLiQzCisJdHIgJ1wwMTVcMDAwJyBRTiA8IiQyIiA+IiRleHAiICYmCisJdHIgJ1wwMTVcMDAwJyBRTiA8IiQzIiA+IiRhY3QiICYmCisJdGVzdF9jbXAgJGV4cCAkYWN0ICYmCisJcm0gJGV4cCAkYWN0Cit9CisKK2NyZWF0ZV9naXRhdHRyaWJ1dGVzICgpIHsKKwlhdHRyPSQxCisJY2FzZSAiJGF0dHIiIGluCisJCWF1dG8pCisJCWVjaG8gIioudHh0IHRleHQ9YXV0byIgPi5naXRhdHRyaWJ1dGVzCisJCTs7CisJCXRleHQpCisJCWVjaG8gIioudHh0IHRleHQiID4uZ2l0YXR0cmlidXRlcworCQk7OworCQktdGV4dCkKKwkJZWNobyAiKi50eHQgLXRleHQiID4uZ2l0YXR0cmlidXRlcworCQk7OworCQljcmxmKQorCQllY2hvICIqLnR4dCBlb2w9Y3JsZiIgPi5naXRhdHRyaWJ1dGVzCisJCTs7CisJCWxmKQorCQllY2hvICIqLnR4dCBlb2w9bGYiID4uZ2l0YXR0cmlidXRlcworCQk7OworCQkiIikKKwkJZWNobyA+LmdpdGF0dHJpYnV0ZXMKKwkJOzsKKwkJKikKKwkJZWNobyA+JjIgaW52YWxpZCBhdHRyaWJ1dGU6ICRhdHRyCisJCWV4aXQgMQorCQk7OworCWVzYWMKK30KKworY3JlYXRlX05OT19maWxlcyAoKSB7CisJbGZuYW1lPSQxCisJY3JsZm5hbWU9JDIKKwlsZm1peGNybGY9JDMKKwlsZm1peGNyPSQ0CisJY3JsZm51bD0kNQorCWZvciBjcmxmIGluIGZhbHNlIHRydWUgaW5wdXQKKwlkbworCQlmb3IgYXR0ciBpbiAiIiBhdXRvIHRleHQgLXRleHQgbGYgY3JsZgorCQlkbworCQkJcGZ4PU5OT18ke2NybGZ9X2F0dHJfJHthdHRyfSAmJgorCQkJY3AgJGxmbmFtZSAgICAke3BmeH1fTEYudHh0ICYmCisJCQljcCAkY3JsZm5hbWUgICR7cGZ4fV9DUkxGLnR4dCAmJgorCQkJY3AgJGxmbWl4Y3JsZiAke3BmeH1fQ1JMRl9taXhfTEYudHh0ICYmCisJCQljcCAkbGZtaXhjciAgICR7cGZ4fV9MRl9taXhfQ1IudHh0ICYmCisJCQljcCAkY3JsZm51bCAgICR7cGZ4fV9DUkxGX251bC50eHQKKwkJZG9uZQorCWRvbmUKK30KKworY2hlY2tfd2FybmluZyAoKSB7CisJY2FzZSAiJDEiIGluCisJTEZfQ1JMRikgZWNobyAid2FybmluZzogTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIiA+IiQyIi5leHBlY3QgOzsKKwlDUkxGX0xGKSBlY2hvICJ3YXJuaW5nOiBDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYiID4iJDIiLmV4cGVjdCA7OworCScnKQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiIkMiIuZXhwZWN0IDs7CisJKikgZWNobyA+JjIgIklsbGVnYWwgMSI6ICIkMSIgOyByZXR1cm4gZmFsc2UgOzsKKwllc2FjCisJZ3JlcCAid2lsbCBiZSByZXBsYWNlZCBieSIgIiQyIiB8IHNlZCAtZSAicy9cKC4qXCkgaW4gW14gXSokL1wxLyIgfCB1bmlxICA+IiQyIi5hY3R1YWwKKwl0ZXN0X2NtcCAiJDIiLmV4cGVjdCAiJDIiLmFjdHVhbAorfQorCitjb21taXRfY2hlY2tfd2FybiAoKSB7CisJY3JsZj0kMQorCWF0dHI9JDIKKwlsZm5hbWU9JDMKKwljcmxmbmFtZT0kNAorCWxmbWl4Y3JsZj0kNQorCWxmbWl4Y3I9JDYKKwljcmxmbnVsPSQ3CisJcGZ4PWNybGZfJHtjcmxmfV9hdHRyXyR7YXR0cn0KKwljcmVhdGVfZ2l0YXR0cmlidXRlcyAiJGF0dHIiICYmCisJZm9yIGYgaW4gTEYgQ1JMRiByZXBvTUlYIExGX21peF9DUiBDUkxGX21peF9MRiBMRl9udWwgQ1JMRl9udWwKKwlkbworCQlmbmFtZT0ke3BmeH1fJGYudHh0ICYmCisJCWNwICRmICRmbmFtZSAmJgorCQlnaXQgLWMgY29yZS5hdXRvY3JsZj0kY3JsZiBhZGQgJGZuYW1lIDI+IiR7cGZ4fV8kZi5lcnIiCisJZG9uZSAmJgorCWdpdCBjb21taXQgLW0gImNvcmUuYXV0b2NybGYgJGNybGYiICYmCisJY2hlY2tfd2FybmluZyAiJGxmbmFtZSIgJHtwZnh9X0xGLmVyciAmJgorCWNoZWNrX3dhcm5pbmcgIiRjcmxmbmFtZSIgJHtwZnh9X0NSTEYuZXJyICYmCisJY2hlY2tfd2FybmluZyAiJGxmbWl4Y3JsZiIgJHtwZnh9X0NSTEZfbWl4X0xGLmVyciAmJgorCWNoZWNrX3dhcm5pbmcgIiRsZm1peGNyIiAke3BmeH1fTEZfbWl4X0NSLmVyciAmJgorCWNoZWNrX3dhcm5pbmcgIiRjcmxmbnVsIiAke3BmeH1fQ1JMRl9udWwuZXJyCit9CisKK2NvbW1pdF9jaGtfd3JuTk5PICgpIHsKKwljcmxmPSQxCisJYXR0cj0kMgorCWxmd2Fybj0kMworCWNybGZ3YXJuPSQ0CisJbGZtaXhjcmxmPSQ1CisJbGZtaXhjcj0kNgorCWNybGZudWw9JDcKKwlwZng9Tk5PXyR7Y3JsZn1fYXR0cl8ke2F0dHJ9CisJI0NvbW1pdCBmaWxlcyBvbiB0b3Agb2YgZXhpc3RpbmcgZmlsZQorCWNyZWF0ZV9naXRhdHRyaWJ1dGVzICIkYXR0ciIgJiYKKwlmb3IgZiBpbiBMRiBDUkxGIENSTEZfbWl4X0xGIExGX21peF9DUiBDUkxGX251bAorCWRvCisJCWZuYW1lPSR7cGZ4fV8kZi50eHQgJiYKKwkJY3AgJGYgJGZuYW1lICYmCisJCWdpdCAtYyBjb3JlLmF1dG9jcmxmPSRjcmxmIGFkZCAkZm5hbWUgMj4vZGV2L251bGwgJiYKKwkJZ2l0IC1jIGNvcmUuYXV0b2NybGY9JGNybGYgY29tbWl0IC1tICJjb21taXRfJGZuYW1lIiAkZm5hbWUgPiIke3BmeH1fJGYuZXJyIiAyPiYxCisJZG9uZQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0IE5OTyBmaWxlcyBjcmxmPSRjcmxmIGF0dHI9JGF0dHIgTEYiICcKKwkJY2hlY2tfd2FybmluZyAiJGxmd2FybiIgJHtwZnh9X0xGLmVycgorCScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQgTk5PIGZpbGVzIGNybGY9JGNybGYgYXR0cj0kYXR0ciBDUkxGIiAnCisJCWNoZWNrX3dhcm5pbmcgIiRjcmxmd2FybiIgJHtwZnh9X0NSTEYuZXJyCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tbWl0IE5OTyBmaWxlcyBjcmxmPSRjcmxmIGF0dHI9JGF0dHIgQ1JMRl9taXhfTEYiICcKKwkJY2hlY2tfd2FybmluZyAiJGxmbWl4Y3JsZiIgJHtwZnh9X0NSTEZfbWl4X0xGLmVycgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdCBOTk8gZmlsZXMgY3JsZj0kY3JsZiBhdHRyPSRhdHRyIExGX21peF9jciIgJworCQljaGVja193YXJuaW5nICIkbGZtaXhjciIgJHtwZnh9X0xGX21peF9DUi5lcnIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21taXQgTk5PIGZpbGVzIGNybGY9JGNybGYgYXR0cj0kYXR0ciBDUkxGX251bCIgJworCQljaGVja193YXJuaW5nICIkY3JsZm51bCIgJHtwZnh9X0NSTEZfbnVsLmVycgorCScKK30KKworY2hlY2tfZmlsZXNfaW5fcmVwbyAoKSB7CisJY3JsZj0kMQorCWF0dHI9JDIKKwlsZm5hbWU9JDMKKwljcmxmbmFtZT0kNAorCWxmbWl4Y3JsZj0kNQorCWxmbWl4Y3I9JDYKKwljcmxmbnVsPSQ3CisJcGZ4PWNybGZfJHtjcmxmfV9hdHRyXyR7YXR0cn1fICYmCisJY29tcGFyZV9maWxlcyAkbGZuYW1lICR7cGZ4fUxGLnR4dCAmJgorCWNvbXBhcmVfZmlsZXMgJGNybGZuYW1lICR7cGZ4fUNSTEYudHh0ICYmCisJY29tcGFyZV9maWxlcyAkbGZtaXhjcmxmICR7cGZ4fUNSTEZfbWl4X0xGLnR4dCAmJgorCWNvbXBhcmVfZmlsZXMgJGxmbWl4Y3IgJHtwZnh9TEZfbWl4X0NSLnR4dCAmJgorCWNvbXBhcmVfZmlsZXMgJGNybGZudWwgJHtwZnh9Q1JMRl9udWwudHh0Cit9CisKK2NoZWNrX2luX3JlcG9fTk5PICgpIHsKKwljcmxmPSQxCisJYXR0cj0kMgorCWxmbmFtZT0kMworCWNybGZuYW1lPSQ0CisJbGZtaXhjcmxmPSQ1CisJbGZtaXhjcj0kNgorCWNybGZudWw9JDcKKwlwZng9Tk5PXyR7Y3JsZn1fYXR0cl8ke2F0dHJ9XworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBhcmVfZmlsZXMgJGxmbmFtZSAke3BmeH1MRi50eHQiICcKKwkJY29tcGFyZV9maWxlcyAkbGZuYW1lICR7cGZ4fUxGLnR4dAorCScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wYXJlX2ZpbGVzICRjcmxmbmFtZSAke3BmeH1DUkxGLnR4dCIgJworCQljb21wYXJlX2ZpbGVzICRjcmxmbmFtZSAke3BmeH1DUkxGLnR4dAorCScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wYXJlX2ZpbGVzICRsZm1peGNybGYgJHtwZnh9Q1JMRl9taXhfTEYudHh0IiAnCisJCWNvbXBhcmVfZmlsZXMgJGxmbWl4Y3JsZiAke3BmeH1DUkxGX21peF9MRi50eHQKKwknCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGFyZV9maWxlcyAkbGZtaXhjciAke3BmeH1MRl9taXhfQ1IudHh0IiAnCisJCWNvbXBhcmVfZmlsZXMgJGxmbWl4Y3IgJHtwZnh9TEZfbWl4X0NSLnR4dAorCScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wYXJlX2ZpbGVzICRjcmxmbnVsICR7cGZ4fUNSTEZfbnVsLnR4dCIgJworCQljb21wYXJlX2ZpbGVzICRjcmxmbnVsICR7cGZ4fUNSTEZfbnVsLnR4dAorCScKK30KKworY2hlY2tvdXRfZmlsZXMgKCkgeworCWVvbD0kMQorCWNybGY9JDIKKwlhdHRyPSQzCisJbGZuYW1lPSQ0CisJY3JsZm5hbWU9JDUKKwlsZm1peGNybGY9JDYKKwlsZm1peGNyPSQ3CisJY3JsZm51bD0kOAorCWNyZWF0ZV9naXRhdHRyaWJ1dGVzICRhdHRyICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmICRjcmxmICYmCisJcGZ4PWVvbF8ke2VvbH1fY3JsZl8ke2NybGZ9X2F0dHJfJHthdHRyfV8gJiYKKwlzcmM9Y3JsZl9mYWxzZV9hdHRyX18gJiYKKwlmb3IgZiBpbiBMRiBDUkxGIExGX21peF9DUiBDUkxGX21peF9MRiBMRl9udWwKKwlkbworCQlybSAkc3JjJGYudHh0ICYmCisJCWlmIHRlc3QgLXogIiRlb2wiOyB0aGVuCisJCQlnaXQgY2hlY2tvdXQgJHNyYyRmLnR4dAorCQllbHNlCisJCQlnaXQgLWMgY29yZS5lb2w9JGVvbCBjaGVja291dCAkc3JjJGYudHh0CisJCWZpCisJZG9uZQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2tvdXQgY29yZS5lb2w9JGVvbCBjb3JlLmF1dG9jcmxmPSRjcmxmIGdpdGF0dHJpYnV0ZXM9JGF0dHIgZmlsZT1MRiIgIgorCQljb21wYXJlX3dzX2ZpbGUgJHBmeCAkbGZuYW1lICAgICR7c3JjfUxGLnR4dAorCSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCBjb3JlLmVvbD0kZW9sIGNvcmUuYXV0b2NybGY9JGNybGYgZ2l0YXR0cmlidXRlcz0kYXR0ciBmaWxlPUNSTEYiICIKKwkJY29tcGFyZV93c19maWxlICRwZnggJGNybGZuYW1lICAke3NyY31DUkxGLnR4dAorCSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCBjb3JlLmVvbD0kZW9sIGNvcmUuYXV0b2NybGY9JGNybGYgZ2l0YXR0cmlidXRlcz0kYXR0ciBmaWxlPUNSTEZfbWl4X0xGIiAiCisJCWNvbXBhcmVfd3NfZmlsZSAkcGZ4ICRsZm1peGNybGYgJHtzcmN9Q1JMRl9taXhfTEYudHh0CisJIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IGNvcmUuZW9sPSRlb2wgY29yZS5hdXRvY3JsZj0kY3JsZiBnaXRhdHRyaWJ1dGVzPSRhdHRyIGZpbGU9TEZfbWl4X0NSIiAiCisJCWNvbXBhcmVfd3NfZmlsZSAkcGZ4ICRsZm1peGNyICAgJHtzcmN9TEZfbWl4X0NSLnR4dAorCSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCBjb3JlLmVvbD0kZW9sIGNvcmUuYXV0b2NybGY9JGNybGYgZ2l0YXR0cmlidXRlcz0kYXR0ciBmaWxlPUxGX251bCIgIgorCQljb21wYXJlX3dzX2ZpbGUgJHBmeCAkY3JsZm51bCAgICR7c3JjfUxGX251bC50eHQKKwkiCit9CisKKyMjIyMjIyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG1hc3RlcicgJworCWVjaG8gPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciAmJgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgLmdpdGF0dHJpYnV0ZXMiICIiICYmCisJcHJpbnRmICJsaW5lMVxubGluZTJcbmxpbmUzIiAgICAgPkxGICYmCisJcHJpbnRmICJsaW5lMVxyXG5saW5lMlxyXG5saW5lMyIgPkNSTEYgJiYKKwlwcmludGYgImxpbmUxXHJcbmxpbmUyXG5saW5lMyIgICA+cmVwb01JWCAmJgorCXByaW50ZiAibGluZTFcclxubGluZTJcbmxpbmUzIiAgID5DUkxGX21peF9MRiAmJgorCXByaW50ZiAibGluZTFcbmxpbmUyXHJsaW5lMyIgICAgID5MRl9taXhfQ1IgJiYKKwlwcmludGYgImxpbmUxXHJcbmxpbmUyXHJsaW5lMyIgICA+Q1JMRl9taXhfQ1IgJiYKKwlwcmludGYgImxpbmUxUVxyXG5saW5lMlxyXG5saW5lMyIgfCBxX3RvX251bCA+Q1JMRl9udWwgJiYKKwlwcmludGYgImxpbmUxUVxubGluZTJcbmxpbmUzIiB8IHFfdG9fbnVsID5MRl9udWwgJiYKKwljcmVhdGVfTk5PX2ZpbGVzIENSTEZfbWl4X0xGIENSTEZfbWl4X0xGIENSTEZfbWl4X0xGIENSTEZfbWl4X0xGIENSTEZfbWl4X0xGICYmCisJZ2l0IC1jIGNvcmUuYXV0b2NybGY9ZmFsc2UgYWRkIE5OT18qLnR4dCAmJgorCWdpdCBjb21taXQgLW0gIm1peGVkIGxpbmUgZW5kaW5ncyIgJiYKKwl0ZXN0X3RpY2sKKycKKworCisKK3dhcm5fTEZfQ1JMRj0iTEYgd2lsbCBiZSByZXBsYWNlZCBieSBDUkxGIgord2Fybl9DUkxGX0xGPSJDUkxGIHdpbGwgYmUgcmVwbGFjZWQgYnkgTEYiCisKKyMgV0lMQyBzdGFuZHMgZm9yICJXYXJuIGlmICh0aGlzIE9TKSBjb252ZXJ0cyBMRiBpbnRvIENSTEYiLgorIyBXSUNMOiBXYXJuIGlmIENSTEYgYmVjb21lcyBMRgorIyBXQU1JWDogTWl4ZWQgbGluZSBlbmRpbmdzOiBlaXRoZXIgQ1JMRi0+TEYgb3IgTEYtPkNSTEYKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgTkFUSVZFX0NSTEYKK3RoZW4KKwlXSUxDPUxGX0NSTEYKKwlXSUNMPQorCVdBTUlYPUxGX0NSTEYKK2Vsc2UKKwlXSUxDPQorCVdJQ0w9Q1JMRl9MRgorCVdBTUlYPUNSTEZfTEYKK2ZpCisKKyMgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ciAgIExGICAgICAgICBDUkxGICAgICAgQ1JMRm1peExGIExGbWl4Q1IgICBDUkxGTlVMCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgZmlsZXMgZW1wdHkgYXR0cicgJworCWNvbW1pdF9jaGVja193YXJuIGZhbHNlICIiICAgICAiIiAgICAgICAgIiIgICAgICAgICIiICAgICAgICAiIiAgICAgICAgIiIgJiYKKwljb21taXRfY2hlY2tfd2FybiB0cnVlICAiIiAgICAgIkxGX0NSTEYiICIiICAgICAgICAiTEZfQ1JMRiIgIiIgICAgICAgICIiICYmCisJY29tbWl0X2NoZWNrX3dhcm4gaW5wdXQgIiIgICAgICIiICAgICAgICAiQ1JMRl9MRiIgIkNSTEZfTEYiICIiICAgICAgICAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgZmlsZXMgYXR0cj1hdXRvJyAnCisJY29tbWl0X2NoZWNrX3dhcm4gZmFsc2UgImF1dG8iICIkV0lMQyIgICAiJFdJQ0wiICAgIiRXQU1JWCIgICIiICAgICAgICAiIiAmJgorCWNvbW1pdF9jaGVja193YXJuIHRydWUgICJhdXRvIiAiTEZfQ1JMRiIgIiIgICAgICAgICJMRl9DUkxGIiAiIiAgICAgICAgIiIgJiYKKwljb21taXRfY2hlY2tfd2FybiBpbnB1dCAiYXV0byIgIiIgICAgICAgICJDUkxGX0xGIiAiQ1JMRl9MRiIgIiIgICAgICAgICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBmaWxlcyBhdHRyPXRleHQnICcKKwljb21taXRfY2hlY2tfd2FybiBmYWxzZSAidGV4dCIgIiRXSUxDIiAgICIkV0lDTCIgICAiJFdBTUlYIiAgIiRXSUxDIiAgICIkV0lDTCIgICAmJgorCWNvbW1pdF9jaGVja193YXJuIHRydWUgICJ0ZXh0IiAiTEZfQ1JMRiIgIiIgICAgICAgICJMRl9DUkxGIiAiTEZfQ1JMRiIgIiIgICAgICAgICYmCisJY29tbWl0X2NoZWNrX3dhcm4gaW5wdXQgInRleHQiICIiICAgICAgICAiQ1JMRl9MRiIgIkNSTEZfTEYiICIiICAgICAgICAiQ1JMRl9MRiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGZpbGVzIGF0dHI9LXRleHQnICcKKwljb21taXRfY2hlY2tfd2FybiBmYWxzZSAiLXRleHQiICIiICAgICAgICIiICAgICAgICAiIiAgICAgICAgIiIgICAgICAgICIiICYmCisJY29tbWl0X2NoZWNrX3dhcm4gdHJ1ZSAgIi10ZXh0IiAiIiAgICAgICAiIiAgICAgICAgIiIgICAgICAgICIiICAgICAgICAiIiAmJgorCWNvbW1pdF9jaGVja193YXJuIGlucHV0ICItdGV4dCIgIiIgICAgICAgIiIgICAgICAgICIiICAgICAgICAiIiAgICAgICAgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGZpbGVzIGF0dHI9bGYnICcKKwljb21taXRfY2hlY2tfd2FybiBmYWxzZSAibGYiICAgICIiICAgICAgICJDUkxGX0xGIiAiQ1JMRl9MRiIgICIiICAgICAgICJDUkxGX0xGIiAmJgorCWNvbW1pdF9jaGVja193YXJuIHRydWUgICJsZiIgICAgIiIgICAgICAgIkNSTEZfTEYiICJDUkxGX0xGIiAgIiIgICAgICAgIkNSTEZfTEYiICYmCisJY29tbWl0X2NoZWNrX3dhcm4gaW5wdXQgImxmIiAgICAiIiAgICAgICAiQ1JMRl9MRiIgIkNSTEZfTEYiICAiIiAgICAgICAiQ1JMRl9MRiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGZpbGVzIGF0dHI9Y3JsZicgJworCWNvbW1pdF9jaGVja193YXJuIGZhbHNlICJjcmxmIiAiTEZfQ1JMRiIgIiIgICAgICAgICJMRl9DUkxGIiAiTEZfQ1JMRiIgIiIgJiYKKwljb21taXRfY2hlY2tfd2FybiB0cnVlICAiY3JsZiIgIkxGX0NSTEYiICIiICAgICAgICAiTEZfQ1JMRiIgIkxGX0NSTEYiICIiICYmCisJY29tbWl0X2NoZWNrX3dhcm4gaW5wdXQgImNybGYiICJMRl9DUkxGIiAiIiAgICAgICAgIkxGX0NSTEYiICJMRl9DUkxGIiAiIgorJworCisjICAgICAgICAgICAgICAgICAgICAgICBhdHRyICAgTEYgICAgICAgIENSTEYgICAgICBDUkxGbWl4TEYgCSBMRl9taXhfQ1IgICBDUkxGTlVMCitjb21taXRfY2hrX3dybk5OTyBmYWxzZSAiIiAgICAgIiIgICAgICAgICIiICAgICAgICAiIiAgICAgICAgCSAiIiAgICAgICAgCSAiIgorY29tbWl0X2Noa193cm5OTk8gdHJ1ZSAgIiIgICAgICJMRl9DUkxGIiAiIiAgICAgICAgIiIgICAgICAgIAkgIiIgICAgICAgIAkgIiIKK2NvbW1pdF9jaGtfd3JuTk5PIGlucHV0ICIiICAgICAiIiAgICAgICAgIiIgICAgICAgICIiICAgICAgICAJICIiICAgICAgICAJICIiCisKKworY29tbWl0X2Noa193cm5OTk8gZmFsc2UgImF1dG8iICIkV0lMQyIgICAiJFdJQ0wiICAgIiRXQU1JWCIgIAkgIiIgICAgICAgIAkgIiIKK2NvbW1pdF9jaGtfd3JuTk5PIHRydWUgICJhdXRvIiAiTEZfQ1JMRiIgIiIgICAgICAgICJMRl9DUkxGIiAJICIiICAgICAgICAJICIiCitjb21taXRfY2hrX3dybk5OTyBpbnB1dCAiYXV0byIgIiIgICAgICAgICJDUkxGX0xGIiAiQ1JMRl9MRiIgCSAiIiAgICAgICAgCSAiIgorCitjb21taXRfY2hrX3dybk5OTyBmYWxzZSAidGV4dCIgIiRXSUxDIiAgICIkV0lDTCIgICAiJFdBTUlYIiAgCSAiJFdJTEMiICAgCSAiJFdJQ0wiCitjb21taXRfY2hrX3dybk5OTyB0cnVlICAidGV4dCIgIkxGX0NSTEYiICIiICAgICAgICAiTEZfQ1JMRiIgCSAiTEZfQ1JMRiIgCSAiIgorY29tbWl0X2Noa193cm5OTk8gaW5wdXQgInRleHQiICIiICAgICAgICAiQ1JMRl9MRiIgIkNSTEZfTEYiIAkgIiIgICAgICAgIAkgIkNSTEZfTEYiCisKK2NvbW1pdF9jaGtfd3JuTk5PIGZhbHNlICItdGV4dCIgIiIgICAgICAgIiIgICAgICAgICIiICAgICAgICAJICIiICAgICAgICAJICIiCitjb21taXRfY2hrX3dybk5OTyB0cnVlICAiLXRleHQiICIiICAgICAgICIiICAgICAgICAiIiAgICAgICAgCSAiIiAgICAgICAgCSAiIgorY29tbWl0X2Noa193cm5OTk8gaW5wdXQgIi10ZXh0IiAiIiAgICAgICAiIiAgICAgICAgIiIgICAgICAgIAkgIiIgICAgICAgIAkgIiIKKworY29tbWl0X2Noa193cm5OTk8gZmFsc2UgImxmIiAgICAiIiAgICAgICAiQ1JMRl9MRiIgIkNSTEZfTEYiIAkgICIiICAgICAgIAkgIkNSTEZfTEYiCitjb21taXRfY2hrX3dybk5OTyB0cnVlICAibGYiICAgICIiICAgICAgICJDUkxGX0xGIiAiQ1JMRl9MRiIgCSAgIiIgICAgICAgCSAiQ1JMRl9MRiIKK2NvbW1pdF9jaGtfd3JuTk5PIGlucHV0ICJsZiIgICAgIiIgICAgICAgIkNSTEZfTEYiICJDUkxGX0xGIiAJICAiIiAgICAgICAJICJDUkxGX0xGIgorCitjb21taXRfY2hrX3dybk5OTyBmYWxzZSAiY3JsZiIgIkxGX0NSTEYiICIiICAgICAgICAiTEZfQ1JMRiIgCSAiTEZfQ1JMRiIgCSAiIgorY29tbWl0X2Noa193cm5OTk8gdHJ1ZSAgImNybGYiICJMRl9DUkxGIiAiIiAgICAgICAgIkxGX0NSTEYiIAkgIkxGX0NSTEYiIAkgIiIKK2NvbW1pdF9jaGtfd3JuTk5PIGlucHV0ICJjcmxmIiAiTEZfQ1JMRiIgIiIgICAgICAgICJMRl9DUkxGIiAJICJMRl9DUkxGIiAJICIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBmaWxlcyBjbGVhbnVwJyAnCisJcm0gLWYgKi50eHQgJiYKKwlnaXQgLWMgY29yZS5hdXRvY3JsZj1mYWxzZSByZXNldCAtLWhhcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGVtcHR5IGdpdGF0dHJpYnVlcycgJworCWNoZWNrX2ZpbGVzX2luX3JlcG8gZmFsc2UgIiIgICAgICBMRiBDUkxGIENSTEZfbWl4X0xGIExGX21peF9DUiBDUkxGX251bCAmJgorCWNoZWNrX2ZpbGVzX2luX3JlcG8gdHJ1ZSAgIiIgICAgICBMRiBMRiAgIExGICAgICAgICAgIExGX21peF9DUiBDUkxGX251bCAmJgorCWNoZWNrX2ZpbGVzX2luX3JlcG8gaW5wdXQgIiIgICAgICBMRiBMRiAgIExGICAgICAgICAgIExGX21peF9DUiBDUkxGX251bAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgdGV4dD1hdXRvJyAnCisJY2hlY2tfZmlsZXNfaW5fcmVwbyBmYWxzZSAiYXV0byIgIExGIExGICAgTEYgICAgICAgICAgTEZfbWl4X0NSIENSTEZfbnVsICYmCisJY2hlY2tfZmlsZXNfaW5fcmVwbyB0cnVlICAiYXV0byIgIExGIExGICAgTEYgICAgICAgICAgTEZfbWl4X0NSIENSTEZfbnVsICYmCisJY2hlY2tfZmlsZXNfaW5fcmVwbyBpbnB1dCAiYXV0byIgIExGIExGICAgTEYgICAgICAgICAgTEZfbWl4X0NSIENSTEZfbnVsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB0ZXh0JyAnCisJY2hlY2tfZmlsZXNfaW5fcmVwbyBmYWxzZSAidGV4dCIgIExGIExGICAgTEYgICAgICAgICAgTEZfbWl4X0NSIExGX251bCAmJgorCWNoZWNrX2ZpbGVzX2luX3JlcG8gdHJ1ZSAgInRleHQiICBMRiBMRiAgIExGICAgICAgICAgIExGX21peF9DUiBMRl9udWwgJiYKKwljaGVja19maWxlc19pbl9yZXBvIGlucHV0ICJ0ZXh0IiAgTEYgTEYgICBMRiAgICAgICAgICBMRl9taXhfQ1IgTEZfbnVsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtdGV4dCcgJworCWNoZWNrX2ZpbGVzX2luX3JlcG8gZmFsc2UgIi10ZXh0IiBMRiBDUkxGIENSTEZfbWl4X0xGIExGX21peF9DUiBDUkxGX251bCAmJgorCWNoZWNrX2ZpbGVzX2luX3JlcG8gdHJ1ZSAgIi10ZXh0IiBMRiBDUkxGIENSTEZfbWl4X0xGIExGX21peF9DUiBDUkxGX251bCAmJgorCWNoZWNrX2ZpbGVzX2luX3JlcG8gaW5wdXQgIi10ZXh0IiBMRiBDUkxGIENSTEZfbWl4X0xGIExGX21peF9DUiBDUkxGX251bAorJworCisjICAgICAgICAgICAgICAgICAgICAgICBhdHRyICAgIExGICAgICAgICBDUkxGICAgICAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAJQ1JMRk5VTAorY2hlY2tfaW5fcmVwb19OTk8gZmFsc2UgIiIgICAgICBMRiAgICAgICAgQ1JMRiAgICAgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgCUNSTEZfbnVsCitjaGVja19pbl9yZXBvX05OTyB0cnVlICAiIiAgICAgIExGICAgICAgICBDUkxGICAgICAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAJQ1JMRl9udWwKK2NoZWNrX2luX3JlcG9fTk5PIGlucHV0ICIiICAgICAgTEYgICAgICAgIENSTEYgICAgICBDUkxGX21peF9MRiAgTEZfbWl4X0NSIAlDUkxGX251bAorCitjaGVja19pbl9yZXBvX05OTyBmYWxzZSAiYXV0byIgIExGICAgICAgICBMRiAgICAgICAgTEYgICAgICAgICAgIExGX21peF9DUiAJQ1JMRl9udWwKK2NoZWNrX2luX3JlcG9fTk5PIHRydWUgICJhdXRvIiAgTEYgICAgICAgIExGICAgICAgICBMRiAgICAgICAgICAgTEZfbWl4X0NSIAlDUkxGX251bAorY2hlY2tfaW5fcmVwb19OTk8gaW5wdXQgImF1dG8iICBMRiAgICAgICAgTEYgICAgICAgIExGICAgICAgICAgICBMRl9taXhfQ1IgCUNSTEZfbnVsCisKK2NoZWNrX2luX3JlcG9fTk5PIGZhbHNlICJ0ZXh0IiAgTEYgICAgICAgIExGICAgICAgICBMRiAgICAgICAgICAgTEZfbWl4X0NSIAlMRl9udWwKK2NoZWNrX2luX3JlcG9fTk5PIHRydWUgICJ0ZXh0IiAgTEYgICAgICAgIExGICAgICAgICBMRiAgICAgICAgICAgTEZfbWl4X0NSIAlMRl9udWwKK2NoZWNrX2luX3JlcG9fTk5PIGlucHV0ICJ0ZXh0IiAgTEYgICAgICAgIExGICAgICAgICBMRiAgICAgICAgICAgTEZfbWl4X0NSIAlMRl9udWwKKworY2hlY2tfaW5fcmVwb19OTk8gZmFsc2UgIi10ZXh0IiBMRiAgICAgICAgQ1JMRiAgICAgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgCUNSTEZfbnVsCitjaGVja19pbl9yZXBvX05OTyB0cnVlICAiLXRleHQiIExGICAgICAgICBDUkxGICAgICAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAJQ1JMRl9udWwKK2NoZWNrX2luX3JlcG9fTk5PIGlucHV0ICItdGV4dCIgTEYgICAgICAgIENSTEYgICAgICBDUkxGX21peF9MRiAgTEZfbWl4X0NSIAlDUkxGX251bAorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENoZWNrIGhvdyBmaWxlcyBpbiB0aGUgcmVwbyBhcmUgY2hhbmdlZCB3aGVuIHRoZXkgYXJlIGNoZWNrZWQgb3V0CisjIEhvdyB0byByZWFkIHRoZSB0YWJsZSBiZWxvdzoKKyMgLSBjaGVja291dF9maWxlcyB3aWxsIGNoZWNrIG11bHRpcGxlIGZpbGVzIHdpdGggYSBjb21iaW5hdGlvbiBvZiBzZXR0aW5ncworIyAgIGFuZCBhdHRyaWJ1dGVzIChjb3JlLmF1dG9jcmxmPWlucHV0IGlzIGZvcmJpZGRlbiB3aXRoIGNvcmUuZW9sPWNybGYpCisjIC0gcGFyYW1ldGVyICQxIDogY29yZS5lb2wgICAgICAgICAgICAgICBsZiB8IGNybGYKKyMgLSBwYXJhbWV0ZXIgJDIgOiBjb3JlLmF1dG9jcmxmICAgICAgICAgIGZhbHNlIHwgdHJ1ZSB8IGlucHV0CisjIC0gcGFyYW1ldGVyICQzIDogdGV4dCBpbiAuZ2l0YXR0cmlidXRzICAiIiAoZW1wdHkpIHwgYXV0byB8IHRleHQgfCAtdGV4dAorIyAtIHBhcmFtZXRlciAkNCA6IHJlZmVyZW5jZSBmb3IgYSBmaWxlIHdpdGggb25seSBMRiBpbiB0aGUgcmVwbworIyAtIHBhcmFtZXRlciAkNSA6IHJlZmVyZW5jZSBmb3IgYSBmaWxlIHdpdGggb25seSBDUkxGIGluIHRoZSByZXBvCisjIC0gcGFyYW1ldGVyICQ2IDogcmVmZXJlbmNlIGZvciBhIGZpbGUgd2l0aCBtaXhlZCBMRiBhbmQgQ1JMRiBpbiB0aGUgcmVwbworIyAtIHBhcmFtZXRlciAkNyA6IHJlZmVyZW5jZSBmb3IgYSBmaWxlIHdpdGggTEYgYW5kIENSIGluIHRoZSByZXBvIChkb2VzIHNvbWVib2R5IHVzZXMgdGhpcyA/KQorIyAtIHBhcmFtZXRlciAkOCA6IHJlZmVyZW5jZSBmb3IgYSBmaWxlIHdpdGggQ1JMRiBhbmQgYSBOVUwgKHNob3VsZCBiZSBoYW5kbGVkIGFzIGJpbmFyeSB3aGVuIGF1dG8pCisKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgd2UgaGF2ZSBpbiB0aGUgcmVwbzoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tIEVPTCBpbiByZXBvIC0tLS0tLS0tLS0tLS0tLS0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgQ1JMRl9udWwKKyMgICAgICAgICAgICAgICAgICAgc2V0dGluZ3Mgd2l0aCBjaGVja291dDoKKyMgICAgICAgICAgICAgICAgICAgY29yZS4gICBjb3JlLiAgIC5naXRhdHRyCisjICAgICAgICAgICAgICAgICAgICBlb2wgICAgIGFjcmxmCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0IHdlIHdhbnQgdG8gaGF2ZSBpbiB0aGUgd29ya2luZyB0cmVlOgoraWYgdGVzdF9oYXZlX3ByZXJlcSBOQVRJVkVfQ1JMRgordGhlbgorTUlYX0NSTEZfTEY9Q1JMRgorTUlYX0xGX0NSPUNSTEZfbWl4X0NSCitOTD1DUkxGCitMRk5VTD1DUkxGX251bAorZWxzZQorTUlYX0NSTEZfTEY9Q1JMRl9taXhfTEYKK01JWF9MRl9DUj1MRl9taXhfQ1IKK05MPUxGCitMRk5VTD1MRl9udWwKK2ZpCitleHBvcnQgQ1JMRl9NSVhfTEZfQ1IgTUlYIE5MCisKK2NoZWNrb3V0X2ZpbGVzICAgIGxmICAgICAgZmFsc2UgICIiICAgICAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICBsZiAgICAgIHRydWUgICAiIiAgICAgICBDUkxGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgbGYgICAgICBpbnB1dCAgIiIgICAgICAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIGxmICAgICAgZmFsc2UgImF1dG8iICAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICBsZiAgICAgIHRydWUgICJhdXRvIiAgICBDUkxGICBDUkxGICBDUkxGICAgICAgICAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgbGYgICAgICBpbnB1dCAiYXV0byIgICAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIGxmICAgICAgZmFsc2UgInRleHQiICAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICBsZiAgICAgIHRydWUgICJ0ZXh0IiAgICBDUkxGICBDUkxGICBDUkxGICAgICAgICAgQ1JMRl9taXhfQ1IgIENSTEZfbnVsCitjaGVja291dF9maWxlcyAgICBsZiAgICAgIGlucHV0ICJ0ZXh0IiAgICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgbGYgICAgICBmYWxzZSAiLXRleHQiICAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIGxmICAgICAgdHJ1ZSAgIi10ZXh0IiAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICBsZiAgICAgIGlucHV0ICItdGV4dCIgICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgbGYgICAgICBmYWxzZSAibGYiICAgICAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIGxmICAgICAgdHJ1ZSAgImxmIiAgICAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICBsZiAgICAgIGlucHV0ICJsZiIgICAgICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgbGYgICAgICBmYWxzZSAiY3JsZiIgICAgQ1JMRiAgQ1JMRiAgQ1JMRiAgICAgICAgIENSTEZfbWl4X0NSICBDUkxGX251bAorY2hlY2tvdXRfZmlsZXMgICAgbGYgICAgICB0cnVlICAiY3JsZiIgICAgQ1JMRiAgQ1JMRiAgQ1JMRiAgICAgICAgIENSTEZfbWl4X0NSICBDUkxGX251bAorY2hlY2tvdXRfZmlsZXMgICAgbGYgICAgICBpbnB1dCAiY3JsZiIgICAgQ1JMRiAgQ1JMRiAgQ1JMRiAgICAgICAgIENSTEZfbWl4X0NSICBDUkxGX251bAorCitjaGVja291dF9maWxlcyAgICBjcmxmICAgIGZhbHNlICAiIiAgICAgICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgY3JsZiAgICB0cnVlICAgIiIgICAgICAgQ1JMRiAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIGNybGYgICAgZmFsc2UgImF1dG8iICAgIENSTEYgIENSTEYgIENSTEYgICAgICAgICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICBjcmxmICAgIHRydWUgICJhdXRvIiAgICBDUkxGICBDUkxGICBDUkxGICAgICAgICAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgY3JsZiAgICBmYWxzZSAidGV4dCIgICAgQ1JMRiAgQ1JMRiAgQ1JMRiAgICAgICAgIENSTEZfbWl4X0NSICBDUkxGX251bAorY2hlY2tvdXRfZmlsZXMgICAgY3JsZiAgICB0cnVlICAidGV4dCIgICAgQ1JMRiAgQ1JMRiAgQ1JMRiAgICAgICAgIENSTEZfbWl4X0NSICBDUkxGX251bAorY2hlY2tvdXRfZmlsZXMgICAgY3JsZiAgICBmYWxzZSAiLXRleHQiICAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIGNybGYgICAgdHJ1ZSAgIi10ZXh0IiAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICBjcmxmICAgIGZhbHNlICJsZiIgICAgICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgY3JsZiAgICB0cnVlICAibGYiICAgICAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIGNybGYgICAgZmFsc2UgImNybGYiICAgIENSTEYgIENSTEYgIENSTEYgICAgICAgICBDUkxGX21peF9DUiAgQ1JMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIGNybGYgICAgdHJ1ZSAgImNybGYiICAgIENSTEYgIENSTEYgIENSTEYgICAgICAgICBDUkxGX21peF9DUiAgQ1JMRl9udWwKKworY2hlY2tvdXRfZmlsZXMgICAgIiIgICAgICBmYWxzZSAgIiIgICAgICAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgICIiICAgICAgdHJ1ZSAgICIiICAgICAgIENSTEYgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICAiIiAgICAgIGlucHV0ICAiIiAgICAgICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgIiIgICAgICBmYWxzZSAiYXV0byIgICAgJE5MICAgQ1JMRiAgJE1JWF9DUkxGX0xGIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgICIiICAgICAgdHJ1ZSAgImF1dG8iICAgIENSTEYgIENSTEYgIENSTEYgICAgICAgICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICAiIiAgICAgIGlucHV0ICJhdXRvIiAgICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgIiIgICAgICBmYWxzZSAidGV4dCIgICAgJE5MICAgQ1JMRiAgJE1JWF9DUkxGX0xGICRNSVhfTEZfQ1IgICAkTEZOVUwKK2NoZWNrb3V0X2ZpbGVzICAgICIiICAgICAgdHJ1ZSAgInRleHQiICAgIENSTEYgIENSTEYgIENSTEYgICAgICAgICBDUkxGX21peF9DUiAgQ1JMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgICIiICAgICAgaW5wdXQgInRleHQiICAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICAiIiAgICAgIGZhbHNlICItdGV4dCIgICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgIiIgICAgICB0cnVlICAiLXRleHQiICAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgICIiICAgICAgaW5wdXQgIi10ZXh0IiAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICAiIiAgICAgIGZhbHNlICJsZiIgICAgICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgIiIgICAgICB0cnVlICAibGYiICAgICAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgICIiICAgICAgaW5wdXQgImxmIiAgICAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICAiIiAgICAgIGZhbHNlICJjcmxmIiAgICBDUkxGICBDUkxGICBDUkxGICAgICAgICAgQ1JMRl9taXhfQ1IgIENSTEZfbnVsCitjaGVja291dF9maWxlcyAgICAiIiAgICAgIHRydWUgICJjcmxmIiAgICBDUkxGICBDUkxGICBDUkxGICAgICAgICAgQ1JMRl9taXhfQ1IgIENSTEZfbnVsCitjaGVja291dF9maWxlcyAgICAiIiAgICAgIGlucHV0ICJjcmxmIiAgICBDUkxGICBDUkxGICBDUkxGICAgICAgICAgQ1JMRl9taXhfQ1IgIENSTEZfbnVsCisKK2NoZWNrb3V0X2ZpbGVzICAgIG5hdGl2ZSAgZmFsc2UgICIiICAgICAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICBuYXRpdmUgIHRydWUgICAiIiAgICAgICBDUkxGICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgbmF0aXZlICBmYWxzZSAiYXV0byIgICAgJE5MICAgQ1JMRiAgJE1JWF9DUkxGX0xGIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIG5hdGl2ZSAgdHJ1ZSAgImF1dG8iICAgIENSTEYgIENSTEYgIENSTEYgICAgICAgICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICBuYXRpdmUgIGZhbHNlICJ0ZXh0IiAgICAkTkwgICBDUkxGICAkTUlYX0NSTEZfTEYgJE1JWF9MRl9DUiAgICRMRk5VTAorY2hlY2tvdXRfZmlsZXMgICAgbmF0aXZlICB0cnVlICAidGV4dCIgICAgQ1JMRiAgQ1JMRiAgQ1JMRiAgICAgICAgIENSTEZfbWl4X0NSICBDUkxGX251bAorY2hlY2tvdXRfZmlsZXMgICAgbmF0aXZlICBmYWxzZSAiLXRleHQiICAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIG5hdGl2ZSAgdHJ1ZSAgIi10ZXh0IiAgIExGICAgIENSTEYgIENSTEZfbWl4X0xGICBMRl9taXhfQ1IgICAgTEZfbnVsCitjaGVja291dF9maWxlcyAgICBuYXRpdmUgIGZhbHNlICJsZiIgICAgICBMRiAgICBDUkxGICBDUkxGX21peF9MRiAgTEZfbWl4X0NSICAgIExGX251bAorY2hlY2tvdXRfZmlsZXMgICAgbmF0aXZlICB0cnVlICAibGYiICAgICAgTEYgICAgQ1JMRiAgQ1JMRl9taXhfTEYgIExGX21peF9DUiAgICBMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIG5hdGl2ZSAgZmFsc2UgImNybGYiICAgIENSTEYgIENSTEYgIENSTEYgICAgICAgICBDUkxGX21peF9DUiAgQ1JMRl9udWwKK2NoZWNrb3V0X2ZpbGVzICAgIG5hdGl2ZSAgdHJ1ZSAgImNybGYiICAgIENSTEYgIENSTEYgIENSTEYgICAgICAgICBDUkxGX21peF9DUiAgQ1JMRl9udWwKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDMwLXN0cmlwc3BhY2Uuc2ggYi90L3QwMDMwLXN0cmlwc3BhY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjllOTFkOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwMzAtc3RyaXBzcGFjZS5zaApAQCAtMCwwICsxLDQ0MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBDYXJsb3MgUmljYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3RyaXBzcGFjZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Q0MD0nQSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkbycKK3M0MD0nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcKK3Nzcz0iJHM0MCRzNDAkczQwJHM0MCRzNDAkczQwJHM0MCRzNDAkczQwJHM0MCIgIyA0MDAKK3R0dD0iJHQ0MCR0NDAkdDQwJHQ0MCR0NDAkdDQwJHQ0MCR0NDAkdDQwJHQ0MCIgIyA0MDAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xvbmcgbGluZXMgd2l0aG91dCBzcGFjZXMgc2hvdWxkIGJlIHVuY2hhbmdlZCcgJworICAgIGVjaG8gIiR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkdHR0JHR0dCIgPmV4cGVjdCAmJgorICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiR0dHQkdHR0JHR0dCIgPmV4cGVjdCAmJgorICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiR0dHQkdHR0JHR0dCR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdsaW5lcyB3aXRoIHNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIHNob3VsZCBiZSB1bmNoYW5nZWQnICcKKyAgICBlY2hvICIkc3NzJHR0dCIgPmV4cGVjdCAmJgorICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiRzc3Mkc3NzJHR0dCIgPmV4cGVjdCAmJgorICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiRzc3Mkc3NzJHNzcyR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdsaW5lcyB3aXRoIGludGVybWVkaWF0ZSBzcGFjZXMgc2hvdWxkIGJlIHVuY2hhbmdlZCcgJworICAgIGVjaG8gIiR0dHQkc3NzJHR0dCIgPmV4cGVjdCAmJgorICAgIGdpdCBzdHJpcHNwYWNlIDxleHBlY3QgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiR0dHQkc3NzJHNzcyR0dHQiID5leHBlY3QgJiYKKyAgICBnaXQgc3RyaXBzcGFjZSA8ZXhwZWN0ID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb25zZWN1dGl2ZSBibGFuayBsaW5lcyBzaG91bGQgYmUgdW5pZmllZCcgJworICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cblxuXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dFxuXG5cblxuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0XG5cbiR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuXG5cblxuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cblxuXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG5cbiR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cblxuXG5cbiR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0JHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHRcblxuXG5cblxuJHR0dCR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cdFxuIFxuXG4gIFx0XHRcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dFxuXHRcbiBcblxuICBcdFx0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0XG5cbiR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuXHRcbiBcblxuICBcdFx0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cdFxuIFxuXG4gIFx0XHRcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG5cbiR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0XG5cdFxuIFxuXG4gIFx0XHRcbiR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG4kdHR0JHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHRcblx0XG4gXG5cbiAgXHRcdFxuJHR0dCR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ29ubHkgY29uc2VjdXRpdmUgYmxhbmsgbGluZXMgc2hvdWxkIGJlIGNvbXBsZXRlbHkgcmVtb3ZlZCcgJworICAgID4gZXhwZWN0ICYmCisKKyAgICBwcmludGYgIlxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIlxuXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkc3NzXG4kc3NzXG4kc3NzXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHNzcyRzc3NcbiRzc3NcblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIlxuJHNzc1xuJHNzcyRzc3NcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkc3NzJHNzcyRzc3Mkc3NzXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIlxuJHNzcyRzc3Mkc3NzJHNzc1xuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiXG5cbiRzc3Mkc3NzJHNzcyRzc3NcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29uc2VjdXRpdmUgYmxhbmsgbGluZXMgYXQgdGhlIGJlZ2lubmluZyBzaG91bGQgYmUgcmVtb3ZlZCcgJworICAgIHByaW50ZiAiJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiXG5cblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0XG4iID4gZXhwZWN0ICYmCisgICAgcHJpbnRmICJcblxuXG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiXG5cblxuJHR0dCR0dHQkdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiXG5cblxuJHR0dCR0dHQkdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKKworICAgIHByaW50ZiAiJHNzc1xuJHNzc1xuJHNzc1xuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIlxuJHNzc1xuJHNzcyRzc3NcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkc3NzJHNzc1xuJHNzc1xuXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHNzcyRzc3Mkc3NzXG5cblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIlxuJHNzcyRzc3Mkc3NzXG5cbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICJcblxuJHNzcyRzc3Mkc3NzXG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbnNlY3V0aXZlIGJsYW5rIGxpbmVzIGF0IHRoZSBlbmQgc2hvdWxkIGJlIHJlbW92ZWQnICcKKyAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHRcblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHRcblxuXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dFxuIiA+IGV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCR0dHRcblxuXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dFxuXG5cblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dCR0dHRcbiIgPiBleHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHQkdHR0JHR0dCR0dHRcblxuXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG4iID4gZXhwZWN0ICYmCisKKyAgICBwcmludGYgIiR0dHRcbiRzc3NcbiRzc3NcbiRzc3NcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG5cbiRzc3NcbiRzc3Mkc3NzXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuJHNzcyRzc3NcbiRzc3NcblxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiRzc3Mkc3NzJHNzc1xuXG5cbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG5cbiRzc3Mkc3NzJHNzc1xuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuXG5cbiRzc3Mkc3NzJHNzc1xuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd0ZXh0IHdpdGhvdXQgbmV3bGluZSBhdCBlbmQgc2hvdWxkIGVuZCB3aXRoIG5ld2xpbmUnICcKKyAgICB0ZXN0ICQocHJpbnRmICIkdHR0IiB8IGdpdCBzdHJpcHNwYWNlIHwgd2MgLWwpIC1ndCAwICYmCisgICAgdGVzdCAkKHByaW50ZiAiJHR0dCR0dHQiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbCkgLWd0IDAgJiYKKyAgICB0ZXN0ICQocHJpbnRmICIkdHR0JHR0dCR0dHQiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbCkgLWd0IDAgJiYKKyAgICB0ZXN0ICQocHJpbnRmICIkdHR0JHR0dCR0dHQkdHR0IiB8IGdpdCBzdHJpcHNwYWNlIHwgd2MgLWwpIC1ndCAwCisnCisKKyMgdGV4dCBwbHVzIHNwYWNlcyBhdCB0aGUgZW5kOgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndGV4dCBwbHVzIHNwYWNlcyB3aXRob3V0IG5ld2xpbmUgYXQgZW5kIHNob3VsZCBlbmQgd2l0aCBuZXdsaW5lJyAnCisgICAgdGVzdCAkKHByaW50ZiAiJHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbCkgLWd0IDAgJiYKKyAgICB0ZXN0ICQocHJpbnRmICIkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbCkgLWd0IDAgJiYKKyAgICB0ZXN0ICQocHJpbnRmICIkdHR0JHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgd2MgLWwpIC1ndCAwICYmCisgICAgdGVzdCAkKHByaW50ZiAiJHR0dCRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgd2MgLWwpIC1ndCAwICYmCisgICAgdGVzdCAkKHByaW50ZiAiJHR0dCR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IHdjIC1sKSAtZ3QgMCAmJgorICAgIHRlc3QgJChwcmludGYgIiR0dHQkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCB3YyAtbCkgLWd0IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3RleHQgcGx1cyBzcGFjZXMgd2l0aG91dCBuZXdsaW5lIGF0IGVuZCBzaG91bGQgbm90IHNob3cgc3BhY2VzJyAnCisgICAgISAocHJpbnRmICIkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAgIiA+L2Rldi9udWxsKSAmJgorICAgICEgKHByaW50ZiAiJHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpICYmCisgICAgISAocHJpbnRmICIkdHR0JHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpICYmCisgICAgISAocHJpbnRmICIkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChwcmludGYgIiR0dHQkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChwcmludGYgIiR0dHQkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3RleHQgcGx1cyBzcGFjZXMgd2l0aG91dCBuZXdsaW5lIHNob3VsZCBzaG93IHRoZSBjb3JyZWN0IGxpbmVzJyAnCisgICAgcHJpbnRmICIkdHR0XG4iID5leHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dCR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dCR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dCR0dHQkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndGV4dCBwbHVzIHNwYWNlcyBhdCBlbmQgc2hvdWxkIG5vdCBzaG93IHNwYWNlcycgJworICAgICEgKGVjaG8gIiR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpICYmCisgICAgISAoZWNobyAiJHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpICYmCisgICAgISAoZWNobyAiJHR0dCR0dHQkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAgIiA+L2Rldi9udWxsKSAmJgorICAgICEgKGVjaG8gIiR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAgIiA+L2Rldi9udWxsKSAmJgorICAgICEgKGVjaG8gIiR0dHQkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgfCBncmVwICIgICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChlY2hvICIkdHR0JHNzcyRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICAiID4vZGV2L251bGwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd0ZXh0IHBsdXMgc3BhY2VzIGF0IGVuZCBzaG91bGQgYmUgY2xlYW5lZCBhbmQgbmV3bGluZSBtdXN0IHJlbWFpbicgJworICAgIGVjaG8gIiR0dHQiID5leHBlY3QgJiYKKyAgICBlY2hvICIkdHR0JHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgZWNobyAiJHR0dCIgPmV4cGVjdCAmJgorICAgIGVjaG8gIiR0dHQkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgZWNobyAiJHR0dCIgPmV4cGVjdCAmJgorICAgIGVjaG8gIiR0dHQkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiR0dHQkdHR0IiA+ZXhwZWN0ICYmCisgICAgZWNobyAiJHR0dCR0dHQkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkdHR0JHR0dCIgPmV4cGVjdCAmJgorICAgIGVjaG8gIiR0dHQkdHR0JHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiR0dHQkdHR0JHR0dCIgPmV4cGVjdCAmJgorICAgIGVjaG8gIiR0dHQkdHR0JHR0dCRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBzcGFjZXMgb25seToKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NwYWNlcyB3aXRoIG5ld2xpbmUgYXQgZW5kIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGVtcHR5IHN0cmluZycgJworICAgIHByaW50ZiAiIiA+ZXhwZWN0ICYmCisKKyAgICBlY2hvIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBlY2hvICIkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIGVjaG8gIiRzc3Mkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NwYWNlcyB3aXRob3V0IG5ld2xpbmUgYXQgZW5kIHNob3VsZCBub3Qgc2hvdyBzcGFjZXMnICcKKyAgICAhIChwcmludGYgIiIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAiID4vZGV2L251bGwpICYmCisgICAgISAocHJpbnRmICIkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChwcmludGYgIiRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICIgPi9kZXYvbnVsbCkgJiYKKyAgICAhIChwcmludGYgIiRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSB8IGdyZXAgIiAiID4vZGV2L251bGwpICYmCisgICAgISAocHJpbnRmICIkc3NzJHNzcyRzc3Mkc3NzIiB8IGdpdCBzdHJpcHNwYWNlIHwgZ3JlcCAiICIgPi9kZXYvbnVsbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NwYWNlcyB3aXRob3V0IG5ld2xpbmUgYXQgZW5kIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGVtcHR5IHN0cmluZycgJworICAgIHByaW50ZiAiIiA+ZXhwZWN0ICYmCisKKyAgICBwcmludGYgIiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkc3NzJHNzcyRzc3MiIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHNzcyRzc3Mkc3NzJHNzcyIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29uc2VjdXRpdmUgdGV4dCBsaW5lcyBzaG91bGQgYmUgdW5jaGFuZ2VkJyAnCisgICAgcHJpbnRmICIkdHR0JHR0dFxuJHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dFxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG4kdHR0XG4iID5leHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG4kdHR0XG4iIHwgZ2l0IHN0cmlwc3BhY2UgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworICAgIHByaW50ZiAiJHR0dFxuJHR0dFxuJHR0dFxuJHR0dCR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuJHR0dFxuJHR0dFxuJHR0dCR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0XG4kdHR0XG5cbiR0dHQkdHR0XG4kdHR0XG4iID5leHBlY3QgJiYKKyAgICBwcmludGYgIiR0dHRcbiR0dHRcblxuJHR0dCR0dHRcbiR0dHRcbiIgfCBnaXQgc3RyaXBzcGFjZSA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4kdHR0JHR0dFxuIiA+ZXhwZWN0ICYmCisgICAgcHJpbnRmICIkdHR0JHR0dFxuXG4kdHR0XG4kdHR0JHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKyAgICBwcmludGYgIiR0dHRcbiR0dHQkdHR0XG5cbiR0dHRcbiIgPmV4cGVjdCAmJgorICAgIHByaW50ZiAiJHR0dFxuJHR0dCR0dHRcblxuJHR0dFxuIiB8IGdpdCBzdHJpcHNwYWNlID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmlwIGNvbW1lbnRzLCB0b28nICcKKwl0ZXN0ICEgLXogIiQoZWNobyAiIyBjb21tZW50IiB8IGdpdCBzdHJpcHNwYWNlKSIgJiYKKwl0ZXN0IC16ICIkKGVjaG8gIiMgY29tbWVudCIgfCBnaXQgc3RyaXBzcGFjZSAtcykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmlwIGNvbW1lbnRzIHdpdGggY2hhbmdlZCBjb21tZW50IGNoYXInICcKKwl0ZXN0ICEgLXogIiQoZWNobyAiOyBjb21tZW50IiB8IGdpdCAtYyBjb3JlLmNvbW1lbnRjaGFyPSI7IiBzdHJpcHNwYWNlKSIgJiYKKwl0ZXN0IC16ICIkKGVjaG8gIjsgY29tbWVudCIgfCBnaXQgLWMgY29yZS5jb21tZW50Y2hhcj0iOyIgc3RyaXBzcGFjZSAtcykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1jIHdpdGggc2luZ2xlIGxpbmUnICcKKwlwcmludGYgIiMgZm9vXG4iID5leHBlY3QgJiYKKwlwcmludGYgImZvbyIgfCBnaXQgc3RyaXBzcGFjZSAtYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctYyB3aXRoIHNpbmdsZSBsaW5lIGZvbGxvd2VkIGJ5IGVtcHR5IGxpbmUnICcKKwlwcmludGYgIiMgZm9vXG4jXG4iID5leHBlY3QgJiYKKwlwcmludGYgImZvb1xuXG4iIHwgZ2l0IHN0cmlwc3BhY2UgLWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLWMgd2l0aCBuZXdsaW5lIG9ubHknICcKKwlwcmludGYgIiNcbiIgPmV4cGVjdCAmJgorCXByaW50ZiAiXG4iIHwgZ2l0IHN0cmlwc3BhY2UgLWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb21tZW50LWxpbmVzIHdpdGggc2luZ2xlIGxpbmUnICcKKwlwcmludGYgIiMgZm9vXG4iID5leHBlY3QgJiYKKwlwcmludGYgImZvbyIgfCBnaXQgc3RyaXBzcGFjZSAtYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctYyB3aXRoIGNoYW5nZWQgY29tbWVudCBjaGFyJyAnCisJcHJpbnRmICI7IGZvb1xuIiA+ZXhwZWN0ICYmCisJcHJpbnRmICJmb28iIHwgZ2l0IC1jIGNvcmUuY29tbWVudGNoYXI9IjsiIHN0cmlwc3BhY2UgLWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgU1AtSFQgc2VxdWVuY2UgaW4gY29tbWVudGVkIGxpbmUnICcKKwlwcmludGYgIiNcdG9uZVxuI1xuIyB0d29cbiIgPmV4cGVjdCAmJgorCXByaW50ZiAiXHRvbmVcblxudHdvXG4iIHwgZ2l0IHN0cmlwc3BhY2UgLWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDQwLXBhcnNlLW9wdGlvbnMuc2ggYi90L3QwMDQwLXBhcnNlLW9wdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWJlNjQxMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwNDAtcGFyc2Utb3B0aW9ucy5zaApAQCAtMCwwICsxLDQ3OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J291ciBvd24gb3B0aW9uIHBhcnNlcicKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK3VzYWdlOiB0ZXN0LXBhcnNlLW9wdGlvbnMgPG9wdGlvbnM+CisKKyAgICAtLXllcyAgICAgICAgICAgICAgICAgZ2V0IGEgYm9vbGVhbgorICAgIC1ELCAtLW5vLWRvdWJ0ICAgICAgICBiZWdpbnMgd2l0aCAnbm8tJworICAgIC1CLCAtLW5vLWZlYXIgICAgICAgICBiZSBicmF2ZQorICAgIC1iLCAtLWJvb2xlYW4gICAgICAgICBpbmNyZW1lbnQgYnkgb25lCisgICAgLTQsIC0tb3I0ICAgICAgICAgICAgIGJpdHdpc2Utb3IgYm9vbGVhbiB3aXRoIC4uLjAxMDAKKyAgICAtLW5lZy1vcjQgICAgICAgICAgICAgc2FtZSBhcyAtLW5vLW9yNAorCisgICAgLWksIC0taW50ZWdlciA8bj4gICAgIGdldCBhIGludGVnZXIKKyAgICAtaiA8bj4gICAgICAgICAgICAgICAgZ2V0IGEgaW50ZWdlciwgdG9vCisgICAgLW0sIC0tbWFnbml0dWRlIDxuPiAgIGdldCBhIG1hZ25pdHVkZQorICAgIC0tc2V0MjMgICAgICAgICAgICAgICBzZXQgaW50ZWdlciB0byAyMworICAgIC10IDx0aW1lPiAgICAgICAgICAgICBnZXQgdGltZXN0YW1wIG9mIDx0aW1lPgorICAgIC1MLCAtLWxlbmd0aCA8c3RyPiAgICBnZXQgbGVuZ3RoIG9mIDxzdHI+CisgICAgLUYsIC0tZmlsZSA8ZmlsZT4gICAgIHNldCBmaWxlIHRvIDxmaWxlPgorCitTdHJpbmcgb3B0aW9ucworICAgIC1zLCAtLXN0cmluZyA8c3RyaW5nPgorICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgYSBzdHJpbmcKKyAgICAtLXN0cmluZzIgPHN0cj4gICAgICAgZ2V0IGFub3RoZXIgc3RyaW5nCisgICAgLS1zdCA8c3Q+ICAgICAgICAgICAgIGdldCBhbm90aGVyIHN0cmluZyAocGVydmVydCBvcmRlcmluZykKKyAgICAtbyA8c3RyPiAgICAgICAgICAgICAgZ2V0IGFub3RoZXIgc3RyaW5nCisgICAgLS1saXN0IDxzdHI+ICAgICAgICAgIGFkZCBzdHIgdG8gbGlzdAorCitNYWdpYyBhcmd1bWVudHMKKyAgICAtLXF1dXggICAgICAgICAgICAgICAgbWVhbnMgLS1xdXV4CisgICAgLU5VTSAgICAgICAgICAgICAgICAgIHNldCBpbnRlZ2VyIHRvIE5VTQorICAgICsgICAgICAgICAgICAgICAgICAgICBzYW1lIGFzIC1iCisgICAgLS1hbWJpZ3VvdXMgICAgICAgICAgIHBvc2l0aXZlIGFtYmlndWl0eQorICAgIC0tbm8tYW1iaWd1b3VzICAgICAgICBuZWdhdGl2ZSBhbWJpZ3VpdHkKKworU3RhbmRhcmQgb3B0aW9ucworICAgIC0tYWJicmV2Wz08bj5dICAgICAgICB1c2UgPG4+IGRpZ2l0cyB0byBkaXNwbGF5IFNIQS0xcworICAgIC12LCAtLXZlcmJvc2UgICAgICAgICBiZSB2ZXJib3NlCisgICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgIGRyeSBydW4KKyAgICAtcSwgLS1xdWlldCAgICAgICAgICAgYmUgcXVpZXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgaGVscCcgJworCXRlc3RfbXVzdF9mYWlsIHRlc3QtcGFyc2Utb3B0aW9ucyAtaCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCittdiBleHBlY3QgZXhwZWN0LmVycgorCitjYXQgPmV4cGVjdC50ZW1wbGF0ZSA8PEVPRgorYm9vbGVhbjogMAoraW50ZWdlcjogMAorbWFnbml0dWRlOiAwCit0aW1lc3RhbXA6IDAKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK2NoZWNrKCkgeworCXdoYXQ9IiQxIiAmJgorCXNoaWZ0ICYmCisJZXhwZWN0PSIkMSIgJiYKKwlzaGlmdCAmJgorCXNlZCAicy9eJHdoYXQgLiovJHdoYXQgJGV4cGVjdC8iIDxleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgorCXRlc3QtcGFyc2Utb3B0aW9ucyAkKiA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCitjaGVja19pMThuKCkgeworCXdoYXQ9IiQxIiAmJgorCXNoaWZ0ICYmCisJZXhwZWN0PSIkMSIgJiYKKwlzaGlmdCAmJgorCXNlZCAicy9eJHdoYXQgLiovJHdoYXQgJGV4cGVjdC8iIDxleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgorCXRlc3QtcGFyc2Utb3B0aW9ucyAkKiA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKK30KKworY2hlY2tfdW5rbm93bigpIHsKKwljYXNlICIkMSIgaW4KKwktLSopCisJCWVjaG8gZXJyb3I6IHVua25vd24gb3B0aW9uIFxgJHsxIy0tfVwnID5leHBlY3QgOzsKKwktKikKKwkJZWNobyBlcnJvcjogdW5rbm93biBzd2l0Y2ggXGAkezEjLX1cJyA+ZXhwZWN0IDs7CisJZXNhYyAmJgorCWNhdCBleHBlY3QuZXJyID4+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1wYXJzZS1vcHRpb25zICQqID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQuZXJyCit9CisKK2NoZWNrX3Vua25vd25faTE4bigpIHsKKwljYXNlICIkMSIgaW4KKwktLSopCisJCWVjaG8gZXJyb3I6IHVua25vd24gb3B0aW9uIFxgJHsxIy0tfVwnID5leHBlY3QgOzsKKwktKikKKwkJZWNobyBlcnJvcjogdW5rbm93biBzd2l0Y2ggXGAkezEjLX1cJyA+ZXhwZWN0IDs7CisJZXNhYyAmJgorCWNhdCBleHBlY3QuZXJyID4+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1wYXJzZS1vcHRpb25zICQqID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0LmVycgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpICMxJyAnY2hlY2sgYm9vbGVhbjogMSAtLXllcycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgIzInICdjaGVjayBib29sZWFuOiAxIC0tbm8tZG91YnQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpICMzJyAnY2hlY2sgYm9vbGVhbjogMSAtRCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgIzQnICdjaGVjayBib29sZWFuOiAxIC0tbm8tZmVhcicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgIzUnICdjaGVjayBib29sZWFuOiAxIC1CJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpIGlzIGlkZW1wb3RlbnQgIzEnICdjaGVjayBib29sZWFuOiAxIC0teWVzIC0teWVzJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSBpcyBpZGVtcG90ZW50ICMyJyAnY2hlY2sgYm9vbGVhbjogMSAtREInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CT09MKCkgbmVnYXRpb24gIzEnICdjaGVjayBib29sZWFuOiAwIC1EIC0tbm8teWVzJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSBuZWdhdGlvbiAjMicgJ2NoZWNrIGJvb2xlYW46IDAgLUQgLS1uby1uby1kb3VidCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSBubyBuZWdhdGlvbiAjMScgJ2NoZWNrX3Vua25vd25faTE4biAtLWZlYXInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfQk9PTCgpIG5vIG5lZ2F0aW9uICMyJyAnY2hlY2tfdW5rbm93bl9pMThuIC0tbm8tbm8tZmVhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JPT0woKSBwb3NpdGl2YXRpb24nICdjaGVjayBib29sZWFuOiAwIC1EIC0tZG91YnQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9JTlQoKSBuZWdhdGl2ZScgJ2NoZWNrIGludGVnZXI6IC0yMzQ1IC1pIC0yMzQ1JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTUFHTklUVURFKCkgc2ltcGxlJyAnCisJY2hlY2sgbWFnbml0dWRlOiAyMzQ1Njc4IC1tIDIzNDU2NzgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX01BR05JVFVERSgpIGtpbG8nICcKKwljaGVjayBtYWduaXR1ZGU6IDIzOTYxNiAtbSAyMzRrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9NQUdOSVRVREUoKSBtZWdhJyAnCisJY2hlY2sgbWFnbml0dWRlOiAxMDQ4NTc2MDAgLW0gMTAwbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTUFHTklUVURFKCkgZ2lnYScgJworCWNoZWNrIG1hZ25pdHVkZTogMTA3Mzc0MTgyNCAtbSAxZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfTUFHTklUVURFKCkgM2dpZ2EnICcKKwljaGVjayBtYWduaXR1ZGU6IDMyMjEyMjU0NzIgLW0gM2cKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorYm9vbGVhbjogMgoraW50ZWdlcjogMTcyOQorbWFnbml0dWRlOiAxNjM4NAordGltZXN0YW1wOiAwCitzdHJpbmc6IDEyMworYWJicmV2OiA3Cit2ZXJib3NlOiAyCitxdWlldDogbm8KK2RyeSBydW46IHllcworZmlsZTogcHJlZml4L215LmZpbGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydCBvcHRpb25zJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC1zMTIzIC1iIC1pIDE3MjkgLW0gMTZrIC1iIC12diAtbiAtRiBteS5maWxlIFwKKwk+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVycgorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitib29sZWFuOiAyCitpbnRlZ2VyOiAxNzI5CittYWduaXR1ZGU6IDE2Mzg0Cit0aW1lc3RhbXA6IDAKK3N0cmluZzogMzIxCithYmJyZXY6IDEwCit2ZXJib3NlOiAyCitxdWlldDogbm8KK2RyeSBydW46IG5vCitmaWxlOiBwcmVmaXgvZmkubGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb25nIG9wdGlvbnMnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1ib29sZWFuIC0taW50ZWdlciAxNzI5IC0tbWFnbml0dWRlIDE2ayBcCisJCS0tYm9vbGVhbiAtLXN0cmluZzI9MzIxIC0tdmVyYm9zZSAtLXZlcmJvc2UgLS1uby1kcnktcnVuIFwKKwkJLS1hYmJyZXY9MTAgLS1maWxlIGZpLmxlIC0tb2Jzb2xldGUgXAorCQk+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIHJlcXVpcmVkIHZhbHVlJyAnCisJdGVzdF9leHBlY3RfY29kZSAxMjkgdGVzdC1wYXJzZS1vcHRpb25zIC1zICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjkgdGVzdC1wYXJzZS1vcHRpb25zIC0tc3RyaW5nICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjkgdGVzdC1wYXJzZS1vcHRpb25zIC0tZmlsZQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitib29sZWFuOiAxCitpbnRlZ2VyOiAxMworbWFnbml0dWRlOiAwCit0aW1lc3RhbXA6IDAKK3N0cmluZzogMTIzCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorYXJnIDAwOiBhMQorYXJnIDAxOiBiMQorYXJnIDAyOiAtLWJvb2xlYW4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcm1pbmdsZWQgYXJndW1lbnRzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIGExIC0tc3RyaW5nIDEyMyBiMSAtLWJvb2xlYW4gLWogMTMgLS0gLS1ib29sZWFuIFwKKwkJPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitib29sZWFuOiAwCitpbnRlZ2VyOiAyCittYWduaXR1ZGU6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5hbWJpZ3VvdXNseSBhYmJyZXZpYXRlZCBvcHRpb24nICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1pbnQgMiAtLWJvb2xlYW4gLS1uby1ibyA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuYW1iaWd1b3VzbHkgYWJicmV2aWF0ZWQgb3B0aW9uIHdpdGggIj0iJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0taW50PTIgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXNseSBhYmJyZXZpYXRlZCBvcHRpb24nICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSB0ZXN0LXBhcnNlLW9wdGlvbnMgLS1zdHJpbiAxMjMKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorYm9vbGVhbjogMAoraW50ZWdlcjogMAorbWFnbml0dWRlOiAwCit0aW1lc3RhbXA6IDAKK3N0cmluZzogMTIzCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbiBhbWJpZ3VvdXMgb3B0aW9uIChhZnRlciB0d28gb3B0aW9ucyBpdCBhYmJyZXZpYXRlcyknICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1zdCAxMjMgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiB0eXBvLmVyciA8PCBFT0YKK2Vycm9yOiBkaWQgeW91IG1lYW4gXGAtLWJvb2xlYW5cYCAod2l0aCB0d28gZGFzaGVzID8pCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IHBvc3NpYmxlIHR5cG9zJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1wYXJzZS1vcHRpb25zIC1ib29sZWFuID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0ICYmCisJdGVzdF9jbXAgdHlwby5lcnIgb3V0cHV0LmVycgorJworCitjYXQgPiB0eXBvLmVyciA8PCBFT0YKK2Vycm9yOiBkaWQgeW91IG1lYW4gXGAtLWFtYmlndW91c1xgICh3aXRoIHR3byBkYXNoZXMgPykKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgcG9zc2libGUgdHlwb3MnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXBhcnNlLW9wdGlvbnMgLWFtYmlndW91cyA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dCAmJgorCXRlc3RfY21wIHR5cG8uZXJyIG91dHB1dC5lcnIKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitib29sZWFuOiAwCitpbnRlZ2VyOiAwCittYWduaXR1ZGU6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCithcmcgMDA6IC0tcXV1eAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tlZXAgc29tZSBvcHRpb25zIGFzIGFyZ3VtZW50cycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtLXF1dXggPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisgICAgICAgIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitib29sZWFuOiAwCitpbnRlZ2VyOiAwCittYWduaXR1ZGU6IDAKK3RpbWVzdGFtcDogMQorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IHllcworZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorYXJnIDAwOiBmb28KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPUFRfREFURSgpIHdvcmtzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC10ICIxOTcwLTAxLTAxIDAwOjAwOjAxICswMDAwIiBcCisJCWZvbyAtcSA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorQ2FsbGJhY2s6ICJmb3VyIiwgMAorYm9vbGVhbjogNQoraW50ZWdlcjogNAorbWFnbml0dWRlOiAwCit0aW1lc3RhbXA6IDAKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9DQUxMQkFDSygpIGFuZCBPUFRfQklUKCkgd29yaycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWxlbmd0aD1mb3VyIC1iIC00ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitDYWxsYmFjazogIm5vdCBzZXQiLCAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NBTExCQUNLKCkgYW5kIGNhbGxiYWNrIGVycm9ycyB3b3JrJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1wYXJzZS1vcHRpb25zIC0tbm8tbGVuZ3RoID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIG91dHB1dC5lcnIKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitib29sZWFuOiAxCitpbnRlZ2VyOiAyMworbWFnbml0dWRlOiAwCit0aW1lc3RhbXA6IDAKK3N0cmluZzogKG5vdCBzZXQpCithYmJyZXY6IDcKK3ZlcmJvc2U6IDAKK3F1aWV0OiBubworZHJ5IHJ1bjogbm8KK2ZpbGU6IChub3Qgc2V0KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9CSVQoKSBhbmQgT1BUX1NFVF9JTlQoKSB3b3JrJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0tc2V0MjMgLWJiYmJiIC0tbm8tb3I0ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX05FR0JJVCgpIGFuZCBPUFRfU0VUX0lOVCgpIHdvcmsnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1zZXQyMyAtYmJiYmIgLS1uZWctb3I0ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitib29sZWFuOiA2CitpbnRlZ2VyOiAwCittYWduaXR1ZGU6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0JJVCgpIHdvcmtzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC1iYiAtLW9yNCA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09QVF9ORUdCSVQoKSB3b3JrcycgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtYmIgLS1uby1uZWctb3I0ID4gb3V0cHV0IDI+IG91dHB1dC5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0LmVyciAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX0NPVU5UVVAoKSB3aXRoIFBBUlNFX09QVF9OT0RBU0ggd29ya3MnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgKyArICsgKyArICsgPiBvdXRwdXQgMj4gb3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKK2Jvb2xlYW46IDAKK2ludGVnZXI6IDEyMzQ1CittYWduaXR1ZGU6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT1BUX05VTUJFUl9DQUxMQkFDSygpIHdvcmtzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0xMjM0NSA+IG91dHB1dCAyPiBvdXRwdXQuZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitib29sZWFuOiAwCitpbnRlZ2VyOiAwCittYWduaXR1ZGU6IDAKK3RpbWVzdGFtcDogMAorc3RyaW5nOiAobm90IHNldCkKK2FiYnJldjogNwordmVyYm9zZTogMAorcXVpZXQ6IG5vCitkcnkgcnVuOiBubworZmlsZTogKG5vdCBzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVnYXRpb24gb2YgT1BUX05PTkVHIGZsYWdzIGlzIG5vdCBhbWJpZ3VvdXMnICcKKwl0ZXN0LXBhcnNlLW9wdGlvbnMgLS1uby1hbWJpZyA+b3V0cHV0IDI+b3V0cHV0LmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQuZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPj5leHBlY3QgPDwnRU9GJworbGlzdDogZm9vCitsaXN0OiBiYXIKK2xpc3Q6IGJhegorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxpc3Qga2VlcHMgbGlzdCBvZiBzdHJpbmdzJyAnCisJdGVzdC1wYXJzZS1vcHRpb25zIC0tbGlzdCBmb28gLS1saXN0PWJhciAtLWxpc3Q9YmF6ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tbGlzdCByZXNldHMgbGlzdCcgJworCXRlc3QtcGFyc2Utb3B0aW9ucyAtLWxpc3Q9b3RoZXIgLS1saXN0PWlycmVsZXZhbnQgLS1saXN0PW9wdGlvbnMgXAorCQktLW5vLWxpc3QgLS1saXN0PWZvbyAtLWxpc3Q9YmFyIC0tbGlzdD1iYXogPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDUwLWZpbGVzeXN0ZW0uc2ggYi90L3QwMDUwLWZpbGVzeXN0ZW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjI5ZDc0OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwNTAtZmlsZXN5c3RlbS5zaApAQCAtMCwwICsxLDEyMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1ZhcmlvdXMgZmlsZXN5c3RlbSBpc3N1ZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCithdW1sPSQocHJpbnRmICdcMzAzXDI0NCcpCithdW1sY2RpYXI9JChwcmludGYgJ1wxNDFcMzE0XDIxMCcpCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgQ0FTRV9JTlNFTlNJVElWRV9GUwordGhlbgorCXNheSAid2lsbCB0ZXN0IG9uIGEgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIgorCXRlc3RfY2FzZT10ZXN0X2V4cGVjdF9mYWlsdXJlCitlbHNlCisJdGVzdF9jYXNlPXRlc3RfZXhwZWN0X3N1Y2Nlc3MKK2ZpCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgVVRGOF9ORkRfVE9fTkZDCit0aGVuCisJc2F5ICJ3aWxsIHRlc3Qgb24gYSB1bmljb2RlIGNvcnJ1cHRpbmcgZmlsZXN5c3RlbSIKKwl0ZXN0X3VuaWNvZGU9dGVzdF9leHBlY3RfZmFpbHVyZQorZWxzZQorCXRlc3RfdW5pY29kZT10ZXN0X2V4cGVjdF9zdWNjZXNzCitmaQorCit0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTIHx8CisJc2F5ICJ3aWxsIHRlc3Qgb24gYSBmaWxlc3lzdGVtIGxhY2tpbmcgc3ltYm9saWMgbGlua3MiCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgQ0FTRV9JTlNFTlNJVElWRV9GUwordGhlbgordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0aW9uIG9mIGNhc2UgaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSBkdXJpbmcgcmVwbyBpbml0IiAnCisJdGVzdCAkKGdpdCBjb25maWcgLS1ib29sIGNvcmUuaWdub3JlY2FzZSkgPSB0cnVlCisnCitlbHNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZXRlY3Rpb24gb2YgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlc3lzdGVtIGR1cmluZyByZXBvIGluaXQiICcKKwl7CisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ib29sIGNvcmUuaWdub3JlY2FzZSA+L2Rldi9udWxsIHx8CisJCQl0ZXN0ICQoZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5pZ25vcmVjYXNlKSA9IGZhbHNlCisJfQorJworZmkKKworaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0aW9uIG9mIGZpbGVzeXN0ZW0gdy9vIHN5bWxpbmsgc3VwcG9ydCBkdXJpbmcgcmVwbyBpbml0IiAnCisJeworCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLnN5bWxpbmtzIHx8CisJCXRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5zeW1saW5rcykiID0gdHJ1ZQorCX0KKycKK2Vsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRldGVjdGlvbiBvZiBmaWxlc3lzdGVtIHcvbyBzeW1saW5rIHN1cHBvcnQgZHVyaW5nIHJlcG8gaW5pdCIgJworCXY9JChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLnN5bWxpbmtzKSAmJgorCXRlc3QgIiR2IiA9IGZhbHNlCisnCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCBjYXNlIHRlc3RzIiAnCisJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgdHJ1ZSAmJgorCXRvdWNoIGNhbWVsY2FzZSAmJgorCWdpdCBhZGQgY2FtZWxjYXNlICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgJiYKKwlnaXQgbXYgY2FtZWxjYXNlIHRtcCAmJgorCWdpdCBtdiB0bXAgQ2FtZWxDYXNlICYmCisJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIiAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIChjYXNlIGNoYW5nZSknICcKKwlnaXQgbXYgY2FtZWxjYXNlIENhbWVsQ2FzZSAmJgorCWdpdCBjb21taXQgLW0gInJlbmFtZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgKGNhc2UgY2hhbmdlKScgJworCXJtIC1mIENhbWVsQ2FzZSAmJgorCXJtIC1mIGNhbWVsY2FzZSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBtZXJnZSB0b3BpYworJworCisKKwordGVzdF9leHBlY3RfZmFpbHVyZSBDQVNFX0lOU0VOU0lUSVZFX0ZTICdhZGQgKHdpdGggZGlmZmVyZW50IGNhc2UpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJcm0gY2FtZWxjYXNlICYmCisJZWNobyAxID5DYW1lbENhc2UgJiYKKwlnaXQgYWRkIENhbWVsQ2FzZSAmJgorCWNhbWVsPSQoZ2l0IGxzLWZpbGVzIHwgZ3JlcCAtaSBjYW1lbGNhc2UpICYmCisJdGVzdCAkKGVjaG8gIiRjYW1lbCIgfCB3YyAtbCkgPSAxICYmCisJdGVzdCAieiQoZ2l0IGNhdC1maWxlIGJsb2IgOiRjYW1lbCkiID0gejEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAic2V0dXAgdW5pY29kZSBub3JtYWxpemF0aW9uIHRlc3RzIiAnCisJdGVzdF9jcmVhdGVfcmVwbyB1bmljb2RlICYmCisJY2QgdW5pY29kZSAmJgorCWdpdCBjb25maWcgY29yZS5wcmVjb21wb3NldW5pY29kZSBmYWxzZSAmJgorCXRvdWNoICIkYXVtbGNkaWFyIiAmJgorCWdpdCBhZGQgIiRhdW1sY2RpYXIiICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRvcGljICYmCisJZ2l0IG12ICRhdW1sY2RpYXIgdG1wICYmCisJZ2l0IG12IHRtcCAiJGF1bWwiICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCisnCisKKyR0ZXN0X3VuaWNvZGUgJ3JlbmFtZSAoc2lsZW50IHVuaWNvZGUgbm9ybWFsaXphdGlvbiknICcKKwlnaXQgbXYgIiRhdW1sY2RpYXIiICIkYXVtbCIgJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZQorJworCiskdGVzdF91bmljb2RlICdtZXJnZSAoc2lsZW50IHVuaWNvZGUgbm9ybWFsaXphdGlvbiknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgbWVyZ2UgdG9waWMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDU1LWJleW9uZC1zeW1saW5rcy5zaCBiL3QvdDAwNTUtYmV5b25kLXN5bWxpbmtzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjNmZmNTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDU1LWJleW9uZC1zeW1saW5rcy5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndXBkYXRlLWluZGV4IGFuZCBhZGQgcmVmdXNlIHRvIGFkZCBiZXlvbmQgc3ltbGlua3MnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIHNldHVwICcKKwk+YSAmJgorCW1rZGlyIGIgJiYKKwlsbiAtcyBiIGMgJiYKKwk+Yy9kICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBhIGIvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd1cGRhdGUtaW5kZXggLS1hZGQgYmV5b25kIHN5bWxpbmtzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBjL2QgJiYKKwkhICggZ2l0IGxzLWZpbGVzIHwgZ3JlcCBjL2QgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhZGQgYmV5b25kIHN5bWxpbmtzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBjL2QgJiYKKwkhICggZ2l0IGxzLWZpbGVzIHwgZ3JlcCBjL2QgKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNTYtZ2l0LUMuc2ggYi90L3QwMDU2LWdpdC1DLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI2MzBlNzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDU2LWdpdC1DLnNoCkBAIC0wLDAgKzEsOTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSciLUMgPHBhdGg+IiBvcHRpb24gYW5kIGl0cyBlZmZlY3RzIG9uIG90aGVyIHBhdGgtcmVsYXRlZCBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCAtQyA8cGF0aD4iIHJ1bnMgZ2l0IGZyb20gdGhlIGRpcmVjdG9yeSA8cGF0aD4nICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIGRpcjEgJiYKKwllY2hvIDEgPmRpcjEvYS50eHQgJiYKKwltc2c9ImluaXRpYWwgaW4gZGlyMSIgJiYKKwkoY2QgZGlyMSAmJiBnaXQgYWRkIGEudHh0ICYmIGdpdCBjb21taXQgLW0gIiRtc2ciKSAmJgorCWVjaG8gIiRtc2ciID5leHBlY3RlZCAmJgorCWdpdCAtQyBkaXIxIGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgLUMgPHBhdGg+IiB3aXRoIGFuIGVtcHR5IDxwYXRoPiBpcyBhIG5vLW9wJyAnCisJKAorCQlta2RpciAtcCBkaXIxL3N1YmRpciAmJgorCQljZCBkaXIxL3N1YmRpciAmJgorCQlnaXQgLUMgIiIgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXggPmFjdHVhbCAmJgorCQllY2hvIHN1YmRpci8gPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNdWx0aXBsZSAtQyBvcHRpb25zOiAiLUMgZGlyMSAtQyBkaXIyIiBpcyBlcXVpdmFsZW50IHRvICItQyBkaXIxL2RpcjIiJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBkaXIxL2RpcjIgJiYKKwllY2hvIDEgPmRpcjEvZGlyMi9iLnR4dCAmJgorCWdpdCAtQyBkaXIxL2RpcjIgYWRkIGIudHh0ICYmCisJbXNnPSJpbml0aWFsIGluIGRpcjEvZGlyMiIgJiYKKwllY2hvICIkbXNnIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgZGlyMS9kaXIyIGNvbW1pdCAtbSAiJG1zZyIgJiYKKwlnaXQgLUMgZGlyMSAtQyBkaXIyIGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0VmZmVjdCBvbiAtLWdpdC1kaXIgb3B0aW9uOiAiLUMgYyAtLWdpdC1kaXI9YS5naXQiIGlzIGVxdWl2YWxlbnQgdG8gIi0tZ2l0LWRpciBjL2EuZ2l0IicgJworCW1rZGlyIGMgJiYKKwlta2RpciBjL2EgJiYKKwlta2RpciBjL2EuZ2l0ICYmCisJKGNkIGMvYS5naXQgJiYgZ2l0IGluaXQgLS1iYXJlKSAmJgorCWVjaG8gMSA+Yy9hL2EudHh0ICYmCisJZ2l0IC0tZ2l0LWRpciBjL2EuZ2l0IC0td29yay10cmVlPWMvYSBhZGQgYS50eHQgJiYKKwlnaXQgLS1naXQtZGlyIGMvYS5naXQgLS13b3JrLXRyZWU9Yy9hIGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKKwlnaXQgLS1naXQtZGlyPWMvYS5naXQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3RlZCAmJgorCWdpdCAtQyBjIC0tZ2l0LWRpcj1hLmdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdPcmRlciBzaG91bGQgbm90IG1hdHRlcjogIi0tZ2l0LWRpcj1hLmdpdCAtQyBjIiBpcyBlcXVpdmFsZW50IHRvICItQyBjIC0tZ2l0LWRpcj1hLmdpdCInICcKKwlnaXQgLUMgYyAtLWdpdC1kaXI9YS5naXQgbG9nIC0xIC0tZm9ybWF0PSVzID5leHBlY3RlZCAmJgorCWdpdCAtLWdpdC1kaXI9YS5naXQgLUMgYyBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFZmZlY3Qgb24gLS13b3JrLXRyZWUgb3B0aW9uOiAiLUMgYy9hLmdpdCAtLXdvcmstdHJlZT0uLi9hIiAgaXMgZXF1aXZhbGVudCB0byAiLS13b3JrLXRyZWU9Yy9hIC0tZ2l0LWRpcj1jL2EuZ2l0IicgJworCXJtIGMvYS9hLnR4dCAmJgorCWdpdCAtLWdpdC1kaXI9Yy9hLmdpdCAtLXdvcmstdHJlZT1jL2Egc3RhdHVzID5leHBlY3RlZCAmJgorCWdpdCAtQyBjL2EuZ2l0IC0td29yay10cmVlPS4uL2Egc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT3JkZXIgc2hvdWxkIG5vdCBtYXR0ZXI6ICItLXdvcmstdHJlZT0uLi9hIC1DIGMvYS5naXQiIGlzIGVxdWl2YWxlbnQgdG8gIi1DIGMvYS5naXQgLS13b3JrLXRyZWU9Li4vYSInICcKKwlnaXQgLUMgYy9hLmdpdCAtLXdvcmstdHJlZT0uLi9hIHN0YXR1cyA+ZXhwZWN0ZWQgJiYKKwlnaXQgLS13b3JrLXRyZWU9Li4vYSAtQyBjL2EuZ2l0IHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0VmZmVjdCBvbiAtLWdpdC1kaXIgYW5kIC0td29yay10cmVlIG9wdGlvbnMgLSAiLUMgYyAtLWdpdC1kaXI9YS5naXQgLS13b3JrLXRyZWU9YSIgaXMgZXF1aXZhbGVudCB0byAiLS1naXQtZGlyPWMvYS5naXQgLS13b3JrLXRyZWU9Yy9hIicgJworCWdpdCAtLWdpdC1kaXI9Yy9hLmdpdCAtLXdvcmstdHJlZT1jL2Egc3RhdHVzID5leHBlY3RlZCAmJgorCWdpdCAtQyBjIC0tZ2l0LWRpcj1hLmdpdCAtLXdvcmstdHJlZT1hIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09yZGVyIHNob3VsZCBub3QgbWF0dGVyOiAiLUMgYyAtLWdpdC1kaXI9YS5naXQgLS13b3JrLXRyZWU9YSIgaXMgZXF1aXZhbGVudCB0byAiLS1naXQtZGlyPWEuZ2l0IC1DIGMgLS13b3JrLXRyZWU9YSInICcKKwlnaXQgLUMgYyAtLWdpdC1kaXI9YS5naXQgLS13b3JrLXRyZWU9YSBzdGF0dXMgPmV4cGVjdGVkICYmCisJZ2l0IC0tZ2l0LWRpcj1hLmdpdCAtQyBjIC0td29yay10cmVlPWEgc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnT3JkZXIgc2hvdWxkIG5vdCBtYXR0ZXI6ICItQyBjIC0tZ2l0LWRpcj1hLmdpdCAtLXdvcmstdHJlZT1hIiBpcyBlcXVpdmFsZW50IHRvICItLWdpdC1kaXI9YS5naXQgLS13b3JrLXRyZWU9YSAtQyBjIicgJworCWdpdCAtQyBjIC0tZ2l0LWRpcj1hLmdpdCAtLXdvcmstdHJlZT1hIHN0YXR1cyA+ZXhwZWN0ZWQgJiYKKwlnaXQgLS1naXQtZGlyPWEuZ2l0IC0td29yay10cmVlPWEgLUMgYyBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZWxhdGl2ZSBmb2xsb3dlZCBieSBmdWxscGF0aDogIi1DIC4vaGVyZSAtQyAvdGhlcmUiIGlzIGVxdWl2YWxlbnQgdG8gIi1DIC90aGVyZSInICcKKwllY2hvICJpbml0aWFsIGluIGRpcjEvZGlyMiIgPmV4cGVjdGVkICYmCisJZ2l0IC1DIGRpcjEgLUMgIiQocHdkKS9kaXIxL2RpcjIiIGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA2MC1wYXRoLXV0aWxzLnNoIGIvdC90MDA2MC1wYXRoLXV0aWxzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyN2VmODUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDYwLXBhdGgtdXRpbHMuc2gKQEAgLTAsMCArMSwyODkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRGF2aWQgUmVpc3MKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB2YXJpb3VzIHBhdGggdXRpbGl0aWVzJworCisuIC4vdGVzdC1saWIuc2gKKworbm9ybV9wYXRoKCkgeworCWV4cGVjdGVkPSQodGVzdC1wYXRoLXV0aWxzIHByaW50X3BhdGggIiQyIikKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICQzICJub3JtYWxpemUgcGF0aDogJDEgPT4gJDIiIFwKKwkidGVzdCBcIlwkKHRlc3QtcGF0aC11dGlscyBub3JtYWxpemVfcGF0aF9jb3B5ICckMScpXCIgPSAnJGV4cGVjdGVkJyIKK30KKworcmVsYXRpdmVfcGF0aCgpIHsKKwlleHBlY3RlZD0kKHRlc3QtcGF0aC11dGlscyBwcmludF9wYXRoICIkMyIpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkNCAicmVsYXRpdmUgcGF0aDogJDEgJDIgPT4gJDMiIFwKKwkidGVzdCBcIlwkKHRlc3QtcGF0aC11dGlscyByZWxhdGl2ZV9wYXRoICckMScgJyQyJylcIiA9ICckZXhwZWN0ZWQnIgorfQorCit0ZXN0X2dpdF9wYXRoKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdC1wYXRoICQxICQyID0+ICQzIiAiCisJCSQxIGdpdCByZXYtcGFyc2UgLS1naXQtcGF0aCAkMiA+YWN0dWFsICYmCisJCWVjaG8gJDMgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJIgorfQorCisjIE9uIFdpbmRvd3MsIHdlIGFyZSB1c2luZyBNU1lTJ3MgYmFzaCwgd2hpY2ggbWFuZ2xlcyB0aGUgcGF0aHMuCisjIEFic29sdXRlIHBhdGhzIGFyZSBhbmNob3JlZCBhdCB0aGUgTVNZUyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LAorIyB3aGljaCBtZWFucyB0aGF0IHRoZSBwYXRoIC8gYWNjb3VudHMgZm9yIHRoaXMgbWFueSBjaGFyYWN0ZXJzOgorcm9vdG9mZj0kKHRlc3QtcGF0aC11dGlscyBub3JtYWxpemVfcGF0aF9jb3B5IC8gfCB3YyAtYykKKyMgQWNjb3VudCBmb3IgdGhlIHRyYWlsaW5nIExGOgoraWYgdGVzdCAkcm9vdG9mZiA9IDI7IHRoZW4KKwlyb290b2ZmPQkjIHdlIGFyZSBvbiBVbml4CitlbHNlCisJcm9vdG9mZj0kKCgkcm9vdG9mZi0xKSkKK2ZpCisKK2FuY2VzdG9yKCkgeworCSMgV2UgZG8gc29tZSBtYXRoIHdpdGggdGhlIGV4cGVjdGVkIGFuY2VzdG9yIGxlbmd0aC4KKwlleHBlY3RlZD0kMworCWlmIHRlc3QgLW4gIiRyb290b2ZmIiAmJiB0ZXN0ICJ4JGV4cGVjdGVkIiAhPSB4LTE7IHRoZW4KKwkJZXhwZWN0ZWQ9JCgoJGV4cGVjdGVkKyRyb290b2ZmKSkKKwlmaQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImxvbmdlc3QgYW5jZXN0b3I6ICQxICQyID0+ICRleHBlY3RlZCIgXAorCSJhY3R1YWw9XCQodGVzdC1wYXRoLXV0aWxzIGxvbmdlc3RfYW5jZXN0b3JfbGVuZ3RoICckMScgJyQyJykgJiYKKwkgdGVzdCBcIlwkYWN0dWFsXCIgPSAnJGV4cGVjdGVkJyIKK30KKworIyBTb21lIGFic29sdXRlIHBhdGggdGVzdHMgc2hvdWxkIGJlIHNraXBwZWQgb24gV2luZG93cyBkdWUgdG8gcGF0aCBtYW5nbGluZworIyBvbiBQT1NJWC1zdHlsZSBhYnNvbHV0ZSBwYXRocworY2FzZSAkKHVuYW1lIC1zKSBpbgorKk1JTkdXKikKKwk7OworKikKKwl0ZXN0X3NldF9wcmVyZXEgUE9TSVgKKwk7OworZXNhYworCitub3JtX3BhdGggIiIgIiIKK25vcm1fcGF0aCAuICIiCitub3JtX3BhdGggLi8gIiIKK25vcm1fcGF0aCAuLy4gIiIKK25vcm1fcGF0aCAuLy4uICsrZmFpbGVkKysKK25vcm1fcGF0aCAuLi8uICsrZmFpbGVkKysKK25vcm1fcGF0aCAuLy4uLy4vLyArK2ZhaWxlZCsrCitub3JtX3BhdGggZGlyLy4uICIiCitub3JtX3BhdGggZGlyL3N1Yi8uLi8uLiAiIgorbm9ybV9wYXRoIGRpci9zdWIvLi4vLi4vLi4gKytmYWlsZWQrKworbm9ybV9wYXRoIGRpciBkaXIKK25vcm1fcGF0aCBkaXIvLyBkaXIvCitub3JtX3BhdGggLi9kaXIgZGlyCitub3JtX3BhdGggZGlyLy4gZGlyLworbm9ybV9wYXRoIGRpci8vLy4vIGRpci8KK25vcm1fcGF0aCBkaXIvL3N1Yi8uLiBkaXIvCitub3JtX3BhdGggZGlyL3N1Yi8uLi8gZGlyLworbm9ybV9wYXRoIGRpci9zdWIvLi4vLiBkaXIvCitub3JtX3BhdGggZGlyL3MxLy4uL3MyLyBkaXIvczIvCitub3JtX3BhdGggZDEvczEvLy9zMi8uLi8vLi4vczMvIGQxL3MzLworbm9ybV9wYXRoIGQxL3MxLy8uLi9zMi8uLi8uLi9kMiBkMgorbm9ybV9wYXRoIGQxLy4uLi9kMiBkMS8uLi4vZDIKK25vcm1fcGF0aCBkMS8uLi4vLi8uLi9kMiBkMS9kMgorCitub3JtX3BhdGggLyAvCitub3JtX3BhdGggLy8gLyBQT1NJWAorbm9ybV9wYXRoIC8vLyAvIFBPU0lYCitub3JtX3BhdGggLy4gLworbm9ybV9wYXRoIC8uLyAvIFBPU0lYCitub3JtX3BhdGggLy4vLi4gKytmYWlsZWQrKyBQT1NJWAorbm9ybV9wYXRoIC8uLi8uICsrZmFpbGVkKysKK25vcm1fcGF0aCAvLi8uLi8uLy8gKytmYWlsZWQrKyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvLi4gLyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvc3ViLy4uLy4uIC8gUE9TSVgKK25vcm1fcGF0aCAvZGlyL3N1Yi8uLi8uLi8uLiArK2ZhaWxlZCsrIFBPU0lYCitub3JtX3BhdGggL2RpciAvZGlyCitub3JtX3BhdGggL2Rpci8vIC9kaXIvCitub3JtX3BhdGggLy4vZGlyIC9kaXIKK25vcm1fcGF0aCAvZGlyLy4gL2Rpci8KK25vcm1fcGF0aCAvZGlyLy8vLi8gL2Rpci8KK25vcm1fcGF0aCAvZGlyLy9zdWIvLi4gL2Rpci8KK25vcm1fcGF0aCAvZGlyL3N1Yi8uLi8gL2Rpci8KK25vcm1fcGF0aCAvL2Rpci9zdWIvLi4vLiAvZGlyLyBQT1NJWAorbm9ybV9wYXRoIC9kaXIvczEvLi4vczIvIC9kaXIvczIvCitub3JtX3BhdGggL2QxL3MxLy8vczIvLi4vLy4uL3MzLyAvZDEvczMvCitub3JtX3BhdGggL2QxL3MxLy8uLi9zMi8uLi8uLi9kMiAvZDIKK25vcm1fcGF0aCAvZDEvLi4uL2QyIC9kMS8uLi4vZDIKK25vcm1fcGF0aCAvZDEvLi4uLy4vLi4vZDIgL2QxL2QyCisKK2FuY2VzdG9yIC8gLyAtMQorYW5jZXN0b3IgL2ZvbyAvIDAKK2FuY2VzdG9yIC9mb28gL2ZvIC0xCithbmNlc3RvciAvZm9vIC9mb28gLTEKK2FuY2VzdG9yIC9mb28gL2JhciAtMQorYW5jZXN0b3IgL2ZvbyAvZm9vL2JhciAtMQorYW5jZXN0b3IgL2ZvbyAvZm9vOi9iYXIgLTEKK2FuY2VzdG9yIC9mb28gLzovZm9vOi9iYXIgMAorYW5jZXN0b3IgL2ZvbyAvZm9vOi86L2JhciAwCithbmNlc3RvciAvZm9vIC86L2JhcjovZm9vIDAKK2FuY2VzdG9yIC9mb28vYmFyIC8gMAorYW5jZXN0b3IgL2Zvby9iYXIgL2ZvIC0xCithbmNlc3RvciAvZm9vL2JhciAvZm9vIDQKK2FuY2VzdG9yIC9mb28vYmFyIC9mb28vYmEgLTEKK2FuY2VzdG9yIC9mb28vYmFyIC86L2ZvIDAKK2FuY2VzdG9yIC9mb28vYmFyIC9mb286L2Zvby9iYSA0CithbmNlc3RvciAvZm9vL2JhciAvYmFyIC0xCithbmNlc3RvciAvZm9vL2JhciAvZm8gLTEKK2FuY2VzdG9yIC9mb28vYmFyIC9mb286L2JhciA0CithbmNlc3RvciAvZm9vL2JhciAvOi9mb286L2JhciA0CithbmNlc3RvciAvZm9vL2JhciAvZm9vOi86L2JhciA0CithbmNlc3RvciAvZm9vL2JhciAvOi9iYXI6L2ZvIDAKK2FuY2VzdG9yIC9mb28vYmFyIC86L2JhciAwCithbmNlc3RvciAvZm9vL2JhciAvZm9vIDQKK2FuY2VzdG9yIC9mb28vYmFyIC9mb286L2JhciA0CithbmNlc3RvciAvZm9vL2JhciAvYmFyIC0xCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmlwX3BhdGhfc3VmZml4JyAnCisJdGVzdCBjOi9tc3lzZ2l0ID0gJCh0ZXN0LXBhdGgtdXRpbHMgc3RyaXBfcGF0aF9zdWZmaXggXAorCQljOi9tc3lzZ2l0L2xpYmV4ZWMvL2dpdC1jb3JlIGxpYmV4ZWMvZ2l0LWNvcmUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fic29sdXRlIHBhdGggcmVqZWN0cyB0aGUgZW1wdHkgc3RyaW5nJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1wYXRoLXV0aWxzIGFic29sdXRlX3BhdGggIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhbCBwYXRoIHJlamVjdHMgdGhlIGVtcHR5IHN0cmluZycgJworCXRlc3RfbXVzdF9mYWlsIHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWCAncmVhbCBwYXRoIHdvcmtzIG9uIGFic29sdXRlIHBhdGhzIDEnICcKKwlub3BhdGg9ImhvcGVmdWxseS1hYnNlbnQtcGF0aCIgJiYKKwl0ZXN0ICIvIiA9ICIkKHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIi8iKSIgJiYKKwl0ZXN0ICIvJG5vcGF0aCIgPSAiJCh0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICIvJG5vcGF0aCIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFsIHBhdGggd29ya3Mgb24gYWJzb2x1dGUgcGF0aHMgMicgJworCW5vcGF0aD0iaG9wZWZ1bGx5LWFic2VudC1wYXRoIiAmJgorCSMgRmluZCBhbiBleGlzdGluZyB0b3AtbGV2ZWwgZGlyZWN0b3J5IGZvciB0aGUgcmVtYWluaW5nIHRlc3RzOgorCWQ9JChwd2QgLVAgfCBzZWQgLWUgInN8XlwoW14vXSovW14vXSpcKS8uKnxcMXwiKSAmJgorCXRlc3QgIiRkIiA9ICIkKHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIiRkIikiICYmCisJdGVzdCAiJGQvJG5vcGF0aCIgPSAiJCh0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICIkZC8kbm9wYXRoIikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVggJ3JlYWwgcGF0aCByZW1vdmVzIGV4dHJhIGxlYWRpbmcgc2xhc2hlcycgJworCW5vcGF0aD0iaG9wZWZ1bGx5LWFic2VudC1wYXRoIiAmJgorCXRlc3QgIi8iID0gIiQodGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAiLy8vIikiICYmCisJdGVzdCAiLyRub3BhdGgiID0gIiQodGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAiLy8vJG5vcGF0aCIpIiAmJgorCSMgRmluZCBhbiBleGlzdGluZyB0b3AtbGV2ZWwgZGlyZWN0b3J5IGZvciB0aGUgcmVtYWluaW5nIHRlc3RzOgorCWQ9JChwd2QgLVAgfCBzZWQgLWUgInN8XlwoW14vXSovW14vXSpcKS8uKnxcMXwiKSAmJgorCXRlc3QgIiRkIiA9ICIkKHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIi8vJGQiKSIgJiYKKwl0ZXN0ICIkZC8kbm9wYXRoIiA9ICIkKHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIi8vJGQvJG5vcGF0aCIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFsIHBhdGggcmVtb3ZlcyBvdGhlciBleHRyYSBzbGFzaGVzJyAnCisJbm9wYXRoPSJob3BlZnVsbHktYWJzZW50LXBhdGgiICYmCisJIyBGaW5kIGFuIGV4aXN0aW5nIHRvcC1sZXZlbCBkaXJlY3RvcnkgZm9yIHRoZSByZW1haW5pbmcgdGVzdHM6CisJZD0kKHB3ZCAtUCB8IHNlZCAtZSAic3xeXChbXi9dKi9bXi9dKlwpLy4qfFwxfCIpICYmCisJdGVzdCAiJGQiID0gIiQodGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAiJGQvLy8iKSIgJiYKKwl0ZXN0ICIkZC8kbm9wYXRoIiA9ICIkKHRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIiRkLy8vJG5vcGF0aCIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdyZWFsIHBhdGggd29ya3Mgb24gc3ltbGlua3MnICcKKwlta2RpciBmaXJzdCAmJgorCWxuIC1zIC4uLy5naXQgZmlyc3QvLmdpdCAmJgorCW1rZGlyIHNlY29uZCAmJgorCWxuIC1zIC4uL2ZpcnN0IHNlY29uZC9vdGhlciAmJgorCW1rZGlyIHRoaXJkICYmCisJZGlyPSIkKGNkIC5naXQ7IHB3ZCAtUCkiICYmCisJZGlyMj10aGlyZC8uLi9zZWNvbmQvb3RoZXIvLmdpdCAmJgorCXRlc3QgIiRkaXIiID0gIiQodGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAkZGlyMikiICYmCisJZmlsZT0iJGRpciIvaW5kZXggJiYKKwl0ZXN0ICIkZmlsZSIgPSAiJCh0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICRkaXIyL2luZGV4KSIgJiYKKwliYXNlbmFtZT1ibHViICYmCisJdGVzdCAiJGRpci8kYmFzZW5hbWUiID0gIiQoY2QgLmdpdCAmJiB0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICIkYmFzZW5hbWUiKSIgJiYKKwlsbiAtcyAuLi9maXJzdC9maWxlIC5naXQvc3ltbCAmJgorCXN5bT0iJChjZCBmaXJzdDsgcHdkIC1QKSIvZmlsZSAmJgorCXRlc3QgIiRzeW0iID0gIiQodGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAiJGRpcjIvc3ltbCIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwcmVmaXhfcGF0aCB3b3JrcyB3aXRoIGFic29sdXRlIHBhdGhzIHRvIHdvcmsgdHJlZSBzeW1saW5rcycgJworCWxuIC1zIHRhcmdldCBzeW1saW5rICYmCisJdGVzdCAiJCh0ZXN0LXBhdGgtdXRpbHMgcHJlZml4X3BhdGggcHJlZml4ICIkKHB3ZCkvc3ltbGluayIpIiA9ICJzeW1saW5rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVmaXhfcGF0aCB3b3JrcyB3aXRoIG9ubHkgYWJzb2x1dGUgcGF0aCB0byB3b3JrIHRyZWUnICcKKwllY2hvICIiID5leHBlY3RlZCAmJgorCXRlc3QtcGF0aC11dGlscyBwcmVmaXhfcGF0aCBwcmVmaXggIiQocHdkKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVmaXhfcGF0aCByZWplY3RzIGFic29sdXRlIHBhdGggdG8gZGlyIHdpdGggc2FtZSBiZWdpbm5pbmcgYXMgd29yayB0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1wYXRoLXV0aWxzIHByZWZpeF9wYXRoIHByZWZpeCAiJChwd2QpYSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncHJlZml4X3BhdGggd29ya3Mgd2l0aCBhYnNvbHV0ZSBwYXRoIHRvIGEgc3ltbGluayB0byB3b3JrIHRyZWUgaGF2aW5nICBzYW1lIGJlZ2lubmluZyBhcyB3b3JrIHRyZWUnICcKKwlnaXQgaW5pdCByZXBvICYmCisJbG4gLXMgcmVwbyByZXBvbGluayAmJgorCXRlc3QgImEiID0gIiQoY2QgcmVwbyAmJiB0ZXN0LXBhdGgtdXRpbHMgcHJlZml4X3BhdGggcHJlZml4ICIkKHB3ZCkvLi4vcmVwb2xpbmsvYSIpIgorJworCityZWxhdGl2ZV9wYXRoIC9mb28vYS9iL2MvCS9mb28vYS9iLwljLworcmVsYXRpdmVfcGF0aCAvZm9vL2EvYi9jLwkvZm9vL2EvYgljLworcmVsYXRpdmVfcGF0aCAvZm9vL2EvL2IvL2MvCS8vL2Zvby9hL2IvLwljLwkJUE9TSVgKK3JlbGF0aXZlX3BhdGggL2Zvby9hL2IJCS9mb28vYS9iCS4vCityZWxhdGl2ZV9wYXRoIC9mb28vYS9iLwkJL2Zvby9hL2IJLi8KK3JlbGF0aXZlX3BhdGggL2Zvby9hCQkvZm9vL2EvYgkuLi8KK3JlbGF0aXZlX3BhdGggLwkJCS9mb28vYS9iLwkuLi8uLi8uLi8KK3JlbGF0aXZlX3BhdGggL2Zvby9hL2MJCS9mb28vYS9iLwkuLi9jCityZWxhdGl2ZV9wYXRoIC9mb28vYS9jCQkvZm9vL2EvYgkuLi9jCityZWxhdGl2ZV9wYXRoIC9mb28veC95CQkvZm9vL2EvYi8JLi4vLi4veC95CityZWxhdGl2ZV9wYXRoIC9mb28vYS9iCQkiPGVtcHR5PiIJL2Zvby9hL2IKK3JlbGF0aXZlX3BhdGggL2Zvby9hL2IgCQkiPG51bGw+IgkvZm9vL2EvYgorcmVsYXRpdmVfcGF0aCBmb28vYS9iL2MvCWZvby9hL2IvCWMvCityZWxhdGl2ZV9wYXRoIGZvby9hL2IvYy8JZm9vL2EvYgkJYy8KK3JlbGF0aXZlX3BhdGggZm9vL2EvYi8vYwlmb28vYS8vYgljCityZWxhdGl2ZV9wYXRoIGZvby9hL2IvCQlmb28vYS9iLwkuLworcmVsYXRpdmVfcGF0aCBmb28vYS9iLwkJZm9vL2EvYgkJLi8KK3JlbGF0aXZlX3BhdGggZm9vL2EJCWZvby9hL2IJCS4uLworcmVsYXRpdmVfcGF0aCBmb28veC95CQlmb28vYS9iCQkuLi8uLi94L3kKK3JlbGF0aXZlX3BhdGggZm9vL2EvYwkJZm9vL2EvYgkJLi4vYworcmVsYXRpdmVfcGF0aCBmb28vYS9iCQkvZm9vL3gveQlmb28vYS9iCityZWxhdGl2ZV9wYXRoIC9mb28vYS9iCQlmb28veC95CQkvZm9vL2EvYgorcmVsYXRpdmVfcGF0aCBkOi9hL2IJCUQ6L2EvYwkJLi4vYgkJTUlOR1cKK3JlbGF0aXZlX3BhdGggQzovYS9iCQlEOi9hL2MJCUM6L2EvYgkJTUlOR1cKK3JlbGF0aXZlX3BhdGggZm9vL2EvYgkJIjxlbXB0eT4iCWZvby9hL2IKK3JlbGF0aXZlX3BhdGggZm9vL2EvYiAJCSI8bnVsbD4iCWZvby9hL2IKK3JlbGF0aXZlX3BhdGggIjxlbXB0eT4iCQkvZm9vL2EvYgkuLworcmVsYXRpdmVfcGF0aCAiPGVtcHR5PiIJCSI8ZW1wdHk+IgkuLworcmVsYXRpdmVfcGF0aCAiPGVtcHR5PiIJCSI8bnVsbD4iCS4vCityZWxhdGl2ZV9wYXRoICI8bnVsbD4iCQkiPGVtcHR5PiIJLi8KK3JlbGF0aXZlX3BhdGggIjxudWxsPiIJCSI8bnVsbD4iCS4vCityZWxhdGl2ZV9wYXRoICI8bnVsbD4iCQkvZm9vL2EvYgkuLworCit0ZXN0X2dpdF9wYXRoIEE9QiAgICAgICAgICAgICAgICBpbmZvL2dyYWZ0cyAuZ2l0L2luZm8vZ3JhZnRzCit0ZXN0X2dpdF9wYXRoIEdJVF9HUkFGVF9GSUxFPWZvbyBpbmZvL2dyYWZ0cyBmb28KK3Rlc3RfZ2l0X3BhdGggR0lUX0dSQUZUX0ZJTEU9Zm9vIGluZm8vLy8vL2dyYWZ0cyBmb28KK3Rlc3RfZ2l0X3BhdGggR0lUX0lOREVYX0ZJTEU9Zm9vIGluZGV4IGZvbwordGVzdF9naXRfcGF0aCBHSVRfSU5ERVhfRklMRT1mb28gaW5kZXgvZm9vIC5naXQvaW5kZXgvZm9vCit0ZXN0X2dpdF9wYXRoIEdJVF9JTkRFWF9GSUxFPWZvbyBpbmRleDIgLmdpdC9pbmRleDIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZha2Ugb2JqZWN0cyBkaXJlY3RvcnkgZm9vJyAnbWtkaXIgZm9vJwordGVzdF9naXRfcGF0aCBHSVRfT0JKRUNUX0RJUkVDVE9SWT1mb28gb2JqZWN0cyBmb28KK3Rlc3RfZ2l0X3BhdGggR0lUX09CSkVDVF9ESVJFQ1RPUlk9Zm9vIG9iamVjdHMvZm9vIGZvby9mb28KK3Rlc3RfZ2l0X3BhdGggR0lUX09CSkVDVF9ESVJFQ1RPUlk9Zm9vIG9iamVjdHMyIC5naXQvb2JqZWN0czIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1vbiByZXBvc2l0b3J5JyAnZ2l0IC0tZ2l0LWRpcj1iYXIgaW5pdCcKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGluZGV4ICAgICAgICAgICAgICAgICAgICAuZ2l0L2luZGV4Cit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBIRUFEICAgICAgICAgICAgICAgICAgICAgLmdpdC9IRUFECit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL0hFQUQgICAgICAgICAgICAgICAgLmdpdC9sb2dzL0hFQUQKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcy9iaXNlY3QvZm9vICAgICAuZ2l0L2xvZ3MvcmVmcy9iaXNlY3QvZm9vCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMvYmlzZWMvZm9vICAgICAgYmFyL2xvZ3MvcmVmcy9iaXNlYy9mb28KK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGxvZ3MvcmVmcy9iaXNlYyAgICAgICAgICBiYXIvbG9ncy9yZWZzL2Jpc2VjCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMvYmlzZWN0Zm9vICAgICAgYmFyL2xvZ3MvcmVmcy9iaXNlY3Rmb28KK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIG9iamVjdHMgICAgICAgICAgICAgICAgICBiYXIvb2JqZWN0cwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgb2JqZWN0cy9iYXIgICAgICAgICAgICAgIGJhci9vYmplY3RzL2JhcgordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgaW5mby9leGNsdWRlICAgICAgICAgICAgIGJhci9pbmZvL2V4Y2x1ZGUKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGluZm8vZ3JhZnRzICAgICAgICAgICAgICBiYXIvaW5mby9ncmFmdHMKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGluZm8vc3BhcnNlLWNoZWNrb3V0ICAgICAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0Cit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBpbmZvLy9zcGFyc2UtY2hlY2tvdXQgICAgLmdpdC9pbmZvLy9zcGFyc2UtY2hlY2tvdXQKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIHJlbW90ZXMvYmFyICAgICAgICAgICAgICBiYXIvcmVtb3Rlcy9iYXIKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIGJyYW5jaGVzL2JhciAgICAgICAgICAgICBiYXIvYnJhbmNoZXMvYmFyCit0ZXN0X2dpdF9wYXRoIEdJVF9DT01NT05fRElSPWJhciBsb2dzL3JlZnMvaGVhZHMvbWFzdGVyICAgYmFyL2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIHJlZnMvaGVhZHMvbWFzdGVyICAgICAgICBiYXIvcmVmcy9oZWFkcy9tYXN0ZXIKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIHJlZnMvYmlzZWN0L2ZvbyAgICAgICAgICAuZ2l0L3JlZnMvYmlzZWN0L2ZvbwordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgaG9va3MvbWUgICAgICAgICAgICAgICAgIGJhci9ob29rcy9tZQordGVzdF9naXRfcGF0aCBHSVRfQ09NTU9OX0RJUj1iYXIgY29uZmlnICAgICAgICAgICAgICAgICAgIGJhci9jb25maWcKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIHBhY2tlZC1yZWZzICAgICAgICAgICAgICBiYXIvcGFja2VkLXJlZnMKK3Rlc3RfZ2l0X3BhdGggR0lUX0NPTU1PTl9ESVI9YmFyIHNoYWxsb3cgICAgICAgICAgICAgICAgICBiYXIvc2hhbGxvdworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNjEtcnVuLWNvbW1hbmQuc2ggYi90L3QwMDYxLXJ1bi1jb21tYW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlhY2Y2MjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDYxLXJ1bi1jb21tYW5kLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSWxhcmkgTGl1c3ZhYXJhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcnVuIGNvbW1hbmQnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmhlbGxvLXNjcmlwdCA8PC1FT0YKKwkjISRTSEVMTF9QQVRICisJY2F0IGhlbGxvLXNjcmlwdAorRU9GCis+ZW1wdHkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnRfY29tbWFuZCByZXBvcnRzIEVOT0VOVCcgJworCXRlc3QtcnVuLWNvbW1hbmQgc3RhcnQtY29tbWFuZC1FTk9FTlQgLi9kb2VzLW5vdC1leGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5fY29tbWFuZCBjYW4gcnVuIGEgY29tbWFuZCcgJworCWNhdCBoZWxsby1zY3JpcHQgPmhlbGxvLnNoICYmCisJY2htb2QgK3ggaGVsbG8uc2ggJiYKKwl0ZXN0LXJ1bi1jb21tYW5kIHJ1bi1jb21tYW5kIC4vaGVsbG8uc2ggPmFjdHVhbCAyPmVyciAmJgorCisJdGVzdF9jbXAgaGVsbG8tc2NyaXB0IGFjdHVhbCAmJgorCXRlc3RfY21wIGVtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAncnVuX2NvbW1hbmQgcmVwb3J0cyBFQUNDRVMnICcKKwljYXQgaGVsbG8tc2NyaXB0ID5oZWxsby5zaCAmJgorCWNobW9kIC14IGhlbGxvLnNoICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1ydW4tY29tbWFuZCBydW4tY29tbWFuZCAuL2hlbGxvLnNoIDI+ZXJyICYmCisKKwlncmVwICJmYXRhbDogY2Fubm90IGV4ZWMuKmhlbGxvLnNoIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICd1bnJlYWRhYmxlIGRpcmVjdG9yeSBpbiBQQVRIJyAnCisJbWtkaXIgbG9jYWwtY29tbWFuZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgdStyd3ggbG9jYWwtY29tbWFuZCAmJiBybSAtZnIgbG9jYWwtY29tbWFuZCIgJiYKKwlnaXQgY29uZmlnIGFsaWFzLm5pdGZvbCAiIWVjaG8gZnJvdHoiICYmCisJY2htb2QgYS1yeCBsb2NhbC1jb21tYW5kICYmCisJKAorCQlQQVRIPS4vbG9jYWwtY29tbWFuZDokUEFUSCAmJgorCQlnaXQgbml0Zm9sID5hY3R1YWwKKwkpICYmCisJZWNobyBmcm90eiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNjItcmV2aXNpb24td2Fsa2luZy5zaCBiL3QvdDAwNjItcmV2aXNpb24td2Fsa2luZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMTNjNzI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA2Mi1yZXZpc2lvbi13YWxraW5nLnNoCkBAIC0wLDAgKzEsMzMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgSGVpa28gVm9pZ3QKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZXZpc2lvbiB3YWxraW5nIGFwaScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+cnVuX3R3aWNlX2V4cGVjdGVkIDw8LUVPRgorMXN0CisgPiBhZGQgYgorID4gYWRkIGEKKzJuZAorID4gYWRkIGIKKyA+IGFkZCBhCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGEgPiBhICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGEiICYmCisJZWNobyBiID4gYiAmJgorCWdpdCBhZGQgYiAmJgorCWdpdCBjb21taXQgLW0gImFkZCBiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZpc2lvbiB3YWxraW5nIGNhbiBiZSBkb25lIHR3aWNlJyAnCisJdGVzdC1yZXZpc2lvbi13YWxraW5nIHJ1bi10d2ljZSA+cnVuX3R3aWNlX2FjdHVhbCAmJgorCXRlc3RfY21wIHJ1bl90d2ljZV9leHBlY3RlZCBydW5fdHdpY2VfYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDA2My1zdHJpbmctbGlzdC5zaCBiL3QvdDAwNjMtc3RyaW5nLWxpc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGJmYzA1ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwNjMtc3RyaW5nLWxpc3Quc2gKQEAgLTAsMCArMSw5MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBNaWNoYWVsIEhhZ2dlcnR5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgc3RyaW5nIGxpc3QgZnVuY3Rpb25hbGl0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3Rfc3BsaXQgKCkgeworCWNhdCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzcGxpdCAkMSBhdCAkMiwgbWF4ICQzIiAiCisJCXRlc3Qtc3RyaW5nLWxpc3Qgc3BsaXQgJyQxJyAnJDInICckMycgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkJdGVzdC1zdHJpbmctbGlzdCBzcGxpdF9pbl9wbGFjZSAnJDEnICckMicgJyQzJyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSIKK30KKwordGVzdF9zcGxpdCAiZm9vOmJhcjpiYXoiICI6IiAiLTEiIDw8RU9GCiszCitbMF06ICJmb28iCitbMV06ICJiYXIiCitbMl06ICJiYXoiCitFT0YKKwordGVzdF9zcGxpdCAiZm9vOmJhcjpiYXoiICI6IiAiMCIgPDxFT0YKKzEKK1swXTogImZvbzpiYXI6YmF6IgorRU9GCisKK3Rlc3Rfc3BsaXQgImZvbzpiYXI6YmF6IiAiOiIgIjEiIDw8RU9GCisyCitbMF06ICJmb28iCitbMV06ICJiYXI6YmF6IgorRU9GCisKK3Rlc3Rfc3BsaXQgImZvbzpiYXI6YmF6IiAiOiIgIjIiIDw8RU9GCiszCitbMF06ICJmb28iCitbMV06ICJiYXIiCitbMl06ICJiYXoiCitFT0YKKwordGVzdF9zcGxpdCAiZm9vOmJhcjoiICI6IiAiLTEiIDw8RU9GCiszCitbMF06ICJmb28iCitbMV06ICJiYXIiCitbMl06ICIiCitFT0YKKwordGVzdF9zcGxpdCAiIiAiOiIgIi0xIiA8PEVPRgorMQorWzBdOiAiIgorRU9GCisKK3Rlc3Rfc3BsaXQgIjoiICI6IiAiLTEiIDw8RU9GCisyCitbMF06ICIiCitbMV06ICIiCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidGVzdCBmaWx0ZXJfc3RyaW5nX2xpc3QiICcKKwl0ZXN0ICJ4LSIgPSAieCQodGVzdC1zdHJpbmctbGlzdCBmaWx0ZXIgLSB5KSIgJiYKKwl0ZXN0ICJ4LSIgPSAieCQodGVzdC1zdHJpbmctbGlzdCBmaWx0ZXIgbm8geSkiICYmCisJdGVzdCB5ZXMgPSAiJCh0ZXN0LXN0cmluZy1saXN0IGZpbHRlciB5ZXMgeSkiICYmCisJdGVzdCB5ZXMgPSAiJCh0ZXN0LXN0cmluZy1saXN0IGZpbHRlciBubzp5ZXMgeSkiICYmCisJdGVzdCB5ZXMgPSAiJCh0ZXN0LXN0cmluZy1saXN0IGZpbHRlciB5ZXM6bm8geSkiICYmCisJdGVzdCB5MTp5MiA9ICIkKHRlc3Qtc3RyaW5nLWxpc3QgZmlsdGVyIHkxOnkyIHkpIiAmJgorCXRlc3QgeTI6eTEgPSAiJCh0ZXN0LXN0cmluZy1saXN0IGZpbHRlciB5Mjp5MSB5KSIgJiYKKwl0ZXN0ICJ4LSIgPSAieCQodGVzdC1zdHJpbmctbGlzdCBmaWx0ZXIgeDE6eDIgeSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInRlc3QgcmVtb3ZlX2R1cGxpY2F0ZXMiICcKKwl0ZXN0ICJ4LSIgPSAieCQodGVzdC1zdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyAtKSIgJiYKKwl0ZXN0ICJ4IiA9ICJ4JCh0ZXN0LXN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzICIiKSIgJiYKKwl0ZXN0IGEgPSAiJCh0ZXN0LXN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGEpIiAmJgorCXRlc3QgYSA9ICIkKHRlc3Qtc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTphKSIgJiYKKwl0ZXN0IGEgPSAiJCh0ZXN0LXN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YTphOmE6YSkiICYmCisJdGVzdCBhOmIgPSAiJCh0ZXN0LXN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YikiICYmCisJdGVzdCBhOmIgPSAiJCh0ZXN0LXN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YTpiKSIgJiYKKwl0ZXN0IGE6YiA9ICIkKHRlc3Qtc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTpiOmIpIiAmJgorCXRlc3QgYTpiOmMgPSAiJCh0ZXN0LXN0cmluZy1saXN0IHJlbW92ZV9kdXBsaWNhdGVzIGE6YjpjKSIgJiYKKwl0ZXN0IGE6YjpjID0gIiQodGVzdC1zdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmE6YjpjKSIgJiYKKwl0ZXN0IGE6YjpjID0gIiQodGVzdC1zdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmI6YjpjKSIgJiYKKwl0ZXN0IGE6YjpjID0gIiQodGVzdC1zdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmI6YzpjKSIgJiYKKwl0ZXN0IGE6YjpjID0gIiQodGVzdC1zdHJpbmctbGlzdCByZW1vdmVfZHVwbGljYXRlcyBhOmE6YjpiOmM6YykiICYmCisJdGVzdCBhOmI6YyA9ICIkKHRlc3Qtc3RyaW5nLWxpc3QgcmVtb3ZlX2R1cGxpY2F0ZXMgYTphOmE6YjpiOmI6YzpjOmMpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwNjQtc2hhMS1hcnJheS5zaCBiL3QvdDAwNjQtc2hhMS1hcnJheS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MGIzMWZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDA2NC1zaGExLWFycmF5LnNoCkBAIC0wLDAgKzEsOTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyB0ZXN0cyBmb3IgdGhlIFNIQTEgYXJyYXkgaW1wbGVtZW50YXRpb24nCisuIC4vdGVzdC1saWIuc2gKKworZWNobzIwICgpIHsKKwlwcmVmaXg9IiR7MTorJDEgfSIKKwlzaGlmdAorCXdoaWxlIHRlc3QgJCMgLWd0IDAKKwlkbworCQllY2hvICIkcHJlZml4JDEkMSQxJDEkMSQxJDEkMSQxJDEkMSQxJDEkMSQxJDEkMSQxJDEkMSIKKwkJc2hpZnQKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29yZGVyZWQgZW51bWVyYXRpb24nICcKKwllY2hvMjAgIiIgNDQgNTUgODggYWEgPmV4cGVjdCAmJgorCXsKKwkJZWNobzIwIGFwcGVuZCA4OCA0NCBhYSA1NSAmJgorCQllY2hvIGZvcl9lYWNoX3VuaXF1ZQorCX0gfCB0ZXN0LXNoYTEtYXJyYXkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3JkZXJlZCBlbnVtZXJhdGlvbiB3aXRoIGR1cGxpY2F0ZSBzdXBwcmVzc2lvbicgJworCWVjaG8yMCAiIiA0NCA1NSA4OCBhYSA+ZXhwZWN0ICYmCisJeworCQllY2hvMjAgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG8yMCBhcHBlbmQgODggNDQgYWEgNTUgJiYKKwkJZWNobyBmb3JfZWFjaF91bmlxdWUKKwl9IHwgdGVzdC1zaGExLWFycmF5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb2t1cCcgJworCXsKKwkJZWNobzIwIGFwcGVuZCA4OCA0NCBhYSA1NSAmJgorCQllY2hvMjAgbG9va3VwIDU1CisJfSB8IHRlc3Qtc2hhMS1hcnJheSA+YWN0dWFsICYmCisJbj0kKGNhdCBhY3R1YWwpICYmCisJdGVzdCAiJG4iIC1lcSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb2t1cCBub24tZXhpc3RpbmcgZW50cnknICcKKwl7CisJCWVjaG8yMCBhcHBlbmQgODggNDQgYWEgNTUgJiYKKwkJZWNobzIwIGxvb2t1cCAzMworCX0gfCB0ZXN0LXNoYTEtYXJyYXkgPmFjdHVhbCAmJgorCW49JChjYXQgYWN0dWFsKSAmJgorCXRlc3QgIiRuIiAtbHQgMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29rdXAgd2l0aCBkdXBsaWNhdGVzJyAnCisJeworCQllY2hvMjAgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG8yMCBhcHBlbmQgODggNDQgYWEgNTUgJiYKKwkJZWNobzIwIGxvb2t1cCA1NQorCX0gfCB0ZXN0LXNoYTEtYXJyYXkgPmFjdHVhbCAmJgorCW49JChjYXQgYWN0dWFsKSAmJgorCXRlc3QgIiRuIiAtZ2UgMiAmJgorCXRlc3QgIiRuIiAtbGUgMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29rdXAgbm9uLWV4aXN0aW5nIGVudHJ5IHdpdGggZHVwbGljYXRlcycgJworCXsKKwkJZWNobzIwIGFwcGVuZCA4OCA0NCBhYSA1NSAmJgorCQllY2hvMjAgYXBwZW5kIDg4IDQ0IGFhIDU1ICYmCisJCWVjaG8yMCBsb29rdXAgNjYKKwl9IHwgdGVzdC1zaGExLWFycmF5ID5hY3R1YWwgJiYKKwluPSQoY2F0IGFjdHVhbCkgJiYKKwl0ZXN0ICIkbiIgLWx0IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va3VwIHdpdGggYWxtb3N0IGR1cGxpY2F0ZSB2YWx1ZXMnICcKKwl7CisJCWVjaG8gImFwcGVuZCA1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1IiAmJgorCQllY2hvICJhcHBlbmQgNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1ZiIgJiYKKwkJZWNobzIwIGxvb2t1cCA1NQorCX0gfCB0ZXN0LXNoYTEtYXJyYXkgPmFjdHVhbCAmJgorCW49JChjYXQgYWN0dWFsKSAmJgorCXRlc3QgIiRuIiAtZXEgMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29rdXAgd2l0aCBzaW5nbGUgZHVwbGljYXRlIHZhbHVlJyAnCisJeworCQllY2hvMjAgYXBwZW5kIDU1IDU1ICYmCisJCWVjaG8yMCBsb29rdXAgNTUKKwl9IHwgdGVzdC1zaGExLWFycmF5ID5hY3R1YWwgJiYKKwluPSQoY2F0IGFjdHVhbCkgJiYKKwl0ZXN0ICIkbiIgLWdlIDAgJiYKKwl0ZXN0ICIkbiIgLWxlIDEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDcwLWZ1bmRhbWVudGFsLnNoIGIvdC90MDA3MC1mdW5kYW1lbnRhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZWQ2OWE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDA3MC1mdW5kYW1lbnRhbC5zaApAQCAtMCwwICsxLDM3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgdGhhdCB0aGUgbW9zdCBiYXNpYyBmdW5jdGlvbnMgd29yaworCisKK1ZlcmlmeSB3cmFwcGVycyBhbmQgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFyYWN0ZXIgY2xhc3NlcyAoaXNzcGFjZSwgaXNhbHBoYSBldGMuKScgJworCXRlc3QtY3R5cGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWt0ZW1wIHRvIG5vbmV4aXN0ZW50IGRpcmVjdG9yeSBwcmludHMgZmlsZW5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LW1rdGVtcCBkb2Vzbm90ZXhpc3QvdGVzdFhYWFhYWCAyPmVyciAmJgorCWdyZXAgImRvZXNub3RleGlzdC90ZXN0IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdta3RlbXAgdG8gdW53cml0YWJsZSBkaXJlY3RvcnkgcHJpbnRzIGZpbGVuYW1lJyAnCisJbWtkaXIgY2Fubm90d3JpdGUgJiYKKwljaG1vZCAtdyBjYW5ub3R3cml0ZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2htb2QgK3cgY2Fubm90d3JpdGUiICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1ta3RlbXAgY2Fubm90d3JpdGUvdGVzdFhYWFhYWCAyPmVyciAmJgorCWdyZXAgImNhbm5vdHdyaXRlL3Rlc3QiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRfbWtzdGVtcHNfbW9kZSBkb2VzIG5vdCBmYWlsIGlmIGZkIDAgaXMgbm90IG9wZW4nICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gbWVzc2FnZSA8Ji0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZm9yIGEgYnVnIGluIHRoZSByZWdleCByb3V0aW5lcycgJworCSMgaWYgdGhpcyB0ZXN0IGZhaWxzLCByZS1idWlsZCBnaXQgd2l0aCBOT19SRUdFWD0xCisJdGVzdC1yZWdleAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAwODEtbGluZS1idWZmZXIuc2ggYi90L3QwMDgxLWxpbmUtYnVmZmVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlOTJlNmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMDgxLWxpbmUtYnVmZmVyLnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJUZXN0IHRoZSBzdm4gaW1wb3J0ZXIncyBpbnB1dCBoYW5kbGluZyByb3V0aW5lcy4KKworVGhlc2UgdGVzdHMgcHJvdmlkZSBzb21lIHNpbXBsZSBjaGVja3MgdGhhdCB0aGUgbGluZV9idWZmZXIgQVBJCitiZWhhdmVzIGFzIGFkdmVydGlzZWQuCisKK1doaWxlIGF0IGl0LCBjaGVjayB0aGF0IGlucHV0IG9mIG5ld2xpbmVzIGFuZCBudWxsIGJ5dGVzIGFyZSBoYW5kbGVkCitjb3JyZWN0bHkuCisiCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGVsbG8gd29ybGQnICcKKwllY2hvICI+SEVMTE8iID5leHBlY3QgJiYKKwl0ZXN0LWxpbmUtYnVmZmVyIDw8LVxFT0YgPmFjdHVhbCAmJgorCWJpbmFyeSA2CisJSEVMTE8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzAtbGVuZ3RoIHJlYWQsIHNlbmQgYWxvbmcgZ3JlZXRpbmcnICcKKwllY2hvICI+SEVMTE8iID5leHBlY3QgJiYKKwl0ZXN0LWxpbmUtYnVmZmVyIDw8LVxFT0YgPmFjdHVhbCAmJgorCWJpbmFyeSAwCisJY29weSA2CisJSEVMTE8KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdyZWFkIGZyb20gZmlsZSBkZXNjcmlwdG9yJyAnCisJcm0gLWYgaW5wdXQgJiYKKwllY2hvIGhlbGxvID5leHBlY3QgJiYKKwllY2hvIGhlbGxvID5pbnB1dCAmJgorCWVjaG8gY29weSA2IHwKKwl0ZXN0LWxpbmUtYnVmZmVyICImNCIgNDxpbnB1dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwLCBjb3B5IG51bGwgYnl0ZScgJworCWVjaG8gUSB8IHFfdG9fbnVsID5leHBlY3QgJiYKKwlxX3RvX251bCA8PC1cRU9GIHwgdGVzdC1saW5lLWJ1ZmZlciA+YWN0dWFsICYmCisJc2tpcCAyCisJUQorCWNvcHkgMgorCVEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgbnVsbCBieXRlJyAnCisJZWNobyAiPlFoZWxsb1EiIHwgcV90b19udWwgPmV4cGVjdCAmJgorCXFfdG9fbnVsIDw8LVxFT0YgfCB0ZXN0LWxpbmUtYnVmZmVyID5hY3R1YWwgJiYKKwliaW5hcnkgOAorCVFoZWxsb1EKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgcmVhZHMgYXJlIHRydW5jYXRlZCcgJworCWVjaG8gIj5mb28iID5leHBlY3QgJiYKKwl0ZXN0LWxpbmUtYnVmZmVyIDw8LVxFT0YgPmFjdHVhbCAmJgorCWJpbmFyeSA1CisJZm9vCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb25nIGNvcGllcyBhcmUgdHJ1bmNhdGVkJyAnCisJcHJpbnRmICIlc1xuIiAiPiIgZm9vID5leHBlY3QgJiYKKwl0ZXN0LWxpbmUtYnVmZmVyIDw8LVxFT0YgPmFjdHVhbCAmJgorCWJpbmFyeSAxCisKKwljb3B5IDUKKwlmb28KKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgYmluYXJ5IHJlYWRzIGFyZSB0cnVuY2F0ZWQnICcKKwllY2hvICI+Zm9vIiA+ZXhwZWN0ICYmCisJdGVzdC1saW5lLWJ1ZmZlciA8PC1cRU9GID5hY3R1YWwgJiYKKwliaW5hcnkgNQorCWZvbworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMDkwLWNhY2hlLXRyZWUuc2ggYi90L3QwMDkwLWNhY2hlLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWRmZDRmMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAwOTAtY2FjaGUtdHJlZS5zaApAQCAtMCwwICsxLDI1NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249IlRlc3Qgd2hldGhlciBjYWNoZS10cmVlIGlzIHByb3Blcmx5IHVwZGF0ZWQKKworVGVzdHMgd2hldGhlciB2YXJpb3VzIGNvbW1hbmRzIHByb3Blcmx5IHVwZGF0ZSBhbmQvb3IgcmV3cml0ZSB0aGUKK2NhY2hlLXRyZWUgZXh0ZW5zaW9uLgorIgorIC4gLi90ZXN0LWxpYi5zaAorCitjbXBfY2FjaGVfdHJlZSAoKSB7CisJdGVzdC1kdW1wLWNhY2hlLXRyZWUgfCBzZWQgLWUgJy8jKHJlZikvZCcgPmFjdHVhbCAmJgorCXNlZCAicy8kX3g0MC9TSEEvIiA8YWN0dWFsID5maWx0ZXJlZCAmJgorCXRlc3RfY21wICIkMSIgZmlsdGVyZWQKK30KKworIyBXZSBkb24ndCBib3RoZXIgd2l0aCBhY3R1YWxseSBjaGVja2luZyB0aGUgU0hBMToKKyMgdGVzdC1kdW1wLWNhY2hlLXRyZWUgYWxyZWFkeSB2ZXJpZmllcyB0aGF0IGFsbCBleGlzdGluZyBkYXRhIGlzCisjIGNvcnJlY3QuCitnZW5lcmF0ZV9leHBlY3RlZF9jYWNoZV90cmVlX3JlYyAoKSB7CisJZGlyPSIkMSR7MTorL30iICYmCisJcGFyZW50PSIkMiIgJiYKKwkjIGxzLWZpbGVzIG1pZ2h0IGhhdmUgZm9vL2JhciwgZm9vL2Jhci9iYXosIGFuZCBmb28vYmFyL3F1dXgKKwkjIFdlIHdhbnQgdG8gY291bnQgb25seSBmb28gYmVjYXVzZSBpdCdzIHRoZSBvbmx5IGRpcmVjdCBjaGlsZAorCXN1YnRyZWVzPSQoZ2l0IGxzLWZpbGVzfGdyZXAgL3xjdXQgLWQgLyAtZiAxfHVuaXEpICYmCisJc3VidHJlZV9jb3VudD0kKGVjaG8gIiRzdWJ0cmVlcyJ8YXdrIC12IGM9MCAnJDEgIT0gIiIgeysrY30gRU5EIHtwcmludCBjfScpICYmCisJZW50cmllcz0kKGdpdCBscy1maWxlc3x3YyAtbCkgJiYKKwlwcmludGYgIlNIQSAkZGlyICglZCBlbnRyaWVzLCAlZCBzdWJ0cmVlcylcbiIgIiRlbnRyaWVzIiAiJHN1YnRyZWVfY291bnQiICYmCisJZm9yIHN1YnRyZWUgaW4gJHN1YnRyZWVzCisJZG8KKwkJY2QgIiRzdWJ0cmVlIgorCQlnZW5lcmF0ZV9leHBlY3RlZF9jYWNoZV90cmVlX3JlYyAiJGRpciRzdWJ0cmVlIiAiJGRpciIgfHwgcmV0dXJuIDEKKwkJY2QgLi4KKwlkb25lICYmCisJZGlyPSRwYXJlbnQKK30KKworZ2VuZXJhdGVfZXhwZWN0ZWRfY2FjaGVfdHJlZSAoKSB7CisJKAorCQlnZW5lcmF0ZV9leHBlY3RlZF9jYWNoZV90cmVlX3JlYworCSkKK30KKwordGVzdF9jYWNoZV90cmVlICgpIHsKKwlnZW5lcmF0ZV9leHBlY3RlZF9jYWNoZV90cmVlID5leHBlY3QgJiYKKwljbXBfY2FjaGVfdHJlZSBleHBlY3QKK30KKwordGVzdF9pbnZhbGlkX2NhY2hlX3RyZWUgKCkgeworCXByaW50ZiAiaW52YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlcyAoKVxuIiAiIiAiJEAiID5leHBlY3QgJiYKKwl0ZXN0LWR1bXAtY2FjaGUtdHJlZSB8CisJc2VkIC1uIC1lICJzL1swLTldKiBzdWJ0cmVlcy8vIiAtZSAnLyMocmVmKS9kJyAtZSAnL15pbnZhbGlkIC9wJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X25vX2NhY2hlX3RyZWUgKCkgeworCTogPmV4cGVjdCAmJgorCWNtcF9jYWNoZV90cmVlIGV4cGVjdAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsIGNvbW1pdCBoYXMgY2FjaGUtdHJlZScgJworCXRlc3RfY29tbWl0IGZvbyAmJgorCXRlc3RfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgSEVBRCBlc3RhYmxpc2hlcyBjYWNoZS10cmVlJyAnCisJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJdGVzdF9jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1hZGQgaW52YWxpZGF0ZXMgY2FjaGUtdHJlZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZDsgZ2l0IHJlYWQtdHJlZSBIRUFEIiAmJgorCWVjaG8gIkkgY2hhbmdlZCB0aGlzIGZpbGUiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfaW52YWxpZF9jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1hZGQgaW4gc3ViZGlyIGludmFsaWRhdGVzIGNhY2hlLXRyZWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQ7IGdpdCByZWFkLXRyZWUgSEVBRCIgJiYKKwlta2RpciBkaXJ4ICYmCisJZWNobyAiSSBjaGFuZ2VkIHRoaXMgZmlsZSIgPmRpcngvZm9vICYmCisJZ2l0IGFkZCBkaXJ4L2ZvbyAmJgorCXRlc3RfaW52YWxpZF9jYWNoZV90cmVlCisnCisKK2NhdCA+YmVmb3JlIDw8XEVPRgorU0hBICAoMyBlbnRyaWVzLCAyIHN1YnRyZWVzKQorU0hBIGRpcjEvICgxIGVudHJpZXMsIDAgc3VidHJlZXMpCitTSEEgZGlyMi8gKDEgZW50cmllcywgMCBzdWJ0cmVlcykKK0VPRgorCitjYXQgPmV4cGVjdCA8PFxFT0YKK2ludmFsaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyIHN1YnRyZWVzKQoraW52YWxpZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXIxLyAoMCBzdWJ0cmVlcykKK1NIQSBkaXIyLyAoMSBlbnRyaWVzLCAwIHN1YnRyZWVzKQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1hZGQgaW4gc3ViZGlyIGRvZXMgbm90IGludmFsaWRhdGUgc2libGluZyBjYWNoZS10cmVlJyAnCisJZ2l0IHRhZyBuby1jaGlsZHJlbiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBuby1jaGlsZHJlbjsgZ2l0IHJlYWQtdHJlZSBIRUFEIiAmJgorCW1rZGlyIGRpcjEgZGlyMiAmJgorCXRlc3RfY29tbWl0IGRpcjEvYSAmJgorCXRlc3RfY29tbWl0IGRpcjIvYiAmJgorCWVjaG8gIkkgY2hhbmdlZCB0aGlzIGZpbGUiID5kaXIxL2EgJiYKKwljbXBfY2FjaGVfdHJlZSBiZWZvcmUgJiYKKwllY2hvICJJIGNoYW5nZWQgdGhpcyBmaWxlIiA+ZGlyMS9hICYmCisJZ2l0IGFkZCBkaXIxL2EgJiYKKwljbXBfY2FjaGVfdHJlZSBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IGludmFsaWRhdGVzIGNhY2hlLXRyZWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQ7IGdpdCByZWFkLXRyZWUgSEVBRCIgJiYKKwllY2hvICJJIGNoYW5nZWQgdGhpcyBmaWxlIiA+Zm9vICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmb28gJiYKKwl0ZXN0X2ludmFsaWRfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0ZS10cmVlIGVzdGFibGlzaGVzIGNhY2hlLXRyZWUnICcKKwl0ZXN0LXNjcmFwLWNhY2hlLXRyZWUgJiYKKwlnaXQgd3JpdGUtdHJlZSAmJgorCXRlc3RfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0LXNjcmFwLWNhY2hlLXRyZWUgd29ya3MnICcKKwlnaXQgcmVhZC10cmVlIEhFQUQgJiYKKwl0ZXN0LXNjcmFwLWNhY2hlLXRyZWUgJiYKKwl0ZXN0X25vX2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2Vjb25kIGNvbW1pdCBoYXMgY2FjaGUtdHJlZScgJworCXRlc3RfY29tbWl0IGJhciAmJgorCXRlc3RfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NvbW1pdCAtLWludGVyYWN0aXZlIGdpdmVzIGNhY2hlLXRyZWUgb24gcGFydGlhbCBjb21taXQnICcKKwljYXQgPDwtXEVPVCA+Zm9vLmMgJiYKKwlpbnQgZm9vKCkKKwl7CisJCXJldHVybiA0MjsKKwl9CisJaW50IGJhcigpCisJeworCQlyZXR1cm4gNDI7CisJfQorCUVPVAorCWdpdCBhZGQgZm9vLmMgJiYKKwl0ZXN0X2ludmFsaWRfY2FjaGVfdHJlZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBhIGZpbGUiICYmCisJdGVzdF9jYWNoZV90cmVlICYmCisJY2F0IDw8LVxFT1QgPmZvby5jICYmCisJaW50IGZvbygpCisJeworCQlyZXR1cm4gNDM7CisJfQorCWludCBiYXIoKQorCXsKKwkJcmV0dXJuIDQ0OworCX0KKwlFT1QKKwkoZWNobyBwOyBlY2hvIDE7IGVjaG87IGVjaG8gczsgZWNobyBuOyBlY2hvIHk7IGVjaG8gcSkgfAorCWdpdCBjb21taXQgLS1pbnRlcmFjdGl2ZSAtbSBmb28gJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGluIGNoaWxkIGRpciBoYXMgY2FjaGUtdHJlZScgJworCW1rZGlyIGRpciAmJgorCT5kaXIvY2hpbGQudCAmJgorCWdpdCBhZGQgZGlyL2NoaWxkLnQgJiYKKwlnaXQgY29tbWl0IC1tIGRpci9jaGlsZC50ICYmCisJdGVzdF9jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0taGFyZCBnaXZlcyBjYWNoZS10cmVlJyAnCisJdGVzdC1zY3JhcC1jYWNoZS10cmVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgd2l0aG91dCBpbmRleCBnaXZlcyBjYWNoZS10cmVlJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZ2l2ZXMgY2FjaGUtdHJlZScgJworCWdpdCB0YWcgY3VycmVudCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCXRlc3RfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiBnaXZlcyBjYWNoZS10cmVlJyAnCisJZ2l0IGNoZWNrb3V0IGN1cnJlbnQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcHJldiBIRUFEXiAmJgorCXRlc3RfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtQiBnaXZlcyBjYWNoZS10cmVlJyAnCisJZ2l0IGNoZWNrb3V0IGN1cnJlbnQgJiYKKwlnaXQgY2hlY2tvdXQgLUIgcHJldiBIRUFEXiAmJgorCXRlc3RfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtLWZmLW9ubHkgbWFpbnRhaW5zIGNhY2hlLXRyZWUnICcKKwlnaXQgY2hlY2tvdXQgY3VycmVudCAmJgorCWdpdCBjaGVja291dCAtYiBjaGFuZ2VzICYmCisJdGVzdF9jb21taXQgbGxhbWFzICYmCisJdGVzdF9jb21taXQgcGFjaHlkZXJtICYmCisJdGVzdF9jYWNoZV90cmVlICYmCisJZ2l0IGNoZWNrb3V0IGN1cnJlbnQgJiYKKwl0ZXN0X2NhY2hlX3RyZWUgJiYKKwlnaXQgbWVyZ2UgLS1mZi1vbmx5IGNoYW5nZXMgJiYKKwl0ZXN0X2NhY2hlX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgbWFpbnRhaW5zIGNhY2hlLXRyZWUnICcKKwlnaXQgY2hlY2tvdXQgY3VycmVudCAmJgorCWdpdCBjaGVja291dCAtYiBjaGFuZ2VzMiAmJgorCXRlc3RfY29tbWl0IGFscGFjYXMgJiYKKwl0ZXN0X2NhY2hlX3RyZWUgJiYKKwlnaXQgY2hlY2tvdXQgY3VycmVudCAmJgorCXRlc3RfY29tbWl0IHN0cnV0aGlvICYmCisJdGVzdF9jYWNoZV90cmVlICYmCisJZ2l0IG1lcmdlIGNoYW5nZXMyICYmCisJdGVzdF9jYWNoZV90cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgY29tbWl0IGdpdmVzIGNhY2hlLXRyZWUnICcKKwlnaXQgY2hlY2tvdXQgLWIgcGFydGlhbCBuby1jaGlsZHJlbiAmJgorCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCWVjaG8gInNvbWUgY2hhbmdlIiA+b25lLnQgJiYKKwlnaXQgYWRkIG9uZS50ICYmCisJZWNobyAic29tZSBvdGhlciBjaGFuZ2UiID50d28udCAmJgorCWdpdCBjb21taXQgdHdvLnQgLW0gcGFydGlhbCAmJgorCXRlc3RfY2FjaGVfdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBwaGFudG9tIGVycm9yIHdoZW4gc3dpdGNoaW5nIHRyZWVzJyAnCisJbWtkaXIgbmV3ZGlyICYmCisJPm5ld2Rpci9vbmUgJiYKKwlnaXQgYWRkIG5ld2Rpci9vbmUgJiYKKwlnaXQgY2hlY2tvdXQgMj5lcnJvcnMgJiYKKwkhIHRlc3QgLXMgZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaGluZyB0cmVlcyBkb2VzIG5vdCBpbnZhbGlkYXRlIHNoYXJlZCBpbmRleCcgJworCWdpdCB1cGRhdGUtaW5kZXggLS1zcGxpdC1pbmRleCAmJgorCT5zcGxpdCAmJgorCWdpdCBhZGQgc3BsaXQgJiYKKwl0ZXN0LWR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IGdyZXAgLXYgXm93biA+YmVmb3JlICYmCisJZ2l0IGNvbW1pdCAtbSAiYXMtaXMiICYmCisJdGVzdC1kdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBncmVwIC12IF5vd24gPmFmdGVyICYmCisJdGVzdF9jbXAgYmVmb3JlIGFmdGVyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDEwMC1wcmV2aW91cy5zaCBiL3QvdDAxMDAtcHJldmlvdXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTBhNjk0MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMDAtcHJldmlvdXMuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3ByZXZpb3VzIGJyYW5jaCBzeW50YXggQHstbn0nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLWQgQHstMX0nICcKKwl0ZXN0X2NvbW1pdCBBICYmCisJZ2l0IGNoZWNrb3V0IC1iIGp1bmsgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBicmFuY2ggLWQgQHstMX0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvanVuaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLWQgQHstMTJ9IHdoZW4gdGhlcmUgaXMgbm90IGVub3VnaCBzd2l0Y2hlcyB5ZXQnICcKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgJiYKKwlnaXQgY2hlY2tvdXQgLWIganVuazIgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLWQgQHstMTJ9ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBAey0xfScgJworCWdpdCBjaGVja291dCBBICYmCisJdGVzdF9jb21taXQgQiAmJgorCWdpdCBjaGVja291dCBBICYmCisJdGVzdF9jb21taXQgQyAmJgorCXRlc3RfY29tbWl0IEQgJiYKKwlnaXQgYnJhbmNoIC1mIG1hc3RlciBCICYmCisJZ2l0IGJyYW5jaCAtZiBvdGhlciAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgQHstMX0gJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwICJNZXJnZSBicmFuY2ggJ1wnJ290aGVyJ1wnJyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgQHstMX1+MScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEIgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIEB7LTF9fjEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmFjdHVhbCAmJgorCWdyZXAgIk1lcmdlIGJyYW5jaCAnXCcnb3RoZXInXCcnIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgQHstMTAwfSBiZWZvcmUgY2hlY2tpbmcgb3V0IHRoYXQgbWFueSBicmFuY2hlcyB5ZXQnICcKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1ub3cgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBCICYmCisJZ2l0IGJyYW5jaCAtZiBvdGhlciBDICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBAey0xMDB9CisnCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3QwMTAxLWF0LXN5bnRheC5zaCBiL3QvdDAxMDEtYXQtc3ludGF4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExOTk4YjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMTAxLWF0LXN5bnRheC5zaApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndmFyaW91cyBAe3doYXRldmVyfSBzeW50YXggdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28KKycKKworY2hlY2tfYXQoKSB7CisJZWNobyAiJDIiID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVzICIkMSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHswfSBzaG93cyBjdXJyZW50JyAnCisJY2hlY2tfYXQgQHswfSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHsxfSBzaG93cyBvbGQnICcKKwljaGVja19hdCBAezF9IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe25vd30gc2hvd3MgY3VycmVudCcgJworCWNoZWNrX2F0IEB7bm93fSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHsyMDAxLTA5LTE3fSAoYmVmb3JlIHRoZSBmaXJzdCBjb21taXQpIHNob3dzIG9sZCcgJworCWNoZWNrX2F0IEB7MjAwMS0wOS0xN30gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbGx5IGFwcHJveGlkYXRlcyB3b3JrJyAnCisJY2hlY2tfYXQgQHszLmhvdC5kb2dzLm9uLjIwMDEtMDktMTd9IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RpY2UgbWlzc3BlbGxlZCB1cHN0cmVhbScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgQHt1c3B0cmVhbX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxhaW4gYWJvdXQgdG90YWwgbm9uc2Vuc2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0xIC0tZm9ybWF0PSVzIEB7dXR0ZXIuYm9nb3NpdHl9CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDExMC11cmxtYXRjaC1ub3JtYWxpemF0aW9uLnNoIGIvdC90MDExMC11cmxtYXRjaC1ub3JtYWxpemF0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxMGQ1NzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMTEwLXVybG1hdGNoLW5vcm1hbGl6YXRpb24uc2gKQEAgLTAsMCArMSwxODAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1cmxtYXRjaCBVUkwgbm9ybWFsaXphdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRoZSBiYXNlIG5hbWUgb2YgdGhlIHRlc3QgdXJsIGZpbGVzCit0dT0iJFRFU1RfRElSRUNUT1JZL3QwMTEwL3VybCIKKworIyBOb3RlIHRoYXQgb25seSBmaWxlOiBVUkxzIHNob3VsZCBiZSBhbGxvd2VkIHdpdGhvdXQgYSBob3N0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBzY2hlbWUnICcKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJfIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWUiICYmCisJISB0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZToiICYmCisJISB0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly8iICYmCisJISB0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gImZpbGUiICYmCisJISB0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gImZpbGU6IiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOi8iICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOi8vIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICI6Ly9hY21lLmNvIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4X3Rlc3Q6Ly9hY21lLmNvIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICItdGVzdDovL2FjbWUuY28iICYmCisJISB0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gIjB0ZXN0Oi8vYWNtZS5jbyIgJiYKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiK3Rlc3Q6Ly9hY21lLmNvIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICIudGVzdDovL2FjbWUuY28iICYmCisJISB0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtJTZlOi8vIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieC1UZXN0K3YxLjA6Ly9hY21lLmNvIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJBYkNkZUY6Ly94LlkiKSIgPSAiYWJjZGVmOi8veC55LyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsIGF1dGhvcml0eScgJworCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly91c2VyOnBhc3NAIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly8/IiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly8jIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly8vIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly86IiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly86NTU1IiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiZmlsZTovL3VzZXI6cGFzc0AiICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOi8vPyIgJiYKKwl0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gImZpbGU6Ly8jIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiZmlsZTovLy8iICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJmaWxlOi8vOiIgJiYKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiZmlsZTovLzo1NTUiICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly91c2VyOnBhc3NAaG9zdCIgJiYKKwl0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL0Bob3N0IiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vJTAwQGhvc3QiICYmCisJISB0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovLyUlQGhvc3QiICYmCisJISB0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2hvc3RfIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vdXNlcjpwYXNzQGhvc3QvIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vQGhvc3QvIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vaG9zdC8iICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9ob3N0P3giICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9ob3N0I3giICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9ob3N0L0AiICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9ob3N0P0B4IiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vaG9zdCNAeCIgJiYKKwl0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL1s6OjFdIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vWzo6MV0vIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9ob3MlNDEvIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vW2ludmFsaWQuLi4uOi8iICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJzY2hlbWU6Ly9pbnZhbGlkLi4uLjpdLyIgJiYKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAic2NoZW1lOi8vaW52YWxpZC4uLi46Wy8iICYmCisJISB0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInNjaGVtZTovL2ludmFsaWQuLi4uOlsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBwb3J0IGNoZWNrcycgJworCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6IiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6NDU2LyIgJiYKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6MCIgJiYKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6MDAwMDAwMCIgJiYKKwl0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjAwMDAwMDE/IiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6MDY1NTM1IyIgJiYKKwl0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjY1NTM1IiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9xQHNvbWUuaG9zdDo2NTUzNiIgJiYKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6OTk5OTkiICYmCisJISB0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjEwMDAwMCIgJiYKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vcUBzb21lLmhvc3Q6MTAwMDAxIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cDovL3FAc29tZS5ob3N0OjgwIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cHM6Ly9xQHNvbWUuaG9zdDo0NDMiICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwOi8vcUBzb21lLmhvc3Q6ODAvIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cHM6Ly9xQHNvbWUuaG9zdDo0NDM/IiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwOi8vcUA6ODAwOCIgJiYKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cDovLzo4MDgwIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwOi8vOiIgJiYKKwl0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL3FAc29tZS5ob3N0OjQ1Ni8iICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9bOjoxXTo0NTYvIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vWzo6MV06LyIgJiYKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vWzo6MV06MDAwLyIgJiYKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vWzo6MV06MCUzMDAvIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4eXo6Ly9bOjoxXToweDgwLyIgJiYKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAieHl6Oi8vWzo6MV06NDI5NDk2NzI5Ny8iICYmCisJISB0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gInh5ejovL1s6OjFdOjAzMGYvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cmwgcG9ydCBub3JtYWxpemF0aW9uJyAnCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHA6Ly94OjgwMCIpIiA9ICJodHRwOi8veDo4MDAvIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwOi8veDowODAwIikiID0gImh0dHA6Ly94OjgwMC8iICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHA6Ly94OjAwMDAwODAwIikiID0gImh0dHA6Ly94OjgwMC8iICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHA6Ly94OjA2NTUzNSIpIiA9ICJodHRwOi8veDo2NTUzNS8iICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHA6Ly94OjEiKSIgPSAiaHR0cDovL3g6MS8iICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgImh0dHA6Ly94OjgwIikiID0gImh0dHA6Ly94LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiaHR0cDovL3g6MDgwIikiID0gImh0dHA6Ly94LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiaHR0cDovL3g6MDAwMDAwMDgwIikiID0gImh0dHA6Ly94LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiaHR0cHM6Ly94OjQ0MyIpIiA9ICJodHRwczovL3gvIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwczovL3g6MDQ0MyIpIiA9ICJodHRwczovL3gvIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJodHRwczovL3g6MDAwMDAwNDQzIikiID0gImh0dHBzOi8veC8iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBnZW5lcmFsIGVzY2FwZXMnICcKKwkhIHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cDovL3gueT8lZmciICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIlg6Ly9XLyU3ZSU0MV4lM2EiKSIgPSAieDovL3cvfkElNUUlM0EiICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIlg6Ly9XLzovPyNbXUAiKSIgPSAieDovL3cvOi8/I1tdQCIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiWDovL1cvJCYoKSorLDs9IikiID0gIng6Ly93LyQmKCkqKyw7PSIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiWDovL1cvJ1wnJyIpIiA9ICJ4Oi8vdy8nXCcnIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJYOi8vVz8nXCEnIikiID0gIng6Ly93Lz8nXCEnIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAndXJsIGhpZ2gtYml0IGVzY2FwZXMnICcKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS0xIikiKSIgPSAieDovL3EvJTAxJTAyJTAzJTA0JTA1JTA2JTA3JTA4JTBFJTBGJTEwJTExJTEyIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICIkKGNhdCAiJHR1LTIiKSIpIiA9ICJ4Oi8vcS8lMTMlMTQlMTUlMTYlMTclMTglMTklMUIlMUMlMUQlMUUlMUYlN0YiICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIiQoY2F0ICIkdHUtMyIpIikiID0gIng6Ly9xLyU4MCU4MSU4MiU4MyU4NCU4NSU4NiU4NyU4OCU4OSU4QSU4QiU4QyU4RCU4RSU4RiIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS00IikiKSIgPSAieDovL3EvJTkwJTkxJTkyJTkzJTk0JTk1JTk2JTk3JTk4JTk5JTlBJTlCJTlDJTlEJTlFJTlGIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICIkKGNhdCAiJHR1LTUiKSIpIiA9ICJ4Oi8vcS8lQTAlQTElQTIlQTMlQTQlQTUlQTYlQTclQTglQTklQUElQUIlQUMlQUQlQUUlQUYiICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIiQoY2F0ICIkdHUtNiIpIikiID0gIng6Ly9xLyVCMCVCMSVCMiVCMyVCNCVCNSVCNiVCNyVCOCVCOSVCQSVCQiVCQyVCRCVCRSVCRiIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS03IikiKSIgPSAieDovL3EvJUMwJUMxJUMyJUMzJUM0JUM1JUM2JUM3JUM4JUM5JUNBJUNCJUNDJUNEJUNFJUNGIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICIkKGNhdCAiJHR1LTgiKSIpIiA9ICJ4Oi8vcS8lRDAlRDElRDIlRDMlRDQlRDUlRDYlRDclRDglRDklREElREIlREMlREQlREUlREYiICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIiQoY2F0ICIkdHUtOSIpIikiID0gIng6Ly9xLyVFMCVFMSVFMiVFMyVFNCVFNSVFNiVFNyVFOCVFOSVFQSVFQiVFQyVFRCVFRSVFRiIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS0xMCIpIikiID0gIng6Ly9xLyVGMCVGMSVGMiVGMyVGNCVGNSVGNiVGNyVGOCVGOSVGQSVGQiVGQyVGRCVGRSVGRiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsIHV0Zi04IGVzY2FwZXMnICcKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAiJChjYXQgIiR0dS0xMSIpIikiID0gIng6Ly9xLyVDMiU4MCVERiVCRiVFMCVBMCU4MCVFRiVCRiVCRCVGMCU5MCU4MCU4MCVGMCVBRiVCRiVCRCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsIHVzZXJuYW1lL3Bhc3N3b3JkIGVzY2FwZXMnICcKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovLyU0MSU2MiheKTolNzArZEBmb28iKSIgPSAieDovL0FiKCU1RSk6cCtkQGZvby8iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBub3JtYWxpemVkIGxlbmd0aHMnICcKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtbCAiSHR0cDovLyU0ZCU2NTolNGReJTcwQFRoZS5Ib3N0IikiID0gMjUgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtbCAiaHR0cDovLyU0MTolNDJAeC55LyU2MS8iKSIgPSAxNyAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1sICJodHRwOi8vQHgueS9eIikiID0gMTUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXJsIC4gYW5kIC4uIHNlZ21lbnRzJyAnCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95Ly4iKSIgPSAieDovL3kvIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS8uLyIpIiA9ICJ4Oi8veS8iICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95L2EvLiIpIiA9ICJ4Oi8veS9hIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS9hLy4vIikiID0gIng6Ly95L2EvIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS8uPyIpIiA9ICJ4Oi8veS8/IiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS8uLz8iKSIgPSAieDovL3kvPyIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYS8uPyIpIiA9ICJ4Oi8veS9hPyIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYS8uLz8iKSIgPSAieDovL3kvYS8/IiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS9hLy4vYi8uLi8uLy4uL2MiKSIgPSAieDovL3kvYyIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYS8uL2IvLi4vLi4vLi9jLyIpIiA9ICJ4Oi8veS9jLyIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYS8uL2IvLi4vLi8uLi9jLy4vLi8uLi8uLy4iKSIgPSAieDovL3kvIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJ4Oi8veS9hLy4vYi8uLi8uLy4uL2MvLi8uLy4uLy4vLi4iICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95L2EvLi8/Ly4vLi8uLiIpIiA9ICJ4Oi8veS9hLz8vLi8uLy4uIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS8lMmUvIikiID0gIng6Ly95LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvJTJFLyIpIiA9ICJ4Oi8veS8iICYmCisJdGVzdCAiJCh0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gLXAgIng6Ly95L2EvJTJlLi8iKSIgPSAieDovL3kvIiAmJgorCXRlc3QgIiQodGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uIC1wICJ4Oi8veS9iLy4lMkUvIikiID0gIng6Ly95LyIgJiYKKwl0ZXN0ICIkKHRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAtcCAieDovL3kvYy8lMmUlMkUvIikiID0gIng6Ly95LyIKKycKKworIyBodHRwOi8vQGZvbyBzcGVjaWZpZXMgYW4gZW1wdHkgdXNlciBuYW1lIGJ1dCBkb2VzIG5vdCBzcGVjaWZ5IGEgcGFzc3dvcmQKKyMgaHR0cDovL2ZvbyAgc3BlY2lmaWVzIG5laXRoZXIgYSB1c2VyIG5hbWUgbm9yIGEgcGFzc3dvcmQKKyMgU28gdGhleSBzaG91bGQgbm90IGJlIGVxdWl2YWxlbnQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybCBlcXVpdmFsZW50cycgJworCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0UDovL3giICJIdHRwOi8vWC8iICYmCisJdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJIdHRwOi8vJTRkJTY1OiU0ZF4lNzBAVGhlLkhvc3QiICJoVFRQOi8vTWU6JTREXnBAdGhlLkhPU1Q6ODAvIiAmJgorCSEgdGVzdC11cmxtYXRjaC1ub3JtYWxpemF0aW9uICJodHRwczovL0B4LnkvXiIgImh0dHBTOi8veC55OjQ0My9eIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cHM6Ly9AeC55L14iICJodHRwUzovL0B4Lnk6MDQ0My9eIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cHM6Ly9AeC55L14vLi4vYWJjIiAiaHR0cFM6Ly9AeC55OjA0NDMvYWJjIiAmJgorCXRlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbiAiaHR0cHM6Ly9AeC55L14vLi4iICJodHRwUzovL0B4Lnk6MDQ0My8iCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDExMC9SRUFETUUgYi90L3QwMTEwL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDRhNTBlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDExMC9SRUFETUUKQEAgLTAsMCArMSw5IEBACitUaGUgdXJsIGRhdGEgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgY29udGFpbiBVUkxzIHdpdGggY2hhcmFjdGVycworaW4gdGhlIHJhbmdlIDB4MDEtMHgxZiBhbmQgMHg3Zi0weGZmIHRvIHRlc3QgdGhlIHByb3BlciBub3JtYWxpemF0aW9uCitvZiB1bnByaW50YWJsZSBjaGFyYWN0ZXJzLgorCitBIHNlbGVjdCBmZXcgY2hhcmFjdGVycyBpbiB0aGUgMHgwMS0weDFmIHJhbmdlIGFyZSBza2lwcGVkIHRvIGhlbHAKK2F2b2lkIHByb2JsZW1zIHJ1bm5pbmcgdGhlIHRlc3QgaXRzZWxmLgorCitUaGUgdXJscyBhcmUgaW4gdGVzdCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSByYXRoZXIgdGhhbiBiZWluZworZW1iZWRkZWQgaW4gdGhlIHRlc3Qgc2NyaXB0IGZvciBwb3J0YWJpbGl0eS4KZGlmZiAtLWdpdCBhL3QvdDAxMTAvdXJsLTEgYi90L3QwMTEwL3VybC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxOTAxOWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMTEwL3VybC0xCkBAIC0wLDAgKzEgQEAKK3g6Ly9xLwECAwQFBgcIDg8QERIKZGlmZiAtLWdpdCBhL3QvdDAxMTAvdXJsLTEwIGIvdC90MDExMC91cmwtMTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5NjVkZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTEwCkBAIC0wLDAgKzEgQEAKK3g6Ly9xL/Dx8vP09fb3+Pn6+/z9/v8KZGlmZiAtLWdpdCBhL3QvdDAxMTAvdXJsLTExIGIvdC90MDExMC91cmwtMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBhNTBmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTExCkBAIC0wLDAgKzEgQEAKK3g6Ly9xL8KA37/goIDvv73wkICA8K+/vQpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtMiBiL3QvdDAxMTAvdXJsLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMzMzRiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTIKQEAgLTAsMCArMSBAQAoreDovL3EvExQVFhcYGRscHR4ffwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtMyBiL3QvdDAxMTAvdXJsLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3OGM3YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTMKQEAgLTAsMCArMSBAQAoreDovL3EvgIGCg4SFhoeIiYqLjI2OjwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtNCBiL3QvdDAxMTAvdXJsLTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIwYjE5OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTQKQEAgLTAsMCArMSBAQAoreDovL3EvkJGSk5SVlpeYmZqbnJ2enwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtNSBiL3QvdDAxMTAvdXJsLTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjZDkyNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTUKQEAgLTAsMCArMSBAQAoreDovL3EvoKGio6SlpqeoqaqrrK2urwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtNiBiL3QvdDAxMTAvdXJsLTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgyODNhYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTYKQEAgLTAsMCArMSBAQAoreDovL3EvsLGys7S1tre4ubq7vL2+vwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtNyBiL3QvdDAxMTAvdXJsLTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE3YzEwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTcKQEAgLTAsMCArMSBAQAoreDovL3EvwMHCw8TFxsfIycrLzM3OzwpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtOCBiL3QvdDAxMTAvdXJsLTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhMGJhOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTgKQEAgLTAsMCArMSBAQAoreDovL3Ev0NHS09TV1tfY2drb3N3e3wpkaWZmIC0tZ2l0IGEvdC90MDExMC91cmwtOSBiL3QvdDAxMTAvdXJsLTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI0NGJlYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAxMTAvdXJsLTkKQEAgLTAsMCArMSBAQAoreDovL3Ev4OHi4+Tl5ufo6err7O3u7wpkaWZmIC0tZ2l0IGEvdC90MDIwMC1nZXR0ZXh0LWJhc2ljLnNoIGIvdC90MDIwMC1nZXR0ZXh0LWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4NTNkOGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAwLWdldHRleHQtYmFzaWMuc2gKQEAgLTAsMCArMSwxMDggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nR2V0dGV4dCBzdXBwb3J0IGZvciBHaXQnCisKKy4gLi9saWItZ2V0dGV4dC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzYW5pdHk6IFwkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FIGlzIHNldCAodG8gJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSkiICcKKyAgICB0ZXN0IC1uICIkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW5pdHk6ICRURVhURE9NQUlOIGlzIGdpdCcgJworICAgIHRlc3QgJFRFWFRET01BSU4gPSAiZ2l0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd4Z2V0dGV4dCBzYW5pdHk6IFBlcmwgXygpIHN0cmluZ3MgYXJlIG5vdCBleHRyYWN0ZWQnICcKKyAgICAhIGdyZXAgIkEgUGVybCBzdHJpbmcgeGdldHRleHQgd2lsbCBub3QgZ2V0IiAiJEdJVF9QT19QQVRIIi9pcy5wbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd4Z2V0dGV4dCBzYW5pdHk6IENvbW1lbnQgZXh0cmFjdGlvbiB3aXRoIC0tYWRkLWNvbW1lbnRzJyAnCisgICAgZ3JlcCAiVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0IiAiJFRFU1RfRElSRUNUT1JZIi90MDIwMC8qIHwgd2MgLWwgPmV4cGVjdCAmJgorICAgIGdyZXAgIlRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdCIgIiRHSVRfUE9fUEFUSCIvaXMucG8gIHwgd2MgLWwgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAneGdldHRleHQgc2FuaXR5OiBDb21tZW50IGV4dHJhY3Rpb24gd2l0aCAtLWFkZC1jb21tZW50cyBzdG9wcyBhdCBzdGF0ZW1lbnRzJyAnCisgICAgISBncmVwICJUaGlzIGlzIGEgcGhvbnkiICIkR0lUX1BPX1BBVEgiL2lzLnBvICYmCisgICAgISBncmVwICJ0aGUgYWJvdmUgY29tbWVudCIgIiRHSVRfUE9fUEFUSCIvaXMucG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUICdzYW5pdHk6ICRURVhURE9NQUlORElSIGV4aXN0cyB3aXRob3V0IE5PX0dFVFRFWFQ9WWVzUGxlYXNlJyAnCisgICAgdGVzdCAtZCAiJFRFWFRET01BSU5ESVIiICYmCisgICAgdGVzdCAiJFRFWFRET01BSU5ESVIiID0gIiRHSVRfVEVYVERPTUFJTkRJUiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUICdzYW5pdHk6IEljZWxhbmRpYyBsb2NhbGUgd2FzIGNvbXBpbGVkJyAnCisgICAgdGVzdCAtZiAiJFRFWFRET01BSU5ESVIvaXMvTENfTUVTU0FHRVMvZ2l0Lm1vIgorJworCisjIFRPRE86IFdoZW4gd2UgaGF2ZSBtb3JlIGxvY2FsZXMsIGdlbmVyYWxpemUgdGhpcyB0byB0ZXN0IHRoZW0KKyMgYWxsLiBNYXliZSB3ZSdsbCBuZWVkIGEgZGlyLT5sb2NhbGUgbWFwIGZvciB0aGF0LgordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnc2FuaXR5OiBnZXR0ZXh0KCIiKSBtZXRhZGF0YSBpcyBPSycgJworICAgICMgUmV0dXJuIHZhbHVlIG1heSBiZSBub24temVybworICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2V0dGV4dCAiIiA+emVyby1leHBlY3QgJiYKKyAgICBncmVwICJQcm9qZWN0LUlkLVZlcnNpb246IEdpdCIgemVyby1leHBlY3QgJiYKKyAgICBncmVwICJHaXQgTWFpbGluZyBMaXN0IDxnaXRAdmdlci5rZXJuZWwub3JnPiIgemVyby1leHBlY3QgJiYKKyAgICBncmVwICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiIHplcm8tZXhwZWN0ICYmCisgICAgZ3JlcCAiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdCIgemVyby1leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnc2FuaXR5OiBnZXR0ZXh0KHVua25vd24pIGlzIHBhc3NlZCB0aHJvdWdoJyAnCisgICAgcHJpbnRmICJUaGlzIGlzIG5vdCBhIHRyYW5zbGF0aW9uIHN0cmluZyIgID5leHBlY3QgJiYKKyAgICBnZXR0ZXh0ICJUaGlzIGlzIG5vdCBhIHRyYW5zbGF0aW9uIHN0cmluZyIgPmFjdHVhbCAmJgorICAgIGV2YWxfZ2V0dGV4dCAiVGhpcyBpcyBub3QgYSB0cmFuc2xhdGlvbiBzdHJpbmciID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgeGdldHRleHQgZnJvbSBDCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogQyBleHRyYWN0aW9uIG9mIF8oKSBhbmQgTl8oKSBzdHJpbmdzJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBDIHRpbHJhdW5hc3RyZW5ndXIiID5leHBlY3QgJiYKKyAgICBwcmludGYgIlxuIiA+PmV4cGVjdCAmJgorICAgIHByaW50ZiAiU2rDoSAnXCcnZ2l0IGhlbHAgU0tJUFVOJ1wnJyB0aWwgYcOwIHNqw6EgaGrDoWxwIGZ5cmlyIHRpbHRla25hIHNraXB1bi4iID4+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiBBIEMgdGVzdCBzdHJpbmciID5hY3R1YWwgJiYKKyAgICBwcmludGYgIlxuIiA+PmFjdHVhbCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2V0dGV4dCAiU2VlICdcJydnaXQgaGVscCBDT01NQU5EJ1wnJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBhIHNwZWNpZmljIGNvbW1hbmQuIiA+PmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAneGdldHRleHQ6IEMgZXh0cmFjdGlvbiB3aXRoICVzJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBDIHRpbHJhdW5hc3RyZW5ndXIgJSVzIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiBBIEMgdGVzdCBzdHJpbmcgJXMiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgeGdldHRleHQgZnJvbSBTaGVsbAordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAneGdldHRleHQ6IFNoZWxsIGV4dHJhY3Rpb24nICcKKyAgICBwcmludGYgIlRJTFJBVU46IFNrZWxqYXJ0aWxyYXVuYXN0cmVuZ3VyIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiBBIFNoZWxsIHRlc3Qgc3RyaW5nIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogU2hlbGwgZXh0cmFjdGlvbiB3aXRoICR2YXJpYWJsZScgJworICAgIHByaW50ZiAiVElMUkFVTjogU2tlbGphcnRpbHJhdW5hc3RyZW5ndXIgbWXDsCBicmV5dHVubmkgYSB2YXIgaSBhYmxlIiA+eC1leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIHZhcmlhYmxlPSJhIHZhciBpIGFibGUiIGV2YWxfZ2V0dGV4dCAiVEVTVDogQSBTaGVsbCB0ZXN0IFwkdmFyaWFibGUiID54LWFjdHVhbCAmJgorICAgIHRlc3RfY21wIHgtZXhwZWN0IHgtYWN0dWFsCisnCisKKyMgeGdldHRleHQgZnJvbSBQZXJsCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICd4Z2V0dGV4dDogUGVybCBleHRyYWN0aW9uJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBQZXJsIHRpbHJhdW5hc3RyZW5ndXIiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEEgUGVybCB0ZXN0IHN0cmluZyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAneGdldHRleHQ6IFBlcmwgZXh0cmFjdGlvbiB3aXRoICVzJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBQZXJsIHRpbHJhdW5hc3RyZW5ndXIgbWXDsCBicmV5dHVubmkgJSVzIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiBBIFBlcmwgdGVzdCB2YXJpYWJsZSAlcyIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnc2FuaXR5OiBTb21lIGdldHRleHQoIiIpIGRhdGEgZm9yIHJlYWwgbG9jYWxlJyAnCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICIiID5yZWFsLWxvY2FsZSAmJgorICAgIHRlc3QgLXMgcmVhbC1sb2NhbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjAwL3Rlc3QuYyBiL3QvdDAyMDAvdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NGQ0NWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAwL3Rlc3QuYwpAQCAtMCwwICsxLDIzIEBACisvKiBUaGlzIGlzIGEgcGhvbnkgQyBwcm9ncmFtIHRoYXQncyBvbmx5IGhlcmUgdG8gdGVzdCB4Z2V0dGV4dCBtZXNzYWdlIGV4dHJhY3Rpb24gKi8KKworY29uc3QgY2hhciBoZWxwW10gPQorCS8qIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LiAqLworCU5fKCJTZWUgJ2dpdCBoZWxwIENPTU1BTkQnIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGEgc3BlY2lmaWMgY29tbWFuZC4iKTsKKworaW50IG1haW4odm9pZCkKK3sKKwkvKiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4gKi8KKwlwdXRzKF8oIlRFU1Q6IEEgQyB0ZXN0IHN0cmluZyIpKTsKKworCS8qIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LiAqLworCXByaW50ZihfKCJURVNUOiBBIEMgdGVzdCBzdHJpbmcgJXMiKSwgInZhcmlhYmxlIik7CisKKwkvKiBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4gKi8KKwlwcmludGYoXygiVEVTVDogSGVsbG8gV29ybGQhIikpOworCisJLyogVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuICovCisJcHJpbnRmKF8oIlRFU1Q6IE9sZCBFbmdsaXNoIFJ1bmVzIikpOworCisJLyogVFJBTlNMQVRPUlM6IFRoaXMgaXMgYSB0ZXN0LiBZb3UgZG9uJ3QgbmVlZCB0byB0cmFuc2xhdGUgaXQuICovCisJcHJpbnRmKF8oIlRFU1Q6IOKAmHNpbmdsZeKAmSBhbmQg4oCcZG91Ymxl4oCdIHF1b3RlcyIpKTsKK30KZGlmZiAtLWdpdCBhL3QvdDAyMDAvdGVzdC5wZXJsIGIvdC90MDIwMC90ZXN0LnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmYmEzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDAvdGVzdC5wZXJsCkBAIC0wLDAgKzEsMTQgQEAKKyMgVGhpcyBpcyBhIHBob255IFBlcmwgcHJvZ3JhbSB0aGF0J3Mgb25seSBoZXJlIHRvIHRlc3QgeGdldHRleHQKKyMgbWVzc2FnZSBleHRyYWN0aW9uCisKKyMgc28gdGhlIGFib3ZlIGNvbW1lbnQgd29uJ3QgYmUgZm9sZGVkIGludG8gdGhlIG5leHQgb25lIGJ5IHhnZXR0ZXh0CisxOworCisjIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorcHJpbnQgX18oIlRFU1Q6IEEgUGVybCB0ZXN0IHN0cmluZyIpOworCisjIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorcHJpbnRmIF9fKCJURVNUOiBBIFBlcmwgdGVzdCB2YXJpYWJsZSAlcyIpLCAibW9vIjsKKworIyBUUkFOU0xBVE9SUzogSWYgeW91IHNlZSB0aGlzLCBHaXQgaGFzIGEgYnVnCitwcmludCBfIlRFU1Q6IEEgUGVybCBzdHJpbmcgeGdldHRleHQgd2lsbCBub3QgZ2V0IjsKZGlmZiAtLWdpdCBhL3QvdDAyMDAvdGVzdC5zaCBiL3QvdDAyMDAvdGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjJkNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MDIwMC90ZXN0LnNoCkBAIC0wLDAgKzEsMTQgQEAKKyMgVGhpcyBpcyBhIHBob255IFNoZWxsIHByb2dyYW0gdGhhdCdzIG9ubHkgaGVyZSB0byB0ZXN0IHhnZXR0ZXh0CisjIG1lc3NhZ2UgZXh0cmFjdGlvbgorCisjIHNvIHRoZSBhYm92ZSBjb21tZW50IHdvbid0IGJlIGZvbGRlZCBpbnRvIHRoZSBuZXh0IG9uZSBieSB4Z2V0dGV4dAorZWNobworCisjIFRSQU5TTEFUT1JTOiBUaGlzIGlzIGEgdGVzdC4gWW91IGRvbid0IG5lZWQgdG8gdHJhbnNsYXRlIGl0LgorZ2V0dGV4dCAiVEVTVDogQSBTaGVsbCB0ZXN0IHN0cmluZyIKKworIyBUUkFOU0xBVE9SUzogVGhpcyBpcyBhIHRlc3QuIFlvdSBkb24ndCBuZWVkIHRvIHRyYW5zbGF0ZSBpdC4KK2V2YWxfZ2V0dGV4dCAiVEVTVDogQSBTaGVsbCB0ZXN0IFwkdmFyaWFibGUiCisKKyMgVFJBTlNMQVRPUlM6IElmIHlvdSBzZWUgdGhpcywgR2l0IGhhcyBhIGJ1ZworXygiVEVTVDogQSBTaGVsbCBzdHJpbmcgeGdldHRleHQgd29uJ3QgZ2V0IikKZGlmZiAtLWdpdCBhL3QvdDAyMDEtZ2V0dGV4dC1mYWxsYmFja3Muc2ggYi90L3QwMjAxLWdldHRleHQtZmFsbGJhY2tzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwZGExYzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAxLWdldHRleHQtZmFsbGJhY2tzLnNoCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nR2V0dGV4dCBTaGVsbCBmYWxsYmFja3MnCisKK0dJVF9JTlRFUk5BTF9HRVRURVhUX1RFU1RfRkFMTEJBQ0tTPVllc1BsZWFzZQorZXhwb3J0IEdJVF9JTlRFUk5BTF9HRVRURVhUX1RFU1RfRkFMTEJBQ0tTCisKKy4gLi9saWItZ2V0dGV4dC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzYW5pdHk6IFwkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FIGlzIHNldCAodG8gJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSkiICcKKyAgICB0ZXN0IC1uICIkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW5pdHk6ICRHSVRfSU5URVJOQUxfR0VUVEVYVF9URVNUX0ZBTExCQUNLUyBpcyBzZXQnICcKKyAgICB0ZXN0IC1uICIkR0lUX0lOVEVSTkFMX0dFVFRFWFRfVEVTVF9GQUxMQkFDS1MiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdzYW5pdHk6ICRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUiIGlzIGZhbGx0aHJvdWdoJyAnCisgICAgZWNobyBmYWxsdGhyb3VnaCA+ZXhwZWN0ICYmCisgICAgZWNobyAkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldHRleHQ6IG91ciBnZXR0ZXh0KCkgZmFsbGJhY2sgaGFzIHBhc3MtdGhyb3VnaCBzZW1hbnRpY3MnICcKKyAgICBwcmludGYgInRlc3QiID5leHBlY3QgJiYKKyAgICBnZXR0ZXh0ICJ0ZXN0IiA+YWN0dWFsICYmCisgICAgdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKyAgICBwcmludGYgInRlc3QgbW9yZSB3b3JkcyIgPmV4cGVjdCAmJgorICAgIGdldHRleHQgInRlc3QgbW9yZSB3b3JkcyIgPmFjdHVhbCAmJgorICAgIHRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V2YWxfZ2V0dGV4dDogb3VyIGV2YWxfZ2V0dGV4dCgpIGZhbGxiYWNrIGhhcyBwYXNzLXRocm91Z2ggc2VtYW50aWNzJyAnCisgICAgcHJpbnRmICJ0ZXN0IiA+ZXhwZWN0ICYmCisgICAgZXZhbF9nZXR0ZXh0ICJ0ZXN0IiA+YWN0dWFsICYmCisgICAgdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKyAgICBwcmludGYgInRlc3QgbW9yZSB3b3JkcyIgPmV4cGVjdCAmJgorICAgIGV2YWxfZ2V0dGV4dCAidGVzdCBtb3JlIHdvcmRzIiA+YWN0dWFsICYmCisgICAgdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXZhbF9nZXR0ZXh0OiBvdXIgZXZhbF9nZXR0ZXh0KCkgZmFsbGJhY2sgY2FuIGludGVycG9sYXRlIHZhcmlhYmxlcycgJworICAgIHByaW50ZiAidGVzdCBZZXNQbGVhc2UiID5leHBlY3QgJiYKKyAgICBHSVRfSU5URVJOQUxfR0VUVEVYVF9URVNUX0ZBTExCQUNLUz1ZZXNQbGVhc2UgZXZhbF9nZXR0ZXh0ICJ0ZXN0IFwkR0lUX0lOVEVSTkFMX0dFVFRFWFRfVEVTVF9GQUxMQkFDS1MiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdldmFsX2dldHRleHQ6IG91ciBldmFsX2dldHRleHQoKSBmYWxsYmFjayBjYW4gaW50ZXJwb2xhdGUgdmFyaWFibGVzIHdpdGggc3BhY2VzJyAnCisgICAgY21kbGluZT0iZ2l0IGFtIiAmJgorICAgIGV4cG9ydCBjbWRsaW5lICYmCisgICAgcHJpbnRmICJXaGVuIHlvdSBoYXZlIHJlc29sdmVkIHRoaXMgcHJvYmxlbSwgcnVuIGdpdCBhbSAtLXJlc29sdmVkLiIgPmV4cGVjdCAmJgorICAgIGV2YWxfZ2V0dGV4dCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcJGNtZGxpbmUgLS1yZXNvbHZlZC4iID5hY3R1YWwgJiYKKyAgICB0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdldmFsX2dldHRleHQ6IG91ciBldmFsX2dldHRleHQoKSBmYWxsYmFjayBjYW4gaW50ZXJwb2xhdGUgdmFyaWFibGVzIHdpdGggc3BhY2VzIGFuZCBxdW90ZXMnICcKKyAgICBjbWRsaW5lPSJnaXQgYW0iICYmCisgICAgZXhwb3J0IGNtZGxpbmUgJiYKKyAgICBwcmludGYgIldoZW4geW91IGhhdmUgcmVzb2x2ZWQgdGhpcyBwcm9ibGVtLCBydW4gXCJnaXQgYW0gLS1yZXNvbHZlZFwiLiIgPmV4cGVjdCAmJgorICAgIGV2YWxfZ2V0dGV4dCAiV2hlbiB5b3UgaGF2ZSByZXNvbHZlZCB0aGlzIHByb2JsZW0sIHJ1biBcIlwkY21kbGluZSAtLXJlc29sdmVkXCIuIiA+YWN0dWFsICYmCisgICAgdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMjAyLWdldHRleHQtcGVybC5zaCBiL3QvdDAyMDItZ2V0dGV4dC1wZXJsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEyOWQxNjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAyLWdldHRleHQtcGVybC5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIMOGdmFyIEFybmZqw7Zyw7AgQmphcm1hc29uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1BlcmwgZ2V0dGV4dCBpbnRlcmZhY2UgKEdpdDo6STE4TiknCisKKy4gLi9saWItZ2V0dGV4dC5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBwZXJsIGludGVyZmFjZSB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworcGVybCAtTVRlc3Q6Ok1vcmUgLWUgMCAyPi9kZXYvbnVsbCB8fCB7CisJc2tpcF9hbGw9IlBlcmwgVGVzdDo6TW9yZSB1bmF2YWlsYWJsZSwgc2tpcHBpbmcgdGVzdCIKKwl0ZXN0X2RvbmUKK30KKworIyBUaGUgZXh0ZXJuYWwgdGVzdCB3aWxsIG91dHB1dHMgaXRzIG93biBwbGFuCit0ZXN0X2V4dGVybmFsX2hhc190YXA9MQorCit0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyIFwKKyAgICAnUGVybCBHaXQ6OkkxOE4gQVBJJyBcCisgICAgcGVybCAiJFRFU1RfRElSRUNUT1JZIi90MDIwMi90ZXN0LnBsCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDIwMi90ZXN0LnBsIGIvdC90MDIwMi90ZXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJjMTBjYjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMjAyL3Rlc3QucGwKQEAgLTAsMCArMSwxMTAgQEAKKyMhL3Vzci9iaW4vcGVybAordXNlIDUuMDA4OwordXNlIGxpYiAoc3BsaXQoLzovLCAkRU5We0dJVFBFUkxMSUJ9KSk7Cit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOwordXNlIFBPU0lYIHF3KDpsb2NhbGVfaCk7Cit1c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA4OwordXNlIEdpdDo6STE4TjsKKworbXkgJGhhc19nZXR0ZXh0X2xpYnJhcnkgPSAkR2l0OjpJMThOOjpfX0hBU19MSUJSQVJZOworCitvaygxLCAiVGVzdGluZyBHaXQ6OkkxOE4gd2l0aCAiIC4KKwkgKCRoYXNfZ2V0dGV4dF9saWJyYXJ5CisJICA/IChkZWZpbmVkICRMb2NhbGU6Ok1lc3NhZ2VzOjpWRVJTSU9OCisJCSA/ICJMb2NhbGU6Ok1lc3NhZ2VzIHZlcnNpb24gJExvY2FsZTo6TWVzc2FnZXM6OlZFUlNJT04iCisJCSAjIFZlcnNpb25zIG9mIExvY2FsZTo6TWVzc2FnZXMgYmVmb3JlIDEuMTcgZGlkbid0IGhhdmUgYQorCQkgIyAkVkVSU0lPTiB2YXJpYWJsZS4KKwkJIDogIkxvY2FsZTo6TWVzc2FnZXMgdmVyc2lvbiA8MS4xNyIpCisJICA6ICJOTyBQZXJsIGdldHRleHQgbGlicmFyeSIpKTsKK29rKDEsICJHaXQ6OkkxOE4gaXMgbG9jYXRlZCBhdCAkSU5DeydHaXQvSTE4Ti5wbSd9Iik7CisKK3sKKwlteSAkZXhwb3J0cyA9IEBHaXQ6OkkxOE46OkVYUE9SVDsKKwlvaygkZXhwb3J0cywgInNhbml0eTogR2l0OjpJMThOIGhhcyAkZXhwb3J0cyBleHBvcnQocykiKTsKK30KK2lzX2RlZXBseShcQEdpdDo6STE4Tjo6RVhQT1JULCBcQEdpdDo6STE4Tjo6RVhQT1JUX09LLCAic2FuaXR5OiBHaXQ6OkkxOE4gZXhwb3J0cyBldmVyeXRoaW5nIGJ5IGRlZmF1bHQiKTsKKworIyBwcm90b3R5cGVzCit7CisJIyBBZGQgcHJvdG90eXBlcyBoZXJlIHdoZW4gbW9kaWZ5aW5nIHRoZSBwdWJsaWMgaW50ZXJmYWNlIHRvIGFkZAorCSMgbW9yZSBnZXR0ZXh0IHdyYXBwZXIgZnVuY3Rpb25zLgorCW15ICVwcm90b3R5cGVzID0gKHF3KAorCQlfXwkkCisJKSk7CisJd2hpbGUgKG15ICgkc3ViLCAkcHJvdG8pID0gZWFjaCAlcHJvdG90eXBlcykgeworCQlpcyhwcm90b3R5cGUoXCZ7IkdpdDo6STE4Tjo6JHN1YiJ9KSwgJHByb3RvLCAic2FuaXR5OiAkc3ViIGhhcyBhICRwcm90byBwcm90b3R5cGUiKTsKKwl9Cit9CisKKyMgVGVzdCBiYXNpYyBwYXNzdGhyb3VnaCBpbiB0aGUgQyBsb2NhbGUKK3sKKwlsb2NhbCAkRU5We0xBTkdVQUdFfSA9ICdDJzsKKwlsb2NhbCAkRU5We0xDX0FMTH0gICA9ICdDJzsKKwlsb2NhbCAkRU5We0xBTkd9ICAgICA9ICdDJzsKKworCW15ICgkZ290LCAkZXhwZWN0KSA9ICgoJ1RFU1Q6IEEgUGVybCB0ZXN0IHN0cmluZycpIHggMik7CisKKwlpcyhfXygkZ290KSwgJGV4cGVjdCwgIlBhc3NpbmcgYSBzdHJpbmcgdGhyb3VnaCBfXygpIGluIHRoZSBDIGxvY2FsZSB3b3JrcyIpOworfQorCisjIFRlc3QgYSBiYXNpYyBtZXNzYWdlIG9uIGRpZmZlcmVudCBsb2NhbGVzCitTS0lQOiB7CisJdW5sZXNzICgkRU5We0dFVFRFWFRfTE9DQUxFfSkgeworCQkjIENhbid0IHJlbGlhYmx5IHRlc3QgX18oKSB3aXRoIGEgbm9uLUMgbG9jYWxlcyBiZWNhdXNlIHRoZQorCQkjIHJlcXVpcmVkIGxvY2FsZXMgbWF5IG5vdCBiZSBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbS4KKwkJIworCQkjIFdlIHRlc3QgZm9yIHRoZXNlIGFueXdheSBhcyBwYXJ0IG9mIHRoZSBzaGVsbAorCQkjIHRlc3RzLiBTa2lwcGluZyB0aGVzZSBoZXJlIHdpbGwgZWxpbWluYXRlIGZhaWx1cmVzIG9uIG9kZAorCQkjIHBsYXRmb3JtcyB3aXRoIGluY29tcGxldGUgbG9jYWxlIGRhdGEuCisKKwkJc2tpcCAiR0VUVEVYVF9MT0NBTEUgbXVzdCBiZSBzZXQgYnkgbGliLWdldHRleHQuc2ggZm9yIGV4aGF1c3RpdmUgR2l0OjpJMThOIHRlc3RzIiwgMjsKKwl9CisKKwkjIFRoZSBpc19JUyBVVEYtOCBsb2NhbGUgcGFzc2VkIGZyb20gbGliLWdldHRleHQuc2gKKwlteSAkaXNfSVNfbG9jYWxlID0gJEVOVntpc19JU19sb2NhbGV9OworCisJbXkgJHRlc3QgPSBzdWIgeworCQlteSAoJGdvdCwgJGV4cGVjdCwgJG1zZywgJGxvY2FsZSkgPSBAXzsKKwkJIyBNYXliZSB0aGlzIHN5c3RlbSBkb2Vzbid0IGhhdmUgdGhlIGxvY2FsZSB3ZSdyZSB0cnlpbmcgdG8KKwkJIyB0ZXN0LgorCQlteSAkbG9jYWxlX29rID0gc2V0bG9jYWxlKExDX0FMTCwgJGxvY2FsZSk7CisJCWlzKF9fKCRnb3QpLCAkZXhwZWN0LCAiJG1zZyBhIGdldHRleHQgbGlicmFyeSArIDwkbG9jYWxlPiBsb2NhbGUgPCRnb3Q+IHR1cm5zIGludG8gPCRleHBlY3Q+Iik7CisJfTsKKworCW15ICRlbnZfQyA9IHN1YiB7CisJCSRFTlZ7TEFOR1VBR0V9ID0gJ0MnOworCQkkRU5We0xDX0FMTH0gICA9ICdDJzsKKwl9OworCisJbXkgJGVudl9pcyA9IHN1YiB7CisJCSRFTlZ7TEFOR1VBR0V9ID0gJ2lzJzsKKwkJJEVOVntMQ19BTEx9ICAgPSAkaXNfSVNfbG9jYWxlOworCX07CisKKwkjIFRyYW5zbGF0aW9uJ3MgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsCisJbXkgKCRnb3QsICRleHBlY3QpID0gKCgnVEVTVDogQSBQZXJsIHRlc3Qgc3RyaW5nJykgeCAyKTsKKworCWlmICgkaGFzX2dldHRleHRfbGlicmFyeSkgeworCQl7CisJCQlsb2NhbCAlRU5WOyAkZW52X0MtPigpOworCQkJJHRlc3QtPigkZ290LCAkZXhwZWN0LCAiV2l0aCIsICdDJyk7CisJCX0KKworCQl7CisJCQlteSAoJGdvdCwgJGV4cGVjdCkgPSAoJGdvdCwgJ1RJTFJBVU46IFBlcmwgdGlscmF1bmFzdHJlbmd1cicpOworCQkJbG9jYWwgJUVOVjsgJGVudl9pcy0+KCk7CisJCQkkdGVzdC0+KCRnb3QsICRleHBlY3QsICJXaXRoIiwgJGlzX0lTX2xvY2FsZSk7CisJCX0KKwl9IGVsc2UgeworCQl7CisJCQlsb2NhbCAlRU5WOyAkZW52X0MtPigpOworCQkJJHRlc3QtPigkZ290LCAkZXhwZWN0LCAiV2l0aG91dCIsICdDJyk7CisJCX0KKworCQl7CisJCQlsb2NhbCAlRU5WOyAkZW52X2lzLT4oKTsKKwkJCSR0ZXN0LT4oJGdvdCwgJGV4cGVjdCwgIldpdGhvdXQiLCAnaXMnKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL3QvdDAyMDMtZ2V0dGV4dC1zZXRsb2NhbGUtc2FuaXR5LnNoIGIvdC90MDIwMy1nZXR0ZXh0LXNldGxvY2FsZS1zYW5pdHkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTIxMjQ2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDMtZ2V0dGV4dC1zZXRsb2NhbGUtc2FuaXR5LnNoCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgw4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0iVGhlIEdpdCBDIGZ1bmN0aW9ucyBhcmVuJ3QgYnJva2VuIGJ5IHNldGxvY2FsZSgzKSIKKworLiAuL2xpYi1nZXR0ZXh0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93IGEgSVNPLTg4NTktMSBjb21taXQgdW5kZXIgQyBsb2NhbGUnICcKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKKwl0ZXN0X2NvbW1pdCAiaXNvLWMtY29tbWl0IiBpc28tdW5kZXItYyAmJgorCWdpdCBzaG93ID5vdXQgMj5lcnIgJiYKKwkhIHRlc3QgLXMgZXJyICYmCisJZ3JlcCAtcSAiaXNvLWMtY29tbWl0IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnZ2l0IHNob3cgYSBJU08tODg1OS0xIGNvbW1pdCB1bmRlciBhIFVURi04IGxvY2FsZScgJworCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCXRlc3RfY29tbWl0ICJpc28tdXRmOC1jb21taXQiIGlzby11bmRlci11dGY4ICYmCisJTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnaXQgc2hvdyA+b3V0IDI+ZXJyICYmCisJISB0ZXN0IC1zIGVyciAmJgorCWdyZXAgLXEgImlzby11dGY4LWNvbW1pdCIgb3V0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDIwNC1nZXR0ZXh0LXJlZW5jb2RlLXNhbml0eS5zaCBiL3QvdDAyMDQtZ2V0dGV4dC1yZWVuY29kZS1zYW5pdHkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODQzN2U1MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDQtZ2V0dGV4dC1yZWVuY29kZS1zYW5pdHkuc2gKQEAgLTAsMCArMSw4NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSJHZXR0ZXh0IHJlZW5jb2Rpbmcgb2Ygb3VyICoucG8vKi5tbyBmaWxlcyB3b3JrcyIKKworLiAuL2xpYi1nZXR0ZXh0LnNoCisKKyMgVGhlIGNvbnN0YW50cyB1c2VkIGluIGEgdHJpY2t5IG9ic2VydmF0aW9uIGZvciB1bmRlZmluZWQgYmVoYXZpb3VyCitSVU5FUz0iVElMUkFVTjog4Zq74ZuWIOGas+GaueGaq+GapiDhmqbhmqvhm48g4Zq74ZuWIOGbkuGaouGbnuGbliDhmqnhmr4g4Zqm4Zqr4ZuXIOGbmuGaquGavuGbnuGbliDhmr7hmqnhmrHhmqbhmrnhm5bhmqrhmrHhm57hmqLhm5cg4Zq54ZuB4ZqmIOGapuGaqiDhmrnhm5bhm6XhmqsiCitQVU5UUz0iVElMUkFVTjogPz8gPz8/PyA/Pz8gPz8gPz8/PyA/PyA/Pz8gPz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/ID8/ID8/Pz8iCitNU0dLRVk9IlRFU1Q6IE9sZCBFbmdsaXNoIFJ1bmVzIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdnZXR0ZXh0OiBFbWl0dGluZyBVVEYtOCBmcm9tIG91ciBVVEYtOCAqLm1vIGZpbGVzIC8gSWNlbGFuZGljJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBIYWxsw7MgSGVpbXVyISIgPmV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2xvY2FsZSIgZ2V0dGV4dCAiVEVTVDogSGVsbG8gV29ybGQhIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfTE9DQUxFICdnZXR0ZXh0OiBFbWl0dGluZyBVVEYtOCBmcm9tIG91ciBVVEYtOCAqLm1vIGZpbGVzIC8gUnVuZXMnICcKKyAgICBwcmludGYgIiVzIiAiJFJVTkVTIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICIkTVNHS0VZIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfSVNPX0xPQ0FMRSAnZ2V0dGV4dDogRW1pdHRpbmcgSVNPLTg4NTktMSBmcm9tIG91ciBVVEYtOCAqLm1vIGZpbGVzIC8gSWNlbGFuZGljJyAnCisgICAgcHJpbnRmICJUSUxSQVVOOiBIYWxsw7MgSGVpbXVyISIgfCBpY29udiAtZiBVVEYtOCAtdCBJU084ODU5LTEgPmV4cGVjdCAmJgorICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2lzb19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IEhlbGxvIFdvcmxkISIgPmFjdHVhbCAmJgorICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0lTT19MT0NBTEUgJ2dldHRleHQ6IGltcG9zc2libGUgSVNPLTg4NTktMSBvdXRwdXQnICcKKwlMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19pc29fbG9jYWxlIiBnZXR0ZXh0ICIkTVNHS0VZIiA+cnVuZXMgJiYKKwljYXNlICIkKGNhdCBydW5lcykiIGluCisJIiRNU0dLRVkiKQorCQlzYXkgIllvdXIgc3lzdGVtIGdpdmVzIGJhY2sgdGhlIGtleSB0byBtZXNzYWdlIGNhdGFsb2ciCisJCTs7CisJIiRQVU5UUyIpCisJCXNheSAiWW91ciBzeXN0ZW0gcmVwbGFjZXMgYW4gaW1wb3NzaWJsZSBjaGFyYWN0ZXIgd2l0aCA/IgorCQk7OworCSIkUlVORVMiKQorCQlzYXkgIllvdXIgc3lzdGVtIGdpdmVzIGJhY2sgdGhlIHJhdyBtZXNzYWdlIGZvciBhbiBpbXBvc3NpYmxlIHJlcXVlc3QiCisJCTs7CisJKikKKwkJc2F5ICJXZSBuZXZlciBzYXcgdGhlIGVycm9yIGJlaGF2aW91ciB5b3VyIHN5c3RlbSBleGhpYml0cyIKKwkJZmFsc2UKKwkJOzsKKwllc2FjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9MT0NBTEUgJ2dldHRleHQ6IEZldGNoaW5nIGEgVVRGLTggbXNnaWQgLT4gVVRGLTgnICcKKyAgICBwcmludGYgIlRJTFJBVU46IOKAmmVpbmZhbGRhcuKAmCBvZyDigJ50dsO2ZmFsZGFy4oCcIGfDpnNhbGFwcGlyIiA+ZXhwZWN0ICYmCisgICAgTEFOR1VBR0U9aXMgTENfQUxMPSIkaXNfSVNfbG9jYWxlIiBnZXR0ZXh0ICJURVNUOiDigJhzaW5nbGXigJkgYW5kIOKAnGRvdWJsZeKAnSBxdW90ZXMiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgSG93IHRoZXNlIHF1b3RlcyBnZXQgdHJhbnNsaXRlcmF0ZWQgZGVwZW5kcyBvbiB0aGUgZ2V0dGV4dCBpbXBsZW1lbnRhdGlvbjoKKyMKKyMgICBEZWJpYW46ICAsZWluZmFsZGFyJyBvZyAsLHR2w7ZmYWxkYXIiIFtHTlUgbGliaW50bF0KKyMgICBGcmVlQlNEOiBgZWluZmFsZGFyYCBvZyAidHbDtmZhbGRhciIgIFtHTlUgbGliaW50bF0KKyMgICBTb2xhcmlzOiA/ZWluZmFsZGFyPyBvZyA/dHbDtmZhbGRhcj8gIFtTb2xhcmlzIGxpYmludGxdCisjCisjIEp1c3QgbWFrZSBzdXJlIHRoZSBjb250ZW50cyBhcmUgdHJhbnNsaXRlcmF0ZWQsIGFuZCBkb24ndCB1c2UgZ3JlcCAtcQorIyBzbyB0aGF0IHRoZXNlIGRpZmZlcmVuY2VzIGFyZSBlbWl0dGVkIHVuZGVyIC0tdmVyYm9zZSBmb3IgY3VyaW91cworIyBleWVzLgordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0lTT19MT0NBTEUgJ2dldHRleHQ6IEZldGNoaW5nIGEgVVRGLTggbXNnaWQgLT4gSVNPLTg4NTktMScgJworICAgIExBTkdVQUdFPWlzIExDX0FMTD0iJGlzX0lTX2lzb19sb2NhbGUiIGdldHRleHQgIlRFU1Q6IOKAmHNpbmdsZeKAmSBhbmQg4oCcZG91Ymxl4oCdIHF1b3RlcyIgPmFjdHVhbCAmJgorICAgIGdyZXAgImVpbmZhbGRhciIgYWN0dWFsICYmCisgICAgZ3JlcCAiJChlY2hvIHR2w7ZmYWxkYXIgfCBpY29udiAtZiBVVEYtOCAtdCBJU084ODU5LTEpIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0xPQ0FMRSAnZ2V0dGV4dC5jOiBnaXQgaW5pdCBVVEYtOCAtPiBVVEYtOCcgJworICAgIHByaW50ZiAiQmrDsyB0aWwgdMOzbWEgR2l0IGxpbmQiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19sb2NhbGUiIGdpdCBpbml0IHJlcG8gPmFjdHVhbCAmJgorICAgIHRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHJlcG8iICYmCisgICAgZ3JlcCAiXiQoY2F0IGV4cGVjdCkgIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHRVRURVhUX0lTT19MT0NBTEUgJ2dldHRleHQuYzogZ2l0IGluaXQgVVRGLTggLT4gSVNPLTg4NTktMScgJworICAgIHByaW50ZiAiQmrDsyB0aWwgdMOzbWEgR2l0IGxpbmQiID5leHBlY3QgJiYKKyAgICBMQU5HVUFHRT1pcyBMQ19BTEw9IiRpc19JU19pc29fbG9jYWxlIiBnaXQgaW5pdCByZXBvID5hY3R1YWwgJiYKKyAgICB0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiByZXBvIiAmJgorICAgIGdyZXAgIl4kKGNhdCBleHBlY3QgfCBpY29udiAtZiBVVEYtOCAtdCBJU084ODU5LTEpICIgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDIwNS1nZXR0ZXh0LXBvaXNvbi5zaCBiL3QvdDAyMDUtZ2V0dGV4dC1wb2lzb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjM2MTU5MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAyMDUtZ2V0dGV4dC1wb2lzb24uc2gKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCDDhnZhciBBcm5masO2csOwIEJqYXJtYXNvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdHZXR0ZXh0IFNoZWxsIHBvaXNvbicKKworLiAuL2xpYi1nZXR0ZXh0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9QT0lTT04gInNhbml0eTogXCRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUgaXMgc2V0ICh0byAkR0lUX0lOVEVSTkFMX0dFVFRFWFRfU0hfU0NIRU1FKSIgJworICAgIHRlc3QgLW4gIiRHSVRfSU5URVJOQUxfR0VUVEVYVF9TSF9TQ0hFTUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR0VUVEVYVF9QT0lTT04gJ3Nhbml0eTogJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSIgaXMgcG9pc29uJyAnCisgICAgdGVzdCAiJEdJVF9JTlRFUk5BTF9HRVRURVhUX1NIX1NDSEVNRSIgPSAicG9pc29uIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfUE9JU09OICdnZXR0ZXh0OiBvdXIgZ2V0dGV4dCgpIGZhbGxiYWNrIGhhcyBwb2lzb24gc2VtYW50aWNzJyAnCisgICAgcHJpbnRmICIjIEdFVFRFWFQgUE9JU09OICMiID5leHBlY3QgJiYKKyAgICBnZXR0ZXh0ICJ0ZXN0IiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorICAgIHByaW50ZiAiIyBHRVRURVhUIFBPSVNPTiAjIiA+ZXhwZWN0ICYmCisgICAgZ2V0dGV4dCAidGVzdCBtb3JlIHdvcmRzIiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdFVFRFWFRfUE9JU09OICdldmFsX2dldHRleHQ6IG91ciBldmFsX2dldHRleHQoKSBmYWxsYmFjayBoYXMgcG9pc29uIHNlbWFudGljcycgJworICAgIHByaW50ZiAiIyBHRVRURVhUIFBPSVNPTiAjIiA+ZXhwZWN0ICYmCisgICAgZXZhbF9nZXR0ZXh0ICJ0ZXN0IiA+YWN0dWFsICYmCisgICAgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorICAgIHByaW50ZiAiIyBHRVRURVhUIFBPSVNPTiAjIiA+ZXhwZWN0ICYmCisgICAgZXZhbF9nZXR0ZXh0ICJ0ZXN0IG1vcmUgd29yZHMiID5hY3R1YWwgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDMwMC1jcmVkZW50aWFscy5zaCBiL3QvdDAzMDAtY3JlZGVudGlhbHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDdlZjQ0YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAzMDAtY3JlZGVudGlhbHMuc2gKQEAgLTAsMCArMSwzMDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyBjcmVkZW50aWFsIGhlbHBlciB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItY3JlZGVudGlhbC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBoZWxwZXIgc2NyaXB0cycgJworCWNhdCA+ZHVtcCA8PC1cRU9GICYmCisJd2hvYW1pPSQoZWNobyAkMCB8IHNlZCBzLy4qZ2l0LWNyZWRlbnRpYWwtLy8pCisJZWNobyA+JjIgIiR3aG9hbWk6ICQqIgorCU9JRlM9JElGUworCUlGUz09CisJd2hpbGUgcmVhZCBrZXkgdmFsdWU7IGRvCisJCWVjaG8gPiYyICIkd2hvYW1pOiAka2V5PSR2YWx1ZSIKKwkJZXZhbCAiJGtleT0kdmFsdWUiCisJZG9uZQorCUlGUz0kT0lGUworCUVPRgorCisJd3JpdGVfc2NyaXB0IGdpdC1jcmVkZW50aWFsLXVzZWxlc3MgPDwtXEVPRiAmJgorCS4gLi9kdW1wCisJZXhpdCAwCisJRU9GCisKKwl3cml0ZV9zY3JpcHQgZ2l0LWNyZWRlbnRpYWwtdmVyYmF0aW0gPDwtXEVPRiAmJgorCXVzZXI9JDE7IHNoaWZ0CisJcGFzcz0kMTsgc2hpZnQKKwkuIC4vZHVtcAorCXRlc3QgLXogIiR1c2VyIiB8fCBlY2hvIHVzZXJuYW1lPSR1c2VyCisJdGVzdCAteiAiJHBhc3MiIHx8IGVjaG8gcGFzc3dvcmQ9JHBhc3MKKwlFT0YKKworCVBBVEg9IiRQV0Q6JFBBVEgiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWRlbnRpYWxfZmlsbCBpbnZva2VzIGhlbHBlcicgJworCWNoZWNrIGZpbGwgInZlcmJhdGltIGZvbyBiYXIiIDw8LVxFT0YKKwktLQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsX2ZpbGwgaW52b2tlcyBtdWx0aXBsZSBoZWxwZXJzJyAnCisJY2hlY2sgZmlsbCB1c2VsZXNzICJ2ZXJiYXRpbSBmb28gYmFyIiA8PC1cRU9GCisJLS0KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCXVzZWxlc3M6IGdldAorCXZlcmJhdGltOiBnZXQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlZGVudGlhbF9maWxsIHN0b3BzIHdoZW4gd2UgZ2V0IGEgZnVsbCByZXNwb25zZScgJworCWNoZWNrIGZpbGwgInZlcmJhdGltIG9uZSB0d28iICJ2ZXJiYXRpbSB0aHJlZSBmb3VyIiA8PC1cRU9GCisJLS0KKwl1c2VybmFtZT1vbmUKKwlwYXNzd29yZD10d28KKwktLQorCXZlcmJhdGltOiBnZXQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlZGVudGlhbF9maWxsIGNvbnRpbnVlcyB0aHJvdWdoIHBhcnRpYWwgcmVzcG9uc2UnICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBvbmUgXCJcIiIgInZlcmJhdGltIHR3byB0aHJlZSIgPDwtXEVPRgorCS0tCisJdXNlcm5hbWU9dHdvCisJcGFzc3dvcmQ9dGhyZWUKKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogZ2V0CisJdmVyYmF0aW06IHVzZXJuYW1lPW9uZQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsX2ZpbGwgcGFzc2VzIGFsb25nIG1ldGFkYXRhJyAnCisJY2hlY2sgZmlsbCAidmVyYmF0aW0gb25lIHR3byIgPDwtXEVPRgorCXByb3RvY29sPWZ0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwktLQorCXByb3RvY29sPWZ0cAorCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwl1c2VybmFtZT1vbmUKKwlwYXNzd29yZD10d28KKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogcHJvdG9jb2w9ZnRwCisJdmVyYmF0aW06IGhvc3Q9ZXhhbXBsZS5jb20KKwl2ZXJiYXRpbTogcGF0aD1mb28uZ2l0CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWRlbnRpYWxfYXBwcm92ZSBjYWxscyBhbGwgaGVscGVycycgJworCWNoZWNrIGFwcHJvdmUgdXNlbGVzcyAidmVyYmF0aW0gb25lIHR3byIgPDwtXEVPRgorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJLS0KKwl1c2VsZXNzOiBzdG9yZQorCXVzZWxlc3M6IHVzZXJuYW1lPWZvbworCXVzZWxlc3M6IHBhc3N3b3JkPWJhcgorCXZlcmJhdGltOiBzdG9yZQorCXZlcmJhdGltOiB1c2VybmFtZT1mb28KKwl2ZXJiYXRpbTogcGFzc3dvcmQ9YmFyCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBib3RoZXIgc3RvcmluZyBwYXNzd29yZC1sZXNzIGNyZWRlbnRpYWwnICcKKwljaGVjayBhcHByb3ZlIHVzZWxlc3MgPDwtXEVPRgorCXVzZXJuYW1lPWZvbworCS0tCisJLS0KKwlFT0YKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVkZW50aWFsX3JlamVjdCBjYWxscyBhbGwgaGVscGVycycgJworCWNoZWNrIHJlamVjdCB1c2VsZXNzICJ2ZXJiYXRpbSBvbmUgdHdvIiA8PC1cRU9GCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwktLQorCXVzZWxlc3M6IGVyYXNlCisJdXNlbGVzczogdXNlcm5hbWU9Zm9vCisJdXNlbGVzczogcGFzc3dvcmQ9YmFyCisJdmVyYmF0aW06IGVyYXNlCisJdmVyYmF0aW06IHVzZXJuYW1lPWZvbworCXZlcmJhdGltOiBwYXNzd29yZD1iYXIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlcm5hbWVzIGNhbiBiZSBwcmVzZXJ2ZWQnICcKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBcIlwiIHRocmVlIiA8PC1cRU9GCisJdXNlcm5hbWU9b25lCisJLS0KKwl1c2VybmFtZT1vbmUKKwlwYXNzd29yZD10aHJlZQorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiB1c2VybmFtZT1vbmUKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlcm5hbWVzIGNhbiBiZSBvdmVycmlkZGVuJyAnCisJY2hlY2sgZmlsbCAidmVyYmF0aW0gdHdvIHRocmVlIiA8PC1cRU9GCisJdXNlcm5hbWU9b25lCisJLS0KKwl1c2VybmFtZT10d28KKwlwYXNzd29yZD10aHJlZQorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiB1c2VybmFtZT1vbmUKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGJvdGhlciBjb21wbGV0aW5nIGFscmVhZHktZnVsbCBjcmVkZW50aWFsJyAnCisJY2hlY2sgZmlsbCAidmVyYmF0aW0gdGhyZWUgZm91ciIgPDwtXEVPRgorCXVzZXJuYW1lPW9uZQorCXBhc3N3b3JkPXR3bworCS0tCisJdXNlcm5hbWU9b25lCisJcGFzc3dvcmQ9dHdvCisJLS0KKwlFT0YKKycKKworIyBXZSBjYW4ndCB0ZXN0IHRoZSBiYXNpYyB0ZXJtaW5hbCBwYXNzd29yZCBwcm9tcHQgaGVyZSBiZWNhdXNlCisjIGdldHBhc3MoKSB0cmllcyB0b28gaGFyZCB0byBmaW5kIHRoZSByZWFsIHRlcm1pbmFsLiBCdXQgaWYgb3VyCisjIGFza3Bhc3MgaGVscGVyIGlzIHJ1biwgd2Uga25vdyB0aGUgaW50ZXJuYWwgZ2V0cGFzcyBpcyB3b3JraW5nLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgaGVscGVyIGxpc3QgZmFsbHMgYmFjayB0byBpbnRlcm5hbCBnZXRwYXNzJyAnCisJY2hlY2sgZmlsbCA8PC1cRU9GCisJLS0KKwl1c2VybmFtZT1hc2twYXNzLXVzZXJuYW1lCisJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCS0tCisJYXNrcGFzczogVXNlcm5hbWU6CisJYXNrcGFzczogUGFzc3dvcmQ6CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVybmFsIGdldHBhc3MgZG9lcyBub3QgYXNrIGZvciBrbm93biB1c2VybmFtZScgJworCWNoZWNrIGZpbGwgPDwtXEVPRgorCXVzZXJuYW1lPWZvbworCS0tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCS0tCisJYXNrcGFzczogUGFzc3dvcmQ6CisJRU9GCisnCisKK0hFTFBFUj0iIWYoKSB7CisJCWNhdCA+L2Rldi9udWxsCisJCWVjaG8gdXNlcm5hbWU9Zm9vCisJCWVjaG8gcGFzc3dvcmQ9YmFyCisJfTsgZiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3BlY3QgY29uZmlndXJlZCBjcmVkZW50aWFscycgJworCXRlc3RfY29uZmlnIGNyZWRlbnRpYWwuaGVscGVyICIkSEVMUEVSIiAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCS0tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YmFyCisJLS0KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggY29uZmlndXJlZCBjcmVkZW50aWFsJyAnCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLmhlbHBlciAiJEhFTFBFUiIgJiYKKwljaGVjayBmaWxsIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPXJlcG8uZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgbWF0Y2ggY29uZmlndXJlZCBjcmVkZW50aWFsJyAnCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2Zvby5oZWxwZXIgIiRIRUxQRVIiICYmCisJY2hlY2sgZmlsbCA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWJhcgorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWJhcgorCXVzZXJuYW1lPWFza3Bhc3MtdXNlcm5hbWUKKwlwYXNzd29yZD1hc2twYXNzLXBhc3N3b3JkCisJLS0KKwlhc2twYXNzOiBVc2VybmFtZSBmb3IgJ1wnJ2h0dHBzOi8vYmFyJ1wnJzoKKwlhc2twYXNzOiBQYXNzd29yZCBmb3IgJ1wnJ2h0dHBzOi8vYXNrcGFzcy11c2VybmFtZUBiYXInXCcnOgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHVzZXJuYW1lIGZyb20gY29uZmlnJyAnCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLnVzZXJuYW1lIGZvbyAmJgorCWNoZWNrIGZpbGwgPDwtXEVPRgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9Zm9vCisJcGFzc3dvcmQ9YXNrcGFzcy1wYXNzd29yZAorCS0tCisJYXNrcGFzczogUGFzc3dvcmQgZm9yICdcJydodHRwczovL2Zvb0BleGFtcGxlLmNvbSdcJyc6CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgcGF0aHMgY2FuIGJlIHBhcnQgb2YgY29udGV4dCcgJworCWNoZWNrIGZpbGwgInZlcmJhdGltIGZvbyBiYXIiIDw8LVxFT0YgJiYKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPWZvbworCXBhc3N3b3JkPWJhcgorCS0tCisJdmVyYmF0aW06IGdldAorCXZlcmJhdGltOiBwcm90b2NvbD1odHRwcworCXZlcmJhdGltOiBob3N0PWV4YW1wbGUuY29tCisJRU9GCisJdGVzdF9jb25maWcgY3JlZGVudGlhbC5odHRwczovL2V4YW1wbGUuY29tLnVzZUh0dHBQYXRoIHRydWUgJiYKKwljaGVjayBmaWxsICJ2ZXJiYXRpbSBmb28gYmFyIiA8PC1cRU9GCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJcGF0aD1mb28uZ2l0CisJLS0KKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwlwYXRoPWZvby5naXQKKwl1c2VybmFtZT1mb28KKwlwYXNzd29yZD1iYXIKKwktLQorCXZlcmJhdGltOiBnZXQKKwl2ZXJiYXRpbTogcHJvdG9jb2w9aHR0cHMKKwl2ZXJiYXRpbTogaG9zdD1leGFtcGxlLmNvbQorCXZlcmJhdGltOiBwYXRoPWZvby5naXQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGVscGVycyBjYW4gYWJvcnQgdGhlIHByb2Nlc3MnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgXAorCQktYyBjcmVkZW50aWFsLmhlbHBlcj0iIWYoKSB7IGVjaG8gcXVpdD0xOyB9OyBmIiBcCisJCS1jIGNyZWRlbnRpYWwuaGVscGVyPSJ2ZXJiYXRpbSBmb28gYmFyIiBcCisJCWNyZWRlbnRpYWwgZmlsbCA+c3Rkb3V0ICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdGRvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QwMzAxLWNyZWRlbnRpYWwtY2FjaGUuc2ggYi90L3QwMzAxLWNyZWRlbnRpYWwtY2FjaGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODJjODQxMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDAzMDEtY3JlZGVudGlhbC1jYWNoZS5zaApAQCAtMCwwICsxLDIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY3JlZGVudGlhbC1jYWNoZSB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItY3JlZGVudGlhbC5zaAorCit0ZXN0IC16ICIkTk9fVU5JWF9TT0NLRVRTIiB8fCB7CisJc2tpcF9hbGw9J3NraXBwaW5nIGNyZWRlbnRpYWwtY2FjaGUgdGVzdHMsIHVuaXggc29ja2V0cyBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorfQorCisjIGRvbid0IGxlYXZlIGEgc3RhbGUgZGFlbW9uIHJ1bm5pbmcKK3RyYXAgJ2NvZGU9JD87IGdpdCBjcmVkZW50aWFsLWNhY2hlIGV4aXQ7IChleGl0ICRjb2RlKTsgZGllJyBFWElUCisKK2hlbHBlcl90ZXN0IGNhY2hlCitoZWxwZXJfdGVzdF90aW1lb3V0IGNhY2hlIC0tdGltZW91dD0xCisKKyMgd2UgY2FuJ3QgcmVseSBvbiBvdXIgInRyYXAiIGFib3ZlIHdvcmtpbmcgYWZ0ZXIgdGVzdF9kb25lLAorIyBhcyB0ZXN0X2RvbmUgd2lsbCBkZWxldGUgdGhlIHRyYXNoIGRpcmVjdG9yeSBjb250YWluaW5nCisjIG91ciBzb2NrZXQsIGxlYXZpbmcgdXMgd2l0aCBubyB3YXkgdG8gYWNjZXNzIHRoZSBkYWVtb24uCitnaXQgY3JlZGVudGlhbC1jYWNoZSBleGl0CisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MDMwMi1jcmVkZW50aWFsLXN0b3JlLnNoIGIvdC90MDMwMi1jcmVkZW50aWFsLXN0b3JlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFkOGQxZjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QwMzAyLWNyZWRlbnRpYWwtc3RvcmUuc2gKQEAgLTAsMCArMSwxMjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjcmVkZW50aWFsLXN0b3JlIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1jcmVkZW50aWFsLnNoCisKK2hlbHBlcl90ZXN0IHN0b3JlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doZW4geGRnIGZpbGUgZG9lcyBub3QgZXhpc3QsIHhkZyBmaWxlIG5vdCBjcmVhdGVkJyAnCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgIiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIiAmJgorCXRlc3QgLXMgIiRIT01FLy5naXQtY3JlZGVudGlhbHMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHhkZyBmaWxlJyAnCisJcm0gLWYgIiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJbWtkaXIgLXAgIiRIT01FLy5jb25maWcvZ2l0IiAmJgorCT4iJEhPTUUvLmNvbmZpZy9naXQvY3JlZGVudGlhbHMiCisnCisKK2hlbHBlcl90ZXN0IHN0b3JlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doZW4geGRnIGZpbGUgZXhpc3RzLCBob21lIGZpbGUgbm90IGNyZWF0ZWQnICcKKwl0ZXN0IC1zICIkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFscyIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiJEhPTUUvLmdpdC1jcmVkZW50aWFscyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY3VzdG9tIHhkZyBmaWxlJyAnCisJcm0gLWYgIiRIT01FLy5naXQtY3JlZGVudGlhbHMiICYmCisJcm0gLWYgIiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIiAmJgorCW1rZGlyIC1wICIkSE9NRS94ZGcvZ2l0IiAmJgorCT4iJEhPTUUveGRnL2dpdC9jcmVkZW50aWFscyIKKycKKworWERHX0NPTkZJR19IT01FPSIkSE9NRS94ZGciCitleHBvcnQgWERHX0NPTkZJR19IT01FCitoZWxwZXJfdGVzdCBzdG9yZQordW5zZXQgWERHX0NPTkZJR19IT01FCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lmIGN1c3RvbSB4ZGcgZmlsZSBleGlzdHMsIGhvbWUgYW5kIHhkZyBmaWxlcyBub3QgY3JlYXRlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgJEhPTUUveGRnL2dpdC9jcmVkZW50aWFscyIgJiYKKwl0ZXN0IC1zICIkSE9NRS94ZGcvZ2l0L2NyZWRlbnRpYWxzIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFscyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0OiB1c2UgaG9tZSBmaWxlIGlmIGJvdGggaG9tZSBhbmQgeGRnIGZpbGVzIGhhdmUgbWF0Y2hlcycgJworCWVjaG8gImh0dHBzOi8vaG9tZS11c2VyOmhvbWUtcGFzc0BleGFtcGxlLmNvbSIgPiIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCW1rZGlyIC1wICIkSE9NRS8uY29uZmlnL2dpdCIgJiYKKwllY2hvICJodHRwczovL3hkZy11c2VyOnhkZy1wYXNzQGV4YW1wbGUuY29tIiA+IiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIiAmJgorCWNoZWNrIGZpbGwgc3RvcmUgPDwtXEVPRgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9aG9tZS11c2VyCisJcGFzc3dvcmQ9aG9tZS1wYXNzCisJLS0KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0OiB1c2UgeGRnIGZpbGUgaWYgaG9tZSBmaWxlIGhhcyBubyBtYXRjaGVzJyAnCisJPiIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCW1rZGlyIC1wICIkSE9NRS8uY29uZmlnL2dpdCIgJiYKKwllY2hvICJodHRwczovL3hkZy11c2VyOnhkZy1wYXNzQGV4YW1wbGUuY29tIiA+IiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIiAmJgorCWNoZWNrIGZpbGwgc3RvcmUgPDwtXEVPRgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCS0tCisJcHJvdG9jb2w9aHR0cHMKKwlob3N0PWV4YW1wbGUuY29tCisJdXNlcm5hbWU9eGRnLXVzZXIKKwlwYXNzd29yZD14ZGctcGFzcworCS0tCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnZ2V0OiB1c2UgeGRnIGZpbGUgaWYgaG9tZSBmaWxlIGlzIHVucmVhZGFibGUnICcKKwllY2hvICJodHRwczovL2hvbWUtdXNlcjpob21lLXBhc3NAZXhhbXBsZS5jb20iID4iJEhPTUUvLmdpdC1jcmVkZW50aWFscyIgJiYKKwljaG1vZCAtciAiJEhPTUUvLmdpdC1jcmVkZW50aWFscyIgJiYKKwlta2RpciAtcCAiJEhPTUUvLmNvbmZpZy9naXQiICYmCisJZWNobyAiaHR0cHM6Ly94ZGctdXNlcjp4ZGctcGFzc0BleGFtcGxlLmNvbSIgPiIkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFscyIgJiYKKwljaGVjayBmaWxsIHN0b3JlIDw8LVxFT0YKKwlwcm90b2NvbD1odHRwcworCWhvc3Q9ZXhhbXBsZS5jb20KKwktLQorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPXhkZy11c2VyCisJcGFzc3dvcmQ9eGRnLXBhc3MKKwktLQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdG9yZTogaWYgYm90aCB4ZGcgYW5kIGhvbWUgZmlsZXMgZXhpc3QsIG9ubHkgc3RvcmUgaW4gaG9tZSBmaWxlJyAnCisJPiIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCW1rZGlyIC1wICIkSE9NRS8uY29uZmlnL2dpdCIgJiYKKwk+IiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIiAmJgorCWNoZWNrIGFwcHJvdmUgc3RvcmUgPDwtXEVPRiAmJgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCXVzZXJuYW1lPXN0b3JlLXVzZXIKKwlwYXNzd29yZD1zdG9yZS1wYXNzCisJRU9GCisJZWNobyAiaHR0cHM6Ly9zdG9yZS11c2VyOnN0b3JlLXBhc3NAZXhhbXBsZS5jb20iID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkSE9NRS8uZ2l0LWNyZWRlbnRpYWxzIiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSAiJEhPTUUvLmNvbmZpZy9naXQvY3JlZGVudGlhbHMiCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJhc2U6IGVyYXNlIG1hdGNoaW5nIGNyZWRlbnRpYWxzIGZyb20gYm90aCB4ZGcgYW5kIGhvbWUgZmlsZXMnICcKKwllY2hvICJodHRwczovL2hvbWUtdXNlcjpob21lLXBhc3NAZXhhbXBsZS5jb20iID4iJEhPTUUvLmdpdC1jcmVkZW50aWFscyIgJiYKKwlta2RpciAtcCAiJEhPTUUvLmNvbmZpZy9naXQiICYmCisJZWNobyAiaHR0cHM6Ly94ZGctdXNlcjp4ZGctcGFzc0BleGFtcGxlLmNvbSIgPiIkSE9NRS8uY29uZmlnL2dpdC9jcmVkZW50aWFscyIgJiYKKwljaGVjayByZWplY3Qgc3RvcmUgPDwtXEVPRiAmJgorCXByb3RvY29sPWh0dHBzCisJaG9zdD1leGFtcGxlLmNvbQorCUVPRgorCXRlc3RfbXVzdF9iZV9lbXB0eSAiJEhPTUUvLmdpdC1jcmVkZW50aWFscyIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgIiRIT01FLy5jb25maWcvZ2l0L2NyZWRlbnRpYWxzIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDAzMDMtY3JlZGVudGlhbC1leHRlcm5hbC5zaCBiL3QvdDAzMDMtY3JlZGVudGlhbC1leHRlcm5hbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMDI4ZmQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MDMwMy1jcmVkZW50aWFsLWV4dGVybmFsLnNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdleHRlcm5hbCBjcmVkZW50aWFsIGhlbHBlciB0ZXN0cworCitUaGlzIGlzIGEgdG9vbCBmb3IgYXV0aG9ycyBvZiBleHRlcm5hbCBoZWxwZXIgdG9vbHMgdG8gc2FuaXR5LWNoZWNrCit0aGVpciBoZWxwZXJzLiBJZiB5b3UgaGF2ZSB3cml0dGVuIHRoZSAiZ2l0LWNyZWRlbnRpYWwtZm9vIiBoZWxwZXIsCit5b3UgY2hlY2sgaXQgd2l0aDoKKworICBtYWtlIEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSPWZvbyB0MDMwMy1jcmVkZW50aWFsLWV4dGVybmFsLnNoCisKK1RoaXMgYXNzdW1lcyB0aGF0IHlvdXIgaGVscGVyIGlzIGNhcGFibGUgb2YgYm90aCBzdG9yaW5nIGFuZAorcmV0cmlldmluZyBjcmVkZW50aWFscyAoc29tZSBoZWxwZXJzIG1heSBiZSByZWFkLW9ubHksIGFuZCB0aGV5IHdpbGwKK2ZhaWwgdGhlc2UgdGVzdHMpLgorCitQbGVhc2Ugbm90ZSB0aGF0IHRoZSBpbmRpdmlkdWFsIHRlc3RzIGRvIG5vdCB2ZXJpZnkgYWxsIG9mIHRoZQorcHJlY29uZGl0aW9ucyB0aGVtc2VsdmVzLCBidXQgcmF0aGVyIGJ1aWxkIG9uIGVhY2ggb3RoZXIuIEEgZmFpbGluZwordGVzdCBtZWFucyB0aGF0IHRlc3RzIGxhdGVyIGluIHRoZSBzZXF1ZW5jZSBjYW4gcmV0dXJuIGZhbHNlICJPSyIKK3Jlc3VsdHMuCisKK0lmIHlvdXIgaGVscGVyIHN1cHBvcnRzIHRpbWUtYmFzZWQgZXhwaXJhdGlvbiB3aXRoIGEgY29uZmlndXJhYmxlCit0aW1lb3V0LCB5b3UgY2FuIHRlc3QgdGhhdCBmZWF0dXJlIHdpdGg6CisKKyAgbWFrZSBHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUj1mb28gXAorICAgICAgIEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSX1RJTUVPVVQ9ImZvbyAtLXRpbWVvdXQ9MSIgXAorICAgICAgIHQwMzAzLWNyZWRlbnRpYWwtZXh0ZXJuYWwuc2gKKworSWYgeW91ciBoZWxwZXIgcmVxdWlyZXMgYWRkaXRpb25hbCBzZXR1cCBiZWZvcmUgdGhlIHRlc3RzIGFyZSBzdGFydGVkLAoreW91IGNhbiBzZXQgR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVJfU0VUVVAgdG8gYSBzZXF1ZW5jZSBvZiBzaGVsbAorY29tbWFuZHMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItY3JlZGVudGlhbC5zaAorCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVIiOyB0aGVuCisJc2tpcF9hbGw9InVzZWQgdG8gdGVzdCBleHRlcm5hbCBjcmVkZW50aWFsIGhlbHBlcnMiCisJdGVzdF9kb25lCitmaQorCit0ZXN0IC16ICIkR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVJfU0VUVVAiIHx8CisJZXZhbCAiJEdJVF9URVNUX0NSRURFTlRJQUxfSEVMUEVSX1NFVFVQIgorCisjIGNsZWFuIGJlZm9yZSB0aGUgdGVzdCBpbiBjYXNlIHRoZXJlIGlzIGNydWZ0IGxlZnQKKyMgb3ZlciBmcm9tIGEgcHJldmlvdXMgcnVuIHRoYXQgd291bGQgaW1wYWN0IHJlc3VsdHMKK2hlbHBlcl90ZXN0X2NsZWFuICIkR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVIiCisKK2hlbHBlcl90ZXN0ICIkR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVIiCisKK2lmIHRlc3QgLXogIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUl9USU1FT1VUIjsgdGhlbgorCXNheSAiIyBza2lwcGluZyB0aW1lb3V0IHRlc3RzIChHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUl9USU1FT1VUIG5vdCBzZXQpIgorZWxzZQorCWhlbHBlcl90ZXN0X3RpbWVvdXQgIiRHSVRfVEVTVF9DUkVERU5USUFMX0hFTFBFUl9USU1FT1VUIgorZmkKKworIyBjbGVhbiBhZnRlcndhcmRzIHNvIHRoYXQgd2UgYXJlIGdvb2QgY2l0aXplbnMKKyMgYW5kIGRvbid0IGxlYXZlIGNydWZ0IGluIHRoZSBoZWxwZXIncyBzdG9yYWdlLCB3aGljaAorIyBtaWdodCBiZSBsb25nLXRlcm0gc3lzdGVtIHN0b3JhZ2UKK2hlbHBlcl90ZXN0X2NsZWFuICIkR0lUX1RFU1RfQ1JFREVOVElBTF9IRUxQRVIiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoIGIvdC90MTAwMC1yZWFkLXRyZWUtbS0zd2F5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwYjc5YjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDAwLXJlYWQtdHJlZS1tLTN3YXkuc2gKQEAgLTAsMCArMSw1MjkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGhyZWUgd2F5IG1lcmdlIHdpdGggcmVhZC10cmVlIC1tCisKK1RoaXMgdGVzdCB0cmllcyB0aHJlZS13YXkgbWVyZ2Ugd2l0aCByZWFkLXRyZWUgLW0KKworVGhlcmUgaXMgb25lIGFuY2VzdG9yIChjYWxsZWQgTyBmb3IgT3JpZ2luYWwpIGFuZCB0d28gYnJhbmNoZXMgQQorYW5kIEIgZGVyaXZlZCBmcm9tIGl0LiAgV2Ugd2FudCB0byBkbyBhIDMtd2F5IG1lcmdlIGJldHdlZW4gQSBhbmQKK0IsIHVzaW5nIE8gYXMgdGhlIGNvbW1vbiBhbmNlc3Rvci4KKworICAgIG1lcmdlIEEgTyBCCisKK0RlY2lzaW9ucyBhcmUgbWFkZSBieSBjb21wYXJpbmcgY29udGVudHMgb2YgTywgQSBhbmQgQiBwYXRobmFtZQorYnkgcGF0aG5hbWUuICBUaGUgcmVzdWx0IGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBndWlkaW5nCitwcmluY2lwbGU6CisKKyAtIElmIG9ubHkgQSBkb2VzIHNvbWV0aGluZyB0byBpdCBhbmQgQiBkb2VzIG5vdCB0b3VjaCBpdCwgdGFrZQorICAgd2hhdGV2ZXIgQSBkb2VzLgorCisgLSBJZiBvbmx5IEIgZG9lcyBzb21ldGhpbmcgdG8gaXQgYW5kIEEgZG9lcyBub3QgdG91Y2ggaXQsIHRha2UKKyAgIHdoYXRldmVyIEIgZG9lcy4KKworIC0gSWYgYm90aCBBIGFuZCBCIGRvZXMgc29tZXRoaW5nIGJ1dCBpbiB0aGUgc2FtZSB3YXksIHRha2UKKyAgIHdoYXRldmVyIHRoZXkgZG8uCisKKyAtIElmIEEgYW5kIEIgZG9lcyBzb21ldGhpbmcgYnV0IGRpZmZlcmVudCB0aGluZ3MsIHdlIG5lZWQgYQorICAgMy13YXkgbWVyZ2U6CisKKyAgIC0gV2UgY2Fubm90IGRvIGFueXRoaW5nIGFib3V0IHRoZSBmb2xsb3dpbmcgY2FzZXM6CisKKyAgICAgKiBPIGRvZXMgbm90IGhhdmUgaXQuICBBIGFuZCBCIGJvdGggbXVzdCBiZSBhZGRpbmcgdG8gdGhlCisgICAgICAgc2FtZSBwYXRoIGluZGVwZW5kZW50bHkuCisKKyAgICAgKiBBIGRlbGV0ZXMgaXQuICBCIG11c3QgYmUgbW9kaWZ5aW5nLgorCisgICAtIE90aGVyd2lzZSwgQSBhbmQgQiBhcmUgbW9kaWZ5aW5nLiAgUnVuIDMtd2F5IG1lcmdlLgorCitGaXJzdCwgdGhlIGNhc2UgbWF0cml4LgorCisgLSBWZXJ0aWNhbCBheGlzIGlzIGZvciBBJ1wnJ3MgYWN0aW9ucy4KKyAtIEhvcml6b250YWwgYXhpcyBpcyBmb3IgQidcJydzIGFjdGlvbnMuCisKKy4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBBICAgICAgICBCIHwgTm8gQWN0aW9uICB8ICAgRGVsZXRlICAgfCAgIE1vZGlmeSAgIHwgICAgQWRkICAgICB8Cit8LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLXwKK3wgTm8gQWN0aW9uICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfAorfCAgICAgICAgICAgIHwgc2VsZWN0IE8gICB8IGRlbGV0ZSAgICAgfCBzZWxlY3QgQiAgIHwgc2VsZWN0IEIgICB8Cit8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwKK3wtLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tfAorfCBEZWxldGUgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAqKioqKioqKioqIHwgICAgY2FuICAgICB8Cit8ICAgICAgICAgICAgfCBkZWxldGUgICAgIHwgZGVsZXRlICAgICB8IG1lcmdlICAgICAgfCAgICBub3QgICAgIHwKK3wgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICBoYXBwZW4gICAgfAorfC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS18Cit8IE1vZGlmeSAgICAgfCAgICAgICAgICAgIHwgKioqKioqKioqKiB8ID8/Pz8/Pz8/Pz8gfCAgICBjYW4gICAgIHwKK3wgICAgICAgICAgICB8IHNlbGVjdCBBICAgfCBtZXJnZSAgICAgIHwgc2VsZWN0IEE9QiB8ICAgIG5vdCAgICAgfAorfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCBtZXJnZSAgICAgIHwgIGhhcHBlbiAgICB8Cit8LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLXwKK3wgQWRkICAgICAgICB8ICAgICAgICAgICAgfCAgICBjYW4gICAgIHwgICAgY2FuICAgICB8ID8/Pz8/Pz8/Pz8gfAorfCAgICAgICAgICAgIHwgc2VsZWN0IEEgICB8ICAgIG5vdCAgICAgfCAgICBub3QgICAgIHwgc2VsZWN0IEE9QiB8Cit8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgIGhhcHBlbiAgICB8ICBoYXBwZW4gICAgfCBtZXJnZSAgICAgIHwKKy4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorCitJbiBhZGRpdGlvbjoKKworIFNTOiBhIHNwZWNpYWwgY2FzZSBvZiBNTSwgd2hlcmUgQSBhbmQgQiBtYWtlcyB0aGUgc2FtZSBtb2RpZmljYXRpb24uCisgTEw6IGEgc3BlY2lhbCBjYXNlIG9mIEFBLCB3aGVyZSBBIGFuZCBCIGNyZWF0ZXMgdGhlIHNhbWUgZmlsZS4KKyBUVDogYSBzcGVjaWFsIGNhc2Ugb2YgTU0sIHdoZXJlIEEgYW5kIEIgbWFrZXMgbWVyZ2VhYmxlIGNoYW5nZXMuCisgREY6IGEgc3BlY2lhbCBjYXNlLCB3aGVyZSBBIG1ha2VzIGEgZGlyZWN0b3J5IGFuZCBCIG1ha2VzIGEgZmlsZS4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS1tLTN3YXkuc2gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUcml2aWFsICJtYWpvcml0eSB3aGVuIDMgc3RhZ2VzIGV4aXN0IiBtZXJnZSBwbHVzICMyQUxULCAjM0FMVAorIyBhbmQgIzVBTFQgdHJpdmlhbCBtZXJnZXMuCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCisxMDA2NDQgWCAyCUFBCisxMDA2NDQgWCAzCUFBCisxMDA2NDQgWCAwCUFOCisxMDA2NDQgWCAxCURECisxMDA2NDQgWCAzCURGCisxMDA2NDQgWCAyCURGL0RGCisxMDA2NDQgWCAxCURNCisxMDA2NDQgWCAzCURNCisxMDA2NDQgWCAxCUROCisxMDA2NDQgWCAzCUROCisxMDA2NDQgWCAwCUxMCisxMDA2NDQgWCAxCU1ECisxMDA2NDQgWCAyCU1ECisxMDA2NDQgWCAxCU1NCisxMDA2NDQgWCAyCU1NCisxMDA2NDQgWCAzCU1NCisxMDA2NDQgWCAwCU1OCisxMDA2NDQgWCAwCU5BCisxMDA2NDQgWCAxCU5ECisxMDA2NDQgWCAyCU5ECisxMDA2NDQgWCAwCU5NCisxMDA2NDQgWCAwCU5OCisxMDA2NDQgWCAwCVNTCisxMDA2NDQgWCAxCVRUCisxMDA2NDQgWCAyCVRUCisxMDA2NDQgWCAzCVRUCisxMDA2NDQgWCAyCVovQUEKKzEwMDY0NCBYIDMJWi9BQQorMTAwNjQ0IFggMAlaL0FOCisxMDA2NDQgWCAxCVovREQKKzEwMDY0NCBYIDEJWi9ETQorMTAwNjQ0IFggMwlaL0RNCisxMDA2NDQgWCAxCVovRE4KKzEwMDY0NCBYIDMJWi9ETgorMTAwNjQ0IFggMQlaL01ECisxMDA2NDQgWCAyCVovTUQKKzEwMDY0NCBYIDEJWi9NTQorMTAwNjQ0IFggMglaL01NCisxMDA2NDQgWCAzCVovTU0KKzEwMDY0NCBYIDAJWi9NTgorMTAwNjQ0IFggMAlaL05BCisxMDA2NDQgWCAxCVovTkQKKzEwMDY0NCBYIDIJWi9ORAorMTAwNjQ0IFggMAlaL05NCisxMDA2NDQgWCAwCVovTk4KK0VPRgorCitjaGVja19yZXN1bHQgKCkgeworICAgIGdpdCBscy1maWxlcyAtLXN0YWdlIHwgc2VkIC1lICdzLyAnIiRfeDQwIicgLyBYIC8nID5jdXJyZW50ICYmCisgICAgdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorfQorCisjIFRoaXMgaXMgZG9uZSBvbiBhbiBlbXB0eSB3b3JrIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIG5vcm1hbAorIyBtZXJnZSBwZXJzb24gYmVoYXZpb3VyLgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzMtd2F5IG1lcmdlIHdpdGggZ2l0IHJlYWQtdHJlZSAtbSwgZW1wdHkgY2FjaGUnIFwKKyAgICAicm0gLWZyIFtORE1BTFRTXVtORE1BTFRTRl0gWiAmJgorICAgICBybSAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKyAgICAgY2hlY2tfcmVzdWx0IgorCisjIFRoaXMgc3RhcnRzIG91dCB3aXRoIHRoZSBmaXJzdCBoZWFkLCB3aGljaCBpcyB0aGUgbm9ybWFsCisjIHBhdGNoIHN1Ym1pdHRlciBiZWhhdmlvdXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMy13YXkgbWVyZ2Ugd2l0aCBnaXQgcmVhZC10cmVlIC1tLCBtYXRjaCBIJyBcCisgICAgInJtIC1mciBbTkRNQUxUU11bTkRNQUxUU0ZdIFogJiYKKyAgICAgcm0gLmdpdC9pbmRleCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlX0EgJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IC1hICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKyAgICAgY2hlY2tfcmVzdWx0IgorCis6IDw8XEVORF9PRl9DQVNFX1RBQkxFCisKK1dlIGhhdmUgc28gZmFyIHRlc3RlZCBvbmx5IGVtcHR5IGluZGV4IGFuZCBjbGVhbi1hbmQtbWF0Y2hpbmctQSBpbmRleAorY2FzZSB3aGljaCBhcmUgdHJpdmlhbC4gIE1ha2Ugc3VyZSBpbmRleCByZXF1aXJlbWVudHMgYXJlIGFsc28KK2NoZWNrZWQuCisKKyJnaXQgcmVhZC10cmVlIC1tIE8gQSBCIgorCisgICAgIE8gICAgICAgQSAgICAgICBCICAgICAgICAgcmVzdWx0ICAgICAgaW5kZXggcmVxdWlyZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDEgIG1pc3NpbmcgbWlzc2luZyBtaXNzaW5nICAgLSAgICAgICAgICAgbXVzdCBub3QgZXhpc3QuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDIgIG1pc3NpbmcgbWlzc2luZyBleGlzdHMgICAgdGFrZSBCKiAgICAgbXVzdCBtYXRjaCBCLCBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDMgIG1pc3NpbmcgZXhpc3RzICBtaXNzaW5nICAgdGFrZSBBKiAgICAgbXVzdCBtYXRjaCBBLCBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDQgIG1pc3NpbmcgZXhpc3RzICBBIT1CICAgICAgbm8gbWVyZ2UgICAgbXVzdCBtYXRjaCBBIGFuZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwLXRvLWRhdGUsIGlmIGV4aXN0cy4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgNSAgbWlzc2luZyBleGlzdHMgIEE9PUIgICAgICB0YWtlIEEgICAgICBtdXN0IG1hdGNoIEEsIGlmIGV4aXN0cy4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgNiAgZXhpc3RzICBtaXNzaW5nIG1pc3NpbmcgICByZW1vdmUgICAgICBtdXN0IG5vdCBleGlzdC4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgNyAgZXhpc3RzICBtaXNzaW5nIE8hPUIgICAgICBubyBtZXJnZSAgICBtdXN0IG5vdCBleGlzdC4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgOCAgZXhpc3RzICBtaXNzaW5nIE89PUIgICAgICByZW1vdmUgICAgICBtdXN0IG5vdCBleGlzdC4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgOSAgZXhpc3RzICBPIT1BICAgIG1pc3NpbmcgICBubyBtZXJnZSAgICBtdXN0IG1hdGNoIEEgYW5kIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAtdG8tZGF0ZSwgaWYgZXhpc3RzLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDEwICBleGlzdHMgIE89PUEgICAgbWlzc2luZyAgIG5vIG1lcmdlICAgIG11c3QgbWF0Y2ggQQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDExICBleGlzdHMgIE8hPUEgICAgTyE9QiAgICAgIG5vIG1lcmdlICAgIG11c3QgbWF0Y2ggQSBhbmQgYmUKKyAgICAgICAgICAgICAgICAgICAgIEEhPUIgICAgICAgICAgICAgICAgICB1cC10by1kYXRlLCBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMTIgIGV4aXN0cyAgTyE9QSAgICBPIT1CICAgICAgdGFrZSBBICAgICAgbXVzdCBtYXRjaCBBLCBpZiBleGlzdHMuCisgICAgICAgICAgICAgICAgICAgICBBPT1CCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMTMgIGV4aXN0cyAgTyE9QSAgICBPPT1CICAgICAgdGFrZSBBICAgICAgbXVzdCBtYXRjaCBBLCBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMTQgIGV4aXN0cyAgTz09QSAgICBPIT1CICAgICAgdGFrZSBCICAgICAgaWYgZXhpc3RzLCBtdXN0IGVpdGhlciAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCBBIGFuZCBiZSB1cC10by1kYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICgyKSBtYXRjaCBCLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDE1ICBleGlzdHMgIE89PUEgICAgTz09QiAgICAgIHRha2UgQiAgICAgIG11c3QgbWF0Y2ggQSBpZiBleGlzdHMuCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMTYgIGV4aXN0cyAgTz09QSAgICBPPT1CICAgICAgYmFyZiAgICAgICAgbXVzdCBtYXRjaCBBIGlmIGV4aXN0cy4KKyAgICAgKm11bHRpKiBpbiBvbmUgIGluIGFub3RoZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogd2UgbmVlZCB0byBiZSBjYXJlZnVsIGluIGNhc2UgMiBhbmQgMy4gIFRoZSB0cmVlIEEgbWF5IGNvbnRhaW4KK0RGIChmaWxlKSB3aGVuIHRyZWUgQiByZXF1aXJlIERGIHRvIGJlIGEgZGlyZWN0b3J5IGJ5IGhhdmluZyBERi9ERgorKGZpbGUpLgorCitFTkRfT0ZfQ0FTRV9UQUJMRQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcxIC0gbXVzdCBub3QgaGF2ZSBhbiBlbnRyeSBub3QgaW4gQS4nICIKKyAgICAgcm0gLWYgLmdpdC9pbmRleCBYWCAmJgorICAgICBlY2hvIFhYID5YWCAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIFhYICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzIgLSBtdXN0IG1hdGNoIEIgaW4gIU8gJiYgIUEgJiYgQiBjYXNlLicgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IE5BICYmCisgICAgIGNwIC5vcmlnLUIvTkEgTkEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBOQSAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMiAtIG1hdGNoaW5nIEIgYWxvbmUgaXMgT0sgaW4gIU8gJiYgIUEgJiYgQiBjYXNlLicgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IE5BICYmCisgICAgIGNwIC5vcmlnLUIvTkEgTkEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBOQSAmJgorICAgICBlY2hvIGV4dHJhID4+TkEgJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzMgLSBtdXN0IG1hdGNoIEEgaW4gIU8gJiYgQSAmJiAhQiBjYXNlLicgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IEFOICYmCisgICAgIGNwIC5vcmlnLUEvQU4gQU4gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBTiAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzMgLSBtYXRjaGluZyBBIGFsb25lIGlzIE9LIGluICFPICYmIEEgJiYgIUIgY2FzZS4nIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBBTiAmJgorICAgICBjcCAub3JpZy1BL0FOIEFOICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQU4gJiYKKyAgICAgZWNobyBleHRyYSA+PkFOICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICczIChmYWlsKSAtIG11c3QgbWF0Y2ggQSBpbiAhTyAmJiBBICYmICFCIGNhc2UuJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggQU4gJiYKKyAgICAgY3AgLm9yaWctQS9BTiBBTiAmJgorICAgICBlY2hvIGV4dHJhID4+QU4gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBTiAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc0IC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiAhTyAmJiBBICYmIEIgJiYgQSE9QiBjYXNlLicgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IEFBICYmCisgICAgIGNwIC5vcmlnLUEvQUEgQUEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBQSAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzQgKGZhaWwpIC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiAhTyAmJiBBICYmIEIgJiYgQSE9QiBjYXNlLicgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IEFBICYmCisgICAgIGNwIC5vcmlnLUEvQUEgQUEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBQSAmJgorICAgICBlY2hvIGV4dHJhID4+QUEgJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNCAoZmFpbCkgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluICFPICYmIEEgJiYgQiAmJiBBIT1CIGNhc2UuJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggQUEgJiYKKyAgICAgY3AgLm9yaWctQS9BQSBBQSAmJgorICAgICBlY2hvIGV4dHJhID4+QUEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBQSAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc1IC0gbXVzdCBtYXRjaCBpbiAhTyAmJiBBICYmIEIgJiYgQT09QiBjYXNlLicgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IExMICYmCisgICAgIGNwIC5vcmlnLUEvTEwgTEwgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBMTCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzUgLSBtdXN0IG1hdGNoIGluICFPICYmIEEgJiYgQiAmJiBBPT1CIGNhc2UuJyBcCisgICAgInJtIC1mIC5naXQvaW5kZXggTEwgJiYKKyAgICAgY3AgLm9yaWctQS9MTCBMTCAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIExMICYmCisgICAgIGVjaG8gZXh0cmEgPj5MTCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzUgKGZhaWwpIC0gbXVzdCBtYXRjaCBBIGluICFPICYmIEEgJiYgQiAmJiBBPT1CIGNhc2UuJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggTEwgJiYKKyAgICAgY3AgLm9yaWctQS9MTCBMTCAmJgorICAgICBlY2hvIGV4dHJhID4+TEwgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBMTCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc2IC0gbXVzdCBub3QgZXhpc3QgaW4gTyAmJiAhQSAmJiAhQiBjYXNlJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggREQgJiYKKyAgICAgZWNobyBERCA+REQgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBERCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc3IC0gbXVzdCBub3QgZXhpc3QgaW4gTyAmJiAhQSAmJiBCICYmIE8hPUIgY2FzZScgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IERNICYmCisgICAgIGNwIC5vcmlnLUIvRE0gRE0gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBETSAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc4IC0gbXVzdCBub3QgZXhpc3QgaW4gTyAmJiAhQSAmJiBCICYmIE89PUIgY2FzZScgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IEROICYmCisgICAgIGNwIC5vcmlnLUIvRE4gRE4gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBETiAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc5IC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiBPICYmIEEgJiYgIUIgJiYgTyE9QSBjYXNlJyBcCisgICAgInJtIC1mIC5naXQvaW5kZXggTUQgJiYKKyAgICAgY3AgLm9yaWctQS9NRCBNRCAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE1EICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKyAgICAgY2hlY2tfcmVzdWx0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnOSAoZmFpbCkgLSBtdXN0IG1hdGNoIGFuZCBiZSB1cC10by1kYXRlIGluIE8gJiYgQSAmJiAhQiAmJiBPIT1BIGNhc2UnICIKKyAgICAgcm0gLWYgLmdpdC9pbmRleCBNRCAmJgorICAgICBjcCAub3JpZy1BL01EIE1EICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTUQgJiYKKyAgICAgZWNobyBleHRyYSA+Pk1EICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzkgKGZhaWwpIC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiBPICYmIEEgJiYgIUIgJiYgTyE9QSBjYXNlJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggTUQgJiYKKyAgICAgY3AgLm9yaWctQS9NRCBNRCAmJgorICAgICBlY2hvIGV4dHJhID4+TUQgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBNRCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxMCAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmICFCICYmIE89PUEgY2FzZScgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IE5EICYmCisgICAgIGNwIC5vcmlnLUEvTkQgTkQgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBORCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEwIChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmICFCICYmIE89PUEgY2FzZScgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IE5EICYmCisgICAgIGNwIC5vcmlnLUEvTkQgTkQgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBORCAmJgorICAgICBlY2hvIGV4dHJhID4+TkQgJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTAgKGZhaWwpIC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiBPICYmIEEgJiYgIUIgJiYgTz09QSBjYXNlJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggTkQgJiYKKyAgICAgY3AgLm9yaWctQS9ORCBORCAmJgorICAgICBlY2hvIGV4dHJhID4+TkQgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBORCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxMSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmIEIgJiYgTyE9QSAmJiBPIT1CICYmIEEhPUIgY2FzZScgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IE1NICYmCisgICAgIGNwIC5vcmlnLUEvTU0gTU0gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBNTSAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzExIChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmIEIgJiYgTyE9QSAmJiBPIT1CICYmIEEhPUIgY2FzZScgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IE1NICYmCisgICAgIGNwIC5vcmlnLUEvTU0gTU0gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBNTSAmJgorICAgICBlY2hvIGV4dHJhID4+TU0gJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTEgKGZhaWwpIC0gbXVzdCBtYXRjaCBhbmQgYmUgdXAtdG8tZGF0ZSBpbiBPICYmIEEgJiYgQiAmJiBPIT1BICYmIE8hPUIgJiYgQSE9QiBjYXNlJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggTU0gJiYKKyAgICAgY3AgLm9yaWctQS9NTSBNTSAmJgorICAgICBlY2hvIGV4dHJhID4+TU0gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBNTSAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxMiAtIG11c3QgbWF0Y2ggQSBpbiBPICYmIEEgJiYgQiAmJiBPIT1BICYmIEE9PUIgY2FzZScgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IFNTICYmCisgICAgIGNwIC5vcmlnLUEvU1MgU1MgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBTUyAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEyIC0gbXVzdCBtYXRjaCBBIGluIE8gJiYgQSAmJiBCICYmIE8hPUEgJiYgQT09QiBjYXNlJyBcCisgICAgInJtIC1mIC5naXQvaW5kZXggU1MgJiYKKyAgICAgY3AgLm9yaWctQS9TUyBTUyAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIFNTICYmCisgICAgIGVjaG8gZXh0cmEgPj5TUyAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEyIChmYWlsKSAtIG11c3QgbWF0Y2ggQSBpbiBPICYmIEEgJiYgQiAmJiBPIT1BICYmIEE9PUIgY2FzZScgIgorICAgICBybSAtZiAuZ2l0L2luZGV4IFNTICYmCisgICAgIGNwIC5vcmlnLUEvU1MgU1MgJiYKKyAgICAgZWNobyBleHRyYSA+PlNTICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgU1MgJiYKKyAgICAgcmVhZF90cmVlX211c3RfZmFpbCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTMgLSBtdXN0IG1hdGNoIEEgaW4gTyAmJiBBICYmIEIgJiYgTyE9QSAmJiBPPT1CIGNhc2UnIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBNTiAmJgorICAgICBjcCAub3JpZy1BL01OIE1OICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTU4gJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxMyAtIG11c3QgbWF0Y2ggQSBpbiBPICYmIEEgJiYgQiAmJiBPIT1BICYmIE89PUIgY2FzZScgXAorICAgICJybSAtZiAuZ2l0L2luZGV4IE1OICYmCisgICAgIGNwIC5vcmlnLUEvTU4gTU4gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBNTiAmJgorICAgICBlY2hvIGV4dHJhID4+TU4gJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNCAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmIEIgJiYgTz09QSAmJiBPIT1CIGNhc2UnIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBOTSAmJgorICAgICBjcCAub3JpZy1BL05NIE5NICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTk0gJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZV9PICR0cmVlX0EgJHRyZWVfQiAmJgorICAgICBjaGVja19yZXN1bHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNCAtIG1heSBtYXRjaCBCIGluIE8gJiYgQSAmJiBCICYmIE89PUEgJiYgTyE9QiBjYXNlJyBcCisgICAgInJtIC1mIC5naXQvaW5kZXggTk0gJiYKKyAgICAgY3AgLm9yaWctQi9OTSBOTSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE5NICYmCisgICAgIGVjaG8gZXh0cmEgPj5OTSAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CICYmCisgICAgIGNoZWNrX3Jlc3VsdCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE0IChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmIEIgJiYgTz09QSAmJiBPIT1CIGNhc2UnICIKKyAgICAgcm0gLWYgLmdpdC9pbmRleCBOTSAmJgorICAgICBjcCAub3JpZy1BL05NIE5NICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTk0gJiYKKyAgICAgZWNobyBleHRyYSA+Pk5NICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE0IChmYWlsKSAtIG11c3QgbWF0Y2ggYW5kIGJlIHVwLXRvLWRhdGUgaW4gTyAmJiBBICYmIEIgJiYgTz09QSAmJiBPIT1CIGNhc2UnICIKKyAgICAgcm0gLWYgLmdpdC9pbmRleCBOTSAmJgorICAgICBjcCAub3JpZy1BL05NIE5NICYmCisgICAgIGVjaG8gZXh0cmEgPj5OTSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE5NICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X2ZhaWwgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE1IC0gbXVzdCBtYXRjaCBBIGluIE8gJiYgQSAmJiBCICYmIE89PUEgJiYgTz09QiBjYXNlJyBcCisgICAgInJtIC1mIC5naXQvaW5kZXggTk4gJiYKKyAgICAgY3AgLm9yaWctQS9OTiBOTiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIE5OICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKyAgICAgY2hlY2tfcmVzdWx0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTUgLSBtdXN0IG1hdGNoIEEgaW4gTyAmJiBBICYmIEIgJiYgTz09QSAmJiBPPT1CIGNhc2UnIFwKKyAgICAicm0gLWYgLmdpdC9pbmRleCBOTiAmJgorICAgICBjcCAub3JpZy1BL05OIE5OICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgTk4gJiYKKyAgICAgZWNobyBleHRyYSA+Pk5OICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gJHRyZWVfTyAkdHJlZV9BICR0cmVlX0IgJiYKKyAgICAgY2hlY2tfcmVzdWx0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTUgKGZhaWwpIC0gbXVzdCBtYXRjaCBBIGluIE8gJiYgQSAmJiBCICYmIE89PUEgJiYgTz09QiBjYXNlJyAiCisgICAgIHJtIC1mIC5naXQvaW5kZXggTk4gJiYKKyAgICAgY3AgLm9yaWctQS9OTiBOTiAmJgorICAgICBlY2hvIGV4dHJhID4+Tk4gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBOTiAmJgorICAgICByZWFkX3RyZWVfbXVzdF9mYWlsIC1tICR0cmVlX08gJHRyZWVfQSAkdHJlZV9CCisiCisKKyMgIzE2Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTYgLSBBIG1hdGNoZXMgaW4gb25lIGFuZCBCIG1hdGNoZXMgaW4gYW5vdGhlci4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBGMTYgJiYKKyAgICBlY2hvIEYxNiA+RjE2ICYmCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBGMTYgJiYKKyAgICB0cmVlMD0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgIGVjaG8gRTE2ID5GMTYgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IEYxNiAmJgorICAgIHRyZWUxPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAtbSAkdHJlZTAgJHRyZWUxICR0cmVlMSAkdHJlZTAgJiYKKyAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDAxLXJlYWQtdHJlZS1tLTJ3YXkuc2ggYi90L3QxMDAxLXJlYWQtdHJlZS1tLTJ3YXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGIxYjZmNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMDEtcmVhZC10cmVlLW0tMndheS5zaApAQCAtMCwwICsxLDQxMCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUd28gd2F5IG1lcmdlIHdpdGggcmVhZC10cmVlIC1tICRIICRNCisKK1RoaXMgdGVzdCB0cmllcyB0d28td2F5IG1lcmdlIChha2EgZmFzdC1mb3J3YXJkIHdpdGggY2FycnkgZm9yd2FyZCkuCisKK1RoZXJlIGlzIHRoZSBoZWFkIChjYWxsZWQgSCkgYW5kIGFub3RoZXIgY29tbWl0IChjYWxsZWQgTSksIHdoaWNoIGlzCitzaW1wbHkgYWhlYWQgb2YgSC4gIFRoZSBpbmRleCBhbmQgdGhlIHdvcmsgdHJlZSBjb250YWlucyBhIHN0YXRlIHRoYXQKK2lzIGRlcml2ZWQgZnJvbSBILCBidXQgbWF5IGFsc28gaGF2ZSBsb2NhbCBjaGFuZ2VzLiAgVGhpcyB0ZXN0IGNoZWNrcworYWxsIHRoZSBjb21iaW5hdGlvbnMgZGVzY3JpYmVkIGluIHRoZSB0d28tdHJlZSBtZXJnZSAiY2FycnkgZm9yd2FyZCIKK3J1bGVzLCBmb3VuZCBpbiA8RG9jdW1lbnRhdGlvbi9naXQgcmVhZC10cmVlLnR4dD4uCisKK0luIHRoZSB0ZXN0LCB0aGVzZSBwYXRocyBhcmUgdXNlZDoKKyAgICAgICAgYm96YmFyICAtIGluIEgsIHN0YXlzIGluIE0sIG1vZGlmaWVkIGZyb20gYm96YmFyIHRvIGdudXN0bworICAgICAgICBmcm90eiAgIC0gbm90IGluIEggYWRkZWQgaW4gTQorICAgICAgICBuaXRmb2wgIC0gaW4gSCwgc3RheXMgaW4gTSB1bm1vZGlmaWVkCisgICAgICAgIHJlenJvdiAgLSBpbiBILCBkZWxldGVkIGluIE0KKwl5b21pbiAgIC0gbm90IGluIEggb3IgTQorJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKworcmVhZF90cmVlX3R3b3dheSAoKSB7CisgICAgZ2l0IHJlYWQtdHJlZSAtbSAiJDEiICIkMiIgJiYgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UKK30KKworY29tcGFyZV9jaGFuZ2UgKCkgeworCXNlZCAtbiA+Y3VycmVudCBcCisJICAgIC1lICcvXi0tLSAvZDsgL14rKysgL2Q7IC9eQEAgL2Q7JyBcCisJICAgIC1lICdzL15cKFstK11bMC03XVswLTddWzAtN11bMC03XVswLTddWzAtN11cKSAnIiRfeDQwIicgL1wxIFggL3AnIFwKKwkgICAgIiQxIgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKK30KKworY2hlY2tfY2FjaGVfYXQgKCkgeworCWNsZWFuX2lmX2VtcHR5PSQoZ2l0IGRpZmYtZmlsZXMgLS0gIiQxIikKKwljYXNlICIkY2xlYW5faWZfZW1wdHkiIGluCisJJycpICBlY2hvICIkMTogY2xlYW4iIDs7CisJPyopICBlY2hvICIkMTogZGlydHkiIDs7CisJZXNhYworCWNhc2UgIiQyLCRjbGVhbl9pZl9lbXB0eSIgaW4KKwljbGVhbiwpCQk6ICAgICA7OworCWNsZWFuLD8qKQlmYWxzZSA7OworCWRpcnR5LCkJCWZhbHNlIDs7CisJZGlydHksPyopCTogICAgIDs7CisJZXNhYworfQorCitjYXQgPmJvemJhci1vbGQgPDxcRU9GCitUaGlzIGlzIGEgc2FtcGxlIGZpbGUgdXNlZCBpbiB0d28td2F5IGZhc3QtZm9yd2FyZCBtZXJnZQordGVzdHMuICBJdHMgc2Vjb25kIGxpbmUgZW5kcyB3aXRoIGEgbWFnaWMgd29yZCBib3piYXIKK3doaWNoIHdpbGwgYmUgbW9kaWZpZWQgYnkgdGhlIG1lcmdlZCBoZWFkIHRvIGdudXN0by4KK0l0IGhhcyBzb21lIGV4dHJhIGxpbmVzIHNvIHRoYXQgZXh0ZXJuYWwgdG9vbHMgY2FuCitzdWNjZXNzZnVsbHkgbWVyZ2UgaW5kZXBlbmRlbnQgY2hhbmdlcyBtYWRlIHRvIGxhdGVyCitsaW5lcyAoc3VjaCBhcyB0aGlzIG9uZSksIGF2b2lkaW5nIGxpbmUgY29uZmxpY3RzLgorRU9GCisKK3NlZCAtZSAncy9ib3piYXIvZ251c3RvIChlYXJsaWVyIGJvemJhcikvJyBib3piYXItb2xkID5ib3piYXItbmV3CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgIHNldHVwIFwKKyAgICAnZWNobyBmcm90eiA+ZnJvdHogJiYKKyAgICAgZWNobyBuaXRmb2wgPm5pdGZvbCAmJgorICAgICBjYXQgYm96YmFyLW9sZCA+Ym96YmFyICYmCisgICAgIGVjaG8gcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZWNobyB5b21pbiA+eW9taW4gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBuaXRmb2wgYm96YmFyIHJlenJvdiAmJgorICAgICB0cmVlSD0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgICBlY2hvIHRyZWVIICR0cmVlSCAmJgorICAgICBnaXQgbHMtdHJlZSAkdHJlZUggJiYKKworICAgICBjYXQgYm96YmFyLW5ldyA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogYm96YmFyIC0tZm9yY2UtcmVtb3ZlIHJlenJvdiAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+TS5vdXQgJiYKKyAgICAgdHJlZU09JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICAgZWNobyB0cmVlTSAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLXRyZWUgJHRyZWVNICYmCisgICAgIGdpdCBkaWZmLXRyZWUgJHRyZWVIICR0cmVlTScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEsIDIsIDMgLSBubyBjYXJyeSBmb3J3YXJkJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xLTMub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDEtMy5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgYm96YmFyIGRpcnR5ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGZyb3R6IGRpcnR5ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IG5pdGZvbCBkaXJ0eScKKworZWNobyAnKzEwMDY0NCBYIDAJeW9taW4nID5leHBlY3RlZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNCAtIGNhcnJ5IGZvcndhcmQgbG9jYWwgYWRkaXRpb24uJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgeW9taW4gJiYKKyAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID40Lm91dCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IE0ub3V0IDQub3V0ID40ZGlmZi5vdXQgJiYKKyAgICAgY29tcGFyZV9jaGFuZ2UgNGRpZmYub3V0IGV4cGVjdGVkICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IHlvbWluIGNsZWFuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNSAtIGNhcnJ5IGZvcndhcmQgbG9jYWwgYWRkaXRpb24uJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGVjaG8geW9taW4gPnlvbWluICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgeW9taW4gJiYKKyAgICAgZWNobyB5b21pbiB5b21pbiA+eW9taW4gJiYKKyAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID41Lm91dCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IE0ub3V0IDUub3V0ID41ZGlmZi5vdXQgJiYKKyAgICAgY29tcGFyZV9jaGFuZ2UgNWRpZmYub3V0IGV4cGVjdGVkICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IHlvbWluIGRpcnR5JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNiAtIGxvY2FsIGFkZGl0aW9uIGFscmVhZHkgaGFzIHRoZSBzYW1lLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+Ni5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgNi5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgZnJvdHogY2xlYW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc3IC0gbG9jYWwgYWRkaXRpb24gYWxyZWFkeSBoYXMgdGhlIHNhbWUuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGVjaG8gZnJvdHogPmZyb3R6ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogJiYKKyAgICAgZWNobyBmcm90eiBmcm90eiA+ZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID43Lm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCA3Lm91dCAmJgorICAgICBjaGVja19jYWNoZV9hdCBmcm90eiBkaXJ0eScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzggLSBjb25mbGljdGluZyBhZGRpdGlvbi4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKyAgICAgZWNobyBmcm90eiBmcm90eiA+ZnJvdHogJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiAmJgorICAgICBpZiByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc5IC0gY29uZmxpY3RpbmcgYWRkaXRpb24uJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGVjaG8gZnJvdHogZnJvdHogPmZyb3R6ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogJiYKKyAgICAgZWNobyBmcm90eiA+ZnJvdHogJiYKKyAgICAgaWYgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTAgLSBwYXRoIHJlbW92ZWQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGVjaG8gcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKKyAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xMC5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgMTAub3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTEgLSBkaXJ0eSBwYXRoIHJlbW92ZWQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGVjaG8gcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKKyAgICAgZWNobyByZXpyb3YgcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgaWYgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTIgLSB1bm1hdGNoaW5nIGxvY2FsIGNoYW5nZXMgYmVpbmcgcmVtb3ZlZC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKyAgICAgZWNobyByZXpyb3YgcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKKyAgICAgaWYgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTMgLSB1bm1hdGNoaW5nIGxvY2FsIGNoYW5nZXMgYmVpbmcgcmVtb3ZlZC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKyAgICAgZWNobyByZXpyb3YgcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKKyAgICAgZWNobyByZXpyb3YgPnJlenJvdiAmJgorICAgICBpZiByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmknCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKy0xMDA2NDQgWCAwCW5pdGZvbAorKzEwMDY0NCBYIDAJbml0Zm9sCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE0IC0gdW5jaGFuZ2VkIGluIHR3byBoZWFkcy4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKyAgICAgZWNobyBuaXRmb2wgbml0Zm9sID5uaXRmb2wgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBuaXRmb2wgJiYKKyAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xNC5vdXQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCBNLm91dCAxNC5vdXQgPjE0ZGlmZi5vdXQgJiYKKyAgICAgY29tcGFyZV9jaGFuZ2UgMTRkaWZmLm91dCBleHBlY3RlZCAmJgorICAgICBjaGVja19jYWNoZV9hdCBuaXRmb2wgY2xlYW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNSAtIHVuY2hhbmdlZCBpbiB0d28gaGVhZHMuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCA+bml0Zm9sICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbml0Zm9sICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCBuaXRmb2wgPm5pdGZvbCAmJgorICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjE1Lm91dCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IE0ub3V0IDE1Lm91dCA+MTVkaWZmLm91dCAmJgorICAgICBjb21wYXJlX2NoYW5nZSAxNWRpZmYub3V0IGV4cGVjdGVkICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IG5pdGZvbCBkaXJ0eScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE2IC0gY29uZmxpY3RpbmcgbG9jYWwgY2hhbmdlLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgJHRyZWVIICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtdSAtZiAtcSAtYSAmJgorICAgICBlY2hvIGJvemJhciBib3piYXIgPmJvemJhciAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorICAgICBpZiByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNyAtIGNvbmZsaWN0aW5nIGxvY2FsIGNoYW5nZS4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKyAgICAgZWNobyBib3piYXIgYm96YmFyID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgZWNobyBib3piYXIgYm96YmFyIGJvemJhciA+Ym96YmFyICYmCisgICAgIGlmIHJlYWRfdHJlZV90d293YXkgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE4IC0gbG9jYWwgY2hhbmdlIGFscmVhZHkgaGF2aW5nIGEgZ29vZCByZXN1bHQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGNhdCBib3piYXItbmV3ID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xOC5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgMTgub3V0ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBjbGVhbicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE5IC0gbG9jYWwgY2hhbmdlIGFscmVhZHkgaGF2aW5nIGEgZ29vZCByZXN1bHQsIGZ1cnRoZXIgbW9kaWZpZWQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGNhdCBib3piYXItbmV3ID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgZWNobyBnbnVzdG8gZ251c3RvID5ib3piYXIgJiYKKyAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xOS5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgMTkub3V0ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBkaXJ0eScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzIwIC0gbm8gbG9jYWwgY2hhbmdlLCB1c2UgbmV3IHRyZWUuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIGNhdCBib3piYXItb2xkID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4yMC5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgMjAub3V0ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBkaXJ0eScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzIxIC0gbm8gbG9jYWwgY2hhbmdlLCBkaXJ0eSBjYWNoZS4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICByZWFkX3RyZWVfbXVzdF9zdWNjZWVkICR0cmVlSCAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLXUgLWYgLXEgLWEgJiYKKyAgICAgY2F0IGJvemJhci1vbGQgPmJvemJhciAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGJvemJhciAmJgorICAgICBlY2hvIGdudXN0byBnbnVzdG8gPmJvemJhciAmJgorICAgICBpZiByZWFkX3RyZWVfdHdvd2F5ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmknCisKKyMgVGhpcyBmYWlscyB3aXRoIHN0cmFpZ2h0IHR3by13YXkgZmFzdC1mb3J3YXJkLgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzIyIC0gbG9jYWwgY2hhbmdlIGNhY2hlIHVwZGF0ZWQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgcmVhZF90cmVlX211c3Rfc3VjY2VlZCAkdHJlZUggJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC11IC1mIC1xIC1hICYmCisgICAgIHNlZCAtZSAicy9zdWNoIGFzL1NVQ0ggQVMvIiBib3piYXItb2xkID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgaWYgcmVhZF90cmVlX3R3b3dheSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCisjIEFsc28gbWFrZSBzdXJlIHdlIGRpZCBub3QgYnJlYWsgREYgdnMgREYvREYgY2FzZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdERiB2cyBERi9ERiBjYXNlIHNldHVwLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIGVjaG8gREYgPkRGICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgREYgJiYKKyAgICAgdHJlZURGPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgIGVjaG8gdHJlZURGICR0cmVlREYgJiYKKyAgICAgZ2l0IGxzLXRyZWUgJHRyZWVERiAmJgorCisgICAgIHJtIC1mIERGICYmCisgICAgIG1rZGlyIERGICYmCisgICAgIGVjaG8gREYvREYgPkRGL0RGICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgREYgREYvREYgJiYKKyAgICAgdHJlZURGREY9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICAgZWNobyB0cmVlREZERiAkdHJlZURGREYgJiYKKyAgICAgZ2l0IGxzLXRyZWUgJHRyZWVERkRGICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID5ERkRGLm91dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0RGIHZzIERGL0RGIGNhc2UgdGVzdC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICBybSAtZnIgREYgJiYKKyAgICAgZWNobyBERiA+REYgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBERiAmJgorICAgICByZWFkX3RyZWVfdHdvd2F5ICR0cmVlREYgJHRyZWVERkRGICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID5ERkRGY2hlY2sub3V0ICYmCisgICAgIHRlc3RfY21wIERGREYub3V0IERGREZjaGVjay5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgREYvREYgZGlydHkgJiYKKyAgICAgOicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2EvYiAodW50cmFja2VkKSB2cyBhIGNhc2Ugc2V0dXAuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgOiA+YSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgJiYKKyAgICAgdHJlZU09JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICAgZWNobyB0cmVlTSAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLXRyZWUgJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID50cmVlTS5vdXQgJiYKKworICAgICBybSAtZiBhICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgYSAmJgorICAgICBta2RpciBhICYmCisgICAgIDogPmEvYiAmJgorICAgICB0cmVlSD0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgICBlY2hvIHRyZWVIICR0cmVlSCAmJgorICAgICBnaXQgbHMtdHJlZSAkdHJlZUgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhL2IgKHVudHJhY2tlZCkgdnMgYSwgcGx1cyBjL2QgY2FzZSB0ZXN0LicgXAorICAgICdyZWFkX3RyZWVfdV9tdXN0X2ZhaWwgLXUgLW0gIiR0cmVlSCIgIiR0cmVlTSIgJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgJiYKKyAgICAgdGVzdCAtZiBhL2InCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhL2IgdnMgYSwgcGx1cyBjL2QgY2FzZSBzZXR1cC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCAmJgorICAgICBybSAtZnIgYSAmJgorICAgICA6ID5hICYmCisgICAgIG1rZGlyIGMgJiYKKyAgICAgOiA+Yy9kICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSBjL2QgJiYKKyAgICAgdHJlZU09JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICAgZWNobyB0cmVlTSAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLXRyZWUgJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID50cmVlTS5vdXQgJiYKKworICAgICBybSAtZiBhICYmCisgICAgIG1rZGlyIGEgJiYKKyAgICAgOiA+YS9iICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgYSBhL2IgJiYKKyAgICAgdHJlZUg9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICAgZWNobyB0cmVlSCAkdHJlZUggJiYKKyAgICAgZ2l0IGxzLXRyZWUgJHRyZWVIJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYS9iIHZzIGEsIHBsdXMgYy9kIGNhc2UgdGVzdC4nIFwKKyAgICAncmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC11IC1tICIkdHJlZUgiICIkdHJlZU0iICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlIHwgdGVlID50cmVlTWNoZWNrLm91dCAmJgorICAgICB0ZXN0X2NtcCB0cmVlTS5vdXQgdHJlZU1jaGVjay5vdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1tIHJlZmVyZW5jZXMgdGhlIGNvcnJlY3QgbW9kaWZpZWQgdHJlZScgJworCWVjaG8gPmZpbGUtYSAmJgorCWVjaG8gPmZpbGUtYiAmJgorCWdpdCBhZGQgZmlsZS1hIGZpbGUtYiAmJgorCWdpdCBjb21taXQgLWEgLW0gInRlc3QgZm9yIGNvcnJlY3QgbW9kaWZpZWQgdHJlZSIgJiYKKwlnaXQgYnJhbmNoIGluaXRpYWwtbW9kICYmCisJZWNobyBiID5maWxlLWIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJCIiAmJgorCWVjaG8gYSA+ZmlsZS1hICYmCisJZ2l0IGFkZCBmaWxlLWEgJiYKKwlnaXQgbHMtdHJlZSAkKGdpdCB3cml0ZS10cmVlKSBmaWxlLWEgPmV4cGVjdCAmJgorCXJlYWRfdHJlZV9tdXN0X3N1Y2NlZWQgLW0gSEVBRCBpbml0aWFsLW1vZCAmJgorCWdpdCBscy10cmVlICQoZ2l0IHdyaXRlLXRyZWUpIGZpbGUtYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDItcmVhZC10cmVlLW0tdS0yd2F5LnNoIGIvdC90MTAwMi1yZWFkLXRyZWUtbS11LTJ3YXkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTNiZjgyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMDItcmVhZC10cmVlLW0tdS0yd2F5LnNoCkBAIC0wLDAgKzEsMzQ1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1R3byB3YXkgbWVyZ2Ugd2l0aCByZWFkLXRyZWUgLW0gLXUgJEggJE0KKworVGhpcyBpcyBpZGVudGljYWwgdG8gdDEwMDEsIGJ1dCB1c2VzIC11IHRvIHVwZGF0ZSB0aGUgd29yayB0cmVlIGFzIHdlbGwuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmVhZC10cmVlLnNoCisKK2NvbXBhcmVfY2hhbmdlICgpIHsKKwlzZWQgPmN1cnJlbnQgXAorCSAgICAtZSAnMXsvXmRpZmYgLS1naXQgL2Q7fScgXAorCSAgICAtZSAnMnsvXmluZGV4IC9kO30nIFwKKwkgICAgLWUgJy9eLS0tIC9kOyAvXisrKyAvZDsgL15AQCAvZDsnIFwKKwkgICAgLWUgJ3MvXlwoLlswLTddWzAtN11bMC03XVswLTddWzAtN11bMC03XVwpICciJF94NDAiJyAvXDEgWCAvJyAiJDEiCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorfQorCitjaGVja19jYWNoZV9hdCAoKSB7CisJY2xlYW5faWZfZW1wdHk9JChnaXQgZGlmZi1maWxlcyAtLSAiJDEiKQorCWNhc2UgIiRjbGVhbl9pZl9lbXB0eSIgaW4KKwknJykgIGVjaG8gIiQxOiBjbGVhbiIgOzsKKwk/KikgIGVjaG8gIiQxOiBkaXJ0eSIgOzsKKwllc2FjCisJY2FzZSAiJDIsJGNsZWFuX2lmX2VtcHR5IiBpbgorCWNsZWFuLCkJCTogICAgIDs7CisJY2xlYW4sPyopCWZhbHNlIDs7CisJZGlydHksKQkJZmFsc2UgOzsKKwlkaXJ0eSw/KikJOiAgICAgOzsKKwllc2FjCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgIHNldHVwIFwKKyAgICAnZWNobyBmcm90eiA+ZnJvdHogJiYKKyAgICAgZWNobyBuaXRmb2wgPm5pdGZvbCAmJgorICAgICBlY2hvIGJvemJhciA+Ym96YmFyICYmCisgICAgIGVjaG8gcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBuaXRmb2wgYm96YmFyIHJlenJvdiAmJgorICAgICB0cmVlSD0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgICBlY2hvIHRyZWVIICR0cmVlSCAmJgorICAgICBnaXQgbHMtdHJlZSAkdHJlZUggJiYKKworICAgICBlY2hvIGdudXN0byA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogYm96YmFyIC0tZm9yY2UtcmVtb3ZlIHJlenJvdiAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+TS5vdXQgJiYKKyAgICAgdHJlZU09JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICAgZWNobyB0cmVlTSAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLXRyZWUgJHRyZWVNICYmCisgICAgIHN1bSBib3piYXIgZnJvdHogbml0Zm9sID5NLnN1bSAmJgorICAgICBnaXQgZGlmZi10cmVlICR0cmVlSCAkdHJlZU0nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxLCAyLCAzIC0gbm8gY2FycnkgZm9yd2FyZCcgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MS0zLm91dCAmJgorICAgICBjbXAgTS5vdXQgMS0zLm91dCAmJgorICAgICBzdW0gYm96YmFyIGZyb3R6IG5pdGZvbCA+YWN0dWFsMy5zdW0gJiYKKyAgICAgY21wIE0uc3VtIGFjdHVhbDMuc3VtICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBjbGVhbiAmJgorICAgICBjaGVja19jYWNoZV9hdCBmcm90eiBjbGVhbiAmJgorICAgICBjaGVja19jYWNoZV9hdCBuaXRmb2wgY2xlYW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc0IC0gY2FycnkgZm9yd2FyZCBsb2NhbCBhZGRpdGlvbi4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyAiKzEwMDY0NCBYIDAJeW9taW4iID5leHBlY3RlZCAmJgorICAgICBlY2hvIHlvbWluID55b21pbiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHlvbWluICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID40Lm91dCAmJgorICAgICB0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGRpZmYgLVUwIC0tbm8taW5kZXggTS5vdXQgNC5vdXQgPjRkaWZmLm91dCAmJgorICAgICBjb21wYXJlX2NoYW5nZSA0ZGlmZi5vdXQgZXhwZWN0ZWQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgeW9taW4gY2xlYW4gJiYKKyAgICAgc3VtIGJvemJhciBmcm90eiBuaXRmb2wgPmFjdHVhbDQuc3VtICYmCisgICAgIGNtcCBNLnN1bSBhY3R1YWw0LnN1bSAmJgorICAgICBlY2hvIHlvbWluID55b21pbjEgJiYKKyAgICAgZGlmZiB5b21pbiB5b21pbjEgJiYKKyAgICAgcm0gLWYgeW9taW4xJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnNSAtIGNhcnJ5IGZvcndhcmQgbG9jYWwgYWRkaXRpb24uJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJiYKKyAgICAgZWNobyB5b21pbiA+eW9taW4gJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB5b21pbiAmJgorICAgICBlY2hvIHlvbWluIHlvbWluID55b21pbiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+NS5vdXQgJiYKKyAgICAgdGVzdF9taWdodF9mYWlsIGdpdCBkaWZmIC1VMCAtLW5vLWluZGV4IE0ub3V0IDUub3V0ID41ZGlmZi5vdXQgJiYKKyAgICAgY29tcGFyZV9jaGFuZ2UgNWRpZmYub3V0IGV4cGVjdGVkICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IHlvbWluIGRpcnR5ICYmCisgICAgIHN1bSBib3piYXIgZnJvdHogbml0Zm9sID5hY3R1YWw1LnN1bSAmJgorICAgICBjbXAgTS5zdW0gYWN0dWFsNS5zdW0gJiYKKyAgICAgOiBkaXJ0eSBpbmRleCBzaG91bGQgaGF2ZSBwcmV2ZW50ZWQgLXUgZnJvbSBjaGVja2luZyBpdCBvdXQuICYmCisgICAgIGVjaG8geW9taW4geW9taW4gPnlvbWluMSAmJgorICAgICBkaWZmIHlvbWluIHlvbWluMSAmJgorICAgICBybSAtZiB5b21pbjEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICc2IC0gbG9jYWwgYWRkaXRpb24gYWxyZWFkeSBoYXMgdGhlIHNhbWUuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gZnJvdHogPmZyb3R6ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjYub3V0ICYmCisgICAgIHRlc3RfY21wIE0ub3V0IDYub3V0ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGZyb3R6IGNsZWFuICYmCisgICAgIHN1bSBib3piYXIgZnJvdHogbml0Zm9sID5hY3R1YWwzLnN1bSAmJgorICAgICBjbXAgTS5zdW0gYWN0dWFsMy5zdW0gJiYKKyAgICAgZWNobyBmcm90eiA+ZnJvdHoxICYmCisgICAgIGRpZmYgZnJvdHogZnJvdHoxICYmCisgICAgIHJtIC1mIGZyb3R6MScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzcgLSBsb2NhbCBhZGRpdGlvbiBhbHJlYWR5IGhhcyB0aGUgc2FtZS4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBmcm90eiA+ZnJvdHogJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiAmJgorICAgICBlY2hvIGZyb3R6IGZyb3R6ID5mcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+Ny5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgNy5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgZnJvdHogZGlydHkgJiYKKyAgICAgc3VtIGJvemJhciBmcm90eiBuaXRmb2wgPmFjdHVhbDcuc3VtICYmCisgICAgIGlmIGNtcCBNLnN1bSBhY3R1YWw3LnN1bTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaSAmJgorICAgICA6IGRpcnR5IGluZGV4IHNob3VsZCBoYXZlIHByZXZlbnRlZCAtdSBmcm9tIGNoZWNraW5nIGl0IG91dC4gJiYKKyAgICAgZWNobyBmcm90eiBmcm90eiA+ZnJvdHoxICYmCisgICAgIGRpZmYgZnJvdHogZnJvdHoxICYmCisgICAgIHJtIC1mIGZyb3R6MScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzggLSBjb25mbGljdGluZyBhZGRpdGlvbi4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBmcm90eiBmcm90eiA+ZnJvdHogJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiAmJgorICAgICBpZiByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzkgLSBjb25mbGljdGluZyBhZGRpdGlvbi4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyBmcm90eiBmcm90eiA+ZnJvdHogJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmcm90eiAmJgorICAgICBlY2hvIGZyb3R6ID5mcm90eiAmJgorICAgICBpZiByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEwIC0gcGF0aCByZW1vdmVkLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIHJlenJvdiA+cmV6cm92ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4xMC5vdXQgJiYKKyAgICAgY21wIE0ub3V0IDEwLm91dCAmJgorICAgICBzdW0gYm96YmFyIGZyb3R6IG5pdGZvbCA+YWN0dWFsMTAuc3VtICYmCisgICAgIGNtcCBNLnN1bSBhY3R1YWwxMC5zdW0nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxMSAtIGRpcnR5IHBhdGggcmVtb3ZlZC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyByZXpyb3YgPnJlenJvdiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHJlenJvdiAmJgorICAgICBlY2hvIHJlenJvdiByZXpyb3YgPnJlenJvdiAmJgorICAgICBpZiByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzEyIC0gdW5tYXRjaGluZyBsb2NhbCBjaGFuZ2VzIGJlaW5nIHJlbW92ZWQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gcmV6cm92IHJlenJvdiA+cmV6cm92ICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcmV6cm92ICYmCisgICAgIGlmIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTMgLSB1bm1hdGNoaW5nIGxvY2FsIGNoYW5nZXMgYmVpbmcgcmVtb3ZlZC4nIFwKKyAgICAncm0gLWYgLmdpdC9pbmRleCBuaXRmb2wgYm96YmFyIHJlenJvdiBmcm90eiAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSAkdHJlZUggJiYKKyAgICAgZWNobyByZXpyb3YgcmV6cm92ID5yZXpyb3YgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKKyAgICAgZWNobyByZXpyb3YgPnJlenJvdiAmJgorICAgICBpZiByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKworY2F0ID5leHBlY3RlZCA8PEVPRgorLTEwMDY0NCBYIDAJbml0Zm9sCisrMTAwNjQ0IFggMAluaXRmb2wKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTQgLSB1bmNoYW5nZWQgaW4gdHdvIGhlYWRzLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIG5pdGZvbCBuaXRmb2wgPm5pdGZvbCAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG5pdGZvbCAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MTQub3V0ICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC1VMCAtLW5vLWluZGV4IE0ub3V0IDE0Lm91dCA+MTRkaWZmLm91dCAmJgorICAgICBjb21wYXJlX2NoYW5nZSAxNGRpZmYub3V0IGV4cGVjdGVkICYmCisgICAgIHN1bSBib3piYXIgZnJvdHogPmFjdHVhbDE0LnN1bSAmJgorICAgICBncmVwIC12IG5pdGZvbCBNLnN1bSA+IGV4cGVjdGVkMTQuc3VtICYmCisgICAgIGNtcCBleHBlY3RlZDE0LnN1bSBhY3R1YWwxNC5zdW0gJiYKKyAgICAgc3VtIGJvemJhciBmcm90eiBuaXRmb2wgPmFjdHVhbDE0YS5zdW0gJiYKKyAgICAgaWYgY21wIE0uc3VtIGFjdHVhbDE0YS5zdW07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmkgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgbml0Zm9sIGNsZWFuICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCA+bml0Zm9sMSAmJgorICAgICBkaWZmIG5pdGZvbCBuaXRmb2wxICYmCisgICAgIHJtIC1mIG5pdGZvbDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcxNSAtIHVuY2hhbmdlZCBpbiB0d28gaGVhZHMuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCA+bml0Zm9sICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbml0Zm9sICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCBuaXRmb2wgPm5pdGZvbCAmJgorICAgICByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTSAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+MTUub3V0ICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC1VMCAtLW5vLWluZGV4IE0ub3V0IDE1Lm91dCA+MTVkaWZmLm91dCAmJgorICAgICBjb21wYXJlX2NoYW5nZSAxNWRpZmYub3V0IGV4cGVjdGVkICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IG5pdGZvbCBkaXJ0eSAmJgorICAgICBzdW0gYm96YmFyIGZyb3R6ID5hY3R1YWwxNS5zdW0gJiYKKyAgICAgZ3JlcCAtdiBuaXRmb2wgTS5zdW0gPiBleHBlY3RlZDE1LnN1bSAmJgorICAgICBjbXAgZXhwZWN0ZWQxNS5zdW0gYWN0dWFsMTUuc3VtICYmCisgICAgIHN1bSBib3piYXIgZnJvdHogbml0Zm9sID5hY3R1YWwxNWEuc3VtICYmCisgICAgIGlmIGNtcCBNLnN1bSBhY3R1YWwxNWEuc3VtOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpICYmCisgICAgIGVjaG8gbml0Zm9sIG5pdGZvbCBuaXRmb2wgPm5pdGZvbDEgJiYKKyAgICAgZGlmZiBuaXRmb2wgbml0Zm9sMSAmJgorICAgICBybSAtZiBuaXRmb2wxJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTYgLSBjb25mbGljdGluZyBsb2NhbCBjaGFuZ2UuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gYm96YmFyIGJvemJhciA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisgICAgIGlmIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnMTcgLSBjb25mbGljdGluZyBsb2NhbCBjaGFuZ2UuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gYm96YmFyIGJvemJhciA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisgICAgIGVjaG8gYm96YmFyIGJvemJhciBib3piYXIgPmJvemJhciAmJgorICAgICBpZiByZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgJHRyZWVIICR0cmVlTTsgdGhlbiBmYWxzZTsgZWxzZSA6OyBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE4IC0gbG9jYWwgY2hhbmdlIGFscmVhZHkgaGF2aW5nIGEgZ29vZCByZXN1bHQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gZ251c3RvID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjE4Lm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCAxOC5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgYm96YmFyIGNsZWFuICYmCisgICAgIHN1bSBib3piYXIgZnJvdHogbml0Zm9sID5hY3R1YWwxOC5zdW0gJiYKKyAgICAgY21wIE0uc3VtIGFjdHVhbDE4LnN1bScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJzE5IC0gbG9jYWwgY2hhbmdlIGFscmVhZHkgaGF2aW5nIGEgZ29vZCByZXN1bHQsIGZ1cnRoZXIgbW9kaWZpZWQuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gZ251c3RvID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgZWNobyBnbnVzdG8gZ251c3RvID5ib3piYXIgJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU0gJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPjE5Lm91dCAmJgorICAgICB0ZXN0X2NtcCBNLm91dCAxOS5vdXQgJiYKKyAgICAgY2hlY2tfY2FjaGVfYXQgYm96YmFyIGRpcnR5ICYmCisgICAgIHN1bSBmcm90eiBuaXRmb2wgPmFjdHVhbDE5LnN1bSAmJgorICAgICBncmVwIC12IGJvemJhciAgTS5zdW0gPiBleHBlY3RlZDE5LnN1bSAmJgorICAgICBjbXAgZXhwZWN0ZWQxOS5zdW0gYWN0dWFsMTkuc3VtICYmCisgICAgIHN1bSBib3piYXIgZnJvdHogbml0Zm9sID5hY3R1YWwxOWEuc3VtICYmCisgICAgIGlmIGNtcCBNLnN1bSBhY3R1YWwxOWEuc3VtOyB0aGVuIGZhbHNlOyBlbHNlIDo7IGZpICYmCisgICAgIGVjaG8gZ251c3RvIGdudXN0byA+Ym96YmFyMSAmJgorICAgICBkaWZmIGJvemJhciBib3piYXIxICYmCisgICAgIHJtIC1mIGJvemJhcjEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcyMCAtIG5vIGxvY2FsIGNoYW5nZSwgdXNlIG5ldyB0cmVlLicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4IG5pdGZvbCBib3piYXIgcmV6cm92IGZyb3R6ICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICR0cmVlSCAmJgorICAgICBlY2hvIGJvemJhciA+Ym96YmFyICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYm96YmFyICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZUggJHRyZWVNICYmCisgICAgIGdpdCBscy1maWxlcyAtLXN0YWdlID4yMC5vdXQgJiYKKyAgICAgdGVzdF9jbXAgTS5vdXQgMjAub3V0ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IGJvemJhciBjbGVhbiAmJgorICAgICBzdW0gYm96YmFyIGZyb3R6IG5pdGZvbCA+YWN0dWFsMjAuc3VtICYmCisgICAgIGNtcCBNLnN1bSBhY3R1YWwyMC5zdW0nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcyMSAtIG5vIGxvY2FsIGNoYW5nZSwgZGlydHkgY2FjaGUuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggbml0Zm9sIGJvemJhciByZXpyb3YgZnJvdHogJiYKKyAgICAgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgJHRyZWVIICYmCisgICAgIGVjaG8gYm96YmFyID5ib3piYXIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBib3piYXIgJiYKKyAgICAgZWNobyBnbnVzdG8gZ251c3RvID5ib3piYXIgJiYKKyAgICAgaWYgcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11ICR0cmVlSCAkdHJlZU07IHRoZW4gZmFsc2U7IGVsc2UgOjsgZmknCisKKyMgQWxzbyBtYWtlIHN1cmUgd2UgZGlkIG5vdCBicmVhayBERiB2cyBERi9ERiBjYXNlLgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0RGIHZzIERGL0RGIGNhc2Ugc2V0dXAuJyBcCisgICAgJ3JtIC1mIC5naXQvaW5kZXggJiYKKyAgICAgZWNobyBERiA+REYgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBERiAmJgorICAgICB0cmVlREY9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICAgZWNobyB0cmVlREYgJHRyZWVERiAmJgorICAgICBnaXQgbHMtdHJlZSAkdHJlZURGICYmCisKKyAgICAgcm0gLWYgREYgJiYKKyAgICAgbWtkaXIgREYgJiYKKyAgICAgZWNobyBERi9ERiA+REYvREYgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBERiBERi9ERiAmJgorICAgICB0cmVlREZERj0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgICBlY2hvIHRyZWVERkRGICR0cmVlREZERiAmJgorICAgICBnaXQgbHMtdHJlZSAkdHJlZURGREYgJiYKKyAgICAgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPkRGREYub3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnREYgdnMgREYvREYgY2FzZSB0ZXN0LicgXAorICAgICdybSAtZiAuZ2l0L2luZGV4ICYmCisgICAgIHJtIC1mciBERiAmJgorICAgICBlY2hvIERGID5ERiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIERGICYmCisgICAgIHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAkdHJlZURGICR0cmVlREZERiAmJgorICAgICBnaXQgbHMtZmlsZXMgLS1zdGFnZSA+REZERmNoZWNrLm91dCAmJgorICAgICB0ZXN0X2NtcCBERkRGLm91dCBERkRGY2hlY2sub3V0ICYmCisgICAgIGNoZWNrX2NhY2hlX2F0IERGL0RGIGNsZWFuJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDMtcmVhZC10cmVlLXByZWZpeC5zaCBiL3QvdDEwMDMtcmVhZC10cmVlLXByZWZpeC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNjExMWNkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwMy1yZWFkLXRyZWUtcHJlZml4LnNoCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYWQtdHJlZSAtLXByZWZpeCB0ZXN0LgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+b25lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBvbmUgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZWNobyB0cmVlIGlzICR0cmVlCisnCisKK2VjaG8gJ29uZQordHdvL29uZScgPmV4cGVjdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgLS1wcmVmaXgnICcKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PXR3by8gJHRyZWUgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAwNC1yZWFkLXRyZWUtbS11LXdmLnNoIGIvdC90MTAwNC1yZWFkLXRyZWUtbS11LXdmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3MGNmNDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDA0LXJlYWQtdHJlZS1tLXUtd2Yuc2gKQEAgLTAsMCArMSwyNDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWFkLXRyZWUgLW0gLXUgY2hlY2tzIHdvcmtpbmcgdHJlZSBmaWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKworIyB0d28tdHJlZSB0ZXN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3by13YXkgc2V0dXAnICcKKworCW1rZGlyIHN1YmRpciAmJgorCWVjaG8gPmZpbGUxIGZpbGUgb25lICYmCisJZWNobyA+ZmlsZTIgZmlsZSB0d28gJiYKKwllY2hvID5zdWJkaXIvZmlsZTEgZmlsZSBvbmUgaW4gc3ViZGlyZWN0b3J5ICYmCisJZWNobyA+c3ViZGlyL2ZpbGUyIGZpbGUgdHdvIGluIHN1YmRpcmVjdG9yeSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZTEgZmlsZTIgc3ViZGlyL2ZpbGUxIHN1YmRpci9maWxlMiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJZ2l0IHRhZyAtZiBicmFuY2gtcG9pbnQgJiYKKworCWVjaG8gZmlsZTIgaXMgbm90IHRyYWNrZWQgb24gdGhlIG1hc3RlciBhbnltb3JlICYmCisJcm0gLWYgZmlsZTIgc3ViZGlyL2ZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBmaWxlMiBzdWJkaXIvZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJtYXN0ZXIgcmVtb3ZlcyBmaWxlMiBhbmQgc3ViZGlyL2ZpbGUyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28td2F5IG5vdCBjbG9iYmVyaW5nJyAnCisKKwllY2hvID5maWxlMiBtYXN0ZXIgY3JlYXRlcyB1bnRyYWNrZWQgZmlsZTIgJiYKKwllY2hvID5zdWJkaXIvZmlsZTIgbWFzdGVyIGNyZWF0ZXMgdW50cmFja2VkIHN1YmRpci9maWxlMiAmJgorCWlmIGVycj0kKHJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBtYXN0ZXIgc2lkZSAyPiYxKQorCXRoZW4KKwkJZWNobyBzaG91bGQgaGF2ZSBjb21wbGFpbmVkCisJCWZhbHNlCisJZWxzZQorCQllY2hvICJoYXBweSB0byBzZWUgJGVyciIKKwlmaQorJworCitlY2hvIGZpbGUyID4uZ2l0aWdub3JlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3by13YXkgd2l0aCBpbmNvcnJlY3QgLS1leGNsdWRlLXBlci1kaXJlY3RvcnkgKDEpJyAnCisKKwlpZiBlcnI9JChyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBtYXN0ZXIgc2lkZSAyPiYxKQorCXRoZW4KKwkJZWNobyBzaG91bGQgaGF2ZSBjb21wbGFpbmVkCisJCWZhbHNlCisJZWxzZQorCQllY2hvICJoYXBweSB0byBzZWUgJGVyciIKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28td2F5IHdpdGggaW5jb3JyZWN0IC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5ICgyKScgJworCisJaWYgZXJyPSQocmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PWZvbyAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIG1hc3RlciBzaWRlIDI+JjEpCisJdGhlbgorCQllY2hvIHNob3VsZCBoYXZlIGNvbXBsYWluZWQKKwkJZmFsc2UKKwllbHNlCisJCWVjaG8gImhhcHB5IHRvIHNlZSAkZXJyIgorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3by13YXkgY2xvYmJlcmluZyBhIGlnbm9yZWQgZmlsZScgJworCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PS5naXRpZ25vcmUgbWFzdGVyIHNpZGUKKycKKworcm0gLWYgLmdpdGlnbm9yZQorCisjIHRocmVlLXRyZWUgdGVzdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlZS13YXkgbm90IGNvbXBsYWluaW5nIG9uIGFuIHVudHJhY2tlZCBwYXRoIGluIGJvdGgnICcKKworCXJtIC1mIGZpbGUyIHN1YmRpci9maWxlMiAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZWNobyA+ZmlsZTMgZmlsZSB0aHJlZSAmJgorCWVjaG8gPnN1YmRpci9maWxlMyBmaWxlIHRocmVlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMyBzdWJkaXIvZmlsZTMgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzaWRlIGFkZHMgZmlsZTMgYW5kIHJlbW92ZXMgZmlsZTIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyA+ZmlsZTIgZmlsZSB0d28gaXMgdW50cmFja2VkIG9uIHRoZSBtYXN0ZXIgc2lkZSAmJgorCWVjaG8gPnN1YmRpci9maWxlMiBmaWxlIHR3byBpcyB1bnRyYWNrZWQgb24gdGhlIG1hc3RlciBzaWRlICYmCisKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgYnJhbmNoLXBvaW50IG1hc3RlciBzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVlLXdheSBub3QgY2xvYmJlcmluZyBhIHdvcmtpbmcgdHJlZSBmaWxlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgZmlsZTIgc3ViZGlyL2ZpbGUyIGZpbGUzIHN1YmRpci9maWxlMyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvID5maWxlMyBmaWxlIHRocmVlIGNyZWF0ZWQgaW4gbWFzdGVyLCB1bnRyYWNrZWQgJiYKKwllY2hvID5zdWJkaXIvZmlsZTMgZmlsZSB0aHJlZSBjcmVhdGVkIGluIG1hc3RlciwgdW50cmFja2VkICYmCisJaWYgZXJyPSQocmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IGJyYW5jaC1wb2ludCBtYXN0ZXIgc2lkZSAyPiYxKQorCXRoZW4KKwkJZWNobyBzaG91bGQgaGF2ZSBjb21wbGFpbmVkCisJCWZhbHNlCisJZWxzZQorCQllY2hvICJoYXBweSB0byBzZWUgJGVyciIKKwlmaQorJworCitlY2hvID4uZ2l0aWdub3JlIGZpbGUzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVlLXdheSBub3QgY29tcGxhaW5pbmcgb24gYW4gdW50cmFja2VkIGZpbGUnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBmaWxlMiBzdWJkaXIvZmlsZTIgZmlsZTMgc3ViZGlyL2ZpbGUzICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gPmZpbGUzIGZpbGUgdGhyZWUgY3JlYXRlZCBpbiBtYXN0ZXIsIHVudHJhY2tlZCAmJgorCWVjaG8gPnN1YmRpci9maWxlMyBmaWxlIHRocmVlIGNyZWF0ZWQgaW4gbWFzdGVyLCB1bnRyYWNrZWQgJiYKKworCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSAtLWV4Y2x1ZGUtcGVyLWRpcmVjdG9yeT0uZ2l0aWdub3JlIGJyYW5jaC1wb2ludCBtYXN0ZXIgc2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczLXdheSBub3Qgb3ZlcndyaXRpbmcgbG9jYWwgY2hhbmdlcyAoc2V0dXApJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUtYSBicmFuY2gtcG9pbnQgJiYKKwllY2hvID4+ZmlsZTEgIm5ldyBsaW5lIHRvIGJlIGtlcHQgaW4gdGhlIG1lcmdlIHJlc3VsdCIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzaWRlLWEgY2hhbmdlcyBmaWxlMSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZS1iIGJyYW5jaC1wb2ludCAmJgorCWVjaG8gPj5maWxlMiAibmV3IGxpbmUgdG8gYmUga2VwdCBpbiB0aGUgbWVyZ2UgcmVzdWx0IiAmJgorCWdpdCBjb21taXQgLWEgLW0gInNpZGUtYiBjaGFuZ2VzIGZpbGUyIiAmJgorCWdpdCBjaGVja291dCBzaWRlLWEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczLXdheSBub3Qgb3ZlcndyaXRpbmcgbG9jYWwgY2hhbmdlcyAob3VyIHNpZGUpJyAnCisKKwkjIEF0IHRoaXMgcG9pbnQsIGZpbGUxIGZyb20gc2lkZS1hIHNob3VsZCBiZSBrZXB0IGFzIHNpZGUtYgorCSMgZGlkIG5vdCB0b3VjaCBpdC4KKworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWVjaG8gPj5maWxlMSAibG9jYWwgY2hhbmdlcyIgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgYnJhbmNoLXBvaW50IHNpZGUtYSBzaWRlLWIgJiYKKwlncmVwICJuZXcgbGluZSB0byBiZSBrZXB0IiBmaWxlMSAmJgorCWdyZXAgImxvY2FsIGNoYW5nZXMiIGZpbGUxCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMy13YXkgbm90IG92ZXJ3cml0aW5nIGxvY2FsIGNoYW5nZXMgKHRoZWlyIHNpZGUpJyAnCisKKwkjIEF0IHRoaXMgcG9pbnQsIGZpbGUyIGZyb20gc2lkZS1iIHNob3VsZCBiZSB0YWtlbiBhcyBzaWRlLWEKKwkjIGRpZCBub3QgdG91Y2ggaXQuCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwllY2hvID4+ZmlsZTIgImxvY2FsIGNoYW5nZXMiICYmCisJcmVhZF90cmVlX3VfbXVzdF9mYWlsIC1tIC11IGJyYW5jaC1wb2ludCBzaWRlLWEgc2lkZS1iICYmCisJISBncmVwICJuZXcgbGluZSB0byBiZSBrZXB0IiBmaWxlMiAmJgorCWdyZXAgImxvY2FsIGNoYW5nZXMiIGZpbGUyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnVubnkgc3ltbGluayBpbiB3b3JrIHRyZWUnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc3ltLWIgc2lkZS1iICYmCisJbWtkaXIgLXAgYSAmJgorCT5hL2IgJiYKKwlnaXQgYWRkIGEvYiAmJgorCWdpdCBjb21taXQgLW0gInNpZGUgYWRkcyBhL2IiICYmCisKKwlybSAtZnIgYSAmJgorCWdpdCBjaGVja291dCAtYiBzeW0tYSBzaWRlLWEgJiYKKwlta2RpciAtcCBhICYmCisJdGVzdF9sbl9zX2FkZCAuLi9iIGEvYiAmJgorCWdpdCBjb21taXQgLW0gIndlIGFkZCBhL2IiICYmCisKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgc3ltLWEgc3ltLWEgc3ltLWIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNBTklUWSAnZnVubnkgc3ltbGluayBpbiB3b3JrIHRyZWUsIHVuLXVubGluay1hYmxlJyAnCisKKwlybSAtZnIgYSBiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZ2l0IGNoZWNrb3V0IHN5bS1hICYmCisJY2htb2QgYS13IGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVhZC10cmVlIC1tIC11IHN5bS1hIHN5bS1hIHN5bS1iCisKKycKKworIyBjbGVhbi11cCBmcm9tIHRoZSBhYm92ZSB0ZXN0CitjaG1vZCBhK3cgYSAyPi9kZXYvbnVsbAorcm0gLWZyIGEgYgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0Ygc2V0dXAnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWdpdCBjaGVja291dCBzaWRlLWEgJiYKKwlybSAtZiBzdWJkaXIvZmlsZTIgJiYKKwlta2RpciBzdWJkaXIvZmlsZTIgJiYKKwllY2hvIHFmd2ZxID5zdWJkaXIvZmlsZTIvYW5vdGhlciAmJgorCWdpdCBhZGQgc3ViZGlyL2ZpbGUyL2Fub3RoZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzaWRlLWEgY2hhbmdlcyBmaWxlMiB0byBkaXJlY3RvcnkiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRC9GJyAnCisKKwlnaXQgY2hlY2tvdXQgc2lkZS1iICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IGJyYW5jaC1wb2ludCBzaWRlLWIgc2lkZS1hICYmCisJZ2l0IGxzLWZpbGVzIC11ID5hY3R1YWwgJiYKKwkoCisJCWE9JChnaXQgcmV2LXBhcnNlIGJyYW5jaC1wb2ludDpzdWJkaXIvZmlsZTIpCisJCWI9JChnaXQgcmV2LXBhcnNlIHNpZGUtYTpzdWJkaXIvZmlsZTIvYW5vdGhlcikKKwkJZWNobyAiMTAwNjQ0ICRhIDEJc3ViZGlyL2ZpbGUyIgorCQllY2hvICIxMDA2NDQgJGEgMglzdWJkaXIvZmlsZTIiCisJCWVjaG8gIjEwMDY0NCAkYiAzCXN1YmRpci9maWxlMi9hbm90aGVyIgorCSkgPmV4cGVjdCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3QKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEL0YgcmVzb2x2ZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBzaWRlLWIgJiYKKwlnaXQgbWVyZ2UtcmVzb2x2ZSBicmFuY2gtcG9pbnQgLS0gc2lkZS1iIHNpZGUtYQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0QvRiByZWN1cnNpdmUnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZS1iICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBicmFuY2gtcG9pbnQgLS0gc2lkZS1iIHNpZGUtYQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAwNS1yZWFkLXRyZWUtcmVzZXQuc2ggYi90L3QxMDA1LXJlYWQtdHJlZS1yZXNldC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNzQ1Njg1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwNS1yZWFkLXRyZWUtcmVzZXQuc2gKQEAgLTAsMCArMSwxMDYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWFkLXRyZWUgLXUgLS1yZXNldCcKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKworIyB0d28tdHJlZSB0ZXN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGluaXQgJiYKKwlta2RpciBkZiAmJgorCWVjaG8gY29udGVudCA+ZGYvZmlsZSAmJgorCWdpdCBhZGQgZGYvZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZ2l0IGxzLWZpbGVzID5leHBlY3QgJiYKKwlybSAtcmYgZGYgJiYKKwllY2hvIGNvbnRlbnQgPmRmICYmCisJZ2l0IGFkZCBkZiAmJgorCWVjaG8gY29udGVudCA+bmV3ICYmCisJZ2l0IGFkZCBuZXcgJiYKKwlnaXQgY29tbWl0IC1tIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBzaG91bGQgd29yaycgJworCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtdSAtLXJlc2V0IEhFQUReICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHNob3VsZCByZW1vdmUgcmVtbmFudHMgZnJvbSBhIGZhaWxlZCBtZXJnZScgJworCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdCAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIDpuZXcpICYmCisJKAorCQllY2hvICIxMDA2NDQgJHNoYTEgMQlvbGQiCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAzCW9sZCIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwk+b2xkICYmCisJZ2l0IGxzLWZpbGVzIC1zICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJISB0ZXN0IC1mIG9sZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28td2F5IHJlc2V0IHNob3VsZCByZW1vdmUgcmVtbmFudHMgdG9vJyAnCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtcyA+ZXhwZWN0ICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgOm5ldykgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAxCW9sZCIKKwkJZWNobyAiMTAwNjQ0ICRzaGExIDMJb2xkIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCT5vbGQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLS1yZXNldCAtdSBIRUFEIEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSEgdGVzdCAtZiBvbGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUG9yY2VsYWluIHJlc2V0IHNob3VsZCByZW1vdmUgcmVtbmFudHMgdG9vJyAnCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtcyA+ZXhwZWN0ICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgOm5ldykgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAxCW9sZCIKKwkJZWNobyAiMTAwNjQ0ICRzaGExIDMJb2xkIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCT5vbGQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkhIHRlc3QgLWYgb2xkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1BvcmNlbGFpbiBjaGVja291dCAtZiBzaG91bGQgcmVtb3ZlIHJlbW5hbnRzIHRvbycgJworCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdCAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIDpuZXcpICYmCisJKAorCQllY2hvICIxMDA2NDQgJHNoYTEgMQlvbGQiCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAzCW9sZCIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwk+b2xkICYmCisJZ2l0IGxzLWZpbGVzIC1zICYmCisJZ2l0IGNoZWNrb3V0IC1mICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkhIHRlc3QgLWYgb2xkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1BvcmNlbGFpbiBjaGVja291dCAtZiBIRUFEIHNob3VsZCByZW1vdmUgcmVtbmFudHMgdG9vJyAnCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtcyA+ZXhwZWN0ICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgOm5ldykgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAxCW9sZCIKKwkJZWNobyAiMTAwNjQ0ICRzaGExIDMJb2xkIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCT5vbGQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgJiYKKwlnaXQgY2hlY2tvdXQgLWYgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJISB0ZXN0IC1mIG9sZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDYtY2F0LWZpbGUuc2ggYi90L3QxMDA2LWNhdC1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRmMzgwNzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDA2LWNhdC1maWxlLnNoCkBAIC0wLDAgKzEsNTc2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNhdC1maWxlJworCisuIC4vdGVzdC1saWIuc2gKKworZWNob193aXRob3V0X25ld2xpbmUgKCkgeworICAgIHByaW50ZiAnJXMnICIkKiIKK30KKworc3RybGVuICgpIHsKKyAgICBlY2hvX3dpdGhvdXRfbmV3bGluZSAiJDEiIHwgd2MgLWMgfCBzZWQgLWUgJ3MvXiAqLy8nCit9CisKK21heWJlX3JlbW92ZV90aW1lc3RhbXAgKCkgeworICAgIGlmIHRlc3QgLXogIiQyIjsgdGhlbgorICAgICAgICBlY2hvX3dpdGhvdXRfbmV3bGluZSAiJDEiCisgICAgZWxzZQorCWVjaG9fd2l0aG91dF9uZXdsaW5lICIkKHByaW50ZiAnJXNcbicgIiQxIiB8IHNlZCAtZSAncy8gWzAtOV1bMC05XSogWy0rXVswLTldWzAtOV1bMC05XVswLTldJC8vJykiCisgICAgZmkKK30KKworcnVuX3Rlc3RzICgpIHsKKyAgICB0eXBlPSQxCisgICAgc2hhMT0kMgorICAgIHNpemU9JDMKKyAgICBjb250ZW50PSQ0CisgICAgcHJldHR5X2NvbnRlbnQ9JDUKKyAgICBub190cz0kNgorCisgICAgYmF0Y2hfb3V0cHV0PSIkc2hhMSAkdHlwZSAkc2l6ZQorJGNvbnRlbnQiCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICIkdHlwZSBleGlzdHMiICcKKwlnaXQgY2F0LWZpbGUgLWUgJHNoYTEKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJUeXBlIG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKwllY2hvICR0eXBlID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXQgJHNoYTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJTaXplIG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKwllY2hvICRzaXplID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXMgJHNoYTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJUeXBlIG9mICR0eXBlIGlzIGNvcnJlY3QgdXNpbmcgLS1hbGxvdy11bmtub3duLXR5cGUiICcKKwllY2hvICR0eXBlID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXQgLS1hbGxvdy11bmtub3duLXR5cGUgJHNoYTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJTaXplIG9mICR0eXBlIGlzIGNvcnJlY3QgdXNpbmcgLS1hbGxvdy11bmtub3duLXR5cGUiICcKKwllY2hvICRzaXplID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXMgLS1hbGxvdy11bmtub3duLXR5cGUgJHNoYTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCisKKyAgICB0ZXN0IC16ICIkY29udGVudCIgfHwKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJDb250ZW50IG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKwltYXliZV9yZW1vdmVfdGltZXN0YW1wICIkY29udGVudCIgJG5vX3RzID5leHBlY3QgJiYKKwltYXliZV9yZW1vdmVfdGltZXN0YW1wICIkKGdpdCBjYXQtZmlsZSAkdHlwZSAkc2hhMSkiICRub190cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlByZXR0eSBjb250ZW50IG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKwltYXliZV9yZW1vdmVfdGltZXN0YW1wICIkcHJldHR5X2NvbnRlbnQiICRub190cyA+ZXhwZWN0ICYmCisJbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJChnaXQgY2F0LWZpbGUgLXAgJHNoYTEpIiAkbm9fdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCisKKyAgICB0ZXN0IC16ICIkY29udGVudCIgfHwKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoIG91dHB1dCBvZiAkdHlwZSBpcyBjb3JyZWN0IiAnCisJbWF5YmVfcmVtb3ZlX3RpbWVzdGFtcCAiJGJhdGNoX291dHB1dCIgJG5vX3RzID5leHBlY3QgJiYKKwltYXliZV9yZW1vdmVfdGltZXN0YW1wICIkKGVjaG8gJHNoYTEgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCkiICRub190cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgb3V0cHV0IG9mICR0eXBlIGlzIGNvcnJlY3QiICcKKwllY2hvICIkc2hhMSAkdHlwZSAkc2l6ZSIgPmV4cGVjdCAmJgorCWVjaG9fd2l0aG91dF9uZXdsaW5lICRzaGExIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyAgICAnCisKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJjdXN0b20gLS1iYXRjaC1jaGVjayBmb3JtYXQiICcKKwllY2hvICIkdHlwZSAkc2hhMSIgPmV4cGVjdCAmJgorCWVjaG8gJHNoYTEgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaz0iJShvYmplY3R0eXBlKSAlKG9iamVjdG5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorICAgICcKKworICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYmF0Y2gtY2hlY2sgd2l0aCAlKHJlc3QpJyAnCisJZWNobyAiJHR5cGUgdGhpcyBpcyBzb21lIGV4dHJhIGNvbnRlbnQiID5leHBlY3QgJiYKKwllY2hvICIkc2hhMSAgICB0aGlzIGlzIHNvbWUgZXh0cmEgY29udGVudCIgfAorCQlnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjaz0iJShvYmplY3R0eXBlKSAlKHJlc3QpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorICAgICcKKworICAgIHRlc3QgLXogIiRjb250ZW50IiB8fAorICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2ggd2l0aG91dCB0eXBlICgkdHlwZSkiICcKKwl7CisJCWVjaG8gIiRzaXplIiAmJgorCQltYXliZV9yZW1vdmVfdGltZXN0YW1wICIkY29udGVudCIgJG5vX3RzCisJfSA+ZXhwZWN0ICYmCisJZWNobyAkc2hhMSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoPSIlKG9iamVjdHNpemUpIiA+YWN0dWFsLmZ1bGwgJiYKKwltYXliZV9yZW1vdmVfdGltZXN0YW1wICIkKGNhdCBhY3R1YWwuZnVsbCkiICRub190cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorICAgICcKKworICAgIHRlc3QgLXogIiRjb250ZW50IiB8fAorICAgIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2ggd2l0aG91dCBzaXplICgkdHlwZSkiICcKKwl7CisJCWVjaG8gIiR0eXBlIiAmJgorCQltYXliZV9yZW1vdmVfdGltZXN0YW1wICIkY29udGVudCIgJG5vX3RzCisJfSA+ZXhwZWN0ICYmCisJZWNobyAkc2hhMSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoPSIlKG9iamVjdHR5cGUpIiA+YWN0dWFsLmZ1bGwgJiYKKwltYXliZV9yZW1vdmVfdGltZXN0YW1wICIkKGNhdCBhY3R1YWwuZnVsbCkiICRub190cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorICAgICcKK30KKworaGVsbG9fY29udGVudD0iSGVsbG8gV29ybGQiCitoZWxsb19zaXplPSQoc3RybGVuICIkaGVsbG9fY29udGVudCIpCitoZWxsb19zaGExPSQoZWNob193aXRob3V0X25ld2xpbmUgIiRoZWxsb19jb250ZW50IiB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCIgJworCWVjaG9fd2l0aG91dF9uZXdsaW5lICIkaGVsbG9fY29udGVudCIgPiBoZWxsbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgaGVsbG8KKycKKworcnVuX3Rlc3RzICdibG9iJyAkaGVsbG9fc2hhMSAkaGVsbG9fc2l6ZSAiJGhlbGxvX2NvbnRlbnQiICIkaGVsbG9fY29udGVudCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1iYXRjaC1jaGVjayB3aXRob3V0ICUocmVzdCkgY29uc2lkZXJzIHdob2xlIGxpbmUnICcKKwllY2hvICIkaGVsbG9fc2hhMSBibG9iICRoZWxsb19zaXplIiA+ZXhwZWN0ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJGhlbGxvX3NoYTEgIndoaXRlIHNwYWNlIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBcIndoaXRlIHNwYWNlXCIiICYmCisJZWNobyAiOndoaXRlIHNwYWNlIiB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3RyZWVfc2hhMT0kKGdpdCB3cml0ZS10cmVlKQordHJlZV9zaXplPTMzCit0cmVlX3ByZXR0eV9jb250ZW50PSIxMDA2NDQgYmxvYiAkaGVsbG9fc2hhMQloZWxsbyIKKworcnVuX3Rlc3RzICd0cmVlJyAkdHJlZV9zaGExICR0cmVlX3NpemUgIiIgIiR0cmVlX3ByZXR0eV9jb250ZW50IgorCitjb21taXRfbWVzc2FnZT0iSW5pdGlhbCBjb21taXQiCitjb21taXRfc2hhMT0kKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkY29tbWl0X21lc3NhZ2UiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlX3NoYTEpCitjb21taXRfc2l6ZT0xNzcKK2NvbW1pdF9jb250ZW50PSJ0cmVlICR0cmVlX3NoYTEKK2F1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gMDAwMDAwMDAwMCArMDAwMAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAwMDAwMDAwMDAwICswMDAwCisKKyRjb21taXRfbWVzc2FnZSIKKworcnVuX3Rlc3RzICdjb21taXQnICRjb21taXRfc2hhMSAkY29tbWl0X3NpemUgIiRjb21taXRfY29udGVudCIgIiRjb21taXRfY29udGVudCIgMQorCit0YWdfaGVhZGVyX3dpdGhvdXRfdGltZXN0YW1wPSJvYmplY3QgJGhlbGxvX3NoYTEKK3R5cGUgYmxvYgordGFnIGhlbGxvdGFnCit0YWdnZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IgordGFnX2Rlc2NyaXB0aW9uPSJUaGlzIGlzIGEgdGFnIgordGFnX2NvbnRlbnQ9IiR0YWdfaGVhZGVyX3dpdGhvdXRfdGltZXN0YW1wIDAwMDAwMDAwMDAgKzAwMDAKKworJHRhZ19kZXNjcmlwdGlvbiIKKwordGFnX3NoYTE9JChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJHRhZ19jb250ZW50IiB8IGdpdCBta3RhZykKK3RhZ19zaXplPSQoc3RybGVuICIkdGFnX2NvbnRlbnQiKQorCitydW5fdGVzdHMgJ3RhZycgJHRhZ19zaGExICR0YWdfc2l6ZSAiJHRhZ19jb250ZW50IiAiJHRhZ19jb250ZW50IiAxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICJSZWFjaCBhIGJsb2IgZnJvbSBhIHRhZyBwb2ludGluZyB0byBpdCIgXAorICAgICJ0ZXN0ICckaGVsbG9fY29udGVudCcgPSBcIlwkKGdpdCBjYXQtZmlsZSBibG9iICR0YWdfc2hhMSlcIiIKKworZm9yIGJhdGNoIGluIGJhdGNoIGJhdGNoLWNoZWNrCitkbworICAgIGZvciBvcHQgaW4gdCBzIGUgcAorICAgIGRvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiUGFzc2luZyAtJG9wdCB3aXRoIC0tJGJhdGNoIGZhaWxzIiAnCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtLSRiYXRjaCAtJG9wdCAkaGVsbG9fc2hhMQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlBhc3NpbmcgLS0kYmF0Y2ggd2l0aCAtJG9wdCBmYWlscyIgJworCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLSRvcHQgLS0kYmF0Y2ggJGhlbGxvX3NoYTEKKwknCisgICAgZG9uZQorCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiUGFzc2luZyA8dHlwZT4gd2l0aCAtLSRiYXRjaCBmYWlscyIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtLSRiYXRjaCBibG9iICRoZWxsb19zaGExCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiUGFzc2luZyAtLSRiYXRjaCB3aXRoIDx0eXBlPiBmYWlscyIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iIC0tJGJhdGNoICRoZWxsb19zaGExCisgICAgJworCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiUGFzc2luZyBzaGExIHdpdGggLS0kYmF0Y2ggZmFpbHMiICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLS0kYmF0Y2ggJGhlbGxvX3NoYTEKKyAgICAnCitkb25lCisKK2ZvciBvcHQgaW4gdCBzIGUgcAorZG8KKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJQYXNzaW5nIC0kb3B0IHdpdGggLS1mb2xsb3ctc3ltbGlua3MgZmFpbHMiICcKKwkgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC0tZm9sbG93LXN5bWxpbmtzIC0kb3B0ICRoZWxsb19zaGExCisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoLWNoZWNrIGZvciBhIG5vbi1leGlzdGVudCBuYW1lZCBvYmplY3QiICcKKyAgICB0ZXN0ICJmb29iYXI0MiBtaXNzaW5nCitmb29iYXI4NCBtaXNzaW5nIiA9IFwKKyAgICAiJCggKCBlY2hvIGZvb2JhcjQyOyBlY2hvX3dpdGhvdXRfbmV3bGluZSBmb29iYXI4NDsgKSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaC1jaGVjayBmb3IgYSBub24tZXhpc3RlbnQgaGFzaCIgJworICAgIHRlc3QgIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIgbWlzc2luZworMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NCBtaXNzaW5nIiA9IFwKKyAgICAiJCggKCBlY2hvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDI7CisgICAgICAgICBlY2hvX3dpdGhvdXRfbmV3bGluZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0OyApIFwKKyAgICAgICB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1iYXRjaCBmb3IgYW4gZXhpc3RlbnQgYW5kIGEgbm9uLWV4aXN0ZW50IGhhc2giICcKKyAgICB0ZXN0ICIkdGFnX3NoYTEgdGFnICR0YWdfc2l6ZQorJHRhZ19jb250ZW50CiswMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIG1pc3NpbmciID0gXAorICAgICIkKCAoIGVjaG8gJHRhZ19zaGExOworICAgICAgICAgZWNob193aXRob3V0X25ld2xpbmUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDsgKSBcCisgICAgICAgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tYmF0Y2gtY2hlY2sgZm9yIGFuIGVtdHB5IGxpbmUiICcKKyAgICB0ZXN0ICIgbWlzc2luZyIgPSAiJChlY2hvIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2spIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSAtLWJhdGNoLWNoZWNrIG5vdGljZXMgbWlzc2luZyBvYmplY3QnICcKKwllY2hvICIkX3o0MCBtaXNzaW5nIiA+ZXhwZWN0ICYmCisJZWNobyAiJF96NDAiIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9IiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworYmF0Y2hfaW5wdXQ9IiRoZWxsb19zaGExCiskY29tbWl0X3NoYTEKKyR0YWdfc2hhMQorZGVhZGJlZWYKKworIgorCitiYXRjaF9vdXRwdXQ9IiRoZWxsb19zaGExIGJsb2IgJGhlbGxvX3NpemUKKyRoZWxsb19jb250ZW50CiskY29tbWl0X3NoYTEgY29tbWl0ICRjb21taXRfc2l6ZQorJGNvbW1pdF9jb250ZW50CiskdGFnX3NoYTEgdGFnICR0YWdfc2l6ZQorJHRhZ19jb250ZW50CitkZWFkYmVlZiBtaXNzaW5nCisgbWlzc2luZyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1iYXRjaCB3aXRoIG11bHRpcGxlIHNoYTFzIGdpdmVzIGNvcnJlY3QgZm9ybWF0JyAnCisJdGVzdCAiJChtYXliZV9yZW1vdmVfdGltZXN0YW1wICIkYmF0Y2hfb3V0cHV0IiAxKSIgPSAiJChtYXliZV9yZW1vdmVfdGltZXN0YW1wICIkKGVjaG9fd2l0aG91dF9uZXdsaW5lICIkYmF0Y2hfaW5wdXQiIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gpIiAxKSIKKycKKworYmF0Y2hfY2hlY2tfaW5wdXQ9IiRoZWxsb19zaGExCiskdHJlZV9zaGExCiskY29tbWl0X3NoYTEKKyR0YWdfc2hhMQorZGVhZGJlZWYKKworIgorCitiYXRjaF9jaGVja19vdXRwdXQ9IiRoZWxsb19zaGExIGJsb2IgJGhlbGxvX3NpemUKKyR0cmVlX3NoYTEgdHJlZSAkdHJlZV9zaXplCiskY29tbWl0X3NoYTEgY29tbWl0ICRjb21taXRfc2l6ZQorJHRhZ19zaGExIHRhZyAkdGFnX3NpemUKK2RlYWRiZWVmIG1pc3NpbmcKKyBtaXNzaW5nIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWJhdGNoLWNoZWNrIHdpdGggbXVsdGlwbGUgc2hhMXMgZ2l2ZXMgY29ycmVjdCBmb3JtYXQiICcKKyAgICB0ZXN0ICIkYmF0Y2hfY2hlY2tfb3V0cHV0IiA9IFwKKyAgICAiJChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGJhdGNoX2NoZWNrX2lucHV0IiB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmxvYnMgd2hpY2ggYXJlIGxpa2VseSB0byBkZWx0YScgJworCXRlc3QtZ2VucmFuZG9tIGZvbyAxMDI0MCA+Zm9vICYmCisJeyBjYXQgZm9vOyBlY2hvIHBsdXM7IH0gPmZvby1wbHVzICYmCisJZ2l0IGFkZCBmb28gZm9vLXBsdXMgJiYKKwlnaXQgY29tbWl0IC1tIGZvbyAmJgorCWNhdCA+YmxvYnMgPDwtXEVPRgorCUhFQUQ6Zm9vCisJSEVBRDpmb28tcGx1cworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maXJtIHRoYXQgbmVpdGhlciBsb29zZSBibG9iIGlzIGEgZGVsdGEnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkkX3o0MAorCSRfejQwCisJRU9GCisJZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9IiUoZGVsdGFiYXNlKSIgPGJsb2JzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVG8gYXZvaWQgcmVseWluZyB0b28gbXVjaCBvbiB0aGUgY3VycmVudCBkZWx0YSBoZXVyaXN0aWNzLAorIyB3ZSB3aWxsIGNoZWNrIG9ubHkgdGhhdCBvbmUgb2YgdGhlIHR3byBvYmplY3RzIGlzIGEgZGVsdGEKKyMgYWdhaW5zdCB0aGUgb3RoZXIsIGJ1dCBub3QgdGhlIG9yZGVyLiBXZSBjYW4gZG8gc28gYnkganVzdAorIyBhc2tpbmcgZm9yIHRoZSBiYXNlIG9mIGJvdGgsIGFuZCBjaGVja2luZyB3aGV0aGVyIGVpdGhlcgorIyBzaGExIGFwcGVhcnMgaW4gdGhlIG91dHB1dC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUoZGVsdGFiYXNlKSByZXBvcnRzIHBhY2tlZCBkZWx0YSBiYXNlcycgJworCWdpdCByZXBhY2sgLWFkICYmCisJZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2s9IiUoZGVsdGFiYXNlKSIgPGJsb2JzID5hY3R1YWwgJiYKKwl7CisJCWdyZXAgIiQoZ2l0IHJldi1wYXJzZSBIRUFEOmZvbykiIGFjdHVhbCB8fAorCQlncmVwICIkKGdpdCByZXYtcGFyc2UgSEVBRDpmb28tcGx1cykiIGFjdHVhbAorCX0KKycKKworYm9ndXNfdHlwZT0iYm9ndXMiCitib2d1c19jb250ZW50PSJib2d1cyIKK2JvZ3VzX3NpemU9JChzdHJsZW4gIiRib2d1c19jb250ZW50IikKK2JvZ3VzX3NoYTE9JChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGJvZ3VzX2NvbnRlbnQiIHwgZ2l0IGhhc2gtb2JqZWN0IC10ICRib2d1c190eXBlIC0tbGl0ZXJhbGx5IC13IC0tc3RkaW4pCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlR5cGUgb2YgYnJva2VuIG9iamVjdCBpcyBjb3JyZWN0IiAnCisJZWNobyAkYm9ndXNfdHlwZSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC10IC0tYWxsb3ctdW5rbm93bi10eXBlICRib2d1c19zaGExID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlNpemUgb2YgYnJva2VuIG9iamVjdCBpcyBjb3JyZWN0IiAnCisJZWNobyAkYm9ndXNfc2l6ZSA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIC1zIC0tYWxsb3ctdW5rbm93bi10eXBlICRib2d1c19zaGExID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCitib2d1c190eXBlPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ2NzkiCitib2d1c19jb250ZW50PSJib2d1cyIKK2JvZ3VzX3NpemU9JChzdHJsZW4gIiRib2d1c19jb250ZW50IikKK2JvZ3VzX3NoYTE9JChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGJvZ3VzX2NvbnRlbnQiIHwgZ2l0IGhhc2gtb2JqZWN0IC10ICRib2d1c190eXBlIC0tbGl0ZXJhbGx5IC13IC0tc3RkaW4pCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlR5cGUgb2YgYnJva2VuIG9iamVjdCBpcyBjb3JyZWN0IHdoZW4gdHlwZSBpcyBsYXJnZSIgJworCWVjaG8gJGJvZ3VzX3R5cGUgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSAtdCAtLWFsbG93LXVua25vd24tdHlwZSAkYm9ndXNfc2hhMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJTaXplIG9mIGxhcmdlIGJyb2tlbiBvYmplY3QgaXMgY29ycmVjdCB3aGVuIHR5cGUgaXMgbGFyZ2UiICcKKwllY2hvICRib2d1c19zaXplID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXMgLS1hbGxvdy11bmtub3duLXR5cGUgJGJvZ3VzX3NoYTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBUZXN0cyBmb3IgZ2l0IGNhdC1maWxlIC0tZm9sbG93LXN5bWxpbmtzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwIGZvciBzeW1saW5rIHRlc3RzJyAnCisJZWNob193aXRob3V0X25ld2xpbmUgIiRoZWxsb19jb250ZW50IiA+bW9yeCAmJgorCXRlc3RfbG5fc19hZGQgbW9yeCBzYW1lLWRpci1saW5rICYmCisJdGVzdF9sbl9zX2FkZCBkaXIgbGluay10by1kaXIgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uL2ZsZWVtIG91dC1vZi1yZXBvLWxpbmsgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uIG91dC1vZi1yZXBvLWxpbmstZGlyICYmCisJdGVzdF9sbl9zX2FkZCBzYW1lLWRpci1saW5rIGxpbmstdG8tbGluayAmJgorCXRlc3RfbG5fc19hZGQgbm9wZSBicm9rZW4tc2FtZS1kaXItbGluayAmJgorCW1rZGlyIGRpciAmJgorCXRlc3RfbG5fc19hZGQgLi4vbW9yeCBkaXIvcGFyZW50LWRpci1saW5rICYmCisJdGVzdF9sbl9zX2FkZCAuLiBkaXIvbGluay1kaXIgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uLy4uL2VzY2FwZSBkaXIvb3V0LW9mLXJlcG8tbGluayAmJgorCXRlc3RfbG5fc19hZGQgLi4vLi4gZGlyL291dC1vZi1yZXBvLWxpbmstZGlyICYmCisJdGVzdF9sbl9zX2FkZCBub3BlIGRpci9icm9rZW4tbGluay1pbi1kaXIgJiYKKwlta2RpciBkaXIvc3ViZGlyICYmCisJdGVzdF9sbl9zX2FkZCAuLi8uLi9tb3J4IGRpci9zdWJkaXIvZ3JhbmRwYXJlbnQtZGlyLWxpbmsgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uLy4uLy4uL2dyZWF0LWVzY2FwZSBkaXIvc3ViZGlyL291dC1vZi1yZXBvLWxpbmsgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uLy4uLy4uIGRpci9zdWJkaXIvb3V0LW9mLXJlcG8tbGluay1kaXIgJiYKKwl0ZXN0X2xuX3NfYWRkIC4uLy4uLy4uLyBkaXIvc3ViZGlyL291dC1vZi1yZXBvLWxpbmstZGlyLXRyYWlsaW5nICYmCisJdGVzdF9sbl9zX2FkZCAuLi9wYXJlbnQtZGlyLWxpbmsgZGlyL3N1YmRpci9wYXJlbnQtZGlyLWxpbmstdG8tbGluayAmJgorCWVjaG9fd2l0aG91dF9uZXdsaW5lICIkaGVsbG9fY29udGVudCIgPmRpci9zdWJkaXIvaW5kMiAmJgorCWVjaG9fd2l0aG91dF9uZXdsaW5lICIkaGVsbG9fY29udGVudCIgPmRpci9pbmQxICYmCisJdGVzdF9sbl9zX2FkZCBkaXIgZGlybGluayAmJgorCXRlc3RfbG5fc19hZGQgZGlyL3N1YmRpciBzdWJkaXJsaW5rICYmCisJdGVzdF9sbl9zX2FkZCBzdWJkaXIvaW5kMiBkaXIvbGluay10by1jaGlsZCAmJgorCXRlc3RfbG5fc19hZGQgZGlyL2xpbmstdG8tY2hpbGQgbGluay10by1kb3duLWxpbmsgJiYKKwl0ZXN0X2xuX3NfYWRkIGRpci8uLiB1cC1kb3duICYmCisJdGVzdF9sbl9zX2FkZCBkaXIvLi4vIHVwLWRvd24tdHJhaWxpbmcgJiYKKwl0ZXN0X2xuX3NfYWRkIGRpci8uLi9tb3J4IHVwLWRvd24tZmlsZSAmJgorCXRlc3RfbG5fc19hZGQgZGlyLy4uLy4uL21vcnggdXAtdXAtZG93bi1maWxlICYmCisJdGVzdF9sbl9zX2FkZCBzdWJkaXJsaW5rLy4uLy4uL21vcnggdXAtdHdvLWRvd24tZmlsZSAmJgorCXRlc3RfbG5fc19hZGQgbG9vcDEgbG9vcDIgJiYKKwl0ZXN0X2xuX3NfYWRkIGxvb3AyIGxvb3AxICYmCisJZ2l0IGFkZCBtb3J4IGRpci9zdWJkaXIvaW5kMiBkaXIvaW5kMSAmJgorCWdpdCBjb21taXQgLWFtICJ0ZXN0IiAmJgorCWVjaG8gJGhlbGxvX3NoYTEgYmxvYiAkaGVsbG9fc2l6ZSA+Zm91bmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIG5vbi1saW5rcycgJworCWVjaG8gSEVBRDptb3J4IHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGZvdW5kIGFjdHVhbCAmJgorCWVjaG8gSEVBRDpub3BlIG1pc3NpbmcgPmV4cGVjdCAmJgorCWVjaG8gSEVBRDpub3BlIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIGluLXJlcG8sIHNhbWUtZGlyIGxpbmtzJyAnCisJZWNobyBIRUFEOnNhbWUtZGlyLWxpbmsgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZm91bmQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzIHdvcmtzIGZvciBpbi1yZXBvLCBsaW5rcyB0byBkaXJzJyAnCisJZWNobyBIRUFEOmxpbmstdG8tZGlyL2luZDEgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZm91bmQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIGJyb2tlbiBpbi1yZXBvLCBzYW1lLWRpciBsaW5rcycgJworCWVjaG8gZGFuZ2xpbmcgMjUgPmV4cGVjdCAmJgorCWVjaG8gSEVBRDpicm9rZW4tc2FtZS1kaXItbGluayA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpicm9rZW4tc2FtZS1kaXItbGluayB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzIHdvcmtzIGZvciBzYW1lLWRpciBsaW5rcy10by1saW5rcycgJworCWVjaG8gSEVBRDpsaW5rLXRvLWxpbmsgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZm91bmQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzIHdvcmtzIGZvciBwYXJlbnQtZGlyIGxpbmtzJyAnCisJZWNobyBIRUFEOmRpci9wYXJlbnQtZGlyLWxpbmsgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZm91bmQgYWN0dWFsICYmCisJZWNobyBub3RkaXIgMjkgPmV4cGVjdCAmJgorCWVjaG8gSEVBRDpkaXIvcGFyZW50LWRpci1saW5rL25vcGUgPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL3BhcmVudC1kaXItbGluay9ub3BlIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIC4uIGxpbmtzJyAnCisJZWNobyBkYW5nbGluZyAyMiA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpci9saW5rLWRpci9ub3BlID4+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpci9saW5rLWRpci9ub3BlIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIEhFQUQ6ZGlyL2xpbmstZGlyL21vcnggfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZm91bmQgYWN0dWFsICYmCisJZWNobyBkYW5nbGluZyAyNyA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpci9icm9rZW4tbGluay1pbi1kaXIgPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL2Jyb2tlbi1saW5rLWluLWRpciB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzIHdvcmtzIGZvciAuLi8uLiBsaW5rcycgJworCWVjaG8gbm90ZGlyIDQxID5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL3N1YmRpci9ncmFuZHBhcmVudC1kaXItbGluay9ub3BlID4+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpci9zdWJkaXIvZ3JhbmRwYXJlbnQtZGlyLWxpbmsvbm9wZSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBIRUFEOmRpci9zdWJkaXIvZ3JhbmRwYXJlbnQtZGlyLWxpbmsgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZm91bmQgYWN0dWFsICYmCisJZWNobyBIRUFEOmRpci9zdWJkaXIvcGFyZW50LWRpci1saW5rLXRvLWxpbmsgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZm91bmQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzIHdvcmtzIGZvciBkaXIvIGxpbmtzJyAnCisJZWNobyBkYW5nbGluZyAxNyA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpcmxpbmsvbW9yeCA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpkaXJsaW5rL21vcnggfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gJGhlbGxvX3NoYTEgYmxvYiAkaGVsbG9fc2l6ZSA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpcmxpbmsvaW5kMSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzIHdvcmtzIGZvciBkaXIvc3ViZGlyIGxpbmtzJyAnCisJZWNobyBkYW5nbGluZyAyMCA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOnN1YmRpcmxpbmsvbW9yeCA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpzdWJkaXJsaW5rL21vcnggfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gSEVBRDpzdWJkaXJsaW5rL2luZDIgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZm91bmQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzIHdvcmtzIGZvciBkaXIgLT5zdWJkaXIgbGlua3MnICcKKwllY2hvIG5vdGRpciAyNyA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpci9saW5rLXRvLWNoaWxkL21vcnggPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL2xpbmstdG8tY2hpbGQvbW9yeCB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBIRUFEOmRpci9saW5rLXRvLWNoaWxkIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGZvdW5kIGFjdHVhbCAmJgorCWVjaG8gSEVBRDpsaW5rLXRvLWRvd24tbGluayB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmb3VuZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIG91dC1vZi1yZXBvIHN5bWxpbmtzJyAnCisJZWNobyBzeW1saW5rIDggPmV4cGVjdCAmJgorCWVjaG8gLi4vZmxlZW0gPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6b3V0LW9mLXJlcG8tbGluayB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBzeW1saW5rIDIgPmV4cGVjdCAmJgorCWVjaG8gLi4gPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6b3V0LW9mLXJlcG8tbGluay1kaXIgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyB3b3JrcyBmb3Igb3V0LW9mLXJlcG8gc3ltbGlua3MgaW4gZGlycycgJworCWVjaG8gc3ltbGluayA5ID5leHBlY3QgJiYKKwllY2hvIC4uL2VzY2FwZSA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpkaXIvb3V0LW9mLXJlcG8tbGluayB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBzeW1saW5rIDIgPmV4cGVjdCAmJgorCWVjaG8gLi4gPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL291dC1vZi1yZXBvLWxpbmstZGlyIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3Mgd29ya3MgZm9yIG91dC1vZi1yZXBvIHN5bWxpbmtzIGluIHN1YmRpcnMnICcKKwllY2hvIHN5bWxpbmsgMTUgPmV4cGVjdCAmJgorCWVjaG8gLi4vZ3JlYXQtZXNjYXBlID4+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpci9zdWJkaXIvb3V0LW9mLXJlcG8tbGluayB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBzeW1saW5rIDIgPmV4cGVjdCAmJgorCWVjaG8gLi4gPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6ZGlyL3N1YmRpci9vdXQtb2YtcmVwby1saW5rLWRpciB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBzeW1saW5rIDMgPmV4cGVjdCAmJgorCWVjaG8gLi4vID4+ZXhwZWN0ICYmCisJZWNobyBIRUFEOmRpci9zdWJkaXIvb3V0LW9mLXJlcG8tbGluay1kaXItdHJhaWxpbmcgfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyB3b3JrcyBmb3Igc3ltbGlua3Mgd2l0aCBpbnRlcm5hbCAuLicgJworCWVjaG8gSEVBRDogfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayA+ZXhwZWN0ICYmCisJZWNobyBIRUFEOnVwLWRvd24gfCBnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayAtLWZvbGxvdy1zeW1saW5rcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gSEVBRDp1cC1kb3duLXRyYWlsaW5nIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIEhFQUQ6dXAtZG93bi1maWxlIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGZvdW5kIGFjdHVhbCAmJgorCWVjaG8gc3ltbGluayA3ID5leHBlY3QgJiYKKwllY2hvIC4uL21vcnggPj5leHBlY3QgJiYKKwllY2hvIEhFQUQ6dXAtdXAtZG93bi1maWxlIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvIEhFQUQ6dXAtdHdvLWRvd24tZmlsZSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmb3VuZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2gtY2hlY2sgLS1mb2xsb3ctc3ltbGluayBicmVha3MgbG9vcHMnICcKKwllY2hvIGxvb3AgMTAgPmV4cGVjdCAmJgorCWVjaG8gSEVBRDpsb29wMSA+PmV4cGVjdCAmJgorCWVjaG8gSEVBRDpsb29wMSB8IGdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIC0tZm9sbG93LXN5bWxpbmtzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjYXQtZmlsZSAtLWJhdGNoIC0tZm9sbG93LXN5bWxpbmsgcmV0dXJucyBjb3JyZWN0IHNoYSBhbmQgbW9kZScgJworCWVjaG8gSEVBRDptb3J4IHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2ggPmV4cGVjdCAmJgorCWVjaG8gSEVBRDptb3J4IHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2ggLS1mb2xsb3ctc3ltbGlua3MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgLS1iYXRjaC1hbGwtb2JqZWN0cyBzaG93cyBhbGwgb2JqZWN0cycgJworCSMgbWFrZSBuZXcgcmVwb3Mgc28gd2Uga25vdyB0aGUgZnVsbCBzZXQgb2Ygb2JqZWN0czsgd2Ugd2lsbAorCSMgYWxzbyBtYWtlIHN1cmUgdGhhdCB0aGVyZSBhcmUgc29tZSBwYWNrZWQgYW5kIHNvbWUgbG9vc2UKKwkjIG9iamVjdHMsIHNvbWUgcmVmZXJlbmNlZCBhbmQgc29tZSBub3QsIGFuZCB0aGF0IHRoZXJlIGFyZQorCSMgc29tZSBhdmFpbGFibGUgb25seSB2aWEgYWx0ZXJuYXRlcy4KKwlnaXQgaW5pdCBhbGwtb25lICYmCisJKAorCQljZCBhbGwtb25lICYmCisJCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtcW0gYmFzZSAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgSEVBRF57dHJlZX0gSEVBRDpmaWxlICYmCisJCWdpdCByZXBhY2sgLWFkICYmCisJCWVjaG8gbm90LWNsb25lZCB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluCisJKSA+ZXhwZWN0LnVuc29ydGVkICYmCisJZ2l0IGNsb25lIC1zIGFsbC1vbmUgYWxsLXR3byAmJgorCSgKKwkJY2QgYWxsLXR3byAmJgorCQllY2hvIGxvY2FsLXVucmVmIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4KKwkpID4+ZXhwZWN0LnVuc29ydGVkICYmCisJc29ydCA8ZXhwZWN0LnVuc29ydGVkID5leHBlY3QgJiYKKwlnaXQgLUMgYWxsLXR3byBjYXQtZmlsZSAtLWJhdGNoLWFsbC1vYmplY3RzIFwKKwkJCQktLWJhdGNoLWNoZWNrPSIlKG9iamVjdG5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMDctaGFzaC1vYmplY3Quc2ggYi90L3QxMDA3LWhhc2gtb2JqZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkMmJhYTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDA3LWhhc2gtb2JqZWN0LnNoCkBAIC0wLDAgKzEsMjIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iZ2l0IGhhc2gtb2JqZWN0IgorCisuIC4vdGVzdC1saWIuc2gKKworZWNob193aXRob3V0X25ld2xpbmUoKSB7CisJcHJpbnRmICclcycgIiQqIgorfQorCit0ZXN0X2Jsb2JfZG9lc19ub3RfZXhpc3QoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYiBkb2VzIG5vdCBleGlzdCBpbiBkYXRhYmFzZScgIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkMQorCSIKK30KKwordGVzdF9ibG9iX2V4aXN0cygpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iIGV4aXN0cyBpbiBkYXRhYmFzZScgIgorCQlnaXQgY2F0LWZpbGUgYmxvYiAkMQorCSIKK30KKworaGVsbG9fY29udGVudD0iSGVsbG8gV29ybGQiCitoZWxsb19zaGExPTVlMWMzMDlkYWU3ZjQ1ZTBmMzliMWJmM2FjM2NkOWRiMTJlN2Q2ODkKKworZXhhbXBsZV9jb250ZW50PSJUaGlzIGlzIGFuIGV4YW1wbGUiCitleGFtcGxlX3NoYTE9ZGRkM2Y4MzZkM2UzZmJiN2FlMjg5YWE5YWU4MzUzNmY3Njk1NjM5OQorCitzZXR1cF9yZXBvKCkgeworCWVjaG9fd2l0aG91dF9uZXdsaW5lICIkaGVsbG9fY29udGVudCIgPiBoZWxsbworCWVjaG9fd2l0aG91dF9uZXdsaW5lICIkZXhhbXBsZV9jb250ZW50IiA+IGV4YW1wbGUKK30KKwordGVzdF9yZXBvPXRlc3QKK3B1c2hfcmVwbygpIHsKKwl0ZXN0X2NyZWF0ZV9yZXBvICR0ZXN0X3JlcG8KKwljZCAkdGVzdF9yZXBvCisKKwlzZXR1cF9yZXBvCit9CisKK3BvcF9yZXBvKCkgeworCWNkIC4uCisJcm0gLXJmICR0ZXN0X3JlcG8KK30KKworc2V0dXBfcmVwbworCisjIEFyZ3VtZW50IGNoZWNraW5nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm11bHRpcGxlICctLXN0ZGluJ3MgYXJlIHJlamVjdGVkIiAnCisJZWNobyBleGFtcGxlIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gLS1zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJDYW4ndCB1c2UgLS1zdGRpbiBhbmQgLS1zdGRpbi1wYXRocyB0b2dldGhlciIgJworCWVjaG8gZXhhbXBsZSB8IHRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIC0tc3RkaW4tcGF0aHMgJiYKKwllY2hvIGV4YW1wbGUgfCB0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyAtLXN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIkNhbid0IHBhc3MgZmlsZW5hbWVzIGFzIGFyZ3VtZW50cyB3aXRoIC0tc3RkaW4tcGF0aHMiICcKKwllY2hvIGV4YW1wbGUgfCB0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyBoZWxsbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJDYW4ndCB1c2UgLS1wYXRoIHdpdGggLS1zdGRpbi1wYXRocyIgJworCWVjaG8gZXhhbXBsZSB8IHRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluLXBhdGhzIC0tcGF0aD1mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiQ2FuJ3QgdXNlIC0tcGF0aCB3aXRoIC0tbm8tZmlsdGVycyIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtLW5vLWZpbHRlcnMgLS1wYXRoPWZvbworJworCisjIEJlaGF2aW9yCisKK3B1c2hfcmVwbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoIGEgZmlsZScgJworCXRlc3QgJGhlbGxvX3NoYTEgPSAkKGdpdCBoYXNoLW9iamVjdCBoZWxsbykKKycKKwordGVzdF9ibG9iX2RvZXNfbm90X2V4aXN0ICRoZWxsb19zaGExCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhc2ggZnJvbSBzdGRpbicgJworCXRlc3QgJGV4YW1wbGVfc2hhMSA9ICQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPCBleGFtcGxlKQorJworCit0ZXN0X2Jsb2JfZG9lc19ub3RfZXhpc3QgJGV4YW1wbGVfc2hhMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoIGEgZmlsZSBhbmQgd3JpdGUgdG8gZGF0YWJhc2UnICcKKwl0ZXN0ICRoZWxsb19zaGExID0gJChnaXQgaGFzaC1vYmplY3QgLXcgaGVsbG8pCisnCisKK3Rlc3RfYmxvYl9leGlzdHMgJGhlbGxvX3NoYTEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gZmlsZTEgPGZpbGUwIGZpcnN0IG9wZXJhdGVzIG9uIGZpbGUwLCB0aGVuIGZpbGUxJyAnCisJZWNobyBmb28gPiBmaWxlMSAmJgorCW9ibmFtZTA9JChlY2hvIGJhciB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCW9ibmFtZTE9JChnaXQgaGFzaC1vYmplY3QgZmlsZTEpICYmCisJb2JuYW1lMG5ldz0kKGVjaG8gYmFyIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gZmlsZTEgfCBzZWQgLW4gLWUgMXApICYmCisJb2JuYW1lMW5ldz0kKGVjaG8gYmFyIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gZmlsZTEgfCBzZWQgLW4gLWUgMnApICYmCisJdGVzdCAiJG9ibmFtZTAiID0gIiRvYm5hbWUwbmV3IiAmJgorCXRlc3QgIiRvYm5hbWUxIiA9ICIkb2JuYW1lMW5ldyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGhhdCBhcHByb3ByaWF0ZSBmaWx0ZXIgaXMgaW52b2tlIHdoZW4gLS1wYXRoIGlzIHVzZWQnICcKKwllY2hvIGZvb1EgfCB0ciBRICJcXDAxNSIgPmZpbGUwICYmCisJY3AgZmlsZTAgZmlsZTEgJiYKKwllY2hvICJmaWxlMCAtY3JsZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiZmlsZTEgY3JsZiIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZmlsZTBfc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUwKSAmJgorCWZpbGUxX3NoYT0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMSkgJiYKKwl0ZXN0ICIkZmlsZTBfc2hhIiAhPSAiJGZpbGUxX3NoYSIgJiYKKwlwYXRoMV9zaGE9JChnaXQgaGFzaC1vYmplY3QgLS1wYXRoPWZpbGUxIGZpbGUwKSAmJgorCXBhdGgwX3NoYT0kKGdpdCBoYXNoLW9iamVjdCAtLXBhdGg9ZmlsZTAgZmlsZTEpICYmCisJdGVzdCAiJGZpbGUwX3NoYSIgPSAiJHBhdGgwX3NoYSIgJiYKKwl0ZXN0ICIkZmlsZTFfc2hhIiA9ICIkcGF0aDFfc2hhIiAmJgorCXBhdGgxX3NoYT0kKGNhdCBmaWxlMCB8IGdpdCBoYXNoLW9iamVjdCAtLXBhdGg9ZmlsZTEgLS1zdGRpbikgJiYKKwlwYXRoMF9zaGE9JChjYXQgZmlsZTEgfCBnaXQgaGFzaC1vYmplY3QgLS1wYXRoPWZpbGUwIC0tc3RkaW4pICYmCisJdGVzdCAiJGZpbGUwX3NoYSIgPSAiJHBhdGgwX3NoYSIgJiYKKwl0ZXN0ICIkZmlsZTFfc2hhIiA9ICIkcGF0aDFfc2hhIiAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb3JlLmF1dG9jcmxmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoYXQgLS1uby1maWx0ZXJzIG9wdGlvbiB3b3JrcycgJworCWVjaG8gZm9vUSB8IHRyIFEgIlxcMDE1IiA+ZmlsZTAgJiYKKwljcCBmaWxlMCBmaWxlMSAmJgorCWVjaG8gImZpbGUwIC1jcmxmIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJmaWxlMSBjcmxmIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwlmaWxlMF9zaGE9JChnaXQgaGFzaC1vYmplY3QgZmlsZTApICYmCisJZmlsZTFfc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUxKSAmJgorCXRlc3QgIiRmaWxlMF9zaGEiICE9ICIkZmlsZTFfc2hhIiAmJgorCW5vZmlsdGVyc19maWxlMT0kKGdpdCBoYXNoLW9iamVjdCAtLW5vLWZpbHRlcnMgZmlsZTEpICYmCisJdGVzdCAiJGZpbGUwX3NoYSIgPSAiJG5vZmlsdGVyc19maWxlMSIgJiYKKwlub2ZpbHRlcnNfZmlsZTE9JChjYXQgZmlsZTEgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwl0ZXN0ICIkZmlsZTBfc2hhIiA9ICIkbm9maWx0ZXJzX2ZpbGUxIiAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb3JlLmF1dG9jcmxmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRoYXQgLS1uby1maWx0ZXJzIG9wdGlvbiB3b3JrcyB3aXRoIC0tc3RkaW4tcGF0aHMnICcKKwllY2hvIGZvb1EgfCB0ciBRICJcXDAxNSIgPmZpbGUwICYmCisJY3AgZmlsZTAgZmlsZTEgJiYKKwllY2hvICJmaWxlMCAtY3JsZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiZmlsZTEgY3JsZiIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZmlsZTBfc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUwKSAmJgorCWZpbGUxX3NoYT0kKGdpdCBoYXNoLW9iamVjdCBmaWxlMSkgJiYKKwl0ZXN0ICIkZmlsZTBfc2hhIiAhPSAiJGZpbGUxX3NoYSIgJiYKKwlub2ZpbHRlcnNfZmlsZTE9JChlY2hvICJmaWxlMSIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocyAtLW5vLWZpbHRlcnMpICYmCisJdGVzdCAiJGZpbGUwX3NoYSIgPSAiJG5vZmlsdGVyc19maWxlMSIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5hdXRvY3JsZgorJworCitwb3BfcmVwbworCitmb3IgYXJncyBpbiAiLXcgLS1zdGRpbiIgIi0tc3RkaW4gLXciOyBkbworCXB1c2hfcmVwbworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiaGFzaCBmcm9tIHN0ZGluIGFuZCB3cml0ZSB0byBkYXRhYmFzZSAoJGFyZ3MpIiAnCisJCXRlc3QgJGV4YW1wbGVfc2hhMSA9ICQoZ2l0IGhhc2gtb2JqZWN0ICRhcmdzIDwgZXhhbXBsZSkKKwknCisKKwl0ZXN0X2Jsb2JfZXhpc3RzICRleGFtcGxlX3NoYTEKKworCXBvcF9yZXBvCitkb25lCisKK2ZpbGVuYW1lcz0iaGVsbG8KK2V4YW1wbGUiCisKK3NoYTFzPSIkaGVsbG9fc2hhMQorJGV4YW1wbGVfc2hhMSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiaGFzaCB0d28gZmlsZXMgd2l0aCBuYW1lcyBvbiBzdGRpbiIgJworCXRlc3QgIiRzaGExcyIgPSAiJChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGZpbGVuYW1lcyIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbi1wYXRocykiCisnCisKK2ZvciBhcmdzIGluICItdyAtLXN0ZGluLXBhdGhzIiAiLS1zdGRpbi1wYXRocyAtdyI7IGRvCisJcHVzaF9yZXBvCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJoYXNoIHR3byBmaWxlcyB3aXRoIG5hbWVzIG9uIHN0ZGluIGFuZCB3cml0ZSB0byBkYXRhYmFzZSAoJGFyZ3MpIiAnCisJCXRlc3QgIiRzaGExcyIgPSAiJChlY2hvX3dpdGhvdXRfbmV3bGluZSAiJGZpbGVuYW1lcyIgfCBnaXQgaGFzaC1vYmplY3QgJGFyZ3MpIgorCScKKworCXRlc3RfYmxvYl9leGlzdHMgJGhlbGxvX3NoYTEKKwl0ZXN0X2Jsb2JfZXhpc3RzICRleGFtcGxlX3NoYTEKKworCXBvcF9yZXBvCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgdHJlZScgJworCWVjaG8gYWJjID5tYWxmb3JtZWQtdHJlZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtdCB0cmVlIG1hbGZvcm1lZC10cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtLXN0ZGluIDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycnVwdCB0YWcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgaGFzaC1vYmplY3QgLXQgdGFnIC0tc3RkaW4gPC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoLW9iamVjdCBjb21wbGFpbnMgYWJvdXQgYm9ndXMgdHlwZSBuYW1lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGhhc2gtb2JqZWN0IC10IGJvZ3VzIC0tc3RkaW4gPC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoLW9iamVjdCBjb21wbGFpbnMgYWJvdXQgdHJ1bmNhdGVkIHR5cGUgbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBoYXNoLW9iamVjdCAtdCBibCAtLXN0ZGluIDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1saXRlcmFsbHknICcKKwl0PTEyMzQ1Njc4OTAgJiYKKwllY2hvIGV4YW1wbGUgfCBnaXQgaGFzaC1vYmplY3QgLXQgJHQgLS1saXRlcmFsbHkgLS1zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxpdGVyYWxseSB3aXRoIGV4dHJhLWxvbmcgdHlwZScgJworCXQ9MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgJiYKKwl0PSIkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQkdCR0JHQiICYmCisJZWNobyBleGFtcGxlIHwgZ2l0IGhhc2gtb2JqZWN0IC10ICR0IC0tbGl0ZXJhbGx5IC0tc3RkaW4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDA4LXJlYWQtdHJlZS1vdmVybGF5LnNoIGIvdC90MTAwOC1yZWFkLXRyZWUtb3ZlcmxheS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YzUwZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTAwOC1yZWFkLXRyZWUtb3ZlcmxheS5zaApAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBtdWx0aS10cmVlIHJlYWQtdHJlZSB3aXRob3V0IG1lcmdpbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmVhZC10cmVlLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gb25lID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJZWNobyB0d28gPmIgJiYKKwlnaXQgYWRkIGIgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIGluaXRpYWwgJiYKKwllY2hvIHRocmVlID5hICYmCisJbWtkaXIgYiAmJgorCWVjaG8gZm91ciA+Yi9jICYmCisJZ2l0IGFkZCBiL2MgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLXJlYWQnICcKKwlyZWFkX3RyZWVfbXVzdF9zdWNjZWVkIGluaXRpYWwgbWFzdGVyIHNpZGUgJiYKKwkoZWNobyBhOyBlY2hvIGIvYykgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90MTAwOS1yZWFkLXRyZWUtbmV3LWluZGV4LnNoIGIvdC90MTAwOS1yZWFkLXRyZWUtbmV3LWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU5YjNhYTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDA5LXJlYWQtdHJlZS1uZXctaW5kZXguc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgcmVhZC10cmVlIGludG8gYSBmcmVzaCBpbmRleCBmaWxlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBvbmUgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWV4aXN0ZW50IGluZGV4IGZpbGUnICcKKwlybSAtZiBuZXctaW5kZXggJiYKKwlHSVRfSU5ERVhfRklMRT1uZXctaW5kZXggZ2l0IHJlYWQtdHJlZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgaW5kZXggZmlsZScgJworCXJtIC1mIG5ldy1pbmRleCAmJgorCT4gbmV3LWluZGV4ICYmCisJR0lUX0lOREVYX0ZJTEU9bmV3LWluZGV4IGdpdCByZWFkLXRyZWUgbWFzdGVyCisnCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3QxMDEwLW1rdHJlZS5zaCBiL3QvdDEwMTAtbWt0cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI5NDZmODcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDEwLW1rdHJlZS5zaApAQCAtMCwwICsxLDY5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1rdHJlZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWZvciBkIGluIGEgYS4gYTAKKwlkbworCQlta2RpciAiJGQiICYmIGVjaG8gIiRkL29uZSIgPiIkZC9vbmUiICYmCisJCWdpdCBhZGQgIiRkIgorCWRvbmUgJiYKKwllY2hvIHplcm8gPm9uZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1pbmZvLW9ubHkgb25lICYmCisJZ2l0IHdyaXRlLXRyZWUgLS1taXNzaW5nLW9rID50cmVlLm1pc3NpbmcgJiYKKwlnaXQgbHMtdHJlZSAkKGNhdCB0cmVlLm1pc3NpbmcpID50b3AubWlzc2luZyAmJgorCWdpdCBscy10cmVlIC1yICQoY2F0IHRyZWUubWlzc2luZykgPmFsbC5taXNzaW5nICYmCisJZWNobyBvbmUgPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZ2l0IHdyaXRlLXRyZWUgPnRyZWUgJiYKKwlnaXQgbHMtdHJlZSAkKGNhdCB0cmVlKSA+dG9wICYmCisJZ2l0IGxzLXRyZWUgLXIgJChjYXQgdHJlZSkgPmFsbCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLXEgLW0gb25lICYmCisJSD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDE2MDAwMCAkSCBzdWIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1xIC1tIHR3byAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0gPnRyZWUud2l0aHN1YiAmJgorCWdpdCBscy10cmVlIEhFQUQgPnRvcC53aXRoc3ViICYmCisJZ2l0IGxzLXRyZWUgLXIgSEVBRCA+YWxsLndpdGhzdWIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBwaXBlZCB0byBta3RyZWUgKDEpJyAnCisJZ2l0IG1rdHJlZSA8dG9wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0cmVlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIHBpcGVkIHRvIG1rdHJlZSAoMiknICcKKwlnaXQgbWt0cmVlIDx0b3Aud2l0aHN1YiA+YWN0dWFsICYmCisJdGVzdF9jbXAgdHJlZS53aXRoc3ViIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIG91dHB1dCBpbiB3cm9uZyBvcmRlciBnaXZlbiB0byBta3RyZWUgKDEpJyAnCisJcGVybCAtZSAicHJpbnQgcmV2ZXJzZSA8PiIgPHRvcCB8CisJZ2l0IG1rdHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgdHJlZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBvdXRwdXQgaW4gd3Jvbmcgb3JkZXIgZ2l2ZW4gdG8gbWt0cmVlICgyKScgJworCXBlcmwgLWUgInByaW50IHJldmVyc2UgPD4iIDx0b3Aud2l0aHN1YiB8CisJZ2l0IG1rdHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgdHJlZS53aXRoc3ViIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBtaXNzaW5nIG9iamVjdCB3aXRoIC0tbWlzc2luZycgJworCWdpdCBta3RyZWUgLS1taXNzaW5nIDx0b3AubWlzc2luZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgdHJlZS5taXNzaW5nIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdta3RyZWUgcmVmdXNlcyB0byByZWFkIGxzLXRyZWUgLXIgb3V0cHV0ICgxKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBta3RyZWUgPGFsbCA+YWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21rdHJlZSByZWZ1c2VzIHRvIHJlYWQgbHMtdHJlZSAtciBvdXRwdXQgKDIpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1rdHJlZSA8YWxsLndpdGhzdWIgPmFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMTEtcmVhZC10cmVlLXNwYXJzZS1jaGVja291dC5zaCBiL3QvdDEwMTEtcmVhZC10cmVlLXNwYXJzZS1jaGVja291dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYzc0YmVlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAxMS1yZWFkLXRyZWUtc3BhcnNlLWNoZWNrb3V0LnNoCkBAIC0wLDAgKzEsMjc3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3BhcnNlIGNoZWNrb3V0IHRlc3RzCisKKyogKHRhZzogcmVtb3ZlZCwgbWFzdGVyKSByZW1vdmVkCit8IEQJc3ViL2FkZGVkCisqIChIRUFELCB0YWc6IHRvcCkgbW9kaWZpZWQgYW5kIGFkZGVkCit8IE0JaW5pdC50Cit8IEEJc3ViL2FkZGVkCisqICh0YWc6IGluaXQpIGluaXQKKyAgQQlpbml0LnQKKycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkxMDA2NDQgNzdmMGJhMTczNGVkNzlkMTI4ODFmODFiMzZlZTEzNGRlNmEzMzI3YiAwCWluaXQudAorCTEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJc3ViL2FkZGVkCisJMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAlzdWIvYWRkZWR0b28KKwkxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCXN1YnN1Yi9hZGRlZAorCUVPRgorCWNhdCA+ZXhwZWN0ZWQuc3d0IDw8LVxFT0YgJiYKKwlIIGluaXQudAorCUggc3ViL2FkZGVkCisJSCBzdWIvYWRkZWR0b28KKwlIIHN1YnN1Yi9hZGRlZAorCUVPRgorCisJdGVzdF9jb21taXQgaW5pdCAmJgorCWVjaG8gbW9kaWZpZWQgPj5pbml0LnQgJiYKKwlta2RpciBzdWIgc3Vic3ViICYmCisJdG91Y2ggc3ViL2FkZGVkIHN1Yi9hZGRlZHRvbyBzdWJzdWIvYWRkZWQgJiYKKwlnaXQgYWRkIGluaXQudCBzdWIvYWRkZWQgc3ViL2FkZGVkdG9vIHN1YnN1Yi9hZGRlZCAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmaWVkIGFuZCBhZGRlZCIgJiYKKwlnaXQgdGFnIHRvcCAmJgorCWdpdCBybSBzdWIvYWRkZWQgJiYKKwlnaXQgY29tbWl0IC1tIHJlbW92ZWQgJiYKKwlnaXQgdGFnIHJlbW92ZWQgJiYKKwlnaXQgY2hlY2tvdXQgdG9wICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgd2l0aG91dCAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0JyAnCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJZ2l0IGxzLWZpbGVzIC10ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3QgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB3aXRoIC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgYnV0IGRpc2FibGVkJyAnCisJZWNobyA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC10ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3QgcmVzdWx0ICYmCisJdGVzdCAtZiBpbml0LnQgJiYKKwl0ZXN0IC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgLS1uby1zcGFyc2UtY2hlY2tvdXQgd2l0aCBlbXB0eSAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0IGFuZCBlbmFibGVkJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnNwYXJzZWNoZWNrb3V0IHRydWUgJiYKKwllY2hvID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tbm8tc3BhcnNlLWNoZWNrb3V0IC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dCByZXN1bHQgJiYKKwl0ZXN0IC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB3aXRoIGVtcHR5IC5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQnICcKKwlnaXQgY29uZmlnIGNvcmUuc3BhcnNlY2hlY2tvdXQgdHJ1ZSAmJgorCWVjaG8gPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X2ZhaWwgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN3dCByZXN1bHQgJiYKKwl0ZXN0IC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hdGNoIGRpcmVjdG9yaWVzIHdpdGggdHJhaWxpbmcgc2xhc2gnICcKKwljYXQgPmV4cGVjdGVkLnN3dC1ub2luaXQgPDwtXEVPRiAmJgorCVMgaW5pdC50CisJSCBzdWIvYWRkZWQKKwlIIHN1Yi9hZGRlZHRvbworCVMgc3Vic3ViL2FkZGVkCisJRU9GCisKKwllY2hvIHN1Yi8gPiAuZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3Qtbm9pbml0IHJlc3VsdCAmJgorCXRlc3QgISAtZiBpbml0LnQgJiYKKwl0ZXN0IC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCBkaXJlY3RvcmllcyB3aXRob3V0IHRyYWlsaW5nIHNsYXNoJyAnCisJZWNobyBzdWIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5vaW5pdCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgaW5pdC50ICYmCisJdGVzdCAtZiBzdWIvYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggZGlyZWN0b3JpZXMgd2l0aCBuZWdhdGVkIHBhdHRlcm5zJyAnCisJY2F0ID5leHBlY3RlZC5zd3QtbmVnYXRpb24gPDxcRU9GICYmCitTIGluaXQudAorUyBzdWIvYWRkZWQKK0ggc3ViL2FkZGVkdG9vCitTIHN1YnN1Yi9hZGRlZAorRU9GCisKKwljYXQgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgPDxcRU9GICYmCitzdWIKKyFzdWIvYWRkZWQKK0VPRgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5lZ2F0aW9uIHJlc3VsdCAmJgorCXRlc3QgISAtZiBpbml0LnQgJiYKKwl0ZXN0ICEgLWYgc3ViL2FkZGVkICYmCisJdGVzdCAtZiBzdWIvYWRkZWR0b28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2ggZGlyZWN0b3JpZXMgd2l0aCBuZWdhdGVkIHBhdHRlcm5zICgyKScgJworCWNhdCA+ZXhwZWN0ZWQuc3d0LW5lZ2F0aW9uMiA8PFxFT0YgJiYKK0ggaW5pdC50CitIIHN1Yi9hZGRlZAorUyBzdWIvYWRkZWR0b28KK0ggc3Vic3ViL2FkZGVkCitFT0YKKworCWNhdCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCA8PFxFT0YgJiYKKy8qCishc3ViCitzdWIvYWRkZWQKK0VPRgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5lZ2F0aW9uMiByZXN1bHQgJiYKKwl0ZXN0IC1mIGluaXQudCAmJgorCXRlc3QgLWYgc3ViL2FkZGVkICYmCisJdGVzdCAhIC1mIHN1Yi9hZGRlZHRvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaCBkaXJlY3RvcnkgcGF0dGVybicgJworCWVjaG8gInM/YiIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRCAmJgorCWdpdCBscy1maWxlcyAtdCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc3d0LW5vaW5pdCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgaW5pdC50ICYmCisJdGVzdCAtZiBzdWIvYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYXJlYSBjaGFuZ2VzJyAnCisJY2F0ID5leHBlY3RlZC5zd3Qtbm9zdWIgPDwtXEVPRiAmJgorCUggaW5pdC50CisJUyBzdWIvYWRkZWQKKwlTIHN1Yi9hZGRlZHRvbworCVMgc3Vic3ViL2FkZGVkCisJRU9GCisKKwllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEICYmCisJZ2l0IGxzLWZpbGVzIC10ID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zd3Qtbm9zdWIgcmVzdWx0ICYmCisJdGVzdCAtZiBpbml0LnQgJiYKKwl0ZXN0ICEgLWYgc3ViL2FkZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSB1cGRhdGVzIHdvcmt0cmVlLCBhYnNlbnQgY2FzZScgJworCWVjaG8gc3ViL2FkZGVkID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBIRUFEXiAmJgorCXRlc3QgISAtZiBpbml0LnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHVwZGF0ZXMgd29ya3RyZWUsIGRpcnR5IGNhc2UnICcKKwllY2hvIHN1Yi9hZGRlZCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwllY2hvIGRpcnR5ID5pbml0LnQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgSEVBRF4gJiYKKwlncmVwIC1xIGRpcnR5IGluaXQudCAmJgorCXJtIGluaXQudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgcmVtb3ZlcyB3b3JrdHJlZSwgZGlydHkgY2FzZScgJworCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWVjaG8gZGlydHkgPmFkZGVkICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IEhFQUReICYmCisJZ3JlcCAtcSBkaXJ0eSBhZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgYWRkcyB0byB3b3JrdHJlZSwgYWJzZW50IGNhc2UnICcKKwllY2hvIGluaXQudCA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWdpdCBjaGVja291dCAtZiByZW1vdmVkICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC11IC1tIEhFQUReICYmCisJdGVzdCAhIC1mIHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgYWRkcyB0byB3b3JrdHJlZSwgZGlydHkgY2FzZScgJworCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHJlbW92ZWQgJiYKKwlta2RpciBzdWIgJiYKKwllY2hvIGRpcnR5ID5zdWIvYWRkZWQgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLXUgLW0gSEVBRF4gJiYKKwlncmVwIC1xIGRpcnR5IHN1Yi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCByZW1vdmFsIGFuZCB3b3JrdHJlZSBuYXJyb3dpbmcgYXQgdGhlIHNhbWUgdGltZScgJworCT5lbXB0eSAmJgorCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZWNobyBzdWIvYWRkZWQgPj4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IHJlbW92ZWQgJiYKKwlnaXQgbHMtZmlsZXMgc3ViL2FkZGVkID5yZXN1bHQgJiYKKwl0ZXN0ICEgLWYgc3ViL2FkZGVkICYmCisJdGVzdF9jbXAgZW1wdHkgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSAtLXJlc2V0IHJlbW92ZXMgb3V0c2lkZSB3b3JrdHJlZScgJworCT5lbXB0eSAmJgorCWVjaG8gaW5pdC50ID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWdpdCByZXNldCAtLWhhcmQgcmVtb3ZlZCAmJgorCWdpdCBscy1maWxlcyBzdWIvYWRkZWQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGVtcHR5IHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmludCBlcnJvcnMgd2hlbiBmYWlsZWQgdG8gdXBkYXRlIHdvcmt0cmVlJyAnCisJZWNobyBzdWIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgaW5pdCAmJgorCW1rZGlyIHN1YiAmJgorCXRvdWNoIHN1Yi9hZGRlZCBzdWIvYWRkZWR0b28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgdG9wIDI+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK2Vycm9yOiBUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6CisJc3ViL2FkZGVkCisJc3ViL2FkZGVkdG9vCitQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IGNhbiBzd2l0Y2ggYnJhbmNoZXMuCitBYm9ydGluZworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGhvdXQgLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzJyAnCisJZWNobyAiKiIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgaW5pdC50ICYmCisJZWNobyBzdWIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgJiYKKwllY2hvIG1vZGlmaWVkID4+IHN1Yi9hZGRlZCAmJgorCWdpdCBjaGVja291dCAuICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgaW5pdC50ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIC0taWdub3JlLXNraXAtd29ya3RyZWUtYml0cycgJworCWVjaG8gIioiID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGluaXQudCAmJgorCWVjaG8gc3ViID4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0ICYmCisJZWNobyBtb2RpZmllZCA+PiBzdWIvYWRkZWQgJiYKKwlnaXQgY2hlY2tvdXQgLS1pZ25vcmUtc2tpcC13b3JrdHJlZS1iaXRzIC4gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBpbml0LnQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAxMi1yZWFkLXRyZWUtZGYuc2ggYi90L3QxMDEyLXJlYWQtdHJlZS1kZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNmEwNGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTAxMi1yZWFkLXRyZWUtZGYuc2gKQEAgLTAsMCArMSwxMDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWFkLXRyZWUgRC9GIGNvbmZsaWN0IGNvcm5lciBjYXNlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWFkLXRyZWUuc2gKKworbWFrZXRyZWUgKCkgeworCSgKKwkJcm0gLWYgLmdpdC9pbmRleCAuZ2l0L2luZGV4LmxvY2sgJiYKKwkJZ2l0IGNsZWFuIC1kIC1mIC1mIC1xIC14ICYmCisJCW5hbWU9IiQxIiAmJgorCQlzaGlmdCAmJgorCQlmb3IgaXQKKwkJZG8KKwkJCXBhdGg9JChleHByICIkaXQiIDogJ1woW146XSpcKScpICYmCisJCQlta2RpciAtcCAkKGRpcm5hbWUgIiRwYXRoIikgJiYKKwkJCWVjaG8gIiRpdCIgPiIkcGF0aCIgJiYKKwkJCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiRwYXRoIiB8fCBleGl0CisJCWRvbmUgJiYKKwkJZ2l0IHRhZyAiJG5hbWUiICQoZ2l0IHdyaXRlLXRyZWUpCisJKQorfQorCitzZXR0cmVlICgpIHsKKwlybSAtZiAuZ2l0L2luZGV4IC5naXQvaW5kZXgubG9jayAmJgorCWdpdCBjbGVhbiAtZCAtZiAtZiAtcSAteCAmJgorCWdpdCByZWFkLXRyZWUgIiQxIiAmJgorCWdpdCBjaGVja291dC1pbmRleCAtZiAtcSAtdSAtYSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCit9CisKK2NoZWNraW5kZXggKCkgeworCWdpdCBscy1maWxlcyAtcyB8CisJc2VkICJzfF5bMC03XVswLTddKiAkX3g0MCBcKFswLTNdXCkJfFwxIHwiID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwltYWtldHJlZSBPLTAwMCBhL2ItMi9jL2QgYS9iL2MvZCBhL3ggJiYKKwltYWtldHJlZSBBLTAwMCBhL2ItMi9jL2QgYS9iL2MvZCBhL3ggJiYKKwltYWtldHJlZSBBLTAwMSBhL2ItMi9jL2QgYS9iL2MvZCBhL2IvYy9lIGEveCAmJgorCW1ha2V0cmVlIEItMDAwIGEvYi0yL2MvZCBhL2IgICAgIGEveCAmJgorCisJbWFrZXRyZWUgTy0wMTAgdC0wICAgICB0LzEgIHQvMiB0PTMgJiYKKwltYWtldHJlZSBBLTAxMCB0LTAgdCAgICAgICAgICAgIHQ9MyAmJgorCW1ha2V0cmVlIEItMDEwICAgICAgICAgdC8xOiAgICAgdD0zOiAmJgorCisJbWFrZXRyZWUgTy0wMjAgZHMvZG1hL2lvYXQuYyBkcy9kbWEvaW9hdF9kY2EuYyAmJgorCW1ha2V0cmVlIEEtMDIwIGRzL2RtYS9pb2F0L01ha2VmaWxlIGRzL2RtYS9pb2F0L3JlZ2lzdGVycy5oICYmCisJOgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICczLXdheSAoMSknICcKKwlzZXR0cmVlIEEtMDAwICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IE8tMDAwIEEtMDAwIEItMDAwICYmCisJY2hlY2tpbmRleCA8PC1FT0YKKwkzIGEvYgorCTAgYS9iLTIvYy9kCisJMSBhL2IvYy9kCisJMiBhL2IvYy9kCisJMCBhL3gKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMy13YXkgKDIpJyAnCisJc2V0dHJlZSBBLTAwMSAmJgorCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtbSAtdSBPLTAwMCBBLTAwMSBCLTAwMCAmJgorCWNoZWNraW5kZXggPDwtRU9GCisJMyBhL2IKKwkwIGEvYi0yL2MvZAorCTEgYS9iL2MvZAorCTIgYS9iL2MvZAorCTIgYS9iL2MvZQorCTAgYS94CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzMtd2F5ICgzKScgJworCXNldHRyZWUgQS0wMTAgJiYKKwlyZWFkX3RyZWVfdV9tdXN0X3N1Y2NlZWQgLW0gLXUgTy0wMTAgQS0wMTAgQi0wMTAgJiYKKwljaGVja2luZGV4IDw8LUVPRgorCTIgdAorCTEgdC0wCisJMiB0LTAKKwkxIHQvMQorCTMgdC8xCisJMSB0LzIKKwkwIHQ9MworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyLXdheSAoMSknICcKKwlzZXR0cmVlIE8tMDIwICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC1tIC11IE8tMDIwIEEtMDIwICYmCisJY2hlY2tpbmRleCA8PC1FT0YKKwkwIGRzL2RtYS9pb2F0L01ha2VmaWxlCisJMCBkcy9kbWEvaW9hdC9yZWdpc3RlcnMuaAorCUVPRgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMTMtcmVhZC10cmVlLXN1Ym1vZHVsZS5zaCBiL3QvdDEwMTMtcmVhZC10cmVlLXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMDUyNmFlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAxMy1yZWFkLXRyZWUtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWFkLXRyZWUgY2FuIGhhbmRsZSBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXN1Ym1vZHVsZS11cGRhdGUuc2gKKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXQgcmVhZC10cmVlIC11IC1tIgorCit0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoICJnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTAxNC1yZWFkLXRyZWUtY29uZnVzaW5nLnNoIGIvdC90MTAxNC1yZWFkLXRyZWUtY29uZnVzaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmNWEyNWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDE0LXJlYWQtdHJlZS1jb25mdXNpbmcuc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIHRoYXQgcmVhZC10cmVlIHJlamVjdHMgY29uZnVzaW5nIHBhdGhzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBiYXNlIHRyZWUnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwlibG9iPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUpICYmCisJdHJlZT0kKGdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuYWJsZSBjb3JlLnByb3RlY3RIRlMgZm9yIHJlamVjdGlvbiB0ZXN0cycgJworCWdpdCBjb25maWcgY29yZS5wcm90ZWN0SEZTIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIGNvcmUucHJvdGVjdE5URlMgZm9yIHJlamVjdGlvbiB0ZXN0cycgJworCWdpdCBjb25maWcgY29yZS5wcm90ZWN0TlRGUyB0cnVlCisnCisKK3doaWxlIHJlYWQgcGF0aCBwcmV0dHk7IGRvCisJOiAke3ByZXR0eTo9JHBhdGh9CisJY2FzZSAiJHBhdGgiIGluCisJKlNQQUNFKQorCQlwYXRoPSIke3BhdGglU1BBQ0V9ICIKKwkJOzsKKwllc2FjCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVqZWN0ICRwcmV0dHkgYXQgZW5kIG9mIHBhdGgiICcKKwkJcHJpbnRmICIxMDA2NDQgYmxvYiAlc1x0JXMiICIkYmxvYiIgIiRwYXRoIiA+dHJlZSAmJgorCQlib2d1cz0kKGdpdCBta3RyZWUgPHRyZWUpICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgJGJvZ3VzCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVqZWN0ICRwcmV0dHkgYXMgc3VidHJlZSIgJworCQlwcmludGYgIjA0MDAwMCB0cmVlICVzXHQlcyIgIiR0cmVlIiAiJHBhdGgiID50cmVlICYmCisJCWJvZ3VzPSQoZ2l0IG1rdHJlZSA8dHJlZSkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAkYm9ndXMKKwknCitkb25lIDw8LUVPRgorLgorLi4KKy5naXQKKy5HSVQKKyR7dTIwMGN9LkdpdCB7dTIwMGN9LkdpdAorLmdJJHt1MjAwY31UIC5nSXt1MjAwY31UCisuR2lUJHt1MjAwY30gLkdpVHt1MjAwY30KK2dpdH4xCisuZ2l0LlNQQUNFIC5naXQue3NwYWNlfQorLlxcXFwuR0lUXFxcXGZvb2JhciBiYWNrc2xhc2hlcworLmdpdFxcXFxmb29iYXIgYmFja3NsYXNoZXMyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXRmLTggcGF0aHMgYWxsb3dlZCB3aXRoIGNvcmUucHJvdGVjdEhGUyBvZmYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWFkLXRyZWUgSEVBRCIgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLnByb3RlY3RIRlMgZmFsc2UgJiYKKwlwcmludGYgIjEwMDY0NCBibG9iICVzXHQlcyIgIiRibG9iIiAiLmdpJHt1MjAwY310IiA+dHJlZSAmJgorCW9rPSQoZ2l0IG1rdHJlZSA8dHJlZSkgJiYKKwlnaXQgcmVhZC10cmVlICRvaworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoIGIvdC90MTAyMC1zdWJkaXJlY3Rvcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGUyMmIwMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwMjAtc3ViZGlyZWN0b3J5LnNoCkBAIC0wLDAgKzEsMTk1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1RyeSB2YXJpb3VzIGNvcmUtbGV2ZWwgY29tbWFuZHMgaW4gc3ViZGlyZWN0b3J5LgorJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlsb25nPSJhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHoiICYmCisJZm9yIGMgaW4gJGxvbmc7IGRvIGVjaG8gJGM7IGRvbmUgPm9uZSAmJgorCW1rZGlyIGRpciAmJgorCWZvciBjIGluIHggeSB6ICRsb25nIGEgYiBjOyBkbyBlY2hvICRjOyBkb25lID5kaXIvdHdvICYmCisJY3Agb25lIG9yaWdpbmFsLm9uZSAmJgorCWNwIGRpci90d28gb3JpZ2luYWwudHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCBhbmQgbHMtZmlsZXMnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSAmJgorCWNhc2UgIiQoZ2l0IGxzLWZpbGVzKSIgaW4KKwlvbmUpIGVjaG8gcGFzcyBvbmUgOzsKKwkqKSBlY2hvIGJhZCBvbmU7IGV4aXQgMSA7OworCWVzYWMgJiYKKwkoCisJCWNkIGRpciAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHR3byAmJgorCQljYXNlICIkKGdpdCBscy1maWxlcykiIGluCisJCXR3bykgZWNobyBwYXNzIHR3byA7OworCQkqKSBlY2hvIGJhZCB0d287IGV4aXQgMSA7OworCQllc2FjCisJKSAmJgorCWNhc2UgIiQoZ2l0IGxzLWZpbGVzKSIgaW4KKwlkaXIvdHdvIiRMRiJvbmUpIGVjaG8gcGFzcyBib3RoIDs7CisJKikgZWNobyBiYWQ7IGV4aXQgMSA7OworCWVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUnICcKKwl0d289JChnaXQgbHMtZmlsZXMgLXMgZGlyL3R3bykgJiYKKwl0d289JChleHByICIkdHdvIiA6ICJbMC03XSogXFwoWzAtOWEtZl0qXFwpIikgJiYKKwllY2hvICIkdHdvIiAmJgorCWdpdCBjYXQtZmlsZSAtcCAiJHR3byIgPmFjdHVhbCAmJgorCWNtcCBkaXIvdHdvIGFjdHVhbCAmJgorCSgKKwkJY2QgZGlyICYmCisJCWdpdCBjYXQtZmlsZSAtcCAiJHR3byIgPmFjdHVhbCAmJgorCQljbXAgdHdvIGFjdHVhbAorCSkKKycKK3JtIC1mIGFjdHVhbCBkaXIvYWN0dWFsCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMnICcKKwllY2hvIGEgPj5vbmUgJiYKKwllY2hvIGQgPj5kaXIvdHdvICYmCisJY2FzZSAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSkiIGluCisJZGlyL3R3byIkTEYib25lKSBlY2hvIHBhc3MgdG9wIDs7CisJKikgZWNobyBiYWQgdG9wOyBleGl0IDEgOzsKKwllc2FjICYmCisJIyBkaWZmIHNob3VsZCBub3Qgb21pdCBsZWFkaW5nIHBhdGhzCisJKAorCQljZCBkaXIgJiYKKwkJY2FzZSAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSkiIGluCisJCWRpci90d28iJExGIm9uZSkgZWNobyBwYXNzIHN1YmRpciA7OworCQkqKSBlY2hvIGJhZCBzdWJkaXI7IGV4aXQgMSA7OworCQllc2FjICYmCisJCWNhc2UgIiQoZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLikiIGluCisJCWRpci90d28pIGVjaG8gcGFzcyBzdWJkaXIgbGltaXRlZCA7OworCQkqKSBlY2hvIGJhZCBzdWJkaXIgbGltaXRlZDsgZXhpdCAxIDs7CisJCWVzYWMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlLXRyZWUnICcKKwl0b3A9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvICR0b3AgJiYKKwkoCisJCWNkIGRpciAmJgorCQlzdWI9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJZWNobyAkc3ViICYmCisJCXRlc3QgInokdG9wIiA9ICJ6JHN1YiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0LWluZGV4JyAnCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IG9uZSAmJgorCWNtcCBvbmUgb3JpZ2luYWwub25lICYmCisJKAorCQljZCBkaXIgJiYKKwkJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC11IHR3byAmJgorCQljbXAgdHdvIC4uL29yaWdpbmFsLnR3bworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlJyAnCisJcm0gLWYgb25lIGRpci90d28gJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcmVhZF90cmVlX3VfbXVzdF9zdWNjZWVkIC0tcmVzZXQgLXUgIiR0cmVlIiAmJgorCWNtcCBvbmUgb3JpZ2luYWwub25lICYmCisJY21wIGRpci90d28gb3JpZ2luYWwudHdvICYmCisJKAorCQljZCBkaXIgJiYKKwkJcm0gLWYgdHdvICYmCisJCXJlYWRfdHJlZV91X211c3Rfc3VjY2VlZCAtLXJlc2V0IC11ICIkdHJlZSIgJiYKKwkJY21wIHR3byAuLi9vcmlnaW5hbC50d28gJiYKKwkJY21wIC4uL29uZSAuLi9vcmlnaW5hbC5vbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIGV4cGFuc2lvbicgJworCSgKKwkJZ2l0IGNvbmZpZyBhbGlhcy50ZXN0LXN0YXR1cy1hbGlhcyBzdGF0dXMgJiYKKwkJY2QgZGlyICYmCisJCWdpdCBzdGF0dXMgJiYKKwkJZ2l0IHRlc3Qtc3RhdHVzLWFsaWFzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnIWFsaWFzIGV4cGFuc2lvbicgJworCXB3ZCA+ZXhwZWN0ICYmCisJKAorCQlnaXQgY29uZmlnIGFsaWFzLnRlc3QtYWxpYXMtZGlyZWN0b3J5ICFwd2QgJiYKKwkJY2QgZGlyICYmCisJCWdpdCB0ZXN0LWFsaWFzLWRpcmVjdG9yeSA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1BSRUZJWCBmb3IgIWFsaWFzJyAnCisJcHJpbnRmICJkaXIvIiA+ZXhwZWN0ICYmCisJKAorCQlnaXQgY29uZmlnIGFsaWFzLnRlc3QtYWxpYXMtZGlyZWN0b3J5ICIhc2ggLWMgXCJwcmludGYgXCRHSVRfUFJFRklYXCIiICYmCisJCWNkIGRpciAmJgorCQlnaXQgdGVzdC1hbGlhcy1kaXJlY3RvcnkgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9QUkVGSVggZm9yIGJ1aWx0LWlucycgJworCSMgVXNlIEdJVF9FWFRFUk5BTF9ESUZGIHRvIHRlc3QgdGhhdCB0aGUgImRpZmYiIGJ1aWx0LWluCisJIyByZWNlaXZlcyB0aGUgR0lUX1BSRUZJWCB2YXJpYWJsZS4KKwlwcmludGYgImRpci8iID5leHBlY3QgJiYKKwlwcmludGYgIiMhL2Jpbi9zaFxuIiA+ZGlmZiAmJgorCXByaW50ZiAicHJpbnRmIFwiXCRHSVRfUFJFRklYXCIiID4+ZGlmZiAmJgorCWNobW9kICt4IGRpZmYgJiYKKwkoCisJCWNkIGRpciAmJgorCQlwcmludGYgImNoYW5nZSIgPnR3byAmJgorCQlHSVRfRVhURVJOQUxfRElGRj0uL2RpZmYgZ2l0IGRpZmYgPi4uL2FjdHVhbAorCQlnaXQgY2hlY2tvdXQgLS0gdHdvCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZmlsZS9yZXYgYW1iaWd1aXR5IGNoZWNrIGluc2lkZSAuZ2l0JyAnCisJZ2l0IGNvbW1pdCAtYSAtbSAxICYmCisJKAorCQljZCAuZ2l0ICYmCisJCWdpdCBzaG93IC1zIEhFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUvcmV2IGFtYmlndWl0eSBjaGVjayBpbnNpZGUgYSBiYXJlIHJlcG8gKGV4cGxpY2l0IEdJVF9ESVIpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgZm9vLmdpdCIgJiYKKwlnaXQgY2xvbmUgLXMgLS1iYXJlIC5naXQgZm9vLmdpdCAmJgorCSgKKwkJY2QgZm9vLmdpdCAmJgorCQkjIG9sZGVyIEdpdCBuZWVkZWQgaGVscCBieSBleHBvcnRpbmcgR0lUX0RJUj0uCisJCSMgdG8gcmVhbGl6ZSB0aGF0IGl0IGlzIGluc2lkZSBhIGJhcmUgcmVwb3NpdG9yeS4KKwkJIyBXZSBrZWVwIHRoaXMgdGVzdCBhcm91bmQgZm9yIHJlZ3Jlc3Npb24gdGVzdGluZy4KKwkJR0lUX0RJUj0uIGdpdCBzaG93IC1zIEhFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbGUvcmV2IGFtYmlndWl0eSBjaGVjayBpbnNpZGUgYSBiYXJlIHJlcG8nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciBmb28uZ2l0IiAmJgorCWdpdCBjbG9uZSAtcyAtLWJhcmUgLmdpdCBmb28uZ2l0ICYmCisJKAorCQljZCBmb28uZ2l0ICYmCisJCWdpdCBzaG93IC1zIEhFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RldGVjdGlvbiBzaG91bGQgbm90IGJlIGZvb2xlZCBieSBhIHN5bWxpbmsnICcKKwlnaXQgY2xvbmUgLXMgLmdpdCBhbm90aGVyICYmCisJbG4gLXMgYW5vdGhlciB5ZXRhbm90aGVyICYmCisJKAorCQljZCB5ZXRhbm90aGVyLy5naXQgJiYKKwkJZ2l0IHNob3cgLXMgSEVBRAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDIxLXJlcmVyZS1pbi13b3JrZGlyLnNoIGIvdC90MTAyMS1yZXJlcmUtaW4td29ya2Rpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMDFlMDcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTAyMS1yZXJlcmUtaW4td29ya2Rpci5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVyZXJlIHJ1biBpbiBhIHdvcmtkaXInCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBzZXR1cCAnCisJZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJPndvcmxkICYmCisJZ2l0IGFkZCB3b3JsZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZWNobyBoZWxsbyA+d29ybGQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGhlbGxvICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBIRUFEXiAmJgorCWVjaG8gZ29vZGJ5ZSA+d29ybGQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGdvb2RieWUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncmVyZXJlIGluIHdvcmtkaXInICcKKwlybSAtcmYgLmdpdC9yci1jYWNoZSAmJgorCSIkU0hFTExfUEFUSCIgIiRURVNUX0RJUkVDVE9SWS8uLi9jb250cmliL3dvcmtkaXIvZ2l0LW5ldy13b3JrZGlyIiAuIHdvcmsgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNpZGUgJiYKKwkJZ2l0IHJlcmVyZSBzdGF0dXMgPmFjdHVhbCAmJgorCQllY2hvIHdvcmxkID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBUaGlzIGZhaWxzIGJlY2F1c2Ugd2UgZG9uJ3QgcmVzb2x2ZSByZWxhdGl2ZSBzeW1saW5rIGluIG1rZGlyX2luX2dpdGRpcigpCisjIEZvciB0aGUgcHVycG9zZSBvZiBoZWxwaW5nIGNvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIgdXNlcnMsIHdlIGRvIG5vdAorIyBoYXZlIHRvIHN1cHBvcnQgcmVsYXRpdmUgc3ltbGlua3MsIGJ1dCBpdCBtaWdodCBiZSBuaWNlciB0byBtYWtlIHRoaXMgd29yaworIyB3aXRoIGEgcmVsYXRpdmUgc3ltYm9saWMgbGluayBzb21lZGF5LgordGVzdF9leHBlY3RfZmFpbHVyZSBTWU1MSU5LUyAncmVyZXJlIGluIHdvcmtkaXIgKHJlbGF0aXZlKScgJworCXJtIC1yZiAuZ2l0L3JyLWNhY2hlICYmCisJIiRTSEVMTF9QQVRIIiAiJFRFU1RfRElSRUNUT1JZLy4uL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIiIC4ga3JvdyAmJgorCSgKKwkJY2Qga3JvdyAmJgorCQlybSAtZiAuZ2l0L3JyLWNhY2hlICYmCisJCWxuIC1zIC4uLy5naXQvcnItY2FjaGUgLmdpdC9yci1jYWNoZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2lkZSAmJgorCQlnaXQgcmVyZXJlIHN0YXR1cyA+YWN0dWFsICYmCisJCWVjaG8gd29ybGQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEwNTAtbGFyZ2Uuc2ggYi90L3QxMDUwLWxhcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5ZjNkMTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDUwLWxhcmdlLnNoCkBAIC0wLDAgKzEsMTg2IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhZGRpbmcgYW5kIGNoZWNraW5nIG91dCBsYXJnZSBibG9icycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCSMgY2xvbmUgZG9lcyBub3QgYWxsb3cgdXMgdG8gcGFzcyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQgdG8KKwkjIG5ldyByZXBvcywgc28gc2V0IGNvcmUuYmlnZmlsZXRocmVzaG9sZCBnbG9iYWxseQorCWdpdCBjb25maWcgLS1nbG9iYWwgY29yZS5iaWdmaWxldGhyZXNob2xkIDIwMGsgJiYKKwlwcmludGYgIiUyMDAwMDAwcyIgWCA+bGFyZ2UxICYmCisJY3AgbGFyZ2UxIGxhcmdlMiAmJgorCWNwIGxhcmdlMSBsYXJnZTMgJiYKKwlwcmludGYgIiUyNTAwMDAwcyIgWSA+aHVnZSAmJgorCUdJVF9BTExPQ19MSU1JVD0xNTAwayAmJgorCWV4cG9ydCBHSVRfQUxMT0NfTElNSVQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGEgbGFyZ2UgZmlsZSBvciB0d28nICcKKwlnaXQgYWRkIGxhcmdlMSBodWdlIGxhcmdlMiAmJgorCSMgbWFrZSBzdXJlIHdlIGdvdCBhIHNpbmdsZSBwYWNrZmlsZSBhbmQgbm8gbG9vc2Ugb2JqZWN0cworCWJhZD0gY291bnQ9MCBpZHg9ICYmCisJZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnBhY2sKKwlkbworCQljb3VudD0kKCggJGNvdW50ICsgMSApKQorCQlpZiB0ZXN0IC1mICIkcCIgJiYgaWR4PSR7cCUucGFja30uaWR4ICYmIHRlc3QgLWYgIiRpZHgiCisJCXRoZW4KKwkJCWNvbnRpbnVlCisJCWZpCisJCWJhZD10CisJZG9uZSAmJgorCXRlc3QgLXogIiRiYWQiICYmCisJdGVzdCAkY291bnQgPSAxICYmCisJY250PSQoZ2l0IHNob3ctaW5kZXggPCIkaWR4IiB8IHdjIC1sKSAmJgorCXRlc3QgJGNudCA9IDIgJiYKKwlmb3IgbCBpbiAuZ2l0L29iamVjdHMvPz8vPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8KKwlkbworCQl0ZXN0IC1mICIkbCIgfHwgY29udGludWUKKwkJYmFkPXQKKwlkb25lICYmCisJdGVzdCAteiAiJGJhZCIgJiYKKworCSMgYXR0ZW1wdCB0byBhZGQgYW5vdGhlciBjb3B5IG9mIHRoZSBzYW1lCisJZ2l0IGFkZCBsYXJnZTMgJiYKKwliYWQ9IGNvdW50PTAgJiYKKwlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSoucGFjaworCWRvCisJCWNvdW50PSQoKCAkY291bnQgKyAxICkpCisJCWlmIHRlc3QgLWYgIiRwIiAmJiBpZHg9JHtwJS5wYWNrfS5pZHggJiYgdGVzdCAtZiAiJGlkeCIKKwkJdGhlbgorCQkJY29udGludWUKKwkJZmkKKwkJYmFkPXQKKwlkb25lICYmCisJdGVzdCAteiAiJGJhZCIgJiYKKwl0ZXN0ICRjb3VudCA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYSBsYXJnZSBmaWxlJyAnCisJbGFyZ2UxPSQoZ2l0IHJldi1wYXJzZSA6bGFyZ2UxKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTAwNjQ0ICRsYXJnZTEgYW5vdGhlciAmJgorCWdpdCBjaGVja291dCBhbm90aGVyICYmCisJdGVzdF9jbXAgbGFyZ2UxIGFub3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFja3NpemUgbGltaXQnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIG1pZCAmJgorCSgKKwkJY2QgbWlkICYmCisJCWdpdCBjb25maWcgY29yZS5iaWdmaWxldGhyZXNob2xkIDY0ayAmJgorCQlnaXQgY29uZmlnIHBhY2sucGFja3NpemVsaW1pdCAyNTZrICYmCisKKwkJIyBtaWQxIGFuZCBtaWQyIHdpbGwgZml0IHdpdGhpbiAyNTZrIGxpbWl0IGJ1dAorCQkjIGFwcGVuZGluZyBtaWQzIHdpbGwgYnVzdCB0aGUgbGltaXQgYW5kIHdpbGwKKwkJIyByZXN1bHQgaW4gYSBzZXBhcmF0ZSBwYWNrZmlsZS4KKwkJdGVzdC1nZW5yYW5kb20gImEiICQoKCA2NiAqIDEwMjQgKSkgPm1pZDEgJiYKKwkJdGVzdC1nZW5yYW5kb20gImIiICQoKCA4MCAqIDEwMjQgKSkgPm1pZDIgJiYKKwkJdGVzdC1nZW5yYW5kb20gImMiICQoKCAxMjggKiAxMDI0ICkpID5taWQzICYmCisJCWdpdCBhZGQgbWlkMSBtaWQyIG1pZDMgJiYKKworCQljb3VudD0wCisJCWZvciBwaSBpbiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSouaWR4CisJCWRvCisJCQl0ZXN0IC1mICIkcGkiICYmIGNvdW50PSQoKCAkY291bnQgKyAxICkpCisJCWRvbmUgJiYKKwkJdGVzdCAkY291bnQgPSAyICYmCisKKwkJKAorCQkJZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPG1pZDEKKwkJCWdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDxtaWQyCisJCQlnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA8bWlkMworCQkpIHwKKwkJc29ydCA+ZXhwZWN0ICYmCisKKwkJZm9yIHBpIGluIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5pZHgKKwkJZG8KKwkJCWdpdCBzaG93LWluZGV4IDwiJHBpIgorCQlkb25lIHwKKwkJc2VkIC1lICJzL15bMC05XSogXChbMC05YS1mXSpcKSAuKi9cMS8iIHwKKwkJc29ydCA+YWN0dWFsICYmCisKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXJhdycgJworCWdpdCBjb21taXQgLXEgLW0gaW5pdGlhbCAmJgorCWVjaG8gbW9kaWZpZWQgPj5sYXJnZTEgJiYKKwlnaXQgYWRkIGxhcmdlMSAmJgorCWdpdCBjb21taXQgLXEgLW0gbW9kaWZpZWQgJiYKKwlnaXQgZGlmZiAtLXJhdyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tc3RhdCcgJworCWdpdCBkaWZmIC0tc3RhdCBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYnICcKKwlnaXQgZGlmZiBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwlncmVwICJCaW5hcnkgZmlsZXMuKmRpZmZlciIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1jYWNoZWQnICcKKwlnaXQgZGlmZiAtLWNhY2hlZCBIRUFEXiA+YWN0dWFsICYmCisJZ3JlcCAiQmluYXJ5IGZpbGVzLipkaWZmZXIiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYXNoLW9iamVjdCcgJworCWdpdCBoYXNoLW9iamVjdCBsYXJnZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgYSBsYXJnZSBmaWxlJyAnCisJZ2l0IGNhdC1maWxlIGJsb2IgOmxhcmdlMSA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdC1maWxlIGEgbGFyZ2UgZmlsZSBmcm9tIGEgdGFnJyAnCisJZ2l0IHRhZyAtbSBsYXJnZWZpbGUgbGFyZ2VmaWxldGFnIDpsYXJnZTEgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBsYXJnZWZpbGV0YWcgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtc2hvdyBhIGxhcmdlIGZpbGUnICcKKwlnaXQgc2hvdyA6bGFyZ2UxID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrJyAnCisJZ2l0IGNsb25lIGZpbGU6Ly8iJChwd2QpIi8uZ2l0IGZvbyAmJgorCUdJVF9ESVI9bm9uLWV4aXN0ZW50IGdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tdmVyaWZ5IGZvby8uZ2l0L29iamVjdHMvcGFjay8qLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrJyAnCisJZ2l0IHJlcGFjayAtYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjay1vYmplY3RzIHdpdGggbGFyZ2UgbG9vc2Ugb2JqZWN0JyAnCisJU0hBMT0kKGdpdCBoYXNoLW9iamVjdCBodWdlKSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gbG9vc2UgJiYKKwllY2hvICRTSEExIHwgZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCB8CisJCUdJVF9BTExPQ19MSU1JVD0wIEdJVF9ESVI9bG9vc2UvLmdpdCBnaXQgdW5wYWNrLW9iamVjdHMgJiYKKwllY2hvICRTSEExIHwgR0lUX0RJUj1sb29zZS8uZ2l0IGdpdCBwYWNrLW9iamVjdHMgcGFjayAmJgorCXRlc3RfY3JlYXRlX3JlcG8gcGFja2VkICYmCisJbXYgcGFjay0qIHBhY2tlZC8uZ2l0L29iamVjdHMvcGFjayAmJgorCUdJVF9ESVI9cGFja2VkLy5naXQgZ2l0IGNhdC1maWxlIGJsb2IgJFNIQTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGh1Z2UgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhciBhY2hpdmluZycgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciBIRUFEID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnemlwIGFjaGl2aW5nLCBzdG9yZSBvbmx5JyAnCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIC0wIEhFQUQgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd6aXAgYWNoaXZpbmcsIGRlZmxhdGUnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgSEVBRCA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2snICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPmVyciAmJgorCW49JChncmVwICJlcnJvcjogYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSAuKiBvdmVyIGxpbWl0IiBlcnIgfCB3YyAtbCkgJiYKKwl0ZXN0ICIkbiIgLWd0IDEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDUxLWxhcmdlLWNvbnZlcnNpb24uc2ggYi90L3QxMDUxLWxhcmdlLWNvbnZlcnNpb24uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGI3NjQwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEwNTEtbGFyZ2UtY29udmVyc2lvbi5zaApAQCAtMCwwICsxLDg2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjb252ZXJzaW9uIGZpbHRlcnMgb24gbGFyZ2UgZmlsZXMnCisuIC4vdGVzdC1saWIuc2gKKworc2V0X2F0dHIoKSB7CisJdGVzdF93aGVuX2ZpbmlzaGVkICdybSAtZiAuZ2l0YXR0cmlidXRlcycgJiYKKwllY2hvICIqICQqIiA+LmdpdGF0dHJpYnV0ZXMKK30KKworY2hlY2tfaW5wdXQoKSB7CisJZ2l0IHJlYWQtdHJlZSAtLWVtcHR5ICYmCisJZ2l0IGFkZCBzbWFsbCBsYXJnZSAmJgorCWdpdCBjYXQtZmlsZSBibG9iIDpzbWFsbCA+c21hbGwuaW5kZXggJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiA6bGFyZ2UgfCBoZWFkIC1uIDEgPmxhcmdlLmluZGV4ICYmCisJdGVzdF9jbXAgc21hbGwuaW5kZXggbGFyZ2UuaW5kZXgKK30KKworY2hlY2tfb3V0cHV0KCkgeworCXJtIC1mIHNtYWxsIGxhcmdlICYmCisJZ2l0IGNoZWNrb3V0IHNtYWxsIGxhcmdlICYmCisJaGVhZCAtbiAxIGxhcmdlID5sYXJnZS5oZWFkICYmCisJdGVzdF9jbXAgc21hbGwgbGFyZ2UuaGVhZAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBpbnB1dCB0ZXN0cycgJworCXByaW50ZiAiXCRJZDogZm9vXCRcXHJcXG4iID5zbWFsbCAmJgorCWNhdCBzbWFsbCBzbWFsbCA+bGFyZ2UgJiYKKwlnaXQgY29uZmlnIGNvcmUuYmlnZmlsZXRocmVzaG9sZCAyMCAmJgorCWdpdCBjb25maWcgZmlsdGVyLnRlc3QuY2xlYW4gInNlZCBzLy4qL0NMRUFOLyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b2NybGY9dHJ1ZSBjb252ZXJ0cyBvbiBpbnB1dCcgJworCXRlc3RfY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWNoZWNrX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VvbD1jcmxmIGNvbnZlcnRzIG9uIGlucHV0JyAnCisJc2V0X2F0dHIgZW9sPWNybGYgJiYKKwljaGVja19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZGVudCBjb252ZXJ0cyBvbiBpbnB1dCcgJworCXNldF9hdHRyIGlkZW50ICYmCisJY2hlY2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlci1kZWZpbmVkIGZpbHRlcnMgY29udmVydCBvbiBpbnB1dCcgJworCXNldF9hdHRyIGZpbHRlcj10ZXN0ICYmCisJY2hlY2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb3V0cHV0IHRlc3RzJyAnCisJZWNobyAiXCRJZFwkIiA+c21hbGwgJiYKKwljYXQgc21hbGwgc21hbGwgPmxhcmdlICYmCisJZ2l0IGFkZCBzbWFsbCBsYXJnZSAmJgorCWdpdCBjb25maWcgY29yZS5iaWdmaWxldGhyZXNob2xkIDcgJiYKKwlnaXQgY29uZmlnIGZpbHRlci50ZXN0LnNtdWRnZSAic2VkIHMvLiovU01VREdFLyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b2NybGY9dHJ1ZSBjb252ZXJ0cyBvbiBvdXRwdXQnICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwljaGVja19vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW9sPWNybGYgY29udmVydHMgb24gb3V0cHV0JyAnCisJc2V0X2F0dHIgZW9sPWNybGYgJiYKKwljaGVja19vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlci1kZWZpbmVkIGZpbHRlcnMgY29udmVydCBvbiBvdXRwdXQnICcKKwlzZXRfYXR0ciBmaWx0ZXI9dGVzdCAmJgorCWNoZWNrX291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZGVudCBjb252ZXJ0cyBvbiBvdXRwdXQnICcKKwlzZXRfYXR0ciBpZGVudCAmJgorCXJtIC1mIHNtYWxsIGxhcmdlICYmCisJZ2l0IGNoZWNrb3V0IHNtYWxsIGxhcmdlICYmCisJc2VkIC1uICJzL0lkOiAuKi9JZDogU0hBL3AiIDxzbWFsbCA+c21hbGwuY2xlYW4gJiYKKwloZWFkIC1uIDEgbGFyZ2UgPmxhcmdlLmhlYWQgJiYKKwlzZWQgLW4gInMvSWQ6IC4qL0lkOiBTSEEvcCIgPGxhcmdlLmhlYWQgPmxhcmdlLmNsZWFuICYmCisJdGVzdF9jbXAgc21hbGwuY2xlYW4gbGFyZ2UuY2xlYW4KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDYwLW9iamVjdC1jb3JydXB0aW9uLnNoIGIvdC90MTA2MC1vYmplY3QtY29ycnVwdGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZjg3MDUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTA2MC1vYmplY3QtY29ycnVwdGlvbi5zaApAQCAtMCwwICsxLDEwNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NlZSBob3cgd2UgaGFuZGxlIHZhcmlvdXMgZm9ybXMgb2YgY29ycnVwdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCisjIGNvbnZlcnQgIjEyMzRhYmNkIiB0byAiLmdpdC9vYmplY3RzLzEyLzM0YWJjZCIKK29ial90b19maWxlKCkgeworCWVjaG8gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL29iamVjdHMvJChnaXQgcmV2LXBhcnNlICIkMSIgfCBzZWQgJ3MsLi4sJi8sJykiCit9CisKKyMgQ29udmVydCBieXRlIGF0IG9mZnNldCAiJDIiIG9mIG9iamVjdCAiJDEiIGludG8gJ1wwJworY29ycnVwdF9ieXRlKCkgeworCW9ial9maWxlPSQob2JqX3RvX2ZpbGUgIiQxIikgJiYKKwljaG1vZCArdyAiJG9ial9maWxlIiAmJgorCXByaW50ZiAnXDAnIHwgZGQgb2Y9IiRvYmpfZmlsZSIgYnM9MSBzZWVrPSIkMiIgY29udj1ub3RydW5jCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvcnJ1cHQgcmVwbycgJworCWdpdCBpbml0IGJpdC1lcnJvciAmJgorCSgKKwkJY2QgYml0LWVycm9yICYmCisJCXRlc3RfY29tbWl0IGNvbnRlbnQgJiYKKwkJY29ycnVwdF9ieXRlIEhFQUQ6Y29udGVudC50IDEwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvIHdpdGggbWlzc2luZyBvYmplY3QnICcKKwlnaXQgaW5pdCBtaXNzaW5nICYmCisJKAorCQljZCBtaXNzaW5nICYmCisJCXRlc3RfY29tbWl0IGNvbnRlbnQgJiYKKwkJcm0gLWYgIiQob2JqX3RvX2ZpbGUgSEVBRDpjb250ZW50LnQpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwbyB3aXRoIG1pc25hbWVkIG9iamVjdCcgJworCWdpdCBpbml0IG1pc25hbWVkICYmCisJKAorCQljZCBtaXNuYW1lZCAmJgorCQl0ZXN0X2NvbW1pdCBjb250ZW50ICYmCisJCWdvb2Q9JChvYmpfdG9fZmlsZSBIRUFEOmNvbnRlbnQudCkgJiYKKwkJYmxvYj0kKGVjaG8gY29ycnVwdCB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCQliYWQ9JChvYmpfdG9fZmlsZSAkYmxvYikgJiYKKwkJcm0gLWYgIiRnb29kIiAmJgorCQltdiAiJGJhZCIgIiRnb29kIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyZWFtaW5nIGEgY29ycnVwdCBibG9iIGZhaWxzJyAnCisJKAorCQljZCBiaXQtZXJyb3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDpjb250ZW50LnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSAtdSBkZXRlY3RzIGJpdC1lcnJvcnMgaW4gYmxvYnMnICcKKwkoCisJCWNkIGJpdC1lcnJvciAmJgorCQlybSAtZiBjb250ZW50LnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSAtdSBkZXRlY3RzIG1pc3Npbmcgb2JqZWN0cycgJworCSgKKwkJY2QgbWlzc2luZyAmJgorCQlybSAtZiBjb250ZW50LnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQKKwkpCisnCisKKyMgV2UgdXNlIC0tYmFyZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdHJhbnNwb3J0IGRldGVjdHMgaXQsIG5vdCB0aGUgY2hlY2tvdXQKKyMgcGhhc2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSBkZXRlY3RzIGNvcnJ1cHRpb24nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWJhcmUgYml0LWVycm9yIGNvcnJ1cHQtdHJhbnNwb3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tbm8tbG9jYWwgLS1iYXJlIGRldGVjdHMgbWlzc2luZyBvYmplY3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWJhcmUgbWlzc2luZyBtaXNzaW5nLXRyYW5zcG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSBkZXRlY3RzIG1pc25hbWVkIG9iamVjdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSBtaXNuYW1lZCBtaXNuYW1lZC10cmFuc3BvcnQKKycKKworIyBXZSBkbyBub3QgZXhwZWN0IC0tbG9jYWwgdG8gZGV0ZWN0IGNvcnJ1cHRpb24gYXQgdGhlIHRyYW5zcG9ydCBsYXllciwKKyMgc28gd2UgYXJlIHJlYWxseSBjaGVja2luZyB0aGUgY2hlY2tvdXQoKSBjb2RlIHBhdGguCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWxvY2FsIGRldGVjdHMgY29ycnVwdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLWxvY2FsIGJpdC1lcnJvciBjb3JydXB0LWNoZWNrb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGRldGVjdGVkIGR1cmluZyBjaGVja291dCBsZWF2ZXMgcmVwbyBpbnRhY3QnICcKKwl0ZXN0X3BhdGhfaXNfZGlyIGNvcnJ1cHQtY2hlY2tvdXQvLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWxvY2FsIGRldGVjdHMgbWlzc2luZyBvYmplY3RzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tbG9jYWwgbWlzc2luZyBtaXNzaW5nLWNoZWNrb3V0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2Nsb25lIC0tbG9jYWwgZGV0ZWN0cyBtaXNuYW1lZCBvYmplY3RzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tbG9jYWwgbWlzbmFtZWQgbWlzbmFtZWQtY2hlY2tvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMDkwLXNwYXJzZS1jaGVja291dC1zY29wZS5zaCBiL3QvdDEwOTAtc3BhcnNlLWNoZWNrb3V0LXNjb3BlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFmNjFlYjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMDkwLXNwYXJzZS1jaGVja291dC1zY29wZS5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc3BhcnNlIGNoZWNrb3V0IHNjb3BlIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvICJpbml0aWFsIiA+YSAmJgorCWVjaG8gImluaXRpYWwiID5iICYmCisJZWNobyAiaW5pdGlhbCIgPmMgJiYKKwlnaXQgYWRkIGEgYiBjICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBmZWF0dXJlIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtYiBmZWF0dXJlICYmCisJZWNobyAibW9kaWZpZWQiID5iICYmCisJZWNobyAibW9kaWZpZWQiID5jICYmCisJZ2l0IGFkZCBiIGMgJiYKKwlnaXQgY29tbWl0IC1tICJtb2RpZmljYXRpb24iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlcmZvcm0gc3BhcnNlIGNoZWNrb3V0IG9mIG1hc3RlcicgJworCWdpdCBjb25maWcgLS1sb2NhbCAtLWJvb2wgY29yZS5zcGFyc2VjaGVja291dCB0cnVlICYmCisJZWNobyAiIS8qIiA+LmdpdC9pbmZvL3NwYXJzZS1jaGVja291dCAmJgorCWVjaG8gIi9hIiA+Pi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwllY2hvICIvYyIgPj4uZ2l0L2luZm8vc3BhcnNlLWNoZWNrb3V0ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBmZWF0dXJlIGJyYW5jaCBpbnRvIHNwYXJzZSBjaGVja291dCBvZiBtYXN0ZXInICcKKwlnaXQgbWVyZ2UgZmVhdHVyZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYyAmJgorCXRlc3QgIiQoY2F0IGMpIiA9ICJtb2RpZmllZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV0dXJuIHRvIGZ1bGwgY2hlY2tvdXQgb2YgbWFzdGVyJyAnCisJZ2l0IGNoZWNrb3V0IGZlYXR1cmUgJiYKKwllY2hvICIvKiIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBjICYmCisJdGVzdCAiJChjYXQgYikiID0gIm1vZGlmaWVkIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDExMDAtY29tbWl0LXRyZWUtb3B0aW9ucy5zaCBiL3QvdDExMDAtY29tbWl0LXRyZWUtb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mODQ1N2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTEwMC1jb21taXQtdHJlZS1vcHRpb25zLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDUgUmVuZSBTY2hhcmZlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjb21taXQtdHJlZSBvcHRpb25zIHRlc3QKKworVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGdpdCBjb21taXQtdHJlZSBjYW4gY3JlYXRlIGEgc3BlY2lmaWMgY29tbWl0CitvYmplY3QgYnkgZGVmaW5pbmcgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGl0IHVuZGVyc3RhbmRzLgorCitBbHNvIG1ha2Ugc3VyZSB0aGF0IGNvbW1hbmQgbGluZSBwYXJzZXIgdW5kZXJzdGFuZHMgdGhlIG5vcm1hbAorImZsYWdzIGZpcnN0IGFuZCB0aGVuIG5vbiBmbGFnIGFyZ3VtZW50cyIgY29tbWFuZCBsaW5lLgorJworCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5leHBlY3RlZCA8PEVPRgordHJlZSA0YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CithdXRob3IgQXV0aG9yIE5hbWUgPGF1dGhvckBlbWFpbD4gMTExNzE0ODQwMCArMDAwMAorY29tbWl0dGVyIENvbW1pdHRlciBOYW1lIDxjb21taXR0ZXJAZW1haWw+IDExMTcxNTAyMDAgKzAwMDAKKworY29tbWVudCB0ZXh0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3Rlc3QgcHJlcGFyYXRpb246IHdyaXRlIGVtcHR5IHRyZWUnIFwKKyAgICAnZ2l0IHdyaXRlLXRyZWUgPnRyZWVpZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbnN0cnVjdCBjb21taXQnIFwKKyAgICAnZWNobyBjb21tZW50IHRleHQgfAorICAgICBHSVRfQVVUSE9SX05BTUU9IkF1dGhvciBOYW1lIiBcCisgICAgIEdJVF9BVVRIT1JfRU1BSUw9ImF1dGhvckBlbWFpbCIgXAorICAgICBHSVRfQVVUSE9SX0RBVEU9IjIwMDUtMDUtMjYgMjM6MDAiIFwKKyAgICAgR0lUX0NPTU1JVFRFUl9OQU1FPSJDb21taXR0ZXIgTmFtZSIgXAorICAgICBHSVRfQ09NTUlUVEVSX0VNQUlMPSJjb21taXR0ZXJAZW1haWwiIFwKKyAgICAgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMwIiBcCisgICAgIFRaPUdNVCBnaXQgY29tbWl0LXRyZWUgYGNhdCB0cmVlaWRgID5jb21taXRpZCAyPi9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3JlYWQgY29tbWl0JyBcCisgICAgJ2dpdCBjYXQtZmlsZSBjb21taXQgYGNhdCBjb21taXRpZGAgPmNvbW1pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvbXBhcmUgY29tbWl0JyBcCisgICAgJ3Rlc3RfY21wIGV4cGVjdGVkIGNvbW1pdCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmbGFncyBhbmQgdGhlbiBub24gZmxhZ3MnICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIGNvbW1lbnQgdGV4dCB8CisJZ2l0IGNvbW1pdC10cmVlICQoY2F0IHRyZWVpZCkgPmNvbW1pdGlkICYmCisJZWNobyBjb21tZW50IHRleHQgfAorCWdpdCBjb21taXQtdHJlZSAkKGNhdCB0cmVlaWQpIC1wICQoY2F0IGNvbW1pdGlkKSA+Y2hpbGRpZC0xICYmCisJZWNobyBjb21tZW50IHRleHQgfAorCWdpdCBjb21taXQtdHJlZSAtcCAkKGNhdCBjb21taXRpZCkgJChjYXQgdHJlZWlkKSA+Y2hpbGRpZC0yICYmCisJdGVzdF9jbXAgY2hpbGRpZC0xIGNoaWxkaWQtMiAmJgorCWdpdCBjb21taXQtdHJlZSAkKGNhdCB0cmVlaWQpIC1tIGZvbyA+Y2hpbGRpZC0zICYmCisJZ2l0IGNvbW1pdC10cmVlIC1tIGZvbyAkKGNhdCB0cmVlaWQpID5jaGlsZGlkLTQgJiYKKwl0ZXN0X2NtcCBjaGlsZGlkLTMgY2hpbGRpZC00CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTIwMC10dXRvcmlhbC5zaCBiL3QvdDEyMDAtdHV0b3JpYWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzk3Y2NiNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEyMDAtdHV0b3JpYWwuc2gKQEAgLTAsMCArMSwyNjggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdBIHNpbXBsZSB0dXJpYWwgaW4gdGhlIGZvcm0gb2YgYSB0ZXN0IGNhc2UnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibG9iJyAgJworCWVjaG8gIkhlbGxvIFdvcmxkIiA+IGhlbGxvICYmCisJZWNobyAiU2lsbHkgZXhhbXBsZSIgPiBleGFtcGxlICYmCisKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGhlbGxvIGV4YW1wbGUgJiYKKworCXRlc3QgYmxvYiA9ICIkKGdpdCBjYXQtZmlsZSAtdCA1NTdkYjAzKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYiA1NTdkYjAzJyAnCisJdGVzdCAiSGVsbG8gV29ybGQiID0gIiQoZ2l0IGNhdC1maWxlIGJsb2IgNTU3ZGIwMykiCisnCisKK2VjaG8gIkl0J3MgYSBuZXcgZGF5IGZvciBnaXQiID4+aGVsbG8KK2NhdCA+IGRpZmYuZXhwZWN0IDw8IEVPRgorZGlmZiAtLWdpdCBhL2hlbGxvIGIvaGVsbG8KK2luZGV4IDU1N2RiMDMuLjI2MzQxNGYgMTAwNjQ0CistLS0gYS9oZWxsbworKysrIGIvaGVsbG8KK0BAIC0xICsxLDIgQEAKKyBIZWxsbyBXb3JsZAorK0l0J3MgYSBuZXcgZGF5IGZvciBnaXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1maWxlcyAtcCcgJworCWdpdCBkaWZmLWZpbGVzIC1wID4gZGlmZi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBkaWZmLmV4cGVjdCBkaWZmLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZicgJworCWdpdCBkaWZmID4gZGlmZi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBkaWZmLmV4cGVjdCBkaWZmLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlJyAnCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlIDI+L2Rldi9udWxsKSAmJgorCXRlc3QgODk4OGRhMTVkMDc3ZDQ4MjlmYzUxZDg1NDRjMDk3ZGVmNjY0NGRiYiA9ICR0cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC1wIEhFQUQnICcKKwl0ZXN0X3RpY2sgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0PSQoZWNobyAiSW5pdGlhbCBjb21taXQiIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgJGNvbW1pdCAmJgorCWdpdCBkaWZmLWluZGV4IC1wIEhFQUQgPiBkaWZmLm91dHB1dCAmJgorCXRlc3RfY21wIGRpZmYuZXhwZWN0IGRpZmYub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQnICcKKwlnaXQgZGlmZiBIRUFEID4gZGlmZi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBkaWZmLmV4cGVjdCBkaWZmLm91dHB1dAorJworCitjYXQgPiB3aGF0Y2hhbmdlZC5leHBlY3QgPDwgRU9GCitjb21taXQgVkFSSUFCTEUKK0F1dGhvcjogVkFSSUFCTEUKK0RhdGU6ICAgVkFSSUFCTEUKKworICAgIEluaXRpYWwgY29tbWl0CisKK2RpZmYgLS1naXQgYS9leGFtcGxlIGIvZXhhbXBsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmYyNGM3NGEKKy0tLSAvZGV2L251bGwKKysrKyBiL2V4YW1wbGUKK0BAIC0wLDAgKzEgQEAKKytTaWxseSBleGFtcGxlCitkaWZmIC0tZ2l0IGEvaGVsbG8gYi9oZWxsbworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjU1N2RiMDMKKy0tLSAvZGV2L251bGwKKysrKyBiL2hlbGxvCitAQCAtMCwwICsxIEBACisrSGVsbG8gV29ybGQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgd2hhdGNoYW5nZWQgLXAgLS1yb290JyAnCisJZ2l0IHdoYXRjaGFuZ2VkIC1wIC0tcm9vdCB8CisJCXNlZCAtZSAiMXMvXlwoLlx7N1x9XCkuXHs0MFx9L1wxVkFSSUFCTEUvIiBcCisJCS1lICIyLDNzL15cKC5cezhcfVwpLiokL1wxVkFSSUFCTEUvIiBcCisJPiB3aGF0Y2hhbmdlZC5vdXRwdXQgJiYKKwl0ZXN0X2NtcCB3aGF0Y2hhbmdlZC5leHBlY3Qgd2hhdGNoYW5nZWQub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCB0YWcgbXktZmlyc3QtdGFnJyAnCisJZ2l0IHRhZyBteS1maXJzdC10YWcgJiYKKwl0ZXN0X2NtcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy90YWdzL215LWZpcnN0LXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2ggJiYKKwl0ZXN0X2NtcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9teWJyYW5jaAorJworCitjYXQgPiBicmFuY2guZXhwZWN0IDw8RU9GCisgIG1hc3RlcgorKiBteWJyYW5jaAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2gnICcKKwlnaXQgYnJhbmNoID4gYnJhbmNoLm91dHB1dCAmJgorCXRlc3RfY21wIGJyYW5jaC5leHBlY3QgYnJhbmNoLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVzb2x2ZSBub3cgZmFpbHMnICcKKwlnaXQgY2hlY2tvdXQgbXlicmFuY2ggJiYKKwllY2hvICJXb3JrLCB3b3JrLCB3b3JrIiA+PmhlbGxvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU29tZSB3b3JrLiIgLWkgaGVsbG8gJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCWVjaG8gIlBsYXksIHBsYXksIHBsYXkiID4+aGVsbG8gJiYKKwllY2hvICJMb3RzIG9mIGZ1biIgPj5leGFtcGxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU29tZSBmdW4uIiAtaSBoZWxsbyBleGFtcGxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLW0gIk1lcmdlIHdvcmsgaW4gbXlicmFuY2giIG15YnJhbmNoCisnCisKK2NhdCA+IGhlbGxvIDw8IEVPRgorSGVsbG8gV29ybGQKK0l0J3MgYSBuZXcgZGF5IGZvciBnaXQKK1BsYXksIHBsYXksIHBsYXkKK1dvcmssIHdvcmssIHdvcmsKK0VPRgorCitjYXQgPiBzaG93LWJyYW5jaC5leHBlY3QgPDwgRU9GCisqIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKyAhIFtteWJyYW5jaF0gU29tZSB3b3JrLgorLS0KKy0gIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKyorIFtteWJyYW5jaF0gU29tZSB3b3JrLgorKiAgW21hc3Rlcl5dIFNvbWUgZnVuLgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93LWJyYW5jaCcgJworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHdvcmsgaW4gbXlicmFuY2giIC1pIGhlbGxvICYmCisJZ2l0IHNob3ctYnJhbmNoIC0tdG9wby1vcmRlciAtLW1vcmU9MSBtYXN0ZXIgbXlicmFuY2ggXAorCQk+IHNob3ctYnJhbmNoLm91dHB1dCAmJgorCXRlc3RfY21wIHNob3ctYnJhbmNoLmV4cGVjdCBzaG93LWJyYW5jaC5vdXRwdXQKKycKKworY2F0ID4gcmVzb2x2ZS5leHBlY3QgPDwgRU9GCitVcGRhdGluZyBWQVJJQUJMRS4uVkFSSUFCTEUKK0ZBU1RGT1JXQVJEIChubyBjb21taXQgY3JlYXRlZDsgLW0gb3B0aW9uIGlnbm9yZWQpCisgZXhhbXBsZSB8IDEgKworIGhlbGxvICAgfCAxICsKKyAyIGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXNvbHZlJyAnCisJZ2l0IGNoZWNrb3V0IG15YnJhbmNoICYmCisJZ2l0IG1lcmdlIC1tICJNZXJnZSB1cHN0cmVhbSBjaGFuZ2VzLiIgbWFzdGVyIHwKKwkJc2VkIC1lICIxcy9bMC05YS1mXVx7N1x9L1ZBUklBQkxFL2ciIFwKKwkJLWUgInMvXkZhc3RbLSBdZm9yd2FyZCAvRkFTVEZPUldBUkQgLyIgPnJlc29sdmUub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXNvbHZlIG91dHB1dCcgJworCXRlc3RfaTE4bmNtcCByZXNvbHZlLmV4cGVjdCByZXNvbHZlLm91dHB1dAorJworCitjYXQgPiBzaG93LWJyYW5jaDIuZXhwZWN0IDw8IEVPRgorISBbbWFzdGVyXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCisgKiBbbXlicmFuY2hdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKy0tCistLSBbbWFzdGVyXSBNZXJnZSB3b3JrIGluIG15YnJhbmNoCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3ctYnJhbmNoIChwYXJ0IDIpJyAnCisJZ2l0IHNob3ctYnJhbmNoIC0tdG9wby1vcmRlciBtYXN0ZXIgbXlicmFuY2ggPiBzaG93LWJyYW5jaDIub3V0cHV0ICYmCisJdGVzdF9jbXAgc2hvdy1icmFuY2gyLmV4cGVjdCBzaG93LWJyYW5jaDIub3V0cHV0CisnCisKK2NhdCA+IHNob3ctYnJhbmNoMy5leHBlY3QgPDwgRU9GCishIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKyAqIFtteWJyYW5jaF0gTWVyZ2Ugd29yayBpbiBteWJyYW5jaAorLS0KKy0tIFttYXN0ZXJdIE1lcmdlIHdvcmsgaW4gbXlicmFuY2gKKysqIFttYXN0ZXJeMl0gU29tZSB3b3JrLgorKyogW21hc3Rlcl5dIFNvbWUgZnVuLgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG93LWJyYW5jaCAocGFydCAzKScgJworCWdpdCBzaG93LWJyYW5jaCAtLXRvcG8tb3JkZXIgLS1tb3JlPTIgbWFzdGVyIG15YnJhbmNoIFwKKwkJPiBzaG93LWJyYW5jaDMub3V0cHV0ICYmCisJdGVzdF9jbXAgc2hvdy1icmFuY2gzLmV4cGVjdCBzaG93LWJyYW5jaDMub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld2luZCB0byAiU29tZSBmdW4uIiBhbmQgIlNvbWUgd29yay4iJyAnCisJZ2l0IGNoZWNrb3V0IG15YnJhbmNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXJeMiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3Rlcl4KKycKKworY2F0ID4gc2hvdy1icmFuY2g0LmV4cGVjdCA8PCBFT0YKKyogW21hc3Rlcl0gU29tZSBmdW4uCisgISBbbXlicmFuY2hdIFNvbWUgd29yay4KKy0tCisqICBbbWFzdGVyXSBTb21lIGZ1bi4KKyArIFtteWJyYW5jaF0gU29tZSB3b3JrLgorKisgW21hc3Rlcl5dIEluaXRpYWwgY29tbWl0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHNob3ctYnJhbmNoIChwYXJ0IDQpJyAnCisJZ2l0IHNob3ctYnJhbmNoIC0tdG9wby1vcmRlciA+IHNob3ctYnJhbmNoNC5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBzaG93LWJyYW5jaDQuZXhwZWN0IHNob3ctYnJhbmNoNC5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFudWFsIG1lcmdlJyAnCisJbWI9JChnaXQgbWVyZ2UtYmFzZSBIRUFEIG15YnJhbmNoKSAmJgorCWdpdCBuYW1lLXJldiAtLW5hbWUtb25seSAtLXRhZ3MgJG1iID4gbmFtZS1yZXYub3V0cHV0ICYmCisJdGVzdCAibXktZmlyc3QtdGFnIiA9ICQoY2F0IG5hbWUtcmV2Lm91dHB1dCkgJiYKKworCWdpdCByZWFkLXRyZWUgLW0gLXUgJG1iIEhFQUQgbXlicmFuY2gKKycKKworY2F0ID4gbHMtZmlsZXMuZXhwZWN0IDw8IEVPRgorMTAwNjQ0IDdmOGIxNDFiNjVmZGNlZTQ3MzIxZTM5OWEyNTk4YTIzNWEwMzI0MjIgMAlleGFtcGxlCisxMDA2NDQgNTU3ZGIwM2RlOTk3Yzg2YTRhMDI4ZTFlYmQzYTFjZWIyMjViZTIzOCAxCWhlbGxvCisxMDA2NDQgYmE0MmEyYTk2ZTMwMjdmMzMzM2UxM2VkZTRjY2Y0NDk4YzNhZTk0MiAyCWhlbGxvCisxMDA2NDQgY2M0NGM3M2ViNzgzNTY1ZGE1ODMxYjRkODIwYzk2Mjk1NDAxOWI2OSAzCWhlbGxvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC0tc3RhZ2UnICcKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+IGxzLWZpbGVzLm91dHB1dCAmJgorCXRlc3RfY21wIGxzLWZpbGVzLmV4cGVjdCBscy1maWxlcy5vdXRwdXQKKycKKworY2F0ID4gbHMtZmlsZXMtdW5tZXJnZWQuZXhwZWN0IDw8IEVPRgorMTAwNjQ0IDU1N2RiMDNkZTk5N2M4NmE0YTAyOGUxZWJkM2ExY2ViMjI1YmUyMzggMQloZWxsbworMTAwNjQ0IGJhNDJhMmE5NmUzMDI3ZjMzMzNlMTNlZGU0Y2NmNDQ5OGMzYWU5NDIgMgloZWxsbworMTAwNjQ0IGNjNDRjNzNlYjc4MzU2NWRhNTgzMWI0ZDgyMGM5NjI5NTQwMTliNjkgMwloZWxsbworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtLXVubWVyZ2VkJyAnCisJZ2l0IGxzLWZpbGVzIC0tdW5tZXJnZWQgPiBscy1maWxlcy11bm1lcmdlZC5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBscy1maWxlcy11bm1lcmdlZC5leHBlY3QgbHMtZmlsZXMtdW5tZXJnZWQub3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1tZXJnZS1pbmRleCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1pbmRleCBnaXQtbWVyZ2Utb25lLWZpbGUgaGVsbG8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgKHBhcnQgMiknICcKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+IGxzLWZpbGVzLm91dHB1dDIgJiYKKwl0ZXN0X2NtcCBscy1maWxlcy5leHBlY3QgbHMtZmlsZXMub3V0cHV0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVwYWNrJyAnZ2l0IHJlcGFjaycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwcnVuZS1wYWNrZWQnICdnaXQgcHJ1bmUtcGFja2VkJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLT4gb25seSBwYWNrZWQgb2JqZWN0cycgJworCWdpdCBwcnVuZSAmJiAjIFJlbW92ZSBjb25mbGljdCBtYXJrZWQgYmxvYnMKKwl0ZXN0ICQoZmluZCAuZ2l0L29iamVjdHMvWzAtOWEtZl1bMC05YS1mXSAtdHlwZSBmIC1wcmludCAyPi9kZXYvbnVsbCB8IHdjIC1sKSA9IDAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzAwLXJlcG8tY29uZmlnLnNoIGIvdC90MTMwMC1yZXBvLWNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MjY3OGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwMC1yZXBvLWNvbmZpZy5zaApAQCAtMCwwICsxLDEyMDQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCBjb25maWcgaW4gZGlmZmVyZW50IHNldHRpbmdzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYXIgZGVmYXVsdCBjb25maWcnICcKKwlybSAtZiAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbY29yZV0KKwlwZW5ndWluID0gbGl0dGxlIGJsdWUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCcgJworCWdpdCBjb25maWcgY29yZS5wZW5ndWluICJsaXR0bGUgYmx1ZSIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2NvcmVdCisJcGVuZ3VpbiA9IGxpdHRsZSBibHVlCisJTW92aWUgPSBCYWRQaHlzaWNzCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21peGVkIGNhc2UnICcKKwlnaXQgY29uZmlnIENvcmUuTW92aWUgQmFkUGh5c2ljcyAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbY29yZV0KKwlwZW5ndWluID0gbGl0dGxlIGJsdWUKKwlNb3ZpZSA9IEJhZFBoeXNpY3MKK1tDb3Jlc10KKwlXaGF0RXZlciA9IFNlY29uZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW1pbGFyIHNlY3Rpb24nICcKKwlnaXQgY29uZmlnIENvcmVzLldoYXRFdmVyIFNlY29uZCAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbY29yZV0KKwlwZW5ndWluID0gbGl0dGxlIGJsdWUKKwlNb3ZpZSA9IEJhZFBoeXNpY3MKKwlVUFBFUkNBU0UgPSB0cnVlCitbQ29yZXNdCisJV2hhdEV2ZXIgPSBTZWNvbmQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBwZXJjYXNlIHNlY3Rpb24nICcKKwlnaXQgY29uZmlnIENPUkUuVVBQRVJDQVNFIHRydWUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSB3aXRoIG5vbi1tYXRjaCcgJworCWdpdCBjb25maWcgY29yZS5wZW5ndWluIGtpbmdwaW4gIWJsdWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSB3aXRoIG5vbi1tYXRjaCAoYWN0dWFsbHkgbWF0Y2hpbmcpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLnBlbmd1aW4gInZlcnkgYmx1ZSIgIWtpbmdwaW4KKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2NvcmVdCisJcGVuZ3VpbiA9IHZlcnkgYmx1ZQorCU1vdmllID0gQmFkUGh5c2ljcworCVVQUEVSQ0FTRSA9IHRydWUKKwlwZW5ndWluID0ga2luZ3BpbgorW0NvcmVzXQorCVdoYXRFdmVyID0gU2Vjb25kCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLW1hdGNoIHJlc3VsdCcgJ3Rlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCBtaXhlZC1jYXNlIGtleSBieSBjYW5vbmljYWwgbmFtZScgJworCWVjaG8gU2Vjb25kID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIGNvcmVzLndoYXRldmVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgbWl4ZWQtY2FzZSBrZXkgYnkgbm9uLWNhbm9uaWNhbCBuYW1lJyAnCisJZWNobyBTZWNvbmQgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgQ29SZVMuV2hBdEV2RXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Vic2VjdGlvbnMgYXJlIG5vdCBjYW5vbmljYWxpemVkIGJ5IGdpdC1jb25maWcnICcKKwljYXQgPj4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW3NlY3Rpb24uU3ViU2VjdGlvbl0KKwlrZXkgPSBvbmUKKwlbc2VjdGlvbiAiU3ViU2VjdGlvbiJdCisJa2V5ID0gdHdvCisJRU9GCisJZWNobyBvbmUgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgc2VjdGlvbi5zdWJzZWN0aW9uLmtleSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gdHdvID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHNlY3Rpb24uU3ViU2VjdGlvbi5rZXkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gLmdpdC9jb25maWcgPDxcRU9GCitbYWxwaGFdCitiYXIgPSBmb28KK1tiZXRhXQorYmF6ID0gbXVsdGlwbGUgXAorbGluZXMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnNldCB3aXRoIGNvbnQuIGxpbmVzJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGJldGEuYmF6CisnCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKK1thbHBoYV0KK2JhciA9IGZvbworW2JldGFdCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zZXQgd2l0aCBjb250LiBsaW5lcyBpcyBjb3JyZWN0JyAndGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnJworCitjYXQgPiAuZ2l0L2NvbmZpZyA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKKwkJaGFoYSAgID0iYmV0YSIgIyBsYXN0IHNpbGx5IGNvbW1lbnQKK2hhaGEgPSBoZWxsbworCWhhaGEgPSBiZWxsbworW25leHRTZWN0aW9uXSBub05ld2xpbmUgPSBvdWNoCitFT0YKKworY3AgLmdpdC9jb25maWcgLmdpdC9jb25maWcyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIHVuc2V0JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBiZXRhLmhhaGEKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudAorbm9JbmRlbnQ9IHNpbGx5VmFsdWUgOyAnbm90aGVyIHNpbGx5IGNvbW1lbnQKKworIyBlbXB0eSBsaW5lCisJCTsgY29tbWVudAorW25leHRTZWN0aW9uXSBub05ld2xpbmUgPSBvdWNoCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgdW5zZXQgaXMgY29ycmVjdCcgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjcCAuZ2l0L2NvbmZpZzIgLmdpdC9jb25maWcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZXBsYWNlLWFsbCBtaXNzaW5nIHZhbHVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGJldGEuaGFoYSAmJgorCXRlc3RfY21wIC5naXQvY29uZmlnMiAuZ2l0L2NvbmZpZworJworCitybSAuZ2l0L2NvbmZpZzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZXBsYWNlLWFsbCcgJworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBiZXRhLmhhaGEgZ2FtbWEKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudAorbm9JbmRlbnQ9IHNpbGx5VmFsdWUgOyAnbm90aGVyIHNpbGx5IGNvbW1lbnQKKworIyBlbXB0eSBsaW5lCisJCTsgY29tbWVudAorCWhhaGEgPSBnYW1tYQorW25leHRTZWN0aW9uXSBub05ld2xpbmUgPSBvdWNoCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIHJlcGxhY2VkJyAnCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKKwloYWhhID0gYWxwaGEKK1tuZXh0U2VjdGlvbl0gbm9OZXdsaW5lID0gb3VjaAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFsbHkgbWVhbiB0ZXN0JyAnCisJZ2l0IGNvbmZpZyBiZXRhLmhhaGEgYWxwaGEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2JldGFdIDsgc2lsbHkgY29tbWVudCAjIGFub3RoZXIgY29tbWVudAorbm9JbmRlbnQ9IHNpbGx5VmFsdWUgOyAnbm90aGVyIHNpbGx5IGNvbW1lbnQKKworIyBlbXB0eSBsaW5lCisJCTsgY29tbWVudAorCWhhaGEgPSBhbHBoYQorW25leHRTZWN0aW9uXQorCW5vbmV3bGluZSA9IHdvdworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFsbHkgcmVhbGx5IG1lYW4gdGVzdCcgJworCWdpdCBjb25maWcgbmV4dHNlY3Rpb24ubm9uZXdsaW5lIHdvdyAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgdmFsdWUnICcKKwllY2hvIGFscGhhID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIGJldGEuaGFoYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CitbbmV4dFNlY3Rpb25dCisJbm9uZXdsaW5lID0gd293CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc2V0JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGJldGEuaGFoYSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CitbbmV4dFNlY3Rpb25dCisJbm9uZXdsaW5lID0gd293CisJTm9OZXdMaW5lID0gd293MiBmb3IgbWUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGl2YXInICcKKwlnaXQgY29uZmlnIG5leHRzZWN0aW9uLk5vTmV3TGluZSAid293MiBmb3IgbWUiICJmb3IgbWUkIiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24tbWF0Y2gnICcKKwlnaXQgY29uZmlnIC0tZ2V0IG5leHRzZWN0aW9uLm5vbmV3bGluZSAhZm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbi1tYXRjaCB2YWx1ZScgJworCWVjaG8gd293ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0IG5leHRzZWN0aW9uLm5vbmV3bGluZSAhZm9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLXZhbHVlZCBnZXQgcmV0dXJucyBmaW5hbCBvbmUnICcKKwllY2hvICJ3b3cyIGZvciBtZSIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLXZhbHVlZCBnZXQtYWxsIHJldHVybnMgYWxsJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXdvdworCXdvdzIgZm9yIG1lCisJRU9GCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgbmV4dHNlY3Rpb24ubm9uZXdsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1tiZXRhXSA7IHNpbGx5IGNvbW1lbnQgIyBhbm90aGVyIGNvbW1lbnQKK25vSW5kZW50PSBzaWxseVZhbHVlIDsgJ25vdGhlciBzaWxseSBjb21tZW50CisKKyMgZW1wdHkgbGluZQorCQk7IGNvbW1lbnQKK1tuZXh0U2VjdGlvbl0KKwlub25ld2xpbmUgPSB3b3czCisJTm9OZXdMaW5lID0gd293MiBmb3IgbWUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGl2YXIgcmVwbGFjZScgJworCWdpdCBjb25maWcgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICJ3b3czIiAid293JCIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1iaWd1b3VzIHVuc2V0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IG5leHRzZWN0aW9uLm5vbmV3bGluZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIHVuc2V0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IHNvbWVzZWN0aW9uLm5vbmV3bGluZQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CitbbmV4dFNlY3Rpb25dCisJTm9OZXdMaW5lID0gd293MiBmb3IgbWUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXZhciB1bnNldCcgJworCWdpdCBjb25maWcgLS11bnNldCBuZXh0c2VjdGlvbi5ub25ld2xpbmUgIndvdzMkIiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIGtleScgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgaW52YWwuMmtleSBibGFibGEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3Qga2V5JyAnZ2l0IGNvbmZpZyAxMjM0NTYuYTEyMyA5ODcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hpZXJhcmNoaWNhbCBzZWN0aW9uJyAnCisJZ2l0IGNvbmZpZyBWZXJzaW9uLjEuMi4zZVguQWxwaGEgYmV0YQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbYmV0YV0gOyBzaWxseSBjb21tZW50ICMgYW5vdGhlciBjb21tZW50Citub0luZGVudD0gc2lsbHlWYWx1ZSA7ICdub3RoZXIgc2lsbHkgY29tbWVudAorCisjIGVtcHR5IGxpbmUKKwkJOyBjb21tZW50CitbbmV4dFNlY3Rpb25dCisJTm9OZXdMaW5lID0gd293MiBmb3IgbWUKK1sxMjM0NTZdCisJYTEyMyA9IDk4NworW1ZlcnNpb24gIjEuMi4zZVgiXQorCUFscGhhID0gYmV0YQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hpZXJhcmNoaWNhbCBzZWN0aW9uIHZhbHVlJyAnCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2JldGEubm9pbmRlbnQ9c2lsbHlWYWx1ZQorbmV4dHNlY3Rpb24ubm9uZXdsaW5lPXdvdzIgZm9yIG1lCisxMjM0NTYuYTEyMz05ODcKK3ZlcnNpb24uMS4yLjNlWC5hbHBoYT1iZXRhCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29ya2luZyAtLWxpc3QnICcKKwlnaXQgY29uZmlnIC0tbGlzdCA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxpc3Qgd2l0aG91dCByZXBvIHByb2R1Y2VzIGVtcHR5IG91dHB1dCcgJworCWdpdCAtLWdpdC1kaXI9bm9uZXhpc3RlbnQgY29uZmlnIC0tbGlzdCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitiZXRhLm5vaW5kZW50CituZXh0c2VjdGlvbi5ub25ld2xpbmUKKzEyMzQ1Ni5hMTIzCit2ZXJzaW9uLjEuMi4zZVguYWxwaGEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5hbWUtb25seSAtLWxpc3QnICcKKwlnaXQgY29uZmlnIC0tbmFtZS1vbmx5IC0tbGlzdCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitiZXRhLm5vaW5kZW50IHNpbGx5VmFsdWUKK25leHRzZWN0aW9uLm5vbmV3bGluZSB3b3cyIGZvciBtZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ2V0LXJlZ2V4cCcgJworCWdpdCBjb25maWcgLS1nZXQtcmVnZXhwIGluID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2JldGEubm9pbmRlbnQKK25leHRzZWN0aW9uLm5vbmV3bGluZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbmFtZS1vbmx5IC0tZ2V0LXJlZ2V4cCcgJworCWdpdCBjb25maWcgLS1uYW1lLW9ubHkgLS1nZXQtcmVnZXhwIGluID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK3dvdzIgZm9yIG1lCit3b3c0IGZvciB5b3UKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFkZCcgJworCWdpdCBjb25maWcgLS1hZGQgbmV4dHNlY3Rpb24ubm9uZXdsaW5lICJ3b3c0IGZvciB5b3UiICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgbmV4dHNlY3Rpb24ubm9uZXdsaW5lID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPiAuZ2l0L2NvbmZpZyA8PCBFT0YKK1tub3ZhbHVlXQorCXZhcmlhYmxlCitbZW1wdHl2YWx1ZV0KKwl2YXJpYWJsZSA9CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IHZhcmlhYmxlIHdpdGggbm8gdmFsdWUnICcKKwlnaXQgY29uZmlnIC0tZ2V0IG5vdmFsdWUudmFyaWFibGUgXiQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IHZhcmlhYmxlIHdpdGggZW1wdHkgdmFsdWUnICcKKwlnaXQgY29uZmlnIC0tZ2V0IGVtcHR5dmFsdWUudmFyaWFibGUgXiQKKycKKworZWNobyBub3ZhbHVlLnZhcmlhYmxlID4gZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldC1yZWdleHAgdmFyaWFibGUgd2l0aCBubyB2YWx1ZScgJworCWdpdCBjb25maWcgLS1nZXQtcmVnZXhwIG5vdmFsdWUgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK2VjaG8gJ25vdmFsdWUudmFyaWFibGUgdHJ1ZScgPiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0LXJlZ2V4cCAtLWJvb2wgdmFyaWFibGUgd2l0aCBubyB2YWx1ZScgJworCWdpdCBjb25maWcgLS1ib29sIC0tZ2V0LXJlZ2V4cCBub3ZhbHVlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitlY2hvICdlbXB0eXZhbHVlLnZhcmlhYmxlICcgPiBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0LXJlZ2V4cCB2YXJpYWJsZSB3aXRoIGVtcHR5IHZhbHVlJyAnCisJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgZW1wdHl2YWx1ZSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworZWNobyB0cnVlID4gZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBib29sIHZhcmlhYmxlIHdpdGggbm8gdmFsdWUnICcKKwlnaXQgY29uZmlnIC0tYm9vbCBub3ZhbHVlLnZhcmlhYmxlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCitlY2hvIGZhbHNlID4gZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBib29sIHZhcmlhYmxlIHdpdGggZW1wdHkgdmFsdWUnICcKKwlnaXQgY29uZmlnIC0tYm9vbCBlbXB0eXZhbHVlLnZhcmlhYmxlID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBhcmd1bWVudHMsIGJ1dCBubyBjcmFzaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgPm91dHB1dCAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCB1c2FnZSBvdXRwdXQKKycKKworY2F0ID4gLmdpdC9jb25maWcgPDwgRU9GCitbYS5iXQorCWMgPSBkCitFT0YKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2EuYl0KKwljID0gZAorW2FdCisJeCA9IHkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZXcgc2VjdGlvbiBpcyBwYXJ0aWFsIG1hdGNoIG9mIGFub3RoZXInICcKKwlnaXQgY29uZmlnIGEueCB5ICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK1thLmJdCisJYyA9IGQKK1thXQorCXggPSB5CisJYiA9IGMKK1tiXQorCXggPSB5CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHZhcmlhYmxlIGluc2VydHMgaW50byBwcm9wZXIgc2VjdGlvbicgJworCWdpdCBjb25maWcgYi54IHkgJiYKKwlnaXQgY29uZmlnIGEuYiBjICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsdGVybmF0aXZlIC0tZmlsZSAobm9uLWV4aXN0aW5nIGZpbGUgc2hvdWxkIGZhaWwpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWZpbGUgbm9uLWV4aXN0aW5nLWNvbmZpZyAtbAorJworCitjYXQgPiBvdGhlci1jb25maWcgPDwgRU9GCitbZWluXQorCWJhaG4gPSBzdHJhc3NlCitFT0YKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorZWluLmJhaG49c3RyYXNzZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsdGVybmF0aXZlIEdJVF9DT05GSUcnICcKKwlHSVRfQ09ORklHPW90aGVyLWNvbmZpZyBnaXQgY29uZmlnIC0tbGlzdCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHRlcm5hdGl2ZSBHSVRfQ09ORklHICgtLWZpbGUpJyAnCisJZ2l0IGNvbmZpZyAtLWZpbGUgb3RoZXItY29uZmlnIC0tbGlzdCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHRlcm5hdGl2ZSBHSVRfQ09ORklHICgtLWZpbGU9LSknICcKKwlnaXQgY29uZmlnIC0tZmlsZSAtIC0tbGlzdCA8b3RoZXItY29uZmlnID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgYSB2YWx1ZSBpbiBzdGRpbiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1maWxlIC0gc29tZS52YWx1ZSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdGluZyBzdGRpbiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1maWxlIC0gLS1lZGl0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmVyIGNvbmZpZyBmcm9tIHN1YmRpcmVjdG9yeScgJworCW1rZGlyIHggJiYKKwkoCisJCWNkIHggJiYKKwkJZWNobyBzdHJhc3NlID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyAtLWdldCAtLWZpbGUgLi4vb3RoZXItY29uZmlnIGVpbi5iYWhuID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZlciBjb25maWcgZnJvbSBzdWJkaXJlY3RvcnkgdmlhIC0tZmlsZScgJworCSgKKwkJY2QgeCAmJgorCQlnaXQgY29uZmlnIC0tZmlsZT0uLi9vdGhlci1jb25maWcgLS1nZXQgZWluLmJhaG4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitbZWluXQorCWJhaG4gPSBzdHJhc3NlCitbYW53b2huZXJdCisJcGFyayA9IGF1c3dlaXMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldCBpbiBhbHRlcm5hdGl2ZSBmaWxlJyAnCisJZ2l0IGNvbmZpZyAtLWZpbGU9b3RoZXItY29uZmlnIGFud29obmVyLnBhcmsgYXVzd2VpcyAmJgorCXRlc3RfY21wIGV4cGVjdCBvdGhlci1jb25maWcKKycKKworY2F0ID4gLmdpdC9jb25maWcgPDwgRU9GCisjIEhhbGxvCisJI0JlbGxvCitbYnJhbmNoICJlaW5zIl0KKwl4ID0gMQorW2JyYW5jaC5laW5zXQorCXkgPSAxCisJW2JyYW5jaCAiMSAyMzQgYmxhYmwvYSJdCit3ZWlyZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBzZWN0aW9uJyAnCisJZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC5laW5zIGJyYW5jaC56d2VpCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKyMgSGFsbG8KKwkjQmVsbG8KK1ticmFuY2ggInp3ZWkiXQorCXggPSAxCitbYnJhbmNoICJ6d2VpIl0KKwl5ID0gMQorCVticmFuY2ggIjEgMjM0IGJsYWJsL2EiXQord2VpcmQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgc3VjY2VlZGVkJyAnCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBub24tZXhpc3Rpbmcgc2VjdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBcCisJCWJyYW5jaC4id29ybGQgZG9taW5hdGlvbiIgYnJhbmNoLmRyZWkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHN1Y2NlZWRlZCcgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgYW5vdGhlciBzZWN0aW9uJyAnCisJZ2l0IGNvbmZpZyAtLXJlbmFtZS1zZWN0aW9uIGJyYW5jaC4iMSAyMzQgYmxhYmwvYSIgYnJhbmNoLmRyZWkKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorIyBIYWxsbworCSNCZWxsbworW2JyYW5jaCAiendlaSJdCisJeCA9IDEKK1ticmFuY2ggInp3ZWkiXQorCXkgPSAxCitbYnJhbmNoICJkcmVpIl0KK3dlaXJkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHN1Y2NlZWRlZCcgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCitjYXQgPj4gLmdpdC9jb25maWcgPDwgRU9GCitbYnJhbmNoICJ2aWVyIl0geiA9IDEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgYSBzZWN0aW9uIHdpdGggYSB2YXIgb24gdGhlIHNhbWUgbGluZScgJworCWdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2gudmllciBicmFuY2guendlaQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisjIEhhbGxvCisJI0JlbGxvCitbYnJhbmNoICJ6d2VpIl0KKwl4ID0gMQorW2JyYW5jaCAiendlaSJdCisJeSA9IDEKK1ticmFuY2ggImRyZWkiXQord2VpcmQKK1ticmFuY2ggInp3ZWkiXQorCXogPSAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHN1Y2NlZWRlZCcgJworCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWluZyBlbXB0eSBzZWN0aW9uIG5hbWUgaXMgcmVqZWN0ZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24gYnJhbmNoLnp3ZWkgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1pbmcgdG8gYm9ndXMgc2VjdGlvbiBpcyByZWplY3RlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1yZW5hbWUtc2VjdGlvbiBicmFuY2guendlaSAiYm9ndXMgbmFtZSIKKycKKworY2F0ID4+IC5naXQvY29uZmlnIDw8IEVPRgorICBbYnJhbmNoICJ6d2VpIl0gYSA9IDEgW2JyYW5jaCAidmllciJdCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHNlY3Rpb24nICcKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gYnJhbmNoLnp3ZWkKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorIyBIYWxsbworCSNCZWxsbworW2JyYW5jaCAiZHJlaSJdCit3ZWlyZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlY3Rpb24gd2FzIHJlbW92ZWQgcHJvcGVybHknICcKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW2dpdGN2c10KKwllbmFibGVkID0gdHJ1ZQorCWRibmFtZSA9ICVHZ2l0Y3ZzMi4lYS4lbS5zcWxpdGUKK1tnaXRjdnMgImV4dCJdCisJZGJuYW1lID0gJUdnaXRjdnMxLiVhLiVtLnNxbGl0ZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlY3Rpb24gZW5kaW5nJyAnCisJcm0gLWYgLmdpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIGdpdGN2cy5lbmFibGVkIHRydWUgJiYKKwlnaXQgY29uZmlnIGdpdGN2cy5leHQuZGJuYW1lICVHZ2l0Y3ZzMS4lYS4lbS5zcWxpdGUgJiYKKwlnaXQgY29uZmlnIGdpdGN2cy5kYm5hbWUgJUdnaXRjdnMyLiVhLiVtLnNxbGl0ZSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgbnVtYmVycyAnCisJZ2l0IGNvbmZpZyBraWxvLmdyYW0gMWsgJiYKKwlnaXQgY29uZmlnIG1lZ2EudG9uIDFtICYmCisJZWNobyAxMDI0ID5leHBlY3QgJiYKKwllY2hvIDEwNDg1NzYgPj5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0taW50IC0tZ2V0IGtpbG8uZ3JhbSA+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWludCAtLWdldCBtZWdhLnRvbiA+PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pbnQgaXMgYXQgbGVhc3QgNjQgYml0cycgJworCWdpdCBjb25maWcgZ2lnYS53YXR0cyAxMjFnICYmCisJZWNobyAxMjk5MjI3NjA3MDQgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1pbnQgLS1nZXQgZ2lnYS53YXR0cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIHVuaXQnICcKKwlnaXQgY29uZmlnIGFuaW52YWxpZC51bml0ICIxYXV0byIgJiYKKwllY2hvIDFhdXRvID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIGFuaW52YWxpZC51bml0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZhdGFsOiBiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUgJ1wnJzFhdXRvJ1wnJyBmb3IgJ1wnJ2FuaW52YWxpZC51bml0J1wnJyBpbiAuZ2l0L2NvbmZpZzogaW52YWxpZCB1bml0CisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWludCAtLWdldCBhbmludmFsaWQudW5pdCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK3RydWUKK2ZhbHNlCit0cnVlCitmYWxzZQordHJ1ZQorZmFsc2UKK3RydWUKK2ZhbHNlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBib29sICcKKworCWdpdCBjb25maWcgYm9vbC50cnVlMSAwMSAmJgorCWdpdCBjb25maWcgYm9vbC50cnVlMiAtMSAmJgorCWdpdCBjb25maWcgYm9vbC50cnVlMyBZZVMgJiYKKwlnaXQgY29uZmlnIGJvb2wudHJ1ZTQgdHJ1ZSAmJgorCWdpdCBjb25maWcgYm9vbC5mYWxzZTEgMDAwICYmCisJZ2l0IGNvbmZpZyBib29sLmZhbHNlMiAiIiAmJgorCWdpdCBjb25maWcgYm9vbC5mYWxzZTMgbk8gJiYKKwlnaXQgY29uZmlnIGJvb2wuZmFsc2U0IEZBTFNFICYmCisJcm0gLWYgcmVzdWx0ICYmCisJZm9yIGkgaW4gMSAyIDMgNAorCWRvCisJICAgIGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGJvb2wudHJ1ZSRpID4+cmVzdWx0CisJICAgIGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGJvb2wuZmFsc2UkaSA+PnJlc3VsdAorICAgICAgICBkb25lICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlc3VsdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBib29sICgtLWdldCknICcKKworCWdpdCBjb25maWcgYm9vbC5ub2Jvb2wgZm9vYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQgYm9vbC5ub2Jvb2wnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgYm9vbCAoc2V0KScgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC5ub2Jvb2wgZm9vYmFyJworCitjYXQgPiBleHBlY3QgPDxcRU9GCitbYm9vbF0KKwl0cnVlMSA9IHRydWUKKwl0cnVlMiA9IHRydWUKKwl0cnVlMyA9IHRydWUKKwl0cnVlNCA9IHRydWUKKwlmYWxzZTEgPSBmYWxzZQorCWZhbHNlMiA9IGZhbHNlCisJZmFsc2UzID0gZmFsc2UKKwlmYWxzZTQgPSBmYWxzZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCAtLWJvb2wnICcKKworCXJtIC1mIC5naXQvY29uZmlnICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC50cnVlMSAwMSAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wudHJ1ZTIgLTEgJiYKKwlnaXQgY29uZmlnIC0tYm9vbCBib29sLnRydWUzIFllUyAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wudHJ1ZTQgdHJ1ZSAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wuZmFsc2UxIDAwMCAmJgorCWdpdCBjb25maWcgLS1ib29sIGJvb2wuZmFsc2UyICIiICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgYm9vbC5mYWxzZTMgbk8gJiYKKwlnaXQgY29uZmlnIC0tYm9vbCBib29sLmZhbHNlNCBGQUxTRSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZycKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorW2ludF0KKwl2YWwxID0gMQorCXZhbDIgPSAtMQorCXZhbDMgPSA1MjQyODgwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IC0taW50JyAnCisKKwlybSAtZiAuZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgLS1pbnQgaW50LnZhbDEgMDEgJiYKKwlnaXQgY29uZmlnIC0taW50IGludC52YWwyIC0xICYmCisJZ2l0IGNvbmZpZyAtLWludCBpbnQudmFsMyA1bSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgLS1ib29sLW9yLWludCcgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtib29sXQorCXRydWUxCisJdHJ1ZTIgPSB0cnVlCisJZmFsc2UgPSBmYWxzZQorCVtpbnRdCisJaW50MSA9IDAKKwlpbnQyID0gMQorCWludDMgPSAtMQorCUVPRgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl0cnVlCisJdHJ1ZQorCWZhbHNlCisJMAorCTEKKwktMQorCUVPRgorCXsKKwkJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wudHJ1ZTEgJiYKKwkJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wudHJ1ZTIgJiYKKwkJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGJvb2wuZmFsc2UgJiYKKwkJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGludC5pbnQxICYmCisJCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MiAmJgorCQlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDMKKwl9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorW2Jvb2xdCisJdHJ1ZTEgPSB0cnVlCisJZmFsc2UxID0gZmFsc2UKKwl0cnVlMiA9IHRydWUKKwlmYWxzZTIgPSBmYWxzZQorW2ludF0KKwlpbnQxID0gMAorCWludDIgPSAxCisJaW50MyA9IC0xCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IC0tYm9vbC1vci1pbnQnICcKKwlybSAtZiAuZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBib29sLnRydWUxIHRydWUgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC5mYWxzZTEgZmFsc2UgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC50cnVlMiB5ZXMgJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgYm9vbC5mYWxzZTIgbm8gJiYKKwlnaXQgY29uZmlnIC0tYm9vbC1vci1pbnQgaW50LmludDEgMCAmJgorCWdpdCBjb25maWcgLS1ib29sLW9yLWludCBpbnQuaW50MiAxICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wtb3ItaW50IGludC5pbnQzIC0xICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorW3BhdGhdCisJaG9tZSA9IH4vCisJbm9ybWFsID0gL2Rldi9udWxsCisJdHJhaWxpbmd0aWxkZSA9IGZvb34KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnc2V0IC0tcGF0aCcgJworCXJtIC1mIC5naXQvY29uZmlnICYmCisJZ2l0IGNvbmZpZyAtLXBhdGggcGF0aC5ob21lICJ+LyIgJiYKKwlnaXQgY29uZmlnIC0tcGF0aCBwYXRoLm5vcm1hbCAiL2Rldi9udWxsIiAmJgorCWdpdCBjb25maWcgLS1wYXRoIHBhdGgudHJhaWxpbmd0aWxkZSAiZm9vfiIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9jb25maWcnCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXICYmIHRlc3QgIiR7SE9NRStzZXR9IgordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBIT01FVkFSCitmaQorCitjYXQgPmV4cGVjdCA8PEVPRgorJEhPTUUvCisvZGV2L251bGwKK2Zvb34KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEhPTUVWQVIgJ2dldCAtLXBhdGgnICcKKwlnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLmhvbWUgPiByZXN1bHQgJiYKKwlnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLm5vcm1hbCA+PiByZXN1bHQgJiYKKwlnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLnRyYWlsaW5ndGlsZGUgPj4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlc3VsdAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKy9kZXYvbnVsbAorZm9vfgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdnZXQgLS1wYXRoIGNvcGVzIHdpdGggdW5zZXQgJEhPTUUnICcKKwkoCisJCXVuc2V0IEhPTUU7CisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgLS1wYXRoIHBhdGguaG9tZSBcCisJCQk+cmVzdWx0IDI+bXNnICYmCisJCWdpdCBjb25maWcgLS1nZXQgLS1wYXRoIHBhdGgubm9ybWFsID4+cmVzdWx0ICYmCisJCWdpdCBjb25maWcgLS1nZXQgLS1wYXRoIHBhdGgudHJhaWxpbmd0aWxkZSA+PnJlc3VsdAorCSkgJiYKKwlncmVwICJbRmZdYWlsZWQgdG8gZXhwYW5kLip+LyIgbXNnICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgLS1wYXRoIGJhcmZzIG9uIGJvb2xlYW4gdmFyaWFibGUnICcKKwllY2hvICJbcGF0aF1ib29sIiA+LmdpdC9jb25maWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0IC0tcGF0aCBwYXRoLmJvb2wKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorW3F1b3RlXQorCWxlYWRpbmcgPSAiIHRlc3QiCisJZW5kaW5nID0gInRlc3QgIgorCXNlbWljb2xvbiA9ICJ0ZXN0O3Rlc3QiCisJaGFzaCA9ICJ0ZXN0I3Rlc3QiCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RpbmcnICcKKwlybSAtZiAuZ2l0L2NvbmZpZyAmJgorCWdpdCBjb25maWcgcXVvdGUubGVhZGluZyAiIHRlc3QiICYmCisJZ2l0IGNvbmZpZyBxdW90ZS5lbmRpbmcgInRlc3QgIiAmJgorCWdpdCBjb25maWcgcXVvdGUuc2VtaWNvbG9uICJ0ZXN0O3Rlc3QiICYmCisJZ2l0IGNvbmZpZyBxdW90ZS5oYXNoICJ0ZXN0I3Rlc3QiICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tleSB3aXRoIG5ld2xpbmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnICJrZXkud2l0aAorbmV3bGluZSIgMTIzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWx1ZSB3aXRoIG5ld2xpbmUnICdnaXQgY29uZmlnIGtleS5zdWIgdmFsdWUud2l0aFxcXAorbmV3bGluZScKKworY2F0ID4gLmdpdC9jb25maWcgPDxcRU9GCitbc2VjdGlvbl0KKwk7IGNvbW1lbnQgXAorCWNvbnRpbnVlZCA9IGNvbnRcCitpbnVlZAorCW5vbmNvbnQgICA9IG5vdCBjb250aW51ZWQgOyBcCisJcXVvdGVjb250ID0gImNvbnQ7XAoraW51ZWQiCitFT0YKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorc2VjdGlvbi5jb250aW51ZWQ9Y29udGludWVkCitzZWN0aW9uLm5vbmNvbnQ9bm90IGNvbnRpbnVlZAorc2VjdGlvbi5xdW90ZWNvbnQ9Y29udDtpbnVlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbHVlIGNvbnRpbnVlZCBvbiBuZXh0IGxpbmUnICcKKwlnaXQgY29uZmlnIC0tbGlzdCA+IHJlc3VsdCAmJgorCXRlc3RfY21wIHJlc3VsdCBleHBlY3QKKycKKworY2F0ID4gLmdpdC9jb25maWcgPDxcRU9GCitbc2VjdGlvbiAic3ViPXNlY3Rpb24iXQorCXZhbDEgPSBmb289YmFyCisJdmFsMiA9IGZvb1xuYmFyCisJdmFsMyA9IFxuXG4KKwl2YWw0ID0KKwl2YWw1CitFT0YKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorc2VjdGlvbi5zdWI9c2VjdGlvbi52YWwxCitmb289YmFyUXNlY3Rpb24uc3ViPXNlY3Rpb24udmFsMgorZm9vCitiYXJRc2VjdGlvbi5zdWI9c2VjdGlvbi52YWwzCisKKworUXNlY3Rpb24uc3ViPXNlY3Rpb24udmFsNAorUXNlY3Rpb24uc3ViPXNlY3Rpb24udmFsNVEKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1udWxsIC0tbGlzdCcgJworCWdpdCBjb25maWcgLS1udWxsIC0tbGlzdCB8IG51bF90b19xID5yZXN1bHQgJiYKKwllY2hvID4+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW51bGwgLS1nZXQtcmVnZXhwJyAnCisJZ2l0IGNvbmZpZyAtLW51bGwgLS1nZXQtcmVnZXhwICJ2YWxbMC05XSIgfCBudWxfdG9fcSA+cmVzdWx0ICYmCisJZWNobyA+PnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5uZXIgd2hpdGVzcGFjZSBrZXB0IHZlcmJhdGltJyAnCisJZ2l0IGNvbmZpZyBzZWN0aW9uLnZhbCAiZm9vIAkgIGJhciIgJiYKKwllY2hvICJmb28gCSAgYmFyIiA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBzZWN0aW9uLnZhbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rZWQgY29uZmlndXJhdGlvbicgJworCWxuIC1zIG5vdHlldCBteWNvbmZpZyAmJgorCWdpdCBjb25maWcgLS1maWxlPW15Y29uZmlnIHRlc3QuZnJvdHogbml0Zm9sICYmCisJdGVzdCAtaCBteWNvbmZpZyAmJgorCXRlc3QgLWYgbm90eWV0ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyAtLWZpbGU9bm90eWV0IHRlc3QuZnJvdHopIiA9IHpuaXRmb2wgJiYKKwlnaXQgY29uZmlnIC0tZmlsZT1teWNvbmZpZyB0ZXN0Lnh5enp5IHJlenJvdiAmJgorCXRlc3QgLWggbXljb25maWcgJiYKKwl0ZXN0IC1mIG5vdHlldCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwluaXRmb2wKKwlyZXpyb3YKKwlFT0YKKwl7CisJCWdpdCBjb25maWcgLS1maWxlPW5vdHlldCB0ZXN0LmZyb3R6ICYmCisJCWdpdCBjb25maWcgLS1maWxlPW5vdHlldCB0ZXN0Lnh5enp5CisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25leGlzdGVudCBjb25maWd1cmF0aW9uJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWZpbGU9ZG9lc25vdGV4aXN0IC0tbGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1maWxlPWRvZXNub3RleGlzdCB0ZXN0Lnh5enp5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N5bWxpbmsgdG8gbm9uZXhpc3RlbnQgY29uZmlndXJhdGlvbicgJworCWxuIC1zIGRvZXNub3RleGlzdCBsaW5rdG9uYWRhICYmCisJbG4gLXMgbGlua3RvbmFkYSBsaW5rdG9saW5rdG9uYWRhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWZpbGU9bGlua3RvbmFkYSAtLWxpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZmlsZT1saW5rdG9saW5rdG9uYWRhIC0tbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGxpdF9jbWRsaW5lIHJldHVybicgIgorCWdpdCBjb25maWcgYWxpYXMuc3BsaXQtY21kbGluZS1maXggJ2VjaG8gXCInICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNwbGl0LWNtZGxpbmUtZml4ICYmCisJZWNobyBmb28gPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gJ2luaXRpYWwgY29tbWl0JyAmJgorCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgJ2VjaG8gXCInICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlcgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgImtleT12YWx1ZSIgc3VwcG9ydCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl2YWx1ZQorCXZhbHVlCisJdHJ1ZQorCUVPRgorCXsKKwkJZ2l0IC1jIGNvcmUubmFtZT12YWx1ZSBjb25maWcgY29yZS5uYW1lICYmCisJCWdpdCAtYyBmb28uQ2FtZWxDYXNlPXZhbHVlIGNvbmZpZyBmb28uY2FtZWxjYXNlICYmCisJCWdpdCAtYyBmb28uZmxhZyBjb25maWcgLS1ib29sIGZvby5mbGFnCisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBuYW1lPXZhbHVlIGNvbmZpZyBjb3JlLm5hbWUKKycKKworIyBXZSBqdXN0IG5lZWQgYSB0eXBlLXNwZWNpZmllciBoZXJlIHRoYXQgY2FyZXMgYWJvdXQgdGhlCisjIGRpc3RpbmN0aW9uIGludGVybmFsbHkgYmV0d2VlbiBhIE5VTEwgYm9vbGVhbiBhbmQgYSByZWFsCisjIHN0cmluZyAoYmVjYXVzZSBtb3N0IG9mIGdpdCdzIGludGVybmFsIHBhcnNlcnMgZG8gY2FyZSkuCisjIFVzaW5nICItLXBhdGgiIHdvcmtzLCBidXQgd2UgZG8gbm90IG90aGVyd2lzZSBjYXJlIGFib3V0CisjIGl0cyBzZW1hbnRpY3MuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgY2FuIHJlcHJlc2VudCBlbXB0eSBzdHJpbmcnICcKKwllY2hvID5leHBlY3QgJiYKKwlnaXQgLWMgZm9vLmVtcHR5PSBjb25maWcgLS1wYXRoIGZvby5lbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXkgc2FuaXR5LWNoZWNraW5nJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb289YmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb289LmJhciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgZm9vLmJhPXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGZvby4xYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb28uImJhCisJCQkJeiIuYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAuIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAuZm9vIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBmb28uIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAuZm9vLiBmYWxzZSAmJgorCWdpdCBjb25maWcgZm9vLmJhciB0cnVlICYmCisJZ2l0IGNvbmZpZyBmb28uImJhID16Ii5iYXIgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIHdvcmtzIHdpdGggYWxpYXNlcyBvZiBidWlsdGlucycgJworCWdpdCBjb25maWcgYWxpYXMuY2hlY2tjb25maWcgIi1jIGZvby5jaGVjaz1iYXIgY29uZmlnIGZvby5jaGVjayIgJiYKKwllY2hvIGJhciA+ZXhwZWN0ICYmCisJZ2l0IGNoZWNrY29uZmlnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtYyBkb2VzIG5vdCBzcGxpdCB2YWx1ZXMgb24gZXF1YWxzJyAnCisJZWNobyAidmFsdWUgd2l0aCA9IGluIGl0IiA+ZXhwZWN0ICYmCisJZ2l0IC1jIGNvcmUuZm9vPSJ2YWx1ZSB3aXRoID0gaW4gaXQiIGNvbmZpZyBjb3JlLmZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgZGllcyBvbiBib2d1cyBjb25maWcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgY29yZS5iYXJlPWZvbyByZXYtcGFyc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IC1jIGNvbXBsYWlucyBhYm91dCBlbXB0eSBrZXknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgIj1mb28iIHJldi1wYXJzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWMgY29tcGxhaW5zIGFib3V0IGVtcHR5IGtleSBhbmQgdmFsdWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgIiIgcmV2LXBhcnNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb25maWcgLS1lZGl0IHdvcmtzJyAnCisJZ2l0IGNvbmZpZyAtZiB0bXAgdGVzdC52YWx1ZSBubyAmJgorCWVjaG8gdGVzdC52YWx1ZT15ZXMgPmV4cGVjdCAmJgorCUdJVF9FRElUT1I9ImVjaG8gW3Rlc3RddmFsdWU9eWVzID4iIGdpdCBjb25maWcgLWYgdG1wIC0tZWRpdCAmJgorCWdpdCBjb25maWcgLWYgdG1wIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29uZmlnIC0tZWRpdCByZXNwZWN0cyBjb3JlLmVkaXRvcicgJworCWdpdCBjb25maWcgLWYgdG1wIHRlc3QudmFsdWUgbm8gJiYKKwllY2hvIHRlc3QudmFsdWU9eWVzID5leHBlY3QgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLmVkaXRvciAiZWNobyBbdGVzdF12YWx1ZT15ZXMgPiIgJiYKKwlnaXQgY29uZmlnIC1mIHRtcCAtLWVkaXQgJiYKKwlnaXQgY29uZmlnIC1mIHRtcCAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBtYWxmb3JtZWQgY29uZmlndXJhdGlvbiBmaWxlcwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZiBvbiBzeW50YXggZXJyb3InICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwkjIGJyb2tlbiBzZWN0aW9uIGxpbmUKKwlbc2VjdGlvbl0KKwlrZXkgZ2FyYmFnZQorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgc2VjdGlvbi5rZXkgPmFjdHVhbCAyPmVycm9yICYmCisJZ3JlcCAiIGxpbmUgMyAiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JhcmYgb24gaW5jb21wbGV0ZSBzZWN0aW9uIGhlYWRlcicgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCSMgYnJva2VuIHNlY3Rpb24gbGluZQorCVtzZWN0aW9uCisJa2V5ID0gdmFsdWUKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0IHNlY3Rpb24ua2V5ID5hY3R1YWwgMj5lcnJvciAmJgorCWdyZXAgIiBsaW5lIDIgIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJmIG9uIGluY29tcGxldGUgc3RyaW5nJyAnCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJIyBicm9rZW4gc2VjdGlvbiBsaW5lCisJW3NlY3Rpb25dCisJa2V5ID0gInZhbHVlIHN0cmluZworCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQgc2VjdGlvbi5rZXkgPmFjdHVhbCAyPmVycm9yICYmCisJZ3JlcCAiIGxpbmUgMyAiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VybG1hdGNoJyAnCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW2h0dHBdCisJCXNzbFZlcmlmeQorCVtodHRwICJodHRwczovL3dlYWsuZXhhbXBsZS5jb20iXQorCQlzc2xWZXJpZnkgPSBmYWxzZQorCQljb29raWVGaWxlID0gL3RtcC9jb29raWUudHh0CisJRU9GCisKKwllY2hvIHRydWUgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1ib29sIC0tZ2V0LXVybG1hdGNoIGh0dHAuU1NMdmVyaWZ5IGh0dHBzOi8vZ29vZC5leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyBmYWxzZSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWJvb2wgLS1nZXQtdXJsbWF0Y2ggaHR0cC5zc2x2ZXJpZnkgaHR0cHM6Ly93ZWFrLmV4YW1wbGUuY29tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl7CisJCWVjaG8gaHR0cC5jb29raWVmaWxlIC90bXAvY29va2llLnR4dCAmJgorCQllY2hvIGh0dHAuc3NsdmVyaWZ5IGZhbHNlCisJfSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC11cmxtYXRjaCBIVFRQIGh0dHBzOi8vd2Vhay5leGFtcGxlLmNvbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIGdvb2Qgc2VjdGlvbiBoeWdpZW5lCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd1bnNldHRpbmcgdGhlIGxhc3Qga2V5IGluIGEgc2VjdGlvbiByZW1vdmVzIGhlYWRlcicgJworCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCSMgc29tZSBnZW5lcmljIGNvbW1lbnQgb24gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpdHNlbGYKKwkjIGEgY29tbWVudCBzcGVjaWZpYyB0byB0aGlzICJzZWN0aW9uIiBzZWN0aW9uLgorCVtzZWN0aW9uXQorCSMgc29tZSBpbnRlcnZlbmluZyBsaW5lcworCSMgdGhhdCBzaG91bGQgYWxzbyBiZSBkcm9wcGVkCisKKwlrZXkgPSB2YWx1ZQorCSMgcGxlYXNlIGJlIGNhcmVmdWwgd2hlbiB5b3UgdXBkYXRlIHRoZSBhYm92ZSB2YXJpYWJsZQorCUVPRgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSMgc29tZSBnZW5lcmljIGNvbW1lbnQgb24gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpdHNlbGYKKwlFT0YKKworCWdpdCBjb25maWcgLS11bnNldCBzZWN0aW9uLmtleSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdhZGRpbmcgYSBrZXkgaW50byBhbiBlbXB0eSBzZWN0aW9uIHJldXNlcyBoZWFkZXInICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YgJiYKKwlbc2VjdGlvbl0KKwlFT0YKKworCXFfdG9fdGFiID5leHBlY3QgPDwtXEVPRiAmJgorCVtzZWN0aW9uXQorCVFrZXkgPSB2YWx1ZQorCUVPRgorCisJZ2l0IGNvbmZpZyBzZWN0aW9uLmtleSB2YWx1ZSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxQRVJMICdwcmVzZXJ2ZXMgZXhpc3RpbmcgcGVybWlzc2lvbnMnICcKKwljaG1vZCAwNjAwIC5naXQvY29uZmlnICYmCisJZ2l0IGNvbmZpZyBpbWFwLnBhc3MgSHVudGVyMiAmJgorCXBlcmwgLWUgXAorCSAgImRpZSBxKGJhZHNldCkgaWYgKChzdGF0KHEoLmdpdC9jb25maWcpKSlbMl0gJiAwNzc3NykgIT0gMDYwMCIgJiYKKwlnaXQgY29uZmlnIC0tcmVuYW1lLXNlY3Rpb24gaW1hcCBwb3AgJiYKKwlwZXJsIC1lIFwKKwkgICJkaWUgcShiYWRyZW5hbWUpIGlmICgoc3RhdChxKC5naXQvY29uZmlnKSkpWzJdICYgMDc3NzcpICE9IDA2MDAiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwMS1zaGFyZWQtcmVwby5zaCBiL3QvdDEzMDEtc2hhcmVkLXJlcG8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWMxMDg3NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDEtc2hhcmVkLXJlcG8uc2gKQEAgLTAsMCArMSwxNzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHNoYXJlZCByZXBvc2l0b3J5IGluaXRpYWxpemF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworIyBSZW1vdmUgYSBkZWZhdWx0IEFDTCBmcm9tIHRoZSB0ZXN0IGRpciBpZiBwb3NzaWJsZS4KK3NldGZhY2wgLWsgLiAyPi9kZXYvbnVsbAorCisjIFVzZXIgbXVzdCBoYXZlIHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIHJlcG8gLT4gZmFpbHVyZSBvbiAtLXNoYXJlZD0wNDAwCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFyZWQgPSAwNDAwIChmYXVsdHkgcGVybWlzc2lvbiB1LXcpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgc3ViIiAmJgorCW1rZGlyIHN1YiAmJiAoCisJCWNkIHN1YiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgaW5pdCAtLXNoYXJlZD0wNDAwCisJKQorJworCittb2RlYml0cyAoKSB7CisJbHMgLWwgIiQxIiB8IHNlZCAtZSAnc3xeXCguLi4uLi4uLi4uXCkuKnxcMXwnCit9CisKK2ZvciB1IGluIDAwMiAwMjIKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gInNoYXJlZD0xIGRvZXMgbm90IGNsZWFyIGJpdHMgcHJlc2V0IGJ5IHVtYXNrICR1IiAnCisJCW1rZGlyIHN1YiAmJiAoCisJCQljZCBzdWIgJiYKKwkJCXVtYXNrICR1ICYmCisJCQlnaXQgaW5pdCAtLXNoYXJlZD0xICYmCisJCQl0ZXN0IDEgPSAiJChnaXQgY29uZmlnIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSkiCisJCSkgJiYKKwkJYWN0dWFsPSQobHMgLWwgc3ViLy5naXQvSEVBRCkgJiYKKwkJY2FzZSAiJGFjdHVhbCIgaW4KKwkJLXJ3LXJ3LXItLSopCisJCQk6IGhhcHB5CisJCQk7OworCQkqKQorCQkJZWNobyBPb3BzLCAuZ2l0L0hFQUQgaXMgbm90IDA2NjQgYnV0ICRhY3R1YWwKKwkJCWZhbHNlCisJCQk7OworCQllc2FjCisJJworCXJtIC1yZiBzdWIKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hhcmVkPWFsbCcgJworCW1rZGlyIHN1YiAmJgorCWNkIHN1YiAmJgorCWdpdCBpbml0IC0tc2hhcmVkPWFsbCAmJgorCXRlc3QgMiA9ICQoZ2l0IGNvbmZpZyBjb3JlLnNoYXJlZHJlcG9zaXRvcnkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd1cGRhdGUtc2VydmVyLWluZm8gaG9ub3JzIGNvcmUuc2hhcmVkUmVwb3NpdG9yeScgJworCTogPiBhMSAmJgorCWdpdCBhZGQgYTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGExICYmCisJdW1hc2sgMDI3NyAmJgorCWdpdCB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwlhY3R1YWw9IiQobHMgLWwgLmdpdC9pbmZvL3JlZnMpIiAmJgorCWNhc2UgIiRhY3R1YWwiIGluCisJLXItLXItLXItLSopCisJCTogaGFwcHkKKwkJOzsKKwkqKQorCQllY2hvIE9vcHMsIC5naXQvaW5mby9yZWZzIGlzIG5vdCAwNDQ0CisJCWZhbHNlCisJCTs7CisJZXNhYworJworCitmb3IgdSBpbgkwNjYwOnJ3LXJ3LS0tLSBcCisJCTA2NDA6cnctci0tLS0tIFwKKwkJMDYwMDpydy0tLS0tLS0gXAorCQkwNjY2OnJ3LXJ3LXJ3LSBcCisJCTA2NjQ6cnctcnctci0tCitkbworCXg9JChleHByICIkdSIgOiAiLio6XChbcnctXSpcKSIpICYmCisJeT0kKGVjaG8gIiR4IiB8IHNlZCAtZSAicy93Ly0vZyIpICYmCisJdT0kKGV4cHIgIiR1IiA6ICJcKFswLTddKlwpIikgJiYKKwlnaXQgY29uZmlnIGNvcmUuc2hhcmVkcmVwb3NpdG9yeSAiJHUiICYmCisJdW1hc2sgMDI3NyAmJgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gInNoYXJlZCA9ICR1ICgkeSkgcm8iICcKKworCQlybSAtZiAuZ2l0L2luZm8vcmVmcyAmJgorCQlnaXQgdXBkYXRlLXNlcnZlci1pbmZvICYmCisJCWFjdHVhbD0iJChtb2RlYml0cyAuZ2l0L2luZm8vcmVmcykiICYmCisJCXZlcmJvc2UgdGVzdCAieCRhY3R1YWwiID0gIngtJHkiCisKKwknCisKKwl1bWFzayAwNzcgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAic2hhcmVkID0gJHUgKCR4KSBydyIgJworCisJCXJtIC1mIC5naXQvaW5mby9yZWZzICYmCisJCWdpdCB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwkJYWN0dWFsPSIkKG1vZGViaXRzIC5naXQvaW5mby9yZWZzKSIgJiYKKwkJdmVyYm9zZSB0ZXN0ICJ4JGFjdHVhbCIgPSAieC0keCIKKworCScKKworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnaW5mby9yZWZzIHJlc3BlY3RzIHVtYXNrIGluIHVuc2hhcmVkIHJlcG8nICcKKwlybSAtZiAuZ2l0L2luZm8vcmVmcyAmJgorCXRlc3RfdW5jb25maWcgY29yZS5zaGFyZWRyZXBvc2l0b3J5ICYmCisJdW1hc2sgMDAyICYmCisJZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyAmJgorCWVjaG8gIi1ydy1ydy1yLS0iID5leHBlY3QgJiYKKwltb2RlYml0cyAuZ2l0L2luZm8vcmVmcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnZ2l0IHJlZmxvZyBleHBpcmUgaG9ub3JzIGNvcmUuc2hhcmVkUmVwb3NpdG9yeScgJworCXVtYXNrIDA3NyAmJgorCWdpdCBjb25maWcgY29yZS5zaGFyZWRSZXBvc2l0b3J5IGdyb3VwICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1hbGwgJiYKKwlhY3R1YWw9IiQobHMgLWwgLmdpdC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyKSIgJiYKKwljYXNlICIkYWN0dWFsIiBpbgorCS1ydy1ydy0qKQorCQk6IGhhcHB5CisJCTs7CisJKikKKwkJZWNobyBPb29wcywgLmdpdC9sb2dzL3JlZnMvaGVhZHMvbWFzdGVyIGlzIG5vdCAwNjYyIFskYWN0dWFsXQorCQlmYWxzZQorCQk7OworCWVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ2ZvcmNlZCBtb2RlcycgJworCW1rZGlyIC1wIHRlbXBsYXRlcy9ob29rcyAmJgorCWVjaG8gdXBkYXRlLXNlcnZlci1pbmZvID50ZW1wbGF0ZXMvaG9va3MvcG9zdC11cGRhdGUgJiYKKwljaG1vZCAreCB0ZW1wbGF0ZXMvaG9va3MvcG9zdC11cGRhdGUgJiYKKwllY2hvIDogPnJhbmRvbS1maWxlICYmCisJbWtkaXIgbmV3ICYmCisJKAorCQljZCBuZXcgJiYKKwkJdW1hc2sgMDAyICYmCisJCWdpdCBpbml0IC0tc2hhcmVkPTA2NjAgLS10ZW1wbGF0ZT0uLi90ZW1wbGF0ZXMgJiYKKwkJPmZyb3R6ICYmCisJCWdpdCBhZGQgZnJvdHogJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBpbml0aWFsICYmCisJCWdpdCByZXBhY2sKKwkpICYmCisJIyBMaXN0IHJlcG9zaXRvcnkgZmlsZXMgbWVhbnQgdG8gYmUgcHJvdGVjdGVkOyBub3RlIHRoYXQKKwkjIENPTU1JVF9FRElUTVNHIGRvZXMgbm90IG1hdHRlci0tLTBtb2RlIGlzIG5vdCBhYm91dCBhCisJIyByZXBvc2l0b3J5IHdpdGggYSB3b3JrIHRyZWUuCisJZmluZCBuZXcvLmdpdCAtdHlwZSBmIC1uYW1lIENPTU1JVF9FRElUTVNHIC1wcnVuZSAtbyAtcHJpbnQgfAorCXhhcmdzIGxzIC1sZCA+YWN0dWFsICYmCisKKwkjIEV2ZXJ5dGhpbmcgbXVzdCBiZSB1bmFjY2Vzc2libGUgdG8gb3RoZXJzCisJdGVzdCAteiAiJChzZWQgLWUgIi9eLi4uLi4uLi0tLS9kIiBhY3R1YWwpIiAmJgorCisJIyBBbGwgZGlyZWN0b3JpZXMgbXVzdCBoYXZlIGVpdGhlciAyNzcwIG9yIDc3MAorCXRlc3QgLXogIiQoc2VkIC1uIC1lICIvXmRyd3hyd1tzeF0tLS0vZCIgLWUgIi9eZC9wIiBhY3R1YWwpIiAmJgorCisJIyBwb3N0LXVwZGF0ZSBob29rIG11c3QgYmUgMDc3MAorCXRlc3QgLXogIiQoc2VkIC1uIC1lICIvcG9zdC11cGRhdGUveworCQkvXi1yd3hyd3gtLS0vZAorCQlwCisJfSIgYWN0dWFsKSIgJiYKKworCSMgQWxsIGZpbGVzIGluc2lkZSBvYmplY3RzIG11c3QgYmUgYWNjZXNzaWJsZSBieSB1cworCXRlc3QgLXogIiQoc2VkIC1uIC1lICIvb2JqZWN0c1wvL3sKKwkJL15kL2QKKwkJL14tci4tci4tLS0tL2QKKwkJcAorCX0iIGFjdHVhbCkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwMi1yZXBvLXZlcnNpb24uc2ggYi90L3QxMzAyLXJlcG8tdmVyc2lvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YmNkMzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwMi1yZXBvLXZlcnNpb24uc2gKQEAgLTAsMCArMSwxMzAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgTmd1eeG7hW4gVGjDoWkgTmfhu41jIER1eQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlcG9zaXRvcnkgdmVyc2lvbiBjaGVjaycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY2F0ID50ZXN0LnBhdGNoIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvdGVzdC50eHQgYi90ZXN0LnR4dAorCW5ldyBmaWxlIG1vZGUgMTAwNjQ0CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3Rlc3QudHh0CisJQEAgLTAsMCArMSBAQAorCSsxMjMKKwlFT0YKKworCXRlc3RfY3JlYXRlX3JlcG8gInRlc3QiICYmCisJdGVzdF9jcmVhdGVfcmVwbyAidGVzdDIiICYmCisJZ2l0IGNvbmZpZyAtLWZpbGU9dGVzdDIvLmdpdC9jb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA5OQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgc2VsZWN0aW9uIG9uIG5vcm1hbCByZXBvcycgJworCWVjaG8gMCA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uID5hY3R1YWwgJiYKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLnJlcG9zaXRvcnlmb3JtYXR2ZXJzaW9uID4uLi9hY3R1YWwyCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRkaXIgc2VsZWN0aW9uIG9uIHVuc3VwcG9ydGVkIHJlcG8nICcKKwkjIE1ha2Ugc3VyZSBpdCB3b3VsZCBzdG9wIGF0IHRlc3QyLCBub3QgdHJhc2gKKwllY2hvIDk5ID5leHBlY3QgJiYKKwkoCisJCWNkIHRlc3QyICYmCisJCWdpdCBjb25maWcgY29yZS5yZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIG5vdCByZXF1aXJlZCBtb2RlJyAnCisJZ2l0IGFwcGx5IC0tc3RhdCB0ZXN0LnBhdGNoICYmCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBhcHBseSAtLXN0YXQgLi4vdGVzdC5wYXRjaAorCSkgJiYKKwkoCisJCWNkIHRlc3QyICYmCisJCWdpdCBhcHBseSAtLXN0YXQgLi4vdGVzdC5wYXRjaAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0ZGlyIHJlcXVpcmVkIG1vZGUnICcKKwlnaXQgYXBwbHkgLS1jaGVjayAtLWluZGV4IHRlc3QucGF0Y2ggJiYKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IGFwcGx5IC0tY2hlY2sgLS1pbmRleCAuLi90ZXN0LnBhdGNoCisJKSAmJgorCSgKKwkJY2QgdGVzdDIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2hlY2sgLS1pbmRleCAuLi90ZXN0LnBhdGNoCisJKQorJworCitjaGVja19hbGxvdyAoKSB7CisJZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIgPmFjdHVhbCAmJgorCWVjaG8gLmdpdCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCitjaGVja19hYm9ydCAoKSB7CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIKK30KKworIyBhdm9pZCBnaXQtY29uZmlnLCBzaW5jZSBpdCBjYW5ub3QgYmUgdHJ1c3RlZCB0byBydW4KKyMgaW4gYSByZXBvc2l0b3J5IHdpdGggYSBicm9rZW4gdmVyc2lvbgorbWtjb25maWcgKCkgeworCWVjaG8gJ1tjb3JlXScgJiYKKwllY2hvICJyZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA9ICQxIiAmJgorCXNoaWZ0ICYmCisKKwlpZiB0ZXN0ICQjIC1ndCAwOyB0aGVuCisJCWVjaG8gJ1tleHRlbnNpb25zXScgJiYKKwkJZm9yIGkgaW4gIiRAIjsgZG8KKwkJCWVjaG8gIiRpIgorCQlkb25lCisJZmkKK30KKword2hpbGUgcmVhZCBvdXRjb21lIHZlcnNpb24gZXh0ZW5zaW9uczsgZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkb3V0Y29tZSB2ZXJzaW9uPSR2ZXJzaW9uICRleHRlbnNpb25zIiAiCisJCW1rY29uZmlnICR2ZXJzaW9uICRleHRlbnNpb25zID4uZ2l0L2NvbmZpZyAmJgorCQljaGVja18ke291dGNvbWV9CisJIgorZG9uZSA8PFxFT0YKK2FsbG93IDAKK2FsbG93IDEKK2FsbG93IDEgbm9vcAorYWJvcnQgMSBuby1zdWNoLWV4dGVuc2lvbgorYWxsb3cgMCBuby1zdWNoLWV4dGVuc2lvbgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWNpb3VzLW9iamVjdHMgYWxsb3dlZCcgJworCW1rY29uZmlnIDEgcHJlY2lvdXNPYmplY3RzID4uZ2l0L2NvbmZpZyAmJgorCWNoZWNrX2FsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWNpb3VzLW9iamVjdHMgYmxvY2tzIGRlc3RydWN0aXZlIHJlcGFjaycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXBhY2sgLWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ290aGVyIHJlcGFja3MgYXJlIE9LJyAnCisJdGVzdF9jb21taXQgZm9vICYmCisJZ2l0IHJlcGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVjaW91cy1vYmplY3RzIGJsb2NrcyBwcnVuZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBwcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyBydW5zIHdpdGhvdXQgY29tcGxhaW50JyAnCisJZ2l0IGdjCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwMy13YWNreS1jb25maWcuc2ggYi90L3QxMzAzLXdhY2t5LWNvbmZpZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjkyMDgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTMwMy13YWNreS1jb25maWcuc2gKQEAgLTAsMCArMSwxMzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHdhY2t5IGlucHV0IHRvIGdpdCBjb25maWcnCisuIC4vdGVzdC1saWIuc2gKKworIyBMZWF2aW5nIG9mZiB0aGUgbmV3bGluZSBpcyBpbnRlbnRpb25hbCEKK3NldHVwKCkgeworCShwcmludGYgIltzZWN0aW9uXVxuIiAmJgorCXByaW50ZiAiICBrZXkgPSBmb28iKSA+LmdpdC9jb25maWcKK30KKworIyAnY2hlY2sgc2VjdGlvbi5rZXkgdmFsdWUnIHZlcmlmaWVzIHRoYXQgdGhlIGVudHJ5IGZvciBzZWN0aW9uLmtleSBpcworIyAndmFsdWUnCitjaGVjaygpIHsKKwllY2hvICIkMiIgPmV4cGVjdGVkCisJZ2l0IGNvbmZpZyAtLWdldCAiJDEiID5hY3R1YWwgMj4mMQorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorfQorCisjICdjaGVjayBzZWN0aW9uLmtleSByZWdleCB2YWx1ZScgdmVyaWZpZXMgdGhhdCB0aGUgZW50cnkgZm9yCisjIHNlY3Rpb24ua2V5ICp0aGF0IG1hdGNoZXMgJ3JlZ2V4JyogaXMgJ3ZhbHVlJworY2hlY2tfcmVnZXgoKSB7CisJZWNobyAiJDMiID5leHBlY3RlZAorCWdpdCBjb25maWcgLS1nZXQgIiQxIiAiJDIiID5hY3R1YWwgMj4mMQorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkgc2FtZSBrZXknICcKKwlzZXR1cCAmJgorCWdpdCBjb25maWcgc2VjdGlvbi5rZXkgYmFyICYmCisJY2hlY2sgc2VjdGlvbi5rZXkgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBrZXkgaW4gc2FtZSBzZWN0aW9uJyAnCisJc2V0dXAgJiYKKwlnaXQgY29uZmlnIHNlY3Rpb24ub3RoZXIgYmFyICYmCisJY2hlY2sgc2VjdGlvbi5rZXkgZm9vICYmCisJY2hlY2sgc2VjdGlvbi5vdGhlciBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGtleSBpbiBkaWZmZXJlbnQgc2VjdGlvbicgJworCXNldHVwICYmCisJZ2l0IGNvbmZpZyBzZWN0aW9uMi5rZXkgYmFyICYmCisJY2hlY2sgc2VjdGlvbi5rZXkgZm9vICYmCisJY2hlY2sgc2VjdGlvbjIua2V5IGJhcgorJworCitTRUNUSU9OPSJ0ZXN0LnFcInNcXHNxJ3NwIGUua2V5IgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBzdXJlIGdpdCBjb25maWcgZXNjYXBlcyBzZWN0aW9uIG5hbWVzIHByb3Blcmx5JyAnCisJZ2l0IGNvbmZpZyAiJFNFQ1RJT04iIGJhciAmJgorCWNoZWNrICIkU0VDVElPTiIgYmFyCisnCisKK0xPTkdfVkFMVUU9JChwcmludGYgInglMDEwMjFkeCBhIiA3KQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGNyYXNoIG9uIHNwZWNpYWwgbG9uZyBjb25maWcgbGluZScgJworCXNldHVwICYmCisJZ2l0IGNvbmZpZyBzZWN0aW9uLmtleSAiJExPTkdfVkFMVUUiICYmCisJY2hlY2sgc2VjdGlvbi5rZXkgIiRMT05HX1ZBTFVFIgorJworCitzZXR1cF9tYW55KCkgeworCXNldHVwICYmCisJIyBUaGlzIHRpbWUgd2Ugd2FudCB0aGUgbmV3bGluZSBzbyB0aGF0IHdlIGNhbiB0YWNrIG9uIG1vcmUKKwkjIGVudHJpZXMuCisJZWNobyA+Pi5naXQvY29uZmlnICYmCisJIyBTZW1pLWVmZmljaWVudCB3YXkgb2YgY29uY2F0ZW5hdGluZyA1XjUgPSAzMTI1IGxpbmVzLiBOb3RlCisJIyB0aGF0IGJlY2F1c2UgJ3NldHVwJyBhbHJlYWR5IHB1dCBvbmUgbGluZSwgdGhpcyBtZWFucyAzMTI2CisJIyBlbnRyaWVzIGZvciBzZWN0aW9uLmtleSBpbiB0aGUgY29uZmlnIGZpbGUuCisJY2F0ID41dG8xIDw8LVxFT0YgJiYKKwkgIGtleSA9IGZvbworCSAga2V5ID0gZm9vCisJICBrZXkgPSBmb28KKwkgIGtleSA9IGZvbworCSAga2V5ID0gZm9vCisJRU9GCisJY2F0IDV0bzEgNXRvMSA1dG8xIDV0bzEgNXRvMSA+NXRvMiAmJgkgICAjIDI1CisJY2F0IDV0bzIgNXRvMiA1dG8yIDV0bzIgNXRvMiA+NXRvMyAmJgkgICAjIDEyNQorCWNhdCA1dG8zIDV0bzMgNXRvMyA1dG8zIDV0bzMgPjV0bzQgJiYJICAgIyA2MzUKKwljYXQgNXRvNCA1dG80IDV0bzQgNXRvNCA1dG80ID4+LmdpdC9jb25maWcgIyAzMTI1Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBtYW55IGVudHJpZXMnICcKKwlzZXR1cF9tYW55ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgc2VjdGlvbi5rZXkgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMxMjYgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCBtYW55IGVudHJpZXMgYnkgcmVnZXgnICcKKwlzZXR1cF9tYW55ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInNlYy4qa2UuIiA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMzEyNiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFuZCByZXBsYWNlIG9uZSBvZiBtYW55IGVudHJpZXMnICcKKwlzZXR1cF9tYW55ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzZWN0aW9uLmtleSBiYXIgJiYKKwljaGVja19yZWdleCBzZWN0aW9uLmtleSAiYi4qciIgYmFyICYmCisJZ2l0IGNvbmZpZyBzZWN0aW9uLmtleSBiZWVyICJiLipyIiAmJgorCWNoZWNrX3JlZ2V4IHNlY3Rpb24ua2V5ICJiLipyIiBiZWVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2UgbWFueSBlbnRyaWVzJyAnCisJc2V0dXBfbWFueSAmJgorCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBzZWN0aW9uLmtleSBiYXIgJiYKKwljaGVjayBzZWN0aW9uLmtleSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zZXQgbWFueSBlbnRyaWVzJyAnCisJc2V0dXBfbWFueSAmJgorCWdpdCBjb25maWcgLS11bnNldC1hbGwgc2VjdGlvbi5rZXkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIHNlY3Rpb24ua2V5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWRkIGFwcGVuZHMgbmV3IHZhbHVlIGFmdGVyIGV4aXN0aW5nIGVtcHR5IHZhbHVlJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCisKKwlmb29sCisJcm9sbAorCUVPRgorCWNwIC5naXQvY29uZmlnIC5naXQvY29uZmlnLm9sZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9jb25maWcub2xkIC5naXQvY29uZmlnIiAmJgorCWNhdCA+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtmb29dCisJCWJhegorCQliYXogPQorCQliYXogPSBmb29sCisJRU9GCisJZ2l0IGNvbmZpZyAtLWFkZCBmb28uYmF6IHJvbGwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBmb28uYmF6ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwNC1kZWZhdWx0LWFjbC5zaCBiL3QvdDEzMDQtZGVmYXVsdC1hY2wuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjU0MjJmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDQtZGVmYXVsdC1hY2wuc2gKQEAgLTAsMCArMSw2NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBNYXR0aGlldSBNb3kKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZXBvc2l0b3J5IHdpdGggZGVmYXVsdCBBQ0wnCisKKyMgQ3JlYXRlIHRoZSB0ZXN0IHJlcG8gd2l0aCByZXN0cmljdGl2ZSB1bWFzaworIyA9PiB0aGlzIG11c3QgY29tZSBiZWZvcmUgLiAuL3Rlc3QtbGliLnNoCit1bWFzayAwNzcKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgV2UgbmVlZCBhbiBhcmJpdHJhcnkgb3RoZXIgdXNlciBnaXZlIHBlcm1pc3Npb24gdG8gdXNpbmcgQUNMcy4gcm9vdAorIyBpcyBhIGdvb2QgY2FuZGlkYXRlOiBleGlzdHMgb24gYWxsIHVuaWNlcywgYW5kIGl0IGhhcyBwZXJtaXNzaW9uCisjIGFueXdheSwgc28gd2UgZG9uJ3QgY3JlYXRlIGEgc2VjdXJpdHkgaG9sZSBydW5uaW5nIHRoZSB0ZXN0c3VpdGUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyBmb3IgYSB3b3JraW5nIGFjbCBzZXR1cCcgJworCWlmIHNldGZhY2wgLW0gZDptOnJ3eCAtbSB1OnJvb3Q6cnd4IC4gJiYKKwkgICBnZXRmYWNsIC4gfCBncmVwIHVzZXI6cm9vdDpyd3ggJiYKKwkgICB0b3VjaCBzaG91bGQtaGF2ZS1yZWFkYWJsZS1hY2wgJiYKKwkgICBnZXRmYWNsIHNob3VsZC1oYXZlLXJlYWRhYmxlLWFjbCB8IGVncmVwICJtYXNrOjo/cnctIgorCXRoZW4KKwkJdGVzdF9zZXRfcHJlcmVxIFNFVEZBQ0wKKwlmaQorJworCitpZiB0ZXN0IC16ICIkTE9HTkFNRSIKK3RoZW4KKwlMT0dOQU1FPSIke1VTRVI6LSQoaWQgLXUgLW4pfSIKK2ZpCisKK2NoZWNrX3Blcm1zX2FuZF9hY2wgKCkgeworCXRlc3QgLXIgIiQxIiAmJgorCWdldGZhY2wgIiQxIiA+IGFjdHVhbCAmJgorCWdyZXAgLXEgInVzZXI6cm9vdDpyd3giIGFjdHVhbCAmJgorCWdyZXAgLXEgInVzZXI6JHtMT0dOQU1FfTpyd3giIGFjdHVhbCAmJgorCWVncmVwICJtYXNrOjo/ci0tIiBhY3R1YWwgPiAvZGV2L251bGwgMj4mMSAmJgorCWdyZXAgLXEgImdyb3VwOjotLS0iIGFjdHVhbCB8fCBmYWxzZQorfQorCitkaXJzX3RvX3NldD0iLi8gLmdpdC8gLmdpdC9vYmplY3RzLyAuZ2l0L29iamVjdHMvcGFjay8iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0VURkFDTCAnU2V0dXAgdGVzdCByZXBvJyAnCisJc2V0ZmFjbCAtbSBkOnU6OnJ3eCxkOmc6Oi0tLSxkOm86LS0tLGQ6bTpyd3ggJGRpcnNfdG9fc2V0ICYmCisJc2V0ZmFjbCAtbSBtOnJ3eCAgICAgICAgICAgICAgICRkaXJzX3RvX3NldCAmJgorCXNldGZhY2wgLW0gdTpyb290OnJ3eCAgICAgICAgICAkZGlyc190b19zZXQgJiYKKwlzZXRmYWNsIC1tIGQ6dToiJExPR05BTUUiOnJ3eCAgJGRpcnNfdG9fc2V0ICYmCisJc2V0ZmFjbCAtbSBkOnU6cm9vdDpyd3ggICAgICAgICRkaXJzX3RvX3NldCAmJgorCisJdG91Y2ggZmlsZS50eHQgJiYKKwlnaXQgYWRkIGZpbGUudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTRVRGQUNMICdPYmplY3RzIGNyZWF0aW9uIGRvZXMgbm90IGJyZWFrIEFDTHMgd2l0aCByZXN0cmljdGl2ZSB1bWFzaycgJworCSMgU0hBMSBmb3IgZW1wdHkgYmxvYgorCWNoZWNrX3Blcm1zX2FuZF9hY2wgLmdpdC9vYmplY3RzL2U2LzlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0VURkFDTCAnZ2l0IGdjIGRvZXMgbm90IGJyZWFrIEFDTHMgd2l0aCByZXN0cmljdGl2ZSB1bWFzaycgJworCWdpdCBnYyAmJgorCWNoZWNrX3Blcm1zX2FuZF9hY2wgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwNS1jb25maWctaW5jbHVkZS5zaCBiL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWJhMmJhMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDEzMDUtY29uZmlnLWluY2x1ZGUuc2gKQEAgLTAsMCArMSwxNzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNvbmZpZyBmaWxlIGluY2x1ZGUgZGlyZWN0aXZlcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNsdWRlIGZpbGUgYnkgYWJzb2x1dGUgcGF0aCcgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gXCIkKHB3ZCkvb25lXCIiID4uZ2l0Y29uZmlnICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3Qub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY2x1ZGUgZmlsZSBieSByZWxhdGl2ZSBwYXRoJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBvbmUiID4uZ2l0Y29uZmlnICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3Qub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYWluZWQgcmVsYXRpdmUgcGF0aHMnICcKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvICJbdGVzdF10aHJlZSA9IDMiID5zdWJkaXIvdGhyZWUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gdGhyZWUiID5zdWJkaXIvdHdvICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IHN1YmRpci90d28iID4uZ2l0Y29uZmlnICYmCisJZWNobyAzID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3QudGhyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jbHVkZSBwYXRocyBnZXQgdGlsZGUtZXhwYW5zaW9uJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSB+L29uZSIgPi5naXRjb25maWcgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jbHVkZSBvcHRpb25zIGNhbiBzdGlsbCBiZSBleGFtaW5lZCcgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gb25lIiA+LmdpdGNvbmZpZyAmJgorCWVjaG8gb25lID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIGluY2x1ZGUucGF0aCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIGluY2x1ZGVzIG9wdGlvbiBhbmQgZXhwYW5zaW9uJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBvbmUiID4uZ2l0Y29uZmlnICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWluY2x1ZGUucGF0aD1vbmUKKwl0ZXN0Lm9uZT0xCisJRU9GCisJZ2l0IGNvbmZpZyAtLWxpc3QgPmFjdHVhbC5mdWxsICYmCisJZ3JlcCAtdiBeY29yZSBhY3R1YWwuZnVsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgZmlsZSBsb29rdXAgZG9lcyBub3QgZXhwYW5kIGluY2x1ZGVzIGJ5IGRlZmF1bHQnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IG9uZSIgPi5naXRjb25maWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRjb25maWcgdGVzdC5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2xvYmFsIHRlc3Qub25lICYmCisJZWNobyAxID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0taW5jbHVkZXMgLWYgLmdpdGNvbmZpZyB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgZmlsZSBsaXN0IGRvZXMgbm90IGV4cGFuZCBpbmNsdWRlcyBieSBkZWZhdWx0JyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gIltpbmNsdWRlXXBhdGggPSBvbmUiID4uZ2l0Y29uZmlnICYmCisJZWNobyAiaW5jbHVkZS5wYXRoPW9uZSIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLWYgLmdpdGNvbmZpZyAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyBjb25maWcgZmlsZSBkb2VzIG5vdCBleHBhbmQgaW5jbHVkZXMnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aCA9IG9uZSIgPi5naXRjb25maWcgJiYKKwlnaXQgY29uZmlnIHRlc3QudHdvIDIgJiYKKwllY2hvIDIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1uby1pbmNsdWRlcyB0ZXN0LnR3byA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1uby1pbmNsdWRlcyB0ZXN0Lm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgbW9kaWZpY2F0aW9uIGRvZXMgbm90IGFmZmVjdCBpbmNsdWRlcycgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoID0gb25lIiA+LmdpdGNvbmZpZyAmJgorCWdpdCBjb25maWcgdGVzdC5vbmUgMiAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtZiBvbmUgdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJMQorCTIKKwlFT0YKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIGluY2x1ZGUgZmlsZXMgYXJlIGlnbm9yZWQnICcKKwljYXQgPi5naXRjb25maWcgPDwtXEVPRiAmJgorCVtpbmNsdWRlXXBhdGggPSBmb28KKwlbdGVzdF12YWx1ZSA9IHllcworCUVPRgorCWVjaG8geWVzID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIHRlc3QudmFsdWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgaW5jbHVkZXMgZnJvbSBjb21tYW5kIGxpbmUgd29yaycgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCAtYyBpbmNsdWRlLnBhdGg9IiQocHdkKS9vbmUiIGNvbmZpZyB0ZXN0Lm9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBpbmNsdWRlcyBmcm9tIGNvbW1hbmQgbGluZSBmYWlsJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBpbmNsdWRlLnBhdGg9b25lIGNvbmZpZyB0ZXN0Lm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnNvbHV0ZSBpbmNsdWRlcyBmcm9tIGJsb2JzIHdvcmsnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aD0kKHB3ZCkvb25lIiA+YmxvYiAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgYmxvYikgJiYKKwllY2hvIDEgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1ibG9iPSRibG9iIHRlc3Qub25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbGF0aXZlIGluY2x1ZGVzIGZyb20gYmxvYnMgZmFpbCcgJworCWVjaG8gIlt0ZXN0XW9uZSA9IDEiID5vbmUgJiYKKwllY2hvICJbaW5jbHVkZV1wYXRoPW9uZSIgPmJsb2IgJiYKKwlibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGJsb2IpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9JGJsb2IgdGVzdC5vbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgaW5jbHVkZXMgZnJvbSBzdGRpbiB3b3JrJyAnCisJZWNobyAiW3Rlc3Rdb25lID0gMSIgPm9uZSAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aD1cIiQocHdkKS9vbmVcIiIgfAorCWdpdCBjb25maWcgLS1maWxlIC0gdGVzdC5vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgaW5jbHVkZXMgZnJvbSBzdGRpbiBsaW5lIGZhaWwnICcKKwllY2hvICJbdGVzdF1vbmUgPSAxIiA+b25lICYmCisJZWNobyAiW2luY2x1ZGVdcGF0aD1vbmUiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZmlsZSAtIHRlc3Qub25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY2x1ZGUgY3ljbGVzIGFyZSBkZXRlY3RlZCcgJworCWNhdCA+LmdpdGNvbmZpZyA8PC1cRU9GICYmCisJW3Rlc3RddmFsdWUgPSBnaXRjb25maWcKKwlbaW5jbHVkZV1wYXRoID0gY3ljbGUKKwlFT0YKKwljYXQgPmN5Y2xlIDw8LVxFT0YgJiYKKwlbdGVzdF12YWx1ZSA9IGN5Y2xlCisJW2luY2x1ZGVdcGF0aCA9IC5naXRjb25maWcKKwlFT0YKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZ2l0Y29uZmlnCisJY3ljbGUKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCB0ZXN0LnZhbHVlIDI+c3RkZXJyICYmCisJZ3JlcCAiZXhjZWVkZWQgbWF4aW11bSBpbmNsdWRlIGRlcHRoIiBzdGRlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxMzA2LXhkZy1maWxlcy5zaCBiL3QvdDEzMDYteGRnLWZpbGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhiMTRhYjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzA2LXhkZy1maWxlcy5zaApAQCAtMCwwICsxLDE5NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBWYWxlbnRpbiBEdXBlcnJheSwgTHVjaWVuIEtvbmcsIEZyYW5jayBKb25hcywKKyMJCSAgICAgVGhvbWFzIE5ndXksIEtob2kgTmd1eWVuCisjCQkgICAgIEdyZW5vYmxlIElOUCBFbnNpbWFnCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J0NvbXBhdGliaWxpdHkgd2l0aCAkWERHX0NPTkZJR19IT01FL2dpdC8gZmlsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIGNvbmZpZzogeGRnIGZpbGUgZXhpc3RzIGFuZCB+Ly5naXRjb25maWcgZG9lc24nXCcndCcgJworCW1rZGlyIC1wIC5jb25maWcvZ2l0ICYmCisJZWNobyAiW2FsaWFzXSIgPi5jb25maWcvZ2l0L2NvbmZpZyAmJgorCWVjaG8gIglteWFsaWFzID0gIWVjaG8gaW5fY29uZmlnIiA+Pi5jb25maWcvZ2l0L2NvbmZpZyAmJgorCWVjaG8gaW5fY29uZmlnID5leHBlY3RlZCAmJgorCWdpdCBteWFsaWFzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkIGNvbmZpZzogeGRnIGZpbGUgZXhpc3RzIGFuZCB+Ly5naXRjb25maWcgZXhpc3RzJyAnCisJPi5naXRjb25maWcgJiYKKwllY2hvICJbYWxpYXNdIiA+LmdpdGNvbmZpZyAmJgorCWVjaG8gIglteWFsaWFzID0gIWVjaG8gaW5fZ2l0Y29uZmlnIiA+Pi5naXRjb25maWcgJiYKKwllY2hvIGluX2dpdGNvbmZpZyA+ZXhwZWN0ZWQgJiYKKwlnaXQgbXlhbGlhcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCB3aXRoIC0tZ2V0OiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBkb2VzbidcJyd0JyAnCisJcm0gLmdpdGNvbmZpZyAmJgorCWVjaG8gIlt1c2VyXSIgPi5jb25maWcvZ2l0L2NvbmZpZyAmJgorCWVjaG8gIgluYW1lID0gcmVhZF9jb25maWciID4+LmNvbmZpZy9naXQvY29uZmlnICYmCisJZWNobyByZWFkX2NvbmZpZyA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIC0tZ2V0IHVzZXIubmFtZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyIkWERHX0NPTkZJR19IT01FIG92ZXJyaWRlcyAkSE9NRS8uY29uZmlnL2dpdCcgJworCW1rZGlyIC1wICIkSE9NRSIveGRnL2dpdCAmJgorCWVjaG8gIlt1c2VyXW5hbWUgPSBpbl94ZGciID4iJEhPTUUiL3hkZy9naXQvY29uZmlnICYmCisJZWNobyBpbl94ZGcgPmV4cGVjdGVkICYmCisJWERHX0NPTkZJR19IT01FPSIkSE9NRSIveGRnIGdpdCBjb25maWcgLS1nZXQtYWxsIHVzZXIubmFtZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQgd2l0aCAtLWdldDogeGRnIGZpbGUgZXhpc3RzIGFuZCB+Ly5naXRjb25maWcgZXhpc3RzJyAnCisJPi5naXRjb25maWcgJiYKKwllY2hvICJbdXNlcl0iID4uZ2l0Y29uZmlnICYmCisJZWNobyAiCW5hbWUgPSByZWFkX2dpdGNvbmZpZyIgPj4uZ2l0Y29uZmlnICYmCisJZWNobyByZWFkX2dpdGNvbmZpZyA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIC0tZ2V0IHVzZXIubmFtZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCB3aXRoIC0tbGlzdDogeGRnIGZpbGUgZXhpc3RzIGFuZCB+Ly5naXRjb25maWcgZG9lc24nXCcndCcgJworCXJtIC5naXRjb25maWcgJiYKKwllY2hvIHVzZXIubmFtZT1yZWFkX2NvbmZpZyA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCB3aXRoIC0tbGlzdDogeGRnIGZpbGUgZXhpc3RzIGFuZCB+Ly5naXRjb25maWcgZXhpc3RzJyAnCisJPi5naXRjb25maWcgJiYKKwllY2hvICJbdXNlcl0iID4uZ2l0Y29uZmlnICYmCisJZWNobyAiCW5hbWUgPSByZWFkX2dpdGNvbmZpZyIgPj4uZ2l0Y29uZmlnICYmCisJZWNobyB1c2VyLm5hbWU9cmVhZF9naXRjb25maWcgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldHVwJyAnCisJZ2l0IGluaXQgZ2l0ICYmCisJY2QgZ2l0ICYmCisJZWNobyBmb28gPnRvX2JlX2V4Y2x1ZGVkCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRXhjbHVzaW9uIG9mIGEgZmlsZSBpbiB0aGUgWERHIGlnbm9yZSBmaWxlJyAnCisJbWtkaXIgLXAgIiRIT01FIi8uY29uZmlnL2dpdC8gJiYKKwllY2hvIHRvX2JlX2V4Y2x1ZGVkID4iJEhPTUUiLy5jb25maWcvZ2l0L2lnbm9yZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgdG9fYmVfZXhjbHVkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJFhER19DT05GSUdfSE9NRSBvdmVycmlkZXMgJEhPTUUvLmNvbmZpZy9naXQvaWdub3JlJyAnCisJbWtkaXIgLXAgIiRIT01FIi94ZGcvZ2l0ICYmCisJZWNobyBjb250ZW50ID5leGNsdWRlZF9ieV94ZGdfb25seSAmJgorCWVjaG8gZXhjbHVkZWRfYnlfeGRnX29ubHkgPiIkSE9NRSIveGRnL2dpdC9pZ25vcmUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWFkLXRyZWUgLS1lbXB0eSIgJiYKKwkoWERHX0NPTkZJR19IT01FPSIkSE9NRS94ZGciICYmCisJIGV4cG9ydCBYREdfQ09ORklHX0hPTUUgJiYKKwkgZ2l0IGFkZCB0b19iZV9leGNsdWRlZCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGV4Y2x1ZGVkX2J5X3hkZ19vbmx5CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFeGNsdXNpb24gaW4gYm90aCBYREcgYW5kIGxvY2FsIGlnbm9yZSBmaWxlcycgJworCWVjaG8gdG9fYmVfZXhjbHVkZWQgPi5naXRpZ25vcmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIHRvX2JlX2V4Y2x1ZGVkCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRXhjbHVzaW9uIGluIGEgbm9uLVhERyBnbG9iYWwgaWdub3JlIGZpbGUnICcKKwlybSAuZ2l0aWdub3JlICYmCisJZWNobyA+IiRIT01FIi8uY29uZmlnL2dpdC9pZ25vcmUgJiYKKwllY2hvIHRvX2JlX2V4Y2x1ZGVkID4iJEhPTUUiL215X2dpdGlnbm9yZSAmJgorCWdpdCBjb25maWcgY29yZS5leGNsdWRlc2ZpbGUgIiRIT01FIi9teV9naXRpZ25vcmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIHRvX2JlX2V4Y2x1ZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNraW5nIFhERyBpZ25vcmUgZmlsZSB3aGVuIEhPTUUgaXMgdW5zZXQnICcKKwk+ZXhwZWN0ZWQgJiYKKwkoc2FuZV91bnNldCBIT01FICYmCisJIGdpdCBjb25maWcgLS11bnNldCBjb3JlLmV4Y2x1ZGVzZmlsZSAmJgorCSBnaXQgbHMtZmlsZXMgLS1leGNsdWRlLXN0YW5kYXJkIC0taWdub3JlZCA+YWN0dWFsKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVja2luZyBhdHRyaWJ1dGVzIGluIHRoZSBYREcgYXR0cmlidXRlcyBmaWxlJyAnCisJZWNobyBmb28gPmYgJiYKKwlnaXQgY2hlY2stYXR0ciAtYSBmID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgLWVxIDAgYWN0dWFsICYmCisJZWNobyAiZiBhdHRyX2YiID4iJEhPTUUiLy5jb25maWcvZ2l0L2F0dHJpYnV0ZXMgJiYKKwllY2hvICJmOiBhdHRyX2Y6IHNldCIgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrLWF0dHIgLWEgZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNraW5nIFhERyBhdHRyaWJ1dGVzIHdoZW4gSE9NRSBpcyB1bnNldCcgJworCT5leHBlY3RlZCAmJgorCShzYW5lX3Vuc2V0IEhPTUUgJiYKKwkgZ2l0IGNoZWNrLWF0dHIgLWEgZiA+YWN0dWFsKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICckWERHX0NPTkZJR19IT01FIG92ZXJyaWRlcyAkSE9NRS8uY29uZmlnL2dpdC9hdHRyaWJ1dGVzJyAnCisJbWtkaXIgLXAgIiRIT01FIi94ZGcvZ2l0ICYmCisJZWNobyAiZiBhdHRyX2Y9eGRnIiA+IiRIT01FIi94ZGcvZ2l0L2F0dHJpYnV0ZXMgJiYKKwllY2hvICJmOiBhdHRyX2Y6IHhkZyIgPmV4cGVjdGVkICYmCisJWERHX0NPTkZJR19IT01FPSIkSE9NRS94ZGciIGdpdCBjaGVjay1hdHRyIC1hIGYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVja2luZyBhdHRyaWJ1dGVzIGluIGJvdGggWERHIGFuZCBsb2NhbCBhdHRyaWJ1dGVzIGZpbGVzJyAnCisJZWNobyAiZiAtYXR0cl9mIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJmOiBhdHRyX2Y6IHVuc2V0IiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2stYXR0ciAtYSBmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVja2luZyBhdHRyaWJ1dGVzIGluIGEgbm9uLVhERyBnbG9iYWwgYXR0cmlidXRlcyBmaWxlJyAnCisJdGVzdF9taWdodF9mYWlsIHJtIC5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiZiBhdHRyX2Y9dGVzdCIgPiIkSE9NRSIvbXlfZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS5hdHRyaWJ1dGVzZmlsZSAiJEhPTUUiL215X2dpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJmOiBhdHRyX2Y6IHRlc3QiID5leHBlY3RlZCAmJgorCWdpdCBjaGVjay1hdHRyIC1hIGYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlOiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBkb2VzbidcJyd0JyAnCisJbWtkaXIgLXAgIiRIT01FIi8uY29uZmlnL2dpdCAmJgorCT4iJEhPTUUiLy5jb25maWcvZ2l0L2NvbmZpZyAmJgorCXRlc3RfbWlnaHRfZmFpbCBybSAiJEhPTUUiLy5naXRjb25maWcgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAid3JpdGVfY29uZmlnIiAmJgorCWVjaG8gIlt1c2VyXSIgPmV4cGVjdGVkICYmCisJZWNobyAiCW5hbWUgPSB3cml0ZV9jb25maWciID4+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJEhPTUUiLy5jb25maWcvZ2l0L2NvbmZpZworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dyaXRlOiB4ZGcgZmlsZSBleGlzdHMgYW5kIH4vLmdpdGNvbmZpZyBleGlzdHMnICcKKwk+IiRIT01FIi8uZ2l0Y29uZmlnICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLm5hbWUgIndyaXRlX2dpdGNvbmZpZyIgJiYKKwllY2hvICJbdXNlcl0iID5leHBlY3RlZCAmJgorCWVjaG8gIgluYW1lID0gd3JpdGVfZ2l0Y29uZmlnIiA+PmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRIT01FIi8uZ2l0Y29uZmlnCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGU6IH4vLmNvbmZpZy9naXQvIGV4aXN0cyBhbmQgY29uZmlnIGZpbGUgZG9lc24nXCcndCcgJworCXRlc3RfbWlnaHRfZmFpbCBybSAiJEhPTUUiLy5naXRjb25maWcgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgcm0gIiRIT01FIi8uY29uZmlnL2dpdC9jb25maWcgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAid3JpdGVfZ2l0Y29uZmlnIiAmJgorCWVjaG8gIlt1c2VyXSIgPmV4cGVjdGVkICYmCisJZWNobyAiCW5hbWUgPSB3cml0ZV9naXRjb25maWciID4+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJEhPTUUiLy5naXRjb25maWcKKycKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDEzMDctY29uZmlnLWJsb2Iuc2ggYi90L3QxMzA3LWNvbmZpZy1ibG9iLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjNjc5MWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzA3LWNvbmZpZy1ibG9iLnNoCkBAIC0wLDAgKzEsNzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzdXBwb3J0IGZvciByZWFkaW5nIGNvbmZpZyBmcm9tIGEgYmxvYicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgY29uZmlnIGJsb2InICcKKwljYXQgPmNvbmZpZyA8PC1cRU9GICYmCisJW3NvbWVdCisJCXZhbHVlID0gMQorCUVPRgorCWdpdCBhZGQgY29uZmlnICYmCisJZ2l0IGNvbW1pdCAtbSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdCBjb25maWcgYmxvYiBjb250ZW50cycgJworCWVjaG8gc29tZS52YWx1ZT0xID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyAtLWxpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdmFsdWUgZnJvbSBibG9iJyAnCisJZWNobyB0cnVlID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyAtLWJvb2wgc29tZS52YWx1ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkaW5nIG5vbi1leGlzdGluZyB2YWx1ZSBmcm9tIGJsb2IgaXMgYW4gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyBub24uZXhpc3RpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBmcm9tIGJsb2IgYW5kIGZpbGUgaXMgYW4gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyAtLXN5c3RlbSAtLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZGluZyBmcm9tIG1pc3NpbmcgcmVmIGlzIGFuIGVycm9yJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWJsb2I9SEVBRDpkb2Vzbm90ZXhpc3QgLS1saXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWRpbmcgZnJvbSBub24tYmxvYiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQgLS1saXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgYSB2YWx1ZSBpbiBhIGJsb2IgaXMgYW4gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tYmxvYj1IRUFEOmNvbmZpZyBzb21lLnZhbHVlIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBhIHZhbHVlIGluIGEgYmxvYiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIC0tdW5zZXQgc29tZS52YWx1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0aW5nIGEgYmxvYiBpcyBhbiBlcnJvcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIC0tZWRpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJzZSBlcnJvcnMgaW4gYmxvYnMgYXJlIHByb3Blcmx5IGF0dHJpYnV0ZWQnICcKKwljYXQgPmNvbmZpZyA8PC1cRU9GICYmCisJW3NvbWVdCisJCXZhbHVlID0gIgorCUVPRgorCWdpdCBhZGQgY29uZmlnICYmCisJZ2l0IGNvbW1pdCAtbSBicm9rZW4gJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIHNvbWUudmFsdWUgMj5lcnIgJiYKKworCSMganVzdCBncmVwIGZvciBvdXIgdG9rZW4gYXMgdGhlIGV4YWN0IGVycm9yIG1lc3NhZ2UgaXMgbGlrZWx5IHRvCisJIyBjaGFuZ2Ugb3IgYmUgaW50ZXJuYXRpb25hbGl6ZWQKKwlncmVwICJIRUFEOmNvbmZpZyIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiBwYXJzZSBibG9iIGVuZGluZyB3aXRoIENSJyAnCisJcHJpbnRmICJbc29tZV1rZXkgPSB2YWx1ZVxcciIgPmNvbmZpZyAmJgorCWdpdCBhZGQgY29uZmlnICYmCisJZ2l0IGNvbW1pdCAtbSBDUiAmJgorCWVjaG8gdmFsdWUgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1ibG9iPUhFQUQ6Y29uZmlnIHNvbWUua2V5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTMwOC1jb25maWctc2V0LnNoIGIvdC90MTMwOC1jb25maWctc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxMjM1YjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxMzA4LWNvbmZpZy1zZXQuc2gKQEAgLTAsMCArMSwyMjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCBjb25maWctc2V0IEFQSSBpbiBkaWZmZXJlbnQgc2V0dGluZ3MnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjICdjaGVja19jb25maWcgZ2V0Xyogc2VjdGlvbi5rZXkgdmFsdWUnIHZlcmlmaWVzIHRoYXQgdGhlIGVudHJ5IGZvcgorIyBzZWN0aW9uLmtleSBpcyAndmFsdWUnCitjaGVja19jb25maWcgKCkgeworCWlmIHRlc3QgIiQxIiA9IGV4cGVjdF9jb2RlCisJdGhlbgorCQlleHBlY3RfY29kZT0iJDIiICYmIHNoaWZ0ICYmIHNoaWZ0CisJZWxzZQorCQlleHBlY3RfY29kZT0wCisJZmkgJiYKKwlvcD0kMSBrZXk9JDIgJiYgc2hpZnQgJiYgc2hpZnQgJiYKKwlpZiB0ZXN0ICQjICE9IDAKKwl0aGVuCisJCXByaW50ZiAiJXNcbiIgIiRAIgorCWZpID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlICRleHBlY3RfY29kZSB0ZXN0LWNvbmZpZyAiJG9wIiAiJGtleSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGVmYXVsdCBjb25maWcnICcKKwljYXQgPi5naXQvY29uZmlnIDw8LVxFT0YKKwlbY2FzZV0KKwkJcGVuZ3VpbiA9IHZlcnkgYmx1ZQorCQlNb3ZpZSA9IEJhZFBoeXNpY3MKKwkJVVBQRVJDQVNFID0gdHJ1ZQorCQlNaXhlZENhc2UgPSB0cnVlCisJCW15ID0KKwkJZm9vCisJCWJheiA9IHNhbQorCVtDb3Jlc10KKwkJV2hhdEV2ZXIgPSBTZWNvbmQKKwkJYmF6ID0gYmFyCisJW2NvcmVzXQorCQliYXogPSBiYXQKKwlbQ09SRVNdCisJCWJheiA9IGJhbGwKKwlbbXkgIkZvbyBiQXIiXQorCQloaSA9IG1peGVkLWNhc2UKKwlbbXkgIkZPTyBCQVIiXQorCQloaSA9IHVwcGVyLWNhc2UKKwlbbXkgImZvbyBiYXIiXQorCQloaSA9IGxvd2VyLWNhc2UKKwlbY2FzZV0KKwkJYmF6ID0gYmF0CisJCWJheiA9IGhhc2sKKwlbbGFtYl0KKwkJY2hvcCA9IDY1CisJCWhlYWQgPSBub25lCisJW2dvYXRdCisJCWxlZ3MgPSA0CisJCWhlYWQgPSB0cnVlCisJCXNraW4gPSBmYWxzZQorCQlub3NlID0gMQorCQlob3JucworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgdmFsdWUgZm9yIGEgc2ltcGxlIGtleScgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY2FzZS5wZW5ndWluICJ2ZXJ5IGJsdWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCB2YWx1ZSBmb3IgYSBrZXkgd2l0aCB2YWx1ZSBhcyBhbiBlbXB0eSBzdHJpbmcnICcKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UubXkgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0IHZhbHVlIGZvciBhIGtleSB3aXRoIHZhbHVlIGFzIE5VTEwnICcKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UuZm9vICIoTlVMTCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwcGVyIGNhc2Uga2V5JyAnCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjYXNlLlVQUEVSQ0FTRSAidHJ1ZSIgJiYKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UudXBwZXJjYXNlICJ0cnVlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXhlZCBjYXNlIGtleScgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY2FzZS5NaXhlZENhc2UgInRydWUiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjYXNlLk1JWEVEQ0FTRSAidHJ1ZSIgJiYKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UubWl4ZWRjYXNlICJ0cnVlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXkgYW5kIHZhbHVlIHdpdGggbWl4ZWQgY2FzZScgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY2FzZS5Nb3ZpZSAiQmFkUGh5c2ljcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2V5IHdpdGggY2FzZSBzZW5zaXRpdmUgc3Vic2VjdGlvbicgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgIm15LkZvbyBiQXIuaGkiICJtaXhlZC1jYXNlIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgIm15LkZPTyBCQVIuaGkiICJ1cHBlci1jYXNlIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgIm15LmZvbyBiYXIuaGkiICJsb3dlci1jYXNlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXkgd2l0aCBjYXNlIGluc2Vuc2l0aXZlIHNlY3Rpb24gaGVhZGVyJyAnCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjb3Jlcy5iYXogImJhbGwiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBDb3Jlcy5iYXogImJhbGwiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBDT1JFUy5iYXogImJhbGwiICYmCisJY2hlY2tfY29uZmlnIGdldF92YWx1ZSBjb3JlUy5iYXogImJhbGwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tleSB3aXRoIGNhc2UgaW5zZW5zaXRpdmUgc2VjdGlvbiBoZWFkZXIgJiB2YXJpYWJsZScgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgQ09SRVMuQkFaICJiYWxsIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY29yZXMuYmF6ICJiYWxsIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY29yZXMuQmFaICJiYWxsIiAmJgorCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWUgY09yZVMuYkF6ICJiYWxsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHZhbHVlIHdpdGggbWlzc3BlbGxlZCBrZXknICcKKwljaGVja19jb25maWcgZXhwZWN0X2NvZGUgMSBnZXRfdmFsdWUgIm15LmZPbyBCYXIuaGkiICJWYWx1ZSBub3QgZm91bmQgZm9yIFwibXkuZk9vIEJhci5oaVwiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHZhbHVlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHknICcKKwljaGVja19jb25maWcgZ2V0X3ZhbHVlIGNhc2UuYmF6ICJoYXNrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIGludGVnZXIgdmFsdWUgZm9yIGEga2V5JyAnCisJY2hlY2tfY29uZmlnIGdldF9pbnQgbGFtYi5jaG9wIDY1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgc3RyaW5nIHZhbHVlIGZvciBhIGtleScgJworCWNoZWNrX2NvbmZpZyBnZXRfc3RyaW5nIGNhc2UuYmF6IGhhc2sgJiYKKwljaGVja19jb25maWcgZXhwZWN0X2NvZGUgMSBnZXRfc3RyaW5nIGNhc2UuYmEgIlZhbHVlIG5vdCBmb3VuZCBmb3IgXCJjYXNlLmJhXCIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGxpbmUgZXJyb3Igd2hlbiBOVUxMIHN0cmluZyBpcyBxdWVyaWVkJyAnCisJdGVzdF9leHBlY3RfY29kZSAxMjggdGVzdC1jb25maWcgZ2V0X3N0cmluZyBjYXNlLmZvbyAyPnJlc3VsdCAmJgorCXRlc3RfaTE4bmdyZXAgImZhdGFsOiAuKmNhc2VcLmZvby4qXC5naXQvY29uZmlnLipsaW5lIDciIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIGludGVnZXIgaWYgdmFsdWUgaXMgbm9uIHBhcnNlLWFibGUnICcKKwljaGVja19jb25maWcgZXhwZWN0X2NvZGUgMTI4IGdldF9pbnQgbGFtYi5oZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgYm9vbCB2YWx1ZSBmb3IgdGhlIGVudGVyZWQga2V5JyAnCisJY2hlY2tfY29uZmlnIGdldF9ib29sIGdvYXQuaGVhZCAxICYmCisJY2hlY2tfY29uZmlnIGdldF9ib29sIGdvYXQuc2tpbiAwICYmCisJY2hlY2tfY29uZmlnIGdldF9ib29sIGdvYXQubm9zZSAxICYmCisJY2hlY2tfY29uZmlnIGdldF9ib29sIGdvYXQuaG9ybnMgMSAmJgorCWNoZWNrX2NvbmZpZyBnZXRfYm9vbCBnb2F0LmxlZ3MgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIG11bHRpcGxlIHZhbHVlcycgJworCWNoZWNrX2NvbmZpZyBnZXRfdmFsdWVfbXVsdGkgY2FzZS5iYXogc2FtIGJhdCBoYXNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmQgdmFsdWUgZnJvbSBhIGNvbmZpZ3NldCcgJworCWNhdCA+Y29uZmlnMiA8PC1cRU9GICYmCisJW2Nhc2VdCisJCWJheiA9IGxhbWEKKwlbbXldCisJCW5ldyA9IHNpbGsKKwlbY2FzZV0KKwkJYmF6ID0gYmFsbAorCUVPRgorCWVjaG8gc2lsayA+ZXhwZWN0ICYmCisJdGVzdC1jb25maWcgY29uZmlnc2V0X2dldF92YWx1ZSBteS5uZXcgY29uZmlnMiAuZ2l0L2NvbmZpZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHZhbHVlIHdpdGggaGlnaGVzdCBwcmlvcml0eSBmcm9tIGEgY29uZmlnc2V0JyAnCisJZWNobyBoYXNrID5leHBlY3QgJiYKKwl0ZXN0LWNvbmZpZyBjb25maWdzZXRfZ2V0X3ZhbHVlIGNhc2UuYmF6IGNvbmZpZzIgLmdpdC9jb25maWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCB2YWx1ZV9saXN0IGZvciBhIGtleSBmcm9tIGEgY29uZmlnc2V0JyAnCisJY2F0ID5leGNlcHQgPDwtXEVPRiAmJgorCXNhbQorCWJhdAorCWhhc2sKKwlsYW1hCisJYmFsbAorCUVPRgorCXRlc3QtY29uZmlnIGNvbmZpZ3NldF9nZXRfdmFsdWUgY2FzZS5iYXogY29uZmlnMiAuZ2l0L2NvbmZpZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wZXIgZXJyb3Igb24gbm9uLWV4aXN0ZW50IGZpbGVzJyAnCisJZWNobyAiRXJyb3IgKC0xKSByZWFkaW5nIGNvbmZpZ3VyYXRpb24gZmlsZSBub24tZXhpc3RlbnQtZmlsZS4iID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDIgdGVzdC1jb25maWcgY29uZmlnc2V0X2dldF92YWx1ZSBmb28uYmFyIG5vbi1leGlzdGVudC1maWxlIDI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ3Byb3BlciBlcnJvciBvbiBub24tYWNjZXNzaWJsZSBmaWxlcycgJworCWNobW9kIC1yIC5naXQvY29uZmlnICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCArciAuZ2l0L2NvbmZpZyIgJiYKKwllY2hvICJFcnJvciAoLTEpIHJlYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlIC5naXQvY29uZmlnLiIgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiB0ZXN0LWNvbmZpZyBjb25maWdzZXRfZ2V0X3ZhbHVlIGZvby5iYXIgLmdpdC9jb25maWcgMj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb3BlciBlcnJvciBvbiBlcnJvciBpbiBkZWZhdWx0IGNvbmZpZyBmaWxlcycgJworCWNwIC5naXQvY29uZmlnIC5naXQvY29uZmlnLm9sZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAibXYgLmdpdC9jb25maWcub2xkIC5naXQvY29uZmlnIiAmJgorCWVjaG8gIlsiID4+LmdpdC9jb25maWcgJiYKKwllY2hvICJmYXRhbDogYmFkIGNvbmZpZyBmaWxlIGxpbmUgMzQgaW4gLmdpdC9jb25maWciID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCB0ZXN0LWNvbmZpZyBnZXRfdmFsdWUgZm9vLmJhciAyPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGVyIGVycm9yIG9uIGVycm9yIGluIGN1c3RvbSBjb25maWcgZmlsZXMnICcKKwllY2hvICJbIiA+PnN5bnRheC1lcnJvciAmJgorCWVjaG8gImZhdGFsOiBiYWQgY29uZmlnIGZpbGUgbGluZSAxIGluIHN5bnRheC1lcnJvciIgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IHRlc3QtY29uZmlnIGNvbmZpZ3NldF9nZXRfdmFsdWUgZm9vLmJhciBzeW50YXgtZXJyb3IgMj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGxpbmUgZXJyb3JzIGZvciBtYWxmb3JtZWQgdmFsdWVzJyAnCisJbXYgLmdpdC9jb25maWcgLmdpdC9jb25maWcub2xkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJtdiAuZ2l0L2NvbmZpZy5vbGQgLmdpdC9jb25maWciICYmCisJY2F0ID4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW2FsaWFzXQorCQlicgorCUVPRgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBiciAyPnJlc3VsdCAmJgorCXRlc3RfaTE4bmdyZXAgImZhdGFsOiAuKmFsaWFzXC5ici4qXC5naXQvY29uZmlnLipsaW5lIDIiIHJlc3VsdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MDAtdXBkYXRlLXJlZi5zaCBiL3QvdDE0MDAtdXBkYXRlLXJlZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZjFiMjBkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTQwMC11cGRhdGUtcmVmLnNoCkBAIC0wLDAgKzEsMTE1MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBTaGF3biBQZWFyY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgdXBkYXRlLXJlZiBhbmQgYmFzaWMgcmVmIGxvZ2dpbmcnCisuIC4vdGVzdC1saWIuc2gKKworWj0kX3o0MAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWZvciBuYW1lIGluIEEgQiBDIEQgRSBGCisJZG8KKwkJdGVzdF90aWNrICYmCisJCVQ9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkJc2hhMT0kKGVjaG8gJG5hbWUgfCBnaXQgY29tbWl0LXRyZWUgJFQpICYmCisJCWV2YWwgJG5hbWU9JHNoYTEKKwlkb25lCisKKycKKworbT1yZWZzL2hlYWRzL21hc3Rlcgorbl9kaXI9cmVmcy9oZWFkcy9ndQorbj0kbl9kaXIvZml4ZXMKK291dHNpZGU9Zm9vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJjcmVhdGUgJG0iIFwKKwkiZ2l0IHVwZGF0ZS1yZWYgJG0gJEEgJiYKKwkgdGVzdCAkQSInID0gJChjYXQgLmdpdC8nIiRtIicpJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJImNyZWF0ZSAkbSIgXAorCSJnaXQgdXBkYXRlLXJlZiAkbSAkQiAkQSAmJgorCSB0ZXN0ICRCIicgPSAkKGNhdCAuZ2l0LyciJG0iJyknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmYWlsIHRvIGRlbGV0ZSAkbSB3aXRoIHN0YWxlIHJlZiIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC1kICRtICRBICYmCisJdGVzdCAkQiA9ICIkKGNhdCAuZ2l0LyRtKSIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRlbGV0ZSAkbSIgJworCWdpdCB1cGRhdGUtcmVmIC1kICRtICRCICYmCisJISB0ZXN0IC1mIC5naXQvJG0KKycKK3JtIC1mIC5naXQvJG0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVsZXRlICRtIHdpdGhvdXQgb2xkdmFsdWUgdmVyaWZpY2F0aW9uIiAiCisJZ2l0IHVwZGF0ZS1yZWYgJG0gJEEgJiYKKwl0ZXN0ICRBID0gXCQoY2F0IC5naXQvJG0pICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgJG0gJiYKKwkhIHRlc3QgLWYgLmdpdC8kbQorIgorcm0gLWYgLmdpdC8kbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiZmFpbCB0byBjcmVhdGUgJG4iIFwKKwkidG91Y2ggLmdpdC8kbl9kaXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgJG4gJEEgPm91dCAyPmVyciIKK3JtIC1mIC5naXQvJG5fZGlyIG91dCBlcnIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJImNyZWF0ZSAkbSAoYnkgSEVBRCkiIFwKKwkiZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQSAmJgorCSB0ZXN0ICRBIicgPSAkKGNhdCAuZ2l0LyciJG0iJyknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiY3JlYXRlICRtIChieSBIRUFEKSIgXAorCSJnaXQgdXBkYXRlLXJlZiBIRUFEICRCICRBICYmCisJIHRlc3QgJEIiJyA9ICQoY2F0IC5naXQvJyIkbSInKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZhaWwgdG8gZGVsZXRlICRtIChieSBIRUFEKSB3aXRoIHN0YWxlIHJlZiIgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC1kIEhFQUQgJEEgJiYKKwl0ZXN0ICRCID0gJChjYXQgLmdpdC8kbSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImRlbGV0ZSAkbSAoYnkgSEVBRCkiICcKKwlnaXQgdXBkYXRlLXJlZiAtZCBIRUFEICRCICYmCisJISB0ZXN0IC1mIC5naXQvJG0KKycKK3JtIC1mIC5naXQvJG0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiBkb2VzIG5vdCBjcmVhdGUgcmVmbG9ncyBieSBkZWZhdWx0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCAkb3V0c2lkZSIgJiYKKwlnaXQgdXBkYXRlLXJlZiAkb3V0c2lkZSAkQSAmJgorCWdpdCByZXYtcGFyc2UgJEEgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJG91dHNpZGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVmbG9nIGV4aXN0cyAkb3V0c2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIGNyZWF0ZXMgcmVmbG9ncyB3aXRoIC0tY3JlYXRlLXJlZmxvZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgJG91dHNpZGUiICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1jcmVhdGUtcmVmbG9nICRvdXRzaWRlICRBICYmCisJZ2l0IHJldi1wYXJzZSAkQSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkb3V0c2lkZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZWZsb2cgZXhpc3RzICRvdXRzaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJjcmVhdGUgJG0gKGJ5IEhFQUQpIiBcCisJImdpdCB1cGRhdGUtcmVmIEhFQUQgJEEgJiYKKwkgdGVzdCAkQSInID0gJChjYXQgLmdpdC8nIiRtIicpJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJInBhY2sgcmVmcyIgXAorCSJnaXQgcGFjay1yZWZzIC0tYWxsIgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJIm1vdmUgJG0gKGJ5IEhFQUQpIiBcCisJImdpdCB1cGRhdGUtcmVmIEhFQUQgJEIgJEEgJiYKKwkgdGVzdCAkQiInID0gJChjYXQgLmdpdC8nIiRtIicpJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVsZXRlICRtIChieSBIRUFEKSBzaG91bGQgcmVtb3ZlIGJvdGggcGFja2VkIGFuZCBsb29zZSAkbSIgJworCWdpdCB1cGRhdGUtcmVmIC1kIEhFQUQgJEIgJiYKKwkhIGdyZXAgIiRtIiAuZ2l0L3BhY2tlZC1yZWZzICYmCisJISB0ZXN0IC1mIC5naXQvJG0KKycKK3JtIC1mIC5naXQvJG0KKworY3AgLWYgLmdpdC9IRUFEIC5naXQvSEVBRC5vcmlnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkZWxldGUgc3ltcmVmIHdpdGhvdXQgZGVyZWZlcmVuY2UiICcKKwlnaXQgdXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIEhFQUQgJiYKKwkhIHRlc3QgLWYgLmdpdC9IRUFECisnCitjcCAtZiAuZ2l0L0hFQUQub3JpZyAuZ2l0L0hFQUQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVsZXRlIHN5bXJlZiB3aXRob3V0IGRlcmVmZXJlbmNlIHdoZW4gdGhlIHJlZmVycmVkIHJlZiBpcyBwYWNrZWQiICcKKwllY2hvIGZvbyA+Zm9vLmMgJiYKKwlnaXQgYWRkIGZvby5jICYmCisJZ2l0IGNvbW1pdCAtbSBmb28gJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCBIRUFEICYmCisJISB0ZXN0IC1mIC5naXQvSEVBRAorJworY3AgLWYgLmdpdC9IRUFELm9yaWcgLmdpdC9IRUFECitnaXQgdXBkYXRlLXJlZiAtZCAkbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC1kIGlzIG5vdCBjb25mdXNlZCBieSBzZWxmLXJlZmVyZW5jZScgJworCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9zZWxmIHJlZnMvaGVhZHMvc2VsZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL3NlbGYiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL3NlbGYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL3NlbGYgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvc2VsZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLWQgY2FuIGRlbGV0ZSBzZWxmLXJlZmVyZW5jZScgJworCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9zZWxmIHJlZnMvaGVhZHMvc2VsZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL3NlbGYiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL3NlbGYgJiYKKwlnaXQgdXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIHJlZnMvaGVhZHMvc2VsZiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9zZWxmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCBjYW4gZGVsZXRlIHJlZmVyZW5jZSB0byBiYWQgcmVmJyAnCisJPi5naXQvcmVmcy9oZWFkcy9iYWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9iYWQiICYmCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL3JlZi10by1iYWQgcmVmcy9oZWFkcy9iYWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9yZWYtdG8tYmFkIiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9yZWYtdG8tYmFkICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1uby1kZXJlZiAtZCByZWZzL2hlYWRzL3JlZi10by1iYWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvcmVmLXRvLWJhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcobm90KSBjcmVhdGUgSEVBRCB3aXRoIG9sZCBzaGExJyAiCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQSAkQgorIgordGVzdF9leHBlY3Rfc3VjY2VzcyAiKG5vdCkgcHJpb3IgY3JlYXRlZCAuZ2l0LyRtIiAiCisJISB0ZXN0IC1mIC5naXQvJG0KKyIKK3JtIC1mIC5naXQvJG0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJImNyZWF0ZSBIRUFEIiBcCisJImdpdCB1cGRhdGUtcmVmIEhFQUQgJEEiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcobm90KSBjaGFuZ2UgSEVBRCB3aXRoIHdyb25nIFNIQTEnICIKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiBIRUFEICRCICRaCisiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIobm90KSBjaGFuZ2VkIC5naXQvJG0iICIKKwkhIHRlc3QgJEIiJyA9ICQoY2F0IC5naXQvJyIkbSInKQorJworcm0gLWYgLmdpdC8kbQorCitybSAtZiAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9tYXN0ZXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJjcmVhdGUgJG0gKGxvZ2dlZCBieSB0b3VjaCkiIFwKKwknR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMwIiBcCisJIGdpdCB1cGRhdGUtcmVmIC0tY3JlYXRlLXJlZmxvZyBIRUFEICciJEEiJyAtbSAiSW5pdGlhbCBDcmVhdGlvbiIgJiYKKwkgdGVzdCAnIiRBIicgPSAkKGNhdCAuZ2l0LyciJG0iJyknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkidXBkYXRlICRtIChsb2dnZWQgYnkgdG91Y2gpIiBcCisJJ0dJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzozMSIgXAorCSBnaXQgdXBkYXRlLXJlZiBIRUFEJyIgJEIgJEEgIictbSAiU3dpdGNoIiAmJgorCSB0ZXN0ICciJEIiJyA9ICQoY2F0IC5naXQvJyIkbSInKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJzZXQgJG0gKGxvZ2dlZCBieSB0b3VjaCkiIFwKKwknR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQxIiBcCisJIGdpdCB1cGRhdGUtcmVmIEhFQUQnIiAkQSAmJgorCSB0ZXN0ICRBIicgPSAkKGNhdCAuZ2l0LyciJG0iJyknCisKK2NhdCA+ZXhwZWN0IDw8RU9GCiskWiAkQSAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDIwMCArMDAwMAlJbml0aWFsIENyZWF0aW9uCiskQSAkQiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDI2MCArMDAwMAlTd2l0Y2gKKyRCICRBICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwODYwICswMDAwCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJ2ZXJpZnlpbmcgJG0ncyBsb2ciIFwKKwkidGVzdF9jbXAgZXhwZWN0IC5naXQvbG9ncy8kbSIKK3JtIC1yZiAuZ2l0LyRtIC5naXQvbG9ncyBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2VuYWJsZSBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMnIFwKKwknZ2l0IGNvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgdHJ1ZSAmJgorCSB0ZXN0IHRydWUgPSAkKGdpdCBjb25maWcgLS1ib29sIC0tZ2V0IGNvcmUubG9nQWxsUmVmVXBkYXRlcyknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSJjcmVhdGUgJG0gKGxvZ2dlZCBieSBjb25maWcpIiBcCisJJ0dJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzozMiIgXAorCSBnaXQgdXBkYXRlLXJlZiBIRUFEJyIgJEEgIictbSAiSW5pdGlhbCBDcmVhdGlvbiIgJiYKKwkgdGVzdCAnIiRBIicgPSAkKGNhdCAuZ2l0LyciJG0iJyknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkidXBkYXRlICRtIChsb2dnZWQgYnkgY29uZmlnKSIgXAorCSdHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6MzMiIFwKKwkgZ2l0IHVwZGF0ZS1yZWYgSEVBRCciICRCICRBICInLW0gIlN3aXRjaCIgJiYKKwkgdGVzdCAnIiRCIicgPSAkKGNhdCAuZ2l0LyciJG0iJyknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkic2V0ICRtIChsb2dnZWQgYnkgY29uZmlnKSIgXAorCSdHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDUtMDUtMjYgMjM6NDMiIFwKKwkgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAnIiRBICYmCisJIHRlc3QgJEEiJyA9ICQoY2F0IC5naXQvJyIkbSInKScKKworY2F0ID5leHBlY3QgPDxFT0YKKyRaICRBICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzIwICswMDAwCUluaXRpYWwgQ3JlYXRpb24KKyRBICRCICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzgwICswMDAwCVN3aXRjaAorJEIgJEEgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA5ODAgKzAwMDAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJInZlcmlmeWluZyAkbSdzIGxvZyIgXAorCSd0ZXN0X2NtcCBleHBlY3QgLmdpdC9sb2dzLyRtJworcm0gLWYgLmdpdC8kbSAuZ2l0L2xvZ3MvJG0gZXhwZWN0CisKK2dpdCB1cGRhdGUtcmVmICRtICRECitjYXQgPi5naXQvbG9ncy8kbSA8PEVPRgorMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAkQyAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDMyMCAtMDUwMAorJEMgJEEgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAzNTAgLTA1MDAKKyRBICRCICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMzgwIC0wNTAwCiskRiAkWiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDY4MCAtMDUwMAorJFogJEUgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA5ODAgLTA1MDAKK0VPRgorCitlZD0iVGh1LCAyNiBNYXkgMjAwNSAxODozMjowMCAtMDUwMCIKK2dkPSJUaHUsIDI2IE1heSAyMDA1IDE4OjMzOjAwIC0wNTAwIgorbGQ9IlRodSwgMjYgTWF5IDIwMDUgMTg6NDM6MDAgLTA1MDAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUXVlcnkgIm1hc3RlckB7TWF5IDI1IDIwMDV9IiAoYmVmb3JlIGhpc3RvcnkpJyBcCisJJ3JtIC1mIG8gZSAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAe01heSAyNSAyMDA1fSIgPm8gMj5lICYmCisJIHRlc3QgJyIkQyInID0gJChjYXQgbykgJiYKKwkgdGVzdCAid2FybmluZzogTG9nIGZvciAnXCdtYXN0ZXJcJycgb25seSBnb2VzIGJhY2sgdG8gJGVkLiIgPSAiJChjYXQgZSkiJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJIlF1ZXJ5IG1hc3RlckB7MjAwNS0wNS0yNX0gKGJlZm9yZSBoaXN0b3J5KSIgXAorCSdybSAtZiBvIGUgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJAezIwMDUtMDUtMjV9ID5vIDI+ZSAmJgorCSB0ZXN0ICciJEMiJyA9ICQoY2F0IG8pICYmCisJIGVjaG8gdGVzdCAid2FybmluZzogTG9nIGZvciAnXCdtYXN0ZXJcJycgb25seSBnb2VzIGJhY2sgdG8gJGVkLiIgPSAiJChjYXQgZSkiJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1F1ZXJ5ICJtYXN0ZXJAe01heSAyNiAyMDA1IDIzOjMxOjU5fSIgKDEgc2Vjb25kIGJlZm9yZSBoaXN0b3J5KScgXAorCSdybSAtZiBvIGUgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHtNYXkgMjYgMjAwNSAyMzozMTo1OX0iID5vIDI+ZSAmJgorCSB0ZXN0ICciJEMiJyA9ICQoY2F0IG8pICYmCisJIHRlc3QgIndhcm5pbmc6IExvZyBmb3IgJ1wnJ21hc3RlcidcJycgb25seSBnb2VzIGJhY2sgdG8gJGVkLiIgPSAiJChjYXQgZSkiJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1F1ZXJ5ICJtYXN0ZXJAe01heSAyNiAyMDA1IDIzOjMyOjAwfSIgKGV4YWN0bHkgaGlzdG9yeSBzdGFydCknIFwKKwkncm0gLWYgbyBlICYmCisJIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlckB7TWF5IDI2IDIwMDUgMjM6MzI6MDB9IiA+byAyPmUgJiYKKwkgdGVzdCAnIiRDIicgPSAkKGNhdCBvKSAmJgorCSB0ZXN0ICIiID0gIiQoY2F0IGUpIicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdRdWVyeSAibWFzdGVyQHtNYXkgMjYgMjAwNSAyMzozMjozMH0iIChmaXJzdCBub24tY3JlYXRpb24gY2hhbmdlKScgXAorCSdybSAtZiBvIGUgJiYKKwkgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAibWFzdGVyQHtNYXkgMjYgMjAwNSAyMzozMjozMH0iID5vIDI+ZSAmJgorCSB0ZXN0ICciJEEiJyA9ICQoY2F0IG8pICYmCisJIHRlc3QgIiIgPSAiJChjYXQgZSkiJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1F1ZXJ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6MzM6MDF9IiAobWlkZGxlIG9mIGhpc3Rvcnkgd2l0aCBnYXApJyBcCisJJ3JtIC1mIG8gZSAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6MzM6MDF9IiA+byAyPmUgJiYKKwkgdGVzdCAnIiRCIicgPSAkKGNhdCBvKSAmJgorCSB0ZXN0ICJ3YXJuaW5nOiBMb2cgZm9yIHJlZiAnIiRtIGhhcyBnYXAgYWZ0ZXIgJGdkIicuIiA9ICIkKGNhdCBlKSInCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUXVlcnkgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzozODowMH0iIChtaWRkbGUgb2YgaGlzdG9yeSknIFwKKwkncm0gLWYgbyBlICYmCisJIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIm1hc3RlckB7MjAwNS0wNS0yNiAyMzozODowMH0iID5vIDI+ZSAmJgorCSB0ZXN0ICciJFoiJyA9ICQoY2F0IG8pICYmCisJIHRlc3QgIiIgPSAiJChjYXQgZSkiJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1F1ZXJ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6NDM6MDB9IiAoZXhhY3QgZW5kIG9mIGhpc3RvcnkpJyBcCisJJ3JtIC1mIG8gZSAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6NDM6MDB9IiA+byAyPmUgJiYKKwkgdGVzdCAnIiRFIicgPSAkKGNhdCBvKSAmJgorCSB0ZXN0ICIiID0gIiQoY2F0IGUpIicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdRdWVyeSAibWFzdGVyQHsyMDA1LTA1LTI4fSIgKHBhc3QgZW5kIG9mIGhpc3RvcnkpJyBcCisJJ3JtIC1mIG8gZSAmJgorCSBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJtYXN0ZXJAezIwMDUtMDUtMjh9IiA+byAyPmUgJiYKKwkgdGVzdCAnIiREIicgPSAkKGNhdCBvKSAmJgorCSB0ZXN0ICJ3YXJuaW5nOiBMb2cgZm9yIHJlZiAnIiRtIHVuZXhwZWN0ZWRseSBlbmRlZCBvbiAkbGQiJy4iID0gIiQoY2F0IGUpIicKKworCitybSAtZiAuZ2l0LyRtIC5naXQvbG9ncy8kbSBleHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0aW5nIGluaXRpYWwgZmlsZXMnIFwKKyAgICAnZWNobyBURVNUID5GICYmCisgICAgIGdpdCBhZGQgRiAmJgorCSBHSVRfQVVUSE9SX0RBVEU9IjIwMDUtMDUtMjYgMjM6MzAiIFwKKwkgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMwIiBnaXQgY29tbWl0IC1tIGFkZCAtYSAmJgorCSBoX1RFU1Q9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJIGVjaG8gVGhlIG90aGVyIGRheSB0aGlzIGRpZCBub3Qgd29yay4gPk0gJiYKKwkgZWNobyBBbmQgdGhlbiBCb2IgdG9sZCBtZSBob3cgdG8gZml4IGl0LiA+Pk0gJiYKKwkgZWNobyBPVEhFUiA+RiAmJgorCSBHSVRfQVVUSE9SX0RBVEU9IjIwMDUtMDUtMjYgMjM6NDEiIFwKKwkgR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQxIiBnaXQgY29tbWl0IC1GIE0gLWEgJiYKKwkgaF9PVEhFUj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkgR0lUX0FVVEhPUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQ0IiBcCisJIEdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzo0NCIgZ2l0IGNvbW1pdCAtLWFtZW5kICYmCisJIGhfRklYRUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJIGVjaG8gTWVyZ2VkIGluaXRpYWwgY29tbWl0IGFuZCBhIGxhdGVyIGNvbW1pdC4gPk0gJiYKKwkgZWNobyAkaF9URVNUID4uZ2l0L01FUkdFX0hFQUQgJiYKKwkgR0lUX0FVVEhPUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjQ1IiBcCisJIEdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzo0NSIgZ2l0IGNvbW1pdCAtRiBNICYmCisJIGhfTUVSR0VEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCSBybSAtZiBNJworCitjYXQgPmV4cGVjdCA8PEVPRgorJFogJGhfVEVTVCAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gMTExNzE1MDIwMCArMDAwMAljb21taXQgKGluaXRpYWwpOiBhZGQKKyRoX1RFU1QgJGhfT1RIRVIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTA4NjAgKzAwMDAJY29tbWl0OiBUaGUgb3RoZXIgZGF5IHRoaXMgZGlkIG5vdCB3b3JrLgorJGhfT1RIRVIgJGhfRklYRUQgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTEwNDAgKzAwMDAJY29tbWl0IChhbWVuZCk6IFRoZSBvdGhlciBkYXkgdGhpcyBkaWQgbm90IHdvcmsuCiskaF9GSVhFRCAkaF9NRVJHRUQgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTExMDAgKzAwMDAJY29tbWl0IChtZXJnZSk6IE1lcmdlZCBpbml0aWFsIGNvbW1pdCBhbmQgYSBsYXRlciBjb21taXQuCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdnaXQgY29tbWl0IGxvZ2dlZCB1cGRhdGVzJyBcCisJInRlc3RfY21wIGV4cGVjdCAuZ2l0L2xvZ3MvJG0iCit1bnNldCBoX1RFU1QgaF9PVEhFUiBoX0ZJWEVEIGhfTUVSR0VECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiBtYXN0ZXI6RiAoZXhwZWN0IE9USEVSKScgXAorCSd0ZXN0IE9USEVSID0gJChnaXQgY2F0LWZpbGUgYmxvYiBtYXN0ZXI6RiknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyQHsyMDA1LTA1LTI2IDIzOjMwfTpGIChleHBlY3QgVEVTVCknIFwKKwkndGVzdCBURVNUID0gJChnaXQgY2F0LWZpbGUgYmxvYiAibWFzdGVyQHsyMDA1LTA1LTI2IDIzOjMwfTpGIiknCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyQHsyMDA1LTA1LTI2IDIzOjQyfTpGIChleHBlY3QgT1RIRVIpJyBcCisJJ3Rlc3QgT1RIRVIgPSAkKGdpdCBjYXQtZmlsZSBibG9iICJtYXN0ZXJAezIwMDUtMDUtMjYgMjM6NDJ9OkYiKScKKworYT1yZWZzL2hlYWRzL2EKK2I9cmVmcy9oZWFkcy9iCitjPXJlZnMvaGVhZHMvYworRT0nIiInCitGPSclc1wwJworcHdzPSdwYXRoIHdpdGggc3BhY2UnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHRlc3Qgc2V0dXAnICcKKwllY2hvICIkcHdzIiA+IiRwd3MiICYmCisJZ2l0IGFkZCAtLSAiJHB3cyIgJiYKKwlnaXQgY29tbWl0IC1tICIkcHdzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcteiBmYWlscyB3aXRob3V0IC0tc3RkaW4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAkbSAkbSAkbSAyPmVyciAmJgorCWdyZXAgInVzYWdlOiBnaXQgdXBkYXRlLXJlZiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHdvcmtzIHdpdGggbm8gaW5wdXQnICcKKwk+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJG0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgb24gZW1wdHkgbGluZScgJworCWVjaG8gIiIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogZW1wdHkgY29tbWFuZCBpbiBpbnB1dCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIG9uIG9ubHkgd2hpdGVzcGFjZScgJworCWVjaG8gIiAiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHdoaXRlc3BhY2UgYmVmb3JlIGNvbW1hbmQ6ICAiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyBvbiBsZWFkaW5nIHdoaXRlc3BhY2UnICcKKwllY2hvICIgY3JlYXRlICRhICRtIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB3aGl0ZXNwYWNlIGJlZm9yZSBjb21tYW5kOiAgY3JlYXRlICRhICRtIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgb24gdW5rbm93biBjb21tYW5kJyAnCisJZWNobyAidW5rbm93biAkYSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdW5rbm93biBjb21tYW5kOiB1bmtub3duICRhIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgb24gdW5iYWxhbmNlZCBxdW90ZXMnICcKKwllY2hvICJjcmVhdGUgJGEgXCJtYXN0ZXIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGJhZGx5IHF1b3RlZCBhcmd1bWVudDogXFxcIm1hc3RlciIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIG9uIGludmFsaWQgZXNjYXBlJyAnCisJZWNobyAiY3JlYXRlICRhIFwibWFcenRlclwiIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBiYWRseSBxdW90ZWQgYXJndW1lbnQ6IFxcXCJtYVxcXFx6dGVyXFxcIiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIG9uIGp1bmsgYWZ0ZXIgcXVvdGVkIGFyZ3VtZW50JyAnCisJZWNobyAiY3JlYXRlIFwiJGFcIm1hc3RlciIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdW5leHBlY3RlZCBjaGFyYWN0ZXIgYWZ0ZXIgcXVvdGVkIGFyZ3VtZW50OiBcXFwiJGFcXFwibWFzdGVyIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgY3JlYXRlIHdpdGggbm8gcmVmJyAnCisJZWNobyAiY3JlYXRlICIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY3JlYXRlOiBtaXNzaW5nIDxyZWY+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgY3JlYXRlIHdpdGggbm8gbmV3IHZhbHVlJyAnCisJZWNobyAiY3JlYXRlICRhIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjcmVhdGUgJGE6IG1pc3NpbmcgPG5ld3ZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIGNyZWF0ZSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCWVjaG8gImNyZWF0ZSAkYSAkbSAkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY3JlYXRlICRhOiBleHRyYSBpbnB1dDogICRtIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgdXBkYXRlIHdpdGggbm8gcmVmJyAnCisJZWNobyAidXBkYXRlICIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlOiBtaXNzaW5nIDxyZWY+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgdXBkYXRlIHdpdGggbm8gbmV3IHZhbHVlJyAnCisJZWNobyAidXBkYXRlICRhIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1cGRhdGUgJGE6IG1pc3NpbmcgPG5ld3ZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIHVwZGF0ZSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCWVjaG8gInVwZGF0ZSAkYSAkbSAkbSAkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlICRhOiBleHRyYSBpbnB1dDogICRtIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgZGVsZXRlIHdpdGggbm8gcmVmJyAnCisJZWNobyAiZGVsZXRlICIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogZGVsZXRlOiBtaXNzaW5nIDxyZWY+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZmFpbHMgZGVsZXRlIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzJyAnCisJZWNobyAiZGVsZXRlICRhICRtICRtIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBkZWxldGUgJGE6IGV4dHJhIGlucHV0OiAgJG0iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBmYWlscyB2ZXJpZnkgd2l0aCB0b28gbWFueSBhcmd1bWVudHMnICcKKwllY2hvICJ2ZXJpZnkgJGEgJG0gJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHZlcmlmeSAkYTogZXh0cmEgaW5wdXQ6ICAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIG9wdGlvbiB3aXRoIHVua25vd24gbmFtZScgJworCWVjaG8gIm9wdGlvbiB1bmtub3duIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBvcHRpb24gdW5rbm93bjogdW5rbm93biIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGZhaWxzIHdpdGggZHVwbGljYXRlIHJlZnMnICcKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCWNyZWF0ZSAkYSAkbQorCWNyZWF0ZSAkYiAkbQorCWNyZWF0ZSAkYSAkbQorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IE11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnIiciJyRhJyInIicgbm90IGFsbG93ZWQuIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gY3JlYXRlIHJlZiB3b3JrcycgJworCWVjaG8gImNyZWF0ZSAkYSAkbSIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGRvZXMgbm90IGNyZWF0ZSByZWZsb2dzIGJ5IGRlZmF1bHQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kICRvdXRzaWRlIiAmJgorCWVjaG8gImNyZWF0ZSAkb3V0c2lkZSAkbSIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRvdXRzaWRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlZmxvZyBleGlzdHMgJG91dHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gY3JlYXRlcyByZWZsb2dzIHdpdGggLS1jcmVhdGUtcmVmbG9nJyAnCisJZWNobyAiY3JlYXRlICRvdXRzaWRlICRtIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLWNyZWF0ZS1yZWZsb2cgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRvdXRzaWRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgJG91dHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gc3VjY2VlZHMgd2l0aCBxdW90ZWQgYXJndW1lbnQnICcKKwlnaXQgdXBkYXRlLXJlZiAtZCAkYSAmJgorCWVjaG8gImNyZWF0ZSAkYSBcIiRtXCIiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBzdWNjZWVkcyB3aXRoIGVzY2FwZWQgY2hhcmFjdGVyJyAnCisJZ2l0IHVwZGF0ZS1yZWYgLWQgJGEgJiYKKwllY2hvICJjcmVhdGUgJGEgXCJtYVxcMTYzdGVyXCIiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgcmVmIGNyZWF0ZXMgd2l0aCB6ZXJvIG9sZCB2YWx1ZScgJworCWVjaG8gInVwZGF0ZSAkYiAkbSAkWiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgJGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdXBkYXRlIHJlZiBjcmVhdGVzIHdpdGggZW1wdHkgb2xkIHZhbHVlJyAnCisJZWNobyAidXBkYXRlICRiICRtICRFIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gY3JlYXRlIHJlZiB3b3JrcyB3aXRoIHBhdGggd2l0aCBzcGFjZSB0byBibG9iJyAnCisJZWNobyAiY3JlYXRlIHJlZnMvYmxvYnMvcHdzIFwiJG06JHB3c1wiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgIiRtOiRwd3MiID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvYmxvYnMvcHdzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9ibG9icy9wd3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdXBkYXRlIHJlZiBmYWlscyB3aXRoIHdyb25nIG9sZCB2YWx1ZScgJworCWVjaG8gInVwZGF0ZSAkYyAkbSAkbX4xIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjYW5ub3QgbG9jayByZWYgJyInIickYyciJyInIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHVwZGF0ZSByZWYgZmFpbHMgd2l0aCBiYWQgb2xkIHZhbHVlJyAnCisJZWNobyAidXBkYXRlICRjICRtIGRvZXMtbm90LWV4aXN0IiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1cGRhdGUgJGM6IGludmFsaWQgPG9sZHZhbHVlPjogZG9lcy1ub3QtZXhpc3QiIGVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gY3JlYXRlIHJlZiBmYWlscyB3aXRoIGJhZCBuZXcgdmFsdWUnICcKKwllY2hvICJjcmVhdGUgJGMgZG9lcy1ub3QtZXhpc3QiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNyZWF0ZSAkYzogaW52YWxpZCA8bmV3dmFsdWU+OiBkb2VzLW5vdC1leGlzdCIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBjcmVhdGUgcmVmIGZhaWxzIHdpdGggemVybyBuZXcgdmFsdWUnICcKKwllY2hvICJjcmVhdGUgJGMgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjcmVhdGUgJGM6IHplcm8gPG5ld3ZhbHVlPiIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgcmVmIHdvcmtzIHdpdGggcmlnaHQgb2xkIHZhbHVlJyAnCisJZWNobyAidXBkYXRlICRiICRtfjEgJG0iID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbX4xID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGRlbGV0ZSByZWYgZmFpbHMgd2l0aCB3cm9uZyBvbGQgdmFsdWUnICcKKwllY2hvICJkZWxldGUgJGEgJG1+MSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY2Fubm90IGxvY2sgcmVmICciJyInJGEnIiciJyIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBkZWxldGUgcmVmIGZhaWxzIHdpdGggemVybyBvbGQgdmFsdWUnICcKKwllY2hvICJkZWxldGUgJGEgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBkZWxldGUgJGE6IHplcm8gPG9sZHZhbHVlPiIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgc3ltcmVmIHdvcmtzIG9wdGlvbiBuby1kZXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRiAkYiAmJgorCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJb3B0aW9uIG5vLWRlcmVmCisJdXBkYXRlIFRFU1RTWU1SRUYgJGEgJGIKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgVEVTVFNZTVJFRiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJG1+MSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBkZWxldGUgc3ltcmVmIHdvcmtzIG9wdGlvbiBuby1kZXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRiAkYiAmJgorCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJb3B0aW9uIG5vLWRlcmVmCisJZGVsZXRlIFRFU1RTWU1SRUYgJGIKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgVEVTVFNZTVJFRiAmJgorCWdpdCByZXYtcGFyc2UgJG1+MSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiBkZWxldGUgcmVmIHdvcmtzIHdpdGggcmlnaHQgb2xkIHZhbHVlJyAnCisJZWNobyAiZGVsZXRlICRiICRtfjEiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUvY3JlYXRlL3ZlcmlmeSBjb21iaW5hdGlvbiB3b3JrcycgJworCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJdXBkYXRlICRhICRtCisJY3JlYXRlICRiICRtCisJdmVyaWZ5ICRjCisJRU9GCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdmVyaWZ5IHN1Y2NlZWRzIGZvciBjb3JyZWN0IHZhbHVlJyAnCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZWNobyAidmVyaWZ5ICRtICRtIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdmVyaWZ5IHN1Y2NlZWRzIGZvciBtaXNzaW5nIHJlZmVyZW5jZScgJworCWVjaG8gInZlcmlmeSByZWZzL2hlYWRzL21pc3NpbmcgJFoiID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSByZWZzL2hlYWRzL21pc3NpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gdmVyaWZ5IHRyZWF0cyBubyB2YWx1ZSBhcyBtaXNzaW5nJyAnCisJZWNobyAidmVyaWZ5IHJlZnMvaGVhZHMvbWlzc2luZyIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIHJlZnMvaGVhZHMvbWlzc2luZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB2ZXJpZnkgZmFpbHMgZm9yIHdyb25nIHZhbHVlJyAnCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZWNobyAidmVyaWZ5ICRtICRtfjEiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB2ZXJpZnkgZmFpbHMgZm9yIG1pc3Rha2VuIG51bGwgdmFsdWUnICcKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwllY2hvICJ2ZXJpZnkgJG0gJFoiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB2ZXJpZnkgZmFpbHMgZm9yIG1pc3Rha2VuIGVtcHR5IHZhbHVlJyAnCisJTT0kKGdpdCByZXYtcGFyc2UgJG0pICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAkbSAkTSIgJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwllY2hvICJ2ZXJpZnkgJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiB1cGRhdGUgcmVmcyB3b3JrcyB3aXRoIGlkZW50aXR5IHVwZGF0ZXMnICcKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXVwZGF0ZSAkYSAkbSAkbQorCXVwZGF0ZSAkYiAkbSAkbQorCXVwZGF0ZSAkYyAkWiAkRQorCUVPRgorCWdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIHVwZGF0ZSByZWZzIGZhaWxzIHdpdGggd3Jvbmcgb2xkIHZhbHVlJyAnCisJZ2l0IHVwZGF0ZS1yZWYgJGMgJG0gJiYKKwljYXQgPnN0ZGluIDw8LUVPRiAmJgorCXVwZGF0ZSAkYSAkbSAkbQorCXVwZGF0ZSAkYiAkbSAkbQorCXVwZGF0ZSAkYyAgJycKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjYW5ub3QgbG9jayByZWYgJyInIickYyciJyInIiBlcnIgJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJGMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gZGVsZXRlIHJlZnMgd29ya3Mgd2l0aCBwYWNrZWQgYW5kIGxvb3NlIHJlZnMnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHVwZGF0ZS1yZWYgJGMgJG1+MSAmJgorCWNhdCA+c3RkaW4gPDwtRU9GICYmCisJZGVsZXRlICRhICRtCisJdXBkYXRlICRiICRaICRtCisJdXBkYXRlICRjICRFICRtfjEKKwlFT0YKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB3b3JrcyBvbiBlbXB0eSBpbnB1dCcgJworCT5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBvbiBlbXB0eSBsaW5lJyAnCisJZWNobyAiIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB3aGl0ZXNwYWNlIGJlZm9yZSBjb21tYW5kOiAiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBvbiBlbXB0eSBjb21tYW5kJyAnCisJcHJpbnRmICRGICIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGVtcHR5IGNvbW1hbmQgaW4gaW5wdXQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBvbiBvbmx5IHdoaXRlc3BhY2UnICcKKwlwcmludGYgJEYgIiAiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IHdoaXRlc3BhY2UgYmVmb3JlIGNvbW1hbmQ6ICAiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBvbiBsZWFkaW5nIHdoaXRlc3BhY2UnICcKKwlwcmludGYgJEYgIiBjcmVhdGUgJGEiICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogd2hpdGVzcGFjZSBiZWZvcmUgY29tbWFuZDogIGNyZWF0ZSAkYSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIG9uIHVua25vd24gY29tbWFuZCcgJworCXByaW50ZiAkRiAidW5rbm93biAkYSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdW5rbm93biBjb21tYW5kOiB1bmtub3duICRhIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgY3JlYXRlIHdpdGggbm8gcmVmJyAnCisJcHJpbnRmICRGICJjcmVhdGUgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBjcmVhdGU6IG1pc3NpbmcgPHJlZj4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBjcmVhdGUgd2l0aCBubyBuZXcgdmFsdWUnICcKKwlwcmludGYgJEYgImNyZWF0ZSAkYSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY3JlYXRlICRhOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG5ld3ZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIGNyZWF0ZSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCXByaW50ZiAkRiAiY3JlYXRlICRhIiAiJG0iICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdW5rbm93biBjb21tYW5kOiAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHVwZGF0ZSB3aXRoIG5vIHJlZicgJworCXByaW50ZiAkRiAidXBkYXRlICIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlOiBtaXNzaW5nIDxyZWY+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgdXBkYXRlIHdpdGggdG9vIGZldyBhcmdzJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGEiICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlICRhOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG9sZHZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGVtaXRzIHdhcm5pbmcgd2l0aCBlbXB0eSBuZXcgdmFsdWUnICcKKwlnaXQgdXBkYXRlLXJlZiAkYSAkbSAmJgorCXByaW50ZiAkRiAidXBkYXRlICRhIiAiIiAiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgIndhcm5pbmc6IHVwZGF0ZSAkYTogbWlzc2luZyA8bmV3dmFsdWU+LCB0cmVhdGluZyBhcyB6ZXJvIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHVwZGF0ZSB3aXRoIG5vIG5ldyB2YWx1ZScgJworCXByaW50ZiAkRiAidXBkYXRlICRhIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1cGRhdGUgJGE6IHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IHdoZW4gcmVhZGluZyA8bmV3dmFsdWU+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgdXBkYXRlIHdpdGggbm8gb2xkIHZhbHVlJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGEiICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlICRhOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG9sZHZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHVwZGF0ZSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCXByaW50ZiAkRiAidXBkYXRlICRhIiAiJG0iICIkbSIgIiRtIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB1bmtub3duIGNvbW1hbmQ6ICRtIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgZGVsZXRlIHdpdGggbm8gcmVmJyAnCisJcHJpbnRmICRGICJkZWxldGUgIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBkZWxldGU6IG1pc3NpbmcgPHJlZj4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyBkZWxldGUgd2l0aCBubyBvbGQgdmFsdWUnICcKKwlwcmludGYgJEYgImRlbGV0ZSAkYSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogZGVsZXRlICRhOiB1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCB3aGVuIHJlYWRpbmcgPG9sZHZhbHVlPiIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIGRlbGV0ZSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCXByaW50ZiAkRiAiZGVsZXRlICRhIiAiJG0iICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdW5rbm93biBjb21tYW5kOiAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHZlcmlmeSB3aXRoIHRvbyBtYW55IGFyZ3VtZW50cycgJworCXByaW50ZiAkRiAidmVyaWZ5ICRhIiAiJG0iICIkbSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdW5rbm93biBjb21tYW5kOiAkbSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGZhaWxzIHZlcmlmeSB3aXRoIG5vIG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAidmVyaWZ5ICRhIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiB2ZXJpZnkgJGE6IHVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IHdoZW4gcmVhZGluZyA8b2xkdmFsdWU+IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZmFpbHMgb3B0aW9uIHdpdGggdW5rbm93biBuYW1lJyAnCisJcHJpbnRmICRGICJvcHRpb24gdW5rbm93biIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogb3B0aW9uIHVua25vd246IHVua25vd24iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBmYWlscyB3aXRoIGR1cGxpY2F0ZSByZWZzJyAnCisJcHJpbnRmICRGICJjcmVhdGUgJGEiICIkbSIgImNyZWF0ZSAkYiIgIiRtIiAiY3JlYXRlICRhIiAiJG0iID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IE11bHRpcGxlIHVwZGF0ZXMgZm9yIHJlZiAnIiciJyRhJyInIicgbm90IGFsbG93ZWQuIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogY3JlYXRlIHJlZiB3b3JrcycgJworCXByaW50ZiAkRiAiY3JlYXRlICRhIiAiJG0iID5zdGRpbiAmJgorCWdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB1cGRhdGUgcmVmIGNyZWF0ZXMgd2l0aCB6ZXJvIG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAidXBkYXRlICRiIiAiJG0iICIkWiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHVwZGF0ZS1yZWYgLWQgJGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdXBkYXRlIHJlZiBjcmVhdGVzIHdpdGggZW1wdHkgb2xkIHZhbHVlJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGIiICIkbSIgIiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGNyZWF0ZSByZWYgd29ya3Mgd2l0aCBwYXRoIHdpdGggc3BhY2UgdG8gYmxvYicgJworCXByaW50ZiAkRiAiY3JlYXRlIHJlZnMvYmxvYnMvcHdzIiAiJG06JHB3cyIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICIkbTokcHdzIiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2Jsb2JzL3B3cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvYmxvYnMvcHdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHVwZGF0ZSByZWYgZmFpbHMgd2l0aCB3cm9uZyBvbGQgdmFsdWUnICcKKwlwcmludGYgJEYgInVwZGF0ZSAkYyIgIiRtIiAiJG1+MSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY2Fubm90IGxvY2sgcmVmICciJyInJGMnIiciJyIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB1cGRhdGUgcmVmIGZhaWxzIHdpdGggYmFkIG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAidXBkYXRlICRjIiAiJG0iICJkb2VzLW5vdC1leGlzdCIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogdXBkYXRlICRjOiBpbnZhbGlkIDxvbGR2YWx1ZT46IGRvZXMtbm90LWV4aXN0IiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGNyZWF0ZSByZWYgZmFpbHMgd2hlbiByZWYgZXhpc3RzJyAnCisJZ2l0IHVwZGF0ZS1yZWYgJGMgJG0gJiYKKwlnaXQgcmV2LXBhcnNlICIkYyIgPmV4cGVjdCAmJgorCXByaW50ZiAkRiAiY3JlYXRlICRjIiAiJG1+MSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY2Fubm90IGxvY2sgcmVmICciJyInJGMnIiciJyIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAiJGMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IGNyZWF0ZSByZWYgZmFpbHMgd2l0aCBiYWQgbmV3IHZhbHVlJyAnCisJZ2l0IHVwZGF0ZS1yZWYgLWQgIiRjIiAmJgorCXByaW50ZiAkRiAiY3JlYXRlICRjIiAiZG9lcy1ub3QtZXhpc3QiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNyZWF0ZSAkYzogaW52YWxpZCA8bmV3dmFsdWU+OiBkb2VzLW5vdC1leGlzdCIgZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBjcmVhdGUgcmVmIGZhaWxzIHdpdGggZW1wdHkgbmV3IHZhbHVlJyAnCisJcHJpbnRmICRGICJjcmVhdGUgJGMiICIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNyZWF0ZSAkYzogbWlzc2luZyA8bmV3dmFsdWU+IiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHVwZGF0ZSByZWYgd29ya3Mgd2l0aCByaWdodCBvbGQgdmFsdWUnICcKKwlwcmludGYgJEYgInVwZGF0ZSAkYiIgIiRtfjEiICIkbSIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtfjEgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZGVsZXRlIHJlZiBmYWlscyB3aXRoIHdyb25nIG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAiZGVsZXRlICRhIiAiJG1+MSIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogY2Fubm90IGxvY2sgcmVmICciJyInJGEnIiciJyIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBkZWxldGUgcmVmIGZhaWxzIHdpdGggemVybyBvbGQgdmFsdWUnICcKKwlwcmludGYgJEYgImRlbGV0ZSAkYSIgIiRaIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBkZWxldGUgJGE6IHplcm8gPG9sZHZhbHVlPiIgZXJyICYmCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB1cGRhdGUgc3ltcmVmIHdvcmtzIG9wdGlvbiBuby1kZXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRiAkYiAmJgorCXByaW50ZiAkRiAib3B0aW9uIG5vLWRlcmVmIiAidXBkYXRlIFRFU1RTWU1SRUYiICIkYSIgIiRiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgVEVTVFNZTVJFRiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgJG1+MSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAkYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBkZWxldGUgc3ltcmVmIHdvcmtzIG9wdGlvbiBuby1kZXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgVEVTVFNZTVJFRiAkYiAmJgorCXByaW50ZiAkRiAib3B0aW9uIG5vLWRlcmVmIiAiZGVsZXRlIFRFU1RTWU1SRUYiICIkYiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIFRFU1RTWU1SRUYgJiYKKwlnaXQgcmV2LXBhcnNlICRtfjEgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogZGVsZXRlIHJlZiB3b3JrcyB3aXRoIHJpZ2h0IG9sZCB2YWx1ZScgJworCXByaW50ZiAkRiAiZGVsZXRlICRiIiAiJG1+MSIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHVwZGF0ZS9jcmVhdGUvdmVyaWZ5IGNvbWJpbmF0aW9uIHdvcmtzJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGEiICIkbSIgIiIgImNyZWF0ZSAkYiIgIiRtIiAidmVyaWZ5ICRjIiAiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB2ZXJpZnkgc3VjY2VlZHMgZm9yIGNvcnJlY3QgdmFsdWUnICcKKwlnaXQgcmV2LXBhcnNlICRtID5leHBlY3QgJiYKKwlwcmludGYgJEYgInZlcmlmeSAkbSIgIiRtIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdmVyaWZ5IHN1Y2NlZWRzIGZvciBtaXNzaW5nIHJlZmVyZW5jZScgJworCXByaW50ZiAkRiAidmVyaWZ5IHJlZnMvaGVhZHMvbWlzc2luZyIgIiRaIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgcmVmcy9oZWFkcy9taXNzaW5nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHZlcmlmeSB0cmVhdHMgbm8gdmFsdWUgYXMgbWlzc2luZycgJworCXByaW50ZiAkRiAidmVyaWZ5IHJlZnMvaGVhZHMvbWlzc2luZyIgIiIgPnN0ZGluICYmCisJZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIHJlZnMvaGVhZHMvbWlzc2luZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB2ZXJpZnkgZmFpbHMgZm9yIHdyb25nIHZhbHVlJyAnCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJcHJpbnRmICRGICJ2ZXJpZnkgJG0iICIkbX4xIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdmVyaWZ5IGZhaWxzIGZvciBtaXN0YWtlbiBudWxsIHZhbHVlJyAnCisJZ2l0IHJldi1wYXJzZSAkbSA+ZXhwZWN0ICYmCisJcHJpbnRmICRGICJ2ZXJpZnkgJG0iICIkWiIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLXogLS1zdGRpbiA8c3RkaW4gJiYKKwlnaXQgcmV2LXBhcnNlICRtID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIC16IHZlcmlmeSBmYWlscyBmb3IgbWlzdGFrZW4gZW1wdHkgdmFsdWUnICcKKwlNPSQoZ2l0IHJldi1wYXJzZSAkbSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmICRtICRNIiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCXByaW50ZiAkRiAidmVyaWZ5ICRtIiAiIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gLXogdXBkYXRlIHJlZnMgd29ya3Mgd2l0aCBpZGVudGl0eSB1cGRhdGVzJyAnCisJcHJpbnRmICRGICJ1cGRhdGUgJGEiICIkbSIgIiRtIiAidXBkYXRlICRiIiAiJG0iICIkbSIgInVwZGF0ZSAkYyIgIiRaIiAiIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiB1cGRhdGUgcmVmcyBmYWlscyB3aXRoIHdyb25nIG9sZCB2YWx1ZScgJworCWdpdCB1cGRhdGUtcmVmICRjICRtICYmCisJcHJpbnRmICRGICJ1cGRhdGUgJGEiICIkbSIgIiRtIiAidXBkYXRlICRiIiAiJG0iICIkbSIgInVwZGF0ZSAkYyIgIiRtIiAiJFoiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGNhbm5vdCBsb2NrIHJlZiAnIiciJyRjJyInIiciIGVyciAmJgorCWdpdCByZXYtcGFyc2UgJG0gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgJGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlICRiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSAkYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGRpbiAteiBkZWxldGUgcmVmcyB3b3JrcyB3aXRoIHBhY2tlZCBhbmQgbG9vc2UgcmVmcycgJworCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgdXBkYXRlLXJlZiAkYyAkbX4xICYmCisJcHJpbnRmICRGICJkZWxldGUgJGEiICIkbSIgInVwZGF0ZSAkYiIgIiRaIiAiJG0iICJ1cGRhdGUgJGMiICIiICIkbX4xIiA+c3RkaW4gJiYKKwlnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgJGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xICRiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSAkYworJworCitydW5fd2l0aF9saW1pdGVkX29wZW5fZmlsZXMgKCkgeworCSh1bGltaXQgLW4gMzIgJiYgIiRAIikKK30KKwordGVzdF9sYXp5X3ByZXJlcSBVTElNSVRfRklMRV9ERVNDUklQVE9SUyAncnVuX3dpdGhfbGltaXRlZF9vcGVuX2ZpbGVzIHRydWUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVUxJTUlUX0ZJTEVfREVTQ1JJUFRPUlMgJ2xhcmdlIHRyYW5zYWN0aW9uIGNyZWF0aW5nIGJyYW5jaGVzIGRvZXMgbm90IGJ1cnN0IG9wZW4gZmlsZSBsaW1pdCcgJworKAorCWZvciBpIGluICQodGVzdF9zZXEgMzMpCisJZG8KKwkJZWNobyAiY3JlYXRlIHJlZnMvaGVhZHMvJGkgSEVBRCIKKwlkb25lID5sYXJnZV9pbnB1dCAmJgorCXJ1bl93aXRoX2xpbWl0ZWRfb3Blbl9maWxlcyBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxsYXJnZV9pbnB1dCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgcmVmcy9oZWFkcy8zMworKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFVMSU1JVF9GSUxFX0RFU0NSSVBUT1JTICdsYXJnZSB0cmFuc2FjdGlvbiBkZWxldGluZyBicmFuY2hlcyBkb2VzIG5vdCBidXJzdCBvcGVuIGZpbGUgbGltaXQnICcKKygKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDMzKQorCWRvCisJCWVjaG8gImRlbGV0ZSByZWZzL2hlYWRzLyRpIEhFQUQiCisJZG9uZSA+bGFyZ2VfaW5wdXQgJiYKKwlydW5fd2l0aF9saW1pdGVkX29wZW5fZmlsZXMgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8bGFyZ2VfaW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC1xIHJlZnMvaGVhZHMvMzMKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFuZGxlIHBlci13b3JrdHJlZSByZWZzIGluIHJlZnMvYmlzZWN0JyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC1iIGJyYW5jaCB3b3JrdHJlZSAmJgorCSgKKwkJY2Qgd29ya3RyZWUgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJ0ZXN0IGNvbW1pdCIgICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgPmZvci1lYWNoLXJlZi5vdXQgJiYKKwkJISBncmVwIHJlZnMvYmlzZWN0IGZvci1lYWNoLXJlZi5vdXQgJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9iaXNlY3Qvc29tZXRoaW5nIEhFQUQgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL2Jpc2VjdC9zb21ldGhpbmcgPi4uL3dvcmt0cmVlLWhlYWQgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiB8IGdyZXAgcmVmcy9iaXNlY3Qvc29tZXRoaW5nCisJKSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9iaXNlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvYmlzZWN0L3NvbWV0aGluZyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvYmlzZWN0L3NvbWV0aGluZyBIRUFEICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2Jpc2VjdC9zb21ldGhpbmcgPm1haW4taGVhZCAmJgorCSEgdGVzdF9jbXAgbWFpbi1oZWFkIHdvcmt0cmVlLWhlYWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDAxLXN5bWJvbGljLXJlZi5zaCBiL3QvdDE0MDEtc3ltYm9saWMtcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIwYjAyMmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDAxLXN5bWJvbGljLXJlZi5zaApAQCAtMCwwICsxLDk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgc3ltYm9saWMtcmVmIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgSWYgdGhlIHRlc3RzIG11bmdpbmcgSEVBRCBmYWlsLCB0aGV5IGNhbiBicmVhayBkZXRlY3Rpb24gb2YKKyMgdGhlIGdpdCByZXBvLCBtZWFuaW5nIHRoYXQgZnVydGhlciB0ZXN0cyB3aWxsIG9wZXJhdGUgb24KKyMgdGhlIHN1cnJvdW5kaW5nIGdpdCByZXBvIGluc3RlYWQgb2YgdGhlIHRyYXNoIGRpcmVjdG9yeS4KK3Jlc2V0X3RvX3NhbmUoKSB7CisJZWNobyByZWY6IHJlZnMvaGVhZHMvZm9vID4uZ2l0L0hFQUQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIHdyaXRlcyBIRUFEJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvZm9vICYmCisJZWNobyByZWY6IHJlZnMvaGVhZHMvZm9vID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgLmdpdC9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWFkcyBIRUFEJyAnCisJZWNobyByZWZzL2hlYWRzL2ZvbyA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWZ1c2VzIG5vbi1yZWYgZm9yIEhFQUQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgZm9vCisnCityZXNldF90b19zYW5lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiByZWZ1c2VzIGJhcmUgc2hhMScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQgYGdpdCByZXYtcGFyc2UgSEVBRGAKKycKK3Jlc2V0X3RvX3NhbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIGRlbGV0ZXMgSEVBRCcgJworCWdpdCBzeW1ib2xpYy1yZWYgLWQgSEVBRCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9mb28gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0hFQUQKKycKK3Jlc2V0X3RvX3NhbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ltYm9saWMtcmVmIGRlbGV0ZXMgZGFuZ2xpbmcgSEVBRCcgJworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL21pc3NpbmcgJiYKKwlnaXQgc3ltYm9saWMtcmVmIC1kIEhFQUQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvbWlzc2luZyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvSEVBRAorJworcmVzZXRfdG9fc2FuZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1ib2xpYy1yZWYgZmFpbHMgdG8gZGVsZXRlIG1pc3NpbmcgRk9PJyAnCisJZWNobyAiZmF0YWw6IENhbm5vdCBkZWxldGUgRk9PLCBub3QgYSBzeW1ib2xpYyByZWYiID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIC1kIEZPTyA+YWN0dWFsIDI+JjEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCityZXNldF90b19zYW5lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWJvbGljLXJlZiBmYWlscyB0byBkZWxldGUgcmVhbCByZWYnICcKKwllY2hvICJmYXRhbDogQ2Fubm90IGRlbGV0ZSByZWZzL2hlYWRzL2Zvbywgbm90IGEgc3ltYm9saWMgcmVmIiA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiAtZCByZWZzL2hlYWRzL2ZvbyA+YWN0dWFsIDI+JjEgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworcmVzZXRfdG9fc2FuZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbGFyZ2UgcmVmIG5hbWUnICcKKwkjIG1ha2UgMjU2KyBjaGFyYWN0ZXIgcmVmOyBzb21lIHN5c3RlbXMgbWF5IG5vdCBoYW5kbGUgdGhhdCwKKwkjIHNvIGJlIGdlbnRsZQorCWxvbmc9MDEyMzQ1Njc4OWFiY2RlZiAmJgorCWxvbmc9JGxvbmcvJGxvbmcvJGxvbmcvJGxvbmcgJiYKKwlsb25nPSRsb25nLyRsb25nLyRsb25nLyRsb25nICYmCisJbG9uZ19yZWY9cmVmcy9oZWFkcy8kbG9uZyAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwljb21taXQ9JChlY2hvIGZvbyB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwlpZiBnaXQgdXBkYXRlLXJlZiAkbG9uZ19yZWYgJGNvbW1pdDsgdGhlbgorCQl0ZXN0X3NldF9wcmVyZXEgTE9OR19SRUYKKwllbHNlCisJCWVjaG8gPiYyICJsb25nIHJlZnMgbm90IHN1cHBvcnRlZCIKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExPTkdfUkVGICdzeW1ib2xpYy1yZWYgY2FuIHBvaW50IHRvIGxhcmdlIHJlZiBuYW1lJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEICRsb25nX3JlZiAmJgorCWVjaG8gJGxvbmdfcmVmID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMT05HX1JFRiAnd2UgY2FuIHBhcnNlIGxvbmcgc3ltYm9saWMgcmVmJyAnCisJZWNobyAkY29tbWl0ID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDAyLWNoZWNrLXJlZi1mb3JtYXQuc2ggYi90L3QxNDAyLWNoZWNrLXJlZi1mb3JtYXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDc5MGVkZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MDItY2hlY2stcmVmLWZvcm1hdC5zaApAQCAtMCwwICsxLDIwMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IGNoZWNrLXJlZi1mb3JtYXQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit2YWxpZF9yZWYoKSB7CisJcHJlcmVxPQorCWNhc2UgJDEgaW4KKwlbQS1aIV0qKQorCQlwcmVyZXE9JDEKKwkJc2hpZnQKKwllc2FjCisJZGVzYz0icmVmIG5hbWUgJyQxJyBpcyB2YWxpZCR7MjorIHdpdGggb3B0aW9ucyAkMn0iCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICIkZGVzYyIgIgorCQlnaXQgY2hlY2stcmVmLWZvcm1hdCAkMiAnJDEnCisJIgorfQoraW52YWxpZF9yZWYoKSB7CisJcHJlcmVxPQorCWNhc2UgJDEgaW4KKwlbQS1aIV0qKQorCQlwcmVyZXE9JDEKKwkJc2hpZnQKKwllc2FjCisJZGVzYz0icmVmIG5hbWUgJyQxJyBpcyBpbnZhbGlkJHsyOisgd2l0aCBvcHRpb25zICQyfSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwcmVyZXEgIiRkZXNjIiAiCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1yZWYtZm9ybWF0ICQyICckMScKKwkiCit9CisKK2ludmFsaWRfcmVmICcnCitpbnZhbGlkX3JlZiAhTUlOR1cgJy8nCitpbnZhbGlkX3JlZiAhTUlOR1cgJy8nIC0tYWxsb3ctb25lbGV2ZWwKK2ludmFsaWRfcmVmICFNSU5HVyAnLycgLS1ub3JtYWxpemUKK2ludmFsaWRfcmVmICFNSU5HVyAnLycgJy0tYWxsb3ctb25lbGV2ZWwgLS1ub3JtYWxpemUnCit2YWxpZF9yZWYgJ2Zvby9iYXIvYmF6JwordmFsaWRfcmVmICdmb28vYmFyL2JheicgLS1ub3JtYWxpemUKK2ludmFsaWRfcmVmICdyZWZzLy8vaGVhZHMvZm9vJwordmFsaWRfcmVmICdyZWZzLy8vaGVhZHMvZm9vJyAtLW5vcm1hbGl6ZQoraW52YWxpZF9yZWYgJ2hlYWRzL2Zvby8nCitpbnZhbGlkX3JlZiAhTUlOR1cgJy9oZWFkcy9mb28nCit2YWxpZF9yZWYgIU1JTkdXICcvaGVhZHMvZm9vJyAtLW5vcm1hbGl6ZQoraW52YWxpZF9yZWYgJy8vL2hlYWRzL2ZvbycKK3ZhbGlkX3JlZiAnLy8vaGVhZHMvZm9vJyAtLW5vcm1hbGl6ZQoraW52YWxpZF9yZWYgJy4vZm9vJworaW52YWxpZF9yZWYgJy4vZm9vL2JhcicKK2ludmFsaWRfcmVmICdmb28vLi9iYXInCitpbnZhbGlkX3JlZiAnZm9vL2Jhci8uJworaW52YWxpZF9yZWYgJy5yZWZzL2ZvbycKK2ludmFsaWRfcmVmICdyZWZzL2hlYWRzL2Zvby4nCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vLi5iYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vP2JhcicKK3ZhbGlkX3JlZiAnZm9vLi9iYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vLmxvY2snCitpbnZhbGlkX3JlZiAnaGVhZHMvLy9mb28ubG9jaycKK2ludmFsaWRfcmVmICdmb28ubG9jay9iYXInCitpbnZhbGlkX3JlZiAnZm9vLmxvY2svLy9iYXInCit2YWxpZF9yZWYgJ2hlYWRzL2Zvb0BiYXInCitpbnZhbGlkX3JlZiAnaGVhZHMvdkB7YXRpb24nCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vXGJhcicKK2ludmFsaWRfcmVmICIkKHByaW50ZiAnaGVhZHMvZm9vXHQnKSIKK2ludmFsaWRfcmVmICIkKHByaW50ZiAnaGVhZHMvZm9vXDE3NycpIgordmFsaWRfcmVmICIkKHByaW50ZiAnaGVhZHMvZnVcMzAzXDIzNycpIgordmFsaWRfcmVmICdoZWFkcy8qZm9vL2JhcicgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAnaGVhZHMvZm9vKi9iYXInIC0tcmVmc3BlYy1wYXR0ZXJuCit2YWxpZF9yZWYgJ2hlYWRzL2Yqby9iYXInIC0tcmVmc3BlYy1wYXR0ZXJuCitpbnZhbGlkX3JlZiAnaGVhZHMvZipvKi9iYXInIC0tcmVmc3BlYy1wYXR0ZXJuCitpbnZhbGlkX3JlZiAnaGVhZHMvZm9vKi9iYXIqJyAtLXJlZnNwZWMtcGF0dGVybgorCityZWY9J2ZvbycKK2ludmFsaWRfcmVmICIkcmVmIgordmFsaWRfcmVmICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1ub3JtYWxpemUKK3ZhbGlkX3JlZiAiJHJlZiIgJy0tYWxsb3ctb25lbGV2ZWwgLS1ub3JtYWxpemUnCisKK3JlZj0nZm9vL2JhcicKK3ZhbGlkX3JlZiAiJHJlZiIKK3ZhbGlkX3JlZiAiJHJlZiIgLS1hbGxvdy1vbmVsZXZlbAordmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgordmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKK3ZhbGlkX3JlZiAiJHJlZiIgLS1ub3JtYWxpemUKKworcmVmPSdmb28vKicKK2ludmFsaWRfcmVmICIkcmVmIgoraW52YWxpZF9yZWYgIiRyZWYiIC0tYWxsb3ctb25lbGV2ZWwKK3ZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCisKK3JlZj0nKi9mb28nCitpbnZhbGlkX3JlZiAiJHJlZiIKK2ludmFsaWRfcmVmICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCit2YWxpZF9yZWYgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCit2YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJworaW52YWxpZF9yZWYgIiRyZWYiIC0tbm9ybWFsaXplCit2YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLW5vcm1hbGl6ZScKKworcmVmPSdmb28vKi9iYXInCitpbnZhbGlkX3JlZiAiJHJlZiIKK2ludmFsaWRfcmVmICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCit2YWxpZF9yZWYgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCit2YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJworCityZWY9JyonCitpbnZhbGlkX3JlZiAiJHJlZiIKK2ludmFsaWRfcmVmICIkcmVmIiAtLWFsbG93LW9uZWxldmVsCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK3ZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCisKK3JlZj0nZm9vLyovKicKK2ludmFsaWRfcmVmICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgoraW52YWxpZF9yZWYgIiRyZWYiICctLXJlZnNwZWMtcGF0dGVybiAtLWFsbG93LW9uZWxldmVsJworCityZWY9JyovZm9vLyonCitpbnZhbGlkX3JlZiAiJHJlZiIgLS1yZWZzcGVjLXBhdHRlcm4KK2ludmFsaWRfcmVmICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKKworcmVmPScqLyovZm9vJworaW52YWxpZF9yZWYgIiRyZWYiIC0tcmVmc3BlYy1wYXR0ZXJuCitpbnZhbGlkX3JlZiAiJHJlZiIgJy0tcmVmc3BlYy1wYXR0ZXJuIC0tYWxsb3ctb25lbGV2ZWwnCisKK3JlZj0nL2ZvbycKK2ludmFsaWRfcmVmICFNSU5HVyAiJHJlZiIKK2ludmFsaWRfcmVmICFNSU5HVyAiJHJlZiIgLS1hbGxvdy1vbmVsZXZlbAoraW52YWxpZF9yZWYgIU1JTkdXICIkcmVmIiAtLXJlZnNwZWMtcGF0dGVybgoraW52YWxpZF9yZWYgIU1JTkdXICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCcKK2ludmFsaWRfcmVmICFNSU5HVyAiJHJlZiIgLS1ub3JtYWxpemUKK3ZhbGlkX3JlZiAhTUlOR1cgIiRyZWYiICctLWFsbG93LW9uZWxldmVsIC0tbm9ybWFsaXplJworaW52YWxpZF9yZWYgIU1JTkdXICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1ub3JtYWxpemUnCit2YWxpZF9yZWYgIU1JTkdXICIkcmVmIiAnLS1yZWZzcGVjLXBhdHRlcm4gLS1hbGxvdy1vbmVsZXZlbCAtLW5vcm1hbGl6ZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2stcmVmLWZvcm1hdCAtLWJyYW5jaCBAey0xfSIgJworCVQ9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlzaGExPSQoZWNobyBBIHwgZ2l0IGNvbW1pdC10cmVlICRUKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRzaGExICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJHNoYTEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG9yaWdpbi9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJcmVmbmFtZT0kKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTF9KSAmJgorCXRlc3QgIiRyZWZuYW1lIiA9ICIkc2hhMSIgJiYKKwlyZWZuYW1lMj0kKGdpdCBjaGVjay1yZWYtZm9ybWF0IC0tYnJhbmNoIEB7LTJ9KSAmJgorCXRlc3QgIiRyZWZuYW1lMiIgPSBtYXN0ZXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggZnJvbSBzdWJkaXInICcKKwlta2RpciBzdWJkaXIgJiYKKworCVQ9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlzaGExPSQoZWNobyBBIHwgZ2l0IGNvbW1pdC10cmVlICRUKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRzaGExICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJHNoYTEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG9yaWdpbi9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJcmVmbmFtZT0kKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1icmFuY2ggQHstMX0KKwkpICYmCisJdGVzdCAiJHJlZm5hbWUiID0gIiRzaGExIgorJworCit2YWxpZF9yZWZfbm9ybWFsaXplZCgpIHsKKwlwcmVyZXE9CisJY2FzZSAkMSBpbgorCVtBLVohXSopCisJCXByZXJlcT0kMQorCQlzaGlmdAorCWVzYWMKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwcmVyZXEgInJlZiBuYW1lICckMScgc2ltcGxpZmllcyB0byAnJDInIiAiCisJCXJlZm5hbWU9XCQoZ2l0IGNoZWNrLXJlZi1mb3JtYXQgLS1ub3JtYWxpemUgJyQxJykgJiYKKwkJdGVzdCBcIlwkcmVmbmFtZVwiID0gJyQyJworCSIKK30KK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQoKSB7CisJcHJlcmVxPQorCWNhc2UgJDEgaW4KKwlbQS1aIV0qKQorCQlwcmVyZXE9JDEKKwkJc2hpZnQKKwllc2FjCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAkcHJlcmVxICJjaGVjay1yZWYtZm9ybWF0IC0tbm9ybWFsaXplIHJlamVjdHMgJyQxJyIgIgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stcmVmLWZvcm1hdCAtLW5vcm1hbGl6ZSAnJDEnCisJIgorfQorCit2YWxpZF9yZWZfbm9ybWFsaXplZCAnaGVhZHMvZm9vJyAnaGVhZHMvZm9vJwordmFsaWRfcmVmX25vcm1hbGl6ZWQgJ3JlZnMvLy9oZWFkcy9mb28nICdyZWZzL2hlYWRzL2ZvbycKK3ZhbGlkX3JlZl9ub3JtYWxpemVkICFNSU5HVyAnL2hlYWRzL2ZvbycgJ2hlYWRzL2ZvbycKK3ZhbGlkX3JlZl9ub3JtYWxpemVkICcvLy9oZWFkcy9mb28nICdoZWFkcy9mb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdmb28nCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICFNSU5HVyAnL2ZvbycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzL2Zvby8uLi9iYXInCitpbnZhbGlkX3JlZl9ub3JtYWxpemVkICdoZWFkcy8uL2ZvbycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzXGZvbycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2hlYWRzL2Zvby5sb2NrJworaW52YWxpZF9yZWZfbm9ybWFsaXplZCAnaGVhZHMvLy9mb28ubG9jaycKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2Zvby5sb2NrL2JhcicKK2ludmFsaWRfcmVmX25vcm1hbGl6ZWQgJ2Zvby5sb2NrLy8vYmFyJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MDMtc2hvdy1yZWYuc2ggYi90L3QxNDAzLXNob3ctcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlMTBiY2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDAzLXNob3ctcmVmLnNoCkBAIC0wLDAgKzEsMTY3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc2hvdy1yZWYnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgQSAmJgorCWdpdCB0YWcgLWYgLWEgLW0gImFubm90YXRlZCBBIiBBICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJZ2l0IHRhZyAtZiAtYSAtbSAiYW5ub3RhdGVkIEIiIEIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgQyAmJgorCWdpdCBicmFuY2ggQiBBXjAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYnICcKKwllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQSkgcmVmcy90YWdzL0EgPmV4cGVjdCAmJgorCisJZ2l0IHNob3ctcmVmIEEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiB0YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiByZWZzL3RhZ3MvQSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJPmV4cGVjdCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIEQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYgLXEnICcKKwk+ZXhwZWN0ICYmCisKKwlnaXQgc2hvdy1yZWYgLXEgQSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1xIHRhZ3MvQSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1xIHJlZnMvdGFncy9BID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLXEgRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93LXJlZiAtLXZlcmlmeScgJworCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9BKSByZWZzL3RhZ3MvQSA+ZXhwZWN0ICYmCisKKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy90YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCT5leHBlY3QgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSBBID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgdGFncy9BID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93LXJlZiAtLXZlcmlmeSAtcScgJworCT5leHBlY3QgJiYKKworCWdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSByZWZzL3RhZ3MvQSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC1xIEEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSB0YWdzL0EgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSAtcSBEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctcmVmIC1kJyAnCisJeworCQllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQSkgcmVmcy90YWdzL0EgJiYKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0FeMCkgInJlZnMvdGFncy9BXnt9IgorCQllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL3RhZ3MvQykgcmVmcy90YWdzL0MKKwl9ID5leHBlY3QgJiYKKwlnaXQgc2hvdy1yZWYgLWQgQSBDID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgc2hvdy1yZWYgLWQgdGFncy9BIHRhZ3MvQyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1kIHJlZnMvdGFncy9BIHJlZnMvdGFncy9DID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBzaG93LXJlZiAtZCBtYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiAtZCBoZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBzaG93LXJlZiAtZCByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHNob3ctcmVmIC1kIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwk+ZXhwZWN0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLWQgLS12ZXJpZnkgbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLWQgLS12ZXJpZnkgaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy1yZWYgLS1oZWFkcywgLS10YWdzLCAtLWhlYWQsIHBhdHRlcm4nICcKKwlmb3IgYnJhbmNoIGluIEIgbWFzdGVyIHNpZGUKKwlkbworCQllY2hvICQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzLyRicmFuY2gpIHJlZnMvaGVhZHMvJGJyYW5jaAorCWRvbmUgPmV4cGVjdC5oZWFkcyAmJgorCWdpdCBzaG93LXJlZiAtLWhlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuaGVhZHMgYWN0dWFsICYmCisKKwlmb3IgdGFnIGluIEEgQiBDCisJZG8KKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzLyR0YWcpIHJlZnMvdGFncy8kdGFnCisJZG9uZSA+ZXhwZWN0LnRhZ3MgJiYKKwlnaXQgc2hvdy1yZWYgLS10YWdzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QudGFncyBhY3R1YWwgJiYKKworCWNhdCBleHBlY3QuaGVhZHMgZXhwZWN0LnRhZ3MgPmV4cGVjdCAmJgorCWdpdCBzaG93LXJlZiAtLWhlYWRzIC0tdGFncyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJeworCQllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEKSBIRUFEICYmCisJCWNhdCBleHBlY3QuaGVhZHMgZXhwZWN0LnRhZ3MKKwl9ID5leHBlY3QgJiYKKwlnaXQgc2hvdy1yZWYgLS1oZWFkcyAtLXRhZ3MgLS1oZWFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl7CisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUQpIEhFQUQgJiYKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9CKSByZWZzL2hlYWRzL0IKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0IpIHJlZnMvdGFncy9CCisJfSA+ZXhwZWN0ICYmCisJZ2l0IHNob3ctcmVmIC0taGVhZCBCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwl7CisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUQpIEhFQUQgJiYKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9CKSByZWZzL2hlYWRzL0IKKwkJZWNobyAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL0IpIHJlZnMvdGFncy9CCisJCWVjaG8gJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9CXjApICJyZWZzL3RhZ3MvQl57fSIKKwl9ID5leHBlY3QgJiYKKwlnaXQgc2hvdy1yZWYgLS1oZWFkIC1kIEIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDA0LXVwZGF0ZS1yZWYtZGYtY29uZmxpY3RzLnNoIGIvdC90MTQwNC11cGRhdGUtcmVmLWRmLWNvbmZsaWN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NmJhZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTQwNC11cGRhdGUtcmVmLWRmLWNvbmZsaWN0cy5zaApAQCAtMCwwICsxLDEwNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHVwZGF0ZS1yZWYgd2l0aCBEL0YgY29uZmxpY3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfdXBkYXRlX3JlamVjdGVkICgpIHsKKwlwcmVmaXg9IiQxIiAmJgorCWJlZm9yZT0iJDIiICYmCisJcGFjaz0iJDMiICYmCisJY3JlYXRlPSIkNCIgJiYKKwllcnJvcj0iJDUiICYmCisJcHJpbnRmICJjcmVhdGUgJHByZWZpeC8lcyAkQ1xuIiAkYmVmb3JlIHwKKwlnaXQgdXBkYXRlLXJlZiAtLXN0ZGluICYmCisJZ2l0IGZvci1lYWNoLXJlZiAkcHJlZml4ID51bmNoYW5nZWQgJiYKKwlpZiAkcGFjaworCXRoZW4KKwkJZ2l0IHBhY2stcmVmcyAtLWFsbAorCWZpICYmCisJcHJpbnRmICJjcmVhdGUgJHByZWZpeC8lcyAkQ1xuIiAkY3JlYXRlID5pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPGlucHV0IDI+b3V0cHV0LmVyciAmJgorCWdyZXAgLUYgIiRlcnJvciIgb3V0cHV0LmVyciAmJgorCWdpdCBmb3ItZWFjaC1yZWYgJHByZWZpeCA+YWN0dWFsICYmCisJdGVzdF9jbXAgdW5jaGFuZ2VkIGFjdHVhbAorfQorCitRPSInIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIEluaXRpYWwgJiYKKwlDPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIGxvb3NlIHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgbmV3JyAnCisKKwlwcmVmaXg9cmVmcy8xbCAmJgorCXRlc3RfdXBkYXRlX3JlamVjdGVkICRwcmVmaXggImEgYyBlIiBmYWxzZSAiYiBjL3ggZCIgXAorCQkiJFEkcHJlZml4L2MkUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFEkcHJlZml4L2MveCRRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIHBhY2tlZCByZWYgaXMgYSBzaW1wbGUgcHJlZml4IG9mIG5ldycgJworCisJcHJlZml4PXJlZnMvMXAgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAkcHJlZml4ICJhIGMgZSIgdHJ1ZSAiYiBjL3ggZCIgXAorCQkiJFEkcHJlZml4L2MkUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFEkcHJlZml4L2MveCRRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0aW5nIGxvb3NlIHJlZiBpcyBhIGRlZXBlciBwcmVmaXggb2YgbmV3JyAnCisKKwlwcmVmaXg9cmVmcy8ybCAmJgorCXRlc3RfdXBkYXRlX3JlamVjdGVkICRwcmVmaXggImEgYyBlIiBmYWxzZSAiYiBjL3gveSBkIiBcCisJCSIkUSRwcmVmaXgvYyRRIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAkUSRwcmVmaXgvYy94L3kkUSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGluZyBwYWNrZWQgcmVmIGlzIGEgZGVlcGVyIHByZWZpeCBvZiBuZXcnICcKKworCXByZWZpeD1yZWZzLzJwICYmCisJdGVzdF91cGRhdGVfcmVqZWN0ZWQgJHByZWZpeCAiYSBjIGUiIHRydWUgImIgYy94L3kgZCIgXAorCQkiJFEkcHJlZml4L2MkUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFEkcHJlZml4L2MveC95JFEiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgZXhpc3RpbmcgbG9vc2UnICcKKworCXByZWZpeD1yZWZzLzNsICYmCisJdGVzdF91cGRhdGVfcmVqZWN0ZWQgJHByZWZpeCAiYSBjL3ggZSIgZmFsc2UgImIgYyBkIiBcCisJCSIkUSRwcmVmaXgvYy94JFEgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICRRJHByZWZpeC9jJFEiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgZXhpc3RpbmcgcGFja2VkJyAnCisKKwlwcmVmaXg9cmVmcy8zcCAmJgorCXRlc3RfdXBkYXRlX3JlamVjdGVkICRwcmVmaXggImEgYy94IGUiIHRydWUgImIgYyBkIiBcCisJCSIkUSRwcmVmaXgvYy94JFEgZXhpc3RzOyBjYW5ub3QgY3JlYXRlICRRJHByZWZpeC9jJFEiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlZiBpcyBhIGRlZXBlciBwcmVmaXggb2YgZXhpc3RpbmcgbG9vc2UnICcKKworCXByZWZpeD1yZWZzLzRsICYmCisJdGVzdF91cGRhdGVfcmVqZWN0ZWQgJHByZWZpeCAiYSBjL3gveSBlIiBmYWxzZSAiYiBjIGQiIFwKKwkJIiRRJHByZWZpeC9jL3gveSRRIGV4aXN0czsgY2Fubm90IGNyZWF0ZSAkUSRwcmVmaXgvYyRRIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyByZWYgaXMgYSBkZWVwZXIgcHJlZml4IG9mIGV4aXN0aW5nIHBhY2tlZCcgJworCisJcHJlZml4PXJlZnMvNHAgJiYKKwl0ZXN0X3VwZGF0ZV9yZWplY3RlZCAkcHJlZml4ICJhIGMveC95IGUiIHRydWUgImIgYyBkIiBcCisJCSIkUSRwcmVmaXgvYy94L3kkUSBleGlzdHM7IGNhbm5vdCBjcmVhdGUgJFEkcHJlZml4L2MkUSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmUgbmV3IHJlZiBpcyBhIHNpbXBsZSBwcmVmaXggb2YgYW5vdGhlcicgJworCisJcHJlZml4PXJlZnMvNSAmJgorCXRlc3RfdXBkYXRlX3JlamVjdGVkICRwcmVmaXggImEgZSIgZmFsc2UgImIgYyBjL3ggZCIgXAorCQkiY2Fubm90IHByb2Nlc3MgJFEkcHJlZml4L2MkUSBhbmQgJFEkcHJlZml4L2MveCRRIGF0IHRoZSBzYW1lIHRpbWUiCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDEwLXJlZmxvZy5zaCBiL3QvdDE0MTAtcmVmbG9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3OTA0OWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDEwLXJlZmxvZy5zaApAQCAtMCwwICsxLDMyOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHBydW5lIGFuZCByZWZsb2cgZXhwaXJhdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19oYXZlICgpIHsKKwlnYWFoPSAmJgorCWZvciBOIGluICIkQCIKKwlkbworCQlldmFsICJvPVwkJE4iICYmIGdpdCBjYXQtZmlsZSAtdCAkbyB8fCB7CisJCQllY2hvIEdhYWggJE4KKwkJCWdhYWg9JE4KKwkJCWJyZWFrCisJCX0KKwlkb25lICYmCisJdGVzdCAteiAiJGdhYWgiCit9CisKK2NoZWNrX2ZzY2sgKCkgeworCW91dHB1dD0kKGdpdCBmc2NrIC0tZnVsbCkKKwljYXNlICIkMSIgaW4KKwknJykKKwkJdGVzdCAteiAiJG91dHB1dCIgOzsKKwkqKQorCQllY2hvICIkb3V0cHV0IiB8IGdyZXAgIiQxIiA7OworCWVzYWMKK30KKworY29ycnVwdCAoKSB7CisJYWE9JHsxJT8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/fSB6ej0kezEjPz99CisJbXYgLmdpdC9vYmplY3RzLyRhYS8kenogLmdpdC8kYWEkenoKK30KKworcmVjb3ZlciAoKSB7CisJYWE9JHsxJT8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/fSB6ej0kezEjPz99CisJbWtkaXIgLXAgLmdpdC9vYmplY3RzLyRhYQorCW12IC5naXQvJGFhJHp6IC5naXQvb2JqZWN0cy8kYWEvJHp6Cit9CisKK2NoZWNrX2RvbnRfaGF2ZSAoKSB7CisJZ2FhaD0gJiYKKwlmb3IgTiBpbiAiJEAiCisJZG8KKwkJZXZhbCAibz1cJCROIgorCQlnaXQgY2F0LWZpbGUgLXQgJG8gJiYgeworCQkJZWNobyBHYWFoICROCisJCQlnYWFoPSROCisJCQlicmVhaworCQl9CisJZG9uZQorCXRlc3QgLXogIiRnYWFoIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciAtcCBBL0IgJiYKKwllY2hvIHJhdCA+QyAmJgorCWVjaG8gb3ggPkEvRCAmJgorCWVjaG8gdGlnZXIgPkEvQi9FICYmCisJZ2l0IGFkZCAuICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSByYWJiaXQgJiYKKwlIPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURgICYmCisJQT1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOkFgICYmCisJQj1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOkEvQmAgJiYKKwlDPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6Q2AgJiYKKwlEPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6QS9EYCAmJgorCUU9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpBL0IvRWAgJiYKKwljaGVja19mc2NrICYmCisKKwl0ZXN0X2NobW9kICt4IEMgJiYKKwlnaXQgYWRkIEMgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBkcmFnb24gJiYKKwlMPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURgICYmCisJY2hlY2tfZnNjayAmJgorCisJcm0gLWYgQyBBL0IvRSAmJgorCWVjaG8gc25ha2UgPkYgJiYKKwllY2hvIGhvcnNlID5BL0cgJiYKKwlnaXQgYWRkIEYgQS9HICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gc2hlZXAgJiYKKwlGPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6RmAgJiYKKwlHPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6QS9HYCAmJgorCUk9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpBYCAmJgorCUo9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRGAgJiYKKwljaGVja19mc2NrICYmCisKKwlybSAtZiBBL0cgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSBtb25rZXkgJiYKKwlLPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURgICYmCisJY2hlY2tfZnNjayAmJgorCisJY2hlY2tfaGF2ZSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCAmJgorCisJZ2l0IHBydW5lICYmCisKKwljaGVja19oYXZlIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMICYmCisKKwljaGVja19mc2NrICYmCisKKwlnaXQgcmVmbG9nIHJlZnMvaGVhZHMvbWFzdGVyID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHJld2luZCAnCisJdGVzdF90aWNrICYmIGdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCisJdGVzdCAtZiBDICYmCisJdGVzdCAtZiBBL0IvRSAmJgorCSEgdGVzdCAtZiBGICYmCisJISB0ZXN0IC1mIEEvRyAmJgorCisJY2hlY2tfaGF2ZSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCAmJgorCisJZ2l0IHBydW5lICYmCisKKwljaGVja19oYXZlIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMICYmCisKKwlnaXQgcmVmbG9nIHJlZnMvaGVhZHMvbWFzdGVyID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA1IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JydXB0IGFuZCBjaGVjaycgJworCisJY29ycnVwdCAkRiAmJgorCWNoZWNrX2ZzY2sgIm1pc3NpbmcgYmxvYiAkRiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgZXhwaXJlIC0tZHJ5LXJ1biBzaG91bGQgbm90IHRvdWNoIHJlZmxvZycgJworCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1kcnktcnVuIFwKKwkJLS1leHBpcmU9JCgoJHRlc3RfdGljayAtIDEwMDAwKSkgXAorCQktLWV4cGlyZS11bnJlYWNoYWJsZT0kKCgkdGVzdF90aWNrIC0gMTAwMDApKSBcCisJCS0tc3RhbGUtZml4IFwKKwkJLS1hbGwgJiYKKworCWdpdCByZWZsb2cgcmVmcy9oZWFkcy9tYXN0ZXIgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgb3V0cHV0ICYmCisKKwljaGVja19mc2NrICJtaXNzaW5nIGJsb2IgJEYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBleHBpcmUnICcKKworCWdpdCByZWZsb2cgZXhwaXJlIC0tdmVyYm9zZSBcCisJCS0tZXhwaXJlPSQoKCR0ZXN0X3RpY2sgLSAxMDAwMCkpIFwKKwkJLS1leHBpcmUtdW5yZWFjaGFibGU9JCgoJHRlc3RfdGljayAtIDEwMDAwKSkgXAorCQktLXN0YWxlLWZpeCBcCisJCS0tYWxsICYmCisKKwlnaXQgcmVmbG9nIHJlZnMvaGVhZHMvbWFzdGVyID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIG91dHB1dCAmJgorCisJY2hlY2tfZnNjayAiZGFuZ2xpbmcgY29tbWl0ICRLIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBhbmQgZnNjaycgJworCisJZ2l0IHBydW5lICYmCisJY2hlY2tfZnNjayAmJgorCisJY2hlY2tfaGF2ZSBBIEIgQyBEIEUgSCBMICYmCisJY2hlY2tfZG9udF9oYXZlIEYgRyBJIEogSworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY292ZXIgYW5kIGNoZWNrJyAnCisKKwlyZWNvdmVyICRGICYmCisJY2hlY2tfZnNjayAiZGFuZ2xpbmcgYmxvYiAkRiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGUnICcKKwllY2hvIDEgPiBDICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByYXQgQyAmJgorCisJZWNobyAyID4gQyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gb3ggQyAmJgorCisJZWNobyAzID4gQyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGlnZXIgQyAmJgorCisJSEVBRF9lbnRyeV9jb3VudD0kKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKKwltYXN0ZXJfZW50cnlfY291bnQ9JChnaXQgcmVmbG9nIHNob3cgbWFzdGVyIHwgd2MgLWwpICYmCisKKwl0ZXN0ICRIRUFEX2VudHJ5X2NvdW50ID0gNSAmJgorCXRlc3QgJG1hc3Rlcl9lbnRyeV9jb3VudCA9IDUgJiYKKworCisJZ2l0IHJlZmxvZyBkZWxldGUgbWFzdGVyQHsxfSAmJgorCWdpdCByZWZsb2cgc2hvdyBtYXN0ZXIgPiBvdXRwdXQgJiYKKwl0ZXN0ICQoKCRtYXN0ZXJfZW50cnlfY291bnQgLSAxKSkgPSAkKHdjIC1sIDwgb3V0cHV0KSAmJgorCXRlc3QgJEhFQURfZW50cnlfY291bnQgPSAkKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKKwkhIGdyZXAgb3ggPCBvdXRwdXQgJiYKKworCW1hc3Rlcl9lbnRyeV9jb3VudD0kKHdjIC1sIDwgb3V0cHV0KSAmJgorCisJZ2l0IHJlZmxvZyBkZWxldGUgSEVBREB7MX0gJiYKKwl0ZXN0ICQoKCRIRUFEX2VudHJ5X2NvdW50IC0xKSkgPSAkKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKKwl0ZXN0ICRtYXN0ZXJfZW50cnlfY291bnQgPSAkKGdpdCByZWZsb2cgc2hvdyBtYXN0ZXIgfCB3YyAtbCkgJiYKKworCUhFQURfZW50cnlfY291bnQ9JChnaXQgcmVmbG9nIHwgd2MgLWwpICYmCisKKwlnaXQgcmVmbG9nIGRlbGV0ZSBtYXN0ZXJAezA3LjA0LjIwMDUuMTU6MTU6MDAuLTA3MDB9ICYmCisJZ2l0IHJlZmxvZyBzaG93IG1hc3RlciA+IG91dHB1dCAmJgorCXRlc3QgJCgoJG1hc3Rlcl9lbnRyeV9jb3VudCAtIDEpKSA9ICQod2MgLWwgPCBvdXRwdXQpICYmCisJISBncmVwIGRyYWdvbiA8IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld2luZDInICcKKworCXRlc3RfdGljayAmJiBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MiAmJgorCWdpdCByZWZsb2cgcmVmcy9oZWFkcy9tYXN0ZXIgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZXhwaXJlPW5ldmVyJyAnCisKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLXZlcmJvc2UgXAorCQktLWV4cGlyZT1uZXZlciBcCisJCS0tZXhwaXJlLXVucmVhY2hhYmxlPW5ldmVyIFwKKwkJLS1hbGwgJiYKKwlnaXQgcmVmbG9nIHJlZnMvaGVhZHMvbWFzdGVyID5vdXRwdXQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYy5yZWZsb2dleHBpcmU9bmV2ZXInICcKKworCWdpdCBjb25maWcgZ2MucmVmbG9nZXhwaXJlIG5ldmVyICYmCisJZ2l0IGNvbmZpZyBnYy5yZWZsb2dleHBpcmV1bnJlYWNoYWJsZSBuZXZlciAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tdmVyYm9zZSAtLWFsbCAmJgorCWdpdCByZWZsb2cgcmVmcy9oZWFkcy9tYXN0ZXIgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djLnJlZmxvZ2V4cGlyZT1mYWxzZScgJworCisJZ2l0IGNvbmZpZyBnYy5yZWZsb2dleHBpcmUgZmFsc2UgJiYKKwlnaXQgY29uZmlnIGdjLnJlZmxvZ2V4cGlyZXVucmVhY2hhYmxlIGZhbHNlICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS12ZXJib3NlIC0tYWxsICYmCisJZ2l0IHJlZmxvZyByZWZzL2hlYWRzL21hc3RlciA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gNCBvdXRwdXQgJiYKKworCWdpdCBjb25maWcgLS11bnNldCBnYy5yZWZsb2dleHBpcmUgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgZ2MucmVmbG9nZXhwaXJldW5yZWFjaGFibGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBzaG91bGQgbm90IGRlbGV0ZSBsb2cgZm9yIHBhY2tlZCByZWYnICcKKwl0ZXN0ICQoZ2l0IHJlZmxvZyBtYXN0ZXIgfCB3YyAtbCkgPSA0ICYmCisJZ2l0IGJyYW5jaCBmb28gJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IGNoZWNrb3V0IGZvbyAmJgorCXRlc3QgJChnaXQgcmVmbG9nIG1hc3RlciB8IHdjIC1sKSA9IDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhbGUgZGlycyBkbyBub3QgY2F1c2UgZC9mIGNvbmZsaWN0cyAocmVmbG9ncyBvbiknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLWQgb25lIHx8IGdpdCBicmFuY2ggLWQgb25lL3R3byIgJiYKKworCWdpdCBicmFuY2ggb25lL3R3byBtYXN0ZXIgJiYKKwllY2hvICJvbmUvdHdvQHswfSBicmFuY2g6IENyZWF0ZWQgZnJvbSBtYXN0ZXIiID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiBvbmUvdHdvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGJyYW5jaCAtZCBvbmUvdHdvICYmCisKKwkjIG5vdyBsb2dzL3JlZnMvaGVhZHMvb25lIGlzIGEgc3RhbGUgZGlyZWN0b3J5LCBidXQKKwkjIHdlIHNob3VsZCBtb3ZlIGl0IG91dCBvZiB0aGUgd2F5IHRvIGNyZWF0ZSAib25lIiByZWZsb2cKKwlnaXQgYnJhbmNoIG9uZSBtYXN0ZXIgJiYKKwllY2hvICJvbmVAezB9IGJyYW5jaDogQ3JlYXRlZCBmcm9tIG1hc3RlciIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVnZCAlZ3MiIG9uZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFsZSBkaXJzIGRvIG5vdCBjYXVzZSBkL2YgY29uZmxpY3RzIChyZWZsb2dzIG9mZiknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLWQgb25lIHx8IGdpdCBicmFuY2ggLWQgb25lL3R3byIgJiYKKworCWdpdCBicmFuY2ggb25lL3R3byBtYXN0ZXIgJiYKKwllY2hvICJvbmUvdHdvQHswfSBicmFuY2g6IENyZWF0ZWQgZnJvbSBtYXN0ZXIiID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiBvbmUvdHdvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGJyYW5jaCAtZCBvbmUvdHdvICYmCisKKwkjIHNhbWUgYXMgYmVmb3JlLCBidXQgd2Ugb25seSBjcmVhdGUgYSByZWZsb2cgZm9yICJvbmUiIGlmCisJIyBpdCBhbHJlYWR5IGV4aXN0cywgd2hpY2ggaXQgZG9lcyBub3QKKwlnaXQgLWMgY29yZS5sb2dhbGxyZWZ1cGRhdGVzPWZhbHNlIGJyYW5jaCBvbmUgbWFzdGVyICYmCisJOiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVncyIgb25lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVHJpZ2dlcmluZyB0aGUgYnVnIGRldGVjdGVkIGJ5IHRoaXMgdGVzdCByZXF1aXJlcyBhIG5ld2xpbmUgdG8gZmFsbAorIyBleGFjdGx5IEJVRlNJWi0xIGJ5dGVzIGZyb20gdGhlIGVuZCBvZiB0aGUgZmlsZS4gV2UgZG9uJ3Qga25vdworIyB3aGF0IHRoYXQgdmFsdWUgaXMsIHNpbmNlIGl0J3MgcGxhdGZvcm0gZGVwZW5kZW50LiBIb3dldmVyLCBpZgorIyB3ZSBjaG9vc2Ugc29tZSB2YWx1ZSBOLCB3ZSBhbHNvIGNhdGNoIGFueSBEIHdoaWNoIGRpdmlkZXMgTiBldmVubHkKKyMgKHNpbmNlIHdlIHdpbGwgcmVhZCBiYWNrd2FyZHMgaW4gY2h1bmtzIG9mIEQpLiBTbyB3ZSBjaG9vc2UgOEssCisjIHdoaWNoIGNhdGNoZXMgZ2xpYmMgKHdpdGggYW4gOEsgQlVGU0laKSBhbmQgKkJTRCAoMUspLgorIworIyBFYWNoIGxpbmUgaXMgMTE0IGNoYXJhY3RlcnMsIHNvIHdlIG5lZWQgNzUgdG8gc3RpbGwgaGF2ZSBhIGZldyBiZWZvcmUgdGhlCisjIGxhc3QgOEsuIFRoZSA4OS1jaGFyYWN0ZXIgcGFkZGluZyBvbiB0aGUgZmluYWwgZW50cnkgbGluZXMgdXAgb3VyCisjIG5ld2xpbmUgZXhhY3RseS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnNpbmcgcmV2ZXJzZSByZWZsb2dzIGF0IEJVRlNJWiBib3VuZGFyaWVzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHJlZmxvZ3NraXAgJiYKKwl6Mzg9MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgJiYKKwlpZGVudD0iYWJjIDx4eXo+IDAwMDAwMDAwMDEgKzAwMDAiICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDc1KTsgZG8KKwkJcHJpbnRmICIkejM4JTAyZCAkejM4JTAyZCAlc1x0IiAkaSAkKCgkaSsxKSkgIiRpZGVudCIgJiYKKwkJaWYgdGVzdCAkaSA9IDc1OyB0aGVuCisJCQlmb3IgaiBpbiAkKHRlc3Rfc2VxIDEgODkpOyBkbworCQkJCXByaW50ZiBYCisJCQlkb25lCisJCWVsc2UKKwkJCXByaW50ZiBYCisJCWZpICYmCisJCXByaW50ZiAiXG4iCisJZG9uZSA+LmdpdC9sb2dzL3JlZnMvaGVhZHMvcmVmbG9nc2tpcCAmJgorCWdpdCByZXYtcGFyc2UgcmVmbG9nc2tpcEB7NzN9ID5hY3R1YWwgJiYKKwllY2hvICR7ejM4fTAzID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQxMS1yZWZsb2ctc2hvdy5zaCBiL3QvdDE0MTEtcmVmbG9nLXNob3cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmFjNzczNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MTEtcmVmbG9nLXNob3cuc2gKQEAgLTAsMCArMSwxNzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlZmxvZyBkaXNwbGF5IHJvdXRpbmVzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworUmVmbG9nOiBIRUFEQHswfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1nIHNob3dzIHJlZmxvZyBoZWFkZXJzJyAnCisJZ2l0IGxvZyAtZyAtMSA+dG1wICYmCisJZ3JlcCBeUmVmbG9nIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworZTQ2NTEzZSBIRUFEQHswfTogY29tbWl0IChpbml0aWFsKTogb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uZWxpbmUgcmVmbG9nIGZvcm1hdCcgJworCWdpdCBsb2cgLWcgLTEgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBkZWZhdWx0IGZvcm1hdCcgJworCWdpdCByZWZsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworY29tbWl0IGU0NjUxM2UKK1JlZmxvZzogSEVBREB7MH0gKEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4pCitSZWZsb2cgbWVzc2FnZTogY29tbWl0IChpbml0aWFsKTogb25lCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisKKyAgICBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGUgcmVmbG9nIGRlZmF1bHQgZm9ybWF0JyAnCisJZ2l0IHJlZmxvZyAtLWZvcm1hdD1zaG9ydCAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitSZWZsb2c6IEhFQURAe1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgQHtub3d9IHN5bnRheCBzaG93cyByZWZsb2cgZGF0ZSAobXVsdGlsaW5lKScgJworCWdpdCBsb2cgLWcgLTEgSEVBREB7bm93fSA+dG1wICYmCisJZ3JlcCBeUmVmbG9nIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworZTQ2NTEzZSBIRUFEQHtUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMH06IGNvbW1pdCAoaW5pdGlhbCk6IG9uZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyBAe25vd30gc3ludGF4IHNob3dzIHJlZmxvZyBkYXRlIChvbmVsaW5lKScgJworCWdpdCBsb2cgLWcgLTEgLS1vbmVsaW5lIEhFQURAe25vd30gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworSEVBREB7VGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDB9CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIEB7bm93fSBzeW50YXggc2hvd3MgcmVmbG9nIGRhdGUgKGZvcm1hdD0lZ2QpJyAnCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgSEVBREB7bm93fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitSZWZsb2c6IEhFQURAe1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgLS1kYXRlPSBzaG93cyByZWZsb2cgZGF0ZSAobXVsdGlsaW5lKScgJworCWdpdCBsb2cgLWcgLTEgLS1kYXRlPWRlZmF1bHQgPnRtcCAmJgorCWdyZXAgXlJlZmxvZyA8dG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK2U0NjUxM2UgSEVBREB7VGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDB9OiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgLS1kYXRlPSBzaG93cyByZWZsb2cgZGF0ZSAob25lbGluZSknICcKKwlnaXQgbG9nIC1nIC0xIC0tb25lbGluZSAtLWRhdGU9ZGVmYXVsdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitIRUFEQHsxMTEyOTExOTkzIC0wNzAwfQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAtLWRhdGU9IHNob3dzIHJlZmxvZyBkYXRlIChmb3JtYXQ9JWdkKScgJworCWdpdCBsb2cgLWcgLTEgLS1mb3JtYXQ9JWdkIC0tZGF0ZT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworUmVmbG9nOiBIRUFEQHswfSAoQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPikKK1JlZmxvZyBtZXNzYWdlOiBjb21taXQgKGluaXRpYWwpOiBvbmUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nLmRhdGUgZG9lcyBub3QgaW52b2tlICItLWRhdGUiIG1hZ2ljIChtdWx0aWxpbmUpJyAnCisJdGVzdF9jb25maWcgbG9nLmRhdGUgcmF3ICYmCisJZ2l0IGxvZyAtZyAtMSA+dG1wICYmCisJZ3JlcCBeUmVmbG9nIDx0bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworZTQ2NTEzZSBIRUFEQHswfTogY29tbWl0IChpbml0aWFsKTogb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5kYXRlIGRvZXMgbm90IGludm9rZSAiLS1kYXRlIiBtYWdpYyAob25lbGluZSknICcKKwl0ZXN0X2NvbmZpZyBsb2cuZGF0ZSByYXcgJiYKKwlnaXQgbG9nIC1nIC0xIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitIRUFEQHswfQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cuZGF0ZSBkb2VzIG5vdCBpbnZva2UgIi0tZGF0ZSIgbWFnaWMgKGZvcm1hdD0lZ2QpJyAnCisJdGVzdF9jb25maWcgbG9nLmRhdGUgcmF3ICYmCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworSEVBREB7MH0KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kYXRlIG1hZ2ljIGRvZXMgbm90IG92ZXJyaWRlIGV4cGxpY2l0IEB7MH0gc3ludGF4JyAnCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgLS1kYXRlPXJhdyBIRUFEQHswfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCis6ID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHJlZmxvZyBmaWxlJyAnCisJZ2l0IGJyYW5jaCBlbXB0eSAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPWFsbCByZWZzL2hlYWRzL2VtcHR5ICYmCisKKwlnaXQgbG9nIC1nIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGhpcyBndWFyZHMgYWdhaW5zdCB0aGUgYWx0ZXJuYXRpdmUgb2Ygc2hvd2luZyB0aGUgZGlmZnMgdnMuIHRoZQorIyByZWZsb2cgYW5jZXN0b3IuICBUaGUgcmVmbG9nIHVzZWQgaXMgZGVzaWduZWQgdG8gbGlzdCB0aGUgY29tbWl0cworIyBtb3JlIHRoYW4gb25jZSwgc28gYXMgdG8gZXhlcmNpc2UgdGhlIGNvcnJlc3BvbmRpbmcgbG9naWMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC1nIC1wIHNob3dzIGRpZmZzIHZzLiBwYXJlbnRzJyAnCisJdGVzdF9jb21taXQgdHdvICYmCisJZ2l0IGJyYW5jaCBmbGlwZmxvcCAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvZmxpcGZsb3AgLW0gZmxpcDEgSEVBRF4gJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2ZsaXBmbG9wIC1tIGZsb3AxIEhFQUQgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2ZsaXBmbG9wIC1tIGZsaXAyIEhFQUReICYmCisJZ2l0IGxvZyAtZyAtcCBmbGlwZmxvcCA+cmVmbG9nICYmCisJZ3JlcCAtdiBeUmVmbG9nIHJlZmxvZyA+YWN0dWFsICYmCisJZ2l0IGxvZyAtMSAtcCBIRUFEXiA+bG9nLm9uZSAmJgorCWdpdCBsb2cgLTEgLXAgSEVBRCA+bG9nLnR3byAmJgorCSgKKwkJY2F0IGxvZy5vbmU7IGVjaG8KKwkJY2F0IGxvZy50d287IGVjaG8KKwkJY2F0IGxvZy5vbmU7IGVjaG8KKwkJY2F0IGxvZy50d28KKwkpID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBleGlzdHMgd29ya3MnICcKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL21hc3RlciAmJgorCSEgZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9ub25leGlzdGVudAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE0MTItcmVmbG9nLWxvb3Auc2ggYi90L3QxNDEyLXJlZmxvZy1sb29wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNhY2Q4OTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNDEyLXJlZmxvZy1sb29wLnNoCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWZsb2cgd2FsayBzaG93cyByZXBlYXRlZCBjb21taXRzIGFnYWluJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbW1pdHMnICcKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJZ2l0IHRhZyBvbmUgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIHR3byAmJgorCWdpdCB0YWcgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlZmxvZyB3aXRoIGFsdGVybmF0aW5nIGNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgJiYKKwlnaXQgcmVzZXQgb25lICYmCisJZ2l0IHJlc2V0IHR3byAmJgorCWdpdCByZXNldCBvbmUgJiYKKwlnaXQgcmVzZXQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZmxvZyBzaG93cyBhbGwgZW50cmllcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJdG9waWNAezB9IHJlc2V0OiBtb3ZpbmcgdG8gdHdvCisJCXRvcGljQHsxfSByZXNldDogbW92aW5nIHRvIG9uZQorCQl0b3BpY0B7Mn0gcmVzZXQ6IG1vdmluZyB0byB0d28KKwkJdG9waWNAezN9IHJlc2V0OiBtb3ZpbmcgdG8gb25lCisJCXRvcGljQHs0fSBicmFuY2g6IENyZWF0ZWQgZnJvbSBIRUFECisJRU9GCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVncyIgdG9waWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDEzLXJlZmxvZy1kZXRhY2guc2ggYi90L3QxNDEzLXJlZmxvZy1kZXRhY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzczMDYwMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MTMtcmVmbG9nLWRldGFjaC5zaApAQCAtMCwwICsxLDcwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZWZsb2cgaW50ZXJhY3Rpb24gd2l0aCBkZXRhY2hlZCBIRUFEJworLiAuL3Rlc3QtbGliLnNoCisKK3Jlc2V0X3N0YXRlICgpIHsKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJY3Agc2F2ZWRfcmVmbG9nIC5naXQvbG9ncy9IRUFECit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHNlY29uZCAmJgorCWNhdCAuZ2l0L2xvZ3MvSEVBRCA+c2F2ZWRfcmVmbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgYmFzZWxpbmUgJworCXJlc2V0X3N0YXRlICYmCisJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgbWFzdGVyXiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggdG8gYnJhbmNoJyAnCisJcmVzZXRfc3RhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIHNpZGUgbWFzdGVyIG1hc3Rlcl4gPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRhY2ggdG8gb3RoZXInICcKKwlyZXNldF9zdGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyIHNpZGUgbWFzdGVyIG1hc3Rlcl4gPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0lSCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRhY2ggdG8gc2VsZicgJworCXJlc2V0X3N0YXRlICYmCisJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgbWFzdGVyIG1hc3Rlcl4gPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0YWNoIHRvIHNlbGYnICcKKwlyZXNldF9zdGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyIG1hc3RlciBtYXN0ZXIgbWFzdGVyXiA+ZXhwZWN0ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0YWNoIHRvIG90aGVyJyAnCisJcmVzZXRfc3RhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIHNpZGUgbWFzdGVyIG1hc3RlciBtYXN0ZXJeID5leHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDIwLWxvc3QtZm91bmQuc2ggYi90L3QxNDIwLWxvc3QtZm91bmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGM5ZTQwMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0MjAtbG9zdC1mb3VuZC5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBmc2NrIC0tbG9zdC1mb3VuZCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyAwICYmCisJOiA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gMSA+IGZpbGUxICYmCisJZWNobyAyID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUxIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwllY2hvIDMgPiBmaWxlMyAmJgorCWdpdCBhZGQgZmlsZTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9zdCBhbmQgZm91bmQgc29tZXRoaW5nJyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEID4gbG9zdC1jb21taXQgJiYKKwlnaXQgcmV2LXBhcnNlIDpmaWxlMyA+IGxvc3Qtb3RoZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGZzY2sgLS1sb3N0LWZvdW5kICYmCisJdGVzdCAyID0gJChscyAuZ2l0L2xvc3QtZm91bmQvKi8qIHwgd2MgLWwpICYmCisJdGVzdCAtZiAuZ2l0L2xvc3QtZm91bmQvY29tbWl0LyQoY2F0IGxvc3QtY29tbWl0KSAmJgorCXRlc3QgLWYgLmdpdC9sb3N0LWZvdW5kL290aGVyLyQoY2F0IGxvc3Qtb3RoZXIpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTQzMC1iYWQtcmVmLW5hbWUuc2ggYi90L3QxNDMwLWJhZC1yZWYtbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNDY1YWJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTQzMC1iYWQtcmVmLW5hbWUuc2gKQEAgLTAsMCArMSwyMjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGhhbmRsaW5nIG9mIHJlZiBuYW1lcyB0aGF0IGNoZWNrLXJlZi1mb3JtYXQgcmVqZWN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1pbXBvcnQ6IGZhaWwgb24gaW52YWxpZCBicmFuY2ggbmFtZSAiLmJhZGJyYW5jaG5hbWUiJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L29iamVjdHMvcGFja18qIC5naXQvb2JqZWN0cy9pbmRleF8qIiAmJgorCWNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJCWNvbW1pdCAuYmFkYnJhbmNobmFtZQorCQljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwkJZGF0YSA8PENPTU1JVAorCQljb3JydXB0CisJCUNPTU1JVAorCisJCWZyb20gcmVmcy9oZWFkcy9tYXN0ZXIKKworCUlOUFVUX0VORAorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1pbXBvcnQ6IGZhaWwgb24gaW52YWxpZCBicmFuY2ggbmFtZSAiYmFkW2JyYW5jaF1uYW1lIicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9vYmplY3RzL3BhY2tfKiAuZ2l0L29iamVjdHMvaW5kZXhfKiIgJiYKKwljYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCQljb21taXQgYmFkW2JyYW5jaF1uYW1lCisJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQlkYXRhIDw8Q09NTUlUCisJCWNvcnJ1cHQKKwkJQ09NTUlUCisKKwkJZnJvbSByZWZzL2hlYWRzL21hc3RlcgorCisJSU5QVVRfRU5ECisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGJhZGx5IG5hbWVkIHJlZiBhcyB3YXJuaW5nJyAnCisJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCWdpdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBlcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIGNhbiBkZWxldGUgYmFkbHkgbmFtZWQgcmVmJyAnCisJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCWdpdCBicmFuY2ggLWQgYnJva2VuLi4ucmVmICYmCisJZ2l0IGJyYW5jaCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtRCBjYW4gZGVsZXRlIGJhZGx5IG5hbWVkIHJlZicgJworCWNwIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwlnaXQgYnJhbmNoIC1EIGJyb2tlbi4uLnJlZiAmJgorCWdpdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLUQgY2Fubm90IGRlbGV0ZSBub24tcmVmIGluIC5naXQgZGlyJyAnCisJZWNobyBwcmVjaW91cyA+LmdpdC9teS1wcml2YXRlLWZpbGUgJiYKKwllY2hvIHByZWNpb3VzID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1EIC4uLy4uL215LXByaXZhdGUtZmlsZSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L215LXByaXZhdGUtZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLUQgY2Fubm90IGRlbGV0ZSByZWYgaW4gLmdpdCBkaXInICcKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPi5naXQvbXktcHJpdmF0ZS1maWxlICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgYnJhbmNoIGZvby9sZWdpdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLUQgZm9vLy8vLy4vLi8uLy4uLy4uLy4uL215LXByaXZhdGUtZmlsZSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L215LXByaXZhdGUtZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLUQgY2Fubm90IGRlbGV0ZSBhYnNvbHV0ZSBwYXRoJyAnCisJZ2l0IGJyYW5jaCAtZiBleHRyYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLUQgIiQocHdkKS8uZ2l0L3JlZnMvaGVhZHMvZXh0cmEiICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgZXh0cmEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBjYW5ub3QgY3JlYXRlIGEgYmFkbHkgbmFtZWQgcmVmJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggYnJva2VuLi4ucmVmICYmCisJZ2l0IGJyYW5jaCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtbSBjYW5ub3QgcmVuYW1lIHRvIGEgYmFkIHJlZiBuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGdvb2RyZWYgJiYKKwlnaXQgYnJhbmNoIGdvb2RyZWYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1tIGdvb2RyZWYgYnJva2VuLi4ucmVmICYmCisJdGVzdF9jbXBfcmV2IG1hc3RlciBnb29kcmVmICYmCisJZ2l0IGJyYW5jaCA+b3V0cHV0IDI+ZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgZXJyb3IgJiYKKwkhIGdyZXAgLWUgImJyb2tlblwuXC5cLnJlZiIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2JyYW5jaCAtbSBjYW4gcmVuYW1lIGZyb20gYSBiYWQgcmVmIG5hbWUnICcKKwljcCAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYiICYmCisJZ2l0IGJyYW5jaCAtbSBicm9rZW4uLi5yZWYgcmVuYW1lZCAmJgorCXRlc3RfY21wX3JldiBtYXN0ZXIgcmVuYW1lZCAmJgorCWdpdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGNhbm5vdCBjcmVhdGUgYSBiYWRseSBuYW1lZCByZWYnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvcmVmcy9oZWFkcy9icm9rZW4uLi5yZWYiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggImZpbGU6Ly8kKHB3ZCkiIEhFQUQ6cmVmcy9oZWFkcy9icm9rZW4uLi5yZWYgJiYKKwlnaXQgYnJhbmNoID5vdXRwdXQgMj5lcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBlcnJvciAmJgorCSEgZ3JlcCAtZSAiYnJva2VuXC5cLlwucmVmIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncHVzaCAtLW1pcnJvciBjYW4gZGVsZXRlIGJhZGx5IG5hbWVkIHJlZicgJworCXRvcD0kKHB3ZCkgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwlnaXQgaW5pdCBkZXN0ICYmCisKKwkoCisJCWNkIHNyYyAmJgorCQl0ZXN0X2NvbW1pdCBvbmUKKwkpICYmCisJKAorCQljZCBkZXN0ICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJiYKKwkJY3AgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmCisJKSAmJgorCWdpdCAtQyBzcmMgcHVzaCAtLW1pcnJvciAiZmlsZTovLyR0b3AvZGVzdCIgJiYKKwlnaXQgLUMgZGVzdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2Ugc2tpcHMgc3ltcmVmIHBvaW50aW5nIHRvIGJyb2tlbiBuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYnJva2VuLi4ucmVmIiAmJgorCWdpdCBicmFuY2ggc2hhZG93IG9uZSAmJgorCWNwIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy90YWdzL3NoYWRvdyByZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBvbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc2hhZG93ID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiaWdub3JpbmcuKnJlZnMvdGFncy9zaGFkb3ciIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tbm8tZGVyZWYgLWQgY2FuIGRlbGV0ZSByZWZlcmVuY2UgdG8gYnJva2VuIG5hbWUnICcKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvYmFkbmFtZSByZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL2JhZG5hbWUgJiYKKwlnaXQgdXBkYXRlLXJlZiAtLW5vLWRlcmVmIC1kIHJlZnMvaGVhZHMvYmFkbmFtZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy9iYWRuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLWQgY2FuIGRlbGV0ZSBicm9rZW4gbmFtZScgJworCWNwIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9yZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2Jyb2tlbi4uLnJlZiAmJgorCWdpdCBicmFuY2ggPm91dHB1dCAyPmVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIGVycm9yICYmCisJISBncmVwIC1lICJicm9rZW5cLlwuXC5yZWYiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC1kIGNhbm5vdCBkZWxldGUgbm9uLXJlZiBpbiAuZ2l0IGRpcicgJworCWVjaG8gcHJlY2lvdXMgPi5naXQvbXktcHJpdmF0ZS1maWxlICYmCisJZWNobyBwcmVjaW91cyA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLWQgbXktcHJpdmF0ZS1maWxlICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvbXktcHJpdmF0ZS1maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLWQgY2Fubm90IGRlbGV0ZSBhYnNvbHV0ZSBwYXRoJyAnCisJZ2l0IGJyYW5jaCAtZiBleHRyYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC1kICIkKHB3ZCkvLmdpdC9yZWZzL2hlYWRzL2V4dHJhIiAmJgorCXRlc3RfY21wX3JldiBIRUFEIGV4dHJhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLS1zdGRpbiBmYWlscyBjcmVhdGUgd2l0aCBiYWQgcmVmIG5hbWUnICcKKwllY2hvICJjcmVhdGUgfmEgcmVmcy9oZWFkcy9tYXN0ZXIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGludmFsaWQgcmVmIGZvcm1hdDogfmEiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tc3RkaW4gZmFpbHMgdXBkYXRlIHdpdGggYmFkIHJlZiBuYW1lJyAnCisJZWNobyAidXBkYXRlIH5hIHJlZnMvaGVhZHMvbWFzdGVyIiA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBpbnZhbGlkIHJlZiBmb3JtYXQ6IH5hIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLXJlZiAtLXN0ZGluIGZhaWxzIGRlbGV0ZSB3aXRoIGJhZCByZWYgbmFtZScgJworCWVjaG8gImRlbGV0ZSB+YSByZWZzL2hlYWRzL21hc3RlciIgPnN0ZGluICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1yZWYgLS1zdGRpbiA8c3RkaW4gMj5lcnIgJiYKKwlncmVwICJmYXRhbDogaW52YWxpZCByZWYgZm9ybWF0OiB+YSIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLS1zdGRpbiAteiBmYWlscyBjcmVhdGUgd2l0aCBiYWQgcmVmIG5hbWUnICcKKwlwcmludGYgIiVzXDAiICJjcmVhdGUgfmEgIiByZWZzL2hlYWRzL21hc3RlciA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBpbnZhbGlkIHJlZiBmb3JtYXQ6IH5hICIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1yZWYgLS1zdGRpbiAteiBmYWlscyB1cGRhdGUgd2l0aCBiYWQgcmVmIG5hbWUnICcKKwlwcmludGYgIiVzXDAiICJ1cGRhdGUgfmEiIHJlZnMvaGVhZHMvbWFzdGVyICIiID5zdGRpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtcmVmIC16IC0tc3RkaW4gPHN0ZGluIDI+ZXJyICYmCisJZ3JlcCAiZmF0YWw6IGludmFsaWQgcmVmIGZvcm1hdDogfmEiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtcmVmIC0tc3RkaW4gLXogZmFpbHMgZGVsZXRlIHdpdGggYmFkIHJlZiBuYW1lJyAnCisJcHJpbnRmICIlc1wwIiAiZGVsZXRlIH5hIiByZWZzL2hlYWRzL21hc3RlciA+c3RkaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLXJlZiAteiAtLXN0ZGluIDxzdGRpbiAyPmVyciAmJgorCWdyZXAgImZhdGFsOiBpbnZhbGlkIHJlZiBmb3JtYXQ6IH5hIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNDUwLWZzY2suc2ggYi90L3QxNDUwLWZzY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGMwOTc5NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE0NTAtZnNjay5zaApAQCAtMCwwICsxLDQ3NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBmc2NrIHJhbmRvbSBjb2xsZWN0aW9uIG9mIHRlc3RzCisKKyogKEhFQUQpIEIKKyogKG1hc3RlcikgQQorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBnYy5hdXRvIDAgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPLTg4NTktMSAmJgorCXRlc3RfY29tbWl0IEEgZmlsZUEgb25lICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJdGVzdF9jb21taXQgQiBmaWxlQiB0d28gJiYKKwlnaXQgdGFnIC1kIEEgQiAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAtLWFsbCAmJgorCT5lbXB0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb29zZSBvYmplY3RzIGJvcnJvd2VkIGZyb20gYWx0ZXJuYXRlIGFyZSBub3QgbWlzc2luZycgJworCW1rZGlyIGFub3RoZXIgJiYKKwkoCisJCWNkIGFub3RoZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyAuLi8uLi8uLi8uZ2l0L29iamVjdHMgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwkJdGVzdF9jb21taXQgQyBmaWxlQyBvbmUgJiYKKwkJZ2l0IGZzY2sgLS1uby1kYW5nbGluZyA+Li4vYWN0dWFsIDI+JjEKKwkpICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hFQUQgaXMgcGFydCBvZiByZWZzLCB2YWxpZCBvYmplY3RzIGFwcGVhciB2YWxpZCcgJworCWdpdCBmc2NrID5hY3R1YWwgMj4mMSAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCisjIENvcnJ1cHRpb24gdGVzdHMgZm9sbG93LiAgTWFrZSBzdXJlIHRvIHJlbW92ZSBhbGwgdHJhY2VzIG9mIHRoZQorIyBzcGVjaWZpYyBjb3JydXB0aW9uIHlvdSB0ZXN0IGFmdGVyd2FyZHMsIGxlc3QgYSBsYXRlciB0ZXN0IHRyaXAgb3ZlcgorIyBpdC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGhlbHBlcnMgZm9yIGNvcnJ1cHRpb24gdGVzdHMnICcKKwlzaGExX2ZpbGUoKSB7CisJCWVjaG8gIiQqIiB8IHNlZCAicyMuLiMuZ2l0L29iamVjdHMvJi8jIgorCX0gJiYKKworCXJlbW92ZV9vYmplY3QoKSB7CisJCWZpbGU9JChzaGExX2ZpbGUgIiQqIikgJiYKKwkJdGVzdCAtZSAiJGZpbGUiICYmCisJCXJtIC1mICIkZmlsZSIKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29iamVjdCB3aXRoIGJhZCBzaGExJyAnCisJc2hhPSQoZWNobyBibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJb2xkPSQoZWNobyAkc2hhIHwgc2VkICJzK14uLismLysiKSAmJgorCW5ldz0kKGRpcm5hbWUgJG9sZCkvZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgJiYKKwlzaGE9IiQoZGlybmFtZSAkbmV3KSQoYmFzZW5hbWUgJG5ldykiICYmCisJbXYgLmdpdC9vYmplY3RzLyRvbGQgLmdpdC9vYmplY3RzLyRuZXcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHNoYSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkc2hhIGZvbyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYWQtdHJlZSAtdSAtLXJlc2V0IEhFQUQiICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkdHJlZSIgJiYKKwljbXQ9JChlY2hvIGJvZ3VzIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkY210IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgJGNtdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0ICYmCisJY2F0IG91dCAmJgorCWdyZXAgIiRzaGEuKmNvcnJ1cHQiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggcG9pbnRpbmcgdG8gbm9uLWNvbW1pdCcgJworCWdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0gPi5naXQvcmVmcy9oZWFkcy9pbnZhbGlkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwljYXQgb3V0ICYmCisJZ3JlcCAibm90IGEgY29tbWl0IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSEVBRCBsaW5rIHBvaW50aW5nIGF0IGEgZnVubnkgb2JqZWN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJtdiAuZ2l0L1NBVkVEX0hFQUQgLmdpdC9IRUFEIiAmJgorCW12IC5naXQvSEVBRCAuZ2l0L1NBVkVEX0hFQUQgJiYKKwllY2hvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgPi5naXQvSEVBRCAmJgorCSMgYXZvaWQgY29ycnVwdC9icm9rZW4gSEVBRCBmcm9tIGludGVyZmVyaW5nIHdpdGggcmVwbyBkaXNjb3ZlcnkKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0RJUj0uZ2l0IGdpdCBmc2NrIDI+b3V0ICYmCisJY2F0IG91dCAmJgorCWdyZXAgImRldGFjaGVkIEhFQUQgcG9pbnRzIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSEVBRCBsaW5rIHBvaW50aW5nIGF0IGEgZnVubnkgcGxhY2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIm12IC5naXQvU0FWRURfSEVBRCAuZ2l0L0hFQUQiICYmCisJbXYgLmdpdC9IRUFEIC5naXQvU0FWRURfSEVBRCAmJgorCWVjaG8gInJlZjogcmVmcy9mdW5ueS9wbGFjZSIgPi5naXQvSEVBRCAmJgorCSMgYXZvaWQgY29ycnVwdC9icm9rZW4gSEVBRCBmcm9tIGludGVyZmVyaW5nIHdpdGggcmVwbyBkaXNjb3ZlcnkKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0RJUj0uZ2l0IGdpdCBmc2NrIDI+b3V0ICYmCisJY2F0IG91dCAmJgorCWdyZXAgIkhFQUQgcG9pbnRzIHRvIHNvbWV0aGluZyBzdHJhbmdlIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1haWwgd2l0aG91dCBAIGlzIG9rYXknICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmJhc2lzICYmCisJc2VkICJzL0AvQVQvIiBiYXNpcyA+b2theSAmJgorCW5ldz0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbiA8b2theSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJG5ldyIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICIkbmV3IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKwlnaXQgZnNjayAyPm91dCAmJgorCWNhdCBvdXQgJiYKKwkhIGdyZXAgImNvbW1pdCAkbmV3IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1haWwgd2l0aCBlbWJlZGRlZCA+IGlzIG5vdCBva2F5JyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy9AW2Etel0vJj4vIiBiYXNpcyA+YmFkLWVtYWlsICYmCisJbmV3PSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluIDxiYWQtZW1haWwpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRuZXciICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9ib2d1cyAiJG5ldyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5vdXQgJiYKKwljYXQgb3V0ICYmCisJZ3JlcCAiZXJyb3IgaW4gY29tbWl0ICRuZXciIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXNzaW5nIDwgZW1haWwgZGVsaW1pdGVyIGlzIHJlcG9ydGVkIG5pY2VseScgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YmFzaXMgJiYKKwlzZWQgInMvPC8vIiBiYXNpcyA+YmFkLWVtYWlsLTIgJiYKKwluZXc9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IC0tc3RkaW4gPGJhZC1lbWFpbC0yKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkbmV3IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgIiRuZXciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2JvZ3VzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0ICYmCisJY2F0IG91dCAmJgorCWdyZXAgImVycm9yIGluIGNvbW1pdCAkbmV3LiogLSBiYWQgbmFtZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgZW1haWwgaXMgcmVwb3J0ZWQgbmljZWx5JyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy9bYS16XSogPFtePl0qPi8vIiBiYXNpcyA+YmFkLWVtYWlsLTMgJiYKKwluZXc9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IC0tc3RkaW4gPGJhZC1lbWFpbC0zKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkbmV3IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgIiRuZXciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2JvZ3VzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0ICYmCisJY2F0IG91dCAmJgorCWdyZXAgImVycm9yIGluIGNvbW1pdCAkbmV3LiogLSBtaXNzaW5nIGVtYWlsIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnPiBpbiBuYW1lIGlzIHJlcG9ydGVkJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy8gPC8+IDwvIiBiYXNpcyA+YmFkLWVtYWlsLTQgJiYKKwluZXc9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IC0tc3RkaW4gPGJhZC1lbWFpbC00KSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkbmV3IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgIiRuZXciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2JvZ3VzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIDI+b3V0ICYmCisJY2F0IG91dCAmJgorCWdyZXAgImVycm9yIGluIGNvbW1pdCAkbmV3IiBvdXQKKycKKworIyBkYXRlIGlzIDJeNjQgKyAxCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlZ2VyIG92ZXJmbG93IGluIHRpbWVzdGFtcHMgaXMgcmVwb3J0ZWQnICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPmJhc2lzICYmCisJc2VkICJzL15cXChhdXRob3IgLio+XFwpIFswLTldKi9cXDEgMTg0NDY3NDQwNzM3MDk1NTE2MTcvIiBcCisJCTxiYXNpcyA+YmFkLXRpbWVzdGFtcCAmJgorCW5ldz0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbiA8YmFkLXRpbWVzdGFtcCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJG5ldyIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICIkbmV3IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9ib2d1cyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCWNhdCBvdXQgJiYKKwlncmVwICJlcnJvciBpbiBjb21taXQgJG5ldy4qaW50ZWdlciBvdmVyZmxvdyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hbGZvcm1hdHRlZCB0cmVlIG9iamVjdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy90YWdzL3dyb25nIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCBcJFQiICYmCisJVD0kKAorCQlHSVRfSU5ERVhfRklMRT10ZXN0LWluZGV4ICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQlybSAtZiB0ZXN0LWluZGV4ICYmCisJCT54ICYmCisJCWdpdCBhZGQgeCAmJgorCQlUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCSgKKwkJCWdpdCBjYXQtZmlsZSB0cmVlICRUICYmCisJCQlnaXQgY2F0LWZpbGUgdHJlZSAkVAorCQkpIHwKKwkJZ2l0IGhhc2gtb2JqZWN0IC13IC10IHRyZWUgLS1zdGRpbgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAyPm91dCAmJgorCWdyZXAgImVycm9yIGluIHRyZWUgLipjb250YWlucyBkdXBsaWNhdGUgZmlsZSBlbnRyaWVzIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHBvaW50aW5nIHRvIG5vbmV4aXN0ZW50JyAnCisJY2F0ID5pbnZhbGlkLXRhZyA8PC1cRU9GICYmCisJb2JqZWN0IGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKKwl0eXBlIGNvbW1pdAorCXRhZyBpbnZhbGlkCisJdGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IDEyMzQ1Njc4OTAgLTAwMDAKKworCVRoaXMgaXMgYW4gaW52YWxpZCB0YWcuCisJRU9GCisKKwl0YWc9JChnaXQgaGFzaC1vYmplY3QgLXQgdGFnIC13IC0tc3RkaW4gPGludmFsaWQtdGFnKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkdGFnIiAmJgorCWVjaG8gJHRhZyA+LmdpdC9yZWZzL3RhZ3MvaW52YWxpZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy90YWdzL2ludmFsaWQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS10YWdzID5vdXQgJiYKKwljYXQgb3V0ICYmCisJZ3JlcCAiYnJva2VuIGxpbmsiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgcG9pbnRpbmcgdG8gc29tZXRoaW5nIGVsc2UgdGhhbiBpdHMgdHlwZScgJworCXNoYT0kKGVjaG8gYmxvYiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkc2hhIiAmJgorCWNhdCA+d3JvbmctdGFnIDw8LUVPRiAmJgorCW9iamVjdCAkc2hhCisJdHlwZSBjb21taXQKKwl0YWcgd3JvbmcKKwl0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIzNDU2Nzg5MCAtMDAwMAorCisJVGhpcyBpcyBhbiBpbnZhbGlkIHRhZy4KKwlFT0YKKworCXRhZz0kKGdpdCBoYXNoLW9iamVjdCAtdCB0YWcgLXcgLS1zdGRpbiA8d3JvbmctdGFnKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkdGFnIiAmJgorCWVjaG8gJHRhZyA+LmdpdC9yZWZzL3RhZ3Mvd3JvbmcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvdGFncy93cm9uZyIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjayAtLXRhZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHdpdGggaW5jb3JyZWN0IHRhZyBuYW1lICYgbWlzc2luZyB0YWdnZXInICcKKwlzaGE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJY2F0ID53cm9uZy10YWcgPDwtRU9GICYmCisJb2JqZWN0ICRzaGEKKwl0eXBlIGNvbW1pdAorCXRhZyB3cm9uZyBuYW1lIGZvcm1hdAorCisJVGhpcyBpcyBhbiBpbnZhbGlkIHRhZy4KKwlFT0YKKworCXRhZz0kKGdpdCBoYXNoLW9iamVjdCAtdCB0YWcgLXcgLS1zdGRpbiA8d3JvbmctdGFnKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkdGFnIiAmJgorCWVjaG8gJHRhZyA+LmdpdC9yZWZzL3RhZ3Mvd3JvbmcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvdGFncy93cm9uZyIgJiYKKwlnaXQgZnNjayAtLXRhZ3MgMj5vdXQgJiYKKworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCXdhcm5pbmcgaW4gdGFnICR0YWc6IGJhZFRhZ05hbWU6IGludmFsaWQgJ1wnJ3RhZydcJycgbmFtZTogd3JvbmcgbmFtZSBmb3JtYXQKKwl3YXJuaW5nIGluIHRhZyAkdGFnOiBtaXNzaW5nVGFnZ2VyRW50cnk6IGludmFsaWQgZm9ybWF0IC0gZXhwZWN0ZWQgJ1wnJ3RhZ2dlcidcJycgbGluZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHdpdGggYmFkIHRhZ2dlcicgJworCXNoYT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljYXQgPndyb25nLXRhZyA8PC1FT0YgJiYKKwlvYmplY3QgJHNoYQorCXR5cGUgY29tbWl0CisJdGFnIG5vdC1xdWl0ZS13cm9uZworCXRhZ2dlciBCYWQgVGFnZ2VyIE5hbWUKKworCVRoaXMgaXMgYW4gaW52YWxpZCB0YWcuCisJRU9GCisKKwl0YWc9JChnaXQgaGFzaC1vYmplY3QgLS1saXRlcmFsbHkgLXQgdGFnIC13IC0tc3RkaW4gPHdyb25nLXRhZykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHRhZyIgJiYKKwllY2hvICR0YWcgPi5naXQvcmVmcy90YWdzL3dyb25nICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL3RhZ3Mvd3JvbmciICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS10YWdzIDI+b3V0ICYmCisJZ3JlcCAiZXJyb3IgaW4gdGFnIC4qOiBpbnZhbGlkIGF1dGhvci9jb21taXR0ZXIiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbmVkIHVwJyAnCisJZ2l0IGZzY2sgPmFjdHVhbCAyPiYxICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tdmVyaWZ5LW9iamVjdHMnICcKKwlnaXQgcmV2LWxpc3QgLS12ZXJpZnktb2JqZWN0cyAtLWFsbCA+L2Rldi9udWxsIDI+b3V0ICYmCisJdGVzdF9jbXAgZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tdmVyaWZ5LW9iamVjdHMgd2l0aCBiYWQgc2hhMScgJworCXNoYT0kKGVjaG8gYmxvYiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCW9sZD0kKGVjaG8gJHNoYSB8IHNlZCAicyteLi4rJi8rIikgJiYKKwluZXc9JChkaXJuYW1lICRvbGQpL2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmICYmCisJc2hhPSIkKGRpcm5hbWUgJG5ldykkKGJhc2VuYW1lICRuZXcpIiAmJgorCW12IC5naXQvb2JqZWN0cy8kb2xkIC5naXQvb2JqZWN0cy8kbmV3ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRzaGEiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJHNoYSBmb28gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWFkLXRyZWUgLXUgLS1yZXNldCBIRUFEIiAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHRyZWUiICYmCisJY210PSQoZWNobyBib2d1cyB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJGNtdCIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2JvZ3VzICRjbXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvYm9ndXMiICYmCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJldi1saXN0IC0tdmVyaWZ5LW9iamVjdHMgcmVmcy9oZWFkcy9ib2d1cyA+L2Rldi9udWxsIDI+b3V0ICYmCisJY2F0IG91dCAmJgorCWdyZXAgLXEgImVycm9yOiBzaGExIG1pc21hdGNoIDYzZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZSBmc2NrIHRvIGlnbm9yZSBkb3VibGUgYXV0aG9yJyAnCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5iYXNpcyAmJgorCXNlZCAicy9eYXV0aG9yIC4qLyYsJi8iIDxiYXNpcyB8IHRyICwgXFxuID5tdWx0aXBsZS1hdXRob3JzICYmCisJbmV3PSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluIDxtdWx0aXBsZS1hdXRob3JzKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicmVtb3ZlX29iamVjdCAkbmV3IiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvYm9ndXMgIiRuZXciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2JvZ3VzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrICYmCisJZ2l0IC1jIGZzY2subXVsdGlwbGVBdXRob3JzPWlnbm9yZSBmc2NrCisnCisKK19iej0nXDAnCitfYno1PSIkX2J6JF9ieiRfYnokX2J6JF9ieiIKK19iejIwPSIkX2J6NSRfYno1JF9iejUkX2J6NSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIGJsb2IgZW50cnkgcG9pbnRpbmcgdG8gbnVsbCBzaGExJyAnCisJKGdpdCBpbml0IG51bGwtYmxvYiAmJgorCSBjZCBudWxsLWJsb2IgJiYKKwkgc2hhPSQocHJpbnRmICIxMDA2NDQgZmlsZSRfYnokX2J6MjAiIHwKKwkgICAgICAgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gLXQgdHJlZSkgJiYKKwkgIGdpdCBmc2NrIDI+b3V0ICYmCisJICBjYXQgb3V0ICYmCisJICBncmVwICJ3YXJuaW5nLipudWxsIHNoYTEiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIHN1Ym1vZHVsZSBlbnRyeSBwb2ludGluZyB0byBudWxsIHNoYTEnICcKKwkoZ2l0IGluaXQgbnVsbC1jb21taXQgJiYKKwkgY2QgbnVsbC1jb21taXQgJiYKKwkgc2hhPSQocHJpbnRmICIxNjAwMDAgc3VibW9kdWxlJF9ieiRfYnoyMCIgfAorCSAgICAgICBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiAtdCB0cmVlKSAmJgorCSAgZ2l0IGZzY2sgMj5vdXQgJiYKKwkgIGNhdCBvdXQgJiYKKwkgIGdyZXAgIndhcm5pbmcuKm51bGwgc2hhMSIgb3V0CisJKQorJworCit3aGlsZSByZWFkIG5hbWUgcGF0aCBwcmV0dHk7IGRvCisJd2hpbGUgcmVhZCBtb2RlIHR5cGU7IGRvCisJCTogJHtwcmV0dHk6PSRwYXRofQorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmc2NrIG5vdGljZXMgJHByZXR0eSBhcyAkdHlwZSIgJworCQkoCisJCQlnaXQgaW5pdCAkbmFtZS0kdHlwZSAmJgorCQkJY2QgJG5hbWUtJHR5cGUgJiYKKwkJCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCQkJZ2l0IGFkZCBmaWxlICYmCisJCQlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwkJCWJsb2I9JChnaXQgcmV2LXBhcnNlIDpmaWxlKSAmJgorCQkJdHJlZT0kKGdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0pICYmCisJCQl2YWx1ZT0kKGV2YWwgImVjaG8gXCQkdHlwZSIpICYmCisJCQlwcmludGYgIiRtb2RlICR0eXBlICVzXHQlcyIgIiR2YWx1ZSIgIiRwYXRoIiA+YmFkICYmCisJCQliYWRfdHJlZT0kKGdpdCBta3RyZWUgPGJhZCkgJiYKKwkJCWdpdCBmc2NrIDI+b3V0ICYmCisJCQljYXQgb3V0ICYmCisJCQlncmVwICJ3YXJuaW5nLip0cmVlICRiYWRfdHJlZSIgb3V0CisJCSknCisJZG9uZSA8PC1cRU9GCisJMTAwNjQ0IGJsb2IKKwkwNDAwMDAgdHJlZQorCUVPRgorZG9uZSA8PC1FT0YKK2RvdCAuCitkb3Rkb3QgLi4KK2RvdGdpdCAuZ2l0Citkb3RnaXQtY2FzZSAuR0lUCitkb3RnaXQtdW5pY29kZSAuZ0kke3UyMDBjfVQgLmdJe3UyMDBjfVQKK2RvdGdpdC1jYXNlMiAuR2l0CitnaXQtdGlsZGUxIGdpdH4xCitkb3RnaXRkb3QgLmdpdC4KK2RvdC1iYWNrc2xhc2gtY2FzZSAuXFxcXC5HSVRcXFxcZm9vYmFyCitkb3RnaXQtY2FzZS1iYWNrc2xhc2ggLmdpdFxcXFxmb29iYXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGFsbG93cyAuxYdpdCcgJworCSgKKwkJZ2l0IGluaXQgbm90LWRvdGdpdCAmJgorCQljZCBub3QtZG90Z2l0ICYmCisJCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJCWJsb2I9JChnaXQgcmV2LXBhcnNlIDpmaWxlKSAmJgorCQlwcmludGYgIjEwMDY0NCBibG9iICRibG9iXHQuXFwzMDVcXDIwN2l0IiA+dHJlZSAmJgorCQl0cmVlPSQoZ2l0IG1rdHJlZSA8dHJlZSkgJiYKKwkJZ2l0IGZzY2sgMj5lcnIgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMCBlcnIKKwkpCisnCisKKyMgY3JlYXRlIGEgc3RhdGljIHRlc3QgcmVwbyB3aGljaCBpcyBicm9rZW4gYnkgb21pdHRpbmcKKyMgb25lIHBhcnRpY3VsYXIgb2JqZWN0ICgkMSwgd2hpY2ggaXMgbG9va2VkIHVwIHZpYSByZXYtcGFyc2UKKyMgaW4gdGhlIG5ldyByZXBvc2l0b3J5KS4KK2NyZWF0ZV9yZXBvX21pc3NpbmcgKCkgeworCXJtIC1yZiBtaXNzaW5nICYmCisJZ2l0IGluaXQgbWlzc2luZyAmJgorCSgKKwkJY2QgbWlzc2luZyAmJgorCQlnaXQgY29tbWl0IC1tIG9uZSAtLWFsbG93LWVtcHR5ICYmCisJCW1rZGlyIHN1YmRpciAmJgorCQllY2hvIGNvbnRlbnQgPnN1YmRpci9maWxlICYmCisJCWdpdCBhZGQgc3ViZGlyL2ZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkJdW5yZWxhdGVkPSQoZWNobyB1bnJlbGF0ZWQgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtdykgJiYKKwkJZ2l0IHRhZyAtbSBmb28gdGFnICR1bnJlbGF0ZWQgJiYKKwkJc2hhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgIiQxIikgJiYKKwkJcGF0aD0kKGVjaG8gJHNoYTEgfCBzZWQgJ3N8Li58Ji98JykgJiYKKwkJcm0gLmdpdC9vYmplY3RzLyRwYXRoCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vdGljZXMgbWlzc2luZyBibG9iJyAnCisJY3JlYXRlX3JlcG9fbWlzc2luZyBIRUFEOnN1YmRpci9maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG1pc3NpbmcgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIG5vdGljZXMgbWlzc2luZyBzdWJ0cmVlJyAnCisJY3JlYXRlX3JlcG9fbWlzc2luZyBIRUFEOnN1YmRpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBtaXNzaW5nIGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIG1pc3Npbmcgcm9vdCB0cmVlJyAnCisJY3JlYXRlX3JlcG9fbWlzc2luZyBIRUFEXnt0cmVlfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBtaXNzaW5nIGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIG1pc3NpbmcgcGFyZW50JyAnCisJY3JlYXRlX3JlcG9fbWlzc2luZyBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBtaXNzaW5nIGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIG1pc3NpbmcgdGFnZ2VkIG9iamVjdCcgJworCWNyZWF0ZV9yZXBvX21pc3NpbmcgdGFnXntibG9ifSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBtaXNzaW5nIGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIHJlZiBwb2ludGluZyB0byBtaXNzaW5nIGNvbW1pdCcgJworCWNyZWF0ZV9yZXBvX21pc3NpbmcgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBtaXNzaW5nIGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnNjayBub3RpY2VzIHJlZiBwb2ludGluZyB0byBtaXNzaW5nIHRhZycgJworCWNyZWF0ZV9yZXBvX21pc3NpbmcgdGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIG1pc3NpbmcgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIC0tY29ubmVjdGl2aXR5LW9ubHknICcKKwlybSAtcmYgY29ubmVjdGl2aXR5LW9ubHkgJiYKKwlnaXQgaW5pdCBjb25uZWN0aXZpdHktb25seSAmJgorCSgKKwkJY2QgY29ubmVjdGl2aXR5LW9ubHkgJiYKKwkJdG91Y2ggZW1wdHkgJiYKKwkJZ2l0IGFkZCBlbXB0eSAmJgorCQl0ZXN0X2NvbW1pdCBlbXB0eSAmJgorCQllbXB0eT0uZ2l0L29iamVjdHMvZTYvOWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgJiYKKwkJcm0gLWYgJGVtcHR5ICYmCisJCWVjaG8gaW52YWxpZCA+JGVtcHR5ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tc3RyaWN0ICYmCisJCWdpdCBmc2NrIC0tc3RyaWN0IC0tY29ubmVjdGl2aXR5LW9ubHkgJiYKKwkJdHJlZT0kKGdpdCByZXYtcGFyc2UgSEVBRDopICYmCisJCXN1ZmZpeD0ke3RyZWUjPz99ICYmCisJCXRyZWU9LmdpdC9vYmplY3RzLyR7dHJlZSUkc3VmZml4fS8kc3VmZml4ICYmCisJCXJtIC1mICR0cmVlICYmCisJCWVjaG8gaW52YWxpZCA+JHRyZWUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS1zdHJpY3QgLS1jb25uZWN0aXZpdHktb25seQorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTAwLXJldi1wYXJzZS5zaCBiL3QvdDE1MDAtcmV2LXBhcnNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ4ZWUwNzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTAwLXJldi1wYXJzZS5zaApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgcmV2LXBhcnNlJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfcmV2X3BhcnNlKCkgeworCW5hbWU9JDEKKwlzaGlmdAorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWU6IGlzLWJhcmUtcmVwb3NpdG9yeSIgXAorCSJ0ZXN0ICckMScgPSBcIlwkKGdpdCByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkpXCIiCisJc2hpZnQKKwlbICQjIC1lcSAwIF0gJiYgcmV0dXJuCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZTogaXMtaW5zaWRlLWdpdC1kaXIiIFwKKwkidGVzdCAnJDEnID0gXCJcJChnaXQgcmV2LXBhcnNlIC0taXMtaW5zaWRlLWdpdC1kaXIpXCIiCisJc2hpZnQKKwlbICQjIC1lcSAwIF0gJiYgcmV0dXJuCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZTogaXMtaW5zaWRlLXdvcmstdHJlZSIgXAorCSJ0ZXN0ICckMScgPSBcIlwkKGdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtd29yay10cmVlKVwiIgorCXNoaWZ0CisJWyAkIyAtZXEgMCBdICYmIHJldHVybgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWU6IHByZWZpeCIgXAorCSJ0ZXN0ICckMScgPSBcIlwkKGdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeClcIiIKKwlzaGlmdAorCVsgJCMgLWVxIDAgXSAmJiByZXR1cm4KKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lOiBnaXQtZGlyIiBcCisJInRlc3QgJyQxJyA9IFwiXCQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpXCIiCisJc2hpZnQKKwlbICQjIC1lcSAwIF0gJiYgcmV0dXJuCit9CisKKyMgbGFiZWwgaXMtYmFyZSBpcy1pbnNpZGUtZ2l0IGlzLWluc2lkZS13b3JrIHByZWZpeCBnaXQtZGlyCisKK1JPT1Q9JChwd2QpCisKK3Rlc3RfcmV2X3BhcnNlIHRvcGxldmVsIGZhbHNlIGZhbHNlIHRydWUgJycgLmdpdAorCitjZCAuZ2l0IHx8IGV4aXQgMQordGVzdF9yZXZfcGFyc2UgLmdpdC8gZmFsc2UgdHJ1ZSBmYWxzZSAnJyAuCitjZCBvYmplY3RzIHx8IGV4aXQgMQordGVzdF9yZXZfcGFyc2UgLmdpdC9vYmplY3RzLyBmYWxzZSB0cnVlIGZhbHNlICcnICIkUk9PVC8uZ2l0IgorY2QgLi4vLi4gfHwgZXhpdCAxCisKK21rZGlyIC1wIHN1Yi9kaXIgfHwgZXhpdCAxCitjZCBzdWIvZGlyIHx8IGV4aXQgMQordGVzdF9yZXZfcGFyc2Ugc3ViZGlyZWN0b3J5IGZhbHNlIGZhbHNlIHRydWUgc3ViL2Rpci8gIiRST09ULy5naXQiCitjZCAuLi8uLiB8fCBleGl0IDEKKworZ2l0IGNvbmZpZyBjb3JlLmJhcmUgdHJ1ZQordGVzdF9yZXZfcGFyc2UgJ2NvcmUuYmFyZSA9IHRydWUnIHRydWUgZmFsc2UgZmFsc2UKKworZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUuYmFyZQordGVzdF9yZXZfcGFyc2UgJ2NvcmUuYmFyZSB1bmRlZmluZWQnIGZhbHNlIGZhbHNlIHRydWUKKworbWtkaXIgd29yayB8fCBleGl0IDEKK2NkIHdvcmsgfHwgZXhpdCAxCitHSVRfRElSPS4uLy5naXQKK0dJVF9DT05GSUc9IiQocHdkKSIvLi4vLmdpdC9jb25maWcKK2V4cG9ydCBHSVRfRElSIEdJVF9DT05GSUcKKworZ2l0IGNvbmZpZyBjb3JlLmJhcmUgZmFsc2UKK3Rlc3RfcmV2X3BhcnNlICdHSVRfRElSPS4uLy5naXQsIGNvcmUuYmFyZSA9IGZhbHNlJyBmYWxzZSBmYWxzZSB0cnVlICcnCisKK2dpdCBjb25maWcgY29yZS5iYXJlIHRydWUKK3Rlc3RfcmV2X3BhcnNlICdHSVRfRElSPS4uLy5naXQsIGNvcmUuYmFyZSA9IHRydWUnIHRydWUgZmFsc2UgZmFsc2UgJycKKworZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUuYmFyZQordGVzdF9yZXZfcGFyc2UgJ0dJVF9ESVI9Li4vLmdpdCwgY29yZS5iYXJlIHVuZGVmaW5lZCcgZmFsc2UgZmFsc2UgdHJ1ZSAnJworCittdiAuLi8uZ2l0IC4uL3JlcG8uZ2l0IHx8IGV4aXQgMQorR0lUX0RJUj0uLi9yZXBvLmdpdAorR0lUX0NPTkZJRz0iJChwd2QpIi8uLi9yZXBvLmdpdC9jb25maWcKKworZ2l0IGNvbmZpZyBjb3JlLmJhcmUgZmFsc2UKK3Rlc3RfcmV2X3BhcnNlICdHSVRfRElSPS4uL3JlcG8uZ2l0LCBjb3JlLmJhcmUgPSBmYWxzZScgZmFsc2UgZmFsc2UgdHJ1ZSAnJworCitnaXQgY29uZmlnIGNvcmUuYmFyZSB0cnVlCit0ZXN0X3Jldl9wYXJzZSAnR0lUX0RJUj0uLi9yZXBvLmdpdCwgY29yZS5iYXJlID0gdHJ1ZScgdHJ1ZSBmYWxzZSBmYWxzZSAnJworCitnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5iYXJlCit0ZXN0X3Jldl9wYXJzZSAnR0lUX0RJUj0uLi9yZXBvLmdpdCwgY29yZS5iYXJlIHVuZGVmaW5lZCcgZmFsc2UgZmFsc2UgdHJ1ZSAnJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDEtd29ya3RyZWUuc2ggYi90L3QxNTAxLXdvcmt0cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjNWI4NzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTAxLXdvcmt0cmVlLnNoCkBAIC0wLDAgKzEsNDI2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzZXBhcmF0ZSB3b3JrIHRyZWUnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlFTVBUWV9UUkVFPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJRU1QVFlfQkxPQj0kKGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC0tc3RkaW4gPC9kZXYvbnVsbCkgJiYKKwlDSEFOR0VEX0JMT0I9JChlY2hvIGNoYW5nZWQgfCBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtLXN0ZGluKSAmJgorCUVNUFRZX0JMT0I3PSQoZWNobyAkRU1QVFlfQkxPQiB8IHNlZCAicy9cKC4uLi4uLi5cKS4qL1wxLyIpICYmCisJQ0hBTkdFRF9CTE9CNz0kKGVjaG8gJENIQU5HRURfQkxPQiB8IHNlZCAicy9cKC4uLi4uLi5cKS4qL1wxLyIpICYmCisKKwlta2RpciAtcCB3b3JrL3N1Yi9kaXIgJiYKKwlta2RpciAtcCB3b3JrMiAmJgorCW12IC5naXQgcmVwby5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGhlbHBlciBmb3IgdGVzdGluZyByZXYtcGFyc2UnICcKKwl0ZXN0X3Jldl9wYXJzZSgpIHsKKwkJZWNobyAkMSA+ZXhwZWN0ZWQuYmFyZSAmJgorCQllY2hvICQyID5leHBlY3RlZC5pbnNpZGUtZ2l0ICYmCisJCWVjaG8gJDMgPmV4cGVjdGVkLmluc2lkZS13b3JrdHJlZSAmJgorCQlpZiB0ZXN0ICQjIC1nZSA0CisJCXRoZW4KKwkJCWVjaG8gJDQgPmV4cGVjdGVkLnByZWZpeAorCQlmaSAmJgorCisJCWdpdCByZXYtcGFyc2UgLS1pcy1iYXJlLXJlcG9zaXRvcnkgPmFjdHVhbC5iYXJlICYmCisJCWdpdCByZXYtcGFyc2UgLS1pcy1pbnNpZGUtZ2l0LWRpciA+YWN0dWFsLmluc2lkZS1naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLWlzLWluc2lkZS13b3JrLXRyZWUgPmFjdHVhbC5pbnNpZGUtd29ya3RyZWUgJiYKKwkJaWYgdGVzdCAkIyAtZ2UgNAorCQl0aGVuCisJCQlnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXggPmFjdHVhbC5wcmVmaXgKKwkJZmkgJiYKKworCQl0ZXN0X2NtcCBleHBlY3RlZC5iYXJlIGFjdHVhbC5iYXJlICYmCisJCXRlc3RfY21wIGV4cGVjdGVkLmluc2lkZS1naXQgYWN0dWFsLmluc2lkZS1naXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQuaW5zaWRlLXdvcmt0cmVlIGFjdHVhbC5pbnNpZGUtd29ya3RyZWUgJiYKKwkJaWYgdGVzdCAkIyAtZ2UgNAorCQl0aGVuCisJCQkjIHJldi1wYXJzZSAtLXNob3ctcHJlZml4IHNob3VsZCBvdXRwdXQKKwkJCSMgYSBzaW5nbGUgbmV3bGluZSB3aGVuIGF0IHRoZSB0b3Agb2YgdGhlIHdvcmsgdHJlZSwKKwkJCSMgYnV0IHdlIHRlc3QgZm9yIHRoYXQgc2VwYXJhdGVseS4KKwkJCXRlc3QgLXogIiQ0IiAmJiAhIHRlc3QgLXMgYWN0dWFsLnByZWZpeCB8fAorCQkJdGVzdF9jbXAgZXhwZWN0ZWQucHJlZml4IGFjdHVhbC5wcmVmaXgKKwkJZmkKKwl9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjb3JlLndvcmt0cmVlID0gcmVsYXRpdmUgcGF0aCcgJworCXNhbmVfdW5zZXQgR0lUX1dPUktfVFJFRSAmJgorCUdJVF9ESVI9cmVwby5naXQgJiYKKwlHSVRfQ09ORklHPSIkKHB3ZCkiLyRHSVRfRElSL2NvbmZpZyAmJgorCWV4cG9ydCBHSVRfRElSIEdJVF9DT05GSUcgJiYKKwlnaXQgY29uZmlnIGNvcmUud29ya3RyZWUgLi4vd29yaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRzaWRlJyAnCisJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zaWRlIHdvcmsgdHJlZScgJworCSgKKwkJY2Qgd29yayAmJgorCQlHSVRfRElSPS4uL3JlcG8uZ2l0ICYmCisJCUdJVF9DT05GSUc9IiQocHdkKSIvJEdJVF9ESVIvY29uZmlnICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIHRydWUgIiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHByZWZpeCBpcyBhY3R1YWxseSB3cml0dGVuIG91dCcgJworCWVjaG8gPmV4cGVjdGVkICYmCisJKAorCQljZCB3b3JrICYmCisJCUdJVF9ESVI9Li4vcmVwby5naXQgJiYKKwkJR0lUX0NPTkZJRz0iJChwd2QpIi8kR0lUX0RJUi9jb25maWcgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXNob3ctcHJlZml4ID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBvZiB3b3JrIHRyZWUnICcKKwkoCisJCWNkIHdvcmsvc3ViL2RpciAmJgorCQlHSVRfRElSPS4uLy4uLy4uL3JlcG8uZ2l0ICYmCisJCUdJVF9DT05GSUc9IiQocHdkKSIvJEdJVF9ESVIvY29uZmlnICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIHRydWUgc3ViL2Rpci8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjb3JlLndvcmt0cmVlID0gYWJzb2x1dGUgcGF0aCcgJworCXNhbmVfdW5zZXQgR0lUX1dPUktfVFJFRSAmJgorCUdJVF9ESVI9JChwd2QpL3JlcG8uZ2l0ICYmCisJR0lUX0NPTkZJRz0kR0lUX0RJUi9jb25maWcgJiYKKwlleHBvcnQgR0lUX0RJUiBHSVRfQ09ORklHICYmCisJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlICIkKHB3ZCkvd29yayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0c2lkZScgJworCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIGZhbHNlICYmCisJKAorCQljZCB3b3JrMiAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSBmYWxzZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zaWRlIHdvcmsgdHJlZScgJworCSgKKwkJY2Qgd29yayAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSB0cnVlICIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgb2Ygd29yayB0cmVlJyAnCisJKAorCQljZCB3b3JrL3N1Yi9kaXIgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgdHJ1ZSBzdWIvZGlyLworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IEdJVF9XT1JLX1RSRUU9cmVsYXRpdmUgKG92ZXJyaWRlIGNvcmUud29ya3RyZWUpJyAnCisJR0lUX0RJUj0kKHB3ZCkvcmVwby5naXQgJiYKKwlHSVRfQ09ORklHPSRHSVRfRElSL2NvbmZpZyAmJgorCWdpdCBjb25maWcgY29yZS53b3JrdHJlZSBub24tZXhpc3RlbnQgJiYKKwlHSVRfV09SS19UUkVFPXdvcmsgJiYKKwlleHBvcnQgR0lUX0RJUiBHSVRfQ09ORklHIEdJVF9XT1JLX1RSRUUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0c2lkZScgJworCXRlc3RfcmV2X3BhcnNlIGZhbHNlIGZhbHNlIGZhbHNlICYmCisJKAorCQljZCB3b3JrMiAmJgorCQl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSBmYWxzZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zaWRlIHdvcmsgdHJlZScgJworCSgKKwkJY2Qgd29yayAmJgorCQlHSVRfV09SS19UUkVFPS4gJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgdHJ1ZSAiIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIG9mIHdvcmsgdHJlZScgJworCSgKKwkJY2Qgd29yay9zdWIvZGlyICYmCisJCUdJVF9XT1JLX1RSRUU9Li4vLi4gJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgZmFsc2UgdHJ1ZSBzdWIvZGlyLworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IEdJVF9XT1JLX1RSRUU9YWJzb2x1dGUsIGJlbG93IGdpdCBkaXInICcKKwltdiB3b3JrIHJlcG8uZ2l0L3dvcmsgJiYKKwltdiB3b3JrMiByZXBvLmdpdC93b3JrMiAmJgorCUdJVF9ESVI9JChwd2QpL3JlcG8uZ2l0ICYmCisJR0lUX0NPTkZJRz0kR0lUX0RJUi9jb25maWcgJiYKKwlHSVRfV09SS19UUkVFPSQocHdkKS9yZXBvLmdpdC93b3JrICYmCisJZXhwb3J0IEdJVF9ESVIgR0lUX0NPTkZJRyBHSVRfV09SS19UUkVFCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHNpZGUnICcKKwllY2hvIG91dHNpZGUgJiYKKwl0ZXN0X3Jldl9wYXJzZSBmYWxzZSBmYWxzZSBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbiByZXBvLmdpdCcgJworCSgKKwkJY2QgcmVwby5naXQgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgdHJ1ZSBmYWxzZQorCSkgJiYKKwkoCisJCWNkIHJlcG8uZ2l0L29iamVjdHMgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgdHJ1ZSBmYWxzZQorCSkgJiYKKwkoCisJCWNkIHJlcG8uZ2l0L3dvcmsyICYmCisJCXRlc3RfcmV2X3BhcnNlIGZhbHNlIHRydWUgZmFsc2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luc2lkZSB3b3JrIHRyZWUnICcKKwkoCisJCWNkIHJlcG8uZ2l0L3dvcmsgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgdHJ1ZSB0cnVlICIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgb2Ygd29yayB0cmVlJyAnCisJKAorCQljZCByZXBvLmdpdC93b3JrL3N1Yi9kaXIgJiYKKwkJdGVzdF9yZXZfcGFyc2UgZmFsc2UgdHJ1ZSB0cnVlIHN1Yi9kaXIvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIHdvcmsgdHJlZSBmcm9tIHJlcG8nICcKKwllY2hvIHN1Yi9kaXIvdW50cmFja2VkID5leHBlY3RlZCAmJgorCWNhdCA8PC1cRU9GID5yZXBvLmdpdC93b3JrLy5naXRpZ25vcmUgJiYKKwlleHBlY3RlZC4qCisJYWN0dWFsLioKKwkuZ2l0aWdub3JlCisJRU9GCisJPnJlcG8uZ2l0L3dvcmsvc3ViL2Rpci91bnRyYWNrZWQgJiYKKwkoCisJCWNkIHJlcG8uZ2l0ICYmCisJCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUtc3RhbmRhcmQgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCB3b3JrIHRyZWUgZnJvbSB3b3JrIHRyZWUnICcKKwllY2hvIHN1Yi9kaXIvdHJhY2tlZCA+ZXhwZWN0ZWQgJiYKKwk+cmVwby5naXQvd29yay9zdWIvZGlyL3RyYWNrZWQgJiYKKwkoCisJCWNkIHJlcG8uZ2l0L3dvcmsvc3ViL2RpciAmJgorCQlnaXQgLS1naXQtZGlyPS4uLy4uLy4uIGFkZCB0cmFja2VkCisJKSAmJgorCSgKKwkJY2QgcmVwby5naXQgJiYKKwkJZ2l0IGxzLWZpbGVzID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19nZW50bHkoKSBncm9rcyByZWxhdGl2ZSBHSVRfRElSICYgR0lUX1dPUktfVFJFRScgJworCSgKKwkJY2QgcmVwby5naXQvd29yay9zdWIvZGlyICYmCisJCUdJVF9ESVI9Li4vLi4vLi4gJiYKKwkJR0lUX1dPUktfVFJFRT0uLi8uLiAmJgorCQlHSVRfUEFHRVI9ICYmCisJCWV4cG9ydCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgR0lUX1BBR0VSICYmCisKKwkJZ2l0IGRpZmYgLS1leGl0LWNvZGUgdHJhY2tlZCAmJgorCQllY2hvIGNoYW5nZWQgPnRyYWNrZWQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1leGl0LWNvZGUgdHJhY2tlZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCByZXNwZWN0cyB3b3JrIHRyZWUgdW5kZXIgLmdpdCBkaXInICcKKwljYXQgPmRpZmYtaW5kZXgtY2FjaGVkLmV4cGVjdGVkIDw8LUVPRiAmJgorCTowMDAwMDAgMTAwNjQ0ICRfejQwICRFTVBUWV9CTE9CIEEJc3ViL2Rpci90cmFja2VkCisJRU9GCisJY2F0ID5kaWZmLWluZGV4LmV4cGVjdGVkIDw8LUVPRiAmJgorCTowMDAwMDAgMTAwNjQ0ICRfejQwICRfejQwIEEJc3ViL2Rpci90cmFja2VkCisJRU9GCisKKwkoCisJCUdJVF9ESVI9cmVwby5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT1yZXBvLmdpdC93b3JrICYmCisJCWV4cG9ydCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwkJZ2l0IGRpZmYtaW5kZXggJEVNUFRZX1RSRUUgPmRpZmYtaW5kZXguYWN0dWFsICYmCisJCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICRFTVBUWV9UUkVFID5kaWZmLWluZGV4LWNhY2hlZC5hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZGlmZi1pbmRleC5leHBlY3RlZCBkaWZmLWluZGV4LmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmYtaW5kZXgtY2FjaGVkLmV4cGVjdGVkIGRpZmYtaW5kZXgtY2FjaGVkLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIHJlc3BlY3RzIHdvcmsgdHJlZSB1bmRlciAuZ2l0IGRpcicgJworCWNhdCA+ZGlmZi1maWxlcy5leHBlY3RlZCA8PC1FT0YgJiYKKwk6MTAwNjQ0IDEwMDY0NCAkRU1QVFlfQkxPQiAkX3o0MCBNCXN1Yi9kaXIvdHJhY2tlZAorCUVPRgorCisJKAorCQlHSVRfRElSPXJlcG8uZ2l0ICYmCisJCUdJVF9XT1JLX1RSRUU9cmVwby5naXQvd29yayAmJgorCQlleHBvcnQgR0lUX0RJUiBHSVRfV09SS19UUkVFICYmCisJCWdpdCBkaWZmLWZpbGVzID5kaWZmLWZpbGVzLmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBkaWZmLWZpbGVzLmV4cGVjdGVkIGRpZmYtZmlsZXMuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIHJlc3BlY3RzIHdvcmsgdHJlZSB1bmRlciAuZ2l0IGRpcicgJworCWNhdCA+ZGlmZi1UUkVFLmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9zdWIvZGlyL3RyYWNrZWQgYi9zdWIvZGlyL3RyYWNrZWQKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLiRDSEFOR0VEX0JMT0I3CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3N1Yi9kaXIvdHJhY2tlZAorCUBAIC0wLDAgKzEgQEAKKwkrY2hhbmdlZAorCUVPRgorCWNhdCA+ZGlmZi1UUkVFLWNhY2hlZC5leHBlY3RlZCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvc3ViL2Rpci90cmFja2VkIGIvc3ViL2Rpci90cmFja2VkCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi4kRU1QVFlfQkxPQjcKKwlFT0YKKwljYXQgPmRpZmYtRklMRVMuZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3N1Yi9kaXIvdHJhY2tlZCBiL3N1Yi9kaXIvdHJhY2tlZAorCWluZGV4ICRFTVBUWV9CTE9CNy4uJENIQU5HRURfQkxPQjcgMTAwNjQ0CisJLS0tIGEvc3ViL2Rpci90cmFja2VkCisJKysrIGIvc3ViL2Rpci90cmFja2VkCisJQEAgLTAsMCArMSBAQAorCStjaGFuZ2VkCisJRU9GCisKKwkoCisJCUdJVF9ESVI9cmVwby5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT1yZXBvLmdpdC93b3JrICYmCisJCWV4cG9ydCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwkJZ2l0IGRpZmYgJEVNUFRZX1RSRUUgPmRpZmYtVFJFRS5hY3R1YWwgJiYKKwkJZ2l0IGRpZmYgLS1jYWNoZWQgJEVNUFRZX1RSRUUgPmRpZmYtVFJFRS1jYWNoZWQuYWN0dWFsICYmCisJCWdpdCBkaWZmID5kaWZmLUZJTEVTLmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBkaWZmLVRSRUUuZXhwZWN0ZWQgZGlmZi1UUkVFLmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmYtVFJFRS1jYWNoZWQuZXhwZWN0ZWQgZGlmZi1UUkVFLWNhY2hlZC5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBkaWZmLUZJTEVTLmV4cGVjdGVkIGRpZmYtRklMRVMuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwJyAnCisJZWNobyBkaXIvdHJhY2tlZCA+ZXhwZWN0ZWQuZ3JlcCAmJgorCSgKKwkJY2QgcmVwby5naXQvd29yay9zdWIgJiYKKwkJR0lUX0RJUj0uLi8uLiAmJgorCQlHSVRfV09SS19UUkVFPS4uICYmCisJCWV4cG9ydCBHSVRfRElSIEdJVF9XT1JLX1RSRUUgJiYKKwkJZ2l0IGdyZXAgLWwgY2hhbmdlZCA+Li4vLi4vLi4vYWN0dWFsLmdyZXAKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuZ3JlcCBhY3R1YWwuZ3JlcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0JyAnCisJKAorCQljZCByZXBvLmdpdCAmJgorCQlHSVRfRElSPS4gR0lUX1dPUktfVFJFRT13b3JrIGdpdCBjb21taXQgLWEgLW0gZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgcGF0aHNwZWMgc2hvdWxkIGZhaWwgZ3JhY2VmdWxseScgJworCSgKKwkJY2QgcmVwby5naXQgJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgSEVBRCAtLSAvaG9tZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZV9yZWxhdGl2ZV9wYXRoIGhhbmRsZXMgZG91YmxlIHNsYXNoZXMgaW4gR0lUX0RJUicgJworCT5kdW1teV9maWxlICYmCisJZWNobyBnaXQgLS1naXQtZGlyPSIkKHB3ZCkvL3JlcG8uZ2l0IiAtLXdvcmstdHJlZT0iJChwd2QpIiBhZGQgZHVtbXlfZmlsZSAmJgorCWdpdCAtLWdpdC1kaXI9IiQocHdkKS8vcmVwby5naXQiIC0td29yay10cmVlPSIkKHB3ZCkiIGFkZCBkdW1teV9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbGF0aXZlICRHSVRfV09SS19UUkVFIGFuZCBnaXQgc3VicHJvY2Vzc2VzJyAnCisJR0lUX0RJUj1yZXBvLmdpdCBHSVRfV09SS19UUkVFPXJlcG8uZ2l0L3dvcmsgXAorCXRlc3Qtc3VicHJvY2VzcyAtLXNldHVwLXdvcmstdHJlZSByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsID5hY3R1YWwgJiYKKwllY2hvICIkKHB3ZCkvcmVwby5naXQvd29yayIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ011bHRpLXdvcmt0cmVlIHNldHVwJyAnCisJbWtkaXIgd29yayAmJgorCW1rZGlyIC1wIHJlcG8uZ2l0L3JlcG9zL2ZvbyAmJgorCWNwIHJlcG8uZ2l0L0hFQUQgcmVwby5naXQvaW5kZXggcmVwby5naXQvcmVwb3MvZm9vICYmCisJdGVzdF9taWdodF9mYWlsIGNwIHJlcG8uZ2l0L3NoYXJlZGluZGV4LiogcmVwby5naXQvcmVwb3MvZm9vICYmCisJc2FuZV91bnNldCBHSVRfRElSIEdJVF9DT05GSUcgR0lUX1dPUktfVFJFRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRElSIHNldCAoMSknICcKKwllY2hvICJnaXRkaXI6IHJlcG8uZ2l0L3JlcG9zL2ZvbyIgPmdpdGZpbGUgJiYKKwllY2hvIC4uLy4uID5yZXBvLmdpdC9yZXBvcy9mb28vY29tbW9uZGlyICYmCisJKAorCQljZCB3b3JrICYmCisJCUdJVF9ESVI9Li4vZ2l0ZmlsZSBnaXQgcmV2LXBhcnNlIC0tZ2l0LWNvbW1vbi1kaXIgPmFjdHVhbCAmJgorCQl0ZXN0LXBhdGgtdXRpbHMgcmVhbF9wYXRoICIkVFJBU0hfRElSRUNUT1JZL3JlcG8uZ2l0IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9ESVIgc2V0ICgyKScgJworCWVjaG8gImdpdGRpcjogcmVwby5naXQvcmVwb3MvZm9vIiA+Z2l0ZmlsZSAmJgorCWVjaG8gIiQocHdkKS9yZXBvLmdpdCIgPnJlcG8uZ2l0L3JlcG9zL2Zvby9jb21tb25kaXIgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJR0lUX0RJUj0uLi9naXRmaWxlIGdpdCByZXYtcGFyc2UgLS1naXQtY29tbW9uLWRpciA+YWN0dWFsICYmCisJCXRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIiRUUkFTSF9ESVJFQ1RPUlkvcmVwby5naXQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQXV0byBkaXNjb3ZlcnknICcKKwllY2hvICJnaXRkaXI6IHJlcG8uZ2l0L3JlcG9zL2ZvbyIgPi5naXQgJiYKKwllY2hvIC4uLy4uID5yZXBvLmdpdC9yZXBvcy9mb28vY29tbW9uZGlyICYmCisJKAorCQljZCB3b3JrICYmCisJCWdpdCByZXYtcGFyc2UgLS1naXQtY29tbW9uLWRpciA+YWN0dWFsICYmCisJCXRlc3QtcGF0aC11dGlscyByZWFsX3BhdGggIiRUUkFTSF9ESVJFQ1RPUlkvcmVwby5naXQiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQllY2hvIGhhaGEgPmRhdGExICYmCisJCWdpdCBhZGQgZGF0YTEgJiYKKwkJZ2l0IGxzLWZpbGVzIC0tZnVsbC1uYW1lIDovIHwgZ3JlcCBkYXRhMSA+YWN0dWFsICYmCisJCWVjaG8gd29yay9kYXRhMSA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyRHSVRfRElSL2NvbW1vbiBvdmVycmlkZXMgY29yZS53b3JrdHJlZScgJworCW1rZGlyIGVsc2V3aGVyZSAmJgorCWdpdCAtLWdpdC1kaXI9cmVwby5naXQgY29uZmlnIGNvcmUud29ya3RyZWUgIiRUUkFTSF9ESVJFQ1RPUlkvZWxzZXdoZXJlIiAmJgorCWVjaG8gImdpdGRpcjogcmVwby5naXQvcmVwb3MvZm9vIiA+LmdpdCAmJgorCWVjaG8gLi4vLi4gPnJlcG8uZ2l0L3JlcG9zL2Zvby9jb21tb25kaXIgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLWdpdC1jb21tb24tZGlyID5hY3R1YWwgJiYKKwkJdGVzdC1wYXRoLXV0aWxzIHJlYWxfcGF0aCAiJFRSQVNIX0RJUkVDVE9SWS9yZXBvLmdpdCIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWVjaG8gaGFoYSA+ZGF0YTIgJiYKKwkJZ2l0IGFkZCBkYXRhMiAmJgorCQlnaXQgbHMtZmlsZXMgLS1mdWxsLW5hbWUgOi8gfCBncmVwIGRhdGEyID5hY3R1YWwgJiYKKwkJZWNobyB3b3JrL2RhdGEyID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJEdJVF9XT1JLX1RSRUUgb3ZlcnJpZGVzICRHSVRfRElSL2NvbW1vbicgJworCWVjaG8gImdpdGRpcjogcmVwby5naXQvcmVwb3MvZm9vIiA+LmdpdCAmJgorCWVjaG8gLi4vLi4gPnJlcG8uZ2l0L3JlcG9zL2Zvby9jb21tb25kaXIgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZWNobyBoYWhhID5kYXRhMyAmJgorCQlnaXQgLS1naXQtZGlyPS4uLy5naXQgLS13b3JrLXRyZWU9LiBhZGQgZGF0YTMgJiYKKwkJZ2l0IGxzLWZpbGVzIC0tZnVsbC1uYW1lIC0tIDovIHwgZ3JlcCBkYXRhMyA+YWN0dWFsICYmCisJCWVjaG8gZGF0YTMgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDItcmV2LXBhcnNlLXBhcnNlb3B0LnNoIGIvdC90MTUwMi1yZXYtcGFyc2UtcGFyc2VvcHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzEwZjkzZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDItcmV2LXBhcnNlLXBhcnNlb3B0LnNoCkBAIC0wLDAgKzEsMTc5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb3B0aW9uc3BlYycgJworCXNlZCAtZSAicy9efC8vIiA+b3B0aW9uc3BlYyA8PFxFT0YKK3xzb21lLWNvbW1hbmQgW29wdGlvbnNdIDxhcmdzPi4uLgorfAorfHNvbWUtY29tbWFuZCBkb2VzIGZvbyBhbmQgYmFyIQorfC0tCit8aCxoZWxwICAgIHNob3cgdGhlIGhlbHAKK3wKK3xmb28gICAgICAgc29tZSBuaWZ0eSBvcHRpb24gLS1mb28KK3xiYXI9ICAgICAgc29tZSBjb29sIG9wdGlvbiAtLWJhciB3aXRoIGFuIGFyZ3VtZW50Cit8YixiYXogICAgIGEgc2hvcnQgYW5kIGxvbmcgb3B0aW9uCit8Cit8IEFuIG9wdGlvbiBncm91cCBIZWFkZXIKK3xDPyAgICAgICAgb3B0aW9uIEMgd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorfGQsZGF0YT8gICBzaG9ydCBhbmQgbG9uZyBvcHRpb24gd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorfAorfCBBcmd1bWVudCBoaW50cworfEI9YXJnICAgICBzaG9ydCBvcHRpb24gcmVxdWlyZWQgYXJndW1lbnQKK3xiYXIyPWFyZyAgbG9uZyBvcHRpb24gcmVxdWlyZWQgYXJndW1lbnQKK3xlLGZ1ej13aXRoLXNwYWNlICBzaG9ydCBhbmQgbG9uZyBvcHRpb24gcmVxdWlyZWQgYXJndW1lbnQKK3xzP3NvbWUgICAgc2hvcnQgb3B0aW9uIG9wdGlvbmFsIGFyZ3VtZW50Cit8bG9uZz9kYXRhIGxvbmcgb3B0aW9uIG9wdGlvbmFsIGFyZ3VtZW50Cit8ZyxmbHVmP3BhdGggICAgIHNob3J0IGFuZCBsb25nIG9wdGlvbiBvcHRpb25hbCBhcmd1bWVudAorfGxvbmdlc3Q9dmVyeS1sb25nLWFyZ3VtZW50LWhpbnQgIGEgdmVyeSBsb25nIGFyZ3VtZW50IGhpbnQKK3xwYWlyPWtleT12YWx1ZSAgd2l0aCBhbiBlcXVhbHMgc2lnbiBpbiB0aGUgaGludAorfHNob3J0LWhpbnQ9YSAgICB3aXRoIGEgb25lIHN5bWJvbCBoaW50Cit8Cit8RXh0cmFzCit8ZXh0cmExICAgIGxpbmUgYWJvdmUgdXNlZCB0byBjYXVzZSBhIHNlZ2ZhdWx0IGJ1dCBubyBsb25nZXIgZG9lcworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCBoZWxwIG91dHB1dCcgJworCXNlZCAtZSAicy9efC8vIiA+ZXhwZWN0IDw8XEVORF9FWFBFQ1QgJiYKK3xjYXQgPDxcRU9GCit8dXNhZ2U6IHNvbWUtY29tbWFuZCBbb3B0aW9uc10gPGFyZ3M+Li4uCit8Cit8ICAgIHNvbWUtY29tbWFuZCBkb2VzIGZvbyBhbmQgYmFyIQorfAorfCAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGUgaGVscAorfCAgICAtLWZvbyAgICAgICAgICAgICAgICAgc29tZSBuaWZ0eSBvcHRpb24gLS1mb28KK3wgICAgLS1iYXIgLi4uICAgICAgICAgICAgIHNvbWUgY29vbCBvcHRpb24gLS1iYXIgd2l0aCBhbiBhcmd1bWVudAorfCAgICAtYiwgLS1iYXogICAgICAgICAgICAgYSBzaG9ydCBhbmQgbG9uZyBvcHRpb24KK3wKK3xBbiBvcHRpb24gZ3JvdXAgSGVhZGVyCit8ICAgIC1DWy4uLl0gICAgICAgICAgICAgICBvcHRpb24gQyB3aXRoIGFuIG9wdGlvbmFsIGFyZ3VtZW50Cit8ICAgIC1kLCAtLWRhdGFbPS4uLl0gICAgICBzaG9ydCBhbmQgbG9uZyBvcHRpb24gd2l0aCBhbiBvcHRpb25hbCBhcmd1bWVudAorfAorfEFyZ3VtZW50IGhpbnRzCit8ICAgIC1CIDxhcmc+ICAgICAgICAgICAgICBzaG9ydCBvcHRpb24gcmVxdWlyZWQgYXJndW1lbnQKK3wgICAgLS1iYXIyIDxhcmc+ICAgICAgICAgIGxvbmcgb3B0aW9uIHJlcXVpcmVkIGFyZ3VtZW50Cit8ICAgIC1lLCAtLWZ1eiA8d2l0aC1zcGFjZT4KK3wgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IGFuZCBsb25nIG9wdGlvbiByZXF1aXJlZCBhcmd1bWVudAorfCAgICAtc1s8c29tZT5dICAgICAgICAgICAgc2hvcnQgb3B0aW9uIG9wdGlvbmFsIGFyZ3VtZW50Cit8ICAgIC0tbG9uZ1s9PGRhdGE+XSAgICAgICBsb25nIG9wdGlvbiBvcHRpb25hbCBhcmd1bWVudAorfCAgICAtZywgLS1mbHVmWz08cGF0aD5dICAgc2hvcnQgYW5kIGxvbmcgb3B0aW9uIG9wdGlvbmFsIGFyZ3VtZW50Cit8ICAgIC0tbG9uZ2VzdCA8dmVyeS1sb25nLWFyZ3VtZW50LWhpbnQ+Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICBhIHZlcnkgbG9uZyBhcmd1bWVudCBoaW50Cit8ICAgIC0tcGFpciA8a2V5PXZhbHVlPiAgICB3aXRoIGFuIGVxdWFscyBzaWduIGluIHRoZSBoaW50Cit8ICAgIC0tc2hvcnQtaGludCA8YT4gICAgICB3aXRoIGEgb25lIHN5bWJvbCBoaW50Cit8Cit8RXh0cmFzCit8ICAgIC0tZXh0cmExICAgICAgICAgICAgICBsaW5lIGFib3ZlIHVzZWQgdG8gY2F1c2UgYSBzZWdmYXVsdCBidXQgbm8gbG9uZ2VyIGRvZXMKK3wKK3xFT0YKK0VORF9FWFBFQ1QKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLWggPiBvdXRwdXQgPCBvcHRpb25zcGVjICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0LjEnICIKKwljYXQgPiBleHBlY3QgPDxFT0YKK3NldCAtLSAtLWZvbyAtLWJhciAnaGFtJyAtYiAtLSAnYXJnJworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCcgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLSAtLWZvbyAtLWJhcj1oYW0gLS1iYXogYXJnIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IHdpdGggbWl4ZWQgb3B0aW9ucyBhbmQgYXJndW1lbnRzJyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tIC0tZm9vIGFyZyAtLWJhcj1oYW0gLS1iYXogPCBvcHRpb25zcGVjID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3QuMicgIgorCWNhdCA+IGV4cGVjdCA8PEVPRgorc2V0IC0tIC0tZm9vIC0tICdhcmcnICctLWJhcj1oYW0nCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IHdpdGggLS0nICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS0gLS1mb28gLS0gYXJnIC0tYmFyPWhhbSA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCAtLXN0b3AtYXQtbm9uLW9wdGlvbicgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0b3AtYXQtbm9uLW9wdGlvbiAtLSAtLWZvbyBhcmcgLS1iYXI9aGFtIDwgb3B0aW9uc3BlYyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0LjMnICIKKwljYXQgPiBleHBlY3QgPDxFT0YKK3NldCAtLSAtLWZvbyAtLSAnLS0nICdhcmcnICctLWJhcj1oYW0nCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0ta2VlcC1kYXNoZGFzaCcgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2ggLS0gLS1mb28gLS0gYXJnIC0tYmFyPWhhbSA8IG9wdGlvbnNwZWMgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdC40JyAiCisJY2F0ID5leHBlY3QgPDxFT0YKK3NldCAtLSAtLWZvbyAtLSAnLS0nICdhcmcnICctLXNwYW09aGFtJworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2ggLS1zdG9wLWF0LW5vbi1vcHRpb24gd2l0aCAtLScgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLWtlZXAtZGFzaGRhc2ggLS1zdG9wLWF0LW5vbi1vcHRpb24gLS0gLS1mb28gLS0gYXJnIC0tc3BhbT1oYW0gPG9wdGlvbnNwZWMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0LjUnICIKKwljYXQgPiBleHBlY3QgPDxFT0YKK3NldCAtLSAtLWZvbyAtLSAnYXJnJyAnLS1zcGFtPWhhbScKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgLS1rZWVwLWRhc2hkYXNoIC0tc3RvcC1hdC1ub24tb3B0aW9uIHdpdGhvdXQgLS0nICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1rZWVwLWRhc2hkYXNoIC0tc3RvcC1hdC1ub24tb3B0aW9uIC0tIC0tZm9vIGFyZyAtLXNwYW09aGFtIDxvcHRpb25zcGVjID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdC42JyAiCisJY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1mb28gLS1iYXI9J3onIC0tYmF6IC1DJ1onIC0tZGF0YT0nQScgLS0gJ2FyZycKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgLS1zdHVjay1sb25nJyAnCisJZ2l0IHJldi1wYXJzZSAtLXBhcnNlb3B0IC0tc3R1Y2stbG9uZyAtLSAtLWZvbyAtLWJhcj16IC1iIGFyZyAtQ1ogLWRBIDxvcHRpb25zcGVjID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdC43JyAiCisJY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1kYXRhPScnIC1DIC0tYmF6IC0tICdhcmcnCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0tc3R1Y2stbG9uZyBhbmQgZW1wdHkgb3B0aW9uYWwgYXJndW1lbnQnICcKKwlnaXQgcmV2LXBhcnNlIC0tcGFyc2VvcHQgLS1zdHVjay1sb25nIC0tIC0tZGF0YT0gYXJnIC1DIC1iIDxvcHRpb25zcGVjID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdC44JyAiCisJY2F0ID4gZXhwZWN0IDw8RU9GCitzZXQgLS0gLS1kYXRhIC0tYmF6IC0tICdhcmcnCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLXBhcnNlb3B0IC0tc3R1Y2stbG9uZyBhbmQgbG9uZyBvcHRpb24gd2l0aCB1bnNldCBvcHRpb25hbCBhcmd1bWVudCcgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0dWNrLWxvbmcgLS0gLS1kYXRhIGFyZyAtYiA8b3B0aW9uc3BlYyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tcGFyc2VvcHQgLS1zdHVjay1sb25nIGFuZCBzaG9ydCBvcHRpb24gd2l0aCB1bnNldCBvcHRpb25hbCBhcmd1bWVudCcgJworCWdpdCByZXYtcGFyc2UgLS1wYXJzZW9wdCAtLXN0dWNrLWxvbmcgLS0gLWQgYXJnIC1iIDxvcHRpb25zcGVjID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwMy1yZXYtcGFyc2UtdmVyaWZ5LnNoIGIvdC90MTUwMy1yZXYtcGFyc2UtdmVyaWZ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFiMjdkMGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTAzLXJldi1wYXJzZS12ZXJpZnkuc2gKQEAgLTAsMCArMSwxNDIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggQ2hyaXN0aWFuIENvdWRlcgorIwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5JworCitleGVjIDwvZGV2L251bGwKKworLiAuL3Rlc3QtbGliLnNoCisKK2FkZF9saW5lX2ludG9fZmlsZSgpCit7CisgICAgX2xpbmU9JDEKKyAgICBfZmlsZT0kMgorCisgICAgaWYgWyAtZiAiJF9maWxlIiBdOyB0aGVuCisgICAgICAgIGVjaG8gIiRfbGluZSIgPj4gJF9maWxlIHx8IHJldHVybiAkPworICAgICAgICBNU0c9IkFkZCA8JF9saW5lPiBpbnRvIDwkX2ZpbGU+LiIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIiRfbGluZSIgPiAkX2ZpbGUgfHwgcmV0dXJuICQ/CisgICAgICAgIGdpdCBhZGQgJF9maWxlIHx8IHJldHVybiAkPworICAgICAgICBNU0c9IkNyZWF0ZSBmaWxlIDwkX2ZpbGU+IHdpdGggPCRfbGluZT4gaW5zaWRlLiIKKyAgICBmaQorCisgICAgdGVzdF90aWNrCisgICAgZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICIkTVNHIiAkX2ZpbGUKK30KKworSEFTSDE9CitIQVNIMj0KK0hBU0gzPQorSEFTSDQ9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBiYXNpYyByZXBvIHdpdGggMSBmaWxlIChoZWxsbykgYW5kIDQgY29tbWl0cycgJworCWFkZF9saW5lX2ludG9fZmlsZSAiMTogSGVsbG8gV29ybGQiIGhlbGxvICYmCisJSEFTSDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJYWRkX2xpbmVfaW50b19maWxlICIyOiBBIG5ldyBkYXkgZm9yIGdpdCIgaGVsbG8gJiYKKwlIQVNIMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjM6IEFub3RoZXIgbmV3IGRheSBmb3IgZ2l0IiBoZWxsbyAmJgorCUhBU0gzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiNDogQ2lhbyBmb3Igbm93IiBoZWxsbyAmJgorCUhBU0g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JrcyB3aXRoIG9uZSBnb29kIHJldicgJworCXJldl9oYXNoMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0gxKSAmJgorCXRlc3QgIiRyZXZfaGFzaDEiID0gIiRIQVNIMSIgJiYKKwlyZXZfaGFzaDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRIQVNIMikgJiYKKwl0ZXN0ICIkcmV2X2hhc2gyIiA9ICIkSEFTSDIiICYmCisJcmV2X2hhc2gzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDMpICYmCisJdGVzdCAiJHJldl9oYXNoMyIgPSAiJEhBU0gzIiAmJgorCXJldl9oYXNoND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0g0KSAmJgorCXRlc3QgIiRyZXZfaGFzaDQiID0gIiRIQVNINCIgJiYKKwlyZXZfbWFzdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdCAiJHJldl9tYXN0ZXIiID0gIiRIQVNINCIgJiYKKwlyZXZfaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcmV2X2hlYWQiID0gIiRIQVNINCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aCBhbnkgYmFkIHJldiBvciBtYW55IGdvb2QgcmV2cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgMj5lcnJvciAmJgorCWdyZXAgInNpbmdsZSByZXZpc2lvbiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGZvbyAyPmVycm9yICYmCisJZ3JlcCAic2luZ2xlIHJldmlzaW9uIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCBiYXIgMj5lcnJvciAmJgorCWdyZXAgInNpbmdsZSByZXZpc2lvbiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJheiBIRUFEIDI+ZXJyb3IgJiYKKwlncmVwICJzaW5nbGUgcmV2aXNpb24iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAkSEFTSDIgSEVBRCAyPmVycm9yICYmCisJZ3JlcCAic2luZ2xlIHJldmlzaW9uIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlscyBzaWxlbnRseSB3aGVuIHVzaW5nIC1xJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0IDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IGZvbyAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtcSBIRUFEIGJhciAyPmVycm9yICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXF1aWV0IC0tdmVyaWZ5IGJheiBIRUFEIDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5ICRIQVNIMiBIRUFEIDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgc2lsZW50bHkgd2hlbiB1c2luZyAtcSB3aXRoIGRlbGV0ZWQgcmVmbG9ncycgJworCXJlZj0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgdXBkYXRlLXJlZiAtLWNyZWF0ZS1yZWZsb2cgLW0gIm1lc3NhZ2UgZm9yIHJlZnMvdGVzdCIgcmVmcy90ZXN0ICIkcmVmIiAmJgorCWdpdCByZWZsb2cgZGVsZXRlIC0tdXBkYXRlcmVmIC0tcmV3cml0ZSByZWZzL3Rlc3RAezB9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtcSAtLXZlcmlmeSByZWZzL3Rlc3RAezB9ID5lcnJvciAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHNpbGVudGx5IHdoZW4gdXNpbmcgLXEgd2l0aCBub3QgZW5vdWdoIHJlZmxvZ3MnICcKKwlyZWY9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHVwZGF0ZS1yZWYgLS1jcmVhdGUtcmVmbG9nIC1tICJtZXNzYWdlIGZvciByZWZzL3Rlc3QyIiByZWZzL3Rlc3QyICIkcmVmIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLXEgLS12ZXJpZnkgcmVmcy90ZXN0MkB7OTk5fSA+ZXJyb3IgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZWVkcyBzaWxlbnRseSB3aXRoIC1xIGFuZCByZWZsb2dzIHRoYXQgZG8gbm90IGdvIGZhciBiYWNrIGVub3VnaCBpbiB0aW1lJyAnCisJcmVmPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCB1cGRhdGUtcmVmIC0tY3JlYXRlLXJlZmxvZyAtbSAibWVzc2FnZSBmb3IgcmVmcy90ZXN0MyIgcmVmcy90ZXN0MyAiJHJlZiIgJiYKKwlnaXQgcmV2LXBhcnNlIC1xIC0tdmVyaWZ5IHJlZnMvdGVzdDNAezEueWVhci5hZ299ID5hY3R1YWwgMj5lcnJvciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvciAmJgorCWVjaG8gIiRyZWYiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHN0ZG91dCBvdXRwdXQgb24gZXJyb3InICcKKwl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkpIiAmJgorCXRlc3QgLXogIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBmb28pIiAmJgorCXRlc3QgLXogIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBiYXogSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgYmFyKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJEhBU0gyIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgLS1kZWZhdWx0JyAnCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgbWFzdGVyICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgbWFzdGVyIEhFQUQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBtYXN0ZXIgLS12ZXJpZnkgJiYKKwlnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBtYXN0ZXIgLS12ZXJpZnkgSEVBRCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAtLWRlZmF1bHQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBmb28gLS1kZWZhdWx0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1kZWZhdWx0IEhFQUQgLS12ZXJpZnkgYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLWRlZmF1bHQgSEVBRCBiYXogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tZGVmYXVsdCBmb28gLS12ZXJpZnkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tZGVmYXVsdCBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzdGVyQHtufSBmb3IgdmFyaW91cyBuJyAnCisJTj0kKGdpdCByZWZsb2cgfCB3YyAtbCkgJiYKKwlObTE9JCgoJE4tMSkpICYmCisJTnAxPSQoKCROKzEpKSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyQHswfSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyQHsxfSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyQHskTm0xfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyQHskTn0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlckB7JE5wMX0KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTA0LWNlaWxpbmctZGlycy5zaCBiL3QvdDE1MDQtY2VpbGluZy1kaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNkNTE2MTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA0LWNlaWxpbmctZGlycy5zaApAQCAtMCwwICsxLDE4MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9wcmVmaXgoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJDEiIFwKKwkidGVzdCAnJDInID0gXCJcJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgpXCIiCit9CisKK3Rlc3RfZmFpbCgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMTogcHJlZml4IiAnCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCByZXYtcGFyc2UgLS1zaG93LXByZWZpeAorCScKK30KKworVFJBU0hfUk9PVD0iJFBXRCIKK1JPT1RfUEFSRU5UPSQoZGlybmFtZSAiJFRSQVNIX1JPT1QiKQorCisKK3Vuc2V0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCit0ZXN0X3ByZWZpeCBub19jZWlsICIiCisKK2V4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUworCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iIgordGVzdF9wcmVmaXggY2VpbF9lbXB0eSAiIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFJPT1RfUEFSRU5UIgordGVzdF9wcmVmaXggY2VpbF9hdF9wYXJlbnQgIiIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRST09UX1BBUkVOVC8iCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3BhcmVudF9zbGFzaCAiIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QiCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3RyYXNoICIiCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC8iCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3RyYXNoX3NsYXNoICIiCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIiCit0ZXN0X3ByZWZpeCBjZWlsX2F0X3N1YiAiIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViLyIKK3Rlc3RfcHJlZml4IGNlaWxfYXRfc3ViX3NsYXNoICIiCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KKwlsbiAtcyBzdWIgdG9wCitmaQorCitta2RpciAtcCBzdWIvZGlyIHx8IGV4aXQgMQorY2Qgc3ViL2RpciB8fCBleGl0IDEKKwordW5zZXQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMKK3Rlc3RfcHJlZml4IHN1YmRpcl9ub19jZWlsICJzdWIvZGlyLyIKKworZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIiCit0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9lbXB0eSAic3ViL2Rpci8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVCIKK3Rlc3RfZmFpbCBzdWJkaXJfY2VpbF9hdF90cmFzaAorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QvIgordGVzdF9mYWlsIHN1YmRpcl9jZWlsX2F0X3RyYXNoX3NsYXNoCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIiCit0ZXN0X2ZhaWwgc3ViZGlyX2NlaWxfYXRfc3ViCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIvIgordGVzdF9mYWlsIHN1YmRpcl9jZWlsX2F0X3N1Yl9zbGFzaAorCitpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCit0aGVuCisJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3RvcCIKKwl0ZXN0X2ZhaWwgc3ViZGlyX2NlaWxfYXRfdG9wCisJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3RvcC8iCisJdGVzdF9mYWlsIHN1YmRpcl9jZWlsX2F0X3RvcF9zbGFzaAorCisJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IjokVFJBU0hfUk9PVC90b3AiCisJdGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfYXRfdG9wX25vX3Jlc29sdmUgInN1Yi9kaXIvIgorCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSI6JFRSQVNIX1JPT1QvdG9wLyIKKwl0ZXN0X3ByZWZpeCBzdWJkaXJfY2VpbF9hdF90b3Bfc2xhc2hfbm9fcmVzb2x2ZSAic3ViL2Rpci8iCitmaQorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViL2RpciIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1YmRpciAic3ViL2Rpci8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWIvZGlyLyIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1YmRpcl9zbGFzaCAic3ViL2Rpci8iCisKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1IgordGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfYXRfc3UgInN1Yi9kaXIvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3UvIgordGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfYXRfc3Vfc2xhc2ggInN1Yi9kaXIvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvc3ViL2RpIgordGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfYXRfc3ViX2RpICJzdWIvZGlyLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1Yi9kaSIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1Yl9kaV9zbGFzaCAic3ViL2Rpci8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWJkaSIKK3Rlc3RfcHJlZml4IHN1YmRpcl9jZWlsX2F0X3N1YmRpICJzdWIvZGlyLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1YmRpIgordGVzdF9wcmVmaXggc3ViZGlyX2NlaWxfYXRfc3ViZGlfc2xhc2ggInN1Yi9kaXIvIgorCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIvZm9vOiRUUkFTSF9ST09UL3N1YiIKK3Rlc3RfZmFpbCBzZWNvbmRfb2ZfdHdvCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdWI6L2JhciIKK3Rlc3RfZmFpbCBmaXJzdF9vZl90d28KKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9Ii9mb286JFRSQVNIX1JPT1Qvc3ViOi9iYXIiCit0ZXN0X2ZhaWwgc2Vjb25kX29mX3RocmVlCisKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3N1YiIKK0dJVF9ESVI9Li4vLi4vLmdpdAorZXhwb3J0IEdJVF9ESVIKK3Rlc3RfcHJlZml4IGdpdF9kaXJfc3BlY2lmaWVkICIiCit1bnNldCBHSVRfRElSCisKKworY2QgLi4vLi4gfHwgZXhpdCAxCitta2RpciAtcCBzL2QgfHwgZXhpdCAxCitjZCBzL2QgfHwgZXhpdCAxCisKK3Vuc2V0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTCit0ZXN0X3ByZWZpeCBzZF9ub19jZWlsICJzL2QvIgorCitleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiIKK3Rlc3RfcHJlZml4IHNkX2NlaWxfZW1wdHkgInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVCIKK3Rlc3RfZmFpbCBzZF9jZWlsX2F0X3RyYXNoCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC8iCit0ZXN0X2ZhaWwgc2RfY2VpbF9hdF90cmFzaF9zbGFzaAorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1QvcyIKK3Rlc3RfZmFpbCBzZF9jZWlsX2F0X3MKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MvIgordGVzdF9mYWlsIHNkX2NlaWxfYXRfc19zbGFzaAorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvcy9kIgordGVzdF9wcmVmaXggc2RfY2VpbF9hdF9zZCAicy9kLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MvZC8iCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3NkX3NsYXNoICJzL2QvIgorCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdSIKK3Rlc3RfcHJlZml4IHNkX2NlaWxfYXRfc3UgInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zdS8iCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3N1X3NsYXNoICJzL2QvIgorCitHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX1JPT1Qvcy9kaSIKK3Rlc3RfcHJlZml4IHNkX2NlaWxfYXRfc19kaSAicy9kLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3MvZGkiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3NfZGlfc2xhc2ggInMvZC8iCisKK0dJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfUk9PVC9zZGkiCit0ZXN0X3ByZWZpeCBzZF9jZWlsX2F0X3NkaSAicy9kLyIKKworR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ST09UL3NkaSIKK3Rlc3RfcHJlZml4IHNkX2NlaWxfYXRfc2RpX3NsYXNoICJzL2QvIgorCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUwNS1yZXYtcGFyc2UtbGFzdC5zaCBiL3QvdDE1MDUtcmV2LXBhcnNlLWxhc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDk2OWVkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDUtcmV2LXBhcnNlLWxhc3Quc2gKQEAgLTAsMCArMSw2MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgQHstTn0gc3ludGF4JworCisuIC4vdGVzdC1saWIuc2gKKworCittYWtlX2NvbW1pdCAoKSB7CisJZWNobyAiJDEiID4gIiQxIiAmJgorCWdpdCBhZGQgIiQxIiAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwltYWtlX2NvbW1pdCAxICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJbWFrZV9jb21taXQgMiAmJgorCW1ha2VfY29tbWl0IDMgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCW1ha2VfY29tbWl0IDQgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCisnCisKKyMgMSAtLSAyIC0tIDMgbWFzdGVyCisjICBcICAgICAgICAgXAorIyAgIFwgICAgICAgICBcCisjICAgIC0tLSA0IC0tLSA1IHNpZGUKKyMKKyMgYW5kICdzaWRlJyBzaG91bGQgYmUgdGhlIGxhc3QgYnJhbmNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTF9IHdvcmtzJyAnCisJdGVzdF9jbXBfcmV2IHNpZGUgQHstMX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHstMX1+MiB3b3JrcycgJworCXRlc3RfY21wX3JldiBzaWRlfjIgQHstMX1+MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAey0xfV4yIHdvcmtzJyAnCisJdGVzdF9jbXBfcmV2IHNpZGVeMiBAey0xfV4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTF9QHsxfSB3b3JrcycgJworCXRlc3RfY21wX3JldiBzaWRlQHsxfSBAey0xfUB7MX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHstMn0gd29ya3MnICcKKwl0ZXN0X2NtcF9yZXYgbWFzdGVyIEB7LTJ9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7LTN9IGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBAey0zfQorJworCit0ZXN0X2RvbmUKKworCmRpZmYgLS1naXQgYS90L3QxNTA2LXJldi1wYXJzZS1kaWFnbm9zaXMuc2ggYi90L3QxNTA2LXJldi1wYXJzZS1kaWFnbm9zaXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjEzZDliZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDYtcmV2LXBhcnNlLWRpYWdub3Npcy5zaApAQCAtMCwwICsxLDIyMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHJldi1wYXJzZSBkaWFnbm9zaXMgZm9yIGludmFsaWQgYXJndW1lbnQnCisKK2V4ZWMgPC9kZXYvbnVsbAorCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9kaWRfeW91X21lYW4gKCkKK3sKKwlzcT0iJyIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWZhdGFsOiBQYXRoICckMiQzJyAkNCwgYnV0IG5vdCAkezU6LSRzcSQzJHNxfS4KKwlEaWQgeW91IG1lYW4gJyQxOiQyJDMnJHsyOisgYWthICRzcSQxOi4vJDMkc3F9PworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGVycm9yCit9CisKK0hBU0hfZmlsZT0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJhc2ljIHJlcG8nICcKKwllY2hvIG9uZSA+IGZpbGUudHh0ICYmCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyB0d28gPiBzdWJkaXIvZmlsZS50eHQgJiYKKwllY2hvIHRocmVlID4gc3ViZGlyL2ZpbGUyLnR4dCAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gaW5pdCAmJgorCWVjaG8gZm91ciA+IGluZGV4LW9ubHkudHh0ICYmCisJZ2l0IGFkZCBpbmRleC1vbmx5LnR4dCAmJgorCWVjaG8gZml2ZSA+IGRpc2stb25seS50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCBmaWxlIG9iamVjdHMnICcKKwlIQVNIX2ZpbGU9JChnaXQgcmV2LXBhcnNlIEhFQUQ6ZmlsZS50eHQpICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEOnN1YmRpci9maWxlLnR4dCAmJgorCWdpdCByZXYtcGFyc2UgOmluZGV4LW9ubHkudHh0ICYmCisJKGNkIHN1YmRpciAmJgorCSBnaXQgcmV2LXBhcnNlIEhFQUQ6c3ViZGlyL2ZpbGUyLnR4dCAmJgorCSB0ZXN0ICRIQVNIX2ZpbGUgPSAkKGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlLnR4dCkgJiYKKwkgdGVzdCAkSEFTSF9maWxlID0gJChnaXQgcmV2LXBhcnNlIDpmaWxlLnR4dCkgJiYKKwkgdGVzdCAkSEFTSF9maWxlID0gJChnaXQgcmV2LXBhcnNlIDowOmZpbGUudHh0KSApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICgwKScgJworCWdpdCByZXYtcGFyc2UgOmZpbGUudHh0ID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgOi4vZmlsZS50eHQgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCWdpdCByZXYtcGFyc2UgOjA6Li9maWxlLnR4dCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICgxKScgJworCWdpdCByZXYtcGFyc2UgSEVBRDpmaWxlLnR4dCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6Li9maWxlLnR4dCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJlY3QgcmVsYXRpdmUgZmlsZSBvYmplY3RzICgyKScgJworCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRDouLi9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCByZWxhdGl2ZSBmaWxlIG9iamVjdHMgKDMpJyAnCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEOi4uL3N1YmRpci8uLi9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCByZWxhdGl2ZSBmaWxlIG9iamVjdHMgKDQpJyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEOnN1YmRpci9maWxlLnR4dCA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQ6Li9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycmVjdCByZWxhdGl2ZSBmaWxlIG9iamVjdHMgKDUpJyAnCisJZ2l0IHJldi1wYXJzZSA6c3ViZGlyL2ZpbGUudHh0ID5leHBlY3RlZCAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCByZXYtcGFyc2UgOi4vZmlsZS50eHQgPnJlc3VsdCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3RlZCByZXN1bHQgJiYKKwkJZ2l0IHJldi1wYXJzZSA6MDouL2ZpbGUudHh0ID5yZXN1bHQgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0ZWQgcmVzdWx0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IHJlbGF0aXZlIGZpbGUgb2JqZWN0cyAoNiknICcKKwlnaXQgcmV2LXBhcnNlIDpmaWxlLnR4dCA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgcmV2LXBhcnNlIDouLi9maWxlLnR4dCA+cmVzdWx0ICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdGVkIHJlc3VsdCAmJgorCQlnaXQgcmV2LXBhcnNlIDowOi4uL2ZpbGUudHh0ID5yZXN1bHQgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0ZWQgcmVzdWx0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3QgcmV2aXNpb24gaWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGZvb2JhcjpmaWxlLnR4dCAyPmVycm9yICYmCisJZ3JlcCAiSW52YWxpZCBvYmplY3QgbmFtZSAnIiciJ2Zvb2JhciciJyInLiIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGZvb2JhciAyPiBlcnJvciAmJgorCWdyZXAgInVua25vd24gcmV2aXNpb24gb3IgcGF0aCBub3QgaW4gdGhlIHdvcmtpbmcgdHJlZS4iIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBmaWxlIGluIHNoYTE6cGF0aCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDpub3RoaW5nLnR4dCAyPiBlcnJvciAmJgorCWdyZXAgImZhdGFsOiBQYXRoICciJyInbm90aGluZy50eHQnIiciJyBkb2VzIG5vdCBleGlzdCBpbiAnIiciJ0hFQUQnIiciJyIgZXJyb3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIEhFQUQ6aW5kZXgtb25seS50eHQgMj4gZXJyb3IgJiYKKwlncmVwICJmYXRhbDogUGF0aCAnIiciJ2luZGV4LW9ubHkudHh0JyInIicgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gJyInIidIRUFEJyInIicuIiBlcnJvciAmJgorCShjZCBzdWJkaXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUyLnR4dCAyPiBlcnJvciAmJgorCSB0ZXN0X2RpZF95b3VfbWVhbiBIRUFEIHN1YmRpci8gZmlsZTIudHh0IGV4aXN0cyApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCBmaWxlIGluIDpwYXRoIGFuZCA6TjpwYXRoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6bm90aGluZy50eHQgMj4gZXJyb3IgJiYKKwlncmVwICJmYXRhbDogUGF0aCAnIiciJ25vdGhpbmcudHh0JyInIicgZG9lcyBub3QgZXhpc3QgKG5laXRoZXIgb24gZGlzayBub3IgaW4gdGhlIGluZGV4KS4iIGVycm9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6MTpub3RoaW5nLnR4dCAyPiBlcnJvciAmJgorCWdyZXAgIlBhdGggJyInIidub3RoaW5nLnR4dCciJyInIGRvZXMgbm90IGV4aXN0IChuZWl0aGVyIG9uIGRpc2sgbm9yIGluIHRoZSBpbmRleCkuIiBlcnJvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgOjE6ZmlsZS50eHQgMj4gZXJyb3IgJiYKKwl0ZXN0X2RpZF95b3VfbWVhbiAiOjAiICIiIGZpbGUudHh0ICJpcyBpbiB0aGUgaW5kZXgiICJhdCBzdGFnZSAxIiAmJgorCShjZCBzdWJkaXIgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSA6MTpmaWxlLnR4dCAyPiBlcnJvciAmJgorCSB0ZXN0X2RpZF95b3VfbWVhbiAiOjAiICIiIGZpbGUudHh0ICJpcyBpbiB0aGUgaW5kZXgiICJhdCBzdGFnZSAxIiAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDpmaWxlMi50eHQgMj4gZXJyb3IgJiYKKwkgdGVzdF9kaWRfeW91X21lYW4gIjowIiBzdWJkaXIvIGZpbGUyLnR4dCAiaXMgaW4gdGhlIGluZGV4IiAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDoyOmZpbGUyLnR4dCAyPiBlcnJvciAmJgorCSB0ZXN0X2RpZF95b3VfbWVhbiA6MCBzdWJkaXIvIGZpbGUyLnR4dCAiaXMgaW4gdGhlIGluZGV4IikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIDpkaXNrLW9ubHkudHh0IDI+IGVycm9yICYmCisJZ3JlcCAiZmF0YWw6IFBhdGggJyInIidkaXNrLW9ubHkudHh0JyInIicgZXhpc3RzIG9uIGRpc2ssIGJ1dCBub3QgaW4gdGhlIGluZGV4LiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBAe259IHJlZmVyZW5jZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWFzdGVyQHs5OTk5OX0gPm91dHB1dCAyPmVycm9yICYmCisJdGVzdCAteiAiJChjYXQgb3V0cHV0KSIgJiYKKwlncmVwICJmYXRhbDogTG9nIGZvciBbXiBdKiBvbmx5IGhhcyBbMC05XVswLTldKiBlbnRyaWVzLiIgZXJyb3IgICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJAezk5OTk5fSA+b3V0cHV0IDI+ZXJyb3IgJiYKKwl0ZXN0IC16ICIkKGNhdCBvdXRwdXQpIiAmJgorCWdyZXAgImZhdGFsOiBMb2cgZm9yIFteIF0qIG9ubHkgaGFzIFswLTldWzAtOV0qIGVudHJpZXMuIiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBwYXRoIG5vdCBmb3VuZCcgJworCSgKKwkJY2Qgc3ViZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRDouL25vbmV4aXN0ZW50LnR4dCAyPmVycm9yICYmCisJCWdyZXAgc3ViZGlyL25vbmV4aXN0ZW50LnR4dCBlcnJvcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgcGF0aCBvdXRzaWRlIHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEOi4uL2ZpbGUudHh0ID5vdXRwdXQgMj5lcnJvciAmJgorCXRlc3QgLXogIiQoY2F0IG91dHB1dCkiICYmCisJZ3JlcCAib3V0c2lkZSByZXBvc2l0b3J5IiBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWxhdGl2ZSBwYXRoIHdoZW4gY3dkIGlzIG91dHNpZGUgd29ya3RyZWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPS5naXQgLS13b3JrLXRyZWU9c3ViZGlyIHJldi1wYXJzZSBIRUFEOi4vZmlsZS50eHQgPm91dHB1dCAyPmVycm9yICYmCisJdGVzdCAteiAiJChjYXQgb3V0cHV0KSIgJiYKKwlncmVwICJyZWxhdGl2ZSBwYXRoIHN5bnRheCBjYW4udCBiZSB1c2VkIG91dHNpZGUgd29ya2luZyB0cmVlLiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgcGF0aCB3aGVuIHN0YXJ0dXBfaW5mbyBpcyBOVUxMJyAnCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1tYXRjaC10cmVlcyBIRUFEOi4vZmlsZS50eHQgSEVBRDouL2ZpbGUudHh0IDI+ZXJyb3IgJiYKKwlncmVwICJCVUc6IHN0YXJ0dXBfaW5mbyBzdHJ1Y3QgaXMgbm90IGluaXRpYWxpemVkLiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnPGNvbW1pdD46ZmlsZSBjb3JyZWN0bHkgZGlhZ25vc2VkIGFmdGVyIGEgcGF0aG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGZpbGUudHh0IEhFQUQ6ZmlsZS50eHQgMT5hY3R1YWwgMj5lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgISAiZXhpc3RzIG9uIGRpc2siIGVycm9yICYmCisJdGVzdF9pMThuZ3JlcCAibm8gc3VjaCBwYXRoIGluIHRoZSB3b3JraW5nIHRyZWUiIGVycm9yICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZpbGUudHh0CisJSEVBRDpmaWxlLnR4dAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG90ZG90IGlzIG5vdCBhbiBlbXB0eSBzZXQnICcKKwkoIEg9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmIGVjaG8gJEggJiYgZWNobyBeJEggKSA+ZXhwZWN0ICYmCisKKwlnaXQgcmV2LXBhcnNlIEhFQUQuLiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHJldi1wYXJzZSAuLkhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gLi4gPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLi4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJnIGJlZm9yZSBkYXNoZGFzaCBtdXN0IGJlIGEgcmV2aXNpb24gKG1pc3NpbmcpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBmb29iYXIgLS0gMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJiYWQgcmV2aXNpb24iIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmcgYmVmb3JlIGRhc2hkYXNoIG11c3QgYmUgYSByZXZpc2lvbiAoZmlsZSknICcKKwk+Zm9vYmFyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBmb29iYXIgLS0gMj5zdGRlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJiYWQgcmV2aXNpb24iIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmcgYmVmb3JlIGRhc2hkYXNoIG11c3QgYmUgYSByZXZpc2lvbiAoYW1iaWd1b3VzKScgJworCT5mb29iYXIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2Zvb2JhciBIRUFEICYmCisJeworCQkjIHdlIGRvIG5vdCB3YW50IHRvIHVzZSByZXYtcGFyc2UgaGVyZSwgYmVjYXVzZQorCQkjIHdlIGFyZSB0ZXN0aW5nIGl0CisJCWNhdCAuZ2l0L3JlZnMvaGVhZHMvZm9vYmFyICYmCisJCXByaW50ZiAiJXNcbiIgLS0KKwl9ID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIGZvb2JhciAtLSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDctcmV2LXBhcnNlLXVwc3RyZWFtLnNoIGIvdC90MTUwNy1yZXYtcGFyc2UtdXBzdHJlYW0uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDZlZjFmMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDctcmV2LXBhcnNlLXVwc3RyZWFtLnNoCkBAIC0wLDAgKzEsMjUwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCA8YnJhbmNoPkB7dXBzdHJlYW19IHN5bnRheCcKKworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCXRlc3RfY29tbWl0IDEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCXRlc3RfY29tbWl0IDIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNsb25lIC4gY2xvbmUgJiYKKwl0ZXN0X2NvbW1pdCAzICYmCisJKGNkIGNsb25lICYmCisJIHRlc3RfY29tbWl0IDQgJiYKKwkgZ2l0IGJyYW5jaCAtLXRyYWNrIG15LXNpZGUgb3JpZ2luL3NpZGUgJiYKKwkgZ2l0IGJyYW5jaCAtLXRyYWNrIGxvY2FsLW1hc3RlciBtYXN0ZXIgJiYKKwkgZ2l0IGJyYW5jaCAtLXRyYWNrIGZ1bkBueSBvcmlnaW4vc2lkZSAmJgorCSBnaXQgYnJhbmNoIC0tdHJhY2sgQGZ1bm55IG9yaWdpbi9zaWRlICYmCisJIGdpdCBicmFuY2ggLS10cmFjayBmdW5ueUAgb3JpZ2luL3NpZGUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgLXQgbWFzdGVyIG1hc3Rlci1vbmx5IC4uICYmCisJIGdpdCBmZXRjaCBtYXN0ZXItb25seSAmJgorCSBnaXQgYnJhbmNoIGJhZC11cHN0cmVhbSAmJgorCSBnaXQgY29uZmlnIGJyYW5jaC5iYWQtdXBzdHJlYW0ucmVtb3RlIG1hc3Rlci1vbmx5ICYmCisJIGdpdCBjb25maWcgYnJhbmNoLmJhZC11cHN0cmVhbS5tZXJnZSByZWZzL2hlYWRzL3NpZGUKKwkpCisnCisKK3NxPSInIgorCitmdWxsX25hbWUgKCkgeworCShjZCBjbG9uZSAmJgorCSBnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lICIkQCIpCit9CisKK2NvbW1pdF9zdWJqZWN0ICgpIHsKKwkoY2QgY2xvbmUgJiYKKwkgZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzICIkQCIpCit9CisKK2Vycm9yX21lc3NhZ2UgKCkgeworCShjZCBjbG9uZSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkQCIpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dXBzdHJlYW19IHJlc29sdmVzIHRvIGNvcnJlY3QgZnVsbCBuYW1lJyAnCisJdGVzdCByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA9ICIkKGZ1bGxfbmFtZSBAe3Vwc3RyZWFtfSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dX0gcmVzb2x2ZXMgdG8gY29ycmVjdCBmdWxsIG5hbWUnICcKKwl0ZXN0IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID0gIiQoZnVsbF9uYW1lIEB7dX0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdteS1zaWRlQHt1cHN0cmVhbX0gcmVzb2x2ZXMgdG8gY29ycmVjdCBmdWxsIG5hbWUnICcKKwl0ZXN0IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSA9ICIkKGZ1bGxfbmFtZSBteS1zaWRlQHt1fSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vwc3RyZWFtIG9mIGJyYW5jaCB3aXRoIEAgaW4gbWlkZGxlJyAnCisJZnVsbF9uYW1lIGZ1bkBueUB7dX0gPmFjdHVhbCAmJgorCWVjaG8gcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vwc3RyZWFtIG9mIGJyYW5jaCB3aXRoIEAgYXQgc3RhcnQnICcKKwlmdWxsX25hbWUgQGZ1bm55QHt1fSA+YWN0dWFsICYmCisJZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBzdHJlYW0gb2YgYnJhbmNoIHdpdGggQCBhdCBlbmQnICcKKwlmdWxsX25hbWUgZnVubnlAQHt1fSA+YWN0dWFsICYmCisJZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcy9oZWFkcy9teS1zaWRlQHt1cHN0cmVhbX0gZG9lcyBub3QgcmVzb2x2ZSB0byBteS1zaWRle3Vwc3RyZWFtfScgJworCXRlc3RfbXVzdF9mYWlsIGZ1bGxfbmFtZSByZWZzL2hlYWRzL215LXNpZGVAe3Vwc3RyZWFtfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdteS1zaWRlQHt1fSByZXNvbHZlcyB0byBjb3JyZWN0IGNvbW1pdCcgJworCWdpdCBjaGVja291dCBzaWRlICYmCisJdGVzdF9jb21taXQgNSAmJgorCShjZCBjbG9uZSAmJiBnaXQgZmV0Y2gpICYmCisJdGVzdCAyID0gIiQoY29tbWl0X3N1YmplY3QgbXktc2lkZSkiICYmCisJdGVzdCA1ID0gIiQoY29tbWl0X3N1YmplY3QgbXktc2lkZUB7dX0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QtdHJhY2tpbmdAe3V9IGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZnVsbF9uYW1lIG5vbi10cmFja2luZ0B7dX0gJiYKKwkoY2QgY2xvbmUgJiYgZ2l0IGNoZWNrb3V0IC0tbm8tdHJhY2sgLWIgbm9uLXRyYWNraW5nKSAmJgorCXRlc3RfbXVzdF9mYWlsIGZ1bGxfbmFtZSBub24tdHJhY2tpbmdAe3V9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzxicmFuY2g+QHt1fUB7MX0gcmVzb2x2ZXMgY29ycmVjdGx5JyAnCisJdGVzdF9jb21taXQgNiAmJgorCShjZCBjbG9uZSAmJiBnaXQgZmV0Y2gpICYmCisJdGVzdCA1ID0gJChjb21taXRfc3ViamVjdCBteS1zaWRlQHt1fUB7MX0pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dX0gd2l0aG91dCBzcGVjaWZ5aW5nIGJyYW5jaCBmYWlscyBvbiBhIGRldGFjaGVkIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBAe3V9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIG5ldyBteS1zaWRlQHt1fSBmb3JrcyBmcm9tIHRoZSBzYW1lJyAnCisoCisJY2QgY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3IG15LXNpZGVAe3V9ICYmCisJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBteS1zaWRlQHt1fSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXN5bWJvbGljLWZ1bGwtbmFtZSBuZXdAe3V9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG15LXNpZGVAe3V9IHJlY29yZHMgdGhlIGNvcnJlY3QgbmFtZScgJworKAorCWNkIGNsb25lIHx8IGV4aXQKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIHx8IGV4aXQKKwlnaXQgYnJhbmNoIC1EIG5ldyA7IyBjYW4gZmFpbCBidXQgaXMgb2sKKwlnaXQgYnJhbmNoIC10IG5ldyBteS1zaWRlQHt1fSAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIG5ld0B7dX0gJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwllY2hvICJNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICR7c3F9b3JpZ2luL3NpZGUke3NxfSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC1kIG90aGVyQHt1fScgJworCWdpdCBjaGVja291dCAtdCAtYiBvdGhlciBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1kIEB7dX0gJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvdGhlckB7dX0nICcKKwlnaXQgYnJhbmNoIC1mIG1hc3RlciBIRUFEICYmCisJZ2l0IGNoZWNrb3V0IC10IC1iIGFub3RoZXIgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IEB7dX0gJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCWVjaG8gcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoQHt1fSB3b3JrcyB3aGVuIHRyYWNraW5nIGEgbG9jYWwgYnJhbmNoJyAnCisJdGVzdCByZWZzL2hlYWRzL21hc3RlciA9ICIkKGZ1bGxfbmFtZSBsb2NhbC1tYXN0ZXJAe3V9KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoQHt1fSBlcnJvciBtZXNzYWdlIHdoZW4gbm8gdXBzdHJlYW0nICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlmYXRhbDogbm8gdXBzdHJlYW0gY29uZmlndXJlZCBmb3IgYnJhbmNoICR7c3F9bm9uLXRyYWNraW5nJHtzcX0KKwlFT0YKKwllcnJvcl9tZXNzYWdlIG5vbi10cmFja2luZ0B7dX0gMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3V9IGVycm9yIG1lc3NhZ2Ugd2hlbiBubyB1cHN0cmVhbScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZhdGFsOiBubyB1cHN0cmVhbSBjb25maWd1cmVkIGZvciBicmFuY2ggJHtzcX1tYXN0ZXIke3NxfQorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQHt1fSAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaEB7dX0gZXJyb3IgbWVzc2FnZSB3aXRoIG1pc3NwZWx0IGJyYW5jaCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWZhdGFsOiBubyBzdWNoIGJyYW5jaDogJHtzcX1uby1zdWNoLWJyYW5jaCR7c3F9CisJRU9GCisJZXJyb3JfbWVzc2FnZSBuby1zdWNoLWJyYW5jaEB7dX0gMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3V9IGVycm9yIG1lc3NhZ2Ugd2hlbiBub3Qgb24gYSBicmFuY2gnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlmYXRhbDogSEVBRCBkb2VzIG5vdCBwb2ludCB0byBhIGJyYW5jaAorCUVPRgorCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEB7dX0gMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2hAe3V9IGVycm9yIG1lc3NhZ2UgaWYgdXBzdHJlYW0gYnJhbmNoIG5vdCBmZXRjaGVkJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJZmF0YWw6IHVwc3RyZWFtIGJyYW5jaCAke3NxfXJlZnMvaGVhZHMvc2lkZSR7c3F9IG5vdCBzdG9yZWQgYXMgYSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoCisJRU9GCisJZXJyb3JfbWVzc2FnZSBiYWQtdXBzdHJlYW1Ae3V9IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCB3b3JrcyB3aGVuIHRyYWNraW5nIGEgbG9jYWwgYnJhbmNoJyAnCisoCisJY2QgY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgbG9jYWwtbWFzdGVyICYmCisJZ2l0IHB1bGwKKykKKycKKworIyBtYWtlcyBzZW5zZSBpZiB0aGUgcHJldmlvdXMgb25lIHN1Y2NlZWRlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHt1fSB3b3JrcyB3aGVuIHRyYWNraW5nIGEgbG9jYWwgYnJhbmNoJyAnCisJdGVzdCByZWZzL2hlYWRzL21hc3RlciA9ICIkKGZ1bGxfbmFtZSBAe3V9KSIKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2NvbW1pdCA4ZjQ4OWQwMWQwY2M2NWMzYjBmMDk1MDRlYzUwYjVlZDAyYTcwYmQ1CitSZWZsb2c6IG1hc3RlckB7MH0gKEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4pCitSZWZsb2cgbWVzc2FnZTogYnJhbmNoOiBDcmVhdGVkIGZyb20gSEVBRAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTU6MTMgMjAwNSAtMDcwMAorCisgICAgMworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLWcgb3RoZXJAe3V9JyAnCisJZ2l0IGxvZyAtMSAtZyBvdGhlckB7dX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2NvbW1pdCA4ZjQ4OWQwMWQwY2M2NWMzYjBmMDk1MDRlYzUwYjVlZDAyYTcwYmQ1CitSZWZsb2c6IG1hc3RlckB7VGh1IEFwciA3IDE1OjE3OjEzIDIwMDUgLTA3MDB9IChDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+KQorUmVmbG9nIG1lc3NhZ2U6IGJyYW5jaDogQ3JlYXRlZCBmcm9tIEhFQUQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE1OjEzIDIwMDUgLTA3MDAKKworICAgIDMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLWcgb3RoZXJAe3V9QHtub3d9JyAnCisJZ2l0IGxvZyAtMSAtZyBvdGhlckB7dX1Ae25vd30gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHtyZWZsb2d9LXBhcnNpbmcgZG9lcyBub3QgbG9vayBiZXlvbmQgY29sb24nICcKKwllY2hvIGNvbnRlbnQgPkB7eWVzdGVyZGF5fSAmJgorCWdpdCBhZGQgQHt5ZXN0ZXJkYXl9ICYmCisJZ2l0IGNvbW1pdCAtbSAiZnVubnkgcmVmbG9nIGZpbGUiICYmCisJZ2l0IGhhc2gtb2JqZWN0IEB7eWVzdGVyZGF5fSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEOkB7eWVzdGVyZGF5fSA+YWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7dXBzdHJlYW19LXBhcnNpbmcgZG9lcyBub3QgbG9vayBiZXlvbmQgY29sb24nICcKKwllY2hvIGNvbnRlbnQgPkB7dXBzdHJlYW19ICYmCisJZ2l0IGFkZCBAe3Vwc3RyZWFtfSAmJgorCWdpdCBjb21taXQgLW0gImZ1bm55IHVwc3RyZWFtIGZpbGUiICYmCisJZ2l0IGhhc2gtb2JqZWN0IEB7dXBzdHJlYW19ID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6QHt1cHN0cmVhbX0gPmFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDgtYXQtY29tYmluYXRpb25zLnNoIGIvdC90MTUwOC1hdC1jb21iaW5hdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDc4ZTExOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDgtYXQtY29tYmluYXRpb25zLnNoCkBAIC0wLDAgKzEsOTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHZhcmlvdXMgQHtYfSBzeW50YXggY29tYmluYXRpb25zIHRvZ2V0aGVyJworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrKCkgeworCXRlc3RfZXhwZWN0XyR7NDotc3VjY2Vzc30gIiQxID0gJDMiICIKKwkJZWNobyAnJDMnID5leHBlY3QgJiYKKwkJaWYgdGVzdCAnJDInID0gJ2NvbW1pdCcKKwkJdGhlbgorCQkJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyAnJDEnID5hY3R1YWwKKwkJZWxpZiB0ZXN0ICckMicgPSAncmVmJworCQl0aGVuCisJCQlnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lICckMScgPmFjdHVhbAorCQllbHNlCisJCQlnaXQgY2F0LWZpbGUgLXAgJyQxJyA+YWN0dWFsCisJCWZpICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkiCit9CisKK25vbnNlbnNlKCkgeworCXRlc3RfZXhwZWN0XyR7Mjotc3VjY2Vzc30gIiQxIGlzIG5vbnNlbnNpY2FsIiAiCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgJyQxJworCSIKK30KKworZmFpbCgpIHsKKwkiJEAiIGZhaWx1cmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItb25lICYmCisJdGVzdF9jb21taXQgbWFzdGVyLXR3byAmJgorCWdpdCBjaGVja291dCAtYiB1cHN0cmVhbS1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCB1cHN0cmVhbS1vbmUgJiYKKwl0ZXN0X2NvbW1pdCB1cHN0cmVhbS10d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgQC9hdC10ZXN0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIEBAL2F0LXRlc3QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgQGF0LXRlc3QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb2xkLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IG9sZC1vbmUgJiYKKwl0ZXN0X2NvbW1pdCBvbGQtdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ldy1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBuZXctb25lICYmCisJdGVzdF9jb21taXQgbmV3LXR3byAmJgorCWdpdCBicmFuY2ggLXUgbWFzdGVyIG9sZC1icmFuY2ggJiYKKwlnaXQgYnJhbmNoIC11IHVwc3RyZWFtLWJyYW5jaCBuZXctYnJhbmNoCisnCisKK2NoZWNrIEhFQUQgcmVmIHJlZnMvaGVhZHMvbmV3LWJyYW5jaAorY2hlY2sgIkB7MX0iIGNvbW1pdCBuZXctb25lCitjaGVjayAiSEVBREB7MX0iIGNvbW1pdCBuZXctb25lCitjaGVjayAiQHtub3d9IiBjb21taXQgbmV3LXR3bworY2hlY2sgIkhFQURAe25vd30iIGNvbW1pdCBuZXctdHdvCitjaGVjayAiQHstMX0iIHJlZiByZWZzL2hlYWRzL29sZC1icmFuY2gKK2NoZWNrICJAey0xfUB7MH0iIGNvbW1pdCBvbGQtdHdvCitjaGVjayAiQHstMX1AezF9IiBjb21taXQgb2xkLW9uZQorY2hlY2sgIkB7dX0iIHJlZiByZWZzL2hlYWRzL3Vwc3RyZWFtLWJyYW5jaAorY2hlY2sgIkhFQURAe3V9IiByZWYgcmVmcy9oZWFkcy91cHN0cmVhbS1icmFuY2gKK2NoZWNrICJAe3V9QHsxfSIgY29tbWl0IHVwc3RyZWFtLW9uZQorY2hlY2sgIkB7LTF9QHt1fSIgcmVmIHJlZnMvaGVhZHMvbWFzdGVyCitjaGVjayAiQHstMX1Ae3V9QHsxfSIgY29tbWl0IG1hc3Rlci1vbmUKK2NoZWNrICJAIiBjb21taXQgbmV3LXR3bworY2hlY2sgIkBAe3V9IiByZWYgcmVmcy9oZWFkcy91cHN0cmVhbS1icmFuY2gKK2NoZWNrICJAQC9hdC10ZXN0IiByZWYgcmVmcy9oZWFkcy9AQC9hdC10ZXN0CitjaGVjayAiQC9hdC10ZXN0IiByZWYgcmVmcy9oZWFkcy9AL2F0LXRlc3QKK2NoZWNrICJAYXQtdGVzdCIgcmVmIHJlZnMvaGVhZHMvQGF0LXRlc3QKK25vbnNlbnNlICJAe3V9QHstMX0iCitub25zZW5zZSAiQHswfUB7MH0iCitub25zZW5zZSAiQHsxfUB7dX0iCitub25zZW5zZSAiSEVBREB7LTF9Igorbm9uc2Vuc2UgIkB7LTF9QHstMX0iCisKKyMgQHtOfSB2ZXJzdXMgSEVBREB7Tn0KKworY2hlY2sgIkhFQURAezN9IiBjb21taXQgb2xkLXR3bworbm9uc2Vuc2UgIkB7M30iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byBvbGQtYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IG9sZC1icmFuY2gKKycKKworY2hlY2sgSEVBRCByZWYgcmVmcy9oZWFkcy9vbGQtYnJhbmNoCitjaGVjayAiSEVBREB7MX0iIGNvbW1pdCBuZXctdHdvCitjaGVjayAiQHsxfSIgY29tbWl0IG9sZC1vbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHBhdGggd2l0aCBAJyAnCisJZWNobyBjb250ZW50ID5ub3JtYWwgJiYKKwllY2hvIGNvbnRlbnQgPmZ1bkBueSAmJgorCWdpdCBhZGQgbm9ybWFsIGZ1bkBueSAmJgorCWdpdCBjb21taXQgLW0gImZ1bm55IHBhdGgiCisnCisKK2NoZWNrICJAOm5vcm1hbCIgYmxvYiBjb250ZW50CitjaGVjayAiQDpmdW5AbnkiIGJsb2IgY29udGVudAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDktcm9vdC13b3JrdHJlZS5zaCBiL3QvdDE1MDktcm9vdC13b3JrdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NTNhM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MTUwOS1yb290LXdvcmt0cmVlLnNoCkBAIC0wLDAgKzEsMjU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBHaXQgd2hlbiBnaXQgcmVwb3NpdG9yeSBpcyBsb2NhdGVkIGF0IHJvb3QKKworVGhpcyB0ZXN0IHJlcXVpcmVzIHdyaXRlIGFjY2VzcyBpbiByb290LiBEbyBub3QgYm90aGVyIGlmIHlvdSBkbyBub3QKK2hhdmUgYSB0aHJvd2F3YXkgY2hyb290IG9yIFZNLgorCitTY3JpcHQgdDE1MDkvcHJlcGFyZS1jaHJvb3Quc2ggbWF5IGhlbHAgeW91IHNldHVwIGNocm9vdCwgdGhlbiB5b3UKK2NhbiBjaHJvb3QgaW4gYW5kIGV4ZWN1dGUgdGhpcyB0ZXN0IGZyb20gdGhlcmUuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2NtcF92YWwoKSB7CisJZWNobyAiJDEiID4gZXhwZWN0ZWQKKwllY2hvICIkMiIgPiByZXN1bHQKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKK30KKwordGVzdF92YXJzKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiQxOiBnaXRkaXIiICcKKwkJdGVzdF9jbXBfdmFsICInIiQyIiciICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKSIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMTogd29ya3RyZWUiICcKKwkJdGVzdF9jbXBfdmFsICInIiQzIiciICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkMTogcHJlZml4IiAnCisJCXRlc3RfY21wX3ZhbCAiJyIkNCInIiAiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy1wcmVmaXgpIgorCScKK30KKwordGVzdF9mb29iYXJfcm9vdCgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcmVsYXRpdmUnICcKKwkJdGVzdCAteiAiJChjZCAvICYmIGdpdCBscy1maWxlcykiICYmCisJCWdpdCBhZGQgZm9vL2Zvb21lICYmCisJCWdpdCBhZGQgZm9vL2Jhci9iYXJtZSAmJgorCQlnaXQgYWRkIG1lICYmCisJCSggY2QgLyAmJiBnaXQgbHMtZmlsZXMgLS1zdGFnZSApID4gcmVzdWx0ICYmCisJCXRlc3RfY21wIC9scy5leHBlY3RlZCByZXN1bHQgJiYKKwkJcm0gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2luZGV4IgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhYnNvbHV0ZScgJworCQl0ZXN0IC16ICIkKGNkIC8gJiYgZ2l0IGxzLWZpbGVzKSIgJiYKKwkJZ2l0IGFkZCAvZm9vL2Zvb21lICYmCisJCWdpdCBhZGQgL2Zvby9iYXIvYmFybWUgJiYKKwkJZ2l0IGFkZCAvbWUgJiYKKwkJKCBjZCAvICYmIGdpdCBscy1maWxlcyAtLXN0YWdlICkgPiByZXN1bHQgJiYKKwkJdGVzdF9jbXAgL2xzLmV4cGVjdGVkIHJlc3VsdCAmJgorCQlybSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaW5kZXgiCisJJworCit9CisKK3Rlc3RfZm9vYmFyX2ZvbygpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcmVsYXRpdmUnICcKKwkJdGVzdCAteiAiJChjZCAvICYmIGdpdCBscy1maWxlcykiICYmCisJCWdpdCBhZGQgZm9vbWUgJiYKKwkJZ2l0IGFkZCBiYXIvYmFybWUgJiYKKwkJZ2l0IGFkZCAuLi9tZSAmJgorCQkoIGNkIC8gJiYgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgKSA+IHJlc3VsdCAmJgorCQl0ZXN0X2NtcCAvbHMuZXhwZWN0ZWQgcmVzdWx0ICYmCisJCXJtICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9pbmRleCIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYWJzb2x1dGUnICcKKwkJdGVzdCAteiAiJChjZCAvICYmIGdpdCBscy1maWxlcykiICYmCisJCWdpdCBhZGQgL2Zvby9mb29tZSAmJgorCQlnaXQgYWRkIC9mb28vYmFyL2Jhcm1lICYmCisJCWdpdCBhZGQgL21lICYmCisJCSggY2QgLyAmJiBnaXQgbHMtZmlsZXMgLS1zdGFnZSApID4gcmVzdWx0ICYmCisJCXRlc3RfY21wIC9scy5leHBlY3RlZCByZXN1bHQgJiYKKwkJcm0gIiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2luZGV4IgorCScKK30KKwordGVzdF9mb29iYXJfZm9vYmFyKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCByZWxhdGl2ZScgJworCQl0ZXN0IC16ICIkKGNkIC8gJiYgZ2l0IGxzLWZpbGVzKSIgJiYKKwkJZ2l0IGFkZCAuLi9mb29tZSAmJgorCQlnaXQgYWRkIGJhcm1lICYmCisJCWdpdCBhZGQgLi4vLi4vbWUgJiYKKwkJKCBjZCAvICYmIGdpdCBscy1maWxlcyAtLXN0YWdlICkgPiByZXN1bHQgJiYKKwkJdGVzdF9jbXAgL2xzLmV4cGVjdGVkIHJlc3VsdCAmJgorCQlybSAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaW5kZXgiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFic29sdXRlJyAnCisJCXRlc3QgLXogIiQoY2QgLyAmJiBnaXQgbHMtZmlsZXMpIiAmJgorCQlnaXQgYWRkIC9mb28vZm9vbWUgJiYKKwkJZ2l0IGFkZCAvZm9vL2Jhci9iYXJtZSAmJgorCQlnaXQgYWRkIC9tZSAmJgorCQkoIGNkIC8gJiYgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgKSA+IHJlc3VsdCAmJgorCQl0ZXN0X2NtcCAvbHMuZXhwZWN0ZWQgcmVzdWx0ICYmCisJCXJtICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9pbmRleCIKKwknCit9CisKK2lmICEgdGVzdCAtdyAvCit0aGVuCisJc2tpcF9hbGw9IlRlc3QgcmVxdWlyaW5nIHdyaXRhYmxlIC8gc2tpcHBlZC4gUmVhZCB0aGlzIHRlc3QgaWYgeW91IHdhbnQgdG8gcnVuIGl0IgorCXRlc3RfZG9uZQorZmkKKworaWYgIHRlc3QgLWUgL3JlZnMgfHwgdGVzdCAtZSAvb2JqZWN0cyB8fCB0ZXN0IC1lIC9pbmZvIHx8IHRlc3QgLWUgL2hvb2tzIHx8CisgICAgdGVzdCAtZSAvLmdpdCB8fCB0ZXN0IC1lIC9mb28gfHwgdGVzdCAtZSAvbWUKK3RoZW4KKwlza2lwX2FsbD0iU2tpcCB0ZXN0IHRoYXQgY2xvYmJlcnMgZXhpc3RpbmcgZmlsZXMgaW4gLyIKKwl0ZXN0X2RvbmUKK2ZpCisKK2lmIFsgIiRJS05PV1dIQVRJQU1ET0lORyIgIT0gIllFUyIgXTsgdGhlbgorCXNraXBfYWxsPSJZb3UgbXVzdCBzZXQgZW52IHZhciBJS05PV1dIQVRJQU1ET0lORz1ZRVMgaW4gb3JkZXIgdG8gcnVuIHRoaXMgdGVzdCIKKwl0ZXN0X2RvbmUKK2ZpCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBOT1RfUk9PVAordGhlbgorCXNraXBfYWxsPSJObyB5b3UgY2FuJ3QgcnVuIHRoaXMgYXMgcm9vdCIKKwl0ZXN0X2RvbmUKK2ZpCisKK09ORV9TSEExPWQwMDQ5MWZkN2U1YmI2ZmEyOGM1MTdhMGJiMzJiOGI1MDY1MzlkNGQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlybSAtcmYgL2ZvbyAmJgorCW1rZGlyIC9mb28gJiYKKwlta2RpciAvZm9vL2JhciAmJgorCWVjaG8gMSA+IC9mb28vZm9vbWUgJiYKKwllY2hvIDEgPiAvZm9vL2Jhci9iYXJtZSAmJgorCWVjaG8gMSA+IC9tZQorJworCitzYXkgIkdJVF9ESVIgYWJzb2x1dGUsIEdJVF9XT1JLX1RSRUUgc2V0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvJyAnY2QgLycKKworY2F0ID5scy5leHBlY3RlZCA8PEVPRgorMTAwNjQ0ICRPTkVfU0hBMSAwCWZvby9iYXIvYmFybWUKKzEwMDY0NCAkT05FX1NIQTEgMAlmb28vZm9vbWUKKzEwMDY0NCAkT05FX1NIQTEgMAltZQorRU9GCisKK0dJVF9ESVI9IiRUUkFTSF9ESVJFQ1RPUlkvLmdpdCIgJiYgZXhwb3J0IEdJVF9ESVIKK0dJVF9XT1JLX1RSRUU9LyAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQorCit0ZXN0X3ZhcnMgJ2FicyBnaXRkaXIsIHJvb3QnICIkR0lUX0RJUiIgIi8iICIiCit0ZXN0X2Zvb2Jhcl9yb290CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28nICdjZCAvZm9vJworCit0ZXN0X3ZhcnMgJ2FicyBnaXRkaXIsIGZvbycgIiRHSVRfRElSIiAiLyIgImZvby8iCit0ZXN0X2Zvb2Jhcl9mb28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gL2Zvby9iYXInICdjZCAvZm9vL2JhcicKKwordGVzdF92YXJzICdhYnMgZ2l0ZGlyLCBmb28vYmFyJyAiJEdJVF9ESVIiICIvIiAiZm9vL2Jhci8iCit0ZXN0X2Zvb2Jhcl9mb29iYXIKKworc2F5ICJHSVRfRElSIHJlbGF0aXZlLCBHSVRfV09SS19UUkVFIHNldCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gLycgJ2NkIC8nCisKK0dJVF9ESVI9IiQoZWNobyAkVFJBU0hfRElSRUNUT1JZfHNlZCAncyxeLywsJykvLmdpdCIgJiYgZXhwb3J0IEdJVF9ESVIKK0dJVF9XT1JLX1RSRUU9LyAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQorCit0ZXN0X3ZhcnMgJ3JlbCBnaXRkaXIsIHJvb3QnICIkR0lUX0RJUiIgIi8iICIiCit0ZXN0X2Zvb2Jhcl9yb290CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28nICdjZCAvZm9vJworCitHSVRfRElSPSIuLi8kVFJBU0hfRElSRUNUT1JZLy5naXQiICYmIGV4cG9ydCBHSVRfRElSCitHSVRfV09SS19UUkVFPS8gJiYgZXhwb3J0IEdJVF9XT1JLX1RSRUUKKwordGVzdF92YXJzICdyZWwgZ2l0ZGlyLCBmb28nICIkVFJBU0hfRElSRUNUT1JZLy5naXQiICIvIiAiZm9vLyIKK3Rlc3RfZm9vYmFyX2ZvbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnbyB0byAvZm9vL2JhcicgJ2NkIC9mb28vYmFyJworCitHSVRfRElSPSIuLi8uLi8kVFJBU0hfRElSRUNUT1JZLy5naXQiICYmIGV4cG9ydCBHSVRfRElSCitHSVRfV09SS19UUkVFPS8gJiYgZXhwb3J0IEdJVF9XT1JLX1RSRUUKKwordGVzdF92YXJzICdyZWwgZ2l0ZGlyLCBmb28vYmFyJyAiJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAiLyIgImZvby9iYXIvIgordGVzdF9mb29iYXJfZm9vYmFyCisKK3NheSAiR0lUX0RJUiByZWxhdGl2ZSwgR0lUX1dPUktfVFJFRSByZWxhdGl2ZSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gLycgJ2NkIC8nCisKK0dJVF9ESVI9IiQoZWNobyAkVFJBU0hfRElSRUNUT1JZfHNlZCAncyxeLywsJykvLmdpdCIgJiYgZXhwb3J0IEdJVF9ESVIKK0dJVF9XT1JLX1RSRUU9LiAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQorCit0ZXN0X3ZhcnMgJ3JlbCBnaXRkaXIsIHJvb3QnICIkR0lUX0RJUiIgIi8iICIiCit0ZXN0X2Zvb2Jhcl9yb290CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC8nICdjZCAvZm9vJworCitHSVRfRElSPSIuLi8kVFJBU0hfRElSRUNUT1JZLy5naXQiICYmIGV4cG9ydCBHSVRfRElSCitHSVRfV09SS19UUkVFPS4uICYmIGV4cG9ydCBHSVRfV09SS19UUkVFCisKK3Rlc3RfdmFycyAncmVsIGdpdGRpciwgZm9vJyAiJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAiLyIgImZvby8iCit0ZXN0X2Zvb2Jhcl9mb28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gL2Zvby9iYXInICdjZCAvZm9vL2JhcicKKworR0lUX0RJUj0iLi4vLi4vJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiAmJiBleHBvcnQgR0lUX0RJUgorR0lUX1dPUktfVFJFRT0uLi8uLiAmJiBleHBvcnQgR0lUX1dPUktfVFJFRQorCit0ZXN0X3ZhcnMgJ3JlbCBnaXRkaXIsIGZvby9iYXInICIkVFJBU0hfRElSRUNUT1JZLy5naXQiICIvIiAiZm9vL2Jhci8iCit0ZXN0X2Zvb2Jhcl9mb29iYXIKKworc2F5ICIuZ2l0IGF0IHJvb3QiCisKK3Vuc2V0IEdJVF9ESVIKK3Vuc2V0IEdJVF9XT1JLX1RSRUUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gLycgJ2NkIC8nCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXJtIC1yZiAvLmdpdCAmJgorCWVjaG8gIkluaXRpYWxpemVkIGVtcHR5IEdpdCByZXBvc2l0b3J5IGluIC8uZ2l0LyIgPiBleHBlY3RlZCAmJgorCWdpdCBpbml0ID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfdmFycyAnYXV0byBnaXRkaXIsIHJvb3QnICIuZ2l0IiAiLyIgIiIKK3Rlc3RfZm9vYmFyX3Jvb3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gL2ZvbycgJ2NkIC9mb28nCit0ZXN0X3ZhcnMgJ2F1dG8gZ2l0ZGlyLCBmb28nICIvLmdpdCIgIi8iICJmb28vIgordGVzdF9mb29iYXJfZm9vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dvIHRvIC9mb28vYmFyJyAnY2QgL2Zvby9iYXInCit0ZXN0X3ZhcnMgJ2F1dG8gZ2l0ZGlyLCBmb28vYmFyJyAiLy5naXQiICIvIiAiZm9vL2Jhci8iCit0ZXN0X2Zvb2Jhcl9mb29iYXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCcgJ3JtIC1yZiAvLmdpdCcKKworc2F5ICJhdXRvIGJhcmUgZ2l0ZGlyIgorCisjIERFU1RST1lZWVlZISEhISEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJcm0gLXJmIC9yZWZzIC9vYmplY3RzIC9pbmZvIC9ob29rcyAmJgorCXJtIC1mIC9leHBlY3RlZCAvbHMuZXhwZWN0ZWQgL21lIC9yZXN1bHQgJiYKKwljZCAvICYmCisJZWNobyAiSW5pdGlhbGl6ZWQgZW1wdHkgR2l0IHJlcG9zaXRvcnkgaW4gLyIgPiBleHBlY3RlZCAmJgorCWdpdCBpbml0IC0tYmFyZSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X3ZhcnMgJ2F1dG8gZ2l0ZGlyLCByb290JyAiLiIgIiIgIiIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ28gdG8gL2ZvbycgJ2NkIC9mb28nCisKK3Rlc3RfdmFycyAnYXV0byBnaXRkaXIsIHJvb3QnICIvIiAiIiAiIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDE1MDkvZXhjbHVkZXMgYi90L3QxNTA5L2V4Y2x1ZGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZDIxZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTA5L2V4Y2x1ZGVzCkBAIC0wLDAgKzEsMTQgQEAKKyoubworKn4KKyouYmFrCisqLmMKKyouaAorLmdpdAorY29udHJpYgorRG9jdW1lbnRhdGlvbgorZ2l0LWd1aQorZ2l0ay1naXQKK2dpdHdlYgordC90NDAxMwordC90NTEwMAordC90NTUxNQpkaWZmIC0tZ2l0IGEvdC90MTUwOS9wcmVwYXJlLWNocm9vdC5zaCBiL3QvdDE1MDkvcHJlcGFyZS1jaHJvb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmQ0N2UyYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MDkvcHJlcGFyZS1jaHJvb3Quc2gKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisKK2RpZSgpIHsKKwllY2hvID4mMiAiJEAiCisJZXhpdCAxCit9CisKK3hta2RpcigpIHsKKwl3aGlsZSBbIC1uICIkMSIgXTsgZG8KKwkJWyAtZCAiJDEiIF0gfHwgbWtkaXIgIiQxIiB8fCBkaWUgIlVuYWJsZSB0byBta2RpciAkMSIKKwkJc2hpZnQKKwlkb25lCit9CisKK1I9IiQxIgorCitbICIkKGlkIC11KSIgLWVxIDAgXSAmJiBkaWUgIlRoaXMgc2NyaXB0IHNob3VsZCBub3QgYmUgcnVuIGFzIHJvb3QsIHdoYXQgaWYgaXQgZG9lcyBybSAtcmYgLz8iCitbIC1uICIkUiIgXSB8fCBkaWUgInVzYWdlOiBwcmVwYXJlLWNocm9vdC5zaCA8cm9vdD4iCitbIC14IGdpdCBdIHx8IGRpZSAiVGhpcyBzY3JpcHQgbmVlZHMgdG8gYmUgZXhlY3V0ZWQgYXQgZ2l0IHNvdXJjZSBjb2RlJ3MgdG9wIGRpcmVjdG9yeSIKK2lmIFsgLXggL2Jpbi9idXN5Ym94IF07IHRoZW4KKwlCQj0vYmluL2J1c3lib3gKK2VsaWYgWyAteCAvdXNyL2Jpbi9idXN5Ym94IF07IHRoZW4KKwlCQj0vdXNyL2Jpbi9idXN5Ym94CitlbHNlCisJZGllICJZb3UgbmVlZCBidXN5Ym94IgorZmkKKworeG1rZGlyICIkUiIgIiRSL2JpbiIgIiRSL2V0YyIgIiRSL2xpYiIgIiRSL2RldiIKK3RvdWNoICIkUi9kZXYvbnVsbCIKK2VjaG8gInJvb3Q6eDowOjA6cm9vdDovOi9iaW4vc2giID4gIiRSL2V0Yy9wYXNzd2QiCitlY2hvICIkKGlkIC1udSk6eDokKGlkIC11KTokKGlkIC1nKTo6JChwd2QpL3Q6L2Jpbi9zaCIgPj4gIiRSL2V0Yy9wYXNzd2QiCitlY2hvICJyb290OjowOnJvb3QiID4gIiRSL2V0Yy9ncm91cCIKK2VjaG8gIiQoaWQgLW5nKTo6JChpZCAtZyk6JChpZCAtbnUpIiA+PiAiJFIvZXRjL2dyb3VwIgorCitbIC14ICIkUiRCQiIgXSB8fCBjcCAkQkIgIiRSL2Jpbi9idXN5Ym94IgorZm9yIGNtZCBpbiBzaCBzdSBscyBleHByIHRyIGJhc2VuYW1lIHJtIG1rZGlyIG12IGlkIHVuYW1lIGRpcm5hbWUgY2F0IHRydWUgc2VkIGRpZmY7IGRvCisJbG4gLWYgLXMgL2Jpbi9idXN5Ym94ICIkUi9iaW4vJGNtZCIKK2RvbmUKKworbWtkaXIgLXAgIiRSJChwd2QpIgorcnN5bmMgLS1leGNsdWRlLWZyb20gdC90MTUwOS9leGNsdWRlcyAtSGEgLiAiJFIkKHB3ZCkiCisjIEZha2UgcGVybCB0byByZWR1Y2UgZGVwZW5kZW5jeSwgdDE1MDkgZG9lcyBub3QgdXNlIHBlcmwsIGJ1dCBzb21lCisjIGVudiBtaWdodCBzbGlwIHRocm91Z2gsIHNlZSB0ZXN0LWxpYi5zaCwgdW5zZXQuKlBFUkxfUEFUSAorc2VkICdzfF5QRVJMX1BBVEg9Lip8UEVSTF9QQVRIPS9iaW4vdHJ1ZXwnIEdJVC1CVUlMRC1PUFRJT05TID4gIiRSJChwd2QpL0dJVC1CVUlMRC1PUFRJT05TIgorZm9yIGNtZCBpbiBnaXQgJEJCO2RvIAorCWxkZCAkY21kIHwgZ3JlcCAnLycgfCBzZWQgJ3MsLipcc1woL1teIF0qXCkuKixcMSwnIHwgd2hpbGUgcmVhZCBpOyBkbworCQlta2RpciAtcCAiJFIkKGRpcm5hbWUgJGkpIgorCQljcCAiJGkiICIkUi8kaSIKKwlkb25lCitkb25lCitjYXQgPDxFT0YKK0FsbCBpcyBzZXQgdXAgaW4gJFIsIGV4ZWN1dGUgdDE1MDkgd2l0aCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorCitzdWRvIGNocm9vdCAkUiAvYmluL3N1IC0gJChpZCAtbnUpCitJS05PV1dIQVRJQU1ET0lORz1ZRVMgLi90MTUwOS1yb290LXdvcmt0cmVlLnNoIC12IC1pCisKK1doZW4geW91IGFyZSBkb25lLCBzaW1wbHkgZGVsZXRlICRSIHRvIGNsZWFuIHVwCitFT0YKZGlmZiAtLWdpdCBhL3QvdDE1MTAtcmVwby1zZXR1cC5zaCBiL3QvdDE1MTAtcmVwby1zZXR1cC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xM2FlMTJkCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTUxMC1yZXBvLXNldHVwLnNoCkBAIC0wLDAgKzEsODAyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0iVGVzdHMgb2YgY3dkL3ByZWZpeC93b3JrdHJlZS9naXRkaXIgc2V0dXAgaW4gYWxsIGNhc2VzCisKK0EgZmV3IHJ1bGVzIGZvciByZXBvIHNldHVwOgorCisxLiBHSVRfRElSIGlzIHJlbGF0aXZlIHRvIHVzZXIncyBjd2QuIC0tZ2l0LWRpciBpcyBlcXVpdmFsZW50IHRvCisgICBHSVRfRElSLgorCisyLiAuZ2l0IGZpbGUgaXMgcmVsYXRpdmUgdG8gcGFyZW50IGRpcmVjdG9yeS4gLmdpdCBmaWxlIGlzIGJhc2ljYWxseQorICAgc3ltbGluayBpbiBkaXNndWlzZS4gVGhlIGRpcmVjdG9yeSB3aGVyZSAuZ2l0IGZpbGUgcG9pbnRzIHRvIHdpbGwKKyAgIGJlY29tZSBuZXcgZ2l0X2Rpci4KKworMy4gY29yZS53b3JrdHJlZSBpcyByZWxhdGl2ZSB0byBnaXRfZGlyLgorCis0LiBHSVRfV09SS19UUkVFIGlzIHJlbGF0aXZlIHRvIHVzZXIncyBjd2QuIC0td29yay10cmVlIGlzCisgICBlcXVpdmFsZW50IHRvIEdJVF9XT1JLX1RSRUUuCisKKzUuIEdJVF9XT1JLX1RSRUUvY29yZS53b3JrdHJlZSB3YXMgb3JpZ2luYWxseSBtZWFudCB0byB3b3JrIG9ubHkgaWYKKyAgIEdJVF9ESVIgaXMgc2V0LCBidXQgZWFybGllciBnaXQgZGlkbid0IGVuZm9yY2UgaXQsIGFuZCBzb21lIHNjcmlwdHMKKyAgIGRlcGVuZCBvbiB0aGUgaW1wbGVtZW50YXRpb24gdGhhdCBoYXBwZW5lZCB0byBmaXJzdCBkaXNjb3ZlciAuZ2l0IGJ5CisgICBnb2luZyB1cCBmcm9tIHRoZSB1c2VycyAkY3dkIGFuZCB0aGVuIHVzaW5nIHRoZSBzcGVjaWZpZWQgd29ya2luZyB0cmVlCisgICB0aGF0IG1heSBvciBtYXkgbm90IGhhdmUgYW55IHJlbGF0aW9uIHRvIHdoZXJlIC5naXQgd2FzIGZvdW5kIGluLiAgVGhpcworICAgaGlzdG9yaWNhbCBiZWhhdmlvdXIgbXVzdCBiZSBrZXB0LgorCis2LiBFZmZlY3RpdmUgR0lUX1dPUktfVFJFRSBvdmVycmlkZXMgY29yZS53b3JrdHJlZSBhbmQgY29yZS5iYXJlCisKKzcuIEVmZmVjdGl2ZSBjb3JlLndvcmt0cmVlIGNvbmZsaWN0cyB3aXRoIGNvcmUuYmFyZQorCis4LiBJZiBHSVRfRElSIGlzIHNldCBidXQgbmVpdGhlciB3b3JrdHJlZSBub3IgYmFyZSBzZXR0aW5nIGlzIGdpdmVuLAorICAgb3JpZ2luYWwgY3dkIGJlY29tZXMgd29ya3RyZWUuCisKKzkuIElmIC5naXQgZGlzY292ZXJ5IGlzIGRvbmUgaW5zaWRlIGEgcmVwbywgdGhlIHJlcG8gYmVjb21lcyBhIGJhcmUKKyAgIHJlcG8uIC5naXQgZGlzY292ZXJ5IGlzIHBlcmZvcm1lZCBpZiBHSVRfRElSIGlzIG5vdCBzZXQuCisKKzEwLiBJZiBubyB3b3JrdHJlZSBpcyBhdmFpbGFibGUsIGN3ZCByZW1haW5zIHVuY2hhbmdlZCwgcHJlZml4IGlzCisgICAgTlVMTC4KKworMTEuIFdoZW4gdXNlcidzIGN3ZCBpcyBvdXRzaWRlIHdvcmt0cmVlLCBjd2QgcmVtYWlucyB1bmNoYW5nZWQsCisgICAgcHJlZml4IGlzIE5VTEwuCisiCisuIC4vdGVzdC1saWIuc2gKKworaGVyZT0kKHB3ZCkKKwordGVzdF9yZXBvICgpIHsKKwkoCisJCWNkICIkMSIgJiYKKwkJaWYgdGVzdCAtbiAiJDIiCisJCXRoZW4KKwkJCUdJVF9ESVI9IiQyIiAmJgorCQkJZXhwb3J0IEdJVF9ESVIKKwkJZmkgJiYKKwkJaWYgdGVzdCAtbiAiJDMiCisJCXRoZW4KKwkJCUdJVF9XT1JLX1RSRUU9IiQzIiAmJgorCQkJZXhwb3J0IEdJVF9XT1JLX1RSRUUKKwkJZmkgJiYKKwkJcm0gLWYgdHJhY2UgJiYKKwkJR0lUX1RSQUNFX1NFVFVQPSIkKHB3ZCkvdHJhY2UiIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+L2Rldi9udWxsICYmCisJCWdyZXAgJ15zZXR1cDogJyB0cmFjZSA+cmVzdWx0ICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorCSkKK30KKworbWF5YmVfY29uZmlnICgpIHsKKwlmaWxlPSQxIHZhcj0kMiB2YWx1ZT0kMyAmJgorCWlmIHRlc3QgIiR2YWx1ZSIgIT0gdW5zZXQKKwl0aGVuCisJCWdpdCBjb25maWcgLS1maWxlPSIkZmlsZSIgIiR2YXIiICIkdmFsdWUiCisJZmkKK30KKworc2V0dXBfcmVwbyAoKSB7CisJbmFtZT0kMSB3b3JrdHJlZWNmZz0kMiBnaXRmaWxlPSQzIGJhcmVjZmc9JDQgJiYKKwlzYW5lX3Vuc2V0IEdJVF9ESVIgR0lUX1dPUktfVFJFRSAmJgorCisJZ2l0IGluaXQgIiRuYW1lIiAmJgorCW1heWJlX2NvbmZpZyAiJG5hbWUvLmdpdC9jb25maWciIGNvcmUud29ya3RyZWUgIiR3b3JrdHJlZWNmZyIgJiYKKwltYXliZV9jb25maWcgIiRuYW1lLy5naXQvY29uZmlnIiBjb3JlLmJhcmUgIiRiYXJlY2ZnIiAmJgorCW1rZGlyIC1wICIkbmFtZS9zdWIvc3ViIiAmJgorCisJaWYgdGVzdCAiJHtnaXRmaWxlOitzZXR9IgorCXRoZW4KKwkJbXYgIiRuYW1lLy5naXQiICIkbmFtZS5naXQiICYmCisJCWVjaG8gImdpdGRpcjogLi4vJG5hbWUuZ2l0IiA+IiRuYW1lLy5naXQiCisJZmkKK30KKworbWF5YmVfc2V0ICgpIHsKKwl2YXI9JDEgdmFsdWU9JDIgJiYKKwlpZiB0ZXN0ICIkdmFsdWUiICE9IHVuc2V0CisJdGhlbgorCQlldmFsICIkdmFyPVwkdmFsdWUiICYmCisJCWV4cG9ydCAkdmFyCisJZmkKK30KKworc2V0dXBfZW52ICgpIHsKKwl3b3JrdHJlZW52PSQxIGdpdGRpcmVudj0kMiAmJgorCXNhbmVfdW5zZXQgR0lUX0RJUiBHSVRfV09SS19UUkVFICYmCisJbWF5YmVfc2V0IEdJVF9ESVIgIiRnaXRkaXJlbnYiICYmCisJbWF5YmVfc2V0IEdJVF9XT1JLX1RSRUUgIiR3b3JrdHJlZWVudiIKK30KKworZXhwZWN0ICgpIHsKKwljYXQgPiIkMS9leHBlY3RlZCIgPDwtRU9GCisJc2V0dXA6IGdpdF9kaXI6ICQyCisJc2V0dXA6IGdpdF9jb21tb25fZGlyOiAkMgorCXNldHVwOiB3b3JrdHJlZTogJDMKKwlzZXR1cDogY3dkOiAkNAorCXNldHVwOiBwcmVmaXg6ICQ1CisJRU9GCit9CisKK3RyeV9jYXNlICgpIHsKKwluYW1lPSQxIHdvcmt0cmVlZW52PSQyIGdpdGRpcmVudj0kMyAmJgorCXNldHVwX2VudiAiJHdvcmt0cmVlZW52IiAiJGdpdGRpcmVudiIgJiYKKwlleHBlY3QgIiRuYW1lIiAiJDQiICIkNSIgIiQ2IiAiJDciICYmCisJdGVzdF9yZXBvICIkbmFtZSIKK30KKworcnVuX3d0X3Rlc3RzICgpIHsKKwlOPSQxIGdpdGZpbGU9JDIKKworCWFic2dpdD0iJGhlcmUvJE4vLmdpdCIKKwlkb3RnaXQ9LmdpdAorCWRvdGRvdGdpdD0uLi8uLi8uZ2l0CisKKwlpZiB0ZXN0ICIkZ2l0ZmlsZSIKKwl0aGVuCisJCWFic2dpdD0iJGhlcmUvJE4uZ2l0IgorCQlkb3RnaXQ9JGFic2dpdCBkb3Rkb3RnaXQ9JGFic2dpdAorCWZpCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIjJE46IGV4cGxpY2l0IEdJVF9XT1JLX1RSRUUgYW5kIEdJVF9ESVIgYXQgdG9wbGV2ZWwiICcKKwkJdHJ5X2Nhc2UgJE4gIiRoZXJlLyROIiAuZ2l0IFwKKwkJCSIkZG90Z2l0IiAiJGhlcmUvJE4iICIkaGVyZS8kTiIgIihudWxsKSIgJiYKKwkJdHJ5X2Nhc2UgJE4gLiAuZ2l0IFwKKwkJCSIkZG90Z2l0IiAiJGhlcmUvJE4iICIkaGVyZS8kTiIgIihudWxsKSIgJiYKKwkJdHJ5X2Nhc2UgJE4gIiRoZXJlLyROIiAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZS8kTiIgIiRoZXJlLyROIiAiKG51bGwpIiAmJgorCQl0cnlfY2FzZSAkTiAuICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlLyROIiAiJGhlcmUvJE4iICIobnVsbCkiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiIyROOiBleHBsaWNpdCBHSVRfV09SS19UUkVFIGFuZCBHSVRfRElSIGluIHN1YmRpciIgJworCQl0cnlfY2FzZSAkTi9zdWIvc3ViICIkaGVyZS8kTiIgLi4vLi4vLmdpdCBcCisJCQkiJGFic2dpdCIgIiRoZXJlLyROIiAiJGhlcmUvJE4iIHN1Yi9zdWIvICYmCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgLi4vLi4gLi4vLi4vLmdpdCBcCisJCQkiJGFic2dpdCIgIiRoZXJlLyROIiAiJGhlcmUvJE4iIHN1Yi9zdWIvICYmCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgIiRoZXJlLyROIiAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZS8kTiIgIiRoZXJlLyROIiBzdWIvc3ViLyAmJgorCQl0cnlfY2FzZSAkTi9zdWIvc3ViIC4uLy4uICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlLyROIiAiJGhlcmUvJE4iIHN1Yi9zdWIvCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiIyROOiBleHBsaWNpdCBHSVRfV09SS19UUkVFIGZyb20gcGFyZW50IG9mIHdvcmt0cmVlIiAnCisJCXRyeV9jYXNlICROICIkaGVyZS8kTi93dCIgLmdpdCBcCisJCQkiJGRvdGdpdCIgIiRoZXJlLyROL3d0IiAiJGhlcmUvJE4iICIobnVsbCkiICYmCisJCXRyeV9jYXNlICROIHd0IC5naXQgXAorCQkJIiRkb3RnaXQiICIkaGVyZS8kTi93dCIgIiRoZXJlLyROIiAiKG51bGwpIiAmJgorCQl0cnlfY2FzZSAkTiB3dCAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZS8kTi93dCIgIiRoZXJlLyROIiAiKG51bGwpIiAmJgorCQl0cnlfY2FzZSAkTiAiJGhlcmUvJE4vd3QiICIkaGVyZS8kTi8uZ2l0IiBcCisJCQkiJGFic2dpdCIgIiRoZXJlLyROL3d0IiAiJGhlcmUvJE4iICIobnVsbCkiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiIyROOiBleHBsaWNpdCBHSVRfV09SS19UUkVFIGZyb20gbmVwaGV3IG9mIHdvcmt0cmVlIiAnCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgIiRoZXJlLyROL3d0IiAuLi8uLi8uZ2l0IFwKKwkJCSIkZG90ZG90Z2l0IiAiJGhlcmUvJE4vd3QiICIkaGVyZS8kTi9zdWIvc3ViIiAiKG51bGwpIiAmJgorCQl0cnlfY2FzZSAkTi9zdWIvc3ViIC4uLy4uL3d0IC4uLy4uLy5naXQgXAorCQkJIiRkb3Rkb3RnaXQiICIkaGVyZS8kTi93dCIgIiRoZXJlLyROL3N1Yi9zdWIiICIobnVsbCkiICYmCisJCXRyeV9jYXNlICROL3N1Yi9zdWIgLi4vLi4vd3QgIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUvJE4vd3QiICIkaGVyZS8kTi9zdWIvc3ViIiAiKG51bGwpIiAmJgorCQl0cnlfY2FzZSAkTi9zdWIvc3ViICIkaGVyZS8kTi93dCIgIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUvJE4vd3QiICIkaGVyZS8kTi9zdWIvc3ViIiAiKG51bGwpIgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiMkTjogY2hkaXJfdG9fdG9wbGV2ZWwgdXNlcyB3b3JrdHJlZSwgbm90IGdpdCBkaXIiICcKKwkJdHJ5X2Nhc2UgJE4gIiRoZXJlIiAuZ2l0IFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUiICIkaGVyZSIgJE4vICYmCisJCXRyeV9jYXNlICROIC4uIC5naXQgXAorCQkJIiRhYnNnaXQiICIkaGVyZSIgIiRoZXJlIiAkTi8gJiYKKwkJdHJ5X2Nhc2UgJE4gLi4gIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUiICIkaGVyZSIgJE4vICYmCisJCXRyeV9jYXNlICROICIkaGVyZSIgIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUiICIkaGVyZSIgJE4vCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiIyROOiBjaGRpcl90b190b3BsZXZlbCB1c2VzIHdvcmt0cmVlIChmcm9tIHN1YmRpcikiICcKKwkJdHJ5X2Nhc2UgJE4vc3ViL3N1YiAiJGhlcmUiIC4uLy4uLy5naXQgXAorCQkJIiRhYnNnaXQiICIkaGVyZSIgIiRoZXJlIiAkTi9zdWIvc3ViLyAmJgorCQl0cnlfY2FzZSAkTi9zdWIvc3ViIC4uLy4uLy4uIC4uLy4uLy5naXQgXAorCQkJIiRhYnNnaXQiICIkaGVyZSIgIiRoZXJlIiAkTi9zdWIvc3ViLyAmJgorCQl0cnlfY2FzZSAkTi9zdWIvc3ViIC4uLy4uLy4uLyAiJGhlcmUvJE4vLmdpdCIgXAorCQkJIiRhYnNnaXQiICIkaGVyZSIgIiRoZXJlIiAkTi9zdWIvc3ViLyAmJgorCQl0cnlfY2FzZSAkTi9zdWIvc3ViICIkaGVyZSIgIiRoZXJlLyROLy5naXQiIFwKKwkJCSIkYWJzZ2l0IiAiJGhlcmUiICIkaGVyZSIgJE4vc3ViL3N1Yi8KKwknCit9CisKKyMgdHJ5X3JlcG8gI2MgR0lUX1dPUktfVFJFRSBHSVRfRElSIGNvcmUud29ya3RyZWUgLmdpdGZpbGU/IGNvcmUuYmFyZSBcCisjCShnaXQgZGlyKSAod29yayB0cmVlKSAoY3dkKSAocHJlZml4KSBcCTwtLSBhdCB0b3BsZXZlbAorIwkoZ2l0IGRpcikgKHdvcmsgdHJlZSkgKGN3ZCkgKHByZWZpeCkJPC0tIGZyb20gc3ViZGlyCit0cnlfcmVwbyAoKSB7CisJbmFtZT0kMSB3b3JrdHJlZWVudj0kMiBnaXRkaXJlbnY9JDMgJiYKKwlzZXR1cF9yZXBvICIkbmFtZSIgIiQ0IiAiJDUiICIkNiIgJiYKKwlzaGlmdCA2ICYmCisJdHJ5X2Nhc2UgIiRuYW1lIiAiJHdvcmt0cmVlZW52IiAiJGdpdGRpcmVudiIgXAorCQkiJDEiICIkMiIgIiQzIiAiJDQiICYmCisJc2hpZnQgNCAmJgorCWNhc2UgIiRnaXRkaXJlbnYiIGluCisJLyogfCA/Oi8qIHwgdW5zZXQpIDs7CisJKikKKwkJZ2l0ZGlyZW52PS4uLyRnaXRkaXJlbnYgOzsKKwllc2FjICYmCisJdHJ5X2Nhc2UgIiRuYW1lL3N1YiIgIiR3b3JrdHJlZWVudiIgIiRnaXRkaXJlbnYiIFwKKwkJIiQxIiAiJDIiICIkMyIgIiQ0IgorfQorCisjIEJpdCAwID0gR0lUX1dPUktfVFJFRQorIyBCaXQgMSA9IEdJVF9ESVIKKyMgQml0IDIgPSBjb3JlLndvcmt0cmVlCisjIEJpdCAzID0gLmdpdCBpcyBhIGZpbGUKKyMgQml0IDQgPSBiYXJlIHJlcG8KKyMgQ2FzZSMgPSBlbmNvZGluZyBvZiB0aGUgYWJvdmUgNSBiaXRzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMwOiBub25iYXJlIHJlcG8sIG5vIGV4cGxpY2l0IGNvbmZpZ3VyYXRpb24nICcKKwl0cnlfcmVwbyAwIHVuc2V0IHVuc2V0IHVuc2V0ICIiIHVuc2V0IFwKKwkJLmdpdCAiJGhlcmUvMCIgIiRoZXJlLzAiICIobnVsbCkiIFwKKwkJLmdpdCAiJGhlcmUvMCIgIiRoZXJlLzAiIHN1Yi8gMj5tZXNzYWdlICYmCisJISB0ZXN0IC1zIG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzE6IEdJVF9XT1JLX1RSRUUgd2l0aG91dCBleHBsaWNpdCBHSVRfRElSIGlzIGFjY2VwdGVkJyAnCisJbWtkaXIgLXAgd3QgJiYKKwl0cnlfcmVwbyAxICIkaGVyZSIgdW5zZXQgdW5zZXQgIiIgdW5zZXQgXAorCQkiJGhlcmUvMS8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgMS8gXAorCQkiJGhlcmUvMS8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgMS9zdWIvIDI+bWVzc2FnZSAmJgorCSEgdGVzdCAtcyBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyOiB3b3JrdHJlZSBkZWZhdWx0cyB0byBjd2Qgd2l0aCBleHBsaWNpdCBHSVRfRElSJyAnCisJdHJ5X3JlcG8gMiB1bnNldCAiJGhlcmUvMi8uZ2l0IiB1bnNldCAiIiB1bnNldCBcCisJCSIkaGVyZS8yLy5naXQiICIkaGVyZS8yIiAiJGhlcmUvMiIgIihudWxsKSIgXAorCQkiJGhlcmUvMi8uZ2l0IiAiJGhlcmUvMi9zdWIiICIkaGVyZS8yL3N1YiIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzJiOiByZWxhdGl2ZSBHSVRfRElSJyAnCisJdHJ5X3JlcG8gMmIgdW5zZXQgIi5naXQiIHVuc2V0ICIiIHVuc2V0IFwKKwkJIi5naXQiICIkaGVyZS8yYiIgIiRoZXJlLzJiIiAiKG51bGwpIiBcCisJCSIuLi8uZ2l0IiAiJGhlcmUvMmIvc3ViIiAiJGhlcmUvMmIvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMzogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDMgdW5zZXQgIiIgdW5zZXQgJiYKKwlta2RpciAtcCAzL3N1Yi9zdWIgMy93dC9zdWIKKycKK3J1bl93dF90ZXN0cyAzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM0OiBjb3JlLndvcmt0cmVlIHdpdGhvdXQgR0lUX0RJUiBzZXQgaXMgYWNjZXB0ZWQnICcKKwlzZXR1cF9yZXBvIDQgLi4vc3ViICIiIHVuc2V0ICYmCisJbWtkaXIgLXAgNC9zdWIgc3ViICYmCisJdHJ5X2Nhc2UgNCB1bnNldCB1bnNldCBcCisJCS5naXQgIiRoZXJlLzQvc3ViIiAiJGhlcmUvNCIgIihudWxsKSIgXAorCQkiJGhlcmUvNC8uZ2l0IiAiJGhlcmUvNC9zdWIiICIkaGVyZS80L3N1YiIgIihudWxsKSIgMj5tZXNzYWdlICYmCisJISB0ZXN0IC1zIG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzU6IGNvcmUud29ya3RyZWUgKyBHSVRfV09SS19UUkVFIGlzIGFjY2VwdGVkJyAnCisJIyBvcjogeW91IGNhbm5vdCBpbnRpbWlkYXRlIGF3YXkgdGhlIGxhY2sgb2YgR0lUX0RJUiBzZXR0aW5nCisJdHJ5X3JlcG8gNSAiJGhlcmUiIHVuc2V0ICIkaGVyZS81IiAiIiB1bnNldCBcCisJCSIkaGVyZS81Ly5naXQiICIkaGVyZSIgIiRoZXJlIiA1LyBcCisJCSIkaGVyZS81Ly5naXQiICIkaGVyZSIgIiRoZXJlIiA1L3N1Yi8gMj5tZXNzYWdlICYmCisJdHJ5X3JlcG8gNWEgLi4gdW5zZXQgIiRoZXJlLzVhIiAiIiB1bnNldCBcCisJCSIkaGVyZS81YS8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgNWEvIFwKKwkJIiRoZXJlLzVhLy5naXQiICIkaGVyZS81YSIgIiRoZXJlLzVhIiBzdWIvICYmCisJISB0ZXN0IC1zIG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzY6IHNldHRpbmcgR0lUX0RJUiBicmluZ3MgY29yZS53b3JrdHJlZSB0byBsaWZlJyAnCisJc2V0dXBfcmVwbyA2ICIkaGVyZS82IiAiIiB1bnNldCAmJgorCXRyeV9jYXNlIDYgdW5zZXQgLmdpdCBcCisJCS5naXQgIiRoZXJlLzYiICIkaGVyZS82IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDYgdW5zZXQgIiRoZXJlLzYvLmdpdCIgXAorCQkiJGhlcmUvNi8uZ2l0IiAiJGhlcmUvNiIgIiRoZXJlLzYiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgNi9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvNi8uZ2l0IiAiJGhlcmUvNiIgIiRoZXJlLzYiIHN1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgNi9zdWIvc3ViIHVuc2V0ICIkaGVyZS82Ly5naXQiIFwKKwkJIiRoZXJlLzYvLmdpdCIgIiRoZXJlLzYiICIkaGVyZS82IiBzdWIvc3ViLworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjNmI6IEdJVF9ESVIgc2V0LCBjb3JlLndvcmt0cmVlIHJlbGF0aXZlJyAnCisJc2V0dXBfcmVwbyA2YiAuLiAiIiB1bnNldCAmJgorCXRyeV9jYXNlIDZiIHVuc2V0IC5naXQgXAorCQkuZ2l0ICIkaGVyZS82YiIgIiRoZXJlLzZiIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDZiIHVuc2V0ICIkaGVyZS82Yi8uZ2l0IiBcCisJCSIkaGVyZS82Yi8uZ2l0IiAiJGhlcmUvNmIiICIkaGVyZS82YiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSA2Yi9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvNmIvLmdpdCIgIiRoZXJlLzZiIiAiJGhlcmUvNmIiIHN1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgNmIvc3ViL3N1YiB1bnNldCAiJGhlcmUvNmIvLmdpdCIgXAorCQkiJGhlcmUvNmIvLmdpdCIgIiRoZXJlLzZiIiAiJGhlcmUvNmIiIHN1Yi9zdWIvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM2YzogR0lUX0RJUiBzZXQsIGNvcmUud29ya3RyZWU9Li4vd3QgKGFic29sdXRlKScgJworCXNldHVwX3JlcG8gNmMgIiRoZXJlLzZjL3d0IiAiIiB1bnNldCAmJgorCW1rZGlyIC1wIDZjL3d0L3N1YiAmJgorCisJdHJ5X2Nhc2UgNmMgdW5zZXQgLmdpdCBcCisJCS5naXQgIiRoZXJlLzZjL3d0IiAiJGhlcmUvNmMiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgNmMgdW5zZXQgIiRoZXJlLzZjLy5naXQiIFwKKwkJIiRoZXJlLzZjLy5naXQiICIkaGVyZS82Yy93dCIgIiRoZXJlLzZjIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDZjL3N1Yi9zdWIgdW5zZXQgLi4vLi4vLmdpdCBcCisJCS4uLy4uLy5naXQgIiRoZXJlLzZjL3d0IiAiJGhlcmUvNmMvc3ViL3N1YiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSA2Yy9zdWIvc3ViIHVuc2V0ICIkaGVyZS82Yy8uZ2l0IiBcCisJCSIkaGVyZS82Yy8uZ2l0IiAiJGhlcmUvNmMvd3QiICIkaGVyZS82Yy9zdWIvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjNmQ6IEdJVF9ESVIgc2V0LCBjb3JlLndvcmt0cmVlPS4uL3d0IChyZWxhdGl2ZSknICcKKwlzZXR1cF9yZXBvIDZkICIkaGVyZS82ZC93dCIgIiIgdW5zZXQgJiYKKwlta2RpciAtcCA2ZC93dC9zdWIgJiYKKworCXRyeV9jYXNlIDZkIHVuc2V0IC5naXQgXAorCQkuZ2l0ICIkaGVyZS82ZC93dCIgIiRoZXJlLzZkIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDZkIHVuc2V0ICIkaGVyZS82ZC8uZ2l0IiBcCisJCSIkaGVyZS82ZC8uZ2l0IiAiJGhlcmUvNmQvd3QiICIkaGVyZS82ZCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSA2ZC9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkuLi8uLi8uZ2l0ICIkaGVyZS82ZC93dCIgIiRoZXJlLzZkL3N1Yi9zdWIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgNmQvc3ViL3N1YiB1bnNldCAiJGhlcmUvNmQvLmdpdCIgXAorCQkiJGhlcmUvNmQvLmdpdCIgIiRoZXJlLzZkL3d0IiAiJGhlcmUvNmQvc3ViL3N1YiIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzZlOiBHSVRfRElSIHNldCwgY29yZS53b3JrdHJlZT0uLi8uLiAoYWJzb2x1dGUpJyAnCisJc2V0dXBfcmVwbyA2ZSAiJGhlcmUiICIiIHVuc2V0ICYmCisJdHJ5X2Nhc2UgNmUgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS82ZS8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgNmUvICYmCisJdHJ5X2Nhc2UgNmUgdW5zZXQgIiRoZXJlLzZlLy5naXQiIFwKKwkJIiRoZXJlLzZlLy5naXQiICIkaGVyZSIgIiRoZXJlIiA2ZS8gJiYKKwl0cnlfY2FzZSA2ZS9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvNmUvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDZlL3N1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgNmUvc3ViL3N1YiB1bnNldCAiJGhlcmUvNmUvLmdpdCIgXAorCQkiJGhlcmUvNmUvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDZlL3N1Yi9zdWIvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM2ZjogR0lUX0RJUiBzZXQsIGNvcmUud29ya3RyZWU9Li4vLi4gKHJlbGF0aXZlKScgJworCXNldHVwX3JlcG8gNmYgLi4vLi4vICIiIHVuc2V0ICYmCisJdHJ5X2Nhc2UgNmYgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS82Zi8uZ2l0IiAiJGhlcmUiICIkaGVyZSIgNmYvICYmCisJdHJ5X2Nhc2UgNmYgdW5zZXQgIiRoZXJlLzZmLy5naXQiIFwKKwkJIiRoZXJlLzZmLy5naXQiICIkaGVyZSIgIiRoZXJlIiA2Zi8gJiYKKwl0cnlfY2FzZSA2Zi9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvNmYvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDZmL3N1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgNmYvc3ViL3N1YiB1bnNldCAiJGhlcmUvNmYvLmdpdCIgXAorCQkiJGhlcmUvNmYvLmdpdCIgIiRoZXJlIiAiJGhlcmUiIDZmL3N1Yi9zdWIvCisnCisKKyMgY2FzZSAjNzogR0lUX1dPUktfVFJFRSBvdmVycmlkZXMgY29yZS53b3JrdHJlZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM3OiBzZXR1cCcgJworCXNldHVwX3JlcG8gNyBub24tZXhpc3RlbnQgIiIgdW5zZXQgJiYKKwlta2RpciAtcCA3L3N1Yi9zdWIgNy93dC9zdWIKKycKK3J1bl93dF90ZXN0cyA3CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyM4OiBnaXRmaWxlLCBlYXN5IGNhc2UnICcKKwl0cnlfcmVwbyA4IHVuc2V0IHVuc2V0IHVuc2V0IGdpdGZpbGUgdW5zZXQgXAorCQkiJGhlcmUvOC5naXQiICIkaGVyZS84IiAiJGhlcmUvOCIgIihudWxsKSIgXAorCQkiJGhlcmUvOC5naXQiICIkaGVyZS84IiAiJGhlcmUvOCIgc3ViLworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjOTogR0lUX1dPUktfVFJFRSBhY2NlcHRlZCB3aXRoIGdpdGZpbGUnICcKKwlta2RpciAtcCA5L3d0ICYmCisJdHJ5X3JlcG8gOSB3dCB1bnNldCB1bnNldCBnaXRmaWxlIHVuc2V0IFwKKwkJIiRoZXJlLzkuZ2l0IiAiJGhlcmUvOS93dCIgIiRoZXJlLzkiICIobnVsbCkiIFwKKwkJIiRoZXJlLzkuZ2l0IiAiJGhlcmUvOS9zdWIvd3QiICIkaGVyZS85L3N1YiIgIihudWxsKSIgMj5tZXNzYWdlICYmCisJISB0ZXN0IC1zIG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzEwOiBHSVRfRElSIGNhbiBwb2ludCB0byBnaXRmaWxlJyAnCisJdHJ5X3JlcG8gMTAgdW5zZXQgIiRoZXJlLzEwLy5naXQiIHVuc2V0IGdpdGZpbGUgdW5zZXQgXAorCQkiJGhlcmUvMTAuZ2l0IiAiJGhlcmUvMTAiICIkaGVyZS8xMCIgIihudWxsKSIgXAorCQkiJGhlcmUvMTAuZ2l0IiAiJGhlcmUvMTAvc3ViIiAiJGhlcmUvMTAvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTBiOiByZWxhdGl2ZSBHSVRfRElSIGNhbiBwb2ludCB0byBnaXRmaWxlJyAnCisJdHJ5X3JlcG8gMTBiIHVuc2V0IC5naXQgdW5zZXQgZ2l0ZmlsZSB1bnNldCBcCisJCSIkaGVyZS8xMGIuZ2l0IiAiJGhlcmUvMTBiIiAiJGhlcmUvMTBiIiAiKG51bGwpIiBcCisJCSIkaGVyZS8xMGIuZ2l0IiAiJGhlcmUvMTBiL3N1YiIgIiRoZXJlLzEwYi9zdWIiICIobnVsbCkiCisnCisKKyMgY2FzZSAjMTE6IEdJVF9XT1JLX1RSRUUgd29ya3MsIGdpdGZpbGUgY2FzZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxMTogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDExIHVuc2V0IGdpdGZpbGUgdW5zZXQgJiYKKwlta2RpciAtcCAxMS9zdWIvc3ViIDExL3d0L3N1YgorJworcnVuX3d0X3Rlc3RzIDExIGdpdGZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzEyOiBjb3JlLndvcmt0cmVlIHdpdGggZ2l0ZmlsZSBpcyBhY2NlcHRlZCcgJworCXRyeV9yZXBvIDEyIHVuc2V0IHVuc2V0ICIkaGVyZS8xMiIgZ2l0ZmlsZSB1bnNldCBcCisJCSIkaGVyZS8xMi5naXQiICIkaGVyZS8xMiIgIiRoZXJlLzEyIiAiKG51bGwpIiBcCisJCSIkaGVyZS8xMi5naXQiICIkaGVyZS8xMiIgIiRoZXJlLzEyIiBzdWIvIDI+bWVzc2FnZSAmJgorCSEgdGVzdCAtcyBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxMzogY29yZS53b3JrdHJlZStHSVRfV09SS19UUkVFIGFjY2VwdGVkICh3aXRoIGdpdGZpbGUpJyAnCisJIyBvcjogeW91IGNhbm5vdCBpbnRpbWlkYXRlIGF3YXkgdGhlIGxhY2sgb2YgR0lUX0RJUiBzZXR0aW5nCisJdHJ5X3JlcG8gMTMgbm9uLWV4aXN0ZW50LXRvbyB1bnNldCBub24tZXhpc3RlbnQgZ2l0ZmlsZSB1bnNldCBcCisJCSIkaGVyZS8xMy5naXQiICIkaGVyZS8xMy9ub24tZXhpc3RlbnQtdG9vIiAiJGhlcmUvMTMiICIobnVsbCkiIFwKKwkJIiRoZXJlLzEzLmdpdCIgIiRoZXJlLzEzL3N1Yi9ub24tZXhpc3RlbnQtdG9vIiAiJGhlcmUvMTMvc3ViIiAiKG51bGwpIiAyPm1lc3NhZ2UgJiYKKwkhIHRlc3QgLXMgbWVzc2FnZQorJworCisjIGNhc2UgIzE0LgorIyBJZiB0aGlzIHdlcmUgbW9yZSB0YWJsZS1kcml2ZW4sIGl0IGNvdWxkIHNoYXJlIGNvZGUgd2l0aCBjYXNlICM2LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTQ6IGNvcmUud29ya3RyZWUgd2l0aCBHSVRfRElSIHBvaW50aW5nIHRvIGdpdGZpbGUnICcKKwlzZXR1cF9yZXBvIDE0ICIkaGVyZS8xNCIgZ2l0ZmlsZSB1bnNldCAmJgorCXRyeV9jYXNlIDE0IHVuc2V0IC5naXQgXAorCQkiJGhlcmUvMTQuZ2l0IiAiJGhlcmUvMTQiICIkaGVyZS8xNCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNCB1bnNldCAiJGhlcmUvMTQvLmdpdCIgXAorCQkiJGhlcmUvMTQuZ2l0IiAiJGhlcmUvMTQiICIkaGVyZS8xNCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNC9zdWIvc3ViIHVuc2V0IC4uLy4uLy5naXQgXAorCQkiJGhlcmUvMTQuZ2l0IiAiJGhlcmUvMTQiICIkaGVyZS8xNCIgc3ViL3N1Yi8gJiYKKwl0cnlfY2FzZSAxNC9zdWIvc3ViIHVuc2V0ICIkaGVyZS8xNC8uZ2l0IiBcCisJCSIkaGVyZS8xNC5naXQiICIkaGVyZS8xNCIgIiRoZXJlLzE0IiBzdWIvc3ViLyAmJgorCisJc2V0dXBfcmVwbyAxNGMgIiRoZXJlLzE0Yy93dCIgZ2l0ZmlsZSB1bnNldCAmJgorCW1rZGlyIC1wIDE0Yy93dC9zdWIgJiYKKworCXRyeV9jYXNlIDE0YyB1bnNldCAuZ2l0IFwKKwkJIiRoZXJlLzE0Yy5naXQiICIkaGVyZS8xNGMvd3QiICIkaGVyZS8xNGMiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTRjIHVuc2V0ICIkaGVyZS8xNGMvLmdpdCIgXAorCQkiJGhlcmUvMTRjLmdpdCIgIiRoZXJlLzE0Yy93dCIgIiRoZXJlLzE0YyIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNGMvc3ViL3N1YiB1bnNldCAuLi8uLi8uZ2l0IFwKKwkJIiRoZXJlLzE0Yy5naXQiICIkaGVyZS8xNGMvd3QiICIkaGVyZS8xNGMvc3ViL3N1YiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNGMvc3ViL3N1YiB1bnNldCAiJGhlcmUvMTRjLy5naXQiIFwKKwkJIiRoZXJlLzE0Yy5naXQiICIkaGVyZS8xNGMvd3QiICIkaGVyZS8xNGMvc3ViL3N1YiIgIihudWxsKSIgJiYKKworCXNldHVwX3JlcG8gMTRkICIkaGVyZS8xNGQvd3QiIGdpdGZpbGUgdW5zZXQgJiYKKwlta2RpciAtcCAxNGQvd3Qvc3ViICYmCisKKwl0cnlfY2FzZSAxNGQgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS8xNGQuZ2l0IiAiJGhlcmUvMTRkL3d0IiAiJGhlcmUvMTRkIiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDE0ZCB1bnNldCAiJGhlcmUvMTRkLy5naXQiIFwKKwkJIiRoZXJlLzE0ZC5naXQiICIkaGVyZS8xNGQvd3QiICIkaGVyZS8xNGQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTRkL3N1Yi9zdWIgdW5zZXQgLi4vLi4vLmdpdCBcCisJCSIkaGVyZS8xNGQuZ2l0IiAiJGhlcmUvMTRkL3d0IiAiJGhlcmUvMTRkL3N1Yi9zdWIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTRkL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzE0ZC8uZ2l0IiBcCisJCSIkaGVyZS8xNGQuZ2l0IiAiJGhlcmUvMTRkL3d0IiAiJGhlcmUvMTRkL3N1Yi9zdWIiICIobnVsbCkiICYmCisKKwlzZXR1cF9yZXBvIDE0ZSAiJGhlcmUiIGdpdGZpbGUgdW5zZXQgJiYKKwl0cnlfY2FzZSAxNGUgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS8xNGUuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRlLyAmJgorCXRyeV9jYXNlIDE0ZSB1bnNldCAiJGhlcmUvMTRlLy5naXQiIFwKKwkJIiRoZXJlLzE0ZS5naXQiICIkaGVyZSIgIiRoZXJlIiAxNGUvICYmCisJdHJ5X2Nhc2UgMTRlL3N1Yi9zdWIgdW5zZXQgLi4vLi4vLmdpdCBcCisJCSIkaGVyZS8xNGUuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRlL3N1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgMTRlL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzE0ZS8uZ2l0IiBcCisJCSIkaGVyZS8xNGUuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRlL3N1Yi9zdWIvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxNGI6IGNvcmUud29ya3RyZWUgaXMgcmVsYXRpdmUgdG8gYWN0dWFsIGdpdCBkaXInICcKKwlzZXR1cF9yZXBvIDE0YiAuLi8xNGIgZ2l0ZmlsZSB1bnNldCAmJgorCXRyeV9jYXNlIDE0YiB1bnNldCAuZ2l0IFwKKwkJIiRoZXJlLzE0Yi5naXQiICIkaGVyZS8xNGIiICIkaGVyZS8xNGIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTRiIHVuc2V0ICIkaGVyZS8xNGIvLmdpdCIgXAorCQkiJGhlcmUvMTRiLmdpdCIgIiRoZXJlLzE0YiIgIiRoZXJlLzE0YiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNGIvc3ViL3N1YiB1bnNldCAuLi8uLi8uZ2l0IFwKKwkJIiRoZXJlLzE0Yi5naXQiICIkaGVyZS8xNGIiICIkaGVyZS8xNGIiIHN1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgMTRiL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzE0Yi8uZ2l0IiBcCisJCSIkaGVyZS8xNGIuZ2l0IiAiJGhlcmUvMTRiIiAiJGhlcmUvMTRiIiBzdWIvc3ViLyAmJgorCisJc2V0dXBfcmVwbyAxNGYgLi4vIGdpdGZpbGUgdW5zZXQgJiYKKwl0cnlfY2FzZSAxNGYgdW5zZXQgLmdpdCBcCisJCSIkaGVyZS8xNGYuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRmLyAmJgorCXRyeV9jYXNlIDE0ZiB1bnNldCAiJGhlcmUvMTRmLy5naXQiIFwKKwkJIiRoZXJlLzE0Zi5naXQiICIkaGVyZSIgIiRoZXJlIiAxNGYvICYmCisJdHJ5X2Nhc2UgMTRmL3N1Yi9zdWIgdW5zZXQgLi4vLi4vLmdpdCBcCisJCSIkaGVyZS8xNGYuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRmL3N1Yi9zdWIvICYmCisJdHJ5X2Nhc2UgMTRmL3N1Yi9zdWIgdW5zZXQgIiRoZXJlLzE0Zi8uZ2l0IiBcCisJCSIkaGVyZS8xNGYuZ2l0IiAiJGhlcmUiICIkaGVyZSIgMTRmL3N1Yi9zdWIvCisnCisKKyMgY2FzZSAjMTU6IEdJVF9XT1JLX1RSRUUgb3ZlcnJpZGVzIGNvcmUud29ya3RyZWUgKGdpdGZpbGUgY2FzZSkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTU6IHNldHVwJyAnCisJc2V0dXBfcmVwbyAxNSBub24tZXhpc3RlbnQgZ2l0ZmlsZSB1bnNldCAmJgorCW1rZGlyIC1wIDE1L3N1Yi9zdWIgMTUvd3Qvc3ViCisnCitydW5fd3RfdGVzdHMgMTUgZ2l0ZmlsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTZhOiBpbXBsaWNpdGx5IGJhcmUgcmVwbyAoY3dkIGluc2lkZSAuZ2l0IGRpciknICcKKwlzZXR1cF9yZXBvIDE2YSB1bnNldCAiIiB1bnNldCAmJgorCW1rZGlyIC1wIDE2YS8uZ2l0L3d0L3N1YiAmJgorCisJdHJ5X2Nhc2UgMTZhLy5naXQgdW5zZXQgdW5zZXQgXAorCQkuICIobnVsbCkiICIkaGVyZS8xNmEvLmdpdCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNmEvLmdpdC93dCB1bnNldCB1bnNldCBcCisJCSIkaGVyZS8xNmEvLmdpdCIgIihudWxsKSIgIiRoZXJlLzE2YS8uZ2l0L3d0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDE2YS8uZ2l0L3d0L3N1YiB1bnNldCB1bnNldCBcCisJCSIkaGVyZS8xNmEvLmdpdCIgIihudWxsKSIgIiRoZXJlLzE2YS8uZ2l0L3d0L3N1YiIgIihudWxsKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzE2YjogYmFyZSAuZ2l0IChjd2QgaW5zaWRlIC5naXQgZGlyKScgJworCXNldHVwX3JlcG8gMTZiIHVuc2V0ICIiIHRydWUgJiYKKwlta2RpciAtcCAxNmIvLmdpdC93dC9zdWIgJiYKKworCXRyeV9jYXNlIDE2Yi8uZ2l0IHVuc2V0IHVuc2V0IFwKKwkJLiAiKG51bGwpIiAiJGhlcmUvMTZiLy5naXQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMTZiLy5naXQvd3QgdW5zZXQgdW5zZXQgXAorCQkiJGhlcmUvMTZiLy5naXQiICIobnVsbCkiICIkaGVyZS8xNmIvLmdpdC93dCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAxNmIvLmdpdC93dC9zdWIgdW5zZXQgdW5zZXQgXAorCQkiJGhlcmUvMTZiLy5naXQiICIobnVsbCkiICIkaGVyZS8xNmIvLmdpdC93dC9zdWIiICIobnVsbCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxNmM6IGJhcmUgLmdpdCBoYXMgbm8gd29ya3RyZWUnICcKKwl0cnlfcmVwbyAxNmMgdW5zZXQgdW5zZXQgdW5zZXQgIiIgdHJ1ZSBcCisJCS5naXQgIihudWxsKSIgIiRoZXJlLzE2YyIgIihudWxsKSIgXAorCQkiJGhlcmUvMTZjLy5naXQiICIobnVsbCkiICIkaGVyZS8xNmMvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTZkOiBiYXJlbmVzcyBwcmVzZXJ2ZWQgYWNyb3NzIGFsaWFzJyAnCisJc2V0dXBfcmVwbyAxNmQgdW5zZXQgIiIgdW5zZXQgJiYKKwkoCisJCWNkIDE2ZC8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGF0dXMgJiYKKwkJZ2l0IGNvbmZpZyBhbGlhcy5zdCBzdGF0dXMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMTZlOiBiYXJlbmVzcyBwcmVzZXJ2ZWQgYnkgLS1iYXJlJyAnCisJc2V0dXBfcmVwbyAxNmUgdW5zZXQgIiIgdW5zZXQgJiYKKwkoCisJCWNkIDE2ZS8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGF0dXMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tYmFyZSBzdGF0dXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxNzogR0lUX1dPUktfVFJFRSB3aXRob3V0IGV4cGxpY2l0IEdJVF9ESVIgaXMgYWNjZXB0ZWQgKGJhcmUgY2FzZSknICcKKwkjIEp1c3QgbGlrZSAjMTYuCisJc2V0dXBfcmVwbyAxN2EgdW5zZXQgIiIgdHJ1ZSAmJgorCXNldHVwX3JlcG8gMTdiIHVuc2V0ICIiIHRydWUgJiYKKwlta2RpciAtcCAxN2EvLmdpdC93dC9zdWIgJiYKKwlta2RpciAtcCAxN2IvLmdpdC93dC9zdWIgJiYKKworCXRyeV9jYXNlIDE3YS8uZ2l0ICIkaGVyZS8xN2EiIHVuc2V0IFwKKwkJIiRoZXJlLzE3YS8uZ2l0IiAiJGhlcmUvMTdhIiAiJGhlcmUvMTdhIiAuZ2l0LyBcCisJCTI+bWVzc2FnZSAmJgorCXRyeV9jYXNlIDE3YS8uZ2l0L3d0ICIkaGVyZS8xN2EiIHVuc2V0IFwKKwkJIiRoZXJlLzE3YS8uZ2l0IiAiJGhlcmUvMTdhIiAiJGhlcmUvMTdhIiAuZ2l0L3d0LyAmJgorCXRyeV9jYXNlIDE3YS8uZ2l0L3d0L3N1YiAiJGhlcmUvMTdhIiB1bnNldCBcCisJCSIkaGVyZS8xN2EvLmdpdCIgIiRoZXJlLzE3YSIgIiRoZXJlLzE3YSIgLmdpdC93dC9zdWIvICYmCisKKwl0cnlfY2FzZSAxN2IvLmdpdCAiJGhlcmUvMTdiIiB1bnNldCBcCisJCSIkaGVyZS8xN2IvLmdpdCIgIiRoZXJlLzE3YiIgIiRoZXJlLzE3YiIgLmdpdC8gJiYKKwl0cnlfY2FzZSAxN2IvLmdpdC93dCAiJGhlcmUvMTdiIiB1bnNldCBcCisJCSIkaGVyZS8xN2IvLmdpdCIgIiRoZXJlLzE3YiIgIiRoZXJlLzE3YiIgLmdpdC93dC8gJiYKKwl0cnlfY2FzZSAxN2IvLmdpdC93dC9zdWIgIiRoZXJlLzE3YiIgdW5zZXQgXAorCQkiJGhlcmUvMTdiLy5naXQiICIkaGVyZS8xN2IiICIkaGVyZS8xN2IiIC5naXQvd3Qvc3ViLyAmJgorCisJdHJ5X3JlcG8gMTdjICIkaGVyZS8xN2MiIHVuc2V0IHVuc2V0ICIiIHRydWUgXAorCQkuZ2l0ICIkaGVyZS8xN2MiICIkaGVyZS8xN2MiICIobnVsbCkiIFwKKwkJIiRoZXJlLzE3Yy8uZ2l0IiAiJGhlcmUvMTdjIiAiJGhlcmUvMTdjIiBzdWIvIDI+bWVzc2FnZSAmJgorCSEgdGVzdCAtcyBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxODogYmFyZSAuZ2l0IG5hbWVkIGJ5IEdJVF9ESVIgaGFzIG5vIHdvcmt0cmVlJyAnCisJdHJ5X3JlcG8gMTggdW5zZXQgLmdpdCB1bnNldCAiIiB0cnVlIFwKKwkJLmdpdCAiKG51bGwpIiAiJGhlcmUvMTgiICIobnVsbCkiIFwKKwkJLi4vLmdpdCAiKG51bGwpIiAiJGhlcmUvMTgvc3ViIiAiKG51bGwpIiAmJgorCXRyeV9yZXBvIDE4YiB1bnNldCAiJGhlcmUvMThiLy5naXQiIHVuc2V0ICIiIHRydWUgXAorCQkiJGhlcmUvMThiLy5naXQiICIobnVsbCkiICIkaGVyZS8xOGIiICIobnVsbCkiIFwKKwkJIiRoZXJlLzE4Yi8uZ2l0IiAiKG51bGwpIiAiJGhlcmUvMThiL3N1YiIgIihudWxsKSIKKycKKworIyBDYXNlICMxOTogR0lUX0RJUiArIEdJVF9XT1JLX1RSRUUgc3VwcHJlc3NlcyBiYXJlbmVzcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMxOTogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDE5IHVuc2V0ICIiIHRydWUgJiYKKwlta2RpciAtcCAxOS9zdWIvc3ViIDE5L3d0L3N1YgorJworcnVuX3d0X3Rlc3RzIDE5CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyMGE6IGNvcmUud29ya3RyZWUgd2l0aG91dCBHSVRfRElSIGFjY2VwdGVkIChpbnNpZGUgLmdpdCknICcKKwkjIFVubGlrZSBjYXNlICMxNmEuCisJc2V0dXBfcmVwbyAyMGEgIiRoZXJlLzIwYSIgIiIgdW5zZXQgJiYKKwlta2RpciAtcCAyMGEvLmdpdC93dC9zdWIgJiYKKwl0cnlfY2FzZSAyMGEvLmdpdCB1bnNldCB1bnNldCBcCisJCSIkaGVyZS8yMGEvLmdpdCIgIiRoZXJlLzIwYSIgIiRoZXJlLzIwYSIgLmdpdC8gMj5tZXNzYWdlICYmCisJdHJ5X2Nhc2UgMjBhLy5naXQvd3QgdW5zZXQgdW5zZXQgXAorCQkiJGhlcmUvMjBhLy5naXQiICIkaGVyZS8yMGEiICIkaGVyZS8yMGEiIC5naXQvd3QvICYmCisJdHJ5X2Nhc2UgMjBhLy5naXQvd3Qvc3ViIHVuc2V0IHVuc2V0IFwKKwkJIiRoZXJlLzIwYS8uZ2l0IiAiJGhlcmUvMjBhIiAiJGhlcmUvMjBhIiAuZ2l0L3d0L3N1Yi8gJiYKKwkhIHRlc3QgLXMgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjBiL2M6IGNvcmUud29ya3RyZWUgYW5kIGNvcmUuYmFyZSBjb25mbGljdCcgJworCXNldHVwX3JlcG8gMjBiIG5vbi1leGlzdGVudCAiIiB0cnVlICYmCisJbWtkaXIgLXAgMjBiLy5naXQvd3Qvc3ViICYmCisJKAorCQljZCAyMGIvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3RhdHVzID4vZGV2L251bGwKKwkpIDI+bWVzc2FnZSAmJgorCWdyZXAgImNvcmUuYmFyZSBhbmQgY29yZS53b3JrdHJlZSIgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjBkOiBjb3JlLndvcmt0cmVlIGFuZCBjb3JlLmJhcmUgT0sgd2hlbiB3b3JraW5nIHRyZWUgbm90IG5lZWRlZCcgJworCXNldHVwX3JlcG8gMjBkIG5vbi1leGlzdGVudCAiIiB0cnVlICYmCisJbWtkaXIgLXAgMjBkLy5naXQvd3Qvc3ViICYmCisJKAorCQljZCAyMGQvLmdpdCAmJgorCQlnaXQgY29uZmlnIGZvby5iYXIgdmFsdWUKKwkpCisnCisKKyMgQ2FzZSAjMjE6IGNvcmUud29ya3RyZWUvR0lUX1dPUktfVFJFRSBvdmVycmlkZXMgY29yZS5iYXJlJyAnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjE6IHNldHVwLCBjb3JlLndvcmt0cmVlIHdhcm5zIGJlZm9yZSBvdmVycmlkaW5nIGNvcmUuYmFyZScgJworCXNldHVwX3JlcG8gMjEgbm9uLWV4aXN0ZW50ICIiIHVuc2V0ICYmCisJbWtkaXIgLXAgMjEvLmdpdC93dC9zdWIgJiYKKwkoCisJCWNkIDIxLy5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0iJGhlcmUvMjEiICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFICYmCisJCWdpdCBzdGF0dXMgPi9kZXYvbnVsbAorCSkgMj5tZXNzYWdlICYmCisJISB0ZXN0IC1zIG1lc3NhZ2UKKworJworcnVuX3d0X3Rlc3RzIDIxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyMmE6IGNvcmUud29ya3RyZWUgPSBHSVRfRElSID0gLmdpdCBkaXInICcKKwkjIGxpa2UgY2FzZSAjNi4KKworCXNldHVwX3JlcG8gMjJhICIkaGVyZS8yMmEvLmdpdCIgIiIgdW5zZXQgJiYKKwlzZXR1cF9yZXBvIDIyYWIgLiAiIiB1bnNldCAmJgorCW1rZGlyIC1wIDIyYS8uZ2l0L3N1YiAyMmEvc3ViICYmCisJbWtkaXIgLXAgMjJhYi8uZ2l0L3N1YiAyMmFiL3N1YiAmJgorCXRyeV9jYXNlIDIyYS8uZ2l0IHVuc2V0IC4gXAorCQkuICIkaGVyZS8yMmEvLmdpdCIgIiRoZXJlLzIyYS8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYS8uZ2l0IHVuc2V0ICIkaGVyZS8yMmEvLmdpdCIgXAorCQkiJGhlcmUvMjJhLy5naXQiICIkaGVyZS8yMmEvLmdpdCIgIiRoZXJlLzIyYS8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYS8uZ2l0L3N1YiB1bnNldCAuLiBcCisJCSIkaGVyZS8yMmEvLmdpdCIgIiRoZXJlLzIyYS8uZ2l0IiAiJGhlcmUvMjJhLy5naXQiIHN1Yi8gJiYKKwl0cnlfY2FzZSAyMmEvLmdpdC9zdWIgdW5zZXQgIiRoZXJlLzIyYS8uZ2l0IiBcCisJCSIkaGVyZS8yMmEvLmdpdCIgIiRoZXJlLzIyYS8uZ2l0IiAiJGhlcmUvMjJhLy5naXQiIHN1Yi8gJiYKKworCXRyeV9jYXNlIDIyYWIvLmdpdCB1bnNldCAuIFwKKwkJLiAiJGhlcmUvMjJhYi8uZ2l0IiAiJGhlcmUvMjJhYi8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYWIvLmdpdCB1bnNldCAiJGhlcmUvMjJhYi8uZ2l0IiBcCisJCSIkaGVyZS8yMmFiLy5naXQiICIkaGVyZS8yMmFiLy5naXQiICIkaGVyZS8yMmFiLy5naXQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMjJhYi8uZ2l0L3N1YiB1bnNldCAuLiBcCisJCSIkaGVyZS8yMmFiLy5naXQiICIkaGVyZS8yMmFiLy5naXQiICIkaGVyZS8yMmFiLy5naXQiIHN1Yi8gJiYKKwl0cnlfY2FzZSAyMmFiLy5naXQgdW5zZXQgIiRoZXJlLzIyYWIvLmdpdCIgXAorCQkiJGhlcmUvMjJhYi8uZ2l0IiAiJGhlcmUvMjJhYi8uZ2l0IiAiJGhlcmUvMjJhYi8uZ2l0IiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjJiOiBjb3JlLndvcmt0cmVlIGNoaWxkIG9mIC5naXQsIEdJVF9ESVI9LmdpdCcgJworCXNldHVwX3JlcG8gMjJiICIkaGVyZS8yMmIvLmdpdC93dCIgIiIgdW5zZXQgJiYKKwlzZXR1cF9yZXBvIDIyYmIgd3QgIiIgdW5zZXQgJiYKKwlta2RpciAtcCAyMmIvLmdpdC9zdWIgMjJiL3N1YiAyMmIvLmdpdC93dC9zdWIgMjJiL3d0L3N1YiAmJgorCW1rZGlyIC1wIDIyYmIvLmdpdC9zdWIgMjJiYi9zdWIgMjJiYi8uZ2l0L3d0IDIyYmIvd3QgJiYKKworCXRyeV9jYXNlIDIyYi8uZ2l0IHVuc2V0IC4gXAorCQkuICIkaGVyZS8yMmIvLmdpdC93dCIgIiRoZXJlLzIyYi8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYi8uZ2l0IHVuc2V0ICIkaGVyZS8yMmIvLmdpdCIgXAorCQkiJGhlcmUvMjJiLy5naXQiICIkaGVyZS8yMmIvLmdpdC93dCIgIiRoZXJlLzIyYi8uZ2l0IiAiKG51bGwpIiAmJgorCXRyeV9jYXNlIDIyYi8uZ2l0L3N1YiB1bnNldCAuLiBcCisJCS4uICIkaGVyZS8yMmIvLmdpdC93dCIgIiRoZXJlLzIyYi8uZ2l0L3N1YiIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAyMmIvLmdpdC9zdWIgdW5zZXQgIiRoZXJlLzIyYi8uZ2l0IiBcCisJCSIkaGVyZS8yMmIvLmdpdCIgIiRoZXJlLzIyYi8uZ2l0L3d0IiAiJGhlcmUvMjJiLy5naXQvc3ViIiAiKG51bGwpIiAmJgorCisJdHJ5X2Nhc2UgMjJiYi8uZ2l0IHVuc2V0IC4gXAorCQkuICIkaGVyZS8yMmJiLy5naXQvd3QiICIkaGVyZS8yMmJiLy5naXQiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMjJiYi8uZ2l0IHVuc2V0ICIkaGVyZS8yMmJiLy5naXQiIFwKKwkJIiRoZXJlLzIyYmIvLmdpdCIgIiRoZXJlLzIyYmIvLmdpdC93dCIgIiRoZXJlLzIyYmIvLmdpdCIgIihudWxsKSIgJiYKKwl0cnlfY2FzZSAyMmJiLy5naXQvc3ViIHVuc2V0IC4uIFwKKwkJLi4gIiRoZXJlLzIyYmIvLmdpdC93dCIgIiRoZXJlLzIyYmIvLmdpdC9zdWIiICIobnVsbCkiICYmCisJdHJ5X2Nhc2UgMjJiYi8uZ2l0L3N1YiB1bnNldCAiJGhlcmUvMjJiYi8uZ2l0IiBcCisJCSIkaGVyZS8yMmJiLy5naXQiICIkaGVyZS8yMmJiLy5naXQvd3QiICIkaGVyZS8yMmJiLy5naXQvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjJjOiBjb3JlLndvcmt0cmVlID0gLmdpdC8uLiwgR0lUX0RJUj0uZ2l0JyAnCisJc2V0dXBfcmVwbyAyMmMgIiRoZXJlLzIyYyIgIiIgdW5zZXQgJiYKKwlzZXR1cF9yZXBvIDIyY2IgLi4gIiIgdW5zZXQgJiYKKwlta2RpciAtcCAyMmMvLmdpdC9zdWIgMjJjL3N1YiAmJgorCW1rZGlyIC1wIDIyY2IvLmdpdC9zdWIgMjJjYi9zdWIgJiYKKworCXRyeV9jYXNlIDIyYy8uZ2l0IHVuc2V0IC4gXAorCQkiJGhlcmUvMjJjLy5naXQiICIkaGVyZS8yMmMiICIkaGVyZS8yMmMiIC5naXQvICYmCisJdHJ5X2Nhc2UgMjJjLy5naXQgdW5zZXQgIiRoZXJlLzIyYy8uZ2l0IiBcCisJCSIkaGVyZS8yMmMvLmdpdCIgIiRoZXJlLzIyYyIgIiRoZXJlLzIyYyIgLmdpdC8gJiYKKwl0cnlfY2FzZSAyMmMvLmdpdC9zdWIgdW5zZXQgLi4gXAorCQkiJGhlcmUvMjJjLy5naXQiICIkaGVyZS8yMmMiICIkaGVyZS8yMmMiIC5naXQvc3ViLyAmJgorCXRyeV9jYXNlIDIyYy8uZ2l0L3N1YiB1bnNldCAiJGhlcmUvMjJjLy5naXQiIFwKKwkJIiRoZXJlLzIyYy8uZ2l0IiAiJGhlcmUvMjJjIiAiJGhlcmUvMjJjIiAuZ2l0L3N1Yi8gJiYKKworCXRyeV9jYXNlIDIyY2IvLmdpdCB1bnNldCAuIFwKKwkJIiRoZXJlLzIyY2IvLmdpdCIgIiRoZXJlLzIyY2IiICIkaGVyZS8yMmNiIiAuZ2l0LyAmJgorCXRyeV9jYXNlIDIyY2IvLmdpdCB1bnNldCAiJGhlcmUvMjJjYi8uZ2l0IiBcCisJCSIkaGVyZS8yMmNiLy5naXQiICIkaGVyZS8yMmNiIiAiJGhlcmUvMjJjYiIgLmdpdC8gJiYKKwl0cnlfY2FzZSAyMmNiLy5naXQvc3ViIHVuc2V0IC4uIFwKKwkJIiRoZXJlLzIyY2IvLmdpdCIgIiRoZXJlLzIyY2IiICIkaGVyZS8yMmNiIiAuZ2l0L3N1Yi8gJiYKKwl0cnlfY2FzZSAyMmNiLy5naXQvc3ViIHVuc2V0ICIkaGVyZS8yMmNiLy5naXQiIFwKKwkJIiRoZXJlLzIyY2IvLmdpdCIgIiRoZXJlLzIyY2IiICIkaGVyZS8yMmNiIiAuZ2l0L3N1Yi8KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzIyLjI6IGNvcmUud29ya3RyZWUgYW5kIGNvcmUuYmFyZSBjb25mbGljdCcgJworCXNldHVwX3JlcG8gMjIgIiRoZXJlLzIyIiAiIiB0cnVlICYmCisJKAorCQljZCAyMi8uZ2l0ICYmCisJCUdJVF9ESVI9LiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3RhdHVzIDI+cmVzdWx0CisJKSAmJgorCSgKKwkJY2QgMjIgJiYKKwkJR0lUX0RJUj0uZ2l0ICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGF0dXMgMj5yZXN1bHQKKwkpICYmCisJZ3JlcCAiY29yZS5iYXJlIGFuZCBjb3JlLndvcmt0cmVlIiAyMi8uZ2l0L3Jlc3VsdCAmJgorCWdyZXAgImNvcmUuYmFyZSBhbmQgY29yZS53b3JrdHJlZSIgMjIvcmVzdWx0CisnCisKKyMgQ2FzZSAjMjM6IEdJVF9ESVIgKyBHSVRfV09SS19UUkVFKCtjb3JlLndvcmt0cmVlKSBzdXBwcmVzc2VzIGJhcmVuZXNzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzIzOiBzZXR1cCcgJworCXNldHVwX3JlcG8gMjMgbm9uLWV4aXN0ZW50ICIiIHRydWUgJiYKKwlta2RpciAtcCAyMy9zdWIvc3ViIDIzL3d0L3N1YgorJworcnVuX3d0X3Rlc3RzIDIzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyNDogYmFyZSByZXBvIGhhcyBubyB3b3JrdHJlZSAoZ2l0ZmlsZSBjYXNlKScgJworCXRyeV9yZXBvIDI0IHVuc2V0IHVuc2V0IHVuc2V0IGdpdGZpbGUgdHJ1ZSBcCisJCSIkaGVyZS8yNC5naXQiICIobnVsbCkiICIkaGVyZS8yNCIgIihudWxsKSIgXAorCQkiJGhlcmUvMjQuZ2l0IiAiKG51bGwpIiAiJGhlcmUvMjQvc3ViIiAiKG51bGwpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjU6IEdJVF9XT1JLX1RSRUUgYWNjZXB0ZWQgaWYgR0lUX0RJUiB1bnNldCAoYmFyZSBnaXRmaWxlIGNhc2UpJyAnCisJdHJ5X3JlcG8gMjUgIiRoZXJlLzI1IiB1bnNldCB1bnNldCBnaXRmaWxlIHRydWUgXAorCQkiJGhlcmUvMjUuZ2l0IiAiJGhlcmUvMjUiICIkaGVyZS8yNSIgIihudWxsKSIgIFwKKwkJIiRoZXJlLzI1LmdpdCIgIiRoZXJlLzI1IiAiJGhlcmUvMjUiICJzdWIvIiAyPm1lc3NhZ2UgJiYKKwkhIHRlc3QgLXMgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjY6IGJhcmUgcmVwbyBoYXMgbm8gd29ya3RyZWUgKEdJVF9ESVIgLT4gZ2l0ZmlsZSBjYXNlKScgJworCXRyeV9yZXBvIDI2IHVuc2V0ICIkaGVyZS8yNi8uZ2l0IiB1bnNldCBnaXRmaWxlIHRydWUgXAorCQkiJGhlcmUvMjYuZ2l0IiAiKG51bGwpIiAiJGhlcmUvMjYiICIobnVsbCkiIFwKKwkJIiRoZXJlLzI2LmdpdCIgIihudWxsKSIgIiRoZXJlLzI2L3N1YiIgIihudWxsKSIgJiYKKwl0cnlfcmVwbyAyNmIgdW5zZXQgLmdpdCB1bnNldCBnaXRmaWxlIHRydWUgXAorCQkiJGhlcmUvMjZiLmdpdCIgIihudWxsKSIgIiRoZXJlLzI2YiIgIihudWxsKSIgXAorCQkiJGhlcmUvMjZiLmdpdCIgIihudWxsKSIgIiRoZXJlLzI2Yi9zdWIiICIobnVsbCkiCisnCisKKyMgQ2FzZSAjMjc6IEdJVF9ESVIgKyBHSVRfV09SS19UUkVFIHN1cHByZXNzZXMgYmFyZW5lc3MgKHdpdGggZ2l0ZmlsZSkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMjc6IHNldHVwJyAnCisJc2V0dXBfcmVwbyAyNyB1bnNldCBnaXRmaWxlIHRydWUgJiYKKwlta2RpciAtcCAyNy9zdWIvc3ViIDI3L3d0L3N1YgorJworcnVuX3d0X3Rlc3RzIDI3IGdpdGZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIzI4OiBjb3JlLndvcmt0cmVlIGFuZCBjb3JlLmJhcmUgY29uZmxpY3QgKGdpdGZpbGUgY2FzZSknICcKKwlzZXR1cF9yZXBvIDI4ICIkaGVyZS8yOCIgZ2l0ZmlsZSB0cnVlICYmCisJKAorCQljZCAyOCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3RhdHVzCisJKSAyPm1lc3NhZ2UgJiYKKwlncmVwICJjb3JlLmJhcmUgYW5kIGNvcmUud29ya3RyZWUiIG1lc3NhZ2UKKycKKworIyBDYXNlICMyOTogR0lUX1dPUktfVFJFRSgrY29yZS53b3JrdHJlZSkgb3ZlcnJpZGVzIGNvcmUuYmFyZSAoZ2l0ZmlsZSBjYXNlKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMyOTogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDI5IG5vbi1leGlzdGVudCBnaXRmaWxlIHRydWUgJiYKKwlta2RpciAtcCAyOS9zdWIvc3ViIDI5L3d0L3N1YiAmJgorCSgKKwkJY2QgMjkgJiYKKwkJR0lUX1dPUktfVFJFRT0iJGhlcmUvMjkiICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFICYmCisJCWdpdCBzdGF0dXMKKwkpIDI+bWVzc2FnZSAmJgorCSEgdGVzdCAtcyBtZXNzYWdlCisnCitydW5fd3RfdGVzdHMgMjkgZ2l0ZmlsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcjMzA6IGNvcmUud29ya3RyZWUgYW5kIGNvcmUuYmFyZSBjb25mbGljdCAoZ2l0ZmlsZSB2ZXJzaW9uKScgJworCSMgSnVzdCBsaWtlIGNhc2UgIzIyLgorCXNldHVwX3JlcG8gMzAgIiRoZXJlLzMwIiBnaXRmaWxlIHRydWUgJiYKKwkoCisJCWNkIDMwICYmCisJCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRElSPS5naXQgZ2l0IHN0YXR1cyAyPnJlc3VsdAorCSkgJiYKKwlncmVwICJjb3JlLmJhcmUgYW5kIGNvcmUud29ya3RyZWUiIDMwL3Jlc3VsdAorJworCisjIENhc2UgIzMxOiBHSVRfRElSICsgR0lUX1dPUktfVFJFRSgrY29yZS53b3JrdHJlZSkgc3VwcHJlc3NlcworIyBiYXJlbmVzcyAoZ2l0ZmlsZSB2ZXJzaW9uKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyMzMTogc2V0dXAnICcKKwlzZXR1cF9yZXBvIDMxIG5vbi1leGlzdGVudCBnaXRmaWxlIHRydWUgJiYKKwlta2RpciAtcCAzMS9zdWIvc3ViIDMxL3d0L3N1YgorJworcnVuX3d0X3Rlc3RzIDMxIGdpdGZpbGUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTExLXJldi1wYXJzZS1jYXJldC5zaCBiL3QvdDE1MTEtcmV2LXBhcnNlLWNhcmV0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1OTczZjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTExLXJldi1wYXJzZS1jYXJldC5zaApAQCAtMCwwICsxLDgwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdHMgZm9yIHJlZl57c3R1ZmZ9JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGJsb2IgPmEtYmxvYiAmJgorCWdpdCB0YWcgLWEgLW0gYmxvYiBibG9iLXRhZyBgZ2l0IGhhc2gtb2JqZWN0IC13IGEtYmxvYmAgJiYKKwlta2RpciBhLXRyZWUgJiYKKwllY2hvIG1vcmVibG9icyA+YS10cmVlL2Fub3RoZXItYmxvYiAmJgorCWdpdCBhZGQgLiAmJgorCVRSRUVfU0hBMT1gZ2l0IHdyaXRlLXRyZWVgICYmCisJZ2l0IHRhZyAtYSAtbSB0cmVlIHRyZWUtdGFnICIkVFJFRV9TSEExIiAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCWdpdCB0YWcgLWEgLW0gY29tbWl0IGNvbW1pdC10YWcgJiYKKwlnaXQgYnJhbmNoIHJlZiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIG1vZGlmaWVkID4+YS1ibG9iICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBjb21taXQgLW0gTW9kaWZpZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXntub24tZXhpc3RlbnR9JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZee25vbi1leGlzdGVudH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXnt9JyAnCisJZ2l0IHJldi1wYXJzZSByZWYgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSByZWZee30gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgY29tbWl0LXRhZ157fSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZl57Y29tbWl0fScgJworCWdpdCByZXYtcGFyc2UgcmVmID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgcmVmXntjb21taXR9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIGNvbW1pdC10YWdee2NvbW1pdH0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgdHJlZS10YWdee2NvbW1pdH0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIGJsb2ItdGFnXntjb21taXR9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZl57dHJlZX0nICcKKwllY2hvICRUUkVFX1NIQTEgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSByZWZee3RyZWV9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIGNvbW1pdC10YWdee3RyZWV9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIHRyZWUtdGFnXnt0cmVlfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBibG9iLXRhZ157dHJlZX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXnt0YWd9JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBIRUFEXnt0YWd9ICYmCisJZ2l0IHJldi1wYXJzZSBjb21taXQtdGFnID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgY29tbWl0LXRhZ157dGFnfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZl57Ly59JyAnCisJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSBtYXN0ZXJeey8ufSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZl57L25vbi1leGlzdGVudH0nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIG1hc3Rlcl57L25vbi1leGlzdGVudH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmXnsvSW5pdGlhbH0nICcKKwlnaXQgcmV2LXBhcnNlIHJlZiA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LXBhcnNlIG1hc3Rlcl57L0luaXRpYWx9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNTEyLXJldi1wYXJzZS1kaXNhbWJpZ3VhdGlvbi5zaCBiL3QvdDE1MTItcmV2LXBhcnNlLWRpc2FtYmlndWF0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhMTU1YzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTEyLXJldi1wYXJzZS1kaXNhbWJpZ3VhdGlvbi5zaApAQCAtMCwwICsxLDI5NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J29iamVjdCBuYW1lIGRpc2FtYmlndWF0aW9uCisKK0NyZWF0ZSBibG9icywgdHJlZXMsIGNvbW1pdHMgYW5kIGEgdGFnIHRoYXQgYWxsIHNoYXJlIHRoZSBzYW1lCitwcmVmaXgsIGFuZCBtYWtlIHN1cmUgImdpdCByZXYtcGFyc2UiIGNhbiB0YWtlIGFkdmFudGFnZSBvZgordHlwZSBpbmZvcm1hdGlvbiB0byBkaXNhbWJpZ3VhdGUgc2hvcnQgb2JqZWN0IG5hbWVzIHRoYXQgYXJlCitub3QgbmVjZXNzYXJpbHkgdW5pcXVlLgorCitUaGUgZmluYWwgaGlzdG9yeSB1c2VkIGluIHRoZSB0ZXN0IGhhcyBmaXZlIGNvbW1pdHMsIHdpdGggdGhlIGJvdHRvbQorb25lIHRhZ2dlZCBhcyB2MS4wLjAuICBUaGV5IGFsbCBoYXZlIG9uZSByZWd1bGFyIGZpbGUgZWFjaC4KKworICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgIHwgICAgICAgICAgIC4tLS0tLS0tYjN3ZXR0dmktLS0tIGFkMnVlZSAgICAgfAorICB8ICAgICAgICAgIC8gICAgICAgICAgICAgICAgICAgLyAgICAgICAgICAgIHwKKyAgfCAgYTJvbnN4YnZqLS0tY3p5OGY3M3QtLWlvaWxleTVvICAgICAgICAgICB8CisgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxvYiBhbmQgdHJlZScgJworCXRlc3RfdGljayAmJgorCSgKKwkJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOQorCQlkbworCQkJZWNobyAkaQorCQlkb25lCisJCWVjaG8KKwkJZWNobyBiMXJ3enljMworCSkgPmEwYmxncXNqYyAmJgorCisJIyBjcmVhdGUgb25lIGJsb2IgMDAwMDAwMDAwMGIzNgorCWdpdCBhZGQgYTBibGdxc2pjICYmCisKKwkjIGNyZWF0ZSBvbmUgdHJlZSAwMDAwMDAwMDAwY2RjCisJZ2l0IHdyaXRlLXRyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FybiBhbWJpZ3VpdHkgd2hlbiBubyBjYW5kaWRhdGUgbWF0Y2hlcyB0eXBlIGhpbnQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMF57Y29tbWl0fSAyPmFjdHVhbCAmJgorCWdyZXAgInNob3J0IFNIQTEgMDAwMDAwMDAwIGlzIGFtYmlndW91cyIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0ZSB0cmVlLWlzaCcgJworCSMgZmVlZCB0cmVlLWlzaCBpbiBhbiB1bmFtYmlndW91cyB3YXkKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMDBjZGM6YTBibGdxc2pjICYmCisKKwkjIGFtYmlndW91cyBhdCB0aGUgb2JqZWN0IG5hbWUgbGV2ZWwsIGJ1dCB0aGVyZSBpcyBvbmx5IG9uZQorCSMgc3VjaCB0cmVlLWlzaCAodGhlIG90aGVyIGlzIGEgYmxvYikKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMDphMGJsZ3FzamMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIGJsb2InICcKKwlzZWQgLWUgInMvfCQvLyIgPnBhdGNoIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9mcm90eiBiL2Zyb3R6CisJaW5kZXggMDAwMDAwMDAwLi5mZmZmZmYgMTAwNjQ0CisJLS0tIGEvZnJvdHoKKwkrKysgYi9mcm90egorCUBAIC0xMCwzICsxMCw0IEBACisJIDkKKwkgfAorCSBiMXJ3enljMworCStpcndyeQorCUVPRgorCSgKKwkJR0lUX0lOREVYX0ZJTEU9ZnJvdHogJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCWdpdCBhcHBseSAtLWJ1aWxkLWZha2UtYW5jZXN0b3IgZnJvdHogcGF0Y2ggJiYKKwkJZ2l0IGNhdC1maWxlIGJsb2IgOmZyb3R6ID5hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgYTBibGdxc2pjIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGUgdHJlZScgJworCWNvbW1pdD0kKGVjaG8gImQ3eG0iIHwgZ2l0IGNvbW1pdC10cmVlIDAwMDAwMDAwMCkgJiYKKwkjIHRoaXMgY29tbWl0IGlzIGZmZmZmMmUgYW5kIG5vdCBhbWJpZ3VvdXMgd2l0aCB0aGUgMDAwMDAqIG9iamVjdHMKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSAkY29tbWl0Xnt0cmVlfSkgPSAkKGdpdCByZXYtcGFyc2UgMDAwMDAwMDAwMGNkYykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlyc3QgY29tbWl0JyAnCisJIyBjcmVhdGUgb25lIGNvbW1pdCAwMDAwMDAwMDAwZTRmCisJZ2l0IGNvbW1pdCAtbSBhMm9uc3hidmoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIGNvbW1pdC1pc2gnICcKKwkjIGZlZWQgY29tbWl0LWlzaCBpbiBhbiB1bmFtYmlndW91cyB3YXkKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMDBlNGZee2NvbW1pdH0gJiYKKworCSMgYW1iaWd1b3VzIGF0IHRoZSBvYmplY3QgbmFtZSBsZXZlbCwgYnV0IHRoZXJlIGlzIG9ubHkgb25lCisJIyBzdWNoIGNvbW1pdCAodGhlIG90aGVycyBhcmUgdHJlZSBhbmQgYmxvYikKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMF57Y29tbWl0fSAmJgorCisJIyBsaWtld2lzZQorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgMDAwMDAwMDAwXjAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIGNvbW1pdCcgJworCWNvbW1pdD0kKGVjaG8gImhvYXhqIiB8IGdpdCBjb21taXQtdHJlZSAwMDAwMDAwMDAwY2RjIC1wIDAwMDAwMDAwMCkgJiYKKwkjIHRoaXMgY29tbWl0IGlzIGZmZmZmZmQ4IGFuZCBub3QgYW1iaWd1b3VzIHdpdGggdGhlIDAwMDAwKiBvYmplY3RzCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgJGNvbW1pdF4pID0gJChnaXQgcmV2LXBhcnNlIDAwMDAwMDAwMDBlNGYpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBuYW1lMS4ubmFtZTIgdGFrZXMgb25seSBjb21taXQtaXNoZXMgb24gYm90aCBlbmRzJyAnCisJIyBUaGVzZSBhcmUgdW5kZXJzcGVjaWZpZWQgZnJvbSB0aGUgcHJlZml4LWxlbmd0aCBwb2ludCBvZiB2aWV3CisJIyB0byBkaXNhbWJpZ3VhdGUgdGhlIGNvbW1pdCB3aXRoIG90aGVyIG9iamVjdHMsIGJ1dCB0aGVyZSBpcyBvbmx5CisJIyBvbmUgY29tbWl0IHRoYXQgaGFzIDAwMDAwKiBwcmVmaXggYXQgdGhpcyBwb2ludC4KKwlnaXQgbG9nIDAwMDAwMDAwMC4uMDAwMDAwMDAwICYmCisJZ2l0IGxvZyAuLjAwMDAwMDAwMCAmJgorCWdpdCBsb2cgMDAwMDAwMDAwLi4gJiYKKwlnaXQgbG9nIDAwMDAwMDAwMC4uLjAwMDAwMDAwMCAmJgorCWdpdCBsb2cgLi4uMDAwMDAwMDAwICYmCisJZ2l0IGxvZyAwMDAwMDAwMDAuLi4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIG5hbWUxLi5uYW1lMiB0YWtlcyBvbmx5IGNvbW1pdC1pc2hlcyBvbiBib3RoIGVuZHMnICcKKwkjIExpa2V3aXNlLgorCWdpdCByZXYtcGFyc2UgMDAwMDAwMDAwLi4wMDAwMDAwMDAgJiYKKwlnaXQgcmV2LXBhcnNlIC4uMDAwMDAwMDAwICYmCisJZ2l0IHJldi1wYXJzZSAwMDAwMDAwMDAuLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIHRha2VzIG9ubHkgY29tbWl0LWlzaCcgJworCSMgTGlrZXdpc2UuCisJZ2l0IGxvZyAwMDAwMDAwMDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlc2V0IHRha2VzIG9ubHkgY29tbWl0LWlzaCcgJworCSMgTGlrZXdpc2UuCisJZ2l0IHJlc2V0IDAwMDAwMDAwMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXJzdCB0YWcnICcKKwkjIGNyZWF0ZSBvbmUgdGFnIDAwMDAwMDAwMDBmOGYKKwlnaXQgdGFnIC1hIC1tIGo3Y3A4M3VtIHYxLjAuMAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0d28gc2VtaS1hbWJpZ3VvdXMgY29tbWl0LWlzaCcgJworCSMgQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIHRhZyAwMDAwMDAwMDAwZjhmIHRoYXQgcG9pbnRzCisJIyBhdCBhIGNvbW1pdCAwMDAwMDAwMDAwZTRmLCBhbmQgYSB0cmVlIGFuZCBhIGJsb2IgdGhhdAorCSMgc2hhcmUgMDAwMDAwMDAwMCBwcmVmaXggd2l0aCB0aGVzZSB0YWcgYW5kIGNvbW1pdC4KKwkjCisJIyBPbmNlIHRoZSBwYXJzZXIgYmVjb21lcyB1bHRyYS1zbWFydCwgaXQgY291bGQgbm90aWNlIHRoYXQKKwkjIDAwMDAwMDAwMDAgYmVmb3JlIF57Y29tbWl0fSBuYW1lIG1hbnkgZGlmZmVyZW50IG9iamVjdHMsIGJ1dAorCSMgdGhhdCBvbmx5IHR3byAoSEVBRCBhbmQgdjEuMC4wIHRhZykgY2FuIGJlIHBlZWxlZCB0byBjb21taXQsCisJIyBhbmQgdGhhdCBwZWVsaW5nIHRoZW0gZG93biB0byBjb21taXQgeWllbGQgdGhlIHNhbWUgY29tbWl0CisJIyB3aXRob3V0IGFtYmlndWl0eS4KKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDAwMDAwMDAwMDBee2NvbW1pdH0gJiYKKworCSMgbGlrZXdpc2UKKwlnaXQgbG9nIDAwMDAwMDAwMDAuLjAwMDAwMDAwMDAgJiYKKwlnaXQgbG9nIC4uMDAwMDAwMDAwMCAmJgorCWdpdCBsb2cgMDAwMDAwMDAwMC4uICYmCisJZ2l0IGxvZyAwMDAwMDAwMDAwLi4uMDAwMDAwMDAwMCAmJgorCWdpdCBsb2cgLi4uMDAwMDAwMDAwMCAmJgorCWdpdCBsb2cgMDAwMDAwMDAwMC4uLgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0aHJlZSBzZW1pLWFtYmlndW91cyB0cmVlLWlzaCcgJworCSMgTGlrZXdpc2UgZm9yIHRyZWUtaXNoLiAgSEVBRCwgdjEuMC4wIGFuZCBIRUFEXnt0cmVlfSBzaGFyZQorCSMgdGhlIHByZWZpeCBidXQgcGVlbGluZyB0aGVtIHRvIHRyZWUgeWllbGRzIHRoZSBzYW1lIHRoaW5nCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAwMDAwMDAwMDAwXnt0cmVlfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJzZSBkZXNjcmliZSBuYW1lJyAnCisJIyBmZWVkIGFuIHVuYW1iaWd1b3VzIGRlc2NyaWJlIG5hbWUKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHYxLjAuMC0wLWcwMDAwMDAwMDAwZTRmICYmCisKKwkjIGFtYmlndW91cyBhdCB0aGUgb2JqZWN0IG5hbWUgbGV2ZWwsIGJ1dCB0aGVyZSBpcyBvbmx5IG9uZQorCSMgc3VjaCBjb21taXQgKG90aGVycyBhcmUgYmxvYiwgdHJlZSBhbmQgdGFnKQorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdjEuMC4wLTAtZzAwMDAwMDAwMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3JlIGhpc3RvcnknICcKKwkjIGNvbW1pdCAwMDAwMDAwMDAwMDQzCisJZ2l0IG12IGEwYmxncXNqYyBkMTJjcjNoOHQgJiYKKwllY2hvIGg2MnhzamV1ID4+ZDEyY3IzaDh0ICYmCisJZ2l0IGFkZCBkMTJjcjNoOHQgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gY3p5OGY3M3QgJiYKKworCSMgY29tbWl0IDAwMDAwMDAwMDA4ZWMKKwlnaXQgbXYgZDEyY3IzaDh0IGowMDBqbXB6biAmJgorCWVjaG8gajA4YmVrZnZ0ID4+ajAwMGptcHpuICYmCisJZ2l0IGFkZCBqMDAwam1wem4gJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW9pbGV5NW8gJiYKKworCSMgY29tbWl0IDAwMDAwMDAwMDViMAorCWdpdCBjaGVja291dCB2MS4wLjBeMCAmJgorCWdpdCBtdiBhMGJsZ3FzamMgZjU1MThud3UgJiYKKworCWZvciBpIGluIGg2MnhzamV1IGowOGJla2Z2dCBrZzd4ZmxobQorCWRvCisJCWVjaG8gJGkKKwlkb25lID4+ZjU1MThud3UgJiYKKwlnaXQgYWRkIGY1NTE4bnd1ICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGIzd2V0dHZpICYmCisJc2lkZT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCSMgY29tbWl0IDAwMDAwMDAwMDA2NgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCSMgSWYgeW91IHVzZSByZWN1cnNpdmUsIG1lcmdlIHdpbGwgZmFpbCBhbmQgeW91IHdpbGwgbmVlZCB0bworCSMgY2xlYW4gdXAgYTBibGdxc2pjIGFzIHdlbGwuICBJZiB5b3UgdXNlIHJlc29sdmUsIG1lcmdlIHdpbGwKKwkjIHN1Y2NlZWQuCisJdGVzdF9taWdodF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyByZWN1cnNpdmUgJHNpZGUgJiYKKwlnaXQgcm0gLWYgZjU1MThud3UgajAwMGptcHpuICYmCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJtIC1mIGEwYmxncXNqYyAmJgorCSgKKwkJZ2l0IGNhdC1maWxlIGJsb2IgJHNpZGU6ZjU1MThud3UKKwkJZWNobyBqM2wwaTlzNgorCSkgPmFiMmdzODc5ICYmCisJZ2l0IGFkZCBhYjJnczg3OSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBhZDJ1ZWUKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdwYXJzZSBkZXNjcmliZSBuYW1lIHRha2luZyBhZHZhbnRhZ2Ugb2YgZ2VuZXJhdGlvbicgJworCSMgYW1iaWd1b3VzIGF0IHRoZSBvYmplY3QgbmFtZSBsZXZlbCwgYnV0IHRoZXJlIGlzIG9ubHkgb25lCisJIyBzdWNoIGNvbW1pdCBhdCBnZW5lcmF0aW9uIDAKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHYxLjAuMC0wLWcwMDAwMDAwMDAgJiYKKworCSMgbGlrZXdpc2UgZm9yIGdlbmVyYXRpb24gMiBhbmQgNAorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdjEuMC4wLTItZzAwMDAwMDAwMCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdjEuMC4wLTQtZzAwMDAwMDAwMAorJworCisjIE5vdGU6IGJlY2F1c2UgcmV2LXBhcnNlIGRvZXMgbm90IGV2ZW4gdHJ5IHRvIGRpc2FtYmlndWF0ZSBiYXNlZCBvbgorIyB0aGUgZ2VuZXJhdGlvbiBudW1iZXIsIHRoaXMgdGVzdCBjdXJyZW50bHkgc3VjY2VlZHMgZm9yIGEgd3JvbmcKKyMgcmVhc29uLiAgV2hlbiBpdCBsZWFybnMgdG8gdXNlIHRoZSBnZW5lcmF0aW9uIG51bWJlciwgdGhlIHByZXZpb3VzCisjIHRlc3Qgc2hvdWxkIHN1Y2NlZWQsIGFuZCBhbHNvIHRoaXMgdGVzdCBzaG91bGQgZmFpbCBiZWNhdXNlIHRoZQorIyBkZXNjcmliZSBuYW1lIHVzZWQgaW4gdGhlIHRlc3Qgd2l0aCBnZW5lcmF0aW9uIG51bWJlciBjYW4gbmFtZSB0d28KKyMgY29tbWl0cy4gIE1ha2Ugc3VyZSB0aGF0IHN1Y2ggYSBmdXR1cmUgZW5oYW5jZW1lbnQgZG9lcyBub3QgcmFuZG9tbHkKKyMgcGljayBvbmUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJzZSBkZXNjcmliZSBuYW1lIG5vdCBpZ25vcmluZyBhbWJpZ3VpdHknICcKKwkjIGFtYmlndW91cyBhdCB0aGUgb2JqZWN0IG5hbWUgbGV2ZWwsIGFuZCB0aGVyZSBhcmUgdHdvIHN1Y2gKKwkjIGNvbW1pdHMgYXQgZ2VuZXJhdGlvbiAxCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB2MS4wLjAtMS1nMDAwMDAwMDAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91cyBjb21taXQtaXNoJyAnCisJIyBOb3cgdGhlcmUgYXJlIG1hbnkgY29tbWl0cyB0aGF0IGJlZ2luIHdpdGggdGhlCisJIyBjb21tb24gcHJlZml4LCBub25lIG9mIHRoZXNlIHNob3VsZCBwaWNrIG9uZSBhdAorCSMgcmFuZG9tLiAgVGhleSBhbGwgc2hvdWxkIHJlc3VsdCBpbiBhbWJpZ3VpdHkgZXJyb3JzLgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgMDAwMDAwMDBee2NvbW1pdH0gJiYKKworCSMgbGlrZXdpc2UKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDAwMDAwMDAwMC4uMDAwMDAwMDAwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAuLjAwMDAwMDAwMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgMDAwMDAwMDAwLi4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIDAwMDAwMDAwMC4uLjAwMDAwMDAwMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLi4uMDAwMDAwMDAwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAwMDAwMDAwMDAuLi4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZGlzYW1iaWd1YXRlJyAnCisJIyBUaGUgdGVzdCBjcmVhdGVzIDE2IG9iamVjdHMgdGhhdCBzaGFyZSB0aGUgcHJlZml4IGFuZCB0d28KKwkjIGNvbW1pdHMgY3JlYXRlZCBieSBjb21taXQtdHJlZSBpbiBlYXJsaWVyIHRlc3RzIHNoYXJlIGEKKwkjIGRpZmZlcmVudCBwcmVmaXguCisJZ2l0IHJldi1wYXJzZSAtLWRpc2FtYmlndWF0ZT0wMDAwMDAwMDAgPmFjdHVhbCAmJgorCXRlc3QgJCh3YyAtbCA8YWN0dWFsKSA9IDE2ICYmCisJdGVzdCAiJChzZWQgLWUgInMvXlwoLi4uLi4uLi4uXCkuKi9cMS8iIGFjdHVhbCB8IHNvcnQgLXUpIiA9IDAwMDAwMDAwMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWJpZ3VvdXMgNDAtaGV4IHJlZicgJworCVRSRUU9JChnaXQgbWt0cmVlIDwvZGV2L251bGwpICYmCisJUkVGPWBnaXQgcmV2LXBhcnNlIEhFQURgICYmCisJVkFMPSQoZ2l0IGNvbW1pdC10cmVlICRUUkVFIDwvZGV2L251bGwpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy8kUkVGICRWQUwgJiYKKwl0ZXN0IGBnaXQgcmV2LXBhcnNlICRSRUYgMj5lcnJgID0gJFJFRiAmJgorCWdyZXAgInJlZm5hbWUuKiR7UkVGfS4qYW1iaWd1b3VzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1iaWd1b3VzIHNob3J0IHNoYTEgcmVmJyAnCisJVFJFRT0kKGdpdCBta3RyZWUgPC9kZXYvbnVsbCkgJiYKKwlSRUY9YGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEYCAmJgorCVZBTD0kKGdpdCBjb21taXQtdHJlZSAkVFJFRSA8L2Rldi9udWxsKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvJFJFRiAkVkFMICYmCisJdGVzdCBgZ2l0IHJldi1wYXJzZSAkUkVGIDI+ZXJyYCA9ICRWQUwgJiYKKwlncmVwICJyZWZuYW1lLioke1JFRn0uKmFtYmlndW91cyIgZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUxMy1yZXYtcGFyc2UtcHJlZml4LnNoIGIvdC90MTUxMy1yZXYtcGFyc2UtcHJlZml4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3ZWMzYWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QxNTEzLXJldi1wYXJzZS1wcmVmaXguc2gKQEAgLTAsMCArMSw5NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIGZvciByZXYtcGFyc2UgLS1wcmVmaXgnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIC1wIHN1YjEvc3ViMiAmJgorCWVjaG8gdG9wID50b3AgJiYKKwllY2hvIGZpbGUxID5zdWIxL2ZpbGUxICYmCisJZWNobyBmaWxlMiA+c3ViMS9zdWIyL2ZpbGUyICYmCisJZ2l0IGFkZCB0b3Agc3ViMS9maWxlMSBzdWIxL3N1YjIvZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIGNvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBwcmVmaXggLS0gZmlsZScgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggIiIgLS0gdG9wIHN1YjEvZmlsZTEgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCS0tCisJdG9wCisJc3ViMS9maWxlMQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZCBwcmVmaXggLS0gZmlsZScgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggc3ViMS8gLS0gZmlsZTEgc3ViMi9maWxlMiA+YWN0dWFsICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJLS0KKwlzdWIxL2ZpbGUxCisJc3ViMS9zdWIyL2ZpbGUyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkIHByZWZpeCAtLSAuLi9maWxlJyAnCisJZ2l0IHJldi1wYXJzZSAtLXByZWZpeCBzdWIxLyAtLSAuLi90b3Agc3ViMi9maWxlMiA+YWN0dWFsICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJLS0KKwlzdWIxLy4uL3RvcAorCXN1YjEvc3ViMi9maWxlMgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBwcmVmaXggSEVBRDouL3BhdGgnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4ICIiIEhFQUQ6Li90b3AgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRDp0b3AgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkIHByZWZpeCBIRUFEOi4vcGF0aCcgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggc3ViMS8gSEVBRDouL2ZpbGUxID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6c3ViMS9maWxlMSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWQgcHJlZml4IEhFQUQ6Li4vcGF0aCcgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggc3ViMS8gSEVBRDouLi90b3AgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRDp0b3AgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWZpeCBpZ25vcmVkIHdpdGggSEVBRDp0b3AnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4IHN1YjEvIEhFQUQ6dG9wID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQ6dG9wID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGUgcGF0aCB3aXRoIHZhbGlkIHByZWZpeCcgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggc3ViMS8gZmlsZTEgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCXN1YjEvZmlsZTEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBhbmQgcmVmcyB3aXRoIHByZWZpeCcgJworCWdpdCByZXYtcGFyc2UgLS1wcmVmaXggc3ViMS8gbWFzdGVyIGZpbGUxID5hY3R1YWwgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCSQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpCisJc3ViMS9maWxlMQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0d28tbGV2ZWxzIGRlZXAnICcKKwlnaXQgcmV2LXBhcnNlIC0tcHJlZml4IHN1YjEvc3ViMi8gLS0gZmlsZTIgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCS0tCisJc3ViMS9zdWIyL2ZpbGUyCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTUxNC1yZXYtcGFyc2UtcHVzaC5zaCBiL3QvdDE1MTQtcmV2LXBhcnNlLXB1c2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzIxNGY1YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE1MTQtcmV2LXBhcnNlLXB1c2guc2gKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgPGJyYW5jaD5Ae3B1c2h9IHN5bnRheCcKKy4gLi90ZXN0LWxpYi5zaAorCityZXNvbHZlICgpIHsKKwllY2hvICIkMiIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgLS1zeW1ib2xpYy1mdWxsLW5hbWUgIiQxIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBpbml0IC0tYmFyZSBwYXJlbnQuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIG90aGVyLmdpdCAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiBwYXJlbnQuZ2l0ICYmCisJZ2l0IHJlbW90ZSBhZGQgb3RoZXIgb3RoZXIuZ2l0ICYmCisJdGVzdF9jb21taXQgYmFzZSAmJgorCWdpdCBwdXNoIG9yaWdpbiBIRUFEICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10bz1vcmlnaW4vbWFzdGVyIG1hc3RlciAmJgorCWdpdCBicmFuY2ggLS10cmFjayB0b3BpYyBvcmlnaW4vbWFzdGVyICYmCisJZ2l0IHB1c2ggb3JpZ2luIHRvcGljICYmCisJZ2l0IHB1c2ggb3RoZXIgdG9waWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHtwdXNofSB3aXRoIGRlZmF1bHQ9bm90aGluZycgJworCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCBub3RoaW5nICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSBtYXN0ZXJAe3B1c2h9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0B7cHVzaH0gd2l0aCBkZWZhdWx0PXNpbXBsZScgJworCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCBzaW1wbGUgJiYKKwlyZXNvbHZlIG1hc3RlckB7cHVzaH0gcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJpYW5ndWxhciBAe3B1c2h9IGZhaWxzIHdpdGggZGVmYXVsdD1zaW1wbGUnICcKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgc2ltcGxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSB0b3BpY0B7cHVzaH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHtwdXNofSB3aXRoIGRlZmF1bHQ9Y3VycmVudCcgJworCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCBjdXJyZW50ICYmCisJcmVzb2x2ZSB0b3BpY0B7cHVzaH0gcmVmcy9yZW1vdGVzL29yaWdpbi90b3BpYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdAe3B1c2h9IHdpdGggZGVmYXVsdD1tYXRjaGluZycgJworCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCXJlc29sdmUgdG9waWNAe3B1c2h9IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdG9waWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHtwdXNofSB3aXRoIHB1c2hyZW1vdGUgZGVmaW5lZCcgJworCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCBjdXJyZW50ICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRvcGljLnB1c2hyZW1vdGUgb3RoZXIgJiYKKwlyZXNvbHZlIHRvcGljQHtwdXNofSByZWZzL3JlbW90ZXMvb3RoZXIvdG9waWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQHtwdXNofSB3aXRoIHB1c2ggcmVmc3BlY3MnICcKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgbm90aGluZyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5vcmlnaW4ucHVzaCByZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy9tYWdpYy8qICYmCisJZ2l0IHB1c2ggJiYKKwlyZXNvbHZlIHRvcGljQHtwdXNofSByZWZzL3JlbW90ZXMvb3JpZ2luL21hZ2ljL3RvcGljCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MTYwMC1pbmRleC5zaCBiL3QvdDE2MDAtaW5kZXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDc5ZDI0MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDE2MDAtaW5kZXguc2gKQEAgLTAsMCArMSw3NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2luZGV4IGZpbGUgc3BlY2lmaWMgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gMSA+YQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdib2d1cyBHSVRfSU5ERVhfVkVSU0lPTiBpc3N1ZXMgd2FybmluZycgJworCSgKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQlHSVRfSU5ERVhfVkVSU0lPTj0yYm9ndXMgJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9WRVJTSU9OICYmCisJCWdpdCBhZGQgYSAyPiYxIHwgc2VkICJzL1swLTldLy8iID5hY3R1YWwuZXJyICYmCisJCXNlZCAtZSAicy8gWiQvIC8iIDw8LVxFT0YgPmV4cGVjdC5lcnIgJiYKKwkJCXdhcm5pbmc6IEdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLgorCQkJVXNpbmcgdmVyc2lvbiBaCisJCUVPRgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXQgb2YgYm91bmRzIEdJVF9JTkRFWF9WRVJTSU9OIGlzc3VlcyB3YXJuaW5nJyAnCisJKAorCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCUdJVF9JTkRFWF9WRVJTSU9OPTEgJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9WRVJTSU9OICYmCisJCWdpdCBhZGQgYSAyPiYxIHwgc2VkICJzL1swLTldLy8iID5hY3R1YWwuZXJyICYmCisJCXNlZCAtZSAicy8gWiQvIC8iIDw8LVxFT0YgPmV4cGVjdC5lcnIgJiYKKwkJCXdhcm5pbmc6IEdJVF9JTkRFWF9WRVJTSU9OIHNldCwgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLgorCQkJVXNpbmcgdmVyc2lvbiBaCisJCUVPRgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB3YXJuaW5nIHdpdGggYm9ndXMgR0lUX0lOREVYX1ZFUlNJT04gYW5kIGV4aXN0aW5nIGluZGV4JyAnCisJKAorCQlHSVRfSU5ERVhfVkVSU0lPTj0xICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfVkVSU0lPTiAmJgorCQlnaXQgYWRkIGEgMj5hY3R1YWwuZXJyICYmCisJCT5leHBlY3QuZXJyICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dCBvZiBib3VuZHMgaW5kZXgudmVyc2lvbiBpc3N1ZXMgd2FybmluZycgJworCSgKKwkJc2FuZV91bnNldCBHSVRfSU5ERVhfVkVSU0lPTiAmJgorCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCWdpdCBjb25maWcgLS1hZGQgaW5kZXgudmVyc2lvbiAxICYmCisJCWdpdCBhZGQgYSAyPiYxIHwgc2VkICJzL1swLTldLy8iID5hY3R1YWwuZXJyICYmCisJCXNlZCAtZSAicy8gWiQvIC8iIDw8LVxFT0YgPmV4cGVjdC5lcnIgJiYKKwkJCXdhcm5pbmc6IGluZGV4LnZlcnNpb24gc2V0LCBidXQgdGhlIHZhbHVlIGlzIGludmFsaWQuCisJCQlVc2luZyB2ZXJzaW9uIFoKKwkJRU9GCisJCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9JTkRFWF9WRVJTSU9OIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBjb25maWcnICcKKwkoCisJCXJtIC1mIC5naXQvaW5kZXggJiYKKwkJR0lUX0lOREVYX1ZFUlNJT049NCAmJgorCQlleHBvcnQgR0lUX0lOREVYX1ZFUlNJT04gJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBpbmRleC52ZXJzaW9uIDIgJiYKKwkJZ2l0IGFkZCBhIDI+JjEgJiYKKwkJZWNobyA0ID5leHBlY3QgJiYKKwkJdGVzdC1pbmRleC12ZXJzaW9uIDwuZ2l0L2luZGV4ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QxNzAwLXNwbGl0LWluZGV4LnNoIGIvdC90MTcwMC1zcGxpdC1pbmRleC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xOTNkNTVjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MTcwMC1zcGxpdC1pbmRleC5zaApAQCAtMCwwICsxLDIwMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NwbGl0IGluZGV4IG1vZGUgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFdlIG5lZWQgdG90YWwgY29udHJvbCBvZiBpbmRleCBzcGxpdHRpbmcgaGVyZQorc2FuZV91bnNldCBHSVRfVEVTVF9TUExJVF9JTkRFWAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmFibGUgc3BsaXQgaW5kZXgnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tc3BsaXQtaW5kZXggJiYKKwl0ZXN0LWR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCA+YWN0dWFsICYmCisJaW5kZXh2ZXJzaW9uPSQodGVzdC1pbmRleC12ZXJzaW9uIDwuZ2l0L2luZGV4KSAmJgorCWlmIHRlc3QgIiRpbmRleHZlcnNpb24iID0gIjQiCisJdGhlbgorCQlvd249NDMyZWY0YjYzZjMyMTkzOTg0ZjMzOTQzMWZkNTBjYTc5NjQ5MzU2OQorCQliYXNlPTUwODg1MWE3ZjBkZmE4NjkxZTlmNjljN2YwNTU4NjUzODkwMTI0OTEKKwllbHNlCisJCW93bj04Mjk5YjBiY2QxYWMzNjRlNWYxZDc3NjhlZmI2MmZhMmRhNzlhMzM5CisJCWJhc2U9MzlkODkwMTM5ZWU1MzU2YzdlZjU3MjIxNmNlYmNkMjdhYTQxZjlkZgorCWZpICYmCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK293biAkb3duCitiYXNlICRiYXNlCityZXBsYWNlbWVudHM6CitkZWxldGlvbnM6CitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBvbmUgZmlsZScgJworCTogPm9uZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgb25lICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmxzLWZpbGVzLmFjdHVhbCAmJgorCWNhdCA+bHMtZmlsZXMuZXhwZWN0IDw8RU9GICYmCisxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCW9uZQorRU9GCisJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgorCisJdGVzdC1kdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorYmFzZSAkYmFzZQorMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAlvbmUKK3JlcGxhY2VtZW50czoKK2RlbGV0aW9uczoKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYWJsZSBzcGxpdCBpbmRleCcgJworCWdpdCB1cGRhdGUtaW5kZXggLS1uby1zcGxpdC1pbmRleCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID5scy1maWxlcy5hY3R1YWwgJiYKKwljYXQgPmxzLWZpbGVzLmV4cGVjdCA8PEVPRiAmJgorMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAlvbmUKK0VPRgorCXRlc3RfY21wIGxzLWZpbGVzLmV4cGVjdCBscy1maWxlcy5hY3R1YWwgJiYKKworCUJBU0U9YHRlc3QtZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgZ3JlcCAiXm93biIgfCBzZWQgInMvb3duL2Jhc2UvImAgJiYKKwl0ZXN0LWR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IHNlZCAiL15vd24vZCIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8RU9GICYmCitub3QgYSBzcGxpdCBpbmRleAorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmFibGUgc3BsaXQgaW5kZXggYWdhaW4sICJvbmUiIG5vdyBiZWxvbmdzIHRvIGJhc2UgaW5kZXgiJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNwbGl0LWluZGV4ICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmxzLWZpbGVzLmFjdHVhbCAmJgorCWNhdCA+bHMtZmlsZXMuZXhwZWN0IDw8RU9GICYmCisxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCW9uZQorRU9GCisJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgorCisJdGVzdC1kdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorJEJBU0UKK3JlcGxhY2VtZW50czoKK2RlbGV0aW9uczoKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZ5IG9yaWdpbmFsIGZpbGUsIGJhc2UgaW5kZXggdW50b3VjaGVkJyAnCisJZWNobyBtb2RpZmllZCA+b25lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBvbmUgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+bHMtZmlsZXMuYWN0dWFsICYmCisJY2F0ID5scy1maWxlcy5leHBlY3QgPDxFT0YgJiYKKzEwMDY0NCAyZTA5OTYwMDBiN2U5MDE5ZWFiY2FkMjkzOTFiZjBmNWM3NzAyZjBiIDAJb25lCitFT0YKKwl0ZXN0X2NtcCBscy1maWxlcy5leHBlY3QgbHMtZmlsZXMuYWN0dWFsICYmCisKKwl0ZXN0LWR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IHNlZCAiL15vd24vZCIgPmFjdHVhbCAmJgorCXFfdG9fdGFiID5leHBlY3QgPDxFT0YgJiYKKyRCQVNFCisxMDA2NDQgMmUwOTk2MDAwYjdlOTAxOWVhYmNhZDI5MzkxYmYwZjVjNzcwMmYwYiAwUQorcmVwbGFjZW1lbnRzOiAwCitkZWxldGlvbnM6CitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhbm90aGVyIGZpbGUsIHdoaWNoIHN0YXlzIGluZGV4JyAnCisJOiA+dHdvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0d28gJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+bHMtZmlsZXMuYWN0dWFsICYmCisJY2F0ID5scy1maWxlcy5leHBlY3QgPDxFT0YgJiYKKzEwMDY0NCAyZTA5OTYwMDBiN2U5MDE5ZWFiY2FkMjkzOTFiZjBmNWM3NzAyZjBiIDAJb25lCisxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCXR3bworRU9GCisJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgorCisJdGVzdC1kdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKKwlxX3RvX3RhYiA+ZXhwZWN0IDw8RU9GICYmCiskQkFTRQorMTAwNjQ0IDJlMDk5NjAwMGI3ZTkwMTllYWJjYWQyOTM5MWJmMGY1Yzc3MDJmMGIgMFEKKzEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJdHdvCityZXBsYWNlbWVudHM6IDAKK2RlbGV0aW9uczoKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGZpbGUgbm90IGluIGJhc2UgaW5kZXgnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIHR3byAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID5scy1maWxlcy5hY3R1YWwgJiYKKwljYXQgPmxzLWZpbGVzLmV4cGVjdCA8PEVPRiAmJgorMTAwNjQ0IDJlMDk5NjAwMGI3ZTkwMTllYWJjYWQyOTM5MWJmMGY1Yzc3MDJmMGIgMAlvbmUKK0VPRgorCXRlc3RfY21wIGxzLWZpbGVzLmV4cGVjdCBscy1maWxlcy5hY3R1YWwgJiYKKworCXRlc3QtZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgc2VkICIvXm93bi9kIiA+YWN0dWFsICYmCisJcV90b190YWIgPmV4cGVjdCA8PEVPRiAmJgorJEJBU0UKKzEwMDY0NCAyZTA5OTYwMDBiN2U5MDE5ZWFiY2FkMjkzOTFiZjBmNWM3NzAyZjBiIDBRCityZXBsYWNlbWVudHM6IDAKK2RlbGV0aW9uczoKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIGZpbGUgaW4gYmFzZSBpbmRleCcgJworCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgb25lICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmxzLWZpbGVzLmFjdHVhbCAmJgorCWNhdCA+bHMtZmlsZXMuZXhwZWN0IDw8RU9GICYmCitFT0YKKwl0ZXN0X2NtcCBscy1maWxlcy5leHBlY3QgbHMtZmlsZXMuYWN0dWFsICYmCisKKwl0ZXN0LWR1bXAtc3BsaXQtaW5kZXggLmdpdC9pbmRleCB8IHNlZCAiL15vd24vZCIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8RU9GICYmCiskQkFTRQorcmVwbGFjZW1lbnRzOgorZGVsZXRpb25zOiAwCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBvcmlnaW5hbCBmaWxlIGJhY2snICcKKwk6ID5vbmUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlID5scy1maWxlcy5hY3R1YWwgJiYKKwljYXQgPmxzLWZpbGVzLmV4cGVjdCA8PEVPRiAmJgorMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAlvbmUKK0VPRgorCXRlc3RfY21wIGxzLWZpbGVzLmV4cGVjdCBscy1maWxlcy5hY3R1YWwgJiYKKworCXRlc3QtZHVtcC1zcGxpdC1pbmRleCAuZ2l0L2luZGV4IHwgc2VkICIvXm93bi9kIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKKyRCQVNFCisxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCW9uZQorcmVwbGFjZW1lbnRzOgorZGVsZXRpb25zOiAwCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBuZXcgZmlsZScgJworCTogPnR3byAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgdHdvICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8RU9GICYmCisxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCW9uZQorMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMAl0d28KK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5pZnkgaW5kZXgsIHR3byBmaWxlcyByZW1haW4nICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tc3BsaXQtaW5kZXggJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSA+bHMtZmlsZXMuYWN0dWFsICYmCisJY2F0ID5scy1maWxlcy5leHBlY3QgPDxFT0YgJiYKKzEwMDY0NCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxIDAJb25lCisxMDA2NDQgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MSAwCXR3bworRU9GCisJdGVzdF9jbXAgbHMtZmlsZXMuZXhwZWN0IGxzLWZpbGVzLmFjdHVhbCAmJgorCisJdGVzdC1kdW1wLXNwbGl0LWluZGV4IC5naXQvaW5kZXggfCBzZWQgIi9eb3duL2QiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorbm90IGEgc3BsaXQgaW5kZXgKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDAwLWNoZWNrb3V0LWNhY2hlLWNsYXNoLnNoIGIvdC90MjAwMC1jaGVja291dC1jYWNoZS1jbGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZTNlZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwMC1jaGVja291dC1jYWNoZS1jbGFzaC5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dC1pbmRleCB0ZXN0LgorCitUaGlzIHRlc3QgcmVnaXN0ZXJzIHRoZSBmb2xsb3dpbmcgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUgaW4gdGhlCitjYWNoZToKKworICAgIHBhdGgwICAgICAgIC0gYSBmaWxlCisgICAgcGF0aDEvZmlsZTEgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKworQW5kIHRoZW4gdHJpZXMgdG8gY2hlY2tvdXQgaW4gYSB3b3JrIHRyZWUgdGhhdCBoYXMgdGhlIGZvbGxvd2luZzoKKworICAgIHBhdGgwL2ZpbGUwIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDEgICAgICAgLSBhIGZpbGUKKworVGhlIGdpdCBjaGVja291dC1pbmRleCBjb21tYW5kIHNob3VsZCBmYWlsIHdoZW4gYXR0ZW1wdGluZyB0byBjaGVja291dAorcGF0aDAsIGZpbmRpbmcgaXQgaXMgb2NjdXBpZWQgYnkgYSBkaXJlY3RvcnksIGFuZCBwYXRoMS9maWxlMSwgZmluZGluZworcGF0aDEgaXMgb2NjdXBpZWQgYnkgYSBub24tZGlyZWN0b3J5LiAgV2l0aCAiLWYiIGZsYWcsIGl0IHNob3VsZCByZW1vdmUKK3RoZSBjb25mbGljdGluZyBwYXRocyBhbmQgc3VjY2VlZC4KKycKKy4gLi90ZXN0LWxpYi5zaAorCitkYXRlID5wYXRoMAorbWtkaXIgcGF0aDEKK2RhdGUgPnBhdGgxL2ZpbGUxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHZhcmlvdXMgcGF0aHMuJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAgcGF0aDEvZmlsZTEnCisKK3JtIC1mciBwYXRoMCBwYXRoMQorbWtkaXIgcGF0aDAKK2RhdGUgPnBhdGgwL2ZpbGUwCitkYXRlID5wYXRoMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGNoZWNrb3V0LWluZGV4IHdpdGhvdXQgLWYgc2hvdWxkIGZhaWwgb24gY29uZmxpY3Rpbmcgd29yayB0cmVlLicgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQtaW5kZXggLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgY2hlY2tvdXQtaW5kZXggd2l0aCAtZiBzaG91bGQgc3VjY2VlZC4nIFwKKyAgICAnZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGNoZWNrb3V0LWluZGV4IGNvbmZsaWN0aW5nIHBhdGhzLicgXAorICAgICd0ZXN0IC1mIHBhdGgwICYmIHRlc3QgLWQgcGF0aDEgJiYgdGVzdCAtZiBwYXRoMS9maWxlMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnY2hlY2tvdXQtaW5kZXggLWYgdHdpY2Ugd2l0aCAtLXByZWZpeCcgJworCW1rZGlyIC1wIHRhci9nZXQgJiYKKwlsbiAtcyB0YXIvZ2V0IHRoZXJlICYmCisJZWNobyBmaXJzdCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtYSAtZiAtLXByZWZpeD10aGVyZS8gJiYKKwllY2hvIHNlY29uZCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtYSAtZiAtLXByZWZpeD10aGVyZS8KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDAxLWNoZWNrb3V0LWNhY2hlLWNsYXNoLnNoIGIvdC90MjAwMS1jaGVja291dC1jYWNoZS1jbGFzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZmM4ZTYzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwMS1jaGVja291dC1jYWNoZS1jbGFzaC5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dC1pbmRleCB0ZXN0LgorCitUaGlzIHRlc3QgcmVnaXN0ZXJzIHRoZSBmb2xsb3dpbmcgZmlsZXN5c3RlbSBzdHJ1Y3R1cmUgaW4gdGhlIGNhY2hlOgorCisgICAgcGF0aDAvZmlsZTAJLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMS9maWxlMSAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorCithbmQgYXR0ZW1wdHMgdG8gY2hlY2sgaXQgb3V0IHdoZW4gdGhlIHdvcmsgdHJlZSBoYXM6CisKKyAgICBwYXRoMC9maWxlMCAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgxICAgICAgIC0gYSBzeW1saW5rIHBvaW50aW5nIGF0ICJwYXRoMCIKKworQ2hlY2tvdXQgY2FjaGUgc2hvdWxkIGZhaWwgdG8gZXh0cmFjdCBwYXRoMS9maWxlMSBiZWNhdXNlIHRoZSBsZWFkaW5nCitwYXRoIHBhdGgxIGlzIG9jY3VwaWVkIGJ5IGEgbm9uLWRpcmVjdG9yeS4gIFdpdGggIi1mIiBpdCBzaG91bGQgcmVtb3ZlCit0aGUgc3ltbGluayBwYXRoMSBhbmQgY3JlYXRlIGRpcmVjdG9yeSBwYXRoMSBhbmQgZmlsZSBwYXRoMS9maWxlMS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCitzaG93X2ZpbGVzKCkgeworCSMgc2hvdyBmaWxlc3lzdGVtIGZpbGVzLCBqdXN0IFstZGxdIGZvciB0eXBlIGFuZCBuYW1lCisJZmluZCBwYXRoPyAtbHMgfAorCXNlZCAtZSAncy9eWzAtOV0qICogWzAtOV0qICogXChbLWJjZGxdXClbXiBdKiAqWzAtOV0qICpbXiBdKiAqW14gXSogKlswLTldKiBbQS1aXVthLXpdW2Etel0gWzAtOV1bMC05XSBbXiBdKiAvZnM6IFwxIC8nCisJIyB3aGF0J3MgaW4gdGhlIGNhY2hlLCBqdXN0IG1vZGUgYW5kIG5hbWUKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSB8CisJc2VkIC1lICdzL15cKFswLTldKlwpIFswLTlhLWZdKiBbMC0zXSAvY2E6IFwxIC8nCisJIyB3aGF0J3MgaW4gdGhlIHRyZWUsIGp1c3QgbW9kZSBhbmQgbmFtZS4KKwlnaXQgbHMtdHJlZSAtciAiJDEiIHwKKwlzZWQgLWUgJ3MvXlwoWzAtOV0qXCkJW14gXSoJWzAtOWEtZl0qCS90cjogXDEgLycKK30KKworbWtkaXIgcGF0aDAKK2RhdGUgPnBhdGgwL2ZpbGUwCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMC9maWxlMCcgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwL2ZpbGUwJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3dyaXRpbmcgdHJlZSBvdXQgd2l0aCBnaXQgd3JpdGUtdHJlZScgXAorICAgICd0cmVlMT0kKGdpdCB3cml0ZS10cmVlKScKK3Rlc3RfZGVidWcgJ3Nob3dfZmlsZXMgJHRyZWUxJworCitta2RpciBwYXRoMQorZGF0ZSA+cGF0aDEvZmlsZTEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgxL2ZpbGUxJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDEvZmlsZTEnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnd3JpdGluZyB0cmVlIG91dCB3aXRoIGdpdCB3cml0ZS10cmVlJyBcCisgICAgJ3RyZWUyPSQoZ2l0IHdyaXRlLXRyZWUpJwordGVzdF9kZWJ1ZyAnc2hvd19maWxlcyAkdHJlZTInCisKK3JtIC1mciBwYXRoMQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3JlYWQgcHJldmlvdXNseSB3cml0dGVuIHRyZWUgYW5kIGNoZWNrb3V0LicgXAorICAgICdnaXQgcmVhZC10cmVlIC1tICR0cmVlMSAmJiBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLWEnCit0ZXN0X2RlYnVnICdzaG93X2ZpbGVzICR0cmVlMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2FkZCBhIHN5bWxpbmsnIFwKKyAgICAndGVzdF9sbl9zX2FkZCBwYXRoMCBwYXRoMScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd3cml0aW5nIHRyZWUgb3V0IHdpdGggZ2l0IHdyaXRlLXRyZWUnIFwKKyAgICAndHJlZTM9JChnaXQgd3JpdGUtdHJlZSknCit0ZXN0X2RlYnVnICdzaG93X2ZpbGVzICR0cmVlMycKKworIyBNb3J0ZW4gc2F5cyAiR290IHRoYXQ/IiBoZXJlLgorIyBUZXN0IGJlZ2lucy4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3JlYWQgcHJldmlvdXNseSB3cml0dGVuIHRyZWUgYW5kIGNoZWNrb3V0LicgXAorICAgICdnaXQgcmVhZC10cmVlICR0cmVlMiAmJiBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLWEnCit0ZXN0X2RlYnVnICdzaG93X2ZpbGVzICR0cmVlMicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIG91dCBjb25mbGljdGluZyBwYXRoIHdpdGggLWYnIFwKKyAgICAndGVzdCAhIC1oIHBhdGgwICYmIHRlc3QgLWQgcGF0aDAgJiYKKyAgICAgdGVzdCAhIC1oIHBhdGgxICYmIHRlc3QgLWQgcGF0aDEgJiYKKyAgICAgdGVzdCAhIC1oIHBhdGgwL2ZpbGUwICYmIHRlc3QgLWYgcGF0aDAvZmlsZTAgJiYKKyAgICAgdGVzdCAhIC1oIHBhdGgxL2ZpbGUxICYmIHRlc3QgLWYgcGF0aDEvZmlsZTEnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwMi1jaGVja291dC1jYWNoZS11LnNoIGIvdC90MjAwMi1jaGVja291dC1jYWNoZS11LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcwMzYxYzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDAyLWNoZWNrb3V0LWNhY2hlLXUuc2gKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlY2tvdXQtaW5kZXggLXUgdGVzdC4KKworV2l0aCAtdSBmbGFnLCBnaXQgY2hlY2tvdXQtaW5kZXggaW50ZXJuYWxseSBydW5zIHRoZSBlcXVpdmFsZW50IG9mCitnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCBvbiB0aGUgY2hlY2tlZCBvdXQgZW50cnkuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisncHJlcGFyYXRpb24nICcKK2VjaG8gZnJvdHogPnBhdGgwICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwICYmCit0PSQoZ2l0IHdyaXRlLXRyZWUpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyd3aXRob3V0IC11LCBnaXQgY2hlY2tvdXQtaW5kZXggc211ZGdlcyBzdGF0IGluZm9ybWF0aW9uLicgJworcm0gLWYgcGF0aDAgJiYKK2dpdCByZWFkLXRyZWUgJHQgJiYKK2dpdCBjaGVja291dC1pbmRleCAtZiAtYSAmJgordGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ3dpdGggLXUsIGdpdCBjaGVja291dC1pbmRleCBwaWNrcyB1cCBzdGF0IGluZm9ybWF0aW9uIGZyb20gbmV3IGZpbGVzLicgJworcm0gLWYgcGF0aDAgJiYKK2dpdCByZWFkLXRyZWUgJHQgJiYKK2dpdCBjaGVja291dC1pbmRleCAtdSAtZiAtYSAmJgorZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwMy1jaGVja291dC1jYWNoZS1ta2Rpci5zaCBiL3QvdDIwMDMtY2hlY2tvdXQtY2FjaGUtbWtkaXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmYxNjNjZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMDMtY2hlY2tvdXQtY2FjaGUtbWtkaXIuc2gKQEAgLTAsMCArMSwxMTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4IHRlc3QuCisKK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgLS1wcmVmaXggb3B0aW9uIHdvcmtzIGFzIGFkdmVydGlzZWQsIGFuZAorYWxzbyB2ZXJpZmllcyB0aGF0IHN1Y2ggbGVhZGluZyBwYXRoIG1heSBjb250YWluIHN5bWxpbmtzLCB1bmxpa2UKK3RoZSBHSVQgY29udHJvbGxlZCBwYXRocy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgcGF0aDEgJiYKKwllY2hvIGZyb3R6ID5wYXRoMCAmJgorCWVjaG8gcmV6cm92ID5wYXRoMS9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAgcGF0aDEvZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnaGF2ZSBzeW1saW5rIGluIHBsYWNlIHdoZXJlIGRpciBpcyBleHBlY3RlZC4nICcKKwlybSAtZnIgcGF0aDAgcGF0aDEgJiYKKwlta2RpciBwYXRoMiAmJgorCWxuIC1zIHBhdGgyIHBhdGgxICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hICYmCisJdGVzdCAhIC1oIHBhdGgxICYmIHRlc3QgLWQgcGF0aDEgJiYKKwl0ZXN0IC1mIHBhdGgxL2ZpbGUxICYmIHRlc3QgISAtZiBwYXRoMi9maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgLS1wcmVmaXg9cGF0aDIvJyAnCisJcm0gLWZyIHBhdGgwIHBhdGgxIHBhdGgyICYmCisJbWtkaXIgcGF0aDIgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9cGF0aDIvIC1mIC1hICYmCisJdGVzdCAtZiBwYXRoMi9wYXRoMCAmJgorCXRlc3QgLWYgcGF0aDIvcGF0aDEvZmlsZTEgJiYKKwl0ZXN0ICEgLWYgcGF0aDAgJiYKKwl0ZXN0ICEgLWYgcGF0aDEvZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIC0tcHJlZml4PXRtcC0nICcKKwlybSAtZnIgcGF0aDAgcGF0aDEgcGF0aDIgdG1wKiAmJgorCWdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD10bXAtIC1mIC1hICYmCisJdGVzdCAtZiB0bXAtcGF0aDAgJiYKKwl0ZXN0IC1mIHRtcC1wYXRoMS9maWxlMSAmJgorCXRlc3QgISAtZiBwYXRoMCAmJgorCXRlc3QgISAtZiBwYXRoMS9maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgLS1wcmVmaXg9dG1wLSBidXQgd2l0aCBhIGNvbmZsaWN0aW5nIGZpbGUgYW5kIGRpcicgJworCXJtIC1mciBwYXRoMCBwYXRoMSBwYXRoMiB0bXAqICYmCisJZWNobyBuaXRmb2wgPnRtcC1wYXRoMSAmJgorCW1rZGlyIHRtcC1wYXRoMCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD10bXAtIC1mIC1hICYmCisJdGVzdCAtZiB0bXAtcGF0aDAgJiYKKwl0ZXN0IC1mIHRtcC1wYXRoMS9maWxlMSAmJgorCXRlc3QgISAtZiBwYXRoMCAmJgorCXRlc3QgISAtZiBwYXRoMS9maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd1c2UgLS1wcmVmaXg9dG1wL29yYXJ5LyB3aGVyZSB0bXAgaXMgYSBzeW1saW5rJyAnCisJcm0gLWZyIHBhdGgwIHBhdGgxIHBhdGgyIHRtcCogJiYKKwlta2RpciB0bXAxIHRtcDEvb3JhcnkgJiYKKwlsbiAtcyB0bXAxIHRtcCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD10bXAvb3JhcnkvIC1mIC1hICYmCisJdGVzdCAtZCB0bXAxL29yYXJ5ICYmCisJdGVzdCAtZiB0bXAxL29yYXJ5L3BhdGgwICYmCisJdGVzdCAtZiB0bXAxL29yYXJ5L3BhdGgxL2ZpbGUxICYmCisJdGVzdCAtaCB0bXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndXNlIC0tcHJlZml4PXRtcC9vcmFyeS0gd2hlcmUgdG1wIGlzIGEgc3ltbGluaycgJworCXJtIC1mciBwYXRoMCBwYXRoMSBwYXRoMiB0bXAqICYmCisJbWtkaXIgdG1wMSAmJgorCWxuIC1zIHRtcDEgdG1wICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC0tcHJlZml4PXRtcC9vcmFyeS0gLWYgLWEgJiYKKwl0ZXN0IC1mIHRtcDEvb3JhcnktcGF0aDAgJiYKKwl0ZXN0IC1mIHRtcDEvb3JhcnktcGF0aDEvZmlsZTEgJiYKKwl0ZXN0IC1oIHRtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd1c2UgLS1wcmVmaXg9dG1wLSB3aGVyZSB0bXAtcGF0aDEgaXMgYSBzeW1saW5rJyAnCisJcm0gLWZyIHBhdGgwIHBhdGgxIHBhdGgyIHRtcCogJiYKKwlta2RpciB0bXAxICYmCisJbG4gLXMgdG1wMSB0bXAtcGF0aDEgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9dG1wLSAtZiAtYSAmJgorCXRlc3QgLWYgdG1wLXBhdGgwICYmCisJdGVzdCAhIC1oIHRtcC1wYXRoMSAmJgorCXRlc3QgLWQgdG1wLXBhdGgxICYmCisJdGVzdCAtZiB0bXAtcGF0aDEvZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZmlsdGVyIGZyb20gd29ya2luZyB0cmVlIC5naXRhdHRyaWJ1dGVzIHdpdGggLS1wcmVmaXgnICcKKwlybSAtZnIgcGF0aDAgcGF0aDEgcGF0aDIgdG1wKiAmJgorCW1rZGlyIHBhdGgxICYmCisJbWtkaXIgdG1wICYmCisJZ2l0IGNvbmZpZyBmaWx0ZXIucmVwbGFjZS1hbGwuc211ZGdlICJzZWQgLWUgcy8uLywvZyIgJiYKKwlnaXQgY29uZmlnIGZpbHRlci5yZXBsYWNlLWFsbC5jbGVhbiBjYXQgJiYKKwlnaXQgY29uZmlnIGZpbHRlci5yZXBsYWNlLWFsbC5yZXF1aXJlZCB0cnVlICYmCisJZWNobyAiZmlsZTEgZmlsdGVyPXJlcGxhY2UtYWxsIiA+cGF0aDEvLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1wcmVmaXg9dG1wLyAtZiAtYSAmJgorCWVjaG8gZnJvdHogPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgdG1wL3BhdGgwICYmCisJZWNobyAsLCwsLCwgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgdG1wL3BhdGgxL2ZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IENSTEYgZmlsdGVyIGZyb20gd29ya2luZyB0cmVlIC5naXRhdHRyaWJ1dGVzIHdpdGggLS1wcmVmaXgnICcKKwlybSAtZnIgcGF0aDAgcGF0aDEgcGF0aDIgdG1wKiAmJgorCW1rZGlyIHBhdGgxICYmCisJbWtkaXIgdG1wICYmCisJZWNobyAiZmlsZTEgZW9sPWNybGYiID5wYXRoMS8uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjaGVja291dC1pbmRleCAtLXByZWZpeD10bXAvIC1mIC1hICYmCisJZWNobyByZXpyb3ZRID5leHBlY3RlZCAmJgorCXRyIFxcMDE1IFEgPHRtcC9wYXRoMS9maWxlMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwNC1jaGVja291dC1jYWNoZS10ZW1wLnNoIGIvdC90MjAwNC1jaGVja291dC1jYWNoZS10ZW1wLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExMmFmZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDA0LWNoZWNrb3V0LWNhY2hlLXRlbXAuc2gKQEAgLTAsMCArMSwyMjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgU2hhd24gUGVhcmNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dC1pbmRleCAtLXRlbXAgdGVzdC4KKworV2l0aCAtLXRlbXAgZmxhZywgZ2l0IGNoZWNrb3V0LWluZGV4IHdyaXRlcyB0byB0ZW1wb3JhcnkgbWVyZ2UgZmlsZXMKK3JhdGhlciB0aGFuIHRoZSB0cmFja2VkIHBhdGguJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBhc3ViZGlyICYmCisJZWNobyB0cmVlMXBhdGgwID5wYXRoMCAmJgorCWVjaG8gdHJlZTFwYXRoMSA+cGF0aDEgJiYKKwllY2hvIHRyZWUxcGF0aDMgPnBhdGgzICYmCisJZWNobyB0cmVlMXBhdGg0ID5wYXRoNCAmJgorCWVjaG8gdHJlZTFhc3ViZGlyL3BhdGg1ID5hc3ViZGlyL3BhdGg1ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMCBwYXRoMSBwYXRoMyBwYXRoNCBhc3ViZGlyL3BhdGg1ICYmCisJdDE9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlybSAtZiBwYXRoKiAubWVyZ2VfKiBhY3R1YWwgLmdpdC9pbmRleCAmJgorCWVjaG8gdHJlZTJwYXRoMCA+cGF0aDAgJiYKKwllY2hvIHRyZWUycGF0aDEgPnBhdGgxICYmCisJZWNobyB0cmVlMnBhdGgyID5wYXRoMiAmJgorCWVjaG8gdHJlZTJwYXRoNCA+cGF0aDQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwIHBhdGgxIHBhdGgyIHBhdGg0ICYmCisJdDI9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlybSAtZiBwYXRoKiAubWVyZ2VfKiBhY3R1YWwgLmdpdC9pbmRleCAmJgorCWVjaG8gdHJlZTJwYXRoMCA+cGF0aDAgJiYKKwllY2hvIHRyZWUzcGF0aDEgPnBhdGgxICYmCisJZWNobyB0cmVlM3BhdGgyID5wYXRoMiAmJgorCWVjaG8gdHJlZTNwYXRoMyA+cGF0aDMgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwIHBhdGgxIHBhdGgyIHBhdGgzICYmCisJdDM9JChnaXQgd3JpdGUtdHJlZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb25lIHN0YWdlIDAgdG8gdGVtcG9yYXJ5IGZpbGUnICcKKwlybSAtZiBwYXRoKiAubWVyZ2VfKiBhY3R1YWwgLmdpdC9pbmRleCAmJgorCWdpdCByZWFkLXRyZWUgJHQxICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC0tdGVtcCAtLSBwYXRoMSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwl0ZXN0ICQoY3V0ICItZAkiIC1mMiBhY3R1YWwpID0gcGF0aDEgJiYKKwlwPSQoY3V0ICItZAkiIC1mMSBhY3R1YWwpICYmCisJdGVzdCAtZiAkcCAmJgorCXRlc3QgJChjYXQgJHApID0gdHJlZTFwYXRoMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhbGwgc3RhZ2UgMCB0byB0ZW1wb3JhcnkgZmlsZXMnICcKKwlybSAtZiBwYXRoKiAubWVyZ2VfKiBhY3R1YWwgLmdpdC9pbmRleCAmJgorCWdpdCByZWFkLXRyZWUgJHQxICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC1hIC0tdGVtcCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSBhY3R1YWwgJiYKKwlmb3IgZiBpbiBwYXRoMCBwYXRoMSBwYXRoMyBwYXRoNCBhc3ViZGlyL3BhdGg1CisJZG8KKwkJdGVzdCAkKGdyZXAgJGYgYWN0dWFsIHwgY3V0ICItZAkiIC1mMikgPSAkZiAmJgorCQlwPSQoZ3JlcCAkZiBhY3R1YWwgfCBjdXQgIi1kCSIgLWYxKSAmJgorCQl0ZXN0IC1mICRwICYmCisJCXRlc3QgJChjYXQgJHApID0gdHJlZTEkZgorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgMy13YXkgbWVyZ2UnICcKKwlybSAtZiBwYXRoKiAubWVyZ2VfKiBhY3R1YWwgLmdpdC9pbmRleCAmJgorCWdpdCByZWFkLXRyZWUgLW0gJHQxICR0MiAkdDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb25lIHN0YWdlIDIgdG8gdGVtcG9yYXJ5IGZpbGUnICcKKwlybSAtZiBwYXRoKiAubWVyZ2VfKiBhY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1zdGFnZT0yIC0tdGVtcCAtLSBwYXRoMSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwl0ZXN0ICQoY3V0ICItZAkiIC1mMiBhY3R1YWwpID0gcGF0aDEgJiYKKwlwPSQoY3V0ICItZAkiIC1mMSBhY3R1YWwpICYmCisJdGVzdCAtZiAkcCAmJgorCXRlc3QgJChjYXQgJHApID0gdHJlZTJwYXRoMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhbGwgc3RhZ2UgMiB0byB0ZW1wb3JhcnkgZmlsZXMnICcKKwlybSAtZiBwYXRoKiAubWVyZ2VfKiBhY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1hbGwgLS1zdGFnZT0yIC0tdGVtcCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwlmb3IgZiBpbiBwYXRoMSBwYXRoMiBwYXRoNAorCWRvCisJCXRlc3QgJChncmVwICRmIGFjdHVhbCB8IGN1dCAiLWQJIiAtZjIpID0gJGYgJiYKKwkJcD0kKGdyZXAgJGYgYWN0dWFsIHwgY3V0ICItZAkiIC1mMSkgJiYKKwkJdGVzdCAtZiAkcCAmJgorCQl0ZXN0ICQoY2F0ICRwKSA9IHRyZWUyJGYKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGFsbCBzdGFnZXMvb25lIGZpbGUgdG8gbm90aGluZycgJworCXJtIC1mIHBhdGgqIC5tZXJnZV8qIGFjdHVhbCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtLXN0YWdlPWFsbCAtLXRlbXAgLS0gcGF0aDAgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGFsbCBzdGFnZXMvb25lIGZpbGUgdG8gdGVtcG9yYXJ5IGZpbGVzJyAnCisJcm0gLWYgcGF0aCogLm1lcmdlXyogYWN0dWFsICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC0tc3RhZ2U9YWxsIC0tdGVtcCAtLSBwYXRoMSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwl0ZXN0ICQoY3V0ICItZAkiIC1mMiBhY3R1YWwpID0gcGF0aDEgJiYKKwljdXQgIi1kCSIgLWYxIGFjdHVhbCB8IChyZWFkIHMxIHMyIHMzICYmCisJdGVzdCAtZiAkczEgJiYKKwl0ZXN0IC1mICRzMiAmJgorCXRlc3QgLWYgJHMzICYmCisJdGVzdCAkKGNhdCAkczEpID0gdHJlZTFwYXRoMSAmJgorCXRlc3QgJChjYXQgJHMyKSA9IHRyZWUycGF0aDEgJiYKKwl0ZXN0ICQoY2F0ICRzMykgPSB0cmVlM3BhdGgxKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBzb21lIHN0YWdlcy9vbmUgZmlsZSB0byB0ZW1wb3JhcnkgZmlsZXMnICcKKwlybSAtZiBwYXRoKiAubWVyZ2VfKiBhY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLS1zdGFnZT1hbGwgLS10ZW1wIC0tIHBhdGgyID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgorCXRlc3QgJChjdXQgIi1kCSIgLWYyIGFjdHVhbCkgPSBwYXRoMiAmJgorCWN1dCAiLWQJIiAtZjEgYWN0dWFsIHwgKHJlYWQgczEgczIgczMgJiYKKwl0ZXN0ICRzMSA9IC4gJiYKKwl0ZXN0IC1mICRzMiAmJgorCXRlc3QgLWYgJHMzICYmCisJdGVzdCAkKGNhdCAkczIpID0gdHJlZTJwYXRoMiAmJgorCXRlc3QgJChjYXQgJHMzKSA9IHRyZWUzcGF0aDIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGFsbCBzdGFnZXMvYWxsIGZpbGVzIHRvIHRlbXBvcmFyeSBmaWxlcycgJworCXJtIC1mIHBhdGgqIC5tZXJnZV8qIGFjdHVhbCAmJgorCWdpdCBjaGVja291dC1pbmRleCAtYSAtLXN0YWdlPWFsbCAtLXRlbXAgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tIHBhdGgwOiBubyBlbnRyeScgJworCXRlc3QgeCQoZ3JlcCBwYXRoMCBhY3R1YWwgfCBjdXQgIi1kCSIgLWYyKSA9IHgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS0gcGF0aDE6IGFsbCAzIHN0YWdlcycgJworCXRlc3QgJChncmVwIHBhdGgxIGFjdHVhbCB8IGN1dCAiLWQJIiAtZjIpID0gcGF0aDEgJiYKKwlncmVwIHBhdGgxIGFjdHVhbCB8IGN1dCAiLWQJIiAtZjEgfCAocmVhZCBzMSBzMiBzMyAmJgorCXRlc3QgLWYgJHMxICYmCisJdGVzdCAtZiAkczIgJiYKKwl0ZXN0IC1mICRzMyAmJgorCXRlc3QgJChjYXQgJHMxKSA9IHRyZWUxcGF0aDEgJiYKKwl0ZXN0ICQoY2F0ICRzMikgPSB0cmVlMnBhdGgxICYmCisJdGVzdCAkKGNhdCAkczMpID0gdHJlZTNwYXRoMSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS0gcGF0aDI6IG5vIHN0YWdlIDEsIGhhdmUgc3RhZ2UgMiBhbmQgMycgJworCXRlc3QgJChncmVwIHBhdGgyIGFjdHVhbCB8IGN1dCAiLWQJIiAtZjIpID0gcGF0aDIgJiYKKwlncmVwIHBhdGgyIGFjdHVhbCB8IGN1dCAiLWQJIiAtZjEgfCAocmVhZCBzMSBzMiBzMyAmJgorCXRlc3QgJHMxID0gLiAmJgorCXRlc3QgLWYgJHMyICYmCisJdGVzdCAtZiAkczMgJiYKKwl0ZXN0ICQoY2F0ICRzMikgPSB0cmVlMnBhdGgyICYmCisJdGVzdCAkKGNhdCAkczMpID0gdHJlZTNwYXRoMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS0gcGF0aDM6IG5vIHN0YWdlIDIsIGhhdmUgc3RhZ2UgMSBhbmQgMycgJworCXRlc3QgJChncmVwIHBhdGgzIGFjdHVhbCB8IGN1dCAiLWQJIiAtZjIpID0gcGF0aDMgJiYKKwlncmVwIHBhdGgzIGFjdHVhbCB8IGN1dCAiLWQJIiAtZjEgfCAocmVhZCBzMSBzMiBzMyAmJgorCXRlc3QgLWYgJHMxICYmCisJdGVzdCAkczIgPSAuICYmCisJdGVzdCAtZiAkczMgJiYKKwl0ZXN0ICQoY2F0ICRzMSkgPSB0cmVlMXBhdGgzICYmCisJdGVzdCAkKGNhdCAkczMpID0gdHJlZTNwYXRoMykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS0gcGF0aDQ6IG5vIHN0YWdlIDMsIGhhdmUgc3RhZ2UgMSBhbmQgMycgJworCXRlc3QgJChncmVwIHBhdGg0IGFjdHVhbCB8IGN1dCAiLWQJIiAtZjIpID0gcGF0aDQgJiYKKwlncmVwIHBhdGg0IGFjdHVhbCB8IGN1dCAiLWQJIiAtZjEgfCAocmVhZCBzMSBzMiBzMyAmJgorCXRlc3QgLWYgJHMxICYmCisJdGVzdCAtZiAkczIgJiYKKwl0ZXN0ICRzMyA9IC4gJiYKKwl0ZXN0ICQoY2F0ICRzMSkgPSB0cmVlMXBhdGg0ICYmCisJdGVzdCAkKGNhdCAkczIpID0gdHJlZTJwYXRoNCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS0gYXN1YmRpci9wYXRoNTogbm8gc3RhZ2UgMiBhbmQgMyBoYXZlIHN0YWdlIDEnICcKKwl0ZXN0ICQoZ3JlcCBhc3ViZGlyL3BhdGg1IGFjdHVhbCB8IGN1dCAiLWQJIiAtZjIpID0gYXN1YmRpci9wYXRoNSAmJgorCWdyZXAgYXN1YmRpci9wYXRoNSBhY3R1YWwgfCBjdXQgIi1kCSIgLWYxIHwgKHJlYWQgczEgczIgczMgJiYKKwl0ZXN0IC1mICRzMSAmJgorCXRlc3QgJHMyID0gLiAmJgorCXRlc3QgJHMzID0gLiAmJgorCXRlc3QgJChjYXQgJHMxKSA9IHRyZWUxYXN1YmRpci9wYXRoNSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS10ZW1wIHdpdGhpbiBzdWJkaXInICcKKwkoCisJCWNkIGFzdWJkaXIgJiYKKwkJZ2l0IGNoZWNrb3V0LWluZGV4IC1hIC0tc3RhZ2U9YWxsID5hY3R1YWwgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwkJdGVzdCAkKGdyZXAgcGF0aDUgYWN0dWFsIHwgY3V0ICItZAkiIC1mMikgPSBwYXRoNSAmJgorCQlncmVwIHBhdGg1IGFjdHVhbCB8IGN1dCAiLWQJIiAtZjEgfCAocmVhZCBzMSBzMiBzMyAmJgorCQl0ZXN0IC1mIC4uLyRzMSAmJgorCQl0ZXN0ICRzMiA9IC4gJiYKKwkJdGVzdCAkczMgPSAuICYmCisJCXRlc3QgJChjYXQgLi4vJHMxKSA9IHRyZWUxYXN1YmRpci9wYXRoNSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tdGVtcCBzeW1saW5rJyAnCisJcm0gLWYgcGF0aCogLm1lcmdlXyogYWN0dWFsIC5naXQvaW5kZXggJiYKKwl0ZXN0X2xuX3NfYWRkIHBhdGg3IHBhdGg2ICYmCisJZ2l0IGNoZWNrb3V0LWluZGV4IC0tdGVtcCAtYSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBhY3R1YWwgJiYKKwl0ZXN0ICQoY3V0ICItZAkiIC1mMiBhY3R1YWwpID0gcGF0aDYgJiYKKwlwPSQoY3V0ICItZAkiIC1mMSBhY3R1YWwpICYmCisJdGVzdCAtZiAkcCAmJgorCXRlc3QgJChjYXQgJHApID0gcGF0aDcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1pdCB3ZWxsLWZvcm1lZCByZWxhdGl2ZSBwYXRoJyAnCisJcm0gLWYgcGF0aCogLm1lcmdlXyogYWN0dWFsIC5naXQvaW5kZXggJiYKKwk+cGF0aDAxMjM0NTY3ODkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwMTIzNDU2Nzg5ICYmCisJKAorCQljZCBhc3ViZGlyICYmCisJCWdpdCBjaGVja291dC1pbmRleCAtLXRlbXAgLS0gLi4vcGF0aDAxMjM0NTY3ODkgPmFjdHVhbCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgorCQl0ZXN0ICQoY3V0ICItZAkiIC1mMiBhY3R1YWwpID0gLi4vcGF0aDAxMjM0NTY3ODkKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwNS1jaGVja291dC1pbmRleC1zeW1saW5rcy5zaCBiL3QvdDIwMDUtY2hlY2tvdXQtaW5kZXgtc3ltbGlua3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWZhNTYxMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMDUtY2hlY2tvdXQtaW5kZXgtc3ltbGlua3Muc2gKQEAgLTAsMCArMSwyOCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBTaXh0CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dC1pbmRleCBvbiBmaWxlc3lzdGVtIHcvbyBzeW1saW5rcyB0ZXN0LgorCitUaGlzIHRlc3RzIHRoYXQgZ2l0IGNoZWNrb3V0LWluZGV4IGNyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rIGFzIGEgcGxhaW4KK2ZpbGUgaWYgY29yZS5zeW1saW5rcyBpcyBmYWxzZS4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydwcmVwYXJhdGlvbicgJworZ2l0IGNvbmZpZyBjb3JlLnN5bWxpbmtzIGZhbHNlICYmCitsPSQocHJpbnRmIGZpbGUgfCBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyAtLXN0ZGluKSAmJgorZWNobyAiMTIwMDAwICRsCXN5bWxpbmsiIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ3RoZSBjaGVja2VkLW91dCBzeW1saW5rIG11c3QgYmUgYSBmaWxlJyAnCitnaXQgY2hlY2tvdXQtaW5kZXggc3ltbGluayAmJgordGVzdCAtZiBzeW1saW5rJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyd0aGUgZmlsZSBtdXN0IGJlIHRoZSBibG9iIHdlIGFkZGVkIGR1cmluZyB0aGUgc2V0dXAnICcKK3Rlc3QgIiQoZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2Igc3ltbGluaykiID0gJGwnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAwNi1jaGVja291dC1pbmRleC1iYXNpYy5zaCBiL3QvdDIwMDYtY2hlY2tvdXQtaW5kZXgtYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTdjYmRmZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMDYtY2hlY2tvdXQtaW5kZXgtYmFzaWMuc2gKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIGNoZWNrb3V0LWluZGV4IHRlc3RzCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dC1pbmRleCAtLWdvYmJsZWRlZ29vaycgJworCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBjaGVja291dC1pbmRleCAtLWdvYmJsZWRlZ29vayAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQtaW5kZXggLWggaW4gYnJva2VuIHJlcG9zaXRvcnknICcKKwlta2RpciBicm9rZW4gJiYKKwkoCisJCWNkIGJyb2tlbiAmJgorCQlnaXQgaW5pdCAmJgorCQk+LmdpdC9pbmRleCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgY2hlY2tvdXQtaW5kZXggLWggPnVzYWdlIDI+JjEKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2UiIGJyb2tlbi91c2FnZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMDctY2hlY2tvdXQtc3ltbGluay5zaCBiL3QvdDIwMDctY2hlY2tvdXQtc3ltbGluay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYzlhYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAwNy1jaGVja291dC1zeW1saW5rLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSnVuaW8gQyBIYW1hbm8KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZWNrb3V0IHRvIHN3aXRjaCBiZXR3ZWVuIGJyYW5jaGVzIHdpdGggc3ltbGluazwtPmRpcicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJbWtkaXIgZnJvdHogJiYKKwllY2hvIGhlbGxvID5mcm90ei9maWxmcmUgJiYKKwlnaXQgYWRkIGZyb3R6L2ZpbGZyZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIm1hc3RlciBoYXMgZmlsZSBmcm90ei9maWxmcmUiICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCWVjaG8gZ29vZGJ5ZSA+bml0Zm9sICYmCisJZ2l0IGFkZCBuaXRmb2wgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJtYXN0ZXIgYWRkcyBmaWxlIG5pdGZvbCIgJiYKKworCWdpdCBjaGVja291dCBzaWRlICYmCisKKwlnaXQgcm0gLS1jYWNoZWQgZnJvdHovZmlsZnJlICYmCisJbXYgZnJvdHogeHl6enkgJiYKKwl0ZXN0X2xuX3NfYWRkIHh5enp5IGZyb3R6ICYmCisJZ2l0IGFkZCB4eXp6eS9maWxmcmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzaWRlIG1vdmVzIGZyb3R6LyB0byB4eXp6eS8gYW5kIGFkZHMgZnJvdHotPnh5enp5LyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggZnJvbSBzeW1saW5rIHRvIGRpcicgJworCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlbW92ZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgJiBzd2l0Y2ggdG8gbWFzdGVyJyAnCisJcm0gLWZyIGZyb3R6IHh5enp5IG5pdGZvbCAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGZyb20gZGlyIHRvIHN5bWxpbmsnICcKKworCWdpdCBjaGVja291dCBzaWRlCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDA4LWNoZWNrb3V0LXN1YmRpci5zaCBiL3QvdDIwMDgtY2hlY2tvdXQtc3ViZGlyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhZGI5NDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDA4LWNoZWNrb3V0LXN1YmRpci5zaApAQCAtMCwwICsxLDgyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IERhdmlkIFN5bW9uZHMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZWNrb3V0IGZyb20gc3ViZGlyZWN0b3JpZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWVjaG8gImJhc2UiID4gZmlsZTAgJiYKKwlnaXQgYWRkIGZpbGUwICYmCisJbWtkaXIgZGlyMSAmJgorCWVjaG8gImhlbGxvIiA+IGRpcjEvZmlsZTEgJiYKKwlnaXQgYWRkIGRpcjEvZmlsZTEgJiYKKwlta2RpciBkaXIyICYmCisJZWNobyAiYm9uam91ciIgPiBkaXIyL2ZpbGUyICYmCisJZ2l0IGFkZCBkaXIyL2ZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicG9wdWxhdGUgdHJlZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgYW5kIHJlc3RvcmUgd2l0aCByZWxhdGl2ZSBwYXRoJyAnCisKKwkoCisJCWNkIGRpcjEgJiYKKwkJcm0gLi4vZmlsZTAgJiYKKwkJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gLi4vZmlsZTAgJiYKKwkJdGVzdCAiYmFzZSIgPSAiJChjYXQgLi4vZmlsZTApIiAmJgorCQlybSAuLi9kaXIyL2ZpbGUyICYmCisJCWdpdCBjaGVja291dCBIRUFEIC0tIC4uL2RpcjIvZmlsZTIgJiYKKwkJdGVzdCAiYm9uam91ciIgPSAiJChjYXQgLi4vZGlyMi9maWxlMikiICYmCisJCXJtIC4uL2ZpbGUwIC4vZmlsZTEgJiYKKwkJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gLi4gJiYKKwkJdGVzdCAiYmFzZSIgPSAiJChjYXQgLi4vZmlsZTApIiAmJgorCQl0ZXN0ICJoZWxsbyIgPSAiJChjYXQgZmlsZTEpIgorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGVtcHR5IHByZWZpeCcgJworCisJcm0gZmlsZTAgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBmaWxlMCAmJgorCXRlc3QgImJhc2UiID0gIiQoY2F0IGZpbGUwKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIHNpbXBsZSBwcmVmaXgnICcKKworCXJtIGRpcjEvZmlsZTEgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBkaXIxICYmCisJdGVzdCAiaGVsbG8iID0gIiQoY2F0IGRpcjEvZmlsZTEpIiAmJgorCXJtIGRpcjEvZmlsZTEgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBkaXIxL2ZpbGUxICYmCisJdGVzdCAiaGVsbG8iID0gIiQoY2F0IGRpcjEvZmlsZTEpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggY29tcGxleCByZWxhdGl2ZSBwYXRoJyAnCisJKAorCQljZCBkaXIxICYmCisJCXJtIGZpbGUxICYmCisJCWdpdCBjaGVja291dCBIRUFEIC0tIC4uL2RpcjEvLi4vZGlyMS9maWxlMSAmJgorCQl0ZXN0ICJoZWxsbyIgPSAiJChjYXQgZmlsZTEpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVsYXRpdmUgcGF0aCBvdXRzaWRlIHRyZWUgc2hvdWxkIGZhaWwnIFwKKwkndGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IEhFQUQgLS0gLi4vLi4vTWFrZWZpbGUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY29ycmVjdCByZWxhdGl2ZSBwYXRoIHRvIGZpbGUgc2hvdWxkIGZhaWwgKDEpJyBcCisJJ3Rlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBIRUFEIC0tIC4uL2ZpbGUwJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNvcnJlY3QgcmVsYXRpdmUgcGF0aCBzaG91bGQgZmFpbCAoMiknIFwKKwknKCBjZCBkaXIxICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBIRUFEIC0tIC4vZmlsZTAgKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb3JyZWN0IHJlbGF0aXZlIHBhdGggc2hvdWxkIGZhaWwgKDMpJyBcCisJJyggY2QgZGlyMSAmJiB0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgSEVBRCAtLSAuLi8uLi9maWxlMCApJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMDktY2hlY2tvdXQtc3RhdGluZm8uc2ggYi90L3QyMDA5LWNoZWNrb3V0LXN0YXRpbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYzYzIxNTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDA5LWNoZWNrb3V0LXN0YXRpbmZvLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVja291dCBzaG91bGQgbGVhdmUgY2xlYW4gc3RhdCBpbmZvJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWVjaG8gaGVsbG8gPndvcmxkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB3b3JsZCAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCWVjaG8gZ29vZGJ5ZSA+d29ybGQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHdvcmxkICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggc3dpdGNoaW5nJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLXJhdykiID0gIiIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tcmF3KSIgPSAiIiAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tcmF3KSIgPSAiIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1yYXcpIiA9ICIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aCBjaGVja291dCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1yYXcpIiA9ICIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIHdvcmxkICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLXJhdykiID0gIiIgJiYKKworCWdpdCBjaGVja291dCBzaWRlIHdvcmxkICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLXJhdykiID0gIiIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgd29ybGQgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmLWZpbGVzIC0tcmF3KSIgPSAiIgorCisnCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3QyMDEwLWNoZWNrb3V0LWFtYmlndW91cy5zaCBiL3QvdDIwMTAtY2hlY2tvdXQtYW1iaWd1b3VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3YmRmOWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDEwLWNoZWNrb3V0LWFtYmlndW91cy5zaApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgYW5kIHBhdGhzcGVjcy9yZWZzcGVjcyBhbWJpZ3VpdGllcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBoZWxsbyA+d29ybGQgJiYKKwllY2hvIGhlbGxvID5hbGwgJiYKKwlnaXQgYWRkIGFsbCB3b3JsZCAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggd29ybGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmZXJlbmNlIG11c3QgYmUgYSB0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0ICQoZ2l0IGhhc2gtb2JqZWN0IC4vYWxsKSAtLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggc3dpdGNoaW5nJyAnCisJdGVzdCAicmVmcy9oZWFkcy9tYXN0ZXIiID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKwlnaXQgY2hlY2tvdXQgd29ybGQgLS0gJiYKKwl0ZXN0ICJyZWZzL2hlYWRzL3dvcmxkIiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdvcmxkIGZyb20gdGhlIGluZGV4JyAnCisJZWNobyBieWUgPiB3b3JsZCAmJgorCWdpdCBjaGVja291dCAtLSB3b3JsZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIGFtYmlndW91cyBjYWxsJyAnCisJZ2l0IGNoZWNrb3V0IGFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyB0aGUgbW9zdCBjb21tb24gY2FzZScgJworCWdpdCBjaGVja291dCB3b3JsZCAmJgorCXRlc3QgInJlZnMvaGVhZHMvd29ybGQiID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYW1iaWd1aXR5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IHdvcmxkIGFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGUgY2hlY2tpbmcgb3V0IGZyb20gYSB0cmVlLWlzaCcgJworCWVjaG8gYnllID4gd29ybGQgJiYKKwlnaXQgY2hlY2tvdXQgd29ybGQgLS0gd29ybGQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FjY3VyYXRlIGVycm9yIG1lc3NhZ2Ugd2l0aCBtb3JlIHRoYW4gb25lIHJlZicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBIRUFEIG1hc3RlciAtLSAyPmFjdHVhbCAmJgorCWdyZXAgMiBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJvbmUgcmVmZXJlbmNlIGV4cGVjdGVkLCAyIGdpdmVuIiBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDExLWNoZWNrb3V0LWludmFsaWQtaGVhZC5zaCBiL3QvdDIwMTEtY2hlY2tvdXQtaW52YWxpZC1oZWFkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMwMGY4YmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDExLWNoZWNrb3V0LWludmFsaWQtaGVhZC5zaApAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgc3dpdGNoaW5nIGF3YXkgZnJvbSBhbiBpbnZhbGlkIGJyYW5jaCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBoZWxsbyA+d29ybGQgJiYKKwlnaXQgYWRkIHdvcmxkICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHNob3VsZCBub3Qgc3RhcnQgYnJhbmNoIGZyb20gYSB0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC1iIG5ld2JyYW5jaCBtYXN0ZXJee3RyZWV9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG1hc3RlciBmcm9tIGludmFsaWQgSEVBRCcgJworCWVjaG8gJF96NDAgPi5naXQvSEVBRCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgLS0KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDEyLWNoZWNrb3V0LWxhc3Quc2ggYi90L3QyMDEyLWNoZWNrb3V0LWxhc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTdiYThjNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTItY2hlY2tvdXQtbGFzdC5zaApAQCAtMCwwICsxLDE1MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IGNhbiBzd2l0Y2ggdG8gbGFzdCBicmFuY2ggYW5kIG1lcmdlIGJhc2UnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gaGVsbG8gPndvcmxkICYmCisJZ2l0IGFkZCB3b3JsZCAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggb3RoZXIgJiYKKwllY2hvICJoZWxsbyBhZ2FpbiIgPj53b3JsZCAmJgorCWdpdCBhZGQgd29ybGQgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgLSIgZG9lcyBub3Qgd29yayBpbml0aWFsbHknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXJzdCBicmFuY2ggc3dpdGNoJyAnCisJZ2l0IGNoZWNrb3V0IG90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCAtIiBzd2l0Y2hlcyBiYWNrJyAnCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9tYXN0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCAtIiBzd2l0Y2hlcyBmb3J0aCcgJworCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvb3RoZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGFjaCBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgLSIgYXR0YWNoZXMgYWdhaW4nICcKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL290aGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgLSIgZGV0YWNoZXMgYWdhaW4nICcKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgInokKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gInokKGdpdCByZXYtcGFyc2Ugb3RoZXIpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3JlIHN3aXRjaGVzJyAnCisJZm9yIGkgaW4gMTYgMTUgMTQgMTMgMTIgMTEgMTAgOSA4IDcgNiA1IDQgMyAyIDEKKwlkbworCQlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoJGkKKwlkb25lCisnCisKK21vcmVfc3dpdGNoZXMgKCkgeworCWZvciBpIGluIDE2IDE1IDE0IDEzIDEyIDExIDEwIDkgOCA3IDYgNSA0IDMgMiAxCisJZG8KKwkJZ2l0IGNoZWNrb3V0IGJyYW5jaCRpCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggdG8gdGhlIGxhc3QnICcKKwltb3JlX3N3aXRjaGVzICYmCisJZ2l0IGNoZWNrb3V0IEB7LTF9ICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvYnJhbmNoMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIHRvIHNlY29uZCBmcm9tIHRoZSBsYXN0JyAnCisJbW9yZV9zd2l0Y2hlcyAmJgorCWdpdCBjaGVja291dCBAey0yfSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL2JyYW5jaDMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byB0aGlyZCBmcm9tIHRoZSBsYXN0JyAnCisJbW9yZV9zd2l0Y2hlcyAmJgorCWdpdCBjaGVja291dCBAey0zfSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL2JyYW5jaDQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byBmb3VydGggZnJvbSB0aGUgbGFzdCcgJworCW1vcmVfc3dpdGNoZXMgJiYKKwlnaXQgY2hlY2tvdXQgQHstNH0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9icmFuY2g1IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2l0Y2ggdG8gdHdlbGZ0aCBmcm9tIHRoZSBsYXN0JyAnCisJbW9yZV9zd2l0Y2hlcyAmJgorCWdpdCBjaGVja291dCBAey0xMn0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9icmFuY2gxMyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYmFzZSB0ZXN0IHNldHVwJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGFub3RoZXIgb3RoZXIgJiYKKwllY2hvICJoZWxsbyBhZ2FpbiIgPj53b3JsZCAmJgorCWdpdCBhZGQgd29ybGQgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIuLi5tYXN0ZXInICcKKwlnaXQgY2hlY2tvdXQgYW5vdGhlciAmJgorCWdpdCBjaGVja291dCBhbm90aGVyLi4ubWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJeKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4ubWFzdGVyJyAnCisJZ2l0IGNoZWNrb3V0IGFub3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgLi4ubWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJeKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzdGVyLi4uJyAnCisJZ2l0IGNoZWNrb3V0IGFub3RoZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyLi4uICYmCisJdGVzdCAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgPSAieiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXJeKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIHdvcmtzIGFmdGVyIGEgcmViYXNlIEEnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInpyZWZzL2hlYWRzL21hc3RlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IC0iIHdvcmtzIGFmdGVyIGEgcmViYXNlIEEgQicgJworCWdpdCBicmFuY2ggbW9vZGxlIG1hc3Rlcn4xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCByZWJhc2UgbWFzdGVyIG1vb2RsZSAmJgorCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvbWFzdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgLSIgd29ya3MgYWZ0ZXIgYSByZWJhc2UgLWkgQScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC1pIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSAienJlZnMvaGVhZHMvbWFzdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgLSIgd29ya3MgYWZ0ZXIgYSByZWJhc2UgLWkgQSBCJyAnCisJZ2l0IGJyYW5jaCBmb29kbGUgbWFzdGVyfjEgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgZm9vZGxlICYmCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9ICJ6cmVmcy9oZWFkcy9tYXN0ZXIiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAxMy1jaGVja291dC1zdWJtb2R1bGUuc2ggYi90L3QyMDEzLWNoZWNrb3V0LXN1Ym1vZHVsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ODQ3Zjc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxMy1jaGVja291dC1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSw3MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IGNhbiBoYW5kbGUgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgc3VibW9kdWxlICYmCisJKGNkIHN1Ym1vZHVsZSAmJgorCSBnaXQgaW5pdCAmJgorCSB0ZXN0X2NvbW1pdCBmaXJzdCkgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc3VwZXJwcm9qZWN0ICYmCisJKGNkIHN1Ym1vZHVsZSAmJgorCSB0ZXN0X2NvbW1pdCBzZWNvbmQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHVwZGF0ZWQuc3VwZXJwcm9qZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCA8c3VibW9kdWxlPiIgdXBkYXRlcyB0aGUgaW5kZXgnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgJiYKKwlnaXQgcmVzZXQgSEVBRF4gc3VibW9kdWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCByZXNldCBzdWJtb2R1bGUgJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCA8c3VibW9kdWxlPiIgdXBkYXRlcyB0aGUgaW5kZXggb25seScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAmJgorCWdpdCBjaGVja291dCBIRUFEXiBzdWJtb2R1bGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgc3VibW9kdWxlICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciY2hlY2tvdXQgPHN1Ym1vZHVsZT4iIGhvbm9ycyBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMnICcKKwlnaXQgY29uZmlnIGRpZmYuaWdub3JlU3VibW9kdWxlcyBkaXJ0eSAmJgorCWVjaG8geD4gc3VibW9kdWxlL3VudHJhY2tlZCAmJgorCWdpdCBjaGVja291dCBIRUFEID5hY3R1YWwgMj4mMSAmJgorCSEgdGVzdCAtcyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImNoZWNrb3V0IDxzdWJtb2R1bGU+IiBob25vcnMgc3VibW9kdWxlLiouaWdub3JlIGZyb20gLmdpdG1vZHVsZXMnICcKKwlnaXQgY29uZmlnIGRpZmYuaWdub3JlU3VibW9kdWxlcyBub25lICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kdWxlLnBhdGggc3VibW9kdWxlICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kdWxlLmlnbm9yZSB1bnRyYWNrZWQgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCA+YWN0dWFsIDI+JjEgJiYKKwkhIHRlc3QgLXMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJjaGVja291dCA8c3VibW9kdWxlPiIgaG9ub3JzIHN1Ym1vZHVsZS4qLmlnbm9yZSBmcm9tIC5naXQvY29uZmlnJyAnCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kdWxlLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnBhdGggc3VibW9kdWxlICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLmlnbm9yZSBhbGwgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCA+YWN0dWFsIDI+JjEgJiYKKwkhIHRlc3QgLXMgYWN0dWFsCisnCisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0IGNoZWNrb3V0IgorCit0ZXN0X3N1Ym1vZHVsZV9mb3JjZWRfc3dpdGNoICJnaXQgY2hlY2tvdXQgLWYiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAxNC1zd2l0Y2guc2ggYi90L3QyMDE0LXN3aXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jY2ZiMTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxNC1zd2l0Y2guc2gKQEAgLTAsMCArMSwyOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1BldGVyIE1hY01pbGxhbicKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIEhlbGxvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBWMSAmJgorCWVjaG8gSGVsbG8gd29ybGQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYWxsIGNoYW5nZXMgYXJlIHN0YWdlZCcgJworCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlY29uZCBjb21taXQnICcKKwlnaXQgY29tbWl0IC1tIFYyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrJyAnCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1leGl0LWNvZGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDE1LWNoZWNrb3V0LXVuYm9ybi5zaCBiL3QvdDIwMTUtY2hlY2tvdXQtdW5ib3JuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3YmRjZWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDE1LWNoZWNrb3V0LXVuYm9ybi5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgZnJvbSB1bmJvcm4gYnJhbmNoJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgcGFyZW50ICYmCisJKGNkIHBhcmVudCAmJgorCSBnaXQgaW5pdCAmJgorCSBlY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gYmFzZQorCSkgJiYKKwlnaXQgZmV0Y2ggcGFyZW50IG1hc3RlcjpvcmlnaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZnJvbSB1bmJvcm4gcHJlc2VydmVzIHVudHJhY2tlZCBmaWxlcycgJworCWVjaG8gcHJlY2lvdXMgPmV4cGVjdCAmJgorCWVjaG8gcHJlY2lvdXMgPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLWIgbmV3IG9yaWdpbiAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGZyb20gdW5ib3JuIHByZXNlcnZlcyBpbmRleCBjb250ZW50cycgJworCWVjaG8gcHJlY2lvdXMgPmV4cGVjdCAmJgorCWVjaG8gcHJlY2lvdXMgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLWIgbmV3IG9yaWdpbiAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJZ2l0IHNob3cgOmZpbGUgPmZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBmcm9tIHVuYm9ybiBtZXJnZXMgaWRlbnRpY2FsIGluZGV4IGNvbnRlbnRzJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ldyBvcmlnaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgb3V0IGFub3RoZXIgYnJhbmNoIGZyb20gdW5ib3JuIHN0YXRlJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ld3Jvb3QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlcm5hbWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9oZWFkcy9uZXdyb290ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwllY2hvIHJlZnMvaGVhZHMvYW5vdGhlcm5hbWUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgb3V0IGluIGEgbmV3bHkgY3JlYXRlZCByZXBvJyAnCisJdGVzdF9jcmVhdGVfcmVwbyBlbXB0eSAmJgorCSgKKwkJY2QgZW1wdHkgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5leHBlY3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0ICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAxNi1jaGVja291dC1wYXRjaC5zaCBiL3QvdDIwMTYtY2hlY2tvdXQtcGF0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWNkMGFjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTYtY2hlY2tvdXQtcGF0Y2guc2gKQEAgLTAsMCArMSwxMTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlY2tvdXQgLS1wYXRjaCcKKworLiAuL2xpYi1wYXRjaC1tb2RlLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAnICcKKwlta2RpciBkaXIgJiYKKwllY2hvIHBhcmVudCA+IGRpci9mb28gJiYKKwllY2hvIGR1bW15ID4gYmFyICYmCisJZ2l0IGFkZCBiYXIgZGlyL2ZvbyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBkaXIvZm9vIGhlYWQgJiYKKwlzZXRfYW5kX3NhdmVfc3RhdGUgYmFyIGJhcl93b3JrIGJhcl9pbmRleCAmJgorCXNhdmVfaGVhZAorJworCisjIG5vdGU6IGJhciBzb3J0cyBiZWZvcmUgZGlyL2Zvbywgc28gdGhlIGZpcnN0ICduJyBpcyBhbHdheXMgdG8gc2tpcCAnYmFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NheWluZyAibiIgZG9lcyBub3RoaW5nJyAnCisJc2V0X2FuZF9zYXZlX3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJKGVjaG8gbjsgZWNobyBuKSB8IGdpdCBjaGVja291dCAtcCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgZGlyL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCBjaGVja291dCAtcCcgJworCShlY2hvIG47IGVjaG8geSkgfCBnaXQgY2hlY2tvdXQgLXAgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IGNoZWNrb3V0IC1wIHdpdGggc3RhZ2VkIGNoYW5nZXMnICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJKGVjaG8gbjsgZWNobyB5KSB8IGdpdCBjaGVja291dCAtcCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBpbmRleCBpbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCBjaGVja291dCAtcCBIRUFEIHdpdGggTk8gc3RhZ2VkIGNoYW5nZXM6IGFib3J0JyAnCisJc2V0X2FuZF9zYXZlX3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJKGVjaG8gbjsgZWNobyB5OyBlY2hvIG4pIHwgZ2l0IGNoZWNrb3V0IC1wIEhFQUQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgY2hlY2tvdXQgLXAgSEVBRCB3aXRoIE5PIHN0YWdlZCBjaGFuZ2VzOiBhcHBseScgJworCShlY2hvIG47IGVjaG8geTsgZWNobyB5KSB8IGdpdCBjaGVja291dCAtcCBIRUFEICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCBjaGVja291dCAtcCBIRUFEIHdpdGggY2hhbmdlIGFscmVhZHkgc3RhZ2VkJyAnCisJc2V0X3N0YXRlIGRpci9mb28gaW5kZXggaW5kZXggJiYKKwkjIHRoZSB0aGlyZCBuIGlzIHRvIGdldCBvdXQgaW4gY2FzZSBpdCBtaXN0YWtlbmx5IGRvZXMgbm90IGFwcGx5CisJKGVjaG8gbjsgZWNobyB5OyBlY2hvIG4pIHwgZ2l0IGNoZWNrb3V0IC1wIEhFQUQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IGNoZWNrb3V0IC1wIEhFQUReJyAnCisJIyB0aGUgdGhpcmQgbiBpcyB0byBnZXQgb3V0IGluIGNhc2UgaXQgbWlzdGFrZW5seSBkb2VzIG5vdCBhcHBseQorCShlY2hvIG47IGVjaG8geTsgZWNobyBuKSB8IGdpdCBjaGVja291dCAtcCBIRUFEXiAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBwYXJlbnQgcGFyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IGNoZWNrb3V0IC1wIGhhbmRsZXMgZGVsZXRpb24nICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJcm0gZGlyL2ZvbyAmJgorCShlY2hvIG47IGVjaG8geSkgfCBnaXQgY2hlY2tvdXQgLXAgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaW5kZXggaW5kZXgKKycKKworIyBUaGUgaWRlYSBpbiB0aGUgcmVzdCBpcyB0aGF0IGJhciBzb3J0cyBmaXJzdCwgc28gd2UgYWx3YXlzIHNheSAneScKKyMgZmlyc3QgYW5kIGlmIHRoZSBwYXRoIGxpbWl0ZXIgZmFpbHMgaXQnbGwgYXBwbHkgdG8gYmFyIGluc3RlYWQgb2YKKyMgZGlyL2Zvby4gIFRoZXJlJ3MgYWx3YXlzIGFuIGV4dHJhICduJyB0byByZWplY3QgZWRpdHMgdG8gZGlyL2ZvbyBpbgorIyB0aGUgZmFpbHVyZSBjYXNlIChhbmQgdGh1cyBnZXQgb3V0IG9mIHRoZSBsb29wKS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwYXRoIGxpbWl0aW5nIHdvcmtzOiBkaXInICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwkoZWNobyB5OyBlY2hvIG4pIHwgZ2l0IGNoZWNrb3V0IC1wIGRpciAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwYXRoIGxpbWl0aW5nIHdvcmtzOiAtLSBkaXInICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwkoZWNobyB5OyBlY2hvIG4pIHwgZ2l0IGNoZWNrb3V0IC1wIC0tIGRpciAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdwYXRoIGxpbWl0aW5nIHdvcmtzOiBIRUFEXiAtLSBkaXInICcKKwkjIHRoZSB0aGlyZCBuIGlzIHRvIGdldCBvdXQgaW4gY2FzZSBpdCBtaXN0YWtlbmx5IGRvZXMgbm90IGFwcGx5CisJKGVjaG8geTsgZWNobyBuOyBlY2hvIG4pIHwgZ2l0IGNoZWNrb3V0IC1wIEhFQUReIC0tIGRpciAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBwYXJlbnQgcGFyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAncGF0aCBsaW1pdGluZyB3b3JrczogZm9vIGluc2lkZSBkaXInICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwkjIHRoZSB0aGlyZCBuIGlzIHRvIGdldCBvdXQgaW4gY2FzZSBpdCBtaXN0YWtlbmx5IGRvZXMgbm90IGFwcGx5CisJKGVjaG8geTsgZWNobyBuOyBlY2hvIG4pIHwgKGNkIGRpciAmJiBnaXQgY2hlY2tvdXQgLXAgZm9vKSAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyBoZWFkIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdub25lIG9mIHRoaXMgbW92ZWQgSEVBRCcgJworCXZlcmlmeV9zYXZlZF9oZWFkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAxNy1jaGVja291dC1vcnBoYW4uc2ggYi90L3QyMDE3LWNoZWNrb3V0LW9ycGhhbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NTVmMjc4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjAxNy1jaGVja291dC1vcnBoYW4uc2gKQEAgLTAsMCArMSwxMjUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgRXJpY2sgTWF0dG9zCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjaGVja291dCAtLW9ycGhhbgorCitNYWluIFRlc3RzIGZvciAtLW9ycGhhbiBmdW5jdGlvbmFsaXR5LicKKworLiAuL3Rlc3QtbGliLnNoCisKK1RFU1RfRklMRT1mb28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2V0dXAnICcKKwllY2hvICJJbml0aWFsIiA+IiRURVNUX0ZJTEUiICYmCisJZ2l0IGFkZCAiJFRFU1RfRklMRSIgJiYKKwlnaXQgY29tbWl0IC1tICJGaXJzdCBDb21taXQiICYmCisJdGVzdF90aWNrICYmCisJZWNobyAiU3RhdGUgMSIgPj4iJFRFU1RfRklMRSIgJiYKKwlnaXQgYWRkICIkVEVTVF9GSUxFIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNlY29uZCBDb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tb3JwaGFuIGNyZWF0ZXMgYSBuZXcgb3JwaGFuIGJyYW5jaCBmcm9tIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gYWxwaGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgJiYKKwl0ZXN0ICJyZWZzL2hlYWRzL2FscGhhIiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiVGhpcmQgQ29tbWl0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF4gJiYKKwlnaXQgZGlmZi10cmVlIC0tcXVpZXQgbWFzdGVyIGFscGhhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tb3JwaGFuIGNyZWF0ZXMgYSBuZXcgb3JwaGFuIGJyYW5jaCBmcm9tIDxzdGFydF9wb2ludD4nICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGJldGEgbWFzdGVyXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCAmJgorCXRlc3QgInJlZnMvaGVhZHMvYmV0YSIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkZvdXJ0aCBDb21taXQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXiAmJgorCWdpdCBkaWZmLXRyZWUgLS1xdWlldCBtYXN0ZXJeIGJldGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gbXVzdCBiZSByZWplY3RlZCB3aXRoIC1iJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLW9ycGhhbiBuZXcgLWIgbmV3ZXIgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvbWFzdGVyID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gbXVzdCBiZSByZWplY3RlZCB3aXRoIC10JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLW9ycGhhbiBuZXcgLXQgbWFzdGVyICYmCisJdGVzdCByZWZzL2hlYWRzL21hc3RlciA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tb3JwaGFuIGlnbm9yZXMgYnJhbmNoLmF1dG9zZXR1cG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGFsd2F5cyAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBnYW1tYSAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyBicmFuY2guZ2FtbWEubWVyZ2UpIiAmJgorCXRlc3QgcmVmcy9oZWFkcy9nYW1tYSA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ycGhhbiBtYWtlcyByZWZsb2cgYnkgZGVmYXVsdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5sb2dBbGxSZWZVcGRhdGVzICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGRlbHRhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBkZWx0YUB7MH0gJiYKKwlnaXQgY29tbWl0IC1tIERlbHRhICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBkZWx0YUB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gZG9lcyBub3QgbWFrZSByZWZsb2cgd2hlbiBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgPSBmYWxzZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyBmYWxzZSAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBlcHNpbG9uICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBlcHNpbG9uQHswfSAmJgorCWdpdCBjb21taXQgLW0gRXBzaWxvbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZXBzaWxvbkB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1vcnBoYW4gd2l0aCAtbCBtYWtlcyByZWZsb2cgd2hlbiBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgPSBmYWxzZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWwgLS1vcnBoYW4gemV0YSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgemV0YUB7MH0gJiYKKwlnaXQgY29tbWl0IC1tIFpldGEgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHpldGFAezB9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmluZyB1cCAtLW9ycGhhbiBub3QgY29tbWl0dGVkIHdoZW4gLWwgYW5kIGNvcmUubG9nQWxsUmVmVXBkYXRlcyA9IGZhbHNlIGRlbGV0ZXMgcmVmbG9nJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtbCAtLW9ycGhhbiBldGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGV0YUB7MH0gJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBldGFAezB9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tb3JwaGFuIGlzIHJlamVjdGVkIHdpdGggYW4gZXhpc3RpbmcgbmFtZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbWFzdGVyICYmCisJdGVzdCByZWZzL2hlYWRzL21hc3RlciA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tb3JwaGFuIHJlZnVzZXMgdG8gc3dpdGNoIGlmIGEgbWVyZ2UgaXMgbmVlZGVkJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGxvY2FsID4+IiRURVNUX0ZJTEUiICYmCisJY2F0ICIkVEVTVF9GSUxFIiA+IiRURVNUX0ZJTEUuc2F2ZWQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ldyBtYXN0ZXJeICYmCisJdGVzdCByZWZzL2hlYWRzL21hc3RlciA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiICYmCisJdGVzdF9jbXAgIiRURVNUX0ZJTEUiICIkVEVTVF9GSUxFLnNhdmVkIiAmJgorCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAmJgorCWdpdCByZXNldCAtLWhhcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IC0tZGV0YWNoIG9uIGFuIHVuYm9ybiBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ldyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLWRldGFjaAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMTgtY2hlY2tvdXQtYnJhbmNoLnNoIGIvdC90MjAxOC1jaGVja291dC1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjc0MTI2MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTgtY2hlY2tvdXQtYnJhbmNoLnNoCkBAIC0wLDAgKzEsMjAxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgJworCisuIC4vdGVzdC1saWIuc2gKKworIyBBcmd1bWVudHM6IDxicmFuY2g+IDxzaGE+IFs8Y2hlY2tvdXQgb3B0aW9ucz5dCisjCisjIFJ1bnMgImdpdCBjaGVja291dCIgdG8gc3dpdGNoIHRvIDxicmFuY2g+LCB0ZXN0aW5nIHRoYXQKKyMKKyMgICAxKSB3ZSBhcmUgb24gdGhlIHNwZWNpZmllZCBicmFuY2gsIDxicmFuY2g+OworIyAgIDIpIEhFQUQgaXMgPHNoYT47IGlmIDxzaGE+IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBvbGQgSEVBRCBpcyB1c2VkLgorIworIyBJZiA8Y2hlY2tvdXQgb3B0aW9ucz4gaXMgbm90IHNwZWNpZmllZCwgImdpdCBjaGVja291dCIgaXMgcnVuIHdpdGggLWIuCitkb19jaGVja291dCgpIHsKKwlleHBfYnJhbmNoPSQxICYmCisJZXhwX3JlZj0icmVmcy9oZWFkcy8kZXhwX2JyYW5jaCIgJiYKKworCSMgaWYgPHNoYT4gaXMgbm90IHNwZWNpZmllZCwgdXNlIEhFQUQuCisJZXhwX3NoYT0kezI6LSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKX0gJiYKKworCSMgZGVmYXVsdCBvcHRpb25zIGZvciBnaXQgY2hlY2tvdXQ6IC1iCisJaWYgWyAteiAiJDMiIF07IHRoZW4KKwkJb3B0cz0iLWIiCisJZWxzZQorCQlvcHRzPSIkMyIKKwlmaQorCisJZ2l0IGNoZWNrb3V0ICRvcHRzICRleHBfYnJhbmNoICRleHBfc2hhICYmCisKKwl0ZXN0ICRleHBfcmVmID0gJChnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMtZnVsbC1uYW1lIEhFQUQpICYmCisJdGVzdCAkZXhwX3NoYSA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorfQorCit0ZXN0X2RpcnR5X3VubWVyZ2VhYmxlKCkgeworCSEgZ2l0IGRpZmYgLS1leGl0LWNvZGUgPi9kZXYvbnVsbAorfQorCitzZXR1cF9kaXJ0eV91bm1lcmdlYWJsZSgpIHsKKwllY2hvID4+ZmlsZTEgY2hhbmdlMgorfQorCit0ZXN0X2RpcnR5X21lcmdlYWJsZSgpIHsKKwkhIGdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlID4vZGV2L251bGwKK30KKworc2V0dXBfZGlydHlfbWVyZ2VhYmxlKCkgeworCWVjaG8gPmZpbGUyIGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXRpYWwgZmlsZTEgJiYKKwlIRUFEMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKworCXRlc3RfY29tbWl0IGNoYW5nZTEgZmlsZTEgJiYKKwlIRUFEMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKworCWdpdCBicmFuY2ggLW0gYnJhbmNoMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiB0byBhIG5ldyBicmFuY2gsIHNldCB0byBIRUFEJyAnCisJZG9fY2hlY2tvdXQgYnJhbmNoMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiB0byBhIG5ldyBicmFuY2gsIHNldCB0byBhbiBleHBsaWNpdCByZWYnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCWdpdCBicmFuY2ggLUQgYnJhbmNoMiAmJgorCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gYSBuZXcgYnJhbmNoIHdpdGggdW5tZXJnZWFibGUgY2hhbmdlcyBmYWlscycgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwkjIGNsZWFuIHVwIGZyb20gcHJldmlvdXMgdGVzdAorCWdpdCBicmFuY2ggLUQgYnJhbmNoMiAmJgorCisJc2V0dXBfZGlydHlfdW5tZXJnZWFibGUgJiYKKwl0ZXN0X211c3RfZmFpbCBkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAmJgorCXRlc3RfZGlydHlfdW5tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWYgLWIgdG8gYSBuZXcgYnJhbmNoIHdpdGggdW5tZXJnZWFibGUgY2hhbmdlcyBkaXNjYXJkcyBjaGFuZ2VzJyAnCisJIyBzdGlsbCBkaXJ0eSBhbmQgb24gYnJhbmNoMQorCWRvX2NoZWNrb3V0IGJyYW5jaDIgJEhFQUQxICItZiAtYiIgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0X2RpcnR5X3VubWVyZ2VhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1iIHRvIGEgbmV3IGJyYW5jaCBwcmVzZXJ2ZXMgbWVyZ2VhYmxlIGNoYW5nZXMnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCisJIyBjbGVhbiB1cCBmcm9tIHByZXZpb3VzIHRlc3QKKwlnaXQgYnJhbmNoIC1EIGJyYW5jaDIgJiYKKworCXNldHVwX2RpcnR5X21lcmdlYWJsZSAmJgorCWRvX2NoZWNrb3V0IGJyYW5jaDIgJEhFQUQxICYmCisJdGVzdF9kaXJ0eV9tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWYgLWIgdG8gYSBuZXcgYnJhbmNoIHdpdGggbWVyZ2VhYmxlIGNoYW5nZXMgZGlzY2FyZHMgY2hhbmdlcycgJworCSMgY2xlYW4gdXAgZnJvbSBwcmV2aW91cyB0ZXN0CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKworCSMgY2xlYW4gdXAgZnJvbSBwcmV2aW91cyB0ZXN0CisJZ2l0IGJyYW5jaCAtRCBicmFuY2gyICYmCisKKwlzZXR1cF9kaXJ0eV9tZXJnZWFibGUgJiYKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAiLWYgLWIiICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdF9kaXJ0eV9tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIGZhaWxzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisKKwl0ZXN0X211c3RfZmFpbCBkb19jaGVja291dCBicmFuY2gyICRIRUFEMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiB0byBAey0xfSBmYWlscyB3aXRoIHRoZSByaWdodCBicmFuY2ggbmFtZScgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCWdpdCBjaGVja291dCBicmFuY2gxICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKKwllY2hvICA+ZXhwZWN0ICJmYXRhbDogQSBicmFuY2ggbmFtZWQgJ1wnJ2JyYW5jaDEnXCcnIGFscmVhZHkgZXhpc3RzLiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLWIgQHstMX0gMj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1CIHRvIGFuIGV4aXN0aW5nIGJyYW5jaCByZXNldHMgYnJhbmNoIHRvIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAiIiAtQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtQiB0byBhbiBleGlzdGluZyBicmFuY2ggZnJvbSBkZXRhY2hlZCBIRUFEIHJlc2V0cyBicmFuY2ggdG8gSEVBRCcgJworCWdpdCBjaGVja291dCAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKworCWRvX2NoZWNrb3V0IGJyYW5jaDIgIiIgLUIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHdpdGggYW4gZXhwbGljaXQgcmVmIHJlc2V0cyBicmFuY2ggdG8gdGhhdCByZWYnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDEgLUIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHdpdGggdW5tZXJnZWFibGUgY2hhbmdlcyBmYWlscycgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwlzZXR1cF9kaXJ0eV91bm1lcmdlYWJsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGRvX2NoZWNrb3V0IGJyYW5jaDIgJEhFQUQxIC1CICYmCisJdGVzdF9kaXJ0eV91bm1lcmdlYWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtZiAtQiB0byBhbiBleGlzdGluZyBicmFuY2ggd2l0aCB1bm1lcmdlYWJsZSBjaGFuZ2VzIGRpc2NhcmRzIGNoYW5nZXMnICcKKwkjIHN0aWxsIGRpcnR5IGFuZCBvbiBicmFuY2gxCisJZG9fY2hlY2tvdXQgYnJhbmNoMiAkSEVBRDEgIi1mIC1CIiAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3RfZGlydHlfdW5tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLUIgdG8gYW4gZXhpc3RpbmcgYnJhbmNoIHByZXNlcnZlcyBtZXJnZWFibGUgY2hhbmdlcycgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwlzZXR1cF9kaXJ0eV9tZXJnZWFibGUgJiYKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAtQiAmJgorCXRlc3RfZGlydHlfbWVyZ2VhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1mIC1CIHRvIGFuIGV4aXN0aW5nIGJyYW5jaCB3aXRoIG1lcmdlYWJsZSBjaGFuZ2VzIGRpc2NhcmRzIGNoYW5nZXMnICcKKwkjIGNsZWFuIHVwIGZyb20gcHJldmlvdXMgdGVzdAorCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisKKwlzZXR1cF9kaXJ0eV9tZXJnZWFibGUgJiYKKwlkb19jaGVja291dCBicmFuY2gyICRIRUFEMSAiLWYgLUIiICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdF9kaXJ0eV9tZXJnZWFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgPGRlc2NyaWJlPicgJworCWdpdCB0YWcgLWYgLW0gIkZpcnN0IGNvbW1pdCIgaW5pdGlhbCBpbml0aWFsICYmCisJZ2l0IGNoZWNrb3V0IC1mIGNoYW5nZTEgJiYKKwluYW1lPSQoZ2l0IGRlc2NyaWJlKSAmJgorCWdpdCBjaGVja291dCAtYiAkbmFtZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGNoYW5nZTEgJiYKKwllY2hvICJyZWZzL2hlYWRzLyRuYW1lIiA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1CIHRvIHRoZSBjdXJyZW50IGJyYW5jaCB3b3JrcycgJworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisJZ2l0IGNoZWNrb3V0IC1CIGJyYW5jaDEtc2NyYXRjaCAmJgorCisJc2V0dXBfZGlydHlfbWVyZ2VhYmxlICYmCisJZ2l0IGNoZWNrb3V0IC1CIGJyYW5jaDEtc2NyYXRjaCBpbml0aWFsICYmCisJdGVzdF9kaXJ0eV9tZXJnZWFibGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDE5LWNoZWNrb3V0LWFtYmlndW91cy1yZWYuc2ggYi90L3QyMDE5LWNoZWNrb3V0LWFtYmlndW91cy1yZWYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTk5YjIyZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMTktY2hlY2tvdXQtYW1iaWd1b3VzLXJlZi5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgaGFuZGxpbmcgb2YgYW1iaWd1b3VzIChicmFuY2gvdGFnKSByZWZzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGFtYmlndW91cyByZWZzJyAnCisJdGVzdF9jb21taXQgYnJhbmNoIGZpbGUgJiYKKwlnaXQgYnJhbmNoIGFtYmlndWl0eSAmJgorCWdpdCBicmFuY2ggdmFndWVuZXNzICYmCisJdGVzdF9jb21taXQgdGFnIGZpbGUgJiYKKwlnaXQgdGFnIGFtYmlndWl0eSAmJgorCWdpdCB0YWcgdmFndWVuZXNzIEhFQUQ6ZmlsZSAmJgorCXRlc3RfY29tbWl0IG90aGVyIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYW1iaWd1b3VzIHJlZiBzdWNjZWVkcycgJworCWdpdCBjaGVja291dCBhbWJpZ3VpdHkgPnN0ZG91dCAyPnN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBwcm9kdWNlcyBhbWJpZ3VpdHkgd2FybmluZycgJworCWdyZXAgIndhcm5pbmcuKmFtYmlndW91cyIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGNob29zZXMgYnJhbmNoIG92ZXIgdGFnJyAnCisJZWNobyByZWZzL2hlYWRzL2FtYmlndWl0eSA+ZXhwZWN0ICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHJlcG9ydHMgc3dpdGNoIHRvIGJyYW5jaCcgJworCXRlc3RfaTE4bmdyZXAgIlN3aXRjaGVkIHRvIGJyYW5jaCIgc3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCAhICJeSEVBRCBpcyBub3cgYXQiIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB2YWd1ZSByZWYgc3VjY2VlZHMnICcKKwlnaXQgY2hlY2tvdXQgdmFndWVuZXNzID5zdGRvdXQgMj5zdGRlcnIgJiYKKwl0ZXN0X3NldF9wcmVyZXEgVkFHVUVORVNTX1NVQ0NFU1MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBWQUdVRU5FU1NfU1VDQ0VTUyAnY2hlY2tvdXQgcHJvZHVjZXMgYW1iaWd1aXR5IHdhcm5pbmcnICcKKwlncmVwICJ3YXJuaW5nLiphbWJpZ3VvdXMiIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFZBR1VFTkVTU19TVUNDRVNTICdjaGVja291dCBjaG9vc2VzIGJyYW5jaCBvdmVyIHRhZycgJworCWVjaG8gcmVmcy9oZWFkcy92YWd1ZW5lc3MgPmV4cGVjdCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFZBR1VFTkVTU19TVUNDRVNTICdjaGVja291dCByZXBvcnRzIHN3aXRjaCB0byBicmFuY2gnICcKKwl0ZXN0X2kxOG5ncmVwICJTd2l0Y2hlZCB0byBicmFuY2giIHN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiXkhFQUQgaXMgbm93IGF0IiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgYW1iaWd1YXRpb24sIHBhdGhzIHdpbicgJworCWdpdCBpbml0IGFtYmkgJiYKKwkoCisJCWNkIGFtYmkgJiYKKwkJZWNobyBhID5hLmMgJiYKKwkJZ2l0IGFkZCBhLmMgJiYKKwkJZWNobyBiID5hLmMgJiYKKwkJZ2l0IGNoZWNrb3V0ICIqLmMiICYmCisJCWVjaG8gYSA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhLmMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICd3aWxkY2FyZCBhbWJpZ3VhdGlvbiwgcmVmcyBsb3NlJyAnCisJZ2l0IGluaXQgYW1iaTIgJiYKKwkoCisJCWNkIGFtYmkyICYmCisJCWVjaG8gYSA+IiouYyIgJiYKKwkJZ2l0IGFkZCAuICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93IDoiKi5jIiAmJgorCQlnaXQgc2hvdyA6IiouYyIgLS0gPmFjdHVhbCAmJgorCQllY2hvIGEgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjAtY2hlY2tvdXQtZGV0YWNoLnNoIGIvdC90MjAyMC1jaGVja291dC1kZXRhY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWQ2ODcyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMjAtY2hlY2tvdXQtZGV0YWNoLnNoCkBAIC0wLDAgKzEsMTY2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgaW50byBkZXRhY2hlZCBIRUFEIHN0YXRlJworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX2RldGFjaGVkICgpIHsKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQgPi9kZXYvbnVsbAorfQorCitjaGVja19ub3RfZGV0YWNoZWQgKCkgeworCWdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCA+L2Rldi9udWxsCit9CisKK1BSRVZfSEVBRF9ERVNDPSdQcmV2aW91cyBIRUFEIHBvc2l0aW9uIHdhcycKK2NoZWNrX29ycGhhbl93YXJuaW5nKCkgeworCXRlc3RfaTE4bmdyZXAgInlvdSBhcmUgbGVhdmluZyAkMiBiZWhpbmQiICIkMSIgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIiRQUkVWX0hFQURfREVTQyIgIiQxIgorfQorY2hlY2tfbm9fb3JwaGFuX3dhcm5pbmcoKSB7CisJdGVzdF9pMThuZ3JlcCAhICJ5b3UgYXJlIGxlYXZpbmcgLiogY29tbWl0LipiZWhpbmQiICIkMSIgJiYKKwl0ZXN0X2kxOG5ncmVwICIkUFJFVl9IRUFEX0RFU0MiICIkMSIKK30KKworcmVzZXQgKCkgeworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwljaGVja19ub3RfZGV0YWNoZWQKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJiBnaXQgdGFnIC1kIHRocmVlICYmCisJdGVzdF9jb21taXQgZm91ciAmJiBnaXQgdGFnIC1kIGZvdXIgJiYKKwlnaXQgYnJhbmNoIGJyYW5jaCAmJgorCWdpdCB0YWcgdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGJyYW5jaCBkb2VzIG5vdCBkZXRhY2gnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCBicmFuY2ggJiYKKwljaGVja19ub3RfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdGFnIGRldGFjaGVzJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgdGFnICYmCisJY2hlY2tfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgYnJhbmNoIGJ5IGZ1bGwgbmFtZSBkZXRhY2hlcycgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IHJlZnMvaGVhZHMvYnJhbmNoICYmCisJY2hlY2tfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgbm9uLXJlZiBkZXRhY2hlcycgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaF4gJiYKKwljaGVja19kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCByZWZeMCBkZXRhY2hlcycgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaF4wICYmCisJY2hlY2tfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1kZXRhY2ggZGV0YWNoZXMnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCBicmFuY2ggJiYKKwljaGVja19kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLWRldGFjaCB3aXRob3V0IGJyYW5jaCBuYW1lJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJiYKKwljaGVja19kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLWRldGFjaCBlcnJvcnMgb3V0IGZvciBub24tY29tbWl0JyAnCisJcmVzZXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1kZXRhY2ggb25lXnt0cmVlfSAmJgorCWNoZWNrX25vdF9kZXRhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLWRldGFjaCBlcnJvcnMgb3V0IGZvciBleHRyYSBhcmd1bWVudCcgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLWRldGFjaCB0YWcgb25lLnQgJiYKKwljaGVja19ub3RfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1kZXRhY2hlZCBhbmQgLWIgYXJlIGluY29tcGF0aWJsZScgJworCXJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIC1iIG5ld2JyYW5jaCB0YWcgJiYKKwljaGVja19ub3RfZGV0YWNoZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1kZXRhY2ggbW92ZXMgSEVBRCcgJworCXJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCB0d28gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdhcm5zIG9uIG9ycGhhbiBjb21taXRzJyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggdHdvICYmCisJZWNobyBjb250ZW50ID5vcnBoYW4gJiYKKwlnaXQgYWRkIG9ycGhhbiAmJgorCWdpdCBjb21taXQgLWEgLW0gb3JwaGFuMSAmJgorCWVjaG8gbmV3IGNvbnRlbnQgPm9ycGhhbiAmJgorCWdpdCBjb21taXQgLWEgLW0gb3JwaGFuMiAmJgorCW9ycGhhbjI9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAyPnN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3YXJucyBvbiBvcnBoYW4gY29tbWl0czogb3V0cHV0JyAnCisJY2hlY2tfb3JwaGFuX3dhcm5pbmcgc3RkZXJyICIyIGNvbW1pdHMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdhcm5zIG9ycGhhbmluZyAxIG9mIDIgY29tbWl0cycgJworCWdpdCBjaGVja291dCAiJG9ycGhhbjIiICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReIDI+c3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdhcm5zIG9ycGhhbmluZyAxIG9mIDIgY29tbWl0czogb3V0cHV0JyAnCisJY2hlY2tfb3JwaGFuX3dhcm5pbmcgc3RkZXJyICIxIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgZG9lcyBub3Qgd2FybiBsZWF2aW5nIHJlZiB0aXAnICcKKwlyZXNldCAmJgorCWdpdCBjaGVja291dCAtLWRldGFjaCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIDI+c3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGRvZXMgbm90IHdhcm4gbGVhdmluZyByZWYgdGlwJyAnCisJY2hlY2tfbm9fb3JwaGFuX3dhcm5pbmcgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGRvZXMgbm90IHdhcm4gbGVhdmluZyByZWFjaGFibGUgY29tbWl0JyAnCisJcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggSEVBRF4gJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIDI+c3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGRvZXMgbm90IHdhcm4gbGVhdmluZyByZWFjaGFibGUgY29tbWl0JyAnCisJY2hlY2tfbm9fb3JwaGFuX3dhcm5pbmcgc3RkZXJyCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1lvdXIgYnJhbmNoIGlzIGJlaGluZCAnbWFzdGVyJyBieSAxIGNvbW1pdCwgYW5kIGNhbiBiZSBmYXN0LWZvcndhcmRlZC4KKyAgKHVzZSAiZ2l0IHB1bGwiIHRvIHVwZGF0ZSB5b3VyIGxvY2FsIGJyYW5jaCkKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhY2tpbmcgY291bnQgaXMgYWNjdXJhdGUgYWZ0ZXIgb3JwaGFuIGNoZWNrJyAnCisJcmVzZXQgJiYKKwlnaXQgYnJhbmNoIGNoaWxkIG1hc3Rlcl4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5jaGlsZC5yZW1vdGUgLiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmNoaWxkLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IGNoaWxkXiAmJgorCWdpdCBjaGVja291dCBjaGlsZCA+c3Rkb3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBzdGRvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDIxLWNoZWNrb3V0LW92ZXJ3cml0ZS5zaCBiL3QvdDIwMjEtY2hlY2tvdXQtb3ZlcndyaXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyYWRhN2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDIxLWNoZWNrb3V0LW92ZXJ3cml0ZS5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgbXVzdCBub3Qgb3ZlcndyaXRlIGFuIHVudHJhY2tlZCBvYmplY3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlta2RpciAtcCBhL2IvYyAmJgorCT5hL2IvYy9kICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCB0YWcgc3RhcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGEgY29tbWl0IHdoZXJlIGRpciBhL2IgY2hhbmdlZCB0byBmaWxlJyAnCisKKwlnaXQgY2hlY2tvdXQgLWIgZmlsZSAmJgorCXJtIC1yZiBhL2IgJiYKKwk+YS9iICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gImRpciB0byBmaWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBjb21taXQgd2l0aCBkaXIgbXVzdCBub3QgcmVtb3ZlIHVudHJhY2tlZCBhL2InICcKKworCWdpdCBybSAtLWNhY2hlZCBhL2IgJiYKKwlnaXQgY29tbWl0IC1tICJ1bi10cmFjayB0aGUgZmlsZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgc3RhcnQgJiYKKwl0ZXN0IC1mIGEvYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYSBjb21taXQgd2hlcmUgZGlyIGEvYiBjaGFuZ2VkIHRvIHN5bWxpbmsnICcKKworCXJtIC1yZiBhL2IgJiYJIyBjbGVhbnVwIGlmIHByZXZpb3VzIHRlc3QgZmFpbGVkCisJZ2l0IGNoZWNrb3V0IC1mIC1iIHN5bWxpbmsgc3RhcnQgJiYKKwlybSAtcmYgYS9iICYmCisJZ2l0IGFkZCAtQSAmJgorCXRlc3RfbG5fc19hZGQgZm9vIGEvYiAmJgorCWdpdCBjb21taXQgLW0gImRpciB0byBzeW1saW5rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBjb21taXQgd2l0aCBkaXIgbXVzdCBub3QgcmVtb3ZlIHVudHJhY2tlZCBhL2InICcKKworCWdpdCBybSAtLWNhY2hlZCBhL2IgJiYKKwlnaXQgY29tbWl0IC1tICJ1bi10cmFjayB0aGUgc3ltbGluayIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgc3RhcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndGhlIHN5bWxpbmsgcmVtYWluZWQnICcKKworCXRlc3QgLWggYS9iCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAyMi1jaGVja291dC1wYXRocy5zaCBiL3QvdDIwMjItY2hlY2tvdXQtcGF0aHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjQ2ZDA0OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwMjItY2hlY2tvdXQtcGF0aHMuc2gKQEAgLTAsMCArMSw4MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0ICR0cmVlIC0tICRwYXRocycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBkaXIgJiYKKwk+ZGlyL21hc3RlciAmJgorCWVjaG8gY29tbW9uID5kaXIvY29tbW9uICYmCisJZ2l0IGFkZCBkaXIvbWFzdGVyIGRpci9jb21tb24gJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAibWFzdGVyIGhhcyBkaXIvbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtYiBuZXh0ICYmCisJZ2l0IG12IGRpci9tYXN0ZXIgZGlyL25leHQwICYmCisJZWNobyBuZXh0ID5kaXIvbmV4dDEgJiYKKwlnaXQgYWRkIGRpciAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJuZXh0IGhhcyBkaXIvbmV4dCBidXQgbm90IGRpci9tYXN0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIG91dCBwYXRocyBvdXQgb2YgYSB0cmVlIGRvZXMgbm90IGNsb2JiZXIgdW5yZWxhdGVkIHBhdGhzJyAnCisJZ2l0IGNoZWNrb3V0IG5leHQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gZGlyL25leHQwICYmCisJY2F0IGRpci9jb21tb24gPmV4cGVjdC5jb21tb24gJiYKKwllY2hvIG1vZGlmaWVkID5leHBlY3QubmV4dDEgJiYKKwljYXQgZXhwZWN0Lm5leHQxID5kaXIvbmV4dDEgJiYKKwllY2hvIHVudHJhY2tlZCA+ZXhwZWN0Lm5leHQyICYmCisJY2F0IGV4cGVjdC5uZXh0MiA+ZGlyL25leHQyICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyIGRpciAmJgorCisJdGVzdF9jbXAgZXhwZWN0LmNvbW1vbiBkaXIvY29tbW9uICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyL21hc3RlciAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlciBkaXIvbWFzdGVyICYmCisKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkaXIvbmV4dDAgJiYKKwl0ZXN0X2NtcCBleHBlY3QubmV4dDEgZGlyL25leHQxICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyL25leHQyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBkaXIvbmV4dDIgJiYKKwl0ZXN0X2NtcCBleHBlY3QubmV4dDIgZGlyL25leHQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCB0b3VjaCB1bm1lcmdlZCBlbnRyaWVzIG1hdGNoaW5nICRwYXRoIGJ1dCBub3QgaW4gJHRyZWUnICcKKwlnaXQgY2hlY2tvdXQgbmV4dCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWNhdCBkaXIvY29tbW9uID5leHBlY3QuY29tbW9uICYmCisJRU1QVFlfU0hBMT0kKGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIDwvZGV2L251bGwpICYmCisJZ2l0IHJtIGRpci9uZXh0MCAmJgorCWNhdCA+ZXhwZWN0Lm5leHQwIDw8LUVPRiAmJgorCTEwMDY0NCAkRU1QVFlfU0hBMSAxCWRpci9uZXh0MAorCTEwMDY0NCAkRU1QVFlfU0hBMSAyCWRpci9uZXh0MAorCUVPRgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxleHBlY3QubmV4dDAgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgZGlyICYmCisKKwl0ZXN0X2NtcCBleHBlY3QuY29tbW9uIGRpci9jb21tb24gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIvbWFzdGVyICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyIGRpci9tYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgZGlyL25leHQwID5hY3R1YWwubmV4dDAgJiYKKwl0ZXN0X2NtcCBleHBlY3QubmV4dDAgYWN0dWFsLm5leHQwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCB0b3VjaCBmaWxlcyB0aGF0IGFyZSBhbHJlYWR5IHVwLXRvLWRhdGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBvbmUgPmZpbGUxICYmCisJZWNobyB0d28gPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMSBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWVjaG8gbW9kaWZpZWQgPmZpbGUxICYmCisJdGVzdC1jaG10aW1lID0xMDAwMDAwMDAwIGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2ggJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBmaWxlMSBmaWxlMiAmJgorCWVjaG8gb25lID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTEgJiYKKwllY2hvICIxMDAwMDAwMDAwCWZpbGUyIiA+ZXhwZWN0ICYmCisJdGVzdC1jaG10aW1lIC12ICswIGZpbGUyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjAyMy1jaGVja291dC1tLnNoIGIvdC90MjAyMy1jaGVja291dC1tLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlMTg5ODUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDIzLWNoZWNrb3V0LW0uc2gKQEAgLTAsMCArMSw0OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrb3V0IC1tIC0tIDxjb25mbGljdGVkIHBhdGg+CisKK0Vuc3VyZXMgdGhhdCBjaGVja291dCAtbSBvbiBhIHJlc29sdmVkIGZpbGUgcmVzdG9yZXMgdGhlIGNvbmZsaWN0ZWQgZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCXRlc3RfY29tbWl0IGJvdGgudHh0IGJvdGgudHh0IGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHRvcGljICYmCisJdGVzdF9jb21taXQgbW9kaWZpZWRfaW5fbWFzdGVyIGJvdGgudHh0IGluX21hc3RlciAmJgorCXRlc3RfY29tbWl0IGFkZGVkX2luX21hc3RlciBlYWNoLnR4dCBpbl9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwl0ZXN0X2NvbW1pdCBtb2RpZmllZF9pbl90b3BpYyBib3RoLnR4dCBpbl90b3BpYyAmJgorCXRlc3RfY29tbWl0IGFkZGVkX2luX3RvcGljIGVhY2gudHh0IGluX3RvcGljCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtZXJnZSBtYXN0ZXInICcKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyCisnCisKK2NsZWFuX2JyYW5jaG5hbWVzICgpIHsKKwkjIFJlbW92ZSBicmFuY2ggbmFtZXMgYWZ0ZXIgY29uZmxpY3QgbGluZXMKKwlzZWQgJ3MvXlwoWzw+XVx7NSxcfVwpIC4qJC9cMS8nCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1tIHJlc3RvcmVzIDItd2F5IGNvbmZsaWN0ZWQrcmVzb2x2ZWQgZmlsZScgJworCWNwIGVhY2gudHh0IGVhY2gudHh0LmNvbmZsaWN0ZWQgJiYKKwllY2hvIHJlc29sdmVkID5lYWNoLnR4dCAmJgorCWdpdCBhZGQgZWFjaC50eHQgJiYKKwlnaXQgY2hlY2tvdXQgLW0gLS0gZWFjaC50eHQgJiYKKwljbGVhbl9icmFuY2huYW1lcyA8ZWFjaC50eHQgPmVhY2gudHh0LmNsZWFuZWQgJiYKKwljbGVhbl9icmFuY2huYW1lcyA8ZWFjaC50eHQuY29uZmxpY3RlZCA+ZWFjaC50eHQuY29uZmxpY3RlZC5jbGVhbmVkICYmCisJdGVzdF9jbXAgZWFjaC50eHQuY29uZmxpY3RlZC5jbGVhbmVkIGVhY2gudHh0LmNsZWFuZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLW0gcmVzdG9yZXMgMy13YXkgY29uZmxpY3RlZCtyZXNvbHZlZCBmaWxlJyAnCisJY3AgYm90aC50eHQgYm90aC50eHQuY29uZmxpY3RlZCAmJgorCWVjaG8gcmVzb2x2ZWQgPmJvdGgudHh0ICYmCisJZ2l0IGFkZCBib3RoLnR4dCAmJgorCWdpdCBjaGVja291dCAtbSAtLSBib3RoLnR4dCAmJgorCWNsZWFuX2JyYW5jaG5hbWVzIDxib3RoLnR4dCA+Ym90aC50eHQuY2xlYW5lZCAmJgorCWNsZWFuX2JyYW5jaG5hbWVzIDxib3RoLnR4dC5jb25mbGljdGVkID5ib3RoLnR4dC5jb25mbGljdGVkLmNsZWFuZWQgJiYKKwl0ZXN0X2NtcCBib3RoLnR4dC5jb25mbGljdGVkLmNsZWFuZWQgYm90aC50eHQuY2xlYW5lZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjQtY2hlY2tvdXQtZHdpbS5zaCBiL3QvdDIwMjQtY2hlY2tvdXQtZHdpbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NjhhMDAwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyNC1jaGVja291dC1kd2ltLnNoCkBAIC0wLDAgKzEsMjA2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2tvdXQgPGJyYW5jaD4KKworRW5zdXJlcyB0aGF0IGNoZWNrb3V0IG9uIGFuIHVuYm9ybiBicmFuY2ggZG9lcyB3aGF0IHRoZSB1c2VyIGV4cGVjdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIElzIHRoZSBjdXJyZW50IGJyYW5jaCAicmVmcy9oZWFkcy8kMSI/Cit0ZXN0X2JyYW5jaCAoKSB7CisJcHJpbnRmICIlc1xuIiAicmVmcy9oZWFkcy8kMSIgPmV4cGVjdC5IRUFEICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEID5hY3R1YWwuSEVBRCAmJgorCXRlc3RfY21wIGV4cGVjdC5IRUFEIGFjdHVhbC5IRUFECit9CisKKyMgSXMgYnJhbmNoICJyZWZzL2hlYWRzLyQxIiBzZXQgdG8gcHVsbCBmcm9tICIkMi8kMyI/Cit0ZXN0X2JyYW5jaF91cHN0cmVhbSAoKSB7CisJcHJpbnRmICIlc1xuIiAiJDIiICJyZWZzL2hlYWRzLyQzIiA+ZXhwZWN0LnVwc3RyZWFtICYmCisJeworCQlnaXQgY29uZmlnICJicmFuY2guJDEucmVtb3RlIiAmJgorCQlnaXQgY29uZmlnICJicmFuY2guJDEubWVyZ2UiCisJfSA+YWN0dWFsLnVwc3RyZWFtICYmCisJdGVzdF9jbXAgZXhwZWN0LnVwc3RyZWFtIGFjdHVhbC51cHN0cmVhbQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IG15X21hc3RlciAmJgorCWdpdCBpbml0IHJlcG9fYSAmJgorCSgKKwkJY2QgcmVwb19hICYmCisJCXRlc3RfY29tbWl0IGFfbWFzdGVyICYmCisJCWdpdCBjaGVja291dCAtYiBmb28gJiYKKwkJdGVzdF9jb21taXQgYV9mb28gJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGJhciAmJgorCQl0ZXN0X2NvbW1pdCBhX2JhcgorCSkgJiYKKwlnaXQgaW5pdCByZXBvX2IgJiYKKwkoCisJCWNkIHJlcG9fYiAmJgorCQl0ZXN0X2NvbW1pdCBiX21hc3RlciAmJgorCQlnaXQgY2hlY2tvdXQgLWIgZm9vICYmCisJCXRlc3RfY29tbWl0IGJfZm9vICYmCisJCWdpdCBjaGVja291dCAtYiBiYXogJiYKKwkJdGVzdF9jb21taXQgYl9iYXoKKwkpICYmCisJZ2l0IHJlbW90ZSBhZGQgcmVwb19hIHJlcG9fYSAmJgorCWdpdCByZW1vdGUgYWRkIHJlcG9fYiByZXBvX2IgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yZXBvX2IuZmV0Y2ggXAorCQkiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3RoZXJfYi8qIiAmJgorCWdpdCBmZXRjaCAtLWFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBub24tZXhpc3RpbmcgYnJhbmNoIGZhaWxzJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIHh5enp5ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgeHl6enkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMveHl6enkgJiYKKwl0ZXN0X2JyYW5jaCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2YgYnJhbmNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyBmYWlscyAjMScgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBmb28gJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIGEgc2luZ2xlIHJlbW90ZSBzdWNjZWVkcyAjMScgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBiYXIgJiYKKworCWdpdCBjaGVja291dCBiYXIgJiYKKwl0ZXN0X2JyYW5jaCBiYXIgJiYKKwl0ZXN0X2NtcF9yZXYgcmVtb3Rlcy9yZXBvX2EvYmFyIEhFQUQgJiYKKwl0ZXN0X2JyYW5jaF91cHN0cmVhbSBiYXIgcmVwb19hIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggZnJvbSBhIHNpbmdsZSByZW1vdGUgc3VjY2VlZHMgIzInICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYmF6ICYmCisKKwlnaXQgY2hlY2tvdXQgYmF6ICYmCisJdGVzdF9icmFuY2ggYmF6ICYmCisJdGVzdF9jbXBfcmV2IHJlbW90ZXMvb3RoZXJfYi9iYXogSEVBRCAmJgorCXRlc3RfYnJhbmNoX3Vwc3RyZWFtIGJheiByZXBvX2IgYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tZ3Vlc3Mgc3VwcHJlc3NlcyBicmFuY2ggYXV0by12aXZpZmljYXRpb24nICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYmFyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLS1uby1ndWVzcyBiYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYmFyICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG1vcmUgcmVtb3RlcyB3aXRoIHVuY29udmVudGlvbmFsIHJlZnNwZWNzJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCWdpdCBpbml0IHJlcG9fYyAmJgorCSgKKwkJY2QgcmVwb19jICYmCisJCXRlc3RfY29tbWl0IGNfbWFzdGVyICYmCisJCWdpdCBjaGVja291dCAtYiBiYXIgJiYKKwkJdGVzdF9jb21taXQgY19iYXIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNwYW0gJiYKKwkJdGVzdF9jb21taXQgY19zcGFtCisJKSAmJgorCWdpdCBpbml0IHJlcG9fZCAmJgorCSgKKwkJY2QgcmVwb19kICYmCisJCXRlc3RfY29tbWl0IGRfbWFzdGVyICYmCisJCWdpdCBjaGVja291dCAtYiBiYXogJiYKKwkJdGVzdF9jb21taXQgZF9iYXogJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGVnZ3MgJiYKKwkJdGVzdF9jb21taXQgZF9lZ2dzCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHJlcG9fYyByZXBvX2MgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yZXBvX2MuZmV0Y2ggXAorCQkiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZXh0cmFfZGlyL3JlcG9fYy9leHRyYV9kaXIvKiIgJiYKKwlnaXQgcmVtb3RlIGFkZCByZXBvX2QgcmVwb19kICYmCisJZ2l0IGNvbmZpZyByZW1vdGUucmVwb19kLmZldGNoIFwKKwkJIityZWZzL2hlYWRzLyo6cmVmcy9yZXBvX2QvKiIgJiYKKwlnaXQgZmV0Y2ggLS1hbGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgb2YgYnJhbmNoIGZyb20gbXVsdGlwbGUgcmVtb3RlcyBmYWlscyAjMicgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBiYXIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBiYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYmFyICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIG11bHRpcGxlIHJlbW90ZXMgZmFpbHMgIzMnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgYmF6ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgYmF6ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2JheiAmJgorCXRlc3RfYnJhbmNoIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggZnJvbSBhIHNpbmdsZSByZW1vdGUgc3VjY2VlZHMgIzMnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgc3BhbSAmJgorCisJZ2l0IGNoZWNrb3V0IHNwYW0gJiYKKwl0ZXN0X2JyYW5jaCBzcGFtICYmCisJdGVzdF9jbXBfcmV2IHJlZnMvcmVtb3Rlcy9leHRyYV9kaXIvcmVwb19jL2V4dHJhX2Rpci9zcGFtIEhFQUQgJiYKKwl0ZXN0X2JyYW5jaF91cHN0cmVhbSBzcGFtIHJlcG9fYyBzcGFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IG9mIGJyYW5jaCBmcm9tIGEgc2luZ2xlIHJlbW90ZSBzdWNjZWVkcyAjNCcgJworCWdpdCBjaGVja291dCAtQiBtYXN0ZXIgJiYKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCBlZ2dzICYmCisKKwlnaXQgY2hlY2tvdXQgZWdncyAmJgorCXRlc3RfYnJhbmNoIGVnZ3MgJiYKKwl0ZXN0X2NtcF9yZXYgcmVmcy9yZXBvX2QvZWdncyBIRUFEICYmCisJdGVzdF9icmFuY2hfdXBzdHJlYW0gZWdncyByZXBvX2QgZWdncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBvZiBicmFuY2ggd2l0aCBhIGZpbGUgaGF2aW5nIHRoZSBzYW1lIG5hbWUgZmFpbHMnICcKKwlnaXQgY2hlY2tvdXQgLUIgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgc3BhbSAmJgorCisJPnNwYW0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgc3BhbSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zcGFtICYmCisJdGVzdF9icmFuY2ggbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IDxicmFuY2g+IC0tIHN1Y2NlZWRzLCBldmVuIGlmIGEgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgZXhpc3RzJyAnCisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIHNwYW0gJiYKKworCT5zcGFtICYmCisJZ2l0IGNoZWNrb3V0IHNwYW0gLS0gJiYKKwl0ZXN0X2JyYW5jaCBzcGFtICYmCisJdGVzdF9jbXBfcmV2IHJlZnMvcmVtb3Rlcy9leHRyYV9kaXIvcmVwb19jL2V4dHJhX2Rpci9zcGFtIEhFQUQgJiYKKwl0ZXN0X2JyYW5jaF91cHN0cmVhbSBzcGFtIHJlcG9fYyBzcGFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb3NlbHkgZGVmaW5lZCBsb2NhbCBiYXNlIGJyYW5jaCBpcyByZXBvcnRlZCBjb3JyZWN0bHknICcKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIHN0cmljdCAmJgorCWdpdCBicmFuY2ggbG9vc2UgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImEgYml0IG1vcmUiICYmCisKKwl0ZXN0X2NvbmZpZyBicmFuY2guc3RyaWN0LnJlbW90ZSAuICYmCisJdGVzdF9jb25maWcgYnJhbmNoLmxvb3NlLnJlbW90ZSAuICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnN0cmljdC5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5sb29zZS5tZXJnZSBtYXN0ZXIgJiYKKworCWdpdCBjaGVja291dCBzdHJpY3QgfCBzZWQgLWUgInMvc3RyaWN0L0JSQU5DSE5BTUUvZyIgPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCBsb29zZSB8IHNlZCAtZSAicy9sb29zZS9CUkFOQ0hOQU1FL2ciID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDI1LXdvcmt0cmVlLWFkZC5zaCBiL3QvdDIwMjUtd29ya3RyZWUtYWRkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM2OTQxNzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMDI1LXdvcmt0cmVlLWFkZC5zaApAQCAtMCwwICsxLDIwMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0IHdvcmt0cmVlIGFkZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiBhbiBleGlzdGluZyB3b3JrdHJlZScgJworCW1rZGlyIC1wIGV4aXN0aW5nL3N1YnRyZWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGV4aXN0aW5nIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiBhbiBleGlzdGluZyBlbXB0eSB3b3JrdHJlZScgJworCW1rZGlyIGV4aXN0aW5nX2VtcHR5ICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBleGlzdGluZ19lbXB0eSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgcmVmdXNlcyB0byBjaGVja291dCBsb2NrZWQgYnJhbmNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCB6ZXJlIG1hc3RlciAmJgorCSEgdGVzdCAtZCB6ZXJlICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzL3plcmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgb3V0IHBhdGhzIG5vdCBjb21wbGFpbmluZyBhYm91dCBsaW5rZWQgY2hlY2tvdXRzJyAnCisJKAorCWNkIGV4aXN0aW5nX2VtcHR5ICYmCisJZWNobyBkaXJ0eSA+PmluaXQudCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgLS0gaW5pdC50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3b3JrdHJlZScgJworCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBoZXJlIG1hc3RlciAmJgorCSgKKwkJY2QgaGVyZSAmJgorCQl0ZXN0X2NtcCAuLi9pbml0LnQgaW5pdC50ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3QgYWN0dWFsICYmCisJCWdpdCBmc2NrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3b3JrdHJlZSBmcm9tIGEgc3ViZGlyJyAnCisJKAorCQlta2RpciBzdWIgJiYKKwkJY2Qgc3ViICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggaGVyZSBtYXN0ZXIgJiYKKwkJY2QgaGVyZSAmJgorCQl0ZXN0X2NtcCAuLi8uLi9pbml0LnQgaW5pdC50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiBmcm9tIGEgbGlua2VkIGNoZWNrb3V0JyAnCisJKAorCQljZCBoZXJlICYmCisJCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggbmVzdGVkLWhlcmUgbWFzdGVyICYmCisJCWNkIG5lc3RlZC1oZXJlICYmCisJCWdpdCBmc2NrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3b3JrdHJlZSBjcmVhdGluZyBuZXcgYnJhbmNoJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCAtYiBuZXdtYXN0ZXIgdGhlcmUgbWFzdGVyICYmCisJKAorCQljZCB0aGVyZSAmJgorCQl0ZXN0X2NtcCAuLi9pbml0LnQgaW5pdC50ICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJCWVjaG8gcmVmcy9oZWFkcy9uZXdtYXN0ZXIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWdpdCBmc2NrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWUgdGhlIHNhbWUgYnJhbmNoIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQnICcKKwkoCisJCWNkIGhlcmUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IG5ld21hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGllIHRoZSBzYW1lIGJyYW5jaCBpcyBhbHJlYWR5IGNoZWNrZWQgb3V0IChzeW1saW5rKScgJworCWhlYWQ9JChnaXQgLUMgdGhlcmUgcmV2LXBhcnNlIC0tZ2l0LXBhdGggSEVBRCkgJiYKKwlyZWY9JChnaXQgLUMgdGhlcmUgc3ltYm9saWMtcmVmIEhFQUQpICYmCisJcm0gIiRoZWFkIiAmJgorCWxuIC1zICIkcmVmIiAiJGhlYWQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGhlcmUgY2hlY2tvdXQgbmV3bWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBkaWUgdGhlIHNhbWUgYnJhbmNoIGlzIGFscmVhZHkgY2hlY2tlZCBvdXQnICcKKwkoCisJCWNkIGhlcmUgJiYKKwkJZ2l0IHdvcmt0cmVlIGFkZCAtLWZvcmNlIGFub3RoZXJuZXdtYXN0ZXIgbmV3bWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgZGllIG9uIHJlLWNoZWNraW5nIG91dCBjdXJyZW50IGJyYW5jaCcgJworCSgKKwkJY2QgdGhlcmUgJiYKKwkJZ2l0IGNoZWNrb3V0IG5ld21hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgZnJvbSBhIGJhcmUgcmVwbycgJworCSgKKwkJZ2l0IGNsb25lIC0tYmFyZSAuIGJhcmUgJiYKKwkJY2QgYmFyZSAmJgorCQlnaXQgd29ya3RyZWUgYWRkIC1iIGJhcmUtbWFzdGVyIC4uL3RoZXJlMiBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IGZyb20gYSBiYXJlIHJlcG8gd2l0aG91dCAiYWRkIicgJworCSgKKwkJY2QgYmFyZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGdyYWZ0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAuZ2l0L2luZm8vZ3JhZnRzICYmCisJdGVzdF9jb21taXQgYWJjICYmCisJU0hBMT1gZ2l0IHJldi1wYXJzZSBIRUFEYCAmJgorCXRlc3RfY29tbWl0IGRlZiAmJgorCXRlc3RfY29tbWl0IHh5eiAmJgorCWVjaG8gImBnaXQgcmV2LXBhcnNlIEhFQURgICRTSEExIiA+LmdpdC9pbmZvL2dyYWZ0cyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCXh5egorCWFiYworCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggZ3JhZnRlZCBtYXN0ZXIgJiYKKwlnaXQgLS1naXQtZGlyPWdyYWZ0ZWQvLmdpdCBsb2cgLS1mb3JtYXQ9JXMgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiBmcm9tIHJlbGF0aXZlIEhFQUQnICcKKwl0ZXN0X2NvbW1pdCBhICYmCisJdGVzdF9jb21taXQgYiAmJgorCXRlc3RfY29tbWl0IGMgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUR+MSA+ZXhwZWN0ZWQgJiYKKwlnaXQgd29ya3RyZWUgYWRkIHJlbGhlYWQgSEVBRH4xICYmCisJZ2l0IC1DIHJlbGhlYWQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIC1iIiB3aXRoIDxicmFuY2g+IG9taXR0ZWQnICcKKwlnaXQgd29ya3RyZWUgYWRkIC1iIGJ1cmJsZSBmbG9ybmsgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBidXJibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCAtLWRldGFjaCIgd2l0aCA8YnJhbmNoPiBvbWl0dGVkJyAnCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBmaXNoaG9vayAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ZWQgJiYKKwlnaXQgLUMgZmlzaGhvb2sgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBmaXNoaG9vayBzeW1ib2xpYy1yZWYgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiB3aXRoIDxicmFuY2g+IG9taXR0ZWQnICcKKwlnaXQgd29ya3RyZWUgYWRkIHdpZmZsZS9iYXQgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRCBiYXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgYXV0by12aXZpZnkgZG9lcyBub3QgY2xvYmJlciBleGlzdGluZyBicmFuY2gnICcKKwl0ZXN0X2NvbW1pdCBjMSAmJgorCXRlc3RfY29tbWl0IGMyICYmCisJZ2l0IGJyYW5jaCBwcmVjaW91cyBIRUFEfjEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgYWRkIHByZWNpb3VzICYmCisJdGVzdF9jbXBfcmV2IEhFQUR+MSBwcmVjaW91cyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHByZWNpb3VzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQiIG5vIGF1dG8tdml2aWZ5IHdpdGggLS1kZXRhY2ggYW5kIDxicmFuY2g+IG9taXR0ZWQnICcKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIG1pc2gvbWFzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgbWFzaCAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBtaXNoL21hc2ggc3ltYm9saWMtcmVmIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgLWIvLUIgbXV0dWFsbHkgZXhjbHVzaXZlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCAtYiBwb29kbGUgLUIgcG9vZGxlIGJhbWJvbyBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImFkZCIgLWIvLS1kZXRhY2ggbXV0dWFsbHkgZXhjbHVzaXZlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHdvcmt0cmVlIGFkZCAtYiBwb29kbGUgLS1kZXRhY2ggYmFtYm9vIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIiAtQi8tLWRldGFjaCBtdXR1YWxseSBleGNsdXNpdmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgd29ya3RyZWUgYWRkIC1CIHBvb2RsZSAtLWRldGFjaCBiYW1ib28gbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGNsb25lIGZyb20gbGlua2VkIGNoZWNrb3V0JyAnCisJZ2l0IGNsb25lIC0tbG9jYWwgaGVyZSBoZXJlLWNsb25lICYmCisJKCBjZCBoZXJlLWNsb25lICYmIGdpdCBmc2NrICkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDI2LXdvcmt0cmVlLXBydW5lLnNoIGIvdC90MjAyNi13b3JrdHJlZS1wcnVuZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMGYxZTNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyNi13b3JrdHJlZS1wcnVuZS5zaApAQCAtMCwwICsxLDk2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHJ1bmUgJEdJVF9ESVIvd29ya3RyZWVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBpbml0aWFsaXplICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JrdHJlZSBwcnVuZSBvbiBub3JtYWwgcmVwbycgJworCWdpdCB3b3JrdHJlZSBwcnVuZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB3b3JrdHJlZSBwcnVuZSBhYmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgZmlsZXMgaW5zaWRlICRHSVRfRElSL3dvcmt0cmVlcycgJworCW1rZGlyIC5naXQvd29ya3RyZWVzICYmCisJOiA+LmdpdC93b3JrdHJlZXMvYWJjICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lIC0tdmVyYm9zZSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK1JlbW92aW5nIHdvcmt0cmVlcy9hYmM6IG5vdCBhIHZhbGlkIGRpcmVjdG9yeQorRU9GCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkhIHRlc3QgLWYgLmdpdC93b3JrdHJlZXMvYWJjICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIGRpcmVjdG9yaWVzIHdpdGhvdXQgZ2l0ZGlyJyAnCisJbWtkaXIgLXAgLmdpdC93b3JrdHJlZXMvZGVmL2FiYyAmJgorCTogPi5naXQvd29ya3RyZWVzL2RlZi9kZWYgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorUmVtb3Zpbmcgd29ya3RyZWVzL2RlZjogZ2l0ZGlyIGZpbGUgZG9lcyBub3QgZXhpc3QKK0VPRgorCWdpdCB3b3JrdHJlZSBwcnVuZSAtLXZlcmJvc2UgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzL2RlZiAmJgorCSEgdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNBTklUWSAncHJ1bmUgZGlyZWN0b3JpZXMgd2l0aCB1bnJlYWRhYmxlIGdpdGRpcicgJworCW1rZGlyIC1wIC5naXQvd29ya3RyZWVzL2RlZi9hYmMgJiYKKwk6ID4uZ2l0L3dvcmt0cmVlcy9kZWYvZGVmICYmCisJOiA+LmdpdC93b3JrdHJlZXMvZGVmL2dpdGRpciAmJgorCWNobW9kIHUtciAuZ2l0L3dvcmt0cmVlcy9kZWYvZ2l0ZGlyICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lIC0tdmVyYm9zZSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiUmVtb3Zpbmcgd29ya3RyZWVzL2RlZjogdW5hYmxlIHRvIHJlYWQgZ2l0ZGlyIGZpbGUiIGFjdHVhbCAmJgorCSEgdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcy9kZWYgJiYKKwkhIHRlc3QgLWQgLmdpdC93b3JrdHJlZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgZGlyZWN0b3JpZXMgd2l0aCBpbnZhbGlkIGdpdGRpcicgJworCW1rZGlyIC1wIC5naXQvd29ya3RyZWVzL2RlZi9hYmMgJiYKKwk6ID4uZ2l0L3dvcmt0cmVlcy9kZWYvZGVmICYmCisJOiA+LmdpdC93b3JrdHJlZXMvZGVmL2dpdGRpciAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZSAtLXZlcmJvc2UgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIlJlbW92aW5nIHdvcmt0cmVlcy9kZWY6IGludmFsaWQgZ2l0ZGlyIGZpbGUiIGFjdHVhbCAmJgorCSEgdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcy9kZWYgJiYKKwkhIHRlc3QgLWQgLmdpdC93b3JrdHJlZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgZGlyZWN0b3JpZXMgd2l0aCBnaXRkaXIgcG9pbnRpbmcgdG8gbm93aGVyZScgJworCW1rZGlyIC1wIC5naXQvd29ya3RyZWVzL2RlZi9hYmMgJiYKKwk6ID4uZ2l0L3dvcmt0cmVlcy9kZWYvZGVmICYmCisJZWNobyAiJChwd2QpIi9ub3doZXJlID4uZ2l0L3dvcmt0cmVlcy9kZWYvZ2l0ZGlyICYmCisJZ2l0IHdvcmt0cmVlIHBydW5lIC0tdmVyYm9zZSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiUmVtb3Zpbmcgd29ya3RyZWVzL2RlZjogZ2l0ZGlyIGZpbGUgcG9pbnRzIHRvIG5vbi1leGlzdGVudCBsb2NhdGlvbiIgYWN0dWFsICYmCisJISB0ZXN0IC1kIC5naXQvd29ya3RyZWVzL2RlZiAmJgorCSEgdGVzdCAtZCAuZ2l0L3dvcmt0cmVlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgcHJ1bmUgbG9ja2VkIGNoZWNrb3V0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yIC5naXQvd29ya3RyZWVzICYmCisJbWtkaXIgLXAgLmdpdC93b3JrdHJlZXMvZ2hpICYmCisJOiA+LmdpdC93b3JrdHJlZXMvZ2hpL2xvY2tlZCAmJgorCWdpdCB3b3JrdHJlZSBwcnVuZSAmJgorCXRlc3QgLWQgLmdpdC93b3JrdHJlZXMvZ2hpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBwcnVuZSByZWNlbnQgY2hlY2tvdXRzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1yIC5naXQvd29ya3RyZWVzICYmCisJbWtkaXIgenogJiYKKwlta2RpciAtcCAuZ2l0L3dvcmt0cmVlcy9qbG0gJiYKKwllY2hvICIkKHB3ZCkiL3p6ID4uZ2l0L3dvcmt0cmVlcy9qbG0vZ2l0ZGlyICYmCisJcm1kaXIgenogJiYKKwlnaXQgd29ya3RyZWUgcHJ1bmUgLS12ZXJib3NlIC0tZXhwaXJlPTIuZGF5cy5hZ28gJiYKKwl0ZXN0IC1kIC5naXQvd29ya3RyZWVzL2psbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgcHJ1bmUgcHJvcGVyIGNoZWNrb3V0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBybSAtciAuZ2l0L3dvcmt0cmVlcyAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggIiRQV0Qvbm9wIiBtYXN0ZXIgJiYKKwlnaXQgd29ya3RyZWUgcHJ1bmUgJiYKKwl0ZXN0IC1kIC5naXQvd29ya3RyZWVzL25vcAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIwMjctd29ya3RyZWUtbGlzdC5zaCBiL3QvdDIwMjctd29ya3RyZWUtbGlzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NWViYjFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAyNy13b3JrdHJlZS1saXN0LnNoCkBAIC0wLDAgKzEsODkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCB3b3JrdHJlZSBsaXN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJsaXN0IiBhbGwgd29ya3RyZWVzIGZyb20gbWFpbicgJworCWVjaG8gIiQoZ2l0IHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpIFskKGdpdCBzeW1ib2xpYy1yZWYgLS1zaG9ydCBIRUFEKV0iID5leHBlY3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBoZXJlICYmIGdpdCB3b3JrdHJlZSBwcnVuZSIgJiYKKwlnaXQgd29ya3RyZWUgYWRkIC0tZGV0YWNoIGhlcmUgbWFzdGVyICYmCisJZWNobyAiJChnaXQgLUMgaGVyZSByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAoZGV0YWNoZWQgSEVBRCkiID4+ZXhwZWN0ICYmCisJZ2l0IHdvcmt0cmVlIGxpc3QgfCBzZWQgInMvICAqLyAvZyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImxpc3QiIGFsbCB3b3JrdHJlZXMgZnJvbSBsaW5rZWQnICcKKwllY2hvICIkKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSBbJChnaXQgc3ltYm9saWMtcmVmIC0tc2hvcnQgSEVBRCldIiA+ZXhwZWN0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgaGVyZSAmJiBnaXQgd29ya3RyZWUgcHJ1bmUiICYmCisJZ2l0IHdvcmt0cmVlIGFkZCAtLWRldGFjaCBoZXJlIG1hc3RlciAmJgorCWVjaG8gIiQoZ2l0IC1DIGhlcmUgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbCkgJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgKGRldGFjaGVkIEhFQUQpIiA+PmV4cGVjdCAmJgorCWdpdCAtQyBoZXJlIHdvcmt0cmVlIGxpc3QgfCBzZWQgInMvICAqLyAvZyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImxpc3QiIGFsbCB3b3JrdHJlZXMgLS1wb3JjZWxhaW4nICcKKwllY2hvICJ3b3JrdHJlZSAkKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSIgPmV4cGVjdCAmJgorCWVjaG8gIkhFQUQgJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA+PmV4cGVjdCAmJgorCWVjaG8gImJyYW5jaCAkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID4+ZXhwZWN0ICYmCisJZWNobyA+PmV4cGVjdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGhlcmUgJiYgZ2l0IHdvcmt0cmVlIHBydW5lIiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLS1kZXRhY2ggaGVyZSBtYXN0ZXIgJiYKKwllY2hvICJ3b3JrdHJlZSAkKGdpdCAtQyBoZXJlIHJldi1wYXJzZSAtLXNob3ctdG9wbGV2ZWwpIiA+PmV4cGVjdCAmJgorCWVjaG8gIkhFQUQgJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA+PmV4cGVjdCAmJgorCWVjaG8gImRldGFjaGVkIiA+PmV4cGVjdCAmJgorCWVjaG8gPj5leHBlY3QgJiYKKwlnaXQgd29ya3RyZWUgbGlzdCAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXJlIHJlcG8gc2V0dXAnICcKKwlnaXQgaW5pdCAtLWJhcmUgYmFyZTEgJiYKKwllY2hvICJkYXRhIiA+ZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSJGaWxlMTogYWRkIGRhdGEiICYmCisJZ2l0IHB1c2ggYmFyZTEgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcibGlzdCIgYWxsIHdvcmt0cmVlcyBmcm9tIGJhcmUgbWFpbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHRoZXJlICYmIGdpdCAtQyBiYXJlMSB3b3JrdHJlZSBwcnVuZSIgJiYKKwlnaXQgLUMgYmFyZTEgd29ya3RyZWUgYWRkIC0tZGV0YWNoIC4uL3RoZXJlIG1hc3RlciAmJgorCWVjaG8gIiQocHdkKS9iYXJlMSAoYmFyZSkiID5leHBlY3QgJiYKKwllY2hvICIkKGdpdCAtQyB0aGVyZSByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSAkKGdpdCAtQyB0aGVyZSByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAoZGV0YWNoZWQgSEVBRCkiID4+ZXhwZWN0ICYmCisJZ2l0IC1DIGJhcmUxIHdvcmt0cmVlIGxpc3QgfCBzZWQgInMvICAqLyAvZyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImxpc3QiIGFsbCB3b3JrdHJlZXMgLS1wb3JjZWxhaW4gZnJvbSBiYXJlIG1haW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiB0aGVyZSAmJiBnaXQgLUMgYmFyZTEgd29ya3RyZWUgcHJ1bmUiICYmCisJZ2l0IC1DIGJhcmUxIHdvcmt0cmVlIGFkZCAtLWRldGFjaCAuLi90aGVyZSBtYXN0ZXIgJiYKKwllY2hvICJ3b3JrdHJlZSAkKHB3ZCkvYmFyZTEiID5leHBlY3QgJiYKKwllY2hvICJiYXJlIiA+PmV4cGVjdCAmJgorCWVjaG8gPj5leHBlY3QgJiYKKwllY2hvICJ3b3JrdHJlZSAkKGdpdCAtQyB0aGVyZSByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSIgPj5leHBlY3QgJiYKKwllY2hvICJIRUFEICQoZ2l0IC1DIHRoZXJlIHJldi1wYXJzZSBIRUFEKSIgPj5leHBlY3QgJiYKKwllY2hvICJkZXRhY2hlZCIgPj5leHBlY3QgJiYKKwllY2hvID4+ZXhwZWN0ICYmCisJZ2l0IC1DIGJhcmUxIHdvcmt0cmVlIGxpc3QgLS1wb3JjZWxhaW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImxpc3QiIGFsbCB3b3JrdHJlZXMgZnJvbSBsaW5rZWQgd2l0aCBhIGJhcmUgbWFpbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIHRoZXJlICYmIGdpdCAtQyBiYXJlMSB3b3JrdHJlZSBwcnVuZSIgJiYKKwlnaXQgLUMgYmFyZTEgd29ya3RyZWUgYWRkIC0tZGV0YWNoIC4uL3RoZXJlIG1hc3RlciAmJgorCWVjaG8gIiQocHdkKS9iYXJlMSAoYmFyZSkiID5leHBlY3QgJiYKKwllY2hvICIkKGdpdCAtQyB0aGVyZSByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKSAkKGdpdCAtQyB0aGVyZSByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAoZGV0YWNoZWQgSEVBRCkiID4+ZXhwZWN0ICYmCisJZ2l0IC1DIHRoZXJlIHdvcmt0cmVlIGxpc3QgfCBzZWQgInMvICAqLyAvZyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZSByZXBvIGNsZWFudXAnICcKKwlybSAtcmYgYmFyZTEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDMwLXVucmVzb2x2ZS1pbmZvLnNoIGIvdC90MjAzMC11bnJlc29sdmUtaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMDkxOTliCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjAzMC11bnJlc29sdmUtaW5mby5zaApAQCAtMCwwICsxLDE5NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3VuZG9pbmcgcmVzb2x1dGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX3Jlc29sdmVfdW5kbyAoKSB7CisJbXNnPSQxCisJc2hpZnQKKwl3aGlsZSBjYXNlICQjIGluCisJMCkJYnJlYWsgOzsKKwkxfDJ8MykJZGllICJCdWcgaW4gY2hlY2stcmVzb2x2ZS11bmRvIHRlc3QiIDs7CisJZXNhYworCWRvCisJCXBhdGg9JDEKKwkJc2hpZnQKKwkJZm9yIHN0YWdlIGluIDEgMiAzCisJCWRvCisJCQlzaGExPSQxCisJCQlzaGlmdAorCQkJY2FzZSAiJHNoYTEiIGluCisJCQknJykgY29udGludWUgOzsKKwkJCWVzYWMKKwkJCXNoYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkc2hhMSIpCisJCQlwcmludGYgIjEwMDY0NCAlcyAlc1x0JXNcbiIgJHNoYTEgJHN0YWdlICRwYXRoCisJCWRvbmUKKwlkb25lID4iJG1zZy5leHBlY3QiICYmCisJZ2l0IGxzLWZpbGVzIC0tcmVzb2x2ZS11bmRvID4iJG1zZy5hY3R1YWwiICYmCisJdGVzdF9jbXAgIiRtc2cuZXhwZWN0IiAiJG1zZy5hY3R1YWwiCit9CisKK3ByaW1lX3Jlc29sdmVfdW5kbyAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBzZWNvbmReMCAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0aGlyZF4wICYmCisJZWNobyBtZXJnZSBkb2VzIG5vdCBsZWF2ZSBhbnl0aGluZyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBlbXB0eSAmJgorCWVjaG8gZGlmZmVyZW50ID5maS9sZSAmJgorCWdpdCBhZGQgZmkvbGUgJiYKKwllY2hvIHJlc29sdmluZyByZWNvcmRzICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIHJlY29yZGVkIGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIGZpICYmCisJcHJpbnRmICJhXDBhIiA+YmluYXJ5ICYmCisJZ2l0IGFkZCBiaW5hcnkgJiYKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGZpL2xlIGZpcnN0ICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJZ2l0IGJyYW5jaCBhbm90aGVyICYmCisJcHJpbnRmICJhXDBiIiA+YmluYXJ5ICYmCisJZ2l0IGFkZCBiaW5hcnkgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmQgZmkvbGUgc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCB0aGlyZCBmaS9sZSB0aGlyZCAmJgorCWdpdCBicmFuY2ggYWRkLWFkZCAmJgorCWdpdCBjaGVja291dCBhbm90aGVyICYmCisJdGVzdF9jb21taXQgZm91cnRoIGZpL2xlIGZvdXJ0aCAmJgorCWdpdCBjaGVja291dCBhZGQtYWRkICYmCisJdGVzdF9jb21taXQgZmlmdGggYWRkLWRpZmZlcmVudGx5ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcmVjb3JkcyBzd2l0Y2ggY2xlYXJzJyAnCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBtZXJnZWQgJiYKKwllY2hvIGNvbW1pdHRpbmcga2VlcHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8ga2VwdCBmaS9sZSBpbml0aWFsOmZpL2xlIHNlY29uZDpmaS9sZSB0aGlyZDpmaS9sZSAmJgorCWdpdCBjaGVja291dCBzZWNvbmReMCAmJgorCWVjaG8gc3dpdGNoaW5nIGNsZWFycyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBjbGVhcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlY29yZHMgcmVzZXQgY2xlYXJzJyAnCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBtZXJnZWQgJiYKKwllY2hvIGNvbW1pdHRpbmcga2VlcHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8ga2VwdCBmaS9sZSBpbml0aWFsOmZpL2xlIHNlY29uZDpmaS9sZSB0aGlyZDpmaS9sZSAmJgorCisJZWNobyBtZXJnZSBjbGVhcnMgdXBmcm9udCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmb3VydGheMCAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBudWtlZCAmJgorCisJZ2l0IHJtIC1mIGZpL2xlICYmCisJZWNobyByZXNvbHZpbmcgcmVjb3JkcyAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyByZWNvcmRlZCBmaS9sZSBpbml0aWFsOmZpL2xlIEhFQUQ6ZmkvbGUgZm91cnRoOmZpL2xlICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyByZXNldHRpbmcgZGlzY2FyZHMgJiYKKwljaGVja19yZXNvbHZlX3VuZG8gZGlzY2FyZGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsdW1iaW5nIGNsZWFycycgJworCXByaW1lX3Jlc29sdmVfdW5kbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbWVyZ2VkICYmCisJZWNobyBjb21taXR0aW5nIGtlZXBzICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGtlcHQgZmkvbGUgaW5pdGlhbDpmaS9sZSBzZWNvbmQ6ZmkvbGUgdGhpcmQ6ZmkvbGUgJiYKKworCWVjaG8gcGx1bWJpbmcgY2xlYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tY2xlYXItcmVzb2x2ZS11bmRvICYmCisJY2hlY2tfcmVzb2x2ZV91bmRvIGNsZWFyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHJlY29yZHMgY2hlY2tvdXQgLW0gdW5kb2VzJyAnCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJZ2l0IGRpZmYgSEVBRCAmJgorCWdpdCBjaGVja291dCAtLWNvbmZsaWN0PW1lcmdlIGZpL2xlICYmCisJZWNobyBjaGVja291dCB1c2VkIHRoZSByZWNvcmQgYW5kIHJlbW92ZWQgaXQgJiYKKwljaGVja19yZXNvbHZlX3VuZG8gcmVtb3ZlZCAmJgorCWVjaG8gdGhlIGluZGV4IGFuZCB0aGUgd29yayB0cmVlIGlzIHVubWVyZ2VkIGFnYWluICYmCisJZ2l0IGRpZmYgPmFjdHVhbCAmJgorCWdyZXAgIl4rKzw8PDw8PDwiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bm1lcmdlIHdpdGggcGx1bWJpbmcnICcKKwlwcmltZV9yZXNvbHZlX3VuZG8gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tdW5yZXNvbHZlIGZpL2xlICYmCisJZ2l0IGxzLWZpbGVzIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgYW5kIHJlcmVyZSBmb3JnZXQnICcKKwlta2RpciAuZ2l0L3JyLWNhY2hlICYmCisJcHJpbWVfcmVzb2x2ZV91bmRvICYmCisJZWNobyByZWNvcmQgdGhlIHJlc29sdXRpb24gJiYKKwlnaXQgcmVyZXJlICYmCisJcmVyZXJlX2lkPSQoY2QgLmdpdC9yci1jYWNoZSAmJiBlY2hvICovcG9zdGltYWdlKSAmJgorCXJlcmVyZV9pZD0ke3JlcmVyZV9pZCUvcG9zdGltYWdlfSAmJgorCXRlc3QgLWYgLmdpdC9yci1jYWNoZS8kcmVyZXJlX2lkL3Bvc3RpbWFnZSAmJgorCWdpdCBjaGVja291dCAtbSBmaS9sZSAmJgorCWVjaG8gcmVzdXJyZWN0IHRoZSBjb25mbGljdCAmJgorCWdyZXAgIl49PT09PT09IiBmaS9sZSAmJgorCWVjaG8gcmVyZXNvbHZlIHRoZSBjb25mbGljdCAmJgorCWdpdCByZXJlcmUgJiYKKwl0ZXN0ICJ6JChjYXQgZmkvbGUpIiA9IHpkaWZmZXJlbnQgJiYKKwllY2hvIHJlZ2lzdGVyIHRoZSByZXNvbHV0aW9uIGFnYWluICYmCisJZ2l0IGFkZCBmaS9sZSAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBrZXB0IGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCWdpdCByZXJlcmUgZm9yZ2V0IGZpL2xlICYmCisJISB0ZXN0IC1mIC5naXQvcnItY2FjaGUvJHJlcmVyZV9pZC9wb3N0aW1hZ2UgJiYKKwl0ciAiXDAiICJcbiIgPC5naXQvTUVSR0VfUlIgPmFjdHVhbCAmJgorCWVjaG8gIiRyZXJlcmVfaWQJZmkvbGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSBhbmQgcmVyZXJlIGZvcmdldCAoc3ViZGlyZWN0b3J5KScgJworCXJtIC1mciAuZ2l0L3JyLWNhY2hlICYmCisJbWtkaXIgLmdpdC9yci1jYWNoZSAmJgorCXByaW1lX3Jlc29sdmVfdW5kbyAmJgorCWVjaG8gcmVjb3JkIHRoZSByZXNvbHV0aW9uICYmCisJKGNkIGZpICYmIGdpdCByZXJlcmUpICYmCisJcmVyZXJlX2lkPSQoY2QgLmdpdC9yci1jYWNoZSAmJiBlY2hvICovcG9zdGltYWdlKSAmJgorCXJlcmVyZV9pZD0ke3JlcmVyZV9pZCUvcG9zdGltYWdlfSAmJgorCXRlc3QgLWYgLmdpdC9yci1jYWNoZS8kcmVyZXJlX2lkL3Bvc3RpbWFnZSAmJgorCShjZCBmaSAmJiBnaXQgY2hlY2tvdXQgLW0gbGUpICYmCisJZWNobyByZXN1cnJlY3QgdGhlIGNvbmZsaWN0ICYmCisJZ3JlcCAiXj09PT09PT0iIGZpL2xlICYmCisJZWNobyByZXJlc29sdmUgdGhlIGNvbmZsaWN0ICYmCisJKGNkIGZpICYmIGdpdCByZXJlcmUpICYmCisJdGVzdCAieiQoY2F0IGZpL2xlKSIgPSB6ZGlmZmVyZW50ICYmCisJZWNobyByZWdpc3RlciB0aGUgcmVzb2x1dGlvbiBhZ2FpbiAmJgorCShjZCBmaSAmJiBnaXQgYWRkIGxlKSAmJgorCWNoZWNrX3Jlc29sdmVfdW5kbyBrZXB0IGZpL2xlIGluaXRpYWw6ZmkvbGUgc2Vjb25kOmZpL2xlIHRoaXJkOmZpL2xlICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCShjZCBmaSAmJiBnaXQgcmVyZXJlIGZvcmdldCBsZSkgJiYKKwkhIHRlc3QgLWYgLmdpdC9yci1jYWNoZS8kcmVyZXJlX2lkL3Bvc3RpbWFnZSAmJgorCXRyICJcMCIgIlxuIiA8LmdpdC9NRVJHRV9SUiA+YWN0dWFsICYmCisJZWNobyAiJHJlcmVyZV9pZAlmaS9sZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGZvcmdldCAoYmluYXJ5KScgJworCWdpdCBjaGVja291dCAtZiBzaWRlICYmCisJcHJpbnRmICJhXDBjIiA+YmluYXJ5ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBiaW5hcnkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2Vjb25kICYmCisJZ2l0IHJlcmVyZSBmb3JnZXQgYmluYXJ5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZSBmb3JnZXQgKGFkZC1hZGQgY29uZmxpY3QpJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWVjaG8gbWFzdGVyID5hZGQtZGlmZmVyZW50bHkgJiYKKwlnaXQgYWRkIGFkZC1kaWZmZXJlbnRseSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBkaWZmZXJlbnRseSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlmdGggJiYKKwlnaXQgcmVyZXJlIGZvcmdldCBhZGQtZGlmZmVyZW50bHkgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJubyByZW1lbWJlcmVkIiBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMDUwLWdpdC1kaXItcmVsYXRpdmUuc2ggYi90L3QyMDUwLWdpdC1kaXItcmVsYXRpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjFmNDY1OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIwNTAtZ2l0LWRpci1yZWxhdGl2ZS5zaApAQCAtMCwwICsxLDU1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgcHJvYmxlbXMgd2l0aCByZWxhdGl2ZSBHSVRfRElSCisKK1RoaXMgdGVzdCBjcmVhdGVzIGEgd29ya2luZyB0cmVlIHN0YXRlIHdpdGggYSBmaWxlIGFuZCBzdWJkaXI6CisKKyAgdG9wIChjb21taXR0ZWQgc2V2ZXJhbCB0aW1lcykKKyAgc3ViZGlyIChhIHN1YmRpcmVjdG9yeSkKKworSXQgY3JlYXRlcyBhIGNvbW1pdC1ob29rIGFuZCB0ZXN0cyBpdCwgdGhlbiBtb3ZlcyAuZ2l0CitpbnRvIHRoZSBzdWJkaXIgd2hpbGUga2VlcGluZyB0aGUgd29ya3RyZWUgbG9jYXRpb24sCithbmQgdHJpZXMgY29tbWl0cyBmcm9tIHRoZSB0b3AgYW5kIHRoZSBzdWJkaXIsIGNoZWNraW5nCit0aGF0IHRoZSBjb21taXQtaG9vayBzdGlsbCBnZXRzIGNhbGxlZC4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitDT01NSVRfRklMRT0iJChwd2QpL291dHB1dCIKK2V4cG9ydCBDT01NSVRfRklMRQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR0aW5nIHVwIHBvc3QtY29tbWl0IGhvb2snICcKK21rZGlyIC1wIC5naXQvaG9va3MgJiYKK2VjaG8gPi5naXQvaG9va3MvcG9zdC1jb21taXQgIiMhL2Jpbi9zaAordG91Y2ggXCJcJHtDT01NSVRfRklMRX1cIgorZWNobyBQb3N0IGNvbW1pdCBob29rIHdhcyBjYWxsZWQuIiAmJgorY2htb2QgK3ggLmdpdC9ob29rcy9wb3N0LWNvbW1pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jb21taXQgaG9vayB1c2VkIG9yZGluYXJpbHknICcKK2VjaG8gaW5pdGlhbCA+dG9wICYmCitnaXQgYWRkIHRvcCAmJgorZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCit0ZXN0IC1yICIke0NPTU1JVF9GSUxFfSIKKycKKworcm0gLXJmICIke0NPTU1JVF9GSUxFfSIKK21rZGlyIHN1YmRpcgorbXYgLmdpdCBzdWJkaXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jb21taXQtaG9vayBjcmVhdGVkIGFuZCB1c2VkIGZyb20gdG9wIGRpcicgJworZWNobyBjaGFuZ2VkID50b3AgJiYKK2dpdCAtLWdpdC1kaXIgc3ViZGlyLy5naXQgYWRkIHRvcCAmJgorZ2l0IC0tZ2l0LWRpciBzdWJkaXIvLmdpdCBjb21taXQgLW0gdG9wY29tbWl0ICYmCit0ZXN0IC1yICIke0NPTU1JVF9GSUxFfSIKKycKKworcm0gLXJmICIke0NPTU1JVF9GSUxFfSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jb21taXQtaG9vayBmcm9tIHN1YiBkaXInICcKK2VjaG8gY2hhbmdlZCBhZ2FpbiA+dG9wICYmCitjZCBzdWJkaXIgJiYKK2dpdCAtLWdpdC1kaXIgLmdpdCAtLXdvcmstdHJlZSAuLiBhZGQgLi4vdG9wICYmCitnaXQgLS1naXQtZGlyIC5naXQgLS13b3JrLXRyZWUgLi4gY29tbWl0IC1tIHN1YmNvbW1pdCAmJgordGVzdCAtciAiJHtDT01NSVRfRklMRX0iCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjEwMC11cGRhdGUtY2FjaGUtYmFkcGF0aC5zaCBiL3QvdDIxMDAtdXBkYXRlLWNhY2hlLWJhZHBhdGguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmRmM2ZkZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDAtdXBkYXRlLWNhY2hlLWJhZHBhdGguc2gKQEAgLTAsMCArMSw2MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgdXBkYXRlLWluZGV4IG5vbnNlbnNlLXBhdGggdGVzdC4KKworVGhpcyB0ZXN0IGNyZWF0ZXMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgaW4gdGhlIGNhY2hlOgorCisgICAgcGF0aDAgICAgICAgLSBhIGZpbGUKKyAgICBwYXRoMSAgICAgICAtIGEgc3ltbGluaworICAgIHBhdGgyL2ZpbGUyIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDMvZmlsZTMgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKworYW5kIHRyaWVzIHRvIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgdGhlIGZvbGxvd2luZzoKKworICAgIHBhdGgwL2ZpbGUwIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDEvZmlsZTEgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMiAgICAgICAtIGEgZmlsZQorICAgIHBhdGgzICAgICAgIC0gYSBzeW1saW5rCisKK0FsbCBvZiB0aGUgYXR0ZW1wdHMgc2hvdWxkIGZhaWwuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitta2RpciBwYXRoMiBwYXRoMworZGF0ZSA+cGF0aDAKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKK3RoZW4KKwlsbiAtcyB4eXp6eSBwYXRoMQorZWxzZQorCWRhdGUgPiBwYXRoMQorZmkKK2RhdGUgPnBhdGgyL2ZpbGUyCitkYXRlID5wYXRoMy9maWxlMworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0byBhZGQgdmFyaW91cyBwYXRocy4nIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLSBwYXRoMCBwYXRoMSBwYXRoMi9maWxlMiBwYXRoMy9maWxlMycKKworcm0gLWZyIHBhdGg/CisKK21rZGlyIHBhdGgwIHBhdGgxCitkYXRlID5wYXRoMgoraWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUwordGhlbgorCWxuIC1zIGZyb3R6IHBhdGgzCitlbHNlCisJZGF0ZSA+IHBhdGgzCitmaQorZGF0ZSA+cGF0aDAvZmlsZTAKK2RhdGUgPnBhdGgxL2ZpbGUxCisKK2ZvciBwIGluIHBhdGgwL2ZpbGUwIHBhdGgxL2ZpbGUxIHBhdGgyIHBhdGgzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSAgICAiZ2l0IHVwZGF0ZS1pbmRleCB0byBhZGQgY29uZmxpY3RpbmcgcGF0aCAkcCBzaG91bGQgZmFpbC4iIFwKKwkgICAgInRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0gJHAiCitkb25lCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDEtdXBkYXRlLWluZGV4LXJldXBkYXRlLnNoIGIvdC90MjEwMS11cGRhdGUtaW5kZXgtcmV1cGRhdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzhiY2U4YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDEtdXBkYXRlLWluZGV4LXJldXBkYXRlLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHVwZGF0ZS1pbmRleCAtLWFnYWluIHRlc3QuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPiBleHBlY3RlZCA8PFxFT0YKKzEwMDY0NCAzYjE4ZTUxMmRiYTc5ZTRjODMwMGRkMDhhZWIzN2Y4ZTcyOGI4ZGFkIDAJZmlsZTEKKzEwMDY0NCA5ZGI4ODkzODU2YThhMDJlYWE3MzQ3MDA1NGI3YzFjNWE3YzgyZTQ3IDAJZmlsZTIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tYWRkJyBcCisJJ2VjaG8gaGVsbG8gd29ybGQgPmZpbGUxICYmCisJIGVjaG8gZ29vZGJ5ZSBwZW9wbGUgPmZpbGUyICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZTEgZmlsZTIgJiYKKwkgZ2l0IGxzLWZpbGVzIC1zID5jdXJyZW50ICYmCisJIGNtcCBjdXJyZW50IGV4cGVjdGVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1hZ2FpbicgXAorCSdybSAtZiBmaWxlMSAmJgorCWVjaG8gaGVsbG8gZXZlcnlib2R5ID5maWxlMiAmJgorCWlmIGdpdCB1cGRhdGUtaW5kZXggLS1hZ2FpbgorCXRoZW4KKwkJZWNobyBzaG91bGQgaGF2ZSByZWZ1c2VkIHRvIHJlbW92ZSBmaWxlMQorCQlleGl0IDEKKwllbHNlCisJCWVjaG8gaGFwcHkgLSBmYWlsZWQgYXMgZXhwZWN0ZWQKKwlmaSAmJgorCSBnaXQgbHMtZmlsZXMgLXMgPmN1cnJlbnQgJiYKKwkgY21wIGN1cnJlbnQgZXhwZWN0ZWQnCisKK2NhdCA+IGV4cGVjdGVkIDw8XEVPRgorMTAwNjQ0IDBmMWFlMTQyMmMyYmY0M2YxMTdkM2RiZDcxNWM5ODhhOWVkMjEwM2YgMAlmaWxlMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1yZW1vdmUgLS1hZ2FpbicgXAorCSdnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tYWdhaW4gJiYKKwkgZ2l0IGxzLWZpbGVzIC1zID5jdXJyZW50ICYmCisJIGNtcCBjdXJyZW50IGV4cGVjdGVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXJzdCBjb21taXQnICdnaXQgY29tbWl0IC1tIGluaXRpYWwnCisKK2NhdCA+IGV4cGVjdGVkIDw8XEVPRgorMTAwNjQ0IDUzYWI0NDZjM2Y0ZTQyY2U5YmI3MjhhMGNjYjI4M2ExMDFiZTQ5NzkgMAlkaXIxL2ZpbGUzCisxMDA2NDQgMGYxYWUxNDIyYzJiZjQzZjExN2QzZGJkNzE1Yzk4OGE5ZWQyMTAzZiAwCWZpbGUyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCBhZ2FpbicgXAorCSdta2RpciAtcCBkaXIxICYmCisJZWNobyBoZWxsbyB3b3JsZCA+ZGlyMS9maWxlMyAmJgorCWVjaG8gZ29vZGJ5ZSBwZW9wbGUgPmZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMiBkaXIxL2ZpbGUzICYmCisJZWNobyBoZWxsbyBldmVyeWJvZHkgPmZpbGUyICYmCisJZWNobyBoYXBweSA+ZGlyMS9maWxlMyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZ2FpbiAmJgorCWdpdCBscy1maWxlcyAtcyA+Y3VycmVudCAmJgorCWNtcCBjdXJyZW50IGV4cGVjdGVkJworCitjYXQgPiBleHBlY3RlZCA8PFxFT0YKKzEwMDY0NCBkN2ZiM2Y2OTVmMDZjNzU5ZGJmM2FiMDAwNDZlN2NjMmRhMjJkMTBmIDAJZGlyMS9maWxlMworMTAwNjQ0IDBmMWFlMTQyMmMyYmY0M2YxMTdkM2RiZDcxNWM5ODhhOWVkMjEwM2YgMAlmaWxlMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS11cGRhdGUgZnJvbSBzdWJkaXInIFwKKwknZWNobyBub3Qgc28gaGFwcHkgPmZpbGUyICYmCisJKGNkIGRpcjEgJiYKKwljYXQgLi4vZmlsZTIgPmZpbGUzICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFnYWluCisJKSAmJgorCWdpdCBscy1maWxlcyAtcyA+Y3VycmVudCAmJgorCWNtcCBjdXJyZW50IGV4cGVjdGVkJworCitjYXQgPiBleHBlY3RlZCA8PFxFT0YKKzEwMDY0NCA1OTRmYjViYjE3NTlkOTA5OThlMmJmMmEzODI2MWFlOGUyNDNjNzYwIDAJZGlyMS9maWxlMworMTAwNjQ0IDBmMWFlMTQyMmMyYmY0M2YxMTdkM2RiZDcxNWM5ODhhOWVkMjEwM2YgMAlmaWxlMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS11cGRhdGUgd2l0aCBwYXRoc3BlYycgXAorCSdlY2hvIHZlcnkgaGFwcHkgPmZpbGUyICYmCisJY2F0IGZpbGUyID5kaXIxL2ZpbGUzICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFnYWluIGRpcjEvICYmCisJZ2l0IGxzLWZpbGVzIC1zID5jdXJyZW50ICYmCisJY21wIGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjEwMi11cGRhdGUtaW5kZXgtc3ltbGlua3Muc2ggYi90L3QyMTAyLXVwZGF0ZS1pbmRleC1zeW1saW5rcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZDBkMGEzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MjEwMi11cGRhdGUtaW5kZXgtc3ltbGlua3Muc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBTaXh0CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCB1cGRhdGUtaW5kZXggb24gZmlsZXN5c3RlbSB3L28gc3ltbGlua3MgdGVzdC4KKworVGhpcyB0ZXN0cyB0aGF0IGdpdCB1cGRhdGUtaW5kZXgga2VlcHMgdGhlIHN5bWJvbGljIGxpbmsgcHJvcGVydHkKK2V2ZW4gaWYgYSBwbGFpbiBmaWxlIGlzIGluIHRoZSB3b3JraW5nIHRyZWUgaWYgY29yZS5zeW1saW5rcyBpcyBmYWxzZS4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydwcmVwYXJhdGlvbicgJworZ2l0IGNvbmZpZyBjb3JlLnN5bWxpbmtzIGZhbHNlICYmCitsPSQocHJpbnRmIGZpbGUgfCBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyAtLXN0ZGluKSAmJgorZWNobyAiMTIwMDAwICRsCXN5bWxpbmsiIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorJ21vZGlmeSB0aGUgc3ltYm9saWMgbGluaycgJworcHJpbnRmIG5ldy1maWxlID4gc3ltbGluayAmJgorZ2l0IHVwZGF0ZS1pbmRleCBzeW1saW5rJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyd0aGUgaW5kZXggZW50cnkgbXVzdCBzdGlsbCBiZSBhIHN5bWJvbGljIGxpbmsnICcKK2Nhc2UgImBnaXQgbHMtZmlsZXMgLS1zdGFnZSAtLWNhY2hlZCBzeW1saW5rYCIgaW4KKzEyMDAwMCIgIipzeW1saW5rKSBlY2hvIHBhc3M7OworKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSAtLWNhY2hlZCBzeW1saW5rOyAoZXhpdCAxKTs7Citlc2FjJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDMtdXBkYXRlLWluZGV4LWlnbm9yZS1taXNzaW5nLnNoIGIvdC90MjEwMy11cGRhdGUtaW5kZXgtaWdub3JlLW1pc3Npbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzMyNjk0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDMtdXBkYXRlLWluZGV4LWlnbm9yZS1taXNzaW5nLnNoCkBAIC0wLDAgKzEsODkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1cGRhdGUtaW5kZXggd2l0aCBvcHRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBiYXNpY3MgJworCT5vbmUgJiYKKwk+dHdvICYmCisJPnRocmVlICYmCisKKwkjIG5lZWQgLS1hZGQgd2hlbiBhZGRpbmcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IG9uZSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzKSIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG9uZSAmJgorCXRlc3Qgem9uZSA9ICJ6JChnaXQgbHMtZmlsZXMpIiAmJgorCisJIyB1cGRhdGUtaW5kZXggaXMgYXRvbWljCisJZWNobyAxID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IG9uZSB0d28gJiYKKwllY2hvICJNCW9uZSIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tbmFtZS1zdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgb25lIHR3byB0aHJlZSAmJgorCWZvciBpIGluIG9uZSB0aHJlZSB0d287IGRvIGVjaG8gJGk7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF90aWNrICYmCisJKAorCQl0ZXN0X2NyZWF0ZV9yZXBvIHh5enp5ICYmCisJCWNkIHh5enp5ICYmCisJCT5maWxlICYmCisJCWdpdCBhZGQgZmlsZQorCQlnaXQgY29tbWl0IC1tICJzdWIgaW5pdGlhbCIKKwkpICYmCisJZ2l0IGFkZCB4eXp6eSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLW1pc3NpbmcgLS1yZWZyZXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZWNobyAyID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWVjaG8gMSA+b25lICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlybSAtZiB0d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVubWVyZ2VkIC0tcmVmcmVzaCcgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWluZm89JChnaXQgbHMtZmlsZXMgLXMgb25lIHwgc2VkIC1lICJzLyAwCS8gMQkvIikgJiYKKwlnaXQgcm0gLS1jYWNoZWQgb25lICYmCisJZWNobyAiJGluZm8iIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS11bm1lcmdlZCAtLXJlZnJlc2ggJiYKKwllY2hvIDIgPnR3byAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS11bm1lcmdlZCAtLXJlZnJlc2ggPmFjdHVhbCAmJgorCWdyZXAgdHdvIGFjdHVhbCAmJgorCSEgZ3JlcCBvbmUgYWN0dWFsICYmCisJISBncmVwIHRocmVlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zdWJtb2R1bGVzIC0tcmVmcmVzaCAoMSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlybSAtZiB0d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoICgyKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJY2QgeHl6enkgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3ViIHNlY29uZCIgLS1hbGxvdy1lbXB0eQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taWdub3JlLXN1Ym1vZHVsZXMgLS1yZWZyZXNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjEwNC11cGRhdGUtaW5kZXgtc2tpcC13b3JrdHJlZS5zaCBiL3QvdDIxMDQtdXBkYXRlLWluZGV4LXNraXAtd29ya3RyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2M4MzBkYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIxMDQtdXBkYXRlLWluZGV4LXNraXAtd29ya3RyZWUuc2gKQEAgLTAsMCArMSw2MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3NraXAtd29ya3RyZWUgYml0IHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCitzYW5lX3Vuc2V0IEdJVF9URVNUX1NQTElUX0lOREVYCisKK3Rlc3Rfc2V0X2luZGV4X3ZlcnNpb24gMworCitjYXQgPmV4cGVjdC5mdWxsIDw8RU9GCitIIDEKK0ggMgorSCBzdWIvMQorSCBzdWIvMgorRU9GCisKK2NhdCA+ZXhwZWN0LnNraXAgPDxFT0YKK1MgMQorSCAyCitTIHN1Yi8xCitIIHN1Yi8yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBzdWIgJiYKKwl0b3VjaCAuLzEgLi8yIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IGFkZCAxIDIgc3ViLzEgc3ViLzIgJiYKKwlnaXQgbHMtZmlsZXMgLXQgfCB0ZXN0X2NtcCBleHBlY3QuZnVsbCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IGlzIGF0IHZlcnNpb24gMicgJworCXRlc3QgIiQodGVzdC1pbmRleC12ZXJzaW9uIDwgLmdpdC9pbmRleCkiID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMSBzdWIvMSAmJgorCWdpdCBscy1maWxlcyAtdCB8IHRlc3RfY21wIGV4cGVjdC5za2lwIC0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggaXMgYXQgdmVyc2lvbiAzIGFmdGVyIGhhdmluZyBzb21lIHNraXAtd29ya3RyZWUgZW50cmllcycgJworCXRlc3QgIiQodGVzdC1pbmRleC12ZXJzaW9uIDwgLmdpdC9pbmRleCkiID0gMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtdCcgJworCWdpdCBscy1maWxlcyAtdCB8IHRlc3RfY21wIGV4cGVjdC5za2lwIC0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tbm8tc2tpcC13b3JrdHJlZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1uby1za2lwLXdvcmt0cmVlIDEgc3ViLzEgJiYKKwlnaXQgbHMtZmlsZXMgLXQgfCB0ZXN0X2NtcCBleHBlY3QuZnVsbCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4IHZlcnNpb24gaXMgYmFjayB0byAyIHdoZW4gdGhlcmUgaXMgbm8gc2tpcC13b3JrdHJlZSBlbnRyeScgJworCXRlc3QgIiQodGVzdC1pbmRleC12ZXJzaW9uIDwgLmdpdC9pbmRleCkiID0gMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDUtdXBkYXRlLWluZGV4LWdpdGZpbGUuc2ggYi90L3QyMTA1LXVwZGF0ZS1pbmRleC1naXRmaWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3ZjNkNDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTA1LXVwZGF0ZS1pbmRleC1naXRmaWxlLnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQnJhZCBLaW5nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCB1cGRhdGUtaW5kZXggZm9yIGdpdGxpbmsgdG8gLmdpdCBmaWxlLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHdpdGggYWJzb2x1dGUgLmdpdCBmaWxlJyAnCisJbWtkaXIgc3ViMSAmJgorCShjZCBzdWIxICYmCisJIGdpdCBpbml0ICYmCisJIFJFQUw9IiQocHdkKS8ucmVhbCIgJiYKKwkgbXYgLmdpdCAiJFJFQUwiICYmCisJIGVjaG8gImdpdGRpcjogJFJFQUwiID4uZ2l0ICYmCisJIHRlc3RfY29tbWl0IGZpcnN0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZ2l0bGluayB0byBhYnNvbHV0ZSAuZ2l0IGZpbGUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIHN1YjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHdpdGggcmVsYXRpdmUgLmdpdCBmaWxlJyAnCisJbWtkaXIgc3ViMiAmJgorCShjZCBzdWIyICYmCisJIGdpdCBpbml0ICYmCisJIG12IC5naXQgLnJlYWwgJiYKKwkgZWNobyAiZ2l0ZGlyOiAucmVhbCIgPi5naXQgJiYKKwkgdGVzdF9jb21taXQgZmlyc3QpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBnaXRsaW5rIHRvIHJlbGF0aXZlIC5naXQgZmlsZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0gc3ViMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIxMDYtdXBkYXRlLWluZGV4LWFzc3VtZS11bmNoYW5nZWQuc2ggYi90L3QyMTA2LXVwZGF0ZS1pbmRleC1hc3N1bWUtdW5jaGFuZ2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5ZDg1OGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTA2LXVwZGF0ZS1pbmRleC1hc3N1bWUtdW5jaGFuZ2VkLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCB0ZXN0LgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnIFwKKwknOiA+ZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJIGdpdCBicmFuY2ggb3RoZXIgJiYKKwkgZWNobyB1cHN0cmVhbSA+ZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSB1cHN0cmVhbScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IHN3aXRjaCBicmFuY2hlcyB3aXRoIGRpcnR5IGZpbGUnIFwKKwknZ2l0IHJlc2V0IC0taGFyZCAmJgorCSBnaXQgY2hlY2tvdXQgb3RoZXIgJiYKKwkgZWNobyBkaXJ0ID5maWxlICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLS1hc3N1bWUtdW5jaGFuZ2VkIGZpbGUgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IG1hc3RlcicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMTA3LXVwZGF0ZS1pbmRleC1iYXNpYy5zaCBiL3QvdDIxMDctdXBkYXRlLWluZGV4LWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmZTAyZjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMTA3LXVwZGF0ZS1pbmRleC1iYXNpYy5zaApAQCAtMCwwICsxLDgzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgdXBkYXRlLWluZGV4IHRlc3RzCisKK1Rlc3RzIGZvciBjb21tYW5kLWxpbmUgcGFyc2luZyBhbmQgYmFzaWMgb3BlcmF0aW9uLgorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgMj5tc2cgJiYKKwljYXQgbXNnICYmCisJdGVzdCAtcyBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgZHVtcHMgdXNhZ2UnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgdXBkYXRlLWluZGV4IC0tbm9uc2Vuc2UgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZTogZ2l0IHVwZGF0ZS1pbmRleCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtaCB3aXRoIGNvcnJ1cHQgaW5kZXgnICcKKwlta2RpciBicm9rZW4gJiYKKwkoCisJCWNkIGJyb2tlbiAmJgorCQlnaXQgaW5pdCAmJgorCQk+LmdpdC9pbmRleCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgdXBkYXRlLWluZGV4IC1oID51c2FnZSAyPiYxCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgIltVdV1zYWdlOiBnaXQgdXBkYXRlLWluZGV4IiBicm9rZW4vdXNhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jYWNoZWluZm8gY29tcGxhaW5zIG9mIG1pc3NpbmcgYXJndW1lbnRzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNhY2hlaW5mbyBkb2VzIG5vdCBhY2NlcHQgYmxvYiBudWxsIHNoYTEnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgcmV2LXBhcnNlIDpmaWxlID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDEwMDY0NCAkX3o0MCBmaWxlICYmCisJZ2l0IHJldi1wYXJzZSA6ZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNhY2hlaW5mbyBkb2VzIG5vdCBhY2NlcHQgZ2l0bGluayBudWxsIHNoYTEnICcKKwlnaXQgaW5pdCBzdWJtb2R1bGUgJiYKKwkoY2Qgc3VibW9kdWxlICYmIHRlc3RfY29tbWl0IGZvbykgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCByZXYtcGFyc2UgOnN1Ym1vZHVsZSA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLWNhY2hlaW5mbyAxNjAwMDAgJF96NDAgc3VibW9kdWxlICYmCisJZ2l0IHJldi1wYXJzZSA6c3VibW9kdWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2FjaGVpbmZvIG1vZGUsc2hhMSxwYXRoIChuZXcgc3ludGF4KScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluIDxmaWxlID5leHBlY3QgJiYKKworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTAwNjQ0ICIkKGNhdCBleHBlY3QpIiBmaWxlICYmCisJZ2l0IHJldi1wYXJzZSA6ZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAiMTAwNjQ0LCQoY2F0IGV4cGVjdCksZWxpZiIgJiYKKwlnaXQgcmV2LXBhcnNlIDplbGlmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5sb2NrIGZpbGVzIGNsZWFuZWQgdXAnICcKKwlta2RpciBjbGVhbnVwICYmCisJKAorCWNkIGNsZWFudXAgJiYKKwlta2RpciB3b3JrdHJlZSAmJgorCWdpdCBpbml0IHJlcG8gJiYKKwljZCByZXBvICYmCisJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlIC4uLy4uL3dvcmt0cmVlICYmCisJIyAtLXJlZnJlc2ggdHJpZ2dlcnMgbGF0ZSBzZXR1cF93b3JrX3RyZWUsCisJIyBhY3RpdmVfY2FjaGVfY2hhbmdlZCBpcyB6ZXJvLCByb2xsYmFja19sb2NrX2ZpbGUgZmFpbHMKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCSEgdGVzdCAtZiAuZ2l0L2luZGV4LmxvY2sKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MjIwMC1hZGQtdXBkYXRlLnNoIGIvdC90MjIwMC1hZGQtdXBkYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxNmIxNWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMjAwLWFkZC11cGRhdGUuc2gKQEAgLTAsMCArMSwxODQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYWRkIC11CisKK1RoaXMgdGVzdCBjcmVhdGVzIGEgd29ya2luZyB0cmVlIHN0YXRlIHdpdGggdGhyZWUgZmlsZXM6CisKKyAgdG9wIChwcmV2aW91c2x5IGNvbW1pdHRlZCwgbW9kaWZpZWQpCisgIGRpci9zdWIgKHByZXZpb3VzbHkgY29tbWl0dGVkLCBtb2RpZmllZCkKKyAgZGlyL290aGVyICh1bnRyYWNrZWQpCisKK2FuZCBpc3N1ZXMgYSBnaXQgYWRkIC11IHdpdGggcGF0aCBsaW1pdGluZyBvbiAiZGlyIiB0byBhZGQKK29ubHkgdGhlIHVwZGF0ZXMgdG8gZGlyL3N1Yi4KKworQWxzbyB0ZXN0ZWQgYXJlICJnaXQgYWRkIC11IiB3aXRob3V0IGxpbWl0aW5nLCBhbmQgImdpdCBhZGQgLXUiCit3aXRob3V0IGNvbnRlbnRzIGNoYW5nZXMsIGFuZCBvdGhlciBjb25kaXRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBpbml0aWFsID5jaGVjayAmJgorCWVjaG8gaW5pdGlhbCA+dG9wICYmCisJZWNobyBpbml0aWFsID5mb28gJiYKKwlta2RpciBkaXIxIGRpcjIgJiYKKwllY2hvIGluaXRpYWwgPmRpcjEvc3ViMSAmJgorCWVjaG8gaW5pdGlhbCA+ZGlyMS9zdWIyICYmCisJZWNobyBpbml0aWFsID5kaXIyL3N1YjMgJiYKKwlnaXQgYWRkIGNoZWNrIGRpcjEgZGlyMiB0b3AgZm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwllY2hvIGNoYW5nZWQgPmNoZWNrICYmCisJZWNobyBjaGFuZ2VkID50b3AgJiYKKwllY2hvIGNoYW5nZWQgPmRpcjIvc3ViMyAmJgorCXJtIC1mIGRpcjEvc3ViMSAmJgorCWVjaG8gb3RoZXIgPmRpcjIvb3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyB1cGRhdGUgJworCWdpdCBhZGQgLXUgZGlyMSBkaXIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBub3RpY2VkIGEgcmVtb3ZhbCcgJworCXRlc3QgIiQoZ2l0IGxzLWZpbGVzIGRpcjEvc3ViMSkiID0gIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHRvdWNoZWQgY29ycmVjdCBwYXRoJyAnCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtc3RhdHVzIGRpcjIvc3ViMykiID0gIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGRpZCBub3QgdG91Y2ggb3RoZXIgdHJhY2tlZCBmaWxlcycgJworCXRlc3QgIiQoZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLXN0YXR1cyBjaGVjaykiID0gIk0JY2hlY2siICYmCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtc3RhdHVzIHRvcCkiID0gIk0JdG9wIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZGlkIG5vdCB0b3VjaCB1bnRyYWNrZWQgZmlsZXMnICcKKwl0ZXN0ICIkKGdpdCBscy1maWxlcyBkaXIyL290aGVyKSIgPSAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYWNoZSB0cmVlIGhhcyBub3QgYmVlbiBjb3JydXB0ZWQnICcKKworCWdpdCBscy1maWxlcyAtcyB8CisJc2VkIC1lICJzLyAwCS8JLyIgPmV4cGVjdCAmJgorCWdpdCBscy10cmVlIC1yICQoZ2l0IHdyaXRlLXRyZWUpIHwKKwlzZWQgLWUgInMvIGJsb2IgLyAvIiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGZyb20gYSBzdWJkaXJlY3RvcnknICcKKwkoCisJCWNkIGRpcjEgJiYKKwkJZWNobyBtb3JlID5zdWIyICYmCisJCWdpdCBhZGQgLXUgc3ViMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIGdldHMgbm90aWNlZCcgJworCisJdGVzdCAiJChnaXQgZGlmZi1maWxlcyAtLW5hbWUtc3RhdHVzIGRpcjEpIiA9ICIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLXF1YWxpZmllZCB1cGRhdGUgaW4gc3ViZGlyIHVwZGF0ZXMgZnJvbSB0aGUgcm9vdCcgJworCSgKKwkJY2QgZGlyMSAmJgorCQllY2hvIGV2ZW4gbW9yZSA+PnN1YjIgJiYKKwkJZ2l0IGFkZCAtdQorCSkgJiYKKwk6ID5leHBlY3QgJiYKKwlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlIGEgZmlsZSB3aXRoIGEgc3ltbGluaycgJworCisJcm0gZm9vICYmCisJdGVzdF9sbl9zX2FkZCB0b3AgZm9vCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGV2ZXJ5dGhpbmcgY2hhbmdlZCcgJworCisJZ2l0IGFkZCAtdSAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYtZmlsZXMpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvdWNoIGFuZCB0aGVuIGFkZCAtdScgJworCisJdG91Y2ggY2hlY2sgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1maWxlcykiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndG91Y2ggYW5kIHRoZW4gYWRkIGV4cGxpY2l0bHknICcKKworCXRvdWNoIGNoZWNrICYmCisJZ2l0IGFkZCBjaGVjayAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYtZmlsZXMpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtbiAtdSBzaG91bGQgbm90IGFkZCBidXQganVzdCByZXBvcnQnICcKKworCSgKKwkJZWNobyAiYWRkICdcJydjaGVjaydcJyciICYmCisJCWVjaG8gInJlbW92ZSAnXCcndG9wJ1wnJyIKKwkpID5leHBlY3QgJiYKKwliZWZvcmU9JChnaXQgbHMtZmlsZXMgLXMgY2hlY2sgdG9wKSAmJgorCWVjaG8gY2hhbmdlZCA+PmNoZWNrICYmCisJcm0gLWYgdG9wICYmCisJZ2l0IGFkZCAtbiAtdSA+YWN0dWFsICYmCisJYWZ0ZXI9JChnaXQgbHMtZmlsZXMgLXMgY2hlY2sgdG9wKSAmJgorCisJdGVzdCAiJGJlZm9yZSIgPSAiJGFmdGVyIiAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC11IHJlc29sdmVzIHVubWVyZ2VkIHBhdGhzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCW9uZT0kKGVjaG8gMSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXR3bz0kKGVjaG8gMiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXRocmVlPSQoZWNobyAzIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJeworCQlmb3IgcGF0aCBpbiBwYXRoMSBwYXRoMgorCQlkbworCQkJZWNobyAiMTAwNjQ0ICRvbmUgMQkkcGF0aCIKKwkJCWVjaG8gIjEwMDY0NCAkdHdvIDIJJHBhdGgiCisJCQllY2hvICIxMDA2NDQgJHRocmVlIDMJJHBhdGgiCisJCWRvbmUKKwkJZWNobyAiMTAwNjQ0ICRvbmUgMQlwYXRoMyIKKwkJZWNobyAiMTAwNjQ0ICRvbmUgMQlwYXRoNCIKKwkJZWNobyAiMTAwNjQ0ICRvbmUgMwlwYXRoNSIKKwkJZWNobyAiMTAwNjQ0ICRvbmUgMwlwYXRoNiIKKwl9IHwKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWVjaG8gMyA+cGF0aDEgJiYKKwllY2hvIDIgPnBhdGgzICYmCisJZWNobyAyID5wYXRoNSAmJgorCisJIyBGYWlsIHRvIGV4cGxpY2l0bHkgcmVzb2x2ZSByZW1vdmVkIHBhdGhzIHdpdGggImdpdCBhZGQiCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLW5vLWFsbCBwYXRoNCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS1uby1hbGwgcGF0aDYgJiYKKworCSMgImFkZCAtdSIgc2hvdWxkIG5vdGljZSByZW1vdmFscyBubyBtYXR0ZXIgd2hhdCBzdGFnZXMKKwkjIHRoZSBpbmRleCBlbnRyaWVzIGFyZSBpbi4KKwlnaXQgYWRkIC11ICYmCisJZ2l0IGxzLWZpbGVzIC1zIHBhdGgxIHBhdGgyIHBhdGgzIHBhdGg0IHBhdGg1IHBhdGg2ID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIjEwMDY0NCAkdGhyZWUgMAlwYXRoMSIKKwkJZWNobyAiMTAwNjQ0ICR0d28gMAlwYXRoMyIKKwkJZWNobyAiMTAwNjQ0ICR0d28gMAlwYXRoNSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJhZGQgLXUgbm9uLWV4aXN0ZW50IiBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLXUgbm9uLWV4aXN0ZW50ICYmCisJISAoZ2l0IGxzLWZpbGVzIHwgZ3JlcCAibm9uLWV4aXN0ZW50IikKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMjAxLWFkZC11cGRhdGUtdHlwZWNoYW5nZS5zaCBiL3QvdDIyMDEtYWRkLXVwZGF0ZS10eXBlY2hhbmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1NGZjNTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QyMjAxLWFkZC11cGRhdGUtdHlwZWNoYW5nZS5zaApAQCAtMCwwICsxLDE0OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21vcmUgZ2l0IGFkZCAtdScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT54eXp6eSAmJgorCV9lbXB0eT0kKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDx4eXp6eSkgJiYKKwk+eW9taW4gJiYKKwk+Y2Fza2x5ICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUzsgdGhlbgorCQlsbiAtcyBmcm90eiBuaXRmb2wgJiYKKwkJVF9sZXR0ZXI9VAorCWVsc2UKKwkJcHJpbnRmICVzIGZyb3R6ID4gbml0Zm9sICYmCisJCVRfbGV0dGVyPU0KKwlmaSAmJgorCW1rZGlyIHJlenJvdiAmJgorCT5yZXpyb3YvYm96YmFyICYmCisJZ2l0IGFkZCBjYXNrbHkgeHl6enkgeW9taW4gbml0Zm9sIHJlenJvdi9ib3piYXIgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgbW9kaWZ5ICcKKwlybSAtZiB4eXp6eSB5b21pbiBuaXRmb2wgY2Fza2x5ICYmCisJIyBjYXNrbHkgZGlzYXBwZWFycyAobm90IGEgc3VibW9kdWxlKQorCW1rZGlyIGNhc2tseSAmJgorCSMgbml0Zm9sIGNoYW5nZXMgZnJvbSBzeW1saW5rIHRvIHJlZ3VsYXIKKwk+bml0Zm9sICYmCisJIyByZXpyb3YvYm96YmFyIGRpc2FwcGVhcnMKKwlybSAtZnIgcmV6cm92ICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBTWU1MSU5LUzsgdGhlbgorCQlsbiAtcyB4eXp6eSByZXpyb3YKKwllbHNlCisJCXByaW50ZiAlcyB4eXp6eSA+IHJlenJvdgorCWZpICYmCisJIyB4eXp6eSBkaXNhcHBlYXJzIChub3QgYSBzdWJtb2R1bGUpCisJbWtkaXIgeHl6enkgJiYKKwllY2hvIGdudXN0byA+eHl6enkvYm96YmFyICYmCisJIyB5b21pbiBnZXRzIHJlcGxhY2VkIHdpdGggYSBzdWJtb2R1bGUKKwlta2RpciB5b21pbiAmJgorCT55b21pbi95b21pbiAmJgorCSgKKwkJY2QgeW9taW4gJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGFkZCB5b21pbiAmJgorCQlnaXQgY29tbWl0IC1tICJzdWIgaW5pdGlhbCIKKwkpICYmCisJeW9taW49JChHSVRfRElSPXlvbWluLy5naXQgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCSMgeW9uayBpcyBhZGRlZCBhbmQgdGhlbiB0dXJuZWQgaW50byBhIHN1Ym1vZHVsZQorCSMgdGhpcyBzaG91bGQgYXBwZWFyIGFzIFQgaW4gZGlmZi1maWxlcyBhbmQgYXMgQSBpbiBkaWZmLWluZGV4CisJPnlvbmsgJiYKKwlnaXQgYWRkIHlvbmsgJiYKKwlybSAtZiB5b25rICYmCisJbWtkaXIgeW9uayAmJgorCT55b25rL3lvbmsgJiYKKwkoCisJCWNkIHlvbmsgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGFkZCB5b25rICYmCisJCWdpdCBjb21taXQgLW0gInN1YiBpbml0aWFsIgorCSkgJiYKKwl5b25rPSQoR0lUX0RJUj15b25rLy5naXQgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCSMgemlmbWlhIGlzIGFkZGVkIGFuZCB0aGVuIHJlbW92ZWQKKwkjIHRoaXMgc2hvdWxkIGFwcGVhciBpbiBkaWZmLWZpbGVzIGJ1dCBub3QgaW4gZGlmZi1pbmRleC4KKwk+emlmbWlhICYmCisJZ2l0IGFkZCB6aWZtaWEgJiYKKwlybSAtZiB6aWZtaWEgJiYKKwlta2RpciB6aWZtaWEgJiYKKwl7CisJCWdpdCBscy10cmVlIC1yIEhFQUQgfAorCQlzZWQgLWUgInMvXi86LyIgLWUgIgorCQkJLwljYXNrbHkveworCQkJCXMvCWNhc2tseS8gJF96NDAgRCYvCisJCQkJcy9ibG9iLzAwMDAwMC8KKwkJCX0KKwkJCS8Jbml0Zm9sL3sKKwkJCQlzLwluaXRmb2wvICRfejQwICRUX2xldHRlciYvCisJCQkJcy9ibG9iLzEwMDY0NC8KKwkJCX0KKwkJCS8JcmV6cm92LmJvemJhci97CisJCQkJcy8JcmV6cm92LmJvemJhci8gJF96NDAgRCYvCisJCQkJcy9ibG9iLzAwMDAwMC8KKwkJCX0KKwkJCS8JeHl6enkveworCQkJCXMvCXh5enp5LyAkX3o0MCBEJi8KKwkJCQlzL2Jsb2IvMDAwMDAwLworCQkJfQorCQkJLwl5b21pbi97CisJCQkgICAgcy8JeW9taW4vICRfejQwIFQmLworCQkJCXMvYmxvYi8xNjAwMDAvCisJCQl9CisJCSIKKwl9ID5leHBlY3QgJiYKKwl7CisJCWNhdCBleHBlY3QKKwkJZWNobyAiOjEwMDY0NCAxNjAwMDAgJF9lbXB0eSAkX3o0MCBUCXlvbmsiCisJCWVjaG8gIjoxMDA2NDQgMDAwMDAwICRfZW1wdHkgJF96NDAgRAl6aWZtaWEiCisJfSA+ZXhwZWN0LWZpbGVzICYmCisJeworCQljYXQgZXhwZWN0CisJCWVjaG8gIjowMDAwMDAgMTYwMDAwICRfejQwICRfejQwIEEJeW9uayIKKwl9ID5leHBlY3QtaW5kZXggJiYKKwl7CisJCWVjaG8gIjEwMDY0NCAkX2VtcHR5IDAJbml0Zm9sIgorCQllY2hvICIxNjAwMDAgJHlvbWluIDAJeW9taW4iCisJCWVjaG8gIjE2MDAwMCAkeW9uayAwCXlvbmsiCisJfSA+ZXhwZWN0LWZpbmFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgZGlmZi1maWxlcyAnCisJZ2l0IGRpZmYtZmlsZXMgLS1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1maWxlcyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBkaWZmLWluZGV4ICcKKwlnaXQgZGlmZi1pbmRleCAtLXJhdyBIRUFEIC0tID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtaW5kZXggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtdScgJworCXJtIC1mICIuZ2l0L3NhdmVkLWluZGV4IiAmJgorCWNwIC1wICIuZ2l0L2luZGV4IiAiLmdpdC9zYXZlZC1pbmRleCIgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtZmluYWwgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtYScgJworCWlmIHRlc3QgLWYgIi5naXQvc2F2ZWQtaW5kZXgiCisJdGhlbgorCQlybSAtZiAiLmdpdC9pbmRleCIgJiYKKwkJbXYgIi5naXQvc2F2ZWQtaW5kZXgiICIuZ2l0L2luZGV4IgorCWZpICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIiAtYSAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWZpbmFsIGFjdHVhbCAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgcmVhZC10cmVlIEhFQUQgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1maW5hbCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMjAyLWFkZC1hZGRyZW1vdmUuc2ggYi90L3QyMjAyLWFkZC1hZGRyZW1vdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmM4YjU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIyMDItYWRkLWFkZHJlbW92ZS5zaApAQCAtMCwwICsxLDU0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFkZCAtLWFsbCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCSgKKwkJZWNobyAuZ2l0aWdub3JlCisJCWVjaG8gd2lsbC1yZW1vdmUKKwkpID5leHBlY3QgJiYKKwkoCisJCWVjaG8gYWN0dWFsCisJCWVjaG8gZXhwZWN0CisJCWVjaG8gaWdub3JlZAorCSkgPi5naXRpZ25vcmUgJiYKKwk+d2lsbC1yZW1vdmUgJiYKKwlnaXQgYWRkIC0tYWxsICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLS1hbGwnICcKKwkoCisJCWVjaG8gLmdpdGlnbm9yZQorCQllY2hvIG5vdC1pZ25vcmVkCisJCWVjaG8gIk0JLmdpdGlnbm9yZSIKKwkJZWNobyAiQQlub3QtaWdub3JlZCIKKwkJZWNobyAiRAl3aWxsLXJlbW92ZSIKKwkpID5leHBlY3QgJiYKKwk+aWdub3JlZCAmJgorCT5ub3QtaWdub3JlZCAmJgorCWVjaG8gbW9kaWZpY2F0aW9uID4+LmdpdGlnbm9yZSAmJgorCXJtIC1mIHdpbGwtcmVtb3ZlICYmCisJZ2l0IGFkZCAtLWFsbCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwlnaXQgZGlmZi1pbmRleCAtLW5hbWUtc3RhdHVzIC0tY2FjaGVkIEhFQUQgPj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0p1c3QgImdpdCBhZGQiIGlzIGEgbm8tb3AnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyA+d2lsbC1yZW1vdmUgJiYKKwk+d2lsbC1ub3QtYmUtYWRkZWQgJiYKKwlnaXQgYWRkICYmCisJZ2l0IGRpZmYtaW5kZXggLS1uYW1lLXN0YXR1cyAtLWNhY2hlZCBIRUFEID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDIyMDMtYWRkLWludGVudC5zaCBiL3QvdDIyMDMtYWRkLWludGVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTRhNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjIwMy1hZGQtaW50ZW50LnNoCkBAIC0wLDAgKzEsODYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdJbnRlbnQgdG8gYWRkJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZW50IHRvIGFkZCcgJworCWVjaG8gaGVsbG8gPmZpbGUgJiYKKwllY2hvIGhlbGxvID5lbGlmICYmCisJZ2l0IGFkZCAtTiBmaWxlICYmCisJZ2l0IGFkZCBlbGlmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHJlc3VsdCBvZiAiYWRkIC1OIicgJworCWdpdCBscy1maWxlcyAtcyBmaWxlID5hY3R1YWwgJiYKKwllbXB0eT0kKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDwvZGV2L251bGwpICYmCisJZWNobyAiMTAwNjQ0ICRlbXB0eSAwCWZpbGUiID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVudCB0byBhZGQgaXMganVzdCBhbiBvcmRpbmFyeSBlbXB0eSBibG9iJyAnCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBscy1maWxlcyAtcyBmaWxlID5hY3R1YWwgJiYKKwlnaXQgbHMtZmlsZXMgLXMgZWxpZiB8IHNlZCAtZSAicy9lbGlmL2ZpbGUvIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlbnQgdG8gYWRkIGRvZXMgbm90IGNsb2JiZXIgZXhpc3RpbmcgcGF0aHMnICcKKwlnaXQgYWRkIC1OIGZpbGUgZWxpZiAmJgorCWVtcHR5PSQoZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gPC9kZXYvbnVsbCkgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSEgZ3JlcCAiJGVtcHR5IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaS10LWEgZW50cnkgaXMgc2ltcGx5IGlnbm9yZWQnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGluaXRpYWwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwllY2hvIHh5enp5ID5yZXpyb3YgJiYKKwllY2hvIGZyb3R6ID5uaXRmb2wgJiYKKwlnaXQgYWRkIHJlenJvdiAmJgorCWdpdCBhZGQgLU4gbml0Zm9sICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwl0ZXN0ICQoZ2l0IGxzLXRyZWUgSEVBRCAtLSBuaXRmb2wgfCB3YyAtbCkgPSAwICYmCisJdGVzdCAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUQgLS0gbml0Zm9sIHwgd2MgLWwpID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW4gY29tbWl0IHdpdGggYW4gdW5yZWxhdGVkIGktdC1hIGVudHJ5IGluIGluZGV4JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gYm96YmFyID5yZXpyb3YgJiYKKwllY2hvIGZyb3R6ID5uaXRmb2wgJiYKKwlnaXQgYWRkIHJlenJvdiAmJgorCWdpdCBhZGQgLU4gbml0Zm9sICYmCisJZ2l0IGNvbW1pdCAtbSBwYXJ0aWFsIHJlenJvdgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW4gImNvbW1pdCAtYSIgd2l0aCBhbiBpLXQtYSBlbnRyeScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk6ID5uaXRmb2wgJiYKKwlnaXQgYWRkIC1OIG5pdGZvbCAmJgorCWdpdCBjb21taXQgLWEgLW0gYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhY2hlLXRyZWUgaW52YWxpZGF0ZXMgaS10LWEgcGF0aHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbWtkaXIgZGlyICYmCisJOiA+ZGlyL2ZvbyAmJgorCWdpdCBhZGQgZGlyL2ZvbyAmJgorCWdpdCBjb21taXQgLW0gZm9vICYmCisKKwk6ID5kaXIvYmFyICYmCisJZ2l0IGFkZCAtTiBkaXIvYmFyICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkgPmFjdHVhbCAmJgorCWVjaG8gZGlyL2JhciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZ2l0IHdyaXRlLXRyZWUgPi9kZXYvbnVsbCAmJgorCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLW9ubHkgPmFjdHVhbCAmJgorCWVjaG8gZGlyL2JhciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90MjIwNC1hZGQtaWdub3JlZC5zaCBiL3QvdDIyMDQtYWRkLWlnbm9yZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODM0MGFjMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDIyMDQtYWRkLWlnbm9yZWQuc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdmluZyBpZ25vcmVkIHBhdGhzIHRvIGdpdCBhZGQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBzdWIgZGlyIGRpci9zdWIgJiYKKwllY2hvIHN1YiA+LmdpdGlnbm9yZSAmJgorCWVjaG8gaWduID4+LmdpdGlnbm9yZSAmJgorCWZvciBwIGluIC4gc3ViIGRpciBkaXIvc3ViCisJZG8KKwkJPiIkcC9pZ24iICYmCisJCT4iJHAvZmlsZSIgfHwgZXhpdCAxCisJZG9uZQorJworCitmb3IgaSBpbiBmaWxlIGRpci9maWxlIGRpciAnZConCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm5vIGNvbXBsYWludHMgZm9yIHVuaWdub3JlZCAkaSIgJworCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCWdpdCBhZGQgIiRpIiAmJgorCQlnaXQgbHMtZmlsZXMgIiRpIiA+b3V0ICYmCisJCXRlc3QgLXMgb3V0CisJJworZG9uZQorCitmb3IgaSBpbiBpZ24gZGlyL2lnbiBkaXIvc3ViIGRpci9zdWIvKmlnbiBzdWIvZmlsZSBzdWIgc3ViLyoKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSIgJworCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiAyPmVyciAmJgorCQlnaXQgbHMtZmlsZXMgIiRpIiA+b3V0ICYmCisJCSEgdGVzdCAtcyBvdXQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wbGFpbnRzIGZvciBpZ25vcmVkICRpIG91dHB1dCIgJworCQl0ZXN0X2kxOG5ncmVwIC1lICJVc2UgLWYgaWYiIGVycgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsYWludHMgZm9yIGlnbm9yZWQgJGkgd2l0aCB1bmlnbm9yZWQgZmlsZSIgJworCQlybSAtZiAuZ2l0L2luZGV4ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiBmaWxlIDI+ZXJyICYmCisJCWdpdCBscy1maWxlcyAiJGkiID5vdXQgJiYKKwkJISB0ZXN0IC1zIG91dAorCScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21wbGFpbnRzIGZvciBpZ25vcmVkICRpIHdpdGggdW5pZ25vcmVkIGZpbGUgb3V0cHV0IiAnCisJCXRlc3RfaTE4bmdyZXAgLWUgIlVzZSAtZiBpZiIgZXJyCisJJworZG9uZQorCitmb3IgaSBpbiBzdWIgc3ViLyoKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSBpbiBkaXIiICcKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQkoCisJCQljZCBkaXIgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiAyPmVyciAmJgorCQkJZ2l0IGxzLWZpbGVzICIkaSIgPm91dCAmJgorCQkJISB0ZXN0IC1zIG91dAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSBpbiBkaXIgb3V0cHV0IiAnCisJCSgKKwkJCWNkIGRpciAmJgorCQkJdGVzdF9pMThuZ3JlcCAtZSAiVXNlIC1mIGlmIiBlcnIKKwkJKQorCScKK2RvbmUKKworZm9yIGkgaW4gaWduIGZpbGUKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSBpbiBzdWIiICcKKwkJcm0gLWYgLmdpdC9pbmRleCAmJgorCQkoCisJCQljZCBzdWIgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRpIiAyPmVyciAmJgorCQkJZ2l0IGxzLWZpbGVzICIkaSIgPm91dCAmJgorCQkJISB0ZXN0IC1zIG91dAorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tcGxhaW50cyBmb3IgaWdub3JlZCAkaSBpbiBzdWIgb3V0cHV0IiAnCisJCSgKKwkJCWNkIHN1YiAmJgorCQkJdGVzdF9pMThuZ3JlcCAtZSAiVXNlIC1mIGlmIiBlcnIKKwkJKQorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QyMzAwLWNkLXRvLXRvcGxldmVsLnNoIGIvdC90MjMwMC1jZC10by10b3BsZXZlbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OTY1YmM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MjMwMC1jZC10by10b3BsZXZlbC5zaApAQCAtMCwwICsxLDM3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2RfdG9fdG9wbGV2ZWwnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2NkX3RvX3RvcGxldmVsICgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICQzICIkMiIgJworCQkoCisJCQljZCAnIickMSciJyAmJgorCQkJLiAiJChnaXQgLS1leGVjLXBhdGgpIi9naXQtc2gtc2V0dXAgJiYKKwkJCWNkX3RvX3RvcGxldmVsICYmCisJCQlbICIkKHB3ZCAtUCkiID0gIiRUT1BMRVZFTCIgXQorCQkpCisJJworfQorCitUT1BMRVZFTD0iJChwd2QgLVApL3JlcG8iCitta2RpciAtcCByZXBvL3N1Yi9kaXIKK212IC5naXQgcmVwby8KK1NVQkRJUkVDVE9SWV9PSz0xCisKK3Rlc3RfY2RfdG9fdG9wbGV2ZWwgcmVwbyAnYXQgcGh5c2ljYWwgcm9vdCcKKwordGVzdF9jZF90b190b3BsZXZlbCByZXBvL3N1Yi9kaXIgJ2F0IHBoeXNpY2FsIHN1YmRpcicKKworbG4gLXMgcmVwbyBzeW1yZXBvIDI+L2Rldi9udWxsCit0ZXN0X2NkX3RvX3RvcGxldmVsIHN5bXJlcG8gJ2F0IHN5bWJvbGljIHJvb3QnIFNZTUxJTktTCisKK2xuIC1zIHJlcG8vc3ViL2RpciBzdWJkaXItbGluayAyPi9kZXYvbnVsbAordGVzdF9jZF90b190b3BsZXZlbCBzdWJkaXItbGluayAnYXQgc3ltYm9saWMgc3ViZGlyJyBTWU1MSU5LUworCitjZCByZXBvCitsbiAtcyBzdWIvZGlyIGludGVybmFsLWxpbmsgMj4vZGV2L251bGwKK3Rlc3RfY2RfdG9fdG9wbGV2ZWwgaW50ZXJuYWwtbGluayAnYXQgaW50ZXJuYWwgc3ltYm9saWMgc3ViZGlyJyBTWU1MSU5LUworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMDAtbHMtZmlsZXMtb3RoZXJzLnNoIGIvdC90MzAwMC1scy1maWxlcy1vdGhlcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODhiZTkwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMDAtbHMtZmlsZXMtb3RoZXJzLnNoCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLWZpbGVzIHRlc3QgKC0tb3RoZXJzIHNob3VsZCBwaWNrIHVwIHN5bWxpbmtzKS4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHdpdGggdGhlIGZvbGxvd2luZyBvbiB0aGUKK2ZpbGVzeXN0ZW0uCisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIHBhdGgxCS0gYSBzeW1saW5rCisgICAgcGF0aDIvZmlsZTIgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy1qdW5rICAtIGEgZmlsZSB0byBjb25mdXNlIHRoaW5ncworICAgIHBhdGgzL2ZpbGUzIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDQgICAgICAgLSBhbiBlbXB0eSBkaXJlY3RvcnkKKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAnICcKKwlkYXRlID5wYXRoMCAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKKwl0aGVuCisJCWxuIC1zIHh5enp5IHBhdGgxCisJZWxzZQorCQlkYXRlID5wYXRoMQorCWZpICYmCisJbWtkaXIgcGF0aDIgcGF0aDMgcGF0aDQgJiYKKwlkYXRlID5wYXRoMi9maWxlMiAmJgorCWRhdGUgPnBhdGgyLWp1bmsgJiYKKwlkYXRlID5wYXRoMy9maWxlMyAmJgorCWRhdGUgPnBhdGgzLWp1bmsgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgzLWp1bmsgcGF0aDMvZmlsZTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGV4cGVjdGVkIG91dHB1dCcgJworCWNhdCA+ZXhwZWN0ZWQxIDw8LVxFT0YgJiYKKwlleHBlY3RlZDEKKwlleHBlY3RlZDIKKwlleHBlY3RlZDMKKwlvdXRwdXQKKwlwYXRoMAorCXBhdGgxCisJcGF0aDItanVuaworCXBhdGgyL2ZpbGUyCisJRU9GCisKKwlzZWQgLWUgInN8cGF0aDIvZmlsZTJ8cGF0aDIvfCIgPGV4cGVjdGVkMSA+ZXhwZWN0ZWQyICYmCisJY3AgZXhwZWN0ZWQyIGV4cGVjdGVkMyAmJgorCWVjaG8gcGF0aDQvID4+ZXhwZWN0ZWQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tb3RoZXJzJyAnCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDEgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5JyAnCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZGlyZWN0b3J5ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tZW1wdHktZGlyZWN0b3J5IGhpZGVzIGVtcHR5IGRpcmVjdG9yeScgJworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWRpcmVjdG9yeSAtLW5vLWVtcHR5LWRpcmVjdG9yeSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQzIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdscy1maWxlcyAtLW90aGVycyB3aXRoIHN5bWxpbmtlZCBzdWJtb2R1bGUnICcKKwlnaXQgaW5pdCBzdXBlciAmJgorCWdpdCBpbml0IHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCT5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tIHN1YiAmJgorCQlnaXQgcGFjay1yZWZzIC0tYWxsCisJKSAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJIiRTSEVMTF9QQVRIIiAiJFRFU1RfRElSRUNUT1JZLy4uL2NvbnRyaWIvd29ya2Rpci9naXQtbmV3LXdvcmtkaXIiIC4uL3N1YiBzdWIKKwkJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1zdGFuZGFyZCA+Li4vYWN0dWFsCisJKSAmJgorCWVjaG8gc3ViLyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMDEtbHMtZmlsZXMtb3RoZXJzLWV4Y2x1ZGUuc2ggYi90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRhMjU3YzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDAxLWxzLWZpbGVzLW90aGVycy1leGNsdWRlLnNoCkBAIC0wLDAgKzEsMzMzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGUKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIGFuZCB0ZXN0cyAtLWV4Y2x1ZGUgcGF0dGVybnMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitybSAtZnIgb25lIHRocmVlCitmb3IgZGlyIGluIC4gb25lIG9uZS90d28gdGhyZWUKK2RvCisgIG1rZGlyIC1wICRkaXIgJiYKKyAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4CisgIGRvCisgICAgPiRkaXIvYS4kaQorICBkb25lCitkb25lCis+IiNpZ25vcmUxIgorPiIjaWdub3JlMiIKKz4iI2hpZGRlbiIKKworY2F0ID5leHBlY3QgPDxFT0YKK2EuMgorYS40CithLjUKK2EuOAorb25lL2EuMworb25lL2EuNAorb25lL2EuNQorb25lL2EuNworb25lL3R3by9hLjIKK29uZS90d28vYS4zCitvbmUvdHdvL2EuNQorb25lL3R3by9hLjcKK29uZS90d28vYS44Cit0aHJlZS9hLjIKK3RocmVlL2EuMwordGhyZWUvYS40Cit0aHJlZS9hLjUKK3RocmVlL2EuOAorRU9GCisKK2VjaG8gJy5naXRpZ25vcmUKK1wjaWdub3JlMQorXCNpZ25vcmUyKgorXCNoaWQqbgorb3V0cHV0CitleHBlY3QKKy5naXRpZ25vcmUKKyouNworISouOCcgPi5naXQvaWdub3JlCisKK2VjaG8gJyouMQorLyouMworISouNicgPi5naXRpZ25vcmUKK2VjaG8gJyouMgordHdvLyouNAorISouNworKi44JyA+b25lLy5naXRpZ25vcmUKK2VjaG8gJyEqLjIKKyEqLjgnID5vbmUvdHdvLy5naXRpZ25vcmUKKworYWxsaWdub3Jlcz0nLmdpdGlnbm9yZSBvbmUvLmdpdGlnbm9yZSBvbmUvdHdvLy5naXRpZ25vcmUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgd2l0aCB2YXJpb3VzIGV4Y2x1ZGUgb3B0aW9ucy4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIFwKKyAgICAgICAtLWV4Y2x1ZGU9XCouNiBcCisgICAgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBcCisgICAgICAgLS1leGNsdWRlLWZyb209LmdpdC9pZ25vcmUgXAorICAgICAgID5vdXRwdXQgJiYKKyAgICAgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCcKKworIyBUZXN0IFxyXG4gKE1TRE9TLWxpa2Ugc3lzdGVtcykKK3ByaW50ZiAnKi4xXHJcbi8qLjNcclxuISouNlxyXG4nID4uZ2l0aWdub3JlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgd2l0aCBcclxuIGxpbmUgZW5kaW5ncy4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIFwKKyAgICAgICAtLWV4Y2x1ZGU9XCouNiBcCisgICAgICAgLS1leGNsdWRlLXBlci1kaXJlY3Rvcnk9LmdpdGlnbm9yZSBcCisgICAgICAgLS1leGNsdWRlLWZyb209LmdpdC9pZ25vcmUgXAorICAgICAgID5vdXRwdXQgJiYKKyAgICAgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2tpcC13b3JrdHJlZSBnaXRpZ25vcmUnICcKKwlnaXQgYWRkICRhbGxpZ25vcmVzICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgJGFsbGlnbm9yZXMgJiYKKwlybSAkYWxsaWdub3JlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHdpdGggdmFyaW91cyBleGNsdWRlIG9wdGlvbnMuJyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyBcCisgICAgICAgLS1leGNsdWRlPVwqLjYgXAorICAgICAgIC0tZXhjbHVkZS1wZXItZGlyZWN0b3J5PS5naXRpZ25vcmUgXAorICAgICAgIC0tZXhjbHVkZS1mcm9tPS5naXQvaWdub3JlIFwKKyAgICAgICA+b3V0cHV0ICYmCisgICAgIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3RvcmUgZ2l0aWdub3JlJyAnCisJZ2l0IGNoZWNrb3V0IC0taWdub3JlLXNraXAtd29ya3RyZWUtYml0cyAkYWxsaWdub3JlcyAmJgorCXJtIC5naXQvaW5kZXgKKycKKworY2F0ID4gZXhjbHVkZXMtZmlsZSA8PFxFT0YKKyouWzEtOF0KK2UqCitcIyoKK0VPRgorCitnaXQgY29uZmlnIGNvcmUuZXhjbHVkZXNGaWxlIGV4Y2x1ZGVzLWZpbGUKKworZ2l0IC1jIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD10cnVlIHN0YXR1cyB8IGdyZXAgIl4jCSIgPiBvdXRwdXQKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorIwkuZ2l0aWdub3JlCisjCWEuNgorIwlvbmUvCisjCW91dHB1dAorIwl0aHJlZS8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3RhdHVzIGhvbm9ycyBjb3JlLmV4Y2x1ZGVzZmlsZScgXAorCSd0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGluZyBzbGFzaCBpbiBleGNsdWRlIGFsbG93cyBkaXJlY3RvcnkgbWF0Y2goMSknICcKKworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGU9b25lLyA+b3V0cHV0ICYmCisJaWYgZ3JlcCAiXm9uZS8iIG91dHB1dAorCXRoZW4KKwkJZWNobyBPb29wcworCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhaWxpbmcgc2xhc2ggaW4gZXhjbHVkZSBhbGxvd3MgZGlyZWN0b3J5IG1hdGNoICgyKScgJworCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZT1vbmUvdHdvLyA+b3V0cHV0ICYmCisJaWYgZ3JlcCAiXm9uZS90d28vIiBvdXRwdXQKKwl0aGVuCisJCWVjaG8gT29vcHMKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIHNsYXNoIGluIGV4Y2x1ZGUgZm9yY2VzIGRpcmVjdG9yeSBtYXRjaCAoMSknICcKKworCT50d28gJiYKKwlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlPXR3by8gPm91dHB1dCAmJgorCWdyZXAgIl50d28iIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWlsaW5nIHNsYXNoIGluIGV4Y2x1ZGUgZm9yY2VzIGRpcmVjdG9yeSBtYXRjaCAoMiknICcKKworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGU9b25lL2EuMS8gPm91dHB1dCAmJgorCWdyZXAgIl5vbmUvYS4xIiBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZWdhdGVkIGV4Y2x1ZGUgbWF0Y2hlcyBjYW4gb3ZlcnJpZGUgcHJldmlvdXMgb25lcycgJworCisJZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZT0iYS4qIiAtLWV4Y2x1ZGU9IiFhLjEiID5vdXRwdXQgJiYKKwlncmVwICJeYS4xIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhjbHVkZWQgZGlyZWN0b3J5IG92ZXJyaWRlcyBjb250ZW50IHBhdHRlcm5zJyAnCisKKwlnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlPSJvbmUiIC0tZXhjbHVkZT0iIW9uZS9hLjEiID5vdXRwdXQgJiYKKwlpZiBncmVwICJeb25lL2EuMSIgb3V0cHV0CisJdGhlbgorCQlmYWxzZQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lZ2F0ZWQgZGlyZWN0b3J5IGRvZXNuJ1wnJ3QgYWZmZWN0IGNvbnRlbnQgcGF0dGVybnMnICcKKworCWdpdCBscy1maWxlcyAtLW90aGVycyAtLWV4Y2x1ZGU9IiFvbmUiIC0tZXhjbHVkZT0ib25lL2EuMSIgPm91dHB1dCAmJgorCWlmIGdyZXAgIl5vbmUvYS4xIiBvdXRwdXQKKwl0aGVuCisJCWZhbHNlCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyZWN0b3J5IGlnbm9yZSAoc2V0dXApJyAnCisJbWtkaXIgLXAgdG9wL2wxL2wyICYmCisJKAorCQljZCB0b3AgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyAvLmdpdGlnbm9yZSA+LmdpdGlnbm9yZSAmJgorCQllY2hvIGwxID4+LmdpdGlnbm9yZSAmJgorCQllY2hvIGwyID5sMS8uZ2l0aWdub3JlICYmCisJCT5sMS9sMi9sMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyZWN0b3J5IGlnbm9yZSAodG9wbGV2ZWwpJyAnCisJKAorCQljZCB0b3AgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vIC0tZXhjbHVkZS1zdGFuZGFyZAorCSkgPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpcmVjdG9yeSBpZ25vcmUgKGwxL2wyKScgJworCSgKKwkJY2QgdG9wL2wxL2wyICYmCisJCWdpdCBscy1maWxlcyAtbyAtLWV4Y2x1ZGUtc3RhbmRhcmQKKwkpID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXJlY3RvcnkgaWdub3JlIChsMSknICcKKwkoCisJCWNkIHRvcC9sMSAmJgorCQlnaXQgbHMtZmlsZXMgLW8gLS1leGNsdWRlLXN0YW5kYXJkCisJKSA+YWN0dWFsICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdy9oaWRlIGVtcHR5IGlnbm9yZWQgZGlyZWN0b3J5IChzZXR1cCknICcKKwlybSB0b3AvbDEvbDIvbDEgJiYKKwlybSB0b3AvbDEvLmdpdGlnbm9yZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGVtcHR5IGlnbm9yZWQgZGlyZWN0b3J5IHdpdGggLS1kaXJlY3RvcnknICcKKwkoCisJCWNkIHRvcCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gLWkgLS1leGNsdWRlIGwxIC0tZGlyZWN0b3J5CisJKSA+YWN0dWFsICYmCisJZWNobyBsMS8gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGlkZSBlbXB0eSBpZ25vcmVkIGRpcmVjdG9yeSB3aXRoIC0tbm8tZW1wdHktZGlyZWN0b3J5JyAnCisJKAorCQljZCB0b3AgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vIC1pIC0tZXhjbHVkZSBsMSAtLWRpcmVjdG9yeSAtLW5vLWVtcHR5LWRpcmVjdG9yeQorCSkgPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cvaGlkZSBlbXB0eSBpZ25vcmVkIHN1Yi1kaXJlY3RvcnkgKHNldHVwKScgJworCT4gdG9wL2wxL3RyYWNrZWQgJiYKKwkoCisJCWNkIHRvcCAmJgorCQlnaXQgYWRkIC1mIGwxL3RyYWNrZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgZW1wdHkgaWdub3JlZCBzdWItZGlyZWN0b3J5IHdpdGggLS1kaXJlY3RvcnknICcKKwkoCisJCWNkIHRvcCAmJgorCQlnaXQgbHMtZmlsZXMgLW8gLWkgLS1leGNsdWRlIGwxIC0tZGlyZWN0b3J5CisJKSA+YWN0dWFsICYmCisJZWNobyBsMS9sMi8gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGlkZSBlbXB0eSBpZ25vcmVkIHN1Yi1kaXJlY3Rvcnkgd2l0aCAtLW5vLWVtcHR5LWRpcmVjdG9yeScgJworCSgKKwkJY2QgdG9wICYmCisJCWdpdCBscy1maWxlcyAtbyAtaSAtLWV4Y2x1ZGUgbDEgLS1kaXJlY3RvcnkgLS1uby1lbXB0eS1kaXJlY3RvcnkKKwkpID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXR0ZXJuIG1hdGNoZXMgcHJlZml4IGNvbXBsZXRlbHknICcKKwk6ID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLWkgLW8gLS1leGNsdWRlICIvdGhyZWUvYS4zW2FiY10iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIHdpdGggIioqIiBwYXR0ZXJucycgJworCWNhdCA8PFxFT0YgPmV4cGVjdCAmJgorYS4xCitvbmUvYS4xCitvbmUvdHdvL2EuMQordGhyZWUvYS4xCitFT0YKKwlnaXQgbHMtZmlsZXMgLW8gLWkgLS1leGNsdWRlICIqKi9hLjEiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgd2l0aCAiKioiIHBhdHRlcm5zIGFuZCBubyBzbGFzaGVzJyAnCisJOiA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1vIC1pIC0tZXhjbHVkZSAib25lKiphLjEiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lZ2F0aXZlIHBhdHRlcm5zJyAnCisJZ2l0IGluaXQgcmVpbmNsdWRlICYmCisJKAorCQljZCByZWluY2x1ZGUgJiYKKwkJY2F0ID4uZ2l0aWdub3JlIDw8LVxFT0YgJiYKKwkJL2Zvb28KKwkJL2ZvbworCQkhZm9vL2Jhci9iYXIKKwkJRU9GCisJCW1rZGlyIGZvb28gJiYKKwkJY2F0ID5mb29vLy5naXRpZ25vcmUgPDwtXEVPRiAmJgorCQkhLyoKKwkJRU9GCisJCW1rZGlyIC1wIGZvby9iYXIgJiYKKwkJdG91Y2ggYWJjIGZvby9kZWYgZm9vL2Jhci9naGkgZm9vL2Jhci9iYXIgJiYKKwkJZ2l0IGxzLWZpbGVzIC1vIC0tZXhjbHVkZS1zdGFuZGFyZCA+Li4vYWN0dWFsICYmCisJCWNhdCA+Li4vZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQkuZ2l0aWdub3JlCisJCWFiYworCQlmb28vYmFyL2JhcgorCQlFT0YKKwkJdGVzdF9jbXAgLi4vZXhwZWN0ZWQgLi4vYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwMDItbHMtZmlsZXMtZGFzaHBhdGguc2ggYi90L3QzMDAyLWxzLWZpbGVzLWRhc2hwYXRoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3MDRiMDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDAyLWxzLWZpbGVzLWRhc2hwYXRoLnNoCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLWZpbGVzIHRlc3QgKC0tIHRvIHRlcm1pbmF0ZSB0aGUgcGF0aCBsaXN0KS4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIHdpdGggdGhlIGZvbGxvd2luZyBvbiB0aGUKK2ZpbGVzeXN0ZW0uCisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIC1mb28JLSBhIGZpbGUgd2l0aCBhIGZ1bm55IG5hbWUuCisgICAgLS0JCS0gYW5vdGhlciBmaWxlIHdpdGggYSBmdW5ueSBuYW1lLgorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCXNldHVwIFwKKwknZWNobyBmcm90eiA+cGF0aDAgJiYKKwllY2hvIGZyb3R6ID4uLy1mb28gJiYKKwllY2hvIGZyb3R6ID4uLy0tJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIHdpdGhvdXQgcGF0aCByZXN0cmljdGlvbi4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzID5vdXRwdXQgJiYKKyAgICAgdGVzdF9jbXAgb3V0cHV0IC0gPDxFT0YKKy0tCistZm9vCitvdXRwdXQKK3BhdGgwCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyB3aXRoIHBhdGggcmVzdHJpY3Rpb24uJyBcCisgICAgJ2dpdCBscy1maWxlcyAtLW90aGVycyBwYXRoMCA+b3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IC0gPDxFT0YKK3BhdGgwCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyB3aXRoIHBhdGggcmVzdHJpY3Rpb24gd2l0aCAtLS4nIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tIHBhdGgwID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgLSA8PEVPRgorcGF0aDAKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIHdpdGggcGF0aCByZXN0cmljdGlvbiB3aXRoIC0tIC0tLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS0gLS0gPm91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCAtIDw8RU9GCistLQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgbHMtZmlsZXMgd2l0aCBubyBwYXRoIHJlc3RyaWN0aW9uLicgXAorICAgICdnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS0gPm91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCAtIDw8RU9GCistLQorLWZvbworb3V0cHV0CitwYXRoMAorRU9GCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwMy1scy1maWxlcy1leGNsdWRlLnNoIGIvdC90MzAwMy1scy1maWxlcy1leGNsdWRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1ZWMzMzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDAzLWxzLWZpbGVzLWV4Y2x1ZGUuc2gKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2xzLWZpbGVzIC0tZXhjbHVkZSBkb2VzIG5vdCBhZmZlY3QgaW5kZXggZmlsZXMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHJlcG8gd2l0aCBmaWxlJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBmaWxlICYmCisJZWNobyBtb2RpZmljYXRpb24gPmZpbGUKKycKKworY2hlY2tfb3V0cHV0KCkgewordGVzdF9leHBlY3Rfc3VjY2VzcyAibHMtZmlsZXMgb3V0cHV0IGNvbnRhaW5zIGZpbGUgKCQxKSIgIgorCWVjaG8gJyQyJyA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC0tZXhjbHVkZS1zdGFuZGFyZCAtLSQxID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisiCit9CisKK2NoZWNrX2FsbF9vdXRwdXQoKSB7CisJY2hlY2tfb3V0cHV0ICdjYWNoZWQnICdmaWxlJworCWNoZWNrX291dHB1dCAnbW9kaWZpZWQnICdmaWxlJworfQorCitjaGVja19hbGxfb3V0cHV0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZmlsZSB0byBnaXRpZ25vcmUnICcKKwllY2hvIGZpbGUgPi5naXRpZ25vcmUKKycKK2NoZWNrX2FsbF9vdXRwdXQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLWkgbGlzdHMgb25seSB0cmFja2VkLWJ1dC1pZ25vcmVkIGZpbGVzJyAnCisJZWNobyBjb250ZW50ID5vdGhlci1maWxlICYmCisJZ2l0IGFkZCBvdGhlci1maWxlICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLWkgLS1leGNsdWRlLXN0YW5kYXJkID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwNC1scy1maWxlcy1iYXNpYy5zaCBiL3QvdDMwMDQtbHMtZmlsZXMtYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWM3YWRiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMDQtbHMtZmlsZXMtYmFzaWMuc2gKQEAgLTAsMCArMSw1NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIGxzLWZpbGVzIHRlc3RzCisKK1RoaXMgdGVzdCBydW5zIGdpdCBscy1maWxlcyB3aXRoIHZhcmlvdXMgdW51c3VhbCBvciBtYWxmb3JtZWQKK2NvbW1hbmQtbGluZSBhcmd1bWVudHMuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCis+ZW1wdHkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgaW4gZW1wdHkgcmVwb3NpdG9yeScgJworCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIHdpdGggbm9uZXhpc3RlbnQgcGF0aCcgJworCWdpdCBscy1maWxlcyBkb2Vzbm90ZXhpc3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyB3aXRoIG5vbnNlbnNlIG9wdGlvbicgJworCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBscy1maWxlcyAtLW5vbnNlbnNlIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2U6IGdpdCBscy1maWxlcyIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC1oIGluIGNvcnJ1cHQgcmVwb3NpdG9yeScgJworCW1rZGlyIGJyb2tlbiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCT4uZ2l0L2luZGV4ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBscy1maWxlcyAtaCA+dXNhZ2UgMj4mMQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZTogZ2l0IGxzLWZpbGVzICIgYnJva2VuL3VzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2xzLWZpbGVzIHdpdGggYWJzb2x1dGUgcGF0aHMgdG8gc3ltbGlua3MnICcKKwlta2RpciBzdWJzICYmCisJbG4gLXMgbm9zdWNoIGxpbmsgJiYKKwlsbiAtcyAuLi9ub3N1Y2ggc3Vicy9saW5rICYmCisJZ2l0IGFkZCBsaW5rIHN1YnMvbGluayAmJgorCWdpdCBscy1maWxlcyAtcyBsaW5rIHN1YnMvbGluayA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1zICIkKHB3ZCkvbGluayIgIiQocHdkKS9zdWJzL2xpbmsiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkoCisJCWNkIHN1YnMgJiYKKwkJZ2l0IGxzLWZpbGVzIC1zIGxpbmsgPi4uL2V4cGVjdCAmJgorCQlnaXQgbHMtZmlsZXMgLXMgIiQocHdkKS9saW5rIiA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDA1LWxzLWZpbGVzLXJlbGF0aXZlLnNoIGIvdC90MzAwNS1scy1maWxlcy1yZWxhdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNzc4Njk0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzAwNS1scy1maWxlcy1yZWxhdGl2ZS5zaApAQCAtMCwwICsxLDcyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbHMtZmlsZXMgdGVzdHMgd2l0aCByZWxhdGl2ZSBwYXRocworCitUaGlzIHRlc3QgcnVucyBnaXQgbHMtZmlsZXMgd2l0aCB2YXJpb3VzIHJlbGF0aXZlIHBhdGggYXJndW1lbnRzLgorJworCisuIC4vdGVzdC1saWIuc2gKKworbmV3X2xpbmU9JworJworc3E9XCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZScgJworCTogPm5ldmVyLW1pbmQtbWUgJiYKKwlnaXQgYWRkIG5ldmVyLW1pbmQtbWUgJiYKKwlta2RpciB0b3AgJiYKKwkoCisJCWNkIHRvcCAmJgorCQlta2RpciBzdWIgJiYKKwkJeD0ieCB4YSB4YmMgeGRlZiB4Z2hpaiB4a2xtbm8iICYmCisJCXk9JChlY2hvICIkeCIgfCB0ciB4IHkpICYmCisJCXRvdWNoICR4ICYmCisJCXRvdWNoICR5ICYmCisJCWNkIHN1YiAmJgorCQlnaXQgYWRkIC4uL3gqCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyB3aXRoIG1peGVkIGxldmVscycgJworCSgKKwkJY2QgdG9wL3N1YiAmJgorCQljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJLi4vLi4vbmV2ZXItbWluZC1tZQorCQkuLi94CisJCUVPRgorCQlnaXQgbHMtZmlsZXMgJChjYXQgZXhwZWN0KSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC1jJyAnCisJKAorCQljZCB0b3Avc3ViICYmCisJCWZvciBmIGluIC4uL3kqCisJCWRvCisJCQllY2hvICJlcnJvcjogcGF0aHNwZWMgJHNxJGYkc3EgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQuIgorCQlkb25lID5leHBlY3QuZXJyICYmCisJCWVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvICR7c3F9Z2l0IGFkZCR7c3F9PyIgPj5leHBlY3QuZXJyICYmCisJCWxzIC4uL3gqID5leHBlY3Qub3V0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtYyAtLWVycm9yLXVubWF0Y2ggLi4vW3h5XSogPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJCXRlc3RfY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCQl0ZXN0X2NtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC1vJyAnCisJKAorCQljZCB0b3Avc3ViICYmCisJCWZvciBmIGluIC4uL3gqCisJCWRvCisJCQllY2hvICJlcnJvcjogcGF0aHNwZWMgJHNxJGYkc3EgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZShzKSBrbm93biB0byBnaXQuIgorCQlkb25lID5leHBlY3QuZXJyICYmCisJCWVjaG8gIkRpZCB5b3UgZm9yZ2V0IHRvICR7c3F9Z2l0IGFkZCR7c3F9PyIgPj5leHBlY3QuZXJyICYmCisJCWxzIC4uL3kqID5leHBlY3Qub3V0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtbyAtLWVycm9yLXVubWF0Y2ggLi4vW3h5XSogPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisJCXRlc3RfY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCQl0ZXN0X2NtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAwNi1scy1maWxlcy1sb25nLnNoIGIvdC90MzAwNi1scy1maWxlcy1sb25nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIwMmFkNjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDA2LWxzLWZpbGVzLWxvbmcuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J292ZXJseSBsb25nIHBhdGhzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXA9ZmlsZWZpbGVmaWxlZmlsZWZpbGVmaWxlZmlsZWZpbGUgJiYKKwlwPSRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwICYmCisJcD0kcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCRwJHAkcCAmJgorCisJcGF0aF9hPSR7cH1fYSAmJgorCXBhdGhfej0ke3B9X3ogJiYKKworCWJsb2JfYT0kKGVjaG8gZnJvdHogfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlibG9iX3o9JChlY2hvIG5pdGZvbCB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCisJcGF0PSIxMDA2NDQgJXMgMFx0JXNcbiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3Zlcmx5LWxvbmcgcGF0aCBieSBpdHNlbGYgaXMgbm90IGEgcHJvYmxlbScgJworCXByaW50ZiAiJHBhdCIgIiRibG9iX2EiICIkcGF0aF9hIiB8CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWluZGV4LWluZm8gJiYKKwllY2hvICIkcGF0aF9hIiA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJseS1sb25nIHBhdGggZG9lcyBub3QgcmVwbGFjZSBhbm90aGVyIGJ5IG1pc3Rha2UnICcKKwlwcmludGYgIiRwYXQiICIkYmxvYl9hIiAiJHBhdGhfYSIgIiRibG9iX3oiICIkcGF0aF96IiB8CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWluZGV4LWluZm8gJiYKKwkoCisJCWVjaG8gIiRwYXRoX2EiCisJCWVjaG8gIiRwYXRoX3oiCisJKSA+ZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2ggYi90L3QzMDEwLWxzLWZpbGVzLWtpbGxlZC1tb2RpZmllZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ODBlMTU4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzAxMC1scy1maWxlcy1raWxsZWQtbW9kaWZpZWQuc2gKQEAgLTAsMCArMSwxMjYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLWZpbGVzIC1rIGFuZCAtbSBmbGFncyB0ZXN0LgorCitUaGlzIHRlc3QgcHJlcGFyZXMgdGhlIGZvbGxvd2luZyBpbiB0aGUgY2FjaGU6CisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIHBhdGgxICAgICAgIC0gYSBzeW1saW5rCisgICAgcGF0aDIvZmlsZTIgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMy9maWxlMyAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGh4L2p1ICAgIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgc3VibW9kMS8JLSBhIHN1Ym1vZHVsZQorICAgIHN1Ym1vZDIvCS0gYW5vdGhlciBzdWJtb2R1bGUKKworYW5kIHRoZSBmb2xsb3dpbmcgb24gdGhlIGZpbGVzeXN0ZW06CisKKyAgICBwYXRoMC9maWxlMCAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgxL2ZpbGUxIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5CisgICAgcGF0aDIgICAgICAgLSBhIGZpbGUKKyAgICBwYXRoMyAgICAgICAtIGEgc3ltbGluaworICAgIHBhdGg0CS0gYSBmaWxlCisgICAgcGF0aDUJLSBhIHN5bWxpbmsKKyAgICBwYXRoNi9maWxlNiAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGh4L2p1L25rIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5IHRvIGJlIGtpbGxlZAorICAgIHN1Ym1vZDEvCS0gYSBzdWJtb2R1bGUgKG1vZGlmaWVkIGZyb20gdGhlIGNhY2hlKQorICAgIHN1Ym1vZDIvCS0gYSBzdWJtb2R1bGUgKG1hdGNoZXMgdGhlIGNhY2hlKQorCitnaXQgbHMtZmlsZXMgLWsgc2hvdWxkIHJlcG9ydCB0aGF0IGV4aXN0aW5nIGZpbGVzeXN0ZW0gb2JqZWN0cworcGF0aDAvKiwgcGF0aDEvKiwgcGF0aDIgYW5kIHBhdGgzIHRvIGJlIGtpbGxlZC4KKworQWxzbyBmb3IgbW9kaWZpY2F0aW9uIHRlc3QsIHRoZSBjYWNoZSBhbmQgd29ya2luZyB0cmVlIGhhdmU6CisKKyAgICBwYXRoNyAgICAgICAtIGFuIGVtcHR5IGZpbGUsIG1vZGlmaWVkIHRvIGEgbm9uLWVtcHR5IGZpbGUuCisgICAgcGF0aDggICAgICAgLSBhIG5vbi1lbXB0eSBmaWxlLCBtb2RpZmllZCB0byBhbiBlbXB0eSBmaWxlLgorICAgIHBhdGg5CS0gYW4gZW1wdHkgZmlsZSwgY2FjaGUgZGlydGllZC4KKyAgICBwYXRoMTAJLSBhIG5vbi1lbXB0eSBmaWxlLCBjYWNoZSBkaXJ0aWVkLgorCitXZSBzaG91bGQgcmVwb3J0IHBhdGgwLCBwYXRoMSwgcGF0aDIvZmlsZTIsIHBhdGgzL2ZpbGUzLCBwYXRoNyBhbmQgcGF0aDgKK21vZGlmaWVkIHdpdGhvdXQgcmVwb3J0aW5nIHBhdGg5IGFuZCBwYXRoMTAuICBzdWJtb2QxIGlzIGFsc28gbW9kaWZpZWQuCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB0byBhZGQgdmFyaW91cyBwYXRocy4nICcKKwlkYXRlID5wYXRoMCAmJgorCXRlc3RfbG5fc19hZGQgeHl6enkgcGF0aDEgJiYKKwlta2RpciBwYXRoMiBwYXRoMyBwYXRoeCAmJgorCWRhdGUgPnBhdGgyL2ZpbGUyICYmCisJZGF0ZSA+cGF0aDMvZmlsZTMgJiYKKwk+cGF0aHgvanUgJiYKKwk6ID5wYXRoNyAmJgorCWRhdGUgPnBhdGg4ICYmCisJOiA+cGF0aDkgJiYKKwlkYXRlID5wYXRoMTAgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIHBhdGgwIHBhdGg/L2ZpbGU/IHBhdGh4L2p1IHBhdGg3IHBhdGg4IHBhdGg5IHBhdGgxMCAmJgorCWdpdCBpbml0IHN1Ym1vZDEgJiYKKwlnaXQgLUMgc3VibW9kMSBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZW1wdHkgMSIgJiYKKwlnaXQgaW5pdCBzdWJtb2QyICYmCisJZ2l0IC1DIHN1Ym1vZDIgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IDIiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBzdWJtb2RbMTJdICYmCisJKAorCQljZCBzdWJtb2QxICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZW1wdHkgMSAodXBkYXRlZCkiCisJKSAmJgorCXJtIC1mciBwYXRoPwkjIGxlYXZlIHBhdGgxMCBhbG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLWsgdG8gc2hvdyBraWxsZWQgZmlsZXMuJyAnCisJZGF0ZSA+cGF0aDIgJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCisJdGhlbgorCQlsbiAtcyBmcm90eiBwYXRoMyAmJgorCQlsbiAtcyBuaXRmb2wgcGF0aDUKKwllbHNlCisJCWRhdGUgPnBhdGgzICYmCisJCWRhdGUgPnBhdGg1CisJZmkgJiYKKwlta2RpciAtcCBwYXRoMCBwYXRoMSBwYXRoNiBwYXRoeC9qdSAmJgorCWRhdGUgPnBhdGgwL2ZpbGUwICYmCisJZGF0ZSA+cGF0aDEvZmlsZTEgJiYKKwlkYXRlID5wYXRoNi9maWxlNiAmJgorCWRhdGUgPnBhdGg3ICYmCisJOiA+cGF0aDggJiYKKwk6ID5wYXRoOSAmJgorCXRvdWNoIHBhdGgxMCAmJgorCT5wYXRoeC9qdS9uayAmJgorCWNhdCA+LmV4cGVjdGVkIDw8LVxFT0YKKwlwYXRoMC9maWxlMAorCXBhdGgxL2ZpbGUxCisJcGF0aDIKKwlwYXRoMworCXBhdGh4L2p1L25rCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBscy1maWxlcyAtayBvdXRwdXQgKHcvbyBpY2FzZSknICcKKwlnaXQgbHMtZmlsZXMgLWsgPi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCAuZXhwZWN0ZWQgLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLWsgb3V0cHV0ICh3LyBpY2FzZSknICcKKwlnaXQgLWMgY29yZS5pZ25vcmVjYXNlPXRydWUgbHMtZmlsZXMgLWsgPi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCAuZXhwZWN0ZWQgLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgLW0gdG8gc2hvdyBtb2RpZmllZCBmaWxlcy4nICcKKwlnaXQgbHMtZmlsZXMgLW0gPi5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgZ2l0IGxzLWZpbGVzIC1tIG91dHB1dC4nICcKKwljYXQgPi5leHBlY3RlZCA8PC1cRU9GICYmCisJcGF0aDAKKwlwYXRoMQorCXBhdGgyL2ZpbGUyCisJcGF0aDMvZmlsZTMKKwlwYXRoNworCXBhdGg4CisJcGF0aHgvanUKKwlzdWJtb2QxCisJRU9GCisJdGVzdF9jbXAgLmV4cGVjdGVkIC5vdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDIwLWxzLWZpbGVzLWVycm9yLXVubWF0Y2guc2ggYi90L3QzMDIwLWxzLWZpbGVzLWVycm9yLXVubWF0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTI0ZTczYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMjAtbHMtZmlsZXMtZXJyb3ItdW5tYXRjaC5zaApAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IENhcmwgRC4gV29ydGgKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLWZpbGVzIHRlc3QgZm9yIC0tZXJyb3ItdW5tYXRjaCBvcHRpb24KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCB0byBlbnN1cmUgaXQgY29ycmVjdGx5CityZXR1cm5zIGFuIGVycm9yIHdoZW4gYSBub24tZXhpc3RlbnQgcGF0aCBpcyBwcm92aWRlZCBvbiB0aGUgY29tbWFuZAorbGluZS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRvdWNoIGZvbyBiYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvbyBiYXIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZm9vIGJhciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggc2hvdWxkIGZhaWwgd2l0aCB1bm1hdGNoZWQgcGF0aC4nIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gYmFyLWRvZXMtbm90LW1hdGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBzaG91bGQgc3VjY2VlZCB3aXRoIG1hdGNoZWQgcGF0aHMuJyBcCisgICAgJ2dpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZm9vIGJhcicKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaCBiL3QvdDMwMzAtbWVyZ2UtcmVjdXJzaXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyZTE4NTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDMwLW1lcmdlLXJlY3Vyc2l2ZS5zaApAQCAtMCwwICsxLDYzMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlLXJlY3Vyc2l2ZSBiYWNrZW5kIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAxJyAnCisKKwllY2hvIGhlbGxvID5hICYmCisJbzA9JChnaXQgaGFzaC1vYmplY3QgYSkgJiYKKwljcCBhIGIgJiYKKwljcCBhIGMgJiYKKwlta2RpciBkICYmCisJY3AgYSBkL2UgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBhZGQgYSBiIGMgZC9lICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJYzA9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJZ2l0IGJyYW5jaCBkZi0xICYmCisJZ2l0IGJyYW5jaCBkZi0yICYmCisJZ2l0IGJyYW5jaCBkZi0zICYmCisJZ2l0IGJyYW5jaCByZW1vdmUgJiYKKwlnaXQgYnJhbmNoIHN1Ym1vZCAmJgorCWdpdCBicmFuY2ggY29weSAmJgorCWdpdCBicmFuY2ggcmVuYW1lICYmCisJZ2l0IGJyYW5jaCByZW5hbWUtbG4gJiYKKworCWVjaG8gaGVsbG8gPj5hICYmCisJY3AgYSBkL2UgJiYKKwlvMT0kKGdpdCBoYXNoLW9iamVjdCBhKSAmJgorCisJZ2l0IGFkZCBhIGQvZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibWFzdGVyIG1vZGlmaWVzIGEgYW5kIGQvZSIgJiYKKwljMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzEJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzEJZC9lIgorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDInICcKKworCXJtIC1yZiBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCA7IGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlhIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCWVjaG8gZ29vZGJ5ZSA+PmEgJiYKKwlvMj0kKGdpdCBoYXNoLW9iamVjdCBhKSAmJgorCisJZ2l0IGFkZCBhICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzaWRlIG1vZGlmaWVzIGEiICYmCisJYzI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJKCBnaXQgbHMtdHJlZSAtciBIRUFEIDsgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8yCWEiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMiAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAzJyAnCisKKwlybSAtcmYgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IGRmLTEgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlybSAtZiBiICYmIG1rZGlyIGIgJiYgZWNobyBkZi0xID5iL2MgJiYgZ2l0IGFkZCBiL2MgJiYKKwlvMz0kKGdpdCBoYXNoLW9iamVjdCBiL2MpICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJkZi0xIG1ha2VzIGIvYyIgJiYKKwljMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8zCWIvYyIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhIgorCQllY2hvICIxMDA2NDQgJG8zIDAJYi9jIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCA0JyAnCisKKwlybSAtcmYgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IGRmLTIgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlybSAtZiBhICYmIG1rZGlyIGEgJiYgZWNobyBkZi0yID5hL2MgJiYgZ2l0IGFkZCBhL2MgJiYKKwlvND0kKGdpdCBoYXNoLW9iamVjdCBhL2MpICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJkZi0yIG1ha2VzIGEvYyIgJiYKKwljND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzQJYS9jIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzQgMAlhL2MiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCA1JyAnCisKKwlybSAtcmYgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IHJlbW92ZSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCA7IGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlhIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCXJtIC1mIGIgJiYKKwllY2hvIHJlbW92ZS1jb25mbGljdCA+YSAmJgorCisJZ2l0IGFkZCBhICYmCisJZ2l0IHJtIGIgJiYKKwlvNT0kKGdpdCBoYXNoLW9iamVjdCBhKSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIHJlbW92ZXMgYiBhbmQgbW9kaWZpZXMgYSIgJiYKKwljNT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgYmxvYiAkbzUJYSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzUgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDYnICcKKworCXJtIC1yZiBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgZGYtMyAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCA7IGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlhIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCXJtIC1mciBkICYmIGVjaG8gZGYtMyA+ZCAmJiBnaXQgYWRkIGQgJiYKKwlvNj0kKGdpdCBoYXNoLW9iamVjdCBkKSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZGYtMyBtYWtlcyBkIiAmJgorCWM2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCSggZ2l0IGxzLXRyZWUgLXIgSEVBRCA7IGdpdCBscy1maWxlcyAtcyApID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAlhIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYiIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWMiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvNglkIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG82IDAJZCIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCA3JyAnCisKKwlnaXQgY2hlY2tvdXQgc3VibW9kICYmCisJZ2l0IHJtIGQvZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInJlbW92ZSBkL2UiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxNjAwMDAgJGMxIGQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJtYWtlIGQvIGEgc3VibW9kdWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCA4JyAnCisJZ2l0IGNoZWNrb3V0IHJlbmFtZSAmJgorCWdpdCBtdiBhIGUgJiYKKwlnaXQgYWRkIGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUgYS0+ZSIgJiYKKwljNz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgcmVuYW1lLWxuICYmCisJZ2l0IG12IGEgZSAmJgorCXRlc3RfbG5fc19hZGQgZSBhICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIGEtPmUsIHN5bWxpbmsgYS0+ZSIgJiYKKwlvbG49YHByaW50ZiBlIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW5gCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIDknICcKKwlnaXQgY2hlY2tvdXQgY29weSAmJgorCWNwIGEgZSAmJgorCWdpdCBhZGQgZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvcHkgYS0+ZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHNpbXBsZScgJworCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCBjaGVja291dCAtZiAiJGMyIiAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBtZXJnZS1yZWN1cnNpdmUgIiRjMCIgLS0gIiRjMiIgIiRjMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIHJlc3VsdCcgJworCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzAgMQlhIgorCQllY2hvICIxMDA2NDQgJG8yIDIJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAzCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgdGhlIGluZGV4IGhhcyB1bnJlc29sdmVkIGVudHJpZXMnICcKKworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjMSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcyIgb3V0ICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJZb3UgaGF2ZSBub3QgY29uY2x1ZGVkIHlvdXIgbWVyZ2UiIG91dCAmJgorCXJtIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAiJGM1IiAyPiBvdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZToiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgcmVtb3ZlIGNvbmZsaWN0JyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiJGMwIiAtLSAiJGMxIiAiJGM1IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgcmVtb3ZlIGNvbmZsaWN0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMCAxCWEiCisJCWVjaG8gIjEwMDY0NCAkbzEgMglhIgorCQllY2hvICIxMDA2NDQgJG81IDMJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIHNpbXBsZScgJworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzEiICIkYzMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSByZXN1bHQnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMyAwCWIvYyIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIGNvbmZsaWN0JyAnCisKKwlybSAtZnIgW2FiY2RdICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtZiAiJGMxIiAmJgorCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBtZXJnZS1yZWN1cnNpdmUgIiRjMCIgLS0gIiRjMSIgIiRjNCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIGQvZiBjb25mbGljdCByZXN1bHQnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8wIDEJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAyCWEiCisJCWVjaG8gIjEwMDY0NCAkbzQgMAlhL2MiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgdGhlIG90aGVyIHdheScgJworCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjNCIgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzQiICIkYzEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgcmVzdWx0IHRoZSBvdGhlciB3YXknICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8wIDEJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAzCWEiCisJCWVjaG8gIjEwMDY0NCAkbzQgMAlhL2MiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWQvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QnICcKKworCXJtIC1mciBbYWJjZF0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkYzEiICYmCisKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiJGMwIiAtLSAiJGMxIiAiJGM2IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgZC9mIGNvbmZsaWN0IHJlc3VsdCcgJworCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzYgMwlkIgorCQllY2hvICIxMDA2NDQgJG8wIDEJZC9lIgorCQllY2hvICIxMDA2NDQgJG8xIDIJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtcmVjdXJzaXZlIGQvZiBjb25mbGljdCcgJworCisJcm0gLWZyIFthYmNkXSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgIiRjNiIgJiYKKworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgbWVyZ2UtcmVjdXJzaXZlICIkYzAiIC0tICIkYzYiICIkYzEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBkL2YgY29uZmxpY3QgcmVzdWx0JyAnCisKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWEiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAliIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYyIKKwkJZWNobyAiMTAwNjQ0ICRvNiAyCWQiCisJCWVjaG8gIjEwMDY0NCAkbzAgMQlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzEgMwlkL2UiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBhbmQgMy13YXkgbWVyZ2UnICcKKworCWdpdCByZXNldCAtLWhhcmQgIiRjMiIgJiYKKwlnaXQgcmVhZC10cmVlIC1tICIkYzAiICIkYzIiICIkYzEiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgYW5kIGJpbmQgbWVyZ2UnICcKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IHJlYWQtdHJlZSAtLXByZWZpeD1NLyBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vZC9lIgorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PWExLyBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCU0vYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCU0vZC9lIgorCQllY2hvICIxMDA2NDQgJG8xIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWExL2EiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhMS9iIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYTEvYyIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWExL2QvZSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8xIDAJZC9lIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgcmVhZC10cmVlIC0tcHJlZml4PXovIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJTS9hIgorCQllY2hvICIxMDA2NDQgJG8wIDAJTS9iIgorCQllY2hvICIxMDA2NDQgJG8wIDAJTS9jIgorCQllY2hvICIxMDA2NDQgJG8xIDAJTS9kL2UiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlhIgorCQllY2hvICIxMDA2NDQgJG8xIDAJYTEvYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWExL2IiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAlhMS9jIgorCQllY2hvICIxMDA2NDQgJG8xIDAJYTEvZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJYiIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAlkL2UiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAl6L2EiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAl6L2IiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAl6L2MiCisJCWVjaG8gIjEwMDY0NCAkbzEgMAl6L2QvZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSB3LyBlbXB0eSB3b3JrIHRyZWUgLSBvdXJzIGhhcyByZW5hbWUnICcKKwkoCisJCUdJVF9XT1JLX1RSRUU9IiRQV0Qvb3Vycy1oYXMtcmVuYW1lLXdvcmsiICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFICYmCisJCUdJVF9JTkRFWF9GSUxFPSIkUFdEL291cnMtaGFzLXJlbmFtZS1pbmRleCIgJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCW1rZGlyICIkR0lUX1dPUktfVFJFRSIgJiYKKwkJZ2l0IHJlYWQtdHJlZSAtaSAtbSAkYzcgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWlnbm9yZS1taXNzaW5nIC0tcmVmcmVzaCAmJgorCQlnaXQgbWVyZ2UtcmVjdXJzaXZlICRjMCAtLSAkYzcgJGMzICYmCisJCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsLWZpbGVzCisJKSAyPmFjdHVhbC1lcnIgJiYKKwk+ZXhwZWN0ZWQtZXJyICYmCisJY2F0ID5leHBlY3RlZC1maWxlcyA8PC1FT0YgJiYKKwkxMDA2NDQgJG8zIDAJYi9jCisJMTAwNjQ0ICRvMCAwCWMKKwkxMDA2NDQgJG8wIDAJZC9lCisJMTAwNjQ0ICRvMCAwCWUKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZC1maWxlcyBhY3R1YWwtZmlsZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1lcnIgYWN0dWFsLWVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1yZWN1cnNpdmUgdy8gZW1wdHkgd29yayB0cmVlIC0gdGhlaXJzIGhhcyByZW5hbWUnICcKKwkoCisJCUdJVF9XT1JLX1RSRUU9IiRQV0QvdGhlaXJzLWhhcy1yZW5hbWUtd29yayIgJiYKKwkJZXhwb3J0IEdJVF9XT1JLX1RSRUUgJiYKKwkJR0lUX0lOREVYX0ZJTEU9IiRQV0QvdGhlaXJzLWhhcy1yZW5hbWUtaW5kZXgiICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQlta2RpciAiJEdJVF9XT1JLX1RSRUUiICYmCisJCWdpdCByZWFkLXRyZWUgLWkgLW0gJGMzICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1pZ25vcmUtbWlzc2luZyAtLXJlZnJlc2ggJiYKKwkJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAkYzAgLS0gJGMzICRjNyAmJgorCQlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbC1maWxlcworCSkgMj5hY3R1YWwtZXJyICYmCisJPmV4cGVjdGVkLWVyciAmJgorCWNhdCA+ZXhwZWN0ZWQtZmlsZXMgPDwtRU9GICYmCisJMTAwNjQ0ICRvMyAwCWIvYworCTEwMDY0NCAkbzAgMAljCisJMTAwNjQ0ICRvMCAwCWQvZQorCTEwMDY0NCAkbzAgMAllCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQtZmlsZXMgYWN0dWFsLWZpbGVzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtZXJyIGFjdHVhbC1lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgcmVtb3ZlcyBlbXB0eSBkaXJlY3RvcmllcycgJworCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcm0gJiYKKwlnaXQgcm0gZC9lICYmCisJZ2l0IGNvbW1pdCAtbXJlbW92ZWQtZC9lICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgcm0gJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1kIGQKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbWVyZ2UtcmVjdXJzaXZlIHNpbXBsZSB3L3N1Ym1vZHVsZScgJworCisJZ2l0IGNoZWNrb3V0IHN1Ym1vZCAmJgorCWdpdCBtZXJnZSByZW1vdmUKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbWVyZ2UtcmVjdXJzaXZlIHNpbXBsZSB3L3N1Ym1vZHVsZSByZXN1bHQnICcKKworCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG81IDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWMiCisJCWVjaG8gIjE2MDAwMCAkYzEgMAlkIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLXJlY3Vyc2l2ZSBjb3B5IHZzLiByZW5hbWUnICcKKwlnaXQgY2hlY2tvdXQgLWYgY29weSAmJgorCWdpdCBtZXJnZSByZW5hbWUgJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWIiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAljIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZC9lIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJZSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdtZXJnZS1yZWN1cnNpdmUgcmVuYW1lIHZzLiByZW5hbWUvc3ltbGluaycgJworCisJZ2l0IGNoZWNrb3V0IC1mIHJlbmFtZSAmJgorCWdpdCBtZXJnZSByZW5hbWUtbG4gJiYKKwkoIGdpdCBscy10cmVlIC1yIEhFQUQgOyBnaXQgbHMtZmlsZXMgLXMgKSA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMjAwMDAgYmxvYiAkb2xuCWEiCisJCWVjaG8gIjEwMDY0NCBibG9iICRvMAliIgorCQllY2hvICIxMDA2NDQgYmxvYiAkbzAJYyIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWQvZSIKKwkJZWNobyAiMTAwNjQ0IGJsb2IgJG8wCWUiCisJCWVjaG8gIjEyMDAwMCAkb2xuIDAJYSIKKwkJZWNobyAiMTAwNjQ0ICRvMCAwCWIiCisJCWVjaG8gIjEwMDY0NCAkbzAgMAljIgorCQllY2hvICIxMDA2NDQgJG8wIDAJZC9lIgorCQllY2hvICIxMDA2NDQgJG8wIDAJZSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAzMS1tZXJnZS1jcmlzY3Jvc3Muc2ggYi90L3QzMDMxLW1lcmdlLWNyaXNjcm9zcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNTliMGEzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzAzMS1tZXJnZS1jcmlzY3Jvc3Muc2gKQEAgLTAsMCArMSw5NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlLXJlY3Vyc2l2ZSBiYWNrZW5kIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjICAgICAgICAgQSAgICAgIDwtIGNyZWF0ZSBzb21lIGZpbGVzCisjICAgICAgICAvIFwKKyMgICAgICAgQiAgIEMgICAgPC0gY2F1c2UgcmVuYW1lL2RlbGV0ZSBjb25mbGljdHMgYmV0d2VlbiBCIGFuZCBDCisjICAgICAgLyAgICAgXAorIyAgICAgfFwgICAgIC98CisjICAgICB8IEQgICBFIHwKKyMgICAgIHwgIFwgLyAgfAorIyAgICAgfCAgIFggICB8CisjICAgICB8ICAvIFwgIHwKKyMgICAgIHwgLyAgIFwgfAorIyAgICAgfC8gICAgIFx8CisjICAgICBGICAgICAgIEcgIDwtIG1lcmdlIEUgaW50byBCLCBEIGludG8gQworIyAgICAgIFwgICAgIC8KKyMgICAgICAgXCAgIC8KKyMgICAgICAgIFwgLworIyAgICAgICAgIEggICAgICA8LSByZWN1cnNpdmUgbWVyZ2UgY3Jhc2hlcworIworCisjIGluaXRpYWxpemUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBjcmlzcy1jcm9zcyBoaXN0b3J5JyAnCisJbWtkaXIgZGF0YSAmJgorCisJIyBjcmVhdGUgYSBidW5jaCBvZiBmaWxlcworCW49MSAmJgorCXdoaWxlIHRlc3QgJG4gLWxlIDEwCisJZG8KKwkJZWNobyAkbiA+IGRhdGEvJG4gJiYKKwkJbj0kKCgkbisxKSkgfHwKKwkJcmV0dXJuIDEKKwlkb25lICYmCisKKwkjIGNoZWNrIHRoZW0gaW4KKwlnaXQgYWRkIGRhdGEgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKwlnaXQgYnJhbmNoIEEgJiYKKworCSMgYSBmaWxlIGluIG9uZSBicmFuY2gKKwlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJZ2l0IHJtIGRhdGEvOSAmJgorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCisJIyB3aXRoIGEgYnJhbmNoIG9mZiBvZiBpdAorCWdpdCBicmFuY2ggRCAmJgorCisJIyBwdXQgc29tZSBjb21taXRzIG9uIEQKKwlnaXQgY2hlY2tvdXQgRCAmJgorCWVjaG8gdGVzdEQgPiBkYXRhL3Rlc3REICYmCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBEICYmCisKKwkjIGJhY2sgdXAgdG8gdGhlIHRvcCwgY3JlYXRlIGFub3RoZXIgYnJhbmNoIGFuZCBjYXVzZQorCSMgYSByZW5hbWUgY29uZmxpY3Qgd2l0aCB0aGUgZmlsZSB3ZSBkZWxldGVkIGVhcmxpZXIKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZ2l0IG12IGRhdGEvOSBkYXRhL25ldy05ICYmCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwkjIHdpdGggYSBicmFuY2ggb2ZmIG9mIGl0CisJZ2l0IGJyYW5jaCBFICYmCisKKwkjIHB1dCBhIGNvbW1pdCBvbiBFCisJZ2l0IGNoZWNrb3V0IEUgJiYKKwllY2hvIHRlc3RFID4gZGF0YS90ZXN0RSAmJgorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gRSAmJgorCisJIyBub3csIG1lcmdlIEUgaW50byBCCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRSAmJgorCSMgZm9yY2UtcmVzb2x2ZQorCWdpdCBhZGQgZGF0YSAmJgorCWdpdCBjb21taXQgLW0gRiAmJgorCWdpdCBicmFuY2ggRiAmJgorCisJIyBhbmQgbWVyZ2UgRCBpbnRvIEMKKwlnaXQgY2hlY2tvdXQgQyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBEICYmCisJIyBmb3JjZS1yZXNvbHZlCisJZ2l0IGFkZCBkYXRhICYmCisJZ2l0IGNvbW1pdCAtbSBHICYmCisJZ2l0IGJyYW5jaCBHCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSBtZXJnZSBiZXR3ZWVuIEYgYW5kIEcsIGNhdXNlcyBzZWdmYXVsdCcgJworCWdpdCBtZXJnZSBGCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAzMi1tZXJnZS1yZWN1cnNpdmUtb3B0aW9ucy5zaCBiL3QvdDMwMzItbWVyZ2UtcmVjdXJzaXZlLW9wdGlvbnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDAyOWM5YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMzItbWVyZ2UtcmVjdXJzaXZlLW9wdGlvbnMuc2gKQEAgLTAsMCArMSwyMDcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZS1yZWN1cnNpdmUgb3B0aW9ucworCisqIFttYXN0ZXJdIENsYXJpZnkKKyAhIFtyZW1vdGVdIFJlbW92ZSBjcnVmdAorLS0KKyArIFtyZW1vdGVdIFJlbW92ZSBjcnVmdAorKiAgW21hc3Rlcl0gQ2xhcmlmeQorKisgW3JlbW90ZV5dIEluaXRpYWwgcmV2aXNpb24KKyogICBvayAxOiBzZXR1cAorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9oYXZlX3ByZXJlcSBTRURfU1RSSVBTX0NSICYmIFNFRF9PUFRJT05TPS1iCitpZiB0ZXN0X2hhdmVfcHJlcmVxIEdSRVBfU1RSSVBTX0NSCit0aGVuCisJR1JFUF9PUFRJT05TPS1VCisJZXhwb3J0IEdSRVBfT1BUSU9OUworZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljb25mbGljdF9odW5rcyAoKSB7CisJCXNlZCAkU0VEX09QVElPTlMgLW4gLWUgIgorCQkJL148PDw8LyBiIGNvbmZsaWN0CisJCQliCisJCQk6IGNvbmZsaWN0CisJCQlwCisJCQkvXj4+Pj4vIGIKKwkJCW4KKwkJCWIgY29uZmxpY3QKKwkJIiAiJEAiCisJfSAmJgorCisJY2F0IDw8LVxFT0YgPnRleHQudHh0ICYmCisJICAgIEhvcGUsIGhlIHNheXMsIGNoZXJpc2hlcyB0aGUgc291bCBvZiBoaW0gd2hvIGxpdmVzIGluCisJICAgIGp1c3RpY2UgYW5kIGhvbGluZXNzIGFuZCBpcyB0aGUgbnVyc2Ugb2YgaGlzIGFnZSBhbmQgdGhlCisJICAgIGNvbXBhbmlvbiBvZiBoaXMgam91cm5leTstLWhvcGUgd2hpY2ggaXMgbWlnaHRpZXN0IHRvIHN3YXkKKwkgICAgdGhlIHJlc3RsZXNzIHNvdWwgb2YgbWFuLgorCisJSG93IGFkbWlyYWJsZSBhcmUgaGlzIHdvcmRzISAgQW5kIHRoZSBncmVhdCBibGVzc2luZyBvZiByaWNoZXMsIEkgZG8KKwlub3Qgc2F5IHRvIGV2ZXJ5IG1hbiwgYnV0IHRvIGEgZ29vZCBtYW4sIGlzLCB0aGF0IGhlIGhhcyBoYWQgbm8KKwlvY2Nhc2lvbiB0byBkZWNlaXZlIG9yIHRvIGRlZnJhdWQgb3RoZXJzLCBlaXRoZXIgaW50ZW50aW9uYWxseSBvcgorCXVuaW50ZW50aW9uYWxseTsgYW5kIHdoZW4gaGUgZGVwYXJ0cyB0byB0aGUgd29ybGQgYmVsb3cgaGUgaXMgbm90IGluCisJYW55IGFwcHJlaGVuc2lvbiBhYm91dCBvZmZlcmluZ3MgZHVlIHRvIHRoZSBnb2RzIG9yIGRlYnRzIHdoaWNoIGhlIG93ZXMKKwl0byBtZW4uICBOb3cgdG8gdGhpcyBwZWFjZSBvZiBtaW5kIHRoZSBwb3NzZXNzaW9uIG9mIHdlYWx0aCBncmVhdGx5CisJY29udHJpYnV0ZXM7IGFuZCB0aGVyZWZvcmUgSSBzYXksIHRoYXQsIHNldHRpbmcgb25lIHRoaW5nIGFnYWluc3QKKwlhbm90aGVyLCBvZiB0aGUgbWFueSBhZHZhbnRhZ2VzIHdoaWNoIHdlYWx0aCBoYXMgdG8gZ2l2ZSwgdG8gYSBtYW4gb2YKKwlzZW5zZSB0aGlzIGlzIGluIG15IG9waW5pb24gdGhlIGdyZWF0ZXN0LgorCisJV2VsbCBzYWlkLCBDZXBoYWx1cywgSSByZXBsaWVkOyBidXQgYXMgY29uY2VybmluZyBqdXN0aWNlLCB3aGF0IGlzCisJaXQ/LS10byBzcGVhayB0aGUgdHJ1dGggYW5kIHRvIHBheSB5b3VyIGRlYnRzLS1ubyBtb3JlIHRoYW4gdGhpcz8gIEFuZAorCWV2ZW4gdG8gdGhpcyBhcmUgdGhlcmUgbm90IGV4Y2VwdGlvbnM/ICBTdXBwb3NlIHRoYXQgYSBmcmllbmQgd2hlbiBpbgorCWhpcyByaWdodCBtaW5kIGhhcyBkZXBvc2l0ZWQgYXJtcyB3aXRoIG1lIGFuZCBoZSBhc2tzIGZvciB0aGVtIHdoZW4gaGUKKwlpcyBub3QgaW4gaGlzIHJpZ2h0IG1pbmQsIG91Z2h0IEkgdG8gZ2l2ZSB0aGVtIGJhY2sgdG8gaGltPyAgTm8gb25lCisJd291bGQgc2F5IHRoYXQgSSBvdWdodCBvciB0aGF0IEkgc2hvdWxkIGJlIHJpZ2h0IGluIGRvaW5nIHNvLCBhbnkgbW9yZQorCXRoYW4gdGhleSB3b3VsZCBzYXkgdGhhdCBJIG91Z2h0IGFsd2F5cyB0byBzcGVhayB0aGUgdHJ1dGggdG8gb25lIHdobworCWlzIGluIGhpcyBjb25kaXRpb24uCisKKwlZb3UgYXJlIHF1aXRlIHJpZ2h0LCBoZSByZXBsaWVkLgorCisJQnV0IHRoZW4sIEkgc2FpZCwgc3BlYWtpbmcgdGhlIHRydXRoIGFuZCBwYXlpbmcgeW91ciBkZWJ0cyBpcyBub3QgYQorCWNvcnJlY3QgZGVmaW5pdGlvbiBvZiBqdXN0aWNlLgorCisJQ0VQSEFMVVMgLSBTT0NSQVRFUyAtIFBPTEVNQVJDSFVTCisKKwlRdWl0ZSBjb3JyZWN0LCBTb2NyYXRlcywgaWYgU2ltb25pZGVzIGlzIHRvIGJlIGJlbGlldmVkLCBzYWlkCisJUG9sZW1hcmNodXMgaW50ZXJwb3NpbmcuCisKKwlJIGZlYXIsIHNhaWQgQ2VwaGFsdXMsIHRoYXQgSSBtdXN0IGdvIG5vdywgZm9yIEkgaGF2ZSB0byBsb29rIGFmdGVyIHRoZQorCXNhY3JpZmljZXMsIGFuZCBJIGhhbmQgb3ZlciB0aGUgYXJndW1lbnQgdG8gUG9sZW1hcmNodXMgYW5kIHRoZSBjb21wYW55LgorCUVPRgorCWdpdCBhZGQgdGV4dC50eHQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIHJldmlzaW9uIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHJlbW90ZSAmJgorCXNlZCAtZSAiCisJCQlzL1wuICAvXC4gL2cKKwkJCXMvWz9dICAvPyAvZworCQkJcy8gICAgLwkvZworCQkJcy8tLS8tLS0vZworCQkJcy9idXQgYXMgY29uY2VybmluZy9idXQgYXMgY29uIGNlcm5pbmcvCisJCQkvQ0VQSEFMVVMgLSBTT0NSQVRFUyAtIFBPTEVNQVJDSFVTLyBkCisJCSIgdGV4dC50eHQgPnRleHQudHh0KyAmJgorCW12IHRleHQudHh0KyB0ZXh0LnR4dCAmJgorCWdpdCBjb21taXQgLWEgLW0gIlJlbW92ZSBjcnVmdCIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlzZWQgLWUgIgorCQkJcy9cKG5vdCBpbiBoaXMgcmlnaHQgbWluZFwpLFwoLipcKS9cMTtcMlEvCisJCQlzL1F1aXRlIGNvcnJlY3RcKC4qXCkvSXQgaXMgdG9vIGNvcnJlY3RcMVEvCisJCQlzL3VuaW50ZW50aW9uYWxseS91biBpbnRlbnRpb25hbGx5LworCQkJL3VuIGludGVudGlvbmFsbHkvIHMvJC9RLworCQkJcy9Qb2xlbWFyY2h1cyBpbnRlcnBvc2luZy4vUG9sZW1hcmNodXMsIGludGVycG9zaW5nLlEvCisJCQkvanVzdGljZSBhbmQgaG9saW5lc3MvIHMvJC9RLworCQkJL3BheSB5b3VyIGRlYnRzLyBzLyQvUS8KKwkJIiB0ZXh0LnR4dCB8IHFfdG9fY3IgPnRleHQudHh0KyAmJgorCW12IHRleHQudHh0KyB0ZXh0LnR4dCAmJgorCWdpdCBjb21taXQgLWEgLW0gIkNsYXJpZnkiICYmCisJZ2l0IHNob3ctYnJhbmNoIC0tYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25haXZlIG1lcmdlIGZhaWxzJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIEhFQUReIC0tIEhFQUQgcmVtb3RlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlncmVwICI8PDw8PDwiIHRleHQudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXNwYWNlLWNoYW5nZSBtYWtlcyBtZXJnZSBzdWNjZWVkJyAnCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0taWdub3JlLXNwYWNlLWNoYW5nZSBIRUFEXiAtLSBIRUFEIHJlbW90ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYWl2ZSBjaGVycnktcGljayBmYWlscycgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tbm8tY29tbWl0IHJlbW90ZSAmJgorCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHJlbW90ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ3JlcCAiPDw8PDw8IiB0ZXh0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctWGlnbm9yZS1zcGFjZS1jaGFuZ2UgbWFrZXMgY2hlcnJ5LXBpY2sgc3VjY2VlZCcgJworCWdpdCByZWFkLXRyZWUgLS1yZXNldCAtdSBIRUFEICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tbm8tY29tbWl0IC1YaWdub3JlLXNwYWNlLWNoYW5nZSByZW1vdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3BhY2UtY2hhbmdlOiBvdXIgdy9zLW9ubHkgY2hhbmdlIHdpbnMnICcKKwlxX3RvX2NyIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJICAgIGp1c3RpY2UgYW5kIGhvbGluZXNzIGFuZCBpcyB0aGUgbnVyc2Ugb2YgaGlzIGFnZSBhbmQgdGhlUQorCUVPRgorCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwlnaXQgbWVyZ2UtcmVjdXJzaXZlIC0taWdub3JlLXNwYWNlLWNoYW5nZSBIRUFEXiAtLSBIRUFEIHJlbW90ZSAmJgorCWdyZXAgImp1c3RpY2UgYW5kIGhvbGluZXNzIiB0ZXh0LnR4dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXNwYWNlLWNoYW5nZTogdGhlaXIgcmVhbCBjaGFuZ2Ugd2lucyBvdmVyIHcvcycgJworCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCWl0Py0tLXRvIHNwZWFrIHRoZSB0cnV0aCBhbmQgdG8gcGF5IHlvdXIgZGVidHMtLS1ubyBtb3JlIHRoYW4gdGhpcz8gQW5kCisJRU9GCisKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIEhFQUReIC0tIEhFQUQgcmVtb3RlICYmCisJZ3JlcCAicGF5IHlvdXIgZGVidHMiIHRleHQudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3BhY2UtY2hhbmdlOiBkb2VzIG5vdCBpZ25vcmUgbmV3IHNwYWNlcycgJworCWNhdCA8PC1cRU9GID5leHBlY3RlZDEgJiYKKwlXZWxsIHNhaWQsIENlcGhhbHVzLCBJIHJlcGxpZWQ7IGJ1dCBhcyBjb24gY2VybmluZyBqdXN0aWNlLCB3aGF0IGlzCisJRU9GCisJcV90b19jciA8PC1cRU9GID5leHBlY3RlZDIgJiYKKwl1biBpbnRlbnRpb25hbGx5OyBhbmQgd2hlbiBoZSBkZXBhcnRzIHRvIHRoZSB3b3JsZCBiZWxvdyBoZSBpcyBub3QgaW5RCisJRU9GCisKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIEhFQUReIC0tIEhFQUQgcmVtb3RlICYmCisJZ3JlcCAiV2VsbCBzYWlkIiB0ZXh0LnR4dCA+YWN0dWFsMSAmJgorCWdyZXAgIndoZW4gaGUgZGVwYXJ0cyIgdGV4dC50eHQgPmFjdHVhbDIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDEgYWN0dWFsMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkMiBhY3R1YWwyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLWFsbC1zcGFjZSBkcm9wcyB0aGVpciBuZXcgc3BhY2VzJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJV2VsbCBzYWlkLCBDZXBoYWx1cywgSSByZXBsaWVkOyBidXQgYXMgY29uY2VybmluZyBqdXN0aWNlLCB3aGF0IGlzCisJRU9GCisKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1pZ25vcmUtYWxsLXNwYWNlIEhFQUReIC0tIEhFQUQgcmVtb3RlICYmCisJZ3JlcCAiV2VsbCBzYWlkIiB0ZXh0LnR4dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLWFsbC1zcGFjZSBrZWVwcyBvdXIgbmV3IHNwYWNlcycgJworCXFfdG9fY3IgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwl1biBpbnRlbnRpb25hbGx5OyBhbmQgd2hlbiBoZSBkZXBhcnRzIHRvIHRoZSB3b3JsZCBiZWxvdyBoZSBpcyBub3QgaW5RCisJRU9GCisKKwlnaXQgcmVhZC10cmVlIC0tcmVzZXQgLXUgSEVBRCAmJgorCWdpdCBtZXJnZS1yZWN1cnNpdmUgLS1pZ25vcmUtYWxsLXNwYWNlIEhFQUReIC0tIEhFQUQgcmVtb3RlICYmCisJZ3JlcCAid2hlbiBoZSBkZXBhcnRzIiB0ZXh0LnR4dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXNwYWNlLWF0LWVvbCcgJworCXFfdG9fY3IgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwk8PDw8PDw8IEhFQUQKKwlpcyBub3QgaW4gaGlzIHJpZ2h0IG1pbmQ7IG91Z2h0IEkgdG8gZ2l2ZSB0aGVtIGJhY2sgdG8gaGltPyAgTm8gb25lUQorCT09PT09PT0KKwlpcyBub3QgaW4gaGlzIHJpZ2h0IG1pbmQsIG91Z2h0IEkgdG8gZ2l2ZSB0aGVtIGJhY2sgdG8gaGltPyBObyBvbmUKKwk+Pj4+Pj4+IHJlbW90ZQorCUVPRgorCisJZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtcmVjdXJzaXZlIC0taWdub3JlLXNwYWNlLWF0LWVvbCBcCisJCQkJCQkgSEVBRF4gLS0gSEVBRCByZW1vdGUgJiYKKwljb25mbGljdF9odW5rcyB0ZXh0LnR4dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzAzMy1tZXJnZS10b3BsZXZlbC5zaCBiL3QvdDMwMzMtbWVyZ2UtdG9wbGV2ZWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDZhYWRjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMwMzMtbWVyZ2UtdG9wbGV2ZWwuc2gKQEAgLTAsMCArMSwxMzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSciZ2l0IG1lcmdlIiB0b3AtbGV2ZWwgZnJvbnRlbmQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0MzAzM19yZXNldCAoKSB7CisJZ2l0IGNoZWNrb3V0IC1CIG1hc3RlciB0d28gJiYKKwlnaXQgYnJhbmNoIC1mIGxlZnQgdGhyZWUgJiYKKwlnaXQgYnJhbmNoIC1mIHJpZ2h0IGZvdXIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IGJyYW5jaCBsZWZ0ICYmCisJZ2l0IGJyYW5jaCByaWdodCAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCWdpdCBjaGVja291dCBsZWZ0ICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwlnaXQgY2hlY2tvdXQgcmlnaHQgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCisjIExvY2FsIGJyYW5jaGVzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGFuIG9jdG9wdXMgaW50byB2b2lkJyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gdGVzdCAmJgorCWdpdCBybSAtZnIgLiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBsZWZ0IHJpZ2h0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEICYmCisJZ2l0IGRpZmYgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBhbiBvY3RvcHVzLCBmYXN0LWZvcndhcmQgKGZmKScgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBvbmUgJiYKKwlnaXQgbWVyZ2UgbGVmdCByaWdodCAmJgorCSMgb25lIGlzIGFuY2VzdG9yIG9mIHRocmVlIChsZWZ0KSBhbmQgZm91ciAocmlnaHQpCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjMgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSBIRUFEXjIgfCBzb3J0ID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIHRocmVlIGZvdXIgfCBzb3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG9jdG9wdXMsIG5vbi1mYXN0LWZvcndhcmQgKGZmKScgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBvbmUgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBsZWZ0IHJpZ2h0ICYmCisJIyBvbmUgaXMgYW5jZXN0b3Igb2YgdGhyZWUgKGxlZnQpIGFuZCBmb3VyIChyaWdodCkKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReNCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xIEhFQUReMiBIRUFEXjMgfCBzb3J0ID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIG9uZSB0aHJlZSBmb3VyIHwgc29ydCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvY3RvcHVzLCBmYXN0LWZvcndhcmQgKGRvZXMgbm90IGZmKScgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IG1lcmdlIGxlZnQgcmlnaHQgJiYKKwkjIHR3byAobWFzdGVyKSBpcyBub3QgYW4gYW5jZXN0b3Igb2YgdGhyZWUgKGxlZnQpIGFuZCBmb3VyIChyaWdodCkKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReNCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xIEhFQUReMiBIRUFEXjMgfCBzb3J0ID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIHR3byB0aHJlZSBmb3VyIHwgc29ydCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvY3RvcHVzLCBub24tZmFzdC1mb3J3YXJkJyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBsZWZ0IHJpZ2h0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSBIRUFEXjIgSEVBRF4zIHwgc29ydCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSB0d28gdGhyZWUgZm91ciB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBUaGUgc2FtZSBzZXQgd2l0aCBGRVRDSF9IRUFECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEZFVENIX0hFQUQgb2N0b3B1cyBpbnRvIHZvaWQnICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiB0ZXN0ICYmCisJZ2l0IHJtIC1mciAuICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBGRVRDSF9IRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEICYmCisJZ2l0IGRpZmYgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBGRVRDSF9IRUFEIG9jdG9wdXMgZmFzdC1mb3J3YXJkIChmZiknICcKKwl0MzAzM19yZXNldCAmJgorCWdpdCByZXNldCAtLWhhcmQgb25lICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCWdpdCBtZXJnZSBGRVRDSF9IRUFEICYmCisJIyBvbmUgaXMgYW5jZXN0b3Igb2YgdGhyZWUgKGxlZnQpIGFuZCBmb3VyIChyaWdodCkKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReMyAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xIEhFQUReMiB8IHNvcnQgPmFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgdGhyZWUgZm91ciB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgRkVUQ0hfSEVBRCBvY3RvcHVzIG5vbi1mYXN0LWZvcndhcmQgKGZmKScgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBvbmUgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgRkVUQ0hfSEVBRCAmJgorCSMgb25lIGlzIGFuY2VzdG9yIG9mIHRocmVlIChsZWZ0KSBhbmQgZm91ciAocmlnaHQpCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSBIRUFEXjIgSEVBRF4zIHwgc29ydCA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBvbmUgdGhyZWUgZm91ciB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgRkVUQ0hfSEVBRCBvY3RvcHVzIGZhc3QtZm9yd2FyZCAoZG9lcyBub3QgZmYpJyAnCisJdDMwMzNfcmVzZXQgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IG1lcmdlIEZFVENIX0hFQUQgJiYKKwkjIHR3byAobWFzdGVyKSBpcyBub3QgYW4gYW5jZXN0b3Igb2YgdGhyZWUgKGxlZnQpIGFuZCBmb3VyIChyaWdodCkKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReNCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xIEhFQUReMiBIRUFEXjMgfCBzb3J0ID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIHR3byB0aHJlZSBmb3VyIHwgc29ydCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBGRVRDSF9IRUFEIG9jdG9wdXMgbm9uLWZhc3QtZm9yd2FyZCcgJworCXQzMDMzX3Jlc2V0ICYmCisJZ2l0IGZldGNoIC4gbGVmdCByaWdodCAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIEZFVENIX0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReNCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xIEhFQUReMiBIRUFEXjMgfCBzb3J0ID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIHR3byB0aHJlZSBmb3VyIHwgc29ydCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwNDAtc3VicHJvamVjdHMtYmFzaWMuc2ggYi90L3QzMDQwLXN1YnByb2plY3RzLWJhc2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhNGZmNmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDQwLXN1YnByb2plY3RzLWJhc2ljLnNoCkBAIC0wLDAgKzEsODUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdCYXNpYyBzdWJwcm9qZWN0IGZ1bmN0aW9uYWxpdHknCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNyZWF0ZSBzdXBlcnByb2plY3QnICcKKwk6ID5NYWtlZmlsZSAmJgorCWdpdCBhZGQgTWFrZWZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJTdXBlcnByb2plY3QgY3JlYXRlZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNyZWF0ZSBzdWJwcm9qZWN0cycgJworCW1rZGlyIHN1YjEgJiYKKwkoIGNkIHN1YjEgJiYgZ2l0IGluaXQgJiYgOiA+TWFrZWZpbGUgJiYgZ2l0IGFkZCAqICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAic3VicHJvamVjdCAxIiApICYmCisJbWtkaXIgc3ViMiAmJgorCSggY2Qgc3ViMiAmJiBnaXQgaW5pdCAmJiA6ID5NYWtlZmlsZSAmJiBnaXQgYWRkICogJiYKKwlnaXQgY29tbWl0IC1xIC1tICJzdWJwcm9qZWN0IDIiICkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHN1YjEgJiYKKwlnaXQgYWRkIHN1YjIgJiYKKwlnaXQgY29tbWl0IC1xIC1tICJzdWJwcm9qZWN0cyBhZGRlZCIgJiYKKwlnaXQgZGlmZi10cmVlIC0tYWJicmV2PTUgSEVBRF4gSEVBRCB8Y3V0IC1kIiAiIC1mLTMsNS0gPmN1cnJlbnQgJiYKKwlnaXQgYnJhbmNoIHNhdmUgSEVBRCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTowMDAwMDAgMTYwMDAwIDAwMDAwLi4uIEEJc3ViMQorCTowMDAwMDAgMTYwMDAwIDAwMDAwLi4uIEEJc3ViMgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgZnNjayBpZ25vcmVzIHRoZSBzdWJwcm9qZWN0cycgJworCWdpdCBmc2NrIC0tZnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBpZiBjb21taXQgaW4gYSBzdWJwcm9qZWN0IGRldGVjdGVkJyAnCisJKCBjZCBzdWIxICYmCisJZWNobyAiYWxsOiIgPj5NYWtlZmlsZSAmJgorCWVjaG8gIgl0cnVlIiA+Pk1ha2VmaWxlICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSAibWFrZSBhbGwiICkgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgYSBjaGFuZ2VkIHN1YnByb2plY3QgSEVBRCBjYW4gYmUgY29tbWl0dGVkJyAnCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSAic3ViMSBjaGFuZ2VkIiAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi10cmVlIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgZGlmZi1pbmRleCB3b3JrcyBmb3Igc3VicHJvamVjdCBlbGVtZW50cycgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBzYXZlIC0tIHN1YjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgZGlmZi10cmVlIHdvcmtzIGZvciBzdWJwcm9qZWN0IGVsZW1lbnRzJyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLXRyZWUgLS1leGl0LWNvZGUgSEVBRF4gSEVBRCAtLSBzdWIxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGlmIGdpdCBkaWZmIHdvcmtzIGZvciBzdWJwcm9qZWN0IGVsZW1lbnRzJyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgY2xvbmUgd29ya3MnICcKKwlnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdGVkICYmCisJZ2l0IGNsb25lIC1sIC1zIC4gY2xvbmVkICYmCisJKCBjZCBjbG9uZWQgJiYgZ2l0IGxzLWZpbGVzIC1zICkgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIGFuZCBhZGRpbmcgc3VicHJvamVjdCcgJworCWdpdCB1cGRhdGUtaW5kZXggLS1mb3JjZS1yZW1vdmUgLS0gc3ViMiAmJgorCW12IHN1YjIgc3ViMyAmJgorCWdpdCBhZGQgc3ViMyAmJgorCWdpdCBjb21taXQgLXEgLW0gInJlbmFtaW5nIGEgc3VicHJvamVjdCIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLU0gLS1uYW1lLXN0YXR1cyAtLWV4aXQtY29kZSBIRUFEXiBIRUFECisnCisKKyMgdGhlIGluZGV4IG11c3QgY29udGFpbiB0aGUgb2JqZWN0IG5hbWUgdGhlIEhFQUQgb2YgdGhlCisjIHN1YnByb2plY3Qgc3ViMSB3YXMgYXQgdGhlIHBvaW50ICJzYXZlIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgaW4gc3VwZXJwcm9qZWN0JyAnCisJZ2l0IGNoZWNrb3V0IHNhdmUgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLXJhdyAtLWNhY2hlZCBzYXZlIC0tIHN1YjEKKycKKworIyBqdXN0IGludGVyZXN0aW5nIHdoYXQgaGFwcGVuZWQuLi4KKyMgZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyAtTSBzYXZlIG1hc3RlcgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMwNTAtc3VicHJvamVjdHMtZmV0Y2guc2ggYi90L3QzMDUwLXN1YnByb2plY3RzLWZldGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmNWY0MWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMDUwLXN1YnByb2plY3RzLWZldGNoLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaGluZyBhbmQgcHVzaGluZyBwcm9qZWN0IHdpdGggc3VicHJvamVjdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCW1rZGlyIC1wIHN1YiAmJiAoCisJCWNkIHN1YiAmJgorCQlnaXQgaW5pdCAmJgorCQk+c3ViZmlsZSAmJgorCQlnaXQgYWRkIHN1YmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3VicHJvamVjdCBjb21taXQgIzEiCisJKSAmJgorCT5tYWluZmlsZSAmJgorCWdpdCBhZGQgc3ViIG1haW5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3VwZXJwcm9qZWN0IGNvbW1pdCAjMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBjbG9uZSAnCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpLy5naXQiIGNsb25lZCAmJgorCShnaXQgcmV2LXBhcnNlIEhFQUQ7IGdpdCBscy1maWxlcyAtcykgPmV4cGVjdGVkICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJKGdpdCByZXYtcGFyc2UgSEVBRDsgZ2l0IGxzLWZpbGVzIC1zKSA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGFkdmFuY2UgJworCWVjaG8gbW9yZSA+bWFpbmZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIHN1YiAmJgorCW12IHN1Yi8uZ2l0IHN1Yi8uZ2l0LWRpc2FibGVkICYmCisJZ2l0IGFkZCBzdWIvc3ViZmlsZSBtYWluZmlsZSAmJgorCW12IHN1Yi8uZ2l0LWRpc2FibGVkIHN1Yi8uZ2l0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3VwZXJwcm9qZWN0IGNvbW1pdCAjMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBmZXRjaCAnCisJKGdpdCByZXYtcGFyc2UgSEVBRDsgZ2l0IGxzLWZpbGVzIC1zKSA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgcHVsbCAmJgorCQkoZ2l0IHJldi1wYXJzZSBIRUFEOyBnaXQgbHMtZmlsZXMgLXMpID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzA2MC1scy1maWxlcy13aXRoLXRyZWUuc2ggYi90L3QzMDYwLWxzLWZpbGVzLXdpdGgtdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NGYzNzhjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzA2MC1scy1maWxlcy13aXRoLXRyZWUuc2gKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBDYXJsIEQuIFdvcnRoCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBscy1maWxlcyB0ZXN0ICgtLXdpdGgtdHJlZSkuCisKK1RoaXMgdGVzdCBydW5zIGdpdCBscy1maWxlcyAtLXdpdGgtdHJlZSBhbmQgaW4gcGFydGljdWxhciBpbgorYSBzY2VuYXJpbyBrbm93biB0byB0cmlnZ2VyIGEgY3Jhc2ggd2l0aCBzb21lIHZlcnNpb25zIG9mIGdpdC4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCSMgVGhlIGJ1ZyB3ZSBhcmUgZXhlcmNpc2luZyByZXF1aXJlcyBhIGZhaXIgbnVtYmVyIG9mIGVudHJpZXMKKwkjIGluIGEgc3ViLWRpcmVjdG9yeSBzbyB0aGF0IGFkZF9pbmRleF9lbnRyeSB3aWxsIHRyaWdnZXIgYQorCSMgcmVhbGxvYy4KKworCWVjaG8gZmlsZSA+ZXhwZWN0ZWQgJiYKKwlta2RpciBzdWIgJiYKKwlmb3IgbiBpbiAwIDEgMiAzIDQgNQorCWRvCisJCWZvciBtIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkKKwkJZG8KKwkJCW51bT0wMCRuJG0gJiYKKwkJCT5zdWIvZmlsZS0kbnVtICYmCisJCQllY2hvIGZpbGUtJG51bSA+PmV4cGVjdGVkIHx8CisJCQlyZXR1cm4gMQorCQlkb25lCisJZG9uZSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gImFkZCBhIGJ1bmNoIG9mIGZpbGVzIiAmJgorCisJIyBXZSByZW1vdmUgdGhlbSBhbGwgc28gdGhhdCB3ZSB3aWxsIGhhdmUgc29tZXRoaW5nIHRvIGFkZAorCSMgYmFjayB3aXRoIC0td2l0aC10cmVlIGFuZCBzbyB0aGF0IHdlIHdpbGwgZGVmaW5pdGVseSBiZQorCSMgdW5kZXIgdGhlIHJlYWxsb2Mgc2l6ZSB0byB0cmlnZ2VyIHRoZSBidWcuCisJcm0gLXJmIHN1YiAmJgorCWdpdCBjb21taXQgLWEgLW0gInJlbW92ZSB0aGVtIGFsbCIgJiYKKworCSMgVGhlIGJ1ZyBhbHNvIHJlcXVpcmVzIHNvbWUgZW50cnkgYmVmb3JlIG91ciBkaXJlY3Rvcnkgc28gdGhhdAorCSMgcHJ1bmVfcGF0aCB3aWxsIG1vZGlmeSB0aGVfaW5kZXguY2FjaGUKKworCW1rZGlyIGFfZGlyZWN0b3J5X3RoYXRfc29ydHNfYmVmb3JlX3N1YiAmJgorCT5hX2RpcmVjdG9yeV90aGF0X3NvcnRzX2JlZm9yZV9zdWIvZmlsZSAmJgorCW1rZGlyIHN1YiAmJgorCT5zdWIvZmlsZSAmJgorCWdpdCBhZGQgLgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLWxzLWZpbGVzIC0td2l0aC10cmVlIHNob3VsZCBzdWNjZWVkIGZyb20gc3ViZGlyJyAnCisJIyBXZSBoYXZlIHRvIHJ1biBmcm9tIGEgc3ViLWRpcmVjdG9yeSB0byB0cmlnZ2VyIHBydW5lX3BhdGgKKwkjIFRoZW4gd2UgZmluYWxseSBnZXQgdG8gcnVuIG91ciAtLXdpdGgtdHJlZSB0ZXN0CisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGxzLWZpbGVzIC0td2l0aC10cmVlPUhFQUR+MSA+Li4vb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IC1scy1maWxlcyAtLXdpdGgtdHJlZSBzaG91bGQgYWRkIGVudHJpZXMgZnJvbSBuYW1lZCB0cmVlLicgXAorICAgICd0ZXN0X2NtcCBleHBlY3RlZCBvdXRwdXQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzA3MC13aWxkbWF0Y2guc2ggYi90L3QzMDcwLXdpbGRtYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjUwOWRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzA3MC13aWxkbWF0Y2guc2gKQEAgLTAsMCArMSwyNjggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd3aWxkbWF0Y2ggdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCittYXRjaCgpIHsKKyAgICBpZiBbICQxID0gMSBdOyB0aGVuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAid2lsZG1hdGNoOiAgICAgbWF0Y2ggJyQzJyAnJDQnIiAiCisJICAgIHRlc3Qtd2lsZG1hdGNoIHdpbGRtYXRjaCAnJDMnICckNCcKKwkiCisgICAgZWxzZQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIndpbGRtYXRjaDogIG5vIG1hdGNoICckMycgJyQ0JyIgIgorCSAgICAhIHRlc3Qtd2lsZG1hdGNoIHdpbGRtYXRjaCAnJDMnICckNCcKKwkiCisgICAgZmkKK30KKworaW1hdGNoKCkgeworICAgIGlmIFsgJDEgPSAxIF07IHRoZW4KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJpd2lsZG1hdGNoOiAgICBtYXRjaCAnJDInICckMyciICIKKwkgICAgdGVzdC13aWxkbWF0Y2ggaXdpbGRtYXRjaCAnJDInICckMycKKwkiCisgICAgZWxzZQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIml3aWxkbWF0Y2g6IG5vIG1hdGNoICckMicgJyQzJyIgIgorCSAgICAhIHRlc3Qtd2lsZG1hdGNoIGl3aWxkbWF0Y2ggJyQyJyAnJDMnCisJIgorICAgIGZpCit9CisKK3BhdGhtYXRjaCgpIHsKKyAgICBpZiBbICQxID0gMSBdOyB0aGVuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicGF0aG1hdGNoOiAgICAgbWF0Y2ggJyQyJyAnJDMnIiAiCisJICAgIHRlc3Qtd2lsZG1hdGNoIHBhdGhtYXRjaCAnJDInICckMycKKwkiCisgICAgZWxzZQorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInBhdGhtYXRjaDogIG5vIG1hdGNoICckMicgJyQzJyIgIgorCSAgICAhIHRlc3Qtd2lsZG1hdGNoIHBhdGhtYXRjaCAnJDInICckMycKKwkiCisgICAgZmkKK30KKworIyBCYXNpYyB3aWxkbWF0IGZlYXR1cmVzCittYXRjaCAxIDEgZm9vIGZvbworbWF0Y2ggMCAwIGZvbyBiYXIKK21hdGNoIDEgMSAnJyAiIgorbWF0Y2ggMSAxIGZvbyAnPz8/JworbWF0Y2ggMCAwIGZvbyAnPz8nCittYXRjaCAxIDEgZm9vICcqJworbWF0Y2ggMSAxIGZvbyAnZionCittYXRjaCAwIDAgZm9vICcqZicKK21hdGNoIDEgMSBmb28gJypmb28qJworbWF0Y2ggMSAxIGZvb2JhciAnKm9iKmEqcionCittYXRjaCAxIDEgYWFhYWFhYWJhYmFiYWIgJyphYicKK21hdGNoIDEgMSAnZm9vKicgJ2Zvb1wqJworbWF0Y2ggMCAwIGZvb2JhciAnZm9vXCpiYXInCittYXRjaCAxIDEgJ2Zcb28nICdmXFxvbycKK21hdGNoIDEgMSBiYWxsICcqW2FsXT8nCittYXRjaCAwIDAgdGVuICdbdGVuXScKK21hdGNoIDAgMSB0ZW4gJyoqWyF0ZV0nCittYXRjaCAwIDAgdGVuICcqKlshdGVuXScKK21hdGNoIDEgMSB0ZW4gJ3RbYS1nXW4nCittYXRjaCAwIDAgdGVuICd0WyFhLWddbicKK21hdGNoIDEgMSB0b24gJ3RbIWEtZ11uJworbWF0Y2ggMSAxIHRvbiAndFteYS1nXW4nCittYXRjaCAxIHggJ2FdYicgJ2FbXV1iJworbWF0Y2ggMSB4IGEtYiAnYVtdLV1iJworbWF0Y2ggMSB4ICdhXWInICdhW10tXWInCittYXRjaCAwIHggYWFiICdhW10tXWInCittYXRjaCAxIHggYWFiICdhW11hLV1iJworbWF0Y2ggMSAxICddJyAnXScKKworIyBFeHRlbmRlZCBzbGFzaC1tYXRjaGluZyBmZWF0dXJlcworbWF0Y2ggMCAwICdmb28vYmF6L2JhcicgJ2ZvbypiYXInCittYXRjaCAwIDAgJ2Zvby9iYXovYmFyJyAnZm9vKipiYXInCittYXRjaCAwIDEgJ2Zvb2JhemJhcicgJ2ZvbyoqYmFyJworbWF0Y2ggMSAxICdmb28vYmF6L2JhcicgJ2Zvby8qKi9iYXInCittYXRjaCAxIDAgJ2Zvby9iYXovYmFyJyAnZm9vLyoqLyoqL2JhcicKK21hdGNoIDEgMCAnZm9vL2IvYS96L2JhcicgJ2Zvby8qKi9iYXInCittYXRjaCAxIDAgJ2Zvby9iL2Evei9iYXInICdmb28vKiovKiovYmFyJworbWF0Y2ggMSAwICdmb28vYmFyJyAnZm9vLyoqL2JhcicKK21hdGNoIDEgMCAnZm9vL2JhcicgJ2Zvby8qKi8qKi9iYXInCittYXRjaCAwIDAgJ2Zvby9iYXInICdmb28/YmFyJworbWF0Y2ggMCAwICdmb28vYmFyJyAnZm9vWy9dYmFyJworbWF0Y2ggMCAwICdmb28vYmFyJyAnZlteZWl1XVteZWl1XVteZWl1XVteZWl1XVteZWl1XXInCittYXRjaCAxIDEgJ2Zvby1iYXInICdmW15laXVdW15laXVdW15laXVdW15laXVdW15laXVdcicKK21hdGNoIDEgMCAnZm9vJyAnKiovZm9vJworbWF0Y2ggMSB4ICdYWFgvZm9vJyAnKiovZm9vJworbWF0Y2ggMSAwICdiYXIvYmF6L2ZvbycgJyoqL2ZvbycKK21hdGNoIDAgMCAnYmFyL2Jhei9mb28nICcqL2ZvbycKK21hdGNoIDAgMCAnZm9vL2Jhci9iYXonICcqKi9iYXIqJworbWF0Y2ggMSAwICdkZWVwL2Zvby9iYXIvYmF6JyAnKiovYmFyLyonCittYXRjaCAwIDAgJ2RlZXAvZm9vL2Jhci9iYXovJyAnKiovYmFyLyonCittYXRjaCAxIDAgJ2RlZXAvZm9vL2Jhci9iYXovJyAnKiovYmFyLyoqJworbWF0Y2ggMCAwICdkZWVwL2Zvby9iYXInICcqKi9iYXIvKicKK21hdGNoIDEgMCAnZGVlcC9mb28vYmFyLycgJyoqL2Jhci8qKicKK21hdGNoIDAgMCAnZm9vL2Jhci9iYXonICcqKi9iYXIqKicKK21hdGNoIDEgMCAnZm9vL2Jhci9iYXoveCcgJyovYmFyLyoqJworbWF0Y2ggMCAwICdkZWVwL2Zvby9iYXIvYmF6L3gnICcqL2Jhci8qKicKK21hdGNoIDEgMCAnZGVlcC9mb28vYmFyL2Jhei94JyAnKiovYmFyLyovKicKKworIyBWYXJpb3VzIGFkZGl0aW9uYWwgdGVzdHMKK21hdGNoIDAgMCAnYWNydCcgJ2FbYy1jXXN0JworbWF0Y2ggMSAxICdhY3J0JyAnYVtjLWNdcnQnCittYXRjaCAwIDAgJ10nICdbIV0tXScKK21hdGNoIDEgeCAnYScgJ1shXS1dJworbWF0Y2ggMCAwICcnICdcJworbWF0Y2ggMCB4ICdcJyAnXCcKK21hdGNoIDAgeCAnWFhYL1wnICcqL1wnCittYXRjaCAxIHggJ1hYWC9cJyAnKi9cXCcKK21hdGNoIDEgMSAnZm9vJyAnZm9vJworbWF0Y2ggMSAxICdAZm9vJyAnQGZvbycKK21hdGNoIDAgMCAnZm9vJyAnQGZvbycKK21hdGNoIDEgMSAnW2FiXScgJ1xbYWJdJworbWF0Y2ggMSAxICdbYWJdJyAnW1tdYWJdJworbWF0Y2ggMSB4ICdbYWJdJyAnW1s6XWFiXScKK21hdGNoIDAgeCAnW2FiXScgJ1tbOjpdYWJdJworbWF0Y2ggMSB4ICdbYWJdJyAnW1s6ZGlnaXRdYWJdJworbWF0Y2ggMSB4ICdbYWJdJyAnW1xbOl1hYl0nCittYXRjaCAxIDEgJz9hP2InICdcPz9cP2InCittYXRjaCAxIDEgJ2FiYycgJ1xhXGJcYycKK21hdGNoIDAgMCAnZm9vJyAnJworbWF0Y2ggMSAwICdmb28vYmFyL2Jhei90bycgJyoqL3Rbb10nCisKKyMgQ2hhcmFjdGVyIGNsYXNzIHRlc3RzCittYXRjaCAxIHggJ2ExQicgJ1tbOmFscGhhOl1dW1s6ZGlnaXQ6XV1bWzp1cHBlcjpdXScKK21hdGNoIDAgeCAnYScgJ1tbOmRpZ2l0Ol1bOnVwcGVyOl1bOnNwYWNlOl1dJworbWF0Y2ggMSB4ICdBJyAnW1s6ZGlnaXQ6XVs6dXBwZXI6XVs6c3BhY2U6XV0nCittYXRjaCAxIHggJzEnICdbWzpkaWdpdDpdWzp1cHBlcjpdWzpzcGFjZTpdXScKK21hdGNoIDAgeCAnMScgJ1tbOmRpZ2l0Ol1bOnVwcGVyOl1bOnNwYWNpOl1dJworbWF0Y2ggMSB4ICcgJyAnW1s6ZGlnaXQ6XVs6dXBwZXI6XVs6c3BhY2U6XV0nCittYXRjaCAwIHggJy4nICdbWzpkaWdpdDpdWzp1cHBlcjpdWzpzcGFjZTpdXScKK21hdGNoIDEgeCAnLicgJ1tbOmRpZ2l0Ol1bOnB1bmN0Ol1bOnNwYWNlOl1dJworbWF0Y2ggMSB4ICc1JyAnW1s6eGRpZ2l0Ol1dJworbWF0Y2ggMSB4ICdmJyAnW1s6eGRpZ2l0Ol1dJworbWF0Y2ggMSB4ICdEJyAnW1s6eGRpZ2l0Ol1dJworbWF0Y2ggMSB4ICdfJyAnW1s6YWxudW06XVs6YWxwaGE6XVs6Ymxhbms6XVs6Y250cmw6XVs6ZGlnaXQ6XVs6Z3JhcGg6XVs6bG93ZXI6XVs6cHJpbnQ6XVs6cHVuY3Q6XVs6c3BhY2U6XVs6dXBwZXI6XVs6eGRpZ2l0Ol1dJworbWF0Y2ggMSB4ICdfJyAnW1s6YWxudW06XVs6YWxwaGE6XVs6Ymxhbms6XVs6Y250cmw6XVs6ZGlnaXQ6XVs6Z3JhcGg6XVs6bG93ZXI6XVs6cHJpbnQ6XVs6cHVuY3Q6XVs6c3BhY2U6XVs6dXBwZXI6XVs6eGRpZ2l0Ol1dJworbWF0Y2ggMSB4ICcuJyAnW15bOmFsbnVtOl1bOmFscGhhOl1bOmJsYW5rOl1bOmNudHJsOl1bOmRpZ2l0Ol1bOmxvd2VyOl1bOnNwYWNlOl1bOnVwcGVyOl1bOnhkaWdpdDpdXScKK21hdGNoIDEgeCAnNScgJ1thLWNbOmRpZ2l0Ol14LXpdJworbWF0Y2ggMSB4ICdiJyAnW2EtY1s6ZGlnaXQ6XXgtel0nCittYXRjaCAxIHggJ3knICdbYS1jWzpkaWdpdDpdeC16XScKK21hdGNoIDAgeCAncScgJ1thLWNbOmRpZ2l0Ol14LXpdJworCisjIEFkZGl0aW9uYWwgdGVzdHMsIGluY2x1ZGluZyBzb21lIG1hbGZvcm1lZCB3aWxkbWF0cworbWF0Y2ggMSB4ICddJyAnW1xcLV5dJworbWF0Y2ggMCAwICdbJyAnW1xcLV5dJworbWF0Y2ggMSB4ICctJyAnW1wtX10nCittYXRjaCAxIHggJ10nICdbXF1dJworbWF0Y2ggMCAwICdcXScgJ1tcXV0nCittYXRjaCAwIDAgJ1wnICdbXF1dJworbWF0Y2ggMCAwICdhYicgJ2FbXWInCittYXRjaCAwIHggJ2FbXWInICdhW11iJworbWF0Y2ggMCB4ICdhYlsnICdhYlsnCittYXRjaCAwIDAgJ2FiJyAnWyEnCittYXRjaCAwIDAgJ2FiJyAnWy0nCittYXRjaCAxIDEgJy0nICdbLV0nCittYXRjaCAwIDAgJy0nICdbYS0nCittYXRjaCAwIDAgJy0nICdbIWEtJworbWF0Y2ggMSB4ICctJyAnWy0tQV0nCittYXRjaCAxIHggJzUnICdbLS1BXScKK21hdGNoIDEgMSAnICcgJ1sgLS1dJworbWF0Y2ggMSAxICckJyAnWyAtLV0nCittYXRjaCAxIDEgJy0nICdbIC0tXScKK21hdGNoIDAgMCAnMCcgJ1sgLS1dJworbWF0Y2ggMSB4ICctJyAnWy0tLV0nCittYXRjaCAxIHggJy0nICdbLS0tLS0tXScKK21hdGNoIDAgMCAnaicgJ1thLWUtbl0nCittYXRjaCAxIHggJy0nICdbYS1lLW5dJworbWF0Y2ggMSB4ICdhJyAnWyEtLS0tLS1dJworbWF0Y2ggMCAwICdbJyAnW10tYV0nCittYXRjaCAxIHggJ14nICdbXS1hXScKK21hdGNoIDAgMCAnXicgJ1shXS1hXScKK21hdGNoIDEgeCAnWycgJ1shXS1hXScKK21hdGNoIDEgMSAnXicgJ1thXmJjXScKK21hdGNoIDEgeCAnLWJdJyAnW2EtXWJdJworbWF0Y2ggMCAwICdcJyAnW1xdJworbWF0Y2ggMSAxICdcJyAnW1xcXScKK21hdGNoIDAgMCAnXCcgJ1shXFxdJworbWF0Y2ggMSAxICdHJyAnW0EtXFxdJworbWF0Y2ggMCAwICdhYWFiYmInICdiKmEnCittYXRjaCAwIDAgJ2FhYmNhYScgJypiYSonCittYXRjaCAxIDEgJywnICdbLF0nCittYXRjaCAxIDEgJywnICdbXFwsXScKK21hdGNoIDEgMSAnXCcgJ1tcXCxdJworbWF0Y2ggMSAxICctJyAnWywtLl0nCittYXRjaCAwIDAgJysnICdbLC0uXScKK21hdGNoIDAgMCAnLS5dJyAnWywtLl0nCittYXRjaCAxIDEgJzInICdbXDEtXDNdJworbWF0Y2ggMSAxICczJyAnW1wxLVwzXScKK21hdGNoIDAgMCAnNCcgJ1tcMS1cM10nCittYXRjaCAxIDEgJ1wnICdbWy1cXV0nCittYXRjaCAxIDEgJ1snICdbWy1cXV0nCittYXRjaCAxIDEgJ10nICdbWy1cXV0nCittYXRjaCAwIDAgJy0nICdbWy1cXV0nCisKKyMgVGVzdCByZWN1cnNpb24gYW5kIHRoZSBhYm9ydCBjb2RlICh1c2UgIndpbGR0ZXN0IC1pIiB0byBzZWUgaXRlcmF0aW9uIGNvdW50cykKK21hdGNoIDEgMSAnLWFkb2JlLWNvdXJpZXItYm9sZC1vLW5vcm1hbC0tMTItMTIwLTc1LTc1LW0tNzAtaXNvODg1OS0xJyAnLSotKi0qLSotKi0qLTEyLSotKi0qLW0tKi0qLSonCittYXRjaCAwIDAgJy1hZG9iZS1jb3VyaWVyLWJvbGQtby1ub3JtYWwtLTEyLTEyMC03NS03NS1YLTcwLWlzbzg4NTktMScgJy0qLSotKi0qLSotKi0xMi0qLSotKi1tLSotKi0qJworbWF0Y2ggMCAwICctYWRvYmUtY291cmllci1ib2xkLW8tbm9ybWFsLS0xMi0xMjAtNzUtNzUtLy03MC1pc284ODU5LTEnICctKi0qLSotKi0qLSotMTItKi0qLSotbS0qLSotKicKK21hdGNoIDEgMSAnWFhYL2Fkb2JlL2NvdXJpZXIvYm9sZC9vL25vcm1hbC8vMTIvMTIwLzc1Lzc1L20vNzAvaXNvODg1OS8xJyAnWFhYLyovKi8qLyovKi8qLzEyLyovKi8qL20vKi8qLyonCittYXRjaCAwIDAgJ1hYWC9hZG9iZS9jb3VyaWVyL2JvbGQvby9ub3JtYWwvLzEyLzEyMC83NS83NS9YLzcwL2lzbzg4NTkvMScgJ1hYWC8qLyovKi8qLyovKi8xMi8qLyovKi9tLyovKi8qJworbWF0Y2ggMSAwICdhYmNkL2FiY2RlZmcvYWJjZGVmZ2hpamsvYWJjZGVmZ2hpamtsbW5vcC50eHQnICcqKi8qYSpiKmcqbip0JworbWF0Y2ggMCAwICdhYmNkL2FiY2RlZmcvYWJjZGVmZ2hpamsvYWJjZGVmZ2hpamtsbW5vcC50eHR6JyAnKiovKmEqYipnKm4qdCcKK21hdGNoIDAgeCBmb28gJyovKi8qJworbWF0Y2ggMCB4IGZvby9iYXIgJyovKi8qJworbWF0Y2ggMSB4IGZvby9iYmEvYXJyICcqLyovKicKK21hdGNoIDAgeCBmb28vYmIvYWEvcnIgJyovKi8qJworbWF0Y2ggMSB4IGZvby9iYi9hYS9yciAnKiovKiovKionCittYXRjaCAxIHggYWJjWGRlZlhnaGkgJypYKmknCittYXRjaCAwIHggYWIvY1hkL2VmWGcvaGkgJypYKmknCittYXRjaCAxIHggYWIvY1hkL2VmWGcvaGkgJyovKlgqLyovKmknCittYXRjaCAxIHggYWIvY1hkL2VmWGcvaGkgJyoqLypYKi8qKi8qaScKKworcGF0aG1hdGNoIDEgZm9vIGZvbworcGF0aG1hdGNoIDAgZm9vIGZvCitwYXRobWF0Y2ggMSBmb28vYmFyIGZvby9iYXIKK3BhdGhtYXRjaCAxIGZvby9iYXIgJ2Zvby8qJworcGF0aG1hdGNoIDEgZm9vL2JiYS9hcnIgJ2Zvby8qJworcGF0aG1hdGNoIDEgZm9vL2JiYS9hcnIgJ2Zvby8qKicKK3BhdGhtYXRjaCAxIGZvby9iYmEvYXJyICdmb28qJworcGF0aG1hdGNoIDEgZm9vL2JiYS9hcnIgJ2ZvbyoqJworcGF0aG1hdGNoIDEgZm9vL2JiYS9hcnIgJ2Zvby8qYXJyJworcGF0aG1hdGNoIDEgZm9vL2JiYS9hcnIgJ2Zvby8qKmFycicKK3BhdGhtYXRjaCAwIGZvby9iYmEvYXJyICdmb28vKnonCitwYXRobWF0Y2ggMCBmb28vYmJhL2FyciAnZm9vLyoqeicKK3BhdGhtYXRjaCAxIGZvby9iYXIgJ2Zvbz9iYXInCitwYXRobWF0Y2ggMSBmb28vYmFyICdmb29bL11iYXInCitwYXRobWF0Y2ggMCBmb28gJyovKi8qJworcGF0aG1hdGNoIDAgZm9vL2JhciAnKi8qLyonCitwYXRobWF0Y2ggMSBmb28vYmJhL2FyciAnKi8qLyonCitwYXRobWF0Y2ggMSBmb28vYmIvYWEvcnIgJyovKi8qJworcGF0aG1hdGNoIDEgYWJjWGRlZlhnaGkgJypYKmknCitwYXRobWF0Y2ggMSBhYi9jWGQvZWZYZy9oaSAnKi8qWCovKi8qaScKK3BhdGhtYXRjaCAxIGFiL2NYZC9lZlhnL2hpICcqWGcqaScKKworIyBDYXNlLXNlbnNpdGl2eSBmZWF0dXJlcworbWF0Y2ggMCB4ICdhJyAnW0EtWl0nCittYXRjaCAxIHggJ0EnICdbQS1aXScKK21hdGNoIDAgeCAnQScgJ1thLXpdJworbWF0Y2ggMSB4ICdhJyAnW2Etel0nCittYXRjaCAwIHggJ2EnICdbWzp1cHBlcjpdXScKK21hdGNoIDEgeCAnQScgJ1tbOnVwcGVyOl1dJworbWF0Y2ggMCB4ICdBJyAnW1s6bG93ZXI6XV0nCittYXRjaCAxIHggJ2EnICdbWzpsb3dlcjpdXScKK21hdGNoIDAgeCAnQScgJ1tCLVphXScKK21hdGNoIDEgeCAnYScgJ1tCLVphXScKK21hdGNoIDAgeCAnQScgJ1tCLWFdJworbWF0Y2ggMSB4ICdhJyAnW0ItYV0nCittYXRjaCAwIHggJ3onICdbWi15XScKK21hdGNoIDEgeCAnWicgJ1taLXldJworCitpbWF0Y2ggMSAnYScgJ1tBLVpdJworaW1hdGNoIDEgJ0EnICdbQS1aXScKK2ltYXRjaCAxICdBJyAnW2Etel0nCitpbWF0Y2ggMSAnYScgJ1thLXpdJworaW1hdGNoIDEgJ2EnICdbWzp1cHBlcjpdXScKK2ltYXRjaCAxICdBJyAnW1s6dXBwZXI6XV0nCitpbWF0Y2ggMSAnQScgJ1tbOmxvd2VyOl1dJworaW1hdGNoIDEgJ2EnICdbWzpsb3dlcjpdXScKK2ltYXRjaCAxICdBJyAnW0ItWmFdJworaW1hdGNoIDEgJ2EnICdbQi1aYV0nCitpbWF0Y2ggMSAnQScgJ1tCLWFdJworaW1hdGNoIDEgJ2EnICdbQi1hXScKK2ltYXRjaCAxICd6JyAnW1oteV0nCitpbWF0Y2ggMSAnWicgJ1taLXldJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaCBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYjczYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCkBAIC0wLDAgKzEsMTY1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBscy10cmVlIHRlc3QuCisKK1RoaXMgdGVzdCBydW5zIGdpdCBscy10cmVlIHdpdGggdGhlIGZvbGxvd2luZyBpbiBhIHRyZWUuCisKKyAgICBwYXRoMCAgICAgICAtIGEgZmlsZQorICAgIHBhdGgxCS0gYSBzeW1saW5rCisgICAgcGF0aDIvZm9vICAgLSBhIGZpbGUgaW4gYSBkaXJlY3RvcnkKKyAgICBwYXRoMi9iYXpibyAtIGEgc3ltbGluayBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgyL2Jhei9iIC0gYSBmaWxlIGluIGEgZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5CisKK1RoZSBuZXcgcGF0aCByZXN0cmljdGlvbiBjb2RlIHNob3VsZCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIHBhdGgyIGFuZAorcGF0aDIvYmF6LiAgQWxzbyBwYXRoMC8gc2hvdWxkIHNub3cgbm90aGluZy4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAnIFwKKyAgICAnbWtkaXIgcGF0aDIgcGF0aDIvYmF6ICYmCisgICAgIGVjaG8gSGkgPnBhdGgwICYmCisgICAgIHRlc3RfbG5fc19hZGQgcGF0aDAgcGF0aDEgJiYKKyAgICAgdGVzdF9sbl9zX2FkZCAuLi9wYXRoMSBwYXRoMi9iYXpibyAmJgorICAgICBlY2hvIExvID5wYXRoMi9mb28gJiYKKyAgICAgZWNobyBNaSA+cGF0aDIvYmF6L2IgJiYKKyAgICAgZmluZCBwYXRoPyBcKCAtdHlwZSBmIC1vIC10eXBlIGwgXCkgLXByaW50IHwKKyAgICAgeGFyZ3MgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAmJgorICAgICB0cmVlPWBnaXQgd3JpdGUtdHJlZWAgJiYKKyAgICAgZWNobyAkdHJlZScKKwordGVzdF9vdXRwdXQgKCkgeworICAgIHNlZCAtZSAicy8gJF94NDAJLyBYCS8iIDxjdXJyZW50ID5jaGVjaworICAgIHRlc3RfY21wIGV4cGVjdGVkIGNoZWNrCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIHBsYWluJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCXBhdGgwCisxMjAwMDAgYmxvYiBYCXBhdGgxCiswNDAwMDAgdHJlZSBYCXBhdGgyCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIHJlY3Vyc2l2ZScgXAorICAgICdnaXQgbHMtdHJlZSAtciAkdHJlZSA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAlwYXRoMAorMTIwMDAwIGJsb2IgWAlwYXRoMQorMTAwNjQ0IGJsb2IgWAlwYXRoMi9iYXovYgorMTIwMDAwIGJsb2IgWAlwYXRoMi9iYXpibworMTAwNjQ0IGJsb2IgWAlwYXRoMi9mb28KK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgcmVjdXJzaXZlIHdpdGggLXQnIFwKKyAgICAnZ2l0IGxzLXRyZWUgLXIgLXQgJHRyZWUgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJcGF0aDAKKzEyMDAwMCBibG9iIFgJcGF0aDEKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CisxMDA2NDQgYmxvYiBYCXBhdGgyL2Jhei9iCisxMjAwMDAgYmxvYiBYCXBhdGgyL2JhemJvCisxMDA2NDQgYmxvYiBYCXBhdGgyL2ZvbworRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSByZWN1cnNpdmUgd2l0aCAtZCcgXAorICAgICdnaXQgbHMtdHJlZSAtciAtZCAkdHJlZSA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMgorMDQwMDAwIHRyZWUgWAlwYXRoMi9iYXoKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGggPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKworCisjIGl0IHVzZWQgdG8gYmUgcGF0aDEgYW5kIHRoZW4gcGF0aDAsIGJ1dCB3aXRoIHBhdGhzcGVjIHNlbWFudGljcworIyB0aGV5IGFyZSBzaG93biBpbiBjYW5vbmljYWwgb3JkZXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgxIHBhdGgwJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgxIHBhdGgwID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCXBhdGgwCisxMjAwMDAgYmxvYiBYCXBhdGgxCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aDAvJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgwLyA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCisjIEl0IHVzZWQgdG8gc2hvdyBwYXRoMiBhbmQgaXRzIGltbWVkaWF0ZSBjaGlsZHJlbiBidXQKKyMgd2l0aCBwYXRoc3BlYyBzZW1hbnRpY3MgaXQgc2hvd3Mgb25seSBwYXRoMgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgZmlsdGVyZWQgd2l0aCBwYXRoMicgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMiA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMgorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCisjIC4uLiBhbmQgcGF0aDIvIHNob3dzIHRoZSBjaGlsZHJlbi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aDIvJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgyLyA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMi9iYXoKKzEyMDAwMCBibG9iIFgJcGF0aDIvYmF6Ym8KKzEwMDY0NCBibG9iIFgJcGF0aDIvZm9vCitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKKyMgVGhlIHNhbWUgY2hhbmdlIC0tIGV4YWN0IG1hdGNoIGRvZXMgbm90IHNob3cgY2hpbGRyZW4gb2YKKyMgcGF0aDIvYmF6Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSBmaWx0ZXJlZCB3aXRoIHBhdGgyL2JheicgXAorICAgICdnaXQgbHMtdHJlZSAkdHJlZSBwYXRoMi9iYXogPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDIvYmF6CitFT0YKKyAgICAgdGVzdF9vdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdscy10cmVlIGZpbHRlcmVkIHdpdGggcGF0aDIvYmFrJyBcCisgICAgJ2dpdCBscy10cmVlICR0cmVlIHBhdGgyL2JhayA+Y3VycmVudCAmJgorICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbHMtdHJlZSAtdCBmaWx0ZXJlZCB3aXRoIHBhdGgyL2JhaycgXAorICAgICdnaXQgbHMtdHJlZSAtdCAkdHJlZSBwYXRoMi9iYWsgPmN1cnJlbnQgJiYKKyAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzA0MDAwMCB0cmVlIFgJcGF0aDIKK0VPRgorICAgICB0ZXN0X291dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xzLXRyZWUgd2l0aCBvbmUgcGF0aCBhIHByZWZpeCBvZiB0aGUgb3RoZXInIFwKKyAgICAnZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDIvYmF6IHBhdGgyL2JhemJvID5jdXJyZW50ICYmCisgICAgIGNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiswNDAwMDAgdHJlZSBYCXBhdGgyL2JhegorMTIwMDAwIGJsb2IgWAlwYXRoMi9iYXpibworRU9GCisgICAgIHRlc3Rfb3V0cHV0JworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMxMDEtbHMtdHJlZS1kaXJuYW1lLnNoIGIvdC90MzEwMS1scy10cmVlLWRpcm5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDI2ZjlmOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMxMDEtbHMtdHJlZS1kaXJuYW1lLnNoCkBAIC0wLDAgKzEsMjI5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjIENvcHlyaWdodCAoYykgMjAwNSBSb2JlcnQgRml0enNpbW9ucworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbHMtdHJlZSBkaXJlY3RvcnkgYW5kIGZpbGVuYW1lcyBoYW5kbGluZy4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IGxzLXRyZWUgd2l0aCB0aGUgZm9sbG93aW5nIGluIGEgdHJlZS4KKworICAgIDEudHh0ICAgICAgICAgICAgICAtIGEgZmlsZQorICAgIDIudHh0ICAgICAgICAgICAgICAtIGEgZmlsZQorICAgIHBhdGgwL2EvYi9jLzEudHh0ICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgxL2IvYy8xLnR4dCAgICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgyLzEudHh0ICAgICAgICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgzLzEudHh0ICAgICAgICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorICAgIHBhdGgzLzIudHh0ICAgICAgICAtIGEgZmlsZSBpbiBhIGRpcmVjdG9yeQorCitUZXN0IHRoZSBoYW5kbGluZyBvZiBtdWxpdHBsZSBkaXJlY3RvcmllcyB3aGljaCBoYXZlIG1hdGNoaW5nIGZpbGUKK2VudHJpZXMuICBBbHNvIHRlc3Qgb2RkIGZpbGVuYW1lIGFuZCBtaXNzaW5nIGVudHJpZXMgaGFuZGxpbmcuCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIDExMSA+MS50eHQgJiYKKwllY2hvIDIyMiA+Mi50eHQgJiYKKwlta2RpciBwYXRoMCBwYXRoMC9hIHBhdGgwL2EvYiBwYXRoMC9hL2IvYyAmJgorCWVjaG8gMTExID5wYXRoMC9hL2IvYy8xLnR4dCAmJgorCW1rZGlyIHBhdGgxIHBhdGgxL2IgcGF0aDEvYi9jICYmCisJZWNobyAxMTEgPnBhdGgxL2IvYy8xLnR4dCAmJgorCW1rZGlyIHBhdGgyICYmCisJZWNobyAxMTEgPnBhdGgyLzEudHh0ICYmCisJbWtkaXIgcGF0aDMgJiYKKwllY2hvIDExMSA+cGF0aDMvMS50eHQgJiYKKwllY2hvIDIyMiA+cGF0aDMvMi50eHQgJiYKKwlmaW5kICoudHh0IHBhdGgqIFwoIC10eXBlIGYgLW8gLXR5cGUgbCBcKSAtcHJpbnQgfAorCXhhcmdzIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgJiYKKwl0cmVlPWBnaXQgd3JpdGUtdHJlZWAgJiYKKwllY2hvICR0cmVlCisnCisKK3Rlc3Rfb3V0cHV0ICgpIHsKKwlzZWQgLWUgInMvICRfeDQwCS8gWAkvIiA8Y3VycmVudCA+Y2hlY2sgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjaGVjaworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIHBsYWluJyAnCisJZ2l0IGxzLXRyZWUgJHRyZWUgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMDQwMDAwIHRyZWUgWAlwYXRoMAorMDQwMDAwIHRyZWUgWAlwYXRoMQorMDQwMDAwIHRyZWUgWAlwYXRoMgorMDQwMDAwIHRyZWUgWAlwYXRoMworRU9GCisJdGVzdF9vdXRwdXQKKycKKworIyBSZWN1cnNpdmUgZG9lcyBub3Qgc2hvdyB0cmVlIG5vZGVzIGFueW1vcmUuLi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgcmVjdXJzaXZlJyAnCisJZ2l0IGxzLXRyZWUgLXIgJHRyZWUgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMC9hL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMS9iL2MvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDIvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMS50eHQKKzEwMDY0NCBibG9iIFgJcGF0aDMvMi50eHQKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIDEudHh0JyAnCisJZ2l0IGxzLXRyZWUgJHRyZWUgMS50eHQgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBmaWx0ZXIgcGF0aDEvYi9jLzEudHh0JyAnCisJZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDEvYi9jLzEudHh0ID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEwMDY0NCBibG9iIFgJcGF0aDEvYi9jLzEudHh0CitFT0YKKwl0ZXN0X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGZpbHRlciBhbGwgMS50eHQgZmlsZXMnICcKKwlnaXQgbHMtdHJlZSAkdHJlZSAxLnR4dCBwYXRoMC9hL2IvYy8xLnR4dCBcCisJCXBhdGgxL2IvYy8xLnR4dCBwYXRoMi8xLnR4dCBwYXRoMy8xLnR4dCA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCTEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgwL2EvYi9jLzEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgxL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMi8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8xLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKworIyBJIGFtIG5vdCBzbyBzdXJlIGFib3V0IHRoaXMgb25lIGFmdGVyIGxzLXRyZWUgZG9pbmcgcGF0aHNwZWMgbWF0Y2guCisjIEhhdmluZyBib3RoIHBhdGgwL2EgYW5kIHBhdGgwL2EvYi9jIG1ha2VzIHBhdGgwL2EgcmVkdW5kYW50LCBhbmQKKyMgaXQgYmVoYXZlcyBhcyBpZiBwYXRoMC9hL2IvYywgcGF0aDEvYi9jLCBwYXRoMiBhbmQgcGF0aDMgYXJlIHNwZWNpZmllZC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIGRpcmVjdG9yaWVzJyAnCisJZ2l0IGxzLXRyZWUgJHRyZWUgcGF0aDMgcGF0aDIgcGF0aDAvYS9iL2MgcGF0aDEvYi9jIHBhdGgwL2EgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMDQwMDAwIHRyZWUgWAlwYXRoMC9hL2IvYworMDQwMDAwIHRyZWUgWAlwYXRoMS9iL2MKKzA0MDAwMCB0cmVlIFgJcGF0aDIKKzA0MDAwMCB0cmVlIFgJcGF0aDMKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKKyMgQWdhaW4sIGR1cGxpY2F0ZXMgYXJlIGZpbHRlcmVkIGF3YXkgc28gdGhpcyBpcyBlcXVpdmFsZW50IHRvCisjIGhhdmluZyAxLnR4dCBhbmQgcGF0aDMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIG9kZCBuYW1lcycgJworCWdpdCBscy10cmVlICR0cmVlIDEudHh0IC4vMS50eHQgLi8vMS50eHQgXAorCQlwYXRoMy8xLnR4dCBwYXRoMy8uLzEudHh0IHBhdGgzIHBhdGgzLy8gPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8yLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBmaWx0ZXIgbWlzc2luZyBmaWxlcyBhbmQgZXh0cmEgc2xhc2hlcycgJworCWdpdCBscy10cmVlICR0cmVlIDEudHh0LyBhYmMudHh0IFwKKwkJcGF0aDMvLzIzLnR4dCBwYXRoMy8yLnR4dC8vLyA+Y3VycmVudCAmJgorCT5leHBlY3RlZCAmJgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmlsdGVyIGlzIGxlYWRpbmcgcGF0aCBtYXRjaCcgJworCWdpdCBscy10cmVlICR0cmVlIHBhIHBhdGgzL2EgPmN1cnJlbnQgJiYKKwk+ZXhwZWN0ZWQgJiYKKwl0ZXN0X291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIC0tZnVsbC1uYW1lJyAnCisJKAorCQljZCBwYXRoMCAmJgorCQlnaXQgbHMtdHJlZSAtLWZ1bGwtbmFtZSAkdHJlZSBhCisJKSA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCiswNDAwMDAgdHJlZSBYCXBhdGgwL2EKK0VPRgorCXRlc3Rfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgLS1mdWxsLXRyZWUnICcKKwkoCisJCWNkIHBhdGgxL2IvYyAmJgorCQlnaXQgbHMtdHJlZSAtLWZ1bGwtdHJlZSAkdHJlZQorCSkgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMTAwNjQ0IGJsb2IgWAkxLnR4dAorMTAwNjQ0IGJsb2IgWAkyLnR4dAorMDQwMDAwIHRyZWUgWAlwYXRoMAorMDQwMDAwIHRyZWUgWAlwYXRoMQorMDQwMDAwIHRyZWUgWAlwYXRoMgorMDQwMDAwIHRyZWUgWAlwYXRoMworRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLWZ1bGwtdHJlZSAtcicgJworCSgKKwkJY2QgcGF0aDMvICYmCisJCWdpdCBscy10cmVlIC0tZnVsbC10cmVlIC1yICR0cmVlCisJKSA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCTEudHh0CisxMDA2NDQgYmxvYiBYCTIudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgwL2EvYi9jLzEudHh0CisxMDA2NDQgYmxvYiBYCXBhdGgxL2IvYy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMi8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8xLnR4dAorMTAwNjQ0IGJsb2IgWAlwYXRoMy8yLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLWFiYnJldj01JyAnCisJZ2l0IGxzLXRyZWUgLS1hYmJyZXY9NSAkdHJlZSA+Y3VycmVudCAmJgorCXNlZCAtZSAicy8gJF94MDVbMC05YS1mXSoJLyBYCS8iIDxjdXJyZW50ID5jaGVjayAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxMDA2NDQgYmxvYiBYCTEudHh0CisxMDA2NDQgYmxvYiBYCTIudHh0CiswNDAwMDAgdHJlZSBYCXBhdGgwCiswNDAwMDAgdHJlZSBYCXBhdGgxCiswNDAwMDAgdHJlZSBYCXBhdGgyCiswNDAwMDAgdHJlZSBYCXBhdGgzCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBjaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIC0tbmFtZS1vbmx5JyAnCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgJHRyZWUgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMS50eHQKKzIudHh0CitwYXRoMAorcGF0aDEKK3BhdGgyCitwYXRoMworRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSAtLW5hbWUtb25seSAtcicgJworCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IC1yICR0cmVlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEudHh0CisyLnR4dAorcGF0aDAvYS9iL2MvMS50eHQKK3BhdGgxL2IvYy8xLnR4dAorcGF0aDIvMS50eHQKK3BhdGgzLzEudHh0CitwYXRoMy8yLnR4dAorRU9GCisJdGVzdF9vdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMTAyLWxzLXRyZWUtd2lsZGNhcmRzLnNoIGIvdC90MzEwMi1scy10cmVlLXdpbGRjYXJkcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZDRiMDJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzEwMi1scy10cmVlLXdpbGRjYXJkcy5zaApAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbHMtdHJlZSB3aXRoKG91dCkgZ2xvYnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIGEgYWEgImFbYV0iICYmCisJdG91Y2ggYS9vbmUgYWEvdHdvICJhW2FdL3RocmVlIiAmJgorCWdpdCBhZGQgYS9vbmUgYWEvdHdvICJhW2FdL3RocmVlIiAmJgorCWdpdCBjb21taXQgLW0gdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy10cmVlIGFbYV0gbWF0Y2hlcyBsaXRlcmFsbHknICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJMTAwNjQ0IGJsb2IgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQlhW2FdL3RocmVlCisJRU9GCisJZ2l0IGxzLXRyZWUgLXIgSEVBRCAiYVthXSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBvdXRzaWRlIHByZWZpeCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkxMDA2NDQgYmxvYiBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCS4uL2FbYV0vdGhyZWUKKwlFT0YKKwkoIGNkIGFhICYmIGdpdCBscy10cmVlIC1yIEhFQUQgIi4uL2FbYV0iOyApID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2xzLXRyZWUgZG9lcyBub3QgeWV0IHN1cHBvcnQgbmVnYXRlZCBwYXRoc3BlYycgJworCWdpdCBscy1maWxlcyAiOihleGNsdWRlKWEiICJhKiIgPmV4cGVjdCAmJgorCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IC1yIEhFQUQgIjooZXhjbHVkZSlhIiAiYSoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzEwMy1scy10cmVlLW1pc2Muc2ggYi90L3QzMTAzLWxzLXRyZWUtbWlzYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOWRjZjA0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzEwMy1scy10cmVlLW1pc2Muc2gKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249JworTWlzY2VsbGFuZW91cyB0ZXN0cyBmb3IgZ2l0IGxzLXRyZWUuCisKKwkgICAgICAxLiBnaXQgbHMtdHJlZSBmYWlscyBpbiBwcmVzZW5jZSBvZiB0cmVlIGRhbWFnZS4KKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciBhICYmCisJdG91Y2ggYS9vbmUgJiYKKwlnaXQgYWRkIGEvb25lICYmCisJZ2l0IGNvbW1pdCAtbSB0ZXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXRyZWUgZmFpbHMgd2l0aCBub24temVybyBleGl0IGNvZGUgb24gYnJva2VuIHRyZWUnICcKKwlybSAtZiAuZ2l0L29iamVjdHMvNWYvY2ZmYmQ2ZTRjNWM1YjhkODFmNWU5MzE0YjIwZTMzOGUzZmZmZjUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtdHJlZSAtciBIRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwMC1icmFuY2guc2ggYi90L3QzMjAwLWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZGFmNmY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzIwMC1icmFuY2guc2gKQEAgLTAsMCArMSw5MzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgQW1vcyBXYXRlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGJyYW5jaCBhc3NvcnRlZCB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgYSB0cml2aWFsIHJlcG9zaXRvcnknICcKKwllY2hvIEhlbGxvID5BICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQuIiAmJgorCWVjaG8gV29ybGQgPj5BICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIGNvbW1pdC4iICYmCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWhlbHAgc2hvdWxkIG5vdCBoYXZlIGNyZWF0ZWQgYSBib2d1cyBicmFuY2gnICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtLW1hbiAtLWhlbHAgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvLS1oZWxwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtaCBpbiBicm9rZW4gcmVwb3NpdG9yeScgJworCW1rZGlyIGJyb2tlbiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCT4uZ2l0L3JlZnMvaGVhZHMvbWFzdGVyICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBicmFuY2ggLWggPnVzYWdlIDI+JjEKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2UiIGJyb2tlbi91c2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGFiYyBzaG91bGQgY3JlYXRlIGEgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBhYmMgJiYgdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL2FiYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGEvYi9jIHNob3VsZCBjcmVhdGUgYSBicmFuY2gnICcKKwlnaXQgYnJhbmNoIGEvYi9jICYmIHRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9hL2IvYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIEhFQUQgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIEhFQUQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyRfejQwICRIRUFEICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTE3MTUwMjAwICswMDAwCWJyYW5jaDogQ3JlYXRlZCBmcm9tIG1hc3RlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1sIGQvZS9mIHNob3VsZCBjcmVhdGUgYSBicmFuY2ggYW5kIGEgbG9nJyAnCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA1LTA1LTI2IDIzOjMwIiBcCisJZ2l0IGJyYW5jaCAtbCBkL2UvZiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9kL2UvZiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvbG9ncy9yZWZzL2hlYWRzL2QvZS9mICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvbG9ncy9yZWZzL2hlYWRzL2QvZS9mCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLWQgZC9lL2Ygc2hvdWxkIGRlbGV0ZSBhIGJyYW5jaCBhbmQgYSBsb2cnICcKKwlnaXQgYnJhbmNoIC1kIGQvZS9mICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL2QvZS9mICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9kL2UvZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIGovayBzaG91bGQgd29yayBhZnRlciBicmFuY2ggaiBoYXMgYmVlbiBkZWxldGVkJyAnCisJZ2l0IGJyYW5jaCBqICYmCisJZ2l0IGJyYW5jaCAtZCBqICYmCisJZ2l0IGJyYW5jaCBqL2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBsIHNob3VsZCB3b3JrIGFmdGVyIGJyYW5jaCBsL20gaGFzIGJlZW4gZGVsZXRlZCcgJworCWdpdCBicmFuY2ggbC9tICYmCisJZ2l0IGJyYW5jaCAtZCBsL20gJiYKKwlnaXQgYnJhbmNoIGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSBkdW1wcyB1c2FnZScgJworCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBicmFuY2ggLW0gMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJicmFuY2ggbmFtZSByZXF1aXJlZCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gbSBtL20gc2hvdWxkIHdvcmsnICcKKwlnaXQgYnJhbmNoIC1sIG0gJiYKKwlnaXQgYnJhbmNoIC1tIG0gbS9tICYmCisJZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy9oZWFkcy9tL20KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSBuL24gbiBzaG91bGQgd29yaycgJworCWdpdCBicmFuY2ggLWwgbi9uICYmCisJZ2l0IGJyYW5jaCAtbSBuL24gbiAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIG8vbyBvIHNob3VsZCBmYWlsIHdoZW4gby9wIGV4aXN0cycgJworCWdpdCBicmFuY2ggby9vICYmCisJZ2l0IGJyYW5jaCBvL3AgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1tIG8vbyBvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gby9xIG8vcCBzaG91bGQgZmFpbCB3aGVuIG8vcCBleGlzdHMnICcKKwlnaXQgYnJhbmNoIG8vcSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gby9xIG8vcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIG8vcSBvL3Agc2hvdWxkIHdvcmsgd2hlbiBvL3AgZXhpc3RzJyAnCisJZ2l0IGJyYW5jaCAtTSBvL3Egby9wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLW0gLWYgby9xIG8vcCBzaG91bGQgd29yayB3aGVuIG8vcCBleGlzdHMnICcKKwlnaXQgYnJhbmNoIG8vcSAmJgorCWdpdCBicmFuY2ggLW0gLWYgby9xIG8vcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIHEgci9xIHNob3VsZCBmYWlsIHdoZW4gciBleGlzdHMnICcKKwlnaXQgYnJhbmNoIHEgJiYKKwlnaXQgYnJhbmNoIHIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1tIHEgci9xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLU0gZm9vIGJhciBzaG91bGQgZmFpbCB3aGVuIGJhciBpcyBjaGVja2VkIG91dCcgJworCWdpdCBicmFuY2ggYmFyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLU0gYmFyIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIGJheiBiYW0gc2hvdWxkIHN1Y2NlZWQgd2hlbiBiYXogaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgY2hlY2tvdXQgLWIgYmF6ICYmCisJZ2l0IGJyYW5jaCBiYW0gJiYKKwlnaXQgYnJhbmNoIC1NIGJheiBiYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtTSBtYXN0ZXIgc2hvdWxkIHdvcmsgd2hlbiBtYXN0ZXIgaXMgY2hlY2tlZCBvdXQnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtTSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtTSBtYXN0ZXIgbWFzdGVyIHNob3VsZCB3b3JrIHdoZW4gbWFzdGVyIGlzIGNoZWNrZWQgb3V0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLU0gbWFzdGVyIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1NIG1hc3RlcjIgbWFzdGVyMiBzaG91bGQgd29yayB3aGVuIG1hc3RlciBpcyBjaGVja2VkIG91dCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIG1hc3RlcjIgJiYKKwlnaXQgYnJhbmNoIC1NIG1hc3RlcjIgbWFzdGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC12IC1kIHQgc2hvdWxkIHdvcmsnICcKKwlnaXQgYnJhbmNoIHQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvdCAmJgorCWdpdCBicmFuY2ggLXYgLWQgdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy90CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXYgLW0gdCBzIHNob3VsZCB3b3JrJyAnCisJZ2l0IGJyYW5jaCB0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL3QgJiYKKwlnaXQgYnJhbmNoIC12IC1tIHQgcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy90ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL3MgJiYKKwlnaXQgYnJhbmNoIC1kIHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSAtZCB0IHMgc2hvdWxkIGZhaWwnICcKKwlnaXQgYnJhbmNoIHQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gLWQgdCBzICYmCisJZ2l0IGJyYW5jaCAtZCB0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWxpc3QgLWQgdCBzaG91bGQgZmFpbCcgJworCWdpdCBicmFuY2ggdCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy90ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLWxpc3QgLWQgdCAmJgorCWdpdCBicmFuY2ggLWQgdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9oZWFkcy90CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1jb2x1bW4nICcKKwlDT0xVTU5TPTgxIGdpdCBicmFuY2ggLS1jb2x1bW49Y29sdW1uID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorICBhL2IvYyAgICAgYmFtICAgICAgIGZvbyAgICAgICBsICAgICAgICogbWFzdGVyICAgIG4gICAgICAgICBvL3AgICAgICAgcgorICBhYmMgICAgICAgYmFyICAgICAgIGovayAgICAgICBtL20gICAgICAgbWFzdGVyMiAgIG8vbyAgICAgICBxCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWNvbHVtbiB3aXRoIGFuIGV4dHJlbWVseSBsb25nIGJyYW5jaCBuYW1lJyAnCisJbG9uZz10aGlzL2lzL2EvcGFydC9vZi9sb25nL2JyYW5jaC9uYW1lICYmCisJbG9uZz16JGxvbmcvJGxvbmcvJGxvbmcvJGxvbmcgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBicmFuY2ggLWQgJGxvbmciICYmCisJZ2l0IGJyYW5jaCAkbG9uZyAmJgorCUNPTFVNTlM9ODAgZ2l0IGJyYW5jaCAtLWNvbHVtbj1jb2x1bW4gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKKyAgYS9iL2MKKyAgYWJjCisgIGJhbQorICBiYXIKKyAgZm9vCisgIGovaworICBsCisgIG0vbQorKiBtYXN0ZXIKKyAgbWFzdGVyMgorICBuCisgIG8vbworICBvL3AKKyAgcQorICByCisgICRsb25nCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCB3aXRoIGNvbHVtbi4qJyAnCisJZ2l0IGNvbmZpZyBjb2x1bW4udWkgY29sdW1uICYmCisJZ2l0IGNvbmZpZyBjb2x1bW4uYnJhbmNoICJkZW5zZSIgJiYKKwlDT0xVTU5TPTgwIGdpdCBicmFuY2ggPmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb2x1bW4uYnJhbmNoICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbHVtbi51aSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisgIGEvYi9jICAgYmFtICAgZm9vICAgbCAgICogbWFzdGVyICAgIG4gICAgIG8vcCAgIHIKKyAgYWJjICAgICBiYXIgICBqL2sgICBtL20gICBtYXN0ZXIyICAgby9vICAgcQorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1jb2x1bW4gLXYgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tY29sdW1uIC12CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXYgd2l0aCBjb2x1bW4udWkgaWdub3JlZCcgJworCWdpdCBjb25maWcgY29sdW1uLnVpIGNvbHVtbiAmJgorCUNPTFVNTlM9ODAgZ2l0IGJyYW5jaCAtdiB8IGN1dCAtYyAtMTAgfCBzZWQgInMvICokLy8iID5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sdW1uLnVpICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKyAgYS9iL2MKKyAgYWJjCisgIGJhbQorICBiYXIKKyAgZm9vCisgIGovaworICBsCisgIG0vbQorKiBtYXN0ZXIKKyAgbWFzdGVyMgorICBuCisgIG8vbworICBvL3AKKyAgcQorICByCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworbXYgLmdpdC9jb25maWcgLmdpdC9jb25maWctc2F2ZWQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtbSBxIHEyIHdpdGhvdXQgY29uZmlnIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IGJyYW5jaCAtbSBxIHEyICYmCisJZ2l0IGJyYW5jaCAtbSBxMiBxCisnCisKK212IC5naXQvY29uZmlnLXNhdmVkIC5naXQvY29uZmlnCisKK2dpdCBjb25maWcgYnJhbmNoLnMvcy5kdW1teSBIZWxsbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC1tIHMvcyBzIHNob3VsZCB3b3JrIHdoZW4gcy90IGlzIGRlbGV0ZWQnICcKKwlnaXQgYnJhbmNoIC1sIHMvcyAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvcy9zICYmCisJZ2l0IGJyYW5jaCAtbCBzL3QgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL3MvdCAmJgorCWdpdCBicmFuY2ggLWQgcy90ICYmCisJZ2l0IGJyYW5jaCAtbSBzL3MgcyAmJgorCWdpdCByZWZsb2cgZXhpc3RzIHJlZnMvaGVhZHMvcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWcgaW5mb3JtYXRpb24gd2FzIHJlbmFtZWQsIHRvbycgJworCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5zLmR1bW15KSA9IEhlbGxvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gucy9zL2R1bW15CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW5nIGEgc3ltcmVmJyAnCisJZ2l0IGJyYW5jaCB0YXJnZXQgJiYKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvc3ltcmVmIHJlZnMvaGVhZHMvdGFyZ2V0ICYmCisJZWNobyAiRGVsZXRlZCBicmFuY2ggc3ltcmVmICh3YXMgcmVmcy9oZWFkcy90YXJnZXQpLiIgPmV4cGVjdCAmJgorCWdpdCBicmFuY2ggLWQgc3ltcmVmID5hY3R1YWwgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvdGFyZ2V0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL3N5bXJlZiAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW5nIGEgZGFuZ2xpbmcgc3ltcmVmJyAnCisJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL2RhbmdsaW5nLXN5bXJlZiBub3doZXJlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL2RhbmdsaW5nLXN5bXJlZiAmJgorCWVjaG8gIkRlbGV0ZWQgYnJhbmNoIGRhbmdsaW5nLXN5bXJlZiAod2FzIG5vd2hlcmUpLiIgPmV4cGVjdCAmJgorCWdpdCBicmFuY2ggLWQgZGFuZ2xpbmctc3ltcmVmID5hY3R1YWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvZGFuZ2xpbmctc3ltcmVmICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRpbmcgYSBzZWxmLXJlZmVyZW50aWFsIHN5bXJlZicgJworCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9zZWxmLXJlZmVyZW5jZSByZWZzL2hlYWRzL3NlbGYtcmVmZXJlbmNlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9yZWZzL2hlYWRzL3NlbGYtcmVmZXJlbmNlICYmCisJZWNobyAiRGVsZXRlZCBicmFuY2ggc2VsZi1yZWZlcmVuY2UgKHdhcyByZWZzL2hlYWRzL3NlbGYtcmVmZXJlbmNlKS4iID5leHBlY3QgJiYKKwlnaXQgYnJhbmNoIC1kIHNlbGYtcmVmZXJlbmNlID5hY3R1YWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvc2VsZi1yZWZlcmVuY2UgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWluZyBhIHN5bXJlZiBpcyBub3QgYWxsb3dlZCcgJworCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIyIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtbSBtYXN0ZXIyIG1hc3RlcjMgJiYKKwlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvbWFzdGVyMiAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdnaXQgYnJhbmNoIC1tIHUgdiBzaG91bGQgZmFpbCB3aGVuIHRoZSByZWZsb2cgZm9yIHUgaXMgYSBzeW1saW5rJyAnCisJZ2l0IGJyYW5jaCAtbCB1ICYmCisJbXYgLmdpdC9sb2dzL3JlZnMvaGVhZHMvdSByZWFsLXUgJiYKKwlsbiAtcyByZWFsLXUgLmdpdC9sb2dzL3JlZnMvaGVhZHMvdSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLW0gdSB2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdHJhY2tpbmcgc2V0dXAgdmlhIC0tdHJhY2snICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15MSBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2gubXkxLnJlbW90ZSkgPSBsb2NhbCAmJgorCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5teTEubWVyZ2UpID0gcmVmcy9oZWFkcy9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0cmFja2luZyBzZXR1cCAobm9uLXdpbGRjYXJkLCBtYXRjaGluZyknICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteTQgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLm15NC5yZW1vdGUpID0gbG9jYWwgJiYKKwl0ZXN0ICQoZ2l0IGNvbmZpZyBicmFuY2gubXk0Lm1lcmdlKSA9IHJlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWNraW5nIHNldHVwIGZhaWxzIG9uIG5vbi1tYXRjaGluZyByZWZzcGVjJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvczpyZWZzL3JlbW90ZXMvbG9jYWwvcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS10cmFjayBteTUgbG9jYWwvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubXk1LnJlbW90ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgYnJhbmNoLm15NS5tZXJnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRyYWNraW5nIHNldHVwIHZpYSBjb25maWcnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSB0cnVlICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXkzIGxvY2FsL21hc3RlciAmJgorCXRlc3QgJChnaXQgY29uZmlnIGJyYW5jaC5teTMucmVtb3RlKSA9IGxvY2FsICYmCisJdGVzdCAkKGdpdCBjb25maWcgYnJhbmNoLm15My5tZXJnZSkgPSByZWZzL2hlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG92ZXJyaWRpbmcgdHJhY2tpbmcgc2V0dXAgdmlhIC0tbm8tdHJhY2snICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSB0cnVlICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteTIgbG9jYWwvbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgZmFsc2UgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXkyLnJlbW90ZSkiID0gbG9jYWwgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXkyLm1lcmdlKSIgPSByZWZzL2hlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyB0cmFja2luZyB3aXRob3V0IC5mZXRjaCBlbnRyaWVzJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgdHJ1ZSAmJgorCWdpdCBicmFuY2ggbXk2IHMgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBmYWxzZSAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyBicmFuY2gubXk2LnJlbW90ZSkiICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIGJyYW5jaC5teTYubWVyZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRyYWNraW5nIHNldHVwIHZpYSAtLXRyYWNrIGJ1dCBkZWVwZXInICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28vbyB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15NyBsb2NhbC9vL28gJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15Ny5yZW1vdGUpIiA9IGxvY2FsICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTcubWVyZ2UpIiA9IHJlZnMvaGVhZHMvby9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVsZXRpbmcgYnJhbmNoIGRlbGV0ZXMgYnJhbmNoIGNvbmZpZycgJworCWdpdCBicmFuY2ggLWQgbXk3ICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIGJyYW5jaC5teTcucmVtb3RlKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLm15Ny5tZXJnZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVsZXRpbmcgYnJhbmNoIHdpdGhvdXQgY29uZmlnJyAnCisJZ2l0IGJyYW5jaCBteTcgcyAmJgorCXNoYTE9JChnaXQgcmV2LXBhcnNlIG15NyB8IGN1dCAtYyAxLTcpICYmCisJZWNobyAiRGVsZXRlZCBicmFuY2ggbXk3ICh3YXMgJHNoYTEpLiIgPmV4cGVjdCAmJgorCWdpdCBicmFuY2ggLWQgbXk3ID5hY3R1YWwgMj4mMSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS10cmFjayB3aXRob3V0IC5mZXRjaCBlbnRyaWVzJyAnCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15OCAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXk4LnJlbW90ZSkiICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTgubWVyZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggZnJvbSBub24tYnJhbmNoIEhFQUQgdy9hdXRvc2V0dXBtZXJnZT1hbHdheXMnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBhbHdheXMgJiYKKwlnaXQgYnJhbmNoIG15OSBIRUFEXiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCBmcm9tIG5vbi1icmFuY2ggSEVBRCB3Ly0tdHJhY2sgY2F1c2VzIGZhaWx1cmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdHJhY2sgbXkxMCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggZnJvbSB0YWcgdy8tLXRyYWNrIGNhdXNlcyBmYWlsdXJlJyAnCisJZ2l0IHRhZyBmb29iYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdHJhY2sgbXkxMSBmb29iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0tdG8gZmFpbHMgb24gbXVsdGlwbGUgYnJhbmNoZXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG1hc3RlciBhIGIgYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldC11cHN0cmVhbS10byBmYWlscyBvbiBkZXRhY2hlZCBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IEhFQURee30gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2V0LXVwc3RyZWFtLXRvIGZhaWxzIG9uIGEgbWlzc2luZyBkc3QgYnJhbmNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBtYXN0ZXIgZG9lcy1ub3QtZXhpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0tdG8gZmFpbHMgb24gYSBtaXNzaW5nIHNyYyBicmFuY2gnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIGRvZXMtbm90LWV4aXN0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldC11cHN0cmVhbS10byBmYWlscyBvbiBhIG5vbi1yZWYnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIEhFQURee30KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIC0tc2V0LXVwc3RyZWFtLXRvIG1vZGlmeSBIRUFEJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgZm9vICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSBmb28gJiYKKwlnaXQgYnJhbmNoIG15MTIgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG15MTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUpIiA9ICIuIiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlKSIgPSAicmVmcy9oZWFkcy9teTEyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgLS1zZXQtdXBzdHJlYW0tdG8gbW9kaWZ5IGEgcGFydGljdWxhciBicmFuY2gnICcKKwlnaXQgYnJhbmNoIG15MTMgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvIG1hc3RlciBteTEzICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTEzLnJlbW90ZSkiID0gIi4iICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teTEzLm1lcmdlKSIgPSAicmVmcy9oZWFkcy9tYXN0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tdW5zZXQtdXBzdHJlYW0gc2hvdWxkIGZhaWwgaWYgZ2l2ZW4gYSBub24tZXhpc3RlbnQgYnJhbmNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtIGktZG9udC1leGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tdW5zZXQtdXBzdHJlYW0gb24gSEVBRCcgJworCWdpdCBicmFuY2ggbXkxNCAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIGZvbyAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgZm9vICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBteTE0ICYmCisJZ2l0IGJyYW5jaCAtLXVuc2V0LXVwc3RyZWFtICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSAmJgorCSMgZmFpbCBmb3IgYSBicmFuY2ggd2l0aG91dCB1cHN0cmVhbSBzZXQKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS11bnNldC11cHN0cmVhbSBzaG91bGQgZmFpbCBvbiBtdWx0aXBsZSBicmFuY2hlcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbSBhIGIgYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVuc2V0LXVwc3RyZWFtIHNob3VsZCBmYWlsIG9uIGRldGFjaGVkIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgSEVBRF57fSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbSAmJgorCWdpdCBjaGVja291dCAtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS11bnNldC11cHN0cmVhbSBvbiBhIHBhcnRpY3VsYXIgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBteTE1ICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBtYXN0ZXIgbXkxNCAmJgorCWdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbSBteTE0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBicmFuY2gubXkxNC5yZW1vdGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5teTE0Lm1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2V0LXVwc3RyZWFtIHNob3dzIG1lc3NhZ2Ugd2hlbiBjcmVhdGluZyBhIG5ldyBicmFuY2ggdGhhdCBleGlzdHMgYXMgcmVtb3RlLXRyYWNraW5nJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgSEVBRCAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gb3JpZ2luL21hc3RlciAyPmFjdHVhbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgdXBkYXRlLXJlZiAtZCByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1kIG9yaWdpbi9tYXN0ZXIgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitUaGUgLS1zZXQtdXBzdHJlYW0gZmxhZyBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQuIENvbnNpZGVyIHVzaW5nIC0tdHJhY2sgb3IgLS1zZXQtdXBzdHJlYW0tdG8KKworSWYgeW91IHdhbnRlZCB0byBtYWtlICciJ21hc3RlciciJyB0cmFjayAnIidvcmlnaW4vbWFzdGVyJyInLCBkbyB0aGlzOgorCisgICAgZ2l0IGJyYW5jaCAtZCBvcmlnaW4vbWFzdGVyCisgICAgZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbS10byBvcmlnaW4vbWFzdGVyCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0gd2l0aCB0d28gYXJncyBvbmx5IHNob3dzIHRoZSBkZXByZWNhdGlvbiBtZXNzYWdlJyAnCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbSBtYXN0ZXIgbXkxMyAyPmFjdHVhbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC0tdW5zZXQtdXBzdHJlYW0gbWFzdGVyICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorVGhlIC0tc2V0LXVwc3RyZWFtIGZsYWcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLiBDb25zaWRlciB1c2luZyAtLXRyYWNrIG9yIC0tc2V0LXVwc3RyZWFtLXRvCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0gd2l0aCBvbmUgYXJnIG9ubHkgc2hvd3MgdGhlIGRlcHJlY2F0aW9uIG1lc3NhZ2UgaWYgdGhlIGJyYW5jaCBleGlzdGVkJyAnCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbSBteTEzIDI+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLS11bnNldC11cHN0cmVhbSBteTEzICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorVGhlIC0tc2V0LXVwc3RyZWFtIGZsYWcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLiBDb25zaWRlciB1c2luZyAtLXRyYWNrIG9yIC0tc2V0LXVwc3RyZWFtLXRvCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0tdG8gbm90aWNlcyBhbiBlcnJvciB0byBzZXQgYnJhbmNoIGFzIG93biB1cHN0cmVhbScgJworCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0tdG8gcmVmcy9oZWFkcy9teTEzIG15MTMgMj5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwl3YXJuaW5nOiBOb3Qgc2V0dGluZyBicmFuY2ggbXkxMyBhcyBpdHMgb3duIHVwc3RyZWFtLgorCUVPRgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY29uZmlnIGJyYW5jaC5teTEzLnJlbW90ZSAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY29uZmlnIGJyYW5jaC5teTEzLm1lcmdlICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIEtlZXAgdGhpcyB0ZXN0IGxhc3QsIGFzIGl0IGNoYW5nZXMgdGhlIGN1cnJlbnQgYnJhbmNoCitjYXQgPmV4cGVjdCA8PEVPRgorJF96NDAgJEhFQUQgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IDExMTcxNTAyMDAgKzAwMDAJYnJhbmNoOiBDcmVhdGVkIGZyb20gbWFzdGVyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjaGVja291dCAtYiBnL2gvaSAtbCBzaG91bGQgY3JlYXRlIGEgYnJhbmNoIGFuZCBhIGxvZycgJworCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNiAyMzozMCIgXAorCWdpdCBjaGVja291dCAtYiBnL2gvaSAtbCBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvaGVhZHMvZy9oL2kgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9nL2gvaSAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L2xvZ3MvcmVmcy9oZWFkcy9nL2gvaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiBtYWtlcyByZWZsb2cgYnkgZGVmYXVsdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5sb2dBbGxSZWZVcGRhdGVzICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFscGhhICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBhbHBoYUB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLWIgZG9lcyBub3QgbWFrZSByZWZsb2cgd2hlbiBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgPSBmYWxzZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyBmYWxzZSAmJgorCWdpdCBjaGVja291dCAtYiBiZXRhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBiZXRhQHswfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtYiB3aXRoIC1sIG1ha2VzIHJlZmxvZyB3aGVuIGNvcmUubG9nQWxsUmVmVXBkYXRlcyA9IGZhbHNlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtbGIgZ2FtbWEgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5sb2dBbGxSZWZVcGRhdGVzICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBnYW1tYUB7MH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXZvaWQgYW1iaWd1b3VzIHRyYWNrJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgdHJ1ZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmFtYmkxLnVybCBsYWxhbGEgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5hbWJpMS5mZXRjaCByZWZzL2hlYWRzL2xhbGFsYTpyZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBjb25maWcgcmVtb3RlLmFtYmkyLnVybCBsaWxpbGkgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5hbWJpMi5mZXRjaCByZWZzL2hlYWRzL2xpbGlsaTpyZWZzL2hlYWRzL21hc3RlciAmJgorCWdpdCBicmFuY2ggYWxsMSBtYXN0ZXIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLmFsbDEubWVyZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbG9jYWwgb24gYSB0cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGxvY2FsICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2UgJiYKKwlnaXQgYnJhbmNoIC0tdHJhY2sgbXlyMSBteWJhc2UgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjEucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIxLm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZSAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMS5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgYWx3YXlzICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbyB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCBteWJhc2UyICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjIgbXliYXNlICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIyLnJlbW90ZSkiID0gLiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMi5tZXJnZSkiID0gcmVmcy9oZWFkcy9teWJhc2UgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjIucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSByZW1vdGUgb24gYSB0cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28gfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXliYXNlMyAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXIzIG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjMucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXIzLm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZTIgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMy5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIG5ldmVyIG9uIGEgdHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL28gfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggbXliYXNlNCAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI0IG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjQucmVtb3RlKSIgPSAuICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI0Lm1lcmdlKSIgPSByZWZzL2hlYWRzL215YmFzZTIgJiYKKwkhIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNC5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGxvY2FsIG9uIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbG9jYWwgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI1IGxvY2FsL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNS5yZW1vdGUpIiA9IGxvY2FsICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI1Lm1lcmdlKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCSEgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI1LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjYgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI2LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjYubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJISB0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjYucmViYXNlKSIgPSB0cnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSByZW1vdGUgb24gYSB0cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSByZW1vdGUgJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS10cmFjayBteXI3IGxvY2FsL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNy5yZW1vdGUpIiA9IGxvY2FsICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI3Lm1lcmdlKSIgPSByZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyNy5yZWJhc2UpIiA9IHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIGFsd2F5cyBvbiBhIHRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjggbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI4LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjgubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI4LnJlYmFzZSkiID0gdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIGEgdHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjkgbG9jYWwvbWFzdGVyICYmCisJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5teXI5LnJlbW90ZSkiID0gbG9jYWwgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjkubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyOS5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHVuY29uZmlndXJlZCBvbiBhIHRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9vIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIG15YmFzZTEwICYmCisJZ2l0IGJyYW5jaCAtLXRyYWNrIG15cjEwIG15YmFzZTIgJiYKKwl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm15cjEwLnJlbW90ZSkiID0gLiAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTAubWVyZ2UpIiA9IHJlZnMvaGVhZHMvbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEwLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIHVudHJhY2tlZCBsb2NhbCBicmFuY2gnICcKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjExIG15YmFzZTIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMS5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMS5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjExLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgdW5jb25maWd1cmVkIG9uIHVudHJhY2tlZCByZW1vdGUgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxMiBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMi5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxMi5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEyLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYW4gdW50cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBuZXZlciAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTMgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEzLnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjEzLm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTMucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBsb2NhbCBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIGxvY2FsICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIxNCBteWJhc2UyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTQucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTQubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNC5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhbiB1bnRyYWNrZWQgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwcmViYXNlIHJlbW90ZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTUgbXliYXNlMiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE1LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE1Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTUucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBhbHdheXMgb24gYW4gdW50cmFja2VkIGxvY2FsIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBhbHdheXMgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE2IG15YmFzZTIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNi5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxNi5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE2LnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgbmV2ZXIgb24gYW4gdW50cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgbmV2ZXIgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE3IGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE3LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE3Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTcucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBsb2NhbCBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBsb2NhbCAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLnVybCAuICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwuZmV0Y2ggcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9sb2NhbC8qICYmCisJKGdpdCBzaG93LXJlZiAtcSByZWZzL3JlbW90ZXMvbG9jYWwvbWFzdGVyIHx8IGdpdCBmZXRjaCBsb2NhbCkgJiYKKwlnaXQgYnJhbmNoIC0tbm8tdHJhY2sgbXlyMTggbG9jYWwvbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTgucmVtb3RlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTgubWVyZ2UpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIxOC5yZWJhc2UpIiA9IHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b3NldHVwcmViYXNlIHJlbW90ZSBvbiBhbiB1bnRyYWNrZWQgcmVtb3RlIGJyYW5jaCcgJworCWdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSByZW1vdGUgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC51cmwgLiAmJgorCWdpdCBjb25maWcgcmVtb3RlLmxvY2FsLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9jYWwvKiAmJgorCShnaXQgc2hvdy1yZWYgLXEgcmVmcy9yZW1vdGVzL2xvY2FsL21hc3RlciB8fCBnaXQgZmV0Y2ggbG9jYWwpICYmCisJZ2l0IGJyYW5jaCAtLW5vLXRyYWNrIG15cjE5IGxvY2FsL21hc3RlciAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE5LnJlbW90ZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjE5Lm1lcmdlKSIgPSB6ICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubXlyMTkucmViYXNlKSIgPSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zZXR1cHJlYmFzZSBhbHdheXMgb24gYW4gdW50cmFja2VkIHJlbW90ZSBicmFuY2gnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgYWx3YXlzICYmCisJZ2l0IGNvbmZpZyByZW1vdGUubG9jYWwudXJsIC4gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5sb2NhbC5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2xvY2FsLyogJiYKKwkoZ2l0IHNob3ctcmVmIC1xIHJlZnMvcmVtb3Rlcy9sb2NhbC9tYXN0ZXIgfHwgZ2l0IGZldGNoIGxvY2FsKSAmJgorCWdpdCBicmFuY2ggLS1uby10cmFjayBteXIyMCBsb2NhbC9tYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIyMC5yZW1vdGUpIiA9IHogJiYKKwl0ZXN0ICJ6JChnaXQgY29uZmlnIGJyYW5jaC5teXIyMC5tZXJnZSkiID0geiAmJgorCXRlc3QgInokKGdpdCBjb25maWcgYnJhbmNoLm15cjIwLnJlYmFzZSkiID0gegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvc2V0dXByZWJhc2UgYWx3YXlzIG9uIGRldGFjaGVkIEhFQUQnICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBhbHdheXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlnaXQgYnJhbmNoIG15MTEgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLm15MTEucmVtb3RlKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgYnJhbmNoLm15MTEubWVyZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgbWlzY29uZmlndXJlZCBhdXRvc2V0dXByZWJhc2UgKGJhZCB2YWx1ZSknICcKKwlnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXByZWJhc2UgZ2FyYmFnZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IG1pc2NvbmZpZ3VyZWQgYXV0b3NldHVwcmViYXNlIChubyB2YWx1ZSknICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSAmJgorCWVjaG8gIlticmFuY2hdIGF1dG9zZXR1cHJlYmFzZSIgPj4uZ2l0L2NvbmZpZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRlbXB0IHRvIGRlbGV0ZSBhIGJyYW5jaCB3aXRob3V0IGJhc2UgYW5kIHVubWVyZ2VkIHRvIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgbXk5ICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGJyYW5jaC5teTgubWVyZ2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC1kIG15OAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRlbXB0IHRvIGRlbGV0ZSBhIGJyYW5jaCBtZXJnZWQgdG8gaXRzIGJhc2UnICcKKwkjIHdlIGFyZSBvbiBteTkgd2hpY2ggaXMgdGhlIGluaXRpYWwgY29tbWl0OyB0cmFkaXRpb25hbGx5CisJIyB3ZSB3b3VsZCBub3QgaGF2ZSBhbGxvd2VkIGRlbGV0aW5nIG15OCB0aGF0IGlzIG5vdCBtZXJnZWQKKwkjIHRvIG15OSwgYnV0IGl0IGlzIHNldCB0byB0cmFjayBtYXN0ZXIgdGhhdCBhbHJlYWR5IGhhcyBteTgKKwlnaXQgY29uZmlnIGJyYW5jaC5teTgubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1kIG15OAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdHRlbXB0IHRvIGRlbGV0ZSBhIGJyYW5jaCBtZXJnZWQgdG8gaXRzIGJhc2UnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBUaGlyZCA+PkEgJiYKKwlnaXQgY29tbWl0IC1tICJUaGlyZCBjb21taXQiIEEgJiYKKwlnaXQgYnJhbmNoIC10IG15MTAgbXk5ICYmCisJZ2l0IGJyYW5jaCAtZiBteTEwIEhFQUReICYmCisJIyB3ZSBhcmUgb24gbWFzdGVyIHdoaWNoIGlzIGF0IHRoZSB0aGlyZCBjb21taXQsIGFuZCBteTEwCisJIyBpcyBiZWhpbmQgdXMsIHNvIHRyYWRpdGlvbmFsbHkgd2Ugd291bGQgaGF2ZSBhbGxvd2VkIGRlbGV0aW5nCisJIyBpdDsgYnV0IG15MTAgaXMgc2V0IHRvIHRyYWNrIG15OSB0aGF0IGlzIGZ1cnRoZXIgYmVoaW5kLgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLWQgbXkxMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2Ugc2V0LXVwc3RyZWFtIG9uIHRoZSBjdXJyZW50IGJyYW5jaCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgLS1iYXJlIGluaXQgbXl1cHN0cmVhbS5naXQgJiYKKwlnaXQgcHVzaCBteXVwc3RyZWFtLmdpdCBtYXN0ZXI6cmVmcy9oZWFkcy9mcm90eiAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiBteXVwc3RyZWFtLmdpdCAmJgorCWdpdCBmZXRjaCAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gbWFzdGVyIG9yaWdpbi9mcm90eiAmJgorCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSkiID0gInpvcmlnaW4iICYmCisJdGVzdCAieiQoZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlKSIgPSAienJlZnMvaGVhZHMvZnJvdHoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIC0tZWRpdC1kZXNjcmlwdGlvbicgJworCXdyaXRlX3NjcmlwdCBlZGl0b3IgPDwtXEVPRiAmJgorCQllY2hvICJOZXcgY29udGVudHMiID4iJDEiCisJRU9GCisJRURJVE9SPS4vZWRpdG9yIGdpdCBicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uICYmCisJCXdyaXRlX3NjcmlwdCBlZGl0b3IgPDwtXEVPRiAmJgorCQlnaXQgc3RyaXBzcGFjZSAtcyA8IiQxIiA+IkVESVRPUl9PVVRQVVQiCisJRU9GCisJRURJVE9SPS4vZWRpdG9yIGdpdCBicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uICYmCisJZWNobyAiTmV3IGNvbnRlbnRzIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgRURJVE9SX09VVFBVVCBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IHR5cG8gaW4gYnJhbmNoIG5hbWUgd2hlbiB1c2luZyAtLWVkaXQtZGVzY3JpcHRpb24nICcKKwl3cml0ZV9zY3JpcHQgZWRpdG9yIDw8LVxFT0YgJiYKKwkJZWNobyAiTmV3IGNvbnRlbnRzIiA+IiQxIgorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGVudiBFRElUT1I9Li9lZGl0b3IgZ2l0IGJyYW5jaCAtLWVkaXQtZGVzY3JpcHRpb24gbm8tc3VjaC1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIC0tZWRpdC1kZXNjcmlwdGlvbiBvbiB1bmJvcm4gYnJhbmNoIGZvciBub3cnICcKKwl3cml0ZV9zY3JpcHQgZWRpdG9yIDw8LVxFT0YgJiYKKwkJZWNobyAiTmV3IGNvbnRlbnRzIiA+IiQxIgorCUVPRgorCWdpdCBjaGVja291dCAtLW9ycGhhbiB1bmJvcm4gJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgRURJVE9SPS4vZWRpdG9yIGdpdCBicmFuY2ggLS1lZGl0LWRlc2NyaXB0aW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWVyZ2VkIGNhdGNoZXMgaW52YWxpZCBvYmplY3QgbmFtZXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tbWVyZ2VkIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhY2tpbmcgd2l0aCB1bmV4cGVjdGVkIC5mZXRjaCByZWZzcGVjJyAnCisJcm0gLXJmIGEgYiBjIGQgJiYKKwlnaXQgaW5pdCBhICYmCisJKAorCQljZCBhICYmCisJCXRlc3RfY29tbWl0IGEKKwkpICYmCisJZ2l0IGluaXQgYiAmJgorCSgKKwkJY2QgYiAmJgorCQl0ZXN0X2NvbW1pdCBiCisJKSAmJgorCWdpdCBpbml0IGMgJiYKKwkoCisJCWNkIGMgJiYKKwkJdGVzdF9jb21taXQgYyAmJgorCQlnaXQgcmVtb3RlIGFkZCBhIC4uL2EgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgYiAuLi9iICYmCisJCWdpdCBmZXRjaCAtLWFsbAorCSkgJiYKKwlnaXQgaW5pdCBkICYmCisJKAorCQljZCBkICYmCisJCWdpdCByZW1vdGUgYWRkIGMgLi4vYyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5jLmZldGNoICIrcmVmcy9yZW1vdGVzLyo6cmVmcy9yZW1vdGVzLyoiICYmCisJCWdpdCBmZXRjaCBjICYmCisJCWdpdCBicmFuY2ggLS10cmFjayBsb2NhbC9hL21hc3RlciByZW1vdGVzL2EvbWFzdGVyICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gubG9jYWwvYS9tYXN0ZXIucmVtb3RlKSIgPSAiYyIgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC5sb2NhbC9hL21hc3Rlci5tZXJnZSkiID0gInJlZnMvcmVtb3Rlcy9hL21hc3RlciIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBhID5leHBlY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBsb2NhbC9hL21hc3RlciA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwMS1icmFuY2gtY29udGFpbnMuc2ggYi90L3QzMjAxLWJyYW5jaC1jb250YWlucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MTJhNjYzCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzIwMS1icmFuY2gtY29udGFpbnMuc2gKQEAgLTAsMCArMSwxNjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdicmFuY2ggLS1jb250YWlucyA8Y29tbWl0PiwgLS1tZXJnZWQsIGFuZCAtLW5vLW1lcmdlZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCWVjaG8gMSA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gInNlY29uZCBvbiBtYXN0ZXIiICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWVjaG8gMSA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gInNlY29uZCBvbiBzaWRlIiAmJgorCisJZ2l0IG1lcmdlIG1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaCAtLWNvbnRhaW5zPW1hc3RlcicgJworCisJZ2l0IGJyYW5jaCAtLWNvbnRhaW5zPW1hc3RlciA+YWN0dWFsICYmCisJeworCQllY2hvICIgIG1hc3RlciIgJiYgZWNobyAiKiBzaWRlIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1jb250YWlucyBtYXN0ZXInICcKKworCWdpdCBicmFuY2ggLS1jb250YWlucyBtYXN0ZXIgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiICBtYXN0ZXIiICYmIGVjaG8gIiogc2lkZSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tY29udGFpbnM9c2lkZScgJworCisJZ2l0IGJyYW5jaCAtLWNvbnRhaW5zPXNpZGUgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiKiBzaWRlIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1jb250YWlucyB3aXRoIHBhdHRlcm4gaW1wbGllcyAtLWxpc3QnICcKKworCWdpdCBicmFuY2ggLS1jb250YWlucz1tYXN0ZXIgbWFzdGVyID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIiAgbWFzdGVyIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlOiBicmFuY2ggLS1tZXJnZWQnICcKKworCWdpdCBicmFuY2ggLS1tZXJnZWQgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiICBtYXN0ZXIiICYmCisJCWVjaG8gIiogc2lkZSIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC0tbWVyZ2VkIHdpdGggcGF0dGVybiBpbXBsaWVzIC0tbGlzdCcgJworCisJZ2l0IGJyYW5jaCAtLW1lcmdlZD1zaWRlIG1hc3RlciA+YWN0dWFsICYmCisJeworCQllY2hvICIgIG1hc3RlciIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZTogYnJhbmNoIC0tbm8tbWVyZ2VkJyAnCisKKwlnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkID5hY3R1YWwgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hc3RlcjogYnJhbmNoIC0tbWVyZ2VkJyAnCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtLW1lcmdlZCA+YWN0dWFsICYmCisJeworCQllY2hvICIqIG1hc3RlciIKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFzdGVyOiBicmFuY2ggLS1uby1tZXJnZWQnICcKKworCWdpdCBicmFuY2ggLS1uby1tZXJnZWQgPmFjdHVhbCAmJgorCXsKKwkJZWNobyAiICBzaWRlIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1uby1tZXJnZWQgd2l0aCBwYXR0ZXJuIGltcGxpZXMgLS1saXN0JyAnCisKKwlnaXQgYnJhbmNoIC0tbm8tbWVyZ2VkPW1hc3RlciBtYXN0ZXIgPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wbGljaXQgLS1saXN0IGNvbmZsaWN0cyB3aXRoIG1vZGlmaWNhdGlvbiBvcHRpb25zJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tY29udGFpbnM9bWFzdGVyIC1kICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtLWNvbnRhaW5zPW1hc3RlciAtbSBmb28KKworJworCisjIFdlIHdhbnQgdG8gc2V0IHVwIGEgY2FzZSB3aGVyZSB0aGUgd2FsayBmb3IgdGhlIHRyYWNraW5nIGluZm8KKyMgb2Ygb25lIGJyYW5jaCBjcm9zc2VzIHRoZSB0aXAgb2YgYW5vdGhlciBicmFuY2ggKGFuZCBtYWtlIHN1cmUKKyMgdGhhdCB0aGUgbGF0dGVyIHdhbGsgZG9lcyBub3QgbWVzcyB1cCBvdXIgZmxhZyB0byBzZWUgaWYgaXQgd2FzCisjIG1lcmdlZCkuCisjCisjIEhlcmUgInRvcGljIiB0cmFja3MgIm1hc3RlciIgd2l0aCBvbmUgZXh0cmEgY29tbWl0LCBhbmQgInp6eiIgcG9pbnRzIHRvIHRoZQorIyBzYW1lIHRpcCBhcyBtYXN0ZXIgVGhlIG5hbWUgInp6eiIgbXVzdCBjb21lIGFscGhhYmV0aWNhbGx5IGFmdGVyICJ0b3BpYyIKKyMgYXMgd2UgcHJvY2VzcyB0aGVtIGluIHRoYXQgb3JkZXIuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLS1tZXJnZWQgd2l0aCAtLXZlcmJvc2UnICcKKwlnaXQgYnJhbmNoIC0tdHJhY2sgdG9waWMgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCB6enogdG9waWMgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwl0ZXN0X2NvbW1pdCBmb28gJiYKKwlnaXQgYnJhbmNoIC0tbWVyZ2VkIHRvcGljID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJICBtYXN0ZXIKKwkqIHRvcGljCisJICB6enoKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGJyYW5jaCAtLXZlcmJvc2UgLS1tZXJnZWQgdG9waWMgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgIG1hc3RlciBjNzdhMGE5IHNlY29uZCBvbiBtYXN0ZXIKKwkqIHRvcGljICAyYzkzOWY0IFthaGVhZCAxXSBmb28KKwkgIHp6eiAgICBjNzdhMGE5IHNlY29uZCBvbiBtYXN0ZXIKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzIwMi1zaG93LWJyYW5jaC1vY3RvcHVzLnNoIGIvdC90MzIwMi1zaG93LWJyYW5jaC1vY3RvcHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhZGY0NzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjAyLXNob3ctYnJhbmNoLW9jdG9wdXMuc2gKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgc2hvdy1icmFuY2ggd2l0aCBtb3JlIHRoYW4gOCBoZWFkcycKKworLiAuL3Rlc3QtbGliLnNoCisKK251bWJlcnM9IjEgMiAzIDQgNSA2IDcgOCA5IDEwIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlmb3IgaSBpbiAkbnVtYmVycworCWRvCisJCWdpdCBjaGVja291dCAtYiBicmFuY2gkaSBtYXN0ZXIgJiYKKwkJPiBmaWxlJGkgJiYKKwkJZ2l0IGFkZCBmaWxlJGkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gYnJhbmNoJGkgfHwgcmV0dXJuIDEKKwlkb25lCisKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorISBbYnJhbmNoMV0gYnJhbmNoMQorICEgW2JyYW5jaDJdIGJyYW5jaDIKKyAgISBbYnJhbmNoM10gYnJhbmNoMworICAgISBbYnJhbmNoNF0gYnJhbmNoNAorICAgICEgW2JyYW5jaDVdIGJyYW5jaDUKKyAgICAgISBbYnJhbmNoNl0gYnJhbmNoNgorICAgICAgISBbYnJhbmNoN10gYnJhbmNoNworICAgICAgICEgW2JyYW5jaDhdIGJyYW5jaDgKKyAgICAgICAgISBbYnJhbmNoOV0gYnJhbmNoOQorICAgICAgICAgKiBbYnJhbmNoMTBdIGJyYW5jaDEwCistLS0tLS0tLS0tCisgICAgICAgICAqIFticmFuY2gxMF0gYnJhbmNoMTAKKyAgICAgICAgKyAgW2JyYW5jaDldIGJyYW5jaDkKKyAgICAgICArICAgW2JyYW5jaDhdIGJyYW5jaDgKKyAgICAgICsgICAgW2JyYW5jaDddIGJyYW5jaDcKKyAgICAgKyAgICAgW2JyYW5jaDZdIGJyYW5jaDYKKyAgICArICAgICAgW2JyYW5jaDVdIGJyYW5jaDUKKyAgICsgICAgICAgW2JyYW5jaDRdIGJyYW5jaDQKKyAgKyAgICAgICAgW2JyYW5jaDNdIGJyYW5jaDMKKyArICAgICAgICAgW2JyYW5jaDJdIGJyYW5jaDIKKysgICAgICAgICAgW2JyYW5jaDFdIGJyYW5jaDEKKysrKysrKysrKyogW2JyYW5jaDEwXl0gaW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3ctYnJhbmNoIHdpdGggbW9yZSB0aGFuIDggYnJhbmNoZXMnICcKKworCWdpdCBzaG93LWJyYW5jaCAkKGZvciBpIGluICRudW1iZXJzOyBkbyBlY2hvIGJyYW5jaCRpOyBkb25lKSA+IG91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93LWJyYW5jaCB3aXRoIHNob3dicmFuY2guZGVmYXVsdCcgJworCWZvciBpIGluICRudW1iZXJzOyBkbworCQlnaXQgY29uZmlnIC0tYWRkIHNob3dicmFuY2guZGVmYXVsdCBicmFuY2gkaQorCWRvbmUgJiYKKwlnaXQgc2hvdy1icmFuY2ggPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjAzLWJyYW5jaC1vdXRwdXQuc2ggYi90L3QzMjAzLWJyYW5jaC1vdXRwdXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTQ1NDQyMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMyMDMtYnJhbmNoLW91dHB1dC5zaApAQCAtMCwwICsxLDE3OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBicmFuY2ggZGlzcGxheSB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGNvbW1pdHMnICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCBicmFuY2gtb25lICYmCisJZ2l0IGJyYW5jaCBicmFuY2gtdHdvIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgcmVtb3RlIGJyYW5jaGVzJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gtb25lIGJyYW5jaC1vbmUgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaC10d28gYnJhbmNoLXR3byAmJgorCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEIHJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoLW9uZQorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgIGJyYW5jaC1vbmUKKyAgYnJhbmNoLXR3bworKiBtYXN0ZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBzaG93cyBsb2NhbCBicmFuY2hlcycgJworCWdpdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLWxpc3Qgc2hvd3MgbG9jYWwgYnJhbmNoZXMnICcKKwlnaXQgYnJhbmNoIC0tbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgIGJyYW5jaC1vbmUKKyAgYnJhbmNoLXR3bworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIC0tbGlzdCBwYXR0ZXJuIHNob3dzIG1hdGNoaW5nIGxvY2FsIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCAtLWxpc3QgYnJhbmNoKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9icmFuY2gtb25lCisgIG9yaWdpbi9icmFuY2gtb25lCisgIG9yaWdpbi9icmFuY2gtdHdvCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXIgc2hvd3MgcmVtb3RlIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCAtciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgIGJyYW5jaC1vbmUKKyAgYnJhbmNoLXR3bworKiBtYXN0ZXIKKyAgcmVtb3Rlcy9vcmlnaW4vSEVBRCAtPiBvcmlnaW4vYnJhbmNoLW9uZQorICByZW1vdGVzL29yaWdpbi9icmFuY2gtb25lCisgIHJlbW90ZXMvb3JpZ2luL2JyYW5jaC10d28KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtYSBzaG93cyBsb2NhbCBhbmQgcmVtb3RlIGJyYW5jaGVzJyAnCisJZ2l0IGJyYW5jaCAtYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCit0d28KK29uZQordHdvCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXYgc2hvd3MgYnJhbmNoIHN1bW1hcmllcycgJworCWdpdCBicmFuY2ggLXYgPnRtcCAmJgorCWF3ayAie3ByaW50IFwkTkZ9IiA8dG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK3R3bworb25lCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLS1saXN0IC12IHBhdHRlcm4gc2hvd3MgYnJhbmNoIHN1bW1hcmllcycgJworCWdpdCBicmFuY2ggLS1saXN0IC12IGJyYW5jaCogPnRtcCAmJgorCWF3ayAie3ByaW50IFwkTkZ9IiA8dG1wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggLXYgcGF0dGVybiBkb2VzIG5vdCBzaG93IGJyYW5jaCBzdW1tYXJpZXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC12IGJyYW5jaCoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCBzaG93cyBkZXRhY2hlZCBIRUFEIHByb3Blcmx5JyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKKyogKEhFQUQgZGV0YWNoZWQgYXQgJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4wKSkKKyAgYnJhbmNoLW9uZQorICBicmFuY2gtdHdvCisgIG1hc3RlcgorRU9GCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCWdpdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggc2hvd3MgZGV0YWNoZWQgSEVBRCBwcm9wZXJseSBhZnRlciBjaGVja291dCAtLWRldGFjaCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorKiAoSEVBRCBkZXRhY2hlZCBhdCAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXjApKQorICBicmFuY2gtb25lCisgIGJyYW5jaC10d28KKyAgbWFzdGVyCitFT0YKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJiYKKwlnaXQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGRldGFjaGVkIEhFQUQgcHJvcGVybHkgYWZ0ZXIgbW92aW5nJyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKKyogKEhFQUQgZGV0YWNoZWQgZnJvbSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSkKKyAgYnJhbmNoLW9uZQorICBicmFuY2gtdHdvCisgIG1hc3RlcgorRU9GCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXjEgJiYKKwlnaXQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGRldGFjaGVkIEhFQUQgcHJvcGVybHkgZnJvbSB0YWcnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorKiAoSEVBRCBkZXRhY2hlZCBhdCBmcm9tdGFnKQorICBicmFuY2gtb25lCisgIGJyYW5jaC10d28KKyAgbWFzdGVyCitFT0YKKwlnaXQgdGFnIGZyb210YWcgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IGZyb210YWcgJiYKKwlnaXQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYnJhbmNoIHNob3dzIGRldGFjaGVkIEhFQUQgcHJvcGVybHkgYWZ0ZXIgbW92aW5nIGZyb20gdGFnJyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKKyogKEhFQUQgZGV0YWNoZWQgZnJvbSBmcm9tdGFnKQorICBicmFuY2gtb25lCisgIGJyYW5jaC10d28KKyAgbWFzdGVyCitFT0YKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReMSAmJgorCWdpdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggYC0tc29ydGAgb3B0aW9uJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSAgYnJhbmNoLXR3bworCSogKEhFQUQgZGV0YWNoZWQgZnJvbSBmcm9tdGFnKQorCSAgYnJhbmNoLW9uZQorCSAgbWFzdGVyCisJRU9GCisJZ2l0IGJyYW5jaCAtLXNvcnQ9b2JqZWN0c2l6ZSA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGJyYW5jaCAtLXBvaW50cy1hdCBvcHRpb24nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJICBicmFuY2gtb25lCisJICBtYXN0ZXIKKwlFT0YKKwlnaXQgYnJhbmNoIC0tcG9pbnRzLWF0PWJyYW5jaC1vbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMjEwLXBhY2stcmVmcy5zaCBiL3QvdDMyMTAtcGFjay1yZWZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRiMjQ0ZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjEwLXBhY2stcmVmcy5zaApAQCAtMCwwICsxLDIxNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBBbW9zIFdhdGVybGFuZAorIyBDb3B5cmlnaHQgKGMpIDIwMDYgQ2hyaXN0aWFuIENvdWRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcGFjay1yZWZzIHNob3VsZCBub3QgY2hhbmdlIHRoZSBicmFuY2ggc2VtYW50aWMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IHBhY2stcmVmcyBhbmQgZ2l0IHNob3ctcmVmIGFuZCBjaGVja3MgdGhhdCB0aGUgYnJhbmNoCitzZW1hbnRpYyBpcyBzdGlsbCB0aGUgc2FtZS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmFibGUgcmVmbG9ncycgJworCWdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgYSB0cml2aWFsIHJlcG9zaXRvcnknIFwKKyAgICAnZWNobyBIZWxsbyA+IEEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBICYmCisgICAgIGdpdCBjb21taXQgLW0gIkluaXRpYWwgY29tbWl0LiIgJiYKKyAgICAgSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCknCisKK1NIQTE9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZWUgaWYgZ2l0IHNob3ctcmVmIHdvcmtzIGFzIGV4cGVjdGVkJyBcCisgICAgJ2dpdCBicmFuY2ggYSAmJgorICAgICBTSEExPWBjYXQgLmdpdC9yZWZzL2hlYWRzL2FgICYmCisgICAgIGVjaG8gIiRTSEExIHJlZnMvaGVhZHMvYSIgPmV4cGVjdCAmJgorICAgICBnaXQgc2hvdy1yZWYgYSA+cmVzdWx0ICYmCisgICAgIHRlc3RfY21wIGV4cGVjdCByZXN1bHQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZWUgaWYgYSBicmFuY2ggc3RpbGwgZXhpc3RzIHdoZW4gcGFja2VkJyBcCisgICAgJ2dpdCBicmFuY2ggYiAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsICYmCisgICAgIHJtIC1mIC5naXQvcmVmcy9oZWFkcy9iICYmCisgICAgIGVjaG8gIiRTSEExIHJlZnMvaGVhZHMvYiIgPmV4cGVjdCAmJgorICAgICBnaXQgc2hvdy1yZWYgYiA+cmVzdWx0ICYmCisgICAgIHRlc3RfY21wIGV4cGVjdCByZXN1bHQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggYy9kIHNob3VsZCBiYXJmIGlmIGJyYW5jaCBjIGV4aXN0cycgJworICAgICBnaXQgYnJhbmNoIGMgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorICAgICBybSAtZiAuZ2l0L3JlZnMvaGVhZHMvYyAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIGMvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2VlIGlmIGEgYnJhbmNoIHN0aWxsIGV4aXN0cyBhZnRlciBnaXQgcGFjay1yZWZzIC0tcHJ1bmUnIFwKKyAgICAnZ2l0IGJyYW5jaCBlICYmCisgICAgIGdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorICAgICBlY2hvICIkU0hBMSByZWZzL2hlYWRzL2UiID5leHBlY3QgJiYKKyAgICAgZ2l0IHNob3ctcmVmIGUgPnJlc3VsdCAmJgorICAgICB0ZXN0X2NtcCBleHBlY3QgcmVzdWx0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWUgaWYgZ2l0IHBhY2stcmVmcyAtLXBydW5lIHJlbW92ZSByZWYgZmlsZXMnICcKKyAgICAgZ2l0IGJyYW5jaCBmICYmCisgICAgIGdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorICAgICAhIHRlc3QgLWYgLmdpdC9yZWZzL2hlYWRzL2YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2VlIGlmIGdpdCBwYWNrLXJlZnMgLS1wcnVuZSByZW1vdmVzIGVtcHR5IGRpcnMnICcKKyAgICAgZ2l0IGJyYW5jaCByL3MvdCAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgISB0ZXN0IC1lIC5naXQvcmVmcy9oZWFkcy9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYnJhbmNoIGcgc2hvdWxkIHdvcmsgd2hlbiBnaXQgYnJhbmNoIGcvaCBoYXMgYmVlbiBkZWxldGVkJyBcCisgICAgJ2dpdCBicmFuY2ggZy9oICYmCisgICAgIGdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorICAgICBnaXQgYnJhbmNoIC1kIGcvaCAmJgorICAgICBnaXQgYnJhbmNoIGcgJiYKKyAgICAgZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorICAgICBnaXQgYnJhbmNoIC1kIGcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBicmFuY2ggaS9qL2sgc2hvdWxkIGJhcmYgaWYgYnJhbmNoIGkgZXhpc3RzJyAnCisgICAgIGdpdCBicmFuY2ggaSAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCBpL2ovaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndGVzdCBnaXQgYnJhbmNoIGsgYWZ0ZXIgYnJhbmNoIGsvbC9tIGFuZCBrL2xtIGhhdmUgYmVlbiBkZWxldGVkJyBcCisgICAgJ2dpdCBicmFuY2ggay9sICYmCisgICAgIGdpdCBicmFuY2ggay9sbSAmJgorICAgICBnaXQgYnJhbmNoIC1kIGsvbCAmJgorICAgICBnaXQgYnJhbmNoIGsvbC9tICYmCisgICAgIGdpdCBicmFuY2ggLWQgay9sL20gJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBrL2xtICYmCisgICAgIGdpdCBicmFuY2ggaycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3Rlc3QgZ2l0IGJyYW5jaCBuIGFmdGVyIHNvbWUgYnJhbmNoIGRlbGV0aW9uIGFuZCBwcnVuaW5nJyBcCisgICAgJ2dpdCBicmFuY2ggbi9vICYmCisgICAgIGdpdCBicmFuY2ggbi9vcCAmJgorICAgICBnaXQgYnJhbmNoIC1kIG4vbyAmJgorICAgICBnaXQgYnJhbmNoIG4vby9wICYmCisgICAgIGdpdCBicmFuY2ggLWQgbi9vcCAmJgorICAgICBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKyAgICAgZ2l0IGJyYW5jaCAtZCBuL28vcCAmJgorICAgICBnaXQgYnJhbmNoIG4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdzZWUgaWYgdXAtdG8tZGF0ZSBwYWNrZWQgcmVmcyBhcmUgcHJlc2VydmVkJyBcCisJJ2dpdCBicmFuY2ggcSAmJgorCSBnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwkgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9xIHJlZnMvaGVhZHMvcSAmJgorCSAhIHRlc3QgLWYgLmdpdC9yZWZzL2hlYWRzL3EnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2ssIHBydW5lIGFuZCByZXBhY2snICcKKwlnaXQgdGFnIGZvbyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorCWdpdCBzaG93LXJlZiA+YWxsLW9mLXRoZW0gJiYKKwlnaXQgcGFjay1yZWZzICYmCisJZ2l0IHNob3ctcmVmID5hZ2FpbiAmJgorCXRlc3RfY21wIGFsbC1vZi10aGVtIGFnYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGxpY2l0IHBhY2stcmVmcyB3aXRoIGRhbmdsaW5nIHBhY2tlZCByZWZlcmVuY2UnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gInNvb24gdG8gYmUgZ2FyYmFnZS1jb2xsZWN0ZWQiICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1hbGwgLS1hbGwgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmU9YWxsICYmCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAyPnJlc3VsdCAmJgorCXRlc3RfY21wIC9kZXYvbnVsbCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlIHJlZiB3aXRoIGRhbmdsaW5nIHBhY2tlZCB2ZXJzaW9uJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGxhbWIgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImZ1dHVyZSBnYXJiYWdlIiAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPWFsbCAtLWFsbCAmJgorCWdpdCBwcnVuZSAtLWV4cGlyZT1hbGwgJiYKKwlnaXQgYnJhbmNoIC1kIGxhbWIgMj5yZXN1bHQgJiYKKwl0ZXN0X2NtcCAvZGV2L251bGwgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0ZSByZWYgd2hpbGUgYW5vdGhlciBkYW5nbGluZyBwYWNrZWQgcmVmJyAnCisJZ2l0IGJyYW5jaCBsYW1iICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJmdXR1cmUgZ2FyYmFnZSIgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPWFsbCAtLWFsbCAmJgorCWdpdCBwcnVuZSAtLWV4cGlyZT1hbGwgJiYKKwlnaXQgYnJhbmNoIC1kIGxhbWIgMj5yZXN1bHQgJiYKKwl0ZXN0X2NtcCAvZGV2L251bGwgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgcmVmIGRpcmVjdGx5IGJlbG93IHJlZnMvJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy90b3AgSEVBRCAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorCWdyZXAgcmVmcy90b3AgLmdpdC9wYWNrZWQtcmVmcyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy90b3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IHBhY2sgcmVmIGluIHJlZnMvYmlzZWN0JyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9iaXNlY3QvbG9jYWwgSEVBRCAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorCSEgZ3JlcCByZWZzL2Jpc2VjdC9sb2NhbCAuZ2l0L3BhY2tlZC1yZWZzID4vZGV2L251bGwgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3JlZnMvYmlzZWN0L2xvY2FsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FibGUgcmVmbG9ncycgJworCWdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIGZhbHNlICYmCisJcm0gLXJmIC5naXQvbG9ncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGFja2VkIGZvby9iYXIvYmF6IGJyYW5jaCcgJworCWdpdCBicmFuY2ggZm9vL2Jhci9iYXogJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlZnMvaGVhZHMvZm9vL2Jhci9iYXogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVmbG9nIGV4aXN0cyByZWZzL2hlYWRzL2Zvby9iYXIvYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGljZSBkL2YgY29uZmxpY3Qgd2l0aCBleGlzdGluZyBkaXJlY3RvcnknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggZm9vL2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGluZyBkaXJlY3RvcnkgcmVwb3J0cyBjb25jcmV0ZSByZWYnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIGZvbyAyPnN0ZGVyciAmJgorCWdyZXAgcmVmcy9oZWFkcy9mb28vYmFyL2JheiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90aWNlIGQvZiBjb25mbGljdCB3aXRoIGV4aXN0aW5nIHJlZicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggZm9vL2Jhci9iYXovZXh0cmEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIGZvby9iYXIvYmF6L2xvdHMvb2YvZXh0cmEvY29tcG9uZW50cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aW1lb3V0IGlmIHBhY2tlZC1yZWZzLmxvY2sgZXhpc3RzJyAnCisJTE9DSz0uZ2l0L3BhY2tlZC1yZWZzLmxvY2sgJiYKKwk+IiRMT0NLIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgJExPQ0siICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHBhY2stcmVmcyAtLWFsbCAtLXBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldHJ5IGFjcXVpcmluZyBwYWNrZWQtcmVmcy5sb2NrJyAnCisJTE9DSz0uZ2l0L3BhY2tlZC1yZWZzLmxvY2sgJiYKKwk+IiRMT0NLIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAid2FpdDsgcm0gLWYgJExPQ0siICYmCisJeworCQkoIHNsZWVwIDEgOyBybSAtZiAkTE9DSyApICYKKwl9ICYmCisJZ2l0IC1jIGNvcmUucGFja2VkcmVmc3RpbWVvdXQ9MzAwMCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMyMTEtcGVlbC1yZWYuc2ggYi90L3QzMjExLXBlZWwtcmVmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiN2NhY2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMjExLXBlZWwtcmVmLnNoCkBAIC0wLDAgKzEsNzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0cyBmb3IgdGhlIHBlZWxfcmVmIG9wdGltaXphdGlvbiBvZiBwYWNrZWQtcmVmcycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYW5ub3RhdGVkIHRhZyBpbiByZWZzL3RhZ3MnICcKKwl0ZXN0X2NvbW1pdCBiYXNlICYmCisJZ2l0IHRhZyAtbSBhbm5vdGF0ZWQgZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBhbm5vdGF0ZWQgdGFnIG91dHNpZGUgb2YgcmVmcy90YWdzJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9vdXRzaWRlL2ZvbyByZWZzL3RhZ3MvZm9vCisnCisKKyMgVGhpcyBtYXRjaGVzIHNob3ctcmVmJ3Mgb3V0cHV0CitwcmludF9yZWYoKSB7CisJZWNobyAiJChnaXQgcmV2LXBhcnNlICIkMSIpICQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgZXhwZWN0ZWQgc2hvdy1yZWYgb3V0cHV0JyAnCisJeworCQlwcmludF9yZWYgInJlZnMvaGVhZHMvbWFzdGVyIiAmJgorCQlwcmludF9yZWYgInJlZnMvb3V0c2lkZS9mb28iICYmCisJCXByaW50X3JlZiAicmVmcy9vdXRzaWRlL2Zvb157fSIgJiYKKwkJcHJpbnRfcmVmICJyZWZzL3RhZ3MvYmFzZSIgJiYKKwkJcHJpbnRfcmVmICJyZWZzL3RhZ3MvZm9vIiAmJgorCQlwcmludF9yZWYgInJlZnMvdGFncy9mb29ee30iCisJfSA+ZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnMgYXJlIHBlZWxlZCBvdXRzaWRlIG9mIHJlZnMvdGFncyAobG9vc2UpJyAnCisJZ2l0IHNob3ctcmVmIC1kID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnMgYXJlIHBlZWxlZCBvdXRzaWRlIG9mIHJlZnMvdGFncyAocGFja2VkKScgJworCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwlnaXQgc2hvdy1yZWYgLWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG9sZC1zdHlsZSBwYWNrLXJlZnMgd2l0aG91dCBmdWxseS1wZWVsZWQnICcKKwkjIEdpdCBubyBsb25nZXIgd3JpdGVzIHdpdGhvdXQgZnVsbHktcGVlbGVkLCBzbyB3ZSBqdXN0IHdyaXRlIG91ciBvd24KKwkjIGZyb20gc2NyYXRjaDsgd2UgY291bGQgYWxzbyBtdW5nZSB0aGUgZXhpc3RpbmcgZmlsZSB0byByZW1vdmUgdGhlCisJIyBmdWxseS1wZWVsZWQgYml0cywgYnV0IHRoYXQgc2VlbXMgZXZlbiBtb3JlIHByb25lIHRvIGZhaWx1cmUsCisJIyBlc3BlY2lhbGx5IGlmIHRoZSBmb3JtYXQgZXZlciBjaGFuZ2VzIGFnYWluLiBBdCBsZWFzdCB0aGlzIHdheSB3ZQorCSMga25vdyB3ZSBhcmUgZW11bGF0aW5nIGV4YWN0bHkgd2hhdCBhbiBvbGRlciBnaXQgd291bGQgaGF2ZSB3cml0dGVuLgorCXsKKwkJZWNobyAiIyBwYWNrLXJlZnMgd2l0aDogcGVlbGVkICIgJiYKKwkJcHJpbnRfcmVmICJyZWZzL2hlYWRzL21hc3RlciIgJiYKKwkJcHJpbnRfcmVmICJyZWZzL291dHNpZGUvZm9vIiAmJgorCQlwcmludF9yZWYgInJlZnMvdGFncy9iYXNlIiAmJgorCQlwcmludF9yZWYgInJlZnMvdGFncy9mb28iICYmCisJCWVjaG8gIl4kKGdpdCByZXYtcGFyc2UgInJlZnMvdGFncy9mb29ee30iKSIKKwl9ID50bXAgJiYKKwltdiB0bXAgLmdpdC9wYWNrZWQtcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzIGFyZSBwZWVsZWQgb3V0c2lkZSBvZiByZWZzL3RhZ3MgKG9sZCBwYWNrZWQpJyAnCisJZ2l0IHNob3ctcmVmIC1kID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BlZWxlZCByZWZzIHN1cnZpdmUgZGVsZXRpb24gb2YgcGFja2VkIHJlZicgJworCWdpdCBwYWNrLXJlZnMgLS1hbGwgJiYKKwljcCAuZ2l0L3BhY2tlZC1yZWZzIGZ1bGx5LXBlZWxlZCAmJgorCWdpdCBicmFuY2ggeWFkZGEgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJZ2l0IGJyYW5jaCAtZCB5YWRkYSAmJgorCXRlc3RfY21wIGZ1bGx5LXBlZWxlZCAuZ2l0L3BhY2tlZC1yZWZzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwMC1mdW5ueS1uYW1lcy5zaCBiL3QvdDMzMDAtZnVubnktbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWExNDZmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDAtZnVubnktbmFtZXMuc2gKQEAgLTAsMCArMSwyMTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nUGF0aG5hbWVzIHdpdGggZnVubnkgY2hhcmFjdGVycy4KKworVGhpcyB0ZXN0IHRyaWVzIHBhdGhuYW1lcyB3aXRoIGZ1bm55IGNoYXJhY3RlcnMgaW4gdGhlIHdvcmtpbmcKK3RyZWUsIGluZGV4LCBhbmQgdHJlZSBvYmplY3RzLgorJworCisuIC4vdGVzdC1saWIuc2gKKworSFQ9JwknCisKK2VjaG8gMj4vZGV2L251bGwgPiAiTmFtZSB3aXRoIGFuJHtIVH1IVCIKK2lmICEgdGVzdCAtZiAiTmFtZSB3aXRoIGFuJHtIVH1IVCIKK3RoZW4KKwkjIHNpbmNlIEZBVC9OVEZTIGRvZXMgbm90IGFsbG93IHRhYnMgaW4gZmlsZW5hbWVzLCBza2lwIHRoaXMgdGVzdAorCXNraXBfYWxsPSdZb3VyIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWxsb3cgdGFicyBpbiBmaWxlbmFtZXMnCisJdGVzdF9kb25lCitmaQorCitwMD0nbm8tZnVubnknCitwMT0ndGFicwksIiAoZHEpIGFuZCBzcGFjZXMnCitwMj0nanVzdCBzcGFjZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPiIkcDAiIDw8LVxFT0YgJiYKKwkxLiBBIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGNhdCwgb29wcyBkb2cuCisJMi4gQSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBjYXQsIG9vcHMgZG9nLgorCTMuIEEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgY2F0LCBvb3BzIGRvZy4KKwlFT0YKKworCXsgY2F0ICIkcDAiID4iJHAxIiB8fCA6OyB9ICYmCisJeyBlY2hvICJGb28gQmFyIEJheiIgPiIkcDIiIHx8IDo7IH0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHBvcHVsYXRlIGluZGV4IGFuZCB0cmVlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAiJHAwIiAiJHAyIiAmJgorCXQwPSQoZ2l0IHdyaXRlLXRyZWUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIHByaW50cyBzcGFjZSBpbiBmaWxlbmFtZSB2ZXJiYXRpbScgJworCXByaW50ZiAiJXNcbiIgImp1c3Qgc3BhY2UiIG5vLWZ1bm55ID5leHBlY3RlZCAmJgorCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGFkZCBmdW5ueSBmaWxlbmFtZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgIiRwMSIgJiYKKwl0MT0kKGdpdCB3cml0ZS10cmVlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlqdXN0IHNwYWNlCisJbm8tZnVubnkKKwkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLWZpbGVzIC16IGRvZXMgbm90IHF1b3RlIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJanVzdCBzcGFjZQorCW5vLWZ1bm55CisJdGFicwksIiAoZHEpIGFuZCBzcGFjZXMKKwlFT0YKKwlnaXQgbHMtZmlsZXMgLXogPmxzLWZpbGVzLnogJiYKKwlwZXJsIC1wZSAieS9cMDAwL1wwMTIvIiA8bHMtZmlsZXMueiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtdHJlZSBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlqdXN0IHNwYWNlCisJbm8tZnVubnkKKwkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgbHMtdHJlZSAtciAkdDEgPmxzLXRyZWUgJiYKKwlzZWQgLWUgInMvXlteCV0qCS8vIiA8bHMtdHJlZSA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAtLW5hbWUtc3RhdHVzIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCUEJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLS1uYW1lLXN0YXR1cyAkdDAgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSAtLW5hbWUtc3RhdHVzIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCUEJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtdHJlZSAtLW5hbWUtc3RhdHVzICR0MCAkdDEgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggLXogZG9lcyBub3QgcXVvdGUgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlBCisJdGFicwksIiAoZHEpIGFuZCBzcGFjZXMKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAteiAtLW5hbWUtc3RhdHVzICR0MCA+ZGlmZi1pbmRleC56ICYmCisJcGVybCAtcGUgInkvXDAwMC9cMDEyLyIgPGRpZmYtaW5kZXgueiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC16IGRvZXMgbm90IHF1b3RlIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJQQorCXRhYnMJLCIgKGRxKSBhbmQgc3BhY2VzCisJRU9GCisJZ2l0IGRpZmYtdHJlZSAteiAtLW5hbWUtc3RhdHVzICR0MCAkdDEgPmRpZmYtdHJlZS56ICYmCisJcGVybCAtcGUgeS9cXDAwMC9cXDAxMi8gPGRpZmYtdHJlZS56ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJQ05VTQluby1mdW5ueQkidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwlFT0YKKwlnaXQgZGlmZi10cmVlIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tbmFtZS1zdGF0dXMgJHQwICR0MSA+b3V0ICYmCisJc2VkIC1lICJzL15DWzAtOV0qL0NOVU0vIiA8b3V0ID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogcmVtb3ZlIHVuZnVubnkgaW5kZXggZW50cnknICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlICIkcDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSAtTSBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlSTlVNCW5vLWZ1bm55CSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1NIC0tbmFtZS1zdGF0dXMgJHQwID5vdXQgJiYKKwlzZWQgLWUgInMvXlJbMC05XSovUk5VTS8iIDxvdXQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggLU0gLXAgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL25vLWZ1bm55ICJiL3RhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJc2ltaWxhcml0eSBpbmRleCBOVU0lCisJcmVuYW1lIGZyb20gbm8tZnVubnkKKwlyZW5hbWUgdG8gInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHQwID5kaWZmICYmCisJc2VkIC1lICJzL2luZGV4IFswLTldKiUvaW5kZXggTlVNJS8iIDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogbW9kZSBjaGFuZ2UnICcKKwljaG1vZCAreCAiJHAxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IC1NIC1wIHdpdGggbW9kZSBjaGFuZ2UgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL25vLWZ1bm55ICJiL3RhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJb2xkIG1vZGUgMTAwNjQ0CisJbmV3IG1vZGUgMTAwNzU1CisJc2ltaWxhcml0eSBpbmRleCBOVU0lCisJcmVuYW1lIGZyb20gbm8tZnVubnkKKwlyZW5hbWUgdG8gInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHQwID5kaWZmICYmCisJc2VkIC1lICJzL2luZGV4IFswLTldKiUvaW5kZXggTlVNJS8iIDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmc3RhdCBmb3IgcmVuYW1lIHF1b3RlcyBmdW5ueSBmaWxlbmFtZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCSAidGFic1x0LFwiIChkcSkgYW5kIHNwYWNlcyIKKwkgMSBmaWxlIGNoYW5nZWQsIDAgaW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtTSAtcCAkdDAgPmRpZmYgJiYKKwlnaXQgYXBwbHkgLS1zdGF0IDxkaWZmID5kaWZmc3RhdCAmJgorCXNlZCAtZSAicy98LiovLyIgLWUgInMvICpcJC8vIiA8ZGlmZnN0YXQgPmN1cnJlbnQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdudW1zdGF0IGZvciByZW5hbWUgcXVvdGVzIGZ1bm55IGZpbGVuYW1lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJMAkwCSJ0YWJzXHQsXCIgKGRxKSBhbmQgc3BhY2VzIgorCUVPRgorCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0MCA+ZGlmZiAmJgorCWdpdCBhcHBseSAtLW51bXN0YXQgPGRpZmYgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ251bXN0YXQgd2l0aG91dCAtTSBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkwCTMJbm8tZnVubnkKKwkzCTAJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLXAgJHQwID5kaWZmICYmCisJZ2l0IGFwcGx5IC0tbnVtc3RhdCA8ZGlmZiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbnVtc3RhdCBmb3Igbm9uLWdpdCByZW5hbWUgZGlmZiBxdW90ZXMgZnVubnkgZmlsZW5hbWUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkwCTMJbm8tZnVubnkKKwkzCTAJInRhYnNcdCxcIiAoZHEpIGFuZCBzcGFjZXMiCisJRU9GCisJZ2l0IGRpZmYtaW5kZXggLXAgJHQwID5naXQtZGlmZiAmJgorCXNlZCAtbmUgIi9eWy0rQF0vcCIgPGdpdC1kaWZmID5kaWZmICYmCisJZ2l0IGFwcGx5IC0tbnVtc3RhdCA8ZGlmZiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzAxLW5vdGVzLnNoIGIvdC90MzMwMS1ub3Rlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZDcwMjc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwMS1ub3Rlcy5zaApAQCAtMCwwICsxLDExOTcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNvbW1pdCBub3RlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3dyaXRlX3NjcmlwdCBmYWtlX2VkaXRvciA8PFxFT0YKK2VjaG8gIiRNU0ciID4iJDEiCitlY2hvICIkTVNHIiA+JjIKK0VPRgorR0lUX0VESVRPUj0uL2Zha2VfZWRpdG9yCitleHBvcnQgR0lUX0VESVRPUgorCitpbmRlbnQ9IiAgICAiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbm5vdCBhbm5vdGF0ZSBub24tZXhpc3RpbmcgSEVBRCcgJworCXRlc3RfbXVzdF9mYWlsIGVudiBNU0c9MyBnaXQgbm90ZXMgYWRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgMXN0ICYmCisJdGVzdF9jb21taXQgMm5kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lZWQgdmFsaWQgbm90ZXMgcmVmJyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IE1TRz0xIEdJVF9OT1RFU19SRUY9LyBnaXQgbm90ZXMgc2hvdyAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBNU0c9MiBHSVRfTk9URVNfUkVGPS8gZ2l0IG5vdGVzIHNob3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNpbmcgdG8gYWRkIG5vdGVzIGluIHJlZnMvaGVhZHMvJyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IE1TRz0xIEdJVF9OT1RFU19SRUY9cmVmcy9oZWFkcy9ib2d1cyBnaXQgbm90ZXMgYWRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnVzaW5nIHRvIGVkaXQgbm90ZXMgaW4gcmVmcy9yZW1vdGVzLycgJworCXRlc3RfbXVzdF9mYWlsIGVudiBNU0c9MSBHSVRfTk9URVNfUkVGPXJlZnMvaGVhZHMvYm9ndXMgZ2l0IG5vdGVzIGVkaXQKKycKKworIyAxIGluZGljYXRlcyBjYXVnaHQgZ3JhY2VmdWxseSBieSBkaWUsIDEyOCBtZWFucyBnaXQtc2hvdyBiYXJrZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2hhbmRsZSBlbXB0eSBub3RlcyBncmFjZWZ1bGx5JyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBub3RlcyBzaG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgbm9uLWV4aXN0ZW50IG5vdGVzIGVudHJ5IHdpdGggJU4nICcKKwl0ZXN0X3dyaXRlX2xpbmVzIEEgQiA+ZXhwZWN0ICYmCisJZ2l0IHNob3cgLXMgLS1mb3JtYXQ9IkElbiVOQiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGVzJyAnCisJTVNHPWI0IGdpdCBub3RlcyBhZGQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L05PVEVTX0VESVRNU0cgJiYKKwlnaXQgbHMtdHJlZSAtciByZWZzL25vdGVzL2NvbW1pdHMgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJdGVzdCAiYjQiID0gIiQoZ2l0IG5vdGVzIHNob3cpIiAmJgorCWdpdCBzaG93IEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBub3RlcyBlbnRyeSB3aXRoICVOJyAnCisJdGVzdF93cml0ZV9saW5lcyBBIGI0IEIgPmV4cGVjdCAmJgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSJBJW4lTkIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSByZWZsb2cgZW50cnknICcKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJYTFkOGZhNiByZWZzL25vdGVzL2NvbW1pdHNAezB9OiBub3RlczogTm90ZXMgYWRkZWQgYnkgJ1wnJ2dpdCBub3RlcyBhZGQnXCcnCisJRU9GCisJZ2l0IHJlZmxvZyBzaG93IHJlZnMvbm90ZXMvY29tbWl0cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IGV4aXN0aW5nIG5vdGVzJyAnCisJTVNHPWIzIGdpdCBub3RlcyBlZGl0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCisJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgorCXRlc3QgImIzIiA9ICIkKGdpdCBub3RlcyBzaG93KSIgJiYKKwlnaXQgc2hvdyBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nhbm5vdCAiZ2l0IG5vdGVzIGFkZCAtbSIgd2hlcmUgbm90ZXMgYWxyZWFkeSBleGlzdHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgYWRkIC1tICJiMiIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L05PVEVTX0VESVRNU0cgJiYKKwlnaXQgbHMtdHJlZSAtciByZWZzL25vdGVzL2NvbW1pdHMgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJdGVzdCAiYjMiID0gIiQoZ2l0IG5vdGVzIHNob3cpIiAmJgorCWdpdCBzaG93IEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuIG92ZXJ3cml0ZSBleGlzdGluZyBub3RlIHdpdGggImdpdCBub3RlcyBhZGQgLWYgLW0iJyAnCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAiYjEiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9OT1RFU19FRElUTVNHICYmCisJZ2l0IGxzLXRyZWUgLXIgcmVmcy9ub3Rlcy9jb21taXRzID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbCAmJgorCXRlc3QgImIxIiA9ICIkKGdpdCBub3RlcyBzaG93KSIgJiYKKwlnaXQgc2hvdyBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB3L25vIG9wdGlvbnMgb24gZXhpc3Rpbmcgbm90ZSBtb3JwaHMgaW50byBlZGl0JyAnCisJTVNHPWIyIGdpdCBub3RlcyBhZGQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L05PVEVTX0VESVRNU0cgJiYKKwlnaXQgbHMtdHJlZSAtciByZWZzL25vdGVzL2NvbW1pdHMgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJdGVzdCAiYjIiID0gIiQoZ2l0IG5vdGVzIHNob3cpIiAmJgorCWdpdCBzaG93IEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuIG92ZXJ3cml0ZSBleGlzdGluZyBub3RlIHdpdGggImdpdCBub3RlcyBhZGQgLWYiJyAnCisJTVNHPWIxIGdpdCBub3RlcyBhZGQgLWYgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L05PVEVTX0VESVRNU0cgJiYKKwlnaXQgbHMtdHJlZSAtciByZWZzL25vdGVzL2NvbW1pdHMgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsICYmCisJdGVzdCAiYjEiID0gIiQoZ2l0IG5vdGVzIHNob3cpIiAmJgorCWdpdCBzaG93IEhFQUReICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBub3RlcycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgN2E0Y2E2ZWU1MmE5NzRhNjZjYmFhNzhlMzMyMTQ1MzVkZmYxZDY5MQorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0ybmQKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9YjEKKwlFT0YKKwkhIChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIGIxKSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBtdWx0aS1saW5lIG5vdGVzJyAnCisJdGVzdF9jb21taXQgM3JkICYmCisJTVNHPSJiMyR7TEZ9YzNjM2MzYzMke0xGfWQzZDNkMyIgZ2l0IG5vdGVzIGFkZCAmJgorCWNhdCA+ZXhwZWN0LW11bHRpbGluZSA8PC1FT0YgJiYKKwkJY29tbWl0IGQwN2Q2MmU1MjA4ZjIyZWI1Njk1ZTdlYjQ3NjY3ZGM4Yjk4NjAyOTAKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxNToxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9M3JkCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fWIzCisJCSR7aW5kZW50fWMzYzNjM2MzCisJCSR7aW5kZW50fWQzZDNkMworCisJRU9GCisJY2F0IGV4cGVjdCA+PmV4cGVjdC1tdWx0aWxpbmUgJiYKKwlnaXQgbG9nIC0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtbXVsdGlsaW5lIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IC1GIG5vdGVzJyAnCisJdGVzdF9jb21taXQgNHRoICYmCisJZWNobyAieHl6enkiID5ub3RlNSAmJgorCWdpdCBub3RlcyBhZGQgLUYgbm90ZTUgJiYKKwljYXQgPmV4cGVjdC1GIDw8LUVPRiAmJgorCQljb21taXQgMGY3YWEzZWM2MzI1YWViODhiOTEwNDUzYmIzZWIzN2M0OWQ3NWMxMQorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE2OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH00dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9eHl6enkKKworCUVPRgorCWNhdCBleHBlY3QtbXVsdGlsaW5lID4+ZXhwZWN0LUYgJiYKKwlnaXQgbG9nIC0zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtRiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmUtYWRkaW5nIC1GIG5vdGVzIHdpdGhvdXQgLWYgZmFpbHMnICcKKwllY2hvICJ6eXh4eSIgPm5vdGU1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGFkZCAtRiBub3RlNSAmJgorCWdpdCBsb2cgLTMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1GIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tcHJldHR5PXJhdyBkb2VzIG5vdCBzaG93IG5vdGVzJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCAwZjdhYTNlYzYzMjVhZWI4OGI5MTA0NTNiYjNlYjM3YzQ5ZDc1YzExCisJCXRyZWUgMDVhYzY1Mjg4YzRjNGIzYjcwOWEwMjBhZTk0YjJlY2UyZjIyMDFhZQorCQlwYXJlbnQgZDA3ZDYyZTUyMDhmMjJlYjU2OTVlN2ViNDc2NjdkYzhiOTg2MDI5MAorCQlhdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTExMjkxMjE3MyAtMDcwMAorCQljb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTEyMTczIC0wNzAwCisKKwkJJHtpbmRlbnR9NHRoCisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLXNob3ctbm90ZXMnICcKKwljYXQgPj5leHBlY3QgPDwtRU9GICYmCisKKwlOb3RlczoKKwkke2luZGVudH14eXp6eQorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9cmF3IC0tc2hvdy1ub3RlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbm8tbm90ZXMnICcKKwlnaXQgbG9nIC0xIC0tbm8tbm90ZXMgPmFjdHVhbCAmJgorCSEgZ3JlcCB4eXp6eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZvcm1hdC1wYXRjaCBkb2VzIG5vdCBzaG93IG5vdGVzJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCA+YWN0dWFsICYmCisJISBncmVwIHh5enp5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZm9ybWF0LXBhdGNoIC0tc2hvdy1ub3RlcyBkb2VzIHNob3cgbm90ZXMnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc2hvdy1ub3RlcyAtMSAtLXN0ZG91dCA+YWN0dWFsICYmCisJZ3JlcCB4eXp6eSBhY3R1YWwKKycKKworZm9yIHByZXR0eSBpbiBcCisJIiIgLS1wcmV0dHkgLS1wcmV0dHk9cmF3IC0tcHJldHR5PXNob3J0IC0tcHJldHR5PW1lZGl1bSBcCisJLS1wcmV0dHk9ZnVsbCAtLXByZXR0eT1mdWxsZXIgLS1wcmV0dHk9Zm9ybWF0OiVzIC0tb25lbGluZQorZG8KKwljYXNlICIkcHJldHR5IiBpbgorCSIiKSBwPSBub3Q9IG5lZ2F0ZT0iIiA7OworCT8qKSBwPSIkcHJldHR5IiBub3Q9IiBub3QiIG5lZ2F0ZT0iISIgOzsKKwllc2FjCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0IHNob3cgJHByZXR0eSBkb2VzJG5vdCBzaG93IG5vdGVzIiAnCisJCWdpdCBzaG93ICRwID5hY3R1YWwgJiYKKwkJZXZhbCAiJG5lZ2F0ZSBncmVwIHh5enp5IGFjdHVhbCIKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGFsdGVybmF0ZSBub3RlcyByZWYnICcKKwlnaXQgbm90ZXMgLS1yZWY9YWx0ZXJuYXRlIGFkZCAtbSBhbHRlcm5hdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vdGVzIHNob3dzIGRlZmF1bHQgbm90ZXMnICcKKwlnaXQgbG9nIC0xIC0tbm90ZXMgPmFjdHVhbCAmJgorCWdyZXAgeHl6enkgYWN0dWFsICYmCisJISBncmVwIGFsdGVybmF0ZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vdGVzPVggc2hvd3Mgb25seSBYJyAnCisJZ2l0IGxvZyAtMSAtLW5vdGVzPWFsdGVybmF0ZSA+YWN0dWFsICYmCisJISBncmVwIHh5enp5IGFjdHVhbCAmJgorCWdyZXAgYWx0ZXJuYXRlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbm90ZXMgLS1ub3Rlcz1YIHNob3dzIGJvdGgnICcKKwlnaXQgbG9nIC0xIC0tbm90ZXMgLS1ub3Rlcz1hbHRlcm5hdGUgPmFjdHVhbCAmJgorCWdyZXAgeHl6enkgYWN0dWFsICYmCisJZ3JlcCBhbHRlcm5hdGUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby1ub3RlcyByZXNldHMgZGVmYXVsdCBzdGF0ZScgJworCWdpdCBsb2cgLTEgLS1ub3RlcyAtLW5vdGVzPWFsdGVybmF0ZSBcCisJCS0tbm8tbm90ZXMgLS1ub3Rlcz1hbHRlcm5hdGUgXAorCQk+YWN0dWFsICYmCisJISBncmVwIHh5enp5IGFjdHVhbCAmJgorCWdyZXAgYWx0ZXJuYXRlIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tbm8tbm90ZXMgcmVzZXRzIHJlZiBsaXN0JyAnCisJZ2l0IGxvZyAtMSAtLW5vdGVzIC0tbm90ZXM9YWx0ZXJuYXRlIFwKKwkJLS1uby1ub3RlcyAtLW5vdGVzIFwKKwkJPmFjdHVhbCAmJgorCWdyZXAgeHl6enkgYWN0dWFsICYmCisJISBncmVwIGFsdGVybmF0ZSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyAtbSBub3RlcycgJworCXRlc3RfY29tbWl0IDV0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gc3BhbSAtbSAiZm9vJHtMRn1iYXIke0xGfWJheiIgJiYKKwljYXQgPmV4cGVjdC1tIDw8LUVPRiAmJgorCQljb21taXQgN2Y5YWQ4ODM2Yzc3NWFjYjEzNGMwYTA1NWZjNTVmYjRjZDFiYTM2MQorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH01dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9c3BhbQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9Zm9vCisJCSR7aW5kZW50fWJhcgorCQkke2luZGVudH1iYXoKKworCUVPRgorCWNhdCBleHBlY3QtRiA+PmV4cGVjdC1tICYmCisJZ2l0IGxvZyAtNCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LW0gYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBub3RlIHdpdGggYWRkIC1mIC1GIC9kZXYvbnVsbCcgJworCWdpdCBub3RlcyBhZGQgLWYgLUYgL2Rldi9udWxsICYmCisJY2F0ID5leHBlY3Qtcm0tRiA8PC1FT0YgJiYKKwkJY29tbWl0IDdmOWFkODgzNmM3NzVhY2IxMzRjMGEwNTVmYzU1ZmI0Y2QxYmEzNjEKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NXRoCisKKwlFT0YKKwljYXQgZXhwZWN0LUYgPj5leHBlY3Qtcm0tRiAmJgorCWdpdCBsb2cgLTQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ybS1GIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBjcmVhdGUgZW1wdHkgbm90ZSB3aXRoIC1tICIiJyAnCisJZ2l0IG5vdGVzIGFkZCAtbSAiIiAmJgorCWdpdCBsb2cgLTQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ybS1GIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIHdpdGggY29tYmluYXRpb24gb2YgLW0gYW5kIC1GJyAnCisJY2F0ID5leHBlY3QtY29tYmluZV9tX2FuZF9GIDw8LUVPRiAmJgorCQlmb28KKworCQl4eXp6eQorCisJCWJhcgorCisJCXp5eHh5CisKKwkJYmF6CisJRU9GCisJZWNobyAieHl6enkiID5ub3RlX2EgJiYKKwllY2hvICJ6eXh4eSIgPm5vdGVfYiAmJgorCWdpdCBub3RlcyBhZGQgLW0gImZvbyIgLUYgbm90ZV9hIC1tICJiYXIiIC1GIG5vdGVfYiAtbSAiYmF6IiAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtY29tYmluZV9tX2FuZF9GIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgbm90ZSB3aXRoICJnaXQgbm90ZXMgcmVtb3ZlIicgJworCWdpdCBub3RlcyByZW1vdmUgSEVBRF4gJiYKKwlnaXQgbm90ZXMgcmVtb3ZlICYmCisJY2F0ID5leHBlY3Qtcm0tcmVtb3ZlIDw8LUVPRiAmJgorCQljb21taXQgN2Y5YWQ4ODM2Yzc3NWFjYjEzNGMwYTA1NWZjNTVmYjRjZDFiYTM2MQorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH01dGgKKworCQljb21taXQgMGY3YWEzZWM2MzI1YWViODhiOTEwNDUzYmIzZWIzN2M0OWQ3NWMxMQorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE2OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH00dGgKKworCUVPRgorCWNhdCBleHBlY3QtbXVsdGlsaW5lID4+ZXhwZWN0LXJtLXJlbW92ZSAmJgorCWdpdCBsb2cgLTQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ybS1yZW1vdmUgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3Zpbmcgbm9uLWV4aXN0aW5nIG5vdGUgc2hvdWxkIG5vdCBjcmVhdGUgbmV3IGNvbW1pdCcgJworCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzID5iZWZvcmVfY29tbWl0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHJlbW92ZSBIRUFEXiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzID5hZnRlcl9jb21taXQgJiYKKwl0ZXN0X2NtcCBiZWZvcmVfY29tbWl0IGFmdGVyX2NvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyBtb3JlIHRoYW4gb25lJyAnCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2NvbW1pdHMgJGJlZm9yZSIgJiYKKworCSMgV2UgaGF2ZSBvbmx5IHR3byAtLSBhZGQgYW5vdGhlciBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzCisJZ2l0IG5vdGVzIGFkZCAtbSAiZXh0cmEiICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWZ0ZXItcmVtb3ZhbC1leHBlY3QgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIEhFQUReXiBIRUFEXl5eICYmCisJZ2l0IG5vdGVzIGxpc3QgfCBzZWQgLWUgInMvIC4qLy8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhZnRlci1yZW1vdmFsLWV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZpbmcgaXMgYXRvbWljJyAnCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2NvbW1pdHMgJGJlZm9yZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgcmVtb3ZlIEhFQUReXiBIRUFEXl5eIEhFQUReICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0ICIkYmVmb3JlIiA9ICIkYWZ0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIHdpdGggLS1pZ25vcmUtbWlzc2luZycgJworCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9jb21taXRzICRiZWZvcmUiICYmCisKKwkjIFdlIGhhdmUgb25seSB0d28gLS0gYWRkIGFub3RoZXIgYW5kIG1ha2Ugc3VyZSBpdCBzdGF5cworCWdpdCBub3RlcyBhZGQgLW0gImV4dHJhIiAmJgorCWdpdCBub3RlcyBsaXN0IEhFQUQgPmFmdGVyLXJlbW92YWwtZXhwZWN0ICYmCisJZ2l0IG5vdGVzIHJlbW92ZSAtLWlnbm9yZS1taXNzaW5nIEhFQUReXiBIRUFEXl5eIEhFQUReICYmCisJZ2l0IG5vdGVzIGxpc3QgfCBzZWQgLWUgInMvIC4qLy8iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhZnRlci1yZW1vdmFsLWV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3Zpbmcgd2l0aCAtLWlnbm9yZS1taXNzaW5nIGJ1dCBib2d1cyByZWYnICcKKwliZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvY29tbWl0cyAkYmVmb3JlIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyByZW1vdmUgLS1pZ25vcmUtbWlzc2luZyBIRUFEXl4gSEVBRF5eXiBOTy1TVUNILUNPTU1JVCAmJgorCWFmdGVyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdCAiJGJlZm9yZSIgPSAiJGFmdGVyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgcmVhZHMgZnJvbSAtLXN0ZGluJyAnCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2NvbW1pdHMgJGJlZm9yZSIgJiYKKworCSMgV2UgaGF2ZSBvbmx5IHR3byAtLSBhZGQgYW5vdGhlciBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzCisJZ2l0IG5vdGVzIGFkZCAtbSAiZXh0cmEiICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWZ0ZXItcmVtb3ZhbC1leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReXiBIRUFEXl5eID5pbnB1dCAmJgorCWdpdCBub3RlcyByZW1vdmUgLS1zdGRpbiA8aW5wdXQgJiYKKwlnaXQgbm90ZXMgbGlzdCB8IHNlZCAtZSAicy8gLiovLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGFmdGVyLXJlbW92YWwtZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgLS1zdGRpbiBpcyBhbHNvIGF0b21pYycgJworCWJlZm9yZT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9jb21taXRzKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9jb21taXRzICRiZWZvcmUiICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXl4gSEVBRF5eXiBIRUFEXiA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgcmVtb3ZlIC0tc3RkaW4gPGlucHV0ICYmCisJYWZ0ZXI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvY29tbWl0cykgJiYKKwl0ZXN0ICIkYmVmb3JlIiA9ICIkYWZ0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIHdpdGggLS1zdGRpbiAtLWlnbm9yZS1taXNzaW5nJyAnCisJYmVmb3JlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL25vdGVzL2NvbW1pdHMpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL2NvbW1pdHMgJGJlZm9yZSIgJiYKKworCSMgV2UgaGF2ZSBvbmx5IHR3byAtLSBhZGQgYW5vdGhlciBhbmQgbWFrZSBzdXJlIGl0IHN0YXlzCisJZ2l0IG5vdGVzIGFkZCAtbSAiZXh0cmEiICYmCisJZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWZ0ZXItcmVtb3ZhbC1leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReXiBIRUFEXl5eIEhFQUReID5pbnB1dCAmJgorCWdpdCBub3RlcyByZW1vdmUgLS1pZ25vcmUtbWlzc2luZyAtLXN0ZGluIDxpbnB1dCAmJgorCWdpdCBub3RlcyBsaXN0IHwgc2VkIC1lICJzLyAuKi8vIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgYWZ0ZXItcmVtb3ZhbC1leHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3Qgbm90ZXMgd2l0aCAiZ2l0IG5vdGVzIGxpc3QiJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWM5YzZhZjdmNzhiYzQ3NDkwZGJmM2U4MjJjZjJmM2MyNGQ0YjkwNjEgN2E0Y2E2ZWU1MmE5NzRhNjZjYmFhNzhlMzMyMTQ1MzVkZmYxZDY5MQorCQljMThkYzAyNGUxNGYwOGQxOGQxNGVlYTBkNzQ3ZmY2OTJkNjZkNmEzIGQwN2Q2MmU1MjA4ZjIyZWI1Njk1ZTdlYjQ3NjY3ZGM4Yjk4NjAyOTAKKwlFT0YKKwlnaXQgbm90ZXMgbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0IG5vdGVzIHdpdGggImdpdCBub3RlcyInICcKKwlnaXQgbm90ZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdCBzcGVjaWZpYyBub3RlIHdpdGggImdpdCBub3RlcyBsaXN0IDxvYmplY3Q+IicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljMThkYzAyNGUxNGYwOGQxOGQxNGVlYTBkNzQ3ZmY2OTJkNjZkNmEzCisJRU9GCisJZ2l0IG5vdGVzIGxpc3QgSEVBRF5eID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3Rpbmcgbm9uLWV4aXN0aW5nIG5vdGVzIGZhaWxzJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBlbmQgdG8gZXhpc3Rpbmcgbm90ZSB3aXRoICJnaXQgbm90ZXMgYXBwZW5kIicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQlJbml0aWFsIHNldCBvZiBub3RlcworCisJCU1vcmUgbm90ZXMgYXBwZW5kZWQgd2l0aCBnaXQgbm90ZXMgYXBwZW5kCisJRU9GCisJZ2l0IG5vdGVzIGFkZCAtbSAiSW5pdGlhbCBzZXQgb2Ygbm90ZXMiICYmCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiTW9yZSBub3RlcyBhcHBlbmRlZCB3aXRoIGdpdCBub3RlcyBhcHBlbmQiICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBub3RlcyBsaXN0IiBkb2VzIG5vdCBleHBhbmQgdG8gImdpdCBub3RlcyBsaXN0IEhFQUQiJyAnCisJY2F0ID5leHBlY3RfbGlzdCA8PC1FT0YgJiYKKwkJYzljNmFmN2Y3OGJjNDc0OTBkYmYzZTgyMmNmMmYzYzI0ZDRiOTA2MSA3YTRjYTZlZTUyYTk3NGE2NmNiYWE3OGUzMzIxNDUzNWRmZjFkNjkxCisJCTRiNmFkMjIzNTdjYzhhMTI5NjcyMDU3NGI4ZDJmYmMyMmZhYjA2NzEgN2Y5YWQ4ODM2Yzc3NWFjYjEzNGMwYTA1NWZjNTVmYjRjZDFiYTM2MQorCQljMThkYzAyNGUxNGYwOGQxOGQxNGVlYTBkNzQ3ZmY2OTJkNjZkNmEzIGQwN2Q2MmU1MjA4ZjIyZWI1Njk1ZTdlYjQ3NjY3ZGM4Yjk4NjAyOTAKKwlFT0YKKwlnaXQgbm90ZXMgbGlzdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X2xpc3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZGluZyBlbXB0eSBzdHJpbmcgZG9lcyBub3QgY2hhbmdlIGV4aXN0aW5nIG5vdGUnICcKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICIiICYmCisJZ2l0IG5vdGVzIHNob3cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGFwcGVuZCA9PSBhZGQgd2hlbiB0aGVyZSBpcyBubyBleGlzdGluZyBub3RlJyAnCisJZ2l0IG5vdGVzIHJlbW92ZSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRCAmJgorCWdpdCBub3RlcyBhcHBlbmQgLW0gIkluaXRpYWwgc2V0IG9mIG5vdGVzJHtMRn0ke0xGfU1vcmUgbm90ZXMgYXBwZW5kZWQgd2l0aCBnaXQgbm90ZXMgYXBwZW5kIiAmJgorCWdpdCBub3RlcyBzaG93ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZGluZyBlbXB0eSBzdHJpbmcgdG8gbm9uLWV4aXN0aW5nIG5vdGUgZG9lcyBub3QgY3JlYXRlIG5vdGUnICcKKwlnaXQgbm90ZXMgcmVtb3ZlIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbGlzdCBIRUFEICYmCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBsaXN0IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG90aGVyIG5vdGUgb24gYSBkaWZmZXJlbnQgbm90ZXMgcmVmIChzZXR1cCknICcKKwl0ZXN0X2NvbW1pdCA2dGggJiYKKwlHSVRfTk9URVNfUkVGPSJyZWZzL25vdGVzL290aGVyIiBnaXQgbm90ZXMgYWRkIC1tICJvdGhlciBub3RlIiAmJgorCWNhdCA+ZXhwZWN0LW5vdC1vdGhlciA8PC1FT0YgJiYKKwkJY29tbWl0IDJjMTI1MzMxMTE4Y2FiYTBmZjgyMzhiN2Y0OTU4YWM2ZTkzZmUzOWMKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NnRoCisJRU9GCisJY3AgZXhwZWN0LW5vdC1vdGhlciBleHBlY3Qtb3RoZXIgJiYKKwljYXQgPj5leHBlY3Qtb3RoZXIgPDwtRU9GCisKKwkJTm90ZXMgKG90aGVyKToKKwkJJHtpbmRlbnR9b3RoZXIgbm90ZQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEbyBub3Qgc2hvdyBub3RlIG9uIG90aGVyIHJlZiBieSBkZWZhdWx0JyAnCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LW5vdC1vdGhlciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRG8gc2hvdyBub3RlIHdoZW4gcmVmIGlzIGdpdmVuIGluIEdJVF9OT1RFU19SRUYnICcKKwlHSVRfTk9URVNfUkVGPSJyZWZzL25vdGVzL290aGVyIiBnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtb3RoZXIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RvIHNob3cgbm90ZSB3aGVuIHJlZiBpcyBnaXZlbiBpbiBjb3JlLm5vdGVzUmVmIGNvbmZpZycgJworCXRlc3RfY29uZmlnIGNvcmUubm90ZXNSZWYgInJlZnMvbm90ZXMvb3RoZXIiICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LW90aGVyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdEbyBub3Qgc2hvdyBub3RlIHdoZW4gY29yZS5ub3Rlc1JlZiBpcyBvdmVycmlkZGVuJyAnCisJdGVzdF9jb25maWcgY29yZS5ub3Rlc1JlZiAicmVmcy9ub3Rlcy9vdGhlciIgJiYKKwlHSVRfTk9URVNfUkVGPSJyZWZzL25vdGVzL3dyb25nIiBnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtbm90LW90aGVyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTaG93IGFsbCBub3RlcyB3aGVuIG5vdGVzLmRpc3BsYXlSZWY9cmVmcy9ub3Rlcy8qJyAnCisJY2F0ID5leHBlY3QtYm90aCA8PC1FT0YgJiYKKwkJY29tbWl0IDJjMTI1MzMxMTE4Y2FiYTBmZjgyMzhiN2Y0OTU4YWM2ZTkzZmUzOWMKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NnRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW9yZGVyIHRlc3QKKworCQlOb3RlcyAob3RoZXIpOgorCQkke2luZGVudH1vdGhlciBub3RlCisKKwkJY29tbWl0IDdmOWFkODgzNmM3NzVhY2IxMzRjMGEwNTVmYzU1ZmI0Y2QxYmEzNjEKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fXJlcGxhY2VtZW50IGZvciBkZWxldGVkIG5vdGUKKwlFT0YKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvY29tbWl0cyBnaXQgbm90ZXMgYWRkIFwKKwkJLW0icmVwbGFjZW1lbnQgZm9yIGRlbGV0ZWQgbm90ZSIgSEVBRF4gJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvY29tbWl0cyBnaXQgbm90ZXMgYWRkIC1tIm9yZGVyIHRlc3QiICYmCisJdGVzdF91bmNvbmZpZyBjb3JlLm5vdGVzUmVmICYmCisJdGVzdF9jb25maWcgbm90ZXMuZGlzcGxheVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ib3RoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JlLm5vdGVzUmVmIGlzIGltcGxpY2l0bHkgaW4gbm90ZXMuZGlzcGxheVJlZicgJworCXRlc3RfY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9jb21taXRzICYmCisJdGVzdF9jb25maWcgbm90ZXMuZGlzcGxheVJlZiByZWZzL25vdGVzL290aGVyICYmCisJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzLmRpc3BsYXlSZWYgY2FuIGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlJyAnCisJdGVzdF91bmNvbmZpZyBjb3JlLm5vdGVzUmVmICYmCisJdGVzdF9jb25maWcgbm90ZXMuZGlzcGxheVJlZiByZWZzL25vdGVzL2NvbW1pdHMgJiYKKwlnaXQgY29uZmlnIC0tYWRkIG5vdGVzLmRpc3BsYXlSZWYgcmVmcy9ub3Rlcy9vdGhlciAmJgorCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ib3RoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3Rlcy5kaXNwbGF5UmVmIHJlc3BlY3RzIG9yZGVyJyAnCisJY2F0ID5leHBlY3QtYm90aC1yZXZlcnNlZCA8PC1FT0YgJiYKKwkJY29tbWl0IDJjMTI1MzMxMTE4Y2FiYTBmZjgyMzhiN2Y0OTU4YWM2ZTkzZmUzOWMKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NnRoCisKKwkJTm90ZXMgKG90aGVyKToKKwkJJHtpbmRlbnR9b3RoZXIgbm90ZQorCisJCU5vdGVzOgorCQkke2luZGVudH1vcmRlciB0ZXN0CisJRU9GCisJdGVzdF9jb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL290aGVyICYmCisJdGVzdF9jb25maWcgbm90ZXMuZGlzcGxheVJlZiByZWZzL25vdGVzL2NvbW1pdHMgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtYm90aC1yZXZlcnNlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX05PVEVTX0RJU1BMQVlfUkVGIHdvcmtzJyAnCisJR0lUX05PVEVTX0RJU1BMQVlfUkVGPXJlZnMvbm90ZXMvY29tbWl0czpyZWZzL25vdGVzL290aGVyIFwKKwkJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LWJvdGggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9OT1RFU19ESVNQTEFZX1JFRiBvdmVycmlkZXMgY29uZmlnJyAnCisJY2F0ID5leHBlY3Qtbm9uZSA8PC1FT0YgJiYKKwkJY29tbWl0IDJjMTI1MzMxMTE4Y2FiYTBmZjgyMzhiN2Y0OTU4YWM2ZTkzZmUzOWMKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxODoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NnRoCisKKwkJY29tbWl0IDdmOWFkODgzNmM3NzVhY2IxMzRjMGEwNTVmYzU1ZmI0Y2QxYmEzNjEKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToxNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9NXRoCisJRU9GCisJdGVzdF9jb25maWcgbm90ZXMuZGlzcGxheVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCUdJVF9OT1RFU19SRUY9IEdJVF9OT1RFU19ESVNQTEFZX1JFRj0gZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LW5vbmUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc2hvdy1ub3Rlcz0qIGFkZHMgdG8gR0lUX05PVEVTX0RJU1BMQVlfUkVGJyAnCisJR0lUX05PVEVTX1JFRj0gR0lUX05PVEVTX0RJU1BMQVlfUkVGPSBnaXQgbG9nIC0tc2hvdy1ub3Rlcz0qIC0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtYm90aCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1zdGFuZGFyZC1ub3RlcycgJworCWNhdCA+ZXhwZWN0LWNvbW1pdHMgPDwtRU9GICYmCisJCWNvbW1pdCAyYzEyNTMzMTExOGNhYmEwZmY4MjM4YjdmNDk1OGFjNmU5M2ZlMzljCisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6MTg6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTZ0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1vcmRlciB0ZXN0CisJRU9GCisJZ2l0IGxvZyAtLW5vLXN0YW5kYXJkLW5vdGVzIC0tc2hvdy1ub3Rlcz1jb21taXRzIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtY29tbWl0cyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdGFuZGFyZC1ub3RlcycgJworCXRlc3RfY29uZmlnIG5vdGVzLmRpc3BsYXlSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwlnaXQgbG9nIC0tbm8tc3RhbmRhcmQtbm90ZXMgLS1zaG93LW5vdGVzPWNvbW1pdHMgXAorCQktLXN0YW5kYXJkLW5vdGVzIC0yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QtYm90aCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG93LW5vdGVzPXJlZiBhY2N1bXVsYXRlcycgJworCWdpdCBsb2cgLS1zaG93LW5vdGVzPW90aGVyIC0tc2hvdy1ub3Rlcz1jb21taXRzIFwKKwkJIC0tbm8tc3RhbmRhcmQtbm90ZXMgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC1ib3RoLXJldmVyc2VkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBbGxvdyBub3RlcyBvbiBub24tY29tbWl0cyAodHJlZXMsIGJsb2JzLCB0YWdzKScgJworCXRlc3RfY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9vdGhlciAmJgorCWVjaG8gIk5vdGUgb24gYSB0cmVlIiA+ZXhwZWN0ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZSBvbiBhIHRyZWUiIEhFQUQ6ICYmCisJZ2l0IG5vdGVzIHNob3cgSEVBRDogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvICJOb3RlIG9uIGEgYmxvYiIgPmV4cGVjdCAmJgorCWZpbGVuYW1lPSQoZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgSEVBRCB8IGhlYWQgLW4xKSAmJgorCWdpdCBub3RlcyBhZGQgLW0gIk5vdGUgb24gYSBibG9iIiBIRUFEOiRmaWxlbmFtZSAmJgorCWdpdCBub3RlcyBzaG93IEhFQUQ6JGZpbGVuYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyAiTm90ZSBvbiBhIHRhZyIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLWEgLW0gIlRoaXMgaXMgYW4gYW5ub3RhdGVkIHRhZyIgZm9vYmFyIEhFQUReICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZSBvbiBhIHRhZyIgZm9vYmFyICYmCisJZ2l0IG5vdGVzIHNob3cgZm9vYmFyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIGZyb20gb3RoZXIgbm90ZSB3aXRoICJnaXQgbm90ZXMgYWRkIC1DIicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgZmIwMWUwY2E4YzMzYjZjYzBjNjQ1MWRkZTc0N2Y5N2RmNTY3Y2I1YworCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjE5OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH03dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9b3JkZXIgdGVzdAorCUVPRgorCXRlc3RfY29tbWl0IDd0aCAmJgorCWdpdCBub3RlcyBhZGQgLUMgJChnaXQgbm90ZXMgbGlzdCBIRUFEXikgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdCAiJChnaXQgbm90ZXMgbGlzdCBIRUFEKSIgPSAiJChnaXQgbm90ZXMgbGlzdCBIRUFEXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIGZyb20gbm9uLWV4aXN0aW5nIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGFkZCAtQyIgZmFpbHMnICcKKwl0ZXN0X2NvbW1pdCA4dGggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgYWRkIC1DIGRlYWRiZWVmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIG5vbi1ibG9iIHdpdGggImdpdCBub3RlcyBhZGQgLUMiIGZhaWxzJyAnCisJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRyZWU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6KSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBhZGQgLUMgJGNvbW1pdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBhZGQgLUMgJHRyZWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbGlzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIGZyb20gYmxvYiB3aXRoICJnaXQgbm90ZXMgYWRkIC1DIiByZXVzZXMgYmxvYiBpZCcgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgOWE0YzMxYzdmNzIyYjVkNTE3ZTkyYzY0ZTkzMmRkNzUxZTE0MTNiZgorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIwOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH04dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9VGhpcyBpcyBhIGJsb2Igb2JqZWN0CisJRU9GCisJYmxvYj0kKGVjaG8gIlRoaXMgaXMgYSBibG9iIG9iamVjdCIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlnaXQgbm90ZXMgYWRkIC1DICRibG9iICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3QgIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRCkiID0gIiRibG9iIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIG90aGVyIG5vdGUgd2l0aCAiZ2l0IG5vdGVzIGFkZCAtYyInICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0IDJlMGRiNGJjNjQ5ZTE3NGQ2NjdhMWNkZTE5ZTcyNWNmODk3YTViZDIKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyMToxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9OXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwlFT0YKKwl0ZXN0X2NvbW1pdCA5dGggJiYKKwlNU0c9InlldCBhbm90aGVyIG5vdGUiIGdpdCBub3RlcyBhZGQgLWMgJChnaXQgbm90ZXMgbGlzdCBIRUFEXl4pICYmCisJZ2l0IGxvZyAtMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbm90ZSBmcm9tIG5vbi1leGlzdGluZyBub3RlIHdpdGggImdpdCBub3RlcyBhZGQgLWMiIGZhaWxzJyAnCisJdGVzdF9jb21taXQgMTB0aCAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBNU0c9InlldCBhbm90aGVyIG5vdGUiIGdpdCBub3RlcyBhZGQgLWMgZGVhZGJlZWYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbGlzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZCB0byBub3RlIGZyb20gb3RoZXIgbm90ZSB3aXRoICJnaXQgbm90ZXMgYXBwZW5kIC1DIicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgMmUwZGI0YmM2NDllMTc0ZDY2N2ExY2RlMTllNzI1Y2Y4OTdhNWJkMgorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIxOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH05dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9eWV0IGFub3RoZXIgbm90ZQorCUVPRgorCWdpdCBub3RlcyBhcHBlbmQgLUMgJChnaXQgbm90ZXMgbGlzdCBIRUFEXikgSEVBRF4gJiYKKwlnaXQgbG9nIC0xIEhFQUReID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBub3RlIGZyb20gb3RoZXIgbm90ZSB3aXRoICJnaXQgbm90ZXMgYXBwZW5kIC1jIicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgN2MzYjg3YWIzNjhmODFlMTFiMWVhODdiMmFiOTlhNzFjY2QyNTQwNgorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIyOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xMHRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW90aGVyIG5vdGUKKwlFT0YKKwlNU0c9Im90aGVyIG5vdGUiIGdpdCBub3RlcyBhcHBlbmQgLWMgJChnaXQgbm90ZXMgbGlzdCBIRUFEXikgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZCB0byBub3RlIGZyb20gb3RoZXIgbm90ZSB3aXRoICJnaXQgbm90ZXMgYXBwZW5kIC1jIicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgN2MzYjg3YWIzNjhmODFlMTFiMWVhODdiMmFiOTlhNzFjY2QyNTQwNgorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIyOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xMHRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW90aGVyIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwlFT0YKKwlNU0c9InlldCBhbm90aGVyIG5vdGUiIGdpdCBub3RlcyBhcHBlbmQgLWMgJChnaXQgbm90ZXMgbGlzdCBIRUFEKSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29weSBub3RlIHdpdGggImdpdCBub3RlcyBjb3B5IicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgYTQ0NmZmZjg3NzdlZmRjNmViOGY0YjdjOGE1ZmY2OTk0ODRkZjBkNQorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjIzOjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xMXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW90aGVyIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwlFT0YKKwl0ZXN0X2NvbW1pdCAxMXRoICYmCisJZ2l0IG5vdGVzIGNvcHkgSEVBRF4gSEVBRCAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0ICIkKGdpdCBub3RlcyBsaXN0IEhFQUQpIiA9ICIkKGdpdCBub3RlcyBsaXN0IEhFQUReKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJldmVudCBvdmVyd3JpdGUgd2l0aCAiZ2l0IG5vdGVzIGNvcHkiJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgSEVBRH4yIEhFQUQgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdCAiJChnaXQgbm90ZXMgbGlzdCBIRUFEKSIgPSAiJChnaXQgbm90ZXMgbGlzdCBIRUFEXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsbG93IG92ZXJ3cml0ZSB3aXRoICJnaXQgbm90ZXMgY29weSAtZiInICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0IGE0NDZmZmY4Nzc3ZWZkYzZlYjhmNGI3YzhhNWZmNjk5NDg0ZGYwZDUKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyMzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTF0aAorCisJCU5vdGVzOgorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisJRU9GCisJZ2l0IG5vdGVzIGNvcHkgLWYgSEVBRH4yIEhFQUQgJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdCAiJChnaXQgbm90ZXMgbGlzdCBIRUFEKSIgPSAiJChnaXQgbm90ZXMgbGlzdCBIRUFEfjIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgY29weSBub3RlIGZyb20gb2JqZWN0IHdpdGhvdXQgbm90ZXMnICcKKwl0ZXN0X2NvbW1pdCAxMnRoICYmCisJdGVzdF9jb21taXQgMTN0aCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBjb3B5IEhFQUReIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1zdGRpbicgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgZTg3MWFhNjExODJiMWQ5NWQwYTZmYjc1NDQ1ZDg5MTcyMjg2M2I2YgorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI1OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xM3RoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKworCQljb21taXQgNjVlMjYzZGVkMDJhZTRlODgzOWJjMTUxMDk1MTEzNzM3NTc5ZGMxMgorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI0OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xMnRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fW90aGVyIG5vdGUKKwkJJHtpbmRlbnR9CisJCSR7aW5kZW50fXlldCBhbm90aGVyIG5vdGUKKwlFT0YKKwkoZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pOyBcCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkpIHwKKwlnaXQgbm90ZXMgY29weSAtLXN0ZGluICYmCisJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3QgIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRCkiID0gIiQoZ2l0IG5vdGVzIGxpc3QgSEVBRH4yKSIgJiYKKwl0ZXN0ICIkKGdpdCBub3RlcyBsaXN0IEhFQUReKSIgPSAiJChnaXQgbm90ZXMgbGlzdCBIRUFEfjMpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlICh1bmNvbmZpZ3VyZWQpJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCA0YWNmNDJlODQ3ZTdmZmZiYmY4OWVlMzY1YzIwYWM3Y2FmNDBkZTg5CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6Mjc6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTE1dGgKKworCQljb21taXQgMDdjODVkNzcwNTkzOTNlZDAxNTRiOGM5NjkwNjU0N2E1OWRmY2RkZAorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI2OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xNHRoCisJRU9GCisJdGVzdF9jb21taXQgMTR0aCAmJgorCXRlc3RfY29tbWl0IDE1dGggJiYKKwkoZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pOyBcCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkpIHwKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAoZW5hYmxlZCknICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0IDRhY2Y0MmU4NDdlN2ZmZmJiZjg5ZWUzNjVjMjBhYzdjYWY0MGRlODkKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTV0aAorCisJCU5vdGVzOgorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisKKwkJY29tbWl0IDA3Yzg1ZDc3MDU5MzkzZWQwMTU0YjhjOTY5MDY1NDdhNTlkZmNkZGQKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyNjoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTR0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1vdGhlciBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH15ZXQgYW5vdGhlciBub3RlCisJRU9GCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgb3ZlcndyaXRlICYmCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCShlY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXik7IFwKKwllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICQoZ2l0IHJldi1wYXJzZSBIRUFEKSkgfAorCWdpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGU9Zm9vICYmCisJZ2l0IGxvZyAtMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlIChkaXNhYmxlZCknICcKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlLmJhciBmYWxzZSAmJgorCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJChnaXQgcmV2LXBhcnNlIEhFQUQpIHwKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWJhciAmJgorCWdpdCBsb2cgLTIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAob3ZlcndyaXRlKScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgNGFjZjQyZTg0N2U3ZmZmYmJmODllZTM2NWMyMGFjN2NhZjQwZGU4OQorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xNXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fWEgZnJlc2ggbm90ZQorCUVPRgorCWdpdCBub3RlcyBhZGQgLWYgLW0iYSBmcmVzaCBub3RlIiBIRUFEXiAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIG92ZXJ3cml0ZSAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpIHwKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAoaWdub3JlKScgJworCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIGlnbm9yZSAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpIHwKKwlnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZSAoYXBwZW5kKScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgNGFjZjQyZTg0N2U3ZmZmYmJmODllZTM2NWMyMGFjN2NhZjQwZGU4OQorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xNXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fWEgZnJlc2ggbm90ZQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9YW5vdGhlciBmcmVzaCBub3RlCisJRU9GCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSJhbm90aGVyIGZyZXNoIG5vdGUiIEhFQUReICYmCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgY29uY2F0ZW5hdGUgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKGFwcGVuZCB0d28gdG8gb25lKScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQljb21taXQgNGFjZjQyZTg0N2U3ZmZmYmJmODllZTM2NWMyMGFjN2NhZjQwZGU4OQorCQlBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJCURhdGU6ICAgVGh1IEFwciA3IDE1OjI3OjEzIDIwMDUgLTA3MDAKKworCQkke2luZGVudH0xNXRoCisKKwkJTm90ZXM6CisJCSR7aW5kZW50fWEgZnJlc2ggbm90ZQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9YW5vdGhlciBmcmVzaCBub3RlCisJCSR7aW5kZW50fQorCQkke2luZGVudH1hcHBlbmQgMQorCQkke2luZGVudH0KKwkJJHtpbmRlbnR9YXBwZW5kIDIKKwlFT0YKKwlnaXQgbm90ZXMgYWRkIC1mIC1tImFwcGVuZCAxIiBIRUFEXiAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0iYXBwZW5kIDIiIEhFQUReXiAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVNb2RlIGNvbmNhdGVuYXRlICYmCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCShlY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpOworCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUReXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpKSB8CisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBub3RlcyBjb3B5IC0tZm9yLXJld3JpdGUgKGFwcGVuZCBlbXB0eSknICcKKwlnaXQgbm90ZXMgcmVtb3ZlIEhFQUReICYmCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgY29uY2F0ZW5hdGUgJiYKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICJyZWZzL25vdGVzLyoiICYmCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9OT1RFU19SRVdSSVRFX01PREUgd29ya3MnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkJY29tbWl0IDRhY2Y0MmU4NDdlN2ZmZmJiZjg5ZWUzNjVjMjBhYzdjYWY0MGRlODkKKwkJQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCQlEYXRlOiAgIFRodSBBcHIgNyAxNToyNzoxMyAyMDA1IC0wNzAwCisKKwkJJHtpbmRlbnR9MTV0aAorCisJCU5vdGVzOgorCQkke2luZGVudH1yZXBsYWNlbWVudCBub3RlIDEKKwlFT0YKKwl0ZXN0X2NvbmZpZyBub3Rlcy5yZXdyaXRlTW9kZSBjb25jYXRlbmF0ZSAmJgorCXRlc3RfY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tInJlcGxhY2VtZW50IG5vdGUgMSIgSEVBRF4gJiYKKwllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJChnaXQgcmV2LXBhcnNlIEhFQUQpIHwKKwlHSVRfTk9URVNfUkVXUklURV9NT0RFPW92ZXJ3cml0ZSBnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX05PVEVTX1JFV1JJVEVfUkVGIHdvcmtzJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJCWNvbW1pdCA0YWNmNDJlODQ3ZTdmZmZiYmY4OWVlMzY1YzIwYWM3Y2FmNDBkZTg5CisJCUF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KKwkJRGF0ZTogICBUaHUgQXByIDcgMTU6Mjc6MTMgMjAwNSAtMDcwMAorCisJCSR7aW5kZW50fTE1dGgKKworCQlOb3RlczoKKwkJJHtpbmRlbnR9cmVwbGFjZW1lbnQgbm90ZSAyCisJRU9GCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSJyZXBsYWNlbWVudCBub3RlIDIiIEhFQUReICYmCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgb3ZlcndyaXRlICYmCisJdGVzdF91bmNvbmZpZyBub3Rlcy5yZXdyaXRlUmVmICYmCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJR0lUX05PVEVTX1JFV1JJVEVfUkVGPXJlZnMvbm90ZXMvY29tbWl0czpyZWZzL25vdGVzL290aGVyIFwKKwkJZ2l0IG5vdGVzIGNvcHkgLS1mb3ItcmV3cml0ZT1mb28gJiYKKwlnaXQgbG9nIC0xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9OT1RFU19SRVdSSVRFX1JFRiBvdmVycmlkZXMgY29uZmlnJyAnCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSJyZXBsYWNlbWVudCBub3RlIDMiIEhFQUReICYmCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZU1vZGUgb3ZlcndyaXRlICYmCisJdGVzdF9jb25maWcgbm90ZXMucmV3cml0ZVJlZiByZWZzL25vdGVzL290aGVyICYmCisJZWNobyAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJR0lUX05PVEVTX1JFV1JJVEVfUkVGPSBnaXQgbm90ZXMgY29weSAtLWZvci1yZXdyaXRlPWZvbyAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGNvcHkgZGlhZ25vc2VzIHRvbyBtYW55IG9yIHRvbyBmZXcgcGFyYW1ldGVycycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBjb3B5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGNvcHkgb25lIHR3byB0aHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgZ2V0LXJlZiBleHBhbmRzIHJlZnMvaGVhZHMvbWFzdGVyIHRvIHJlZnMvbm90ZXMvcmVmcy9oZWFkcy9tYXN0ZXInICcKKwl0ZXN0X3VuY29uZmlnIGNvcmUubm90ZXNSZWYgJiYKKwlzYW5lX3Vuc2V0IEdJVF9OT1RFU19SRUYgJiYKKwl0ZXN0ICIkKGdpdCBub3RlcyAtLXJlZj1yZWZzL2hlYWRzL21hc3RlciBnZXQtcmVmKSIgPSAicmVmcy9ub3Rlcy9yZWZzL2hlYWRzL21hc3RlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGdldC1yZWYgKG5vIG92ZXJyaWRlcyknICcKKwl0ZXN0X3VuY29uZmlnIGNvcmUubm90ZXNSZWYgJiYKKwlzYW5lX3Vuc2V0IEdJVF9OT1RFU19SRUYgJiYKKwl0ZXN0ICIkKGdpdCBub3RlcyBnZXQtcmVmKSIgPSAicmVmcy9ub3Rlcy9jb21taXRzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgZ2V0LXJlZiAoY29yZS5ub3Rlc1JlZiknICcKKwl0ZXN0X2NvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvZm9vICYmCisJdGVzdCAiJChnaXQgbm90ZXMgZ2V0LXJlZikiID0gInJlZnMvbm90ZXMvZm9vIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbm90ZXMgZ2V0LXJlZiAoR0lUX05PVEVTX1JFRiknICcKKwl0ZXN0ICIkKEdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9iYXIgZ2l0IG5vdGVzIGdldC1yZWYpIiA9ICJyZWZzL25vdGVzL2JhciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG5vdGVzIGdldC1yZWYgKC0tcmVmKScgJworCXRlc3QgIiQoR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL2JhciBnaXQgbm90ZXMgLS1yZWY9YmF6IGdldC1yZWYpIiA9ICJyZWZzL25vdGVzL2JheiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdGluZyBvZiBlbXB0eSBub3RlcycgJworCXRlc3RfdW5jb25maWcgY29yZS5ub3Rlc1JlZiAmJgorCXRlc3RfY29tbWl0IDE2dGggJiYKKwllbXB0eV9ibG9iPSQoZ2l0IGhhc2gtb2JqZWN0IC13IC9kZXYvbnVsbCkgJiYKKwllY2hvICIkZW1wdHlfYmxvYiIgPmV4cGVjdF9lbXB0eQorJworCit3aGlsZSByZWFkIGNtZAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICInZ2l0IG5vdGVzICRjbWQnIHJlbW92ZXMgZW1wdHkgbm90ZSIgIgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IG5vdGVzIHJlbW92ZSBIRUFEICYmCisJCU1TRz0gZ2l0IG5vdGVzICRjbWQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIGxpc3QgSEVBRAorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIidnaXQgbm90ZXMgJGNtZCAtLWFsbG93LWVtcHR5JyBzdG9yZXMgZW1wdHkgbm90ZSIgIgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IG5vdGVzIHJlbW92ZSBIRUFEICYmCisJCU1TRz0gZ2l0IG5vdGVzICRjbWQgLS1hbGxvdy1lbXB0eSAmJgorCQlnaXQgbm90ZXMgbGlzdCBIRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0X2VtcHR5IGFjdHVhbAorCSIKK2RvbmUgPDxcRU9GCithZGQKK2FkZCAtRiAvZGV2L251bGwKK2FkZCAtbSAiIgorYWRkIC1jICIkZW1wdHlfYmxvYiIKK2FkZCAtQyAiJGVtcHR5X2Jsb2IiCithcHBlbmQKK2FwcGVuZCAtRiAvZGV2L251bGwKK2FwcGVuZCAtbSAiIgorYXBwZW5kIC1jICIkZW1wdHlfYmxvYiIKK2FwcGVuZCAtQyAiJGVtcHR5X2Jsb2IiCitlZGl0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgbm90ZXMgYXJlIGRpc3BsYXllZCBieSBnaXQgbG9nJyAnCisJdGVzdF9jb21taXQgMTd0aCAmJgorCWdpdCBsb2cgLTEgPmV4cGVjdCAmJgorCWNhdCA+PmV4cGVjdCA8PC1FT0YgJiYKKworCQlOb3RlczoKKwlFT0YKKwlnaXQgbm90ZXMgYWRkIC1DICIkZW1wdHlfYmxvYiIgLS1hbGxvdy1lbXB0eSAmJgorCWdpdCBsb2cgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzAyLW5vdGVzLWluZGV4LWV4cGVuc2l2ZS5zaCBiL3QvdDMzMDItbm90ZXMtaW5kZXgtZXhwZW5zaXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcyMTdjNWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzAyLW5vdGVzLWluZGV4LWV4cGVuc2l2ZS5zaApAQCAtMCwwICsxLDEzNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY29tbWl0IG5vdGVzIGluZGV4IChleHBlbnNpdmUhKScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NyZWF0ZV9yZXBvICgpIHsKKwludW1iZXJfb2ZfY29tbWl0cz0kMQorCW5yPTAKKwl0ZXN0IC1kIC5naXQgfHwgeworCWdpdCBpbml0ICYmCisJKAorCQl3aGlsZSB0ZXN0ICRuciAtbHQgJG51bWJlcl9vZl9jb21taXRzCisJCWRvCisJCQlucj0kKCgkbnIrMSkpCisJCQltYXJrPSQoKCRuciskbnIpKQorCQkJbm90ZW1hcms9JCgoJG1hcmsrMSkpCisJCQl0ZXN0X3RpY2sgJiYKKwkJCWNhdCA8PC1JTlBVVF9FTkQgJiYKKwkJCWNvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorCQkJbWFyayA6JG1hcmsKKwkJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQkJZGF0YSA8PENPTU1JVAorCQkJY29tbWl0ICMkbnIKKwkJCUNPTU1JVAorCisJCQlNIDY0NCBpbmxpbmUgZmlsZQorCQkJZGF0YSA8PEVPRgorCQkJZmlsZSBpbiBjb21taXQgIyRucgorCQkJRU9GCisKKwkJCWJsb2IKKwkJCW1hcmsgOiRub3RlbWFyaworCQkJZGF0YSA8PEVPRgorCQkJbm90ZSBmb3IgY29tbWl0ICMkbnIKKwkJCUVPRgorCisJCQlJTlBVVF9FTkQKKwkJCWVjaG8gIk4gOiRub3RlbWFyayA6JG1hcmsiID4+bm90ZV9jb21taXQKKwkJZG9uZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJY2F0IDw8LUlOUFVUX0VORCAmJgorCQljb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCisJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQlkYXRhIDw8Q09NTUlUCisJCW5vdGVzCisJCUNPTU1JVAorCisJCUlOUFVUX0VORAorCisJCWNhdCBub3RlX2NvbW1pdAorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLXF1aWV0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvY29tbWl0cworCX0KK30KKwordGVzdF9ub3RlcyAoKSB7CisJY291bnQ9JDEgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9jb21taXRzICYmCisJZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+b3V0cHV0ICYmCisJaT0kY291bnQgJiYKKwl3aGlsZSB0ZXN0ICRpIC1ndCAwCisJZG8KKwkJZWNobyAiICAgIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICBub3RlIGZvciBjb21taXQgIyRpIiAmJgorCQlpPSQoKCRpLTEpKQorCWRvbmUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKK30KKword3JpdGVfc2NyaXB0IHRpbWVfbm90ZXMgPDxcRU9GCisJbW9kZT0kMQorCWk9MQorCXdoaWxlIHRlc3QgJGkgLWx0ICQyCisJZG8KKwkJY2FzZSAkMSBpbgorCQluby1ub3RlcykKKwkJCUdJVF9OT1RFU19SRUY9bm9uLWV4aXN0aW5nCisJCQlleHBvcnQgR0lUX05PVEVTX1JFRgorCQkJOzsKKwkJbm90ZXMpCisJCQl1bnNldCBHSVRfTk9URVNfUkVGCisJCQk7OworCQllc2FjCisJCWdpdCBsb2cKKwkJaT0kKCgkaSsxKSkKKwlkb25lID4vZGV2L251bGwKK0VPRgorCit0aW1lX25vdGVzICgpIHsKKwlmb3IgbW9kZSBpbiBuby1ub3RlcyBub3RlcworCWRvCisJCWVjaG8gJG1vZGUKKwkJL3Vzci9iaW4vdGltZSAuLi90aW1lX25vdGVzICRtb2RlICQxCisJZG9uZQorfQorCitkb190ZXN0cyAoKSB7CisJY291bnQ9JDEgcHI9JHsyLX0KKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByICJzZXR1cCAkY291bnQiICcKKwkJbWtkaXIgIiRjb3VudCIgJiYKKwkJKAorCQkJY2QgIiRjb3VudCIgJiYKKwkJCWNyZWF0ZV9yZXBvICIkY291bnQiCisJCSkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwciAnbm90ZXMgd29yaycgJworCQkoCisJCQljZCAiJGNvdW50IiAmJgorCQkJdGVzdF9ub3RlcyAiJGNvdW50IgorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiVVNSX0JJTl9USU1FJHtwcjorLCRwcn0iICdub3RlcyB0aW1pbmcgd2l0aCAvdXNyL2Jpbi90aW1lJyAnCisJCSgKKwkJCWNkICIkY291bnQiICYmCisJCQl0aW1lX25vdGVzIDEwMAorCQkpCisJJworfQorCitkb190ZXN0cyAxMAorZm9yIGNvdW50IGluIDEwMCAxMDAwIDEwMDAwCitkbworCWRvX3Rlc3RzICIkY291bnQiIEVYUEVOU0lWRQorZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDMtbm90ZXMtc3VidHJlZXMuc2ggYi90L3QzMzAzLW5vdGVzLXN1YnRyZWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcwNGFlZTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzAzLW5vdGVzLXN1YnRyZWVzLnNoCkBAIC0wLDAgKzEsMTk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjb21taXQgbm90ZXMgb3JnYW5pemVkIGluIHN1YnRyZWVzJworCisuIC4vdGVzdC1saWIuc2gKKworbnVtYmVyX29mX2NvbW1pdHM9MTAwCisKK3N0YXJ0X25vdGVfY29tbWl0ICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvY29tbWl0c14wCitkZWxldGVhbGwKK0lOUFVUX0VORAorCit9CisKK3ZlcmlmeV9ub3RlcyAoKSB7CisJZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IG91dHB1dCAmJgorCWk9JG51bWJlcl9vZl9jb21taXRzICYmCisJd2hpbGUgWyAkaSAtZ3QgMCBdOyBkbworCQllY2hvICIgICAgY29tbWl0ICMkaSIgJiYKKwkJZWNobyAiICAgIG5vdGUgZm9yIGNvbW1pdCAjJGkiICYmCisJCWk9JCgoJGktMSkpOworCWRvbmUgPiBleHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwOiBjcmVhdGUgJG51bWJlcl9vZl9jb21taXRzIGNvbW1pdHMiICcKKworCSgKKwkJbnI9MCAmJgorCQl3aGlsZSBbICRuciAtbHQgJG51bWJlcl9vZl9jb21taXRzIF07IGRvCisJCQlucj0kKCgkbnIrMSkpICYmCisJCQl0ZXN0X3RpY2sgJiYKKwkJCWNhdCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdCAjJG5yCitDT01NSVQKKworTSA2NDQgaW5saW5lIGZpbGUKK2RhdGEgPDxFT0YKK2ZpbGUgaW4gY29tbWl0ICMkbnIKK0VPRgorCitJTlBVVF9FTkQKKworCQlkb25lICYmCisJCXRlc3RfdGljayAmJgorCQljYXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm8gbm90ZXMKK0NPTU1JVAorCitkZWxldGVhbGwKKworSU5QVVRfRU5ECisKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL2NvbW1pdHMKKycKKwordGVzdF9zaGExX2Jhc2VkICgpIHsKKwkoCisJCXN0YXJ0X25vdGVfY29tbWl0ICYmCisJCW5yPSRudW1iZXJfb2ZfY29tbWl0cyAmJgorCQlnaXQgcmV2LWxpc3QgcmVmcy9oZWFkcy9tYXN0ZXIgfAorCQl3aGlsZSByZWFkIHNoYTE7IGRvCisJCQlub3RlX3BhdGg9JChlY2hvICIkc2hhMSIgfCBzZWQgIiQxIikKKwkJCWNhdCA8PElOUFVUX0VORCAmJgorTSAxMDA2NDQgaW5saW5lICRub3RlX3BhdGgKK2RhdGEgPDxFT0YKK25vdGUgZm9yIGNvbW1pdCAjJG5yCitFT0YKKworSU5QVVRfRU5ECisKKwkJCW5yPSQoKCRuci0xKSkKKwkJZG9uZQorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLXF1aWV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gMi8zOC1mYW5vdXQnICd0ZXN0X3NoYTFfYmFzZWQgInN8Xi4ufCYvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gMi8zOC1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gMi8yLzM2LWZhbm91dCcgJ3Rlc3Rfc2hhMV9iYXNlZCAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIDIvMi8zNi1mYW5vdXQnICd2ZXJpZnlfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gMi8yLzIvMzQtZmFub3V0JyAndGVzdF9zaGExX2Jhc2VkICJzfF5cKC4uXClcKC4uXClcKC4uXCl8XDEvXDIvXDMvfCInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbm90ZXMgaW4gMi8yLzIvMzQtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X3NhbWVfbm90ZXMgKCkgeworCSgKKwkJc3RhcnRfbm90ZV9jb21taXQgJiYKKwkJbnI9JG51bWJlcl9vZl9jb21taXRzICYmCisJCWdpdCByZXYtbGlzdCByZWZzL2hlYWRzL21hc3RlciB8CisJCXdoaWxlIHJlYWQgc2hhMTsgZG8KKwkJCWZpcnN0X25vdGVfcGF0aD0kKGVjaG8gIiRzaGExIiB8IHNlZCAiJDEiKQorCQkJc2Vjb25kX25vdGVfcGF0aD0kKGVjaG8gIiRzaGExIiB8IHNlZCAiJDIiKQorCQkJY2F0IDw8SU5QVVRfRU5EICYmCitNIDEwMDY0NCBpbmxpbmUgJHNlY29uZF9ub3RlX3BhdGgKK2RhdGEgPDxFT0YKK25vdGUgZm9yIGNvbW1pdCAjJG5yCitFT0YKKworTSAxMDA2NDQgaW5saW5lICRmaXJzdF9ub3RlX3BhdGgKK2RhdGEgPDxFT0YKK25vdGUgZm9yIGNvbW1pdCAjJG5yCitFT0YKKworSU5QVVRfRU5ECisKKwkJCW5yPSQoKCRuci0xKSkKKwkJZG9uZQorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLXF1aWV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc2FtZSBub3RlcyBpbiBubyBmYW5vdXQgYW5kIDIvMzgtZmFub3V0JyAndGVzdF9zYW1lX25vdGVzICJzfF4uLnwmL3wiICIiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNhbWUgbm90ZXMgaW4gbm8gZmFub3V0IGFuZCAyLzM4LWZhbm91dCcgJ3ZlcmlmeV9ub3RlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzYW1lIG5vdGVzIGluIG5vIGZhbm91dCBhbmQgMi8yLzM2LWZhbm91dCcgJ3Rlc3Rfc2FtZV9ub3RlcyAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiICIiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHNhbWUgbm90ZXMgaW4gbm8gZmFub3V0IGFuZCAyLzIvMzYtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNhbWUgbm90ZXMgaW4gMi8zOC1mYW5vdXQgYW5kIDIvMi8zNi1mYW5vdXQnICd0ZXN0X3NhbWVfbm90ZXMgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IiAic3xeLi58Ji98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzYW1lIG5vdGVzIGluIDIvMzgtZmFub3V0IGFuZCAyLzIvMzYtZmFub3V0JyAndmVyaWZ5X25vdGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNhbWUgbm90ZXMgaW4gMi8yLzIvMzQtZmFub3V0IGFuZCAyLzIvMzYtZmFub3V0JyAndGVzdF9zYW1lX25vdGVzICJzfF5cKC4uXClcKC4uXCl8XDEvXDIvfCIgInN8XlwoLi5cKVwoLi5cKVwoLi5cKXxcMS9cMi9cMy98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzYW1lIG5vdGVzIGluIDIvMi8yLzM0LWZhbm91dCBhbmQgMi8yLzM2LWZhbm91dCcgJ3ZlcmlmeV9ub3RlcycKKwordGVzdF9jb25jYXRlbmF0ZWRfbm90ZXMgKCkgeworCSgKKwkJc3RhcnRfbm90ZV9jb21taXQgJiYKKwkJbnI9JG51bWJlcl9vZl9jb21taXRzICYmCisJCWdpdCByZXYtbGlzdCByZWZzL2hlYWRzL21hc3RlciB8CisJCXdoaWxlIHJlYWQgc2hhMTsgZG8KKwkJCWZpcnN0X25vdGVfcGF0aD0kKGVjaG8gIiRzaGExIiB8IHNlZCAiJDEiKQorCQkJc2Vjb25kX25vdGVfcGF0aD0kKGVjaG8gIiRzaGExIiB8IHNlZCAiJDIiKQorCQkJY2F0IDw8SU5QVVRfRU5EICYmCitNIDEwMDY0NCBpbmxpbmUgJHNlY29uZF9ub3RlX3BhdGgKK2RhdGEgPDxFT0YKK3NlY29uZCBub3RlIGZvciBjb21taXQgIyRucgorRU9GCisKK00gMTAwNjQ0IGlubGluZSAkZmlyc3Rfbm90ZV9wYXRoCitkYXRhIDw8RU9GCitmaXJzdCBub3RlIGZvciBjb21taXQgIyRucgorRU9GCisKK0lOUFVUX0VORAorCisJCQlucj0kKCgkbnItMSkpCisJCWRvbmUKKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldAorfQorCit2ZXJpZnlfY29uY2F0ZW5hdGVkX25vdGVzICgpIHsKKwlnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gb3V0cHV0ICYmCisJaT0kbnVtYmVyX29mX2NvbW1pdHMgJiYKKwl3aGlsZSBbICRpIC1ndCAwIF07IGRvCisJCWVjaG8gIiAgICBjb21taXQgIyRpIiAmJgorCQllY2hvICIgICAgZmlyc3Qgbm90ZSBmb3IgY29tbWl0ICMkaSIgJiYKKwkJZWNobyAiICAgICIgJiYKKwkJZWNobyAiICAgIHNlY29uZCBub3RlIGZvciBjb21taXQgIyRpIiAmJgorCQlpPSQoKCRpLTEpKTsKKwlkb25lID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG5vdGVzIGluIG5vIGZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzM4LWZhbm91dCcgJ3Rlc3RfY29uY2F0ZW5hdGVkX25vdGVzICJzfF4uLnwmL3wiICIiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIG5vIGZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzM4LWZhbm91dCcgJ3ZlcmlmeV9jb25jYXRlbmF0ZWRfbm90ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgbm90ZXMgaW4gbm8gZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8zNi1mYW5vdXQnICd0ZXN0X2NvbmNhdGVuYXRlZF9ub3RlcyAic3xeXCguLlwpXCguLlwpfFwxL1wyL3wiICIiJwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG5vdGVzIGluIG5vIGZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzIvMzYtZmFub3V0JyAndmVyaWZ5X2NvbmNhdGVuYXRlZF9ub3RlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBub3RlcyBpbiAyLzM4LWZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzIvMzYtZmFub3V0JyAndGVzdF9jb25jYXRlbmF0ZWRfbm90ZXMgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IiAic3xeLi58Ji98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBub3RlcyBpbiAyLzM4LWZhbm91dCBjb25jYXRlbmF0ZWQgd2l0aCAyLzIvMzYtZmFub3V0JyAndmVyaWZ5X2NvbmNhdGVuYXRlZF9ub3RlcycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBub3RlcyBpbiAyLzIvMzYtZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8yLzM0LWZhbm91dCcgJ3Rlc3RfY29uY2F0ZW5hdGVkX25vdGVzICJzfF5cKC4uXClcKC4uXClcKC4uXCl8XDEvXDIvXDMvfCIgInN8XlwoLi5cKVwoLi5cKXxcMS9cMi98IicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBub3RlcyBpbiAyLzIvMzYtZmFub3V0IGNvbmNhdGVuYXRlZCB3aXRoIDIvMi8yLzM0LWZhbm91dCcgJ3ZlcmlmeV9jb25jYXRlbmF0ZWRfbm90ZXMnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwNC1ub3Rlcy1taXhlZC5zaCBiL3QvdDMzMDQtbm90ZXMtbWl4ZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTcwOWU4YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDQtbm90ZXMtbWl4ZWQuc2gKQEAgLTAsMCArMSwyMDYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG5vdGVzIHRyZWVzIHRoYXQgYWxzbyBjb250YWluIG5vbi1ub3RlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK251bWJlcl9vZl9jb21taXRzPTEwMAorCitzdGFydF9ub3RlX2NvbW1pdCAoKSB7CisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzCitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL2NvbW1pdHNeMAorZGVsZXRlYWxsCitJTlBVVF9FTkQKKworfQorCit2ZXJpZnlfbm90ZXMgKCkgeworCWdpdCBsb2cgfCBncmVwICJeICAgICIgPiBvdXRwdXQgJiYKKwlpPSRudW1iZXJfb2ZfY29tbWl0cyAmJgorCXdoaWxlIFsgJGkgLWd0IDAgXTsgZG8KKwkJZWNobyAiICAgIGNvbW1pdCAjJGkiICYmCisJCWVjaG8gIiAgICBub3RlIGZvciBjb21taXQgIyRpIiAmJgorCQlpPSQoKCRpLTEpKTsKKwlkb25lID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cDogY3JlYXRlIGEgY291cGxlIG9mIGNvbW1pdHMiICcKKworCXRlc3RfdGljayAmJgorCWNhdCA8PElOUFVUX0VORCA+aW5wdXQgJiYKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgIzEKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZmlsZQorZGF0YSA8PEVPRgorZmlsZSBpbiBjb21taXQgIzEKK0VPRgorCitJTlBVVF9FTkQKKworCXRlc3RfdGljayAmJgorCWNhdCA8PElOUFVUX0VORCA+PmlucHV0ICYmCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0ICMyCitDT01NSVQKKworTSA2NDQgaW5saW5lIGZpbGUKK2RhdGEgPDxFT0YKK2ZpbGUgaW4gY29tbWl0ICMyCitFT0YKKworSU5QVVRfRU5ECisJZ2l0IGZhc3QtaW1wb3J0IC0tcXVpZXQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSBhIG5vdGVzIHRyZWUgd2l0aCBib3RoIG5vdGVzIGFuZCBub24tbm90ZXMiICcKKworCWNvbW1pdDE9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyXikgJiYKKwljb21taXQyPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQgPmlucHV0ICYmCitjb21taXQgcmVmcy9ub3Rlcy9jb21taXRzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzIGNvbW1pdCAjMQorQ09NTUlUCisKK04gaW5saW5lICRjb21taXQxCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIzEKK0VPRgorCitOIGlubGluZSAkY29tbWl0MgorZGF0YSA8PEVPRgorbm90ZSBmb3IgY29tbWl0ICMyCitFT0YKKworSU5QVVRfRU5ECisJdGVzdF90aWNrICYmCisJY2F0IDw8SU5QVVRfRU5EID4+aW5wdXQgJiYKK2NvbW1pdCByZWZzL25vdGVzL2NvbW1pdHMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbm90ZXMgY29tbWl0ICMyCitDT01NSVQKKworTSA2NDQgaW5saW5lIGZvb2Jhci9ub24tbm90ZS50eHQKK2RhdGEgPDxFT0YKK0Egbm9uLW5vdGUgaW4gYSBub3RlcyB0cmVlCitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDIKK2RhdGEgPDxFT0YKK2VkaXRlZCBub3RlIGZvciBjb21taXQgIzIKK0VPRgorCitJTlBVVF9FTkQKKwl0ZXN0X3RpY2sgJiYKKwljYXQgPDxJTlBVVF9FTkQgPj5pbnB1dCAmJgorY29tbWl0IHJlZnMvbm90ZXMvY29tbWl0cworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyBjb21taXQgIzMKK0NPTU1JVAorCitOIGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgorZWRpdGVkIG5vdGUgZm9yIGNvbW1pdCAjMQorRU9GCisKK00gNjQ0IGlubGluZSBkZWFkYmVlZgorZGF0YSA8PEVPRgorbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRU9GCisKK00gNjQ0IGlubGluZSBkZS9hZGJlZWYKK2RhdGEgPDxFT0YKK2Fub3RoZXIgbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRU9GCisKK00gNjQ0IGlubGluZSBkZS9hZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZgorZGF0YSA8PEVPRgorVGhpcyBpcyBhY3R1YWxseSBhIHZhbGlkIG5vdGUsIGFsYmVpdCB0byBhIG5vbi1leGlzdGluZyBvYmplY3QuCitJdCBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gdHJpZ2dlciB0aGUgIm1pc2hhbmRsaW5nIiBvZiB0aGUgZGVhZC9iZWVmIG5vbi1ub3RlLgorRU9GCisKK00gNjQ0IGlubGluZSBkZWFkL2JlZWYKK2RhdGEgPDxFT0YKK3lldCBhbm90aGVyIG5vbi1ub3RlIHdpdGggU0hBMS1saWtlIG5hbWUKK0VPRgorCitJTlBVVF9FTkQKKwlnaXQgZmFzdC1pbXBvcnQgLS1xdWlldCA8aW5wdXQgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9jb21taXRzCisnCisKK2NhdCA+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGNvbW1pdCAjMgorICAgIGVkaXRlZCBub3RlIGZvciBjb21taXQgIzIKKyAgICBjb21taXQgIzEKKyAgICBlZGl0ZWQgbm90ZSBmb3IgY29tbWl0ICMxCitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInZlcmlmeSBjb250ZW50cyBvZiBub3RlcyIgJworCisJZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3Rfbm4xIDw8RVhQRUNUX0VORAorQSBub24tbm90ZSBpbiBhIG5vdGVzIHRyZWUKK0VYUEVDVF9FTkQKK2NhdCA+ZXhwZWN0X25uMiA8PEVYUEVDVF9FTkQKK25vbi1ub3RlIHdpdGggU0hBMS1saWtlIG5hbWUKK0VYUEVDVF9FTkQKK2NhdCA+ZXhwZWN0X25uMyA8PEVYUEVDVF9FTkQKK2Fub3RoZXIgbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRVhQRUNUX0VORAorY2F0ID5leHBlY3Rfbm40IDw8RVhQRUNUX0VORAoreWV0IGFub3RoZXIgbm9uLW5vdGUgd2l0aCBTSEExLWxpa2UgbmFtZQorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ2ZXJpZnkgY29udGVudHMgb2Ygbm9uLW5vdGVzIiAnCisKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmZvb2Jhci9ub24tbm90ZS50eHQgPiBhY3R1YWxfbm4xICYmCisJdGVzdF9jbXAgZXhwZWN0X25uMSBhY3R1YWxfbm4xICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvY29tbWl0czpkZWFkYmVlZiA+IGFjdHVhbF9ubjIgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm4yIGFjdHVhbF9ubjIgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmRlL2FkYmVlZiA+IGFjdHVhbF9ubjMgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm4zIGFjdHVhbF9ubjMgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmRlYWQvYmVlZiA+IGFjdHVhbF9ubjQgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm40IGFjdHVhbF9ubjQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0LW5vdGVzIHByZXNlcnZlcyBub24tbm90ZXMiICcKKworCXRlc3RfdGljayAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gImZvbyBiYXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInZlcmlmeSBjb250ZW50cyBvZiBub24tbm90ZXMgYWZ0ZXIgZ2l0LW5vdGVzIiAnCisKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmZvb2Jhci9ub24tbm90ZS50eHQgPiBhY3R1YWxfbm4xICYmCisJdGVzdF9jbXAgZXhwZWN0X25uMSBhY3R1YWxfbm4xICYmCisJZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvY29tbWl0czpkZWFkYmVlZiA+IGFjdHVhbF9ubjIgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm4yIGFjdHVhbF9ubjIgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmRlL2FkYmVlZiA+IGFjdHVhbF9ubjMgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm4zIGFjdHVhbF9ubjMgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9jb21taXRzOmRlYWQvYmVlZiA+IGFjdHVhbF9ubjQgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm40IGFjdHVhbF9ubjQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzA1LW5vdGVzLWZhbm91dC5zaCBiL3QvdDMzMDUtbm90ZXMtZmFub3V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0NDYwYmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzA1LW5vdGVzLWZhbm91dC5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGF0IGFkZGluZy9yZW1vdmluZyBtYW55IG5vdGVzIHRyaWdnZXJzIGF1dG9tYXRpYyBmYW5vdXQgcmVzdHJ1Y3R1cmluZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIG1hbnkgbm90ZXMgd2l0aCBnaXQtbm90ZXMnICcKKwludW1fbm90ZXM9MzAwICYmCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgJG51bV9ub3RlcworCWRvCisJCWk9JCgoJGkgKyAxKSkgJiYKKwkJdGVzdF90aWNrICYmCisJCWVjaG8gImZpbGUgZm9yIGNvbW1pdCAjJGkiID4gZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtcSAtbSAiY29tbWl0ICMkaSIgJiYKKwkJZ2l0IG5vdGVzIGFkZCAtbSAibm90ZSAjJGkiIHx8IHJldHVybiAxCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYW55IG5vdGVzIGNyZWF0ZWQgY29ycmVjdGx5IHdpdGggZ2l0LW5vdGVzJyAnCisJZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IG91dHB1dCAmJgorCWk9MzAwICYmCisJd2hpbGUgdGVzdCAkaSAtZ3QgMAorCWRvCisJCWVjaG8gIiAgICBjb21taXQgIyRpIiAmJgorCQllY2hvICIgICAgbm90ZSAjJGkiICYmCisJCWk9JCgoJGkgLSAxKSk7CisJZG9uZSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFueSBub3RlcyBjcmVhdGVkIHdpdGggZ2l0LW5vdGVzIHRyaWdnZXJzIGZhbm91dCcgJworCSMgRXhwZWN0IGVudGlyZSBub3RlcyB0cmVlIHRvIGhhdmUgYSBmYW5vdXQgPT0gMQorCWdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5IHJlZnMvbm90ZXMvY29tbWl0cyB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJY2FzZSAiJHBhdGgiIGluCisJCT8/Lz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/KQorCQkJOiB0cnVlCisJCQk7OworCQkqKQorCQkJZWNobyAiSW52YWxpZCBwYXRoIFwiJHBhdGhcIiIgJiYKKwkJCXJldHVybiAxCisJCQk7OworCQllc2FjCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBtb3N0IG5vdGVzIHdpdGggZ2l0LW5vdGVzJyAnCisJbnVtX25vdGVzPTI1MCAmJgorCWk9MCAmJgorCWdpdCByZXYtbGlzdCBIRUFEIHwKKwl3aGlsZSB0ZXN0ICRpIC1sdCAkbnVtX25vdGVzICYmIHJlYWQgc2hhMQorCWRvCisJCWk9JCgoJGkgKyAxKSkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBub3RlcyByZW1vdmUgIiRzaGExIiB8fAorCQlleGl0IDEKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vc3Qgbm90ZXMgZGVsZXRlZCBjb3JyZWN0bHkgd2l0aCBnaXQtbm90ZXMnICcKKwlnaXQgbG9nIEhFQUR+MjUwIHwgZ3JlcCAiXiAgICAiID4gb3V0cHV0ICYmCisJaT01MCAmJgorCXdoaWxlIHRlc3QgJGkgLWd0IDAKKwlkbworCQllY2hvICIgICAgY29tbWl0ICMkaSIgJiYKKwkJZWNobyAiICAgIG5vdGUgIyRpIiAmJgorCQlpPSQoKCRpIC0gMSkpOworCWRvbmUgPiBleHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW5nIG1vc3Qgbm90ZXMgdHJpZ2dlcnMgZmFub3V0IGNvbnNvbGlkYXRpb24nICcKKwkjIEV4cGVjdCBlbnRpcmUgbm90ZXMgdHJlZSB0byBoYXZlIGEgZmFub3V0ID09IDAKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSByZWZzL25vdGVzL2NvbW1pdHMgfAorCXdoaWxlIHJlYWQgcGF0aAorCWRvCisJCWNhc2UgIiRwYXRoIiBpbgorCQk/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/KQorCQkJOiB0cnVlCisJCQk7OworCQkqKQorCQkJZWNobyAiSW52YWxpZCBwYXRoIFwiJHBhdGhcIiIgJiYKKwkJCXJldHVybiAxCisJCQk7OworCQllc2FjCisJZG9uZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDYtbm90ZXMtcHJ1bmUuc2ggYi90L3QzMzA2LW5vdGVzLXBydW5lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg2YmY5MDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzA2LW5vdGVzLXBydW5lLnNoCkBAIC0wLDAgKzEsMTQxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgbm90ZXMgcHJ1bmUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogY3JlYXRlIGEgZmV3IGNvbW1pdHMgd2l0aCBub3RlcycgJworCisJOiA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gMXN0ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZSAjMSIgJiYKKwk6ID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAybmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlICMyIiAmJgorCTogPiBmaWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIDNyZCAmJgorCUNPTU1JVF9GSUxFPS5naXQvb2JqZWN0cy81ZS9lMWMzNWU4M2VhNDdjZDNjYzRmOGNiZWUwNTY4OTE1ZmJiYmQyOSAmJgorCXRlc3QgLWYgJENPTU1JVF9GSUxFICYmCisJdGVzdC1jaG10aW1lID0rMCAkQ09NTUlUX0ZJTEUgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlICMzIgorJworCitjYXQgPiBleHBlY3QgPDxFTkRfT0ZfTE9HCitjb21taXQgNWVlMWMzNWU4M2VhNDdjZDNjYzRmOGNiZWUwNTY4OTE1ZmJiYmQyOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBUaHUgQXByIDcgMTU6MTU6MTMgMjAwNSAtMDcwMAorCisgICAgM3JkCisKK05vdGVzOgorICAgIE5vdGUgIzMKKworY29tbWl0IDA4MzQxYWQ5ZTk0ZmFhMDg5ZDYwZmQzZjUyM2FmZmIyNWM2ZGExODkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAKKworICAgIDJuZAorCitOb3RlczoKKyAgICBOb3RlICMyCisKK2NvbW1pdCBhYjVmMzAyMDM1ZjJlN2FhZjA0MjY1ZjA4YjQyMDM0YzIzMjU2ZTFmCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIFRodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCisKKyAgICAxc3QKKworTm90ZXM6CisgICAgTm90ZSAjMQorRU5EX09GX0xPRworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgY29tbWl0cyBhbmQgbm90ZXMnICcKKworCWdpdCBsb2cgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBzb21lIGNvbW1pdHMnICcKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRH4xICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9bm93IEhFQUQgJiYKKwlnaXQgZ2MgLS1wcnVuZT1ub3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgY29tbWl0cyBhcmUgZ29uZScgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC1wIDVlZTFjMzVlODNlYTQ3Y2QzY2M0ZjhjYmVlMDU2ODkxNWZiYmJkMjkgJiYKKwlnaXQgY2F0LWZpbGUgLXAgMDgzNDFhZDllOTRmYWEwODlkNjBmZDNmNTIzYWZmYjI1YzZkYTE4OSAmJgorCWdpdCBjYXQtZmlsZSAtcCBhYjVmMzAyMDM1ZjJlN2FhZjA0MjY1ZjA4YjQyMDM0YzIzMjU2ZTFmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IG5vdGVzIGFyZSBzdGlsbCBwcmVzZW50JyAnCisKKwlnaXQgbm90ZXMgc2hvdyA1ZWUxYzM1ZTgzZWE0N2NkM2NjNGY4Y2JlZTA1Njg5MTVmYmJiZDI5ICYmCisJZ2l0IG5vdGVzIHNob3cgMDgzNDFhZDllOTRmYWEwODlkNjBmZDNmNTIzYWZmYjI1YzZkYTE4OSAmJgorCWdpdCBub3RlcyBzaG93IGFiNWYzMDIwMzVmMmU3YWFmMDQyNjVmMDhiNDIwMzRjMjMyNTZlMWYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLW4gZG9lcyBub3QgcmVtb3ZlIG5vdGVzJyAnCisKKwlnaXQgbm90ZXMgbGlzdCA+IGV4cGVjdCAmJgorCWdpdCBub3RlcyBwcnVuZSAtbiAmJgorCWdpdCBub3RlcyBsaXN0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKKzVlZTFjMzVlODNlYTQ3Y2QzY2M0ZjhjYmVlMDU2ODkxNWZiYmJkMjkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSAtbiBsaXN0cyBwcnVuYWJsZSBub3RlcycgJworCisKKwlnaXQgbm90ZXMgcHJ1bmUgLW4gPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgbm90ZXMnICcKKworCWdpdCBub3RlcyBwcnVuZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdGhhdCBub3RlcyBhcmUgZ29uZScgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIHNob3cgNWVlMWMzNWU4M2VhNDdjZDNjYzRmOGNiZWUwNTY4OTE1ZmJiYmQyOSAmJgorCWdpdCBub3RlcyBzaG93IDA4MzQxYWQ5ZTk0ZmFhMDg5ZDYwZmQzZjUyM2FmZmIyNWM2ZGExODkgJiYKKwlnaXQgbm90ZXMgc2hvdyBhYjVmMzAyMDM1ZjJlN2FhZjA0MjY1ZjA4YjQyMDM0YzIzMjU2ZTFmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBzb21lIGNvbW1pdHMnICcKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRH4xICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9bm93IEhFQUQgJiYKKwlnaXQgZ2MgLS1wcnVuZT1ub3cKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCiswODM0MWFkOWU5NGZhYTA4OWQ2MGZkM2Y1MjNhZmZiMjVjNmRhMTg5CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLXYgbm90ZXMnICcKKworCWdpdCBub3RlcyBwcnVuZSAtdiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbm90ZXMgYXJlIGdvbmUnICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBzaG93IDVlZTFjMzVlODNlYTQ3Y2QzY2M0ZjhjYmVlMDU2ODkxNWZiYmJkMjkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgc2hvdyAwODM0MWFkOWU5NGZhYTA4OWQ2MGZkM2Y1MjNhZmZiMjVjNmRhMTg5ICYmCisJZ2l0IG5vdGVzIHNob3cgYWI1ZjMwMjAzNWYyZTdhYWYwNDI2NWYwOGI0MjAzNGMyMzI1NmUxZgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMDctbm90ZXMtbWFuLnNoIGIvdC90MzMwNy1ub3Rlcy1tYW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWFhMzY2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDMzMDctbm90ZXMtbWFuLnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdFeGFtcGxlcyBmcm9tIHRoZSBnaXQtbm90ZXMgbWFuIHBhZ2UKKworTWFrZSBzdXJlIHRoZSBtYW51YWwgaXMgbm90IGZ1bGwgb2YgbGllcy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJdGVzdF9jb21taXQgQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGFtcGxlIDE6IG5vdGVzIHRvIGFkZCBhbiBBY2tlZC1ieSBsaW5lJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCSAgICBCCisKKwlOb3RlczoKKwkgICAgQWNrZWQtYnk6IEEgQyBLZXIgPGFja2VyQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBub3RlcyBhZGQgLW0gIkFja2VkLWJ5OiBBIEMgS2VyIDxhY2tlckBleGFtcGxlLmNvbT4iIEIgJiYKKwlnaXQgc2hvdyAtcyBCXntjb21taXR9ID5sb2cgJiYKKwl0YWlsIC1uIDQgbG9nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4YW1wbGUgMjogYmluYXJ5IG5vdGVzJyAnCisJY3AgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1iaW5hcnktMS5wbmcgLiAmJgorCWdpdCBjaGVja291dCBCICYmCisJYmxvYj0kKGdpdCBoYXNoLW9iamVjdCAtdyB0ZXN0LWJpbmFyeS0xLnBuZykgJiYKKwlnaXQgbm90ZXMgLS1yZWY9bG9nbyBhZGQgLUMgIiRibG9iIiAmJgorCWdpdCBub3RlcyAtLXJlZj1sb2dvIGNvcHkgQiBDICYmCisJZ2l0IG5vdGVzIC0tcmVmPWxvZ28gc2hvdyBDID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCB0ZXN0LWJpbmFyeS0xLnBuZyBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzA4LW5vdGVzLW1lcmdlLnNoIGIvdC90MzMwOC1ub3Rlcy1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNGQ4MmI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwOC1ub3Rlcy1tZXJnZS5zaApAQCAtMCwwICsxLDM2OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBKb2hhbiBIZXJsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgbWVyZ2luZyBvZiBub3RlcyB0cmVlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IDFzdCAmJgorCXRlc3RfY29tbWl0IDJuZCAmJgorCXRlc3RfY29tbWl0IDNyZCAmJgorCXRlc3RfY29tbWl0IDR0aCAmJgorCXRlc3RfY29tbWl0IDV0aCAmJgorCSMgQ3JlYXRlIG5vdGVzIG9uIDQgZmlyc3QgY29tbWl0cworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlcyBvbiAxc3QgY29tbWl0IiAxc3QgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlcyBvbiAzcmQgY29tbWl0IiAzcmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJOb3RlcyBvbiA0dGggY29tbWl0IiA0dGgKKycKKworY29tbWl0X3NoYTE9JChnaXQgcmV2LXBhcnNlIDFzdF57Y29tbWl0fSkKK2NvbW1pdF9zaGEyPSQoZ2l0IHJldi1wYXJzZSAybmRee2NvbW1pdH0pCitjb21taXRfc2hhMz0kKGdpdCByZXYtcGFyc2UgM3JkXntjb21taXR9KQorY29tbWl0X3NoYTQ9JChnaXQgcmV2LXBhcnNlIDR0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGE1PSQoZ2l0IHJldi1wYXJzZSA1dGhee2NvbW1pdH0pCisKK3ZlcmlmeV9ub3RlcyAoKSB7CisJbm90ZXNfcmVmPSIkMSIKKwlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBub3RlcyB8CisJCXNvcnQgPiJvdXRwdXRfbm90ZXNfJG5vdGVzX3JlZiIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X25vdGVzXyRub3Rlc19yZWYiICJvdXRwdXRfbm90ZXNfJG5vdGVzX3JlZiIgJiYKKwlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBsb2cgLS1mb3JtYXQ9IiVIICVzJW4lTiIgXAorCQk+Im91dHB1dF9sb2dfJG5vdGVzX3JlZiIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X2xvZ18kbm90ZXNfcmVmIiAib3V0cHV0X2xvZ18kbm90ZXNfcmVmIgorfQorCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorNWU5M2QyNDA4NGQzMmUxY2I2MWY3MDcwNTA1YjlkMjUzMGNjYTk4NyAkY29tbWl0X3NoYTQKKzgzNjY3MzFlZWVlNTM3ODdkMmJkZjhmYzFlZmY3ZDk0NzU3ZThkYTAgJGNvbW1pdF9zaGEzCitlZWRlODkwNjRjZDQyNDQxNTkwZDZhZmVjNmMzN2IzMjFhZGEzMzg5ICRjb21taXRfc2hhMgorZGFhNTVmZmFkNmNiOTliZjY0MjI2NTMyMTQ3ZmZjYWY1Y2U4YmRkMSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeCA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorCiskY29tbWl0X3NoYTQgNHRoCitOb3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK05vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAorTm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CitOb3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgaW5pdGlhbCBub3RlcyAoeCknICcKKwl2ZXJpZnlfbm90ZXMgeAorJworCitjcCBleHBlY3Rfbm90ZXNfeCBleHBlY3Rfbm90ZXNfeQorY3AgZXhwZWN0X2xvZ194IGV4cGVjdF9sb2dfeQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHRvIG1lcmdlIGVtcHR5IG5vdGVzIHJlZiBpbnRvIGVtcHR5IG5vdGVzIHJlZiAoeiA9PiB5KScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzL3kiIG5vdGVzIG1lcmdlIHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCB0byBtZXJnZSBpbnRvIHZhcmlvdXMgbm9uLW5vdGVzIHJlZnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9ub3RlcyIgbm90ZXMgbWVyZ2UgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzLyIgbm90ZXMgbWVyZ2UgeCAmJgorCW1rZGlyIC1wIC5naXQvcmVmcy9ub3Rlcy9kaXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9ub3Rlcy9kaXIiIG5vdGVzIG1lcmdlIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9ub3Rlcy9kaXIvIiBub3RlcyBtZXJnZSB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICJjb3JlLm5vdGVzUmVmPXJlZnMvaGVhZHMvbWFzdGVyIiBub3RlcyBtZXJnZSB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jICJjb3JlLm5vdGVzUmVmPXJlZnMvbm90ZXMveToiIG5vdGVzIG1lcmdlIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgImNvcmUubm90ZXNSZWY9cmVmcy9ub3Rlcy95OmZvbyIgbm90ZXMgbWVyZ2UgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyAiY29yZS5ub3Rlc1JlZj1yZWZzL25vdGVzL2Zvb157YmFyIiBub3RlcyBtZXJnZSB4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgdG8gbWVyZ2UgdmFyaW91cyBub24tbm90ZS10cmVlcycgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgcmVmcy9ub3RlcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSByZWZzL25vdGVzLyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSByZWZzL25vdGVzL2RpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSByZWZzL25vdGVzL2Rpci8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeDogJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeDpmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgZm9vXntiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugbm90ZXMgaW50byBlbXB0eSBub3RlcyByZWYgKHggPT4geSknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJZ2l0IG5vdGVzIG1lcmdlIHggJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCSMgeCBhbmQgeSBzaG91bGQgcG9pbnQgdG8gdGhlIHNhbWUgbm90ZXMgY29tbWl0CisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveCkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBlbXB0eSBub3RlcyByZWYgKHogPT4geSknICcKKwlnaXQgbm90ZXMgbWVyZ2UgeiAmJgorCSMgeSBzaG91bGQgbm90IGNoYW5nZSAoc3RpbGwgPT0geCkKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy94KSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBub3RlcyBvbiBvdGhlciBub3RlcyByZWYgKHkpJyAnCisJIyBOb3QgdG91Y2hpbmcgbm90ZXMgdG8gMXN0IGNvbW1pdAorCWdpdCBub3RlcyByZW1vdmUgMm5kICYmCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiTW9yZSBub3RlcyBvbiAzcmQgY29tbWl0IiAzcmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJOZXcgbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAiTm90ZXMgb24gNXRoIGNvbW1pdCIgNXRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHByZXZpb3VzIG5vdGVzIGNvbW1pdCAoeV4gPT4geSkgPT4gTm8tb3AnICcKKwlwcmVfc3RhdGU9IiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIiAmJgorCWdpdCBub3RlcyBtZXJnZSB5XiAmJgorCSMgeSBzaG91bGQgbm90IG1vdmUKKwl0ZXN0ICIkcHJlX3N0YXRlIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3kKKzBmMmVmYmQwMDI2MmYyZmQ0MWRmYWUzM2RmODc2NTYxOGVlYWNkOTkgJGNvbW1pdF9zaGE1CitkZWMyNTAyZGFjM2VhMTYxNTQzZjcxOTMwMDQ0ZGVmZjkzZmE5NDVjICRjb21taXRfc2hhNAorNDA2OWNkYjM5OWZkNDU0NjNlYzZlZWY4ZTA1MWExNmEwMzU5MmQ5MSAkY29tbWl0X3NoYTMKK2RhYTU1ZmZhZDZjYjk5YmY2NDIyNjUzMjE0N2ZmY2FmNWNlOGJkZDEgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3kgPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKK05vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAorTmV3IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAorTm90ZXMgb24gM3JkIGNvbW1pdAorCitNb3JlIG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAorCiskY29tbWl0X3NoYTEgMXN0CitOb3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgY2hhbmdlZCBub3RlcyBvbiBvdGhlciBub3RlcyByZWYgKHkpJyAnCisJdmVyaWZ5X25vdGVzIHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHVuY2hhbmdlZCBub3RlcyBvbiBvcmlnaW5hbCBub3RlcyByZWYgKHgpJyAnCisJdmVyaWZ5X25vdGVzIHgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb3JpZ2luYWwgbm90ZXMgKHgpIGludG8gY2hhbmdlZCBub3RlcyAoeSkgPT4gTm8tb3AnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLXZ2diB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgeAorJworCitjcCBleHBlY3Rfbm90ZXNfeSBleHBlY3Rfbm90ZXNfeAorY3AgZXhwZWN0X2xvZ195IGV4cGVjdF9sb2dfeAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjaGFuZ2VkICh5KSBpbnRvIG9yaWdpbmFsICh4KSA9PiBGYXN0LWZvcndhcmQnICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIG1lcmdlIHkgJiYKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5ICYmCisJIyB4IGFuZCB5IHNob3VsZCBwb2ludCB0byBzYW1lIHRoZSBub3RlcyBjb21taXQKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy94KSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGVtcHR5IG5vdGVzIHJlZiAoeiA9PiB5KScgJworCSMgUHJlcGFyZSBlbXB0eSAoYnV0IHZhbGlkKSBub3RlcyByZWYgKHopCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveiAmJgorCWdpdCBub3RlcyBhZGQgLW0gImZvbyIgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlICYmCisJZ2l0IG5vdGVzID5vdXRwdXRfbm90ZXNfeiAmJgorCXRlc3RfY21wIC9kZXYvbnVsbCBvdXRwdXRfbm90ZXNfeiAmJgorCSMgRG8gdGhlIG1lcmdlICh6ID0+IHkpCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCWdpdCBub3RlcyBtZXJnZSB6ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwkjIHkgc2hvdWxkIG5vIGxvbmdlciBwb2ludCB0byB0aGUgc2FtZSBub3RlcyBjb21taXQgYXMgeAorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3gpIiAhPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiCisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc195CiswZjJlZmJkMDAyNjJmMmZkNDFkZmFlMzNkZjg3NjU2MThlZWFjZDk5ICRjb21taXRfc2hhNQorZGVjMjUwMmRhYzNlYTE2MTU0M2Y3MTkzMDA0NGRlZmY5M2ZhOTQ1YyAkY29tbWl0X3NoYTQKKzQwNjljZGIzOTlmZDQ1NDYzZWM2ZWVmOGUwNTFhMTZhMDM1OTJkOTEgJGNvbW1pdF9zaGEzCitkMDAwZDMwZTZkZGNmY2UzYTgxMjJjNDAzMjI2YTJjZTJmZDA0ZDlkICRjb21taXRfc2hhMgorNDNhZGQ2YmQwYzhjMGJjODcxYWM3OTkxZTBmNTU3M2NmYmEyNzgwNCAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeSA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorTm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCitOZXcgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCitOb3RlcyBvbiAzcmQgY29tbWl0CisKK01vcmUgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCitOZXcgbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CitOb3RlcyBvbiAxc3QgY29tbWl0CisKK01vcmUgbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIG5vdGVzIG9uIG90aGVyIG5vdGVzIHJlZiAoeSknICcKKwkjIEFwcGVuZCB0byAxc3QgY29tbWl0IG5vdGVzCisJZ2l0IG5vdGVzIGFwcGVuZCAtbSAiTW9yZSBub3RlcyBvbiAxc3QgY29tbWl0IiAxc3QgJiYKKwkjIEFkZCBuZXcgbm90ZXMgdG8gMm5kIGNvbW1pdAorCWdpdCBub3RlcyBhZGQgLW0gIk5ldyBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwl2ZXJpZnlfbm90ZXMgeQorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorMGYyZWZiZDAwMjYyZjJmZDQxZGZhZTMzZGY4NzY1NjE4ZWVhY2Q5OSAkY29tbWl0X3NoYTUKKzFmMjU3YTNhOTAzMjg1NTdjNDUyZjA4MTdkNmNjNTBjODlkMzE1ZDQgJGNvbW1pdF9zaGE0CitkYWE1NWZmYWQ2Y2I5OWJmNjQyMjY1MzIxNDdmZmNhZjVjZThiZGQxICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ194IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCitOb3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK05ldyBub3RlcyBvbiA0dGggY29tbWl0CisKK01vcmUgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKKworJGNvbW1pdF9zaGExIDFzdAorTm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIG5vdGVzIG9uIG5vdGVzIHJlZiAoeCknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIHJlbW92ZSAzcmQgJiYKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICJNb3JlIG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCXZlcmlmeV9ub3RlcyB4CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc194CiswZjJlZmJkMDAyNjJmMmZkNDFkZmFlMzNkZjg3NjU2MThlZWFjZDk5ICRjb21taXRfc2hhNQorMWYyNTdhM2E5MDMyODU1N2M0NTJmMDgxN2Q2Y2M1MGM4OWQzMTVkNCAkY29tbWl0X3NoYTQKK2QwMDBkMzBlNmRkY2ZjZTNhODEyMmM0MDMyMjZhMmNlMmZkMDRkOWQgJGNvbW1pdF9zaGEyCis0M2FkZDZiZDBjOGMwYmM4NzFhYzc5OTFlMGY1NTczY2ZiYTI3ODA0ICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ194IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCitOb3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK05ldyBub3RlcyBvbiA0dGggY29tbWl0CisKK01vcmUgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKK05ldyBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK05vdGVzIG9uIDFzdCBjb21taXQKKworTW9yZSBub3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB5IGludG8geCA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgeSAmJgorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3cKKzA1YTQ5Mjc5NTFiY2VmMzQ3ZjUxNDg2NTc1Yjg3OGIyYjYwMTM3ZjIgJGNvbW1pdF9zaGEzCitkMDAwZDMwZTZkZGNmY2UzYTgxMjJjNDAzMjI2YTJjZTJmZDA0ZDlkICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ193IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKKworJGNvbW1pdF9zaGEzIDNyZAorTmV3IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAorTmV3IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5vdGVzIG9uIG5ldywgc2VwYXJhdGUgbm90ZXMgcmVmICh3KScgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3cgJiYKKwkjIEFkZCBzYW1lIG5vdGUgYXMgcmVmcy9ub3Rlcy95IG9uIDJuZCBjb21taXQKKwlnaXQgbm90ZXMgYWRkIC1tICJOZXcgbm90ZXMgb24gMm5kIGNvbW1pdCIgMm5kICYmCisJIyBBZGQgbmV3IG5vdGUgb24gM3JkIGNvbW1pdCAobm9uLWNvbmZsaWN0aW5nKQorCWdpdCBub3RlcyBhZGQgLW0gIk5ldyBub3RlcyBvbiAzcmQgY29tbWl0IiAzcmQgJiYKKwkjIFZlcmlmeSBzdGF0ZSBvZiBub3RlcyBvbiBuZXcsIHNlcGFyYXRlIG5vdGVzIHJlZiAodykKKwl2ZXJpZnlfbm90ZXMgdworJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorMGYyZWZiZDAwMjYyZjJmZDQxZGZhZTMzZGY4NzY1NjE4ZWVhY2Q5OSAkY29tbWl0X3NoYTUKKzFmMjU3YTNhOTAzMjg1NTdjNDUyZjA4MTdkNmNjNTBjODlkMzE1ZDQgJGNvbW1pdF9zaGE0CiswNWE0OTI3OTUxYmNlZjM0N2Y1MTQ4NjU3NWI4NzhiMmI2MDEzN2YyICRjb21taXRfc2hhMworZDAwMGQzMGU2ZGRjZmNlM2E4MTIyYzQwMzIyNmEyY2UyZmQwNGQ5ZCAkY29tbWl0X3NoYTIKKzQzYWRkNmJkMGM4YzBiYzg3MWFjNzk5MWUwZjU1NzNjZmJhMjc4MDQgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKK05vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAorTmV3IG5vdGVzIG9uIDR0aCBjb21taXQKKworTW9yZSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK05ldyBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK05ldyBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK05vdGVzIG9uIDFzdCBjb21taXQKKworTW9yZSBub3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB3IGludG8geCA9PiBOb24tY29uZmxpY3RpbmcgaGlzdG9yeS1sZXNzIG1lcmdlJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgorCWdpdCBub3RlcyBtZXJnZSB3ICYmCisJIyBWZXJpZnkgbmV3IHN0YXRlIG9mIG5vdGVzIG9uIG90aGVyIG5vdGVzIHJlZiAoeCkKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCSMgQWxzbyB2ZXJpZnkgdGhhdCBub3RoaW5nIGNoYW5nZWQgb24gb3RoZXIgbm90ZXMgcmVmcyAoeSBhbmQgdykKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyB3CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMwOS1ub3Rlcy1tZXJnZS1hdXRvLXJlc29sdmUuc2ggYi90L3QzMzA5LW5vdGVzLW1lcmdlLWF1dG8tcmVzb2x2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNGMyYWRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzMwOS1ub3Rlcy1tZXJnZS1hdXRvLXJlc29sdmUuc2gKQEAgLTAsMCArMSw3MjYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgSm9oYW4gSGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG5vdGVzIG1lcmdpbmcgd2l0aCBhdXRvLXJlc29sdmluZyBzdHJhdGVnaWVzJworCisuIC4vdGVzdC1saWIuc2gKKworIyBTZXQgdXAgYSBub3RlcyBtZXJnZSBzY2VuYXJpbyB3aXRoIGFsbCBraW5kcyBvZiBwb3RlbnRpYWwgY29uZmxpY3RzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21taXRzJyAnCisJdGVzdF9jb21taXQgMXN0ICYmCisJdGVzdF9jb21taXQgMm5kICYmCisJdGVzdF9jb21taXQgM3JkICYmCisJdGVzdF9jb21taXQgNHRoICYmCisJdGVzdF9jb21taXQgNXRoICYmCisJdGVzdF9jb21taXQgNnRoICYmCisJdGVzdF9jb21taXQgN3RoICYmCisJdGVzdF9jb21taXQgOHRoICYmCisJdGVzdF9jb21taXQgOXRoICYmCisJdGVzdF9jb21taXQgMTB0aCAmJgorCXRlc3RfY29tbWl0IDExdGggJiYKKwl0ZXN0X2NvbW1pdCAxMnRoICYmCisJdGVzdF9jb21taXQgMTN0aCAmJgorCXRlc3RfY29tbWl0IDE0dGggJiYKKwl0ZXN0X2NvbW1pdCAxNXRoCisnCisKK2NvbW1pdF9zaGExPSQoZ2l0IHJldi1wYXJzZSAxc3Ree2NvbW1pdH0pCitjb21taXRfc2hhMj0kKGdpdCByZXYtcGFyc2UgMm5kXntjb21taXR9KQorY29tbWl0X3NoYTM9JChnaXQgcmV2LXBhcnNlIDNyZF57Y29tbWl0fSkKK2NvbW1pdF9zaGE0PSQoZ2l0IHJldi1wYXJzZSA0dGhee2NvbW1pdH0pCitjb21taXRfc2hhNT0kKGdpdCByZXYtcGFyc2UgNXRoXntjb21taXR9KQorY29tbWl0X3NoYTY9JChnaXQgcmV2LXBhcnNlIDZ0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGE3PSQoZ2l0IHJldi1wYXJzZSA3dGhee2NvbW1pdH0pCitjb21taXRfc2hhOD0kKGdpdCByZXYtcGFyc2UgOHRoXntjb21taXR9KQorY29tbWl0X3NoYTk9JChnaXQgcmV2LXBhcnNlIDl0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExMD0kKGdpdCByZXYtcGFyc2UgMTB0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExMT0kKGdpdCByZXYtcGFyc2UgMTF0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExMj0kKGdpdCByZXYtcGFyc2UgMTJ0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExMz0kKGdpdCByZXYtcGFyc2UgMTN0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExND0kKGdpdCByZXYtcGFyc2UgMTR0aF57Y29tbWl0fSkKK2NvbW1pdF9zaGExNT0kKGdpdCByZXYtcGFyc2UgMTV0aF57Y29tbWl0fSkKKwordmVyaWZ5X25vdGVzICgpIHsKKwlub3Rlc19yZWY9IiQxIgorCXN1ZmZpeD0iJDIiCisJZ2l0IC1jIGNvcmUubm90ZXNSZWY9InJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgbm90ZXMgfAorCQlzb3J0ID4ib3V0cHV0X25vdGVzXyRzdWZmaXgiICYmCisJdGVzdF9jbXAgImV4cGVjdF9ub3Rlc18kc3VmZml4IiAib3V0cHV0X25vdGVzXyRzdWZmaXgiICYmCisJZ2l0IC1jIGNvcmUubm90ZXNSZWY9InJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgbG9nIC0tZm9ybWF0PSIlSCAlcyVuJU4iIFwKKwkJPiJvdXRwdXRfbG9nXyRzdWZmaXgiICYmCisJdGVzdF9jbXAgImV4cGVjdF9sb2dfJHN1ZmZpeCIgIm91dHB1dF9sb2dfJHN1ZmZpeCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbWVyZ2UgYmFzZSAoeCknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiA2dGggY29tbWl0IiA2dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDd0aCBjb21taXQiIDd0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gOHRoIGNvbW1pdCIgOHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiA5dGggY29tbWl0IiA5dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDEwdGggY29tbWl0IiAxMHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAxMXRoIGNvbW1pdCIgMTF0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gMTJ0aCBjb21taXQiIDEydGggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDEzdGggY29tbWl0IiAxM3RoICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAxNHRoIGNvbW1pdCIgMTR0aCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gMTV0aCBjb21taXQiIDE1dGgKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3gKKzQ1N2E4NWQ2YzgxNGVhMjA4NTUwZjE1ZmNjNDhmODA0YWM4ZGMwMjMgJGNvbW1pdF9zaGExNQorYjBjOTViOTU0MzAxZDY5ZGEyYmMzNzIzZjRjYjE2ODBkMzU1OTM3YyAkY29tbWl0X3NoYTE0Cis1ZDMwMjE2YTEyOWVlZmZhOTdkOTY5NGZmZThjNzQzMTdhNTYwMzE1ICRjb21taXRfc2hhMTMKK2RkMTYxYmMxNDk0NzBmZDg5MGRkNGFiNTJhNGNiZDc5YmJkMThjMzYgJGNvbW1pdF9zaGExMgorN2FiYmM0NTEyNmQ2ODAzMzZmYjI0Mjk0ZjAxM2E3Y2RmYTNlZDU0NSAkY29tbWl0X3NoYTExCitiOGQwM2UxNzNmNjdmNjUwNWE3NmY2ZTAwY2Y5MzQ0MDIwMGRkOWJlICRjb21taXRfc2hhMTAKKzIwYzYxM2M4MzUwMTFjNDhhNWFiZTI5MTcwYTI0MDJjYTYzNTQ5MTAgJGNvbW1pdF9zaGE5CithM2RhZjhhMWU0ZTVkYzM0MDlhMzAzYWQ4NDgxZDU3YmZlYTdmNWQ2ICRjb21taXRfc2hhOAorODk3MDAzMzIyYjUzYmM2Y2EwOThlOTMyNGVlNTA4MzYyMzQ3ZTczNCAkY29tbWl0X3NoYTcKKzExZDk3ZmRlYmZhNWNlZWU1NDBhM2RhMDdiY2U2ZmEwMjIyYmMwODIgJGNvbW1pdF9zaGE2CitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhMTUgMTV0aAoreCBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3ggbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit4IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAoreCBub3RlcyBvbiAxMnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTExIDExdGgKK3ggbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKK3ggbm90ZXMgb24gOXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTggOHRoCit4IG5vdGVzIG9uIDh0aCBjb21taXQKKworJGNvbW1pdF9zaGE3IDd0aAoreCBub3RlcyBvbiA3dGggY29tbWl0CisKKyRjb21taXRfc2hhNiA2dGgKK3ggbm90ZXMgb24gNnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKKworJGNvbW1pdF9zaGEzIDNyZAorCiskY29tbWl0X3NoYTIgMm5kCisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzdGF0ZSBvZiBtZXJnZSBiYXNlICh4KScgJ3ZlcmlmeV9ub3RlcyB4IHgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGxvY2FsIGJyYW5jaCAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gM3JkIGNvbW1pdCIgM3JkICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiA0dGggY29tbWl0IiA0dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDV0aCBjb21taXQiIDV0aCAmJgorCWdpdCBub3RlcyByZW1vdmUgNnRoICYmCisJZ2l0IG5vdGVzIHJlbW92ZSA3dGggJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDh0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gMTJ0aCBjb21taXQiIDEydGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDEzdGggY29tbWl0IiAxM3RoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAxNHRoIGNvbW1pdCIgMTR0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInkgbm90ZXMgb24gMTV0aCBjb21taXQiIDE1dGgKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3kKKzY4Yjg2MzBkMjU1MTYwMjhiZWQ4NjI3MTk4NTViM2Q2NzY4ZDc4MzMgJGNvbW1pdF9zaGExNQorNWRlN2VhN2FkNGY0N2U3ZmY5MTk4OWZiODIyMzQ2MzQ3MzBmNzVkZiAkY29tbWl0X3NoYTE0CiszYTYzMWZkYjZmNDFiMDViNTVkOGY0YmFmMjA3MjhiYThmNmZjY2JjICRjb21taXRfc2hhMTMKK2E2NjA1NWZhODJmN2EwM2ZlMGMwMmE2YWJhMzI4N2E4NWFiZjdjNjIgJGNvbW1pdF9zaGExMgorN2FiYmM0NTEyNmQ2ODAzMzZmYjI0Mjk0ZjAxM2E3Y2RmYTNlZDU0NSAkY29tbWl0X3NoYTExCitiOGQwM2UxNzNmNjdmNjUwNWE3NmY2ZTAwY2Y5MzQ0MDIwMGRkOWJlICRjb21taXRfc2hhMTAKKzIwYzYxM2M4MzUwMTFjNDhhNWFiZTI5MTcwYTI0MDJjYTYzNTQ5MTAgJGNvbW1pdF9zaGE5CisxNTQ1MDhjN2EwYmNhZDgyYjZmZTRiNDcyYmM0YzI2YjNiZjA4MjViICRjb21taXRfc2hhNQorZTJiZmQwNmEzN2RkMjAzMTY4NGE1OWE2ZTJiMDMzZTIxMjIzOWM3OCAkY29tbWl0X3NoYTQKKzU3NzJmNDI0MDhjMGRkNmYwOTdhN2NhMmQyNGRlMGU3OGQxYzQ2YjEgJGNvbW1pdF9zaGEzCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3kgPDxFT0YKKyRjb21taXRfc2hhMTUgMTV0aAoreSBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit5IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAoreSBub3RlcyBvbiAxMnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTExIDExdGgKK3ggbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKK3ggbm90ZXMgb24gOXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTggOHRoCisKKyRjb21taXRfc2hhNyA3dGgKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit5IG5vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAoreSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK3kgbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzdGF0ZSBvZiBsb2NhbCBicmFuY2ggKHkpJyAndmVyaWZ5X25vdGVzIHkgeScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVtb3RlIGJyYW5jaCAoeiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3ogcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveiAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gMm5kIGNvbW1pdCIgMm5kICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiA0dGggY29tbWl0IiA0dGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ6IG5vdGVzIG9uIDV0aCBjb21taXQiIDV0aCAmJgorCWdpdCBub3RlcyByZW1vdmUgNnRoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieiBub3RlcyBvbiA4dGggY29tbWl0IiA4dGggJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDl0aCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gMTF0aCBjb21taXQiIDExdGggJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDEydGggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDE0dGggY29tbWl0IiAxNHRoICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieiBub3RlcyBvbiAxNXRoIGNvbW1pdCIgMTV0aAorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfegorOWI0YjJjNjFmMDYxNTQxMmRhM2MxMGY5OGZmODViNTdjMDRlYzc2NSAkY29tbWl0X3NoYTE1Cis1ZGU3ZWE3YWQ0ZjQ3ZTdmZjkxOTg5ZmI4MjIzNDYzNDczMGY3NWRmICRjb21taXRfc2hhMTQKKzVkMzAyMTZhMTI5ZWVmZmE5N2Q5Njk0ZmZlOGM3NDMxN2E1NjAzMTUgJGNvbW1pdF9zaGExMworN2UzYzUzNTAzYTNkYjhkZDk5NmNiNjJlMzdjNjZlMDcwYjQ0YjU0ZCAkY29tbWl0X3NoYTExCitiOGQwM2UxNzNmNjdmNjUwNWE3NmY2ZTAwY2Y5MzQ0MDIwMGRkOWJlICRjb21taXRfc2hhMTAKKzg1MWUxNjM4Nzg0YTg4NGM3ZGQyNmM1ZDQxZjMzNDBmNjM4NzQxM2EgJGNvbW1pdF9zaGE4Cis4OTcwMDMzMjJiNTNiYzZjYTA5OGU5MzI0ZWU1MDgzNjIzNDdlNzM0ICRjb21taXRfc2hhNworOTlmYzM0YWRmYzQwMGI5NWM2N2IwMTMxMTVlMzdlMzFhYTlhNmQyMyAkY29tbWl0X3NoYTUKK2UyYmZkMDZhMzdkZDIwMzE2ODRhNTlhNmUyYjAzM2UyMTIyMzljNzggJGNvbW1pdF9zaGE0CisyODNiNDgyMTlhZWU5YTQxMDVmNmNhYjMzN2U3ODkwNjVjODJjMmI5ICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ196IDw8RU9GCiskY29tbWl0X3NoYTE1IDE1dGgKK3ogbm90ZXMgb24gMTV0aCBjb21taXQKKworJGNvbW1pdF9zaGExNCAxNHRoCit5IG5vdGVzIG9uIDE0dGggY29tbWl0CisKKyRjb21taXRfc2hhMTMgMTN0aAoreCBub3RlcyBvbiAxM3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTEyIDEydGgKKworJGNvbW1pdF9zaGExMSAxMXRoCit6IG5vdGVzIG9uIDExdGggY29tbWl0CisKKyRjb21taXRfc2hhMTAgMTB0aAoreCBub3RlcyBvbiAxMHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTkgOXRoCisKKyRjb21taXRfc2hhOCA4dGgKK3ogbm90ZXMgb24gOHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTcgN3RoCit4IG5vdGVzIG9uIDd0aCBjb21taXQKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit6IG5vdGVzIG9uIDV0aCBjb21taXQKKworJGNvbW1pdF9zaGE0IDR0aAoreSBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzdGF0ZSBvZiByZW1vdGUgYnJhbmNoICh6KScgJ3ZlcmlmeV9ub3RlcyB6IHonCisKKyMgQXQgdGhpcyBwb2ludCwgYmVmb3JlIG1lcmdpbmcgeiBpbnRvIHksIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBzdGF0dXM6CisjCisjIGNvbW1pdCB8IGJhc2UveCAgfCBsb2NhbC95IHwgcmVtb3RlL3ogfCBkaWZmIGZyb20geCB0byB5L3ogICAgICAgICB8IHJlc3VsdAorIyAtLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0KKyMgMXN0ICAgIHwgW25vbmVdICB8IFtub25lXSAgfCBbbm9uZV0gICB8IHVuY2hhbmdlZCAvIHVuY2hhbmdlZCAgICAgIHwgW25vbmVdCisjIDJuZCAgICB8IFtub25lXSAgfCBbbm9uZV0gIHwgMjgzYjQ4MiAgfCB1bmNoYW5nZWQgLyBhZGRlZCAgICAgICAgICB8IDI4M2I0ODIKKyMgM3JkICAgIHwgW25vbmVdICB8IDU3NzJmNDIgfCBbbm9uZV0gICB8IGFkZGVkICAgICAvIHVuY2hhbmdlZCAgICAgIHwgNTc3MmY0MgorIyA0dGggICAgfCBbbm9uZV0gIHwgZTJiZmQwNiB8IGUyYmZkMDYgIHwgYWRkZWQgICAgIC8gYWRkZWQgKHNhbWUpICAgfCBlMmJmZDA2CisjIDV0aCAgICB8IFtub25lXSAgfCAxNTQ1MDhjIHwgOTlmYzM0YSAgfCBhZGRlZCAgICAgLyBhZGRlZCAoZGlmZikgICB8ID8/PworIyA2dGggICAgfCAxMWQ5N2ZkIHwgW25vbmVdICB8IFtub25lXSAgIHwgcmVtb3ZlZCAgIC8gcmVtb3ZlZCAgICAgICAgfCBbbm9uZV0KKyMgN3RoICAgIHwgODk3MDAzMyB8IFtub25lXSAgfCA4OTcwMDMzICB8IHJlbW92ZWQgICAvIHVuY2hhbmdlZCAgICAgIHwgW25vbmVdCisjIDh0aCAgICB8IGEzZGFmOGEgfCBbbm9uZV0gIHwgODUxZTE2MyAgfCByZW1vdmVkICAgLyBjaGFuZ2VkICAgICAgICB8ID8/PworIyA5dGggICAgfCAyMGM2MTNjIHwgMjBjNjEzYyB8IFtub25lXSAgIHwgdW5jaGFuZ2VkIC8gcmVtb3ZlZCAgICAgICAgfCBbbm9uZV0KKyMgMTB0aCAgIHwgYjhkMDNlMSB8IGI4ZDAzZTEgfCBiOGQwM2UxICB8IHVuY2hhbmdlZCAvIHVuY2hhbmdlZCAgICAgIHwgYjhkMDNlMQorIyAxMXRoICAgfCA3YWJiYzQ1IHwgN2FiYmM0NSB8IDdlM2M1MzUgIHwgdW5jaGFuZ2VkIC8gY2hhbmdlZCAgICAgICAgfCA3ZTNjNTM1CisjIDEydGggICB8IGRkMTYxYmMgfCBhNjYwNTVmIHwgW25vbmVdICAgfCBjaGFuZ2VkICAgLyByZW1vdmVkICAgICAgICB8ID8/PworIyAxM3RoICAgfCA1ZDMwMjE2IHwgM2E2MzFmZCB8IDVkMzAyMTYgIHwgY2hhbmdlZCAgIC8gdW5jaGFuZ2VkICAgICAgfCAzYTYzMWZkCisjIDE0dGggICB8IGIwYzk1YjkgfCA1ZGU3ZWE3IHwgNWRlN2VhNyAgfCBjaGFuZ2VkICAgLyBjaGFuZ2VkIChzYW1lKSB8IDVkZTdlYTcKKyMgMTV0aCAgIHwgNDU3YTg1ZCB8IDY4Yjg2MzAgfCA5YjRiMmM2ICB8IGNoYW5nZWQgICAvIGNoYW5nZWQgKGRpZmYpIHwgPz8/CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggaW52YWxpZCBzdHJhdGVneSA9PiBGYWlsL05vIGNoYW5nZXMnICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9Zm9vIHogJiYKKwkjIFZlcmlmeSBubyBjaGFuZ2VzICh5KQorCXZlcmlmeV9ub3RlcyB5IHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2l0aCBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uID0+IEZhaWwvTm8gY2hhbmdlcycgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbm90ZXMubWVyZ2VTdHJhdGVneT0iZm9vIiBub3RlcyBtZXJnZSB6ICYmCisJIyBWZXJpZnkgbm8gY2hhbmdlcyAoeSkKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc19vdXJzCis2OGI4NjMwZDI1NTE2MDI4YmVkODYyNzE5ODU1YjNkNjc2OGQ3ODMzICRjb21taXRfc2hhMTUKKzVkZTdlYTdhZDRmNDdlN2ZmOTE5ODlmYjgyMjM0NjM0NzMwZjc1ZGYgJGNvbW1pdF9zaGExNAorM2E2MzFmZGI2ZjQxYjA1YjU1ZDhmNGJhZjIwNzI4YmE4ZjZmY2NiYyAkY29tbWl0X3NoYTEzCithNjYwNTVmYTgyZjdhMDNmZTBjMDJhNmFiYTMyODdhODVhYmY3YzYyICRjb21taXRfc2hhMTIKKzdlM2M1MzUwM2EzZGI4ZGQ5OTZjYjYyZTM3YzY2ZTA3MGI0NGI1NGQgJGNvbW1pdF9zaGExMQorYjhkMDNlMTczZjY3ZjY1MDVhNzZmNmUwMGNmOTM0NDAyMDBkZDliZSAkY29tbWl0X3NoYTEwCisxNTQ1MDhjN2EwYmNhZDgyYjZmZTRiNDcyYmM0YzI2YjNiZjA4MjViICRjb21taXRfc2hhNQorZTJiZmQwNmEzN2RkMjAzMTY4NGE1OWE2ZTJiMDMzZTIxMjIzOWM3OCAkY29tbWl0X3NoYTQKKzU3NzJmNDI0MDhjMGRkNmYwOTdhN2NhMmQyNGRlMGU3OGQxYzQ2YjEgJGNvbW1pdF9zaGEzCisyODNiNDgyMTlhZWU5YTQxMDVmNmNhYjMzN2U3ODkwNjVjODJjMmI5ICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ19vdXJzIDw8RU9GCiskY29tbWl0X3NoYTE1IDE1dGgKK3kgbm90ZXMgb24gMTV0aCBjb21taXQKKworJGNvbW1pdF9zaGExNCAxNHRoCit5IG5vdGVzIG9uIDE0dGggY29tbWl0CisKKyRjb21taXRfc2hhMTMgMTN0aAoreSBub3RlcyBvbiAxM3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTEyIDEydGgKK3kgbm90ZXMgb24gMTJ0aCBjb21taXQKKworJGNvbW1pdF9zaGExMSAxMXRoCit6IG5vdGVzIG9uIDExdGggY29tbWl0CisKKyRjb21taXRfc2hhMTAgMTB0aAoreCBub3RlcyBvbiAxMHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTkgOXRoCisKKyRjb21taXRfc2hhOCA4dGgKKworJGNvbW1pdF9zaGE3IDd0aAorCiskY29tbWl0X3NoYTYgNnRoCisKKyRjb21taXRfc2hhNSA1dGgKK3kgbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aXRoICJvdXJzIiBzdHJhdGVneSA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT1vdXJzIHogJiYKKwl2ZXJpZnlfbm90ZXMgeSBvdXJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggIm91cnMiIGNvbmZpZ3VyYXRpb24gb3B0aW9uID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCAtYyBub3Rlcy5tZXJnZVN0cmF0ZWd5PSJvdXJzIiBub3RlcyBtZXJnZSB6ICYmCisJdmVyaWZ5X25vdGVzIHkgb3VycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB0byBwcmUtbWVyZ2Ugc3RhdGUgKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveV4xICYmCisJIyBWZXJpZnkgcHJlLW1lcmdlIHN0YXRlCisJdmVyaWZ5X25vdGVzIHkgeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aXRoICJvdXJzIiBwZXItcmVmIGNvbmZpZ3VyYXRpb24gb3B0aW9uID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCAtYyBub3Rlcy55Lm1lcmdlU3RyYXRlZ3k9Im91cnMiIG5vdGVzIG1lcmdlIHogJiYKKwl2ZXJpZnlfbm90ZXMgeSBvdXJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc190aGVpcnMKKzliNGIyYzYxZjA2MTU0MTJkYTNjMTBmOThmZjg1YjU3YzA0ZWM3NjUgJGNvbW1pdF9zaGExNQorNWRlN2VhN2FkNGY0N2U3ZmY5MTk4OWZiODIyMzQ2MzQ3MzBmNzVkZiAkY29tbWl0X3NoYTE0CiszYTYzMWZkYjZmNDFiMDViNTVkOGY0YmFmMjA3MjhiYThmNmZjY2JjICRjb21taXRfc2hhMTMKKzdlM2M1MzUwM2EzZGI4ZGQ5OTZjYjYyZTM3YzY2ZTA3MGI0NGI1NGQgJGNvbW1pdF9zaGExMQorYjhkMDNlMTczZjY3ZjY1MDVhNzZmNmUwMGNmOTM0NDAyMDBkZDliZSAkY29tbWl0X3NoYTEwCis4NTFlMTYzODc4NGE4ODRjN2RkMjZjNWQ0MWYzMzQwZjYzODc0MTNhICRjb21taXRfc2hhOAorOTlmYzM0YWRmYzQwMGI5NWM2N2IwMTMxMTVlMzdlMzFhYTlhNmQyMyAkY29tbWl0X3NoYTUKK2UyYmZkMDZhMzdkZDIwMzE2ODRhNTlhNmUyYjAzM2UyMTIyMzljNzggJGNvbW1pdF9zaGE0Cis1NzcyZjQyNDA4YzBkZDZmMDk3YTdjYTJkMjRkZTBlNzhkMWM0NmIxICRjb21taXRfc2hhMworMjgzYjQ4MjE5YWVlOWE0MTA1ZjZjYWIzMzdlNzg5MDY1YzgyYzJiOSAkY29tbWl0X3NoYTIKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfdGhlaXJzIDw8RU9GCiskY29tbWl0X3NoYTE1IDE1dGgKK3ogbm90ZXMgb24gMTV0aCBjb21taXQKKworJGNvbW1pdF9zaGExNCAxNHRoCit5IG5vdGVzIG9uIDE0dGggY29tbWl0CisKKyRjb21taXRfc2hhMTMgMTN0aAoreSBub3RlcyBvbiAxM3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTEyIDEydGgKKworJGNvbW1pdF9zaGExMSAxMXRoCit6IG5vdGVzIG9uIDExdGggY29tbWl0CisKKyRjb21taXRfc2hhMTAgMTB0aAoreCBub3RlcyBvbiAxMHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTkgOXRoCisKKyRjb21taXRfc2hhOCA4dGgKK3ogbm90ZXMgb24gOHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTcgN3RoCisKKyRjb21taXRfc2hhNiA2dGgKKworJGNvbW1pdF9zaGE1IDV0aAoreiBub3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK3kgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit5IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggInRoZWlycyIgc3RyYXRlZ3kgPT4gTm9uLWNvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9dGhlaXJzIHogJiYKKwl2ZXJpZnlfbm90ZXMgeSB0aGVpcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdG8gcHJlLW1lcmdlIHN0YXRlICh5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3leMSAmJgorCSMgVmVyaWZ5IHByZS1tZXJnZSBzdGF0ZQorCXZlcmlmeV9ub3RlcyB5IHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgeiBpbnRvIHkgd2l0aCAidGhlaXJzIiBzdHJhdGVneSBvdmVycmlkaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9uICJvdXJzIiA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgLWMgbm90ZXMubWVyZ2VTdHJhdGVneT0ib3VycyIgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT10aGVpcnMgeiAmJgorCXZlcmlmeV9ub3RlcyB5IHRoZWlycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB0byBwcmUtbWVyZ2Ugc3RhdGUgKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveV4xICYmCisJIyBWZXJpZnkgcHJlLW1lcmdlIHN0YXRlCisJdmVyaWZ5X25vdGVzIHkgeQorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdW5pb24KKzdjNGU1NDZlZmQwZmU5MzlmODc2YmViMjYyZWNlMDI3OTc4ODBiNTQgJGNvbW1pdF9zaGExNQorNWRlN2VhN2FkNGY0N2U3ZmY5MTk4OWZiODIyMzQ2MzQ3MzBmNzVkZiAkY29tbWl0X3NoYTE0CiszYTYzMWZkYjZmNDFiMDViNTVkOGY0YmFmMjA3MjhiYThmNmZjY2JjICRjb21taXRfc2hhMTMKK2E2NjA1NWZhODJmN2EwM2ZlMGMwMmE2YWJhMzI4N2E4NWFiZjdjNjIgJGNvbW1pdF9zaGExMgorN2UzYzUzNTAzYTNkYjhkZDk5NmNiNjJlMzdjNjZlMDcwYjQ0YjU0ZCAkY29tbWl0X3NoYTExCitiOGQwM2UxNzNmNjdmNjUwNWE3NmY2ZTAwY2Y5MzQ0MDIwMGRkOWJlICRjb21taXRfc2hhMTAKKzg1MWUxNjM4Nzg0YTg4NGM3ZGQyNmM1ZDQxZjMzNDBmNjM4NzQxM2EgJGNvbW1pdF9zaGE4Cis2Yzg0MWNjMzZlYTQ5NjAyNzI5MDk2N2NhOTZiZDJiZWY1NGRiYjQ3ICRjb21taXRfc2hhNQorZTJiZmQwNmEzN2RkMjAzMTY4NGE1OWE2ZTJiMDMzZTIxMjIzOWM3OCAkY29tbWl0X3NoYTQKKzU3NzJmNDI0MDhjMGRkNmYwOTdhN2NhMmQyNGRlMGU3OGQxYzQ2YjEgJGNvbW1pdF9zaGEzCisyODNiNDgyMTlhZWU5YTQxMDVmNmNhYjMzN2U3ODkwNjVjODJjMmI5ICRjb21taXRfc2hhMgorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ191bmlvbiA8PEVPRgorJGNvbW1pdF9zaGExNSAxNXRoCit5IG5vdGVzIG9uIDE1dGggY29tbWl0CisKK3ogbm90ZXMgb24gMTV0aCBjb21taXQKKworJGNvbW1pdF9zaGExNCAxNHRoCit5IG5vdGVzIG9uIDE0dGggY29tbWl0CisKKyRjb21taXRfc2hhMTMgMTN0aAoreSBub3RlcyBvbiAxM3RoIGNvbW1pdAorCiskY29tbWl0X3NoYTEyIDEydGgKK3kgbm90ZXMgb24gMTJ0aCBjb21taXQKKworJGNvbW1pdF9zaGExMSAxMXRoCit6IG5vdGVzIG9uIDExdGggY29tbWl0CisKKyRjb21taXRfc2hhMTAgMTB0aAoreCBub3RlcyBvbiAxMHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTkgOXRoCisKKyRjb21taXRfc2hhOCA4dGgKK3ogbm90ZXMgb24gOHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTcgN3RoCisKKyRjb21taXRfc2hhNiA2dGgKKworJGNvbW1pdF9zaGE1IDV0aAoreSBub3RlcyBvbiA1dGggY29tbWl0CisKK3ogbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aXRoICJ1bmlvbiIgc3RyYXRlZ3kgPT4gTm9uLWNvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9dW5pb24geiAmJgorCXZlcmlmeV9ub3RlcyB5IHVuaW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggInVuaW9uIiBzdHJhdGVneSBvdmVycmlkaW5nIHBlci1yZWYgY29uZmlndXJhdGlvbiA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgLWMgbm90ZXMueS5tZXJnZVN0cmF0ZWd5PSJ0aGVpcnMiIG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9dW5pb24geiAmJgorCXZlcmlmeV9ub3RlcyB5IHVuaW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy95XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeSB5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdpdGggInVuaW9uIiBwZXItcmVmIG92ZXJyaWRpbmcgZ2VuZXJhbCBjb25maWd1cmF0aW9uID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCAtYyBub3Rlcy55Lm1lcmdlU3RyYXRlZ3k9InVuaW9uIiAtYyBub3Rlcy5tZXJnZVN0cmF0ZWd5PSJ0aGVpcnMiIG5vdGVzIG1lcmdlIHogJiYKKwl2ZXJpZnlfbm90ZXMgeSB1bmlvbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB0byBwcmUtbWVyZ2Ugc3RhdGUgKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveV4xICYmCisJIyBWZXJpZnkgcHJlLW1lcmdlIHN0YXRlCisJdmVyaWZ5X25vdGVzIHkgeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8geSB3aXRoICJtYW51YWwiIHBlci1yZWYgb25seSBjaGVja3Mgc3BlY2lmaWMgcmVmIGNvbmZpZ3VyYXRpb24gPT4gQ29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgbm90ZXMuei5tZXJnZVN0cmF0ZWd5PSJ1bmlvbiIgbm90ZXMgbWVyZ2UgeiAmJgorCWdpdCBub3RlcyBtZXJnZSAtLWFib3J0ICYmCisJdmVyaWZ5X25vdGVzIHkgeQorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdW5pb24yCitkNjgyMTA3YjhiZjdhN2FlYTFlNTM3YThkNWNiNmExMmI2MDEzNWYxICRjb21taXRfc2hhMTUKKzVkZTdlYTdhZDRmNDdlN2ZmOTE5ODlmYjgyMjM0NjM0NzMwZjc1ZGYgJGNvbW1pdF9zaGExNAorM2E2MzFmZGI2ZjQxYjA1YjU1ZDhmNGJhZjIwNzI4YmE4ZjZmY2NiYyAkY29tbWl0X3NoYTEzCithNjYwNTVmYTgyZjdhMDNmZTBjMDJhNmFiYTMyODdhODVhYmY3YzYyICRjb21taXRfc2hhMTIKKzdlM2M1MzUwM2EzZGI4ZGQ5OTZjYjYyZTM3YzY2ZTA3MGI0NGI1NGQgJGNvbW1pdF9zaGExMQorYjhkMDNlMTczZjY3ZjY1MDVhNzZmNmUwMGNmOTM0NDAyMDBkZDliZSAkY29tbWl0X3NoYTEwCis4NTFlMTYzODc4NGE4ODRjN2RkMjZjNWQ0MWYzMzQwZjYzODc0MTNhICRjb21taXRfc2hhOAorMzU3YjZjYTE0YzdhZmQ1OWI3ZjhiOGFhYWE2YjhiNzIzNzcxMTM1YiAkY29tbWl0X3NoYTUKK2UyYmZkMDZhMzdkZDIwMzE2ODRhNTlhNmUyYjAzM2UyMTIyMzljNzggJGNvbW1pdF9zaGE0Cis1NzcyZjQyNDA4YzBkZDZmMDk3YTdjYTJkMjRkZTBlNzhkMWM0NmIxICRjb21taXRfc2hhMworMjgzYjQ4MjE5YWVlOWE0MTA1ZjZjYWIzMzdlNzg5MDY1YzgyYzJiOSAkY29tbWl0X3NoYTIKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfdW5pb24yIDw8RU9GCiskY29tbWl0X3NoYTE1IDE1dGgKK3ogbm90ZXMgb24gMTV0aCBjb21taXQKKworeSBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit5IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAoreSBub3RlcyBvbiAxMnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTExIDExdGgKK3ogbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKKworJGNvbW1pdF9zaGE4IDh0aAoreiBub3RlcyBvbiA4dGggY29tbWl0CisKKyRjb21taXRfc2hhNyA3dGgKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit6IG5vdGVzIG9uIDV0aCBjb21taXQKKworeSBub3RlcyBvbiA1dGggY29tbWl0CisKKyRjb21taXRfc2hhNCA0dGgKK3kgbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit5IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHkgaW50byB6IHdpdGggInVuaW9uIiBzdHJhdGVneSA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy96ICYmCisJZ2l0IG5vdGVzIG1lcmdlIC0tc3RyYXRlZ3k9dW5pb24geSAmJgorCXZlcmlmeV9ub3RlcyB6IHVuaW9uMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB0byBwcmUtbWVyZ2Ugc3RhdGUgKHopJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy96IHJlZnMvbm90ZXMvel4xICYmCisJIyBWZXJpZnkgcHJlLW1lcmdlIHN0YXRlCisJdmVyaWZ5X25vdGVzIHogegorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfY2F0X3NvcnRfdW5pcQorNmJlOTAyNDBiNWY1NDU5NDIwM2UyNWQ5ZjJmNjRiNzU2NzE3NWFlZSAkY29tbWl0X3NoYTE1Cis1ZGU3ZWE3YWQ0ZjQ3ZTdmZjkxOTg5ZmI4MjIzNDYzNDczMGY3NWRmICRjb21taXRfc2hhMTQKKzNhNjMxZmRiNmY0MWIwNWI1NWQ4ZjRiYWYyMDcyOGJhOGY2ZmNjYmMgJGNvbW1pdF9zaGExMworYTY2MDU1ZmE4MmY3YTAzZmUwYzAyYTZhYmEzMjg3YTg1YWJmN2M2MiAkY29tbWl0X3NoYTEyCis3ZTNjNTM1MDNhM2RiOGRkOTk2Y2I2MmUzN2M2NmUwNzBiNDRiNTRkICRjb21taXRfc2hhMTEKK2I4ZDAzZTE3M2Y2N2Y2NTA1YTc2ZjZlMDBjZjkzNDQwMjAwZGQ5YmUgJGNvbW1pdF9zaGExMAorODUxZTE2Mzg3ODRhODg0YzdkZDI2YzVkNDFmMzM0MGY2Mzg3NDEzYSAkY29tbWl0X3NoYTgKKzY2MDMxMWQ3Zjc4ZGM1M2RiMTJhYzM3M2E0M2ZjYTc0NjUzODFhN2UgJGNvbW1pdF9zaGE1CitlMmJmZDA2YTM3ZGQyMDMxNjg0YTU5YTZlMmIwMzNlMjEyMjM5Yzc4ICRjb21taXRfc2hhNAorNTc3MmY0MjQwOGMwZGQ2ZjA5N2E3Y2EyZDI0ZGUwZTc4ZDFjNDZiMSAkY29tbWl0X3NoYTMKKzI4M2I0ODIxOWFlZTlhNDEwNWY2Y2FiMzM3ZTc4OTA2NWM4MmMyYjkgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX2NhdF9zb3J0X3VuaXEgPDxFT0YKKyRjb21taXRfc2hhMTUgMTV0aAoreSBub3RlcyBvbiAxNXRoIGNvbW1pdAoreiBub3RlcyBvbiAxNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTE0IDE0dGgKK3kgbm90ZXMgb24gMTR0aCBjb21taXQKKworJGNvbW1pdF9zaGExMyAxM3RoCit5IG5vdGVzIG9uIDEzdGggY29tbWl0CisKKyRjb21taXRfc2hhMTIgMTJ0aAoreSBub3RlcyBvbiAxMnRoIGNvbW1pdAorCiskY29tbWl0X3NoYTExIDExdGgKK3ogbm90ZXMgb24gMTF0aCBjb21taXQKKworJGNvbW1pdF9zaGExMCAxMHRoCit4IG5vdGVzIG9uIDEwdGggY29tbWl0CisKKyRjb21taXRfc2hhOSA5dGgKKworJGNvbW1pdF9zaGE4IDh0aAoreiBub3RlcyBvbiA4dGggY29tbWl0CisKKyRjb21taXRfc2hhNyA3dGgKKworJGNvbW1pdF9zaGE2IDZ0aAorCiskY29tbWl0X3NoYTUgNXRoCit5IG5vdGVzIG9uIDV0aCBjb21taXQKK3ogbm90ZXMgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB5IGludG8geiB3aXRoICJjYXRfc29ydF91bmlxIiBzdHJhdGVneSA9PiBOb24tY29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLS1zdHJhdGVneT1jYXRfc29ydF91bmlxIHkgJiYKKwl2ZXJpZnlfbm90ZXMgeiBjYXRfc29ydF91bmlxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHRvIHByZS1tZXJnZSBzdGF0ZSAoeiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3ogcmVmcy9ub3Rlcy96XjEgJiYKKwkjIFZlcmlmeSBwcmUtbWVyZ2Ugc3RhdGUKKwl2ZXJpZnlfbm90ZXMgeiB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHkgaW50byB6IHdpdGggImNhdF9zb3J0X3VuaXEiIHN0cmF0ZWd5IGNvbmZpZ3VyYXRpb24gb3B0aW9uID0+IE5vbi1jb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCAtYyBub3Rlcy5tZXJnZVN0cmF0ZWd5PSJjYXRfc29ydF91bmlxIiBub3RlcyBtZXJnZSB5ICYmCisJdmVyaWZ5X25vdGVzIHogY2F0X3NvcnRfdW5pcQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDMzMTAtbm90ZXMtbWVyZ2UtbWFudWFsLXJlc29sdmUuc2ggYi90L3QzMzEwLW5vdGVzLW1lcmdlLW1hbnVhbC1yZXNvbHZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1NTcyMTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzEwLW5vdGVzLW1lcmdlLW1hbnVhbC1yZXNvbHZlLnNoCkBAIC0wLDAgKzEsNTg3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpvaGFuIEhlcmxhbmQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBub3RlcyBtZXJnaW5nIHdpdGggbWFudWFsIGNvbmZsaWN0IHJlc29sdXRpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFNldCB1cCBhIG5vdGVzIG1lcmdlIHNjZW5hcmlvIHdpdGggZGlmZmVyZW50IGtpbmRzIG9mIGNvbmZsaWN0cwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tbWl0cycgJworCXRlc3RfY29tbWl0IDFzdCAmJgorCXRlc3RfY29tbWl0IDJuZCAmJgorCXRlc3RfY29tbWl0IDNyZCAmJgorCXRlc3RfY29tbWl0IDR0aCAmJgorCXRlc3RfY29tbWl0IDV0aAorJworCitjb21taXRfc2hhMT0kKGdpdCByZXYtcGFyc2UgMXN0Xntjb21taXR9KQorY29tbWl0X3NoYTI9JChnaXQgcmV2LXBhcnNlIDJuZF57Y29tbWl0fSkKK2NvbW1pdF9zaGEzPSQoZ2l0IHJldi1wYXJzZSAzcmRee2NvbW1pdH0pCitjb21taXRfc2hhND0kKGdpdCByZXYtcGFyc2UgNHRoXntjb21taXR9KQorY29tbWl0X3NoYTU9JChnaXQgcmV2LXBhcnNlIDV0aF57Y29tbWl0fSkKKwordmVyaWZ5X25vdGVzICgpIHsKKwlub3Rlc19yZWY9IiQxIgorCWdpdCAtYyBjb3JlLm5vdGVzUmVmPSJyZWZzL25vdGVzLyRub3Rlc19yZWYiIG5vdGVzIHwKKwkJc29ydCA+Im91dHB1dF9ub3Rlc18kbm90ZXNfcmVmIiAmJgorCXRlc3RfY21wICJleHBlY3Rfbm90ZXNfJG5vdGVzX3JlZiIgIm91dHB1dF9ub3Rlc18kbm90ZXNfcmVmIiAmJgorCWdpdCAtYyBjb3JlLm5vdGVzUmVmPSJyZWZzL25vdGVzLyRub3Rlc19yZWYiIGxvZyAtLWZvcm1hdD0iJUggJXMlbiVOIiBcCisJCT4ib3V0cHV0X2xvZ18kbm90ZXNfcmVmIiAmJgorCXRlc3RfY21wICJleHBlY3RfbG9nXyRub3Rlc19yZWYiICJvdXRwdXRfbG9nXyRub3Rlc19yZWYiCit9CisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc194Cis2ZThlM2ZlYmNhM2MyYmI4OTY3MDQzMzVjYzRkMGMzNGNiMmY4NzE1ICRjb21taXRfc2hhNAorZTUzODhjMTA4NjA0NTZlZTYwNjczMDI1MzQ1ZmUyZTE1M2ViOGNmOCAkY29tbWl0X3NoYTMKK2NlZWZhNjc0ODczNjcwZTdlY2QxMzE4MTRkOTA5NzIzY2NlMmI2NjkgJGNvbW1pdF9zaGEyCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAoreCBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKK3ggbm90ZXMgb24gM3JkIGNvbW1pdAorCiskY29tbWl0X3NoYTIgMm5kCit4IG5vdGVzIG9uIDJuZCBjb21taXQKKworJGNvbW1pdF9zaGExIDFzdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbWVyZ2UgYmFzZSAoeCknICcKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIDNyZCBjb21taXQiIDNyZCAmJgorCWdpdCBub3RlcyBhZGQgLW0gInggbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJdmVyaWZ5X25vdGVzIHgKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3kKK2UyYmZkMDZhMzdkZDIwMzE2ODRhNTlhNmUyYjAzM2UyMTIyMzljNzggJGNvbW1pdF9zaGE0Cis1NzcyZjQyNDA4YzBkZDZmMDk3YTdjYTJkMjRkZTBlNzhkMWM0NmIxICRjb21taXRfc2hhMworYjBhNjAyMWVjMDA2ZDA3ZTgwZTliMjBlYzliNDQ0Y2JkOWQ1NjBkMyAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeSA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorCiskY29tbWl0X3NoYTQgNHRoCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreSBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKKworJGNvbW1pdF9zaGExIDFzdAoreSBub3RlcyBvbiAxc3QgY29tbWl0CisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBsb2NhbCBicmFuY2ggKHkpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy95IHJlZnMvbm90ZXMveCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDFzdCBjb21taXQiIDFzdCAmJgorCWdpdCBub3RlcyByZW1vdmUgMm5kICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieSBub3RlcyBvbiAzcmQgY29tbWl0IiAzcmQgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJ5IG5vdGVzIG9uIDR0aCBjb21taXQiIDR0aCAmJgorCXZlcmlmeV9ub3RlcyB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc196CitjZmY1OWM3OTNjMjBiYjQ5YTRlMDFiYzA2ZmIwNmJhZDY0MmUwZDU0ICRjb21taXRfc2hhNAorMjgzYjQ4MjE5YWVlOWE0MTA1ZjZjYWIzMzdlNzg5MDY1YzgyYzJiOSAkY29tbWl0X3NoYTIKKzBhODFkYTg5NTYzNDZlMTliY2IyN2E5MDZmMDRhZjMyN2UwM2UzMWIgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ogPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAoreiBub3RlcyBvbiA0dGggY29tbWl0CisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK3ogbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVtb3RlIGJyYW5jaCAoeiknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3ogcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveiAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gMXN0IGNvbW1pdCIgMXN0ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAieiBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwlnaXQgbm90ZXMgcmVtb3ZlIDNyZCAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gInogbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKworIyBBdCB0aGlzIHBvaW50LCBiZWZvcmUgbWVyZ2luZyB6IGludG8geSwgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIHN0YXR1czoKKyMKKyMgY29tbWl0IHwgYmFzZS94ICB8IGxvY2FsL3kgfCByZW1vdGUveiB8IGRpZmYgZnJvbSB4IHRvIHkvegorIyAtLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgMXN0ICAgIHwgW25vbmVdICB8IGIwYTYwMjEgfCAwYTgxZGE4ICB8IGFkZGVkICAgICAvIGFkZGVkIChkaWZmKQorIyAybmQgICAgfCBjZWVmYTY3IHwgW25vbmVdICB8IDI4M2I0ODIgIHwgcmVtb3ZlZCAgIC8gY2hhbmdlZAorIyAzcmQgICAgfCBlNTM4OGMxIHwgNTc3MmY0MiB8IFtub25lXSAgIHwgY2hhbmdlZCAgIC8gcmVtb3ZlZAorIyA0dGggICAgfCA2ZThlM2ZlIHwgZTJiZmQwNiB8IGNmZjU5YzcgIHwgY2hhbmdlZCAgIC8gY2hhbmdlZCAoZGlmZikKKyMgNXRoICAgIHwgW25vbmVdICB8IFtub25lXSAgfCBbbm9uZV0gICB8IFtub25lXQorCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3RfY29uZmxpY3RzCiskY29tbWl0X3NoYTEKKyRjb21taXRfc2hhMgorJGNvbW1pdF9zaGEzCiskY29tbWl0X3NoYTQKK0VPRgorCitjYXQgPmV4cGVjdF9jb25mbGljdF8kY29tbWl0X3NoYTEgPDxFT0YKKzw8PDw8PDwgcmVmcy9ub3Rlcy9tCit5IG5vdGVzIG9uIDFzdCBjb21taXQKKz09PT09PT0KK3ogbm90ZXMgb24gMXN0IGNvbW1pdAorPj4+Pj4+PiByZWZzL25vdGVzL3oKK0VPRgorCitjYXQgPmV4cGVjdF9jb25mbGljdF8kY29tbWl0X3NoYTIgPDxFT0YKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorRU9GCisKK2NhdCA+ZXhwZWN0X2NvbmZsaWN0XyRjb21taXRfc2hhMyA8PEVPRgoreSBub3RlcyBvbiAzcmQgY29tbWl0CitFT0YKKworY2F0ID5leHBlY3RfY29uZmxpY3RfJGNvbW1pdF9zaGE0IDw8RU9GCis8PDw8PDw8IHJlZnMvbm90ZXMvbQoreSBub3RlcyBvbiA0dGggY29tbWl0Cis9PT09PT09Cit6IG5vdGVzIG9uIDR0aCBjb21taXQKKz4+Pj4+Pj4gcmVmcy9ub3Rlcy96CitFT0YKKworY3AgZXhwZWN0X25vdGVzX3kgZXhwZWN0X25vdGVzX20KK2NwIGV4cGVjdF9sb2dfeSBleHBlY3RfbG9nX20KKworZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kgPiBwcmVfbWVyZ2VfeQorZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3ogPiBwcmVfbWVyZ2VfegorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB6IGludG8gbSAoPT0geSkgd2l0aCBkZWZhdWx0ICgibWFudWFsIikgcmVzb2x2ZXIgPT4gQ29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy95ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvbSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6ID5vdXRwdXQgJiYKKwkjIE91dHB1dCBzaG91bGQgcG9pbnQgdG8gd2hlcmUgdG8gcmVzb2x2ZSBjb25mbGljdHMKKwlncmVwIC1xICJcXC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUiIG91dHB1dCAmJgorCSMgSW5zcGVjdCBtZXJnZSBjb25mbGljdHMKKwlscyAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFID5vdXRwdXRfY29uZmxpY3RzICYmCisJdGVzdF9jbXAgZXhwZWN0X2NvbmZsaWN0cyBvdXRwdXRfY29uZmxpY3RzICYmCisJKCBmb3IgZiBpbiAkKGNhdCBleHBlY3RfY29uZmxpY3RzKTsgZG8KKwkJdGVzdF9jbXAgImV4cGVjdF9jb25mbGljdF8kZiIgIi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGYiIHx8CisJCWV4aXQgMQorCWRvbmUgKSAmJgorCSMgVmVyaWZ5IHRoYXQgY3VycmVudCBub3RlcyB0cmVlIChwcmUtbWVyZ2UpIGhhcyBub3QgY2hhbmdlZCAobSA9PSB5KQorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIG0gJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChjYXQgcHJlX21lcmdlX3kpIgorJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfegorMDA0OTRhZGVjZjJkOTYzNWEwMmZhNDMxMzA4ZDY3OTkzZjg1Mzk2OCAkY29tbWl0X3NoYTQKKzI4M2I0ODIxOWFlZTlhNDEwNWY2Y2FiMzM3ZTc4OTA2NWM4MmMyYjkgJGNvbW1pdF9zaGEyCiswYTgxZGE4OTU2MzQ2ZTE5YmNiMjdhOTA2ZjA0YWYzMjdlMDNlMzFiICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ196IDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKK3ogbm90ZXMgb24gNHRoIGNvbW1pdAorCitNb3JlIHogbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKK3ogbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0Cit6IG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBub3RlcyBpbiB6JyAnCisJZ2l0IG5vdGVzIC0tcmVmIHogYXBwZW5kIC1tICJNb3JlIHogbm90ZXMgb24gNHRoIGNvbW1pdCIgNHRoICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGRvIG1lcmdlIHcvY29uZmxpY3RzIHdoZW4gcHJldmlvdXMgbWVyZ2UgaXMgdW5maW5pc2hlZCcgJworCXRlc3QgLWQgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6ID5vdXRwdXQgMj4mMSAmJgorCSMgT3V0cHV0IHNob3VsZCBpbmRpY2F0ZSB3aGF0IGlzIHdyb25nCisJZ3JlcCAtcSAiXFwuZ2l0L05PVEVTX01FUkdFX1xcKiBleGlzdHMiIG91dHB1dAorJworCisjIFNldHVwIG5vbi1jb25mbGljdGluZyBtZXJnZSBiZXR3ZWVuIHggYW5kIG5ldyBub3RlcyByZWYgdworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdworY2VlZmE2NzQ4NzM2NzBlN2VjZDEzMTgxNGQ5MDk3MjNjY2UyYjY2OSAkY29tbWl0X3NoYTIKK2Y3NWQxZGY4OGNiZmU0MjU4ZDQ5ODUyZjI2Y2ZjODNmMmFkNDQ5NGIgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3cgPDxFT0YKKyRjb21taXRfc2hhNSA1dGgKKworJGNvbW1pdF9zaGE0IDR0aAorCiskY29tbWl0X3NoYTMgM3JkCisKKyRjb21taXRfc2hhMiAybmQKK3ggbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0Cit3IG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHVucmVsYXRlZCBub3RlcyByZWYgKHcpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvdyAmJgorCWdpdCBub3RlcyBhZGQgLW0gIncgbm90ZXMgb24gMXN0IGNvbW1pdCIgMXN0ICYmCisJZ2l0IG5vdGVzIGFkZCAtbSAieCBub3RlcyBvbiAybmQgY29tbWl0IiAybmQgJiYKKwl2ZXJpZnlfbm90ZXMgdworJworCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfdworNmU4ZTNmZWJjYTNjMmJiODk2NzA0MzM1Y2M0ZDBjMzRjYjJmODcxNSAkY29tbWl0X3NoYTQKK2U1Mzg4YzEwODYwNDU2ZWU2MDY3MzAyNTM0NWZlMmUxNTNlYjhjZjggJGNvbW1pdF9zaGEzCitjZWVmYTY3NDg3MzY3MGU3ZWNkMTMxODE0ZDkwOTcyM2NjZTJiNjY5ICRjb21taXRfc2hhMgorZjc1ZDFkZjg4Y2JmZTQyNThkNDk4NTJmMjZjZmM4M2YyYWQ0NDk0YiAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfdyA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorCiskY29tbWl0X3NoYTQgNHRoCit4IG5vdGVzIG9uIDR0aCBjb21taXQKKworJGNvbW1pdF9zaGEzIDNyZAoreCBub3RlcyBvbiAzcmQgY29tbWl0CisKKyRjb21taXRfc2hhMiAybmQKK3ggbm90ZXMgb24gMm5kIGNvbW1pdAorCiskY29tbWl0X3NoYTEgMXN0Cit3IG5vdGVzIG9uIDFzdCBjb21taXQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbiBkbyBtZXJnZSB3aXRob3V0IGNvbmZsaWN0cyBldmVuIGlmIHByZXZpb3VzIG1lcmdlIGlzIHVuZmluaXNoZWQgKHggPT4gdyknICcKKwl0ZXN0IC1kIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUgJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeCAmJgorCXZlcmlmeV9ub3RlcyB3ICYmCisJIyBWZXJpZnkgdGhhdCBvdGhlciBub3RlcyByZWZzIGhhcyBub3QgY2hhbmdlZCAoeCBhbmQgeSkKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5CisnCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9ub3Rlc19tCiswMjFmYWEyMGU5MzFmYjQ4OTg2ZmZjNjI4MmI0YmIwNTU1M2FjOTQ2ICRjb21taXRfc2hhNAorNTc3MmY0MjQwOGMwZGQ2ZjA5N2E3Y2EyZDI0ZGUwZTc4ZDFjNDZiMSAkY29tbWl0X3NoYTMKKzI4M2I0ODIxOWFlZTlhNDEwNWY2Y2FiMzM3ZTc4OTA2NWM4MmMyYjkgJGNvbW1pdF9zaGEyCiswYTU5ZTc4N2U2ZDY4OGFhNjMwOWU1NmU4YzFiODk0MzFhMGZjMWMxICRjb21taXRfc2hhMQorRU9GCisKK2NhdCA+ZXhwZWN0X2xvZ19tIDw8RU9GCiskY29tbWl0X3NoYTUgNXRoCisKKyRjb21taXRfc2hhNCA0dGgKK3kgYW5kIHogbm90ZXMgb24gNHRoIGNvbW1pdAorCiskY29tbWl0X3NoYTMgM3JkCit5IG5vdGVzIG9uIDNyZCBjb21taXQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK3kgYW5kIHogbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGFsbG93IG1peGluZyAtLWNvbW1pdCBhbmQgLS1hYm9ydCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSAtLWNvbW1pdCAtLWFib3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBhbGxvdyBtaXhpbmcgLS1jb21taXQgYW5kIC0tc3RyYXRlZ3knICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgLS1zdHJhdGVneSB0aGVpcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGFsbG93IG1peGluZyAtLWFib3J0IGFuZCAtLXN0cmF0ZWd5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgLS1zdHJhdGVneSB0aGVpcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluYWxpemUgY29uZmxpY3RpbmcgbWVyZ2UgKHogPT4gbSknICcKKwkjIFJlc29sdmUgY29uZmxpY3RzIGFuZCBmaW5hbGl6ZSBtZXJnZQorCWNhdCA+LmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTEgPDxFT0YgJiYKK3kgYW5kIHogbm90ZXMgb24gMXN0IGNvbW1pdAorRU9GCisJY2F0ID4uZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhNCA8PEVPRiAmJgoreSBhbmQgeiBub3RlcyBvbiA0dGggY29tbWl0CitFT0YKKwlnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgJiYKKwkjIE5vIC5naXQvTk9URVNfTUVSR0VfKiBmaWxlcyBsZWZ0CisJdGVzdF9taWdodF9mYWlsIGxzIC5naXQvTk9URVNfTUVSR0VfKiA+b3V0cHV0IDI+L2Rldi9udWxsICYmCisJdGVzdF9jbXAgL2Rldi9udWxsIG91dHB1dCAmJgorCSMgTWVyZ2UgY29tbWl0IGhhcyBwcmUtbWVyZ2UgeSBhbmQgcHJlLW1lcmdlIHogYXMgcGFyZW50cworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL21eMSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tXjIpIiA9ICIkKGNhdCBwcmVfbWVyZ2VfeikiICYmCisJIyBNZXJnZSBjb21taXQgbWVudGlvbnMgdGhlIG5vdGVzIHJlZnMgbWVyZ2VkCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lQiByZWZzL25vdGVzL20gPiBtZXJnZV9jb21taXRfbXNnICYmCisJZ3JlcCAtcSByZWZzL25vdGVzL20gbWVyZ2VfY29tbWl0X21zZyAmJgorCWdyZXAgLXEgcmVmcy9ub3Rlcy96IG1lcmdlX2NvbW1pdF9tc2cgJiYKKwkjIE1lcmdlIGNvbW1pdCBtZW50aW9ucyBjb25mbGljdGluZyBub3RlcworCWdyZXAgLXEgIkNvbmZsaWN0cyIgbWVyZ2VfY29tbWl0X21zZyAmJgorCSggZm9yIHNoYTEgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCWdyZXAgLXEgIiRzaGExIiBtZXJnZV9jb21taXRfbXNnIHx8CisJCWV4aXQgMQorCWRvbmUgKSAmJgorCSMgVmVyaWZ5IGNvbnRlbnRzIG9mIG1lcmdlIHJlc3VsdAorCXZlcmlmeV9ub3RlcyBtICYmCisJIyBWZXJpZnkgdGhhdCBvdGhlciBub3RlcyByZWZzIGhhcyBub3QgY2hhbmdlZCAodywgeCwgeSBhbmQgeikKKwl2ZXJpZnlfbm90ZXMgdyAmJgorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgegorJworCitjYXQgPmV4cGVjdF9jb25mbGljdF8kY29tbWl0X3NoYTQgPDxFT0YKKzw8PDw8PDwgcmVmcy9ub3Rlcy9tCit5IG5vdGVzIG9uIDR0aCBjb21taXQKKz09PT09PT0KK3ogbm90ZXMgb24gNHRoIGNvbW1pdAorCitNb3JlIHogbm90ZXMgb24gNHRoIGNvbW1pdAorPj4+Pj4+PiByZWZzL25vdGVzL3oKK0VPRgorCitjcCBleHBlY3Rfbm90ZXNfeSBleHBlY3Rfbm90ZXNfbQorY3AgZXhwZWN0X2xvZ195IGV4cGVjdF9sb2dfbQorCitnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSA+IHByZV9tZXJnZV95CitnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveiA+IHByZV9tZXJnZV96CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZG8gbWVyZ2Ugb2YgeiBpbnRvIG0gKD09IHkpIHdpdGggZGVmYXVsdCAoIm1hbnVhbCIpIHJlc29sdmVyID0+IENvbmZsaWN0aW5nIDMtd2F5IG1lcmdlJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMveSAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL20gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiA+b3V0cHV0ICYmCisJIyBPdXRwdXQgc2hvdWxkIHBvaW50IHRvIHdoZXJlIHRvIHJlc29sdmUgY29uZmxpY3RzCisJZ3JlcCAtcSAiXFwuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIiBvdXRwdXQgJiYKKwkjIEluc3BlY3QgbWVyZ2UgY29uZmxpY3RzCisJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgorCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgorCSggZm9yIGYgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCXRlc3RfY21wICJleHBlY3RfY29uZmxpY3RfJGYiICIuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRmIiB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSB0aGF0IGN1cnJlbnQgbm90ZXMgdHJlZSAocHJlLW1lcmdlKSBoYXMgbm90IGNoYW5nZWQgKG0gPT0geSkKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyBtICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQgbm90ZXMgbWVyZ2UnICcKKwlnaXQgbm90ZXMgbWVyZ2UgLS1hYm9ydCAmJgorCSMgTm8gLmdpdC9OT1RFU19NRVJHRV8qIGZpbGVzIGxlZnQKKwl0ZXN0X21pZ2h0X2ZhaWwgbHMgLmdpdC9OT1RFU19NRVJHRV8qID5vdXRwdXQgMj4vZGV2L251bGwgJiYKKwl0ZXN0X2NtcCAvZGV2L251bGwgb3V0cHV0ICYmCisJIyBtIGhhcyBub3QgbW92ZWQgKHN0aWxsID09IHkpCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIgJiYKKwkjIFZlcmlmeSB0aGF0IG90aGVyIG5vdGVzIHJlZnMgaGFzIG5vdCBjaGFuZ2VkICh3LCB4LCB5IGFuZCB6KQorCXZlcmlmeV9ub3RlcyB3ICYmCisJdmVyaWZ5X25vdGVzIHggJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyB6CisnCisKK2dpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95ID4gcHJlX21lcmdlX3kKK2dpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy96ID4gcHJlX21lcmdlX3oKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkbyBtZXJnZSBvZiB6IGludG8gbSAoPT0geSkgd2l0aCBkZWZhdWx0ICgibWFudWFsIikgcmVzb2x2ZXIgPT4gQ29uZmxpY3RpbmcgMy13YXkgbWVyZ2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiA+b3V0cHV0ICYmCisJIyBPdXRwdXQgc2hvdWxkIHBvaW50IHRvIHdoZXJlIHRvIHJlc29sdmUgY29uZmxpY3RzCisJZ3JlcCAtcSAiXFwuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIiBvdXRwdXQgJiYKKwkjIEluc3BlY3QgbWVyZ2UgY29uZmxpY3RzCisJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgorCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgorCSggZm9yIGYgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCXRlc3RfY21wICJleHBlY3RfY29uZmxpY3RfJGYiICIuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRmIiB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSB0aGF0IGN1cnJlbnQgbm90ZXMgdHJlZSAocHJlLW1lcmdlKSBoYXMgbm90IGNoYW5nZWQgKG0gPT0geSkKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyBtICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX20KKzMwNGRmYjQzMjVjZjI0MzAyNWI5OTU3NDg2ZWI2MDVhOWI1MWMxOTkgJGNvbW1pdF9zaGE1CisyODNiNDgyMTlhZWU5YTQxMDVmNmNhYjMzN2U3ODkwNjVjODJjMmI5ICRjb21taXRfc2hhMgorMGE1OWU3ODdlNmQ2ODhhYTYzMDllNTZlOGMxYjg5NDMxYTBmYzFjMSAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfbSA8PEVPRgorJGNvbW1pdF9zaGE1IDV0aAorbmV3IG5vdGUgb24gNXRoIGNvbW1pdAorCiskY29tbWl0X3NoYTQgNHRoCisKKyRjb21taXRfc2hhMyAzcmQKKworJGNvbW1pdF9zaGEyIDJuZAoreiBub3RlcyBvbiAybmQgY29tbWl0CisKKyRjb21taXRfc2hhMSAxc3QKK3kgYW5kIHogbm90ZXMgb24gMXN0IGNvbW1pdAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkICsgcmVtb3ZlIG5vdGVzIGluIGZpbmFsaXplZCBtZXJnZSAoeiA9PiBtKScgJworCSMgUmVzb2x2ZSBvbmUgY29uZmxpY3QKKwljYXQgPi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGExIDw8RU9GICYmCit5IGFuZCB6IG5vdGVzIG9uIDFzdCBjb21taXQKK0VPRgorCSMgUmVtb3ZlIGFub3RoZXIgY29uZmxpY3QKKwlybSAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhNCAmJgorCSMgUmVtb3ZlIGEgRC9GIGNvbmZsaWN0CisJcm0gLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTMgJiYKKwkjIEFkZCBhIG5ldyBub3RlCisJZWNobyAibmV3IG5vdGUgb24gNXRoIGNvbW1pdCIgPiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhNSAmJgorCSMgRmluYWxpemUgbWVyZ2UKKwlnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgJiYKKwkjIE5vIC5naXQvTk9URVNfTUVSR0VfKiBmaWxlcyBsZWZ0CisJdGVzdF9taWdodF9mYWlsIGxzIC5naXQvTk9URVNfTUVSR0VfKiA+b3V0cHV0IDI+L2Rldi9udWxsICYmCisJdGVzdF9jbXAgL2Rldi9udWxsIG91dHB1dCAmJgorCSMgTWVyZ2UgY29tbWl0IGhhcyBwcmUtbWVyZ2UgeSBhbmQgcHJlLW1lcmdlIHogYXMgcGFyZW50cworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL21eMSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tXjIpIiA9ICIkKGNhdCBwcmVfbWVyZ2VfeikiICYmCisJIyBNZXJnZSBjb21taXQgbWVudGlvbnMgdGhlIG5vdGVzIHJlZnMgbWVyZ2VkCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lQiByZWZzL25vdGVzL20gPiBtZXJnZV9jb21taXRfbXNnICYmCisJZ3JlcCAtcSByZWZzL25vdGVzL20gbWVyZ2VfY29tbWl0X21zZyAmJgorCWdyZXAgLXEgcmVmcy9ub3Rlcy96IG1lcmdlX2NvbW1pdF9tc2cgJiYKKwkjIE1lcmdlIGNvbW1pdCBtZW50aW9ucyBjb25mbGljdGluZyBub3RlcworCWdyZXAgLXEgIkNvbmZsaWN0cyIgbWVyZ2VfY29tbWl0X21zZyAmJgorCSggZm9yIHNoYTEgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCWdyZXAgLXEgIiRzaGExIiBtZXJnZV9jb21taXRfbXNnIHx8CisJCWV4aXQgMQorCWRvbmUgKSAmJgorCSMgVmVyaWZ5IGNvbnRlbnRzIG9mIG1lcmdlIHJlc3VsdAorCXZlcmlmeV9ub3RlcyBtICYmCisJIyBWZXJpZnkgdGhhdCBvdGhlciBub3RlcyByZWZzIGhhcyBub3QgY2hhbmdlZCAodywgeCwgeSBhbmQgeikKKwl2ZXJpZnlfbm90ZXMgdyAmJgorCXZlcmlmeV9ub3RlcyB4ICYmCisJdmVyaWZ5X25vdGVzIHkgJiYKKwl2ZXJpZnlfbm90ZXMgegorJworCitjcCBleHBlY3Rfbm90ZXNfeSBleHBlY3Rfbm90ZXNfbQorY3AgZXhwZWN0X2xvZ195IGV4cGVjdF9sb2dfbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRvIG1lcmdlIG9mIHogaW50byBtICg9PSB5KSB3aXRoIGRlZmF1bHQgKCJtYW51YWwiKSByZXNvbHZlciA9PiBDb25mbGljdGluZyAzLXdheSBtZXJnZScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3kgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiA+b3V0cHV0ICYmCisJIyBPdXRwdXQgc2hvdWxkIHBvaW50IHRvIHdoZXJlIHRvIHJlc29sdmUgY29uZmxpY3RzCisJZ3JlcCAtcSAiXFwuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFIiBvdXRwdXQgJiYKKwkjIEluc3BlY3QgbWVyZ2UgY29uZmxpY3RzCisJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgorCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgorCSggZm9yIGYgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCXRlc3RfY21wICJleHBlY3RfY29uZmxpY3RfJGYiICIuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRmIiB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSB0aGF0IGN1cnJlbnQgbm90ZXMgdHJlZSAocHJlLW1lcmdlKSBoYXMgbm90IGNoYW5nZWQgKG0gPT0geSkKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyBtICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoY2F0IHByZV9tZXJnZV95KSIKKycKKworY3AgZXhwZWN0X25vdGVzX3cgZXhwZWN0X25vdGVzX20KK2NwIGV4cGVjdF9sb2dfdyBleHBlY3RfbG9nX20KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgbm90ZXMgcmVmIG0gdG8gc29tZXdoZXJlIGVsc2UgKHcpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMvdyAmJgorCXZlcmlmeV9ub3RlcyBtICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3cpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHRvIGZpbmFsaXplIGNvbmZsaWN0aW5nIG1lcmdlIGlmIHVuZGVybHlpbmcgcmVmIGhhcyBtb3ZlZCBpbiB0aGUgbWVhbnRpbWUgKG0gIT0gTk9URVNfTUVSR0VfUEFSVElBTF4xKScgJworCSMgUmVzb2x2ZSBjb25mbGljdHMKKwljYXQgPi5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGExIDw8RU9GICYmCit5IGFuZCB6IG5vdGVzIG9uIDFzdCBjb21taXQKK0VPRgorCWNhdCA+LmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTQgPDxFT0YgJiYKK3kgYW5kIHogbm90ZXMgb24gNHRoIGNvbW1pdAorRU9GCisJIyBGYWlsIHRvIGZpbmFsaXplIG1lcmdlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0ID5vdXRwdXQgMj4mMSAmJgorCSMgLmdpdC9OT1RFU19NRVJHRV8qIG11c3QgcmVtYWluCisJdGVzdCAtZiAuZ2l0L05PVEVTX01FUkdFX1BBUlRJQUwgJiYKKwl0ZXN0IC1mIC5naXQvTk9URVNfTUVSR0VfUkVGICYmCisJdGVzdCAtZiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhMSAmJgorCXRlc3QgLWYgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTIgJiYKKwl0ZXN0IC1mIC5naXQvTk9URVNfTUVSR0VfV09SS1RSRUUvJGNvbW1pdF9zaGEzICYmCisJdGVzdCAtZiAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRjb21taXRfc2hhNCAmJgorCSMgUmVmcyBhcmUgdW5jaGFuZ2VkCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvbSkiID0gIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3cpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIiA9ICIkKGdpdCByZXYtcGFyc2UgTk9URVNfTUVSR0VfUEFSVElBTF4xKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSBOT1RFU19NRVJHRV9QQVJUSUFMXjEpIiAmJgorCSMgTWVudGlvbiByZWZzL25vdGVzL20sIGFuZCBpdHMgY3VycmVudCBhbmQgZXhwZWN0ZWQgdmFsdWUgaW4gb3V0cHV0CisJZ3JlcCAtcSAicmVmcy9ub3Rlcy9tIiBvdXRwdXQgJiYKKwlncmVwIC1xICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgb3V0cHV0ICYmCisJZ3JlcCAtcSAiJChnaXQgcmV2LXBhcnNlIE5PVEVTX01FUkdFX1BBUlRJQUxeMSkiIG91dHB1dCAmJgorCSMgVmVyaWZ5IHRoYXQgb3RoZXIgbm90ZXMgcmVmcyBoYXMgbm90IGNoYW5nZWQgKHcsIHgsIHkgYW5kIHopCisJdmVyaWZ5X25vdGVzIHcgJiYKKwl2ZXJpZnlfbm90ZXMgeCAmJgorCXZlcmlmeV9ub3RlcyB5ICYmCisJdmVyaWZ5X25vdGVzIHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzb2x2ZSBzaXR1YXRpb24gYnkgYWJvcnRpbmcgdGhlIG5vdGVzIG1lcmdlJyAnCisJZ2l0IG5vdGVzIG1lcmdlIC0tYWJvcnQgJiYKKwkjIE5vIC5naXQvTk9URVNfTUVSR0VfKiBmaWxlcyBsZWZ0CisJdGVzdF9taWdodF9mYWlsIGxzIC5naXQvTk9URVNfTUVSR0VfKiA+b3V0cHV0IDI+L2Rldi9udWxsICYmCisJdGVzdF9jbXAgL2Rldi9udWxsIG91dHB1dCAmJgorCSMgbSBoYXMgbm90IG1vdmVkIChzdGlsbCA9PSB3KQorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL20pIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy93KSIgJiYKKwkjIFZlcmlmeSB0aGF0IG90aGVyIG5vdGVzIHJlZnMgaGFzIG5vdCBjaGFuZ2VkICh3LCB4LCB5IGFuZCB6KQorCXZlcmlmeV9ub3RlcyB3ICYmCisJdmVyaWZ5X25vdGVzIHggJiYKKwl2ZXJpZnlfbm90ZXMgeSAmJgorCXZlcmlmeV9ub3RlcyB6CisnCisKK2NhdCA+ZXhwZWN0X25vdGVzIDw8RU9GCitmb28KK2JhcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBjd2QgYmVmb3JlIGNvbW1pdHRpbmcgbm90ZXMgbWVyZ2UnICcKKwlnaXQgbm90ZXMgYWRkIC1tIGZvbyBIRUFEICYmCisJZ2l0IG5vdGVzIC0tcmVmPW90aGVyIGFkZCAtbSBiYXIgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSByZWZzL25vdGVzL290aGVyICYmCisJKAorCQljZCAuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFICYmCisJCWVjaG8gImZvbyIgPiAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJZWNobyAiYmFyIiA+PiAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJZ2l0IG5vdGVzIG1lcmdlIC0tY29tbWl0CisJKSAmJgorCWdpdCBub3RlcyBzaG93IEhFQUQgPiBhY3R1YWxfbm90ZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm90ZXMgYWN0dWFsX25vdGVzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzMxMS1ub3Rlcy1tZXJnZS1mYW5vdXQuc2ggYi90L3QzMzExLW5vdGVzLW1lcmdlLWZhbm91dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MzUxNmVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzMxMS1ub3Rlcy1tZXJnZS1mYW5vdXQuc2gKQEAgLTAsMCArMSw0MzYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgSm9oYW4gSGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG5vdGVzIG1lcmdpbmcgYXQgdmFyaW91cyBmYW5vdXQgbGV2ZWxzJworCisuIC4vdGVzdC1saWIuc2gKKwordmVyaWZ5X25vdGVzICgpIHsKKwlub3Rlc19yZWY9IiQxIgorCWNvbW1pdD0iJDIiCisJaWYgdGVzdCAtZiAiZXhwZWN0X25vdGVzXyRub3Rlc19yZWYiCisJdGhlbgorCQlnaXQgLWMgY29yZS5ub3Rlc1JlZj0icmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiBub3RlcyB8CisJCQlzb3J0ID4ib3V0cHV0X25vdGVzXyRub3Rlc19yZWYiICYmCisJCXRlc3RfY21wICJleHBlY3Rfbm90ZXNfJG5vdGVzX3JlZiIgIm91dHB1dF9ub3Rlc18kbm90ZXNfcmVmIiB8fAorCQkJcmV0dXJuIDEKKwlmaSAmJgorCWdpdCAtYyBjb3JlLm5vdGVzUmVmPSJyZWZzL25vdGVzLyRub3Rlc19yZWYiIGxvZyAtLWZvcm1hdD0iJUggJXMlbiVOIiBcCisJCSIkY29tbWl0IiA+Im91dHB1dF9sb2dfJG5vdGVzX3JlZiIgJiYKKwl0ZXN0X2NtcCAiZXhwZWN0X2xvZ18kbm90ZXNfcmVmIiAib3V0cHV0X2xvZ18kbm90ZXNfcmVmIgorfQorCit2ZXJpZnlfZmFub3V0ICgpIHsKKwlub3Rlc19yZWY9IiQxIgorCSMgRXhwZWN0IGVudGlyZSBub3RlcyB0cmVlIHRvIGhhdmUgYSBmYW5vdXQgPT0gMQorCWdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSAicmVmcy9ub3Rlcy8kbm90ZXNfcmVmIiA+L2Rldi9udWxsICYmCisJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgInJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgfAorCXdoaWxlIHJlYWQgcGF0aAorCWRvCisJCWNhc2UgIiRwYXRoIiBpbgorCQk/Py8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PykKKwkJCTogdHJ1ZQorCQkJOzsKKwkJKikKKwkJCWVjaG8gIkludmFsaWQgcGF0aCBcIiRwYXRoXCIiICYmCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKwordmVyaWZ5X25vX2Zhbm91dCAoKSB7CisJbm90ZXNfcmVmPSIkMSIKKwkjIEV4cGVjdCBlbnRpcmUgbm90ZXMgdHJlZSB0byBoYXZlIGEgZmFub3V0ID09IDAKKwlnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgInJlZnMvbm90ZXMvJG5vdGVzX3JlZiIgPi9kZXYvbnVsbCAmJgorCWdpdCBscy10cmVlIC1yIC0tbmFtZS1vbmx5ICJyZWZzL25vdGVzLyRub3Rlc19yZWYiIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQljYXNlICIkcGF0aCIgaW4KKwkJPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/PykKKwkJCTogdHJ1ZQorCQkJOzsKKwkJKikKKwkJCWVjaG8gIkludmFsaWQgcGF0aCBcIiRwYXRoXCIiICYmCisJCQlyZXR1cm4gMQorCQkJOzsKKwkJZXNhYworCWRvbmUKK30KKworIyBTZXQgdXAgYSBub3RlcyBtZXJnZSBzY2VuYXJpbyB3aXRoIGRpZmZlcmVudCBraW5kcyBvZiBjb25mbGljdHMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgZmV3IGluaXRpYWwgY29tbWl0cyB3aXRoIG5vdGVzIChub3RlcyByZWY6IHgpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgorCWZvciBpIGluIDEgMiAzIDQgNQorCWRvCisJCXRlc3RfY29tbWl0ICJjb21taXQkaSIgPi9kZXYvbnVsbCAmJgorCQlnaXQgbm90ZXMgYWRkIC1tICJub3RlcyBmb3IgY29tbWl0JGkiIHx8IHJldHVybiAxCisJZG9uZQorJworCitjb21taXRfc2hhMT0kKGdpdCByZXYtcGFyc2UgY29tbWl0MV57Y29tbWl0fSkKK2NvbW1pdF9zaGEyPSQoZ2l0IHJldi1wYXJzZSBjb21taXQyXntjb21taXR9KQorY29tbWl0X3NoYTM9JChnaXQgcmV2LXBhcnNlIGNvbW1pdDNee2NvbW1pdH0pCitjb21taXRfc2hhND0kKGdpdCByZXYtcGFyc2UgY29tbWl0NF57Y29tbWl0fSkKK2NvbW1pdF9zaGE1PSQoZ2l0IHJldi1wYXJzZSBjb21taXQ1Xntjb21taXR9KQorCitjYXQgPDxFT0YgfCBzb3J0ID5leHBlY3Rfbm90ZXNfeAorYWVkOTExNTVjN2E3MmMyMTg4ZTc4MWZkZjQwZTBmMzc2MWIyOTlkYiAkY29tbWl0X3NoYTUKKzk5ZmFiMjY4ZjlkN2VlN2IwMTFlMDkxYTQzNmM3OGRlZjhlZWVlNjkgJGNvbW1pdF9zaGE0Cis5NTNjMjBhZTI2YzdhYTBiNDI4YzIwNjkzZmUzOGJjNjg3ZjlkMWE5ICRjb21taXRfc2hhMworNjM1ODc5NjEzMWI4OTE2ZWFhMmRkZTY5MDI2NDI5NDJhMWNiMzdlMSAkY29tbWl0X3NoYTIKK2IwMmQ0NTljMzJmMGU2OGYyZmUwOTgxMDMzYmIzNGYzODc3NmJhNDcgJGNvbW1pdF9zaGExCitFT0YKKworY2F0ID5leHBlY3RfbG9nX3ggPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1Citub3RlcyBmb3IgY29tbWl0NQorCiskY29tbWl0X3NoYTQgY29tbWl0NAorbm90ZXMgZm9yIGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK25vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCitub3RlcyBmb3IgY29tbWl0MgorCiskY29tbWl0X3NoYTEgY29tbWl0MQorbm90ZXMgZm9yIGNvbW1pdDEKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nhbml0eSBjaGVjayAoeCknICcKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vX2Zhbm91dCB4CisnCisKK251bT0zMDAKKworY3AgZXhwZWN0X2xvZ194IGV4cGVjdF9sb2dfeQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQgYSBmZXcgaHVuZHJlZCBjb21taXRzIHcvbm90ZXMgdG8gdHJpZ2dlciBmYW5vdXQgKHggLT4geSknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL3kgcmVmcy9ub3Rlcy94ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveSAmJgorCWk9NSAmJgorCXdoaWxlIHRlc3QgJGkgLWx0ICRudW0KKwlkbworCQlpPSQoKCRpICsgMSkpICYmCisJCXRlc3RfY29tbWl0ICJjb21taXQkaSIgPi9kZXYvbnVsbCAmJgorCQlnaXQgbm90ZXMgYWRkIC1tICJub3RlcyBmb3IgY29tbWl0JGkiIHx8IHJldHVybiAxCisJZG9uZSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL3kpIiAhPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveCkiICYmCisJIyBFeHBlY3RlZCBudW1iZXIgb2YgY29tbWl0cyBhbmQgbm90ZXMKKwl0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgfCB3YyAtbCkgPSAkbnVtICYmCisJdGVzdCAkKGdpdCBub3RlcyBsaXN0IHwgd2MgLWwpID0gJG51bSAmJgorCSMgNSBmaXJzdCBub3RlcyB1bmNoYW5nZWQKKwl2ZXJpZnlfbm90ZXMgeSBjb21taXQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgaGFzIGZhbm91dCAoeSknICd2ZXJpZnlfZmFub3V0IHknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05vLW9wIG1lcmdlIChhbHJlYWR5IGluY2x1ZGVkKSAoeCA9PiB5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3kgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy9tICYmCisJZ2l0IG5vdGVzIG1lcmdlIHggJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMveSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Zhc3QtZm9yd2FyZCBtZXJnZSAoeSA9PiB4KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3ggJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSByZWZzL25vdGVzL20pIiA9ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy95KSIKKycKKworY2F0IDw8RU9GIHwgc29ydCA+ZXhwZWN0X25vdGVzX3oKKzlmNTA2ZWU3MGUyMDM3OWQ3Zjc4MjA0Yzc3YjMzNGY0M2Q3NzQxMGQgJGNvbW1pdF9zaGEzCisyM2E0N2Q2ZWE3ZDU4OTg5NWZhZjgwMDc1MjA1NDgxOGUxZTc2MjdiICRjb21taXRfc2hhMgorYjAyZDQ1OWMzMmYwZTY4ZjJmZTA5ODEwMzNiYjM0ZjM4Nzc2YmE0NyAkY29tbWl0X3NoYTEKK0VPRgorCitjYXQgPmV4cGVjdF9sb2dfeiA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKKworJGNvbW1pdF9zaGE0IGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK25vdGVzIGZvciBjb21taXQzCisKK2FwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCituZXcgbm90ZXMgZm9yIGNvbW1pdDIKKworJGNvbW1pdF9zaGExIGNvbW1pdDEKK25vdGVzIGZvciBjb21taXQxCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugc29tZSBvZiB0aGUgaW5pdGlhbCA1IG5vdGVzICh4IC0+IHopJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy96IHJlZnMvbm90ZXMveCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ogJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJuZXcgbm90ZXMgZm9yIGNvbW1pdDIiIGNvbW1pdDIgJiYKKwlnaXQgbm90ZXMgYXBwZW5kIC1tICJhcHBlbmRlZCBub3RlcyBmb3IgY29tbWl0MyIgY29tbWl0MyAmJgorCWdpdCBub3RlcyByZW1vdmUgY29tbWl0NCAmJgorCWdpdCBub3RlcyByZW1vdmUgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB6IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBoYXMgbm8gZmFub3V0ICh6KScgJ3ZlcmlmeV9ub19mYW5vdXQgeicKKworY3AgZXhwZWN0X2xvZ196IGV4cGVjdF9sb2dfbQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIG1lcmdlIHdpdGhvdXQgY29uZmxpY3RzICh5ID0+IHopJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMveiAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL20gJiYKKwlnaXQgbm90ZXMgbWVyZ2UgeSAmJgorCXZlcmlmeV9ub3RlcyBtIGNvbW1pdDUgJiYKKwkjIHgveS96IHVuY2hhbmdlZAorCXZlcmlmeV9ub3RlcyB4IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeSBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHogY29tbWl0NQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RlcyB0cmVlIHN0aWxsIGhhcyBmYW5vdXQgYWZ0ZXIgbWVyZ2UgKG0pJyAndmVyaWZ5X2Zhbm91dCBtJworCitjYXQgPmV4cGVjdF9sb2dfdyA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKKworJGNvbW1pdF9zaGE0IGNvbW1pdDQKK290aGVyIG5vdGVzIGZvciBjb21taXQ0CisKKyRjb21taXRfc2hhMyBjb21taXQzCitvdGhlciBub3RlcyBmb3IgY29tbWl0MworCiskY29tbWl0X3NoYTIgY29tbWl0Mgorbm90ZXMgZm9yIGNvbW1pdDIKKworJGNvbW1pdF9zaGExIGNvbW1pdDEKK290aGVyIG5vdGVzIGZvciBjb21taXQxCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRyb2R1Y2UgY29uZmxpY3RpbmcgY2hhbmdlcyAoeSAtPiB3KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvdyByZWZzL25vdGVzL3kgJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy93ICYmCisJZ2l0IG5vdGVzIGFkZCAtZiAtbSAib3RoZXIgbm90ZXMgZm9yIGNvbW1pdDEiIGNvbW1pdDEgJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJvdGhlciBub3RlcyBmb3IgY29tbWl0MyIgY29tbWl0MyAmJgorCWdpdCBub3RlcyBhZGQgLWYgLW0gIm90aGVyIG5vdGVzIGZvciBjb21taXQ0IiBjb21taXQ0ICYmCisJZ2l0IG5vdGVzIHJlbW92ZSBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHcgY29tbWl0NQorJworCitjYXQgPmV4cGVjdF9sb2dfbSA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKKworJGNvbW1pdF9zaGE0IGNvbW1pdDQKK290aGVyIG5vdGVzIGZvciBjb21taXQ0CisKKyRjb21taXRfc2hhMyBjb21taXQzCitvdGhlciBub3RlcyBmb3IgY29tbWl0MworCiskY29tbWl0X3NoYTIgY29tbWl0MgorbmV3IG5vdGVzIGZvciBjb21taXQyCisKKyRjb21taXRfc2hhMSBjb21taXQxCitvdGhlciBub3RlcyBmb3IgY29tbWl0MQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCBtZXJnZSB1c2luZyAib3VycyIgc3RyYXRlZ3kgKHogPT4gdyknICcKKwlnaXQgdXBkYXRlLXJlZiByZWZzL25vdGVzL20gcmVmcy9ub3Rlcy93ICYmCisJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMvbSAmJgorCWdpdCBub3RlcyBtZXJnZSAtcyBvdXJzIHogJiYKKwl2ZXJpZnlfbm90ZXMgbSBjb21taXQ1ICYmCisJIyB3L3gveS96IHVuY2hhbmdlZAorCXZlcmlmeV9ub3RlcyB3IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHkgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB6IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBzdGlsbCBoYXMgZmFub3V0IGFmdGVyIG1lcmdlIChtKScgJ3ZlcmlmeV9mYW5vdXQgbScKKworY2F0ID5leHBlY3RfbG9nX20gPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1CisKKyRjb21taXRfc2hhNCBjb21taXQ0CisKKyRjb21taXRfc2hhMyBjb21taXQzCitub3RlcyBmb3IgY29tbWl0MworCithcHBlbmRlZCBub3RlcyBmb3IgY29tbWl0MworCiskY29tbWl0X3NoYTIgY29tbWl0MgorbmV3IG5vdGVzIGZvciBjb21taXQyCisKKyRjb21taXRfc2hhMSBjb21taXQxCitvdGhlciBub3RlcyBmb3IgY29tbWl0MQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCBtZXJnZSB1c2luZyAidGhlaXJzIiBzdHJhdGVneSAoeiA9PiB3KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3cgJiYKKwlnaXQgbm90ZXMgbWVyZ2UgLXMgdGhlaXJzIHogJiYKKwl2ZXJpZnlfbm90ZXMgbSBjb21taXQ1ICYmCisJIyB3L3gveS96IHVuY2hhbmdlZAorCXZlcmlmeV9ub3RlcyB3IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHkgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB6IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBzdGlsbCBoYXMgZmFub3V0IGFmdGVyIG1lcmdlIChtKScgJ3ZlcmlmeV9mYW5vdXQgbScKKworY2F0ID5leHBlY3RfbG9nX20gPDxFT0YKKyRjb21taXRfc2hhNSBjb21taXQ1CisKKyRjb21taXRfc2hhNCBjb21taXQ0CitvdGhlciBub3RlcyBmb3IgY29tbWl0NAorCiskY29tbWl0X3NoYTMgY29tbWl0Mworb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDMKKworbm90ZXMgZm9yIGNvbW1pdDMKKworYXBwZW5kZWQgbm90ZXMgZm9yIGNvbW1pdDMKKworJGNvbW1pdF9zaGEyIGNvbW1pdDIKK25ldyBub3RlcyBmb3IgY29tbWl0MgorCiskY29tbWl0X3NoYTEgY29tbWl0MQorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDEKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2Nlc3NmdWwgbWVyZ2UgdXNpbmcgInVuaW9uIiBzdHJhdGVneSAoeiA9PiB3KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3cgJiYKKwlnaXQgbm90ZXMgbWVyZ2UgLXMgdW5pb24geiAmJgorCXZlcmlmeV9ub3RlcyBtIGNvbW1pdDUgJiYKKwkjIHcveC95L3ogdW5jaGFuZ2VkCisJdmVyaWZ5X25vdGVzIHcgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB4IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeSBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHogY29tbWl0NQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RlcyB0cmVlIHN0aWxsIGhhcyBmYW5vdXQgYWZ0ZXIgbWVyZ2UgKG0pJyAndmVyaWZ5X2Zhbm91dCBtJworCitjYXQgPmV4cGVjdF9sb2dfbSA8PEVPRgorJGNvbW1pdF9zaGE1IGNvbW1pdDUKKworJGNvbW1pdF9zaGE0IGNvbW1pdDQKK290aGVyIG5vdGVzIGZvciBjb21taXQ0CisKKyRjb21taXRfc2hhMyBjb21taXQzCithcHBlbmRlZCBub3RlcyBmb3IgY29tbWl0Mworbm90ZXMgZm9yIGNvbW1pdDMKK290aGVyIG5vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCituZXcgbm90ZXMgZm9yIGNvbW1pdDIKKworJGNvbW1pdF9zaGExIGNvbW1pdDEKK290aGVyIG5vdGVzIGZvciBjb21taXQxCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIG1lcmdlIHVzaW5nICJjYXRfc29ydF91bmlxIiBzdHJhdGVneSAoeiA9PiB3KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMvbSByZWZzL25vdGVzL3cgJiYKKwlnaXQgbm90ZXMgbWVyZ2UgLXMgY2F0X3NvcnRfdW5pcSB6ICYmCisJdmVyaWZ5X25vdGVzIG0gY29tbWl0NSAmJgorCSMgdy94L3kveiB1bmNoYW5nZWQKKwl2ZXJpZnlfbm90ZXMgdyBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHggY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB5IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeiBjb21taXQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgc3RpbGwgaGFzIGZhbm91dCBhZnRlciBtZXJnZSAobSknICd2ZXJpZnlfZmFub3V0IG0nCisKKyMgV2UncmUgbWVyZ2luZyB6IGludG8gdy4gSGVyZSBhcmUgdGhlIGNvbmZsaWN0cyB3ZSBleHBlY3Q6CisjCisjIGNvbW1pdCB8IHggLT4gdyAgICB8IHggLT4geiAgICB8IGNvbmZsaWN0PworIyAtLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tfC0tLS0tLS0tLS0KKyMgMSAgICAgIHwgY2hhbmdlZCAgIHwgdW5jaGFuZ2VkIHwgbm8sIHVzZSB3CisjIDIgICAgICB8IHVuY2hhbmdlZCB8IGNoYW5nZWQgICB8IG5vLCB1c2UgegorIyAzICAgICAgfCBjaGFuZ2VkICAgfCBjaGFuZ2VkICAgfCB5ZXMgKHcsIHRoZW4geiBpbiBjb25mbGljdCBtYXJrZXJzKQorIyA0ICAgICAgfCBjaGFuZ2VkICAgfCBkZWxldGVkICAgfCB5ZXMgKHcpCisjIDUgICAgICB8IGRlbGV0ZWQgICB8IGRlbGV0ZWQgICB8IG5vLCBkZWxldGVkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHRvIG1lcmdlIHVzaW5nICJtYW51YWwiIHN0cmF0ZWd5ICh6ID0+IHcpJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy9tIHJlZnMvbm90ZXMvdyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBub3RlcyBtZXJnZSB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdGVzIHRyZWUgc3RpbGwgaGFzIGZhbm91dCBhZnRlciBtZXJnZSAobSknICd2ZXJpZnlfZmFub3V0IG0nCisKK2NhdCA8PEVPRiB8IHNvcnQgPmV4cGVjdF9jb25mbGljdHMKKyRjb21taXRfc2hhMworJGNvbW1pdF9zaGE0CitFT0YKKworY2F0ID5leHBlY3RfY29uZmxpY3RfJGNvbW1pdF9zaGEzIDw8RU9GCis8PDw8PDw8IHJlZnMvbm90ZXMvbQorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDMKKz09PT09PT0KK25vdGVzIGZvciBjb21taXQzCisKK2FwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzCis+Pj4+Pj4+IHJlZnMvbm90ZXMvegorRU9GCisKK2NhdCA+ZXhwZWN0X2NvbmZsaWN0XyRjb21taXRfc2hhNCA8PEVPRgorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgY29uZmxpY3QgZW50cmllcyAod2l0aCBubyBmYW5vdXQpJyAnCisJbHMgLmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRSA+b3V0cHV0X2NvbmZsaWN0cyAmJgorCXRlc3RfY21wIGV4cGVjdF9jb25mbGljdHMgb3V0cHV0X2NvbmZsaWN0cyAmJgorCSggZm9yIGYgaW4gJChjYXQgZXhwZWN0X2NvbmZsaWN0cyk7IGRvCisJCXRlc3RfY21wICJleHBlY3RfY29uZmxpY3RfJGYiICIuZ2l0L05PVEVTX01FUkdFX1dPUktUUkVFLyRmIiB8fAorCQlleGl0IDEKKwlkb25lICkgJiYKKwkjIFZlcmlmeSB0aGF0IGN1cnJlbnQgbm90ZXMgdHJlZSAocHJlLW1lcmdlKSBoYXMgbm90IGNoYW5nZWQgKG0gPT0gdykKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgcmVmcy9ub3Rlcy9tKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlZnMvbm90ZXMvdykiCisnCisKK2NhdCA+ZXhwZWN0X2xvZ19tIDw8RU9GCiskY29tbWl0X3NoYTUgY29tbWl0NQorCiskY29tbWl0X3NoYTQgY29tbWl0NAorb3RoZXIgbm90ZXMgZm9yIGNvbW1pdDQKKworJGNvbW1pdF9zaGEzIGNvbW1pdDMKK290aGVyIG5vdGVzIGZvciBjb21taXQzCisKK2FwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzCisKKyRjb21taXRfc2hhMiBjb21taXQyCituZXcgbm90ZXMgZm9yIGNvbW1pdDIKKworJGNvbW1pdF9zaGExIGNvbW1pdDEKK290aGVyIG5vdGVzIGZvciBjb21taXQxCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNvbHZlIGFuZCBmaW5hbGl6ZSBtZXJnZSAoeiA9PiB3KScgJworCWNhdCA+LmdpdC9OT1RFU19NRVJHRV9XT1JLVFJFRS8kY29tbWl0X3NoYTMgPDxFT0YgJiYKK290aGVyIG5vdGVzIGZvciBjb21taXQzCisKK2FwcGVuZGVkIG5vdGVzIGZvciBjb21taXQzCitFT0YKKwlnaXQgbm90ZXMgbWVyZ2UgLS1jb21taXQgJiYKKwl2ZXJpZnlfbm90ZXMgbSBjb21taXQ1ICYmCisJIyB3L3gveS96IHVuY2hhbmdlZAorCXZlcmlmeV9ub3RlcyB3IGNvbW1pdDUgJiYKKwl2ZXJpZnlfbm90ZXMgeCBjb21taXQ1ICYmCisJdmVyaWZ5X25vdGVzIHkgY29tbWl0NSAmJgorCXZlcmlmeV9ub3RlcyB6IGNvbW1pdDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90ZXMgdHJlZSBzdGlsbCBoYXMgZmFub3V0IGFmdGVyIG1lcmdlIChtKScgJ3ZlcmlmeV9mYW5vdXQgbScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzMzIwLW5vdGVzLW1lcmdlLXdvcmt0cmVlcy5zaCBiL3QvdDMzMjAtbm90ZXMtbWVyZ2Utd29ya3RyZWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFmNzFkNTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzMzIwLW5vdGVzLW1lcmdlLXdvcmt0cmVlcy5zaApAQCAtMCwwICsxLDcyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE1IFR3aXR0ZXIsIEluYworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG1lcmdpbmcgb2Ygbm90ZXMgdHJlZXMgaW4gbXVsdGlwbGUgd29ya3RyZWVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tbWl0JyAnCisJdGVzdF9jb21taXQgdGFudHJ1bQorJworCitjb21taXRfdGFudHJ1bT0kKGdpdCByZXYtcGFyc2UgdGFudHJ1bV57Y29tbWl0fSkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbm90ZXMgcmVmICh4KScgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ggJiYKKwlnaXQgbm90ZXMgYWRkIC1tICJ4IG5vdGVzIG9uIHRhbnRydW0iIHRhbnRydW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbG9jYWwgYnJhbmNoICh5KScgJworCWdpdCB1cGRhdGUtcmVmIHJlZnMvbm90ZXMveSByZWZzL25vdGVzL3ggJiYKKwlnaXQgY29uZmlnIGNvcmUubm90ZXNSZWYgcmVmcy9ub3Rlcy95ICYmCisJZ2l0IG5vdGVzIHJlbW92ZSB0YW50cnVtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbW90ZSBicmFuY2ggKHopJyAnCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9ub3Rlcy96IHJlZnMvbm90ZXMveCAmJgorCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ogJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJjb25mbGljdGluZyBub3RlcyBvbiB0YW50cnVtIiB0YW50cnVtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmeSBub3RlcyByZWYgb3Vyc2VsdmVzICh4KScgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3ggJiYKKwlnaXQgbm90ZXMgYWRkIC1mIC1tICJtb3JlIGNvbmZsaWN0aW5nIG5vdGVzIG9uIHRhbnRydW0iIHRhbnRydW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHNvbWUgbmV3IHdvcmt0cmVlcycgJworCWdpdCB3b3JrdHJlZSBhZGQgLWIgbmV3YnJhbmNoIHdvcmt0cmVlIG1hc3RlciAmJgorCWdpdCB3b3JrdHJlZSBhZGQgLWIgbmV3YnJhbmNoMiB3b3JrdHJlZTIgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IGZhaWxzIGFuZCBzZXRzIE5PVEVTX01FUkdFX1JFRicgJworCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiAmJgorCWVjaG8gInJlZjogcmVmcy9ub3Rlcy95IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgLmdpdC9OT1RFU19NRVJHRV9SRUYgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB5IHdoaWxlIG1pZC1tZXJnZSBpbiBhbm90aGVyIHdvcmtkaXIgZmFpbHMnICcKKwkoCisJCWNkIHdvcmt0cmVlICYmCisJCWdpdCBjb25maWcgY29yZS5ub3Rlc1JlZiByZWZzL25vdGVzL3kgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG5vdGVzIG1lcmdlIHogMj5lcnIgJiYKKwkJZ3JlcCAiQSBub3RlcyBtZXJnZSBpbnRvIHJlZnMvbm90ZXMveSBpcyBhbHJlYWR5IGluLXByb2dyZXNzIGF0IiBlcnIKKwkpICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC93b3JrdHJlZXMvd29ya3RyZWUvTk9URVNfTUVSR0VfUkVGCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHogaW50byB4IHdoaWxlIG1pZC1tZXJnZSBvbiB5IHN1Y2NlZWRzJyAnCisJKAorCQljZCB3b3JrdHJlZTIgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLm5vdGVzUmVmIHJlZnMvbm90ZXMveCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbm90ZXMgbWVyZ2UgeiAyPiYxID5vdXQgJiYKKwkJZ3JlcCAiQXV0b21hdGljIG5vdGVzIG1lcmdlIGZhaWxlZCIgb3V0ICYmCisJCWdyZXAgLXYgIkEgbm90ZXMgbWVyZ2UgaW50byByZWZzL25vdGVzL3ggaXMgYWxyZWFkeSBpbi1wcm9ncmVzcyBpbiIgb3V0CisJKSAmJgorCWVjaG8gInJlZjogcmVmcy9ub3Rlcy94IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgLmdpdC93b3JrdHJlZXMvd29ya3RyZWUyL05PVEVTX01FUkdFX1JFRiBleHBlY3QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDAwLXJlYmFzZS5zaCBiL3QvdDM0MDAtcmViYXNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3YjU2ODIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDAwLXJlYmFzZS5zaApAQCAtMCwwICsxLDI1OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBBbW9zIFdhdGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIGFzc29ydGVkIHRlc3RzCisKK1RoaXMgdGVzdCBydW5zIGdpdCByZWJhc2UgYW5kIGNoZWNrcyB0aGF0IHRoZSBhdXRob3IgaW5mb3JtYXRpb24gaXMgbm90IGxvc3QKK2Ftb25nIG90aGVyIHRoaW5ncy4KKycKKy4gLi90ZXN0LWxpYi5zaAorCitHSVRfQVVUSE9SX05BTUU9YXV0aG9yQG5hbWUKK0dJVF9BVVRIT1JfRU1BSUw9Ym9ndXNAZW1haWxAYWRkcmVzcworZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQVVUSE9SX0VNQUlMCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgcmVwb3NpdG9yeSB3aXRoIHRvcGljIGJyYW5jaGVzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLmxvZ0FsbFJlZlVwZGF0ZXMgdHJ1ZSAmJgorCWVjaG8gRmlyc3QgPkEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEEgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgQS4iICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZvcmNlLTN3YXkgJiYKKwllY2hvIER1bW15ID5ZICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBZICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIFkuIiAmJgorCWdpdCBjaGVja291dCAtYiBmaWxlbW92ZSAmJgorCWdpdCByZXNldCAtLXNvZnQgbWFzdGVyICYmCisJbWtkaXIgRCAmJgorCWdpdCBtdiBBIEQvQSAmJgorCWdpdCBjb21taXQgLW0gIk1vdmUgQS4iICYmCisJZ2l0IGNoZWNrb3V0IC1iIG15LXRvcGljLWJyYW5jaCBtYXN0ZXIgJiYKKwllY2hvIFNlY29uZCA+QiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQiAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBCLiIgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZWNobyBUaGlyZCA+PkEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IEEgJiYKKwlnaXQgY29tbWl0IC1tICJNb2RpZnkgQS4iICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgbXktdG9waWMtYnJhbmNoICYmCisJZWNobyBTaWRlID4+QyAmJgorCWdpdCBhZGQgQyAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBDIiAmJgorCWdpdCBjaGVja291dCAtZiBteS10b3BpYy1icmFuY2ggJiYKKwlnaXQgdGFnIHRvcGljCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBvbiBkaXJ0eSB3b3JrdHJlZScgJworCWVjaG8gZGlydHkgPj5BICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG9uIGRpcnR5IGNhY2hlJyAnCisJZ2l0IGFkZCBBICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGFnYWluc3QgbWFzdGVyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlLCB3aXRoIDxvbnRvPiBhbmQgPHVwc3RyZWFtPiBzcGVjaWZpZWQgYXMgOi9xdXV4ZXJ5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIHRvcmViYXNlIiAmJgorCWdpdCBjaGVja291dCAtYiB0b3JlYmFzZSBteS10b3BpYy1icmFuY2heICYmCisJdXBzdHJlYW09JChnaXQgcmV2LXBhcnNlICI6L0FkZCBCIikgJiYKKwlvbnRvPSQoZ2l0IHJldi1wYXJzZSAiOi9BZGQgQSIpICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gJG9udG8gJHVwc3RyZWFtICYmCisJZ2l0IHJlc2V0IC0taGFyZCBteS10b3BpYy1icmFuY2heICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gIjovQWRkIEEiICI6L0FkZCBCIiAmJgorCWdpdCBjaGVja291dCBteS10b3BpYy1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIHJlYmFzZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGRlc3Ryb3llZCBhdXRob3IgaW5mb3JtYXRpb24nICcKKwkhIChnaXQgbG9nIHwgZ3JlcCAiQXV0aG9yOiIgfCBncmVwICI8PiIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSByZWJhc2Ugb3BlcmF0aW9uIHNob3VsZCBub3QgaGF2ZSBkZXN0cm95ZWQgYXV0aG9yIGluZm9ybWF0aW9uICgyKScgIgorCWdpdCBsb2cgLTEgfAorCWdyZXAgJ0F1dGhvcjogJEdJVF9BVVRIT1JfTkFNRSA8JEdJVF9BVVRIT1JfRU1BSUw+JworIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIRUFEIHdhcyBkZXRhY2hlZCBkdXJpbmcgcmViYXNlJyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBREB7MX0pICE9ICQoZ2l0IHJldi1wYXJzZSBteS10b3BpYy1icmFuY2hAezF9KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgZnJvbSBhbWJpZ3VvdXMgYnJhbmNoIG5hbWUnICcKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgc2lkZSAmJgorCWdpdCByZWJhc2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBvZmYgb2YgdGhlIHByZXZpb3VzIGJyYW5jaCB1c2luZyAiLSInICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IHJlYmFzZSBAey0xfSA+ZXhwZWN0Lm1lc3NhZ2VzICYmCisJZ2l0IG1lcmdlLWJhc2UgbWFzdGVyIEhFQUQgPmV4cGVjdC5mb3JrcG9pbnQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwlnaXQgcmViYXNlIC0gPmFjdHVhbC5tZXNzYWdlcyAmJgorCWdpdCBtZXJnZS1iYXNlIG1hc3RlciBIRUFEID5hY3R1YWwuZm9ya3BvaW50ICYmCisKKwl0ZXN0X2NtcCBleHBlY3QuZm9ya3BvaW50IGFjdHVhbC5mb3JrcG9pbnQgJiYKKwkjIHRoZSBuZXh0IG9uZSBpcyBkdWJpb3VzLS0td2UgbWF5IHdhbnQgdG8gc2F5ICItIiwKKwkjIGluc3RlYWQgb2YgQHstMX0sIGluIHRoZSBtZXNzYWdlCisJdGVzdF9pMThuY21wIGV4cGVjdC5tZXNzYWdlcyBhY3R1YWwubWVzc2FnZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGEgc2luZ2xlIG1vZGUgY2hhbmdlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgdG9waWMgJiYKKwllY2hvIDEgPlggJiYKKwlnaXQgYWRkIFggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHByZXBhcmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbW9kZWNoYW5nZSBIRUFEXiAmJgorCWVjaG8gMSA+WCAmJgorCWdpdCBhZGQgWCAmJgorCXRlc3RfY2htb2QgK3ggQSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbW9kZWNoYW5nZSAmJgorCUdJVF9UUkFDRT0xIGdpdCByZWJhc2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBpcyBub3QgYnJva2VuIGJ5IGRpZmYucmVuYW1lcycgJworCXRlc3RfY29uZmlnIGRpZmYucmVuYW1lcyBjb3BpZXMgJiYKKwlnaXQgY2hlY2tvdXQgZmlsZW1vdmUgJiYKKwlHSVRfVFJBQ0U9MSBnaXQgcmViYXNlIGZvcmNlLTN3YXkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHJlY292ZXInICcKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtb2RlY2hhbmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Nob3cgdmVyYm9zZSBlcnJvciB3aGVuIEhFQUQgY291bGQgbm90IGJlIGRldGFjaGVkJyAnCisJPkIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIHRvcGljIDI+b3V0cHV0LmVyciA+b3V0cHV0Lm91dCAmJgorCWdyZXAgIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDoiIG91dHB1dC5lcnIgJiYKKwlncmVwIEIgb3V0cHV0LmVycgorJworcm0gLWYgQgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsIHdoZW4gdXBzdHJlYW0gYXJnIGlzIG1pc3NpbmcgYW5kIG5vdCBvbiBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgd2hlbiB1cHN0cmVhbSBhcmcgaXMgbWlzc2luZyBhbmQgbm90IGNvbmZpZ3VyZWQnICcKKwlnaXQgY2hlY2tvdXQgLWIgbm8tY29uZmlnIHRvcGljICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IHRvIGNvbW1vbiBiYXNlIGluIEB7dXBzdHJlYW19cyByZWZsb2cgaWYgbm8gdXBzdHJlYW0gYXJnJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGRlZmF1bHQtYmFzZSBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZGVmYXVsdCB0b3BpYyAmJgorCWdpdCBjb25maWcgYnJhbmNoLmRlZmF1bHQucmVtb3RlIC4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5kZWZhdWx0Lm1lcmdlIHJlZnMvaGVhZHMvZGVmYXVsdC1iYXNlICYmCisJZ2l0IHJlYmFzZSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZGVmYXVsdC1iYXNlID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIGRlZmF1bHR+MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjaGVja291dCBkZWZhdWx0LWJhc2UgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGNoZWNrb3V0IGRlZmF1bHQgJiYKKwlnaXQgcmViYXNlICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBkZWZhdWx0LWJhc2UgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgZGVmYXVsdH4xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrZWQgY29tbWl0cyBhbmQgZm9yay1wb2ludCB3b3JrIHRvZ2V0aGVyJyAnCisJZ2l0IGNoZWNrb3V0IGRlZmF1bHQtYmFzZSAmJgorCWVjaG8gQW1lbmRlZCA+QSAmJgorCWdpdCBjb21taXQgLWEgLS1uby1lZGl0IC0tYW1lbmQgJiYKKwl0ZXN0X2NvbW1pdCBCIEIgJiYKKwl0ZXN0X2NvbW1pdCBuZXdfQiBCICJOZXcgQiIgJiYKKwl0ZXN0X2NvbW1pdCBDIEMgJiYKKwlnaXQgY2hlY2tvdXQgZGVmYXVsdCAmJgorCWdpdCByZXNldCAtLWhhcmQgZGVmYXVsdC1iYXNlQHs0fSAmJgorCXRlc3RfY29tbWl0IEQgRCAmJgorCWdpdCBjaGVycnktcGljayAtMiBkZWZhdWx0LWJhc2VeICYmCisJdGVzdF9jb21taXQgZmluYWxfQiBCICJGaW5hbCBCIiAmJgorCWdpdCByZWJhc2UgJiYKKwllY2hvIEFtZW5kZWQgPmV4cGVjdCAmJgorCXRlc3RfY21wIEEgZXhwZWN0ICYmCisJZWNobyAiRmluYWwgQiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIEIgZXhwZWN0ICYmCisJZWNobyBDID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBDIGV4cGVjdCAmJgorCWVjaG8gRCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgRCBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1xIGlzIHF1aWV0JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHF1aWV0IHRvcGljICYmCisJZ2l0IHJlYmFzZSAtcSBtYXN0ZXIgPm91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlYmFzZSBhIGNvbW1pdCB0aGF0IHNwcmlua2xlcyBDUnMgaW4nICcKKwkoCisJCWVjaG8gIk9uZSIKKwkJZWNobyAiVHdvUSIKKwkJZWNobyAiVGhyZWUiCisJCWVjaG8gIkZRdXIiCisJCWVjaG8gIkZpdmUiCisJKSB8IHFfdG9fY3IgPkNSICYmCisJZ2l0IGFkZCBDUiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkEgZmlsZSB3aXRoIGEgbGluZSB3aXRoIENSIiAmJgorCWdpdCB0YWcgZmlsZS13aXRoLWNyICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCWdpdCByZWJhc2UgLS1vbnRvIEhFQUReXiBIRUFEXiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbGUtd2l0aC1jcjpDUiBIRUFEOkNSCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBjYW4gY29weSBub3RlcycgJworCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZS5yZWJhc2UgdHJ1ZSAmJgorCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCXRlc3RfY29tbWl0IG4xICYmCisJdGVzdF9jb21taXQgbjIgJiYKKwl0ZXN0X2NvbW1pdCBuMyAmJgorCWdpdCBub3RlcyBhZGQgLW0iYSBub3RlIiBuMyAmJgorCWdpdCByZWJhc2UgLS1vbnRvIG4xIG4yICYmCisJdGVzdCAiYSBub3RlIiA9ICIkKGdpdCBub3RlcyBzaG93IEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLW0gY2FuIGNvcHkgbm90ZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG4zICYmCisJZ2l0IHJlYmFzZSAtbSAtLW9udG8gbjEgbjIgJiYKKwl0ZXN0ICJhIG5vdGUiID0gIiQoZ2l0IG5vdGVzIHNob3cgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBjb21taXQgd2l0aCBhbiBhbmNpZW50IHRpbWVzdGFtcCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCT5vbGQub25lICYmIGdpdCBhZGQgb2xkLm9uZSAmJiB0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tZGF0ZT0iQDEyMzQ1ICswNDAwIiAtbSAiT2xkIG9uZSIgJiYKKwk+b2xkLnR3byAmJiBnaXQgYWRkIG9sZC50d28gJiYgdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWRhdGU9IkAyMzQ1NiArMDUwMCIgLW0gIk9sZCB0d28iICYmCisJPm9sZC50aHJlZSAmJiBnaXQgYWRkIG9sZC50aHJlZSAmJiB0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tZGF0ZT0iQDM0NTY3ICswNjAwIiAtbSAiT2xkIHRocmVlIiAmJgorCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXl4gPmFjdHVhbCAmJgorCWdyZXAgImF1dGhvciAuKiAxMjM0NSArMDQwMCQiIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gPmFjdHVhbCAmJgorCWdyZXAgImF1dGhvciAuKiAyMzQ1NiArMDUwMCQiIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCAiYXV0aG9yIC4qIDM0NTY3ICswNjAwJCIgYWN0dWFsICYmCisKKwlnaXQgcmViYXNlIC0tb250byBIRUFEXl4gSEVBRF4gJiYKKworCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCAiYXV0aG9yIC4qIDM0NTY3ICswNjAwJCIgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwMi1yZWJhc2UtbWVyZ2Uuc2ggYi90L3QzNDAyLXJlYmFzZS1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZjY0NTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQwMi1yZWJhc2UtbWVyZ2Uuc2gKQEAgLTAsMCArMSwxNTYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLW1lcmdlIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCitUPSJBIHF1aWNrIGJyb3duIGZveAoranVtcHMgb3ZlciB0aGUgbGF6eSBkb2cuIgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZWNobyAiJGkgJFQiCitkb25lID5vcmlnaW5hbAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgYWRkIG9yaWdpbmFsICYmCisJZ2l0IGNvbW1pdCAtbSJpbml0aWFsIiAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCWVjaG8gIjExICRUIiA+Pm9yaWdpbmFsICYmCisJZ2l0IGNvbW1pdCAtYSAtbSJtYXN0ZXIgdXBkYXRlcyBhIGJpdC4iICYmCisKKwllY2hvICIxMiAkVCIgPj5vcmlnaW5hbCAmJgorCWdpdCBjb21taXQgLWEgLW0ibWFzdGVyIHVwZGF0ZXMgYSBiaXQgbW9yZS4iICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCShlY2hvICIwICRUIiA7IGNhdCBvcmlnaW5hbCkgPnJlbmFtZWQgJiYKKwlnaXQgYWRkIHJlbmFtZWQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIG9yaWdpbmFsICYmCisJZ2l0IGNvbW1pdCAtYSAtbSJzaWRlIHJlbmFtZXMgYW5kIGVkaXRzLiIgJiYKKworCXRyICJbYS16XSIgIltBLVpdIiA8b3JpZ2luYWwgPm5ld2ZpbGUgJiYKKwlnaXQgYWRkIG5ld2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tInNpZGUgZWRpdHMgZnVydGhlci4iICYmCisJZ2l0IGJyYW5jaCBzZWNvbmQtc2lkZSAmJgorCisJdHIgIlthLW1dIiAiW0EtTV0iIDxvcmlnaW5hbCA+bmV3ZmlsZSAmJgorCXJtIC1mIG9yaWdpbmFsICYmCisJZ2l0IGNvbW1pdCAtYSAtbSJzaWRlIGVkaXRzIG9uY2UgYWdhaW4uIiAmJgorCisJZ2l0IGJyYW5jaCB0ZXN0LXJlYmFzZSBzaWRlICYmCisJZ2l0IGJyYW5jaCB0ZXN0LXJlYmFzZS1waWNrIHNpZGUgJiYKKwlnaXQgYnJhbmNoIHRlc3QtcmVmZXJlbmNlLXBpY2sgc2lkZSAmJgorCWdpdCBicmFuY2ggdGVzdC1jb25mbGljdHMgc2lkZSAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0LW1lcmdlIHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmZXJlbmNlIG1lcmdlJyAnCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSAtbSAicmVmZXJlbmNlIG1lcmdlIiBtYXN0ZXIKKycKKworUFJFX1JFQkFTRT0kKGdpdCByZXYtcGFyc2UgdGVzdC1yZWJhc2UpCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHJlYmFzZSAnCisJZ2l0IGNoZWNrb3V0IHRlc3QtcmViYXNlICYmCisJR0lUX1RSQUNFPTEgZ2l0IHJlYmFzZSAtLW1lcmdlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0LXJlYmFzZUB7MX0gaXMgcHJlIHJlYmFzZScgJworCXRlc3QgJFBSRV9SRUJBU0UgPSAkKGdpdCByZXYtcGFyc2UgdGVzdC1yZWJhc2VAezF9KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBhbmQgcmViYXNlIHNob3VsZCBtYXRjaCcgJworCWdpdCBkaWZmLXRyZWUgLXIgdGVzdC1yZWJhc2UgdGVzdC1tZXJnZSA+ZGlmZmVyZW5jZSAmJgorCWlmIHRlc3QgLXMgZGlmZmVyZW5jZQorCXRoZW4KKwkJY2F0IGRpZmZlcmVuY2UKKwkJKGV4aXQgMSkKKwllbHNlCisJCWVjaG8gaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgdGhlIG90aGVyIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIHNpZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1YdGhlaXJzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0aW5nIG1hc3Rlcn4yICYmCisJZWNobyAiQUIgJFQiID4+IG9yaWdpbmFsICYmCisJZ2l0IGNvbW1pdCAtbWNvbmZsaWN0aW5nIG9yaWdpbmFsICYmCisJZ2l0IHJlYmFzZSAtWHRoZWlycyBtYXN0ZXIgJiYKKwlncmVwIEFCIG9yaWdpbmFsICYmCisJISBncmVwIDExIG9yaWdpbmFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGFuZCByZWJhc2Ugc2hvdWxkIG1hdGNoJyAnCisJZ2l0IGRpZmYtdHJlZSAtciB0ZXN0LXJlYmFzZSB0ZXN0LW1lcmdlID5kaWZmZXJlbmNlICYmCisJaWYgdGVzdCAtcyBkaWZmZXJlbmNlCisJdGhlbgorCQljYXQgZGlmZmVyZW5jZQorCQkoZXhpdCAxKQorCWVsc2UKKwkJZWNobyBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BpY2tpbmcgcmViYXNlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIC0tb250byBtYXN0ZXIgc2lkZV5eICYmCisJbWI9JChnaXQgbWVyZ2UtYmFzZSBtYXN0ZXIgSEVBRCkgJiYKKwlpZiB0ZXN0ICIkbWIiID0gIiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpIgorCXRoZW4KKwkJZWNobyBoYXBweQorCWVsc2UKKwkJZ2l0IHNob3ctYnJhbmNoCisJCShleGl0IDEpCisJZmkgJiYKKwlmPSQoZ2l0IGRpZmYtdHJlZSAtLW5hbWUtb25seSBIRUFEXiBIRUFEKSAmJgorCWc9JChnaXQgZGlmZi10cmVlIC0tbmFtZS1vbmx5IEhFQUReXiBIRUFEXikgJiYKKwljYXNlICIkZiwkZyIgaW4KKwluZXdmaWxlLG5ld2ZpbGUpCisJCWVjaG8gaGFwcHkgOzsKKwkqKQorCQllY2hvICIkZiIKKwkJZWNobyAiJGciCisJCShleGl0IDEpCisJZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLXMgZnVubnkgLVhvcHQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mciB0ZXN0LWJpbiBmdW5ueS53YXMucnVuIiAmJgorCW1rZGlyIHRlc3QtYmluICYmCisJY2F0ID50ZXN0LWJpbi9naXQtbWVyZ2UtZnVubnkgPDwtRU9GICYmCisJIyEkU0hFTExfUEFUSAorCWNhc2UgIlwkMSIgaW4gLS1vcHQpIDs7ICopIGV4aXQgMiA7OyBlc2FjCisJc2hpZnQgJiYKKwk+ZnVubnkud2FzLnJ1biAmJgorCWV4ZWMgZ2l0IG1lcmdlLXJlY3Vyc2l2ZSAiXCRAIgorCUVPRgorCWNobW9kICt4IHRlc3QtYmluL2dpdC1tZXJnZS1mdW5ueSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdC1mdW5ueSBtYXN0ZXJeICYmCisJdGVzdF9jb21taXQgZnVubnkgJiYKKwkoCisJCVBBVEg9Li90ZXN0LWJpbjokUEFUSAorCQlnaXQgcmViYXNlIC1zIGZ1bm55IC1Yb3B0IG1hc3RlcgorCSkgJiYKKwl0ZXN0IC1mIGZ1bm55Lndhcy5ydW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tc2tpcCB3b3JrcyB3aXRoIHR3byBjb25mbGljdHMgaW4gYSByb3cnICcKKwlnaXQgY2hlY2tvdXQgc2Vjb25kLXNpZGUgICYmCisJdHIgIltBLVpdIiAiW2Etel0iIDxuZXdmaWxlID50bXAgJiYKKwltdiB0bXAgbmV3ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0iZWRpdCBjb25mbGljdGluZyB3aXRoIHNpZGUiICYmCisJdHIgIltkLWZdIiAiW0QtRl0iIDxuZXdmaWxlID50bXAgJiYKKwltdiB0bXAgbmV3ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0iYW5vdGhlciBlZGl0IGNvbmZsaWN0aW5nIHdpdGggc2lkZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tbWVyZ2UgdGVzdC1jb25mbGljdHMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tc2tpcCAmJgorCWdpdCByZWJhc2UgLS1za2lwCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwMy1yZWJhc2Utc2tpcC5zaCBiL3QvdDM0MDMtcmViYXNlLXNraXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzk2ODAyMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDMtcmViYXNlLXNraXAuc2gKQEAgLTAsMCArMSw3OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLW1lcmdlIC0tc2tpcCB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgd2UgYXNzdW1lIHRoZSBkZWZhdWx0IGdpdCBhbSAtMyAtLXNraXAgc3RyYXRlZ3kgaXMgdGVzdGVkIGluZGVwZW5kZW50bHkKKyMgYW5kIGFsd2F5cyB3b3JrcyA6KQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGhlbGxvID4gaGVsbG8gJiYKKwlnaXQgYWRkIGhlbGxvICYmCisJZ2l0IGNvbW1pdCAtbSAiaGVsbG8iICYmCisJZ2l0IGJyYW5jaCBza2lwLXJlZmVyZW5jZSAmJgorCisJZWNobyB3b3JsZCA+PiBoZWxsbyAmJgorCWdpdCBjb21taXQgLWEgLW0gImhlbGxvIHdvcmxkIiAmJgorCWVjaG8gZ29vZGJ5ZSA+PiBoZWxsbyAmJgorCWdpdCBjb21taXQgLWEgLW0gImdvb2RieWUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWYgc2tpcC1yZWZlcmVuY2UgJiYKKwllY2hvIG1vbyA+IGhlbGxvICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAid2Ugc2hvdWxkIHNraXAgdGhpcyIgJiYKKwllY2hvIG1vbyA+IGNvdyAmJgorCWdpdCBhZGQgY293ICYmCisJZ2l0IGNvbW1pdCAtbSAidGhpcyBzaG91bGQgbm90IGJlIHNraXBwZWQiICYmCisJZ2l0IGJyYW5jaCBwcmUtcmViYXNlIHNraXAtcmVmZXJlbmNlICYmCisJZ2l0IGJyYW5jaCBza2lwLW1lcmdlIHNraXAtcmVmZXJlbmNlCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugd2l0aCBnaXQgYW0gLTMgKGRlZmF1bHQpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tc2tpcCBjYW4gbm90IGJlIHVzZWQgd2l0aCBvdGhlciBvcHRpb25zJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtdiAtLXNraXAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tc2tpcCAtdgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1za2lwIHdpdGggYW0gLTMnICcKKwlnaXQgcmViYXNlIC0tc2tpcAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIG1vdmVzIGJhY2sgdG8gc2tpcC1yZWZlcmVuY2UnICcKKwl0ZXN0IHJlZnMvaGVhZHMvc2tpcC1yZWZlcmVuY2UgPSAkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgJiYKKwlnaXQgYnJhbmNoIHBvc3QtcmViYXNlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwllY2hvICJoZWxsbyIgPiBoZWxsbyAmJgorCWdpdCBhZGQgaGVsbG8gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0IHJlZnMvaGVhZHMvc2tpcC1yZWZlcmVuY2UgPSAkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHBvc3QtcmViYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHNraXAtbWVyZ2UnICdnaXQgY2hlY2tvdXQgLWYgc2tpcC1tZXJnZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdpdGggLS1tZXJnZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1tZXJnZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tc2tpcCB3aXRoIC0tbWVyZ2UnICcKKwlnaXQgcmViYXNlIC0tc2tpcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBhbmQgcmVmZXJlbmNlIHRyZWVzIGVxdWFsJyAnCisJdGVzdCAteiAiYGdpdCBkaWZmLXRyZWUgc2tpcC1tZXJnZSBza2lwLXJlZmVyZW5jZWAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmVkIGJhY2sgdG8gYnJhbmNoIGNvcnJlY3RseScgJworCXRlc3QgcmVmcy9oZWFkcy9za2lwLW1lcmdlID0gJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpCisnCisKK3Rlc3RfZGVidWcgJ2dpdGsgLS1hbGwgJiBzbGVlcCAxJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoIGIvdC90MzQwNC1yZWJhc2UtaW50ZXJhY3RpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2RlMGIxZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDQtcmViYXNlLWludGVyYWN0aXZlLnNoCkBAIC0wLDAgKzEsMTI2NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgaW50ZXJhY3RpdmUKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IHJlYmFzZSAiaW50ZXJhY3RpdmVseSIsIGJ5IGZha2luZyBhbiBlZGl0LCBhbmQgdmVyaWZpZXMKK3RoYXQgdGhlIHJlc3VsdCBzdGlsbCBtYWtlcyBzZW5zZS4KKworSW5pdGlhbCBzZXR1cDoKKworICAgICBvbmUgLSB0d28gLSB0aHJlZSAtIGZvdXIgKGNvbmZsaWN0LWJyYW5jaCkKKyAgIC8KKyBBIC0gQiAtIEMgLSBEIC0gRSAgICAgICAgICAgIChtYXN0ZXIpCisgfCBcCisgfCAgIEYgLSBHIC0gSCAgICAgICAgICAgICAgICAoYnJhbmNoMSkKKyB8ICAgICBcCisgfFwgICAgICBJICAgICAgICAgICAgICAgICAgICAoYnJhbmNoMikKKyB8IFwKKyB8ICAgSiAtIEsgLSBMIC0gTSAgICAgICAgICAgIChuby1jb25mbGljdC1icmFuY2gpCisgIFwKKyAgICBOIC0gTyAtIFAgICAgICAgICAgICAgICAgIChuby1mZi1icmFuY2gpCisKKyB3aGVyZSBBLCBCLCBEIGFuZCBHIGFsbCB0b3VjaCBmaWxlMSwgYW5kIG9uZSwgdHdvLCB0aHJlZSwgZm91ciBhbGwKKyB0b3VjaCBmaWxlICJjb25mbGljdCIuCisnCisuIC4vdGVzdC1saWIuc2gKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKKyMgV0FSTklORzogTW9kaWZpY2F0aW9ucyB0byB0aGUgaW5pdGlhbCByZXBvc2l0b3J5IGNhbiBjaGFuZ2UgdGhlIFNIQSBJRCB1c2VkCisjIGluIHRoZSBleHBlY3QyIGZpbGUgZm9yIHRoZSAnc3RvcCBvbiBjb25mbGljdGluZyBwaWNrJyB0ZXN0LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IEEgZmlsZTEgJiYKKwl0ZXN0X2NvbW1pdCBCIGZpbGUxICYmCisJdGVzdF9jb21taXQgQyBmaWxlMiAmJgorCXRlc3RfY29tbWl0IEQgZmlsZTEgJiYKKwl0ZXN0X2NvbW1pdCBFIGZpbGUzICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDEgQSAmJgorCXRlc3RfY29tbWl0IEYgZmlsZTQgJiYKKwl0ZXN0X2NvbW1pdCBHIGZpbGUxICYmCisJdGVzdF9jb21taXQgSCBmaWxlNSAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gyIEYgJiYKKwl0ZXN0X2NvbW1pdCBJIGZpbGU2ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0LWJyYW5jaCBBICYmCisJdGVzdF9jb21taXQgb25lIGNvbmZsaWN0ICYmCisJdGVzdF9jb21taXQgdHdvIGNvbmZsaWN0ICYmCisJdGVzdF9jb21taXQgdGhyZWUgY29uZmxpY3QgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyIGNvbmZsaWN0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5vLWNvbmZsaWN0LWJyYW5jaCBBICYmCisJdGVzdF9jb21taXQgSiBmaWxlSiAmJgorCXRlc3RfY29tbWl0IEsgZmlsZUsgJiYKKwl0ZXN0X2NvbW1pdCBMIGZpbGVMICYmCisJdGVzdF9jb21taXQgTSBmaWxlTSAmJgorCWdpdCBjaGVja291dCAtYiBuby1mZi1icmFuY2ggQSAmJgorCXRlc3RfY29tbWl0IE4gZmlsZU4gJiYKKwl0ZXN0X2NvbW1pdCBPIGZpbGVPICYmCisJdGVzdF9jb21taXQgUCBmaWxlUAorJworCisjICJleGVjIiBjb21tYW5kcyBhcmUgcmFuIHdpdGggdGhlIHVzZXIgc2hlbGwgYnkgZGVmYXVsdCwgYnV0IHRoaXMgbWF5CisjIGJlIG5vbi1QT1NJWC4gRm9yIGV4YW1wbGUsIGlmIFNIRUxMPXpzaCB0aGVuICI+ZmlsZSIgZG9lc24ndCB3b3JrCisjIHRvIGNyZWF0ZSBhIGZpbGUuIFVuc2V0aW5nIFNIRUxMIGF2b2lkcyBzdWNoIG5vbi1wb3J0YWJsZSBiZWhhdmlvcgorIyBpbiB0ZXN0cy4gSXQgbXVzdCBiZSBleHBvcnRlZCBmb3IgaXQgdG8gdGFrZSBlZmZlY3Qgd2hlcmUgbmVlZGVkLgorU0hFTEw9CitleHBvcnQgU0hFTEwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0ta2VlcC1lbXB0eScgJworCWdpdCBjaGVja291dCAtYiBlbXB0eWJyYW5jaCBtYXN0ZXIgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IiAmJgorCWdpdCByZWJhc2UgLS1rZWVwLWVtcHR5IC1pIEhFQUR+MiAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA2IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgd2l0aCB0aGUgZXhlYyBjb21tYW5kJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSgKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0xJTkVTPSIxIGV4ZWNfPnRvdWNoLW9uZQorCQkyIGV4ZWNfPnRvdWNoLXR3byBleGVjX2ZhbHNlIGV4ZWNfPnRvdWNoLXRocmVlCisJCTMgNCBleGVjXz5cInRvdWNoLWZpbGVfX25hbWVfd2l0aF9zcGFjZXNcIjtfPnRvdWNoLWFmdGVyLXNlbWljb2xvbiA1IiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBBCisJKSAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRvdWNoLW9uZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIHRvdWNoLXR3byAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRvdWNoLXRocmVlICIgKHNob3VsZCBoYXZlIHN0b3BwZWQgYmVmb3JlKSIgJiYKKwl0ZXN0X2NtcF9yZXYgQyBIRUFEICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdG91Y2gtdGhyZWUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAidG91Y2gtZmlsZSAgbmFtZSB3aXRoIHNwYWNlcyIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0b3VjaC1hZnRlci1zZW1pY29sb24gJiYKKwl0ZXN0X2NtcF9yZXYgbWFzdGVyIEhFQUQgJiYKKwlybSAtZiB0b3VjaC0qCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSB3aXRoIHRoZSBleGVjIGNvbW1hbmQgcnVucyBmcm9tIHRyZWUgcm9vdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlta2RpciBzdWJkaXIgJiYgKGNkIHN1YmRpciAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9IjEgZXhlY18+dG91Y2gtc3ViZGlyIiBcCisJCWdpdCByZWJhc2UgLWkgSEVBRF4KKwkpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgdG91Y2gtc3ViZGlyICYmCisJcm0gLWZyIHN1YmRpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgd2l0aCB0aGUgZXhlYyBjb21tYW5kIGNoZWNrcyB0cmVlIGNsZWFubmVzcycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iZXhlY19lY2hvX2Zvb18+ZmlsZTEgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCXRlc3RfY21wX3JldiBtYXN0ZXJeIEhFQUQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSB3aXRoIGV4ZWMgb2YgaW5leGlzdGVudCBjb21tYW5kJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSJleGVjX3RoaXMtY29tbWFuZC1kb2VzLW5vdC1leGlzdCAxIiBcCisJZ2l0IHJlYmFzZSAtaSBIRUFEXiA+YWN0dWFsIDI+JjEgJiYKKwkhIGdyZXAgIk1heWJlIGdpdC1yZWJhc2UgaXMgYnJva2VuIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gY2hhbmdlcyBhcmUgYSBub3AnICcKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCWdpdCByZWJhc2UgLWkgRiAmJgorCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy9icmFuY2gyIiAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEkpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdGhlIFticmFuY2hdIG9wdGlvbicgJworCWdpdCBjaGVja291dCAtYiBkZWFkLWVuZCAmJgorCWdpdCBybSBmaWxlNiAmJgorCWdpdCBjb21taXQgLW0gInN0b3AgaGVyZSIgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlnaXQgcmViYXNlIC1pIEYgYnJhbmNoMiAmJgorCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy9icmFuY2gyIiAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEkpID0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDIpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLW9udG8gPGJyYW5jaD4nICcKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdC1vbnRvIGJyYW5jaDIgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlnaXQgcmViYXNlIC1pIC0tb250byBicmFuY2gxIEYgJiYKKwl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgLXEgSEVBRCkiID0gInJlZnMvaGVhZHMvdGVzdC1vbnRvIiAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSBicmFuY2gxKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEkpID0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBvbiB0b3Agb2YgYSBub24tY29uZmxpY3RpbmcgY29tbWl0JyAnCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKwlnaXQgdGFnIG9yaWdpbmFsLWJyYW5jaDEgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlnaXQgcmViYXNlIC1pIGJyYW5jaDIgJiYKKwl0ZXN0IGZpbGU2ID0gJChnaXQgZGlmZiAtLW5hbWUtb25seSBvcmlnaW5hbC1icmFuY2gxKSAmJgorCXRlc3QgIiQoZ2l0IHN5bWJvbGljLXJlZiAtcSBIRUFEKSIgPSAicmVmcy9oZWFkcy9icmFuY2gxIiAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEkpID0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDIpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSSkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZsb2cgZm9yIHRoZSBicmFuY2ggc2hvd3Mgc3RhdGUgYmVmb3JlIHJlYmFzZScgJworCXRlc3QgJChnaXQgcmV2LXBhcnNlIGJyYW5jaDFAezF9KSA9ICQoZ2l0IHJldi1wYXJzZSBvcmlnaW5hbC1icmFuY2gxKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNoYW5nZSB0d28gY29tbWl0cycgJworCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIgJiYKKwl0ZXN0IEggPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0IEcgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQoraW5kZXggZjcwZjEwZS4uZmQ3OTIzNSAxMDA2NDQKKy0tLSBhL2ZpbGUxCisrKysgYi9maWxlMQorQEAgLTEgKzEgQEAKKy1BCisrRworRU9GCisKK2NhdCA+IGV4cGVjdDIgPDwgRU9GCis8PDw8PDw8IEhFQUQKK0QKKz09PT09PT0KK0cKKz4+Pj4+Pj4gNWQxOGU1NC4uLiBHCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RvcCBvbiBjb25mbGljdGluZyBwaWNrJyAnCisJZ2l0IHRhZyBuZXctYnJhbmNoMSAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgbWFzdGVyICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUR+MykiID0gIiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpIiAmJgorCXRlc3RfY21wIGV4cGVjdCAuZ2l0L3JlYmFzZS1tZXJnZS9wYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdDIgZmlsZTEgJiYKKwl0ZXN0ICIkKGdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgfAorCQlzZWQgLW4gLWUgIi9eVS9zL15VW15hLXpdKi8vcCIpIiA9IGZpbGUxICYmCisJdGVzdCA0ID0gJChncmVwIC12ICJeIyIgPCAuZ2l0L3JlYmFzZS1tZXJnZS9kb25lIHwgd2MgLWwpICYmCisJdGVzdCAwID0gJChncmVwIC1jICJeW14jXSIgPCAuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fib3J0JyAnCisJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgbmV3LWJyYW5jaDEpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdCAiJChnaXQgc3ltYm9saWMtcmVmIC1xIEhFQUQpIiA9ICJyZWZzL2hlYWRzL2JyYW5jaDEiICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtbWVyZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQgd2l0aCBlcnJvciB3aGVuIG5ldyBiYXNlIGNhbm5vdCBiZSBjaGVja2VkIG91dCcgJworCWdpdCBybSAtLWNhY2hlZCBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gInJlbW92ZSBmaWxlIGluIGJhc2UiICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgPiBvdXRwdXQgMj4mMSAmJgorCWdyZXAgIlRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBjaGVja291dDoiIFwKKwkJb3V0cHV0ICYmCisJZ3JlcCAiZmlsZTEiIG91dHB1dCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLW1lcmdlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXRhaW4gYXV0aG9yc2hpcCcgJworCWVjaG8gQSA+IGZpbGU3ICYmCisJZ2l0IGFkZCBmaWxlNyAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0iVHdlcnAgU25vZyIgZ2l0IGNvbW1pdCAtbSAiZGlmZmVyZW50IGF1dGhvciIgJiYKKwlnaXQgdGFnIHR3ZXJwICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyIEhFQUReICYmCisJZ2l0IHNob3cgSEVBRCB8IGdyZXAgIl5BdXRob3I6IFR3ZXJwIFNub2ciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NxdWFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgdHdlcnAgJiYKKwllY2hvIEIgPiBmaWxlNyAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0iTml0Zm9sIiBnaXQgY29tbWl0IC1tICJuaXRmb2wiIGZpbGU3ICYmCisJZWNobyAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIiAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9IjEgc3F1YXNoIDIiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCisJCWdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3RlciBIRUFEfjIgJiYKKwl0ZXN0IEIgPSAkKGNhdCBmaWxlNykgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXRhaW4gYXV0aG9yc2hpcCB3aGVuIHNxdWFzaGluZycgJworCWdpdCBzaG93IEhFQUQgfCBncmVwICJeQXV0aG9yOiBUd2VycCBTbm9nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctcCBoYW5kbGVzICJubyBjaGFuZ2VzIiBncmFjZWZ1bGx5JyAnCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlnaXQgcmViYXNlIC1pIC1wIEhFQUReICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEIC0tICYmCisJdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdleGNoYW5nZSB0d28gY29tbWl0cyB3aXRoIC1wJyAnCisJZ2l0IGNoZWNrb3V0IEggJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgLXAgSEVBRH4yICYmCisJdGVzdCBIID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBHID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgbWVyZ2VzIHdpdGggLXAnICcKKwlnaXQgY2hlY2tvdXQgLWIgdG8tYmUtcHJlc2VydmVkIG1hc3Rlcl4gJiYKKwk6ID4gdW5yZWxhdGVkLWZpbGUgJiYKKwlnaXQgYWRkIHVucmVsYXRlZC1maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAidW5yZWxhdGVkIiAmJgorCWdpdCBjaGVja291dCAtYiBhbm90aGVyLWJyYW5jaCBtYXN0ZXIgJiYKKwllY2hvIEIgPiBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gSiBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSB0by1iZS1wcmVzZXJ2ZWQgJiYKKwllY2hvIEMgPiBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gSyBmaWxlMSAmJgorCWVjaG8gRCA+IGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBMMSBmaWxlMSAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWVjaG8gMSA+IHVucmVsYXRlZC1maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBMMiB1bnJlbGF0ZWQtZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBhbm90aGVyLWJyYW5jaCAmJgorCWVjaG8gRSA+IGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBNIGZpbGUxICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRvLWJlLXJlYmFzZWQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlnaXQgcmViYXNlIC1pIC1wIC0tb250byBicmFuY2gxIG1hc3RlciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAtLSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUR+NikgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjReMikgPSAkKGdpdCByZXYtcGFyc2UgdG8tYmUtcHJlc2VydmVkKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReXjJeKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXl5eKSAmJgorCXRlc3QgJChnaXQgc2hvdyBIRUFEfjU6ZmlsZTEpID0gQiAmJgorCXRlc3QgJChnaXQgc2hvdyBIRUFEfjM6ZmlsZTEpID0gQyAmJgorCXRlc3QgJChnaXQgc2hvdyBIRUFEOmZpbGUxKSA9IEUgJiYKKwl0ZXN0ICQoZ2l0IHNob3cgSEVBRDp1bnJlbGF0ZWQtZmlsZSkgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXQgYW5jZXN0b3Igd2l0aCAtcCcgJworCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9IjEgMiBlZGl0IDMgNCIgZ2l0IHJlYmFzZSAtaSAtcCBIRUFEfjMgJiYKKwllY2hvIDIgPiB1bnJlbGF0ZWQtZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gTDItbW9kaWZpZWQgLS1hbWVuZCB1bnJlbGF0ZWQtZmlsZSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAtLSAmJgorCXRlc3QgJChnaXQgc2hvdyBIRUFEOnVucmVsYXRlZC1maWxlKSA9IDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSB0cmllcyB0byBjb21taXQnICcKKwl0ZXN0X3RpY2sgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tb250byBuZXctYnJhbmNoMSBIRUFEXiAmJgorCWVjaG8gcmVzb2x2ZWQgPiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlGQUtFX0NPTU1JVF9NRVNTQUdFPSJjaG91ZXR0ZSEiIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSBuZXctYnJhbmNoMSkgJiYKKwlnaXQgc2hvdyBIRUFEIHwgZ3JlcCBjaG91ZXR0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIGZsYWcgaXMgaGVlZGVkLCBldmVuIGFmdGVyIC0tY29udGludWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlckB7MX0gJiYKKwl0ZXN0X3RpY2sgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC12IC1pIC0tb250byBuZXctYnJhbmNoMSBIRUFEXiAmJgorCWVjaG8gcmVzb2x2ZWQgPiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgPiBvdXRwdXQgJiYKKwlncmVwICJeIGZpbGUxIHwgMiArLSQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS1zcXVhc2ggb25seSBmaXJlcyB1cCBlZGl0b3Igb25jZScgJworCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUR+NCkgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiBzcXVhc2ggMyBzcXVhc2ggNCIgXAorCQlFWFBFQ1RfSEVBREVSX0NPVU5UPTQgXAorCQlnaXQgcmViYXNlIC1pICRiYXNlICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLWZpeHVwIGRvZXMgbm90IGZpcmUgdXAgZWRpdG9yJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG11bHRpLWZpeHVwIEUgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9DT01NSVRfQU1FTkQ9Ik5FVkVSIiBGQUtFX0xJTkVTPSIxIGZpeHVwIDIgZml4dXAgMyBmaXh1cCA0IiBcCisJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMCA9ICQoZ2l0IHNob3cgfCBncmVwIE5FVkVSIHwgd2MgLWwpICYmCisJZ2l0IGNoZWNrb3V0IHRvLWJlLXJlYmFzZWQgJiYKKwlnaXQgYnJhbmNoIC1EIG11bHRpLWZpeHVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIHVzZWQgYWZ0ZXIgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QtZml4dXAgY29uZmxpY3QtYnJhbmNoICYmCisJYmFzZT0kKGdpdCByZXYtcGFyc2UgSEVBRH40KSAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIGZpeHVwIDMgZml4dXAgNCIgZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgorCWVjaG8gdGhyZWUgPiBjb25mbGljdCAmJgorCWdpdCBhZGQgY29uZmxpY3QgJiYKKwlGQUtFX0NPTU1JVF9BTUVORD0iT05DRSIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IHwgZ3JlcCBPTkNFIHwgd2MgLWwpICYmCisJZ2l0IGNoZWNrb3V0IHRvLWJlLXJlYmFzZWQgJiYKKwlnaXQgYnJhbmNoIC1EIGNvbmZsaWN0LWZpeHVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIHJldGFpbmVkIGFmdGVyIGNvbmZsaWN0JyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0LXNxdWFzaCBjb25mbGljdC1icmFuY2ggJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZml4dXAgMyBzcXVhc2ggNCIgZ2l0IHJlYmFzZSAtaSAkYmFzZSAmJgorCWVjaG8gdGhyZWUgPiBjb25mbGljdCAmJgorCWdpdCBhZGQgY29uZmxpY3QgJiYKKwlGQUtFX0NPTU1JVF9BTUVORD0iVFdJQ0UiIEVYUEVDVF9IRUFERVJfQ09VTlQ9MiBcCisJCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJdGVzdCAyID0gJChnaXQgc2hvdyB8IGdyZXAgVFdJQ0UgfCB3YyAtbCkgJiYKKwlnaXQgY2hlY2tvdXQgdG8tYmUtcmViYXNlZCAmJgorCWdpdCBicmFuY2ggLUQgY29uZmxpY3Qtc3F1YXNoCisnCisKK2NhdCA+IGV4cGVjdC1zcXVhc2gtZml4dXAgPDwgRU9GCitCCisKK0QKKworT05DRQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NxdWFzaCBhbmQgZml4dXAgZ2VuZXJhdGUgY29ycmVjdCBsb2cgbWVzc2FnZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgc3F1YXNoLWZpeHVwIEUgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEZBS0VfTElORVM9IjEgZml4dXAgMiBzcXVhc2ggMyBmaXh1cCA0IiBcCisJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgMSwvXlwkL2QgPiBhY3R1YWwtc3F1YXNoLWZpeHVwICYmCisJdGVzdF9jbXAgZXhwZWN0LXNxdWFzaC1maXh1cCBhY3R1YWwtc3F1YXNoLWZpeHVwICYmCisJZ2l0IGNoZWNrb3V0IHRvLWJlLXJlYmFzZWQgJiYKKwlnaXQgYnJhbmNoIC1EIHNxdWFzaC1maXh1cAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggaWdub3JlcyBjb21tZW50cycgJworCWdpdCBjaGVja291dCAtYiBza2lwLWNvbW1lbnRzIEUgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEZBS0VfTElORVM9IiMgMSAjIHNxdWFzaCAyICMgc3F1YXNoIDMgIyBzcXVhc2ggNCAjIiBcCisJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgfCBncmVwIE9OQ0UgfCB3YyAtbCkgJiYKKwlnaXQgY2hlY2tvdXQgdG8tYmUtcmViYXNlZCAmJgorCWdpdCBicmFuY2ggLUQgc2tpcC1jb21tZW50cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggaWdub3JlcyBibGFuayBsaW5lcycgJworCWdpdCBjaGVja291dCAtYiBza2lwLWJsYW5rLWxpbmVzIEUgJiYKKwliYXNlPSQoZ2l0IHJldi1wYXJzZSBIRUFEfjQpICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9DT01NSVRfQU1FTkQ9Ik9OQ0UiIEZBS0VfTElORVM9Ij4gMSA+IHNxdWFzaCAyID4gc3F1YXNoIDMgPiBzcXVhc2ggNCA+IiBcCisJCUVYUEVDVF9IRUFERVJfQ09VTlQ9NCBcCisJCWdpdCByZWJhc2UgLWkgJGJhc2UgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgfCBncmVwIE9OQ0UgfCB3YyAtbCkgJiYKKwlnaXQgY2hlY2tvdXQgdG8tYmUtcmViYXNlZCAmJgorCWdpdCBicmFuY2ggLUQgc2tpcC1ibGFuay1saW5lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcXVhc2ggd29ya3MgYXMgZXhwZWN0ZWQnICcKKwlnaXQgY2hlY2tvdXQgLWIgc3F1YXNoLXdvcmtzIG5vLWNvbmZsaWN0LWJyYW5jaCAmJgorCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9IjEgc3F1YXNoIDMgMiIgRVhQRUNUX0hFQURFUl9DT1VOVD0yIFwKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwl0ZXN0ICRvbmUgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBzcXVhc2ggd29ya3MgYXMgZXhwZWN0ZWQnICcKKwlnaXQgY2hlY2tvdXQgLWIgaW50ZXJydXB0ZWQtc3F1YXNoIGNvbmZsaWN0LWJyYW5jaCAmJgorCW9uZT0kKGdpdCByZXYtcGFyc2UgSEVBRH4zKSAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIxIHNxdWFzaCAzIDIiIGdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJKGVjaG8gb25lOyBlY2hvIHR3bzsgZWNobyBmb3VyKSA+IGNvbmZsaWN0ICYmCisJZ2l0IGFkZCBjb25mbGljdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gcmVzb2x2ZWQgPiBjb25mbGljdCAmJgorCWdpdCBhZGQgY29uZmxpY3QgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICRvbmUgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4yKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBzcXVhc2ggd29ya3MgYXMgZXhwZWN0ZWQgKGNhc2UgMiknICcKKwlnaXQgY2hlY2tvdXQgLWIgaW50ZXJydXB0ZWQtc3F1YXNoMiBjb25mbGljdC1icmFuY2ggJiYKKwlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUR+MykgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMyBzcXVhc2ggMSAyIiBnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCShlY2hvIG9uZTsgZWNobyBmb3VyKSA+IGNvbmZsaWN0ICYmCisJZ2l0IGFkZCBjb25mbGljdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCShlY2hvIG9uZTsgZWNobyB0d287IGVjaG8gZm91cikgPiBjb25mbGljdCAmJgorCWdpdCBhZGQgY29uZmxpY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlc29sdmVkID4gY29uZmxpY3QgJiYKKwlnaXQgYWRkIGNvbmZsaWN0ICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkb25lID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSB0cmllcyB0byBjb21taXQsIGV2ZW4gZm9yICJlZGl0IicgJworCWVjaG8gdW5yZWxhdGVkID4gZmlsZTcgJiYKKwlnaXQgYWRkIGZpbGU3ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAidW5yZWxhdGVkIGNoYW5nZSIgJiYKKwlwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCXRlc3RfdGljayAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9ImVkaXQgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCWVjaG8gZWRpdGVkID4gZmlsZTcgJiYKKwlnaXQgYWRkIGZpbGU3ICYmCisJRkFLRV9DT01NSVRfTUVTU0FHRT0iY2hvdWV0dGUhIiBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0IGVkaXRlZCA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlNykgJiYKKwlnaXQgc2hvdyBIRUFEIHwgZ3JlcCBjaG91ZXR0ZSAmJgorCXRlc3QgJHBhcmVudCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEXikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnRlZCAtLWNvbnRpbnVlIGRvZXMgbm90IHNxdWFzaCBjb21taXRzIGFmdGVyICJlZGl0IicgJworCW9sZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwllY2hvICJlZGl0ZWQgYWdhaW4iID4gZmlsZTcgJiYKKwlnaXQgYWRkIGZpbGU3ICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfQ09NTUlUX01FU1NBR0U9IiAiIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJG9sZCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCByZWJhc2UgLS1hYm9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvLWFtZW5kIG9ubHkgZWRpdGVkIGNvbW1pdHMgYWZ0ZXIgImVkaXQiJyAnCisJdGVzdF90aWNrICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIiBnaXQgcmViYXNlIC1pIEhFQUReICYmCisJZWNobyAiZWRpdGVkIGFnYWluIiA+IGZpbGU3ICYmCisJZ2l0IGFkZCBmaWxlNyAmJgorCUZBS0VfQ09NTUlUX01FU1NBR0U9ImVkaXRlZCBmaWxlNyBhZ2FpbiIgZ2l0IGNvbW1pdCAmJgorCWVjaG8gImFuZCBhZ2FpbiIgPiBmaWxlNyAmJgorCWdpdCBhZGQgZmlsZTcgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9DT01NSVRfTUVTU0FHRT0iYW5kIGFnYWluIiBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgcmViYXNlIC0tYWJvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4gZXJyb3IgYWZ0ZXIgZmFpbGVkICJleGVjIicgJworCXRlc3RfdGljayAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IHx8IDoiICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgZXhlY19mYWxzZSIgZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCWVjaG8gImVkaXRlZCBhZ2FpbiIgPiBmaWxlNyAmJgorCWdpdCBhZGQgZmlsZTcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgMj5lcnJvciAmJgorCWdyZXAgIllvdSBoYXZlIHN0YWdlZCBjaGFuZ2VzIGluIHlvdXIgd29ya2luZyB0cmVlLiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGEgZGV0YWNoZWQgSEVBRCcgJworCWdyYW5kcGFyZW50PSQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpICYmCisJZ2l0IGNoZWNrb3V0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3RfdGljayAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIgJiYKKwl0ZXN0ICRncmFuZHBhcmVudCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhIGNvbW1pdCB2aW9sYXRpbmcgcHJlLWNvbW1pdCcgJworCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCVBSRV9DT01NSVQ9LmdpdC9ob29rcy9wcmUtY29tbWl0ICYmCisJZWNobyAiIyEvYmluL3NoIiA+ICRQUkVfQ09NTUlUICYmCisJZWNobyAidGVzdCAteiBcIlwkKGdpdCBkaWZmIC0tY2FjaGVkIC0tY2hlY2spXCIiID4+ICRQUkVfQ09NTUlUICYmCisJY2htb2QgYSt4ICRQUkVfQ09NTUlUICYmCisJZWNobyAibW9uZGUhICIgPj4gZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGRvZXNudC12ZXJpZnkgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIGRvZXNudC12ZXJpZnkgLS1uby12ZXJpZnkgZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0xJTkVTPTIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugd2l0aCBhIGZpbGUgbmFtZWQgSEVBRCBpbiB3b3JrdHJlZScgJworCisJcm0gLWZyIC5naXQvaG9va3MgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDMgQSAmJgorCisJKAorCQlHSVRfQVVUSE9SX05BTUU9IlNxdWFzaGVkIEF3YXkiICYmCisJCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgJiYKKwkJPkhFQUQgJiYKKwkJZ2l0IGFkZCBIRUFEICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBoZWFkIiAmJgorCQk+Qk9EWSAmJgorCQlnaXQgYWRkIEJPRFkgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIGJvZHkiCisJKSAmJgorCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iMSBzcXVhc2ggMiIgZ2l0IHJlYmFzZSAtaSB0by1iZS1yZWJhc2VkICYmCisJdGVzdCAiJChnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JWFuKSIgPSAiU3F1YXNoZWQgQXdheSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyAibm9vcCIgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIGNoZXJyeS1waWNrJyAnCisKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoNCBIRUFEICYmCisJR0lUX0VESVRPUj06IGdpdCBjb21taXQgLS1hbWVuZCBcCisJCS0tYXV0aG9yPSJTb21lYm9keSBlbHNlIDxzb21lYm9keUBlbHNlLmNvbT4iICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMykgIT0gJChnaXQgcmV2LXBhcnNlIGJyYW5jaDQpICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJZ2l0IHJlYmFzZSAtaSBicmFuY2gzICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgYnJhbmNoMykgPSAkKGdpdCByZXYtcGFyc2UgYnJhbmNoNCkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgcmViYXNlIHNldHVwJyAnCisJZ2l0IGNoZWNrb3V0IEEgJiYKKwlta2RpciBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJiBnaXQgaW5pdCAmJiA+ZWxpZiAmJgorCQlnaXQgYWRkIGVsaWYgJiYgZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIGluaXRpYWwiCisJKSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIk9uZSIgJiYKKwllY2hvIDIgPmZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiVHdvIiAmJgorCSgKKwkJY2Qgc3ViICYmIGVjaG8gMyA+ZWxpZiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJzdWJtb2R1bGUgc2Vjb25kIgorCSkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJUaHJlZSBjaGFuZ2VzIHN1Ym1vZHVsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHJlYmFzZSAtaScgJworCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9IjEgc3F1YXNoIDIgMyIgZ2l0IHJlYmFzZSAtaSBBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb25mbGljdCBzZXR1cCcgJworCWdpdCB0YWcgc3VibW9kdWxlLWJhc2UgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwkoCisJCWNkIHN1YiAmJiBnaXQgY2hlY2tvdXQgSEVBRF4gJiYgZWNobyA0ID5lbGlmICYmCisJCWdpdCBhZGQgZWxpZiAmJiBnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgY29uZmxpY3QiCisJKSAmJgorCWdpdCBhZGQgc3ViICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29uZmxpY3QgaW4gc3VibW9kdWxlIiAmJgorCWdpdCB0YWcgc3VibW9kdWxlLXRvcGljCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjb250aW51ZSB3aXRoIG9ubHkgc3VibW9kdWxlIHN0YWdlZCcgJworCXNldF9mYWtlX2VkaXRvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgc3VibW9kdWxlLWJhc2UgJiYKKwlnaXQgYWRkIHN1YiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIHN1Ym1vZHVsZS1iYXNlKSAhPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNvbnRpbnVlIHdpdGggdW5zdGFnZWQgc3VibW9kdWxlJyAnCisJZ2l0IGNoZWNrb3V0IHN1Ym1vZHVsZS10b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIHN1Ym1vZHVsZS1iYXNlICYmCisJZ2l0IHJlc2V0ICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2Ugc3VibW9kdWxlLWJhc2UpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F2b2lkIHVubmVjZXNzYXJ5IHJlc2V0JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0LWNobXRpbWUgPTEyMzQ1Njc4OSBmaWxlMyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+NCAmJgorCXRlc3QgJEhFQUQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlNVElNRT0kKHRlc3QtY2htdGltZSAtdiArMCBmaWxlMyB8IHNlZCAncy9bXjAtOV0uKiQvLycpICYmCisJdGVzdCAxMjM0NTY3ODkgPSAkTVRJTUUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3b3JkJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHJld29yZC1icmFuY2ggbWFzdGVyICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iMSAyIDMgcmV3b3JkIDQiIEZBS0VfQ09NTUlUX01FU1NBR0U9IkUgY2hhbmdlZCIgZ2l0IHJlYmFzZSAtaSBBICYmCisJZ2l0IHNob3cgSEVBRCB8IGdyZXAgIkUgY2hhbmdlZCIgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICE9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3Rlcl4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUReKSAmJgorCUZBS0VfTElORVM9IjEgMiByZXdvcmQgMyA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJEIGNoYW5nZWQiIGdpdCByZWJhc2UgLWkgQSAmJgorCWdpdCBzaG93IEhFQUReIHwgZ3JlcCAiRCBjaGFuZ2VkIiAmJgorCUZBS0VfTElORVM9InJld29yZCAxIDIgMyA0IiBGQUtFX0NPTU1JVF9NRVNTQUdFPSJCIGNoYW5nZWQiIGdpdCByZWJhc2UgLWkgQSAmJgorCWdpdCBzaG93IEhFQUR+MyB8IGdyZXAgIkIgY2hhbmdlZCIgJiYKKwlGQUtFX0xJTkVTPSIxIHJld29yZCAyIDMgNCIgRkFLRV9DT01NSVRfTUVTU0FHRT0iQyBjaGFuZ2VkIiBnaXQgcmViYXNlIC1pIEEgJiYKKwlnaXQgc2hvdyBIRUFEfjIgfCBncmVwICJDIGNoYW5nZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjYW4gY29weSBub3RlcycgJworCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZS5yZWJhc2UgdHJ1ZSAmJgorCWdpdCBjb25maWcgbm90ZXMucmV3cml0ZVJlZiAicmVmcy9ub3Rlcy8qIiAmJgorCXRlc3RfY29tbWl0IG4xICYmCisJdGVzdF9jb21taXQgbjIgJiYKKwl0ZXN0X2NvbW1pdCBuMyAmJgorCWdpdCBub3RlcyBhZGQgLW0iYSBub3RlIiBuMyAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCWdpdCByZWJhc2UgLWkgLS1vbnRvIG4xIG4yICYmCisJdGVzdCAiYSBub3RlIiA9ICIkKGdpdCBub3RlcyBzaG93IEhFQUQpIgorJworCitjYXQgPmV4cGVjdCA8PEVPRgorYW4gZWFybGllciBub3RlCisKK2Egbm90ZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjYW4gY29weSBub3RlcyBvdmVyIGEgZml4dXAnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG4zICYmCisJZ2l0IG5vdGVzIGFkZCAtbSJhbiBlYXJsaWVyIG5vdGUiIG4yICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJR0lUX05PVEVTX1JFV1JJVEVfTU9ERT1jb25jYXRlbmF0ZSBGQUtFX0xJTkVTPSIxIGZpeHVwIDIiIGdpdCByZWJhc2UgLWkgbjEgJiYKKwlnaXQgbm90ZXMgc2hvdyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHdoaWxlIGRldGFjaGluZyBIRUFEJyAnCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEICYmCisJZ3JhbmRwYXJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJiYKKwl0ZXN0X3RpY2sgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0xJTkVTPSIyIDEiIGdpdCByZWJhc2UgLWkgSEVBRH4yIEhFQUReMCAmJgorCXRlc3QgJGdyYW5kcGFyZW50ID0gJChnaXQgcmV2LXBhcnNlIEhFQUR+MikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIEhFQUQKKycKKwordGVzdF90aWNrICMgRW5zdXJlIHRoYXQgdGhlIHJlYmFzZWQgY29tbWl0cyBnZXQgYSBkaWZmZXJlbnQgdGltZXN0YW1wLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWx3YXlzIGNoZXJyeS1waWNrIHdpdGggLS1uby1mZicgJworCWdpdCBjaGVja291dCBuby1mZi1icmFuY2ggJiYKKwlnaXQgdGFnIG9yaWdpbmFsLW5vLWZmLWJyYW5jaCAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCWdpdCByZWJhc2UgLWkgLS1uby1mZiBBICYmCisJdG91Y2ggZW1wdHkgJiYKKwlmb3IgcCBpbiAwIDEgMgorCWRvCisJCXRlc3QgISAkKGdpdCByZXYtcGFyc2UgSEVBRH4kcCkgPSAkKGdpdCByZXYtcGFyc2Ugb3JpZ2luYWwtbm8tZmYtYnJhbmNofiRwKSAmJgorCQlnaXQgZGlmZiBIRUFEfiRwIG9yaWdpbmFsLW5vLWZmLWJyYW5jaH4kcCA+IG91dCAmJgorCQl0ZXN0X2NtcCBlbXB0eSBvdXQKKwlkb25lICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSA9ICQoZ2l0IHJldi1wYXJzZSBvcmlnaW5hbC1uby1mZi1icmFuY2h+MykgJiYKKwlnaXQgZGlmZiBIRUFEfjMgb3JpZ2luYWwtbm8tZmYtYnJhbmNofjMgPiBvdXQgJiYKKwl0ZXN0X2NtcCBlbXB0eSBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGNvbW1pdHMgd2l0aCBmdW5ueSBtZXNzYWdlcycgJworCWdpdCBjaGVja291dCAtYiBmdW5ueSBBICYmCisJZWNobyA+PmZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZW5kIHdpdGggc2xhc2hcXCIgJiYKKwllY2hvID4+ZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzb21ldGhpbmcgKFwwMDApIHRoYXQgbG9va3MgbGlrZSBvY3RhbCIgJiYKKwllY2hvID4+ZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzb21ldGhpbmcgKFxuKSB0aGF0IGxvb2tzIGxpa2UgYSBuZXdsaW5lIiAmJgorCWVjaG8gPj5maWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gImFub3RoZXIgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UtaSBoaXN0b3J5IHdpdGggZnVubnkgbWVzc2FnZXMnICcKKwlnaXQgcmV2LWxpc3QgQS4uZnVubnkgPmV4cGVjdCAmJgorCXRlc3RfdGljayAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9IjEgMiAzIDQiIGdpdCByZWJhc2UgLWkgQSAmJgorCWdpdCByZXYtbGlzdCBBLi4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZvciByZWJhc2UgLWkgLS1leGVjJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBleGVjdXRlICYmCisJdGVzdF9jb21taXQgb25lX2V4ZWMgbWFpbi50eHQgb25lX2V4ZWMgJiYKKwl0ZXN0X2NvbW1pdCB0d29fZXhlYyBtYWluLnR4dCB0d29fZXhlYyAmJgorCXRlc3RfY29tbWl0IHRocmVlX2V4ZWMgbWFpbi50eHQgdGhyZWVfZXhlYworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1bm5pbmcgImdpdCByZWJhc2UgLWkgLS1leGVjIGdpdCBzaG93IEhFQUQiJyAnCisJc2V0X2Zha2VfZWRpdG9yICYmCisJZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIEhFQUR+MiA+YWN0dWFsICYmCisJKAorCQlGQUtFX0xJTkVTPSIxIGV4ZWNfZ2l0X3Nob3dfSEVBRCAyIGV4ZWNfZ2l0X3Nob3dfSEVBRCIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgPmV4cGVjdAorCSkgJiYKKwlzZWQgLWUgIjEsOWQiIGV4cGVjdCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5uaW5nICJnaXQgcmViYXNlIC0tZXhlYyBnaXQgc2hvdyBIRUFEIC1pIicgJworCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCWdpdCByZWJhc2UgLS1leGVjICJnaXQgc2hvdyBIRUFEIiAtaSBIRUFEfjIgPmFjdHVhbCAmJgorCSgKKwkJRkFLRV9MSU5FUz0iMSBleGVjX2dpdF9zaG93X0hFQUQgMiBleGVjX2dpdF9zaG93X0hFQUQiICYmCisJCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJCWdpdCByZWJhc2UgLWkgSEVBRH4yID5leHBlY3QKKwkpICYmCisJc2VkIC1lICIxLDlkIiBleHBlY3QgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVubmluZyAiZ2l0IHJlYmFzZSAtaXggZ2l0IHNob3cgSEVBRCInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlnaXQgcmViYXNlIC1peCAiZ2l0IHNob3cgSEVBRCIgSEVBRH4yID5hY3R1YWwgJiYKKwkoCisJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEIDIgZXhlY19naXRfc2hvd19IRUFEIiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUR+MiA+ZXhwZWN0CisJKSAmJgorCXNlZCAtZSAiMSw5ZCIgZXhwZWN0ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaXggd2l0aCBzZXZlcmFsIDxDTUQ+JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJZ2l0IHJlYmFzZSAtaXggImdpdCBzaG93IEhFQUQ7IHB3ZCIgSEVBRH4yID5hY3R1YWwgJiYKKwkoCisJCUZBS0VfTElORVM9IjEgZXhlY19naXRfc2hvd19IRUFEO19wd2QgMiBleGVjX2dpdF9zaG93X0hFQUQ7X3B3ZCIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgPmV4cGVjdAorCSkgJiYKKwlzZWQgLWUgIjEsOWQiIGV4cGVjdCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWl4IHdpdGggc2V2ZXJhbCBpbnN0YW5jZXMgb2YgLS1leGVjJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBleGVjdXRlICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIC0tZXhlYyAicHdkIiBIRUFEfjIgPmFjdHVhbCAmJgorCSgKKwkJRkFLRV9MSU5FUz0iMSBleGVjX2dpdF9zaG93X0hFQUQgZXhlY19wd2QgMgorCQkJCWV4ZWNfZ2l0X3Nob3dfSEVBRCBleGVjX3B3ZCIgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJZ2l0IHJlYmFzZSAtaSBIRUFEfjIgPmV4cGVjdAorCSkgJiYKKwlzZWQgLWUgIjEsMTFkIiBleHBlY3QgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1peCB3aXRoIC0tYXV0b3NxdWFzaCcgJworCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgorCWdpdCBjaGVja291dCAtYiBhdXRvc3F1YXNoICYmCisJZWNobyBzZWNvbmQgPnNlY29uZC50eHQgJiYKKwlnaXQgYWRkIHNlY29uZC50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJmaXh1cCEgdHdvX2V4ZWMiICYmCisJZWNobyBiaXMgPmJpcy50eHQgJiYKKwlnaXQgYWRkIGJpcy50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJmaXh1cCEgdHdvX2V4ZWMiICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJKAorCQlnaXQgY2hlY2tvdXQgLWIgYXV0b3NxdWFzaF9hY3R1YWwgJiYKKwkJZ2l0IHJlYmFzZSAtaSAtLWV4ZWMgImdpdCBzaG93IEhFQUQiIC0tYXV0b3NxdWFzaCBIRUFEfjQgPmFjdHVhbAorCSkgJiYKKwlnaXQgY2hlY2tvdXQgYXV0b3NxdWFzaCAmJgorCSgKKwkJZ2l0IGNoZWNrb3V0IC1iIGF1dG9zcXVhc2hfZXhwZWN0ZWQgJiYKKwkJRkFLRV9MSU5FUz0iMSBmaXh1cCAzIGZpeHVwIDQgZXhlY19naXRfc2hvd19IRUFEIDIgZXhlY19naXRfc2hvd19IRUFEIiAmJgorCQlleHBvcnQgRkFLRV9MSU5FUyAmJgorCQlnaXQgcmViYXNlIC1pIEhFQUR+NCA+ZXhwZWN0CisJKSAmJgorCXNlZCAtZSAiMSwxM2QiIGV4cGVjdCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1leGVjIHdpdGhvdXQgLWkgc2hvd3MgZXJyb3IgbWVzc2FnZScgJworCWdpdCByZXNldCAtLWhhcmQgZXhlY3V0ZSAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1leGVjICJnaXQgc2hvdyBIRUFEIiBIRUFEfjIgMj5hY3R1YWwgJiYKKwllY2hvICJUaGUgLS1leGVjIG9wdGlvbiBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgLS1pbnRlcmFjdGl2ZSBvcHRpb24iID5leHBlY3RlZCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1leGVjIHdpdGhvdXQgPENNRD4nICcKKwlnaXQgcmVzZXQgLS1oYXJkIGV4ZWN1dGUgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tZXhlYyAyPnRtcCAmJgorCXNlZCAtZSAiMWQiIHRtcCA+YWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgcmUtb3JkZXIgYW5kIGRyb3AgY29tbWl0cycgJworCWdpdCBjaGVja291dCBFICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iMyAxIDIgNSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgQiA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgQSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXl4gfCBzZWQgLW5lIFwkcCkgJiYKKwl0ZXN0IEMgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF5eXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgMCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXl5eIHwgZ3JlcCAtYyBecGFyZW50XCApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3QgcmV0YWluIHJvb3QgY29tbWl0IGF1dGhvciBhbmQgbWVzc2FnZScgJworCWdpdCBjaGVja291dCBBICYmCisJZWNobyBCID5maWxlNyAmJgorCWdpdCBhZGQgZmlsZTcgJiYKKwlHSVRfQVVUSE9SX05BTUU9IlR3ZXJwIFNub2ciIGdpdCBjb21taXQgLW0gImRpZmZlcmVudCBhdXRob3IiICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iMiIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIC1xICJeYXV0aG9yIFR3ZXJwIFNub2ciICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAtcSAiXmRpZmZlcmVudCBhdXRob3IkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IHRlbXBvcmFyeSBzZW50aW5lbCBjb21taXQnICcKKwlnaXQgY2hlY2tvdXQgQiAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBGQUtFX0xJTkVTPSIyIiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIl50cmVlIDRiODI1ZGM2NDJjYiIgJiYKKwlnaXQgcmViYXNlIC0tYWJvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCBmaXh1cCByb290IGNvbW1pdCcgJworCWdpdCBjaGVja291dCBCICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iMSBmaXh1cCAyIiBnaXQgcmViYXNlIC1pIC0tcm9vdCAmJgorCXRlc3QgQSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApICYmCisJdGVzdCBCID0gJChnaXQgc2hvdyBIRUFEOmZpbGUxKSAmJgorCXRlc3QgMCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAtYyBecGFyZW50XCApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWVkaXQtdG9kbyBkb2VzIG5vdCB3b3JrcyBvbiBub24taW50ZXJhY3RpdmUgcmViYXNlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjb25mbGljdC1icmFuY2ggJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBIRUFEfjIgSEVBRH4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tZWRpdC10b2RvICYmCisJZ2l0IHJlYmFzZSAtLWFib3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWVkaXQtdG9kbyBjYW4gYmUgdXNlZCB0byBtb2RpZnkgdG9kbycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbm8tY29uZmxpY3QtYnJhbmNoXjAgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgMiAzIiBnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCUZBS0VfTElORVM9IjIgMSIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgTSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgTCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBwcm9kdWNlcyByZWFkYWJsZSByZWZsb2cnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGJyYW5jaCAtZiBicmFuY2gtcmVmbG9nLXRlc3QgSCAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCWdpdCByZWJhc2UgLWkgLS1vbnRvIEkgRiBicmFuY2gtcmVmbG9nLXRlc3QgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmViYXNlIC1pIChmaW5pc2gpOiByZXR1cm5pbmcgdG8gcmVmcy9oZWFkcy9icmFuY2gtcmVmbG9nLXRlc3QKKwlyZWJhc2UgLWkgKHBpY2spOiBICisJcmViYXNlIC1pIChwaWNrKTogRworCXJlYmFzZSAtaSAoc3RhcnQpOiBjaGVja291dCBJCisJRU9GCisJZ2l0IHJlZmxvZyAtbjQgSEVBRCB8CisJc2VkICJzL1teOl0qOiAvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHJlc3BlY3RzIGNvcmUuY29tbWVudGNoYXInICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEVeMCAmJgorCXRlc3RfY29uZmlnIGNvcmUuY29tbWVudGNoYXIgIlxcIiAmJgorCXdyaXRlX3NjcmlwdCByZW1vdmUtYWxsLWJ1dC1maXJzdC5zaCA8PC1cRU9GICYmCisJc2VkIC1lICIyLFwkcy9eL1xcXFwvIiAiJDEiID4iJDEudG1wIiAmJgorCW12ICIkMS50bXAiICIkMSIKKwlFT0YKKwl0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9yZW1vdmUtYWxsLWJ1dC1maXJzdC5zaCIgJiYKKwlnaXQgcmViYXNlIC1pIEIgJiYKKwl0ZXN0IEIgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBzZWQgLW5lIFwkcCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pLCB3aXRoIDxvbnRvPiBhbmQgPHVwc3RyZWFtPiBzcGVjaWZpZWQgYXMgOi9xdXV4ZXJ5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYnJhbmNoIC1EIHRvcmViYXNlIiAmJgorCWdpdCBjaGVja291dCAtYiB0b3JlYmFzZSBicmFuY2gxICYmCisJdXBzdHJlYW09JChnaXQgcmV2LXBhcnNlICI6L0oiKSAmJgorCW9udG89JChnaXQgcmV2LXBhcnNlICI6L0EiKSAmJgorCWdpdCByZWJhc2UgLS1vbnRvICRvbnRvICR1cHN0cmVhbSAmJgorCWdpdCByZXNldCAtLWhhcmQgYnJhbmNoMSAmJgorCWdpdCByZWJhc2UgLS1vbnRvICI6L0EiICI6L0oiICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHdpdGggLS1zdHJhdGVneSBhbmQgLVgnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QtbWVyZ2UtdXNlLXRoZWlycyBjb25mbGljdC1icmFuY2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZWNobyBmaXZlID5jb25mbGljdCAmJgorCWVjaG8gWiA+ZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJvbmUgZmlsZSBjb25mbGljdCIgJiYKKwlFRElUT1I9dHJ1ZSBnaXQgcmViYXNlIC1pIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIC1Yb3VycyBjb25mbGljdC1icmFuY2ggJiYKKwl0ZXN0ICQoZ2l0IHNob3cgY29uZmxpY3QtYnJhbmNoOmNvbmZsaWN0KSA9ICQoY2F0IGNvbmZsaWN0KSAmJgorCXRlc3QgJChjYXQgZmlsZTEpID0gWgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgZXJyb3Igb24gY29tbWl0cyB3aXRoIFwgaW4gbWVzc2FnZScgJworCWN1cnJlbnRfaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydDsgZ2l0IHJlc2V0IC0taGFyZCAkY3VycmVudF9oZWFkOyBybSAtZiBlcnJvciIgJiYKKwl0ZXN0X2NvbW1pdCBUTy1SRU1PVkUgd2lsbC1jb25mbGljdCBvbGQtY29udGVudCAmJgorCXRlc3RfY29tbWl0ICJcdGVtcCIgd2lsbC1jb25mbGljdCBuZXctY29udGVudCBkdW1teSAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBFRElUT1I9dHJ1ZSBnaXQgcmViYXNlIC1pIEhFQUReIC0tb250byBIRUFEXl4gMj5lcnJvciAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBncmVwICAiCWVtcCIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgU0hBLTEgc2V0dXAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGNvbGxpZGUgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwkoCisJdW5zZXQgdGVzdF90aWNrICYmCisJdGVzdF9jb21taXQgY29sbGlkZTEgY29sbGlkZSAmJgorCXRlc3RfY29tbWl0IC0tbm90aWNrIGNvbGxpZGUyIGNvbGxpZGUgJiYKKwl0ZXN0X2NvbW1pdCAtLW5vdGljayBjb2xsaWRlMyBjb2xsaWRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydCBTSEEtMSBjb2xsaWRlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZXNldF9yZWJhc2UgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgY29sbGlkZSAmJgorCSgKKwl1bnNldCB0ZXN0X3RpY2sgJiYKKwl0ZXN0X3RpY2sgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0NPTU1JVF9NRVNTQUdFPSJjb2xsaWRlMiBhYzRmMmVlIiBcCisJRkFLRV9MSU5FUz0icmV3b3JkIDEgMiIgZ2l0IHJlYmFzZSAtaSBIRUFEfjIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3BlY3QgY29yZS5hYmJyZXYnICcKKwlnaXQgY29uZmlnIGNvcmUuYWJicmV2IDEyICYmCisJc2V0X2NhdF90b2RvX2VkaXRvciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgSEVBRH40ID50b2RvLWxpc3QgJiYKKwl0ZXN0IDQgPSAkKGdyZXAgLWMgInBpY2sgWzAtOWEtZl1cezEyLFx9IiB0b2RvLWxpc3QpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvZG8gY291bnQnICcKKwl3cml0ZV9zY3JpcHQgZHVtcC1yYXcuc2ggPDwtXEVPRiAmJgorCQljYXQgIiQxIgorCUVPRgorCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2R1bXAtcmF3LnNoIiAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH40ID5hY3R1YWwgJiYKKwlncmVwICJeIyBSZWJhc2UgLi4qIG9udG8gLi4qIChbMC05XSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSBjb21taXRzIHRoYXQgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlcyAocGljayknICcKKwlnaXQgY2hlY2tvdXQgLS1mb3JjZSBicmFuY2gyICYmCisJZ2l0IGNsZWFuIC1mICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIDIiIGdpdCByZWJhc2UgLWkgQSAmJgorCXRlc3RfY21wX3JldiBIRUFEIEYgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlNiAmJgorCT5maWxlNiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3RfY21wX3JldiBIRUFEIEYgJiYKKwlybSBmaWxlNiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3RfY21wX3JldiBIRUFEIEkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNvbW1pdHMgdGhhdCBvdmVyd3JpdGUgdW50cmFja2VkIGZpbGVzIChzcXVhc2gpJyAnCisJZ2l0IGNoZWNrb3V0IC0tZm9yY2UgYnJhbmNoMiAmJgorCWdpdCBjbGVhbiAtZiAmJgorCWdpdCB0YWcgb3JpZ2luYWwtYnJhbmNoMiAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBzcXVhc2ggMiIgZ2l0IHJlYmFzZSAtaSBBICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgRiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGU2ICYmCisJPmZpbGU2ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdF9jbXBfcmV2IEhFQUQgRiAmJgorCXJtIGZpbGU2ICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSA9IEkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbmFsLWJyYW5jaDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIGNvbW1pdHMgdGhhdCBvdmVyd3JpdGUgdW50cmFja2VkIGZpbGVzIChubyBmZiknICcKKwlnaXQgY2hlY2tvdXQgLS1mb3JjZSBicmFuY2gyICYmCisJZ2l0IGNsZWFuIC1mICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIDIiIGdpdCByZWJhc2UgLWkgLS1uby1mZiBBICYmCisJdGVzdCAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSA9IEYgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlNiAmJgorCT5maWxlNiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkgPSBGICYmCisJcm0gZmlsZTYgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApID0gSQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1jb250aW51ZSByZW1vdmVzIENIRVJSWV9QSUNLX0hFQUQnICcKKwlnaXQgY2hlY2tvdXQgLWIgY29tbWl0LXRvLXNraXAgJiYKKwlmb3IgZG91YmxlIGluIFggMyAxCisJZG8KKwkJdGVzdF9zZXEgNSB8IHNlZCAicy8kZG91YmxlLyYmLyIgPnNlcSAmJgorCQlnaXQgYWRkIHNlcSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSBzZXEtJGRvdWJsZQorCWRvbmUgJiYKKwlnaXQgdGFnIHNlcS1vbnRvICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgc2VxLW9udG8gJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0gZ2l0IHJlYmFzZSAtaSBzZXEtb250byAmJgorCXRlc3QgLWQgLmdpdC9yZWJhc2UtbWVyZ2UgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZXEtb250byAmJgorCXRlc3QgISAtZCAuZ2l0L3JlYmFzZS1tZXJnZSAmJgorCXRlc3QgISAtZiAuZ2l0L0NIRVJSWV9QSUNLX0hFQUQKKycKKworcmViYXNlX3NldHVwX2FuZF9jbGVhbiAoKSB7CisJdGVzdF93aGVuX2ZpbmlzaGVkICIKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGJyYW5jaCAtRCAkMSAmJgorCQl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0CisJIiAmJgorCWdpdCBjaGVja291dCAtYiAkMSBtYXN0ZXIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJvcCcgJworCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gZHJvcC10ZXN0ICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRkFLRV9MSU5FUz0iMSBkcm9wIDIgMyBkcm9wIDQgNSIgZ2l0IHJlYmFzZSAtaSAtLXJvb3QgJiYKKwl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgQyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgQSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXl4gfCBzZWQgLW5lIFwkcCkKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK1N1Y2Nlc3NmdWxseSByZWJhc2VkIGFuZCB1cGRhdGVkIHJlZnMvaGVhZHMvbWlzc2luZy1jb21taXQuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIHJlc3BlY3RzIHJlYmFzZS5taXNzaW5nQ29tbWl0c0NoZWNrID0gaWdub3JlJyAnCisJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgaWdub3JlICYmCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBtaXNzaW5nLWNvbW1pdCAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUZBS0VfTElORVM9IjEgMiAzIDQiIFwKKwkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKKwl0ZXN0IEQgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK1dhcm5pbmc6IHNvbWUgY29tbWl0cyBtYXkgaGF2ZSBiZWVuIGRyb3BwZWQgYWNjaWRlbnRhbGx5LgorRHJvcHBlZCBjb21taXRzIChuZXdlciB0byBvbGRlcik6CisgLSAkKGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIC0tYWJicmV2LWNvbW1pdCAtMSBtYXN0ZXIpCitUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSAiZHJvcCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuCisKK1VzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiB3YXJuaW5ncy4KK1RoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci4KKworU3VjY2Vzc2Z1bGx5IHJlYmFzZWQgYW5kIHVwZGF0ZWQgcmVmcy9oZWFkcy9taXNzaW5nLWNvbW1pdC4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgcmVzcGVjdHMgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgPSB3YXJuJyAnCisJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgd2FybiAmJgorCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gbWlzc2luZy1jb21taXQgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwlGQUtFX0xJTkVTPSIxIDIgMyA0IiBcCisJCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3QgRCA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitXYXJuaW5nOiBzb21lIGNvbW1pdHMgbWF5IGhhdmUgYmVlbiBkcm9wcGVkIGFjY2lkZW50YWxseS4KK0Ryb3BwZWQgY29tbWl0cyAobmV3ZXIgdG8gb2xkZXIpOgorIC0gJChnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQgLTEgbWFzdGVyKQorIC0gJChnaXQgcmV2LWxpc3QgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQgLTEgbWFzdGVyfjIpCitUbyBhdm9pZCB0aGlzIG1lc3NhZ2UsIHVzZSAiZHJvcCIgdG8gZXhwbGljaXRseSByZW1vdmUgYSBjb21taXQuCisKK1VzZSAnZ2l0IGNvbmZpZyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjaycgdG8gY2hhbmdlIHRoZSBsZXZlbCBvZiB3YXJuaW5ncy4KK1RoZSBwb3NzaWJsZSBiZWhhdmlvdXJzIGFyZTogaWdub3JlLCB3YXJuLCBlcnJvci4KKworWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4KK09yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSByZXNwZWN0cyByZWJhc2UubWlzc2luZ0NvbW1pdHNDaGVjayA9IGVycm9yJyAnCisJdGVzdF9jb25maWcgcmViYXNlLm1pc3NpbmdDb21taXRzQ2hlY2sgZXJyb3IgJiYKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIG1pc3NpbmctY29tbWl0ICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiA0IiBcCisJCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWNwIC5naXQvcmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kby5iYWNrdXAgXAorCQkuZ2l0L3JlYmFzZS1tZXJnZS9naXQtcmViYXNlLXRvZG8gJiYKKwlGQUtFX0xJTkVTPSIxIDIgZHJvcCAzIDQgZHJvcCA1IiBcCisJCWdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0IEQgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgQiA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKQorJworCitjYXQgPmV4cGVjdCA8PEVPRgorV2FybmluZzogdGhlIGNvbW1hbmQgaXNuJ3QgcmVjb2duaXplZCBpbiB0aGUgZm9sbG93aW5nIGxpbmU6CisgLSBiYWRjbWQgJChnaXQgcmV2LWxpc3QgLS1vbmVsaW5lIC0xIG1hc3Rlcn4xKQorCitZb3UgY2FuIGZpeCB0aGlzIHdpdGggJ2dpdCByZWJhc2UgLS1lZGl0LXRvZG8nLgorT3IgeW91IGNhbiBhYm9ydCB0aGUgcmViYXNlIHdpdGggJ2dpdCByZWJhc2UgLS1hYm9ydCcuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdGljIGNoZWNrIG9mIGJhZCBjb21tYW5kJyAnCisJcmViYXNlX3NldHVwX2FuZF9jbGVhbiBiYWQtY21kICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEZBS0VfTElORVM9IjEgMiAzIGJhZCA0IDUiIFwKKwkJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgMj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJRkFLRV9MSU5FUz0iMSAyIDMgZHJvcCA0IDUiIGdpdCByZWJhc2UgLS1lZGl0LXRvZG8gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwl0ZXN0IEUgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtbmUgXCRwKSAmJgorCXRlc3QgQyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IHNlZCAtbmUgXCRwKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWJzIGFuZCBzcGFjZXMgYXJlIGFjY2VwdGVkIGluIHRoZSB0b2RvbGlzdCcgJworCXJlYmFzZV9zZXR1cF9hbmRfY2xlYW4gaW5kZW50ZWQtY29tbWVudCAmJgorCXdyaXRlX3NjcmlwdCBhZGQtaW5kZW50LnNoIDw8LVxFT0YgJiYKKwkoCisJCSMgVHVybiBzaW5nbGUgc3BhY2VzIGludG8gc3BhY2UvdGFiIG1peAorCQlzZWQgIjFzLyAvCS9nOyAycy8gLyAgL2c7IDNzLyAvIAkvZyIgIiQxIgorCQlwcmludGYgIlxuXHQjIGNvbW1lbnRcbiAjbW9yZVxuXHQgIyBjb21tZW50XG4iCisJKSA+JDEubmV3CisJbXYgIiQxLm5ldyIgIiQxIgorCUVPRgorCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2FkZC1pbmRlbnQuc2giICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEXl5eICYmCisJdGVzdCBFID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lIFwkcCkKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK1dhcm5pbmc6IHRoZSBTSEEtMSBpcyBtaXNzaW5nIG9yIGlzbid0IGEgY29tbWl0IGluIHRoZSBmb2xsb3dpbmcgbGluZToKKyAtIGVkaXQgWFhYWFhYWCBGYWxzZSBjb21taXQKKworWW91IGNhbiBmaXggdGhpcyB3aXRoICdnaXQgcmViYXNlIC0tZWRpdC10b2RvJy4KK09yIHlvdSBjYW4gYWJvcnQgdGhlIHJlYmFzZSB3aXRoICdnaXQgcmViYXNlIC0tYWJvcnQnLgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRpYyBjaGVjayBvZiBiYWQgU0hBLTEnICcKKwlyZWJhc2Vfc2V0dXBfYW5kX2NsZWFuIGJhZC1zaGEgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgRkFLRV9MSU5FUz0iMSAyIGVkaXQgZmFrZXNoYSAzIDQgNSAjIiBcCisJCWdpdCByZWJhc2UgLWkgLS1yb290IDI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCUZBS0VfTElORVM9IjEgMiA0IDUgNiIgZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCXRlc3QgRSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSBcJHApCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwNS1yZWJhc2UtbWFsZm9ybWVkLnNoIGIvdC90MzQwNS1yZWJhc2UtbWFsZm9ybWVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmOGMzNjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDA1LXJlYmFzZS1tYWxmb3JtZWQuc2gKQEAgLTAsMCArMSw3MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYmFzZSBzaG91bGQgaGFuZGxlIGFyYml0cmFyeSBnaXQgbWVzc2FnZScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+RiA8PFxFT0YKK1RoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIGNvbW1pdCBsb2cgbWVzc2FnZQordGhhdCBkb2VzIG5vdCAgY29uZm9ybSB0byBnaXQgY29tbWl0IGNvbnZlbnRpb24uCisKK0l0IGhhcyB0d28gcGFyYWdyYXBocywgYnV0IGl0cyBmaXJzdCBwYXJhZ3JhcGggaXMgbm90IGZyaWVuZGx5Cit0byBvbmVsaW5lIHN1bW1hcnkgZm9ybWF0LgorRU9GCisKK2NhdCA+RyA8PFxFT0YKK2NvbW1pdCBsb2cgbWVzc2FnZSBjb250YWluaW5nIGEgZGlmZgorRU9GCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZTEgJiYKKwk+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUxIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJZ2l0IGJyYW5jaCBkaWZmLWluLW1lc3NhZ2UgJiYKKworCWdpdCBjaGVja291dCAtYiBtdWx0aS1saW5lLXN1YmplY3QgJiYKKwljYXQgRiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtRiBGICYmCisKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+RjAgJiYKKworCWdpdCBjaGVja291dCBkaWZmLWluLW1lc3NhZ2UgJiYKKwllY2hvICJjb21taXQgbG9nIG1lc3NhZ2UgY29udGFpbmluZyBhIGRpZmYiID5HICYmCisJZWNobyAiIiA+PkcgJiYKKwljYXQgRyA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPj5HICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtRiBHICYmCisKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+RzAgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCWVjaG8gT25lID5maWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tICJTZWNvbmQgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgY29tbWl0IHdpdGggbXVsdGktbGluZSBzdWJqZWN0JyAnCisKKwlnaXQgcmViYXNlIG1hc3RlciBtdWx0aS1saW5lLXN1YmplY3QgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+RjEgJiYKKworCXRlc3RfY21wIEYwIEYxICYmCisJdGVzdF9jbXAgRiBGMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgY29tbWl0IHdpdGggZGlmZiBpbiBtZXNzYWdlJyAnCisJZ2l0IHJlYmFzZSBtYXN0ZXIgZGlmZi1pbi1tZXNzYWdlICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eJC9kIiA+RzEgJiYKKwl0ZXN0X2NtcCBHMCBHMSAmJgorCXRlc3RfY21wIEcgRzAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDA2LXJlYmFzZS1tZXNzYWdlLnNoIGIvdC90MzQwNi1yZWJhc2UtbWVzc2FnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMzkyZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQwNi1yZWJhc2UtbWVzc2FnZS5zaApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVzc2FnZXMgZnJvbSByZWJhc2Ugb3BlcmF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBPIGZpbGVPICYmCisJdGVzdF9jb21taXQgWCBmaWxlWCAmJgorCXRlc3RfY29tbWl0IEEgZmlsZUEgJiYKKwl0ZXN0X2NvbW1pdCBCIGZpbGVCICYmCisJdGVzdF9jb21taXQgWSBmaWxlWSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIE8gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgQSBCICYmCisJdGVzdF9jb21taXQgWiBmaWxlWiAmJgorCWdpdCB0YWcgc3RhcnQKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitBbHJlYWR5IGFwcGxpZWQ6IDAwMDEgQQorQWxyZWFkeSBhcHBsaWVkOiAwMDAyIEIKK0NvbW1pdHRlZDogMDAwMyBaCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1tJyAnCisJZ2l0IHJlYmFzZSAtbSBtYXN0ZXIgPnJlcG9ydCAmJgorCXNlZCAtbiAtZSAiL15BbHJlYWR5IGFwcGxpZWQ6IC9wIiBcCisJCS1lICIvXkNvbW1pdHRlZDogL3AiIHJlcG9ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgYWdhaW5zdCBtYXN0ZXIgdHdpY2UnICcKKwlnaXQgcmViYXNlIG1hc3RlciA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ3VycmVudCBicmFuY2ggdG9waWMgaXMgdXAgdG8gZGF0ZSIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZ2FpbnN0IG1hc3RlciB0d2ljZSB3aXRoIC0tZm9yY2UnICcKKwlnaXQgcmViYXNlIC0tZm9yY2UtcmViYXNlIG1hc3RlciA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiQ3VycmVudCBicmFuY2ggdG9waWMgaXMgdXAgdG8gZGF0ZSwgcmViYXNlIGZvcmNlZCIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBhZ2FpbnN0IG1hc3RlciB0d2ljZSBmcm9tIGFub3RoZXIgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IHRvcGljXiAmJgorCWdpdCByZWJhc2UgbWFzdGVyIHRvcGljID5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJDdXJyZW50IGJyYW5jaCB0b3BpYyBpcyB1cCB0byBkYXRlIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZhc3QtZm9yd2FyZCB0byBtYXN0ZXInICcKKwlnaXQgY2hlY2tvdXQgdG9waWNeICYmCisJZ2l0IHJlYmFzZSB0b3BpYyA+b3V0ICYmCisJdGVzdF9pMThuZ3JlcCAiRmFzdC1mb3J3YXJkZWQgSEVBRCB0byB0b3BpYyIgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXN0YXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCByZWJhc2UgLS1zdGF0IG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgIGdyZXAgIl4gZmlsZVggfCAgKjEgKyQiIGRpZmZzdGF0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugdy9jb25maWcgcmViYXNlLnN0YXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCBjb25maWcgcmViYXNlLnN0YXQgdHJ1ZSAmJgorICAgICAgICBnaXQgcmViYXNlIG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgIGdyZXAgIl4gZmlsZVggfCAgKjEgKyQiIGRpZmZzdGF0LnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLW4gb3ZlcnJpZGVzIGNvbmZpZyByZWJhc2Uuc3RhdCBjb25maWcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXJ0ICYmCisgICAgICAgIGdpdCBjb25maWcgcmViYXNlLnN0YXQgdHJ1ZSAmJgorICAgICAgICBnaXQgcmViYXNlIC1uIG1hc3RlciA+ZGlmZnN0YXQudHh0ICYmCisgICAgICAgICEgZ3JlcCAiXiBmaWxlWCB8ICAqMSArJCIgZGlmZnN0YXQudHh0CisnCisKKyMgT3V0cHV0IHRvIHN0ZGVycjoKKyMKKyMgICAgICJEb2VzIG5vdCBwb2ludCB0byBhIHZhbGlkIGNvbW1pdDogaW52YWxpZC1yZWYiCisjCisjIE5FRURTV09SSzogVGhpcyAiZ3JlcCIgaXMgZmluZSBpbiByZWFsIG5vbi1DIGxvY2FsZXMsIGJ1dAorIyBHRVRURVhUX1BPSVNPTiBwb2lzb25zIHRoZSByZWZuYW1lIGFsb25nIHdpdGggdGhlIGVuY2xvc2luZworIyBlcnJvciBtZXNzYWdlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tb250byBvdXRwdXRzIHRoZSBpbnZhbGlkIHJlZicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIGludmFsaWQtcmVmIEhFQUQgSEVBRCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImludmFsaWQtcmVmIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDA3LXJlYmFzZS1hYm9ydC5zaCBiL3QvdDM0MDctcmViYXNlLWFib3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2YTZjNDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDA3LXJlYmFzZS1hYm9ydC5zaApAQCAtMCwwICsxLDEwMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS1hYm9ydCB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMjIyBUZXN0IHRoYXQgd2UgaGFuZGxlIHNwYWNlIGNoYXJhY3RlcnMgcHJvcGVybHkKK3dvcmtfZGlyPSIkKHB3ZCkvdGVzdCBkaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIC1wICIkd29ya19kaXIiICYmCisJY2QgIiR3b3JrX2RpciIgJiYKKwlnaXQgaW5pdCAmJgorCWVjaG8gYSA+IGEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIGEgJiYKKwlnaXQgYnJhbmNoIHRvLXJlYmFzZSAmJgorCisJZWNobyBiID4gYSAmJgorCWdpdCBjb21taXQgLWEgLW0gYiAmJgorCWVjaG8gYyA+IGEgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGMgJiYKKworCWdpdCBjaGVja291dCB0by1yZWJhc2UgJiYKKwllY2hvIGQgPiBhICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibWVyZ2Ugc2hvdWxkIGZhaWwgb24gdGhpcyIgJiYKKwllY2hvIGUgPiBhICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibWVyZ2Ugc2hvdWxkIGZhaWwgb24gdGhpcywgdG9vIiAmJgorCWdpdCBicmFuY2ggcHJlLXJlYmFzZQorJworCit0ZXN0cmViYXNlKCkgeworCXR5cGU9JDEKKwlkb3Rlc3Q9JDIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlIC0tYWJvcnQiICcKKwkJY2QgIiR3b3JrX2RpciIgJiYKKwkJIyBDbGVhbiB1cCB0aGUgc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgb25lCisJCWdpdCByZXNldCAtLWhhcmQgcHJlLXJlYmFzZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgbWFzdGVyICYmCisJCXRlc3RfcGF0aF9pc19kaXIgIiRkb3Rlc3QiICYmCisJCWdpdCByZWJhc2UgLS1hYm9ydCAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSB0by1yZWJhc2UpID0gJChnaXQgcmV2LXBhcnNlIHByZS1yZWJhc2UpICYmCisJCXRlc3QgISAtZCAiJGRvdGVzdCIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZSAtLWFib3J0IGFmdGVyIC0tc2tpcCIgJworCQljZCAiJHdvcmtfZGlyIiAmJgorCQkjIENsZWFuIHVwIHRoZSBzdGF0ZSBmcm9tIHRoZSBwcmV2aW91cyBvbmUKKwkJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSBtYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX2RpciAiJGRvdGVzdCIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXNraXAgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCQlnaXQgcmViYXNlIC0tYWJvcnQgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgdG8tcmViYXNlKSA9ICQoZ2l0IHJldi1wYXJzZSBwcmUtcmViYXNlKSAmJgorCQl0ZXN0ICEgLWQgIiRkb3Rlc3QiCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGUgLS1hYm9ydCBhZnRlciAtLWNvbnRpbnVlIiAnCisJCWNkICIkd29ya19kaXIiICYmCisJCSMgQ2xlYW4gdXAgdGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIG9uZQorCQlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIG1hc3RlciAmJgorCQl0ZXN0X3BhdGhfaXNfZGlyICIkZG90ZXN0IiAmJgorCQllY2hvIGMgPiBhICYmCisJCWVjaG8gZCA+PiBhICYmCisJCWdpdCBhZGQgYSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgIT0gJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwkJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIHRvLXJlYmFzZSkgPSAkKGdpdCByZXYtcGFyc2UgcHJlLXJlYmFzZSkgJiYKKwkJdGVzdCAhIC1kICIkZG90ZXN0IgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlIC0tYWJvcnQgZG9lcyBub3QgdXBkYXRlIHJlZmxvZyIgJworCQljZCAiJHdvcmtfZGlyIiAmJgorCQkjIENsZWFuIHVwIHRoZSBzdGF0ZSBmcm9tIHRoZSBwcmV2aW91cyBvbmUKKwkJZ2l0IHJlc2V0IC0taGFyZCBwcmUtcmViYXNlICYmCisJCWdpdCByZWZsb2cgc2hvdyB0by1yZWJhc2UgPiByZWZsb2dfYmVmb3JlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UkdHlwZSBtYXN0ZXIgJiYKKwkJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJCWdpdCByZWZsb2cgc2hvdyB0by1yZWJhc2UgPiByZWZsb2dfYWZ0ZXIgJiYKKwkJdGVzdF9jbXAgcmVmbG9nX2JlZm9yZSByZWZsb2dfYWZ0ZXIgJiYKKwkJcm0gcmVmbG9nX2JlZm9yZSByZWZsb2dfYWZ0ZXIKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1hYm9ydCBjYW4gbm90IGJlIHVzZWQgd2l0aCBvdGhlciBvcHRpb25zJyAnCisJCWNkICIkd29ya19kaXIiICYmCisJCSMgQ2xlYW4gdXAgdGhlIHN0YXRlIGZyb20gdGhlIHByZXZpb3VzIG9uZQorCQlnaXQgcmVzZXQgLS1oYXJkIHByZS1yZWJhc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIG1hc3RlciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC12IC0tYWJvcnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0IC12ICYmCisJCWdpdCByZWJhc2UgLS1hYm9ydAorCScKK30KKwordGVzdHJlYmFzZSAiIiAuZ2l0L3JlYmFzZS1hcHBseQordGVzdHJlYmFzZSAiIC0tbWVyZ2UiIC5naXQvcmViYXNlLW1lcmdlCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQwOC1yZWJhc2UtbXVsdGktbGluZS5zaCBiL3QvdDM0MDgtcmViYXNlLW11bHRpLWxpbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmI4NGU2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MDgtcmViYXNlLW11bHRpLWxpbmUuc2gKQEAgLTAsMCArMSw0MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYmFzaW5nIGEgY29tbWl0IHdpdGggbXVsdGktbGluZSBmaXJzdCBwYXJhZ3JhcGguJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZWNobyBoZWxsbyA+ZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIkEgc2FtcGxlIGNvbW1pdCBsb2cgbWVzc2FnZSB0aGF0IGhhcyBhIGxvbmcKK3N1bW1hcnkgdGhhdCBzcGlsbHMgb3ZlciBtdWx0aXBsZSBsaW5lcy4KKworQnV0IG90aGVyd2lzZSB3aXRoIGEgc2FuZSBkZXNjcmlwdGlvbi4iICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwk+ZWxpZiAmJgorCWdpdCBhZGQgZWxpZiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyByZWJhc2UgJworCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgcmViYXNlIG1hc3RlciAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHNpZGVAezF9IHwgc2VkIC1lICIxLC9eXCQvZCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MDktcmViYXNlLXByZXNlcnZlLW1lcmdlcy5zaCBiL3QvdDM0MDktcmViYXNlLXByZXNlcnZlLW1lcmdlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44YzI1MWM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQwOS1yZWJhc2UtcHJlc2VydmUtbWVyZ2VzLnNoCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0KEMpIDIwMDggU3RlcGhlbiBIYWJlcm1hbm4gJiBBbmRyZWFzIEVyaWNzc29uCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIC1wIHNob3VsZCBwcmVzZXJ2ZSBtZXJnZXMKKworUnVuICJnaXQgcmViYXNlIC1wIiBhbmQgY2hlY2sgdGhhdCBtZXJnZXMgYXJlIHByb3Blcmx5IGNhcnJpZWQgYWxvbmcKKycKKy4gLi90ZXN0LWxpYi5zaAorCitHSVRfQVVUSE9SX0VNQUlMPWJvZ3VzX2VtYWlsX2FkZHJlc3MKK2V4cG9ydCBHSVRfQVVUSE9SX0VNQUlMCisKKyMgQ2xvbmUgMiAoY29uZmxpY3RpbmcgbWVyZ2UpOgorIworIyBBMS0tQTItLUIzICAgPC0tIG9yaWdpbi9tYXN0ZXIKKyMgIFwgICAgICAgXAorIyAgIEIxLS0tLS0tTSAgPC0tIHRvcGljCisjICAgIFwKKyMgICAgIEIyICAgICAgIDwtLSBvcmlnaW4vdG9waWMKKyMKKyMgQ2xvbmUgMyAobm8tZmYgbWVyZ2UpOgorIworIyBBMS0tQTItLUIzICAgPC0tIG9yaWdpbi9tYXN0ZXIKKyMgIFwKKyMgICBCMS0tLS0tLU0gIDwtLSB0b3BpYworIyAgICBcICAgICAvCisjICAgICBcLS1BMyAgICA8LS0gdG9waWMyCisjICAgICAgXAorIyAgICAgICBCMiAgICAgPC0tIG9yaWdpbi90b3BpYworIworIyBDbG9uZSA0IChzYW1lIGFzIENsb25lIDMpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBtZXJnZS1wcmVzZXJ2aW5nIHJlYmFzZScgXAorCSdlY2hvIEZpcnN0ID4gQSAmJgorCWdpdCBhZGQgQSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBBMSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgJiYKKwllY2hvIFNlY29uZCA+IEIgJiYKKwlnaXQgYWRkIEIgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgQjEiICYmCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWVjaG8gVGhpcmQgPj4gQSAmJgorCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBBMiIgJiYKKwllY2hvIEZpZnRoID4gQiAmJgorCWdpdCBhZGQgQiAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBkaWZmZXJlbnQgQiIgJiYKKworCWdpdCBjbG9uZSAuLy4gY2xvbmUyICYmCisJKAorCQljZCBjbG9uZTIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHRvcGljIG9yaWdpbi90b3BpYyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugb3JpZ2luL21hc3RlciAmJgorCQllY2hvIFJlc29sdmVkID5CICYmCisJCWdpdCBhZGQgQiAmJgorCQlnaXQgY29tbWl0IC1tICJNZXJnZSBvcmlnaW4vbWFzdGVyIGludG8gdG9waWMiCisJKSAmJgorCisJZ2l0IGNsb25lIC4vLiBjbG9uZTMgJiYKKwkoCisJCWNkIGNsb25lMyAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdG9waWMyIG9yaWdpbi90b3BpYyAmJgorCQllY2hvIFNpeHRoID4gQSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJNb2RpZnkgQTMiICYmCisJCWdpdCBjaGVja291dCAtYiB0b3BpYyBvcmlnaW4vdG9waWMgJiYKKwkJZ2l0IG1lcmdlIC0tbm8tZmYgdG9waWMyCisJKSAmJgorCisJZ2l0IGNsb25lIC4vLiBjbG9uZTQgJiYKKwkoCisJCWNkIGNsb25lNCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdG9waWMyIG9yaWdpbi90b3BpYyAmJgorCQllY2hvIFNpeHRoID4gQSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJNb2RpZnkgQTMiICYmCisJCWdpdCBjaGVja291dCAtYiB0b3BpYyBvcmlnaW4vdG9waWMgJiYKKwkJZ2l0IG1lcmdlIC0tbm8tZmYgdG9waWMyCisJKSAmJgorCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJZWNobyBGb3VydGggPj4gQiAmJgorCWdpdCBjb21taXQgLWEgLW0gIk1vZGlmeSBCMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSB3b3JrcyBhZnRlciBhIGNvbmZsaWN0JyAnCisJKAorCWNkIGNsb25lMiAmJgorCWdpdCBmZXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLXAgb3JpZ2luL3RvcGljICYmCisJdGVzdCAyID0gJChnaXQgbHMtZmlsZXMgQiB8IHdjIC1sKSAmJgorCWVjaG8gUmVzb2x2ZWQgYWdhaW4gPiBCICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ3JlcCAiXkBAQCAiIC5naXQvcmViYXNlLW1lcmdlL3BhdGNoICYmCisJZ2l0IGFkZCBCICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgIk1vZGlmeSBBIiB8IHdjIC1sKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJBZGQgZGlmZmVyZW50IiB8IHdjIC1sKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNZXJnZSBvcmlnaW4iIHwgd2MgLWwpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLXAgcHJlc2VydmVzIG5vLWZmIG1lcmdlcycgJworCSgKKwljZCBjbG9uZTMgJiYKKwlnaXQgZmV0Y2ggJiYKKwlnaXQgcmViYXNlIC1wIG9yaWdpbi90b3BpYyAmJgorCXRlc3QgMyA9ICQoZ2l0IHJldi1saXN0IC0tYWxsIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICJNb2RpZnkgQSIgfCB3YyAtbCkgJiYKKwl0ZXN0IDEgPSAkKGdpdCByZXYtbGlzdCAtLWFsbCAtLXByZXR0eT1vbmVsaW5lIHwgZ3JlcCAiTWVyZ2UgYnJhbmNoIiB8IHdjIC1sKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1wIGlnbm9yZXMgbWVyZ2UubG9nIGNvbmZpZycgJworCSgKKwljZCBjbG9uZTQgJiYKKwlnaXQgZmV0Y2ggJiYKKwlnaXQgLWMgbWVyZ2UubG9nPTEgcmViYXNlIC1wIG9yaWdpbi90b3BpYyAmJgorCWVjaG8gPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWIiIC0xID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDEwLXJlYmFzZS1wcmVzZXJ2ZS1kcm9wcGVkLW1lcmdlcy5zaCBiL3QvdDM0MTAtcmViYXNlLXByZXNlcnZlLWRyb3BwZWQtbWVyZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZmNzNiOTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDEwLXJlYmFzZS1wcmVzZXJ2ZS1kcm9wcGVkLW1lcmdlcy5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IFN0ZXBoZW4gSGFiZXJtYW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSBwcmVzZXJ2ZSBtZXJnZXMKKworVGhpcyB0ZXN0IHJ1bnMgZ2l0IHJlYmFzZSB3aXRoIHByZXNlcnZlIG1lcmdlcyBhbmQgZW5zdXJlcyBjb21taXRzCitkcm9wcGVkIGJ5IHRoZSAtLWNoZXJyeS1waWNrIGZsYWcgaGF2ZSB0aGVpciBjaGlsZHJlbnMgcGFyZW50cworcmV3cml0dGVuLgorJworLiAuL3Rlc3QtbGliLnNoCisKKyMgc2V0IHVwIHR3byBicmFuY2hlcyBsaWtlIHRoaXM6CisjCisjIEEgLSBCIC0gQyAtIEQgLSBFCisjICAgXAorIyAgICAgRiAtIEcgLSBICisjICAgICAgIFwKKyMgICAgICAgICBJCisjCisjIHdoZXJlIEIsIEQgYW5kIEcgdG91Y2ggdGhlIHNhbWUgZmlsZS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBBIGZpbGUxICYmCisJdGVzdF9jb21taXQgQiBmaWxlMSAxICYmCisJdGVzdF9jb21taXQgQyBmaWxlMiAmJgorCXRlc3RfY29tbWl0IEQgZmlsZTEgMiAmJgorCXRlc3RfY29tbWl0IEUgZmlsZTMgJiYKKwlnaXQgY2hlY2tvdXQgQSAmJgorCXRlc3RfY29tbWl0IEYgZmlsZTQgJiYKKwl0ZXN0X2NvbW1pdCBHIGZpbGUxIDMgJiYKKwl0ZXN0X2NvbW1pdCBIIGZpbGU1ICYmCisJZ2l0IGNoZWNrb3V0IEYgJiYKKwl0ZXN0X2NvbW1pdCBJIGZpbGU2CisnCisKKyMgQSAtIEIgLSBDIC0gRCAtIEUKKyMgICBcICAgICAgICAgICAgIFwgXAorIyAgICAgRiAtIEcgLSBIIC0tIEwgXCAgICAgICAgLS0+ICAgTAorIyAgICAgICBcICAgICAgICAgICAgfCAgICAgICAgICAgICAgIFwKKyMgICAgICAgICBJIC0tIEcyIC0tIEogLS0gSyAgICAgICAgICAgSSAtLSBLCisjIEcyID0gc2FtZSBjaGFuZ2VzIGFzIEcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXAgc2FtZS1yZXNvbHV0aW9uIG1lcmdlcyB3aXRoIC1wJyAnCisJZ2l0IGNoZWNrb3V0IEggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRSAmJgorCXRlc3RfY29tbWl0IEwgZmlsZTEgMjMgJiYKKwlnaXQgY2hlY2tvdXQgSSAmJgorCXRlc3RfY29tbWl0IEcyIGZpbGUxIDMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRSAmJgorCXRlc3RfY29tbWl0IEogZmlsZTEgMjMgJiYKKwl0ZXN0X2NvbW1pdCBLIGZpbGU3IGZpbGU3ICYmCisJZ2l0IHJlYmFzZSAtaSAtcCBMICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSA9ICQoZ2l0IHJldi1wYXJzZSBMKSAmJgorCXRlc3QgIjIzIiA9ICIkKGNhdCBmaWxlMSkiICYmCisJdGVzdCAiSSIgPSAiJChjYXQgZmlsZTYpIiAmJgorCXRlc3QgImZpbGU3IiA9ICIkKGNhdCBmaWxlNykiCisnCisKKyMgQSAtIEIgLSBDIC0gRCAtIEUKKyMgICBcICAgICAgICAgICAgIFwgXAorIyAgICAgRiAtIEcgLSBIIC0tIEwyIFwgICAgICAgIC0tPiAgIEwyCisjICAgICAgIFwgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICBcCisjICAgICAgICAgSSAtLSBHMyAtLS0gSjIgLS0gSzIgICAgICAgICAgIEkgLS0gRzMgLS0gSzIKKyMgRzIgPSBkaWZmZXJlbnQgY2hhbmdlcyBhcyBHCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZWVwIGRpZmZlcmVudC1yZXNvbHV0aW9uIG1lcmdlcyB3aXRoIC1wJyAnCisJZ2l0IGNoZWNrb3V0IEggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRSAmJgorCXRlc3RfY29tbWl0IEwyIGZpbGUxIDIzICYmCisJZ2l0IGNoZWNrb3V0IEkgJiYKKwl0ZXN0X2NvbW1pdCBHMyBmaWxlMSA0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEUgJiYKKwl0ZXN0X2NvbW1pdCBKMiBmaWxlMSAyNCAmJgorCXRlc3RfY29tbWl0IEsyIGZpbGU3IGZpbGU3ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtcCBMMiAmJgorCWVjaG8gMjM0ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF5eXikgPSAkKGdpdCByZXYtcGFyc2UgTDIpICYmCisJdGVzdCAiMjM0IiA9ICIkKGNhdCBmaWxlMSkiICYmCisJdGVzdCAiSSIgPSAiJChjYXQgZmlsZTYpIiAmJgorCXRlc3QgImZpbGU3IiA9ICIkKGNhdCBmaWxlNykiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxMS1yZWJhc2UtcHJlc2VydmUtYXJvdW5kLW1lcmdlcy5zaCBiL3QvdDM0MTEtcmViYXNlLXByZXNlcnZlLWFyb3VuZC1tZXJnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGM4MWJmMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTEtcmViYXNlLXByZXNlcnZlLWFyb3VuZC1tZXJnZXMuc2gKQEAgLTAsMCArMSw3NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBTdGVwaGVuIEhhYmVybWFuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgcHJlc2VydmUgbWVyZ2VzCisKK1RoaXMgdGVzdCBydW5zIGdpdCByZWJhc2Ugd2l0aCAtcCBhbmQgdHJpZXMgdG8gc3F1YXNoIGEgY29tbWl0IGZyb20gYWZ0ZXIKK2EgbWVyZ2UgdG8gYmVmb3JlIHRoZSBtZXJnZS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKworc2V0X2Zha2VfZWRpdG9yCisKKyMgc2V0IHVwIHR3byBicmFuY2hlcyBsaWtlIHRoaXM6CisjCisjIEExIC0gQjEgLSBEMSAtIEUxIC0gRjEKKyMgICAgICAgXCAgICAgICAgLworIyAgICAgICAgLS0gQzEgLS0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBBMSAmJgorCXRlc3RfY29tbWl0IEIxICYmCisJdGVzdF9jb21taXQgQzEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEIxICYmCisJdGVzdF9jb21taXQgRDEgJiYKKwl0ZXN0X21lcmdlIEUxIEMxICYmCisJdGVzdF9jb21taXQgRjEKKycKKworIyBTaG91bGQgcmVzdWx0IGluOgorIworIyBBMSAtIEIxIC0gRDIgLSBFMgorIyAgICAgICBcICAgICAgICAvCisjICAgICAgICAtLSBDMSAtLQorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3F1YXNoIEYxIGludG8gRDEnICcKKwlGQUtFX0xJTkVTPSIxIHNxdWFzaCA0IDIgMyIgZ2l0IHJlYmFzZSAtaSAtcCBCMSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2UgQzEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEfjIpIiA9ICIkKGdpdCByZXYtcGFyc2UgQjEpIiAmJgorCWdpdCB0YWcgRTIKKycKKworIyBTdGFydCB3aXRoOgorIworIyBBMSAtIEIxIC0gRDIgLSBFMgorIyAgXAorIyAgIEcxIC0tLS0gTDEgLS0tLSBNMQorIyAgICBcICAgICAgICAgICAgIC8KKyMgICAgIEgxIC0tIEoxIC0tIEsxCisjICAgICAgXCAgICAgICAgIC8KKyMgICAgICAgIC0tIEkxIC0tCisjCisjIEFuZCByZWJhc2UgRzEuLk0xIG9udG8gRTIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIHR3byBsZXZlbHMgb2YgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgQTEgJiYKKwl0ZXN0X2NvbW1pdCBHMSAmJgorCXRlc3RfY29tbWl0IEgxICYmCisJdGVzdF9jb21taXQgSTEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMyBIMSAmJgorCXRlc3RfY29tbWl0IEoxICYmCisJdGVzdF9tZXJnZSBLMSBJMSAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gyIEcxICYmCisJdGVzdF9jb21taXQgTDEgJiYKKwl0ZXN0X21lcmdlIE0xIEsxICYmCisJR0lUX0VESVRPUj06IGdpdCByZWJhc2UgLWkgLXAgRTIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRH4zKSIgPSAiJChnaXQgcmV2LXBhcnNlIEUyKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRH4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMl4yfjIpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjJeMV4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMl4yXjEpIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTItcmViYXNlLXJvb3Quc2ggYi90L3QzNDEyLXJlYmFzZS1yb290LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiNTIxMDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDEyLXJlYmFzZS1yb290LnNoCkBAIC0wLDAgKzEsMjgxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLXJvb3QKKworVGVzdHMgaWYgZ2l0IHJlYmFzZSAtLXJvb3QgLS1vbnRvIDxuZXdwYXJlbnQ+IGNhbiByZWJhc2UgdGhlIHJvb3QgY29tbWl0LgorJworLiAuL3Rlc3QtbGliLnNoCisKK2xvZ193aXRoX25hbWVzICgpIHsKKwlnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIC0tcGFyZW50cyAtLXByZXR0eT0idGZvcm1hdDolcyIgSEVBRCB8CisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPXJlZnMvaGVhZHMvJDEKK30KKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHJlcG9zaXRvcnknICcKKwl0ZXN0X2NvbW1pdCAxIEEgJiYKKwl0ZXN0X2NvbW1pdCAyIEEgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9vdGhlciAmJgorCXJtIC5naXQvaW5kZXggJiYKKwl0ZXN0X2NvbW1pdCAzIEIgJiYKKwl0ZXN0X2NvbW1pdCAxYiBBIDEgJiYKKwl0ZXN0X2NvbW1pdCA0IEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcm9vdCBmYWlscyB3aXRoIHRvbyBtYW55IGFyZ3MnICcKKwlnaXQgY2hlY2tvdXQgLUIgZmFpbCBvdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIG1hc3RlciAtLXJvb3QgZmFpbCBmYWlsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHByZS1yZWJhc2UgaG9vaycgJworCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwljYXQgPi5naXQvaG9va3MvcHJlLXJlYmFzZSA8PEVPRiAmJgorIyEkU0hFTExfUEFUSAorZWNobyAiXCQxLFwkMiIgPi5naXQvUFJFLVJFQkFTRS1JTlBVVAorRU9GCisJY2htb2QgK3ggLmdpdC9ob29rcy9wcmUtcmViYXNlCisnCitjYXQgPiBleHBlY3QgPDxFT0YKKzQKKzMKKzIKKzEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1yb290IC0tb250byA8bmV3YmFzZT4nICcKKwlnaXQgY2hlY2tvdXQgLWIgd29yayBvdGhlciAmJgorCWdpdCByZWJhc2UgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IHJlYmFzZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmViYXNlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGdvdCBjb3JyZWN0IGlucHV0ICgxKScgJworCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHotLXJvb3QsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXJvb3QgLS1vbnRvIDxuZXdiYXNlPiA8YnJhbmNoPicgJworCWdpdCBicmFuY2ggd29yazIgb3RoZXIgJiYKKwlnaXQgcmViYXNlIC0tcm9vdCAtLW9udG8gbWFzdGVyIHdvcmsyICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiByZWJhc2VkMiAmJgorCXRlc3RfY21wIGV4cGVjdCByZWJhc2VkMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGdvdCBjb3JyZWN0IGlucHV0ICgyKScgJworCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHotLXJvb3Qsd29yazIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCAtLW9udG8gPG5ld2Jhc2U+JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHdvcmszIG90aGVyICYmCisJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDoiJXMiID4gcmViYXNlZDMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmViYXNlZDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBnb3QgY29ycmVjdCBpbnB1dCAoMyknICcKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6LS1yb290LAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1yb290IC0tb250byA8bmV3YmFzZT4gPGJyYW5jaD4nICcKKwlnaXQgYnJhbmNoIHdvcms0IG90aGVyICYmCisJZ2l0IHJlYmFzZSAtaSAtLXJvb3QgLS1vbnRvIG1hc3RlciB3b3JrNCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDoiJXMiID4gcmViYXNlZDQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmViYXNlZDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBnb3QgY29ycmVjdCBpbnB1dCAoNCknICcKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6LS1yb290LHdvcms0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtcCB3aXRoIGxpbmVhciBoaXN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHdvcms1IG90aGVyICYmCisJZ2l0IHJlYmFzZSAtaSAtcCAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWdpdCBsb2cgLS1wcmV0dHk9dGZvcm1hdDoiJXMiID4gcmViYXNlZDUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgcmViYXNlZDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBnb3QgY29ycmVjdCBpbnB1dCAoNSknICcKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6LS1yb290LAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgbWVyZ2UgaGlzdG9yeScgJworCWdpdCBjaGVja291dCBvdGhlcl4gJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCXRlc3RfY29tbWl0IDUgQyAmJgorCWdpdCBjaGVja291dCBvdGhlciAmJgorCWdpdCBtZXJnZSBzaWRlCisnCisKK2NhdCA+IGV4cGVjdC1zaWRlIDw8J0VPRicKK2NvbW1pdCB3b3JrNiB3b3JrNn4xIHdvcms2XjIKK01lcmdlIGJyYW5jaCAnc2lkZScgaW50byBvdGhlcgorY29tbWl0IHdvcms2XjIgd29yazZ+MgorNQorY29tbWl0IHdvcms2fjEgd29yazZ+MgorNAorY29tbWl0IHdvcms2fjIgd29yazZ+MworMworY29tbWl0IHdvcms2fjMgd29yazZ+NAorMgorY29tbWl0IHdvcms2fjQKKzEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLXAgd2l0aCBtZXJnZScgJworCWdpdCBjaGVja291dCAtYiB3b3JrNiBvdGhlciAmJgorCWdpdCByZWJhc2UgLWkgLXAgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlsb2dfd2l0aF9uYW1lcyB3b3JrNiA+IHJlYmFzZWQ2ICYmCisJdGVzdF9jbXAgZXhwZWN0LXNpZGUgcmViYXNlZDYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHNlY29uZCByb290IGFuZCBtZXJnZScgJworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL3RoaXJkICYmCisJcm0gLmdpdC9pbmRleCAmJgorCXJtIEEgQiBDICYmCisJdGVzdF9jb21taXQgNiBEICYmCisJZ2l0IGNoZWNrb3V0IG90aGVyICYmCisJZ2l0IG1lcmdlIHRoaXJkCisnCisKK2NhdCA+IGV4cGVjdC10aGlyZCA8PCdFT0YnCitjb21taXQgd29yazcgd29yazd+MSB3b3JrN14yCitNZXJnZSBicmFuY2ggJ3RoaXJkJyBpbnRvIG90aGVyCitjb21taXQgd29yazdeMiB3b3JrN340Cis2Citjb21taXQgd29yazd+MSB3b3JrN34yIHdvcms3fjFeMgorTWVyZ2UgYnJhbmNoICdzaWRlJyBpbnRvIG90aGVyCitjb21taXQgd29yazd+MV4yIHdvcms3fjMKKzUKK2NvbW1pdCB3b3JrN34yIHdvcms3fjMKKzQKK2NvbW1pdCB3b3JrN34zIHdvcms3fjQKKzMKK2NvbW1pdCB3b3JrN340IHdvcms3fjUKKzIKK2NvbW1pdCB3b3JrN341CisxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC1wIHdpdGggdHdvIHJvb3RzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHdvcms3IG90aGVyICYmCisJZ2l0IHJlYmFzZSAtaSAtcCAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWxvZ193aXRoX25hbWVzIHdvcms3ID4gcmViYXNlZDcgJiYKKwl0ZXN0X2NtcCBleHBlY3QtdGhpcmQgcmViYXNlZDcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcHJlLXJlYmFzZSBob29rIHRoYXQgZmFpbHMnICcKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJY2F0ID4uZ2l0L2hvb2tzL3ByZS1yZWJhc2UgPDxFT0YgJiYKKyMhJFNIRUxMX1BBVEgKK2ZhbHNlCitFT0YKKwljaG1vZCAreCAuZ2l0L2hvb2tzL3ByZS1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIHN0b3BzIHJlYmFzZScgJworCWdpdCBjaGVja291dCAtYiBzdG9wczEgb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSB6cmVmcy9oZWFkcy9zdG9wczEgJiYKKwl0ZXN0IDAgPSAkKGdpdCByZXYtbGlzdCBvdGhlci4uLnN0b3BzMSB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgc3RvcHMgcmViYXNlIC1pJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHN0b3BzMiBvdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiA9IHpyZWZzL2hlYWRzL3N0b3BzMiAmJgorCXRlc3QgMCA9ICQoZ2l0IHJldi1saXN0IG90aGVyLi4uc3RvcHMyIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBwcmUtcmViYXNlIGhvb2snICcKKwlybSAtZiAuZ2l0L2hvb2tzL3ByZS1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGEgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBjb25mbGljdCA+IEIgJiYKKwlnaXQgYWRkIEIgJiYKKwlnaXQgY29tbWl0IC1tIGNvbmZsaWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLXJvb3Qgd2l0aCBjb25mbGljdCAoZmlyc3QgcGFydCknICcKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QxIG90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXJvb3QgLS1vbnRvIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtdSB8IGdyZXAgIkIkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXggdGhlIGNvbmZsaWN0JyAnCisJZWNobyAzID4gQiAmJgorCWdpdCBhZGQgQgorJworCitjYXQgPiBleHBlY3QtY29uZmxpY3QgPDxFT0YKKzYKKzUKKzQKKzMKK2NvbmZsaWN0CisyCisxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tcm9vdCB3aXRoIGNvbmZsaWN0IChzZWNvbmQgcGFydCknICcKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6IiVzIiA+IGNvbmZsaWN0MSAmJgorCXRlc3RfY21wIGV4cGVjdC1jb25mbGljdCBjb25mbGljdDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tcm9vdCB3aXRoIGNvbmZsaWN0IChmaXJzdCBwYXJ0KScgJworCWdpdCBjaGVja291dCAtYiBjb25mbGljdDIgb3RoZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tcm9vdCAtLW9udG8gbWFzdGVyICYmCisJZ2l0IGxzLWZpbGVzIC11IHwgZ3JlcCAiQiQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpeCB0aGUgY29uZmxpY3QnICcKKwllY2hvIDMgPiBCICYmCisJZ2l0IGFkZCBCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaSAtLXJvb3Qgd2l0aCBjb25mbGljdCAoc2Vjb25kIHBhcnQpJyAnCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZ2l0IGxvZyAtLXByZXR0eT10Zm9ybWF0OiIlcyIgPiBjb25mbGljdDIgJiYKKwl0ZXN0X2NtcCBleHBlY3QtY29uZmxpY3QgY29uZmxpY3QyCisnCisKK2NhdCA+ZXhwZWN0LWNvbmZsaWN0LXAgPDxcRU9GCitjb21taXQgY29uZmxpY3QzIGNvbmZsaWN0M34xIGNvbmZsaWN0M14yCitNZXJnZSBicmFuY2ggJ3RoaXJkJyBpbnRvIG90aGVyCitjb21taXQgY29uZmxpY3QzXjIgY29uZmxpY3QzfjQKKzYKK2NvbW1pdCBjb25mbGljdDN+MSBjb25mbGljdDN+MiBjb25mbGljdDN+MV4yCitNZXJnZSBicmFuY2ggJ3NpZGUnIGludG8gb3RoZXIKK2NvbW1pdCBjb25mbGljdDN+MV4yIGNvbmZsaWN0M34zCis1Citjb21taXQgY29uZmxpY3QzfjIgY29uZmxpY3QzfjMKKzQKK2NvbW1pdCBjb25mbGljdDN+MyBjb25mbGljdDN+NAorMworY29tbWl0IGNvbmZsaWN0M340IGNvbmZsaWN0M341Citjb25mbGljdAorY29tbWl0IGNvbmZsaWN0M341IGNvbmZsaWN0M342CisyCitjb21taXQgY29uZmxpY3QzfjYKKzEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLXAgLS1yb290IHdpdGggY29uZmxpY3QgKGZpcnN0IHBhcnQpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0MyBvdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgLXAgLS1yb290IC0tb250byBtYXN0ZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXUgfCBncmVwICJCJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZml4IHRoZSBjb25mbGljdCcgJworCWVjaG8gMyA+IEIgJiYKKwlnaXQgYWRkIEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC1wIC0tcm9vdCB3aXRoIGNvbmZsaWN0IChzZWNvbmQgcGFydCknICcKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlsb2dfd2l0aF9uYW1lcyBjb25mbGljdDMgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdC1jb25mbGljdC1wIG91dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTMtcmViYXNlLWhvb2suc2ggYi90L3QzNDEzLXJlYmFzZS1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI2ODMzZTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDEzLXJlYmFzZS1ob29rLnNoCkBAIC0wLDAgKzEsMTQyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSB3aXRoIGl0cyBob29rKHMpJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gZ29vZGJ5ZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwllY2hvIHdvcmxkID5naXQgJiYKKwlnaXQgYWRkIGdpdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2lkZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgLS1hYmJyZXYtY29tbWl0IC0tZ3JhcGggLS1hbGwgJiYKKwlnaXQgYnJhbmNoIHRlc3Qgc2lkZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UnICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtaScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJRURJVE9SPXRydWUgZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcHJlLXJlYmFzZSBob29rJyAnCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCWNhdCA+LmdpdC9ob29rcy9wcmUtcmViYXNlIDw8RU9GICYmCisjISRTSEVMTF9QQVRICitlY2hvICJcJDEsXCQyIiA+LmdpdC9QUkUtUkVCQVNFLUlOUFVUCitFT0YKKwljaG1vZCAreCAuZ2l0L2hvb2tzL3ByZS1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIGdldHMgY29ycmVjdCBpbnB1dCAoMSknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkICYmCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gem1hc3RlciwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgZ2V0cyBjb3JyZWN0IGlucHV0ICgyKScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgdGVzdCAmJgorCXRlc3QgInokKGNhdCBnaXQpIiA9IHp3b3JsZCAmJgorCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHptYXN0ZXIsdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgZ2V0cyBjb3JyZWN0IGlucHV0ICgzKScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZWJhc2UgbWFzdGVyIHRlc3QgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQgJiYKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6bWFzdGVyLHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIGdldHMgY29ycmVjdCBpbnB1dCAoNCknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCUVESVRPUj10cnVlIGdpdCByZWJhc2UgLWkgbWFzdGVyICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkICYmCisJdGVzdCAieiQoY2F0IC5naXQvUFJFLVJFQkFTRS1JTlBVVCkiID0gem1hc3RlciwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgZ2V0cyBjb3JyZWN0IGlucHV0ICg1KScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJRURJVE9SPXRydWUgZ2l0IHJlYmFzZSAtaSBtYXN0ZXIgdGVzdCAmJgorCXRlc3QgInokKGNhdCBnaXQpIiA9IHp3b3JsZCAmJgorCXRlc3QgInokKGNhdCAuZ2l0L1BSRS1SRUJBU0UtSU5QVVQpIiA9IHptYXN0ZXIsdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmUtcmViYXNlIGhvb2sgZ2V0cyBjb3JyZWN0IGlucHV0ICg2KScgJworCWdpdCBjaGVja291dCB0ZXN0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCUVESVRPUj10cnVlIGdpdCByZWJhc2UgLWkgbWFzdGVyIHRlc3QgJiYKKwl0ZXN0ICJ6JChjYXQgZ2l0KSIgPSB6d29ybGQgJiYKKwl0ZXN0ICJ6JChjYXQgLmdpdC9QUkUtUkVCQVNFLUlOUFVUKSIgPSB6bWFzdGVyLHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcHJlLXJlYmFzZSBob29rIHRoYXQgZmFpbHMnICcKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJY2F0ID4uZ2l0L2hvb2tzL3ByZS1yZWJhc2UgPDxFT0YgJiYKKyMhJFNIRUxMX1BBVEgKK2ZhbHNlCitFT0YKKwljaG1vZCAreCAuZ2l0L2hvb2tzL3ByZS1yZWJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIHN0b3BzIHJlYmFzZSAoMSknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSB6cmVmcy9oZWFkcy90ZXN0ICYmCisJdGVzdCAwID0gJChnaXQgcmV2LWxpc3QgSEVBRC4uLnNpZGUgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlYmFzZSBob29rIHN0b3BzIHJlYmFzZSAoMiknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBFRElUT1I9OiBnaXQgcmViYXNlIC1pIG1hc3RlciAmJgorCXRlc3QgInokKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0genJlZnMvaGVhZHMvdGVzdCAmJgorCXRlc3QgMCA9ICQoZ2l0IHJldi1saXN0IEhFQUQuLi5zaWRlIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW5vLXZlcmlmeSBvdmVycmlkZXMgcHJlLXJlYmFzZSAoMSknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgLS1uby12ZXJpZnkgbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSB6cmVmcy9oZWFkcy90ZXN0ICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW5vLXZlcmlmeSBvdmVycmlkZXMgcHJlLXJlYmFzZSAoMiknICcKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCUVESVRPUj10cnVlIGdpdCByZWJhc2UgLS1uby12ZXJpZnkgLWkgbWFzdGVyICYmCisJdGVzdCAieiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgPSB6cmVmcy9oZWFkcy90ZXN0ICYmCisJdGVzdCAieiQoY2F0IGdpdCkiID0gendvcmxkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxNC1yZWJhc2UtcHJlc2VydmUtb250by5zaCBiL3QvdDM0MTQtcmViYXNlLXByZXNlcnZlLW9udG8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWUwYTZjYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTQtcmViYXNlLXByZXNlcnZlLW9udG8uc2gKQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBHcmVnIFByaWNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLXAgc2hvdWxkIHJlc3BlY3QgLS1vbnRvCisKK0luIGEgcmViYXNlIHdpdGggLS1vbnRvLCB3ZSBzaG91bGQgcmV3cml0ZSBhbGwgdGhlIGNvbW1pdHMgdGhhdAorYXJlbiciJyIndCBvbiB0b3Agb2YgJE9OVE8sIGV2ZW4gaWYgdGhleSBhcmUgb24gdG9wIG9mICRVUFNUUkVBTS4KKycKKy4gLi90ZXN0LWxpYi5zaAorCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1yZWJhc2Uuc2gKKworIyBTZXQgdXAgYnJhbmNoZXMgbGlrZSB0aGlzOgorIyBBMS0tLUIxLS0tRTEtLS1GMS0tLUcxCisjICBcICAgIFwgICAgICAgICAgICAgLworIyAgIFwgICAgXC0tQzEtLS1EMS0tLworIyAgICBIMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IEExICYmCisJdGVzdF9jb21taXQgQjEgJiYKKwl0ZXN0X2NvbW1pdCBDMSAmJgorCXRlc3RfY29tbWl0IEQxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBCMSAmJgorCXRlc3RfY29tbWl0IEUxICYmCisJdGVzdF9jb21taXQgRjEgJiYKKwl0ZXN0X21lcmdlIEcxIEQxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBMSAmJgorCXRlc3RfY29tbWl0IEgxCisnCisKKyMgTm93IHJlYmFzZSBtZXJnZSBHMSBmcm9tIGJvdGggYnJhbmNoZXMnIGJhc2UgQjEsIGJvdGggc2hvdWxkIG1vdmU6CisjIEExLS0tQjEtLS1FMS0tLUYxLS0tRzEKKyMgIFwgICAgXCAgICAgICAgICAgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLS0vCisjICAgIFwKKyMgICAgIEgxLS0tRTItLS1GMi0tLUcyCisjICAgICAgXCAgICAgICAgICAgICAvCisjICAgICAgIFwtLUMyLS0tRDItLS8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZyb20gQjEgb250byBIMScgJworCWdpdCBjaGVja291dCBHMSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIEgxIEIxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMV4xXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSDEpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjJeMV4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEgxKSIKKycKKworIyBPbiB0aGUgb3RoZXIgaGFuZCBpZiByZWJhc2UgZnJvbSBFMSB3aGljaCBpcyB3aXRoaW4gb25lIGJyYW5jaCwKKyMgdGhlbiB0aGUgb3RoZXIgYnJhbmNoIHN0YXlzOgorIyBBMS0tLUIxLS0tRTEtLS1GMS0tLUcxCisjICBcICAgIFwgICAgICAgICAgICAgLworIyAgIFwgICAgXC0tQzEtLS1EMS0tLworIyAgICBcICAgICAgICAgICAgIFwKKyMgICAgIEgxLS0tLS1GMy0tLS0tRzMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGZyb20gRTEgb250byBIMScgJworCWdpdCBjaGVja291dCBHMSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIEgxIEUxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMV4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIEgxKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgPSAiJChnaXQgcmV2LXBhcnNlIEQxKSIKKycKKworIyBBbmQgdGhlIHNhbWUgaWYgd2UgcmViYXNlIGZyb20gYSBjb21taXQgaW4gdGhlIHNlY29uZC1wYXJlbnQgYnJhbmNoLgorIyBBMS0tLUIxLS0tRTEtLS1GMS0tLS1HMQorIyAgXCAgICBcICAgICAgICAgIFwgICAvCisjICAgXCAgICBcLS1DMS0tLUQxLVwtLworIyAgICBcICAgICAgICAgICAgICAgXAorIyAgICAgSDEtLS0tLS1EMy0tLS0tLUc0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSBmcm9tIEMxIG9udG8gSDEnICcKKwlnaXQgY2hlY2tvdXQgRzEgJiYKKwlnaXQgcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1wcmV0dHk9b25lbGluZSBDMS4uRzEgJiYKKwlnaXQgcmViYXNlIC1wIC0tb250byBIMSBDMSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjJeMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBIMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBGMSkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxNS1yZWJhc2UtYXV0b3NxdWFzaC5zaCBiL3QvdDM0MTUtcmViYXNlLWF1dG9zcXVhc2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGY1M2U1NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTUtcmViYXNlLWF1dG9zcXVhc2guc2gKQEAgLTAsMCArMSwyNzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhdXRvIHNxdWFzaCcKKworLiAuL3Rlc3QtbGliLnNoCisKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYmFzZS5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIDAgPmZpbGUwICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJZWNobyAwID5maWxlMSAmJgorCWVjaG8gMiA+ZmlsZTIgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCBjb21taXQiICYmCisJZ2l0IHRhZyBmaXJzdC1jb21taXQgJiYKKwllY2hvIDMgPmZpbGUzICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIGNvbW1pdCIgJiYKKwlnaXQgdGFnIGJhc2UKKycKKwordGVzdF9hdXRvX2ZpeHVwICgpIHsKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImZpeHVwISBmaXJzdCIgJiYKKworCWdpdCB0YWcgJDEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlICQyIC1pIEhFQUReXl4gJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAkMSAmJgorCXRlc3QgMSA9ICIkKGdpdCBjYXQtZmlsZSBibG9iIEhFQUReOmZpbGUxKSIgJiYKKwl0ZXN0IDEgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBncmVwIGZpcnN0IHwgd2MgLWwpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gZml4dXAgKG9wdGlvbiknICcKKwl0ZXN0X2F1dG9fZml4dXAgZmluYWwtZml4dXAtb3B0aW9uIC0tYXV0b3NxdWFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIGZpeHVwIChjb25maWcpJyAnCisJZ2l0IGNvbmZpZyByZWJhc2UuYXV0b3NxdWFzaCB0cnVlICYmCisJdGVzdF9hdXRvX2ZpeHVwIGZpbmFsLWZpeHVwLWNvbmZpZy10cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdF9hdXRvX2ZpeHVwIGZpeHVwLWNvbmZpZy10cnVlLW5vIC0tbm8tYXV0b3NxdWFzaCAmJgorCWdpdCBjb25maWcgcmViYXNlLmF1dG9zcXVhc2ggZmFsc2UgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0X2F1dG9fZml4dXAgZmluYWwtZml4dXAtY29uZmlnLWZhbHNlCisnCisKK3Rlc3RfYXV0b19zcXVhc2ggKCkgeworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISBmaXJzdCIgJiYKKworCWdpdCB0YWcgJDEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlICQyIC1pIEhFQUReXl4gJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBhY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAkMSAmJgorCXRlc3QgMSA9ICIkKGdpdCBjYXQtZmlsZSBibG9iIEhFQUReOmZpbGUxKSIgJiYKKwl0ZXN0IDIgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBncmVwIGZpcnN0IHwgd2MgLWwpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gc3F1YXNoIChvcHRpb24pJyAnCisJdGVzdF9hdXRvX3NxdWFzaCBmaW5hbC1zcXVhc2ggLS1hdXRvc3F1YXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gc3F1YXNoIChjb25maWcpJyAnCisJZ2l0IGNvbmZpZyByZWJhc2UuYXV0b3NxdWFzaCB0cnVlICYmCisJdGVzdF9hdXRvX3NxdWFzaCBmaW5hbC1zcXVhc2gtY29uZmlnLXRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0X2F1dG9fc3F1YXNoIHNxdWFzaC1jb25maWctdHJ1ZS1ubyAtLW5vLWF1dG9zcXVhc2ggJiYKKwlnaXQgY29uZmlnIHJlYmFzZS5hdXRvc3F1YXNoIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdF9hdXRvX3NxdWFzaCBmaW5hbC1zcXVhc2gtY29uZmlnLWZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NwZWxsZWQgYXV0byBzcXVhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwllY2hvIDEgPmZpbGUxICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNxdWFzaCEgZm9yc3QiICYmCisJZ2l0IHRhZyBmaW5hbC1taXNzcXVhc2ggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtbWlzc3F1YXNoICYmCisJdGVzdCAwID0gJChnaXQgcmV2LWxpc3QgZmluYWwtbWlzc3F1YXNoLi4uSEVBRCB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdXRvIHNxdWFzaCB0aGF0IG1hdGNoZXMgMiBjb21taXRzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyA0ID5maWxlNCAmJgorCWdpdCBhZGQgZmlsZTQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCBuZXcgY29tbWl0IiAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISBmaXJzdCIgJiYKKwlnaXQgdGFnIGZpbmFsLW11bHRpc3F1YXNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRH40ICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtbXVsdGlzcXVhc2ggJiYKKwl0ZXN0IDEgPSAiJChnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXl46ZmlsZTEpIiAmJgorCXRlc3QgMiA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXl4gfCBncmVwIGZpcnN0IHwgd2MgLWwpICYmCisJdGVzdCAxID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIGZpcnN0IHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gc3F1YXNoIHRoYXQgbWF0Y2hlcyBhIGNvbW1pdCBhZnRlciB0aGUgc3F1YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzcXVhc2ghIHRoaXJkIiAmJgorCWVjaG8gNCA+ZmlsZTQgJiYKKwlnaXQgYWRkIGZpbGU0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAidGhpcmQgY29tbWl0IiAmJgorCWdpdCB0YWcgZmluYWwtcHJlc3F1YXNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRH40ICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtcHJlc3F1YXNoICYmCisJdGVzdCAwID0gIiQoZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF5eOmZpbGUxKSIgJiYKKwl0ZXN0IDEgPSAiJChnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSkiICYmCisJdGVzdCAxID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIHRoaXJkIHwgd2MgLWwpICYmCisJdGVzdCAxID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCB0aGlyZCB8IHdjIC1sKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0byBzcXVhc2ggdGhhdCBtYXRjaGVzIGEgc2hhMScgJworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXikiICYmCisJZ2l0IHRhZyBmaW5hbC1zaGFzcXVhc2ggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtc2hhc3F1YXNoICYmCisJdGVzdCAxID0gIiQoZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEpIiAmJgorCXRlc3QgMSA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IGdyZXAgc3F1YXNoIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gc3F1YXNoIHRoYXQgbWF0Y2hlcyBsb25nZXIgc2hhMScgJworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydD0xMSBIRUFEXikiICYmCisJZ2l0IHRhZyBmaW5hbC1sb25nc2hhc3F1YXNoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXiAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbmFsLWxvbmdzaGFzcXVhc2ggJiYKKwl0ZXN0IDEgPSAiJChnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSkiICYmCisJdGVzdCAxID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCBzcXVhc2ggfCB3YyAtbCkKKycKKwordGVzdF9hdXRvX2NvbW1pdF9mbGFncyAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tJDEgZmlyc3QtY29tbWl0ICYmCisJZ2l0IHRhZyBmaW5hbC1jb21taXQtJDEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmluYWwtY29tbWl0LSQxICYmCisJdGVzdCAxID0gIiQoZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEpIiAmJgorCXRlc3QgJDIgPSAkKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBncmVwIGZpcnN0IHwgd2MgLWwpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBjb21taXQgLS1maXh1cCcgJworCXRlc3RfYXV0b19jb21taXRfZmxhZ3MgZml4dXAgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgY29tbWl0IC0tc3F1YXNoJyAnCisJdGVzdF9hdXRvX2NvbW1pdF9mbGFncyBzcXVhc2ggMgorJworCit0ZXN0X2F1dG9fZml4dXBfZml4dXAgKCkgeworCWdpdCByZXNldCAtLWhhcmQgYmFzZSAmJgorCWVjaG8gMSA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEhIGZpcnN0IiAmJgorCWVjaG8gMiA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEhICQyISBmaXJzdCIgJiYKKwlnaXQgdGFnICJmaW5hbC0kMS0kMiIgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCXNldF9jYXRfdG9kb19lZGl0b3IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXl4gPmFjdHVhbCAmJgorCQljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCQlwaWNrICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReXl4pIGZpcnN0IGNvbW1pdAorCQkkMSAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXikgJDEhIGZpcnN0CisJCSQxICQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICQxISAkMiEgZmlyc3QKKwkJcGljayAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXl4pIHNlY29uZCBjb21taXQKKwkJRU9GCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkgJiYKKwlnaXQgcmViYXNlIC0tYXV0b3NxdWFzaCAtaSBIRUFEXl5eXiAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbAorCWdpdCBkaWZmIC0tZXhpdC1jb2RlICJmaW5hbC0kMS0kMiIgJiYKKwl0ZXN0IDIgPSAiJChnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpmaWxlMSkiICYmCisJaWYgdGVzdCAiJDEiID0gImZpeHVwIgorCXRoZW4KKwkJdGVzdCAxID0gJChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCBmaXJzdCB8IHdjIC1sKQorCWVsaWYgdGVzdCAiJDEiID0gInNxdWFzaCIKKwl0aGVuCisJCXRlc3QgMyA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IGdyZXAgZmlyc3QgfCB3YyAtbCkKKwllbHNlCisJCWZhbHNlCisJZmkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZml4dXAhIGZpeHVwIScgJworCXRlc3RfYXV0b19maXh1cF9maXh1cCBmaXh1cCBmaXh1cAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXh1cCEgc3F1YXNoIScgJworCXRlc3RfYXV0b19maXh1cF9maXh1cCBmaXh1cCBzcXVhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3F1YXNoISBzcXVhc2ghJyAnCisJdGVzdF9hdXRvX2ZpeHVwX2ZpeHVwIHNxdWFzaCBzcXVhc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3F1YXNoISBmaXh1cCEnICcKKwl0ZXN0X2F1dG9fZml4dXBfZml4dXAgc3F1YXNoIGZpeHVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9zcXVhc2ggd2l0aCBjdXN0b20gaW5zdCBmb3JtYXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJhc2UgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlYmFzZS5pbnN0cnVjdGlvbkZvcm1hdCAiWyVhbiBAICVhcl0gJXMiICAmJgorCWVjaG8gMiA+ZmlsZTEgJiYKKwlnaXQgYWRkIC11ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3F1YXNoISAkKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXikiICYmCisJZWNobyAxID5maWxlMSAmJgorCWdpdCBhZGQgLXUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzcXVhc2ghICQoZ2l0IGxvZyAtbiAxIC0tZm9ybWF0PSVzIEhFQUR+MikiICYmCisJZ2l0IHRhZyBmaW5hbC1zcXVhc2gtaW5zdEZtdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZWJhc2UgLS1hdXRvc3F1YXNoIC1pIEhFQUR+NCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbmFsLXNxdWFzaC1pbnN0Rm10ICYmCisJdGVzdCAxID0gIiQoZ2l0IGNhdC1maWxlIGJsb2IgSEVBRF46ZmlsZTEpIiAmJgorCXRlc3QgMiA9ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiB8IGdyZXAgc3F1YXNoIHwgd2MgLWwpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQxNi1yZWJhc2Utb250by10aHJlZWRvdHMuc2ggYi90L3QzNDE2LXJlYmFzZS1vbnRvLXRocmVlZG90cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZGYyZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzQxNi1yZWJhc2Utb250by10aHJlZWRvdHMuc2gKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmViYXNlIC0tb250byBBLi4uQicKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLXJlYmFzZS5zaCIKKworIyBSZWJhc2Ugb25seSB0aGUgdGlwIGNvbW1pdCBvZiAidG9waWMiIG9uIG1lcmdlIGJhc2UgYmV0d2VlbiAibWFzdGVyIgorIyBhbmQgInRvcGljIi4gIENhbm5vdCBkbyB0aGlzIGZvciAic2lkZSIgd2l0aCAibWFzdGVyIiBiZWNhdXNlIHRoZXJlCisjIGlzIG5vIHNpbmdsZSBtZXJnZSBiYXNlLgorIworIworIwkgICAgRi0tLUcgdG9waWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEcnCisjCSAgIC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCisjIEEtLS1CLS0tQy0tLUQtLS1FIG1hc3RlciAgICAgIC0tPiAgICAgICBBLS0tQi0tLUMtLS1ELS0tRQorIyAgICAgIFwgICBcIC8KKyMJXCAgIHgKKyMJIFwgLyBcCisjCSAgSC0tLUktLS1KLS0tSyBzaWRlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJdGVzdF9jb21taXQgQyAmJgorCWdpdCBicmFuY2ggdG9waWMgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCXRlc3RfY29tbWl0IEggJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIEggJiYKKwlnaXQgdGFnIEQgJiYKKwl0ZXN0X2NvbW1pdCBFICYmCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJdGVzdF9jb21taXQgRiAmJgorCXRlc3RfY29tbWl0IEcgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBDICYmCisJZ2l0IHRhZyBJICYmCisJdGVzdF9jb21taXQgSiAmJgorCXRlc3RfY29tbWl0IEsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tb250byBtYXN0ZXIuLi50b3BpYycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdG9waWMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEcgJiYKKworCWdpdCByZWJhc2UgLS1vbnRvIG1hc3Rlci4uLnRvcGljIEYgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBDXjAgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tb250byBtYXN0ZXIuLi4nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJZ2l0IHJlc2V0IC0taGFyZCBHICYmCisKKwlnaXQgcmViYXNlIC0tb250byBtYXN0ZXIuLi4gRiAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4xID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIENeMCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1vbnRvIG1hc3Rlci4uLnNpZGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEsgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIG1hc3Rlci4uLnNpZGUgSgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLWkgLS1vbnRvIG1hc3Rlci4uLnRvcGljJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCB0b3BpYyAmJgorCWdpdCByZXNldCAtLWhhcmQgRyAmJgorCXNldF9mYWtlX2VkaXRvciAmJgorCUVYUEVDVF9DT1VOVD0xIGdpdCByZWJhc2UgLWkgLS1vbnRvIG1hc3Rlci4uLnRvcGljIEYgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBDXjAgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tb250byBtYXN0ZXIuLi4nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHRvcGljICYmCisJZ2l0IHJlc2V0IC0taGFyZCBHICYmCisJc2V0X2Zha2VfZWRpdG9yICYmCisJRVhQRUNUX0NPVU5UPTEgZ2l0IHJlYmFzZSAtaSAtLW9udG8gbWFzdGVyLi4uIEYgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMSA+YWN0dWFsICYmCisJZ2l0IHJldi1wYXJzZSBDXjAgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC1pIC0tb250byBtYXN0ZXIuLi5zaWRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBLICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIC0tb250byBtYXN0ZXIuLi5zaWRlIEoKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDE3LXJlYmFzZS13aGl0ZXNwYWNlLWZpeC5zaCBiL3QvdDM0MTctcmViYXNlLXdoaXRlc3BhY2UtZml4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFmYjNlNDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDE3LXJlYmFzZS13aGl0ZXNwYWNlLWZpeC5zaApAQCAtMCwwICsxLDEyNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeAorCitUaGlzIHRlc3QgcnVucyBnaXQgcmViYXNlIC0td2hpdGVzcGFjZT1maXggYW5kIG1ha2Ugc3VyZSB0aGF0IGl0IHdvcmtzLgorJworCisuIC4vdGVzdC1saWIuc2gKKworIyBwcmVwYXJlIGluaXRpYWwgcmV2aXNpb24gb2YgImZpbGUiIHdpdGggYSBibGFuayBsaW5lIGF0IHRoZSBlbmQKK2NhdCA+ZmlsZSA8PEVPRgorYQorYgorYworCitFT0YKKworIyBleHBlY3RlZCBjb250ZW50cyBpbiAiZmlsZSIgYWZ0ZXIgcmViYXNlCitjYXQgPmV4cGVjdC1maXJzdCA8PEVPRgorYQorYgorYworRU9GCisKKyMgcHJlcGFyZSBzZWNvbmQgcmV2aXNpb24gb2YgImZpbGUiCitjYXQgPnNlY29uZCA8PEVPRgorYQorYgorYworCitkCitlCitmCisKKworCisKK0VPRgorCisjIGV4cGVjdGVkIGNvbnRlbnRzIGluIHNlY29uZCByZXZpc2lvbiBhZnRlciByZWJhc2UKK2NhdCA+ZXhwZWN0LXNlY29uZCA8PEVPRgorYQorYgorYworCitkCitlCitmCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgbGluZSBhdCBlbmQgb2YgZmlsZTsgZXh0ZW5kIGF0IGVuZCBvZiBmaWxlJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJJbml0aWFsIGVtcHR5IGNvbW1pdCIgJiYKKwlnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBmaXJzdCAmJgorCW12IHNlY29uZCBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZ2l0IHJlYmFzZSAtLXdoaXRlc3BhY2U9Zml4IEhFQUReXiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUReOmZpbGUgZXhwZWN0LWZpcnN0ICYmCisJdGVzdF9jbXAgZmlsZSBleHBlY3Qtc2Vjb25kCisnCisKKyMgcHJlcGFyZSB0aGlyZCByZXZpc2lvbiBvZiAiZmlsZSIKK3NlZCAtZSdzL1ovLycgPnRoaXJkIDw8RU9GCithCitiCitjCisKK2QKK2UKK2YKKyAgICBaCisgWgoraAoraQoragoraworbAorRU9GCisKK3NlZCAtZSdzLyAvL2cnIDx0aGlyZCA+ZXhwZWN0LXRoaXJkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3byBibGFua3MgbGluZSBhdCBlbmQgb2YgZmlsZTsgZXh0ZW5kIGF0IGVuZCBvZiBmaWxlJyAnCisJY3AgdGhpcmQgZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCWdpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeCBIRUFEXl4gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXjpmaWxlIGV4cGVjdC1zZWNvbmQgJiYKKwl0ZXN0X2NtcCBmaWxlIGV4cGVjdC10aGlyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lLCBidXQgZG8gbm90IHJlbW92ZSB0cmFpbGluZyBzcGFjZXMnICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiLWJsYW5rLWF0LWVvbCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJY3AgdGhpcmQgZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCWdpdCByZWJhc2UgLS13aGl0ZXNwYWNlPWZpeCBIRUFEXl4gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXjpmaWxlIGV4cGVjdC1zZWNvbmQgJiYKKwl0ZXN0X2NtcCBmaWxlIHRoaXJkCisnCisKK3NlZCAtZSdzL1ovLycgPmJlZ2lubmluZyA8PEVPRgorYQorCQkgICAgWgorICAgICAgIFoKK0VPRgorCitjYXQgPmV4cGVjdC1iZWdpbm5pbmcgPDxFT0YKK2EKKworCisxCisyCiszCis0Cis1CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXQgYmVnaW5uaW5nIG9mIGZpbGUnICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiYmxhbmstYXQtZW9sIiAmJgorCWNwIGJlZ2lubmluZyBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiZWdpbm5pbmcgZmlsZSAmJgorCWZvciBpIGluIDEgMiAzIDQgNTsgZG8KKwkJZWNobyAkaQorCWRvbmUgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLW0gbW9yZSBmaWxlCSYmCisJZ2l0IHJlYmFzZSAtLXdoaXRlc3BhY2U9Zml4IEhFQUReXiAmJgorCXRlc3RfY21wIGZpbGUgZXhwZWN0LWJlZ2lubmluZworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM0MTgtcmViYXNlLWNvbnRpbnVlLnNoIGIvdC90MzQxOC1yZWJhc2UtY29udGludWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDQyOGI5MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MTgtcmViYXNlLWNvbnRpbnVlLnNoCkBAIC0wLDAgKzEsMTE3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3NldF9mYWtlX2VkaXRvcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0ICJjb21taXQtbmV3LWZpbGUtRjEiIEYxIDEgJiYKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLUYyIiBGMiAyICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdG9waWMgSEVBRF4gJiYKKwl0ZXN0X2NvbW1pdCAiY29tbWl0LW5ldy1maWxlLUYyLW9uLXRvcGljLWJyYW5jaCIgRjIgMjIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJhY3RpdmUgcmViYXNlIC0tY29udGludWUgd29ya3Mgd2l0aCB0b3VjaGVkIGZpbGUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlGQUtFX0xJTkVTPSJlZGl0IDEiIGdpdCByZWJhc2UgLWkgSEVBRF4gJiYKKwl0ZXN0LWNobXRpbWUgPS02MCBGMSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24taW50ZXJhY3RpdmUgcmViYXNlIC0tY29udGludWUgd29ya3Mgd2l0aCB0b3VjaGVkIGZpbGUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBtYXN0ZXIgbWFzdGVyIHRvcGljICYmCisJZWNobyAiUmVzb2x2ZWQiID5GMiAmJgorCWdpdCBhZGQgRjIgJiYKKwl0ZXN0LWNobXRpbWUgPS02MCBGMSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24taW50ZXJhY3RpdmUgcmViYXNlIC0tY29udGludWUgd2l0aCByZXJlcmUgZW5hYmxlZCcgJworCXRlc3RfY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfbWlnaHRfZmFpbCBnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXQtbmV3LWZpbGUtRjItb24tdG9waWMtYnJhbmNoICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS0qICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBtYXN0ZXIgbWFzdGVyIHRvcGljICYmCisJZWNobyAiUmVzb2x2ZWQiID5GMiAmJgorCWdpdCBhZGQgRjIgJiYKKwljcCBGMiBGMi5leHBlY3RlZCAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXQtbmV3LWZpbGUtRjItb24tdG9waWMtYnJhbmNoICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIG1hc3RlciBtYXN0ZXIgdG9waWMgJiYKKwl0ZXN0X2NtcCBGMi5leHBlY3RlZCBGMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2UgLS1jb250aW51ZSBjYW4gbm90IGJlIHVzZWQgd2l0aCBvdGhlciBvcHRpb25zJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtdiAtLWNvbnRpbnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIC12CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWNvbnRpbnVlIHJlbWVtYmVycyBtZXJnZSBzdHJhdGVneSBhbmQgb3B0aW9ucycgJworCXJtIC1mciAuZ2l0L3JlYmFzZS0qICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjb21taXQtbmV3LWZpbGUtRjItb24tdG9waWMtYnJhbmNoICYmCisJdGVzdF9jb21taXQgImNvbW1pdC1uZXctZmlsZS1GMy1vbi10b3BpYy1icmFuY2giIEYzIDMyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgdGVzdC1iaW4gZnVubnkud2FzLnJ1biIgJiYKKwlta2RpciB0ZXN0LWJpbiAmJgorCWNhdCA+dGVzdC1iaW4vZ2l0LW1lcmdlLWZ1bm55IDw8LUVPRiAmJgorCSMhJFNIRUxMX1BBVEgKKwljYXNlICJcJDEiIGluIC0tb3B0KSA7OyAqKSBleGl0IDIgOzsgZXNhYworCXNoaWZ0ICYmCisJPmZ1bm55Lndhcy5ydW4gJiYKKwlleGVjIGdpdCBtZXJnZS1yZWN1cnNpdmUgIlwkQCIKKwlFT0YKKwljaG1vZCAreCB0ZXN0LWJpbi9naXQtbWVyZ2UtZnVubnkgJiYKKwkoCisJCVBBVEg9Li90ZXN0LWJpbjokUEFUSAorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1zIGZ1bm55IC1Yb3B0IG1hc3RlciB0b3BpYworCSkgJiYKKwl0ZXN0IC1mIGZ1bm55Lndhcy5ydW4gJiYKKwlybSBmdW5ueS53YXMucnVuICYmCisJZWNobyAiUmVzb2x2ZWQiID5GMiAmJgorCWdpdCBhZGQgRjIgJiYKKwkoCisJCVBBVEg9Li90ZXN0LWJpbjokUEFUSAorCQlnaXQgcmViYXNlIC0tY29udGludWUKKwkpICYmCisJdGVzdCAtZiBmdW5ueS53YXMucnVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLWNvbnRpbnVlIHJlbWVtYmVycyAtLXJlcmVyZS1hdXRvdXBkYXRlJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLSogJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNvbW1pdC1uZXctZmlsZS1GMy1vbi10b3BpYy1icmFuY2ggJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgImNvbW1pdC1uZXctZmlsZS1GMyIgRjMgMyAmJgorCWdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLW0gbWFzdGVyIHRvcGljICYmCisJZWNobyAiUmVzb2x2ZWQiID5GMiAmJgorCWdpdCBhZGQgRjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvICJSZXNvbHZlZCIgPkYzICYmCisJZ2l0IGFkZCBGMyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgdG9waWNAezF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtbSAtLXJlcmVyZS1hdXRvdXBkYXRlIG1hc3RlciAmJgorCXRlc3QgIiQoY2F0IEYyKSIgPSAiUmVzb2x2ZWQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJdGVzdCAiJChjYXQgRjMpIiA9ICJSZXNvbHZlZCIgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDE5LXJlYmFzZS1wYXRjaC1pZC5zaCBiL3QvdDM0MTktcmViYXNlLXBhdGNoLWlkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIxN2RkNzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDE5LXJlYmFzZS1wYXRjaC1pZC5zaApAQCAtMCwwICsxLDEwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZWJhc2UgLSB0ZXN0IHBhdGNoIGlkIGNvbXB1dGF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworY291bnQgKCkgeworCWk9MAorCXdoaWxlIHRlc3QgJGkgLWx0ICQxCisJZG8KKwkJZWNobyAiJGkiCisJCWk9JCgoJGkrMSkpCisJZG9uZQorfQorCitzY3JhbWJsZSAoKSB7CisJaT0wCisJd2hpbGUgcmVhZCB4CisJZG8KKwkJaWYgdGVzdCAkaSAtbmUgMAorCQl0aGVuCisJCQllY2hvICIkeCIKKwkJZmkKKwkJaT0kKCgoJGkrMSkgJSAxMCkpCisJZG9uZSA8IiQxIiA+IiQxLm5ldyIKKwltdiAtZiAiJDEubmV3IiAiJDEiCit9CisKK3J1biAoKSB7CisJZWNobyBcJCAiJEAiCisJL3Vzci9iaW4vdGltZSAiJEAiID4vZGV2L251bGwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgcm9vdAorJworCitkb190ZXN0cyAoKSB7CisJbmxpbmVzPSQxIHByPSR7Mi19CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwciAic2V0dXA6ICRubGluZXMgbGluZXMiICIKKwkJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJZ2l0IGNoZWNrb3V0IC1xIC1mIG1hc3RlciAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHJvb3QgJiYKKwkJY291bnQgJG5saW5lcyA+ZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtcSAtbSBpbml0aWFsICYmCisJCWdpdCBicmFuY2ggLWYgb3RoZXIgJiYKKworCQlzY3JhbWJsZSBmaWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1xIC1tICdjaGFuZ2UgYmlnIGZpbGUnICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1xIG90aGVyICYmCisJCTogPm5ld2ZpbGUgJiYKKwkJZ2l0IGFkZCBuZXdmaWxlICYmCisJCWdpdCBjb21taXQgLXEgLW0gJ2FkZCBzbWFsbCBmaWxlJyAmJgorCisJCWdpdCBjaGVycnktcGljayBtYXN0ZXIgPi9kZXYvbnVsbCAyPiYxCisJIgorCisJdGVzdF9kZWJ1ZyAiCisJCXJ1biBnaXQgZGlmZiBtYXN0ZXJeXCEKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwciAnc2V0dXAgYXR0cmlidXRlcycgIgorCQllY2hvICdmaWxlIGJpbmFyeScgPi5naXRhdHRyaWJ1dGVzCisJIgorCisJdGVzdF9kZWJ1ZyAiCisJCXJ1biBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3RlciAmJgorCQlydW4gZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSBtYXN0ZXIKKwkiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRwciAnZGV0ZWN0IHVwc3RyZWFtIHBhdGNoJyAiCisJCWdpdCBjaGVja291dCAtcSBtYXN0ZXIgJiYKKwkJc2NyYW1ibGUgZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtcSAtbSAnY2hhbmdlIGJpZyBmaWxlIGFnYWluJyAmJgorCQlnaXQgY2hlY2tvdXQgLXEgb3RoZXJee30gJiYKKwkJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtbiBcIlwkKGdpdCByZXYtbGlzdCBtYXN0ZXIuLi5IRUFEfilcIgorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJHByICdkbyBub3QgZHJvcCBwYXRjaCcgIgorCQlnaXQgYnJhbmNoIC1mIHNxdWFzaGVkIG1hc3RlciAmJgorCQlnaXQgY2hlY2tvdXQgLXEgLWYgc3F1YXNoZWQgJiYKKwkJZ2l0IHJlc2V0IC1xIC0tc29mdCBIRUFEfjIgJiYKKwkJZ2l0IGNvbW1pdCAtcSAtbSBzcXVhc2hlZCAmJgorCQlnaXQgY2hlY2tvdXQgLXEgb3RoZXJee30gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSBzcXVhc2hlZCAmJgorCQlybSAtcmYgLmdpdC9yZWJhc2UtYXBwbHkKKwkiCit9CisKK2RvX3Rlc3RzIDUwMAorZG9fdGVzdHMgNTAwMDAgRVhQRU5TSVZFCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQyMC1yZWJhc2UtYXV0b3N0YXNoLnNoIGIvdC90MzQyMC1yZWJhc2UtYXV0b3N0YXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk0NDE1NGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDIwLXJlYmFzZS1hdXRvc3Rhc2guc2gKQEAgLTAsMCArMSwxOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMgUmFta3VtYXIgUmFtYWNoYW5kcmEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlYmFzZSAtLWF1dG9zdGFzaCB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGhlbGxvLXdvcmxkID5maWxlMCAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCWdpdCBjaGVja291dCAtYiBmZWF0dXJlLWJyYW5jaCAmJgorCWVjaG8gYW5vdGhlci1oZWxsbyA+ZmlsZTEgJiYKKwllY2hvIGdvb2RieWUgPmZpbGUyICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIGNvbW1pdCIgJiYKKwllY2hvIGZpbmFsLWdvb2RieWUgPmZpbGUzICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAidGhpcmQgY29tbWl0IiAmJgorCWdpdCBjaGVja291dCAtYiB1bnJlbGF0ZWQtb250by1icmFuY2ggbWFzdGVyICYmCisJZWNobyB1bnJlbGF0ZWQgPmZpbGU0ICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAidW5yZWxhdGVkIGNvbW1pdCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmVsYXRlZC1vbnRvLWJyYW5jaCBtYXN0ZXIgJiYKKwllY2hvIGNvbmZsaWN0aW5nLWNoYW5nZSA+ZmlsZTIgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJyZWxhdGVkIGNvbW1pdCIKKycKKwordGVzdHJlYmFzZSgpIHsKKwl0eXBlPSQxCisJZG90ZXN0PSQyCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZTogZGlydHkgd29ya3RyZWUsIC0tbm8tYXV0b3N0YXNoIiAnCisJCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCAtYiByZWJhc2VkLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaCAmJgorCQllY2hvIGRpcnR5ID4+ZmlsZTMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIC0tbm8tYXV0b3N0YXNoIHVucmVsYXRlZC1vbnRvLWJyYW5jaAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiBkaXJ0eSB3b3JrdHJlZSwgbm9uLWNvbmZsaWN0aW5nIHJlYmFzZSIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCWVjaG8gZGlydHkgPj5maWxlMyAmJgorCQlnaXQgcmViYXNlJHR5cGUgdW5yZWxhdGVkLW9udG8tYnJhbmNoICYmCisJCWdyZXAgdW5yZWxhdGVkIGZpbGU0ICYmCisJCWdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IGRpcnR5IGluZGV4LCBub24tY29uZmxpY3RpbmcgcmViYXNlIiAnCisJCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCAtYiByZWJhc2VkLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+PmZpbGUzICYmCisJCWdpdCBhZGQgZmlsZTMgJiYKKwkJZ2l0IHJlYmFzZSR0eXBlIHVucmVsYXRlZC1vbnRvLWJyYW5jaCAmJgorCQlncmVwIHVucmVsYXRlZCBmaWxlNCAmJgorCQlncmVwIGRpcnR5IGZpbGUzICYmCisJCWdpdCBjaGVja291dCBmZWF0dXJlLWJyYW5jaAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSR0eXBlOiBjb25mbGljdGluZyByZWJhc2UiICcKKwkJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggZmVhdHVyZS1icmFuY2ggJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLUQgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCAmJgorCQllY2hvIGRpcnR5ID4+ZmlsZTMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIHJlbGF0ZWQtb250by1icmFuY2ggJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgJGRvdGVzdC9hdXRvc3Rhc2ggJiYKKwkJISBncmVwIGRpcnR5IGZpbGUzICYmCisJCXJtIC1yZiAkZG90ZXN0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IC0tY29udGludWUiICcKKwkJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggZmVhdHVyZS1icmFuY2ggJiYKKwkJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBicmFuY2ggLUQgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCAmJgorCQllY2hvIGRpcnR5ID4+ZmlsZTMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSR0eXBlIHJlbGF0ZWQtb250by1icmFuY2ggJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgJGRvdGVzdC9hdXRvc3Rhc2ggJiYKKwkJISBncmVwIGRpcnR5IGZpbGUzICYmCisJCWVjaG8gImNvbmZsaWN0aW5nLXBsdXMtZ29vZGJ5ZSIgPmZpbGUyICYmCisJCWdpdCBhZGQgZmlsZTIgJiYKKwkJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICRkb3Rlc3QvYXV0b3N0YXNoICYmCisJCWdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IC0tc2tpcCIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCWVjaG8gZGlydHkgPj5maWxlMyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgcmVsYXRlZC1vbnRvLWJyYW5jaCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQkhIGdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IHJlYmFzZSAtLXNraXAgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgJGRvdGVzdC9hdXRvc3Rhc2ggJiYKKwkJZ3JlcCBkaXJ0eSBmaWxlMyAmJgorCQlnaXQgY2hlY2tvdXQgZmVhdHVyZS1icmFuY2gKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UkdHlwZTogLS1hYm9ydCIgJworCQl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgcmViYXNlZC1mZWF0dXJlLWJyYW5jaCBmZWF0dXJlLWJyYW5jaCAmJgorCQl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCByZWJhc2VkLWZlYXR1cmUtYnJhbmNoICYmCisJCWVjaG8gZGlydHkgPj5maWxlMyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlJHR5cGUgcmVsYXRlZC1vbnRvLWJyYW5jaCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAkZG90ZXN0L2F1dG9zdGFzaCAmJgorCQkhIGdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICRkb3Rlc3QvYXV0b3N0YXNoICYmCisJCWdyZXAgZGlydHkgZmlsZTMgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlJHR5cGU6IG5vbi1jb25mbGljdGluZyByZWJhc2UsIGNvbmZsaWN0aW5nIHN0YXNoIiAnCisJCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjaGVja291dCAtYiByZWJhc2VkLWZlYXR1cmUtYnJhbmNoIGZlYXR1cmUtYnJhbmNoICYmCisJCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIHJlYmFzZWQtZmVhdHVyZS1icmFuY2ggJiYKKwkJZWNobyBkaXJ0eSA+ZmlsZTQgJiYKKwkJZ2l0IGFkZCBmaWxlNCAmJgorCQlnaXQgcmViYXNlJHR5cGUgdW5yZWxhdGVkLW9udG8tYnJhbmNoICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICRkb3Rlc3QgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlncmVwIHVucmVsYXRlZCBmaWxlNCAmJgorCQkhIGdyZXAgZGlydHkgZmlsZTQgJiYKKwkJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoICYmCisJCWdpdCBzdGFzaCBwb3AgJiYKKwkJZ3JlcCBkaXJ0eSBmaWxlNAorCScKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlOiBmYXN0LWZvcndhcmQgcmViYXNlIiAnCisJdGVzdF9jb25maWcgcmViYXNlLmF1dG9zdGFzaCB0cnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBiZWhpbmQtZmVhdHVyZS1icmFuY2ggZmVhdHVyZS1icmFuY2h+MSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYnJhbmNoIC1EIGJlaGluZC1mZWF0dXJlLWJyYW5jaCAmJgorCWVjaG8gZGlydHkgPj5maWxlMSAmJgorCWdpdCByZWJhc2UgZmVhdHVyZS1icmFuY2ggJiYKKwlncmVwIGRpcnR5IGZpbGUxICYmCisJZ2l0IGNoZWNrb3V0IGZlYXR1cmUtYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZTogbm9vcCByZWJhc2UiICcKKwl0ZXN0X2NvbmZpZyByZWJhc2UuYXV0b3N0YXNoIHRydWUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNhbWUtZmVhdHVyZS1icmFuY2ggZmVhdHVyZS1icmFuY2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJyYW5jaCAtRCBzYW1lLWZlYXR1cmUtYnJhbmNoICYmCisJZWNobyBkaXJ0eSA+PmZpbGUxICYmCisJZ2l0IHJlYmFzZSBmZWF0dXJlLWJyYW5jaCAmJgorCWdyZXAgZGlydHkgZmlsZTEgJiYKKwlnaXQgY2hlY2tvdXQgZmVhdHVyZS1icmFuY2gKKycKKwordGVzdHJlYmFzZSAiIiAuZ2l0L3JlYmFzZS1hcHBseQordGVzdHJlYmFzZSAiIC0tbWVyZ2UiIC5naXQvcmViYXNlLW1lcmdlCit0ZXN0cmViYXNlICIgLS1pbnRlcmFjdGl2ZSIgLmdpdC9yZWJhc2UtbWVyZ2UKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJvcnQgcmViYXNlIC1pIHdpdGggLS1hdXRvc3Rhc2gnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJZWNobyB1bmNvbW1pdGVkLWNvbnRlbnQgPmZpbGUwICYmCisJKAorCQl3cml0ZV9zY3JpcHQgYWJvcnQtZWRpdG9yLnNoIDw8LVxFT0YgJiYKKwkJCWVjaG8gPiIkMSIKKwkJRU9GCisJCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Fib3J0LWVkaXRvci5zaCIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAtLWF1dG9zdGFzaCBIRUFEXiAmJgorCQlybSAtZiBhYm9ydC1lZGl0b3Iuc2gKKwkpICYmCisJZWNobyB1bmNvbW1pdGVkLWNvbnRlbnQgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZTAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDIxLXJlYmFzZS10b3BvbG9neS1saW5lYXIuc2ggYi90L3QzNDIxLXJlYmFzZS10b3BvbG9neS1saW5lYXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWM1NWNiYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MjEtcmViYXNlLXRvcG9sb2d5LWxpbmVhci5zaApAQCAtMCwwICsxLDM1MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIHJlYmFzZSB0b3BvbG9neSB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKKyMgYS0tLWItLS1jCisjICAgICAgXAorIyAgICAgICBkLS0tZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBhICYmCisJdGVzdF9jb21taXQgYiAmJgorCXRlc3RfY29tbWl0IGMgJiYKKwlnaXQgY2hlY2tvdXQgYiAmJgorCXRlc3RfY29tbWl0IGQgJiYKKwl0ZXN0X2NvbW1pdCBlCisnCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJzaW1wbGUgcmViYXNlICQqIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGMgZSAmJgorCQl0ZXN0X2NtcF9yZXYgYyBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgZScgYy4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiBpcyBuby1vcCBpZiB1cHN0cmVhbSBpcyBhbiBhbmNlc3RvciIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBiIGUgJiYKKwkJdGVzdF9jbXBfcmV2IGUgSEVBRAorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLWYgcmV3cml0ZXMgZXZlbiBpZiB1cHN0cmVhbSBpcyBhbiBhbmNlc3RvciIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtZiBiIGUgJiYKKwkJISB0ZXN0X2NtcF9yZXYgZSBIRUFEICYmCisJCXRlc3RfY21wX3JldiBiIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnZCBlJyBiLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGZhc3QtZm9yd2FyZHMgZnJvbSBhbmNlc3RvciBvZiB1cHN0cmVhbSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBlIGIgJiYKKwkJdGVzdF9jbXBfcmV2IGUgSEVBRAorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1wCisKKyMgICAgICAgZgorIyAgICAgIC8KKyMgYS0tLWItLS1jLS0tZy0tLWgKKyMgICAgICBcCisjICAgICAgIGQtLS1ncC0taQorIworIyBncCA9IGNoZXJyeS1waWNrZWQgZworIyBoID0gcmV2ZXJ0ZWQgZworIworIyBSZXZlcnRlZCBwYXRjaGVzIGFyZSB0aGVyZSBmb3IgdGVzdHMgdG8gYmUgYWJsZSB0byBjaGVjayBpZiBhIGNvbW1pdAorIyB0aGF0IGludHJvZHVjZWQgdGhlIHNhbWUgY2hhbmdlIGFzIGFub3RoZXIgY29tbWl0IGlzCisjIGRyb3BwZWQuIFdpdGhvdXQgcmV2ZXJ0ZWQgY29tbWl0cywgd2UgY291bGQgZ2V0IGZhbHNlIHBvc2l0aXZlcworIyBiZWNhdXNlIGFwcGx5aW5nIHRoZSBwYXRjaCBzdWNjZWVkcywgYnV0IHNpbXBseSByZXN1bHRzIGluIG5vCisjIGNoYW5nZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvZiBsaW5lYXIgaGlzdG9yeSBmb3IgcmFuZ2Ugc2VsZWN0aW9uIHRlc3RzJyAnCisJZ2l0IGNoZWNrb3V0IGMgJiYKKwl0ZXN0X2NvbW1pdCBnICYmCisJcmV2ZXJ0IGggZyAmJgorCWdpdCBjaGVja291dCBkICYmCisJY2hlcnJ5X3BpY2sgZ3AgZyAmJgorCXRlc3RfY29tbWl0IGkgJiYKKwlnaXQgY2hlY2tvdXQgYiAmJgorCXRlc3RfY29tbWl0IGYKKycKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiBkcm9wcyBwYXRjaGVzIGluIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGggaSAmJgorCQl0ZXN0X2NtcF9yZXYgaCBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgaScgaC4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiBjYW4gZHJvcCBsYXN0IHBhdGNoIGlmIGluIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGggZ3AgJiYKKwkJdGVzdF9jbXBfcmV2IGggSEVBRF4gJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2QnIGguLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1vbnRvIGRyb3BzIHBhdGNoZXMgaW4gdXBzdHJlYW0iICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLS1vbnRvIGYgaCBpICYmCisJCXRlc3RfY21wX3JldiBmIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAnZCBpJyBmLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC0tb250byBkb2VzIG5vdCBkcm9wIHBhdGNoZXMgaW4gb250byIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtLW9udG8gaCBmIGkgJiYKKwkJdGVzdF9jbXBfcmV2IGggSEVBRH4zICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGdwIGknIGguLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1wCisKKyMgYS0tLWItLS1jLS0taiEKKyMgICAgICBcCisjICAgICAgIGQtLS1rIS0tbAorIworIyAhID0gZW1wdHkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9mIGxpbmVhciBoaXN0b3J5IGZvciBlbXB0eSBjb21taXQgdGVzdHMnICcKKwlnaXQgY2hlY2tvdXQgYyAmJgorCW1ha2VfZW1wdHkgaiAmJgorCWdpdCBjaGVja291dCBkICYmCisJbWFrZV9lbXB0eSBrICYmCisJdGVzdF9jb21taXQgbAorJworCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIGRyb3BzIGVtcHR5IGNvbW1pdCIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBjIGwgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGwnIGMuLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1rZWVwLWVtcHR5IiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0ta2VlcC1lbXB0eSBjIGwgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRH4zICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGsgbCcgYy4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLXAKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtLWtlZXAtZW1wdHkga2VlcHMgZW1wdHkgZXZlbiBpZiBhbHJlYWR5IGluIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0ta2VlcC1lbXB0eSBqIGwgJiYKKwkJdGVzdF9jbXBfcmV2IGogSEVBRH4zICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICdkIGsgbCcgai4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1tCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtaQordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLXAKKworIyAgICAgICBtCisjICAgICAgLworIyBhLS0tYi0tLWMtLS1nCisjCisjIHgtLS15LS0tYnAKKyMKKyMgYnAgPSBjaGVycnktcGlja2VkIGIKKyMgbSA9IHJldmVydGVkIGIKKyMKKyMgUmV2ZXJ0ZWQgcGF0Y2hlcyBhcmUgdGhlcmUgZm9yIHRlc3RzIHRvIGJlIGFibGUgdG8gY2hlY2sgaWYgYSBjb21taXQKKyMgdGhhdCBpbnRyb2R1Y2VkIHRoZSBzYW1lIGNoYW5nZSBhcyBhbm90aGVyIGNvbW1pdCBpcworIyBkcm9wcGVkLiBXaXRob3V0IHJldmVydGVkIGNvbW1pdHMsIHdlIGNvdWxkIGdldCBmYWxzZSBwb3NpdGl2ZXMKKyMgYmVjYXVzZSBhcHBseWluZyB0aGUgcGF0Y2ggc3VjY2VlZHMsIGJ1dCBzaW1wbHkgcmVzdWx0cyBpbiBubworIyBjaGFuZ2VzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2YgbGluZWFyIGhpc3RvcnkgZm9yIHRlc3QgaW52b2x2aW5nIHJvb3QnICcKKwlnaXQgY2hlY2tvdXQgYiAmJgorCXJldmVydCBtIGIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gZGlzam9pbnQgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwl0ZXN0X2NvbW1pdCB4ICYmCisJdGVzdF9jb21taXQgeSAmJgorCWNoZXJyeV9waWNrIGJwIGIKKycKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiAtLW9udG8gLS1yb290IiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0tb250byBjIC0tcm9vdCB5ICYmCisJCXRlc3RfY21wX3JldiBjIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAneCB5JyBjLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIHdpdGhvdXQgLS1vbnRvIC0tcm9vdCB3aXRoIGRpc2pvaW50IGhpc3RvcnkiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogYyB5ICYmCisJCXRlc3RfY21wX3JldiBjIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAneCB5JyBjLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC0tb250byAtLXJvb3QgZHJvcHMgcGF0Y2ggaW4gb250byIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtLW9udG8gbSAtLXJvb3QgYnAgJiYKKwkJdGVzdF9jbXBfcmV2IG0gSEVBRH4yICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICd4IHknIG0uLgorCSIKK30KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICcnCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLWkKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1wCisKK3Rlc3RfcnVuX3JlYmFzZSAoKSB7CisJcmVzdWx0PSQxCisJc2hpZnQKKwl0ZXN0X2V4cGVjdF8kcmVzdWx0ICJyZWJhc2UgJCogLS1vbnRvIC0tcm9vdCB3aXRoIG1lcmdlLWJhc2UgZG9lcyBub3QgZ28gdG8gcm9vdCIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiAtLW9udG8gbSAtLXJvb3QgZyAmJgorCQl0ZXN0X2NtcF9yZXYgbSBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2MgZycgbS4uCisJIgorfQorCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIHdpdGhvdXQgLS1vbnRvIC0tcm9vdCB3aXRoIGRpc2pvaW50IGhpc3RvcnkgZHJvcHMgcGF0Y2ggaW4gb250byIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBtIGJwICYmCisJCXRlc3RfY21wX3JldiBtIEhFQUR+MiAmJgorCQl0ZXN0X2xpbmVhcl9yYW5nZSAneCB5JyBtLi4KKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnJwordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1pCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC0tcm9vdCBvbiBsaW5lYXIgaGlzdG9yeSBpcyBhIG5vLW9wIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIC0tcm9vdCBjICYmCisJCXRlc3RfY21wX3JldiBjIEhFQUQKKwkiCit9Cit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAnJwordGVzdF9ydW5fcmViYXNlIGZhaWx1cmUgLW0KK3Rlc3RfcnVuX3JlYmFzZSBmYWlsdXJlIC1pCit0ZXN0X3J1bl9yZWJhc2UgZmFpbHVyZSAtcAorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJdGVzdF9leHBlY3RfJHJlc3VsdCAicmViYXNlICQqIC1mIC0tcm9vdCBvbiBsaW5lYXIgaGlzdG9yeSBjYXVzZXMgcmUtd3JpdGUiICIKKwkJcmVzZXRfcmViYXNlICYmCisJCWdpdCByZWJhc2UgJCogLWYgLS1yb290IGMgJiYKKwkJISB0ZXN0X2NtcF9yZXYgYSBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ2EgYiBjJyBIRUFECisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgLXAKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNDI1LXJlYmFzZS10b3BvbG9neS1tZXJnZXMuc2ggYi90L3QzNDI1LXJlYmFzZS10b3BvbG9neS1tZXJnZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODQ2Zjg1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM0MjUtcmViYXNlLXRvcG9sb2d5LW1lcmdlcy5zaApAQCAtMCwwICsxLDI1OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYmFzZSB0b3BvbG9neSB0ZXN0cyB3aXRoIG1lcmdlcycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3Rlc3RfcmV2aXNpb25fc3ViamVjdHMgKCkgeworCWV4cGVjdGVkPSIkMSIKKwlzaGlmdAorCXNldCAtLSAkKGdpdCBsb2cgLS1mb3JtYXQ9JXMgLS1uby13YWxrPXVuc29ydGVkICIkQCIpCisJdGVzdCAiJGV4cGVjdGVkIiA9ICIkKiIKK30KKworIyBhLS0tYi0tLS0tLS0tLS0tYworIyAgICAgIFwgICAgICAgICAgIFwKKyMgICAgICAgZC0tLS0tLS1lICAgXAorIyAgICAgICAgXCAgICAgICBcICAgXAorIyAgICAgICAgIG4tLS1vLS0tdy0tLXYKKyMgICAgICAgICAgICAgIFwKKyMgICAgICAgICAgICAgICB6Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvZiBub24tbGluZWFyLWhpc3RvcnknICcKKwl0ZXN0X2NvbW1pdCBhICYmCisJdGVzdF9jb21taXQgYiAmJgorCXRlc3RfY29tbWl0IGMgJiYKKwlnaXQgY2hlY2tvdXQgYiAmJgorCXRlc3RfY29tbWl0IGQgJiYKKwl0ZXN0X2NvbW1pdCBlICYmCisKKwlnaXQgY2hlY2tvdXQgYyAmJgorCXRlc3RfY29tbWl0IGcgJiYKKwlyZXZlcnQgaCBnICYmCisJZ2l0IGNoZWNrb3V0IGQgJiYKKwljaGVycnlfcGljayBncCBnICYmCisJdGVzdF9jb21taXQgaSAmJgorCWdpdCBjaGVja291dCBiICYmCisJdGVzdF9jb21taXQgZiAmJgorCisJZ2l0IGNoZWNrb3V0IGQgJiYKKwl0ZXN0X2NvbW1pdCBuICYmCisJdGVzdF9jb21taXQgbyAmJgorCXRlc3RfbWVyZ2UgdyBlICYmCisJdGVzdF9tZXJnZSB2IGMgJiYKKwlnaXQgY2hlY2tvdXQgbyAmJgorCXRlc3RfY29tbWl0IHoKKycKKwordGVzdF9ydW5fcmViYXNlICgpIHsKKwlyZXN1bHQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiBhZnRlciBtZXJnZSBmcm9tIHVwc3RyZWFtIiAiCisJCXJlc2V0X3JlYmFzZSAmJgorCQlnaXQgcmViYXNlICQqIGUgdyAmJgorCQl0ZXN0X2NtcF9yZXYgZSBIRUFEfjIgJiYKKwkJdGVzdF9saW5lYXJfcmFuZ2UgJ24gbycgZS4uCisJIgorfQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJycKK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzIC1tCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAtaQorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJZXhwZWN0ZWQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiBvZiBub24tbGluZWFyIGhpc3RvcnkgaXMgbGluZWFyaXplZCBpbiBwbGFjZSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBkIHcgJiYKKwkJdGVzdF9jbXBfcmV2IGQgSEVBRH4zICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICJcJyIkZXhwZWN0ZWQiXCciIGQuLgorCSIKK30KKyNUT0RPOiBtYWtlIG9yZGVyIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBmbGF2b3JzIG9mIHJlYmFzZQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2UgbiBvJyAnJwordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2UgbiBvJyAtbQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ24gbyBlJyAtaQorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJZXhwZWN0ZWQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiBvZiBub24tbGluZWFyIGhpc3RvcnkgaXMgbGluZWFyaXplZCB1cHN0cmVhbSIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBjIHcgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRH40ICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICJcJyIkZXhwZWN0ZWQiXCciIGMuLgorCSIKK30KKyNUT0RPOiBtYWtlIG9yZGVyIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBmbGF2b3JzIG9mIHJlYmFzZQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2QgZSBuIG8nICcnCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnZCBlIG4gbycgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICdkIG4gbyBlJyAtaQorCit0ZXN0X3J1bl9yZWJhc2UgKCkgeworCXJlc3VsdD0kMQorCXNoaWZ0CisJZXhwZWN0ZWQ9JDEKKwlzaGlmdAorCXRlc3RfZXhwZWN0XyRyZXN1bHQgInJlYmFzZSAkKiBvZiBub24tbGluZWFyIGhpc3Rvcnkgd2l0aCBtZXJnZXMgYWZ0ZXIgdXBzdHJlYW0gbWVyZ2UgaXMgbGluZWFyaXplZCIgIgorCQlyZXNldF9yZWJhc2UgJiYKKwkJZ2l0IHJlYmFzZSAkKiBjIHYgJiYKKwkJdGVzdF9jbXBfcmV2IGMgSEVBRH40ICYmCisJCXRlc3RfbGluZWFyX3JhbmdlICJcJyIkZXhwZWN0ZWQiXCciIGMuLgorCSIKK30KKyNUT0RPOiBtYWtlIG9yZGVyIGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBmbGF2b3JzIG9mIHJlYmFzZQordGVzdF9ydW5fcmViYXNlIHN1Y2Nlc3MgJ2QgZSBuIG8nICcnCit0ZXN0X3J1bl9yZWJhc2Ugc3VjY2VzcyAnZCBlIG4gbycgLW0KK3Rlc3RfcnVuX3JlYmFzZSBzdWNjZXNzICdkIG4gbyBlJyAtaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgaXMgbm8tb3AgaW4gbm9uLWxpbmVhciBoaXN0b3J5IiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCBkIHcgJiYKKwl0ZXN0X2NtcF9yZXYgdyBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCBpcyBuby1vcCB3aGVuIGJhc2UgaW5zaWRlIHNlY29uZCBwYXJlbnQiICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIGUgdyAmJgorCXRlc3RfY21wX3JldiB3IEhFQUQKKyIKKwordGVzdF9leHBlY3RfZmFpbHVyZSAicmViYXNlIC1wIC0tcm9vdCBvbiBub24tbGluZWFyIGhpc3RvcnkgaXMgYSBuby1vcCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgLS1yb290IHcgJiYKKwl0ZXN0X2NtcF9yZXYgdyBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCByZS1jcmVhdGVzIG1lcmdlIGZyb20gc2lkZSBicmFuY2giICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIHogdyAmJgorCXRlc3RfY21wX3JldiB6IEhFQUReICYmCisJdGVzdF9jbXBfcmV2IHdeMiBIRUFEXjIKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIHJlLWNyZWF0ZXMgaW50ZXJuYWwgbWVyZ2UiICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIGMgdyAmJgorCXRlc3RfY21wX3JldiBjIEhFQUR+NCAmJgorCXRlc3RfY21wX3JldiBIRUFEXjJeIEhFQUR+MyAmJgorCXRlc3RfcmV2aXNpb25fc3ViamVjdHMgJ2QgbiBlIG8gdycgSEVBRH4zIEhFQUR+MiBIRUFEXjIgSEVBRF4gSEVBRAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgY2FuIHJlLWNyZWF0ZSB0d28gYnJhbmNoZXMgb24gb250byIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgLS1vbnRvIGMgZCB3ICYmCisJdGVzdF9jbXBfcmV2IGMgSEVBRH4zICYmCisJdGVzdF9jbXBfcmV2IGMgSEVBRF4yXiAmJgorCXRlc3RfcmV2aXNpb25fc3ViamVjdHMgJ24gZSBvIHcnIEhFQUR+MiBIRUFEXjIgSEVBRF4gSEVBRAorIgorCisjICAgICAgIGYKKyMgICAgICAvCisjIGEtLS1iLS0tYy0tLWctLS1oCisjICAgICAgXAorIyAgICAgICBkLS0tZ3AtLWkKKyMgICAgICAgIFwgICAgICAgXAorIyAgICAgICAgIGUtLS0tLS0tdQorIworIyBncCA9IGNoZXJyeS1waWNrZWQgZworIyBoID0gcmV2ZXJ0ZWQgZwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2Ygbm9uLWxpbmVhci1oaXN0b3J5IGZvciBwYXRjaC1lcXVpdmFsZW5jZSB0ZXN0cycgJworCWdpdCBjaGVja291dCBlICYmCisJdGVzdF9tZXJnZSB1IGkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAicmViYXNlIC1wIHJlLWNyZWF0ZXMgaGlzdG9yeSBhcm91bmQgZHJvcHBlZCBjb21taXQgbWF0Y2hpbmcgdXBzdHJlYW0iICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIGggdSAmJgorCXRlc3RfY21wX3JldiBoIEhFQUR+MyAmJgorCXRlc3RfY21wX3JldiBIRUFEXjJeIEhFQUR+MiAmJgorCXRlc3RfcmV2aXNpb25fc3ViamVjdHMgJ2QgaSBlIHUnIEhFQUR+MiBIRUFEXjIgSEVBRF4gSEVBRAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgLS1vbnRvIGluIG1lcmdlZCBoaXN0b3J5IGRyb3BzIHBhdGNoZXMgaW4gdXBzdHJlYW0iICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIC0tb250byBmIGggdSAmJgorCXRlc3RfY21wX3JldiBmIEhFQUR+MyAmJgorCXRlc3RfY21wX3JldiBIRUFEXjJeIEhFQUR+MiAmJgorCXRlc3RfcmV2aXNpb25fc3ViamVjdHMgJ2QgaSBlIHUnIEhFQUR+MiBIRUFEXjIgSEVBRF4gSEVBRAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJyZWJhc2UgLXAgLS1vbnRvIGluIG1lcmdlZCBoaXN0b3J5IGRvZXMgbm90IGRyb3AgcGF0Y2hlcyBpbiBvbnRvIiAiCisJcmVzZXRfcmViYXNlICYmCisJZ2l0IHJlYmFzZSAtcCAtLW9udG8gaCBmIHUgJiYKKwl0ZXN0X2NtcF9yZXYgaCBIRUFEfjMgJiYKKwl0ZXN0X2NtcF9yZXYgSEVBRF4yfjIgSEVBRH4yICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnZCBncCBpIGUgdScgSEVBRH4yIEhFQUReMl4gSEVBRF4yIEhFQUReIEhFQUQKKyIKKworIyBhLS0tYi0tLWMtLS1nLS0taAorIyAgICAgIFwKKyMgICAgICAgZC0tLWdwLS1zCisjICAgICAgICBcICAgXCAvCisjICAgICAgICAgXCAgIFgKKyMgICAgICAgICAgXCAvIFwKKyMgICAgICAgICAgIGUtLS10CisjCisjIGdwID0gY2hlcnJ5LXBpY2tlZCBnCisjIGggPSByZXZlcnRlZCBnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBvZiBub24tbGluZWFyLWhpc3RvcnkgZm9yIGRyb3BwaW5nIHdob2xlIHNpZGUnICcKKwlnaXQgY2hlY2tvdXQgZ3AgJiYKKwl0ZXN0X21lcmdlIHMgZSAmJgorCWdpdCBjaGVja291dCBlICYmCisJdGVzdF9tZXJnZSB0IGdwCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgInJlYmFzZSAtcCBkcm9wcyBtZXJnZSBjb21taXQgd2hlbiBlbnRpcmUgZmlyc3QtcGFyZW50IHNpZGUgaXMgZHJvcHBlZCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgaCBzICYmCisJdGVzdF9jbXBfcmV2IGggSEVBRH4yICYmCisJdGVzdF9saW5lYXJfcmFuZ2UgJ2QgZScgaC4uCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCBkcm9wcyBtZXJnZSBjb21taXQgd2hlbiBlbnRpcmUgc2Vjb25kLXBhcmVudCBzaWRlIGlzIGRyb3BwZWQiICIKKwlyZXNldF9yZWJhc2UgJiYKKwlnaXQgcmViYXNlIC1wIGggdCAmJgorCXRlc3RfY21wX3JldiBoIEhFQUR+MiAmJgorCXRlc3RfbGluZWFyX3JhbmdlICdkIGUnIGguLgorIgorCisjIGEtLS1iLS0tYworIyAgICAgIFwKKyMgICAgICAgZC0tLWUKKyMgICAgICAgIFwgICBcCisjICAgICAgICAgbi0tLXIKKyMgICAgICAgICAgXAorIyAgICAgICAgICAgbworIworIyByID0gdHJlZS1zYW1lIHdpdGggbgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2Ygbm9uLWxpbmVhci1oaXN0b3J5IGZvciBlbXB0eSBjb21taXRzJyAnCisJZ2l0IGNoZWNrb3V0IG4gJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgZSAmJgorCWdpdCByZXNldCBuIC4gJiYKKwlnaXQgY29tbWl0IC1tIHIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNsZWFuIC1mICYmCisJZ2l0IHRhZyByCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCByZS1jcmVhdGVzIGVtcHR5IGludGVybmFsIG1lcmdlIGNvbW1pdCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgYyByICYmCisJdGVzdF9jbXBfcmV2IGMgSEVBRH4zICYmCisJdGVzdF9jbXBfcmV2IEhFQUReMl4gSEVBRH4yICYmCisJdGVzdF9yZXZpc2lvbl9zdWJqZWN0cyAnZCBlIG4gcicgSEVBRH4yIEhFQUReMiBIRUFEXiBIRUFECisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlYmFzZSAtcCByZS1jcmVhdGVzIGVtcHR5IG1lcmdlIGNvbW1pdCIgIgorCXJlc2V0X3JlYmFzZSAmJgorCWdpdCByZWJhc2UgLXAgbyByICYmCisJdGVzdF9jbXBfcmV2IGUgSEVBRF4yICYmCisJdGVzdF9jbXBfcmV2IG8gSEVBRF4gJiYKKwl0ZXN0X3JldmlzaW9uX3N1YmplY3RzICdyJyBIRUFECisiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzQyNi1yZWJhc2Utc3VibW9kdWxlLnNoIGIvdC90MzQyNi1yZWJhc2Utc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ1Yjg5NmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNDI2LXJlYmFzZS1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSw0NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlYmFzZSBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK2dpdF9yZWJhc2UgKCkgeworCWdpdCBzdGF0dXMgLXN1ID5leHBlY3QgJiYKKwlscyAtMXBSICogPj5leHBlY3QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb3VycyBIRUFEICYmCisJZWNobyB4ID4+ZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSBhZGRfeCAmJgorCWdpdCByZXZlcnQgSEVBRCAmJgorCWdpdCBzdGF0dXMgLXN1ID5hY3R1YWwgJiYKKwlscyAtMXBSICogPj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJlYmFzZSAiJDEiCit9CisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0X3JlYmFzZSIKKworZ2l0X3JlYmFzZV9pbnRlcmFjdGl2ZSAoKSB7CisJZ2l0IHN0YXR1cyAtc3UgPmV4cGVjdCAmJgorCWxzIC0xcFIgKiA+PmV4cGVjdCAmJgorCWdpdCBjaGVja291dCAtYiBvdXJzIEhFQUQgJiYKKwllY2hvIHggPj5maWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIGFkZF94ICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisJZ2l0IHN0YXR1cyAtc3UgPmFjdHVhbCAmJgorCWxzIC0xcFIgKiA+PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlzZXRfZmFrZV9lZGl0b3IgJiYKKwllY2hvICJmYWtlLWVkaXRvci5zaCIgPi5naXQvaW5mby9leGNsdWRlICYmCisJZ2l0IHJlYmFzZSAtaSAiJDEiCit9CisKK0tOT1dOX0ZBSUxVUkVfTk9GRl9NRVJHRV9ET0VTTlRfQ1JFQVRFX0VNUFRZX1NVQk1PRFVMRV9ESVI9MQorIyBUaGUgcmVhbCByZWFzb24gInJlcGxhY2UgZGlyZWN0b3J5IHdpdGggc3VibW9kdWxlIiBmYWlscyBpcyBiZWNhdXNlIGEKKyMgZGlyZWN0b3J5ICJzdWIxIiBleGlzdHMsIGJ1dCB3ZSByZXVzZSB0aGUgc3VwcHJlc3Npb24gYWRkZWQgZm9yIG1lcmdlIGhlcmUKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0X3JlYmFzZV9pbnRlcmFjdGl2ZSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTAwLWNoZXJyeS5zaCBiL3QvdDM1MDAtY2hlcnJ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwMzhmMzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTAwLWNoZXJyeS5zaApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFlhbm4gRGlyc29uLCBiYXNlZCBvbiB0MzQwMCBieSBBbW9zIFdhdGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2hlcnJ5IHNob3VsZCBkZXRlY3QgcGF0Y2hlcyBpbnRlZ3JhdGVkIHVwc3RyZWFtCisKK1RoaXMgdGVzdCBjaGVycnktcGlja3Mgb25lIGxvY2FsIGNoYW5nZSBvZiB0d28gaW50byBtYXN0ZXIgYnJhbmNoLCBhbmQKK2NoZWNrcyB0aGF0IGdpdCBjaGVycnkgb25seSByZXR1cm5zIHRoZSBzZWNvbmQgcGF0Y2ggaW4gdGhlIGxvY2FsIGJyYW5jaAorJworLiAuL3Rlc3QtbGliLnNoCisKK0dJVF9BVVRIT1JfRU1BSUw9Ym9ndXNfZW1haWxfYWRkcmVzcworZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgcmVwb3NpdG9yeSB3aXRoIHRvcGljIGJyYW5jaCwgYW5kIGNoZWNrIGNoZXJyeSBmaW5kcyB0aGUgMiBwYXRjaGVzIGZyb20gdGhlcmUnIFwKKyAgICAnZWNobyBGaXJzdCA+IEEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBICYmCisgICAgIHRlc3RfdGljayAmJgorICAgICBnaXQgY29tbWl0IC1tICJBZGQgQS4iICYmCisKKyAgICAgZ2l0IGNoZWNrb3V0IC1iIG15LXRvcGljLWJyYW5jaCAmJgorCisgICAgIGVjaG8gU2Vjb25kID4gQiAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEIgJiYKKyAgICAgdGVzdF90aWNrICYmCisgICAgIGdpdCBjb21taXQgLW0gIkFkZCBCLiIgJiYKKworICAgICBlY2hvIEFub3RoZXJTZWNvbmQgPiBDICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQyAmJgorICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiQWRkIEMuIiAmJgorCisgICAgIGdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKyAgICAgcm0gLWYgQiBDICYmCisKKyAgICAgZWNobyBUaGlyZCA+PiBBICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggQSAmJgorICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiTW9kaWZ5IEEuIiAmJgorCisgICAgIGV4cHIgIiQoZWNobyAkKGdpdCBjaGVycnkgbWFzdGVyIG15LXRvcGljLWJyYW5jaCkgKSIgOiAiKyBbXiBdKiArIC4qIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2sgdGhhdCBjaGVycnkgd2l0aCBsaW1pdCByZXR1cm5zIG9ubHkgdGhlIHRvcCBwYXRjaCdcCisgICAgJ2V4cHIgIiQoZWNobyAkKGdpdCBjaGVycnkgbWFzdGVyIG15LXRvcGljLWJyYW5jaCBteS10b3BpYy1icmFuY2heMSkgKSIgOiAiKyBbXiBdKiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZXJyeS1waWNrIG9uZSBvZiB0aGUgMiBwYXRjaGVzLCBhbmQgY2hlY2sgY2hlcnJ5IHJlY29nbml6ZWQgb25lIGFuZCBvbmx5IG9uZSBhcyBuZXcnIFwKKyAgICAnZ2l0IGNoZXJyeS1waWNrIG15LXRvcGljLWJyYW5jaF4wICYmCisgICAgIGVjaG8gJChnaXQgY2hlcnJ5IG1hc3RlciBteS10b3BpYy1icmFuY2gpICYmCisgICAgIGV4cHIgIiQoZWNobyAkKGdpdCBjaGVycnkgbWFzdGVyIG15LXRvcGljLWJyYW5jaCkgKSIgOiAiKyBbXiBdKiAtIC4qIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDEtcmV2ZXJ0LWNoZXJyeS1waWNrLnNoIGIvdC90MzUwMS1yZXZlcnQtY2hlcnJ5LXBpY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTFmM2JiYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDEtcmV2ZXJ0LWNoZXJyeS1waWNrLnNoCkBAIC0wLDAgKzEsMTQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjaGVycnktcGljayBhbmQgcmV2ZXJ0IHdpdGggcmVuYW1lcworCisgIC0tCisgICArIHJlbmFtZTI6IHJlbmFtZXMgb29wcyB0byBvcG9zCisgICsgIHJlbmFtZTE6IHJlbmFtZXMgb29wcyB0byBzcG9vCisgICsgIGFkZGVkOiAgIGFkZHMgZXh0cmEgbGluZSB0byBvb3BzCisgICsrIGluaXRpYWw6IGhhcyBsaW5lcyBpbiBvb3BzCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZm9yIGwgaW4gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8KKwlkbworCQllY2hvICRsJGwkbCRsJGwkbCRsJGwkbAorCWRvbmUgPm9vcHMgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBhZGQgb29wcyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyAiQWRkIGV4dHJhIGxpbmUgYXQgdGhlIGVuZCIgPj5vb3BzICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBhZGRlZCAmJgorCWdpdCB0YWcgYWRkZWQgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBtdiBvb3BzIHNwb28gJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZTEgJiYKKwlnaXQgdGFnIHJlbmFtZTEgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIGluaXRpYWwgJiYKKwlnaXQgbXYgb29wcyBvcG9zICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUyICYmCisJZ2l0IHRhZyByZW5hbWUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tbm9uc2Vuc2UnICcKKworCXBvcz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tbm9uc2Vuc2UgMj5tc2cgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEICIkcG9zIiAmJgorCXRlc3RfaTE4bmdyZXAgJ1tVdV1zYWdlOicgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCAtLW5vbnNlbnNlJyAnCisKKwlwb3M9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgLS1ub25zZW5zZSAyPm1zZyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgIiRwb3MiICYmCisJdGVzdF9pMThuZ3JlcCAnW1V1XXNhZ2U6JyBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYWZ0ZXIgcmVuYW1pbmcgYnJhbmNoJyAnCisKKwlnaXQgY2hlY2tvdXQgcmVuYW1lMiAmJgorCWdpdCBjaGVycnktcGljayBhZGRlZCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSByZW5hbWUyKSAmJgorCXRlc3QgLWYgb3BvcyAmJgorCWdyZXAgIkFkZCBleHRyYSBsaW5lIGF0IHRoZSBlbmQiIG9wb3MgJiYKKwlnaXQgcmVmbG9nIC0xIHwgZ3JlcCBjaGVycnktcGljaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhZnRlciByZW5hbWluZyBicmFuY2gnICcKKworCWdpdCBjaGVja291dCByZW5hbWUxICYmCisJZ2l0IHJldmVydCBhZGRlZCAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReKSA9ICQoZ2l0IHJldi1wYXJzZSByZW5hbWUxKSAmJgorCXRlc3QgLWYgc3BvbyAmJgorCSEgZ3JlcCAiQWRkIGV4dHJhIGxpbmUgYXQgdGhlIGVuZCIgc3BvbyAmJgorCWdpdCByZWZsb2cgLTEgfCBncmVwIHJldmVydAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIG9uIHN0YXQtZGlydHkgd29ya2luZyB0cmVlJyAnCisJZ2l0IGNsb25lIC4gY29weSAmJgorCSgKKwkJY2QgY29weSAmJgorCQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCQl0ZXN0LWNobXRpbWUgKzQwIG9vcHMgJiYKKwkJZ2l0IGNoZXJyeS1waWNrIGFkZGVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgZm9yYmlkZGVuIG9uIGRpcnR5IHdvcmtpbmcgdHJlZScgJworCisJZWNobyBjb250ZW50ID5leHRyYV9maWxlICYmCisJZ2l0IGFkZCBleHRyYV9maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBIRUFEIDI+ZXJyb3JzICYmCisJdGVzdF9pMThuZ3JlcCAiWW91ciBsb2NhbCBjaGFuZ2VzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICIgZXJyb3JzCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgb24gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiB1bmJvcm4gJiYKKwlnaXQgcm0gLS1jYWNoZWQgLXIgLiAmJgorCXJtIC1yZiAqICYmCisJZ2l0IGNoZXJyeS1waWNrIGluaXRpYWwgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IGluaXRpYWwgJiYKKwkhIHRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgIi0iIHRvIHBpY2sgZnJvbSBwcmV2aW91cyBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgdW5ib3JuICYmCisJdGVzdF9jb21taXQgdG8tcGljayBhY3R1YWwgY29udGVudCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLSAmJgorCWVjaG8gY29udGVudCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAiLSIgaXMgbWVhbmluZ2xlc3Mgd2l0aG91dCBjaGVja291dCcgJworCXRlc3RfY3JlYXRlX3JlcG8gYWZyZXNoICYmCisJKAorCQljZCBhZnJlc2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgIi0iIHdvcmtzIHdpdGggYXJndW1lbnRzJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUtYnJhbmNoICYmCisJdGVzdF9jb21taXQgY2hhbmdlIGFjdHVhbCBjaGFuZ2UgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIC1zIC0gJiYKKwllY2hvICJTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IiA+ZXhwZWN0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBeU2lnbmVkLW9mZi1ieTogPnNpZ25vZmYgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc2lnbm9mZiAmJgorCWVjaG8gY2hhbmdlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUwMi1jaGVycnktcGljay1tZXJnZS5zaCBiL3QvdDM1MDItY2hlcnJ5LXBpY2stbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTM3NTQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDItY2hlcnJ5LXBpY2stbWVyZ2Uuc2gKQEAgLTAsMCArMSwxMjMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVycnkgcGlja2luZyBhbmQgcmV2ZXJ0aW5nIGEgbWVyZ2UKKworCQliLS0tYworCSAgICAgICAvICAgLworCWluaXRpYWwtLS1hCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPkEgJiYKKwk+QiAmJgorCWdpdCBhZGQgQSBCICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwllY2hvIG5ldyBsaW5lID5BICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgdG8gQSIgQSAmJgorCWdpdCB0YWcgYSAmJgorCWdpdCBjaGVja291dCBzaWRlICYmCisJZWNobyBuZXcgbGluZSA+QiAmJgorCWdpdCBjb21taXQgLW0gImFkZCBsaW5lIHRvIEIiIEIgJiYKKwlnaXQgdGFnIGIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIHNpZGUgJiYKKwlnaXQgdGFnIGMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBhIG5vbi1tZXJnZSB3aXRoIC1tIHNob3VsZCBmYWlsJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGFeMCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtbSAxIGIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBhIC0tCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYSBtZXJnZSB3aXRob3V0IC1tIHNob3VsZCBmYWlsJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGFeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBjICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYSAtLQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGEgbWVyZ2UgKDEpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGFeMCAmJgorCWdpdCBjaGVycnktcGljayAtbSAxIGMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYSBtZXJnZSAoMiknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYl4wICYmCisJZ2l0IGNoZXJyeS1waWNrIC1tIDIgYyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayBhIG1lcmdlIHJlbGF0aXZlIHRvIG5vbmV4aXN0ZW50IHBhcmVudCBzaG91bGQgZmFpbCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBiXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLW0gMyBjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGEgbm9uLW1lcmdlIHdpdGggLW0gc2hvdWxkIGZhaWwnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgY14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCAtbSAxIGIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGEgbWVyZ2Ugd2l0aG91dCAtbSBzaG91bGQgZmFpbCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IGMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGEgbWVyZ2UgKDEpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGNeMCAmJgorCWdpdCByZXZlcnQgLW0gMSBjICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYSAtLQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBhIG1lcmdlICgyKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjXjAgJiYKKwlnaXQgcmV2ZXJ0IC1tIDIgYyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGIgLS0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYSBtZXJnZSByZWxhdGl2ZSB0byBub25leGlzdGVudCBwYXJlbnQgc2hvdWxkIGZhaWwnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgY14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCAtbSAzIGMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTAzLWNoZXJyeS1waWNrLXJvb3Quc2ggYi90L3QzNTAzLWNoZXJyeS1waWNrLXJvb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTI3ZjM5ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDMtY2hlcnJ5LXBpY2stcm9vdC5zaApAQCAtMCwwICsxLDc4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjaGVycnktcGlja2luZyAoYW5kIHJldmVydGluZykgYSByb290IGNvbW1pdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZWNobyBmaXJzdCA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IiAmJgorCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvc2Vjb25kICYmCisJcm0gLmdpdC9pbmRleCBmaWxlMSAmJgorCWVjaG8gc2Vjb25kID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIiAmJgorCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvdGhpcmQgJiYKKwlybSAuZ2l0L2luZGV4IGZpbGUyICYmCisJZWNobyB0aGlyZCA+IGZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInRoaXJkIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgcm9vdCBjb21taXQnICcKKworCWdpdCBjaGVja291dCBzZWNvbmReMCAmJgorCWdpdCBjaGVycnktcGljayBtYXN0ZXIgJiYKKwllY2hvIGZpcnN0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYSByb290IGNvbW1pdCcgJworCisJZ2l0IHJldmVydCBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgcm9vdCBjb21taXQgd2l0aCBhbiBleHRlcm5hbCBzdHJhdGVneScgJworCisJZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVzb2x2ZSBtYXN0ZXIgJiYKKwllY2hvIGZpcnN0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZTEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgYSByb290IGNvbW1pdCB3aXRoIGFuIGV4dGVybmFsIHN0cmF0ZWd5JyAnCisKKwlnaXQgcmV2ZXJ0IC0tc3RyYXRlZ3k9cmVzb2x2ZSBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHR3byByb290IGNvbW1pdHMnICcKKworCWVjaG8gZmlyc3QgPmV4cGVjdC5maWxlMSAmJgorCWVjaG8gc2Vjb25kID5leHBlY3QuZmlsZTIgJiYKKwllY2hvIHRoaXJkID5leHBlY3QuZmlsZTMgJiYKKworCWdpdCBjaGVja291dCBzZWNvbmReMCAmJgorCWdpdCBjaGVycnktcGljayBtYXN0ZXIgdGhpcmQgJiYKKworCXRlc3RfY21wIGV4cGVjdC5maWxlMSBmaWxlMSAmJgorCXRlc3RfY21wIGV4cGVjdC5maWxlMiBmaWxlMiAmJgorCXRlc3RfY21wIGV4cGVjdC5maWxlMyBmaWxlMyAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRF5eICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXl5eCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTA0LWNoZXJyeS1waWNrLXJlcmVyZS5zaCBiL3QvdDM1MDQtY2hlcnJ5LXBpY2stcmVyZXJlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2YTY0ODEKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTA0LWNoZXJyeS1waWNrLXJlcmVyZS5zaApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlcnJ5LXBpY2sgc2hvdWxkIHJlcmVyZSBmb3IgY29uZmxpY3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBmb28gPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1xIC1tIDEgJiYKKwllY2hvIGZvby1tYXN0ZXIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1xIC1tIDIgJiYKKworCWdpdCBjaGVja291dCAtYiBkZXYgSEVBRF4gJiYKKwllY2hvIGZvby1kZXYgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1xIC1tIDMgJiYKKwlnaXQgY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3RpbmcgbWVyZ2UnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpeHVwJyAnCisJZWNobyBmb28tZGV2ID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtcSAtbSA0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWVjaG8gZm9vLWRldiA+ZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGNvbmZsaWN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIG1hc3RlciAmJgorCXRlc3RfY21wIGV4cGVjdCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVjb25maWd1cmUnICcKKwlnaXQgY29uZmlnIHJlcmVyZS5lbmFibGVkIGZhbHNlICYmCisJZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBjb25mbGljdCB3aXRob3V0IHJlcmVyZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0X2NtcCBleHBlY3QgZm9vCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzUwNS1jaGVycnktcGljay1lbXB0eS5zaCBiL3QvdDM1MDUtY2hlcnJ5LXBpY2stZW1wdHkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmJkYzQ3YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDUtY2hlcnJ5LXBpY2stZW1wdHkuc2gKQEAgLTAsMCArMSwxMDEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGNoZXJyeS1waWNraW5nIGFuIGVtcHR5IGNvbW1pdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZWNobyBmaXJzdCA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGVtcHR5LWJyYW5jaCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZW1wdHkiICYmCisKKwllY2hvIHRoaXJkID4+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1tICIiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGVtcHR5LWJyYW5jaDIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImVtcHR5IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGFuIGVtcHR5IGNvbW1pdCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGVtcHR5LWJyYW5jaF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggbG9ja2ZpbGUgd2FzIHJlbW92ZWQnICcKKwl0ZXN0ICEgLWYgLmdpdC9pbmRleC5sb2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIGEgY29tbWl0IHdpdGggYW4gZW1wdHkgbWVzc2FnZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGVtcHR5LWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleCBsb2NrZmlsZSB3YXMgcmVtb3ZlZCcgJworCXRlc3QgISAtZiAuZ2l0L2luZGV4LmxvY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYSBjb21taXQgd2l0aCBhbiBlbXB0eSBtZXNzYWdlIHdpdGggLS1hbGxvdy1lbXB0eS1tZXNzYWdlJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgZW1wdHktYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGFuIGVtcHR5IG5vbi1mZiBjb21taXQgd2l0aG91dCAtLWFsbG93LWVtcHR5JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gZm91cnRoID4+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSAiZm91cnRoIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBlbXB0eS1icmFuY2gyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGFuIGVtcHR5IG5vbi1mZiBjb21taXQgd2l0aCAtLWFsbG93LWVtcHR5JyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayAtLWFsbG93LWVtcHR5IGVtcHR5LWJyYW5jaDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgd2l0aCAtLWtlZXAtcmVkdW5kYW50LWNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIC0ta2VlcC1yZWR1bmRhbnQtY29tbWl0cyBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBhIGNvbW1pdCB0aGF0IGJlY29tZXMgbm8tb3AgKHByZXApJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggZm9yayAmJgorCWVjaG8gZm9vID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZmlsZTIgb24gbWFzdGVyIiAmJgorCisJZ2l0IGNoZWNrb3V0IGZvcmsgJiYKKwllY2hvIGZvbyA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGZpbGUyIG9uIHRoZSBzaWRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBhIG5vLW9wIHdpdGhvdXQgLS1rZWVwLXJlZHVuZGFudCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZm9ya14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBhIG5vLW9wIHdpdGggLS1rZWVwLXJlZHVuZGFudCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZm9ya14wICYmCisJZ2l0IGNoZXJyeS1waWNrIC0ta2VlcC1yZWR1bmRhbnQtY29tbWl0cyBtYXN0ZXIgJiYKKwlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJZWNobyAiYWRkIGZpbGUyIG9uIG1hc3RlciIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTA2LWNoZXJyeS1waWNrLWZmLnNoIGIvdC90MzUwNi1jaGVycnktcGljay1mZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYjg4OWFjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwNi1jaGVycnktcGljay1mZi5zaApAQCAtMCwwICsxLDExNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2hlcnJ5LXBpY2tpbmcgd2l0aCAtLWZmIG9wdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gZmlyc3QgPiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCIgJiYKKwlnaXQgdGFnIGZpcnN0ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXIgJiYKKwllY2hvIHNlY29uZCA+PiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJzZWNvbmQiICYmCisJZ2l0IHRhZyBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgdXNpbmcgLS1mZiBmYXN0IGZvcndhcmRzJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1mZiBzZWNvbmQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzZWNvbmQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayBub3QgdXNpbmcgLS1mZiBkb2VzIG5vdCBmYXN0IGZvcndhcmRzJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgc2Vjb25kICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAhPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHNlY29uZCkiCisnCisKKyMKKyMgV2Ugc2V0dXAgdGhlIGZvbGxvd2luZyBncmFwaDoKKyMKKyMJICAgICAgQi0tLUMKKyMJICAgICAvICAgLworIwlmaXJzdC0tLUEKKyMKKyMgKFRoaXMgaGFzIGJlZW4gdGFrZW4gZnJvbSB0MzUwMi1jaGVycnktcGljay1tZXJnZS5zaCkKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHNldHVwJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwllY2hvIG5ldyBsaW5lID5BICYmCisJZ2l0IGFkZCBBICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgdG8gQSIgQSAmJgorCWdpdCB0YWcgQSAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIGZpcnN0ICYmCisJZWNobyBuZXcgbGluZSA+QiAmJgorCWdpdCBhZGQgQiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZCBsaW5lIHRvIEIiIEIgJiYKKwlnaXQgdGFnIEIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIHNpZGUgJiYKKwlnaXQgdGFnIEMgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbmV3IEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgYSBub24tbWVyZ2Ugd2l0aCAtLWZmIGFuZCAtbSBzaG91bGQgZmFpbCcgJworCWdpdCByZXNldCAtLWhhcmQgQSAtLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWZmIC1tIDEgQiAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEEgLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYSBtZXJnZSB3aXRoIC0tZmYgYnV0IHdpdGhvdXQgLW0gc2hvdWxkIGZhaWwnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEEgLS0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1mZiBDICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgQSAtLQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnkgcGljayB3aXRoIC0tZmYgYSBtZXJnZSAoMSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEEgLS0gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1mZiAtbSAxIEMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBDICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQykiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIHdpdGggLS1mZiBhIG1lcmdlICgyKScgJworCWdpdCByZXNldCAtLWhhcmQgQiAtLSAmJgorCWdpdCBjaGVycnktcGljayAtLWZmIC1tIDIgQyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEMgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5IHBpY2sgYSBtZXJnZSByZWxhdGl2ZSB0byBub25leGlzdGVudCBwYXJlbnQgd2l0aCAtLWZmIHNob3VsZCBmYWlsJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBCIC0tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tZmYgLW0gMyBDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrIGEgcm9vdCBjb21taXQgd2l0aCAtLWZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBmaXJzdCAtLSAmJgorCWdpdCBybSBmaWxlMSAmJgorCWVjaG8gZmlyc3QgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZmlsZTIiICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tZmYgZmlyc3QgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiID0gIjFkZjE5MmNkOGJjNThhMmIyNzVkODQyY2VkZTRkMjIxYWQ5MDAwZDEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tZmYgb24gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiB1bmJvcm4gJiYKKwlnaXQgcm0gLS1jYWNoZWQgLXIgLiAmJgorCXJtIC1yZiAqICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tZmYgZmlyc3QgJiYKKwl0ZXN0X2NtcF9yZXYgZmlyc3QgSEVBRAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDctY2hlcnJ5LXBpY2stY29uZmxpY3Quc2ggYi90L3QzNTA3LWNoZXJyeS1waWNrLWNvbmZsaWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdjNWFkMDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTA3LWNoZXJyeS1waWNrLWNvbmZsaWN0LnNoCkBAIC0wLDAgKzEsMzk1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjaGVycnktcGljayBhbmQgcmV2ZXJ0IHdpdGggY29uZmxpY3RzCisKKyAgLQorICArIHBpY2tlZDogcmV3cml0ZXMgZm9vIHRvIGMKKyAgKyBiYXNlOiByZXdyaXRlcyBmb28gdG8gYgorICArIGluaXRpYWw6IHdyaXRlcyBmb28gYXMgYSwgdW5yZWxhdGVkIGFzIHVucmVsYXRlZAorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitwcmlzdGluZV9kZXRhY2ggKCkgeworCWdpdCBjaGVja291dCAtZiAiJDFeMCIgJiYKKwlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCAmJgorCWdpdCBjbGVhbiAtZCAtZiAtZiAtcSAteAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWVjaG8gdW5yZWxhdGVkID51bnJlbGF0ZWQgJiYKKwlnaXQgYWRkIHVucmVsYXRlZCAmJgorCXRlc3RfY29tbWl0IGluaXRpYWwgZm9vIGEgJiYKKwl0ZXN0X2NvbW1pdCBiYXNlIGZvbyBiICYmCisJdGVzdF9jb21taXQgcGlja2VkIGZvbyBjICYmCisJdGVzdF9jb21taXQgLS1zaWdub2ZmIHBpY2tlZC1zaWduZWQgZm9vIGQgJiYKKwlnaXQgY29uZmlnIGFkdmljZS5kZXRhY2hlZGhlYWQgZmFsc2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY2hlcnJ5LXBpY2sgZG9lcyBub3QgYWR2YW5jZSBIRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCWhlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCW5ld2hlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwl0ZXN0ICIkaGVhZCIgPSAiJG5ld2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkdmljZSBmcm9tIGZhaWxlZCBjaGVycnktcGljaycgIgorCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwlwaWNrZWQ9XCQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHBpY2tlZCkgJiYKKwljYXQgPDwtRU9GID5leHBlY3RlZCAmJgorCWVycm9yOiBjb3VsZCBub3QgYXBwbHkgXCRwaWNrZWQuLi4gcGlja2VkCisJaGludDogYWZ0ZXIgcmVzb2x2aW5nIHRoZSBjb25mbGljdHMsIG1hcmsgdGhlIGNvcnJlY3RlZCBwYXRocworCWhpbnQ6IHdpdGggJ2dpdCBhZGQgPHBhdGhzPicgb3IgJ2dpdCBybSA8cGF0aHM+JworCWhpbnQ6IGFuZCBjb21taXQgdGhlIHJlc3VsdCB3aXRoICdnaXQgY29tbWl0JworCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgMj5hY3R1YWwgJiYKKworCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWR2aWNlIGZyb20gZmFpbGVkIGNoZXJyeS1waWNrIC0tbm8tY29tbWl0JyAiCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXBpY2tlZD1cJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcGlja2VkKSAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdGVkICYmCisJZXJyb3I6IGNvdWxkIG5vdCBhcHBseSBcJHBpY2tlZC4uLiBwaWNrZWQKKwloaW50OiBhZnRlciByZXNvbHZpbmcgdGhlIGNvbmZsaWN0cywgbWFyayB0aGUgY29ycmVjdGVkIHBhdGhzCisJaGludDogd2l0aCAnZ2l0IGFkZCA8cGF0aHM+JyBvciAnZ2l0IHJtIDxwYXRocz4nCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tbm8tY29tbWl0IHBpY2tlZCAyPmFjdHVhbCAmJgorCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY2hlcnJ5LXBpY2sgc2V0cyBDSEVSUllfUElDS19IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Y2Nlc3NmdWwgY2hlcnJ5LXBpY2sgZG9lcyBub3Qgc2V0IENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayBiYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tbm8tY29tbWl0IGRvZXMgbm90IHNldCBDSEVSUllfUElDS19IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1uby1jb21taXQgYmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayB3L2RpcnR5IHRyZWUgZG9lcyBub3Qgc2V0IENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gZm9vID4gZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVzb2x2ZSB3L2RpcnR5IHRyZWUgZG9lcyBub3Qgc2V0IENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gZm9vID4gZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVzb2x2ZSBiYXNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9DSEVSUllfUElDS19IRUxQIHN1cHByZXNzZXMgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJKAorCQlHSVRfQ0hFUlJZX1BJQ0tfSEVMUD0iYW5kIHRoZW4gZG8gc29tZXRoaW5nIGVsc2UiICYmCisJCWV4cG9ydCBHSVRfQ0hFUlJZX1BJQ0tfSEVMUCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVzZXQgY2xlYXJzIENIRVJSWV9QSUNLX0hFQUQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCWdpdCByZXNldCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjb21taXQgZG9lcyBub3QgY2xlYXIgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAmJgorCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBDSEVSUllfUElDS19IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhbmNlbGxlZCBjb21taXQgZG9lcyBub3QgY2xlYXIgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZWNobyByZXNvbHZlZCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQgJiYKKwkoCisJCUdJVF9FRElUT1I9ZmFsc2UgJiYKKwkJZXhwb3J0IEdJVF9FRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdAorCSkgJiYKKworCXRlc3RfY21wX3JldiBwaWNrZWQgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWNjZXNzZnVsIGNvbW1pdCBjbGVhcnMgQ0hFUlJZX1BJQ0tfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZWNobyByZXNvbHZlZCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNoZXJyeS1waWNrIHByb2R1Y2VzIGRpcnR5IGluZGV4JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC1xICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgY2hlcnJ5LXBpY2sgcmVnaXN0ZXJzIHBhcnRpY2lwYW50cyBpbiBpbmRleCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJeworCQlnaXQgY2hlY2tvdXQgYmFzZSAtLSBmb28gJiYKKwkJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZm9vICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsIC0tIGZvbyAmJgorCQlnaXQgbHMtZmlsZXMgLS1zdGFnZSBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IHBpY2tlZCAtLSBmb28gJiYKKwkJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZm9vCisJfSA+IHN0YWdlcyAmJgorCXNlZCAiCisJCTEgcy8gMAkvIDEJLworCQkyIHMvIDAJLyAyCS8KKwkJMyBzLyAwCS8gMwkvCisJIiA8IHN0YWdlcyA+IGV4cGVjdGVkICYmCisJZ2l0IHJlYWQtdHJlZSAtdSAtLXJlc2V0IEhFQUQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAtLXVubWVyZ2VkID4gYWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNoZXJyeS1waWNrIGRlc2NyaWJlcyBjb25mbGljdCBpbiB3b3JrIHRyZWUnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWNhdCA8PC1FT0YgPiBleHBlY3RlZCAmJgorCTw8PDw8PDwgSEVBRAorCWEKKwk9PT09PT09CisJYworCT4+Pj4+Pj4gb2JqaWQgcGlja2VkCisJRU9GCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisKKwlzZWQgInMvW2EtZjAtOV0qXC5cLlwuL29iamlkLyIgZm9vID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYzIC1tIHN0eWxlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwljYXQgPDwtRU9GID4gZXhwZWN0ZWQgJiYKKwk8PDw8PDw8IEhFQUQKKwlhCisJfHx8fHx8fCBwYXJlbnQgb2Ygb2JqaWQgcGlja2VkCisJYgorCT09PT09PT0KKwljCisJPj4+Pj4+PiBvYmppZCBwaWNrZWQKKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKworCXNlZCAicy9bYS1mMC05XSpcLlwuXC4vb2JqaWQvIiBmb28gPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGFsc28gaGFuZGxlcyBjb25mbGljdHMgc2FuZWx5JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0IG1lcmdlLmNvbmZsaWN0c3R5bGUgJiYKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWNhdCA8PC1FT0YgPiBleHBlY3RlZCAmJgorCTw8PDw8PDwgSEVBRAorCWEKKwk9PT09PT09CisJYgorCT4+Pj4+Pj4gcGFyZW50IG9mIG9iamlkIHBpY2tlZAorCUVPRgorCXsKKwkJZ2l0IGNoZWNrb3V0IHBpY2tlZCAtLSBmb28gJiYKKwkJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZm9vICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsIC0tIGZvbyAmJgorCQlnaXQgbHMtZmlsZXMgLS1zdGFnZSBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IGJhc2UgLS0gZm9vICYmCisJCWdpdCBscy1maWxlcyAtLXN0YWdlIGZvbworCX0gPiBzdGFnZXMgJiYKKwlzZWQgIgorCQkxIHMvIDAJLyAxCS8KKwkJMiBzLyAwCS8gMgkvCisJCTMgcy8gMAkvIDMJLworCSIgPCBzdGFnZXMgPiBleHBlY3RlZC1zdGFnZXMgJiYKKwlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCAmJgorCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCW5ld2hlYWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgLS11bm1lcmdlZCA+IGFjdHVhbC1zdGFnZXMgJiYKKworCXRlc3QgIiRoZWFkIiA9ICIkbmV3aGVhZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zdGFnZXMgYWN0dWFsLXN0YWdlcyAmJgorCXNlZCAicy9bYS1mMC05XSpcLlwuXC4vb2JqaWQvIiBmb28gPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIHJldmVydCBzZXRzIFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCXRlc3RfY21wX3JldiBwaWNrZWQgUkVWRVJUX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VjY2Vzc2Z1bCByZXZlcnQgZG9lcyBub3Qgc2V0IFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGJhc2UgJiYKKwlnaXQgcmV2ZXJ0IGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFJFVkVSVF9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCAtLW5vLWNvbW1pdCBzZXRzIFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGJhc2UgJiYKKwlnaXQgcmV2ZXJ0IC0tbm8tY29tbWl0IGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgYmFzZSBSRVZFUlRfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgdy9kaXJ0eSB0cmVlIGRvZXMgbm90IHNldCBSRVZFUlRfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBiYXNlICYmCisJZWNobyBmb28gPiBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IGJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IENIRVJSWV9QSUNLX0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IFJFVkVSVF9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9DSEVSUllfUElDS19IRUxQIGRvZXMgbm90IHN1cHByZXNzIFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwkoCisJCUdJVF9DSEVSUllfUElDS19IRUxQPSJhbmQgdGhlbiBkbyBzb21ldGhpbmcgZWxzZSIgJiYKKwkJR0lUX1JFVkVSVF9IRUxQPSJhbmQgdGhlbiBkbyBzb21ldGhpbmcgZWxzZSwgYWdhaW4iICYmCisJCWV4cG9ydCBHSVRfQ0hFUlJZX1BJQ0tfSEVMUCBHSVRfUkVWRVJUX0hFTFAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBwaWNrZWQKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDSEVSUllfUElDS19IRUFEICYmCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBSRVZFUlRfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmVzZXQgY2xlYXJzIFJFVkVSVF9IRUFEJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2ZXJ0IHBpY2tlZCAmJgorCWdpdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgUkVWRVJUX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNvbW1pdCBkb2VzIG5vdCBjbGVhciBSRVZFUlRfSEVBRCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCBwaWNrZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0ICYmCisJdGVzdF9jbXBfcmV2IHBpY2tlZCBSRVZFUlRfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgY29uZmxpY3QsIGRpZmYzIC1tIHN0eWxlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwljYXQgPDwtRU9GID4gZXhwZWN0ZWQgJiYKKwk8PDw8PDw8IEhFQUQKKwlhCisJfHx8fHx8fCBvYmppZCBwaWNrZWQKKwljCisJPT09PT09PQorCWIKKwk+Pj4+Pj4+IHBhcmVudCBvZiBvYmppZCBwaWNrZWQKKwlFT0YKKworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgcGlja2VkICYmCisKKwlzZWQgInMvW2EtZjAtOV0qXC5cLlwuL29iamlkLyIgZm9vID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBjaGVycnktcGljayBkb2VzIG5vdCBmb3JnZXQgLXMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtcyBwaWNrZWQgJiYKKwl0ZXN0X2kxOG5ncmVwIC1lICJTaWduZWQtb2ZmLWJ5IiAuZ2l0L01FUkdFX01TRworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgYWZ0ZXIgZmFpbGVkIGNoZXJyeS1waWNrIGRvZXMgbm90IGFkZCBkdXBsaWNhdGVkIC1zJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLXMgcGlja2VkLXNpZ25lZCAmJgorCWdpdCBjb21taXQgLWEgLXMgJiYKKwl0ZXN0ICQoZ2l0IHNob3cgLXMgfGdyZXAgLWMgIlNpZ25lZC1vZmYtYnkiKSA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGFmdGVyIGZhaWxlZCBjaGVycnktcGljayBhZGRzIC1zIGF0IHRoZSByaWdodCBwbGFjZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCisJZ2l0IGNvbW1pdCAtYSAtcyAmJgorCisJIyBEbyBTLW8tYiBhbmQgQ29uZmxpY3RzIGFwcGVhciBpbiB0aGUgcmlnaHQgb3JkZXI/CisJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCVNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwkjIENvbmZsaWN0czoKKwlFT0YKKwlncmVwIC1lICJeIyBDb25mbGljdHM6IiAtZSAnXlNpZ25lZC1vZmYtYnknIDwuZ2l0L0NPTU1JVF9FRElUTVNHID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlwaWNrZWQKKworCVNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlFT0YKKworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWFtZW5kIC1zIHBsYWNlcyB0aGUgc2lnbi1vZmYgYXQgdGhlIHJpZ2h0IHBsYWNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisKKwkjIGVtdWxhdGUgb2xkLXN0eWxlIGNvbmZsaWN0cyBibG9jaworCW12IC5naXQvTUVSR0VfTVNHIC5naXQvTUVSR0VfTVNHKyAmJgorCXNlZCAtZSAiL14jIENvbmZsaWN0czovLFwkcy9eIyAqLy8iIDwuZ2l0L01FUkdFX01TRysgPi5naXQvTUVSR0VfTVNHICYmCisKKwlnaXQgY29tbWl0IC1hICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1zICYmCisKKwkjIERvIFMtby1iIGFuZCBDb25mbGljdHMgYXBwZWFyIGluIHRoZSByaWdodCBvcmRlcj8KKwljYXQgPDwtXEVPRiA+ZXhwZWN0ICYmCisJU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCUNvbmZsaWN0czoKKwlFT0YKKwlncmVwIC1lICJeQ29uZmxpY3RzOiIgLWUgJ15TaWduZWQtb2ZmLWJ5JyA8LmdpdC9DT01NSVRfRURJVE1TRyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MDgtY2hlcnJ5LXBpY2stbWFueS1jb21taXRzLnNoIGIvdC90MzUwOC1jaGVycnktcGljay1tYW55LWNvbW1pdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjQ1NzMzMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MDgtY2hlcnJ5LXBpY2stbWFueS1jb21taXRzLnNoCkBAIC0wLDAgKzEsMTk2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjaGVycnktcGlja2luZyBtYW55IGNvbW1pdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19oZWFkX2RpZmZlcnNfZnJvbSgpIHsKKwkhIHRlc3RfY21wX3JldiBIRUFEICIkMSIKK30KKworY2hlY2tfaGVhZF9lcXVhbHMoKSB7CisJdGVzdF9jbXBfcmV2IEhFQUQgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGZpcnN0ID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QiICYmCisJZ2l0IHRhZyBmaXJzdCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyICYmCisJZm9yIHZhbCBpbiBzZWNvbmQgdGhpcmQgZm91cnRoCisJZG8KKwkJZWNobyAkdmFsID4+IGZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIiR2YWwiICYmCisJCWdpdCB0YWcgJHZhbAorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgZmlyc3QuLmZvdXJ0aCB3b3JrcycgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIGZpcnN0Li5mb3VydGggJiYKKwlnaXQgZGlmZiAtLXF1aWV0IG90aGVyICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIG90aGVyICYmCisJY2hlY2tfaGVhZF9kaWZmZXJzX2Zyb20gZm91cnRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHRocmVlIG9uZSB0d28gd29ya3MnICcKKwlnaXQgY2hlY2tvdXQgLWYgZmlyc3QgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJZ2l0IGNoZXJyeS1waWNrIHRocmVlIG9uZSB0d28gJiYKKwlnaXQgZGlmZiAtLXF1aWV0IHRocmVlICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIHRocmVlICYmCisJdGVzdCAiJChnaXQgbG9nIC0tcmV2ZXJzZSAtLWZvcm1hdD0lcyBmaXJzdC4uKSIgPSAidGhyZWUKK29uZQordHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayB0aHJlZSBvbmUgdHdvOiBmYWlscycgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHRocmVlIG9uZSB0d286CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHB1dCB0byBrZWVwIHVzZXIgZW50ZXJ0YWluZWQgZHVyaW5nIG11bHRpLXBpY2snICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlbbWFzdGVyIE9CSklEXSBzZWNvbmQKKwkgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCSBEYXRlOiBUaHUgQXByIDcgMTU6MTQ6MTMgMjAwNSAtMDcwMAorCSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKwlbbWFzdGVyIE9CSklEXSB0aGlyZAorCSBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJIERhdGU6IFRodSBBcHIgNyAxNToxNToxMyAyMDA1IC0wNzAwCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCVttYXN0ZXIgT0JKSURdIGZvdXJ0aAorCSBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJIERhdGU6IFRodSBBcHIgNyAxNToxNjoxMyAyMDA1IC0wNzAwCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCUVPRgorCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgZmlyc3QuLmZvdXJ0aCA+YWN0dWFsICYmCisJc2VkIC1lICJzLyRfeDA1WzAtOWEtZl1bMC05YS1mXS9PQkpJRC8iIDxhY3R1YWwgPmFjdHVhbC5mdXp6eSAmJgorCXRlc3RfbGluZV9jb3VudCAtZ2UgMyBhY3R1YWwuZnV6enkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsLmZ1enp5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tc3RyYXRlZ3kgcmVzb2x2ZSBmaXJzdC4uZm91cnRoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1zdHJhdGVneSByZXNvbHZlIGZpcnN0Li5mb3VydGggJiYKKwlnaXQgZGlmZiAtLXF1aWV0IG90aGVyICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIG90aGVyICYmCisJY2hlY2tfaGVhZF9kaWZmZXJzX2Zyb20gZm91cnRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ291dHB1dCBkdXJpbmcgbXVsdGktcGljayBpbmRpY2F0ZXMgbWVyZ2Ugc3RyYXRlZ3knICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlUcnlpbmcgc2ltcGxlIG1lcmdlLgorCVttYXN0ZXIgT0JKSURdIHNlY29uZAorCSBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJIERhdGU6IFRodSBBcHIgNyAxNToxNDoxMyAyMDA1IC0wNzAwCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCVRyeWluZyBzaW1wbGUgbWVyZ2UuCisJW21hc3RlciBPQkpJRF0gdGhpcmQKKwkgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCSBEYXRlOiBUaHUgQXByIDcgMTU6MTU6MTMgMjAwNSAtMDcwMAorCSAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKwlUcnlpbmcgc2ltcGxlIG1lcmdlLgorCVttYXN0ZXIgT0JKSURdIGZvdXJ0aAorCSBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJIERhdGU6IFRodSBBcHIgNyAxNToxNjoxMyAyMDA1IC0wNzAwCisJIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorCUVPRgorCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1zdHJhdGVneSByZXNvbHZlIGZpcnN0Li5mb3VydGggPmFjdHVhbCAmJgorCXNlZCAtZSAicy8kX3gwNVswLTlhLWZdWzAtOWEtZl0vT0JKSUQvIiA8YWN0dWFsID5hY3R1YWwuZnV6enkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsLmZ1enp5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC0tZmYgZmlyc3QuLmZvdXJ0aCB3b3JrcycgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tZmYgZmlyc3QuLmZvdXJ0aCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgb3RoZXIgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgb3RoZXIgJiYKKwljaGVja19oZWFkX2VxdWFscyBmb3VydGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLW4gZmlyc3QuLmZvdXJ0aCB3b3JrcycgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNoZXJyeS1waWNrIC1uIGZpcnN0Li5mb3VydGggJiYKKwlnaXQgZGlmZiAtLXF1aWV0IG90aGVyICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1xdWlldCBvdGhlciAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBmaXJzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnQgZmlyc3QuLmZvdXJ0aCB3b3JrcycgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZvdXJ0aCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXZlcnQgZmlyc3QuLmZvdXJ0aCAmJgorCWdpdCBkaWZmIC0tcXVpZXQgZmlyc3QgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0IGZpcnN0ICYmCisJZ2l0IGRpZmYgLS1xdWlldCBIRUFEIGZpcnN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCBeZmlyc3QgZm91cnRoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZm91cnRoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJldmVydCBeZmlyc3QgZm91cnRoICYmCisJZ2l0IGRpZmYgLS1xdWlldCBmaXJzdCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgZmlyc3QgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgZmlyc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IGZvdXJ0aCBmb3VydGh+MSBmb3VydGh+MiB3b3JrcycgJworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGZvdXJ0aCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXZlcnQgZm91cnRoIGZvdXJ0aH4xIGZvdXJ0aH4yICYmCisJZ2l0IGRpZmYgLS1xdWlldCBmaXJzdCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgZmlyc3QgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgZmlyc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLTMgZm91cnRoIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLTMgZm91cnRoICYmCisJZ2l0IGRpZmYgLS1xdWlldCBvdGhlciAmJgorCWdpdCBkaWZmIC0tcXVpZXQgSEVBRCBvdGhlciAmJgorCWNoZWNrX2hlYWRfZGlmZmVyc19mcm9tIGZvdXJ0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtLXN0ZGluIHdvcmtzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmV2LWxpc3QgLS1yZXZlcnNlIGZpcnN0Li5mb3VydGggfCBnaXQgY2hlcnJ5LXBpY2sgLS1zdGRpbiAmJgorCWdpdCBkaWZmIC0tcXVpZXQgb3RoZXIgJiYKKwlnaXQgZGlmZiAtLXF1aWV0IEhFQUQgb3RoZXIgJiYKKwljaGVja19oZWFkX2RpZmZlcnNfZnJvbSBmb3VydGgKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTA5LWNoZXJyeS1waWNrLW1lcmdlLWRmLnNoIGIvdC90MzUwOS1jaGVycnktcGljay1tZXJnZS1kZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZTViMzk0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzUwOS1jaGVycnktcGljay1tZXJnZS1kZi5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY2hlcnJ5LXBpY2sgd2l0aCBkaXJlY3RvcnkvZmlsZSBjb25mbGljdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSW5pdGlhbGl6ZSByZXBvc2l0b3J5JyAnCisJbWtkaXIgYSAmJgorCT5hL2YgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2V0dXAgcmVuYW1lIGFjcm9zcyBwYXRocyBlYWNoIGJlbG93IEQvRiBjb25mbGljdHMnICcKKwlta2RpciBiICYmCisJdGVzdF9sbl9zX2FkZCAuLi9hIGIvYSAmJgorCWdpdCBjb21taXQgLW0gYiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgorCXJtIGIvYSAmJgorCWdpdCBtdiBhIGIvYSAmJgorCXRlc3RfbG5fc19hZGQgYi9hIGEgJiYKKwlnaXQgY29tbWl0IC1tIHN3YXAgJiYKKworCT5mMSAmJgorCWdpdCBhZGQgZjEgJiYKKwlnaXQgY29tbWl0IC1tIGYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZXJyeS1waWNrIHN1Y2NlZWRzIHdpdGggcmVuYW1lIGFjcm9zcyBEL0YgY29uZmxpY3RzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWdpdCBjaGVycnktcGljayBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU2V0dXAgcmVuYW1lIHdpdGggZmlsZSBvbiBvbmUgc2lkZSBtYXRjaGluZyBkaXJlY3RvcnkgbmFtZSBvbiBvdGhlcicgJworCWdpdCBjaGVja291dCAtLW9ycGhhbiBuaWNrLXRlc3RjYXNlICYmCisJZ2l0IHJtIC1yZiAuICYmCisKKwk+ZW1wdHkgJiYKKwlnaXQgYWRkIGVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSAiRW1wdHkgZmlsZSIgJiYKKworCWdpdCBjaGVja291dCAtYiBzaW1wbGUgJiYKKwltdiBlbXB0eSBmaWxlICYmCisJbWtkaXIgZW1wdHkgJiYKKwltdiBmaWxlIGVtcHR5ICYmCisJZ2l0IGFkZCBlbXB0eS9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiRW1wdHkgZmlsZSB1bmRlciBlbXB0eSBkaXIiICYmCisKKwllY2hvIGNvbnRlbnQgPm5ld2ZpbGUgJiYKKwlnaXQgYWRkIG5ld2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJOZXcgZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlcnJ5LXBpY2sgc3VjY2VlZHMgd2l0aCB3YXNfYV9kaXIvZmlsZSAtPiB3YXNfYV9kaXIgKHJlc29sdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtcSBuaWNrLXRlc3RjYXNlXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1zdHJhdGVneT1yZXNvbHZlIHNpbXBsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVycnktcGljayBzdWNjZWVkcyB3aXRoIHdhc19hX2Rpci9maWxlIC0+IHdhc19hX2RpciAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLXEgbmljay10ZXN0Y2FzZV4wICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHNpbXBsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR1cCByZW5hbWUgd2l0aCBmaWxlIG9uIG9uZSBzaWRlIG1hdGNoaW5nIGRpZmZlcmVudCBkaXJuYW1lIG9uIG90aGVyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBtZXJnZW1lICYmCisJZ2l0IHJtIC1yZiAuICYmCisKKwlta2RpciBzdWIgJiYKKwlta2RpciBvdGhlcnN1YiAmJgorCWVjaG8gY29udGVudCA+IHN1Yi9maWxlICYmCisJZWNobyBmb28gPiBvdGhlcnN1Yi93aGF0ZXZlciAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJDb21tb24gY29tbWl0IiAmJgorCisJZ2l0IHJtIC1yZiBvdGhlcnN1YiAmJgorCWdpdCBtdiBzdWIvZmlsZSBvdGhlcnN1YiAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1pdCB0byBtZXJnZSIgJiYKKworCWdpdCBjaGVja291dCAtYiBuZXdoZWFkIG1lcmdlbWV+MSAmJgorCT5pbmRlcGVuZGVudC1jaGFuZ2UgJiYKKwlnaXQgYWRkIGluZGVwZW5kZW50LWNoYW5nZSAmJgorCWdpdCBjb21taXQgLW0gIkNvbXBsZXRlbHkgdW5yZWxhdGVkIGNoYW5nZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlcnJ5LXBpY2sgd2l0aCByZW5hbWUgdG8gZGlmZmVyZW50IEQvRiBjb25mbGljdCBzdWNjZWVkcyAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1xIG5ld2hlYWReMCAmJgorCWdpdCBjaGVycnktcGljayAtLXN0cmF0ZWd5PXJlc29sdmUgbWVyZ2VtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVycnktcGljayB3aXRoIHJlbmFtZSB0byBkaWZmZXJlbnQgRC9GIGNvbmZsaWN0IHN1Y2NlZWRzIChyZWN1cnNpdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtcSBuZXdoZWFkXjAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1zdHJhdGVneT1yZWN1cnNpdmUgbWVyZ2VtZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM1MTAtY2hlcnJ5LXBpY2stc2VxdWVuY2Uuc2ggYi90L3QzNTEwLWNoZXJyeS1waWNrLXNlcXVlbmNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdiN2E4OWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTEwLWNoZXJyeS1waWNrLXNlcXVlbmNlLnNoCkBAIC0wLDAgKzEsNTE0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBjaGVycnktcGljayBjb250aW51YXRpb24gZmVhdHVyZXMKKworICsgIGNvbmZsaWN0aW5nOiByZXdyaXRlcyB1bnJlbGF0ZWQgdG8gY29uZmxpY3RpbmcKKyAgKyB5ZXRhbm90aGVycGljazogcmV3cml0ZXMgZm9vIHRvIGUKKyAgKyBhbm90aGVycGljazogcmV3cml0ZXMgZm9vIHRvIGQKKyAgKyBwaWNrZWQ6IHJld3JpdGVzIGZvbyB0byBjCisgICsgdW5yZWxhdGVkcGljazogcmV3cml0ZXMgdW5yZWxhdGVkIHRvIHJlYWxseXVucmVsYXRlZAorICArIGJhc2U6IHJld3JpdGVzIGZvbyB0byBiCisgICsgaW5pdGlhbDogd3JpdGVzIGZvbyBhcyBhLCB1bnJlbGF0ZWQgYXMgdW5yZWxhdGVkCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgUmVwZWF0IGZpcnN0IG1hdGNoIDEwIHRpbWVzCitfcjEwPSdcMVwxXDFcMVwxXDFcMVwxXDFcMScKKworcHJpc3RpbmVfZGV0YWNoICgpIHsKKwlnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0ICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkMV4wIiAmJgorCWdpdCByZWFkLXRyZWUgLXUgLS1yZXNldCBIRUFEICYmCisJZ2l0IGNsZWFuIC1kIC1mIC1mIC1xIC14Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgYWR2aWNlLmRldGFjaGVkaGVhZCBmYWxzZSAmJgorCWVjaG8gdW5yZWxhdGVkID51bnJlbGF0ZWQgJiYKKwlnaXQgYWRkIHVucmVsYXRlZCAmJgorCXRlc3RfY29tbWl0IGluaXRpYWwgZm9vIGEgJiYKKwl0ZXN0X2NvbW1pdCBiYXNlIGZvbyBiICYmCisJdGVzdF9jb21taXQgdW5yZWxhdGVkcGljayB1bnJlbGF0ZWQgcmVhbGx5dW5yZWxhdGVkICYmCisJdGVzdF9jb21taXQgcGlja2VkIGZvbyBjICYmCisJdGVzdF9jb21taXQgYW5vdGhlcnBpY2sgZm9vIGQgJiYKKwl0ZXN0X2NvbW1pdCB5ZXRhbm90aGVycGljayBmb28gZSAmJgorCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgY29uZmxpY3RpbmcgdW5yZWxhdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHBlcnNpc3RzIGRhdGEgb24gZmFpbHVyZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayAtcyBiYXNlLi5hbm90aGVycGljayAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9zZXF1ZW5jZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3NlcXVlbmNlci9oZWFkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9zZXF1ZW5jZXIvdG9kbyAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL29wdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgbWlkLWNoZXJyeS1waWNrLXNlcXVlbmNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X2NtcF9yZXYgcGlja2VkIENIRVJSWV9QSUNLX0hFQUQgJiYKKwkjICJvb3BzLCBJIGZvcmdvdCB0aGF0IHRoZXNlIHBhdGNoZXMgcmVseSBvbiB0aGUgY2hhbmdlIGZyb20gYmFzZSIKKwlnaXQgY2hlY2tvdXQgSEVBRCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgYmFzZSAmJgorCWdpdCBjaGVycnktcGljayBwaWNrZWQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIGFub3RoZXJwaWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHBlcnNpc3RzIG9wdHMgY29ycmVjdGx5JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgY2hlcnJ5LXBpY2sgLXMgLW0gMSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSAtWCBwYXRpZW5jZSAtWCBvdXJzIGluaXRpYWwuLmFub3RoZXJwaWNrICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfcGF0aF9pc19maWxlIC5naXQvc2VxdWVuY2VyL2hlYWQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdC9zZXF1ZW5jZXIvb3B0cyAmJgorCWVjaG8gInRydWUiID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZmlsZT0uZ2l0L3NlcXVlbmNlci9vcHRzIC0tZ2V0LWFsbCBvcHRpb25zLnNpZ25vZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwllY2hvICIxIiA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdC9zZXF1ZW5jZXIvb3B0cyAtLWdldC1hbGwgb3B0aW9ucy5tYWlubGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWVjaG8gInJlY3Vyc2l2ZSIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1maWxlPS5naXQvc2VxdWVuY2VyL29wdHMgLS1nZXQtYWxsIG9wdGlvbnMuc3RyYXRlZ3kgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcGF0aWVuY2UKKwlvdXJzCisJRU9GCisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdC9zZXF1ZW5jZXIvb3B0cyAtLWdldC1hbGwgb3B0aW9ucy5zdHJhdGVneS1vcHRpb24gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgY2xlYW5zIHVwIHNlcXVlbmNlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayBpbml0aWFsLi5waWNrZWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXF1aXQgZG9lcyBub3QgY29tcGxhaW4gd2hlbiBubyBjaGVycnktcGljayBpcyBpbiBwcm9ncmVzcycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tcXVpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFib3J0IHJlcXVpcmVzIGNoZXJyeS1waWNrIGluIHByb2dyZXNzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXF1aXQgY2xlYW5zIHVwIHNlcXVlbmNlciBzdGF0ZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5waWNrZWQgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9zZXF1ZW5jZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1xdWl0IGtlZXBzIEhFQUQgYW5kIGNvbmZsaWN0ZWQgaW5kZXggaW50YWN0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCXVucmVsYXRlZAorCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlmb28KKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCXVucmVsYXRlZAorCUVPRgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4ucGlja2VkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tcXVpdCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kX3g0MC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYm9ydCB0byBjYW5jZWwgbXVsdGlwbGUgY2hlcnJ5LXBpY2snICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFib3J0IHRvIGNhbmNlbCBzaW5nbGUgY2hlcnJ5LXBpY2snICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLS1hYm9ydCB0byBjYW5jZWwgbXVsdGlwbGUgcmV2ZXJ0JyAnCisJcHJpc3RpbmVfZGV0YWNoIGFub3RoZXJwaWNrICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCByZXZlcnQgYmFzZS4ucGlja2VkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfY21wX3JldiBhbm90aGVycGljayBIRUFEICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVydCAtLWFib3J0IHdvcmtzLCB0b28nICcKKwlwcmlzdGluZV9kZXRhY2ggYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHJldmVydCBiYXNlLi5waWNrZWQgJiYKKwlnaXQgcmV2ZXJ0IC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfY21wX3JldiBhbm90aGVycGljayBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQgdG8gY2FuY2VsIHNpbmdsZSByZXZlcnQnICcKKwlwcmlzdGluZV9kZXRhY2ggYW5vdGhlcnBpY2sgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHJldmVydCBwaWNrZWQgJiYKKwlnaXQgcmV2ZXJ0IC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfY21wX3JldiBhbm90aGVycGljayBIRUFEICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQga2VlcHMgdW5yZWxhdGVkIGNoYW5nZSwgZWFzeSBjYXNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIHVucmVsYXRlZHBpY2sgJiYKKwllY2hvIGNoYW5nZWQgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgcGlja2VkLi55ZXRhbm90aGVycGljayAmJgorCWVjaG8gY2hhbmdlZCA+dW5yZWxhdGVkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdW5yZWxhdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQgcmVmdXNlcyB0byBjbG9iYmVyIHVucmVsYXRlZCBjaGFuZ2UsIGhhcmRlciBjYXNlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwllY2hvIGNoYW5nZWQgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvIGNoYW5nZWQgPnVucmVsYXRlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtLWFib3J0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVucmVsYXRlZCAmJgorCWdpdCByZXYtbGlzdCBIRUFEID5sb2cgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGxvZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwlnaXQgY2hlY2tvdXQgdW5yZWxhdGVkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIHN0aWxsIHdyaXRlcyBzZXF1ZW5jZXIgc3RhdGUgd2hlbiBvbmUgY29tbWl0IGlzIGxlZnQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4ucGlja2VkICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3NlcXVlbmNlciAmJgorCWVjaG8gInJlc29sdmVkIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJF94NDAvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCWZvbworCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQl1bnJlbGF0ZWQKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZm9vCisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQl1bnJlbGF0ZWQKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYWJvcnQgYWZ0ZXIgbGFzdCBjb21taXQgaW4gc2VxdWVuY2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4ucGlja2VkICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgZG9lcyBub3QgaW1wbGljaXRseSBzdG9tcCBhbiBleGlzdGluZyBvcGVyYXRpb24nICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwl0ZXN0LWNobXRpbWUgLXYgKzAgLmdpdC9zZXF1ZW5jZXIgPmV4cGVjdCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayB1bnJlbGF0ZWRwaWNrICYmCisJdGVzdC1jaG10aW1lIC12ICswIC5naXQvc2VxdWVuY2VyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgY29tcGxhaW5zIHdoZW4gbm8gY2hlcnJ5LXBpY2sgaXMgaW4gcHJvZ3Jlc3MnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMTI4IGdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgY29tcGxhaW5zIHdoZW4gdGhlcmUgYXJlIHVucmVzb2x2ZWQgY29uZmxpY3RzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBvZiBzaW5nbGUgY2hlcnJ5LXBpY2snICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gYyA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIHBpY2tlZCAmJgorCWVjaG8gYyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCisJdGVzdF9jbXAgZXhwZWN0IGZvbyAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUReICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIG9mIHNpbmdsZSByZXZlcnQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWVjaG8gcmVzb2x2ZWQgPmV4cGVjdCAmJgorCWVjaG8gIlJldmVydCBcInBpY2tlZFwiIiA+ZXhwZWN0Lm1zZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXZlcnQgcGlja2VkICYmCisJZWNobyByZXNvbHZlZCA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfY21wIGV4cGVjdCBmb28gJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEXiAmJgorCWdpdCBkaWZmLXRyZWUgLXMgLS1wcmV0dHk9dGZvcm1hdDolcyBIRUFEID5tc2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QubXNnIG1zZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgUkVWRVJUX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBhZnRlciByZXNvbHZpbmcgY29uZmxpY3RzJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwllY2hvIGQgPmV4cGVjdCAmJgorCWNhdCA+ZXhwZWN0LmxvZyA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCWZvbworCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQlmb28KKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JdW5yZWxhdGVkCisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWZvbworCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJdW5yZWxhdGVkCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyBjID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJF94NDAvT0JKSUQvZyIKKwl9ID5hY3R1YWwubG9nICYmCisJdGVzdF9jbXAgZXhwZWN0IGZvbyAmJgorCXRlc3RfY21wIGV4cGVjdC5sb2cgYWN0dWFsLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIGFmdGVyIHJlc29sdmluZyBjb25mbGljdHMgYW5kIGNvbW1pdHRpbmcnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJjIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRfeDQwL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEwMDY0NCAxMDA2NDQgT0JKSUQgT0JKSUQgTQlmb28KKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZm9vCisJT0JKSUQKKwk6MTAwNjQ0IDEwMDY0NCBPQkpJRCBPQkpJRCBNCXVucmVsYXRlZAorCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlmb28KKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCXVucmVsYXRlZAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSBhc2tzIGZvciBoZWxwIGFmdGVyIHJlc29sdmluZyBwYXRjaCB0byBuaWwnICcKKwlwcmlzdGluZV9kZXRhY2ggY29uZmxpY3RpbmcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgaW5pdGlhbC4ucGlja2VkICYmCisKKwl0ZXN0X2NtcF9yZXYgdW5yZWxhdGVkcGljayBDSEVSUllfUElDS19IRUFEICYmCisJZ2l0IGNoZWNrb3V0IEhFQUQgLS0gdW5yZWxhdGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgMj5tc2cgJiYKKwl0ZXN0X2kxOG5ncmVwICJUaGUgcHJldmlvdXMgY2hlcnJ5LXBpY2sgaXMgbm93IGVtcHR5IiBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IGFkdmljZSBhbmQgc2tpcCBuaWwgcGF0Y2gnICcKKwlwcmlzdGluZV9kZXRhY2ggY29uZmxpY3RpbmcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgaW5pdGlhbC4ucGlja2VkICYmCisKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSB1bnJlbGF0ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCWdpdCByZXNldCAmJgorCWdpdCBjaGVycnktcGljayAtLWNvbnRpbnVlICYmCisKKwlnaXQgcmV2LWxpc3QgaW5pdGlhbC4uSEVBRCA+Y29tbWl0cyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgY29tbWl0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvbnRpbnVlIHJlc3BlY3RzIG9wdHMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgLXggYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJjIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YW5vdGhlcnBpY2tfbXNnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEfjEgPnBpY2tlZF9tc2cgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUR+MiA+dW5yZWxhdGVkcGlja19tc2cgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUR+MyA+aW5pdGlhbF9tc2cgJiYKKwl0ZXN0X211c3RfZmFpbCBncmVwICJjaGVycnkgcGlja2VkIGZyb20iIGluaXRpYWxfbXNnICYmCisJZ3JlcCAiY2hlcnJ5IHBpY2tlZCBmcm9tIiB1bnJlbGF0ZWRwaWNrX21zZyAmJgorCWdyZXAgImNoZXJyeSBwaWNrZWQgZnJvbSIgcGlja2VkX21zZyAmJgorCWdyZXAgImNoZXJyeSBwaWNrZWQgZnJvbSIgYW5vdGhlcnBpY2tfbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY29udGludWUgb2Ygc2luZ2xlLXBpY2sgcmVzcGVjdHMgLXgnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAteCBwaWNrZWQgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+bXNnICYmCisJZ3JlcCAiY2hlcnJ5IHBpY2tlZCBmcm9tIiBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jb250aW51ZSByZXNwZWN0cyAteCBpbiBmaXJzdCBjb21taXQgaW4gbXVsdGktcGljaycgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC14IHBpY2tlZCBhbm90aGVycGljayAmJgorCWVjaG8gYyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEXiA+bXNnICYmCisJcGlja2VkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBwaWNrZWQpICYmCisJZ3JlcCAiY2hlcnJ5IHBpY2tlZCBmcm9tLiokcGlja2VkIiBtc2cKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnLS1zaWdub2ZmIGlzIGF1dG9tYXRpY2FsbHkgcHJvcGFnYXRlZCB0byByZXNvbHZlZCBjb25mbGljdCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayAtLXNpZ25vZmYgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJjIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3NlcXVlbmNlciAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YW5vdGhlcnBpY2tfbXNnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEfjEgPnBpY2tlZF9tc2cgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUR+MiA+dW5yZWxhdGVkcGlja19tc2cgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUR+MyA+aW5pdGlhbF9tc2cgJiYKKwl0ZXN0X211c3RfZmFpbCBncmVwICJTaWduZWQtb2ZmLWJ5OiIgaW5pdGlhbF9tc2cgJiYKKwlncmVwICJTaWduZWQtb2ZmLWJ5OiIgdW5yZWxhdGVkcGlja19tc2cgJiYKKwl0ZXN0X211c3RfZmFpbCBncmVwICJTaWduZWQtb2ZmLWJ5OiIgcGlja2VkX21zZyAmJgorCWdyZXAgIlNpZ25lZC1vZmYtYnk6IiBhbm90aGVycGlja19tc2cKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnLS1zaWdub2ZmIGRyb3BwZWQgZm9yIGltcGxpY2l0IGNvbW1pdCBvZiByZXNvbHV0aW9uLCBtdWx0aS1waWNrIGNhc2UnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtcyBwaWNrZWQgYW5vdGhlcnBpY2sgJiYKKwllY2hvIGMgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUgJiYKKworCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEXl4gJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReID5tc2cgJiYKKwkhIGdyZXAgU2lnbmVkLW9mZi1ieTogbXNnCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3NpZ24tb2ZmIG5lZWRzIHRvIGJlIHJlYWZmaXJtZWQgYWZ0ZXIgY29uZmxpY3QgcmVzb2x1dGlvbiwgc2luZ2xlLXBpY2sgY2FzZScgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIC1zIHBpY2tlZCAmJgorCWVjaG8gYyA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUReICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5tc2cgJiYKKwkhIGdyZXAgU2lnbmVkLW9mZi1ieTogbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21hbGZvcm1lZCBpbnN0cnVjdGlvbiBzaGVldCAxJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmFub3RoZXJwaWNrICYmCisJZWNobyAicmVzb2x2ZWQiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKwlzZWQgInMvcGljayAvcGljay8iIC5naXQvc2VxdWVuY2VyL3RvZG8gPm5ld19zaGVldCAmJgorCWNwIG5ld19zaGVldCAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFsZm9ybWVkIGluc3RydWN0aW9uIHNoZWV0IDInICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJyZXNvbHZlZCIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCXNlZCAicy9waWNrL3JldmVydC8iIC5naXQvc2VxdWVuY2VyL3RvZG8gPm5ld19zaGVldCAmJgorCWNwIG5ld19zaGVldCAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgY29tbWl0IHNldCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIGJhc2UuLmJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFsZm9ybWVkIGluc3RydWN0aW9uIHNoZWV0IDMnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJyZXNvbHZlZCIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAmJgorCXNlZCAicy9waWNrIFwoWzAtOWEtZl0qXCkvcGljayAkX3IxMC8iIC5naXQvc2VxdWVuY2VyL3RvZG8gPm5ld19zaGVldCAmJgorCWNwIG5ld19zaGVldCAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zdHJ1Y3Rpb24gc2hlZXQsIGZhdC1maW5nZXJzIHZlcnNpb24nICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgY2hlcnJ5LXBpY2sgYmFzZS4uYW5vdGhlcnBpY2sgJiYKKwllY2hvICJjIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0ICYmCisJc2VkICJzL3BpY2sgXChbMC05YS1mXSpcKS9waWNrIAkgXDEgCS8iIC5naXQvc2VxdWVuY2VyL3RvZG8gPm5ld19zaGVldCAmJgorCWNwIG5ld19zaGVldCAuZ2l0L3NlcXVlbmNlci90b2RvICYmCisJZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGRlc2NyaXB0aW9ucyBpbiBpbnNuIHNoZWV0IGFyZSBvcHRpb25hbCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjaGVycnktcGljayBiYXNlLi5hbm90aGVycGljayAmJgorCWVjaG8gImMiID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgJiYKKwljdXQgLWQiICIgLWYxLDIgLmdpdC9zZXF1ZW5jZXIvdG9kbyA+bmV3X3NoZWV0ICYmCisJY3AgbmV3X3NoZWV0IC5naXQvc2VxdWVuY2VyL3RvZG8gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2VxdWVuY2VyICYmCisJZ2l0IHJldi1saXN0IEhFQUQgPmNvbW1pdHMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IGNvbW1pdHMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTExLWNoZXJyeS1waWNrLXguc2ggYi90L3QzNTExLWNoZXJyeS1waWNrLXguc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjdkZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MTEtY2hlcnJ5LXBpY2steC5zaApAQCAtMCwwICsxLDI0NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY2hlcnJ5LXBpY2sgLXggYW5kIC1zJworCisuIC4vdGVzdC1saWIuc2gKKworcHJpc3RpbmVfZGV0YWNoICgpIHsKKwlnaXQgY2hlcnJ5LXBpY2sgLS1xdWl0ICYmCisJZ2l0IGNoZWNrb3V0IC1mICIkMV4wIiAmJgorCWdpdCByZWFkLXRyZWUgLXUgLS1yZXNldCBIRUFEICYmCisJZ2l0IGNsZWFuIC1kIC1mIC1mIC1xIC14Cit9CisKK21lc2dfb25lX2xpbmU9J2Jhc2U6IGNvbW1pdCBtZXNzYWdlJworCittZXNnX25vX2Zvb3Rlcj0iJG1lc2dfb25lX2xpbmUKKworT25lV29yZEJvZHlUaGF0c05vdEEtUy1vLUIiCisKK21lc2dfd2l0aF9mb290ZXI9IiRtZXNnX25vX2Zvb3RlcgorCitTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KK1NpZ25lZC1vZmYtYnk6IEEuVS4gVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorU2lnbmVkLW9mZi1ieTogQi5VLiBUaG9yIDxidXRob3JAZXhhbXBsZS5jb20+IgorCittZXNnX2Jyb2tlbl9mb290ZXI9IiRtZXNnX25vX2Zvb3RlcgorCitUaGUgc2lnbmVkLW9mZi1ieSBzdHJpbmcgc2hvdWxkIGJlZ2luIHdpdGggdGhlIHdvcmRzIFNpZ25lZC1vZmYtYnkgZm9sbG93ZWQKK2J5IGEgY29sb24gYW5kIHNwYWNlLCBhbmQgdGhlbiB0aGUgc2lnbmVycyBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzLiBlLmcuCitTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iCisKK21lc2dfd2l0aF9mb290ZXJfc29iPSIkbWVzZ193aXRoX2Zvb3RlcgorU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IgorCittZXNnX3dpdGhfY2hlcnJ5X2Zvb3Rlcj0iJG1lc2dfd2l0aF9mb290ZXJfc29iCisoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5KQorVGVzdGVkLWJ5OiBDLlUuIFRob3IgPGN1dGhvckBleGFtcGxlLmNvbT4iCisKK21lc2dfdW5jbGVhbj0iJG1lc2dfb25lX2xpbmUKKworCitsZWFkaW5nIGVtcHR5IGxpbmVzCisKKworY29uc2VjdXRpdmUgZW1wdHkgbGluZXMKKworIyBoYXNoIHRhZyBjb21tZW50CisKK3RyYWlsaW5nIGVtcHR5IGxpbmVzCisKKworIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGFkdmljZS5kZXRhY2hlZGhlYWQgZmFsc2UgJiYKKwllY2hvIHVucmVsYXRlZCA+dW5yZWxhdGVkICYmCisJZ2l0IGFkZCB1bnJlbGF0ZWQgJiYKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGZvbyBhICYmCisJdGVzdF9jb21taXQgIiRtZXNnX29uZV9saW5lIiBmb28gYiBtZXNnLW9uZS1saW5lICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgIiRtZXNnX25vX2Zvb3RlciIgZm9vIGIgbWVzZy1uby1mb290ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiJG1lc2dfYnJva2VuX2Zvb3RlciIgZm9vIGIgbWVzZy1icm9rZW4tZm9vdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgIiRtZXNnX3dpdGhfZm9vdGVyIiBmb28gYiBtZXNnLXdpdGgtZm9vdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgIiRtZXNnX3dpdGhfZm9vdGVyX3NvYiIgZm9vIGIgbWVzZy13aXRoLWZvb3Rlci1zb2IgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiJG1lc2dfd2l0aF9jaGVycnlfZm9vdGVyIiBmb28gYiBtZXNnLXdpdGgtY2hlcnJ5LWZvb3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29uZmlnIGNvbW1pdC5jbGVhbnVwIHZlcmJhdGltICYmCisJdGVzdF9jb21taXQgIiRtZXNnX3VuY2xlYW4iIGZvbyBiIG1lc2ctdW5jbGVhbiAmJgorCXRlc3RfdW5jb25maWcgY29tbWl0LmNsZWFudXAgJiYKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0IGNvbmZsaWN0aW5nIHVucmVsYXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAteCBpbnNlcnRzIGJsYW5rIGxpbmUgYWZ0ZXIgb25lIGxpbmUgc3ViamVjdCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJc2hhMT1gZ2l0IHJldi1wYXJzZSBtZXNnLW9uZS1saW5lXjBgICYmCisJZ2l0IGNoZXJyeS1waWNrIC14IG1lc2ctb25lLWxpbmUgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfb25lX2xpbmUKKworCQkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAkc2hhMSkKKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtcyBpbnNlcnRzIGJsYW5rIGxpbmUgYWZ0ZXIgb25lIGxpbmUgc3ViamVjdCcgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJZ2l0IGNoZXJyeS1waWNrIC1zIG1lc2ctb25lLWxpbmUgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfb25lX2xpbmUKKworCQlTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtcyBpbnNlcnRzIGJsYW5rIGxpbmUgYWZ0ZXIgbm9uLWNvbmZvcm1pbmcgZm9vdGVyJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXMgbWVzZy1icm9rZW4tZm9vdGVyICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX2Jyb2tlbl9mb290ZXIKKworCQlTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAteCBpbnNlcnRzIGJsYW5rIGxpbmUgd2hlbiBjb25mb3JtaW5nIGZvb3RlciBub3QgZm91bmQnICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCXNoYTE9YGdpdCByZXYtcGFyc2UgbWVzZy1uby1mb290ZXJeMGAgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXggbWVzZy1uby1mb290ZXIgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfbm9fZm9vdGVyCisKKwkJKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJHNoYTEpCisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXMgaW5zZXJ0cyBibGFuayBsaW5lIHdoZW4gY29uZm9ybWluZyBmb290ZXIgbm90IGZvdW5kJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgLXMgbWVzZy1uby1mb290ZXIgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfbm9fZm9vdGVyCisKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXggLXMgaW5zZXJ0cyBibGFuayBsaW5lIHdoZW4gY29uZm9ybWluZyBmb290ZXIgbm90IGZvdW5kJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlzaGExPWBnaXQgcmV2LXBhcnNlIG1lc2ctbm8tZm9vdGVyXjBgICYmCisJZ2l0IGNoZXJyeS1waWNrIC14IC1zIG1lc2ctbm8tZm9vdGVyICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX25vX2Zvb3RlcgorCisJCShjaGVycnkgcGlja2VkIGZyb20gY29tbWl0ICRzaGExKQorCQlTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtcyBhZGRzIHNvYiB3aGVuIGxhc3Qgc29iIGRvZXNudCBtYXRjaCBjb21taXR0ZXInICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAtcyBtZXNnLXdpdGgtZm9vdGVyICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX3dpdGhfZm9vdGVyCisJCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC14IC1zIGFkZHMgc29iIHdoZW4gbGFzdCBzb2IgZG9lc250IG1hdGNoIGNvbW1pdHRlcicgJworCXByaXN0aW5lX2RldGFjaCBpbml0aWFsICYmCisJc2hhMT1gZ2l0IHJldi1wYXJzZSBtZXNnLXdpdGgtZm9vdGVyXjBgICYmCisJZ2l0IGNoZXJyeS1waWNrIC14IC1zIG1lc2ctd2l0aC1mb290ZXIgJiYKKwljYXQgPDwtRU9GID5leHBlY3QgJiYKKwkJJG1lc2dfd2l0aF9mb290ZXIKKwkJKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgJHNoYTEpCisJCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCUVPRgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrIC1zIHJlZnJhaW5zIGZyb20gYWRkaW5nIGR1cGxpY2F0ZSB0cmFpbGluZyBzb2InICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAtcyBtZXNnLXdpdGgtZm9vdGVyLXNvYiAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ193aXRoX2Zvb3Rlcl9zb2IKKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAteCAtcyBhZGRzIHNvYiBldmVuIHdoZW4gdHJhaWxpbmcgc29iIGV4aXN0cyBmb3IgY29tbWl0dGVyJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlzaGExPWBnaXQgcmV2LXBhcnNlIG1lc2ctd2l0aC1mb290ZXItc29iXjBgICYmCisJZ2l0IGNoZXJyeS1waWNrIC14IC1zIG1lc2ctd2l0aC1mb290ZXItc29iICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX3dpdGhfZm9vdGVyX3NvYgorCQkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAkc2hhMSkKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXggdHJlYXRzICIoY2hlcnJ5IHBpY2tlZCBmcm9tLi4uIiBsaW5lIGFzIHBhcnQgb2YgZm9vdGVyJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlzaGExPWBnaXQgcmV2LXBhcnNlIG1lc2ctd2l0aC1jaGVycnktZm9vdGVyXjBgICYmCisJZ2l0IGNoZXJyeS1waWNrIC14IG1lc2ctd2l0aC1jaGVycnktZm9vdGVyICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX3dpdGhfY2hlcnJ5X2Zvb3RlcgorCQkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAkc2hhMSkKKwlFT0YKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayAtcyB0cmVhdHMgIihjaGVycnkgcGlja2VkIGZyb20uLi4iIGxpbmUgYXMgcGFydCBvZiBmb290ZXInICcKKwlwcmlzdGluZV9kZXRhY2ggaW5pdGlhbCAmJgorCWdpdCBjaGVycnktcGljayAtcyBtZXNnLXdpdGgtY2hlcnJ5LWZvb3RlciAmJgorCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCQkkbWVzZ193aXRoX2NoZXJyeV9mb290ZXIKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgLXggLXMgdHJlYXRzICIoY2hlcnJ5IHBpY2tlZCBmcm9tLi4uIiBsaW5lIGFzIHBhcnQgb2YgZm9vdGVyJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlzaGExPWBnaXQgcmV2LXBhcnNlIG1lc2ctd2l0aC1jaGVycnktZm9vdGVyXjBgICYmCisJZ2l0IGNoZXJyeS1waWNrIC14IC1zIG1lc2ctd2l0aC1jaGVycnktZm9vdGVyICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJCSRtZXNnX3dpdGhfY2hlcnJ5X2Zvb3RlcgorCQkoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCAkc2hhMSkKKwkJU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+CisJRU9GCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlcnJ5LXBpY2sgcHJlc2VydmVzIGNvbW1pdCBtZXNzYWdlJyAnCisJcHJpc3RpbmVfZGV0YWNoIGluaXRpYWwgJiYKKwlwcmludGYgIiRtZXNnX3VuY2xlYW4iID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolQiBtZXNnLXVuY2xlYW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgbWVzZy11bmNsZWFuICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTEyLWNoZXJyeS1waWNrLXN1Ym1vZHVsZS5zaCBiL3QvdDM1MTItY2hlcnJ5LXBpY2stc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4NjNiN2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNTEyLWNoZXJyeS1waWNrLXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDEzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlcnJ5LXBpY2sgY2FuIGhhbmRsZSBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXN1Ym1vZHVsZS11cGRhdGUuc2gKKworS05PV05fRkFJTFVSRV9DSEVSUllfUElDS19TRUVTX0VNUFRZX0NPTU1JVD0xCitLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfRE9FU05UX0NSRUFURV9FTVBUWV9TVUJNT0RVTEVfRElSPTEKK0tOT1dOX0ZBSUxVUkVfTk9GRl9NRVJHRV9BVFRFTVBUU19UT19NRVJHRV9SRU1PVkVEX1NVQk1PRFVMRV9GSUxFUz0xCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdCBjaGVycnktcGljayIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNTEzLXJldmVydC1zdWJtb2R1bGUuc2ggYi90L3QzNTEzLXJldmVydC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTFjNGUwMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM1MTMtcmV2ZXJ0LXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmV2ZXJ0IGNhbiBoYW5kbGUgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKKyMgQ3JlYXRlIGEgcmV2ZXJ0IHRoYXQgbW92ZXMgZnJvbSBIRUFEIChpbmNsdWRpbmcgYW55IHRlc3QgbW9kaWZpY2F0aW9ucyB0bworIyB0aGUgd29yayB0cmVlKSB0byAkMSBieSBmaXJzdCBjaGVja2luZyBvdXQgJDEgYW5kIHJldmVydGluZyBpdC4gUmV2ZXJ0aW5nCisjIHRoZSByZXZlcnQgaXMgdGhlIHRyYW5zaXRpb24gd2UgdGVzdCBmb3IuIFdlIHRhciB0aGUgY3VycmVudCB3b3JrIHRyZWUKKyMgZmlyc3Qgc28gd2UgY2FuIHJlc3RvcmUgdGhlIHdvcmsgdHJlZSB0ZXN0IHNldHVwIGFmdGVyIGRvaW5nIHRoZSBjaGVja291dAorIyBhbmQgcmV2ZXJ0LiAgV2UgdGVzdCBoZXJlIHRoYXQgdGhlIHJlc3RvcmVkIHdvcmsgdHJlZSBjb250ZW50IGlzIGlkZW50aWNhbAorIyB0byB0aGF0IGF0IHRoZSBiZWdpbm5pbmcuIFRoZSBsYXN0IHJldmVydCBpcyB0aGVuIHRlc3RlZCBieSB0aGUgZnJhbWV3b3JrLgorZ2l0X3JldmVydCAoKSB7CisJZ2l0IHN0YXR1cyAtc3UgPmV4cGVjdCAmJgorCWxzIC0xcFIgKiA+PmV4cGVjdCAmJgorCXRhciBjemYgIiRUUkFTSF9ESVJFQ1RPUlkvdG1wLnRneiIgKiAmJgorCWdpdCBjaGVja291dCAiJDEiICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisJcm0gLXJmICogJiYKKwl0YXIgeHpmICIkVFJBU0hfRElSRUNUT1JZL3RtcC50Z3oiICYmCisJZ2l0IHN0YXR1cyAtc3UgPmFjdHVhbCAmJgorCWxzIC0xcFIgKiA+PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmV2ZXJ0IEhFQUQKK30KKworS05PV05fRkFJTFVSRV9DSEVSUllfUElDS19TRUVTX0VNUFRZX0NPTU1JVD0xCitLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfRE9FU05UX0NSRUFURV9FTVBUWV9TVUJNT0RVTEVfRElSPTEKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0X3JldmVydCIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNjAwLXJtLnNoIGIvdC90MzYwMC1ybS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZDkwZDJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzYwMC1ybS5zaApAQCAtMCwwICsxLDg4NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBDYXJsIEQuIFdvcnRoCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgb2YgdGhlIHZhcmlvdXMgb3B0aW9ucyB0byBnaXQgcm0uJworCisuIC4vdGVzdC1saWIuc2gKKworIyBTZXR1cCBzb21lIGZpbGVzIHRvIGJlIHJlbW92ZWQsIHNvbWUgd2l0aCBmdW5ueSBjaGFyYWN0ZXJzCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnSW5pdGlhbGl6ZSB0ZXN0IGRpcmVjdG9yeScgXAorICAgICJ0b3VjaCAtLSBmb28gYmFyIGJheiAnc3BhY2UgZW1iZWRkZWQnIC1xICYmCisgICAgIGdpdCBhZGQgLS0gZm9vIGJhciBiYXogJ3NwYWNlIGVtYmVkZGVkJyAtcSAmJgorICAgICBnaXQgY29tbWl0IC1tICdhZGQgbm9ybWFsIGZpbGVzJyIKKworaWYgdG91Y2ggLS0gJ3RhYgllbWJlZGRlZCcgJ25ld2xpbmUKK2VtYmVkZGVkJyAyPi9kZXYvbnVsbAordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBGVU5OWU5BTUVTCitlbHNlCisJc2F5ICdZb3VyIGZpbGVzeXN0ZW0gZG9lcyBub3QgYWxsb3cgdGFicyBpbiBmaWxlbmFtZXMuJworZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTICdhZGQgZmlsZXMgd2l0aCBmdW5ueSBuYW1lcycgIgorICAgICBnaXQgYWRkIC0tICd0YWIJZW1iZWRkZWQnICduZXdsaW5lCitlbWJlZGRlZCcgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAnYWRkIGZpbGVzIHdpdGggdGFicyBhbmQgbmV3bGluZXMnCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdQcmUtY2hlY2sgdGhhdCBmb28gZXhpc3RzIGFuZCBpcyBpbiBpbmRleCBiZWZvcmUgZ2l0IHJtIGZvbycgXAorICAgICdbIC1mIGZvbyBdICYmIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZm9vJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnVGVzdCB0aGF0IGdpdCBybSBmb28gc3VjY2VlZHMnIFwKKyAgICAnZ2l0IHJtIC0tY2FjaGVkIGZvbycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Rlc3QgdGhhdCBnaXQgcm0gLS1jYWNoZWQgZm9vIHN1Y2NlZWRzIGlmIHRoZSBpbmRleCBtYXRjaGVzIHRoZSBmaWxlJyBcCisgICAgJ2VjaG8gY29udGVudCA+Zm9vICYmCisgICAgIGdpdCBhZGQgZm9vICYmCisgICAgIGdpdCBybSAtLWNhY2hlZCBmb28nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdUZXN0IHRoYXQgZ2l0IHJtIC0tY2FjaGVkIGZvbyBzdWNjZWVkcyBpZiB0aGUgaW5kZXggbWF0Y2hlcyB0aGUgZmlsZScgXAorICAgICdlY2hvIGNvbnRlbnQgPmZvbyAmJgorICAgICBnaXQgYWRkIGZvbyAmJgorICAgICBnaXQgY29tbWl0IC1tIGZvbyAmJgorICAgICBlY2hvICJvdGhlciBjb250ZW50IiA+Zm9vICYmCisgICAgIGdpdCBybSAtLWNhY2hlZCBmb28nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdUZXN0IHRoYXQgZ2l0IHJtIC0tY2FjaGVkIGZvbyBmYWlscyBpZiB0aGUgaW5kZXggbWF0Y2hlcyBuZWl0aGVyIHRoZSBmaWxlIG5vciBIRUFEJyAnCisgICAgIGVjaG8gY29udGVudCA+Zm9vICYmCisgICAgIGdpdCBhZGQgZm9vICYmCisgICAgIGdpdCBjb21taXQgLW0gZm9vIC0tYWxsb3ctZW1wdHkgJiYKKyAgICAgZWNobyAib3RoZXIgY29udGVudCIgPmZvbyAmJgorICAgICBnaXQgYWRkIGZvbyAmJgorICAgICBlY2hvICJ5ZXQgYW5vdGhlciBjb250ZW50IiA+Zm9vICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBybSAtLWNhY2hlZCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Rlc3QgdGhhdCBnaXQgcm0gLS1jYWNoZWQgLWYgZm9vIHdvcmtzIGluIGNhc2Ugd2hlcmUgLS1jYWNoZWQgb25seSBkaWQgbm90JyBcCisgICAgJ2VjaG8gY29udGVudCA+Zm9vICYmCisgICAgIGdpdCBhZGQgZm9vICYmCisgICAgIGdpdCBjb21taXQgLW0gZm9vIC0tYWxsb3ctZW1wdHkgJiYKKyAgICAgZWNobyAib3RoZXIgY29udGVudCIgPmZvbyAmJgorICAgICBnaXQgYWRkIGZvbyAmJgorICAgICBlY2hvICJ5ZXQgYW5vdGhlciBjb250ZW50IiA+Zm9vICYmCisgICAgIGdpdCBybSAtLWNhY2hlZCAtZiBmb28nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdQb3N0LWNoZWNrIHRoYXQgZm9vIGV4aXN0cyBidXQgaXMgbm90IGluIGluZGV4IGFmdGVyIGdpdCBybSBmb28nIFwKKyAgICAnWyAtZiBmb28gXSAmJiB0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1ByZS1jaGVjayB0aGF0IGJhciBleGlzdHMgYW5kIGlzIGluIGluZGV4IGJlZm9yZSAiZ2l0IHJtIGJhciInIFwKKyAgICAnWyAtZiBiYXIgXSAmJiBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGJhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Rlc3QgdGhhdCAiZ2l0IHJtIGJhciIgc3VjY2VlZHMnIFwKKyAgICAnZ2l0IHJtIGJhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Bvc3QtY2hlY2sgdGhhdCBiYXIgZG9lcyBub3QgZXhpc3QgYW5kIGlzIG5vdCBpbiBpbmRleCBhZnRlciAiZ2l0IHJtIC1mIGJhciInIFwKKyAgICAnISBbIC1mIGJhciBdICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYmFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnVGVzdCB0aGF0ICJnaXQgcm0gLS0gLXEiIHN1Y2NlZWRzIChyZW1vdmUgYSBmaWxlIHRoYXQgbG9va3MgbGlrZSBhbiBvcHRpb24pJyBcCisgICAgJ2dpdCBybSAtLSAtcScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGVU5OWU5BTUVTIFwKKyAgICAiVGVzdCB0aGF0IFwiZ2l0IHJtIC1mXCIgc3VjY2VlZHMgd2l0aCBlbWJlZGRlZCBzcGFjZSwgdGFiLCBvciBuZXdsaW5lIGNoYXJhY3RlcnMuIiBcCisgICAgImdpdCBybSAtZiAnc3BhY2UgZW1iZWRkZWQnICd0YWIJZW1iZWRkZWQnICduZXdsaW5lCitlbWJlZGRlZCciCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU0FOSVRZICdUZXN0IHRoYXQgImdpdCBybSAtZiIgZmFpbHMgaWYgaXRzIHJtIGZhaWxzJyAnCisJY2htb2QgYS13IC4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gLWYgYmF6ICYmCisJY2htb2QgNzc1IC4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1doZW4gdGhlIHJtIGluICJnaXQgcm0gLWYiIGZhaWxzLCBpdCBzaG91bGQgbm90IHJlbW92ZSB0aGUgZmlsZSBmcm9tIHRoZSBpbmRleCcgXAorICAgICdnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGJheicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVtb3ZlIG5vbmV4aXN0ZW50IGZpbGUgd2l0aCAtLWlnbm9yZS11bm1hdGNoJyAnCisJZ2l0IHJtIC0taWdub3JlLXVubWF0Y2ggbm9uZXhpc3RlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInJtIiBjb21tYW5kIHByaW50ZWQnICcKKwllY2hvIGZyb3R6ID4gdGVzdC1maWxlICYmCisJZ2l0IGFkZCB0ZXN0LWZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZmlsZSBmb3Igcm0gdGVzdCIgJiYKKwlnaXQgcm0gdGVzdC1maWxlID4gcm0tb3V0cHV0ICYmCisJdGVzdCBgZ3JlcCAiXnJtICIgcm0tb3V0cHV0IHwgd2MgLWxgID0gMSAmJgorCXJtIC1mIHRlc3QtZmlsZSBybS1vdXRwdXQgJiYKKwlnaXQgY29tbWl0IC1tICJyZW1vdmUgZmlsZSBmcm9tIHJtIHRlc3QiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJybSIgY29tbWFuZCBzdXBwcmVzc2VkIHdpdGggLS1xdWlldCcgJworCWVjaG8gZnJvdHogPiB0ZXN0LWZpbGUgJiYKKwlnaXQgYWRkIHRlc3QtZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBmaWxlIGZvciBybSAtLXF1aWV0IHRlc3QiICYmCisJZ2l0IHJtIC0tcXVpZXQgdGVzdC1maWxlID4gcm0tb3V0cHV0ICYmCisJdGVzdCBgd2MgLWwgPCBybS1vdXRwdXRgID0gMCAmJgorCXJtIC1mIHRlc3QtZmlsZSBybS1vdXRwdXQgJiYKKwlnaXQgY29tbWl0IC1tICJyZW1vdmUgZmlsZSBmcm9tIHJtIC0tcXVpZXQgdGVzdCIKKycKKworIyBOb3csIGZhaWx1cmUgY2FzZXMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZS1hZGQgZm9vIGFuZCBiYXonICcKKwlnaXQgYWRkIGZvbyBiYXogJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTW9kaWZ5IGZvbyAtLSBybSBzaG91bGQgcmVmdXNlJyAnCisJZWNobyA+PmZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBmb28gYmF6ICYmCisJdGVzdCAtZiBmb28gJiYKKwl0ZXN0IC1mIGJheiAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZm9vIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNb2RpZmllZCBmb28gLS0gcm0gLWYgc2hvdWxkIHdvcmsnICcKKwlnaXQgcm0gLWYgZm9vIGJheiAmJgorCXRlc3QgISAtZiBmb28gJiYKKwl0ZXN0ICEgLWYgYmF6ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZS1hZGQgZm9vIGFuZCBiYXogZm9yIEhFQUQgdGVzdHMnICcKKwllY2hvIGZyb3R6ID5mb28gJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCAtLSBiYXogJiYKKwlnaXQgYWRkIGZvbyBiYXogJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGZvbyBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9vIGlzIGRpZmZlcmVudCBpbiBpbmRleCBmcm9tIEhFQUQgLS0gcm0gc2hvdWxkIHJlZnVzZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBmb28gYmF6ICYmCisJdGVzdCAtZiBmb28gJiYKKwl0ZXN0IC1mIGJheiAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggZm9vIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidXQgd2l0aCAtZiBpdCBzaG91bGQgd29yay4nICcKKwlnaXQgcm0gLWYgZm9vIGJheiAmJgorCXRlc3QgISAtZiBmb28gJiYKKwl0ZXN0ICEgLWYgYmF6ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgdG8gcmVtb3ZlIGNhY2hlZCBlbXB0eSBmaWxlIHdpdGggbW9kaWZpY2F0aW9ucycgJworCT5lbXB0eSAmJgorCWdpdCBhZGQgZW1wdHkgJiYKKwllY2hvIGNvbnRlbnQgPmVtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIC0tY2FjaGVkIGVtcHR5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBpbnRlbnQtdG8tYWRkIGZpbGUgd2l0aG91dCAtLWZvcmNlJyAnCisJZWNobyBjb250ZW50ID5pbnRlbnQtdG8tYWRkICYmCisJZ2l0IGFkZCAtTiBpbnRlbnQtdG8tYWRkICYmCisJZ2l0IHJtIC0tY2FjaGVkIGludGVudC10by1hZGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVjdXJzaXZlIHRlc3Qgc2V0dXAnICcKKwlta2RpciAtcCBmcm90eiAmJgorCWVjaG8gcWZ3ZnEgPmZyb3R6L25pdGZvbCAmJgorCWdpdCBhZGQgZnJvdHogJiYKKwlnaXQgY29tbWl0IC1tICJzdWJkaXIgdGVzdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVjdXJzaXZlIHdpdGhvdXQgLXIgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gZnJvdHogJiYKKwl0ZXN0IC1kIGZyb3R6ICYmCisJdGVzdCAtZiBmcm90ei9uaXRmb2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVjdXJzaXZlIHdpdGggLXIgYnV0IGRpcnR5JyAnCisJZWNobyBxZndmcSA+PmZyb3R6L25pdGZvbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAtciBmcm90eiAmJgorCXRlc3QgLWQgZnJvdHogJiYKKwl0ZXN0IC1mIGZyb3R6L25pdGZvbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZWN1cnNpdmUgd2l0aCAtciAtZicgJworCWdpdCBybSAtZiAtciBmcm90eiAmJgorCSEgdGVzdCAtZiBmcm90ei9uaXRmb2wgJiYKKwkhIHRlc3QgLWQgZnJvdHoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVtb3ZlIG5vbmV4aXN0ZW50IGZpbGUgcmV0dXJucyBub256ZXJvIGV4aXQgc3RhdHVzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIG5vbmV4aXN0ZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NhbGwgInJtIiBmcm9tIG91dHNpZGUgdGhlIHdvcmsgdHJlZScgJworCW1rZGlyIHJlcG8gJiYKKwkoY2QgcmVwbyAmJgorCSBnaXQgaW5pdCAmJgorCSBlY2hvIHNvbWV0aGluZyA+IHNvbWVmaWxlICYmCisJIGdpdCBhZGQgc29tZWZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSAiYWRkIGEgZmlsZSIgJiYKKwkgKGNkIC4uICYmCisJICBnaXQgLS1naXQtZGlyPXJlcG8vLmdpdCAtLXdvcmstdHJlZT1yZXBvIHJtIHNvbWVmaWxlKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggc29tZWZpbGUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnJlc2ggaW5kZXggYmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIHVwLXRvLWRhdGUnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0LWNobXRpbWUgLTg2NDAwIGZyb3R6L25pdGZvbCAmJgorCWdpdCBybSBmcm90ei9uaXRmb2wgJiYKKwl0ZXN0ICEgLWYgZnJvdHovbml0Zm9sCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hva2luZyAiZ2l0IHJtIiBzaG91bGQgbm90IGxldCBpdCBkaWUgd2l0aCBjcnVmdCcgJworCWdpdCByZXNldCAtcSAtLWhhcmQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaW5kZXgubG9jayAmJiBnaXQgcmVzZXQgLXEgLS1oYXJkIiAmJgorCWk9MCAmJgorCXdoaWxlIHRlc3QgJGkgLWx0IDEyMDAwCisJZG8KKwkgICAgZWNobyAiMTAwNjQ0IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgMAlzb21lLWZpbGUtJGkiCisJICAgIGk9JCgoICRpICsgMSApKQorCWRvbmUgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWdpdCBybSAtbiAic29tZS1maWxlLSoiIHwgOiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvaW5kZXgubG9jaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSByZW1vdmVzIHN1YmRpcmVjdG9yaWVzIHJlY3Vyc2l2ZWx5JyAnCisJbWtkaXIgLXAgZGlyL3N1YmRpci9zdWJzdWJkaXIgJiYKKwllY2hvIGNvbnRlbnQgPmRpci9zdWJkaXIvc3Vic3ViZGlyL2ZpbGUgJiYKKwlnaXQgYWRkIGRpci9zdWJkaXIvc3Vic3ViZGlyL2ZpbGUgJiYKKwlnaXQgcm0gLWYgZGlyL3N1YmRpci9zdWJzdWJkaXIvZmlsZSAmJgorCSEgdGVzdCAtZCBkaXIKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK00gIC5naXRtb2R1bGVzCitEICBzdWJtb2QKK0VPRgorCitjYXQgPmV4cGVjdC5tb2RpZmllZCA8PEVPRgorIE0gc3VibW9kCitFT0YKKworY2F0ID5leHBlY3QuY2FjaGVkIDw8RU9GCitEICBzdWJtb2QKK0VPRgorCitjYXQgPmV4cGVjdC5ib3RoX2RlbGV0ZWQ8PEVPRgorRCAgLmdpdG1vZHVsZXMKK0QgIHN1Ym1vZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHJlbW92ZXMgZW1wdHkgc3VibW9kdWxlcyBmcm9tIHdvcmsgdHJlZScgJworCW1rZGlyIHN1Ym1vZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICQoZ2l0IHJldi1wYXJzZSBIRUFEKSBzdWJtb2QgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsIC4vLiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoIHN1Ym1vZCAmJgorCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIiAmJgorCWdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0ICEgLWUgc3VibW9kICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gcmVtb3ZlcyByZW1vdmVkIHN1Ym1vZHVsZSBmcm9tIGluZGV4IGFuZCAuZ2l0bW9kdWxlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCXJtIC1yZiBzdWJtb2QgJiYKKwlnaXQgcm0gc3VibW9kICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gcmVtb3ZlcyB3b3JrIHRyZWUgb2YgdW5tb2RpZmllZCBzdWJtb2R1bGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3QgISAtZCBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi51cmwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIucGF0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSByZW1vdmVzIGEgc3VibW9kdWxlIHdpdGggYSB0cmFpbGluZyAvJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IHJtIHN1Ym1vZC8gJiYKKwl0ZXN0ICEgLWQgc3VibW9kICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZmFpbHMgd2hlbiBnaXZlbiBhIGZpbGUgd2l0aCBhIHRyYWlsaW5nIC8nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gZW1wdHkvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIHN1Y2NlZWRzIHdoZW4gZ2l2ZW4gYSBkaXJlY3Rvcnkgd2l0aCBhIHRyYWlsaW5nIC8nICcKKwlnaXQgcm0gLXIgZnJvdHovCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZSB3aXRoIGRpZmZlcmVudCBIRUFEIGZhaWxzIHVubGVzcyBmb3JjZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkoY2Qgc3VibW9kICYmCisJCWdpdCBjaGVja291dCBIRUFEXgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdCAtZCBzdWJtb2QgJiYKKwl0ZXN0IC1mIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZCBhY3R1YWwgJiYKKwlnaXQgcm0gLWYgc3VibW9kICYmCisJdGVzdCAhIC1kIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnVybCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIC0tY2FjaGVkIGxlYXZlcyB3b3JrIHRyZWUgb2YgcG9wdWxhdGVkIHN1Ym1vZHVsZXMgYW5kIC5naXRtb2R1bGVzIGFsb25lJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IHJtIC0tY2FjaGVkIHN1Ym1vZCAmJgorCXRlc3QgLWQgc3VibW9kICYmCisJdGVzdCAtZiBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNhY2hlZCBhY3R1YWwgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gLS1kcnktcnVuIGRvZXMgbm90IHRvdWNoIHRoZSBzdWJtb2R1bGUgb3IgLmdpdG1vZHVsZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgcm0gLW4gc3VibW9kICYmCisJdGVzdCAtZiBzdWJtb2QvLmdpdCAmJgorCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZG9lcyBub3QgY29tcGxhaW4gd2hlbiBubyAuZ2l0bW9kdWxlcyBmaWxlIGlzIGZvdW5kJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IHJtIC5naXRtb2R1bGVzICYmCisJZ2l0IHJtIHN1Ym1vZCA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCSEgdGVzdCAtcyBhY3R1YWwuZXJyICYmCisJISB0ZXN0IC1kIHN1Ym1vZCAmJgorCSEgdGVzdCAtZiBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvdGhfZGVsZXRlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gd2lsbCBlcnJvciBvdXQgb24gYSBtb2RpZmllZCAuZ2l0bW9kdWxlcyBmaWxlIHVubGVzcyBzdGFnZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIGZvby5iYXIgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBzdWJtb2QgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0IC1zIGFjdHVhbC5lcnIgJiYKKwl0ZXN0IC1kIHN1Ym1vZCAmJgorCXRlc3QgLWYgc3VibW9kLy5naXQgJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0IC0tIHN1Ym1vZCAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwlnaXQgcm0gc3VibW9kID5hY3R1YWwgMj5hY3R1YWwuZXJyICYmCisJISB0ZXN0IC1zIGFjdHVhbC5lcnIgJiYKKwkhIHRlc3QgLWQgc3VibW9kICYmCisJISB0ZXN0IC1mIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIGlzc3VlcyBhIHdhcm5pbmcgd2hlbiBzZWN0aW9uIGlzIG5vdCBmb3VuZCBpbiAuZ2l0bW9kdWxlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3ViICYmCisJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCWVjaG8gIndhcm5pbmc6IENvdWxkIG5vdCBmaW5kIHNlY3Rpb24gaW4gLmdpdG1vZHVsZXMgd2hlcmUgcGF0aD1zdWJtb2QiID5leHBlY3QuZXJyICYmCisJZ2l0IHJtIHN1Ym1vZCA+YWN0dWFsIDI+YWN0dWFsLmVyciAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIgJiYKKwkhIHRlc3QgLWQgc3VibW9kICYmCisJISB0ZXN0IC1mIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZSB3aXRoIG1vZGlmaWNhdGlvbnMgZmFpbHMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCShjZCBzdWJtb2QgJiYKKwkJZWNobyBYID5lbXB0eQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdCAtZCBzdWJtb2QgJiYKKwl0ZXN0IC1mIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZCBhY3R1YWwgJiYKKwlnaXQgcm0gLWYgc3VibW9kICYmCisJdGVzdCAhIC1kIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIHN1Ym1vZHVsZSB3aXRoIHVudHJhY2tlZCBmaWxlcyBmYWlscyB1bmxlc3MgZm9yY2VkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJKGNkIHN1Ym1vZCAmJgorCQllY2hvIFggPnVudHJhY2tlZAorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdCAtZCBzdWJtb2QgJiYKKwl0ZXN0IC1mIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZCBhY3R1YWwgJiYKKwlnaXQgcm0gLWYgc3VibW9kICYmCisJdGVzdCAhIC1kIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN1Ym1vZHVsZSBjb25mbGljdCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gxICYmCisJZWNobyAxID5uaXRmb2wgJiYKKwlnaXQgYWRkIG5pdGZvbCAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIG5pdGZvbCAxIiAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gyIG1hc3RlciAmJgorCWVjaG8gMiA+bml0Zm9sICYmCisJZ2l0IGFkZCBuaXRmb2wgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBuaXRmb2wgMiIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QxIG1hc3RlciAmJgorCShjZCBzdWJtb2QgJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBjaGVja291dCBicmFuY2gxCisJKSAmJgorCWdpdCBhZGQgc3VibW9kICYmCisJZ2l0IGNvbW1pdCAtbSAic3VibW9kIDEiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNvbmZsaWN0MiBtYXN0ZXIgJiYKKwkoY2Qgc3VibW9kICYmCisJCWdpdCBjaGVja291dCBicmFuY2gyCisJKSAmJgorCWdpdCBhZGQgc3VibW9kICYmCisJZ2l0IGNvbW1pdCAtbSAic3VibW9kIDIiCisnCisKK2NhdCA+ZXhwZWN0LmNvbmZsaWN0IDw8RU9GCitVVSBzdWJtb2QKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSByZW1vdmVzIHdvcmsgdHJlZSBvZiB1bm1vZGlmaWVkIGNvbmZsaWN0ZWQgc3VibW9kdWxlJyAnCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0MSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdDIgJiYKKwlnaXQgcm0gc3VibW9kICYmCisJdGVzdCAhIC1kIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgY29uZmxpY3RlZCBwb3B1bGF0ZWQgc3VibW9kdWxlIHdpdGggZGlmZmVyZW50IEhFQUQgZmFpbHMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCBjaGVja291dCBjb25mbGljdDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkoY2Qgc3VibW9kICYmCisJCWdpdCBjaGVja291dCBIRUFEXgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3QyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIHN1Ym1vZCAmJgorCXRlc3QgLWQgc3VibW9kICYmCisJdGVzdCAtZiBzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuY29uZmxpY3QgYWN0dWFsICYmCisJZ2l0IHJtIC1mIHN1Ym1vZCAmJgorCXRlc3QgISAtZCBzdWJtb2QgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi51cmwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIucGF0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBvZiBhIGNvbmZsaWN0ZWQgcG9wdWxhdGVkIHN1Ym1vZHVsZSB3aXRoIG1vZGlmaWNhdGlvbnMgZmFpbHMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCBjaGVja291dCBjb25mbGljdDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkoY2Qgc3VibW9kICYmCisJCWVjaG8gWCA+ZW1wdHkKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0IC1kIHN1Ym1vZCAmJgorCXRlc3QgLWYgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmNvbmZsaWN0IGFjdHVhbCAmJgorCWdpdCBybSAtZiBzdWJtb2QgJiYKKwl0ZXN0ICEgLWQgc3VibW9kICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBjb25mbGljdGVkIHBvcHVsYXRlZCBzdWJtb2R1bGUgd2l0aCB1bnRyYWNrZWQgZmlsZXMgZmFpbHMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCBjaGVja291dCBjb25mbGljdDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkoY2Qgc3VibW9kICYmCisJCWVjaG8gWCA+dW50cmFja2VkCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdDIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdCAtZCBzdWJtb2QgJiYKKwl0ZXN0IC1mIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5jb25mbGljdCBhY3R1YWwgJiYKKwlnaXQgcm0gLWYgc3VibW9kICYmCisJdGVzdCAhIC1kIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgY29uZmxpY3RlZCBwb3B1bGF0ZWQgc3VibW9kdWxlIHdpdGggYSAuZ2l0IGRpcmVjdG9yeSBmYWlscyBldmVuIHdoZW4gZm9yY2VkJyAnCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0MSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCShjZCBzdWJtb2QgJiYKKwkJcm0gLmdpdCAmJgorCQljcCAtUiAuLi8uZ2l0L21vZHVsZXMvc3ViIC5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0uIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdDIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdCAtZCBzdWJtb2QgJiYKKwl0ZXN0IC1kIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5jb25mbGljdCBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gLWYgc3VibW9kICYmCisJdGVzdCAtZCBzdWJtb2QgJiYKKwl0ZXN0IC1kIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5jb25mbGljdCBhY3R1YWwgJiYKKwlnaXQgbWVyZ2UgLS1hYm9ydCAmJgorCXJtIC1yZiBzdWJtb2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBjb25mbGljdGVkIHVucG9wdWxhdGVkIHN1Ym1vZHVsZSBzdWNjZWVkcycgJworCWdpdCBjaGVja291dCBjb25mbGljdDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0MiAmJgorCWdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0ICEgLWQgc3VibW9kICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgYSBwb3B1bGF0ZWQgc3VibW9kdWxlIHdpdGggYSAuZ2l0IGRpcmVjdG9yeSBmYWlscyBldmVuIHdoZW4gZm9yY2VkJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCShjZCBzdWJtb2QgJiYKKwkJcm0gLmdpdCAmJgorCQljcCAtUiAuLi8uZ2l0L21vZHVsZXMvc3ViIC5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0uIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0IC1kIHN1Ym1vZCAmJgorCXRlc3QgLWQgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID4gYWN0dWFsICYmCisJISB0ZXN0IC1zIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAtZiBzdWJtb2QgJiYKKwl0ZXN0IC1kIHN1Ym1vZCAmJgorCXRlc3QgLWQgc3VibW9kLy5naXQgJiYKKwlnaXQgc3RhdHVzIC1zIC11bm8gLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID4gYWN0dWFsICYmCisJISB0ZXN0IC1zIGFjdHVhbCAmJgorCXJtIC1yZiBzdWJtb2QKKycKKworY2F0ID5leHBlY3QuZGVlcG1vZGlmaWVkIDw8RU9GCisgTSBzdWJtb2Qvc3Vic3VibW9kCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3Vic3VibW9kdWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJKGNkIHN1Ym1vZCAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDE2MDAwMCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgc3Vic3VibW9kICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi51cmwgLi4vLiAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIucGF0aCBzdWJzdWJtb2QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIHN1YnN1Ym1vZHVsZSIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3Vic3VibW9kCisJKSAmJgorCWdpdCBjb21taXQgLWEgLW0gImFkZGVkIGRlZXAgc3VibW9kdWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSByZWN1cnNpdmVseSByZW1vdmVzIHdvcmsgdHJlZSBvZiB1bm1vZGlmaWVkIHN1Ym1vZHVsZXMnICcKKwlnaXQgcm0gc3VibW9kICYmCisJdGVzdCAhIC1kIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIG5lc3RlZCBzdWJtb2R1bGUgd2l0aCBkaWZmZXJlbnQgbmVzdGVkIEhFQUQgZmFpbHMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSAmJgorCShjZCBzdWJtb2Qvc3Vic3VibW9kICYmCisJCWdpdCBjaGVja291dCBIRUFEXgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdCAtZCBzdWJtb2QgJiYKKwl0ZXN0IC1mIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZCBhY3R1YWwgJiYKKwlnaXQgcm0gLWYgc3VibW9kICYmCisJdGVzdCAhIC1kIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIG5lc3RlZCBzdWJtb2R1bGUgd2l0aCBuZXN0ZWQgbW9kaWZpY2F0aW9ucyBmYWlscyB1bmxlc3MgZm9yY2VkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlICYmCisJKGNkIHN1Ym1vZC9zdWJzdWJtb2QgJiYKKwkJZWNobyBYID5lbXB0eQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdCAtZCBzdWJtb2QgJiYKKwl0ZXN0IC1mIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZCBhY3R1YWwgJiYKKwlnaXQgcm0gLWYgc3VibW9kICYmCisJdGVzdCAhIC1kIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIG5lc3RlZCBzdWJtb2R1bGUgd2l0aCBuZXN0ZWQgdW50cmFja2VkIGZpbGVzIGZhaWxzIHVubGVzcyBmb3JjZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUgJiYKKwkoY2Qgc3VibW9kL3N1YnN1Ym1vZCAmJgorCQllY2hvIFggPnVudHJhY2tlZAorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gc3VibW9kICYmCisJdGVzdCAtZCBzdWJtb2QgJiYKKwl0ZXN0IC1mIHN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tb2RpZmllZCBhY3R1YWwgJiYKKwlnaXQgcm0gLWYgc3VibW9kICYmCisJdGVzdCAhIC1kIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGEgcG9wdWxhdGVkIG5lc3RlZCBzdWJtb2R1bGUgd2l0aCBhIG5lc3RlZCAuZ2l0IGRpcmVjdG9yeSBmYWlscyBldmVuIHdoZW4gZm9yY2VkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlICYmCisJKGNkIHN1Ym1vZC9zdWJzdWJtb2QgJiYKKwkJcm0gLmdpdCAmJgorCQljcCAtUiAuLi8uLi8uZ2l0L21vZHVsZXMvc3ViL21vZHVsZXMvc3ViIC5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0uIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBzdWJtb2QgJiYKKwl0ZXN0IC1kIHN1Ym1vZCAmJgorCXRlc3QgLWQgc3VibW9kL3N1YnN1Ym1vZC8uZ2l0ICYmCisJZ2l0IHN0YXR1cyAtcyAtdW5vIC0taWdub3JlLXN1Ym1vZHVsZXM9bm9uZSA+IGFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gLWYgc3VibW9kICYmCisJdGVzdCAtZCBzdWJtb2QgJiYKKwl0ZXN0IC1kIHN1Ym1vZC9zdWJzdWJtb2QvLmdpdCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwkhIHRlc3QgLXMgYWN0dWFsICYmCisJcm0gLXJmIHN1Ym1vZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyBvdXQgYSBjb21taXQgYWZ0ZXIgc3VibW9kdWxlIHJlbW92YWwgbmVlZHMgbWFudWFsIHVwZGF0ZXMnICcKKwlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgcmVtb3ZhbCIgc3VibW9kICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgY2hlY2tvdXQgLXEgSEVBRF4gMj5hY3R1YWwgJiYKKwlnaXQgY2hlY2tvdXQgLXEgbWFzdGVyIDI+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiXndhcm5pbmc6IHVuYWJsZSB0byBybWRpciBzdWJtb2Q6IiBhY3R1YWwgJiYKKwlnaXQgc3RhdHVzIC1zIHN1Ym1vZCA+YWN0dWFsICYmCisJZWNobyAiPz8gc3VibW9kLyIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJcm0gLXJmIHN1Ym1vZCAmJgorCWdpdCBzdGF0dXMgLXMgLXVubyAtLWlnbm9yZS1zdWJtb2R1bGVzPW5vbmUgPiBhY3R1YWwgJiYKKwkhIHRlc3QgLXMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIG9mIGQvZiB3aGVuIGQgaGFzIGJlY29tZSBhIG5vbi1kaXJlY3RvcnknICcKKwlybSAtcmYgZCAmJgorCW1rZGlyIGQgJiYKKwk+ZC9mICYmCisJZ2l0IGFkZCBkICYmCisJcm0gLXJmIGQgJiYKKwk+ZCAmJgorCWdpdCBybSBkL2YgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDpkL2YgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3JtIG9mIGQvZiB3aGVuIGQgaGFzIGJlY29tZSBhIGRhbmdsaW5nIHN5bWxpbmsnICcKKwlybSAtcmYgZCAmJgorCW1rZGlyIGQgJiYKKwk+ZC9mICYmCisJZ2l0IGFkZCBkICYmCisJcm0gLXJmIGQgJiYKKwlsbiAtcyBub25leGlzdGVudCBkICYmCisJZ2l0IHJtIGQvZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOmQvZiAmJgorCXRlc3QgLWggZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gb2YgZmlsZSB3aGVuIGl0IGhhcyBiZWNvbWUgYSBkaXJlY3RvcnknICcKKwlybSAtcmYgZCAmJgorCT5kICYmCisJZ2l0IGFkZCBkICYmCisJcm0gLWYgZCAmJgorCW1rZGlyIGQgJiYKKwk+ZC9mICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDpkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZC9mCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3JtIGFjcm9zcyBhIHN5bWxpbmtlZCBsZWFkaW5nIHBhdGggKG5vIGluZGV4KScgJworCXJtIC1yZiBkIGUgJiYKKwlta2RpciBlICYmCisJZWNobyBjb250ZW50ID5lL2YgJiYKKwlsbiAtcyBlIGQgJiYKKwlnaXQgYWRkIC1BIGUgZCAmJgorCWdpdCBjb21taXQgLW0gInN5bWxpbmsgZCB0byBlLCBlL2YgZXhpc3RzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBkL2YgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDpkICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6ZS9mICYmCisJdGVzdCAtaCBkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZS9mCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgU1lNTElOS1MgJ3JtIGFjcm9zcyBhIHN5bWxpbmtlZCBsZWFkaW5nIHBhdGggKHcvIGluZGV4KScgJworCXJtIC1yZiBkIGUgJiYKKwlta2RpciBkICYmCisJZWNobyBjb250ZW50ID5kL2YgJiYKKwlnaXQgYWRkIC1BIGUgZCAmJgorCWdpdCBjb21taXQgLW0gImQvZiBleGlzdHMiICYmCisJbXYgZCBlICYmCisJbG4gLXMgZSBkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGQvZiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOmQvZiAmJgorCXRlc3QgLWggZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGUvZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgdGVzdGluZyBybSBtZXNzYWdlcycgJworCT5iYXIudHh0ICYmCisJPmZvby50eHQgJiYKKwlnaXQgYWRkIGJhci50eHQgZm9vLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBmaWxlcyB3aXRoIGRpZmZlcmVudCBzdGFnZWQgY29udGVudCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlcyBoYXZlIHN0YWdlZCBjb250ZW50IGRpZmZlcmVudCBmcm9tIGJvdGggdGhlCisJZmlsZSBhbmQgdGhlIEhFQUQ6CisJICAgIGJhci50eHQKKwkgICAgZm9vLnR4dAorCSh1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkKKwlFT0YKKwllY2hvIGNvbnRlbnQxID5mb28udHh0ICYmCisJZWNobyBjb250ZW50MSA+YmFyLnR4dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSBmb28udHh0IGJhci50eHQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBmaWxlcyB3aXRoIGRpZmZlcmVudCBzdGFnZWQgY29udGVudCB3aXRob3V0IGhpbnRzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWVycm9yOiB0aGUgZm9sbG93aW5nIGZpbGVzIGhhdmUgc3RhZ2VkIGNvbnRlbnQgZGlmZmVyZW50IGZyb20gYm90aCB0aGUKKwlmaWxlIGFuZCB0aGUgSEVBRDoKKwkgICAgYmFyLnR4dAorCSAgICBmb28udHh0CisJRU9GCisJZWNobyBjb250ZW50MiA+Zm9vLnR4dCAmJgorCWVjaG8gY29udGVudDIgPmJhci50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgYWR2aWNlLnJtaGludHM9ZmFsc2Ugcm0gZm9vLnR4dCBiYXIudHh0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZmlsZSB3aXRoIGxvY2FsIG1vZGlmaWNhdGlvbicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlIGhhcyBsb2NhbCBtb2RpZmljYXRpb25zOgorCSAgICBmb28udHh0CisJKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKQorCUVPRgorCWdpdCBjb21taXQgLW0gInRlc3Rpbmcgcm0gMyIgJiYKKwllY2hvIGNvbnRlbnQzID5mb28udHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJtIGZvby50eHQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdybSBmaWxlIHdpdGggbG9jYWwgbW9kaWZpY2F0aW9uIHdpdGhvdXQgaGludHMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZXJyb3I6IHRoZSBmb2xsb3dpbmcgZmlsZSBoYXMgbG9jYWwgbW9kaWZpY2F0aW9uczoKKwkgICAgYmFyLnR4dAorCUVPRgorCWVjaG8gY29udGVudDQgPmJhci50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgYWR2aWNlLnJtaGludHM9ZmFsc2Ugcm0gYmFyLnR4dCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIGZpbGUgd2l0aCBjaGFuZ2VzIGluIHRoZSBpbmRleCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6CisJICAgIGZvby50eHQKKwkodXNlIC0tY2FjaGVkIHRvIGtlZXAgdGhlIGZpbGUsIG9yIC1mIHRvIGZvcmNlIHJlbW92YWwpCisJRU9GCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gY29udGVudDUgPmZvby50eHQgJiYKKwlnaXQgYWRkIGZvby50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gZm9vLnR4dCAyPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JtIGZpbGUgd2l0aCBjaGFuZ2VzIGluIHRoZSBpbmRleCB3aXRob3V0IGhpbnRzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWVycm9yOiB0aGUgZm9sbG93aW5nIGZpbGUgaGFzIGNoYW5nZXMgc3RhZ2VkIGluIHRoZSBpbmRleDoKKwkgICAgZm9vLnR4dAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBhZHZpY2Uucm1oaW50cz1mYWxzZSBybSBmb28udHh0IDI+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gZmlsZXMgd2l0aCB0d28gZGlmZmVyZW50IGVycm9ycycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlIGhhcyBzdGFnZWQgY29udGVudCBkaWZmZXJlbnQgZnJvbSBib3RoIHRoZQorCWZpbGUgYW5kIHRoZSBIRUFEOgorCSAgICBmb28xLnR4dAorCSh1c2UgLWYgdG8gZm9yY2UgcmVtb3ZhbCkKKwllcnJvcjogdGhlIGZvbGxvd2luZyBmaWxlIGhhcyBjaGFuZ2VzIHN0YWdlZCBpbiB0aGUgaW5kZXg6CisJICAgIGJhcjEudHh0CisJKHVzZSAtLWNhY2hlZCB0byBrZWVwIHRoZSBmaWxlLCBvciAtZiB0byBmb3JjZSByZW1vdmFsKQorCUVPRgorCWVjaG8gY29udGVudCA+Zm9vMS50eHQgJiYKKwlnaXQgYWRkIGZvbzEudHh0ICYmCisJZWNobyBjb250ZW50NiA+Zm9vMS50eHQgJiYKKwllY2hvIGNvbnRlbnQ2ID5iYXIxLnR4dCAmJgorCWdpdCBhZGQgYmFyMS50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcm0gYmFyMS50eHQgZm9vMS50eHQgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM3MDAtYWRkLnNoIGIvdC90MzcwMC1hZGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjdmZjFmNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM3MDAtYWRkLnNoCkBAIC0wLDAgKzEsMzM1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IENhcmwgRC4gV29ydGgKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBvZiBnaXQgYWRkLCBpbmNsdWRpbmcgdGhlIC0tIG9wdGlvbi4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnVGVzdCBvZiBnaXQgYWRkJyBcCisgICAgJ3RvdWNoIGZvbyAmJiBnaXQgYWRkIGZvbycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Bvc3QtY2hlY2sgdGhhdCBmb28gaXMgaW4gdGhlIGluZGV4JyBcCisgICAgJ2dpdCBscy1maWxlcyBmb28gfCBncmVwIGZvbycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1Rlc3QgdGhhdCAiZ2l0IGFkZCAtLSAtcSIgd29ya3MnIFwKKyAgICAndG91Y2ggLS0gLXEgJiYgZ2l0IGFkZCAtLSAtcScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2dpdCBhZGQ6IFRlc3QgdGhhdCBleGVjdXRhYmxlIGJpdCBpcyBub3QgdXNlZCBpZiBjb3JlLmZpbGVtb2RlPTAnIFwKKwknZ2l0IGNvbmZpZyBjb3JlLmZpbGVtb2RlIDAgJiYKKwkgZWNobyBmb28gPnhmb28xICYmCisJIGNobW9kIDc1NSB4Zm9vMSAmJgorCSBnaXQgYWRkIHhmb28xICYmCisJIGNhc2UgImBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMWAiIGluCisJIDEwMDY0NCIgIip4Zm9vMSkgZWNobyBwYXNzOzsKKwkgKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMTsgKGV4aXQgMSk7OworCSBlc2FjJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkOiBmaWxlbW9kZT0wIHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIGJ5IHN5bWxpbmsnICcKKwlybSAtZiB4Zm9vMSAmJgorCXRlc3RfbG5fc19hZGQgZm9vIHhmb28xICYmCisJY2FzZSAiYGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28xYCIgaW4KKwkxMjAwMDAiICIqeGZvbzEpIGVjaG8gcGFzczs7CisJKikgZWNobyBmYWlsOyBnaXQgbHMtZmlsZXMgLS1zdGFnZSB4Zm9vMTsgKGV4aXQgMSk7OworCWVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQ6IFRlc3QgdGhhdCBleGVjdXRhYmxlIGJpdCBpcyBub3QgdXNlZC4uLicgXAorCSdnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgMCAmJgorCSBlY2hvIGZvbyA+eGZvbzIgJiYKKwkgY2htb2QgNzU1IHhmb28yICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgeGZvbzIgJiYKKwkgY2FzZSAiYGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28yYCIgaW4KKwkgMTAwNjQ0IiAiKnhmb28yKSBlY2hvIHBhc3M7OworCSAqKSBlY2hvIGZhaWw7IGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28yOyAoZXhpdCAxKTs7CisJIGVzYWMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQ6IGZpbGVtb2RlPTAgc2hvdWxkIG5vdCBnZXQgY29uZnVzZWQgYnkgc3ltbGluaycgJworCXJtIC1mIHhmb28yICYmCisJdGVzdF9sbl9zX2FkZCBmb28geGZvbzIgJiYKKwljYXNlICJgZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgeGZvbzJgIiBpbgorCTEyMDAwMCIgIip4Zm9vMikgZWNobyBwYXNzOzsKKwkqKSBlY2hvIGZhaWw7IGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28yOyAoZXhpdCAxKTs7CisJZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZDogVGVzdCB0aGF0IGV4ZWN1dGFibGUgYml0IGlzIG5vdCB1c2VkLi4uJyBcCisJJ2dpdCBjb25maWcgY29yZS5maWxlbW9kZSAwICYmCisJIHRlc3RfbG5fc19hZGQgeGZvbzIgeGZvbzMgJiYJIyBydW5zIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQKKwkgY2FzZSAiYGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28zYCIgaW4KKwkgMTIwMDAwIiAiKnhmb28zKSBlY2hvIHBhc3M7OworCSAqKSBlY2hvIGZhaWw7IGdpdCBscy1maWxlcyAtLXN0YWdlIHhmb28zOyAoZXhpdCAxKTs7CisJIGVzYWMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRpZ25vcmUgdGVzdCBzZXR1cCcgJworCWVjaG8gIiouaWciID4uZ2l0aWdub3JlICYmCisJbWtkaXIgYy5pZiBkLmlnICYmCisJPmEuaWcgJiYgPmIuaWYgJiYKKwk+Yy5pZi9jLmlmICYmID5jLmlmL2MuaWcgJiYKKwk+ZC5pZy9kLmlmICYmID5kLmlnL2QuaWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdGlnbm9yZSBpcyBob25vcmVkJyAnCisJZ2l0IGFkZCAuICYmCisJISAoZ2l0IGxzLWZpbGVzIHwgZ3JlcCAiXFwuaWciKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBvdXQgd2hlbiBhdHRlbXB0aW5nIHRvIGFkZCBpZ25vcmVkIG9uZXMgd2l0aG91dCAtZicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgYS4/PyAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIlxcLmlnIikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXJyb3Igb3V0IHdoZW4gYXR0ZW1wdGluZyB0byBhZGQgaWdub3JlZCBvbmVzIHdpdGhvdXQgLWYnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGQuPz8gJiYKKwkhIChnaXQgbHMtZmlsZXMgfCBncmVwICJcXC5pZyIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIG91dCB3aGVuIGF0dGVtcHRpbmcgdG8gYWRkIGlnbm9yZWQgb25lcyBidXQgYWRkIG90aGVycycgJworCXRvdWNoIGEuaWYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIGEuPz8gJiYKKwkhIChnaXQgbHMtZmlsZXMgfCBncmVwICJcXC5pZyIpICYmCisJKGdpdCBscy1maWxlcyB8IGdyZXAgYS5pZikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGlnbm9yZWQgb25lcyB3aXRoIC1mJyAnCisJZ2l0IGFkZCAtZiBhLj8/ICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBhLmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBpZ25vcmVkIG9uZXMgd2l0aCAtZicgJworCWdpdCBhZGQgLWYgZC4/Py8qICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBkLmlnL2QuaWYgZC5pZy9kLmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBpZ25vcmVkIG9uZXMgd2l0aCAtZicgJworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIC1mIGQuPz8gJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGQuaWcvZC5pZiBkLmlnL2QuaWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLmdpdGlnbm9yZSB3aXRoIHN1YmRpcmVjdG9yeScgJworCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCW1rZGlyIC1wIHN1Yi9kaXIgJiYKKwllY2hvICIhZGlyL2EuKiIgPnN1Yi8uZ2l0aWdub3JlICYmCisJPnN1Yi9hLmlnICYmCisJPnN1Yi9kaXIvYS5pZyAmJgorCWdpdCBhZGQgc3ViL2RpciAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggc3ViL2Rpci9hLmlnICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCSgKKwkJY2Qgc3ViL2RpciAmJgorCQlnaXQgYWRkIC4KKwkpICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBzdWIvZGlyL2EuaWcKKycKKworbWtkaXIgMSAxLzIgMS8zCit0b3VjaCAxLzIvYSAxLzMvYiAxLzIvYwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29ycmVjdCBwcmVmaXggZGV0ZWN0aW9uJyAnCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgMS8yL2EgMS8zL2IgMS8yL2MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCB3aXRoIGZpbGVtb2RlPTAsIHN5bWxpbmtzPTAsIGFuZCB1bm1lcmdlZCBlbnRyaWVzJyAnCisJZm9yIHMgaW4gMSAyIDMKKwlkbworCQllY2hvICRzID4gc3RhZ2UkcworCQllY2hvICIxMDA3NTUgJChnaXQgaGFzaC1vYmplY3QgLXcgc3RhZ2UkcykgJHMJZmlsZSIKKwkJZWNobyAiMTIwMDAwICQocHJpbnRmICRzIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC10IGJsb2IgLS1zdGRpbikgJHMJc3ltbGluayIKKwlkb25lIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlnaXQgY29uZmlnIGNvcmUuZmlsZW1vZGUgMCAmJgorCWdpdCBjb25maWcgY29yZS5zeW1saW5rcyAwICYmCisJZWNobyBuZXcgPiBmaWxlICYmCisJZWNobyBuZXcgPiBzeW1saW5rICYmCisJZ2l0IGFkZCBmaWxlIHN5bWxpbmsgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IGdyZXAgIl4xMDA3NTUgLiogMAlmaWxlJCIgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSB8IGdyZXAgIl4xMjAwMDAgLiogMAlzeW1saW5rJCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCB3aXRoIGZpbGVtb2RlPTAsIHN5bWxpbmtzPTAgcHJlZmVycyBzdGFnZSAyIG92ZXIgc3RhZ2UgMScgJworCWdpdCBybSAtLWNhY2hlZCAtZiBmaWxlIHN5bWxpbmsgJiYKKwkoCisJCWVjaG8gIjEwMDY0NCAkKGdpdCBoYXNoLW9iamVjdCAtdyBzdGFnZTEpIDEJZmlsZSIKKwkJZWNobyAiMTAwNzU1ICQoZ2l0IGhhc2gtb2JqZWN0IC13IHN0YWdlMikgMglmaWxlIgorCQllY2hvICIxMDA2NDQgJChwcmludGYgMSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtdCBibG9iIC0tc3RkaW4pIDEJc3ltbGluayIKKwkJZWNobyAiMTIwMDAwICQocHJpbnRmIDIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLXQgYmxvYiAtLXN0ZGluKSAyCXN5bWxpbmsiCisJKSB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJZ2l0IGNvbmZpZyBjb3JlLmZpbGVtb2RlIDAgJiYKKwlnaXQgY29uZmlnIGNvcmUuc3ltbGlua3MgMCAmJgorCWVjaG8gbmV3ID4gZmlsZSAmJgorCWVjaG8gbmV3ID4gc3ltbGluayAmJgorCWdpdCBhZGQgZmlsZSBzeW1saW5rICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgfCBncmVwICJeMTAwNzU1IC4qIDAJZmlsZSQiICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgfCBncmVwICJeMTIwMDAwIC4qIDAJc3ltbGluayQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLS1yZWZyZXNoJyAnCisJPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tICJjb21taXQgYWxsIiAmJgorCXRlc3QgLXogImBnaXQgZGlmZi1pbmRleCBIRUFEIC0tIGZvb2AiICYmCisJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJY2FzZSAiYGdpdCBkaWZmLWluZGV4IEhFQUQgLS0gZm9vYCIgaW4KKwk6MTAwNjQ0IiAiKiJNCWZvbyIpIGVjaG8gcGFzczs7CisJKikgZWNobyBmYWlsOyAoZXhpdCAxKTs7CisJZXNhYyAmJgorCWdpdCBhZGQgLS1yZWZyZXNoIC0tIGZvbyAmJgorCXRlc3QgLXogImBnaXQgZGlmZi1pbmRleCBIRUFEIC0tIGZvb2AiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLS1yZWZyZXNoIHdpdGggcGF0aHNwZWMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyA+Zm9vICYmIGVjaG8gPmJhciAmJiBlY2hvID5iYXogJiYKKwlnaXQgYWRkIGZvbyBiYXIgYmF6ICYmIEg9JChnaXQgcmV2LXBhcnNlIDpmb28pICYmIGdpdCBybSAtZiBmb28gJiYKKwllY2hvICIxMDA2NDQgJEggMwlmb28iIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwl0ZXN0LWNobXRpbWUgLTYwIGJhciBiYXogJiYKKwk+ZXhwZWN0ICYmCisJZ2l0IGFkZCAtLXJlZnJlc2ggYmFyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seSA+YWN0dWFsICYmCisJISBncmVwIGJhciBhY3R1YWwmJgorCWdyZXAgYmF6IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ2dpdCBhZGQgc2hvdWxkIGZhaWwgYXRvbWljYWxseSB1cG9uIGFuIHVucmVhZGFibGUgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlkYXRlID5mb28xICYmCisJZGF0ZSA+Zm9vMiAmJgorCWNobW9kIDAgZm9vMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC4gJiYKKwkhICggZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEgKQorJworCitybSAtZiBmb28yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnZ2l0IGFkZCAtLWlnbm9yZS1lcnJvcnMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZGF0ZSA+Zm9vMSAmJgorCWRhdGUgPmZvbzIgJiYKKwljaG1vZCAwIGZvbzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tdmVyYm9zZSAtLWlnbm9yZS1lcnJvcnMgLiAmJgorCWdpdCBscy1maWxlcyBmb28xIHwgZ3JlcCBmb28xCisnCisKK3JtIC1mIGZvbzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdnaXQgYWRkIChhZGQuaWdub3JlLWVycm9ycyknICcKKwlnaXQgY29uZmlnIGFkZC5pZ25vcmUtZXJyb3JzIDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZGF0ZSA+Zm9vMSAmJgorCWRhdGUgPmZvbzIgJiYKKwljaG1vZCAwIGZvbzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIC0tdmVyYm9zZSAuICYmCisJZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEKKycKK3JtIC1mIGZvbzIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdnaXQgYWRkIChhZGQuaWdub3JlLWVycm9ycyA9IGZhbHNlKScgJworCWdpdCBjb25maWcgYWRkLmlnbm9yZS1lcnJvcnMgMCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlkYXRlID5mb28xICYmCisJZGF0ZSA+Zm9vMiAmJgorCWNobW9kIDAgZm9vMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS12ZXJib3NlIC4gJiYKKwkhICggZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEgKQorJworcm0gLWYgZm9vMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJy0tbm8taWdub3JlLWVycm9ycyBvdmVycmlkZXMgY29uZmlnJyAnCisgICAgICAgZ2l0IGNvbmZpZyBhZGQuaWdub3JlLWVycm9ycyAxICYmCisgICAgICAgZ2l0IHJlc2V0IC0taGFyZCAmJgorICAgICAgIGRhdGUgPmZvbzEgJiYKKyAgICAgICBkYXRlID5mb28yICYmCisgICAgICAgY2htb2QgMCBmb28yICYmCisgICAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtLXZlcmJvc2UgLS1uby1pZ25vcmUtZXJyb3JzIC4gJiYKKyAgICAgICAhICggZ2l0IGxzLWZpbGVzIGZvbzEgfCBncmVwIGZvbzEgKSAmJgorICAgICAgIGdpdCBjb25maWcgYWRkLmlnbm9yZS1lcnJvcnMgMAorJworcm0gLWYgZm9vMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEJTTEFTSFBTUEVDICJnaXQgYWRkICdmb1xcW291XFxdYmFyJyBpZ25vcmVzIGZvb2JhciIgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0b3VjaCBmb1xbb3VcXWJhciBmb29iYXIgJiYKKwlnaXQgYWRkICdcJydmb1xbb3VcXWJhcidcJycgJiYKKwlnaXQgbHMtZmlsZXMgZm9cW291XF1iYXIgfCBmZ3JlcCBmb1xbb3VcXWJhciAmJgorCSEgKCBnaXQgbHMtZmlsZXMgZm9vYmFyIHwgZ3JlcCBmb29iYXIgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIHRvIHJlc29sdmUgY29uZmxpY3RzIG9uIG90aGVyd2lzZSBpZ25vcmVkIHBhdGgnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJSD0kKGdpdCByZXYtcGFyc2UgOjEvMi9hKSAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRIIDEJdHJhY2stdGhpcyIKKwkJZWNobyAiMTAwNjQ0ICRIIDMJdHJhY2stdGhpcyIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwllY2hvIHRyYWNrLXRoaXMgPj4uZ2l0aWdub3JlICYmCisJZWNobyByZXNvbHZlZCA+dHJhY2stdGhpcyAmJgorCWdpdCBhZGQgdHJhY2stdGhpcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYWRkIG5vbi1leGlzdGVudCIgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkIG5vbi1leGlzdGVudCAmJgorCSEgKGdpdCBscy1maWxlcyB8IGdyZXAgIm5vbi1leGlzdGVudCIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLUEgb24gZW1wdHkgcmVwbyBkb2VzIG5vdCBlcnJvciBvdXQnICcKKwlybSAtZnIgZW1wdHkgJiYKKwlnaXQgaW5pdCBlbXB0eSAmJgorCSgKKwkJY2QgZW1wdHkgJiYKKwkJZ2l0IGFkZCAtQSAuICYmCisJCWdpdCBhZGQgLUEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgYWRkIC4iIGluIGVtcHR5IHJlcG8nICcKKwlybSAtZnIgZW1wdHkgJiYKKwlnaXQgaW5pdCBlbXB0eSAmJgorCSgKKwkJY2QgZW1wdHkgJiYKKwkJZ2l0IGFkZCAuCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIC0tZHJ5LXJ1biBvZiBleGlzdGluZyBjaGFuZ2VkIGZpbGUnICIKKwllY2hvIG5ldyA+PnRyYWNrLXRoaXMgJiYKKwlnaXQgYWRkIC0tZHJ5LXJ1biB0cmFjay10aGlzID5hY3R1YWwgMj4mMSAmJgorCWVjaG8gXCJhZGQgJ3RyYWNrLXRoaXMnXCIgfCB0ZXN0X2NtcCAtIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIC0tZHJ5LXJ1biBvZiBub24tZXhpc3RpbmcgZmlsZScgIgorCWVjaG8gaWdub3JlZC1maWxlID4+LmdpdGlnbm9yZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS1kcnktcnVuIHRyYWNrLXRoaXMgaWdub3JlZC1maWxlID5hY3R1YWwgMj4mMQorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYWRkIC0tZHJ5LXJ1biBvZiBhbiBleGlzdGluZyBmaWxlIG91dHB1dCcgIgorCWVjaG8gXCJmYXRhbDogcGF0aHNwZWMgJ2lnbm9yZWQtZmlsZScgZGlkIG5vdCBtYXRjaCBhbnkgZmlsZXNcIiA+ZXhwZWN0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKyIKKworY2F0ID5leHBlY3QuZXJyIDw8XEVPRgorVGhlIGZvbGxvd2luZyBwYXRocyBhcmUgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOgoraWdub3JlZC1maWxlCitVc2UgLWYgaWYgeW91IHJlYWxseSB3YW50IHRvIGFkZCB0aGVtLgorRU9GCitjYXQgPmV4cGVjdC5vdXQgPDxcRU9GCithZGQgJ3RyYWNrLXRoaXMnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAtLWRyeS1ydW4gLS1pZ25vcmUtbWlzc2luZyBvZiBub24tZXhpc3RpbmcgZmlsZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLS1kcnktcnVuIC0taWdub3JlLW1pc3NpbmcgdHJhY2stdGhpcyBpZ25vcmVkLWZpbGUgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgLS1kcnktcnVuIC0taWdub3JlLW1pc3Npbmcgb2Ygbm9uLWV4aXN0aW5nIGZpbGUgb3V0cHV0JyAnCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaCBiL3QvdDM3MDEtYWRkLWludGVyYWN0aXZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRlYWU5NDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzNzAxLWFkZC1pbnRlcmFjdGl2ZS5zaApAQCAtMCwwICsxLDM4MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FkZCAtaSBiYXNpYyB0ZXN0cycKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTAordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBhZGQgLWkgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIChpbml0aWFsKScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gbW9yZSA+PmZpbGUgJiYKKwllY2hvIGxpbmVzID4+ZmlsZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdvcmtzIChpbml0aWFsKScgJworCWdpdCBhZGQgLWkgPC9kZXYvbnVsbCA+b3V0cHV0ICYmCisJZ3JlcCAiKzEvLTAgKisyLy0wIGZpbGUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3RlZCcgJworY2F0ID5leHBlY3RlZCA8PEVPRgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ5NWYzYWQKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUKK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiB3b3JrcyAoaW5pdGlhbCknICcKKwkoZWNobyBkOyBlY2hvIDEpIHwgZ2l0IGFkZCAtaSA+b3V0cHV0ICYmCisJc2VkIC1uZSAiL25ldyBmaWxlLywvY29udGVudC9wIiA8b3V0cHV0ID5kaWZmICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlmZgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IHdvcmtzIChpbml0aWFsKScgJworCWdpdCBhZGQgZmlsZSAmJgorCShlY2hvIHI7IGVjaG8gMSkgfCBnaXQgYWRkIC1pICYmCisJZ2l0IGxzLWZpbGVzID5vdXRwdXQgJiYKKwkhIGdyZXAgLiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgKGNvbW1pdCknICcKKwllY2hvIGJhc2VsaW5lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBjb21taXQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyBtb3JlID4+ZmlsZSAmJgorCWVjaG8gbGluZXMgPj5maWxlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd29ya3MgKGNvbW1pdCknICcKKwlnaXQgYWRkIC1pIDwvZGV2L251bGwgPm91dHB1dCAmJgorCWdyZXAgIisxLy0wICorMi8tMCBmaWxlIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2luZGV4IDE4MGI0N2MuLmI2ZjJjMDggMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSArMSwyIEBACisgYmFzZWxpbmUKKytjb250ZW50CitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiB3b3JrcyAoY29tbWl0KScgJworCShlY2hvIGQ7IGVjaG8gMSkgfCBnaXQgYWRkIC1pID5vdXRwdXQgJiYKKwlzZWQgLW5lICIvXmluZGV4LywvY29udGVudC9wIiA8b3V0cHV0ID5kaWZmICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlmZgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJ0IHdvcmtzIChjb21taXQpJyAnCisJZ2l0IGFkZCBmaWxlICYmCisJKGVjaG8gcjsgZWNobyAxKSB8IGdpdCBhZGQgLWkgJiYKKwlnaXQgYWRkIC1pIDwvZGV2L251bGwgPm91dHB1dCAmJgorCWdyZXAgInVuY2hhbmdlZCAqKzMvLTAgZmlsZSIgb3V0cHV0CisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmYWtlIGVkaXRvcicgJworCT5mYWtlX2VkaXRvci5zaCAmJgorCWNobW9kIGEreCBmYWtlX2VkaXRvci5zaCAmJgorCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Zha2VfZWRpdG9yLnNoIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkdW1teSBlZGl0IHdvcmtzJyAnCisJKGVjaG8gZTsgZWNobyBhKSB8IGdpdCBhZGQgLXAgJiYKKwlnaXQgZGlmZiA+IGRpZmYgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHBhdGNoJyAnCitjYXQgPnBhdGNoIDw8RU9GCitAQCAtMSwxICsxLDQgQEAKKyB0aGlzCisrcGF0Y2gKKy1kb2VzIG5vdAorIGFwcGx5CitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZmFrZSBlZGl0b3InICcKKwllY2hvICIjISRTSEVMTF9QQVRIIiA+ZmFrZV9lZGl0b3Iuc2ggJiYKKwljYXQgPj5mYWtlX2VkaXRvci5zaCA8PFxFT0YgJiYKK212IC1mICIkMSIgb2xkcGF0Y2ggJiYKK212IC1mIHBhdGNoICIkMSIKK0VPRgorCWNobW9kIGEreCBmYWtlX2VkaXRvci5zaCAmJgorCXRlc3Rfc2V0X2VkaXRvciAiJChwd2QpL2Zha2VfZWRpdG9yLnNoIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYWQgZWRpdCByZWplY3RlZCcgJworCWdpdCByZXNldCAmJgorCShlY2hvIGU7IGVjaG8gbjsgZWNobyBkKSB8IGdpdCBhZGQgLXAgPm91dHB1dCAmJgorCWdyZXAgImh1bmsgZG9lcyBub3QgYXBwbHkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwYXRjaCcgJworY2F0ID5wYXRjaCA8PEVPRgordGhpcyBwYXRjaAoraXMgZ2FyYmFnZQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dhcmJhZ2UgZWRpdCByZWplY3RlZCcgJworCWdpdCByZXNldCAmJgorCShlY2hvIGU7IGVjaG8gbjsgZWNobyBkKSB8IGdpdCBhZGQgLXAgPm91dHB1dCAmJgorCWdyZXAgImh1bmsgZG9lcyBub3QgYXBwbHkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwYXRjaCcgJworY2F0ID5wYXRjaCA8PEVPRgorQEAgLTEsMCArMSwwIEBACisgYmFzZWxpbmUKKytjb250ZW50CisrbmV3Y29udGVudAorK2xpbmVzCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggYjVkZDZjOS4uZjkxMGFlOSAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDQgKzEsNCBAQAorIGJhc2VsaW5lCisgY29udGVudAorLW5ld2NvbnRlbnQKKyttb3JlCisgbGluZXMKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFsIGVkaXQgd29ya3MnICcKKwkoZWNobyBlOyBlY2hvIG47IGVjaG8gZCkgfCBnaXQgYWRkIC1wICYmCisJZ2l0IGRpZmYgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwIGZpbGVzIHNpbWlsYXJseSBhcyBjb21taXQgLWEnICcKKwlnaXQgcmVzZXQgJiYKKwllY2hvIGZpbGUgPi5naXRpZ25vcmUgJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUgJiYKKwllY2hvIHkgfCBnaXQgYWRkIC1wIGZpbGUgJiYKKwlnaXQgZGlmZiA+b3V0cHV0ICYmCisJZ2l0IHJlc2V0ICYmCisJZ2l0IGNvbW1pdCAtYW0gY29tbWl0ICYmCisJZ2l0IGRpZmYgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0cHV0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorJworcm0gLWYgLmdpdGlnbm9yZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdwYXRjaCBkb2VzIG5vdCBhZmZlY3QgbW9kZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJY2htb2QgK3ggZmlsZSAmJgorCXByaW50ZiAiblxcbnlcXG4iIHwgZ2l0IGFkZCAtcCAmJgorCWdpdCBzaG93IDpmaWxlIHwgZ3JlcCBjb250ZW50ICYmCisJZ2l0IGRpZmYgZmlsZSB8IGdyZXAgIm5ldyBtb2RlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdzdGFnZSBtb2RlIGJ1dCBub3QgaHVuaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJY2htb2QgK3ggZmlsZSAmJgorCXByaW50ZiAieVxcbm5cXG4iIHwgZ2l0IGFkZCAtcCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIGZpbGUgfCBncmVwICJuZXcgbW9kZSIgJiYKKwlnaXQgZGlmZiAgICAgICAgICBmaWxlIHwgZ3JlcCAiK2NvbnRlbnQiCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnc3RhZ2UgbW9kZSBhbmQgaHVuaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJY2htb2QgK3ggZmlsZSAmJgorCXByaW50ZiAieVxcbnlcXG4iIHwgZ2l0IGFkZCAtcCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIGZpbGUgfCBncmVwICJuZXcgbW9kZSIgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCBmaWxlIHwgZ3JlcCAiK2NvbnRlbnQiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiBmaWxlKSIKKycKKworIyBlbmQgb2YgdGVzdHMgZGlzYWJsZWQgd2hlbiBmaWxlbW9kZSBpcyBub3QgdXNhYmxlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGFnYWluJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfY2htb2QgK3ggZmlsZSAmJgorCWVjaG8gY29udGVudCA+PmZpbGUKKycKKworIyBXcml0ZSB0aGUgcGF0Y2ggZmlsZSB3aXRoIGEgbmV3IGxpbmUgYXQgdGhlIHRvcCBhbmQgYm90dG9tCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBwYXRjaCcgJworY2F0ID5wYXRjaCA8PEVPRgoraW5kZXggMTgwYjQ3Yy4uYjZmMmMwOCAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDIgKzEsNCBAQAorK2ZpcnN0bGluZQorIGJhc2VsaW5lCisgY29udGVudAorK2xhc3RsaW5lCitFT0YKKycKKworIyBFeHBlY3RlZCBvdXRwdXQsIHNpbWlsYXIgdG8gdGhlIHBhdGNoIGJ1dCB3LyBkaWZmIGF0IHRoZSB0b3AKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdGVkJyAnCitjYXQgPmV4cGVjdGVkIDw8RU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IGI2ZjJjMDguLjYxYjkwNTMgMTAwNzU1CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwyICsxLDQgQEAKKytmaXJzdGxpbmUKKyBiYXNlbGluZQorIGNvbnRlbnQKKytsYXN0bGluZQorRU9GCisnCisKKyMgVGVzdCBzcGxpdHRpbmcgdGhlIGZpcnN0IHBhdGNoLCB0aGVuIGFkZGluZyBib3RoCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZmlyc3QgbGluZSB3b3JrcycgJworCWdpdCBjb21taXQgLWFtICJjbGVhciBsb2NhbCBjaGFuZ2VzIiAmJgorCWdpdCBhcHBseSBwYXRjaCAmJgorCShlY2hvIHM7IGVjaG8geTsgZWNobyB5KSB8IGdpdCBhZGQgLXAgZmlsZSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID4gZGlmZiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2RpZmYgLS1naXQgYS9ub24tZW1wdHkgYi9ub24tZW1wdHkKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggZDk1ZjNhZC4uMDAwMDAwMAorLS0tIGEvbm9uLWVtcHR5CisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistY29udGVudAorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW5nIGEgbm9uLWVtcHR5IGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBjb250ZW50ID5ub24tZW1wdHkgJiYKKwlnaXQgYWRkIG5vbi1lbXB0eSAmJgorCWdpdCBjb21taXQgLW0gbm9uLWVtcHR5ICYmCisJcm0gbm9uLWVtcHR5ICYmCisJZWNobyB5IHwgZ2l0IGFkZCAtcCBub24tZW1wdHkgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+ZGlmZiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQnICcKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2RpZmYgLS1naXQgYS9lbXB0eSBiL2VtcHR5CitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IGU2OWRlMjkuLjAwMDAwMDAKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBhbiBlbXB0eSBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT4gZW1wdHkgJiYKKwlnaXQgYWRkIGVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSBlbXB0eSAmJgorCXJtIGVtcHR5ICYmCisJZWNobyB5IHwgZ2l0IGFkZCAtcCBlbXB0eSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5kaWZmICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzcGxpdCBodW5rIHNldHVwJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWZvciBpIGluIDEwIDIwIDMwIDQwIDUwIDYwCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnRlc3QgJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHRlc3QgJiYKKworCWZvciBpIGluIDEwIDE1IDIwIDIxIDIyIDIzIDI0IDMwIDQwIDUwIDYwCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgaHVuayAiYWRkIC1wIChlZGl0KSInICcKKwkjIFNwbGl0LCBzYXkgRWRpdCBhbmQgZG8gbm90aGluZy4gIFRoZW46CisJIworCSMgMS4gQnJva2VuIHZlcnNpb24gcmVzdWx0cyBpbiBhIHBhdGNoIHRoYXQgZG9lcyBub3QgYXBwbHkgYW5kCisJIyBvbmx5IHRha2VzIFt5L25dIChlZGl0IGFnYWluKSBzbyB0aGUgZmlyc3QgcSBpcyBkaXNjYXJkZWQKKwkjIGFuZCB0aGVuIG4gYXR0ZW1wdHMgdG8gZGlzY2FyZCB0aGUgZWRpdC4gUmVwZWF0IHEgZW5vdWdoCisJIyB0aW1lcyB0byBnZXQgb3V0LgorCSMKKwkjIDIuIENvcnJlY3QgdmVyc2lvbiBhcHBsaWVzIHRoZSAobm90KWVkaXRlZCB2ZXJzaW9uLCBhbmQgYXNrcworCSMgICAgYWJvdXQgdGhlIG5leHQgaHVuaywgYWdhaW5zdCB3aGljaCB3ZSBzYXkgcSBhbmQgcHJvZ3JhbQorCSMgICAgZXhpdHMuCisJcHJpbnRmICIlc1xuIiBzIGUgICAgIHEgbiBxIHEgfAorCUVESVRPUj06IGdpdCBhZGQgLXAgJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJISBncmVwICJeKzE1IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnc3BsaXQgaHVuayAiYWRkIC1wIChubywgeWVzLCBlZGl0KSInICcKKwljYXQgPnRlc3QgPDwtXEVPRiAmJgorCTUKKwkxMAorCTIwCisJMjEKKwkzMAorCTMxCisJNDAKKwk1MAorCTYwCisJRU9GCisJZ2l0IHJlc2V0ICYmCisJIyB0ZXN0IHNlcXVlbmNlIGlzIHMocGxpdCksIG4obyksIHkoZXMpLCBlKGRpdCkKKwkjIHEgbiBxIHEgaXMgdGhlcmUgdG8gbWFrZSBzdXJlIHdlIGV4aXQgYXQgdGhlIGVuZC4KKwlwcmludGYgIiVzXG4iIHMgbiB5IGUgICBxIG4gcSBxIHwKKwlFRElUT1I9OiBnaXQgYWRkIC1wIDI+ZXJyb3IgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyb3IgJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJISBncmVwICJeKzMxIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggbW9kZSBpZ25vcmVzIHVubWVyZ2VkIGVudHJpZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9jb21taXQgY29uZmxpY3QgJiYKKwl0ZXN0X2NvbW1pdCBub24tY29uZmxpY3QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCXRlc3RfY29tbWl0IHNpZGUgY29uZmxpY3QudCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXIgY29uZmxpY3QudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzaWRlICYmCisJZWNobyBjaGFuZ2VkID5ub24tY29uZmxpY3QudCAmJgorCWVjaG8geSB8IGdpdCBhZGQgLXAgPm91dHB1dCAmJgorCSEgZ3JlcCBhL2NvbmZsaWN0LnQgb3V0cHV0ICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJKiBVbm1lcmdlZCBwYXRoIGNvbmZsaWN0LnQKKwlkaWZmIC0tZ2l0IGEvbm9uLWNvbmZsaWN0LnQgYi9ub24tY29uZmxpY3QudAorCWluZGV4IGY3NjYyMjEuLjVlYTJlZDQgMTAwNjQ0CisJLS0tIGEvbm9uLWNvbmZsaWN0LnQKKwkrKysgYi9ub24tY29uZmxpY3QudAorCUBAIC0xICsxIEBACisJLW5vbi1jb25mbGljdAorCStjaGFuZ2VkCisJRU9GCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmRpZmYgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaWZmCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMi1hZGQtZWRpdC5zaCBiL3QvdDM3MDItYWRkLWVkaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2NiNzRjYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM3MDItYWRkLWVkaXQuc2gKQEAgLTAsMCArMSwxMjggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdhZGQgLWUgYmFzaWMgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKworCitjYXQgPiBmaWxlIDw8IEVPRgorTE8sIHByYWlzZSBvZiB0aGUgcHJvd2VzcyBvZiBwZW9wbGUta2luZ3MKK29mIHNwZWFyLWFybWVkIERhbmVzLCBpbiBkYXlzIGxvbmcgc3BlZCwKK3dlIGhhdmUgaGVhcmQsIGFuZCB3aGF0IGhvbm9yIHRoZSBhdGhlbGluZ3Mgd29uIQorT2Z0IFNjeWxkIHRoZSBTY2VmaW5nIGZyb20gc3F1YWRyb25lZCBmb2VzLAorZnJvbSBtYW55IGEgdHJpYmUsIHRoZSBtZWFkLWJlbmNoIHRvcmUsCithd2luZyB0aGUgZWFybHMuIFNpbmNlIGVyc3QgaGUgbGF5CitmcmllbmRsZXNzLCBhIGZvdW5kbGluZywgZmF0ZSByZXBhaWQgaGltOgorZm9yIGhlIHdheGVkIHVuZGVyIHdlbGtpbiwgaW4gd2VhbHRoIGhlIHRocm92ZSwKK3RpbGwgYmVmb3JlIGhpbSB0aGUgZm9saywgYm90aCBmYXIgYW5kIG5lYXIsCit3aG8gaG91c2UgYnkgdGhlIHdoYWxlLXBhdGgsIGhlYXJkIGhpcyBtYW5kYXRlLAorZ2F2ZSBoaW0gZ2lmdHM6ICBhIGdvb2Qga2luZyBoZSEKK0VPRgorCitjYXQgPiBzZWNvbmQtcGFydCA8PCBFT0YKK1RvIGhpbSBhbiBoZWlyIHdhcyBhZnRlcndhcmQgYm9ybiwKK2Egc29uIGluIGhpcyBoYWxscywgd2hvbSBoZWF2ZW4gc2VudAordG8gZmF2b3IgdGhlIGZvbGssIGZlZWxpbmcgdGhlaXIgd29lCit0aGF0IGVyc3QgdGhleSBoYWQgbGFja2VkIGFuIGVhcmwgZm9yIGxlYWRlcgorc28gbG9uZyBhIHdoaWxlOyB0aGUgTG9yZCBlbmRvd2VkIGhpbSwKK3RoZSBXaWVsZGVyIG9mIFdvbmRlciwgd2l0aCB3b3JsZCdzIHJlbm93bi4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsIGZpbGUKKworJworCitjYXQgPiBleHBlY3RlZC1wYXRjaCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggYjk4MzRiNS4uOTAyMGFjYiAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDExICsxLDYgQEAKKy1MTywgcHJhaXNlIG9mIHRoZSBwcm93ZXNzIG9mIHBlb3BsZS1raW5ncworLW9mIHNwZWFyLWFybWVkIERhbmVzLCBpbiBkYXlzIGxvbmcgc3BlZCwKKy13ZSBoYXZlIGhlYXJkLCBhbmQgd2hhdCBob25vciB0aGUgYXRoZWxpbmdzIHdvbiEKKy1PZnQgU2N5bGQgdGhlIFNjZWZpbmcgZnJvbSBzcXVhZHJvbmVkIGZvZXMsCistZnJvbSBtYW55IGEgdHJpYmUsIHRoZSBtZWFkLWJlbmNoIHRvcmUsCistYXdpbmcgdGhlIGVhcmxzLiBTaW5jZSBlcnN0IGhlIGxheQorLWZyaWVuZGxlc3MsIGEgZm91bmRsaW5nLCBmYXRlIHJlcGFpZCBoaW06CistZm9yIGhlIHdheGVkIHVuZGVyIHdlbGtpbiwgaW4gd2VhbHRoIGhlIHRocm92ZSwKKy10aWxsIGJlZm9yZSBoaW0gdGhlIGZvbGssIGJvdGggZmFyIGFuZCBuZWFyLAorLXdobyBob3VzZSBieSB0aGUgd2hhbGUtcGF0aCwgaGVhcmQgaGlzIG1hbmRhdGUsCistZ2F2ZSBoaW0gZ2lmdHM6ICBhIGdvb2Qga2luZyBoZSEKKytUbyBoaW0gYW4gaGVpciB3YXMgYWZ0ZXJ3YXJkIGJvcm4sCisrYSBzb24gaW4gaGlzIGhhbGxzLCB3aG9tIGhlYXZlbiBzZW50CisrdG8gZmF2b3IgdGhlIGZvbGssIGZlZWxpbmcgdGhlaXIgd29lCisrdGhhdCBlcnN0IHRoZXkgaGFkIGxhY2tlZCBhbiBlYXJsIGZvciBsZWFkZXIKKytzbyBsb25nIGEgd2hpbGU7IHRoZSBMb3JkIGVuZG93ZWQgaGltLAorK3RoZSBXaWVsZGVyIG9mIFdvbmRlciwgd2l0aCB3b3JsZCdzIHJlbm93bi4KK0VPRgorCitjYXQgPiBwYXRjaCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggYjk4MzRiNS4uZWY2ZTk0YyAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0zLDEgKzMsMzMzIEBAIG9mIHNwZWFyLWFybWVkIERhbmVzLCBpbiBkYXlzIGxvbmcgc3BlZCwKKyB3ZSBoYXZlIGhlYXJkLCBhbmQgd2hhdCBob25vciB0aGUgYXRoZWxpbmdzIHdvbiEKKysKKyBPZnQgU2N5bGQgdGhlIFNjZWZpbmcgZnJvbSBzcXVhZHJvbmVkIGZvZXMsCitAQCAtMiw3ICsxLDUgQEAgYXdpbmcgdGhlIGVhcmxzLiBTaW5jZSBlcnN0IGhlIGxheQorIGZyaWVuZGxlc3MsIGEgZm91bmRsaW5nLCBmYXRlIHJlcGFpZCBoaW06CisrCisgZm9yIGhlIHdheGVkIHVuZGVyIHdlbGtpbiwgaW4gd2VhbHRoIGhlIHRocm92ZSwKK0VPRgorCitjYXQgPiBleHBlY3RlZCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggYjk4MzRiNS4uZWY2ZTk0YyAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xLDEwICsxLDEyIEBACisgTE8sIHByYWlzZSBvZiB0aGUgcHJvd2VzcyBvZiBwZW9wbGUta2luZ3MKKyBvZiBzcGVhci1hcm1lZCBEYW5lcywgaW4gZGF5cyBsb25nIHNwZWQsCisgd2UgaGF2ZSBoZWFyZCwgYW5kIHdoYXQgaG9ub3IgdGhlIGF0aGVsaW5ncyB3b24hCisrCisgT2Z0IFNjeWxkIHRoZSBTY2VmaW5nIGZyb20gc3F1YWRyb25lZCBmb2VzLAorIGZyb20gbWFueSBhIHRyaWJlLCB0aGUgbWVhZC1iZW5jaCB0b3JlLAorIGF3aW5nIHRoZSBlYXJscy4gU2luY2UgZXJzdCBoZSBsYXkKKyBmcmllbmRsZXNzLCBhIGZvdW5kbGluZywgZmF0ZSByZXBhaWQgaGltOgorKworIGZvciBoZSB3YXhlZCB1bmRlciB3ZWxraW4sIGluIHdlYWx0aCBoZSB0aHJvdmUsCisgdGlsbCBiZWZvcmUgaGltIHRoZSBmb2xrLCBib3RoIGZhciBhbmQgbmVhciwKKyB3aG8gaG91c2UgYnkgdGhlIHdoYWxlLXBhdGgsIGhlYXJkIGhpcyBtYW5kYXRlLAorRU9GCisKK2VjaG8gIiMhJFNIRUxMX1BBVEgiID5mYWtlLWVkaXRvci5zaAorY2F0ID4+IGZha2UtZWRpdG9yLnNoIDw8XEVPRgorbXYgLWYgIiQxIiBvcmlnLXBhdGNoICYmCittdiAtZiBwYXRjaCAiJDEiCitFT0YKKwordGVzdF9zZXRfZWRpdG9yICIkKHB3ZCkvZmFrZS1lZGl0b3Iuc2giCitjaG1vZCBhK3ggZmFrZS1lZGl0b3Iuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIC1lJyAnCisKKwljcCBzZWNvbmQtcGFydCBmaWxlICYmCisJZ2l0IGFkZCAtZSAmJgorCXRlc3RfY21wIHNlY29uZC1wYXJ0IGZpbGUgJiYKKwl0ZXN0X2NtcCBvcmlnLXBhdGNoIGV4cGVjdGVkLXBhdGNoICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPiBvdXQgJiYKKwl0ZXN0X2NtcCBvdXQgZXhwZWN0ZWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLWUgbm90aWNlcyBlZGl0b3IgZmFpbHVyZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGNoYW5nZSA+PmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0VESVRPUj1mYWxzZSBnaXQgYWRkIC1lICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzcwMy1hZGQtbWFnaWMtcGF0aHNwZWMuc2ggYi90L3QzNzAzLWFkZC1tYWdpYy1wYXRoc3BlYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MTE1ZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzcwMy1hZGQtbWFnaWMtcGF0aHNwZWMuc2gKQEAgLTAsMCArMSw1OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21hZ2ljIHBhdGhzcGVjIHRlc3RzIHVzaW5nIGdpdC1hZGQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHN1YiBhbm90aGVyc3ViICYmCisJOiA+c3ViL2ZvbyAmJgorCTogPmFub3RoZXJzdWIvZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCA6LycgIgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJYWRkICdhbm90aGVyc3ViL2ZvbycKKwlhZGQgJ2V4cGVjdGVkJworCWFkZCAnc3ViL2FjdHVhbCcKKwlhZGQgJ3N1Yi9mb28nCisJRU9GCisJKGNkIHN1YiAmJiBnaXQgYWRkIC1uIDovID5hY3R1YWwpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgc3ViL2FjdHVhbAorIgorCitjYXQgPmV4cGVjdGVkIDw8RU9GCithZGQgJ2Fub3RoZXJzdWIvZm9vJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCA6L2Fub3RoZXJzdWInICcKKwkoY2Qgc3ViICYmIGdpdCBhZGQgLW4gOi9hbm90aGVyc3ViID5hY3R1YWwpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgc3ViL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgOi9ub24tZXhpc3RlbnQnICcKKwkoY2Qgc3ViICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLW4gOi9ub24tZXhpc3RlbnQpCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2FkZCAnc3ViL2ZvbycKK0VPRgorCitpZiBta2RpciAiOiIgMj4vZGV2L251bGwKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgQ09MT05fRElSCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENPTE9OX0RJUiAnYSBmaWxlIHdpdGggdGhlIHNhbWUgKGxvbmcpIG1hZ2ljIG5hbWUgZXhpc3RzJyAnCisJOiA+IjooaWNhc2UpaGEiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAtbiAiOihpY2FzZSloYSIgJiYKKwlnaXQgYWRkIC1uICIuLzooaWNhc2UpaGEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ09MT05fRElSICdhIGZpbGUgd2l0aCB0aGUgc2FtZSAoc2hvcnQpIG1hZ2ljIG5hbWUgZXhpc3RzJyAnCisJOiA+IjovYmFyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgLW4gOi9iYXIgJiYKKwlnaXQgYWRkIC1uICIuLzovYmFyIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM4MDAtbWt0YWcuc2ggYi90L3QzODAwLW1rdGFnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlYjQ3OTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzODAwLW1rdGFnLnNoCkBAIC0wLDAgKzEsMzY1IEBACisjIS9iaW4vc2gKKyMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1rdGFnOiB0YWcgb2JqZWN0IHZlcmlmeSB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgY2hlY2sgdGhlIHRhZy5zaWcgZmlsZSwgZXhwZWN0aW5nIHZlcmlmeV90YWcoKSB0byBmYWlsLAorIyBhbmQgY2hlY2tpbmcgdGhhdCB0aGUgZXJyb3IgbWVzc2FnZSBtYXRjaGVzIHRoZSBwYXR0ZXJuCisjIGdpdmVuIGluIHRoZSBleHBlY3QucGF0IGZpbGUuCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICgpIHsKKwlleHBlY3Q9IiQyIgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiQxIiAnCisJCSggdGVzdF9tdXN0X2ZhaWwgZ2l0IG1rdGFnIDx0YWcuc2lnIDI+bWVzc2FnZSApICYmCisJCWdyZXAgIiRleHBlY3QiIG1lc3NhZ2UKKwknCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGZpcnN0IGNyZWF0ZSBhIGNvbW1pdCwgc28gd2UgaGF2ZSBhIHZhbGlkIG9iamVjdC90eXBlCisjIGZvciB0aGUgdGFnLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIEhlbGxvID5BICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBBICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICAxLiBsZW5ndGggY2hlY2sKKworY2F0ID50YWcuc2lnIDw8RU9GCit0b28gc2hvcnQgZm9yIGEgdGFnCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ1RhZyBvYmplY3QgbGVuZ3RoIGNoZWNrJyBcCisJJ15lcnJvcjogLipzaXplIHdyb25nLiokJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDIuIG9iamVjdCBsaW5lIGxhYmVsIGNoZWNrCisKK2NhdCA+dGFnLnNpZyA8PEVPRgoreHh4eHh4IDEzOWU5YjMzOTg2YjFjMjY3MGZmZjUyYzUwNjc2MDMxMTdiM2U4OTUKK3R5cGUgdGFnCit0YWcgbXl0YWcKK3RhZ2dlciAuIDw+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcib2JqZWN0IiBsaW5lIGxhYmVsIGNoZWNrJyAnXmVycm9yOiBjaGFyMDogLioib2JqZWN0ICIkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgIDMuIG9iamVjdCBsaW5lIFNIQTEgY2hlY2sKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3Qgeno5ZTliMzM5ODZiMWMyNjcwZmZmNTJjNTA2NzYwMzExN2IzZTg5NQordHlwZSB0YWcKK3RhZyBteXRhZwordGFnZ2VyIC4gPD4gMCArMDAwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJvYmplY3QiIGxpbmUgU0hBMSBjaGVjaycgJ15lcnJvcjogY2hhcjc6IC4qU0hBMSBoYXNoJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICA0LiB0eXBlIGxpbmUgbGFiZWwgY2hlY2sKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgNzc5ZTliMzM5ODZiMWMyNjcwZmZmNTJjNTA2NzYwMzExN2IzZTg5NQoreHh4eCB0YWcKK3RhZyBteXRhZwordGFnZ2VyIC4gPD4gMCArMDAwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJ0eXBlIiBsaW5lIGxhYmVsIGNoZWNrJyAnXmVycm9yOiBjaGFyNDc6IC4qIlxcbnR5cGUgIiQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgNS4gdHlwZSBsaW5lIGVvbCBjaGVjaworCitlY2hvICJvYmplY3QgNzc5ZTliMzM5ODZiMWMyNjcwZmZmNTJjNTA2NzYwMzExN2IzZTg5NSIgPnRhZy5zaWcKK3ByaW50ZiAidHlwZSB0YWdzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzIiA+PnRhZy5zaWcKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJ0eXBlIiBsaW5lIGVvbCBjaGVjaycgJ15lcnJvcjogY2hhcjQ4OiAuKiJcXG4iJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICA2LiB0YWcgbGluZSBsYWJlbCBjaGVjayAjMQorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCA3NzllOWIzMzk4NmIxYzI2NzBmZmY1MmM1MDY3NjAzMTE3YjNlODk1Cit0eXBlIHRhZworeHh4IG15dGFnCit0YWdnZXIgLiA8PiAwICswMDAwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnInRhZyIgbGluZSBsYWJlbCBjaGVjayAjMScgXAorCSdeZXJyb3I6IGNoYXI1Nzogbm8gInRhZyAiIGZvdW5kJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICA3LiB0YWcgbGluZSBsYWJlbCBjaGVjayAjMgorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCA3NzllOWIzMzk4NmIxYzI2NzBmZmY1MmM1MDY3NjAzMTE3YjNlODk1Cit0eXBlIHRhZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZwordGFnCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJ0YWciIGxpbmUgbGFiZWwgY2hlY2sgIzInIFwKKwknXmVycm9yOiBjaGFyODc6IG5vICJ0YWcgIiBmb3VuZCQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgOC4gdHlwZSBsaW5lIHR5cGUtbmFtZSBsZW5ndGggY2hlY2sKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgNzc5ZTliMzM5ODZiMWMyNjcwZmZmNTJjNTA2NzYwMzExN2IzZTg5NQordHlwZSB0YWdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cKK3RhZyBteXRhZworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcidHlwZSIgbGluZSB0eXBlLW5hbWUgbGVuZ3RoIGNoZWNrJyBcCisJJ15lcnJvcjogY2hhcjUzOiB0eXBlIHRvbyBsb25nJCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICA5LiB2ZXJpZnkgb2JqZWN0IChTSEExL3R5cGUpIGNoZWNrCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0IDc3OWU5YjMzOTg2YjFjMjY3MGZmZjUyYzUwNjc2MDMxMTdiM2U4OTUKK3R5cGUgdGFnZ2dnCit0YWcgbXl0YWcKK3RhZ2dlciAuIDw+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICd2ZXJpZnkgb2JqZWN0IChTSEExL3R5cGUpIGNoZWNrJyBcCisJJ15lcnJvcjogY2hhcjc6IGNvdWxkIG5vdCB2ZXJpZnkgb2JqZWN0LiokJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTAuIHZlcmlmeSB0YWctbmFtZSBjaGVjaworCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteQl0YWcKK3RhZ2dlciAuIDw+IDAgKzAwMDAKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICd2ZXJpZnkgdGFnLW5hbWUgY2hlY2snIFwKKwknXmVycm9yOiBjaGFyNjc6IGNvdWxkIG5vdCB2ZXJpZnkgdGFnIG5hbWUkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTEuIHRhZ2dlciBsaW5lIGxhYmVsIGNoZWNrICMxCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCisKK1RoaXMgaXMgZmlsbGVyCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJyJ0YWdnZXIiIGxpbmUgbGFiZWwgY2hlY2sgIzEnIFwKKwknXmVycm9yOiBjaGFyNzA6IGNvdWxkIG5vdCBmaW5kICJ0YWdnZXIgIiQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxMi4gdGFnZ2VyIGxpbmUgbGFiZWwgY2hlY2sgIzIKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlcgorCitUaGlzIGlzIGZpbGxlcgorRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICcidGFnZ2VyIiBsaW5lIGxhYmVsIGNoZWNrICMyJyBcCisJJ15lcnJvcjogY2hhcjcwOiBjb3VsZCBub3QgZmluZCAidGFnZ2VyICIkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTMuIGRpc2FsbG93IG1pc3NpbmcgdGFnIGF1dGhvciBuYW1lCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgIDw+IDAgKzAwMDAKKworVGhpcyBpcyBmaWxsZXIKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGlzYWxsb3cgbWlzc2luZyB0YWcgYXV0aG9yIG5hbWUnIFwKKwknXmVycm9yOiBjaGFyNzc6IG1pc3NpbmcgdGFnZ2VyIG5hbWUkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTQuIGRpc2FsbG93IG1pc3NpbmcgdGFnIGF1dGhvciBuYW1lCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPAorID4gMCArMDAwMAorCitFT0YKKworY2hlY2tfdmVyaWZ5X2ZhaWx1cmUgJ2Rpc2FsbG93IG1hbGZvcm1lZCB0YWdnZXInIFwKKwknXmVycm9yOiBjaGFyNzc6IG1hbGZvcm1lZCB0YWdnZXIgZmllbGQkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTUuIGFsbG93IGVtcHR5IHRhZyBlbWFpbAorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDw+IDAgKzAwMDAKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhbGxvdyBlbXB0eSB0YWcgZW1haWwnIFwKKyAgICAnZ2l0IG1rdGFnIDx0YWcuc2lnID4uZ2l0L3JlZnMvdGFncy9teXRhZyAyPm1lc3NhZ2UnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxNi4gZGlzYWxsb3cgc3BhY2VzIGluIHRhZyBlbWFpbAorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWcgZ2VyQGV4YW1wbGUuY29tPiAwICswMDAwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGlzYWxsb3cgc3BhY2VzIGluIHRhZyBlbWFpbCcgXAorCSdeZXJyb3I6IGNoYXI3NzogbWFsZm9ybWVkIHRhZ2dlciBmaWVsZCQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAxNy4gZGlzYWxsb3cgbWlzc2luZyB0YWcgdGltZXN0YW1wCisKK3RyICdfJyAnICcgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+X18KKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICdkaXNhbGxvdyBtaXNzaW5nIHRhZyB0aW1lc3RhbXAnIFwKKwknXmVycm9yOiBjaGFyMTA3OiBtaXNzaW5nIHRhZyB0aW1lc3RhbXAkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTguIGRldGVjdCBpbnZhbGlkIHRhZyB0aW1lc3RhbXAxCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gVHVlIE1hciAyNSAxNTo0Nzo0NCAyMDA4CisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGV0ZWN0IGludmFsaWQgdGFnIHRpbWVzdGFtcDEnIFwKKwknXmVycm9yOiBjaGFyMTA3OiBtaXNzaW5nIHRhZyB0aW1lc3RhbXAkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMTkuIGRldGVjdCBpbnZhbGlkIHRhZyB0aW1lc3RhbXAyCisKK2NhdCA+dGFnLnNpZyA8PEVPRgorb2JqZWN0ICRoZWFkCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMjAwOC0wMy0zMVQxMjoyMDoxNS0wNTAwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGV0ZWN0IGludmFsaWQgdGFnIHRpbWVzdGFtcDInIFwKKwknXmVycm9yOiBjaGFyMTExOiBtYWxmb3JtZWQgdGFnIHRpbWVzdGFtcCQnCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAyMC4gZGV0ZWN0IGludmFsaWQgdGFnIHRpbWV6b25lMQorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IDEyMDY0NzgyMzMgR01UCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGV0ZWN0IGludmFsaWQgdGFnIHRpbWV6b25lMScgXAorCSdeZXJyb3I6IGNoYXIxMTg6IG1hbGZvcm1lZCB0YWcgdGltZXpvbmUkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMjEuIGRldGVjdCBpbnZhbGlkIHRhZyB0aW1lem9uZTIKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjA2NDc4MjMzICsgIDMwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGV0ZWN0IGludmFsaWQgdGFnIHRpbWV6b25lMicgXAorCSdeZXJyb3I6IGNoYXIxMTg6IG1hbGZvcm1lZCB0YWcgdGltZXpvbmUkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMjIuIGRldGVjdCBpbnZhbGlkIHRhZyB0aW1lem9uZTMKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjA2NDc4MjMzIC0xNDMwCisKK0VPRgorCitjaGVja192ZXJpZnlfZmFpbHVyZSAnZGV0ZWN0IGludmFsaWQgdGFnIHRpbWV6b25lMycgXAorCSdeZXJyb3I6IGNoYXIxMTg6IG1hbGZvcm1lZCB0YWcgdGltZXpvbmUkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMjMuIGRldGVjdCBpbnZhbGlkIGhlYWRlciBlbnRyeQorCitjYXQgPnRhZy5zaWcgPDxFT0YKK29iamVjdCAkaGVhZAordHlwZSBjb21taXQKK3RhZyBteXRhZwordGFnZ2VyIFQgQSBHZ2VyIDx0YWdnZXJAZXhhbXBsZS5jb20+IDEyMDY0NzgyMzMgLTA1MDAKK3RoaXMgbGluZSBzaG91bGQgbm90IGJlIGhlcmUKKworRU9GCisKK2NoZWNrX3ZlcmlmeV9mYWlsdXJlICdkZXRlY3QgaW52YWxpZCBoZWFkZXIgZW50cnknIFwKKwknXmVycm9yOiBjaGFyMTI0OiB0cmFpbGluZyBnYXJiYWdlIGluIHRhZyBoZWFkZXIkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgMjQuIGNyZWF0ZSB2YWxpZCB0YWcKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJGhlYWQKK3R5cGUgY29tbWl0Cit0YWcgbXl0YWcKK3RhZ2dlciBUIEEgR2dlciA8dGFnZ2VyQGV4YW1wbGUuY29tPiAxMjA2NDc4MjMzIC0wNTAwCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY3JlYXRlIHZhbGlkIHRhZycgXAorICAgICdnaXQgbWt0YWcgPHRhZy5zaWcgPi5naXQvcmVmcy90YWdzL215dGFnIDI+bWVzc2FnZScKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIDI1LiBjaGVjayBteXRhZworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2sgbXl0YWcnIFwKKyAgICAnZ2l0IHRhZyAtbCB8IGdyZXAgbXl0YWcnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTAwLWkxOG4tY29tbWl0LnNoIGIvdC90MzkwMC1pMThuLWNvbW1pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YmYxZGJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMC1pMThuLWNvbW1pdC5zaApAQCAtMCwwICsxLDIwNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb21taXQgYW5kIGxvZyBvdXRwdXQgZW5jb2RpbmdzJworCisuIC4vdGVzdC1saWIuc2gKKworY29tcGFyZV93aXRoICgpIHsKKwlnaXQgc2hvdyAtcyAkMSB8IHNlZCAtZSAnMSwvXiQvZCcgLWUgJ3MvXiAgICAvLycgPmN1cnJlbnQgJiYKKwljYXNlICIkMyIgaW4KKwknJykKKwkJdGVzdF9jbXAgIiQyIiBjdXJyZW50IDs7CisJPyopCisJCWljb252IC1mICIkMyIgLXQgVVRGLTggPmN1cnJlbnQudXRmOCA8Y3VycmVudCAmJgorCQlpY29udiAtZiAiJDMiIC10IFVURi04ID5leHBlY3QudXRmOCA8IiQyIiAmJgorCQl0ZXN0X2NtcCBleHBlY3QudXRmOCBjdXJyZW50LnV0ZjgKKwkJOzsKKwllc2FjCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCTogPkYgJiYKKwlnaXQgYWRkIEYgJiYKKwlUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJQz0kKGdpdCBjb21taXQtdHJlZSAkVCA8IiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQpICYmCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkQyAmJgorCWdpdCB0YWcgQzAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZW5jb2RpbmcgaGVhZGVyIGZvciBiYXNlIGNhc2UnICcKKwlFPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCBDMCB8IHNlZCAtbmUgInMvXmVuY29kaW5nIC8vcCIpICYmCisJdGVzdCB6ID0gInokRSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVVRGLTE2IHJlZnVzZWQgYmVjYXVzZSBvZiBOVUxzJyAnCisJZWNobyBVVEYtMTYgPkYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwL1VURi0xNi50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVVRGLTggaW52YWxpZCBjaGFyYWN0ZXJzIHJlZnVzZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mICRIT01FL3N0ZGVyciAkSE9NRS9pbnZhbGlkIiAmJgorCWVjaG8gIlVURi04IGNoYXJhY3RlcnMiID5GICYmCisJcHJpbnRmICJDb21taXQgbWVzc2FnZVxuXG5JbnZhbGlkIHN1cnJvZ2F0ZTpcMzU1XDI0MFwyMDBcbiIgXAorCQk+IiRIT01FL2ludmFsaWQiICYmCisJZ2l0IGNvbW1pdCAtYSAtRiAiJEhPTUUvaW52YWxpZCIgMj4iJEhPTUUiL3N0ZGVyciAmJgorCWdyZXAgImRpZCBub3QgY29uZm9ybSIgIiRIT01FIi9zdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVVRGLTggb3Zlcmxvbmcgc2VxdWVuY2VzIHJlamVjdGVkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAkSE9NRS9zdGRlcnIgJEhPTUUvaW52YWxpZCIgJiYKKwlybSAtZiAiJEhPTUUvc3RkZXJyIiAiJEhPTUUvaW52YWxpZCIgJiYKKwllY2hvICJVVEYtOCBvdmVybG9uZyIgPkYgJiYKKwlwcmludGYgIlwzNDBcMjAyXDI1MW9tbWl0IG1lc3NhZ2VcblxuVGhpcyBpcyBub3QgYSBzcGFjZTpcMzAwXDI0MFxuIiBcCisJCT4iJEhPTUUvaW52YWxpZCIgJiYKKwlnaXQgY29tbWl0IC1hIC1GICIkSE9NRS9pbnZhbGlkIiAyPiIkSE9NRSIvc3RkZXJyICYmCisJZ3JlcCAiZGlkIG5vdCBjb25mb3JtIiAiJEhPTUUiL3N0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdVVEYtOCBub24tY2hhcmFjdGVycyByZWZ1c2VkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAkSE9NRS9zdGRlcnIgJEhPTUUvaW52YWxpZCIgJiYKKwllY2hvICJVVEYtOCBub24tY2hhcmFjdGVyIDEiID5GICYmCisJcHJpbnRmICJDb21taXQgbWVzc2FnZVxuXG5Ob24tY2hhcmFjdGVyOlwzNjRcMjE3XDI3N1wyNzZcbiIgXAorCQk+IiRIT01FL2ludmFsaWQiICYmCisJZ2l0IGNvbW1pdCAtYSAtRiAiJEhPTUUvaW52YWxpZCIgMj4iJEhPTUUiL3N0ZGVyciAmJgorCWdyZXAgImRpZCBub3QgY29uZm9ybSIgIiRIT01FIi9zdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVVRGLTggbm9uLWNoYXJhY3RlcnMgcmVmdXNlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgJEhPTUUvc3RkZXJyICRIT01FL2ludmFsaWQiICYmCisJZWNobyAiVVRGLTggbm9uLWNoYXJhY3RlciAyLiIgPkYgJiYKKwlwcmludGYgIkNvbW1pdCBtZXNzYWdlXG5cbk5vbi1jaGFyYWN0ZXI6XDM1N1wyNjdcMjIwXG4iIFwKKwkJPiIkSE9NRS9pbnZhbGlkIiAmJgorCWdpdCBjb21taXQgLWEgLUYgIiRIT01FL2ludmFsaWQiIDI+IiRIT01FIi9zdGRlcnIgJiYKKwlncmVwICJkaWQgbm90IGNvbmZvcm0iICIkSE9NRSIvc3RkZXJyCisnCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzZXR1cCIgJworCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJEggJiYKKwkJZ2l0IGNoZWNrb3V0IC1iICRIIEMwICYmCisJCWVjaG8gJEggPkYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtRiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8kSC50eHQKKwknCitkb25lCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjayBlbmNvZGluZyBoZWFkZXIgZm9yICRIIiAnCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0ICckSCcgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCQl0ZXN0ICJ6JEUiID0gInonJEgnIgorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIHRvIHJlbW92ZSBjdXN0b21pemF0aW9uJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJaWYgWj0kKGdpdCBjb25maWcgLS1nZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcpCisJdGhlbgorCQllY2hvIE9vcHMsIHNob3VsZCBoYXZlIGZhaWxlZC4KKwkJZmFsc2UKKwllbHNlCisJCXRlc3QgeiA9ICJ6JFoiCisJZmkgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSVNPODg1OS0xIHNob3VsZCBiZSBzaG93biBpbiBVVEYtOCBub3cnICcKKwljb21wYXJlX3dpdGggSVNPODg1OS0xICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0CisnCisKK2ZvciBIIGluIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiBVVEYtOCBub3ciICcKKwkJY29tcGFyZV93aXRoICckSCcgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMi1VVEYtOC50eHQKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyB0byBhZGQgY3VzdG9taXphdGlvbicgJworCWdpdCBjb25maWcgLS11bnNldC1hbGwgaTE4bi5jb21taXRlbmNvZGluZyAmJgorCWlmIFo9JChnaXQgY29uZmlnIC0tZ2V0LWFsbCBpMThuLmNvbW1pdGVuY29kaW5nKQorCXRoZW4KKwkJZWNobyBPb3BzLCBzaG91bGQgaGF2ZSBmYWlsZWQuCisJCWZhbHNlCisJZWxzZQorCQl0ZXN0IHogPSAieiRaIgorCWZpCisnCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzaG91bGQgYmUgc2hvd24gaW4gaXRzZWxmIG5vdyIgJworCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgJyRIJyAmJgorCQljb21wYXJlX3dpdGggJyRIJyAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8nJEgnLnR4dAorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnIHRvIHR3ZWFrIGN1c3RvbWl6YXRpb24nICcKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSVNPODg1OS0xIHNob3VsZCBiZSBzaG93biBpbiBVVEYtOCBub3cnICcKKwljb21wYXJlX3dpdGggSVNPODg1OS0xICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0CisnCisKK2ZvciBIIGluIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiBVVEYtOCBub3ciICcKKwkJY29tcGFyZV93aXRoICckSCcgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMi1VVEYtOC50eHQKKwknCitkb25lCisKK2ZvciBKIGluIGV1Y0pQIElTTy0yMDIyLUpQCitkbworCWlmIHRlc3QgIiRKIiA9IElTTy0yMDIyLUpQCisJdGhlbgorCQlJQ09OVj0kSgorCWVsc2UKKwkJSUNPTlY9CisJZmkKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgJEoKKwlmb3IgSCBpbiBldWNKUCBJU08tMjAyMi1KUAorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNob3VsZCBiZSBzaG93biBpbiAkSiBub3ciICcKKwkJCWNvbXBhcmVfd2l0aCAnJEgnICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyckSicudHh0ICRJQ09OVgorCQknCisJZG9uZQorZG9uZQorCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiTm8gY29udmVyc2lvbiB3aXRoICRIIiAnCisJCWNvbXBhcmVfd2l0aCAiLS1lbmNvZGluZz1ub25lICckSCciICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyckSCcudHh0CisJJworZG9uZQorCit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX2ZsYWdzICgpIHsKKwlIPSQxCisJZmxhZz0kMgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdCAtLSRmbGFnIHdpdGggJEggZW5jb2RpbmciICcKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRIICYmCisJCWdpdCBjaGVja291dCAtYiAkSC0kZmxhZyBDMCAmJgorCQllY2hvICRIID4+RiAmJgorCQlnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZWNobyBpbnRlcm1lZGlhdGUgc3R1ZmYgPj5HICYmCisJCWdpdCBhZGQgRyAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJpbnRlcm1lZGlhdGUgY29tbWl0IiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZWNobyAkSCAkZmxhZyA+PkYgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtLSRmbGFnIEhFQUR+MSAmJgorCQlFPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCAnJEgtJGZsYWcnIHwKKwkJCXNlZCAtbmUgInMvXmVuY29kaW5nIC8vcCIpICYmCisJCXRlc3QgInokRSIgPSAieiRIIiAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwkJZ2l0IHJlYmFzZSAtLWF1dG9zcXVhc2ggLWkgSEVBRF5eXiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsCisJJworfQorCit0ZXN0X2NvbW1pdF9hdXRvc3F1YXNoX2ZsYWdzIGV1Y0pQIGZpeHVwCisKK3Rlc3RfY29tbWl0X2F1dG9zcXVhc2hfZmxhZ3MgSVNPLTIwMjItSlAgc3F1YXNoCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwMC8xLVVURi04LnR4dCBiL3QvdDM5MDAvMS1VVEYtOC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUzMWUxOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDAvMS1VVEYtOC50eHQKQEAgLTAsMCArMSwzIEBACivDhMOLw5HDj8OWCisKK8OBYsOnZMOoZmcKZGlmZiAtLWdpdCBhL3QvdDM5MDAvMi1VVEYtOC50eHQgYi90L3QzOTAwLzItVVRGLTgudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZjRmOGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAwLzItVVRGLTgudHh0CkBAIC0wLDAgKzEsNCBAQAor44Gv44KM44Gy44G744G1CisKK+OBl+OBpuOBhOOCi+OBruOBjOOAgeOBhOOCi+OBruOBp+OAggor5r+x5rWc44G744KM44G344KK44G944KM44G+44Gz44GQ44KK44KN44G444CCCmRpZmYgLS1naXQgYS90L3QzOTAwL0lTTy0yMDIyLUpQLnR4dCBiL3QvdDM5MDAvSVNPLTIwMjItSlAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0YjUzMzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAwL0lTTy0yMDIyLUpQLnR4dApAQCAtMCwwICsxLDQgQEAKKxskQiRPJGwkUiRbJFUbKEIKKworGyRCJDckRiQkJGskTiQsISIkJCRrJE4kRyEjGyhCCisbJEJfQElNJFskbCRXJGokXSRsJF4kUyQwJGokbSRYISMbKEIKZGlmZiAtLWdpdCBhL3QvdDM5MDAvSVNPODg1OS0xLnR4dCBiL3QvdDM5MDAvSVNPODg1OS0xLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2JlZjBlCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMC9JU084ODU5LTEudHh0CkBAIC0wLDAgKzEsMyBAQAorxMvRz9YKKworwWLnZOhmZwpkaWZmIC0tZ2l0IGEvdC90MzkwMC9VVEYtMTYudHh0IGIvdC90MzkwMC9VVEYtMTYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNTdmMDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3QzOTAwL1VURi0xNi50eHQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdC90MzkwMC9ldWNKUC50eHQgYi90L3QzOTAwL2V1Y0pQLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDZmMmFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMC9ldWNKUC50eHQKQEAgLTAsMCArMSw0IEBACiukz6TspNKk26TVCisKK6S3pMakpKTrpM6krKGipKSk66TOpMehowor38DJzaTbpOyk16TqpN2k7KTepNOksKTqpO2k2KGjCmRpZmYgLS1naXQgYS90L3QzOTAxLTg4NTktMS50eHQgYi90L3QzOTAxLTg4NTktMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzhjMjFhNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDEtODg1OS0xLnR4dApAQCAtMCwwICsxLDQgQEAKKzogdG8gYmUgc291cmNlZCBpbiB0MzkwMSAtLSB0aGlzIGlzIGxhdGluLTEKK0dJVF9BVVRIT1JfTkFNRT0iwentIPP6IiAmJgorR0lUX0NPTU1JVFRFUl9OQU1FPSRHSVRfQVVUSE9SX05BTUUgJiYKK2V4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0NPTU1JVFRFUl9OQU1FCmRpZmYgLS1naXQgYS90L3QzOTAxLWkxOG4tcGF0Y2guc2ggYi90L3QzOTAxLWkxOG4tcGF0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTA5MDg0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDEtaTE4bi1wYXRjaC5zaApAQCAtMCwwICsxLDMxNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdpMThuIHNldHRpbmdzIGFuZCBmb3JtYXQtcGF0Y2ggfCBhbSBwaXBlJworCisuIC4vdGVzdC1saWIuc2gKKworY2hlY2tfZW5jb2RpbmcgKCkgeworCSMgTWFrZSBzdXJlIGNoYXJhY3RlcnMgYXJlIG5vdCBjb3JydXB0ZWQKKwljbnQ9IiQxIiBoZWFkZXI9IiQyIiBpPTEgaj0wCisJd2hpbGUgdGVzdCAiJGkiIC1sZSAkY250CisJZG8KKwkJZ2l0IGZvcm1hdC1wYXRjaCAtLWVuY29kaW5nPVVURi04IC0tc3Rkb3V0IEhFQUR+JGkuLkhFQUR+JGogfAorCQlncmVwICJeRnJvbTogPT9VVEYtOD9xPz1DMz04MT1DMz1BOT1DMz1BRD0yMD1DMz1CMz1DMz1CQT89IiAmJgorCQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUR+JGogfAorCQljYXNlICIkaGVhZGVyIiBpbgorCQk4ODU5KQorCQkJZ3JlcCAiXmVuY29kaW5nIElTTzg4NTktMSIgOzsKKwkJKikKKwkJCWdyZXAgIl5lbmNvZGluZyBJU084ODU5LTEiOyB0ZXN0ICIkPyIgIT0gMCA7OworCQllc2FjIHx8IHJldHVybiAxCisJCWo9JGkKKwkJaT0kKCgkaSsxKSkKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCisJIyB1c2UgVVRGLTggaW4gYXV0aG9yIGFuZCBjb21taXR0ZXIgbmFtZSB0byBtYXRjaCB0aGUKKwkjIGkxOG4uY29tbWl0ZW5jb2Rpbmcgc2V0dGluZ3MKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvICIkR0lUX0FVVEhPUl9OQU1FIiA+bWluZSAmJgorCWdpdCBhZGQgbWluZSAmJgorCWdpdCBjb21taXQgLXMgLW0gIkluaXRpYWwgY29tbWl0IiAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBIZWxsbyB3b3JsZCA+bWluZSAmJgorCWdpdCBhZGQgbWluZSAmJgorCWdpdCBjb21taXQgLXMgLW0gIlNlY29uZCBvbiBtYWluIiAmJgorCisJIyB0aGUgZmlyc3QgY29tbWl0IG9uIHRoZSBzaWRlIGJyYW5jaCBpcyBVVEYtOAorCXRlc3RfdGljayAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIG1hc3Rlcl4gJiYKKwllY2hvIEFub3RoZXIgZmlsZSA+eW91cnMgJiYKKwlnaXQgYWRkIHlvdXJzICYmCisJZ2l0IGNvbW1pdCAtcyAtbSAiU2Vjb25kIG9uIHNpZGUiICYmCisKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVworCXRoZW4KKwkJIyB0aGUgc2Vjb25kIG9uZSBvbiB0aGUgc2lkZSBicmFuY2ggaXMgSVNPLTg4NTktMQorCQlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJCSMgdXNlIGF1dGhvciBhbmQgY29tbWl0dGVyIG5hbWUgaW4gSVNPLTg4NTktMSB0byBtYXRjaCBpdC4KKwkJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0CisJZmkgJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIFlldCBhbm90aGVyID50aGVpcnMgJiYKKwlnaXQgYWRkIHRoZWlycyAmJgorCWdpdCBjb21taXQgLXMgLW0gIlRoaXJkIG9uIHNpZGUiICYmCisKKwkjIEJhY2sgdG8gZGVmYXVsdAorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggb3V0cHV0IChJU08tODg1OS0xKScgJworCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBJU084ODU5LTEgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5IRUFEXiA+b3V0LWwxICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEXiA+b3V0LWwyICYmCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU084ODU5LTEiIG91dC1sMSAmJgorCWdyZXAgIl5Gcm9tOiA9P0lTTzg4NTktMT9xPz1DMT1FOT1FRD0yMD1GMz1GQT89IiBvdXQtbDEgJiYKKwlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMSIgb3V0LWwyICYmCisJZ3JlcCAiXkZyb206ID0/SVNPODg1OS0xP3E/PUMxPUU5PUVEPTIwPUYzPUZBPz0iIG91dC1sMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggb3V0cHV0IChVVEYtOCknICcKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5IRUFEXiA+b3V0LXUxICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEXiA+b3V0LXUyICYmCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIgb3V0LXUxICYmCisJZ3JlcCAiXkZyb206ID0/VVRGLTg/cT89QzM9ODE9QzM9QTk9QzM9QUQ9MjA9QzM9QjM9QzM9QkE/PSIgb3V0LXUxICYmCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIgb3V0LXUyICYmCisJZ3JlcCAiXkZyb206ID0/VVRGLTg/cT89QzM9ODE9QzM9QTk9QzM9QUQ9MjA9QzM9QjM9QzM9QkE/PSIgb3V0LXUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAoVS9VKScgJworCSMgV2Ugd2FudCB0aGUgcmVzdWx0IG9mIHJlYmFzZSBpbiBVVEYtOAorCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBVVEYtOCAmJgorCisJIyBUaGUgdGVzdCBpcyBhYm91dCBsb2dvdXRwdXRlbmNvZGluZyBub3QgYWZmZWN0aW5nIHRoZQorCSMgZmluYWwgb3V0Y29tZSAtLSBpdCBpcyB1c2VkIGludGVybmFsbHkgdG8gZ2VuZXJhdGUgdGhlCisJIyBwYXRjaCBhbmQgdGhlIGxvZy4KKworCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgorCisJIyBUaGUgcmVzdWx0IHdpbGwgYmUgY29tbWl0dGVkIGJ5IEdJVF9DT01NSVRURVJfTkFNRSAtLQorCSMgd2Ugd2FudCBVVEYtOCBlbmNvZGVkIG5hbWUuCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS11dGY4LnR4dCAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0ICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIChVL0wpJyAnCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtdXRmOC50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgbWFzdGVyICYmCisKKwljaGVja19lbmNvZGluZyAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdyZWJhc2UgKEwvTCknICcKKwkjIEluIHRoaXMgdGVzdCB3ZSB3YW50IElTTy04ODU5LTEgZW5jb2RlZCBjb21taXRzIGFzIHRoZSByZXN1bHQKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIgODg1OQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAncmViYXNlIChML1UpJyAnCisJIyBUaGlzIGlzIHBhdGhvbG9naWNhbCAtLSB1c2UgVVRGLTggYXMgaW50ZXJtZWRpYXRlIGZvcm0KKwkjIHRvIGdldCBJU08tODg1OS0xIHJlc3VsdHMuCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSBtYXN0ZXIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIgODg1OQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVycnktcGljayhVL1UpJyAnCisJIyBCb3RoIHRoZSBjb21taXRlbmNvZGluZyBhbmQgbG9nb3V0cHV0ZW5jb2RpbmcgaXMgc2V0IHRvIFVURi04LgorCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS11dGY4LnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgc2lkZV4gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgc2lkZSAmJgorCWdpdCByZXZlcnQgSEVBRCAmJgorCisJY2hlY2tfZW5jb2RpbmcgMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnY2hlcnJ5LXBpY2soTC9MKScgJworCSMgQm90aCB0aGUgY29tbWl0ZW5jb2RpbmcgYW5kIGxvZ291dHB1dGVuY29kaW5nIGlzIHNldCB0byBJU08tODg1OS0xCisKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlcnJ5LXBpY2sgc2lkZV4gJiYKKwlnaXQgY2hlcnJ5LXBpY2sgc2lkZSAmJgorCWdpdCByZXZlcnQgSEVBRCAmJgorCisJY2hlY2tfZW5jb2RpbmcgMyA4ODU5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeS1waWNrKFUvTCknICcKKwkjIENvbW1pdGVuY29kaW5nIGlzIHNldCB0byBVVEYtOCBidXQgbG9nb3V0cHV0ZW5jb2RpbmcgaXMgSVNPLTg4NTktMQorCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtdXRmOC50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZXJyeS1waWNrIHNpZGVeICYmCisJZ2l0IGNoZXJyeS1waWNrIHNpZGUgJiYKKwlnaXQgcmV2ZXJ0IEhFQUQgJiYKKworCWNoZWNrX2VuY29kaW5nIDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ2NoZXJyeS1waWNrKEwvVSknICcKKwkjIEFnYWluLCB0aGUgY29tbWl0ZW5jb2RpbmcgaXMgc2V0IHRvIElTTy04ODU5LTEgYnV0CisJIyBsb2dvdXRwdXRlbmNvZGluZyBpcyBzZXQgdG8gVVRGLTguCisKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIFVURi04ICYmCisJLiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMS04ODU5LTEudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVycnktcGljayBzaWRlXiAmJgorCWdpdCBjaGVycnktcGljayBzaWRlICYmCisJZ2l0IHJldmVydCBIRUFEICYmCisKKwljaGVja19lbmNvZGluZyAzIDg4NTkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgKFUvVSknICcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwlnaXQgY29uZmlnIGkxOG4ubG9nb3V0cHV0ZW5jb2RpbmcgVVRGLTggJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHNpZGUgJiYKKwlnaXQgcmViYXNlIC0tbWVyZ2UgbWFzdGVyICYmCisKKwljaGVja19lbmNvZGluZyAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIChVL0wpJyAnCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFVURi04ICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtdXRmOC50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgc2lkZSAmJgorCWdpdCByZWJhc2UgLS1tZXJnZSBtYXN0ZXIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIC0tbWVyZ2UgKEwvTCknICcKKwkjIEluIHRoaXMgdGVzdCB3ZSB3YW50IElTTy04ODU5LTEgZW5jb2RlZCBjb21taXRzIGFzIHRoZSByZXN1bHQKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIElTTzg4NTktMSAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMiA4ODU5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSAtLW1lcmdlIChML1UpJyAnCisJIyBUaGlzIGlzIHBhdGhvbG9naWNhbCAtLSB1c2UgVVRGLTggYXMgaW50ZXJtZWRpYXRlIGZvcm0KKwkjIHRvIGdldCBJU08tODg1OS0xIHJlc3VsdHMuCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTzg4NTktMSAmJgorCWdpdCBjb25maWcgaTE4bi5sb2dvdXRwdXRlbmNvZGluZyBVVEYtOCAmJgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBzaWRlICYmCisJZ2l0IHJlYmFzZSAtLW1lcmdlIG1hc3RlciAmJgorCisJY2hlY2tfZW5jb2RpbmcgMiA4ODU5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIChVL1UpJyAnCisJIyBBcHBseSBVVEYtOCBwYXRjaGVzIHdpdGggVVRGLTggY29tbWl0ZW5jb2RpbmcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBhbSBvdXQtdTEgb3V0LXUyICYmCisKKwljaGVja19lbmNvZGluZyAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdhbSAoTC9MKScgJworCSMgQXBwbHkgSVNPLTg4NTktMSBwYXRjaGVzIHdpdGggSVNPLTg4NTktMSBjb21taXRlbmNvZGluZworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGFtIG91dC1sMSBvdXQtbDIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIgODg1OQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAoVS9MKScgJworCSMgQXBwbHkgSVNPLTg4NTktMSBwYXRjaGVzIHdpdGggVVRGLTggY29tbWl0ZW5jb2RpbmcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKworCSMgYW0gc3BlY2lmaWVzIC0tdXRmOCBieSBkZWZhdWx0LgorCWdpdCBhbSBvdXQtbDEgb3V0LWwyICYmCisKKwljaGVja19lbmNvZGluZyAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tbm8tdXRmOCAoVS9MKScgJworCSMgQXBwbHkgSVNPLTg4NTktMSBwYXRjaGVzIHdpdGggVVRGLTggY29tbWl0ZW5jb2RpbmcKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgVVRGLTggJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLXV0ZjgudHh0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBhbSAtLW5vLXV0Zjggb3V0LWwxIG91dC1sMiAyPmVyciAmJgorCisJIyBjb21taXQtdHJlZSB3aWxsIHdhcm4gdGhhdCB0aGUgY29tbWl0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiB2YWxpZCBVVEYtOAorCSMgYXMgbWFpbGluZm8gZGlkIG5vdCBjb252ZXJ0IGl0CisJZ3JlcCAiZGlkIG5vdCBjb25mb3JtIiBlcnIgJiYKKworCWNoZWNrX2VuY29kaW5nIDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ2FtIChML1UpJyAnCisJIyBBcHBseSBVVEYtOCBwYXRjaGVzIHdpdGggSVNPLTg4NTktMSBjb21taXRlbmNvZGluZworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyBJU084ODU5LTEgJiYKKwkuICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAxLTg4NTktMS50eHQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJIyBtYWlsaW5mbyB3aWxsIHJlLWNvZGUgdGhlIGNvbW1pdCBtZXNzYWdlIHRvIHRoZSBjaGFyc2V0IHNwZWNpZmllZCBieQorCSMgaTE4bi5jb21taXRlbmNvZGluZworCWdpdCBhbSBvdXQtdTEgb3V0LXUyICYmCisKKwljaGVja19lbmNvZGluZyAyIDg4NTkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTAxLXV0ZjgudHh0IGIvdC90MzkwMS11dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZjUyMDVjCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwMS11dGY4LnR4dApAQCAtMCwwICsxLDQgQEAKKzogdG8gYmUgc291cmNlZCBpbiB0MzkwMSAtLSB0aGlzIGlzIHV0ZjgKK0dJVF9BVVRIT1JfTkFNRT0iw4HDqcOtIMOzw7oiICYmCitHSVRfQ09NTUlUVEVSX05BTUU9JEdJVF9BVVRIT1JfTkFNRSAmJgorZXhwb3J0IEdJVF9BVVRIT1JfTkFNRSBHSVRfQ09NTUlUVEVSX05BTUUKZGlmZiAtLWdpdCBhL3QvdDM5MDItcXVvdGVkLnNoIGIvdC90MzkwMi1xdW90ZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODkyZjU2NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDItcXVvdGVkLnNoCkBAIC0wLDAgKzEsMTUxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3F1b3RlZCBvdXRwdXQnCisKKy4gLi90ZXN0LWxpYi5zaAorCitGTj0n5r+x6YeOJworR049J+e0lCcKK0hUPScJJworRFE9JyInCisKK2VjaG8gZm9vIDI+L2Rldi9udWxsID4gIk5hbWUgYW5kIGFuJHtIVH1IVCIKK2lmICEgdGVzdCAtZiAiTmFtZSBhbmQgYW4ke0hUfUhUIgordGhlbgorCSMgRkFUL05URlMgZG9lcyBub3QgYWxsb3cgdGFicyBpbiBmaWxlbmFtZXMKKwlza2lwX2FsbD0nWW91ciBmaWxlc3lzdGVtIGRvZXMgbm90IGFsbG93IHRhYnMgaW4gZmlsZW5hbWVzJworCXRlc3RfZG9uZQorZmkKKworZm9yX2VhY2hfbmFtZSAoKSB7CisJZm9yIG5hbWUgaW4gXAorCSAgICBOYW1lICJOYW1lIGFuZCBhJHtMRn1MRiIgIk5hbWUgYW5kIGFuJHtIVH1IVCIgIk5hbWUke0RRfSIgXAorCSAgICAiJEZOJEhUJEdOIiAiJEZOJExGJEdOIiAiJEZOICRHTiIgIiRGTiRHTiIgIiRGTiREUSRHTiIgXAorCSAgICAiV2l0aCBTUCBpbiBpdCIgIiRGTi9maWxlIgorCWRvCisJCWV2YWwgIiQxIgorCWRvbmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCW1rZGlyICIkRk4iICYmCisJZm9yX2VhY2hfbmFtZSAiZWNobyBpbml0aWFsID5cIlwkbmFtZVwiIiAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLXEgLW0gSW5pdGlhbCAmJgorCisJZm9yX2VhY2hfbmFtZSAiZWNobyBzZWNvbmQgPlwiXCRuYW1lXCIiICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBTZWNvbmQgJiYKKworCWZvcl9lYWNoX25hbWUgImVjaG8gbW9kaWZpZWQgPlwiXCRuYW1lXCIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0ZWQgZmlsZXMnICcKK2NhdCA+ZXhwZWN0LnF1b3RlZCA8PFxFT0YgJiYKK05hbWUKKyJOYW1lIGFuZCBhXG5MRiIKKyJOYW1lIGFuZCBhblx0SFQiCisiTmFtZVwiIgorV2l0aCBTUCBpbiBpdAorIlwzNDZcMjc3XDI2MVwzNTFcMjA3XDIxNlx0XDM0N1wyNjRcMjI0IgorIlwzNDZcMjc3XDI2MVwzNTFcMjA3XDIxNlxuXDM0N1wyNjRcMjI0IgorIlwzNDZcMjc3XDI2MVwzNTFcMjA3XDIxNiBcMzQ3XDI2NFwyMjQiCisiXDM0NlwyNzdcMjYxXDM1MVwyMDdcMjE2XCJcMzQ3XDI2NFwyMjQiCisiXDM0NlwyNzdcMjYxXDM1MVwyMDdcMjE2L2ZpbGUiCisiXDM0NlwyNzdcMjYxXDM1MVwyMDdcMjE2XDM0N1wyNjRcMjI0IgorRU9GCisKK2NhdCA+ZXhwZWN0LnJhdyA8PFxFT0YKK05hbWUKKyJOYW1lIGFuZCBhXG5MRiIKKyJOYW1lIGFuZCBhblx0SFQiCisiTmFtZVwiIgorV2l0aCBTUCBpbiBpdAorIua/semHjlx057SUIgorIua/semHjlxu57SUIgor5r+x6YeOIOe0lAorIua/semHjlwi57SUIgor5r+x6YeOL2ZpbGUKK+a/semHjue0lAorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZ1bGx5IHF1b3RlZCBvdXRwdXQgZnJvbSBscy1maWxlcycgJworCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmIHRlc3RfY21wIGV4cGVjdC5xdW90ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZ1bGx5IHF1b3RlZCBvdXRwdXQgZnJvbSBkaWZmLWZpbGVzJyAnCisKKwlnaXQgZGlmZiAtLW5hbWUtb25seSA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5xdW90ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZ1bGx5IHF1b3RlZCBvdXRwdXQgZnJvbSBkaWZmLWluZGV4JyAnCisKKwlnaXQgZGlmZiAtLW5hbWUtb25seSBIRUFEID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LnF1b3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZnVsbHkgcXVvdGVkIG91dHB1dCBmcm9tIGRpZmYtdHJlZScgJworCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5xdW90ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZ1bGx5IHF1b3RlZCBvdXRwdXQgZnJvbSBscy10cmVlJyAnCisKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSAtciBIRUFEID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LnF1b3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dGluZyBjb3JlLnF1b3RlcGF0aCcgJworCisJZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5xdW90ZXBhdGggZmFsc2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gbHMtZmlsZXMnICcKKworCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJiB0ZXN0X2NtcCBleHBlY3QucmF3IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gZGlmZi1maWxlcycgJworCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmF3IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gZGlmZi1pbmRleCcgJworCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgSEVBRCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5yYXcgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGZ1bGx5IHF1b3RlZCBvdXRwdXQgZnJvbSBkaWZmLXRyZWUnICcKKworCWdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUReIEhFQUQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmF3IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBmdWxseSBxdW90ZWQgb3V0cHV0IGZyb20gbHMtdHJlZScgJworCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgLXIgSEVBRCA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdC5yYXcgY3VycmVudAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwMy1zdGFzaC5zaCBiL3QvdDM5MDMtc3Rhc2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjE0MmMxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDMtc3Rhc2guc2gKQEAgLTAsMCArMSw3MzQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgRSBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZ2l0IHN0YXNoJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc29tZSBkaXJ0eSB3b3JraW5nIGRpcmVjdG9yeScgJworCWVjaG8gMSA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvIHVucmVsYXRlZCA+b3RoZXItZmlsZSAmJgorCWdpdCBhZGQgb3RoZXItZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gMiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvIDMgPiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tcXVpZXQgSEVBRAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IDBjZmJmMDguLjAwNzUwZWQgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSArMSBAQAorLTIKKyszCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFyZW50cyBvZiBzdGFzaCcgJworCXRlc3QgJChnaXQgcmV2LXBhcnNlIHN0YXNoXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgZGlmZiBzdGFzaF4yLi5zdGFzaCA+IG91dHB1dCAmJgorCXRlc3RfY21wIG91dHB1dCBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHlpbmcgYm9ndXMgc3Rhc2ggZG9lcyBub3RoaW5nJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5IHN0YXNoQHsxfSAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZG9lcyBub3QgbmVlZCBjbGVhbiB3b3JraW5nIGRpcmVjdG9yeScgJworCWVjaG8gNCA+b3RoZXItZmlsZSAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCWVjaG8gMyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZG9lcyBub3QgY2xvYmJlciB3b3JraW5nIGRpcmVjdG9yeSBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gNCA+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSAmJgorCWVjaG8gNCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc3Rhc2hlZCBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gNSA+b3RoZXItZmlsZSAmJgorCWdpdCBhZGQgb3RoZXItZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gb3RoZXItZmlsZSAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgMyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc3Rhc2hlZCBjaGFuZ2VzIChpbmNsdWRpbmcgaW5kZXgpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWVjaG8gNiA+IG90aGVyLWZpbGUgJiYKKwlnaXQgYWRkIG90aGVyLWZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG90aGVyLWZpbGUgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgLS1pbmRleCAmJgorCXRlc3QgMyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAyID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zdGFzaGluZyBpbiBhIHN1YmRpcmVjdG9yeScgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCW1rZGlyIHN1YmRpciAmJgorCSgKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBzdGFzaCBhcHBseQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggZHJvcCBjb21wbGFpbnMgb2YgZXh0cmEgb3B0aW9ucycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBkcm9wIC0tZm9vCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3AgdG9wIHN0YXNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBsaXN0ID4gc3Rhc2hsaXN0MSAmJgorCWVjaG8gNyA+IGZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggZHJvcCAmJgorCWdpdCBzdGFzaCBsaXN0ID4gc3Rhc2hsaXN0MiAmJgorCXRlc3RfY21wIHN0YXNobGlzdDEgc3Rhc2hsaXN0MiAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgMyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJvcCBtaWRkbGUgc3Rhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyA4ID4gZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCWVjaG8gOSA+IGZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggZHJvcCBzdGFzaEB7MX0gJiYKKwl0ZXN0IDIgPSAkKGdpdCBzdGFzaCBsaXN0IHwgd2MgLWwpICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCA5ID0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IDpmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgSEVBRDpmaWxlKSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggZHJvcCAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgMyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyA6ZmlsZSkgJiYKKwl0ZXN0IDEgPSAkKGdpdCBzaG93IEhFQUQ6ZmlsZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcG9wJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0IDMgPSAkKGNhdCBmaWxlKSAmJgorCXRlc3QgMSA9ICQoZ2l0IHNob3cgOmZpbGUpICYmCisJdGVzdCAxID0gJChnaXQgc2hvdyBIRUFEOmZpbGUpICYmCisJdGVzdCAwID0gJChnaXQgc3Rhc2ggbGlzdCB8IHdjIC1sKQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjFmZTkxMmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxIEBACisrYmFyMgorRU9GCisKK2NhdCA+IGV4cGVjdDEgPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IDI1N2NjNTYuLjU3MTZjYTUgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSArMSBAQAorLWZvbworK2JhcgorRU9GCisKK2NhdCA+IGV4cGVjdDIgPDwgRU9GCitkaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUKK2luZGV4IDc2MDE4MDcuLjU3MTZjYTUgMTAwNjQ0CistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSArMSBAQAorLWJhegorK2JhcgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xZmU5MTJjCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSBAQAorK2JhcjIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBicmFuY2gnICcKKwllY2hvIGZvbyA+IGZpbGUgJiYKKwlnaXQgY29tbWl0IGZpbGUgLW0gZmlyc3QgJiYKKwllY2hvIGJhciA+IGZpbGUgJiYKKwllY2hvIGJhcjIgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgc3Rhc2ggJiYKKwllY2hvIGJheiA+IGZpbGUgJiYKKwlnaXQgY29tbWl0IGZpbGUgLW0gc2Vjb25kICYmCisJZ2l0IHN0YXNoIGJyYW5jaCBzdGFzaGJyYW5jaCAmJgorCXRlc3QgcmVmcy9oZWFkcy9zdGFzaGJyYW5jaCA9ICQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIG1hc3Rlcl4pICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgZXhwZWN0ICYmCisJZ2l0IGRpZmYgPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBvdXRwdXQgZXhwZWN0MSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYWx0ZXJuYXRlXCBzZWNvbmQgJiYKKwlnaXQgZGlmZiBtYXN0ZXIuLnN0YXNoYnJhbmNoID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdDIgJiYKKwl0ZXN0IDAgPSAkKGdpdCBzdGFzaCBsaXN0IHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC1xIGlzIHF1aWV0JyAnCisJZWNobyBmb28gPiBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGFwcGx5IC1xID4gb3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2F2ZSAtcSBpcyBxdWlldCcgJworCWdpdCBzdGFzaCBzYXZlIC0tcXVpZXQgPiBvdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3AgLXEgaXMgcXVpZXQnICcKKwlnaXQgc3Rhc2ggcG9wIC1xID4gb3V0cHV0Lm91dCAyPiYxICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9wIC1xIC0taW5kZXggd29ya3MgYW5kIGlzIHF1aWV0JyAnCisJZWNobyBmb28gPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IHN0YXNoIHNhdmUgLS1xdWlldCAmJgorCWdpdCBzdGFzaCBwb3AgLXEgLS1pbmRleCA+IG91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3QgZm9vID0gIiQoZ2l0IHNob3cgOmZpbGUpIiAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Ryb3AgLXEgaXMgcXVpZXQnICcKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3Rhc2ggZHJvcCAtcSA+IG91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXRwdXQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIC1rJyAnCisJZWNobyBiYXIzID4gZmlsZSAmJgorCWVjaG8gYmFyNCA+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBzdGFzaCAtayAmJgorCXRlc3QgYmFyLGJhcjQgPSAkKGNhdCBmaWxlKSwkKGNhdCBmaWxlMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLS1uby1rZWVwLWluZGV4JyAnCisJZWNobyBiYXIzMyA+IGZpbGUgJiYKKwllY2hvIGJhcjQ0ID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IHN0YXNoIC0tbm8ta2VlcC1pbmRleCAmJgorCXRlc3QgYmFyLGJhcjIgPSAkKGNhdCBmaWxlKSwkKGNhdCBmaWxlMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggLS1pbnZhbGlkLW9wdGlvbicgJworCWVjaG8gYmFyNSA+IGZpbGUgJiYKKwllY2hvIGJhcjYgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggLS1pbnZhbGlkLW9wdGlvbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzYXZlIC0taW52YWxpZC1vcHRpb24gJiYKKwl0ZXN0IGJhcjUsYmFyNiA9ICQoY2F0IGZpbGUpLCQoY2F0IGZpbGUyKSAmJgorCWdpdCBzdGFzaCAtLSAtbWVzc2FnZS1zdGFydGluZy13aXRoLWRhc2ggJiYKKwl0ZXN0IGJhcixiYXIyID0gJChjYXQgZmlsZSksJChjYXQgZmlsZTIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGFuIGFkZGVkIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBuZXcgPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCWdpdCBzdGFzaCBzYXZlICJhZGRlZCBmaWxlIiAmJgorCSEgdGVzdCAtciBmaWxlMyAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgbmV3ID0gIiQoY2F0IGZpbGUzKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcm0gdGhlbiByZWNyZWF0ZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcm0gZmlsZSAmJgorCWVjaG8gYmFyNyA+ZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlICJybSB0aGVuIHJlY3JlYXRlIiAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCXRlc3QgYmFyNyA9ICIkKGNhdCBmaWxlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcm0gYW5kIGlnbm9yZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcm0gZmlsZSAmJgorCWVjaG8gZmlsZSA+LmdpdGlnbm9yZSAmJgorCWdpdCBzdGFzaCBzYXZlICJybSBhbmQgaWdub3JlIiAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCXRlc3QgZmlsZSA9ICIkKGNhdCAuZ2l0aWdub3JlKSIgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwkhIHRlc3QgLXIgZmlsZSAmJgorCXRlc3QgZmlsZSA9ICIkKGNhdCAuZ2l0aWdub3JlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggcm0gYW5kIGlnbm9yZSAoc3RhZ2UgLmdpdGlnbm9yZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHJtIGZpbGUgJiYKKwllY2hvIGZpbGUgPi5naXRpZ25vcmUgJiYKKwlnaXQgYWRkIC5naXRpZ25vcmUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAicm0gYW5kIGlnbm9yZSAoc3RhZ2UgLmdpdGlnbm9yZSkiICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiICYmCisJISB0ZXN0IC1yIC5naXRpZ25vcmUgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwkhIHRlc3QgLXIgZmlsZSAmJgorCXRlc3QgZmlsZSA9ICIkKGNhdCAuZ2l0aWdub3JlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3Rhc2ggZmlsZSB0byBzeW1saW5rJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGZpbGUgJiYKKwlsbiAtcyBmaWxlMiBmaWxlICYmCisJZ2l0IHN0YXNoIHNhdmUgImZpbGUgdG8gc3ltbGluayIgJiYKKwl0ZXN0IC1mIGZpbGUgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwljYXNlICIkKGxzIC1sIGZpbGUpIiBpbiAqIiBmaWxlIC0+IGZpbGUyIikgOjs7ICopIGZhbHNlOzsgZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzdGFzaCBmaWxlIHRvIHN5bWxpbmsgKHN0YWdlIHJtKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcm0gZmlsZSAmJgorCWxuIC1zIGZpbGUyIGZpbGUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAiZmlsZSB0byBzeW1saW5rIChzdGFnZSBybSkiICYmCisJdGVzdCAtZiBmaWxlICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiICYmCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJY2FzZSAiJChscyAtbCBmaWxlKSIgaW4gKiIgZmlsZSAtPiBmaWxlMiIpIDo7OyAqKSBmYWxzZTs7IGVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3Rhc2ggZmlsZSB0byBzeW1saW5rIChmdWxsIHN0YWdlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSBmaWxlICYmCisJbG4gLXMgZmlsZTIgZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlICJmaWxlIHRvIHN5bWxpbmsgKGZ1bGwgc3RhZ2UpIiAmJgorCXRlc3QgLWYgZmlsZSAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIiAmJgorCWdpdCBzdGFzaCBhcHBseSAmJgorCWNhc2UgIiQobHMgLWwgZmlsZSkiIGluICoiIGZpbGUgLT4gZmlsZTIiKSA6OzsgKikgZmFsc2U7OyBlc2FjCisnCisKKyMgVGhpcyB0ZXN0IGNyZWF0ZXMgYSBjb21taXQgd2l0aCBhIHN5bWxpbmsgdXNlZCBmb3IgdGhlIGZvbGxvd2luZyB0ZXN0cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzeW1saW5rIHRvIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9sbl9zX2FkZCBmaWxlIGZpbGVsaW5rICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIHN5bWxpbmsiICYmCisJcm0gZmlsZWxpbmsgJiYKKwljcCBmaWxlIGZpbGVsaW5rICYmCisJZ2l0IHN0YXNoIHNhdmUgInN5bWxpbmsgdG8gZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAndGhpcyBtdXN0IGhhdmUgcmUtY3JlYXRlZCB0aGUgc3ltbGluaycgJworCXRlc3QgLWggZmlsZWxpbmsgJiYKKwljYXNlICIkKGxzIC1sIGZpbGVsaW5rKSIgaW4gKiIgZmlsZWxpbmsgLT4gZmlsZSIpIDo7OyAqKSBmYWxzZTs7IGVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zdGFzaCBtdXN0IHJlLWNyZWF0ZSB0aGUgZmlsZScgJworCWdpdCBzdGFzaCBhcHBseSAmJgorCSEgdGVzdCAtaCBmaWxlbGluayAmJgorCXRlc3QgYmFyID0gIiQoY2F0IGZpbGUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzeW1saW5rIHRvIGZpbGUgKHN0YWdlIHJtKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcm0gZmlsZWxpbmsgJiYKKwljcCBmaWxlIGZpbGVsaW5rICYmCisJZ2l0IHN0YXNoIHNhdmUgInN5bWxpbmsgdG8gZmlsZSAoc3RhZ2Ugcm0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd0aGlzIG11c3QgaGF2ZSByZS1jcmVhdGVkIHRoZSBzeW1saW5rJyAnCisJdGVzdCAtaCBmaWxlbGluayAmJgorCWNhc2UgIiQobHMgLWwgZmlsZWxpbmspIiBpbiAqIiBmaWxlbGluayAtPiBmaWxlIikgOjs7ICopIGZhbHNlOzsgZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnN0YXNoIG11c3QgcmUtY3JlYXRlIHRoZSBmaWxlJyAnCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJISB0ZXN0IC1oIGZpbGVsaW5rICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHN5bWxpbmsgdG8gZmlsZSAoZnVsbCBzdGFnZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gZmlsZWxpbmsgJiYKKwljcCBmaWxlIGZpbGVsaW5rICYmCisJZ2l0IGFkZCBmaWxlbGluayAmJgorCWdpdCBzdGFzaCBzYXZlICJzeW1saW5rIHRvIGZpbGUgKGZ1bGwgc3RhZ2UpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd0aGlzIG11c3QgaGF2ZSByZS1jcmVhdGVkIHRoZSBzeW1saW5rJyAnCisJdGVzdCAtaCBmaWxlbGluayAmJgorCWNhc2UgIiQobHMgLWwgZmlsZWxpbmspIiBpbiAqIiBmaWxlbGluayAtPiBmaWxlIikgOjs7ICopIGZhbHNlOzsgZXNhYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnN0YXNoIG11c3QgcmUtY3JlYXRlIHRoZSBmaWxlJyAnCisJZ2l0IHN0YXNoIGFwcGx5ICYmCisJISB0ZXN0IC1oIGZpbGVsaW5rICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3N0YXNoIGRpcmVjdG9yeSB0byBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCW1rZGlyIGRpciAmJgorCWVjaG8gZm9vID5kaXIvZmlsZSAmJgorCWdpdCBhZGQgZGlyL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgZmlsZSBpbiBkaXIiICYmCisJcm0gLWZyIGRpciAmJgorCWVjaG8gYmFyID5kaXIgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAiZGlyZWN0b3J5IHRvIGZpbGUiICYmCisJdGVzdCAtZCBkaXIgJiYKKwl0ZXN0IGZvbyA9ICIkKGNhdCBkaXIvZmlsZSkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGFwcGx5ICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZGlyKSIgJiYKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3N0YXNoIGZpbGUgdG8gZGlyZWN0b3J5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGZpbGUgJiYKKwlta2RpciBmaWxlICYmCisJZWNobyBmb28gPmZpbGUvZmlsZSAmJgorCWdpdCBzdGFzaCBzYXZlICJmaWxlIHRvIGRpcmVjdG9yeSIgJiYKKwl0ZXN0IC1mIGZpbGUgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IC1mIGZpbGUvZmlsZSAmJgorCXRlc3QgZm9vID0gIiQoY2F0IGZpbGUvZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIGJyYW5jaCAtIG5vIHN0YXNoZXMgb24gc3RhY2ssIHN0YXNoLWxpa2UgYXJndW1lbnQnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPj4gZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN0YXNoIGJyYW5jaCBzdGFzaC1icmFuY2ggJHtTVEFTSF9JRH0gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyICYmIGdpdCBicmFuY2ggLUQgc3Rhc2gtYnJhbmNoIiAmJgorCXRlc3QgJChnaXQgbHMtZmlsZXMgLS1tb2RpZmllZCB8IHdjIC1sKSAtZXEgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBicmFuY2ggLSBzdGFzaGVzIG9uIHN0YWNrLCBzdGFzaC1saWtlIGFyZ3VtZW50JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+IGZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCWVjaG8gYmFyID4+IGZpbGUgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdGFzaCBicmFuY2ggc3Rhc2gtYnJhbmNoICR7U1RBU0hfSUR9ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiBnaXQgYnJhbmNoIC1EIHN0YXNoLWJyYW5jaCIgJiYKKwl0ZXN0ICQoZ2l0IGxzLWZpbGVzIC0tbW9kaWZpZWQgfCB3YyAtbCkgLWVxIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2hvdyBmb3JtYXQgZGVmYXVsdHMgdG8gLS1zdGF0JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+IGZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCWVjaG8gYmFyID4+IGZpbGUgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJIGZpbGUgfCAxICsKKwkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCisJRU9GCisJZ2l0IHN0YXNoIHNob3cgJHtTVEFTSF9JRH0gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2hvdyAtIHN0YXNoZXMgb24gc3RhY2ssIHN0YXNoLWxpa2UgYXJndW1lbnQnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPj4gZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHN0YXNoIGRyb3AiICYmCisJZWNobyBiYXIgPj4gZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyAiMQkwCWZpbGUiID5leHBlY3RlZCAmJgorCWdpdCBzdGFzaCBzaG93IC0tbnVtc3RhdCAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNob3cgLXAgLSBzdGFzaGVzIG9uIHN0YWNrLCBzdGFzaC1saWtlIGFyZ3VtZW50JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+IGZpbGUgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBzdGFzaCBkcm9wIiAmJgorCWVjaG8gYmFyID4+IGZpbGUgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCisJaW5kZXggNzYwMTgwNy4uOTM1ZmJkMyAxMDA2NDQKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xICsxLDIgQEAKKwkgYmF6CisJK2JhcgorCUVPRgorCWdpdCBzdGFzaCBzaG93IC1wICR7U1RBU0hfSUR9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2hvdyAtIG5vIHN0YXNoZXMgb24gc3RhY2ssIHN0YXNoLWxpa2UgYXJndW1lbnQnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPj4gZmlsZSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyAiMQkwCWZpbGUiID5leHBlY3RlZCAmJgorCWdpdCBzdGFzaCBzaG93IC0tbnVtc3RhdCAke1NUQVNIX0lEfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNob3cgLXAgLSBubyBzdGFzaGVzIG9uIHN0YWNrLCBzdGFzaC1saWtlIGFyZ3VtZW50JyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIEhFQUQiICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gZm9vID4+IGZpbGUgJiYKKwlTVEFTSF9JRD0kKGdpdCBzdGFzaCBjcmVhdGUpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCisJaW5kZXggNzYwMTgwNy4uNzFiNTJjNCAxMDA2NDQKKwktLS0gYS9maWxlCisJKysrIGIvZmlsZQorCUBAIC0xICsxLDIgQEAKKwkgYmF6CisJK2ZvbworCUVPRgorCWdpdCBzdGFzaCBzaG93IC1wICR7U1RBU0hfSUR9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggZHJvcCAtIGZhaWwgZWFybHkgaWYgc3BlY2lmaWVkIHN0YXNoIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZScgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmIGdpdCBzdGFzaCBjbGVhciIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPiBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJZWNobyBiYXIgPiBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGRyb3AgJChnaXQgcmV2LXBhcnNlIHN0YXNoQHswfSkgJiYKKwlnaXQgc3Rhc2ggcG9wICYmCisJdGVzdCBiYXIgPSAiJChjYXQgZmlsZSkiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHBvcCAtIGZhaWwgZWFybHkgaWYgc3BlY2lmaWVkIHN0YXNoIGlzIG5vdCBhIHN0YXNoIHJlZmVyZW5jZScgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmIGdpdCBzdGFzaCBjbGVhciIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmb28gPiBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJZWNobyBiYXIgPiBmaWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHBvcCAkKGdpdCByZXYtcGFyc2Ugc3Rhc2hAezB9KSAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwl0ZXN0IGJhciA9ICIkKGNhdCBmaWxlKSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmIHdpdGggbm9uLWV4aXN0ZW50IHJlZmxvZycgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWVjaG8gYmFyNSA+IGZpbGUgJiYKKwllY2hvIGJhcjYgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgc3Rhc2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcXVpZXQgLS12ZXJpZnkgZG9lcy1ub3QtZXhpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggZHJvcCBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBkcm9wIGRvZXMtbm90LWV4aXN0QHswfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBwb3AgZG9lcy1ub3QtZXhpc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggcG9wIGRvZXMtbm90LWV4aXN0QHswfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSBkb2VzLW5vdC1leGlzdEB7MH0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggc2hvdyBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzaG93IGRvZXMtbm90LWV4aXN0QHswfSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBicmFuY2ggdG1wIGRvZXMtbm90LWV4aXN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCB0bXAgZG9lcy1ub3QtZXhpc3RAezB9ICYmCisJZ2l0IHN0YXNoIGRyb3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCByZWYgb2YgdGhlIGZvcm0gc3Rhc2hAe259LCBuID49IE4nICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggZHJvcCBzdGFzaEB7MH0gJiYKKwllY2hvIGJhcjUgPiBmaWxlICYmCisJZWNobyBiYXI2ID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGRyb3Agc3Rhc2hAezF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHBvcCBzdGFzaEB7MX0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggYXBwbHkgc3Rhc2hAezF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHNob3cgc3Rhc2hAezF9ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCB0bXAgc3Rhc2hAezF9ICYmCisJZ2l0IHN0YXNoIGRyb3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggYnJhbmNoIHNob3VsZCBub3QgZHJvcCB0aGUgc3Rhc2ggaWYgdGhlIGJyYW5jaCBleGlzdHMnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwllY2hvIGZvbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gYmFyID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIGJyYW5jaCBtYXN0ZXIgc3Rhc2hAezB9ICYmCisJZ2l0IHJldi1wYXJzZSBzdGFzaEB7MH0gLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggYXBwbHkgc2hvd3Mgc3RhdHVzIHNhbWUgYXMgZ2l0IHN0YXR1cyAocmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3RvcnkpJyAnCisJZ2l0IHN0YXNoIGNsZWFyICYmCisJZWNobyAxID5zdWJkaXIvc3ViZmlsZTEgJiYKKwllY2hvIDIgPnN1YmRpci9zdWJmaWxlMiAmJgorCWdpdCBhZGQgc3ViZGlyL3N1YmZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSBzdWJkaXIgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQllY2hvIHggPnN1YmZpbGUxICYmCisJCWVjaG8geCA+Li4vZmlsZSAmJgorCQlnaXQgc3RhdHVzID4uLi9leHBlY3QgJiYKKwkJZ2l0IHN0YXNoICYmCisJCXNhbmVfdW5zZXQgR0lUX01FUkdFX1ZFUkJPU0lUWSAmJgorCQlnaXQgc3Rhc2ggYXBwbHkKKwkpIHwKKwlzZWQgLWUgMSwyZCA+YWN0dWFsICYmICMgZHJvcCAiU2F2ZWQuLi4iIGFuZCAiSEVBRCBpcyBub3cuLi4iCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorZGlmZiAtLWdpdCBhL0hFQUQgYi9IRUFECituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZmUwY2JlZQorLS0tIC9kZXYvbnVsbAorKysrIGIvSEVBRAorQEAgLTAsMCArMSBAQAorK2ZpbGUtbm90LWEtcmVmCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggd2hlcmUgd29ya2luZyBkaXJlY3RvcnkgY29udGFpbnMgIkhFQUQiIGZpbGUnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBmaWxlLW5vdC1hLXJlZiA+IEhFQUQgJiYKKwlnaXQgYWRkIEhFQUQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1xdWlldCBIRUFEICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHN0YXNoXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwlnaXQgZGlmZiBzdGFzaF4uLnN0YXNoID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdG9yZSBjYWxsZWQgd2l0aCBpbnZhbGlkIGNvbW1pdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBzdG9yZSBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RvcmUgdXBkYXRlcyBzdGFzaCByZWYgYW5kIHJlZmxvZycgJworCWdpdCBzdGFzaCBjbGVhciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHF1dXggPmJhenp5ICYmCisJZ2l0IGFkZCBiYXp6eSAmJgorCVNUQVNIX0lEPSQoZ2l0IHN0YXNoIGNyZWF0ZSkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJISBncmVwIHF1dXggYmF6enkgJiYKKwlnaXQgc3Rhc2ggc3RvcmUgLW0gcXV1eGVyeSAkU1RBU0hfSUQgJiYKKwl0ZXN0ICQoY2F0IC5naXQvcmVmcy9zdGFzaCkgPSAkU1RBU0hfSUQgJiYKKwlnaXQgcmVmbG9nIC0tZm9ybWF0PSVIIHN0YXNofCBncmVwICRTVEFTSF9JRCAmJgorCWdpdCBzdGFzaCBwb3AgJiYKKwlncmVwIHF1dXggYmF6enkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFuZGxlIHN0YXNoIHNwZWNpZmljYXRpb24gd2l0aCBzcGFjZXMnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwllY2hvIHBpZyA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXN0YW1wPSQoZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWNkIiAtMSByZWZzL3N0YXNoKSAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gY293ID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJZ2l0IHN0YXNoIGFwcGx5ICJzdGFzaEB7JHN0YW1wfSIgJiYKKwlncmVwIHBpZyBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN0YXNoIHdpdGggaW5kZXggYW5kIHdvcmt0cmVlIGNoYW5nZXMnICcKKwlnaXQgc3Rhc2ggY2xlYXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBpbmRleCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gd29ya2luZyA+ZmlsZSAmJgorCWdpdCBzdGFzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBsaXN0IGltcGxpZXMgLS1maXJzdC1wYXJlbnQgLW0nICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlzdGFzaEB7MH0KKworCWRpZmYgLS1naXQgYS9maWxlIGIvZmlsZQorCWluZGV4IDI1N2NjNTYuLmQyNmIzM2QgMTAwNjQ0CisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQCAtMSArMSBAQAorCS1mb28KKwkrd29ya2luZworCUVPRgorCWdpdCBzdGFzaCBsaXN0IC0tZm9ybWF0PSVnZCAtcCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBsaXN0IC0tY2Mgc2hvd3MgY29tYmluZWQgZGlmZicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlzdGFzaEB7MH0KKworCWRpZmYgLS1jYyBmaWxlCisJaW5kZXggMjU3Y2M1Niw5MDE1YTdhLi5kMjZiMzNkCisJLS0tIGEvZmlsZQorCSsrKyBiL2ZpbGUKKwlAQEAgLTEsMSAtMSwxICsxLDEgQEBACisJLSBmb28KKwkgLWluZGV4CisJKyt3b3JraW5nCisJRU9GCisJZ2l0IHN0YXNoIGxpc3QgLS1mb3JtYXQ9JWdkIC1wIC0tY2MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTA0LXN0YXNoLXBhdGNoLnNoIGIvdC90MzkwNC1zdGFzaC1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOGU3MzAwCi0tLSAvZGV2L251bGwKKysrIGIvdC90MzkwNC1zdGFzaC1wYXRjaC5zaApAQCAtMCwwICsxLDEwNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3N0YXNoIC1wJworLiAuL2xpYi1wYXRjaC1tb2RlLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHN0YXNoIC1wIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIGRpciAmJgorCWVjaG8gcGFyZW50ID4gZGlyL2ZvbyAmJgorCWVjaG8gZHVtbXkgPiBiYXIgJiYKKwllY2hvIGNvbW1pdHRlZCA+IEhFQUQgJiYKKwlnaXQgYWRkIGJhciBkaXIvZm9vIEhFQUQgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmQgZGlyL2ZvbyBoZWFkICYmCisJZWNobyBpbmRleCA+IGRpci9mb28gJiYKKwlnaXQgYWRkIGRpci9mb28gJiYKKwlzZXRfYW5kX3NhdmVfc3RhdGUgYmFyIGJhcl93b3JrIGJhcl9pbmRleCAmJgorCXNhdmVfaGVhZAorJworCisjIG5vdGU6IG9yZGVyIG9mIGZpbGVzIHdpdGggdW5zdGFnZWQgY2hhbmdlczogSEVBRCBiYXIgZGlyL2ZvbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYXlpbmcgIm4iIGRvZXMgbm90aGluZycgJworCXNldF9zdGF0ZSBIRUFEIEhFQURmaWxlX3dvcmsgSEVBRGZpbGVfaW5kZXggJiYKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIGluZGV4ICYmCisJKGVjaG8gbjsgZWNobyBuOyBlY2hvIG4pIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN0YXNoIHNhdmUgLXAgJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIEhFQURmaWxlX2luZGV4ICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN0YXNoIC1wJyAnCisJKGVjaG8geTsgZWNobyBuOyBlY2hvIHkpIHwgZ2l0IHN0YXNoIHNhdmUgLXAgJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBjb21taXR0ZWQgSEVBRGZpbGVfaW5kZXggJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBpbmRleCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBIRUFEZmlsZV93b3JrIGNvbW1pdHRlZCAmJgorCXZlcmlmeV9zdGF0ZSBiYXIgZHVtbXkgZHVtbXkgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN0YXNoIC1wIC0tbm8ta2VlcC1pbmRleCcgJworCXNldF9zdGF0ZSBIRUFEIEhFQURmaWxlX3dvcmsgSEVBRGZpbGVfaW5kZXggJiYKKwlzZXRfc3RhdGUgYmFyIGJhcl93b3JrIGJhcl9pbmRleCAmJgorCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXggJiYKKwkoZWNobyB5OyBlY2hvIG47IGVjaG8geSkgfCBnaXQgc3Rhc2ggc2F2ZSAtcCAtLW5vLWtlZXAtaW5kZXggJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBjb21taXR0ZWQgY29tbWl0dGVkICYmCisJdmVyaWZ5X3N0YXRlIGJhciBiYXJfd29yayBkdW1teSAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIGhlYWQgaGVhZCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgLS1pbmRleCAmJgorCXZlcmlmeV9zdGF0ZSBIRUFEIEhFQURmaWxlX3dvcmsgSEVBRGZpbGVfaW5kZXggJiYKKwl2ZXJpZnlfc3RhdGUgYmFyIGR1bW15IGJhcl9pbmRleCAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN0YXNoIC0tbm8ta2VlcC1pbmRleCAtcCcgJworCXNldF9zdGF0ZSBIRUFEIEhFQURmaWxlX3dvcmsgSEVBRGZpbGVfaW5kZXggJiYKKwlzZXRfc3RhdGUgYmFyIGJhcl93b3JrIGJhcl9pbmRleCAmJgorCXNldF9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXggJiYKKwkoZWNobyB5OyBlY2hvIG47IGVjaG8geSkgfCBnaXQgc3Rhc2ggc2F2ZSAtLW5vLWtlZXAtaW5kZXggLXAgJiYKKwl2ZXJpZnlfc3RhdGUgSEVBRCBjb21taXR0ZWQgY29tbWl0dGVkICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gaGVhZCBoZWFkICYmCisJdmVyaWZ5X3N0YXRlIGJhciBiYXJfd29yayBkdW1teSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgLS1pbmRleCAmJgorCXZlcmlmeV9zdGF0ZSBIRUFEIEhFQURmaWxlX3dvcmsgSEVBRGZpbGVfaW5kZXggJiYKKwl2ZXJpZnlfc3RhdGUgYmFyIGR1bW15IGJhcl9pbmRleCAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uZSBvZiB0aGlzIG1vdmVkIEhFQUQnICcKKwl2ZXJpZnlfc2F2ZWRfaGVhZAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdzdGFzaCAtcCB3aXRoIHNwbGl0IGh1bmsnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2F0ID50ZXN0IDw8LVxFT0YgJiYKKwlhYWEKKwliYmIKKwljY2MKKwlFT0YKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIiAmJgorCWNhdCA+dGVzdCA8PC1cRU9GICYmCisJYWFhCisJYWRkZWQgbGluZSAxCisJYmJiCisJYWRkZWQgbGluZSAyCisJY2NjCisJRU9GCisJcHJpbnRmICIlc1xuIiBzIG4geSBxIHwKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHN0YXNoIC1wIDI+ZXJyb3IgJiYKKwkhIHRlc3RfbXVzdF9iZV9lbXB0eSBlcnJvciAmJgorCWdyZXAgImFkZGVkIGxpbmUgMSIgdGVzdCAmJgorCSEgZ3JlcCAiYWRkZWQgbGluZSAyIiB0ZXN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90MzkwNS1zdGFzaC1pbmNsdWRlLXVudHJhY2tlZC5zaCBiL3QvdDM5MDUtc3Rhc2gtaW5jbHVkZS11bnRyYWNrZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjM3MmZjOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDUtc3Rhc2gtaW5jbHVkZS11bnRyYWNrZWQuc2gKQEAgLTAsMCArMSwxODggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgRGF2aWQgQ2FsZHdlbGwKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBnaXQgc3Rhc2ggLS1pbmNsdWRlLXVudHJhY2tlZCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCBzb21lIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5JyAnCisJZWNobyAxID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gMiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvIDMgPiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZWNobyAxID4gZmlsZTIgJiYKKwllY2hvIDEgPiBIRUFEICYmCisJbWtkaXIgdW50cmFja2VkICYmCisJZWNobyB1bnRyYWNrZWQgPnVudHJhY2tlZC91bnRyYWNrZWQgJiYKKwlnaXQgc3Rhc2ggLS1pbmNsdWRlLXVudHJhY2tlZCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLXF1aWV0IEhFQUQKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCis/PyBhY3R1YWwKKz8/IGV4cGVjdAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCBjbGVhbmVkIHRoZSB1bnRyYWNrZWQgZmlsZXMnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdC5kaWZmIDw8RU9GCitkaWZmIC0tZ2l0IGEvSEVBRCBiL0hFQUQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kMDA0OTFmCistLS0gL2Rldi9udWxsCisrKysgYi9IRUFECitAQCAtMCwwICsxIEBACisrMQorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kMDA0OTFmCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSBAQAorKzEKK2RpZmYgLS1naXQgYS91bnRyYWNrZWQvdW50cmFja2VkIGIvdW50cmFja2VkL3VudHJhY2tlZAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjVhNzJlYjIKKy0tLSAvZGV2L251bGwKKysrKyBiL3VudHJhY2tlZC91bnRyYWNrZWQKK0BAIC0wLDAgKzEgQEAKKyt1bnRyYWNrZWQKK0VPRgorY2F0ID4gZXhwZWN0LmxzdHJlZSA8PEVPRgorSEVBRAorZmlsZTIKK3VudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCBzdGFzaGVkIHRoZSB1bnRyYWNrZWQgZmlsZXMnICcKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHVudHJhY2tlZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIEhFQUQgJiYKKwlnaXQgZGlmZiBIRUFEIHN0YXNoXjMgLS0gSEVBRCBmaWxlMiB1bnRyYWNrZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5kaWZmIGFjdHVhbCAmJgorCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHN0YXNoXjM6ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QubHN0cmVlIGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2F2ZSAtLXBhdGNoIC0taW5jbHVkZS11bnRyYWNrZWQgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3Rhc2ggLS1wYXRjaCAtLWluY2x1ZGUtdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1wYXRjaCAtLWFsbCBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCAtLXBhdGNoIC0tYWxsCisnCisKK2dpdCBjbGVhbiAtLWZvcmNlIC0tcXVpZXQKKworY2F0ID4gZXhwZWN0IDw8RU9GCisgTSBmaWxlCis/PyBIRUFECis/PyBhY3R1YWwKKz8/IGV4cGVjdAorPz8gZmlsZTIKKz8/IHVudHJhY2tlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBwb3AgYWZ0ZXIgc2F2ZSAtLWluY2x1ZGUtdW50cmFja2VkIGxlYXZlcyBmaWxlcyB1bnRyYWNrZWQgYWdhaW4nICcKKwlnaXQgc3Rhc2ggcG9wICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3QgIjEiID0gIiQoY2F0IGZpbGUyKSIgJiYKKwl0ZXN0IHVudHJhY2tlZCA9ICIkKGNhdCB1bnRyYWNrZWQvdW50cmFja2VkKSIKKycKKworZ2l0IGNsZWFuIC0tZm9yY2UgLS1xdWlldCAtZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC11IGRpcnR5IGluZGV4JyAnCisJZWNobyA0ID4gZmlsZTMgJiYKKwlnaXQgYWRkIGZpbGUzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHN0YXNoIC11CisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iODYyNmM0CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSBAQAorKzQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0taW5jbHVkZS11bnRyYWNrZWQgZGlydHkgaW5kZXggZ290IHN0YXNoZWQnICcKKwlnaXQgc3Rhc2ggcG9wIC0taW5kZXggJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitnaXQgcmVzZXQgPiAvZGV2L251bGwKKworIyBNdXN0IGRpcmVjdCBvdXRwdXQgc29tZXdoZXJlIHdoZXJlIGl0IHdvbid0IGJlIGNvbnNpZGVyZWQgYW4gdW50cmFja2VkIGZpbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCAtcSBpcyBxdWlldCcgJworCWVjaG8gMSA+IGZpbGU1ICYmCisJZ2l0IHN0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCAtLXF1aWV0ID4gLmdpdC9zdGFzaC1vdXRwdXQub3V0IDI+JjEgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIC5naXQvc3Rhc2gtb3V0cHV0Lm91dCAmJgorCXJtIC1mIC5naXQvc3Rhc2gtb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0taW5jbHVkZS11bnRyYWNrZWQgcmVtb3ZlZCBmaWxlcycgJworCXJtIC1mIGZpbGUgJiYKKwlnaXQgc3Rhc2ggc2F2ZSAtLWluY2x1ZGUtdW50cmFja2VkICYmCisJZWNobyAxID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZmlsZSBleHBlY3QKKycKKworcm0gLWYgZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCByZW1vdmVkIGZpbGVzIGdvdCBzdGFzaGVkJyAnCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUKKycKKworY2F0ID4gLmdpdGlnbm9yZSA8PEVPRgorLmdpdGlnbm9yZQoraWdub3JlZAoraWdub3JlZC5kLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXNoIHNhdmUgLS1pbmNsdWRlLXVudHJhY2tlZCByZXNwZWN0cyAuZ2l0aWdub3JlJyAnCisJZWNobyBpZ25vcmVkID4gaWdub3JlZCAmJgorCW1rZGlyIGlnbm9yZWQuZCAmJgorCWVjaG8gaWdub3JlZCA+aWdub3JlZC5kL3VudHJhY2tlZCAmJgorCWdpdCBzdGFzaCAtdSAmJgorCXRlc3QgLXMgaWdub3JlZCAmJgorCXRlc3QgLXMgaWdub3JlZC5kL3VudHJhY2tlZCAmJgorCXRlc3QgLXMgLmdpdGlnbm9yZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC11IGNhbiBzdGFzaCB3aXRoIG9ubHkgdW50cmFja2VkIGZpbGVzIGRpZmZlcmVudCcgJworCWVjaG8gNCA+IGZpbGU0ICYmCisJZ2l0IHN0YXNoIC11ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggc2F2ZSAtLWFsbCBkb2VzIG5vdCByZXNwZWN0IC5naXRpZ25vcmUnICcKKwlnaXQgc3Rhc2ggLWEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBpZ25vcmVkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgaWdub3JlZC5kICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdGlnbm9yZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFzaCBzYXZlIC0tYWxsIGlzIHN0YXNoIHBvcHBhYmxlJyAnCisJZ2l0IHN0YXNoIHBvcCAmJgorCXRlc3QgLXMgaWdub3JlZCAmJgorCXRlc3QgLXMgaWdub3JlZC5kL3VudHJhY2tlZCAmJgorCXRlc3QgLXMgLmdpdGlnbm9yZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDM5MDYtc3Rhc2gtc3VibW9kdWxlLnNoIGIvdC90MzkwNi1zdGFzaC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDcyMTlkNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDM5MDYtc3Rhc2gtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzdGFzaCBhcHBseSBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCitnaXRfc3Rhc2ggKCkgeworCWdpdCBzdGF0dXMgLXN1ID5leHBlY3QgJiYKKwlscyAtMXBSICogPj5leHBlY3QgJiYKKwlnaXQgcmVhZC10cmVlIC11IC1tICIkMSIgJiYKKwlnaXQgc3Rhc2ggJiYKKwlnaXQgc3RhdHVzIC1zdSA+YWN0dWFsICYmCisJbHMgLTFwUiAqID4+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBzdGFzaCBhcHBseQorfQorCitLTk9XTl9GQUlMVVJFX1NUQVNIX0RPRVNfSUdOT1JFX1NVQk1PRFVMRV9DSEFOR0VTPTEKK0tOT1dOX0ZBSUxVUkVfQ0hFUlJZX1BJQ0tfU0VFU19FTVBUWV9DT01NSVQ9MQorS05PV05fRkFJTFVSRV9OT0ZGX01FUkdFX0RPRVNOVF9DUkVBVEVfRU1QVFlfU1VCTU9EVUxFX0RJUj0xCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdF9zdGFzaCIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3QzOTEwLW1hYy1vcy1wcmVjb21wb3NlLnNoIGIvdC90MzkxMC1tYWMtb3MtcHJlY29tcG9zZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MzE5MzU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90MzkxMC1tYWMtb3MtcHJlY29tcG9zZS5zaApAQCAtMCwwICsxLDE2MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBUb3JzdGVuIELDtmdlcnNoYXVzZW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndXRmLTggZGVjb21wb3NlZCAobmZkKSBjb252ZXJ0ZWQgdG8gcHJlY29tcG9zZWQgKG5mYyknCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgVVRGOF9ORkRfVE9fTkZDCit0aGVuCisJc2tpcF9hbGw9ImZpbGVzeXN0ZW0gZG9lcyBub3QgY29ycnVwdCB1dGYtOCIKKwl0ZXN0X2RvbmUKK2ZpCisKKyMgY3JlYXRlIHV0Zi04IHZhcmlhYmxlcworQWRpYXJuZmM9JChwcmludGYgJ1wzMDNcMjA0JykKK0FkaWFybmZkPSQocHJpbnRmICdBXDMxNFwyMTAnKQorCitPZGlhcm5mYz0kKHByaW50ZiAnXDMwM1wyMjYnKQorT2RpYXJuZmQ9JChwcmludGYgJ09cMzE0XDIxMCcpCitBRWxpZ2F0dT0kKHByaW50ZiAnXDMwM1wyMDYnKQorSW52YWxpZHU9JChwcmludGYgJ1wzMDNcMzc3JykKKworCisjQ3JlYXRlIGEgc3RyaW5nIHdpdGggMjU1IGJ5dGVzIChkZWNvbXBvc2VkKQorQWxvbmdkPSRBZGlhcm5mZCRBZGlhcm5mZCRBZGlhcm5mZCRBZGlhcm5mZCRBZGlhcm5mZCRBZGlhcm5mZCRBZGlhcm5mZCAjMjEgQnl0ZQorQWxvbmdkPSRBbG9uZ2QkQWxvbmdkJEFsb25nZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjNjMgQnl0ZQorQWxvbmdkPSRBbG9uZ2QkQWxvbmdkJEFsb25nZCRBbG9uZ2QkQWRpYXJuZmQgICAgICAgICAgICAgICAgICAgICAgICAgICAjMjU1IEJ5dGUKKworI0NyZWF0ZSBhIHN0cmluZyB3aXRoIDI1NCBieXRlcyAocHJlY29tcG9zZWQpCitBbG9uZ2M9JEFFbGlnYXR1JEFFbGlnYXR1JEFFbGlnYXR1JEFFbGlnYXR1JEFFbGlnYXR1ICMxMCBCeXRlCitBbG9uZ2M9JEFsb25nYyRBbG9uZ2MkQWxvbmdjJEFsb25nYyRBbG9uZ2MgICAgICAgICAgICM1MCBCeXRlCitBbG9uZ2M9JEFsb25nYyRBbG9uZ2MkQWxvbmdjJEFsb25nYyRBbG9uZ2MgICAgICAgICAgICMyNTAgQnl0ZQorQWxvbmdjPSRBbG9uZ2MkQUVsaWdhdHUkQUVsaWdhdHUgICAgICAgICAgICAgICAgICAgICAjMjU0IEJ5dGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZGV0ZWN0IGlmIG5mZCBuZWVkZWQiICcKKwlwcmVjb21wb3NldW5pY29kZT0kKGdpdCBjb25maWcgY29yZS5wcmVjb21wb3NldW5pY29kZSkgJiYKKwl0ZXN0ICIkcHJlY29tcG9zZXVuaWNvZGUiID0gdHJ1ZSAmJgorCWdpdCBjb25maWcgY29yZS5wcmVjb21wb3NldW5pY29kZSB0cnVlCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCIgJworCT54ICYmCisJZ2l0IGFkZCB4ICYmCisJZ2l0IGNvbW1pdCAtbSAiMXN0IGNvbW1pdCIgJiYKKwlnaXQgcm0geCAmJgorCWdpdCBjb21taXQgLW0gInJtIHgiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCBjYXNlIG1hYyIgJworCWdpdCBjaGVja291dCAtYiBtYWNfb3MKKycKKyMgVGhpcyB3aWxsIHRlc3QgbmZkMm5mYyBpbiByZWFkZGlyKCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImFkZCBmaWxlIEFkaWFybmZjIiAnCisJZWNobyBmLkFkaWFybmZjID5mLiRBZGlhcm5mYyAmJgorCWdpdCBhZGQgZi4kQWRpYXJuZmMgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZi4kQWRpYXJuZmMiCisnCisjIFRoaXMgd2lsbCB0ZXN0IG5mZDJuZmMgaW4gZ2l0IHN0YWdlKCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInN0YWdlIGZpbGUgZC5BZGlhcm5mZC9mLkFkaWFybmZkIiAnCisJbWtkaXIgZC4kQWRpYXJuZmQgJiYKKwllY2hvIGQuJEFkaWFybmZkL2YuJEFkaWFybmZkID5kLiRBZGlhcm5mZC9mLiRBZGlhcm5mZCAmJgorCWdpdCBzdGFnZSBkLiRBZGlhcm5mZC9mLiRBZGlhcm5mZCAmJgorCWdpdCBjb21taXQgLW0gImFkZCBkLiRBZGlhcm5mZC9mLiRBZGlhcm5mZCIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImFkZCBsaW5rIEFkaWFybmZjIiAnCisJbG4gLXMgZC4kQWRpYXJuZmQvZi4kQWRpYXJuZmQgbC4kQWRpYXJuZmMgJiYKKwlnaXQgYWRkIGwuJEFkaWFybmZjICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGwuQWRpYXJuZmMiCisnCisjIFRoaXMgd2lsbCB0ZXN0IGdpdCBsb2cKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBsb2cgZi5BZGlhciIgJworCWdpdCBsb2cgZi4kQWRpYXJuZmMgPiBmLkFkaWFybmZjLmxvZyAmJgorCWdpdCBsb2cgZi4kQWRpYXJuZmQgPiBmLkFkaWFybmZkLmxvZyAmJgorCXRlc3QgLXMgZi5BZGlhcm5mYy5sb2cgJiYKKwl0ZXN0IC1zIGYuQWRpYXJuZmQubG9nICYmCisJdGVzdF9jbXAgZi5BZGlhcm5mYy5sb2cgZi5BZGlhcm5mZC5sb2cgJiYKKwlybSBmLkFkaWFybmZjLmxvZyBmLkFkaWFybmZkLmxvZworJworIyBUaGlzIHdpbGwgdGVzdCBnaXQgbHMtZmlsZXMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBsc2ZpbGVzIGYuQWRpYXIiICcKKwlnaXQgbHMtZmlsZXMgZi4kQWRpYXJuZmMgPiBmLkFkaWFybmZjLmxvZyAmJgorCWdpdCBscy1maWxlcyBmLiRBZGlhcm5mZCA+IGYuQWRpYXJuZmQubG9nICYmCisJdGVzdCAtcyBmLkFkaWFybmZjLmxvZyAmJgorCXRlc3QgLXMgZi5BZGlhcm5mZC5sb2cgJiYKKwl0ZXN0X2NtcCBmLkFkaWFybmZjLmxvZyBmLkFkaWFybmZkLmxvZyAmJgorCXJtIGYuQWRpYXJuZmMubG9nIGYuQWRpYXJuZmQubG9nCisnCisjIFRoaXMgd2lsbCB0ZXN0IGdpdCBtdgordGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0IG12IiAnCisJZ2l0IG12IGYuJEFkaWFybmZkIGYuJE9kaWFybmZjICYmCisJZ2l0IG12IGQuJEFkaWFybmZkIGQuJE9kaWFybmZjICYmCisJZ2l0IG12IGwuJEFkaWFybmZkIGwuJE9kaWFybmZjICYmCisJZ2l0IGNvbW1pdCAtbSAibXYgQWRpYXJuZmQgT2RpYXJuZmMiCisnCisjIEZpbGVzIGNhbiBiZSBjaGVja2VkIG91dCBhcyBuZmMKKyMgQW5kIHRoZSBsaW5rIGhhcyBiZWVuIGNvcnJlY3RlZCBmcm9tIG5mZCB0byBuZmMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCBjaGVja291dCBuZmMiICcKKwlybSBmLiRPZGlhcm5mYyAmJgorCWdpdCBjaGVja291dCBmLiRPZGlhcm5mYworJworIyBNYWtlIGl0IHBvc3NpYmxlIHRvIGNoZWNrb3V0IGZpbGVzIHdpdGggdGhlaXIgTkZEIG5hbWVzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJnaXQgY2hlY2tvdXQgZmlsZSBuZmQiICcKKwlybSAtZiBmLiogJiYKKwlnaXQgY2hlY2tvdXQgZi4kT2RpYXJuZmQKKycKKyMgTWFrZSBpdCBwb3NzaWJsZSB0byBjaGVja291dCBsaW5rcyB3aXRoIHRoZWlyIE5GRCBuYW1lcwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZ2l0IGNoZWNrb3V0IGxpbmsgbmZkIiAnCisJcm0gbC4qICYmCisJZ2l0IGNoZWNrb3V0IGwuJE9kaWFybmZkCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCBjYXNlIG1hYzIiICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBtYWNfb3NfMgorJworIyBUaGlzIHdpbGwgdGVzdCBuZmQybmZjIGluIGdpdCBjb21taXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbW1pdCBmaWxlIGQyLkFkaWFybmZkL2YuQWRpYXJuZmQiICcKKwlta2RpciBkMi4kQWRpYXJuZmQgJiYKKwllY2hvIGQyLiRBZGlhcm5mZC9mLiRBZGlhcm5mZCA+ZDIuJEFkaWFybmZkL2YuJEFkaWFybmZkICYmCisJZ2l0IGFkZCBkMi4kQWRpYXJuZmQvZi4kQWRpYXJuZmQgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgZDIuJEFkaWFybmZkL2YuJEFkaWFybmZkIiAtLSBkMi4kQWRpYXJuZmQvZi4kQWRpYXJuZmQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIGZvciBsb25nIGRlY29tcG9zZWQgZmlsZW5hbWUiICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBtYWNfb3NfbG9uZ19uZmRfZm4KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIkFkZCBsb25nIGRlY29tcG9zZWQgZmlsZW5hbWUiICcKKwllY2hvIGxvbmdkID4kQWxvbmdkICYmCisJZ2l0IGFkZCAqICYmCisJZ2l0IGNvbW1pdCAtbSAiTG9uZyBmaWxlbmFtZSIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInNldHVwIGZvciBsb25nIHByZWNvbXBvc2VkIGZpbGVuYW1lIiAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFjX29zX2xvbmdfbmZjX2ZuCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJBZGQgbG9uZyBwcmVjb21wb3NlZCBmaWxlbmFtZSIgJworCWVjaG8gbG9uZ2MgPiRBbG9uZ2MgJiYKKwlnaXQgYWRkICogJiYKKwlnaXQgY29tbWl0IC1tICJMb25nIGZpbGVuYW1lIgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdoYW5kbGUgZXhpc3RpbmcgZGVjb21wb3NlZCBmaWxlbmFtZXMnICcKKwllY2hvIGNvbnRlbnQgPiJ2ZXJiYXRpbS4kQWRpYXJuZmQiICYmCisJZ2l0IC1jIGNvcmUucHJlY29tcG9zZXVuaWNvZGU9ZmFsc2UgYWRkICJ2ZXJiYXRpbS4kQWRpYXJuZmQiICYmCisJZ2l0IGNvbW1pdCAtbSAiZXhpc3RpbmcgZGVjb21wb3NlZCBmaWxlIiAmJgorCT5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLS1leGNsdWRlLXN0YW5kYXJkIC1vICJ2ZXJiYXRpbSoiID51bnRyYWNrZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdW50cmFja2VkCisnCisKKyMgVGVzdCBpZiB0aGUgZ2xvYmFsIGNvcmUucHJlY29tcG9zZXVuaWNvZGUgc3RvcHMgYXV0b3NlbnNpbmcKKyMgTXVzdCBiZSB0aGUgbGFzdCB0ZXN0IGNhc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlc3BlY3QgZ2l0IGNvbmZpZyAtLWdsb2JhbCBjb3JlLnByZWNvbXBvc2V1bmljb2RlIiAnCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCBjb3JlLnByZWNvbXBvc2V1bmljb2RlIHRydWUgJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisJcHJlY29tcG9zZXVuaWNvZGU9JChnaXQgY29uZmlnIGNvcmUucHJlY29tcG9zZXVuaWNvZGUpICYmCisJdGVzdCAiJHByZWNvbXBvc2V1bmljb2RlIiA9ICJ0cnVlIgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDAtZGlmZi1mb3JtYXQuc2ggYi90L3Q0MDAwLWRpZmYtZm9ybWF0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhkZTM2YjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDAwLWRpZmYtZm9ybWF0LnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBidWlsdC1pbiBkaWZmIG91dHB1dCBlbmdpbmUuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAorCitlY2hvID5wYXRoMCAnTGluZSAxCitMaW5lIDIKK2xpbmUgMycKK2NhdCBwYXRoMCA+cGF0aDEKK2NobW9kICt4IHBhdGgxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCAtLWFkZCB0d28gZmlsZXMgd2l0aCBhbmQgd2l0aG91dCAreC4nICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwIHBhdGgxCisnCisKK212IHBhdGgwIHBhdGgwLQorc2VkIC1lICdzL2xpbmUvTGluZS8nIDxwYXRoMC0gPnBhdGgwCitjaG1vZCAreCBwYXRoMAorcm0gLWYgcGF0aDEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzIC1wIGFmdGVyIGVkaXRpbmcgd29yayB0cmVlLicgJworCWdpdCBkaWZmLWZpbGVzIC1wID5hY3R1YWwKKycKKworIyB0aGF0J3MgYXMgZmFyIGFzIGl0IGNvbWVzCitpZiBbICIkKGdpdCBjb25maWcgLS1nZXQgY29yZS5maWxlbW9kZSkiID0gZmFsc2UgXQordGhlbgorCXNheSAnZmlsZW1vZGUgZGlzYWJsZWQgb24gdGhlIGZpbGVzeXN0ZW0nCisJdGVzdF9kb25lCitmaQorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorZGlmZiAtLWdpdCBhL3BhdGgwIGIvcGF0aDAKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CistLS0gYS9wYXRoMAorKysrIGIvcGF0aDAKK0BAIC0xLDMgKzEsMyBAQAorIExpbmUgMQorIExpbmUgMgorLWxpbmUgMworK0xpbmUgMworZGlmZiAtLWdpdCBhL3BhdGgxIGIvcGF0aDEKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQorLS0tIGEvcGF0aDEKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLUxpbmUgMQorLUxpbmUgMgorLWxpbmUgMworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIGdpdCBkaWZmLWZpbGVzIC1wIG91dHB1dC4nICcKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzIC1zIGFmdGVyIGVkaXRpbmcgd29yayB0cmVlJyAnCisJZ2l0IGRpZmYtZmlsZXMgLXMgPmFjdHVhbCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBhY3R1YWwgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzIC0tbm8tcGF0Y2ggYXMgc3lub255bSBmb3IgLXMnICcKKwlnaXQgZGlmZi1maWxlcyAtLW5vLXBhdGNoID5hY3R1YWwgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgYWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1maWxlcyAtLW5vLXBhdGNoIC0tcGF0Y2ggc2hvd3MgdGhlIHBhdGNoJyAnCisJZ2l0IGRpZmYtZmlsZXMgLS1uby1wYXRjaCAtLXBhdGNoID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzIC0tbm8tcGF0Y2ggLS1wYXRjaC13aXRoLXJhdyBzaG93cyB0aGUgcGF0Y2ggYW5kIHJhdyBkYXRhJyAnCisJZ2l0IGRpZmYtZmlsZXMgLS1uby1wYXRjaCAtLXBhdGNoLXdpdGgtcmF3ID5hY3R1YWwgJiYKKwlncmVwIC1xICJeOjEwMDY0NCAxMDA3NTUgLiogMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCXBhdGgwXCQiIGFjdHVhbCAmJgorCXRhaWwgLW4gKzQgYWN0dWFsID5hY3R1YWwtcGF0Y2ggJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgYWN0dWFsLXBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzIC0tcGF0Y2ggLS1uby1wYXRjaCBkb2VzIG5vdCBzaG93IHRoZSBwYXRjaCcgJworCWdpdCBkaWZmLWZpbGVzIC0tcGF0Y2ggLS1uby1wYXRjaCA+YWN0dWFsIDI+ZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDAxLWRpZmYtcmVuYW1lLnNoIGIvdC90NDAwMS1kaWZmLXJlbmFtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZjMyN2I3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAwMS1kaWZmLXJlbmFtZS5zaApAQCAtMCwwICsxLDE1OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHJlbmFtZSBkZXRlY3Rpb24gaW4gZGlmZiBlbmdpbmUuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAorCitlY2hvID5wYXRoMCAnTGluZSAxCitMaW5lIDIKK0xpbmUgMworTGluZSA0CitMaW5lIDUKK0xpbmUgNgorTGluZSA3CitMaW5lIDgKK0xpbmUgOQorTGluZSAxMAorbGluZSAxMQorTGluZSAxMgorTGluZSAxMworTGluZSAxNAorTGluZSAxNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndXBkYXRlLWluZGV4IC0tYWRkIGEgZmlsZS4nIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3dyaXRlIHRoYXQgdHJlZS4nIFwKKyAgICAndHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJiBlY2hvICR0cmVlJworCitzZWQgLWUgJ3MvbGluZS9MaW5lLycgPHBhdGgwID5wYXRoMQorcm0gLWYgcGF0aDAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZW5hbWVkIGFuZCBlZGl0ZWQgdGhlIGZpbGUuJyBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgcGF0aDAgcGF0aDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgZGlmZi1pbmRleCAtcCAtTSBhZnRlciByZW5hbWUgYW5kIGVkaXRpbmcuJyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC1wIC1NICR0cmVlID5jdXJyZW50JworY2F0ID5leHBlY3RlZCA8PFxFT0YKK2RpZmYgLS1naXQgYS9wYXRoMCBiL3BhdGgxCityZW5hbWUgZnJvbSBwYXRoMAorcmVuYW1lIHRvIHBhdGgxCistLS0gYS9wYXRoMAorKysrIGIvcGF0aDEKK0BAIC04LDcgKzgsNyBAQCBMaW5lIDcKKyBMaW5lIDgKKyBMaW5lIDkKKyBMaW5lIDEwCistbGluZSAxMQorK0xpbmUgMTEKKyBMaW5lIDEyCisgTGluZSAxMworIExpbmUgMTQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgdGhlIG91dHB1dC4nIFwKKyAgICAnY29tcGFyZV9kaWZmX3BhdGNoIGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhdm91ciBzYW1lIGJhc2VuYW1lcyBvdmVyIGRpZmZlcmVudCBvbmVzJyAnCisJY3AgcGF0aDEgYW5vdGhlci1wYXRoICYmCisJZ2l0IGFkZCBhbm90aGVyLXBhdGggJiYKKwlnaXQgY29tbWl0IC1tIDEgJiYKKwlnaXQgcm0gcGF0aDEgJiYKKwlta2RpciBzdWJkaXIgJiYKKwlnaXQgbXYgYW5vdGhlci1wYXRoIHN1YmRpci9wYXRoMSAmJgorCWdpdCBzdGF0dXMgfCB0ZXN0X2kxOG5ncmVwICJyZW5hbWVkOiAuKnBhdGgxIC0+IHN1YmRpci9wYXRoMSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhdm91ciBzYW1lIGJhc2VuYW1lcyBldmVuIHdpdGggbWlub3IgZGlmZmVyZW5jZXMnICcKKwlnaXQgc2hvdyBIRUFEOnBhdGgxIHwgc2VkICJzLzE1LzE2LyIgPiBzdWJkaXIvcGF0aDEgJiYKKwlnaXQgc3RhdHVzIHwgdGVzdF9pMThuZ3JlcCAicmVuYW1lZDogLipwYXRoMSAtPiBzdWJkaXIvcGF0aDEiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgbWFueSByZW5hbWUgc291cmNlIGNhbmRpZGF0ZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsKKwlkbworCQlmb3IgaiBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OworCQlkbworCQkJZWNobyAiJGkkaiIgPiJwYXRoJGkkaiIKKwkJZG9uZQorCWRvbmUgJiYKKwlnaXQgYWRkICJwYXRoPz8iICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiaHVuZHJlZCIgJiYKKwkoY2F0IHBhdGgxOyBlY2hvIG5ldykgPm5ldy1wYXRoICYmCisJZWNobyBvbGQgPj5wYXRoMSAmJgorCWdpdCBhZGQgbmV3LXBhdGggcGF0aDEgJiYKKwlnaXQgZGlmZiAtbCA0IC1DIC1DIC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgPmFjdHVhbCAyPmFjdHVhbC5lcnIgJiYKKwlzZWQgLWUgInMvXlwoW0NNXVwpWzAtOV0qCS9cMQkvIiBhY3R1YWwgPmFjdHVhbC5tdW5nZWQgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlDCXBhdGgxCW5ldy1wYXRoCisJTQlwYXRoMQorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwubXVuZ2VkICYmCisJZ3JlcCB3YXJuaW5nIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHByZXR0eSBwcmludCB3aXRoIG5vdGhpbmcgaW4gY29tbW9uJyAnCisJbWtkaXIgLXAgYS9iLyAmJgorCTogPmEvYi9jICYmCisJZ2l0IGFkZCBhL2IvYyAmJgorCWdpdCBjb21taXQgLW0gImNyZWF0ZSBhL2IvYyIgJiYKKwlta2RpciAtcCBjL2IvICYmCisJZ2l0IG12IGEvYi9jIGMvYi9hICYmCisJZ2l0IGNvbW1pdCAtbSAiYS9iL2MgLT4gYy9iL2EiICYmCisJZ2l0IGRpZmYgLU0gLS1zdW1tYXJ5IEhFQUReIEhFQUQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIiBhL2IvYyA9PiBjL2IvYSAiIG91dHB1dCAmJgorCWdpdCBkaWZmIC1NIC0tc3RhdCBIRUFEXiBIRUFEID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICIgYS9iL2MgPT4gYy9iL2EgIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHByZXR0eSBwcmludCB3aXRoIGNvbW1vbiBwcmVmaXgnICcKKwlta2RpciAtcCBjL2QgJiYKKwlnaXQgbXYgYy9iL2EgYy9kL2UgJiYKKwlnaXQgY29tbWl0IC1tICJjL2IvYSAtPiBjL2QvZSIgJiYKKwlnaXQgZGlmZiAtTSAtLXN1bW1hcnkgSEVBRF4gSEVBRCA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiIGMve2IvYSA9PiBkL2V9ICIgb3V0cHV0ICYmCisJZ2l0IGRpZmYgLU0gLS1zdGF0IEhFQUReIEhFQUQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIiBjL3tiL2EgPT4gZC9lfSAiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgcHJldHR5IHByaW50IHdpdGggY29tbW9uIHN1ZmZpeCcgJworCW1rZGlyIGQgJiYKKwlnaXQgbXYgYy9kL2UgZC9lICYmCisJZ2l0IGNvbW1pdCAtbSAiYy9kL2UgLT4gZC9lIiAmJgorCWdpdCBkaWZmIC1NIC0tc3VtbWFyeSBIRUFEXiBIRUFEID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICIge2MvZCA9PiBkfS9lICIgb3V0cHV0ICYmCisJZ2l0IGRpZmYgLU0gLS1zdGF0IEhFQUReIEhFQUQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIiB7Yy9kID0+IGR9L2UgIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHByZXR0eSBwcmludCB3aXRoIGNvbW1vbiBwcmVmaXggYW5kIHN1ZmZpeCcgJworCW1rZGlyIGQvZiAmJgorCWdpdCBtdiBkL2UgZC9mL2UgJiYKKwlnaXQgY29tbWl0IC1tICJkL2UgLT4gZC9mL2UiICYmCisJZ2l0IGRpZmYgLU0gLS1zdW1tYXJ5IEhFQUReIEhFQUQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIiBkL3sgPT4gZn0vZSAiIG91dHB1dCAmJgorCWdpdCBkaWZmIC1NIC0tc3RhdCBIRUFEXiBIRUFEID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICIgZC97ID0+IGZ9L2UgIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHByZXR0eSBwcmludCBjb21tb24gcHJlZml4IGFuZCBzdWZmaXggb3ZlcmxhcCcgJworCW1rZGlyIGQvZi9mICYmCisJZ2l0IG12IGQvZi9lIGQvZi9mL2UgJiYKKwlnaXQgY29tbWl0IC1tICJkL2YvZSBkL2YvZi9lIiAmJgorCWdpdCBkaWZmIC1NIC0tc3VtbWFyeSBIRUFEXiBIRUFEID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICIgZC9mL3sgPT4gZn0vZSAiIG91dHB1dCAmJgorCWdpdCBkaWZmIC1NIC0tc3RhdCBIRUFEXiBIRUFEID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICIgZC9mL3sgPT4gZn0vZSAiIG91dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDItZGlmZi1iYXNpYy5zaCBiL3QvdDQwMDItZGlmZi1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWU4YjgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAwMi1kaWZmLWJhc2ljLnNoCkBAIC0wLDAgKzEsMjY2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZGlmZiByYXctb3V0cHV0LgorCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXJlYWQtdHJlZS1tLTN3YXkuc2gKKworY2F0ID4udGVzdC1wbGFpbi1PQSA8PFxFT0YKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgY2NiYTcyYWQzODg4YTM1MjBiMzllZmNmNzgwYjllZTY0MTY3NTM1ZCBBCUFBCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDdlNDI2ZmIwNzk0NzlmZDY3ZjZkODFmOTg0ZTRlYzY0OWE0NGJjMjUgQQlBTgorOjEwMDY0NCAwMDAwMDAgYmNjNjhlZjk5NzAxNzQ2NmQ1YzkwOTRiY2Y3NjkyMjk1ZjU4OGM5YSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJREQKKzowMDAwMDAgMDQwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNmQ1MGY2NWQzYmRhYjkxYzYzNDQ0Mjk0ZDM4ZjA4YWVmZjMyOGU0MiBBCURGCis6MTAwNjQ0IDAwMDAwMCAxNDFjMWYxNjQyMzI4ZTRiYzQ2YTdkODAxYTcxZGEzOTJlNjY3OTFlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlETQorOjEwMDY0NCAwMDAwMDAgMzVhYmRlMTUwNmRkZjgwNjU3MmZmNGQ0MDdiZDA2ODg1ZDBmOGVlOSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJRE4KKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMWQ0MTEyMmViZGQ3YTY0MGYyOWQzYzljYzRmOWQ3MDA5NDM3NDc2MiBBCUxMCis6MTAwNjQ0IDEwMDY0NCAwM2YyNGM4YzQ3MDBiYWJjY2ZkMjhiNjU0ZTdlOGVhYzQwMmFkNmNkIDEwM2Q5Zjg5YjUwYjlhYWQwMzA1NGI1NzliZTVlN2FhNjY1ZjJkNTcgTQlNRAorOjEwMDY0NCAxMDA2NDQgYjI1ODUwOGFmYjdjZWI0NDk5ODFiZDlkNjNkMmQzZTk3MWJmOGQzNCBiNDMxYjI3MmQ4MjlmZjNhYTRkMWE1MDg1ZjQzOTRhYjRkMzMwNWI2IE0JTU0KKzoxMDA2NDQgMTAwNjQ0IGJkMDg0YjBjMjdjN2I2Y2MzNGYxMWQ2ZDA1MDlhMjliZTNjYWY5NzAgYTcxNmQ1OGRlNGE1NzBlMDAzOGY1YzMwN2JkOGRiMzRkYWVhMDIxZiBNCU1OCis6MTAwNjQ0IDEwMDY0NCA0MGM5NTlmOTg0YzhiODlhMmIwMjUyMGQxN2YwMGQ3MTdmMDI0Mzk3IDJhYzU0N2FlOTYxNGEwMGQxYjI4Mjc1ZGU2MDgxMzFmN2EwZTI1OWYgTQlTUworOjEwMDY0NCAxMDA2NDQgNGFjMTM0NTg4OTlhYjkwOGVmM2IxMTI4ZmEzNzhkYWVmYzg4ZDM1NiA0Yzg2ZjlhODVmYmM1ZTY4MDRlZTJlMTdhNzk3NTM4ZmJlNzg1YmNhIE0JVFQKKzowNDAwMDAgMDQwMDAwIDdkNjcwZmRjZGI5OTI5ZjZjN2RhYzE5NmZmNzg2ODljZDFjNTY2YTEgNWU1ZjIyMDcyYmIzOWY2ZTEyY2Y2NjNhNTdjYjYzNGM3NmVlZmI0OSBNCVoKK0VPRgorCitjYXQgPi50ZXN0LXJlY3Vyc2l2ZS1PQSA8PFxFT0YKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgY2NiYTcyYWQzODg4YTM1MjBiMzllZmNmNzgwYjllZTY0MTY3NTM1ZCBBCUFBCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDdlNDI2ZmIwNzk0NzlmZDY3ZjZkODFmOTg0ZTRlYzY0OWE0NGJjMjUgQQlBTgorOjEwMDY0NCAwMDAwMDAgYmNjNjhlZjk5NzAxNzQ2NmQ1YzkwOTRiY2Y3NjkyMjk1ZjU4OGM5YSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJREQKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNjhhNmQ4YjkxZGExMTA0NWNmNGFhM2E1YWI5ZjJhNzgxYzcwMTI0OSBBCURGL0RGCis6MTAwNjQ0IDAwMDAwMCAxNDFjMWYxNjQyMzI4ZTRiYzQ2YTdkODAxYTcxZGEzOTJlNjY3OTFlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlETQorOjEwMDY0NCAwMDAwMDAgMzVhYmRlMTUwNmRkZjgwNjU3MmZmNGQ0MDdiZDA2ODg1ZDBmOGVlOSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJRE4KKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMWQ0MTEyMmViZGQ3YTY0MGYyOWQzYzljYzRmOWQ3MDA5NDM3NDc2MiBBCUxMCis6MTAwNjQ0IDEwMDY0NCAwM2YyNGM4YzQ3MDBiYWJjY2ZkMjhiNjU0ZTdlOGVhYzQwMmFkNmNkIDEwM2Q5Zjg5YjUwYjlhYWQwMzA1NGI1NzliZTVlN2FhNjY1ZjJkNTcgTQlNRAorOjEwMDY0NCAxMDA2NDQgYjI1ODUwOGFmYjdjZWI0NDk5ODFiZDlkNjNkMmQzZTk3MWJmOGQzNCBiNDMxYjI3MmQ4MjlmZjNhYTRkMWE1MDg1ZjQzOTRhYjRkMzMwNWI2IE0JTU0KKzoxMDA2NDQgMTAwNjQ0IGJkMDg0YjBjMjdjN2I2Y2MzNGYxMWQ2ZDA1MDlhMjliZTNjYWY5NzAgYTcxNmQ1OGRlNGE1NzBlMDAzOGY1YzMwN2JkOGRiMzRkYWVhMDIxZiBNCU1OCis6MTAwNjQ0IDEwMDY0NCA0MGM5NTlmOTg0YzhiODlhMmIwMjUyMGQxN2YwMGQ3MTdmMDI0Mzk3IDJhYzU0N2FlOTYxNGEwMGQxYjI4Mjc1ZGU2MDgxMzFmN2EwZTI1OWYgTQlTUworOjEwMDY0NCAxMDA2NDQgNGFjMTM0NTg4OTlhYjkwOGVmM2IxMTI4ZmEzNzhkYWVmYzg4ZDM1NiA0Yzg2ZjlhODVmYmM1ZTY4MDRlZTJlMTdhNzk3NTM4ZmJlNzg1YmNhIE0JVFQKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOGFjYjhlOTc1MGUzZjY0NGJmMzIzZmNmM2QzMzg4NDlkYjEwNmM3NyBBCVovQUEKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDg3NDk0MjYyMDg0Y2VmZWU3ZWQ0ODRkMjBjOGRjMDU4MDc5MTI3MiBBCVovQU4KKzoxMDA2NDQgMDAwMDAwIDg3OTAwN2VmYWU2MjRkMmIxMzA3MjE0YjI0YTk1NmYwYThkNjg2YTggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECVovREQKKzoxMDA2NDQgMDAwMDAwIDliNTQxYjIyNzVjMDZlM2E3YjEzZjI4YmFkZjUyOTRlMmFlNjNkZjQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECVovRE0KKzoxMDA2NDQgMDAwMDAwIGJlYjVkMzhjNTUyODNkMjgwNjg1ZWEyMWEwZTUwY2ZjYzBjYTA2NGEgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECVovRE4KKzoxMDA2NDQgMTAwNjQ0IGQ0MWZkYTQxYjdlYzRkZTQ2YjQzY2I3ZWE0MmE0NTAwMWFlMzkzZDUgYTc5YWMzYmU5Mzc3NjM5ZTFjN2QxZWRmMWFlMWIzYTVmMGNjZDhhOSBNCVovTUQKKzoxMDA2NDQgMTAwNjQ0IDRjYTIyYmFlMjUyN2QzZDllMTY3NjQ5OGEwZmJhM2IzNTViZDEyNzggNjE0MjJiYTljMmM4NzM0MTYwNjFhODhjZDQwYTU5YTM1YjU3NjQ3NCBNCVovTU0KKzoxMDA2NDQgMTAwNjQ0IGIxNmQ3YjI1Yjg2OWYyYmViMTI0ZWZhNTM0NjdkOGExNTUwYWQ2OTQgYTVjNTQ0YzIxY2ZjYjA3ZWI4MGE0ZDg5YTViN2QxNTcwMDAyZWRmZCBNCVovTU4KK0VPRgorY2F0ID4udGVzdC1wbGFpbi1PQiA8PFxFT0YKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNmFhMmI1MzM1YjE2NDMxYTBlZjcxZTVjMGEyOGJlNjkxODNjZjZhMiBBCUFBCis6MTAwNjQ0IDAwMDAwMCBiY2M2OGVmOTk3MDE3NDY2ZDVjOTA5NGJjZjc2OTIyOTVmNTg4YzlhIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlERAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA3MTQyMGFiODFlMjU0MTQ1ZDI2ZDZmYzBjZGRlZTY0YzFhY2Q0Nzg3IEEJREYKKzoxMDA2NDQgMTAwNjQ0IDE0MWMxZjE2NDIzMjhlNGJjNDZhN2Q4MDFhNzFkYTM5MmU2Njc5MWUgM2M0ZDhkZTVmYmFkMDg1NzJiYWI4ZTEwZWVmOGRiYjI2NGNmMDIzMSBNCURNCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDFkNDExMjJlYmRkN2E2NDBmMjlkM2M5Y2M0ZjlkNzAwOTQzNzQ3NjIgQQlMTAorOjEwMDY0NCAwMDAwMDAgMDNmMjRjOGM0NzAwYmFiY2NmZDI4YjY1NGU3ZThlYWM0MDJhZDZjZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJTUQKKzoxMDA2NDQgMTAwNjQ0IGIyNTg1MDhhZmI3Y2ViNDQ5OTgxYmQ5ZDYzZDJkM2U5NzFiZjhkMzQgMTk5ODlkNDU1OWFhZTQxN2ZlZGVlMjQwY2NmMmJhMzE1ZWE0ZGMyYiBNCU1NCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDE1ODg1ODgxZWE2OTExNTM1MWMwOWIzODM3MWYwMzQ4YTNmYjhjNjcgQQlOQQorOjEwMDY0NCAwMDAwMDAgYTRlMTc5ZTQyOTFlNTUzNmE1ZTFjODJlMDkxMDUyNzcyZDJjNWE5MyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJTkQKKzoxMDA2NDQgMTAwNjQ0IGM4ZjI1NzgxZThmMTc5MmUzZTQwYjc0MjI1ZTIwNTUzMDQxYjUyMjYgY2RiOWE4YzNkYTU3MTUwMmFjMzAyMjVlOWMxN2JlY2NiODM4Nzk4MyBNCU5NCis6MTAwNjQ0IDEwMDY0NCA0MGM5NTlmOTg0YzhiODlhMmIwMjUyMGQxN2YwMGQ3MTdmMDI0Mzk3IDJhYzU0N2FlOTYxNGEwMGQxYjI4Mjc1ZGU2MDgxMzFmN2EwZTI1OWYgTQlTUworOjEwMDY0NCAxMDA2NDQgNGFjMTM0NTg4OTlhYjkwOGVmM2IxMTI4ZmEzNzhkYWVmYzg4ZDM1NiBjNGU0YTEyMjMxYjlmYTc5YTAwNTNjYjYwNzdmY2IyMWJiNWIxMzVhIE0JVFQKKzowNDAwMDAgMDQwMDAwIDdkNjcwZmRjZGI5OTI5ZjZjN2RhYzE5NmZmNzg2ODljZDFjNTY2YTEgMWJhNTIzOTU1ZDUxNjA2ODFhZjY1Y2I3NzY0MTFmNTc0YzFlODE1NSBNCVoKK0VPRgorY2F0ID4udGVzdC1yZWN1cnNpdmUtT0IgPDxcRU9GCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDZhYTJiNTMzNWIxNjQzMWEwZWY3MWU1YzBhMjhiZTY5MTgzY2Y2YTIgQQlBQQorOjEwMDY0NCAwMDAwMDAgYmNjNjhlZjk5NzAxNzQ2NmQ1YzkwOTRiY2Y3NjkyMjk1ZjU4OGM5YSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJREQKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNzE0MjBhYjgxZTI1NDE0NWQyNmQ2ZmMwY2RkZWU2NGMxYWNkNDc4NyBBCURGCis6MTAwNjQ0IDEwMDY0NCAxNDFjMWYxNjQyMzI4ZTRiYzQ2YTdkODAxYTcxZGEzOTJlNjY3OTFlIDNjNGQ4ZGU1ZmJhZDA4NTcyYmFiOGUxMGVlZjhkYmIyNjRjZjAyMzEgTQlETQorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxZDQxMTIyZWJkZDdhNjQwZjI5ZDNjOWNjNGY5ZDcwMDk0Mzc0NzYyIEEJTEwKKzoxMDA2NDQgMDAwMDAwIDAzZjI0YzhjNDcwMGJhYmNjZmQyOGI2NTRlN2U4ZWFjNDAyYWQ2Y2QgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECU1ECis6MTAwNjQ0IDEwMDY0NCBiMjU4NTA4YWZiN2NlYjQ0OTk4MWJkOWQ2M2QyZDNlOTcxYmY4ZDM0IDE5OTg5ZDQ1NTlhYWU0MTdmZWRlZTI0MGNjZjJiYTMxNWVhNGRjMmIgTQlNTQorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxNTg4NTg4MWVhNjkxMTUzNTFjMDliMzgzNzFmMDM0OGEzZmI4YzY3IEEJTkEKKzoxMDA2NDQgMDAwMDAwIGE0ZTE3OWU0MjkxZTU1MzZhNWUxYzgyZTA5MTA1Mjc3MmQyYzVhOTMgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECU5ECis6MTAwNjQ0IDEwMDY0NCBjOGYyNTc4MWU4ZjE3OTJlM2U0MGI3NDIyNWUyMDU1MzA0MWI1MjI2IGNkYjlhOGMzZGE1NzE1MDJhYzMwMjI1ZTljMTdiZWNjYjgzODc5ODMgTQlOTQorOjEwMDY0NCAxMDA2NDQgNDBjOTU5Zjk4NGM4Yjg5YTJiMDI1MjBkMTdmMDBkNzE3ZjAyNDM5NyAyYWM1NDdhZTk2MTRhMDBkMWIyODI3NWRlNjA4MTMxZjdhMGUyNTlmIE0JU1MKKzoxMDA2NDQgMTAwNjQ0IDRhYzEzNDU4ODk5YWI5MDhlZjNiMTEyOGZhMzc4ZGFlZmM4OGQzNTYgYzRlNGExMjIzMWI5ZmE3OWEwMDUzY2I2MDc3ZmNiMjFiYjViMTM1YSBNCVRUCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDZjMGI5OTI4NmQwYmNlNTUxYWM0YTdiM2RmZjhiNzA2ZWRmZjM3MTUgQQlaL0FBCis6MTAwNjQ0IDAwMDAwMCA4NzkwMDdlZmFlNjI0ZDJiMTMwNzIxNGIyNGE5NTZmMGE4ZDY4NmE4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL0RECis6MTAwNjQ0IDEwMDY0NCA5YjU0MWIyMjc1YzA2ZTNhN2IxM2YyOGJhZGY1Mjk0ZTJhZTYzZGY0IGQ3NzM3MWQxNTgxN2ZjYWE1N2VlZWMyN2Y3NzBjNTA1YmE5NzRlYzEgTQlaL0RNCis6MTAwNjQ0IDAwMDAwMCBkNDFmZGE0MWI3ZWM0ZGU0NmI0M2NiN2VhNDJhNDUwMDFhZTM5M2Q1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL01ECis6MTAwNjQ0IDEwMDY0NCA0Y2EyMmJhZTI1MjdkM2Q5ZTE2NzY0OThhMGZiYTNiMzU1YmQxMjc4IDY5N2FhZDc3MTVhMWU3MzA2Y2E3NjI5MGEzZGQ0MjA4ZmJhZWRkZmEgTQlaL01NCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGQxMjk3OWMyMmZmZjY5YzU5Y2E5NDA5ZTdhOGZlM2VlMjVlYWVlODAgQQlaL05BCis6MTAwNjQ0IDAwMDAwMCBhMTgzOTNjNjM2Yjk4ZTliZDcyOTZiOGI0MzdlYTQ5OTJiNzI0NDBjIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL05ECis6MTAwNjQ0IDEwMDY0NCAzZmRiZTE3ZmQwMTMzMDNhMmU5ODFlMWNhMWM2Y2Q2ZTcyNzg5MDg3IDdlMDlkNmEzYTE0YmQ2MzA5MTNlOGM3NTY5M2NlYTMyMTU3YjYwNmQgTQlaL05NCitFT0YKK2NhdCA+LnRlc3QtcGxhaW4tQUIgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCBjY2JhNzJhZDM4ODhhMzUyMGIzOWVmY2Y3ODBiOWVlNjQxNjc1MzVkIDZhYTJiNTMzNWIxNjQzMWEwZWY3MWU1YzBhMjhiZTY5MTgzY2Y2YTIgTQlBQQorOjEwMDY0NCAwMDAwMDAgN2U0MjZmYjA3OTQ3OWZkNjdmNmQ4MWY5ODRlNGVjNjQ5YTQ0YmMyNSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJQU4KKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNzE0MjBhYjgxZTI1NDE0NWQyNmQ2ZmMwY2RkZWU2NGMxYWNkNDc4NyBBCURGCis6MDQwMDAwIDAwMDAwMCA2ZDUwZjY1ZDNiZGFiOTFjNjM0NDQyOTRkMzhmMDhhZWZmMzI4ZTQyIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlERgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAzYzRkOGRlNWZiYWQwODU3MmJhYjhlMTBlZWY4ZGJiMjY0Y2YwMjMxIEEJRE0KKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMzVhYmRlMTUwNmRkZjgwNjU3MmZmNGQ0MDdiZDA2ODg1ZDBmOGVlOSBBCUROCis6MTAwNjQ0IDAwMDAwMCAxMDNkOWY4OWI1MGI5YWFkMDMwNTRiNTc5YmU1ZTdhYTY2NWYyZDU3IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlNRAorOjEwMDY0NCAxMDA2NDQgYjQzMWIyNzJkODI5ZmYzYWE0ZDFhNTA4NWY0Mzk0YWI0ZDMzMDViNiAxOTk4OWQ0NTU5YWFlNDE3ZmVkZWUyNDBjY2YyYmEzMTVlYTRkYzJiIE0JTU0KKzoxMDA2NDQgMTAwNjQ0IGE3MTZkNThkZTRhNTcwZTAwMzhmNWMzMDdiZDhkYjM0ZGFlYTAyMWYgYmQwODRiMGMyN2M3YjZjYzM0ZjExZDZkMDUwOWEyOWJlM2NhZjk3MCBNCU1OCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDE1ODg1ODgxZWE2OTExNTM1MWMwOWIzODM3MWYwMzQ4YTNmYjhjNjcgQQlOQQorOjEwMDY0NCAwMDAwMDAgYTRlMTc5ZTQyOTFlNTUzNmE1ZTFjODJlMDkxMDUyNzcyZDJjNWE5MyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJTkQKKzoxMDA2NDQgMTAwNjQ0IGM4ZjI1NzgxZThmMTc5MmUzZTQwYjc0MjI1ZTIwNTUzMDQxYjUyMjYgY2RiOWE4YzNkYTU3MTUwMmFjMzAyMjVlOWMxN2JlY2NiODM4Nzk4MyBNCU5NCis6MTAwNjQ0IDEwMDY0NCA0Yzg2ZjlhODVmYmM1ZTY4MDRlZTJlMTdhNzk3NTM4ZmJlNzg1YmNhIGM0ZTRhMTIyMzFiOWZhNzlhMDA1M2NiNjA3N2ZjYjIxYmI1YjEzNWEgTQlUVAorOjA0MDAwMCAwNDAwMDAgNWU1ZjIyMDcyYmIzOWY2ZTEyY2Y2NjNhNTdjYjYzNGM3NmVlZmI0OSAxYmE1MjM5NTVkNTE2MDY4MWFmNjVjYjc3NjQxMWY1NzRjMWU4MTU1IE0JWgorRU9GCitjYXQgPi50ZXN0LXJlY3Vyc2l2ZS1BQiA8PFxFT0YKKzoxMDA2NDQgMTAwNjQ0IGNjYmE3MmFkMzg4OGEzNTIwYjM5ZWZjZjc4MGI5ZWU2NDE2NzUzNWQgNmFhMmI1MzM1YjE2NDMxYTBlZjcxZTVjMGEyOGJlNjkxODNjZjZhMiBNCUFBCis6MTAwNjQ0IDAwMDAwMCA3ZTQyNmZiMDc5NDc5ZmQ2N2Y2ZDgxZjk4NGU0ZWM2NDlhNDRiYzI1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlBTgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA3MTQyMGFiODFlMjU0MTQ1ZDI2ZDZmYzBjZGRlZTY0YzFhY2Q0Nzg3IEEJREYKKzoxMDA2NDQgMDAwMDAwIDY4YTZkOGI5MWRhMTEwNDVjZjRhYTNhNWFiOWYyYTc4MWM3MDEyNDkgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECURGL0RGCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDNjNGQ4ZGU1ZmJhZDA4NTcyYmFiOGUxMGVlZjhkYmIyNjRjZjAyMzEgQQlETQorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAzNWFiZGUxNTA2ZGRmODA2NTcyZmY0ZDQwN2JkMDY4ODVkMGY4ZWU5IEEJRE4KKzoxMDA2NDQgMDAwMDAwIDEwM2Q5Zjg5YjUwYjlhYWQwMzA1NGI1NzliZTVlN2FhNjY1ZjJkNTcgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECU1ECis6MTAwNjQ0IDEwMDY0NCBiNDMxYjI3MmQ4MjlmZjNhYTRkMWE1MDg1ZjQzOTRhYjRkMzMwNWI2IDE5OTg5ZDQ1NTlhYWU0MTdmZWRlZTI0MGNjZjJiYTMxNWVhNGRjMmIgTQlNTQorOjEwMDY0NCAxMDA2NDQgYTcxNmQ1OGRlNGE1NzBlMDAzOGY1YzMwN2JkOGRiMzRkYWVhMDIxZiBiZDA4NGIwYzI3YzdiNmNjMzRmMTFkNmQwNTA5YTI5YmUzY2FmOTcwIE0JTU4KKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTU4ODU4ODFlYTY5MTE1MzUxYzA5YjM4MzcxZjAzNDhhM2ZiOGM2NyBBCU5BCis6MTAwNjQ0IDAwMDAwMCBhNGUxNzllNDI5MWU1NTM2YTVlMWM4MmUwOTEwNTI3NzJkMmM1YTkzIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlORAorOjEwMDY0NCAxMDA2NDQgYzhmMjU3ODFlOGYxNzkyZTNlNDBiNzQyMjVlMjA1NTMwNDFiNTIyNiBjZGI5YThjM2RhNTcxNTAyYWMzMDIyNWU5YzE3YmVjY2I4Mzg3OTgzIE0JTk0KKzoxMDA2NDQgMTAwNjQ0IDRjODZmOWE4NWZiYzVlNjgwNGVlMmUxN2E3OTc1MzhmYmU3ODViY2EgYzRlNGExMjIzMWI5ZmE3OWEwMDUzY2I2MDc3ZmNiMjFiYjViMTM1YSBNCVRUCis6MTAwNjQ0IDEwMDY0NCA4YWNiOGU5NzUwZTNmNjQ0YmYzMjNmY2YzZDMzODg0OWRiMTA2Yzc3IDZjMGI5OTI4NmQwYmNlNTUxYWM0YTdiM2RmZjhiNzA2ZWRmZjM3MTUgTQlaL0FBCis6MTAwNjQ0IDAwMDAwMCAwODc0OTQyNjIwODRjZWZlZTdlZDQ4NGQyMGM4ZGMwNTgwNzkxMjcyIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL0FOCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGQ3NzM3MWQxNTgxN2ZjYWE1N2VlZWMyN2Y3NzBjNTA1YmE5NzRlYzEgQQlaL0RNCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGJlYjVkMzhjNTUyODNkMjgwNjg1ZWEyMWEwZTUwY2ZjYzBjYTA2NGEgQQlaL0ROCis6MTAwNjQ0IDAwMDAwMCBhNzlhYzNiZTkzNzc2MzllMWM3ZDFlZGYxYWUxYjNhNWYwY2NkOGE5IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL01ECis6MTAwNjQ0IDEwMDY0NCA2MTQyMmJhOWMyYzg3MzQxNjA2MWE4OGNkNDBhNTlhMzViNTc2NDc0IDY5N2FhZDc3MTVhMWU3MzA2Y2E3NjI5MGEzZGQ0MjA4ZmJhZWRkZmEgTQlaL01NCis6MTAwNjQ0IDEwMDY0NCBhNWM1NDRjMjFjZmNiMDdlYjgwYTRkODlhNWI3ZDE1NzAwMDJlZGZkIGIxNmQ3YjI1Yjg2OWYyYmViMTI0ZWZhNTM0NjdkOGExNTUwYWQ2OTQgTQlaL01OCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGQxMjk3OWMyMmZmZjY5YzU5Y2E5NDA5ZTdhOGZlM2VlMjVlYWVlODAgQQlaL05BCis6MTAwNjQ0IDAwMDAwMCBhMTgzOTNjNjM2Yjk4ZTliZDcyOTZiOGI0MzdlYTQ5OTJiNzI0NDBjIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlaL05ECis6MTAwNjQ0IDEwMDY0NCAzZmRiZTE3ZmQwMTMzMDNhMmU5ODFlMWNhMWM2Y2Q2ZTcyNzg5MDg3IDdlMDlkNmEzYTE0YmQ2MzA5MTNlOGM3NTY5M2NlYTMyMTU3YjYwNmQgTQlaL05NCitFT0YKKworY21wX2RpZmZfZmlsZXNfb3V0cHV0ICgpIHsKKyAgICAjIGRpZmYtZmlsZXMgbmV2ZXIgcmVwb3J0cyBhZGRpdGlvbnMuICBBbHNvIGl0IGRvZXMgbm90IGZpbGwgaW4gdGhlCisgICAgIyBvYmplY3QgSUQgZm9yIHRoZSBjaGFuZ2VkIGZpbGVzIGJlY2F1c2UgaXQgd2FudHMgeW91IHRvIGxvb2sgYXQgdGhlCisgICAgIyBmaWxlc3lzdGVtLgorICAgIHNlZCA8IiQyIiA+LnRlc3QtdG1wIFwKKwktZSAnL146MDAwMDAwIC9kO3MvJyRfeDQwJ1woIFtNQ1JORFVdWzAtOV0qXCkJLyckX3o0MCdcMQkvJyAmJgorICAgIHRlc3RfY21wICIkMSIgLnRlc3QtdG1wCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgb2Yga25vd24gdHJlZXMuJyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgJHRyZWVfTyAkdHJlZV9BID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXBsYWluLU9BJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi10cmVlIG9mIGtub3duIHRyZWVzLicgXAorICAgICdnaXQgZGlmZi10cmVlIC1yICR0cmVlX08gJHRyZWVfQSA+LnRlc3QtYSAmJgorICAgICBjbXAgLXMgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtT0EnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgb2Yga25vd24gdHJlZXMuJyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgJHRyZWVfTyAkdHJlZV9CID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXBsYWluLU9CJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi10cmVlIG9mIGtub3duIHRyZWVzLicgXAorICAgICdnaXQgZGlmZi10cmVlIC1yICR0cmVlX08gJHRyZWVfQiA+LnRlc3QtYSAmJgorICAgICBjbXAgLXMgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtT0InCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgb2Yga25vd24gdHJlZXMuJyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgJHRyZWVfQSAkdHJlZV9CID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXBsYWluLUFCJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi10cmVlIG9mIGtub3duIHRyZWVzLicgXAorICAgICdnaXQgZGlmZi10cmVlIC1yICR0cmVlX0EgJHRyZWVfQiA+LnRlc3QtYSAmJgorICAgICBjbXAgLXMgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtQUInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgLS1zdGRpbiBvZiBrbm93biB0cmVlcy4nIFwKKyAgICAnZWNobyAkdHJlZV9BICR0cmVlX0IgfCBnaXQgZGlmZi10cmVlIC0tc3RkaW4gPiAudGVzdC1hICYmCisgICAgIGVjaG8gJHRyZWVfQSAkdHJlZV9CID4gLnRlc3QtcGxhaW4tQUJ4ICYmCisgICAgIGNhdCAudGVzdC1wbGFpbi1BQiA+PiAudGVzdC1wbGFpbi1BQnggJiYKKyAgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtcGxhaW4tQUJ4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi10cmVlIC0tc3RkaW4gb2Yga25vd24gdHJlZXMuJyBcCisgICAgJ2VjaG8gJHRyZWVfQSAkdHJlZV9CIHwgZ2l0IGRpZmYtdHJlZSAtciAtLXN0ZGluID4gLnRlc3QtYSAmJgorICAgICBlY2hvICR0cmVlX0EgJHRyZWVfQiA+IC50ZXN0LXJlY3Vyc2l2ZS1BQnggJiYKKyAgICAgY2F0IC50ZXN0LXJlY3Vyc2l2ZS1BQiA+PiAudGVzdC1yZWN1cnNpdmUtQUJ4ICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXJlY3Vyc2l2ZS1BQngnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLWNhY2hlIE8gd2l0aCBBIGluIGNhY2hlJyBcCisgICAgJ2dpdCByZWFkLXRyZWUgJHRyZWVfQSAmJgorICAgICBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZV9PID4udGVzdC1hICYmCisgICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LXJlY3Vyc2l2ZS1PQScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtY2FjaGUgTyB3aXRoIEIgaW4gY2FjaGUnIFwKKyAgICAnZ2l0IHJlYWQtdHJlZSAkdHJlZV9CICYmCisgICAgIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlX08gPi50ZXN0LWEgJiYKKyAgICAgY21wIC1zIC50ZXN0LWEgLnRlc3QtcmVjdXJzaXZlLU9CJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi1jYWNoZSBBIHdpdGggQiBpbiBjYWNoZScgXAorICAgICdnaXQgcmVhZC10cmVlICR0cmVlX0IgJiYKKyAgICAgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWVfQSA+LnRlc3QtYSAmJgorICAgICBjbXAgLXMgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtQUInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLWZpbGVzIHdpdGggTyBpbiBjYWNoZSBhbmQgQSBjaGVja2VkIG91dCcgXAorICAgICdybSAtZnIgWiBbQS1aXVtBLVpdICYmCisgICAgIGdpdCByZWFkLXRyZWUgJHRyZWVfQSAmJgorICAgICBnaXQgY2hlY2tvdXQtaW5kZXggLWYgLWEgJiYKKyAgICAgZ2l0IHJlYWQtdHJlZSAtLXJlc2V0ICR0cmVlX08gJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLXEgJiYKKyAgICAgZ2l0IGRpZmYtZmlsZXMgPi50ZXN0LWEgJiYKKyAgICAgY21wX2RpZmZfZmlsZXNfb3V0cHV0IC50ZXN0LWEgLnRlc3QtcmVjdXJzaXZlLU9BJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZGlmZi1maWxlcyB3aXRoIE8gaW4gY2FjaGUgYW5kIEIgY2hlY2tlZCBvdXQnIFwKKyAgICAncm0gLWZyIFogW0EtWl1bQS1aXSAmJgorICAgICBnaXQgcmVhZC10cmVlICR0cmVlX0IgJiYKKyAgICAgZ2l0IGNoZWNrb3V0LWluZGV4IC1mIC1hICYmCisgICAgIGdpdCByZWFkLXRyZWUgLS1yZXNldCAkdHJlZV9PICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC1xICYmCisgICAgIGdpdCBkaWZmLWZpbGVzID4udGVzdC1hICYmCisgICAgIGNtcF9kaWZmX2ZpbGVzX291dHB1dCAudGVzdC1hIC50ZXN0LXJlY3Vyc2l2ZS1PQicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2RpZmYtZmlsZXMgd2l0aCBBIGluIGNhY2hlIGFuZCBCIGNoZWNrZWQgb3V0JyBcCisgICAgJ3JtIC1mciBaIFtBLVpdW0EtWl0gJiYKKyAgICAgZ2l0IHJlYWQtdHJlZSAkdHJlZV9CICYmCisgICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtYSAmJgorICAgICBnaXQgcmVhZC10cmVlIC0tcmVzZXQgJHRyZWVfQSAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcSAmJgorICAgICBnaXQgZGlmZi1maWxlcyA+LnRlc3QtYSAmJgorICAgICBjbXBfZGlmZl9maWxlc19vdXRwdXQgLnRlc3QtYSAudGVzdC1yZWN1cnNpdmUtQUInCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTm93IHdlIGhhdmUgZXN0YWJsaXNoZWQgdGhlIGJhc2VsaW5lLCB3ZSBkbyBub3QgaGF2ZSB0bworIyByZWx5IG9uIGluZGl2aWR1YWwgb2JqZWN0IElEIHZhbHVlcyB0aGF0IG11Y2guCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgTyBBID09IGRpZmYtdHJlZSAtUiBBIE8nIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAkdHJlZV9PICR0cmVlX0EgPi50ZXN0LWEgJiYKKyAgICBnaXQgZGlmZi10cmVlIC1SICR0cmVlX0EgJHRyZWVfTyA+LnRlc3QtYiAmJgorICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LWInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgLXIgTyBBID09IGRpZmYtdHJlZSAtciAtUiBBIE8nIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAtciAkdHJlZV9PICR0cmVlX0EgPi50ZXN0LWEgJiYKKyAgICBnaXQgZGlmZi10cmVlIC1yIC1SICR0cmVlX0EgJHRyZWVfTyA+LnRlc3QtYiAmJgorICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LWInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgQiBBID09IGRpZmYtdHJlZSAtUiBBIEInIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAkdHJlZV9CICR0cmVlX0EgPi50ZXN0LWEgJiYKKyAgICBnaXQgZGlmZi10cmVlIC1SICR0cmVlX0EgJHRyZWVfQiA+LnRlc3QtYiAmJgorICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LWInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmLXRyZWUgLXIgQiBBID09IGRpZmYtdHJlZSAtciAtUiBBIEInIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAtciAkdHJlZV9CICR0cmVlX0EgPi50ZXN0LWEgJiYKKyAgICBnaXQgZGlmZi10cmVlIC1yIC1SICR0cmVlX0EgJHRyZWVfQiA+LnRlc3QtYiAmJgorICAgIGNtcCAtcyAudGVzdC1hIC50ZXN0LWInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdkaWZmIGNhbiByZWFkIGZyb20gc3RkaW4nIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAtLSBNTiAtIDwgTk4gfAorICAgICAgICBncmVwIC12ICJeaW5kZXgiIHwgc2VkICJzIy8tIy9OTiMiID4udGVzdC1hICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAtLSBNTiBOTiB8CisgICAgICAgIGdyZXAgLXYgIl5pbmRleCIgPi50ZXN0LWIgJiYKKyAgICB0ZXN0X2NtcCAudGVzdC1hIC50ZXN0LWInCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwMy1kaWZmLXJlbmFtZS0xLnNoIGIvdC90NDAwMy1kaWZmLXJlbmFtZS0xLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRmMmFjY2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDAzLWRpZmYtcmVuYW1lLTEuc2gKQEAgLTAsMCArMSwxMjggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nTW9yZSByZW5hbWUgZGV0ZWN0aW9uCisKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaCA7IyB0ZXN0LWxpYiBjaGRpcidzIGludG8gdHJhc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgcmVmZXJlbmNlIHRyZWUnIFwKKyAgICAnY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliL0NPUFlJTkcgPkNPUFlJTkcgJiYKKyAgICAgZWNobyBmcm90eiA+cmV6cm92ICYmCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBDT1BZSU5HIHJlenJvdiAmJgorICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKyAgICBlY2hvICR0cmVlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSB3b3JrIHRyZWUnIFwKKyAgICAnc2VkIC1lICdzL0hPV0VWRVIvSG93ZXZlci8nIDxDT1BZSU5HID5DT1BZSU5HLjEgJiYKKyAgICBzZWQgLWUgJ3MvR1BML0cuUC5ML2cnIDxDT1BZSU5HID5DT1BZSU5HLjIgJiYKKyAgICBybSAtZiBDT1BZSU5HICYmCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBDT1BZSU5HIENPUFlJTkcuPycKKworIyB0cmVlIGhhcyBDT1BZSU5HIGFuZCByZXpyb3YuICB3b3JrIHRyZWUgaGFzIENPUFlJTkcuMSBhbmQgQ09QWUlORy4yLAorIyBib3RoIGFyZSBzbGlnaHRseSBlZGl0ZWQsIGFuZCB1bmNoYW5nZWQgcmV6cm92LiAgU28gd2Ugc2F5IHlvdQorIyBjb3B5LWFuZC1lZGl0IG9uZSwgYW5kIHJlbmFtZS1hbmQtZWRpdCB0aGUgb3RoZXIuICBXZSBkbyBub3Qgc2F5CisjIGFueXRoaW5nIGFib3V0IHJlenJvdi4KKworR0lUX0RJRkZfT1BUUz0tLXVuaWZpZWQ9MCBnaXQgZGlmZi1pbmRleCAtQyAtcCAkdHJlZSA+Y3VycmVudAorY2F0ID5leHBlY3RlZCA8PFxFT0YKK2RpZmYgLS1naXQgYS9DT1BZSU5HIGIvQ09QWUlORy4xCitjb3B5IGZyb20gQ09QWUlORworY29weSB0byBDT1BZSU5HLjEKKy0tLSBhL0NPUFlJTkcKKysrKyBiL0NPUFlJTkcuMQorQEAgLTYgKzYgQEAKKy0gSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCisrIEhvd2V2ZXIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQorZGlmZiAtLWdpdCBhL0NPUFlJTkcgYi9DT1BZSU5HLjIKK3JlbmFtZSBmcm9tIENPUFlJTkcKK3JlbmFtZSB0byBDT1BZSU5HLjIKKy0tLSBhL0NPUFlJTkcKKysrKyBiL0NPUFlJTkcuMgorQEAgLTIgKzIgQEAKKy0gTm90ZSB0aGF0IHRoZSBvbmx5IHZhbGlkIHZlcnNpb24gb2YgdGhlIEdQTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0CisrIE5vdGUgdGhhdCB0aGUgb25seSB2YWxpZCB2ZXJzaW9uIG9mIHRoZSBHLlAuTCBhcyBmYXIgYXMgdGhpcyBwcm9qZWN0CitAQCAtNiArNiBAQAorLSBIT1dFVkVSLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKKysgSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gRy5QLkx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKK0BAIC0xMiArMTIgQEAKKy0JVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIsIG9yIGEgbGF0ZXIgdmVyc2lvbgorKwlUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEcuUC5MIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMSknIFwKKyAgICAnY29tcGFyZV9kaWZmX3BhdGNoIGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHdvcmsgdHJlZSBhZ2FpbicgXAorICAgICdtdiBDT1BZSU5HLjIgQ09QWUlORyAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4xIENPUFlJTkcuMicKKworIyB0cmVlIGhhcyBDT1BZSU5HIGFuZCByZXpyb3YuICB3b3JrIHRyZWUgaGFzIENPUFlJTkcgYW5kIENPUFlJTkcuMSwKKyMgYm90aCBhcmUgc2xpZ2h0bHkgZWRpdGVkLCBhbmQgdW5jaGFuZ2VkIHJlenJvdi4gIFNvIHdlIHNheSB5b3UKKyMgZWRpdGVkIG9uZSwgYW5kIGNvcHktYW5kLWVkaXQgdGhlIG90aGVyLiAgV2UgZG8gbm90IHNheQorIyBhbnl0aGluZyBhYm91dCByZXpyb3YuCisKK0dJVF9ESUZGX09QVFM9LS11bmlmaWVkPTAgZ2l0IGRpZmYtaW5kZXggLUMgLXAgJHRyZWUgPmN1cnJlbnQKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKKy0tLSBhL0NPUFlJTkcKKysrKyBiL0NPUFlJTkcKK0BAIC0yICsyIEBACistIE5vdGUgdGhhdCB0aGUgb25seSB2YWxpZCB2ZXJzaW9uIG9mIHRoZSBHUEwgYXMgZmFyIGFzIHRoaXMgcHJvamVjdAorKyBOb3RlIHRoYXQgdGhlIG9ubHkgdmFsaWQgdmVyc2lvbiBvZiB0aGUgRy5QLkwgYXMgZmFyIGFzIHRoaXMgcHJvamVjdAorQEAgLTYgKzYgQEAKKy0gSE9XRVZFUiwgaW4gb3JkZXIgdG8gYWxsb3cgYSBtaWdyYXRpb24gdG8gR1BMdjMgaWYgdGhhdCBzZWVtcyBsaWtlCisrIEhPV0VWRVIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEcuUC5MdjMgaWYgdGhhdCBzZWVtcyBsaWtlCitAQCAtMTIgKzEyIEBACistCVRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHYyLCBvciBhIGxhdGVyIHZlcnNpb24KKysJVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHLlAuTCB2Miwgb3IgYSBsYXRlciB2ZXJzaW9uCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcuMQorY29weSBmcm9tIENPUFlJTkcKK2NvcHkgdG8gQ09QWUlORy4xCistLS0gYS9DT1BZSU5HCisrKysgYi9DT1BZSU5HLjEKK0BAIC02ICs2IEBACistIEhPV0VWRVIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQorKyBIb3dldmVyLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMiknIFwKKyAgICAnY29tcGFyZV9kaWZmX3BhdGNoIGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHdvcmsgdHJlZSBvbmNlIGFnYWluJyBcCisgICAgJ2NhdCAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi9DT1BZSU5HID5DT1BZSU5HICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgQ09QWUlORyBDT1BZSU5HLjEnCisKKyMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyBDT1BZSU5HIGFuZCBDT1BZSU5HLjEsCisjIGJ1dCBDT1BZSU5HIGlzIG5vdCBlZGl0ZWQuICBXZSBzYXkgeW91IGNvcHktYW5kLWVkaXQgQ09QWUlORy4xOyB0aGlzCisjIGlzIG9ubHkgcG9zc2libGUgYmVjYXVzZSAtQyBtb2RlIG5vdyByZXBvcnRzIHRoZSB1bm1vZGlmaWVkIGZpbGUgdG8KKyMgdGhlIGRpZmYtY29yZS4gIFVuY2hhbmdlZCByZXpyb3YsIGFsdGhvdWdoIGJlaW5nIGZlZCB0bworIyBnaXQgZGlmZi1pbmRleCBhcyB3ZWxsLCBzaG91bGQgbm90IGJlIG1lbnRpb25lZC4KKworR0lUX0RJRkZfT1BUUz0tLXVuaWZpZWQ9MCBcCisgICAgZ2l0IGRpZmYtaW5kZXggLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXAgJHRyZWUgPmN1cnJlbnQKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcuMQorY29weSBmcm9tIENPUFlJTkcKK2NvcHkgdG8gQ09QWUlORy4xCistLS0gYS9DT1BZSU5HCisrKysgYi9DT1BZSU5HLjEKK0BAIC02ICs2IEBACistIEhPV0VWRVIsIGluIG9yZGVyIHRvIGFsbG93IGEgbWlncmF0aW9uIHRvIEdQTHYzIGlmIHRoYXQgc2VlbXMgbGlrZQorKyBIb3dldmVyLCBpbiBvcmRlciB0byBhbGxvdyBhIG1pZ3JhdGlvbiB0byBHUEx2MyBpZiB0aGF0IHNlZW1zIGxpa2UKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMyknIFwKKyAgICAnY29tcGFyZV9kaWZmX3BhdGNoIGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwNC1kaWZmLXJlbmFtZS1zeW1saW5rLnNoIGIvdC90NDAwNC1kaWZmLXJlbmFtZS1zeW1saW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlNTYyYzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDA0LWRpZmYtcmVuYW1lLXN5bWxpbmsuc2gKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdNb3JlIHJlbmFtZSBkZXRlY3Rpb24gdGVzdHMuCisKK1RoZSByZW5hbWUgZGV0ZWN0aW9uIGxvZ2ljIHNob3VsZCBiZSBhYmxlIHRvIGRldGVjdCBwdXJlIHJlbmFtZSBvcgorY29weSBvZiBzeW1ib2xpYyBsaW5rcywgYnV0IHNob3VsZCBub3QgcHJvZHVjZSByZW5hbWUvY29weSBmb2xsb3dlZAorYnkgYW4gZWRpdCBmb3IgdGhlbS4KKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTIFwKKyAgICAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgXAorICAgICdlY2hvIHh5enp5IHwgdHIgLWQgJ1xcXFwnMDEyID55b21pbiAmJgorICAgICBsbiAtcyB4eXp6eSBmcm90eiAmJgorICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZnJvdHogeW9taW4gJiYKKyAgICB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgZWNobyAkdHJlZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBcCisgICAgJ3ByZXBhcmUgd29yayB0cmVlJyBcCisgICAgJ212IGZyb3R6IHJlenJvdiAmJgorICAgICBybSAtZiB5b21pbiAmJgorICAgICBsbiAtcyB4eXp6eSBuaXRmb2wgJiYKKyAgICAgbG4gLXMgeHp6enkgYm96YmFyICYmCisgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBmcm90eiByZXpyb3Ygbml0Zm9sIGJvemJhciB5b21pbicKKworIyB0cmVlIGhhcyBmcm90eiBwb2ludGluZyBhdCB4eXp6eSwgYW5kIHlvbWluIHRoYXQgY29udGFpbnMgeHl6enkgdG8KKyMgY29uZnVzZSB0aGluZ3MuICB3b3JrIHRyZWUgaGFzIHJlenJvdiAoeHl6enkpIG5pdGZvbCAoeHl6enkpIGFuZAorIyBib3piYXIgKHh6enp5KS4KKyMgcmV6cm92IGFuZCBuaXRmb2wgYXJlIHJlbmFtZS9jb3B5IG9mIGZyb3R6IGFuZCBib3piYXIgc2hvdWxkIGJlCisjIGEgbmV3IGNyZWF0aW9uLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzZXR1cCBkaWZmIG91dHB1dCcgIgorICAgIEdJVF9ESUZGX09QVFM9LS11bmlmaWVkPTAgZ2l0IGRpZmYtaW5kZXggLUMgLXAgJHRyZWUgPmN1cnJlbnQgJiYKKyAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRgorZGlmZiAtLWdpdCBhL2JvemJhciBiL2JvemJhcgorbmV3IGZpbGUgbW9kZSAxMjAwMDAKKy0tLSAvZGV2L251bGwKKysrKyBiL2JvemJhcgorQEAgLTAsMCArMSBAQAorK3h6enp5CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS9mcm90eiBiL25pdGZvbAorc2ltaWxhcml0eSBpbmRleCAxMDAlCitjb3B5IGZyb20gZnJvdHoKK2NvcHkgdG8gbml0Zm9sCitkaWZmIC0tZ2l0IGEvZnJvdHogYi9yZXpyb3YKK3NpbWlsYXJpdHkgaW5kZXggMTAwJQorcmVuYW1lIGZyb20gZnJvdHoKK3JlbmFtZSB0byByZXpyb3YKK2RpZmYgLS1naXQgYS95b21pbiBiL3lvbWluCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKy0tLSBhL3lvbWluCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACisteHl6enkKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgXAorICAgICd2YWxpZGF0ZSBkaWZmIG91dHB1dCcgXAorICAgICdjb21wYXJlX2RpZmZfcGF0Y2ggY3VycmVudCBleHBlY3RlZCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDA1LWRpZmYtcmVuYW1lLTIuc2ggYi90L3Q0MDA1LWRpZmYtcmVuYW1lLTIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTM1YWRkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMDUtZGlmZi1yZW5hbWUtMi5zaApAQCAtMCwwICsxLDg2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1NhbWUgcmVuYW1lIGRldGVjdGlvbiBhcyB0NDAwMyBidXQgdGVzdGluZyBkaWZmLXJhdy4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoIDsjIHRlc3QtbGliIGNoZGlyJ3MgaW50byB0cmFzaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSByZWZlcmVuY2UgdHJlZScgXAorICAgICdjYXQgIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIvQ09QWUlORyA+Q09QWUlORyAmJgorICAgICBlY2hvIGZyb3R6ID5yZXpyb3YgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIENPUFlJTkcgcmV6cm92ICYmCisgICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorICAgIGVjaG8gJHRyZWUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHdvcmsgdHJlZScgXAorICAgICdzZWQgLWUgJ3MvSE9XRVZFUi9Ib3dldmVyLycgPENPUFlJTkcgPkNPUFlJTkcuMSAmJgorICAgIHNlZCAtZSAncy9HUEwvRy5QLkwvZycgPENPUFlJTkcgPkNPUFlJTkcuMiAmJgorICAgIHJtIC1mIENPUFlJTkcgJiYKKyAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4/JworCisjIHRyZWUgaGFzIENPUFlJTkcgYW5kIHJlenJvdi4gIHdvcmsgdHJlZSBoYXMgQ09QWUlORy4xIGFuZCBDT1BZSU5HLjIsCisjIGJvdGggYXJlIHNsaWdodGx5IGVkaXRlZCwgYW5kIHVuY2hhbmdlZCByZXpyb3YuICBXZSBzYXkgQ09QWUlORy4xCisjIGFuZCBDT1BZSU5HLjIgYXJlIGJhc2VkIG9uIENPUFlJTkcsIGFuZCBkbyBub3Qgc2F5IGFueXRoaW5nIGFib3V0CisjIHJlenJvdi4KKworZ2l0IGRpZmYtaW5kZXggLUMgJHRyZWUgPmN1cnJlbnQKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKzoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgMDYwM2IzMjM4YTA3NmRjNmM4MDIyYWVkYzY2NDhmYTUyM2ExNzE3OCBDMTIzNAlDT1BZSU5HCUNPUFlJTkcuMQorOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyAwNmM2Nzk2MWJiYWVkMzRhMTI3Zjc2ZDI2MWY0YzBiZjczZWRhNDcxIFIxMjM0CUNPUFlJTkcJQ09QWUlORy4yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIG91dHB1dCBmcm9tIHJlbmFtZS9jb3B5IGRldGVjdGlvbiAoIzEpJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSB3b3JrIHRyZWUgYWdhaW4nIFwKKyAgICAnbXYgQ09QWUlORy4yIENPUFlJTkcgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBDT1BZSU5HIENPUFlJTkcuMSBDT1BZSU5HLjInCisKKyMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyBDT1BZSU5HIGFuZCBDT1BZSU5HLjEsCisjIGJvdGggYXJlIHNsaWdodGx5IGVkaXRlZCwgYW5kIHVuY2hhbmdlZCByZXpyb3YuICBXZSBzYXkgQ09QWUlORy4xCisjIGlzIGJhc2VkIG9uIENPUFlJTkcgYW5kIENPUFlJTkcgaXMgc3RpbGwgdGhlcmUsIGFuZCBkbyBub3Qgc2F5IGFueXRoaW5nCisjIGFib3V0IHJlenJvdi4KKworZ2l0IGRpZmYtaW5kZXggLUMgJHRyZWUgPmN1cnJlbnQKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDA2YzY3OTYxYmJhZWQzNGExMjdmNzZkMjYxZjRjMGJmNzNlZGE0NzEgTQlDT1BZSU5HCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDA2MDNiMzIzOGEwNzZkYzZjODAyMmFlZGM2NjQ4ZmE1MjNhMTcxNzggQzEyMzQJQ09QWUlORwlDT1BZSU5HLjEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmFsaWRhdGUgb3V0cHV0IGZyb20gcmVuYW1lL2NvcHkgZGV0ZWN0aW9uICgjMiknIFwKKyAgICAnY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyB0aGUgc2FtZSBDT1BZSU5HIGFuZAorIyBjb3B5LWVkaXRlZCBDT1BZSU5HLjEsIGFuZCB1bmNoYW5nZWQgcmV6cm92LiAgV2Ugc2hvdWxkIG5vdCBzYXkKKyMgYW55dGhpbmcgYWJvdXQgcmV6cm92IG9yIENPUFlJTkcsIHNpbmNlIHRoZSByZXZpc2VkIGFnYWluIGRpZmYtcmF3CisjIG5vd3MgaG93IHRvIHNheSBDb3B5LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncHJlcGFyZSB3b3JrIHRyZWUgb25jZSBhZ2FpbicgXAorICAgICdjYXQgIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIvQ09QWUlORyA+Q09QWUlORyAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4xJworCitnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAkdHJlZSA+Y3VycmVudAorY2F0ID5leHBlY3RlZCA8PFxFT0YKKzoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgMDYwM2IzMjM4YTA3NmRjNmM4MDIyYWVkYzY2NDhmYTUyM2ExNzE3OCBDMTIzNAlDT1BZSU5HCUNPUFlJTkcuMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSByZW5hbWUvY29weSBkZXRlY3Rpb24gKCMzKScgXAorICAgICdjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAwNi1kaWZmLW1vZGUuc2ggYi90L3Q0MDA2LWRpZmYtbW9kZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NmY2NDNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAwNi1kaWZmLW1vZGUuc2gKQEAgLTAsMCArMSw1OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG1vZGUgY2hhbmdlIGRpZmZzLgorCisnCisuIC4vdGVzdC1saWIuc2gKKworc2VkX3NjcmlwdD0ncy9cKDoxMDA2NDQgMTAwNzU1XCkgXCgnIiRfeDQwIidcKSBcMiAvXDEgWCBYIC8nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBmcm90eiA+cmV6cm92ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCByZXpyb3YgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZWNobyAkdHJlZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaG1vZCcgJworCXRlc3RfY2htb2QgK3ggcmV6cm92ICYmCisJZ2l0IGRpZmYtaW5kZXggJHRyZWUgPmN1cnJlbnQgJiYKKwlzZWQgLWUgIiRzZWRfc2NyaXB0IiA8Y3VycmVudCA+Y2hlY2sgJiYKKwllY2hvICI6MTAwNjQ0IDEwMDc1NSBYIFggTQlyZXpyb3YiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgYmluYXJ5IGZpbGUnICcKKwlnaXQgY29tbWl0IC1tIHJlenJvdiAmJgorCXByaW50ZiAiXDAwXDAxXDAyXDAzXDA0XDA1XDA2IiA+YmluYmluICYmCisJZ2l0IGFkZCBiaW5iaW4gJiYKKwlnaXQgY29tbWl0IC1tIGJpbmJpbgorJworCisjIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RhdCBvdXRwdXQgYWZ0ZXIgdGV4dCBjaG1vZCcgJworIyAJdGVzdF9jaG1vZCAteCByZXpyb3YgJiYKKyMgCWVjaG8gIiAwIGZpbGVzIGNoYW5nZWQiID5leHBlY3QgJiYKKyMgCWdpdCBkaWZmIEhFQUQgLS1zdGF0ID5hY3R1YWwgJiYKKyMJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKyMgJworIworIyB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3J0c3RhdCBvdXRwdXQgYWZ0ZXIgdGV4dCBjaG1vZCcgJworIyAJZ2l0IGRpZmYgSEVBRCAtLXNob3J0c3RhdCA+YWN0dWFsICYmCisjIAl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorIyAnCisjCisjIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RhdCBvdXRwdXQgYWZ0ZXIgYmluYXJ5IGNobW9kJyAnCisjIAl0ZXN0X2NobW9kICt4IGJpbmJpbiAmJgorIyAJZWNobyAiIDAgZmlsZXMgY2hhbmdlZCIgPmV4cGVjdCAmJgorIyAJZ2l0IGRpZmYgSEVBRCAtLXN0YXQgPmFjdHVhbCAmJgorIyAJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKyMgJworIworIyB0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3J0c3RhdCBvdXRwdXQgYWZ0ZXIgYmluYXJ5IGNobW9kJyAnCisjIAlnaXQgZGlmZiBIRUFEIC0tc2hvcnRzdGF0ID5hY3R1YWwgJiYKKyMgCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisjICcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDA3LXJlbmFtZS0zLnNoIGIvdC90NDAwNy1yZW5hbWUtMy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYWUzMjdmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAwNy1yZW5hbWUtMy5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1JlbmFtZSBpbnRlcmFjdGlvbiB3aXRoIHBhdGhzcGVjLgorCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2ggOyMgdGVzdC1saWIgY2hkaXIncyBpbnRvIHRyYXNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgcmVmZXJlbmNlIHRyZWUnICcKKwlta2RpciBwYXRoMCBwYXRoMSAmJgorCWNwICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliL0NPUFlJTkcgcGF0aDAvQ09QWUlORyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgcGF0aDAvQ09QWUlORyAmJgorCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwllY2hvICR0cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgd29yayB0cmVlJyAnCisJY3AgcGF0aDAvQ09QWUlORyBwYXRoMS9DT1BZSU5HICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBwYXRoMC9DT1BZSU5HIHBhdGgxL0NPUFlJTkcKKycKKworIyBJbiB0aGUgdHJlZSwgdGhlcmUgaXMgb25seSBwYXRoMC9DT1BZSU5HLiAgSW4gdGhlIGNhY2hlLCBwYXRoMCBhbmQKKyMgcGF0aDEgYm90aCBoYXZlIENPUFlJTkcgYW5kIHRoZSBsYXR0ZXIgaXMgYSBjb3B5IG9mIHBhdGgwL0NPUFlJTkcuCisjIENvbXBhcmluZyB0aGUgZnVsbCB0cmVlIHdpdGggY2FjaGUgc2hvdWxkIHRlbGwgdXMgc28uCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgQzEwMAlwYXRoMC9DT1BZSU5HCXBhdGgxL0NPUFlJTkcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IGRldGVjdGlvbicgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgZGV0ZWN0aW9uLCBjYWNoZWQnICcKKwlnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtLWNhY2hlZCAkdHJlZSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZAorJworCisjIEluIHRoZSB0cmVlLCB0aGVyZSBpcyBvbmx5IHBhdGgwL0NPUFlJTkcuICBJbiB0aGUgY2FjaGUsIHBhdGgwIGFuZAorIyBwYXRoMSBib3RoIGhhdmUgQ09QWUlORyBhbmQgdGhlIGxhdHRlciBpcyBhIGNvcHkgb2YgcGF0aDAvQ09QWUlORy4KKyMgSG93ZXZlciB3aGVuIHdlIHNheSB3ZSBjYXJlIG9ubHkgYWJvdXQgcGF0aDEsIHdlIHNob3VsZCBqdXN0IHNlZQorIyBwYXRoMS9DT1BZSU5HIHN1ZGRlbmx5IGFwcGVhcmluZyBmcm9tIG5vd2hlcmUsIG5vdCBkZXRlY3RlZCBhcworIyBhIGNvcHkgZnJvbSBwYXRoMC9DT1BZSU5HLgorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIEEJcGF0aDEvQ09QWUlORworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHksIGxpbWl0ZWQgdG8gYSBzdWJ0cmVlJyAnCisJZ2l0IGRpZmYtaW5kZXggLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgJHRyZWUgcGF0aDEgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdlYWsgd29yayB0cmVlJyAnCisJcm0gLWYgcGF0aDAvQ09QWUlORyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgcGF0aDAvQ09QWUlORworJworIyBJbiB0aGUgdHJlZSwgdGhlcmUgaXMgb25seSBwYXRoMC9DT1BZSU5HLiAgSW4gdGhlIGNhY2hlLCBwYXRoMCBkb2VzCisjIG5vdCBoYXZlIENPUFlJTkcgYW55bW9yZSBhbmQgcGF0aDEgaGFzIENPUFlJTkcgd2hpY2ggaXMgYSBjb3B5IG9mCisjIHBhdGgwL0NPUFlJTkcuICBTaG93aW5nIHRoZSBmdWxsIHRyZWUgd2l0aCBjYWNoZSBzaG91bGQgdGVsbCB1cyBhYm91dAorIyB0aGUgcmVuYW1lLgorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIFIxMDAJcGF0aDAvQ09QWUlORwlwYXRoMS9DT1BZSU5HCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGRldGVjdGlvbicgJworCWdpdCBkaWZmLWluZGV4IC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkCisnCisKKyMgSW4gdGhlIHRyZWUsIHRoZXJlIGlzIG9ubHkgcGF0aDAvQ09QWUlORy4gIEluIHRoZSBjYWNoZSwgcGF0aDAgZG9lcworIyBub3QgaGF2ZSBDT1BZSU5HIGFueW1vcmUgYW5kIHBhdGgxIGhhcyBDT1BZSU5HIHdoaWNoIGlzIGEgY29weSBvZgorIyBwYXRoMC9DT1BZSU5HLiAgV2hlbiB3ZSBzYXkgd2UgY2FyZSBvbmx5IGFib3V0IHBhdGgxLCB3ZSBzaG91bGQganVzdAorIyBzZWUgcGF0aDEvQ09QWUlORyBhcHBlYXJpbmcgZnJvbSBub3doZXJlLgorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIEEJcGF0aDEvQ09QWUlORworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSwgbGltaXRlZCB0byBhIHN1YnRyZWUnICcKKwlnaXQgZGlmZi1pbmRleCAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAkdHJlZSBwYXRoMSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDgtZGlmZi1icmVhay1yZXdyaXRlLnNoIGIvdC90NDAwOC1kaWZmLWJyZWFrLXJld3JpdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWRkMWJjNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMDgtZGlmZi1icmVhay1yZXdyaXRlLnNoCkBAIC0wLDAgKzEsMTU0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J0JyZWFrIGFuZCB0aGVuIHJlbmFtZQorCitXZSBoYXZlIHR3byB2ZXJ5IGRpZmZlcmVudCBmaWxlcywgZmlsZTAgYW5kIGZpbGUxLCByZWdpc3RlcmVkIGluIGEgdHJlZS4KKworV2UgdXBkYXRlIGZpbGUxIHNvIGRyYXN0aWNhbGx5IHRoYXQgaXQgaXMgbW9yZSBzaW1pbGFyIHRvIGZpbGUwLCBhbmQKK3RoZW4gcmVtb3ZlIGZpbGUwLiAgV2l0aCAtQiwgY2hhbmdlcyB0byBmaWxlMSBzaG91bGQgYmUgYnJva2VuIGludG8KK3NlcGFyYXRlIGRlbGV0ZSBhbmQgY3JlYXRlLCByZXN1bHRpbmcgaW4gcmVtb3ZhbCBvZiBmaWxlMCwgcmVtb3ZhbCBvZgorb3JpZ2luYWwgZmlsZTEgYW5kIGNyZWF0aW9uIG9mIGNvbXBsZXRlbHkgcmV3cml0dGVuIGZpbGUxLiAgVGhlIGxhdHRlcgordHdvIGFyZSB0aGVuIG1lcmdlZCBiYWNrIGludG8gYSBzaW5nbGUgImNvbXBsZXRlIHJld3JpdGUiLgorCitGdXJ0aGVyLCB3aXRoIC1CIGFuZCAtTSB0b2dldGhlciwgdGhlc2UgdGhyZWUgbW9kaWZpY2F0aW9ucyBzaG91bGQKK3R1cm4gaW50byByZW5hbWUtZWRpdCBvZiBmaWxlMCBpbnRvIGZpbGUxLgorCitTdGFydGluZyBmcm9tIHRoZSBzYW1lIHR3byBmaWxlcyBpbiB0aGUgdHJlZSwgd2Ugc3dhcCBmaWxlMCBhbmQgZmlsZTEuCitXaXRoIC1CLCB0aGlzIHNob3VsZCBiZSBkZXRlY3RlZCBhcyB0d28gY29tcGxldGUgcmV3cml0ZXMuCisKK0Z1cnRoZXIsIHdpdGggLUIgYW5kIC1NIHRvZ2V0aGVyLCB0aGVzZSBzaG91bGQgdHVybiBpbnRvIHR3byByZW5hbWVzLgorJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoIDsjIHRlc3QtbGliIGNoZGlyJ3MgaW50byB0cmFzaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwljYXQgIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIvUkVBRE1FID5maWxlMCAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi9DT1BZSU5HID5maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZTAgZmlsZTEgJiYKKwlnaXQgdGFnIHJlZmVyZW5jZSAkKGdpdCB3cml0ZS10cmVlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2UgZmlsZTEgd2l0aCBjb3B5LWVkaXQgb2YgZmlsZTAgYW5kIHJlbW92ZSBmaWxlMCcgJworCXNlZCAtZSAicy9naXQvR0lULyIgZmlsZTAgPmZpbGUxICYmCisJcm0gLWYgZmlsZTAgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGZpbGUwIGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBkaWZmIHdpdGggLUIgKCMxKScgJworCWdpdCBkaWZmLWluZGV4IC1CIC0tY2FjaGVkIHJlZmVyZW5jZSA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk6MTAwNjQ0IDAwMDAwMCA1NDgxNDJjMzI3YTY3OTBmZjg4MjFkNjdjMmVlMWVmZjdhNjU2YjUyIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlmaWxlMAorCToxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgMmZiZWRkMGI1ZDRiODEyNmU0NzUwYzNiZWUzMDVlOGZmNzlmODBlYyBNMTAwCWZpbGUxCisJRU9GCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4gZGlmZiB3aXRoIC1CIGFuZCAtTSAoIzIpJyAnCisJZ2l0IGRpZmYtaW5kZXggLUIgLU0gcmVmZXJlbmNlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCToxMDA2NDQgMTAwNjQ0IDU0ODE0MmMzMjdhNjc5MGZmODgyMWQ2N2MyZWUxZWZmN2E2NTZiNTIgMmZiZWRkMGI1ZDRiODEyNmU0NzUwYzNiZWUzMDVlOGZmNzlmODBlYyBSMTAwCWZpbGUwCWZpbGUxCisJRU9GCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzd2FwIGZpbGUwIGFuZCBmaWxlMScgJworCXJtIC1mIGZpbGUwIGZpbGUxICYmCisJZ2l0IHJlYWQtdHJlZSAtbSByZWZlcmVuY2UgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgLWEgJiYKKwltdiBmaWxlMCB0bXAgJiYKKwltdiBmaWxlMSBmaWxlMCAmJgorCW12IHRtcCBmaWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZTAgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuIGRpZmYgd2l0aCAtQiAoIzMpJyAnCisJZ2l0IGRpZmYtaW5kZXggLUIgcmVmZXJlbmNlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCToxMDA2NDQgMTAwNjQ0IDU0ODE0MmMzMjdhNjc5MGZmODgyMWQ2N2MyZWUxZWZmN2E2NTZiNTIgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyBNMTAwCWZpbGUwCisJOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyA1NDgxNDJjMzI3YTY3OTBmZjg4MjFkNjdjMmVlMWVmZjdhNjU2YjUyIE0xMDAJZmlsZTEKKwlFT0YKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBkaWZmIHdpdGggLUIgYW5kIC1NICgjNCknICcKKwlnaXQgZGlmZi1pbmRleCAtQiAtTSByZWZlcmVuY2UgPmN1cnJlbnQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIFIxMDAJZmlsZTEJZmlsZTAKKwk6MTAwNjQ0IDEwMDY0NCA1NDgxNDJjMzI3YTY3OTBmZjg4MjFkNjdjMmVlMWVmZjdhNjU2YjUyIDU0ODE0MmMzMjdhNjc5MGZmODgyMWQ2N2MyZWUxZWZmN2E2NTZiNTIgUjEwMAlmaWxlMAlmaWxlMQorCUVPRgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBmaWxlMCBpbnRvIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCcgJworCXJtIC1mIGZpbGUwICYmCisJdGVzdF9sbl9zX2FkZCBmcm90eiBmaWxlMCAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncnVuIGRpZmYgd2l0aCAtQiAoIzUpJyAnCisJZ2l0IGRpZmYtaW5kZXggLUIgcmVmZXJlbmNlID5jdXJyZW50ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCToxMDA2NDQgMTIwMDAwIDU0ODE0MmMzMjdhNjc5MGZmODgyMWQ2N2MyZWUxZWZmN2E2NTZiNTIgNjdiZTQyMWY4ODgyNDU3ODg1NzYyNGY3YjNkYzc1ZTk5YThhMTQ4MSBUCWZpbGUwCisJOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyA1NDgxNDJjMzI3YTY3OTBmZjg4MjFkNjdjMmVlMWVmZjdhNjU2YjUyIE0xMDAJZmlsZTEKKwlFT0YKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBkaWZmIHdpdGggLUIgLU0gKCM2KScgJworCWdpdCBkaWZmLWluZGV4IC1CIC1NIHJlZmVyZW5jZSA+Y3VycmVudCAmJgorCisJIyBmaWxlMCBjaGFuZ2VkIGZyb20gcmVndWxhciB0byBzeW1saW5rLiAgZmlsZTEgaXMgdGhlIHNhbWUgYXMgdGhlIHByZWltYWdlCisJIyBvZiBmaWxlMC4gIEJlY2F1c2UgdGhlIGNoYW5nZSBkb2VzIG5vdCBtYWtlIGZpbGUwIGRpc2FwcGVhciwgZmlsZTEgaXMKKwkjIGRlbm90ZWQgYXMgYSBjb3B5IG9mIGZpbGUwCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCToxMDA2NDQgMTIwMDAwIDU0ODE0MmMzMjdhNjc5MGZmODgyMWQ2N2MyZWUxZWZmN2E2NTZiNTIgNjdiZTQyMWY4ODgyNDU3ODg1NzYyNGY3YjNkYzc1ZTk5YThhMTQ4MSBUCWZpbGUwCisJOjEwMDY0NCAxMDA2NDQgNTQ4MTQyYzMyN2E2NzkwZmY4ODIxZDY3YzJlZTFlZmY3YTY1NmI1MiA1NDgxNDJjMzI3YTY3OTBmZjg4MjFkNjdjMmVlMWVmZjdhNjU2YjUyIEMJZmlsZTAJZmlsZTEKKwlFT0YKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBkaWZmIHdpdGggLU0gKCM3KScgJworCWdpdCBkaWZmLWluZGV4IC1NIHJlZmVyZW5jZSA+Y3VycmVudCAmJgorCisJIyBUaGlzIHNob3VsZCBub3QgbWlzdGFrZSBmaWxlMCBhcyB0aGUgY29weSBzb3VyY2Ugb2YgbmV3IGZpbGUxCisJIyBkdWUgdG8gdHlwZSBkaWZmZXJlbmNlcy4KKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJOjEwMDY0NCAxMjAwMDAgNTQ4MTQyYzMyN2E2NzkwZmY4ODIxZDY3YzJlZTFlZmY3YTY1NmI1MiA2N2JlNDIxZjg4ODI0NTc4ODU3NjI0ZjdiM2RjNzVlOTlhOGExNDgxIFQJZmlsZTAKKwk6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDU0ODE0MmMzMjdhNjc5MGZmODgyMWQ2N2MyZWUxZWZmN2E2NTZiNTIgTQlmaWxlMQorCUVPRgorCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZTEgZWRpdGVkIHRvIGxvb2sgbGlrZSBmaWxlMCBhbmQgZmlsZTAgcmVuYW1lLWVkaXRlZCB0byBmaWxlMicgJworCXJtIC1mIGZpbGUwIGZpbGUxICYmCisJZ2l0IHJlYWQtdHJlZSAtbSByZWZlcmVuY2UgJiYKKwlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXUgLWEgJiYKKwlzZWQgLWUgInMvZ2l0L0dJVC8iIGZpbGUwID5maWxlMSAmJgorCXNlZCAtZSAicy9naXQvR0VULyIgZmlsZTAgPmZpbGUyICYmCisJcm0gLWYgZmlsZTAgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIGZpbGUwIGZpbGUxIGZpbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBkaWZmIHdpdGggLUIgKCM4KScgJworCWdpdCBkaWZmLWluZGV4IC1CIHJlZmVyZW5jZSA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk6MTAwNjQ0IDAwMDAwMCA1NDgxNDJjMzI3YTY3OTBmZjg4MjFkNjdjMmVlMWVmZjdhNjU2YjUyIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlmaWxlMAorCToxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgMmZiZWRkMGI1ZDRiODEyNmU0NzUwYzNiZWUzMDVlOGZmNzlmODBlYyBNMTAwCWZpbGUxCisJOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA2OWE5MzlmNjUxNjg2ZjU2MzIyNTY2ZTJmZDc2NzE1OTQ3YTI0MTYyIEEJZmlsZTIKKwlFT0YKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBkaWZmIHdpdGggLUIgLUMgKCM5KScgJworCWdpdCBkaWZmLWluZGV4IC1CIC1DIHJlZmVyZW5jZSA+Y3VycmVudCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk6MTAwNjQ0IDEwMDY0NCA1NDgxNDJjMzI3YTY3OTBmZjg4MjFkNjdjMmVlMWVmZjdhNjU2YjUyIDJmYmVkZDBiNWQ0YjgxMjZlNDc1MGMzYmVlMzA1ZThmZjc5ZjgwZWMgQzA5NQlmaWxlMAlmaWxlMQorCToxMDA2NDQgMTAwNjQ0IDU0ODE0MmMzMjdhNjc5MGZmODgyMWQ2N2MyZWUxZWZmN2E2NTZiNTIgNjlhOTM5ZjY1MTY4NmY1NjMyMjU2NmUyZmQ3NjcxNTk0N2EyNDE2MiBSMDk1CWZpbGUwCWZpbGUyCisJRU9GCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgY3VycmVudAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMDktZGlmZi1yZW5hbWUtNC5zaCBiL3QvdDQwMDktZGlmZi1yZW5hbWUtNC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNjQxZmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAwOS1kaWZmLXJlbmFtZS00LnNoCkBAIC0wLDAgKzEsOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nU2FtZSByZW5hbWUgZGV0ZWN0aW9uIGFzIHQ0MDAzIGJ1dCB0ZXN0aW5nIGRpZmYtcmF3IC16LgorCisnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2ggOyMgdGVzdC1saWIgY2hkaXIncyBpbnRvIHRyYXNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHJlZmVyZW5jZSB0cmVlJyBcCisgICAgJ2NhdCAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi9DT1BZSU5HID5DT1BZSU5HICYmCisgICAgIGVjaG8gZnJvdHogPnJlenJvdiAmJgorICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgQ09QWUlORyByZXpyb3YgJiYKKyAgICB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgZWNobyAkdHJlZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgd29yayB0cmVlJyBcCisgICAgJ3NlZCAtZSAncy9IT1dFVkVSL0hvd2V2ZXIvJyA8Q09QWUlORyA+Q09QWUlORy4xICYmCisgICAgc2VkIC1lICdzL0dQTC9HLlAuTC9nJyA8Q09QWUlORyA+Q09QWUlORy4yICYmCisgICAgcm0gLWYgQ09QWUlORyAmJgorICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgQ09QWUlORyBDT1BZSU5HLj8nCisKKyMgdHJlZSBoYXMgQ09QWUlORyBhbmQgcmV6cm92LiAgd29yayB0cmVlIGhhcyBDT1BZSU5HLjEgYW5kIENPUFlJTkcuMiwKKyMgYm90aCBhcmUgc2xpZ2h0bHkgZWRpdGVkLCBhbmQgdW5jaGFuZ2VkIHJlenJvdi4gIFdlIHNheSBDT1BZSU5HLjEKKyMgYW5kIENPUFlJTkcuMiBhcmUgYmFzZWQgb24gQ09QWUlORywgYW5kIGRvIG5vdCBzYXkgYW55dGhpbmcgYWJvdXQKKyMgcmV6cm92LgorCitnaXQgZGlmZi1pbmRleCAteiAtQyAkdHJlZSA+Y3VycmVudAorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjEwMDY0NCAxMDA2NDQgNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyAwNjAzYjMyMzhhMDc2ZGM2YzgwMjJhZWRjNjY0OGZhNTIzYTE3MTc4IEMxMjM0CitDT1BZSU5HCitDT1BZSU5HLjEKKzoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgMDZjNjc5NjFiYmFlZDM0YTEyN2Y3NmQyNjFmNGMwYmY3M2VkYTQ3MSBSMTIzNAorQ09QWUlORworQ09QWUlORy4yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIG91dHB1dCBmcm9tIHJlbmFtZS9jb3B5IGRldGVjdGlvbiAoIzEpJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9yYXdfeiBjdXJyZW50IGV4cGVjdGVkJworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwcmVwYXJlIHdvcmsgdHJlZSBhZ2FpbicgXAorICAgICdtdiBDT1BZSU5HLjIgQ09QWUlORyAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIENPUFlJTkcgQ09QWUlORy4xIENPUFlJTkcuMicKKworIyB0cmVlIGhhcyBDT1BZSU5HIGFuZCByZXpyb3YuICB3b3JrIHRyZWUgaGFzIENPUFlJTkcgYW5kIENPUFlJTkcuMSwKKyMgYm90aCBhcmUgc2xpZ2h0bHkgZWRpdGVkLCBhbmQgdW5jaGFuZ2VkIHJlenJvdi4gIFdlIHNheSBDT1BZSU5HLjEKKyMgaXMgYmFzZWQgb24gQ09QWUlORyBhbmQgQ09QWUlORyBpcyBzdGlsbCB0aGVyZSwgYW5kIGRvIG5vdCBzYXkgYW55dGhpbmcKKyMgYWJvdXQgcmV6cm92LgorCitnaXQgZGlmZi1pbmRleCAteiAtQyAkdHJlZSA+Y3VycmVudAorY2F0ID5leHBlY3RlZCA8PFxFT0YKKzoxMDA2NDQgMTAwNjQ0IDZmZjg3YzQ2NjQ5ODFlNDM5NzYyNTc5MWM4ZWEzYmJiNWYyMjc5YTMgMDZjNjc5NjFiYmFlZDM0YTEyN2Y3NmQyNjFmNGMwYmY3M2VkYTQ3MSBNCitDT1BZSU5HCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDA2MDNiMzIzOGEwNzZkYzZjODAyMmFlZGM2NjQ4ZmE1MjNhMTcxNzggQzEyMzQKK0NPUFlJTkcKK0NPUFlJTkcuMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSByZW5hbWUvY29weSBkZXRlY3Rpb24gKCMyKScgXAorICAgICdjb21wYXJlX2RpZmZfcmF3X3ogY3VycmVudCBleHBlY3RlZCcKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIHRyZWUgaGFzIENPUFlJTkcgYW5kIHJlenJvdi4gIHdvcmsgdHJlZSBoYXMgdGhlIHNhbWUgQ09QWUlORyBhbmQKKyMgY29weS1lZGl0ZWQgQ09QWUlORy4xLCBhbmQgdW5jaGFuZ2VkIHJlenJvdi4gIFdlIHNob3VsZCBub3Qgc2F5CisjIGFueXRoaW5nIGFib3V0IHJlenJvdiBvciBDT1BZSU5HLCBzaW5jZSB0aGUgcmV2aXNlZCBhZ2FpbiBkaWZmLXJhdworIyBub3dzIGhvdyB0byBzYXkgQ29weS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgd29yayB0cmVlIG9uY2UgYWdhaW4nIFwKKyAgICAnY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliL0NPUFlJTkcgPkNPUFlJTkcgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBDT1BZSU5HIENPUFlJTkcuMScKKworZ2l0IGRpZmYtaW5kZXggLXogLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgJHRyZWUgPmN1cnJlbnQKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA2ZmY4N2M0NjY0OTgxZTQzOTc2MjU3OTFjOGVhM2JiYjVmMjI3OWEzIDA2MDNiMzIzOGEwNzZkYzZjODAyMmFlZGM2NjQ4ZmE1MjNhMTcxNzggQzEyMzQKK0NPUFlJTkcKK0NPUFlJTkcuMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2YWxpZGF0ZSBvdXRwdXQgZnJvbSByZW5hbWUvY29weSBkZXRlY3Rpb24gKCMzKScgXAorICAgICdjb21wYXJlX2RpZmZfcmF3X3ogY3VycmVudCBleHBlY3RlZCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDEwLWRpZmYtcGF0aHNwZWMuc2ggYi90L3Q0MDEwLWRpZmYtcGF0aHNwZWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDNjNDg4YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTAtZGlmZi1wYXRoc3BlYy5zaApAQCAtMCwwICsxLDE0OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdQYXRoc3BlYyByZXN0cmljdGlvbnMKKworUHJlcGFyZToKKyAgICAgICAgZmlsZTAKKyAgICAgICAgcGF0aDEvZmlsZTEKKycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaCA7IyB0ZXN0LWxpYiBjaGRpcidzIGludG8gdHJhc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgc2V0dXAgXAorICAgICdlY2hvIGZyb3R6ID5maWxlMCAmJgorICAgICBta2RpciBwYXRoMSAmJgorICAgICBlY2hvIHJlenJvdiA+cGF0aDEvZmlsZTEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlMCBwYXRoMS9maWxlMSAmJgorICAgICB0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisgICAgIGVjaG8gIiR0cmVlIiAmJgorICAgICBlY2hvIG5pdGZvbCA+ZmlsZTAgJiYKKyAgICAgZWNobyB5b21pbiA+cGF0aDEvZmlsZTEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCBmaWxlMCBwYXRoMS9maWxlMScKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xpbWl0IHRvIHBhdGggc2hvdWxkIHNob3cgbm90aGluZycgXAorICAgICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZSAtLSBwYXRoID5jdXJyZW50ICYmCisgICAgIGNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKzoxMDA2NDQgMTAwNjQ0IDc2NjQ5OGQ5M2E0YjA2MDU3YThlNDlkMjNmNDA2OGYxMTcwZmYzOGYgMGE0MWUxMTVhYjYxYmUwMzI4YTE5YjI5ZjE4Y2RjYjQ5MzM4ZDUxNiBNCXBhdGgxL2ZpbGUxCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdsaW1pdCB0byBwYXRoMSBzaG91bGQgc2hvdyBwYXRoMS9maWxlMScgXAorICAgICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZSAtLSBwYXRoMSA+Y3VycmVudCAmJgorICAgICBjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA3NjY0OThkOTNhNGIwNjA1N2E4ZTQ5ZDIzZjQwNjhmMTE3MGZmMzhmIDBhNDFlMTE1YWI2MWJlMDMyOGExOWIyOWYxOGNkY2I0OTMzOGQ1MTYgTQlwYXRoMS9maWxlMQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbGltaXQgdG8gcGF0aDEvIHNob3VsZCBzaG93IHBhdGgxL2ZpbGUxJyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tIHBhdGgxLyA+Y3VycmVudCAmJgorICAgICBjb21wYXJlX2RpZmZfcmF3IGN1cnJlbnQgZXhwZWN0ZWQnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis6MTAwNjQ0IDEwMDY0NCA3NjY0OThkOTNhNGIwNjA1N2E4ZTQ5ZDIzZjQwNjhmMTE3MGZmMzhmIDBhNDFlMTE1YWI2MWJlMDMyOGExOWIyOWYxOGNkY2I0OTMzOGQ1MTYgTQlwYXRoMS9maWxlMQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnIipmaWxlMSIgc2hvdWxkIHNob3cgcGF0aDEvZmlsZTEnIFwKKyAgICAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgJHRyZWUgLS0gIipmaWxlMSIgPmN1cnJlbnQgJiYKKyAgICAgY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorOjEwMDY0NCAxMDA2NDQgOGU0MDIwYmI1YThkOGM4NzNiMjVkZTE1OTMzZTc1Y2MwZmMyNzVkZiBkY2E2YjkyMzAzYmVmYzkzMDg2YWEwMjVkOTBhNWZhY2Q3ZWIyODEyIE0JZmlsZTAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xpbWl0IHRvIGZpbGUwIHNob3VsZCBzaG93IGZpbGUwJyBcCisgICAgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkICR0cmVlIC0tIGZpbGUwID5jdXJyZW50ICYmCisgICAgIGNvbXBhcmVfZGlmZl9yYXcgY3VycmVudCBleHBlY3RlZCcKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2xpbWl0IHRvIGZpbGUwLyBzaG91bGQgZW1pdCBub3RoaW5nLicgXAorICAgICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAkdHJlZSAtLSBmaWxlMC8gPmN1cnJlbnQgJiYKKyAgICAgY29tcGFyZV9kaWZmX3JhdyBjdXJyZW50IGV4cGVjdGVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgcGF0aHNwZWMnICcKKwl0cmVlMj0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWVjaG8gIiR0cmVlMiIgJiYKKwlnaXQgZGlmZi10cmVlIC1yIC0tbmFtZS1vbmx5ICR0cmVlICR0cmVlMiAtLSBwYSBwYXRoMS9hID5jdXJyZW50ICYmCisJPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCitFTVBUWV9UUkVFPTRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIHdpdGggd2lsZGNhcmQgc2hvd3MgZGlyIGFsc28gbWF0Y2hlcycgJworCWdpdCBkaWZmLXRyZWUgLS1uYW1lLW9ubHkgJEVNUFRZX1RSRUUgJHRyZWUgLS0gImYqIiA+cmVzdWx0ICYmCisJZWNobyBmaWxlMCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC1yIHdpdGggd2lsZGNhcmQnICcKKwlnaXQgZGlmZi10cmVlIC1yIC0tbmFtZS1vbmx5ICRFTVBUWV9UUkVFICR0cmVlIC0tICIqZmlsZTEiID5yZXN1bHQgJiYKKwllY2hvIHBhdGgxL2ZpbGUxID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgd2l0aCB3aWxkY2FyZCBzaG93cyBkaXIgYWxzbyBtYXRjaGVzJyAnCisJZ2l0IGRpZmYtdHJlZSAtLW5hbWUtb25seSAkdHJlZSAkdHJlZTIgLS0gInBhdGgxL2YqIiA+cmVzdWx0ICYmCisJZWNobyBwYXRoMSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC1yIHdpdGggd2lsZGNhcmQgZnJvbSBiZWdpbm5pbmcnICcKKwlnaXQgZGlmZi10cmVlIC1yIC0tbmFtZS1vbmx5ICR0cmVlICR0cmVlMiAtLSAicGF0aDEvKmZpbGUxIiA+cmVzdWx0ICYmCisJZWNobyBwYXRoMS9maWxlMSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC1yIHdpdGggd2lsZGNhcmQnICcKKwlnaXQgZGlmZi10cmVlIC1yIC0tbmFtZS1vbmx5ICR0cmVlICR0cmVlMiAtLSAicGF0aDEvZioiID5yZXN1bHQgJiYKKwllY2hvIHBhdGgxL2ZpbGUxID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdWJtb2R1bGVzJyAnCisJdGVzdF90aWNrICYmCisJZ2l0IGluaXQgc3VibW9kICYmCisJKCBjZCBzdWJtb2QgJiYgdGVzdF9jb21taXQgZmlyc3Q7ICkgJiYKKwlnaXQgYWRkIHN1Ym1vZCAmJgorCWdpdCBjb21taXQgLW0gZmlyc3QgJiYKKwkoIGNkIHN1Ym1vZCAmJiB0ZXN0X2NvbW1pdCBzZWNvbmQ7ICkgJiYKKwlnaXQgYWRkIHN1Ym1vZCAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSBpZ25vcmVzIHRyYWlsaW5nIHNsYXNoIG9uIHN1Ym1vZHVsZSBwYXRoJyAnCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCBzdWJtb2QgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUReIEhFQUQgc3VibW9kLyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIG11bHRpcGxlIHdpbGRjYXJkIHBhdGhzcGVjcycgJworCW1rZGlyIHBhdGgyICYmCisJZWNobyByZXpyb3YgPnBhdGgyL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMi9maWxlMSAmJgorCXRyZWUzPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgJHRyZWUgJHRyZWUzIC0tICJwYXRoMioxIiAicGF0aDEqMSIgPmFjdHVhbCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwlwYXRoMS9maWxlMQorCXBhdGgyL2ZpbGUxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWNhY2hlIGlnbm9yZXMgdHJhaWxpbmcgc2xhc2ggb24gc3VibW9kdWxlIHBhdGgnICcKKwlnaXQgZGlmZiAtLW5hbWUtb25seSBIRUFEXiBzdWJtb2QgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUReIHN1Ym1vZC8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDExLWRpZmYtc3ltbGluay5zaCBiL3QvdDQwMTEtZGlmZi1zeW1saW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEzZTdmNjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDExLWRpZmYtc3ltbGluay5zaApAQCAtMCwwICsxLDE1NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKb2hhbm5lcyBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZGlmZiBvZiBzeW1saW5rcy4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgbmV3IHN5bWxpbmsgYW5kIGZpbGUnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvZnJvdHogYi9mcm90egorCW5ldyBmaWxlIG1vZGUgMTIwMDAwCisJaW5kZXggMDAwMDAwMC4uN2M0NjVhZgorCS0tLSAvZGV2L251bGwKKwkrKysgYi9mcm90egorCUBAIC0wLDAgKzEgQEAKKwkreHl6enkKKwlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlkaWZmIC0tZ2l0IGEvbml0Zm9sIGIvbml0Zm9sCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi43YzQ2NWFmCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL25pdGZvbAorCUBAIC0wLDAgKzEgQEAKKwkreHl6enkKKwlFT0YKKworCSMgdGhlIGVtcHR5IHRyZWUKKwlnaXQgdXBkYXRlLWluZGV4ICYmCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCisJdGVzdF9sbl9zX2FkZCB4eXp6eSBmcm90eiAmJgorCWVjaG8geHl6enkgPm5pdGZvbCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbml0Zm9sICYmCisJR0lUX0RJRkZfT1BUUz0tLXVuaWZpZWQ9MCBnaXQgZGlmZi1pbmRleCAtTSAtcCAkdHJlZSA+Y3VycmVudCAmJgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgdW5jaGFuZ2VkIHN5bWxpbmsgYW5kIGZpbGUnICAnCisJdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggZnJvdHogbml0Zm9sICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1pbmRleCAtLW5hbWUtb25seSAkdHJlZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgcmVtb3ZlZCBzeW1saW5rIGFuZCBmaWxlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL2Zyb3R6IGIvZnJvdHoKKwlkZWxldGVkIGZpbGUgbW9kZSAxMjAwMDAKKwlpbmRleCA3YzQ2NWFmLi4wMDAwMDAwCisJLS0tIGEvZnJvdHoKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS14eXp6eQorCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCWRpZmYgLS1naXQgYS9uaXRmb2wgYi9uaXRmb2wKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCA3YzQ2NWFmLi4wMDAwMDAwCisJLS0tIGEvbml0Zm9sCisJKysrIC9kZXYvbnVsbAorCUBAIC0xICswLDAgQEAKKwkteHl6enkKKwlFT0YKKwltdiBmcm90eiBmcm90ejIgJiYKKwltdiBuaXRmb2wgbml0Zm9sMiAmJgorCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBpZGVudGljYWwsIGJ1dCBuZXdseSBjcmVhdGVkIHN5bWxpbmsgYW5kIGZpbGUnICcKKwk+ZXhwZWN0ZWQgJiYKKwlybSAtZiBmcm90eiBuaXRmb2wgJiYKKwllY2hvIHh5enp5ID5uaXRmb2wgJiYKKwl0ZXN0LWNobXRpbWUgKzEwIG5pdGZvbCAmJgorCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKKwl0aGVuCisJCWxuIC1zIHh5enp5IGZyb3R6CisJZWxzZQorCQlwcmludGYgeHl6enkgPmZyb3R6CisJCSMgdGhlIHN5bWxpbmsgcHJvcGVydHkgcHJvcGFnYXRlcyBmcm9tIHRoZSBpbmRleAorCWZpICYmCisJZ2l0IGRpZmYtaW5kZXggLU0gLXAgJHRyZWUgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgY3VycmVudCAmJgorCisJPmV4cGVjdGVkICYmCisJZ2l0IGRpZmYtaW5kZXggLU0gLXAgLXcgJHRyZWUgPmN1cnJlbnQgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGRpZmZlcmVudCBzeW1saW5rIGFuZCBmaWxlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL2Zyb3R6IGIvZnJvdHoKKwlpbmRleCA3YzQ2NWFmLi5kZjFkYjU0IDEyMDAwMAorCS0tLSBhL2Zyb3R6CisJKysrIGIvZnJvdHoKKwlAQCAtMSArMSBAQAorCS14eXp6eQorCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCSt5eHl5egorCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCWRpZmYgLS1naXQgYS9uaXRmb2wgYi9uaXRmb2wKKwlpbmRleCA3YzQ2NWFmLi5kZjFkYjU0IDEwMDY0NAorCS0tLSBhL25pdGZvbAorCSsrKyBiL25pdGZvbAorCUBAIC0xICsxIEBACisJLXh5enp5CisJK3l4eXl6CisJRU9GCisJcm0gLWYgZnJvdHogJiYKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTCisJdGhlbgorCQlsbiAtcyB5eHl5eiBmcm90egorCWVsc2UKKwkJcHJpbnRmIHl4eXl6ID5mcm90egorCQkjIHRoZSBzeW1saW5rIHByb3BlcnR5IHByb3BhZ2F0ZXMgZnJvbSB0aGUgaW5kZXgKKwlmaSAmJgorCWVjaG8geXh5eXogPm5pdGZvbCAmJgorCWdpdCBkaWZmLWluZGV4IC1NIC1wICR0cmVlID5jdXJyZW50ICYmCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZGlmZiBzeW1saW5rcyB3aXRoIG5vbi1leGlzdGluZyB0YXJnZXRzJyAnCisJbG4gLXMgbmFyZiBwaW5reSAmJgorCWxuIC1zIHRha2VcIG92ZXIgYnJhaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IHBpbmt5IGJyYWluID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJZ3JlcCBuYXJmIG91dHB1dCAmJgorCSEgdGVzdCAtcyBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3NldHVwIHN5bWxpbmtzIHdpdGggYXR0cmlidXRlcycgJworCWVjaG8gIiouYmluIGRpZmY9YmluIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyBjb250ZW50ID5maWxlLmJpbiAmJgorCWxuIC1zIGZpbGUuYmluIGxpbmsuYmluICYmCisJZ2l0IGFkZCAtTiBmaWxlLmJpbiBsaW5rLmJpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rcyBkbyBub3QgcmVzcGVjdCB1c2VyZGlmZiBjb25maWcgYnkgcGF0aCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvZmlsZS5iaW4gYi9maWxlLmJpbgorCWluZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CisJQmluYXJ5IGZpbGVzIGEvZmlsZS5iaW4gYW5kIGIvZmlsZS5iaW4gZGlmZmVyCisJZGlmZiAtLWdpdCBhL2xpbmsuYmluIGIvbGluay5iaW4KKwlpbmRleCBlNjlkZTI5Li5kY2U0MWVjIDEyMDAwMAorCS0tLSBhL2xpbmsuYmluCisJKysrIGIvbGluay5iaW4KKwlAQCAtMCwwICsxIEBACisJK2ZpbGUuYmluCisJXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisJRU9GCisJZ2l0IGNvbmZpZyBkaWZmLmJpbi5iaW5hcnkgdHJ1ZSAmJgorCWdpdCBkaWZmIGZpbGUuYmluIGxpbmsuYmluID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMi1kaWZmLWJpbmFyeS5zaCBiL3QvdDQwMTItZGlmZi1iaW5hcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjQzZDcyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTItZGlmZi1iaW5hcnkuc2gKQEAgLTAsMCArMSwxMzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nQmluYXJ5IGRpZmYgYW5kIGFwcGx5CisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdC5iaW5hcnktbnVtc3RhdCA8PFxFT0YKKzEJMQlhCistCS0JYgorMQkxCWMKKy0JLQlkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSByZXBvc2l0b3J5JyAnCisJZWNobyBBSVQgPmEgJiYgZWNobyBCSVQgPmIgJiYgZWNobyBDSVQgPmMgJiYgZWNobyBESVQgPmQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgYiBjIGQgJiYKKwllY2hvIGdpdCA+YSAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyA+YiAmJgorCWVjaG8gZ2l0ID5jICYmCisJY2F0IGIgYiA+ZAorJworCitjYXQgPiBleHBlY3RlZCA8PFxFT0YKKyBhIHwgICAgMiArLQorIGIgfCAgQmluCisgYyB8ICAgIDIgKy0KKyBkIHwgIEJpbgorIDQgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXN0YXQgb3V0cHV0IGZvciBiaW5hcnkgZmlsZSBjaGFuZ2UnICcKKwlnaXQgZGlmZiA+ZGlmZiAmJgorCWdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXNob3J0c3RhdCBvdXRwdXQgZm9yIGJpbmFyeSBmaWxlIGNoYW5nZScgJworCXRhaWwgLW4gMSBleHBlY3RlZCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS1zaG9ydHN0YXQgPmN1cnJlbnQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXNob3J0c3RhdCBvdXRwdXQgZm9yIGJpbmFyeSBmaWxlIGNoYW5nZSBvbmx5JyAnCisJZWNobyAiIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZGlmZiAtLXNob3J0c3RhdCAtLSBiID5jdXJyZW50ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1udW1zdGF0IG5vdGljZXMgYmluYXJ5IGZpbGUgY2hhbmdlJyAnCisJZ2l0IGRpZmYgPmRpZmYgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJpbmFyeS1udW1zdGF0IGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1udW1zdGF0IHVuZGVyc3RhbmRzIGRpZmYgLS1iaW5hcnkgZm9ybWF0JyAnCisJZ2l0IGRpZmYgLS1iaW5hcnkgPmRpZmYgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IDxkaWZmID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJpbmFyeS1udW1zdGF0IGN1cnJlbnQKKycKKworIyBhcHBseSBuZWVkcyB0byBiZSBhYmxlIHRvIHNraXAgdGhlIGJpbmFyeSBtYXRlcmlhbCBjb3JyZWN0bHkKKyMgaW4gb3JkZXIgdG8gcmVwb3J0IHRoZSBsaW5lIG51bWJlciBvZiBhIGNvcnJ1cHQgcGF0Y2guCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnYXBwbHkgZGV0ZWN0aW5nIGNvcnJ1cHQgcGF0Y2ggY29ycmVjdGx5JyAnCisJZ2l0IGRpZmYgPm91dHB1dCAmJgorCXNlZCAtZSAicy8tQ0lUL3hDSVQvIiA8b3V0cHV0ID5icm9rZW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSBicm9rZW4gMj5kZXRlY3RlZCAmJgorCWRldGVjdGVkPSQoY2F0IGRldGVjdGVkKSAmJgorCWRldGVjdGVkPSQoZXhwciAiJGRldGVjdGVkIiA6ICJmYXRhbC4qYXQgbGluZSBcXChbMC05XSpcXClcJCIpICYmCisJZGV0ZWN0ZWQ9JChzZWQgLW5lICIke2RldGVjdGVkfXAiIGJyb2tlbikgJiYKKwl0ZXN0ICIkZGV0ZWN0ZWQiID0geENJVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnYXBwbHkgZGV0ZWN0aW5nIGNvcnJ1cHQgcGF0Y2ggY29ycmVjdGx5JyAnCisJZ2l0IGRpZmYgLS1iaW5hcnkgfCBzZWQgLWUgInMvLUNJVC94Q0lULyIgPmJyb2tlbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IGJyb2tlbiAyPmRldGVjdGVkICYmCisJZGV0ZWN0ZWQ9JChjYXQgZGV0ZWN0ZWQpICYmCisJZGV0ZWN0ZWQ9JChleHByICIkZGV0ZWN0ZWQiIDogImZhdGFsLiphdCBsaW5lIFxcKFswLTldKlxcKVwkIikgJiYKKwlkZXRlY3RlZD0kKHNlZCAtbmUgIiR7ZGV0ZWN0ZWR9cCIgYnJva2VuKSAmJgorCXRlc3QgIiRkZXRlY3RlZCIgPSB4Q0lUCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgY29tbWl0JyAnZ2l0IGNvbW1pdCAtYSAtbSBpbml0aWFsJworCisjIFRyeSByZW1vdmFsIChiKSwgbW9kaWZpY2F0aW9uIChkKSwgYW5kIGNyZWF0aW9uIChlKS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggd2l0aCAtLWJpbmFyeScgJworCWVjaG8gQUlUID5hICYmIG12IGIgZSAmJiBlY2hvIENJVCA+YyAmJiBjYXQgZSA+ZCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgYSBiIGMgZCBlICYmCisJdHJlZTA9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLWJpbmFyeSA+Y3VycmVudCAmJgorCWdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IHBhdGNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSAtLWJpbmFyeSAtLWluZGV4IDxjdXJyZW50ICYmCisJdHJlZTE9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwl0ZXN0ICIkdHJlZTEiID0gIiR0cmVlMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLW5vLWluZGV4IHdpdGggYmluYXJ5IGNyZWF0aW9uJyAnCisJZWNobyBRIHwgcV90b19udWwgPmJpbmFyeSAmJgorCSg6IGhpZGUgZXJyb3IgY29kZSBmcm9tIGRpZmYsIHdoaWNoIGp1c3QgaW5kaWNhdGVzIGRpZmZlcmVuY2VzCisJIGdpdCBkaWZmIC0tYmluYXJ5IC0tbm8taW5kZXggL2Rldi9udWxsIGJpbmFyeSA+Y3VycmVudCB8fAorCSB0cnVlCisJKSAmJgorCXJtIGJpbmFyeSAmJgorCWdpdCBhcHBseSAtLWJpbmFyeSA8Y3VycmVudCAmJgorCWVjaG8gUSA+ZXhwZWN0ZWQgJiYKKwludWxfdG9fcSA8YmluYXJ5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyBiaW5maWxlICB8ICAgQmluIDAgLT4gMTAyNiBieXRlcworIHRleHRmaWxlIHwgMTAwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1zdGF0IHdpdGggYmluYXJ5IGZpbGVzIGFuZCBiaWcgY2hhbmdlIGNvdW50JyAnCisJcHJpbnRmICJcMDFcMDAlMTAyNGQiIDEgPmJpbmZpbGUgJiYKKwlnaXQgYWRkIGJpbmZpbGUgJiYKKwlpPTAgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sdCAxMDAwMDsgZG8KKwkJZWNobyAkaSAmJgorCQlpPSQoKCRpICsgMSkpCisJZG9uZSA+dGV4dGZpbGUgJiYKKwlnaXQgYWRkIHRleHRmaWxlICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1zdGF0IGJpbmZpbGUgdGV4dGZpbGUgPm91dHB1dCAmJgorCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2ggYi90L3Q0MDEzLWRpZmYtdmFyaW91cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZWM2MDcyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy1kaWZmLXZhcmlvdXMuc2gKQEAgLTAsMCArMSwzMzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVmFyaW91cyBkaWZmIGZvcm1hdHRpbmcgb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK0xGPScKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDA6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAwOjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlta2RpciBkaXIgJiYKKwlta2RpciBkaXIyICYmCisJZm9yIGkgaW4gMSAyIDM7IGRvIGVjaG8gJGk7IGRvbmUgPmZpbGUwICYmCisJZm9yIGkgaW4gQSBCOyBkbyBlY2hvICRpOyBkb25lID5kaXIvc3ViICYmCisJY2F0IGZpbGUwID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTAgZmlsZTIgZGlyL3N1YiAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDE6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAxOjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlmb3IgaSBpbiA0IDUgNjsgZG8gZWNobyAkaTsgZG9uZSA+PmZpbGUwICYmCisJZm9yIGkgaW4gQyBEOyBkbyBlY2hvICRpOyBkb25lID4+ZGlyL3N1YiAmJgorCXJtIC1mIGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSBmaWxlMCBmaWxlMiBkaXIvc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kJHtMRn0ke0xGfVRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuIiAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAyOjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowMjowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCisJZm9yIGkgaW4gQSBCIEM7IGRvIGVjaG8gJGk7IGRvbmUgPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWZvciBpIGluIEUgRjsgZG8gZWNobyAkaTsgZG9uZSA+PmRpci9zdWIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGRpci9zdWIgJiYKKwlnaXQgY29tbWl0IC1tIFRoaXJkICYmCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDM6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjAzOjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWZvciBpIGluIEEgQiBDOyBkbyBlY2hvICRpOyBkb25lID4+ZmlsZTAgJiYKKwlmb3IgaSBpbiAxIDI7IGRvIGVjaG8gJGk7IGRvbmUgPj5kaXIvc3ViICYmCisJY2F0IGRpci9zdWIgPmZpbGUzICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZTAgZGlyL3N1YiAmJgorCWdpdCBjb21taXQgLW0gU2lkZSAmJgorCisJR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA0OjAwICswMDAwIiAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNi0wNi0yNiAwMDowNDowMCArMDAwMCIgJiYKKwlleHBvcnQgR0lUX0FVVEhPUl9EQVRFIEdJVF9DT01NSVRURVJfREFURSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBwdWxsIC1zIG91cnMgLiBzaWRlICYmCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDU6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA1OjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisKKwlmb3IgaSBpbiBBIEIgQzsgZG8gZWNobyAkaTsgZG9uZSA+PmZpbGUwICYmCisJZm9yIGkgaW4gMSAyOyBkbyBlY2hvICRpOyBkb25lID4+ZGlyL3N1YiAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZTAgZGlyL3N1YiAmJgorCisJbWtkaXIgZGlyMyAmJgorCWNwIGRpci9zdWIgZGlyMy9zdWIgJiYKKwl0ZXN0LWNobXRpbWUgKzEgZGlyMy9zdWIgJiYKKworCWdpdCBjb25maWcgbG9nLnNob3dyb290IGZhbHNlICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kICYmCisKKwlHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDY6MDAgKzAwMDAiICYmCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTA2LTI2IDAwOjA2OjAwICswMDAwIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX0RBVEUgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYXJyYW5nZSBpbml0aWFsICYmCisJZm9yIGkgaW4gQiBBOyBkbyBlY2hvICRpOyBkb25lID5kaXIvc3ViICYmCisJZ2l0IGFkZCBkaXIvc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAiUmVhcnJhbmdlZCBsaW5lcyBpbiBkaXIvc3ViIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCWdpdCBzaG93LWJyYW5jaAorJworCis6IDw8XEVPRgorISBbaW5pdGlhbF0gSW5pdGlhbAorICogW21hc3Rlcl0gTWVyZ2UgYnJhbmNoICdzaWRlJworICAhIFtyZWFycmFuZ2VdIFJlYXJyYW5nZWQgbGluZXMgaW4gZGlyL3N1YgorICAgISBbc2lkZV0gU2lkZQorLS0tLQorICArICBbcmVhcnJhbmdlXSBSZWFycmFuZ2VkIGxpbmVzIGluIGRpci9zdWIKKyAtICAgW21hc3Rlcl0gTWVyZ2UgYnJhbmNoICdzaWRlJworICogKyBbc2lkZV0gU2lkZQorICogICBbbWFzdGVyXl0gVGhpcmQKKyAqICAgW21hc3Rlcn4yXSBTZWNvbmQKKysqKysgW2luaXRpYWxdIEluaXRpYWwKK0VPRgorCitWPSQoZ2l0IHZlcnNpb24gfCBzZWQgLWUgJ3MvXmdpdCB2ZXJzaW9uIC8vJyAtZSAncy9cLi9cXC4vZycpCit3aGlsZSByZWFkIGNtZAorZG8KKwljYXNlICIkY21kIiBpbgorCScnIHwgJyMnKikgY29udGludWUgOzsKKwllc2FjCisJdGVzdD0kKGVjaG8gIiRjbWQiIHwgc2VkIC1lICdzfFsvIF1bLyBdKnxffGcnKQorCXBmeD0kKHByaW50ZiAiJTA0ZCIgJHRlc3RfY291bnQpCisJZXhwZWN0PSIkVEVTVF9ESVJFQ1RPUlkvdDQwMTMvZGlmZi4kdGVzdCIKKwlhY3R1YWw9IiRwZngtZGlmZi4kdGVzdCIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdpdCAkY21kIiAnCisJCXsKKwkJCWVjaG8gIlwkIGdpdCAkY21kIgorCQkJZ2l0ICRjbWQgfAorCQkJc2VkIC1lICJzL15cXCgtKlxcKSRWXFwoLSpcXClcJC9cXDFnLWktdC0tdi1lLXItcy1pLW8tblwyLyIgXAorCQkJICAgIC1lICJzL15cXCguKm1peGVkOyBib3VuZGFyeT1cIi0qXFwpJFZcXCgtKlxcKVwiXCQvXFwxZy1pLXQtLXYtZS1yLXMtaS1vLW5cMlwiLyIKKwkJCWVjaG8gIlwkIgorCQl9ID4iJGFjdHVhbCIgJiYKKwkJaWYgdGVzdCAtZiAiJGV4cGVjdCIKKwkJdGhlbgorCQkJY2FzZSAkY21kIGluCisJCQkqZm9ybWF0LXBhdGNoKiB8ICotc3RhdCopCisJCQkJdGVzdF9pMThuY21wICIkZXhwZWN0IiAiJGFjdHVhbCI7OworCQkJKikKKwkJCQl0ZXN0X2NtcCAiJGV4cGVjdCIgIiRhY3R1YWwiOzsKKwkJCWVzYWMgJiYKKwkJCXJtIC1mICIkYWN0dWFsIgorCQllbHNlCisJCQkjIHRoaXMgaXMgdG8gaGVscCBkZXZlbG9waW5nIG5ldyB0ZXN0cy4KKwkJCWNwICIkYWN0dWFsIiAiJGV4cGVjdCIKKwkJCWZhbHNlCisJCWZpCisJJworZG9uZSA8PFxFT0YKK2RpZmYtdHJlZSBpbml0aWFsCitkaWZmLXRyZWUgLXIgaW5pdGlhbAorZGlmZi10cmVlIC1yIC0tYWJicmV2IGluaXRpYWwKK2RpZmYtdHJlZSAtciAtLWFiYnJldj00IGluaXRpYWwKK2RpZmYtdHJlZSAtLXJvb3QgaW5pdGlhbAorZGlmZi10cmVlIC0tcm9vdCAtLWFiYnJldiBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC1yIGluaXRpYWwKK2RpZmYtdHJlZSAtLXJvb3QgLXIgLS1hYmJyZXYgaW5pdGlhbAorZGlmZi10cmVlIC0tcm9vdCAtciAtLWFiYnJldj00IGluaXRpYWwKK2RpZmYtdHJlZSAtcCBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC1wIGluaXRpYWwKK2RpZmYtdHJlZSAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsCitkaWZmLXRyZWUgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKK2RpZmYtdHJlZSAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKK2RpZmYtdHJlZSAtLXJvb3QgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCisKK2RpZmYtdHJlZSAtLXByZXR0eSBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtcCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1zdGF0IGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXN1bW1hcnkgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tc3RhdCAtLXN1bW1hcnkgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtcCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tc3RhdCBpbml0aWFsCisjIGltcHJvdmVkIGJ5IFRpbW8ncyBwYXRjaAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXN1bW1hcnkgaW5pdGlhbAorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdW1tYXJ5IC1yIGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdGF0IC0tc3VtbWFyeSBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLXAgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1yb290IC1wIGluaXRpYWwKK2RpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCitkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCisKK2RpZmYtdHJlZSAtLXByZXR0eSBzaWRlCitkaWZmLXRyZWUgLS1wcmV0dHkgLXAgc2lkZQorZGlmZi10cmVlIC0tcHJldHR5IC0tcGF0Y2gtd2l0aC1zdGF0IHNpZGUKKworZGlmZi10cmVlIG1hc3RlcgorZGlmZi10cmVlIC1wIG1hc3RlcgorZGlmZi10cmVlIC1wIC1tIG1hc3RlcgorZGlmZi10cmVlIC1jIG1hc3RlcgorZGlmZi10cmVlIC1jIC0tYWJicmV2IG1hc3RlcgorZGlmZi10cmVlIC0tY2MgbWFzdGVyCisjIHN0YXQgb25seSBzaG91bGQgc2hvdyB0aGUgZGlmZnN0YXQgd2l0aCB0aGUgZmlyc3QgcGFyZW50CitkaWZmLXRyZWUgLWMgLS1zdGF0IG1hc3RlcgorZGlmZi10cmVlIC0tY2MgLS1zdGF0IG1hc3RlcgorZGlmZi10cmVlIC1jIC0tc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitkaWZmLXRyZWUgLS1jYyAtLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorIyBzdGF0IHN1bW1hcnkgc2hvdWxkIHNob3cgdGhlIGRpZmZzdGF0IGFuZCBzdW1tYXJ5IHdpdGggdGhlIGZpcnN0IHBhcmVudAorZGlmZi10cmVlIC1jIC0tc3RhdCAtLXN1bW1hcnkgc2lkZQorZGlmZi10cmVlIC0tY2MgLS1zdGF0IC0tc3VtbWFyeSBzaWRlCisjIGltcHJvdmVkIGJ5IFRpbW8ncyBwYXRjaAorZGlmZi10cmVlIC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCisjIGltcHJvdmVkIGJ5IFRpbW8ncyBwYXRjaAorZGlmZi10cmVlIC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorIyB0aGlzIGlzIGNvcnJlY3QKK2RpZmYtdHJlZSAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBzaWRlCisKK2xvZyBtYXN0ZXIKK2xvZyAtcCBtYXN0ZXIKK2xvZyAtLXJvb3QgbWFzdGVyCitsb2cgLS1yb290IC1wIG1hc3RlcgorbG9nIC0tcGF0Y2gtd2l0aC1zdGF0IG1hc3RlcgorbG9nIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK2xvZyAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2xvZyAtLXJvb3QgLWMgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorIyBpbXByb3ZlZCBieSBUaW1vJ3MgcGF0Y2gKK2xvZyAtLXJvb3QgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitsb2cgLXAgLS1maXJzdC1wYXJlbnQgbWFzdGVyCitsb2cgLW0gLXAgLS1maXJzdC1wYXJlbnQgbWFzdGVyCitsb2cgLW0gLXAgbWFzdGVyCitsb2cgLVNGIG1hc3RlcgorbG9nIC1TIEYgbWFzdGVyCitsb2cgLVNGIC1wIG1hc3RlcgorbG9nIC1TRiBtYXN0ZXIgLS1tYXgtY291bnQ9MAorbG9nIC1TRiBtYXN0ZXIgLS1tYXgtY291bnQ9MQorbG9nIC1TRiBtYXN0ZXIgLS1tYXgtY291bnQ9MgorbG9nIC1HRiBtYXN0ZXIKK2xvZyAtR0YgLXAgbWFzdGVyCitsb2cgLUdGIC1wIC0tcGlja2F4ZS1hbGwgbWFzdGVyCitsb2cgLS1kZWNvcmF0ZSAtLWFsbAorbG9nIC0tZGVjb3JhdGU9ZnVsbCAtLWFsbAorCityZXYtbGlzdCAtLXBhcmVudHMgSEVBRAorcmV2LWxpc3QgLS1jaGlsZHJlbiBIRUFECisKK3doYXRjaGFuZ2VkIG1hc3Rlcgord2hhdGNoYW5nZWQgLXAgbWFzdGVyCit3aGF0Y2hhbmdlZCAtLXJvb3QgbWFzdGVyCit3aGF0Y2hhbmdlZCAtLXJvb3QgLXAgbWFzdGVyCit3aGF0Y2hhbmdlZCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK3doYXRjaGFuZ2VkIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK3doYXRjaGFuZ2VkIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCisjIGltcHJvdmVkIGJ5IFRpbW8ncyBwYXRjaAord2hhdGNoYW5nZWQgLS1yb290IC1jIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKyMgaW1wcm92ZWQgYnkgVGltbydzIHBhdGNoCit3aGF0Y2hhbmdlZCAtLXJvb3QgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCit3aGF0Y2hhbmdlZCAtU0YgbWFzdGVyCit3aGF0Y2hhbmdlZCAtU0YgLXAgbWFzdGVyCisKK2xvZyAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIgLS0gZGlyLword2hhdGNoYW5nZWQgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyIC0tIGRpci8KK2xvZyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyIC0tIGRpci8KK3doYXRjaGFuZ2VkIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIgLS0gZGlyLworCitzaG93IGluaXRpYWwKK3Nob3cgLS1yb290IGluaXRpYWwKK3Nob3cgc2lkZQorc2hvdyBtYXN0ZXIKK3Nob3cgLWMgbWFzdGVyCitzaG93IC1tIG1hc3Rlcgorc2hvdyAtLWZpcnN0LXBhcmVudCBtYXN0ZXIKK3Nob3cgLS1zdGF0IHNpZGUKK3Nob3cgLS1zdGF0IC0tc3VtbWFyeSBzaWRlCitzaG93IC0tcGF0Y2gtd2l0aC1zdGF0IHNpZGUKK3Nob3cgLS1wYXRjaC13aXRoLXJhdyBzaWRlCitzaG93IC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBzaWRlCisKK2Zvcm1hdC1wYXRjaCAtLXN0ZG91dCBpbml0aWFsLi5zaWRlCitmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyXgorZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlcgorZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbm8tbnVtYmVyZWQgaW5pdGlhbC4ubWFzdGVyCitmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1udW1iZXJlZCBpbml0aWFsLi5tYXN0ZXIKK2Zvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCBpbml0aWFsLi5zaWRlCitmb3JtYXQtcGF0Y2ggLS1hdHRhY2ggLS1zdGRvdXQgLS1zdWZmaXg9LmRpZmYgaW5pdGlhbC4uc2lkZQorZm9ybWF0LXBhdGNoIC0tYXR0YWNoIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KK2Zvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIKK2Zvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCBpbml0aWFsLi5zaWRlCitmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyXgorZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IC0tbnVtYmVyZWQtZmlsZXMgaW5pdGlhbC4ubWFzdGVyCitmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyCitmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRSBpbml0aWFsLi5tYXN0ZXIKK2NvbmZpZyBmb3JtYXQuc3ViamVjdHByZWZpeCBESUZGRVJFTlRfUFJFRklYCitmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyXl4KK2Zvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtbiBpbml0aWFsLi5tYXN0ZXJeCisKK2RpZmYgLS1hYmJyZXYgaW5pdGlhbC4uc2lkZQorZGlmZiAtciBpbml0aWFsLi5zaWRlCitkaWZmIC0tc3RhdCBpbml0aWFsLi5zaWRlCitkaWZmIC1yIC0tc3RhdCBpbml0aWFsLi5zaWRlCitkaWZmIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbC4uc2lkZQorZGlmZiAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwuLnNpZGUKK2RpZmYgLS1wYXRjaC13aXRoLXN0YXQgLXIgaW5pdGlhbC4uc2lkZQorZGlmZiAtLXBhdGNoLXdpdGgtcmF3IC1yIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1uYW1lLXN0YXR1cyBkaXIyIGRpcgorZGlmZiAtLW5vLWluZGV4IC0tbmFtZS1zdGF0dXMgZGlyMiBkaXIKK2RpZmYgLS1uby1pbmRleCAtLW5hbWUtc3RhdHVzIC0tIGRpcjIgZGlyCitkaWZmIC0tbm8taW5kZXggZGlyIGRpcjMKK2RpZmYgbWFzdGVyIG1hc3Rlcl4gc2lkZQorZGlmZiAtLWRpcnN0YXQgbWFzdGVyfjEgbWFzdGVyfjIKK2RpZmYgLS1kaXJzdGF0IGluaXRpYWwgcmVhcnJhbmdlCitkaWZmIC0tZGlyc3RhdC1ieS1maWxlIGluaXRpYWwgcmVhcnJhbmdlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1TIHJlcXVpcmVzIGFuIGFyZ3VtZW50JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtUworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tY2FjaGVkIG9uIHVuYm9ybiBicmFuY2gnICcKKwllY2hvIHJlZjogcmVmcy9oZWFkcy91bmJvcm4gPi5naXQvSEVBRCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZL3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZCIgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1jYWNoZWQgLS0gZmlsZSBvbiB1bmJvcm4gYnJhbmNoJyAnCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS0gZmlsZTAgPnJlc3VsdCAmJgorCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkXy0tX2ZpbGUwIiByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi10cmVlIC0tc3RkaW4gd2l0aCBsb2cgZm9ybWF0dGluZycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlTaWRlCisJVGhpcmQKKwlTZWNvbmQKKwlFT0YKKwlnaXQgcmV2LWxpc3QgbWFzdGVyIHwgZ2l0IGRpZmYtdHJlZSAtLXN0ZGluIC0tZm9ybWF0PSVzIC1zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmNvbmZpZ19mb3JtYXQuc3ViamVjdHByZWZpeF9ESUZGRVJFTlRfUFJFRklYIGIvdC90NDAxMy9kaWZmLmNvbmZpZ19mb3JtYXQuc3ViamVjdHByZWZpeF9ESUZGRVJFTlRfUFJFRklYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Zjg5NzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuY29uZmlnX2Zvcm1hdC5zdWJqZWN0cHJlZml4X0RJRkZFUkVOVF9QUkVGSVgKQEAgLTAsMCArMSwyIEBACiskIGdpdCBjb25maWcgZm9ybWF0LnN1YmplY3RwcmVmaXggRElGRkVSRU5UX1BSRUZJWAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTUxZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWMzM2ZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9zaWRlCkBAIC0wLDAgKzEsMzkgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLWNjIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBzaWRlCitjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIzYzBhNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMTk4NjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1jYyAtLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjJlZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlCkBAIC0wLDAgKzEsOCBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1zdGF0IC0tc3VtbWFyeSBzaWRlCitjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLWNjXy0tc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBiOTE3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY18tLXN0YXRfbWFzdGVyCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tY2MgLS1zdGF0IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1jY19tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlY2I0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tY2NfbWFzdGVyCkBAIC0wLDAgKzEsMzAgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLWNjIG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxNzdhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOTA1YjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiOGI0NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JkZGU0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDc5ZjFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKQEAgLTAsMCArMSwzMyBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5PW9uZWxpbmUgLS1yb290IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSBJbml0aWFsCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDM1ZDI0MmJhNzlhZTg5YWM2OTVlMjZiM2Q0YzI3YThlNmYwMjhmOWUgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3ZWQwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSBJbml0aWFsCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLXBfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV8tLXJvb3RfLXBfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzUwOTJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF8tcF9pbml0aWFsCkBAIC0wLDAgKzEsMjkgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIC0tcm9vdCAtcCBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhIEluaXRpYWwKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy0tcm9vdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OTIwYWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLS1yb290X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtLXJvb3QgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSBJbml0aWFsCis6MDAwMDAwIDA0MDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGRhN2EzM2ZhNzdkODA2NmQ2Njk4NjQzOTQwY2U1ODYwZmUyZDdmYjMgQQlkaXIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy1wX2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfLXBfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGI3NmJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eT1vbmVsaW5lXy1wX2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHk9b25lbGluZSAtcCBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHk9b25lbGluZV9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MDk3MGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5PW9uZWxpbmVfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eT1vbmVsaW5lIGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E4NTMxNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcGF0Y2gtd2l0aC1yYXcgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMDgyMzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1wYXRjaC13aXRoLXN0YXQgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXBhdGNoLXdpdGgtc3RhdF9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlM2Y2YjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcGF0Y2gtd2l0aC1zdGF0X3NpZGUKQEAgLTAsMCArMSw0MyBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcGF0Y2gtd2l0aC1zdGF0IHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMjAzYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXBhdGNoLXdpdGgtcmF3X2luaXRpYWwKQEAgLTAsMCArMSwzOCBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXBhdGNoLXdpdGgtcmF3IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDM1ZDI0MmJhNzlhZTg5YWM2OTVlMjZiM2Q0YzI3YThlNmYwMjhmOWUgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmViNzdlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDM5IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3RhdF8tLXN1bW1hcnlfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3RhdF8tLXN1bW1hcnlfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODBlYWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0Xy0tc3VtbWFyeV9pbml0aWFsCkBAIC0wLDAgKzEsMTUgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgLS1zdGF0IC0tc3VtbWFyeSBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN0YXRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzIyZDFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLS1zdGF0X2luaXRpYWwKQEAgLTAsMCArMSwxMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tcm9vdCAtLXN0YXQgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN1bW1hcnlfLXJfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3VtbWFyeV8tcl9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZGFhZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN1bW1hcnlfLXJfaW5pdGlhbApAQCAtMCwwICsxLDExIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tc3VtbWFyeSAtciBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworIGNyZWF0ZSBtb2RlIDEwMDY0NCBkaXIvc3ViCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN1bW1hcnlfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290Xy0tc3VtbWFyeV9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZTVmNzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tLXN1bW1hcnlfaW5pdGlhbApAQCAtMCwwICsxLDExIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC0tc3VtbWFyeSBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKworIGNyZWF0ZSBtb2RlIDEwMDY0NCBkaXIvc3ViCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF8tcF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLXBfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDQxMWY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXJvb3RfLXBfaW5pdGlhbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLS1yb290IC1wIGluaXRpYWwKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1yb290X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZTMyZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tcm9vdF9pbml0aWFsCkBAIC0wLDAgKzEsMTEgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXJvb3QgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKKzowMDAwMDAgMDQwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZGE3YTMzZmE3N2Q4MDY2ZDY2OTg2NDM5NDBjZTU4NjBmZTJkN2ZiMyBBCWRpcgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3RhdF8tLXN1bW1hcnlfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1zdGF0Xy0tc3VtbWFyeV9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMjk4M2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3RhdF8tLXN1bW1hcnlfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXN0YXQgLS1zdW1tYXJ5IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfLS1zdGF0X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3RhdF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZGNmYjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3RhdF9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC0tc3RhdCBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy0tc3VtbWFyeV9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXN1bW1hcnlfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmMyYzRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tLXN1bW1hcnlfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSAtLXN1bW1hcnkgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOTk0MmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1wX2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgLXAgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXByZXR0eV8tcF9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5OTNhYTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5Xy1wX3NpZGUKQEAgLTAsMCArMSwzOCBAQAorJCBnaXQgZGlmZi10cmVlIC0tcHJldHR5IC1wIHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ3MTViZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXByZXR0eSBpbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X3NpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcHJldHR5X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTliNmUxYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1wcmV0dHlfc2lkZQpAQCAtMCwwICsxLDExIEBACiskIGdpdCBkaWZmLXRyZWUgLS1wcmV0dHkgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKzowNDAwMDAgMDQwMDAwIGRhN2EzM2ZhNzdkODA2NmQ2Njk4NjQzOTQwY2U1ODYwZmUyZDdmYjMgZjk3N2VkNDZhZTY4NzNjMWMzMGFiODc4ZTE1YTRhY2NlZGMzNjE4YiBNCWRpcgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBmNDYxNWRhNjc0YzA5ZGYzMjJkNmJhOGQ2YjIxZWNmYjFiMWJhNTEwIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgNzI4OWUzNWJmZjMyNzI3YzA4ZGRhMjA3NTExYmVjMTM4ZmRiOWVhNSBBCWZpbGUzCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tLWFiYnJldl9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1hYmJyZXZfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE4NGIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1hYmJyZXZfaW5pdGlhbApAQCAtMCwwICsxLDYgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1hYmJyZXYgaW5pdGlhbAorNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorOjAwMDAwMCAwNDAwMDAgMDAwMDAwMC4uLiBkYTdhMzNmLi4uIEEJZGlyCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxZTc5YzMuLi4gQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAwMWU3OWMzLi4uIEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjk1ZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsCkBAIC0wLDAgKzEsMzMgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDM1ZDI0MmJhNzlhZTg5YWM2OTVlMjZiM2Q0YzI3YThlNmYwMjhmOWUgQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY5ZmZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbApAQCAtMCwwICsxLDM0IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC0tcGF0Y2gtd2l0aC1zdGF0IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXBfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1wX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIxOWM3MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1wX2luaXRpYWwKQEAgLTAsMCArMSwyOSBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCAtcCBpbml0aWFsCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2PTRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2PTRfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzUzNjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXJfLS1hYmJyZXY9NF9pbml0aWFsCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZi10cmVlIC0tcm9vdCAtciAtLWFiYnJldj00IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMTAwNjQ0IDAwMDAuLi4gMzVkMi4uLiBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAuLi4gMDFlNy4uLiBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwLi4uIDAxZTcuLi4gQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXJfLS1hYmJyZXZfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdiNDYwZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yXy0tYWJicmV2X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC1yIC0tYWJicmV2IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMzVkMjQyYi4uLiBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gMDFlNzljMy4uLiBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxZTc5YzMuLi4gQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfLXJfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yX2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkNDM1ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290Xy1yX2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IC1yIGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMzVkMjQyYmE3OWFlODlhYzY5NWUyNmIzZDRjMjdhOGU2ZjAyOGY5ZSBBCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxZTc5YzMyYThjOTljNTU3ZjA3NTdkYTdjYjZkNjViMzQxNDQ2NmQgQQlmaWxlMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tLXJvb3RfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290X2luaXRpYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRmNmIwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLS1yb290X2luaXRpYWwKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLS1yb290IGluaXRpYWwKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzowMDAwMDAgMDQwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZGE3YTMzZmE3N2Q4MDY2ZDY2OTg2NDM5NDBjZTU4NjBmZTJkN2ZiMyBBCWRpcgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMWU3OWMzMmE4Yzk5YzU1N2YwNzU3ZGE3Y2I2ZDY1YjM0MTQ0NjZkIEEJZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDFlNzljMzJhOGM5OWM1NTdmMDc1N2RhN2NiNmQ2NWIzNDE0NDY2ZCBBCWZpbGUyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tYWJicmV2X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1hYmJyZXZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZTRhYTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tYWJicmV2X21hc3RlcgpAQCAtMCwwICsxLDUgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtYyAtLWFiYnJldiBtYXN0ZXIKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKzo6MTAwNjQ0IDEwMDY0NCAxMDA2NDQgY2VhZDMyZS4uLiA3Mjg5ZTM1Li4uIDk5MjkxM2MuLi4gTU0JZGlyL3N1YgorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBiNDE0MTA4Li4uIGY0NjE1ZGEuLi4gMTBhOGE5Zi4uLiBNTQlmaWxlMAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfLS1zdW1tYXJ5X21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMzAyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLWMgLS1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKKzU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF8tLXN1bW1hcnlfc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZGMxMmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF8tLXN1bW1hcnlfc2lkZQpAQCAtMCwwICsxLDggQEAKKyQgZ2l0IGRpZmYtdHJlZSAtYyAtLXN0YXQgLS1zdW1tYXJ5IHNpZGUKK2M3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY18tLXN0YXRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDU5YjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1jXy0tc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmLXRyZWUgLWMgLS1zdGF0IG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tY19tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkMmJiMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLWNfbWFzdGVyCkBAIC0wLDAgKzEsNSBAQAorJCBnaXQgZGlmZi10cmVlIC1jIG1hc3RlcgorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorOjoxMDA2NDQgMTAwNjQ0IDEwMDY0NCBjZWFkMzJlOTI1YjE0MjBjODRjMTRjYmY3Y2Y3NTVlN2U0NWFmOGFkIDcyODllMzViZmYzMjcyN2MwOGRkYTIwNzUxMWJlYzEzOGZkYjllYTUgOTkyOTEzYzVhYTBhNTQ3NmQxMGM0OWVkMGYyMWZjMGM2ZDFhZWRmMyBNTQlkaXIvc3ViCis6OjEwMDY0NCAxMDA2NDQgMTAwNjQ0IGI0MTQxMDhlODFlNTA5MWZlMDk3NGExODU4YjRkMGQyMmIxMDdmNzAgZjQ2MTVkYTY3NGMwOWRmMzIyZDZiYThkNmIyMWVjZmIxYjFiYTUxMCAxMGE4YTlmMzY1N2Y5MWExNTZiOWYwMTg0ZWQ3OWEyMGFkZWY5ZjdmIE1NCWZpbGUwCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wXy1tX21hc3RlciBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXBfLW1fbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MGJlYTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wXy1tX21hc3RlcgpAQCAtMCwwICsxLDgwIEBACiskIGdpdCBkaWZmLXRyZWUgLXAgLW0gbWFzdGVyCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IGNlYWQzMmUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtNCwzICs0LDUgQEAgQworIEQKKyBFCisgRgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggYjQxNDEwOC4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTQsMyArNCw2IEBACisgNAorIDUKKyA2CisrQQorK0IKKytDCis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDcyODllMzUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSw0ICsxLDggQEAKKyBBCisgQgorK0MKKytECisrRQorK0YKKyAxCisgMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGY0NjE1ZGEuLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDYgKzEsOSBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorIEEKKyBCCisgQworZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA3Mjg5ZTM1Li4wMDAwMDAwCistLS0gYS9maWxlMworKysrIC9kZXYvbnVsbAorQEAgLTEsNCArMCwwIEBACistQQorLUIKKy0xCistMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9pbml0aWFsIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMGNlODgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wX2luaXRpYWwKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLXAgaW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTgyODc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcF9tYXN0ZXIKQEAgLTAsMCArMSwyIEBACiskIGdpdCBkaWZmLXRyZWUgLXAgbWFzdGVyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1yXy0tYWJicmV2PTRfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfLS1hYmJyZXY9NF9pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YTNhYTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZi10cmVlXy1yXy0tYWJicmV2PTRfaW5pdGlhbApAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYtdHJlZSAtciAtLWFiYnJldj00IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfLS1hYmJyZXZfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfLS1hYmJyZXZfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjY4OWI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcl8tLWFiYnJldl9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC1yIC0tYWJicmV2IGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfLXJfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzY1ZDgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV8tcl9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIC1yIGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfaW5pdGlhbCBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDlmYzUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV9pbml0aWFsCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIGluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmRpZmYtdHJlZV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5MjI2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmLXRyZWVfbWFzdGVyCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZi10cmVlIG1hc3RlcgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1hYmJyZXZfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tYWJicmV2X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4ZTY2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tYWJicmV2X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzMiBAQAorJCBnaXQgZGlmZiAtLWFiYnJldiBpbml0aWFsLi5zaWRlCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZCBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMTZlODMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWNhY2hlZApAQCAtMCwwICsxLDM4IEBACitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45OTI5MTNjCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDggQEAKKytBCisrQgorK0MKKytECisrRQorK0YKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4xMGE4YTlmCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSw5IEBACisrMQorKzIKKyszCisrNAorKzUKKys2CisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkXy0tX2ZpbGUwIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1jYWNoZWRfLS1fZmlsZTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjliYjg1OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tY2FjaGVkXy0tX2ZpbGUwCkBAIC0wLDAgKzEsMTUgQEAKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMTBhOGE5ZgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsOSBAQAorKzEKKysyCisrMworKzQKKys1CisrNgorK0EKKytCCisrQwpkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0LWJ5LWZpbGVfaW5pdGlhbF9yZWFycmFuZ2UgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXQtYnktZmlsZV9pbml0aWFsX3JlYXJyYW5nZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhlMzNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0LWJ5LWZpbGVfaW5pdGlhbF9yZWFycmFuZ2UKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tZGlyc3RhdC1ieS1maWxlIGluaXRpYWwgcmVhcnJhbmdlCisgMTAwLjAlIGRpci8KKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdF9pbml0aWFsX3JlYXJyYW5nZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tZGlyc3RhdF9pbml0aWFsX3JlYXJyYW5nZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmIwMmMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0X2luaXRpYWxfcmVhcnJhbmdlCkBAIC0wLDAgKzEsMyBAQAorJCBnaXQgZGlmZiAtLWRpcnN0YXQgaW5pdGlhbCByZWFycmFuZ2UKKyAxMDAuMCUgZGlyLworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0X21hc3Rlcn4xX21hc3Rlcn4yIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1kaXJzdGF0X21hc3Rlcn4xX21hc3Rlcn4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NzJlMWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLWRpcnN0YXRfbWFzdGVyfjFfbWFzdGVyfjIKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tZGlyc3RhdCBtYXN0ZXJ+MSBtYXN0ZXJ+MgorICA0MC4wJSBkaXIvCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLW5hbWUtc3RhdHVzX2RpcjJfZGlyIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uYW1lLXN0YXR1c19kaXIyX2RpcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGQ5NmFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uYW1lLXN0YXR1c19kaXIyX2RpcgpAQCAtMCwwICsxLDIgQEAKKyQgZ2l0IGRpZmYgLS1uYW1lLXN0YXR1cyBkaXIyIGRpcgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLW5hbWUtc3RhdHVzXy0tX2RpcjJfZGlyIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1uby1pbmRleF8tLW5hbWUtc3RhdHVzXy0tX2RpcjJfZGlyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTZmOGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tbmFtZS1zdGF0dXNfLS1fZGlyMl9kaXIKQEAgLTAsMCArMSwzIEBACiskIGdpdCBkaWZmIC0tbm8taW5kZXggLS1uYW1lLXN0YXR1cyAtLSBkaXIyIGRpcgorQQlkaXIvc3ViCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4Xy0tbmFtZS1zdGF0dXNfZGlyMl9kaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0NzU4NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfLS1uYW1lLXN0YXR1c19kaXIyX2RpcgpAQCAtMCwwICsxLDMgQEAKKyQgZ2l0IGRpZmYgLS1uby1pbmRleCAtLW5hbWUtc3RhdHVzIGRpcjIgZGlyCitBCWRpci9zdWIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tbm8taW5kZXhfZGlyX2RpcjMgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4X2Rpcl9kaXIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNDJjMmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLW5vLWluZGV4X2Rpcl9kaXIzCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgZGlmZiAtLW5vLWluZGV4IGRpciBkaXIzCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtcmF3Xy1yX2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXBhdGNoLXdpdGgtcmF3Xy1yX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU5MGRjNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfLXJfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDM2IEBACiskIGdpdCBkaWZmIC0tcGF0Y2gtd2l0aC1yYXcgLXIgaW5pdGlhbC4uc2lkZQorOjEwMDY0NCAxMDA2NDQgMzVkMjQyYi4uLiA3Mjg5ZTM1Li4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMy4uLiBmNDYxNWRhLi4uIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gNzI4OWUzNS4uLiBBCWZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1yYXdfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjFkNWRjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1wYXRjaC13aXRoLXJhd19pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzYgQEAKKyQgZ2l0IGRpZmYgLS1wYXRjaC13aXRoLXJhdyBpbml0aWFsLi5zaWRlCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiLi4uIDcyODllMzUuLi4gTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzLi4uIGY0NjE1ZGEuLi4gTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiA3Mjg5ZTM1Li4uIEEJZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1wYXRjaC13aXRoLXN0YXRfLXJfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0Xy1yX2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU4ZDFlYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0Xy1yX2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzNyBAQAorJCBnaXQgZGlmZiAtLXBhdGNoLXdpdGgtc3RhdCAtciBpbml0aWFsLi5zaWRlCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1wYXRjaC13aXRoLXN0YXRfaW5pdGlhbC4uc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyNGU2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy0tcGF0Y2gtd2l0aC1zdGF0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSwzNyBAQAorJCBnaXQgZGlmZiAtLXBhdGNoLXdpdGgtc3RhdCBpbml0aWFsLi5zaWRlCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfLS1zdGF0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl8tLXN0YXRfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzc0MWUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLS1zdGF0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSw2IEBACiskIGdpdCBkaWZmIC0tc3RhdCBpbml0aWFsLi5zaWRlCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmXy1yXy0tc3RhdF9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmZfLXJfLS1zdGF0X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ1MTRmNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmXy1yXy0tc3RhdF9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsNiBAQAorJCBnaXQgZGlmZiAtciAtLXN0YXQgaW5pdGlhbC4uc2lkZQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZGlmZl8tcl9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmRpZmZfLXJfaW5pdGlhbC4uc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmIyZmUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmRpZmZfLXJfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDMyIEBACiskIGdpdCBkaWZmIC1yIGluaXRpYWwuLnNpZGUKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5kaWZmX2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZGlmZl9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YWRhZjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZGlmZl9pbml0aWFsLi5zaWRlCkBAIC0wLDAgKzEsMzIgQEAKKyQgZ2l0IGRpZmYgaW5pdGlhbC4uc2lkZQorZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmRpZmZfbWFzdGVyX21hc3Rlcl5fc2lkZSBiL3QvdDQwMTMvZGlmZi5kaWZmX21hc3Rlcl9tYXN0ZXJeX3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlYzljYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5kaWZmX21hc3Rlcl9tYXN0ZXJeX3NpZGUKQEAgLTAsMCArMSwyOSBAQAorJCBnaXQgZGlmZiBtYXN0ZXIgbWFzdGVyXiBzaWRlCitkaWZmIC0tY2MgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNjIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF8tLXN1ZmZpeD0uZGlmZl9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF8tLXN1ZmZpeD0uZGlmZl9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0N2NhMDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0Xy0tc3VmZml4PS5kaWZmX2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSw2MSBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tYXR0YWNoIC0tc3Rkb3V0IC0tc3VmZml4PS5kaWZmIGluaXRpYWwuLnNpZGUKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFNpZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TaWRlLmRpZmYiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iMDAwMS1TaWRlLmRpZmYiCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmZlZGMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIKQEAgLTAsMCArMSwxNzAgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBTZWNvbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDIvM10gVGhpcmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDItVGhpcmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBTaWRlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDMtU2lkZS5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIwMDAzLVNpZGUucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjM2NkZTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KQEAgLTAsMCArMSwxMTAgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWF0dGFjaCAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvMl0gU2Vjb25kCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzJdIFRoaXJkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWF0dGFjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MTdiZDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tYXR0YWNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSw2MSBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tYXR0YWNoIC0tc3Rkb3V0IGluaXRpYWwuLnNpZGUKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFNpZGUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TaWRlLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IjAwMDEtU2lkZS5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tbnVtYmVyZWQtZmlsZXNfaW5pdGlhbC4ubWFzdGVyIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF8tLW51bWJlcmVkLWZpbGVzX2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM0ZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF8tLW51bWJlcmVkLWZpbGVzX2luaXRpYWwuLm1hc3RlcgpAQCAtMCwwICsxLDE3MCBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0taW5saW5lIC0tc3Rkb3V0IC0tbnVtYmVyZWQtZmlsZXMgaW5pdGlhbC4ubWFzdGVyCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvM10gU2Vjb25kCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjEiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIxIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIFRoaXJkCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMiIKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9IjIiCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBTaWRlCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjMiCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIzIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRV9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0VfaW5pdGlhbC4ubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3Njc3YzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0Xy0tc3ViamVjdC1wcmVmaXg9VEVTVENBU0VfaW5pdGlhbC4ubWFzdGVyCkBAIC0wLDAgKzEsMTcwIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgLS1zdWJqZWN0LXByZWZpeD1URVNUQ0FTRSBpbml0aWFsLi5tYXN0ZXIKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbVEVTVENBU0UgMS8zXSBTZWNvbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbVEVTVENBU0UgMi8zXSBUaGlyZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDItVGhpcmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1RFU1RDQVNFIDMvM10gU2lkZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAzLVNpZGUucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAzLVNpZGUucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjNlMzRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXIKQEAgLTAsMCArMSwxNzAgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXIKK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBTZWNvbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBUaGlyZAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDItVGhpcmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMzowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDMvM10gU2lkZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAzLVNpZGUucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAzLVNpZGUucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLWlubGluZV8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxM2Y4YTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KQEAgLTAsMCArMSwxMTAgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvMl0gU2Vjb25kCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbiIKKworVGhpcyBpcyBhIG11bHRpLXBhcnQgbWVzc2FnZSBpbiBNSU1FIGZvcm1hdC4KKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtODsgZm9ybWF0PWZpeGVkCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3gtcGF0Y2g7IG5hbWU9IjAwMDEtU2Vjb25kLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDIvMl0gVGhpcmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAyLVRoaXJkLnBhdGNoIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iMDAwMi1UaGlyZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4tLQorCisKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyXl4gYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl5eCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZWM1NTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl5eCkBAIC0wLDAgKzEsNjIgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLWlubGluZSAtLXN0ZG91dCBpbml0aWFsLi5tYXN0ZXJeXgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtESUZGRVJFTlRfUFJFRklYXSBTZWNvbmQKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ii0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uIgorCitUaGlzIGlzIGEgbXVsdGktcGFydCBtZXNzYWdlIGluIE1JTUUgZm9ybWF0LgorLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zml4ZWQKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQveC1wYXRjaDsgbmFtZT0iMDAwMS1TZWNvbmQucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAxLVNlY29uZC5wYXRjaCIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uLS0KKworCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0taW5saW5lXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhNjc2MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1pbmxpbmVfLS1zdGRvdXRfaW5pdGlhbC4uc2lkZQpAQCAtMCwwICsxLDYxIEBACiskIGdpdCBmb3JtYXQtcGF0Y2ggLS1pbmxpbmUgLS1zdGRvdXQgaW5pdGlhbC4uc2lkZQorRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSF0gU2lkZQorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4iCisKK1RoaXMgaXMgYSBtdWx0aS1wYXJ0IG1lc3NhZ2UgaW4gTUlNRSBmb3JtYXQuCistLS0tLS0tLS0tLS0tLWctaS10LS12LWUtci1zLWktby1uCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1maXhlZAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCisKKy0tLS0tLS0tLS0tLS0tZy1pLXQtLXYtZS1yLXMtaS1vLW4KK0NvbnRlbnQtVHlwZTogdGV4dC94LXBhdGNoOyBuYW1lPSIwMDAxLVNpZGUucGF0Y2giCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CitDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIwMDAxLVNpZGUucGF0Y2giCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworLS0tLS0tLS0tLS0tLS1nLWktdC0tdi1lLXItcy1pLW8tbi0tCisKKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLWNvdmVyLWxldHRlcl8tbl9pbml0aWFsLi5tYXN0ZXJeIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLWNvdmVyLWxldHRlcl8tbl9pbml0aWFsLi5tYXN0ZXJeCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NGQ5NjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tY292ZXItbGV0dGVyXy1uX2luaXRpYWwuLm1hc3Rlcl4KQEAgLTAsMCArMSwxMDMgQEAKKyQgZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtbiBpbml0aWFsLi5tYXN0ZXJeCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjA2OjAwICswMDAwCitTdWJqZWN0OiBbRElGRkVSRU5UX1BSRUZJWCAwLzJdICoqKiBTVUJKRUNUIEhFUkUgKioqCisKKyoqKiBCTFVSQiBIRVJFICoqKgorCitBIFUgVGhvciAoMik6CisgIFNlY29uZAorICBUaGlyZAorCisgZGlyL3N1YiB8IDQgKysrKworIGZpbGUwICAgfCAzICsrKworIGZpbGUxICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDQgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW0RJRkZFUkVOVF9QUkVGSVggMS8yXSBTZWNvbmQKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW0RJRkZFUkVOVF9QUkVGSVggMi8yXSBUaGlyZAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tbm8tbnVtYmVyZWRfaW5pdGlhbC4ubWFzdGVyIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLW5vLW51bWJlcmVkX2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmMyODdhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLW5vLW51bWJlcmVkX2luaXRpYWwuLm1hc3RlcgpAQCAtMCwwICsxLDEyNyBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbm8tbnVtYmVyZWQgaW5pdGlhbC4ubWFzdGVyCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBTZWNvbmQKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIXSBUaGlyZAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCisKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFNpZGUKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0Xy0tbnVtYmVyZWRfaW5pdGlhbC4ubWFzdGVyIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLW51bWJlcmVkX2luaXRpYWwuLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjhmNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF8tLW51bWJlcmVkX2luaXRpYWwuLm1hc3RlcgpAQCAtMCwwICsxLDEyNyBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tbnVtYmVyZWQgaW5pdGlhbC4ubWFzdGVyCitGcm9tIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMTowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDEvM10gU2Vjb25kCisKK1RoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKworRnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDI6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIFRoaXJkCisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCistLSAKK2ctaS10LS12LWUtci1zLWktby1uCisKKworRnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDM6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAzLzNdIFNpZGUKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlciBiL3QvdDQwMTMvZGlmZi5mb3JtYXQtcGF0Y2hfLS1zdGRvdXRfaW5pdGlhbC4ubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMDM1MmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3RlcgpAQCAtMCwwICsxLDEyNyBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlcgorRnJvbSAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IE1vbiwgMjYgSnVuIDIwMDYgMDA6MDE6MDAgKzAwMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzNdIFNlY29uZAorCitUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCisKK0Zyb20gOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAyOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMi8zXSBUaGlyZAorCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCisKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBTaWRlCisKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5tYXN0ZXJeCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZTQ1NGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLm1hc3Rlcl4KQEAgLTAsMCArMSw4MSBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3Rlcl4KK0Zyb20gMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAxOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBTZWNvbmQKKworVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworCitGcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAyNiBKdW4gMjAwNiAwMDowMjowMCArMDAwMAorU3ViamVjdDogW1BBVENIIDIvMl0gVGhpcmQKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKy0tIAorZy1pLXQtLXYtZS1yLXMtaS1vLW4KKworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlIGIvdC90NDAxMy9kaWZmLmZvcm1hdC1wYXRjaF8tLXN0ZG91dF9pbml0aWFsLi5zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZDUyZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuZm9ybWF0LXBhdGNoXy0tc3Rkb3V0X2luaXRpYWwuLnNpZGUKQEAgLTAsMCArMSw0NyBAQAorJCBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGluaXRpYWwuLnNpZGUKK0Zyb20gYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBNb24sIDI2IEp1biAyMDA2IDAwOjAzOjAwICswMDAwCitTdWJqZWN0OiBbUEFUQ0hdIFNpZGUKKworLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorLS0gCitnLWktdC0tdi1lLXItcy1pLW8tbgorCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGU9ZnVsbF8tLWFsbCBiL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZT1mdWxsXy0tYWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNDViMmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tZGVjb3JhdGU9ZnVsbF8tLWFsbApAQCAtMCwwICsxLDQwIEBACiskIGdpdCBsb2cgLS1kZWNvcmF0ZT1mdWxsIC0tYWxsCitjb21taXQgY2Q0ZTcyZmQ5NmZhZWQzZjBiYTk0OWRjNDI5Njc0MzAzNzRlMjI5MCAocmVmcy9oZWFkcy9yZWFycmFuZ2UpCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDY6MDAgMjAwNiArMDAwMAorCisgICAgUmVhcnJhbmdlZCBsaW5lcyBpbiBkaXIvc3ViCisKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChIRUFEIC0+IHJlZnMvaGVhZHMvbWFzdGVyKQorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgKHJlZnMvaGVhZHMvc2lkZSkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSAocmVmcy9oZWFkcy9pbml0aWFsKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZV8tLWFsbCBiL3QvdDQwMTMvZGlmZi5sb2dfLS1kZWNvcmF0ZV8tLWFsbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWExNmE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLWRlY29yYXRlXy0tYWxsCkBAIC0wLDAgKzEsNDAgQEAKKyQgZ2l0IGxvZyAtLWRlY29yYXRlIC0tYWxsCitjb21taXQgY2Q0ZTcyZmQ5NmZhZWQzZjBiYTk0OWRjNDI5Njc0MzAzNzRlMjI5MCAocmVhcnJhbmdlKQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA2OjAwIDIwMDYgKzAwMDAKKworICAgIFJlYXJyYW5nZWQgbGluZXMgaW4gZGlyL3N1YgorCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCAoSEVBRCAtPiBtYXN0ZXIpCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YSAoc2lkZSkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYSAoaW5pdGlhbCkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXJfLS1fZGlyXyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3Rlcl8tLV9kaXJfCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOGYxNDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXJfLS1fZGlyXwpAQCAtMCwwICsxLDc0IEBACiskIGdpdCBsb2cgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlciAtLSBkaXIvCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0MjVjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyCkBAIC0wLDAgKzEsMTI5IEBACiskIGdpdCBsb2cgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXJfLS1fZGlyXwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTIwN2NhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXJfLS1fZGlyXwpAQCAtMCwwICsxLDc0IEBACiskIGdpdCBsb2cgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyIC0tIGRpci8KK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYzFlOGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLWNjXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSwxOTkgQEAKKyQgZ2l0IGxvZyAtLXJvb3QgLS1jYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmZjMDlkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDE2NyBAQAorJCBnaXQgbG9nIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhYTk4MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlcgpAQCAtMCwwICsxLDE2MSBAQAorJCBnaXQgbG9nIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLWNfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTlkODVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfLWNfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDE5OSBAQAorJCBnaXQgbG9nIC0tcm9vdCAtYyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWNvbWJpbmVkIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jb21iaW5lZCBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTEKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisgZGVsZXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzICsrKworIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGRpci9zdWIKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTAKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF8tcF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyYzMzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLS1yb290Xy1wX21hc3RlcgpAQCAtMCwwICsxLDE0MiBAQAorJCBnaXQgbG9nIC0tcm9vdCAtcCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfbWFzdGVyIGIvdC90NDAxMy9kaWZmLmxvZ18tLXJvb3RfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZjQ2MTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy0tcm9vdF9tYXN0ZXIKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgbG9nIC0tcm9vdCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tR0ZfLXBfLS1waWNrYXhlLWFsbF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy1HRl8tcF8tLXBpY2theGUtYWxsX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzZmODgwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tR0ZfLXBfLS1waWNrYXhlLWFsbF9tYXN0ZXIKQEAgLTAsMCArMSwyNyBAQAorJCBnaXQgbG9nIC1HRiAtcCAtLXBpY2theGUtYWxsIG1hc3RlcgorY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLUdGXy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLUdGXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDkzZjJjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tR0ZfLXBfbWFzdGVyCkBAIC0wLDAgKzEsMTggQEAKKyQgZ2l0IGxvZyAtR0YgLXAgbWFzdGVyCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLUdGX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLUdGX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzY3MDhkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tR0ZfbWFzdGVyCkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgbG9nIC1HRiBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLVNGXy1wX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTMyNDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfLXBfbWFzdGVyCkBAIC0wLDAgKzEsMTggQEAKKyQgZ2l0IGxvZyAtU0YgLXAgbWFzdGVyCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTU5OWYyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyCkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgbG9nIC1TRiBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0wIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFmYzZjOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0wCkBAIC0wLDAgKzEsMiBAQAorJCBnaXQgbG9nIC1TRiBtYXN0ZXIgLS1tYXgtY291bnQ9MAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTEgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTgxYTAzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tU0ZfbWFzdGVyXy0tbWF4LWNvdW50PTEKQEAgLTAsMCArMSw3IEBACiskIGdpdCBsb2cgLVNGIG1hc3RlciAtLW1heC1jb3VudD0xCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MiBiL3QvdDQwMTMvZGlmZi5sb2dfLVNGX21hc3Rlcl8tLW1heC1jb3VudD0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YzU1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1TRl9tYXN0ZXJfLS1tYXgtY291bnQ9MgpAQCAtMCwwICsxLDcgQEAKKyQgZ2l0IGxvZyAtU0YgbWFzdGVyIC0tbWF4LWNvdW50PTIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5sb2dfLVNfRl9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy1TX0ZfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGQyYjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1TX0ZfbWFzdGVyCkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgbG9nIC1TIEYgbWFzdGVyCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1tXy1wXy0tZmlyc3QtcGFyZW50X21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLW1fLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMDA3M2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1tXy1wXy0tZmlyc3QtcGFyZW50X21hc3RlcgpAQCAtMCwwICsxLDEwMCBAQAorJCBnaXQgbG9nIC1tIC1wIC0tZmlyc3QtcGFyZW50IG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggY2VhZDMyZS4uOTkyOTEzYyAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC00LDMgKzQsNSBAQCBDCisgRAorIEUKKyBGCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCBiNDE0MTA4Li4xMGE4YTlmIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtNCwzICs0LDYgQEAKKyA0CisgNQorIDYKKytBCisrQgorK0MKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tbV8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy1tXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2E2MmEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tbV8tcF9tYXN0ZXIKQEAgLTAsMCArMSwyMDAgQEAKKyQgZ2l0IGxvZyAtbSAtcCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChmcm9tIDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzApCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IGNlYWQzMmUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtNCwzICs0LDUgQEAgQworIEQKKyBFCisgRgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggYjQxNDEwOC4uMTBhOGE5ZiAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTQsMyArNCw2IEBACisgNAorIDUKKyA2CisrQQorK0IKKytDCisKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0IChmcm9tIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEpCitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDcyODllMzUuLjk5MjkxM2MgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSw0ICsxLDggQEAKKyBBCisgQgorK0MKKytECisrRQorK0YKKyAxCisgMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGY0NjE1ZGEuLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDYgKzEsOSBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorIEEKKyBCCisgQworZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA3Mjg5ZTM1Li4wMDAwMDAwCistLS0gYS9maWxlMworKysrIC9kZXYvbnVsbAorQEAgLTEsNCArMCwwIEBACistQQorLUIKKy0xCistMgorCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nXy1wXy0tZmlyc3QtcGFyZW50X21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfLXBfLS1maXJzdC1wYXJlbnRfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYzg5NmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nXy1wXy0tZmlyc3QtcGFyZW50X21hc3RlcgpAQCAtMCwwICsxLDc4IEBACiskIGdpdCBsb2cgLXAgLS1maXJzdC1wYXJlbnQgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLmxvZ18tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYubG9nXy1wX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjEzMjZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLmxvZ18tcF9tYXN0ZXIKQEAgLTAsMCArMSwxMTUgQEAKKyQgZ2l0IGxvZyAtcCBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYubG9nX21hc3RlciBiL3QvdDQwMTMvZGlmZi5sb2dfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZjZjZTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYubG9nX21hc3RlcgpAQCAtMCwwICsxLDM0IEBACiskIGdpdCBsb2cgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5yZXYtbGlzdF8tLWNoaWxkcmVuX0hFQUQgYi90L3Q0MDEzL2RpZmYucmV2LWxpc3RfLS1jaGlsZHJlbl9IRUFECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZjE3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYucmV2LWxpc3RfLS1jaGlsZHJlbl9IRUFECkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgcmV2LWxpc3QgLS1jaGlsZHJlbiBIRUFECis1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhIDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKKzlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCis0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhIDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnJldi1saXN0Xy0tcGFyZW50c19IRUFEIGIvdC90NDAxMy9kaWZmLnJldi1saXN0Xy0tcGFyZW50c19IRUFECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZDJhODAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYucmV2LWxpc3RfLS1wYXJlbnRzX0hFQUQKQEAgLTAsMCArMSw3IEBACiskIGdpdCByZXYtbGlzdCAtLXBhcmVudHMgSEVBRAorNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwIGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK2M3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CisxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKzQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93Xy0tZmlyc3QtcGFyZW50X21hc3RlciBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tZmlyc3QtcGFyZW50X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGNiZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfLS1maXJzdC1wYXJlbnRfbWFzdGVyCkBAIC0wLDAgKzEsMzAgQEAKKyQgZ2l0IHNob3cgLS1maXJzdC1wYXJlbnQgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCBjZWFkMzJlLi45OTI5MTNjIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTQsMyArNCw1IEBAIEMKKyBECisgRQorIEYKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGI0MTQxMDguLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC00LDMgKzQsNiBAQAorIDQKKyA1CisgNgorK0EKKytCCisrQworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLS1wYXRjaC13aXRoLXJhd19zaWRlIGIvdC90NDAxMy9kaWZmLnNob3dfLS1wYXRjaC13aXRoLXJhd19zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMWI0NmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtcmF3X3NpZGUKQEAgLTAsMCArMSw0MiBAQAorJCBnaXQgc2hvdyAtLXBhdGNoLXdpdGgtcmF3IHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiLi4uIDcyODllMzUuLi4gTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzLi4uIGY0NjE1ZGEuLi4gTQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiA3Mjg5ZTM1Li4uIEEJZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X3NpZGUgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWE0NzRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X3NpZGUKQEAgLTAsMCArMSw0NCBAQAorJCBnaXQgc2hvdyAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMworCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYuc2hvd18tLXBhdGNoLXdpdGgtc3RhdF9zaWRlIGIvdC90NDAxMy9kaWZmLnNob3dfLS1wYXRjaC13aXRoLXN0YXRfc2lkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzRlOTliCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfLS1wYXRjaC13aXRoLXN0YXRfc2lkZQpAQCAtMCwwICsxLDQzIEBACiskIGdpdCBzaG93IC0tcGF0Y2gtd2l0aC1zdGF0IHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLS1yb290X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXJvb3RfaW5pdGlhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzg5MTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfLS1yb290X2luaXRpYWwKQEAgLTAsMCArMSwzNCBAQAorJCBnaXQgc2hvdyAtLXJvb3QgaW5pdGlhbAorY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLnNob3dfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlIGIvdC90NDAxMy9kaWZmLnNob3dfLS1zdGF0Xy0tc3VtbWFyeV9zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MTQ5MmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd18tLXN0YXRfLS1zdW1tYXJ5X3NpZGUKQEAgLTAsMCArMSwxMyBAQAorJCBnaXQgc2hvdyAtLXN0YXQgLS1zdW1tYXJ5IHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93Xy0tc3RhdF9zaWRlIGIvdC90NDAxMy9kaWZmLnNob3dfLS1zdGF0X3NpZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNzEyNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi5zaG93Xy0tc3RhdF9zaWRlCkBAIC0wLDAgKzEsMTIgQEAKKyQgZ2l0IHNob3cgLS1zdGF0IHNpZGUKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93Xy1jX21hc3RlciBiL3QvdDQwMTMvZGlmZi5zaG93Xy1jX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWFiYThkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfLWNfbWFzdGVyCkBAIC0wLDAgKzEsMzYgQEAKKyQgZ2l0IHNob3cgLWMgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworZGlmZiAtLWNvbWJpbmVkIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jb21iaW5lZCBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93Xy1tX21hc3RlciBiL3QvdDQwMTMvZGlmZi5zaG93Xy1tX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWEyZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfLW1fbWFzdGVyCkBAIC0wLDAgKzEsOTMgQEAKKyQgZ2l0IHNob3cgLW0gbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCAoZnJvbSA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwKQorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCBjZWFkMzJlLi45OTI5MTNjIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTQsMyArNCw1IEBAIEMKKyBECisgRQorIEYKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IGI0MTQxMDguLjEwYThhOWYgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC00LDMgKzQsNiBAQAorIDQKKyA1CisgNgorK0EKKytCCisrQworCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NCAoZnJvbSBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhKQorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA3Mjg5ZTM1Li45OTI5MTNjIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsNCArMSw4IEBACisgQQorIEIKKytDCisrRAorK0UKKytGCisgMQorIDIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCBmNDYxNWRhLi4xMGE4YTlmIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSw2ICsxLDkgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKKyBBCisgQgorIEMKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggNzI4OWUzNS4uMDAwMDAwMAorLS0tIGEvZmlsZTMKKysrKyAvZGV2L251bGwKK0BAIC0xLDQgKzAsMCBAQAorLUEKKy1CCistMQorLTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93X2luaXRpYWwgYi90L3Q0MDEzL2RpZmYuc2hvd19pbml0aWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNDA2NmEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd19pbml0aWFsCkBAIC0wLDAgKzEsNyBAQAorJCBnaXQgc2hvdyBpbml0aWFsCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93X21hc3RlciBiL3QvdDQwMTMvZGlmZi5zaG93X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjA4Y2UwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLnNob3dfbWFzdGVyCkBAIC0wLDAgKzEsMzYgQEAKKyQgZ2l0IHNob3cgbWFzdGVyCitjb21taXQgNTlkMzE0YWQ2ZjM1NmRkMDg2MDFhNGNkNWU1MzAzODFkYTNlM2M2NAorTWVyZ2U6IDlhNmQ0OTQgYzdhMmFiOQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjA0OjAwIDIwMDYgKzAwMDAKKworICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKKworZGlmZiAtLWNjIGRpci9zdWIKK2luZGV4IGNlYWQzMmUsNzI4OWUzNS4uOTkyOTEzYworLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEBAIC0xLDYgLTEsNCArMSw4IEBAQAorICBBCisgIEIKKyArQworICtECisgK0UKKyArRgorKyAxCisrIDIKK2RpZmYgLS1jYyBmaWxlMAoraW5kZXggYjQxNDEwOCxmNDYxNWRhLi4xMGE4YTlmCistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAQCAtMSw2IC0xLDYgKzEsOSBAQEAKKyAgMQorICAyCisgIDMKKyArNAorICs1CisgKzYKKysgQQorKyBCCisrIEMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi5zaG93X3NpZGUgYi90L3Q0MDEzL2RpZmYuc2hvd19zaWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMGEwNzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYuc2hvd19zaWRlCkBAIC0wLDAgKzEsMzggQEAKKyQgZ2l0IHNob3cgc2lkZQorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyXy0tX2Rpcl8gYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3Rlcl8tLV9kaXJfCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjZhZjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3Rlcl8tLV9kaXJfCkBAIC0wLDAgKzEsNjEgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIgLS0gZGlyLworY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFjNDMxYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKQEAgLTAsMCArMSwxMTYgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC0tcGF0Y2gtd2l0aC1zdGF0IG1hc3RlcgorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUzICAgfCA0ICsrKysKKyAzIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTEgICB8IDMgKysrCisgMiBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXJfLS1fZGlyXyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXJfLS1fZGlyXwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzBjMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcGF0Y2gtd2l0aC1zdGF0X21hc3Rlcl8tLV9kaXJfCkBAIC0wLDAgKzEsNjEgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC0tcGF0Y2gtd2l0aC1zdGF0IG1hc3RlciAtLSBkaXIvCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKy0tLQorIGRpci9zdWIgfCAyICsrCisgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1jY18tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYWFlNzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tY2NfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDE5OSBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1yb290IC0tY2MgLS1wYXRjaC13aXRoLXN0YXQgLS1zdW1tYXJ5IG1hc3RlcgorY29tbWl0IDU5ZDMxNGFkNmYzNTZkZDA4NjAxYTRjZDVlNTMwMzgxZGEzZTNjNjQKK01lcmdlOiA5YTZkNDk0IGM3YTJhYjkKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowNDowMCAyMDA2ICswMDAwCisKKyAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCisKKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1jYyBkaXIvc3ViCitpbmRleCBjZWFkMzJlLDcyODllMzUuLjk5MjkxM2MKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAQCAtMSw2IC0xLDQgKzEsOCBAQEAKKyAgQQorICBCCisgK0MKKyArRAorICtFCisgK0YKKysgMQorKyAyCitkaWZmIC0tY2MgZmlsZTAKK2luZGV4IGI0MTQxMDgsZjQ2MTVkYS4uMTBhOGE5ZgorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQEAgLTEsNiAtMSw2ICsxLDkgQEBACisgIDEKKyAgMgorICAzCisgKzQKKyArNQorICs2CisrIEEKKysgQgorKyBDCisKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMyAgIHwgNCArKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZmlsZTMKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUxICAgfCAzICsrKworIDIgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUxCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCistLS0KKyBkaXIvc3ViIHwgMiArKworIGZpbGUwICAgfCAzICsrKworIGZpbGUyICAgfCAzIC0tLQorIDMgZmlsZXMgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjg0MjJkNDAgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorK0MKKytECitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uYjQxNDEwOCAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrNAorKzUKKys2CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMWU3OWMzLi4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEsMyArMCwwIEBACistMQorLTIKKy0zCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyArKysKKyAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBkaXIvc3ViCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUwCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUyCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF8tLXN1bW1hcnlfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTBlNTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKQEAgLTAsMCArMSwxNjAgQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC0tcm9vdCAtLXBhdGNoLXdpdGgtc3RhdCAtLXN1bW1hcnkgbWFzdGVyCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tLXBhdGNoLXdpdGgtc3RhdF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2Y2M5MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLS1wYXRjaC13aXRoLXN0YXRfbWFzdGVyCkBAIC0wLDAgKzEsMTU0IEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXJvb3QgLS1wYXRjaC13aXRoLXN0YXQgbWFzdGVyCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMzVkMjQyYgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3N1YgorQEAgLTAsMCArMSwyIEBACisrQQorK0IKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTAKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMgorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCiskCmRpZmYgLS1naXQgYS90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy1jXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290Xy1jXy0tcGF0Y2gtd2l0aC1zdGF0Xy0tc3VtbWFyeV9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFkMzJiZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLWNfLS1wYXRjaC13aXRoLXN0YXRfLS1zdW1tYXJ5X21hc3RlcgpAQCAtMCwwICsxLDE5OSBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1yb290IC1jIC0tcGF0Y2gtd2l0aC1zdGF0IC0tc3VtbWFyeSBtYXN0ZXIKK2NvbW1pdCA1OWQzMTRhZDZmMzU2ZGQwODYwMWE0Y2Q1ZTUzMDM4MWRhM2UzYzY0CitNZXJnZTogOWE2ZDQ5NCBjN2EyYWI5CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDQ6MDAgMjAwNiArMDAwMAorCisgICAgTWVyZ2UgYnJhbmNoICdzaWRlJworCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tY29tYmluZWQgZGlyL3N1YgoraW5kZXggY2VhZDMyZSw3Mjg5ZTM1Li45OTI5MTNjCistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQEAgLTEsNiAtMSw0ICsxLDggQEBACisgIEEKKyAgQgorICtDCisgK0QKKyArRQorICtGCisrIDEKKysgMgorZGlmZiAtLWNvbWJpbmVkIGZpbGUwCitpbmRleCBiNDE0MTA4LGY0NjE1ZGEuLjEwYThhOWYKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEBAIC0xLDYgLTEsNiArMSw5IEBAQAorICAxCisgIDIKKyAgMworICs0CisgKzUKKyArNgorKyBBCisrIEIKKysgQworCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTMgICB8IDQgKysrKworIDMgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGZpbGUzCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uNzI4OWUzNSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrMQorKzIKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5mNDYxNWRhIDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKytBCisrQgorK0MKK2RpZmYgLS1naXQgYS9maWxlMyBiL2ZpbGUzCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzI4OWUzNQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTMKK0BAIC0wLDAgKzEsNCBAQAorK0EKKytCCisrMQorKzIKKworY29tbWl0IDlhNmQ0OTQ5YjZiNzY5NTZkOWQ1ZTI2ZjI3OTFlYzJjZWZmNWZkYzAKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMjowMCAyMDA2ICswMDAwCisKKyAgICBUaGlyZAorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMSAgIHwgMyArKysKKyAyIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDg0MjJkNDAuLmNlYWQzMmUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMiwzICsyLDUgQEAgQQorIEIKKyBDCisgRAorK0UKKytGCitkaWZmIC0tZ2l0IGEvZmlsZTEgYi9maWxlMQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmIxZTY3MjIKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUxCitAQCAtMCwwICsxLDMgQEAKKytBCisrQgorK0MKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorLS0tCisgZGlyL3N1YiB8IDIgKysKKyBmaWxlMCAgIHwgMyArKysKKyBmaWxlMiAgIHwgMyAtLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKyBkZWxldGUgbW9kZSAxMDA2NDQgZmlsZTIKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworCitjb21taXQgNDQ0YWM1NTNhYzc2MTJjYzg4OTY5MDMxYjAyYjM3NjdmYjhhMzUzYQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAwOjAwIDIwMDYgKzAwMDAKKworICAgIEluaXRpYWwKKy0tLQorIGRpci9zdWIgfCAyICsrCisgZmlsZTAgICB8IDMgKysrCisgZmlsZTIgICB8IDMgKysrCisgMyBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgZGlyL3N1YgorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMAorIGNyZWF0ZSBtb2RlIDEwMDY0NCBmaWxlMgorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4zNWQyNDJiCistLS0gL2Rldi9udWxsCisrKysgYi9kaXIvc3ViCitAQCAtMCwwICsxLDIgQEAKKytBCisrQgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi4wMWU3OWMzCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMAorQEAgLTAsMCArMSwzIEBACisrMQorKzIKKyszCitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUyCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLXBfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF8tcF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmMWYwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tLXJvb3RfLXBfbWFzdGVyCkBAIC0wLDAgKzEsMTM1IEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtLXJvb3QgLXAgbWFzdGVyCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi43Mjg5ZTM1IDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKysxCisrMgorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmY0NjE1ZGEgMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworK0EKKytCCisrQworZGlmZiAtLWdpdCBhL2ZpbGUzIGIvZmlsZTMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi43Mjg5ZTM1CistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMworQEAgLTAsMCArMSw0IEBACisrQQorK0IKKysxCisrMgorCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggODQyMmQ0MC4uY2VhZDMyZSAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0yLDMgKzIsNSBAQCBBCisgQgorIEMKKyBECisrRQorK0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjFlNjcyMgorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTEKK0BAIC0wLDAgKzEsMyBAQAorK0EKKytCCisrQworCitjb21taXQgMWJkZTRhZTVmMzZjOGQ5YWJlM2EwZmNlMGM2YWFiM2M0YTEyZmU0NAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAxOjAwIDIwMDYgKzAwMDAKKworICAgIFNlY29uZAorICAgIAorICAgIFRoaXMgaXMgdGhlIHNlY29uZCBjb21taXQuCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgoraW5kZXggMzVkMjQyYi4uODQyMmQ0MCAxMDA2NDQKKy0tLSBhL2Rpci9zdWIKKysrKyBiL2Rpci9zdWIKK0BAIC0xLDIgKzEsNCBAQAorIEEKKyBCCisrQworK0QKK2RpZmYgLS1naXQgYS9maWxlMCBiL2ZpbGUwCitpbmRleCAwMWU3OWMzLi5iNDE0MTA4IDEwMDY0NAorLS0tIGEvZmlsZTAKKysrKyBiL2ZpbGUwCitAQCAtMSwzICsxLDYgQEAKKyAxCisgMgorIDMKKys0CisrNQorKzYKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAxZTc5YzMuLjAwMDAwMDAKKy0tLSBhL2ZpbGUyCisrKysgL2Rldi9udWxsCitAQCAtMSwzICswLDAgQEAKKy0xCistMgorLTMKKworY29tbWl0IDQ0NGFjNTUzYWM3NjEyY2M4ODk2OTAzMWIwMmIzNzY3ZmI4YTM1M2EKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMDowMCAyMDA2ICswMDAwCisKKyAgICBJbml0aWFsCisKK2RpZmYgLS1naXQgYS9kaXIvc3ViIGIvZGlyL3N1YgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjM1ZDI0MmIKKy0tLSAvZGV2L251bGwKKysrKyBiL2Rpci9zdWIKK0BAIC0wLDAgKzEsMiBAQAorK0EKKytCCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjAxZTc5YzMKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUwCitAQCAtMCwwICsxLDMgQEAKKysxCisrMgorKzMKK2RpZmYgLS1naXQgYS9maWxlMiBiL2ZpbGUyCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMDFlNzljMworLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTIKK0BAIC0wLDAgKzEsMyBAQAorKzEKKysyCisrMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLS1yb290X21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDA1Y2I2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy0tcm9vdF9tYXN0ZXIKQEAgLTAsMCArMSw0MiBAQAorJCBnaXQgd2hhdGNoYW5nZWQgLS1yb290IG1hc3RlcgorY29tbWl0IGM3YTJhYjllOGVhYzdiMTE3NDQyYTYwN2Q1YTliMzk1MGFlMzRkNWEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMzowMCAyMDA2ICswMDAwCisKKyAgICBTaWRlCisKKzoxMDA2NDQgMTAwNjQ0IDM1ZDI0MmIuLi4gNzI4OWUzNS4uLiBNCWRpci9zdWIKKzoxMDA2NDQgMTAwNjQ0IDAxZTc5YzMuLi4gZjQ2MTVkYS4uLiBNCWZpbGUwCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDcyODllMzUuLi4gQQlmaWxlMworCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKKzoxMDA2NDQgMTAwNjQ0IDg0MjJkNDAuLi4gY2VhZDMyZS4uLiBNCWRpci9zdWIKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gYjFlNjcyMi4uLiBBCWZpbGUxCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworOjEwMDY0NCAxMDA2NDQgMzVkMjQyYi4uLiA4NDIyZDQwLi4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMy4uLiBiNDE0MTA4Li4uIE0JZmlsZTAKKzoxMDA2NDQgMDAwMDAwIDAxZTc5YzMuLi4gMDAwMDAwMC4uLiBECWZpbGUyCisKK2NvbW1pdCA0NDRhYzU1M2FjNzYxMmNjODg5NjkwMzFiMDJiMzc2N2ZiOGEzNTNhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDA6MDAgMjAwNiArMDAwMAorCisgICAgSW5pdGlhbAorCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDM1ZDI0MmIuLi4gQQlkaXIvc3ViCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwLi4uIDAxZTc5YzMuLi4gQQlmaWxlMAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiAwMWU3OWMzLi4uIEEJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tU0ZfLXBfbWFzdGVyIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1TRl8tcF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM5ZGE4NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tU0ZfLXBfbWFzdGVyCkBAIC0wLDAgKzEsMTggQEAKKyQgZ2l0IHdoYXRjaGFuZ2VkIC1TRiAtcCBtYXN0ZXIKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1TRl9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLVNGX21hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDk5MzIxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkXy1TRl9tYXN0ZXIKQEAgLTAsMCArMSw5IEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtU0YgbWFzdGVyCitjb21taXQgOWE2ZDQ5NDliNmI3Njk1NmQ5ZDVlMjZmMjc5MWVjMmNlZmY1ZmRjMAorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAyOjAwIDIwMDYgKzAwMDAKKworICAgIFRoaXJkCisKKzoxMDA2NDQgMTAwNjQ0IDg0MjJkNDAuLi4gY2VhZDMyZS4uLiBNCWRpci9zdWIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF8tcF9tYXN0ZXIgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLXBfbWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxOGQ0MzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDEzL2RpZmYud2hhdGNoYW5nZWRfLXBfbWFzdGVyCkBAIC0wLDAgKzEsMTAyIEBACiskIGdpdCB3aGF0Y2hhbmdlZCAtcCBtYXN0ZXIKK2NvbW1pdCBjN2EyYWI5ZThlYWM3YjExNzQ0MmE2MDdkNWE5YjM5NTBhZTM0ZDVhCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDM6MDAgMjAwNiArMDAwMAorCisgICAgU2lkZQorCitkaWZmIC0tZ2l0IGEvZGlyL3N1YiBiL2Rpci9zdWIKK2luZGV4IDM1ZDI0MmIuLjcyODllMzUgMTAwNjQ0CistLS0gYS9kaXIvc3ViCisrKysgYi9kaXIvc3ViCitAQCAtMSwyICsxLDQgQEAKKyBBCisgQgorKzEKKysyCitkaWZmIC0tZ2l0IGEvZmlsZTAgYi9maWxlMAoraW5kZXggMDFlNzljMy4uZjQ2MTVkYSAxMDA2NDQKKy0tLSBhL2ZpbGUwCisrKysgYi9maWxlMAorQEAgLTEsMyArMSw2IEBACisgMQorIDIKKyAzCisrQQorK0IKKytDCitkaWZmIC0tZ2l0IGEvZmlsZTMgYi9maWxlMworbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjcyODllMzUKKy0tLSAvZGV2L251bGwKKysrKyBiL2ZpbGUzCitAQCAtMCwwICsxLDQgQEAKKytBCisrQgorKzEKKysyCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCA4NDIyZDQwLi5jZWFkMzJlIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTIsMyArMiw1IEBAIEEKKyBCCisgQworIEQKKytFCisrRgorZGlmZiAtLWdpdCBhL2ZpbGUxIGIvZmlsZTEKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5iMWU2NzIyCistLS0gL2Rldi9udWxsCisrKysgYi9maWxlMQorQEAgLTAsMCArMSwzIEBACisrQQorK0IKKytDCisKK2NvbW1pdCAxYmRlNGFlNWYzNmM4ZDlhYmUzYTBmY2UwYzZhYWIzYzRhMTJmZTQ0CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDE6MDAgMjAwNiArMDAwMAorCisgICAgU2Vjb25kCisgICAgCisgICAgVGhpcyBpcyB0aGUgc2Vjb25kIGNvbW1pdC4KKworZGlmZiAtLWdpdCBhL2Rpci9zdWIgYi9kaXIvc3ViCitpbmRleCAzNWQyNDJiLi44NDIyZDQwIDEwMDY0NAorLS0tIGEvZGlyL3N1YgorKysrIGIvZGlyL3N1YgorQEAgLTEsMiArMSw0IEBACisgQQorIEIKKytDCisrRAorZGlmZiAtLWdpdCBhL2ZpbGUwIGIvZmlsZTAKK2luZGV4IDAxZTc5YzMuLmI0MTQxMDggMTAwNjQ0CistLS0gYS9maWxlMAorKysrIGIvZmlsZTAKK0BAIC0xLDMgKzEsNiBAQAorIDEKKyAyCisgMworKzQKKys1CisrNgorZGlmZiAtLWdpdCBhL2ZpbGUyIGIvZmlsZTIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDFlNzljMy4uMDAwMDAwMAorLS0tIGEvZmlsZTIKKysrKyAvZGV2L251bGwKK0BAIC0xLDMgKzAsMCBAQAorLTEKKy0yCistMworJApkaWZmIC0tZ2l0IGEvdC90NDAxMy9kaWZmLndoYXRjaGFuZ2VkX21hc3RlciBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF9tYXN0ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QzYmNjMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTMvZGlmZi53aGF0Y2hhbmdlZF9tYXN0ZXIKQEAgLTAsMCArMSwzMiBAQAorJCBnaXQgd2hhdGNoYW5nZWQgbWFzdGVyCitjb21taXQgYzdhMmFiOWU4ZWFjN2IxMTc0NDJhNjA3ZDVhOWIzOTUwYWUzNGQ1YQorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogICBNb24gSnVuIDI2IDAwOjAzOjAwIDIwMDYgKzAwMDAKKworICAgIFNpZGUKKworOjEwMDY0NCAxMDA2NDQgMzVkMjQyYi4uLiA3Mjg5ZTM1Li4uIE0JZGlyL3N1YgorOjEwMDY0NCAxMDA2NDQgMDFlNzljMy4uLiBmNDYxNWRhLi4uIE0JZmlsZTAKKzowMDAwMDAgMTAwNjQ0IDAwMDAwMDAuLi4gNzI4OWUzNS4uLiBBCWZpbGUzCisKK2NvbW1pdCA5YTZkNDk0OWI2Yjc2OTU2ZDlkNWUyNmYyNzkxZWMyY2VmZjVmZGMwCitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiAgIE1vbiBKdW4gMjYgMDA6MDI6MDAgMjAwNiArMDAwMAorCisgICAgVGhpcmQKKworOjEwMDY0NCAxMDA2NDQgODQyMmQ0MC4uLiBjZWFkMzJlLi4uIE0JZGlyL3N1YgorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMC4uLiBiMWU2NzIyLi4uIEEJZmlsZTEKKworY29tbWl0IDFiZGU0YWU1ZjM2YzhkOWFiZTNhMGZjZTBjNmFhYjNjNGExMmZlNDQKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgTW9uIEp1biAyNiAwMDowMTowMCAyMDA2ICswMDAwCisKKyAgICBTZWNvbmQKKyAgICAKKyAgICBUaGlzIGlzIHRoZSBzZWNvbmQgY29tbWl0LgorCis6MTAwNjQ0IDEwMDY0NCAzNWQyNDJiLi4uIDg0MjJkNDAuLi4gTQlkaXIvc3ViCis6MTAwNjQ0IDEwMDY0NCAwMWU3OWMzLi4uIGI0MTQxMDguLi4gTQlmaWxlMAorOjEwMDY0NCAwMDAwMDAgMDFlNzljMy4uLiAwMDAwMDAwLi4uIEQJZmlsZTIKKyQKZGlmZiAtLWdpdCBhL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoIGIvdC90NDAxNC1mb3JtYXQtcGF0Y2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODkwZGIxMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTQtZm9ybWF0LXBhdGNoLnNoCkBAIC0wLDAgKzEsMTQzNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd2YXJpb3VzIGZvcm1hdC1wYXRjaCB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwOyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUgJiYKKwljYXQgZmlsZSA+ZWxpZiAmJgorCWdpdCBhZGQgZmlsZSBlbGlmICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKworCWZvciBpIGluIDEgMiA1IDYgQSBCIEMgNyA4IDkgMTA7IGRvIGVjaG8gIiRpIjsgZG9uZSA+ZmlsZSAmJgorCXRlc3RfY2htb2QgK3ggZWxpZiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNpZGUgY2hhbmdlcyAjMSIgJiYKKworCWZvciBpIGluIEQgRSBGOyBkbyBlY2hvICIkaSI7IGRvbmUgPj5maWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2lkZSBjaGFuZ2VzICMyIiAmJgorCWdpdCB0YWcgQzIgJiYKKworCWZvciBpIGluIDUgNiAxIDIgMyBBIDQgQiBDIDcgOCA5IDEwIEQgRSBGOyBkbyBlY2hvICIkaSI7IGRvbmUgPmZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIGNoYW5nZXMgIzMgd2l0aCBcXG4gYmFja3NsYXNoLW4gaW4gaXQuIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBkaWZmLXRyZWUgLXAgQzIgfCBnaXQgYXBwbHkgLS1pbmRleCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIk1hc3RlciBhY2NlcHRzIG1vcmFsIGVxdWl2YWxlbnQgb2YgIzIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIiAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2gwICYmCisJY250PSQoZ3JlcCAiXkZyb20gIiBwYXRjaDAgfCB3YyAtbCkgJiYKKwl0ZXN0ICRjbnQgPSAzCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIiAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IFwKKwkJLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gbWFzdGVyLi5zaWRlID5wYXRjaDEgJiYKKwljbnQ9JChncmVwICJeRnJvbSAiIHBhdGNoMSB8IHdjIC1sKSAmJgorCXRlc3QgJGNudCA9IDIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmb3JtYXQtcGF0Y2ggLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gaGFuZGxlcyB0YWdzIiAnCisJZ2l0IHRhZyAtYSB2MSAtbSB0YWcgc2lkZSAmJgorCWdpdCB0YWcgLWEgdjIgLW0gdGFnIG1hc3RlciAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1pZ25vcmUtaWYtaW4tdXBzdHJlYW0gdjIuLnYxID5wYXRjaDEgJiYKKwljbnQ9JChncmVwICJeRnJvbSAiIHBhdGNoMSB8IHdjIC1sKSAmJgorCXRlc3QgJGNudCA9IDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9ybWF0LXBhdGNoIGRvZXNuJ3QgY29uc2lkZXIgbWVyZ2UgY29tbWl0cyIgJworCisJZ2l0IGNoZWNrb3V0IC1iIHNsYXZlIG1hc3RlciAmJgorCWVjaG8gIkFub3RoZXIgbGluZSIgPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYW0gIlNsYXZlIGNoYW5nZSAjMSIgJiYKKwllY2hvICJZZXQgYW5vdGhlciBsaW5lIiA+PmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hbSAiU2xhdmUgY2hhbmdlICMyIiAmJgorCWdpdCBjaGVja291dCAtYiBtZXJnZXIgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgc2xhdmUgJiYKKwljbnQ9JChnaXQgZm9ybWF0LXBhdGNoIC0zIC0tc3Rkb3V0IHwgZ3JlcCAiXkZyb20gIiB8IHdjIC1sKSAmJgorCXRlc3QgJGNudCA9IDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZm9ybWF0LXBhdGNoIHJlc3VsdCBhcHBsaWVzIiAnCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVidWlsZC0wIG1hc3RlciAmJgorCWdpdCBhbSAtMyBwYXRjaDAgJiYKKwljbnQ9JChnaXQgcmV2LWxpc3QgbWFzdGVyLi4gfCB3YyAtbCkgJiYKKwl0ZXN0ICRjbnQgPSAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZvcm1hdC1wYXRjaCAtLWlnbm9yZS1pZi1pbi11cHN0cmVhbSByZXN1bHQgYXBwbGllcyIgJworCisJZ2l0IGNoZWNrb3V0IC1iIHJlYnVpbGQtMSBtYXN0ZXIgJiYKKwlnaXQgYW0gLTMgcGF0Y2gxICYmCisJY250PSQoZ2l0IHJldi1saXN0IG1hc3Rlci4uIHwgd2MgLWwpICYmCisJdGVzdCAkY250ID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgZGlkIG5vdCBzY3JldyB1cCB0aGUgbG9nIG1lc3NhZ2UnICcKKworCWdpdCBjYXQtZmlsZSBjb21taXQgc2lkZSB8IGdyZXAgIl5TaWRlIC4qIHdpdGggLiogYmFja3NsYXNoLW4iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIGRpZCBub3Qgc2NyZXcgdXAgdGhlIGxvZyBtZXNzYWdlJyAnCisKKwlncmVwICJeU3ViamVjdDogLipTaWRlIGNoYW5nZXMgIzMgd2l0aCAuKiBiYWNrc2xhc2gtbiIgcGF0Y2gwICYmCisJZ3JlcCAiXlN1YmplY3Q6IC4qU2lkZSBjaGFuZ2VzICMzIHdpdGggLiogYmFja3NsYXNoLW4iIHBhdGNoMQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxheSBkaWQgbm90IHNjcmV3IHVwIHRoZSBsb2cgbWVzc2FnZScgJworCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWJ1aWxkLTEgfCBncmVwICJeU2lkZSAuKiB3aXRoIC4qIGJhY2tzbGFzaC1uIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dHJhIGhlYWRlcnMnICcKKworCWdpdCBjb25maWcgZm9ybWF0LmhlYWRlcnMgIlRvOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+CisiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBmb3JtYXQuaGVhZGVycyAiQ2M6IFMgRSBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4KKyIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+IHBhdGNoMiAmJgorCXNlZCAtZSAiL15cJC9xIiBwYXRjaDIgPiBoZHJzMiAmJgorCWdyZXAgIl5UbzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMiAmJgorCWdyZXAgIl5DYzogUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzMgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dHJhIGhlYWRlcnMgd2l0aG91dCBuZXdsaW5lcycgJworCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC5oZWFkZXJzICJUbzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIGZvcm1hdC5oZWFkZXJzICJDYzogUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+cGF0Y2gzICYmCisJc2VkIC1lICIvXlwkL3EiIHBhdGNoMyA+IGhkcnMzICYmCisJZ3JlcCAiXlRvOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnMzICYmCisJZ3JlcCAiXkNjOiBTIEUgQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+XCQiIGhkcnMzCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0cmEgaGVhZGVycyB3aXRoIG11bHRpcGxlIFRvOnMnICcKKworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQuaGVhZGVycyAiVG86IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBmb3JtYXQuaGVhZGVycyAiVG86IFMgRSBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgPiBwYXRjaDQgJiYKKwlzZWQgLWUgIi9eXCQvcSIgcGF0Y2g0ID4gaGRyczQgJiYKKwlncmVwICJeVG86IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4sXCQiIGhkcnM0ICYmCisJZ3JlcCAiXiAqUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBoZHJzNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBjYyAoYXNjaWkpJyAnCisKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgIkNjOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jYz0iUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwgc2VkIC1lICIvXlwkL3EiID5wYXRjaDUgJiYKKwlncmVwICJeQ2M6IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4sXCQiIHBhdGNoNSAmJgorCWdyZXAgIl4gKlMgRSBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgcGF0Y2g1CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2FkZGl0aW9uYWwgY29tbWFuZCBsaW5lIGNjIChyZmM4MjIpJyAnCisKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgIkNjOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jYz0iUy4gRS4gQ2lwaWVudCA8c2NpcGllbnRAZXhhbXBsZS5jb20+IiAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgfCBzZWQgLWUgIi9eXCQvcSIgPnBhdGNoNSAmJgorCWdyZXAgIl5DYzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPixcJCIgcGF0Y2g1ICYmCisJZ3JlcCAiXiAqXCJTLiBFLiBDaXBpZW50XCIgPHNjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBwYXRjaDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWFuZCBsaW5lIGhlYWRlcnMnICcKKworCWdpdCBjb25maWcgLS11bnNldC1hbGwgZm9ybWF0LmhlYWRlcnMgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tYWRkLWhlYWRlcj0iQ2M6IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8IHNlZCAtZSAiL15cJC9xIiA+cGF0Y2g2ICYmCisJZ3JlcCAiXkNjOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmF0aW9uIGhlYWRlcnMgYW5kIGNvbW1hbmQgbGluZSBoZWFkZXJzJyAnCisKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmhlYWRlcnMgIkNjOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1hZGQtaGVhZGVyPSJDYzogUyBFIENpcGllbnQgPHNjaXBpZW50QGV4YW1wbGUuY29tPiIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwgc2VkIC1lICIvXlwkL3EiID5wYXRjaDcgJiYKKwlncmVwICJeQ2M6IFIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4sXCQiIHBhdGNoNyAmJgorCWdyZXAgIl4gKlMgRSBDaXBpZW50IDxzY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgcGF0Y2g3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgbGluZSBUbzogaGVhZGVyIChhc2NpaSknICcKKworCWdpdCBjb25maWcgLS11bnNldC1hbGwgZm9ybWF0LmhlYWRlcnMgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tdG89IlIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8IHNlZCAtZSAiL15cJC9xIiA+cGF0Y2g4ICYmCisJZ3JlcCAiXlRvOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoOAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb21tYW5kIGxpbmUgVG86IGhlYWRlciAocmZjODIyKScgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXRvPSJSLiBFLiBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8IHNlZCAtZSAiL15cJC9xIiA+cGF0Y2g4ICYmCisJZ3JlcCAiXlRvOiBcIlIuIEUuIENpcGllbnRcIiA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoOAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb21tYW5kIGxpbmUgVG86IGhlYWRlciAocmZjMjA0NyknICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS10bz0iUiDDhCBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8IHNlZCAtZSAiL15cJC9xIiA+cGF0Y2g4ICYmCisJZ3JlcCAiXlRvOiA9P1VURi04P3E/Uj0yMD1DMz04ND0yMENpcGllbnQ/PSA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maWd1cmF0aW9uIFRvOiBoZWFkZXIgKGFzY2lpKScgJworCisJZ2l0IGNvbmZpZyBmb3JtYXQudG8gIlIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBtYXN0ZXIuLnNpZGUgfCBzZWQgLWUgIi9eXCQvcSIgPnBhdGNoOSAmJgorCWdyZXAgIl5UbzogUiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBwYXRjaDkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY29uZmlndXJhdGlvbiBUbzogaGVhZGVyIChyZmM4MjIpJyAnCisKKwlnaXQgY29uZmlnIGZvcm1hdC50byAiUi4gRS4gQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwgc2VkIC1lICIvXlwkL3EiID5wYXRjaDkgJiYKKwlncmVwICJeVG86IFwiUi4gRS4gQ2lwaWVudFwiIDxyY2lwaWVudEBleGFtcGxlLmNvbT5cJCIgcGF0Y2g5CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NvbmZpZ3VyYXRpb24gVG86IGhlYWRlciAocmZjMjA0NyknICcKKworCWdpdCBjb25maWcgZm9ybWF0LnRvICJSIMOEIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8IHNlZCAtZSAiL15cJC9xIiA+cGF0Y2g5ICYmCisJZ3JlcCAiXlRvOiA9P1VURi04P3E/Uj0yMD1DMz04ND0yMENpcGllbnQ/PSA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoOQorJworCisjIGNoZWNrX3BhdGNoIDxwYXRjaD46IFZlcmlmeSB0aGF0IDxwYXRjaD4gbG9va3MgbGlrZSBhIGhhbGYtc2FuZQorIyBwYXRjaCBlbWFpbCB0byBhdm9pZCBhIGZhbHNlIHBvc2l0aXZlIHdpdGggIWdyZXAKK2NoZWNrX3BhdGNoICgpIHsKKwlncmVwIC1lICJeRnJvbToiICIkMSIgJiYKKwlncmVwIC1lICJeRGF0ZToiICIkMSIgJiYKKwlncmVwIC1lICJeU3ViamVjdDoiICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby10byBvdmVycmlkZXMgY29uZmlnLnRvJyAnCisKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LnRvIFwKKwkJIlIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLXRvIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8CisJc2VkIC1lICIvXlwkL3EiID5wYXRjaDEwICYmCisJY2hlY2tfcGF0Y2ggcGF0Y2gxMCAmJgorCSEgZ3JlcCAiXlRvOiBSIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoMTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby10byBhbmQgLS10byByZXBsYWNlcyBjb25maWcudG8nICcKKworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBmb3JtYXQudG8gXAorCQkiU29tZW9uZSA8c29tZW9uZUBvdXQudGhlcmU+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby10byAtLXRvPSJTb21lb25lIEVsc2UgPGVsc2VAb3V0LnRoZXJlPiIgXAorCQktLXN0ZG91dCBtYXN0ZXIuLnNpZGUgfAorCXNlZCAtZSAiL15cJC9xIiA+cGF0Y2gxMSAmJgorCWNoZWNrX3BhdGNoIHBhdGNoMTEgJiYKKwkhIGdyZXAgIl5UbzogU29tZW9uZSA8c29tZW9uZUBvdXQudGhlcmU+XCQiIHBhdGNoMTEgJiYKKwlncmVwICJeVG86IFNvbWVvbmUgRWxzZSA8ZWxzZUBvdXQudGhlcmU+XCQiIHBhdGNoMTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1jYyBvdmVycmlkZXMgY29uZmlnLmNjJyAnCisKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgZm9ybWF0LmNjIFwKKwkJIkMgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLWNjIC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSB8CisJc2VkIC1lICIvXlwkL3EiID5wYXRjaDEyICYmCisJY2hlY2tfcGF0Y2ggcGF0Y2gxMiAmJgorCSEgZ3JlcCAiXkNjOiBDIEUgQ2lwaWVudCA8cmNpcGllbnRAZXhhbXBsZS5jb20+XCQiIHBhdGNoMTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1hZGQtaGVhZGVyIG92ZXJyaWRlcyBjb25maWcuaGVhZGVycycgJworCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIGZvcm1hdC5oZWFkZXJzIFwKKwkJIkhlYWRlcjE6IEIgRSBDaXBpZW50IDxyY2lwaWVudEBleGFtcGxlLmNvbT4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLWFkZC1oZWFkZXIgLS1zdGRvdXQgbWFzdGVyLi5zaWRlIHwKKwlzZWQgLWUgIi9eXCQvcSIgPnBhdGNoMTMgJiYKKwljaGVja19wYXRjaCBwYXRjaDEzICYmCisJISBncmVwICJeSGVhZGVyMTogQiBFIENpcGllbnQgPHJjaXBpZW50QGV4YW1wbGUuY29tPlwkIiBwYXRjaDEzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGZpbGVzJyAnCisKKwlybSAtcmYgcGF0Y2hlcy8gJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLW8gcGF0Y2hlcy8gbWFzdGVyICYmCisJbHMgcGF0Y2hlcy8wMDAxLVNpZGUtY2hhbmdlcy0xLnBhdGNoIHBhdGNoZXMvMDAwMi1TaWRlLWNoYW5nZXMtMi5wYXRjaCBwYXRjaGVzLzAwMDMtU2lkZS1jaGFuZ2VzLTMtd2l0aC1uLWJhY2tzbGFzaC1uLWluLWl0LnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlcm9sbCBjb3VudCcgJworCXJtIC1mciBwYXRjaGVzICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyBwYXRjaGVzIC0tY292ZXItbGV0dGVyIC0tcmVyb2xsLWNvdW50IDQgbWFzdGVyLi5zaWRlID5saXN0ICYmCisJISBncmVwIC12ICJecGF0Y2hlcy92NC0wMDBbMC0zXS0iIGxpc3QgJiYKKwlzZWQgLW4gLWUgIi9eU3ViamVjdDogL3AiICQoY2F0IGxpc3QpID5zdWJqZWN0cyAmJgorCSEgZ3JlcCAtdiAiXlN1YmplY3Q6IFxbUEFUQ0ggdjQgWzAtM10vM1xdICIgc3ViamVjdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyb2xsIGNvdW50ICgtdiknICcKKwlybSAtZnIgcGF0Y2hlcyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLW8gcGF0Y2hlcyAtLWNvdmVyLWxldHRlciAtdjQgbWFzdGVyLi5zaWRlID5saXN0ICYmCisJISBncmVwIC12ICJecGF0Y2hlcy92NC0wMDBbMC0zXS0iIGxpc3QgJiYKKwlzZWQgLW4gLWUgIi9eU3ViamVjdDogL3AiICQoY2F0IGxpc3QpID5zdWJqZWN0cyAmJgorCSEgZ3JlcCAtdiAiXlN1YmplY3Q6IFxbUEFUQ0ggdjQgWzAtM10vM1xdICIgc3ViamVjdHMKKycKKworY2hlY2tfdGhyZWFkaW5nICgpIHsKKwlleHBlY3Q9IiQxIiAmJgorCXNoaWZ0ICYmCisJKGdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgIiRAIjsgZWNobyAkPyA+IHN0YXR1cy5vdXQpIHwKKwkjIFByaW50cyBldmVyeXRoaW5nIGJldHdlZW4gdGhlIE1lc3NhZ2UtSUQgYW5kIEluLVJlcGx5LVRvLAorCSMgYW5kIHJlcGxhY2VzIGFsbCBNZXNzYWdlLUlELWxvb2thbGlrZXMgYnkgYSBzZXF1ZW5jZSBudW1iZXIKKwlwZXJsIC1uZSAnCisJCWlmICgvXihtZXNzYWdlLWlkfHJlZmVyZW5jZXN8aW4tcmVwbHktdG8pL2kpIHsKKwkJCSRwcmludGluZyA9IDE7CisJCX0gZWxzaWYgKC9eXFMvKSB7CisJCQkkcHJpbnRpbmcgPSAwOworCQl9CisJCWlmICgkcHJpbnRpbmcpIHsKKwkJCSRoeyQxfT0kaSsrIGlmICgvPChbXj5dKyk+LyBhbmQgIWV4aXN0cyAkaHskMX0pOworCQkJZm9yICRrIChrZXlzICVoKSB7cy8kay8kaHska30vfTsKKwkJCXByaW50OworCQl9CisJCXByaW50ICItLS1cbiIgaWYgL15Gcm9tIC9pOworCScgPiBhY3R1YWwgJiYKKwl0ZXN0IDAgPSAiJChjYXQgc3RhdHVzLm91dCkiICYmCisJdGVzdF9jbXAgIiRleHBlY3QiIGFjdHVhbAorfQorCitjYXQgPj4gZXhwZWN0Lm5vLXRocmVhZGluZyA8PEVPRgorLS0tCistLS0KKy0tLQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHRocmVhZGluZycgJworCWdpdCBjaGVja291dCBzaWRlICYmCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC5uby10aHJlYWRpbmcgbWFzdGVyCisnCisKK2NhdCA+IGV4cGVjdC50aHJlYWQgPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwxPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwyPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDA+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkJyAnCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC50aHJlYWQgLS10aHJlYWQgbWFzdGVyCisnCisKK2NhdCA+IGV4cGVjdC5pbi1yZXBseS10byA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBpbi1yZXBseS10bycgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuaW4tcmVwbHktdG8gLS1pbi1yZXBseS10bz0iPHRlc3QubWVzc2FnZT4iIFwKKwkJLS10aHJlYWQgbWFzdGVyCisnCisKK2NhdCA+IGV4cGVjdC5jb3Zlci1sZXR0ZXIgPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwxPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwyPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwzPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDA+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGNvdmVyLWxldHRlcicgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuY292ZXItbGV0dGVyIC0tY292ZXItbGV0dGVyIC0tdGhyZWFkIG1hc3RlcgorJworCitjYXQgPiBleHBlY3QuY2wtaXJ0IDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorSW4tUmVwbHktVG86IDwxPgorUmVmZXJlbmNlczogPDE+CistLS0KK01lc3NhZ2UtSWQ6IDwyPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDE+CisJPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwzPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDE+CisJPDA+CistLS0KK01lc3NhZ2UtSWQ6IDw0PgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDE+CisJPDA+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGNvdmVyLWxldHRlciBpbi1yZXBseS10bycgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuY2wtaXJ0IC0tY292ZXItbGV0dGVyIFwKKwkJLS1pbi1yZXBseS10bz0iPHRlc3QubWVzc2FnZT4iIC0tdGhyZWFkIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aHJlYWQgZXhwbGljaXQgc2hhbGxvdycgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuY2wtaXJ0IC0tY292ZXItbGV0dGVyIFwKKwkJLS1pbi1yZXBseS10bz0iPHRlc3QubWVzc2FnZT4iIC0tdGhyZWFkPXNoYWxsb3cgbWFzdGVyCisnCisKK2NhdCA+IGV4cGVjdC5kZWVwIDw8RU9GCistLS0KK01lc3NhZ2UtSWQ6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8MT4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwwPgorCTwxPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBkZWVwJyAnCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC5kZWVwIC0tdGhyZWFkPWRlZXAgbWFzdGVyCisnCisKK2NhdCA+IGV4cGVjdC5kZWVwLWlydCA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8Mj4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorCTwyPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBkZWVwIGluLXJlcGx5LXRvJyAnCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC5kZWVwLWlydCAgLS10aHJlYWQ9ZGVlcCBcCisJCS0taW4tcmVwbHktdG89Ijx0ZXN0Lm1lc3NhZ2U+IiBtYXN0ZXIKKycKKworY2F0ID4gZXhwZWN0LmRlZXAtY2wgPDxFT0YKKy0tLQorTWVzc2FnZS1JZDogPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwxPgorSW4tUmVwbHktVG86IDwwPgorUmVmZXJlbmNlczogPDA+CistLS0KK01lc3NhZ2UtSWQ6IDwyPgorSW4tUmVwbHktVG86IDwxPgorUmVmZXJlbmNlczogPDA+CisJPDE+CistLS0KK01lc3NhZ2UtSWQ6IDwzPgorSW4tUmVwbHktVG86IDwyPgorUmVmZXJlbmNlczogPDA+CisJPDE+CisJPDI+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGRlZXAgY292ZXItbGV0dGVyJyAnCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC5kZWVwLWNsIC0tY292ZXItbGV0dGVyIC0tdGhyZWFkPWRlZXAgbWFzdGVyCisnCisKK2NhdCA+IGV4cGVjdC5kZWVwLWNsLWlydCA8PEVPRgorLS0tCitNZXNzYWdlLUlkOiA8MD4KK0luLVJlcGx5LVRvOiA8MT4KK1JlZmVyZW5jZXM6IDwxPgorLS0tCitNZXNzYWdlLUlkOiA8Mj4KK0luLVJlcGx5LVRvOiA8MD4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorLS0tCitNZXNzYWdlLUlkOiA8Mz4KK0luLVJlcGx5LVRvOiA8Mj4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorCTwyPgorLS0tCitNZXNzYWdlLUlkOiA8ND4KK0luLVJlcGx5LVRvOiA8Mz4KK1JlZmVyZW5jZXM6IDwxPgorCTwwPgorCTwyPgorCTwzPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBkZWVwIGNvdmVyLWxldHRlciBpbi1yZXBseS10bycgJworCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcC1jbC1pcnQgLS1jb3Zlci1sZXR0ZXIgXAorCQktLWluLXJlcGx5LXRvPSI8dGVzdC5tZXNzYWdlPiIgLS10aHJlYWQ9ZGVlcCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIHZpYSBjb25maWcnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQudGhyZWFkIHRydWUgJiYKKwljaGVja190aHJlYWRpbmcgZXhwZWN0LnRocmVhZCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGRlZXAgdmlhIGNvbmZpZycgJworCXRlc3RfY29uZmlnIGZvcm1hdC50aHJlYWQgZGVlcCAmJgorCWNoZWNrX3RocmVhZGluZyBleHBlY3QuZGVlcCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhyZWFkIGNvbmZpZyArIG92ZXJyaWRlJyAnCisJdGVzdF9jb25maWcgZm9ybWF0LnRocmVhZCBkZWVwICYmCisJY2hlY2tfdGhyZWFkaW5nIGV4cGVjdC50aHJlYWQgLS10aHJlYWQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RocmVhZCBjb25maWcgKyAtLW5vLXRocmVhZCcgJworCXRlc3RfY29uZmlnIGZvcm1hdC50aHJlYWQgZGVlcCAmJgorCWNoZWNrX3RocmVhZGluZyBleHBlY3Qubm8tdGhyZWFkaW5nIC0tbm8tdGhyZWFkIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNlc3NpdmUgc3ViamVjdCcgJworCisJcm0gLXJmIHBhdGNoZXMvICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlmb3IgaSBpbiA1IDYgMSAyIDMgQSA0IEIgQyA3IDggOSAxMCBEIEUgRjsgZG8gZWNobyAiJGkiOyBkb25lID4+ZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIlRoaXMgaXMgYW4gZXhjZXNzaXZlbHkgbG9uZyBzdWJqZWN0IGxpbmUgZm9yIGEgbWVzc2FnZSBkdWUgdG8gdGhlIGhhYml0IHNvbWUgcHJvamVjdHMgaGF2ZSBvZiBub3QgaGF2aW5nIGEgc2hvcnQsIG9uZS1saW5lIHN1YmplY3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjb21taXQgbWVzc2FnZSwgYnV0IHJhdGhlciBzdGlja2luZyBhIHdob2xlIHBhcmFncmFwaCByaWdodCBhdCB0aGUgc3RhcnQgYXMgdGhlIG9ubHkgdGhpbmcgaW4gdGhlIGNvbW1pdCBtZXNzYWdlLiBJdCBoYWQgYmV0dGVyIG5vdCBiZWNvbWUgdGhlIGZpbGVuYW1lIGZvciB0aGUgcGF0Y2guIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLW8gcGF0Y2hlcy8gbWFzdGVyLi5zaWRlICYmCisJbHMgcGF0Y2hlcy8wMDA0LVRoaXMtaXMtYW4tZXhjZXNzaXZlbHktbG9uZy1zdWJqZWN0LWxpbmUtZm9yLWEtbWVzc2EucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXItbGV0dGVyIGluaGVyaXRzIGRpZmYgb3B0aW9ucycgJworCisJZ2l0IG12IGZpbGUgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBmb28gJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0xICYmCisJY2hlY2tfcGF0Y2ggMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2ggJiYKKwkhIGdyZXAgImZpbGUgPT4gZm9vIC4qIDAgKlwkIiAwMDAwLWNvdmVyLWxldHRlci5wYXRjaCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLTEgLU0gJiYKKwlncmVwICJmaWxlID0+IGZvbyAuKiAwICpcJCIgMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2gKKworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisgIFRoaXMgaXMgYW4gZXhjZXNzaXZlbHkgbG9uZyBzdWJqZWN0IGxpbmUgZm9yIGEgbWVzc2FnZSBkdWUgdG8gdGhlCisgICAgaGFiaXQgc29tZSBwcm9qZWN0cyBoYXZlIG9mIG5vdCBoYXZpbmcgYSBzaG9ydCwgb25lLWxpbmUgc3ViamVjdCBhdAorICAgIHRoZSBzdGFydCBvZiB0aGUgY29tbWl0IG1lc3NhZ2UsIGJ1dCByYXRoZXIgc3RpY2tpbmcgYSB3aG9sZQorICAgIHBhcmFncmFwaCByaWdodCBhdCB0aGUgc3RhcnQgYXMgdGhlIG9ubHkgdGhpbmcgaW4gdGhlIGNvbW1pdAorICAgIG1lc3NhZ2UuIEl0IGhhZCBiZXR0ZXIgbm90IGJlY29tZSB0aGUgZmlsZW5hbWUgZm9yIHRoZSBwYXRjaC4KKyAgZm9vCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyBvZiBjb3Zlci1sZXR0ZXIgd3JhcHMgb3Zlcmx5LWxvbmcgb25lbGluZXMnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLTIgJiYKKwlzZWQgLWUgIjEsL0EgVSBUaG9yL2QiIC1lICIvXlwkL3EiIDwgMDAwMC1jb3Zlci1sZXR0ZXIucGF0Y2ggPiBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgoraW5kZXggNDBmMzZjNi4uMmRjNWMyMyAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xMyw0ICsxMywyMCBAQCBDCisgMTAKKyBECisgRQorIEYKKys1CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHJlc3BlY3RzIC1VJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC1VNCAtMiAmJgorCXNlZCAtZSAiMSwvXmRpZmYvZCIgLWUgIi9eKzUvcSIgXAorCQk8MDAwMS1UaGlzLWlzLWFuLWV4Y2Vzc2l2ZWx5LWxvbmctc3ViamVjdC1saW5lLWZvci1hLW1lc3NhLnBhdGNoIFwKKwkJPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisKK2RpZmYgLS1naXQgYS9maWxlIGIvZmlsZQoraW5kZXggNDBmMzZjNi4uMmRjNWMyMyAxMDA2NDQKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xNCwzICsxNCwxOSBAQCBDCisgRAorIEUKKyBGCisrNQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtcCBzdXBwcmVzc2VzIHN0YXQnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLXAgLTIgJiYKKwlzZWQgLWUgIjEsL15cJC9kIiAtZSAiL14rNS9xIiA8IDAwMDEtVGhpcy1pcy1hbi1leGNlc3NpdmVseS1sb25nLXN1YmplY3QtbGluZS1mb3ItYS1tZXNzYS5wYXRjaCA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggZnJvbSBhIHN1YmRpcmVjdG9yeSAoMSknICcKKwlmaWxlbmFtZT0kKAorCQlybSAtcmYgc3ViICYmCisJCW1rZGlyIC1wIHN1Yi9kaXIgJiYKKwkJY2Qgc3ViL2RpciAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0xCisJKSAmJgorCWNhc2UgIiRmaWxlbmFtZSIgaW4KKwkwKikKKwkJOzsgIyBvaworCSopCisJCWVjaG8gIk9vcHM/ICRmaWxlbmFtZSIKKwkJZmFsc2UKKwkJOzsKKwllc2FjICYmCisJdGVzdCAtZiAiJGZpbGVuYW1lIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggZnJvbSBhIHN1YmRpcmVjdG9yeSAoMiknICcKKwlmaWxlbmFtZT0kKAorCQlybSAtcmYgc3ViICYmCisJCW1rZGlyIC1wIHN1Yi9kaXIgJiYKKwkJY2Qgc3ViL2RpciAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0xIC1vIC4uCisJKSAmJgorCWNhc2UgIiRmaWxlbmFtZSIgaW4KKwkuLi8wKikKKwkJOzsgIyBvaworCSopCisJCWVjaG8gIk9vcHM/ICRmaWxlbmFtZSIKKwkJZmFsc2UKKwkJOzsKKwllc2FjICYmCisJYmFzZW5hbWU9JChleHByICIkZmlsZW5hbWUiIDogIi4qL1woLipcKSIpICYmCisJdGVzdCAtZiAic3ViLyRiYXNlbmFtZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIGZyb20gYSBzdWJkaXJlY3RvcnkgKDMpJyAnCisJcm0gLWYgMCogJiYKKwlmaWxlbmFtZT0kKAorCQlybSAtcmYgc3ViICYmCisJCW1rZGlyIC1wIHN1Yi9kaXIgJiYKKwkJY2Qgc3ViL2RpciAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0xIC1vICIkVFJBU0hfRElSRUNUT1JZIgorCSkgJiYKKwliYXNlbmFtZT0kKGV4cHIgIiRmaWxlbmFtZSIgOiAiLiovXCguKlwpIikgJiYKKwl0ZXN0IC1mICIkYmFzZW5hbWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLWluLXJlcGx5LXRvJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLWluLXJlcGx5LXRvICJiYXpAZm9vLmJhciIgPiBwYXRjaDggJiYKKwlncmVwICJeSW4tUmVwbHktVG86IDxiYXpAZm9vLmJhcj4iIHBhdGNoOCAmJgorCWdyZXAgIl5SZWZlcmVuY2VzOiA8YmF6QGZvby5iYXI+IiBwYXRjaDgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tc2lnbm9mZicgJworCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zaWdub2ZmIC0tc3Rkb3V0ID5vdXQgJiYKKwlncmVwICJeU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tbm90ZXMgLS1zaWdub2ZmJyAnCisJZ2l0IG5vdGVzIC0tcmVmIHRlc3QgYWRkIC1tICJ0ZXN0IG1lc3NhZ2UiIEhFQUQgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc2lnbm9mZiAtLXN0ZG91dCAtLW5vdGVzPXRlc3QgPm91dCAmJgorCSMgVGhyZWUgZGFzaGVzIG11c3QgY29tZSBhZnRlciBTLW8tYgorCSEgc2VkICIvXlNpZ25lZC1vZmYtYnk6IC9xIiBvdXQgfCBncmVwICJ0ZXN0IG1lc3NhZ2UiICYmCisJc2VkICIxLC9eU2lnbmVkLW9mZi1ieTogL2QiIG91dCB8IGdyZXAgInRlc3QgbWVzc2FnZSIgJiYKKwkjIE5vdGVzIG1lc3NhZ2UgbXVzdCBjb21lIGFmdGVyIHRocmVlIGRhc2hlcworCSEgc2VkICIvXi0tLSQvcSIgb3V0IHwgZ3JlcCAidGVzdCBtZXNzYWdlIiAmJgorCXNlZCAiMSwvXi0tLSQvZCIgb3V0IHwgZ3JlcCAidGVzdCBtZXNzYWdlIgorJworCitlY2hvICJmYXRhbDogLS1uYW1lLW9ubHkgZG9lcyBub3QgbWFrZSBzZW5zZSIgPiBleHBlY3QubmFtZS1vbmx5CitlY2hvICJmYXRhbDogLS1uYW1lLXN0YXR1cyBkb2VzIG5vdCBtYWtlIHNlbnNlIiA+IGV4cGVjdC5uYW1lLXN0YXR1cworZWNobyAiZmF0YWw6IC0tY2hlY2sgZG9lcyBub3QgbWFrZSBzZW5zZSIgPiBleHBlY3QuY2hlY2sKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9ucyBubyBsb25nZXIgYWxsb3dlZCBmb3IgZm9ybWF0LXBhdGNoJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvcm1hdC1wYXRjaCAtLW5hbWUtb25seSAyPiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0Lm5hbWUtb25seSBvdXRwdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9ybWF0LXBhdGNoIC0tbmFtZS1zdGF0dXMgMj4gb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5uYW1lLXN0YXR1cyBvdXRwdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9ybWF0LXBhdGNoIC0tY2hlY2sgMj4gb3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5jaGVjayBvdXRwdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLW51bXN0YXQgc2hvdWxkIHByb2R1Y2UgYSBwYXRjaCcgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1udW1zdGF0IC0tc3Rkb3V0IG1hc3Rlci4uc2lkZSA+IG91dHB1dCAmJgorCXRlc3QgNiA9ICQoZ3JlcCAiXmRpZmYgLS1naXQgYS8iIG91dHB1dCB8IHdjIC1sKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tIDxwYXRoPicgJworCWdpdCBmb3JtYXQtcGF0Y2ggbWFzdGVyLi5zaWRlIC0tIGZpbGUgMj5lcnJvciAmJgorCSEgZ3JlcCAiVXNlIC4tLSIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIEhFQUQnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0taWdub3JlLWlmLWluLXVwc3RyZWFtIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIC0tc2lnbmF0dXJlJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLXNpZ25hdHVyZT0ibXkgc2lnIiAtMSA+b3V0cHV0ICYmCisJZ3JlcCAibXkgc2lnIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdpdGggZm9ybWF0LnNpZ25hdHVyZSBjb25maWcnICcKKwlnaXQgY29uZmlnIGZvcm1hdC5zaWduYXR1cmUgImNvbmZpZyBzaWciICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+b3V0cHV0ICYmCisJZ3JlcCAiY29uZmlnIHNpZyIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXNpZ25hdHVyZSBvdmVycmlkZXMgZm9ybWF0LnNpZ25hdHVyZScgJworCWdpdCBjb25maWcgZm9ybWF0LnNpZ25hdHVyZSAiY29uZmlnIHNpZyIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tc2lnbmF0dXJlPSJvdmVycmlkZXMiIC0xID5vdXRwdXQgJiYKKwkhIGdyZXAgImNvbmZpZyBzaWciIG91dHB1dCAmJgorCWdyZXAgIm92ZXJyaWRlcyIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLW5vLXNpZ25hdHVyZSBpZ25vcmVzIGZvcm1hdC5zaWduYXR1cmUnICcKKwlnaXQgY29uZmlnIGZvcm1hdC5zaWduYXR1cmUgImNvbmZpZyBzaWciICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLXNpZ25hdHVyZT0ibXkgc2lnIiAtLW5vLXNpZ25hdHVyZSBcCisJCS0xID5vdXRwdXQgJiYKKwljaGVja19wYXRjaCBvdXRwdXQgJiYKKwkhIGdyZXAgImNvbmZpZyBzaWciIG91dHB1dCAmJgorCSEgZ3JlcCAibXkgc2lnIiBvdXRwdXQgJiYKKwkhIGdyZXAgIl4tLSBcJCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCAtLXNpZ25hdHVyZSAtLWNvdmVyLWxldHRlcicgJworCWdpdCBjb25maWcgLS11bnNldC1hbGwgZm9ybWF0LnNpZ25hdHVyZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1zaWduYXR1cmU9Im15IHNpZyIgLS1jb3Zlci1sZXR0ZXIgXAorCQktMSA+b3V0cHV0ICYmCisJZ3JlcCAibXkgc2lnIiBvdXRwdXQgJiYKKwl0ZXN0IDIgPSAkKGdyZXAgIm15IHNpZyIgb3V0cHV0IHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5zaWduYXR1cmU9IiIgc3VwcHJlc3NlcyBzaWduYXR1cmVzJyAnCisJZ2l0IGNvbmZpZyBmb3JtYXQuc2lnbmF0dXJlICIiICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJISBncmVwICJeLS0gXCQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1uby1zaWduYXR1cmUgc3VwcHJlc3NlcyBzaWduYXR1cmVzJyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBmb3JtYXQuc2lnbmF0dXJlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLW5vLXNpZ25hdHVyZSAtMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJISBncmVwICJeLS0gXCQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggLS1zaWduYXR1cmU9IiIgc3VwcHJlc3NlcyBzaWduYXR1cmVzJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLXNpZ25hdHVyZT0iIiAtMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJISBncmVwICJeLS0gXCQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIG1haWwtc2lnbmF0dXJlIGlucHV0JyAnCisJY2F0ID5tYWlsLXNpZ25hdHVyZSA8PC1cRU9GCisKKwlUZXN0IFVzZXIgPHRlc3QuZW1haWxAa2VybmVsLm9yZz4KKwlodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvY2dpdC9naXQvZ2l0LmdpdAorCisJZ2l0Lmtlcm5lbC5vcmcvP3A9Z2l0L2dpdC5naXQ7YT1zdW1tYXJ5CisKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaWduYXR1cmUtZmlsZT1maWxlIHdvcmtzJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLXNpZ25hdHVyZS1maWxlPW1haWwtc2lnbmF0dXJlIC0xID5vdXRwdXQgJiYKKwljaGVja19wYXRjaCBvdXRwdXQgJiYKKwlzZWQgLWUgIjEsL14tLSBcJC9kIiA8b3V0cHV0ID5hY3R1YWwgJiYKKwl7CisJCWNhdCBtYWlsLXNpZ25hdHVyZSAmJiBlY2hvCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQuc2lnbmF0dXJlZmlsZSB3b3JrcycgJworCXRlc3RfY29uZmlnIGZvcm1hdC5zaWduYXR1cmVmaWxlIG1haWwtc2lnbmF0dXJlICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJc2VkIC1lICIxLC9eLS0gXCQvZCIgPG91dHB1dCA+YWN0dWFsICYmCisJeworCQljYXQgbWFpbC1zaWduYXR1cmUgJiYgZWNobworCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby1zaWduYXR1cmUgc3VwcHJlc3NlcyBmb3JtYXQuc2lnbmF0dXJlZmlsZSAnICcKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuc2lnbmF0dXJlZmlsZSBtYWlsLXNpZ25hdHVyZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1uby1zaWduYXR1cmUgLTEgPm91dHB1dCAmJgorCWNoZWNrX3BhdGNoIG91dHB1dCAmJgorCSEgZ3JlcCAiXi0tIFwkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaWduYXR1cmUtZmlsZSBvdmVycmlkZXMgZm9ybWF0LnNpZ25hdHVyZWZpbGUnICcKKwljYXQgPm90aGVyLW1haWwtc2lnbmF0dXJlIDw8LVxFT0YgJiYKKwlVc2UgdGhpcyBvdGhlciBzaWduYXR1cmUgaW5zdGVhZCBvZiBtYWlsLXNpZ25hdHVyZS4KKwlFT0YKKwl0ZXN0X2NvbmZpZyBmb3JtYXQuc2lnbmF0dXJlZmlsZSBtYWlsLXNpZ25hdHVyZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgXAorCQkJLS1zaWduYXR1cmUtZmlsZT1vdGhlci1tYWlsLXNpZ25hdHVyZSAtMSA+b3V0cHV0ICYmCisJY2hlY2tfcGF0Y2ggb3V0cHV0ICYmCisJc2VkIC1lICIxLC9eLS0gXCQvZCIgPG91dHB1dCA+YWN0dWFsICYmCisJeworCQljYXQgb3RoZXItbWFpbC1zaWduYXR1cmUgJiYgZWNobworCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaWduYXR1cmUgb3ZlcnJpZGVzIGZvcm1hdC5zaWduYXR1cmVmaWxlJyAnCisJdGVzdF9jb25maWcgZm9ybWF0LnNpZ25hdHVyZWZpbGUgbWFpbC1zaWduYXR1cmUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tc2lnbmF0dXJlPSJteSBzaWciIC0xID5vdXRwdXQgJiYKKwljaGVja19wYXRjaCBvdXRwdXQgJiYKKwlncmVwICJteSBzaWciIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IHBhZ2luYXRlcycgJworCXJtIC1mIHBhZ2VyX3VzZWQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGVudiBHSVRfUEFHRVI9IndjID5wYWdlcl91c2VkIiBnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tYWxsICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcGFnZXJfdXNlZAorJworCisgdGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2Zvcm1hdC1wYXRjaCAtLXN0ZG91dCBwYWdpbmF0aW9uIGNhbiBiZSBkaXNhYmxlZCcgJworCXJtIC1mIHBhZ2VyX3VzZWQgJiYKKwl0ZXN0X3Rlcm1pbmFsIGVudiBHSVRfUEFHRVI9IndjID5wYWdlcl91c2VkIiBnaXQgLS1uby1wYWdlciBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1hbGwgJiYKKwl0ZXN0X3Rlcm1pbmFsIGVudiBHSVRfUEFHRVI9IndjID5wYWdlcl91c2VkIiBnaXQgLWMgInBhZ2VyLmZvcm1hdC1wYXRjaD1mYWxzZSIgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tYWxsICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgcGFnZXJfdXNlZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcGFnZXJfdXNlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggaGFuZGxlcyBtdWx0aS1saW5lIHN1YmplY3RzJyAnCisJcm0gLXJmIHBhdGNoZXMvICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWZvciBpIGluIG9uZSB0d28gdGhyZWU7IGRvIGVjaG8gJGk7IGRvbmUgPm1zZyAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLUYgbXNnICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyBwYXRjaGVzIC0xICYmCisJZ3JlcCBeU3ViamVjdDogcGF0Y2hlcy8wMDAxLW9uZS5wYXRjaCA+YWN0dWFsICYmCisJZWNobyAiU3ViamVjdDogW1BBVENIXSBvbmUgdHdvIHRocmVlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggaGFuZGxlcyBtdWx0aS1saW5lIGVuY29kZWQgc3ViamVjdHMnICcKKwlybSAtcmYgcGF0Y2hlcy8gJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZm9yIGkgaW4gZW4gdHbDpSB0cmU7IGRvIGVjaG8gJGk7IGRvbmUgPm1zZyAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLUYgbXNnICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyBwYXRjaGVzIC0xICYmCisJZ3JlcCBeU3ViamVjdDogcGF0Y2hlcy8wMDAxLWVuLnBhdGNoID5hY3R1YWwgJiYKKwllY2hvICJTdWJqZWN0OiBbUEFUQ0hdID0/VVRGLTg/cT9lbj0yMHR2PUMzPUE1PTIwdHJlPz0iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK004PSJmb28gYmFyICIKK002ND0kTTgkTTgkTTgkTTgkTTgkTTgkTTgkTTgKK001MTI9JE02NCRNNjQkTTY0JE02NCRNNjQkTTY0JE02NCRNNjQKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1N1YmplY3Q6IFtQQVRDSF0gZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28KKyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIKKyBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28KKyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIKKyBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28KKyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIKKyBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhciBmb28gYmFyIGZvbyBiYXIgZm9vIGJhcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggd3JhcHMgZXh0cmVtZWx5IGxvbmcgc3ViamVjdCAoYXNjaWkpJyAnCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIiRNNTEyIiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPnBhdGNoICYmCisJc2VkIC1uICIvXlN1YmplY3QvcDsgL14gL3A7IC9eJC9xIiA8cGF0Y2ggPnN1YmplY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgc3ViamVjdAorJworCitNOD0iZsO2w7YgYmFyICIKK002ND0kTTgkTTgkTTgkTTgkTTgkTTgkTTgkTTgKK001MTI9JE02NCRNNjQkTTY0JE02NCRNNjQkTTY0JE02NCRNNjQKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1N1YmplY3Q6IFtQQVRDSF0gPT9VVEYtOD9xP2Y9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj89CisgPT9VVEYtOD9xPz1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPz0KKyA9P1VURi04P3E/PTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwPz0KKyA9P1VURi04P3E/YmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2Pz0KKyA9P1VURi04P3E/PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2Pz0KKyA9P1VURi04P3E/PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPz0KKyA9P1VURi04P3E/PUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI/PQorID0/VVRGLTg/cT89MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjA/PQorID0/VVRGLTg/cT9iYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY/PQorID0/VVRGLTg/cT89MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY/PQorID0/VVRGLTg/cT89QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY/PQorID0/VVRGLTg/cT89QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj89CisgPT9VVEYtOD9xPz0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMD89CisgPT9VVEYtOD9xP2Jhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj89CisgPT9VVEYtOD9xPz0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj89CisgPT9VVEYtOD9xPz1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj89CisgPT9VVEYtOD9xPz1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwYmFyPz0KKyA9P1VURi04P3E/PTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2PTIwPz0KKyA9P1VURi04P3E/YmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2PUMzPUI2Pz0KKyA9P1VURi04P3E/PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPUMzPUI2Pz0KKyA9P1VURi04P3E/PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI9MjBmPz0KKyA9P1VURi04P3E/PUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjBiYXI/PQorID0/VVRGLTg/cT89MjBmPUMzPUI2PUMzPUI2PTIwYmFyPTIwZj1DMz1CNj1DMz1CNj0yMGJhcj0yMGY9QzM9QjY9QzM9QjY9MjA/PQorID0/VVRGLTg/cT9iYXI/PQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggd3JhcHMgZXh0cmVtZWx5IGxvbmcgc3ViamVjdCAocmZjMjA0NyknICcKKwlybSAtcmYgcGF0Y2hlcy8gJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiJE01MTIiICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+cGF0Y2ggJiYKKwlzZWQgLW4gIi9eU3ViamVjdC9wOyAvXiAvcDsgL14kL3EiIDxwYXRjaCA+c3ViamVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBzdWJqZWN0CisnCisKK2NoZWNrX2F1dGhvcigpIHsKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJR0lUX0FVVEhPUl9OQU1FPSQxIGdpdCBjb21taXQgLW0gYXV0aG9yLWNoZWNrICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+cGF0Y2ggJiYKKwlzZWQgLW4gIi9eRnJvbTogL3A7IC9eIC9wOyAvXiQvcSIgPHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0Zyb206ICJGb28gQi4gQmFyIiA8YXV0aG9yQGV4YW1wbGUuY29tPgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggcXVvdGVzIGRvdCBpbiBmcm9tLWhlYWRlcnMnICcKKwljaGVja19hdXRob3IgIkZvbyBCLiBCYXIiCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0Zyb206ICJGb28gXCJUaGUgQmF6XCIgQmFyIiA8YXV0aG9yQGV4YW1wbGUuY29tPgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggcXVvdGVzIGRvdWJsZS1xdW90ZSBpbiBmcm9tLWhlYWRlcnMnICcKKwljaGVja19hdXRob3IgIkZvbyBcIlRoZSBCYXpcIiBCYXIiCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0Zyb206ID0/VVRGLTg/cT9GPUMzPUI2bz0yMEJhcj89IDxhdXRob3JAZXhhbXBsZS5jb20+CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCB1c2VzIHJmYzIwNDctZW5jb2RlZCBmcm9tLWhlYWRlcnMgd2hlbiBuZWNlc3NhcnknICcKKwljaGVja19hdXRob3IgIkbDtm8gQmFyIgorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitGcm9tOiA9P1VURi04P3E/Rj1DMz1CNm89MjBCPTJFPTIwQmFyPz0gPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmZjMjA0Ny1lbmNvZGVkIGZyb20taGVhZGVycyBsZWF2ZSBubyByZmM4MjIgc3BlY2lhbHMnICcKKwljaGVja19hdXRob3IgIkbDtm8gQi4gQmFyIgorJworCitjYXQgPmV4cGVjdCA8PEVPRgorRnJvbTogZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl9mb29fYmFyXworIDxhdXRob3JAZXhhbXBsZS5jb20+CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC1wYXRjaCB3cmFwcyBtb2RlcmF0ZWx5IGxvbmcgZnJvbS1oZWFkZXIgKGFzY2lpKScgJworCWNoZWNrX2F1dGhvciAiZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl9mb29fYmFyX2Zvb19iYXJfZm9vX2Jhcl9mb29fYmFyXyIKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworRnJvbTogRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIKKyBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28KKyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdyYXBzIGV4dHJlbWVseSBsb25nIGZyb20taGVhZGVyIChhc2NpaSknICcKKwljaGVja19hdXRob3IgIkZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIiCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK0Zyb206ICJGb28uQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhcgorIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbworIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciIgPGF1dGhvckBleGFtcGxlLmNvbT4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHdyYXBzIGV4dHJlbWVseSBsb25nIGZyb20taGVhZGVyIChyZmM4MjIpJyAnCisJY2hlY2tfYXV0aG9yICJGb28uQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIgorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitGcm9tOiA9P1VURi04P3E/Rm89QzM9QjY9MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjBGb28/PQorID0/VVRGLTg/cT89MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjA/PQorID0/VVRGLTg/cT9CYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI/PQorID0/VVRGLTg/cT89MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjBGb289MjBCYXI9MjA/PQorID0/VVRGLTg/cT9Gb289MjBCYXI9MjBGb289MjBCYXI/PSA8YXV0aG9yQGV4YW1wbGUuY29tPgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQtcGF0Y2ggd3JhcHMgZXh0cmVtZWx5IGxvbmcgZnJvbS1oZWFkZXIgKHJmYzIwNDcpJyAnCisJY2hlY2tfYXV0aG9yICJGb8O2IEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciBGb28gQmFyIEZvbyBCYXIgRm9vIEJhciIKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworU3ViamVjdDogaGVhZGVyIHdpdGggLiBpbiBpdAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJqZWN0IGxpbmVzIGRvIG5vdCBoYXZlIDgyMiBhdG9tLXF1b3RpbmcnICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiaGVhZGVyIHdpdGggLiBpbiBpdCIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1rIC0xIC0tc3Rkb3V0ID5wYXRjaCAmJgorCWdyZXAgXlN1YmplY3Q6IHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1N1YmplY3Q6IFtQUkVGSVggMS8xXSBoZWFkZXIgd2l0aCAuIGluIGl0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmplY3QgcHJlZml4ZXMgaGF2ZSBzcGFjZSBwcmVwZW5kZWQnICcKKwlnaXQgZm9ybWF0LXBhdGNoIC1uIC0xIC0tc3Rkb3V0IC0tc3ViamVjdC1wcmVmaXg9UFJFRklYID5wYXRjaCAmJgorCWdyZXAgXlN1YmplY3Q6IHBhdGNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK1N1YmplY3Q6IFsxLzFdIGhlYWRlciB3aXRoIC4gaW4gaXQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgc3ViamVjdCBwcmVmaXggZG9lcyBub3QgaGF2ZSBleHRyYSBzcGFjZScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLW4gLTEgLS1zdGRvdXQgLS1zdWJqZWN0LXByZWZpeD0gPnBhdGNoICYmCisJZ3JlcCBeU3ViamVjdDogcGF0Y2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mcm9tPWlkZW50IG5vdGljZXMgYm9ndXMgaWRlbnQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tZnJvbT1mb28gPnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZnJvbT1pZGVudCByZXBsYWNlcyBhdXRob3InICcKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IC0tZnJvbT0iTWUgPG1lQGV4YW1wbGUuY29tPiIgPnBhdGNoICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUZyb206IE1lIDxtZUBleGFtcGxlLmNvbT4KKworCUZyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisKKwlFT0YKKwlzZWQgLW5lICIvXkZyb206L3A7IC9eJC9wOyAvXi0tLSQvcSIgPHBhdGNoID5wYXRjaC5oZWFkICYmCisJdGVzdF9jbXAgZXhwZWN0IHBhdGNoLmhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mcm9tIHVzZXMgY29tbWl0dGVyIGlkZW50JyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLWZyb20gPnBhdGNoICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUZyb206IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKworCUZyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisKKwlFT0YKKwlzZWQgLW5lICIvXkZyb206L3A7IC9eJC9wOyAvXi0tLSQvcSIgPHBhdGNoID5wYXRjaC5oZWFkICYmCisJdGVzdF9jbXAgZXhwZWN0IHBhdGNoLmhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mcm9tIG9taXRzIHJlZHVuZGFudCBpbi1ib2R5IGhlYWRlcicgJworCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLS1mcm9tPSJBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPnBhdGNoICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUZyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisKKwlFT0YKKwlzZWQgLW5lICIvXkZyb206L3A7IC9eJC9wOyAvXi0tLSQvcSIgPHBhdGNoID5wYXRjaC5oZWFkICYmCisJdGVzdF9jbXAgZXhwZWN0IHBhdGNoLmhlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4tYm9keSBoZWFkZXJzIHRyaWdnZXIgY29udGVudCBlbmNvZGluZycgJworCUdJVF9BVVRIT1JfTkFNRT0iw6l4w7Z0w6xjIiB0ZXN0X2NvbW1pdCBleG90aWMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRF4iICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCAtLWZyb20gPnBhdGNoICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUZyb206IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKKworCUZyb206IMOpeMO2dMOsYyA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisJRU9GCisJc2VkIC1uZSAiL15Gcm9tOi9wOyAvXiQvcDsgL15Db250ZW50LVR5cGUvcDsgL14tLS0kL3EiIDxwYXRjaCA+cGF0Y2guaGVhZCAmJgorCXRlc3RfY21wIGV4cGVjdCBwYXRjaC5oZWFkCisnCisKK2FwcGVuZF9zaWdub2ZmKCkKK3sKKwlDPSQoZ2l0IGNvbW1pdC10cmVlIEhFQUReXnt0cmVlfSAtcCBIRUFEKSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1zaWdub2ZmICRDXi4uJEMgPmFwcGVuZF9zaWdub2ZmLnBhdGNoICYmCisJc2VkIC1uIC1lICIxLC9eLS0tJC9wIiBhcHBlbmRfc2lnbm9mZi5wYXRjaCB8CisJCWVncmVwIC1uICJeU3ViamVjdHxTaWdufF4kIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmOiBjb21taXQgd2l0aCBubyBib2R5JyAnCisJYXBwZW5kX3NpZ25vZmYgPC9kZXYvbnVsbCA+YWN0dWFsICYmCisJY2F0IDw8XEVPRiB8IHNlZCAicy9FT0wkLy8iID5leHBlY3RlZCAmJgorNDpTdWJqZWN0OiBbUEFUQ0hdIEVPTAorODoKKzk6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IGNvbW1pdCB3aXRoIG9ubHkgc3ViamVjdCcgJworCWVjaG8gc3ViamVjdCB8IGFwcGVuZF9zaWdub2ZmID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorNDpTdWJqZWN0OiBbUEFUQ0hdIHN1YmplY3QKKzg6Cis5OlNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmOiBjb21taXQgd2l0aCBvbmx5IHN1YmplY3QgdGhhdCBkb2VzIG5vdCBlbmQgd2l0aCBOTCcgJworCXByaW50ZiBzdWJqZWN0IHwgYXBwZW5kX3NpZ25vZmYgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCis0OlN1YmplY3Q6IFtQQVRDSF0gc3ViamVjdAorODoKKzk6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IG5vIGV4aXN0aW5nIHNpZ25vZmZzJyAnCisJYXBwZW5kX3NpZ25vZmYgPDxcRU9GID5hY3R1YWwgJiYKK3N1YmplY3QKKworYm9keQorRU9GCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzQ6U3ViamVjdDogW1BBVENIXSBzdWJqZWN0Cis4OgorMTA6CisxMTpTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZjogbm8gZXhpc3Rpbmcgc2lnbm9mZnMgYW5kIG5vIHRyYWlsaW5nIE5MJyAnCisJcHJpbnRmICJzdWJqZWN0XG5cbmJvZHkiIHwgYXBwZW5kX3NpZ25vZmYgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCis0OlN1YmplY3Q6IFtQQVRDSF0gc3ViamVjdAorODoKKzEwOgorMTE6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IHNvbWUgcmFuZG9tIHNpZ25vZmYnICcKKwlhcHBlbmRfc2lnbm9mZiA8PFxFT0YgPmFjdHVhbCAmJgorc3ViamVjdAorCitib2R5CisKK1NpZ25lZC1vZmYtYnk6IG15QGhvdXNlCitFT0YKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorNDpTdWJqZWN0OiBbUEFUQ0hdIHN1YmplY3QKKzg6CisxMDoKKzExOlNpZ25lZC1vZmYtYnk6IG15QGhvdXNlCisxMjpTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZjogbWlzYyBjb25mb3JtaW5nIGZvb3RlciBlbGVtZW50cycgJworCWFwcGVuZF9zaWdub2ZmIDw8XEVPRiA+YWN0dWFsICYmCitzdWJqZWN0CisKK2JvZHkKKworU2lnbmVkLW9mZi1ieTogbXlAaG91c2UKKyhjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkpCitUZXN0ZWQtYnk6IFNvbWUgT25lIDxzb21lb25lQGV4YW1wbGUuY29tPgorQnVnOiAxMjM0CitFT0YKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorNDpTdWJqZWN0OiBbUEFUQ0hdIHN1YmplY3QKKzg6CisxMDoKKzExOlNpZ25lZC1vZmYtYnk6IG15QGhvdXNlCisxNTpTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZjogc29tZSByYW5kb20gc2lnbm9mZi1hbGlrZScgJworCWFwcGVuZF9zaWdub2ZmIDw8XEVPRiA+YWN0dWFsICYmCitzdWJqZWN0CisKK2JvZHkKK0Zvb2xlZC1ieS1tZTogbXlAaG91c2UKK0VPRgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCis0OlN1YmplY3Q6IFtQQVRDSF0gc3ViamVjdAorODoKKzExOgorMTI6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IG5vdCByZWFsbHkgYSBzaWdub2ZmJyAnCisJYXBwZW5kX3NpZ25vZmYgPDxcRU9GID5hY3R1YWwgJiYKK3N1YmplY3QKKworSSB3YW50IHRvIG1lbnRpb24gYWJvdXQgU2lnbmVkLW9mZi1ieTogaGVyZS4KK0VPRgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCis0OlN1YmplY3Q6IFtQQVRDSF0gc3ViamVjdAorODoKKzk6SSB3YW50IHRvIG1lbnRpb24gYWJvdXQgU2lnbmVkLW9mZi1ieTogaGVyZS4KKzEwOgorMTE6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IG5vdCByZWFsbHkgYSBzaWdub2ZmICgyKScgJworCWFwcGVuZF9zaWdub2ZmIDw8XEVPRiA+YWN0dWFsICYmCitzdWJqZWN0CisKK015IHVuZm9ydHVuYXRlCitTaWduZWQtb2ZmLWJ5OiBleGFtcGxlIGhhcHBlbnMgdG8gYmUgd3JhcHBlZCBoZXJlLgorRU9GCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzQ6U3ViamVjdDogW1BBVENIXSBzdWJqZWN0Cis4OgorMTA6U2lnbmVkLW9mZi1ieTogZXhhbXBsZSBoYXBwZW5zIHRvIGJlIHdyYXBwZWQgaGVyZS4KKzExOgorMTI6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IHZhbGlkIFMtby1iIHBhcmFncmFwaCBpbiB0aGUgbWlkZGxlJyAnCisJYXBwZW5kX3NpZ25vZmYgPDxcRU9GID5hY3R1YWwgJiYKK3N1YmplY3QKKworU2lnbmVkLW9mZi1ieTogbXlAaG91c2UKK1NpZ25lZC1vZmYtYnk6IHlvdXJAaG91c2UKKworQSBsb3Qgb2YgaG91c2VzLgorRU9GCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzQ6U3ViamVjdDogW1BBVENIXSBzdWJqZWN0Cis4OgorOTpTaWduZWQtb2ZmLWJ5OiBteUBob3VzZQorMTA6U2lnbmVkLW9mZi1ieTogeW91ckBob3VzZQorMTE6CisxMzoKKzE0OlNpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmOiB0aGUgc2FtZSBzaWdub2ZmIGF0IHRoZSBlbmQnICcKKwlhcHBlbmRfc2lnbm9mZiA8PFxFT0YgPmFjdHVhbCAmJgorc3ViamVjdAorCitib2R5CisKK1NpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0VPRgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCis0OlN1YmplY3Q6IFtQQVRDSF0gc3ViamVjdAorODoKKzEwOgorMTE6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25vZmY6IHRoZSBzYW1lIHNpZ25vZmYgYXQgdGhlIGVuZCwgbm8gdHJhaWxpbmcgTkwnICcKKwlwcmludGYgInN1YmplY3RcblxuU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiIgfAorCQlhcHBlbmRfc2lnbm9mZiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzQ6U3ViamVjdDogW1BBVENIXSBzdWJqZWN0Cis4OgorOTpTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZjogdGhlIHNhbWUgc2lnbm9mZiBOT1QgYXQgdGhlIGVuZCcgJworCWFwcGVuZF9zaWdub2ZmIDw8XEVPRiA+YWN0dWFsICYmCitzdWJqZWN0CisKK2JvZHkKKworU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorU2lnbmVkLW9mZi1ieTogbXlAaG91c2UKK0VPRgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCis0OlN1YmplY3Q6IFtQQVRDSF0gc3ViamVjdAorODoKKzEwOgorMTE6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorMTI6U2lnbmVkLW9mZi1ieTogbXlAaG91c2UKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmOiBkZXRlY3QgZ2FyYmFnZSBpbiBub24tY29uZm9ybWluZyBmb290ZXInICcKKwlhcHBlbmRfc2lnbm9mZiA8PFxFT0YgPmFjdHVhbCAmJgorc3ViamVjdAorCitib2R5CisKK1Rlc3RlZC1ieTogbXlAaG91c2UKK1NvbWUgVHJhc2gKK1NpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK0VPRgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCis0OlN1YmplY3Q6IFtQQVRDSF0gc3ViamVjdAorODoKKzEwOgorMTM6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorMTQ6CisxNTpTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZjogZm9vdGVyIGJlZ2lucyB3aXRoIG5vbi1zaWdub2ZmIHdpdGhvdXQgQCBzaWduJyAnCisJYXBwZW5kX3NpZ25vZmYgPDxcRU9GID5hY3R1YWwgJiYKK3N1YmplY3QKKworYm9keQorCitSZXZpZXdlZC1pZDogTm9vbmUKK1Rlc3RlZC1ieTogbXlAaG91c2UKK0NoYW5nZS1pZDogSWRlYWRiZWVmCitTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitCdWc6IDEyMzQKK0VPRgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCis0OlN1YmplY3Q6IFtQQVRDSF0gc3ViamVjdAorODoKKzEwOgorMTQ6U2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCBwYXRjaCBpZ25vcmVzIGNvbG9yLnVpJyAnCisJdGVzdF91bmNvbmZpZyBjb2xvci51aSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPmV4cGVjdCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLnVpIGFsd2F5cyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHVzaW5nIGJyYW5jaCBkZXNjcmlwdGlvbiAoMSknICcKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiBoZWxsbyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgbWFzdGVyID5hY3R1YWwgJiYKKwlncmVwIGhlbGxvIGFjdHVhbCA+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGxldHRlciB1c2luZyBicmFuY2ggZGVzY3JpcHRpb24gKDIpJyAnCisJZ2l0IGNoZWNrb3V0IHJlYnVpbGQtMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5yZWJ1aWxkLTEuZGVzY3JpcHRpb24gaGVsbG8gJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tY292ZXItbGV0dGVyIHJlYnVpbGQtMX4yLi5yZWJ1aWxkLTEgPmFjdHVhbCAmJgorCWdyZXAgaGVsbG8gYWN0dWFsID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHVzaW5nIGJyYW5jaCBkZXNjcmlwdGlvbiAoMyknICcKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiBoZWxsbyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgXm1hc3RlciByZWJ1aWxkLTEgPmFjdHVhbCAmJgorCWdyZXAgaGVsbG8gYWN0dWFsID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHVzaW5nIGJyYW5jaCBkZXNjcmlwdGlvbiAoNCknICcKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiBoZWxsbyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgbWFzdGVyLi4gPmFjdHVhbCAmJgorCWdyZXAgaGVsbG8gYWN0dWFsID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIHVzaW5nIGJyYW5jaCBkZXNjcmlwdGlvbiAoNSknICcKKwlnaXQgY2hlY2tvdXQgcmVidWlsZC0xICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnJlYnVpbGQtMS5kZXNjcmlwdGlvbiBoZWxsbyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLS1jb3Zlci1sZXR0ZXIgLTIgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCBoZWxsbyBhY3R1YWwgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgdXNpbmcgYnJhbmNoIGRlc2NyaXB0aW9uICg2KScgJworCWdpdCBjaGVja291dCByZWJ1aWxkLTEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gucmVidWlsZC0xLmRlc2NyaXB0aW9uIGhlbGxvICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciAtMiA+YWN0dWFsICYmCisJZ3JlcCBoZWxsbyBhY3R1YWwgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgd2l0aCBub3RoaW5nJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWNvdmVyLWxldHRlciA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgbGV0dGVyIGF1dG8nICcKKwlta2RpciAtcCB0bXAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiB0bXA7CisJCWdpdCBjb25maWcgLS11bnNldCBmb3JtYXQuY292ZXJsZXR0ZXIiICYmCisKKwlnaXQgY29uZmlnIGZvcm1hdC5jb3ZlcmxldHRlciBhdXRvICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyB0bXAgLTEgPmxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGxpc3QgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHRtcCAtMiA+bGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3ZlciBsZXR0ZXIgYXV0byB1c2VyIG92ZXJyaWRlJyAnCisJbWtkaXIgLXAgdG1wICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgdG1wOworCQlnaXQgY29uZmlnIC0tdW5zZXQgZm9ybWF0LmNvdmVybGV0dGVyIiAmJgorCisJZ2l0IGNvbmZpZyBmb3JtYXQuY292ZXJsZXR0ZXIgYXV0byAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLW8gdG1wIC0tY292ZXItbGV0dGVyIC0xID5saXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBsaXN0ICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtbyB0bXAgLS1jb3Zlci1sZXR0ZXIgLTIgPmxpc3QgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIGxpc3QgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1vIHRtcCAtLW5vLWNvdmVyLWxldHRlciAtMSA+bGlzdCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgbGlzdCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLW8gdG1wIC0tbm8tY292ZXItbGV0dGVyIC0yID5saXN0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBsaXN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2ggYi90L3Q0MDE1LWRpZmYtd2hpdGVzcGFjZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNDM0MTU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxNS1kaWZmLXdoaXRlc3BhY2Uuc2gKQEAgLTAsMCArMSw5MzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHNwZWNpYWwgd2hpdGVzcGFjZSBpbiBkaWZmIGVuZ2luZS4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJheSBMZWh0aW5pZW1pJ3MgZXhhbXBsZSIgJworCWNhdCA8PC1cRU9GID54ICYmCisJZG8geworCSAgIG5vdGhpbmc7CisJfSB3aGlsZSAoMCk7CisJRU9GCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB4ICYmCisKKwljYXQgPDwtXEVPRiA+eCAmJgorCWRvCisJeworCSAgIG5vdGhpbmc7CisJfQorCXdoaWxlICgwKTsKKwlFT0YKKworCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwlpbmRleCBhZGYzOTM3Li42ZWRjMTcyIDEwMDY0NAorCS0tLSBhL3gKKwkrKysgYi94CisJQEAgLTEsMyArMSw1IEBACisJLWRvIHsKKwkrZG8KKwkreworCSAgICBub3RoaW5nOworCS19IHdoaWxlICgwKTsKKwkrfQorCSt3aGlsZSAoMCk7CisJRU9GCisKKwlnaXQgZGlmZiA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dCAmJgorCisJZ2l0IGRpZmYgLXcgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQgJiYKKworCWdpdCBkaWZmIC1iID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fub3RoZXIgdGVzdCwgd2l0aG91dCBvcHRpb25zJyAnCisJdHIgUSAiXDAxNSIgPDwtXEVPRiA+eCAmJgorCXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCisJd2hpdGVzcGFjZSBjaGFuZ2UKKwl3aGl0ZXNwYWNlIGluIHRoZSBtaWRkbGUKKwl3aGl0ZXNwYWNlIGF0IGVuZAorCXVuY2hhbmdlZCBsaW5lCisJQ1IgYXQgZW5kUQorCUVPRgorCisJZ2l0IHVwZGF0ZS1pbmRleCB4ICYmCisKKwl0ciAiXyIgIiAiIDw8LVxFT0YgPnggJiYKKwlfCXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCisJd2hpdGVzcGFjZSAJIGNoYW5nZQorCXdoaXRlIHNwYWNlIGluIHRoZSBtaWRkbGUKKwl3aGl0ZXNwYWNlIGF0IGVuZF9fCisJdW5jaGFuZ2VkIGxpbmUKKwlDUiBhdCBlbmQKKwlFT0YKKworCXRyICJRXyIgIlwwMTUgIiA8PC1cRU9GID5leHBlY3QgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwlpbmRleCBkOTlhZjIzLi4yMmQ5ZjczIDEwMDY0NAorCS0tLSBhL3gKKwkrKysgYi94CisJQEAgLTEsNiArMSw2IEBACisJLXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCisJLXdoaXRlc3BhY2UgY2hhbmdlCisJLXdoaXRlc3BhY2UgaW4gdGhlIG1pZGRsZQorCS13aGl0ZXNwYWNlIGF0IGVuZAorCSsgCXdoaXRlc3BhY2UgYXQgYmVnaW5uaW5nCisJK3doaXRlc3BhY2UgCSBjaGFuZ2UKKwkrd2hpdGUgc3BhY2UgaW4gdGhlIG1pZGRsZQorCSt3aGl0ZXNwYWNlIGF0IGVuZF9fCisJIHVuY2hhbmdlZCBsaW5lCisJLUNSIGF0IGVuZFEKKwkrQ1IgYXQgZW5kCisJRU9GCisKKwlnaXQgZGlmZiA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dCAmJgorCisJPmV4cGVjdCAmJgorCWdpdCBkaWZmIC13ID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0ICYmCisKKwlnaXQgZGlmZiAtdyAtYiA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dCAmJgorCisJZ2l0IGRpZmYgLXcgLS1pZ25vcmUtc3BhY2UtYXQtZW9sID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0ICYmCisKKwlnaXQgZGlmZiAtdyAtYiAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQgJiYKKworCisJdHIgIlFfIiAiXDAxNSAiIDw8LVxFT0YgPmV4cGVjdCAmJgorCWRpZmYgLS1naXQgYS94IGIveAorCWluZGV4IGQ5OWFmMjMuLjIyZDlmNzMgMTAwNjQ0CisJLS0tIGEveAorCSsrKyBiL3gKKwlAQCAtMSw2ICsxLDYgQEAKKwktd2hpdGVzcGFjZSBhdCBiZWdpbm5pbmcKKwkrXwl3aGl0ZXNwYWNlIGF0IGJlZ2lubmluZworCSB3aGl0ZXNwYWNlIAkgY2hhbmdlCisJLXdoaXRlc3BhY2UgaW4gdGhlIG1pZGRsZQorCSt3aGl0ZSBzcGFjZSBpbiB0aGUgbWlkZGxlCisJIHdoaXRlc3BhY2UgYXQgZW5kX18KKwkgdW5jaGFuZ2VkIGxpbmUKKwkgQ1IgYXQgZW5kCisJRU9GCisJZ2l0IGRpZmYgLWIgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQgJiYKKworCWdpdCBkaWZmIC1iIC0taWdub3JlLXNwYWNlLWF0LWVvbCA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dCAmJgorCisJdHIgIlFfIiAiXDAxNSAiIDw8LVxFT0YgPmV4cGVjdCAmJgorCWRpZmYgLS1naXQgYS94IGIveAorCWluZGV4IGQ5OWFmMjMuLjIyZDlmNzMgMTAwNjQ0CisJLS0tIGEveAorCSsrKyBiL3gKKwlAQCAtMSw2ICsxLDYgQEAKKwktd2hpdGVzcGFjZSBhdCBiZWdpbm5pbmcKKwktd2hpdGVzcGFjZSBjaGFuZ2UKKwktd2hpdGVzcGFjZSBpbiB0aGUgbWlkZGxlCisJK18Jd2hpdGVzcGFjZSBhdCBiZWdpbm5pbmcKKwkrd2hpdGVzcGFjZSAJIGNoYW5nZQorCSt3aGl0ZSBzcGFjZSBpbiB0aGUgbWlkZGxlCisJIHdoaXRlc3BhY2UgYXQgZW5kX18KKwkgdW5jaGFuZ2VkIGxpbmUKKwkgQ1IgYXQgZW5kCisJRU9GCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3BhY2UtYXQtZW9sID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZS1ibGFuay1saW5lczogb25seSBuZXcgbGluZXMnICcKKwl0ZXN0X3NlcSA1ID54ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCB4ICYmCisJdGVzdF9zZXEgNSB8IHNlZCAiLzMvaVxcCisiID54ICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBvdXQgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZS1ibGFuay1saW5lczogb25seSBuZXcgbGluZXMgd2l0aCBzcGFjZScgJworCXRlc3Rfc2VxIDUgPnggJiYKKwlnaXQgdXBkYXRlLWluZGV4IHggJiYKKwl0ZXN0X3NlcSA1IHwgc2VkICIvMy9pXFwKKyAiID54ICYmCisJZ2l0IGRpZmYgLXcgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBvdXQgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZS1ibGFuay1saW5lczogYWZ0ZXIgY2hhbmdlJyAnCisJY2F0IDw8LVxFT0YgPnggJiYKKwkxCisJMgorCisJMworCTQKKwk1CisKKwk2CisJNworCUVPRgorCWdpdCB1cGRhdGUtaW5kZXggeCAmJgorCWNhdCA8PC1cRU9GID54ICYmCisJY2hhbmdlCisKKwkxCisJMgorCTMKKwk0CisJNQorCTYKKworCTcKKwlFT0YKKwlnaXQgZGlmZiAtLWludGVyLWh1bmstY29udGV4dD0xMDAgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dC50bXAgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwktLS0gYS94CisJKysrIGIveAorCUBAIC0xLDYgKzEsNyBAQAorCStjaGFuZ2UKKwkrCisJIDEKKwkgMgorCS0KKwkgMworCSA0CisJIDUKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgb3V0LnRtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUtYmxhbmstbGluZXM6IGJlZm9yZSBjaGFuZ2UnICcKKwljYXQgPDwtXEVPRiA+eCAmJgorCTEKKwkyCisKKwkzCisJNAorCTUKKwk2CisJNworCUVPRgorCWdpdCB1cGRhdGUtaW5kZXggeCAmJgorCWNhdCA8PC1cRU9GID54ICYmCisKKwkxCisJMgorCTMKKwk0CisJNQorCisJNgorCTcKKwljaGFuZ2UKKwlFT0YKKwlnaXQgZGlmZiAtLWludGVyLWh1bmstY29udGV4dD0xMDAgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dC50bXAgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwktLS0gYS94CisJKysrIGIveAorCUBAIC00LDUgKzQsNyBAQAorCSAzCisJIDQKKwkgNQorCSsKKwkgNgorCSA3CisJK2NoYW5nZQorCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBvdXQudG1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2lnbm9yZS1ibGFuay1saW5lczogYmV0d2VlbiBjaGFuZ2VzJyAnCisJY2F0IDw8LVxFT0YgPnggJiYKKwkxCisJMgorCTMKKwk0CisJNQorCisKKwk2CisJNworCTgKKwk5CisJMTAKKwlFT0YKKwlnaXQgdXBkYXRlLWluZGV4IHggJiYKKwljYXQgPDwtXEVPRiA+eCAmJgorCWNoYW5nZQorCTEKKwkyCisKKwkzCisJNAorCTUKKwk2CisJNworCTgKKworCTkKKwkxMAorCWNoYW5nZQorCUVPRgorCWdpdCBkaWZmIC0taWdub3JlLWJsYW5rLWxpbmVzID5vdXQudG1wICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZGlmZiAtLWdpdCBhL3ggYi94CisJLS0tIGEveAorCSsrKyBiL3gKKwlAQCAtMSw1ICsxLDcgQEAKKwkrY2hhbmdlCisJIDEKKwkgMgorCSsKKwkgMworCSA0CisJIDUKKwlAQCAtOCw1ICs4LDcgQEAKKwkgNgorCSA3CisJIDgKKwkrCisJIDkKKwkgMTAKKwkrY2hhbmdlCisJRU9GCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIG91dC50bXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlLWJsYW5rLWxpbmVzOiBiZXR3ZWVuIGNoYW5nZXMgKHdpdGggaW50ZXJodW5rY3R4KScgJworCXRlc3Rfc2VxIDEwID54ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCB4ICYmCisJY2F0IDw8LVxFT0YgPnggJiYKKwljaGFuZ2UKKwkxCisJMgorCisJMworCTQKKwk1CisKKwk2CisJNworCTgKKwk5CisKKwkxMAorCWNoYW5nZQorCUVPRgorCWdpdCBkaWZmIC0taW50ZXItaHVuay1jb250ZXh0PTIgLS1pZ25vcmUtYmxhbmstbGluZXMgPm91dC50bXAgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlkaWZmIC0tZ2l0IGEveCBiL3gKKwktLS0gYS94CisJKysrIGIveAorCUBAIC0xLDEwICsxLDE1IEBACisJK2NoYW5nZQorCSAxCisJIDIKKwkrCisJIDMKKwkgNAorCSA1CisJKworCSA2CisJIDcKKwkgOAorCSA5CisJKworCSAxMAorCStjaGFuZ2UKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgb3V0LnRtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUtYmxhbmstbGluZXM6IHNjYXR0ZXJlZCBzcGFjZXMnICcKKwl0ZXN0X3NlcSAxMCA+eCAmJgorCWdpdCB1cGRhdGUtaW5kZXggeCAmJgorCWNhdCA8PC1cRU9GID54ICYmCisJY2hhbmdlCisJMQorCTIKKwkzCisKKwk0CisKKwk1CisKKwk2CisKKworCTcKKworCTgKKwk5CisJMTAKKwljaGFuZ2UKKwlFT0YKKwlnaXQgZGlmZiAtLWludGVyLWh1bmstY29udGV4dD00IC0taWdub3JlLWJsYW5rLWxpbmVzID5vdXQudG1wICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZGlmZiAtLWdpdCBhL3ggYi94CisJLS0tIGEveAorCSsrKyBiL3gKKwlAQCAtMSwzICsxLDQgQEAKKwkrY2hhbmdlCisJIDEKKwkgMgorCSAzCisJQEAgLTgsMyArMTUsNCBAQAorCSA4CisJIDkKKwkgMTAKKwkrY2hhbmdlCisJRU9GCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIG91dC50bXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlLWJsYW5rLWxpbmVzOiBzcGFjZXMgY29hbGVzY2UnICcKKwl0ZXN0X3NlcSA2ID54ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCB4ICYmCisJY2F0IDw8LVxFT0YgPnggJiYKKwljaGFuZ2UKKwkxCisJMgorCTMKKworCTQKKworCTUKKworCTYKKwljaGFuZ2UKKwlFT0YKKwlnaXQgZGlmZiAtLWludGVyLWh1bmstY29udGV4dD00IC0taWdub3JlLWJsYW5rLWxpbmVzID5vdXQudG1wICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZGlmZiAtLWdpdCBhL3ggYi94CisJLS0tIGEveAorCSsrKyBiL3gKKwlAQCAtMSw2ICsxLDExIEBACisJK2NoYW5nZQorCSAxCisJIDIKKwkgMworCSsKKwkgNAorCSsKKwkgNQorCSsKKwkgNgorCStjaGFuZ2UKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgb3V0LnRtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpZ25vcmUtYmxhbmstbGluZXM6IG1peCBjaGFuZ2VzIGFuZCBibGFuayBsaW5lcycgJworCXRlc3Rfc2VxIDE2ID54ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCB4ICYmCisJY2F0IDw8LVxFT0YgPnggJiYKKwljaGFuZ2UKKwkxCisJMgorCisJMworCTQKKwk1CisJY2hhbmdlCisJNgorCTcKKwk4CisKKwk5CisJMTAKKwkxMQorCWNoYW5nZQorCTEyCisJMTMKKwkxNAorCisJMTUKKwkxNgorCWNoYW5nZQorCUVPRgorCWdpdCBkaWZmIC0taWdub3JlLWJsYW5rLWxpbmVzID5vdXQudG1wICYmCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZGlmZiAtLWdpdCBhL3ggYi94CisJLS0tIGEveAorCSsrKyBiL3gKKwlAQCAtMSw4ICsxLDExIEBACisJK2NoYW5nZQorCSAxCisJIDIKKwkrCisJIDMKKwkgNAorCSA1CisJK2NoYW5nZQorCSA2CisJIDcKKwkgOAorCUBAIC05LDggKzEzLDExIEBACisJIDkKKwkgMTAKKwkgMTEKKwkrY2hhbmdlCisJIDEyCisJIDEzCisJIDE0CisJKworCSAxNQorCSAxNgorCStjaGFuZ2UKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgb3V0LnRtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBtaXhlZCBzcGFjZXMgYW5kIHRhYnMgaW4gaW5kZW50JyAnCisJIyBUaGlzIGlzIGluZGVudGVkIHdpdGggU1AgSFQgU1AuCisJZWNobyAiIAkgZm9vKCk7IiA+eCAmJgorCWdpdCBkaWZmIC0tY2hlY2sgfCBncmVwICJzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbWl4ZWQgdGFicyBhbmQgc3BhY2VzIGluIGluZGVudCcgJworCSMgVGhpcyBpcyBpbmRlbnRlZCB3aXRoIEhUIFNQIEhULgorCWVjaG8gIgkgCWZvbygpOyIgPnggJiYKKwlnaXQgZGlmZiAtLWNoZWNrIHwgZ3JlcCAic3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggbm8gd2hpdGVzcGFjZSBlcnJvcnMnICcKKwlnaXQgY29tbWl0IC1tICJzbmFwc2hvdCIgJiYKKwllY2hvICJmb28oKTsiID54ICYmCisJZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UnICcKKwllY2hvICJmb28oKTsgIiA+eCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd2l0aCBzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCcgJworCSMgaW5kZW50IGhhcyBzcGFjZSBmb2xsb3dlZCBieSBoYXJkIHRhYgorCWVjaG8gIiAJZm9vKCk7IiA+eCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVjayBhbmQgLS1leGl0LWNvZGUgYXJlIG5vdCBleGNsdXNpdmUnICcKKwlnaXQgY2hlY2tvdXQgeCAmJgorCWdpdCBkaWZmIC0tY2hlY2sgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVjayBhbmQgLS1xdWlldCBhcmUgbm90IGV4Y2x1c2l2ZScgJworCWdpdCBkaWZmIC0tY2hlY2sgLS1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzdGFnZWQgd2l0aCBubyB3aGl0ZXNwYWNlIGVycm9ycycgJworCWVjaG8gImZvbygpOyIgPnggJiYKKwlnaXQgYWRkIHggJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHN0YWdlZCB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UnICcKKwllY2hvICJmb28oKTsgIiA+eCAmJgorCWdpdCBhZGQgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2FjaGVkIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3RhZ2VkIHdpdGggc3BhY2UgYmVmb3JlIHRhYiBpbiBpbmRlbnQnICcKKwkjIGluZGVudCBoYXMgc3BhY2UgZm9sbG93ZWQgYnkgaGFyZCB0YWIKKwllY2hvICIgCWZvbygpOyIgPnggJiYKKwlnaXQgYWRkIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNhY2hlZCAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHdpdGggbm8gd2hpdGVzcGFjZSBlcnJvcnMgKGRpZmYtaW5kZXgpJyAnCisJZWNobyAiZm9vKCk7IiA+eCAmJgorCWdpdCBhZGQgeCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2hlY2sgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UgKGRpZmYtaW5kZXgpJyAnCisJZWNobyAiZm9vKCk7ICIgPnggJiYKKwlnaXQgYWRkIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWNoZWNrIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd2l0aCBzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCAoZGlmZi1pbmRleCknICcKKwkjIGluZGVudCBoYXMgc3BhY2UgZm9sbG93ZWQgYnkgaGFyZCB0YWIKKwllY2hvICIgCWZvbygpOyIgPnggJiYKKwlnaXQgYWRkIHggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWNoZWNrIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgc3RhZ2VkIHdpdGggbm8gd2hpdGVzcGFjZSBlcnJvcnMgKGRpZmYtaW5kZXgpJyAnCisJZWNobyAiZm9vKCk7IiA+eCAmJgorCWdpdCBhZGQgeCAmJgorCWdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tY2hlY2sgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzdGFnZWQgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIChkaWZmLWluZGV4KScgJworCWVjaG8gImZvbygpOyAiID54ICYmCisJZ2l0IGFkZCB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1jaGVjayBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHN0YWdlZCB3aXRoIHNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50IChkaWZmLWluZGV4KScgJworCSMgaW5kZW50IGhhcyBzcGFjZSBmb2xsb3dlZCBieSBoYXJkIHRhYgorCWVjaG8gIiAJZm9vKCk7IiA+eCAmJgorCWdpdCBhZGQgeCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tY2FjaGVkIC0tY2hlY2sgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB3aXRoIG5vIHdoaXRlc3BhY2UgZXJyb3JzIChkaWZmLXRyZWUpJyAnCisJZWNobyAiZm9vKCk7IiA+eCAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBjb21taXQiIHggJiYKKwlnaXQgZGlmZi10cmVlIC0tY2hlY2sgSEVBRF4gSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB3aXRoIHRyYWlsaW5nIHdoaXRlc3BhY2UgKGRpZmYtdHJlZSknICcKKwllY2hvICJmb28oKTsgIiA+eCAmJgorCWdpdCBjb21taXQgLW0gImFub3RoZXIgY29tbWl0IiB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtdHJlZSAtLWNoZWNrIEhFQUReIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgd2l0aCBzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCAoZGlmZi10cmVlKScgJworCSMgaW5kZW50IGhhcyBzcGFjZSBmb2xsb3dlZCBieSBoYXJkIHRhYgorCWVjaG8gIiAJZm9vKCk7IiA+eCAmJgorCWdpdCBjb21taXQgLW0gInlldCBhbm90aGVyIiB4ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtdHJlZSAtLWNoZWNrIEhFQUReIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdHJhaWxpbmcgd2hpdGVzcGFjZSAodHJhaWxpbmctc3BhY2U6IG9mZiknICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiLXRyYWlsaW5nLXNwYWNlIiAmJgorCWVjaG8gImZvbyAoKTsgICAiID54ICYmCisJZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0cmFpbGluZyB3aGl0ZXNwYWNlICh0cmFpbGluZy1zcGFjZTogb24pJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgInRyYWlsaW5nLXNwYWNlIiAmJgorCWVjaG8gImZvbyAoKTsgICAiID54ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGFjZSBiZWZvcmUgdGFiIGluIGluZGVudCAoc3BhY2UtYmVmb3JlLXRhYjogb2ZmKScgJworCSMgaW5kZW50IGNvbnRhaW5zIHNwYWNlIGZvbGxvd2VkIGJ5IEhUCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgIi1zcGFjZS1iZWZvcmUtdGFiIiAmJgorCWVjaG8gIiAJZm9vICgpOyIgPnggJiYKKwlnaXQgZGlmZiAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50IChzcGFjZS1iZWZvcmUtdGFiOiBvbiknICcKKwkjIGluZGVudCBjb250YWlucyBzcGFjZSBmb2xsb3dlZCBieSBIVAorCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJzcGFjZS1iZWZvcmUtdGFiIiAmJgorCWVjaG8gIiAJZm9vICgpOyAgICIgPnggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHNwYWNlcyBhcyBpbmRlbnRhdGlvbiAoaW5kZW50LXdpdGgtbm9uLXRhYjogb2ZmKScgJworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICItaW5kZW50LXdpdGgtbm9uLXRhYiIgJiYKKwllY2hvICIgICAgICAgIGZvbyAoKTsiID54ICYmCisJZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzcGFjZXMgYXMgaW5kZW50YXRpb24gKGluZGVudC13aXRoLW5vbi10YWI6IG9uKScgJworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJpbmRlbnQtd2l0aC1ub24tdGFiIiAmJgorCWVjaG8gIiAgICAgICAgZm9vICgpOyIgPnggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpdHRvLCBidXQgdGFid2lkdGg9OScgJworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJpbmRlbnQtd2l0aC1ub24tdGFiLHRhYndpZHRoPTkiICYmCisJZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0YWJzIGFuZCBzcGFjZXMgYXMgaW5kZW50YXRpb24gKGluZGVudC13aXRoLW5vbi10YWI6IG9uKScgJworCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICJpbmRlbnQtd2l0aC1ub24tdGFiIiAmJgorCWVjaG8gIgkgICAgICAgICAgICAgICAgZm9vICgpOyIgPnggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpdHRvLCBidXQgdGFid2lkdGg9MTAnICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiaW5kZW50LXdpdGgtbm9uLXRhYix0YWJ3aWR0aD0xMCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpdHRvLCBidXQgdGFid2lkdGg9MjAnICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiaW5kZW50LXdpdGgtbm9uLXRhYix0YWJ3aWR0aD0yMCIgJiYKKwlnaXQgZGlmZiAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRhYnMgYXMgaW5kZW50YXRpb24gKHRhYi1pbi1pbmRlbnQ6IG9mZiknICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAiLXRhYi1pbi1pbmRlbnQiICYmCisJZWNobyAiCWZvbyAoKTsiID54ICYmCisJZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0YWJzIGFzIGluZGVudGF0aW9uICh0YWItaW4taW5kZW50OiBvbiknICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAidGFiLWluLWluZGVudCIgJiYKKwllY2hvICIJZm9vICgpOyIgPnggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRhYnMgYW5kIHNwYWNlcyBhcyBpbmRlbnRhdGlvbiAodGFiLWluLWluZGVudDogb24pJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgInRhYi1pbi1pbmRlbnQiICYmCisJZWNobyAiCSAgICAgICAgICAgICAgICBmb28gKCk7IiA+eCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGl0dG8sIGJ1dCB0YWJ3aWR0aD0xIChtdXN0IGJlIGlycmVsZXZhbnQpJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgInRhYi1pbi1pbmRlbnQsdGFid2lkdGg9MSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWNoZWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHRhYi1pbi1pbmRlbnQgYW5kIGluZGVudC13aXRoLW5vbi10YWIgY29uZmxpY3QnICcKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAidGFiLWluLWluZGVudCxpbmRlbnQtd2l0aC1ub24tdGFiIiAmJgorCWVjaG8gImZvbyAoKTsiID54ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jaGVjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0YWItaW4taW5kZW50IGV4Y2x1ZGVkIGZyb20gd2lsZGNhcmQgd2hpdGVzcGFjZSBhdHRyaWJ1dGUnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJZWNobyAieCB3aGl0ZXNwYWNlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICIJICBmb28gKCk7IiA+eCAmJgorCWdpdCBkaWZmIC0tY2hlY2sgJiYKKwlybSAtZiAuZ2l0YXR0cmlidXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaW5lIG51bWJlcnMgaW4gLS1jaGVjayBvdXRwdXQgYXJlIGNvcnJlY3QnICcKKwllY2hvICIiID54ICYmCisJZWNobyAiZm9vKCk7ICIgPj54ICYmCisJZ2l0IGRpZmYgLS1jaGVjayB8IGdyZXAgIng6MjoiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBkZXRlY3RzIG5ldyB0cmFpbGluZyBibGFuayBsaW5lcyAoMSknICcKKwllY2hvICJmb28oKTsiID54ICYmCisJZWNobyAiIiA+PnggJiYKKwlnaXQgZGlmZiAtLWNoZWNrIHwgZ3JlcCAibmV3IGJsYW5rIGxpbmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBkZXRlY3RzIG5ldyB0cmFpbGluZyBibGFuayBsaW5lcyAoMiknICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvOyBlY2hvOyB9ID54ICYmCisJZ2l0IGFkZCB4ICYmCisJeyBlY2hvIGE7IGVjaG87IGVjaG87IGVjaG87IGVjaG87IH0gPnggJiYKKwlnaXQgZGlmZiAtLWNoZWNrIHwgZ3JlcCAibmV3IGJsYW5rIGxpbmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrZGlmZiBhbGxvd3MgbmV3IGJsYW5rIGxpbmVzJyAnCisJZ2l0IGNoZWNrb3V0IHggJiYKKwltdiB4IHkgJiYKKwkoCisJCWVjaG8gIi8qIFRoaXMgaXMgbmV3ICovIiAmJgorCQllY2hvICIiICYmCisJCWNhdCB5CisJKSA+eCAmJgorCWdpdCBkaWZmIC0tY2hlY2sKKycKKworY2F0IDw8RU9GID5leHBlY3QKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZS1vbmx5IGNoYW5nZXMgbm90IHJlcG9ydGVkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gPnggImhlbGxvIHdvcmxkIiAmJgorCWdpdCBhZGQgeCAmJgorCWdpdCBjb21taXQgLW0gImhlbGxvIDEiICYmCisJZWNobyA+eCAiaGVsbG8gIHdvcmxkIiAmJgorCWdpdCBkaWZmIC1iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0CitkaWZmIC0tZ2l0IGEveCBiL3oKK3NpbWlsYXJpdHkgaW5kZXggTlVNJQorcmVuYW1lIGZyb20geAorcmVuYW1lIHRvIHoKK2luZGV4IDM4MGMzMmEuLmE5N2I3ODUgMTAwNjQ0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2Utb25seSBjaGFuZ2VzIHJlcG9ydGVkIGFjcm9zcyByZW5hbWVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBlY2hvICIkaSRpJGkkaSRpJGkiOyBkb25lID54ICYmCisJZ2l0IGFkZCB4ICYmCisJZ2l0IGNvbW1pdCAtbSAiYmFzZSIgJiYKKwlzZWQgLWUgIjVzL14vIC8iIHggPnogJiYKKwlnaXQgcm0geCAmJgorCWdpdCBhZGQgeiAmJgorCWdpdCBkaWZmIC13IC1NIC0tY2FjaGVkIHwKKwlzZWQgLWUgIi9ec2ltaWxhcml0eSBpbmRleCAvcy9bMC05XVswLTldKi9OVU0vIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorZGlmZiAtLWdpdCBhL2VtcHR5IGIvdm9pZAorc2ltaWxhcml0eSBpbmRleCAxMDAlCityZW5hbWUgZnJvbSBlbXB0eQorcmVuYW1lIHRvIHZvaWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgZW1wdHknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJPmVtcHR5ICYmCisJZ2l0IGFkZCBlbXB0eSAmJgorCWdpdCBjb21taXQgLW0gZW1wdHkgJiYKKwlnaXQgbXYgZW1wdHkgdm9pZCAmJgorCWdpdCBkaWZmIC13IC0tY2FjaGVkIC1NID5jdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lZCBkaWZmIHdpdGggYXV0b2NybGYgY29udmVyc2lvbicgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gPnggaGVsbG8gJiYKKwlnaXQgY29tbWl0IC1tICJvbmUgc2lkZSIgeCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWVjaG8gPnggZ29vZGJ5ZSAmJgorCWdpdCBjb21taXQgLW0gInRoZSBvdGhlciBzaWRlIiB4ICYmCisJZ2l0IGNvbmZpZyBjb3JlLmF1dG9jcmxmIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisKKwlnaXQgZGlmZiB8IHNlZCAtZSAiMSwvXkBAQC9kIiA+YWN0dWFsICYmCisJISBncmVwICJeLSIgYWN0dWFsCisKKycKKworIyBTdGFydCB0ZXN0aW5nIHRoZSBjb2xvcmVkIGZvcm1hdCBmb3Igd2hpdGVzcGFjZSBjaGVja3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGlmZiBjb2xvcnMnICcKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYgYWx3YXlzICYmCisJZ2l0IGNvbmZpZyBjb2xvci5kaWZmLnBsYWluIG5vcm1hbCAmJgorCWdpdCBjb25maWcgY29sb3IuZGlmZi5tZXRhIGJvbGQgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYuZnJhZyBjeWFuICYmCisJZ2l0IGNvbmZpZyBjb2xvci5kaWZmLmZ1bmMgbm9ybWFsICYmCisJZ2l0IGNvbmZpZyBjb2xvci5kaWZmLm9sZCByZWQgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYubmV3IGdyZWVuICYmCisJZ2l0IGNvbmZpZyBjb2xvci5kaWZmLmNvbW1pdCB5ZWxsb3cgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRpZmYud2hpdGVzcGFjZSBibHVlICYmCisKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiB0aGF0IGludHJvZHVjZXMgYSBsaW5lIHdpdGggb25seSB0YWJzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgYmxhbmstYXQtZW9sICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gInRlc3QiID54ICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgeCAmJgorCWVjaG8gIntOVE59IiB8IHRyICJOVCIgIlxuXHQiID4+eCAmJgorCWdpdCAtYyBjb2xvci5kaWZmPWFsd2F5cyBkaWZmIHwgdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKKworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTxCT0xEPmRpZmYgLS1naXQgYS94IGIveDxSRVNFVD4KKwk8Qk9MRD5pbmRleCA5ZGFlYWZiLi4yODc0YjkxIDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD4tLS0gYS94PFJFU0VUPgorCTxCT0xEPisrKyBiL3g8UkVTRVQ+CisJPENZQU4+QEAgLTEgKzEsNCBAQDxSRVNFVD4KKwkgdGVzdDxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD48R1JFRU4+ezxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD48QkxVRT4JPFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj59PFJFU0VUPgorCUVPRgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHRoYXQgaW50cm9kdWNlcyBhbmQgcmVtb3ZlcyB3cyBicmVha2FnZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJeworCQllY2hvICIwLiBibGFuay1hdC1lb2wgIiAmJgorCQllY2hvICIxLiBibGFuay1hdC1lb2wgIgorCX0gPnggJiYKKwlnaXQgY29tbWl0IC1hIC0tYWxsb3ctZW1wdHkgLW0gcHJlaW1hZ2UgJiYKKwl7CisJCWVjaG8gIjAuIGJsYW5rLWF0LWVvbCAiICYmCisJCWVjaG8gIjEuIHN0aWxsLWJsYW5rLWF0LWVvbCAiICYmCisJCWVjaG8gIjIuIGFuZCBhIG5ldyBsaW5lICIKKwl9ID54ICYmCisKKwlnaXQgLWMgY29sb3IuZGlmZj1hbHdheXMgZGlmZiB8CisJdGVzdF9kZWNvZGVfY29sb3IgPmN1cnJlbnQgJiYKKworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCTxCT0xEPmRpZmYgLS1naXQgYS94IGIveDxSRVNFVD4KKwk8Qk9MRD5pbmRleCBkMDIzM2EyLi43MDA4ODZlIDEwMDY0NDxSRVNFVD4KKwk8Qk9MRD4tLS0gYS94PFJFU0VUPgorCTxCT0xEPisrKyBiL3g8UkVTRVQ+CisJPENZQU4+QEAgLTEsMiArMSwzIEBAPFJFU0VUPgorCSAwLiBibGFuay1hdC1lb2wgPFJFU0VUPgorCTxSRUQ+LTEuIGJsYW5rLWF0LWVvbCA8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPjEuIHN0aWxsLWJsYW5rLWF0LWVvbDxSRVNFVD48QkxVRT4gPFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj4yLiBhbmQgYSBuZXcgbGluZTxSRVNFVD48QkxVRT4gPFJFU0VUPgorCUVPRgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgc2FtZSB3aXRoIC0td3MtZXJyb3ItaGlnaGxpZ2h0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXsKKwkJZWNobyAiMC4gYmxhbmstYXQtZW9sICIgJiYKKwkJZWNobyAiMS4gYmxhbmstYXQtZW9sICIKKwl9ID54ICYmCisJZ2l0IGNvbW1pdCAtYSAtLWFsbG93LWVtcHR5IC1tIHByZWltYWdlICYmCisJeworCQllY2hvICIwLiBibGFuay1hdC1lb2wgIiAmJgorCQllY2hvICIxLiBzdGlsbC1ibGFuay1hdC1lb2wgIiAmJgorCQllY2hvICIyLiBhbmQgYSBuZXcgbGluZSAiCisJfSA+eCAmJgorCisJZ2l0IC1jIGNvbG9yLmRpZmY9YWx3YXlzIGRpZmYgLS13cy1lcnJvci1oaWdobGlnaHQ9ZGVmYXVsdCxvbGQgfAorCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEveCBiL3g8UkVTRVQ+CisJPEJPTEQ+aW5kZXggZDAyMzNhMi4uNzAwODg2ZSAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+LS0tIGEveDxSRVNFVD4KKwk8Qk9MRD4rKysgYi94PFJFU0VUPgorCTxDWUFOPkBAIC0xLDIgKzEsMyBAQDxSRVNFVD4KKwkgMC4gYmxhbmstYXQtZW9sIDxSRVNFVD4KKwk8UkVEPi08UkVTRVQ+PFJFRD4xLiBibGFuay1hdC1lb2w8UkVTRVQ+PEJMVUU+IDxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD48R1JFRU4+MS4gc3RpbGwtYmxhbmstYXQtZW9sPFJFU0VUPjxCTFVFPiA8UkVTRVQ+CisJPEdSRUVOPis8UkVTRVQ+PEdSRUVOPjIuIGFuZCBhIG5ldyBsaW5lPFJFU0VUPjxCTFVFPiA8UkVTRVQ+CisJRU9GCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50ICYmCisKKwlnaXQgLWMgY29sb3IuZGlmZj1hbHdheXMgZGlmZiAtLXdzLWVycm9yLWhpZ2hsaWdodD1hbGwgfAorCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEveCBiL3g8UkVTRVQ+CisJPEJPTEQ+aW5kZXggZDAyMzNhMi4uNzAwODg2ZSAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+LS0tIGEveDxSRVNFVD4KKwk8Qk9MRD4rKysgYi94PFJFU0VUPgorCTxDWUFOPkBAIC0xLDIgKzEsMyBAQDxSRVNFVD4KKwkgPFJFU0VUPjAuIGJsYW5rLWF0LWVvbDxSRVNFVD48QkxVRT4gPFJFU0VUPgorCTxSRUQ+LTxSRVNFVD48UkVEPjEuIGJsYW5rLWF0LWVvbDxSRVNFVD48QkxVRT4gPFJFU0VUPgorCTxHUkVFTj4rPFJFU0VUPjxHUkVFTj4xLiBzdGlsbC1ibGFuay1hdC1lb2w8UkVTRVQ+PEJMVUU+IDxSRVNFVD4KKwk8R1JFRU4+KzxSRVNFVD48R1JFRU4+Mi4gYW5kIGEgbmV3IGxpbmU8UkVTRVQ+PEJMVUU+IDxSRVNFVD4KKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQgJiYKKworCWdpdCAtYyBjb2xvci5kaWZmPWFsd2F5cyBkaWZmIC0td3MtZXJyb3ItaGlnaGxpZ2h0PW5vbmUgfAorCXRlc3RfZGVjb2RlX2NvbG9yID5jdXJyZW50ICYmCisKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKwk8Qk9MRD5kaWZmIC0tZ2l0IGEveCBiL3g8UkVTRVQ+CisJPEJPTEQ+aW5kZXggZDAyMzNhMi4uNzAwODg2ZSAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+LS0tIGEveDxSRVNFVD4KKwk8Qk9MRD4rKysgYi94PFJFU0VUPgorCTxDWUFOPkBAIC0xLDIgKzEsMyBAQDxSRVNFVD4KKwkgMC4gYmxhbmstYXQtZW9sIDxSRVNFVD4KKwk8UkVEPi0xLiBibGFuay1hdC1lb2wgPFJFU0VUPgorCTxHUkVFTj4rMS4gc3RpbGwtYmxhbmstYXQtZW9sIDxSRVNFVD4KKwk8R1JFRU4+KzIuIGFuZCBhIG5ldyBsaW5lIDxSRVNFVD4KKwlFT0YKKworCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE2LWRpZmYtcXVvdGUuc2ggYi90L3Q0MDE2LWRpZmYtcXVvdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2Q1NDNlYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTYtZGlmZi1xdW90ZS5zaApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1F1b3RpbmcgcGF0aHMgaW4gZGlmZiBvdXRwdXQuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitQMD0ncGF0aG5hbWUnCitQMT0ncGF0aG5hbWUJd2l0aCBIVCcKK1AyPSdwYXRobmFtZSB3aXRoIFNQJworUDM9J3BhdGhuYW1lCit3aXRoIExGJworZWNobyAyPi9kZXYvbnVsbCA+IiRQMSIgJiYgdGVzdCAtZiAiJFAxIiAmJiBybSAtZiAiJFAxIiB8fCB7CisJc2tpcF9hbGw9J1lvdXIgZmlsZXN5c3RlbSBkb2VzIG5vdCBhbGxvdyB0YWJzIGluIGZpbGVuYW1lcycKKwl0ZXN0X2RvbmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBQMC4wID4iJFAwLjAiICYmCisJZWNobyBQMC4xID4iJFAwLjEiICYmCisJZWNobyBQMC4yID4iJFAwLjIiICYmCisJZWNobyBQMC4zID4iJFAwLjMiICYmCisJZWNobyBQMS4wID4iJFAxLjAiICYmCisJZWNobyBQMS4yID4iJFAxLjIiICYmCisJZWNobyBQMS4zID4iJFAxLjMiICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IG12ICIkUDAuMCIgIlIkUDAuMCIgJiYKKwlnaXQgbXYgIiRQMC4xIiAiUiRQMS4wIiAmJgorCWdpdCBtdiAiJFAwLjIiICJSJFAyLjAiICYmCisJZ2l0IG12ICIkUDAuMyIgIlIkUDMuMCIgJiYKKwlnaXQgbXYgIiRQMS4wIiAiUiRQMC4xIiAmJgorCWdpdCBtdiAiJFAxLjIiICJSJFAyLjEiICYmCisJZ2l0IG12ICIkUDEuMyIgIlIkUDMuMSIgJiYKKwk6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cGVjdGVkIGZpbGVzJyAnCitjYXQgPmV4cGVjdCA8PFxFT0YKKyByZW5hbWUgcGF0aG5hbWUuMSA9PiAiUnBhdGhuYW1lXHR3aXRoIEhULjAiICgxMDAlKQorIHJlbmFtZSBwYXRobmFtZS4zID0+ICJScGF0aG5hbWVcbndpdGggTEYuMCIgKDEwMCUpCisgcmVuYW1lICJwYXRobmFtZVx0d2l0aCBIVC4zIiA9PiAiUnBhdGhuYW1lXG53aXRoIExGLjEiICgxMDAlKQorIHJlbmFtZSBwYXRobmFtZS4yID0+IFJwYXRobmFtZSB3aXRoIFNQLjAgKDEwMCUpCisgcmVuYW1lICJwYXRobmFtZVx0d2l0aCBIVC4yIiA9PiBScGF0aG5hbWUgd2l0aCBTUC4xICgxMDAlKQorIHJlbmFtZSBwYXRobmFtZS4wID0+IFJwYXRobmFtZS4wICgxMDAlKQorIHJlbmFtZSAicGF0aG5hbWVcdHdpdGggSFQuMCIgPT4gUnBhdGhuYW1lLjEgKDEwMCUpCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1zdW1tYXJ5IC1NIEhFQUQnICcKKwlnaXQgZGlmZiAtLXN1bW1hcnkgLU0gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLW51bXN0YXQgLU0gSEVBRCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkwCTAJcGF0aG5hbWUuMSA9PiAiUnBhdGhuYW1lXHR3aXRoIEhULjAiCisJMAkwCXBhdGhuYW1lLjMgPT4gIlJwYXRobmFtZVxud2l0aCBMRi4wIgorCTAJMAkicGF0aG5hbWVcdHdpdGggSFQuMyIgPT4gIlJwYXRobmFtZVxud2l0aCBMRi4xIgorCTAJMAlwYXRobmFtZS4yID0+IFJwYXRobmFtZSB3aXRoIFNQLjAKKwkwCTAJInBhdGhuYW1lXHR3aXRoIEhULjIiID0+IFJwYXRobmFtZSB3aXRoIFNQLjEKKwkwCTAJcGF0aG5hbWUuMCA9PiBScGF0aG5hbWUuMAorCTAJMAkicGF0aG5hbWVcdHdpdGggSFQuMCIgPT4gUnBhdGhuYW1lLjEKKwlFT0YKKwlnaXQgZGlmZiAtLW51bXN0YXQgLU0gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLXN0YXQgLU0gSEVBRCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgcGF0aG5hbWUuMSA9PiAiUnBhdGhuYW1lXHR3aXRoIEhULjAiICAgICAgICAgICAgfCAwCisJIHBhdGhuYW1lLjMgPT4gIlJwYXRobmFtZVxud2l0aCBMRi4wIiAgICAgICAgICAgIHwgMAorCSAicGF0aG5hbWVcdHdpdGggSFQuMyIgPT4gIlJwYXRobmFtZVxud2l0aCBMRi4xIiB8IDAKKwkgcGF0aG5hbWUuMiA9PiBScGF0aG5hbWUgd2l0aCBTUC4wICAgICAgICAgICAgICAgfCAwCisJICJwYXRobmFtZVx0d2l0aCBIVC4yIiA9PiBScGF0aG5hbWUgd2l0aCBTUC4xICAgIHwgMAorCSBwYXRobmFtZS4wID0+IFJwYXRobmFtZS4wICAgICAgICAgICAgICAgICAgICAgICB8IDAKKwkgInBhdGhuYW1lXHR3aXRoIEhULjAiID0+IFJwYXRobmFtZS4xICAgICAgICAgICAgfCAwCisJIDcgZmlsZXMgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorCUVPRgorCWdpdCBkaWZmIC0tc3RhdCAtTSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMTctZGlmZi1yZXR2YWwuc2ggYi90L3Q0MDE3LWRpZmYtcmV0dmFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1YTdjYTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE3LWRpZmYtcmV0dmFsLnNoCkBAIC0wLDAgKzEsMTM3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nUmV0dXJuIHZhbHVlIG9mIGRpZmZzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvICIxICIgPmEgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIHplcm90aCAmJgorCWVjaG8gMSA+YSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gZmlyc3QgJiYKKwllY2hvIDIgPmIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLXF1aWV0IC13ICBIRUFEXl4gSEVBRF4nICcKKwlnaXQgZGlmZiAtLXF1aWV0IC13IEhFQUReXiBIRUFEXgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLXF1aWV0IEhFQUReXiBIRUFEXicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgSEVBRF5eIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0tcXVpZXQgLXcgIEhFQUReIEhFQUQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0IC13IEhFQUReIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBIRUFEXiBIRUFEJyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLXRyZWUgLS1leGl0LWNvZGUgSEVBRF4gSEVBRAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBIRUFEXiBIRUFEIC0tIGEnICcKKwlnaXQgZGlmZi10cmVlIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQgLS0gYQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBIRUFEXiBIRUFEIC0tIGInICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtdHJlZSAtLWV4aXQtY29kZSBIRUFEXiBIRUFEIC0tIGIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VjaG8gSEVBRCB8IGdpdCBkaWZmLXRyZWUgLS1zdGRpbicgJworCWVjaG8gJChnaXQgcmV2LXBhcnNlIEhFQUQpIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLXRyZWUgLS1leGl0LWNvZGUgLS1zdGRpbgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBIRUFEIEhFQUQnICcKKwlnaXQgZGlmZi10cmVlIC0tZXhpdC1jb2RlIEhFQUQgSEVBRAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMnICcKKwlnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgSEVBRCcgJworCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIEhFQUQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUReJyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIEhFQUReCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEXicgJworCWVjaG8gdGV4dCA+PmIgJiYKKwllY2hvIDMgPmMgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgLS1jYWNoZWQgSEVBRF4KKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgLVN0ZXh0IEhFQUReIEhFQUQgLS0gYicgJworCWdpdCBjb21taXQgLW0gInRleHQgaW4gYiIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtdHJlZSAtcCAtLWV4aXQtY29kZSAtU3RleHQgSEVBRF4gSEVBRCAtLSBiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIC1Tbm90LWZvdW5kIEhFQUReIEhFQUQgLS0gYicgJworCWdpdCBkaWZmLXRyZWUgLXAgLS1leGl0LWNvZGUgLVNub3QtZm91bmQgSEVBRF4gSEVBRCAtLSBiCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1maWxlcycgJworCWVjaG8gMyA+PmMgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQnICcKKwlnaXQgdXBkYXRlLWluZGV4IGMgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgLS1jYWNoZWQgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZWNrIC0tZXhpdC1jb2RlIHJldHVybnMgMCBmb3Igbm8gZGlmZmVyZW5jZScgJworCisJZ2l0IGRpZmYgLS1jaGVjayAtLWV4aXQtY29kZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlY2sgLS1leGl0LWNvZGUgcmV0dXJucyAxIGZvciBhIGNsZWFuIGRpZmZlcmVuY2UnICcKKworCWVjaG8gImdvb2QiID4gYSAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLWNoZWNrIC0tZXhpdC1jb2RlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVjayAtLWV4aXQtY29kZSByZXR1cm5zIDMgZm9yIGEgZGlydHkgZGlmZmVyZW5jZScgJworCisJZWNobyAiYmFkICAgIiA+PiBhICYmCisJdGVzdF9leHBlY3RfY29kZSAzIGdpdCBkaWZmIC0tY2hlY2sgLS1leGl0LWNvZGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZWNrIHdpdGggLS1uby1wYWdlciByZXR1cm5zIDIgZm9yIGRpcnR5IGRpZmZlcmVuY2UnICcKKworCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgLS1uby1wYWdlciBkaWZmIC0tY2hlY2sKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBzaG91bGQgdGVzdCBub3QganVzdCB0aGUgbGFzdCBsaW5lJyAnCisJZWNobyAiIiA+PmEgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDIgZ2l0IC0tbm8tcGFnZXIgZGlmZiAtLWNoZWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZGV0ZWN0cyBsZWZ0b3ZlciBjb25mbGljdCBtYXJrZXJzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWVjaG8gYmluYXJ5ID4+YiAmJgorCWdpdCBjb21taXQgLW0gInNpZGUiIGIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IGFkZCBiICYmCisJdGVzdF9leHBlY3RfY29kZSAyIGdpdCAtLW5vLXBhZ2VyIGRpZmYgLS1jYWNoZWQgLS1jaGVjayA+dGVzdC5vdXQgJiYKKwl0ZXN0IDMgPSAkKGdyZXAgImNvbmZsaWN0IG1hcmtlciIgdGVzdC5vdXQgfCB3YyAtbCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGhvbm9ycyBjb25mbGljdCBtYXJrZXIgbGVuZ3RoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gIj4+Pj4+Pj4gYm9vIiA+PmIgJiYKKwllY2hvICI9PT09PT0iID4+YSAmJgorCWdpdCBkaWZmIC0tY2hlY2sgYSAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMiBnaXQgZGlmZiAtLWNoZWNrIGIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyAiPj4+Pj4+Pj4gYm9vIiA+PmIgJiYKKwllY2hvICI9PT09PT09PSIgPj5hICYmCisJZ2l0IGRpZmYgLS1jaGVjayAmJgorCWVjaG8gImIgY29uZmxpY3QtbWFya2VyLXNpemU9OCIgPi5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF9leHBlY3RfY29kZSAyIGdpdCBkaWZmIC0tY2hlY2sgYiAmJgorCWdpdCBkaWZmIC0tY2hlY2sgYSAmJgorCWdpdCByZXNldCAtLWhhcmQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2ggYi90L3Q0MDE4LWRpZmYtZnVuY25hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjczNzNkYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgtZGlmZi1mdW5jbmFtZS5zaApAQCAtMCwwICsxLDExMCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY3VzdG9tIGRpZmYgZnVuY3Rpb24gbmFtZSBwYXR0ZXJucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJIyBhIG5vbi10cml2aWFsIGN1c3RvbSBwYXR0ZXJuCisJZ2l0IGNvbmZpZyBkaWZmLmN1c3RvbTEuZnVuY25hbWUgIiFzdGF0aWMKKyFTdHJpbmcKK1teIAldLipzLioiICYmCisKKwkjIGEgY3VzdG9tIHBhdHRlcm4gd2hpY2ggbWF0Y2hlcyB0byBlbmQgb2YgbGluZQorCWdpdCBjb25maWcgZGlmZi5jdXN0b20yLmZ1bmNuYW1lICIuLi4uLi5CZWVyXCQiICYmCisKKwkjIGFsdGVybmF0aW9uIGluIHBhdHRlcm4KKwlnaXQgY29uZmlnIGRpZmYuY3VzdG9tMy5mdW5jbmFtZSAiQmVlciQiICYmCisJZ2l0IGNvbmZpZyBkaWZmLmN1c3RvbTMueGZ1bmNuYW1lICJeWyAJXSooKHB1YmxpY3xzdGF0aWMpLiopJCIgJiYKKworCSMgZm9yIHJlZ2V4cCBjb21waWxhdGlvbiB0ZXN0cworCWVjaG8gQSA+QS5qYXZhICYmCisJZWNobyBCID5CLmphdmEKKycKKworZGlmZnBhdHRlcm5zPSIKKwlhZGEKKwliaWJ0ZXgKKwljcHAKKwljc2hhcnAKKwlmb3J0cmFuCisJZm91bnRhaW4KKwlodG1sCisJamF2YQorCW1hdGxhYgorCW9iamMKKwlwYXNjYWwKKwlwZXJsCisJcGhwCisJcHl0aG9uCisJcnVieQorCXRleAorCWN1c3RvbTEKKwljdXN0b20yCisJY3VzdG9tMworIgorCitmb3IgcCBpbiAkZGlmZnBhdHRlcm5zCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImJ1aWx0aW4gJHAgcGF0dGVybiBjb21waWxlcyIgJworCQllY2hvICIqLmphdmEgZGlmZj0kcCIgPi5naXRhdHRyaWJ1dGVzICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IFwKKwkJCUEuamF2YSBCLmphdmEgMj5tc2cgJiYKKwkJdGVzdF9pMThuZ3JlcCAhIGZhdGFsIG1zZyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgZXJyb3IgbXNnCisJJworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImJ1aWx0aW4gJHAgd29yZFJlZ2V4IHBhdHRlcm4gY29tcGlsZXMiICcKKwkJZWNobyAiKi5qYXZhIGRpZmY9JHAiID4uZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1uby1pbmRleCAtLXdvcmQtZGlmZiBcCisJCQlBLmphdmEgQi5qYXZhIDI+bXNnICYmCisJCXRlc3RfaTE4bmdyZXAgISBmYXRhbCBtc2cgJiYKKwkJdGVzdF9pMThuZ3JlcCAhIGVycm9yIG1zZworCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFzdCByZWdleHAgbXVzdCBub3QgYmUgbmVnYXRlZCcgJworCWVjaG8gIiouamF2YSBkaWZmPWphdmEiID4uZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfY29uZmlnIGRpZmYuamF2YS5mdW5jbmFtZSAiIXN0YXRpYyIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgZGlmZiAtLW5vLWluZGV4IEEuamF2YSBCLmphdmEgMj5tc2cgJiYKKwl0ZXN0X2kxOG5ncmVwICI6IExhc3QgZXhwcmVzc2lvbiBtdXN0IG5vdCBiZSBuZWdhdGVkOiIgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGh1bmsgaGVhZGVyIHRlc3RzJyAnCisJZm9yIGkgaW4gJGRpZmZwYXR0ZXJucworCWRvCisJCWVjaG8gIiRpLSogZGlmZj0kaSIKKwlkb25lID4gLmdpdGF0dHJpYnV0ZXMgJiYKKworCSMgYWRkIGFsbCB0ZXN0IGZpbGVzIHRvIHRoZSBpbmRleAorCSgKKwkJY2QgIiRURVNUX0RJUkVDVE9SWSIvdDQwMTggJiYKKwkJZ2l0IC0tZ2l0LWRpcj0iJFRSQVNIX0RJUkVDVE9SWS8uZ2l0IiBhZGQgLgorCSkgJiYKKworCSMgcGxhY2UgbW9kaWZpZWQgZmlsZXMgaW4gdGhlIHdvcmt0cmVlCisJZm9yIGkgaW4gJChnaXQgbHMtZmlsZXMpCisJZG8KKwkJc2VkIC1lICJzL0NoYW5nZU1lL0lXYXNDaGFuZ2VkLyIgPCIkVEVTVF9ESVJFQ1RPUlkvdDQwMTgvJGkiID4iJGkiIHx8IHJldHVybiAxCisJZG9uZQorJworCisjIGNoZWNrIGVhY2ggaW5kaXZpZHVhbCBmaWxlCitmb3IgaSBpbiAkKGdpdCBscy1maWxlcykKK2RvCisJaWYgZ3JlcCBicm9rZW4gIiRpIiA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCXJlc3VsdD1mYWlsdXJlCisJZWxzZQorCQlyZXN1bHQ9c3VjY2VzcworCWZpCisJdGVzdF9leHBlY3RfJHJlc3VsdCAiaHVuayBoZWFkZXI6ICRpIiAiCisJCXRlc3Rfd2hlbl9maW5pc2hlZCAnY2F0IGFjdHVhbCcgJiYJIyBmb3IgZGVidWdnaW5nIG9ubHkKKwkJZ2l0IGRpZmYgLVUxICRpID5hY3R1YWwgJiYKKwkJZ3JlcCAnQEAgLiogQEAuKlJJR0hUJyBhY3R1YWwKKwkiCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9SRUFETUUgYi90L3Q0MDE4L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODNlMDFjYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvUkVBRE1FCkBAIC0wLDAgKzEsMTggQEAKK0hvdyB0byB3cml0ZSBSSUdIVCB0ZXN0IGNhc2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnNlcnQgdGhlIHdvcmQgIkNoYW5nZU1lIiAoZXhhY3RseSB0aGlzIGZvcm0pIGF0IGEgZGlzdGFuY2Ugb2YKK2F0IGxlYXN0IHR3byBsaW5lcyBmcm9tIHRoZSBsaW5lIHRoYXQgbXVzdCBhcHBlYXIgaW4gdGhlIGh1bmsgaGVhZGVyLgorCitUaGUgdGV4dCB0aGF0IG11c3QgYXBwZWFyIGluIHRoZSBodW5rIGhlYWRlciBtdXN0IGNvbnRhaW4gdGhlIHdvcmQKKyJyaWdodCIsIGJ1dCBpbiBhbGwgdXBwZXItY2FzZSwgbGlrZSBpbiB0aGUgdGl0bGUgYWJvdmUuCisKK1RvIG1hcmsgYSB0ZXN0IGNhc2UgdGhhdCBoaWdobGlnaHRzIGEgbWFsZnVuY3Rpb24sIGluc2VydCB0aGUgd29yZAorQlJPS0VOIGluIGFsbCBsb3dlci1jYXNlIHNvbWV3aGVyZSBpbiB0aGUgZmlsZS4KKworVGhpcyB0ZXh0IGlzIGEgYml0IHR3aXN0ZWQgYW5kIG91dCBvZiBvcmRlciwgYnV0IGl0IGlzIGl0c2VsZiBhCit0ZXN0IGNhc2UgZm9yIHRoZSBkZWZhdWx0IGh1bmsgaGVhZGVyIHBhdHRlcm4uIEtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCitpZiB5b3UgY2hhbmdlIGl0LgorCitCVFcsIHRoaXMgdGVzdHMgdGhhdCB0aGUgaGVhZCBsaW5lIGdvZXMgdG8gdGhlIGh1bmsgaGVhZGVyLCBub3QgdGhlIGxpbmUKK29mIGVxdWFsIHNpZ25zLgpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtYysrLWZ1bmN0aW9uIGIvdC90NDAxOC9jcHAtYysrLWZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZTZiYmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1jKystZnVuY3Rpb24KQEAgLTAsMCArMSw0IEBACitJdGVtIFJJR0hUOjpEb1NvbWV0aGluZyggQXJncyB3aXRoX3NwYWNlcyApCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1jbGFzcy1jb25zdHJ1Y3RvciBiL3QvdDQwMTgvY3BwLWNsYXNzLWNvbnN0cnVjdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNGYxMTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1jbGFzcy1jb25zdHJ1Y3RvcgpAQCAtMCwwICsxLDQgQEAKK0l0ZW06Okl0ZW0oaW50IFJJR0hUKQoreworCUNoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtY2xhc3MtY29uc3RydWN0b3ItbWVtLWluaXQgYi90L3Q0MDE4L2NwcC1jbGFzcy1jb25zdHJ1Y3Rvci1tZW0taW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWE2OWYzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtY2xhc3MtY29uc3RydWN0b3ItbWVtLWluaXQKQEAgLTAsMCArMSw1IEBACitJdGVtOjpJdGVtKGludCBSSUdIVCkgOgorCW1lbWJlcigwKQoreworCUNoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtY2xhc3MtZGVmaW5pdGlvbiBiL3QvdDQwMTgvY3BwLWNsYXNzLWRlZmluaXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFiNjFkYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWNsYXNzLWRlZmluaXRpb24KQEAgLTAsMCArMSw0IEBACitjbGFzcyBSSUdIVAoreworCWludCBDaGFuZ2VNZTsKK307CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1jbGFzcy1kZWZpbml0aW9uLWRlcml2ZWQgYi90L3Q0MDE4L2NwcC1jbGFzcy1kZWZpbml0aW9uLWRlcml2ZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I5OGNkMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWNsYXNzLWRlZmluaXRpb24tZGVyaXZlZApAQCAtMCwwICsxLDUgQEAKK2NsYXNzIFJJR0hUIDoKKwlwdWJsaWMgQmFzZWNsYXNzCit7CisJaW50IENoYW5nZU1lOworfTsKZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLWNsYXNzLWRlc3RydWN0b3IgYi90L3Q0MDE4L2NwcC1jbGFzcy1kZXN0cnVjdG9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODc2NjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1jbGFzcy1kZXN0cnVjdG9yCkBAIC0wLDAgKzEsNCBAQAorUklHSFQ6On5SSUdIVCgpCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctZ2xvYmFsLXR5cGUgYi90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctZ2xvYmFsLXR5cGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4NGQ1OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1nbG9iYWwtdHlwZQpAQCAtMCwwICsxLDQgQEAKKzo6SXRlbSBnZXQ6Oml0OjpSSUdIVCgpCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctbmVzdGVkIGIvdC90NDAxOC9jcHAtZnVuY3Rpb24tcmV0dXJuaW5nLW5lc3RlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTc1MGFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtZnVuY3Rpb24tcmV0dXJuaW5nLW5lc3RlZApAQCAtMCwwICsxLDUgQEAKK2dldDo6SXRlbSBnZXQ6Oml0OjpSSUdIVCgpCit7CisJQ2hhbmdlTWU7Cit9CisKZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1wb2ludGVyIGIvdC90NDAxOC9jcHAtZnVuY3Rpb24tcmV0dXJuaW5nLXBvaW50ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYxNTY1NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1wb2ludGVyCkBAIC0wLDAgKzEsNCBAQAorY29uc3QgY2hhciAqZ2V0X2l0X1JJR0hUKGNoYXIgKnB0cikKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLWZ1bmN0aW9uLXJldHVybmluZy1yZWZlcmVuY2UgYi90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctcmVmZXJlbmNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYjA1MWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1mdW5jdGlvbi1yZXR1cm5pbmctcmVmZXJlbmNlCkBAIC0wLDAgKzEsNCBAQAorc3RyaW5nJiBnZXQ6Oml0OjpSSUdIVChjaGFyICpwdHIpCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1nbnUtc3R5bGUtZnVuY3Rpb24gYi90L3Q0MDE4L2NwcC1nbnUtc3R5bGUtZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjN2M3NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLWdudS1zdHlsZS1mdW5jdGlvbgpAQCAtMCwwICsxLDUgQEAKK2NvbnN0IGNoYXIgKgorUklHSFQoaW50IGFyZykKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLW5hbWVzcGFjZS1kZWZpbml0aW9uIGIvdC90NDAxOC9jcHAtbmFtZXNwYWNlLWRlZmluaXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc0OTk4MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLW5hbWVzcGFjZS1kZWZpbml0aW9uCkBAIC0wLDAgKzEsNCBAQAorbmFtZXNwYWNlIFJJR0hUCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC1vcGVyYXRvci1kZWZpbml0aW9uIGIvdC90NDAxOC9jcHAtb3BlcmF0b3ItZGVmaW5pdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWNkODI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtb3BlcmF0b3ItZGVmaW5pdGlvbgpAQCAtMCwwICsxLDQgQEAKK1ZhbHVlIG9wZXJhdG9yKyhWYWx1ZSBMRUZULCBWYWx1ZSBSSUdIVCkKK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLXNraXAtYWNjZXNzLXNwZWNpZmllcnMgYi90L3Q0MDE4L2NwcC1za2lwLWFjY2Vzcy1zcGVjaWZpZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNGE5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1za2lwLWFjY2Vzcy1zcGVjaWZpZXJzCkBAIC0wLDAgKzEsOCBAQAorY2xhc3MgUklHSFQgOiBwdWJsaWMgQmFzZWNsYXNzCit7CitwdWJsaWM6Citwcm90ZWN0ZWQ6Citwcml2YXRlOgorCXZvaWQgRG9Tb21ldGhpbmcoKTsKKwlpbnQgQ2hhbmdlTWU7Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtc2tpcC1jb21tZW50LWJsb2NrIGIvdC90NDAxOC9jcHAtc2tpcC1jb21tZW50LWJsb2NrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MDBiOTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1za2lwLWNvbW1lbnQtYmxvY2sKQEAgLTAsMCArMSw5IEBACitzdHJ1Y3QgaXRlbSBSSUdIVChpbnQgaSkKKy8vIERvIG5vdAorLy8gcGljayB1cAorLyogdGhlc2UKKyoqIGNvbW1lbnRzLgorKi8KK3sKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLXNraXAtbGFiZWxzIGIvdC90NDAxOC9jcHAtc2tpcC1sYWJlbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjljMTBhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLXNraXAtbGFiZWxzCkBAIC0wLDAgKzEsOCBAQAordm9pZCBSSUdIVCAodm9pZCkKK3sKK3JlcGVhdDoJCS8vIEMrKyBjb21tZW50CituZXh0OgkJLyogQyBjb21tZW50ICovCisJZG9fc29tZXRoaW5nKCk7CisKKwlDaGFuZ2VNZTsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvY3BwLXN0cnVjdC1kZWZpbml0aW9uIGIvdC90NDAxOC9jcHAtc3RydWN0LWRlZmluaXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIxYzU5ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLXN0cnVjdC1kZWZpbml0aW9uCkBAIC0wLDAgKzEsOSBAQAorc3RydWN0IFJJR0hUIHsKKwl1bnNpZ25lZAorCS8qIHRoaXMgYml0IGZpZWxkIGxvb2tzIGxpa2UgYSBsYWJlbCBhbmQgc2hvdWxkIG5vdCBiZSBwaWNrZWQgdXAgKi8KKwkJZGVjb3lfYml0ZmllbGQ6IDIsCisJCW1vcmUgOiAxOworCWludCBmaWxsZXI7CisKKwlpbnQgQ2hhbmdlTWU7Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtc3RydWN0LXNpbmdsZS1saW5lIGIvdC90NDAxOC9jcHAtc3RydWN0LXNpbmdsZS1saW5lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZGU1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC1zdHJ1Y3Qtc2luZ2xlLWxpbmUKQEAgLTAsMCArMSw3IEBACit2b2lkIHdyb25nKCkKK3sKK30KKworc3RydWN0IFJJR0hUX2l0ZXJhdG9yX3RhZyB7fTsKKworaW50IENoYW5nZU1lOwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtdGVtcGxhdGUtZnVuY3Rpb24tZGVmaW5pdGlvbiBiL3QvdDQwMTgvY3BwLXRlbXBsYXRlLWZ1bmN0aW9uLWRlZmluaXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNkZjViYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3BwLXRlbXBsYXRlLWZ1bmN0aW9uLWRlZmluaXRpb24KQEAgLTAsMCArMSw0IEBACit0ZW1wbGF0ZTxjbGFzcyBUPiBpbnQgUklHSFQoVCBhcmcpCit7CisJQ2hhbmdlTWU7Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2NwcC11bmlvbi1kZWZpbml0aW9uIGIvdC90NDAxOC9jcHAtdW5pb24tZGVmaW5pdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWM5NGRmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jcHAtdW5pb24tZGVmaW5pdGlvbgpAQCAtMCwwICsxLDQgQEAKK3VuaW9uIFJJR0hUIHsKKwlkb3VibGUgdjsKKwlpbnQgQ2hhbmdlTWU7Cit9OwpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jcHAtdm9pZC1jLWZ1bmN0aW9uIGIvdC90NDAxOC9jcHAtdm9pZC1jLWZ1bmN0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MzA4MWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L2NwcC12b2lkLWMtZnVuY3Rpb24KQEAgLTAsMCArMSw0IEBACit2b2lkIFJJR0hUICh2b2lkKQoreworCUNoYW5nZU1lOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jdXN0b20xLXBhdHRlcm4gYi90L3Q0MDE4L2N1c3RvbTEtcGF0dGVybgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGZkNTlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jdXN0b20xLXBhdHRlcm4KQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIEJlZXIKK3sKKwlpbnQgc3BlY2lhbCwgUklHSFQ7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKKwl7CisJCVN0cmluZyBzPSIgIjsKKwkJZm9yKGludCB4ID0gOTk7IHggPiAwOyB4LS0pCisJCXsKKwkJCVN5c3RlbS5vdXQucHJpbnQoeCArICIgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsICIKKwkJCQkrIHggKyAiIGJvdHRsZXMgb2YgYmVlclxuIiAvLyBDaGFuZ2VNZQorCQkJCSsgIlRha2Ugb25lIGRvd24sIHBhc3MgaXQgYXJvdW5kLCAiICsgKHggLSAxKQorCQkJCSsgIiBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwuXG4iKTsKKwkJfQorCQlTeXN0ZW0ub3V0LnByaW50KCJHbyB0byB0aGUgc3RvcmUsIGJ1eSBzb21lIG1vcmUsXG4iCisJCQkrICI5OSBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwuXG4iKTsKKwl9Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2N1c3RvbTItbWF0Y2gtdG8tZW5kLW9mLWxpbmUgYi90L3Q0MDE4L2N1c3RvbTItbWF0Y2gtdG8tZW5kLW9mLWxpbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4YWMzMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvY3VzdG9tMi1tYXRjaC10by1lbmQtb2YtbGluZQpAQCAtMCwwICsxLDggQEAKK3B1YmxpYyBjbGFzcyBSSUdIVF9CZWVyCit7CisJaW50IHNwZWNpYWw7CisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkKKwl7CisJCVN5c3RlbS5vdXQucHJpbnQoIkNoYW5nZU1lIik7CisJfQorfQpkaWZmIC0tZ2l0IGEvdC90NDAxOC9jdXN0b20zLWFsdGVybmF0aW9uLWluLXBhdHRlcm4gYi90L3Q0MDE4L2N1c3RvbTMtYWx0ZXJuYXRpb24taW4tcGF0dGVybgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjM3NjljCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9jdXN0b20zLWFsdGVybmF0aW9uLWluLXBhdHRlcm4KQEAgLTAsMCArMSwxNyBAQAorcHVibGljIGNsYXNzIEJlZXIKK3sKKwlpbnQgc3BlY2lhbDsKKwlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgUklHSFRbXSkKKwl7CisJCVN0cmluZyBzPSIgIjsKKwkJZm9yKGludCB4ID0gOTk7IHggPiAwOyB4LS0pCisJCXsKKwkJCVN5c3RlbS5vdXQucHJpbnQoeCArICIgYm90dGxlcyBvZiBiZWVyIG9uIHRoZSB3YWxsICIKKwkJCQkrIHggKyAiIGJvdHRsZXMgb2YgYmVlclxuIiAvLyBDaGFuZ2VNZQorCQkJCSsgIlRha2Ugb25lIGRvd24sIHBhc3MgaXQgYXJvdW5kLCAiICsgKHggLSAxKQorCQkJCSsgIiBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwuXG4iKTsKKwkJfQorCQlTeXN0ZW0ub3V0LnByaW50KCJHbyB0byB0aGUgc3RvcmUsIGJ1eSBzb21lIG1vcmUsXG4iCisJCQkrICI5OSBib3R0bGVzIG9mIGJlZXIgb24gdGhlIHdhbGwuXG4iKTsKKwl9Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L2ZvdW50YWluLXNjZW5lIGIvdC90NDAxOC9mb3VudGFpbi1zY2VuZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjMyNTdkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9mb3VudGFpbi1zY2VuZQpAQCAtMCwwICsxLDQgQEAKK0VYVC4gU1RSRUVUIFJJR0hUIE9VVFNJREUgLSBEQVkKKworQ0hBUkFDVEVSCitZb3UgZGlkbid0IHNheSB0aGUgbWFnaWMgcGhyYXNlLCAiQ2hhbmdlTWUiLgpkaWZmIC0tZ2l0IGEvdC90NDAxOC9qYXZhLWNsYXNzLW1lbWJlci1mdW5jdGlvbiBiL3QvdDQwMTgvamF2YS1jbGFzcy1tZW1iZXItZnVuY3Rpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4YmM3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMTgvamF2YS1jbGFzcy1tZW1iZXItZnVuY3Rpb24KQEAgLTAsMCArMSw4IEBACitwdWJsaWMgY2xhc3MgQmVlcgoreworCWludCBzcGVjaWFsOworCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBSSUdIVFtdKQorCXsKKwkJU3lzdGVtLm91dC5wcmludCgiQ2hhbmdlTWUiKTsKKwl9Cit9CmRpZmYgLS1naXQgYS90L3Q0MDE4L3Blcmwtc2tpcC1lbmQtb2YtaGVyZWRvYyBiL3QvdDQwMTgvcGVybC1za2lwLWVuZC1vZi1oZXJlZG9jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMmQzOWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3Blcmwtc2tpcC1lbmQtb2YtaGVyZWRvYwpAQCAtMCwwICsxLDggQEAKK3N1YiBSSUdIVHdpdGhoZXJlZG9jdW1lbnQgeworCXByaW50IDw8IkVPRiIKK2RlY295IGhlcmUtZG9jCitFT0YKKwkjIHNvbWUgbGluZXMgb2YgY29udGV4dAorCSMgdG8gcGFkIGl0IG91dAorCXByaW50ICJDaGFuZ2VNZVxuIjsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvcGVybC1za2lwLWZvcndhcmQtZGVjbCBiL3QvdDQwMTgvcGVybC1za2lwLWZvcndhcmQtZGVjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOThjYjhiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9wZXJsLXNraXAtZm9yd2FyZC1kZWNsCkBAIC0wLDAgKzEsMTAgQEAKK3BhY2thZ2UgUklHSFQ7CisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgcGFyZW50IHF3KEV4cG9ydGVyKTsKK291ciBARVhQT1JUX09LID0gcXcocm91bmQgZmluYWxyb3VuZCk7CisKK3N1YiBvdGhlcjsgIyBmb3J3YXJkIGRlY2xhcmF0aW9uCisKKyMgQ2hhbmdlTWUKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcGVybC1za2lwLXN1Yi1pbi1wb2QgYi90L3Q0MDE4L3Blcmwtc2tpcC1zdWItaW4tcG9kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOWYwMjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDE4L3Blcmwtc2tpcC1zdWItaW4tcG9kCkBAIC0wLDAgKzEsMTggQEAKKz1oZWFkMSBOQU1FCisKK0JlZXIgLSBzdWJyb3V0aW5lIHRvIG91dHB1dCBmcmFnbWVudCBvZiBhIGRyaW5raW5nIHNvbmcKKworPWhlYWQxIFNZTk9QU0lTX1JJR0hUCisKKwl1c2UgQmVlciBxdyhyb3VuZCBmaW5hbHJvdW5kKTsKKworCXN1YiBzb25nIHsKKwkJZm9yIChteSAkaSA9IDk5OyAkaSA+IDA7ICRpLS0pIHsKKwkJCXJvdW5kICRpOworCQl9CisJCWZpbmFscm91bmQ7CisJfQorCisJQ2hhbmdlTWU7CisKKz1jdXQKZGlmZiAtLWdpdCBhL3QvdDQwMTgvcGVybC1zdWItZGVmaW5pdGlvbiBiL3QvdDQwMTgvcGVybC1zdWItZGVmaW5pdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTA3ZDFmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9wZXJsLXN1Yi1kZWZpbml0aW9uCkBAIC0wLDAgKzEsNCBAQAorc3ViIFJJR0hUIHsKKwlteSAoJG4pID0gQF87CisJcHJpbnQgIkNoYW5nZU1lIjsKK30KZGlmZiAtLWdpdCBhL3QvdDQwMTgvcGVybC1zdWItZGVmaW5pdGlvbi1rci1icmFjZSBiL3QvdDQwMTgvcGVybC1zdWItZGVmaW5pdGlvbi1rci1icmFjZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzBiM2RmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOC9wZXJsLXN1Yi1kZWZpbml0aW9uLWtyLWJyYWNlCkBAIC0wLDAgKzEsNCBAQAorc3ViIFJJR0hUCit7CisJcHJpbnQgIkNoYW5nZU1lXG4iOworfQpkaWZmIC0tZ2l0IGEvdC90NDAxOS1kaWZmLXdzZXJyb3Iuc2ggYi90L3Q0MDE5LWRpZmYtd3NlcnJvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNTAxOTc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAxOS1kaWZmLXdzZXJyb3Iuc2gKQEAgLTAsMCArMSwyOTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIHdoaXRlc3BhY2UgZXJyb3IgZGV0ZWN0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlnaXQgY29uZmlnIGRpZmYuY29sb3Iud2hpdGVzcGFjZSAiYmx1ZSByZXZlcnNlIiAmJgorCT5GICYmCisJZ2l0IGFkZCBGICYmCisJZWNobyAiICAgICAgICAgRWlnaHQgU1AgaW5kZW50IiA+PkYgJiYKKwllY2hvICIgCUhUIGFuZCBTUCBpbmRlbnQiID4+RiAmJgorCWVjaG8gIldpdGggdHJhaWxpbmcgU1AgIiA+PkYgJiYKKwllY2hvICJDYXJyaWFnZSBSZXR1cm5RIiB8IHRyIFEgIlwwMTUiID4+RiAmJgorCWVjaG8gIk5vIHByb2JsZW0iID4+RiAmJgorCWVjaG8gPj5GCisKKycKKworYmx1ZV9ncmVwPSc3OzM0bScgOyMgRVNDIFsgNyA7IDMgNCBtCisKK3ByaW50ZiAiXDAzM1slcyIgIiRibHVlX2dyZXAiID5jaGVjay1ncmVwCitpZiAoZ3JlcCAiJGJsdWVfZ3JlcCIgPGNoZWNrLWdyZXAgfCBncmVwICIkYmx1ZV9ncmVwIikgPi9kZXYvbnVsbCAyPiYxCit0aGVuCisJZ3JlcF9hPWdyZXAKK2VsaWYgKGdyZXAgLWEgIiRibHVlX2dyZXAiIDxjaGVjay1ncmVwIHwgZ3JlcCAtYSAiJGJsdWVfZ3JlcCIpID4vZGV2L251bGwgMj4mMQordGhlbgorCWdyZXBfYT0nZ3JlcCAtYScKK2Vsc2UKKwlncmVwX2E9Z3JlcCA7IyBleHBlY3RlZCB0byBmYWlsLi4uCitmaQorcm0gLWYgY2hlY2stZ3JlcAorCitwcmVwYXJlX291dHB1dCAoKSB7CisJZ2l0IGRpZmYgLS1jb2xvciA+b3V0cHV0CisJJGdyZXBfYSAiJGJsdWVfZ3JlcCIgb3V0cHV0ID5lcnJvcgorCSRncmVwX2EgLXYgIiRibHVlX2dyZXAiIG91dHB1dCA+bm9ybWFsCisJcmV0dXJuIDAKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBkZWZhdWx0ICcKKworCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgKGF0dHJpYnV0ZSknICcKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJZWNobyAiRiB3aGl0ZXNwYWNlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQsIHRhYndpZHRoPTEwIChhdHRyaWJ1dGUpJyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAidGFid2lkdGg9MTAiICYmCisJZWNobyAiRiB3aGl0ZXNwYWNlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBSZXR1cm4gZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjaGVjayAoYXR0cmlidXRlKScgJworCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJGIC13aGl0ZXNwYWNlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjaGVjaywgdGFid2lkdGg9MTAgKGF0dHJpYnV0ZSksIG11c3QgYmUgaXJyZWxldmFudCcgJworCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgInRhYndpZHRoPTEwIiAmJgorCWVjaG8gIkYgLXdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGhvdXQgLXRyYWlsJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlIC10cmFpbCAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBSZXR1cm4gbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aG91dCAtdHJhaWwgKGF0dHJpYnV0ZSknICcKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJZWNobyAiRiB3aGl0ZXNwYWNlPS10cmFpbCIgPi5naXRhdHRyaWJ1dGVzICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRob3V0IC1zcGFjZScgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAtc3BhY2UgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aG91dCAtc3BhY2UgKGF0dHJpYnV0ZSknICcKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJZWNobyAiRiB3aGl0ZXNwYWNlPS1zcGFjZSIgPi5naXRhdHRyaWJ1dGVzICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaW5kZW50LW5vbi10YWIgb25seScgJworCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSBpbmRlbnQsLXRyYWlsaW5nLC1zcGFjZSAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIEhUIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBSZXR1cm4gbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBpbmRlbnQtbm9uLXRhYiBvbmx5IChhdHRyaWJ1dGUpJyAnCisKKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud2hpdGVzcGFjZSAmJgorCWVjaG8gIkYgd2hpdGVzcGFjZT1pbmRlbnQsLXRyYWlsaW5nLC1zcGFjZSIgPi5naXRhdHRyaWJ1dGVzICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFdpdGggbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGluZGVudC1ub24tdGFiIG9ubHksIHRhYndpZHRoPTEwJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlIGluZGVudCx0YWJ3aWR0aD0xMCwtdHJhaWxpbmcsLXNwYWNlICYmCisJcHJlcGFyZV9vdXRwdXQgJiYKKworCWdyZXAgRWlnaHQgbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIEhUIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBSZXR1cm4gbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBpbmRlbnQtbm9uLXRhYiBvbmx5LCB0YWJ3aWR0aD0xMCAoYXR0cmlidXRlKScgJworCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJGIHdoaXRlc3BhY2U9aW5kZW50LC10cmFpbGluZywtc3BhY2UsdGFid2lkdGg9MTAiID4uZ2l0YXR0cmlidXRlcyAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgUmV0dXJuIG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBObyBub3JtYWwgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY3ItYXQtZW9sJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlIGNyLWF0LWVvbCAmJgorCXByZXBhcmVfb3V0cHV0ICYmCisKKwlncmVwIEVpZ2h0IG5vcm1hbCA+L2Rldi9udWxsICYmCisJZ3JlcCBIVCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBXaXRoIGVycm9yID4vZGV2L251bGwgJiYKKwlncmVwIFJldHVybiBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgTm8gbm9ybWFsID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNyLWF0LWVvbCAoYXR0cmlidXRlKScgJworCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJGIHdoaXRlc3BhY2U9dHJhaWxpbmcsY3ItYXQtZW9sIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlwcmVwYXJlX291dHB1dCAmJgorCisJZ3JlcCBFaWdodCBub3JtYWwgPi9kZXYvbnVsbCAmJgorCWdyZXAgSFQgZXJyb3IgPi9kZXYvbnVsbCAmJgorCWdyZXAgV2l0aCBlcnJvciA+L2Rldi9udWxsICYmCisJZ3JlcCBSZXR1cm4gbm9ybWFsID4vZGV2L251bGwgJiYKKwlncmVwIE5vIG5vcm1hbCA+L2Rldi9udWxsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhaWxpbmcgZW1wdHkgbGluZXMgKDEpJyAnCisKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2hlY2sgPm91dHB1dCAmJgorCWdyZXAgIm5ldyBibGFuayBsaW5lIGF0IiBvdXRwdXQgJiYKKwlncmVwICJ0cmFpbGluZyB3aGl0ZXNwYWNlIiBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmFpbGluZyBlbXB0eSBsaW5lcyAoMiknICcKKworCWVjaG8gIkYgLXdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBkaWZmIC0tY2hlY2sgPm91dHB1dCAmJgorCSEgdGVzdCAtcyBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2RpZmYgc2hvd3MgY29ycmVjdCBsaW5lIG51bWJlciBmb3IgdHJhaWxpbmcgYmxhbmsgbGluZXMnICcKKworCXByaW50ZiAiYVxuYlxuIiA+IEcgJiYKKwlnaXQgYWRkIEcgJiYKKwlwcmludGYgInhcbnhcbnhcbmFcbmJcbmNcblxuIiA+IEcgJiYKKwlbICIkKGdpdCBkaWZmIC0tY2hlY2sgLS0gRykiID0gIkc6NzogbmV3IGJsYW5rIGxpbmUgYXQgRU9GLiIgXQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBjb2xvciB0cmFpbGluZyBjciBpbiBjb250ZXh0JyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gQUFBUSB8IHRyIFEgIlwwMTUiID5HICYmCisJZ2l0IGFkZCBHICYmCisJZWNobyBCQkJRIHwgdHIgUSAiXDAxNSIgPj5HICYmCisJZ2l0IGRpZmYgLS1jb2xvciBHIHwgdHIgIlwwMTUiIFEgPm91dHB1dCAmJgorCWdyZXAgIkJCQi4qJHtibHVlX2dyZXB9USIgb3V0cHV0ICYmCisJZ3JlcCAiQUFBLipcW21RIiBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb2xvciBuZXcgdHJhaWxpbmcgYmxhbmsgbGluZXMnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvOyBlY2hvOyB9ID54ICYmCisJZ2l0IGFkZCB4ICYmCisJeyBlY2hvIGE7IGVjaG87IGVjaG87IGVjaG87IGVjaG8gYzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgfSA+eCAmJgorCWdpdCBkaWZmIC0tY29sb3IgeCA+b3V0cHV0ICYmCisJY250PSQoJGdyZXBfYSAiJHtibHVlX2dyZXB9IiBvdXRwdXQgfCB3YyAtbCkgJiYKKwl0ZXN0ICRjbnQgPSAyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAyMC1kaWZmLWV4dGVybmFsLnNoIGIvdC90NDAyMC1kaWZmLWV4dGVybmFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0NDYyMDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDIwLWRpZmYtZXh0ZXJuYWwuc2gKQEAgLTAsMCArMSwyNzAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdleHRlcm5hbCBkaWZmIGludGVyZmFjZSB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIGluaXRpYWwgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gc2Vjb25kID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gdGhpcmQgPmZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX0VYVEVSTkFMX0RJRkYgZW52aXJvbm1lbnQnICcKKworCUdJVF9FWFRFUk5BTF9ESUZGPWVjaG8gZ2l0IGRpZmYgfCB7CisJCXJlYWQgcGF0aCBvbGRmaWxlIG9sZGhleCBvbGRtb2RlIG5ld2ZpbGUgbmV3aGV4IG5ld21vZGUgJiYKKwkJdGVzdCAieiRwYXRoIiA9IHpmaWxlICYmCisJCXRlc3QgInokb2xkbW9kZSIgPSB6MTAwNjQ0ICYmCisJCXRlc3QgInokbmV3aGV4IiA9ICJ6JF96NDAiICYmCisJCXRlc3QgInokbmV3bW9kZSIgPSB6MTAwNjQ0ICYmCisJCW9oPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOmZpbGUpICYmCisJCXRlc3QgInokb2giID0gInokb2xkaGV4IgorCX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiBlbnZpcm9ubWVudCBzaG91bGQgYXBwbHkgb25seSB0byBkaWZmJyAnCisKKwlHSVRfRVhURVJOQUxfRElGRj1lY2hvIGdpdCBsb2cgLXAgLTEgSEVBRCB8CisJZ3JlcCAiXmRpZmYgLS1naXQgYS9maWxlIGIvZmlsZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiBlbnZpcm9ubWVudCBhbmQgLS1uby1leHQtZGlmZicgJworCisJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIHwKKwlncmVwICJeZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3R5cGVjaGFuZ2UgZGlmZicgJworCXJtIC1mIGZpbGUgJiYKKwlsbiAtcyBlbGlmIGZpbGUgJiYKKwlHSVRfRVhURVJOQUxfRElGRj1lY2hvIGdpdCBkaWZmICB8IHsKKwkJcmVhZCBwYXRoIG9sZGZpbGUgb2xkaGV4IG9sZG1vZGUgbmV3ZmlsZSBuZXdoZXggbmV3bW9kZSAmJgorCQl0ZXN0ICJ6JHBhdGgiID0gemZpbGUgJiYKKwkJdGVzdCAieiRvbGRtb2RlIiA9IHoxMDA2NDQgJiYKKwkJdGVzdCAieiRuZXdoZXgiID0gInokX3o0MCIgJiYKKwkJdGVzdCAieiRuZXdtb2RlIiA9IHoxMjAwMDAgJiYKKwkJb2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6ZmlsZSkgJiYKKwkJdGVzdCAieiRvaCIgPSAieiRvbGRoZXgiCisJfSAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPWVjaG8gZ2l0IGRpZmYgLS1uby1leHQtZGlmZiA+YWN0dWFsICYmCisJZ2l0IGRpZmYgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5leHRlcm5hbCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIHRoaXJkID5maWxlICYmCisJdGVzdF9jb25maWcgZGlmZi5leHRlcm5hbCBlY2hvICYmCisJZ2l0IGRpZmYgfCB7CisJCXJlYWQgcGF0aCBvbGRmaWxlIG9sZGhleCBvbGRtb2RlIG5ld2ZpbGUgbmV3aGV4IG5ld21vZGUgJiYKKwkJdGVzdCAieiRwYXRoIiA9IHpmaWxlICYmCisJCXRlc3QgInokb2xkbW9kZSIgPSB6MTAwNjQ0ICYmCisJCXRlc3QgInokbmV3aGV4IiA9ICJ6JF96NDAiICYmCisJCXRlc3QgInokbmV3bW9kZSIgPSB6MTAwNjQ0ICYmCisJCW9oPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOmZpbGUpICYmCisJCXRlc3QgInokb2giID0gInokb2xkaGV4IgorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5leHRlcm5hbCBzaG91bGQgYXBwbHkgb25seSB0byBkaWZmJyAnCisJdGVzdF9jb25maWcgZGlmZi5leHRlcm5hbCBlY2hvICYmCisJZ2l0IGxvZyAtcCAtMSBIRUFEIHwKKwlncmVwICJeZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmV4dGVybmFsIGFuZCAtLW5vLWV4dC1kaWZmJyAnCisJdGVzdF9jb25maWcgZGlmZi5leHRlcm5hbCBlY2hvICYmCisJZ2l0IGRpZmYgLS1uby1leHQtZGlmZiB8CisJZ3JlcCAiXmRpZmYgLS1naXQgYS9maWxlIGIvZmlsZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBhdHRyaWJ1dGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyB0aGlyZCA+ZmlsZSAmJgorCisJZ2l0IGNvbmZpZyBkaWZmLnBhcnJvdC5jb21tYW5kIGVjaG8gJiYKKworCWVjaG8gPi5naXRhdHRyaWJ1dGVzICJmaWxlIGRpZmY9cGFycm90IiAmJgorCisJZ2l0IGRpZmYgfCB7CisJCXJlYWQgcGF0aCBvbGRmaWxlIG9sZGhleCBvbGRtb2RlIG5ld2ZpbGUgbmV3aGV4IG5ld21vZGUgJiYKKwkJdGVzdCAieiRwYXRoIiA9IHpmaWxlICYmCisJCXRlc3QgInokb2xkbW9kZSIgPSB6MTAwNjQ0ICYmCisJCXRlc3QgInokbmV3aGV4IiA9ICJ6JF96NDAiICYmCisJCXRlc3QgInokbmV3bW9kZSIgPSB6MTAwNjQ0ICYmCisJCW9oPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEOmZpbGUpICYmCisJCXRlc3QgInokb2giID0gInokb2xkaGV4IgorCX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGF0dHJpYnV0ZSBzaG91bGQgYXBwbHkgb25seSB0byBkaWZmJyAnCisKKwlnaXQgbG9nIC1wIC0xIEhFQUQgfAorCWdyZXAgIl5kaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBhdHRyaWJ1dGUgYW5kIC0tbm8tZXh0LWRpZmYnICcKKworCWdpdCBkaWZmIC0tbm8tZXh0LWRpZmYgfAorCWdyZXAgIl5kaWZmIC0tZ2l0IGEvZmlsZSBiL2ZpbGUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBhdHRyaWJ1dGUnICcKKworCWdpdCBjb25maWcgLS11bnNldCBkaWZmLnBhcnJvdC5jb21tYW5kICYmCisJZ2l0IGNvbmZpZyBkaWZmLmNvbG9yLmNvbW1hbmQgZWNobyAmJgorCisJZWNobyA+LmdpdGF0dHJpYnV0ZXMgImZpbGUgZGlmZj1jb2xvciIgJiYKKworCWdpdCBkaWZmIHwgeworCQlyZWFkIHBhdGggb2xkZmlsZSBvbGRoZXggb2xkbW9kZSBuZXdmaWxlIG5ld2hleCBuZXdtb2RlICYmCisJCXRlc3QgInokcGF0aCIgPSB6ZmlsZSAmJgorCQl0ZXN0ICJ6JG9sZG1vZGUiID0gejEwMDY0NCAmJgorCQl0ZXN0ICJ6JG5ld2hleCIgPSAieiRfejQwIiAmJgorCQl0ZXN0ICJ6JG5ld21vZGUiID0gejEwMDY0NCAmJgorCQlvaD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRDpmaWxlKSAmJgorCQl0ZXN0ICJ6JG9oIiA9ICJ6JG9sZGhleCIKKwl9CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBhdHRyaWJ1dGUgc2hvdWxkIGFwcGx5IG9ubHkgdG8gZGlmZicgJworCisJZ2l0IGxvZyAtcCAtMSBIRUFEIHwKKwlncmVwICJeZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgYXR0cmlidXRlIGFuZCAtLW5vLWV4dC1kaWZmJyAnCisKKwlnaXQgZGlmZiAtLW5vLWV4dC1kaWZmIHwKKwlncmVwICJeZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9FWFRFUk5BTF9ESUZGIHRydW1wcyBkaWZmLmV4dGVybmFsJyAnCisJPi5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF9jb25maWcgZGlmZi5leHRlcm5hbCAiZWNobyBleHQtZ2xvYmFsIiAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPSJlY2hvIGV4dC1lbnYiIGdpdCBkaWZmIHwgZ3JlcCBleHQtZW52CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHJpYnV0ZXMgdHJ1bXAgR0lUX0VYVEVSTkFMX0RJRkYgYW5kIGRpZmYuZXh0ZXJuYWwnICcKKwl0ZXN0X2NvbmZpZyBkaWZmLmZvby5jb21tYW5kICJlY2hvIGV4dC1hdHRyaWJ1dGUiICYmCisJdGVzdF9jb25maWcgZGlmZi5leHRlcm5hbCAiZWNobyBleHQtZ2xvYmFsIiAmJgorCWVjaG8gImZpbGUgZGlmZj1mb28iID4uZ2l0YXR0cmlidXRlcyAmJgorCUdJVF9FWFRFUk5BTF9ESUZGPSJlY2hvIGV4dC1lbnYiIGdpdCBkaWZmIHwgZ3JlcCBleHQtYXR0cmlidXRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGRpZmYgd2l0aCAtZGlmZicgJworCWVjaG8gPi5naXRhdHRyaWJ1dGVzICJmaWxlIC1kaWZmIiAmJgorCWdpdCBkaWZmIHwgZ3JlcCBCaW5hcnkKKycKKworZWNobyBOVUxaYmV0d2Vlblp3b3JkcyB8IHBlcmwgLXBlICd5L1ovXDAwMC8nID4gZmlsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZSBkaWZmIHdpdGggImRpZmYiJyAnCisJZWNobyA+LmdpdGF0dHJpYnV0ZXMgImZpbGUgZGlmZiIgJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDQwMjAvZGlmZi5OVUwgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9FWFRFUk5BTF9ESUZGIHdpdGggbW9yZSB0aGFuIG9uZSBjaGFuZ2VkIGZpbGVzJyAnCisJZWNobyBhbm90aGVyZmlsZSA+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIDJuZCBmaWxlIiAmJgorCWVjaG8gbW9kaWZpZWQgPmZpbGUyICYmCisJR0lUX0VYVEVSTkFMX0RJRkY9ZWNobyBnaXQgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfRVhURVJOQUxfRElGRiBwYXRoIGNvdW50ZXIvdG90YWwnICcKKwl3cml0ZV9zY3JpcHQgZXh0ZXJuYWwtZGlmZi5zaCA8PC1cRU9GICYmCisJZWNobyAkR0lUX0RJRkZfUEFUSF9DT1VOVEVSIG9mICRHSVRfRElGRl9QQVRIX1RPVEFMID4+Y291bnRlci50eHQKKwlFT0YKKwk+Y291bnRlci50eHQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJMSBvZiAyCisJMiBvZiAyCisJRU9GCisJR0lUX0VYVEVSTkFMX0RJRkY9Li9leHRlcm5hbC1kaWZmLnNoIGdpdCBkaWZmICYmCisJdGVzdF9jbXAgZXhwZWN0IGNvdW50ZXIudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dJVF9FWFRFUk5BTF9ESUZGIGdlbmVyYXRlcyBwcmV0dHkgcGF0aHMnICcKKwl0b3VjaCBmaWxlLmV4dCAmJgorCWdpdCBhZGQgZmlsZS5leHQgJiYKKwllY2hvIHdpdGggZXh0ZW5zaW9uID4gZmlsZS5leHQgJiYKKwlHSVRfRVhURVJOQUxfRElGRj1lY2hvIGdpdCBkaWZmIGZpbGUuZXh0IHwgZ3JlcCAuLi4uLi5fZmlsZVwuZXh0ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSBmaWxlLmV4dCAmJgorCXJtIGZpbGUuZXh0CisnCisKK2VjaG8gIiMhJFNIRUxMX1BBVEgiID5mYWtlLWRpZmYuc2gKK2NhdCA+PiBmYWtlLWRpZmYuc2ggPDxcRU9GCitjYXQgJDIgPj4gY3JsZmVkLnR4dAorRU9GCitjaG1vZCBhK3ggZmFrZS1kaWZmLnNoCisKK2tlZXBfb25seV9jciAoKSB7CisJdHIgLWRjICdcMDE1JworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRlcm5hbCBkaWZmIHdpdGggYXV0b2NybGYgPSB0cnVlJyAnCisJdGVzdF9jb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJR0lUX0VYVEVSTkFMX0RJRkY9Li9mYWtlLWRpZmYuc2ggZ2l0IGRpZmYgJiYKKwl0ZXN0ICQod2MgLWwgPCBjcmxmZWQudHh0KSA9ICQoY2F0IGNybGZlZC50eHQgfCBrZWVwX29ubHlfY3IgfCB3YyAtYykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNhY2hlZCcgJworCXRlc3RfY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hc3N1bWUtdW5jaGFuZ2VkIGZpbGUgJiYKKwllY2hvIHNlY29uZCA+ZmlsZSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZIi90NDAyMC9kaWZmLk5VTCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4gdXAgY3JsZiBsZWZ0b3ZlcnMnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tYXNzdW1lLXVuY2hhbmdlZCBmaWxlICYmCisJcm0gLWYgZmlsZSogJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkaWZmJyAnCisJZ2l0IGluaXQgc3ViICYmCisJKCBjZCBzdWIgJiYgdGVzdF9jb21taXQgc3ViMSApICYmCisJZ2l0IGFkZCBzdWIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlIiAmJgorCSggY2Qgc3ViICYmIHRlc3RfY29tbWl0IHN1YjIgKSAmJgorCXdyaXRlX3NjcmlwdCBnYXRoZXJfcHJlX3Bvc3Quc2ggPDwtXEVPRiAmJgorCWVjaG8gIiQxICQ0IiAjIHBhdGgsIG1vZGUKKwljYXQgIiQyIiAjIG9sZCBmaWxlCisJY2F0ICIkNSIgIyBuZXcgZmlsZQorCUVPRgorCUdJVF9FWFRFUk5BTF9ESUZGPS4vZ2F0aGVyX3ByZV9wb3N0LnNoIGdpdCBkaWZmID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCXN1YiAxNjAwMDAKKwlTdWJwcm9qZWN0IGNvbW1pdCAkKGdpdCByZXYtcGFyc2UgSEVBRDpzdWIpCisJU3VicHJvamVjdCBjb21taXQgJChjZCBzdWIgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMjAvZGlmZi5OVUwgYi90L3Q0MDIwL2RpZmYuTlVMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMmY4OTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDIwL2RpZmYuTlVMCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDQwMjEtZm9ybWF0LXBhdGNoLW51bWJlcmVkLnNoIGIvdC90NDAyMS1mb3JtYXQtcGF0Y2gtbnVtYmVyZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODg2NDk0YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjEtZm9ybWF0LXBhdGNoLW51bWJlcmVkLnNoCkBAIC0wLDAgKzEsMTI0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEJyaWFuIEMgR2VybmhhcmR0CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J0Zvcm1hdC1wYXRjaCBudW1iZXJpbmcgb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZWNobyBBID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gRmlyc3QgJiYKKworCWVjaG8gQiA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBTZWNvbmQgJiYKKworCWVjaG8gQyA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBUaGlyZAorCisnCisKKyMgRWFjaCBvZiB0aGVzZSBnZXRzIHVzZWQgbXVsdGlwbGUgdGltZXMuCisKK3Rlc3RfbnVtX25vX251bWJlcmVkKCkgeworCWNudD0kKGdyZXAgIl5TdWJqZWN0OiBcW1BBVENIXF0iICQxIHwgd2MgLWwpICYmCisJdGVzdCAkY250ID0gJDIKK30KKwordGVzdF9zaW5nbGVfbm9fbnVtYmVyZWQoKSB7CisJdGVzdF9udW1fbm9fbnVtYmVyZWQgJDEgMQorfQorCit0ZXN0X25vX251bWJlcmVkKCkgeworCXRlc3RfbnVtX25vX251bWJlcmVkICQxIDIKK30KKwordGVzdF9zaW5nbGVfbnVtYmVyZWQoKSB7CisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMS8xXF0iICQxCit9CisKK3Rlc3RfbnVtYmVyZWQoKSB7CisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMS8yXF0iICQxICYmCisJZ3JlcCAiXlN1YmplY3Q6IFxbUEFUQ0ggMi8yXF0iICQxCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZSBwYXRjaCBkZWZhdWx0cyB0byBubyBudW1iZXJzJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEfjEgPnBhdGNoMC5zaW5nbGUgJiYKKwl0ZXN0X3NpbmdsZV9ub19udW1iZXJlZCBwYXRjaDAuc2luZ2xlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIHBhdGNoIGRlZmF1bHRzIHRvIG51bWJlcmVkJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IEhFQUR+MiA+cGF0Y2gwLm11bHRpcGxlICYmCisJdGVzdF9udW1iZXJlZCBwYXRjaDAubXVsdGlwbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdVc2UgLS1udW1iZXJlZCcgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW51bWJlcmVkIC0tc3Rkb3V0IEhFQUR+MSA+cGF0Y2gxICYmCisJdGVzdF9zaW5nbGVfbnVtYmVyZWQgcGF0Y2gxCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0Lm51bWJlcmVkID0gdHJ1ZScgJworCisJZ2l0IGNvbmZpZyBmb3JtYXQubnVtYmVyZWQgdHJ1ZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRH4yID5wYXRjaDIgJiYKKwl0ZXN0X251bWJlcmVkIHBhdGNoMgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5udW1iZXJlZCAmJiBzaW5nbGUgcGF0Y2gnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgSEVBRF4gPiBwYXRjaDMgJiYKKwl0ZXN0X3NpbmdsZV9udW1iZXJlZCBwYXRjaDMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQubnVtYmVyZWQgJiYgLS1uby1udW1iZXJlZCcgJworCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLW51bWJlcmVkIC0tc3Rkb3V0IEhFQUR+MiA+cGF0Y2g0ICYmCisJdGVzdF9ub19udW1iZXJlZCBwYXRjaDQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQubnVtYmVyZWQgJiYgLS1rZWVwLXN1YmplY3QnICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1rZWVwLXN1YmplY3QgLS1zdGRvdXQgSEVBRF4gPnBhdGNoNGEgJiYKKwlncmVwICJeU3ViamVjdDogVGhpcmQiIHBhdGNoNGEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQubnVtYmVyZWQgPSBhdXRvJyAnCisKKwlnaXQgY29uZmlnIGZvcm1hdC5udW1iZXJlZCBhdXRvICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEfjIgPiBwYXRjaDUgJiYKKwl0ZXN0X251bWJlcmVkIHBhdGNoNQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdC5udW1iZXJlZCA9IGF1dG8gJiYgc2luZ2xlIHBhdGNoJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IEhFQUReID4gcGF0Y2g2ICYmCisJdGVzdF9zaW5nbGVfbm9fbnVtYmVyZWQgcGF0Y2g2CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0Lm51bWJlcmVkID0gYXV0byAmJiAtLW5vLW51bWJlcmVkJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbm8tbnVtYmVyZWQgLS1zdGRvdXQgSEVBRH4yID4gcGF0Y2g3ICYmCisJdGVzdF9ub19udW1iZXJlZCBwYXRjaDcKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0YXJ0LW51bWJlciAmJiAtLW51bWJlcmVkJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3RhcnQtbnVtYmVyIDMgLS1udW1iZXJlZCAtLXN0ZG91dCBIRUFEfjEgPiBwYXRjaDggJiYKKwlncmVwICJeU3ViamVjdDogXFtQQVRDSCAzLzNcXSIgcGF0Y2g4CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAyMi1kaWZmLXJld3JpdGUuc2ggYi90L3Q0MDIyLWRpZmYtcmV3cml0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jYjUxZDlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAyMi1kaWZmLXJld3JpdGUuc2gKQEAgLTAsMCArMSw5NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jld3JpdGUgZGlmZicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPnRlc3QgJiYKKwlnaXQgYWRkIHRlc3QgJiYKKwl0ciBcCisJICAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIgXAorCSAgIm5vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtTk9QUVJTVFVWV1hZWkFCQ0RFRkdISUpLTE0iIFwKKwkgIDwiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID50ZXN0ICYmCisJZWNobyAidG8gYmUgZGVsZXRlZCIgPnRlc3QyICYmCisJZ2l0IGFkZCB0ZXN0MgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVjdCByZXdyaXRlJyAnCisKKwlhY3R1YWw9JChnaXQgZGlmZi1maWxlcyAtQiAtLXN1bW1hcnkgdGVzdCkgJiYKKwl2ZXJib3NlIGV4cHIgIiRhY3R1YWwiIDogIiByZXdyaXRlIHRlc3QgKFswLTldKiUpJCIKKworJworCitjYXQgPmV4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL3Rlc3QyIGIvdGVzdDIKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggNDIwMjAxMS4uMDAwMDAwMAorLS0tIGEvdGVzdDIKKysrKyAvZGV2L251bGwKK0BAIC0xICswLDAgQEAKKy10byBiZSBkZWxldGVkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgZGVsZXRpb24gZGlmZiB3aXRob3V0IC1EJyAnCisKKwlybSB0ZXN0MiAmJgorCWdpdCBkaWZmIC0tIHRlc3QyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvdGVzdDIgYi90ZXN0MgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCA0MjAyMDExLi4wMDAwMDAwCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1cHByZXNzIGRlbGV0aW9uIGRpZmYgd2l0aCAtRCcgJworCisJZ2l0IGRpZmYgLUQgLS0gdGVzdDIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBkZWxldGlvbiBkaWZmIHdpdGggLUInICcKKworCWdpdCBkaWZmIC1CIC0tIHRlc3QgPmFjdHVhbCAmJgorCWdyZXAgIkxpbnVzIFRvcnZhbGRzIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VwcHJlc3MgZGVsZXRpb24gZGlmZiB3aXRoIC1CIC1EJyAnCisKKwlnaXQgZGlmZiAtQiAtRCAtLSB0ZXN0ID5hY3R1YWwgJiYKKwlncmVwIC12ICJMaW51cyBUb3J2YWxkcyIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgYSBmaWxlIHRoYXQgZW5kcyB3aXRoIGFuIGluY29tcGxldGUgbGluZScgJworCXRlc3Rfc2VxIDEgOTkgPnNlcSAmJgorCXByaW50ZiAxMDAgPj5zZXEgJiYKKwlnaXQgYWRkIHNlcSAmJgorCWdpdCBjb21taXQgc2VxIC1tIHNlcQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIHRoZSBtaWRkbGUgOTAlIG9mIHNlcXVlbmNlIGZpbGUgYW5kIHRlcm1pbmF0ZSB3aXRoIG5ld2xpbmUnICcKKwl0ZXN0X3NlcSAxIDUgPnNlcSAmJgorCXRlc3Rfc2VxIDkzMzEgOTQyMCA+PnNlcSAmJgorCXRlc3Rfc2VxIDk2IDEwMCA+PnNlcQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25maXJtIHRoYXQgc2VxdWVuY2UgZmlsZSBpcyBjb25zaWRlcmVkIGEgcmV3cml0ZScgJworCWdpdCBkaWZmIC1CIHNlcSA+cmVzICYmCisJZ3JlcCAiZGlzc2ltaWxhcml0eSBpbmRleCIgcmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIG5ld2xpbmUgYXQgZW9mIGlzIG9uIGl0cyBvd24gbGluZSB3aXRob3V0IC1CJyAnCisJZ2l0IGRpZmYgc2VxID5yZXMgJiYKKwlncmVwICJeXFxcXCAiIHJlcyAmJgorCSEgZ3JlcCAiXi4uKlxcXFwgIiByZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gbmV3bGluZSBhdCBlb2YgaXMgb24gaXRzIG93biBsaW5lIHdpdGggLUInICcKKwlnaXQgZGlmZiAtQiBzZXEgPnJlcyAmJgorCWdyZXAgIl5cXFxcICIgcmVzICYmCisJISBncmVwICJeLi4qXFxcXCAiIHJlcworJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90NDAyMy1kaWZmLXJlbmFtZS10eXBlY2hhbmdlLnNoIGIvdC90NDAyMy1kaWZmLXJlbmFtZS10eXBlY2hhbmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhjOTgyMzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDIzLWRpZmYtcmVuYW1lLXR5cGVjaGFuZ2Uuc2gKQEAgLTAsMCArMSw4NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3R5cGVjaGFuZ2UgcmVuYW1lIGRldGVjdGlvbicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJcm0gLWYgZm9vIGJhciAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID5mb28gJiYKKwl0ZXN0X2xuX3NfYWRkIGxpbmtsaW5rIGJhciAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBJbml0aWFsICYmCisJZ2l0IHRhZyBvbmUgJiYKKworCWdpdCBybSAtZiBmb28gYmFyICYmCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPmJhciAmJgorCXRlc3RfbG5fc19hZGQgbGlua2xpbmsgZm9vICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFNlY29uZCAmJgorCWdpdCB0YWcgdHdvICYmCisKKwlnaXQgcm0gLWYgZm9vIGJhciAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLWEgLW0gVGhpcmQgJiYKKwlnaXQgdGFnIHRocmVlICYmCisKKwltdiBmb28gYmFyICYmCisJdGVzdF9sbl9zX2FkZCBsaW5rbGluayBmb28gJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBjb21taXQgLWEgLW0gRm91cnRoICYmCisJZ2l0IHRhZyBmb3VyICYmCisKKwkjIFRoaXMgaXMgcHVyZWx5IGZvciBzYW5pdHkgY2hlY2sKKworCWdpdCBybSAtZiBmb28gYmFyICYmCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgPmZvbyAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9NYWtlZmlsZSA+YmFyICYmCisJZ2l0IGFkZCBmb28gYmFyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBGaWZ0aCAmJgorCWdpdCB0YWcgZml2ZSAmJgorCisJZ2l0IHJtIC1mIGZvbyBiYXIgJiYKKwljYXQgIiRURVNUX0RJUkVDVE9SWSIvLi4vTWFrZWZpbGUgPmZvbyAmJgorCWNhdCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HID5iYXIgJiYKKwlnaXQgYWRkIGZvbyBiYXIgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFNpeHRoICYmCisJZ2l0IHRhZyBzaXgKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcm9zcyByZW5hbWVzIHRvIGJlIGRldGVjdGVkIGZvciByZWd1bGFyIGZpbGVzJyAnCisKKwlnaXQgZGlmZi10cmVlIGZpdmUgc2l4IC1yIC0tbmFtZS1zdGF0dXMgLUIgLU0gfCBzb3J0ID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIlIxMDAJZm9vCWJhciIKKwkJZWNobyAiUjEwMAliYXIJZm9vIgorCX0gfCBzb3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3Jvc3MgcmVuYW1lcyB0byBiZSBkZXRlY3RlZCBmb3IgdHlwZWNoYW5nZScgJworCisJZ2l0IGRpZmYtdHJlZSBvbmUgdHdvIC1yIC0tbmFtZS1zdGF0dXMgLUIgLU0gfCBzb3J0ID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIlIxMDAJZm9vCWJhciIKKwkJZWNobyAiUjEwMAliYXIJZm9vIgorCX0gfCBzb3J0ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZXMgYW5kIHJlbmFtZXMnICcKKworCWdpdCBkaWZmLXRyZWUgdGhyZWUgZm91ciAtciAtLW5hbWUtc3RhdHVzIC1CIC1NIHwgc29ydCA+YWN0dWFsICYmCisJeworCQkjIHNlZSAtQiAtTSAoIzYpIGluIHQ0MDA4CisJCWVjaG8gIkMxMDAJZm9vCWJhciIKKwkJZWNobyAiVDEwMAlmb28iCisJfSB8IHNvcnQgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMjQtZGlmZi1vcHRpbWl6ZS1jb21tb24uc2ggYi90L3Q0MDI0LWRpZmYtb3B0aW1pemUtY29tbW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlNzYwMTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDI0LWRpZmYtb3B0aW1pemUtY29tbW9uLnNoCkBAIC0wLDAgKzEsMTU3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tbW9uIHRhaWwgb3B0aW1pemF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworej16enp6enp6eiA7IyA4Cit6PSIkeiR6JHokeiR6JHokeiR6IiA7IyA2NAorej0iJHokeiR6JHokeiR6JHokeiIgOyMgNTEyCit6PSIkeiR6JHokeiIgOyMgMjA0OAorejIwNDc9JChleHByICIkeiIgOiAnLlwoLipcKScpIDsgIzIwNDcKKworeD16enp6enp6enp6CQkJOyMgMTAKK3k9IiR4JHgkeCR4JHgkeCR4JHgkeCR4Igk7IyAxMDAKK3o9IiR5JHkkeSR5JHkkeSR5JHkkeSR5Igk7IyAxMDAwCit6MTAwMD0kegorejEwMD0keQorejEwPSR4CisKK3pzKCkgeworCWNvdW50PSIkMSIKKwl3aGlsZSB0ZXN0ICIkY291bnQiIC1nZSAxMDAwCisJZG8KKwkJY291bnQ9JCgoJGNvdW50IC0gMTAwMCkpCisJCXByaW50ZiAiJXMiICR6MTAwMAorCWRvbmUKKwl3aGlsZSB0ZXN0ICIkY291bnQiIC1nZSAxMDAKKwlkbworCQljb3VudD0kKCgkY291bnQgLSAxMDApKQorCQlwcmludGYgIiVzIiAkejEwMAorCWRvbmUKKwl3aGlsZSB0ZXN0ICIkY291bnQiIC1nZSAxMAorCWRvCisJCWNvdW50PSQoKCRjb3VudCAtIDEwKSkKKwkJcHJpbnRmICIlcyIgJHoxMAorCWRvbmUKKwl3aGlsZSB0ZXN0ICIkY291bnQiIC1nZSAxCisJZG8KKwkJY291bnQ9JCgoJGNvdW50IC0gMSkpCisJCXByaW50ZiAieiIKKwlkb25lCit9CisKK3pjICgpIHsKKwlzZWQgLWUgIi9eaW5kZXgvZCIgXAorCQktZSAicy8kejEwMDAvUS9nIiBcCisJCS1lICJzL1FRUVFRUVFRUS9aOTAwMC9nIiBcCisJCS1lICJzL1FRUVFRUVFRL1o4MDAwL2ciIFwKKwkJLWUgInMvUVFRUVFRUS9aNzAwMC9nIiBcCisJCS1lICJzL1FRUVFRUS9aNjAwMC9nIiBcCisJCS1lICJzL1FRUVFRL1o1MDAwL2ciIFwKKwkJLWUgInMvUVFRUS9aNDAwMC9nIiBcCisJCS1lICJzL1FRUS9aMzAwMC9nIiBcCisJCS1lICJzL1FRL1oyMDAwL2ciIFwKKwkJLWUgInMvUS9aMTAwMC9nIiBcCisJCS1lICJzLyR6MTAwL1EvZyIgXAorCQktZSAicy9RUVFRUVFRUVEvWjkwMC9nIiBcCisJCS1lICJzL1FRUVFRUVFRL1o4MDAvZyIgXAorCQktZSAicy9RUVFRUVFRL1o3MDAvZyIgXAorCQktZSAicy9RUVFRUVEvWjYwMC9nIiBcCisJCS1lICJzL1FRUVFRL1o1MDAvZyIgXAorCQktZSAicy9RUVFRL1o0MDAvZyIgXAorCQktZSAicy9RUVEvWjMwMC9nIiBcCisJCS1lICJzL1FRL1oyMDAvZyIgXAorCQktZSAicy9RL1oxMDAvZyIgXAorCQktZSAicy8wMDBaLy9nIiBcCisJCS1lICJzLyR6MTAvUS9nIiBcCisJCS1lICJzL1FRUVFRUVFRUS9aOTAvZyIgXAorCQktZSAicy9RUVFRUVFRUS9aODAvZyIgXAorCQktZSAicy9RUVFRUVFRL1o3MC9nIiBcCisJCS1lICJzL1FRUVFRUS9aNjAvZyIgXAorCQktZSAicy9RUVFRUS9aNTAvZyIgXAorCQktZSAicy9RUVFRL1o0MC9nIiBcCisJCS1lICJzL1FRUS9aMzAvZyIgXAorCQktZSAicy9RUS9aMjAvZyIgXAorCQktZSAicy9RL1oxMC9nIiBcCisJCS1lICJzLzAwWi8vZyIgXAorCQktZSAicy96L1EvZyIgXAorCQktZSAicy9RUVFRUVFRUVEvWjkvZyIgXAorCQktZSAicy9RUVFRUVFRUS9aOC9nIiBcCisJCS1lICJzL1FRUVFRUVEvWjcvZyIgXAorCQktZSAicy9RUVFRUVEvWjYvZyIgXAorCQktZSAicy9RUVFRUS9aNS9nIiBcCisJCS1lICJzL1FRUVEvWjQvZyIgXAorCQktZSAicy9RUVEvWjMvZyIgXAorCQktZSAicy9RUS9aMi9nIiBcCisJCS1lICJzL1EvWjEvZyIgXAorCQktZSAicy8wWi8vZyIgXAorCTsKK30KKworZXhwZWN0X3BhdHRlcm4gKCkgeworCWNudD0iJDEiCisJY2F0IDw8RU9GCitkaWZmIC0tZ2l0IGEvZmlsZS1hJGNudCBiL2ZpbGUtYSRjbnQKKy0tLSBhL2ZpbGUtYSRjbnQKKysrKyBiL2ZpbGUtYSRjbnQKK0BAIC0xICsxIEBACistWiR7Y250fWEKKytaJHtjbnR9QQorZGlmZiAtLWdpdCBhL2ZpbGUtYiRjbnQgYi9maWxlLWIkY250CistLS0gYS9maWxlLWIkY250CisrKysgYi9maWxlLWIkY250CitAQCAtMSArMSBAQAorLWIKKytCCitkaWZmIC0tZ2l0IGEvZmlsZS1jJGNudCBiL2ZpbGUtYyRjbnQKKy0tLSBhL2ZpbGUtYyRjbnQKKysrKyBiL2ZpbGUtYyRjbnQKK0BAIC0xICsxIEBACistY1okY250CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKytDWiRjbnQKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZGlmZiAtLWdpdCBhL2ZpbGUtZCRjbnQgYi9maWxlLWQkY250CistLS0gYS9maWxlLWQkY250CisrKysgYi9maWxlLWQkY250CitAQCAtMSArMSBAQAorLWQKKytECitFT0YKK30KKworc2FtcGxlPScxMDIzIDEwMjQgMTAyNSAyMDQ3IDQwOTUnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZm9yIG4gaW4gJHNhbXBsZQorCWRvCisJCSggenMgJG4gOyBlY2hvIGEgKSA+ZmlsZS1hJG4gJiYKKwkJKCBlY2hvIGI7IHpzICRuOyBlY2hvICkgPmZpbGUtYiRuICYmCisJCSggcHJpbnRmIGM7IHpzICRuICkgPmZpbGUtYyRuICYmCisJCSggZWNobyBkOyB6cyAkbiApID5maWxlLWQkbiAmJgorCisJCWdpdCBhZGQgZmlsZS1hJG4gZmlsZS1iJG4gZmlsZS1jJG4gZmlsZS1kJG4gJiYKKworCQkoIHpzICRuIDsgZWNobyBBICkgPmZpbGUtYSRuICYmCisJCSggZWNobyBCOyB6cyAkbjsgZWNobyApID5maWxlLWIkbiAmJgorCQkoIHByaW50ZiBDOyB6cyAkbiApID5maWxlLWMkbiAmJgorCQkoIGVjaG8gRDsgenMgJG4gKSA+ZmlsZS1kJG4gJiYKKworCQlleHBlY3RfcGF0dGVybiAkbiB8fCByZXR1cm4gMQorCisJZG9uZSA+ZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLVUwJyAnCisKKwlmb3IgbiBpbiAkc2FtcGxlCisJZG8KKwkJZ2l0IGRpZmYgLVUwIGZpbGUtPyRuCisJZG9uZSB8IHpjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDI1LWh1bmstaGVhZGVyLnNoIGIvdC90NDAyNS1odW5rLWhlYWRlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YTNkYmMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAyNS1odW5rLWhlYWRlci5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZiBodW5rIGhlYWRlciB0cnVuY2F0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworTj0n5pel5pys6KqeJworTjE9J+aXpScKK04yPSfml6XmnKwnCitOUz0iJE4kTiROJE4kTiROJE4kTiROJE4kTiROJE4iCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJKAorCQllY2hvICJBICROUyIKKwkJZm9yIGMgaW4gQiBDIEQgRSBGIEcgSCBJIEogSworCQlkbworCQkJZWNobyAiICAkYyIKKwkJZG9uZQorCQllY2hvICJMICAkTlMiCisJCWZvciBjIGluIE0gTiBPIFAgUSBSIFMgVCBVIFYKKwkJZG8KKwkJCWVjaG8gIiAgJGMiCisJCWRvbmUKKwkpID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwlzZWQgLWUgIi9eICBbRVBdL3MvJC8gbW9kaWZpZWQvIiA8ZmlsZSA+ZmlsZSsgJiYKKwltdiBmaWxlKyBmaWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHVuayBoZWFkZXIgdHJ1bmNhdGlvbiB3aXRoIGFuIG92ZXJseSBsb25nIGxpbmUnICcKKworCWdpdCBkaWZmIHwgc2VkIC1uIC1lICJzL14uKkBALy9wIiA+YWN0dWFsICYmCisJKAorCQllY2hvICIgQSAkTiROJE4kTiROJE4kTiROJE4yIgorCQllY2hvICIgTCAgJE4kTiROJE4kTiROJE4kTiROMSIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAyNi1jb2xvci5zaCBiL3QvdDQwMjYtY29sb3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmIzMmM0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjYtY29sb3Iuc2gKQEAgLTAsMCArMSwxMTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggVGltbyBIaXJ2b25lbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGRpZmYvc3RhdHVzIGNvbG9yIGVzY2FwZSBjb2RlcycKKy4gLi90ZXN0LWxpYi5zaAorCitjb2xvcigpCit7CisJYWN0dWFsPSQoZ2l0IGNvbmZpZyAtLWdldC1jb2xvciBuby5zdWNoLnNsb3QgIiQxIikgJiYKKwl0ZXN0ICIkYWN0dWFsIiA9ICIbJDIiCit9CisKK2ludmFsaWRfY29sb3IoKQoreworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtY29sb3Igbm8uc3VjaC5zbG90ICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQnICcKKwljb2xvciAicmVzZXQiICJbbSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0cmlidXRlIGJlZm9yZSBjb2xvciBuYW1lJyAnCisJY29sb3IgImJvbGQgcmVkIiAiWzE7MzFtIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb2xvciBuYW1lIGJlZm9yZSBhdHRyaWJ1dGUnICcKKwljb2xvciAicmVkIGJvbGQiICJbMTszMW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0dHIgZmcgYmcnICcKKwljb2xvciAidWwgYmx1ZSByZWQiICJbNDszNDs0MW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZnIGF0dHIgYmcnICcKKwljb2xvciAiYmx1ZSB1bCByZWQiICJbNDszNDs0MW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZnIGJnIGF0dHInICcKKwljb2xvciAiYmx1ZSByZWQgdWwiICJbNDszNDs0MW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZnIGJnIGF0dHIuLi4nICcKKwljb2xvciAiYmx1ZSBib2xkIGRpbSB1bCBibGluayByZXZlcnNlIiAiWzE7Mjs0OzU7NzszNG0iCisnCisKKyMgbm90ZSB0aGF0IG5vYm9sZCBhbmQgbm9kaW0gYXJlIHRoZSBzYW1lIGNvZGUgKDIyKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0ciBuZWdhdGlvbicgJworCWNvbG9yICJub2JvbGQgbm9kaW0gbm91bCBub2JsaW5rIG5vcmV2ZXJzZSIgIlsyMjsyNDsyNTsyN20iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgY29sb3Igc3BlY2lmaWNhdGlvbicgJworCWNvbG9yICIyNTQgMjU1IGJvbGQgZGltIHVsIGJsaW5rIHJldmVyc2UiICJbMTsyOzQ7NTs3OzM4OzU7MjU0OzQ4OzU7MjU1bSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzdXJkbHkgbG9uZyBjb2xvciBzcGVjaWZpY2F0aW9uJyAnCisJY29sb3IgXAorCSAgIiNmZmZmZmYgI2ZmZmZmZiBib2xkIG5vYm9sZCBkaW0gbm9kaW0gdWwgbm91bCBibGluayBub2JsaW5rIHJldmVyc2Ugbm9yZXZlcnNlIiBcCisJICAiWzE7Mjs0OzU7NzsyMjsyNDsyNTsyNzszODsyOzI1NTsyNTU7MjU1OzQ4OzI7MjU1OzI1NTsyNTVtIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcwLTcgYXJlIGFsaWFzZXMgZm9yIGJhc2ljIEFOU0kgY29sb3IgbmFtZXMnICcKKwljb2xvciAiMCA3IiAiWzMwOzQ3bSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMjU2IGNvbG9ycycgJworCWNvbG9yICIyNTQgYm9sZCAyNTUiICJbMTszODs1OzI1NDs0ODs1OzI1NW0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzI0LWJpdCBjb2xvcnMnICcKKwljb2xvciAiI2ZmMDBmZiBibGFjayIgIlszODsyOzI1NTswOzI1NTs0MG0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJub3JtYWwiIHlpZWxkcyBubyBjb2xvciBhdCBhbGwiJyAnCisJY29sb3IgIm5vcm1hbCBibGFjayIgIls0MG0iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0xIGlzIGEgc3lub255bSBmb3IgIm5vcm1hbCInICcKKwljb2xvciAiLTEgYmxhY2siICJbNDBtIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb2xvciB0b28gc21hbGwnICcKKwlpbnZhbGlkX2NvbG9yICItMiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29sb3IgdG9vIGJpZycgJworCWludmFsaWRfY29sb3IgIjI1NiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXh0cmEgY2hhcmFjdGVyIGFmdGVyIGNvbG9yIG51bWJlcicgJworCWludmFsaWRfY29sb3IgIjNYIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBjaGFyYWN0ZXIgYWZ0ZXIgY29sb3IgbmFtZScgJworCWludmFsaWRfY29sb3IgInJlZFgiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dHJhIGNoYXJhY3RlciBhZnRlciBhdHRyaWJ1dGUnICcKKwlpbnZhbGlkX2NvbG9yICJkaW1YIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bmtub3duIGNvbG9yIHNsb3RzIGFyZSBpZ25vcmVkIChkaWZmKScgJworCWdpdCBjb25maWcgY29sb3IuZGlmZi5ub3N1Y2hzbG90d2lsbGV2ZXJiZWRlZmluZWQgd2hpdGUgJiYKKwlnaXQgZGlmZiAtLWNvbG9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vua25vd24gY29sb3Igc2xvdHMgYXJlIGlnbm9yZWQgKGJyYW5jaCknICcKKwlnaXQgY29uZmlnIGNvbG9yLmJyYW5jaC5ub3N1Y2hzbG90d2lsbGV2ZXJiZWRlZmluZWQgd2hpdGUgJiYKKwlnaXQgYnJhbmNoIC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vua25vd24gY29sb3Igc2xvdHMgYXJlIGlnbm9yZWQgKHN0YXR1cyknICcKKwlnaXQgY29uZmlnIGNvbG9yLnN0YXR1cy5ub3N1Y2hzbG90d2lsbGV2ZXJiZWRlZmluZWQgd2hpdGUgJiYKKwl7IGdpdCBzdGF0dXM7IHJldD0kPzsgfSAmJgorCWNhc2UgJHJldCBpbiAwfDEpIDogb2sgOzsgKikgZmFsc2UgOzsgZXNhYworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMjctZGlmZi1zdWJtb2R1bGUuc2ggYi90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxOGJmOTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDI3LWRpZmYtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMzU0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZmVyZW5jZSBpbiBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF90aWNrICYmCisJdGVzdF9jcmVhdGVfcmVwbyBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQllY2hvIGhlbGxvID53b3JsZCAmJgorCQlnaXQgYWRkIHdvcmxkICYmCisJCWdpdCBjb21taXQgLW0gc3VibW9kdWxlCisJKSAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBmcm90eiA+bml0Zm9sICYmCisJZ2l0IGFkZCBuaXRmb2wgc3ViICYmCisJZ2l0IGNvbW1pdCAtbSBzdXBlcnByb2plY3QgJiYKKworCSgKKwkJY2Qgc3ViICYmCisJCWVjaG8gZ29vZGJ5ZSA+d29ybGQgJiYKKwkJZ2l0IGFkZCB3b3JsZCAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgIzIiCisJKSAmJgorCisJc2V0IHggJCgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXYtbGlzdCBIRUFECisJKSAmJgorCWVjaG8gIjoxNjAwMDAgMTYwMDAwICQzICRfejQwIE0Jc3ViIiA+ZXhwZWN0ICYmCisJc3VidGlwPSQzIHN1YnByZXY9JDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1yYXcgSEVBRCcgJworCWdpdCBkaWZmIC0tcmF3IC0tYWJicmV2PTQwIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtaW5kZXggLS1yYXcgSEVBRCcgJworCWdpdCBkaWZmLWluZGV4IC0tcmF3IEhFQUQgPmFjdHVhbC5pbmRleCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMgLS1yYXcnICcKKwlnaXQgZGlmZi1maWxlcyAtLXJhdyA+YWN0dWFsLmZpbGVzICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWxlcworJworCitleHBlY3RfZnJvbV90byAoKSB7CisJcHJpbnRmICIlc1N1YnByb2plY3QgY29tbWl0ICVzXG4rU3VicHJvamVjdCBjb21taXQgJXNcbiIgXAorCQkiLSIgIiQxIiAiJDIiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQnICcKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBIRUFEIHdpdGggZGlydHkgc3VibW9kdWxlICh3b3JrIHRyZWUpJyAnCisJZWNobyA+PnN1Yi93b3JsZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKGluZGV4KScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZWNobyA+PndvcmxkICYmCisJCWdpdCBhZGQgd29ybGQKKwkpICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VidGlwICRzdWJwcmV2LWRpcnR5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgSEVBRCB3aXRoIGRpcnR5IHN1Ym1vZHVsZSAodW50cmFja2VkKScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZ2l0IGNsZWFuIC1xZmR4ICYmCisJCT5jcnVmdAorCSkgJiYKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBIRUFEIHdpdGggZGlydHkgc3VibW9kdWxlICh3b3JrIHRyZWUsIHJlZnMgbWF0Y2gpJyAnCisJZ2l0IGNvbW1pdCAtbSAieCIgc3ViICYmCisJZWNobyA+PnN1Yi93b3JsZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBkaWZmIC0taWdub3JlLXN1Ym1vZHVsZXMgSEVBRCA+YWN0dWFsMiAmJgorCSEgdGVzdCAtcyBhY3R1YWwyICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgSEVBRCA+YWN0dWFsMyAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbDMgPmFjdHVhbDMuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbDMuYm9keSAmJgorCWdpdCBkaWZmIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgSEVBRCA+YWN0dWFsNCAmJgorCSEgdGVzdCAtcyBhY3R1YWw0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKHdvcmsgdHJlZSwgcmVmcyBtYXRjaCkgWy5naXQvY29uZmlnXScgJworCWdpdCBjb25maWcgZGlmZi5pZ25vcmVTdWJtb2R1bGVzIGFsbCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHN1YiAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGFsbCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDIgJiYKKwkhIHRlc3QgLXMgYWN0dWFsMiAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDMgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwzID5hY3R1YWwzLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwzLmJvZHkgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsNCAmJgorCWdpdCBkaWZmIEhFQUQgLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJwcmV2ICRzdWJwcmV2LWRpcnR5ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi5pZ25vcmVTdWJtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKHdvcmsgdHJlZSwgcmVmcyBtYXRjaCkgWy5naXRtb2R1bGVzXScgJworCWdpdCBjb25maWcgZGlmZi5pZ25vcmVTdWJtb2R1bGVzIGRpcnR5ICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJISB0ZXN0IC1zIGFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHN1YiAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDIgJiYKKwkhIHRlc3QgLXMgYWN0dWFsMiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDMgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwzID5hY3R1YWwzLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwzLmJvZHkgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsNCAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYuaWdub3JlU3VibW9kdWxlcyAmJgorCXJtIC5naXRtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKGluZGV4LCByZWZzIG1hdGNoKScgJworCSgKKwkJY2Qgc3ViICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZWNobyA+PndvcmxkICYmCisJCWdpdCBhZGQgd29ybGQKKwkpICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIEhFQUQgd2l0aCBkaXJ0eSBzdWJtb2R1bGUgKHVudHJhY2tlZCwgcmVmcyBtYXRjaCknICcKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWdpdCBjbGVhbiAtcWZkeCAmJgorCQk+Y3J1ZnQKKwkpICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VicHJldiAkc3VicHJldi1kaXJ0eSAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz1hbGwgSEVBRCA+YWN0dWFsMiAmJgorCSEgdGVzdCAtcyBhY3R1YWwyICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgSEVBRCA+YWN0dWFsMyAmJgorCSEgdGVzdCAtcyBhY3R1YWwzICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSBIRUFEID5hY3R1YWw0ICYmCisJISB0ZXN0IC1zIGFjdHVhbDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgSEVBRCB3aXRoIGRpcnR5IHN1Ym1vZHVsZSAodW50cmFja2VkLCByZWZzIG1hdGNoKSBbLmdpdC9jb25maWddJyAnCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHN1YiAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDIgJiYKKwkhIHRlc3QgLXMgYWN0dWFsMiAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbDMgJiYKKwkhIHRlc3QgLXMgYWN0dWFsMyAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGRpcnR5ICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsNCAmJgorCSEgdGVzdCAtcyBhY3R1YWw0ICYmCisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz1ub25lIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBIRUFEIHdpdGggZGlydHkgc3VibW9kdWxlICh1bnRyYWNrZWQsIHJlZnMgbWF0Y2gpIFsuZ2l0bW9kdWxlc10nICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBhbGwgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsMiAmJgorCSEgdGVzdCAtcyBhY3R1YWwyICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgdW50cmFja2VkICYmCisJZ2l0IGRpZmYgSEVBRCA+YWN0dWFsMyAmJgorCSEgdGVzdCAtcyBhY3R1YWwzICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgZGlmZiBIRUFEID5hY3R1YWw0ICYmCisJISB0ZXN0IC1zIGFjdHVhbDQgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHN1YiAmJgorCWdpdCBkaWZmIEhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnByZXYgJHN1YnByZXYtZGlydHkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZSAmJgorCXJtIC5naXRtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIGJldHdlZW4gc3VibW9kdWxlIGNvbW1pdHMnICcKKwlnaXQgZGlmZiBIRUFEXi4uSEVBRCA+YWN0dWFsICYmCisJc2VkIC1lICIxLC9eQEAvZCIgYWN0dWFsID5hY3R1YWwuYm9keSAmJgorCWV4cGVjdF9mcm9tX3RvID5leHBlY3QuYm9keSAkc3VidGlwICRzdWJwcmV2ICYmCisJdGVzdF9jbXAgZXhwZWN0LmJvZHkgYWN0dWFsLmJvZHkgJiYKKwlnaXQgZGlmZiAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IEhFQUReLi5IRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYm9keSBhY3R1YWwuYm9keSAmJgorCWdpdCBkaWZmIC0taWdub3JlLXN1Ym1vZHVsZXMgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgYmV0d2VlbiBzdWJtb2R1bGUgY29tbWl0cyBbLmdpdC9jb25maWddJyAnCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldiAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldiAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwgJiYKKwlnaXQgZGlmZiAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IEhFQUReLi5IRUFEID5hY3R1YWwgJiYKKwlzZWQgLWUgIjEsL15AQC9kIiBhY3R1YWwgPmFjdHVhbC5ib2R5ICYmCisJZXhwZWN0X2Zyb21fdG8gPmV4cGVjdC5ib2R5ICRzdWJ0aXAgJHN1YnByZXYgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgYmV0d2VlbiBzdWJtb2R1bGUgY29tbWl0cyBbLmdpdG1vZHVsZXNdJyAnCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldiAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc3ViICYmCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldiAmJgorCXRlc3RfY21wIGV4cGVjdC5ib2R5IGFjdHVhbC5ib2R5ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzdWIgJiYKKwlnaXQgZGlmZiAgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCXNlZCAtZSAiMSwvXkBAL2QiIGFjdHVhbCA+YWN0dWFsLmJvZHkgJiYKKwlleHBlY3RfZnJvbV90byA+ZXhwZWN0LmJvZHkgJHN1YnRpcCAkc3VicHJldiAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZSAmJgorCXJtIC5naXRtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIChlbXB0eSBzdWJtb2R1bGUgZGlyKScgJworCTogPmVtcHR5ICYmCisJcm0gLXJmIHN1Yi8qIHN1Yi8uZ2l0ICYmCisJZ2l0IGRpZmYgPiBhY3R1YWwuZW1wdHkgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwuZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3RlZCBzdWJtb2R1bGUgc2V0dXAnICcKKworCSMgMzkgZWZzCisJYz1mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgJiYKKwkoCisJCWVjaG8gIjAwMDAwMCAkX3o0MCAwCXN1YiIgJiYKKwkJZWNobyAiMTYwMDAwIDEkYyAxCXN1YiIgJiYKKwkJZWNobyAiMTYwMDAwIDIkYyAyCXN1YiIgJiYKKwkJZWNobyAiMTYwMDAwIDMkYyAzCXN1YiIKKwkpIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwllY2hvID5leHBlY3Qubm9zdWIgJ1wnJ2RpZmYgLS1jYyBzdWIKK2luZGV4IDJmZmZmZmYsM2ZmZmZmZi4uMDAwMDAwMAorLS0tIGEvc3ViCisrKysgYi9zdWIKK0BAQCAtMSwxIC0xLDEgKzEsMSBAQEAKKy0gU3VicHJvamVjdCBjb21taXQgMmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgorIC1TdWJwcm9qZWN0IGNvbW1pdCAzZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmCisrK1N1YnByb2plY3QgY29tbWl0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnXCcnICYmCisKKwloaD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlzZWQgLWUgInMvJF96NDAvJGhoLyIgZXhwZWN0Lm5vc3ViID5leHBlY3Qud2l0aHN1YgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmVkIChlbXB0eSBzdWJtb2R1bGUpJyAnCisJcm0gLWZyIHN1YiAmJiBta2RpciBzdWIgJiYKKwlnaXQgZGlmZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5vc3ViIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lZCAod2l0aCBzdWJtb2R1bGUpJyAnCisJcm0gLWZyIHN1YiAmJgorCWdpdCBjbG9uZSAtLW5vLWNoZWNrb3V0IC4gc3ViICYmCisJZ2l0IGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC53aXRoc3ViIGFjdHVhbAorJworCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDI4LWZvcm1hdC1wYXRjaC1taW1lLWhlYWRlcnMuc2ggYi90L3Q0MDI4LWZvcm1hdC1wYXRjaC1taW1lLWhlYWRlcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjA0YmE2NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMjgtZm9ybWF0LXBhdGNoLW1pbWUtaGVhZGVycy5zaApAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZm9ybWF0LXBhdGNoIG1pbWUgaGVhZGVycyBhbmQgZXh0cmEgaGVhZGVycyBkbyBub3QgY29uZmxpY3QnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGNvbW1pdCB3aXRoIHV0Zi04IGJvZHknICcKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gbW9yZSA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0d28KKworCXV0Zi04IGJvZHk6IMOxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaCBoYXMgbWltZSBoZWFkZXJzJyAnCisJcm0gLWYgMDAwMS10d28ucGF0Y2ggJiYKKwlnaXQgZm9ybWF0LXBhdGNoIEhFQUReICYmCisJZ3JlcCAtaSAiY29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiAwMDAxLXR3by5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaCBoYXMgbWltZSBhbmQgZXh0cmEgaGVhZGVycycgJworCXJtIC1mIDAwMDEtdHdvLnBhdGNoICYmCisJZ2l0IGNvbmZpZyBmb3JtYXQuaGVhZGVycyAieC1mb286IGJhciIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIEhFQUReICYmCisJZ3JlcCAtaSAieC1mb286IGJhciIgMDAwMS10d28ucGF0Y2ggJiYKKwlncmVwIC1pICJjb250ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiIDAwMDEtdHdvLnBhdGNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAyOS1kaWZmLXRyYWlsaW5nLXNwYWNlLnNoIGIvdC90NDAyOS1kaWZmLXRyYWlsaW5nLXNwYWNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNjY2MyMzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDI5LWRpZmYtdHJhaWxpbmctc3BhY2Uuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgSmltIE1leWVyaW5nCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIGhvbm9ycyBjb25maWcgb3B0aW9uLCBkaWZmLnN1cHByZXNzQmxhbmtFbXB0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA8PFxFT0YgPiBleHAgfHwKK2RpZmYgLS1naXQgYS9mIGIvZgoraW5kZXggNWY2YTI2My4uOGNiOGJhZSAxMDA2NDQKKy0tLSBhL2YKKysrKyBiL2YKK0BAIC0xLDIgKzEsMiBAQAorCisteAorK3kKK0VPRgorZXhpdCAxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICIkdGVzdF9kZXNjcmlwdGlvbiIgXAorICAgICdwcmludGYgIlxueFxuIiA+IGYgJiYKKyAgICAgZ2l0IGFkZCBmICYmCisgICAgIGdpdCBjb21taXQgLXEgLW0uIGYgJiYKKyAgICAgcHJpbnRmICJcbnlcbiIgPiBmICYmCisgICAgIGdpdCBjb25maWcgLS1ib29sIGRpZmYuc3VwcHJlc3NCbGFua0VtcHR5IHRydWUgJiYKKyAgICAgZ2l0IGRpZmYgZiA+IGFjdHVhbCAmJgorICAgICB0ZXN0X2NtcCBleHAgYWN0dWFsICYmCisgICAgIHBlcmwgLWkuYmFrIC1wIC1lICJzL15cJC8gLyIgZXhwICYmCisgICAgIGdpdCBjb25maWcgLS1ib29sIGRpZmYuc3VwcHJlc3NCbGFua0VtcHR5IGZhbHNlICYmCisgICAgIGdpdCBkaWZmIGYgPiBhY3R1YWwgJiYKKyAgICAgdGVzdF9jbXAgZXhwIGFjdHVhbCAmJgorICAgICBnaXQgY29uZmlnIC0tYm9vbCAtLXVuc2V0IGRpZmYuc3VwcHJlc3NCbGFua0VtcHR5ICYmCisgICAgIGdpdCBkaWZmIGYgPiBhY3R1YWwgJiYKKyAgICAgdGVzdF9jbXAgZXhwIGFjdHVhbAorICAgICAnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAzMC1kaWZmLXRleHRjb252LnNoIGIvdC90NDAzMC1kaWZmLXRleHRjb252LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhZDZjN2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDMwLWRpZmYtdGV4dGNvbnYuc2gKQEAgLTAsMCArMSwxNzYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmLioudGV4dGNvbnYgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKworZmluZF9kaWZmKCkgeworCXNlZCAnMSwvXmluZGV4IC9kJyB8IHNlZCAnL14tLSAkLywkZCcKK30KKworY2F0ID5leHBlY3QuYmluYXJ5IDw8J0VPRicKK0JpbmFyeSBmaWxlcyBhL2ZpbGUgYW5kIGIvZmlsZSBkaWZmZXIKK0VPRgorCitjYXQgPmV4cGVjdC50ZXh0IDw8J0VPRicKKy0tLSBhL2ZpbGUKKysrKyBiL2ZpbGUKK0BAIC0xICsxLDIgQEAKKyAwCisrMQorRU9GCisKK2NhdCA+aGV4ZHVtcCA8PCdFT0YnCisjIS9iaW4vc2gKKyIkUEVSTF9QQVRIIiAtZSAnJC8gPSB1bmRlZjsgJF8gPSA8Pjsgcy8uL29yZCgkJikvZ2U7IHByaW50ICRfJyA8ICIkMSIKK0VPRgorY2htb2QgK3ggaGV4ZHVtcAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiaW5hcnkgZmlsZSB3aXRoIGhpc3RvcnknICcKKwlwcmludGYgIlxcMFxcbiIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCXByaW50ZiAiXFwwMVxcbiIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBpcyBjb25zaWRlcmVkIGJpbmFyeSBieSBwb3JjZWxhaW4nICcKKwlnaXQgZGlmZiBIRUFEXiBIRUFEID5kaWZmICYmCisJZmluZF9kaWZmIDxkaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYmluYXJ5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGlzIGNvbnNpZGVyZWQgYmluYXJ5IGJ5IHBsdW1iaW5nJyAnCisJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEXiBIRUFEID5kaWZmICYmCisJZmluZF9kaWZmIDxkaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYmluYXJ5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXh0Y29udiBmaWx0ZXJzJyAnCisJZWNobyBmaWxlIGRpZmY9Zm9vID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgZGlmZi5mb28udGV4dGNvbnYgIlwiJChwd2QpXCIiL2hleGR1bXAgJiYKKwlnaXQgY29uZmlnIGRpZmYuZmFpbC50ZXh0Y29udiBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHByb2R1Y2VzIHRleHQnICcKKwlnaXQgZGlmZiBIRUFEXiBIRUFEID5kaWZmICYmCisJZmluZF9kaWZmIDxkaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QudGV4dCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBjb21taXQgcHJvZHVjZXMgdGV4dCcgJworCWdpdCBzaG93IEhFQUQgPmRpZmYgJiYKKwlmaW5kX2RpZmYgPGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC50ZXh0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgcHJvZHVjZXMgYmluYXJ5JyAnCisJZ2l0IGRpZmYtdHJlZSAtcCBIRUFEXiBIRUFEID5kaWZmICYmCisJZmluZF9kaWZmIDxkaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYmluYXJ5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgcHJvZHVjZXMgdGV4dCcgJworCWdpdCBsb2cgLTEgLXAgPmxvZyAmJgorCWZpbmRfZGlmZiA8bG9nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QudGV4dCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0LXBhdGNoIHByb2R1Y2VzIGJpbmFyeScgJworCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1iaW5hcnkgLS1zdGRvdXQgSEVBRF4gPnBhdGNoICYmCisJZmluZF9kaWZmIDxwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmJpbmFyeSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC12IHByb2R1Y2VzIHRleHQnICcKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUReICYmCisJZ2l0IHN0YXR1cyAtdiA+ZGlmZiAmJgorCWZpbmRfZGlmZiA8ZGlmZiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnRleHQgYWN0dWFsICYmCisJZ2l0IHJlc2V0IC0tc29mdCBIRUFEQHsxfQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGJsb2IgcHJvZHVjZXMgYmluYXJ5JyAnCisJZ2l0IHNob3cgSEVBRDpmaWxlID5hY3R1YWwgJiYKKwlwcmludGYgIlxcMFxcblxcMDFcXG4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cgLS10ZXh0Y29udiBibG9iIHByb2R1Y2VzIHRleHQnICcKKwlnaXQgc2hvdyAtLXRleHRjb252IEhFQUQ6ZmlsZSA+YWN0dWFsICYmCisJcHJpbnRmICIwXFxuMVxcbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyAtLW5vLXRleHRjb252IGJsb2IgcHJvZHVjZXMgYmluYXJ5JyAnCisJZ2l0IHNob3cgLS1uby10ZXh0Y29udiBIRUFEOmZpbGUgPmFjdHVhbCAmJgorCXByaW50ZiAiXFwwXFxuXFwwMVxcbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcC1kaWZmICgtRykgb3BlcmF0ZXMgb24gdGV4dGNvbnYgZGF0YSAoYWRkKScgJworCWVjaG8gb25lID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tcm9vdCAtLWZvcm1hdD0lcyAtRzAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcC1kaWZmICgtRykgb3BlcmF0ZXMgb24gdGV4dGNvbnYgZGF0YSAobW9kaWZpY2F0aW9uKScgJworCWVjaG8gdHdvID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tcm9vdCAtLWZvcm1hdD0lcyAtRzEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGlja2F4ZSAoLVMpIG9wZXJhdGVzIG9uIHRleHRjb252IGRhdGEgKGFkZCknICcKKwllY2hvIG9uZSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLXJvb3QgLS1mb3JtYXQ9JXMgLVMwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BpY2theGUgKC1TKSBvcGVyYXRlcyBvbiB0ZXh0Y29udiBkYXRhIChtb2RpZmljYXRpb24pJyAnCisJZWNobyB0d28gPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1yb290IC0tZm9ybWF0PSVzIC1TMSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdC5zdGF0IDw8J0VPRicKKyBmaWxlIHwgQmluIDIgLT4gNCBieXRlcworIDEgZmlsZSBjaGFuZ2VkLCAwIGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmZzdGF0IGRvZXMgbm90IHJ1biB0ZXh0Y29udicgJworCWVjaG8gZmlsZSBkaWZmPWZhaWwgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGRpZmYgLS1zdGF0IEhFQUReIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Quc3RhdCBhY3R1YWwgJiYKKworCWhlYWQgLW4xIDxleHBlY3Quc3RhdCA+ZXhwZWN0LmxpbmUxICYmCisJaGVhZCAtbjEgPGFjdHVhbCA+YWN0dWFsLmxpbmUxICYmCisJdGVzdF9jbXAgZXhwZWN0LmxpbmUxIGFjdHVhbC5saW5lMQorJworIyByZXN0b3JlIHdvcmtpbmcgc2V0dXAKK2VjaG8gZmlsZSBkaWZmPWZvbyA+LmdpdGF0dHJpYnV0ZXMKKworY2F0ID5leHBlY3QudHlwZWNoYW5nZSA8PCdFT0YnCistLS0gYS9maWxlCisrKysgL2Rldi9udWxsCitAQCAtMSwyICswLDAgQEAKKy0wCistMQorZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCituZXcgZmlsZSBtb2RlIDEyMDAwMAoraW5kZXggMDAwMDAwMC4uNjdiZTQyMQorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZQorQEAgLTAsMCArMSBAQAorK2Zyb3R6CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXh0Y29udiBkb2VzIG5vdCBhY3Qgb24gc3ltbGlua3MnICcKKwlybSAtZiBmaWxlICYmCisJdGVzdF9sbl9zX2FkZCBmcm90eiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSB0eXBlY2hhbmdlICYmCisJZ2l0IHNob3cgPmRpZmYgJiYKKwlmaW5kX2RpZmYgPGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC50eXBlY2hhbmdlIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMzEtZGlmZi1yZXdyaXRlLWJpbmFyeS5zaCBiL3QvdDQwMzEtZGlmZi1yZXdyaXRlLWJpbmFyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYWNjNjY5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzMS1kaWZmLXJld3JpdGUtYmluYXJ5LnNoCkBAIC0wLDAgKzEsODAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXdyaXRlIGRpZmYgb24gYmluYXJ5IGZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFdlIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIG1lZXQgdGhlIE1JTklNVU1fQlJFQUtfU0laRQorIyByZXF1aXJlbWVudC4KK21ha2VfZmlsZSgpIHsKKwkjIGNvbW1vbiBmaXJzdCBsaW5lIHRvIGhlbHAgaWRlbnRpZnkgcmV3cml0ZSB2ZXJzdXMgcmVndWxhciBkaWZmCisJcHJpbnRmICI9XG4iID5maWxlCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKKwlkbworCQlmb3IgaiBpbiAxIDIgMyA0IDUgNiA3IDggOQorCQlkbworCQkJZm9yIGsgaW4gMSAyIDMgNCA1CisJCQlkbworCQkJCXByaW50ZiAiJDFcbiIKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUgPj5maWxlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBiaW5hcnkgZmlsZSB3aXRoIGNoYW5nZXMnICcKKwltYWtlX2ZpbGUgIlxcMCIgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwltYWtlX2ZpbGUgIlxcMDEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbmlsbGEgZGlmZiBpcyBiaW5hcnknICcKKwlnaXQgZGlmZiA+ZGlmZiAmJgorCWdyZXAgIkJpbmFyeSBmaWxlcyBhL2ZpbGUgYW5kIGIvZmlsZSBkaWZmZXIiIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSBkaWZmIGlzIGJpbmFyeScgJworCWdpdCBkaWZmIC1CID5kaWZmICYmCisJZ3JlcCAiZGlzc2ltaWxhcml0eSBpbmRleCIgZGlmZiAmJgorCWdyZXAgIkJpbmFyeSBmaWxlcyBhL2ZpbGUgYW5kIGIvZmlsZSBkaWZmZXIiIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSBkaWZmIGNhbiBzaG93IGJpbmFyeSBwYXRjaCcgJworCWdpdCBkaWZmIC1CIC0tYmluYXJ5ID5kaWZmICYmCisJZ3JlcCAiZGlzc2ltaWxhcml0eSBpbmRleCIgZGlmZiAmJgorCWdyZXAgIkdJVCBiaW5hcnkgcGF0Y2giIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSBkaWZmIC0tbnVtc3RhdCBzaG93cyBiaW5hcnkgY2hhbmdlcycgJworCWdpdCBkaWZmIC1CIC0tbnVtc3RhdCAtLXN1bW1hcnkgPmRpZmYgJiYKKwlncmVwIC1lICItCS0JIiBkaWZmICYmCisJZ3JlcCAiIHJld3JpdGUgZmlsZSIgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tc3RhdCBjb3VudHMgYmluYXJ5IHJld3JpdGUgYXMgMCBsaW5lcycgJworCWdpdCBkaWZmIC1CIC0tc3RhdCAtLXN1bW1hcnkgPmRpZmYgJiYKKwlncmVwICJCaW4iIGRpZmYgJiYKKwl0ZXN0X2kxOG5ncmVwICIwIGluc2VydGlvbnMuKjAgZGVsZXRpb25zIiBkaWZmICYmCisJZ3JlcCAiIHJld3JpdGUgZmlsZSIgZGlmZgorJworCit7CisJZWNobyAiIyEkU0hFTExfUEFUSCIKKwljYXQgPDwnRU9GJworIiRQRVJMX1BBVEgiIC1lICckLyA9IHVuZGVmOyAkXyA9IDw+OyBzLy4vb3JkKCQmKS9nZTsgcHJpbnQgJF8nIDwgIiQxIgorRU9GCit9ID5kdW1wCitjaG1vZCAreCBkdW1wCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRleHRjb252JyAnCisJZWNobyBmaWxlIGRpZmY9Zm9vID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgZGlmZi5mb28udGV4dGNvbnYgIlwiJChwd2QpXCIiL2R1bXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSBkaWZmIHJlc3BlY3RzIHRleHRjb252JyAnCisJZ2l0IGRpZmYgLUIgPmRpZmYgJiYKKwlncmVwICJkaXNzaW1pbGFyaXR5IGluZGV4IiBkaWZmICYmCisJZ3JlcCAiXi02MSIgZGlmZiAmJgorCWdyZXAgIl4tMCIgZGlmZgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMzItZGlmZi1pbnRlci1odW5rLWNvbnRleHQuc2ggYi90L3Q0MDMyLWRpZmYtaW50ZXItaHVuay1jb250ZXh0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0ZTNlMjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDMyLWRpZmYtaW50ZXItaHVuay1jb250ZXh0LnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIGh1bmsgZnVzaW5nJworCisuIC4vdGVzdC1saWIuc2gKKworZigpIHsKKwllY2hvICQxCisJaT0xCisJd2hpbGUgdGVzdCAkaSAtbGUgJDIKKwlkbworCQllY2hvICRpCisJCWk9JChleHByICRpICsgMSkKKwlkb25lCisJZWNobyAkMworfQorCit0KCkgeworCWNhc2UgJCMgaW4KKwk0KSBodW5rcz0kNDsgY21kPSJkaWZmIC1VJDMiOzsKKwk1KSBodW5rcz0kNTsgY21kPSJkaWZmIC1VJDMgLS1pbnRlci1odW5rLWNvbnRleHQ9JDQiOzsKKwllc2FjCisJbGFiZWw9IiRjbWQsICQxIGNvbW1vbiAkMiIKKwlmaWxlPWYkMQorCWV4cGVjdGVkPWV4cGVjdGVkLiRmaWxlLiQzLiRodW5rcworCisJaWYgISB0ZXN0IC1mICRmaWxlCisJdGhlbgorCQlmIEEgJDEgQiA+JGZpbGUKKwkJZ2l0IGFkZCAkZmlsZQorCQlnaXQgY29tbWl0IC1xIC1tLiAkZmlsZQorCQlmIFggJDEgWSA+JGZpbGUKKwlmaQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGxhYmVsOiBjb3VudCBodW5rcyAoJGh1bmtzKSIgIgorCQl0ZXN0ICQoZ2l0ICRjbWQgJGZpbGUgfCBncmVwICdeQEAgJyB8IHdjIC1sKSA9ICRodW5rcworCSIKKworCXRlc3QgLWYgJGV4cGVjdGVkICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGxhYmVsOiBjaGVjayBvdXRwdXQiICIKKwkJZ2l0ICRjbWQgJGZpbGUgfCBncmVwIC12ICdeaW5kZXggJyA+YWN0dWFsICYmCisJCXRlc3RfY21wICRleHBlY3RlZCBhY3R1YWwKKwkiCit9CisKK2NhdCA8PEVPRiA+ZXhwZWN0ZWQuZjEuMC4xIHx8IGV4aXQgMQorZGlmZiAtLWdpdCBhL2YxIGIvZjEKKy0tLSBhL2YxCisrKysgYi9mMQorQEAgLTEsMyArMSwzIEBACistQQorK1gKKyAxCistQgorK1kKK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdGVkLmYxLjAuMiB8fCBleGl0IDEKK2RpZmYgLS1naXQgYS9mMSBiL2YxCistLS0gYS9mMQorKysrIGIvZjEKK0BAIC0xICsxIEBACistQQorK1gKK0BAIC0zICszIEBAIEEKKy1CCisrWQorRU9GCisKKyMgY29tbW9uIGxpbmVzCWN0eAlpbnRyY3R4CWh1bmtzCit0IDEgbGluZQkwCQkyCit0IDEgbGluZQkwCTAJMgordCAxIGxpbmUJMAkxCTEKK3QgMSBsaW5lCTAJMgkxCit0IDEgbGluZQkxCQkxCisKK3QgMiBsaW5lcwkwCQkyCit0IDIgbGluZXMJMAkwCTIKK3QgMiBsaW5lcwkwCTEJMgordCAyIGxpbmVzCTAJMgkxCit0IDIgbGluZXMJMQkJMQorCit0IDMgbGluZXMJMQkJMgordCAzIGxpbmVzCTEJMAkyCit0IDMgbGluZXMJMQkxCTEKK3QgMyBsaW5lcwkxCTIJMQorCit0IDkgbGluZXMJMwkJMgordCA5IGxpbmVzCTMJMgkyCit0IDkgbGluZXMJMwkzCTEKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDMzLWRpZmYtcGF0aWVuY2Uuc2ggYi90L3Q0MDMzLWRpZmYtcGF0aWVuY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2M5OTMyZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzMtZGlmZi1wYXRpZW5jZS5zaApAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGF0aWVuY2UgZGlmZiBhbGdvcml0aG0nCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZGlmZi1hbHRlcm5hdGl2ZS5zaAorCit0ZXN0X2RpZmZfZnJvYm5pdHogInBhdGllbmNlIgorCit0ZXN0X2RpZmZfdW5pcXVlICJwYXRpZW5jZSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDM0LWRpZmYtd29yZHMuc2ggYi90L3Q0MDM0LWRpZmYtd29yZHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjJmNTVmYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQtZGlmZi13b3Jkcy5zaApAQCAtMCwwICsxLDM4NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3dvcmQgZGlmZiBjb2xvcnMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaAorCitjYXQgPnByZS5zaW1wbGUgPDwtXEVPRgorCWgoNCkKKworCWEgPSBiICsgYworRU9GCitjYXQgPnBvc3Quc2ltcGxlIDw8LVxFT0YKKwloKDQpLGhoWzQ0XQorCisJYSA9IGIgKyBjCisKKwlhYSA9IGEKKworCWFlZmYgPSBhZWZmICogKCBhYWEgKQorRU9GCitjYXQgPmV4cGVjdC5sZXR0ZXItcnVucy1hcmUtd29yZHMgPDwtXEVPRgorCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKwk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorCTxDWUFOPkBAIC0xLDMgKzEsNyBAQDxSRVNFVD4KKwloKDQpLDxHUkVFTj5oaDxSRVNFVD5bNDRdCisKKwlhID0gYiArIGM8UkVTRVQ+CisKKwk8R1JFRU4+YWEgPSBhPFJFU0VUPgorCisJPEdSRUVOPmFlZmYgPSBhZWZmICogKCBhYWE8UkVTRVQ+ICkKK0VPRgorY2F0ID5leHBlY3Qubm9uLXdoaXRlc3BhY2UtaXMtd29yZCA8PC1cRU9GCisJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+CisJPEJPTEQ+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CisJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CisJPENZQU4+QEAgLTEsMyArMSw3IEBAPFJFU0VUPgorCWgoNCk8R1JFRU4+LGhoWzQ0XTxSRVNFVD4KKworCWEgPSBiICsgYzxSRVNFVD4KKworCTxHUkVFTj5hYSA9IGE8UkVTRVQ+CisKKwk8R1JFRU4+YWVmZiA9IGFlZmYgKiAoIGFhYSApPFJFU0VUPgorRU9GCisKK3dvcmRfZGlmZiAoKSB7CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAiJEAiIHByZSBwb3N0ID5vdXRwdXQgJiYKKwl0ZXN0X2RlY29kZV9jb2xvciA8b3V0cHV0ID5vdXRwdXQuZGVjcnlwdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dC5kZWNyeXB0ZWQKK30KKwordGVzdF9sYW5ndWFnZV9kcml2ZXIgKCkgeworCWxhbmc9JDEKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJkaWZmIGRyaXZlciAnJGxhbmcnIiAnCisJCWNwICIkVEVTVF9ESVJFQ1RPUlkvdDQwMzQvJyIkbGFuZyInL3ByZSIgXAorCQkJIiRURVNUX0RJUkVDVE9SWS90NDAzNC8nIiRsYW5nIicvcG9zdCIgXAorCQkJIiRURVNUX0RJUkVDVE9SWS90NDAzNC8nIiRsYW5nIicvZXhwZWN0IiAuICYmCisJCWVjaG8gIiogZGlmZj0nIiRsYW5nIiciID4uZ2l0YXR0cmlidXRlcyAmJgorCQl3b3JkX2RpZmYgLS1jb2xvci13b3JkcworCScKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBkaWZmLmNvbG9yLm9sZCByZWQgJiYKKwlnaXQgY29uZmlnIGRpZmYuY29sb3IubmV3IGdyZWVuICYmCisJZ2l0IGNvbmZpZyBkaWZmLmNvbG9yLmZ1bmMgbWFnZW50YQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgcHJlIGFuZCBwb3N0IHdpdGggcnVucyBvZiB3aGl0ZXNwYWNlJyAnCisJY3AgcHJlLnNpbXBsZSBwcmUgJiYKKwljcCBwb3N0LnNpbXBsZSBwb3N0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmQgZGlmZiB3aXRoIHJ1bnMgb2Ygd2hpdGVzcGFjZScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+CisJCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CisJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CisJCTxDWUFOPkBAIC0xLDMgKzEsNyBAQDxSRVNFVD4KKwkJPFJFRD5oKDQpPFJFU0VUPjxHUkVFTj5oKDQpLGhoWzQ0XTxSRVNFVD4KKworCQlhID0gYiArIGM8UkVTRVQ+CisKKwkJPEdSRUVOPmFhID0gYTxSRVNFVD4KKworCQk8R1JFRU4+YWVmZiA9IGFlZmYgKiAoIGFhYSApPFJFU0VUPgorCUVPRgorCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzICYmCisJd29yZF9kaWZmIC0td29yZC1kaWZmPWNvbG9yICYmCisJd29yZF9kaWZmIC0tY29sb3IgLS13b3JkLWRpZmY9Y29sb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS13b3JkLWRpZmY9cG9yY2VsYWluJyAnCisJc2VkICdzLyMuKiQvLycgPmV4cGVjdCA8PC1cRU9GICYmCisJCWRpZmYgLS1naXQgYS9wcmUgYi9wb3N0CisJCWluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0CisJCS0tLSBhL3ByZQorCQkrKysgYi9wb3N0CisJCUBAIC0xLDMgKzEsNyBAQAorCQktaCg0KQorCQkraCg0KSxoaFs0NF0KKwkJfgorCQkgIyBzaWduaWZpY2FudCBzcGFjZQorCQl+CisJCSBhID0gYiArIGMKKwkJfgorCQl+CisJCSthYSA9IGEKKwkJfgorCQl+CisJCSthZWZmID0gYWVmZiAqICggYWFhICkKKwkJfgorCUVPRgorCXdvcmRfZGlmZiAtLXdvcmQtZGlmZj1wb3JjZWxhaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS13b3JkLWRpZmY9cGxhaW4nICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCWRpZmYgLS1naXQgYS9wcmUgYi9wb3N0CisJCWluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0CisJCS0tLSBhL3ByZQorCQkrKysgYi9wb3N0CisJCUBAIC0xLDMgKzEsNyBAQAorCQlbLWgoNCktXXsraCg0KSxoaFs0NF0rfQorCisJCWEgPSBiICsgYworCisJCXsrYWEgPSBhK30KKworCQl7K2FlZmYgPSBhZWZmICogKCBhYWEgKSt9CisJRU9GCisJd29yZF9kaWZmIC0td29yZC1kaWZmPXBsYWluICYmCisJd29yZF9kaWZmIC0td29yZC1kaWZmPXBsYWluIC0tbm8tY29sb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS13b3JkLWRpZmY9cGxhaW4gLS1jb2xvcicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+CisJCTxCT0xEPmluZGV4IDMzMGIwNGYuLjVlZDhlZmYgMTAwNjQ0PFJFU0VUPgorCQk8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+CisJCTxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+CisJCTxDWUFOPkBAIC0xLDMgKzEsNyBAQDxSRVNFVD4KKwkJPFJFRD5bLWgoNCktXTxSRVNFVD48R1JFRU4+eytoKDQpLGhoWzQ0XSt9PFJFU0VUPgorCisJCWEgPSBiICsgYzxSRVNFVD4KKworCQk8R1JFRU4+eythYSA9IGErfTxSRVNFVD4KKworCQk8R1JFRU4+eythZWZmID0gYWVmZiAqICggYWFhICkrfTxSRVNFVD4KKwlFT0YKKwl3b3JkX2RpZmYgLS13b3JkLWRpZmY9cGxhaW4gLS1jb2xvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JkIGRpZmYgd2l0aG91dCBjb250ZXh0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggMzMwYjA0Zi4uNWVkOGVmZiAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKwkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKwkJPENZQU4+QEAgLTEgKzEgQEA8UkVTRVQ+CisJCTxSRUQ+aCg0KTxSRVNFVD48R1JFRU4+aCg0KSxoaFs0NF08UkVTRVQ+CisJCTxDWUFOPkBAIC0zLDAgKzQsNCBAQDxSRVNFVD4gPFJFU0VUPjxNQUdFTlRBPmEgPSBiICsgYzxSRVNFVD4KKworCQk8R1JFRU4+YWEgPSBhPFJFU0VUPgorCisJCTxHUkVFTj5hZWZmID0gYWVmZiAqICggYWFhICk8UkVTRVQ+CisJRU9GCisJd29yZF9kaWZmIC0tY29sb3Itd29yZHMgLS11bmlmaWVkPTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZCBkaWZmIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24nICcKKwljcCBleHBlY3QubGV0dGVyLXJ1bnMtYXJlLXdvcmRzIGV4cGVjdCAmJgorCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzPSJbYS16XSsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBhIGRpZmYgZHJpdmVyJyAnCisJZ2l0IGNvbmZpZyBkaWZmLnRlc3Rkcml2ZXIud29yZFJlZ2V4ICJbXls6c3BhY2U6XV0iICYmCisJY2F0IDw8LVxFT0YgPi5naXRhdHRyaWJ1dGVzCisJCXByZSBkaWZmPXRlc3Rkcml2ZXIKKwkJcG9zdCBkaWZmPXRlc3Rkcml2ZXIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9uIG92ZXJyaWRlcyAuZ2l0YXR0cmlidXRlcycgJworCWNwIGV4cGVjdC5sZXR0ZXItcnVucy1hcmUtd29yZHMgZXhwZWN0ICYmCisJd29yZF9kaWZmIC0tY29sb3Itd29yZHM9IlthLXpdKyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIHJlZ2V4IHN1cHBsaWVkIGJ5IGRyaXZlcicgJworCWNwIGV4cGVjdC5ub24td2hpdGVzcGFjZS1pcy13b3JkIGV4cGVjdCAmJgorCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBkaWZmLndvcmRSZWdleCBvcHRpb24nICcKKwlnaXQgY29uZmlnIGRpZmYud29yZFJlZ2V4ICJbWzphbG51bTpdXSsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQtbGluZSBvdmVycmlkZXMgY29uZmlnJyAnCisJY3AgZXhwZWN0LmxldHRlci1ydW5zLWFyZS13b3JkcyBleHBlY3QgJiYKKwl3b3JkX2RpZmYgLS1jb2xvci13b3Jkcz0iW2Etel0rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tYW5kLWxpbmUgb3ZlcnJpZGVzIGNvbmZpZzogLS13b3JkLWRpZmYtcmVnZXgnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorCQk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CisJCWgoNCksPEdSRUVOPnsraGgrfTxSRVNFVD5bNDRdCisKKwkJYSA9IGIgKyBjPFJFU0VUPgorCisJCTxHUkVFTj57K2FhID0gYSt9PFJFU0VUPgorCisJCTxHUkVFTj57K2FlZmYgPSBhZWZmICogKCBhYWErfTxSRVNFVD4gKQorCUVPRgorCXdvcmRfZGlmZiAtLWNvbG9yIC0td29yZC1kaWZmLXJlZ2V4PSJbYS16XSsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRhdHRyaWJ1dGVzIG92ZXJyaWRlIGNvbmZpZycgJworCWNwIGV4cGVjdC5ub24td2hpdGVzcGFjZS1pcy13b3JkIGV4cGVjdCAmJgorCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiByZW1vdmUgZGlmZiBkcml2ZXIgcmVnZXgnICcKKwl0ZXN0X3VuY29uZmlnIGRpZmYudGVzdGRyaXZlci53b3JkUmVnZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIGNvbmZpZ3VyZWQgcmVnZXgnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAzMzBiMDRmLi41ZWQ4ZWZmIDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorCQk8Q1lBTj5AQCAtMSwzICsxLDcgQEA8UkVTRVQ+CisJCWgoNCksPEdSRUVOPmhoWzQ0PFJFU0VUPl0KKworCQlhID0gYiArIGM8UkVTRVQ+CisKKwkJPEdSRUVOPmFhID0gYTxSRVNFVD4KKworCQk8R1JFRU4+YWVmZiA9IGFlZmYgKiAoIGFhYTxSRVNFVD4gKQorCUVPRgorCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcGFyc2luZyB3b3JkcyBmb3IgbmV3bGluZScgJworCWVjaG8gImFhYSAoYWFhKSIgPnByZSAmJgorCWVjaG8gImFhYSAoYWFhKSBhYWEiID5wb3N0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQk8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKwkJPEJPTEQ+aW5kZXggYzI5NDUzYi4uYmUyMmYzNyAxMDA2NDQ8UkVTRVQ+CisJCTxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKwkJPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKwkJPENZQU4+QEAgLTEgKzEgQEA8UkVTRVQ+CisJCWFhYSAoYWFhKSA8R1JFRU4+YWFhPFJFU0VUPgorCUVPRgorCXdvcmRfZGlmZiAtLWNvbG9yLXdvcmRzPSJhKyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB3aGVuIHdvcmRzIGFyZSBvbmx5IHJlbW92ZWQgYXQgdGhlIGVuZCcgJworCWVjaG8gIig6IiA+cHJlICYmCisJZWNobyAiKCIgPnBvc3QgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCTxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorCQk8Qk9MRD5pbmRleCAyODljYjlkLi4yZDA2ZjM3IDEwMDY0NDxSRVNFVD4KKwkJPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorCQk8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorCQk8Q1lBTj5AQCAtMSArMSBAQDxSRVNFVD4KKwkJKDxSRUQ+OjxSRVNFVD4KKwlFT0YKKwl3b3JkX2RpZmYgLS1jb2xvci13b3Jkcz0uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0td29yZC1kaWZmPW5vbmUnICcKKwllY2hvICIoOiIgPnByZSAmJgorCWVjaG8gIigiID5wb3N0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAorCQlpbmRleCAyODljYjlkLi4yZDA2ZjM3IDEwMDY0NAorCQktLS0gYS9wcmUKKwkJKysrIGIvcG9zdAorCQlAQCAtMSArMSBAQAorCQktKDoKKwkJKygKKwlFT0YKKwl3b3JkX2RpZmYgLS13b3JkLWRpZmY9cGxhaW4gLS13b3JkLWRpZmY9bm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnNldCBkZWZhdWx0IGRyaXZlcicgJworCXRlc3RfdW5jb25maWcgZGlmZi53b3JkcmVnZXgKKycKKwordGVzdF9sYW5ndWFnZV9kcml2ZXIgYWRhCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBiaWJ0ZXgKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIGNwcAordGVzdF9sYW5ndWFnZV9kcml2ZXIgY3NoYXJwCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBmb3J0cmFuCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBodG1sCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBqYXZhCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBtYXRsYWIKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIG9iamMKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIHBhc2NhbAordGVzdF9sYW5ndWFnZV9kcml2ZXIgcGVybAordGVzdF9sYW5ndWFnZV9kcml2ZXIgcGhwCit0ZXN0X2xhbmd1YWdlX2RyaXZlciBweXRob24KK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIHJ1YnkKK3Rlc3RfbGFuZ3VhZ2VfZHJpdmVyIHRleAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JkLWRpZmYgd2l0aCBkaWZmLnNiZScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAorCWluZGV4IGExYTUzYjUuLmJjOGZlNmQgMTAwNjQ0CisJLS0tIGEvcHJlCisJKysrIGIvcG9zdAorCUBAIC0xLDMgKzEsMyBAQAorCWEKKworCVstYi1deytjK30KKwlFT0YKKwljYXQgPnByZSA8PC1cRU9GICYmCisJYQorCisJYgorCUVPRgorCWNhdCA+cG9zdCA8PC1cRU9GICYmCisJYQorCisJYworCUVPRgorCXRlc3RfY29uZmlnIGRpZmYuc3VwcHJlc3MtYmxhbmstZW1wdHkgdHJ1ZSAmJgorCXdvcmRfZGlmZiAtLXdvcmQtZGlmZj1wbGFpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3b3JkLWRpZmYgd2l0aCBubyBuZXdsaW5lIGF0IEVPRicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdAorCWluZGV4IDdiZjMxNmUuLjNkZDAzMDMgMTAwNjQ0CisJLS0tIGEvcHJlCisJKysrIGIvcG9zdAorCUBAIC0xICsxIEBACisJYSBhIFstYS1deythYit9IGEgYQorCUVPRgorCXByaW50ZiAiJXMiICJhIGEgYSBhIGEiID5wcmUgJiYKKwlwcmludGYgIiVzIiAiYSBhIGFiIGEgYSIgPnBvc3QgJiYKKwl3b3JkX2RpZmYgLS13b3JkLWRpZmY9cGxhaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgaGlzdG9yeSB3aXRoIHR3byBmaWxlcycgJworCWVjaG8gImEgYjsgYyIgPmEudGV4ICYmCisJZWNobyAiYSBiOyBjIiA+ei50eHQgJiYKKwlnaXQgYWRkIGEudGV4IHoudHh0ICYmCisJZ2l0IGNvbW1pdCAtbWluaXRpYWwgJiYKKworCSMgbW9kaWZ5IGJvdGgKKwllY2hvICJhIGJ4OyBjIiA+YS50ZXggJiYKKwllY2hvICJhIGJ4OyBjIiA+ei50eHQgJiYKKwlnaXQgY29tbWl0IC1tbW9kaWZpZWQgLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd29yZFJlZ2V4IGZvciB0aGUgZmlyc3QgZmlsZSBkb2VzIG5vdCBhcHBseSB0byB0aGUgc2Vjb25kJyAnCisJZWNobyAiKi50ZXggZGlmZj10ZXgiID4uZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfY29uZmlnIGRpZmYudGV4LndvcmRSZWdleCAiW2Etel0rfC4iICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlkaWZmIC0tZ2l0IGEvYS50ZXggYi9hLnRleAorCQktLS0gYS9hLnRleAorCQkrKysgYi9hLnRleAorCQlAQCAtMSArMSBAQAorCQlhIFstYi1deytieCt9OyBjCisJCWRpZmYgLS1naXQgYS96LnR4dCBiL3oudHh0CisJCS0tLSBhL3oudHh0CisJCSsrKyBiL3oudHh0CisJCUBAIC0xICsxIEBACisJCWEgWy1iOy1deytieDsrfSBjCisJRU9GCisJZ2l0IGRpZmYgLS13b3JkLWRpZmYgSEVBRH4gPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9hZGEvZXhwZWN0IGIvdC90NDAzNC9hZGEvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODJkMjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2FkYS9leHBlY3QKQEAgLTAsMCArMSwyNyBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCBkOTZmZGQxLi5kZjIxYmIwIDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwxMyArMSwxMyBAQDxSRVNFVD4KK0FkYS5UZXh0X0lPLlB1dF9MaW5lKCJIZWxsbyBXb3JsZDxSRUQ+ITxSRVNFVD48R1JFRU4+PzxSRVNFVD4iKTsKKzEgPFJFRD4xZS0xMDxSRVNFVD48R1JFRU4+MWUxMDxSRVNFVD4gMTYjRkUxMiNFMiAzLjE0MV81OTIgJzxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD4nCis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+KzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi88UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4qKjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPig8UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+KQorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPjo9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Lz0gPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj49PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+LDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj0+PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+Li48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KZGlmZiAtLWdpdCBhL3QvdDQwMzQvYWRhL3Bvc3QgYi90L3Q0MDM0L2FkYS9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMjFiYjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2FkYS9wb3N0CkBAIC0wLDAgKzEsMTMgQEAKK0FkYS5UZXh0X0lPLlB1dF9MaW5lKCJIZWxsbyBXb3JsZD8iKTsKKzEgMWUxMCAxNiNGRTEyI0UyIDMuMTQxXzU5MiAneScKK3greSB4LXkKK3gqeSB4L3kKK3gqKnkKK3goeSkKK3g6PXkKK3g9eSB4Lz0geQoreDx5IHg8PXkgeD55IHg+PXkKK3gseQoreD0+eQoreC4ueQoreDw+eQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9hZGEvcHJlIGIvdC90NDAzNC9hZGEvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NmZkZDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2FkYS9wcmUKQEAgLTAsMCArMSwxMyBAQAorQWRhLlRleHRfSU8uUHV0X0xpbmUoIkhlbGxvIFdvcmxkISIpOworMSAxZS0xMCAxNiNGRTEyI0UyIDMuMTQxXzU5MiAneCcKK2ErYiBhLWIKK2EqYiBhL2IKK2EqKmIKK2EoYikKK2E6PWIKK2E9YiBhLz0gYgorYTxiIGE8PWIgYT5iIGE+PWIKK2EsYgorYT0+YgorYS4uYgorYTw+YgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9iaWJ0ZXgvZXhwZWN0IGIvdC90NDAzNC9iaWJ0ZXgvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNTc3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2JpYnRleC9leHBlY3QKQEAgLTAsMCArMSwxNSBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCA5NWNkNTViLi5kZGNiYTliIDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSw5ICsxLDEwIEBAPFJFU0VUPgorQGFydGljbGV7YWxkb3VzMTk4N3VpZSw8UkVTRVQ+CisgIHRpdGxlPXt7VWx0aW1hdGUgaW5zdGFiaWxpdHkgb2YgZXhwb25lbnRpYWwgYmFjay1vZmYgcHJvdG9jb2wgZm9yIGFja25vd2xlZGdtZW50LWJhc2VkIHRyYW5zbWlzc2lvbiBjb250cm9sIG9mIHJhbmRvbSBhY2Nlc3MgY29tbXVuaWNhdGlvbiBjaGFubmVsc319LDxSRVNFVD4KKyAgYXV0aG9yPXtBbGRvdXMsIDxSRUQ+RC48UkVTRVQ+PEdSRUVOPkRhdmlkPFJFU0VUPn0sCisgIGpvdXJuYWw9e0luZm9ybWF0aW9uIFRoZW9yeSwgSUVFRSBUcmFuc2FjdGlvbnMgb259LDxSRVNFVD4KKyAgdm9sdW1lPXs8UkVEPjMzPFJFU0VUPjxHUkVFTj5Cb2d1cy48UkVTRVQ+fSwKKyAgbnVtYmVyPXs8UkVEPjI8UkVTRVQ+PEdSRUVOPjQ8UkVTRVQ+fSwKKyAgcGFnZXM9ezIxOS0tMjIzfSw8UkVTRVQ+CisgIHllYXI9PEdSRUVOPjE5ODcsPFJFU0VUPgorPEdSRUVOPiAgbm90ZT17VGhpcyBpcyBpbiBmYWN0IGEgcmF0aGVyIGZ1bm55IHJlYWQgc2luY2UgZXRoZXJuZXQgd29ya3Mgd2VsbCBpbiBwcmFjdGljZS4gVGhlPFJFU0VUPiB7PFJFRD4xOTg3PFJFU0VUPjxHUkVFTj5cZW0gcHJlfSByZWZlcmVuY2UgaXMgdGhlIHJpZ2h0IG9uZSwgaG93ZXZlci48UkVTRVQ+fTxSRUQ+LDxSRVNFVD4KK308UkVTRVQ+CmRpZmYgLS1naXQgYS90L3Q0MDM0L2JpYnRleC9wb3N0IGIvdC90NDAzNC9iaWJ0ZXgvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGNiYTliCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9iaWJ0ZXgvcG9zdApAQCAtMCwwICsxLDEwIEBACitAYXJ0aWNsZXthbGRvdXMxOTg3dWllLAorICB0aXRsZT17e1VsdGltYXRlIGluc3RhYmlsaXR5IG9mIGV4cG9uZW50aWFsIGJhY2stb2ZmIHByb3RvY29sIGZvciBhY2tub3dsZWRnbWVudC1iYXNlZCB0cmFuc21pc3Npb24gY29udHJvbCBvZiByYW5kb20gYWNjZXNzIGNvbW11bmljYXRpb24gY2hhbm5lbHN9fSwKKyAgYXV0aG9yPXtBbGRvdXMsIERhdmlkfSwKKyAgam91cm5hbD17SW5mb3JtYXRpb24gVGhlb3J5LCBJRUVFIFRyYW5zYWN0aW9ucyBvbn0sCisgIHZvbHVtZT17Qm9ndXMufSwKKyAgbnVtYmVyPXs0fSwKKyAgcGFnZXM9ezIxOS0tMjIzfSwKKyAgeWVhcj0xOTg3LAorICBub3RlPXtUaGlzIGlzIGluIGZhY3QgYSByYXRoZXIgZnVubnkgcmVhZCBzaW5jZSBldGhlcm5ldCB3b3JrcyB3ZWxsIGluIHByYWN0aWNlLiBUaGUge1xlbSBwcmV9IHJlZmVyZW5jZSBpcyB0aGUgcmlnaHQgb25lLCBob3dldmVyLn0KK30KZGlmZiAtLWdpdCBhL3QvdDQwMzQvYmlidGV4L3ByZSBiL3QvdDQwMzQvYmlidGV4L3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWNkNTViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9iaWJ0ZXgvcHJlCkBAIC0wLDAgKzEsOSBAQAorQGFydGljbGV7YWxkb3VzMTk4N3VpZSwKKyAgdGl0bGU9e3tVbHRpbWF0ZSBpbnN0YWJpbGl0eSBvZiBleHBvbmVudGlhbCBiYWNrLW9mZiBwcm90b2NvbCBmb3IgYWNrbm93bGVkZ21lbnQtYmFzZWQgdHJhbnNtaXNzaW9uIGNvbnRyb2wgb2YgcmFuZG9tIGFjY2VzcyBjb21tdW5pY2F0aW9uIGNoYW5uZWxzfX0sCisgIGF1dGhvcj17QWxkb3VzLCBELn0sCisgIGpvdXJuYWw9e0luZm9ybWF0aW9uIFRoZW9yeSwgSUVFRSBUcmFuc2FjdGlvbnMgb259LAorICB2b2x1bWU9ezMzfSwKKyAgbnVtYmVyPXsyfSwKKyAgcGFnZXM9ezIxOS0tMjIzfSwKKyAgeWVhcj17MTk4N30sCit9CmRpZmYgLS1naXQgYS90L3Q0MDM0L2NwcC9leHBlY3QgYi90L3Q0MDM0L2NwcC9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkMWVhMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvY3BwL2V4cGVjdApAQCAtMCwwICsxLDM2IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IDIzZDVjOGEuLjdlOGMwMjYgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDE5ICsxLDE5IEBAPFJFU0VUPgorRm9vKCkgOiB4KDA8UkVEPiYmMTxSRVNFVD48R1JFRU4+JjQyPFJFU0VUPikgeyA8R1JFRU4+YmFyKHgpOzxSRVNFVD4gfQorY291dDw8IkhlbGxvIFdvcmxkPFJFRD4hPFJFU0VUPjxHUkVFTj4/PFJFU0VUPlxuIjw8ZW5kbDsKKzxHUkVFTj4oPFJFU0VUPjE8R1JFRU4+KSAoPFJFU0VUPi0xZTEwPEdSRUVOPikgKDxSRVNFVD4weGFiY2RlZjxHUkVFTj4pPFJFU0VUPiAnPFJFRD54PFJFU0VUPjxHUkVFTj55PFJFU0VUPicKK1s8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+XSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LT48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi48UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CishPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPiB+PFJFRD5hIGE8UkVTRVQ+PEdSRUVOPnggeDxSRVNFVD4rKyA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LS0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4hPTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD5ePFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiYmPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fHw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4/PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjp6Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4qPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Lz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Jj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPl49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD58PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPix5Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+Ojo8UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CmRpZmYgLS1naXQgYS90L3Q0MDM0L2NwcC9wb3N0IGIvdC90NDAzNC9jcHAvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZThjMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9jcHAvcG9zdApAQCAtMCwwICsxLDE5IEBACitGb28oKSA6IHgoMCY0MikgeyBiYXIoeCk7IH0KK2NvdXQ8PCJIZWxsbyBXb3JsZD9cbiI8PGVuZGw7CisoMSkgKC0xZTEwKSAoMHhhYmNkZWYpICd5JworW3hdIHgtPnkgeC55CisheCB+eCB4KysgeC0tIHgqeSB4JnkKK3gqeSB4L3kgeCV5Cit4K3kgeC15Cit4PDx5IHg+PnkKK3g8eSB4PD15IHg+eSB4Pj15Cit4PT15IHghPXkKK3gmeQoreF55Cit4fHkKK3gmJnkKK3h8fHkKK3g/eTp6Cit4PXkgeCs9eSB4LT15IHgqPXkgeC89eSB4JT15IHg8PD15IHg+Pj15IHgmPXkgeF49eSB4fD15Cit4LHkKK3g6OnkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvY3BwL3ByZSBiL3QvdDQwMzQvY3BwL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2Q1YzhhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9jcHAvcHJlCkBAIC0wLDAgKzEsMTkgQEAKK0ZvbygpOngoMCYmMSl7fQorY291dDw8IkhlbGxvIFdvcmxkIVxuIjw8ZW5kbDsKKzEgLTFlMTAgMHhhYmNkZWYgJ3gnCitbYV0gYS0+YiBhLmIKKyFhIH5hIGErKyBhLS0gYSpiIGEmYgorYSpiIGEvYiBhJWIKK2ErYiBhLWIKK2E8PGIgYT4+YgorYTxiIGE8PWIgYT5iIGE+PWIKK2E9PWIgYSE9YgorYSZiCithXmIKK2F8YgorYSYmYgorYXx8YgorYT9iOnoKK2E9YiBhKz1iIGEtPWIgYSo9YiBhLz1iIGElPWIgYTw8PWIgYT4+PWIgYSY9YiBhXj1iIGF8PWIKK2EseQorYTo6YgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9jc2hhcnAvZXhwZWN0IGIvdC90NDAzNC9jc2hhcnAvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZDFkZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2NzaGFycC9leHBlY3QKQEAgLTAsMCArMSwzNSBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCA5MTA2ZDYzLi5kZDVmNDIxIDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwxOCArMSwxOCBAQDxSRVNFVD4KK0ZvbygpIDogeCgwPFJFRD4mJjE8UkVTRVQ+PEdSRUVOPiY0MjxSRVNFVD4pIHsgPEdSRUVOPmJhcih4KTs8UkVTRVQ+IH0KK2NvdXQ8PCJIZWxsbyBXb3JsZDxSRUQ+ITxSRVNFVD48R1JFRU4+PzxSRVNFVD5cbiI8PGVuZGw7Cis8R1JFRU4+KDxSRVNFVD4xPEdSRUVOPikgKDxSRVNFVD4tMWUxMDxHUkVFTj4pICg8UkVTRVQ+MHhhYmNkZWY8R1JFRU4+KTxSRVNFVD4gJzxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD4nCitbPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPl0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorITxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4gfjxSRUQ+YSBhPFJFU0VUPjxHUkVFTj54IHg8UkVTRVQ+KysgPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0tIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD49PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+IT08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+XjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mJjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnx8PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PzxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD46egorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPis9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi89PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PDw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+Pj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD5ePTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fD08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4seQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9jc2hhcnAvcG9zdCBiL3QvdDQwMzQvY3NoYXJwL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ1ZjQyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvY3NoYXJwL3Bvc3QKQEAgLTAsMCArMSwxOCBAQAorRm9vKCkgOiB4KDAmNDIpIHsgYmFyKHgpOyB9Citjb3V0PDwiSGVsbG8gV29ybGQ/XG4iPDxlbmRsOworKDEpICgtMWUxMCkgKDB4YWJjZGVmKSAneScKK1t4XSB4LT55IHgueQorIXggfnggeCsrIHgtLSB4KnkgeCZ5Cit4KnkgeC95IHgleQoreCt5IHgteQoreDw8eSB4Pj55Cit4PHkgeDw9eSB4PnkgeD49eQoreD09eSB4IT15Cit4JnkKK3heeQoreHx5Cit4JiZ5Cit4fHx5Cit4P3k6egoreD15IHgrPXkgeC09eSB4Kj15IHgvPXkgeCU9eSB4PDw9eSB4Pj49eSB4Jj15IHhePXkgeHw9eQoreCx5CmRpZmYgLS1naXQgYS90L3Q0MDM0L2NzaGFycC9wcmUgYi90L3Q0MDM0L2NzaGFycC9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwNmQ2MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvY3NoYXJwL3ByZQpAQCAtMCwwICsxLDE4IEBACitGb28oKTp4KDAmJjEpe30KK2NvdXQ8PCJIZWxsbyBXb3JsZCFcbiI8PGVuZGw7CisxIC0xZTEwIDB4YWJjZGVmICd4JworW2FdIGEtPmIgYS5iCishYSB+YSBhKysgYS0tIGEqYiBhJmIKK2EqYiBhL2IgYSViCithK2IgYS1iCithPDxiIGE+PmIKK2E8YiBhPD1iIGE+YiBhPj1iCithPT1iIGEhPWIKK2EmYgorYV5iCithfGIKK2EmJmIKK2F8fGIKK2E/Yjp6CithPWIgYSs9YiBhLT1iIGEqPWIgYS89YiBhJT1iIGE8PD1iIGE+Pj1iIGEmPWIgYV49YiBhfD1iCithLHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvZm9ydHJhbi9leHBlY3QgYi90L3Q0MDM0L2ZvcnRyYW4vZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyMzNkYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2ZvcnRyYW4vZXhwZWN0CkBAIC0wLDAgKzEsMTAgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggODdmMGQwYi4uZDMwOGRhMiAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsNSArMSw1IEBAPFJFU0VUPgorcHJpbnQgKiwgIkhlbGxvIFdvcmxkPFJFRD4hPFJFU0VUPjxHUkVFTj4/PFJFU0VUPiIKKworRE8xMEkgPSAxLDEwPFJFU0VUPgorPFJFRD5ETzEwSTxSRVNFVD48R1JFRU4+RE8gMTAgSTxSRVNFVD4gPSAxLDEwCis8UkVEPkRPMTBJPFJFU0VUPjxHUkVFTj5ETyAxIDAgSTxSRVNFVD4gPSAxLDEwCmRpZmYgLS1naXQgYS90L3Q0MDM0L2ZvcnRyYW4vcG9zdCBiL3QvdDQwMzQvZm9ydHJhbi9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMDhkYTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2ZvcnRyYW4vcG9zdApAQCAtMCwwICsxLDUgQEAKK3ByaW50ICosICJIZWxsbyBXb3JsZD8iCisKK0RPMTBJID0gMSwxMAorRE8gMTAgSSA9IDEsMTAKK0RPIDEgMCBJID0gMSwxMApkaWZmIC0tZ2l0IGEvdC90NDAzNC9mb3J0cmFuL3ByZSBiL3QvdDQwMzQvZm9ydHJhbi9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdmMGQwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvZm9ydHJhbi9wcmUKQEAgLTAsMCArMSw1IEBACitwcmludCAqLCAiSGVsbG8gV29ybGQhIgorCitETzEwSSA9IDEsMTAKK0RPMTBJID0gMSwxMAorRE8xMEkgPSAxLDEwCmRpZmYgLS1naXQgYS90L3Q0MDM0L2h0bWwvZXhwZWN0IGIvdC90NDAzNC9odG1sL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDdiNDlhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9odG1sL2V4cGVjdApAQCAtMCwwICsxLDggQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggOGNhNGFlYS4uNDY5MjFlNSAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsMyArMSwzIEBAPFJFU0VUPgorPHRhZyA8R1JFRU4+bmV3YXR0cj0ibmV3dmFsdWUiPFJFU0VUPj48R1JFRU4+YWRkZWQ8UkVTRVQ+IGNvbnRlbnQ8L3RhZz4KKzx0YWcgYXR0cj08UkVEPiJ2YWx1ZSI8UkVTRVQ+PEdSRUVOPiJuZXd2YWx1ZSI8UkVTRVQ+PjxSRUQ+Y29udGVudDxSRVNFVD48R1JFRU4+Y2hhbmdlZDxSRVNFVD48L3RhZz4KKzw8UkVEPnRhZzxSRVNFVD48R1JFRU4+bmV3dGFnPFJFU0VUPj5jb250ZW50IDxSRUQ+JmVudGl0eTs8UkVTRVQ+PEdSRUVOPiZuZXdlbnRpdHk7PFJFU0VUPjw8UkVEPi90YWc8UkVTRVQ+PEdSRUVOPi9uZXd0YWc8UkVTRVQ+PgpkaWZmIC0tZ2l0IGEvdC90NDAzNC9odG1sL3Bvc3QgYi90L3Q0MDM0L2h0bWwvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjkyMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9odG1sL3Bvc3QKQEAgLTAsMCArMSwzIEBACis8dGFnIG5ld2F0dHI9Im5ld3ZhbHVlIj5hZGRlZCBjb250ZW50PC90YWc+Cis8dGFnIGF0dHI9Im5ld3ZhbHVlIj5jaGFuZ2VkPC90YWc+Cis8bmV3dGFnPmNvbnRlbnQgJm5ld2VudGl0eTs8L25ld3RhZz4KZGlmZiAtLWdpdCBhL3QvdDQwMzQvaHRtbC9wcmUgYi90L3Q0MDM0L2h0bWwvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYTRhZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2h0bWwvcHJlCkBAIC0wLDAgKzEsMyBAQAorPHRhZz5jb250ZW50PC90YWc+Cis8dGFnIGF0dHI9InZhbHVlIj5jb250ZW50PC90YWc+Cis8dGFnPmNvbnRlbnQgJmVudGl0eTs8L3RhZz4KZGlmZiAtLWdpdCBhL3QvdDQwMzQvamF2YS9leHBlY3QgYi90L3Q0MDM0L2phdmEvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZDFlYTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L2phdmEvZXhwZWN0CkBAIC0wLDAgKzEsMzYgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggMjNkNWM4YS4uN2U4YzAyNiAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsMTkgKzEsMTkgQEA8UkVTRVQ+CitGb28oKSA6IHgoMDxSRUQ+JiYxPFJFU0VUPjxHUkVFTj4mNDI8UkVTRVQ+KSB7IDxHUkVFTj5iYXIoeCk7PFJFU0VUPiB9Citjb3V0PDwiSGVsbG8gV29ybGQ8UkVEPiE8UkVTRVQ+PEdSRUVOPj88UkVTRVQ+XG4iPDxlbmRsOworPEdSRUVOPig8UkVTRVQ+MTxHUkVFTj4pICg8UkVTRVQ+LTFlMTA8R1JFRU4+KSAoPFJFU0VUPjB4YWJjZGVmPEdSRUVOPik8UkVTRVQ+ICc8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+JworWzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD5dIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tPjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKyE8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+IH48UkVEPmEgYTxSRVNFVD48R1JFRU4+eCB4PFJFU0VUPisrIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tLSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi88UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4rPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj49PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiE9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPl48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj88UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OnoKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4rPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPio9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw8PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Xj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPnw9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+LHkKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD46OjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KZGlmZiAtLWdpdCBhL3QvdDQwMzQvamF2YS9wb3N0IGIvdC90NDAzNC9qYXZhL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U4YzAyNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvamF2YS9wb3N0CkBAIC0wLDAgKzEsMTkgQEAKK0ZvbygpIDogeCgwJjQyKSB7IGJhcih4KTsgfQorY291dDw8IkhlbGxvIFdvcmxkP1xuIjw8ZW5kbDsKKygxKSAoLTFlMTApICgweGFiY2RlZikgJ3knCitbeF0geC0+eSB4LnkKKyF4IH54IHgrKyB4LS0geCp5IHgmeQoreCp5IHgveSB4JXkKK3greSB4LXkKK3g8PHkgeD4+eQoreDx5IHg8PXkgeD55IHg+PXkKK3g9PXkgeCE9eQoreCZ5Cit4XnkKK3h8eQoreCYmeQoreHx8eQoreD95OnoKK3g9eSB4Kz15IHgtPXkgeCo9eSB4Lz15IHglPXkgeDw8PXkgeD4+PXkgeCY9eSB4Xj15IHh8PXkKK3gseQoreDo6eQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9qYXZhL3ByZSBiL3QvdDQwMzQvamF2YS9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkNWM4YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvamF2YS9wcmUKQEAgLTAsMCArMSwxOSBAQAorRm9vKCk6eCgwJiYxKXt9Citjb3V0PDwiSGVsbG8gV29ybGQhXG4iPDxlbmRsOworMSAtMWUxMCAweGFiY2RlZiAneCcKK1thXSBhLT5iIGEuYgorIWEgfmEgYSsrIGEtLSBhKmIgYSZiCithKmIgYS9iIGElYgorYStiIGEtYgorYTw8YiBhPj5iCithPGIgYTw9YiBhPmIgYT49YgorYT09YiBhIT1iCithJmIKK2FeYgorYXxiCithJiZiCithfHxiCithP2I6egorYT1iIGErPWIgYS09YiBhKj1iIGEvPWIgYSU9YiBhPDw9YiBhPj49YiBhJj1iIGFePWIgYXw9YgorYSx5CithOjpiCmRpZmYgLS1naXQgYS90L3Q0MDM0L21hdGxhYi9leHBlY3QgYi90L3Q0MDM0L21hdGxhYi9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjZjNlOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvbWF0bGFiL2V4cGVjdApAQCAtMCwwICsxLDE0IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IGRjMjA0ZGIuLjcwZTA1ZjAgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDkgKzEsOSBAQDxSRVNFVD4KKyg8UkVEPjE8UkVTRVQ+PEdSRUVOPjA8UkVTRVQ+KSAoPFJFRD4tMWUxMDxSRVNFVD48R1JFRU4+LTBlMTA8UkVTRVQ+KSAnPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPic7CitbPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPl0gezxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD59IDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4uPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjsKK348UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+OworPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uLzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+XjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Ll48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi5cPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uJzsKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4rPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjsKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4mPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mJjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fHw8UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OworPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPjw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PTxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD47Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+PT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPn49PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjsKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4sPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjsKZGlmZiAtLWdpdCBhL3QvdDQwMzQvbWF0bGFiL3Bvc3QgYi90L3Q0MDM0L21hdGxhYi9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZTA1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L21hdGxhYi9wb3N0CkBAIC0wLDAgKzEsOSBAQAorKDApICgtMGUxMCkgJ3knOworW3hdIHt4fSB4Lnk7Cit+eDsKK3gqeSB4Lip5IHgveSB4Li95IHheeSB4Ll55IHguXHkgeC4nOworeCt5IHgteTsKK3gmeSB4JiZ5IHh8eSB4fHx5OworeDx5IHg8PXkgeD55IHg+PXk7Cit4PT15IHh+PXk7Cit4LHk7CmRpZmYgLS1naXQgYS90L3Q0MDM0L21hdGxhYi9wcmUgYi90L3Q0MDM0L21hdGxhYi9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMyMDRkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvbWF0bGFiL3ByZQpAQCAtMCwwICsxLDkgQEAKKygxKSAoLTFlMTApICdiJzsKK1thXSB7YX0gYS5iOworfmE7CithKmIgYS4qYiBhL2IgYS4vYiBhXmIgYS5eYiBhLlxiIGEuJzsKK2ErYiBhLWI7CithJmIgYSYmYiBhfGIgYXx8YjsKK2E8YiBhPD1iIGE+YiBhPj1iOworYT09YiBhfj1iOworYSxiOwpkaWZmIC0tZ2l0IGEvdC90NDAzNC9vYmpjL2V4cGVjdCBiL3QvdDQwMzQvb2JqYy9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkMWRkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvb2JqYy9leHBlY3QKQEAgLTAsMCArMSwzNSBAQAorPEJPTEQ+ZGlmZiAtLWdpdCBhL3ByZSBiL3Bvc3Q8UkVTRVQ+Cis8Qk9MRD5pbmRleCA5MTA2ZDYzLi5kZDVmNDIxIDEwMDY0NDxSRVNFVD4KKzxCT0xEPi0tLSBhL3ByZTxSRVNFVD4KKzxCT0xEPisrKyBiL3Bvc3Q8UkVTRVQ+Cis8Q1lBTj5AQCAtMSwxOCArMSwxOCBAQDxSRVNFVD4KK0ZvbygpIDogeCgwPFJFRD4mJjE8UkVTRVQ+PEdSRUVOPiY0MjxSRVNFVD4pIHsgPEdSRUVOPmJhcih4KTs8UkVTRVQ+IH0KK2NvdXQ8PCJIZWxsbyBXb3JsZDxSRUQ+ITxSRVNFVD48R1JFRU4+PzxSRVNFVD5cbiI8PGVuZGw7Cis8R1JFRU4+KDxSRVNFVD4xPEdSRUVOPikgKDxSRVNFVD4tMWUxMDxHUkVFTj4pICg8UkVTRVQ+MHhhYmNkZWY8R1JFRU4+KTxSRVNFVD4gJzxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD4nCitbPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPl0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorITxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4gfjxSRUQ+YSBhPFJFU0VUPjxHUkVFTj54IHg8UkVTRVQ+KysgPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0tIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD49PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+IT08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+XjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mJjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnx8PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PzxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD46egorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPis9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi89PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PDw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+Pj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD5ePTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fD08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4seQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9vYmpjL3Bvc3QgYi90L3Q0MDM0L29iamMvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDVmNDIxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9vYmpjL3Bvc3QKQEAgLTAsMCArMSwxOCBAQAorRm9vKCkgOiB4KDAmNDIpIHsgYmFyKHgpOyB9Citjb3V0PDwiSGVsbG8gV29ybGQ/XG4iPDxlbmRsOworKDEpICgtMWUxMCkgKDB4YWJjZGVmKSAneScKK1t4XSB4LT55IHgueQorIXggfnggeCsrIHgtLSB4KnkgeCZ5Cit4KnkgeC95IHgleQoreCt5IHgteQoreDw8eSB4Pj55Cit4PHkgeDw9eSB4PnkgeD49eQoreD09eSB4IT15Cit4JnkKK3heeQoreHx5Cit4JiZ5Cit4fHx5Cit4P3k6egoreD15IHgrPXkgeC09eSB4Kj15IHgvPXkgeCU9eSB4PDw9eSB4Pj49eSB4Jj15IHhePXkgeHw9eQoreCx5CmRpZmYgLS1naXQgYS90L3Q0MDM0L29iamMvcHJlIGIvdC90NDAzNC9vYmpjL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTA2ZDYzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9vYmpjL3ByZQpAQCAtMCwwICsxLDE4IEBACitGb28oKTp4KDAmJjEpe30KK2NvdXQ8PCJIZWxsbyBXb3JsZCFcbiI8PGVuZGw7CisxIC0xZTEwIDB4YWJjZGVmICd4JworW2FdIGEtPmIgYS5iCishYSB+YSBhKysgYS0tIGEqYiBhJmIKK2EqYiBhL2IgYSViCithK2IgYS1iCithPDxiIGE+PmIKK2E8YiBhPD1iIGE+YiBhPj1iCithPT1iIGEhPWIKK2EmYgorYV5iCithfGIKK2EmJmIKK2F8fGIKK2E/Yjp6CithPWIgYSs9YiBhLT1iIGEqPWIgYS89YiBhJT1iIGE8PD1iIGE+Pj1iIGEmPWIgYV49YiBhfD1iCithLHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcGFzY2FsL2V4cGVjdCBiL3QvdDQwMzQvcGFzY2FsL2V4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2U0MjMwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9wYXNjYWwvZXhwZWN0CkBAIC0wLDAgKzEsMzUgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggMDc3MDQ2Yy4uODg2NWU2YiAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsMTggKzEsMTggQEA8UkVTRVQ+Cit3cml0ZWxuKCJIZWxsbyBXb3JsZDxSRUQ+ITxSRVNFVD48R1JFRU4+PzxSRVNFVD4iKTsKKzxHUkVFTj4oPFJFU0VUPjE8R1JFRU4+KSAoPFJFU0VUPi0xZTEwPEdSRUVOPikgKDxSRVNFVD4weGFiY2RlZjxHUkVFTj4pPFJFU0VUPiAnPFJFRD54PFJFU0VUPjxHUkVFTj55PFJFU0VUPicKK1s8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+XSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LT48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi48UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CishPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPiB+PFJFRD5hIGE8UkVTRVQ+PEdSRUVOPnggeDxSRVNFVD4rKyA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+LS0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPjw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4hPTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD5ePFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPiYmPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+fHw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4/PFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPjp6Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4qPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Lz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Jj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPl49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD58PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPix5Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+Ojo8UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+CmRpZmYgLS1naXQgYS90L3Q0MDM0L3Bhc2NhbC9wb3N0IGIvdC90NDAzNC9wYXNjYWwvcG9zdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODY1ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9wYXNjYWwvcG9zdApAQCAtMCwwICsxLDE4IEBACit3cml0ZWxuKCJIZWxsbyBXb3JsZD8iKTsKKygxKSAoLTFlMTApICgweGFiY2RlZikgJ3knCitbeF0geC0+eSB4LnkKKyF4IH54IHgrKyB4LS0geCp5IHgmeQoreCp5IHgveSB4JXkKK3greSB4LXkKK3g8PHkgeD4+eQoreDx5IHg8PXkgeD55IHg+PXkKK3g9PXkgeCE9eQoreCZ5Cit4XnkKK3h8eQoreCYmeQoreHx8eQoreD95OnoKK3g9eSB4Kz15IHgtPXkgeCo9eSB4Lz15IHglPXkgeDw8PXkgeD4+PXkgeCY9eSB4Xj15IHh8PXkKK3gseQoreDo6eQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9wYXNjYWwvcHJlIGIvdC90NDAzNC9wYXNjYWwvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NzA0NmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3Bhc2NhbC9wcmUKQEAgLTAsMCArMSwxOCBAQAord3JpdGVsbigiSGVsbG8gV29ybGQhIik7CisxIC0xZTEwIDB4YWJjZGVmICd4JworW2FdIGEtPmIgYS5iCishYSB+YSBhKysgYS0tIGEqYiBhJmIKK2EqYiBhL2IgYSViCithK2IgYS1iCithPDxiIGE+PmIKK2E8YiBhPD1iIGE+YiBhPj1iCithPT1iIGEhPWIKK2EmYgorYV5iCithfGIKK2EmJmIKK2F8fGIKK2E/Yjp6CithPWIgYSs9YiBhLT1iIGEqPWIgYS89YiBhJT1iIGE8PD1iIGE+Pj1iIGEmPWIgYV49YiBhfD1iCithLHkKK2E6OmIKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcGVybC9leHBlY3QgYi90L3Q0MDM0L3BlcmwvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZGViNmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3BlcmwvZXhwZWN0CkBAIC0wLDAgKzEsMTMgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggZjY2MTBkMy4uZThiNzJlZiAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTQsOCArNCw4IEBAPFJFU0VUPgorCitwYWNrYWdlIEZyb3R6OzxSRVNFVD4KK3N1YiBuZXcgezxSRVNFVD4KKwlteSA8R1JFRU4+KDxSRVNFVD4kY2xhc3M8R1JFRU4+LCAlb3B0cyk8UkVTRVQ+ID0gPFJFRD5zaGlmdDxSRVNFVD48R1JFRU4+QF88UkVTRVQ+OworCXJldHVybiBibGVzcyB7IDxHUkVFTj54eXp6eSA9PiAibml0Zm9sIiwgJW9wdHM8UkVTRVQ+IH0sICRjbGFzczsKK308UkVTRVQ+CisKK19fRU5EX188UkVTRVQ+CmRpZmYgLS1naXQgYS90L3Q0MDM0L3BlcmwvcG9zdCBiL3QvdDQwMzQvcGVybC9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YjcyZWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3BlcmwvcG9zdApAQCAtMCwwICsxLDIyIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKKworcGFja2FnZSBGcm90ejsKK3N1YiBuZXcgeworCW15ICgkY2xhc3MsICVvcHRzKSA9IEBfOworCXJldHVybiBibGVzcyB7IHh5enp5ID0+ICJuaXRmb2wiLCAlb3B0cyB9LCAkY2xhc3M7Cit9CisKK19fRU5EX18KKz1oZWFkMSBOQU1FCisKK2Zyb3R6IC0gRnJvdHoKKworPWhlYWQxIFNZTk9QU0lTCisKKyAgdXNlIGZyb3R6OworCisgICRuaXRmb2wgPSBuZXcgRnJvdHooKTsKKworPWN1dApkaWZmIC0tZ2l0IGEvdC90NDAzNC9wZXJsL3ByZSBiL3QvdDQwMzQvcGVybC9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY2MTBkMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcGVybC9wcmUKQEAgLTAsMCArMSwyMiBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7CisKK3BhY2thZ2UgRnJvdHo7CitzdWIgbmV3IHsKKwlteSAkY2xhc3MgPSBzaGlmdDsKKwlyZXR1cm4gYmxlc3Mge30sICRjbGFzczsKK30KKworX19FTkRfXworPWhlYWQxIE5BTUUKKworZnJvdHogLSBGcm90egorCis9aGVhZDEgU1lOT1BTSVMKKworICB1c2UgZnJvdHo7CisKKyAgJG5pdGZvbCA9IG5ldyBGcm90eigpOworCis9Y3V0CmRpZmYgLS1naXQgYS90L3Q0MDM0L3BocC9leHBlY3QgYi90L3Q0MDM0L3BocC9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQwNDQwOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcGhwL2V4cGVjdApAQCAtMCwwICsxLDM1IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IGNmNmUwNmIuLjQ0MjBhNDkgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDE4ICsxLDE4IEBAPFJFU0VUPgorPEdSRUVOPig8UkVTRVQ+JHZhcjxHUkVFTj4pPFJFU0VUPiAkIHZhcgorPD89IkhlbGxvIFdvcmxkPFJFRD4hPFJFU0VUPjxHUkVFTj4/PFJFU0VUPiI/PgorPEdSRUVOPig8UkVTRVQ+MTxHUkVFTj4pICg8UkVTRVQ+LTFlMTA8R1JFRU4+KSAoPFJFU0VUPjB4YWJjZGVmPEdSRUVOPik8UkVTRVQ+ICc8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+JworWzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD5dIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tPjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LjxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKyE8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+IH48UkVEPmEgYTxSRVNFVD48R1JFRU4+eCB4PFJFU0VUPisrIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4tLSA8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPio8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi88UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4rPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDw8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj48UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj49PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiE9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPl48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+JiY8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD58fDxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPj88UkVEPmI8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+OnoKKzxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4rPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPio9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4vPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JT08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPjw8PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Xj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPnw9PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+LHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcGhwL3Bvc3QgYi90L3Q0MDM0L3BocC9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MjBhNDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3BocC9wb3N0CkBAIC0wLDAgKzEsMTggQEAKKygkdmFyKSAkIHZhcgorPD89IkhlbGxvIFdvcmxkPyI/PgorKDEpICgtMWUxMCkgKDB4YWJjZGVmKSAneScKK1t4XSB4LT55IHgueQorIXggfnggeCsrIHgtLSB4KnkgeCZ5Cit4KnkgeC95IHgleQoreCt5IHgteQoreDw8eSB4Pj55Cit4PHkgeDw9eSB4PnkgeD49eQoreD09eSB4IT15Cit4JnkKK3heeQoreHx5Cit4JiZ5Cit4fHx5Cit4P3k6egoreD15IHgrPXkgeC09eSB4Kj15IHgvPXkgeCU9eSB4PDw9eSB4Pj49eSB4Jj15IHhePXkgeHw9eQoreCx5CmRpZmYgLS1naXQgYS90L3Q0MDM0L3BocC9wcmUgYi90L3Q0MDM0L3BocC9wcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y2ZTA2YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcGhwL3ByZQpAQCAtMCwwICsxLDE4IEBACiskdmFyICR2YXIKKzw/PSAiSGVsbG8gV29ybGQhIiA/PgorMSAtMWUxMCAweGFiY2RlZiAneCcKK1thXSBhLT5iIGEuYgorIWEgfmEgYSsrIGEtLSBhKmIgYSZiCithKmIgYS9iIGElYgorYStiIGEtYgorYTw8YiBhPj5iCithPGIgYTw9YiBhPmIgYT49YgorYT09YiBhIT1iCithJmIKK2FeYgorYXxiCithJiZiCithfHxiCithP2I6egorYT1iIGErPWIgYS09YiBhKj1iIGEvPWIgYSU9YiBhPDw9YiBhPj49YiBhJj1iIGFePWIgYXw9YgorYSx5CmRpZmYgLS1naXQgYS90L3Q0MDM0L3B5dGhvbi9leHBlY3QgYi90L3Q0MDM0L3B5dGhvbi9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiYjhhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcHl0aG9uL2V4cGVjdApAQCAtMCwwICsxLDM0IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IDQzOGY3NzYuLjY4YmFmMzQgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDE3ICsxLDE3IEBAPFJFU0VUPgorcHJpbnQ8UkVEPnU8UkVTRVQ+ICJIZWxsbyBXb3JsZDxSRUQ+ITxSRVNFVD48R1JFRU4+PzxSRVNFVD5cbiI8R1JFRU4+OyBwcmludDxSRVNFVD4KKzxHUkVFTj4oPFJFU0VUPjE8R1JFRU4+KSAoPFJFU0VUPi0xZTEwPEdSRUVOPikgKDxSRVNFVD4weGFiY2RlZjxHUkVFTj4pIHU8UkVTRVQ+JzxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD4nCitbPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPl0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorITxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4gfjxSRUQ+YSBhPFJFU0VUPjxHUkVFTj54IHg8UkVTRVQ+KysgPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0tIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD49PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+IT08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+XjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mJjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnx8PFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+PzxSRUQ+YjxSRVNFVD48R1JFRU4+eTxSRVNFVD46egorPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPis9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4tPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi89PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4lPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PDw9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4+Pj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiY9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD5ePTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+fD08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4seQpkaWZmIC0tZ2l0IGEvdC90NDAzNC9weXRob24vcG9zdCBiL3QvdDQwMzQvcHl0aG9uL3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiYWYzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvcHl0aG9uL3Bvc3QKQEAgLTAsMCArMSwxNyBAQAorcHJpbnQgIkhlbGxvIFdvcmxkP1xuIjsgcHJpbnQKKygxKSAoLTFlMTApICgweGFiY2RlZikgdSd5JworW3hdIHgtPnkgeC55CisheCB+eCB4KysgeC0tIHgqeSB4JnkKK3gqeSB4L3kgeCV5Cit4K3kgeC15Cit4PDx5IHg+PnkKK3g8eSB4PD15IHg+eSB4Pj15Cit4PT15IHghPXkKK3gmeQoreF55Cit4fHkKK3gmJnkKK3h8fHkKK3g/eTp6Cit4PXkgeCs9eSB4LT15IHgqPXkgeC89eSB4JT15IHg8PD15IHg+Pj15IHgmPXkgeF49eSB4fD15Cit4LHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcHl0aG9uL3ByZSBiL3QvdDQwMzQvcHl0aG9uL3ByZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzhmNzc2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDAzNC9weXRob24vcHJlCkBAIC0wLDAgKzEsMTcgQEAKK3ByaW50IHUiSGVsbG8gV29ybGQhXG4iCisxIC0xZTEwIDB4YWJjZGVmICd4JworW2FdIGEtPmIgYS5iCishYSB+YSBhKysgYS0tIGEqYiBhJmIKK2EqYiBhL2IgYSViCithK2IgYS1iCithPDxiIGE+PmIKK2E8YiBhPD1iIGE+YiBhPj1iCithPT1iIGEhPWIKK2EmYgorYV5iCithfGIKK2EmJmIKK2F8fGIKK2E/Yjp6CithPWIgYSs9YiBhLT1iIGEqPWIgYS89YiBhJT1iIGE8PD1iIGE+Pj1iIGEmPWIgYV49YiBhfD1iCithLHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcnVieS9leHBlY3QgYi90L3Q0MDM0L3J1YnkvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZTFkZDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3J1YnkvZXhwZWN0CkBAIC0wLDAgKzEsMzQgQEAKKzxCT0xEPmRpZmYgLS1naXQgYS9wcmUgYi9wb3N0PFJFU0VUPgorPEJPTEQ+aW5kZXggMzBlZDlhMS4uNzY3OGYxNCAxMDA2NDQ8UkVTRVQ+Cis8Qk9MRD4tLS0gYS9wcmU8UkVTRVQ+Cis8Qk9MRD4rKysgYi9wb3N0PFJFU0VUPgorPENZQU4+QEAgLTEsMTcgKzEsMTcgQEA8UkVTRVQ+CisxMC5kb3dudG8oMSkge3w8UkVEPng8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+fCBwdXRzIDxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD59Cis8R1JFRU4+KDxSRVNFVD4xPEdSRUVOPikgKDxSRVNFVD4tMWUxMDxHUkVFTj4pICg8UkVTRVQ+MHhhYmNkZWY8R1JFRU4+KTxSRVNFVD4gJzxSRUQ+eDxSRVNFVD48R1JFRU4+eTxSRVNFVD4nCitbPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPl0gPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0+PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4uPFJFRD5iPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorITxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4gfjxSRUQ+YSBhPFJFU0VUPjxHUkVFTj54IHg8UkVTRVQ+KysgPFJFRD5hPFJFU0VUPjxHUkVFTj54PFJFU0VUPi0tIDxSRUQ+YTxSRVNFVD48R1JFRU4+eDxSRVNFVD4qPFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+KjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+LzxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+JTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPis8UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PDxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj48UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD48PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+PjxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Pj08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD49PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+IT08UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mPFJFRD5iPFJFU0VUPgorPFJFRD5hPFJFU0VUPjxHUkVFTj55PFJFU0VUPgorPEdSRUVOPng8UkVTRVQ+XjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnw8UkVEPmI8UkVTRVQ+Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eDxSRVNFVD4mJjxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPnx8PFJFRD5iPFJFU0VUPgorPFJFRD5hP2I8UkVTRVQ+PEdSRUVOPnk8UkVTRVQ+Cis8R1JFRU4+eD95PFJFU0VUPjp6Cis8UkVEPmE8UkVTRVQ+PEdSRUVOPng8UkVTRVQ+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Kz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPi09PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD4qPTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Lz08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPiU9PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD48PD08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPj4+PTxSRUQ+YiBhPFJFU0VUPjxHUkVFTj55IHg8UkVTRVQ+Jj08UkVEPmIgYTxSRVNFVD48R1JFRU4+eSB4PFJFU0VUPl49PFJFRD5iIGE8UkVTRVQ+PEdSRUVOPnkgeDxSRVNFVD58PTxSRUQ+YjxSRVNFVD4KKzxSRUQ+YTxSRVNFVD48R1JFRU4+eTxSRVNFVD4KKzxHUkVFTj54PFJFU0VUPix5CmRpZmYgLS1naXQgYS90L3Q0MDM0L3J1YnkvcG9zdCBiL3QvdDQwMzQvcnVieS9wb3N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzhmMTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3J1YnkvcG9zdApAQCAtMCwwICsxLDE3IEBACisxMC5kb3dudG8oMSkge3x5fCBwdXRzIHl9CisoMSkgKC0xZTEwKSAoMHhhYmNkZWYpICd5JworW3hdIHgtPnkgeC55CisheCB+eCB4KysgeC0tIHgqeSB4JnkKK3gqeSB4L3kgeCV5Cit4K3kgeC15Cit4PDx5IHg+PnkKK3g8eSB4PD15IHg+eSB4Pj15Cit4PT15IHghPXkKK3gmeQoreF55Cit4fHkKK3gmJnkKK3h8fHkKK3g/eTp6Cit4PXkgeCs9eSB4LT15IHgqPXkgeC89eSB4JT15IHg8PD15IHg+Pj15IHgmPXkgeF49eSB4fD15Cit4LHkKZGlmZiAtLWdpdCBhL3QvdDQwMzQvcnVieS9wcmUgYi90L3Q0MDM0L3J1YnkvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZWQ5YTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3J1YnkvcHJlCkBAIC0wLDAgKzEsMTcgQEAKKzEwLmRvd250bygxKSB7fHh8IHB1dHMgeH0KKzEgLTFlMTAgMHhhYmNkZWYgJ3gnCitbYV0gYS0+YiBhLmIKKyFhIH5hIGErKyBhLS0gYSpiIGEmYgorYSpiIGEvYiBhJWIKK2ErYiBhLWIKK2E8PGIgYT4+YgorYTxiIGE8PWIgYT5iIGE+PWIKK2E9PWIgYSE9YgorYSZiCithXmIKK2F8YgorYSYmYgorYXx8YgorYT9iOnoKK2E9YiBhKz1iIGEtPWIgYSo9YiBhLz1iIGElPWIgYTw8PWIgYT4+PWIgYSY9YiBhXj1iIGF8PWIKK2EseQpkaWZmIC0tZ2l0IGEvdC90NDAzNC90ZXgvZXhwZWN0IGIvdC90NDAzNC90ZXgvZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNDk2OWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3RleC9leHBlY3QKQEAgLTAsMCArMSw5IEBACis8Qk9MRD5kaWZmIC0tZ2l0IGEvcHJlIGIvcG9zdDxSRVNFVD4KKzxCT0xEPmluZGV4IDJiMmRmY2IuLjY1Y2FiNjEgMTAwNjQ0PFJFU0VUPgorPEJPTEQ+LS0tIGEvcHJlPFJFU0VUPgorPEJPTEQ+KysrIGIvcG9zdDxSRVNFVD4KKzxDWUFOPkBAIC0xLDQgKzEsNCBAQDxSRVNFVD4KK1xzZWN0aW9ue1NvbWV0aGluZyA8R1JFRU4+bmV3PFJFU0VUPn0KKzxSRUQ+XGVtcGg8UkVTRVQ+PEdSRUVOPlx0ZXh0YmY8UkVTRVQ+e01hY3JvIHN0eWxlfQorezxSRUQ+XGVtPFJFU0VUPjxHUkVFTj5cYmZzZXJpZXM8UkVTRVQ+IFN0YXRlIHRvZ2dsZSBzdHlsZX0KK1xcWzxSRUQ+MWVtPFJFU0VUPjxHUkVFTj4xY208UkVTRVQ+XQpkaWZmIC0tZ2l0IGEvdC90NDAzNC90ZXgvcG9zdCBiL3QvdDQwMzQvdGV4L3Bvc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjYWI2MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzQvdGV4L3Bvc3QKQEAgLTAsMCArMSw0IEBACitcc2VjdGlvbntTb21ldGhpbmcgbmV3fQorXHRleHRiZntNYWNybyBzdHlsZX0KK3tcYmZzZXJpZXMgU3RhdGUgdG9nZ2xlIHN0eWxlfQorXFxbMWNtXQpkaWZmIC0tZ2l0IGEvdC90NDAzNC90ZXgvcHJlIGIvdC90NDAzNC90ZXgvcHJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMmRmY2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM0L3RleC9wcmUKQEAgLTAsMCArMSw0IEBACitcc2VjdGlvbntTb21ldGhpbmd9CitcZW1waHtNYWNybyBzdHlsZX0KK3tcZW0gU3RhdGUgdG9nZ2xlIHN0eWxlfQorXFxbMWVtXQpkaWZmIC0tZ2l0IGEvdC90NDAzNS1kaWZmLXF1aWV0LnNoIGIvdC90NDAzNS1kaWZmLXF1aWV0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2MWY0YmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM1LWRpZmYtcXVpZXQuc2gKQEAgLTAsMCArMSwxNTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdSZXR1cm4gdmFsdWUgb2YgZGlmZnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gMSA+YSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gZmlyc3QgJiYKKwllY2hvIDIgPmIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCW1rZGlyIC1wIHRlc3Qtb3V0c2lkZS9yZXBvICYmICgKKwkJY2QgdGVzdC1vdXRzaWRlL3JlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyAiMSAxIiA+YSAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAxCisJKSAmJgorCW1rZGlyIC1wIHRlc3Qtb3V0c2lkZS9ub24vZ2l0ICYmICgKKwkJY2QgdGVzdC1vdXRzaWRlL25vbi9naXQgJiYKKwkJZWNobyAiMSAxIiA+YSAmJgorCQllY2hvICIxIDEiID5tYXRjaGluZy1maWxlICYmCisJCWVjaG8gIjEgMSAiID50cmFpbGluZy1zcGFjZSAmJgorCQllY2hvICIxICAgMSIgPmV4dHJhLXNwYWNlICYmCisJCWVjaG8gIjIiID5uZXZlci1tYXRjaAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBIRUFEXiBIRUFEJyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLXRyZWUgLS1xdWlldCBIRUFEXiBIRUFEID5jbnQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBIRUFEXiBIRUFEIC0tIGEnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IEhFQUReIEhFQUQgLS0gYSA+Y250ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgSEVBRF4gSEVBRCAtLSBiJyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLXRyZWUgLS1xdWlldCBIRUFEXiBIRUFEIC0tIGIgPmNudCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgY250CisnCisjIHRoaXMgZGlmZiBvdXRwdXRzIG9uZSBsaW5lOiBzaGExIG9mIHRoZSBnaXZlbiBoZWFkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlY2hvIEhFQUQgfCBnaXQgZGlmZi10cmVlIC0tc3RkaW4nICcKKwllY2hvICQoZ2l0IHJldi1wYXJzZSBIRUFEKSB8CisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLXRyZWUgLS1xdWlldCAtLXN0ZGluID5jbnQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGNudAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtdHJlZSBIRUFEIEhFQUQnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IEhFQUQgSEVBRCA+Y250ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWZpbGVzJyAnCisJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgPmNudCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgY250CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEJyAnCisJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCA+Y250ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUReJyAnCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRF4gPmNudCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgY250CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBIRUFEXicgJworCWVjaG8gdGV4dCA+PmIgJiYKKwllY2hvIDMgPmMgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEXiA+Y250ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBjbnQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLXRyZWUgLVN0ZXh0IEhFQUReIEhFQUQgLS0gYicgJworCWdpdCBjb21taXQgLW0gInRleHQgaW4gYiIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtdHJlZSAtLXF1aWV0IC1TdGV4dCBIRUFEXiBIRUFEIC0tIGIgPmNudCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgY250CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi10cmVlIC1Tbm90LWZvdW5kIEhFQUReIEhFQUQgLS0gYicgJworCXRlc3RfZXhwZWN0X2NvZGUgMCBnaXQgZGlmZi10cmVlIC0tcXVpZXQgLVNub3QtZm91bmQgSEVBRF4gSEVBRCAtLSBiID5jbnQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYtZmlsZXMnICcKKwllY2hvIDMgPj5jICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBkaWZmLWZpbGVzIC0tcXVpZXQgPmNudCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgY250CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLWluZGV4IC0tY2FjaGVkIEhFQUQnICcKKwlnaXQgdXBkYXRlLWluZGV4IGMgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYtaW5kZXggLS1xdWlldCAtLWNhY2hlZCBIRUFEID5jbnQgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAwIGNudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiwgb25lIGZpbGUgb3V0c2lkZSByZXBvJyAnCisJKAorCQljZCB0ZXN0LW91dHNpZGUvcmVwbyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYgLS1xdWlldCBhIC4uL25vbi9naXQvbWF0Y2hpbmctZmlsZSAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1xdWlldCBhIC4uL25vbi9naXQvZXh0cmEtc3BhY2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmLCBib3RoIGZpbGVzIG91dHNpZGUgcmVwbycgJworCSgKKwkJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiRUUkFTSF9ESVJFQ1RPUlkvdGVzdC1vdXRzaWRlIiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2QgdGVzdC1vdXRzaWRlL25vbi9naXQgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tcXVpZXQgYSBtYXRjaGluZy1maWxlICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLXF1aWV0IGEgZXh0cmEtc3BhY2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0taWdub3JlLXNwYWNlLWF0LWVvbCwgb25lIGZpbGUgb3V0c2lkZSByZXBvJyAnCisJKAorCQljZCB0ZXN0LW91dHNpZGUvcmVwbyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYgLS1xdWlldCAtLWlnbm9yZS1zcGFjZS1hdC1lb2wgYSAuLi9ub24vZ2l0L3RyYWlsaW5nLXNwYWNlICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLXF1aWV0IC0taWdub3JlLXNwYWNlLWF0LWVvbCBhIC4uL25vbi9naXQvZXh0cmEtc3BhY2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0taWdub3JlLXNwYWNlLWF0LWVvbCwgYm90aCBmaWxlcyBvdXRzaWRlIHJlcG8nICcKKwkoCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfRElSRUNUT1JZL3Rlc3Qtb3V0c2lkZSIgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCisJCWNkIHRlc3Qtb3V0c2lkZS9ub24vZ2l0ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMCBnaXQgZGlmZiAtLXF1aWV0IC0taWdub3JlLXNwYWNlLWF0LWVvbCBhIHRyYWlsaW5nLXNwYWNlICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLXF1aWV0IC0taWdub3JlLXNwYWNlLWF0LWVvbCBhIGV4dHJhLXNwYWNlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLWlnbm9yZS1hbGwtc3BhY2UsIG9uZSBmaWxlIG91dHNpZGUgcmVwbycgJworCSgKKwkJY2QgdGVzdC1vdXRzaWRlL3JlcG8gJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tcXVpZXQgLS1pZ25vcmUtYWxsLXNwYWNlIGEgLi4vbm9uL2dpdC90cmFpbGluZy1zcGFjZSAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDAgZ2l0IGRpZmYgLS1xdWlldCAtLWlnbm9yZS1hbGwtc3BhY2UgYSAuLi9ub24vZ2l0L2V4dHJhLXNwYWNlICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLXF1aWV0IC0taWdub3JlLWFsbC1zcGFjZSBhIC4uL25vbi9naXQvbmV2ZXItbWF0Y2gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0taWdub3JlLWFsbC1zcGFjZSwgYm90aCBmaWxlcyBvdXRzaWRlIHJlcG8nICcKKwkoCisJCUdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTPSIkVFJBU0hfRElSRUNUT1JZL3Rlc3Qtb3V0c2lkZSIgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCisJCWNkIHRlc3Qtb3V0c2lkZS9ub24vZ2l0ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMCBnaXQgZGlmZiAtLXF1aWV0IC0taWdub3JlLWFsbC1zcGFjZSBhIHRyYWlsaW5nLXNwYWNlICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMCBnaXQgZGlmZiAtLXF1aWV0IC0taWdub3JlLWFsbC1zcGFjZSBhIGV4dHJhLXNwYWNlICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLXF1aWV0IC0taWdub3JlLWFsbC1zcGFjZSBhIG5ldmVyLW1hdGNoCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiAtLXF1aWV0IGlnbm9yZXMgc3RhdC1jaGFuZ2Ugb25seSBlbnRyaWVzJyAnCisJdGVzdC1jaG10aW1lICsxMCBhICYmCisJZWNobyBtb2RpZmllZCA+PmIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IGRpZmYgLS1xdWlldAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwMzYtZm9ybWF0LXBhdGNoLXNpZ25lci1taW1lLnNoIGIvdC90NDAzNi1mb3JtYXQtcGF0Y2gtc2lnbmVyLW1pbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOThkOTcxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwMzYtZm9ybWF0LXBhdGNoLXNpZ25lci1taW1lLnNoCkBAIC0wLDAgKzEsNTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmb3JtYXQtcGF0Y2ggLXMgc2hvdWxkIGZvcmNlIE1JTUUgZW5jb2RpbmcgYXMgbmVlZGVkJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+RiAmJgorCWdpdCBhZGQgRiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gbmV3IGxpbmUgPkYgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlRoaXMgYWRkcyBzb21lIGxpbmVzIHRvIEYiIEYKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQgbm9ybWFsbHknICcKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPm91dHB1dCAmJgorCSEgZ3JlcCBDb250ZW50LVR5cGUgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0IHdpdGggc2lnbm9mZiB3aXRob3V0IGZ1bm55IHNpZ25lciBuYW1lJyAnCisKKwlnaXQgZm9ybWF0LXBhdGNoIC1zIC0tc3Rkb3V0IC0xID5vdXRwdXQgJiYKKwkhIGdyZXAgQ29udGVudC1UeXBlIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zvcm1hdCB3aXRoIG5vbiBBU0NJSSBzaWduZXIgbmFtZScgJworCisJR0lUX0NPTU1JVFRFUl9OQU1FPSLjga/jgb7jga4g44G144Gr44GK44GGIiBcCisJZ2l0IGZvcm1hdC1wYXRjaCAtcyAtLXN0ZG91dCAtMSA+b3V0cHV0ICYmCisJZ3JlcCBDb250ZW50LVR5cGUgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0YWNoIGFuZCBzaWdub2ZmIGRvIG5vdCBkdXBsaWNhdGUgbWltZSBoZWFkZXJzJyAnCisKKwlHSVRfQ09NTUlUVEVSX05BTUU9IuOBr+OBvuOBriDjgbXjgavjgYrjgYYiIFwKKwlnaXQgZm9ybWF0LXBhdGNoIC1zIC0tc3Rkb3V0IC0xIC0tYXR0YWNoID5vdXRwdXQgJiYKKwl0ZXN0ICQoZ3JlcCAtY2kgXk1JTUUtVmVyc2lvbjogb3V0cHV0KSA9IDEKKworJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90NDAzNy1kaWZmLXItdC1kaXJzLnNoIGIvdC90NDAzNy1kaWZmLXItdC1kaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1Y2UzYjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM3LWRpZmYtci10LWRpcnMuc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLXIgLXQgc2hvd3MgZGlyZWN0b3J5IGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgZGMgZHIgZHQgJiYKKwk+ZGMvMSAmJgorCT5kci8yICYmCisJPmR0LzMgJiYKKwk+ZmMgJiYKKwk+ZnIgJiYKKwk+ZnQgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCXJtIC1mciBkdCBkciBmdCBmciAmJgorCW1rZGlyIGRhIGZ0ICYmCisJZm9yIHAgaW4gZGMvMSBkYS80IGR0IGZ0LzUgZmMKKwlkbworCQllY2hvIGhlbGxvID4kcCB8fCBleGl0CisJZG9uZSAmJgorCWdpdCBhZGQgLXUgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK0EJZGEKK0EJZGEvNAorTQlkYworTQlkYy8xCitECWRyCitECWRyLzIKK0EJZHQKK0QJZHQKK0QJZHQvMworTQlmYworRAlmcgorRAlmdAorQQlmdAorQQlmdC81CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyB2ZXJpZnkgJworCWdpdCBkaWZmLXRyZWUgLXIgLXQgLS1uYW1lLXN0YXR1cyBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoIGIvdC90NDAzOC1kaWZmLWNvbWJpbmVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiNGY3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM4LWRpZmYtY29tYmluZWQuc2gKQEAgLTAsMCArMSw0MzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb21iaW5lZCBkaWZmJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2gKKworc2V0dXBfaGVscGVyICgpIHsKKwlvbmU9JDEgYnJhbmNoPSQyIHNpZGU9JDMgJiYKKworCWdpdCBicmFuY2ggJHNpZGUgJGJyYW5jaCAmJgorCWZvciBsIGluICRvbmUgdHdvIHRocmVlIGZ5cmEKKwlkbworCQllY2hvICRsCisJZG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gJGJyYW5jaCAmJgorCWdpdCBjaGVja291dCAkc2lkZSAmJgorCWZvciBsIGluICRvbmUgdHdvIHRocmVlIHF1YXRybworCWRvCisJCWVjaG8gJGwKKwlkb25lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAkc2lkZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAkYnJhbmNoICYmCisJZm9yIGwgaW4gJG9uZSB0aHJlZSBmb3VyCisJZG8KKwkJZWNobyAkbAorCWRvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJtZXJnZSAkYnJhbmNoIGludG8gJHNpZGUiCit9CisKK3ZlcmlmeV9oZWxwZXIgKCkgeworCWl0PSQxICYmCisKKwkjIElnbm9yZSBsaW5lcyB0aGF0IHdlcmUgcmVtb3ZlZCBvbmx5IGZyb20gdGhlIG90aGVyIHBhcmVudAorCXNlZCAtZSAnCisJCTEsL15AQEAvZAorCQkvXiAtL2QKKwkJcy9eXCguXCkuL1wxLworCScgIiRpdCIgPiIkaXQuYWN0dWFsLjEiICYmCisJc2VkIC1lICcKKwkJMSwvXkBAQC9kCisJCS9eLSAvZAorCQlzL14uXCguXCkvXDEvCisJJyAiJGl0IiA+IiRpdC5hY3R1YWwuMiIgJiYKKworCWdpdCBkaWZmICIkaXReIiAiJGl0IiAtLSB8IHNlZCAtZSAnMSwvXkBAL2QnID4iJGl0LmV4cGVjdC4xIiAmJgorCXRlc3RfY21wICIkaXQuZXhwZWN0LjEiICIkaXQuYWN0dWFsLjEiICYmCisKKwlnaXQgZGlmZiAiJGl0XjIiICIkaXQiIC0tIHwgc2VkIC1lICcxLC9eQEAvZCcgPiIkaXQuZXhwZWN0LjIiICYmCisJdGVzdF9jbXAgIiRpdC5leHBlY3QuMiIgIiRpdC5hY3R1YWwuMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWdpdCBicmFuY2ggd2l0aG9uZSAmJgorCWdpdCBicmFuY2ggc2Fuc29uZSAmJgorCisJZ2l0IGNoZWNrb3V0IHdpdGhvbmUgJiYKKwlzZXR1cF9oZWxwZXIgb25lIHdpdGhvbmUgc2lkZXdpdGhvbmUgJiYKKworCWdpdCBjaGVja291dCBzYW5zb25lICYmCisJc2V0dXBfaGVscGVyICIiIHNhbnNvbmUgc2lkZXNhbnNvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29tYmluZWQgb3V0cHV0ICgxKScgJworCWdpdCBzaG93IHNpZGV3aXRob25lIC0tID5zaWRld2l0aG9uZSAmJgorCXZlcmlmeV9oZWxwZXIgc2lkZXdpdGhvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29tYmluZWQgb3V0cHV0ICgyKScgJworCWdpdCBzaG93IHNpZGVzYW5zb25lIC0tID5zaWRlc2Fuc29uZSAmJgorCXZlcmlmeV9oZWxwZXIgc2lkZXNhbnNvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlhZ25vc2UgdHJ1bmNhdGVkIGZpbGUnICcKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtQyBIRUFEICYmCisJZ2l0IHNob3cgPm91dCAmJgorCWdyZXAgImRpZmYgLS1jYyBmaWxlIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIC0tY2MgLS1yYXcnICcKKwlibG9iPSQoZWNobyBmaWxlIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4gLXcpICYmCisJYmFzZV90cmVlPSQoZWNobyAiMTAwNjQ0IGJsb2IgJGJsb2IJZmlsZSIgfCBnaXQgbWt0cmVlKSAmJgorCXRyZWVzPSAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSA0MCkKKwlkbworCQlibG9iPSQoZWNobyBmaWxlJGkgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiAtdykgJiYKKwkJdHJlZXM9IiR0cmVlcyQoZWNobyAiMTAwNjQ0IGJsb2IgJGJsb2IJZmlsZSIgfCBnaXQgbWt0cmVlKSRMRiIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIC0tY2MgLS1yYXcgd2l0aCBmb3VyIHRyZWVzJyAnCisJZm91cl90cmVlcz0kKGVjaG8gIiR0cmVlcyIgfCBzZWQgLWUgNHEpICYmCisJZ2l0IGRpZmYgLS1jYyAtLXJhdyAkZm91cl90cmVlcyAkYmFzZV90cmVlID5vdXQgJiYKKwkjIENoZWNrIGZvciBmb3VyIGxlYWRpbmcgY29sb25zIGluIHRoZSBvdXRwdXQ6CisJZ3JlcCAiXjo6OjpbXjpdIiBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgLS1jYyAtLXJhdyB3aXRoIGZvcnR5IHRyZWVzJyAnCisJZ2l0IGRpZmYgLS1jYyAtLXJhdyAkdHJlZXMgJGJhc2VfdHJlZSA+b3V0ICYmCisJIyBDaGVjayBmb3IgZm9ydHkgbGVhZGluZyBjb2xvbnMgaW4gdGhlIG91dHB1dDoKKwlncmVwICJeOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OlteOl0iIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb21iaW5lZCBpZ25vcmUgc3BhY2VzJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCT50ZXN0ICYmCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwl0ciAtZCBRIDw8LVxFT0YgPnRlc3QgJiYKKwlhbHdheXMgY29hbGVzY2UKKwllb2wgc3BhY2UgY29hbGVzY2UgUQorCXNwYWNlICBjaGFuZ2UgY29hbGVzY2UKKwlhbGwgc3BhIGNlcyBjb2FsZXNjZQorCWVvbCBzcGFjZXMgUQorCXNwYWNlICBjaGFuZ2UKKwlhbGwgc3BhIGNlcworCUVPRgorCWdpdCBjb21taXQgLW0gInRlc3Qgc3BhY2UgY2hhbmdlIiAtYSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwl0ciAtZCBRIDw8LVxFT0YgPnRlc3QgJiYKKwlhbHdheXMgY29hbGVzY2UKKwllb2wgc3BhY2UgY29hbGVzY2UKKwlzcGFjZSBjaGFuZ2UgY29hbGVzY2UKKwlhbGwgc3BhY2VzIGNvYWxlc2NlCisJZW9sIHNwYWNlcworCXNwYWNlIGNoYW5nZQorCWFsbCBzcGFjZXMKKwlFT0YKKwlnaXQgY29tbWl0IC1tICJ0ZXN0IG90aGVyIHNwYWNlIGNoYW5nZXMiIC1hICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJdHIgLWQgUSA8PC1cRU9GID50ZXN0ICYmCisJZW9sIHNwYWNlcyBRCisJc3BhY2UgIGNoYW5nZQorCWFsbCBzcGEgY2VzCisJRU9GCisJZ2l0IGNvbW1pdCAtbSBtZXJnZWQgLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29tYmluZWQgb3V0cHV0IChubyBpZ25vcmUgc3BhY2UpJyAnCisJZ2l0IHNob3cgPmFjdHVhbC50bXAgJiYKKwlzZWQgLWUgIjEsL15AQEAvZCIgPCBhY3R1YWwudG1wID5hY3R1YWwgJiYKKwl0ciAtZCBRIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJLS1hbHdheXMgY29hbGVzY2UKKwktIGVvbCBzcGFjZSBjb2FsZXNjZQorCS0gc3BhY2UgY2hhbmdlIGNvYWxlc2NlCisJLSBhbGwgc3BhY2VzIGNvYWxlc2NlCisJLSBlb2wgc3BhY2VzCisJLSBzcGFjZSBjaGFuZ2UKKwktIGFsbCBzcGFjZXMKKwkgLWVvbCBzcGFjZSBjb2FsZXNjZSBRCisJIC1zcGFjZSAgY2hhbmdlIGNvYWxlc2NlCisJIC1hbGwgc3BhIGNlcyBjb2FsZXNjZQorCSsgZW9sIHNwYWNlcyBRCisJKyBzcGFjZSAgY2hhbmdlCisJKyBhbGwgc3BhIGNlcworCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29tYmluZWQgb3V0cHV0IChpZ25vcmUgc3BhY2UgYXQgZW9sKScgJworCWdpdCBzaG93IC0taWdub3JlLXNwYWNlLWF0LWVvbCA+YWN0dWFsLnRtcCAmJgorCXNlZCAtZSAiMSwvXkBAQC9kIiA8IGFjdHVhbC50bXAgPmFjdHVhbCAmJgorCXRyIC1kIFEgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwktLWFsd2F5cyBjb2FsZXNjZQorCS0tZW9sIHNwYWNlIGNvYWxlc2NlCisJLSBzcGFjZSBjaGFuZ2UgY29hbGVzY2UKKwktIGFsbCBzcGFjZXMgY29hbGVzY2UKKwkgLXNwYWNlICBjaGFuZ2UgY29hbGVzY2UKKwkgLWFsbCBzcGEgY2VzIGNvYWxlc2NlCisJICBlb2wgc3BhY2VzIFEKKwktIHNwYWNlIGNoYW5nZQorCS0gYWxsIHNwYWNlcworCSsgc3BhY2UgIGNoYW5nZQorCSsgYWxsIHNwYSBjZXMKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGNvbWJpbmVkIG91dHB1dCAoaWdub3JlIHNwYWNlIGNoYW5nZSknICcKKwlnaXQgc2hvdyAtYiA+YWN0dWFsLnRtcCAmJgorCXNlZCAtZSAiMSwvXkBAQC9kIiA8IGFjdHVhbC50bXAgPmFjdHVhbCAmJgorCXRyIC1kIFEgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwktLWFsd2F5cyBjb2FsZXNjZQorCS0tZW9sIHNwYWNlIGNvYWxlc2NlCisJLS1zcGFjZSBjaGFuZ2UgY29hbGVzY2UKKwktIGFsbCBzcGFjZXMgY29hbGVzY2UKKwkgLWFsbCBzcGEgY2VzIGNvYWxlc2NlCisJICBlb2wgc3BhY2VzIFEKKwkgIHNwYWNlICBjaGFuZ2UKKwktIGFsbCBzcGFjZXMKKwkrIGFsbCBzcGEgY2VzCisJRU9GCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBjb21iaW5lZCBvdXRwdXQgKGlnbm9yZSBhbGwgc3BhY2VzKScgJworCWdpdCBzaG93IC13ID5hY3R1YWwudG1wICYmCisJc2VkIC1lICIxLC9eQEBAL2QiIDwgYWN0dWFsLnRtcCA+YWN0dWFsICYmCisJdHIgLWQgUSA8PC1cRU9GID5leHBlY3RlZCAmJgorCS0tYWx3YXlzIGNvYWxlc2NlCisJLS1lb2wgc3BhY2UgY29hbGVzY2UKKwktLXNwYWNlIGNoYW5nZSBjb2FsZXNjZQorCS0tYWxsIHNwYWNlcyBjb2FsZXNjZQorCSAgZW9sIHNwYWNlcyBRCisJICBzcGFjZSAgY2hhbmdlCisJICBhbGwgc3BhIGNlcworCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZSBkaWZmIGNvYWxlc2NlIHNpbXBsZScgJworCT50ZXN0ICYmCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJdGVzdF9zZXEgNCA+dGVzdCAmJgorCWdpdCBjb21taXQgLWEgLW0gZW1wdHkxICYmCisJZ2l0IGJyYW5jaCBzaWRlMSAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCXRlc3Rfc2VxIDUgPnRlc3QgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGVtcHR5MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzaWRlMSAmJgorCT50ZXN0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtZXJnZSAmJgorCWdpdCBzaG93ID5hY3R1YWwudG1wICYmCisJc2VkIC1lICIxLC9eQEBAL2QiIDwgYWN0dWFsLnRtcCA+YWN0dWFsICYmCisJdHIgLWQgUSA8PC1cRU9GID5leHBlY3RlZCAmJgorCS0tMQorCS0tMgorCS0tMworCS0tNAorCS0gNQorCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tYmluZSBkaWZmIGNvYWxlc2NlIHRyaWNreScgJworCT50ZXN0ICYmCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsIC0tYWxsb3ctZW1wdHkgJiYKKwljYXQgPDwtXEVPRiA+dGVzdCAmJgorCTMKKwkxCisJMgorCTMKKwk0CisJRU9GCisJZ2l0IGNvbW1pdCAtYSAtbSBlbXB0eTEgJiYKKwlnaXQgYnJhbmNoIC1mIHNpZGUxICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJY2F0IDw8LVxFT0YgPnRlc3QgJiYKKwkxCisJMworCTUKKwk0CisJRU9GCisJZ2l0IGNvbW1pdCAtYSAtbSBlbXB0eTIgJiYKKwlnaXQgYnJhbmNoIC1mIHNpZGUyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNpZGUxICYmCisJPnRlc3QgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG1lcmdlICYmCisJZ2l0IHNob3cgPmFjdHVhbC50bXAgJiYKKwlzZWQgLWUgIjEsL15AQEAvZCIgPCBhY3R1YWwudG1wID5hY3R1YWwgJiYKKwl0ciAtZCBRIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJIC0zCisJLS0xCisJIC0yCisJLS0zCisJLSA1CisJLS00CisJRU9GCisJY29tcGFyZV9kaWZmX3BhdGNoIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBjaGVja291dCAtZiBzaWRlMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzaWRlMiAmJgorCT50ZXN0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtZXJnZSAmJgorCWdpdCBzaG93ID5hY3R1YWwudG1wICYmCisJc2VkIC1lICIxLC9eQEBAL2QiIDwgYWN0dWFsLnRtcCA+YWN0dWFsICYmCisJdHIgLWQgUSA8PC1cRU9GID5leHBlY3RlZCAmJgorCS0gMworCS0tMQorCS0gMgorCS0tMworCSAtNQorCS0tNAorCUVPRgorCWNvbXBhcmVfZGlmZl9wYXRjaCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY29tYmluZSBkaWZmIGNvYWxlc2NlIHRocmVlIHBhcmVudHMnICcKKwk+dGVzdCAmJgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAtLWFsbG93LWVtcHR5ICYmCisJY2F0IDw8LVxFT0YgPnRlc3QgJiYKKwkzCisJMQorCTIKKwkzCisJNAorCUVPRgorCWdpdCBjb21taXQgLWEgLW0gZW1wdHkxICYmCisJZ2l0IGNoZWNrb3V0IC1CIHNpZGUxICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJY2F0IDw8LVxFT0YgPnRlc3QgJiYKKwkxCisJMworCTcKKwk1CisJNAorCUVPRgorCWdpdCBjb21taXQgLWEgLW0gZW1wdHkyICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlMiAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWNhdCA8PC1cRU9GID50ZXN0ICYmCisJMworCTEKKwk2CisJNQorCTQKKwlFT0YKKwlnaXQgY29tbWl0IC1hIC1tIGVtcHR5MyAmJgorCT50ZXN0ICYmCisJZ2l0IGFkZCB0ZXN0ICYmCisJVFJFRT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCUNPTU1JVD0kKGdpdCBjb21taXQtdHJlZSAtcCBIRUFEIC1wIHNpZGUxIC1wIHNpZGUyIC1tIG1lcmdlICRUUkVFKSAmJgorCWdpdCBzaG93ICRDT01NSVQgPmFjdHVhbC50bXAgJiYKKwlzZWQgLWUgIjEsL15AQEAvZCIgPCBhY3R1YWwudG1wID5hY3R1YWwgJiYKKwl0ciAtZCBRIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJLS0gMworCS0tLTEKKwktICA2CisJIC0gMgorCSAtLTMKKwkgIC03CisJLSAtNQorCS0tLTQKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgYWN0dWFsCisnCisKKyMgVGVzdCBmb3IgYSBidWcgcmVwb3J0ZWQgYXQKKyMgaHR0cDovL3RocmVhZC5nbWFuZS5vcmcvZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0LzIyNDQxMAorIyB3aGVyZSBhIGRlbGV0ZSBsaW5lcyB3ZXJlIG1pc3NpbmcgZnJvbSBjb21iaW5lZCBkaWZmIG91dHB1dCB3aGVuIHRoZXkKKyMgb2NjdXJyZWQgZXhhY3RseSBiZWZvcmUgdGhlIGNvbnRleHQgbGluZXMgb2YgYSBsYXRlciBjaGFuZ2UuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5lIGRpZmYgbWlzc2luZyBkZWxldGUgYnVnJyAnCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsIC0tYWxsb3ctZW1wdHkgJiYKKwljYXQgPDwtXEVPRiA+dGVzdCAmJgorCTEKKwkyCisJMworCTQKKwlFT0YKKwlnaXQgYWRkIHRlc3QgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNpZGUxICYmCisJZ2l0IGNoZWNrb3V0IC1CIHNpZGUxICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJY2F0IDw8LVxFT0YgPnRlc3QgJiYKKwkwCisJMQorCTIKKwkzCisJNG1vZGlmaWVkCisJRU9GCisJZ2l0IGFkZCB0ZXN0ICYmCisJZ2l0IGNvbW1pdCAtbSBzaWRlMiAmJgorCWdpdCBicmFuY2ggLWYgc2lkZTIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgc2lkZTEgJiYKKwljYXQgPDwtXEVPRiA+dGVzdCAmJgorCTEKKwkyCisJMworCTRtb2RpZmllZAorCUVPRgorCWdpdCBhZGQgdGVzdCAmJgorCWdpdCBjb21taXQgLWEgLW0gbWVyZ2UgJiYKKwlnaXQgZGlmZi10cmVlIC1jIC1wIEhFQUQgPmFjdHVhbC50bXAgJiYKKwlzZWQgLWUgIjEsL15AQEAvZCIgPCBhY3R1YWwudG1wID5hY3R1YWwgJiYKKwl0ciAtZCBRIDw8LVxFT0YgPmV4cGVjdGVkICYmCisJLSAwCisJICAxCisJICAyCisJICAzCisJIC00CisJICs0bW9kaWZpZWQKKwlFT0YKKwljb21wYXJlX2RpZmZfcGF0Y2ggZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmUgZGlmZiBnZXRzIHRyZWUgc29ydGluZyByaWdodCcgJworCSMgY3JlYXRlIGEgZGlyZWN0b3J5IGFuZCBhIGZpbGUgdGhhdCBzb3J0IGRpZmZlcmVudGx5IGluIHRyZWVzCisJIyB2ZXJzdXMgYnl0ZS13aXNlIChpbXBsaWVkICIvIiBzb3J0cyBhZnRlciAiLiIpCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCW1rZGlyIGZvbyAmJgorCWVjaG8gYmFzZSA+Zm9vL29uZSAmJgorCWVjaG8gYmFzZSA+Zm9vL3R3byAmJgorCWVjaG8gYmFzZSA+Zm9vLmV4dCAmJgorCWdpdCBhZGQgZm9vIGZvby5leHQgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKworCSMgb25lIHNpZGUgbW9kaWZpZXMgYSBmaWxlIGluIHRoZSBkaXJlY3RvcnksIGFsb25nIHdpdGggdGhlIHJvb3QKKwkjIGZpbGUuLi4KKwllY2hvIG1hc3RlciA+Zm9vL29uZSAmJgorCWVjaG8gbWFzdGVyID5mb28uZXh0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtYXN0ZXIgJiYKKworCSMgdGhlIG90aGVyIHNpZGUgbW9kaWZpZXMgdGhlIG90aGVyIGZpbGUgaW4gdGhlIGRpcmVjdG9yeQorCWdpdCBjaGVja291dCAtYiBvdGhlciBIRUFEXiAmJgorCWVjaG8gb3RoZXIgPmZvby90d28gJiYKKwlnaXQgY29tbWl0IC1hIC1tIG90aGVyICYmCisKKwkjIEFuZCBub3cgd2UgbWVyZ2UuIFRoZSBmaWxlcyBpbiB0aGUgc3ViZGlyZWN0b3J5IHdpbGwgcmVzb2x2ZSBjbGVhbmx5LAorCSMgbWVhbmluZyB0aGF0IGEgY29tYmluZWQgZGlmZiB3aWxsIG5vdCBmaW5kIHRoZW0gaW50ZXJlc3RpbmcuIEJ1dCBpdAorCSMgd2lsbCBmaW5kIHRoZSB0cmVlIGl0c2VsZiBpbnRlcmVzdGluZywgYmVjYXVzZSBpdCBoYWQgdG8gYmUgbWVyZ2VkLgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2Ugb3RoZXIgJiYKKworCXByaW50ZiAiTU1cdGZvb1xuIiA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYtdHJlZSAtYyAtLW5hbWUtc3RhdHVzIC10IEhFQUQgPmFjdHVhbC50bXAgJiYKKwlzZWQgMWQgPGFjdHVhbC50bXAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDM5LWRpZmYtYXNzdW1lLXVuY2hhbmdlZC5zaCBiL3QvdDQwMzktZGlmZi1hc3N1bWUtdW5jaGFuZ2VkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIzYzBlMzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDM5LWRpZmYtYXNzdW1lLXVuY2hhbmdlZC5zaApAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZiB3aXRoIGFzc3VtZS11bmNoYW5nZWQgZW50cmllcycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgZXh0ZXJuYWwgZGlmZiBoYXMgYmVlbiB0ZXN0ZWQgaW4gdDQwMjAtZGlmZi1leHRlcm5hbC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gemVybyA+IHplcm8gJiYKKwlnaXQgYWRkIHplcm8gJiYKKwlnaXQgY29tbWl0IC1tIHplcm8gJiYKKwllY2hvIG9uZSA+IG9uZSAmJgorCWVjaG8gdHdvID4gdHdvICYmCisJZ2l0IGFkZCBvbmUgdHdvICYmCisJZ2l0IGNvbW1pdCAtbSBvbmV0d28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCBvbmUgJiYKKwllY2hvIGJvcmtlZCA+PiBvbmUgJiYKKwl0ZXN0ICIkKGdpdCBscy1maWxlcyAtdiBvbmUpIiA9ICJoIG9uZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCBkb2VzIG5vdCBleGFtaW5lIGFzc3VtZS11bmNoYW5nZWQgZW50cmllcycgJworCWdpdCBkaWZmLWluZGV4IEhFQUReIC0tIG9uZSB8IGdyZXAgLXEgNTYyNmFiZjBmNzJlNThkN2ExNTMzNjhiYTU3ZGI0YzY3M2MwZTE3MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIGRvZXMgbm90IGV4YW1pbmUgYXNzdW1lLXVuY2hhbmdlZCBlbnRyaWVzJyAnCisJcm0gb25lICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1maWxlcyAtLSBvbmUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnZmluZC1jb3BpZXMtaGFyZGVyIGlzIG5vdCBjb25mdXNlZCBieSBtb2RlIGJpdHMnICcKKwllY2hvIGNvbnRlbnQgPmV4ZWMgJiYKKwljaG1vZCAreCBleGVjICYmCisJZ2l0IGFkZCBleGVjICYmCisJZ2l0IGNvbW1pdCAtbSBleGVjICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFzc3VtZS11bmNoYW5nZWQgZXhlYyAmJgorCT5leHBlY3QgJiYKKwlnaXQgZGlmZi1maWxlcyAtLWZpbmQtY29waWVzLWhhcmRlciAtLSBleGVjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA0MC13aGl0ZXNwYWNlLXN0YXR1cy5zaCBiL3QvdDQwNDAtd2hpdGVzcGFjZS1zdGF0dXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2M3MjhhMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNDAtd2hpdGVzcGFjZS1zdGF0dXMuc2gKQEAgLTAsMCArMSw3NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLS1leGl0LWNvZGUgd2l0aCB3aGl0ZXNwYWNlJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIGEgYiAmJgorCWVjaG8gPmMgJiYKKwllY2hvID5hL2QgJiYKKwllY2hvID5iL2UgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvICIgIiA+YS9kICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQgJiYKKwllY2hvICIgICIgPmEvZCAmJgorCWVjaG8gIiAiID5iL2UgJiYKKwlnaXQgYWRkIGEvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLS1leGl0LWNvZGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEXiBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtdHJlZSAtLWV4aXQtY29kZSBIRUFEXiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSAtYiAtLWV4aXQtY29kZScgJworCWdpdCBkaWZmIC1iIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQgJiYKKwlnaXQgZGlmZi10cmVlIC1iIC1wIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQgJiYKKwlnaXQgZGlmZi10cmVlIC1iIC0tZXhpdC1jb2RlIEhFQUReIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAtLWNhY2hlZCAtLWV4aXQtY29kZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtaW5kZXggLWIgLXAgLS1jYWNoZWQgLS1leGl0LWNvZGUnICcKKwlnaXQgZGlmZiAtYiAtLWNhY2hlZCAtLWV4aXQtY29kZSBIRUFEICYmCisJZ2l0IGRpZmYtaW5kZXggLWIgLXAgLS1jYWNoZWQgLS1leGl0LWNvZGUgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWluZGV4IC0tZXhpdC1jb2RlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1leGl0LWNvZGUgSEVBRCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCAtYiAtcCAtLWV4aXQtY29kZScgJworCWdpdCBkaWZmIC1iIC0tZXhpdC1jb2RlIEhFQUQgJiYKKwlnaXQgZGlmZi1pbmRleCAtYiAtcCAtLWV4aXQtY29kZSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgLS1leGl0LWNvZGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgLWIgLXAgLS1leGl0LWNvZGUnICcKKwlnaXQgZGlmZiAtYiAtLWV4aXQtY29kZSAmJgorCWdpdCBkaWZmLWZpbGVzIC1iIC1wIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgLS1kaWZmLWZpbHRlciAtLXF1aWV0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIGEvZCAmJgorCWVjaG8geCA+PmIvZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLWZpbGVzIC0tZGlmZi1maWx0ZXI9TSAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSAtLWRpZmYtZmlsdGVyIC0tcXVpZXQnICcKKwlnaXQgY29tbWl0IC1hIC1tICJ3b3JrdHJlZSBzdGF0ZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC0tZGlmZi1maWx0ZXI9TSAtLXF1aWV0IEhFQUReIEhFQUQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQxLWRpZmYtc3VibW9kdWxlLW9wdGlvbi5zaCBiL3QvdDQwNDEtZGlmZi1zdWJtb2R1bGUtb3B0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJkOTczMWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQxLWRpZmYtc3VibW9kdWxlLW9wdGlvbi5zaApAQCAtMCwwICsxLDU0OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBKZW5zIExlaG1hbm4sIGJhc2VkIG9uIHQ3NDAxIGJ5IFBpbmcgWWluCisjIENvcHlyaWdodCAoYykgMjAxMSBBbGV4ZXkgU2h1bWtpbiAoKyBub24tVVRGLTggY29tbWl0IGVuY29kaW5nIHRlc3RzKQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdTdXBwb3J0IGZvciB2ZXJib3NlIHN1Ym1vZHVsZSBkaWZmZXJlbmNlcyBpbiBnaXQgZGlmZgorCitUaGlzIHRlc3QgdHJpZXMgdG8gdmVyaWZ5IHRoZSBzYW5pdHkgb2YgdGhlIC0tc3VibW9kdWxlIG9wdGlvbiBvZiBnaXQgZGlmZi4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGVzdGVkIG5vbi1VVEYtOCBlbmNvZGluZwordGVzdF9lbmNvZGluZz0iSVNPODg1OS0xIgorCisjIFN0cmluZyAiYWRkZWQiIGluIEdlcm1hbiAodHJhbnNsYXRlZCB3aXRoIEdvb2dsZSBUcmFuc2xhdGUpLCBlbmNvZGVkIGluIFVURi04LAorIyB1c2VkIGluIHNhbXBsZSBjb21taXQgbG9nIG1lc3NhZ2VzIGluIGFkZF9maWxlKCkgZnVuY3Rpb24gYmVsb3cuCithZGRlZD0kKHByaW50ZiAiaGluenVnZWZcMzAzXDI3NGd0IikKK2FkZF9maWxlICgpIHsKKwkoCisJCWNkICIkMSIgJiYKKwkJc2hpZnQgJiYKKwkJZm9yIG5hbWUKKwkJZG8KKwkJCWVjaG8gIiRuYW1lIiA+IiRuYW1lIiAmJgorCQkJZ2l0IGFkZCAiJG5hbWUiICYmCisJCQl0ZXN0X3RpY2sgJiYKKwkJCSMgImdpdCBjb21taXQgLW0iIHdvdWxkIGJyZWFrIE1pbkdXLCBhcyBXaW5kb3dzIHJlZnVzZSB0byBwYXNzCisJCQkjICR0ZXN0X2VuY29kaW5nIGVuY29kZWQgcGFyYW1ldGVyIHRvIGdpdC4KKwkJCWVjaG8gIkFkZCAkbmFtZSAoJGFkZGVkICRuYW1lKSIgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyB8CisJCQlnaXQgLWMgImkxOG4uY29tbWl0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmciIGNvbW1pdCAtRiAtCisJCWRvbmUgPi9kZXYvbnVsbCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tc2hvcnQgLS12ZXJpZnkgSEVBRAorCSkKK30KK2NvbW1pdF9maWxlICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0ICIkQCIgLW0gIkNvbW1pdCAkKiIgPi9kZXYvbnVsbAorfQorCit0ZXN0X2NyZWF0ZV9yZXBvIHNtMSAmJgorYWRkX2ZpbGUgLiBmb28gPi9kZXYvbnVsbAorCitoZWFkMT0kKGFkZF9maWxlIHNtMSBmb28xIGZvbzIpCitmdWxsaGVhZDE9JChjZCBzbTE7IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkZWQgc3VibW9kdWxlJyAnCisJZ2l0IGFkZCBzbTEgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIDAwMDAwMDAuLi4kaGVhZDEgKG5ldyBzdWJtb2R1bGUpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGVkIHN1Ym1vZHVsZSwgc2V0IGRpZmYuc3VibW9kdWxlJyAnCisJZ2l0IGNvbmZpZyBkaWZmLnN1Ym1vZHVsZSBsb2cgJiYKKwlnaXQgYWRkIHNtMSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgMDAwMDAwMC4uLiRoZWFkMSAobmV3IHN1Ym1vZHVsZSkKKwlFT0YKKwlnaXQgY29uZmlnIC0tdW5zZXQgZGlmZi5zdWJtb2R1bGUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zdWJtb2R1bGU9c2hvcnQgb3ZlcnJpZGVzIGRpZmYuc3VibW9kdWxlJyAnCisJdGVzdF9jb25maWcgZGlmZi5zdWJtb2R1bGUgbG9nICYmCisJZ2l0IGFkZCBzbTEgJiYKKwlnaXQgZGlmZiAtLXN1Ym1vZHVsZT1zaG9ydCAtLWNhY2hlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvc20xIGIvc20xCisJbmV3IGZpbGUgbW9kZSAxNjAwMDAKKwlpbmRleCAwMDAwMDAwLi4kaGVhZDEKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc20xCisJQEAgLTAsMCArMSBAQAorCStTdWJwcm9qZWN0IGNvbW1pdCAkZnVsbGhlYWQxCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuc3VibW9kdWxlIGRvZXMgbm90IGFmZmVjdCBwbHVtYmluZycgJworCXRlc3RfY29uZmlnIGRpZmYuc3VibW9kdWxlIGxvZyAmJgorCWdpdCBkaWZmLWluZGV4IC1wIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorCW5ldyBmaWxlIG1vZGUgMTYwMDAwCisJaW5kZXggMDAwMDAwMC4uJGhlYWQxCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMQorCUBAIC0wLDAgKzEgQEAKKwkrU3VicHJvamVjdCBjb21taXQgJGZ1bGxoZWFkMQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjb21taXRfZmlsZSBzbTEgJiYKK2hlYWQyPSQoYWRkX2ZpbGUgc20xIGZvbzMpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShmb3J3YXJkKScgJworCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQxLi4kaGVhZDI6CisJICA+IEFkZCBmb28zICgkYWRkZWQgZm9vMykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGZvcndhcmQpJyAnCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGU9bG9nID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQxLi4kaGVhZDI6CisJICA+IEFkZCBmb28zICgkYWRkZWQgZm9vMykKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGZvcndhcmQpIC0tc3VibW9kdWxlJyAnCisJZ2l0IGRpZmYgLS1zdWJtb2R1bGUgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDEuLiRoZWFkMjoKKwkgID4gQWRkIGZvbzMgKCRhZGRlZCBmb28zKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitmdWxsaGVhZDI9JChjZCBzbTE7IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShmb3J3YXJkKSAtLXN1Ym1vZHVsZT1zaG9ydCcgJworCWdpdCBkaWZmIC0tc3VibW9kdWxlPXNob3J0ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9zbTEgYi9zbTEKKwlpbmRleCAkaGVhZDEuLiRoZWFkMiAxNjAwMDAKKwktLS0gYS9zbTEKKwkrKysgYi9zbTEKKwlAQCAtMSArMSBAQAorCS1TdWJwcm9qZWN0IGNvbW1pdCAkZnVsbGhlYWQxCisJK1N1YnByb2plY3QgY29tbWl0ICRmdWxsaGVhZDIKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY29tbWl0X2ZpbGUgc20xICYmCitoZWFkMz0kKAorCWNkIHNtMSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yID4vZGV2L251bGwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tc2hvcnQgLS12ZXJpZnkgSEVBRAorKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoYmFja3dhcmQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDIuLiRoZWFkMyAocmV3aW5kKToKKwkgIDwgQWRkIGZvbzMgKCRhZGRlZCBmb28zKQorCSAgPCBBZGQgZm9vMiAoJGFkZGVkIGZvbzIpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2hlYWQ0PSQoYWRkX2ZpbGUgc20xIGZvbzQgZm9vNSkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZShiYWNrd2FyZCBhbmQgZm9yd2FyZCknICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkMi4uLiRoZWFkNDoKKwkgID4gQWRkIGZvbzUgKCRhZGRlZCBmb281KQorCSAgPiBBZGQgZm9vNCAoJGFkZGVkIGZvbzQpCisJICA8IEFkZCBmb28zICgkYWRkZWQgZm9vMykKKwkgIDwgQWRkIGZvbzIgKCRhZGRlZCBmb28yKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjb21taXRfZmlsZSBzbTEgJiYKK212IHNtMSBzbTEtYmFrICYmCitlY2hvIHNtMSA+c20xICYmCitoZWFkNT0kKGdpdCBoYXNoLW9iamVjdCBzbTEgfCBjdXQgLWMxLTcpICYmCitnaXQgYWRkIHNtMSAmJgorcm0gLWYgc20xICYmCittdiBzbTEtYmFrIHNtMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0eXBlY2hhbmdlZCBzdWJtb2R1bGUoc3VibW9kdWxlLT5ibG9iKSwgLS1jYWNoZWQnICcKKwlnaXQgZGlmZiAtLXN1Ym1vZHVsZT1sb2cgLS1jYWNoZWQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDQuLi4wMDAwMDAwIChzdWJtb2R1bGUgZGVsZXRlZCkKKwlkaWZmIC0tZ2l0IGEvc20xIGIvc20xCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi4kaGVhZDUKKwktLS0gL2Rldi9udWxsCisJKysrIGIvc20xCisJQEAgLTAsMCArMSBAQAorCStzbTEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiknICcKKwlnaXQgZGlmZiAtLXN1Ym1vZHVsZT1sb2cgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJZGlmZiAtLWdpdCBhL3NtMSBiL3NtMQorCWRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4ICRoZWFkNS4uMDAwMDAwMAorCS0tLSBhL3NtMQorCSsrKyAvZGV2L251bGwKKwlAQCAtMSArMCwwIEBACisJLXNtMQorCVN1Ym1vZHVsZSBzbTEgMDAwMDAwMC4uLiRoZWFkNCAobmV3IHN1Ym1vZHVsZSkKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworcm0gLXJmIHNtMSAmJgorZ2l0IGNoZWNrb3V0LWluZGV4IHNtMQordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiknICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkNC4uLjAwMDAwMDAgKHN1Ym1vZHVsZSBkZWxldGVkKQorCWRpZmYgLS1naXQgYS9zbTEgYi9zbTEKKwluZXcgZmlsZSBtb2RlIDEwMDY0NAorCWluZGV4IDAwMDAwMDAuLiRoZWFkNQorCS0tLSAvZGV2L251bGwKKwkrKysgYi9zbTEKKwlAQCAtMCwwICsxIEBACisJK3NtMQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitybSAtZiBzbTEgJiYKK3Rlc3RfY3JlYXRlX3JlcG8gc20xICYmCitoZWFkNj0kKGFkZF9maWxlIHNtMSBmb282IGZvbzcpCitmdWxsaGVhZDY9JChjZCBzbTE7IGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmV4aXN0ZW50IGNvbW1pdCcgJworCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ0Li4uJGhlYWQ2IChjb21taXRzIG5vdCBwcmVzZW50KQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjb21taXRfZmlsZQordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKGJsb2ItPnN1Ym1vZHVsZSknICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlkaWZmIC0tZ2l0IGEvc20xIGIvc20xCisJZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CisJaW5kZXggJGhlYWQ1Li4wMDAwMDAwCisJLS0tIGEvc20xCisJKysrIC9kZXYvbnVsbAorCUBAIC0xICswLDAgQEAKKwktc20xCisJU3VibW9kdWxlIHNtMSAwMDAwMDAwLi4uJGhlYWQ2IChuZXcgc3VibW9kdWxlKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjb21taXRfZmlsZSBzbTEgJiYKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpcyB1cCB0byBkYXRlJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCcgJworCWVjaG8gbmV3ID4gc20xL25ldy1maWxlICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudAorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQgKHVudHJhY2tlZCBpZ25vcmVkKScgJworCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwkhIHRlc3QgLXMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwkhIHRlc3QgLXMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAoYWxsIGlnbm9yZWQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz1hbGwgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZlZCBjb250ZW50JyAnCisJZWNobyBuZXcgPiBzbTEvZm9vNiAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIG1vZGlmaWVkIGNvbnRlbnQKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBhbmQgbW9kaWZlZCBjb250ZW50ICh1bnRyYWNrZWQgaWdub3JlZCknICcKKwllY2hvIG5ldyA+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSBjb250YWlucyBtb2RpZmllZCBjb250ZW50CisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKKwllY2hvIG5ldyA+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJISB0ZXN0IC1zIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQgKGFsbCBpZ25vcmVkKScgJworCWVjaG8gbmV3ID4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwkhIHRlc3QgLXMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb250YWlucyBtb2RpZmVkIGNvbnRlbnQnICcKKwlybSAtZiBzbTEvbmV3LWZpbGUgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIG1vZGlmaWVkIGNvbnRlbnQKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworKGNkIHNtMTsgZ2l0IGNvbW1pdCAtbWNoYW5nZSBmb282ID4vZGV2L251bGwpICYmCitoZWFkOD0kKGNkIHNtMTsgZ2l0IHJldi1wYXJzZSAtLXNob3J0IC0tdmVyaWZ5IEhFQUQpICYmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaXMgbW9kaWZpZWQnICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkNi4uJGhlYWQ4OgorCSAgPiBjaGFuZ2UKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50JyAnCisJZWNobyBuZXcgPiBzbTEvbmV3LWZpbGUgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIHVudHJhY2tlZCBjb250ZW50CisJU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkODoKKwkgID4gY2hhbmdlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAodW50cmFja2VkIGlnbm9yZWQpJyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkODoKKwkgID4gY2hhbmdlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4kaGVhZDg6CisJICA+IGNoYW5nZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGNvbnRlbnQgKGFsbCBpZ25vcmVkKScgJworCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9YWxsIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwkhIHRlc3QgLXMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCcgJworCWVjaG8gbW9kaWZpY2F0aW9uID4+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSBjb250YWlucyB1bnRyYWNrZWQgY29udGVudAorCVN1Ym1vZHVsZSBzbTEgY29udGFpbnMgbW9kaWZpZWQgY29udGVudAorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4kaGVhZDg6CisJICA+IGNoYW5nZQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGFuZCBtb2RpZmVkIGNvbnRlbnQgKHVudHJhY2tlZCBpZ25vcmVkKScgJworCWVjaG8gbW9kaWZpY2F0aW9uID4+IHNtMS9mb282ICYmCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSBjb250YWlucyBtb2RpZmllZCBjb250ZW50CisJU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkODoKKwkgID4gY2hhbmdlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAoZGlydHkgaWdub3JlZCknICcKKwllY2hvIG1vZGlmaWNhdGlvbiA+PiBzbTEvZm9vNiAmJgorCWdpdCBkaWZmLWluZGV4IC1wIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgLS1zdWJtb2R1bGU9bG9nIEhFQUQgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJU3VibW9kdWxlIHNtMSAkaGVhZDYuLiRoZWFkODoKKwkgID4gY2hhbmdlCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyB1bnRyYWNrZWQgYW5kIG1vZGlmZWQgY29udGVudCAoYWxsIGlnbm9yZWQpJyAnCisJZWNobyBtb2RpZmljYXRpb24gPj4gc20xL2ZvbzYgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLWlnbm9yZS1zdWJtb2R1bGVzIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwkhIHRlc3QgLXMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIHN1Ym1vZHVsZSBjb250YWlucyBtb2RpZmVkIGNvbnRlbnQnICcKKwlybSAtZiBzbTEvbmV3LWZpbGUgJiYKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xIGNvbnRhaW5zIG1vZGlmaWVkIGNvbnRlbnQKKwlTdWJtb2R1bGUgc20xICRoZWFkNi4uJGhlYWQ4OgorCSAgPiBjaGFuZ2UKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworcm0gLXJmIHNtMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlZCBzdWJtb2R1bGUnICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZT1sb2cgSEVBRCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkNi4uLjAwMDAwMDAgKHN1Ym1vZHVsZSBkZWxldGVkKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2NyZWF0ZV9yZXBvIHNtMiAmJgoraGVhZDc9JChhZGRfZmlsZSBzbTIgZm9vOCBmb285KSAmJgorZ2l0IGFkZCBzbTIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgc3VibW9kdWxlcycgJworCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCisJU3VibW9kdWxlIHNtMiAwMDAwMDAwLi4uJGhlYWQ3IChuZXcgc3VibW9kdWxlKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRoIGZpbHRlcicgJworCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPWxvZyBIRUFEIHNtMiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20yIDAwMDAwMDAuLi4kaGVhZDcgKG5ldyBzdWJtb2R1bGUpCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NvbW1pdF9maWxlIHNtMgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l2ZW4gY29tbWl0JyAnCisJZ2l0IGRpZmYtaW5kZXggLXAgLS1zdWJtb2R1bGU9bG9nIEhFQUReID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVN1Ym1vZHVsZSBzbTEgJGhlYWQ2Li4uMDAwMDAwMCAoc3VibW9kdWxlIGRlbGV0ZWQpCisJU3VibW9kdWxlIHNtMiAwMDAwMDAwLi4uJGhlYWQ3IChuZXcgc3VibW9kdWxlKQorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZlbiBjb21taXQgLS1zdWJtb2R1bGUnICcKKwlnaXQgZGlmZi1pbmRleCAtcCAtLXN1Ym1vZHVsZSBIRUFEXiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkNi4uLjAwMDAwMDAgKHN1Ym1vZHVsZSBkZWxldGVkKQorCVN1Ym1vZHVsZSBzbTIgMDAwMDAwMC4uLiRoZWFkNyAobmV3IHN1Ym1vZHVsZSkKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworZnVsbGhlYWQ3PSQoY2Qgc20yOyBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmVuIGNvbW1pdCAtLXN1Ym1vZHVsZT1zaG9ydCcgJworCWdpdCBkaWZmLWluZGV4IC1wIC0tc3VibW9kdWxlPXNob3J0IEhFQUReID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCWRpZmYgLS1naXQgYS9zbTEgYi9zbTEKKwlkZWxldGVkIGZpbGUgbW9kZSAxNjAwMDAKKwlpbmRleCAkaGVhZDYuLjAwMDAwMDAKKwktLS0gYS9zbTEKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1TdWJwcm9qZWN0IGNvbW1pdCAkZnVsbGhlYWQ2CisJZGlmZiAtLWdpdCBhL3NtMiBiL3NtMgorCW5ldyBmaWxlIG1vZGUgMTYwMDAwCisJaW5kZXggMDAwMDAwMC4uJGhlYWQ3CisJLS0tIC9kZXYvbnVsbAorCSsrKyBiL3NtMgorCUBAIC0wLDAgKzEgQEAKKwkrU3VicHJvamVjdCBjb21taXQgJGZ1bGxoZWFkNworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAuZ2l0IGZpbGUgZm9yIHNtMicgJworCShjZCBzbTIgJiYKKwkgUkVBTD0iJChwd2QpLy4uLy5yZWFsIiAmJgorCSBtdiAuZ2l0ICIkUkVBTCIKKwkgZWNobyAiZ2l0ZGlyOiAkUkVBTCIgPi5naXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1zdWJtb2R1bGUgd2l0aCAuZ2l0IGZpbGUnICcKKwlnaXQgZGlmZiAtLXN1Ym1vZHVsZSBIRUFEXiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlTdWJtb2R1bGUgc20xICRoZWFkNi4uLjAwMDAwMDAgKHN1Ym1vZHVsZSBkZWxldGVkKQorCVN1Ym1vZHVsZSBzbTIgMDAwMDAwMC4uLiRoZWFkNyAobmV3IHN1Ym1vZHVsZSkKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLXN1Ym1vZHVsZSB3aXRoIG9iamVjdHMgcmVmZXJlbmNlZCBieSBhbHRlcm5hdGVzJyAnCisJbWtkaXIgc3ViX2FsdCAmJgorCShjZCBzdWJfYWx0ICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gYSA+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBhCisJKSAmJgorCW1rZGlyIHN1cGVyICYmCisJKGNkIHN1cGVyICYmCisJCWdpdCBjbG9uZSAtcyAuLi9zdWJfYWx0IHN1YiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgYWRkIHN1YiAmJgorCQlnaXQgY29tbWl0IC1tICJzdWIgYSIKKwkpICYmCisJKGNkIHN1Yl9hbHQgJiYKKwkJc2hhMV9iZWZvcmU9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkKKwkJZWNobyBiID5iICYmCisJCWdpdCBhZGQgYiAmJgorCQlnaXQgY29tbWl0IC1tIGIgJiYKKwkJc2hhMV9hZnRlcj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCQl7CisJCQllY2hvICJTdWJtb2R1bGUgc3ViICRzaGExX2JlZm9yZS4uJHNoYTFfYWZ0ZXI6IiAmJgorCQkJZWNobyAiICA+IGIiCisJCX0gPi4uL2V4cGVjdGVkCisJKSAmJgorCShjZCBzdXBlciAmJgorCQkoY2Qgc3ViICYmCisJCQlnaXQgZmV0Y2ggJiYKKwkJCWdpdCBjaGVja291dCBvcmlnaW4vbWFzdGVyCisJCSkgJiYKKwkJZ2l0IGRpZmYgLS1zdWJtb2R1bGUgPiAuLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA0Mi1kaWZmLXRleHRjb252LWNhY2hpbmcuc2ggYi90L3Q0MDQyLWRpZmYtdGV4dGNvbnYtY2FjaGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNGE0NGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA0Mi1kaWZmLXRleHRjb252LWNhY2hpbmcuc2gKQEAgLTAsMCArMSwxMTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHRleHRjb252IGNhY2hpbmcnCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5oZWxwZXIgPDwnRU9GJworIyEvYmluL3NoCitzZWQgJ3MvXi9jb252ZXJ0ZWQ6IC8nICIkQCIgPmhlbHBlci5vdXQKK2NhdCBoZWxwZXIub3V0CitFT0YKK2NobW9kICt4IGhlbHBlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gZm9vIGNvbnRlbnQgMSA+Zm9vLmJpbiAmJgorCWVjaG8gYmFyIGNvbnRlbnQgMSA+YmFyLmJpbiAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZWNobyBmb28gY29udGVudCAyID5mb28uYmluICYmCisJZWNobyBiYXIgY29udGVudCAyID5iYXIuYmluICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwllY2hvICIqLmJpbiBkaWZmPW1hZ2ljIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgY29uZmlnIGRpZmYubWFnaWMudGV4dGNvbnYgLi9oZWxwZXIgJiYKKwlnaXQgY29uZmlnIGRpZmYubWFnaWMuY2FjaGV0ZXh0Y29udiB0cnVlCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitkaWZmIC0tZ2l0IGEvYmFyLmJpbiBiL2Jhci5iaW4KK2luZGV4IGZjZjkxNjYuLjI4MjgzZDUgMTAwNjQ0CistLS0gYS9iYXIuYmluCisrKysgYi9iYXIuYmluCitAQCAtMSArMSBAQAorLWNvbnZlcnRlZDogYmFyIGNvbnRlbnQgMQorK2NvbnZlcnRlZDogYmFyIGNvbnRlbnQgMgorZGlmZiAtLWdpdCBhL2Zvby5iaW4gYi9mb28uYmluCitpbmRleCBkNWI5ZmUzLi4xMzQ1ZGIyIDEwMDY0NAorLS0tIGEvZm9vLmJpbgorKysrIGIvZm9vLmJpbgorQEAgLTEgKzEgQEAKKy1jb252ZXJ0ZWQ6IGZvbyBjb250ZW50IDEKKytjb252ZXJ0ZWQ6IGZvbyBjb250ZW50IDIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaXJzdCB0ZXh0Y29udiB3b3JrcycgJworCWdpdCBkaWZmIEhFQUReIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FjaGVkIHRleHRjb252IHByb2R1Y2VzIHNhbWUgb3V0cHV0JyAnCisJZ2l0IGRpZmYgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYWNoZWQgdGV4dGNvbnYgZG9lcyBub3QgcnVuIGhlbHBlcicgJworCXJtIC1mIGhlbHBlci5vdXQgJiYKKwlnaXQgZGlmZiBIRUFEXiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJISB0ZXN0IC1yIGhlbHBlci5vdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9iYXIuYmluIGIvYmFyLmJpbgoraW5kZXggZmNmOTE2Ni4uMjgyODNkNSAxMDA2NDQKKy0tLSBhL2Jhci5iaW4KKysrKyBiL2Jhci5iaW4KK0BAIC0xLDIgKzEsMiBAQAorIGNvbnZlcnRlZDogb3RoZXIKKy1jb252ZXJ0ZWQ6IGJhciBjb250ZW50IDEKKytjb252ZXJ0ZWQ6IGJhciBjb250ZW50IDIKK2RpZmYgLS1naXQgYS9mb28uYmluIGIvZm9vLmJpbgoraW5kZXggZDViOWZlMy4uMTM0NWRiMiAxMDA2NDQKKy0tLSBhL2Zvby5iaW4KKysrKyBiL2Zvby5iaW4KK0BAIC0xLDIgKzEsMiBAQAorIGNvbnZlcnRlZDogb3RoZXIKKy1jb252ZXJ0ZWQ6IGZvbyBjb250ZW50IDEKKytjb252ZXJ0ZWQ6IGZvbyBjb250ZW50IDIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdpbmcgdGV4dGNvbnYgaW52YWxpZGF0ZXMgY2FjaGUnICcKKwllY2hvIG90aGVyID5vdGhlciAmJgorCWdpdCBjb25maWcgZGlmZi5tYWdpYy50ZXh0Y29udiAiLi9oZWxwZXIgb3RoZXIiICYmCisJZ2l0IGRpZmYgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL2Jhci5iaW4gYi9iYXIuYmluCitpbmRleCBmY2Y5MTY2Li4yODI4M2Q1IDEwMDY0NAorLS0tIGEvYmFyLmJpbgorKysrIGIvYmFyLmJpbgorQEAgLTEsMiArMSwyIEBACisgY29udmVydGVkOiBvdGhlcgorLWNvbnZlcnRlZDogYmFyIGNvbnRlbnQgMQorK2NvbnZlcnRlZDogYmFyIGNvbnRlbnQgMgorZGlmZiAtLWdpdCBhL2Zvby5iaW4gYi9mb28uYmluCitpbmRleCBkNWI5ZmUzLi4xMzQ1ZGIyIDEwMDY0NAorLS0tIGEvZm9vLmJpbgorKysrIGIvZm9vLmJpbgorQEAgLTEgKzEgQEAKKy1jb252ZXJ0ZWQ6IGZvbyBjb250ZW50IDEKKytjb252ZXJ0ZWQ6IGZvbyBjb250ZW50IDIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoaW5nIGRpZmYgZHJpdmVyIHByb2R1Y2VzIGNvcnJlY3QgcmVzdWx0cycgJworCWdpdCBjb25maWcgZGlmZi5tb3JlbWFnaWMudGV4dGNvbnYgLi9oZWxwZXIgJiYKKwllY2hvIGZvby5iaW4gZGlmZj1tb3JlbWFnaWMgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBkaWZmIEhFQUReIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBUaGUgcG9pbnQgaGVyZSBpcyB0byB0ZXN0IHRoYXQgd2UgY2FuIGxvZyB0aGUgbm90ZXMgY2FjaGUgYW5kIHN0aWxsIHVzZSBpdCB0bworIyBwcm9kdWNlIGEgZGlmZiBsYXRlciAob2xkZXIgdmVyc2lvbnMgb2YgZ2l0IHdvdWxkIHNlZ2ZhdWx0IG9uIHRoaXMpLiBJdCdzCisjIG11Y2ggbW9yZSBsaWtlbHkgdG8gY29tZSB1cCBpbiB0aGUgcmVhbCB3b3JsZCB3aXRoICJsb2cgLS1hbGwgLXAiLCBidXQgdXNpbmcKKyMgLS1uby13YWxrIGxldHMgdXMgcmVsaWFibHkgcmVwcm9kdWNlIHRoZSBvcmRlciBvZiB0cmF2ZXJzYWwuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgbm90ZXMgY2FjaGUgYW5kIHN0aWxsIHVzZSBjYWNoZSBmb3IgLXAnICcKKwlnaXQgbG9nIC0tbm8td2FsayAtcCByZWZzL25vdGVzL3RleHRjb252L21hZ2ljIEhFQUQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQzLWRpZmYtcmVuYW1lLWJpbmFyeS5zaCBiL3QvdDQwNDMtZGlmZi1yZW5hbWUtYmluYXJ5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhMmNmOTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQzLWRpZmYtcmVuYW1lLWJpbmFyeS5zaApAQCAtMCwwICsxLDQ1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEpha3ViIE5hcmVic2tpLCBDaHJpc3RpYW4gQ291ZGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J01vdmUgYSBiaW5hcnkgZmlsZScKKworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSByZXBvc2l0b3J5JyAnCisJZ2l0IGluaXQgJiYKKwllY2hvIGZvbyA+IGZvbyAmJgorCWVjaG8gImJhclEiIHwgcV90b19udWwgPiBiYXIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSB0aGUgZmlsZXMgaW50byBhICJzdWIiIGRpcmVjdG9yeScgJworCW1rZGlyIHN1YiAmJgorCWdpdCBtdiBiYXIgZm9vIHN1Yi8gJiYKKwlnaXQgY29tbWl0IC1tICJNb3ZlZCB0byBzdWIvIgorJworCitjYXQgPiBleHBlY3RlZCA8PFxFT0YKKy0JLQliYXIgPT4gc3ViL2JhcgorMAkwCWZvbyA9PiBzdWIvZm9vCisKK2RpZmYgLS1naXQgYS9iYXIgYi9zdWIvYmFyCitzaW1pbGFyaXR5IGluZGV4IDEwMCUKK3JlbmFtZSBmcm9tIGJhcgorcmVuYW1lIHRvIHN1Yi9iYXIKK2RpZmYgLS1naXQgYS9mb28gYi9zdWIvZm9vCitzaW1pbGFyaXR5IGluZGV4IDEwMCUKK3JlbmFtZSBmcm9tIGZvbworcmVuYW1lIHRvIHN1Yi9mb28KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc2hvdyAtQyAtQyByZXBvcnQgcmVuYW1lcycgJworCWdpdCBzaG93IC1DIC1DIC0tcmF3IC0tYmluYXJ5IC0tbnVtc3RhdCA+cGF0Y2gtd2l0aC1zdGF0ICYmCisJdGFpbCAtbiAxMSBwYXRjaC13aXRoLXN0YXQgPmN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA0NC1kaWZmLWluZGV4LXVuaXF1ZS1hYmJyZXYuc2ggYi90L3Q0MDQ0LWRpZmYtaW5kZXgtdW5pcXVlLWFiYnJldi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNWNlNzJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA0NC1kaWZmLWluZGV4LXVuaXF1ZS1hYmJyZXYuc2gKQEAgLTAsMCArMSwzNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdW5pcXVlIHNoYTEgYWJicmV2aWF0aW9uIG9uICJpbmRleCBmcm9tLi50byIgbGluZScKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdF9pbml0aWFsIDw8RU9GCisxMDA2NDQgYmxvYiA1MWQyNzM4NDYzZWE0Y2E2NmY4NjkxYzkxZTMzY2U2NGI3ZDQxYmIxCWZvbworRU9GCisKK2NhdCA+ZXhwZWN0X3VwZGF0ZSA8PEVPRgorMTAwNjQ0IGJsb2IgNTFkMjczOGVmYjRhZDhhMWU0MGJlZDgzOWFiOGUxMTZmMGExNWU0Nwlmb28KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gNDgyNyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRDogPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RfaW5pdGlhbCBhY3R1YWwgJiYKKwllY2hvIDExNzQyID4gZm9vICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidXBkYXRlIiAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEOiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF91cGRhdGUgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitpbmRleCA1MWQyNzM4NC4uNTFkMjczOGUgMTAwNjQ0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBkb2VzIG5vdCBwcm9kdWNlIGFtYmlndW91cyBpbmRleCBsaW5lJyAnCisJZ2l0IGRpZmYgSEVBRF4uLkhFQUQgfCBncmVwIGluZGV4ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNDUtZGlmZi1yZWxhdGl2ZS5zaCBiL3QvdDQwNDUtZGlmZi1yZWxhdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOTUwZjUwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA0NS1kaWZmLXJlbGF0aXZlLnNoCkBAIC0wLDAgKzEsNzMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIC0tcmVsYXRpdmUgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZW1wdHkgJiYKKwllY2hvIGNvbnRlbnQgPmZpbGUxICYmCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyBvdGhlciBjb250ZW50ID5zdWJkaXIvZmlsZTIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIG9uZQorJworCitjaGVja19kaWZmKCkgeworZXhwZWN0PSQxOyBzaGlmdAorY2F0ID5leHBlY3RlZCA8PEVPRgorZGlmZiAtLWdpdCBhLyRleHBlY3QgYi8kZXhwZWN0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uMjVjMDVlZgorLS0tIC9kZXYvbnVsbAorKysrIGIvJGV4cGVjdAorQEAgLTAsMCArMSBAQAorK290aGVyIGNvbnRlbnQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAiLXAgJCoiICIKKwlnaXQgZGlmZiAtcCAkKiBIRUFEXiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCit9CisKK2NoZWNrX251bXN0YXQoKSB7CitleHBlY3Q9JDE7IHNoaWZ0CitjYXQgPmV4cGVjdGVkIDw8RU9GCisxCTAJJGV4cGVjdAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLW51bXN0YXQgJCoiICIKKwllY2hvICcxCTAJJGV4cGVjdCcgPmV4cGVjdGVkICYmCisJZ2l0IGRpZmYgLS1udW1zdGF0ICQqIEhFQUReID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKK30KKworY2hlY2tfc3RhdCgpIHsKK2V4cGVjdD0kMTsgc2hpZnQKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKyAkZXhwZWN0IHwgMSArCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tc3RhdCAkKiIgIgorCWdpdCBkaWZmIC0tc3RhdCAkKiBIRUFEXiA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorIgorfQorCitjaGVja19yYXcoKSB7CitleHBlY3Q9JDE7IHNoaWZ0CitjYXQgPmV4cGVjdGVkIDw8RU9GCis6MDAwMDAwIDEwMDY0NCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDI1YzA1ZWYzNjM5ZDJkMjcwZTdmZTc2NWE2NzY2OGYwOTgwOTJiYzUgQQkkZXhwZWN0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tcmF3ICQqIiAiCisJZ2l0IGRpZmYgLS1uby1hYmJyZXYgLS1yYXcgJCogSEVBRF4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorfQorCitmb3IgdHlwZSBpbiBkaWZmIG51bXN0YXQgc3RhdCByYXc7IGRvCisJY2hlY2tfJHR5cGUgZmlsZTIgLS1yZWxhdGl2ZT1zdWJkaXIvCisJY2hlY2tfJHR5cGUgZmlsZTIgLS1yZWxhdGl2ZT1zdWJkaXIKKwljaGVja18kdHlwZSBkaXIvZmlsZTIgLS1yZWxhdGl2ZT1zdWIKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQ2LWRpZmYtdW5tZXJnZWQuc2ggYi90L3Q0MDQ2LWRpZmYtdW5tZXJnZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDBmMTQ0NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNDYtZGlmZi11bm1lcmdlZC5zaApAQCAtMCwwICsxLDg3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZiB3aXRoIHVubWVyZ2VkIGluZGV4IGVudHJpZXMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gMCAxIDIgMworCWRvCisJCWJsb2I9JChlY2hvICRpIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJCWV2YWwgImJsb2IkaT0kYmxvYiIgJiYKKwkJZXZhbCAibSRpPVwiMTAwNjQ0IFwkYmxvYiRpICRpXCIiIHx8IHJldHVybiAxCisJZG9uZSAmJgorCXBhdGhzPSAmJgorCWZvciBiIGluIG8geAorCWRvCisJCWZvciBvIGluIG8geAorCQlkbworCQkJZm9yIHQgaW4gbyB4CisJCQlkbworCQkJCXBhdGg9IiRiJG8kdCIgJiYKKwkJCQljYXNlICIkcGF0aCIgaW4gb29vKSBjb250aW51ZSA7OyBlc2FjCisJCQkJcGF0aHM9IiRwYXRocyRwYXRoICIgJiYKKwkJCQlwPSIJJHBhdGgiICYmCisJCQkJY2FzZSAiJGIiIGluIHgpIGVjaG8gIiRtMSRwIiA7OyBlc2FjICYmCisJCQkJY2FzZSAiJG8iIGluIHgpIGVjaG8gIiRtMiRwIiA7OyBlc2FjICYmCisJCQkJY2FzZSAiJHQiIGluIHgpIGVjaG8gIiRtMyRwIiA7OyBlc2FjIHx8CisJCQkJcmV0dXJuIDEKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUgPmxzLWZpbGVzLXMuZXhwZWN0ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGxzLWZpbGVzLXMuZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1zID5scy1maWxlcy1zLmFjdHVhbCAmJgorCXRlc3RfY21wIGxzLWZpbGVzLXMuZXhwZWN0IGxzLWZpbGVzLXMuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgLTAnICcKKwlmb3IgcGF0aCBpbiAkcGF0aHMKKwlkbworCQk+IiRwYXRoIiAmJgorCQllY2hvICI6MDAwMDAwIDEwMDY0NCAkX3o0MCAkX3o0MCBVCSRwYXRoIgorCWRvbmUgPmRpZmYtZmlsZXMtMC5leHBlY3QgJiYKKwlnaXQgZGlmZi1maWxlcyAtMCA+ZGlmZi1maWxlcy0wLmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmYtZmlsZXMtMC5leHBlY3QgZGlmZi1maWxlcy0wLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIC0xJyAnCisJZm9yIHBhdGggaW4gJHBhdGhzCisJZG8KKwkJPiIkcGF0aCIgJiYKKwkJZWNobyAiOjAwMDAwMCAxMDA2NDQgJF96NDAgJF96NDAgVQkkcGF0aCIgJiYKKwkJY2FzZSAiJHBhdGgiIGluCisJCXg/PykgZWNobyAiOjEwMDY0NCAxMDA2NDQgJGJsb2IxICRfejQwIE0JJHBhdGgiCisJCWVzYWMKKwlkb25lID5kaWZmLWZpbGVzLTEuZXhwZWN0ICYmCisJZ2l0IGRpZmYtZmlsZXMgLTEgPmRpZmYtZmlsZXMtMS5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBkaWZmLWZpbGVzLTEuZXhwZWN0IGRpZmYtZmlsZXMtMS5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1maWxlcyAtMicgJworCWZvciBwYXRoIGluICRwYXRocworCWRvCisJCT4iJHBhdGgiICYmCisJCWVjaG8gIjowMDAwMDAgMTAwNjQ0ICRfejQwICRfejQwIFUJJHBhdGgiICYmCisJCWNhc2UgIiRwYXRoIiBpbgorCQk/eD8pIGVjaG8gIjoxMDA2NDQgMTAwNjQ0ICRibG9iMiAkX3o0MCBNCSRwYXRoIgorCQllc2FjCisJZG9uZSA+ZGlmZi1maWxlcy0yLmV4cGVjdCAmJgorCWdpdCBkaWZmLWZpbGVzIC0yID5kaWZmLWZpbGVzLTIuYWN0dWFsICYmCisJdGVzdF9jbXAgZGlmZi1maWxlcy0yLmV4cGVjdCBkaWZmLWZpbGVzLTIuYWN0dWFsICYmCisJZ2l0IGRpZmYtZmlsZXMgPmRpZmYtZmlsZXMtZGVmYXVsdC0yLmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmYtZmlsZXMtMi5leHBlY3QgZGlmZi1maWxlcy1kZWZhdWx0LTIuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgLTMnICcKKwlmb3IgcGF0aCBpbiAkcGF0aHMKKwlkbworCQk+IiRwYXRoIiAmJgorCQllY2hvICI6MDAwMDAwIDEwMDY0NCAkX3o0MCAkX3o0MCBVCSRwYXRoIiAmJgorCQljYXNlICIkcGF0aCIgaW4KKwkJPz94KSBlY2hvICI6MTAwNjQ0IDEwMDY0NCAkYmxvYjMgJF96NDAgTQkkcGF0aCIKKwkJZXNhYworCWRvbmUgPmRpZmYtZmlsZXMtMy5leHBlY3QgJiYKKwlnaXQgZGlmZi1maWxlcyAtMyA+ZGlmZi1maWxlcy0zLmFjdHVhbCAmJgorCXRlc3RfY21wIGRpZmYtZmlsZXMtMy5leHBlY3QgZGlmZi1maWxlcy0zLmFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNDctZGlmZi1kaXJzdGF0LnNoIGIvdC90NDA0Ny1kaWZmLWRpcnN0YXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2I4Yjc5MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNDctZGlmZi1kaXJzdGF0LnNoCkBAIC0wLDAgKzEsOTkwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZiAtLWRpcnN0YXQgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKworIyBzZXQgdXAgdHdvIGNvbW1pdHMgd2hlcmUgdGhlIHNlY29uZCBjb21taXQgaGFzIHRoZXNlIGZpbGVzCisjICgxMCBsaW5lcyBpbiBlYWNoIGZpbGUpOgorIworIyAgIHVuY2hhbmdlZC90ZXh0ICAgICAgICAgICAodW5jaGFuZ2VkIGZyb20gMXN0IGNvbW1pdCkKKyMgICBjaGFuZ2VkL3RleHQgICAgICAgICAgICAgKGNoYW5nZWQgMXN0IGxpbmUpCisjICAgcmVhcnJhbmdlZC90ZXh0ICAgICAgICAgIChzd2FwcGVkIDFzdCBhbmQgMm5kIGxpbmUpCisjICAgZHN0L2NvcHkvdW5jaGFuZ2VkL3RleHQgIChjb3BpZWQgZnJvbSBzcmMvY29weS91bmNoYW5nZWQvdGV4dCwgdW5jaGFuZ2VkKQorIyAgIGRzdC9jb3B5L2NoYW5nZWQvdGV4dCAgICAoY29waWVkIGZyb20gc3JjL2NvcHkvY2hhbmdlZC90ZXh0LCBjaGFuZ2VkKQorIyAgIGRzdC9jb3B5L3JlYXJyYW5nZWQvdGV4dCAoY29waWVkIGZyb20gc3JjL2NvcHkvcmVhcnJhbmdlZC90ZXh0LCByZWFycmFuZ2VkKQorIyAgIGRzdC9tb3ZlL3VuY2hhbmdlZC90ZXh0ICAobW92ZWQgZnJvbSBzcmMvbW92ZS91bmNoYW5nZWQvdGV4dCwgdW5jaGFuZ2VkKQorIyAgIGRzdC9tb3ZlL2NoYW5nZWQvdGV4dCAgICAobW92ZWQgZnJvbSBzcmMvbW92ZS9jaGFuZ2VkL3RleHQsIGNoYW5nZWQpCisjICAgZHN0L21vdmUvcmVhcnJhbmdlZC90ZXh0IChtb3ZlZCBmcm9tIHNyYy9tb3ZlL3JlYXJyYW5nZWQvdGV4dCwgcmVhcnJhbmdlZCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlta2RpciB1bmNoYW5nZWQgJiYKKwlta2RpciBjaGFuZ2VkICYmCisJbWtkaXIgcmVhcnJhbmdlZCAmJgorCW1rZGlyIHNyYyAmJgorCW1rZGlyIHNyYy9jb3B5ICYmCisJbWtkaXIgc3JjL2NvcHkvdW5jaGFuZ2VkICYmCisJbWtkaXIgc3JjL2NvcHkvY2hhbmdlZCAmJgorCW1rZGlyIHNyYy9jb3B5L3JlYXJyYW5nZWQgJiYKKwlta2RpciBzcmMvbW92ZSAmJgorCW1rZGlyIHNyYy9tb3ZlL3VuY2hhbmdlZCAmJgorCW1rZGlyIHNyYy9tb3ZlL2NoYW5nZWQgJiYKKwlta2RpciBzcmMvbW92ZS9yZWFycmFuZ2VkICYmCisJY2F0IDw8RU9GID51bmNoYW5nZWQvdGV4dCAmJgordW5jaGFuZ2VkICAgICAgIGxpbmUgIzAKK3VuY2hhbmdlZCAgICAgICBsaW5lICMxCit1bmNoYW5nZWQgICAgICAgbGluZSAjMgordW5jaGFuZ2VkICAgICAgIGxpbmUgIzMKK3VuY2hhbmdlZCAgICAgICBsaW5lICM0Cit1bmNoYW5nZWQgICAgICAgbGluZSAjNQordW5jaGFuZ2VkICAgICAgIGxpbmUgIzYKK3VuY2hhbmdlZCAgICAgICBsaW5lICM3Cit1bmNoYW5nZWQgICAgICAgbGluZSAjOAordW5jaGFuZ2VkICAgICAgIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+Y2hhbmdlZC90ZXh0ICYmCitjaGFuZ2VkICAgICAgICAgbGluZSAjMAorY2hhbmdlZCAgICAgICAgIGxpbmUgIzEKK2NoYW5nZWQgICAgICAgICBsaW5lICMyCitjaGFuZ2VkICAgICAgICAgbGluZSAjMworY2hhbmdlZCAgICAgICAgIGxpbmUgIzQKK2NoYW5nZWQgICAgICAgICBsaW5lICM1CitjaGFuZ2VkICAgICAgICAgbGluZSAjNgorY2hhbmdlZCAgICAgICAgIGxpbmUgIzcKK2NoYW5nZWQgICAgICAgICBsaW5lICM4CitjaGFuZ2VkICAgICAgICAgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5yZWFycmFuZ2VkL3RleHQgJiYKK3JlYXJyYW5nZWQgICAgICBsaW5lICMwCityZWFycmFuZ2VkICAgICAgbGluZSAjMQorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzIKK3JlYXJyYW5nZWQgICAgICBsaW5lICMzCityZWFycmFuZ2VkICAgICAgbGluZSAjNAorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzUKK3JlYXJyYW5nZWQgICAgICBsaW5lICM2CityZWFycmFuZ2VkICAgICAgbGluZSAjNworcmVhcnJhbmdlZCAgICAgIGxpbmUgIzgKK3JlYXJyYW5nZWQgICAgICBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPnNyYy9jb3B5L3VuY2hhbmdlZC90ZXh0ICYmCitjb3B5ICB1bmNoYW5nZWQgbGluZSAjMAorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzEKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICMyCitjb3B5ICB1bmNoYW5nZWQgbGluZSAjMworY29weSAgdW5jaGFuZ2VkIGxpbmUgIzQKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM1Citjb3B5ICB1bmNoYW5nZWQgbGluZSAjNgorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzcKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM4Citjb3B5ICB1bmNoYW5nZWQgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5zcmMvY29weS9jaGFuZ2VkL3RleHQgJiYKK2NvcHkgICAgY2hhbmdlZCBsaW5lICMwCitjb3B5ICAgIGNoYW5nZWQgbGluZSAjMQorY29weSAgICBjaGFuZ2VkIGxpbmUgIzIKK2NvcHkgICAgY2hhbmdlZCBsaW5lICMzCitjb3B5ICAgIGNoYW5nZWQgbGluZSAjNAorY29weSAgICBjaGFuZ2VkIGxpbmUgIzUKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM2Citjb3B5ICAgIGNoYW5nZWQgbGluZSAjNworY29weSAgICBjaGFuZ2VkIGxpbmUgIzgKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPnNyYy9jb3B5L3JlYXJyYW5nZWQvdGV4dCAmJgorY29weSByZWFycmFuZ2VkIGxpbmUgIzAKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICMxCitjb3B5IHJlYXJyYW5nZWQgbGluZSAjMgorY29weSByZWFycmFuZ2VkIGxpbmUgIzMKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM0Citjb3B5IHJlYXJyYW5nZWQgbGluZSAjNQorY29weSByZWFycmFuZ2VkIGxpbmUgIzYKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM3Citjb3B5IHJlYXJyYW5nZWQgbGluZSAjOAorY29weSByZWFycmFuZ2VkIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+c3JjL21vdmUvdW5jaGFuZ2VkL3RleHQgJiYKK21vdmUgIHVuY2hhbmdlZCBsaW5lICMwCittb3ZlICB1bmNoYW5nZWQgbGluZSAjMQorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzIKK21vdmUgIHVuY2hhbmdlZCBsaW5lICMzCittb3ZlICB1bmNoYW5nZWQgbGluZSAjNAorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzUKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM2Cittb3ZlICB1bmNoYW5nZWQgbGluZSAjNworbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzgKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPnNyYy9tb3ZlL2NoYW5nZWQvdGV4dCAmJgorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzAKK21vdmUgICAgY2hhbmdlZCBsaW5lICMxCittb3ZlICAgIGNoYW5nZWQgbGluZSAjMgorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzMKK21vdmUgICAgY2hhbmdlZCBsaW5lICM0Cittb3ZlICAgIGNoYW5nZWQgbGluZSAjNQorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzYKK21vdmUgICAgY2hhbmdlZCBsaW5lICM3Cittb3ZlICAgIGNoYW5nZWQgbGluZSAjOAorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+c3JjL21vdmUvcmVhcnJhbmdlZC90ZXh0ICYmCittb3ZlIHJlYXJyYW5nZWQgbGluZSAjMAorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzEKK21vdmUgcmVhcnJhbmdlZCBsaW5lICMyCittb3ZlIHJlYXJyYW5nZWQgbGluZSAjMworbW92ZSByZWFycmFuZ2VkIGxpbmUgIzQKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM1Cittb3ZlIHJlYXJyYW5nZWQgbGluZSAjNgorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzcKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM4Cittb3ZlIHJlYXJyYW5nZWQgbGluZSAjOQorRU9GCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCIgJiYKKwlta2RpciBkc3QgJiYKKwlta2RpciBkc3QvY29weSAmJgorCW1rZGlyIGRzdC9jb3B5L3VuY2hhbmdlZCAmJgorCW1rZGlyIGRzdC9jb3B5L2NoYW5nZWQgJiYKKwlta2RpciBkc3QvY29weS9yZWFycmFuZ2VkICYmCisJbWtkaXIgZHN0L21vdmUgJiYKKwlta2RpciBkc3QvbW92ZS91bmNoYW5nZWQgJiYKKwlta2RpciBkc3QvbW92ZS9jaGFuZ2VkICYmCisJbWtkaXIgZHN0L21vdmUvcmVhcnJhbmdlZCAmJgorCWNhdCA8PEVPRiA+Y2hhbmdlZC90ZXh0ICYmCitDSEFOR0VEIFhYWFhYWFggbGluZSAjMAorY2hhbmdlZCAgICAgICAgIGxpbmUgIzEKK2NoYW5nZWQgICAgICAgICBsaW5lICMyCitjaGFuZ2VkICAgICAgICAgbGluZSAjMworY2hhbmdlZCAgICAgICAgIGxpbmUgIzQKK2NoYW5nZWQgICAgICAgICBsaW5lICM1CitjaGFuZ2VkICAgICAgICAgbGluZSAjNgorY2hhbmdlZCAgICAgICAgIGxpbmUgIzcKK2NoYW5nZWQgICAgICAgICBsaW5lICM4CitjaGFuZ2VkICAgICAgICAgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5yZWFycmFuZ2VkL3RleHQgJiYKK3JlYXJyYW5nZWQgICAgICBsaW5lICMxCityZWFycmFuZ2VkICAgICAgbGluZSAjMAorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzIKK3JlYXJyYW5nZWQgICAgICBsaW5lICMzCityZWFycmFuZ2VkICAgICAgbGluZSAjNAorcmVhcnJhbmdlZCAgICAgIGxpbmUgIzUKK3JlYXJyYW5nZWQgICAgICBsaW5lICM2CityZWFycmFuZ2VkICAgICAgbGluZSAjNworcmVhcnJhbmdlZCAgICAgIGxpbmUgIzgKK3JlYXJyYW5nZWQgICAgICBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPmRzdC9jb3B5L3VuY2hhbmdlZC90ZXh0ICYmCitjb3B5ICB1bmNoYW5nZWQgbGluZSAjMAorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzEKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICMyCitjb3B5ICB1bmNoYW5nZWQgbGluZSAjMworY29weSAgdW5jaGFuZ2VkIGxpbmUgIzQKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM1Citjb3B5ICB1bmNoYW5nZWQgbGluZSAjNgorY29weSAgdW5jaGFuZ2VkIGxpbmUgIzcKK2NvcHkgIHVuY2hhbmdlZCBsaW5lICM4Citjb3B5ICB1bmNoYW5nZWQgbGluZSAjOQorRU9GCisJY2F0IDw8RU9GID5kc3QvY29weS9jaGFuZ2VkL3RleHQgJiYKK2NvcHkgWFhYQ0hBTkdFRCBsaW5lICMwCitjb3B5ICAgIGNoYW5nZWQgbGluZSAjMQorY29weSAgICBjaGFuZ2VkIGxpbmUgIzIKK2NvcHkgICAgY2hhbmdlZCBsaW5lICMzCitjb3B5ICAgIGNoYW5nZWQgbGluZSAjNAorY29weSAgICBjaGFuZ2VkIGxpbmUgIzUKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM2Citjb3B5ICAgIGNoYW5nZWQgbGluZSAjNworY29weSAgICBjaGFuZ2VkIGxpbmUgIzgKK2NvcHkgICAgY2hhbmdlZCBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPmRzdC9jb3B5L3JlYXJyYW5nZWQvdGV4dCAmJgorY29weSByZWFycmFuZ2VkIGxpbmUgIzEKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICMwCitjb3B5IHJlYXJyYW5nZWQgbGluZSAjMgorY29weSByZWFycmFuZ2VkIGxpbmUgIzMKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM0Citjb3B5IHJlYXJyYW5nZWQgbGluZSAjNQorY29weSByZWFycmFuZ2VkIGxpbmUgIzYKK2NvcHkgcmVhcnJhbmdlZCBsaW5lICM3Citjb3B5IHJlYXJyYW5nZWQgbGluZSAjOAorY29weSByZWFycmFuZ2VkIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+ZHN0L21vdmUvdW5jaGFuZ2VkL3RleHQgJiYKK21vdmUgIHVuY2hhbmdlZCBsaW5lICMwCittb3ZlICB1bmNoYW5nZWQgbGluZSAjMQorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzIKK21vdmUgIHVuY2hhbmdlZCBsaW5lICMzCittb3ZlICB1bmNoYW5nZWQgbGluZSAjNAorbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzUKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM2Cittb3ZlICB1bmNoYW5nZWQgbGluZSAjNworbW92ZSAgdW5jaGFuZ2VkIGxpbmUgIzgKK21vdmUgIHVuY2hhbmdlZCBsaW5lICM5CitFT0YKKwljYXQgPDxFT0YgPmRzdC9tb3ZlL2NoYW5nZWQvdGV4dCAmJgorbW92ZSBYWFhDSEFOR0VEIGxpbmUgIzAKK21vdmUgICAgY2hhbmdlZCBsaW5lICMxCittb3ZlICAgIGNoYW5nZWQgbGluZSAjMgorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzMKK21vdmUgICAgY2hhbmdlZCBsaW5lICM0Cittb3ZlICAgIGNoYW5nZWQgbGluZSAjNQorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzYKK21vdmUgICAgY2hhbmdlZCBsaW5lICM3Cittb3ZlICAgIGNoYW5nZWQgbGluZSAjOAorbW92ZSAgICBjaGFuZ2VkIGxpbmUgIzkKK0VPRgorCWNhdCA8PEVPRiA+ZHN0L21vdmUvcmVhcnJhbmdlZC90ZXh0ICYmCittb3ZlIHJlYXJyYW5nZWQgbGluZSAjMQorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzAKK21vdmUgcmVhcnJhbmdlZCBsaW5lICMyCittb3ZlIHJlYXJyYW5nZWQgbGluZSAjMworbW92ZSByZWFycmFuZ2VkIGxpbmUgIzQKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM1Cittb3ZlIHJlYXJyYW5nZWQgbGluZSAjNgorbW92ZSByZWFycmFuZ2VkIGxpbmUgIzcKK21vdmUgcmVhcnJhbmdlZCBsaW5lICM4Cittb3ZlIHJlYXJyYW5nZWQgbGluZSAjOQorRU9GCisJZ2l0IGFkZCAuICYmCisJZ2l0IHJtIC1yIHNyYy9tb3ZlL3VuY2hhbmdlZCAmJgorCWdpdCBybSAtciBzcmMvbW92ZS9jaGFuZ2VkICYmCisJZ2l0IHJtIC1yIHNyYy9tb3ZlL3JlYXJyYW5nZWQgJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2VzIgorJworCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX3N0YXQKKzEJMQljaGFuZ2VkL3RleHQKKzEwCTAJZHN0L2NvcHkvY2hhbmdlZC90ZXh0CisxMAkwCWRzdC9jb3B5L3JlYXJyYW5nZWQvdGV4dAorMTAJMAlkc3QvY29weS91bmNoYW5nZWQvdGV4dAorMTAJMAlkc3QvbW92ZS9jaGFuZ2VkL3RleHQKKzEwCTAJZHN0L21vdmUvcmVhcnJhbmdlZC90ZXh0CisxMAkwCWRzdC9tb3ZlL3VuY2hhbmdlZC90ZXh0CisxCTEJcmVhcnJhbmdlZC90ZXh0CiswCTEwCXNyYy9tb3ZlL2NoYW5nZWQvdGV4dAorMAkxMAlzcmMvbW92ZS9yZWFycmFuZ2VkL3RleHQKKzAJMTAJc3JjL21vdmUvdW5jaGFuZ2VkL3RleHQKK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX3N0YXRfTQorMQkxCWNoYW5nZWQvdGV4dAorMTAJMAlkc3QvY29weS9jaGFuZ2VkL3RleHQKKzEwCTAJZHN0L2NvcHkvcmVhcnJhbmdlZC90ZXh0CisxMAkwCWRzdC9jb3B5L3VuY2hhbmdlZC90ZXh0CisxCTEJe3NyYyA9PiBkc3R9L21vdmUvY2hhbmdlZC90ZXh0CisxCTEJe3NyYyA9PiBkc3R9L21vdmUvcmVhcnJhbmdlZC90ZXh0CiswCTAJe3NyYyA9PiBkc3R9L21vdmUvdW5jaGFuZ2VkL3RleHQKKzEJMQlyZWFycmFuZ2VkL3RleHQKK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX3N0YXRfQ0MKKzEJMQljaGFuZ2VkL3RleHQKKzEJMQl7c3JjID0+IGRzdH0vY29weS9jaGFuZ2VkL3RleHQKKzEJMQl7c3JjID0+IGRzdH0vY29weS9yZWFycmFuZ2VkL3RleHQKKzAJMAl7c3JjID0+IGRzdH0vY29weS91bmNoYW5nZWQvdGV4dAorMQkxCXtzcmMgPT4gZHN0fS9tb3ZlL2NoYW5nZWQvdGV4dAorMQkxCXtzcmMgPT4gZHN0fS9tb3ZlL3JlYXJyYW5nZWQvdGV4dAorMAkwCXtzcmMgPT4gZHN0fS9tb3ZlL3VuY2hhbmdlZC90ZXh0CisxCTEJcmVhcnJhbmdlZC90ZXh0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FuaXR5IGNoZWNrIHNldHVwICgtLW51bXN0YXQpJyAnCisJZ2l0IGRpZmYgLS1udW1zdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9zdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfc3RhdCBhY3R1YWxfZGlmZl9zdGF0ICYmCisJZ2l0IGRpZmYgLS1udW1zdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9zdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9zdGF0X00gYWN0dWFsX2RpZmZfc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1udW1zdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9zdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfc3RhdF9DQyBhY3R1YWxfZGlmZl9zdGF0X0NDCisnCisKKyMgY2hhbmdlZC90ZXh0IGFuZCByZWFycmFuZ2VkL3RleHQgZmFsbHMgYmVsb3cgZGVmYXVsdCAzJSB0aHJlc2hvbGQKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAxMC44JSBkc3QvY29weS9jaGFuZ2VkLworICAxMC44JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxMC44JSBkc3QvY29weS91bmNoYW5nZWQvCisgIDEwLjglIGRzdC9tb3ZlL2NoYW5nZWQvCisgIDEwLjglIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDEwLjglIGRzdC9tb3ZlL3VuY2hhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvY2hhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvcmVhcnJhbmdlZC8KKyAgMTAuOCUgc3JjL21vdmUvdW5jaGFuZ2VkLworRU9GCisKKyMgcmVhcnJhbmdlZC90ZXh0IGZhbGxzIGJlbG93IGRlZmF1bHQgMyUgdGhyZXNob2xkCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfTQorICAgNS44JSBjaGFuZ2VkLworICAyOS4zJSBkc3QvY29weS9jaGFuZ2VkLworICAyOS4zJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAyOS4zJSBkc3QvY29weS91bmNoYW5nZWQvCisgICA1LjglIGRzdC9tb3ZlL2NoYW5nZWQvCitFT0YKKworIyByZWFycmFuZ2VkL3RleHQgZmFsbHMgYmVsb3cgZGVmYXVsdCAzJSB0aHJlc2hvbGQKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAzMi42JSBjaGFuZ2VkLworICAzMi42JSBkc3QvY29weS9jaGFuZ2VkLworICAzMi42JSBkc3QvbW92ZS9jaGFuZ2VkLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhcmlvdXMgd2F5cyB0byBtaXNzcGVsbCAtLWRpcnN0YXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAtLWRpcnN0YXQxMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93IC0tZGlyc3RhdDEwLGZpbGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3cgLVg9MjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAtWD0yMCxjdW11bGF0aXZlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbmlsbGEgLS1kaXJzdGF0JyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbmlsbGEgLVgnICcKKwlnaXQgZGlmZiAtWCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC1YIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLVggLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgZGVmYXVsdHM6IC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMycgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCBkZWZhdWx0czogLVhjaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMycgJworCWdpdCBkaWZmIC1YY2hhbmdlcyxub25jdW11bGF0aXZlLDMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtWGNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLVhjaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXRlciBvcHRpb25zIG92ZXJyaWRlIGVhcmxpZXIgb3B0aW9uczonICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsMTAsY3VtdWxhdGl2ZSxjaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcywxMCxjdW11bGF0aXZlLGNoYW5nZXMsbm9uY3VtdWxhdGl2ZSwzIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLDEwLGN1bXVsYXRpdmUsY2hhbmdlcyxub25jdW11bGF0aXZlLDMgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMgLS1kaXJzdGF0PTEwIC0tZGlyc3RhdD1jdW11bGF0aXZlIC0tZGlyc3RhdD1jaGFuZ2VzIC0tZGlyc3RhdD1ub25jdW11bGF0aXZlIC1YMyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyAtLWRpcnN0YXQ9MTAgLS1kaXJzdGF0PWN1bXVsYXRpdmUgLS1kaXJzdGF0PWNoYW5nZXMgLS1kaXJzdGF0PW5vbmN1bXVsYXRpdmUgLVgzIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzIC0tZGlyc3RhdD0xMCAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSAtLWRpcnN0YXQ9Y2hhbmdlcyAtLWRpcnN0YXQ9bm9uY3VtdWxhdGl2ZSAtWDMgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWRlZmF1bHRzIGluIGNvbmZpZyBvdmVycmlkZGVuIGJ5IGV4cGxpY2l0IGRlZmF1bHRzIG9uIGNvbW1hbmQgbGluZScgJworCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSw1MCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSw1MCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSw1MCBkaWZmIC0tZGlyc3RhdD1jaGFuZ2VzLG5vbmN1bXVsYXRpdmUsMyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXQKKyAgIDIuMSUgY2hhbmdlZC8KKyAgMTAuOCUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTAuOCUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTAuOCUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICAxMC44JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxMC44JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxMC44JSBkc3QvbW92ZS91bmNoYW5nZWQvCisgICAwLjAlIHJlYXJyYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL2NoYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL3JlYXJyYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL3VuY2hhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfTQorICAgNS44JSBjaGFuZ2VkLworICAyOS4zJSBkc3QvY29weS9jaGFuZ2VkLworICAyOS4zJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAyOS4zJSBkc3QvY29weS91bmNoYW5nZWQvCisgICA1LjglIGRzdC9tb3ZlL2NoYW5nZWQvCisgICAwLjElIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgICAwLjElIHJlYXJyYW5nZWQvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X0NDCisgIDMyLjYlIGNoYW5nZWQvCisgIDMyLjYlIGRzdC9jb3B5L2NoYW5nZWQvCisgICAwLjYlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDMyLjYlIGRzdC9tb3ZlL2NoYW5nZWQvCisgICAwLjYlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgICAwLjYlIHJlYXJyYW5nZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PTAnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9MCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD0wIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLVgwJyAnCisJZ2l0IGRpZmYgLVgwIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLVgwIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLVgwIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZGlyc3RhdD0wJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wIGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAgMi4xJSBjaGFuZ2VkLworICAxMC44JSBkc3QvY29weS9jaGFuZ2VkLworICAxMC44JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxMC44JSBkc3QvY29weS91bmNoYW5nZWQvCisgIDMyLjUlIGRzdC9jb3B5LworICAxMC44JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxMC44JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxMC44JSBkc3QvbW92ZS91bmNoYW5nZWQvCisgIDMyLjUlIGRzdC9tb3ZlLworICA2NS4xJSBkc3QvCisgICAwLjAlIHJlYXJyYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL2NoYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL3JlYXJyYW5nZWQvCisgIDEwLjglIHNyYy9tb3ZlL3VuY2hhbmdlZC8KKyAgMzIuNSUgc3JjL21vdmUvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgIDUuOCUgY2hhbmdlZC8KKyAgMjkuMyUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMjkuMyUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMjkuMyUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICA4OC4wJSBkc3QvY29weS8KKyAgIDUuOCUgZHN0L21vdmUvY2hhbmdlZC8KKyAgIDAuMSUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgIDUuOSUgZHN0L21vdmUvCisgIDk0LjAlIGRzdC8KKyAgIDAuMSUgcmVhcnJhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMzIuNiUgY2hhbmdlZC8KKyAgMzIuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgIDAuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMzMuMyUgZHN0L2NvcHkvCisgIDMyLjYlIGRzdC9tb3ZlL2NoYW5nZWQvCisgICAwLjYlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDMzLjMlIGRzdC9tb3ZlLworICA2Ni42JSBkc3QvCisgICAwLjYlIHJlYXJyYW5nZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PTAgLS1jdW11bGF0aXZlJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAgLS1jdW11bGF0aXZlIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAgLS1jdW11bGF0aXZlIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAgLS1jdW11bGF0aXZlIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD0wLGN1bXVsYXRpdmUnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9MCxjdW11bGF0aXZlIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PTAsY3VtdWxhdGl2ZSAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD0wLGN1bXVsYXRpdmUgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLVgwLGN1bXVsYXRpdmUnICcKKwlnaXQgZGlmZiAtWDAsY3VtdWxhdGl2ZSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC1YMCxjdW11bGF0aXZlIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLVgwLGN1bXVsYXRpdmUgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PTAsY3VtdWxhdGl2ZScgJworCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MCxjdW11bGF0aXZlIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wLGN1bXVsYXRpdmUgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAsY3VtdWxhdGl2ZSBkaWZmIC0tZGlyc3RhdCAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmRpcnN0YXQ9MCAmIC0tZGlyc3RhdD1jdW11bGF0aXZlJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wIGRpZmYgLS1kaXJzdGF0PWN1bXVsYXRpdmUgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTAgZGlmZiAtLWRpcnN0YXQ9Y3VtdWxhdGl2ZSAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MCBkaWZmIC0tZGlyc3RhdD1jdW11bGF0aXZlIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAgOS4wJSBjaGFuZ2VkLworICAgOS4wJSBkc3QvY29weS9jaGFuZ2VkLworICAgOS4wJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAgOS4wJSBkc3QvY29weS91bmNoYW5nZWQvCisgICA5LjAlIGRzdC9tb3ZlL2NoYW5nZWQvCisgICA5LjAlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgICA5LjAlIGRzdC9tb3ZlL3VuY2hhbmdlZC8KKyAgIDkuMCUgcmVhcnJhbmdlZC8KKyAgIDkuMCUgc3JjL21vdmUvY2hhbmdlZC8KKyAgIDkuMCUgc3JjL21vdmUvcmVhcnJhbmdlZC8KKyAgIDkuMCUgc3JjL21vdmUvdW5jaGFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9NCisgIDE0LjIlIGNoYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTQuMiUgcmVhcnJhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMTYuNiUgY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTYuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTYuNiUgcmVhcnJhbmdlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQtYnktZmlsZScgJworCWdpdCBkaWZmIC0tZGlyc3RhdC1ieS1maWxlIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGUgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQtYnktZmlsZSAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQ9ZmlsZXMnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PWZpbGVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1maWxlcyBkaWZmIC0tZGlyc3RhdCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZmlsZXMgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWZpbGVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAyNy4yJSBkc3QvY29weS8KKyAgMjcuMiUgZHN0L21vdmUvCisgIDI3LjIlIHNyYy9tb3ZlLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9NCisgIDE0LjIlIGNoYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDE0LjIlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTQuMiUgcmVhcnJhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMTYuNiUgY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTYuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTYuNiUgcmVhcnJhbmdlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQtYnktZmlsZT0xMCcgJworCWdpdCBkaWZmIC0tZGlyc3RhdC1ieS1maWxlPTEwIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGU9MTAgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQtYnktZmlsZT0xMCAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRpcnN0YXQ9ZmlsZXMsMTAnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsMTAgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsMTAgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsMTAgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PTEwLGZpbGVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xMCxmaWxlcyBkaWZmIC0tZGlyc3RhdCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MTAsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTEwLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAgOS4wJSBjaGFuZ2VkLworICAgOS4wJSBkc3QvY29weS9jaGFuZ2VkLworICAgOS4wJSBkc3QvY29weS9yZWFycmFuZ2VkLworICAgOS4wJSBkc3QvY29weS91bmNoYW5nZWQvCisgIDI3LjIlIGRzdC9jb3B5LworICAgOS4wJSBkc3QvbW92ZS9jaGFuZ2VkLworICAgOS4wJSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAgOS4wJSBkc3QvbW92ZS91bmNoYW5nZWQvCisgIDI3LjIlIGRzdC9tb3ZlLworICA1NC41JSBkc3QvCisgICA5LjAlIHJlYXJyYW5nZWQvCisgICA5LjAlIHNyYy9tb3ZlL2NoYW5nZWQvCisgICA5LjAlIHNyYy9tb3ZlL3JlYXJyYW5nZWQvCisgICA5LjAlIHNyYy9tb3ZlL3VuY2hhbmdlZC8KKyAgMjcuMiUgc3JjL21vdmUvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgMTQuMiUgY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICA0Mi44JSBkc3QvY29weS8KKyAgMTQuMiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMjguNSUgZHN0L21vdmUvCisgIDcxLjQlIGRzdC8KKyAgMTQuMiUgcmVhcnJhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMTYuNiUgY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMzMuMyUgZHN0L2NvcHkvCisgIDE2LjYlIGRzdC9tb3ZlL2NoYW5nZWQvCisgIDE2LjYlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDMzLjMlIGRzdC9tb3ZlLworICA2Ni42JSBkc3QvCisgIDE2LjYlIHJlYXJyYW5nZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0LWJ5LWZpbGUgLS1jdW11bGF0aXZlJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGUgLS1jdW11bGF0aXZlIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGUgLS1jdW11bGF0aXZlIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0LWJ5LWZpbGUgLS1jdW11bGF0aXZlIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZGlyc3RhdD1jdW11bGF0aXZlLGZpbGVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1jdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1jdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1jdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdAorICAyNy4yJSBkc3QvY29weS8KKyAgMjcuMiUgZHN0L21vdmUvCisgIDU0LjUlIGRzdC8KKyAgMjcuMiUgc3JjL21vdmUvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgMTQuMiUgY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMTQuMiUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICA0Mi44JSBkc3QvY29weS8KKyAgMTQuMiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTQuMiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMjguNSUgZHN0L21vdmUvCisgIDcxLjQlIGRzdC8KKyAgMTQuMiUgcmVhcnJhbmdlZC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMTYuNiUgY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMTYuNiUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMzMuMyUgZHN0L2NvcHkvCisgIDE2LjYlIGRzdC9tb3ZlL2NoYW5nZWQvCisgIDE2LjYlIGRzdC9tb3ZlL3JlYXJyYW5nZWQvCisgIDMzLjMlIGRzdC9tb3ZlLworICA2Ni42JSBkc3QvCisgIDE2LjYlIHJlYXJyYW5nZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMTAnICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwxMCBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDEwIC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMTAgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PTEwLGN1bXVsYXRpdmUsZmlsZXMnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTEwLGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTEwLGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLU0gSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfTSBhY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTEwLGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgIDI3LjIlIGRzdC9jb3B5LworICAyNy4yJSBkc3QvbW92ZS8KKyAgNTQuNSUgZHN0LworICAyNy4yJSBzcmMvbW92ZS8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfTQorICA0Mi44JSBkc3QvY29weS8KKyAgMjguNSUgZHN0L21vdmUvCisgIDcxLjQlIGRzdC8KK0VPRgorCitjYXQgPDxFT0YgPmV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MKKyAgMzMuMyUgZHN0L2NvcHkvCisgIDMzLjMlIGRzdC9tb3ZlLworICA2Ni42JSBkc3QvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMTYuNycgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDE2LjcgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwxNi43IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMTYuNyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmRpcnN0YXQ9MTYuNyxjdW11bGF0aXZlLGZpbGVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xNi43LGN1bXVsYXRpdmUsZmlsZXMgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PTE2LjcsY3VtdWxhdGl2ZSxmaWxlcyBkaWZmIC0tZGlyc3RhdCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9MTYuNyxjdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZGlyc3RhdD0xNi43MCxjdW11bGF0aXZlLGZpbGVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xNi43MCxjdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xNi43MCxjdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0xNi43MCxjdW11bGF0aXZlLGZpbGVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDI3LjInICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwyNy4yIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMjcuMiAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDI3LjIgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMjcuMDknICcKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9ZmlsZXMsY3VtdWxhdGl2ZSwyNy4wOSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1maWxlcyxjdW11bGF0aXZlLDI3LjA5IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWZpbGVzLGN1bXVsYXRpdmUsMjcuMDkgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgIDEwLjYlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDEwLjYlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDEwLjYlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvdW5jaGFuZ2VkLworICAxMC42JSBzcmMvbW92ZS9jaGFuZ2VkLworICAxMC42JSBzcmMvbW92ZS9yZWFycmFuZ2VkLworICAxMC42JSBzcmMvbW92ZS91bmNoYW5nZWQvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgIDUuMiUgY2hhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICAgNS4yJSBkc3QvbW92ZS9jaGFuZ2VkLworICAgNS4yJSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAgNS4yJSByZWFycmFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAxNi42JSBjaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9jaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxNi42JSByZWFycmFuZ2VkLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1saW5lcycgJworCWdpdCBkaWZmIC0tZGlyc3RhdD1saW5lcyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1saW5lcyAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1saW5lcyAtQyAtQyBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9DQyAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXRfQ0MgYWN0dWFsX2RpZmZfZGlyc3RhdF9DQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLmRpcnN0YXQ9bGluZXMnICcKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWxpbmVzIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1saW5lcyBkaWZmIC0tZGlyc3RhdCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCAtYyBkaWZmLmRpcnN0YXQ9bGluZXMgZGlmZiAtLWRpcnN0YXQgLUMgLUMgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MKKycKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0CisgICAyLjElIGNoYW5nZWQvCisgIDEwLjYlIGRzdC9jb3B5L2NoYW5nZWQvCisgIDEwLjYlIGRzdC9jb3B5L3JlYXJyYW5nZWQvCisgIDEwLjYlIGRzdC9jb3B5L3VuY2hhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvY2hhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvcmVhcnJhbmdlZC8KKyAgMTAuNiUgZHN0L21vdmUvdW5jaGFuZ2VkLworICAgMi4xJSByZWFycmFuZ2VkLworICAxMC42JSBzcmMvbW92ZS9jaGFuZ2VkLworICAxMC42JSBzcmMvbW92ZS9yZWFycmFuZ2VkLworICAxMC42JSBzcmMvbW92ZS91bmNoYW5nZWQvCitFT0YKKworY2F0IDw8RU9GID5leHBlY3RfZGlmZl9kaXJzdGF0X00KKyAgIDUuMiUgY2hhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvY2hhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvcmVhcnJhbmdlZC8KKyAgMjYuMyUgZHN0L2NvcHkvdW5jaGFuZ2VkLworICAgNS4yJSBkc3QvbW92ZS9jaGFuZ2VkLworICAgNS4yJSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAgNS4yJSByZWFycmFuZ2VkLworRU9GCisKK2NhdCA8PEVPRiA+ZXhwZWN0X2RpZmZfZGlyc3RhdF9DQworICAxNi42JSBjaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9jaGFuZ2VkLworICAxNi42JSBkc3QvY29weS9yZWFycmFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9jaGFuZ2VkLworICAxNi42JSBkc3QvbW92ZS9yZWFycmFuZ2VkLworICAxNi42JSByZWFycmFuZ2VkLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1saW5lcywwJyAnCisJZ2l0IGRpZmYgLS1kaXJzdGF0PWxpbmVzLDAgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0IGFjdHVhbF9kaWZmX2RpcnN0YXQgJiYKKwlnaXQgZGlmZiAtLWRpcnN0YXQ9bGluZXMsMCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9NIGFjdHVhbF9kaWZmX2RpcnN0YXRfTSAmJgorCWdpdCBkaWZmIC0tZGlyc3RhdD1saW5lcywwIC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuZGlyc3RhdD0wLGxpbmVzJyAnCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wLGxpbmVzIGRpZmYgLS1kaXJzdGF0IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wLGxpbmVzIGRpZmYgLS1kaXJzdGF0IC1NIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X00gJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD0wLGxpbmVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDICYmCisJdGVzdF9jbXAgZXhwZWN0X2RpZmZfZGlyc3RhdF9DQyBhY3R1YWxfZGlmZl9kaXJzdGF0X0NDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZGlyc3RhdD1mdXR1cmVfcGFyYW0sbGluZXMsMCBzaG91bGQgZmFpbCBsb3VkbHknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWRpcnN0YXQ9ZnV0dXJlX3BhcmFtLGxpbmVzLDAgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgMj5hY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2RlYnVnICJjYXQgYWN0dWFsX2Vycm9yIiAmJgorCXRlc3RfY21wIC9kZXYvbnVsbCBhY3R1YWxfZGlmZl9kaXJzdGF0ICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiZnV0dXJlX3BhcmFtIiBhY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJcLS1kaXJzdGF0IiBhY3R1YWxfZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1kaXJzdGF0PWR1bW15MSxjdW11bGF0aXZlLDJkdW1teSBzaG91bGQgcmVwb3J0IGJvdGggdW5yZWNvZ25pemVkIHBhcmFtZXRlcnMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWRpcnN0YXQ9ZHVtbXkxLGN1bXVsYXRpdmUsMmR1bW15IEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0IDI+YWN0dWFsX2Vycm9yICYmCisJdGVzdF9kZWJ1ZyAiY2F0IGFjdHVhbF9lcnJvciIgJiYKKwl0ZXN0X2NtcCAvZGV2L251bGwgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfaTE4bmdyZXAgLXEgImR1bW15MSIgYWN0dWFsX2Vycm9yICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiMmR1bW15IiBhY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJcLS1kaXJzdGF0IiBhY3R1YWxfZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5kaXJzdGF0PWZ1dHVyZV9wYXJhbSwwLGxpbmVzIHNob3VsZCB3YXJuLCBidXQgc3RpbGwgd29yaycgJworCWdpdCAtYyBkaWZmLmRpcnN0YXQ9ZnV0dXJlX3BhcmFtLDAsbGluZXMgZGlmZiAtLWRpcnN0YXQgSEVBRF4uLkhFQUQgPmFjdHVhbF9kaWZmX2RpcnN0YXQgMj5hY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2RlYnVnICJjYXQgYWN0dWFsX2Vycm9yIiAmJgorCXRlc3RfY21wIGV4cGVjdF9kaWZmX2RpcnN0YXQgYWN0dWFsX2RpZmZfZGlyc3RhdCAmJgorCXRlc3RfaTE4bmdyZXAgLXEgImZ1dHVyZV9wYXJhbSIgYWN0dWFsX2Vycm9yICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiZGlmZlxcLmRpcnN0YXQiIGFjdHVhbF9lcnJvciAmJgorCisJZ2l0IC1jIGRpZmYuZGlyc3RhdD1mdXR1cmVfcGFyYW0sMCxsaW5lcyBkaWZmIC0tZGlyc3RhdCAtTSBIRUFEXi4uSEVBRCA+YWN0dWFsX2RpZmZfZGlyc3RhdF9NIDI+YWN0dWFsX2Vycm9yICYmCisJdGVzdF9kZWJ1ZyAiY2F0IGFjdHVhbF9lcnJvciIgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X00gYWN0dWFsX2RpZmZfZGlyc3RhdF9NICYmCisJdGVzdF9pMThuZ3JlcCAtcSAiZnV0dXJlX3BhcmFtIiBhY3R1YWxfZXJyb3IgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJkaWZmXFwuZGlyc3RhdCIgYWN0dWFsX2Vycm9yICYmCisKKwlnaXQgLWMgZGlmZi5kaXJzdGF0PWZ1dHVyZV9wYXJhbSwwLGxpbmVzIGRpZmYgLS1kaXJzdGF0IC1DIC1DIEhFQUReLi5IRUFEID5hY3R1YWxfZGlmZl9kaXJzdGF0X0NDIDI+YWN0dWFsX2Vycm9yICYmCisJdGVzdF9kZWJ1ZyAiY2F0IGFjdHVhbF9lcnJvciIgJiYKKwl0ZXN0X2NtcCBleHBlY3RfZGlmZl9kaXJzdGF0X0NDIGFjdHVhbF9kaWZmX2RpcnN0YXRfQ0MgJiYKKwl0ZXN0X2kxOG5ncmVwIC1xICJmdXR1cmVfcGFyYW0iIGFjdHVhbF9lcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgLXEgImRpZmZcXC5kaXJzdGF0IiBhY3R1YWxfZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaG9ydHN0YXQgLS1kaXJzdGF0IHNob3VsZCBvdXRwdXQgb25seSBvbmUgZGlyc3RhdCcgJworCWdpdCBkaWZmIC0tc2hvcnRzdGF0IC0tZGlyc3RhdD1jaGFuZ2VzIEhFQUReLi5IRUFEID5vdXQgJiYKKwlncmVwICIgZHN0L2NvcHkvY2hhbmdlZC8kIiBvdXQgPmFjdHVhbF9kaWZmX3Nob3J0c3RhdF9kaXJzdGF0X2NoYW5nZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGFjdHVhbF9kaWZmX3Nob3J0c3RhdF9kaXJzdGF0X2NoYW5nZXMgJiYKKworCWdpdCBkaWZmIC0tc2hvcnRzdGF0IC0tZGlyc3RhdD1saW5lcyBIRUFEXi4uSEVBRCA+b3V0ICYmCisJZ3JlcCAiIGRzdC9jb3B5L2NoYW5nZWQvJCIgb3V0ID5hY3R1YWxfZGlmZl9zaG9ydHN0YXRfZGlyc3RhdF9saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsX2RpZmZfc2hvcnRzdGF0X2RpcnN0YXRfbGluZXMgJiYKKworCWdpdCBkaWZmIC0tc2hvcnRzdGF0IC0tZGlyc3RhdD1maWxlcyBIRUFEXi4uSEVBRCA+b3V0ICYmCisJZ3JlcCAiIGRzdC9jb3B5L2NoYW5nZWQvJCIgb3V0ID5hY3R1YWxfZGlmZl9zaG9ydHN0YXRfZGlyc3RhdF9maWxlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYWN0dWFsX2RpZmZfc2hvcnRzdGF0X2RpcnN0YXRfZmlsZXMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQ4LWRpZmYtY29tYmluZWQtYmluYXJ5LnNoIGIvdC90NDA0OC1kaWZmLWNvbWJpbmVkLWJpbmFyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44N2E4OTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDA0OC1kaWZmLWNvbWJpbmVkLWJpbmFyeS5zaApAQCAtMCwwICsxLDIxMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NvbWJpbmVkIGFuZCBtZXJnZSBkaWZmIGhhbmRsZSBiaW5hcnkgZmlsZXMgYW5kIHRleHRjb252JworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJpbmFyeSBtZXJnZSBjb25mbGljdCcgJworCWVjaG8gb25lUTEgfCBxX3RvX251bCA+YmluYXJ5ICYmCisJZ2l0IGFkZCBiaW5hcnkgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gdHdvUTIgfCBxX3RvX251bCA+YmluYXJ5ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoLWJpbmFyeSBIRUFEXiAmJgorCWVjaG8gdGhyZWVRMyB8IHFfdG9fbnVsID5iaW5hcnkgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRocmVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWVjaG8gcmVzb2x2ZWRRaG9vcmF5IHwgcV90b19udWwgPmJpbmFyeSAmJgorCWdpdCBjb21taXQgLWEgLW0gcmVzb2x2ZWQKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworcmVzb2x2ZWQKKworZGlmZiAtLWdpdCBhL2JpbmFyeSBiL2JpbmFyeQoraW5kZXggN2VhNmRlZC4uOTU2MzY5MSAxMDA2NDQKK0JpbmFyeSBmaWxlcyBhL2JpbmFyeSBhbmQgYi9iaW5hcnkgZGlmZmVyCityZXNvbHZlZAorCitkaWZmIC0tZ2l0IGEvYmluYXJ5IGIvYmluYXJ5CitpbmRleCA2MTk3NTcwLi45NTYzNjkxIDEwMDY0NAorQmluYXJ5IGZpbGVzIGEvYmluYXJ5IGFuZCBiL2JpbmFyeSBkaWZmZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtbSBpbmRpY2F0ZXMgYmluYXJ5LW5lc3MnICcKKwlnaXQgc2hvdyAtLWZvcm1hdD0lcyAtbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCityZXNvbHZlZAorCitkaWZmIC0tY29tYmluZWQgYmluYXJ5CitpbmRleCA3ZWE2ZGVkLDYxOTc1NzAuLjk1NjM2OTEKK0JpbmFyeSBmaWxlcyBkaWZmZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtYyBpbmRpY2F0ZXMgYmluYXJ5LW5lc3MnICcKKwlnaXQgc2hvdyAtLWZvcm1hdD0lcyAtYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCityZXNvbHZlZAorCitkaWZmIC0tY2MgYmluYXJ5CitpbmRleCA3ZWE2ZGVkLDYxOTc1NzAuLjk1NjM2OTEKK0JpbmFyeSBmaWxlcyBkaWZmZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNjIGluZGljYXRlcyBiaW5hcnktbmVzcycgJworCWdpdCBzaG93IC0tZm9ybWF0PSVzIC0tY2MgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbm9uLWJpbmFyeSB3aXRoIGJpbmFyeSBhdHRyaWJ1dGUnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgb25lIHRleHQgJiYKKwl0ZXN0X2NvbW1pdCB0d28gdGV4dCAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2gtdGV4dCBIRUFEXiAmJgorCXRlc3RfY29tbWl0IHRocmVlIHRleHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJdGVzdF9jb21taXQgcmVzb2x2ZWQgdGV4dCAmJgorCWVjaG8gdGV4dCAtZGlmZiA+LmdpdGF0dHJpYnV0ZXMKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworcmVzb2x2ZWQKKworZGlmZiAtLWdpdCBhL3RleHQgYi90ZXh0CitpbmRleCAyYmRmNjdhLi4yYWIxOWFlIDEwMDY0NAorQmluYXJ5IGZpbGVzIGEvdGV4dCBhbmQgYi90ZXh0IGRpZmZlcgorcmVzb2x2ZWQKKworZGlmZiAtLWdpdCBhL3RleHQgYi90ZXh0CitpbmRleCBmNzE5ZWZkLi4yYWIxOWFlIDEwMDY0NAorQmluYXJ5IGZpbGVzIGEvdGV4dCBhbmQgYi90ZXh0IGRpZmZlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1tIHJlc3BlY3RzIGJpbmFyeSBhdHRyaWJ1dGUnICcKKwlnaXQgc2hvdyAtLWZvcm1hdD0lcyAtbSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCityZXNvbHZlZAorCitkaWZmIC0tY29tYmluZWQgdGV4dAoraW5kZXggMmJkZjY3YSxmNzE5ZWZkLi4yYWIxOWFlCitCaW5hcnkgZmlsZXMgZGlmZmVyCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLWMgcmVzcGVjdHMgYmluYXJ5IGF0dHJpYnV0ZScgJworCWdpdCBzaG93IC0tZm9ybWF0PSVzIC1jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKK3Jlc29sdmVkCisKK2RpZmYgLS1jYyB0ZXh0CitpbmRleCAyYmRmNjdhLGY3MTllZmQuLjJhYjE5YWUKK0JpbmFyeSBmaWxlcyBkaWZmZXIKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtLWNjIHJlc3BlY3RzIGJpbmFyeSBhdHRyaWJ1dGUnICcKKwlnaXQgc2hvdyAtLWZvcm1hdD0lcyAtLWNjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRleHRjb252IGF0dHJpYnV0ZScgJworCWVjaG8gInRleHQgZGlmZj11cGNhc2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgZGlmZi51cGNhc2UudGV4dGNvbnYgInRyIGEteiBBLVogPCIKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworcmVzb2x2ZWQKKworZGlmZiAtLWdpdCBhL3RleHQgYi90ZXh0CitpbmRleCAyYmRmNjdhLi4yYWIxOWFlIDEwMDY0NAorLS0tIGEvdGV4dAorKysrIGIvdGV4dAorQEAgLTEgKzEgQEAKKy1USFJFRQorK1JFU09MVkVECityZXNvbHZlZAorCitkaWZmIC0tZ2l0IGEvdGV4dCBiL3RleHQKK2luZGV4IGY3MTllZmQuLjJhYjE5YWUgMTAwNjQ0CistLS0gYS90ZXh0CisrKysgYi90ZXh0CitAQCAtMSArMSBAQAorLVRXTworK1JFU09MVkVECitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLW0gcmVzcGVjdHMgdGV4dGNvbnYgYXR0cmlidXRlJyAnCisJZ2l0IHNob3cgLS1mb3JtYXQ9JXMgLW0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworcmVzb2x2ZWQKKworZGlmZiAtLWNvbWJpbmVkIHRleHQKK2luZGV4IDJiZGY2N2EsZjcxOWVmZC4uMmFiMTlhZQorLS0tIGEvdGV4dAorKysrIGIvdGV4dAorQEBAIC0xLDEgLTEsMSArMSwxIEBAQAorLSBUSFJFRQorIC1UV08KKysrUkVTT0xWRUQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiAtYyByZXNwZWN0cyB0ZXh0Y29udiBhdHRyaWJ1dGUnICcKKwlnaXQgc2hvdyAtLWZvcm1hdD0lcyAtYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCityZXNvbHZlZAorCitkaWZmIC0tY2MgdGV4dAoraW5kZXggMmJkZjY3YSxmNzE5ZWZkLi4yYWIxOWFlCistLS0gYS90ZXh0CisrKysgYi90ZXh0CitAQEAgLTEsMSAtMSwxICsxLDEgQEBACistIFRIUkVFCisgLVRXTworKytSRVNPTFZFRAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tY2MgcmVzcGVjdHMgdGV4dGNvbnYgYXR0cmlidXRlJyAnCisJZ2l0IHNob3cgLS1mb3JtYXQ9JXMgLS1jYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitkaWZmIC0tY29tYmluZWQgdGV4dAoraW5kZXggMmJkZjY3YSxmNzE5ZWZkLi4yYWIxOWFlCistLS0gYS90ZXh0CisrKysgYi90ZXh0CitAQEAgLTEsMSAtMSwxICsxLDEgQEBACistIHRocmVlCisgLXR3bworKytyZXNvbHZlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgcGx1bWJpbmcgZG9lcyBub3QgcmVzcGVjdCB0ZXh0Y29udicgJworCWdpdCBkaWZmLXRyZWUgSEVBRCAtYyAtcCA+ZnVsbCAmJgorCXRhaWwgLW4gKzIgZnVsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PCdFT0YnCitkaWZmIC0tY2MgdGV4dAoraW5kZXggMmJkZjY3YSxmNzE5ZWZkLi4wMDAwMDAwCistLS0gYS90ZXh0CisrKysgYi90ZXh0CitAQEAgLTEsMSAtMSwxICsxLDUgQEBACisrKzw8PDw8PDwgSEVBRAorICtUSFJFRQorKys9PT09PT09CisrIFRXTworKys+Pj4+Pj4+IE1BU1RFUgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC0tY2MgcmVzcGVjdHMgdGV4dGNvbnYgb24gd29ya3RyZWUgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IGRpZmYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDQ5LWRpZmYtc3RhdC1jb3VudC5zaCBiL3QvdDQwNDktZGlmZi1zdGF0LWNvdW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEzNDEyMTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDQ5LWRpZmYtc3RhdC1jb3VudC5zaApAQCAtMCwwICsxLDY4IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBHb29nbGUgSW5jLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdkaWZmIC0tc3RhdC1jb3VudCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCT5hICYmCisJPmIgJiYKKwk+YyAmJgorCT5kICYmCisJZ2l0IGFkZCBhIGIgYyBkICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGUtb25seSBjaGFuZ2Ugc2hvdyBhcyBhIDAtbGluZSBjaGFuZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9jaG1vZCAreCBiIGQgJiYKKwllY2hvIGEgPmEgJiYKKwllY2hvIGMgPmMgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIGEgfCAxICsKKwkgYiB8IDAKKwkgLi4uCisJIDQgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCisJRU9GCisJZ2l0IGRpZmYgLS1zdGF0IC0tc3RhdC1jb3VudD0yIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JpbmFyeSBjaGFuZ2VzIGRvIG5vdCBjb3VudCBpbiBsaW5lcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvIGEgPmEgJiYKKwllY2hvIGMgPmMgJiYKKwljYXQgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1iaW5hcnktMS5wbmcgPmQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIGEgfCAxICsKKwkgYyB8IDEgKworCSAuLi4KKwkgMyBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKwlFT0YKKwlnaXQgZGlmZiAtLXN0YXQgLS1zdGF0LWNvdW50PTIgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4Y2x1ZGUgdW5tZXJnZWQgZW50cmllcyBmcm9tIHRvdGFsIGZpbGUgY291bnQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBhID5hICYmCisJZWNobyBiID5iICYmCisJZ2l0IGxzLWZpbGVzIC1zIGEgPnggJiYKKwlnaXQgcm0gLWYgZCAmJgorCWZvciBzdGFnZSBpbiAxIDIgMworCWRvCisJCXNlZCAtZSAicy8gMAlhLyAkc3RhZ2UJZC8iIHgKKwlkb25lIHwKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWVjaG8gZCA+ZCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkgYSB8IDEgKworCSBiIHwgMSArCisJIC4uLgorCSAzIGZpbGVzIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQorCUVPRgorCWdpdCBkaWZmIC0tc3RhdCAtLXN0YXQtY291bnQ9MiA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDUwLWRpZmYtaGlzdG9ncmFtLnNoIGIvdC90NDA1MC1kaWZmLWhpc3RvZ3JhbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZDNlODZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1MC1kaWZmLWhpc3RvZ3JhbS5zaApAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0naGlzdG9ncmFtIGRpZmYgYWxnb3JpdGhtJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWRpZmYtYWx0ZXJuYXRpdmUuc2gKKwordGVzdF9kaWZmX2Zyb2JuaXR6ICJoaXN0b2dyYW0iCisKK3Rlc3RfZGlmZl91bmlxdWUgImhpc3RvZ3JhbSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDUxLWRpZmYtZnVuY3Rpb24tY29udGV4dC5zaCBiL3QvdDQwNTEtZGlmZi1mdW5jdGlvbi1jb250ZXh0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwMWQ2NzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDUxLWRpZmYtZnVuY3Rpb24tY29udGV4dC5zaApAQCAtMCwwICsxLDkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGlmZiBmdW5jdGlvbiBjb250ZXh0JworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvZGlmZi1saWIuc2gKKworCitjYXQgPDxcRU9GID5oZWxsby5jCisjaW5jbHVkZSA8c3RkaW8uaD4KKworc3RhdGljIGludCBhKHZvaWQpCit7CisJLyoKKwkgKiBEdW1teS4KKwkgKi8KK30KKworc3RhdGljIGludCBoZWxsb193b3JsZCh2b2lkKQoreworCS8qIENsYXNzaWMuICovCisJcHJpbnRmKCJIZWxsbyB3b3JsZC5cbiIpOworCisJLyogU3VjY2VzcyEgKi8KKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgYih2b2lkKQoreworCS8qCisJICogRHVtbXksIHRvby4KKwkgKi8KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWEoKTsKKwliKCk7CisJcmV0dXJuIGhlbGxvX3dvcmxkKCk7Cit9CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgYWRkIGhlbGxvLmMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWdyZXAgLXYgQ2xhc3NpYyA8aGVsbG8uYyA+aGVsbG8uYy5uZXcgJiYKKwltdiBoZWxsby5jLm5ldyBoZWxsby5jCisnCisKK2NhdCA8PFxFT0YgPmV4cGVjdGVkCitkaWZmIC0tZ2l0IGEvaGVsbG8uYyBiL2hlbGxvLmMKKy0tLSBhL2hlbGxvLmMKKysrKyBiL2hlbGxvLmMKK0BAIC0xMCw4ICsxMCw3IEBAIHN0YXRpYyBpbnQgYSh2b2lkKQorIHN0YXRpYyBpbnQgaGVsbG9fd29ybGQodm9pZCkKKyB7CistCS8qIENsYXNzaWMuICovCisgCXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKKyAKKyAJLyogU3VjY2VzcyEgKi8KKyAJcmV0dXJuIDA7CisgfQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLVUwIC1XJyAnCisJZ2l0IGRpZmYgLVUwIC1XID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcGF0Y2ggYWN0dWFsIGV4cGVjdGVkCisnCisKK2NhdCA8PFxFT0YgPmV4cGVjdGVkCitkaWZmIC0tZ2l0IGEvaGVsbG8uYyBiL2hlbGxvLmMKKy0tLSBhL2hlbGxvLmMKKysrKyBiL2hlbGxvLmMKK0BAIC05LDkgKzksOCBAQCBzdGF0aWMgaW50IGEodm9pZCkKKyAKKyBzdGF0aWMgaW50IGhlbGxvX3dvcmxkKHZvaWQpCisgeworLQkvKiBDbGFzc2ljLiAqLworIAlwcmludGYoIkhlbGxvIHdvcmxkLlxuIik7CisgCisgCS8qIFN1Y2Nlc3MhICovCisgCXJldHVybiAwOworIH0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1XJyAnCisJZ2l0IGRpZmYgLVcgPmFjdHVhbCAmJgorCWNvbXBhcmVfZGlmZl9wYXRjaCBhY3R1YWwgZXhwZWN0ZWQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDUyLXN0YXQtb3V0cHV0LnNoIGIvdC90NDA1Mi1zdGF0LW91dHB1dC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZjU2M2RiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDA1Mi1zdGF0LW91dHB1dC5zaApAQCAtMCwwICsxLDMzNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBaYmlnbmlldyBKxJlkcnplamV3c2tpLVN6bWVrCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgLS1zdGF0IG91dHB1dCBvZiB2YXJpb3VzIGNvbW1hbmRzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCisKKyMgMTIwIGNoYXJhY3RlciBuYW1lCituYW1lPWFhYWFhYWFhYWEKK25hbWU9JG5hbWUkbmFtZSRuYW1lJG5hbWUkbmFtZSRuYW1lJG5hbWUkbmFtZSRuYW1lJG5hbWUkbmFtZSRuYW1lCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJhdGlvbicgJworCT4iJG5hbWUiICYmCisJZ2l0IGFkZCAiJG5hbWUiICYmCisJZ2l0IGNvbW1pdCAtbSBtZXNzYWdlICYmCisJZWNobyBhID4iJG5hbWUiICYmCisJZ2l0IGNvbW1pdCAtbSBtZXNzYWdlICIkbmFtZSIKKycKKword2hpbGUgcmVhZCBjbWQgYXJncworZG8KKwljYXQgPmV4cGVjdCA8PC0nRU9GJworCSAuLi5hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxICsKKwlFT0YKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kOiBzbWFsbCBjaGFuZ2Ugd2l0aCBsb25nIG5hbWUgZ2l2ZXMgbW9yZSBzcGFjZSB0byB0aGUgbmFtZSIgJworCQlnaXQgJGNtZCAkYXJncyA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCWNhdCA+ZXhwZWN0IDw8LSdFT0YnCisJIC4uLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIHwgMSArCisJRU9GCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAtLXN0YXQ9d2lkdGg6IGEgbG9uZyBuYW1lIGlzIGdpdmVuIG1vcmUgcm9vbSB3aGVuIHRoZSBiYXIgaXMgc2hvcnQiICcKKwkJZ2l0ICRjbWQgJGFyZ3MgLS1zdGF0PTQwID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAtLXN0YXQtd2lkdGg9d2lkdGggd2l0aCBsb25nIG5hbWUiICcKKwkJZ2l0ICRjbWQgJGFyZ3MgLS1zdGF0LXdpZHRoPTQwID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJY2F0ID5leHBlY3QgPDwtJ0VPRicKKwkgLi4uYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIHwgMSArCisJRU9GCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAtLXN0YXQ9Li4uLG5hbWUtd2lkdGggd2l0aCBsb25nIG5hbWUiICcKKwkJZ2l0ICRjbWQgJGFyZ3MgLS1zdGF0PTYwLDMwID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAtLXN0YXQtbmFtZS13aWR0aCB3aXRoIGxvbmcgbmFtZSIgJworCQlnaXQgJGNtZCAkYXJncyAtLXN0YXQtbmFtZS13aWR0aD0zMCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQKK2RpZmYgSEVBRF4gSEVBRCAtLXN0YXQKK3Nob3cgLS1zdGF0Citsb2cgLTEgLS1zdGF0CitFT0YKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJhdGlvbiBmb3IgYmlnIGNoYW5nZSB0ZXN0cycgJworCT5hYmNkICYmCisJZ2l0IGFkZCBhYmNkICYmCisJZ2l0IGNvbW1pdCAtbSBtZXNzYWdlICYmCisJaT0wICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgMTAwMAorCWRvCisJCWVjaG8gJGkgJiYgaT0kKCgkaSArIDEpKQorCWRvbmUgPmFiY2QgJiYKKwlnaXQgY29tbWl0IC1tIG1lc3NhZ2UgYWJjZAorJworCitjYXQgPmV4cGVjdDgwIDw8J0VPRicKKyBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3Q4MC1ncmFwaCA8PCdFT0YnCit8ICBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3QyMDAgPDwnRU9GJworIGFiY2QgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdDIwMC1ncmFwaCA8PCdFT0YnCit8ICBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKK3doaWxlIHJlYWQgdmVyYiBleHBlY3QgY21kIGFyZ3MKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAkdmVyYiBDT0xVTU5TIChiaWcgY2hhbmdlKSIgJworCQlDT0xVTU5TPTIwMCBnaXQgJGNtZCAkYXJncyA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QiIGFjdHVhbAorCScKKworCWNhc2UgIiRjbWQiIGluIGRpZmZ8c2hvdykgY29udGludWU7OyBlc2FjCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tZ3JhcGggJHZlcmIgQ09MVU1OUyAoYmlnIGNoYW5nZSkiICcKKwkJQ09MVU1OUz0yMDAgZ2l0ICRjbWQgJGFyZ3MgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QtZ3JhcGgiIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitpZ25vcmVzIGV4cGVjdDgwIGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorcmVzcGVjdHMgZXhwZWN0MjAwIGRpZmYgSEVBRF4gSEVBRCAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDIwMCBzaG93IC0tc3RhdAorcmVzcGVjdHMgZXhwZWN0MjAwIGxvZyAtMSAtLXN0YXQKK0VPRgorCitjYXQgPmV4cGVjdDQwIDw8J0VPRicKKyBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdDQwLWdyYXBoIDw8J0VPRicKK3wgIGFiY2QgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKworRU9GCit3aGlsZSByZWFkIHZlcmIgZXhwZWN0IGNtZCBhcmdzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgJHZlcmIgbm90IGVub3VnaCBDT0xVTU5TIChiaWcgY2hhbmdlKSIgJworCQlDT0xVTU5TPTQwIGdpdCAkY21kICRhcmdzID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAiJGV4cGVjdCIgYWN0dWFsCisJJworCisJY2FzZSAiJGNtZCIgaW4gZGlmZnxzaG93KSBjb250aW51ZTs7IGVzYWMKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1ncmFwaCAkdmVyYiBub3QgZW5vdWdoIENPTFVNTlMgKGJpZyBjaGFuZ2UpIiAnCisJCUNPTFVNTlM9NDAgZ2l0ICRjbWQgJGFyZ3MgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QtZ3JhcGgiIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitpZ25vcmVzIGV4cGVjdDgwIGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorcmVzcGVjdHMgZXhwZWN0NDAgZGlmZiBIRUFEXiBIRUFEIC0tc3RhdAorcmVzcGVjdHMgZXhwZWN0NDAgc2hvdyAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDQwIGxvZyAtMSAtLXN0YXQKK0VPRgorCitjYXQgPmV4cGVjdDQwIDw8J0VPRicKKyBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdDQwLWdyYXBoIDw8J0VPRicKK3wgIGFiY2QgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKK3doaWxlIHJlYWQgdmVyYiBleHBlY3QgY21kIGFyZ3MKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAkdmVyYiBzdGF0R3JhcGhXaWR0aCBjb25maWciICcKKwkJZ2l0IC1jIGRpZmYuc3RhdEdyYXBoV2lkdGg9MjYgJGNtZCAkYXJncyA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QiIGFjdHVhbAorCScKKworCWNhc2UgIiRjbWQiIGluIGRpZmZ8c2hvdykgY29udGludWU7OyBlc2FjCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tZ3JhcGggJHZlcmIgc3RhdEdyYXBoV2lkdGggY29uZmlnIiAnCisJCWdpdCAtYyBkaWZmLnN0YXRHcmFwaFdpZHRoPTI2ICRjbWQgJGFyZ3MgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QtZ3JhcGgiIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitpZ25vcmVzIGV4cGVjdDgwIGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorcmVzcGVjdHMgZXhwZWN0NDAgZGlmZiBIRUFEXiBIRUFEIC0tc3RhdAorcmVzcGVjdHMgZXhwZWN0NDAgc2hvdyAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDQwIGxvZyAtMSAtLXN0YXQKK0VPRgorCisKK2NhdCA+ZXhwZWN0IDw8J0VPRicKKyBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCitjYXQgPmV4cGVjdC1ncmFwaCA8PCdFT0YnCit8ICBhYmNkIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCit3aGlsZSByZWFkIGNtZCBhcmdzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0PXdpZHRoIHdpdGggYmlnIGNoYW5nZSIgJworCQlnaXQgJGNtZCAkYXJncyAtLXN0YXQ9NDAgPm91dHB1dCAmJgorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tc3RhdC13aWR0aD13aWR0aCB3aXRoIGJpZyBjaGFuZ2UiICcKKwkJZ2l0ICRjbWQgJGFyZ3MgLS1zdGF0LXdpZHRoPTQwID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAtLXN0YXQtZ3JhcGgtd2lkdGggd2l0aCBiaWcgY2hhbmdlIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdC1ncmFwaC13aWR0aD0yNiA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCWNhc2UgIiRjbWQiIGluIGRpZmZ8c2hvdykgY29udGludWU7OyBlc2FjCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tc3RhdC13aWR0aD13aWR0aCAtLWdyYXBoIHdpdGggYmlnIGNoYW5nZSIgJworCQlnaXQgJGNtZCAkYXJncyAtLXN0YXQtd2lkdGg9NDAgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LWdyYXBoIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0LWdyYXBoLXdpZHRoIC0tZ3JhcGggd2l0aCBiaWcgY2hhbmdlIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdC1ncmFwaC13aWR0aD0yNiAtLWdyYXBoID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QtZ3JhcGggYWN0dWFsCisJJworZG9uZSA8PFxFT0YKK2Zvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorZGlmZiBIRUFEXiBIRUFEIC0tc3RhdAorc2hvdyAtLXN0YXQKK2xvZyAtMSAtLXN0YXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJhdGlvbiBmb3IgbG9uZyBmaWxlbmFtZSB0ZXN0cycgJworCWNwIGFiY2QgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhICYmCisJZ2l0IGFkZCBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgJiYKKwlnaXQgY29tbWl0IC1tIG1lc3NhZ2UKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworIC4uLmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIHwgMTAwMCArKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3QtZ3JhcGggPDwnRU9GJworfCAgLi4uYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxMDAwICsrKysrKysrKysrKworRU9GCit3aGlsZSByZWFkIGNtZCBhcmdzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgLS1zdGF0PXdpZHRoIHdpdGggYmlnIGNoYW5nZSBpcyBtb3JlIGJhbGFuY2VkIiAnCisJCWdpdCAkY21kICRhcmdzIC0tc3RhdC13aWR0aD02MCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCWNhc2UgIiRjbWQiIGluIGRpZmZ8c2hvdykgY29udGludWU7OyBlc2FjCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIC0tc3RhdD13aWR0aCAtLWdyYXBoIHdpdGggYmlnIGNoYW5nZSBpcyBiYWxhbmNlZCIgJworCQlnaXQgJGNtZCAkYXJncyAtLXN0YXQtd2lkdGg9NjAgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LWdyYXBoIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQKK2RpZmYgSEVBRF4gSEVBRCAtLXN0YXQKK3Nob3cgLS1zdGF0Citsb2cgLTEgLS1zdGF0CitFT0YKKworY2F0ID5leHBlY3Q4MCA8PCdFT0YnCisgLi4uYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrCitFT0YKK2NhdCA+ZXhwZWN0ODAtZ3JhcGggPDwnRU9GJworfCAgLi4uYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrCitFT0YKK2NhdCA+ZXhwZWN0MjAwIDw8J0VPRicKKyBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgfCAxMDAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgorY2F0ID5leHBlY3QyMDAtZ3JhcGggPDwnRU9GJworfCAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIHwgMTAwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworRU9GCit3aGlsZSByZWFkIHZlcmIgZXhwZWN0IGNtZCBhcmdzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRjbWQgJHZlcmIgQ09MVU1OUyAobG9uZyBmaWxlbmFtZSkiICcKKwkJQ09MVU1OUz0yMDAgZ2l0ICRjbWQgJGFyZ3MgPm91dHB1dCAmJgorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wICIkZXhwZWN0IiBhY3R1YWwKKwknCisKKwljYXNlICIkY21kIiBpbiBkaWZmfHNob3cpIGNvbnRpbnVlOzsgZXNhYworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJGNtZCAtLWdyYXBoICR2ZXJiIENPTFVNTlMgKGxvbmcgZmlsZW5hbWUpIiAnCisJCUNPTFVNTlM9MjAwIGdpdCAkY21kICRhcmdzIC0tZ3JhcGggPm91dHB1dCAmJgorCQlncmVwICIgfCAiIG91dHB1dCA+YWN0dWFsICYmCisJCXRlc3RfY21wICIkZXhwZWN0LWdyYXBoIiBhY3R1YWwKKwknCitkb25lIDw8XEVPRgoraWdub3JlcyBleHBlY3Q4MCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQKK3Jlc3BlY3RzIGV4cGVjdDIwMCBkaWZmIEhFQUReIEhFQUQgLS1zdGF0CityZXNwZWN0cyBleHBlY3QyMDAgc2hvdyAtLXN0YXQKK3Jlc3BlY3RzIGV4cGVjdDIwMCBsb2cgLTEgLS1zdGF0CitFT0YKKworY2F0ID5leHBlY3QxIDw8J0VPRicKKyAuLi5hYWFhYWFhIHwgMTAwMCArKysrKysKK0VPRgorY2F0ID5leHBlY3QxLWdyYXBoIDw8J0VPRicKK3wgIC4uLmFhYWFhYWEgfCAxMDAwICsrKysrKworRU9GCit3aGlsZSByZWFkIHZlcmIgZXhwZWN0IGNtZCBhcmdzCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgQ09MVU1OU19DQU5fQkVfMSBcCisJCSIkY21kICR2ZXJiIHByZWZpeCBncmVhdGVyIHRoYW4gQ09MVU1OUyAoYmlnIGNoYW5nZSkiICcKKwkJQ09MVU1OUz0xIGdpdCAkY21kICRhcmdzID5vdXRwdXQgJiYKKwkJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAiJGV4cGVjdCIgYWN0dWFsCisJJworCisJY2FzZSAiJGNtZCIgaW4gZGlmZnxzaG93KSBjb250aW51ZTs7IGVzYWMKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgQ09MVU1OU19DQU5fQkVfMSBcCisJCSIkY21kIC0tZ3JhcGggJHZlcmIgcHJlZml4IGdyZWF0ZXIgdGhhbiBDT0xVTU5TIChiaWcgY2hhbmdlKSIgJworCQlDT0xVTU5TPTEgZ2l0ICRjbWQgJGFyZ3MgLS1ncmFwaCA+b3V0cHV0ICYmCisJCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgIiRleHBlY3QtZ3JhcGgiIGFjdHVhbAorCScKK2RvbmUgPDxcRU9GCitpZ25vcmVzIGV4cGVjdDgwIGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dAorcmVzcGVjdHMgZXhwZWN0MSBkaWZmIEhFQUReIEhFQUQgLS1zdGF0CityZXNwZWN0cyBleHBlY3QxIHNob3cgLS1zdGF0CityZXNwZWN0cyBleHBlY3QxIGxvZyAtMSAtLXN0YXQKK0VPRgorCitjYXQgPmV4cGVjdCA8PCdFT0YnCisgYWJjZCB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLS1zdGF0IHJlc3BlY3RzIENPTFVNTlMgKGJpZyBjaGFuZ2UpJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCBIRUFEXl4gJiYKKwlDT0xVTU5TPTEwMCBnaXQgbWVyZ2UgLS1zdGF0IC0tbm8tZmYgbWFzdGVyXiA+b3V0cHV0ICYmCisJZ3JlcCAiIHwgIiBvdXRwdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSB8IDEwMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tc3RhdCByZXNwZWN0cyBDT0xVTU5TIChsb25nIGZpbGVuYW1lKScgJworCUNPTFVNTlM9MTAwIGdpdCBtZXJnZSAtLXN0YXQgLS1uby1mZiBtYXN0ZXIgPm91dHB1dCAmJgorCWdyZXAgIiB8ICIgb3V0cHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDA1My1kaWZmLW5vLWluZGV4LnNoIGIvdC90NDA1My1kaWZmLW5vLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlYjgzMjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MDUzLWRpZmYtbm8taW5kZXguc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgLS1uby1pbmRleCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgYSAmJgorCW1rZGlyIGIgJiYKKwllY2hvIDEgPmEvMSAmJgorCWVjaG8gMiA+YS8yICYmCisJZ2l0IGluaXQgcmVwbyAmJgorCWVjaG8gMSA+cmVwby9hICYmCisJbWtkaXIgLXAgbm9uL2dpdCAmJgorCWVjaG8gMSA+bm9uL2dpdC9hICYmCisJZWNobyAxID5ub24vZ2l0L2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1uby1pbmRleCBkaXJlY3RvcmllcycgJworCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgZGlmZiAtLW5vLWluZGV4IGEgYiA+Y250ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMTQgY250CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkaWZmIC0tbm8taW5kZXggcmVsYXRpdmUgcGF0aCBvdXRzaWRlIHJlcG8nICcKKwkoCisJCWNkIHJlcG8gJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tbm8taW5kZXggYSAuLi9ub24vZ2l0L2EgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAwIGdpdCBkaWZmIC0tbm8taW5kZXggLi4vbm9uL2dpdC9hIC4uL25vbi9naXQvYgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1uby1pbmRleCB3aXRoIGJyb2tlbiBpbmRleCcgJworCSgKKwkJY2QgcmVwbyAmJgorCQllY2hvIGJyb2tlbiA+LmdpdC9pbmRleCAmJgorCQlnaXQgZGlmZiAtLW5vLWluZGV4IGEgLi4vbm9uL2dpdC9hCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZiBvdXRzaWRlIHJlcG8gd2l0aCBicm9rZW4gaW5kZXgnICcKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGRpZmYgLi4vbm9uL2dpdC9hIC4uL25vbi9naXQvYgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgLS1uby1pbmRleCBleGVjdXRlZCBvdXRzaWRlIHJlcG8gZ2l2ZXMgY29ycmVjdCBlcnJvciBtZXNzYWdlJyAnCisJKAorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0kVFJBU0hfRElSRUNUT1JZL25vbiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2Qgbm9uL2dpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IGEgMj5hY3R1YWwuZXJyICYmCisJCWVjaG8gInVzYWdlOiBnaXQgZGlmZiAtLW5vLWluZGV4IDxwYXRoPiA8cGF0aD4iID5leHBlY3QuZXJyICYmCisJCXRlc3RfY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBEIEYgYW5kIGRpZmYgRiBEJyAnCisJKAorCQljZCByZXBvICYmCisJCWVjaG8gaW4tcmVwbyA+YSAmJgorCQllY2hvIG5vbi1yZXBvID4uLi9ub24vZ2l0L2EgJiYKKwkJbWtkaXIgc3ViICYmCisJCWVjaG8gc3ViLXJlcG8gPnN1Yi9hICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCBzdWIvYSAuLi9ub24vZ2l0L2EgPmV4cGVjdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IHN1Yi9hIC4uL25vbi9naXQvID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggYSAuLi9ub24vZ2l0L2EgPmV4cGVjdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLW5vLWluZGV4IGEgLi4vbm9uL2dpdC8gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1uby1pbmRleCAuLi9ub24vZ2l0L2EgYSA+ZXhwZWN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggLi4vbm9uL2dpdCBhID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHVybmluZyBhIGZpbGUgaW50byBhIGRpcmVjdG9yeScgJworCSgKKwkJY2Qgbm9uL2dpdCAmJgorCQlta2RpciBkIGUgZS9zdWIgJiYKKwkJZWNobyAxID5kL3N1YiAmJgorCQllY2hvIDIgPmUvc3ViL2ZpbGUgJiYKKwkJcHJpbnRmICJEXHRkL3N1YlxuQVx0ZS9zdWIvZmlsZVxuIiA+ZXhwZWN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tbm8taW5kZXggLS1uYW1lLXN0YXR1cyBkIGUgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNTQtZGlmZi1ib2d1cy10cmVlLnNoIGIvdC90NDA1NC1kaWZmLWJvZ3VzLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWQ2ZWZhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTQtZGlmZi1ib2d1cy10cmVlLnNoCkBAIC0wLDAgKzEsODMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRpZmYgd2l0aCBhIGJvZ3VzIHRyZWUgY29udGFpbmluZyB0aGUgbnVsbCBzaGExJworLiAuL3Rlc3QtbGliLnNoCisKK2VtcHR5X3RyZWU9NGI4MjVkYzY0MmNiNmViOWEwNjBlNTRiZjhkNjkyODhmYmVlNDkwNAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYm9ndXMgdHJlZScgJworCWJvZ3VzX3RyZWU9JCgKKwkJcHJpbnRmICIxMDA2NDQgZm9vUVFRUVFRUVFRUVFRUVFRUVFRUVFRIiB8CisJCXFfdG9fbnVsIHwKKwkJZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4gLXQgdHJlZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHRyZWUgd2l0aCBtYXRjaGluZyBmaWxlJyAnCisJZWNobyBiYXIgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ29vZF90cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJYmxvYj0kKGdpdCByZXYtcGFyc2UgOmZvbykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmF3IGRpZmYgc2hvd3MgbnVsbCBzaGExIChhZGRpdGlvbiknICcKKwllY2hvICI6MDAwMDAwIDEwMDY0NCAkX3o0MCAkX3o0MCBBCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLXRyZWUgJGVtcHR5X3RyZWUgJGJvZ3VzX3RyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmF3IGRpZmYgc2hvd3MgbnVsbCBzaGExIChyZW1vdmFsKScgJworCWVjaG8gIjoxMDA2NDQgMDAwMDAwICRfejQwICRfejQwIEQJZm9vIiA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYtdHJlZSAkYm9ndXNfdHJlZSAkZW1wdHlfdHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYXcgZGlmZiBzaG93cyBudWxsIHNoYTEgKG1vZGlmaWNhdGlvbiknICcKKwllY2hvICI6MTAwNjQ0IDEwMDY0NCAkYmxvYiAkX3o0MCBNCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLXRyZWUgJGdvb2RfdHJlZSAkYm9ndXNfdHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYXcgZGlmZiBzaG93cyBudWxsIHNoYTEgKG90aGVyIGRpcmVjdGlvbiknICcKKwllY2hvICI6MTAwNjQ0IDEwMDY0NCAkX3o0MCAkYmxvYiBNCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLXRyZWUgJGJvZ3VzX3RyZWUgJGdvb2RfdHJlZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYXcgZGlmZiBzaG93cyBudWxsIHNoYTEgKHJldmVyc2UpJyAnCisJZWNobyAiOjEwMDY0NCAxMDA2NDQgJF96NDAgJGJsb2IgTQlmb28iID5leHBlY3QgJiYKKwlnaXQgZGlmZi10cmVlIC1SICRnb29kX3RyZWUgJGJvZ3VzX3RyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmF3IGRpZmYgc2hvd3MgbnVsbCBzaGExIChpbmRleCknICcKKwllY2hvICI6MTAwNjQ0IDEwMDY0NCAkX3o0MCAkYmxvYiBNCWZvbyIgPmV4cGVjdCAmJgorCWdpdCBkaWZmLWluZGV4ICRib2d1c190cmVlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGZhaWxzIGR1ZSB0byBib2d1cyBzaGExIChhZGRpdGlvbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC1wICRlbXB0eV90cmVlICRib2d1c190cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGZhaWxzIGR1ZSB0byBib2d1cyBzaGExIChyZW1vdmFsKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmLXRyZWUgLXAgJGJvZ3VzX3RyZWUgJGVtcHR5X3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggZmFpbHMgZHVlIHRvIGJvZ3VzIHNoYTEgKG1vZGlmaWNhdGlvbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC1wICRnb29kX3RyZWUgJGJvZ3VzX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggZmFpbHMgZHVlIHRvIGJvZ3VzIHNoYTEgKG90aGVyIGRpcmVjdGlvbiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi10cmVlIC1wICRib2d1c190cmVlICRnb29kX3RyZWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2ggZmFpbHMgZHVlIHRvIGJvZ3VzIHNoYTEgKHJldmVyc2UpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtdHJlZSAtUiAtcCAkZ29vZF90cmVlICRib2d1c190cmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoIGZhaWxzIGR1ZSB0byBib2d1cyBzaGExIChpbmRleCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZi1pbmRleCAtcCAkYm9ndXNfdHJlZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNTUtZGlmZi1jb250ZXh0LnNoIGIvdC90NDA1NS1kaWZmLWNvbnRleHQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzQxZTA4MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTUtZGlmZi1jb250ZXh0LnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgTW96aWxsYSBGb3VuZGF0aW9uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYuY29udGV4dCBjb25maWd1cmF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPnRlbXBsYXRlIDw8LVxFT0YgJiYKKwlmaXJzdGxpbmUKKwliCisJYworCWQKKwllCisJZgorCXByZWxpbmUKKwlUQVJHRVQKKwlwb3N0bGluZQorCWkKKwlqCisJaworCWwKKwltCisJbgorCUVPRgorCXNlZCAiL1RBUkdFVC9kIiA+eCA8dGVtcGxhdGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHggJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCXNlZCAicy9UQVJHRVQvQURERUQvIiA+eCA8dGVtcGxhdGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHggJiYKKwlnaXQgY29tbWl0IC1tIG5leHQgJiYKKworCXNlZCAicy9UQVJHRVQvTU9ESUZJRUQvIiA+eCA8dGVtcGxhdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIGRlZmF1bHQgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgaXMgMycgJworCWdpdCBkaWZmID5vdXRwdXQgJiYKKwkhIGdyZXAgIl4gZCIgb3V0cHV0ICYmCisJZ3JlcCAiXiBlIiBvdXRwdXQgJiYKKwlncmVwICJeIGoiIG91dHB1dCAmJgorCSEgZ3JlcCAiXiBrIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5jb250ZXh0IGhvbm9yZWQgYnkgImxvZyInICcKKwlnaXQgbG9nIC0xIC1wID5vdXRwdXQgJiYKKwkhIGdyZXAgZmlyc3RsaW5lIG91dHB1dCAmJgorCWdpdCBjb25maWcgZGlmZi5jb250ZXh0IDggJiYKKwlnaXQgbG9nIC0xIC1wID5vdXRwdXQgJiYKKwlncmVwICJeIGZpcnN0bGluZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RoZSAtVSBvcHRpb24gb3ZlcnJpZGVzIGRpZmYuY29udGV4dCcgJworCWdpdCBjb25maWcgZGlmZi5jb250ZXh0IDggJiYKKwlnaXQgbG9nIC1VNCAtMSA+b3V0cHV0ICYmCisJISBncmVwICJeIGZpcnN0bGluZSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYuY29udGV4dCBob25vcmVkIGJ5ICJkaWZmIicgJworCWdpdCBjb25maWcgZGlmZi5jb250ZXh0IDggJiYKKwlnaXQgZGlmZiA+b3V0cHV0ICYmCisJZ3JlcCAiXiBmaXJzdGxpbmUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbHVtYmluZyBub3QgYWZmZWN0ZWQnICcKKwlnaXQgY29uZmlnIGRpZmYuY29udGV4dCA4ICYmCisJZ2l0IGRpZmYtZmlsZXMgLXAgPm91dHB1dCAmJgorCSEgZ3JlcCAiXiBmaXJzdGxpbmUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub24taW50ZWdlciBjb25maWcgcGFyc2luZycgJworCWdpdCBjb25maWcgZGlmZi5jb250ZXh0IG5vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgMj5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJiYWQgbnVtZXJpYyBjb25maWcgdmFsdWUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduZWdhdGl2ZSBpbnRlZ2VyIGNvbmZpZyBwYXJzaW5nJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmNvbnRleHQgLTEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAyPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgImJhZCBjb25maWcgdmFyaWFibGUiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctVTAgaXMgdmFsaWQsIHNvIGlzIGRpZmYuY29udGV4dD0wJyAnCisJZ2l0IGNvbmZpZyBkaWZmLmNvbnRleHQgMCAmJgorCWdpdCBkaWZmID5vdXRwdXQgJiYKKwlncmVwICJeLUFEREVEIiBvdXRwdXQgJiYKKwlncmVwICJeK01PRElGSUVEIiBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDU2LWRpZmYtb3JkZXIuc2ggYi90L3Q0MDU2LWRpZmYtb3JkZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzA0NjBiYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTYtZGlmZi1vcmRlci5zaApAQCAtMCwwICsxLDEyMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2RpZmYgb3JkZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCitjcmVhdGVfZmlsZXMgKCkgeworCWVjaG8gIiQxIiA+YS5oICYmCisJZWNobyAiJDEiID5iLmMgJiYKKwllY2hvICIkMSIgPmMvTWFrZWZpbGUgJiYKKwllY2hvICIkMSIgPmQudHh0ICYmCisJZ2l0IGFkZCBhLmggYi5jIGMvTWFrZWZpbGUgZC50eHQgJiYKKwlnaXQgY29tbWl0IC1tIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIGMgJiYKKwljcmVhdGVfZmlsZXMgMSAmJgorCWNyZWF0ZV9maWxlcyAyICYmCisKKwljYXQgPm9yZGVyX2ZpbGVfMSA8PC1cRU9GICYmCisJKk1ha2VmaWxlCisJKi50eHQKKwkqLmgKKwlFT0YKKworCWNhdCA+b3JkZXJfZmlsZV8yIDw8LVxFT0YgJiYKKwkqTWFrZWZpbGUKKwkqLmgKKwkqLmMKKwlFT0YKKworCWNhdCA+ZXhwZWN0X25vbmUgPDwtXEVPRiAmJgorCWEuaAorCWIuYworCWMvTWFrZWZpbGUKKwlkLnR4dAorCUVPRgorCisJY2F0ID5leHBlY3RfMSA8PC1cRU9GICYmCisJYy9NYWtlZmlsZQorCWQudHh0CisJYS5oCisJYi5jCisJRU9GCisKKwljYXQgPmV4cGVjdF8yIDw8LVxFT0YKKwljL01ha2VmaWxlCisJYS5oCisJYi5jCisJZC50eHQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAibm8gb3JkZXIgKD10cmVlIG9iamVjdCBvcmRlcikiICcKKwlnaXQgZGlmZiAtLW5hbWUtb25seSBIRUFEXi4uSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbmUgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3Npbmcgb3JkZXJmaWxlJyAnCisJcm0gLWYgYm9ndXNfZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC1PYm9ndXNfZmlsZSAtLW5hbWUtb25seSBIRUFEXi4uSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSxTQU5JVFkgJ3VucmVhZGFibGUgb3JkZXJmaWxlJyAnCisJPnVucmVhZGFibGVfZmlsZSAmJgorCWNobW9kIC1yIHVucmVhZGFibGVfZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC1PdW5yZWFkYWJsZV9maWxlIC0tbmFtZS1vbmx5IEhFQUReLi5IRUFECisnCisKK2ZvciBpIGluIDEgMgorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJvcmRlcmZpbGUgdXNpbmcgb3B0aW9uICgkaSkiICcKKwkJZ2l0IGRpZmYgLU9vcmRlcl9maWxlXyRpIC0tbmFtZS1vbmx5IEhFQUReLi5IRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0XyRpIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAib3JkZXJmaWxlIGlzIGZpZm8gKCRpKSIgJworCQlybSAtZiBvcmRlcl9maWZvICYmCisJCW1rZmlmbyBvcmRlcl9maWZvICYmCisJCXsKKwkJCWNhdCBvcmRlcl9maWxlXyRpID5vcmRlcl9maWZvICYKKwkJfSAmJgorCQlnaXQgZGlmZiAtTyBvcmRlcl9maWZvIC0tbmFtZS1vbmx5IEhFQUReLi5IRUFEID5hY3R1YWwgJiYKKwkJd2FpdCAmJgorCQl0ZXN0X2NtcCBleHBlY3RfJGkgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAib3JkZXJmaWxlIHVzaW5nIGNvbmZpZyAoJGkpIiAnCisJCWdpdCAtYyBkaWZmLm9yZGVyZmlsZT1vcmRlcl9maWxlXyRpIGRpZmYgLS1uYW1lLW9ubHkgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RfJGkgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2FuY2VsbGluZyBjb25maWd1cmVkIG9yZGVyZmlsZSAoJGkpIiAnCisJCWdpdCAtYyBkaWZmLm9yZGVyZmlsZT1vcmRlcl9maWxlXyRpIGRpZmYgLU8vZGV2L251bGwgLS1uYW1lLW9ubHkgSEVBRF4uLkhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3Rfbm9uZSBhY3R1YWwKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciB0ZXN0aW5nIGNvbWJpbmUtZGlmZiBvcmRlcicgJworCWdpdCBjaGVja291dCAtYiB0bXAgSEVBRH4gJiYKKwljcmVhdGVfZmlsZXMgMyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgLXMgb3VycyB0bXAgJiYKKwljcmVhdGVfZmlsZXMgNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21iaW5lLWRpZmY6IG5vIG9yZGVyICg9dHJlZSBvYmplY3Qgb3JkZXIpIiAnCisJZ2l0IGRpZmYgLS1uYW1lLW9ubHkgSEVBRCBIRUFEXiBIRUFEXjIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9ub25lIGFjdHVhbAorJworCitmb3IgaSBpbiAxIDIKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY29tYmluZS1kaWZmOiBvcmRlcmZpbGUgdXNpbmcgb3B0aW9uICgkaSkiICcKKwkJZ2l0IGRpZmYgLU9vcmRlcl9maWxlXyRpIC0tbmFtZS1vbmx5IEhFQUQgSEVBRF4gSEVBRF4yID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0XyRpIGFjdHVhbAorCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MDU3LWRpZmYtY29tYmluZWQtcGF0aHMuc2ggYi90L3Q0MDU3LWRpZmYtY29tYmluZWQtcGF0aHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGZmMzZiNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTctZGlmZi1jb21iaW5lZC1wYXRocy5zaApAQCAtMCwwICsxLDEwNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NvbWJpbmVkIGRpZmYgc2hvdyBvbmx5IHBhdGhzIHRoYXQgYXJlIGRpZmZlcmVudCB0byBhbGwgcGFyZW50cycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgdmVyaWZ5IHRoYXQgZGlmZmMuZXhwZWN0IG1hdGNoZXMgb3V0cHV0IG9mCisjICQoZ2l0IGRpZmYgLWMgLS1uYW1lLW9ubHkgSEVBRCBIRUFEXiBIRUFEXjIpCitkaWZmY192ZXJpZnkgKCkgeworCWdpdCBkaWZmIC1jIC0tbmFtZS1vbmx5IEhFQUQgSEVBRF4gSEVBRF4yID5kaWZmYy5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBkaWZmYy5leHBlY3QgZGlmZmMuYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyaXZpYWwgbWVyZ2UgLSBjb21iaW5lLWRpZmYgZW1wdHknICcKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgOSkKKwlkbworCQllY2hvICRpID4kaS50eHQJJiYKKwkJZ2l0IGFkZCAkaS50eHQKKwlkb25lICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5pdCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMiA5KQorCWRvCisJCWVjaG8gJGkvMiA+PiRpLnR4dAorCWRvbmUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzaWRlIDItOSIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyAxLzIgPjEudHh0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibWFzdGVyIDEiICYmCisJZ2l0IG1lcmdlIHNpZGUgJiYKKwk+ZGlmZmMuZXhwZWN0ICYmCisJZGlmZmNfdmVyaWZ5CisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25seSBvbmUgdHJ1bGx5IGNvbmZsaWN0aW5nIHBhdGgnICcKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMiA5KQorCWRvCisJCWVjaG8gJGkvMyA+PiRpLnR4dAorCWRvbmUgJiYKKwllY2hvICI0c2lkZSIgPj40LnR4dCAmJgorCWdpdCBjb21taXQgLWEgLW0gInNpZGUgMi05ICs0IiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgOSkKKwlkbworCQllY2hvICRpLzMgPj4kaS50eHQKKwlkb25lICYmCisJZWNobyAiNG1hc3RlciIgPj40LnR4dCAmJgorCWdpdCBjb21taXQgLWEgLW0gIm1hc3RlciAxLTkgKzQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNpZGUgJiYKKwljYXQgPDwtXEVPRiA+NC50eHQgJiYKKwk0CisJNC8yCisJNC8zCisJNG1hc3RlcgorCTRzaWRlCisJRU9GCisJZ2l0IGFkZCA0LnR4dCAmJgorCWdpdCBjb21taXQgLW0gIm1lcmdlIHNpZGUgKDIpIiAmJgorCWVjaG8gNC50eHQgPmRpZmZjLmV4cGVjdCAmJgorCWRpZmZjX3ZlcmlmeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBpbnRyb2R1Y2VzIG5ldyBmaWxlJyAnCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDUgOSkKKwlkbworCQllY2hvICRpLzQgPj4kaS50eHQKKwlkb25lICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic2lkZSA1LTkiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSAzKQorCWRvCisJCWVjaG8gJGkvNCA+PiRpLnR4dAorCWRvbmUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJtYXN0ZXIgMS0zICs0aGVsbG8iICYmCisJZ2l0IG1lcmdlIHNpZGUgJiYKKwllY2hvICJIZWxsbyBXb3JsZCIgPjRoZWxsby50eHQgJiYKKwlnaXQgYWRkIDRoZWxsby50eHQgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwllY2hvIDRoZWxsby50eHQgPmRpZmZjLmV4cGVjdCAmJgorCWRpZmZjX3ZlcmlmeQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSByZW1vdmVkIGEgZmlsZScgJworCWdpdCBjaGVja291dCBzaWRlICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSA1IDkpCisJZG8KKwkJZWNobyAkaS81ID4+JGkudHh0CisJZG9uZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInNpZGUgNS05IiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDEgMykKKwlkbworCQllY2hvICRpLzQgPj4kaS50eHQKKwlkb25lICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibWFzdGVyIDEtMyIgJiYKKwlnaXQgbWVyZ2Ugc2lkZSAmJgorCWdpdCBybSA0LnR4dCAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAmJgorCWVjaG8gNC50eHQgPmRpZmZjLmV4cGVjdCAmJgorCWRpZmZjX3ZlcmlmeQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQwNTgtZGlmZi1kdXBsaWNhdGVzLnNoIGIvdC90NDA1OC1kaWZmLWR1cGxpY2F0ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGEyMzI0MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQwNTgtZGlmZi1kdXBsaWNhdGVzLnNoCkBAIC0wLDAgKzEsNzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHRyZWUgZGlmZiB3aGVuIHRyZWVzIGhhdmUgZHVwbGljYXRlIGVudHJpZXMnCisuIC4vdGVzdC1saWIuc2gKKworIyBtYWtlX3RyZWVfZW50cnkgPG1vZGU+IDxtb2RlPiA8c2hhMT4KKyMKKyMgV2UgaGF2ZSB0byByZWx5IG9uIHBlcmwgaGVyZSBiZWNhdXNlIG5vdCBhbGwgcHJpbnRmcyB1bmRlcnN0YW5kCisjIGhleCBlc2NhcGVzIChvbmx5IG9jdGFsKSwgYW5kIHh4ZCBpcyBub3QgcG9ydGFibGUuCittYWtlX3RyZWVfZW50cnkgKCkgeworCXByaW50ZiAnJXMgJXNcMCcgIiQxIiAiJDIiICYmCisJcGVybCAtZSAncHJpbnQgY2hyKGhleCgkXykpIGZvciAoJEFSR1ZbMF0gPX4gLy4uL2cpJyAiJDMiCit9CisKKyMgTGlrZSBnaXQtbWt0cmVlLCBidXQgd2l0aG91dCBhbGwgb2YgdGhlIHBlc2t5IHNhbml0eSBjaGVja2luZy4KKyMgQXJndW1lbnRzIGNvbWUgaW4gZ3JvdXBzIG9mIHRocmVlLCBlYWNoIGdyb3VwIHNwZWNpZnlpbmcgYSBzaW5nbGUKKyMgdHJlZSBlbnRyeSAoc2VlIG1ha2VfdHJlZV9lbnRyeSBhYm92ZSkuCittYWtlX3RyZWUgKCkgeworCXdoaWxlIHRlc3QgJCMgLWd0IDI7IGRvCisJCW1ha2VfdHJlZV9lbnRyeSAiJDEiICIkMiIgIiQzIgorCQlzaGlmdDsgc2hpZnQ7IHNoaWZ0CisJZG9uZSB8CisJZ2l0IGhhc2gtb2JqZWN0IC13IC10IHRyZWUgLS1zdGRpbgorfQorCisjIHRoaXMgaXMga2luZCBvZiBhIGNvbnZvbHV0ZWQgc2V0dXAsIGJ1dCBtYXRjaGVzCisjIGEgcmVhbC13b3JsZCBjYXNlLiBFYWNoIHRyZWUgY29udGFpbnMgZm91ciBlbnRyaWVzCisjIGZvciB0aGUgZ2l2ZW4gcGF0aCwgb25lIHdpdGggb25lIHNoYTEsIGFuZCB0aHJlZSB3aXRoCisjIHRoZSBvdGhlci4gVGhlIGZpcnN0IHRyZWUgaGFzIHRoZW0gc3BsaXQgYWNyb3NzCisjIHR3byBzdWJ0cmVlcyAod2hpY2ggYXJlIHRoZW1zZWx2ZXMgZHVwbGljYXRlIGVudHJpZXMgaW4KKyMgdGhlIHJvb3QgdHJlZSksIGFuZCB0aGUgc2Vjb25kIGhhcyB0aGVtIGFsbCBpbiBhIHNpbmdsZSBzdWJ0cmVlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHRyZWVzIHdpdGggZHVwbGljYXRlIGVudHJpZXMnICcKKwlibG9iX29uZT0kKGVjaG8gb25lIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJYmxvYl90d289JChlY2hvIHR3byB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCWlubmVyX29uZV9hPSQobWFrZV90cmVlIFwKKwkJMTAwNjQ0IGlubmVyICRibG9iX29uZQorCSkgJiYKKwlpbm5lcl9vbmVfYj0kKG1ha2VfdHJlZSBcCisJCTEwMDY0NCBpbm5lciAkYmxvYl90d28gXAorCQkxMDA2NDQgaW5uZXIgJGJsb2JfdHdvIFwKKwkJMTAwNjQ0IGlubmVyICRibG9iX3R3bworCSkgJiYKKwlvdXRlcl9vbmU9JChtYWtlX3RyZWUgXAorCQkwNDAwMDAgb3V0ZXIgJGlubmVyX29uZV9hIFwKKwkJMDQwMDAwIG91dGVyICRpbm5lcl9vbmVfYgorCSkgJiYKKwlpbm5lcl90d289JChtYWtlX3RyZWUgXAorCQkxMDA2NDQgaW5uZXIgJGJsb2Jfb25lIFwKKwkJMTAwNjQ0IGlubmVyICRibG9iX3R3byBcCisJCTEwMDY0NCBpbm5lciAkYmxvYl90d28gXAorCQkxMDA2NDQgaW5uZXIgJGJsb2JfdHdvCisJKSAmJgorCW91dGVyX3R3bz0kKG1ha2VfdHJlZSBcCisJCTA0MDAwMCBvdXRlciAkaW5uZXJfdHdvCisJKSAmJgorCWdpdCB0YWcgb25lICRvdXRlcl9vbmUgJiYKKwlnaXQgdGFnIHR3byAkb3V0ZXJfdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtdHJlZSBiZXR3ZWVuIHRyZWVzJyAnCisJeworCQlwcmludGYgIjowMDAwMDAgMTAwNjQ0ICRfejQwICRibG9iX3R3byBBXHRvdXRlci9pbm5lclxuIiAmJgorCQlwcmludGYgIjowMDAwMDAgMTAwNjQ0ICRfejQwICRibG9iX3R3byBBXHRvdXRlci9pbm5lclxuIiAmJgorCQlwcmludGYgIjowMDAwMDAgMTAwNjQ0ICRfejQwICRibG9iX3R3byBBXHRvdXRlci9pbm5lclxuIiAmJgorCQlwcmludGYgIjoxMDA2NDQgMDAwMDAwICRibG9iX3R3byAkX3o0MCBEXHRvdXRlci9pbm5lclxuIiAmJgorCQlwcmludGYgIjoxMDA2NDQgMDAwMDAwICRibG9iX3R3byAkX3o0MCBEXHRvdXRlci9pbm5lclxuIiAmJgorCQlwcmludGYgIjoxMDA2NDQgMDAwMDAwICRibG9iX3R3byAkX3o0MCBEXHRvdXRlci9pbm5lclxuIgorCX0gPmV4cGVjdCAmJgorCWdpdCBkaWZmLXRyZWUgLXIgLS1uby1hYmJyZXYgb25lIHR3byA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgd2l0aCByZW5hbWVzJyAnCisJIyBzYW1lIGV4cGVjdGF0aW9uIGFzIGFib3ZlLCBzaW5jZSB3ZSBkaXNhYmxlIHJlbmFtZSBkZXRlY3Rpb24KKwlnaXQgZGlmZi10cmVlIC1NIC1yIC0tbm8tYWJicmV2IG9uZSB0d28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTAwLWFwcGx5LXN0YXQuc2ggYi90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzQ0YjhlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAtYXBwbHktc3RhdC5zaApAQCAtMCwwICsxLDQwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IHRlc3QsIHdpdGggLS1yZWNvdW50CisKKycKKy4gLi90ZXN0LWxpYi5zaAorCitVTkM9J3MvXlwoQEAgLVsxLTldWzAtOV0qXCksWzAtOV0qIFwoK1sxLTldWzAtOV0qXCksWzAtOV0qIEBAL1wxLDk5OSBcMiw5OTkgQEAvJworCitudW09MAord2hpbGUgcmVhZCB0aXRsZQorZG8KKwludW09JCgoICRudW0gKyAxICkpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJHRpdGxlIiAnCisJCWdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IFwKKwkJCTwiJFRFU1RfRElSRUNUT1JZL3Q0MTAwL3QtYXBwbHktJG51bS5wYXRjaCIgPmN1cnJlbnQgJiYKKwkJdGVzdF9pMThuY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q0MTAwL3QtYXBwbHktJG51bS5leHBlY3QgY3VycmVudAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiR0aXRsZSB3aXRoIHJlY291bnQiICcKKwkJc2VkIC1lICIkVU5DIiA8IiRURVNUX0RJUkVDVE9SWS90NDEwMC90LWFwcGx5LSRudW0ucGF0Y2giIHwKKwkJZ2l0IGFwcGx5IC0tcmVjb3VudCAtLXN0YXQgLS1zdW1tYXJ5ID5jdXJyZW50ICYmCisJCXRlc3RfaTE4bmNtcCAiJFRFU1RfRElSRUNUT1JZIi90NDEwMC90LWFwcGx5LSRudW0uZXhwZWN0IGN1cnJlbnQKKwknCitkb25lIDw8XEVPRgorcmVuYW1lCitjb3B5CityZXdyaXRlCittb2RlCitub24gZ2l0ICgxKQorbm9uIGdpdCAoMikKK25vbiBnaXQgKDMpCitpbmNvbXBsZXRlICgxKQoraW5jb21wbGV0ZSAoMikKK0VPRgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS0xLmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS0xLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDBlNjRkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTEuZXhwZWN0CkBAIC0wLDAgKzEsMTEgQEAKKyBEb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQgfCAgIDEyICsrKysrKy0tLS0tLQorIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdXNoLnR4dCB8ICAgMTAgKysrKystLS0tLQorIERvY3VtZW50YXRpb24vZ2l0LnR4dCAgICAgICAgICB8ICAgIDYgKysrLS0tCisgTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArKystLS0KKyBzc2gtcHVsbC5jICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsrLS0KKyBzc2gtcHVzaC5jICAgICAgICAgICAgICAgICAgICAgfCAgIDE0ICsrKysrKystLS0tLS0tCisgNiBmaWxlcyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkKKyByZW5hbWUgRG9jdW1lbnRhdGlvbi97Z2l0LXJwdWxsLnR4dCA9PiBnaXQtc3NoLXB1bGwudHh0fSAoOTAlKQorIHJlbmFtZSBEb2N1bWVudGF0aW9uL3tnaXQtcnB1c2gudHh0ID0+IGdpdC1zc2gtcHVzaC50eHR9ICg3MSUpCisgcmVuYW1lIHJwdWxsLmMgPT4gc3NoLXB1bGwuYyAoOTclKQorIHJlbmFtZSBycHVzaC5jID0+IHNzaC1wdXNoLmMgKDkzJSkKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS0xLnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBhYjU0ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS0xLnBhdGNoCkBAIC0wLDAgKzEsMTk0IEBACis0MThhYWY4NDdhOGIzZmZmZmI0Zjc3N2EyZGQ1MjYyY2E1Y2UwZWY3IChmcm9tIGRjOTM4NDE3MTVkZmE5YTljZGRhNmYyYzRhMjVlZWM4MzFlYTdhYTApCitkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcnB1bGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1bGwudHh0CitzaW1pbGFyaXR5IGluZGV4IDkwJQorcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9naXQtcnB1bGwudHh0CityZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1bGwudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ycHVsbC50eHQKKysrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dAorQEAgLTEsMjEgKzEsMjEgQEAKKy1naXQtcnB1bGwoMSkKKy09PT09PT09PT09PT0KKytnaXQtc3NoLXB1bGwoMSkKKys9PT09PT09PT09PT09PT0KKyB2MC4xLCBNYXkgMjAwNQorIAorIE5BTUUKKyAtLS0tCistZ2l0LXJwdWxsIC0gUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KKytnaXQtc3NoLXB1bGwgLSBQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbgorIAorIAorIAorIFNZTk9QU0lTCisgLS0tLS0tLS0KKy0nZ2l0LXJwdWxsJyBbLWNdIFstdF0gWy1hXSBbLWRdIFstdl0gWy0tcmVjb3Zlcl0gY29tbWl0LWlkIHVybAorKydnaXQtc3NoLXB1bGwnIFstY10gWy10XSBbLWFdIFstZF0gWy12XSBbLS1yZWNvdmVyXSBjb21taXQtaWQgdXJsCisgCisgREVTQ1JJUFRJT04KKyAtLS0tLS0tLS0tLQorLVB1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uLCBpbnZva2luZyBnaXQtcnB1c2ggb24KKy10aGUgb3RoZXIgZW5kLgorK1B1bGxzIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeSBvdmVyIHNzaCBjb25uZWN0aW9uLCBpbnZva2luZyBnaXQtc3NoLXB1c2gKKytvbiB0aGUgb3RoZXIgZW5kLgorIAorIE9QVElPTlMKKyAtLS0tLS0tCitkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQtcnB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0CitzaW1pbGFyaXR5IGluZGV4IDcxJQorcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9naXQtcnB1c2gudHh0CityZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQKKysrKyBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1wdXNoLnR4dAorQEAgLTEsMTkgKzEsMTkgQEAKKy1naXQtcnB1c2goMSkKKy09PT09PT09PT09PT0KKytnaXQtc3NoLXB1c2goMSkKKys9PT09PT09PT09PT09PT0KKyB2MC4xLCBNYXkgMjAwNQorIAorIE5BTUUKKyAtLS0tCistZ2l0LXJwdXNoIC0gSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1ycHVsbAorK2dpdC1zc2gtcHVzaCAtIEhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtc3NoLXB1bGwKKyAKKyAKKyBTWU5PUFNJUworIC0tLS0tLS0tCistJ2dpdC1ycHVzaCcKKysnZ2l0LXNzaC1wdXNoJworIAorIERFU0NSSVBUSU9OCisgLS0tLS0tLS0tLS0KKy1IZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXJwdWxsLgorK0hlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtc3NoLXB1bGwuCisgCisgCisgQXV0aG9yCitkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9naXQudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC50eHQKKysrKyBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dAorQEAgLTE0OCw3ICsxNDgsNyBAQCBsaW5rOmdpdC1yZXNvbHZlLXNjcmlwdC5odG1sW2dpdC1yZXNvbHZlCisgbGluazpnaXQtdGFnLXNjcmlwdC5odG1sW2dpdC10YWctc2NyaXB0XTo6CisgCUFuIGV4YW1wbGUgc2NyaXB0IHRvIGNyZWF0ZSBhIHRhZyBvYmplY3Qgc2lnbmVkIHdpdGggR1BHCisgCistbGluazpnaXQtcnB1bGwuaHRtbFtnaXQtcnB1bGxdOjoKKytsaW5rOmdpdC1zc2gtcHVsbC5odG1sW2dpdC1zc2gtcHVsbF06OgorIAlQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbgorIAorIEludGVyb2dhdG9yczoKK0BAIC0xNTYsOCArMTU2LDggQEAgSW50ZXJvZ2F0b3JzOgorIGxpbms6Z2l0LWRpZmYtaGVscGVyLmh0bWxbZ2l0LWRpZmYtaGVscGVyXTo6CisgCUdlbmVyYXRlcyBwYXRjaCBmb3JtYXQgb3V0cHV0IGZvciBnaXQtZGlmZi0qCisgCistbGluazpnaXQtcnB1c2guaHRtbFtnaXQtcnB1c2hdOjoKKy0JSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1ycHVsbAorK2xpbms6Z2l0LXNzaC1wdXNoLmh0bWxbZ2l0LXNzaC1wdXNoXTo6CisrCUhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtc3NoLXB1bGwKKyAKKyAKKyAKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0zMCw3ICszMCw3IEBAIFBST0c9ICAgZ2l0LXVwZGF0ZS1pbmRleCBnaXQtZGlmZi1maWxlcworIAlnaXQtY2hlY2tvdXQtY2FjaGUgZ2l0LWRpZmYtdHJlZSBnaXQtcmV2LXRyZWUgZ2l0LWxzLWZpbGVzIFwKKyAJZ2l0LWNoZWNrLWZpbGVzIGdpdC1scy10cmVlIGdpdC1tZXJnZS1iYXNlIGdpdC1tZXJnZS1jYWNoZSBcCisgCWdpdC11bnBhY2stZmlsZSBnaXQtZXhwb3J0IGdpdC1kaWZmLWNhY2hlIGdpdC1jb252ZXJ0LWNhY2hlIFwKKy0JZ2l0LWh0dHAtcHVsbCBnaXQtcnB1c2ggZ2l0LXJwdWxsIGdpdC1yZXYtbGlzdCBnaXQtbWt0YWcgXAorKwlnaXQtaHR0cC1wdWxsIGdpdC1zc2gtcHVzaCBnaXQtc3NoLXB1bGwgZ2l0LXJldi1saXN0IGdpdC1ta3RhZyBcCisgCWdpdC1kaWZmLWhlbHBlciBnaXQtdGFyLXRyZWUgZ2l0LWxvY2FsLXB1bGwgZ2l0LXdyaXRlLWJsb2IgXAorIAlnaXQtZ2V0LXRhci1jb21taXQtaWQgZ2l0LW1rZGVsdGEgZ2l0LWFwcGx5IGdpdC1zdHJpcHNwYWNlCisgCitAQCAtMTA1LDggKzEwNSw4IEBAIGdpdC1kaWZmLWNhY2hlOiBkaWZmLWNhY2hlLmMKKyBnaXQtY29udmVydC1jYWNoZTogY29udmVydC1jYWNoZS5jCisgZ2l0LWh0dHAtcHVsbDogaHR0cC1wdWxsLmMgcHVsbC5jCisgZ2l0LWxvY2FsLXB1bGw6IGxvY2FsLXB1bGwuYyBwdWxsLmMKKy1naXQtcnB1c2g6IHJzaC5jCistZ2l0LXJwdWxsOiByc2guYyBwdWxsLmMKKytnaXQtc3NoLXB1c2g6IHJzaC5jCisrZ2l0LXNzaC1wdWxsOiByc2guYyBwdWxsLmMKKyBnaXQtcmV2LWxpc3Q6IHJldi1saXN0LmMKKyBnaXQtbWt0YWc6IG1rdGFnLmMKKyBnaXQtZGlmZi1oZWxwZXI6IGRpZmYtaGVscGVyLmMKK2RpZmYgLS1naXQgYS9ycHVsbC5jIGIvc3NoLXB1bGwuYworc2ltaWxhcml0eSBpbmRleCA5NyUKK3JlbmFtZSBmcm9tIHJwdWxsLmMKK3JlbmFtZSB0byBzc2gtcHVsbC5jCistLS0gYS9ycHVsbC5jCisrKysgYi9zc2gtcHVsbC5jCitAQCAtNjQsMTMgKzY0LDEzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCWFyZysrOworIAl9CisgCWlmIChhcmdjIDwgYXJnICsgMikgeworLQkJdXNhZ2UoImdpdC1ycHVsbCBbLWNdIFstdF0gWy1hXSBbLXZdIFstZF0gWy0tcmVjb3Zlcl0gY29tbWl0LWlkIHVybCIpOworKwkJdXNhZ2UoImdpdC1zc2gtcHVsbCBbLWNdIFstdF0gWy1hXSBbLXZdIFstZF0gWy0tcmVjb3Zlcl0gY29tbWl0LWlkIHVybCIpOworIAkJcmV0dXJuIDE7CisgCX0KKyAJY29tbWl0X2lkID0gYXJndlthcmddOworIAl1cmwgPSBhcmd2W2FyZyArIDFdOworIAorLQlpZiAoc2V0dXBfY29ubmVjdGlvbigmZmRfaW4sICZmZF9vdXQsICJnaXQtcnB1c2giLCB1cmwsIGFyZywgYXJndiArIDEpKQorKwlpZiAoc2V0dXBfY29ubmVjdGlvbigmZmRfaW4sICZmZF9vdXQsICJnaXQtc3NoLXB1c2giLCB1cmwsIGFyZywgYXJndiArIDEpKQorIAkJcmV0dXJuIDE7CisgCisgCWlmIChnZXRfdmVyc2lvbigpKQorZGlmZiAtLWdpdCBhL3JwdXNoLmMgYi9zc2gtcHVzaC5jCitzaW1pbGFyaXR5IGluZGV4IDkzJQorcmVuYW1lIGZyb20gcnB1c2guYworcmVuYW1lIHRvIHNzaC1wdXNoLmMKKy0tLSBhL3JwdXNoLmMKKysrKyBiL3NzaC1wdXNoLmMKK0BAIC0xNiw3ICsxNiw3IEBAIGludCBzZXJ2ZV9vYmplY3QoaW50IGZkX2luLCBpbnQgZmRfb3V0KSAKKyAJZG8geworIAkJc2l6ZSA9IHJlYWQoZmRfaW4sIHNoYTEgKyBwb3NuLCAyMCAtIHBvc24pOworIAkJaWYgKHNpemUgPCAwKSB7CistCQkJcGVycm9yKCJnaXQtcnB1c2g6IHJlYWQgIik7CisrCQkJcGVycm9yKCJnaXQtc3NoLXB1c2g6IHJlYWQgIik7CisgCQkJcmV0dXJuIC0xOworIAkJfQorIAkJaWYgKCFzaXplKQorQEAgLTMwLDcgKzMwLDcgQEAgaW50IHNlcnZlX29iamVjdChpbnQgZmRfaW4sIGludCBmZF9vdXQpIAorIAlidWYgPSBtYXBfc2hhMV9maWxlKHNoYTEsICZvYmpzaXplKTsKKyAJCisgCWlmICghYnVmKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1ycHVzaDogY291bGQgbm90IGZpbmQgJXNcbiIsIAorKwkJZnByaW50ZihzdGRlcnIsICJnaXQtc3NoLXB1c2g6IGNvdWxkIG5vdCBmaW5kICVzXG4iLCAKKyAJCQlzaGExX3RvX2hleChzaGExKSk7CisgCQlyZW1vdGUgPSAtMTsKKyAJfQorQEAgLTQ1LDkgKzQ1LDkgQEAgaW50IHNlcnZlX29iamVjdChpbnQgZmRfaW4sIGludCBmZF9vdXQpIAorIAkJc2l6ZSA9IHdyaXRlKGZkX291dCwgYnVmICsgcG9zbiwgb2Jqc2l6ZSAtIHBvc24pOworIAkJaWYgKHNpemUgPD0gMCkgeworIAkJCWlmICghc2l6ZSkgeworLQkJCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1ycHVzaDogd3JpdGUgY2xvc2VkIik7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiZ2l0LXNzaC1wdXNoOiB3cml0ZSBjbG9zZWQiKTsKKyAJCQl9IGVsc2UgeworLQkJCQlwZXJyb3IoImdpdC1ycHVzaDogd3JpdGUgIik7CisrCQkJCXBlcnJvcigiZ2l0LXNzaC1wdXNoOiB3cml0ZSAiKTsKKyAJCQl9CisgCQkJcmV0dXJuIC0xOworIAkJfQorQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBzZXJ2aWNlKGludCBmZF9pbiwgaW50IGZkX291dCkgeworIAkJcmV0dmFsID0gcmVhZChmZF9pbiwgJnR5cGUsIDEpOworIAkJaWYgKHJldHZhbCA8IDEpIHsKKyAJCQlpZiAocmV0dmFsIDwgMCkKKy0JCQkJcGVycm9yKCJycHVzaDogcmVhZCAiKTsKKysJCQkJcGVycm9yKCJnaXQtc3NoLXB1c2g6IHJlYWQgIik7CisgCQkJcmV0dXJuOworIAkJfQorIAkJaWYgKHR5cGUgPT0gJ3YnICYmIHNlcnZlX3ZlcnNpb24oZmRfaW4sIGZkX291dCkpCitAQCAtOTEsMTIgKzkxLDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAgICAgICAgICAgICAgICAgYXJnKys7CisgICAgICAgICB9CisgICAgICAgICBpZiAoYXJnYyA8IGFyZyArIDIpIHsKKy0JCXVzYWdlKCJnaXQtcnB1c2ggWy1jXSBbLXRdIFstYV0gY29tbWl0LWlkIHVybCIpOworKwkJdXNhZ2UoImdpdC1zc2gtcHVzaCBbLWNdIFstdF0gWy1hXSBjb21taXQtaWQgdXJsIik7CisgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgfQorIAljb21taXRfaWQgPSBhcmd2W2FyZ107CisgCXVybCA9IGFyZ3ZbYXJnICsgMV07CistCWlmIChzZXR1cF9jb25uZWN0aW9uKCZmZF9pbiwgJmZkX291dCwgImdpdC1ycHVsbCIsIHVybCwgYXJnLCBhcmd2ICsgMSkpCisrCWlmIChzZXR1cF9jb25uZWN0aW9uKCZmZF9pbiwgJmZkX291dCwgImdpdC1zc2gtcHVsbCIsIHVybCwgYXJnLCBhcmd2ICsgMSkpCisgCQlyZXR1cm4gMTsKKyAKKyAJc2VydmljZShmZF9pbiwgZmRfb3V0KTsKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS0yLmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS0yLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWU2NDU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTIuZXhwZWN0CkBAIC0wLDAgKzEsNSBAQAorIE1ha2VmaWxlICAgICAgICAgfCAgICAyICstCisgZ2l0LWZldGNoLXNjcmlwdCB8ICAgIDUgLS0tLS0KKyBnaXQtcHVsbC1zY3JpcHQgIHwgICAzNCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgMyBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDM5IGRlbGV0aW9ucygtKQorIGNvcHkgZ2l0LXB1bGwtc2NyaXB0ID0+IGdpdC1mZXRjaC1zY3JpcHQgKDg3JSkKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS0yLnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVjN2Q2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS0yLnBhdGNoCkBAIC0wLDAgKzEsNzIgQEAKKzdlZjc2OTI1ZDljMTllZjc0ODc0ZTE3MzVlMjQzNmU1NmQwYzQ4OTcgKGZyb20gNmIxNGQ3ZmFmMGJhZDAyNmE4MWEyN2JhYzA3YjQ3NjkxZjYyMWI4ZikKK2RpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCistLS0gYS9NYWtlZmlsZQorKysrIGIvTWFrZWZpbGUKK0BAIC0yMCw3ICsyMCw3IEBAIElOU1RBTEw9aW5zdGFsbAorIAorIFNDUklQVFM9Z2l0LWFwcGx5LXBhdGNoLXNjcmlwdCBnaXQtbWVyZ2Utb25lLWZpbGUtc2NyaXB0IGdpdC1wcnVuZS1zY3JpcHQgXAorIAlnaXQtcHVsbC1zY3JpcHQgZ2l0LXRhZy1zY3JpcHQgZ2l0LXJlc29sdmUtc2NyaXB0IGdpdC13aGF0Y2hhbmdlZCBcCistCWdpdC1kZWx0YWZ5LXNjcmlwdAorKwlnaXQtZGVsdGFmeS1zY3JpcHQgZ2l0LWZldGNoLXNjcmlwdAorIAorIFBST0c9ICAgZ2l0LXVwZGF0ZS1pbmRleCBnaXQtZGlmZi1maWxlcyBnaXQtaW5pdC1kYiBnaXQtd3JpdGUtdHJlZSBcCisgCWdpdC1yZWFkLXRyZWUgZ2l0LWNvbW1pdC10cmVlIGdpdC1jYXQtZmlsZSBnaXQtZnNjay1jYWNoZSBcCitkaWZmIC0tZ2l0IGEvZ2l0LXB1bGwtc2NyaXB0IGIvZ2l0LWZldGNoLXNjcmlwdAorc2ltaWxhcml0eSBpbmRleCA4NyUKK2NvcHkgZnJvbSBnaXQtcHVsbC1zY3JpcHQKK2NvcHkgdG8gZ2l0LWZldGNoLXNjcmlwdAorLS0tIGEvZ2l0LXB1bGwtc2NyaXB0CisrKysgYi9naXQtZmV0Y2gtc2NyaXB0CitAQCAtMzksOCArMzksMyBAQCBkb3dubG9hZF9vbmUgIiRtZXJnZV9yZXBvLyRtZXJnZV9uYW1lIiAiCisgCisgZWNobyAiR2V0dGluZyBvYmplY3QgZGF0YWJhc2UiCisgZG93bmxvYWRfb2JqZWN0cyAiJG1lcmdlX3JlcG8iICIkKGNhdCAiJEdJVF9ESVIiL01FUkdFX0hFQUQpIgorLQorLWdpdC1yZXNvbHZlLXNjcmlwdCBcCistCSIkKGNhdCAiJEdJVF9ESVIiL0hFQUQpIiBcCistCSIkKGNhdCAiJEdJVF9ESVIiL01FUkdFX0hFQUQpIiBcCistCSIkbWVyZ2VfcmVwbyIKK2RpZmYgLS1naXQgYS9naXQtcHVsbC1zY3JpcHQgYi9naXQtcHVsbC1zY3JpcHQKKy0tLSBhL2dpdC1wdWxsLXNjcmlwdAorKysrIGIvZ2l0LXB1bGwtc2NyaXB0CitAQCAtNiwzOSArNiw3IEBAIG1lcmdlX25hbWU9JHsyOi1IRUFEfQorIDogJHtHSVRfRElSPS5naXR9CisgOiAke0dJVF9PQkpFQ1RfRElSRUNUT1JZPSIke1NIQTFfRklMRV9ESVJFQ1RPUlktIiRHSVRfRElSL29iamVjdHMifSJ9CisgCistZG93bmxvYWRfb25lICgpIHsKKy0JIyByZW1vdGVfcGF0aD0iJDEiIGxvY2FsX2ZpbGU9IiQyIgorLQljYXNlICIkMSIgaW4KKy0JaHR0cDovLyopCistCQl3Z2V0IC1xIC1PICIkMiIgIiQxIiA7OworLQkvKikKKy0JCXRlc3QgLWYgIiQxIiAmJiBjYXQgPiIkMiIgIiQxIiA7OworLQkqKQorLQkJcnN5bmMgLUwgIiQxIiAiJDIiIDs7CistCWVzYWMKKy19CistCistZG93bmxvYWRfb2JqZWN0cyAoKSB7CistCSMgcmVtb3RlX3JlcG89IiQxIiBoZWFkX3NoYTE9IiQyIgorLQljYXNlICIkMSIgaW4KKy0JaHR0cDovLyopCistCQlnaXQtaHR0cC1wdWxsIC1hICIkMiIgIiQxLyIKKy0JCTs7CistCS8qKQorLQkJZ2l0LWxvY2FsLXB1bGwgLWwgLWEgIiQyIiAiJDEvIgorLQkJOzsKKy0JKikKKy0JCXJzeW5jIC1hdnogLS1pZ25vcmUtZXhpc3RpbmcgXAorLQkJCSIkMS9vYmplY3RzLy4iICIkR0lUX09CSkVDVF9ESVJFQ1RPUlkiLy4KKy0JCTs7CistCWVzYWMKKy19CistCistZWNobyAiR2V0dGluZyByZW1vdGUgJG1lcmdlX25hbWUiCistZG93bmxvYWRfb25lICIkbWVyZ2VfcmVwby8kbWVyZ2VfbmFtZSIgIiRHSVRfRElSIi9NRVJHRV9IRUFECistCistZWNobyAiR2V0dGluZyBvYmplY3QgZGF0YWJhc2UiCistZG93bmxvYWRfb2JqZWN0cyAiJG1lcmdlX3JlcG8iICIkKGNhdCAiJEdJVF9ESVIiL01FUkdFX0hFQUQpIgorK2dpdC1mZXRjaC1zY3JpcHQgIiRtZXJnZV9yZXBvIiAiJG1lcmdlX25hbWUiCisgCisgZ2l0LXJlc29sdmUtc2NyaXB0IFwKKyAJIiQoY2F0ICIkR0lUX0RJUiIvSEVBRCkiIFwKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS0zLmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS0zLmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTJhNTUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTMuZXhwZWN0CkBAIC0wLDAgKzEsNyBAQAorIERvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0IHwgICAyMCArLQorIGxzLXRyZWUuYyAgICAgICAgICAgICAgICAgICAgIHwgIDQ1OSArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaCAgIHwgICAgMyAKKyB0cmVlLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgCisgdHJlZS5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAxIAorIDUgZmlsZXMgY2hhbmdlZCwgMjYyIGluc2VydGlvbnMoKyksIDIyMyBkZWxldGlvbnMoLSkKKyByZXdyaXRlIGxzLXRyZWUuYyAoODIlKQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTMucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGNkYmFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTMucGF0Y2gKQEAgLTAsMCArMSw1NjcgQEAKKzZhZjFmMDE5MmZmODc0MGZlNzdkYjdjZjAyYzczOWNjZmJkZjExOWMgKGZyb20gMmJjMjU2NDE0NTgzNTk5NjczNGQ2ZWQ1ZDE4ODBmODViMTcyMzNkNikKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKK0BAIC00LDIzICs0LDI2IEBAIHYwLjEsIE1heSAyMDA1CisgCisgTkFNRQorIC0tLS0KKy1naXQtbHMtdHJlZSAtIERpc3BsYXlzIGEgdHJlZSBvYmplY3QgaW4gaHVtYW4gcmVhZGFibGUgZm9ybQorK2dpdC1scy10cmVlIC0gTGlzdHMgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QuCisgCisgCisgU1lOT1BTSVMKKyAtLS0tLS0tLQorLSdnaXQtbHMtdHJlZScgWy1yXSBbLXpdIDx0cmVlLWlzaD4gW3BhdGhzLi4uXQorKydnaXQtbHMtdHJlZScgWy1kXSBbLXJdIFstel0gPHRyZWUtaXNoPiBbcGF0aHMuLi5dCisgCisgREVTQ1JJUFRJT04KKyAtLS0tLS0tLS0tLQorLUNvbnZlcnRzIHRoZSB0cmVlIG9iamVjdCB0byBhIGh1bWFuIHJlYWRhYmxlIChhbmQgc2NyaXB0IHByb2Nlc3NhYmxlKQorLWZvcm0uCisrTGlzdHMgdGhlIGNvbnRlbnRzIG9mIGEgdHJlZSBvYmplY3QsIGxpa2Ugd2hhdCAiL2Jpbi9scyAtYSIgZG9lcworK2luIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorIAorIE9QVElPTlMKKyAtLS0tLS0tCisgPHRyZWUtaXNoPjo6CisgCUlkIG9mIGEgdHJlZS4KKyAKKystZDo6CisrCXNob3cgb25seSB0aGUgbmFtZWQgdHJlZSBlbnRyeSBpdHNlbGYsIG5vdCBpdHMgY2hpbGRyZW4KKysKKyAtcjo6CisgCXJlY3Vyc2UgaW50byBzdWItdHJlZXMKKyAKK0BAIC0yOCwxOCArMzEsMTkgQEAgT1BUSU9OUworIAlcMCBsaW5lIHRlcm1pbmF0aW9uIG9uIG91dHB1dAorIAorIHBhdGhzOjoKKy0JT3B0aW9uYWxseSwgcmVzdHJpY3QgdGhlIG91dHB1dCBvZiBnaXQtbHMtdHJlZSB0byBzcGVjaWZpYworLQlwYXRocy4gRGlyZWN0b3JpZXMgd2lsbCBvbmx5IGxpc3QgdGhlaXIgdHJlZSBibG9iIGlkcy4KKy0JSW1wbGllcyAtci4KKysJV2hlbiBwYXRocyBhcmUgZ2l2ZW4sIHNob3dzIHRoZW0uICBPdGhlcndpc2UgaW1wbGljaXRseQorKwl1c2VzIHRoZSByb290IGxldmVsIG9mIHRoZSB0cmVlIGFzIHRoZSBzb2xlIHBhdGggYXJndW1lbnQuCisrCisgCisgT3V0cHV0IEZvcm1hdAorIC0tLS0tLS0tLS0tLS0KKy0gICAgICAgIDxtb2RlPlx0CTx0eXBlPlx0CTxvYmplY3Q+XHQJPGZpbGU+CisrICAgICAgICA8bW9kZT4gU1AgPHR5cGU+IFNQIDxvYmplY3Q+IFRBQiA8ZmlsZT4KKyAKKyAKKyBBdXRob3IKKyAtLS0tLS0KKyBXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKytDb21wbGV0ZWx5IHJld3JpdHRlbiBmcm9tIHNjcmF0Y2ggYnkgSnVuaW8gQyBIYW1hbm8gPGp1bmtpb0Bjb3gubmV0PgorIAorIERvY3VtZW50YXRpb24KKyAtLS0tLS0tLS0tLS0tLQorZGlmZiAtLWdpdCBhL2xzLXRyZWUuYyBiL2xzLXRyZWUuYworZGlzc2ltaWxhcml0eSBpbmRleCA4MiUKKy0tLSBscy10cmVlLmMKKysrKyBscy10cmVlLmMKK0BAIC0xLDIxMiArMSwyNDcgQEAKKy0vKgorLSAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorLSAqCistICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorLSAqLworLSNpbmNsdWRlICJjYWNoZS5oIgorLQorLXN0YXRpYyBpbnQgbGluZV90ZXJtaW5hdGlvbiA9ICdcbic7Cistc3RhdGljIGludCByZWN1cnNpdmUgPSAwOworLQorLXN0cnVjdCBwYXRoX3ByZWZpeCB7CistCXN0cnVjdCBwYXRoX3ByZWZpeCAqcHJldjsKKy0JY29uc3QgY2hhciAqbmFtZTsKKy19OworLQorLSNkZWZpbmUgREVCVUcoZm10LCAuLi4pCQorLQorLXN0YXRpYyBpbnQgc3RyaW5nX3BhdGhfcHJlZml4KGNoYXIgKmJ1ZmYsIHNpemVfdCBibGVuLCBzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZWZpeCkKKy17CistCWludCBsZW4gPSAwOworLQlpZiAocHJlZml4KSB7CistCQlpZiAocHJlZml4LT5wcmV2KSB7CistCQkJbGVuID0gc3RyaW5nX3BhdGhfcHJlZml4KGJ1ZmYsYmxlbixwcmVmaXgtPnByZXYpOworLQkJCWJ1ZmYgKz0gbGVuOworLQkJCWJsZW4gLT0gbGVuOworLQkJCWlmIChibGVuID4gMCkgeworLQkJCQkqYnVmZiA9ICcvJzsKKy0JCQkJbGVuKys7CistCQkJCWJ1ZmYrKzsKKy0JCQkJYmxlbi0tOworLQkJCX0KKy0JCX0KKy0JCXN0cm5jcHkoYnVmZixwcmVmaXgtPm5hbWUsYmxlbik7CistCQlyZXR1cm4gbGVuICsgc3RybGVuKHByZWZpeC0+bmFtZSk7CistCX0KKy0KKy0JcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyB2b2lkIHByaW50X3BhdGhfcHJlZml4KHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4KQorLXsKKy0JaWYgKHByZWZpeCkgeworLQkJaWYgKHByZWZpeC0+cHJldikgeworLQkJCXByaW50X3BhdGhfcHJlZml4KHByZWZpeC0+cHJldik7CistCQkJcHV0Y2hhcignLycpOworLQkJfQorLQkJZnB1dHMocHJlZml4LT5uYW1lLCBzdGRvdXQpOworLQl9CistfQorLQorLS8qCistICogcmV0dXJuOgorLSAqIAktMSBpZiBwcmVmaXggaXMgKm5vdCogYSBzdWJzZXQgb2YgcGF0aAorLSAqIAkgMCBpZiBwcmVmaXggPT0gcGF0aAorLSAqIAkgMSBpZiBwcmVmaXggaXMgYSBzdWJzZXQgb2YgcGF0aAorLSAqLworLXN0YXRpYyBpbnQgcGF0aGNtcChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZWZpeCkKKy17CistCWNoYXIgYnVmZltQQVRIX01BWF07CistCWludCBsZW4sc2xlbjsKKy0KKy0JaWYgKHByZWZpeCA9PSBOVUxMKQorLQkJcmV0dXJuIDE7CistCistCWxlbiA9IHN0cmluZ19wYXRoX3ByZWZpeChidWZmLCBzaXplb2YgYnVmZiwgcHJlZml4KTsKKy0Jc2xlbiA9IHN0cmxlbihwYXRoKTsKKy0KKy0JaWYgKHNsZW4gPCBsZW4pCistCQlyZXR1cm4gLTE7CistCistCWlmIChzdHJuY21wKHBhdGgsYnVmZixsZW4pID09IDApIHsKKy0JCWlmIChzbGVuID09IGxlbikKKy0JCQlyZXR1cm4gMDsKKy0JCWVsc2UKKy0JCQlyZXR1cm4gMTsKKy0JfQorLQorLQlyZXR1cm4gLTE7CistfQkKKy0KKy0vKgorLSAqIG1hdGNoIG1heSBiZSBOVUxMLCBvciBhICpzb3J0ZWQqIGxpc3Qgb2YgcGF0aHMKKy0gKi8KKy1zdGF0aWMgdm9pZCBsaXN0X3JlY3Vyc2l2ZSh2b2lkICpidWZmZXIsCistCQkJICAgY29uc3QgY2hhciAqdHlwZSwKKy0JCQkgICB1bnNpZ25lZCBsb25nIHNpemUsCistCQkJICAgc3RydWN0IHBhdGhfcHJlZml4ICpwcmVmaXgsCistCQkJICAgY2hhciAqKm1hdGNoLCBpbnQgbWF0Y2hlcykKKy17CistCXN0cnVjdCBwYXRoX3ByZWZpeCB0aGlzX3ByZWZpeDsKKy0JdGhpc19wcmVmaXgucHJldiA9IHByZWZpeDsKKy0KKy0JaWYgKHN0cmNtcCh0eXBlLCAidHJlZSIpKQorLQkJZGllKCJleHBlY3RlZCBhICd0cmVlJyBub2RlIik7CistCistCWlmIChtYXRjaGVzKQorLQkJcmVjdXJzaXZlID0gMTsKKy0KKy0Jd2hpbGUgKHNpemUpIHsKKy0JCWludCBuYW1lbGVuID0gc3RybGVuKGJ1ZmZlcikrMTsKKy0JCXZvaWQgKmVsdGJ1ZiA9IE5VTEw7CistCQljaGFyIGVsdHR5cGVbMjBdOworLQkJdW5zaWduZWQgbG9uZyBlbHRzaXplOworLQkJdW5zaWduZWQgY2hhciAqc2hhMSA9IGJ1ZmZlciArIG5hbWVsZW47CistCQljaGFyICpwYXRoID0gc3RyY2hyKGJ1ZmZlciwgJyAnKSArIDE7CistCQl1bnNpZ25lZCBpbnQgbW9kZTsKKy0JCWNvbnN0IGNoYXIgKm1hdGNoZWQgPSBOVUxMOworLQkJaW50IG10eXBlID0gLTE7CistCQlpbnQgbWluZGV4OworLQorLQkJaWYgKHNpemUgPCBuYW1lbGVuICsgMjAgfHwgc3NjYW5mKGJ1ZmZlciwgIiVvIiwgJm1vZGUpICE9IDEpCistCQkJZGllKCJjb3JydXB0ICd0cmVlJyBmaWxlIik7CistCQlidWZmZXIgPSBzaGExICsgMjA7CistCQlzaXplIC09IG5hbWVsZW4gKyAyMDsKKy0KKy0JCXRoaXNfcHJlZml4Lm5hbWUgPSBwYXRoOworLQkJZm9yICggbWluZGV4ID0gMDsgbWluZGV4IDwgbWF0Y2hlczsgbWluZGV4KyspIHsKKy0JCQltdHlwZSA9IHBhdGhjbXAobWF0Y2hbbWluZGV4XSwmdGhpc19wcmVmaXgpOworLQkJCWlmIChtdHlwZSA+PSAwKSB7CistCQkJCW1hdGNoZWQgPSBtYXRjaFttaW5kZXhdOworLQkJCQlicmVhazsKKy0JCQl9CistCQl9CistCistCQkvKgorLQkJICogSWYgd2UncmUgbm90IG1hdGNoaW5nLCBvciBpZiB0aGlzIGlzIGFuIGV4YWN0IG1hdGNoLAorLQkJICogcHJpbnQgb3V0IHRoZSBpbmZvCistCQkgKi8KKy0JCWlmICghbWF0Y2hlcyB8fCAobWF0Y2hlZCAhPSBOVUxMICYmIG10eXBlID09IDApKSB7CistCQkJcHJpbnRmKCIlMDZvICVzICVzXHQiLCBtb2RlLAorLQkJCSAgICAgICBTX0lTRElSKG1vZGUpID8gInRyZWUiIDogImJsb2IiLAorLQkJCSAgICAgICBzaGExX3RvX2hleChzaGExKSk7CistCQkJcHJpbnRfcGF0aF9wcmVmaXgoJnRoaXNfcHJlZml4KTsKKy0JCQlwdXRjaGFyKGxpbmVfdGVybWluYXRpb24pOworLQkJfQorLQorLQkJaWYgKCEgcmVjdXJzaXZlIHx8ICEgU19JU0RJUihtb2RlKSkKKy0JCQljb250aW51ZTsKKy0KKy0JCWlmIChtYXRjaGVzICYmICEgbWF0Y2hlZCkKKy0JCQljb250aW51ZTsKKy0KKy0JCWlmICghIChlbHRidWYgPSByZWFkX3NoYTFfZmlsZShzaGExLCBlbHR0eXBlLCAmZWx0c2l6ZSkpICkgeworLQkJCWVycm9yKCJjYW5ub3QgcmVhZCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKy0JCQljb250aW51ZTsKKy0JCX0KKy0KKy0JCS8qIElmIHRoaXMgaXMgYW4gZXhhY3QgZGlyZWN0b3J5IG1hdGNoLCB3ZSBtYXkgaGF2ZQorLQkJICogZGlyZWN0b3J5IGZpbGVzIGZvbGxvd2luZyB0aGlzIHBhdGguIE1hdGNoIG9uIHRoZW0uCistCQkgKiBPdGhlcndpc2UsIHdlJ3JlIGF0IGEgcGFjaCBzdWJjb21wb25lbnQsIGFuZCB3ZSBuZWVkCistCQkgKiB0byB0cnkgdG8gbWF0Y2ggYWdhaW4uCistCQkgKi8KKy0JCWlmIChtdHlwZSA9PSAwKQorLQkJCW1pbmRleCsrOworLQorLQkJbGlzdF9yZWN1cnNpdmUoZWx0YnVmLCBlbHR0eXBlLCBlbHRzaXplLCAmdGhpc19wcmVmaXgsICZtYXRjaFttaW5kZXhdLCBtYXRjaGVzLW1pbmRleCk7CistCQlmcmVlKGVsdGJ1Zik7CistCX0KKy19CistCistc3RhdGljIGludCBxY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCisteworLQlyZXR1cm4gc3RyY21wKCooY2hhciAqKilhLCAqKGNoYXIgKiopYik7CistfQorLQorLXN0YXRpYyBpbnQgbGlzdCh1bnNpZ25lZCBjaGFyICpzaGExLGNoYXIgKipwYXRoKQorLXsKKy0Jdm9pZCAqYnVmZmVyOworLQl1bnNpZ25lZCBsb25nIHNpemU7CistCWludCBucGF0aHM7CistCistCWZvciAobnBhdGhzID0gMDsgcGF0aFtucGF0aHNdICE9IE5VTEw7IG5wYXRocysrKQorLQkJOworLQorLQlxc29ydChwYXRoLG5wYXRocyxzaXplb2YoY2hhciAqKSxxY21wKTsKKy0KKy0JYnVmZmVyID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgInRyZWUiLCAmc2l6ZSwgTlVMTCk7CistCWlmICghYnVmZmVyKQorLQkJZGllKCJ1bmFibGUgdG8gcmVhZCBzaGExIGZpbGUiKTsKKy0JbGlzdF9yZWN1cnNpdmUoYnVmZmVyLCAidHJlZSIsIHNpemUsIE5VTEwsIHBhdGgsIG5wYXRocyk7CistCWZyZWUoYnVmZmVyKTsKKy0JcmV0dXJuIDA7CistfQorLQorLXN0YXRpYyBjb25zdCBjaGFyICpsc190cmVlX3VzYWdlID0gImdpdC1scy10cmVlIFstcl0gWy16XSA8a2V5PiBbcGF0aHMuLi5dIjsKKy0KKy1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisteworLQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworLQorLQl3aGlsZSAoMSA8IGFyZ2MgJiYgYXJndlsxXVswXSA9PSAnLScpIHsKKy0JCXN3aXRjaCAoYXJndlsxXVsxXSkgeworLQkJY2FzZSAneic6CistCQkJbGluZV90ZXJtaW5hdGlvbiA9IDA7CistCQkJYnJlYWs7CistCQljYXNlICdyJzoKKy0JCQlyZWN1cnNpdmUgPSAxOworLQkJCWJyZWFrOworLQkJZGVmYXVsdDoKKy0JCQl1c2FnZShsc190cmVlX3VzYWdlKTsKKy0JCX0KKy0JCWFyZ2MtLTsgYXJndisrOworLQl9CistCistCWlmIChhcmdjIDwgMikKKy0JCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworLQlpZiAoZ2V0X3NoYTEoYXJndlsxXSwgc2hhMSkgPCAwKQorLQkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CistCWlmIChsaXN0KHNoYTEsICZhcmd2WzJdKSA8IDApCistCQlkaWUoImxpc3QgZmFpbGVkIik7CistCXJldHVybiAwOworLX0KKysvKgorKyAqIEdJVCAtIFRoZSBpbmZvcm1hdGlvbiBtYW5hZ2VyIGZyb20gaGVsbAorKyAqCisrICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorKyAqLworKyNpbmNsdWRlICJjYWNoZS5oIgorKyNpbmNsdWRlICJibG9iLmgiCisrI2luY2x1ZGUgInRyZWUuaCIKKysKKytzdGF0aWMgaW50IGxpbmVfdGVybWluYXRpb24gPSAnXG4nOworKyNkZWZpbmUgTFNfUkVDVVJTSVZFIDEKKysjZGVmaW5lIExTX1RSRUVfT05MWSAyCisrc3RhdGljIGludCBsc19vcHRpb25zID0gMDsKKysKKytzdGF0aWMgc3RydWN0IHRyZWVfZW50cnlfbGlzdCByb290X2VudHJ5OworKworK3N0YXRpYyB2b2lkIHByZXBhcmVfcm9vdCh1bnNpZ25lZCBjaGFyICpzaGExKQorK3sKKysJdW5zaWduZWQgY2hhciByc2hhWzIwXTsKKysJdW5zaWduZWQgbG9uZyBzaXplOworKwl2b2lkICpidWY7CisrCXN0cnVjdCB0cmVlICpyb290X3RyZWU7CisrCisrCWJ1ZiA9IHJlYWRfb2JqZWN0X3dpdGhfcmVmZXJlbmNlKHNoYTEsICJ0cmVlIiwgJnNpemUsIHJzaGEpOworKwlmcmVlKGJ1Zik7CisrCWlmICghYnVmKQorKwkJZGllKCJDb3VsZCBub3QgcmVhZCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKysKKysJcm9vdF90cmVlID0gbG9va3VwX3RyZWUocnNoYSk7CisrCWlmICghcm9vdF90cmVlKQorKwkJZGllKCJDb3VsZCBub3QgcmVhZCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKysKKysJLyogUHJlcGFyZSBhIGZha2UgZW50cnkgKi8KKysJcm9vdF9lbnRyeS5kaXJlY3RvcnkgPSAxOworKwlyb290X2VudHJ5LmV4ZWN1dGFibGUgPSByb290X2VudHJ5LnN5bWxpbmsgPSAwOworKwlyb290X2VudHJ5Lm1vZGUgPSBTX0lGRElSOworKwlyb290X2VudHJ5Lm5hbWUgPSAiIjsKKysJcm9vdF9lbnRyeS5pdGVtLnRyZWUgPSByb290X3RyZWU7CisrCXJvb3RfZW50cnkucGFyZW50ID0gTlVMTDsKKyt9CisrCisrc3RhdGljIGludCBwcmVwYXJlX2NoaWxkcmVuKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmVsZW0pCisreworKwlpZiAoIWVsZW0tPmRpcmVjdG9yeSkKKysJCXJldHVybiAtMTsKKysJaWYgKCFlbGVtLT5pdGVtLnRyZWUtPm9iamVjdC5wYXJzZWQpIHsKKysJCXN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmU7CisrCQlpZiAocGFyc2VfdHJlZShlbGVtLT5pdGVtLnRyZWUpKQorKwkJCXJldHVybiAtMTsKKysJCS8qIFNldCB1cCB0aGUgcGFyZW50IGxpbmsgKi8KKysJCWZvciAoZSA9IGVsZW0tPml0ZW0udHJlZS0+ZW50cmllczsgZTsgZSA9IGUtPm5leHQpCisrCQkJZS0+cGFyZW50ID0gZWxlbTsKKysJfQorKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmZpbmRfZW50cnlfMChzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplbGVtLAorKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGgsCisrCQkJCQkgICAgY29uc3QgY2hhciAqcGF0aF9lbmQpCisreworKwljb25zdCBjaGFyICplcDsKKysJaW50IGxlbjsKKysKKysJd2hpbGUgKHBhdGggPCBwYXRoX2VuZCkgeworKwkJaWYgKHByZXBhcmVfY2hpbGRyZW4oZWxlbSkpCisrCQkJcmV0dXJuIE5VTEw7CisrCisrCQkvKiBJbiBlbGVtLT50cmVlLT5lbnRyaWVzLCBmaW5kIHRoZSBvbmUgdGhhdCBoYXMgbmFtZQorKwkJICogdGhhdCBtYXRjaGVzIHdoYXQgaXMgYmV0d2VlbiBwYXRoIGFuZCBlcC4KKysJCSAqLworKwkJZWxlbSA9IGVsZW0tPml0ZW0udHJlZS0+ZW50cmllczsKKysKKysJCWVwID0gc3RyY2hyKHBhdGgsICcvJyk7CisrCQlpZiAoIWVwIHx8IHBhdGhfZW5kIDw9IGVwKQorKwkJCWVwID0gcGF0aF9lbmQ7CisrCQlsZW4gPSBlcCAtIHBhdGg7CisrCisrCQl3aGlsZSAoZWxlbSkgeworKwkJCWlmICgoc3RybGVuKGVsZW0tPm5hbWUpID09IGxlbikgJiYKKysJCQkgICAgIXN0cm5jbXAoZWxlbS0+bmFtZSwgcGF0aCwgbGVuKSkKKysJCQkJYnJlYWs7CisrCQkJZWxlbSA9IGVsZW0tPm5leHQ7CisrCQl9CisrCQlpZiAocGF0aF9lbmQgPD0gZXAgfHwgIWVsZW0pCisrCQkJcmV0dXJuIGVsZW07CisrCQl3aGlsZSAoKmVwID09ICcvJyAmJiBlcCA8IHBhdGhfZW5kKQorKwkJCWVwKys7CisrCQlwYXRoID0gZXA7CisrCX0KKysJcmV0dXJuIE5VTEw7CisrfQorKworK3N0YXRpYyBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICpmaW5kX2VudHJ5KGNvbnN0IGNoYXIgKnBhdGgsCisrCQkJCQkgIGNvbnN0IGNoYXIgKnBhdGhfZW5kKQorK3sKKysJLyogRmluZCB0cmVlIGVsZW1lbnQsIGRlc2NlbmRpbmcgZnJvbSByb290LCB0aGF0CisrCSAqIGNvcnJlc3BvbmRzIHRvIHRoZSBuYW1lZCBwYXRoLCBsYXppbHkgZXhwYW5kaW5nCisrCSAqIHRoZSB0cmVlIGlmIHBvc3NpYmxlLgorKwkgKi8KKysJaWYgKHBhdGggPT0gcGF0aF9lbmQpIHsKKysJCS8qIFNwZWNpYWwuICBUaGlzIGlzIHRoZSByb290IGxldmVsICovCisrCQlyZXR1cm4gJnJvb3RfZW50cnk7CisrCX0KKysJcmV0dXJuIGZpbmRfZW50cnlfMCgmcm9vdF9lbnRyeSwgcGF0aCwgcGF0aF9lbmQpOworK30KKysKKytzdGF0aWMgdm9pZCBzaG93X2VudHJ5X25hbWUoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSkKKyt7CisrCS8qIFRoaXMgaXMgeXVja3kuICBUaGUgcm9vdCBsZXZlbCBpcyB0aGVyZSBmb3IKKysJICogb3VyIGNvbnZlbmllbmNlIGJ1dCB3ZSByZWFsbHkgd2FudCB0byBkbyBhCisrCSAqIGZvcmVzdC4KKysJICovCisrCWlmIChlLT5wYXJlbnQgJiYgZS0+cGFyZW50ICE9ICZyb290X2VudHJ5KSB7CisrCQlzaG93X2VudHJ5X25hbWUoZS0+cGFyZW50KTsKKysJCXB1dGNoYXIoJy8nKTsKKysJfQorKwlwcmludGYoIiVzIiwgZS0+bmFtZSk7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICplbnRyeV90eXBlKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUpCisreworKwlyZXR1cm4gKGUtPmRpcmVjdG9yeSA/ICJ0cmVlIiA6ICJibG9iIik7CisrfQorKworK3N0YXRpYyBjb25zdCBjaGFyICplbnRyeV9oZXgoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSkKKyt7CisrCXJldHVybiBzaGExX3RvX2hleChlLT5kaXJlY3RvcnkKKysJCQkgICA/IGUtPml0ZW0udHJlZS0+b2JqZWN0LnNoYTEKKysJCQkgICA6IGUtPml0ZW0uYmxvYi0+b2JqZWN0LnNoYTEpOworK30KKysKKysvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIGZvciBtdXR1YWxseSByZWN1cnNpdmUgcm91dGluZXMgKi8KKytzdGF0aWMgaW50IHNob3dfZW50cnkoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqLCBpbnQpOworKworK3N0YXRpYyBpbnQgc2hvd19jaGlsZHJlbihzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplLCBpbnQgbGV2ZWwpCisreworKwlpZiAocHJlcGFyZV9jaGlsZHJlbihlKSkKKysJCWRpZSgiaW50ZXJuYWwgZXJyb3I6IGxzLXRyZWUgc2hvd19jaGlsZHJlbiBjYWxsZWQgd2l0aCBub24gdHJlZSIpOworKwllID0gZS0+aXRlbS50cmVlLT5lbnRyaWVzOworKwl3aGlsZSAoZSkgeworKwkJc2hvd19lbnRyeShlLCBsZXZlbCk7CisrCQllID0gZS0+bmV4dDsKKysJfQorKwlyZXR1cm4gMDsKKyt9CisrCisrc3RhdGljIGludCBzaG93X2VudHJ5KHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUsIGludCBsZXZlbCkKKyt7CisrCWludCBlcnIgPSAwOyAKKysKKysJaWYgKGUgIT0gJnJvb3RfZW50cnkpIHsKKysJCXByaW50ZigiJTA2byAlcyAlcwkiLCBlLT5tb2RlLCBlbnRyeV90eXBlKGUpLAorKwkJICAgICAgIGVudHJ5X2hleChlKSk7CisrCQlzaG93X2VudHJ5X25hbWUoZSk7CisrCQlwdXRjaGFyKGxpbmVfdGVybWluYXRpb24pOworKwl9CisrCisrCWlmIChlLT5kaXJlY3RvcnkpIHsKKysJCS8qIElmIHRoaXMgaXMgYSBkaXJlY3RvcnksIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBjYXNlczoKKysJCSAqICgxKSBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgcmVxdWVzdCAoZXhwbGljaXQgcGF0aCBmcm9tIHRoZQorKwkJICogICAgIGNvbW1hbmQgbGluZSwgb3IgInJvb3QiIGlmIHRoZXJlIGlzIG5vIGNvbW1hbmQgbGluZSkuCisrCQkgKiAgYS4gV2l0aG91dCBhbnkgZmxhZy4gIFdlIHNob3cgZGlyZWN0IGNoaWxkcmVuLiAgV2UgZG8gbm90IAorKwkJICogICAgIHJlY3Vyc2UgaW50byB0aGVtLgorKwkJICogIGIuIFdpdGggLXIuICBXZSBkbyByZWN1cnNlIGludG8gY2hpbGRyZW4uCisrCQkgKiAgYy4gV2l0aCAtZC4gIFdlIGRvIG5vdCByZWN1cnNlIGludG8gY2hpbGRyZW4uCisrCQkgKiAoMikgV2UgY2FtZSBoZXJlIGJlY2F1c2Ugb3VyIGNhbGxlciBpcyBlaXRoZXIgKDEtYSkgb3IKKysJCSAqICAgICAoMS1iKS4KKysJCSAqICBhLiBXaXRob3V0IGFueSBmbGFnLiAgV2UgZG8gbm90IHNob3cgb3VyIGNoaWxkcmVuICh3aGljaAorKwkJICogICAgIGFyZSBncmFuZGNoaWxkcmVuIGZvciB0aGUgb3JpZ2luYWwgcmVxdWVzdCkuCisrCQkgKiAgYi4gV2l0aCAtci4gIFdlIGNvbnRpbnVlIHRvIHJlY3Vyc2UgaW50byBvdXIgY2hpbGRyZW4uCisrCQkgKiAgYy4gV2l0aCAtZC4gIFdlIHNob3VsZCBub3QgaGF2ZSBjb21lIGhlcmUgdG8gYmVnaW4gd2l0aC4KKysJCSAqLworKwkJaWYgKGxldmVsID09IDAgJiYgIShsc19vcHRpb25zICYgTFNfVFJFRV9PTkxZKSkKKysJCQkvKiBjYXNlICgxKS1hIGFuZCAoMSktYiAqLworKwkJCWVyciA9IGVyciB8IHNob3dfY2hpbGRyZW4oZSwgbGV2ZWwrMSk7CisrCQllbHNlIGlmIChsZXZlbCAmJiBsc19vcHRpb25zICYgTFNfUkVDVVJTSVZFKQorKwkJCS8qIGNhc2UgKDIpLWIgKi8KKysJCQllcnIgPSBlcnIgfCBzaG93X2NoaWxkcmVuKGUsIGxldmVsKzEpOworKwl9CisrCXJldHVybiBlcnI7CisrfQorKworK3N0YXRpYyBpbnQgbGlzdF9vbmUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqcGF0aF9lbmQpCisreworKwlpbnQgZXJyID0gMDsKKysJc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSA9IGZpbmRfZW50cnkocGF0aCwgcGF0aF9lbmQpOworKwlpZiAoIWUpIHsKKysJCS8qIHRyYWRpdGlvbmFsbHkgbHMtdHJlZSBkb2VzIG5vdCBjb21wbGFpbiBhYm91dAorKwkJICogbWlzc2luZyBwYXRoLiAgV2UgbWF5IGNoYW5nZSB0aGlzIGxhdGVyIHRvIG1hdGNoCisrCQkgKiB3aGF0ICIvYmluL2xzIC1hIiBkb2VzLCB3aGljaCBpcyB0byBjb21wbGFpbi4KKysJCSAqLworKwkJcmV0dXJuIGVycjsKKysJfQorKwllcnIgPSBlcnIgfCBzaG93X2VudHJ5KGUsIDApOworKwlyZXR1cm4gZXJyOworK30KKysKKytzdGF0aWMgaW50IGxpc3QoY2hhciAqKnBhdGgpCisreworKwlpbnQgaTsKKysJaW50IGVyciA9IDA7CisrCWZvciAoaSA9IDA7IHBhdGhbaV07IGkrKykgeworKwkJaW50IGxlbiA9IHN0cmxlbihwYXRoW2ldKTsKKysJCXdoaWxlICgwIDw9IGxlbiAmJiBwYXRoW2ldW2xlbl0gPT0gJy8nKQorKwkJCWxlbi0tOworKwkJZXJyID0gZXJyIHwgbGlzdF9vbmUocGF0aFtpXSwgcGF0aFtpXSArIGxlbik7CisrCX0KKysJcmV0dXJuIGVycjsKKyt9CisrCisrc3RhdGljIGNvbnN0IGNoYXIgKmxzX3RyZWVfdXNhZ2UgPQorKwkiZ2l0LWxzLXRyZWUgWy1kXSBbLXJdIFstel0gPHRyZWUtaXNoPiBbcGF0aC4uLl0iOworKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrCXN0YXRpYyBjaGFyICpwYXRoMFtdID0geyAiIiwgTlVMTCB9OworKwljaGFyICoqcGF0aDsKKysJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKysKKysJd2hpbGUgKDEgPCBhcmdjICYmIGFyZ3ZbMV1bMF0gPT0gJy0nKSB7CisrCQlzd2l0Y2ggKGFyZ3ZbMV1bMV0pIHsKKysJCWNhc2UgJ3onOgorKwkJCWxpbmVfdGVybWluYXRpb24gPSAwOworKwkJCWJyZWFrOworKwkJY2FzZSAncic6CisrCQkJbHNfb3B0aW9ucyB8PSBMU19SRUNVUlNJVkU7CisrCQkJYnJlYWs7CisrCQljYXNlICdkJzoKKysJCQlsc19vcHRpb25zIHw9IExTX1RSRUVfT05MWTsKKysJCQlicmVhazsKKysJCWRlZmF1bHQ6CisrCQkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CisrCQl9CisrCQlhcmdjLS07IGFyZ3YrKzsKKysJfQorKworKwlpZiAoYXJnYyA8IDIpCisrCQl1c2FnZShsc190cmVlX3VzYWdlKTsKKysJaWYgKGdldF9zaGExKGFyZ3ZbMV0sIHNoYTEpIDwgMCkKKysJCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworKworKwlwYXRoID0gKGFyZ2MgPT0gMikgPyBwYXRoMCA6IChhcmd2ICsgMik7CisrCXByZXBhcmVfcm9vdChzaGExKTsKKysJaWYgKGxpc3QocGF0aCkgPCAwKQorKwkJZGllKCJsaXN0IGZhaWxlZCIpOworKwlyZXR1cm4gMDsKKyt9CitkaWZmIC0tZ2l0IGEvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCistLS0gYS90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKKysrKyBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaAorQEAgLTc0LDggKzc0LDggQEAgdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICdscy10cmVlIGZpbHRlcmVkJyBcCisgICAgICdnaXQtbHMtdHJlZSAkdHJlZSBwYXRoMSBwYXRoMCA+Y3VycmVudCAmJgorICAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKy0xMDA2NDQgYmxvYiBYCXBhdGgwCisgMTIwMDAwIGJsb2IgWAlwYXRoMQorKzEwMDY0NCBibG9iIFgJcGF0aDAKKyBFT0YKKyAgICAgIHRlc3Rfb3V0cHV0JworIAorQEAgLTg1LDcgKzg1LDYgQEAgdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorIDA0MDAwMCB0cmVlIFgJcGF0aDIKKyAwNDAwMDAgdHJlZSBYCXBhdGgyL2JhegorLTEwMDY0NCBibG9iIFgJcGF0aDIvYmF6L2IKKyAxMjAwMDAgYmxvYiBYCXBhdGgyL2JhemJvCisgMTAwNjQ0IGJsb2IgWAlwYXRoMi9mb28KKyBFT0YKK2RpZmYgLS1naXQgYS90cmVlLmMgYi90cmVlLmMKKy0tLSBhL3RyZWUuYworKysrIGIvdHJlZS5jCitAQCAtMTMzLDcgKzEzMyw3IEBAIGludCBwYXJzZV90cmVlX2J1ZmZlcihzdHJ1Y3QgdHJlZSAqaXRlbSwKKyAJCX0KKyAJCWlmIChvYmopCisgCQkJYWRkX3JlZigmaXRlbS0+b2JqZWN0LCBvYmopOworLQorKwkJZW50cnktPnBhcmVudCA9IE5VTEw7IC8qIG5lZWRzIHRvIGJlIGZpbGxlZCBieSB0aGUgdXNlciAqLworIAkJKmxpc3RfcCA9IGVudHJ5OworIAkJbGlzdF9wID0gJmVudHJ5LT5uZXh0OworIAl9CitkaWZmIC0tZ2l0IGEvdHJlZS5oIGIvdHJlZS5oCistLS0gYS90cmVlLmgKKysrKyBiL3RyZWUuaAorQEAgLTE2LDYgKzE2LDcgQEAgc3RydWN0IHRyZWVfZW50cnlfbGlzdCB7CisgCQlzdHJ1Y3QgdHJlZSAqdHJlZTsKKyAJCXN0cnVjdCBibG9iICpibG9iOworIAl9IGl0ZW07CisrCXN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKnBhcmVudDsKKyB9OworIAorIHN0cnVjdCB0cmVlIHsKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS00LmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS00LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWMwMjhiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTQuZXhwZWN0CkBAIC0wLDAgKzEsNSBAQAorIHQvdDAwMDAtYmFzaWMuc2ggfCAgICAwIAorIHQvdGVzdC1saWIuc2ggICAgfCAgICAwIAorIDIgZmlsZXMgY2hhbmdlZCwgMCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQorIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgdC90MDAwMC1iYXNpYy5zaAorIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgdC90ZXN0LWxpYi5zaApkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTQucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTU2YWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTQucGF0Y2gKQEAgLTAsMCArMSw3IEBACitjZWVkZTU5ZWE5MGNlYmFkNTJiYTljODI2M2ZlZjNmYjZlZjE3NTkzIChmcm9tIDM2OGY5OWQ1N2U4ZWQxNzI0M2YyZTE2NDQzMTQ0OWQ0OGJmY2EyZmIpCitkaWZmIC0tZ2l0IGEvdC90MDAwMC1iYXNpYy5zaCBiL3QvdDAwMDAtYmFzaWMuc2gKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CitkaWZmIC0tZ2l0IGEvdC90ZXN0LWxpYi5zaCBiL3QvdGVzdC1saWIuc2gKK29sZCBtb2RlIDEwMDY0NAorbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNS5leHBlY3QgYi90L3Q0MTAwL3QtYXBwbHktNS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM4N2RmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS01LmV4cGVjdApAQCAtMCwwICsxLDE5IEBACisgRG9jdW1lbnRhdGlvbi9naXQtcnB1bGwudHh0ICAgIHwgICA1MCAtLS0tLS0tLS0tLS0tLS0tLS0tCisgRG9jdW1lbnRhdGlvbi9naXQtcnB1c2gudHh0ICAgIHwgICAzMCAtLS0tLS0tLS0tLS0KKyBEb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQgfCAgIDUwICsrKysrKysrKysrKysrKysrKysKKyBEb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQgfCAgIDMwICsrKysrKysrKysrKworIERvY3VtZW50YXRpb24vZ2l0LnR4dCAgICAgICAgICB8ICAgIDYgKy0KKyBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICstCisgcnB1bGwuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4MyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHJwdXNoLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHNzaC1wdWxsLmMgICAgICAgICAgICAgICAgICAgICB8ICAgODMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyBzc2gtcHVzaC5jICAgICAgICAgICAgICAgICAgICAgfCAgMTA0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKyAxMCBmaWxlcyBjaGFuZ2VkLCAyNzMgaW5zZXJ0aW9ucygrKSwgMjczIGRlbGV0aW9ucygtKQorIGRlbGV0ZSBEb2N1bWVudGF0aW9uL2dpdC1ycHVsbC50eHQKKyBkZWxldGUgRG9jdW1lbnRhdGlvbi9naXQtcnB1c2gudHh0CisgY3JlYXRlIERvY3VtZW50YXRpb24vZ2l0LXNzaC1wdWxsLnR4dAorIGNyZWF0ZSBEb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVzaC50eHQKKyBkZWxldGUgcnB1bGwuYworIGRlbGV0ZSBycHVzaC5jCisgY3JlYXRlIHNzaC1wdWxsLmMKKyBjcmVhdGUgc3NoLXB1c2guYwpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTUucGF0Y2ggYi90L3Q0MTAwL3QtYXBwbHktNS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjZkZGMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTUucGF0Y2gKQEAgLTAsMCArMSw2MTIgQEAKK2RpZmYgYS9Eb2N1bWVudGF0aW9uL2dpdC1ycHVsbC50eHQgYi9Eb2N1bWVudGF0aW9uL2dpdC1ycHVsbC50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LXJwdWxsLnR4dAorKysrIC9kZXYvbnVsbAorQEAgLTEsNTAgKzAsMCBAQAorLWdpdC1ycHVsbCgxKQorLT09PT09PT09PT09PQorLXYwLjEsIE1heSAyMDA1CistCistTkFNRQorLS0tLS0KKy1naXQtcnB1bGwgLSBQdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbgorLQorLQorLQorLVNZTk9QU0lTCistLS0tLS0tLS0KKy0nZ2l0LXJwdWxsJyBbLWNdIFstdF0gWy1hXSBbLWRdIFstdl0gWy0tcmVjb3Zlcl0gY29tbWl0LWlkIHVybAorLQorLURFU0NSSVBUSU9OCistLS0tLS0tLS0tLS0KKy1QdWxscyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkgb3ZlciBzc2ggY29ubmVjdGlvbiwgaW52b2tpbmcgZ2l0LXJwdXNoIG9uCistdGhlIG90aGVyIGVuZC4KKy0KKy1PUFRJT05TCistLS0tLS0tLQorLS1jOjoKKy0JR2V0IHRoZSBjb21taXQgb2JqZWN0cy4KKy0tdDo6CistCUdldCB0cmVlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbW1pdCBvYmplY3RzLgorLS1hOjoKKy0JR2V0IGFsbCB0aGUgb2JqZWN0cy4KKy0tZDo6CistCURvIG5vdCBjaGVjayBmb3IgZGVsdGEgYmFzZSBvYmplY3RzICh1c2UgdGhpcyBvcHRpb24KKy0Jb25seSB3aGVuIHlvdSBrbm93IHRoZSByZW1vdGUgcmVwb3NpdG9yeSBpcyBub3QKKy0JZGVsdGlmaWVkKS4KKy0tLXJlY292ZXI6OgorLQlDaGVjayBkZXBlbmRlbmN5IG9mIGRlbHRpZmllZCBvYmplY3QgbW9yZSBjYXJlZnVsbHkgdGhhbgorLQl1c3VhbCwgdG8gcmVjb3ZlciBhZnRlciBlYXJsaWVyIHB1bGwgdGhhdCB3YXMgaW50ZXJydXB0ZWQuCistLXY6OgorLQlSZXBvcnQgd2hhdCBpcyBkb3dubG9hZGVkLgorLQorLQorLUF1dGhvcgorLS0tLS0tLQorLVdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorLQorLURvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tLQorLURvY3VtZW50YXRpb24gYnkgRGF2aWQgR3JlYXZlcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCistCistR0lUCistLS0tCistUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCistCitkaWZmIGEvRG9jdW1lbnRhdGlvbi9naXQtcnB1c2gudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtcnB1c2gudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1ycHVzaC50eHQKKysrKyAvZGV2L251bGwKK0BAIC0xLDMwICswLDAgQEAKKy1naXQtcnB1c2goMSkKKy09PT09PT09PT09PT0KKy12MC4xLCBNYXkgMjAwNQorLQorLU5BTUUKKy0tLS0tCistZ2l0LXJwdXNoIC0gSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1ycHVsbAorLQorLQorLVNZTk9QU0lTCistLS0tLS0tLS0KKy0nZ2l0LXJwdXNoJworLQorLURFU0NSSVBUSU9OCistLS0tLS0tLS0tLS0KKy1IZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXJwdWxsLgorLQorLQorLUF1dGhvcgorLS0tLS0tLQorLVdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorLQorLURvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0tLQorLURvY3VtZW50YXRpb24gYnkgRGF2aWQgR3JlYXZlcywgSnVuaW8gQyBIYW1hbm8gYW5kIHRoZSBnaXQtbGlzdCA8Z2l0QHZnZXIua2VybmVsLm9yZz4uCistCistR0lUCistLS0tCistUGFydCBvZiB0aGUgbGluazpnaXQuaHRtbFtnaXRdIHN1aXRlCistCitkaWZmIGEvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1bGwudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1bGwudHh0CistLS0gL2Rldi9udWxsCisrKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1zc2gtcHVsbC50eHQKK0BAIC0wLDAgKzEsNTAgQEAKKytnaXQtc3NoLXB1bGwoMSkKKys9PT09PT09PT09PT09PT0KKyt2MC4xLCBNYXkgMjAwNQorKworK05BTUUKKystLS0tCisrZ2l0LXNzaC1wdWxsIC0gUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KKysKKysKKysKKytTWU5PUFNJUworKy0tLS0tLS0tCisrJ2dpdC1zc2gtcHVsbCcgWy1jXSBbLXRdIFstYV0gWy1kXSBbLXZdIFstLXJlY292ZXJdIGNvbW1pdC1pZCB1cmwKKysKKytERVNDUklQVElPTgorKy0tLS0tLS0tLS0tCisrUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24sIGludm9raW5nIGdpdC1zc2gtcHVzaAorK29uIHRoZSBvdGhlciBlbmQuCisrCisrT1BUSU9OUworKy0tLS0tLS0KKystYzo6CisrCUdldCB0aGUgY29tbWl0IG9iamVjdHMuCisrLXQ6OgorKwlHZXQgdHJlZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21taXQgb2JqZWN0cy4KKystYTo6CisrCUdldCBhbGwgdGhlIG9iamVjdHMuCisrLWQ6OgorKwlEbyBub3QgY2hlY2sgZm9yIGRlbHRhIGJhc2Ugb2JqZWN0cyAodXNlIHRoaXMgb3B0aW9uCisrCW9ubHkgd2hlbiB5b3Uga25vdyB0aGUgcmVtb3RlIHJlcG9zaXRvcnkgaXMgbm90CisrCWRlbHRpZmllZCkuCisrLS1yZWNvdmVyOjoKKysJQ2hlY2sgZGVwZW5kZW5jeSBvZiBkZWx0aWZpZWQgb2JqZWN0IG1vcmUgY2FyZWZ1bGx5IHRoYW4KKysJdXN1YWwsIHRvIHJlY292ZXIgYWZ0ZXIgZWFybGllciBwdWxsIHRoYXQgd2FzIGludGVycnVwdGVkLgorKy12OjoKKysJUmVwb3J0IHdoYXQgaXMgZG93bmxvYWRlZC4KKysKKysKKytBdXRob3IKKystLS0tLS0KKytXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKysKKytEb2N1bWVudGF0aW9uCisrLS0tLS0tLS0tLS0tLS0KKytEb2N1bWVudGF0aW9uIGJ5IERhdmlkIEdyZWF2ZXMsIEp1bmlvIEMgSGFtYW5vIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgorKworK0dJVAorKy0tLQorK1BhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorKworZGlmZiBhL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1wdXNoLnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LXNzaC1wdXNoLnR4dAorLS0tIC9kZXYvbnVsbAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtc3NoLXB1c2gudHh0CitAQCAtMCwwICsxLDMwIEBACisrZ2l0LXNzaC1wdXNoKDEpCisrPT09PT09PT09PT09PT09CisrdjAuMSwgTWF5IDIwMDUKKysKKytOQU1FCisrLS0tLQorK2dpdC1zc2gtcHVzaCAtIEhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtc3NoLXB1bGwKKysKKysKKytTWU5PUFNJUworKy0tLS0tLS0tCisrJ2dpdC1zc2gtcHVzaCcKKysKKytERVNDUklQVElPTgorKy0tLS0tLS0tLS0tCisrSGVscGVyICJzZXJ2ZXItc2lkZSIgcHJvZ3JhbSB1c2VkIGJ5IGdpdC1zc2gtcHVsbC4KKysKKysKKytBdXRob3IKKystLS0tLS0KKytXcml0dGVuIGJ5IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KKysKKytEb2N1bWVudGF0aW9uCisrLS0tLS0tLS0tLS0tLS0KKytEb2N1bWVudGF0aW9uIGJ5IERhdmlkIEdyZWF2ZXMsIEp1bmlvIEMgSGFtYW5vIGFuZCB0aGUgZ2l0LWxpc3QgPGdpdEB2Z2VyLmtlcm5lbC5vcmc+LgorKworK0dJVAorKy0tLQorK1BhcnQgb2YgdGhlIGxpbms6Z2l0Lmh0bWxbZ2l0XSBzdWl0ZQorKworZGlmZiBhL0RvY3VtZW50YXRpb24vZ2l0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LnR4dAorLS0tIGEvRG9jdW1lbnRhdGlvbi9naXQudHh0CisrKysgYi9Eb2N1bWVudGF0aW9uL2dpdC50eHQKK0BAIC0xNDgsNyArMTQ4LDcgQEAgbGluazpnaXQtcmVzb2x2ZS1zY3JpcHQuaHRtbFtnaXQtcmVzb2x2ZQorIGxpbms6Z2l0LXRhZy1zY3JpcHQuaHRtbFtnaXQtdGFnLXNjcmlwdF06OgorIAlBbiBleGFtcGxlIHNjcmlwdCB0byBjcmVhdGUgYSB0YWcgb2JqZWN0IHNpZ25lZCB3aXRoIEdQRworIAorLWxpbms6Z2l0LXJwdWxsLmh0bWxbZ2l0LXJwdWxsXTo6CisrbGluazpnaXQtc3NoLXB1bGwuaHRtbFtnaXQtc3NoLXB1bGxdOjoKKyAJUHVsbHMgZnJvbSBhIHJlbW90ZSByZXBvc2l0b3J5IG92ZXIgc3NoIGNvbm5lY3Rpb24KKyAKKyBJbnRlcm9nYXRvcnM6CitAQCAtMTU2LDggKzE1Niw4IEBAIEludGVyb2dhdG9yczoKKyBsaW5rOmdpdC1kaWZmLWhlbHBlci5odG1sW2dpdC1kaWZmLWhlbHBlcl06OgorIAlHZW5lcmF0ZXMgcGF0Y2ggZm9ybWF0IG91dHB1dCBmb3IgZ2l0LWRpZmYtKgorIAorLWxpbms6Z2l0LXJwdXNoLmh0bWxbZ2l0LXJwdXNoXTo6CistCUhlbHBlciAic2VydmVyLXNpZGUiIHByb2dyYW0gdXNlZCBieSBnaXQtcnB1bGwKKytsaW5rOmdpdC1zc2gtcHVzaC5odG1sW2dpdC1zc2gtcHVzaF06OgorKwlIZWxwZXIgInNlcnZlci1zaWRlIiBwcm9ncmFtIHVzZWQgYnkgZ2l0LXNzaC1wdWxsCisgCisgCisgCitkaWZmIGEvTWFrZWZpbGUgYi9NYWtlZmlsZQorLS0tIGEvTWFrZWZpbGUKKysrKyBiL01ha2VmaWxlCitAQCAtMzAsNyArMzAsNyBAQCBQUk9HPSAgIGdpdC11cGRhdGUtaW5kZXggZ2l0LWRpZmYtZmlsZXMKKyAJZ2l0LWNoZWNrb3V0LWNhY2hlIGdpdC1kaWZmLXRyZWUgZ2l0LXJldi10cmVlIGdpdC1scy1maWxlcyBcCisgCWdpdC1jaGVjay1maWxlcyBnaXQtbHMtdHJlZSBnaXQtbWVyZ2UtYmFzZSBnaXQtbWVyZ2UtY2FjaGUgXAorIAlnaXQtdW5wYWNrLWZpbGUgZ2l0LWV4cG9ydCBnaXQtZGlmZi1jYWNoZSBnaXQtY29udmVydC1jYWNoZSBcCistCWdpdC1odHRwLXB1bGwgZ2l0LXJwdXNoIGdpdC1ycHVsbCBnaXQtcmV2LWxpc3QgZ2l0LW1rdGFnIFwKKysJZ2l0LWh0dHAtcHVsbCBnaXQtc3NoLXB1c2ggZ2l0LXNzaC1wdWxsIGdpdC1yZXYtbGlzdCBnaXQtbWt0YWcgXAorIAlnaXQtZGlmZi1oZWxwZXIgZ2l0LXRhci10cmVlIGdpdC1sb2NhbC1wdWxsIGdpdC13cml0ZS1ibG9iIFwKKyAJZ2l0LWdldC10YXItY29tbWl0LWlkIGdpdC1ta2RlbHRhIGdpdC1hcHBseSBnaXQtc3RyaXBzcGFjZQorIAorQEAgLTEwNSw4ICsxMDUsOCBAQCBnaXQtZGlmZi1jYWNoZTogZGlmZi1jYWNoZS5jCisgZ2l0LWNvbnZlcnQtY2FjaGU6IGNvbnZlcnQtY2FjaGUuYworIGdpdC1odHRwLXB1bGw6IGh0dHAtcHVsbC5jIHB1bGwuYworIGdpdC1sb2NhbC1wdWxsOiBsb2NhbC1wdWxsLmMgcHVsbC5jCistZ2l0LXJwdXNoOiByc2guYworLWdpdC1ycHVsbDogcnNoLmMgcHVsbC5jCisrZ2l0LXNzaC1wdXNoOiByc2guYworK2dpdC1zc2gtcHVsbDogcnNoLmMgcHVsbC5jCisgZ2l0LXJldi1saXN0OiByZXYtbGlzdC5jCisgZ2l0LW1rdGFnOiBta3RhZy5jCisgZ2l0LWRpZmYtaGVscGVyOiBkaWZmLWhlbHBlci5jCitkaWZmIGEvcnB1bGwuYyBiL3JwdWxsLmMKKy0tLSBhL3JwdWxsLmMKKysrKyAvZGV2L251bGwKK0BAIC0xLDgzICswLDAgQEAKKy0jaW5jbHVkZSAiY2FjaGUuaCIKKy0jaW5jbHVkZSAiY29tbWl0LmgiCistI2luY2x1ZGUgInJzaC5oIgorLSNpbmNsdWRlICJwdWxsLmgiCistCistc3RhdGljIGludCBmZF9pbjsKKy1zdGF0aWMgaW50IGZkX291dDsKKy0KKy1zdGF0aWMgdW5zaWduZWQgY2hhciByZW1vdGVfdmVyc2lvbiA9IDA7Cistc3RhdGljIHVuc2lnbmVkIGNoYXIgbG9jYWxfdmVyc2lvbiA9IDE7CistCistaW50IGZldGNoKHVuc2lnbmVkIGNoYXIgKnNoYTEpCisteworLQlpbnQgcmV0OworLQlzaWduZWQgY2hhciByZW1vdGU7CistCWNoYXIgdHlwZSA9ICdvJzsKKy0JaWYgKGhhc19zaGExX2ZpbGUoc2hhMSkpCistCQlyZXR1cm4gMDsKKy0Jd3JpdGUoZmRfb3V0LCAmdHlwZSwgMSk7CistCXdyaXRlKGZkX291dCwgc2hhMSwgMjApOworLQlpZiAocmVhZChmZF9pbiwgJnJlbW90ZSwgMSkgPCAxKQorLQkJcmV0dXJuIC0xOworLQlpZiAocmVtb3RlIDwgMCkKKy0JCXJldHVybiByZW1vdGU7CistCXJldCA9IHdyaXRlX3NoYTFfZnJvbV9mZChzaGExLCBmZF9pbik7CistCWlmICghcmV0KQorLQkJcHVsbF9zYXkoImdvdCAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworLQlyZXR1cm4gcmV0OworLX0KKy0KKy1pbnQgZ2V0X3ZlcnNpb24odm9pZCkKKy17CistCWNoYXIgdHlwZSA9ICd2JzsKKy0Jd3JpdGUoZmRfb3V0LCAmdHlwZSwgMSk7CistCXdyaXRlKGZkX291dCwgJmxvY2FsX3ZlcnNpb24sIDEpOworLQlpZiAocmVhZChmZF9pbiwgJnJlbW90ZV92ZXJzaW9uLCAxKSA8IDEpIHsKKy0JCXJldHVybiBlcnJvcigiQ291bGRuJ3QgcmVhZCB2ZXJzaW9uIGZyb20gcmVtb3RlIGVuZCIpOworLQl9CistCXJldHVybiAwOworLX0KKy0KKy1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisteworLQljaGFyICpjb21taXRfaWQ7CistCWNoYXIgKnVybDsKKy0JaW50IGFyZyA9IDE7CistCistCXdoaWxlIChhcmcgPCBhcmdjICYmIGFyZ3ZbYXJnXVswXSA9PSAnLScpIHsKKy0JCWlmIChhcmd2W2FyZ11bMV0gPT0gJ3QnKSB7CistCQkJZ2V0X3RyZWUgPSAxOworLQkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2MnKSB7CistCQkJZ2V0X2hpc3RvcnkgPSAxOworLQkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2QnKSB7CistCQkJZ2V0X2RlbHRhID0gMDsKKy0JCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2FyZ10sICItLXJlY292ZXIiKSkgeworLQkJCWdldF9kZWx0YSA9IDI7CistCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAnYScpIHsKKy0JCQlnZXRfYWxsID0gMTsKKy0JCQlnZXRfdHJlZSA9IDE7CistCQkJZ2V0X2hpc3RvcnkgPSAxOworLQkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ3YnKSB7CistCQkJZ2V0X3ZlcmJvc2VseSA9IDE7CistCQl9CistCQlhcmcrKzsKKy0JfQorLQlpZiAoYXJnYyA8IGFyZyArIDIpIHsKKy0JCXVzYWdlKCJnaXQtcnB1bGwgWy1jXSBbLXRdIFstYV0gWy12XSBbLWRdIFstLXJlY292ZXJdIGNvbW1pdC1pZCB1cmwiKTsKKy0JCXJldHVybiAxOworLQl9CistCWNvbW1pdF9pZCA9IGFyZ3ZbYXJnXTsKKy0JdXJsID0gYXJndlthcmcgKyAxXTsKKy0KKy0JaWYgKHNldHVwX2Nvbm5lY3Rpb24oJmZkX2luLCAmZmRfb3V0LCAiZ2l0LXJwdXNoIiwgdXJsLCBhcmcsIGFyZ3YgKyAxKSkKKy0JCXJldHVybiAxOworLQorLQlpZiAoZ2V0X3ZlcnNpb24oKSkKKy0JCXJldHVybiAxOworLQorLQlpZiAocHVsbChjb21taXRfaWQpKQorLQkJcmV0dXJuIDE7CistCistCXJldHVybiAwOworLX0KK2RpZmYgYS9ycHVzaC5jIGIvcnB1c2guYworLS0tIGEvcnB1c2guYworKysrIC9kZXYvbnVsbAorQEAgLTEsMTA0ICswLDAgQEAKKy0jaW5jbHVkZSAiY2FjaGUuaCIKKy0jaW5jbHVkZSAicnNoLmgiCistI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKy0jaW5jbHVkZSA8ZXJybm8uaD4KKy0KKy11bnNpZ25lZCBjaGFyIGxvY2FsX3ZlcnNpb24gPSAxOworLXVuc2lnbmVkIGNoYXIgcmVtb3RlX3ZlcnNpb24gPSAwOworLQorLWludCBzZXJ2ZV9vYmplY3QoaW50IGZkX2luLCBpbnQgZmRfb3V0KSB7CistCXNzaXplX3Qgc2l6ZTsKKy0JaW50IHBvc24gPSAwOworLQljaGFyIHNoYTFbMjBdOworLQl1bnNpZ25lZCBsb25nIG9ianNpemU7CistCXZvaWQgKmJ1ZjsKKy0Jc2lnbmVkIGNoYXIgcmVtb3RlOworLQlkbyB7CistCQlzaXplID0gcmVhZChmZF9pbiwgc2hhMSArIHBvc24sIDIwIC0gcG9zbik7CistCQlpZiAoc2l6ZSA8IDApIHsKKy0JCQlwZXJyb3IoImdpdC1ycHVzaDogcmVhZCAiKTsKKy0JCQlyZXR1cm4gLTE7CistCQl9CistCQlpZiAoIXNpemUpCistCQkJcmV0dXJuIC0xOworLQkJcG9zbiArPSBzaXplOworLQl9IHdoaWxlIChwb3NuIDwgMjApOworLQkKKy0JLyogZnByaW50ZihzdGRlcnIsICJTZXJ2aW5nICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7ICovCistCXJlbW90ZSA9IDA7CistCQorLQlidWYgPSBtYXBfc2hhMV9maWxlKHNoYTEsICZvYmpzaXplKTsKKy0JCistCWlmICghYnVmKSB7CistCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1ycHVzaDogY291bGQgbm90IGZpbmQgJXNcbiIsIAorLQkJCXNoYTFfdG9faGV4KHNoYTEpKTsKKy0JCXJlbW90ZSA9IC0xOworLQl9CistCQorLQl3cml0ZShmZF9vdXQsICZyZW1vdGUsIDEpOworLQkKKy0JaWYgKHJlbW90ZSA8IDApCistCQlyZXR1cm4gMDsKKy0JCistCXBvc24gPSAwOworLQlkbyB7CistCQlzaXplID0gd3JpdGUoZmRfb3V0LCBidWYgKyBwb3NuLCBvYmpzaXplIC0gcG9zbik7CistCQlpZiAoc2l6ZSA8PSAwKSB7CistCQkJaWYgKCFzaXplKSB7CistCQkJCWZwcmludGYoc3RkZXJyLCAiZ2l0LXJwdXNoOiB3cml0ZSBjbG9zZWQiKTsKKy0JCQl9IGVsc2UgeworLQkJCQlwZXJyb3IoImdpdC1ycHVzaDogd3JpdGUgIik7CistCQkJfQorLQkJCXJldHVybiAtMTsKKy0JCX0KKy0JCXBvc24gKz0gc2l6ZTsKKy0JfSB3aGlsZSAocG9zbiA8IG9ianNpemUpOworLQlyZXR1cm4gMDsKKy19CistCistaW50IHNlcnZlX3ZlcnNpb24oaW50IGZkX2luLCBpbnQgZmRfb3V0KQorLXsKKy0JaWYgKHJlYWQoZmRfaW4sICZyZW1vdGVfdmVyc2lvbiwgMSkgPCAxKQorLQkJcmV0dXJuIC0xOworLQl3cml0ZShmZF9vdXQsICZsb2NhbF92ZXJzaW9uLCAxKTsKKy0JcmV0dXJuIDA7CistfQorLQorLXZvaWQgc2VydmljZShpbnQgZmRfaW4sIGludCBmZF9vdXQpIHsKKy0JY2hhciB0eXBlOworLQlpbnQgcmV0dmFsOworLQlkbyB7CistCQlyZXR2YWwgPSByZWFkKGZkX2luLCAmdHlwZSwgMSk7CistCQlpZiAocmV0dmFsIDwgMSkgeworLQkJCWlmIChyZXR2YWwgPCAwKQorLQkJCQlwZXJyb3IoInJwdXNoOiByZWFkICIpOworLQkJCXJldHVybjsKKy0JCX0KKy0JCWlmICh0eXBlID09ICd2JyAmJiBzZXJ2ZV92ZXJzaW9uKGZkX2luLCBmZF9vdXQpKQorLQkJCXJldHVybjsKKy0JCWlmICh0eXBlID09ICdvJyAmJiBzZXJ2ZV9vYmplY3QoZmRfaW4sIGZkX291dCkpCistCQkJcmV0dXJuOworLQl9IHdoaWxlICgxKTsKKy19CistCistaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorLXsKKy0JaW50IGFyZyA9IDE7CistICAgICAgICBjaGFyICpjb21taXRfaWQ7CistICAgICAgICBjaGFyICp1cmw7CistCWludCBmZF9pbiwgZmRfb3V0OworLQl3aGlsZSAoYXJnIDwgYXJnYyAmJiBhcmd2W2FyZ11bMF0gPT0gJy0nKSB7CistICAgICAgICAgICAgICAgIGFyZysrOworLSAgICAgICAgfQorLSAgICAgICAgaWYgKGFyZ2MgPCBhcmcgKyAyKSB7CistCQl1c2FnZSgiZ2l0LXJwdXNoIFstY10gWy10XSBbLWFdIGNvbW1pdC1pZCB1cmwiKTsKKy0gICAgICAgICAgICAgICAgcmV0dXJuIDE7CistICAgICAgICB9CistCWNvbW1pdF9pZCA9IGFyZ3ZbYXJnXTsKKy0JdXJsID0gYXJndlthcmcgKyAxXTsKKy0JaWYgKHNldHVwX2Nvbm5lY3Rpb24oJmZkX2luLCAmZmRfb3V0LCAiZ2l0LXJwdWxsIiwgdXJsLCBhcmcsIGFyZ3YgKyAxKSkKKy0JCXJldHVybiAxOworLQorLQlzZXJ2aWNlKGZkX2luLCBmZF9vdXQpOworLQlyZXR1cm4gMDsKKy19CitkaWZmIGEvc3NoLXB1bGwuYyBiL3NzaC1wdWxsLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL3NzaC1wdWxsLmMKK0BAIC0wLDAgKzEsODMgQEAKKysjaW5jbHVkZSAiY2FjaGUuaCIKKysjaW5jbHVkZSAiY29tbWl0LmgiCisrI2luY2x1ZGUgInJzaC5oIgorKyNpbmNsdWRlICJwdWxsLmgiCisrCisrc3RhdGljIGludCBmZF9pbjsKKytzdGF0aWMgaW50IGZkX291dDsKKysKKytzdGF0aWMgdW5zaWduZWQgY2hhciByZW1vdGVfdmVyc2lvbiA9IDA7Cisrc3RhdGljIHVuc2lnbmVkIGNoYXIgbG9jYWxfdmVyc2lvbiA9IDE7CisrCisraW50IGZldGNoKHVuc2lnbmVkIGNoYXIgKnNoYTEpCisreworKwlpbnQgcmV0OworKwlzaWduZWQgY2hhciByZW1vdGU7CisrCWNoYXIgdHlwZSA9ICdvJzsKKysJaWYgKGhhc19zaGExX2ZpbGUoc2hhMSkpCisrCQlyZXR1cm4gMDsKKysJd3JpdGUoZmRfb3V0LCAmdHlwZSwgMSk7CisrCXdyaXRlKGZkX291dCwgc2hhMSwgMjApOworKwlpZiAocmVhZChmZF9pbiwgJnJlbW90ZSwgMSkgPCAxKQorKwkJcmV0dXJuIC0xOworKwlpZiAocmVtb3RlIDwgMCkKKysJCXJldHVybiByZW1vdGU7CisrCXJldCA9IHdyaXRlX3NoYTFfZnJvbV9mZChzaGExLCBmZF9pbik7CisrCWlmICghcmV0KQorKwkJcHVsbF9zYXkoImdvdCAlc1xuIiwgc2hhMV90b19oZXgoc2hhMSkpOworKwlyZXR1cm4gcmV0OworK30KKysKKytpbnQgZ2V0X3ZlcnNpb24odm9pZCkKKyt7CisrCWNoYXIgdHlwZSA9ICd2JzsKKysJd3JpdGUoZmRfb3V0LCAmdHlwZSwgMSk7CisrCXdyaXRlKGZkX291dCwgJmxvY2FsX3ZlcnNpb24sIDEpOworKwlpZiAocmVhZChmZF9pbiwgJnJlbW90ZV92ZXJzaW9uLCAxKSA8IDEpIHsKKysJCXJldHVybiBlcnJvcigiQ291bGRuJ3QgcmVhZCB2ZXJzaW9uIGZyb20gcmVtb3RlIGVuZCIpOworKwl9CisrCXJldHVybiAwOworK30KKysKKytpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisreworKwljaGFyICpjb21taXRfaWQ7CisrCWNoYXIgKnVybDsKKysJaW50IGFyZyA9IDE7CisrCisrCXdoaWxlIChhcmcgPCBhcmdjICYmIGFyZ3ZbYXJnXVswXSA9PSAnLScpIHsKKysJCWlmIChhcmd2W2FyZ11bMV0gPT0gJ3QnKSB7CisrCQkJZ2V0X3RyZWUgPSAxOworKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2MnKSB7CisrCQkJZ2V0X2hpc3RvcnkgPSAxOworKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ2QnKSB7CisrCQkJZ2V0X2RlbHRhID0gMDsKKysJCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2W2FyZ10sICItLXJlY292ZXIiKSkgeworKwkJCWdldF9kZWx0YSA9IDI7CisrCQl9IGVsc2UgaWYgKGFyZ3ZbYXJnXVsxXSA9PSAnYScpIHsKKysJCQlnZXRfYWxsID0gMTsKKysJCQlnZXRfdHJlZSA9IDE7CisrCQkJZ2V0X2hpc3RvcnkgPSAxOworKwkJfSBlbHNlIGlmIChhcmd2W2FyZ11bMV0gPT0gJ3YnKSB7CisrCQkJZ2V0X3ZlcmJvc2VseSA9IDE7CisrCQl9CisrCQlhcmcrKzsKKysJfQorKwlpZiAoYXJnYyA8IGFyZyArIDIpIHsKKysJCXVzYWdlKCJnaXQtc3NoLXB1bGwgWy1jXSBbLXRdIFstYV0gWy12XSBbLWRdIFstLXJlY292ZXJdIGNvbW1pdC1pZCB1cmwiKTsKKysJCXJldHVybiAxOworKwl9CisrCWNvbW1pdF9pZCA9IGFyZ3ZbYXJnXTsKKysJdXJsID0gYXJndlthcmcgKyAxXTsKKysKKysJaWYgKHNldHVwX2Nvbm5lY3Rpb24oJmZkX2luLCAmZmRfb3V0LCAiZ2l0LXNzaC1wdXNoIiwgdXJsLCBhcmcsIGFyZ3YgKyAxKSkKKysJCXJldHVybiAxOworKworKwlpZiAoZ2V0X3ZlcnNpb24oKSkKKysJCXJldHVybiAxOworKworKwlpZiAocHVsbChjb21taXRfaWQpKQorKwkJcmV0dXJuIDE7CisrCisrCXJldHVybiAwOworK30KK2RpZmYgYS9zc2gtcHVzaC5jIGIvc3NoLXB1c2guYworLS0tIC9kZXYvbnVsbAorKysrIGIvc3NoLXB1c2guYworQEAgLTAsMCArMSwxMDQgQEAKKysjaW5jbHVkZSAiY2FjaGUuaCIKKysjaW5jbHVkZSAicnNoLmgiCisrI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKysjaW5jbHVkZSA8ZXJybm8uaD4KKysKKyt1bnNpZ25lZCBjaGFyIGxvY2FsX3ZlcnNpb24gPSAxOworK3Vuc2lnbmVkIGNoYXIgcmVtb3RlX3ZlcnNpb24gPSAwOworKworK2ludCBzZXJ2ZV9vYmplY3QoaW50IGZkX2luLCBpbnQgZmRfb3V0KSB7CisrCXNzaXplX3Qgc2l6ZTsKKysJaW50IHBvc24gPSAwOworKwljaGFyIHNoYTFbMjBdOworKwl1bnNpZ25lZCBsb25nIG9ianNpemU7CisrCXZvaWQgKmJ1ZjsKKysJc2lnbmVkIGNoYXIgcmVtb3RlOworKwlkbyB7CisrCQlzaXplID0gcmVhZChmZF9pbiwgc2hhMSArIHBvc24sIDIwIC0gcG9zbik7CisrCQlpZiAoc2l6ZSA8IDApIHsKKysJCQlwZXJyb3IoImdpdC1zc2gtcHVzaDogcmVhZCAiKTsKKysJCQlyZXR1cm4gLTE7CisrCQl9CisrCQlpZiAoIXNpemUpCisrCQkJcmV0dXJuIC0xOworKwkJcG9zbiArPSBzaXplOworKwl9IHdoaWxlIChwb3NuIDwgMjApOworKwkKKysJLyogZnByaW50ZihzdGRlcnIsICJTZXJ2aW5nICVzXG4iLCBzaGExX3RvX2hleChzaGExKSk7ICovCisrCXJlbW90ZSA9IDA7CisrCQorKwlidWYgPSBtYXBfc2hhMV9maWxlKHNoYTEsICZvYmpzaXplKTsKKysJCisrCWlmICghYnVmKSB7CisrCQlmcHJpbnRmKHN0ZGVyciwgImdpdC1zc2gtcHVzaDogY291bGQgbm90IGZpbmQgJXNcbiIsIAorKwkJCXNoYTFfdG9faGV4KHNoYTEpKTsKKysJCXJlbW90ZSA9IC0xOworKwl9CisrCQorKwl3cml0ZShmZF9vdXQsICZyZW1vdGUsIDEpOworKwkKKysJaWYgKHJlbW90ZSA8IDApCisrCQlyZXR1cm4gMDsKKysJCisrCXBvc24gPSAwOworKwlkbyB7CisrCQlzaXplID0gd3JpdGUoZmRfb3V0LCBidWYgKyBwb3NuLCBvYmpzaXplIC0gcG9zbik7CisrCQlpZiAoc2l6ZSA8PSAwKSB7CisrCQkJaWYgKCFzaXplKSB7CisrCQkJCWZwcmludGYoc3RkZXJyLCAiZ2l0LXNzaC1wdXNoOiB3cml0ZSBjbG9zZWQiKTsKKysJCQl9IGVsc2UgeworKwkJCQlwZXJyb3IoImdpdC1zc2gtcHVzaDogd3JpdGUgIik7CisrCQkJfQorKwkJCXJldHVybiAtMTsKKysJCX0KKysJCXBvc24gKz0gc2l6ZTsKKysJfSB3aGlsZSAocG9zbiA8IG9ianNpemUpOworKwlyZXR1cm4gMDsKKyt9CisrCisraW50IHNlcnZlX3ZlcnNpb24oaW50IGZkX2luLCBpbnQgZmRfb3V0KQorK3sKKysJaWYgKHJlYWQoZmRfaW4sICZyZW1vdGVfdmVyc2lvbiwgMSkgPCAxKQorKwkJcmV0dXJuIC0xOworKwl3cml0ZShmZF9vdXQsICZsb2NhbF92ZXJzaW9uLCAxKTsKKysJcmV0dXJuIDA7CisrfQorKworK3ZvaWQgc2VydmljZShpbnQgZmRfaW4sIGludCBmZF9vdXQpIHsKKysJY2hhciB0eXBlOworKwlpbnQgcmV0dmFsOworKwlkbyB7CisrCQlyZXR2YWwgPSByZWFkKGZkX2luLCAmdHlwZSwgMSk7CisrCQlpZiAocmV0dmFsIDwgMSkgeworKwkJCWlmIChyZXR2YWwgPCAwKQorKwkJCQlwZXJyb3IoImdpdC1zc2gtcHVzaDogcmVhZCAiKTsKKysJCQlyZXR1cm47CisrCQl9CisrCQlpZiAodHlwZSA9PSAndicgJiYgc2VydmVfdmVyc2lvbihmZF9pbiwgZmRfb3V0KSkKKysJCQlyZXR1cm47CisrCQlpZiAodHlwZSA9PSAnbycgJiYgc2VydmVfb2JqZWN0KGZkX2luLCBmZF9vdXQpKQorKwkJCXJldHVybjsKKysJfSB3aGlsZSAoMSk7CisrfQorKworK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyt7CisrCWludCBhcmcgPSAxOworKyAgICAgICAgY2hhciAqY29tbWl0X2lkOworKyAgICAgICAgY2hhciAqdXJsOworKwlpbnQgZmRfaW4sIGZkX291dDsKKysJd2hpbGUgKGFyZyA8IGFyZ2MgJiYgYXJndlthcmddWzBdID09ICctJykgeworKyAgICAgICAgICAgICAgICBhcmcrKzsKKysgICAgICAgIH0KKysgICAgICAgIGlmIChhcmdjIDwgYXJnICsgMikgeworKwkJdXNhZ2UoImdpdC1zc2gtcHVzaCBbLWNdIFstdF0gWy1hXSBjb21taXQtaWQgdXJsIik7CisrICAgICAgICAgICAgICAgIHJldHVybiAxOworKyAgICAgICAgfQorKwljb21taXRfaWQgPSBhcmd2W2FyZ107CisrCXVybCA9IGFyZ3ZbYXJnICsgMV07CisrCWlmIChzZXR1cF9jb25uZWN0aW9uKCZmZF9pbiwgJmZkX291dCwgImdpdC1zc2gtcHVsbCIsIHVybCwgYXJnLCBhcmd2ICsgMSkpCisrCQlyZXR1cm4gMTsKKysKKysJc2VydmljZShmZF9pbiwgZmRfb3V0KTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDEwMC90LWFwcGx5LTYuZXhwZWN0IGIvdC90NDEwMC90LWFwcGx5LTYuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMzQzZDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNi5leHBlY3QKQEAgLTAsMCArMSw1IEBACisgTWFrZWZpbGUgICAgICAgICB8ICAgIDIgKy0KKyBnaXQtZmV0Y2gtc2NyaXB0IHwgICA0MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworIGdpdC1wdWxsLXNjcmlwdCAgfCAgIDM0ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAzIGZpbGVzIGNoYW5nZWQsIDQzIGluc2VydGlvbnMoKyksIDM0IGRlbGV0aW9ucygtKQorIGNyZWF0ZSBnaXQtZmV0Y2gtc2NyaXB0CmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNi5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS02LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MjcyOWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNi5wYXRjaApAQCAtMCwwICsxLDEwMSBAQAorZGlmZiBhL01ha2VmaWxlIGIvTWFrZWZpbGUKKy0tLSBhL01ha2VmaWxlCisrKysgYi9NYWtlZmlsZQorQEAgLTIwLDcgKzIwLDcgQEAgSU5TVEFMTD1pbnN0YWxsCisgCisgU0NSSVBUUz1naXQtYXBwbHktcGF0Y2gtc2NyaXB0IGdpdC1tZXJnZS1vbmUtZmlsZS1zY3JpcHQgZ2l0LXBydW5lLXNjcmlwdCBcCisgCWdpdC1wdWxsLXNjcmlwdCBnaXQtdGFnLXNjcmlwdCBnaXQtcmVzb2x2ZS1zY3JpcHQgZ2l0LXdoYXRjaGFuZ2VkIFwKKy0JZ2l0LWRlbHRhZnktc2NyaXB0CisrCWdpdC1kZWx0YWZ5LXNjcmlwdCBnaXQtZmV0Y2gtc2NyaXB0CisgCisgUFJPRz0gICBnaXQtdXBkYXRlLWluZGV4IGdpdC1kaWZmLWZpbGVzIGdpdC1pbml0LWRiIGdpdC13cml0ZS10cmVlIFwKKyAJZ2l0LXJlYWQtdHJlZSBnaXQtY29tbWl0LXRyZWUgZ2l0LWNhdC1maWxlIGdpdC1mc2NrLWNhY2hlIFwKK2RpZmYgYS9naXQtZmV0Y2gtc2NyaXB0IGIvZ2l0LWZldGNoLXNjcmlwdAorLS0tIC9kZXYvbnVsbAorKysrIGIvZ2l0LWZldGNoLXNjcmlwdAorQEAgLTAsMCArMSw0MSBAQAorKyMhL2Jpbi9zaAorKyMKKyttZXJnZV9yZXBvPSQxCisrbWVyZ2VfbmFtZT0kezI6LUhFQUR9CisrCisrOiAke0dJVF9ESVI9LmdpdH0KKys6ICR7R0lUX09CSkVDVF9ESVJFQ1RPUlk9IiR7U0hBMV9GSUxFX0RJUkVDVE9SWS0iJEdJVF9ESVIvb2JqZWN0cyJ9In0KKysKKytkb3dubG9hZF9vbmUgKCkgeworKwkjIHJlbW90ZV9wYXRoPSIkMSIgbG9jYWxfZmlsZT0iJDIiCisrCWNhc2UgIiQxIiBpbgorKwlodHRwOi8vKikKKysJCXdnZXQgLXEgLU8gIiQyIiAiJDEiIDs7CisrCS8qKQorKwkJdGVzdCAtZiAiJDEiICYmIGNhdCA+IiQyIiAiJDEiIDs7CisrCSopCisrCQlyc3luYyAtTCAiJDEiICIkMiIgOzsKKysJZXNhYworK30KKysKKytkb3dubG9hZF9vYmplY3RzICgpIHsKKysJIyByZW1vdGVfcmVwbz0iJDEiIGhlYWRfc2hhMT0iJDIiCisrCWNhc2UgIiQxIiBpbgorKwlodHRwOi8vKikKKysJCWdpdC1odHRwLXB1bGwgLWEgIiQyIiAiJDEvIgorKwkJOzsKKysJLyopCisrCQlnaXQtbG9jYWwtcHVsbCAtbCAtYSAiJDIiICIkMS8iCisrCQk7OworKwkqKQorKwkJcnN5bmMgLWF2eiAtLWlnbm9yZS1leGlzdGluZyBcCisrCQkJIiQxL29iamVjdHMvLiIgIiRHSVRfT0JKRUNUX0RJUkVDVE9SWSIvLgorKwkJOzsKKysJZXNhYworK30KKysKKytlY2hvICJHZXR0aW5nIHJlbW90ZSAkbWVyZ2VfbmFtZSIKKytkb3dubG9hZF9vbmUgIiRtZXJnZV9yZXBvLyRtZXJnZV9uYW1lIiAiJEdJVF9ESVIiL01FUkdFX0hFQUQKKysKKytlY2hvICJHZXR0aW5nIG9iamVjdCBkYXRhYmFzZSIKKytkb3dubG9hZF9vYmplY3RzICIkbWVyZ2VfcmVwbyIgIiQoY2F0ICIkR0lUX0RJUiIvTUVSR0VfSEVBRCkiCitkaWZmIGEvZ2l0LXB1bGwtc2NyaXB0IGIvZ2l0LXB1bGwtc2NyaXB0CistLS0gYS9naXQtcHVsbC1zY3JpcHQKKysrKyBiL2dpdC1wdWxsLXNjcmlwdAorQEAgLTYsMzkgKzYsNyBAQCBtZXJnZV9uYW1lPSR7MjotSEVBRH0KKyA6ICR7R0lUX0RJUj0uZ2l0fQorIDogJHtHSVRfT0JKRUNUX0RJUkVDVE9SWT0iJHtTSEExX0ZJTEVfRElSRUNUT1JZLSIkR0lUX0RJUi9vYmplY3RzIn0ifQorIAorLWRvd25sb2FkX29uZSAoKSB7CistCSMgcmVtb3RlX3BhdGg9IiQxIiBsb2NhbF9maWxlPSIkMiIKKy0JY2FzZSAiJDEiIGluCistCWh0dHA6Ly8qKQorLQkJd2dldCAtcSAtTyAiJDIiICIkMSIgOzsKKy0JLyopCistCQl0ZXN0IC1mICIkMSIgJiYgY2F0ID4iJDIiICIkMSIgOzsKKy0JKikKKy0JCXJzeW5jIC1MICIkMSIgIiQyIiA7OworLQllc2FjCistfQorLQorLWRvd25sb2FkX29iamVjdHMgKCkgeworLQkjIHJlbW90ZV9yZXBvPSIkMSIgaGVhZF9zaGExPSIkMiIKKy0JY2FzZSAiJDEiIGluCistCWh0dHA6Ly8qKQorLQkJZ2l0LWh0dHAtcHVsbCAtYSAiJDIiICIkMS8iCistCQk7OworLQkvKikKKy0JCWdpdC1sb2NhbC1wdWxsIC1sIC1hICIkMiIgIiQxLyIKKy0JCTs7CistCSopCistCQlyc3luYyAtYXZ6IC0taWdub3JlLWV4aXN0aW5nIFwKKy0JCQkiJDEvb2JqZWN0cy8uIiAiJEdJVF9PQkpFQ1RfRElSRUNUT1JZIi8uCistCQk7OworLQllc2FjCistfQorLQorLWVjaG8gIkdldHRpbmcgcmVtb3RlICRtZXJnZV9uYW1lIgorLWRvd25sb2FkX29uZSAiJG1lcmdlX3JlcG8vJG1lcmdlX25hbWUiICIkR0lUX0RJUiIvTUVSR0VfSEVBRAorLQorLWVjaG8gIkdldHRpbmcgb2JqZWN0IGRhdGFiYXNlIgorLWRvd25sb2FkX29iamVjdHMgIiRtZXJnZV9yZXBvIiAiJChjYXQgIiRHSVRfRElSIi9NRVJHRV9IRUFEKSIKKytnaXQtZmV0Y2gtc2NyaXB0ICIkbWVyZ2VfcmVwbyIgIiRtZXJnZV9uYW1lIgorIAorIGdpdC1yZXNvbHZlLXNjcmlwdCBcCisgCSIkKGNhdCAiJEdJVF9ESVIiL0hFQUQpIiBcCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNy5leHBlY3QgYi90L3Q0MTAwL3QtYXBwbHktNy5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4MzE2NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS03LmV4cGVjdApAQCAtMCwwICsxLDYgQEAKKyBEb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dCB8ICAgMjAgKy0KKyBscy10cmVlLmMgICAgICAgICAgICAgICAgICAgICB8ICAzMzMgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KKyB0L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2ggICB8ICAgIDMgCisgdHJlZS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyIAorIHRyZWUuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAKKyA1IGZpbGVzIGNoYW5nZWQsIDE5OSBpbnNlcnRpb25zKCspLCAxNjAgZGVsZXRpb25zKC0pCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS03LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YzY1ODkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktNy5wYXRjaApAQCAtMCwwICsxLDQ5NCBAQAorZGlmZiBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9naXQtbHMtdHJlZS50eHQKKy0tLSBhL0RvY3VtZW50YXRpb24vZ2l0LWxzLXRyZWUudHh0CisrKysgYi9Eb2N1bWVudGF0aW9uL2dpdC1scy10cmVlLnR4dAorQEAgLTQsMjMgKzQsMjYgQEAgdjAuMSwgTWF5IDIwMDUKKyAKKyBOQU1FCisgLS0tLQorLWdpdC1scy10cmVlIC0gRGlzcGxheXMgYSB0cmVlIG9iamVjdCBpbiBodW1hbiByZWFkYWJsZSBmb3JtCisrZ2l0LWxzLXRyZWUgLSBMaXN0cyB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdC4KKyAKKyAKKyBTWU5PUFNJUworIC0tLS0tLS0tCistJ2dpdC1scy10cmVlJyBbLXJdIFstel0gPHRyZWUtaXNoPiBbcGF0aHMuLi5dCisrJ2dpdC1scy10cmVlJyBbLWRdIFstcl0gWy16XSA8dHJlZS1pc2g+IFtwYXRocy4uLl0KKyAKKyBERVNDUklQVElPTgorIC0tLS0tLS0tLS0tCistQ29udmVydHMgdGhlIHRyZWUgb2JqZWN0IHRvIGEgaHVtYW4gcmVhZGFibGUgKGFuZCBzY3JpcHQgcHJvY2Vzc2FibGUpCistZm9ybS4KKytMaXN0cyB0aGUgY29udGVudHMgb2YgYSB0cmVlIG9iamVjdCwgbGlrZSB3aGF0ICIvYmluL2xzIC1hIiBkb2VzCisraW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgCisgT1BUSU9OUworIC0tLS0tLS0KKyA8dHJlZS1pc2g+OjoKKyAJSWQgb2YgYSB0cmVlLgorIAorKy1kOjoKKysJc2hvdyBvbmx5IHRoZSBuYW1lZCB0cmVlIGVudHJ5IGl0c2VsZiwgbm90IGl0cyBjaGlsZHJlbgorKworIC1yOjoKKyAJcmVjdXJzZSBpbnRvIHN1Yi10cmVlcworIAorQEAgLTI4LDE4ICszMSwxOSBAQCBPUFRJT05TCisgCVwwIGxpbmUgdGVybWluYXRpb24gb24gb3V0cHV0CisgCisgcGF0aHM6OgorLQlPcHRpb25hbGx5LCByZXN0cmljdCB0aGUgb3V0cHV0IG9mIGdpdC1scy10cmVlIHRvIHNwZWNpZmljCistCXBhdGhzLiBEaXJlY3RvcmllcyB3aWxsIG9ubHkgbGlzdCB0aGVpciB0cmVlIGJsb2IgaWRzLgorLQlJbXBsaWVzIC1yLgorKwlXaGVuIHBhdGhzIGFyZSBnaXZlbiwgc2hvd3MgdGhlbS4gIE90aGVyd2lzZSBpbXBsaWNpdGx5CisrCXVzZXMgdGhlIHJvb3QgbGV2ZWwgb2YgdGhlIHRyZWUgYXMgdGhlIHNvbGUgcGF0aCBhcmd1bWVudC4KKysKKyAKKyBPdXRwdXQgRm9ybWF0CisgLS0tLS0tLS0tLS0tLQorLSAgICAgICAgPG1vZGU+XHQJPHR5cGU+XHQJPG9iamVjdD5cdAk8ZmlsZT4KKysgICAgICAgIDxtb2RlPiBTUCA8dHlwZT4gU1AgPG9iamVjdD4gVEFCIDxmaWxlPgorIAorIAorIEF1dGhvcgorIC0tLS0tLQorIFdyaXR0ZW4gYnkgTGludXMgVG9ydmFsZHMgPHRvcnZhbGRzQG9zZGwub3JnPgorK0NvbXBsZXRlbHkgcmV3cml0dGVuIGZyb20gc2NyYXRjaCBieSBKdW5pbyBDIEhhbWFubyA8anVua2lvQGNveC5uZXQ+CisgCisgRG9jdW1lbnRhdGlvbgorIC0tLS0tLS0tLS0tLS0tCitkaWZmIGEvbHMtdHJlZS5jIGIvbHMtdHJlZS5jCistLS0gYS9scy10cmVlLmMKKysrKyBiL2xzLXRyZWUuYworQEAgLTQsMTg4ICs0LDIxNyBAQAorICAqIENvcHlyaWdodCAoQykgTGludXMgVG9ydmFsZHMsIDIwMDUKKyAgKi8KKyAjaW5jbHVkZSAiY2FjaGUuaCIKKysjaW5jbHVkZSAiYmxvYi5oIgorKyNpbmNsdWRlICJ0cmVlLmgiCisgCisgc3RhdGljIGludCBsaW5lX3Rlcm1pbmF0aW9uID0gJ1xuJzsKKy1zdGF0aWMgaW50IHJlY3Vyc2l2ZSA9IDA7CisrI2RlZmluZSBMU19SRUNVUlNJVkUgMQorKyNkZWZpbmUgTFNfVFJFRV9PTkxZIDIKKytzdGF0aWMgaW50IGxzX29wdGlvbnMgPSAwOworIAorLXN0cnVjdCBwYXRoX3ByZWZpeCB7CistCXN0cnVjdCBwYXRoX3ByZWZpeCAqcHJldjsKKy0JY29uc3QgY2hhciAqbmFtZTsKKy19OworLQorLSNkZWZpbmUgREVCVUcoZm10LCAuLi4pCQorLQorLXN0YXRpYyBpbnQgc3RyaW5nX3BhdGhfcHJlZml4KGNoYXIgKmJ1ZmYsIHNpemVfdCBibGVuLCBzdHJ1Y3QgcGF0aF9wcmVmaXggKnByZWZpeCkKKy17CistCWludCBsZW4gPSAwOworLQlpZiAocHJlZml4KSB7CistCQlpZiAocHJlZml4LT5wcmV2KSB7CistCQkJbGVuID0gc3RyaW5nX3BhdGhfcHJlZml4KGJ1ZmYsYmxlbixwcmVmaXgtPnByZXYpOworLQkJCWJ1ZmYgKz0gbGVuOworLQkJCWJsZW4gLT0gbGVuOworLQkJCWlmIChibGVuID4gMCkgeworLQkJCQkqYnVmZiA9ICcvJzsKKy0JCQkJbGVuKys7CistCQkJCWJ1ZmYrKzsKKy0JCQkJYmxlbi0tOworLQkJCX0KKy0JCX0KKy0JCXN0cm5jcHkoYnVmZixwcmVmaXgtPm5hbWUsYmxlbik7CistCQlyZXR1cm4gbGVuICsgc3RybGVuKHByZWZpeC0+bmFtZSk7CistCX0KKytzdGF0aWMgc3RydWN0IHRyZWVfZW50cnlfbGlzdCByb290X2VudHJ5OworIAorLQlyZXR1cm4gMDsKKytzdGF0aWMgdm9pZCBwcmVwYXJlX3Jvb3QodW5zaWduZWQgY2hhciAqc2hhMSkKKyt7CisrCXVuc2lnbmVkIGNoYXIgcnNoYVsyMF07CisrCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKysJdm9pZCAqYnVmOworKwlzdHJ1Y3QgdHJlZSAqcm9vdF90cmVlOworKworKwlidWYgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShzaGExLCAidHJlZSIsICZzaXplLCByc2hhKTsKKysJZnJlZShidWYpOworKwlpZiAoIWJ1ZikKKysJCWRpZSgiQ291bGQgbm90IHJlYWQgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisrCisrCXJvb3RfdHJlZSA9IGxvb2t1cF90cmVlKHJzaGEpOworKwlpZiAoIXJvb3RfdHJlZSkKKysJCWRpZSgiQ291bGQgbm90IHJlYWQgJXMiLCBzaGExX3RvX2hleChzaGExKSk7CisrCisrCS8qIFByZXBhcmUgYSBmYWtlIGVudHJ5ICovCisrCXJvb3RfZW50cnkuZGlyZWN0b3J5ID0gMTsKKysJcm9vdF9lbnRyeS5leGVjdXRhYmxlID0gcm9vdF9lbnRyeS5zeW1saW5rID0gMDsKKysJcm9vdF9lbnRyeS5tb2RlID0gU19JRkRJUjsKKysJcm9vdF9lbnRyeS5uYW1lID0gIiI7CisrCXJvb3RfZW50cnkuaXRlbS50cmVlID0gcm9vdF90cmVlOworKwlyb290X2VudHJ5LnBhcmVudCA9IE5VTEw7CisgfQorIAorLXN0YXRpYyB2b2lkIHByaW50X3BhdGhfcHJlZml4KHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4KQorK3N0YXRpYyBpbnQgcHJlcGFyZV9jaGlsZHJlbihzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICplbGVtKQorIHsKKy0JaWYgKHByZWZpeCkgeworLQkJaWYgKHByZWZpeC0+cHJldikgeworLQkJCXByaW50X3BhdGhfcHJlZml4KHByZWZpeC0+cHJldik7CistCQkJcHV0Y2hhcignLycpOworLQkJfQorLQkJZnB1dHMocHJlZml4LT5uYW1lLCBzdGRvdXQpOworKwlpZiAoIWVsZW0tPmRpcmVjdG9yeSkKKysJCXJldHVybiAtMTsKKysJaWYgKCFlbGVtLT5pdGVtLnRyZWUtPm9iamVjdC5wYXJzZWQpIHsKKysJCXN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmU7CisrCQlpZiAocGFyc2VfdHJlZShlbGVtLT5pdGVtLnRyZWUpKQorKwkJCXJldHVybiAtMTsKKysJCS8qIFNldCB1cCB0aGUgcGFyZW50IGxpbmsgKi8KKysJCWZvciAoZSA9IGVsZW0tPml0ZW0udHJlZS0+ZW50cmllczsgZTsgZSA9IGUtPm5leHQpCisrCQkJZS0+cGFyZW50ID0gZWxlbTsKKyAJfQorKwlyZXR1cm4gMDsKKyB9CisgCistLyoKKy0gKiByZXR1cm46CistICogCS0xIGlmIHByZWZpeCBpcyAqbm90KiBhIHN1YnNldCBvZiBwYXRoCistICogCSAwIGlmIHByZWZpeCA9PSBwYXRoCistICogCSAxIGlmIHByZWZpeCBpcyBhIHN1YnNldCBvZiBwYXRoCistICovCistc3RhdGljIGludCBwYXRoY21wKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4KQorLXsKKy0JY2hhciBidWZmW1BBVEhfTUFYXTsKKy0JaW50IGxlbixzbGVuOworK3N0YXRpYyBzdHJ1Y3QgdHJlZV9lbnRyeV9saXN0ICpmaW5kX2VudHJ5XzAoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZWxlbSwKKysJCQkJCSAgICBjb25zdCBjaGFyICpwYXRoLAorKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdGhfZW5kKQorK3sKKysJY29uc3QgY2hhciAqZXA7CisrCWludCBsZW47CisrCisrCXdoaWxlIChwYXRoIDwgcGF0aF9lbmQpIHsKKysJCWlmIChwcmVwYXJlX2NoaWxkcmVuKGVsZW0pKQorKwkJCXJldHVybiBOVUxMOworIAorLQlpZiAocHJlZml4ID09IE5VTEwpCistCQlyZXR1cm4gMTsKKysJCS8qIEluIGVsZW0tPnRyZWUtPmVudHJpZXMsIGZpbmQgdGhlIG9uZSB0aGF0IGhhcyBuYW1lCisrCQkgKiB0aGF0IG1hdGNoZXMgd2hhdCBpcyBiZXR3ZWVuIHBhdGggYW5kIGVwLgorKwkJICovCisrCQllbGVtID0gZWxlbS0+aXRlbS50cmVlLT5lbnRyaWVzOworIAorLQlsZW4gPSBzdHJpbmdfcGF0aF9wcmVmaXgoYnVmZiwgc2l6ZW9mIGJ1ZmYsIHByZWZpeCk7CistCXNsZW4gPSBzdHJsZW4ocGF0aCk7CisrCQllcCA9IHN0cmNocihwYXRoLCAnLycpOworKwkJaWYgKCFlcCB8fCBwYXRoX2VuZCA8PSBlcCkKKysJCQllcCA9IHBhdGhfZW5kOworKwkJbGVuID0gZXAgLSBwYXRoOworKworKwkJd2hpbGUgKGVsZW0pIHsKKysJCQlpZiAoKHN0cmxlbihlbGVtLT5uYW1lKSA9PSBsZW4pICYmCisrCQkJICAgICFzdHJuY21wKGVsZW0tPm5hbWUsIHBhdGgsIGxlbikpCisrCQkJCWJyZWFrOworKwkJCWVsZW0gPSBlbGVtLT5uZXh0OworKwkJfQorKwkJaWYgKHBhdGhfZW5kIDw9IGVwIHx8ICFlbGVtKQorKwkJCXJldHVybiBlbGVtOworKwkJd2hpbGUgKCplcCA9PSAnLycgJiYgZXAgPCBwYXRoX2VuZCkKKysJCQllcCsrOworKwkJcGF0aCA9IGVwOworKwl9CisrCXJldHVybiBOVUxMOworK30KKyAKKy0JaWYgKHNsZW4gPCBsZW4pCistCQlyZXR1cm4gLTE7Cisrc3RhdGljIHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmZpbmRfZW50cnkoY29uc3QgY2hhciAqcGF0aCwKKysJCQkJCSAgY29uc3QgY2hhciAqcGF0aF9lbmQpCisreworKwkvKiBGaW5kIHRyZWUgZWxlbWVudCwgZGVzY2VuZGluZyBmcm9tIHJvb3QsIHRoYXQKKysJICogY29ycmVzcG9uZHMgdG8gdGhlIG5hbWVkIHBhdGgsIGxhemlseSBleHBhbmRpbmcKKysJICogdGhlIHRyZWUgaWYgcG9zc2libGUuCisrCSAqLworKwlpZiAocGF0aCA9PSBwYXRoX2VuZCkgeworKwkJLyogU3BlY2lhbC4gIFRoaXMgaXMgdGhlIHJvb3QgbGV2ZWwgKi8KKysJCXJldHVybiAmcm9vdF9lbnRyeTsKKysJfQorKwlyZXR1cm4gZmluZF9lbnRyeV8wKCZyb290X2VudHJ5LCBwYXRoLCBwYXRoX2VuZCk7CisrfQorIAorLQlpZiAoc3RybmNtcChwYXRoLGJ1ZmYsbGVuKSA9PSAwKSB7CistCQlpZiAoc2xlbiA9PSBsZW4pCistCQkJcmV0dXJuIDA7CistCQllbHNlCistCQkJcmV0dXJuIDE7Cisrc3RhdGljIHZvaWQgc2hvd19lbnRyeV9uYW1lKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUpCisreworKwkvKiBUaGlzIGlzIHl1Y2t5LiAgVGhlIHJvb3QgbGV2ZWwgaXMgdGhlcmUgZm9yCisrCSAqIG91ciBjb252ZW5pZW5jZSBidXQgd2UgcmVhbGx5IHdhbnQgdG8gZG8gYQorKwkgKiBmb3Jlc3QuCisrCSAqLworKwlpZiAoZS0+cGFyZW50ICYmIGUtPnBhcmVudCAhPSAmcm9vdF9lbnRyeSkgeworKwkJc2hvd19lbnRyeV9uYW1lKGUtPnBhcmVudCk7CisrCQlwdXRjaGFyKCcvJyk7CisgCX0KKysJcHJpbnRmKCIlcyIsIGUtPm5hbWUpOworK30KKyAKKy0JcmV0dXJuIC0xOworLX0JCisrc3RhdGljIGNvbnN0IGNoYXIgKmVudHJ5X3R5cGUoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSkKKyt7CisrCXJldHVybiAoZS0+ZGlyZWN0b3J5ID8gInRyZWUiIDogImJsb2IiKTsKKyt9CisgCistLyoKKy0gKiBtYXRjaCBtYXkgYmUgTlVMTCwgb3IgYSAqc29ydGVkKiBsaXN0IG9mIHBhdGhzCistICovCistc3RhdGljIHZvaWQgbGlzdF9yZWN1cnNpdmUodm9pZCAqYnVmZmVyLAorLQkJCSAgIGNvbnN0IGNoYXIgKnR5cGUsCistCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLAorLQkJCSAgIHN0cnVjdCBwYXRoX3ByZWZpeCAqcHJlZml4LAorLQkJCSAgIGNoYXIgKiptYXRjaCwgaW50IG1hdGNoZXMpCisteworLQlzdHJ1Y3QgcGF0aF9wcmVmaXggdGhpc19wcmVmaXg7CistCXRoaXNfcHJlZml4LnByZXYgPSBwcmVmaXg7CistCistCWlmIChzdHJjbXAodHlwZSwgInRyZWUiKSkKKy0JCWRpZSgiZXhwZWN0ZWQgYSAndHJlZScgbm9kZSIpOworLQorLQlpZiAobWF0Y2hlcykKKy0JCXJlY3Vyc2l2ZSA9IDE7CistCistCXdoaWxlIChzaXplKSB7CistCQlpbnQgbmFtZWxlbiA9IHN0cmxlbihidWZmZXIpKzE7CistCQl2b2lkICplbHRidWYgPSBOVUxMOworLQkJY2hhciBlbHR0eXBlWzIwXTsKKy0JCXVuc2lnbmVkIGxvbmcgZWx0c2l6ZTsKKy0JCXVuc2lnbmVkIGNoYXIgKnNoYTEgPSBidWZmZXIgKyBuYW1lbGVuOworLQkJY2hhciAqcGF0aCA9IHN0cmNocihidWZmZXIsICcgJykgKyAxOworLQkJdW5zaWduZWQgaW50IG1vZGU7CistCQljb25zdCBjaGFyICptYXRjaGVkID0gTlVMTDsKKy0JCWludCBtdHlwZSA9IC0xOworLQkJaW50IG1pbmRleDsKKy0KKy0JCWlmIChzaXplIDwgbmFtZWxlbiArIDIwIHx8IHNzY2FuZihidWZmZXIsICIlbyIsICZtb2RlKSAhPSAxKQorLQkJCWRpZSgiY29ycnVwdCAndHJlZScgZmlsZSIpOworLQkJYnVmZmVyID0gc2hhMSArIDIwOworLQkJc2l6ZSAtPSBuYW1lbGVuICsgMjA7CistCistCQl0aGlzX3ByZWZpeC5uYW1lID0gcGF0aDsKKy0JCWZvciAoIG1pbmRleCA9IDA7IG1pbmRleCA8IG1hdGNoZXM7IG1pbmRleCsrKSB7CistCQkJbXR5cGUgPSBwYXRoY21wKG1hdGNoW21pbmRleF0sJnRoaXNfcHJlZml4KTsKKy0JCQlpZiAobXR5cGUgPj0gMCkgeworLQkJCQltYXRjaGVkID0gbWF0Y2hbbWluZGV4XTsKKy0JCQkJYnJlYWs7CistCQkJfQorLQkJfQorK3N0YXRpYyBjb25zdCBjaGFyICplbnRyeV9oZXgoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSkKKyt7CisrCXJldHVybiBzaGExX3RvX2hleChlLT5kaXJlY3RvcnkKKysJCQkgICA/IGUtPml0ZW0udHJlZS0+b2JqZWN0LnNoYTEKKysJCQkgICA6IGUtPml0ZW0uYmxvYi0+b2JqZWN0LnNoYTEpOworK30KKyAKKy0JCS8qCistCQkgKiBJZiB3ZSdyZSBub3QgbWF0Y2hpbmcsIG9yIGlmIHRoaXMgaXMgYW4gZXhhY3QgbWF0Y2gsCistCQkgKiBwcmludCBvdXQgdGhlIGluZm8KKy0JCSAqLworLQkJaWYgKCFtYXRjaGVzIHx8IChtYXRjaGVkICE9IE5VTEwgJiYgbXR5cGUgPT0gMCkpIHsKKy0JCQlwcmludGYoIiUwNm8gJXMgJXNcdCIsIG1vZGUsCistCQkJICAgICAgIFNfSVNESVIobW9kZSkgPyAidHJlZSIgOiAiYmxvYiIsCistCQkJICAgICAgIHNoYTFfdG9faGV4KHNoYTEpKTsKKy0JCQlwcmludF9wYXRoX3ByZWZpeCgmdGhpc19wcmVmaXgpOworLQkJCXB1dGNoYXIobGluZV90ZXJtaW5hdGlvbik7CistCQl9CisrLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgbXV0dWFsbHkgcmVjdXJzaXZlIHJvdXRpbmVzICovCisrc3RhdGljIGludCBzaG93X2VudHJ5KHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKiwgaW50KTsKKyAKKy0JCWlmICghIHJlY3Vyc2l2ZSB8fCAhIFNfSVNESVIobW9kZSkpCistCQkJY29udGludWU7Cisrc3RhdGljIGludCBzaG93X2NoaWxkcmVuKHN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKmUsIGludCBsZXZlbCkKKyt7CisrCWlmIChwcmVwYXJlX2NoaWxkcmVuKGUpKQorKwkJZGllKCJpbnRlcm5hbCBlcnJvcjogbHMtdHJlZSBzaG93X2NoaWxkcmVuIGNhbGxlZCB3aXRoIG5vbiB0cmVlIik7CisrCWUgPSBlLT5pdGVtLnRyZWUtPmVudHJpZXM7CisrCXdoaWxlIChlKSB7CisrCQlzaG93X2VudHJ5KGUsIGxldmVsKTsKKysJCWUgPSBlLT5uZXh0OworKwl9CisrCXJldHVybiAwOworK30KKyAKKy0JCWlmIChtYXRjaGVzICYmICEgbWF0Y2hlZCkKKy0JCQljb250aW51ZTsKKytzdGF0aWMgaW50IHNob3dfZW50cnkoc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSwgaW50IGxldmVsKQorK3sKKysJaW50IGVyciA9IDA7IAorIAorLQkJaWYgKCEgKGVsdGJ1ZiA9IHJlYWRfc2hhMV9maWxlKHNoYTEsIGVsdHR5cGUsICZlbHRzaXplKSkgKSB7CistCQkJZXJyb3IoImNhbm5vdCByZWFkICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworLQkJCWNvbnRpbnVlOworLQkJfQorKwlpZiAoZSAhPSAmcm9vdF9lbnRyeSkgeworKwkJcHJpbnRmKCIlMDZvICVzICVzCSIsIGUtPm1vZGUsIGVudHJ5X3R5cGUoZSksCisrCQkgICAgICAgZW50cnlfaGV4KGUpKTsKKysJCXNob3dfZW50cnlfbmFtZShlKTsKKysJCXB1dGNoYXIobGluZV90ZXJtaW5hdGlvbik7CisrCX0KKyAKKy0JCS8qIElmIHRoaXMgaXMgYW4gZXhhY3QgZGlyZWN0b3J5IG1hdGNoLCB3ZSBtYXkgaGF2ZQorLQkJICogZGlyZWN0b3J5IGZpbGVzIGZvbGxvd2luZyB0aGlzIHBhdGguIE1hdGNoIG9uIHRoZW0uCistCQkgKiBPdGhlcndpc2UsIHdlJ3JlIGF0IGEgcGFjaCBzdWJjb21wb25lbnQsIGFuZCB3ZSBuZWVkCistCQkgKiB0byB0cnkgdG8gbWF0Y2ggYWdhaW4uCisrCWlmIChlLT5kaXJlY3RvcnkpIHsKKysJCS8qIElmIHRoaXMgaXMgYSBkaXJlY3RvcnksIHdlIGhhdmUgdGhlIGZvbGxvd2luZyBjYXNlczoKKysJCSAqICgxKSBUaGlzIGlzIHRoZSB0b3AtbGV2ZWwgcmVxdWVzdCAoZXhwbGljaXQgcGF0aCBmcm9tIHRoZQorKwkJICogICAgIGNvbW1hbmQgbGluZSwgb3IgInJvb3QiIGlmIHRoZXJlIGlzIG5vIGNvbW1hbmQgbGluZSkuCisrCQkgKiAgYS4gV2l0aG91dCBhbnkgZmxhZy4gIFdlIHNob3cgZGlyZWN0IGNoaWxkcmVuLiAgV2UgZG8gbm90IAorKwkJICogICAgIHJlY3Vyc2UgaW50byB0aGVtLgorKwkJICogIGIuIFdpdGggLXIuICBXZSBkbyByZWN1cnNlIGludG8gY2hpbGRyZW4uCisrCQkgKiAgYy4gV2l0aCAtZC4gIFdlIGRvIG5vdCByZWN1cnNlIGludG8gY2hpbGRyZW4uCisrCQkgKiAoMikgV2UgY2FtZSBoZXJlIGJlY2F1c2Ugb3VyIGNhbGxlciBpcyBlaXRoZXIgKDEtYSkgb3IKKysJCSAqICAgICAoMS1iKS4KKysJCSAqICBhLiBXaXRob3V0IGFueSBmbGFnLiAgV2UgZG8gbm90IHNob3cgb3VyIGNoaWxkcmVuICh3aGljaAorKwkJICogICAgIGFyZSBncmFuZGNoaWxkcmVuIGZvciB0aGUgb3JpZ2luYWwgcmVxdWVzdCkuCisrCQkgKiAgYi4gV2l0aCAtci4gIFdlIGNvbnRpbnVlIHRvIHJlY3Vyc2UgaW50byBvdXIgY2hpbGRyZW4uCisrCQkgKiAgYy4gV2l0aCAtZC4gIFdlIHNob3VsZCBub3QgaGF2ZSBjb21lIGhlcmUgdG8gYmVnaW4gd2l0aC4KKyAJCSAqLworLQkJaWYgKG10eXBlID09IDApCistCQkJbWluZGV4Kys7CistCistCQlsaXN0X3JlY3Vyc2l2ZShlbHRidWYsIGVsdHR5cGUsIGVsdHNpemUsICZ0aGlzX3ByZWZpeCwgJm1hdGNoW21pbmRleF0sIG1hdGNoZXMtbWluZGV4KTsKKy0JCWZyZWUoZWx0YnVmKTsKKysJCWlmIChsZXZlbCA9PSAwICYmICEobHNfb3B0aW9ucyAmIExTX1RSRUVfT05MWSkpCisrCQkJLyogY2FzZSAoMSktYSBhbmQgKDEpLWIgKi8KKysJCQllcnIgPSBlcnIgfCBzaG93X2NoaWxkcmVuKGUsIGxldmVsKzEpOworKwkJZWxzZSBpZiAobGV2ZWwgJiYgbHNfb3B0aW9ucyAmIExTX1JFQ1VSU0lWRSkKKysJCQkvKiBjYXNlICgyKS1iICovCisrCQkJZXJyID0gZXJyIHwgc2hvd19jaGlsZHJlbihlLCBsZXZlbCsxKTsKKyAJfQorKwlyZXR1cm4gZXJyOworIH0KKyAKKy1zdGF0aWMgaW50IHFjbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKKytzdGF0aWMgaW50IGxpc3Rfb25lKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKnBhdGhfZW5kKQorIHsKKy0JcmV0dXJuIHN0cmNtcCgqKGNoYXIgKiopYSwgKihjaGFyICoqKWIpOworKwlpbnQgZXJyID0gMDsKKysJc3RydWN0IHRyZWVfZW50cnlfbGlzdCAqZSA9IGZpbmRfZW50cnkocGF0aCwgcGF0aF9lbmQpOworKwlpZiAoIWUpIHsKKysJCS8qIHRyYWRpdGlvbmFsbHkgbHMtdHJlZSBkb2VzIG5vdCBjb21wbGFpbiBhYm91dAorKwkJICogbWlzc2luZyBwYXRoLiAgV2UgbWF5IGNoYW5nZSB0aGlzIGxhdGVyIHRvIG1hdGNoCisrCQkgKiB3aGF0ICIvYmluL2xzIC1hIiBkb2VzLCB3aGljaCBpcyB0byBjb21wbGFpbi4KKysJCSAqLworKwkJcmV0dXJuIGVycjsKKysJfQorKwllcnIgPSBlcnIgfCBzaG93X2VudHJ5KGUsIDApOworKwlyZXR1cm4gZXJyOworIH0KKyAKKy1zdGF0aWMgaW50IGxpc3QodW5zaWduZWQgY2hhciAqc2hhMSxjaGFyICoqcGF0aCkKKytzdGF0aWMgaW50IGxpc3QoY2hhciAqKnBhdGgpCisgeworLQl2b2lkICpidWZmZXI7CistCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKy0JaW50IG5wYXRoczsKKy0KKy0JZm9yIChucGF0aHMgPSAwOyBwYXRoW25wYXRoc10gIT0gTlVMTDsgbnBhdGhzKyspCistCQk7CistCistCXFzb3J0KHBhdGgsbnBhdGhzLHNpemVvZihjaGFyICopLHFjbXApOworLQorLQlidWZmZXIgPSByZWFkX29iamVjdF93aXRoX3JlZmVyZW5jZShzaGExLCAidHJlZSIsICZzaXplLCBOVUxMKTsKKy0JaWYgKCFidWZmZXIpCistCQlkaWUoInVuYWJsZSB0byByZWFkIHNoYTEgZmlsZSIpOworLQlsaXN0X3JlY3Vyc2l2ZShidWZmZXIsICJ0cmVlIiwgc2l6ZSwgTlVMTCwgcGF0aCwgbnBhdGhzKTsKKy0JZnJlZShidWZmZXIpOworLQlyZXR1cm4gMDsKKysJaW50IGk7CisrCWludCBlcnIgPSAwOworKwlmb3IgKGkgPSAwOyBwYXRoW2ldOyBpKyspIHsKKysJCWludCBsZW4gPSBzdHJsZW4ocGF0aFtpXSk7CisrCQl3aGlsZSAoMCA8PSBsZW4gJiYgcGF0aFtpXVtsZW5dID09ICcvJykKKysJCQlsZW4tLTsKKysJCWVyciA9IGVyciB8IGxpc3Rfb25lKHBhdGhbaV0sIHBhdGhbaV0gKyBsZW4pOworKwl9CisrCXJldHVybiBlcnI7CisgfQorIAorLXN0YXRpYyBjb25zdCBjaGFyICpsc190cmVlX3VzYWdlID0gImdpdC1scy10cmVlIFstcl0gWy16XSA8a2V5PiBbcGF0aHMuLi5dIjsKKytzdGF0aWMgY29uc3QgY2hhciAqbHNfdHJlZV91c2FnZSA9CisrCSJnaXQtbHMtdHJlZSBbLWRdIFstcl0gWy16XSA8dHJlZS1pc2g+IFtwYXRoLi4uXSI7CisgCisgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorIHsKKysJc3RhdGljIGNoYXIgKnBhdGgwW10gPSB7ICIiLCBOVUxMIH07CisrCWNoYXIgKipwYXRoOworIAl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworIAorIAl3aGlsZSAoMSA8IGFyZ2MgJiYgYXJndlsxXVswXSA9PSAnLScpIHsKK0BAIC0xOTQsNyArMjIzLDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKKyAJCQlsaW5lX3Rlcm1pbmF0aW9uID0gMDsKKyAJCQlicmVhazsKKyAJCWNhc2UgJ3InOgorLQkJCXJlY3Vyc2l2ZSA9IDE7CisrCQkJbHNfb3B0aW9ucyB8PSBMU19SRUNVUlNJVkU7CisrCQkJYnJlYWs7CisrCQljYXNlICdkJzoKKysJCQlsc19vcHRpb25zIHw9IExTX1RSRUVfT05MWTsKKyAJCQlicmVhazsKKyAJCWRlZmF1bHQ6CisgCQkJdXNhZ2UobHNfdHJlZV91c2FnZSk7CitAQCAtMjA2LDcgKzIzOCwxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisgCQl1c2FnZShsc190cmVlX3VzYWdlKTsKKyAJaWYgKGdldF9zaGExKGFyZ3ZbMV0sIHNoYTEpIDwgMCkKKyAJCXVzYWdlKGxzX3RyZWVfdXNhZ2UpOworLQlpZiAobGlzdChzaGExLCAmYXJndlsyXSkgPCAwKQorKworKwlwYXRoID0gKGFyZ2MgPT0gMikgPyBwYXRoMCA6IChhcmd2ICsgMik7CisrCXByZXBhcmVfcm9vdChzaGExKTsKKysJaWYgKGxpc3QocGF0aCkgPCAwKQorIAkJZGllKCJsaXN0IGZhaWxlZCIpOworIAlyZXR1cm4gMDsKKyB9CitkaWZmIGEvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoIGIvdC90MzEwMC1scy10cmVlLXJlc3RyaWN0LnNoCistLS0gYS90L3QzMTAwLWxzLXRyZWUtcmVzdHJpY3Quc2gKKysrKyBiL3QvdDMxMDAtbHMtdHJlZS1yZXN0cmljdC5zaAorQEAgLTc0LDggKzc0LDggQEAgdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICdscy10cmVlIGZpbHRlcmVkJyBcCisgICAgICdnaXQtbHMtdHJlZSAkdHJlZSBwYXRoMSBwYXRoMCA+Y3VycmVudCAmJgorICAgICAgY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKy0xMDA2NDQgYmxvYiBYCXBhdGgwCisgMTIwMDAwIGJsb2IgWAlwYXRoMQorKzEwMDY0NCBibG9iIFgJcGF0aDAKKyBFT0YKKyAgICAgIHRlc3Rfb3V0cHV0JworIAorQEAgLTg1LDcgKzg1LDYgQEAgdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICBjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorIDA0MDAwMCB0cmVlIFgJcGF0aDIKKyAwNDAwMDAgdHJlZSBYCXBhdGgyL2JhegorLTEwMDY0NCBibG9iIFgJcGF0aDIvYmF6L2IKKyAxMjAwMDAgYmxvYiBYCXBhdGgyL2JhemJvCisgMTAwNjQ0IGJsb2IgWAlwYXRoMi9mb28KKyBFT0YKK2RpZmYgYS90cmVlLmMgYi90cmVlLmMKKy0tLSBhL3RyZWUuYworKysrIGIvdHJlZS5jCitAQCAtMTMzLDcgKzEzMyw3IEBAIGludCBwYXJzZV90cmVlX2J1ZmZlcihzdHJ1Y3QgdHJlZSAqaXRlbSwKKyAJCX0KKyAJCWlmIChvYmopCisgCQkJYWRkX3JlZigmaXRlbS0+b2JqZWN0LCBvYmopOworLQorKwkJZW50cnktPnBhcmVudCA9IE5VTEw7IC8qIG5lZWRzIHRvIGJlIGZpbGxlZCBieSB0aGUgdXNlciAqLworIAkJKmxpc3RfcCA9IGVudHJ5OworIAkJbGlzdF9wID0gJmVudHJ5LT5uZXh0OworIAl9CitkaWZmIGEvdHJlZS5oIGIvdHJlZS5oCistLS0gYS90cmVlLmgKKysrKyBiL3RyZWUuaAorQEAgLTE2LDYgKzE2LDcgQEAgc3RydWN0IHRyZWVfZW50cnlfbGlzdCB7CisgCQlzdHJ1Y3QgdHJlZSAqdHJlZTsKKyAJCXN0cnVjdCBibG9iICpibG9iOworIAl9IGl0ZW07CisrCXN0cnVjdCB0cmVlX2VudHJ5X2xpc3QgKnBhcmVudDsKKyB9OworIAorIHN0cnVjdCB0cmVlIHsKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS04LmV4cGVjdCBiL3QvdDQxMDAvdC1hcHBseS04LmV4cGVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWE1NWMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMC90LWFwcGx5LTguZXhwZWN0CkBAIC0wLDAgKzEsMiBAQAorIHQvdDQxMDAtYXBwbHktc3RhdC5zaCB8ICAgIDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKZGlmZiAtLWdpdCBhL3QvdDQxMDAvdC1hcHBseS04LnBhdGNoIGIvdC90NDEwMC90LWFwcGx5LTgucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhMTNlNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS04LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLS1naXQgYS90L3Q0MTAwLWFwcGx5LXN0YXQuc2ggYi90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKK2luZGV4IGJlODM3YmIuLjA3OThjNjQgMTAwNzU1CistLS0gYS90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKKysrKyBiL3QvdDQxMDAtYXBwbHktc3RhdC5zaAorQEAgLTM1LDQgKzM1LDQgQEAgbm9uIGdpdCAoMikKKyBub24gZ2l0ICgzKQorIEVPRgorIAorLXRlc3RfZG9uZQorK3Rlc3RfZG9uZQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktOS5leHBlY3QgYi90L3Q0MTAwL3QtYXBwbHktOS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhNTVjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDAvdC1hcHBseS05LmV4cGVjdApAQCAtMCwwICsxLDIgQEAKKyB0L3Q0MTAwLWFwcGx5LXN0YXQuc2ggfCAgICAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCmRpZmYgLS1naXQgYS90L3Q0MTAwL3QtYXBwbHktOS5wYXRjaCBiL3QvdDQxMDAvdC1hcHBseS05LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NWQ1N2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAwL3QtYXBwbHktOS5wYXRjaApAQCAtMCwwICsxLDExIEBACitkaWZmIC0tZ2l0IGEvdC90NDEwMC1hcHBseS1zdGF0LnNoIGIvdC90NDEwMC1hcHBseS1zdGF0LnNoCitpbmRleCAwNzk4YzY0Li5iZTgzN2JiIDEwMDc1NQorLS0tIGEvdC90NDEwMC1hcHBseS1zdGF0LnNoCisrKysgYi90L3Q0MTAwLWFwcGx5LXN0YXQuc2gKK0BAIC0zNSw0ICszNSw0IEBAIG5vbiBnaXQgKDIpCisgbm9uIGdpdCAoMykKKyBFT0YKKyAKKy10ZXN0X2RvbmUKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwMS1hcHBseS1ub25sLnNoIGIvdC90NDEwMS1hcHBseS1ub25sLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUzNDQzZDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxLWFwcGx5LW5vbmwuc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgc2hvdWxkIGhhbmRsZSBmaWxlcyB3aXRoIGluY29tcGxldGUgbGluZXMuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCisjIHNldHVwCisKKyhlY2hvIGE7IGVjaG8gYikgPmZyb3R6LjAKKyhlY2hvIGE7IGVjaG8gYjsgZWNobyBjKSA+ZnJvdHouMQorKGVjaG8gYTsgZWNobyBiIHwgdHIgLWQgJ1wwMTInKSA+ZnJvdHouMgorKGVjaG8gYTsgZWNobyBjOyBlY2hvIGIgfCB0ciAtZCAnXDAxMicpID5mcm90ei4zCisKK2ZvciBpIGluIDAgMSAyIDMKK2RvCisgIGZvciBqIGluIDAgMSAyIDMKKyAgZG8KKyAgICB0ZXN0ICRpIC1lcSAkaiAmJiBjb250aW51ZQorICAgIGNhdCBmcm90ei4kaSA+ZnJvdHoKKyAgICB0ZXN0X2V4cGVjdF9zdWNjZXNzICJhcHBseSBkaWZmIGJldHdlZW4gJGkgYW5kICRqIiAnCisJZ2l0IGFwcGx5IDwiJFRFU1RfRElSRUNUT1JZIi90NDEwMS9kaWZmLiRpLSRqICYmCisJdGVzdF9jbXAgZnJvdHouJGogZnJvdHoKKyAgICAnCisgIGRvbmUKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMC0xIGIvdC90NDEwMS9kaWZmLjAtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDEwYTg4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjAtMQpAQCAtMCwwICsxLDYgQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMiArMSwzIEBACisgYQorIGIKKytjCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMC0yIGIvdC90NDEwMS9kaWZmLjAtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjQ2MGEyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjAtMgpAQCAtMCwwICsxLDcgQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMiArMSwyIEBACisgYQorLWIKKytiCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4wLTMgYi90L3Q0MTAxL2RpZmYuMC0zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODFjNDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMC0zCkBAIC0wLDAgKzEsOCBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwyICsxLDMgQEAKKyBhCistYgorK2MKKytiCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4xLTAgYi90L3Q0MTAxL2RpZmYuMS0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYTJlOTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMS0wCkBAIC0wLDAgKzEsNiBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwzICsxLDIgQEAKKyBhCisgYgorLWMKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4xLTIgYi90L3Q0MTAxL2RpZmYuMS0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNDQwYTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMS0yCkBAIC0wLDAgKzEsOCBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwzICsxLDIgQEAKKyBhCistYgorLWMKKytiCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4xLTMgYi90L3Q0MTAxL2RpZmYuMS0zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYWZmOTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMS0zCkBAIC0wLDAgKzEsOCBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwzICsxLDMgQEAKKyBhCistYgorIGMKKytiCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDQxMDEvZGlmZi4yLTAgYi90L3Q0MTAxL2RpZmYuMi0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTcxZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTAxL2RpZmYuMi0wCkBAIC0wLDAgKzEsNyBAQAorLS0tIGEvZnJvdHoKKysrKyBiL2Zyb3R6CitAQCAtMSwyICsxLDIgQEAKKyBhCistYgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrYgpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjItMSBiL3QvdDQxMDEvZGlmZi4yLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY2ZDlmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4yLTEKQEAgLTAsMCArMSw4IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDIgKzEsMyBAQAorIGEKKy1iCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKytiCisrYwpkaWZmIC0tZ2l0IGEvdC90NDEwMS9kaWZmLjItMyBiL3QvdDQxMDEvZGlmZi4yLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzM2M4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDEvZGlmZi4yLTMKQEAgLTAsMCArMSw3IEBACistLS0gYS9mcm90egorKysrIGIvZnJvdHoKK0BAIC0xLDIgKzEsMyBAQAorIGEKKytjCisgYgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMy0wIGIvdC90NDEwMS9kaWZmLjMtMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGIxYTQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjMtMApAQCAtMCwwICsxLDggQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMyArMSwyIEBACisgYQorLWMKKy1iCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKytiCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMy0xIGIvdC90NDEwMS9kaWZmLjMtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzk5YzYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjMtMQpAQCAtMCwwICsxLDggQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMyArMSwzIEBACisgYQorK2IKKyBjCistYgorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90L3Q0MTAxL2RpZmYuMy0yIGIvdC90NDEwMS9kaWZmLjMtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGQxYmE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMS9kaWZmLjMtMgpAQCAtMCwwICsxLDcgQEAKKy0tLSBhL2Zyb3R6CisrKysgYi9mcm90egorQEAgLTEsMyArMSwyIEBACisgYQorLWMKKyBiCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3QvdDQxMDItYXBwbHktcmVuYW1lLnNoIGIvdC90NDEwMi1hcHBseS1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmFlMzA1OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDItYXBwbHktcmVuYW1lLnNoCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IGhhbmRsaW5nIGNvcHkvcmVuYW1lIHBhdGNoLgorCisnCisuIC4vdGVzdC1saWIuc2gKKworIyBzZXR1cAorCitjYXQgPnRlc3QtcGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvZm9vIGIvYmFyCitzaW1pbGFyaXR5IGluZGV4IDQ3JQorcmVuYW1lIGZyb20gZm9vCityZW5hbWUgdG8gYmFyCistLS0gYS9mb28KKysrKyBiL2JhcgorQEAgLTEgKzEgQEAKKy1UaGlzIGlzIGZvbworK1RoaXMgaXMgYmFyCitFT0YKKworZWNobyAnVGhpcyBpcyBmb28nID5mb28KK2NobW9kICt4IGZvbworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwIFwKKyAgICAnZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmb28nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgYXBwbHkgXAorICAgICdnaXQgYXBwbHkgLS1pbmRleCAtLXN0YXQgLS1zdW1tYXJ5IC0tYXBwbHkgdGVzdC1wYXRjaCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSB2YWxpZGF0ZSBcCisJICAgICd0ZXN0IC1mIGJhciAmJiBscyAtbCBiYXIgfCBncmVwICJeLS4ueC4uLi4uLiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHJldmVyc2UnIFwKKyAgICAnZ2l0IGFwcGx5IC1SIC0taW5kZXggLS1zdGF0IC0tc3VtbWFyeSAtLWFwcGx5IHRlc3QtcGF0Y2ggJiYKKyAgICAgdGVzdCAiJChjYXQgZm9vKSIgPSAiVGhpcyBpcyBmb28iJworCitjYXQgPnRlc3QtcGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvZm9vIGIvYmFyCitzaW1pbGFyaXR5IGluZGV4IDQ3JQorY29weSBmcm9tIGZvbworY29weSB0byBiYXIKKy0tLSBhL2ZvbworKysrIGIvYmFyCitAQCAtMSArMSBAQAorLVRoaXMgaXMgZm9vCisrVGhpcyBpcyBiYXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBjb3B5JyBcCisgICAgJ2dpdCBhcHBseSAtLWluZGV4IC0tc3RhdCAtLXN1bW1hcnkgLS1hcHBseSB0ZXN0LXBhdGNoICYmCisgICAgIHRlc3QgIiQoY2F0IGJhcikiID0gIlRoaXMgaXMgYmFyIiAmJiB0ZXN0ICIkKGNhdCBmb28pIiA9ICJUaGlzIGlzIGZvbyInCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwMy1hcHBseS1iaW5hcnkuc2ggYi90L3Q0MTAzLWFwcGx5LWJpbmFyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYjQyMGUzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwMy1hcHBseS1iaW5hcnkuc2gKQEAgLTAsMCArMSwxNTggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IGhhbmRsaW5nIGJpbmFyeSBwYXRjaGVzCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNhdCA+ZmlsZTEgPDwtXEVPRiAmJgorCUEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nLgorCUEgdGlueSBsaXR0bGUgcGVuZ3VpbiBydW5zIGFyb3VuZCBpbiBjaXJjbGVzLgorCVRoZXJlIGlzIGEgZmxhZyB3aXRoIExpbnV4IHdyaXR0ZW4gb24gaXQuCisJQSBzbG93IGJsYWNrLWFuZC13aGl0ZSBwYW5kYSBqdXN0IHNpdHMgdGhlcmUsCisJbXVuY2hpbmcgb24gaGlzIGJhbWJvby4KKwlFT0YKKwljYXQgZmlsZTEgPmZpbGUyICYmCisJY2F0IGZpbGUxID5maWxlNCAmJgorCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBmaWxlMSBmaWxlMiBmaWxlNCAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwgVmVyc2lvbiIgMj4vZGV2L251bGwgJiYKKworCWdpdCBjaGVja291dCAtYiBiaW5hcnkgJiYKKwlwZXJsIC1wZSAieS94L1wwMDAvIiA8ZmlsZTEgPmZpbGUzICYmCisJY2F0IGZpbGUzID5maWxlNCAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlwZXJsIC1wZSAieS9cMDAwL3YvIiA8ZmlsZTMgPmZpbGUxICYmCisJcm0gLWYgZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIGZpbGUxIGZpbGUyIGZpbGUzIGZpbGU0ICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIFZlcnNpb24iICYmCisKKwlnaXQgZGlmZi10cmVlIC1wIG1hc3RlciBiaW5hcnkgPkIuZGlmZiAmJgorCWdpdCBkaWZmLXRyZWUgLXAgLUMgbWFzdGVyIGJpbmFyeSA+Qy5kaWZmICYmCisKKwlnaXQgZGlmZi10cmVlIC1wIC0tYmluYXJ5IG1hc3RlciBiaW5hcnkgPkJGLmRpZmYgJiYKKwlnaXQgZGlmZi10cmVlIC1wIC0tYmluYXJ5IC1DIG1hc3RlciBiaW5hcnkgPkNGLmRpZmYgJiYKKworCWdpdCBkaWZmLXRyZWUgLXAgLS1mdWxsLWluZGV4IG1hc3RlciBiaW5hcnkgPkItaW5kZXguZGlmZiAmJgorCWdpdCBkaWZmLXRyZWUgLXAgLUMgLS1mdWxsLWluZGV4IG1hc3RlciBiaW5hcnkgPkMtaW5kZXguZGlmZiAmJgorCisJZ2l0IGRpZmYtdHJlZSAtcCAtLWJpbmFyeSAtLW5vLXByZWZpeCBtYXN0ZXIgYmluYXJ5IC0tIGZpbGUzID5CMC5kaWZmICYmCisKKwlnaXQgaW5pdCBvdGhlci1yZXBvICYmCisJKAorCQljZCBvdGhlci1yZXBvICYmCisJCWdpdCBmZXRjaCAuLiBtYXN0ZXIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBGRVRDSF9IRUFECisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0IGJpbmFyeSBkaWZmIC0tIHNob3VsZCBub3QgZmFpbC4nIFwKKwknZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSBCLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXQgYmluYXJ5IC1wMCBkaWZmIC0tIHNob3VsZCBub3QgZmFpbC4nICcKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgYXBwbHkgLS1zdGF0IC1wMCBCMC5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXQgYmluYXJ5IGRpZmYgKGNvcHkpIC0tIHNob3VsZCBub3QgZmFpbC4nIFwKKwknZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgYXBwbHkgLS1zdGF0IC0tc3VtbWFyeSBDLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGJpbmFyeSBkaWZmIC0tIHNob3VsZCBmYWlsLicgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIEIuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYmluYXJ5IGRpZmYgKGNvcHkpIC0tIHNob3VsZCBmYWlsLicgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIEMuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoZWNrIGluY29tcGxldGUgYmluYXJ5IGRpZmYgd2l0aCByZXBsYWNlbWVudCAtLSBzaG91bGQgZmFpbC4nICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2hlY2sgLS1hbGxvdy1iaW5hcnktcmVwbGFjZW1lbnQgQi5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVjayBpbmNvbXBsZXRlIGJpbmFyeSBkaWZmIHdpdGggcmVwbGFjZW1lbnQgKGNvcHkpIC0tIHNob3VsZCBmYWlsLicgJworCSBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIC0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IEMuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBiaW5hcnkgZGlmZiB3aXRoIHJlcGxhY2VtZW50LicgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBhcHBseSAtLWNoZWNrIC0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IEJGLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGJpbmFyeSBkaWZmIHdpdGggcmVwbGFjZW1lbnQgKGNvcHkpLicgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGdpdCBhcHBseSAtLWNoZWNrIC0tYWxsb3ctYmluYXJ5LXJlcGxhY2VtZW50IENGLmRpZmYnCisKKyMgTm93IHdlIHN0YXJ0IGFwcGx5aW5nIHRoZW0uCisKK2RvX3Jlc2V0ICgpIHsKKwlybSAtZiBmaWxlPyAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIC0tIHNob3VsZCBmYWlsLicgXAorCSdkb19yZXNldCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgQi5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiAtLSBzaG91bGQgZmFpbC4nIFwKKwknZG9fcmVzZXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggQi5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiAoY29weSkgLS0gc2hvdWxkIGZhaWwuJyBcCisJJ2RvX3Jlc2V0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBDLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIChjb3B5KSAtLSBzaG91bGQgZmFpbC4nIFwKKwknZG9fcmVzZXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggQy5kaWZmJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiB3aXRoIGZ1bGwtaW5kZXgnICcKKwlkb19yZXNldCAmJgorCWdpdCBhcHBseSBCLWluZGV4LmRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYgd2l0aCBmdWxsLWluZGV4IChjb3B5KScgJworCWRvX3Jlc2V0ICYmCisJZ2l0IGFwcGx5IEMtaW5kZXguZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBmdWxsLWluZGV4IGJpbmFyeSBkaWZmIGluIG5ldyByZXBvJyAnCisJKGNkIG90aGVyLXJlcG8gJiYKKwkgZG9fcmVzZXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC4uL0ItaW5kZXguZGlmZikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYgd2l0aG91dCByZXBsYWNlbWVudC4nIFwKKwknZG9fcmVzZXQgJiYKKwkgZ2l0IGFwcGx5IEJGLmRpZmYnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGJpbmFyeSBkaWZmIHdpdGhvdXQgcmVwbGFjZW1lbnQgKGNvcHkpLicgXAorCSdkb19yZXNldCAmJgorCSBnaXQgYXBwbHkgQ0YuZGlmZicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgYmluYXJ5IGRpZmYuJyBcCisJJ2RvX3Jlc2V0ICYmCisJIGdpdCBhcHBseSAtLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCAtLWluZGV4IEJGLmRpZmYgJiYKKwkgdGVzdCAteiAiJChnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIGJpbmFyeSkiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgZGlmZiAoY29weSkuJyBcCisJJ2RvX3Jlc2V0ICYmCisJIGdpdCBhcHBseSAtLWFsbG93LWJpbmFyeS1yZXBsYWNlbWVudCAtLWluZGV4IENGLmRpZmYgJiYKKwkgdGVzdCAteiAiJChnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIGJpbmFyeSkiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBiaW5hcnkgLXAwIGRpZmYnICcKKwlkb19yZXNldCAmJgorCWdpdCBhcHBseSAtcDAgLS1pbmRleCBCMC5kaWZmICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIGJpbmFyeSAtLSBmaWxlMykiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwNC1hcHBseS1ib3VuZGFyeS5zaCBiL3QvdDQxMDQtYXBwbHktYm91bmRhcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzJlM2IwZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDQtYXBwbHktYm91bmRhcnkuc2gKQEAgLTAsMCArMSwxNDAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IGJvdW5kYXJ5IHRlc3RzCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCitMPSJjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiBiICciJEwiJyB5CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPm9yaWdpbmFsICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCB2aWN0aW0gJiYKKworCSMgYWRkIHRvIHRoZSBoZWFkCisJZm9yIGkgaW4gYSBiICciJEwiJyB5CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPmFkZC1hLWV4cGVjdCAmJgorCWdpdCBkaWZmIHZpY3RpbSA+YWRkLWEtcGF0Y2gud2l0aCAmJgorCWdpdCBkaWZmIC0tdW5pZmllZD0wID5hZGQtYS1wYXRjaC53aXRob3V0ICYmCisKKwkjIGluc2VydCBhdCBsaW5lIHR3bworCWZvciBpIGluIGIgYSAnIiRMIicgeQorCWRvCisJCWVjaG8gJGkKKwlkb25lID52aWN0aW0gJiYKKwljYXQgdmljdGltID5pbnNlcnQtYS1leHBlY3QgJiYKKwlnaXQgZGlmZiB2aWN0aW0gPmluc2VydC1hLXBhdGNoLndpdGggJiYKKwlnaXQgZGlmZiAtLXVuaWZpZWQ9MCA+aW5zZXJ0LWEtcGF0Y2gud2l0aG91dCAmJgorCisJIyBtb2RpZnkgYXQgdGhlIGhlYWQKKwlmb3IgaSBpbiBhICciJEwiJyB5CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPm1vZC1hLWV4cGVjdCAmJgorCWdpdCBkaWZmIHZpY3RpbSA+bW9kLWEtcGF0Y2gud2l0aCAmJgorCWdpdCBkaWZmIC0tdW5pZmllZD0wID5tb2QtYS1wYXRjaC53aXRob3V0ICYmCisKKwkjIHJlbW92ZSBmcm9tIHRoZSBoZWFkCisJZm9yIGkgaW4gJyIkTCInIHkKKwlkbworCQllY2hvICRpCisJZG9uZSA+dmljdGltICYmCisJY2F0IHZpY3RpbSA+ZGVsLWEtZXhwZWN0ICYmCisJZ2l0IGRpZmYgdmljdGltID5kZWwtYS1wYXRjaC53aXRoICYmCisJZ2l0IGRpZmYgLS11bmlmaWVkPTAgPmRlbC1hLXBhdGNoLndpdGhvdXQgJiYKKworCSMgYWRkIHRvIHRoZSB0YWlsCisJZm9yIGkgaW4gYiAnIiRMIicgeSB6CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnZpY3RpbSAmJgorCWNhdCB2aWN0aW0gPmFkZC16LWV4cGVjdCAmJgorCWdpdCBkaWZmIHZpY3RpbSA+YWRkLXotcGF0Y2gud2l0aCAmJgorCWdpdCBkaWZmIC0tdW5pZmllZD0wID5hZGQtei1wYXRjaC53aXRob3V0ICYmCisKKwkjIG1vZGlmeSBhdCB0aGUgdGFpbAorCWZvciBpIGluIGIgJyIkTCInIHoKKwlkbworCQllY2hvICRpCisJZG9uZSA+dmljdGltICYmCisJY2F0IHZpY3RpbSA+bW9kLXotZXhwZWN0ICYmCisJZ2l0IGRpZmYgdmljdGltID5tb2Qtei1wYXRjaC53aXRoICYmCisJZ2l0IGRpZmYgLS11bmlmaWVkPTAgPm1vZC16LXBhdGNoLndpdGhvdXQgJiYKKworCSMgcmVtb3ZlIGZyb20gdGhlIHRhaWwKKwlmb3IgaSBpbiBiICciJEwiJworCWRvCisJCWVjaG8gJGkKKwlkb25lID52aWN0aW0gJiYKKwljYXQgdmljdGltID5kZWwtei1leHBlY3QgJiYKKwlnaXQgZGlmZiB2aWN0aW0gPmRlbC16LXBhdGNoLndpdGggJiYKKwlnaXQgZGlmZiAtLXVuaWZpZWQ9MCA+ZGVsLXotcGF0Y2gud2l0aG91dAorCisJIyBkb25lCisnCisKK2ZvciB3aXRoIGluIHdpdGggd2l0aG91dAorZG8KKwljYXNlICIkd2l0aCIgaW4KKwl3aXRoKSB1PSA7OworCXdpdGhvdXQpIHU9Jy0tdW5pZGlmZi16ZXJvICcgOzsKKwllc2FjCisJZm9yIGtpbmQgaW4gYWRkLWEgYWRkLXogaW5zZXJ0LWEgbW9kLWEgbW9kLXogZGVsLWEgZGVsLXoKKwlkbworCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhcHBseSAka2luZC1wYXRjaCAkd2l0aCBjb250ZXh0IiAnCisJCQljYXQgb3JpZ2luYWwgPnZpY3RpbSAmJgorCQkJZ2l0IHVwZGF0ZS1pbmRleCB2aWN0aW0gJiYKKwkJCWdpdCBhcHBseSAtLWluZGV4ICciJHUka2luZC1wYXRjaC4kd2l0aCInICYmCisJCQl0ZXN0X2NtcCAnIiRraW5kIictZXhwZWN0IHZpY3RpbQorCQknCisJZG9uZQorZG9uZQorCitmb3Iga2luZCBpbiBhZGQtYSBhZGQteiBpbnNlcnQtYSBtb2QtYSBtb2QteiBkZWwtYSBkZWwtegorZG8KKwlybSAtZiAka2luZC1uZy53aXRob3V0CisJc2VkCS1lICJzL15kaWZmIC0tZ2l0IC9kaWZmIC8iIFwKKwkJLWUgJy9eaW5kZXggL2QnIFwKKwkJPCRraW5kLXBhdGNoLndpdGhvdXQgPiRraW5kLW5nLndpdGhvdXQKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJhcHBseSBub24tZ2l0ICRraW5kLXBhdGNoIHdpdGhvdXQgY29udGV4dCIgJworCQljYXQgb3JpZ2luYWwgPnZpY3RpbSAmJgorCQlnaXQgdXBkYXRlLWluZGV4IHZpY3RpbSAmJgorCQlnaXQgYXBwbHkgLS11bmlkaWZmLXplcm8gLS1pbmRleCAnIiRraW5kLW5nLndpdGhvdXQiJyAmJgorCQl0ZXN0X2NtcCAnIiRraW5kIictZXhwZWN0IHZpY3RpbQorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIGxpbmVzJyAnCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gYWFhID5maWxlICYmCisJZ2l0IGRpZmYgPnBhdGNoICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyBiYmIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jaGVjayBwYXRjaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHBhdGNoIHdpdGggMyBjb250ZXh0IGxpbmVzIG1hdGNoaW5nIGF0IGVuZCcgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgZWNobyBkOyB9ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyBlID4+ZmlsZSAmJgorCWdpdCBkaWZmID5wYXRjaCAmJgorCT5maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwNS1hcHBseS1mdXp6LnNoIGIvdC90NDEwNS1hcHBseS1mdXp6LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyNjZlMzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA1LWFwcGx5LWZ1enouc2gKQEAgLTAsMCArMSw1NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FwcGx5IHdpdGggZnV6eiBhbmQgb2Zmc2V0JworCisuIC4vdGVzdC1saWIuc2gKKworZG90ZXN0ICgpIHsKKwluYW1lPSIkMSIgJiYgc2hpZnQgJiYKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgIgorCQlnaXQgY2hlY2tvdXQtaW5kZXggLWYgLXEgLXUgZmlsZSAmJgorCQlnaXQgYXBwbHkgJCogJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKwkiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZSAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgYSBiIGMgZCBlIDggOSAxMCAxMSAxMgorCWRvCisJCWVjaG8gJGkKKwlkb25lID5maWxlICYmCisJY2F0IGZpbGUgPmV4cGVjdCAmJgorCWdpdCBkaWZmID5PMC5kaWZmICYmCisKKwlzZWQgLWUgInMvQEAgLTUsNiArNSwxMSBAQC9AQCAtMiw2ICsyLDExIEBALyIgPk8xLmRpZmYgTzAuZGlmZiAmJgorCXNlZCAtZSAicy9AQCAtNSw2ICs1LDExIEBAL0BAIC03LDYgKzcsMTEgQEAvIiA+TzIuZGlmZiBPMC5kaWZmICYmCisJc2VkIC1lICJzL0BAIC01LDYgKzUsMTEgQEAvQEAgLTE5LDYgKzE5LDExIEBALyIgPk8zLmRpZmYgTzAuZGlmZiAmJgorCisJc2VkIC1lICJzL14gNS8gUy8iID5GMC5kaWZmIE8wLmRpZmYgJiYKKwlzZWQgLWUgInMvXiA1LyBTLyIgPkYxLmRpZmYgTzEuZGlmZiAmJgorCXNlZCAtZSAicy9eIDUvIFMvIiA+RjIuZGlmZiBPMi5kaWZmICYmCisJc2VkIC1lICJzL14gNS8gUy8iID5GMy5kaWZmIE8zLmRpZmYKKworJworCitkb3Rlc3QgJ3VubW9kaWZpZWQgcGF0Y2gnIE8wLmRpZmYKKworZG90ZXN0ICdtaW51cyBvZmZzZXQnIE8xLmRpZmYKKworZG90ZXN0ICdwbHVzIG9mZnNldCcgTzIuZGlmZgorCitkb3Rlc3QgJ2JpZyBvZmZzZXQnIE8zLmRpZmYKKworZG90ZXN0ICdmdXp6IHdpdGggbm8gb2Zmc2V0JyAtQzIgRjAuZGlmZgorCitkb3Rlc3QgJ2Z1enogd2l0aCBtaW51cyBvZmZzZXQnIC1DMiBGMS5kaWZmCisKK2RvdGVzdCAnZnV6eiB3aXRoIHBsdXMgb2Zmc2V0JyAtQzIgRjIuZGlmZgorCitkb3Rlc3QgJ2Z1enogd2l0aCBiaWcgb2Zmc2V0JyAtQzIgRjMuZGlmZgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDYtYXBwbHktc3RkaW4uc2ggYi90L3Q0MTA2LWFwcGx5LXN0ZGluLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcyNDY3YTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA2LWFwcGx5LXN0ZGluLnNoCkBAIC0wLDAgKzEsMjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgLS1udW1zdGF0IC0gPHBhdGNoJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+dGV4dCAmJgorCWdpdCBhZGQgdGV4dCAmJgorCWVjaG8gZ29vZGJ5ZSA+dGV4dCAmJgorCWdpdCBkaWZmID5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgLS1udW1zdGF0IC0gPCBwYXRjaCcgJworCWVjaG8gIjEJMQl0ZXh0IiA+ZXhwZWN0ICYmCisJZ2l0IGFwcGx5IC0tbnVtc3RhdCAtIDxwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgLS1udW1zdGF0IC0gPCBwYXRjaCBwYXRjaCcgJworCWZvciBpIGluIDEgMjsgZG8gZWNobyAiMQkxCXRleHQiOyBkb25lID5leHBlY3QgJiYKKwlnaXQgYXBwbHkgLS1udW1zdGF0IC0gPCBwYXRjaCBwYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMDctYXBwbHktaWdub3JlLXdoaXRlc3BhY2Uuc2ggYi90L3Q0MTA3LWFwcGx5LWlnbm9yZS13aGl0ZXNwYWNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllMjliNTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA3LWFwcGx5LWlnbm9yZS13aGl0ZXNwYWNlLnNoCkBAIC0wLDAgKzEsMTgxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEdpdXNlcHBlIEJpbG90dGEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWFwcGx5IC0taWdub3JlLXdoaXRlc3BhY2UuCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRoaXMgcHJpbWVzIG1haW4uYyBmaWxlIHRoYXQgaW5kZW50cyB3aXRob3V0IHVzaW5nIEhUIGF0IGFsbC4KKyMgVmFyaW91cyBwYXRjaGVzIHdpdGggSFQgYW5kIG90aGVyIHNwYWNlcyBhcmUgYXR0ZW1wdGVkIGluIHRoZSB0ZXN0LgorCitjYXQgPiBwYXRjaDEucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvbWFpbi5jCitAQCAtMCwwICsxLDIyIEBACisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisrdm9pZCBwcmludF9pbnQoaW50IG51bSk7CisraW50IGZ1bmMoaW50IG51bSk7CisrCisraW50IG1haW4oKSB7CisrICAgICAgIGludCBpOworKworKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworKyAgICAgICAgICAgICAgIHByaW50X2ludChmdW5jKGkpKTsgLyogc3R1ZmYgKi8KKysgICAgICAgfQorKworKyAgICAgICByZXR1cm4gMDsKKyt9CisrCisraW50IGZ1bmMoaW50IG51bSkgeworKyAgICAgICByZXR1cm4gbnVtICogbnVtOworK30KKysKKyt2b2lkIHByaW50X2ludChpbnQgbnVtKSB7CisrICAgICAgIHByaW50ZigiJWQiLCBudW0pOworK30KK0VPRgorCisjIFNpbmNlIHdoaXRlc3BhY2UgaXMgdmVyeSBzaWduaWZpY2FudCBhbmQgd2Ugd2FudCB0byBwcmV2ZW50IHdoaXRlc3BhY2UKKyMgbWFuZ2xpbmcgd2hlbiBjcmVhdGluZyB0aGlzIHRlc3QgZnJvbSBhIHBhdGNoLCB3ZSBwcm90ZWN0ICdmaXhhYmxlJworIyB3aGl0ZXNwYWNlIGJ5IHJlcGxhY2luZyBzcGFjZXMgd2l0aCBaIGFuZCByZXBsYWNpbmcgdGhlbSBhdCBwYXRjaAorIyBjcmVhdGlvbiB0aW1lLCBoZW5jZSB0aGUgc2VkIHRyaWNrLgorCisjIFRoaXMgcGF0Y2ggd2lsbCBmYWlsIHVubGVzcyB3aGl0ZXNwYWNlIGRpZmZlcmVuY2VzIGFyZSBiZWluZyBpZ25vcmVkCisKK3NlZCAtZSAncy9aLyAvZycgPiBwYXRjaDIucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEwLDYgKzEwLDggQEAKK1oJCXByaW50X2ludChmdW5jKGkpKTsgLyogc3R1ZmYgKi8KK1oJfQorWgorKwlwcmludGYoIlxuIik7CisrCitaCXJldHVybiAwOworWn0KK1oKK0VPRgorCisjIFRoaXMgcGF0Y2ggd2lsbCBmYWlsIGV2ZW4gaWYgd2hpdGVzcGFjZSBkaWZmZXJlbmNlcyBhcmUgYmVpbmcgaWdub3JlZCwKKyMgYmVjYXVzZSBvZiB0aGUgbWlzc2luZyBzdHJpbmcgYXQgRU9MLiBUT0RPOiB0aGlzIHRlc3RjYXNlIHNob3VsZCBiZQorIyBpbXByb3ZlZCBieSBjcmVhdGluZyBhIGxpbmUgdGhhdCBoYXMgdGhlIHNhbWUgaGFzaCB3aXRoIGFuZCB3aXRob3V0CisjIHRoZSBmaW5hbCBzdHJpbmcuCisKK3NlZCAtZSAncy9aLyAvZycgPiBwYXRjaDMucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEwLDMgKzEwLDQgQEAKK1oJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKK1oJCXByaW50X2ludChmdW5jKGkpKTtaCisrCQkvKiBzdHVmZiAqLworWgl9CitFT0YKKworIyBUaGlzIHBhdGNoIHdpbGwgZmFpbCBldmVuIGlmIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMgYXJlIGJlaW5nIGlnbm9yZWQsCisjIGJlY2F1c2Ugb2YgdGhlIG1pc3NpbmcgRU9MIGF0IEVPRi4KKworc2VkIC1lICdzL1ovIC9nJyA+IHBhdGNoNC5wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtMjEsMSArMjEsMSBAQAorLQl9O1oKK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorKwl9OworRU9GCisKKyMgVGhpcyBwYXRjaCB3aWxsIGZhaWwgdW5sZXNzIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMgYXJlIGJlaW5nIGlnbm9yZWQuCisKK3NlZCAtZSAncy9aLyAvZycgPiBwYXRjaDUucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTIsMiArMiwzIEBACitaCXZvaWQgcHJpbnRfaW50KGludCBudW0pOworKwkvKiBhIGNvbW1lbnQgKi8KK1oJaW50IGZ1bmMoaW50IG51bSk7CitFT0YKKworIyBBbmQgdGhpcyBpcyBob3cgdGhlIGZpbmFsIG91dHB1dCBzaG91bGQgYmUuICBQYXRjaGVzIGludHJvZHVjZQorIyBIVHMgYnV0IHRoZSBvcmlnaW5hbCBTUCBpbmRlbnRzIGFyZSBtb3N0bHkga2VwdC4KKworc2VkIC1lICdzL1QvCS9nJyA+IG1haW4uYy5maW5hbCA8PFxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgorCit2b2lkIHByaW50X2ludChpbnQgbnVtKTsKK2ludCBmdW5jKGludCBudW0pOworCitpbnQgbWFpbigpIHsKKyAgICAgICBpbnQgaTsKKworICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgICAgICAgICBwcmludF9pbnQoZnVuYyhpKSk7IC8qIHN0dWZmICovCisgICAgICAgfQorCitUcHJpbnRmKCJcbiIpOworCisgICAgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmdW5jKGludCBudW0pIHsKKyAgICAgICByZXR1cm4gbnVtICogbnVtOworfQorCit2b2lkIHByaW50X2ludChpbnQgbnVtKSB7CisgICAgICAgcHJpbnRmKCIlZCIsIG51bSk7Cit9CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjcmVhdGlvbicgJworCWdpdCBhcHBseSBwYXRjaDEucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gyIGZhaWxzIChyZXRhYiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2gyLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoMiBhcHBsaWVzIHdpdGggLS1pZ25vcmUtd2hpdGVzcGFjZScgJworCWdpdCBhcHBseSAtLWlnbm9yZS13aGl0ZXNwYWNlIHBhdGNoMi5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDIgcmV2ZXJzZSBhcHBsaWVzIHdpdGggLS1pZ25vcmUtc3BhY2UtY2hhbmdlJyAnCisJZ2l0IGFwcGx5IC1SIC0taWdub3JlLXNwYWNlLWNoYW5nZSBwYXRjaDIucGF0Y2gKKycKKworZ2l0IGNvbmZpZyBhcHBseS5pZ25vcmV3aGl0ZXNwYWNlIGNoYW5nZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDIgYXBwbGllcyAoYXBwbHkuaWdub3Jld2hpdGVzcGFjZSA9IGNoYW5nZSknICcKKwlnaXQgYXBwbHkgcGF0Y2gyLnBhdGNoICYmCisJdGVzdF9jbXAgbWFpbi5jLmZpbmFsIG1haW4uYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaDMgZmFpbHMgKG1pc3Npbmcgc3RyaW5nIGF0IEVPTCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2gzLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoNCBmYWlscyAobWlzc2luZyBFT0wgYXQgRU9GKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaDQucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2g1IGZhaWxzIChsZWFkaW5nIHdoaXRlc3BhY2UgZGlmZmVyZW5jZXMgbWF0dGVyKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaDUucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtY3JlYXRlIGZpbGUgKHdpdGggLS1pZ25vcmUtd2hpdGVzcGFjZSknICcKKwlybSAtZiBtYWluLmMgJiYKKwlnaXQgYXBwbHkgcGF0Y2gxLnBhdGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoNSBmYWlscyAoLS1uby1pZ25vcmUtd2hpdGVzcGFjZSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1uby1pZ25vcmUtd2hpdGVzcGFjZSBwYXRjaDUucGF0Y2gKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTA4LWFwcGx5LXRocmVld2F5LnNoIGIvdC90NDEwOC1hcHBseS10aHJlZXdheS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYTVkNGVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOC1hcHBseS10aHJlZXdheS5zaApAQCAtMCwwICsxLDE1NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSAtLTN3YXknCisKKy4gLi90ZXN0LWxpYi5zaAorCitjcmVhdGVfZmlsZSAoKSB7CisJZm9yIGkKKwlkbworCQllY2hvICIkaSIKKwlkb25lCit9CisKK3Nhbml0aXplX2NvbmZsaWN0ZWRfZGlmZiAoKSB7CisJc2VkIC1lICcKKwkJL15pbmRleCAvZAorCQlzL15cKCtbPD5dWzw+XVs8Pl1bPD5dKlwpIC4qL1wxLworCScKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF90aWNrICYmCisJY3JlYXRlX2ZpbGUgPm9uZSAxIDIgMyA0IDUgNiA3ICYmCisJY2F0IG9uZSA+dHdvICYmCisJZ2l0IGFkZCBvbmUgdHdvICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKworCXRlc3RfdGljayAmJgorCWNyZWF0ZV9maWxlID5vbmUgMSB0d28gMyA0IDUgc2l4IDcgJiYKKwljcmVhdGVfZmlsZSA+dHdvIDEgdHdvIDMgNCA1IDYgNyAmJgorCWdpdCBjb21taXQgLWEgLW0gbWFzdGVyICYmCisKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWNyZWF0ZV9maWxlID5vbmUgMSAyIDMgNCBmaXZlIDYgNyAmJgorCWNyZWF0ZV9maWxlID50d28gMSAyIDMgNCBmaXZlIDYgNyAmJgorCWdpdCBjb21taXQgLWEgLW0gc2lkZSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRob3V0IC0tM3dheScgJworCWdpdCBkaWZmIHNpZGVeIHNpZGUgPlAuZGlmZiAmJgorCisJIyBzaG91bGQgZmFpbCB0byBhcHBseQorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCBQLmRpZmYgJiYKKwkjIHNob3VsZCBsZWF2ZSB0aGluZ3MgaW50YWN0CisJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggLS0zd2F5JyAnCisJIyBNZXJnaW5nIHNpZGUgc2hvdWxkIGJlIHNpbWlsYXIgdG8gYXBwbHlpbmcgdGhpcyBwYXRjaAorCWdpdCBkaWZmIC4uLnNpZGUgPlAuZGlmZiAmJgorCisJIyBUaGUgY29ycmVzcG9uZGluZyBjb25mbGljdGVkIG1lcmdlCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCBzaWRlICYmCisJZ2l0IGxzLWZpbGVzIC1zID5leHBlY3QubHMgJiYKKwlnaXQgZGlmZiBIRUFEIHwgc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmID5leHBlY3QuZGlmZiAmJgorCisJIyBzaG91bGQgZmFpbCB0byBhcHBseQorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCAtLTN3YXkgUC5kaWZmICYmCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwubHMgJiYKKwlnaXQgZGlmZiBIRUFEIHwgc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmID5hY3R1YWwuZGlmZiAmJgorCisJIyBUaGUgcmVzdWx0IHNob3VsZCByZXNlbWJsZSB0aGUgY29ycmVzcG9uZGluZyBtZXJnZQorCXRlc3RfY21wIGV4cGVjdC5scyBhY3R1YWwubHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGlmZiBhY3R1YWwuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIC0tM3dheSB3aXRoIHJlcmVyZSBlbmFibGVkJyAnCisJZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisKKwkjIE1lcmdpbmcgc2lkZSBzaG91bGQgYmUgc2ltaWxhciB0byBhcHBseWluZyB0aGlzIHBhdGNoCisJZ2l0IGRpZmYgLi4uc2lkZSA+UC5kaWZmICYmCisKKwkjIFRoZSBjb3JyZXNwb25kaW5nIGNvbmZsaWN0ZWQgbWVyZ2UKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tY29tbWl0IHNpZGUgJiYKKworCSMgTWFudWFsbHkgcmVzb2x2ZSBhbmQgcmVjb3JkIHRoZSByZXNvbHV0aW9uCisJY3JlYXRlX2ZpbGUgMSB0d28gMyA0IGZpdmUgc2l4IDcgPm9uZSAmJgorCWdpdCByZXJlcmUgJiYKKwljYXQgb25lID5leHBlY3QgJiYKKworCSMgc2hvdWxkIGZhaWwgdG8gYXBwbHkKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggLS0zd2F5IFAuZGlmZiAmJgorCisJIyBidXQgcmVyZXJlIHNob3VsZCBoYXZlIHJlcGxheWVkIHRoZSByZWNvcmRlZCByZXNvbHV0aW9uCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtMyB3aXRoIGFkZC9hZGQgY29uZmxpY3Qgc2V0dXAnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYWRkZXIgJiYKKwljcmVhdGVfZmlsZSAxIDIgMyA0IDUgNiA3ID50aHJlZSAmJgorCWNyZWF0ZV9maWxlIDEgMiAzIDQgNSA2IDcgPmZvdXIgJiYKKwlnaXQgYWRkIHRocmVlIGZvdXIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgdGhyZWUgYW5kIGZvdXIiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlciBhZGRlcl4gJiYKKwljcmVhdGVfZmlsZSAxIDIgMyA0IDUgNiA3ID50aHJlZSAmJgorCWNyZWF0ZV9maWxlIDEgMiAzIGZvdXIgNSA2IDcgPmZvdXIgJiYKKwlnaXQgYWRkIHRocmVlIGZvdXIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgdGhyZWUgYW5kIGZvdXIiICYmCisKKwkjIE1lcmdpbmcgYW5vdGhlciBzaG91bGQgYmUgc2ltaWxhciB0byBhcHBseWluZyB0aGlzIHBhdGNoCisJZ2l0IGRpZmYgYWRkZXIuLi5hbm90aGVyID5QLmRpZmYgJiYKKworCWdpdCBjaGVja291dCBhZGRlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGFub3RoZXIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmV4cGVjdC5scyAmJgorCWdpdCBkaWZmIEhFQUQgfCBzYW5pdGl6ZV9jb25mbGljdGVkX2RpZmYgPmV4cGVjdC5kaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0zIHdpdGggYWRkL2FkZCBjb25mbGljdCcgJworCSMgc2hvdWxkIGZhaWwgdG8gYXBwbHkgLi4uCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBhZGRlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggLS0zd2F5IFAuZGlmZiAmJgorCSMgLi4uIGFuZCBsZWF2ZSBjb25mbGljdHMgaW4gdGhlIGluZGV4IGFuZCBpbiB0aGUgd29ya2luZyB0cmVlCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwubHMgJiYKKwlnaXQgZGlmZiBIRUFEIHwgc2FuaXRpemVfY29uZmxpY3RlZF9kaWZmID5hY3R1YWwuZGlmZiAmJgorCisJIyBUaGUgcmVzdWx0IHNob3VsZCByZXNlbWJsZSB0aGUgY29ycmVzcG9uZGluZyBtZXJnZQorCXRlc3RfY21wIGV4cGVjdC5scyBhY3R1YWwubHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGlmZiBhY3R1YWwuZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtMyB3aXRoIGFkZC9hZGQgY29uZmxpY3QgKGRpcnR5IHdvcmtpbmcgdHJlZSknICcKKwkjIHNob3VsZCBmYWlsIHRvIGFwcGx5IC4uLgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYWRkZXJeMCAmJgorCWVjaG8gPj5mb3VyICYmCisJY2F0IGZvdXIgPmZvdXIuc2F2ZSAmJgorCWNhdCB0aHJlZSA+dGhyZWUuc2F2ZSAmJgorCWdpdCBscy1maWxlcyAtcyA+ZXhwZWN0LmxzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggLS0zd2F5IFAuZGlmZiAmJgorCSMgLi4uIGFuZCBzaG91bGQgbm90IHRvdWNoIGFueXRoaW5nCisJZ2l0IGxzLWZpbGVzIC1zID5hY3R1YWwubHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QubHMgYWN0dWFsLmxzICYmCisJdGVzdF9jbXAgZm91ci5zYXZlIGZvdXIgJiYKKwl0ZXN0X2NtcCB0aHJlZS5zYXZlIHRocmVlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEwOS1hcHBseS1tdWx0aWZyYWcuc2ggYi90L3Q0MTA5LWFwcGx5LW11bHRpZnJhZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYzU4MDgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOS1hcHBseS1tdWx0aWZyYWcuc2gKQEAgLTAsMCArMSwzNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIyBDb3B5cmlnaHQgKGMpIDIwMDUgUm9iZXJ0IEZpdHpzaW1vbnMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHRlc3QgcGF0Y2hlcyB3aXRoIG11bHRpcGxlIGZyYWdtZW50cy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitjcCAiJFRFU1RfRElSRUNUT1JZL3Q0MTA5L3BhdGNoMS5wYXRjaCIgLgorY3AgIiRURVNUX0RJUkVDVE9SWS90NDEwOS9wYXRjaDIucGF0Y2giIC4KK2NwICIkVEVTVF9ESVJFQ1RPUlkvdDQxMDkvcGF0Y2gzLnBhdGNoIiAuCitjcCAiJFRFU1RfRElSRUNUT1JZL3Q0MTA5L3BhdGNoNC5wYXRjaCIgLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgKDEpJyAnCisJZ2l0IGFwcGx5IHBhdGNoMS5wYXRjaCBwYXRjaDIucGF0Y2ggJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZL3Q0MTA5L2V4cGVjdC0xIiBtYWluLmMKKycKK3JtIC1mIG1haW4uYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXBwbHkgKDIpJyAnCisJZ2l0IGFwcGx5IHBhdGNoMS5wYXRjaCBwYXRjaDIucGF0Y2ggcGF0Y2gzLnBhdGNoICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWS90NDEwOS9leHBlY3QtMiIgbWFpbi5jCisnCitybSAtZiBtYWluLmMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFwcGx5ICgzKScgJworCWdpdCBhcHBseSBwYXRjaDEucGF0Y2ggcGF0Y2g0LnBhdGNoICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWS90NDEwOS9leHBlY3QtMyIgbWFpbi5jCisnCittdiBtYWluLmMgbWFpbi5jLmdpdAorCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90NDEwOS9leHBlY3QtMSBiL3QvdDQxMDkvZXhwZWN0LTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRiNWZmMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDkvZXhwZWN0LTEKQEAgLTAsMCArMSwzMSBAQAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBmdW5jKGludCBudW0pOwordm9pZCBwcmludF9pbnQoaW50IG51bSk7Cit2b2lkIHByaW50X2xuKCk7CisKK2ludCBtYWluKCkgeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJcHJpbnRfaW50KGZ1bmMoaSkpOworCX0KKworCXByaW50X2xuKCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZ1bmMoaW50IG51bSkgeworCXJldHVybiBudW0gKiBudW07Cit9CisKK3ZvaWQgcHJpbnRfaW50KGludCBudW0pIHsKKwlwcmludGYoIiVkIiwgbnVtKTsKK30KKwordm9pZCBwcmludF9sbigpIHsKKwlwcmludGYoIlxuIik7Cit9CisKZGlmZiAtLWdpdCBhL3QvdDQxMDkvZXhwZWN0LTIgYi90L3Q0MTA5L2V4cGVjdC0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTI5MjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA5L2V4cGVjdC0yCkBAIC0wLDAgKzEsMjMgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgZnVuYyhpbnQgbnVtKTsKK3ZvaWQgcHJpbnRfaW50KGludCBudW0pOworCitpbnQgbWFpbigpIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXByaW50X2ludChmdW5jKGkpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZ1bmMoaW50IG51bSkgeworCXJldHVybiBudW0gKiBudW07Cit9CisKK3ZvaWQgcHJpbnRfaW50KGludCBudW0pIHsKKwlwcmludGYoIiVkIiwgbnVtKTsKK30KKwpkaWZmIC0tZ2l0IGEvdC90NDEwOS9leHBlY3QtMyBiL3QvdDQxMDkvZXhwZWN0LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyYTQ3NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDkvZXhwZWN0LTMKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBmdW5jKGludCBudW0pOworaW50IGZ1bmMyKGludCBudW0pOworCitpbnQgbWFpbigpIHsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXByaW50ZigiJWQiLCBmdW5jKGkpKTsKKwkJcHJpbnRmKCIlZCIsIGZ1bmMzKGkpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZ1bmMoaW50IG51bSkgeworCXJldHVybiBudW0gKiBudW07Cit9CisKK2ludCBmdW5jMihpbnQgbnVtKSB7CisJcmV0dXJuIG51bSAqIG51bSAqIG51bTsKK30KKwpkaWZmIC0tZ2l0IGEvdC90NDEwOS9wYXRjaDEucGF0Y2ggYi90L3Q0MTA5L3BhdGNoMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDQxMWZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOS9wYXRjaDEucGF0Y2gKQEAgLTAsMCArMSwyOCBAQAorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworbmV3IGZpbGUgbW9kZSAxMDA2NDQKKy0tLSAvZGV2L251bGwKKysrKyBiL21haW4uYworQEAgLTAsMCArMSwyMyBAQAorKyNpbmNsdWRlIDxzdGRpby5oPgorKworK2ludCBmdW5jKGludCBudW0pOworK3ZvaWQgcHJpbnRfaW50KGludCBudW0pOworKworK2ludCBtYWluKCkgeworKwlpbnQgaTsKKysKKysJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKysJCXByaW50X2ludChmdW5jKGkpKTsKKysJfQorKworKwlyZXR1cm4gMDsKKyt9CisrCisraW50IGZ1bmMoaW50IG51bSkgeworKwlyZXR1cm4gbnVtICogbnVtOworK30KKysKKyt2b2lkIHByaW50X2ludChpbnQgbnVtKSB7CisrCXByaW50ZigiJWQiLCBudW0pOworK30KKysKZGlmZiAtLWdpdCBhL3QvdDQxMDkvcGF0Y2gyLnBhdGNoIGIvdC90NDEwOS9wYXRjaDIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM2YjA2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMDkvcGF0Y2gyLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK2RpZmYgLS1naXQgYS9tYWluLmMgYi9tYWluLmMKKy0tLSBhL21haW4uYworKysrIGIvbWFpbi5jCitAQCAtMSw3ICsxLDkgQEAKKysjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisgaW50IGZ1bmMoaW50IG51bSk7Cisgdm9pZCBwcmludF9pbnQoaW50IG51bSk7Cisrdm9pZCBwcmludF9sbigpOworIAorIGludCBtYWluKCkgeworIAlpbnQgaTsKK0BAIC0xMCw2ICsxMiw4IEBACisgCQlwcmludF9pbnQoZnVuYyhpKSk7CisgCX0KKyAKKysJcHJpbnRfbG4oKTsKKysKKyAJcmV0dXJuIDA7CisgfQorIAorQEAgLTIxLDMgKzI1LDcgQEAKKyAJcHJpbnRmKCIlZCIsIG51bSk7CisgfQorIAorK3ZvaWQgcHJpbnRfbG4oKSB7CisrCXByaW50ZigiXG4iKTsKKyt9CisrCmRpZmYgLS1naXQgYS90L3Q0MTA5L3BhdGNoMy5wYXRjaCBiL3QvdDQxMDkvcGF0Y2gzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OTZjNTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTA5L3BhdGNoMy5wYXRjaApAQCAtMCwwICsxLDMxIEBACitjYXQgPiBwYXRjaDMucGF0Y2ggPDxcRU9GCitkaWZmIC0tZ2l0IGEvbWFpbi5jIGIvbWFpbi5jCistLS0gYS9tYWluLmMKKysrKyBiL21haW4uYworQEAgLTEsOSArMSw3IEBACistI2luY2x1ZGUgPHN0ZGxpYi5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorIAorIGludCBmdW5jKGludCBudW0pOworIHZvaWQgcHJpbnRfaW50KGludCBudW0pOworLXZvaWQgcHJpbnRfbG4oKTsKKyAKKyBpbnQgbWFpbigpIHsKKyAJaW50IGk7CitAQCAtMTIsOCArMTAsNiBAQAorIAkJcHJpbnRfaW50KGZ1bmMoaSkpOworIAl9CisgCistCXByaW50X2xuKCk7CistCisgCXJldHVybiAwOworIH0KKyAKK0BAIC0yNSw3ICsyMSwzIEBACisgCXByaW50ZigiJWQiLCBudW0pOworIH0KKyAKKy12b2lkIHByaW50X2xuKCkgeworLQlwcmludGYoIlxuIik7CistfQorLQpkaWZmIC0tZ2l0IGEvdC90NDEwOS9wYXRjaDQucGF0Y2ggYi90L3Q0MTA5L3BhdGNoNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjA4NTkwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEwOS9wYXRjaDQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYworLS0tIGEvbWFpbi5jCisrKysgYi9tYWluLmMKK0BAIC0xLDEzICsxLDE0IEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisgaW50IGZ1bmMoaW50IG51bSk7Cistdm9pZCBwcmludF9pbnQoaW50IG51bSk7CisraW50IGZ1bmMyKGludCBudW0pOworIAorIGludCBtYWluKCkgeworIAlpbnQgaTsKKyAKKyAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKy0JCXByaW50X2ludChmdW5jKGkpKTsKKysJCXByaW50ZigiJWQiLCBmdW5jKGkpKTsKKysJCXByaW50ZigiJWQiLCBmdW5jMyhpKSk7CisgCX0KKyAKKyAJcmV0dXJuIDA7CitAQCAtMTcsNyArMTgsNyBAQAorIAlyZXR1cm4gbnVtICogbnVtOworIH0KKyAKKy12b2lkIHByaW50X2ludChpbnQgbnVtKSB7CistCXByaW50ZigiJWQiLCBudW0pOworK2ludCBmdW5jMihpbnQgbnVtKSB7CisrCXJldHVybiBudW0gKiBudW0gKiBudW07CisgfQorIApkaWZmIC0tZ2l0IGEvdC90NDExMC1hcHBseS1zY2FuLnNoIGIvdC90NDExMC1hcHBseS1zY2FuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA5ZjU4MTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEwLWFwcGx5LXNjYW4uc2gKQEAgLTAsMCArMSwyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIyBDb3B5cmlnaHQgKGMpIDIwMDUgUm9iZXJ0IEZpdHpzaW1vbnMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHRlc3QgZm9yIHBhdGNoZXMgd2hpY2ggcmVxdWlyZSBzY2FubmluZyBmb3J3YXJkcyBhbmQgYmFja3dhcmRzLgorCisnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFwcGx5IHNjYW4nICcKKwlnaXQgYXBwbHkgXAorCQkiJFRFU1RfRElSRUNUT1JZL3Q0MTEwL3BhdGNoMS5wYXRjaCIgXAorCQkiJFRFU1RfRElSRUNUT1JZL3Q0MTEwL3BhdGNoMi5wYXRjaCIgXAorCQkiJFRFU1RfRElSRUNUT1JZL3Q0MTEwL3BhdGNoMy5wYXRjaCIgXAorCQkiJFRFU1RfRElSRUNUT1JZL3Q0MTEwL3BhdGNoNC5wYXRjaCIgXAorCQkiJFRFU1RfRElSRUNUT1JZL3Q0MTEwL3BhdGNoNS5wYXRjaCIgJiYKKwl0ZXN0X2NtcCBuZXcudHh0ICIkVEVTVF9ESVJFQ1RPUlkvdDQxMTAvZXhwZWN0IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTAvZXhwZWN0IGIvdC90NDExMC9leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdjYzQ5MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTAvZXhwZWN0CkBAIC0wLDAgKzEsMjAgQEAKK2ExCithMTEKK2ExMTEKK2ExMTExCitiMQorYjExCitiMTExCitiMTExMQorYjIKK2IyMgorYjIyMgorYjIyMjIKK2MxCitjMTEKK2MxMTEKK2MxMTExCitjMgorYzIyCitjMjIyCitjMjIyMgpkaWZmIC0tZ2l0IGEvdC90NDExMC9wYXRjaDEucGF0Y2ggYi90L3Q0MTEwL3BhdGNoMS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjEzOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMC9wYXRjaDEucGF0Y2gKQEAgLTAsMCArMSwxNyBAQAorZGlmZiAtLWdpdCBhL25ldy50eHQgYi9uZXcudHh0CituZXcgZmlsZSBtb2RlIDEwMDY0NAorLS0tIC9kZXYvbnVsbAorKysrIGIvbmV3LnR4dAorQEAgLTAsMCArMSwxMiBAQAorK2ExCisrYTExCisrYTExMQorK2ExMTExCisrYjEKKytiMTEKKytiMTExCisrYjExMTEKKytjMQorK2MxMQorK2MxMTEKKytjMTExMQpkaWZmIC0tZ2l0IGEvdC90NDExMC9wYXRjaDIucGF0Y2ggYi90L3Q0MTEwL3BhdGNoMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDk3NDI0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMC9wYXRjaDIucGF0Y2gKQEAgLTAsMCArMSwxMSBAQAorZGlmZiAtLWdpdCBhL25ldy50eHQgYi9uZXcudHh0CistLS0gYS9uZXcudHh0CisrKysgYi9uZXcudHh0CitAQCAtMSw3ICsxLDMgQEAKKy1hMQorLWExMQorLWExMTEKKy1hMTExMQorIGIxCisgYjExCisgYjExMQpkaWZmIC0tZ2l0IGEvdC90NDExMC9wYXRjaDMucGF0Y2ggYi90L3Q0MTEwL3BhdGNoMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmJkNDQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMC9wYXRjaDMucGF0Y2gKQEAgLTAsMCArMSwxNCBAQAorZGlmZiAtLWdpdCBhL25ldy50eHQgYi9uZXcudHh0CistLS0gYS9uZXcudHh0CisrKysgYi9uZXcudHh0CitAQCAtNiw2ICs2LDEwIEBACisgYjExCisgYjExMQorIGIxMTExCisrYjIKKytiMjIKKytiMjIyCisrYjIyMjIKKyBjMQorIGMxMQorIGMxMTEKZGlmZiAtLWdpdCBhL3QvdDQxMTAvcGF0Y2g0LnBhdGNoIGIvdC90NDExMC9wYXRjaDQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmYjljMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTAvcGF0Y2g0LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLS1naXQgYS9uZXcudHh0IGIvbmV3LnR4dAorLS0tIGEvbmV3LnR4dAorKysrIGIvbmV3LnR4dAorQEAgLTEsMyArMSw3IEBACisrYTEKKythMTEKKythMTExCisrYTExMTEKKyBiMQorIGIxMQorIGIxMTEKZGlmZiAtLWdpdCBhL3QvdDQxMTAvcGF0Y2g1LnBhdGNoIGIvdC90NDExMC9wYXRjaDUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhYzY5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTAvcGF0Y2g1LnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKK2RpZmYgLS1naXQgYS9uZXcudHh0IGIvbmV3LnR4dAorLS0tIGEvbmV3LnR4dAorKysrIGIvbmV3LnR4dAorQEAgLTEwLDMgKzEwLDcgQEAKKyBjMTEKKyBjMTExCisgYzExMTEKKytjMgorK2MyMgorK2MyMjIKKytjMjIyMgpkaWZmIC0tZ2l0IGEvdC90NDExMS1hcHBseS1zdWJkaXIuc2ggYi90L3Q0MTExLWFwcGx5LXN1YmRpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNjE4YTZkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExMS1hcHBseS1zdWJkaXIuc2gKQEAgLTAsMCArMSwxNTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwYXRjaGluZyBmcm9tIGluY29udmVuaWVudCBwbGFjZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNhdCA+cGF0Y2ggPDwtXEVPRiAmJgorCWRpZmYgZmlsZS5vcmlnIGZpbGUKKwktLS0gYS9maWxlLm9yaWcKKwkrKysgYi9maWxlCisJQEAgLTEgKzEsMiBAQAorCSAxCisJKzIKKwlFT0YKKwlwYXRjaD0iJChwd2QpL3BhdGNoIiAmJgorCisJZWNobyAxID5wcmVpbWFnZSAmJgorCXByaW50ZiAiJXNcbiIgMSAyID5wb3N0aW1hZ2UgJiYKKwllY2hvIDMgPm90aGVyICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYmFzaXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHN1YmRpcicgJworCXJlc2V0X3N1YmRpcigpIHsKKwkJZ2l0IHJlc2V0ICYmCisJCW1rZGlyIC1wIHN1Yi9kaXIvYiAmJgorCQlta2RpciAtcCBvYmplY3RzICYmCisJCWNwICIkMSIgZmlsZSAmJgorCQljcCAiJDEiIG9iamVjdHMvZmlsZSAmJgorCQljcCAiJDEiIHN1Yi9kaXIvZmlsZSAmJgorCQljcCAiJDEiIHN1Yi9kaXIvYi9maWxlICYmCisJCWdpdCBhZGQgZmlsZSBzdWIvZGlyL2ZpbGUgc3ViL2Rpci9iL2ZpbGUgb2JqZWN0cy9maWxlICYmCisJCWNwICIkMiIgZmlsZSAmJgorCQljcCAiJDIiIHN1Yi9kaXIvZmlsZSAmJgorCQljcCAiJDIiIHN1Yi9kaXIvYi9maWxlICYmCisJCWNwICIkMiIgb2JqZWN0cy9maWxlICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAtcQorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZnJvbSBzdWJkaXIgb2YgdG9wbGV2ZWwnICcKKwljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKKwlyZXNldF9zdWJkaXIgb3RoZXIgcHJlaW1hZ2UgJiYKKwkoCisJCWNkIHN1Yi9kaXIgJiYKKwkJZ2l0IGFwcGx5ICIkcGF0Y2giCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHN1Yi9kaXIvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWNhY2hlZCBmcm9tIHN1YmRpciBvZiB0b3BsZXZlbCcgJworCWNwIHBvc3RpbWFnZSBleHBlY3RlZCAmJgorCWNwIG90aGVyIGV4cGVjdGVkLndvcmtpbmcgJiYKKwlyZXNldF9zdWJkaXIgcHJlaW1hZ2Ugb3RoZXIgJiYKKwkoCisJCWNkIHN1Yi9kaXIgJiYKKwkJZ2l0IGFwcGx5IC0tY2FjaGVkICIkcGF0Y2giCisJKSAmJgorCWdpdCBzaG93IDpzdWIvZGlyL2ZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLndvcmtpbmcgc3ViL2Rpci9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0taW5kZXggZnJvbSBzdWJkaXIgb2YgdG9wbGV2ZWwnICcKKwljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKKwlyZXNldF9zdWJkaXIgcHJlaW1hZ2Ugb3RoZXIgJiYKKwkoCisJCWNkIHN1Yi9kaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggIiRwYXRjaCIKKwkpICYmCisJcmVzZXRfc3ViZGlyIG90aGVyIHByZWltYWdlICYmCisJKAorCQljZCBzdWIvZGlyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4ICIkcGF0Y2giCisJKSAmJgorCXJlc2V0X3N1YmRpciBwcmVpbWFnZSBwcmVpbWFnZSAmJgorCSgKKwkJY2Qgc3ViL2RpciAmJgorCQlnaXQgYXBwbHkgLS1pbmRleCAiJHBhdGNoIgorCSkgJiYKKwlnaXQgc2hvdyA6c3ViL2Rpci9maWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBzdWIvZGlyL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgaGFsZi1icm9rZW4gcGF0Y2ggZnJvbSBzdWJkaXIgb2YgdG9wbGV2ZWwnICcKKwkoCisJCWNkIHN1Yi9kaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IDw8LUVPRgorCQktLS0gc3ViL2Rpci9maWxlCisJCSsrKyBzdWIvZGlyL2ZpbGUKKwkJQEAgLTEsMCArMSwwIEBACisJCS0tLSBmaWxlX2luX3Jvb3QKKwkJKysrIGZpbGVfaW5fcm9vdAorCQlAQCAtMSwwICsxLDAgQEAKKwkJRU9GCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBmcm9tIC5naXQgZGlyJyAnCisJY3AgcG9zdGltYWdlIGV4cGVjdGVkICYmCisJY3AgcHJlaW1hZ2UgLmdpdC9maWxlICYmCisJY3AgcHJlaW1hZ2UgLmdpdC9vYmplY3RzL2ZpbGUgJiYKKwkoCisJCWNkIC5naXQgJiYKKwkJZ2l0IGFwcGx5ICIkcGF0Y2giCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIC5naXQvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBmcm9tIHN1YmRpciBvZiAuZ2l0IGRpcicgJworCWNwIHBvc3RpbWFnZSBleHBlY3RlZCAmJgorCWNwIHByZWltYWdlIC5naXQvZmlsZSAmJgorCWNwIHByZWltYWdlIC5naXQvb2JqZWN0cy9maWxlICYmCisJKAorCQljZCAuZ2l0L29iamVjdHMgJiYKKwkJZ2l0IGFwcGx5ICIkcGF0Y2giCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIC5naXQvb2JqZWN0cy9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tY2FjaGVkIGZyb20gLmdpdCBkaXInICcKKwljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKKwljcCBvdGhlciBleHBlY3RlZC53b3JraW5nICYmCisJY3Agb3RoZXIgLmdpdC9maWxlICYmCisJcmVzZXRfc3ViZGlyIHByZWltYWdlIG90aGVyICYmCisJKAorCQljZCAuZ2l0ICYmCisJCWdpdCBhcHBseSAtLWNhY2hlZCAiJHBhdGNoIgorCSkgJiYKKwlnaXQgc2hvdyA6ZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQud29ya2luZyBmaWxlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQud29ya2luZyAuZ2l0L2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1jYWNoZWQgZnJvbSBzdWJkaXIgb2YgLmdpdCBkaXInICcKKwljcCBwb3N0aW1hZ2UgZXhwZWN0ZWQgJiYKKwljcCBwcmVpbWFnZSBleHBlY3RlZC5zdWJkaXIgJiYKKwljcCBvdGhlciAuZ2l0L2ZpbGUgJiYKKwljcCBvdGhlciAuZ2l0L29iamVjdHMvZmlsZSAmJgorCXJlc2V0X3N1YmRpciBwcmVpbWFnZSBvdGhlciAmJgorCSgKKwkJY2QgLmdpdC9vYmplY3RzICYmCisJCWdpdCBhcHBseSAtLWNhY2hlZCAiJHBhdGNoIgorCSkgJiYKKwlnaXQgc2hvdyA6ZmlsZSA+YWN0dWFsICYmCisJZ2l0IHNob3cgOm9iamVjdHMvZmlsZSA+YWN0dWFsLnN1YmRpciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnN1YmRpciBhY3R1YWwuc3ViZGlyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExMi1hcHBseS1yZW5hbWVzLnNoIGIvdC90NDExMi1hcHBseS1yZW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY5YWQxODMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEyLWFwcGx5LXJlbmFtZXMuc2gKQEAgLTAsMCArMSwxNDQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIHdpdGggcmVuYW1lL2NvcHkuCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgc2V0dXAKKworbWtkaXIgLXAga2xpYmMvYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYworCitjYXQgPmtsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oIDw8XEVPRgorLyoKKyAqIGFyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCisgKi8KKworI2lmbmRlZiBfS0xJQkNfQVJDSFNFVEpNUF9ICisjZGVmaW5lIF9LTElCQ19BUkNIU0VUSk1QX0gKKworc3RydWN0IF9fam1wX2J1ZiB7CisgIHVuc2lnbmVkIGxvbmcgX19yYng7CisgIHVuc2lnbmVkIGxvbmcgX19yc3A7CisgIHVuc2lnbmVkIGxvbmcgX19yYnA7CisgIHVuc2lnbmVkIGxvbmcgX19yMTI7CisgIHVuc2lnbmVkIGxvbmcgX19yMTM7CisgIHVuc2lnbmVkIGxvbmcgX19yMTQ7CisgIHVuc2lnbmVkIGxvbmcgX19yMTU7CisgIHVuc2lnbmVkIGxvbmcgX19yaXA7Cit9OworCit0eXBlZGVmIHN0cnVjdCBfX2ptcF9idWYgam1wX2J1ZlsxXTsKKworI2VuZGlmIC8qIF9TRVRKTVBfSCAqLworRU9GCitjYXQgPmtsaWJjL1JFQURNRSA8PFxFT0YKK1RoaXMgaXMgYSBzaW1wbGUgcmVhZG1lIGZpbGUuCitFT0YKKworY2F0ID5wYXRjaCA8PFxFT0YKK2RpZmYgLS1naXQgYS9rbGliYy9hcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaCBiL2luY2x1ZGUvYXJjaC9jcmlzL2tsaWJjL2FyY2hzZXRqbXAuaAorc2ltaWxhcml0eSBpbmRleCA3NiUKK2NvcHkgZnJvbSBrbGliYy9hcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorY29weSB0byBpbmNsdWRlL2FyY2gvY3Jpcy9rbGliYy9hcmNoc2V0am1wLmgKKy0tLSBhL2tsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCisrKysgYi9pbmNsdWRlL2FyY2gvY3Jpcy9rbGliYy9hcmNoc2V0am1wLmgKK0BAIC0xLDIxICsxLDI0IEBACisgLyoKKy0gKiBhcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorKyAqIGFyY2gvY3Jpcy9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorICAqLworCisgI2lmbmRlZiBfS0xJQkNfQVJDSFNFVEpNUF9ICisgI2RlZmluZSBfS0xJQkNfQVJDSFNFVEpNUF9ICisKKyBzdHJ1Y3QgX19qbXBfYnVmIHsKKy0gIHVuc2lnbmVkIGxvbmcgX19yYng7CistICB1bnNpZ25lZCBsb25nIF9fcnNwOworLSAgdW5zaWduZWQgbG9uZyBfX3JicDsKKy0gIHVuc2lnbmVkIGxvbmcgX19yMTI7CistICB1bnNpZ25lZCBsb25nIF9fcjEzOworLSAgdW5zaWduZWQgbG9uZyBfX3IxNDsKKy0gIHVuc2lnbmVkIGxvbmcgX19yMTU7CistICB1bnNpZ25lZCBsb25nIF9fcmlwOworKyAgdW5zaWduZWQgbG9uZyBfX3IwOworKyAgdW5zaWduZWQgbG9uZyBfX3IxOworKyAgdW5zaWduZWQgbG9uZyBfX3IyOworKyAgdW5zaWduZWQgbG9uZyBfX3IzOworKyAgdW5zaWduZWQgbG9uZyBfX3I0OworKyAgdW5zaWduZWQgbG9uZyBfX3I1OworKyAgdW5zaWduZWQgbG9uZyBfX3I2OworKyAgdW5zaWduZWQgbG9uZyBfX3I3OworKyAgdW5zaWduZWQgbG9uZyBfX3I4OworKyAgdW5zaWduZWQgbG9uZyBfX3NwOworKyAgdW5zaWduZWQgbG9uZyBfX3NycDsKKyB9OworCisgdHlwZWRlZiBzdHJ1Y3QgX19qbXBfYnVmIGptcF9idWZbMV07CisKKy0jZW5kaWYgLyogX1NFVEpNUF9IICovCisrI2VuZGlmIC8qIF9LTElCQ19BUkNIU0VUSk1QX0ggKi8KK2RpZmYgLS1naXQgYS9rbGliYy9hcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaCBiL2luY2x1ZGUvYXJjaC9tMzJyL2tsaWJjL2FyY2hzZXRqbXAuaAorc2ltaWxhcml0eSBpbmRleCA2NiUKK3JlbmFtZSBmcm9tIGtsaWJjL2FyY2gveDg2XzY0L2luY2x1ZGUva2xpYmMvYXJjaHNldGptcC5oCityZW5hbWUgdG8gaW5jbHVkZS9hcmNoL20zMnIva2xpYmMvYXJjaHNldGptcC5oCistLS0gYS9rbGliYy9hcmNoL3g4Nl82NC9pbmNsdWRlL2tsaWJjL2FyY2hzZXRqbXAuaAorKysrIGIvaW5jbHVkZS9hcmNoL20zMnIva2xpYmMvYXJjaHNldGptcC5oCitAQCAtMSwyMSArMSwyMSBAQAorIC8qCistICogYXJjaC94ODZfNjQvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmgKKysgKiBhcmNoL20zMnIvaW5jbHVkZS9rbGliYy9hcmNoc2V0am1wLmgKKyAgKi8KKworICNpZm5kZWYgX0tMSUJDX0FSQ0hTRVRKTVBfSAorICNkZWZpbmUgX0tMSUJDX0FSQ0hTRVRKTVBfSAorCisgc3RydWN0IF9fam1wX2J1ZiB7CistICB1bnNpZ25lZCBsb25nIF9fcmJ4OworLSAgdW5zaWduZWQgbG9uZyBfX3JzcDsKKy0gIHVuc2lnbmVkIGxvbmcgX19yYnA7CisrICB1bnNpZ25lZCBsb25nIF9fcjg7CisrICB1bnNpZ25lZCBsb25nIF9fcjk7CisrICB1bnNpZ25lZCBsb25nIF9fcjEwOworKyAgdW5zaWduZWQgbG9uZyBfX3IxMTsKKyAgIHVuc2lnbmVkIGxvbmcgX19yMTI7CisgICB1bnNpZ25lZCBsb25nIF9fcjEzOworICAgdW5zaWduZWQgbG9uZyBfX3IxNDsKKyAgIHVuc2lnbmVkIGxvbmcgX19yMTU7CistICB1bnNpZ25lZCBsb25nIF9fcmlwOworIH07CisKKyB0eXBlZGVmIHN0cnVjdCBfX2ptcF9idWYgam1wX2J1ZlsxXTsKKworLSNlbmRpZiAvKiBfU0VUSk1QX0ggKi8KKysjZW5kaWYgLyogX0tMSUJDX0FSQ0hTRVRKTVBfSCAqLworZGlmZiAtLWdpdCBhL2tsaWJjL1JFQURNRSBiL2tsaWJjL1JFQURNRQorLS0tIGEva2xpYmMvUkVBRE1FCisrKysgYi9rbGliYy9SRUFETUUKK0BAIC0xLDEgKzEsNCBAQAorIFRoaXMgaXMgYSBzaW1wbGUgcmVhZG1lIGZpbGUuCisrQW5kIHdlIGFkZCBhIGZldworK2xpbmVzIGF0IHRoZQorK2VuZCBvZiBpdC4KK2RpZmYgLS1naXQgYS9rbGliYy9SRUFETUUgYi9rbGliYy9hcmNoL1JFQURNRQorY29weSBmcm9tIGtsaWJjL1JFQURNRQorY29weSB0byBrbGliYy9hcmNoL1JFQURNRQorLS0tIGEva2xpYmMvUkVBRE1FCisrKysgYi9rbGliYy9hcmNoL1JFQURNRQorQEAgLTEsMSArMSwzIEBACisgVGhpcyBpcyBhIHNpbXBsZSByZWFkbWUgZmlsZS4KKytBbmQgd2UgY29weSBpdCB0byBvbmUgbGV2ZWwgZG93biwgYW5kCisrYWRkIGEgZmV3IGxpbmVzIGF0IHRoZSBlbmQgb2YgaXQuCitFT0YKKworZmluZCBrbGliYyAtdHlwZSBmIC1wcmludCB8IHhhcmdzIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcmVuYW1lL2NvcHkgcGF0Y2gnICdnaXQgYXBwbHkgLS1jaGVjayBwYXRjaCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgcmVuYW1lL2NvcHkgcGF0Y2gnICdnaXQgYXBwbHkgLS1pbmRleCBwYXRjaCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTEzLWFwcGx5LWVuZGluZy5zaCBiL3QvdDQxMTMtYXBwbHktZW5kaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2ZmE1MTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTEzLWFwcGx5LWVuZGluZy5zaApAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IENhdGFsaW4gTWFyaW5hcworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgdHJ5aW5nIHRvIGFkZCBhbiBlbmRpbmcgbGluZS4KKworJworLiAuL3Rlc3QtbGliLnNoCisKKyMgc2V0dXAKKworY2F0ID50ZXN0LXBhdGNoIDw8XEVPRgorZGlmZiAtLWdpdCBhL2ZpbGUgYi9maWxlCistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwyICsxLDMgQEAKKyBhCisgYgorK2MKK0VPRgorCitlY2hvICdhJyA+ZmlsZQorZWNobyAnYicgPj5maWxlCitlY2hvICdjJyA+PmZpbGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCBcCisgICAgJ2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZScKKworIyB0ZXN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGF0IHRoZSBlbmQnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggdGVzdC1wYXRjaCcKKworY2F0ID50ZXN0LXBhdGNoIDw8XEVPRgorZGlmZiBhL2ZpbGUgYi9maWxlCistLS0gYS9maWxlCisrKysgYi9maWxlCitAQCAtMSwyICsxLDMgQEAKKythCisgYgorIGMKK0VPRgorCitlY2hvID5maWxlICdhCitiCitjJworZ2l0IHVwZGF0ZS1pbmRleCBmaWxlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGF0IHRoZSBiZWdpbm5pbmcnIFwKKwkndGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggdGVzdC1wYXRjaCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTE0LWFwcGx5LXR5cGVjaGFuZ2Uuc2ggYi90L3Q0MTE0LWFwcGx5LXR5cGVjaGFuZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWJhZGJjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTQtYXBwbHktdHlwZWNoYW5nZS5zaApAQCAtMCwwICsxLDEyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHNob3VsZCBub3QgZ2V0IGNvbmZ1c2VkIHdpdGggdHlwZSBjaGFuZ2VzLgorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IGFuZCBjb21taXRzJyAnCisJZWNobyAiaGVsbG8gd29ybGQiID4gZm9vICYmCisJZWNobyAiaGkgcGxhbmV0IiA+IGJhciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vIGJhciAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggaW5pdGlhbCAmJgorCXJtIC1mIGZvbyAmJgorCXRlc3RfbG5fc19hZGQgYmFyIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImZvbyBzeW1saW5rZWQgdG8gYmFyIiAmJgorCWdpdCBicmFuY2ggZm9vLXN5bWxpbmtlZC10by1iYXIgJiYKKwlnaXQgcm0gLWYgZm9vICYmCisJZWNobyAiaG93IGZhciBpcyB0aGUgc3VuPyIgPiBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImZvbyBiYWNrIHRvIGZpbGUiICYmCisJZ2l0IGJyYW5jaCBmb28tYmFjay10by1maWxlICYmCisJcHJpbnRmICJcMCIgPiBmb28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZvbyAmJgorCWdpdCBjb21taXQgLW0gImZvbyBiZWNvbWVzIGJpbmFyeSIgJiYKKwlnaXQgYnJhbmNoIGZvby1iZWNvbWVzLWJpbmFyeSAmJgorCXJtIC1mIGZvbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgZm9vICYmCisJbWtkaXIgZm9vICYmCisJZWNobyAiaWYgb25seSBJIGtuZXciID4gZm9vL2JheiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vL2JheiAmJgorCWdpdCBjb21taXQgLW0gImZvbyBiZWNvbWVzIGEgZGlyZWN0b3J5IiAmJgorCWdpdCBicmFuY2ggImZvby1iZWNvbWVzLWEtZGlyZWN0b3J5IiAmJgorCWVjaG8gImhlbGxvIHdvcmxkIiA+IGZvby9iYXogJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZvby9iYXogJiYKKwlnaXQgY29tbWl0IC1tICJmb28vYmF6IGlzIHRoZSBvcmlnaW5hbCBmb28iICYmCisJZ2l0IGJyYW5jaCBmb28tYmF6LXJlbmFtZWQtZnJvbS1mb28KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgcmVuYW1lZCBmcm9tIGZvbyB0byBmb28vYmF6JyAnCisJZ2l0IGNoZWNrb3V0IC1mIGluaXRpYWwgJiYKKwlnaXQgZGlmZi10cmVlIC1NIC1wIEhFQUQgZm9vLWJhei1yZW5hbWVkLWZyb20tZm9vID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgcmVuYW1lZCBmcm9tIGZvby9iYXogdG8gZm9vJyAnCisJZ2l0IGNoZWNrb3V0IC1mIGZvby1iYXotcmVuYW1lZC1mcm9tLWZvbyAmJgorCWdpdCBkaWZmLXRyZWUgLU0gLXAgSEVBRCBpbml0aWFsID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpcmVjdG9yeSBiZWNvbWVzIGZpbGUnICcKKwlnaXQgY2hlY2tvdXQgLWYgZm9vLWJlY29tZXMtYS1kaXJlY3RvcnkgJiYKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUQgaW5pdGlhbCA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGJlY29tZXMgZGlyZWN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IC1mIGluaXRpYWwgJiYKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUQgZm9vLWJlY29tZXMtYS1kaXJlY3RvcnkgPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBiZWNvbWVzIHN5bWxpbmsnICcKKwlnaXQgY2hlY2tvdXQgLWYgaW5pdGlhbCAmJgorCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCBmb28tc3ltbGlua2VkLXRvLWJhciA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1saW5rIGJlY29tZXMgZmlsZScgJworCWdpdCBjaGVja291dCAtZiBmb28tc3ltbGlua2VkLXRvLWJhciAmJgorCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCBmb28tYmFjay10by1maWxlID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaW5hcnkgZmlsZSBiZWNvbWVzIHN5bWxpbmsnICcKKwlnaXQgY2hlY2tvdXQgLWYgZm9vLWJlY29tZXMtYmluYXJ5ICYmCisJZ2l0IGRpZmYtdHJlZSAtcCAtLWJpbmFyeSBIRUFEIGZvby1zeW1saW5rZWQtdG8tYmFyID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW1saW5rIGJlY29tZXMgYmluYXJ5IGZpbGUnICcKKwlnaXQgY2hlY2tvdXQgLWYgZm9vLXN5bWxpbmtlZC10by1iYXIgJiYKKwlnaXQgZGlmZi10cmVlIC1wIC0tYmluYXJ5IEhFQUQgZm9vLWJlY29tZXMtYmluYXJ5ID4gcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pbmRleCA8IHBhdGNoCisJJwordGVzdF9kZWJ1ZyAnY2F0IHBhdGNoJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWxpbmsgYmVjb21lcyBkaXJlY3RvcnknICcKKwlnaXQgY2hlY2tvdXQgLWYgZm9vLXN5bWxpbmtlZC10by1iYXIgJiYKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUQgZm9vLWJlY29tZXMtYS1kaXJlY3RvcnkgPiBwYXRjaCAmJgorCWdpdCBhcHBseSAtLWluZGV4IDwgcGF0Y2gKKwknCit0ZXN0X2RlYnVnICdjYXQgcGF0Y2gnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyZWN0b3J5IGJlY29tZXMgc3ltbGluaycgJworCWdpdCBjaGVja291dCAtZiBmb28tYmVjb21lcy1hLWRpcmVjdG9yeSAmJgorCWdpdCBkaWZmLXRyZWUgLXAgSEVBRCBmb28tc3ltbGlua2VkLXRvLWJhciA+IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0taW5kZXggPCBwYXRjaAorCScKK3Rlc3RfZGVidWcgJ2NhdCBwYXRjaCcKKworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTUtYXBwbHktc3ltbGluay5zaCBiL3QvdDQxMTUtYXBwbHktc3ltbGluay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzJmY2RhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExNS1hcHBseS1zeW1saW5rLnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHN5bWxpbmtzIGFuZCBwYXJ0aWFsIGZpbGVzCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJdGVzdF9sbl9zX2FkZCBwYXRoMS9wYXRoMi9wYXRoMy9wYXRoNC9wYXRoNSBsaW5rMSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwlybSAtZiBsaW5rPyAmJgorCisJdGVzdF9sbl9zX2FkZCBodGFwNiBsaW5rMSAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisKKwlnaXQgZGlmZi10cmVlIC1wIEhFQUReIEhFQUQgPnBhdGNoICAmJgorCWdpdCBhcHBseSAtLXN0YXQgLS1zdW1tYXJ5IHBhdGNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYXBwbHkgc3ltbGluayBwYXRjaCcgJworCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtcCA+cGF0Y2hlZCAmJgorCXRlc3RfY21wIHBhdGNoIHBhdGNoZWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWluZGV4IHN5bWxpbmsgcGF0Y2gnICcKKworCWdpdCBjaGVja291dCAtZiBzaWRlICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2ggJiYKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtcCBIRUFEID5wYXRjaGVkICYmCisJdGVzdF9jbXAgcGF0Y2ggcGF0Y2hlZAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExNi1hcHBseS1yZXZlcnNlLnNoIGIvdC90NDExNi1hcHBseS1yZXZlcnNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlODU2N2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTE2LWFwcGx5LXJldmVyc2Uuc2gKQEAgLTAsMCArMSw5MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgaW4gcmV2ZXJzZQorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWZvciBpIGluIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbjsgZG8gZWNobyAkaTsgZG9uZSA+ZmlsZTEgJiYKKwlwZXJsIC1wZSAieS9pamsvXFwwMDBcXDAwMVxcMDAyLyIgPGZpbGUxID5maWxlMiAmJgorCisJZ2l0IGFkZCBmaWxlMSBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCisJZm9yIGkgaW4gYSBiIGMgZyBoIGkgSiBLIEwgbSBvIG4gcCBxOyBkbyBlY2hvICRpOyBkb25lID5maWxlMSAmJgorCXBlcmwgLXBlICJ5L21vbi9cXDAwMFxcMDAxXFwwMDIvIiA8ZmlsZTEgPmZpbGUyICYmCisKKwlnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCWdpdCB0YWcgc2Vjb25kICYmCisKKwlnaXQgZGlmZiAtLWJpbmFyeSBpbml0aWFsIHNlY29uZCA+cGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBpbiBmb3J3YXJkJyAnCisKKwlUMD0kKGdpdCByZXYtcGFyc2UgInNlY29uZF57dHJlZX0iKSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBhcHBseSAtLWluZGV4IC0tYmluYXJ5IHBhdGNoICYmCisJVDE9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwl0ZXN0ICIkVDAiID0gIiRUMSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgaW4gcmV2ZXJzZScgJworCisJZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKwlnaXQgYXBwbHkgLS1yZXZlcnNlIC0tYmluYXJ5IC0taW5kZXggcGF0Y2ggJiYKKwlnaXQgZGlmZiA+ZGlmZiAmJgorCXRlc3RfY21wIC9kZXYvbnVsbCBkaWZmCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2VwYXJhdGUgcmVwb3NpdG9yeSBsYWNraW5nIHBvc3RpbWFnZScgJworCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIC0tcHJlZml4PWluaXRpYWwvIGluaXRpYWwgfCAkVEFSIHhmIC0gJiYKKwkoCisJCWNkIGluaXRpYWwgJiYgZ2l0IGluaXQgJiYgZ2l0IGFkZCAuCisJKSAmJgorCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIC0tcHJlZml4PXNlY29uZC8gc2Vjb25kIHwgJFRBUiB4ZiAtICYmCisJKAorCQljZCBzZWNvbmQgJiYgZ2l0IGluaXQgJiYgZ2l0IGFkZCAuCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGluIGZvcndhcmQgd2l0aG91dCBwb3N0aW1hZ2UnICcKKworCVQwPSQoZ2l0IHJldi1wYXJzZSAic2Vjb25kXnt0cmVlfSIpICYmCisJKAorCQljZCBpbml0aWFsICYmCisJCWdpdCBhcHBseSAtLWluZGV4IC0tYmluYXJ5IC4uL3BhdGNoICYmCisJCVQxPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCXRlc3QgIiRUMCIgPSAiJFQxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgaW4gcmV2ZXJzZSB3aXRob3V0IHBvc3RpbWFnZScgJworCisJVDA9JChnaXQgcmV2LXBhcnNlICJpbml0aWFsXnt0cmVlfSIpICYmCisJKAorCQljZCBzZWNvbmQgJiYKKwkJZ2l0IGFwcGx5IC0taW5kZXggLS1iaW5hcnkgLS1yZXZlcnNlIC4uL3BhdGNoICYmCisJCVQxPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJCXRlc3QgIiRUMCIgPSAiJFQxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJzaW5nIGEgd2hpdGVzcGFjZSBpbnRyb2R1Y3Rpb24nICcKKwlzZWQgInMvYS9hIC8iIDwgZmlsZTEgPiBmaWxlMS5uZXcgJiYKKwltdiBmaWxlMS5uZXcgZmlsZTEgJiYKKwlnaXQgZGlmZiB8IGdpdCBhcHBseSAtLXJldmVyc2UgLS13aGl0ZXNwYWNlPWVycm9yCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExNy1hcHBseS1yZWplY3Quc2ggYi90L3Q0MTE3LWFwcGx5LXJlamVjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kODAxODdkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDExNy1hcHBseS1yZWplY3Quc2gKQEAgLTAsMCArMSwxMTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IHdpdGggcmVqZWN0cworCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCAyMQorCWRvCisJCWVjaG8gJGkKKwlkb25lID5maWxlMSAmJgorCWNhdCBmaWxlMSA+c2F2ZWQuZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlmb3IgaSBpbiAxIDIgQSBCIDQgNSA2IDcgOCA5IDEwIDExIDEyIEMgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgRCAyMQorCWRvCisJCWVjaG8gJGkKKwlkb25lID5maWxlMSAmJgorCWdpdCBkaWZmID5wYXRjaC4xICYmCisJY2F0IGZpbGUxID5jbGVhbiAmJgorCisJZm9yIGkgaW4gMSBFIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiBDIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIEYgMjEKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZXhwZWN0ZWQgJiYKKworCW12IGZpbGUxIGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBmaWxlMSBmaWxlMiAmJgorCWdpdCBkaWZmIC1NIEhFQUQgPnBhdGNoLjIgJiYKKworCXJtIC1mIGZpbGUxIGZpbGUyICYmCisJbXYgc2F2ZWQuZmlsZTEgZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIGZpbGUxIGZpbGUyICYmCisKKwlmb3IgaSBpbiAxIEUgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIEYgMjEKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZmlsZTEgJiYKKworCWNhdCBmaWxlMSA+c2F2ZWQuZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1yZWplY3QgaXMgaW5jb21wYXRpYmxlIHdpdGggLS0zd2F5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjYXQgc2F2ZWQuZmlsZTEgPmZpbGUxIiAmJgorCWdpdCBkaWZmID5wYXRjaC4wICYmCisJZ2l0IGNoZWNrb3V0IGZpbGUxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tcmVqZWN0IC0tM3dheSBwYXRjaC4wICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aG91dCAtLXJlamVjdCBzaG91bGQgZmFpbCcgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoLjEgJiYKKwl0ZXN0X2NtcCBmaWxlMSBzYXZlZC5maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRob3V0IC0tcmVqZWN0IHNob3VsZCBmYWlsJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS12ZXJib3NlIHBhdGNoLjEgJiYKKwl0ZXN0X2NtcCBmaWxlMSBzYXZlZC5maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIC0tcmVqZWN0IHNob3VsZCBmYWlsIGJ1dCB1cGRhdGUgdGhlIGZpbGUnICcKKworCWNhdCBzYXZlZC5maWxlMSA+ZmlsZTEgJiYKKwlybSAtZiBmaWxlMS5yZWogZmlsZTIucmVqICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1yZWplY3QgcGF0Y2guMSAmJgorCXRlc3RfY21wIGZpbGUxIGV4cGVjdGVkICYmCisKKwljYXQgZmlsZTEucmVqICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTIucmVqCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHdpdGggLS1yZWplY3Qgc2hvdWxkIGZhaWwgYnV0IHVwZGF0ZSB0aGUgZmlsZScgJworCisJY2F0IHNhdmVkLmZpbGUxID5maWxlMSAmJgorCXJtIC1mIGZpbGUxLnJlaiBmaWxlMi5yZWogZmlsZTIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXJlamVjdCBwYXRjaC4yID5yZWplY3RzICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTEgJiYKKwl0ZXN0X2NtcCBmaWxlMiBleHBlY3RlZCAmJgorCisJY2F0IGZpbGUyLnJlaiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUxLnJlagorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSBzYW1lIHRlc3Qgd2l0aCAtLXZlcmJvc2UnICcKKworCWNhdCBzYXZlZC5maWxlMSA+ZmlsZTEgJiYKKwlybSAtZiBmaWxlMS5yZWogZmlsZTIucmVqIGZpbGUyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1yZWplY3QgLS12ZXJib3NlIHBhdGNoLjIgPnJlamVjdHMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMSAmJgorCXRlc3RfY21wIGZpbGUyIGV4cGVjdGVkICYmCisKKwljYXQgZmlsZTIucmVqICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTEucmVqCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgY2xlYW5seSB3aXRoIC0tdmVyYm9zZScgJworCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQ6ZmlsZTEgPmZpbGUxICYmCisJcm0gLWYgZmlsZT8ucmVqIGZpbGUyICYmCisKKwlnaXQgYXBwbHkgLS12ZXJib3NlIHBhdGNoLjEgJiYKKworCXRlc3RfY21wIGZpbGUxIGNsZWFuCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDExOC1hcHBseS1lbXB0eS1jb250ZXh0LnNoIGIvdC90NDExOC1hcHBseS1lbXB0eS1jb250ZXh0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1ZjJlNGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTE4LWFwcGx5LWVtcHR5LWNvbnRleHQuc2gKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgd2l0aCBuZXcgc3R5bGUgR05VIGRpZmYgd2l0aCBlbXB0eSBjb250ZXh0CisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXsKKwkJZWNobzsgZWNobzsKKwkJZWNobyBBOyBlY2hvIEI7IGVjaG8gQzsKKwkJZWNobzsKKwl9ID5maWxlMSAmJgorCWNhdCBmaWxlMSA+ZmlsZTEub3JpZyAmJgorCXsKKwkJY2F0IGZpbGUxICYmCisJCWVjaG8gUSB8IHRyIC1kICJcXDAxMiIKKwl9ID5maWxlMiAmJgorCWNhdCBmaWxlMiA+ZmlsZTIub3JpZyAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwlzZWQgLWUgIi9eQi9kIiA8ZmlsZTEub3JpZyA+ZmlsZTEgJiYKKwljYXQgZmlsZTEgPiBmaWxlMiAmJgorCWVjaG8gUSB8IHRyIC1kICJcXDAxMiIgPj5maWxlMiAmJgorCWNhdCBmaWxlMSA+ZmlsZTEubW9kcyAmJgorCWNhdCBmaWxlMiA+ZmlsZTIubW9kcyAmJgorCWdpdCBkaWZmIHwKKwlzZWQgLWUgInMvXiBcJC8vIiA+ZGlmZi5vdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1udW1zdGF0JyAnCisKKwlnaXQgYXBwbHkgLS1udW1zdGF0IGRpZmYub3V0cHV0ID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gIjAJMQlmaWxlMSIgJiYKKwkJZWNobyAiMAkxCWZpbGUyIgorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWFwcGx5JyAnCisKKwljYXQgZmlsZTEub3JpZyA+ZmlsZTEgJiYKKwljYXQgZmlsZTIub3JpZyA+ZmlsZTIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZpbGUxIGZpbGUyICYmCisJZ2l0IGFwcGx5IC0taW5kZXggZGlmZi5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBmaWxlMS5tb2RzIGZpbGUxICYmCisJdGVzdF9jbXAgZmlsZTIubW9kcyBmaWxlMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMTktYXBwbHktY29uZmlnLnNoIGIvdC90NDExOS1hcHBseS1jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTlhMDU4MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMTktYXBwbHktY29uZmlnLnNoCkBAIC0wLDAgKzEsMTc5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgc3ViICYmCisJZWNobyBBID5zdWIvZmlsZTEgJiYKKwljcCBzdWIvZmlsZTEgc2F2ZWQgJiYKKwlnaXQgYWRkIHN1Yi9maWxlMSAmJgorCWVjaG8gIkIgIiA+c3ViL2ZpbGUxICYmCisJZ2l0IGRpZmYgPnBhdGNoLmZpbGUKKycKKworIyBBbHNvIGhhbmRjcmFmdCBHTlUgZGlmZiBvdXRwdXQ7IG5vdGUgdGhpcyBoYXMgdHJhaWxpbmcgd2hpdGVzcGFjZS4KK3RyICdfJyAnICcgPmdwYXRjaC5maWxlIDw8XEVPRiAmJgorLS0tIGZpbGUxCTIwMDctMDItMjEgMDE6MDQ6MjQuMDAwMDAwMDAwIC0wODAwCisrKysgZmlsZTErCTIwMDctMDItMjEgMDE6MDc6NDQuMDAwMDAwMDAwIC0wODAwCitAQCAtMSArMSBAQAorLUEKKytCXworRU9GCisKK3NlZCAtZSAnc3xmaWxlMXxzdWIvJnwnIGdwYXRjaC5maWxlID5ncGF0Y2gtc3ViLmZpbGUgJiYKK3NlZCAtZSAnCisJL14tLS0gL3N8ZmlsZTF8YS9zdWIvJnwKKwkvXisrKyAvc3xmaWxlMXxiL3N1Yi8mfAorJyBncGF0Y2guZmlsZSA+Z3BhdGNoLWFiLXN1Yi5maWxlICYmCisKK2NoZWNrX3Jlc3VsdCAoKSB7CisJaWYgZ3JlcCAiICIgIiQxIgorCXRoZW4KKwkJZWNobyAiRWg/IgorCQlmYWxzZQorCWVsaWYgZ3JlcCBCICIkMSIKKwl0aGVuCisJCWVjaG8gSGFwcHkKKwllbHNlCisJCWVjaG8gIkh1aD8iCisJCWZhbHNlCisJZmkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwJyAnCisKKwlybSAtZiBzdWIvZmlsZTEgJiYKKwljcCBzYXZlZCBzdWIvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1zdHJpcCBwYXRjaC5maWxlICYmCisJY2hlY2tfcmVzdWx0IHN1Yi9maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLXdoaXRlc3BhY2U9c3RyaXAgZnJvbSBjb25maWcnICcKKworCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwlnaXQgYXBwbHkgcGF0Y2guZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBzdWIvZmlsZTEKKycKKworRD0kKHB3ZCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwIGluIHN1YmRpcicgJworCisJY2QgIiREIiAmJgorCWdpdCBjb25maWcgLS11bnNldC1hbGwgYXBwbHkud2hpdGVzcGFjZSAmJgorCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwljZCBzdWIgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwIC4uL3BhdGNoLmZpbGUgJiYKKwljaGVja19yZXN1bHQgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS13aGl0ZXNwYWNlPXN0cmlwIGZyb20gY29uZmlnIGluIHN1YmRpcicgJworCisJY2QgIiREIiAmJgorCWdpdCBjb25maWcgYXBwbHkud2hpdGVzcGFjZSBzdHJpcCAmJgorCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwljZCBzdWIgJiYKKwlnaXQgYXBwbHkgLi4vcGF0Y2guZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGluIHN1YmRpciBidXQgd2l0aCB0cmFkaXRpb25hbCBwYXRjaCBpbnB1dCcgJworCisJY2QgIiREIiAmJgorCWdpdCBjb25maWcgYXBwbHkud2hpdGVzcGFjZSBzdHJpcCAmJgorCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwljZCBzdWIgJiYKKwlnaXQgYXBwbHkgLi4vZ3BhdGNoLmZpbGUgJiYKKwljaGVja19yZXN1bHQgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSBidXQgd2l0aCB0cmFkaXRpb25hbCBwYXRjaCBpbnB1dCBvZiBkZXB0aCAxJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWNkIHN1YiAmJgorCWdpdCBhcHBseSAuLi9ncGF0Y2gtc3ViLmZpbGUgJiYKKwljaGVja19yZXN1bHQgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSBidXQgd2l0aCB0cmFkaXRpb25hbCBwYXRjaCBpbnB1dCBvZiBkZXB0aCAyJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWNkIHN1YiAmJgorCWdpdCBhcHBseSAuLi9ncGF0Y2gtYWItc3ViLmZpbGUgJiYKKwljaGVja19yZXN1bHQgZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSBidXQgd2l0aCB0cmFkaXRpb25hbCBwYXRjaCBpbnB1dCBvZiBkZXB0aCAxJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJcm0gLWYgc3ViL2ZpbGUxICYmCisJY3Agc2F2ZWQgc3ViL2ZpbGUxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCWdpdCBhcHBseSAtcDAgZ3BhdGNoLXN1Yi5maWxlICYmCisJY2hlY2tfcmVzdWx0IHN1Yi9maWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIGJ1dCB3aXRoIHRyYWRpdGlvbmFsIHBhdGNoIGlucHV0IG9mIGRlcHRoIDInICcKKworCWNkICIkRCIgJiYKKwlnaXQgY29uZmlnIGFwcGx5LndoaXRlc3BhY2Ugc3RyaXAgJiYKKwlybSAtZiBzdWIvZmlsZTEgJiYKKwljcCBzYXZlZCBzdWIvZmlsZTEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJZ2l0IGFwcGx5IGdwYXRjaC1hYi1zdWIuZmlsZSAmJgorCWNoZWNrX3Jlc3VsdCBzdWIvZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW4gc3ViZGlyIHdpdGggdHJhZGl0aW9uYWwgcGF0Y2ggaW5wdXQnICcKKwljZCAiJEQiICYmCisJZ2l0IGNvbmZpZyBhcHBseS53aGl0ZXNwYWNlIHN0cmlwICYmCisJY2F0ID4uZ2l0YXR0cmlidXRlcyA8PC1FT0YgJiYKKwkvKiB3aGl0ZXNwYWNlPWJsYW5rLWF0LWVvbAorCXN1Yi8qIHdoaXRlc3BhY2U9LWJsYW5rLWF0LWVvbAorCUVPRgorCXJtIC1mIHN1Yi9maWxlMSAmJgorCWNwIHNhdmVkIHN1Yi9maWxlMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisKKwljZCBzdWIgJiYKKwlnaXQgYXBwbHkgLi4vZ3BhdGNoLmZpbGUgJiYKKwllY2hvICJCICIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjAtYXBwbHktcG9wdC5zaCBiL3QvdDQxMjAtYXBwbHktcG9wdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OTdiNjI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyMC1hcHBseS1wb3B0LnNoCkBAIC0wLDAgKzEsODkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgU2hhd24gTy4gUGVhcmNlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSAtcCBoYW5kbGluZy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBzdWIgJiYKKwllY2hvIEEgPnN1Yi9maWxlMSAmJgorCWNwIHN1Yi9maWxlMSBmaWxlMS5zYXZlZCAmJgorCWdpdCBhZGQgc3ViL2ZpbGUxICYmCisJZWNobyBCID5zdWIvZmlsZTEgJiYKKwlnaXQgZGlmZiA+cGF0Y2guZmlsZSAmJgorCWdpdCBjaGVja291dCAtLSBzdWIvZmlsZTEgJiYKKwlnaXQgbXYgc3ViIHPDvGIgJiYKKwllY2hvIEIgPnPDvGIvZmlsZTEgJiYKKwlnaXQgZGlmZiA+cGF0Y2guZXNjYXBlZCAmJgorCWdyZXAgIltcXSIgcGF0Y2guZXNjYXBlZCAmJgorCXJtIHPDvGIvZmlsZTEgJiYKKwlybWRpciBzw7xiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGdpdCBkaWZmIHdpdGggLXAyJyAnCisJY3AgZmlsZTEuc2F2ZWQgZmlsZTEgJiYKKwlnaXQgYXBwbHkgLXAyIHBhdGNoLmZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCB0b28gbGFyZ2UgLXAnICcKKwljcCBmaWxlMS5zYXZlZCBmaWxlMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXN0YXQgLXAzIHBhdGNoLmZpbGUgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZW1vdmluZyAzIGxlYWRpbmciIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAoLXAyKSB0cmFkaXRpb25hbCBkaWZmIHdpdGggZnVubnkgZmlsZW5hbWVzJyAnCisJY2F0ID5wYXRjaC5xdW90ZXMgPDwtXEVPRiAmJgorCWRpZmYgLXUgImEvInN1Yi9maWxlMSAiYi8ic3ViL2ZpbGUxCisJLS0tICJhLyJzdWIvZmlsZTEKKwkrKysgImIvInN1Yi9maWxlMQorCUBAIC0xICsxIEBACisJLUEKKwkrQgorCUVPRgorCWVjaG8gQiA+ZXhwZWN0ZWQgJiYKKworCWNwIGZpbGUxLnNhdmVkIGZpbGUxICYmCisJZ2l0IGFwcGx5IC1wMiBwYXRjaC5xdW90ZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSB3aXRoIHRvbyBsYXJnZSAtcCBhbmQgZmFuY3kgZmlsZW5hbWUnICcKKwljcCBmaWxlMS5zYXZlZCBmaWxlMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXN0YXQgLXAzIHBhdGNoLmVzY2FwZWQgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJyZW1vdmluZyAzIGxlYWRpbmciIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAoLXAyKSBkaWZmLCBtb2RlIGNoYW5nZSBvbmx5JyAnCisJY2F0ID5wYXRjaC5jaG1vZCA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL3N1Yi9maWxlMSBiL3N1Yi9maWxlMQorCW9sZCBtb2RlIDEwMDY0NAorCW5ldyBtb2RlIDEwMDc1NQorCUVPRgorCXRlc3RfY2htb2QgLXggZmlsZTEgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCAtcDIgcGF0Y2guY2htb2QgJiYKKwljYXNlICQoZ2l0IGxzLWZpbGVzIC1zIGZpbGUxKSBpbiAxMDA3NTUqKSA6IGdvb2Q7OyAqKSBmYWxzZTs7IGVzYWMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnZmlsZSBtb2RlIHdhcyBjaGFuZ2VkJyAnCisJdGVzdCAteCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAoLXAyKSBkaWZmLCByZW5hbWUnICcKKwljYXQgPnBhdGNoLnJlbmFtZSA8PC1cRU9GICYmCisJZGlmZiAtLWdpdCBhL3N1Yi9maWxlMSBiL3N1Yi9maWxlMgorCXNpbWlsYXJpdHkgaW5kZXggMTAwJQorCXJlbmFtZSBmcm9tIHN1Yi9maWxlMQorCXJlbmFtZSB0byBzdWIvZmlsZTIKKwlFT0YKKwllY2hvIEEgPmV4cGVjdGVkICYmCisKKwljcCBmaWxlMS5zYXZlZCBmaWxlMSAmJgorCXJtIC1mIGZpbGUyICYmCisJZ2l0IGFwcGx5IC1wMiBwYXRjaC5yZW5hbWUgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjEtYXBwbHktZGlmZnMuc2ggYi90L3Q0MTIxLWFwcGx5LWRpZmZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFmZjU1MWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTIxLWFwcGx5LWRpZmZzLnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgZm9yIGNvbnRleHR1YWxseSBpbmRlcGVuZGVudCBkaWZmcycKKy4gLi90ZXN0LWxpYi5zaAorCitlY2hvICcxCisyCiszCis0Cis1Cis2Cis3Cis4JyA+ZmlsZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgXAorCSdnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1xIC1tIDEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCAmJgorCW12IGZpbGUgZmlsZS50bXAgJiYKKwllY2hvIDAgPmZpbGUgJiYKKwljYXQgZmlsZS50bXAgPj5maWxlICYmCisJcm0gZmlsZS50bXAgJiYKKwlnaXQgY29tbWl0IC1hIC1xIC1tIDIgJiYKKwllY2hvIDkgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtcSAtbSAzICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NoZWNrIGlmIGNvbnRleHR1YWxseSBpbmRlcGVuZGVudCBkaWZmcyBmb3IgdGhlIHNhbWUgZmlsZSBhcHBseScgXAorCScoIGdpdCBkaWZmIHRlc3R+MiB0ZXN0fjE7IGdpdCBkaWZmIHRlc3R+MSB0ZXN0fjAgKXwgZ2l0IGFwcGx5JworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjItYXBwbHktc3ltbGluay1pbnNpZGUuc2ggYi90L3Q0MTIyLWFwcGx5LXN5bWxpbmstaW5zaWRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRhY2IzZjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTIyLWFwcGx5LXN5bWxpbmstaW5zaWRlLnNoCkBAIC0wLDAgKzEsMTU0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHkgdG8gZGVlcGVyIGRpcmVjdG9yeSB3aXRob3V0IGdldHRpbmcgZm9vbGVkIHdpdGggc3ltbGluaycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCW1rZGlyIC1wIGFyY2gvaTM4Ni9ib290IGFyY2gveDg2XzY0ICYmCisJdGVzdF93cml0ZV9saW5lcyAxIDIgMyA0IDUgPmFyY2gvaTM4Ni9ib290L01ha2VmaWxlICYmCisJdGVzdF9sbl9zX2FkZCAuLi9pMzg2L2Jvb3QgYXJjaC94ODZfNjQvYm9vdCAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggdGVzdCAmJgorCisJcm0gYXJjaC94ODZfNjQvYm9vdCAmJgorCW1rZGlyIGFyY2gveDg2XzY0L2Jvb3QgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIDIgMyA0IDUgNiA+YXJjaC94ODZfNjQvYm9vdC9NYWtlZmlsZSAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gc2Vjb25kICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tYmluYXJ5IC0xIC0tc3Rkb3V0ID50ZXN0LnBhdGNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBhcHBseSAnCisKKwlnaXQgY2hlY2tvdXQgdGVzdCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHRlc3QgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAtLWNhY2hlZCB0ZXN0ICYmCisJZ2l0IGFwcGx5IC0taW5kZXggdGVzdC5wYXRjaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHJlc3VsdCcgJworCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgLS1jYWNoZWQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByZXBsYXkgJiYKKwlUMT0kKGdpdCByZXYtcGFyc2UgIm1hc3Rlcl57dHJlZX0iKSAmJgorCVQyPSQoZ2l0IHJldi1wYXJzZSAiSEVBRF57dHJlZX0iKSAmJgorCXRlc3QgInokVDEiID0gInokVDIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZG8gbm90IHJlYWQgZnJvbSBiZXlvbmQgc3ltYm9saWMgbGluaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlta2RpciAtcCBhcmNoL3g4Nl82NC9kaXIgJiYKKwk+YXJjaC94ODZfNjQvZGlyL2ZpbGUgJiYKKwlnaXQgYWRkIGFyY2gveDg2XzY0L2Rpci9maWxlICYmCisJZWNobyBsaW5lID5hcmNoL3g4Nl82NC9kaXIvZmlsZSAmJgorCWdpdCBkaWZmID5wYXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKworCW1rZGlyIGFyY2gvaTM4Ni9kaXIgJiYKKwk+YXJjaC9pMzg2L2Rpci9maWxlICYmCisJbG4gLXMgLi4vaTM4Ni9kaXIgYXJjaC94ODZfNjQvZGlyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jYWNoZWQgcGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCBwYXRjaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2RvIG5vdCBmb2xsb3cgc3ltYm9saWMgbGluayAoc2V0dXApJyAnCisKKwlybSAtcmYgYXJjaC9pMzg2L2RpciBhcmNoL3g4Nl82NC9kaXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbG4gLXMgLi4vaTM4Ni9kaXIgYXJjaC94ODZfNjQvZGlyICYmCisJZ2l0IGFkZCBhcmNoL3g4Nl82NC9kaXIgJiYKKwlnaXQgZGlmZiBIRUFEID5hZGRfc3ltbGluay5wYXRjaCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKworCW1rZGlyIGFyY2gveDg2XzY0L2RpciAmJgorCT5hcmNoL3g4Nl82NC9kaXIvZmlsZSAmJgorCWdpdCBhZGQgYXJjaC94ODZfNjQvZGlyL2ZpbGUgJiYKKwlnaXQgZGlmZiBIRUFEID5hZGRfZmlsZS5wYXRjaCAmJgorCWdpdCBkaWZmIC1SIEhFQUQgPmRlbF9maWxlLnBhdGNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mciBhcmNoL3g4Nl82NC9kaXIgJiYKKworCWNhdCBhZGRfc3ltbGluay5wYXRjaCBhZGRfZmlsZS5wYXRjaCA+cGF0Y2ggJiYKKwljYXQgYWRkX3N5bWxpbmsucGF0Y2ggZGVsX2ZpbGUucGF0Y2ggPnRyaWNreV9kZWwgJiYKKworCW1rZGlyIGFyY2gvaTM4Ni9kaXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rIChzYW1lIGlucHV0KScgJworCisJIyBzYW1lIGlucHV0IGNyZWF0ZXMgYSBjb25mdXNpbmcgc3ltYm9saWMgbGluaworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAyPmVycm9yLXd0ICYmCisJdGVzdF9pMThuZ3JlcCAiYmV5b25kIGEgc3ltYm9saWMgbGluayIgZXJyb3Itd3QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhcmNoL3g4Nl82NC9kaXIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhcmNoL2kzODYvZGlyL2ZpbGUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IHBhdGNoIDI+ZXJyb3ItaXggJiYKKwl0ZXN0X2kxOG5ncmVwICJiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiBlcnJvci1peCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFyY2gveDg2XzY0L2RpciAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYXJjaC94ODZfNjQvZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBhcmNoL2kzODYvZGlyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1jYWNoZWQgcGF0Y2ggMj5lcnJvci1jdCAmJgorCXRlc3RfaTE4bmdyZXAgImJleW9uZCBhIHN5bWJvbGljIGxpbmsiIGVycm9yLWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBhcmNoL3g4Nl82NC9kaXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGFyY2gvaTM4Ni9kaXIgJiYKKworCT5hcmNoL2kzODYvZGlyL2ZpbGUgJiYKKwlnaXQgYWRkIGFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHRyaWNreV9kZWwgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBhcmNoL2kzODYvZGlyL2ZpbGUgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWluZGV4IHRyaWNreV9kZWwgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBhcmNoL2kzODYvZGlyL2ZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGFyY2gveDg2XzY0L2RpciAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYXJjaC9pMzg2L2RpciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2FjaGVkIHRyaWNreV9kZWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGFyY2gveDg2XzY0L2RpciAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYXJjaC9pMzg2L2RpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdkbyBub3QgZm9sbG93IHN5bWJvbGljIGxpbmsgKGV4aXN0aW5nKScgJworCisJIyBleGlzdGluZyBzeW1ib2xpYyBsaW5rCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWxuIC1zIC4uL2kzODYvZGlyIGFyY2gveDg2XzY0L2RpciAmJgorCWdpdCBhZGQgYXJjaC94ODZfNjQvZGlyICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgYWRkX2ZpbGUucGF0Y2ggMj5lcnJvci13dC1hZGQgJiYKKwl0ZXN0X2kxOG5ncmVwICJiZXlvbmQgYSBzeW1ib2xpYyBsaW5rIiBlcnJvci13dC1hZGQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhcmNoL2kzODYvZGlyL2ZpbGUgJiYKKworCW1rZGlyIGFyY2gvaTM4Ni9kaXIgJiYKKwk+YXJjaC9pMzg2L2Rpci9maWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IGRlbF9maWxlLnBhdGNoIDI+ZXJyb3Itd3QtZGVsICYmCisJdGVzdF9pMThuZ3JlcCAiYmV5b25kIGEgc3ltYm9saWMgbGluayIgZXJyb3Itd3QtZGVsICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgYXJjaC9pMzg2L2Rpci9maWxlICYmCisJcm0gYXJjaC9pMzg2L2Rpci9maWxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCBhZGRfZmlsZS5wYXRjaCAyPmVycm9yLWl4LWFkZCAmJgorCXRlc3RfaTE4bmdyZXAgImJleW9uZCBhIHN5bWJvbGljIGxpbmsiIGVycm9yLWl4LWFkZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGFyY2gvaTM4Ni9kaXIvZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggYXJjaC9pMzg2L2RpciAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2FjaGVkIGFkZF9maWxlLnBhdGNoIDI+ZXJyb3ItY3QtZmlsZSAmJgorCXRlc3RfaTE4bmdyZXAgImJleW9uZCBhIHN5bWJvbGljIGxpbmsiIGVycm9yLWN0LWZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGFyY2gvaTM4Ni9kaXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTIzLWFwcGx5LXNocmluay5zaCBiL3QvdDQxMjMtYXBwbHktc2hyaW5rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4NDE1N2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTIzLWFwcGx5LXNocmluay5zaApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHkgYSBwYXRjaCB0aGF0IGlzIGxhcmdlciB0aGFuIHRoZSBwcmVpbWFnZScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+RiAgPDxcRU9GCisxCisyCiszCis0Cis1Cis2Cis3Cis4Cis5OTk5OTkKK0EKK0IKK0MKK0QKK0UKK0YKK0cKK0gKK0kKK0oKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZ2l0IGFkZCBGICYmCisJbXYgRiBHICYmCisJc2VkIC1lICJzLzEvMTEvIiAtZSAicy85OTk5OTkvOS8iIC1lICJzL0gvSEgvIiA8RyA+RiAmJgorCWdpdCBkaWZmID5wYXRjaCAmJgorCXNlZCAtZSAiL15cJC9kIiA8RyA+RiAmJgorCWdpdCBhZGQgRgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHNob3VsZCBmYWlsIGdyYWNlZnVsbHknICcKKworCWlmIGdpdCBhcHBseSAtLWluZGV4IHBhdGNoCisJdGhlbgorCQllY2hvIE9vcHMsIHNob3VsZCBub3QgaGF2ZSBzdWNjZWVkZWQKKwkJZmFsc2UKKwllbHNlCisJCXN0YXR1cz0kPworCQllY2hvICJTdGF0dXMgd2FzICRzdGF0dXMiCisJCWlmIHRlc3QgLWYgLmdpdC9pbmRleC5sb2NrCisJCXRoZW4KKwkJCWVjaG8gT29wcywgc2hvdWxkIG5vdCBoYXZlIGNyYXNoZWQKKwkJCWZhbHNlCisJCWZpCisJZmkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTI0LWFwcGx5LXdzLXJ1bGUuc2ggYi90L3Q0MTI0LWFwcGx5LXdzLXJ1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDM1MDA2NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjQtYXBwbHktd3MtcnVsZS5zaApAQCAtMCwwICsxLDUyNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NvcmUud2hpdGVzcGFjZSBydWxlcyBhbmQgZ2l0IGFwcGx5JworCisuIC4vdGVzdC1saWIuc2gKKworcHJlcGFyZV90ZXN0X2ZpbGUgKCkgeworCisJIyBBIGxpbmUgdGhhdCBoYXMgY2hhcmFjdGVyIFggaXMgdG91Y2hlZCBpZmYgUlVMRSBpcyBpbiBlZmZlY3Q6CisJIyAgICAgICBYICBSVUxFCisJIyAgIAkhICB0cmFpbGluZy1zcGFjZQorCSMgICAJQCAgc3BhY2UtYmVmb3JlLXRhYgorCSMgICAJIyAgaW5kZW50LXdpdGgtbm9uLXRhYiAoZGVmYXVsdCB0YWIgd2lkdGggOCkKKwkjCT0gIGluZGVudC13aXRoLW5vbi10YWIsdGFid2lkdGg9MTYKKwkjICAgCSUgIHRhYi1pbi1pbmRlbnQKKwlzZWQgLWUgInMvXy8gL2ciIC1lICJzLz4vCS8iIDw8LVxFT0YKKwkJQW5fU1AgaW4gYW4gb3JkaW5hcnkgbGluZT5hbmQgYSBIVC4KKwkJPkEgSFQgKCUpLgorCQlfPkEgU1AgYW5kIGEgSFQgKEAlKS4KKwkJXz5fQSBTUCwgYSBIVCBhbmQgYSBTUCAoQCUpLgorCQlfX19fX19fU2V2ZW4gU1AuCisJCV9fX19fX19fRWlnaHQgU1AgKCMpLgorCQlfX19fX19fPlNldmVuIFNQIGFuZCBhIEhUIChAJSkuCisJCV9fX19fX19fPkVpZ2h0IFNQIGFuZCBhIEhUIChAIyUpLgorCQlfX19fX19fPl9TZXZlbiBTUCwgYSBIVCBhbmQgYSBTUCAoQCUpLgorCQlfX19fX19fXz5fRWlnaHQgU1AsIGEgSFQgYW5kIGEgU1AgKEAjJSkuCisJCV9fX19fX19fX19fX19fX0ZpZnRlZW4gU1AgKCMpLgorCQlfX19fX19fX19fX19fX18+RmlmdGVlbiBTUCBhbmQgYSBIVCAoQCMlKS4KKwkJX19fX19fX19fX19fX19fX1NpeHRlZW4gU1AgKCM9KS4KKwkJX19fX19fX19fX19fX19fXz5TaXh0ZWVuIFNQIGFuZCBhIEhUIChAIyU9KS4KKwkJX19fX19hX19GaXZlIFNQLCBhIG5vbiBXUywgdHdvIFNQLgorCQlBIGxpbmUgd2l0aCBhICghKSB0cmFpbGluZyBTUF8KKwkJQSBsaW5lIHdpdGggYSAoISkgdHJhaWxpbmcgSFQ+CisJRU9GCit9CisKK2FwcGx5X3BhdGNoICgpIHsKKwk+dGFyZ2V0ICYmCisJc2VkIC1lICJzfFwoW2FiXVwpL2ZpbGV8XDEvdGFyZ2V0fCIgPHBhdGNoIHwKKwlnaXQgYXBwbHkgIiRAIgorfQorCit0ZXN0X2ZpeCAoKSB7CisJIyBmaXggc2hvdWxkIG5vdCBiYXJmCisJYXBwbHlfcGF0Y2ggLS13aGl0ZXNwYWNlPWZpeCB8fCByZXR1cm4gMQorCisJIyBmaW5kIHRvdWNoZWQgbGluZXMKKwkkRElGRiBmaWxlIHRhcmdldCB8IHNlZCAtbiAtZSAicy9ePiAvL3AiID5maXhlZAorCisJIyB0aGUgY2hhbmdlZCBsaW5lcyBhcmUgYWxsIGV4cGVjdGVkIHRvIGNoYW5nZQorCWZpeGVkX2NudD0kKHdjIC1sIDxmaXhlZCkKKwljYXNlICIkMSIgaW4KKwknJykgZXhwZWN0X2NudD0kZml4ZWRfY250IDs7CisJPyopIGV4cGVjdF9jbnQ9JChncmVwICJbJDFdIiA8Zml4ZWQgfCB3YyAtbCkgOzsKKwllc2FjCisJdGVzdCAkZml4ZWRfY250IC1lcSAkZXhwZWN0X2NudCB8fCByZXR1cm4gMQorCisJIyBhbmQgd2UgYXJlIG5vdCBtaXNzaW5nIGFueXRoaW5nCisJY2FzZSAiJDEiIGluCisJJycpIGV4cGVjdF9jbnQ9MCA7OworCT8qKSBleHBlY3RfY250PSQoZ3JlcCAiWyQxXSIgPGZpbGUgfCB3YyAtbCkgOzsKKwllc2FjCisJdGVzdCAkZml4ZWRfY250IC1lcSAkZXhwZWN0X2NudCB8fCByZXR1cm4gMQorCisJIyBHZXQgdGhlIHBhdGNoIGFjdHVhbGx5IGFwcGxpZWQKKwlnaXQgZGlmZi1maWxlcyAtcCB0YXJnZXQgPmZpeGVkLXBhdGNoCisJdGVzdCAtcyBmaXhlZC1wYXRjaCAmJiByZXR1cm4gMAorCisJIyBNYWtlIHN1cmUgaXQgaXMgY29tcGxhaW50LWZyZWUKKwk+dGFyZ2V0CisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1lcnJvci1hbGwgPGZpeGVkLXBhdGNoCisKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXByZXBhcmVfdGVzdF9maWxlID5maWxlICYmCisJZ2l0IGRpZmYtZmlsZXMgLXAgPnBhdGNoICYmCisJPnRhcmdldCAmJgorCWdpdCBhZGQgdGFyZ2V0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZT1ub3dhcm4sIGRlZmF1bHQgcnVsZScgJworCisJYXBwbHlfcGF0Y2ggLS13aGl0ZXNwYWNlPW5vd2FybiAmJgorCXRlc3RfY21wIGZpbGUgdGFyZ2V0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZT13YXJuLCBkZWZhdWx0IHJ1bGUnICcKKworCWFwcGx5X3BhdGNoIC0td2hpdGVzcGFjZT13YXJuICYmCisJdGVzdF9jbXAgZmlsZSB0YXJnZXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlPWVycm9yLWFsbCwgZGVmYXVsdCBydWxlJyAnCisKKwl0ZXN0X211c3RfZmFpbCBhcHBseV9wYXRjaCAtLXdoaXRlc3BhY2U9ZXJyb3ItYWxsICYmCisJISB0ZXN0IC1zIHRhcmdldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3doaXRlc3BhY2U9ZXJyb3ItYWxsLCBubyBydWxlJyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAtdHJhaWxpbmcsLXNwYWNlLWJlZm9yZSwtaW5kZW50ICYmCisJYXBwbHlfcGF0Y2ggLS13aGl0ZXNwYWNlPWVycm9yLWFsbCAmJgorCXRlc3RfY21wIGZpbGUgdGFyZ2V0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZT1lcnJvci1hbGwsIG5vIHJ1bGUgKGF0dHJpYnV0ZSknICcKKworCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwllY2hvICJ0YXJnZXQgLXdoaXRlc3BhY2UiID4uZ2l0YXR0cmlidXRlcyAmJgorCWFwcGx5X3BhdGNoIC0td2hpdGVzcGFjZT1lcnJvci1hbGwgJiYKKwl0ZXN0X2NtcCBmaWxlIHRhcmdldAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NwYWNlcyBpbnNlcnRlZCBieSB0YWItaW4taW5kZW50JyAnCisKKwlnaXQgY29uZmlnIGNvcmUud2hpdGVzcGFjZSAtdHJhaWxpbmcsLXNwYWNlLC1pbmRlbnQsdGFiICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwl0ZXN0X2ZpeCAlICYmCisJc2VkIC1lICJzL18vIC9nIiAtZSAicy8+LwkvIiA8PC1cRU9GID5leHBlY3QgJiYKKwkJQW5fU1AgaW4gYW4gb3JkaW5hcnkgbGluZT5hbmQgYSBIVC4KKwkJX19fX19fX19BIEhUICglKS4KKwkJX19fX19fX19BIFNQIGFuZCBhIEhUIChAJSkuCisJCV9fX19fX19fX0EgU1AsIGEgSFQgYW5kIGEgU1AgKEAlKS4KKwkJX19fX19fX1NldmVuIFNQLgorCQlfX19fX19fX0VpZ2h0IFNQICgjKS4KKwkJX19fX19fX19TZXZlbiBTUCBhbmQgYSBIVCAoQCUpLgorCQlfX19fX19fX19fX19fX19fRWlnaHQgU1AgYW5kIGEgSFQgKEAjJSkuCisJCV9fX19fX19fX1NldmVuIFNQLCBhIEhUIGFuZCBhIFNQIChAJSkuCisJCV9fX19fX19fX19fX19fX19fRWlnaHQgU1AsIGEgSFQgYW5kIGEgU1AgKEAjJSkuCisJCV9fX19fX19fX19fX19fX0ZpZnRlZW4gU1AgKCMpLgorCQlfX19fX19fX19fX19fX19fRmlmdGVlbiBTUCBhbmQgYSBIVCAoQCMlKS4KKwkJX19fX19fX19fX19fX19fX1NpeHRlZW4gU1AgKCM9KS4KKwkJX19fX19fX19fX19fX19fX19fX19fX19fU2l4dGVlbiBTUCBhbmQgYSBIVCAoQCMlPSkuCisJCV9fX19fYV9fRml2ZSBTUCwgYSBub24gV1MsIHR3byBTUC4KKwkJQSBsaW5lIHdpdGggYSAoISkgdHJhaWxpbmcgU1BfCisJCUEgbGluZSB3aXRoIGEgKCEpIHRyYWlsaW5nIEhUPgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCB0YXJnZXQKKworJworCitmb3IgdCBpbiAtICcnCitkbworCWNhc2UgIiR0IiBpbiAnJykgdHQ9JyEnIDs7ICopIHR0PSA7OyBlc2FjCisJZm9yIHMgaW4gLSAnJworCWRvCisJCWNhc2UgIiRzIiBpbiAnJykgdHM9J0AnIDs7ICopIHRzPSA7OyBlc2FjCisJCWZvciBpIGluIC0gJycKKwkJZG8KKwkJCWNhc2UgIiRpIiBpbiAnJykgdGk9JyMnIHRpMTY9Jz0nOzsgKikgdGk9IHRpMTY9IDs7IGVzYWMKKwkJCWZvciBoIGluIC0gJycKKwkJCWRvCisJCQkJWyAteiAiJGgkaSIgXSAmJiBjb250aW51ZQorCQkJCWNhc2UgIiRoIiBpbiAnJykgdGg9JyUnIDs7ICopIHRoPSA7OyBlc2FjCisJCQkJcnVsZT0ke3R9dHJhaWxpbmcsJHtzfXNwYWNlLCR7aX1pbmRlbnQsJHtofXRhYgorCisJCQkJcm0gLWYgLmdpdGF0dHJpYnV0ZXMKKwkJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJydWxlPSRydWxlIiAnCisJCQkJCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICIkcnVsZSIgJiYKKwkJCQkJdGVzdF9maXggIiR0dCR0cyR0aSR0aCIKKwkJCQknCisKKwkJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJydWxlPSRydWxlLHRhYndpZHRoPTE2IiAnCisJCQkJCWdpdCBjb25maWcgY29yZS53aGl0ZXNwYWNlICIkcnVsZSx0YWJ3aWR0aD0xNiIgJiYKKwkJCQkJdGVzdF9maXggIiR0dCR0cyR0aTE2JHRoIgorCQkJCScKKworCQkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJ1bGU9JHJ1bGUgKGF0dHJpYnV0ZXMpIiAnCisJCQkJCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwkJCQkJZWNobyAidGFyZ2V0IHdoaXRlc3BhY2U9JHJ1bGUiID4uZ2l0YXR0cmlidXRlcyAmJgorCQkJCQl0ZXN0X2ZpeCAiJHR0JHRzJHRpJHRoIgorCQkJCScKKworCQkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInJ1bGU9JHJ1bGUsdGFid2lkdGg9MTYgKGF0dHJpYnV0ZXMpIiAnCisJCQkJCWVjaG8gInRhcmdldCB3aGl0ZXNwYWNlPSRydWxlLHRhYndpZHRoPTE2IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJCQkJdGVzdF9maXggIiR0dCR0cyR0aTE2JHRoIgorCQkJCScKKworCQkJZG9uZQorCQlkb25lCisJZG9uZQorZG9uZQorCitjcmVhdGVfcGF0Y2ggKCkgeworCXNlZCAtZSAicy9fLyAvIiA8PC1cRU9GCisJCWRpZmYgLS1naXQgYS90YXJnZXQgYi90YXJnZXQKKwkJaW5kZXggZTY5ZGUyOS4uOGJkNjY0OCAxMDA2NDQKKwkJLS0tIGEvdGFyZ2V0CisJCSsrKyBiL3RhcmdldAorCQlAQCAtMCwwICsxLDMgQEAKKwkJK0FuIGVtcHR5IGxpbmUgZm9sbG93cworCQkrCisJCStBIGxpbmUgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCBubyBuZXdsaW5lXworCQlcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKwlFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhaWxpbmcgd2hpdGVzcGFjZSAmIG5vIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiBmaWxlJyAnCisJPnRhcmdldCAmJgorCWNyZWF0ZV9wYXRjaCA+cGF0Y2gtZmlsZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoLWZpbGUgJiYKKwlncmVwICJuZXdsaW5lJCIgdGFyZ2V0ICYmCisJZ3JlcCAiXiQiIHRhcmdldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBFT0Ygd2l0aCAtLXdoaXRlc3BhY2U9Zml4ICgxKScgJworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgY29yZS53aGl0ZXNwYWNlICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPmV4cGVjdCAmJgorCXsgY2F0IGV4cGVjdDsgZWNobzsgfSA+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBFT0Ygd2l0aCAtLXdoaXRlc3BhY2U9Zml4ICgyKScgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl7IGVjaG8gYTsgZWNobyBjOyB9ID5leHBlY3QgJiYKKwl7IGNhdCBleHBlY3Q7IGVjaG87IGVjaG87IH0gPm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgRU9GIHdpdGggLS13aGl0ZXNwYWNlPWZpeCAoMyknICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBhOyBlY2hvIGM7IGVjaG87IH0gPmV4cGVjdCAmJgorCXsgY2F0IGV4cGVjdDsgZWNobzsgZWNobzsgfSA+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBlbmQgb2YgaHVuaywgbm90IGF0IEVPRiB3aXRoIC0td2hpdGVzcGFjZT1maXgnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvOyBlY2hvIGQ7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGE7IGVjaG8gYzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobzsgZWNobyBkOyB9ID5leHBlY3QgJiYKKwljcCBleHBlY3Qgb25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFuayBhdCBFT0Ygd2l0aCAtLXdoaXRlc3BhY2U9d2FybicgJworCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvID4+b25lICYmCisJY2F0IG9uZSA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCisJZ2l0IGNoZWNrb3V0IG9uZSAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9d2FybiBwYXRjaCAyPmVycm9yICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZSAmJgorCWdyZXAgIm5ldyBibGFuayBsaW5lIGF0IEVPRiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYXQgRU9GIHdpdGggLS13aGl0ZXNwYWNlPWVycm9yJyAnCisJeyBlY2hvIGE7IGVjaG8gYjsgZWNobyBjOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWNhdCBvbmUgPmV4cGVjdCAmJgorCWVjaG8gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1lcnJvciBwYXRjaCAyPmVycm9yICYmCisJdGVzdF9jbXAgZXhwZWN0IG9uZSAmJgorCWdyZXAgIm5ldyBibGFuayBsaW5lIGF0IEVPRiIgZXJyb3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbmsgYnV0IG5vdCBlbXB0eSBhdCBFT0YnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJZWNobyAiICAgIiA+Pm9uZSAmJgorCWNhdCBvbmUgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKworCWdpdCBjaGVja291dCBvbmUgJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPXdhcm4gcGF0Y2ggMj5lcnJvciAmJgorCXRlc3RfY21wIGV4cGVjdCBvbmUgJiYKKwlncmVwICJuZXcgYmxhbmsgbGluZSBhdCBFT0YiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5aW5nIGJleW9uZCBFT0YgcmVxdWlyZXMgb25lIG5vbi1ibGFuayBjb250ZXh0IGxpbmUnICcKKwl7IGVjaG87IGVjaG87IGVjaG87IGVjaG87IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGI7IH0gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgb25lICYmCisJeyBlY2hvIGE7IGVjaG87IH0gPm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvbnMgb2YgYmxhbmtzIGF0IEVPRiBzaG91bGQgbm90IGFwcGx5JyAnCisJZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTY7IGRvCisJCWVjaG87IGVjaG87IGVjaG87IGVjaG87CisJZG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGEgPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwk+b25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyBibGFuayBsaW5lIGF0IGVuZCB3aXRoIC0td2hpdGVzcGFjZT1maXgnICcKKwllY2hvIGEgPm9uZSAmJgorCWVjaG8gPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gYiA+Pm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisJZWNobyBhID5vbmUgJiYKKwljcCBvbmUgc2F2ZWQtb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IHBhdGNoICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0ICYmCisJbXYgc2F2ZWQtb25lIG9uZSAmJgorCWdpdCBhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIG1pc3NpbmcgYmxhbmsgbGluZXMgYXQgZW5kIHdpdGggLS13aGl0ZXNwYWNlPWZpeCcgJworCXsgZWNobyBhOyBlY2hvOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJY3Agb25lIG5vLWJsYW5rLWxpbmVzICYmCisJeyBlY2hvOyBlY2hvOyB9ID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGQgPj5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJZWNobyA+Pm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwljcCBuby1ibGFuay1saW5lcyBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QgJiYKKwltdiBuby1ibGFuay1saW5lcyBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgYmxhbmsgbGluZSBhdCBlbmQsIGluc2VydCBiZWZvcmUgZW5kLCAtLXdoaXRlc3BhY2U9Zml4JyAnCisJeyBlY2hvIGE7IGVjaG87IH0gPm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJeyBlY2hvIGI7IGVjaG8gYTsgZWNobzsgfSA+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwllY2hvIGEgPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCWdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgb25lIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaHJpbmsgZmlsZSB3aXRoIHRvbnMgb2YgbWlzc2luZyBibGFua3MgYXQgZW5kIG9mIGZpbGUnICcKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWNwIG9uZSBuby1ibGFuay1saW5lcyAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2OyBkbworCQllY2hvOyBlY2hvOyBlY2hvOyBlY2hvOworCWRvbmUgPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gYSA+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwljcCBuby1ibGFuay1saW5lcyBvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QgJiYKKwltdiBuby1ibGFuay1saW5lcyBvbmUgJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pc3NpbmcgYmxhbmtzIGF0IEVPRiBtdXN0IG9ubHkgbWF0Y2ggYmxhbmsgbGluZXMnICcKKwl7IGVjaG8gYTsgZWNobyBiOyB9ID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXsgZWNobyBjOyBlY2hvIGQ7IH0gPj5vbmUgJiYKKwlnaXQgZGlmZiAtLSBvbmUgPnBhdGNoICYmCisKKwllY2hvIGEgPm9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoCisnCisKK3NlZCAtZSdzL1ovLycgPm9uZSA8PEVPRgorYQorYgorYworCQkgICAgICBaCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlzc2luZyBibGFuayBsaW5lIHNob3VsZCBtYXRjaCBjb250ZXh0IGxpbmUgd2l0aCBzcGFjZXMnICcKKwlnaXQgYWRkIG9uZSAmJgorCWVjaG8gZCA+Pm9uZSAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwl7IGVjaG8gYTsgZWNobyBiOyBlY2hvIGM7IH0gPm9uZSAmJgorCWNwIG9uZSBleHBlY3QgJiYKKwl7IGVjaG87IGVjaG8gZDsgfSA+PmV4cGVjdCAmJgorCWdpdCBhZGQgb25lICYmCisKKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QKKycKKworc2VkIC1lJ3MvWi8vJyA+b25lIDw8RU9GCithCitiCitjCisJCSAgICAgIFoKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lLCBidXQgd2l0aCB0aGUgLS1pZ25vcmUtc3BhY2Utb3B0aW9uJyAnCisJZ2l0IGFkZCBvbmUgJiYKKwllY2hvIGQgPj5vbmUgJiYKKwljcCBvbmUgZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCXsgZWNobyBhOyBlY2hvIGI7IGVjaG8gYzsgfSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKworCWdpdCBjaGVja291dC1pbmRleCAtZiBvbmUgJiYKKwlnaXQgYXBwbHkgLS1pZ25vcmUtc3BhY2UtY2hhbmdlIC0td2hpdGVzcGFjZT1maXggcGF0Y2ggJiYKKwl0ZXN0X2NtcCBvbmUgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUsIGJ1dCB3aXRoIENSLUxGIGxpbmUgZW5kaW5ncyAmJiBjci1hdC1lb2wgc2V0JyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgY3ItYXQtZW9sICYmCisJcHJpbnRmICJhXHJcbiIgPm9uZSAmJgorCXByaW50ZiAiYlxyXG4iID4+b25lICYmCisJcHJpbnRmICJjXHJcbiIgPj5vbmUgJiYKKwljcCBvbmUgc2F2ZS1vbmUgJiYKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgXHJcbiIgPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXByaW50ZiAiZFxyXG4iID4+b25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tIG9uZSA+cGF0Y2ggJiYKKwltdiBzYXZlLW9uZSBvbmUgJiYKKworCWdpdCBhcHBseSAtLWlnbm9yZS1zcGFjZS1jaGFuZ2UgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaCAmJgorCXRlc3RfY21wIG9uZSBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2FtZSwgYnV0IHdpdGggQ1ItTEYgbGluZSBlbmRpbmdzICYmIGNyLWF0LWVvbCB1bnNldCcgJworCWdpdCBjb25maWcgLS11bnNldCBjb3JlLndoaXRlc3BhY2UgJiYKKwlwcmludGYgImFcclxuIiA+b25lICYmCisJcHJpbnRmICJiXHJcbiIgPj5vbmUgJiYKKwlwcmludGYgImNcclxuIiA+Pm9uZSAmJgorCWNwIG9uZSBzYXZlLW9uZSAmJgorCXByaW50ZiAiICAgICAgICAgICAgICAgICBcclxuIiA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJY3Agb25lIGV4cGVjdCAmJgorCXByaW50ZiAiZFxyXG4iID4+b25lICYmCisJZ2l0IGRpZmYgLS0gb25lID5wYXRjaCAmJgorCW12IHNhdmUtb25lIG9uZSAmJgorCWVjaG8gZCA+PmV4cGVjdCAmJgorCisJZ2l0IGFwcGx5IC0taWdub3JlLXNwYWNlLWNoYW5nZSAtLXdoaXRlc3BhY2U9Zml4IHBhdGNoICYmCisJdGVzdF9jbXAgb25lIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlPWZpeCB0byBleHBhbmQnICcKKwlxel90b190YWJfc3BhY2UgPnByZWltYWdlIDw8LVxFT0YgJiYKKwlRUWEKKwlRUWIKKwlRUWMKKwlaWlpaWlpaWlpaWlpaWlpaZAorCVFRZQorCVFRZgorCVFRZworCUVPRgorCXF6X3RvX3RhYl9zcGFjZSA+cGF0Y2ggPDwtXEVPRiAmJgorCWRpZmYgLS1naXQgYS9wcmVpbWFnZSBiL3ByZWltYWdlCisJLS0tIGEvcHJlaW1hZ2UKKwkrKysgYi9wcmVpbWFnZQorCUBAIC0xLDcgKzEsNiBAQAorCSBRUWEKKwkgUVFiCisJIFFRYworCS1RUWQKKwkgUVFlCisJIFFRZgorCSBRUWcKKwlFT0YKKwlnaXQgLWMgY29yZS53aGl0ZXNwYWNlPXRhYi1pbi1pbmRlbnQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlIGNoZWNrIHNraXBwZWQgZm9yIGV4Y2x1ZGVkIHBhdGhzJyAnCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgYmxhbmstYXQtZW9sICYmCisJPnVzZWQgJiYKKwk+dW51c2VkICYmCisJZ2l0IGFkZCB1c2VkIHVudXNlZCAmJgorCWVjaG8gInVzZWQiID51c2VkICYmCisJZWNobyAidW51c2VkICIgPnVudXNlZCAmJgorCWdpdCBkaWZmLWZpbGVzIC1wIHVzZWQgdW51c2VkID5wYXRjaCAmJgorCWdpdCBhcHBseSAtLWluY2x1ZGU9dXNlZCAtLXN0YXQgLS13aGl0ZXNwYWNlPWVycm9yIDxwYXRjaAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjUtYXBwbHktd3MtZnV6ei5zaCBiL3QvdDQxMjUtYXBwbHktd3MtZnV6ei5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NjcxZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyNS1hcHBseS13cy1mdXp6LnNoCkBAIC0wLDAgKzEsMTAzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHlpbmcgcGF0Y2ggdGhhdCBoYXMgYnJva2VuIHdoaXRlc3BhY2VzIGluIGNvbnRleHQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIGZpbGUtMCBpcyBmdWxsIG9mIHdoaXRlc3BhY2UgYnJlYWthZ2VzCisJZm9yIGwgaW4gYSBiYiBjIGQgZWVlZSBmIGdnZyBoCisJZG8KKwkJZWNobyAiJGwgIgorCWRvbmUgPmZpbGUtMCAmJgorCisJIyBwYXRjaC0wIGNyZWF0ZXMgYSB3aGl0ZXNwYWNlIGJyb2tlbiBmaWxlCisJY2F0IGZpbGUtMCA+ZmlsZSAmJgorCWdpdCBkaWZmID5wYXRjaC0wICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIGZpbGUtMSBpcyBzdGlsbCBmdWxsIG9mIHdoaXRlc3BhY2UgYnJlYWthZ2VzLAorCSMgYnV0IGhhcyBvbmUgbGluZSB1cGRhdGVkLCB3aXRob3V0IGZpeGluZyBhbnkKKwkjIHdoaXRlc3BhY2VzLgorCSMgcGF0Y2gtMSByZWNvcmRzIHRoYXQgY2hhbmdlLgorCXNlZCAtZSAicy9kL0QvIiBmaWxlLTAgPmZpbGUtMSAmJgorCWNhdCBmaWxlLTEgPmZpbGUgJiYKKwlnaXQgZGlmZiA+cGF0Y2gtMSAmJgorCisJIyBwYXRjaC1hbGwgaXMgdGhlIGVmZmVjdCBvZiBib3RoIHBhdGNoLTAgYW5kIHBhdGNoLTEKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWNhdCBmaWxlLTEgPmZpbGUgJiYKKwlnaXQgZGlmZiA+cGF0Y2gtYWxsICYmCisKKwkjIHBhdGNoLTIgaXMgdGhlIHNhbWUgYXMgcGF0Y2gtMSBidXQgaXMgYmFzZWQKKwkjIG9uIGEgdmVyc2lvbiB0aGF0IGFscmVhZHkgaGFzIHdoaXRlc3BhY2UgZml4ZWQsCisJIyBhbmQgZG9lcyBub3QgaW50cm9kdWNlIHdoaXRlc3BhY2UgYnJlYWthZ2VzLgorCXNlZCAtZSAicy8gXCQvLyIgcGF0Y2gtMSA+cGF0Y2gtMiAmJgorCisJIyBJZiBhbGwgd2hpdGVzcGFjZSBicmVha2FnZXMgYXJlIGZpeGVkIHRoZSBjb250ZW50cworCSMgc2hvdWxkIGxvb2sgbGlrZSBmaWxlLWZpeGVkCisJc2VkIC1lICJzLyBcJC8vIiBmaWxlLTEgPmZpbGUtZml4ZWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIG5vZml4ICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIEJhc2VsaW5lLiAgQXBwbHlpbmcgd2l0aG91dCBmaXhpbmcgYW55IHdoaXRlc3BhY2UKKwkjIGJyZWFrYWdlcy4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPW5vd2FybiBwYXRjaC0wICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1ub3dhcm4gcGF0Y2gtMSAmJgorCisJIyBUaGUgcmVzdWx0IHNob3VsZCBvYnZpb3VzbHkgbWF0Y2guCisJdGVzdF9jbXAgZmlsZS0xIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aGZpeCAoZm9yd2FyZCknICcKKworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwkjIFRoZSBmaXJzdCBhcHBsaWNhdGlvbiB3aWxsIG11bmdlIHRoZSBjb250ZXh0IGxpbmVzCisJIyB0aGUgc2Vjb25kIHBhdGNoIGRlcGVuZHMgb24uICBXZSBzaG91bGQgYmUgYWJsZSB0bworCSMgYWRqdXN0IGFuZCBzdGlsbCBhcHBseS4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaC0wICYmCisJZ2l0IGFwcGx5IC0td2hpdGVzcGFjZT1maXggcGF0Y2gtMSAmJgorCisJdGVzdF9jbXAgZmlsZS1maXhlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGhmaXggKGJhY2t3YXJkKScgJworCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKworCSMgTm93IHdlIGhhdmUgYSB3aGl0ZXNwYWNlIGJyZWFrYWdlcyBvbiBvdXIgc2lkZS4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPW5vd2FybiBwYXRjaC0wICYmCisKKwkjIEFuZCBzb21lYm9keSBzZW5kcyBpbiBhIHBhdGNoIGJhc2VkIG9uIGltYWdlCisJIyB3aXRoIHdoaXRlc3BhY2UgYWxyZWFkeSBmaXhlZC4KKwlnaXQgYXBwbHkgLS13aGl0ZXNwYWNlPWZpeCBwYXRjaC0yICYmCisKKwkjIFRoZSByZXN1bHQgc2hvdWxkIGFjY2VwdCB0aGUgd2hpdGVzcGFjZSBmaXhlZAorCSMgcG9zdGltYWdlLiAgQnV0IHRoZSBsaW5lIHdpdGggImgiIGlzIGJleW9uZCBjb250ZXh0CisJIyBob3Jpem9uIGFuZCBsZWZ0IHVuZml4ZWQuCisKKwlzZWQgLWUgL2gvZCBmaWxlLWZpeGVkID5maXhlZC1oZWFkICYmCisJc2VkIC1lIC9oL2QgZmlsZSA+ZmlsZS1oZWFkICYmCisJdGVzdF9jbXAgZml4ZWQtaGVhZCBmaWxlLWhlYWQgJiYKKworCXNlZCAtbiAtZSAvaC9wIGZpbGUtZml4ZWQgPmZpeGVkLXRhaWwgJiYKKwlzZWQgLW4gLWUgL2gvcCBmaWxlID5maWxlLXRhaWwgJiYKKworCSEgdGVzdF9jbXAgZml4ZWQtdGFpbCBmaWxlLXRhaWwKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjYtYXBwbHktZW1wdHkuc2ggYi90L3Q0MTI2LWFwcGx5LWVtcHR5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNlYjZhNzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTI2LWFwcGx5LWVtcHR5LnNoCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdhcHBseSBlbXB0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5lbXB0eSAmJgorCWdpdCBhZGQgZW1wdHkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlmb3IgaSBpbiBhIGIgYyBkIGUKKwlkbworCQllY2hvICRpCisJZG9uZSA+ZW1wdHkgJiYKKwljYXQgZW1wdHkgPmV4cGVjdCAmJgorCWdpdCBkaWZmIHwKKwlzZWQgLWUgIi9eZGlmZiAtLWdpdC9kIiBcCisJICAgIC1lICIvXmluZGV4IC9kIiBcCisJICAgIC1lICJzfGEvZW1wdHl8ZW1wdHkub3JpZ3wiIFwKKwkgICAgLWUgInN8Yi9lbXB0eXxlbXB0eXwiID5wYXRjaDAgJiYKKwlzZWQgLWUgInN8ZW1wdHl8bWlzc2luZ3wiIHBhdGNoMCA+cGF0Y2gxICYmCisJPmVtcHR5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZW1wdHknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgbWlzc2luZyAmJgorCWdpdCBhcHBseSBwYXRjaDAgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1pbmRleCBlbXB0eScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBtaXNzaW5nICYmCisJZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2gwICYmCisJdGVzdF9jbXAgZXhwZWN0IGVtcHR5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgY3JlYXRlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIG1pc3NpbmcgJiYKKwlnaXQgYXBwbHkgcGF0Y2gxICYmCisJdGVzdF9jbXAgZXhwZWN0IG1pc3NpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1pbmRleCBjcmVhdGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLWYgbWlzc2luZyAmJgorCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoMSAmJgorCXRlc3RfY21wIGV4cGVjdCBtaXNzaW5nICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTI3LWFwcGx5LXNhbWUtZm4uc2ggYi90L3Q0MTI3LWFwcGx5LXNhbWUtZm4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTcyOTQ2YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjctYXBwbHktc2FtZS1mbi5zaApAQCAtMCwwICsxLDkwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHkgc2FtZSBmaWxlbmFtZScKKworLiAuL3Rlc3QtbGliLnNoCisKK21vZGlmeSAoKSB7CisJc2VkIC1lICIkMSIgPCAiJDIiID4gIiQyIi54ICYmCisJbXYgIiQyIi54ICIkMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbQorCWRvCisJCWVjaG8gJGkKKwlkb25lID5zYW1lX2ZuICYmCisJY3Agc2FtZV9mbiBvdGhlcl9mbiAmJgorCWdpdCBhZGQgc2FtZV9mbiBvdGhlcl9mbiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc2FtZSBmaWxlbmFtZSB3aXRoIGluZGVwZW5kZW50IGNoYW5nZXMnICcKKwltb2RpZnkgInMvXmQvei8iIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiA+IHBhdGNoMCAmJgorCWdpdCBhZGQgc2FtZV9mbiAmJgorCW1vZGlmeSAicy9eaS95LyIgc2FtZV9mbiAmJgorCWdpdCBkaWZmID4+IHBhdGNoMCAmJgorCWNwIHNhbWVfZm4gc2FtZV9mbjIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGFwcGx5IHBhdGNoMCAmJgorCXRlc3RfY21wIHNhbWVfZm4gc2FtZV9mbjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgc2FtZSBmaWxlbmFtZSB3aXRoIG92ZXJsYXBwaW5nIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbW9kaWZ5ICJzL15kL3ovIiBzYW1lX2ZuICYmCisJZ2l0IGRpZmYgPiBwYXRjaDAgJiYKKwlnaXQgYWRkIHNhbWVfZm4gJiYKKwltb2RpZnkgInMvXmUveS8iIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiA+PiBwYXRjaDAgJiYKKwljcCBzYW1lX2ZuIHNhbWVfZm4yICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSBwYXRjaDAgJiYKKwl0ZXN0X2NtcCBzYW1lX2ZuIHNhbWVfZm4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHNhbWUgbmV3IGZpbGVuYW1lIGFmdGVyIHJlbmFtZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgbXYgc2FtZV9mbiBuZXdfZm4gJiYKKwltb2RpZnkgInMvXmQvei8iIG5ld19mbiAmJgorCWdpdCBhZGQgbmV3X2ZuICYmCisJZ2l0IGRpZmYgLU0gLS1jYWNoZWQgPiBwYXRjaDEgJiYKKwltb2RpZnkgInMvXmUveS8iIG5ld19mbiAmJgorCWdpdCBkaWZmID4+IHBhdGNoMSAmJgorCWNwIG5ld19mbiBuZXdfZm4yICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoMSAmJgorCXRlc3RfY21wIG5ld19mbiBuZXdfZm4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHNhbWUgb2xkIGZpbGVuYW1lIGFmdGVyIHJlbmFtZSAtLSBzaG91bGQgZmFpbC4nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IG12IHNhbWVfZm4gbmV3X2ZuICYmCisJbW9kaWZ5ICJzL15kL3ovIiBuZXdfZm4gJiYKKwlnaXQgYWRkIG5ld19mbiAmJgorCWdpdCBkaWZmIC1NIC0tY2FjaGVkID4gcGF0Y2gxICYmCisJZ2l0IG12IG5ld19mbiBzYW1lX2ZuICYmCisJbW9kaWZ5ICJzL15lL3kvIiBzYW1lX2ZuICYmCisJZ2l0IGRpZmYgPj4gcGF0Y2gxICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgQS0+QiAocmVuYW1lKSwgQy0+QSAocmVuYW1lKSwgQS0+QSAtLSBzaG91bGQgcGFzcy4nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IG12IHNhbWVfZm4gbmV3X2ZuICYmCisJbW9kaWZ5ICJzL15kL3ovIiBuZXdfZm4gJiYKKwlnaXQgYWRkIG5ld19mbiAmJgorCWdpdCBkaWZmIC1NIC0tY2FjaGVkID4gcGF0Y2gxICYmCisJZ2l0IGNvbW1pdCAtbSAiYSByZW5hbWUiICYmCisJZ2l0IG12IG90aGVyX2ZuIHNhbWVfZm4gJiYKKwltb2RpZnkgInMvXmUveS8iIHNhbWVfZm4gJiYKKwlnaXQgYWRkIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiAtTSAtLWNhY2hlZCA+PiBwYXRjaDEgJiYKKwltb2RpZnkgInMvXmcveC8iIHNhbWVfZm4gJiYKKwlnaXQgZGlmZiA+PiBwYXRjaDEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGFwcGx5IHBhdGNoMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMjgtYXBwbHktcm9vdC5zaCBiL3QvdDQxMjgtYXBwbHktcm9vdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Y2M3NDFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEyOC1hcHBseS1yb290LnNoCkBAIC0wLDAgKzEsMTEyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYXBwbHkgc2FtZSBmaWxlbmFtZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlta2RpciAtcCBzb21lL3N1Yi9kaXIgJiYKKwllY2hvIEhlbGxvID4gc29tZS9zdWIvZGlyL2ZpbGUgJiYKKwlnaXQgYWRkIHNvbWUvc3ViL2Rpci9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsCisKKycKKworY2F0ID4gcGF0Y2ggPDwgRU9GCitkaWZmIGEvYmxhL2JsdWIvZGlyL2ZpbGUgYi9ibGEvYmx1Yi9kaXIvZmlsZQorLS0tIGEvYmxhL2JsdWIvZGlyL2ZpbGUKKysrKyBiL2JsYS9ibHViL2Rpci9maWxlCitAQCAtMSwxICsxLDEgQEAKKy1IZWxsbworK0JlbGxvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1kaXJlY3RvcnkgLXAgKDEpJyAnCisKKwlnaXQgYXBwbHkgLS1kaXJlY3Rvcnk9c29tZS9zdWIgLXAzIC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0IEJlbGxvID0gJChnaXQgc2hvdyA6c29tZS9zdWIvZGlyL2ZpbGUpICYmCisJdGVzdCBCZWxsbyA9ICQoY2F0IHNvbWUvc3ViL2Rpci9maWxlKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IC0tZGlyZWN0b3J5IC1wICgyKSAnICcKKworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBhcHBseSAtLWRpcmVjdG9yeT1zb21lL3N1Yi8gLXAzIC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0IEJlbGxvID0gJChnaXQgc2hvdyA6c29tZS9zdWIvZGlyL2ZpbGUpICYmCisJdGVzdCBCZWxsbyA9ICQoY2F0IHNvbWUvc3ViL2Rpci9maWxlKQorCisnCisKK2NhdCA+IHBhdGNoIDw8IEVPRgorZGlmZiAtLWdpdCBhL25ld2ZpbGUgYi9uZXdmaWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDk1ZjNhZAorLS0tIC9kZXYvbnVsbAorKysrIGIvbmV3ZmlsZQorQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWRpcmVjdG9yeSAobmV3IGZpbGUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IGFwcGx5IC0tZGlyZWN0b3J5PXNvbWUvc3ViL2Rpci8gLS1pbmRleCBwYXRjaCAmJgorCXRlc3QgY29udGVudCA9ICQoZ2l0IHNob3cgOnNvbWUvc3ViL2Rpci9uZXdmaWxlKSAmJgorCXRlc3QgY29udGVudCA9ICQoY2F0IHNvbWUvc3ViL2Rpci9uZXdmaWxlKQorJworCitjYXQgPiBwYXRjaCA8PCBFT0YKK2RpZmYgLS1naXQgYS9jL25ld2ZpbGUyIGIvYy9uZXdmaWxlMgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmQ5NWYzYWQKKy0tLSAvZGV2L251bGwKKysrKyBiL2MvbmV3ZmlsZTIKK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1kaXJlY3RvcnkgLXAgKG5ldyBmaWxlKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBhcHBseSAtcDIgLS1kaXJlY3Rvcnk9c29tZS9zdWIvZGlyLyAtLWluZGV4IHBhdGNoICYmCisJdGVzdCBjb250ZW50ID0gJChnaXQgc2hvdyA6c29tZS9zdWIvZGlyL25ld2ZpbGUyKSAmJgorCXRlc3QgY29udGVudCA9ICQoY2F0IHNvbWUvc3ViL2Rpci9uZXdmaWxlMikKKycKKworY2F0ID4gcGF0Y2ggPDwgRU9GCitkaWZmIC0tZ2l0IGEvZGVsZmlsZSBiL2RlbGZpbGUKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggZDk1ZjNhZC4uMDAwMDAwMAorLS0tIGEvZGVsZmlsZQorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLWNvbnRlbnQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWRpcmVjdG9yeSAoZGVsZXRlIGZpbGUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZWNobyBjb250ZW50ID5zb21lL3N1Yi9kaXIvZGVsZmlsZSAmJgorCWdpdCBhZGQgc29tZS9zdWIvZGlyL2RlbGZpbGUgJiYKKwlnaXQgYXBwbHkgLS1kaXJlY3Rvcnk9c29tZS9zdWIvZGlyLyAtLWluZGV4IHBhdGNoICYmCisJISAoZ2l0IGxzLWZpbGVzIHwgZ3JlcCBkZWxmaWxlKQorJworCitjYXQgPiBwYXRjaCA8PCAnRU9GJworZGlmZiAtLWdpdCAiYS9xdVwxNTd0ZWZpbGUiICJiL3F1XDE1N3RlZmlsZSIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5kOTVmM2FkCistLS0gL2Rldi9udWxsCisrKysgImIvcXVcMTU3dGVmaWxlIgorQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWRpcmVjdG9yeSAocXVvdGVkIGZpbGVuYW1lKScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBhcHBseSAtLWRpcmVjdG9yeT1zb21lL3N1Yi9kaXIvIC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0IGNvbnRlbnQgPSAkKGdpdCBzaG93IDpzb21lL3N1Yi9kaXIvcXVvdGVmaWxlKSAmJgorCXRlc3QgY29udGVudCA9ICQoY2F0IHNvbWUvc3ViL2Rpci9xdW90ZWZpbGUpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEyOS1hcHBseS1zYW1lbW9kZS5zaCBiL3QvdDQxMjktYXBwbHktc2FtZW1vZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzI2ODI5OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMjktYXBwbHktc2FtZW1vZGUuc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FwcGx5aW5nIHBhdGNoIHdpdGggbW9kZSBiaXRzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBvcmlnaW5hbCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWVjaG8gbW9kaWZpZWQgPmZpbGUgJiYKKwlnaXQgZGlmZiAtLXN0YXQgLXAgPnBhdGNoLTAudHh0ICYmCisJY2htb2QgK3ggZmlsZSAmJgorCWdpdCBkaWZmIC0tc3RhdCAtcCA+cGF0Y2gtMS50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnc2FtZSBtb2RlIChubyBpbmRleCknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2htb2QgK3ggZmlsZSAmJgorCWdpdCBhcHBseSBwYXRjaC0wLnR4dCAmJgorCXRlc3QgLXggZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFICdzYW1lIG1vZGUgKHdpdGggaW5kZXgpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNobW9kICt4IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgYXBwbHkgLS1pbmRleCBwYXRjaC0wLnR4dCAmJgorCXRlc3QgLXggZmlsZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ3NhbWUgbW9kZSAoaW5kZXggb25seSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJY2htb2QgK3ggZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBhcHBseSAtLWNhY2hlZCBwYXRjaC0wLnR4dCAmJgorCWdpdCBscy1maWxlcyAtcyBmaWxlIHwgZ3JlcCAiXjEwMDc1NSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnbW9kZSB1cGRhdGUgKG5vIGluZGV4KScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgYXBwbHkgcGF0Y2gtMS50eHQgJiYKKwl0ZXN0IC14IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnbW9kZSB1cGRhdGUgKHdpdGggaW5kZXgpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSAtLWluZGV4IHBhdGNoLTEudHh0ICYmCisJdGVzdCAteCBmaWxlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAnbW9kZSB1cGRhdGUgKGluZGV4IG9ubHkpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBhcHBseSAtLWNhY2hlZCBwYXRjaC0xLnR4dCAmJgorCWdpdCBscy1maWxlcyAtcyBmaWxlIHwgZ3JlcCAiXjEwMDc1NSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTMwLWFwcGx5LWNyaXNzLWNyb3NzLXJlbmFtZS5zaCBiL3QvdDQxMzAtYXBwbHktY3Jpc3MtY3Jvc3MtcmVuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQxNzNhY2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTMwLWFwcGx5LWNyaXNzLWNyb3NzLXJlbmFtZS5zaApAQCAtMCwwICsxLDY2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IGhhbmRsaW5nIGNyaXNzLWNyb3NzIHJlbmFtZSBwYXRjaC4nCisuIC4vdGVzdC1saWIuc2gKKworY3JlYXRlX2ZpbGUoKSB7CisJY250PTAKKwl3aGlsZSB0ZXN0ICRjbnQgLWxlIDEwMAorCWRvCisJCWNudD0kKCgkY250ICsgMSkpCisJCWVjaG8gIiQyIiA+PiAiJDEiCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWNyZWF0ZV9maWxlIGZpbGUxICJGaWxlMSBjb250ZW50cyIgJiYKKwljcmVhdGVfZmlsZSBmaWxlMiAiRmlsZTIgY29udGVudHMiICYmCisJY3JlYXRlX2ZpbGUgZmlsZTMgIkZpbGUzIGNvbnRlbnRzIiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgZmlsZTMgJiYKKwlnaXQgY29tbWl0IC1tIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3Jpc3MtY3Jvc3MgcmVuYW1lJyAnCisJbXYgZmlsZTEgdG1wICYmCisJbXYgZmlsZTIgZmlsZTEgJiYKKwltdiB0bXAgZmlsZTIgJiYKKwljcCBmaWxlMSBmaWxlMS1zd2FwcGVkICYmCisJY3AgZmlsZTIgZmlsZTItc3dhcHBlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1NIC1CJyAnCisJZ2l0IGRpZmYgLU0gLUIgPiBkaWZmICYmCisJZ2l0IHJlc2V0IC0taGFyZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5JyAnCisJZ2l0IGFwcGx5IGRpZmYgJiYKKwl0ZXN0X2NtcCBmaWxlMSBmaWxlMS1zd2FwcGVkICYmCisJdGVzdF9jbXAgZmlsZTIgZmlsZTItc3dhcHBlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmlzcy1jcm9zcyByZW5hbWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJbXYgZmlsZTEgdG1wICYmCisJbXYgZmlsZTIgZmlsZTEgJiYKKwltdiBmaWxlMyBmaWxlMiAmJgorCW12IHRtcCBmaWxlMyAmJgorCWNwIGZpbGUxIGZpbGUxLXN3YXBwZWQgJiYKKwljcCBmaWxlMiBmaWxlMi1zd2FwcGVkICYmCisJY3AgZmlsZTMgZmlsZTMtc3dhcHBlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIC1NIC1CJyAnCisJZ2l0IGRpZmYgLU0gLUIgPiBkaWZmICYmCisJZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseScgJworCWdpdCBhcHBseSBkaWZmICYmCisJdGVzdF9jbXAgZmlsZTEgZmlsZTEtc3dhcHBlZCAmJgorCXRlc3RfY21wIGZpbGUyIGZpbGUyLXN3YXBwZWQgJiYKKwl0ZXN0X2NtcCBmaWxlMyBmaWxlMy1zd2FwcGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzMS1hcHBseS1mYWtlLWFuY2VzdG9yLnNoIGIvdC90NDEzMS1hcHBseS1mYWtlLWFuY2VzdG9yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIxMzYxY2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTMxLWFwcGx5LWZha2UtYW5jZXN0b3Iuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBTdGVwaGVuIEJveWQKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvciBoYW5kbGluZy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IDEgJiYKKwl0ZXN0X2NvbW1pdCAyICYmCisJbWtkaXIgc3ViICYmCisJdGVzdF9jb21taXQgMyBzdWIvMy50ICYmCisJdGVzdF9jb21taXQgNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSAtLWJ1aWxkLWZha2UtYW5jZXN0b3InICcKKwlnaXQgY2hlY2tvdXQgMiAmJgorCWVjaG8gIkEiID4gMS50ICYmCisJZ2l0IGRpZmYgPiAxLnBhdGNoICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAxICYmCisJZ2l0IGFwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvciAxLmFuY2VzdG9yIDEucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1idWlsZC1mYWtlLWFuY2VzdG9yIGluIGEgc3ViZGlyZWN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IDMgJiYKKwllY2hvICJDIiA+IHN1Yi8zLnQgJiYKKwlnaXQgZGlmZiA+IDMucGF0Y2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IDQgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgYXBwbHkgLS1idWlsZC1mYWtlLWFuY2VzdG9yIDMuYW5jZXN0b3IgLi4vMy5wYXRjaCAmJgorCQl0ZXN0IC1mIDMuYW5jZXN0b3IKKwkpICYmCisJZ2l0IGFwcGx5IC0tYnVpbGQtZmFrZS1hbmNlc3RvciAzLmFuY2VzdG9yIDMucGF0Y2ggJiYKKwl0ZXN0X2NtcCBzdWIvMy5hbmNlc3RvciAzLmFuY2VzdG9yCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzMi1hcHBseS1yZW1vdmFsLnNoIGIvdC90NDEzMi1hcHBseS1yZW1vdmFsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEyYmMxY2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTMyLWFwcGx5LXJlbW92YWwuc2gKQEAgLTAsMCArMSw5NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBKdW5pbyBDIEhhbWFubworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtYXBwbHkgbm90aWNlcyByZW1vdmFsIHBhdGNoZXMgZ2VuZXJhdGVkIGJ5IEdOVSBkaWZmJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJY2F0IDw8LUVPRiA+YyAmJgorCWRpZmYgLXJ1TiBhL2ZpbGUgYi9maWxlCisJLS0tIGEvZmlsZQlUUzAKKwkrKysgYi9maWxlCVRTMQorCUBAIC0wLDAgKzEgQEAKKwkrc29tZXRoaW5nCisJRU9GCisKKwljYXQgPDwtRU9GID5kICYmCisJZGlmZiAtcnVOIGEvZmlsZSBiL2ZpbGUKKwktLS0gYS9maWxlCVRTMAorCSsrKyBiL2ZpbGUJVFMxCisJQEAgLTEgKzAsMCBAQAorCS1zb21ldGhpbmcKKwlFT0YKKworCXRpbWVXZXN0PSIxOTgyLTA5LTE2IDA3OjAwOjAwLjAwMDAwMDAwMCAtMDgwMCIgJiYKKwkgdGltZUdNVD0iMTk4Mi0wOS0xNiAxNTowMDowMC4wMDAwMDAwMDAgKzAwMDAiICYmCisJdGltZUVhc3Q9IjE5ODItMDktMTcgMDA6MDA6MDAuMDAwMDAwMDAwICswOTAwIiAmJgorCisJZXBvY1dlc3Q9IjE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwIiAmJgorCSBlcG9jR01UPSIxOTcwLTAxLTAxIDAwOjAwOjAwLjAwMDAwMDAwMCArMDAwMCIgJiYKKwllcG9jRWFzdD0iMTk3MC0wMS0wMSAwOTowMDowMC4wMDAwMDAwMDAgKzA5MDAiICYmCisJZXBvY1dlc3QyPSIxOTY5LTEyLTMxIDE2OjAwOjAwIC0wODowMCIgJiYKKworCXNlZCAtZSAicy9UUzAvJGVwb2NXZXN0LyIgLWUgInMvVFMxLyR0aW1lV2VzdC8iIDxjID5jcmVhdGVXZXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kZXBvY0Vhc3QvIiAtZSAicy9UUzEvJHRpbWVFYXN0LyIgPGMgPmNyZWF0ZUVhc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyRlcG9jR01ULyIgLWUgInMvVFMxLyR0aW1lR01ULyIgPGMgPmNyZWF0ZUdNVC5wYXRjaCAmJgorCisJc2VkIC1lICJzL1RTMC8kdGltZVdlc3QvIiAtZSAicy9UUzEvJHRpbWVXZXN0LyIgPGMgPmFkZFdlc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lRWFzdC8iIC1lICJzL1RTMS8kdGltZUVhc3QvIiA8YyA+YWRkRWFzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVHTVQvIiAtZSAicy9UUzEvJHRpbWVHTVQvIiA8YyA+YWRkR01ULnBhdGNoICYmCisKKwlzZWQgLWUgInMvVFMwLyR0aW1lV2VzdC8iIC1lICJzL1RTMS8kdGltZVdlc3QvIiA8ZCA+ZW1wdHlXZXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUVhc3QvIiAtZSAicy9UUzEvJHRpbWVFYXN0LyIgPGQgPmVtcHR5RWFzdC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVHTVQvIiAtZSAicy9UUzEvJHRpbWVHTVQvIiA8ZCA+ZW1wdHlHTVQucGF0Y2ggJiYKKworCXNlZCAtZSAicy9UUzAvJHRpbWVXZXN0LyIgLWUgInMvVFMxLyRlcG9jV2VzdC8iIDxkID5yZW1vdmVXZXN0LnBhdGNoICYmCisJc2VkIC1lICJzL1RTMC8kdGltZUVhc3QvIiAtZSAicy9UUzEvJGVwb2NFYXN0LyIgPGQgPnJlbW92ZUVhc3QucGF0Y2ggJiYKKwlzZWQgLWUgInMvVFMwLyR0aW1lR01ULyIgLWUgInMvVFMxLyRlcG9jR01ULyIgPGQgPnJlbW92ZUdNVC5wYXRjaCAmJgorCXNlZCAtZSAicy9UUzAvJHRpbWVXZXN0LyIgLWUgInMvVFMxLyRlcG9jV2VzdDIvIiA8ZCA+cmVtb3ZlV2VzdDIucGF0Y2ggJiYKKworCWVjaG8gc29tZXRoaW5nID5zb21ldGhpbmcgJiYKKwk+ZW1wdHkKKycKKworZm9yIHBhdGNoIGluICoucGF0Y2gKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAidGVzdCAkcGF0Y2giICcKKwkJcm0gLWYgZmlsZSAuZ2l0L2luZGV4ICYmCisJCWNhc2UgIiRwYXRjaCIgaW4KKwkJY3JlYXRlKikKKwkJCSMgbXVzdCBiZSBhYmxlIHRvIGNyZWF0ZQorCQkJZ2l0IGFwcGx5IC0taW5kZXggJHBhdGNoICYmCisJCQl0ZXN0X2NtcCBmaWxlIHNvbWV0aGluZyAmJgorCQkJIyBtdXN0IG5vdGljZSB0aGUgZmlsZSBpcyBhbHJlYWR5IHRoZXJlCisJCQk+ZmlsZSAmJgorCQkJZ2l0IGFkZCBmaWxlICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgJHBhdGNoCisJCQk7OworCQlhZGQqKQorCQkJIyBtdXN0IGJlIGFibGUgdG8gY3JlYXRlIG9yIHBhdGNoCisJCQlnaXQgYXBwbHkgJHBhdGNoICYmCisJCQl0ZXN0X2NtcCBmaWxlIHNvbWV0aGluZyAmJgorCQkJPmZpbGUgJiYKKwkJCWdpdCBhcHBseSAkcGF0Y2ggJiYKKwkJCXRlc3RfY21wIGZpbGUgc29tZXRoaW5nCisJCQk7OworCQllbXB0eSopCisJCQkjIG11c3QgbGVhdmUgYW4gZW1wdHkgZmlsZQorCQkJY2F0IHNvbWV0aGluZyA+ZmlsZSAmJgorCQkJZ2l0IGFkZCBmaWxlICYmCisJCQlnaXQgYXBwbHkgLS1pbmRleCAkcGF0Y2ggJiYKKwkJCXRlc3QgLWYgZmlsZSAmJgorCQkJdGVzdF9jbXAgZW1wdHkgZmlsZQorCQkJOzsKKwkJcmVtb3ZlKikKKwkJCSMgbXVzdCByZW1vdmUgdGhlIGZpbGUKKwkJCWNhdCBzb21ldGhpbmcgPmZpbGUgJiYKKwkJCWdpdCBhZGQgZmlsZSAmJgorCQkJZ2l0IGFwcGx5IC0taW5kZXggJHBhdGNoICYmCisJCQkhIHRlc3QgLWYgZmlsZQorCQkJOzsKKwkJZXNhYworCScKK2RvbmUKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTMzLWFwcGx5LWZpbGVuYW1lcy5zaCBiL3QvdDQxMzMtYXBwbHktZmlsZW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlY2I0MjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTMzLWFwcGx5LWZpbGVuYW1lcy5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEFuZHJlYXMgR3J1ZW5iYWNoZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IGZpbGVuYW1lIGNvbnNpc3RlbmN5IGNoZWNrJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJY2F0ID4gYmFkMS5wYXRjaCA8PEVPRiAmJgorZGlmZiAtLWdpdCBhL2YgYi9mCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZDAwNDkxZgorLS0tIC9kZXYvbnVsbAorKysrIGIvZi1ibGFoCitAQCAtMCwwICsxIEBACisrMQorRU9GCisJY2F0ID4gYmFkMi5wYXRjaCA8PEVPRgorZGlmZiAtLWdpdCBhL2YgYi9mCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IGQwMDQ5MWYuLjAwMDAwMDAKKy0tLSBiL2YtYmxhaAorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLTEKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBseSBkaWZmIHdpdGggaW5jb25zaXN0ZW50IGZpbGVuYW1lcyBpbiBoZWFkZXJzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IGJhZDEucGF0Y2ggMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJpbmNvbnNpc3RlbnQgbmV3IGZpbGVuYW1lIiBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgYmFkMi5wYXRjaCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImluY29uc2lzdGVudCBvbGQgZmlsZW5hbWUiIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzQtYXBwbHktc3VibW9kdWxlLnNoIGIvdC90NDEzNC1hcHBseS1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDA0MzkzMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzQtYXBwbHktc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMzggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgUGV0ZXIgQ29sbGluZ2JvdXJuZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXBwbHkgc3VibW9kdWxlIHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJY2F0ID4gY3JlYXRlLXNtLnBhdGNoIDw8RU9GICYmCitkaWZmIC0tZ2l0IGEvZGlyL3NtIGIvZGlyL3NtCituZXcgZmlsZSBtb2RlIDE2MDAwMAoraW5kZXggMDAwMDAwMC4uMDEyMzQ1NgorLS0tIC9kZXYvbnVsbAorKysrIGIvZGlyL3NtCitAQCAtMCwwICsxIEBACisrU3VicHJvamVjdCBjb21taXQgMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2NworRU9GCisJY2F0ID4gcmVtb3ZlLXNtLnBhdGNoIDw8RU9GCitkaWZmIC0tZ2l0IGEvZGlyL3NtIGIvZGlyL3NtCitkZWxldGVkIGZpbGUgbW9kZSAxNjAwMDAKK2luZGV4IDAxMjM0NTYuLjAwMDAwMDAKKy0tLSBhL2Rpci9zbQorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLVN1YnByb2plY3QgY29tbWl0IDAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1NjcKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmluZyBhIHN1Ym1vZHVsZSBhbHNvIHJlbW92ZXMgYWxsIGxlYWRpbmcgc3ViZGlyZWN0b3JpZXMnICcKKwlnaXQgYXBwbHkgLS1pbmRleCBjcmVhdGUtc20ucGF0Y2ggJiYKKwl0ZXN0IC1kIGRpci9zbSAmJgorCWdpdCBhcHBseSAtLWluZGV4IHJlbW92ZS1zbS5wYXRjaCAmJgorCXRlc3QgXCEgLWQgZGlyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS1hcHBseS13ZWlyZC1maWxlbmFtZXMuc2ggYi90L3Q0MTM1LWFwcGx5LXdlaXJkLWZpbGVuYW1lcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZjVkYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS1hcHBseS13ZWlyZC1maWxlbmFtZXMuc2gKQEAgLTAsMCArMSw5MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSB3aXRoIHdlaXJkIHBvc3RpbWFnZSBmaWxlbmFtZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXZlY3Rvcj0kVEVTVF9ESVJFQ1RPUlkvdDQxMzUgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBwcmVpbWFnZSAmJgorCWdpdCB0YWcgcHJlaW1hZ2UgJiYKKworCXJlc2V0X3ByZWltYWdlKCkgeworCQlnaXQgY2hlY2tvdXQgLWYgcHJlaW1hZ2VeMCAmJgorCQlnaXQgcmVhZC10cmVlIC11IC0tcmVzZXQgSEVBRCAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorCX0gJiYKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgXCJ0YWIJZW1iZWRkZWQudHh0XCIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAnXCcnXCJxdW90ZWVtYmVkZGVkXCIudHh0J1wnJyIgJiYKKwlpZiB0b3VjaCAtLSAidGFiCWVtYmVkZGVkLnR4dCIgJ1wnJyJxdW90ZWVtYmVkZGVkIi50eHQnXCcnCisJdGhlbgorCQl0ZXN0X3NldF9wcmVyZXEgRlVOTllOQU1FUworCWZpCisnCisKK3RyeV9maWxlbmFtZSgpIHsKKwlkZXNjPSQxCisJcG9zdGltYWdlPSQyCisJcHJlcmVxPSR7MzotfQorCWV4cDE9JHs0Oi1zdWNjZXNzfQorCWV4cDI9JHs1Oi1zdWNjZXNzfQorCWV4cDM9JHs2Oi1zdWNjZXNzfQorCisJdGVzdF9leHBlY3RfJGV4cDEgJHByZXJlcSAiJGRlc2MsIGdpdC1zdHlsZSBmaWxlIGNyZWF0aW9uIHBhdGNoIiAiCisJCWVjaG8gcG9zdGltYWdlID5leHBlY3RlZCAmJgorCQlyZXNldF9wcmVpbWFnZSAmJgorCQlybSAtZiAnJHBvc3RpbWFnZScgJiYKKwkJZ2l0IGFwcGx5IC12IFwiXCR2ZWN0b3JcIi8nZ2l0LSRkZXNjLmRpZmYnICYmCisJCXRlc3RfY21wIGV4cGVjdGVkICckcG9zdGltYWdlJworCSIKKworCXRlc3RfZXhwZWN0XyRleHAyICRwcmVyZXEgIiRkZXNjLCB0cmFkaXRpb25hbCBwYXRjaCIgIgorCQllY2hvIHBvc3RpbWFnZSA+ZXhwZWN0ZWQgJiYKKwkJcmVzZXRfcHJlaW1hZ2UgJiYKKwkJZWNobyBwcmVpbWFnZSA+JyRwb3N0aW1hZ2UnICYmCisJCWdpdCBhcHBseSAtdiBcIlwkdmVjdG9yXCIvJ2RpZmYtJGRlc2MuZGlmZicgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgJyRwb3N0aW1hZ2UnCisJIgorCisJdGVzdF9leHBlY3RfJGV4cDMgJHByZXJlcSAiJGRlc2MsIHRyYWRpdGlvbmFsIGZpbGUgY3JlYXRpb24gcGF0Y2giICIKKwkJZWNobyBwb3N0aW1hZ2UgPmV4cGVjdGVkICYmCisJCXJlc2V0X3ByZWltYWdlICYmCisJCXJtIC1mICckcG9zdGltYWdlJyAmJgorCQlnaXQgYXBwbHkgLXYgXCJcJHZlY3RvclwiLydhZGQtJGRlc2MuZGlmZicgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgJyRwb3N0aW1hZ2UnCisJIgorfQorCit0cnlfZmlsZW5hbWUgJ3BsYWluJyAgICAgICAgICAgICdwb3N0aW1hZ2UudHh0JwordHJ5X2ZpbGVuYW1lICd3aXRoIHNwYWNlcycgICAgICAncG9zdCBpbWFnZS50eHQnCit0cnlfZmlsZW5hbWUgJ3dpdGggdGFiJyAgICAgICAgICdwb3N0CWltYWdlLnR4dCcgRlVOTllOQU1FUwordHJ5X2ZpbGVuYW1lICd3aXRoIGJhY2tzbGFzaCcgICAncG9zdFxpbWFnZS50eHQnIEJTTEFTSFBTUEVDCit0cnlfZmlsZW5hbWUgJ3dpdGggcXVvdGUnICAgICAgICcicG9zdGltYWdlIi50eHQnIEZVTk5ZTkFNRVMgc3VjY2VzcyBmYWlsdXJlIHN1Y2Nlc3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hpdGVzcGFjZS1kYW1hZ2VkIHRyYWRpdGlvbmFsIHBhdGNoJyAnCisJZWNobyBwb3N0aW1hZ2UgPmV4cGVjdGVkICYmCisJcmVzZXRfcHJlaW1hZ2UgJiYKKwlybSAtZiBwb3N0aW1hZ2UudHh0ICYmCisJZ2l0IGFwcGx5IC12ICIkdmVjdG9yL2RhbWFnZWQuZGlmZiIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBwb3N0aW1hZ2UudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWRpdGlvbmFsIHBhdGNoIHdpdGggY29sb24gaW4gdGltZXpvbmUnICcKKwllY2hvIHBvc3RpbWFnZSA+ZXhwZWN0ZWQgJiYKKwlyZXNldF9wcmVpbWFnZSAmJgorCXJtIC1mICJwb3N0IGltYWdlLnR4dCIgJiYKKwlnaXQgYXBwbHkgIiR2ZWN0b3IvZnVubnktdHouZGlmZiIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAicG9zdCBpbWFnZS50eHQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyYWRpdGlvbmFsLCB3aGl0ZXNwYWNlLWRhbWFnZWQsIGNvbG9uIGluIHRpbWV6b25lJyAnCisJZWNobyBwb3N0aW1hZ2UgPmV4cGVjdGVkICYmCisJcmVzZXRfcHJlaW1hZ2UgJiYKKwlybSAtZiAicG9zdCBpbWFnZS50eHQiICYmCisJZ2l0IGFwcGx5ICIkdmVjdG9yL2RhbWFnZWQtdHouZGlmZiIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAicG9zdCBpbWFnZS50eHQiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS8uZ2l0aWdub3JlIGIvdC90NDEzNS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNThlNjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwzIEBACisvZmlsZS1jcmVhdGlvbi8KKy90cmFkLWNyZWF0aW9uLworL3RyYWQtbW9kaWZpY2F0aW9uLwpkaWZmIC0tZ2l0IGEvdC90NDEzNS9hZGQtcGxhaW4uZGlmZiBiL3QvdDQxMzUvYWRkLXBsYWluLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1OTcwYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvYWRkLXBsYWluLmRpZmYKQEAgLTAsMCArMSw1IEBACitkaWZmIC1wcnVOIGEvcG9zdGltYWdlLnR4dCBiL3Bvc3RpbWFnZS50eHQKKy0tLSBhL3Bvc3RpbWFnZS50eHQJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBiL3Bvc3RpbWFnZS50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS40ODQwMDIyNTUgLTA1MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvYWRkLXdpdGggYmFja3NsYXNoLmRpZmYgYi90L3Q0MTM1L2FkZC13aXRoIGJhY2tzbGFzaC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ODYxZTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2FkZC13aXRoIGJhY2tzbGFzaC5kaWZmCkBAIC0wLDAgKzEsNSBAQAorZGlmZiAtcHJ1TiBhL3Bvc3RcaW1hZ2UudHh0IGIvcG9zdFxpbWFnZS50eHQKKy0tLSBhL3Bvc3RcaW1hZ2UudHh0CTE5NjktMTItMzEgMTg6MDA6MDAuMDAwMDAwMDAwIC0wNjAwCisrKysgYi9wb3N0XGltYWdlLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjY5MjAwMjI1NSAtMDUwMAorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9hZGQtd2l0aCBxdW90ZS5kaWZmIGIvdC90NDEzNS9hZGQtd2l0aCBxdW90ZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NmRlNzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2FkZC13aXRoIHF1b3RlLmRpZmYKQEAgLTAsMCArMSw1IEBACitkaWZmIC1wcnVOIGEvInBvc3RpbWFnZSIudHh0IGIvInBvc3RpbWFnZSIudHh0CistLS0gYS8icG9zdGltYWdlIi50eHQJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBiLyJwb3N0aW1hZ2UiLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjc1NjAwMjI1NSAtMDUwMAorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9hZGQtd2l0aCBzcGFjZXMuZGlmZiBiL3QvdDQxMzUvYWRkLXdpdGggc3BhY2VzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhMTIxMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvYWRkLXdpdGggc3BhY2VzLmRpZmYKQEAgLTAsMCArMSw1IEBACitkaWZmIC1wcnVOIGEvcG9zdCBpbWFnZS50eHQgYi9wb3N0IGltYWdlLnR4dAorLS0tIGEvcG9zdCBpbWFnZS50eHQJMTk2OS0xMi0zMSAxODowMDowMC4wMDAwMDAwMDAgLTA2MDAKKysrKyBiL3Bvc3QgaW1hZ2UudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNTU2MDAyMjU1IC0wNTAwCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2FkZC13aXRoIHRhYi5kaWZmIGIvdC90NDEzNS9hZGQtd2l0aCB0YWIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjY3Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9hZGQtd2l0aCB0YWIuZGlmZgpAQCAtMCwwICsxLDUgQEAKK2RpZmYgLXBydU4gYS9wb3N0CWltYWdlLnR4dCBiL3Bvc3QJaW1hZ2UudHh0CistLS0gYS9wb3N0CWltYWdlLnR4dAkxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGIvcG9zdAlpbWFnZS50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS42MjgwMDIyNTUgLTA1MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGFtYWdlZC10ei5kaWZmIGIvdC90NDEzNS9kYW1hZ2VkLXR6LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhYWYwOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGFtYWdlZC10ei5kaWZmCkBAIC0wLDAgKzEsNSBAQAorZGlmZiAtdXJOIC1YIC91c3IvcGVvcGxlL2plcy9leGNsdWRlLWxpbnV4IGxpbnV4LTIuNi4xMi1yYzItbW0zLXZhbmlsbGEvcG9zdCBpbWFnZS50eHQgbGludXgtMi42LjEyLXJjMi1tbTMvcG9zdCBpbWFnZS50eHQKKy0tLSBsaW51eC0yLjYuMTItcmMyLW1tMy12YW5pbGxhL3Bvc3QgaW1hZ2UudHh0IDE5NjktMTItMzEgMTY6MDA6MDAgLTA4OjAwCisrKysgbGludXgtMi42LjEyLXJjMi1tbTMvcG9zdCBpbWFnZS50eHQgMjAwNS0wNC0xMiAwMjoxNDowNiAtMDc6MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGFtYWdlZC5kaWZmIGIvdC90NDEzNS9kYW1hZ2VkLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmN2VkZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGFtYWdlZC5kaWZmCkBAIC0wLDAgKzEsNSBAQAorZGlmZiAtcHJ1TiBhL3Bvc3RpbWFnZS50eHQgYi9wb3N0aW1hZ2UudHh0CistLS0gYS9wb3N0aW1hZ2UudHh0ICAgICAxOTY5LTEyLTMxIDE4OjAwOjAwLjAwMDAwMDAwMCAtMDYwMAorKysrIGIvcG9zdGltYWdlLnR4dCAgICAgMjAxMC0wOC0xOCAyMDoxMzozMS40ODQwMDIyNTUgLTA1MDAKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGlmZi1wbGFpbi5kaWZmIGIvdC90NDEzNS9kaWZmLXBsYWluLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlZGNmYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGlmZi1wbGFpbi5kaWZmCkBAIC0wLDAgKzEsNSBAQAorLS0tIHBvc3RpbWFnZS50eHQub3JpZwkyMDEwLTA4LTE4IDIwOjEzOjMxLjQzMjAwMjI1NSAtMDUwMAorKysrIHBvc3RpbWFnZS50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS40MzIwMDIyNTUgLTA1MDAKK0BAIC0xICsxIEBACistcHJlaW1hZ2UKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGlmZi13aXRoIGJhY2tzbGFzaC5kaWZmIGIvdC90NDEzNS9kaWZmLXdpdGggYmFja3NsYXNoLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2OGE2MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGlmZi13aXRoIGJhY2tzbGFzaC5kaWZmCkBAIC0wLDAgKzEsNSBAQAorLS0tIHBvc3RcaW1hZ2UudHh0Lm9yaWcJMjAxMC0wOC0xOCAyMDoxMzozMS42ODAwMDIyNTUgLTA1MDAKKysrKyBwb3N0XGltYWdlLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjY4MDAwMjI1NSAtMDUwMAorQEAgLTEgKzEgQEAKKy1wcmVpbWFnZQorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9kaWZmLXdpdGggcXVvdGUuZGlmZiBiL3QvdDQxMzUvZGlmZi13aXRoIHF1b3RlLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlOGNjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGlmZi13aXRoIHF1b3RlLmRpZmYKQEAgLTAsMCArMSw1IEBACistLS0gInBvc3RpbWFnZSIudHh0Lm9yaWcJMjAxMC0wOC0xOCAyMDoxMzozMS43NDQwMDIyNTUgLTA1MDAKKysrKyAicG9zdGltYWdlIi50eHQJMjAxMC0wOC0xOCAyMDoxMzozMS43NDQwMDIyNTUgLTA1MDAKK0BAIC0xICsxIEBACistcHJlaW1hZ2UKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZGlmZi13aXRoIHNwYWNlcy5kaWZmIGIvdC90NDEzNS9kaWZmLXdpdGggc3BhY2VzLmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUxMjA1NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZGlmZi13aXRoIHNwYWNlcy5kaWZmCkBAIC0wLDAgKzEsNSBAQAorLS0tIHBvc3QgaW1hZ2UudHh0Lm9yaWcJMjAxMC0wOC0xOCAyMDoxMzozMS41NDQwMDIyNTUgLTA1MDAKKysrKyBwb3N0IGltYWdlLnR4dAkyMDEwLTA4LTE4IDIwOjEzOjMxLjU0NDAwMjI1NSAtMDUwMAorQEAgLTEgKzEgQEAKKy1wcmVpbWFnZQorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9kaWZmLXdpdGggdGFiLmRpZmYgYi90L3Q0MTM1L2RpZmYtd2l0aCB0YWIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTZkOWIyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9kaWZmLXdpdGggdGFiLmRpZmYKQEAgLTAsMCArMSw1IEBACistLS0gcG9zdAlpbWFnZS50eHQub3JpZwkyMDEwLTA4LTE4IDIwOjEzOjMxLjYxNjAwMjI1NSAtMDUwMAorKysrIHBvc3QJaW1hZ2UudHh0CTIwMTAtMDgtMTggMjA6MTM6MzEuNjE2MDAyMjU1IC0wNTAwCitAQCAtMSArMSBAQAorLXByZWltYWdlCisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2Z1bm55LXR6LmRpZmYgYi90L3Q0MTM1L2Z1bm55LXR6LmRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk4ZTNhOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvZnVubnktdHouZGlmZgpAQCAtMCwwICsxLDUgQEAKK2RpZmYgLXVyTiAtWCAvdXNyL3Blb3BsZS9qZXMvZXhjbHVkZS1saW51eCBsaW51eC0yLjYuMTItcmMyLW1tMy12YW5pbGxhL3Bvc3QgaW1hZ2UudHh0IGxpbnV4LTIuNi4xMi1yYzItbW0zL3Bvc3QgaW1hZ2UudHh0CistLS0gbGludXgtMi42LjEyLXJjMi1tbTMtdmFuaWxsYS9wb3N0IGltYWdlLnR4dAkxOTY5LTEyLTMxIDE2OjAwOjAwIC0wODowMAorKysrIGxpbnV4LTIuNi4xMi1yYzItbW0zL3Bvc3QgaW1hZ2UudHh0CTIwMDUtMDQtMTIgMDI6MTQ6MDYgLTA3OjAwCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2dpdC1wbGFpbi5kaWZmIGIvdC90NDEzNS9naXQtcGxhaW4uZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjQ3ZDFhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9naXQtcGxhaW4uZGlmZgpAQCAtMCwwICsxLDcgQEAKK2RpZmYgLS1naXQgYS9wb3N0aW1hZ2UudHh0IGIvcG9zdGltYWdlLnR4dAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLmVmZjBjNTQKKy0tLSAvZGV2L251bGwKKysrKyBiL3Bvc3RpbWFnZS50eHQKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvZ2l0LXdpdGggYmFja3NsYXNoLmRpZmYgYi90L3Q0MTM1L2dpdC13aXRoIGJhY2tzbGFzaC5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlODRhMTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2dpdC13aXRoIGJhY2tzbGFzaC5kaWZmCkBAIC0wLDAgKzEsNyBAQAorZGlmZiAtLWdpdCAiYS9wb3N0XFxpbWFnZS50eHQiICJiL3Bvc3RcXGltYWdlLnR4dCIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lZmYwYzU0CistLS0gL2Rldi9udWxsCisrKysgImIvcG9zdFxcaW1hZ2UudHh0IgorQEAgLTAsMCArMSBAQAorK3Bvc3RpbWFnZQpkaWZmIC0tZ2l0IGEvdC90NDEzNS9naXQtd2l0aCBxdW90ZS5kaWZmIGIvdC90NDEzNS9naXQtd2l0aCBxdW90ZS5kaWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYmVhOGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM1L2dpdC13aXRoIHF1b3RlLmRpZmYKQEAgLTAsMCArMSw3IEBACitkaWZmIC0tZ2l0ICJhL1wicG9zdGltYWdlXCIudHh0IiAiYi9cInBvc3RpbWFnZVwiLnR4dCIKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi5lZmYwYzU0CistLS0gL2Rldi9udWxsCisrKysgImIvXCJwb3N0aW1hZ2VcIi50eHQiCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2dpdC13aXRoIHNwYWNlcy5kaWZmIGIvdC90NDEzNS9naXQtd2l0aCBzcGFjZXMuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWFhODEwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9naXQtd2l0aCBzcGFjZXMuZGlmZgpAQCAtMCwwICsxLDcgQEAKK2RpZmYgLS1naXQgYS9wb3N0IGltYWdlLnR4dCBiL3Bvc3QgaW1hZ2UudHh0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZWZmMGM1NAorLS0tIC9kZXYvbnVsbAorKysrIGIvcG9zdCBpbWFnZS50eHQJCitAQCAtMCwwICsxIEBACisrcG9zdGltYWdlCmRpZmYgLS1naXQgYS90L3Q0MTM1L2dpdC13aXRoIHRhYi5kaWZmIGIvdC90NDEzNS9naXQtd2l0aCB0YWIuZGlmZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2EzYzkyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDEzNS9naXQtd2l0aCB0YWIuZGlmZgpAQCAtMCwwICsxLDcgQEAKK2RpZmYgLS1naXQgImEvcG9zdFx0aW1hZ2UudHh0IiAiYi9wb3N0XHRpbWFnZS50eHQiCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZWZmMGM1NAorLS0tIC9kZXYvbnVsbAorKysrICJiL3Bvc3RcdGltYWdlLnR4dCIKK0BAIC0wLDAgKzEgQEAKKytwb3N0aW1hZ2UKZGlmZiAtLWdpdCBhL3QvdDQxMzUvbWFrZS1wYXRjaGVzIGIvdC90NDEzNS9tYWtlLXBhdGNoZXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjVmNDVkZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzUvbWFrZS1wYXRjaGVzCkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9zaAorCitkb19maWxlbmFtZSgpIHsKKwlkZXNjPSQxCisJcG9zdGltYWdlPSQyCisKKwlybSAtZnIgZmlsZS1jcmVhdGlvbiAmJgorCWdpdCBpbml0IGZpbGUtY3JlYXRpb24gJiYKKwkoCisJCWNkIGZpbGUtY3JlYXRpb24gJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGluaXQgJiYKKwkJZWNobyBwb3N0aW1hZ2UgPiIkcG9zdGltYWdlIiAmJgorCQlnaXQgYWRkIC1OICIkcG9zdGltYWdlIiAmJgorCQlnaXQgZGlmZiBIRUFEID4iLi4vZ2l0LSRkZXNjLmRpZmYiCisJKSAmJgorCisJcm0gLWZyIHRyYWQtbW9kaWZpY2F0aW9uICYmCisJbWtkaXIgdHJhZC1tb2RpZmljYXRpb24gJiYKKwkoCisJCWNkIHRyYWQtbW9kaWZpY2F0aW9uICYmCisJCWVjaG8gcHJlaW1hZ2UgPiIkcG9zdGltYWdlLm9yaWciICYmCisJCWVjaG8gcG9zdGltYWdlID4iJHBvc3RpbWFnZSIgJiYKKwkJISBkaWZmIC11ICIkcG9zdGltYWdlLm9yaWciICIkcG9zdGltYWdlIiA+Ii4uL2RpZmYtJGRlc2MuZGlmZiIKKwkpICYmCisKKwlybSAtZnIgdHJhZC1jcmVhdGlvbiAmJgorCW1rZGlyIHRyYWQtY3JlYXRpb24gJiYKKwkoCisJCWNkIHRyYWQtY3JlYXRpb24gJiYKKwkJbWtkaXIgYSBiICYmCisJCWVjaG8gcG9zdGltYWdlID4iYi8kcG9zdGltYWdlIiAmJgorCQkhIGRpZmYgLXBydU4gYSBiID4iLi4vYWRkLSRkZXNjLmRpZmYiCisJKQorfQorCitkb19maWxlbmFtZSBwbGFpbiBwb3N0aW1hZ2UudHh0ICYmCitkb19maWxlbmFtZSAnd2l0aCBzcGFjZXMnICdwb3N0IGltYWdlLnR4dCcgJiYKK2RvX2ZpbGVuYW1lICd3aXRoIHRhYicgJ3Bvc3QJaW1hZ2UudHh0JyAmJgorZG9fZmlsZW5hbWUgJ3dpdGggYmFja3NsYXNoJyAncG9zdFxpbWFnZS50eHQnICYmCitkb19maWxlbmFtZSAnd2l0aCBxdW90ZScgJyJwb3N0aW1hZ2UiLnR4dCcgJiYKK2V4cGFuZCBhZGQtcGxhaW4uZGlmZiA+ZGFtYWdlZC5kaWZmIHx8Cit7CisJZWNobyA+JjIgRmFpbGVkLiAmJgorCWV4aXQgMQorfQpkaWZmIC0tZ2l0IGEvdC90NDEzNi1hcHBseS1jaGVjay5zaCBiL3QvdDQxMzYtYXBwbHktY2hlY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGIwYTM3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzYtYXBwbHktY2hlY2suc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSBzaG91bGQgZXhpdCBub24temVybyB3aXRoIHVucmVjb2duaXplZCBpbnB1dC4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgLS1jaGVjayBleGl0cyBub24temVybyB3aXRoIHVucmVjb2duaXplZCBpbnB1dCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSAtLWNoZWNrIC0gPDwtXEVPRgorCUkgYW0gbm90IGEgcGF0Y2gKKwlJIGxvb2sgbm90aGluZyBsaWtlIGEgcGF0Y2gKKwlnaXQgYXBwbHkgbXVzdCBmYWlsCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IGV4aXRzIG5vbi16ZXJvIHdpdGggbm8tb3AgcGF0Y2gnICcKKwljYXQgPmlucHV0IDw8LVxFT0YgJiYKKwlkaWZmIC0tZ2V0IGEvMSBiLzEKKwlpbmRleCA2Njk2ZWE0Li42MDZlZGRkIDEwMDY0NAorCS0tLSBhLzEKKwkrKysgYi8xCisJQEAgLTEsMSArMSwxIEBACisJIDEKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1zdGF0IGlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0tY2hlY2sgaW5wdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTM3LWFwcGx5LXN1Ym1vZHVsZS5zaCBiL3QvdDQxMzctYXBwbHktc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE5YmQ0MGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM3LWFwcGx5LXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFwcGx5IGhhbmRsaW5nIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCithcHBseV9pbmRleCAoKSB7CisJZ2l0IGRpZmYgLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSAiLi4kMSIgfCBnaXQgYXBwbHkgLS1pbmRleCAtCit9CisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiYXBwbHlfaW5kZXgiCisKK2FwcGx5XzN3YXkgKCkgeworCWdpdCBkaWZmIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgIi4uJDEiIHwgZ2l0IGFwcGx5IC0tM3dheSAtCit9CisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiYXBwbHlfM3dheSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTM4LWFwcGx5LXdzLWV4cGFuc2lvbi5zaCBiL3QvdDQxMzgtYXBwbHktd3MtZXhwYW5zaW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmZmUzM2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTM4LWFwcGx5LXdzLWV4cGFuc2lvbi5zaApAQCAtMCwwICsxLDEyMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoQykgMjAxNSBLeWxlIEouIE1jS2F5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcHBseSB0ZXN0IHBhdGNoZXMgd2l0aCB3aGl0ZXNwYWNlIGV4cGFuc2lvbi4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwkjCisJIyMgY3JlYXRlIHRlc3QtTiwgcGF0Y2hOLnBhdGNoLCBleHBlY3QtTiBmaWxlcworCSMKKworCSMgdGVzdCAxCisJcHJpbnRmICJcdCVzXG4iIDEgMiAzIDQgNSA2ID5iZWZvcmUgJiYKKwlwcmludGYgIlx0JXNcbiIgMSAyIDMgPmFmdGVyICYmCisJcHJpbnRmICIlNjRzXG4iIGEgYiBjID4+YWZ0ZXIgJiYKKwlwcmludGYgIlx0JXNcbiIgNCA1IDYgPj5hZnRlciAmJgorCWdpdCBkaWZmIC0tbm8taW5kZXggYmVmb3JlIGFmdGVyIHwKKwkJc2VkIC1lICJzL2JlZm9yZS90ZXN0LTEvIiAtZSAicy9hZnRlci90ZXN0LTEvIiA+cGF0Y2gxLnBhdGNoICYmCisJcHJpbnRmICIlNjRzXG4iIDEgMiAzIDQgNSA2ID50ZXN0LTEgJiYKKwlwcmludGYgIiU2NHNcbiIgMSAyIDMgYSBiIGMgNCA1IDYgPmV4cGVjdC0xICYmCisKKwkjIHRlc3QgMgorCXByaW50ZiAiXHQlc1xuIiBhIGIgYyBkIGUgZiA+YmVmb3JlICYmCisJcHJpbnRmICJcdCVzXG4iIGEgYiBjID5hZnRlciAmJgorCW49MTAgJiYKKwl4PTEgJiYKKwl3aGlsZSB0ZXN0ICR4IC1sdCAkbgorCWRvCisJCXByaW50ZiAiJTYzcyVkXG4iICIiICR4ID4+YWZ0ZXIKKwkJeD0kKCggJHggKyAxICkpCisJZG9uZSAmJgorCXByaW50ZiAiXHQlc1xuIiBkIGUgZiA+PmFmdGVyICYmCisJZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgfAorCQlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtMi8iIC1lICJzL2FmdGVyL3Rlc3QtMi8iID5wYXRjaDIucGF0Y2ggJiYKKwlwcmludGYgIiU2NHNcbiIgYSBiIGMgZCBlIGYgPnRlc3QtMiAmJgorCXByaW50ZiAiJTY0c1xuIiBhIGIgYyA+ZXhwZWN0LTIgJiYKKwl4PTEgJiYKKwl3aGlsZSB0ZXN0ICR4IC1sdCAkbgorCWRvCisJCXByaW50ZiAiJTYzcyVkXG4iICIiICR4ID4+ZXhwZWN0LTIKKwkJeD0kKCggJHggKyAxICkpCisJZG9uZSAmJgorCXByaW50ZiAiJTY0c1xuIiBkIGUgZiA+PmV4cGVjdC0yICYmCisKKwkjIHRlc3QgMworCXByaW50ZiAiXHQlc1xuIiBhIGIgYyBkIGUgZiA+YmVmb3JlICYmCisJcHJpbnRmICJcdCVzXG4iIGEgYiBjID5hZnRlciAmJgorCW49MTAwICYmCisJeD0wICYmCisJd2hpbGUgdGVzdCAkeCAtbHQgJG4KKwlkbworCQlwcmludGYgIiU2M3MlMDJkXG4iICIiICR4ID4+YWZ0ZXIKKwkJeD0kKCggJHggKyAxICkpCisJZG9uZSAmJgorCXByaW50ZiAiXHQlc1xuIiBkIGUgZiA+PmFmdGVyICYmCisJZ2l0IGRpZmYgLS1uby1pbmRleCBiZWZvcmUgYWZ0ZXIgfAorCXNlZCAtZSAicy9iZWZvcmUvdGVzdC0zLyIgLWUgInMvYWZ0ZXIvdGVzdC0zLyIgPnBhdGNoMy5wYXRjaCAmJgorCXByaW50ZiAiJTY0c1xuIiBhIGIgYyBkIGUgZiA+dGVzdC0zICYmCisJcHJpbnRmICIlNjRzXG4iIGEgYiBjID5leHBlY3QtMyAmJgorCXg9MCAmJgorCXdoaWxlIHRlc3QgJHggLWx0ICRuCisJZG8KKwkJcHJpbnRmICIlNjNzJTAyZFxuIiAiIiAkeCA+PmV4cGVjdC0zCisJCXg9JCgoICR4ICsgMSApKQorCWRvbmUgJiYKKwlwcmludGYgIiU2NHNcbiIgZCBlIGYgPj5leHBlY3QtMyAmJgorCisJIyB0ZXN0IDQKKwk+YmVmb3JlICYmCisJeD0wICYmCisJd2hpbGUgdGVzdCAkeCAtbHQgNTAKKwlkbworCQlwcmludGYgIlx0JTAyZFxuIiAkeCA+PmJlZm9yZQorCQl4PSQoKCAkeCArIDEgKSkKKwlkb25lICYmCisJY2F0IGJlZm9yZSA+YWZ0ZXIgJiYKKwlwcmludGYgIiU2NHNcbiIgYSBiIGMgPj5hZnRlciAmJgorCXdoaWxlIHRlc3QgJHggLWx0IDEwMAorCWRvCisJCXByaW50ZiAiXHQlMDJkXG4iICR4ID4+YmVmb3JlCisJCXByaW50ZiAiXHQlMDJkXG4iICR4ID4+YWZ0ZXIKKwkJeD0kKCggJHggKyAxICkpCisJZG9uZSAmJgorCWdpdCBkaWZmIC0tbm8taW5kZXggYmVmb3JlIGFmdGVyIHwKKwlzZWQgLWUgInMvYmVmb3JlL3Rlc3QtNC8iIC1lICJzL2FmdGVyL3Rlc3QtNC8iID5wYXRjaDQucGF0Y2ggJiYKKwk+dGVzdC00ICYmCisJeD0wICYmCisJd2hpbGUgdGVzdCAkeCAtbHQgNTAKKwlkbworCQlwcmludGYgIiU2M3MlMDJkXG4iICIiICR4ID4+dGVzdC00CisJCXg9JCgoICR4ICsgMSApKQorCWRvbmUgJiYKKwljYXQgdGVzdC00ID5leHBlY3QtNCAmJgorCXByaW50ZiAiJTY0c1xuIiBhIGIgYyA+PmV4cGVjdC00ICYmCisJd2hpbGUgdGVzdCAkeCAtbHQgMTAwCisJZG8KKwkJcHJpbnRmICIlNjNzJTAyZFxuIiAiIiAkeCA+PnRlc3QtNAorCQlwcmludGYgIiU2M3MlMDJkXG4iICIiICR4ID4+ZXhwZWN0LTQKKwkJeD0kKCggJHggKyAxICkpCisJZG9uZSAmJgorCisJZ2l0IGNvbmZpZyBjb3JlLndoaXRlc3BhY2UgdGFiLWluLWluZGVudCx0YWJ3aWR0aD02MyAmJgorCWdpdCBjb25maWcgYXBwbHkud2hpdGVzcGFjZSBmaXgKKworJworCisjIE5vdGUgdGhhdCBgcGF0Y2hgIGNhbiBzdWNjZXNzZnVsbHkgYXBwbHkgYWxsIHBhdGNoZXMgd2hlbiBydW4KKyMgd2l0aCB0aGUgLS1pZ25vcmUtd2hpdGVzcGFjZSBvcHRpb24uCisKK2ZvciB0IGluIDEgMiAzIDQKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgd2l0aCB3cyBleHBhbnNpb24gKHQ9JHQpJyAnCisJCWdpdCBhcHBseSBwYXRjaCR0LnBhdGNoICYmCisJCXRlc3RfY21wIHRlc3QtJHQgZXhwZWN0LSR0CisJJworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxMzktYXBwbHktZXNjYXBlLnNoIGIvdC90NDEzOS1hcHBseS1lc2NhcGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDViNTY2MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxMzktYXBwbHktZXNjYXBlLnNoCkBAIC0wLDAgKzEsMTQxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncGF0aHMgd3JpdHRlbiBieSBnaXQtYXBwbHkgY2Fubm90IGVzY2FwZSB0aGUgd29ya2luZyB0cmVlJworLiAuL3Rlc3QtbGliLnNoCisKKyMgdGVzdHMgd2lsbCB0cnkgdG8gd3JpdGUgdG8gLi4vZm9vLCBhbmQgd2UgZG8gbm90CisjIHdhbnQgdGhlbSB0byBlc2NhcGUgdGhlIHRyYXNoIGRpcmVjdG9yeSB3aGVuIHRoZXkKKyMgZmFpbAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVtcCBnaXQgcmVwbyBvbmUgbGV2ZWwgZG93bicgJworCW1rZGlyIGluc2lkZSAmJgorCW12IC5naXQgaW5zaWRlLyAmJgorCWNkIGluc2lkZQorJworCisjICQxID0gbmFtZSBvZiBmaWxlCisjICQyID0gY3VycmVudCBwYXRoIHRvIGZpbGUgKGlmIGRpZmZlcmVudCkKK21rcGF0Y2hfYWRkICgpIHsKKwlybSAtZiAiJHsyOi0kMX0iICYmCisJY2F0IDw8LUVPRgorCWRpZmYgLS1naXQgYS8kMSBiLyQxCisJbmV3IGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCAwMDAwMDAwLi41M2M3NGNkCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiLyQxCisJQEAgLTAsMCArMSBAQAorCStldmlsCisJRU9GCit9CisKK21rcGF0Y2hfZGVsICgpIHsKKwllY2hvIGV2aWwgPiIkezI6LSQxfSIgJiYKKwljYXQgPDwtRU9GCisJZGlmZiAtLWdpdCBhLyQxIGIvJDEKKwlkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKKwlpbmRleCA1M2M3NGNkLi4wMDAwMDAwCisJLS0tIGEvJDEKKwkrKysgL2Rldi9udWxsCisJQEAgLTEgKzAsMCBAQAorCS1ldmlsCisJRU9GCit9CisKKyMgJDEgPSBuYW1lIG9mIGZpbGUKKyMgJDIgPSBjb250ZW50IG9mIHN5bWxpbmsKK21rcGF0Y2hfc3ltbGluayAoKSB7CisJcm0gLWYgIiQxIiAmJgorCWNhdCA8PC1FT0YKKwlkaWZmIC0tZ2l0IGEvJDEgYi8kMQorCW5ldyBmaWxlIG1vZGUgMTIwMDAwCisJaW5kZXggMDAwMDAwMC4uJChwcmludGYgIiVzIiAiJDIiIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pCisJLS0tIC9kZXYvbnVsbAorCSsrKyBiLyQxCisJQEAgLTAsMCArMSBAQAorCSskMgorCVwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgY3JlYXRlIGZpbGUgY29udGFpbmluZyAuLicgJworCW1rcGF0Y2hfYWRkIC4uL2ZvbyA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuIGNyZWF0ZSBmaWxlIGNvbnRhaW5pbmcgLi4gd2l0aCAtLXVuc2FmZS1wYXRocycgJworCW1rcGF0Y2hfYWRkIC4uL2ZvbyA+cGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS11bnNhZmUtcGF0aHMgcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAgJ2Nhbm5vdCBjcmVhdGUgZmlsZSBjb250YWluaW5nIC4uIChpbmRleCknICcKKwlta3BhdGNoX2FkZCAuLi9mb28gPnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAgJ2Nhbm5vdCBjcmVhdGUgZmlsZSBjb250YWluaW5nIC4uIHdpdGggLS11bnNhZmUtcGF0aHMgKGluZGV4KScgJworCW1rcGF0Y2hfYWRkIC4uL2ZvbyA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCAtLXVuc2FmZS1wYXRocyBwYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC4uL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW5ub3QgZGVsZXRlIGZpbGUgY29udGFpbmluZyAuLicgJworCW1rcGF0Y2hfZGVsIC4uL2ZvbyA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuIGRlbGV0ZSBmaWxlIGNvbnRhaW5pbmcgLi4gd2l0aCAtLXVuc2FmZS1wYXRocycgJworCW1rcGF0Y2hfZGVsIC4uL2ZvbyA+cGF0Y2ggJiYKKwlnaXQgYXBwbHkgLS11bnNhZmUtcGF0aHMgcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IGRlbGV0ZSBmaWxlIGNvbnRhaW5pbmcgLi4gKGluZGV4KScgJworCW1rcGF0Y2hfZGVsIC4uL2ZvbyA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCBwYXRjaCAmJgorCXRlc3RfcGF0aF9pc19maWxlIC4uL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rIGVzY2FwZSB2aWEgLi4nICcKKwl7CisJCW1rcGF0Y2hfc3ltbGluayB0bXAgLi4gJiYKKwkJbWtwYXRjaF9hZGQgdG1wL2ZvbyAuLi9mb28KKwl9ID5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRtcCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC4uL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rIGVzY2FwZSB2aWEgLi4gKGluZGV4KScgJworCXsKKwkJbWtwYXRjaF9zeW1saW5rIHRtcCAuLiAmJgorCQlta3BhdGNoX2FkZCB0bXAvZm9vIC4uL2ZvbworCX0gPnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFwcGx5IC0taW5kZXggcGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0bXAgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuLi9mb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGluayBlc2NhcGUgdmlhIGFic29sdXRlIHBhdGgnICcKKwl7CisJCW1rcGF0Y2hfc3ltbGluayB0bXAgIiQocHdkKSIgJiYKKwkJbWtwYXRjaF9hZGQgdG1wL2ZvbyAuLi9mb28KKwl9ID5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhcHBseSBwYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRtcCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC4uL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdzeW1saW5rIGVzY2FwZSB2aWEgYWJzb2x1dGUgcGF0aCAoaW5kZXgpJyAnCisJeworCQlta3BhdGNoX3N5bWxpbmsgdG1wICIkKHB3ZCkiICYmCisJCW1rcGF0Y2hfYWRkIHRtcC9mb28gLi4vZm9vCisJfSA+cGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXBwbHkgLS1pbmRleCBwYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRtcCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC4uL2ZvbworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQxNTAtYW0uc2ggYi90L3Q0MTUwLWFtLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI0MWJkMTcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MTUwLWFtLnNoCkBAIC0wLDAgKzEsOTYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFtIHJ1bm5pbmcnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogbWVzc2FnZXMnICcKKwljYXQgPm1zZyA8PC1cRU9GICYmCisJc2Vjb25kCisKKwlMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIHNhZGlwc2NpbmcgZWxpdHIsIHNlZCBkaWFtIG5vbnVteQorCWVpcm1vZCB0ZW1wb3IgaW52aWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdXlhbSBlcmF0LCBzZWQgZGlhbQorCXZvbHVwdHVhLiBBdCB2ZXJvIGVvcyBldCBhY2N1c2FtIGV0IGp1c3RvIGR1byBkb2xvcmVzIGV0IGVhIHJlYnVtLiBTdGV0IGNsaXRhCisJa2FzZCBndWJlcmdyZW4sIG5vIHNlYSB0YWtpbWF0YSBzYW5jdHVzIGVzdCBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldC4gTG9yZW0KKwlpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2V0ZXR1ciBzYWRpcHNjaW5nIGVsaXRyLCBzZWQgZGlhbSBub251bXkgZWlybW9kCisJdGVtcG9yIGludmlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFnbmEgYWxpcXV5YW0gZXJhdCwgc2VkIGRpYW0gdm9sdXB0dWEuIEF0CisJdmVybyBlb3MgZXQgYWNjdXNhbSBldCBqdXN0byBkdW8gZG9sb3JlcyBldCBlYSByZWJ1bS4KKworCUVPRgorCXF6X3RvX3RhYl9zcGFjZSA8PC1cRU9GID4+bXNnICYmCisJUUR1aXMgYXV0ZW0gdmVsIGV1bSBpcml1cmUgZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdAorCVFlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtIGRvbG9yZSBldSBmZXVnaWF0IG51bGxhIGZhY2lsaXNpcworCVFhdCB2ZXJvIGVyb3MgZXQgYWNjdW1zYW4gZXQgaXVzdG8gb2RpbyBkaWduaXNzaW0gcXVpIGJsYW5kaXQKKwlRcHJhZXNlbnQgbHVwdGF0dW0genpyaWwgZGVsZW5pdCBhdWd1ZSBkdWlzIGRvbG9yZSB0ZSBmZXVnYWl0IG51bGxhCisJUWZhY2lsaXNpLgorCUVPRgorCWNhdCA+Pm1zZyA8PC1cRU9GICYmCisKKwlMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwKKwljb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZGlhbSBub251bW15IG5pYmggZXVpc21vZCB0aW5jaWR1bnQgdXQKKwlsYW9yZWV0IGRvbG9yZSBtYWduYSBhbGlxdWFtIGVyYXQgdm9sdXRwYXQuCisKKwkgIGdpdAorCSAgLS0tCisJICArKysKKworCVV0IHdpc2kgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2kgdGF0aW9uIHVsbGFtY29ycGVyIHN1c2NpcGl0CisJbG9ib3J0aXMgbmlzbCB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2VxdWF0LiBEdWlzIGF1dGVtIHZlbCBldW0gaXJpdXJlCisJZG9sb3IgaW4gaGVuZHJlcml0IGluIHZ1bHB1dGF0ZSB2ZWxpdCBlc3NlIG1vbGVzdGllIGNvbnNlcXVhdCwgdmVsIGlsbHVtCisJZG9sb3JlIGV1IGZldWdpYXQgbnVsbGEgZmFjaWxpc2lzIGF0IHZlcm8gZXJvcyBldCBhY2N1bXNhbiBldCBpdXN0byBvZGlvCisJZGlnbmlzc2ltIHF1aSBibGFuZGl0IHByYWVzZW50IGx1cHRhdHVtIHp6cmlsIGRlbGVuaXQgYXVndWUgZHVpcyBkb2xvcmUgdGUKKwlmZXVnYWl0IG51bGxhIGZhY2lsaXNpLgorCUVPRgorCisJY2F0ID5mYWlsbWFpbCA8PC1cRU9GICYmCisJRnJvbSBmb29AZXhhbXBsZS5jb20gRnJpIE1heSAyMyAxMDo0Mzo0OSAyMDA4CisJRnJvbToJZm9vQGV4YW1wbGUuY29tCisJVG86CWJhckBleGFtcGxlLmNvbQorCVN1YmplY3Q6IFJlOiBbUkZDL1BBVENIXSBnaXQtZm9vLnNoCisJRGF0ZToJRnJpLCAyMyBNYXkgMjAwOCAwNToyMzo0MiArMDIwMAorCisJU29tZXRpbWVzIHdlIGhhdmUgdG8gZmluZCBvdXQgdGhhdCB0aGVyZSdcJydzIG5vdGhpbmcgbGVmdC4KKworCUVPRgorCisJY2F0ID5waW5lIDw8LVxFT0YgJiYKKwlGcm9tIE1BSUxFUi1EQUVNT04gRnJpIE1heSAyMyAxMDo0Mzo0OSAyMDA4CisJRGF0ZTogMjMgTWF5IDIwMDggMDU6MjM6NDIgKzAyMDAKKwlGcm9tOiBNYWlsIFN5c3RlbSBJbnRlcm5hbCBEYXRhIDxNQUlMRVItREFFTU9OQGV4YW1wbGUuY29tPgorCVN1YmplY3Q6IERPTidcJydUIERFTEVURSBUSElTIE1FU1NBR0UgLS0gRk9MREVSIElOVEVSTkFMIERBVEEKKwlNZXNzYWdlLUlEOiA8Zm9vLTAwMDFAZXhhbXBsZS5jb20+CisKKwlUaGlzIHRleHQgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9ybWF0IG9mIHlvdXIgbWFpbCBmb2xkZXIsIGFuZCBpcyBub3QKKwlhIHJlYWwgbWVzc2FnZS4gIEl0IGlzIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSB0aGUgbWFpbCBzeXN0ZW0gc29mdHdhcmUuCisJSWYgZGVsZXRlZCwgaW1wb3J0YW50IGZvbGRlciBkYXRhIHdpbGwgYmUgbG9zdCwgYW5kIGl0IHdpbGwgYmUgcmUtY3JlYXRlZAorCXdpdGggdGhlIGRhdGEgcmVzZXQgdG8gaW5pdGlhbCB2YWx1ZXMuCisKKwlFT0YKKworCWNhdCA+c2Npc3NvcnMtbXNnIDw8LVxFT0YgJiYKKwlUZXN0IGdpdC1hbSB3aXRoIHNjaXNzb3JzIGxpbmUKKworCVRoaXMgbGluZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIGNvbW1pdCBtZXNzYWdlLgorCUVPRgorCisJY2F0IC0gc2Npc3NvcnMtbXNnID5uby1zY2lzc29ycy1tc2cgPDwtXEVPRiAmJgorCVRoaXMgbGluZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBjb21taXQgbWVzc2FnZSB3aXRoIC0tc2Npc3NvcnMgZW5hYmxlZC4KKworCSAtIC0gPjggLSAtIHJlbW92ZSBldmVyeXRoaW5nIGFib3ZlIHRoaXMgbGluZSAtIC0gPjggLSAtCisKKwlFT0YKKworCXNpZ25vZmY9IlNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZmlyc3QgJiYKKwlnaXQgdGFnIGZpcnN0ICYmCisKKwllY2hvIHdvcmxkID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLXMgLUYgbXNnICYmCisJZ2l0IHRhZyBzZWNvbmQgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgZmlyc3QgPnBhdGNoMSAmJgorCXsKKwkJZWNobyAiTWVzc2FnZS1JZDogPDEyMjY1MDE2ODEtMjQ5MjMtMS1naXQtc2VuZC1lbWFpbC1iZGFAbW5zc3BiLnJ1PiIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIE9uZSIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFR3byIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFRocmVlIiAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0IHwgc2VkIC1lICIxZCIKKwl9ID4gcGF0Y2gxLmVtbCAmJgorCXsKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIE9uZSIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFR3byIgJiYKKwkJZWNobyAiWC1GYWtlLUZpZWxkOiBMaW5lIFRocmVlIiAmJgorCQlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IGZpcnN0IHwgc2VkIC1lICIxZCIKKwl9IHwgYXBwZW5kX2NyID5wYXRjaDEtY3JsZi5lbWwgJiYKKwl7CisJCXByaW50ZiAiJTI1NXNcXG4iICIiCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBPbmUiICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUd28iICYmCisJCWVjaG8gIlgtRmFrZS1GaWVsZDogTGluZSBUaHJlZSIgJiYKKwkJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBmaXJzdCB8IHNlZCAtZSAiMWQiCisJfSA+IHBhdGNoMS13cy5lbWwgJiYKKwl7CisJCXNlZCAtbmUgIjFwIiBtc2cgJiYKKwkJZWNobyAmJgorCQllY2hvICJGcm9tOiAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4iICYmCisJCWVjaG8gIkRhdGU6ICRHSVRfQVVUSE9SX0RBVEUiICYmCisJCWVjaG8gJiYKKwkJc2VkIC1lICIxLDJkIiBtc2cgJiYKKwkJZWNobyAmJgorCQllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iICYmCisJCWVjaG8gIi0tLSIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtLW5vLWNvbW1pdC1pZCAtLXN0YXQgLXAgc2Vjb25kCisJfSA+cGF0Y2gxLXN0Z2l0LmVtbCAmJgorCW1rZGlyIHN0Z2l0LXNlcmllcyAmJgorCWNwIHBhdGNoMS1zdGdpdC5lbWwgc3RnaXQtc2VyaWVzL3BhdGNoICYmCisJeworCQllY2hvICIjIFRoaXMgc2VyaWVzIGFwcGxpZXMgb24gR0lUIGNvbW1pdCAkKGdpdCByZXYtcGFyc2UgZmlyc3QpIiAmJgorCQllY2hvICJwYXRjaCIKKwl9ID5zdGdpdC1zZXJpZXMvc2VyaWVzICYmCisJeworCQllY2hvICIjIEhHIGNoYW5nZXNldCBwYXRjaCIgJiYKKwkJZWNobyAiIyBVc2VyICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiIgJiYKKwkJZWNobyAiIyBEYXRlICR0ZXN0X3RpY2sgMjUyMDAiICYmCisJCWVjaG8gIiMgICAgICAkKGdpdCBzaG93IC0tcHJldHR5PSIlYUQiIC1zIHNlY29uZCkiICYmCisJCWVjaG8gIiMgTm9kZSBJRCAkX3o0MCIgJiYKKwkJZWNobyAiIyBQYXJlbnQgICRfejQwIiAmJgorCQljYXQgbXNnICYmCisJCWVjaG8gJiYKKwkJZWNobyAiU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IiAmJgorCQllY2hvICYmCisJCWdpdCBkaWZmLXRyZWUgLS1uby1jb21taXQtaWQgLXAgc2Vjb25kCisJfSA+cGF0Y2gxLWhnLmVtbCAmJgorCisKKwllY2hvIHNjaXNzb3JzLWZpbGUgPnNjaXNzb3JzLWZpbGUgJiYKKwlnaXQgYWRkIHNjaXNzb3JzLWZpbGUgJiYKKwlnaXQgY29tbWl0IC1GIHNjaXNzb3JzLW1zZyAmJgorCWdpdCB0YWcgc2Npc3NvcnMgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IHNjaXNzb3JzXiA+c2Npc3NvcnMtcGF0Y2guZW1sICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCisJZWNobyBuby1zY2lzc29ycy1maWxlID5uby1zY2lzc29ycy1maWxlICYmCisJZ2l0IGFkZCBuby1zY2lzc29ycy1maWxlICYmCisJZ2l0IGNvbW1pdCAtRiBuby1zY2lzc29ycy1tc2cgJiYKKwlnaXQgdGFnIG5vLXNjaXNzb3JzICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBuby1zY2lzc29yc14gPm5vLXNjaXNzb3JzLXBhdGNoLmVtbCAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKworCXNlZCAtbiAtZSAiMyxcJHAiIG1zZyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgJiYKKworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgZmlyc3QgPnBhdGNoMgkmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGxvcmVtICYmCisJc2VkIC1uIC1lICIxMSxcJHAiIG1zZyA+ZmlsZSAmJgorCWhlYWQgLW4gOSBtc2cgPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibW92ZWQgc3R1ZmYiICYmCisKKwllY2hvIGdvb2RieWUgPmFub3RoZXIgJiYKKwlnaXQgYWRkIGFub3RoZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBhbm90aGVyIGZpbGUiICYmCisKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IG1hc3RlciA+bG9yZW0tbW92ZS5wYXRjaCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1uby1wcmVmaXggLS1zdGRvdXQgbWFzdGVyID5sb3JlbS16ZXJvLnBhdGNoICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lICYmCisJZ2l0IG12IGZpbGUgcmVuYW1lZCAmJgorCWdpdCBjb21taXQgLW0gInJlbmFtZWQgYSBmaWxlIiAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtTSAtLXN0ZG91dCBsb3JlbSA+cmVuYW1lLnBhdGNoICYmCisKKwlnaXQgcmVzZXQgLS1zb2Z0IGxvcmVtXiAmJgorCWdpdCBjb21taXQgLW0gInJlbmFtZWQgYSBmaWxlIGFuZCBhZGRlZCBhbm90aGVyIiAmJgorCisJZ2l0IGZvcm1hdC1wYXRjaCAtTSAtLXN0ZG91dCBsb3JlbV4gPnJlbmFtZS1hZGQucGF0Y2ggJiYKKworCSMgcmVzZXQgdGltZQorCXNhbmVfdW5zZXQgdGVzdF90aWNrICYmCisJdGVzdF90aWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgcGF0Y2ggY29ycmVjdGx5JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhbSA8cGF0Y2gxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmReKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gZmFpbHMgaWYgaW5kZXggaXMgZGlydHknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGRpcnR5ZmlsZSIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJZWNobyBkaXJ0eWZpbGUgPmRpcnR5ZmlsZSAmJgorCWdpdCBhZGQgZGlydHlmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIHBhdGNoMSAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2NtcF9yZXYgZmlyc3QgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBhcHBsaWVzIHBhdGNoIGUtbWFpbCBub3QgaW4gYSBtYm94JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCWdpdCBhbSBwYXRjaDEuZW1sICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmReKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gYXBwbGllcyBwYXRjaCBlLW1haWwgbm90IGluIGEgbWJveCB3aXRoIENSTEYnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJZ2l0IGFtIHBhdGNoMS1jcmxmLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kXikiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgcGF0Y2ggZS1tYWlsIHdpdGggcHJlY2VkaW5nIHdoaXRlc3BhY2UnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJZ2l0IGFtIHBhdGNoMS13cy5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHNlY29uZF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBhcHBsaWVzIHN0Z2l0IHBhdGNoJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNoZWNrb3V0IC1mIGZpcnN0ICYmCisJZ2l0IGFtIHBhdGNoMS1zdGdpdC5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmReIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tcGF0Y2gtZm9ybWF0PXN0Z2l0IGFwcGxpZXMgc3RnaXQgcGF0Y2gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlyc3QgJiYKKwlnaXQgYW0gLS1wYXRjaC1mb3JtYXQ9c3RnaXQgPHBhdGNoMS1zdGdpdC5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmReIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgc3RnaXQgc2VyaWVzJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNoZWNrb3V0IC1mIGZpcnN0ICYmCisJZ2l0IGFtIHN0Z2l0LXNlcmllcy9zZXJpZXMgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmReIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGFwcGxpZXMgaGcgcGF0Y2gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlyc3QgJiYKKwlnaXQgYW0gcGF0Y2gxLWhnLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZCBIRUFEICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZF4gSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1wYXRjaC1mb3JtYXQ9aGcgYXBwbGllcyBoZyBwYXRjaCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjaGVja291dCAtZiBmaXJzdCAmJgorCWdpdCBhbSAtLXBhdGNoLWZvcm1hdD1oZyA8cGF0Y2gxLWhnLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZCBIRUFEICYmCisJdGVzdF9jbXBfcmV2IHNlY29uZF4gSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBhcHBseXBhdGNoLW1zZyBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2hvb2tzL2FwcGx5cGF0Y2gtbXNnIiAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvYXBwbHlwYXRjaC1tc2cgPDwtXEVPRiAmJgorCWNhdCAiJDEiID5hY3R1YWwtbXNnICYmCisJZWNobyBob29rLW1lc3NhZ2UgPiIkMSIKKwlFT0YKKwlnaXQgYW0gcGF0Y2gxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwllY2hvIGhvb2stbWVzc2FnZSA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PWZvcm1hdDolQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD1mb3JtYXQ6JUIgc2Vjb25kID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC1tc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBmYWlsaW5nIGFwcGx5cGF0Y2gtbXNnIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaG9va3MvYXBwbHlwYXRjaC1tc2ciICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCW1rZGlyIC1wIC5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9hcHBseXBhdGNoLW1zZyA8PC1cRU9GICYmCisJZXhpdCAxCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIHBhdGNoMSAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBmaXJzdCAmJgorCXRlc3RfY21wX3JldiBmaXJzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggcHJlLWFwcGx5cGF0Y2ggaG9vaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9ob29rcy9wcmUtYXBwbHlwYXRjaCIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3ByZS1hcHBseXBhdGNoIDw8LVxFT0YgJiYKKwlnaXQgZGlmZiBmaXJzdCA+ZGlmZi5hY3R1YWwKKwlleGl0IDAKKwlFT0YKKwlnaXQgYW0gcGF0Y2gxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQgJiYKKwl0ZXN0X2NtcF9yZXYgc2Vjb25kIEhFQUQgJiYKKwlnaXQgZGlmZiBmaXJzdC4uc2Vjb25kID5kaWZmLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZGlmZi5leHBlY3RlZCBkaWZmLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGZhaWxpbmcgcHJlLWFwcGx5cGF0Y2ggaG9vaycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9ob29rcy9wcmUtYXBwbHlwYXRjaCIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3ByZS1hcHBseXBhdGNoIDw8LVxFT0YgJiYKKwlleGl0IDEKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gcGF0Y2gxICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3RfY21wX3JldiBmaXJzdCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggcG9zdC1hcHBseXBhdGNoIGhvb2snICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvaG9va3MvcG9zdC1hcHBseXBhdGNoIiAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlta2RpciAtcCAuZ2l0L2hvb2tzICYmCisJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcG9zdC1hcHBseXBhdGNoIDw8LVxFT0YgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmhlYWQuYWN0dWFsCisJZ2l0IGRpZmYgc2Vjb25kID5kaWZmLmFjdHVhbAorCWV4aXQgMAorCUVPRgorCWdpdCBhbSBwYXRjaDEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCWdpdCByZXYtcGFyc2Ugc2Vjb25kID5oZWFkLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgaGVhZC5leHBlY3RlZCBoZWFkLmFjdHVhbCAmJgorCWdpdCBkaWZmIHNlY29uZCA+ZGlmZi5leHBlY3RlZCAmJgorCXRlc3RfY21wIGRpZmYuZXhwZWN0ZWQgZGlmZi5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBmYWlsaW5nIHBvc3QtYXBwbHlwYXRjaCBob29rJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0L2hvb2tzL3Bvc3QtYXBwbHlwYXRjaCIgJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJbWtkaXIgLXAgLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCAuZ2l0L2hvb2tzL3Bvc3QtYXBwbHlwYXRjaCA8PC1cRU9GICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5oZWFkLmFjdHVhbAorCWV4aXQgMQorCUVPRgorCWdpdCBhbSBwYXRjaDEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHNlY29uZCAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCWdpdCByZXYtcGFyc2Ugc2Vjb25kID5oZWFkLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgaGVhZC5leHBlY3RlZCBoZWFkLmFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXNjaXNzb3JzIGN1dHMgdGhlIG1lc3NhZ2UgYXQgdGhlIHNjaXNzb3JzIGxpbmUnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCWdpdCBhbSAtLXNjaXNzb3JzIHNjaXNzb3JzLXBhdGNoLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Npc3NvcnMgJiYKKwl0ZXN0X2NtcF9yZXYgc2Npc3NvcnMgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLW5vLXNjaXNzb3JzIG92ZXJyaWRlcyBtYWlsaW5mby5zY2lzc29ycycgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJdGVzdF9jb25maWcgbWFpbGluZm8uc2Npc3NvcnMgdHJ1ZSAmJgorCWdpdCBhbSAtLW5vLXNjaXNzb3JzIG5vLXNjaXNzb3JzLXBhdGNoLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbm8tc2Npc3NvcnMgJiYKKwl0ZXN0X2NtcF9yZXYgbm8tc2Npc3NvcnMgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogbmV3IGF1dGhvciBhbmQgY29tbWl0dGVyJyAnCisJR0lUX0FVVEhPUl9OQU1FPSJBbm90aGVyIFRob3IiICYmCisJR0lUX0FVVEhPUl9FTUFJTD0iYS50aG9yQGV4YW1wbGUuY29tIiAmJgorCUdJVF9DT01NSVRURVJfTkFNRT0iQ28gTSBNaXRlciIgJiYKKwlHSVRfQ09NTUlUVEVSX0VNQUlMPSJjLm1pdGVyQGV4YW1wbGUuY29tIiAmJgorCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTCBHSVRfQ09NTUlUVEVSX05BTUUgR0lUX0NPTU1JVFRFUl9FTUFJTAorJworCitjb21wYXJlICgpIHsKKwlhPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDIiIHwgZ3JlcCAiXiQxICIpICYmCisJYj0kKGdpdCBjYXQtZmlsZSBjb21taXQgIiQzIiB8IGdyZXAgIl4kMSAiKSAmJgorCXRlc3QgIiRhIiA9ICIkYiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gY2hhbmdlcyBjb21taXR0ZXIgYW5kIGtlZXBzIGF1dGhvcicgJworCXRlc3RfdGljayAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwlnaXQgYW0gcGF0Y2gyICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyXl4pIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIuLkhFQUQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXJeLi5IRUFEXiAmJgorCWNvbXBhcmUgYXV0aG9yIG1hc3RlciBIRUFEICYmCisJY29tcGFyZSBhdXRob3IgbWFzdGVyXiBIRUFEXiAmJgorCXRlc3QgIiRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIgPSBcCisJICAgICAiJChnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDoiJWNuIDwlY2U+IiBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1zaWdub2ZmIGFkZHMgU2lnbmVkLW9mZi1ieTogbGluZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyMiBmaXJzdCAmJgorCWdpdCBhbSAtLXNpZ25vZmYgPHBhdGNoMiAmJgorCXByaW50ZiAiJXNcbiIgIiRzaWdub2ZmIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID4+ZXhwZWN0ZWQgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUReIHwgZ3JlcCAiU2lnbmVkLW9mZi1ieToiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID5leHBlY3RlZCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IGdyZXAgIlNpZ25lZC1vZmYtYnk6IiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHN0YXlzIGluIGJyYW5jaCcgJworCWVjaG8gcmVmcy9oZWFkcy9tYXN0ZXIyID5leHBlY3RlZCAmJgorCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2lnbm9mZiBkb2VzIG5vdCBhZGQgU2lnbmVkLW9mZi1ieTogbGluZSBpZiBhbHJlYWR5IHRoZXJlJyAnCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCBIRUFEXiA+cGF0Y2gzICYmCisJc2VkIC1lICIvXlN1YmplY3QvIHMsXFtQQVRDSCxSZTogUmU6IFJlOiAmIDEvNSB2Ml0gW2ZvbywiIHBhdGNoMyA+cGF0Y2g0ICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBhbSAtLXNpZ25vZmYgcGF0Y2g0ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiXlNpZ25lZC1vZmYtYnk6IiBhY3R1YWwpIC1lcSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGhvdXQgLS1rZWVwIHJlbW92ZXMgUmU6IGFuZCBbUEFUQ0hdIHN0dWZmJyAnCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3RlZCAmJgorCWdpdCByZXYtcGFyc2UgbWFzdGVyMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0ta2VlcCByZWFsbHkga2VlcHMgdGhlIHN1YmplY3QnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJZ2l0IGFtIC0ta2VlcCBwYXRjaDQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCA+YWN0dWFsICYmCisJZ3JlcCAiUmU6IFJlOiBSZTogXFtQQVRDSCAxLzUgdjJcXSBcW2Zvb1xdIHRoaXJkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1rZWVwLW5vbi1wYXRjaCByZWFsbHkga2VlcHMgdGhlIG5vbi1wYXRjaCBwYXJ0JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBhbSAtLWtlZXAtbm9uLXBhdGNoIHBhdGNoNCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5hY3R1YWwgJiYKKwlncmVwICJeXFtmb29cXSB0aGlyZCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGFtIC0zJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBiYXNlM3dheSBtYXN0ZXIyICYmCisJc2VkIC1uIC1lICIzLFwkcCIgbXNnID5maWxlICYmCisJaGVhZCAtbiA5IG1zZyA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb3BpZWQgc3R1ZmYiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIGZhbGxzIGJhY2sgdG8gMy13YXkgbWVyZ2UnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvcmVtMiBiYXNlM3dheSAmJgorCWdpdCBhbSAtMyBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBsb3JlbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyAtcDAgY2FuIHJlYWQgLS1uby1wcmVmaXggcGF0Y2gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvcmVtMyBiYXNlM3dheSAmJgorCWdpdCBhbSAtMyAtcDAgbG9yZW0temVyby5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbG9yZW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBjb25maWcgYW0udGhyZWVXYXkgZmFsbHMgYmFjayB0byAzLXdheSBtZXJnZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9yZW00IGJhc2Uzd2F5ICYmCisJdGVzdF9jb25maWcgYW0udGhyZWVXYXkgMSAmJgorCWdpdCBhbSBsb3JlbS1tb3ZlLnBhdGNoICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBsb3JlbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGNvbmZpZyBhbS50aHJlZVdheSBvdmVycmlkZGVuIGJ5IC0tbm8tM3dheScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9yZW01IGJhc2Uzd2F5ICYmCisJdGVzdF9jb25maWcgYW0udGhyZWVXYXkgMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLW5vLTN3YXkgbG9yZW0tbW92ZS5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gY2FuIHJlbmFtZSBhIGZpbGUnICcKKwlncmVwICJecmVuYW1lIGZyb20iIHJlbmFtZS5wYXRjaCAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbG9yZW1eMCAmJgorCWdpdCBhbSByZW5hbWUucGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgcmVuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIGNhbiByZW5hbWUgYSBmaWxlJyAnCisJZ3JlcCAiXnJlbmFtZSBmcm9tIiByZW5hbWUucGF0Y2ggJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGxvcmVtXjAgJiYKKwlnaXQgYW0gLTMgcmVuYW1lLnBhdGNoICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHJlbmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyBjYW4gcmVuYW1lIGEgZmlsZSBhZnRlciBmYWxsaW5nIGJhY2sgdG8gMy13YXkgbWVyZ2UnICcKKwlncmVwICJecmVuYW1lIGZyb20iIHJlbmFtZS1hZGQucGF0Y2ggJiYKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGxvcmVtXjAgJiYKKwlnaXQgYW0gLTMgcmVuYW1lLWFkZC5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSByZW5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgLXEgaXMgcXVpZXQnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbG9yZW0yICYmCisJZ2l0IHJlc2V0IGJhc2Uzd2F5IC0taGFyZCAmJgorCWdpdCBhbSAtMyAtcSBsb3JlbS1tb3ZlLnBhdGNoID5vdXRwdXQub3V0IDI+JjEgJiYKKwkhIHRlc3QgLXMgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBwYXVzZXMgb24gY29uZmxpY3QnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGxvcmVtMl5eICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIGxvcmVtLW1vdmUucGF0Y2ggJiYKKwl0ZXN0IC1kIC5naXQvcmViYXNlLWFwcGx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2tpcCB3b3JrcycgJworCWVjaG8gZ29vZGJ5ZSA+ZXhwZWN0ZWQgJiYKKwlnaXQgYW0gLS1za2lwICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBsb3JlbTJeXiAtLSBmaWxlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYW5vdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLWFib3J0IHJlbW92ZXMgYSBzdHJheSBkaXJlY3RvcnknICcKKwlta2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gcmVmdXNlcyBwYXRjaGVzIHdoZW4gcGF1c2VkJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBsb3JlbTJeXiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIGxvcmVtLW1vdmUucGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9jbXBfcmV2IGxvcmVtMl5eIEhFQUQgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSA8bG9yZW0tbW92ZS5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2NtcF9yZXYgbG9yZW0yXl4gSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXJlc29sdmVkIHdvcmtzJyAnCisJZWNobyBnb29kYnllID5leHBlY3RlZCAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbG9yZW0yXl4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gbG9yZW0tbW92ZS5wYXRjaCAmJgorCXRlc3QgLWQgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwllY2hvIHJlc29sdmVkID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBhbSAtLXJlc29sdmVkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhbm90aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tcmVzb2x2ZWQgZmFpbHMgaWYgaW5kZXggaGFzIG5vIGNoYW5nZXMnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGxvcmVtMl5eICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIGxvcmVtLW1vdmUucGF0Y2ggJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9jbXBfcmV2IGxvcmVtMl5eIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1yZXNvbHZlZCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2NtcF9yZXYgbG9yZW0yXl4gSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLXJlc29sdmVkIGZhaWxzIGlmIGluZGV4IGhhcyB1bm1lcmdlZCBlbnRyaWVzJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLTMgbG9yZW0tbW92ZS5wYXRjaCAmJgorCXRlc3RfcGF0aF9pc19kaXIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwl0ZXN0X2NtcF9yZXYgc2Vjb25kIEhFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1yZXNvbHZlZCA+ZXJyICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfY21wX3JldiBzZWNvbmQgSEVBRCAmJgorCXRlc3RfaTE4bmdyZXAgInN0aWxsIGhhdmUgdW5tZXJnZWQgcGF0aHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB0YWtlcyBwYXRjaGVzIGZyb20gYSBQaW5lIG1haWxib3gnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJY2F0IHBpbmUgcGF0Y2gxIHwgZ2l0IGFtICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXJeLi5IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIGZhaWxzIG9uIG1haWwgd2l0aG91dCBwYXRjaCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gPGZhaWxtYWlsICYmCisJZ2l0IGFtIC0tYWJvcnQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L3JlYmFzZS1hcHBseQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBmYWlscyBvbiBlbXB0eSBwYXRjaCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvICItLS0iID4+ZmFpbG1haWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gPGZhaWxtYWlsICYmCisJZ2l0IGFtIC0tc2tpcCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdvcmtzIGZyb20gc3RkaW4gaW4gc3ViZGlyZWN0b3J5JyAnCisJcm0gLWZyIHN1YmRpciAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwkoCisJCW1rZGlyIC1wIHN1YmRpciAmJgorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGFtIDwuLi9wYXRjaDEKKwkpICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdvcmtzIGZyb20gZmlsZSAocmVsYXRpdmUgcGF0aCBnaXZlbikgaW4gc3ViZGlyZWN0b3J5JyAnCisJcm0gLWZyIHN1YmRpciAmJgorCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwkoCisJCW1rZGlyIC1wIHN1YmRpciAmJgorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGFtIC4uL3BhdGNoMQorCSkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd29ya3MgZnJvbSBmaWxlIChhYnNvbHV0ZSBwYXRoIGdpdmVuKSBpbiBzdWJkaXJlY3RvcnknICcKKwlybSAtZnIgc3ViZGlyICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCVA9JChwd2QpICYmCisJKAorCQlta2RpciAtcCBzdWJkaXIgJiYKKwkJY2Qgc3ViZGlyICYmCisJCWdpdCBhbSAiJFAvcGF0Y2gxIgorCSkgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzZWNvbmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZScgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYW0gLS1jb21taXR0ZXItZGF0ZS1pcy1hdXRob3ItZGF0ZSBwYXRjaDEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIi9eXCQvcSIgPmhlYWQxICYmCisJc2VkIC1uZSAiL15hdXRob3IgL3MvLio+IC8vcCIgaGVhZDEgPmF0ICYmCisJc2VkIC1uZSAiL15jb21taXR0ZXIgL3MvLio+IC8vcCIgaGVhZDEgPmN0ICYmCisJdGVzdF9jbXAgYXQgY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aG91dCAtLWNvbW1pdHRlci1kYXRlLWlzLWF1dGhvci1kYXRlJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhbSBwYXRjaDEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIi9eXCQvcSIgPmhlYWQxICYmCisJc2VkIC1uZSAiL15hdXRob3IgL3MvLio+IC8vcCIgaGVhZDEgPmF0ICYmCisJc2VkIC1uZSAiL15jb21taXR0ZXIgL3MvLio+IC8vcCIgaGVhZDEgPmN0ICYmCisJISB0ZXN0X2NtcCBhdCBjdAorJworCisjIFRoaXMgY2hlY2tzIGZvciArMDAwMCBiZWNhdXNlIFRaIGlzIHNldCB0byBVVEMgYW5kIHRoYXQgc2hvdWxkCisjIHNob3cgdXAgd2hlbiB0aGUgY3VycmVudCB0aW1lIGlzIHVzZWQuIFRoZSBkYXRlIGluIG1lc3NhZ2UgaXMgc2V0CisjIGJ5IHRlc3RfdGljayB0aGF0IHVzZXMgLTA3MDAgdGltZXpvbmU7IGlmIHRoaXMgZmVhdHVyZSBkb2VzIG5vdAorIyB3b3JrLCB3ZSB3aWxsIHNlZSB0aGF0IGluc3RlYWQgb2YgKzAwMDAuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLWlnbm9yZS1kYXRlJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhbSAtLWlnbm9yZS1kYXRlIHBhdGNoMSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiL15cJC9xIiA+aGVhZDEgJiYKKwlzZWQgLW5lICIvXmF1dGhvciAvcy8uKj4gLy9wIiBoZWFkMSA+YXQgJiYKKwlncmVwICIrMDAwMCIgYXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gaW50byBhbiB1bmJvcm4gYnJhbmNoJyAnCisJZ2l0IHJldi1wYXJzZSBmaXJzdF57dHJlZX0gPmV4cGVjdGVkICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mciBzdWJkaXIgJiYKKwlta2RpciBzdWJkaXIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tbnVtYmVyZWQtZmlsZXMgLW8gc3ViZGlyIC0xIGZpcnN0ICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGFtIDEKKwkpICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSBuZXdsaW5lIGluIHN1YmplY3QnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisJdGVzdF90aWNrICYmCisJc2VkIC1lICJzL3NlY29uZC9zZWNvbmQgXFxcbiBmb28vIiBwYXRjaDEgPnBhdGNobmwgJiYKKwlnaXQgYW0gPHBhdGNobmwgPm91dHB1dC5vdXQgMj4mMSAmJgorCXRlc3RfaTE4bmdyZXAgIl5BcHBseWluZzogc2Vjb25kIFxcXG4gZm9vJCIgb3V0cHV0Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtcSBpcyBxdWlldCcgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYW0gLXEgPHBhdGNoMSA+b3V0cHV0Lm91dCAyPiYxICYmCisJISB0ZXN0IC1zIG91dHB1dC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gZW1wdHktZmlsZSBkb2VzIG5vdCBpbmZsb29wJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRvdWNoIGVtcHR5LWZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gZW1wdHktZmlsZSAyPmFjdHVhbCAmJgorCWVjaG8gUGF0Y2ggZm9ybWF0IGRldGVjdGlvbiBmYWlsZWQuID5leHBlY3RlZCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1tZXNzYWdlLWlkIHJlYWxseSBhZGRzIHRoZSBtZXNzYWdlIGlkJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBhbSAtLW1lc3NhZ2UtaWQgcGF0Y2gxLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgdGFpbCAtbjEgPmFjdHVhbCAmJgorCWdyZXAgTWVzc2FnZS1JZCBwYXRjaDEuZW1sID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbS5tZXNzYWdlaWQgcmVhbGx5IGFkZHMgdGhlIG1lc3NhZ2UgaWQnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJdGVzdF9jb25maWcgYW0ubWVzc2FnZWlkIHRydWUgJiYKKwlnaXQgYW0gcGF0Y2gxLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgdGFpbCAtbjEgPmFjdHVhbCAmJgorCWdyZXAgTWVzc2FnZS1JZCBwYXRjaDEuZW1sID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtLW1lc3NhZ2UtaWQgLXMgc2lnbnMgb2ZmIGFmdGVyIHRoZSBtZXNzYWdlIGlkJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCWdpdCBhbSAtcyAtLW1lc3NhZ2UtaWQgcGF0Y2gxLmVtbCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgdGFpbCAtbjIgfCBoZWFkIC1uMSA+YWN0dWFsICYmCisJZ3JlcCBNZXNzYWdlLUlkIHBhdGNoMS5lbWwgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIHdvcmtzIHdpdGggcmVyZXJlJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJIyBtYWtlIHBhdGNoZXMgb25lLT50d28gYW5kIHR3by0+dGhyZWUuLi4KKwl0ZXN0X2NvbW1pdCBvbmUgZmlsZSAmJgorCXRlc3RfY29tbWl0IHR3byBmaWxlICYmCisJdGVzdF9jb21taXQgdGhyZWUgZmlsZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTIgLS1zdGRvdXQgPnNlcS5wYXRjaCAmJgorCisJIyBhbmQgY3JlYXRlIGEgc2l0dWF0aW9uIHRoYXQgY29uZmxpY3RzLi4uCisJZ2l0IHJlc2V0IC0taGFyZCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCBvdGhlciBmaWxlICYmCisKKwkjIGVuYWJsZSByZXJlcmUuLi4KKwl0ZXN0X2NvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgLmdpdC9yci1jYWNoZSIgJiYKKworCSMgLi4uYW5kIGFwcGx5LiBPdXIgcmVzb2x1dGlvbiBpcyB0byBza2lwIHRoZSBmaXJzdAorCSMgcGF0Y2gsIGFuZCB0aGUgcmVyZXJlIHRoZSBzZWNvbmQgb25lLgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyBzZXEucGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1za2lwICYmCisJZWNobyByZXNvbHZlZCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBhbSAtLXJlc29sdmVkICYmCisKKwkjIG5vdyBhcHBseSBhZ2FpbiwgYW5kIGNvbmZpcm0gdGhhdCByZXJlcmUgZW5nYWdlZCAod2Ugc3RpbGwKKwkjIGV4cGVjdCBmYWlsdXJlIGZyb20gYW0gYmVjYXVzZSByZXJlcmUgZG9lcyBub3QgYXV0by1jb21taXQKKwkjIGZvciB1cykuCisJZ2l0IHJlc2V0IC0taGFyZCBvdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyBzZXEucGF0Y2ggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1za2lwICYmCisJZWNobyByZXNvbHZlZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLXMgdW5leHBlY3RlZCB0cmFpbGVyIGJsb2NrJyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gc2lnbmVkID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJY2F0ID5tc2cgPDwtRU9GICYmCisJc3ViamVjdCBoZXJlCisKKwlTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4KKwlbamM6IHR3ZWFrZWQgbG9nIG1lc3NhZ2VdCisJU2lnbmVkLW9mZi1ieTogSiBDIEggPGpAYy5oPgorCUVPRgorCWdpdCBjb21taXQgLUYgbXNnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICcxLC9eJC9kJyA+b3JpZ2luYWwgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xID5wYXRjaCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWdpdCBhbSAtcyBwYXRjaCAmJgorCSgKKwkJY2F0IG9yaWdpbmFsICYmCisJCWVjaG8gIlNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiIKKwkpID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgJzEsL14kL2QnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwljYXQgPm1zZyA8PC1cRU9GICYmCisJc3ViamVjdCBoZXJlCisKKwlXZSBtYWtlIHN1cmUgdGhhdCB0aGVyZSBpcyBhIGJsYW5rIGxpbmUgYmV0d2VlbiB0aGUgbG9nCisJbWVzc2FnZSBwcm9wZXIgYW5kIFNpZ25lZC1vZmYtYnk6IGxpbmUgYWRkZWQuCisJRU9GCisJZ2l0IHJlc2V0IEhFQUReICYmCisJZ2l0IGNvbW1pdCAtRiBtc2cgZmlsZSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAnMSwvXiQvZCcgPm9yaWdpbmFsICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+cGF0Y2ggJiYKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgYW0gLXMgcGF0Y2ggJiYKKworCSgKKwkJY2F0IG9yaWdpbmFsICYmCisJCWVjaG8gJiYKKwkJZWNobyAiU2lnbmVkLW9mZi1ieTogJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+IgorCSkgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAnMSwvXiQvZCcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTUxLWFtLWFib3J0LnNoIGIvdC90NDE1MS1hbS1hYm9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYTVhY2U5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDE1MS1hbS1hYm9ydC5zaApAQCAtMCwwICsxLDE5NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FtIC0tYWJvcnQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiBhIGIgYyBkIGUgZiBnCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPmZpbGUtMSAmJgorCWNwIGZpbGUtMSBmaWxlLTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgYWRkIGZpbGUtMSBmaWxlLTIgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0tcm9vdCBpbml0aWFsID5pbml0aWFsLnBhdGNoICYmCisJZm9yIGkgaW4gMiAzIDQgNSA2CisJZG8KKwkJZWNobyAkaSA+PmZpbGUtMSAmJgorCQllY2hvICRpID5vdGhlcmZpbGUtJGkgJiYKKwkJZ2l0IGFkZCBvdGhlcmZpbGUtJGkgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gJGkgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLW5vLW51bWJlcmVkIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBpbml0aWFsICYmCisJZWNobyBsb2NhbCBjaGFuZ2UgPmZpbGUtMi1leHBlY3QKKycKKworZm9yIHdpdGgzIGluICcnICcgLTMnCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFtJHdpdGgzIHN0b3BzIGF0IGEgcGF0Y2ggdGhhdCBkb2VzIG5vdCBhcHBseSIgJworCisJCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCQljcCBmaWxlLTItZXhwZWN0IGZpbGUtMiAmJgorCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSR3aXRoMyAwMDBbMTI0NV0tKi5wYXRjaCAmJgorCQlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCQlmb3IgaSBpbiAzIDIgaW5pdGlhbAorCQlkbworCQkJZWNobyAkaQorCQlkb25lID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFtJHdpdGgzIC0tc2tpcCBjb250aW51ZSBhZnRlciBmYWlsZWQgYW0kd2l0aDMiICcKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtJHdpdGgzIC0tc2tpcCA+b3V0cHV0ICYmCisJCXRlc3RfaTE4bmdyZXAgIl5BcHBseWluZyIgb3V0cHV0ID5vdXRwdXQuYXBwbHlpbmcgJiYKKwkJdGVzdF9pMThuZ3JlcCAiXkFwcGx5aW5nOiA2JCIgb3V0cHV0LmFwcGx5aW5nICYmCisJCXRlc3RfaTE4bmNtcCBmaWxlLTItZXhwZWN0IGZpbGUtMiAmJgorCQl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9SUgorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFtIC0tYWJvcnQgZ29lcyBiYWNrIGFmdGVyIGZhaWxlZCBhbSR3aXRoMyIgJworCQlnaXQgYW0gLS1hYm9ydCAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCQlnaXQgcmV2LXBhcnNlIGluaXRpYWwgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfY21wIGZpbGUtMi1leHBlY3QgZmlsZS0yICYmCisJCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIC0tY2FjaGVkIEhFQUQgJiYKKwkJdGVzdCAhIC1mIC5naXQvTUVSR0VfUlIKKwknCisKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgLS1za2lwIHJlbW92ZXMgb3RoZXJmaWxlLTQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLTMgMDAwMy0qLnBhdGNoICYmCisJdGVzdCAzIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgNCA9ICIkKGNhdCBvdGhlcmZpbGUtNCkiICYmCisJZ2l0IGFtIC0tc2tpcCAmJgorCXRlc3RfY21wX3JldiBpbml0aWFsIEhFQUQgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgb3RoZXJmaWxlLTQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgLS1hYm9ydCByZW1vdmVzIG90aGVyZmlsZS00JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0zIDAwMDMtKi5wYXRjaCAmJgorCXRlc3QgMyAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDQgPSAiJChjYXQgb3RoZXJmaWxlLTQpIiAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRCAmJgorCXRlc3QgLXogJChnaXQgbHMtZmlsZXMgLXUpICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgb3RoZXJmaWxlLTQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1hYm9ydCB3aWxsIGtlZXAgdGhlIGxvY2FsIGNvbW1pdHMgaW50YWN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDAwMDQtKi5wYXRjaCAmJgorCXRlc3RfY29tbWl0IHVucmVsYXRlZCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IGFtIC0tYWJvcnQgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLS1hYm9ydCB3aWxsIGtlZXAgZGlydHkgaW5kZXggaW50YWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZWNobyBkaXJ0eWZpbGUgPmRpcnR5ZmlsZSAmJgorCWNwIGRpcnR5ZmlsZSBkaXJ0eWZpbGUuZXhwZWN0ZWQgJiYKKwlnaXQgYWRkIGRpcnR5ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAwMDAxLSoucGF0Y2ggJiYKKwl0ZXN0X2NtcF9yZXYgaW5pdGlhbCBIRUFEICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZGlydHlmaWxlICYmCisJdGVzdF9jbXAgZGlydHlmaWxlLmV4cGVjdGVkIGRpcnR5ZmlsZSAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJdGVzdF9jbXBfcmV2IGluaXRpYWwgSEVBRCAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRpcnR5ZmlsZSAmJgorCXRlc3RfY21wIGRpcnR5ZmlsZS5leHBlY3RlZCBkaXJ0eWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgc3RvcHMgb24gY29uZmxpY3Qgb24gdW5ib3JuIGJyYW5jaCcgJworCWdpdCBjaGVja291dCAtZiAtLW9ycGhhbiBvcnBoYW4gJiYKKwlnaXQgcmVzZXQgJiYKKwlybSAtZiBvdGhlcmZpbGUtNCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyAwMDAzLSoucGF0Y2ggJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCA0ID0gIiQoY2F0IG90aGVyZmlsZS00KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gLTMgLS1za2lwIGNsZWFycyBpbmRleCBvbiB1bmJvcm4gYnJhbmNoJyAnCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWVjaG8gdG1wZmlsZSA+dG1wZmlsZSAmJgorCWdpdCBhZGQgdG1wZmlsZSAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcykiICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgb3RoZXJmaWxlLTQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0bXBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0zIC0tYWJvcnQgcmVtb3ZlcyBvdGhlcmZpbGUtNCBvbiB1bmJvcm4gYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1mIC0tb3JwaGFuIG9ycGhhbiAmJgorCWdpdCByZXNldCAmJgorCXJtIC1mIG90aGVyZmlsZS00IGZpbGUtMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyAwMDAzLSoucGF0Y2ggJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCA0ID0gIiQoY2F0IG90aGVyZmlsZS00KSIgJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBvdGhlcmZpbGUtNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSAtMyAtLWFib3J0IG9uIHVuYm9ybiBicmFuY2ggcmVtb3ZlcyBhcHBsaWVkIGNvbW1pdHMnICcKKwlnaXQgY2hlY2tvdXQgLWYgLS1vcnBoYW4gb3JwaGFuICYmCisJZ2l0IHJlc2V0ICYmCisJcm0gLWYgb3RoZXJmaWxlLTQgb3RoZXJmaWxlLTIgZmlsZS0xIGZpbGUtMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtMyBpbml0aWFsLnBhdGNoIDAwMDMtKi5wYXRjaCAmJgorCXRlc3QgMyAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDQgPSAiJChjYXQgb3RoZXJmaWxlLTQpIiAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIG90aGVyZmlsZS00ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZS0xICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZS0yICYmCisJdGVzdCAwIC1lcSAkKGdpdCBsb2cgLS1vbmVsaW5lIDI+L2Rldi9udWxsIHwgd2MgLWwpICYmCisJdGVzdCByZWZzL2hlYWRzL29ycGhhbiA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tYWJvcnQgb24gdW5ib3JuIGJyYW5jaCB3aWxsIGtlZXAgbG9jYWwgY29tbWl0cyBpbnRhY3QnICcKKwlnaXQgY2hlY2tvdXQgLWYgLS1vcnBoYW4gb3JwaGFuICYmCisJZ2l0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDAwMDQtKi5wYXRjaCAmJgorCXRlc3RfY29tbWl0IHVucmVsYXRlZDIgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmV4cGVjdCAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tc2tpcCBsZWF2ZXMgaW5kZXggc3RhdCBpbmZvIGFsb25lJyAnCisJZ2l0IGNoZWNrb3V0IC1mIC0tb3JwaGFuIHNraXAtc3RhdC1pbmZvICYmCisJZ2l0IHJlc2V0ICYmCisJdGVzdF9jb21taXQgc2tpcC1zaG91bGQtYmUtdW50b3VjaGVkICYmCisJdGVzdC1jaG10aW1lID0wIHNraXAtc2hvdWxkLWJlLXVudG91Y2hlZC50ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIDAwMDEtKi5wYXRjaCAmJgorCWdpdCBhbSAtLXNraXAgJiYKKwlnaXQgZGlmZi1maWxlcyAtLWV4aXQtY29kZSAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tYWJvcnQgbGVhdmVzIGluZGV4IHN0YXQgaW5mbyBhbG9uZScgJworCWdpdCBjaGVja291dCAtZiAtLW9ycGhhbiBhYm9ydC1zdGF0LWluZm8gJiYKKwlnaXQgcmVzZXQgJiYKKwl0ZXN0X2NvbW1pdCBhYm9ydC1zaG91bGQtYmUtdW50b3VjaGVkICYmCisJdGVzdC1jaG10aW1lID0wIGFib3J0LXNob3VsZC1iZS11bnRvdWNoZWQudCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAwMDAxLSoucGF0Y2ggJiYKKwlnaXQgYW0gLS1hYm9ydCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlIC0tcXVpZXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MTUyLWFtLXN1YmplY3RzLnNoIGIvdC90NDE1Mi1hbS1zdWJqZWN0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40YzY4MjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDE1Mi1hbS1zdWJqZWN0cy5zaApAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzdWJqZWN0IHByZXNlcnZhdGlvbiB3aXRoIGZvcm1hdC1wYXRjaCB8IGFtJworLiAuL3Rlc3QtbGliLnNoCisKK21ha2VfcGF0Y2hlcygpIHsKKwl0eXBlPSQxCisJc3ViamVjdD0kMgorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSBwYXRjaGVzIHdpdGggJHR5cGUgc3ViamVjdCIgJworCQlnaXQgcmVzZXQgLS1oYXJkIGJhc2VsaW5lICYmCisJCWVjaG8gJHR5cGUgPmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiJHN1YmplY3QiICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgPiR0eXBlLnBhdGNoICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLWsgPiR0eXBlLWsucGF0Y2gKKwknCit9CisKK2NoZWNrX3N1YmplY3QoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlbGluZSAmJgorCWdpdCBhbSAkMiAkMS5wYXRjaCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVCID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhc2VsaW5lIGNvbW1pdCcgJworCXRlc3RfY29tbWl0IGJhc2VsaW5lIGZpbGUKKycKKworU0hPUlRfU1VCSkVDVD0nc2hvcnQgc3ViamVjdCcKK21ha2VfcGF0Y2hlcyBzaG9ydCAiJFNIT1JUX1NVQkpFQ1QiCisKK0xPTkdfU1VCSkVDVDE9J3RoaXMgaXMgYSBsb25nIHN1YmplY3QgdGhhdCBpcyB2aXJ0dWFsbHkgZ3VhcmFudGVlZCcKK0xPTkdfU1VCSkVDVDI9J3RvIHJlcXVpcmUgd3JhcHBpbmcgdmlhIGZvcm1hdC1wYXRjaCBpZiBpdCBpcyBhbGwnCitMT05HX1NVQkpFQ1QzPSdnb2luZyB0byBhcHBlYXIgb24gYSBzaW5nbGUgbGluZScKK0xPTkdfU1VCSkVDVD0iJExPTkdfU1VCSkVDVDEgJExPTkdfU1VCSkVDVDIgJExPTkdfU1VCSkVDVDMiCittYWtlX3BhdGNoZXMgbG9uZyAiJExPTkdfU1VCSkVDVCIKKworTVVMVElMSU5FX1NVQkpFQ1Q9IiRMT05HX1NVQkpFQ1QxCiskTE9OR19TVUJKRUNUMgorJExPTkdfU1VCSkVDVDMiCittYWtlX3BhdGNoZXMgbXVsdGlsaW5lICIkTVVMVElMSU5FX1NVQkpFQ1QiCisKK2VjaG8gIiRTSE9SVF9TVUJKRUNUIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydCBzdWJqZWN0IHByZXNlcnZlZCAoZm9ybWF0LXBhdGNoIHwgYW0pJyAnCisJY2hlY2tfc3ViamVjdCBzaG9ydAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgc3ViamVjdCBwcmVzZXJ2ZWQgKGZvcm1hdC1wYXRjaCAtayB8IGFtKScgJworCWNoZWNrX3N1YmplY3Qgc2hvcnQtaworJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgc3ViamVjdCBwcmVzZXJ2ZWQgKGZvcm1hdC1wYXRjaCAtayB8IGFtIC1rKScgJworCWNoZWNrX3N1YmplY3Qgc2hvcnQtayAtaworJworCitlY2hvICIkTE9OR19TVUJKRUNUIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb25nIHN1YmplY3QgcHJlc2VydmVkIChmb3JtYXQtcGF0Y2ggfCBhbSknICcKKwljaGVja19zdWJqZWN0IGxvbmcKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvbmcgc3ViamVjdCBwcmVzZXJ2ZWQgKGZvcm1hdC1wYXRjaCAtayB8IGFtKScgJworCWNoZWNrX3N1YmplY3QgbG9uZy1rCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb25nIHN1YmplY3QgcHJlc2VydmVkIChmb3JtYXQtcGF0Y2ggLWsgfCBhbSAtayknICcKKwljaGVja19zdWJqZWN0IGxvbmctayAtaworJworCitlY2hvICIkTE9OR19TVUJKRUNUIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aWxpbmUgc3ViamVjdCB1bndyYXBwZWQgKGZvcm1hdC1wYXRjaCB8IGFtKScgJworCWNoZWNrX3N1YmplY3QgbXVsdGlsaW5lCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aWxpbmUgc3ViamVjdCB1bndyYXBwZWQgKGZvcm1hdC1wYXRjaCAtayB8IGFtKScgJworCWNoZWNrX3N1YmplY3QgbXVsdGlsaW5lLWsKKycKK2VjaG8gIiRNVUxUSUxJTkVfU1VCSkVDVCIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlsaW5lIHN1YmplY3QgcHJlc2VydmVkIChmb3JtYXQtcGF0Y2ggLWsgfCBhbSAtayknICcKKwljaGVja19zdWJqZWN0IG11bHRpbGluZS1rIC1rCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDE1My1hbS1yZXN1bWUtb3ZlcnJpZGUtb3B0cy5zaCBiL3QvdDQxNTMtYW0tcmVzdW1lLW92ZXJyaWRlLW9wdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2MwMTNkOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQxNTMtYW0tcmVzdW1lLW92ZXJyaWRlLW9wdHMuc2gKQEAgLTAsMCArMSwxMDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtYW0gY29tbWFuZC1saW5lIG9wdGlvbnMgb3ZlcnJpZGUgc2F2ZWQgb3B0aW9ucycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCitmb3JtYXRfcGF0Y2ggKCkgeworCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgIiQxIiA+IiQxIi5lbWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGZpbGUgJiYKKwl0ZXN0X2NvbW1pdCBmaXJzdCBmaWxlICYmCisKKwlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCWdpdCBtdiBmaWxlIGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWVkLWZpbGUgJiYKKwlnaXQgdGFnIHJlbmFtZWQtZmlsZSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0IHNpZGUxIGZpbGUgJiYKKwl0ZXN0X2NvbW1pdCBzaWRlMiBmaWxlICYmCisKKwlmb3JtYXRfcGF0Y2ggc2lkZTEgJiYKKwlmb3JtYXRfcGF0Y2ggc2lkZTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJy0tM3dheSBvdmVycmlkZXMgLS1uby0zd2F5JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCByZW5hbWVkLWZpbGUgJiYKKworCSMgQXBwbHlpbmcgc2lkZTEgd2lsbCBmYWlsIGFzIHRoZSBmaWxlIGhhcyBiZWVuIHJlbmFtZWQuCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tbm8tM3dheSBzaWRlWzEyXS5lbWwgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdF9jbXBfcmV2IHJlbmFtZWQtZmlsZSBIRUFEICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCisJIyBBcHBseWluZyBzaWRlMSB3aXRoIGFtIC0tM3dheSB3aWxsIHN1Y2NlZWQgZHVlIHRvIHRoZSB0aHJlZXdheS1tZXJnZS4KKwkjIEFwcGx5aW5nIHNpZGUyIHdpbGwgZmFpbCBhcyAtLTN3YXkgZG9lcyBub3QgYXBwbHkgdG8gaXQuCisJdGVzdF9tdXN0X2ZhaWwgdGVzdF90ZXJtaW5hbCBnaXQgYW0gLS0zd2F5IDwvZGV2L3plcm8gJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJdGVzdCBzaWRlMSA9ICIkKGNhdCBmaWxlMikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tcXVpZXQgb3ZlcnJpZGVzIC0tcXVpZXQnICcKKwlybSAtZnIgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGZpcnN0ICYmCisKKwkjIEFwcGx5aW5nIHNpZGUxIHdpbGwgYmUgcXVpZXQuCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tcXVpZXQgc2lkZVsxMjNdLmVtbCA+b3V0ICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCSEgdGVzdF9pMThuZ3JlcCAiXkFwcGx5aW5nOiAiIG91dCAmJgorCWVjaG8gc2lkZTEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKworCSMgQXBwbHlpbmcgc2lkZTEgd2lsbCBub3QgYmUgcXVpZXQuCisJIyBBcHBseWluZyBzaWRlMiB3aWxsIGJlIHF1aWV0LgorCWdpdCBhbSAtLW5vLXF1aWV0IC0tY29udGludWUgPm91dCAmJgorCWVjaG8gIkFwcGx5aW5nOiBzaWRlMSIgPmV4cGVjdGVkICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpZ25vZmYgb3ZlcnJpZGVzIC0tbm8tc2lnbm9mZicgJworCXJtIC1mciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgZmlyc3QgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLW5vLXNpZ25vZmYgc2lkZVsxMl0uZW1sICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWVjaG8gc2lkZTEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgYW0gLS1zaWdub2ZmIC0tY29udGludWUgJiYKKworCSMgQXBwbGllZCBzaWRlMSB3aWxsIGJlIHNpZ25lZCBvZmYKKwllY2hvICJTaWduZWQtb2ZmLWJ5OiAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4iID5leHBlY3RlZCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRF4gfCBncmVwICJTaWduZWQtb2ZmLWJ5OiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCisJIyBBcHBsaWVkIHNpZGUyIHdpbGwgbm90IGJlIHNpZ25lZCBvZmYKKwl0ZXN0ICQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCAtYyAiU2lnbmVkLW9mZi1ieToiKSAtZXEgMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnLS1yZWplY3Qgb3ZlcnJpZGVzIC0tbm8tcmVqZWN0JyAnCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBmaXJzdCAmJgorCXJtIC1mIGZpbGUucmVqICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1uby1yZWplY3Qgc2lkZTEuZW1sICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUucmVqICYmCisKKwl0ZXN0X211c3RfZmFpbCB0ZXN0X3Rlcm1pbmFsIGdpdCBhbSAtLXJlamVjdCA8L2Rldi96ZXJvICYmCisJdGVzdF9wYXRoX2lzX2RpciAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGZpbGUucmVqCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwMC1yZXJlcmUuc2ggYi90L3Q0MjAwLXJlcmVyZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZDljOTFlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwMC1yZXJlcmUuc2gKQEAgLTAsMCArMSwzOTQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmVyZXJlCisKKyEgW2ZpZnRoXSB2ZXJzaW9uMQorICEgW2ZpcnN0XSBmaXJzdAorICAhIFtmb3VydGhdIHZlcnNpb24xCisgICAhIFttYXN0ZXJdIGluaXRpYWwKKyAgICAhIFtzZWNvbmRdIHByZWZlciBmaXJzdCBvdmVyIHNlY29uZAorICAgICAhIFt0aGlyZF0gdmVyc2lvbjIKKy0tLS0tLQorICAgICArIFt0aGlyZF0gdmVyc2lvbjIKKysgICAgICBbZmlmdGhdIHZlcnNpb24xCisgICsgICAgW2ZvdXJ0aF0gdmVyc2lvbjEKKysgKyAgKyBbdGhpcmReXSB0aGlyZAorICAgIC0gIFtzZWNvbmRdIHByZWZlciBmaXJzdCBvdmVyIHNlY29uZAorICsgICsgIFtmaXJzdF0gZmlyc3QKKyAgICArICBbc2Vjb25kXl0gc2Vjb25kCisrKysrKysgW21hc3Rlcl0gaW5pdGlhbAorJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwljYXQgPmExIDw8LVxFT0YgJiYKKwlTb21lIHRpdGxlCisJPT09PT09PT09PQorCVdoZXRoZXIgJ1wnJ3RpcyBub2JsZXIgaW4gdGhlIG1pbmQgdG8gc3VmZmVyCisJVGhlIHNsaW5ncyBhbmQgYXJyb3dzIG9mIG91dHJhZ2VvdXMgZm9ydHVuZSwKKwlPciB0byB0YWtlIGFybXMgYWdhaW5zdCBhIHNlYSBvZiB0cm91YmxlcywKKwlBbmQgYnkgb3Bwb3NpbmcgZW5kIHRoZW0/IFRvIGRpZTogdG8gc2xlZXA7CisJTm8gbW9yZTsgYW5kIGJ5IGEgc2xlZXAgdG8gc2F5IHdlIGVuZAorCVRoZSBoZWFydC1hY2hlIGFuZCB0aGUgdGhvdXNhbmQgbmF0dXJhbCBzaG9ja3MKKwlUaGF0IGZsZXNoIGlzIGhlaXIgdG8sICdcJyd0aXMgYSBjb25zdW1tYXRpb24KKwlEZXZvdXRseSB0byBiZSB3aXNoJ1wnJ2QuCisJRU9GCisKKwlnaXQgYWRkIGExICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSBpbml0aWFsICYmCisKKwljYXQgPj5hMSA8PC1cRU9GICYmCisJU29tZSB0aXRsZQorCT09PT09PT09PT0KKwlUbyBkaWUsIHRvIHNsZWVwOworCVRvIHNsZWVwOiBwZXJjaGFuY2UgdG8gZHJlYW06IGF5LCB0aGVyZSdcJydzIHRoZSBydWI7CisJRm9yIGluIHRoYXQgc2xlZXAgb2YgZGVhdGggd2hhdCBkcmVhbXMgbWF5IGNvbWUKKwlXaGVuIHdlIGhhdmUgc2h1ZmZsZWQgb2ZmIHRoaXMgbW9ydGFsIGNvaWwsCisJTXVzdCBnaXZlIHVzIHBhdXNlOiB0aGVyZSdcJydzIHRoZSByZXNwZWN0CisJVGhhdCBtYWtlcyBjYWxhbWl0eSBvZiBzbyBsb25nIGxpZmU7CisJRU9GCisKKwlnaXQgY2hlY2tvdXQgLWIgZmlyc3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIGZpcnN0ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kIG1hc3RlciAmJgorCWdpdCBzaG93IGZpcnN0OmExIHwKKwlzZWQgLWUgInMvVG8gZGllLCB0L1RvIGRpZSEgVC8iIC1lICJzL1NvbWUgdGl0bGUvU29tZSBUaXRsZS8iID5hMSAmJgorCWVjaG8gIiogRU5EICoiID4+YTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1xIC1hIC1tIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RoaW5nIHJlY29yZGVkIHdpdGhvdXQgcmVyZXJlJyAnCisJcm0gLXJmIC5naXQvcnItY2FjaGUgJiYKKwlnaXQgY29uZmlnIHJlcmVyZS5lbmFibGVkIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpcnN0ICYmCisJISB0ZXN0IC1kIC5naXQvcnItY2FjaGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWN0aXZhdGUgcmVyZXJlLCBvbGQgc3R5bGUgKGNvbmZsaWN0aW5nIG1lcmdlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlta2RpciAuZ2l0L3JyLWNhY2hlICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCByZXJlcmUuZW5hYmxlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaXJzdCAmJgorCisJc2hhMT0kKHBlcmwgLXBlICJzLwkuKi8vIiAuZ2l0L01FUkdFX1JSKSAmJgorCXJyPS5naXQvcnItY2FjaGUvJHNoYTEgJiYKKwlncmVwICJePT09PT09PVwkIiAkcnIvcHJlaW1hZ2UgJiYKKwkhIHRlc3QgLWYgJHJyL3Bvc3RpbWFnZSAmJgorCSEgdGVzdCAtZiAkcnIvdGhpc2ltYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcmVyZS5lbmFibGVkIHdvcmtzLCB0b28nICcKKwlybSAtcmYgLmdpdC9yci1jYWNoZSAmJgorCWdpdCBjb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlyc3QgJiYKKworCXNoYTE9JChwZXJsIC1wZSAicy8JLiovLyIgLmdpdC9NRVJHRV9SUikgJiYKKwlycj0uZ2l0L3JyLWNhY2hlLyRzaGExICYmCisJZ3JlcCBePT09PT09PSQgJHJyL3ByZWltYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCByci1jYWNoZScgJworCXJtIC1yZiAuZ2l0L3JyLWNhY2hlICYmCisJZ2l0IGNvbmZpZyByZXJlcmUuZW5hYmxlZCB0cnVlICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmaXJzdCAmJgorCXNoYTE9JChwZXJsIC1wZSAicy8JLiovLyIgLmdpdC9NRVJHRV9SUikgJiYKKwlycj0uZ2l0L3JyLWNhY2hlLyRzaGExCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JyLWNhY2hlIGxvb2tzIHNhbmUnICcKKwkjIG5vIHBvc3RpbWFnZSBvciB0aGlzaW1hZ2UgeWV0CisJISB0ZXN0IC1mICRyci9wb3N0aW1hZ2UgJiYKKwkhIHRlc3QgLWYgJHJyL3RoaXNpbWFnZSAmJgorCisJIyBwcmVpbWFnZSBoYXMgcmlnaHQgbnVtYmVyIG9mIGxpbmVzCisJY250PSQoc2VkIC1uZSAiL148PDw8PDw8LywvXj4+Pj4+Pj4vcCIgJHJyL3ByZWltYWdlIHwgd2MgLWwpICYmCisJZWNobyAkY250ICYmCisJdGVzdCAkY250ID0gMTMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGRpZmYnICcKKwlnaXQgc2hvdyBmaXJzdDphMSA+YTEgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJLS0tIGEvYTEKKwkrKysgYi9hMQorCUBAIC0xLDQgKzEsNCBAQAorCS1Tb21lIFRpdGxlCisJK1NvbWUgdGl0bGUKKwkgPT09PT09PT09PQorCSBXaGV0aGVyICdcJyd0aXMgbm9ibGVyIGluIHRoZSBtaW5kIHRvIHN1ZmZlcgorCSBUaGUgc2xpbmdzIGFuZCBhcnJvd3Mgb2Ygb3V0cmFnZW91cyBmb3J0dW5lLAorCUBAIC04LDIxICs4LDExIEBACisJIFRoZSBoZWFydC1hY2hlIGFuZCB0aGUgdGhvdXNhbmQgbmF0dXJhbCBzaG9ja3MKKwkgVGhhdCBmbGVzaCBpcyBoZWlyIHRvLCAnXCcndGlzIGEgY29uc3VtbWF0aW9uCisJIERldm91dGx5IHRvIGJlIHdpc2gnXCcnZC4KKwktPDw8PDw8PAorCS1Tb21lIFRpdGxlCisJLT09PT09PT09PT0KKwktVG8gZGllISBUbyBzbGVlcDsKKwktPT09PT09PQorCSBTb21lIHRpdGxlCisJID09PT09PT09PT0KKwkgVG8gZGllLCB0byBzbGVlcDsKKwktPj4+Pj4+PgorCSBUbyBzbGVlcDogcGVyY2hhbmNlIHRvIGRyZWFtOiBheSwgdGhlcmUnXCcncyB0aGUgcnViOworCSBGb3IgaW4gdGhhdCBzbGVlcCBvZiBkZWF0aCB3aGF0IGRyZWFtcyBtYXkgY29tZQorCSBXaGVuIHdlIGhhdmUgc2h1ZmZsZWQgb2ZmIHRoaXMgbW9ydGFsIGNvaWwsCisJIE11c3QgZ2l2ZSB1cyBwYXVzZTogdGhlcmUnXCcncyB0aGUgcmVzcGVjdAorCSBUaGF0IG1ha2VzIGNhbGFtaXR5IG9mIHNvIGxvbmcgbGlmZTsKKwktPDw8PDw8PAorCS09PT09PT09CisJLSogRU5EICoKKwktPj4+Pj4+PgorCUVPRgorCWdpdCByZXJlcmUgZGlmZiA+b3V0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgc3RhdHVzJyAnCisJZWNobyBhMSA+ZXhwZWN0ICYmCisJZ2l0IHJlcmVyZSBzdGF0dXMgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlyc3QgcG9zdGltYWdlIHdpbnMnICcKKwlnaXQgc2hvdyBmaXJzdDphMSB8IHNlZCAicy9UbyBkaWU6IHQvVG8gZGllISBULyIgPmV4cGVjdCAmJgorCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSAicHJlZmVyIGZpcnN0IG92ZXIgc2Vjb25kIiAmJgorCXRlc3QgLWYgJHJyL3Bvc3RpbWFnZSAmJgorCisJb2xkbXRpbWVwb3N0PSQodGVzdC1jaG10aW1lIC12IC02MCAkcnIvcG9zdGltYWdlIHwgY3V0IC1mIDEpICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdGhpcmQgbWFzdGVyICYmCisJZ2l0IHNob3cgc2Vjb25kXjphMSB8IHNlZCAicy9UbyBkaWU6IHQvVG8gZGllISBULyIgPmExICYmCisJZ2l0IGNvbW1pdCAtcSAtYSAtbSB0aGlyZCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpcnN0ICYmCisJIyByZXJlcmUga2lja2VkIGluCisJISBncmVwICJePT09PT09PVwkIiBhMSAmJgorCXRlc3RfY21wIGV4cGVjdCBhMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgdXBkYXRlcyBwb3N0aW1hZ2UgdGltZXN0YW1wJyAnCisJbmV3bXRpbWVwb3N0PSQodGVzdC1jaG10aW1lIC12ICswICRyci9wb3N0aW1hZ2UgfCBjdXQgLWYgMSkgJiYKKwl0ZXN0ICRvbGRtdGltZXBvc3QgLWx0ICRuZXdtdGltZXBvc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVyZXJlIGNsZWFyJyAnCisJcm0gJHJyL3Bvc3RpbWFnZSAmJgorCWVjaG8gIiRzaGExCWExIiB8IHBlcmwgLXBlICJ5L1wwMTIvXDAwMC8iID4uZ2l0L01FUkdFX1JSICYmCisJZ2l0IHJlcmVyZSBjbGVhciAmJgorCSEgdGVzdCAtZCAkcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZvciBnYXJiYWdlIGNvbGxlY3Rpb24gdGVzdHMnICcKKwlta2RpciAtcCAkcnIgJiYKKwllY2hvIEhlbGxvID4kcnIvcHJlaW1hZ2UgJiYKKwllY2hvIFdvcmxkID4kcnIvcG9zdGltYWdlICYmCisKKwlzaGEyPTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgJiYKKwlycjI9LmdpdC9yci1jYWNoZS8kc2hhMiAmJgorCW1rZGlyICRycjIgJiYKKwllY2hvIEhlbGxvID4kcnIyL3ByZWltYWdlICYmCisKKwlhbG1vc3RfMTVfZGF5c19hZ289JCgoNjAtMTUqODY0MDApKSAmJgorCWp1c3Rfb3Zlcl8xNV9kYXlzX2Fnbz0kKCgtMS0xNSo4NjQwMCkpICYmCisJYWxtb3N0XzYwX2RheXNfYWdvPSQoKDYwLTYwKjg2NDAwKSkgJiYKKwlqdXN0X292ZXJfNjBfZGF5c19hZ289JCgoLTEtNjAqODY0MDApKSAmJgorCisJdGVzdC1jaG10aW1lID0kanVzdF9vdmVyXzYwX2RheXNfYWdvICRyci9wcmVpbWFnZSAmJgorCXRlc3QtY2htdGltZSA9JGFsbW9zdF82MF9kYXlzX2FnbyAkcnIvcG9zdGltYWdlICYmCisJdGVzdC1jaG10aW1lID0kYWxtb3N0XzE1X2RheXNfYWdvICRycjIvcHJlaW1hZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgcHJlc2VydmVzIHlvdW5nIG9yIHJlY2VudGx5IHVzZWQgcmVjb3JkcycgJworCWdpdCByZXJlcmUgZ2MgJiYKKwl0ZXN0IC1mICRyci9wcmVpbWFnZSAmJgorCXRlc3QgLWYgJHJyMi9wcmVpbWFnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbGQgcmVjb3JkcyByZXN0IGluIHBlYWNlJyAnCisJdGVzdC1jaG10aW1lID0kanVzdF9vdmVyXzYwX2RheXNfYWdvICRyci9wb3N0aW1hZ2UgJiYKKwl0ZXN0LWNobXRpbWUgPSRqdXN0X292ZXJfMTVfZGF5c19hZ28gJHJyMi9wcmVpbWFnZSAmJgorCWdpdCByZXJlcmUgZ2MgJiYKKwkhIHRlc3QgLWYgJHJyL3ByZWltYWdlICYmCisJISB0ZXN0IC1mICRycjIvcHJlaW1hZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGZpbGUyIGFkZGVkIGRpZmZlcmVudGx5IGluIHR3byBicmFuY2hlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKworCWdpdCBjaGVja291dCAtYiBmb3VydGggJiYKKwllY2hvIEhhbGxvID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24xICYmCisKKwlnaXQgY2hlY2tvdXQgdGhpcmQgJiYKKwllY2hvIEJlbGxvID5maWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24yICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZm91cnRoICYmCisJZWNobyBDZWxsbyA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSByZXNvbHV0aW9uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc29sdXRpb24gd2FzIHJlY29yZGVkIHByb3Blcmx5JyAnCisJZWNobyBDZWxsbyA+ZXhwZWN0ZWQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZpZnRoICYmCisKKwllY2hvIEhhbGxvID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24xICYmCisKKwlnaXQgY2hlY2tvdXQgdGhpcmQgJiYKKwllY2hvIEJlbGxvID5maWxlMyAmJgorCWdpdCBhZGQgZmlsZTMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHZlcnNpb24yICYmCisJZ2l0IHRhZyB2ZXJzaW9uMiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGZpZnRoICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZTMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUuYXV0b3VwZGF0ZScgJworCWdpdCBjb25maWcgcmVyZXJlLmF1dG91cGRhdGUgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZmlmdGggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtLXJlcmVyZS1hdXRvdXBkYXRlJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCByZXJlcmUuYXV0b3VwZGF0ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1yZXJlcmUtYXV0b3VwZGF0ZSBmaWZ0aCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tbm8tcmVyZXJlLWF1dG91cGRhdGUnICcKKwloZWFkYmxvYj0kKGdpdCByZXYtcGFyc2UgdmVyc2lvbjI6ZmlsZTMpICYmCisJbWVyZ2VibG9iPSQoZ2l0IHJldi1wYXJzZSBmaWZ0aDpmaWxlMykgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCTEwMDY0NCAkaGVhZGJsb2IgMglmaWxlMworCTEwMDY0NCAkbWVyZ2VibG9iIDMJZmlsZTMKKwlFT0YKKworCWdpdCBjb25maWcgcmVyZXJlLmF1dG91cGRhdGUgdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgdmVyc2lvbjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSBmaWZ0aCAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBhbiB1bnJlc29sdmVkIG1lcmdlJyAnCisJaGVhZGJsb2I9JChnaXQgcmV2LXBhcnNlIHZlcnNpb24yOmZpbGUzKSAmJgorCW1lcmdlYmxvYj0kKGdpdCByZXYtcGFyc2UgZmlmdGg6ZmlsZTMpICYmCisJY2F0ID5leHBlY3RlZC51bnJlc29sdmVkIDw8LUVPRiAmJgorCTEwMDY0NCAkaGVhZGJsb2IgMglmaWxlMworCTEwMDY0NCAkbWVyZ2VibG9iIDMJZmlsZTMKKwlFT0YKKworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgcmVyZXJlLmF1dG91cGRhdGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHZlcnNpb24yICYmCisJZmlmdGg9JChnaXQgcmV2LXBhcnNlIGZpZnRoKSAmJgorCWVjaG8gIiRmaWZ0aAkJYnJhbmNoICdmaWZ0aCcgb2YgLiIgfAorCWdpdCBmbXQtbWVyZ2UtbXNnID5tc2cgJiYKKwlhbmNlc3Rvcj0kKGdpdCBtZXJnZS1iYXNlIHZlcnNpb24yIGZpZnRoKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1yZWN1cnNpdmUgIiRhbmNlc3RvciIgLS0gSEVBRCBmaWZ0aCAmJgorCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgPmZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMgZmlsZTMuY29uZmxpY3QgJiYKKworCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQudW5yZXNvbHZlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcmVyZXJlJyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCByZXJlcmUuYXV0b3VwZGF0ZSAmJgorCWdpdCBybSAtZnIgLS1jYWNoZWQgLiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxmYWlsZWRtZXJnZSAmJgorCWNwIGZpbGUzLmNvbmZsaWN0IGZpbGUzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggLXEgJiYKKworCWdpdCByZXJlcmUgJiYKKwlnaXQgbHMtZmlsZXMgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnVucmVzb2x2ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGxpY2l0IHJlcmVyZSB3aXRoIGF1dG91cGRhdGUnICcKKwlnaXQgY29uZmlnIHJlcmVyZS5hdXRvdXBkYXRlIHRydWUgJiYKKwlnaXQgcm0gLWZyIC0tY2FjaGVkIC4gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8ZmFpbGVkbWVyZ2UgJiYKKwljcCBmaWxlMy5jb25mbGljdCBmaWxlMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoIC1xICYmCisKKwlnaXQgcmVyZXJlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgb3ZlcnJpZGVzJyAnCisJZ2l0IGNvbmZpZyByZXJlcmUuYXV0b3VwZGF0ZSBmYWxzZSAmJgorCWdpdCBybSAtZnIgLS1jYWNoZWQgLiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxmYWlsZWRtZXJnZSAmJgorCWNwIGZpbGUzLmNvbmZsaWN0IGZpbGUzICYmCisJZ2l0IHJlcmVyZSAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsMSAmJgorCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwlnaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwlnaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSAmJgorCWdpdCBscy1maWxlcyAtdSA+YWN0dWFsMiAmJgorCisJZ2l0IHJtIC1mciAtLWNhY2hlZCAuICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gPGZhaWxlZG1lcmdlICYmCisJY3AgZmlsZTMuY29uZmxpY3QgZmlsZTMgJiYKKwlnaXQgcmVyZXJlIC0tcmVyZXJlLWF1dG91cGRhdGUgLS1uby1yZXJlcmUtYXV0b3VwZGF0ZSAtLXJlcmVyZS1hdXRvdXBkYXRlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKworCXRlc3RfY21wIGV4cGVjdGVkLnVucmVzb2x2ZWQgYWN0dWFsMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnVucmVzb2x2ZWQgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgLS1uby1uby1yZXJlcmUtYXV0b3VwZGF0ZScgJworCWdpdCBybSAtZnIgLS1jYWNoZWQgLiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxmYWlsZWRtZXJnZSAmJgorCWNwIGZpbGUzLmNvbmZsaWN0IGZpbGUzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcmVyZSAtLW5vLW5vLXJlcmVyZS1hdXRvdXBkYXRlIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCBbVXVdc2FnZSBlcnIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXJlcmUgLWgnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVyZXJlIC1oID5oZWxwICYmCisJdGVzdF9pMThuZ3JlcCBbVXVdc2FnZSBoZWxwCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwMS1zaG9ydGxvZy5zaCBiL3QvdDQyMDEtc2hvcnRsb2cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzYwMGEzZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDEtc2hvcnRsb2cuc2gKQEAgLTAsMCArMSwxOTcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc2hvcnRsb2cKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyAxID5hMSAmJgorCWdpdCBhZGQgYTEgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0PSQocHJpbnRmICIlc1xuIiAiVGVzdCIgIiIgfCBnaXQgY29tbWl0LXRyZWUgIiR0cmVlIikgJiYKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICIkY29tbWl0IiAmJgorCisJZWNobyAyID5hMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiVGhpcyBpcyBhIHZlcnksIHZlcnkgbG9uZyBmaXJzdCBsaW5lIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gc2VlIGlmIGl0IGlzIHdyYXBwZWQgY29ycmVjdGx5IiBhMSAmJgorCisJIyB0ZXN0IGlmIHRoZSB3cmFwcGluZyBpcyBzdGlsbCB2YWxpZAorCSMgd2hlbiByZXBsYWNpbmcgYWxsIGlzIGJ5IHRyZWJsZSBjbGVmcy4KKwllY2hvIDMgPmExICYmCisJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICIkKAorCQllY2hvICJUaGlzIGlzIGEgdmVyeSwgdmVyeSBsb25nIGZpcnN0IGxpbmUgZm9yIHRoZSBjb21taXQgbWVzc2FnZSB0byBzZWUgaWYgaXQgaXMgd3JhcHBlZCBjb3JyZWN0bHkiIHwKKwkJc2VkICJzL2kvMTIzNC9nIiB8CisJCXRyIDEyMzQgIlwzNjBcMjM1XDIwNFwyMzYiKSIgYTEgJiYKKworCSMgbm93IGZzY2sgdXAgdGhlIHV0ZjgKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2Rpbmcgbm9uLXV0Zi04ICYmCisJZWNobyA0ID5hMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiJCgKKwkJZWNobyAiVGhpcyBpcyBhIHZlcnksIHZlcnkgbG9uZyBmaXJzdCBsaW5lIGZvciB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gc2VlIGlmIGl0IGlzIHdyYXBwZWQgY29ycmVjdGx5IiB8CisJCXNlZCAicy9pLzEyMzQvZyIgfAorCQl0ciAxMjM0ICJcMzcwXDIzNVwyMDRcMjM2IikiIGExICYmCisKKwllY2hvIDUgPmExICYmCisJZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICJhCQkJCQkJCQkxMgkzNAk1Ngk3OCIgYTEgJiYKKworCWVjaG8gNiA+YTEgJiYKKwlnaXQgY29tbWl0IC0tcXVpZXQgLW0gIkNvbW1pdCBieSBzb21lb25lIGVsc2UiIFwKKwkJLS1hdXRob3I9IlNvbWVvbmUgZWxzZSA8bm90IW1lPiIgYTEgJiYKKworCWNhdCA+ZXhwZWN0LnRlbXBsYXRlIDw8LVxFT0YKKwlBIFUgVGhvciAoNSk6CisJICAgICAgU1VCSkVDVAorCSAgICAgIFNVQkpFQ1QKKwkgICAgICBTVUJKRUNUCisJICAgICAgU1VCSkVDVAorCSAgICAgIFNVQkpFQ1QKKworCVNvbWVvbmUgZWxzZSAoMSk6CisJICAgICAgU1VCSkVDVAorCisJRU9GCisnCisKK2Z1enooKSB7CisJZmlsZT0kMSAmJgorCXNlZCAiCisJCQlzLyRfeDQwL09CSkVDVF9OQU1FL2cKKwkJCXMvJF94MDUvT0JKSUQvZworCQkJcy9eIFx7Nlx9W0NUYV0uKi8gICAgICBTVUJKRUNUL2cKKwkJCXMvXiBcezhcfVteIF0uKi8gICAgICAgIENPTlRJTlVBVElPTi9nCisJCSIgPCIkZmlsZSIgPiIkZmlsZS5mdXp6eSIgJiYKKwlzZWQgIi9DT05USU5VQVRJT04vIGQiIDwiJGZpbGUuZnV6enkiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgb3V0cHV0IGZvcm1hdCcgJworCWdpdCBzaG9ydGxvZyBIRUFEID5sb2cgJiYKKwlmdXp6IGxvZyA+bG9nLnByZWRpY3RhYmxlICYmCisJdGVzdF9jbXAgZXhwZWN0LnRlbXBsYXRlIGxvZy5wcmVkaWN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgZm9ybWF0JyAnCisJc2VkIHMvU1VCSkVDVC9PQkpFQ1RfTkFNRS8gZXhwZWN0LnRlbXBsYXRlID5leHBlY3QgJiYKKwlnaXQgc2hvcnRsb2cgLS1mb3JtYXQ9IiVIIiBIRUFEID5sb2cgJiYKKwlmdXp6IGxvZyA+bG9nLnByZWRpY3RhYmxlICYmCisJdGVzdF9jbXAgZXhwZWN0IGxvZy5wcmVkaWN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFiYnJldicgJworCXNlZCBzL1NVQkpFQ1QvT0JKSUQvIGV4cGVjdC50ZW1wbGF0ZSA+ZXhwZWN0ICYmCisJZ2l0IHNob3J0bG9nIC0tZm9ybWF0PSIlaCIgLS1hYmJyZXY9NSBIRUFEID5sb2cgJiYKKwlmdXp6IGxvZyA+bG9nLnByZWRpY3RhYmxlICYmCisJdGVzdF9jbXAgZXhwZWN0IGxvZy5wcmVkaWN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRwdXQgZnJvbSB1c2VyLWRlZmluZWQgZm9ybWF0IGlzIHJlLXdyYXBwZWQnICcKKwlzZWQgInMvU1VCSkVDVC90d28gbGluZXMvIiBleHBlY3QudGVtcGxhdGUgPmV4cGVjdCAmJgorCWdpdCBzaG9ydGxvZyAtLWZvcm1hdD0idHdvJW5saW5lcyIgSEVBRCA+bG9nICYmCisJZnV6eiBsb2cgPmxvZy5wcmVkaWN0YWJsZSAmJgorCXRlc3RfY21wIGV4cGVjdCBsb2cucHJlZGljdGFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ3Nob3J0bG9nIHdyYXBwaW5nJyAnCisJY2F0ID5leHBlY3QgPDxcRU9GICYmCitBIFUgVGhvciAoNSk6CisgICAgICBUZXN0CisgICAgICBUaGlzIGlzIGEgdmVyeSwgdmVyeSBsb25nIGZpcnN0IGxpbmUgZm9yIHRoZSBjb21taXQgbWVzc2FnZSB0byBzZWUgaWYKKyAgICAgICAgIGl0IGlzIHdyYXBwZWQgY29ycmVjdGx5CisgICAgICBUaPCdhJ5zIPCdhJ5zIGEgdmVyeSwgdmVyeSBsb25nIGbwnYSecnN0IGzwnYSebmUgZm9yIHRoZSBjb21t8J2EnnQgbWVzc2FnZSB0byBzZWUg8J2EnmYKKyAgICAgICAgIPCdhJ50IPCdhJ5zIHdyYXBwZWQgY29ycmVjdGx5CisgICAgICBUaPidhJ5zIPidhJ5zIGEgdmVyeSwgdmVyeSBsb25nIGb4nYSecnN0IGz4nYSebmUgZm9yIHRoZSBjb21t+J2EnnQKKyAgICAgICAgIG1lc3NhZ2UgdG8gc2VlIPidhJ5mIPidhJ50IPidhJ5zIHdyYXBwZWQgY29ycmVjdGx5CisgICAgICBhCQkJCQkJCQkxMgkzNAorICAgICAgICAgNTYJNzgKKworU29tZW9uZSBlbHNlICgxKToKKyAgICAgIENvbW1pdCBieSBzb21lb25lIGVsc2UKKworRU9GCisJZ2l0IHNob3J0bG9nIC13IEhFQUQgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ3Nob3J0bG9nIGZyb20gbm9uLWdpdCBkaXJlY3RvcnknICcKKwlnaXQgbG9nIEhFQUQgPmxvZyAmJgorCUdJVF9ESVI9bm9uLWV4aXN0aW5nIGdpdCBzaG9ydGxvZyAtdyA8bG9nID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0bG9nIHNob3VsZCBhZGQgbmV3bGluZSB3aGVuIGlucHV0IGxpbmUgbWF0Y2hlcyB3cmFwbGVuJyAnCisJY2F0ID5leHBlY3QgPDxcRU9GICYmCitBIFUgVGhvciAoMik6CisgICAgICBiYmJiYmJiYmJiYmJiYmJiYmI6IGJiYmJiYmJiIGJiYiBiYmJiIGJiYmJiYmIgYmIgYmJiYiBiYmIgYmJiYmIgYmJiYmJiCisgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhOiBhYWFhYWEgYWFhYWFhYWFhYSBhYWFhIGFhYWFhYWFhIGFhIGFhYWEgYWEgYWFhCisKK0VPRgorCWdpdCBzaG9ydGxvZyAtdyA+b3V0IDw8XEVPRiAmJgorY29tbWl0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAKKworICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWE6IGFhYWFhYSBhYWFhYWFhYWFhIGFhYWEgYWFhYWFhYWEgYWEgYWFhYSBhYSBhYWEKKworY29tbWl0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKK0F1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAKKworICAgIGJiYmJiYmJiYmJiYmJiYmJiYjogYmJiYmJiYmIgYmJiIGJiYmIgYmJiYmJiYiBiYiBiYmJiIGJiYiBiYmJiYiBiYmJiYmIKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0IG91dAorJworCitpY29udmZyb211dGY4dG9pc284ODU5MSgpIHsKKwlwcmludGYgIiVzIiAiJCoiIHwgaWNvbnYgLWYgVVRGLTggLXQgSVNPODg1OS0xCit9CisKK0RTQ0hPPSJKw7Zow6RubsOrcyBcIkRzY2jDtlwiIFNjaGluZMOrbGluIgorRFNDSE9FPSIkRFNDSE8gPEpvaGFubmVzLlNjaGluZGVsaW5AZ214LmRlPiIKK01TRzE9InNldCBhMSB0byAyIGFuZCBzb21lIG5vbi1BU0NJSSBjaGFyczogw4TDn8O4IgorTVNHMj0ic2V0IGExIHRvIDMgYW5kIHNvbWUgbm9uLUFTQ0lJIGNoYXJzOiDDocOmw68iCitjYXQgPiBleHBlY3QgPDwgRU9GCiskRFNDSE8gKDIpOgorICAgICAgJE1TRzEKKyAgICAgICRNU0cyCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnc2hvcnRsb2cgZW5jb2RpbmcnICcKKwlnaXQgcmVzZXQgLS1oYXJkICIkY29tbWl0IiAmJgorCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJZWNobyAyID4gYTEgJiYKKwlnaXQgY29tbWl0IC0tcXVpZXQgLW0gIiRNU0cxIiAtLWF1dGhvcj0iJERTQ0hPRSIgYTEgJiYKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgIklTTzg4NTktMSIgJiYKKwllY2hvIDMgPiBhMSAmJgorCWdpdCBjb21taXQgLS1xdWlldCAtbSAiJChpY29udmZyb211dGY4dG9pc284ODU5MSAiJE1TRzIiKSIgXAorCQktLWF1dGhvcj0iJChpY29udmZyb211dGY4dG9pc284ODU5MSAiJERTQ0hPRSIpIiBhMSAmJgorCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJZ2l0IHNob3J0bG9nIEhFQUR+Mi4uID4gb3V0ICYmCit0ZXN0X2NtcCBleHBlY3Qgb3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG9ydGxvZyBpZ25vcmVzIGNvbW1pdHMgd2l0aCBtaXNzaW5nIGF1dGhvcnMnICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gbm9ybWFsICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHNvb24tdG8tYmUtYnJva2VuICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5jb21taXQudG1wICYmCisJc2VkICIvXmF1dGhvci9kIiBjb21taXQudG1wID5icm9rZW4udG1wICYmCisJY29tbWl0PSQoZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCAtLXN0ZGluIDxicm9rZW4udG1wKSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgJGNvbW1pdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBIFUgVGhvciAoMSk6CisJICAgICAgbm9ybWFsCisKKwlFT0YKKwlnaXQgc2hvcnRsb2cgSEVBRH4yLi4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgd2l0aCByZXZpc2lvbiBwc2V1ZG8gb3B0aW9ucycgJworCWdpdCBzaG9ydGxvZyAtLWFsbCAmJgorCWdpdCBzaG9ydGxvZyAtLWJyYW5jaGVzICYmCisJZ2l0IHNob3J0bG9nIC0tZXhjbHVkZT1yZWZzL2hlYWRzL20qIC0tYWxsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwMi1sb2cuc2ggYi90L3Q0MjAyLWxvZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZWRlMDY5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwMi1sb2cuc2gKQEAgLTAsMCArMSw5MTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbG9nJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItZ3BnLnNoIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWVjaG8gb25lID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZWNobyBpY2hpID5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisKKwlnaXQgbXYgb25lIGljaGkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkICYmCisKKwljcCBpY2hpIGVpbiAmJgorCWdpdCBhZGQgZWluICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBmb3VydGggJiYKKworCW1rZGlyIGEgJiYKKwllY2hvIG5pID5hL3R3byAmJgorCWdpdCBhZGQgYS90d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGZpZnRoICAmJgorCisJZ2l0IHJtIGEvdHdvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzaXh0aAorCisnCisKK3ByaW50ZiAic2l4dGhcbmZpZnRoXG5mb3VydGhcbnRoaXJkXG5zZWNvbmRcbmluaXRpYWwiID4gZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHknICcKKworCWdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolcyIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3ByaW50ZiAic2l4dGhcbmZpZnRoXG5mb3VydGhcbnRoaXJkXG5zZWNvbmRcbmluaXRpYWxcbiIgPiBleHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXR0eSAodGZvcm1hdCknICcKKworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JXMiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmV0dHkgKHNob3J0Y3V0KScgJworCisJZ2l0IGxvZyAtLXByZXR0eT0iJXMiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQnICcKKworCWdpdCBsb2cgLS1mb3JtYXQ9IiVzIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorIFRoaXMgaXMKKyAgdGhlIHNpeHRoCisgIGNvbW1pdC4KKyBUaGlzIGlzCisgIHRoZSBmaWZ0aAorICBjb21taXQuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0ICV3KDExLDEsMiknICcKKworCWdpdCBsb2cgLTIgLS1mb3JtYXQ9IiV3KDExLDEsMilUaGlzIGlzIHRoZSAlcyBjb21taXQuIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ybWF0ICV3KCwxLDIpJyAnCisKKwlnaXQgbG9nIC0yIC0tZm9ybWF0PSIldygsMSwyKVRoaXMgaXMlbnRoZSAlcyVuY29tbWl0LiIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKzgwNGE3ODcgc2l4dGgKKzM5NGVmNzggZmlmdGgKKzVkMzExNTkgZm91cnRoCisyZmJlOGMwIHRoaXJkCitmN2RhYjhlIHNlY29uZAorM2EyZmRjYiBpbml0aWFsCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29uZWxpbmUnICcKKworCWdpdCBsb2cgLS1vbmVsaW5lID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbHRlcj1BJyAnCisKKwlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JXMiIC0tZGlmZi1maWx0ZXI9QSBIRUFEID4gYWN0dWFsICYmCisJZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiVzIiAtLWRpZmYtZmlsdGVyIEEgSEVBRCA+IGFjdHVhbC1zZXBhcmF0ZSAmJgorCXByaW50ZiAiZmlmdGhcbmZvdXJ0aFxudGhpcmRcbmluaXRpYWwiID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwtc2VwYXJhdGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbHRlcj1NJyAnCisKKwlhY3R1YWw9JChnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JXMiIC0tZGlmZi1maWx0ZXI9TSBIRUFEKSAmJgorCWV4cGVjdD0kKGVjaG8gc2Vjb25kKSAmJgorCXZlcmJvc2UgdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbHRlcj1EJyAnCisKKwlhY3R1YWw9JChnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JXMiIC0tZGlmZi1maWx0ZXI9RCBIRUFEKSAmJgorCWV4cGVjdD0kKGVjaG8gc2l4dGggOyBlY2hvIHRoaXJkKSAmJgorCXZlcmJvc2UgdGVzdCAiJGFjdHVhbCIgPSAiJGV4cGVjdCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbHRlcj1SJyAnCisKKwlhY3R1YWw9JChnaXQgbG9nIC1NIC0tcHJldHR5PSJmb3JtYXQ6JXMiIC0tZGlmZi1maWx0ZXI9UiBIRUFEKSAmJgorCWV4cGVjdD0kKGVjaG8gdGhpcmQpICYmCisJdmVyYm9zZSB0ZXN0ICIkYWN0dWFsIiA9ICIkZXhwZWN0IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsdGVyPUMnICcKKworCWFjdHVhbD0kKGdpdCBsb2cgLUMgLUMgLS1wcmV0dHk9ImZvcm1hdDolcyIgLS1kaWZmLWZpbHRlcj1DIEhFQUQpICYmCisJZXhwZWN0PSQoZWNobyBmb3VydGgpICYmCisJdmVyYm9zZSB0ZXN0ICIkYWN0dWFsIiA9ICIkZXhwZWN0IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1mb2xsb3cnICcKKworCWFjdHVhbD0kKGdpdCBsb2cgLS1mb2xsb3cgLS1wcmV0dHk9ImZvcm1hdDolcyIgaWNoaSkgJiYKKwlleHBlY3Q9JChlY2hvIHRoaXJkIDsgZWNobyBzZWNvbmQgOyBlY2hvIGluaXRpYWwpICYmCisJdmVyYm9zZSB0ZXN0ICIkYWN0dWFsIiA9ICIkZXhwZWN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29uZmlnIGxvZy5mb2xsb3cgd29ya3MgbGlrZSAtLWZvbGxvdycgJworCXRlc3RfY29uZmlnIGxvZy5mb2xsb3cgdHJ1ZSAmJgorCWFjdHVhbD0kKGdpdCBsb2cgLS1wcmV0dHk9ImZvcm1hdDolcyIgaWNoaSkgJiYKKwlleHBlY3Q9JChlY2hvIHRoaXJkIDsgZWNobyBzZWNvbmQgOyBlY2hvIGluaXRpYWwpICYmCisJdmVyYm9zZSB0ZXN0ICIkYWN0dWFsIiA9ICIkZXhwZWN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29uZmlnIGxvZy5mb2xsb3cgZG9lcyBub3QgZGllIHdpdGggbXVsdGlwbGUgcGF0aHMnICcKKwl0ZXN0X2NvbmZpZyBsb2cuZm9sbG93IHRydWUgJiYKKwlnaXQgbG9nIC0tcHJldHR5PSJmb3JtYXQ6JXMiIGljaGkgZWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb25maWcgbG9nLmZvbGxvdyBkb2VzIG5vdCBkaWUgd2l0aCBubyBwYXRocycgJworCXRlc3RfY29uZmlnIGxvZy5mb2xsb3cgdHJ1ZSAmJgorCWdpdCBsb2cgLS0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbmZpZyBsb2cuZm9sbG93IGlzIG92ZXJyaWRkZW4gYnkgLS1uby1mb2xsb3cnICcKKwl0ZXN0X2NvbmZpZyBsb2cuZm9sbG93IHRydWUgJiYKKwlhY3R1YWw9JChnaXQgbG9nIC0tbm8tZm9sbG93IC0tcHJldHR5PSJmb3JtYXQ6JXMiIGljaGkpICYmCisJZXhwZWN0PSJ0aGlyZCIgJiYKKwl2ZXJib3NlIHRlc3QgIiRhY3R1YWwiID0gIiRleHBlY3QiCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKzgwNGE3ODcgc2l4dGgKKzM5NGVmNzggZmlmdGgKKzVkMzExNTkgZm91cnRoCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby13YWxrIDxjb21taXRzPiBzb3J0cyBieSBjb21taXQgdGltZScgJworCWdpdCBsb2cgLS1uby13YWxrIC0tb25lbGluZSA1ZDMxMTU5IDgwNGE3ODcgMzk0ZWY3OCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLW5vLXdhbGs9c29ydGVkIDxjb21taXRzPiBzb3J0cyBieSBjb21taXQgdGltZScgJworCWdpdCBsb2cgLS1uby13YWxrPXNvcnRlZCAtLW9uZWxpbmUgNWQzMTE1OSA4MDRhNzg3IDM5NGVmNzggPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKKzVkMzExNTkgZm91cnRoCis4MDRhNzg3IHNpeHRoCiszOTRlZjc4IGZpZnRoCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBsb2cgLS1uby13YWxrPXVuc29ydGVkIDxjb21taXRzPiBsZWF2ZXMgbGlzdCBvZiBjb21taXRzIGFzIGdpdmVuJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGs9dW5zb3J0ZWQgLS1vbmVsaW5lIDVkMzExNTkgODA0YTc4NyAzOTRlZjc4ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc2hvdyA8Y29tbWl0cz4gbGVhdmVzIGxpc3Qgb2YgY29tbWl0cyBhcyBnaXZlbicgJworCWdpdCBzaG93IC0tb25lbGluZSAtcyA1ZDMxMTU5IDgwNGE3ODcgMzk0ZWY3OCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY2FzZSBzZW5zaXRpdml0eSB0ZXN0cycgJworCWVjaG8gY2FzZSA+b25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwJyAnCisJZWNobyBzZWNvbmQgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0tZ3JlcD1zZWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorc2Vjb25kCitpbml0aWFsCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWludmVydC1ncmVwIC0tZ3JlcCcgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0taW52ZXJ0LWdyZXAgLS1ncmVwPXRoIC0tZ3JlcD1TZWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0taW52ZXJ0LWdyZXAgLS1ncmVwIC1pJyAnCisJZWNobyBpbml0aWFsID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtLWludmVydC1ncmVwIC1pIC0tZ3JlcD10aCAtLWdyZXA9U2VjID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyZXAgb3B0aW9uIHBhcnNpbmcnICcKKwllY2hvIHNlY29uZCA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT0idGZvcm1hdDolcyIgLS1ncmVwIHNlYyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC0tZ3JlcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLWkgLS1ncmVwJyAnCisJZWNobyBTZWNvbmQgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1wcmV0dHk9InRmb3JtYXQ6JXMiIC1pIC0tZ3JlcD1zZWMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JlcCAtaScgJworCWVjaG8gU2Vjb25kID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiAtLWdyZXA9c2VjIC1pID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtRiAtRSAtLWdyZXA9PGVyZT4gdXNlcyBlcmUnICcKKwllY2hvIHNlY29uZCA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT0idGZvcm1hdDolcyIgLUYgLUUgLS1ncmVwPXMuYy5uZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPiBleHBlY3QgPDxFT0YKKyogU2Vjb25kCisqIHNpeHRoCisqIGZpZnRoCisqIGZvdXJ0aAorKiB0aGlyZAorKiBzZWNvbmQKKyogaW5pdGlhbAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBsb2cgLS1ncmFwaCcgJworCWdpdCBsb2cgLS1ncmFwaCAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBtZXJnZSBoaXN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRH40ICYmCisJdGVzdF9jb21taXQgc2lkZS0xIDEgMSAmJgorCXRlc3RfY29tbWl0IHNpZGUtMiAyIDIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIHNpZGUKKycKKworY2F0ID4gZXhwZWN0IDw8XEVPRgorKiAgIE1lcmdlIGJyYW5jaCAnc2lkZScKK3xcCit8ICogc2lkZS0yCit8ICogc2lkZS0xCisqIHwgU2Vjb25kCisqIHwgc2l4dGgKKyogfCBmaWZ0aAorKiB8IGZvdXJ0aAorfC8KKyogdGhpcmQKKyogc2Vjb25kCisqIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG1lcmdlJyAnCisJZ2l0IGxvZyAtLWdyYXBoIC0tZGF0ZS1vcmRlciAtLXByZXR0eT10Zm9ybWF0OiVzIHwKKwkJc2VkICJzLyAqXCQvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tcmF3IC0tZ3JhcGggLW0gd2l0aCBtZXJnZScgJworCWdpdCBsb2cgLS1yYXcgLS1ncmFwaCAtLW9uZWxpbmUgLW0gbWFzdGVyIHwgaGVhZCAtbiA1MDAgPmFjdHVhbCAmJgorCWdyZXAgImluaXRpYWwiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLXRyZWUgLS1ncmFwaCcgJworCWdpdCBkaWZmLXRyZWUgLS1ncmFwaCBtYXN0ZXJeIHwgaGVhZCAtbiA1MDAgPmFjdHVhbCAmJgorCWdyZXAgIm9uZSIgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PFxFT0YKKyogICBjb21taXQgbWFzdGVyCit8XCAgTWVyZ2U6IEEgQgorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBNZXJnZSBicmFuY2ggJ3NpZGUnCit8IHwKK3wgKiBjb21taXQgc2lkZQorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBzaWRlLTIKK3wgfAorfCAqIGNvbW1pdCB0YWdzL3NpZGUtMQorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBzaWRlLTEKK3wgfAorKiB8IGNvbW1pdCBtYXN0ZXJ+MQorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBTZWNvbmQKK3wgfAorKiB8IGNvbW1pdCBtYXN0ZXJ+MgorfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICBzaXh0aAorfCB8CisqIHwgY29tbWl0IG1hc3Rlcn4zCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIGZpZnRoCit8IHwKKyogfCBjb21taXQgbWFzdGVyfjQKK3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICAgIGZvdXJ0aAorfAorKiBjb21taXQgdGFncy9zaWRlLTF+MQorfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICB0aGlyZAorfAorKiBjb21taXQgdGFncy9zaWRlLTF+MgorfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICBzZWNvbmQKK3wKKyogY29tbWl0IHRhZ3Mvc2lkZS0xfjMKKyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisgICAgICBpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JhcGggd2l0aCBmdWxsIG91dHB1dCcgJworCWdpdCBsb2cgLS1ncmFwaCAtLWRhdGUtb3JkZXIgLS1wcmV0dHk9c2hvcnQgfAorCQlnaXQgbmFtZS1yZXYgLS1uYW1lLW9ubHkgLS1zdGRpbiB8CisJCXNlZCAicy9NZXJnZTouKi9NZXJnZTogQSBCLztzLyAqXCQvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1vcmUgdGFuZ2xlZCBoaXN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRhbmdsZSBIRUFEfjYgJiYKKwl0ZXN0X2NvbW1pdCB0YW5nbGUtYSB0YW5nbGUtYSBhICYmCisJZ2l0IG1lcmdlIG1hc3Rlcn4zICYmCisJZ2l0IG1lcmdlIHNpZGV+MSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgdGFuZ2xlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYWNoICYmCisJdGVzdF9jb21taXQgcmVhY2ggJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIG9jdG9wdXMtYSAmJgorCXRlc3RfY29tbWl0IG9jdG9wdXMtYSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgb2N0b3B1cy1iICYmCisJdGVzdF9jb21taXQgb2N0b3B1cy1iICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHNldmVudGggJiYKKwlnaXQgbWVyZ2Ugb2N0b3B1cy1hIG9jdG9wdXMtYiAmJgorCWdpdCBtZXJnZSByZWFjaAorJworCitjYXQgPiBleHBlY3QgPDxcRU9GCisqICAgTWVyZ2UgdGFnICdyZWFjaCcKK3xcCit8IFwKK3wgIFwKKyotLiBcICAgTWVyZ2UgdGFncyAnb2N0b3B1cy1hJyBhbmQgJ29jdG9wdXMtYicKK3xcIFwgXAorKiB8IHwgfCBzZXZlbnRoCit8IHwgKiB8IG9jdG9wdXMtYgorfCB8LyAvCit8L3wgfAorfCAqIHwgb2N0b3B1cy1hCit8LyAvCit8ICogcmVhY2gKK3wvCisqICAgTWVyZ2UgYnJhbmNoICd0YW5nbGUnCit8XAorfCAqICAgTWVyZ2UgYnJhbmNoICdzaWRlJyAoZWFybHkgcGFydCkgaW50byB0YW5nbGUKK3wgfFwKK3wgKiBcICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIChlYXJseSBwYXJ0KSBpbnRvIHRhbmdsZQorfCB8XCBcCit8ICogfCB8IHRhbmdsZS1hCisqIHwgfCB8ICAgTWVyZ2UgYnJhbmNoICdzaWRlJworfFwgXCBcIFwKK3wgKiB8IHwgfCBzaWRlLTIKK3wgfCB8X3wvCit8IHwvfCB8Cit8ICogfCB8IHNpZGUtMQorKiB8IHwgfCBTZWNvbmQKKyogfCB8IHwgc2l4dGgKK3wgfF98LworfC98IHwKKyogfCB8IGZpZnRoCisqIHwgfCBmb3VydGgKK3wvIC8KKyogfCB0aGlyZAorfC8KKyogc2Vjb25kCisqIGluaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIG1lcmdlJyAnCisJZ2l0IGxvZyAtLWdyYXBoIC0tZGF0ZS1vcmRlciAtLXByZXR0eT10Zm9ybWF0OiVzIHwKKwkJc2VkICJzLyAqXCQvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nLmRlY29yYXRlIGNvbmZpZ3VyYXRpb24nICcKKwlnaXQgbG9nIC0tb25lbGluZSA+ZXhwZWN0Lm5vbmUgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlID5leHBlY3Quc2hvcnQgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPWZ1bGwgPmV4cGVjdC5mdWxsICYmCisKKwllY2hvICJbbG9nXSBkZWNvcmF0ZSIgPj4uZ2l0L2NvbmZpZyAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Quc2hvcnQgYWN0dWFsICYmCisKKwl0ZXN0X2NvbmZpZyBsb2cuZGVjb3JhdGUgdHJ1ZSAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Quc2hvcnQgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1kZWNvcmF0ZT1mdWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZnVsbCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm9uZSBhY3R1YWwgJiYKKworCXRlc3RfY29uZmlnIGxvZy5kZWNvcmF0ZSBubyAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm9uZSBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Quc2hvcnQgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1kZWNvcmF0ZT1mdWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZnVsbCBhY3R1YWwgJiYKKworCXRlc3RfY29uZmlnIGxvZy5kZWNvcmF0ZSAxICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaG9ydCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPWZ1bGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5mdWxsIGFjdHVhbCAmJgorCWdpdCBsb2cgLS1vbmVsaW5lIC0tZGVjb3JhdGU9bm8gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5ub25lIGFjdHVhbCAmJgorCisJdGVzdF9jb25maWcgbG9nLmRlY29yYXRlIHNob3J0ICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5zaG9ydCBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLW5vLWRlY29yYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qubm9uZSBhY3R1YWwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSAtLWRlY29yYXRlPWZ1bGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5mdWxsIGFjdHVhbCAmJgorCisJdGVzdF9jb25maWcgbG9nLmRlY29yYXRlIGZ1bGwgJiYKKwlnaXQgbG9nIC0tb25lbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmZ1bGwgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1uby1kZWNvcmF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0Lm5vbmUgYWN0dWFsICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1kZWNvcmF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnNob3J0IGFjdHVhbCAmJgorCisJdGVzdF91bmNvbmZpZyBsb2cuZGVjb3JhdGUgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXJhdyA+ZXhwZWN0LnJhdyAmJgorCXRlc3RfY29uZmlnIGxvZy5kZWNvcmF0ZSBmdWxsICYmCisJZ2l0IGxvZyAtLXByZXR0eT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5yYXcgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIGlzIGV4cGVjdGVkIGZvcm1hdCcgJworCWdpdCBsb2cgLWcgLS1hYmJyZXYtY29tbWl0IC0tcHJldHR5PW9uZWxpbmUgPmV4cGVjdCAmJgorCWdpdCByZWZsb2cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hhdGNoYW5nZWQgaXMgZXhwZWN0ZWQgZm9ybWF0JyAnCisJZ2l0IGxvZyAtLW5vLW1lcmdlcyAtLXJhdyA+ZXhwZWN0ICYmCisJZ2l0IHdoYXRjaGFuZ2VkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZy5hYmJyZXZDb21taXQgY29uZmlndXJhdGlvbicgJworCWdpdCBsb2cgLS1hYmJyZXYtY29tbWl0ID5leHBlY3QubG9nLmFiYnJldiAmJgorCWdpdCBsb2cgLS1uby1hYmJyZXYtY29tbWl0ID5leHBlY3QubG9nLmZ1bGwgJiYKKwlnaXQgbG9nIC0tcHJldHR5PXJhdyA+ZXhwZWN0LmxvZy5yYXcgJiYKKwlnaXQgcmVmbG9nIC0tYWJicmV2LWNvbW1pdCA+ZXhwZWN0LnJlZmxvZy5hYmJyZXYgJiYKKwlnaXQgcmVmbG9nIC0tbm8tYWJicmV2LWNvbW1pdCA+ZXhwZWN0LnJlZmxvZy5mdWxsICYmCisJZ2l0IHdoYXRjaGFuZ2VkIC0tYWJicmV2LWNvbW1pdCA+ZXhwZWN0LndoYXRjaGFuZ2VkLmFiYnJldiAmJgorCWdpdCB3aGF0Y2hhbmdlZCAtLW5vLWFiYnJldi1jb21taXQgPmV4cGVjdC53aGF0Y2hhbmdlZC5mdWxsICYmCisKKwl0ZXN0X2NvbmZpZyBsb2cuYWJicmV2Q29tbWl0IHRydWUgJiYKKworCWdpdCBsb2cgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5sb2cuYWJicmV2IGFjdHVhbCAmJgorCWdpdCBsb2cgLS1uby1hYmJyZXYtY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QubG9nLmZ1bGwgYWN0dWFsICYmCisKKwlnaXQgbG9nIC0tcHJldHR5PXJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmxvZy5yYXcgYWN0dWFsICYmCisKKwlnaXQgcmVmbG9nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmVmbG9nLmFiYnJldiBhY3R1YWwgJiYKKwlnaXQgcmVmbG9nIC0tbm8tYWJicmV2LWNvbW1pdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnJlZmxvZy5mdWxsIGFjdHVhbCAmJgorCisJZ2l0IHdoYXRjaGFuZ2VkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Qud2hhdGNoYW5nZWQuYWJicmV2IGFjdHVhbCAmJgorCWdpdCB3aGF0Y2hhbmdlZCAtLW5vLWFiYnJldi1jb21taXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC53aGF0Y2hhbmdlZC5mdWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGFkZGVkIHBhdGggdW5kZXIgIi0tZm9sbG93IC1NIicgJworCSMgVGhpcyB0ZXN0cyBmb3IgYSByZWdyZXNzaW9uIGludHJvZHVjZWQgaW4gdjEuNy4yLXJjMH4xMDNeMn4yCisJdGVzdF9jcmVhdGVfcmVwbyByZWdyZXNzaW9uICYmCisJKAorCQljZCByZWdyZXNzaW9uICYmCisJCXRlc3RfY29tbWl0IG5lZWRzLWFub3RoZXItY29tbWl0ICYmCisJCXRlc3RfY29tbWl0IGZvby5iYXIgJiYKKwkJZ2l0IGxvZyAtTSAtLWZvbGxvdyAtcCBmb28uYmFyLnQgJiYKKwkJZ2l0IGxvZyAtTSAtLWZvbGxvdyAtLXN0YXQgZm9vLmJhci50ICYmCisJCWdpdCBsb2cgLU0gLS1mb2xsb3cgLS1uYW1lLW9ubHkgZm9vLmJhci50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC1jIC0tZm9sbG93JyAnCisJdGVzdF9jcmVhdGVfcmVwbyBmb2xsb3ctYyAmJgorCSgKKwkJY2QgZm9sbG93LWMgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCBmaWxlIG9yaWdpbmFsICYmCisJCWdpdCBybSBmaWxlICYmCisJCXRlc3RfY29tbWl0IHJlbmFtZSBmaWxlMiBvcmlnaW5hbCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwkJdGVzdF9jb21taXQgbW9kaWZ5IGZpbGUgZm9vICYmCisJCWdpdCBtZXJnZSAtbSBtZXJnZSByZW5hbWUgJiYKKwkJZ2l0IGxvZyAtYyAtLWZvbGxvdyBmaWxlMgorCSkKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisqICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIE1lcmdlIEhFQURTIERFU0NSSVBUSU9OCit8IHwKK3wgKiBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIHJlYWNoCit8IHwgLS0tCit8IHwgIHJlYWNoLnQgfCAxICsKK3wgfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwKK3wgfCBkaWZmIC0tZ2l0IGEvcmVhY2gudCBiL3JlYWNoLnQKK3wgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IGluZGV4IDAwMDAwMDAuLjEwYzk1OTEKK3wgfCAtLS0gL2Rldi9udWxsCit8IHwgKysrIGIvcmVhY2gudAorfCB8IEBAIC0wLDAgKzEgQEAKK3wgfCArcmVhY2gKK3wgfAorfCAgXAorKi0uIFwgICBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8XCBcIFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgfCB8IEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfCB8IHwKK3wgfCB8IHwgICAgIE1lcmdlIEhFQURTIERFU0NSSVBUSU9OCit8IHwgfCB8Cit8IHwgKiB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8LyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwKK3wgfCB8ICAgICAgIG9jdG9wdXMtYgorfCB8IHwgICAtLS0KK3wgfCB8ICAgIG9jdG9wdXMtYi50IHwgMSArCit8IHwgfCAgICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKK3wgfCB8Cit8IHwgfCAgIGRpZmYgLS1naXQgYS9vY3RvcHVzLWIudCBiL29jdG9wdXMtYi50Cit8IHwgfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgfCAgIGluZGV4IDAwMDAwMDAuLmQ1ZmNhZDAKK3wgfCB8ICAgLS0tIC9kZXYvbnVsbAorfCB8IHwgICArKysgYi9vY3RvcHVzLWIudAorfCB8IHwgICBAQCAtMCwwICsxIEBACit8IHwgfCAgICtvY3RvcHVzLWIKK3wgfCB8Cit8ICogfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHwvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwKK3wgfCAgICAgICBvY3RvcHVzLWEKK3wgfCAgIC0tLQorfCB8ICAgIG9jdG9wdXMtYS50IHwgMSArCit8IHwgICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwKK3wgfCAgIGRpZmYgLS1naXQgYS9vY3RvcHVzLWEudCBiL29jdG9wdXMtYS50Cit8IHwgICBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8ICAgaW5kZXggMDAwMDAwMC4uMTFlZTAxNQorfCB8ICAgLS0tIC9kZXYvbnVsbAorfCB8ICAgKysrIGIvb2N0b3B1cy1hLnQKK3wgfCAgIEBAIC0wLDAgKzEgQEAKK3wgfCAgICtvY3RvcHVzLWEKK3wgfAorKiB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8Cit8ICAgICAgIHNldmVudGgKK3wgICAtLS0KK3wgICAgc2V2ZW50aC50IHwgMSArCit8ICAgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorfAorfCAgIGRpZmYgLS1naXQgYS9zZXZlbnRoLnQgYi9zZXZlbnRoLnQKK3wgICBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCAgIGluZGV4IDAwMDAwMDAuLjk3NDRmZmMKK3wgICAtLS0gL2Rldi9udWxsCit8ICAgKysrIGIvc2V2ZW50aC50Cit8ICAgQEAgLTAsMCArMSBAQAorfCAgICtzZXZlbnRoCit8CisqICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8Cit8IHwgICAgIE1lcmdlIGJyYW5jaCAndGFuZ2xlJworfCB8Cit8ICogICBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHxcICBNZXJnZTogTUVSR0VfUEFSRU5UUworfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwKK3wgfCB8ICAgICBNZXJnZSBicmFuY2ggJ3NpZGUnIChlYXJseSBwYXJ0KSBpbnRvIHRhbmdsZQorfCB8IHwKK3wgKiB8ICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfCB8XCBcICBNZXJnZTogTUVSR0VfUEFSRU5UUworfCB8IHwgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwgfCB8Cit8IHwgfCB8ICAgICBNZXJnZSBicmFuY2ggJ21hc3RlcicgKGVhcmx5IHBhcnQpIGludG8gdGFuZ2xlCit8IHwgfCB8Cit8ICogfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfAorfCB8IHwgfCAgICAgdGFuZ2xlLWEKK3wgfCB8IHwgLS0tCit8IHwgfCB8ICB0YW5nbGUtYSB8IDEgKworfCB8IHwgfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwgfCB8Cit8IHwgfCB8IGRpZmYgLS1naXQgYS90YW5nbGUtYSBiL3RhbmdsZS1hCit8IHwgfCB8IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgfCB8IGluZGV4IDAwMDAwMDAuLjc4OTgxOTIKK3wgfCB8IHwgLS0tIC9kZXYvbnVsbAorfCB8IHwgfCArKysgYi90YW5nbGUtYQorfCB8IHwgfCBAQCAtMCwwICsxIEBACit8IHwgfCB8ICthCit8IHwgfCB8CisqIHwgfCB8ICAgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfFwgXCBcIFwgIE1lcmdlOiBNRVJHRV9QQVJFTlRTCit8IHwgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfCB8Cit8IHwgfCB8IHwgICAgIE1lcmdlIGJyYW5jaCAnc2lkZScKK3wgfCB8IHwgfAorfCAqIHwgfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8X3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwvfCB8Cit8IHwgfCB8ICAgICAgIHNpZGUtMgorfCB8IHwgfCAgIC0tLQorfCB8IHwgfCAgICAyIHwgMSArCit8IHwgfCB8ICAgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorfCB8IHwgfAorfCB8IHwgfCAgIGRpZmYgLS1naXQgYS8yIGIvMgorfCB8IHwgfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgfCB8ICAgaW5kZXggMDAwMDAwMC4uMGNmYmYwOAorfCB8IHwgfCAgIC0tLSAvZGV2L251bGwKK3wgfCB8IHwgICArKysgYi8yCit8IHwgfCB8ICAgQEAgLTAsMCArMSBAQAorfCB8IHwgfCAgICsyCit8IHwgfCB8Cit8ICogfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfAorfCB8IHwgfCAgICAgc2lkZS0xCit8IHwgfCB8IC0tLQorfCB8IHwgfCAgMSB8IDEgKworfCB8IHwgfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwgfCB8Cit8IHwgfCB8IGRpZmYgLS1naXQgYS8xIGIvMQorfCB8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgfCBpbmRleCAwMDAwMDAwLi5kMDA0OTFmCit8IHwgfCB8IC0tLSAvZGV2L251bGwKK3wgfCB8IHwgKysrIGIvMQorfCB8IHwgfCBAQCAtMCwwICsxIEBACit8IHwgfCB8ICsxCit8IHwgfCB8CisqIHwgfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgfCB8IHwgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfCB8IHwgfAorfCB8IHwgfCAgICAgU2Vjb25kCit8IHwgfCB8IC0tLQorfCB8IHwgfCAgb25lIHwgMSArCit8IHwgfCB8ICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKK3wgfCB8IHwKK3wgfCB8IHwgZGlmZiAtLWdpdCBhL29uZSBiL29uZQorfCB8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgfCBpbmRleCAwMDAwMDAwLi45YTMzMzgzCit8IHwgfCB8IC0tLSAvZGV2L251bGwKK3wgfCB8IHwgKysrIGIvb25lCit8IHwgfCB8IEBAIC0wLDAgKzEgQEAKK3wgfCB8IHwgK2Nhc2UKK3wgfCB8IHwKKyogfCB8IHwgY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRQorfCB8X3wvICBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8L3wgfAorfCB8IHwgICAgICAgc2l4dGgKK3wgfCB8ICAgLS0tCit8IHwgfCAgICBhL3R3byB8IDEgLQorfCB8IHwgICAgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKK3wgfCB8Cit8IHwgfCAgIGRpZmYgLS1naXQgYS9hL3R3byBiL2EvdHdvCit8IHwgfCAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgICBpbmRleCA5MjQ1YWY1Li4wMDAwMDAwCit8IHwgfCAgIC0tLSBhL2EvdHdvCit8IHwgfCAgICsrKyAvZGV2L251bGwKK3wgfCB8ICAgQEAgLTEgKzAsMCBAQAorfCB8IHwgICAtbmkKK3wgfCB8CisqIHwgfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8IHwgfCBBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+Cit8IHwgfAorfCB8IHwgICAgIGZpZnRoCit8IHwgfCAtLS0KK3wgfCB8ICBhL3R3byB8IDEgKworfCB8IHwgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorfCB8IHwKK3wgfCB8IGRpZmYgLS1naXQgYS9hL3R3byBiL2EvdHdvCit8IHwgfCBuZXcgZmlsZSBtb2RlIDEwMDY0NAorfCB8IHwgaW5kZXggMDAwMDAwMC4uOTI0NWFmNQorfCB8IHwgLS0tIC9kZXYvbnVsbAorfCB8IHwgKysrIGIvYS90d28KK3wgfCB8IEBAIC0wLDAgKzEgQEAKK3wgfCB8ICtuaQorfCB8IHwKKyogfCB8IGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wvIC8gIEF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK3wgfAorfCB8ICAgICAgIGZvdXJ0aAorfCB8ICAgLS0tCit8IHwgICAgZWluIHwgMSArCit8IHwgICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCit8IHwKK3wgfCAgIGRpZmYgLS1naXQgYS9laW4gYi9laW4KK3wgfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8IHwgICBpbmRleCAwMDAwMDAwLi45ZDdlNjlmCit8IHwgICAtLS0gL2Rldi9udWxsCit8IHwgICArKysgYi9laW4KK3wgfCAgIEBAIC0wLDAgKzEgQEAKK3wgfCAgICtpY2hpCit8IHwKKyogfCBjb21taXQgQ09NTUlUX09CSkVDVF9OQU1FCit8LyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfAorfCAgICAgICB0aGlyZAorfCAgIC0tLQorfCAgICBpY2hpIHwgMSArCit8ICAgIG9uZSAgfCAxIC0KK3wgICAgMiBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQorfAorfCAgIGRpZmYgLS1naXQgYS9pY2hpIGIvaWNoaQorfCAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cit8ICAgaW5kZXggMDAwMDAwMC4uOWQ3ZTY5ZgorfCAgIC0tLSAvZGV2L251bGwKK3wgICArKysgYi9pY2hpCit8ICAgQEAgLTAsMCArMSBAQAorfCAgICtpY2hpCit8ICAgZGlmZiAtLWdpdCBhL29uZSBiL29uZQorfCAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAorfCAgIGluZGV4IDlkN2U2OWYuLjAwMDAwMDAKK3wgICAtLS0gYS9vbmUKK3wgICArKysgL2Rldi9udWxsCit8ICAgQEAgLTEgKzAsMCBAQAorfCAgIC1pY2hpCit8CisqIGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKK3wgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorfAorfCAgICAgc2Vjb25kCit8IC0tLQorfCAgb25lIHwgMiArLQorfCAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCit8Cit8IGRpZmYgLS1naXQgYS9vbmUgYi9vbmUKK3wgaW5kZXggNTYyNmFiZi4uOWQ3ZTY5ZiAxMDA2NDQKK3wgLS0tIGEvb25lCit8ICsrKyBiL29uZQorfCBAQCAtMSArMSBAQAorfCAtb25lCit8ICtpY2hpCit8CisqIGNvbW1pdCBDT01NSVRfT0JKRUNUX05BTUUKKyAgQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCisgICAgICBpbml0aWFsCisgIC0tLQorICAgb25lIHwgMSArCisgICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykKKworICBkaWZmIC0tZ2l0IGEvb25lIGIvb25lCisgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0CisgIGluZGV4IDAwMDAwMDAuLjU2MjZhYmYKKyAgLS0tIC9kZXYvbnVsbAorICArKysgYi9vbmUKKyAgQEAgLTAsMCArMSBAQAorICArb25lCitFT0YKKworc2FuaXRpemVfb3V0cHV0ICgpIHsKKwlzZWQgLWUgJ3MvICokLy8nIFwKKwkgICAgLWUgJ3MvY29tbWl0IFswLTlhLWZdKiQvY29tbWl0IENPTU1JVF9PQkpFQ1RfTkFNRS8nIFwKKwkgICAgLWUgJ3MvTWVyZ2U6IFsgMC05YS1mXSokL01lcmdlOiBNRVJHRV9QQVJFTlRTLycgXAorCSAgICAtZSAncy9NZXJnZSB0YWcuKi9NZXJnZSBIRUFEUyBERVNDUklQVElPTi8nIFwKKwkgICAgLWUgJ3MvTWVyZ2UgY29tbWl0LiovTWVyZ2UgSEVBRFMgREVTQ1JJUFRJT04vJyBcCisJICAgIC1lICdzLywgMCBkZWxldGlvbnMoLSkvLycgXAorCSAgICAtZSAncy8sIDAgaW5zZXJ0aW9ucygrKS8vJyBcCisJICAgIC1lICdzLyAxIGZpbGVzIGNoYW5nZWQsIC8gMSBmaWxlIGNoYW5nZWQsIC8nIFwKKwkgICAgLWUgJ3MvLCAxIGRlbGV0aW9ucygtKS8sIDEgZGVsZXRpb24oLSkvJyBcCisJICAgIC1lICdzLywgMSBpbnNlcnRpb25zKCspLywgMSBpbnNlcnRpb24oKykvJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmFwaCB3aXRoIGRpZmYgYW5kIHN0YXRzJyAnCisJZ2l0IGxvZyAtLWdyYXBoIC0tcHJldHR5PXNob3J0IC0tc3RhdCAtcCA+YWN0dWFsICYmCisJc2FuaXRpemVfb3V0cHV0ID5hY3R1YWwuc2FuaXRpemVkIDxhY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbC5zYW5pdGl6ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG90ZG90IGlzIGEgcGFyZW50IGRpcmVjdG9yeScgJworCW1rZGlyIC1wIGEvYiAmJgorCSggZWNobyBzaXh0aCAmJiBlY2hvIGZpZnRoICkgPmV4cGVjdCAmJgorCSggY2QgYS9iICYmIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLi4gKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbG9nIC0tZ3JhcGggLS1zaG93LXNpZ25hdHVyZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCWdpdCBjaGVja291dCAtYiBzaWduZWQgbWFzdGVyICYmCisJZWNobyBmb28gPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtUyAtbSBzaWduZWRfY29tbWl0ICYmCisJZ2l0IGxvZyAtLWdyYXBoIC0tc2hvdy1zaWduYXR1cmUgLW4xIHNpZ25lZCA+YWN0dWFsICYmCisJZ3JlcCAiXnwgZ3BnOiBTaWduYXR1cmUgbWFkZSIgYWN0dWFsICYmCisJZ3JlcCAiXnwgZ3BnOiBHb29kIHNpZ25hdHVyZSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdsb2cgLS1ncmFwaCAtLXNob3ctc2lnbmF0dXJlIGZvciBtZXJnZWQgdGFnJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkICYmIGdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHBsYWluIG1hc3RlciAmJgorCWVjaG8gYWFhID5iYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBjb21taXQgLW0gYmFyX2NvbW1pdCAmJgorCWdpdCBjaGVja291dCAtYiB0YWdnZWQgbWFzdGVyICYmCisJZWNobyBiYmIgPmJheiAmJgorCWdpdCBhZGQgYmF6ICYmCisJZ2l0IGNvbW1pdCAtbSBiYXpfY29tbWl0ICYmCisJZ2l0IHRhZyAtcyAtbSBzaWduZWRfdGFnX21zZyBzaWduZWRfdGFnICYmCisJZ2l0IGNoZWNrb3V0IHBsYWluICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgLW0gbXNnIHNpZ25lZF90YWcgJiYKKwlnaXQgbG9nIC0tZ3JhcGggLS1zaG93LXNpZ25hdHVyZSAtbjEgcGxhaW4gPmFjdHVhbCAmJgorCWdyZXAgIl58XFxcICBtZXJnZWQgdGFnIiBhY3R1YWwgJiYKKwlncmVwICJefCB8IGdwZzogU2lnbmF0dXJlIG1hZGUiIGFjdHVhbCAmJgorCWdyZXAgIl58IHwgZ3BnOiBHb29kIHNpZ25hdHVyZSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyYXBoIC0tbm8td2FsayBpcyBmb3JiaWRkZW4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC0tZ3JhcGggLS1uby13YWxrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBkaWFnbm9zZXMgYm9ndXMgSEVBRCcgJworCWdpdCBpbml0IGVtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGVtcHR5IGxvZyAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgZG9lcy5ub3QuaGF2ZS5hbnkuY29tbWl0cyBzdGRlcnIgJiYKKwllY2hvIDEyMzRhYmNkID5lbXB0eS8uZ2l0L3JlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGVtcHR5IGxvZyAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgYnJva2VuIHN0ZGVyciAmJgorCWVjaG8gInJlZjogcmVmcy9oZWFkcy9pbnZhbGlkLmxvY2siID5lbXB0eS8uZ2l0L0hFQUQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLUMgZW1wdHkgbG9nIDI+c3RkZXJyICYmCisJdGVzdF9pMThuZ3JlcCBicm9rZW4gc3RkZXJyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGVtcHR5IGxvZyAtLWRlZmF1bHQgdG90YWxseS1ib2d1cyAyPnN0ZGVyciAmJgorCXRlc3RfaTE4bmdyZXAgYnJva2VuIHN0ZGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDMtbWFpbG1hcC5zaCBiL3QvdDQyMDMtbWFpbG1hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZGQ4YjY1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIwMy1tYWlsbWFwLnNoCkBAIC0wLDAgKzEsNDk4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nLm1haWxtYXAgY29uZmlndXJhdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitmdXp6X2JsYW1lICgpIHsKKwlzZWQgIgorCQlzLyRfeDA1WzAtOWEtZl1bMC05YS1mXVswLTlhLWZdL09CSklEL2cKKwkJcy8kX3gwNVswLTlhLWZdWzAtOWEtZl0vT0JKSS9nCisJCXMvWy0wLTldXHsxMFx9IFs6MC05XVx7OFx9IFstK11bMC05XVx7NFx9L0RBVEUvZworCSIgIiRAIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwljYXQgPmNvbnRhY3RzIDw8LVxFT0YgJiYKKwlBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCW5pY2sxIDxidWdzQGNvbXBhbnkueHg+CisJRU9GCisKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIHR3byA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAibmljazEgPGJ1Z3NAY29tcGFueS54eD4iIC1tIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjay1tYWlsbWFwIG5vIGFyZ3VtZW50cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVjay1tYWlsbWFwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrLW1haWxtYXAgYXJndW1lbnRzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJbmljazEgPGJ1Z3NAY29tcGFueS54eD4KKwlFT0YKKwlnaXQgY2hlY2stbWFpbG1hcCBcCisJCSJBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiIgXAorCQkibmljazEgPGJ1Z3NAY29tcGFueS54eD4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrLW1haWxtYXAgLS1zdGRpbicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCW5pY2sxIDxidWdzQGNvbXBhbnkueHg+CisJRU9GCisJZ2l0IGNoZWNrLW1haWxtYXAgLS1zdGRpbiA8Y29udGFjdHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2stbWFpbG1hcCAtLXN0ZGluIGFyZ3VtZW50cycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlJbnRlcm5hbCBHdXkgPGJ1Z3NAY29tcGFueS54eT4KKwlFT0YKKwljYXQgPGNvbnRhY3RzID4+ZXhwZWN0ICYmCisJZ2l0IGNoZWNrLW1haWxtYXAgLS1zdGRpbiAiSW50ZXJuYWwgR3V5IDxidWdzQGNvbXBhbnkueHk+IiBcCisJCTxjb250YWN0cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjay1tYWlsbWFwIGJvZ3VzIGNvbnRhY3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2stbWFpbG1hcCBib2d1cworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK0EgVSBUaG9yICgxKToKKyAgICAgIGluaXRpYWwKKworbmljazEgKDEpOgorICAgICAgc2Vjb25kCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdObyBtYWlsbWFwJyAnCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitSZXBvIEd1eSAoMSk6CisgICAgICBpbml0aWFsCisKK25pY2sxICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCAubWFpbG1hcCcgJworCWVjaG8gIlJlcG8gR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+IC5tYWlsbWFwICYmCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBVc2luZyBhIG1haWxtYXAgZmlsZSBpbiBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgcmVwbyBoZXJlLCBidXQKKyMgY291bGQganVzdCBhcyB3ZWxsIGhhdmUgYmVlbiBhIGZpbGUgb3V0c2lkZSBvZiB0aGUgcmVwb3NpdG9yeQorY2F0ID5leHBlY3QgPDxcRU9GCitJbnRlcm5hbCBHdXkgKDEpOgorICAgICAgc2Vjb25kCisKK1JlcG8gR3V5ICgxKToKKyAgICAgIGluaXRpYWwKKworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmZpbGUgc2V0JyAnCisJbWtkaXIgLXAgaW50ZXJuYWxfbWFpbG1hcCAmJgorCWVjaG8gIkludGVybmFsIEd1eSA8YnVnc0Bjb21wYW55Lnh4PiIgPiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZ2l0IGNvbmZpZyBtYWlsbWFwLmZpbGUgaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorRXh0ZXJuYWwgR3V5ICgxKToKKyAgICAgIGluaXRpYWwKKworSW50ZXJuYWwgR3V5ICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxtYXAuZmlsZSBvdmVycmlkZScgJworCWVjaG8gIkV4dGVybmFsIEd1eSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBjb25maWcgbWFpbG1hcC5maWxlIGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK1JlcG8gR3V5ICgxKToKKyAgICAgIGluaXRpYWwKKworbmljazEgKDEpOgorICAgICAgc2Vjb25kCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmZpbGUgbm9uLWV4aXN0ZW50JyAnCisJcm0gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCXJtZGlyIGludGVybmFsX21haWxtYXAgJiYKKwlnaXQgc2hvcnRsb2cgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK0ludGVybmFsIEd1eSAoMSk6CisgICAgICBzZWNvbmQKKworUmVwbyBHdXkgKDEpOgorICAgICAgaW5pdGlhbAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmFtZSBlbnRyeSBhZnRlciBlbWFpbCBlbnRyeScgJworCW1rZGlyIC1wIGludGVybmFsX21haWxtYXAgJiYKKwllY2hvICI8YnVnc0Bjb21wYW55Lnh5PiA8YnVnc0Bjb21wYW55Lnh4PiIgPmludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJJbnRlcm5hbCBHdXkgPGJ1Z3NAY29tcGFueS54eD4iID4+aW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorSW50ZXJuYWwgR3V5ICgxKToKKyAgICAgIHNlY29uZAorCitSZXBvIEd1eSAoMSk6CisgICAgICBpbml0aWFsCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYW1lIGVudHJ5IGFmdGVyIGVtYWlsIGVudHJ5LCBjYXNlLWluc2Vuc2l0aXZlJyAnCisJbWtkaXIgLXAgaW50ZXJuYWxfbWFpbG1hcCAmJgorCWVjaG8gIjxidWdzQGNvbXBhbnkueHk+IDxidWdzQGNvbXBhbnkueHg+IiA+aW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWVjaG8gIkludGVybmFsIEd1eSA8QlVHU0BDb21wYW55Lnh4PiIgPj5pbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZ2l0IHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitBIFUgVGhvciAoMSk6CisgICAgICBpbml0aWFsCisKK25pY2sxICgxKToKKyAgICAgIHNlY29uZAorCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05vIG1haWxtYXAgZmlsZXMsIGJ1dCBjb25maWd1cmVkJyAnCisJcm0gLWYgLm1haWxtYXAgaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWdpdCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG1haWxtYXAgYmxvYiB0ZXN0cycgJworCWdpdCBjaGVja291dCAtYiBtYXAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJY2F0ID5qdXN0LWJ1Z3MgPDwtXEVPRiAmJgorCUJsb2IgR3V5IDxidWdzQGNvbXBhbnkueHg+CisJRU9GCisJY2F0ID5ib3RoIDw8LVxFT0YgJiYKKwlCbG9iIEd1eSA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUJsb2IgR3V5IDxidWdzQGNvbXBhbnkueHg+CisJRU9GCisJcHJpbnRmICJUcmlja3kgR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+bm8tbmV3bGluZSAmJgorCWdpdCBhZGQganVzdC1idWdzIGJvdGggbm8tbmV3bGluZSAmJgorCWdpdCBjb21taXQgLW0gIm15IG1haWxtYXBzIiAmJgorCWVjaG8gIlJlcG8gR3V5IDxhdXRob3JAZXhhbXBsZS5jb20+IiA+Lm1haWxtYXAgJiYKKwllY2hvICJJbnRlcm5hbCBHdXkgPGF1dGhvckBleGFtcGxlLmNvbT4iID5pbnRlcm5hbC5tYXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5ibG9iIHNldCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlCbG9iIEd1eSAoMSk6CisJICAgICAgc2Vjb25kCisKKwlSZXBvIEd1eSAoMSk6CisJICAgICAgaW5pdGlhbAorCisJRU9GCisJZ2l0IC1jIG1haWxtYXAuYmxvYj1tYXA6anVzdC1idWdzIHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5ibG9iIG92ZXJyaWRlcyAubWFpbG1hcCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlCbG9iIEd1eSAoMik6CisJICAgICAgaW5pdGlhbAorCSAgICAgIHNlY29uZAorCisJRU9GCisJZ2l0IC1jIG1haWxtYXAuYmxvYj1tYXA6Ym90aCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxtYXAuZmlsZSBvdmVycmlkZXMgbWFpbG1hcC5ibG9iJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCUJsb2IgR3V5ICgxKToKKwkgICAgICBzZWNvbmQKKworCUludGVybmFsIEd1eSAoMSk6CisJICAgICAgaW5pdGlhbAorCisJRU9GCisJZ2l0IFwKKwkgIC1jIG1haWxtYXAuYmxvYj1tYXA6Ym90aCBcCisJICAtYyBtYWlsbWFwLmZpbGU9aW50ZXJuYWwubWFwIFwKKwkgIHNob3J0bG9nIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbG1hcC5ibG9iIGNhbiBiZSBtaXNzaW5nJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCVJlcG8gR3V5ICgxKToKKwkgICAgICBpbml0aWFsCisKKwluaWNrMSAoMSk6CisJICAgICAgc2Vjb25kCisKKwlFT0YKKwlnaXQgLWMgbWFpbG1hcC5ibG9iPW1hcDpub25leGlzdGVudCBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxtYXAuYmxvYiBkZWZhdWx0cyB0byBvZmYgaW4gbm9uLWJhcmUgcmVwbycgJworCWdpdCBpbml0IG5vbi1iYXJlICYmCisJKAorCQljZCBub24tYmFyZSAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgLm1haWxtYXAgIkZha2UgTmFtZSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgJiYKKwkJZWNobyAiICAgICAxCUZha2UgTmFtZSIgPmV4cGVjdCAmJgorCQlnaXQgc2hvcnRsb2cgLW5zIEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXJtIC5tYWlsbWFwICYmCisJCWVjaG8gIiAgICAgMQlBIFUgVGhvciIgPmV4cGVjdCAmJgorCQlnaXQgc2hvcnRsb2cgLW5zIEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmJsb2IgZGVmYXVsdHMgdG8gSEVBRDoubWFpbG1hcCBpbiBiYXJlIHJlcG8nICcKKwlnaXQgY2xvbmUgLS1iYXJlIG5vbi1iYXJlIGJhcmUgJiYKKwkoCisJCWNkIGJhcmUgJiYKKwkJZWNobyAiICAgICAxCUZha2UgTmFtZSIgPmV4cGVjdCAmJgorCQlnaXQgc2hvcnRsb2cgLW5zIEhFQUQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsbWFwLmJsb2IgY2FuIGhhbmRsZSBibG9icyB3aXRob3V0IHRyYWlsaW5nIG5ld2xpbmUnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJVHJpY2t5IEd1eSAoMSk6CisJICAgICAgaW5pdGlhbAorCisJbmljazEgKDEpOgorCSAgICAgIHNlY29uZAorCisJRU9GCisJZ2l0IC1jIG1haWxtYXAuYmxvYj1tYXA6bm8tbmV3bGluZSBzaG9ydGxvZyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgYWZ0ZXIgbWFpbG1hcC5ibG9iIHRlc3RzJyAnCisJcm0gLWYgLm1haWxtYXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlLWNoYXJhY3RlciBuYW1lJyAnCisJZWNobyAiICAgICAxCUEgPGF1dGhvckBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwllY2hvICIgICAgIDEJbmljazEgPGJ1Z3NAY29tcGFueS54eD4iID4+ZXhwZWN0ICYmCisJZWNobyAiQSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgPi5tYWlsbWFwICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAubWFpbG1hcCIgJiYKKwlnaXQgc2hvcnRsb2cgLWVzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgY2Fub25pY2FsIGVtYWlsIGNhc2UnICcKKwllY2hvICIgICAgIDEJQSBVIFRob3IgPEFVVEhPUkBleGFtcGxlLmNvbT4iID5leHBlY3QgJiYKKwllY2hvICIgICAgIDEJbmljazEgPGJ1Z3NAY29tcGFueS54eD4iID4+ZXhwZWN0ICYmCisJZWNobyAiPEFVVEhPUkBleGFtcGxlLmNvbT4gPGF1dGhvckBleGFtcGxlLmNvbT4iID4ubWFpbG1hcCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLm1haWxtYXAiICYmCisJZ2l0IHNob3J0bG9nIC1lcyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgRXh0ZW5kZWQgbWFpbG1hcCBjb25maWd1cmF0aW9ucyBzaG91bGQgZ2l2ZSB1cyB0aGUgZm9sbG93aW5nIG91dHB1dCBmb3Igc2hvcnRsb2cKK2NhdCA+ZXhwZWN0IDw8XEVPRgorQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gKDEpOgorICAgICAgaW5pdGlhbAorCitDVE8gPGN0b0Bjb21wYW55Lnh4PiAoMSk6CisgICAgICBzZXZlbnRoCisKK090aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PiAoMik6CisgICAgICB0aGlyZAorICAgICAgZm91cnRoCisKK1NhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+ICgyKToKKyAgICAgIGZpZnRoCisgICAgICBzaXh0aAorCitTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4gKDEpOgorICAgICAgc2Vjb25kCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTaG9ydGxvZyBvdXRwdXQgKGNvbXBsZXggbWFwcGluZyknICcKKwllY2hvIHRocmVlID4+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJuaWNrMiA8YnVnc0Bjb21wYW55Lnh4PiIgLW0gdGhpcmQgJiYKKworCWVjaG8gZm91ciA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAibmljazIgPG5pY2syQGNvbXBhbnkueHg+IiAtbSBmb3VydGggJiYKKworCWVjaG8gZml2ZSA+Pm9uZSAmJgorCWdpdCBhZGQgb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAic2FudGEgPG1lQGNvbXBhbnkueHg+IiAtbSBmaWZ0aCAmJgorCisJZWNobyBzaXggPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgImNsYXVzIDxtZUBjb21wYW55Lnh4PiIgLW0gc2l4dGggJiYKKworCWVjaG8gc2V2ZW4gPj5vbmUgJiYKKwlnaXQgYWRkIG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIkNUTyA8Y3RvQGNvb21wYW55Lnh4PiIgLW0gc2V2ZW50aCAmJgorCisJbWtkaXIgLXAgaW50ZXJuYWxfbWFpbG1hcCAmJgorCWVjaG8gIkNvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiIgPiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiPGN0b0Bjb21wYW55Lnh4PiAgICAgICAgICAgICAgICAgICAgICAgPGN0b0Bjb29tcGFueS54eD4iID4+IGludGVybmFsX21haWxtYXAvLm1haWxtYXAgJiYKKwllY2hvICJTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4gICAgICAgICBuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiIgPj4gaW50ZXJuYWxfbWFpbG1hcC8ubWFpbG1hcCAmJgorCWVjaG8gIk90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PiAgIG5pY2syIDxidWdzQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+ICAgICAgICAgPG5pY2syQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4gPG1lQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisJZWNobyAiU2FudGEgQ2xhdXMgPHNhbnRhLmNsYXVzQG5vcnRocG9sZS54eD4gPG1lQGNvbXBhbnkueHg+IiA+PiBpbnRlcm5hbF9tYWlsbWFwLy5tYWlsbWFwICYmCisKKwlnaXQgc2hvcnRsb2cgLWUgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKKyMgZ2l0IGxvZyB3aXRoIC0tcHJldHR5IGZvcm1hdCB3aGljaCB1c2VzIHRoZSBuYW1lIGFuZCBlbWFpbCBtYWlsbWFwIHBsYWNlbWFya2VycworY2F0ID5leHBlY3QgPDxcRU9GCitBdXRob3IgQ1RPIDxjdG9AY29vbXBhbnkueHg+IG1hcHMgdG8gQ1RPIDxjdG9AY29tcGFueS54eD4KK0NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisKK0F1dGhvciBjbGF1cyA8bWVAY29tcGFueS54eD4gbWFwcyB0byBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKworQXV0aG9yIHNhbnRhIDxtZUBjb21wYW55Lnh4PiBtYXBzIHRvIFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CitDb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCitBdXRob3IgbmljazIgPG5pY2syQGNvbXBhbnkueHg+IG1hcHMgdG8gT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CitDb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBtYXBzIHRvIENvbW1pdHRlZCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCitBdXRob3IgbmljazIgPGJ1Z3NAY29tcGFueS54eD4gbWFwcyB0byBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KK0NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisKK0F1dGhvciBuaWNrMSA8YnVnc0Bjb21wYW55Lnh4PiBtYXBzIHRvIFNvbWUgRHVkZSA8c29tZUBkdWRlLnh4PgorQ29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gbWFwcyB0byBDb21taXR0ZWQgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKworQXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IG1hcHMgdG8gQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4KK0NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IG1hcHMgdG8gQ29tbWl0dGVkIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTG9nIG91dHB1dCAoY29tcGxleCBtYXBwaW5nKScgJworCWdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiJBdXRob3IgJWFuIDwlYWU+IG1hcHMgdG8gJWFOIDwlYUU+JW5Db21taXR0ZXIgJWNuIDwlY2U+IG1hcHMgdG8gJWNOIDwlY0U+JW4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorQXV0aG9yOiBDVE8gPGN0b0Bjb21wYW55Lnh4PgorQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQXV0aG9yOiBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KK0F1dGhvcjogT3RoZXIgQXV0aG9yIDxvdGhlckBhdXRob3IueHg+CitBdXRob3I6IFNvbWUgRHVkZSA8c29tZUBkdWRlLnh4PgorQXV0aG9yOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0xvZyBvdXRwdXQgd2l0aCAtLXVzZS1tYWlsbWFwJyAnCisJZ2l0IGxvZyAtLXVzZS1tYWlsbWFwIHwgZ3JlcCBBdXRob3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitBdXRob3I6IENUTyA8Y3RvQGNvbXBhbnkueHg+CitBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CitBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CitBdXRob3I6IE90aGVyIEF1dGhvciA8b3RoZXJAYXV0aG9yLnh4PgorQXV0aG9yOiBPdGhlciBBdXRob3IgPG90aGVyQGF1dGhvci54eD4KK0F1dGhvcjogU29tZSBEdWRlIDxzb21lQGR1ZGUueHg+CitBdXRob3I6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTG9nIG91dHB1dCB3aXRoIGxvZy5tYWlsbWFwJyAnCisJZ2l0IC1jIGxvZy5tYWlsbWFwPVRydWUgbG9nIHwgZ3JlcCBBdXRob3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CitBdXRob3I6IFNhbnRhIENsYXVzIDxzYW50YS5jbGF1c0Bub3J0aHBvbGUueHg+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR3JlcCBhdXRob3Igd2l0aCAtLXVzZS1tYWlsbWFwJyAnCisJZ2l0IGxvZyAtLXVzZS1tYWlsbWFwIC0tYXV0aG9yIFNhbnRhIHwgZ3JlcCBBdXRob3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK2NhdCA+ZXhwZWN0IDw8XEVPRgorQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorQXV0aG9yOiBTYW50YSBDbGF1cyA8c2FudGEuY2xhdXNAbm9ydGhwb2xlLnh4PgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0dyZXAgYXV0aG9yIHdpdGggbG9nLm1haWxtYXAnICcKKwlnaXQgLWMgbG9nLm1haWxtYXA9VHJ1ZSBsb2cgLS1hdXRob3IgU2FudGEgfCBncmVwIEF1dGhvciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCis+ZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ09ubHkgZ3JlcCByZXBsYWNlZCBhdXRob3Igd2l0aCAtLXVzZS1tYWlsbWFwJyAnCisJZ2l0IGxvZyAtLXVzZS1tYWlsbWFwIC0tYXV0aG9yICI8Y3RvQGNvb21wYW55Lnh4PiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBnaXQgYmxhbWUKK2NhdCA+ZXhwZWN0IDw8XEVPRgorXk9CSkkgKEEgVSBUaG9yICAgICBEQVRFIDEpIG9uZQorT0JKSUQgKFNvbWUgRHVkZSAgICBEQVRFIDIpIHR3bworT0JKSUQgKE90aGVyIEF1dGhvciBEQVRFIDMpIHRocmVlCitPQkpJRCAoT3RoZXIgQXV0aG9yIERBVEUgNCkgZm91cgorT0JKSUQgKFNhbnRhIENsYXVzICBEQVRFIDUpIGZpdmUKK09CSklEIChTYW50YSBDbGF1cyAgREFURSA2KSBzaXgKK09CSklEIChDVE8gICAgICAgICAgREFURSA3KSBzZXZlbgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCbGFtZSBvdXRwdXQgKGNvbXBsZXggbWFwcGluZyknICcKKwlnaXQgYmxhbWUgb25lID5hY3R1YWwgJiYKKwlmdXp6X2JsYW1lIGFjdHVhbCA+YWN0dWFsLmZ1enogJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZ1enoKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitTb21lIER1ZGUgPHNvbWVAZHVkZS54eD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1hdXRob3IgaG9ub3JzIG1haWxtYXAnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tYXV0aG9yICJuaWNrIiAtLWFsbG93LWVtcHR5IC1tZWlnaHQgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJTb21lIER1ZGUiIC0tYWxsb3ctZW1wdHkgLW1laWdodCAmJgorCWdpdCBzaG93IC0tcHJldHR5PWZvcm1hdDoiJWFuIDwlYWU+JW4iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDIwNC1wYXRjaC1pZC5zaCBiL3QvdDQyMDQtcGF0Y2gtaWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmFhOWQzYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDQtcGF0Y2gtaWQuc2gKQEAgLTAsMCArMSwxODIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcGF0Y2gtaWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWFzPSJhIGEgYSBhIGEgYSBhIGEiICYmICMgZWlnaHQgYQorCXRlc3Rfd3JpdGVfbGluZXMgJGFzID5mb28gJiYKKwl0ZXN0X3dyaXRlX2xpbmVzICRhcyA+YmFyICYmCisJZ2l0IGFkZCBmb28gYmFyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBpbml0aWFsICYmCisJdGVzdF93cml0ZV9saW5lcyAkYXMgYiA+Zm9vICYmCisJdGVzdF93cml0ZV9saW5lcyAkYXMgYiA+YmFyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBmaXJzdCAmJgorCWdpdCBjaGVja291dCAtYiBzYW1lIG1hc3RlciAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSBzYW1lLW1zZyAmJgorCWdpdCBjaGVja291dCAtYiBub3RzYW1lIG1hc3RlciAmJgorCWVjaG8gYyA+Zm9vICYmCisJZWNobyBjID5iYXIgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLWEgLW0gbm90c2FtZS1tc2cgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIGJhciBmb28gPmJhci10aGVuLWZvbyAmJgorCXRlc3Rfd3JpdGVfbGluZXMgZm9vIGJhciA+Zm9vLXRoZW4tYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLWlkIG91dHB1dCBpcyB3ZWxsLWZvcm1lZCcgJworCWdpdCBsb2cgLXAgLTEgfCBnaXQgcGF0Y2gtaWQgPm91dHB1dCAmJgorCWdyZXAgIl5bYS1mMC05XVx7NDBcfSAkKGdpdCByZXYtcGFyc2UgSEVBRCkkIiBvdXRwdXQKKycKKworI2NhbGN1bGF0ZSBwYXRjaCBpZC4gTWFrZSBzdXJlIG91dHB1dCBpcyBub3QgZW1wdHkuCitjYWxjX3BhdGNoX2lkICgpIHsKKwluYW1lPSIkMSIKKwlzaGlmdAorCWdpdCBwYXRjaC1pZCAiJEAiIHwKKwlzZWQgInMvIC4qLy8iID5wYXRjaC1pZF8iJG5hbWUiICYmCisJdGVzdF9saW5lX2NvdW50IC1ndCAwIHBhdGNoLWlkXyIkbmFtZSIKK30KKworZ2V0X3RvcF9kaWZmICgpIHsKKwlnaXQgbG9nIC1wIC0xICIkQCIgLU8gYmFyLXRoZW4tZm9vIC0tCit9CisKK2dldF9wYXRjaF9pZCAoKSB7CisJZ2V0X3RvcF9kaWZmICIkMSIgfCBjYWxjX3BhdGNoX2lkICIkQCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgZGV0ZWN0cyBlcXVhbGl0eScgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnZXRfcGF0Y2hfaWQgc2FtZSAmJgorCXRlc3RfY21wIHBhdGNoLWlkX21hc3RlciBwYXRjaC1pZF9zYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoLWlkIGRldGVjdHMgaW5lcXVhbGl0eScgJworCWdldF9wYXRjaF9pZCBtYXN0ZXIgJiYKKwlnZXRfcGF0Y2hfaWQgbm90c2FtZSAmJgorCSEgdGVzdF9jbXAgcGF0Y2gtaWRfbWFzdGVyIHBhdGNoLWlkX25vdHNhbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2gtaWQgc3VwcG9ydHMgZ2l0LWZvcm1hdC1wYXRjaCBvdXRwdXQnICcKKwlnZXRfcGF0Y2hfaWQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IHNhbWUgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IHwgY2FsY19wYXRjaF9pZCBzYW1lICYmCisJdGVzdF9jbXAgcGF0Y2gtaWRfbWFzdGVyIHBhdGNoLWlkX3NhbWUgJiYKKwlzZXQgJChnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0IHwgZ2l0IHBhdGNoLWlkKSAmJgorCXRlc3QgIiQyIiA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aGl0ZXNwYWNlIGlzIGlycmVsZXZhbnQgaW4gZm9vdGVyJyAnCisJZ2V0X3BhdGNoX2lkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBzYW1lICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXN0ZG91dCB8IHNlZCAicy8gXCQvLyIgfCBjYWxjX3BhdGNoX2lkIHNhbWUgJiYKKwl0ZXN0X2NtcCBwYXRjaC1pZF9tYXN0ZXIgcGF0Y2gtaWRfc2FtZQorJworCitjbXBfcGF0Y2hfaWQgKCkgeworCWlmCisJCXRlc3QgIiQxIiA9ICJyZWxldmFudCIKKwl0aGVuCisJCSEgdGVzdF9jbXAgcGF0Y2gtaWRfIiQyIiBwYXRjaC1pZF8iJDMiCisJZWxzZQorCQl0ZXN0X2NtcCBwYXRjaC1pZF8iJDIiIHBhdGNoLWlkXyIkMyIKKwlmaQorfQorCit0ZXN0X3BhdGNoX2lkX2ZpbGVfb3JkZXIgKCkgeworCXJlbGV2YW50PSIkMSIKKwlzaGlmdAorCW5hbWU9Im9yZGVyLSR7MX0tJHJlbGV2YW50IgorCXNoaWZ0CisJZ2V0X3RvcF9kaWZmICJtYXN0ZXIiIHwgY2FsY19wYXRjaF9pZCAiJG5hbWUiICIkQCIgJiYKKwlnaXQgY2hlY2tvdXQgc2FtZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLS1zdGRvdXQgLU8gZm9vLXRoZW4tYmFyIHwKKwkJY2FsY19wYXRjaF9pZCAib3JkZXJlZC0kbmFtZSIgIiRAIiAmJgorCWNtcF9wYXRjaF9pZCAkcmVsZXZhbnQgIiRuYW1lIiAib3JkZXJlZC0kbmFtZSIKKworfQorCisjIGNvbWJpbmVkIHRlc3QgZm9yIG9wdGlvbnM6IGFkZCBtb3JlIHRlc3RzIGhlcmUgdG8gbWFrZSB0aGVtCisjIHJ1biB3aXRoIGFsbCBvcHRpb25zCit0ZXN0X3BhdGNoX2lkICgpIHsKKwl0ZXN0X3BhdGNoX2lkX2ZpbGVfb3JkZXIgIiRAIgorfQorCisjIHNtYWxsIHRlc3RzIHdpdGggZGV0YWlsZWQgZGlhZ25vc3RpYyBmb3IgYmFzaWMgb3B0aW9ucy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgb3JkZXIgaXMgaXJyZWxldmFudCB3aXRoIC0tc3RhYmxlJyAnCisJdGVzdF9wYXRjaF9pZF9maWxlX29yZGVyIGlycmVsZXZhbnQgLS1zdGFibGUgLS1zdGFibGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBvcmRlciBpcyByZWxldmFudCB3aXRoIC0tdW5zdGFibGUnICcKKwl0ZXN0X3BhdGNoX2lkX2ZpbGVfb3JkZXIgcmVsZXZhbnQgLS11bnN0YWJsZSAtLXVuc3RhYmxlCisnCisKKyNOb3cgdGVzdCB2YXJpb3VzIG9wdGlvbiBjb21iaW5hdGlvbnMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IGlzIHVuc3RhYmxlJyAnCisJdGVzdF9wYXRjaF9pZCByZWxldmFudCBkZWZhdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGNoaWQuc3RhYmxlID0gdHJ1ZSBpcyBzdGFibGUnICcKKwl0ZXN0X2NvbmZpZyBwYXRjaGlkLnN0YWJsZSB0cnVlICYmCisJdGVzdF9wYXRjaF9pZCBpcnJlbGV2YW50IHBhdGNoaWQuc3RhYmxlPXRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0Y2hpZC5zdGFibGUgPSBmYWxzZSBpcyB1bnN0YWJsZScgJworCXRlc3RfY29uZmlnIHBhdGNoaWQuc3RhYmxlIGZhbHNlICYmCisJdGVzdF9wYXRjaF9pZCByZWxldmFudCBwYXRjaGlkLnN0YWJsZT1mYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXVuc3RhYmxlIG92ZXJyaWRlcyBwYXRjaGlkLnN0YWJsZSA9IHRydWUnICcKKwl0ZXN0X2NvbmZpZyBwYXRjaGlkLnN0YWJsZSB0cnVlICYmCisJdGVzdF9wYXRjaF9pZCByZWxldmFudCBwYXRjaGlkLnN0YWJsZT10cnVlLS11bnN0YWJsZSAtLXVuc3RhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3RhYmxlIG92ZXJyaWRlcyBwYXRjaGlkLnN0YWJsZSA9IGZhbHNlJyAnCisJdGVzdF9jb25maWcgcGF0Y2hpZC5zdGFibGUgZmFsc2UgJiYKKwl0ZXN0X3BhdGNoX2lkIGlycmVsZXZhbnQgcGF0Y2hpZC5zdGFibGU9ZmFsc2UtLXN0YWJsZSAtLXN0YWJsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaC1pZCBzdXBwb3J0cyBnaXQtZm9ybWF0LXBhdGNoIE1JTUUgb3V0cHV0JyAnCisJZ2V0X3BhdGNoX2lkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBzYW1lICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLWF0dGFjaCAtLXN0ZG91dCB8IGNhbGNfcGF0Y2hfaWQgc2FtZSAmJgorCXRlc3RfY21wIHBhdGNoLWlkX21hc3RlciBwYXRjaC1pZF9zYW1lCisnCisKK2NhdCA+bm9ubCA8PFxFT0YKK2RpZmYgLS1naXQgaS9hIHcvYQoraW5kZXggZTY5ZGUyOS4uMmU2NWVmZSAxMDA2NDQKKy0tLSBpL2EKKysrKyB3L2EKK0BAIC0wLDAgKzEgQEAKKythCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgaS9iIHcvYgoraW5kZXggZTY5ZGUyOS4uNjE3ODA3OSAxMDA2NDQKKy0tLSBpL2IKKysrKyB3L2IKK0BAIC0wLDAgKzEgQEAKKytiCitFT0YKKworY2F0ID53aXRobmwgPDxcRU9GCitkaWZmIC0tZ2l0IGkvYSB3L2EKK2luZGV4IGU2OWRlMjkuLjc4OTgxOTIgMTAwNjQ0CistLS0gaS9hCisrKysgdy9hCitAQCAtMCwwICsxIEBACisrYQorZGlmZiAtLWdpdCBpL2Igdy9iCitpbmRleCBlNjlkZTI5Li42MTc4MDc5IDEwMDY0NAorLS0tIGkvYgorKysrIHcvYgorQEAgLTAsMCArMSBAQAorK2IKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXRjaC1pZCBoYW5kbGVzIG5vLW5sLWF0LWVvZiBtYXJrZXJzJyAnCisJY2F0IG5vbmwgfCBjYWxjX3BhdGNoX2lkIG5vbmwgJiYKKwljYXQgd2l0aG5sIHwgY2FsY19wYXRjaF9pZCB3aXRobmwgJiYKKwl0ZXN0X2NtcCBwYXRjaC1pZF9ub25sIHBhdGNoLWlkX3dpdGhubAorJwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaCBiL3QvdDQyMDUtbG9nLXByZXR0eS1mb3JtYXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczOTg2MDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjA1LWxvZy1wcmV0dHktZm9ybWF0cy5zaApAQCAtMCwwICsxLDQ3OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCwgV2lsbCBQYWxtZXIKKyMgQ29weXJpZ2h0IChjKSAyMDExLCBBbGV4ZXkgU2h1bWtpbiAoKyBub24tVVRGLTggY29tbWl0IGVuY29kaW5nIHRlc3RzKQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHByZXR0eSBmb3JtYXRzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGVzdGVkIG5vbi1VVEYtOCBlbmNvZGluZwordGVzdF9lbmNvZGluZz0iSVNPODg1OS0xIgorCitzYW1wbGVfdXRmOF9wYXJ0PSQocHJpbnRmICJmXDMwM1wyNDRuZyIpCisKK2NvbW1pdF9tc2cgKCkgeworCSMgU3RyaW5nICJpbml0aWFsLiBpbml0aWFsIiBwYXJ0bHkgaW4gR2VybWFuCisJIyAodHJhbnNsYXRlZCB3aXRoIEdvb2dsZSBUcmFuc2xhdGUpLAorCSMgZW5jb2RlZCBpbiBVVEYtOCwgdXNlZCBhcyBhIGNvbW1pdCBsb2cgbWVzc2FnZSBiZWxvdy4KKwltc2c9ImluaXRpYWwuIGFuJHtzYW1wbGVfdXRmOF9wYXJ0fWxpY2hcbiIKKwlpZiB0ZXN0IC1uICIkMSIKKwl0aGVuCisJCXByaW50ZiAiJG1zZyIgfCBpY29udiAtZiB1dGYtOCAtdCAiJDEiCisJZWxzZQorCQlwcmludGYgIiRtc2ciCisJZmkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJhc2ljIHJlcG9zJyAnCisJPmZvbyAmJgorCT5iYXIgJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRFbmNvZGluZyAkdGVzdF9lbmNvZGluZyAmJgorCWNvbW1pdF9tc2cgJHRlc3RfZW5jb2RpbmcgfCBnaXQgY29tbWl0IC1GIC0gJiYKKwlnaXQgYWRkIGJhciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImFkZCBiYXIiICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0RW5jb2RpbmcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgYnVpbHRpbiBmb3JtYXQnICcKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyBwcmV0dHkudGVzdC1hbGlhcyBvbmVsaW5lICYmCisJZ2l0IGxvZyAtLXByZXR0eT10ZXN0LWFsaWFzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgbWFza2luZyBidWlsdGluIGZvcm1hdCcgJworCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIHByZXR0eS5vbmVsaW5lICIlSCIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyB1c2VyLWRlZmluZWQgZm9ybWF0JyAnCisJZ2l0IGxvZyAtLXByZXR0eT0iZm9ybWF0OiVoIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWFsaWFzICJmb3JtYXQ6JWgiICYmCisJZ2l0IGxvZyAtLXByZXR0eT10ZXN0LWFsaWFzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgdXNlci1kZWZpbmVkIHRmb3JtYXQgd2l0aCAlcyAoSVNPODg1OS0xIGVuY29kaW5nKScgJworCWdpdCBjb25maWcgaTE4bi5sb2dPdXRwdXRFbmNvZGluZyAkdGVzdF9lbmNvZGluZyAmJgorCWdpdCBsb2cgLS1vbmVsaW5lID5leHBlY3RlZC1zICYmCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlcyIgPmFjdHVhbC1zICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1zIGFjdHVhbC1zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIHVzZXItZGVmaW5lZCB0Zm9ybWF0IHdpdGggJXMgKHV0Zi04IGVuY29kaW5nKScgJworCWdpdCBsb2cgLS1vbmVsaW5lID5leHBlY3RlZC1zICYmCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlcyIgPmFjdHVhbC1zICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQtcyBhY3R1YWwtcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyB1c2VyLWRlZmluZWQgdGZvcm1hdCcgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWgiID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgcHJldHR5LnRlc3QtYWxpYXMgInRmb3JtYXQ6JWgiICYmCisJZ2l0IGxvZyAtLXByZXR0eT10ZXN0LWFsaWFzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpYXMgbm9uLWV4aXN0ZW50IGZvcm1hdCcgJworCWdpdCBjb25maWcgcHJldHR5LnRlc3QtYWxpYXMgZm9ybWF0LXRoYXQtd2lsbC1uZXZlci1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLS1wcmV0dHk9dGVzdC1hbGlhcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyBvZiBhbiBhbGlhcycgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWgiID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgcHJldHR5LnRlc3QtZm9vICJ0Zm9ybWF0OiVoIiAmJgorCWdpdCBjb25maWcgcHJldHR5LnRlc3QtYmFyIHRlc3QtZm9vICYmCisJZ2l0IGxvZyAtLXByZXR0eT10ZXN0LWJhciA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGlhcyBtYXNraW5nIGFuIGFsaWFzJyAnCisJZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6IlR3byAlSCIgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyBwcmV0dHkuZHVwbGljYXRlICJmb3JtYXQ6T25lICVIIiAmJgorCWdpdCBjb25maWcgLS1hZGQgcHJldHR5LmR1cGxpY2F0ZSAiZm9ybWF0OlR3byAlSCIgJiYKKwlnaXQgbG9nIC0tcHJldHR5PWR1cGxpY2F0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWFzIGxvb3AnICcKKwlnaXQgY29uZmlnIHByZXR0eS50ZXN0LWZvbyB0ZXN0LWJhciAmJgorCWdpdCBjb25maWcgcHJldHR5LnRlc3QtYmFyIHRlc3QtZm9vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtLXByZXR0eT10ZXN0LWZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUwgc2VwYXJhdGlvbicgJworCXByaW50ZiAiYWRkIGJhclwwJChjb21taXRfbXNnKSIgPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAteiAtLXByZXR0eT0iZm9ybWF0OiVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCB0ZXJtaW5hdGlvbicgJworCXByaW50ZiAiYWRkIGJhclwwJChjb21taXRfbXNnKVwwIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC16IC0tcHJldHR5PSJ0Zm9ybWF0OiVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05VTCBzZXBhcmF0aW9uIHdpdGggLS1zdGF0JyAnCisJc3RhdDBfcGFydD0kKGdpdCBkaWZmIC0tc3RhdCBIRUFEXiBIRUFEKSAmJgorCXN0YXQxX3BhcnQ9JChnaXQgZGlmZi10cmVlIC0tbm8tY29tbWl0LWlkIC0tc3RhdCAtLXJvb3QgSEVBRF4pICYmCisJcHJpbnRmICJhZGQgYmFyXG4kc3RhdDBfcGFydFxuXDAkKGNvbW1pdF9tc2cpXG4kc3RhdDFfcGFydFxuIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC16IC0tc3RhdCAtLXByZXR0eT0iZm9ybWF0OiVzIiA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdOVUwgdGVybWluYXRpb24gd2l0aCAtLXN0YXQnICcKKwlzdGF0MF9wYXJ0PSQoZ2l0IGRpZmYgLS1zdGF0IEhFQUReIEhFQUQpICYmCisJc3RhdDFfcGFydD0kKGdpdCBkaWZmLXRyZWUgLS1uby1jb21taXQtaWQgLS1zdGF0IC0tcm9vdCBIRUFEXikgJiYKKwlwcmludGYgImFkZCBiYXJcbiRzdGF0MF9wYXJ0XG5cMCQoY29tbWl0X21zZylcbiRzdGF0MV9wYXJ0XG4wIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgbG9nIC16IC0tc3RhdCAtLXByZXR0eT0idGZvcm1hdDolcyIgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbW9yZSBjb21taXRzJyAnCisJdGVzdF9jb21taXQgIm1lc3NhZ2Ugb25lIiBvbmUgb25lIG1lc3NhZ2Utb25lICYmCisJdGVzdF9jb21taXQgIm1lc3NhZ2UgdHdvIiB0d28gdHdvIG1lc3NhZ2UtdHdvICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgSEVBRH4wKSAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0IEhFQUR+MSkgJiYKKwloZWFkMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCBIRUFEfjIpICYmCisJaGVhZDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQgSEVBRH4zKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCg0MCklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PEVPRiA+ZXhwZWN0ZWQgJiYKK21lc3NhZ2UgdHdvICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKK21lc3NhZ2Ugb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKK2FkZCBiYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFoKKyQoY29tbWl0X21zZykgICAgICAgICAgICAgICAgICAgIFoKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8RU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCittZXNzYWdlIHR3byAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCittZXNzYWdlIG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCithZGQgYmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaCiskKGNvbW1pdF9tc2cpICAgICAgICAgICAgICAgICAgICBaCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyBhdCB0aGUgbnRoIGNvbHVtbicgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJTx8KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8RU9GID5leHBlY3RlZCAmJgorJGhlYWQxIG1lc3NhZ2UgdHdvICAgICAgICAgICAgICAgICAgICBaCiskaGVhZDIgbWVzc2FnZSBvbmUgICAgICAgICAgICAgICAgICAgIFoKKyRoZWFkMyBhZGQgYmFyICAgICAgICAgICAgICAgICAgICAgICAgWgorJGhlYWQ0ICQoY29tbWl0X21zZykgICAgICAgICAgICBaCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyBhdCB0aGUgbnRoIGNvbHVtbi4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolaCAlPHwoNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKyRoZWFkMSBtZXNzYWdlIHR3byAgICAgICAgICAgICAgICAgICAgWgorJGhlYWQyIG1lc3NhZ2Ugb25lICAgICAgICAgICAgICAgICAgICBaCiskaGVhZDMgYWRkIGJhciAgICAgICAgICAgICAgICAgICAgICAgIFoKKyRoZWFkNCAkKGNvbW1pdF9tc2cpICAgICAgICAgICAgWgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xlZnQgYWxpZ25tZW50IGZvcm1hdHRpbmcgd2l0aCBubyBwYWRkaW5nJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxKSVzIiA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3RlZCAmJgorbWVzc2FnZSB0d28KK21lc3NhZ2Ugb25lCithZGQgYmFyCiskKGNvbW1pdF9tc2cpCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMSklcyIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorbWVzc2FnZSB0d28KK21lc3NhZ2Ugb25lCithZGQgYmFyCiskKGNvbW1pdF9tc2cpCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIHRydW5jJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxMCx0cnVuYyklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PEVPRiA+ZXhwZWN0ZWQgJiYKK21lc3NhZ2UgLi4KK21lc3NhZ2UgLi4KK2FkZCBiYXIgIFoKK2luaXRpYWwuLi4KK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggdHJ1bmMuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsdHJ1bmMpJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKK21lc3NhZ2UgLi4KK21lc3NhZ2UgLi4KK2FkZCBiYXIgIFoKK2luaXRpYWwuLi4KK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggbHRydW5jJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxMCxsdHJ1bmMpJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCisuLnNhZ2UgdHdvCisuLnNhZ2Ugb25lCithZGQgYmFyICBaCisuLiR7c2FtcGxlX3V0ZjhfcGFydH1saWNoCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIGx0cnVuYy4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxMCxsdHJ1bmMpJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKKy4uc2FnZSB0d28KKy4uc2FnZSBvbmUKK2FkZCBiYXIgIFoKKy4uJHtzYW1wbGVfdXRmOF9wYXJ0fWxpY2gKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsZWZ0IGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggbXRydW5jJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxMCxtdHJ1bmMpJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCittZXNzLi4gdHdvCittZXNzLi4gb25lCithZGQgYmFyICBaCitpbml0Li5saWNoCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG10cnVuYy4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolPCgxMCxtdHJ1bmMpJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKK21lc3MuLiB0d28KK21lc3MuLiBvbmUKK2FkZCBiYXIgIFoKK2luaXQuLmxpY2gKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZycgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT4oNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCitaICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgdHdvCitaICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Ugb25lCitaICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYmFyCitaICAgICAgICAgICAgICAgICAgICAkKGNvbW1pdF9tc2cpCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT4oNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDxFT0YgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+ZXhwZWN0ZWQgJiYKK1ogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KK1ogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSBvbmUKK1ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZCBiYXIKK1ogICAgICAgICAgICAgICAgICAgICQoY29tbWl0X21zZykKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyBhdCB0aGUgbnRoIGNvbHVtbicgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJT58KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8RU9GID5leHBlY3RlZCAmJgorJGhlYWQxICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgdHdvCiskaGVhZDIgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSBvbmUKKyRoZWFkMyAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIGJhcgorJGhlYWQ0ICAgICAgICAgICAgICAkKGNvbW1pdF9tc2cpCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmlnaHQgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4uIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJT58KDQwKSVzIiA+YWN0dWFsICYmCisJcXpfdG9fdGFiX3NwYWNlIDw8RU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCiskaGVhZDEgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSB0d28KKyRoZWFkMiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIG9uZQorJGhlYWQzICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgYmFyCiskaGVhZDQgICAgICAgICAgICAgICQoY29tbWl0X21zZykKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcnICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+KDEpJXMiID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdGVkICYmCittZXNzYWdlIHR3bworbWVzc2FnZSBvbmUKK2FkZCBiYXIKKyQoY29tbWl0X21zZykKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIG5vIHBhZGRpbmcuIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT4oMSklcyIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorbWVzc2FnZSB0d28KK21lc3NhZ2Ugb25lCithZGQgYmFyCiskKGNvbW1pdF9tc2cpCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nJyAnCisJZ2l0IGxvZyAtLXByZXR0eT0idGZvcm1hdDolPjwoNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCitaICAgICAgICAgICAgIG1lc3NhZ2UgdHdvICAgICAgICAgICAgICBaCitaICAgICAgICAgICAgIG1lc3NhZ2Ugb25lICAgICAgICAgICAgICBaCitaICAgICAgICAgICAgICAgYWRkIGJhciAgICAgICAgICAgICAgICBaCitaICAgICAgICAgJChjb21taXRfbXNnKSAgICAgICAgICBaCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU+PCg0MCklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PEVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorWiAgICAgICAgICAgICBtZXNzYWdlIHR3byAgICAgICAgICAgICAgWgorWiAgICAgICAgICAgICBtZXNzYWdlIG9uZSAgICAgICAgICAgICAgWgorWiAgICAgICAgICAgICAgIGFkZCBiYXIgICAgICAgICAgICAgICAgWgorWiAgICAgICAgICQoY29tbWl0X21zZykgICAgICAgICAgWgorRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZW50ZXIgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4nICcKKwlnaXQgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiVoICU+PHwoNDApJXMiID5hY3R1YWwgJiYKKwlxel90b190YWJfc3BhY2UgPDxFT0YgPmV4cGVjdGVkICYmCiskaGVhZDEgICAgICAgICAgIG1lc3NhZ2UgdHdvICAgICAgICAgIFoKKyRoZWFkMiAgICAgICAgICAgbWVzc2FnZSBvbmUgICAgICAgICAgWgorJGhlYWQzICAgICAgICAgICAgIGFkZCBiYXIgICAgICAgICAgICBaCiskaGVhZDQgICAgICAgJChjb21taXRfbXNnKSAgICAgIFoKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjZW50ZXIgYWxpZ25tZW50IGZvcm1hdHRpbmcgYXQgdGhlIG50aCBjb2x1bW4uIGkxOG4ubG9nT3V0cHV0RW5jb2RpbmcnICcKKwlnaXQgLWMgaTE4bi5sb2dPdXRwdXRFbmNvZGluZz0kdGVzdF9lbmNvZGluZyBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JWggJT48fCg0MCklcyIgPmFjdHVhbCAmJgorCXF6X3RvX3RhYl9zcGFjZSA8PEVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorJGhlYWQxICAgICAgICAgICBtZXNzYWdlIHR3byAgICAgICAgICBaCiskaGVhZDIgICAgICAgICAgIG1lc3NhZ2Ugb25lICAgICAgICAgIFoKKyRoZWFkMyAgICAgICAgICAgICBhZGQgYmFyICAgICAgICAgICAgWgorJGhlYWQ0ICAgICAgICQoY29tbWl0X21zZykgICAgICBaCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggbm8gcGFkZGluZycgJworCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JT48KDEpJXMiID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdGVkICYmCittZXNzYWdlIHR3bworbWVzc2FnZSBvbmUKK2FkZCBiYXIKKyQoY29tbWl0X21zZykKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisjIHNhdmUgSEVBRCdzIFNIQS0xIGRpZ2VzdCAod2l0aCBubyBhYmJyZXZpYXRpb25zKSB0byB1c2UgaXQgYmVsb3cKKyMgYXMgZmFyIGFzIHRoZSBuZXh0IHRlc3QgYW1lbmRzIEhFQUQKK29sZF9oZWFkMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRH4wKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2VudGVyIGFsaWdubWVudCBmb3JtYXR0aW5nIHdpdGggbm8gcGFkZGluZy4gaTE4bi5sb2dPdXRwdXRFbmNvZGluZycgJworCWdpdCAtYyBpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIGxvZyAtLXByZXR0eT0idGZvcm1hdDolPjwoMSklcyIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiB8IGljb252IC1mIHV0Zi04IC10ICR0ZXN0X2VuY29kaW5nID5leHBlY3RlZCAmJgorbWVzc2FnZSB0d28KK21lc3NhZ2Ugb25lCithZGQgYmFyCiskKGNvbW1pdF9tc2cpCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdC9yaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIHN0ZWFsaW5nJyAnCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tIHNob3J0IC0tYXV0aG9yICJsb25nIGxvbmcgbG9uZyA8bG9uZ0BtZS5jb20+IiAmJgorCWdpdCBsb2cgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsdHJ1bmMpJXMlPj4oMTAsbHRydW5jKSUgYW4iID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdGVkICYmCitzaG9ydCBsb25nICBsb25nIGxvbmcKK21lc3NhZ2UgLi4gICBBIFUgVGhvcgorYWRkIGJhciAgICAgIEEgVSBUaG9yCitpbml0aWFsLi4uICAgQSBVIFRob3IKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdC9yaWdodCBhbGlnbm1lbnQgZm9ybWF0dGluZyB3aXRoIHN0ZWFsaW5nLiBpMThuLmxvZ091dHB1dEVuY29kaW5nJyAnCisJZ2l0IC1jIGkxOG4ubG9nT3V0cHV0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmcgbG9nIC0tcHJldHR5PSJ0Zm9ybWF0OiU8KDEwLHRydW5jKSVzJT4+KDEwLGx0cnVuYyklIGFuIiA+YWN0dWFsICYmCisJY2F0IDw8RU9GIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcgPmV4cGVjdGVkICYmCitzaG9ydCBsb25nICBsb25nIGxvbmcKK21lc3NhZ2UgLi4gICBBIFUgVGhvcgorYWRkIGJhciAgICAgIEEgVSBUaG9yCitpbml0aWFsLi4uICAgQSBVIFRob3IKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJidWZfdXRmOF9yZXBsYWNlKCkgbm90IHByb2R1Y2luZyBOVUwnICcKKwlnaXQgbG9nIC0tY29sb3IgLS1wcmV0dHk9InRmb3JtYXQ6JTwoMTAsdHJ1bmMpJXMlPj4oMTAsbHRydW5jKSVDKGF1dG8pJWQiIHwKKwkJdGVzdF9kZWNvZGVfY29sb3IgfAorCQludWxfdG9fcSA+YWN0dWFsICYmCisJISBncmVwIFEgYWN0dWFsCisnCisKKyMgSVNPIHN0cmljdCBkYXRlIGZvcm1hdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnSVNPIGFuZCBJU08tc3RyaWN0IGRhdGUgZm9ybWF0cyBkaXNwbGF5IHRoZSBzYW1lIHZhbHVlcycgJworCWdpdCBsb2cgLS1mb3JtYXQ9JWFpJW4lY2kgfAorCXNlZCAtZSAicy8gL1QvOyBzLyAvLzsgcy8uLlwkLzomLyIgPmV4cGVjdGVkICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lYUklbiVjSSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKyMgZ2V0IG5ldyBkaWdlc3RzICh3aXRoIG5vIGFiYnJldmlhdGlvbnMpCitoZWFkMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRH4wKSAmJgoraGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUR+MSkgJiYKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGRlY29yYXRpb24gcHJvcGVybHkgZm9sbG93cyB0YWcgY2hhaW4nICcKKwlnaXQgdGFnIC1hIHRhZzEgLW0gdGFnMSAmJgorCWdpdCB0YWcgLWEgdGFnMiAtbSB0YWcyIHRhZzEgJiYKKwlnaXQgdGFnIC1kIHRhZzEgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gc2hvcnRlciAmJgorCWdpdCBsb2cgLS1uby13YWxrIC0tdGFncyAtLXByZXR0eT0iJUggJWQiIC0tZGVjb3JhdGU9ZnVsbCA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3RlZCAmJgorJGhlYWQxICAodGFnOiByZWZzL3RhZ3MvdGFnMikKKyRoZWFkMiAgKHRhZzogcmVmcy90YWdzL21lc3NhZ2Utb25lKQorJG9sZF9oZWFkMSAgKHRhZzogcmVmcy90YWdzL21lc3NhZ2UtdHdvKQorRU9GCisJc29ydCBhY3R1YWwgPmFjdHVhbDEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuIGxvZyBkZWNvcmF0aW9uJyAnCisJZ2l0IGxvZyAtLW5vLXdhbGsgLS10YWdzIC0tcHJldHR5PSIlSCAlRCIgLS1kZWNvcmF0ZT1mdWxsID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCiskaGVhZDEgdGFnOiByZWZzL3RhZ3MvdGFnMgorJGhlYWQyIHRhZzogcmVmcy90YWdzL21lc3NhZ2Utb25lCiskb2xkX2hlYWQxIHRhZzogcmVmcy90YWdzL21lc3NhZ2UtdHdvCitFT0YKKwlzb3J0IGFjdHVhbCA+YWN0dWFsMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjA2LWxvZy1mb2xsb3ctaGFyZGVyLWNvcGllcy5zaCBiL3QvdDQyMDYtbG9nLWZvbGxvdy1oYXJkZXItY29waWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkMjllNjUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjA2LWxvZy1mb2xsb3ctaGFyZGVyLWNvcGllcy5zaApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIEJvIFlhbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCAtLWZvbGxvdyBzaG91bGQgYWx3YXlzIGZpbmQgY29waWVzIGhhcmQgaW4gZ2l0IGxvZy4KKworJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2RpZmYtbGliLnNoCisKK2VjaG8gPnBhdGgwICdMaW5lIDEKK0xpbmUgMgorTGluZSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhZGQgYSBmaWxlIHBhdGgwIGFuZCBjb21taXQuJyBcCisgICAgJ2dpdCBhZGQgcGF0aDAgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiQWRkIHBhdGgwIicKKworZWNobyA+cGF0aDAgJ05ldyBsaW5lIDEKK05ldyBsaW5lIDIKK05ldyBsaW5lIDMKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdDaGFuZ2UgcGF0aDAuJyBcCisgICAgJ2dpdCBhZGQgcGF0aDAgJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSAiQ2hhbmdlIHBhdGgwIicKKworY2F0IDxwYXRoMCA+cGF0aDEKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb3B5IHBhdGgwIHRvIHBhdGgxLicgXAorICAgICdnaXQgYWRkIHBhdGgxICYmCisgICAgIGdpdCBjb21taXQgLW0gIkNvcHkgcGF0aDEgZnJvbSBwYXRoMCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdmaW5kIHRoZSBjb3B5IHBhdGgwIC0+IHBhdGgxIGhhcmRlcicgXAorICAgICdnaXQgbG9nIC0tZm9sbG93IC0tbmFtZS1zdGF0dXMgLS1wcmV0dHk9ImZvcm1hdDolcyIgIHBhdGgxID4gY3VycmVudCcKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK0NvcHkgcGF0aDEgZnJvbSBwYXRoMAorQzEwMAlwYXRoMAlwYXRoMQorCitDaGFuZ2UgcGF0aDAKK00JcGF0aDAKKworQWRkIHBhdGgwCitBCXBhdGgwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIHRoZSBvdXRwdXQuJyBcCisgICAgJ2NvbXBhcmVfZGlmZl9wYXRjaCBjdXJyZW50IGV4cGVjdGVkJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDctbG9nLWRlY29yYXRpb24tY29sb3JzLnNoIGIvdC90NDIwNy1sb2ctZGVjb3JhdGlvbi1jb2xvcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjgwMDhiNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMDctbG9nLWRlY29yYXRpb24tY29sb3JzLnNoCkBAIC0wLDAgKzEsNjYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgTmF6cmkgUmFtbGl5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZm9yICJnaXQgbG9nIC0tZGVjb3JhdGUiIGNvbG9ycycKKworLiAuL3Rlc3QtbGliLnNoCisKK2dldF9jb2xvciAoKQoreworCWdpdCBjb25maWcgLS1nZXQtY29sb3Igbm8uc3VjaC5zbG90ICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZ2l0IGNvbmZpZyBkaWZmLmNvbG9yLmNvbW1pdCB5ZWxsb3cgJiYKKwlnaXQgY29uZmlnIGNvbG9yLmRlY29yYXRlLmJyYW5jaCBncmVlbiAmJgorCWdpdCBjb25maWcgY29sb3IuZGVjb3JhdGUucmVtb3RlQnJhbmNoIHJlZCAmJgorCWdpdCBjb25maWcgY29sb3IuZGVjb3JhdGUudGFnICJyZXZlcnNlIGJvbGQgeWVsbG93IiAmJgorCWdpdCBjb25maWcgY29sb3IuZGVjb3JhdGUuc3Rhc2ggbWFnZW50YSAmJgorCWdpdCBjb25maWcgY29sb3IuZGVjb3JhdGUuSEVBRCBjeWFuICYmCisKKwljX3Jlc2V0PSQoZ2V0X2NvbG9yIHJlc2V0KSAmJgorCisJY19jb21taXQ9JChnZXRfY29sb3IgeWVsbG93KSAmJgorCWNfYnJhbmNoPSQoZ2V0X2NvbG9yIGdyZWVuKSAmJgorCWNfcmVtb3RlQnJhbmNoPSQoZ2V0X2NvbG9yIHJlZCkgJiYKKwljX3RhZz0kKGdldF9jb2xvciAicmV2ZXJzZSBib2xkIHllbGxvdyIpICYmCisJY19zdGFzaD0kKGdldF9jb2xvciBtYWdlbnRhKSAmJgorCWNfSEVBRD0kKGdldF9jb2xvciBjeWFuKSAmJgorCisJdGVzdF9jb21taXQgQSAmJgorCWdpdCBjbG9uZSAuIG90aGVyICYmCisJKAorCQljZCBvdGhlciAmJgorCQl0ZXN0X2NvbW1pdCBBMQorCSkgJiYKKworCWdpdCByZW1vdGUgYWRkIC1mIG90aGVyIC4vb3RoZXIgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJZ2l0IHRhZyB2MS4wICYmCisJZWNobyA+PkEudCAmJgorCWdpdCBzdGFzaCBzYXZlIENoYW5nZXMgdG8gQS50CisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKyR7Y19jb21taXR9Q09NTUlUX0lEJHtjX3Jlc2V0fSR7Y19jb21taXR9ICgke2NfcmVzZXR9JHtjX0hFQUR9SEVBRCR7Y19yZXNldH0ke2NfY29tbWl0fSAtPlwKKyAke2NfcmVzZXR9JHtjX2JyYW5jaH1tYXN0ZXIke2NfcmVzZXR9JHtjX2NvbW1pdH0sXAorICR7Y19yZXNldH0ke2NfdGFnfXRhZzogdjEuMCR7Y19yZXNldH0ke2NfY29tbWl0fSxcCisgJHtjX3Jlc2V0fSR7Y190YWd9dGFnOiBCJHtjX3Jlc2V0fSR7Y19jb21taXR9KSR7Y19yZXNldH0gQgorJHtjX2NvbW1pdH1DT01NSVRfSUQke2NfcmVzZXR9JHtjX2NvbW1pdH0gKCR7Y19yZXNldH0ke2NfdGFnfXRhZzogQTEke2NfcmVzZXR9JHtjX2NvbW1pdH0sXAorICR7Y19yZXNldH0ke2NfcmVtb3RlQnJhbmNofW90aGVyL21hc3RlciR7Y19yZXNldH0ke2NfY29tbWl0fSkke2NfcmVzZXR9IEExCiske2NfY29tbWl0fUNPTU1JVF9JRCR7Y19yZXNldH0ke2NfY29tbWl0fSAoJHtjX3Jlc2V0fSR7Y19zdGFzaH1yZWZzL3N0YXNoJHtjX3Jlc2V0fSR7Y19jb21taXR9KSR7Y19yZXNldH1cCisgT24gbWFzdGVyOiBDaGFuZ2VzIHRvIEEudAorJHtjX2NvbW1pdH1DT01NSVRfSUQke2NfcmVzZXR9JHtjX2NvbW1pdH0gKCR7Y19yZXNldH0ke2NfdGFnfXRhZzogQSR7Y19yZXNldH0ke2NfY29tbWl0fSkke2NfcmVzZXR9IEEKK0VPRgorCisjIFdlIHdhbnQgbG9nIHRvIHNob3cgYWxsLCBidXQgdGhlIHNlY29uZCBwYXJlbnQgdG8gcmVmcy9zdGFzaCBpcyBpcnJlbGV2YW50CisjIHRvIHRoaXMgdGVzdCBzaW5jZSBpdCBkb2VzIG5vdCBjb250YWluIGFueSBkZWNvcmF0aW9uLCBoZW5jZSAtLWZpcnN0LXBhcmVudAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ29tbWl0IERlY29yYXRpb25zIENvbG9yZWQgQ29ycmVjdGx5JyAnCisJZ2l0IGxvZyAtLWZpcnN0LXBhcmVudCAtLWFiYnJldj0xMCAtLWFsbCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWNvbG9yPWFsd2F5cyB8CisJc2VkICJzL1swLTlhLWZdXHsxMCwxMFx9L0NPTU1JVF9JRC8iID5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjA4LWxvZy1tYWdpYy1wYXRoc3BlYy5zaCBiL3QvdDQyMDgtbG9nLW1hZ2ljLXBhdGhzcGVjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ4ZjIzZjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjA4LWxvZy1tYWdpYy1wYXRoc3BlYy5zaApAQCAtMCwwICsxLDY0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWFnaWMgcGF0aHNwZWMgdGVzdHMgdXNpbmcgZ2l0LWxvZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgorCW1rZGlyIHN1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6LyIgc2hvdWxkIG5vdCBiZSBhbWJpZ3VvdXMnICcKKwlnaXQgbG9nIDovCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIDovYSIgc2hvdWxkIGJlIGFtYmlndW91cyAoYXBwbGllZCBib3RoIHJldiBhbmQgd29ya3RyZWUpJyAnCisJOiA+YSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgOi9hIDI+ZXJyb3IgJiYKKwlncmVwIGFtYmlndW91cyBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6L2EgLS0gIiBzaG91bGQgbm90IGJlIGFtYmlndW91cycgJworCWdpdCBsb2cgOi9hIC0tCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgbG9nIC0tIDovYSIgc2hvdWxkIG5vdCBiZSBhbWJpZ3VvdXMnICcKKwlnaXQgbG9nIC0tIDovYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGxvZyA6IiBzaG91bGQgYmUgYW1iaWd1b3VzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyA6IDI+ZXJyb3IgJiYKKwlncmVwIGFtYmlndW91cyBlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIC0tIDonICcKKwlnaXQgbG9nIC0tIDoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyBIRUFEIC0tIDovJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwkyNGIyNGNmIGluaXRpYWwKKwlFT0YKKwkoY2Qgc3ViICYmIGdpdCBsb2cgLS1vbmVsaW5lIEhFQUQgLS0gOi8gPi4uL2FjdHVhbCkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWFuZCBsaW5lIHBhdGhzcGVjIHBhcnNpbmcgZm9yICJnaXQgbG9nIicgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBhbiBlbXB0eSBhIiAtLWFsbG93LWVtcHR5ICYmCisJZWNobyAxID5hICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidXBkYXRlIGEgdG8gMSIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwllY2hvIDIgPmEgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ1cGRhdGUgYSB0byAyIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgbG9nIC0tbWVyZ2UgLS0gYQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMDktbG9nLXBpY2theGUuc2ggYi90L3Q0MjA5LWxvZy1waWNrYXhlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0NGRmNzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjA5LWxvZy1waWNrYXhlLnNoCkBAIC0wLDAgKzEsMTA5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbG9nIC0tZ3JlcC8tLWF1dGhvci8tLXJlZ2V4cC1pZ25vcmUtY2FzZS8tUy8tRycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2xvZyAoKSB7CisJZXhwZWN0PSQxCisJa2luZD0kMgorCW5lZWRsZT0kMworCXNoaWZ0IDMKKwlyZXN0PSRACisKKwljYXNlICRraW5kIGluCisJLS0qKQorCQlvcHQ9JGtpbmQ9JG5lZWRsZQorCQk7OworCSopCisJCW9wdD0ka2luZCRuZWVkbGUKKwkJOzsKKwllc2FjCisJY2FzZSAkZXhwZWN0IGluCisJZXhwZWN0X25vbWF0Y2gpCisJCW1hdGNoPW5vbWF0Y2gKKwkJOzsKKwkqKQorCQltYXRjaD1tYXRjaAorCQk7OworCWVzYWMKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImxvZyAka2luZCR7cmVzdDorICRyZXN0fSAoJG1hdGNoKSIgIgorCQlnaXQgbG9nICRyZXN0ICRvcHQgLS1mb3JtYXQ9JUggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAkZXhwZWN0IGFjdHVhbAorCSIKK30KKworIyB0ZXN0IC1pIGFuZCAtLXJlZ2V4cC1pZ25vcmUtY2FzZSBhbmQgZXhwZWN0IGJvdGggdG8gYmVoYXZlIHRoZSBzYW1lIHdheQordGVzdF9sb2dfaWNhc2UgKCkgeworCXRlc3RfbG9nICRAIC0tcmVnZXhwLWlnbm9yZS1jYXNlCisJdGVzdF9sb2cgJEAgLWkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJPmV4cGVjdF9ub21hdGNoICYmCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+ZXhwZWN0X2luaXRpYWwgJiYKKworCWVjaG8gUGlja2VkID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvcj0iQW5vdGhlciBQZXJzb24gPGFub3RoZXJAZXhhbXBsZS5jb20+IiAtbSBzZWNvbmQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmV4cGVjdF9zZWNvbmQKKycKKwordGVzdF9sb2cJZXhwZWN0X2luaXRpYWwJLS1ncmVwIGluaXRpYWwKK3Rlc3RfbG9nCWV4cGVjdF9ub21hdGNoCS0tZ3JlcCBJbkl0aWFsCit0ZXN0X2xvZ19pY2FzZQlleHBlY3RfaW5pdGlhbAktLWdyZXAgSW5JdGlhbAordGVzdF9sb2dfaWNhc2UJZXhwZWN0X25vbWF0Y2gJLS1ncmVwIGluaXRhaWwKKwordGVzdF9sb2cJZXhwZWN0X3NlY29uZAktLWF1dGhvciBQZXJzb24KK3Rlc3RfbG9nCWV4cGVjdF9ub21hdGNoCS0tYXV0aG9yIHBlcnNvbgordGVzdF9sb2dfaWNhc2UJZXhwZWN0X3NlY29uZAktLWF1dGhvciBwZXJzb24KK3Rlc3RfbG9nX2ljYXNlCWV4cGVjdF9ub21hdGNoCS0tYXV0aG9yIHNwcmVvbgorCit0ZXN0X2xvZwlleHBlY3Rfbm9tYXRjaAktRyBwaWNrZWQKK3Rlc3RfbG9nCWV4cGVjdF9zZWNvbmQJLUcgUGlja2VkCit0ZXN0X2xvZ19pY2FzZQlleHBlY3Rfbm9tYXRjaAktRyBwaWNrbGUKK3Rlc3RfbG9nX2ljYXNlCWV4cGVjdF9zZWNvbmQJLUcgcGlja2VkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtRyAtLXRleHRjb252IChtaXNzaW5nIHRleHRjb252IHRvb2wpJyAnCisJZWNobyAiKiBkaWZmPXRlc3QiID4uZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBkaWZmLnRlc3QudGV4dGNvbnY9bWlzc2luZyBsb2cgLUdmb28gJiYKKwlybSAuZ2l0YXR0cmlidXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLUcgLS1uby10ZXh0Y29udiAobWlzc2luZyB0ZXh0Y29udiB0b29sKScgJworCWVjaG8gIiogZGlmZj10ZXN0IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgLWMgZGlmZi50ZXN0LnRleHRjb252PW1pc3NpbmcgbG9nIC1HZm9vIC0tbm8tdGV4dGNvbnYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdF9ub21hdGNoIGFjdHVhbCAmJgorCXJtIC5naXRhdHRyaWJ1dGVzCisnCisKK3Rlc3RfbG9nCWV4cGVjdF9ub21hdGNoCS1TIHBpY2tlZAordGVzdF9sb2cJZXhwZWN0X3NlY29uZAktUyBQaWNrZWQKK3Rlc3RfbG9nX2ljYXNlCWV4cGVjdF9zZWNvbmQJLVMgcGlja2VkCit0ZXN0X2xvZ19pY2FzZQlleHBlY3Rfbm9tYXRjaAktUyBwaWNrbGUKKwordGVzdF9sb2cJZXhwZWN0X25vbWF0Y2gJLVMgcC5ja2VkIC0tcGlja2F4ZS1yZWdleAordGVzdF9sb2cJZXhwZWN0X3NlY29uZAktUyBQLmNrZWQgLS1waWNrYXhlLXJlZ2V4Cit0ZXN0X2xvZ19pY2FzZQlleHBlY3Rfc2Vjb25kCS1TIHAuY2tlZCAtLXBpY2theGUtcmVnZXgKK3Rlc3RfbG9nX2ljYXNlCWV4cGVjdF9ub21hdGNoCS1TIHAuY2tsZSAtLXBpY2theGUtcmVnZXgKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC1TIC0tdGV4dGNvbnYgKG1pc3NpbmcgdGV4dGNvbnYgdG9vbCknICcKKwllY2hvICIqIGRpZmY9dGVzdCIgPi5naXRhdHRyaWJ1dGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGRpZmYudGVzdC50ZXh0Y29udj1taXNzaW5nIGxvZyAtU2ZvbyAmJgorCXJtIC5naXRhdHRyaWJ1dGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtUyAtLW5vLXRleHRjb252IChtaXNzaW5nIHRleHRjb252IHRvb2wpJyAnCisJZWNobyAiKiBkaWZmPXRlc3QiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCAtYyBkaWZmLnRlc3QudGV4dGNvbnY9bWlzc2luZyBsb2cgLVNmb28gLS1uby10ZXh0Y29udiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbWF0Y2ggYWN0dWFsICYmCisJcm0gLmdpdGF0dHJpYnV0ZXMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjEwLWxvZy1pMThuLnNoIGIvdC90NDIxMC1sb2ctaTE4bi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNTg1ZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMC1sb2ctaTE4bi5zaApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBsb2cgd2l0aCBpMThuIGZlYXR1cmVzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgdHdvIGZvcm1zIG9mIMOpCit1dGY4X2U9JChwcmludGYgJ1wzMDNcMjUxJykKK2xhdGluMV9lPSQocHJpbnRmICdcMzUxJykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGNvbW1pdHMgaW4gZGlmZmVyZW50IGVuY29kaW5ncycgJworCXRlc3RfdGljayAmJgorCWNhdCA+bXNnIDw8LUVPRiAmJgorCXV0ZjgKKworCXQke3V0ZjhfZX1zdAorCUVPRgorCWdpdCBhZGQgbXNnICYmCisJZ2l0IC1jIGkxOG4uY29tbWl0ZW5jb2Rpbmc9dXRmOCBjb21taXQgLUYgbXNnICYmCisJY2F0ID5tc2cgPDwtRU9GICYmCisJbGF0aW4xCisKKwl0JHtsYXRpbjFfZX1zdAorCUVPRgorCWdpdCBhZGQgbXNnICYmCisJZ2l0IC1jIGkxOG4uY29tbWl0ZW5jb2Rpbmc9SVNPLTg4NTktMSBjb21taXQgLUYgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWdyZXAgc2VhcmNoZXMgaW4gbG9nIG91dHB1dCBlbmNvZGluZyAodXRmOCknICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbGF0aW4xCisJdXRmOAorCUVPRgorCWdpdCBsb2cgLS1lbmNvZGluZz11dGY4IC0tZm9ybWF0PSVzIC0tZ3JlcD0kdXRmOF9lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdsb2cgLS1ncmVwIHNlYXJjaGVzIGluIGxvZyBvdXRwdXQgZW5jb2RpbmcgKGxhdGluMSknICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbGF0aW4xCisJdXRmOAorCUVPRgorCWdpdCBsb2cgLS1lbmNvZGluZz1JU08tODg1OS0xIC0tZm9ybWF0PSVzIC0tZ3JlcD0kbGF0aW4xX2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ2xvZyAtLWdyZXAgZG9lcyBub3QgZmluZCBub24tcmVlbmNvZGVkIHZhbHVlcyAodXRmOCknICcKKwk+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWVuY29kaW5nPXV0ZjggLS1mb3JtYXQ9JXMgLS1ncmVwPSRsYXRpbjFfZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwIGRvZXMgbm90IGZpbmQgbm9uLXJlZW5jb2RlZCB2YWx1ZXMgKGxhdGluMSknICcKKwk+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWVuY29kaW5nPUlTTy04ODU5LTEgLS1mb3JtYXQ9JXMgLS1ncmVwPSR1dGY4X2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjExLWxpbmUtbG9nLnNoIGIvdC90NDIxMS1saW5lLWxvZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NDUxMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS1saW5lLWxvZy5zaApAQCAtMCwwICsxLDEwMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgbG9nIC1MJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIChpbXBvcnQgaGlzdG9yeSknICcKKwlnaXQgZmFzdC1pbXBvcnQgPCAiJFRFU1RfRElSRUNUT1JZIi90NDIxMS9oaXN0b3J5LmV4cG9ydCAmJgorCWdpdCByZXNldCAtLWhhcmQKKycKKworY2FubmVkX3Rlc3RfMSAoKSB7CisJdGVzdF9leHBlY3RfJDEgIiQyIiAiCisJCWdpdCBsb2cgJDIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBcIlwkVEVTVF9ESVJFQ1RPUllcIi90NDIxMS9leHBlY3QuJDMgYWN0dWFsCisJIgorfQorCitjYW5uZWRfdGVzdCAoKSB7CisJY2FubmVkX3Rlc3RfMSBzdWNjZXNzICIkQCIKK30KK2Nhbm5lZF90ZXN0X2ZhaWx1cmUgKCkgeworCWNhbm5lZF90ZXN0XzEgZmFpbHVyZSAiJEAiCit9CisKK3Rlc3RfYmFkX29wdHMgKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImludmFsaWQgYXJnczogJDEiICIKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAkMSAyPmVycm9ycyAmJgorCQlncmVwICckMicgZXJyb3JzCisJIgorfQorCitjYW5uZWRfdGVzdCAiLUwgNCwxMjphLmMgc2ltcGxlIiBzaW1wbGUtZgorY2FubmVkX3Rlc3QgIi1MIDQsKzk6YS5jIHNpbXBsZSIgc2ltcGxlLWYKK2Nhbm5lZF90ZXN0ICItTCAnL2xvbmcgZi8sL159LzphLmMnIHNpbXBsZSIgc2ltcGxlLWYKK2Nhbm5lZF90ZXN0ICItTCA6ZjphLmMgc2ltcGxlIiBzaW1wbGUtZi10by1tYWluCisKK2Nhbm5lZF90ZXN0ICItTCAnL21haW4vLC9efS86YS5jJyBzaW1wbGUiIHNpbXBsZS1tYWluCitjYW5uZWRfdGVzdCAiLUwgOm1haW46YS5jIHNpbXBsZSIgc2ltcGxlLW1haW4tdG8tZW5kCisKK2Nhbm5lZF90ZXN0ICItTCAxLCs0OmEuYyBzaW1wbGUiIGJlZ2lubmluZy1vZi1maWxlCisKK2Nhbm5lZF90ZXN0ICItTCAyMDphLmMgc2ltcGxlIiBlbmQtb2YtZmlsZQorCitjYW5uZWRfdGVzdCAiLUwgJy9sb25nIGYvJywvXn0vOmEuYyAtTCAvbWFpbi8sL159LzphLmMgc2ltcGxlIiB0d28tcmFuZ2VzCitjYW5uZWRfdGVzdCAiLUwgMjQsKzE6YS5jIHNpbXBsZSIgdmFuaXNoZXMtZWFybHkKKworY2FubmVkX3Rlc3QgIi1NIC1MICcvbG9uZyBmLywvXn0vOmIuYycgbW92ZS1zdXBwb3J0IiBtb3ZlLXN1cHBvcnQtZgorY2FubmVkX3Rlc3QgIi1NIC1MICc6ZjpiLmMnIHBhcmFsbGVsLWNoYW5nZSIgcGFyYWxsZWwtY2hhbmdlLWYtdG8tbWFpbgorCitjYW5uZWRfdGVzdCAiLUwgNCwxMjphLmMgLUwgOm1haW46YS5jIHNpbXBsZSIgbXVsdGlwbGUKK2Nhbm5lZF90ZXN0ICItTCA0LDE4OmEuYyAtTCBeOm1haW46YS5jIHNpbXBsZSIgbXVsdGlwbGUtb3ZlcmxhcHBpbmcKK2Nhbm5lZF90ZXN0ICItTCA6bWFpbjphLmMgLUwgNCwxODphLmMgc2ltcGxlIiBtdWx0aXBsZS1vdmVybGFwcGluZworY2FubmVkX3Rlc3QgIi1MIDQ6YS5jIC1MIDgsMTI6YS5jIHNpbXBsZSIgbXVsdGlwbGUtc3VwZXJzZXQKK2Nhbm5lZF90ZXN0ICItTCA4LDEyOmEuYyAtTCA0OmEuYyBzaW1wbGUiIG11bHRpcGxlLXN1cGVyc2V0CisKK3Rlc3RfYmFkX29wdHMgIi1MIiAic3dpdGNoLipyZXF1aXJlcyBhIHZhbHVlIgordGVzdF9iYWRfb3B0cyAiLUwgYi5jIiAiYXJndW1lbnQgbm90IC5zdGFydCxlbmQ6ZmlsZSIKK3Rlc3RfYmFkX29wdHMgIi1MIDE6IiAiYXJndW1lbnQgbm90IC5zdGFydCxlbmQ6ZmlsZSIKK3Rlc3RfYmFkX29wdHMgIi1MIDE6bm9uZXhpc3RlbnQiICJUaGVyZSBpcyBubyBwYXRoIgordGVzdF9iYWRfb3B0cyAiLUwgMTpzaW1wbGUiICJUaGVyZSBpcyBubyBwYXRoIgordGVzdF9iYWRfb3B0cyAiLUwgJy9mb286Yi5jJyIgImFyZ3VtZW50IG5vdCAuc3RhcnQsZW5kOmZpbGUiCit0ZXN0X2JhZF9vcHRzICItTCAxMDAwOmIuYyIgImhhcyBvbmx5LipsaW5lcyIKK3Rlc3RfYmFkX29wdHMgIi1MIDEsMTAwMDpiLmMiICJoYXMgb25seS4qbGluZXMiCit0ZXN0X2JhZF9vcHRzICItTCA6Yi5jIiAiYXJndW1lbnQgbm90IC5zdGFydCxlbmQ6ZmlsZSIKK3Rlc3RfYmFkX29wdHMgIi1MIDpmb286Yi5jIiAibm8gbWF0Y2giCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1MIFggKFggPT0gbmxpbmVzKScgJworCW49JCh3YyAtbCA8Yi5jKSAmJgorCWdpdCBsb2cgLUwgJG46Yi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1MIFggKFggPT0gbmxpbmVzICsgMSknICcKKwluPSQoZXhwciAkKHdjIC1sIDxiLmMpICsgMSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbG9nIC1MICRuOmIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCBYIChYID09IG5saW5lcyArIDIpJyAnCisJbj0kKGV4cHIgJCh3YyAtbCA8Yi5jKSArIDIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxvZyAtTCAkbjpiLmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUwgLFkgKFkgPT0gbmxpbmVzKScgJworCW49JChwcmludGYgIiVkIiAkKHdjIC1sIDxiLmMpKSAmJgorCWdpdCBsb2cgLUwgLCRuOmIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCAsWSAoWSA9PSBubGluZXMgKyAxKScgJworCW49JChleHByICQod2MgLWwgPGIuYykgKyAxKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLUwgLCRuOmIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCAsWSAoWSA9PSBubGluZXMgKyAyKScgJworCW49JChleHByICQod2MgLWwgPGIuYykgKyAyKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLUwgLCRuOmIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctTCB3aXRoIC0tZmlyc3QtcGFyZW50IGFuZCBhIG1lcmdlJyAnCisJZ2l0IGNoZWNrb3V0IHBhcmFsbGVsLWNoYW5nZSAmJgorCWdpdCBsb2cgLS1maXJzdC1wYXJlbnQgLUwgMSwxOmIuYworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyMTEvZXhwZWN0LmJlZ2lubmluZy1vZi1maWxlIGIvdC90NDIxMS9leHBlY3QuYmVnaW5uaW5nLW9mLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFiNDA1NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvZXhwZWN0LmJlZ2lubmluZy1vZi1maWxlCkBAIC0wLDAgKzEsNDMgQEAKK2NvbW1pdCA0YTIzYWU1Yzk4ZDU5YTU4YzZkYTAzNjE1Njk1OWYyZGM5ZjQ3MmFkCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDc6NDAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGF0IHZlcnkgYmVnaW5uaW5nCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMSwzICsxLDQgQEAKKysjaW5jbHVkZSA8dW5pc3RkLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCisgbG9uZyBmKGxvbmcgeCkKKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTEsMyArMSwzIEBACisgI2luY2x1ZGUgPHN0ZGlvLmg+CisgCistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMSwzIEBACisrI2luY2x1ZGUgPHN0ZGlvLmg+CisrCisraW50IGYoaW50IHgpCmRpZmYgLS1naXQgYS90L3Q0MjExL2V4cGVjdC5lbmQtb2YtZmlsZSBiL3QvdDQyMTEvZXhwZWN0LmVuZC1vZi1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjViYjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5lbmQtb2YtZmlsZQpAQCAtMCwwICsxLDYyIEBACitjb21taXQgNDY1OTUzODg0NGRhYTI4NDliMWE5ZTdkNmZhZGI5NmZjZDI2ZmM4MworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjQzIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0yMCwzICsyMCw1IEBACisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK30KKysKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAxMDBiNjFhNmYyZjcyMGY4MTI2MjBhOWQxMGFmYjNhOTYwY2NiNzNjCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0yMCwzICsyMCwzIEBACisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworLX0KKyt9CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE5LDMgKzE5LDMgQEAKKy0JcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzE4LDMgQEAKKysJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworKwlyZXR1cm4gMDsKKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL2V4cGVjdC5tb3ZlLXN1cHBvcnQtZiBiL3QvdDQyMTEvZXhwZWN0Lm1vdmUtc3VwcG9ydC1mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5MDVlMDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5tb3ZlLXN1cHBvcnQtZgpAQCAtMCwwICsxLDgwIEBACitjb21taXQgNmNlM2M0ZmY2OTAxMzYwOTliYjE3ZTFhODc2NmI3NTc2NDcyNmVhNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ5OjUwIDIwMTMgKzAxMDAKKworICAgIGFub3RoZXIgc2ltcGxlIGNoYW5nZQorCitkaWZmIC0tZ2l0IGEvYi5jIGIvYi5jCistLS0gYS9iLmMKKysrKyBiL2IuYworQEAgLTQsOSArNCw5IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKy0JCXggPj49IDE7CisrCQl4IC89IDI7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw5ICszLDkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBmMDRmYjIwZjJjNzc4NTA5OTZjYmE3Mzk3MDlhY2M2ZmFlY2M1OGY3CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOCArMyw5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMyw4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9leHBlY3QubXVsdGlwbGUgYi90L3Q0MjExL2V4cGVjdC5tdWx0aXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmFkNWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9leHBlY3QubXVsdGlwbGUKQEAgLTAsMCArMSwxMDQgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDcgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorKworKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDEwMGI2MWE2ZjJmNzIwZjgxMjYyMGE5ZDEwYWZiM2E5NjBjY2I3M2MKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw5ICszLDkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CitAQCAtMTcsNSArMTcsNSBAQAorIGludCBtYWluICgpCisgeworLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGYwNGZiMjBmMmM3Nzg1MDk5NmNiYTczOTcwOWFjYzZmYWVjYzU4ZjcKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw4ICszLDkgQEAKKyBpbnQgZihpbnQgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKysJcmV0dXJuIHM7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CmRpZmYgLS1naXQgYS90L3Q0MjExL2V4cGVjdC5tdWx0aXBsZS1vdmVybGFwcGluZyBiL3QvdDQyMTEvZXhwZWN0Lm11bHRpcGxlLW92ZXJsYXBwaW5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzBiNmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5tdWx0aXBsZS1vdmVybGFwcGluZwpAQCAtMCwwICsxLDE4NyBAQAorY29tbWl0IDQ2NTk1Mzg4NDRkYWEyODQ5YjFhOWU3ZDZmYWRiOTZmY2QyNmZjODMKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxOSArNCwyMSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisrCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtNCwxOSArNCwxOSBAQAorIGxvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCAzOWI2ZWIyZDViNzA2ZDMzMjIxODRhMTY5ZjY2NmYyNWVkM2ZiZDAwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6NDEgMjAxMyArMDEwMAorCisgICAgdG91Y2ggY29tbWVudAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTkgKzMsMTkgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBBIGNvbW1lbnQuCisrICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGE2ZWI4MjY0N2Q1ZDY3Zjg5M2RhNDQyZjhmOTM3NWZkODlhM2IxZTIKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NToxNiAyMDEzICswMTAwCisKKyAgICB0b3VjaCBib3RoIGZ1bmN0aW9ucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTkgKzMsMTkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE4ICszLDE5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsMTggQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CisrCisrLyoKKysgKiBBIGNvbW1lbnQuCisrICovCisrCisraW50IG1haW4gKCkKKyt7CisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9leHBlY3QubXVsdGlwbGUtc3VwZXJzZXQgYi90L3Q0MjExL2V4cGVjdC5tdWx0aXBsZS1zdXBlcnNldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTMwYjZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDIxMS9leHBlY3QubXVsdGlwbGUtc3VwZXJzZXQKQEAgLTAsMCArMSwxODcgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTQsMTkgKzQsMjEgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorKworKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IDEwMGI2MWE2ZjJmNzIwZjgxMjYyMGE5ZDEwYWZiM2E5NjBjY2I3M2MKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODoxMCAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgdG8gYW4gaW5jb21wbGV0ZSBsaW5lIGF0IGVuZAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTQsMTkgKzQsMTkgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgMzliNmViMmQ1YjcwNmQzMzIyMTg0YTE2OWY2NjZmMjVlZDNmYmQwMAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjQxIDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGNvbW1lbnQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE5ICszLDE5IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCistICogQSBjb21tZW50LgorKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKyB9CisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE5ICszLDE5IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorIGludCBtYWluICgpCisgeworLQlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisgCXJldHVybiAwOworIH0KKworY29tbWl0IGYwNGZiMjBmMmM3Nzg1MDk5NmNiYTczOTcwOWFjYzZmYWVjYzU4ZjcKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxOCArMywxOSBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisgaW50IG1haW4gKCkKKyB7CisgCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICszLDE4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQorKworKy8qCisrICogQSBjb21tZW50LgorKyAqLworKworK2ludCBtYWluICgpCisreworKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisrCXJldHVybiAwOworK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvZXhwZWN0LnBhcmFsbGVsLWNoYW5nZS1mLXRvLW1haW4gYi90L3Q0MjExL2V4cGVjdC5wYXJhbGxlbC1jaGFuZ2UtZi10by1tYWluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MmRlZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5wYXJhbGxlbC1jaGFuZ2UtZi10by1tYWluCkBAIC0wLDAgKzEsMTYwIEBACitjb21taXQgMDQ2OWM2MGJjNDgzN2Q1MmQ5N2IxZjA4MWRlYzVmOThkZWEyMGZlZAorTWVyZ2U6IGJhMjI3YzYgNmNlM2M0ZgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAaW5mLmV0aHouY2g+CitEYXRlOiAgIEZyaSBBcHIgMTIgMTY6MTY6MjQgMjAxMyArMDIwMAorCisgICAgTWVyZ2UgYWNyb3NzIHRoZSByZW5hbWUKKworCitjb21taXQgNmNlM2M0ZmY2OTAxMzYwOTliYjE3ZTFhODc2NmI3NTc2NDcyNmVhNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ5OjUwIDIwMTMgKzAxMDAKKworICAgIGFub3RoZXIgc2ltcGxlIGNoYW5nZQorCitkaWZmIC0tZ2l0IGEvYi5jIGIvYi5jCistLS0gYS9iLmMKKysrKyBiL2IuYworQEAgLTQsMTQgKzQsMTQgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworLQkJeCA+Pj0gMTsKKysJCXggLz0gMjsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAgKi8KKyAKKworY29tbWl0IGJhMjI3YzY2MzIzNDk3MDBmYmI5NTdkZWMyYjUwZjVlMjM1OGJlM2YKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPgorRGF0ZTogICBGcmkgQXByIDEyIDE2OjE1OjU3IDIwMTMgKzAyMDAKKworICAgIGNoYW5nZSBvbiBhbm90aGVyIGxpbmUgb2YgaGlzdG9yeSB3aGlsZSByZW5hbWUgaGFwcGVucworCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTQsMTQgKzQsMTQgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKysgKiBUaGlzIGlzIG9ubHkgYSBzaG9ydCBleGFtcGxlIQorICAqLworIAorCitjb21taXQgMzliNmViMmQ1YjcwNmQzMzIyMTg0YTE2OWY2NjZmMjVlZDNmYmQwMAorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjQxIDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGNvbW1lbnQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE0ICszLDE0IEBACisgbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCistICogQSBjb21tZW50LgorKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICAqLworIAorCitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxNCArMywxNCBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKworY29tbWl0IGYwNGZiMjBmMmM3Nzg1MDk5NmNiYTczOTcwOWFjYzZmYWVjYzU4ZjcKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo1NSAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgZigpCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMywxMyArMywxNCBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisgCisgLyoKKyAgKiBBIGNvbW1lbnQuCisgICovCisgCisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsMTMgQEAKKytpbnQgZihpbnQgeCkKKyt7CisrCWludCBzID0gMDsKKysJd2hpbGUgKHgpIHsKKysJCXggPj49IDE7CisrCQlzKys7CisrCX0KKyt9CisrCisrLyoKKysgKiBBIGNvbW1lbnQuCisrICovCisrCmRpZmYgLS1naXQgYS90L3Q0MjExL2V4cGVjdC5zaW1wbGUtZiBiL3QvdDQyMTEvZXhwZWN0LnNpbXBsZS1mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZjViYzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5zaW1wbGUtZgpAQCAtMCwwICsxLDU5IEBACitjb21taXQgYTZlYjgyNjQ3ZDVkNjdmODkzZGE0NDJmOGY5Mzc1ZmQ4OWEzYjFlMgorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ1OjE2IDIwMTMgKzAxMDAKKworICAgIHRvdWNoIGJvdGggZnVuY3Rpb25zCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMyw5ICszLDkgQEAKKy1pbnQgZihpbnQgeCkKKytsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBmMDRmYjIwZjJjNzc4NTA5OTZjYmE3Mzk3MDlhY2M2ZmFlY2M1OGY3CitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NTUgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGYoKQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsOCArMyw5IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMyw4IEBACisraW50IGYoaW50IHgpCisreworKwlpbnQgcyA9IDA7CisrCXdoaWxlICh4KSB7CisrCQl4ID4+PSAxOworKwkJcysrOworKwl9CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9leHBlY3Quc2ltcGxlLWYtdG8tbWFpbiBiL3QvdDQyMTEvZXhwZWN0LnNpbXBsZS1mLXRvLW1haW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ3NTc2OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvZXhwZWN0LnNpbXBsZS1mLXRvLW1haW4KQEAgLTAsMCArMSwxMDAgQEAKK2NvbW1pdCAzOWI2ZWIyZDViNzA2ZDMzMjIxODRhMTY5ZjY2NmYyNWVkM2ZiZDAwCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6NDEgMjAxMyArMDEwMAorCisgICAgdG91Y2ggY29tbWVudAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTMsMTQgKzMsMTQgQEAKKyBsb25nIGYobG9uZyB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorIAlyZXR1cm4gczsKKyB9CisgCisgLyoKKy0gKiBBIGNvbW1lbnQuCisrICogVGhpcyBpcyBvbmx5IGFuIGV4YW1wbGUhCisgICovCisgCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDE0ICszLDE0IEBACistaW50IGYoaW50IHgpCisrbG9uZyBmKGxvbmcgeCkKKyB7CisgCWludCBzID0gMDsKKyAJd2hpbGUgKHgpIHsKKyAJCXggPj49IDE7CisgCQlzKys7CisgCX0KKyAJcmV0dXJuIHM7CisgfQorIAorIC8qCisgICogQSBjb21tZW50LgorICAqLworIAorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDEzICszLDE0IEBACisgaW50IGYoaW50IHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisrCXJldHVybiBzOworIH0KKyAKKyAvKgorICAqIEEgY29tbWVudC4KKyAgKi8KKyAKKworY29tbWl0IGRlNGM0OGFlODE0NzkyYzAyYTQ5YzRjM2MwYzc1N2FlNjljNTVmNmEKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0NDo0OCAyMDEzICswMTAwCisKKyAgICBpbml0aWFsCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSAvZGV2L251bGwKKysrKyBiL2EuYworQEAgLTAsMCArMywxMyBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KKysKKysvKgorKyAqIEEgY29tbWVudC4KKysgKi8KKysKZGlmZiAtLWdpdCBhL3QvdDQyMTEvZXhwZWN0LnNpbXBsZS1tYWluIGIvdC90NDIxMS9leHBlY3Quc2ltcGxlLW1haW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzljZTM5YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvZXhwZWN0LnNpbXBsZS1tYWluCkBAIC0wLDAgKzEsNjggQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xNyw1ICsxNyw1IEBACisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsxNiw1IEBACisraW50IG1haW4gKCkKKyt7CisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9leHBlY3Quc2ltcGxlLW1haW4tdG8tZW5kIGIvdC90NDIxMS9leHBlY3Quc2ltcGxlLW1haW4tdG8tZW5kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODBiZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjExL2V4cGVjdC5zaW1wbGUtbWFpbi10by1lbmQKQEAgLTAsMCArMSw3MCBAQAorY29tbWl0IDQ2NTk1Mzg4NDRkYWEyODQ5YjFhOWU3ZDZmYWRiOTZmY2QyNmZjODMKK0F1dGhvcjogVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4KK0RhdGU6ICAgVGh1IEZlYiAyOCAxMDo0ODo0MyAyMDEzICswMTAwCisKKyAgICBjaGFuZ2UgYmFjayB0byBjb21wbGV0ZSBsaW5lCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNyBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKyt9CisrCisrLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0xNyw1ICsxNyw1IEBACisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsxNiw1IEBACisraW50IG1haW4gKCkKKyt7CisrCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcmV0dXJuIDA7CisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9leHBlY3QudHdvLXJhbmdlcyBiL3QvdDQyMTEvZXhwZWN0LnR3by1yYW5nZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEwOWFhMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvZXhwZWN0LnR3by1yYW5nZXMKQEAgLTAsMCArMSwxMDIgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTE4LDUgKzE4LDUgQEAKKyBpbnQgbWFpbiAoKQorIHsKKyAJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CistfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrfQorCitjb21taXQgMTAwYjYxYTZmMmY3MjBmODEyNjIwYTlkMTBhZmIzYTk2MGNjYjczYworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ4OjEwIDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSB0byBhbiBpbmNvbXBsZXRlIGxpbmUgYXQgZW5kCisKK2RpZmYgLS1naXQgYS9hLmMgYi9hLmMKKy0tLSBhL2EuYworKysrIGIvYS5jCitAQCAtMTgsNSArMTgsNSBAQAorIGludCBtYWluICgpCisgeworIAlwcmludGYoIiVsZFxuIiwgZigxNSkpOworIAlyZXR1cm4gMDsKKy19CisrfQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKK2NvbW1pdCBhNmViODI2NDdkNWQ2N2Y4OTNkYTQ0MmY4ZjkzNzVmZDg5YTNiMWUyCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDU6MTYgMjAxMyArMDEwMAorCisgICAgdG91Y2ggYm90aCBmdW5jdGlvbnMKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDkgKzMsOSBAQAorLWludCBmKGludCB4KQorK2xvbmcgZihsb25nIHgpCisgeworIAlpbnQgcyA9IDA7CisgCXdoaWxlICh4KSB7CisgCQl4ID4+PSAxOworIAkJcysrOworIAl9CisgCXJldHVybiBzOworIH0KK0BAIC0xNyw1ICsxNyw1IEBACisgaW50IG1haW4gKCkKKyB7CistCXByaW50ZigiJWRcbiIsIGYoMTUpKTsKKysJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKyAJcmV0dXJuIDA7CisgfQorCitjb21taXQgZjA0ZmIyMGYyYzc3ODUwOTk2Y2JhNzM5NzA5YWNjNmZhZWNjNThmNworQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjU1IDIwMTMgKzAxMDAKKworICAgIGNoYW5nZSBmKCkKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0zLDggKzMsOSBAQAorIGludCBmKGludCB4KQorIHsKKyAJaW50IHMgPSAwOworIAl3aGlsZSAoeCkgeworIAkJeCA+Pj0gMTsKKyAJCXMrKzsKKyAJfQorKwlyZXR1cm4gczsKKyB9CisKK2NvbW1pdCBkZTRjNDhhZTgxNDc5MmMwMmE0OWM0YzNjMGM3NTdhZTY5YzU1ZjZhCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDQ6NDggMjAxMyArMDEwMAorCisgICAgaW5pdGlhbAorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gL2Rldi9udWxsCisrKysgYi9hLmMKK0BAIC0wLDAgKzMsOCBAQAorK2ludCBmKGludCB4KQorK3sKKysJaW50IHMgPSAwOworKwl3aGlsZSAoeCkgeworKwkJeCA+Pj0gMTsKKysJCXMrKzsKKysJfQorK30KZGlmZiAtLWdpdCBhL3QvdDQyMTEvZXhwZWN0LnZhbmlzaGVzLWVhcmx5IGIvdC90NDIxMS9leHBlY3QudmFuaXNoZXMtZWFybHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3Y2QwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvZXhwZWN0LnZhbmlzaGVzLWVhcmx5CkBAIC0wLDAgKzEsMzkgQEAKK2NvbW1pdCA0NjU5NTM4ODQ0ZGFhMjg0OWIxYTllN2Q2ZmFkYjk2ZmNkMjZmYzgzCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6NDMgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIGJhY2sgdG8gY29tcGxldGUgbGluZQorCitkaWZmIC0tZ2l0IGEvYS5jIGIvYS5jCistLS0gYS9hLmMKKysrKyBiL2EuYworQEAgLTIyLDEgKzI0LDEgQEAKKy19CitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKysvKiBpbmNvbXBsZXRlIGxpbmVzIGFyZSBiYWQhICovCisKK2NvbW1pdCAxMDBiNjFhNmYyZjcyMGY4MTI2MjBhOWQxMGFmYjNhOTYwY2NiNzNjCitBdXRob3I6IFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+CitEYXRlOiAgIFRodSBGZWIgMjggMTA6NDg6MTAgMjAxMyArMDEwMAorCisgICAgY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIGEvYS5jCisrKysgYi9hLmMKK0BAIC0yMiwxICsyMiwxIEBACistfQorK30KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCitjb21taXQgZGU0YzQ4YWU4MTQ3OTJjMDJhNDljNGMzYzBjNzU3YWU2OWM1NWY2YQorQXV0aG9yOiBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPgorRGF0ZTogICBUaHUgRmViIDI4IDEwOjQ0OjQ4IDIwMTMgKzAxMDAKKworICAgIGluaXRpYWwKKworZGlmZiAtLWdpdCBhL2EuYyBiL2EuYworLS0tIC9kZXYvbnVsbAorKysrIGIvYS5jCitAQCAtMCwwICsyMCwxIEBACisrfQpkaWZmIC0tZ2l0IGEvdC90NDIxMS9oaXN0b3J5LmV4cG9ydCBiL3QvdDQyMTEvaGlzdG9yeS5leHBvcnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjlmNDFlMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyMTEvaGlzdG9yeS5leHBvcnQKQEAgLTAsMCArMSw0MDYgQEAKK2Jsb2IKK21hcmsgOjEKK2RhdGEgMTU3CisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IGYoaW50IHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9Cit9CisKKy8qCisgKiBBIGNvbW1lbnQuCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKK3Jlc2V0IHJlZnMvdGFncy9zaW1wbGUKK2NvbW1pdCByZWZzL3RhZ3Mvc2ltcGxlCittYXJrIDoyCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDY4OCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ2ODggKzAxMDAKK2RhdGEgOAoraW5pdGlhbAorTSAxMDA2NDQgOjEgYS5jCisKK2Jsb2IKK21hcmsgOjMKK2RhdGEgMTY4CisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IGYoaW50IHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBBIGNvbW1lbnQuCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKK2NvbW1pdCByZWZzL3RhZ3Mvc2ltcGxlCittYXJrIDo0CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDY5NSArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ2OTUgKzAxMDAKK2RhdGEgMTEKK2NoYW5nZSBmKCkKK2Zyb20gOjIKK00gMTAwNjQ0IDozIGEuYworCitibG9iCittYXJrIDo1CitkYXRhIDE3MQorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBBIGNvbW1lbnQuCisgKi8KKworaW50IG1haW4gKCkKK3sKKwlwcmludGYoIiVsZFxuIiwgZigxNSkpOworCXJldHVybiAwOworfQorCitjb21taXQgcmVmcy90YWdzL3NpbXBsZQorbWFyayA6NgorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ3MTYgKzAxMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0NzE2ICswMTAwCitkYXRhIDIxCit0b3VjaCBib3RoIGZ1bmN0aW9ucworZnJvbSA6NAorTSAxMDA2NDQgOjUgYS5jCisKK2Jsb2IKK21hcmsgOjcKK2RhdGEgMTg1CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCA+Pj0gMTsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworY29tbWl0IHJlZnMvdGFncy9zaW1wbGUKK21hcmsgOjgKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0NzQxICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDc0MSArMDEwMAorZGF0YSAxNAordG91Y2ggY29tbWVudAorZnJvbSA6NgorTSAxMDA2NDQgOjcgYS5jCisKK2Jsb2IKK21hcmsgOjkKK2RhdGEgMjA1CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCA+Pj0gMTsKKwkJcysrOworCX0KKwlyZXR1cm4gczsKK30KKworLyoKKyAqIFRoaXMgaXMgb25seSBhbiBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworY29tbWl0IHJlZnMvdGFncy9zaW1wbGUKK21hcmsgOjEwCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDg2MCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ4NjAgKzAxMDAKK2RhdGEgMjUKK2NoYW5nZSBhdCB2ZXJ5IGJlZ2lubmluZworZnJvbSA6OAorTSAxMDA2NDQgOjkgYS5jCisKK2Jsb2IKK21hcmsgOjExCitkYXRhIDIwNAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9Citjb21taXQgcmVmcy90YWdzL3NpbXBsZQorbWFyayA6MTIKK2F1dGhvciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0ODkwICswMTAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDg5MCArMDEwMAorZGF0YSAzNgorY2hhbmdlIHRvIGFuIGluY29tcGxldGUgbGluZSBhdCBlbmQKK2Zyb20gOjEwCitNIDEwMDY0NCA6MTEgYS5jCisKK2Jsb2IKK21hcmsgOjEzCitkYXRhIDIzOAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2xvbmcgZihsb25nIHgpCit7CisJaW50IHMgPSAwOworCXdoaWxlICh4KSB7CisJCXggPj49IDE7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IHJlZnMvdGFncy9zaW1wbGUKK21hcmsgOjE0CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDkyMyArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ5MjMgKzAxMDAKK2RhdGEgMjkKK2NoYW5nZSBiYWNrIHRvIGNvbXBsZXRlIGxpbmUKK2Zyb20gOjEyCitNIDEwMDY0NCA6MTMgYS5jCisKK2NvbW1pdCByZWZzL3RhZ3MvbW92ZS1zdXBwb3J0CittYXJrIDoxNQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ5NjggKzAxMDAKK2NvbW1pdHRlciBUaG9tYXMgUmFzdCA8dHJhc3RAc3R1ZGVudC5ldGh6LmNoPiAxMzYyMDQ0OTY4ICswMTAwCitkYXRhIDEwCittb3ZlIGZpbGUKK2Zyb20gOjE0CitEIGEuYworTSAxMDA2NDQgOjEzIGIuYworCitibG9iCittYXJrIDoxNgorZGF0YSAyMzcKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4IC89IDI7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IHJlZnMvdGFncy9tb3ZlLXN1cHBvcnQKK21hcmsgOjE3CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NDk5MCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDQ5OTAgKzAxMDAKK2RhdGEgMjIKK2Fub3RoZXIgc2ltcGxlIGNoYW5nZQorZnJvbSA6MTUKK00gMTAwNjQ0IDoxNiBiLmMKKworYmxvYgorbWFyayA6MTgKK2RhdGEgMjU0CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbG9uZyBmKGxvbmcgeCk7CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYW4gZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworbG9uZyBmKGxvbmcgeCkKK3sKKwlpbnQgcyA9IDA7CisJd2hpbGUgKHgpIHsKKwkJeCAvPSAyOworCQlzKys7CisJfQorCXJldHVybiBzOworfQorCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK21hcmsgOjE5CithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QHN0dWRlbnQuZXRoei5jaD4gMTM2MjA0NTAyNCArMDEwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBzdHVkZW50LmV0aHouY2g+IDEzNjIwNDUwMjQgKzAxMDAKK2RhdGEgMjEKK21vdmUgd2l0aGluIHRoZSBmaWxlCitmcm9tIDoxNworTSAxMDA2NDQgOjE4IGIuYworCitibG9iCittYXJrIDoyMAorZGF0YSAyNDMKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4ID4+PSAxOworCQlzKys7CisJfQorCXJldHVybiBzOworfQorCisvKgorICogVGhpcyBpcyBvbmx5IGEgc2hvcnQgZXhhbXBsZSEKKyAqLworCitpbnQgbWFpbiAoKQoreworCXByaW50ZigiJWxkXG4iLCBmKDE1KSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGluY29tcGxldGUgbGluZXMgYXJlIGJhZCEgKi8KKworY29tbWl0IHJlZnMvaGVhZHMvcGFyYWxsZWwtY2hhbmdlCittYXJrIDoyMQorYXV0aG9yIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM2NTc3NjE1NyArMDIwMAorY29tbWl0dGVyIFRob21hcyBSYXN0IDx0cmFzdEBpbmYuZXRoei5jaD4gMTM2NTc3NjE1NyArMDIwMAorZGF0YSA1NQorY2hhbmdlIG9uIGFub3RoZXIgbGluZSBvZiBoaXN0b3J5IHdoaWxlIHJlbmFtZSBoYXBwZW5zCitmcm9tIDoxNAorTSAxMDA2NDQgOjIwIGEuYworCitibG9iCittYXJrIDoyMgorZGF0YSAyNDIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitsb25nIGYobG9uZyB4KQoreworCWludCBzID0gMDsKKwl3aGlsZSAoeCkgeworCQl4IC89IDI7CisJCXMrKzsKKwl9CisJcmV0dXJuIHM7Cit9CisKKy8qCisgKiBUaGlzIGlzIG9ubHkgYSBzaG9ydCBleGFtcGxlIQorICovCisKK2ludCBtYWluICgpCit7CisJcHJpbnRmKCIlbGRcbiIsIGYoMTUpKTsKKwlyZXR1cm4gMDsKK30KKworLyogaW5jb21wbGV0ZSBsaW5lcyBhcmUgYmFkISAqLworCitjb21taXQgcmVmcy9oZWFkcy9wYXJhbGxlbC1jaGFuZ2UKK21hcmsgOjIzCithdXRob3IgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzY1Nzc2MTg0ICswMjAwCitjb21taXR0ZXIgVGhvbWFzIFJhc3QgPHRyYXN0QGluZi5ldGh6LmNoPiAxMzY1Nzc2MTkxICswMjAwCitkYXRhIDI0CitNZXJnZSBhY3Jvc3MgdGhlIHJlbmFtZQorZnJvbSA6MjEKK21lcmdlIDoxNworRCBhLmMKK00gMTAwNjQ0IDoyMiBiLmMKKworcmVzZXQgcmVmcy9oZWFkcy9wYXJhbGxlbC1jaGFuZ2UKK2Zyb20gOjIzCisKZGlmZiAtLWdpdCBhL3QvdDQyMTItbG9nLWNvcnJ1cHQuc2ggYi90L3Q0MjEyLWxvZy1jb3JydXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyYWE4YjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjEyLWxvZy1jb3JydXB0LnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgbG9nIHdpdGggaW52YWxpZCBjb21taXQgaGVhZGVycycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgZm9vICYmCisKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfAorCXNlZCAiL15hdXRob3IgL3MvPi8+LTw+LyIgPmJyb2tlbl9lbWFpbC5jb21taXQgJiYKKwlnaXQgaGFzaC1vYmplY3QgLXcgLXQgY29tbWl0IGJyb2tlbl9lbWFpbC5jb21taXQgPmJyb2tlbl9lbWFpbC5oYXNoICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9icm9rZW5fZW1haWwgJChjYXQgYnJva2VuX2VtYWlsLmhhc2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgbm90aWNlcyBicm9rZW4gY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwIGludmFsaWQuYXV0aG9yIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbG9nIHdpdGggYnJva2VuIGF1dGhvciBlbWFpbCcgJworCXsKKwkJZWNobyBjb21taXQgJChjYXQgYnJva2VuX2VtYWlsLmhhc2gpCisJCWVjaG8gIkF1dGhvcjogQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4iCisJCWVjaG8gIkRhdGU6ICAgVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAiCisJCWVjaG8KKwkJZWNobyAiICAgIGZvbyIKKwl9ID5leHBlY3Qub3V0ICYmCisJOiA+ZXhwZWN0LmVyciAmJgorCisJZ2l0IGxvZyBicm9rZW5fZW1haWwgPmFjdHVhbC5vdXQgMj5hY3R1YWwuZXJyICYmCisKKwl0ZXN0X2NtcCBleHBlY3Qub3V0IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZXJyIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxvZyAtLWZvcm1hdCB3aXRoIGJyb2tlbiBhdXRob3IgZW1haWwnICcKKwllY2hvICJBIFUgVGhvcithdXRob3JAZXhhbXBsZS5jb20rVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAiID5leHBlY3Qub3V0ICYmCisJOiA+ZXhwZWN0LmVyciAmJgorCisJZ2l0IGxvZyAtLWZvcm1hdD0iJWFuKyVhZSslYWQiIGJyb2tlbl9lbWFpbCA+YWN0dWFsLm91dCAyPmFjdHVhbC5lcnIgJiYKKworCXRlc3RfY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dCAmJgorCXRlc3RfY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorJworCittdW5nZV9hdXRob3JfZGF0ZSAoKSB7CisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJDEiID5jb21taXQub3JpZyAmJgorCXNlZCAicy9eXChhdXRob3IgLio+XCkgWzAtOV0qL1wxICQyLyIgPGNvbW1pdC5vcmlnID5jb21taXQubXVuZ2UgJiYKKwlnaXQgaGFzaC1vYmplY3QgLXcgLXQgY29tbWl0IGNvbW1pdC5tdW5nZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhcnNhYmxlIGRhdGVzIHByb2R1Y2Ugc2VudGluZWwgdmFsdWUnICcKKwljb21taXQ9JChtdW5nZV9hdXRob3JfZGF0ZSBIRUFEIHRvdGFsbHlfYm9ndXMpICYmCisJZWNobyAiRGF0ZTogICBUaHUgSmFuIDEgMDA6MDA6MDAgMTk3MCArMDAwMCIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgJGNvbW1pdCA+YWN0dWFsLmZ1bGwgJiYKKwlncmVwIERhdGUgPGFjdHVhbC5mdWxsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VucGFyc2FibGUgZGF0ZXMgcHJvZHVjZSBzZW50aW5lbCB2YWx1ZSAoJWFkKScgJworCWNvbW1pdD0kKG11bmdlX2F1dGhvcl9kYXRlIEhFQUQgdG90YWxseV9ib2d1cykgJiYKKwllY2hvID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVhZCAkY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgZGF0ZSBpcyAyXjY0ICsgMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGF0ZSBwYXJzZXIgcmVjb2duaXplcyBpbnRlZ2VyIG92ZXJmbG93JyAnCisJY29tbWl0PSQobXVuZ2VfYXV0aG9yX2RhdGUgSEVBRCAxODQ0Njc0NDA3MzcwOTU1MTYxNykgJiYKKwllY2hvICJUaHUgSmFuIDEgMDA6MDA6MDAgMTk3MCArMDAwMCIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JWFkICRjb21taXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBkYXRlIGlzIDJeNjQgLSAyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkYXRlIHBhcnNlciByZWNvZ25pemVzIHRpbWVfdCBvdmVyZmxvdycgJworCWNvbW1pdD0kKG11bmdlX2F1dGhvcl9kYXRlIEhFQUQgMTg0NDY3NDQwNzM3MDk1NTE2MTQpICYmCisJZWNobyAiVGh1IEphbiAxIDAwOjAwOjAwIDE5NzAgKzAwMDAiID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVhZCAkY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgZGF0ZSBpcyB3aXRoaW4gMl42My0xLCBidXQgZW5vdWdoIHRvIGNob2tlIGdsaWJjJ3MgZ210aW1lCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYnN1cmRseSBmYXItaW4tZnV0dXJlIGRhdGUnICcKKwljb21taXQ9JChtdW5nZV9hdXRob3JfZGF0ZSBIRUFEIDk5OTk5OTk5OTk5OTk5OTk5OSkgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVhZCAkY29tbWl0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDI1Mi1hbS1vcHRpb25zLnNoIGIvdC90NDI1Mi1hbS1vcHRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU3NThlNjMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyLWFtLW9wdGlvbnMuc2gKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhbSB3aXRoIG9wdGlvbnMgYW5kIG5vdCBsb3NpbmcgdGhlbScKKy4gLi90ZXN0LWxpYi5zaAorCit0bT0iJFRFU1RfRElSRUNUT1JZL3Q0MjUyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwljcCAiJHRtL2ZpbGUtMS0wIiBmaWxlLTEgJiYKKwljcCAiJHRtL2ZpbGUtMi0wIiBmaWxlLTIgJiYKKwlnaXQgYWRkIGZpbGUtMSBmaWxlLTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgYW0gLS13aGl0ZXNwYWNlPWZpeCcgJworCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLXdoaXRlc3BhY2U9Zml4ICIkdG0iL2FtLXRlc3QtMS0/ICYmCisJZ2l0IGFtIC0tc2tpcCAmJgorCWdyZXAgMyBmaWxlLTEgJiYKKwlncmVwICJeU2l4JCIgZmlsZS0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVycnVwdGVkIGFtIC1DMScgJworCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtQzEgIiR0bSIvYW0tdGVzdC0yLT8gJiYKKwlnaXQgYW0gLS1za2lwICYmCisJZ3JlcCAzIGZpbGUtMSAmJgorCWdyZXAgIl5UaHJlZSQiIGZpbGUtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnRlcnJ1cHRlZCBhbSAtcDInICcKKwlybSAtcmYgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLXAyICIkdG0iL2FtLXRlc3QtMy0/ICYmCisJZ2l0IGFtIC0tc2tpcCAmJgorCWdyZXAgMyBmaWxlLTEgJiYKKwlncmVwICJeVGhyZWUkIiBmaWxlLTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgYW0gLUMxIC1wMicgJworCXJtIC1yZiAuZ2l0L3JlYmFzZS1hcHBseSAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtcDIgLUMxICIkdG0iL2FtLXRlc3QtNC0/ICYmCisJZ2l0IGFtIC0tc2tpcCAmJgorCWdyZXAgMyBmaWxlLTEgJiYKKwlncmVwICJeVGhyZWUkIiBmaWxlLTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJydXB0ZWQgYW0gLS1kaXJlY3Rvcnk9ImZyb3R6IG5pdGZvbCInICcKKwlybSAtcmYgLmdpdC9yZWJhc2UtYXBwbHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gLS1kaXJlY3Rvcnk9ImZyb3R6IG5pdGZvbCIgIiR0bSIvYW0tdGVzdC01LT8gJiYKKwlnaXQgYW0gLS1za2lwICYmCisJZ3JlcCBPbmUgImZyb3R6IG5pdGZvbC9maWxlLTUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHRvIGEgZnVubnkgcGF0aCcgJworCXdpdGhfc3E9IndpdGgnXCcnc3EiICYmCisJcm0gLWZyIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZ2l0IGFtIC0tZGlyZWN0b3J5PSIkd2l0aF9zcSIgIiR0bSIvYW0tdGVzdC01LTIgJiYKKwl0ZXN0IC1mICIkd2l0aF9zcS9maWxlLTUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIC0tcmVqZWN0JyAnCisJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIC0tcmVqZWN0ICIkdG0iL2FtLXRlc3QtNi0xICYmCisJZ3JlcCAiQEAgLTEsMyArMSwzIEBAIiBmaWxlLTIucmVqICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUgLS1xdWlldCBmaWxlLTIgJiYKKwlncmVwICJbLV0tcmVqZWN0IiAuZ2l0L3JlYmFzZS1hcHBseS9hcHBseS1vcHQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtMS0xIGIvdC90NDI1Mi9hbS10ZXN0LTEtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGMwOWRjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTEtMQpAQCAtMCwwICsxLDE5IEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBUaHJlZQorCitBcHBsaWNhdGlvbiBvZiB0aGlzIHNob3VsZCBiZSByZWplY3RlZCBiZWNhdXNlIHRoZSBmaXJzdCBsaW5lIGluIHRoZQorY29udGV4dCBkb2VzIG5vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2ZpbGUtMSB3L2ZpbGUtMQoraW5kZXggMDZlNTY3Yi4uMTBmODM0MiAxMDA2NDQKKy0tLSBpL2ZpbGUtMQorKysrIHcvZmlsZS0xCitAQCAtMSw2ICsxLDYgQEAKKyBPbmUKKyAyCistMworK1RocmVlIAorIDQKKyA1CisgNgpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTEtMiBiL3QvdDQyNTIvYW0tdGVzdC0xLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4NzRhZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC0xLTIKQEAgLTAsMCArMSwyMSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogU2l4CisKK0FwcGx5aW5nIHRoaXMgcGF0Y2ggd2l0aCAtLXdoaXRlc3BhY2U9Zml4IHNob3VsZCBsb3NlIAordGhlIHRyYWlsaW5nIHdoaXRlc3BhY2UgYWZ0ZXIgIlNpeCIuCisKK2RpZmYgLS1naXQgaS9maWxlLTIgdy9maWxlLTIKK2luZGV4IDA2ZTU2N2IuLmI2ZjNhMTYgMTAwNjQ0CistLS0gaS9maWxlLTIKKysrKyB3L2ZpbGUtMgorQEAgLTEsNyArMSw3IEBACisgMQorIDIKKy0zCisrVGhyZWUKKyA0CisgNQorLTYKKytTaXggCisgNwpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTItMSBiL3QvdDQyNTIvYW0tdGVzdC0yLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVkYTk0YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC0yLTEKQEAgLTAsMCArMSwxOSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogVGhyZWUKKworQXBwbGljYXRpb24gb2YgdGhpcyBzaG91bGQgYmUgcmVqZWN0ZWQgZXZlbiB3aXRoIC1DMSBiZWNhdXNlIHRoZQorcHJlaW1hZ2UgbGluZSBpbiB0aGUgY29udGV4dCBkb2VzIG5vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2ZpbGUtMSB3L2ZpbGUtMQoraW5kZXggMDZlNTY3Yi4uMTBmODM0MiAxMDA2NDQKKy0tLSBpL2ZpbGUtMQorKysrIHcvZmlsZS0xCitAQCAtMSw2ICsxLDYgQEAKKyAxCisgMgorLVRyZXMKKytUaHJlZSAKKyA0CisgNQorIDYKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC0yLTIgYi90L3Q0MjUyL2FtLXRlc3QtMi0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYzY2MDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtMi0yCkBAIC0wLDAgKzEsMjEgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFNpeAorCitBcHBseWluZyB0aGlzIHBhdGNoIHdpdGggLUMxIHNob3VsZCBiZSBzdWNjZXNzZnVsIGV2ZW4gdGhvdWdoIAordGhlIGZpcnN0IGxpbmUgaW4gdGhlIGNvbnRleHQgZG9lcyBub3QgbWF0Y2guCisKK2RpZmYgLS1naXQgaS9maWxlLTIgdy9maWxlLTIKK2luZGV4IDA2ZTU2N2IuLmI2ZjNhMTYgMTAwNjQ0CistLS0gaS9maWxlLTIKKysrKyB3L2ZpbGUtMgorQEAgLTEsNyArMSw3IEBACisgT25lCisgMgorLTMKKytUaHJlZQorIDQKKyA1CistNgorK1NpeAorIDcKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC0zLTEgYi90L3Q0MjUyL2FtLXRlc3QtMy0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwOGU1YWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtMy0xCkBAIC0wLDAgKzEsMTkgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFRocmVlCisKK0FwcGxpY2F0aW9uIG9mIHRoaXMgc2hvdWxkIGJlIHJlamVjdGVkIGV2ZW4gd2l0aCAtcDIgYmVjYXVzZSB0aGUKK3ByZWltYWdlIGxpbmUgaW4gdGhlIGNvbnRleHQgZG9lcyBub3QgbWF0Y2guCisKK2RpZmYgLS1naXQgaS9qdW5rL2ZpbGUtMSB3L2p1bmsvZmlsZS0xCitpbmRleCAwNmU1NjdiLi4xMGY4MzQyIDEwMDY0NAorLS0tIGkvanVuay9maWxlLTEKKysrKyB3L2p1bmsvZmlsZS0xCitAQCAtMSw2ICsxLDYgQEAKKyAxCisgMgorLVRyZXMKKytUaHJlZSAKKyA0CisgNQorIDYKZGlmZiAtLWdpdCBhL3QvdDQyNTIvYW0tdGVzdC0zLTIgYi90L3Q0MjUyL2FtLXRlc3QtMy0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwODFiOTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2FtLXRlc3QtMy0yCkBAIC0wLDAgKzEsMjEgQEAKK0Zyb206IEEgVSBUaG9yIDxhdS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogVGh1IERlYyA0IDE2OjAwOjAwIDIwMDggLTA4MDAKK1N1YmplY3Q6IFNpeAorCitBcHBseWluZyB0aGlzIHBhdGNoIHdpdGggLXAyIHNob3VsZCBiZSBzdWNjZXNzZnVsIGV2ZW4gdGhvdWdoCit0aGUgcGF0Y2ggaXMgYWdhaW5zdCBhIHdyb25nIGxldmVsLgorCitkaWZmIC0tZ2l0IGkvanVuay9maWxlLTIgdy9qdW5rL2ZpbGUtMgoraW5kZXggMDZlNTY3Yi4uYjZmM2ExNiAxMDA2NDQKKy0tLSBpL2p1bmsvZmlsZS0yCisrKysgdy9qdW5rL2ZpbGUtMgorQEAgLTEsNyArMSw3IEBACisgMQorIDIKKy0zCisrVGhyZWUKKyA0CisgNQorLTYKKytTaXgKKyA3CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtNC0xIGIvdC90NDI1Mi9hbS10ZXN0LTQtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDhjZDZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTQtMQpAQCAtMCwwICsxLDE5IEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBUaHJlZQorCitBcHBsaWNhdGlvbiBvZiB0aGlzIHNob3VsZCBiZSByZWplY3RlZCBldmVuIHdpdGggLUMxIC1wMiBiZWNhdXNlCit0aGUgcHJlaW1hZ2UgbGluZSBpbiB0aGUgY29udGV4dCBkb2VzIG5vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2p1bmsvZmlsZS0xIHcvanVuay9maWxlLTEKK2luZGV4IDA2ZTU2N2IuLjEwZjgzNDIgMTAwNjQ0CistLS0gaS9qdW5rL2ZpbGUtMQorKysrIHcvanVuay9maWxlLTEKK0BAIC0xLDYgKzEsNiBAQAorIDEKKyAyCistVHJlcworK1RocmVlIAorIDQKKyA1CisgNgpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTQtMiBiL3QvdDQyNTIvYW0tdGVzdC00LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2OWJmYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC00LTIKQEAgLTAsMCArMSwyMiBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogU2l4CisKK0FwcGx5aW5nIHRoaXMgcGF0Y2ggd2l0aCAtQzEgLXAyIHNob3VsZCBiZSBzdWNjZXNzZnVsIGV2ZW4gdGhvdWdoCit0aGUgcGF0Y2ggaXMgYWdhaW5zdCBhIHdyb25nIGxldmVsIGFuZCB0aGUgZmlyc3QgY29udGV4dCBsaW5lIGRvZXMKK25vdCBtYXRjaC4KKworZGlmZiAtLWdpdCBpL2p1bmsvZmlsZS0yIHcvanVuay9maWxlLTIKK2luZGV4IDA2ZTU2N2IuLmI2ZjNhMTYgMTAwNjQ0CistLS0gaS9qdW5rL2ZpbGUtMgorKysrIHcvanVuay9maWxlLTIKK0BAIC0xLDcgKzEsNyBAQAorIE9uZQorIDIKKy0zCisrVGhyZWUKKyA0CisgNQorLTYKKytTaXgKKyA3CmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtNS0xIGIvdC90NDI1Mi9hbS10ZXN0LTUtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTdiZjI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTUtMQpAQCAtMCwwICsxLDIwIEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBTaXgKKworQXBwbHlpbmcgdGhpcyBwYXRjaCB3aXRoIC0tZGlyZWN0b3J5PSdmcm90eiBuaXRmb2wnIHNob3VsZCBmYWlsCisKK2RpZmYgLS1naXQgaS9qdW5rL2ZpbGUtMiB3L2p1bmsvZmlsZS0yCitpbmRleCAwNmU1NjdiLi5iNmYzYTE2IDEwMDY0NAorLS0tIGkvanVuay9maWxlLTIKKysrKyB3L2p1bmsvZmlsZS0yCitAQCAtMSw3ICsxLDcgQEAKKyBPbmUKKyAyCistMworK1RocmVlCisgNAorIDUKKy02CisrU2l4CisgNwpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9hbS10ZXN0LTUtMiBiL3QvdDQyNTIvYW0tdGVzdC01LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczMDI1YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvYW0tdGVzdC01LTIKQEAgLTAsMCArMSwxNSBAQAorRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBUaHUgRGVjIDQgMTY6MDA6MDAgMjAwOCAtMDgwMAorU3ViamVjdDogU2l4CisKK0FwcGx5aW5nIHRoaXMgcGF0Y2ggd2l0aCAtLWRpcmVjdG9yeT0nZnJvdHogbml0Zm9sJyBzaG91bGQgc3VjY2VlZAorCitkaWZmIC0tZ2l0IGkvZmlsZS01IHcvZmlsZS01CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwLi4xZDZlZDlmCistLS0gL2Rldi9udWxsCisrKysgdy9maWxlLTUKK0BAIC0wLDAgKzEsMyBAQAorK09uZQorK3R3bworK3RocmVlCmRpZmYgLS1naXQgYS90L3Q0MjUyL2FtLXRlc3QtNi0xIGIvdC90NDI1Mi9hbS10ZXN0LTYtMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODg1OWU5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1Mi9hbS10ZXN0LTYtMQpAQCAtMCwwICsxLDIxIEBACitGcm9tOiBBIFUgVGhvciA8YXUudGhvckBleGFtcGxlLmNvbT4KK0RhdGU6IFRodSBEZWMgNCAxNjowMDowMCAyMDA4IC0wODAwCitTdWJqZWN0OiBIdWgKKworU2hvdWxkIGZhaWwgYW5kIGxlYXZlIHJlamVjdHMKKworZGlmZiAtLWdpdCBpL2ZpbGUtMiB3L2ZpbGUtMgoraW5kZXggMDZlNTY3Yi4uYjZmM2ExNiAxMDA2NDQKKy0tLSBpL2ZpbGUtMgorKysrIHcvZmlsZS0yCitAQCAtMSwzICsxLDMgQEAKKy0wCisrT25lCisgMgorIDMKK0BAIC00LDQgKzQsNCBAQAorIDQKKyA1CistNgorK1NpeAorIDcKZGlmZiAtLWdpdCBhL3QvdDQyNTIvZmlsZS0xLTAgYi90L3Q0MjUyL2ZpbGUtMS0wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZTU2N2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjUyL2ZpbGUtMS0wCkBAIC0wLDAgKzEsNyBAQAorMQorMgorMworNAorNQorNgorNwpkaWZmIC0tZ2l0IGEvdC90NDI1Mi9maWxlLTItMCBiL3QvdDQyNTIvZmlsZS0yLTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZlNTY3YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTIvZmlsZS0yLTAKQEAgLTAsMCArMSw3IEBACisxCisyCiszCis0Cis1Cis2Cis3CmRpZmYgLS1naXQgYS90L3Q0MjUzLWFtLWtlZXAtY3ItZG9zLnNoIGIvdC90NDI1My1hbS1rZWVwLWNyLWRvcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NTNmZTNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NDI1My1hbS1rZWVwLWNyLWRvcy5zaApAQCAtMCwwICsxLDk2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIFN0ZWZhbi1XLiBIYWhuCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1hbSBtYm94IHdpdGggZG9zIGxpbmUgZW5kaW5nLgorCisnCisuIC4vdGVzdC1saWIuc2gKKworIyBUaHJlZSBwYXRjaGVzIHdoaWNoIHdpbGwgYmUgYWRkZWQgYXMgZmlsZXMgd2l0aCBkb3MgbGluZSBlbmRpbmcuCisKK2NhdCA+ZmlsZTEgPDxcRU9GCitsaW5lIDEKK0VPRgorCitjYXQgPmZpbGUxYSA8PFxFT0YKK2xpbmUgMQorbGluZSA0CitFT0YKKworY2F0ID5maWxlMiA8PFxFT0YKK2xpbmUgMQorbGluZSAyCitFT0YKKworY2F0ID5maWxlMyA8PFxFT0YKK2xpbmUgMQorbGluZSAyCitsaW5lIDMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IHdpdGggZG9zIGZpbGVzJyAnCisJYXBwZW5kX2NyIDxmaWxlMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCWdpdCB0YWcgaW5pdGlhbCAmJgorCWFwcGVuZF9jciA8ZmlsZTIgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFNlY29uZCAmJgorCWFwcGVuZF9jciA8ZmlsZTMgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFRoaXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggZG9zIGZpbGVzIHdpdGhvdXQgLS1rZWVwLWNyJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGRvc2ZpbGVzIGluaXRpYWwgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1rIGluaXRpYWwuLm1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtayAtMyAwMDAqLnBhdGNoICYmCisJZ2l0IGFtIC0tYWJvcnQgJiYKKwlybSAtcmYgLmdpdC9yZWJhc2UtYXBwbHkgMDAwKi5wYXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIGRvcyBmaWxlcyB3aXRoIC0ta2VlcC1jcicgJworCWdpdCBjaGVja291dCAtYiBkb3NmaWxlcy1rZWVwLWNyIGluaXRpYWwgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1rIC0tc3Rkb3V0IGluaXRpYWwuLm1hc3RlciB8IGdpdCBhbSAtLWtlZXAtY3IgLWsgLTMgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBkb3MgZmlsZXMgY29uZmlnIGFtLmtlZXBjcicgJworCWdpdCBjb25maWcgYW0ua2VlcGNyIDEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZG9zZmlsZXMtY29uZi1rZWVwY3IgaW5pdGlhbCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLWsgLS1zdGRvdXQgaW5pdGlhbC4ubWFzdGVyIHwgZ2l0IGFtIC1rIC0zICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtIHdpdGggZG9zIGZpbGVzIGNvbmZpZyBhbS5rZWVwY3Igb3ZlcnJpZGRlbiBieSAtLW5vLWtlZXAtY3InICcKKwlnaXQgY29uZmlnIGFtLmtlZXBjciAxICYmCisJZ2l0IGNoZWNrb3V0IC1iIGRvc2ZpbGVzLWNvbmYta2VlcGNyLW92ZXJyaWRlIGluaXRpYWwgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC1rIGluaXRpYWwuLm1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtayAtMyAtLW5vLWtlZXAtY3IgMDAwKi5wYXRjaCAmJgorCWdpdCBhbSAtLWFib3J0ICYmCisJcm0gLXJmIC5naXQvcmViYXNlLWFwcGx5IDAwMCoucGF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW0gd2l0aCBkb3MgZmlsZXMgd2l0aCAtLWtlZXAtY3IgY29udGludWUnICcKKwlnaXQgY2hlY2tvdXQgLWIgZG9zZmlsZXMta2VlcC1jci1jb250aW51ZSBpbml0aWFsICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtayBpbml0aWFsLi5tYXN0ZXIgJiYKKwlhcHBlbmRfY3IgPGZpbGUxYSA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImRpZmZlcmVudCBwYXRjaCIgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSAtLWtlZXAtY3IgLWsgLTMgMDAwKi5wYXRjaCAmJgorCWFwcGVuZF9jciA8ZmlsZTIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgYW0gLTMgLS1yZXNvbHZlZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbSB3aXRoIHVuaXggZmlsZXMgY29uZmlnIGFtLmtlZXBjciBvdmVycmlkZGVuIGJ5IC0tbm8ta2VlcC1jcicgJworCWdpdCBjb25maWcgYW0ua2VlcGNyIDEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdW5peGZpbGVzLWNvbmYta2VlcGNyLW92ZXJyaWRlIGluaXRpYWwgJiYKKwljcCAtZiBmaWxlMSBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibGluZSBlbmRpbmcgdG8gdW5peCIgZmlsZSAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLWsgaW5pdGlhbC4ubWFzdGVyICYmCisJZ2l0IGFtIC1rIC0zIC0tbm8ta2VlcC1jciAwMDAqLnBhdGNoICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgLXcgbWFzdGVyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDI1NC1hbS1jb3JydXB0LnNoIGIvdC90NDI1NC1hbS1jb3JydXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg1NzE2ZGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MjU0LWFtLWNvcnJ1cHQuc2gKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhbSB3aXRoIGNvcnJ1cHQgaW5wdXQnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJIyBOb3RlIHRoZSBtaXNzaW5nICIrKysiIGxpbmU6CisJY2F0ID5iYWQtcGF0Y2guZGlmZiA8PC1cRU9GICYmCisJRnJvbTogQSBVIFRob3IgPGF1LnRob3JAZXhhbXBsZS5jb20+CisJZGlmZiAtLWdpdCBhL2YgYi9mCisJaW5kZXggNzg5ODE5Mi4uNjE3ODA3OSAxMDA2NDQKKwktLS0gYS9mCisJQEAgLTEgKzEgQEAKKwktYQorCStiCisJRU9GCisKKwllY2hvIGEgPmYgJiYKKwlnaXQgYWRkIGYgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwKKycKKworIyBUaGlzIHVzZWQgdG8gZmFpbCBiZWZvcmUsIHRvbywgYnV0IHdpdGggYSBkaWZmZXJlbnQgZGlhZ25vc3RpYy4KKyMgICBmYXRhbDogdW5hYmxlIHRvIHdyaXRlIGZpbGUgJyhudWxsKScgbW9kZSAxMDA2NDQ6IEJhZCBhZGRyZXNzCisjIEFsc28sIGl0IGhhZCB0aGUgdW53YW50ZWQgc2lkZS1lZmZlY3Qgb2YgZGVsZXRpbmcgZi4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyeSB0byBhcHBseSBjb3JydXB0ZWQgcGF0Y2gnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gYmFkLXBhdGNoLmRpZmYgMj5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGFyZSBkaWFnbm9zdGljOyBlbnN1cmUgZmlsZSBpcyBzdGlsbCBoZXJlJyAnCisJZWNobyAiZmF0YWw6IGdpdCBkaWZmIGhlYWRlciBsYWNrcyBmaWxlbmFtZSBpbmZvcm1hdGlvbiAobGluZSA0KSIgPmV4cGVjdGVkICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgZiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDQyNTUtYW0tc3VibW9kdWxlLnNoIGIvdC90NDI1NS1hbS1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGJhODE5NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDQyNTUtYW0tc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsOTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYW0gaGFuZGxpbmcgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKK2FtICgpIHsKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgIi4uJDEiIHwgZ2l0IGFtIC0KK30KKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJhbSIKKworYW1fM3dheSAoKSB7CisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ICIuLiQxIiB8IGdpdCBhbSAtLTN3YXkgLQorfQorCitLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfQVRURU1QVFNfVE9fTUVSR0VfUkVNT1ZFRF9TVUJNT0RVTEVfRklMRVM9MQordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJhbV8zd2F5IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkaWZmLnN1Ym1vZHVsZScgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCUlOSVRJQUw9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwlnaXQgaW5pdCBzdWJtb2R1bGUgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEID4uLi9pbml0aWFsLXN1Ym1vZHVsZQorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3N1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gZmlyc3QgJiYKKworCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCXRlc3RfY29tbWl0IHRocmVlICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRCA+Li4vZmlyc3Qtc3VibW9kdWxlCisJKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwlTRUNPTkQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgbXYgdHdvLnQgZm91ci50ICYmCisJCWdpdCBjb21taXQgLW0gInNlY29uZCBzdWJtb2R1bGUiICYmCisJCWdpdCByZXYtcGFyc2UgSEVBRCA+Li4vc2Vjb25kLXN1Ym1vZHVsZQorCSkgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1uby1lZGl0ICYmCisJVEhJUkQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0CisnCisKK3J1bl90ZXN0KCkgeworCVNUQVJUX0NPTU1JVD0kMSAmJgorCUVYUEVDVD0kMiAmJgorCSMgQWJvcnQgYW55IG1lcmdlcyBpbiBwcm9ncmVzczogdGhlIHByZXZpb3VzCisJIyB0ZXN0IG1heSBoYXZlIGZhaWxlZCwgYW5kIHdlIHNob3VsZCBjbGVhbiB1cC4KKwl0ZXN0X21pZ2h0X2ZhaWwgZ2l0IGFtIC0tYWJvcnQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICRTVEFSVF9DT01NSVQgJiYKKwlybSAtZiAqLnBhdGNoICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAmJgorCWdpdCByZXNldCAtLWhhcmQgJFNUQVJUX0NPTU1JVF4gJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBhbSAqLnBhdGNoICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgLUMgc3VibW9kdWxlIHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCAkRVhQRUNUIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLnN1Ym1vZHVsZSB1bnNldCcgJworCXRlc3RfdW5jb25maWcgZGlmZi5zdWJtb2R1bGUgJiYKKwlydW5fdGVzdCAkU0VDT05EIGZpcnN0LXN1Ym1vZHVsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLnN1Ym1vZHVsZSB1bnNldCB3aXRoIGV4dHJhIGZpbGUnICcKKwl0ZXN0X3VuY29uZmlnIGRpZmYuc3VibW9kdWxlICYmCisJcnVuX3Rlc3QgJFRISVJEIHNlY29uZC1zdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5zdWJtb2R1bGU9bG9nJyAnCisJdGVzdF9jb25maWcgZGlmZi5zdWJtb2R1bGUgbG9nICYmCisJcnVuX3Rlc3QgJFNFQ09ORCBmaXJzdC1zdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi5zdWJtb2R1bGU9bG9nIHdpdGggZXh0cmEgZmlsZScgJworCXRlc3RfY29uZmlnIGRpZmYuc3VibW9kdWxlIGxvZyAmJgorCXJ1bl90ZXN0ICRUSElSRCBzZWNvbmQtc3VibW9kdWxlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NDMwMC1tZXJnZS10cmVlLnNoIGIvdC90NDMwMC1tZXJnZS10cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwMTVlNDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q0MzAwLW1lcmdlLXRyZWUuc2gKQEAgLTAsMCArMSwzNTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgV2lsbCBQYWxtZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1lcmdlLXRyZWUnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgImluaXRpYWwiICJpbml0aWFsLWZpbGUiICJpbml0aWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGFkZCBBLCAhQicgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK2FkZGVkIGluIHJlbW90ZQorICB0aGVpciAgMTAwNjQ0IDQzZDVhOGVkNmVmNmMwMGZmNzc1MDA4NjMzZjk1Nzg3ZDA4ODI4NWQgT05FCitAQCAtMCwwICsxIEBACisrQUFBCitFWFBFQ1RFRAorCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImFkZC1hLW5vdC1iIiAiT05FIiAiQUFBIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgaW5pdGlhbCBhZGQtYS1ub3QtYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgYWRkICFBLCBCJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFWFBFQ1RFRCAmJgorRVhQRUNURUQKKworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJhZGQtbm90LWEtYiIgIk9ORSIgIkFBQSIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBpbml0aWFsIGFkZC1ub3QtYS1iIGluaXRpYWwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGFkZCBBLCBCIChzYW1lKScgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkLWEtYi1zYW1lLUEiICJPTkUiICJBQUEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImFkZC1hLWItc2FtZS1CIiAiT05FIiAiQUFBIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgYWRkLWEtYi1zYW1lLUEgYWRkLWEtYi1zYW1lLUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGFkZCBBLCBCIChkaWZmZXJlbnQpJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFWFBFQ1RFRCAmJgorYWRkZWQgaW4gYm90aAorICBvdXIgICAgMTAwNjQ0IDQzZDVhOGVkNmVmNmMwMGZmNzc1MDA4NjMzZjk1Nzg3ZDA4ODI4NWQgT05FCisgIHRoZWlyICAxMDA2NDQgYmE2MjkyMzhjYTg5NDg5ZjJiMzUwZTE5NmNhNDQ1ZTA5ZDhiYjgzNCBPTkUKK0BAIC0xICsxLDUgQEAKKys8PDw8PDw8IC5vdXIKKyBBQUEKKys9PT09PT09CisrQkJCCisrPj4+Pj4+PiAudGhlaXIKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkLWEtYi1kaWZmLUEiICJPTkUiICJBQUEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImFkZC1hLWItZGlmZi1CIiAiT05FIiAiQkJCIiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgYWRkLWEtYi1kaWZmLUEgYWRkLWEtYi1kaWZmLUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGNoYW5nZSBBLCAhQicgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLWEtbm90LWIiICJpbml0aWFsLWZpbGUiICJCQkIiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBjaGFuZ2UtYS1ub3QtYiBpbml0aWFsID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjaGFuZ2UgIUEsIEInICcKKwljYXQgPmV4cGVjdGVkIDw8XEVYUEVDVEVEICYmCittZXJnZWQKKyAgcmVzdWx0IDEwMDY0NCBiYTYyOTIzOGNhODk0ODlmMmIzNTBlMTk2Y2E0NDVlMDlkOGJiODM0IGluaXRpYWwtZmlsZQorICBvdXIgICAgMTAwNjQ0IGU3OWM1ZThmOTY0NDkzMjkwYTQwOTg4OGQ1NDEzYTczN2U4ZTVkZDUgaW5pdGlhbC1maWxlCitAQCAtMSArMSBAQAorLWluaXRpYWwKKytCQkIKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLW5vdC1hLWIiICJpbml0aWFsLWZpbGUiICJCQkIiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBpbml0aWFsIGNoYW5nZS1ub3QtYS1iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjaGFuZ2UgQSwgQiAoc2FtZSknICcKKwljYXQgPmV4cGVjdGVkIDw8XEVYUEVDVEVEICYmCitFWFBFQ1RFRAorCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLWItc2FtZS1BIiAiaW5pdGlhbC1maWxlIiAiQUFBIiAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLXNhbWUtQiIgImluaXRpYWwtZmlsZSIgIkFBQSIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBpbml0aWFsIGNoYW5nZS1hLWItc2FtZS1BIGNoYW5nZS1hLWItc2FtZS1CID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSBjaGFuZ2UgQSwgQiAoZGlmZmVyZW50KScgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK2NoYW5nZWQgaW4gYm90aAorICBiYXNlICAgMTAwNjQ0IGU3OWM1ZThmOTY0NDkzMjkwYTQwOTg4OGQ1NDEzYTczN2U4ZTVkZDUgaW5pdGlhbC1maWxlCisgIG91ciAgICAxMDA2NDQgNDNkNWE4ZWQ2ZWY2YzAwZmY3NzUwMDg2MzNmOTU3ODdkMDg4Mjg1ZCBpbml0aWFsLWZpbGUKKyAgdGhlaXIgIDEwMDY0NCBiYTYyOTIzOGNhODk0ODlmMmIzNTBlMTk2Y2E0NDVlMDlkOGJiODM0IGluaXRpYWwtZmlsZQorQEAgLTEgKzEsNSBAQAorKzw8PDw8PDwgLm91cgorIEFBQQorKz09PT09PT0KKytCQkIKKys+Pj4+Pj4+IC50aGVpcgorRVhQRUNURUQKKworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLWRpZmYtQSIgImluaXRpYWwtZmlsZSIgIkFBQSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAiY2hhbmdlLWEtYi1kaWZmLUIiICJpbml0aWFsLWZpbGUiICJCQkIiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBjaGFuZ2UtYS1iLWRpZmYtQSBjaGFuZ2UtYS1iLWRpZmYtQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGUgY2hhbmdlIEEsIEIgKG1peGVkKScgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK2NoYW5nZWQgaW4gYm90aAorICBiYXNlICAgMTAwNjQ0IGY0ZjFmOTk4Yzc3NzY1NjhjNGZmMzhmNTE2ZDc3ZmVmOTM5OWI1YTcgT05FCisgIG91ciAgICAxMDA2NDQgYWYxNGMyYzM0NzUzMzdjNzM3NTlkNTYxZWY3MGI1OWU1YzczMTE3NiBPTkUKKyAgdGhlaXIgIDEwMDY0NCAzNzJkNzYxNDkzZjUyNGQ0NGQ1OWJkMjQ3MDBjM2JkZjkxNGM5NzNjIE9ORQorQEAgLTcsNyArNywxMSBAQAorIEFBQQorIEFBQQorIEFBQQorKzw8PDw8PDwgLm91cgorIEJCQgorKz09PT09PT0KKytDQ0MKKys+Pj4+Pj4+IC50aGVpcgorIEFBQQorIEFBQQorIEFBQQorRVhQRUNURUQKKworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLW1peC1iYXNlIiAiT05FIiAiCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBCitBQUEKK0FBQQorQUFBIiAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLW1peC1BIiAiT05FIiBcCisJCSIkKHNlZCAtZSAiMXtzL0FBQS9CQkIvO30iIC1lICIxMHtzL0FBQS9CQkIvO30iIDxPTkUpIiAmJgorCWdpdCByZXNldCAtLWhhcmQgY2hhbmdlLWEtYi1taXgtYmFzZSAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1iLW1peC1CIiAiT05FIiBcCisJCSIkKHNlZCAtZSAiMXtzL0FBQS9CQkIvO30iIC1lICIxMHtzL0FBQS9DQ0MvO30iIDxPTkUpIiAmJgorCWdpdCBtZXJnZS10cmVlIGNoYW5nZS1hLWItbWl4LWJhc2UgY2hhbmdlLWEtYi1taXgtQSBjaGFuZ2UtYS1iLW1peC1CIFwKKwkJPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHJlbW92ZSBBLCAhQicgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAicm0tYS1ub3QtYi1iYXNlIiAiT05FIiAiQUFBIiAmJgorCWdpdCBybSBPTkUgJiYKKwlnaXQgY29tbWl0IC1tICJybS1hLW5vdC1iIiAmJgorCWdpdCB0YWcgInJtLWEtbm90LWIiICYmCisJZ2l0IG1lcmdlLXRyZWUgcm0tYS1ub3QtYi1iYXNlIHJtLWEtbm90LWIgcm0tYS1ub3QtYi1iYXNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSByZW1vdmUgIUEsIEInICcKKwljYXQgPmV4cGVjdGVkIDw8XEVYUEVDVEVEICYmCityZW1vdmVkIGluIHJlbW90ZQorICBiYXNlICAgMTAwNjQ0IDQzZDVhOGVkNmVmNmMwMGZmNzc1MDA4NjMzZjk1Nzg3ZDA4ODI4NWQgT05FCisgIG91ciAgICAxMDA2NDQgNDNkNWE4ZWQ2ZWY2YzAwZmY3NzUwMDg2MzNmOTU3ODdkMDg4Mjg1ZCBPTkUKK0BAIC0xICswLDAgQEAKKy1BQUEKK0VYUEVDVEVECisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwl0ZXN0X2NvbW1pdCAicm0tbm90LWEtYi1iYXNlIiAiT05FIiAiQUFBIiAmJgorCWdpdCBybSBPTkUgJiYKKwlnaXQgY29tbWl0IC1tICJybS1ub3QtYS1iIiAmJgorCWdpdCB0YWcgInJtLW5vdC1hLWIiICYmCisJZ2l0IG1lcmdlLXRyZWUgcm0tYS1ub3QtYi1iYXNlIHJtLWEtbm90LWItYmFzZSBybS1hLW5vdC1iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSByZW1vdmUgQSwgQiAoc2FtZSknICcKKwljYXQgPmV4cGVjdGVkIDw8XEVYUEVDVEVEICYmCitFWFBFQ1RFRAorCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgInJtLWEtYi1iYXNlIiAiT05FIiAiQUFBIiAmJgorCWdpdCBybSBPTkUgJiYKKwlnaXQgY29tbWl0IC1tICJybS1hLWIiICYmCisJZ2l0IHRhZyAicm0tYS1iIiAmJgorCWdpdCBtZXJnZS10cmVlIHJtLWEtYi1iYXNlIHJtLWEtYiBybS1hLWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIGNoYW5nZSBBLCByZW1vdmUgQicgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK3JlbW92ZWQgaW4gcmVtb3RlCisgIGJhc2UgICAxMDA2NDQgNDNkNWE4ZWQ2ZWY2YzAwZmY3NzUwMDg2MzNmOTU3ODdkMDg4Mjg1ZCBPTkUKKyAgb3VyICAgIDEwMDY0NCBiYTYyOTIzOGNhODk0ODlmMmIzNTBlMTk2Y2E0NDVlMDlkOGJiODM0IE9ORQorQEAgLTEgKzAsMCBAQAorLUJCQgorRVhQRUNURUQKKworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXRlc3RfY29tbWl0ICJjaGFuZ2UtYS1ybS1iLWJhc2UiICJPTkUiICJBQUEiICYmCisJdGVzdF9jb21taXQgImNoYW5nZS1hLXJtLWItQSIgIk9ORSIgIkJCQiIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGNoYW5nZS1hLXJtLWItYmFzZSAmJgorCWdpdCBybSBPTkUgJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2UtYS1ybS1iLUIiICYmCisJZ2l0IHRhZyAiY2hhbmdlLWEtcm0tYi1CIiAmJgorCWdpdCBtZXJnZS10cmVlIGNoYW5nZS1hLXJtLWItYmFzZSBjaGFuZ2UtYS1ybS1iLUEgY2hhbmdlLWEtcm0tYi1CIFwKKwkJPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHJlbW92ZSBBLCBjaGFuZ2UgQicgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRVhQRUNURUQgJiYKK3JlbW92ZWQgaW4gbG9jYWwKKyAgYmFzZSAgIDEwMDY0NCA0M2Q1YThlZDZlZjZjMDBmZjc3NTAwODYzM2Y5NTc4N2QwODgyODVkIE9ORQorICB0aGVpciAgMTAwNjQ0IGJhNjI5MjM4Y2E4OTQ4OWYyYjM1MGUxOTZjYTQ0NWUwOWQ4YmI4MzQgT05FCitFWFBFQ1RFRAorCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJdGVzdF9jb21taXQgInJtLWEtY2hhbmdlLWItYmFzZSIgIk9ORSIgIkFBQSIgJiYKKworCWdpdCBybSBPTkUgJiYKKwlnaXQgY29tbWl0IC1tICJybS1hLWNoYW5nZS1iLUEiICYmCisJZ2l0IHRhZyAicm0tYS1jaGFuZ2UtYi1BIiAmJgorCWdpdCByZXNldCAtLWhhcmQgcm0tYS1jaGFuZ2UtYi1iYXNlICYmCisJdGVzdF9jb21taXQgInJtLWEtY2hhbmdlLWItQiIgIk9ORSIgIkJCQiIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBybS1hLWNoYW5nZS1iLWJhc2Ugcm0tYS1jaGFuZ2UtYi1BIHJtLWEtY2hhbmdlLWItQiBcCisJCT5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZSBhZGQgQSwgQiAoc2FtZSknICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJRU9GCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJbWtkaXIgc3ViICYmCisJdGVzdF9jb21taXQgImFkZCBzdWIvZmlsZSIgInN1Yi9maWxlIiAiZmlsZSIgYWRkLXRyZWUtQSAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgYWRkLXRyZWUtQSBhZGQtdHJlZS1BID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWUgYWRkIEEsIEIgKGRpZmZlcmVudCknICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYWRkZWQgaW4gYm90aAorCSAgb3VyICAgIDEwMDY0NCA0M2Q1YThlZDZlZjZjMDBmZjc3NTAwODYzM2Y5NTc4N2QwODgyODVkIHN1Yi9maWxlCisJICB0aGVpciAgMTAwNjQ0IGJhNjI5MjM4Y2E4OTQ4OWYyYjM1MGUxOTZjYTQ0NWUwOWQ4YmI4MzQgc3ViL2ZpbGUKKwlAQCAtMSArMSw1IEBACisJKzw8PDw8PDwgLm91cgorCSBBQUEKKwkrPT09PT09PQorCStCQkIKKwkrPj4+Pj4+PiAudGhlaXIKKwlFT0YKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlta2RpciBzdWIgJiYKKwl0ZXN0X2NvbW1pdCAiYWRkIHN1Yi9maWxlIiAic3ViL2ZpbGUiICJBQUEiIGFkZC10cmVlLWEtYi1BICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJbWtkaXIgc3ViICYmCisJdGVzdF9jb21taXQgImFkZCBzdWIvZmlsZSIgInN1Yi9maWxlIiAiQkJCIiBhZGQtdHJlZS1hLWItQiAmJgorCWdpdCBtZXJnZS10cmVlIGluaXRpYWwgYWRkLXRyZWUtYS1iLUEgYWRkLXRyZWUtYS1iLUIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZSB1bmNoYW5nZWQgQSwgcmVtb3ZlZCBCJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXJlbW92ZWQgaW4gcmVtb3RlCisJICBiYXNlICAgMTAwNjQ0IDQzZDVhOGVkNmVmNmMwMGZmNzc1MDA4NjMzZjk1Nzg3ZDA4ODI4NWQgc3ViL2ZpbGUKKwkgIG91ciAgICAxMDA2NDQgNDNkNWE4ZWQ2ZWY2YzAwZmY3NzUwMDg2MzNmOTU3ODdkMDg4Mjg1ZCBzdWIvZmlsZQorCUBAIC0xICswLDAgQEAKKwktQUFBCisJRU9GCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJbWtkaXIgc3ViICYmCisJdGVzdF9jb21taXQgImFkZCBzdWIvZmlsZSIgInN1Yi9maWxlIiAiQUFBIiB0cmVlLXJlbW92ZS1iLWluaXRpYWwgJiYKKwlnaXQgcm0gc3ViL2ZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJyZW1vdmUgc3ViL2ZpbGUiICYmCisJZ2l0IHRhZyB0cmVlLXJlbW92ZS1iLUIgJiYKKwlnaXQgbWVyZ2UtdHJlZSB0cmVlLXJlbW92ZS1iLWluaXRpYWwgdHJlZS1yZW1vdmUtYi1pbml0aWFsIHRyZWUtcmVtb3ZlLWItQiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0dXJuIGZpbGUgdG8gdHJlZScgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCXJtIGluaXRpYWwtZmlsZSAmJgorCW1rZGlyIGluaXRpYWwtZmlsZSAmJgorCXRlc3RfY29tbWl0ICJ0dXJuLWZpbGUtdG8tdHJlZSIgImluaXRpYWwtZmlsZS9PTkUiICJDQ0MiICYmCisJZ2l0IG1lcmdlLXRyZWUgaW5pdGlhbCBpbml0aWFsIHR1cm4tZmlsZS10by10cmVlID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYWRkZWQgaW4gcmVtb3RlCisJICB0aGVpciAgMTAwNjQ0IDQzYWE0ZmRlYzMxZWI5MmUxZmRjMmYwY2U2ZWE5ZGRiN2MzMmJjZjcgaW5pdGlhbC1maWxlL09ORQorCUBAIC0wLDAgKzEgQEAKKwkrQ0NDCisJcmVtb3ZlZCBpbiByZW1vdGUKKwkgIGJhc2UgICAxMDA2NDQgZTc5YzVlOGY5NjQ0OTMyOTBhNDA5ODg4ZDU0MTNhNzM3ZThlNWRkNSBpbml0aWFsLWZpbGUKKwkgIG91ciAgICAxMDA2NDQgZTc5YzVlOGY5NjQ0OTMyOTBhNDA5ODg4ZDU0MTNhNzM3ZThlNWRkNSBpbml0aWFsLWZpbGUKKwlAQCAtMSArMCwwIEBACisJLWluaXRpYWwKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R1cm4gdHJlZSB0byBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJbWtkaXIgZGlyICYmCisJdGVzdF9jb21taXQgImFkZC10cmVlIiAiZGlyL3BhdGgiICJBQUEiICYmCisJdGVzdF9jb21taXQgImFkZC1hbm90aGVyLXRyZWUiICJkaXIvYW5vdGhlciIgIkJCQiIgJiYKKwlybSAtZnIgZGlyICYmCisJdGVzdF9jb21taXQgIm1ha2UtZmlsZSIgImRpciIgIkNDQyIgJiYKKwlnaXQgbWVyZ2UtdHJlZSBhZGQtdHJlZSBhZGQtYW5vdGhlci10cmVlIG1ha2UtZmlsZSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXJlbW92ZWQgaW4gcmVtb3RlCisJICBiYXNlICAgMTAwNjQ0IDQzZDVhOGVkNmVmNmMwMGZmNzc1MDA4NjMzZjk1Nzg3ZDA4ODI4NWQgZGlyL3BhdGgKKwkgIG91ciAgICAxMDA2NDQgNDNkNWE4ZWQ2ZWY2YzAwZmY3NzUwMDg2MzNmOTU3ODdkMDg4Mjg1ZCBkaXIvcGF0aAorCUBAIC0xICswLDAgQEAKKwktQUFBCisJYWRkZWQgaW4gcmVtb3RlCisJICB0aGVpciAgMTAwNjQ0IDQzYWE0ZmRlYzMxZWI5MmUxZmRjMmYwY2U2ZWE5ZGRiN2MzMmJjZjcgZGlyCisJQEAgLTAsMCArMSBAQAorCStDQ0MKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTAwMC10YXItdHJlZS5zaCBiL3QvdDUwMDAtdGFyLXRyZWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGI2OGJiYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDAtdGFyLXRyZWUuc2gKQEAgLTAsMCArMSwzMjIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDUgUmVuZSBTY2hhcmZlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBhcmNoaXZlIGFuZCBnaXQgZ2V0LXRhci1jb21taXQtaWQgdGVzdAorCitUaGlzIHRlc3QgY292ZXJzIHRoZSB0b3BpY3Mgb2YgZmlsZSBjb250ZW50cywgY29tbWl0IGRhdGUgaGFuZGxpbmcgYW5kCitjb21taXQgaWQgZW1iZWRkaW5nOgorCisgIFRoZSBjb250ZW50cyBvZiB0aGUgcmVwb3NpdG9yeSBpcyBjb21wYXJlZCB0byB0aGUgZXh0cmFjdGVkIHRhcgorICBhcmNoaXZlLiAgVGhlIHJlcG9zaXRvcnkgY29udGFpbnMgc2ltcGxlIHRleHQgZmlsZXMsIHN5bWxpbmtzIGFuZCBhCisgIGJpbmFyeSBmaWxlICgvYmluL3NoKS4gIE9ubHkgcGF0aHMgc2hvcnRlciB0aGFuIDk5IGNoYXJhY3RlcnMgYXJlCisgIHVzZWQuCisKKyAgZ2l0IGFyY2hpdmUgYXBwbGllcyB0aGUgY29tbWl0IGRhdGUgdG8gZXZlcnkgZmlsZSBpbiB0aGUgYXJjaGl2ZSBpdAorICBjcmVhdGVzLiAgVGhlIHRlc3Qgc2V0cyB0aGUgY29tbWl0IGRhdGUgdG8gYSBzcGVjaWZpYyB2YWx1ZSBhbmQgY2hlY2tzCisgIGlmIHRoZSB0YXIgYXJjaGl2ZSBjb250YWlucyB0aGF0IHZhbHVlLgorCisgIFdoZW4gZ2l2aW5nIGdpdCBhcmNoaXZlIGEgY29tbWl0IGlkIChpbiBjb250cmFzdCB0byBhIHRyZWUgaWQpIGl0CisgIGVtYmVkcyB0aGlzIGNvbW1pdCBpZCBpbnRvIHRoZSB0YXIgYXJjaGl2ZSBhcyBhIGNvbW1lbnQuICBUaGUgdGVzdAorICBjaGVja3MgdGhlIGFiaWxpdHkgb2YgZ2l0IGdldC10YXItY29tbWl0LWlkIHRvIGZpZ3VyZSBpdCBvdXQgZnJvbSB0aGUKKyAgdGFyIGZpbGUuCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK1NVQlNURk9STUFUPSVIJW4KKwordGVzdF9sYXp5X3ByZXJlcSBUQVJfTkVFRFNfUEFYX0ZBTExCQUNLICcKKwkoCisJCW1rZGlyIHBheCAmJgorCQljZCBwYXggJiYKKwkJIiRUQVIiIHhmICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDAwL3BheC50YXIgJiYKKwkJdGVzdCAtZiBQYXhIZWFkZXJzLjE3OTEvZmlsZQorCSkKKycKKwordGVzdF9sYXp5X3ByZXJlcSBHWklQICdnemlwIC0tdmVyc2lvbicKKworZ2V0X3BheF9oZWFkZXIoKSB7CisJZmlsZT0kMQorCWhlYWRlcj0kMj0KKworCXdoaWxlIHJlYWQgbGVuIHJlc3QKKwlkbworCQlpZiB0ZXN0ICIkbGVuIiA9ICQoZWNobyAiJGxlbiAkcmVzdCIgfCB3YyAtYykKKwkJdGhlbgorCQkJY2FzZSAiJHJlc3QiIGluCisJCQkkaGVhZGVyKikKKwkJCQllY2hvICIke3Jlc3QjJGhlYWRlcn0iCisJCQkJOzsKKwkJCWVzYWMKKwkJZmkKKwlkb25lIDwiJGZpbGUiCit9CisKK2NoZWNrX3RhcigpIHsKKwl0YXJmaWxlPSQxLnRhcgorCWxpc3RmaWxlPSQxLmxzdAorCWRpcj0kMQorCWRpcl93aXRoX3ByZWZpeD0kZGlyLyQyCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICcgZXh0cmFjdCB0YXIgYXJjaGl2ZScgJworCQkobWtkaXIgJGRpciAmJiBjZCAkZGlyICYmICIkVEFSIiB4ZiAtKSA8JHRhcmZpbGUKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFRBUl9ORUVEU19QQVhfRkFMTEJBQ0sgJyBpbnRlcnByZXQgcGF4IGhlYWRlcnMnICcKKwkJKAorCQkJY2QgJGRpciAmJgorCQkJZm9yIGhlYWRlciBpbiAqLnBheGhlYWRlcgorCQkJZG8KKwkJCQlkYXRhPSR7aGVhZGVyJS5wYXhoZWFkZXJ9LmRhdGEgJiYKKwkJCQlpZiB0ZXN0IC1oICRkYXRhIHx8IHRlc3QgLWUgJGRhdGEKKwkJCQl0aGVuCisJCQkJCXBhdGg9JChnZXRfcGF4X2hlYWRlciAkaGVhZGVyIHBhdGgpICYmCisJCQkJCWlmIHRlc3QgLW4gIiRwYXRoIgorCQkJCQl0aGVuCisJCQkJCQltdiAiJGRhdGEiICIkcGF0aCIKKwkJCQkJZmkKKwkJCQlmaQorCQkJZG9uZQorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnIHZhbGlkYXRlIGZpbGVuYW1lcycgJworCQkoY2QgJHtkaXJfd2l0aF9wcmVmaXh9YSAmJiBmaW5kIC4pIHwgc29ydCA+JGxpc3RmaWxlICYmCisJCXRlc3RfY21wIGEubHN0ICRsaXN0ZmlsZQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJyB2YWxpZGF0ZSBmaWxlIGNvbnRlbnRzJyAnCisJCWRpZmYgLXIgYSAke2Rpcl93aXRoX3ByZWZpeH1hCisJJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncG9wdWxhdGUgd29ya2RpcicgXAorICAgICdta2RpciBhICYmCisgICAgIGVjaG8gc2ltcGxlIHRleHRmaWxlID5hL2EgJiYKKyAgICAgdGVuPTAxMjM0NTY3ODkgJiYgaHVuZHJlZD0kdGVuJHRlbiR0ZW4kdGVuJHRlbiR0ZW4kdGVuJHRlbiR0ZW4kdGVuICYmCisgICAgIGVjaG8gbG9uZyBmaWxlbmFtZSA+YS9mb3VyJGh1bmRyZWQgJiYKKyAgICAgbWtkaXIgYS9iaW4gJiYKKyAgICAgdGVzdC1nZW5yYW5kb20gImZyb3R6IiA1MDAwMDAgPmEvYmluL3NoICYmCisgICAgIHByaW50ZiAiQVwkRm9ybWF0OiVzXCRPIiAiJFNVQlNURk9STUFUIiA+YS9zdWJzdGZpbGUxICYmCisgICAgIHByaW50ZiAiQSBub3Qgc3Vic3RpdHV0ZWQgTyIgPmEvc3Vic3RmaWxlMiAmJgorICAgICBpZiB0ZXN0X2hhdmVfcHJlcmVxIFNZTUxJTktTOyB0aGVuCisJbG4gLXMgYSBhL2wxCisgICAgIGVsc2UKKwlwcmludGYgJXMgYSA+IGEvbDEKKyAgICAgZmkgJiYKKyAgICAgKHA9bG9uZ19wYXRoX3RvX2FfZmlsZSAmJiBjZCBhICYmCisgICAgICBmb3IgZGVwdGggaW4gMSAyIDMgNCA1OyBkbyBta2RpciAkcCAmJiBjZCAkcDsgZG9uZSAmJgorICAgICAgZWNobyB0ZXh0ID5maWxlX3dpdGhfbG9uZ19wYXRoKSAmJgorICAgICAoY2QgYSAmJiBmaW5kIC4pIHwgc29ydCA+YS5sc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhZGQgaWdub3JlZCBmaWxlJyBcCisgICAgJ2VjaG8gaWdub3JlIG1lID5hL2lnbm9yZWQgJiYKKyAgICAgZWNobyBpZ25vcmVkIGV4cG9ydC1pZ25vcmUgPi5naXQvaW5mby9hdHRyaWJ1dGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZmlsZXMgdG8gcmVwb3NpdG9yeScgJworCWdpdCBhZGQgYSAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNyAyMjowMCIgZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cG9ydC1zdWJzdCcgJworCWVjaG8gInN1YnN0ZmlsZT8iIGV4cG9ydC1zdWJzdCA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisJZ2l0IGxvZyAtLW1heC1jb3VudD0xICItLXByZXR0eT1mb3JtYXQ6QSR7U1VCU1RGT1JNQVR9TyIgSEVBRCBcCisJCT5hL3N1YnN0ZmlsZTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSBiYXJlIGNsb25lJyBcCisgICAgJ2dpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmdpdCAmJgorICAgICBjcCAuZ2l0L2luZm8vYXR0cmlidXRlcyBiYXJlLmdpdC9pbmZvL2F0dHJpYnV0ZXMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZW1vdmUgaWdub3JlZCBmaWxlJyBcCisgICAgJ3JtIGEvaWdub3JlZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBhcmNoaXZlJyBcCisgICAgJ2dpdCBhcmNoaXZlIEhFQUQgPmIudGFyJworCitjaGVja190YXIgYgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSAtLXByZWZpeD1wcmVmaXgvJyAnCisJZ2l0IGFyY2hpdmUgLS1wcmVmaXg9cHJlZml4LyBIRUFEID53aXRoX3ByZWZpeC50YXIKKycKKworY2hlY2tfdGFyIHdpdGhfcHJlZml4IHByZWZpeC8KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFyY2hpdmUgLS1wcmVmaXg9b2xkZS0nICcKKwlnaXQgYXJjaGl2ZSAtLXByZWZpeD1vbGRlLSBIRUFEID53aXRoX29sZGUtcHJlZml4LnRhcgorJworCitjaGVja190YXIgd2l0aF9vbGRlLXByZWZpeCBvbGRlLQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSBvbiBsYXJnZSBmaWxlcycgJworICAgIHRlc3RfY29uZmlnIGNvcmUuYmlnZmlsZXRocmVzaG9sZCAxICYmCisgICAgZ2l0IGFyY2hpdmUgSEVBRCA+YjMudGFyICYmCisgICAgdGVzdF9jbXBfYmluIGIudGFyIGIzLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGFyY2hpdmUgaW4gYSBiYXJlIHJlcG8nIFwKKyAgICAnKGNkIGJhcmUuZ2l0ICYmIGdpdCBhcmNoaXZlIEhFQUQpID5iMy50YXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYXJjaGl2ZSB2cy4gdGhlIHNhbWUgaW4gYSBiYXJlIHJlcG8nIFwKKyAgICAndGVzdF9jbXBfYmluIGIudGFyIGIzLnRhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgd2l0aCAtLW91dHB1dCcgXAorICAgICdnaXQgYXJjaGl2ZSAtLW91dHB1dD1iNC50YXIgSEVBRCAmJgorICAgIHRlc3RfY21wX2JpbiBiLnRhciBiNC50YXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlJyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tcmVtb3RlPS4gSEVBRCA+YjUudGFyICYmCisgICAgdGVzdF9jbXBfYmluIGIudGFyIGI1LnRhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZhbGlkYXRlIGZpbGUgbW9kaWZpY2F0aW9uIHRpbWUnIFwKKyAgICAnbWtkaXIgZXh0cmFjdCAmJgorICAgICAiJFRBUiIgeGYgYi50YXIgLUMgZXh0cmFjdCBhL2EgJiYKKyAgICAgdGVzdC1jaG10aW1lIC12ICswIGV4dHJhY3QvYS9hIHxjdXQgLWYgMSA+Yi5tdGltZSAmJgorICAgICBlY2hvICIxMTE3MjMxMjAwIiA+ZXhwZWN0ZWQubXRpbWUgJiYKKyAgICAgdGVzdF9jbXAgZXhwZWN0ZWQubXRpbWUgYi5tdGltZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBnZXQtdGFyLWNvbW1pdC1pZCcgXAorICAgICdnaXQgZ2V0LXRhci1jb21taXQtaWQgPGIudGFyID5iLmNvbW1pdGlkICYmCisgICAgIHRlc3RfY21wIC5naXQvJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIGIuY29tbWl0aWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHdpdGggLS1vdXRwdXQsIG92ZXJyaWRlIGluZmVycmVkIGZvcm1hdCcgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciAtLW91dHB1dD1kNC56aXAgSEVBRCAmJgorCXRlc3RfY21wX2JpbiBiLnRhciBkNC56aXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tbGlzdCBvdXRzaWRlIG9mIGEgZ2l0IHJlcG8nIFwKKyAgICAnR0lUX0RJUj1zb21lL25vbi1leGlzdGluZy9kaXJlY3RvcnkgZ2l0IGFyY2hpdmUgLS1saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGllbnRzIGNhbm5vdCBhY2Nlc3MgdW5yZWFjaGFibGUgY29tbWl0cycgJworCXRlc3RfY29tbWl0IHVucmVhY2hhYmxlICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGFyY2hpdmUgJHNoYTEgPnJlbW90ZS50YXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uICRzaGExID5yZW1vdGUudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1hcmNoaXZlIGNhbiBhbGxvdyB1bnJlYWNoYWJsZSBjb21taXRzJyAnCisJdGVzdF9jb21taXQgdW5yZWFjaGFibGUxICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJZ2l0IGFyY2hpdmUgJHNoYTEgPnJlbW90ZS50YXIgJiYKKwl0ZXN0X2NvbmZpZyB1cGxvYWRhcmNoaXZlLmFsbG93VW5yZWFjaGFibGUgdHJ1ZSAmJgorCWdpdCBhcmNoaXZlIC0tcmVtb3RlPS4gJHNoYTEgPnJlbW90ZS50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGFyIGZpbHRlcnMnICcKKwlnaXQgY29uZmlnIHRhci50YXIuZm9vLmNvbW1hbmQgInRyIGFiIGJhIiAmJgorCWdpdCBjb25maWcgdGFyLmJhci5jb21tYW5kICJ0ciBhYiBiYSIgJiYKKwlnaXQgY29uZmlnIHRhci5iYXIucmVtb3RlIHRydWUgJiYKKwlnaXQgY29uZmlnIHRhci5pbnZhbGlkIGJhegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmNoaXZlIC0tbGlzdCBtZW50aW9ucyB1c2VyIGZpbHRlcicgJworCWdpdCBhcmNoaXZlIC0tbGlzdCA+b3V0cHV0ICYmCisJZ3JlcCAiXnRhclwuZm9vXCQiIG91dHB1dCAmJgorCWdyZXAgIl5iYXJcJCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FyY2hpdmUgLS1saXN0IHNob3dzIG9ubHkgZW5hYmxlZCByZW1vdGUgZmlsdGVycycgJworCWdpdCBhcmNoaXZlIC0tbGlzdCAtLXJlbW90ZT0uID5vdXRwdXQgJiYKKwkhIGdyZXAgIl50YXJcLmZvb1wkIiBvdXRwdXQgJiYKKwlncmVwICJeYmFyXCQiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZva2UgdGFyIGZpbHRlciBieSBmb3JtYXQnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIuZm9vIEhFQUQgPmNvbmZpZy50YXIuZm9vICYmCisJdHIgYWIgYmEgPGNvbmZpZy50YXIuZm9vID5jb25maWcudGFyICYmCisJdGVzdF9jbXBfYmluIGIudGFyIGNvbmZpZy50YXIgJiYKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD1iYXIgSEVBRCA+Y29uZmlnLmJhciAmJgorCXRyIGFiIGJhIDxjb25maWcuYmFyID5jb25maWcudGFyICYmCisJdGVzdF9jbXBfYmluIGIudGFyIGNvbmZpZy50YXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52b2tlIHRhciBmaWx0ZXIgYnkgZXh0ZW5zaW9uJyAnCisJZ2l0IGFyY2hpdmUgLW8gY29uZmlnLWltcGxpY2l0LnRhci5mb28gSEVBRCAmJgorCXRlc3RfY21wX2JpbiBjb25maWcudGFyLmZvbyBjb25maWctaW1wbGljaXQudGFyLmZvbyAmJgorCWdpdCBhcmNoaXZlIC1vIGNvbmZpZy1pbXBsaWNpdC5iYXIgSEVBRCAmJgorCXRlc3RfY21wX2JpbiBjb25maWcudGFyLmZvbyBjb25maWctaW1wbGljaXQuYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgb3V0cHV0IGZvcm1hdCByZW1haW5zIHRhcicgJworCWdpdCBhcmNoaXZlIC1vIGNvbmZpZy1pbXBsaWNpdC5iYXogSEVBRCAmJgorCXRlc3RfY21wX2JpbiBiLnRhciBjb25maWctaW1wbGljaXQuYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dGVuc2lvbiBtYXRjaGluZyByZXF1aXJlcyBkb3QnICcKKwlnaXQgYXJjaGl2ZSAtbyBjb25maWctaW1wbGljaXR0YXIuZm9vIEhFQUQgJiYKKwl0ZXN0X2NtcF9iaW4gYi50YXIgY29uZmlnLWltcGxpY2l0dGFyLmZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmx5IGVuYWJsZWQgZmlsdGVycyBhcmUgYXZhaWxhYmxlIHJlbW90ZWx5JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFyY2hpdmUgLS1yZW1vdGU9LiAtLWZvcm1hdD10YXIuZm9vIEhFQUQgXAorCQk+cmVtb3RlLnRhci5mb28gJiYKKwlnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uIC0tZm9ybWF0PWJhciA+cmVtb3RlLmJhciBIRUFEICYmCisJdGVzdF9jbXBfYmluIHJlbW90ZS5iYXIgY29uZmlnLmJhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXRneicgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRneiBIRUFEID5qLnRnegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXRhci5neicgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhci5neiBIRUFEID5qMS50YXIuZ3ogJiYKKwl0ZXN0X2NtcF9iaW4gai50Z3ogajEudGFyLmd6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAnaW5mZXIgdGd6IGZyb20gLnRneiBmaWxlbmFtZScgJworCWdpdCBhcmNoaXZlIC0tb3V0cHV0PWoyLnRneiBIRUFEICYmCisJdGVzdF9jbXBfYmluIGoudGd6IGoyLnRnegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdaSVAgJ2luZmVyIHRneiBmcm9tIC50YXIuZ3ogZmlsZW5hbWUnICcKKwlnaXQgYXJjaGl2ZSAtLW91dHB1dD1qMy50YXIuZ3ogSEVBRCAmJgorCXRlc3RfY21wX2JpbiBqLnRneiBqMy50YXIuZ3oKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdleHRyYWN0IHRneiBmaWxlJyAnCisJZ3ppcCAtZCAtYyA8ai50Z3ogPmoudGFyICYmCisJdGVzdF9jbXBfYmluIGIudGFyIGoudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1pJUCAncmVtb3RlIHRhci5neiBpcyBhbGxvd2VkIGJ5IGRlZmF1bHQnICcKKwlnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uIC0tZm9ybWF0PXRhci5neiBIRUFEID5yZW1vdGUudGFyLmd6ICYmCisJdGVzdF9jbXBfYmluIGoudGd6IHJlbW90ZS50YXIuZ3oKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHWklQICdyZW1vdGUgdGFyLmd6IGNhbiBiZSBkaXNhYmxlZCcgJworCWdpdCBjb25maWcgdGFyLnRhci5nei5yZW1vdGUgZmFsc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXJjaGl2ZSAtLXJlbW90ZT0uIC0tZm9ybWF0PXRhci5neiBIRUFEIFwKKwkJPnJlbW90ZS50YXIuZ3oKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJjaGl2ZSBhbmQgOihnbG9iKScgJworCWdpdCBhcmNoaXZlIC12IEhFQUQgLS0gIjooZ2xvYikqKi9zaCIgPi9kZXYvbnVsbCAyPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8RU9GICYmCithLworYS9iaW4vCithL2Jpbi9zaAorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXRjaCBub24tbWF0Y2hpbmcgcGF0aHNwZWMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYXJjaGl2ZSAtdiBIRUFEIC0tICIqLmFiYyIgPi9kZXYvbnVsbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUwMDAvcGF4LnRhciBiL3QvdDUwMDAvcGF4LnRhcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTExNzM3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwMC9wYXgudGFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDUwMDEtYXJjaGl2ZS1hdHRyLnNoIGIvdC90NTAwMS1hcmNoaXZlLWF0dHIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjA0ZDk1NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDEtYXJjaGl2ZS1hdHRyLnNoCkBAIC0wLDAgKzEsOTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXJjaGl2ZSBhdHRyaWJ1dGUgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitTVUJTVEZPUk1BVD0nJUggKCVoKSVuJworCit0ZXN0X2V4cGVjdF9leGlzdHMoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiICQxIGV4aXN0cyIgInRlc3QgLWUgJDEiCit9CisKK3Rlc3RfZXhwZWN0X21pc3NpbmcoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiICQxIGRvZXMgbm90IGV4aXN0IiAidGVzdCAhIC1lICQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gaWdub3JlZCA+aWdub3JlZCAmJgorCWVjaG8gaWdub3JlZCBleHBvcnQtaWdub3JlID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIGlnbm9yZWQgJiYKKworCWVjaG8gaWdub3JlZCBieSB0cmVlID5pZ25vcmVkLWJ5LXRyZWUgJiYKKwllY2hvIGlnbm9yZWQtYnktdHJlZSBleHBvcnQtaWdub3JlID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBhZGQgaWdub3JlZC1ieS10cmVlIC5naXRhdHRyaWJ1dGVzICYmCisKKwllY2hvIGlnbm9yZWQgYnkgd29ya3RyZWUgPmlnbm9yZWQtYnktd29ya3RyZWUgJiYKKwllY2hvIGlnbm9yZWQtYnktd29ya3RyZWUgZXhwb3J0LWlnbm9yZSA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIGlnbm9yZWQtYnktd29ya3RyZWUgJiYKKworCXByaW50ZiAiQVwkRm9ybWF0OiVzXCRPIiAiJFNVQlNURk9STUFUIiA+bm9zdWJzdGZpbGUgJiYKKwlwcmludGYgIkFcJEZvcm1hdDolc1wkTyIgIiRTVUJTVEZPUk1BVCIgPnN1YnN0ZmlsZTEgJiYKKwlwcmludGYgIkEgbm90IHN1YnN0aXR1dGVkIE8iID5zdWJzdGZpbGUyICYmCisJZWNobyAic3Vic3RmaWxlPyIgZXhwb3J0LXN1YnN0ID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKwlnaXQgYWRkIG5vc3Vic3RmaWxlIHN1YnN0ZmlsZTEgc3Vic3RmaWxlMiAmJgorCisJZ2l0IGNvbW1pdCAtbS4gJiYKKworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlICYmCisJY3AgLmdpdC9pbmZvL2F0dHJpYnV0ZXMgYmFyZS9pbmZvL2F0dHJpYnV0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUnICcKKwlnaXQgYXJjaGl2ZSBIRUFEID5hcmNoaXZlLnRhciAmJgorCShta2RpciBhcmNoaXZlICYmIGNkIGFyY2hpdmUgJiYgIiRUQVIiIHhmIC0pIDxhcmNoaXZlLnRhcgorJworCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvaWdub3JlZAordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2lnbm9yZWQtYnktdHJlZQordGVzdF9leHBlY3RfZXhpc3RzCWFyY2hpdmUvaWdub3JlZC1ieS13b3JrdHJlZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSB3aXRoIHdvcmt0cmVlIGF0dHJpYnV0ZXMnICcKKwlnaXQgYXJjaGl2ZSAtLXdvcmt0cmVlLWF0dHJpYnV0ZXMgSEVBRCA+d29ya3RyZWUudGFyICYmCisJKG1rZGlyIHdvcmt0cmVlICYmIGNkIHdvcmt0cmVlICYmICIkVEFSIiB4ZiAtKSA8d29ya3RyZWUudGFyCisnCisKK3Rlc3RfZXhwZWN0X21pc3NpbmcJd29ya3RyZWUvaWdub3JlZAordGVzdF9leHBlY3RfZXhpc3RzCXdvcmt0cmVlL2lnbm9yZWQtYnktdHJlZQordGVzdF9leHBlY3RfbWlzc2luZwl3b3JrdHJlZS9pZ25vcmVkLWJ5LXdvcmt0cmVlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIC0td29ya3RyZWUtYXR0cmlidXRlcyBvcHRpb24nICcKKwlnaXQgYXJjaGl2ZSAtLXdvcmt0cmVlLWF0dHJpYnV0ZXMgLS13b3JrdHJlZS1hdHRyaWJ1dGVzIEhFQUQgPndvcmt0cmVlLnRhciAmJgorCShta2RpciB3b3JrdHJlZTIgJiYgY2Qgd29ya3RyZWUyICYmICIkVEFSIiB4ZiAtKSA8d29ya3RyZWUudGFyCisnCisKK3Rlc3RfZXhwZWN0X21pc3NpbmcJd29ya3RyZWUyL2lnbm9yZWQKK3Rlc3RfZXhwZWN0X2V4aXN0cwl3b3JrdHJlZTIvaWdub3JlZC1ieS10cmVlCit0ZXN0X2V4cGVjdF9taXNzaW5nCXdvcmt0cmVlMi9pZ25vcmVkLWJ5LXdvcmt0cmVlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIHZzLiBiYXJlJyAnCisJKGNkIGJhcmUgJiYgZ2l0IGFyY2hpdmUgSEVBRCkgPmJhcmUtYXJjaGl2ZS50YXIgJiYKKwl0ZXN0X2NtcF9iaW4gYXJjaGl2ZS50YXIgYmFyZS1hcmNoaXZlLnRhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgYXJjaGl2ZSB3aXRoIHdvcmt0cmVlIGF0dHJpYnV0ZXMsIGJhcmUnICcKKwkoY2QgYmFyZSAmJiBnaXQgYXJjaGl2ZSAtLXdvcmt0cmVlLWF0dHJpYnV0ZXMgSEVBRCkgPmJhcmUtd29ya3RyZWUudGFyICYmCisJKG1rZGlyIGJhcmUtd29ya3RyZWUgJiYgY2QgYmFyZS13b3JrdHJlZSAmJiAiJFRBUiIgeGYgLSkgPGJhcmUtd29ya3RyZWUudGFyCisnCisKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYmFyZS13b3JrdHJlZS9pZ25vcmVkCit0ZXN0X2V4cGVjdF9leGlzdHMJYmFyZS13b3JrdHJlZS9pZ25vcmVkLWJ5LXRyZWUKK3Rlc3RfZXhwZWN0X2V4aXN0cwliYXJlLXdvcmt0cmVlL2lnbm9yZWQtYnktd29ya3RyZWUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwb3J0LXN1YnN0JyAnCisJZ2l0IGxvZyAiLS1wcmV0dHk9Zm9ybWF0OkEke1NVQlNURk9STUFUfU8iIEhFQUQgPnN1YnN0ZmlsZTEuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBub3N1YnN0ZmlsZSBhcmNoaXZlL25vc3Vic3RmaWxlICYmCisJdGVzdF9jbXAgc3Vic3RmaWxlMS5leHBlY3RlZCBhcmNoaXZlL3N1YnN0ZmlsZTEgJiYKKwl0ZXN0X2NtcCBzdWJzdGZpbGUyIGFyY2hpdmUvc3Vic3RmaWxlMgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUwMDItYXJjaGl2ZS1hdHRyLXBhdHRlcm4uc2ggYi90L3Q1MDAyLWFyY2hpdmUtYXR0ci1wYXR0ZXJuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY2NjdkMTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MDAyLWFyY2hpdmUtYXR0ci1wYXR0ZXJuLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXJjaGl2ZSBhdHRyaWJ1dGUgcGF0dGVybiB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X2V4aXN0cygpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIgJDEgZXhpc3RzIiAidGVzdCAtZSAkMSIKK30KKwordGVzdF9leHBlY3RfbWlzc2luZygpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIgJDEgZG9lcyBub3QgZXhpc3QiICJ0ZXN0ICEgLWUgJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBpZ25vcmVkID5pZ25vcmVkICYmCisJZWNobyBpZ25vcmVkIGV4cG9ydC1pZ25vcmUgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCWdpdCBhZGQgaWdub3JlZCAmJgorCisJbWtkaXIgbm90LWlnbm9yZWQtZGlyICYmCisJZWNobyBpZ25vcmVkLWluLXRyZWUgPm5vdC1pZ25vcmVkLWRpci9pZ25vcmVkICYmCisJZWNobyBub3QtaWdub3JlZC1pbi10cmVlID5ub3QtaWdub3JlZC1kaXIvaWdub3JlZC1vbmx5LWlmLWRpciAmJgorCWdpdCBhZGQgbm90LWlnbm9yZWQtZGlyICYmCisKKwlta2RpciBpZ25vcmVkLW9ubHktaWYtZGlyICYmCisJZWNobyBpZ25vcmVkIGJ5IGlnbm9yZWQgZGlyID5pZ25vcmVkLW9ubHktaWYtZGlyL2lnbm9yZWQtYnktaWdub3JlZC1kaXIgJiYKKwllY2hvIGlnbm9yZWQtb25seS1pZi1kaXIvIGV4cG9ydC1pZ25vcmUgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCWdpdCBhZGQgaWdub3JlZC1vbmx5LWlmLWRpciAmJgorCisJbWtkaXIgLXAgaWdub3JlZC13aXRob3V0LXNsYXNoICYmCisJZWNobyAiaWdub3JlZCB3aXRob3V0IHNsYXNoIiA+aWdub3JlZC13aXRob3V0LXNsYXNoL2ZvbyAmJgorCWdpdCBhZGQgaWdub3JlZC13aXRob3V0LXNsYXNoL2ZvbyAmJgorCWVjaG8gImlnbm9yZWQtd2l0aG91dC1zbGFzaCBleHBvcnQtaWdub3JlIiA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisKKwlta2RpciAtcCB3aWxkY2FyZC13aXRob3V0LXNsYXNoICYmCisJZWNobyAiaWdub3JlZCB3aXRob3V0IHNsYXNoIiA+d2lsZGNhcmQtd2l0aG91dC1zbGFzaC9mb28gJiYKKwlnaXQgYWRkIHdpbGRjYXJkLXdpdGhvdXQtc2xhc2gvZm9vICYmCisJZWNobyAid2lsZCotd2l0aG91dC1zbGFzaCBleHBvcnQtaWdub3JlIiA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisKKwlta2RpciAtcCBkZWVwL2FuZC9zbGFzaGxlc3MgJiYKKwllY2hvICJpZ25vcmVkIHdpdGhvdXQgc2xhc2giID5kZWVwL2FuZC9zbGFzaGxlc3MvZm9vICYmCisJZ2l0IGFkZCBkZWVwL2FuZC9zbGFzaGxlc3MvZm9vICYmCisJZWNobyAiZGVlcC9hbmQvc2xhc2hsZXNzIGV4cG9ydC1pZ25vcmUiID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKworCW1rZGlyIC1wIGRlZXAvd2l0aC93aWxkY2FyZCAmJgorCWVjaG8gImlnbm9yZWQgd2l0aG91dCBzbGFzaCIgPmRlZXAvd2l0aC93aWxkY2FyZC9mb28gJiYKKwlnaXQgYWRkIGRlZXAvd2l0aC93aWxkY2FyZC9mb28gJiYKKwllY2hvICJkZWVwLyp0Ki93aWxkY2FyZCBleHBvcnQtaWdub3JlIiA+Pi5naXQvaW5mby9hdHRyaWJ1dGVzICYmCisKKwlta2RpciAtcCBvbmUtbGV2ZWwtbG93ZXIvdHdvLWxldmVscy1sb3dlci9pZ25vcmVkLW9ubHktaWYtZGlyICYmCisJZWNobyBpZ25vcmVkIGJ5IGlnbm9yZWQgZGlyID5vbmUtbGV2ZWwtbG93ZXIvdHdvLWxldmVscy1sb3dlci9pZ25vcmVkLW9ubHktaWYtZGlyL2lnbm9yZWQtYnktaWdub3JlZC1kaXIgJiYKKwlnaXQgYWRkIG9uZS1sZXZlbC1sb3dlciAmJgorCisJZ2l0IGNvbW1pdCAtbS4gJiYKKworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlICYmCisJY3AgLmdpdC9pbmZvL2F0dHJpYnV0ZXMgYmFyZS9pbmZvL2F0dHJpYnV0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUnICcKKwlnaXQgYXJjaGl2ZSBIRUFEID5hcmNoaXZlLnRhciAmJgorCShta2RpciBhcmNoaXZlICYmIGNkIGFyY2hpdmUgJiYgIiRUQVIiIHhmIC0pIDxhcmNoaXZlLnRhcgorJworCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvaWdub3JlZAordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL25vdC1pZ25vcmVkLWRpci9pZ25vcmVkCit0ZXN0X2V4cGVjdF9leGlzdHMJYXJjaGl2ZS9ub3QtaWdub3JlZC1kaXIvaWdub3JlZC1vbmx5LWlmLWRpcgordGVzdF9leHBlY3RfZXhpc3RzCWFyY2hpdmUvbm90LWlnbm9yZWQtZGlyLwordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2lnbm9yZWQtb25seS1pZi1kaXIvCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvaWdub3JlZC1vbnktaWYtZGlyL2lnbm9yZWQtYnktaWdub3JlZC1kaXIKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9pZ25vcmVkLXdpdGhvdXQtc2xhc2gvICYmCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvaWdub3JlZC13aXRob3V0LXNsYXNoL2ZvbyAmJgordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL3dpbGRjYXJkLXdpdGhvdXQtc2xhc2gvCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvd2lsZGNhcmQtd2l0aG91dC1zbGFzaC9mb28gJiYKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9kZWVwL2FuZC9zbGFzaGxlc3MvICYmCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvZGVlcC9hbmQvc2xhc2hsZXNzL2ZvbyAmJgordGVzdF9leHBlY3RfbWlzc2luZwlhcmNoaXZlL2RlZXAvd2l0aC93aWxkY2FyZC8gJiYKK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9kZWVwL3dpdGgvd2lsZGNhcmQvZm9vICYmCit0ZXN0X2V4cGVjdF9leGlzdHMJYXJjaGl2ZS9vbmUtbGV2ZWwtbG93ZXIvCit0ZXN0X2V4cGVjdF9taXNzaW5nCWFyY2hpdmUvb25lLWxldmVsLWxvd2VyL3R3by1sZXZlbHMtbG93ZXIvaWdub3JlZC1vbmx5LWlmLWRpci8KK3Rlc3RfZXhwZWN0X21pc3NpbmcJYXJjaGl2ZS9vbmUtbGV2ZWwtbG93ZXIvdHdvLWxldmVscy1sb3dlci9pZ25vcmVkLW9ueS1pZi1kaXIvaWdub3JlZC1ieS1pZ25vcmVkLWRpcgorCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTAwMy1hcmNoaXZlLXppcC5zaCBiL3QvdDUwMDMtYXJjaGl2ZS16aXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTQ3NDRiMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDMtYXJjaGl2ZS16aXAuc2gKQEAgLTAsMCArMSwxNzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisKK1NVQlNURk9STUFUPSVIJW4KKwordGVzdF9sYXp5X3ByZXJlcSBVTlpJUF9TWU1MSU5LUyAnCisJKAorCQlta2RpciB1bnppcC1zeW1saW5rcyAmJgorCQljZCB1bnppcC1zeW1saW5rcyAmJgorCQkiJEdJVF9VTlpJUCIgIiRURVNUX0RJUkVDVE9SWSIvdDUwMDMvaW5mb3ppcC1zeW1saW5rcy56aXAgJiYKKwkJdGVzdCAtaCBzeW1saW5rCisJKQorJworCitjaGVja196aXAoKSB7CisJemlwZmlsZT0kMS56aXAKKwlsaXN0ZmlsZT0kMS5sc3QKKwlkaXI9JDEKKwlkaXJfd2l0aF9wcmVmaXg9JGRpci8kMgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAiIGV4dHJhY3QgWklQIGFyY2hpdmUiICcKKwkJKG1rZGlyICRkaXIgJiYgY2QgJGRpciAmJiAiJEdJVF9VTlpJUCIgLi4vJHppcGZpbGUpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAiIHZhbGlkYXRlIGZpbGVuYW1lcyIgIgorCQkoY2QgJHtkaXJfd2l0aF9wcmVmaXh9YSAmJiBmaW5kIC4pIHwgc29ydCA+JGxpc3RmaWxlICYmCisJCXRlc3RfY21wIGEubHN0ICRsaXN0ZmlsZQorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgIiB2YWxpZGF0ZSBmaWxlIGNvbnRlbnRzIiAiCisJCWRpZmYgLXIgYSAke2Rpcl93aXRoX3ByZWZpeH1hCisJIgorCisJZGlyPWVvbF8kMQorCWRpcl93aXRoX3ByZWZpeD0kZGlyLyQyCisJZXh0cmFjdGVkPSR7ZGlyX3dpdGhfcHJlZml4fWEKKwlvcmlnaW5hbD1hCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFVOWklQICIgZXh0cmFjdCBaSVAgYXJjaGl2ZSB3aXRoIEVPTCBjb252ZXJzaW9uIiAnCisJCShta2RpciAkZGlyICYmIGNkICRkaXIgJiYgIiRHSVRfVU5aSVAiIC1hIC4uLyR6aXBmaWxlKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgIiB2YWxpZGF0ZSB0aGF0IHRleHQgZmlsZXMgYXJlIGNvbnZlcnRlZCIgIgorCQl0ZXN0X2NtcF9iaW4gJGV4dHJhY3RlZC90ZXh0LmNyICRleHRyYWN0ZWQvdGV4dC5jcmxmICYmCisJCXRlc3RfY21wX2JpbiAkZXh0cmFjdGVkL3RleHQuY3IgJGV4dHJhY3RlZC90ZXh0LmxmCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAiIHZhbGlkYXRlIHRoYXQgYmluYXJ5IGZpbGVzIGFyZSB1bmNoYW5nZWQiICIKKwkJdGVzdF9jbXBfYmluICRvcmlnaW5hbC9iaW5hcnkuY3IgICAkZXh0cmFjdGVkL2JpbmFyeS5jciAmJgorCQl0ZXN0X2NtcF9iaW4gJG9yaWdpbmFsL2JpbmFyeS5jcmxmICRleHRyYWN0ZWQvYmluYXJ5LmNybGYgJiYKKwkJdGVzdF9jbXBfYmluICRvcmlnaW5hbC9iaW5hcnkubGYgICAkZXh0cmFjdGVkL2JpbmFyeS5sZgorCSIKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgVU5aSVAgIiB2YWxpZGF0ZSB0aGF0IGRpZmYgZmlsZXMgYXJlIGNvbnZlcnRlZCIgIgorCQl0ZXN0X2NtcF9iaW4gJGV4dHJhY3RlZC9kaWZmLmNyICRleHRyYWN0ZWQvZGlmZi5jcmxmICYmCisJCXRlc3RfY21wX2JpbiAkZXh0cmFjdGVkL2RpZmYuY3IgJGV4dHJhY3RlZC9kaWZmLmxmCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAiIHZhbGlkYXRlIHRoYXQgLWRpZmYgZmlsZXMgYXJlIHVuY2hhbmdlZCIgIgorCQl0ZXN0X2NtcF9iaW4gJG9yaWdpbmFsL25vZGlmZi5jciAgICRleHRyYWN0ZWQvbm9kaWZmLmNyICYmCisJCXRlc3RfY21wX2JpbiAkb3JpZ2luYWwvbm9kaWZmLmNybGYgJGV4dHJhY3RlZC9ub2RpZmYuY3JsZiAmJgorCQl0ZXN0X2NtcF9iaW4gJG9yaWdpbmFsL25vZGlmZi5sZiAgICRleHRyYWN0ZWQvbm9kaWZmLmxmCisJIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncG9wdWxhdGUgd29ya2RpcicgXAorICAgICdta2RpciBhICYmCisgICAgIGVjaG8gc2ltcGxlIHRleHRmaWxlID5hL2EgJiYKKyAgICAgbWtkaXIgYS9iaW4gJiYKKyAgICAgY3AgL2Jpbi9zaCBhL2JpbiAmJgorICAgICBwcmludGYgInRleHRcciIJPmEvdGV4dC5jciAmJgorICAgICBwcmludGYgInRleHRcclxuIgk+YS90ZXh0LmNybGYgJiYKKyAgICAgcHJpbnRmICJ0ZXh0XG4iCT5hL3RleHQubGYgJiYKKyAgICAgcHJpbnRmICJ0ZXh0XHIiCT5hL25vZGlmZi5jciAmJgorICAgICBwcmludGYgInRleHRcclxuIgk+YS9ub2RpZmYuY3JsZiAmJgorICAgICBwcmludGYgInRleHRcbiIJPmEvbm9kaWZmLmxmICYmCisgICAgIHByaW50ZiAiXDBcciIJPmEvYmluYXJ5LmNyICYmCisgICAgIHByaW50ZiAiXDBcclxuIgk+YS9iaW5hcnkuY3JsZiAmJgorICAgICBwcmludGYgIlwwXG4iCT5hL2JpbmFyeS5sZiAmJgorICAgICBwcmludGYgIlwwXHIiCT5hL2RpZmYuY3IgJiYKKyAgICAgcHJpbnRmICJcMFxyXG4iCT5hL2RpZmYuY3JsZiAmJgorICAgICBwcmludGYgIlwwXG4iCT5hL2RpZmYubGYgJiYKKyAgICAgcHJpbnRmICJBXCRGb3JtYXQ6JXNcJE8iICIkU1VCU1RGT1JNQVQiID5hL3N1YnN0ZmlsZTEgJiYKKyAgICAgcHJpbnRmICJBIG5vdCBzdWJzdGl0dXRlZCBPIiA+YS9zdWJzdGZpbGUyICYmCisgICAgIChwPWxvbmdfcGF0aF90b19hX2ZpbGUgJiYgY2QgYSAmJgorICAgICAgZm9yIGRlcHRoIGluIDEgMiAzIDQgNTsgZG8gbWtkaXIgJHAgJiYgY2QgJHA7IGRvbmUgJiYKKyAgICAgIGVjaG8gdGV4dCA+ZmlsZV93aXRoX2xvbmdfcGF0aCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyxVTlpJUF9TWU1MSU5LUyAnYWRkIHN5bWxpbmsnICcKKwlsbiAtcyBhIGEvc3ltbGlua190b19hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZmlsZSBsaXN0JyAnCisJKGNkIGEgJiYgZmluZCAuKSB8IHNvcnQgPmEubHN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdhZGQgaWdub3JlZCBmaWxlJyBcCisgICAgJ2VjaG8gaWdub3JlIG1lID5hL2lnbm9yZWQgJiYKKyAgICAgZWNobyBpZ25vcmVkIGV4cG9ydC1pZ25vcmUgPi5naXQvaW5mby9hdHRyaWJ1dGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZmlsZXMgdG8gcmVwb3NpdG9yeScgJworCWdpdCBhZGQgYSAmJgorCUdJVF9DT01NSVRURVJfREFURT0iMjAwNS0wNS0yNyAyMjowMCIgZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4cG9ydC1zdWJzdCBhbmQgZGlmZiBhdHRyaWJ1dGVzJyAnCisJZWNobyAiYS9ub2RpZmYuKiAtZGlmZiIgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCWVjaG8gImEvZGlmZi4qIGRpZmYiID4+LmdpdC9pbmZvL2F0dHJpYnV0ZXMgJiYKKwllY2hvICJzdWJzdGZpbGU/IiBleHBvcnQtc3Vic3QgPj4uZ2l0L2luZm8vYXR0cmlidXRlcyAmJgorCWdpdCBsb2cgLS1tYXgtY291bnQ9MSAiLS1wcmV0dHk9Zm9ybWF0OkEke1NVQlNURk9STUFUfU8iIEhFQUQgXAorCQk+YS9zdWJzdGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGUgYmFyZSBjbG9uZScgXAorICAgICdnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZS5naXQgJiYKKyAgICAgY3AgLmdpdC9pbmZvL2F0dHJpYnV0ZXMgYmFyZS5naXQvaW5mby9hdHRyaWJ1dGVzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncmVtb3ZlIGlnbm9yZWQgZmlsZScgXAorICAgICdybSBhL2lnbm9yZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAnIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIEhFQUQgPmQuemlwJworCitjaGVja196aXAgZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIGluIGEgYmFyZSByZXBvJyBcCisgICAgJyhjZCBiYXJlLmdpdCAmJiBnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgSEVBRCkgPmQxLnppcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCB2cy4gdGhlIHNhbWUgaW4gYSBiYXJlIHJlcG8nIFwKKyAgICAndGVzdF9jbXBfYmluIGQuemlwIGQxLnppcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIHdpdGggLS1vdXRwdXQnIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIC0tb3V0cHV0PWQyLnppcCBIRUFEICYmCisgICAgdGVzdF9jbXBfYmluIGQuemlwIGQyLnppcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgd2l0aCAtLW91dHB1dCwgaW5mZXJyaW5nIGZvcm1hdCcgJworCWdpdCBhcmNoaXZlIC0tb3V0cHV0PWQzLnppcCBIRUFEICYmCisJdGVzdF9jbXBfYmluIGQuemlwIGQzLnppcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIHdpdGggcHJlZml4JyBcCisgICAgJ2dpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCAtLXByZWZpeD1wcmVmaXgvIEhFQUQgPmUuemlwJworCitjaGVja196aXAgZSBwcmVmaXgvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhcmNoaXZlIC0wIC0tZm9ybWF0PXppcCBvbiBsYXJnZSBmaWxlcycgJworCXRlc3RfY29uZmlnIGNvcmUuYmlnZmlsZXRocmVzaG9sZCAxICYmCisJZ2l0IGFyY2hpdmUgLTAgLS1mb3JtYXQ9emlwIEhFQUQgPmxhcmdlLnppcAorJworCitjaGVja196aXAgbGFyZ2UKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9emlwIG9uIGxhcmdlIGZpbGVzJyAnCisJdGVzdF9jb25maWcgY29yZS5iaWdmaWxldGhyZXNob2xkIDEgJiYKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD16aXAgSEVBRCA+bGFyZ2UtY29tcHJlc3NlZC56aXAKKycKKworY2hlY2tfemlwIGxhcmdlLWNvbXByZXNzZWQKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MDAzL2luZm96aXAtc3ltbGlua3MuemlwIGIvdC90NTAwMy9pbmZvemlwLXN5bWxpbmtzLnppcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjU3MjhjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwMy9pbmZvemlwLXN5bWxpbmtzLnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MDA0LWFyY2hpdmUtY29ybmVyLWNhc2VzLnNoIGIvdC90NTAwNC1hcmNoaXZlLWNvcm5lci1jYXNlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jY2EyMzM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwNC1hcmNoaXZlLWNvcm5lci1jYXNlcy5zaApAQCAtMCwwICsxLDE1OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY29ybmVyIGNhc2VzIG9mIGdpdC1hcmNoaXZlJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBjb21taXQgd2l0aCBlbXB0eSB0cmVlJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGZvbworJworCisjIE1ha2UgYSBkaXIgYW5kIGNsZWFuIGl0IHVwIGFmdGVyd2FyZHMKK21ha2VfZGlyKCkgeworCW1rZGlyICIkMSIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiAnJDEnIgorfQorCisjIENoZWNrIHRoYXQgdGhlIGRpciBnaXZlbiBpbiAiJDEiIGNvbnRhaW5zIGV4YWN0bHkgdGhlCisjIHNldCBvZiBwYXRocyBnaXZlbiBhcyBhcmd1bWVudHMuCitjaGVja19kaXIoKSB7CisJZGlyPSQxOyBzaGlmdAorCXsKKwkJZWNobyAiJGRpciIgJiYKKwkJZm9yIGkgaW4gIiRAIjsgZG8KKwkJCWVjaG8gIiRkaXIvJGkiCisJCWRvbmUKKwl9IHwgc29ydCA+ZXhwZWN0ICYmCisJZmluZCAiJGRpciIgISAtbmFtZSBwYXhfZ2xvYmFsX2hlYWRlciAtcHJpbnQgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKKworIyBic2R0YXIvbGliYXJjaGl2ZSB2ZXJzaW9ucyBiZWZvcmUgMy4xLjMgY29uc2lkZXIgYSB0YXIgZmlsZSB3aXRoIGEKKyMgZ2xvYmFsIHBheCBoZWFkZXIgdGhhdCBpcyBub3QgZm9sbG93ZWQgYnkgYSBmaWxlIHJlY29yZCBhcyBjb3JydXB0LgoraWYgIiRUQVIiIHRmICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDA0L2VtcHR5LXdpdGgtcGF4LWhlYWRlci50YXIgPi9kZXYvbnVsbCAyPiYxCit0aGVuCisJdGVzdF9zZXRfcHJlcmVxIEhFQURFUl9PTkxZX1RBUl9PSworZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBIRUFERVJfT05MWV9UQVJfT0sgJ3RhciBhcmNoaXZlIG9mIGNvbW1pdCB3aXRoIGVtcHR5IHRyZWUnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgSEVBRCA+ZW1wdHktd2l0aC1wYXgtaGVhZGVyLnRhciAmJgorCW1ha2VfZGlyIGV4dHJhY3QgJiYKKwkiJFRBUiIgeGYgZW1wdHktd2l0aC1wYXgtaGVhZGVyLnRhciAtQyBleHRyYWN0ICYmCisJY2hlY2tfZGlyIGV4dHJhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFyIGFyY2hpdmUgb2YgZW1wdHkgdHJlZSBpcyBlbXB0eScgJworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXRhciBIRUFEOiA+ZW1wdHkudGFyICYmCisJcGVybCAtZSAicHJpbnQgXCJcXDBcIiB4IDEwMjQwIiA+MTBrbnVscy50YXIgJiYKKwl0ZXN0X2NtcF9iaW4gMTBrbnVscy50YXIgZW1wdHkudGFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhciBhcmNoaXZlIG9mIGVtcHR5IHRyZWUgd2l0aCBwcmVmaXgnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgLS1wcmVmaXg9Zm9vLyBIRUFEID5wcmVmaXgudGFyICYmCisJbWFrZV9kaXIgZXh0cmFjdCAmJgorCSIkVEFSIiB4ZiBwcmVmaXgudGFyIC1DIGV4dHJhY3QgJiYKKwljaGVja19kaXIgZXh0cmFjdCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAnemlwIGFyY2hpdmUgb2YgZW1wdHkgdHJlZSBpcyBlbXB0eScgJworCSMgRGV0ZWN0IHRoZSBleGl0IGNvZGUgcHJvZHVjZWQgd2hlbiBvdXIgcGFydGljdWxhciBmbGF2b3Igb2YgdW56aXAKKwkjIHNlZXMgYW4gZW1wdHkgYXJjaGl2ZS4gSW5mb3ppcCB3aWxsIGdlbmVyYXRlIGEgd2FybmluZyBhbmQgZXhpdCB3aXRoCisJIyBjb2RlIDEuIEJ1dCBpbiB0aGUgbmFtZSBvZiBzYW5pdHksIHdlIGRvIG5vdCBleHBlY3Qgb3RoZXIgdW56aXAKKwkjIGltcGxlbWVudGF0aW9ucyB0byBkbyB0aGUgc2FtZSB0aGluZyAoaXQgd291bGQgYmUgcGVyZmVjdGx5CisJIyByZWFzb25hYmxlIHRvIGV4aXQgMCwgZm9yIGV4YW1wbGUpLgorCSMKKwkjIFRoaXMgbWFrZXMgb3VyIHRlc3QgbGVzcyByaWdvcm91cyBvbiBzb21lIHBsYXRmb3JtcyAodW56aXAgbWF5IG5vdAorCSMgaGFuZGxlIHRoZSBlbXB0eSByZXBvIGF0IGFsbCwgbWFraW5nIG91ciBsYXRlciBjaGVjayBvZiBpdHMgZXhpdCBjb2RlCisJIyBhIG5vLW9wKS4gQnV0IHdlIGNhbm5vdCBkbyBhbnl0aGluZyByZWFzb25hYmxlIGV4Y2VwdCBza2lwIHRoZSB0ZXN0CisJIyBvbiBzdWNoIHBsYXRmb3JtcyBhbnl3YXksIGFuZCB0aGlzIGlzIHRoZSBtb3JhbCBlcXVpdmFsZW50LgorCXsKKwkJIiRHSVRfVU5aSVAiICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MDA0L2VtcHR5LnppcAorCQlleHBlY3RfY29kZT0kPworCX0gJiYKKworCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCBIRUFEID5lbXB0eS56aXAgJiYKKwltYWtlX2RpciBleHRyYWN0ICYmCisJKAorCQljZCBleHRyYWN0ICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgJGV4cGVjdF9jb2RlICIkR0lUX1VOWklQIiAuLi9lbXB0eS56aXAKKwkpICYmCisJY2hlY2tfZGlyIGV4dHJhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBVTlpJUCAnemlwIGFyY2hpdmUgb2YgZW1wdHkgdHJlZSB3aXRoIHByZWZpeCcgJworCSMgV2UgZG8gbm90IGhhdmUgdG8gcGxheSBleGl0LWNvZGUgdHJpY2tzIGhlcmUsIGJlY2F1c2Ugb3VyCisJIyByZXN1bHQgc2hvdWxkIG5vdCBiZSBlbXB0eTsgaXQgaGFzIGEgZGlyZWN0b3J5IGluIGl0LgorCWdpdCBhcmNoaXZlIC0tZm9ybWF0PXppcCAtLXByZWZpeD1mb28vIEhFQUQgPnByZWZpeC56aXAgJiYKKwltYWtlX2RpciBleHRyYWN0ICYmCisJKAorCQljZCBleHRyYWN0ICYmCisJCSIkR0lUX1VOWklQIiAuLi9wcmVmaXguemlwCisJKSAmJgorCWNoZWNrX2RpciBleHRyYWN0IGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmNoaXZlIGNvbXBsYWlucyBhYm91dCBwYXRoc3BlYyBvbiBlbXB0eSB0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyIEhFQUQgLS0gZm9vID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGEgY29tbWl0IHdpdGggYW4gZW1wdHkgc3VidHJlZScgJworCWVtcHR5X3RyZWU9JChnaXQgaGFzaC1vYmplY3QgLXQgdHJlZSAvZGV2L251bGwpICYmCisJcm9vdF90cmVlPSQocHJpbnRmICIwNDAwMDAgdHJlZSAkZW1wdHlfdHJlZVx0c3ViXG4iIHwgZ2l0IG1rdHJlZSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXJjaGl2ZSBlbXB0eSBzdWJ0cmVlIHdpdGggbm8gcGF0aHNwZWMnICcKKwlnaXQgYXJjaGl2ZSAtLWZvcm1hdD10YXIgJHJvb3RfdHJlZSA+c3VidHJlZS1hbGwudGFyICYmCisJbWFrZV9kaXIgZXh0cmFjdCAmJgorCSIkVEFSIiB4ZiBzdWJ0cmVlLWFsbC50YXIgLUMgZXh0cmFjdCAmJgorCWNoZWNrX2RpciBleHRyYWN0IHN1YgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcmNoaXZlIGVtcHR5IHN1YnRyZWUgYnkgZGlyZWN0IHBhdGhzcGVjJyAnCisJZ2l0IGFyY2hpdmUgLS1mb3JtYXQ9dGFyICRyb290X3RyZWUgLS0gc3ViID5zdWJ0cmVlLXBhdGgudGFyICYmCisJbWFrZV9kaXIgZXh0cmFjdCAmJgorCSIkVEFSIiB4ZiBzdWJ0cmVlLXBhdGgudGFyIC1DIGV4dHJhY3QgJiYKKwljaGVja19kaXIgZXh0cmFjdCBzdWIKKycKKworWklQSU5GTz16aXBpbmZvCisKK3Rlc3RfbGF6eV9wcmVyZXEgWklQSU5GTyAnCisJbj0kKCIkWklQSU5GTyIgIiRURVNUX0RJUkVDVE9SWSIvdDUwMDQvZW1wdHkuemlwIHwgc2VkIC1uICIycy8uKiAvL3AiKQorCXRlc3QgIngkbiIgPSAieDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgWklQSU5GTyAnemlwIGFyY2hpdmUgd2l0aCBtYW55IGVudHJpZXMnICcKKwkjIGFkZCBhIGRpcmVjdG9yeSB3aXRoIDI1NiBmaWxlcworCW1rZGlyIDAwICYmCisJZm9yIGEgaW4gMCAxIDIgMyA0IDUgNiA3IDggOSBhIGIgYyBkIGUgZgorCWRvCisJCWZvciBiIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkgYSBiIGMgZCBlIGYKKwkJZG8KKwkJCTogPjAwLyRhJGIKKwkJZG9uZQorCWRvbmUgJiYKKwlnaXQgYWRkIDAwICYmCisJZ2l0IGNvbW1pdCAtbSAiMjU2IGZpbGVzIGluIDEgZGlyZWN0b3J5IiAmJgorCisJIyBkdXBsaWNhdGUgaXQgdG8gZ2V0IDY1NTM2IGZpbGVzIGluIDI1NiBkaXJlY3RvcmllcworCXN1YnRyZWU9JChnaXQgd3JpdGUtdHJlZSAtLXByZWZpeD0wMC8pICYmCisJZm9yIGMgaW4gMCAxIDIgMyA0IDUgNiA3IDggOSBhIGIgYyBkIGUgZgorCWRvCisJCWZvciBkIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkgYSBiIGMgZCBlIGYKKwkJZG8KKwkJCWVjaG8gIjA0MDAwMCB0cmVlICRzdWJ0cmVlCSRjJGQiCisJCWRvbmUKKwlkb25lID50cmVlICYmCisJdHJlZT0kKGdpdCBta3RyZWUgPHRyZWUpICYmCisKKwkjIHppcCB0aGVtCisJZ2l0IGFyY2hpdmUgLW8gbWFueS56aXAgJHRyZWUgJiYKKworCSMgY2hlY2sgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBaSVAgZmlsZSBkaXJlY3RvcnkKKwlleHByIDY1NTM2ICsgMjU2ID5leHBlY3QgJiYKKwkiJFpJUElORk8iIG1hbnkuemlwIHwgaGVhZCAtMiB8IHNlZCAtbiAiMnMvLiogLy9wIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUwMDQvZW1wdHktd2l0aC1wYXgtaGVhZGVyLnRhciBiL3QvdDUwMDQvZW1wdHktd2l0aC1wYXgtaGVhZGVyLnRhcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTllMzllCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTAwNC9lbXB0eS13aXRoLXBheC1oZWFkZXIudGFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDUwMDQvZW1wdHkuemlwIGIvdC90NTAwNC9lbXB0eS56aXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE3NmJiNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUwMDQvZW1wdHkuemlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDUxMDAtbWFpbGluZm8uc2ggYi90L3Q1MTAwLW1haWxpbmZvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU5N2NmYjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwLW1haWxpbmZvLnNoCkBAIC0wLDAgKzEsMTE0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtYWlsaW5mbyBhbmQgZ2l0IG1haWxzcGxpdCB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgc2FtcGxlIGJveCcgXAorCSdnaXQgbWFpbHNwbGl0IC1vLiAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9zYW1wbGUubWJveCA+bGFzdCAmJgorCWxhc3Q9YGNhdCBsYXN0YCAmJgorCWVjaG8gdG90YWwgaXMgJGxhc3QgJiYKKwl0ZXN0IGBjYXQgbGFzdGAgPSAxNycKKworY2hlY2tfbWFpbGluZm8gKCkgeworCW1haWw9JDEgb3B0PSQyCisJbW89IiRtYWlsJG9wdCIKKwlnaXQgbWFpbGluZm8gLXUgJG9wdCBtc2ckbW8gcGF0Y2gkbW8gPCRtYWlsID5pbmZvJG1vICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbXNnJG1vIG1zZyRtbyAmJgorCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL3BhdGNoJG1vIHBhdGNoJG1vICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvaW5mbyRtbyBpbmZvJG1vCit9CisKKworZm9yIG1haWwgaW4gYGVjaG8gMDAqYAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJtYWlsaW5mbyAkbWFpbCIgJworCQljaGVja19tYWlsaW5mbyAkbWFpbCAiIiAmJgorCQlpZiB0ZXN0IC1mICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL21zZyRtYWlsLS1zY2lzc29ycworCQl0aGVuCisJCQljaGVja19tYWlsaW5mbyAkbWFpbCAtLXNjaXNzb3JzCisJCWZpICYmCisJCWlmIHRlc3QgLWYgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbXNnJG1haWwtLW5vLWluYm9keS1oZWFkZXJzCisJCXRoZW4KKwkJCWNoZWNrX21haWxpbmZvICRtYWlsIC0tbm8taW5ib2R5LWhlYWRlcnMKKwkJZmkgJiYKKwkJaWYgdGVzdCAtZiAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9tc2ckbWFpbC0tbWVzc2FnZS1pZAorCQl0aGVuCisJCQljaGVja19tYWlsaW5mbyAkbWFpbCAtLW1lc3NhZ2UtaWQKKwkJZmkKKwknCitkb25lCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXQgYm94IHdpdGggcmZjMjA0NyBzYW1wbGVzJyBcCisJJ21rZGlyIHJmYzIwNDcgJiYKKwlnaXQgbWFpbHNwbGl0IC1vcmZjMjA0NyAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveCBcCisJICA+cmZjMjA0Ny9sYXN0ICYmCisJbGFzdD1gY2F0IHJmYzIwNDcvbGFzdGAgJiYKKwllY2hvIHRvdGFsIGlzICRsYXN0ICYmCisJdGVzdCBgY2F0IHJmYzIwNDcvbGFzdGAgPSAxMScKKworZm9yIG1haWwgaW4gYGVjaG8gcmZjMjA0Ny8wMCpgCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1haWxpbmZvICRtYWlsIiAnCisJCWdpdCBtYWlsaW5mbyAtdSAkbWFpbC1tc2cgJG1haWwtcGF0Y2ggPCRtYWlsID4kbWFpbC1pbmZvICYmCisJCWVjaG8gbXNnICYmCisJCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL2VtcHR5ICRtYWlsLW1zZyAmJgorCQllY2hvIHBhdGNoICYmCisJCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL2VtcHR5ICRtYWlsLXBhdGNoICYmCisJCWVjaG8gaW5mbyAmJgorCQl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9yZmMyMDQ3LWluZm8tJChiYXNlbmFtZSAkbWFpbCkgJG1haWwtaW5mbworCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzcGVjdCBOVUxzJyAnCisKKwlnaXQgbWFpbHNwbGl0IC1kMyAtby4gIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbnVsLXBsYWluICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbnVsLXBsYWluIDAwMSAmJgorCShjYXQgMDAxIHwgZ2l0IG1haWxpbmZvIG1zZyBwYXRjaCkgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSA0IHBhdGNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUHJlc2VydmUgTlVMcyBvdXQgb2YgTUlNRSBlbmNvZGVkIG1lc3NhZ2UnICcKKworCWdpdCBtYWlsc3BsaXQgLWQ1IC1vLiAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9udWwtYjY0LmluICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbnVsLWI2NC5pbiAwMDAwMSAmJgorCWdpdCBtYWlsaW5mbyBtc2cgcGF0Y2ggPDAwMDAxICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvbnVsLWI2NC5leHBlY3QgcGF0Y2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWlsaW5mbyBvbiBmcm9tIGhlYWRlciB3aXRob3V0IG5hbWUgd29ya3MnICcKKworCW1rZGlyIGluZm8tZnJvbSAmJgorCWdpdCBtYWlsc3BsaXQgLW9pbmZvLWZyb20gIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvaW5mby1mcm9tLmluICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvaW5mby1mcm9tLmluIGluZm8tZnJvbS8wMDAxICYmCisJZ2l0IG1haWxpbmZvIGluZm8tZnJvbS9tc2cgaW5mby1mcm9tL3BhdGNoIFwKKwkgIDxpbmZvLWZyb20vMDAwMSA+aW5mby1mcm9tL291dCAmJgorCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL2luZm8tZnJvbS5leHBlY3QgaW5mby1mcm9tL291dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21haWxpbmZvIGZpbmRzIGhlYWRlcnMgYWZ0ZXIgZW1iZWRkZWQgRnJvbSBsaW5lJyAnCisJbWtkaXIgZW1iZWQtZnJvbSAmJgorCWdpdCBtYWlsc3BsaXQgLW9lbWJlZC1mcm9tICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL2VtYmVkLWZyb20uaW4gJiYKKwl0ZXN0X2NtcCAiJFRFU1RfRElSRUNUT1JZIi90NTEwMC9lbWJlZC1mcm9tLmluIGVtYmVkLWZyb20vMDAwMSAmJgorCWdpdCBtYWlsaW5mbyBlbWJlZC1mcm9tL21zZyBlbWJlZC1mcm9tL3BhdGNoIFwKKwkgIDxlbWJlZC1mcm9tLzAwMDEgPmVtYmVkLWZyb20vb3V0ICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvZW1iZWQtZnJvbS5leHBlY3QgZW1iZWQtZnJvbS9vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFpbGluZm8gb24gbWVzc2FnZSB3aXRoIHF1b3RlZCA+RnJvbScgJworCW1rZGlyIHF1b3RlZC1mcm9tICYmCisJZ2l0IG1haWxzcGxpdCAtb3F1b3RlZC1mcm9tICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL3F1b3RlZC1mcm9tLmluICYmCisJdGVzdF9jbXAgIiRURVNUX0RJUkVDVE9SWSIvdDUxMDAvcXVvdGVkLWZyb20uaW4gcXVvdGVkLWZyb20vMDAwMSAmJgorCWdpdCBtYWlsaW5mbyBxdW90ZWQtZnJvbS9tc2cgcXVvdGVkLWZyb20vcGF0Y2ggXAorCSAgPHF1b3RlZC1mcm9tLzAwMDEgPnF1b3RlZC1mcm9tL291dCAmJgorCXRlc3RfY21wICIkVEVTVF9ESVJFQ1RPUlkiL3Q1MTAwL3F1b3RlZC1mcm9tLmV4cGVjdCBxdW90ZWQtZnJvbS9tc2cKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MTAwLy5naXRhdHRyaWJ1dGVzIGIvdC90NTEwMC8uZ2l0YXR0cmlidXRlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTNmNTE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxLDQgQEAKK21zZyoJZW5jb2Rpbmc9VVRGLTgKK2luZm8qCWVuY29kaW5nPVVURi04CityZmMyMDQ3LWluZm8tKgllbmNvZGluZz1VVEYtOAorc2FtcGxlLm1ib3gJZW5jb2Rpbmc9VVRGLTgKZGlmZiAtLWdpdCBhL3QvdDUxMDAvZW1iZWQtZnJvbS5leHBlY3QgYi90L3Q1MTAwL2VtYmVkLWZyb20uZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YTNhMzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2VtYmVkLWZyb20uZXhwZWN0CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBDb21taXQgQXV0aG9yCitFbWFpbDogY29tbWl0QGV4YW1wbGUuY29tCitTdWJqZWN0OiBwYXRjaCBzdWJqZWN0CitEYXRlOiBTYXQsIDEzIFNlcCAyMDE0IDIxOjEzOjIzIC0wNDAwIAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2VtYmVkLWZyb20uaW4gYi90L3Q1MTAwL2VtYmVkLWZyb20uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzZjg0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvZW1iZWQtZnJvbS5pbgpAQCAtMCwwICsxLDEzIEBACitGcm9tIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBFbWFpbCBBdXRob3IgPGVtYWlsQGV4YW1wbGUuY29tPgorRGF0ZTogU3VuLCAyNSBNYXkgMjAwOCAwMDozODoxOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSBlbWFpbCBzdWJqZWN0CisKKz5Gcm9tIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDb21taXQgQXV0aG9yIDxjb21taXRAZXhhbXBsZS5jb20+CitEYXRlOiBTYXQsIDEzIFNlcCAyMDE0IDIxOjEzOjIzIC0wNDAwCitTdWJqZWN0OiBwYXRjaCBzdWJqZWN0CisKK3BhdGNoIGJvZHkKKy0tLQorcGF0Y2gKZGlmZiAtLWdpdCBhL3QvdDUxMDAvZW1wdHkgYi90L3Q1MTAwL2VtcHR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2VtcHR5CmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8tZnJvbS5leHBlY3QgYi90L3Q1MTAwL2luZm8tZnJvbS5leHBlY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxZDJlYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mby1mcm9tLmV4cGVjdApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogYmFyZUBleGFtcGxlLmNvbQorRW1haWw6IGJhcmVAZXhhbXBsZS5jb20KK1N1YmplY3Q6IHRlc3RpbmcgYmFyZSBhZGRyZXNzIGluIGZyb20gaGVhZGVyCitEYXRlOiBTdW4sIDI1IE1heSAyMDA4IDAwOjM4OjE4IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mby1mcm9tLmluIGIvdC90NTEwMC9pbmZvLWZyb20uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwODIwOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mby1mcm9tLmluCkBAIC0wLDAgKzEsOCBAQAorRnJvbSA2NjdkODk0MGU3MTljZGRlZTFjZmUyMzdjYmJlMjE1ZTIwMjcwYjA5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogYmFyZUBleGFtcGxlLmNvbQorRGF0ZTogU3VuLCAyNSBNYXkgMjAwOCAwMDozODoxOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSB0ZXN0aW5nIGJhcmUgYWRkcmVzcyBpbiBmcm9tIGhlYWRlcgorCitjb21taXQgbWVzc2FnZQorLS0tCitwYXRjaApkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwMSBiL3QvdDUxMDAvaW5mbzAwMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1MTUzOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDEKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgKHp6eikgVSBUaG9yIChDb21tZW50KQorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBhIGNvbW1pdC4KK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDAyIGIvdC90NTEwMC9pbmZvMDAwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWJiMGZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwMgpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogYW5vdGhlciBwYXRjaAorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDMgYi90L3Q1MTAwL2luZm8wMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMGQxMjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDAzCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiB0aGlyZCBwYXRjaAorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMDQgYi90L3Q1MTAwL2luZm8wMDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNmMzMDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDA0CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBZT1NISUZVSkkgSGlkZWFraSAvIOWQieiXpOiLseaYjgorRW1haWw6IHlvc2hmdWppQGxpbnV4LWlwdjYub3JnCitTdWJqZWN0OiBHSVQ6IFRyeSBhbGwgYWRkcmVzc2VzIGZvciBnaXZlbiByZW1vdGUgbmFtZQorRGF0ZTogVGh1LCAyMSBKdWwgMjAwNSAwOToxMDozNiAtMDQwMCAoRURUKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDA1IGIvdC90NTEwMC9pbmZvMDAwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmE0NmZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwNQpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogRGF2aWQgS8OlZ2VkYWwKK0VtYWlsOiBkYXZpZGtAbHlzYXRvci5saXUuc2UKK1N1YmplY3Q6IEZpeGVkIHR3byBidWdzIGluIGdpdC1jdnNpbXBvcnQtc2NyaXB0LgorRGF0ZTogTW9uLCAxNSBBdWcgMjAwNSAyMDoxODoyNSArMDIwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDA2IGIvdC90NTEwMC9pbmZvMDAwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzA1Mjc3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwNgpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogYSBjb21taXQuCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwNyBiL3QvdDUxMDAvaW5mbzAwMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDliYjBmZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDcKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGFub3RoZXIgcGF0Y2gKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDA4IGIvdC90NTEwMC9pbmZvMDAwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGEyOTUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAwOApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogSnVuaW8gQyBIYW1hbm8KK0VtYWlsOiBqdW5pb0BrZXJuZWwub3JnCitTdWJqZWN0OiBhbm90aGVyIHBhdGNoCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAwOSBiL3QvdDUxMDAvaW5mbzAwMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2NjMyMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMDkKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEYgVSBCYXIKK0VtYWlsOiBmLnUuYmFyQGV4YW1wbGUuY29tCitTdWJqZWN0OiB1cGRhdGVzCitEYXRlOiBNb24sIDE3IFNlcCAyMDAxIDAwOjAwOjAwICswOTAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTAgYi90L3Q1MTAwL2luZm8wMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTEyNDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDEwCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBMdWthcyBTYW5kc3Ryw7ZtCitFbWFpbDogbHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2UKK1N1YmplY3Q6IGdpdC1tYWlsaW5mbzogRml4IGdldHRpbmcgdGhlIHN1YmplY3QgZnJvbSB0aGUgYm9keQorRGF0ZTogVGh1LCAxMCBKdWwgMjAwOCAyMzo0MTozMyArMDIwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDExIGIvdC90NTEwMC9pbmZvMDAxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTVhNjA1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxMQpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogWHl6enkKK0RhdGU6IEZyaSwgOCBBdWcgMjAwOCAxMzowODozNyArMDIwMCAoQ0VTVCkKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxMiBiL3QvdDUxMDAvaW5mbzAwMTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxMjE2ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTIKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IERtaXRyaXkgQmxpbm92CitFbWFpbDogYmRhQG1uc3NwYi5ydQorU3ViamVjdDog0JjQt9C80LXQvdGR0L0g0YHQv9C40YHQvtC6INC/0LDQutC10YLQvtCyINC90LXQvtCx0YXQvtC00LjQvNGL0YUg0LTQu9GPINGB0LHQvtGA0LrQuAorRGF0ZTogV2VkLCAxMiBOb3YgMjAwOCAxNzo1NDo0MSArMDMwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDEyLS1tZXNzYWdlLWlkIGIvdC90NTEwMC9pbmZvMDAxMi0tbWVzc2FnZS1pZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzEyMTZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxMi0tbWVzc2FnZS1pZApAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogRG1pdHJpeSBCbGlub3YKK0VtYWlsOiBiZGFAbW5zc3BiLnJ1CitTdWJqZWN0OiDQmNC30LzQtdC90ZHQvSDRgdC/0LjRgdC+0Log0L/QsNC60LXRgtC+0LIg0L3QtdC+0LHRhdC+0LTQuNC80YvRhSDQtNC70Y8g0YHQsdC+0YDQutC4CitEYXRlOiBXZWQsIDEyIE5vdiAyMDA4IDE3OjU0OjQxICswMzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTMgYi90L3Q1MTAwL2luZm8wMDEzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZTA0OWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDEzCkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBhIHBhdGNoCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxNCBiL3QvdDUxMDAvaW5mbzAwMTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg1NjZiMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTQKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEp1bmlvIEhhbWFubworRW1haWw6IGp1bmtpb0Bjb3gubmV0CitTdWJqZWN0OiBCTEFIIE9ORQorRGF0ZTogVGh1LCAyMCBBdWcgMjAwOSAxNzoxODoyMiAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE0LS1zY2lzc29ycyBiL3QvdDUxMDAvaW5mbzAwMTQtLXNjaXNzb3JzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiOWM4ZDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDE0LS1zY2lzc29ycwpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogSnVuaW8gQyBIYW1hbm8KK0VtYWlsOiBnaXRzdGVyQHBvYm94LmNvbQorU3ViamVjdDogVGVhY2ggbWFpbGluZm8gdG8gaWdub3JlIGV2ZXJ5dGhpbmcgYmVmb3JlIC0tID44IC0tIG1hcmsKK0RhdGU6IFRodSwgMjAgQXVnIDIwMDkgMTc6MTg6MjIgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxNSBiL3QvdDUxMDAvaW5mbzAwMTUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDExNGYxMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTUKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IAorRW1haWw6IAorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGZyb20pCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxNS0tbm8taW5ib2R5LWhlYWRlcnMgYi90L3Q1MTAwL2luZm8wMDE1LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGQ4ZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9pbmZvMDAxNS0tbm8taW5ib2R5LWhlYWRlcnMKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IGNoZWNrIGJvZ3VzIGJvZHkgaGVhZGVyIChmcm9tKQorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvaW5mbzAwMTYgYi90L3Q1MTAwL2luZm8wMDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Y2NkMGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDE2CkBAIC0wLDAgKzEsNSBAQAorQXV0aG9yOiBBIFUgVGhvcgorRW1haWw6IGEudS50aG9yQGV4YW1wbGUuY29tCitTdWJqZWN0OiBjaGVjayBib2d1cyBib2R5IGhlYWRlciAoZGF0ZSkKK0RhdGU6IGJvZ3VzIAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL2luZm8wMDE2LS1uby1pbmJvZHktaGVhZGVycyBiL3QvdDUxMDAvaW5mbzAwMTYtLW5vLWluYm9keS1oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ODU3ZDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL2luZm8wMDE2LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDUgQEAKK0F1dGhvcjogQSBVIFRob3IKK0VtYWlsOiBhLnUudGhvckBleGFtcGxlLmNvbQorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGRhdGUpCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9pbmZvMDAxNyBiL3QvdDUxMDAvaW5mbzAwMTcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiYzg5ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvaW5mbzAwMTcKQEAgLTAsMCArMSw1IEBACitBdXRob3I6IEEgVSBUaG9yCitFbWFpbDogYS51LnRob3JAZXhhbXBsZS5jb20KK1N1YmplY3Q6IEEgRSBJIE8gVQorRGF0ZTogTW9uLCAxNyBTZXAgMjAxMiAxNDoyMzo0NCAtMDcwMAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDEgYi90L3Q1MTAwL21zZzAwMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI3NWE5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwMQpAQCAtMCwwICsxLDIgQEAKK0hlcmUgaXMgYSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDIgYi90L3Q1MTAwL21zZzAwMDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1NDZlYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwMgpAQCAtMCwwICsxLDIxIEBACitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4gIFRoaXMgYWRkcmVzc2VzIHRoZSBpc3N1ZSByYWlzZWQgaW4gdGhlCittZXNzYWdlOgorCitGcm9tOiBOaXQgUGlja2VyIDxuaXQucGlja2VyQGV4YW1wbGUubmV0PgorU3ViamVjdDogZm9vIGlzIHRvbyBvbGQKK01lc3NhZ2UtSWQ6IDxuaXRwaWNrZXIuMTIxMjEyMTJAZXhhbXBsZS5uZXQ+CisKK0hvcGVmdWxseSB0aGlzIHdvdWxkIGZpeCB0aGUgcHJvYmxlbSBzdGF0ZWQgdGhlcmUuCisKKworSSBoYXZlIGluY2x1ZGVkIGFuIGV4dHJhIGJsYW5rIGxpbmUgYWJvdmUsIGJ1dCBpdCBkb2VzIG5vdCBoYXZlIHRvIGJlCitzdHJpcHBlZCBhd2F5IGhlcmUsIGFsb25nIHdpdGggdGhlICAgICAgICAgICAgICAgCQkgICAKK3doaXRlc3BhY2VzIGF0IHRoZSBlbmQgb2YgdGhlIGFib3ZlIGxpbmUuICBUaGV5IGFyZSBleHBlY3RlZCB0byBiZSBzcXVhc2hlZAord2hlbiB0aGUgbWVzc2FnZSBpcyBtYWRlIGludG8gYSBjb21taXQgbG9nIGJ5IHN0cmlwc3BhY2UsCitBbHNvLCB0aGVyZSBhcmUgdGhyZWUgYmxhbmsgbGluZXMgYWZ0ZXIgdGhpcyBwYXJhZ3JhcGgsCit0d28gdHJ1bHkgYmxhbmsgYW5kIGFub3RoZXIgZnVsbCBvZiBzcGFjZXMgaW4gYmV0d2Vlbi4KKworICAgICAgICAgICAgCisKK0hvcGUgdGhpcyBoZWxwcy4KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDAzIGIvdC90NTEwMC9tc2cwMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYzY4MTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMDMKQEAgLTAsMCArMSw5IEBACitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4gIFRoaXMgYWRkcmVzc2VzIHRoZSBpc3N1ZSByYWlzZWQgaW4gdGhlCittZXNzYWdlOgorCitGcm9tOiBOaXQgUGlja2VyIDxuaXQucGlja2VyQGV4YW1wbGUubmV0PgorU3ViamVjdDogZm9vIGlzIHRvbyBvbGQKK01lc3NhZ2UtSWQ6IDxuaXRwaWNrZXIuMTIxMjEyMTJAZXhhbXBsZS5uZXQ+CisKK0hvcGVmdWxseSB0aGlzIHdvdWxkIGZpeCB0aGUgcHJvYmxlbSBzdGF0ZWQgdGhlcmUuCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwNCBiL3QvdDUxMDAvbXNnMDAwNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjhiYTNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDA0CkBAIC0wLDAgKzEsNyBAQAorSGVsbG8uCisKK1RyeSBhbGwgYWRkcmVzc2VzIGZvciBnaXZlbiByZW1vdGUgbmFtZSB1bnRpbCBpdCBzdWNjZWVkcy4KK0Fsc28gc3VwcG9ydHMgSVB2Ni4KKworU2lnbmVkLW9mLWJ5OiBIaWRlYWtpIFlPU0hJRlVKSSA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwNSBiL3QvdDUxMDAvbXNnMDAwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDk0Y2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDA1CkBAIC0wLDAgKzEsMTMgQEAKK1RoZSBnaXQtY3ZzaW1wb3J0LXNjcmlwdCBoYWQgYSBjb3B1bGUgb2Ygc21hbGwgYnVncyB0aGF0IHByZXZlbnRlZCBtZQorZnJvbSBpbXBvcnRpbmcgYSBiaWcgQ1ZTIHJlcG9zaXRvcnkuCisKK1RoZSBmaXJzdCB3YXMgdGhhdCBpdCBkaWRuJ3QgaGFuZGxlIHJlbW92ZWQgZmlsZXMgd2l0aCBhIG11bHRpLWRpZ2l0CitwcmltYXJ5IHJldmlzaW9uIG51bWJlci4KKworVGhlIHNlY29uZCB3YXMgdGhhdCBpdCB3YXMgYXNraW5nIHRoZSBDVlMgc2VydmVyIGZvciAiRiIgbWVzc2FnZXMsCithbHRob3VnaCB0aGV5IHdlcmUgbm90IGhhbmRsZWQuCisKK0kgYWxzbyB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGF0IHNjcmlwdCB0byBjb3JyZXNwb25kIHRvCithY3R1YWwgZmxhZ3MuCisKK1NpZ25lZC1vZmYtYnk6IERhdmlkIEvDpWdlZGFsIDxkYXZpZGtAbHlzYXRvci5saXUuc2U+CmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDYgYi90L3Q1MTAwL21zZzAwMDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI3NWE5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwNgpAQCAtMCwwICsxLDIgQEAKK0hlcmUgaXMgYSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMDcgYi90L3Q1MTAwL21zZzAwMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFiMjNjMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAwNwpAQCAtMCwwICsxLDIgQEAKK0hlcmUgaXMgYW4gZW1wdHkgcGF0Y2ggZnJvbSBBIFUgVGhvci4KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDA4IGIvdC90NTEwMC9tc2cwMDA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MGVjYjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMDgKQEAgLTAsMCArMSw0IEBACis+SGVyZSBpcyBhbiBlbXB0eSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCitIZXkgeW91IGZvcmdvdCB0aGUgcGF0Y2ghCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAwOSBiL3QvdDUxMDAvbXNnMDAwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZmZlMTMxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDA5CkBAIC0wLDAgKzEsMiBAQAorVGhpcyBpcyB0byBmaXggZGlmZi1mb3JtYXQgZG9jdW1lbnRhdGlvbi4KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDEwIGIvdC90NTEwMC9tc2cwMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NmMyMzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTAKQEAgLTAsMCArMSw1IEBACisiU3ViamVjdDogIiBpc24ndCBpbiB0aGUgc3RhdGljIGFycmF5ICJoZWFkZXIiLCBhbmQgdGh1cworbWVtY21wKCJTdWJqZWN0OiAiLCBoZWFkZXJbaV0sIDcpIHdpbGwgbmV2ZXIgbWF0Y2guCisKK1NpZ25lZC1vZmYtYnk6IEx1a2FzIFNhbmRzdHLDtm0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgorU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDExIGIvdC90NTEwMC9tc2cwMDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NjdmMjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTEKQEAgLTAsMCArMSwyIEBACitIZXJlIGNvbWVzIGEgY29tbWl0IGxvZyBtZXNzYWdlLCBhbmQKK2l0cyBzZWNvbmQgbGluZSBpcyBoZXJlLgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDEyIGIvdC90NTEwMC9tc2cwMDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzJiZjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTIKQEAgLTAsMCArMSw3IEBACit0ZXh0bGl2ZS0qINC40YHQv9GA0LDQstC70LXQvdGLINC90LAgdGV4bGl2ZS0qCitkb2N1dGlscyDQt9Cw0LzQtdC90ZHQvSDQvdCwIHB5dGhvbi1kb2N1dGlscworCivQlNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Qviwg0L7QutCw0LfQsNC70L7RgdGMLCDRh9GC0L4gcmVzdDJ3ZWIg0LLRi9GC0Y/Qs9C40LLQsNC10YIg0LfQsCDRgdC+0LHQvtC5CitweXRob24tZG9jdXRpbHMuINCSINGC0L4g0LLRgNC10LzRjyDQutCw0Log0YHQsNC8IHJlc3Qyd2ViINC90LUg0L3Rg9C20LXQvS4KKworU2lnbmVkLW9mZi1ieTogRG1pdHJpeSBCbGlub3YgPGJkYUBtbnNzcGIucnU+CmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTItLW1lc3NhZ2UtaWQgYi90L3Q1MTAwL21zZzAwMTItLW1lc3NhZ2UtaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc2ZTI2ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxMi0tbWVzc2FnZS1pZApAQCAtMCwwICsxLDggQEAKK3RleHRsaXZlLSog0LjRgdC/0YDQsNCy0LvQtdC90Ysg0L3QsCB0ZXhsaXZlLSoKK2RvY3V0aWxzINC30LDQvNC10L3RkdC9INC90LAgcHl0aG9uLWRvY3V0aWxzCisKK9CU0LXQudGB0YLQstC40YLQtdC70YzQvdC+LCDQvtC60LDQt9Cw0LvQvtGB0YwsINGH0YLQviByZXN0MndlYiDQstGL0YLRj9Cz0LjQstCw0LXRgiDQt9CwINGB0L7QsdC+0LkKK3B5dGhvbi1kb2N1dGlscy4g0JIg0YLQviDQstGA0LXQvNGPINC60LDQuiDRgdCw0LwgcmVzdDJ3ZWIg0L3QtSDQvdGD0LbQtdC9LgorCitTaWduZWQtb2ZmLWJ5OiBEbWl0cml5IEJsaW5vdiA8YmRhQG1uc3NwYi5ydT4KK01lc3NhZ2UtSWQ6IDwxMjI2NTAxNjgxLTI0OTIzLTEtZ2l0LXNlbmQtZW1haWwtYmRhQG1uc3NwYi5ydT4KZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxMyBiL3QvdDUxMDAvbXNnMDAxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDEzCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTQgYi90L3Q1MTAwL21zZzAwMTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlNWNkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxNApAQCAtMCwwICsxLDE4IEBACitJbiByZWFsIGxpZmUsIHdlIHdpbGwgc2VlIGEgZGlzY3Vzc2lvbiB0aGF0IGluc3BpcmVkIHRoaXMgcGF0Y2gKK2Rpc2N1c3NpbmcgcmVsYXRlZCBhbmQgdW5yZWxhdGVkIHRoaW5ncyBhcm91bmQgPjggc2Npc3NvcnMgbWFyaworaW4gdGhpcyBwYXJ0IG9mIHRoZSBtZXNzYWdlLgorCitTdWJqZWN0OiBbUEFUQ0hdIEJMQUggVFdPCisKK0FuZCB0aGVuIHdlIHdpbGwgc2VlIHRoZSBzY2lzc29ycy4KKworIFRoaXMgbGluZSBpcyBub3QgYSBzY2lzc29ycyBtYXJrIC0tID44IC0tIGJ1dCB0YWxrcyBhYm91dCBpdC4KKyAtIC0gPjggLSAtIHBsZWFzZSByZW1vdmUgZXZlcnl0aGluZyBhYm92ZSB0aGlzIGxpbmUgLSAtID44IC0gLQorCitTdWJqZWN0OiBbUEFUQ0hdIFRlYWNoIG1haWxpbmZvIHRvIGlnbm9yZSBldmVyeXRoaW5nIGJlZm9yZSAtLSA+OCAtLSBtYXJrCitGcm9tOiBKdW5pbyBDIEhhbWFubyA8Z2l0c3RlckBwb2JveC5jb20+CisKK1RoaXMgdGVhY2hlcyBtYWlsaW5mbyB0aGUgc2Npc3NvcnMgLS0gPjggLS0gbWFyazsgdGhlIGNvbW1hbmQgaWdub3JlcworZXZlcnl0aGluZyBiZWZvcmUgaXQgaW4gdGhlIG1lc3NhZ2UgYm9keS4KKworU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDE0LS1zY2lzc29ycyBiL3QvdDUxMDAvbXNnMDAxNC0tc2Npc3NvcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5YzZhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvbXNnMDAxNC0tc2Npc3NvcnMKQEAgLTAsMCArMSw0IEBACitUaGlzIHRlYWNoZXMgbWFpbGluZm8gdGhlIHNjaXNzb3JzIC0tID44IC0tIG1hcms7IHRoZSBjb21tYW5kIGlnbm9yZXMKK2V2ZXJ5dGhpbmcgYmVmb3JlIGl0IGluIHRoZSBtZXNzYWdlIGJvZHkuCisKK1NpZ25lZC1vZmYtYnk6IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxNSBiL3QvdDUxMDAvbXNnMDAxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWJiM2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE1CkBAIC0wLDAgKzEsMiBAQAorICAtIGEgbGlzdAorICAtIG9mIHN0dWZmCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTUtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9tc2cwMDE1LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTUxMTViCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE1LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDMgQEAKK0Zyb206IGJvZ29zaXR5CisgIC0gYSBsaXN0CisgIC0gb2Ygc3R1ZmYKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbXNnMDAxNiBiL3QvdDUxMDAvbXNnMDAxNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDlhZGFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE2CkBAIC0wLDAgKzEsMiBAQAorYW5kIHNvbWUgY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL21zZzAwMTYtLW5vLWluYm9keS1oZWFkZXJzIGIvdC90NTEwMC9tc2cwMDE2LS1uby1pbmJvZHktaGVhZGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDYzZjUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9tc2cwMDE2LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDQgQEAKK0RhdGU6IGJvZ3VzCisKK2FuZCBzb21lIGNvbnRlbnQKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9tc2cwMDE3IGIvdC90NTEwMC9tc2cwMDE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZTA5MDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL21zZzAwMTcKQEAgLTAsMCArMSwyIEBACitOZXcgY29udGVudCBoZXJlCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbnVsLWI2NC5leHBlY3QgYi90L3Q1MTAwL251bC1iNjQuZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDY4MGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL251bC1iNjQuZXhwZWN0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3QvdDUxMDAvbnVsLWI2NC5pbiBiL3QvdDUxMDAvbnVsLWI2NC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjU0MGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9udWwtYjY0LmluCkBAIC0wLDAgKzEsMzcgQEAKK0Zyb20gNjY3ZDg5NDBlNzE5Y2RkZWUxY2ZlMjM3Y2JiZTIxNWUyMDI3MGIwOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KK0RhdGU6IFN1biwgMjUgTWF5IDIwMDggMDA6Mzg6MTggLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gc2Vjb25kCitDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworTFMwdENpQm1hV3hsSUh3Z0lFSnBiaUF4TXpVM0lDMCtJREV6TlRjZ1lubDBaWE1LSURFZ1ptbHNaWE1nWTJoaGJtZGxaQ3dnCitNQ0JwYm5ObGNuUnBiMjV6S0NzcExDQXdJR1JsYkdWMGFXOXVjeWd0S1FvS1pHbG1aaUF0TFdkcGRDQmhMMlpwYkdVZ1lpOW0KK2FXeGxDbWx1WkdWNElEYzNNell4WkRndUxqbGxNREppWlRZZ01UQXdOalEwQ2kwdExTQmhMMlpwYkdVS0t5c3JJR0l2Wm1scworWlFwQVFDQXRNU3d4TWlBck1Td3hNaUJBUUFvZ1RHOXlaVzBnYVhCemRXMGdaRzlzYjNJZ2MybDBJR0Z0WlhRc0lHTnZibk5sCitZM1JsZEhWbGNpQmhaR2x3YVhOamFXNW5JR1ZzYVhRdUlGTjFjM0JsYm1ScGMzTmxDaUJ6YVhRZ1lXMWxkQ0IwZFhKd2FYTWcKK1pXZGxkQ0JsYzNRZ1kzVnljM1Z6SUd4aGIzSmxaWFF1SUVGc2FYRjFZVzBnYldGMWNtbHpMaUJRY21GbGMyVnVkQW90ZG05cworZFhSd1lYUXVJRkJ5YjJsdUlHbHVJSEIxY25WekxpQk9kV3hzWVNCMWNtNWhJSE5oY0dsbGJpd2daR0Z3YVdKMWN5QnphWFFnCitZVzFsZEN3S0szWnZiSFYwY0dGMExpQlFjbTlwYmlCcGJpQndkWEoxY3k0Z1RuVnNiR0VnZFhKdVlTQnpZWEJwWlc0c0lHUmgKK2NHa0FkWE1nYzJsMElHRnRaWFFzQ2lCb1pXNWtjbVZ5YVhRZ2JtVmpMQ0IwWlcxd2RYTWdaWFVzSUcxcExpQlZkQ0J3YjNKMAorWVN3Z2JHVnZJR2xrSUhScGJtTnBaSFZ1ZENCMWJHeGhiV052Y25CbGNpd0tMWFpsYkdsMElHWmxiR2x6SUhSeWFYTjBhWEYxCitaU0JoYm5SbExDQmhkQ0JzYjJKdmNuUnBjeUJrYVdGdElIQmxaR1VnZFhRZ1pIVnBMaUJRY205cGJpQmhZd29yZG1Wc2FYUWcKK1ptVnNhWE1nZEhKcGMzUnBjWFZsSUdGdWRHVXNJR0YwSUd4dkFHOXlkR2x6SUdScFlXMGdjR1ZrWlNCMWRDQmtkV2t1SUZCeQorYjJsdUlHRmpDaUJzWldOMGRYTXVJRVJ2Ym1WaklHRjBJRzFoYzNOaElHRmpJR2x3YzNWdElHaGxibVJ5WlhKcGRDQnpiMnhzCithV05wZEhWa2FXNHVJRTVoYlNCa2FXTjBkVzBLSUc1cGMya2djMlZrSUcxcExpQkVkV2x6SUhObFpDQmhiblJsTGlCVmRDQjIKK2FYUmhaU0JsYzNRZ2RYUWdaSFZwSUhWc2RISnBZMmxsY3lCa2FXZHVhWE56YVcwdUNpQUtMVWx1SUhabGJDQnZaR2x2SUdWbgorWlhRZ2JtbHpiQ0JqYjI1MllXeHNhWE1nZG05c2RYUndZWFF1SUUxdmNtSnBJSFpwZEdGbElHNXBZbWd1SUU1MWJHeGhiUW9yCitTVzRnZG1Wc0lHOWthVzhnWldkbGRDQnVhWE5zSUdOdmJuWmhiR3hwY3lCMmIyeDFkSEJoZEM0Z1RXOXlBR2tnZG1sMFlXVWcKK2Jta0FhQzRnVG5Wc2JHRnRDaUJoWTJOMWJYTmhiaXdnWkc5c2IzSWdjWFZwY3lCaGJHbHhkV0Z0SUhOalpXeGxjbWx6Y1hWbAorTENCbGJHbDBJR1Z1YVcwZ1kyOXVaR2x0Wlc1MGRXMEtJRzFoZFhKcGN5d2dibTl1SUhSeWFYTjBhWEYxWlNCdFlYVnlhWE1nCitkSFZ5Y0dseklHVjBJRzFoZFhKcGN5NGdWWFFnYm05dUlHNXBjMnd1SUU1aGJTQmthV0Z0Q2lCdGFTd2djMlZ0Y0dWeUlIQnYKK2MzVmxjbVVzSUdWc1pXbG1aVzVrSUhWMExDQmhkV04wYjNJZ2RtVnNMQ0JsY21GMExpQlRaV1FnY0c5emRXVnlaUXBBUUNBdAorTVRZc055QXJNVFlzTnlCQVFDQnpaV1FnWlhOMExpQkZkR2xoYlNCa2FXRnRJR1psYkdsekxDQm1aWEp0Wlc1MGRXMGdaV2RsCitkQ3dnWVdScGNHbHpZMmx1WnlCaGRDd2djRzl6ZFdWeVpTQnBiaXdLSUdSMWFTNGdSWFJwWVcwZ2JIVmpkSFZ6TGdvZ0NpQk8KK2RXeHNZU0JwWkNCaGRXZDFaUzRnVG1GdElHbGhZM1ZzYVhNZ1lXTmpkVzF6WVc0Z2JtbHphUzRnVTNWemNHVnVaR2x6YzJVZworY0c5MFpXNTBhUzRnVG5WdVl3b3RkbUZ5YVhWeklHRjFaM1ZsSUc1bFl5QnZjbU5wTGlCVmRDQmpiMjVrYVcxbGJuUjFiU0JrCitiMnh2Y2lCellXZHBkSFJwY3lCdWFXSm9MaUJUZFhOd1pXNWthWE56WlFvcmRtRnlhWFZ6SUdGMVozVmxJRzVsWXlCdmNtTnAKK0xpQlZkQ0JqYjI1a2FXMWxiblIxYlNCa2IyeHZjaUJ6WVdkcGRIUnBjeUJ1YVFCb0xpQlRkWE53Wlc1a2FYTnpaUW9nZEdWdAorY0c5eUlHeGxZM1IxY3lCelpXUWdiV0ZuYm1FdUlGTjFjM0JsYm1ScGMzTmxJSEJ2ZEdWdWRHa3VJRTUxYkd4aGJTQjBaVzF3CitiM0lnYVhCemRXMHVJRk5sWkFvZ2JXOXNaWE4wYVdVZ2RHVnNiSFZ6TGlCUWFHRnpaV3hzZFhNZ2JHbG5kV3hoTGlCSmJpQjIKK1pXaHBZM1ZzWVNCMWJIUnlhV05sY3dvZ2JtbHphUzRnVTNWemNHVnVaR2x6YzJVZ1ptVnNhWE1nWVhWbmRXVXNJSEJsYkd4bAorYm5SbGMzRjFaU0JoZEN3Z1pHbGpkSFZ0SUhacGRtVnljbUVzQ2kwdElBb3hMalV1TlM0eExqVTBNQzVuTlRjM09EQUtDZz09CmRpZmYgLS1naXQgYS90L3Q1MTAwL251bC1wbGFpbiBiL3QvdDUxMDAvbnVsLXBsYWluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDA2OTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL251bC1wbGFpbgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwMSBiL3QvdDUxMDAvcGF0Y2gwMDAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzk3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwMQpAQCAtMCwwICsxLDE0IEBACistLS0KKyBmb28gfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDkxMjNjZGMuLjkxOGRjZjggMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEgQEAKKy1GcmkgSnVuICA5IDAwOjQ0OjA0IFBEVCAyMDA2CisrRnJpIEp1biAgOSAwMDo0NDoxMyBQRFQgMjAwNgorLS0gCisxLjQuMC5nNmYyYgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwMiBiL3QvdDUxMDAvcGF0Y2gwMDAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzk3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwMgpAQCAtMCwwICsxLDE0IEBACistLS0KKyBmb28gfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDkxMjNjZGMuLjkxOGRjZjggMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEgQEAKKy1GcmkgSnVuICA5IDAwOjQ0OjA0IFBEVCAyMDA2CisrRnJpIEp1biAgOSAwMDo0NDoxMyBQRFQgMjAwNgorLS0gCisxLjQuMC5nNmYyYgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwMyBiL3QvdDUxMDAvcGF0Y2gwMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzk3NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwMwpAQCAtMCwwICsxLDE0IEBACistLS0KKyBmb28gfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IDkxMjNjZGMuLjkxOGRjZjggMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTEgKzEgQEAKKy1GcmkgSnVuICA5IDAwOjQ0OjA0IFBEVCAyMDA2CisrRnJpIEp1biAgOSAwMDo0NDoxMyBQRFQgMjAwNgorLS0gCisxLjQuMC5nNmYyYgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwNCBiL3QvdDUxMDAvcGF0Y2gwMDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NjQ1OGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwNApAQCAtMCwwICsxLDkzIEBACitkaWZmIC0tZ2l0IGEvY29ubmVjdC5jIGIvY29ubmVjdC5jCistLS0gYS9jb25uZWN0LmMKKysrKyBiL2Nvbm5lY3QuYworQEAgLTk2LDQyICs5Niw1NyBAQCBzdGF0aWMgZW51bSBwcm90b2NvbCBnZXRfcHJvdG9jb2woY29uc3QgCisgCWRpZSgiSSBkb24ndCBoYW5kbGUgcHJvdG9jb2wgJyVzJyIsIG5hbWUpOworIH0KKyAKKy1zdGF0aWMgdm9pZCBsb29rdXBfaG9zdChjb25zdCBjaGFyICpob3N0LCBzdHJ1Y3Qgc29ja2FkZHIgKmluKQorLXsKKy0Jc3RydWN0IGFkZHJpbmZvICpyZXM7CistCWludCByZXQ7CistCistCXJldCA9IGdldGFkZHJpbmZvKGhvc3QsIE5VTEwsIE5VTEwsICZyZXMpOworLQlpZiAocmV0KQorLQkJZGllKCJVbmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiwgaG9zdCwgZ2FpX3N0cmVycm9yKHJldCkpOworLQkqaW4gPSAqcmVzLT5haV9hZGRyOworLQlmcmVlYWRkcmluZm8ocmVzKTsKKy19CisrI2RlZmluZSBTVFJfKHMpCSMgcworKyNkZWZpbmUgU1RSKHMpCVNUUl8ocykKKyAKKyBzdGF0aWMgaW50IGdpdF90Y3BfY29ubmVjdChpbnQgZmRbMl0sIGNvbnN0IGNoYXIgKnByb2csIGNoYXIgKmhvc3QsIGNoYXIgKnBhdGgpCisgeworLQlzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKKy0JaW50IHBvcnQgPSBERUZBVUxUX0dJVF9QT1JULCBzb2NrZmQ7CistCWNoYXIgKmNvbG9uOworLQorLQljb2xvbiA9IHN0cmNocihob3N0LCAnOicpOworLQlpZiAoY29sb24pIHsKKy0JCWNoYXIgKmVuZDsKKy0JCXVuc2lnbmVkIGxvbmcgbiA9IHN0cnRvdWwoY29sb24rMSwgJmVuZCwgMCk7CistCQlpZiAoY29sb25bMV0gJiYgISplbmQpIHsKKy0JCQkqY29sb24gPSAwOworLQkJCXBvcnQgPSBuOworKwlpbnQgc29ja2ZkID0gLTE7CisrCWNoYXIgKmNvbG9uLCAqZW5kOworKwljaGFyICpwb3J0ID0gU1RSKERFRkFVTFRfR0lUX1BPUlQpOworKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaTAsICphaTsKKysJaW50IGdhaTsKKysKKysJaWYgKGhvc3RbMF0gPT0gJ1snKSB7CisrCQllbmQgPSBzdHJjaHIoaG9zdCArIDEsICddJyk7CisrCQlpZiAoZW5kKSB7CisrCQkJKmVuZCA9IDA7CisrCQkJZW5kKys7CisrCQkJaG9zdCsrOworKwkJfSBlbHNlCisrCQkJZW5kID0gaG9zdDsKKysJfSBlbHNlCisrCQllbmQgPSBob3N0OworKwljb2xvbiA9IHN0cmNocihlbmQsICc6Jyk7CisrCisrCWlmIChjb2xvbikKKysJCXBvcnQgPSBjb2xvbiArIDE7CisrCisrCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworKwloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworKwloaW50cy5haV9wcm90b2NvbCA9IElQUFJPVE9fVENQOworKworKwlnYWkgPSBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAmaGludHMsICZhaSk7CisrCWlmIChnYWkpCisrCQlkaWUoIlVuYWJsZSB0byBsb29rIHVwICVzICglcykiLCBob3N0LCBnYWlfc3RyZXJyb3IoZ2FpKSk7CisrCisrCWZvciAoYWkwID0gYWk7IGFpOyBhaSA9IGFpLT5haV9uZXh0KSB7CisrCQlzb2NrZmQgPSBzb2NrZXQoYWktPmFpX2ZhbWlseSwgYWktPmFpX3NvY2t0eXBlLCBhaS0+YWlfcHJvdG9jb2wpOworKwkJaWYgKHNvY2tmZCA8IDApCisrCQkJY29udGludWU7CisrCQlpZiAoY29ubmVjdChzb2NrZmQsIGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgPCAwKSB7CisrCQkJY2xvc2Uoc29ja2ZkKTsKKysJCQlzb2NrZmQgPSAtMTsKKysJCQljb250aW51ZTsKKyAJCX0KKysJCWJyZWFrOworIAl9CisgCistCWxvb2t1cF9ob3N0KGhvc3QsICZhZGRyKTsKKy0JKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYWRkciktPnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisrCWZyZWVhZGRyaW5mbyhhaTApOworIAorLQlzb2NrZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fSVApOworIAlpZiAoc29ja2ZkIDwgMCkKKyAJCWRpZSgidW5hYmxlIHRvIGNyZWF0ZSBzb2NrZXQgKCVzKSIsIHN0cmVycm9yKGVycm5vKSk7CistCWlmIChjb25uZWN0KHNvY2tmZCwgKHZvaWQgKikmYWRkciwgc2l6ZW9mKGFkZHIpKSA8IDApCistCQlkaWUoInVuYWJsZSB0byBjb25uZWN0ICglcykiLCBzdHJlcnJvcihlcnJubykpOworKworIAlmZFswXSA9IHNvY2tmZDsKKyAJZmRbMV0gPSBzb2NrZmQ7CisgCXBhY2tldF93cml0ZShzb2NrZmQsICIlcyAlc1xuIiwgcHJvZywgcGF0aCk7CisKKy0tIAorWU9TSElGVUpJIEhpZGVha2kgQCBVU0FHSSBQcm9qZWN0ICA8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CitHUEctRlAgIDogOTAyMiA2NUVCIDFFQ0YgM0FEMSAwQkRGICA4MEQ4IDQ4MDcgRjg5NCBFMDYyIDBFRUEKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMDUgYi90L3Q1MTAwL3BhdGNoMDAwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjdhMzgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMDUKQEAgLTAsMCArMSw2OSBAQAorLS0tCisKKyBEb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCB8IDkgKysrKysrKystCisgZ2l0LWN2c2ltcG9ydC1zY3JpcHQgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKzUwNDUyZjljMGMyZGYxZjA0ZDgzYTI2MjY2YmE3MDRiMTM4NjE2MzIKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0LWN2c2ltcG9ydC1zY3JpcHQudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LXNjcmlwdC50eHQKK0BAIC0yOSw2ICsyOSwxMCBAQCBPUFRJT05TCisgCWN1cnJlbnRseSwgb25seSB0aGUgOmxvY2FsOiwgOmV4dDogYW5kIDpwc2VydmVyOiBhY2Nlc3MgbWV0aG9kcyAKKyAJYXJlIHN1cHBvcnRlZC4KKyAKKystQyA8dGFyZ2V0LWRpcj46OgorKyAgICAgICAgVGhlIEdJVCByZXBvc2l0b3J5IHRvIGltcG9ydCB0by4gIElmIHRoZSBkaXJlY3RvcnkgZG9lc24ndAorKyAgICAgICAgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC4gIERlZmF1bHQgaXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorKworIC1pOjoKKyAJSW1wb3J0LW9ubHk6IGRvbid0IHBlcmZvcm0gYSBjaGVja291dCBhZnRlciBpbXBvcnRpbmcuICBUaGlzIG9wdGlvbgorIAllbnN1cmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhbmQgY2FjaGUgcmVtYWluIHVudG91Y2hlZCBhbmQgd2lsbAorQEAgLTQ0LDcgKzQ4LDcgQEAgT1BUSU9OUworIAorIC1wIDxvcHRpb25zLWZvci1jdnNwcz46OgorIAlBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGN2c3BzLgorLQlUaGUgb3B0aW9ucyAnLXgnIGFuZCAnLUEnIGFyZSBpbXBsaWNpdCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGhlcmUuCisrCVRoZSBvcHRpb25zICctdScgYW5kICctQScgYXJlIGltcGxpY2l0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaGVyZS4KKyAKKyAJSWYgeW91IG5lZWQgdG8gcGFzcyBtdWx0aXBsZSBvcHRpb25zLCBzZXBhcmF0ZSB0aGVtIHdpdGggYSBjb21tYS4KKyAKK0BAIC01Nyw2ICs2MSw5IEBAIE9QVElPTlMKKyAtaDo6CisgCVByaW50IGEgc2hvcnQgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4KKyAKKysteiA8ZnV6ej46OgorKyAgICAgICAgUGFzcyB0aGUgdGltZXN0YW1wIGZ1enogZmFjdG9yIHRvIGN2c3BzLgorKworIE9VVFBVVAorIC0tLS0tLQorIElmICctdicgaXMgc3BlY2lmaWVkLCB0aGUgc2NyaXB0IHJlcG9ydHMgd2hhdCBpdCBpcyBkb2luZy4KK2RpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LXNjcmlwdCBiL2dpdC1jdnNpbXBvcnQtc2NyaXB0CistLS0gYS9naXQtY3ZzaW1wb3J0LXNjcmlwdAorKysrIGIvZ2l0LWN2c2ltcG9ydC1zY3JpcHQKK0BAIC0xOTAsNyArMTkwLDcgQEAgc3ViIGNvbm4geworIAkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJSb290ICRyZXBvXG4iKTsKKyAKKyAJIyBUcmlhbCBhbmQgZXJyb3Igc2F5cyB0aGF0IHRoaXMgcHJvYmFibHkgaXMgdGhlIG1pbmltdW0gc2V0CistCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIlZhbGlkLXJlc3BvbnNlcyBvayBlcnJvciBWYWxpZC1yZXF1ZXN0cyBNb2RlIE0gTWJpbmFyeSBFIEYgQ2hlY2tlZC1pbiBDcmVhdGVkIFVwZGF0ZWQgTWVyZ2VkIFJlbW92ZWRcbiIpOworKwkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJWYWxpZC1yZXNwb25zZXMgb2sgZXJyb3IgVmFsaWQtcmVxdWVzdHMgTW9kZSBNIE1iaW5hcnkgRSBDaGVja2VkLWluIENyZWF0ZWQgVXBkYXRlZCBNZXJnZWQgUmVtb3ZlZFxuIik7CisgCisgCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoInZhbGlkLXJlcXVlc3RzXG4iKTsKKyAJJHNlbGYtPnsnc29ja2V0byd9LT5mbHVzaCgpOworQEAgLTY5MSw3ICs2OTEsNyBAQCB3aGlsZSg8Q1ZTPikgeworIAkJdW5saW5rKCR0bXBuYW1lKTsKKyAJCW15ICRtb2RlID0gcG1vZGUoJGN2cy0+eydtb2RlJ30pOworIAkJcHVzaChAbmV3LFskbW9kZSwgJHNoYSwgJGZuXSk7ICMgbWF5IGJlIHJlc3VycmVjdGVkIQorLQl9IGVsc2lmKCRzdGF0ZSA9PSA5IGFuZCAvXlxzKyhcUyspOlxkKD86XC5cZCspKy0+KFxkKD86XC5cZCspKylcKERFQURcKVxzKiQvKSB7CisrCX0gZWxzaWYoJHN0YXRlID09IDkgYW5kIC9eXHMrKFxTKyk6XGQrKD86XC5cZCspKy0+KFxkKyg/OlwuXGQrKSspXChERUFEXClccyokLykgeworIAkJbXkgJGZuID0gJDE7CisgCQkkZm4gPX4gcyNeLysjIzsKKyAJCXB1c2goQG9sZCwkZm4pOworCistLSAKK0RhdmlkIEvlZ2VkYWwKKy0KK1RvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBnaXQiIGluCit0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZworTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDA2IGIvdC90NTEwMC9wYXRjaDAwMDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjOTc3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDA2CkBAIC0wLDAgKzEsMTQgQEAKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDA3IGIvdC90NTEwMC9wYXRjaDAwMDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDA3CmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAwOCBiL3QvdDUxMDAvcGF0Y2gwMDA4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAwOApkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMDkgYi90L3Q1MTAwL3BhdGNoMDAwOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTYxNWMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMDkKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK2luZGV4IGI0MjZhMTQuLjk3NzU2ZWMgMTAwNjQ0CistLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK0BAIC04MSw3ICs4MSw3IEBAIFRoZSAiZGlmZiIgZm9ybWF0dGluZyBvcHRpb25zIGNhbiBiZSBjdXN0b21pemVkIHZpYSB0aGUKKyBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR0lUX0RJRkZfT1BUUycuICBGb3IgZXhhbXBsZSwgaWYgeW91CisgcHJlZmVyIGNvbnRleHQgZGlmZjoKKyAKKy0gICAgICBHSVRfRElGRl9PUFRTPS1jIGdpdC1kaWZmLWluZGV4IC1wICQoY2F0IC5naXQvSEVBRCkKKysgICAgICBHSVRfRElGRl9PUFRTPS1jIGdpdC1kaWZmLWluZGV4IC1wIEhFQUQKKyAKKyAKKyAyLiBXaGVuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR0lUX0VYVEVSTkFMX0RJRkYnIGlzIHNldCwgdGhlCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxMCBiL3QvdDUxMDAvcGF0Y2gwMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNjgyMWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxMApAQCAtMCwwICsxLDIwIEBACistLS0KKyBidWlsdGluLW1haWxpbmZvLmMgfCAyICstCisgMSBmaWxlcyBjaGFuZ2VkLCAxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IDk2MmFhMzQuLjJkMTUyMGYgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTMzNCw3ICszMzQsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2hlYWRlcihjaGFyICpsaW5lLCB1bnNpZ25lZCBsaW5lc2l6ZSwgY2hhciAqKmhkcl9kYXRhLCBpbnQgb3ZlcgorIAkJcmV0dXJuIDE7CisgCWlmICghbWVtY21wKCJbUEFUQ0hdIiwgbGluZSwgNykgJiYgaXNzcGFjZShsaW5lWzddKSkgeworIAkJZm9yIChpID0gMDsgaGVhZGVyW2ldOyBpKyspIHsKKy0JCQlpZiAoIW1lbWNtcCgiU3ViamVjdDogIiwgaGVhZGVyW2ldLCA5KSkgeworKwkJCWlmICghbWVtY21wKCJTdWJqZWN0IiwgaGVhZGVyW2ldLCA3KSkgeworIAkJCQlpZiAoISBoYW5kbGVfaGVhZGVyKGxpbmUsIGhkcl9kYXRhW2ldLCAwKSkgeworIAkJCQkJcmV0dXJuIDE7CisgCQkJCX0KKy0tIAorMS41LjYuMi40NTUuZzFlZmIyCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDExIGIvdC90NTEwMC9wYXRjaDAwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk4ODcxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDExCkBAIC0wLDAgKzEsMjIgQEAKKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyAgfCA0ICsrLS0KKworZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYworaW5kZXggM2U1ZmU1MS4uYWFiZmU1YyAxMDA2NDQKKy0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCitAQCAtNzU4LDggKzc1OCw4IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9ib2R5KHZvaWQpCisgCQkvKiBwcm9jZXNzIGFueSBib3VuZGFyeSBsaW5lcyAqLworIAkJaWYgKCpjb250ZW50X3RvcCAmJiBpc19tdWx0aXBhcnRfYm91bmRhcnkoJmxpbmUpKSB7CisgCQkJLyogZmx1c2ggYW55IGxlZnRvdmVyICovCistCQkJaWYgKGxpbmUubGVuKQorLQkJCQloYW5kbGVfZmlsdGVyKCZsaW5lKTsKKysJCQlpZiAocHJldi5sZW4pCisrCQkJCWhhbmRsZV9maWx0ZXIoJnByZXYpOworIAorIAkJCWlmICghaGFuZGxlX2JvdW5kYXJ5KCkpCisgCQkJCWdvdG8gaGFuZGxlX2JvZHlfb3V0OworLS0gCisxLjYuMC5yYzIKKworCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxMiBiL3QvdDUxMDAvcGF0Y2gwMDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YTBiNjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxMgpAQCAtMCwwICsxLDMwIEBACistLS0KKyBob3d0by9idWlsZF9uYXZ5LnR4dCB8ICAgIDYgKysrLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ob3d0by9idWlsZF9uYXZ5LnR4dCBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitpbmRleCAzZmQzYWZiLi4wZWU4MDdlIDEwMDY0NAorLS0tIGEvaG93dG8vYnVpbGRfbmF2eS50eHQKKysrKyBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitAQCAtMTE5LDggKzExOSw4IEBACisgICAgLSBsaWJ4di1kZXYKKyAgICAtIGxpYnVzcGxhc2gtZGV2CisgICAgLSBsYXRleC1tYWtlCistICAgLSB0ZXh0bGl2ZS1sYW5nLWN5cmlsbGljCistICAgLSB0ZXh0bGl2ZS1sYXRleC1leHRyYQorKyAgIC0gdGV4bGl2ZS1sYW5nLWN5cmlsbGljCisrICAgLSB0ZXhsaXZlLWxhdGV4LWV4dHJhCisgICAgLSBkaWEKKyAgICAtIHB5dGhvbi1weXJleAorICAgIC0gbGlidG9vbAorQEAgLTEyOCw3ICsxMjgsNyBAQAorICAgIC0gc294CisgICAgLSBjeXRob24KKyAgICAtIGltYWdlbWFnaWNrCistICAgLSBkb2N1dGlscworKyAgIC0gcHl0aG9uLWRvY3V0aWxzCisgCisgIy4g0L3QsCDQvNCw0YjQuNC90LUgZGluYXI6INC00L7QsdCw0LLQuNGC0Ywg0YHQstC+0Lkg0L7RgtC60YDRi9GC0YvQuSBzc2gt0LrQu9GO0Ycg0LIgYXV0aG9yaXplZF9rZXlzMiDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gZGRldgorICMuINC90LAg0YHQstC+0LXQuSDQvNCw0YjQuNC90LU6INC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCAvZXRjL3N1ZG9lcnMgKNC60L7QvNCw0L3QtNCwIGBgdmlzdWRvYGApINC/0YDQuNC80LXRgNC90L4g0YHQu9C10LTRg9GO0YnQuNC8INC+0LHRgNCw0LfQvtC8OjoKKy0tIAorMS41LjYuNQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9wYXRjaDAwMTItLW1lc3NhZ2UtaWQgYi90L3Q1MTAwL3BhdGNoMDAxMi0tbWVzc2FnZS1pZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmEwYjY4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9wYXRjaDAwMTItLW1lc3NhZ2UtaWQKQEAgLTAsMCArMSwzMCBAQAorLS0tCisgaG93dG8vYnVpbGRfbmF2eS50eHQgfCAgICA2ICsrKy0tLQorIDEgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvaG93dG8vYnVpbGRfbmF2eS50eHQgYi9ob3d0by9idWlsZF9uYXZ5LnR4dAoraW5kZXggM2ZkM2FmYi4uMGVlODA3ZSAxMDA2NDQKKy0tLSBhL2hvd3RvL2J1aWxkX25hdnkudHh0CisrKysgYi9ob3d0by9idWlsZF9uYXZ5LnR4dAorQEAgLTExOSw4ICsxMTksOCBAQAorICAgIC0gbGlieHYtZGV2CisgICAgLSBsaWJ1c3BsYXNoLWRldgorICAgIC0gbGF0ZXgtbWFrZQorLSAgIC0gdGV4dGxpdmUtbGFuZy1jeXJpbGxpYworLSAgIC0gdGV4dGxpdmUtbGF0ZXgtZXh0cmEKKysgICAtIHRleGxpdmUtbGFuZy1jeXJpbGxpYworKyAgIC0gdGV4bGl2ZS1sYXRleC1leHRyYQorICAgIC0gZGlhCisgICAgLSBweXRob24tcHlyZXgKKyAgICAtIGxpYnRvb2wKK0BAIC0xMjgsNyArMTI4LDcgQEAKKyAgICAtIHNveAorICAgIC0gY3l0aG9uCisgICAgLSBpbWFnZW1hZ2ljaworLSAgIC0gZG9jdXRpbHMKKysgICAtIHB5dGhvbi1kb2N1dGlscworIAorICMuINC90LAg0LzQsNGI0LjQvdC1IGRpbmFyOiDQtNC+0LHQsNCy0LjRgtGMINGB0LLQvtC5INC+0YLQutGA0YvRgtGL0Lkgc3NoLdC60LvRjtGHINCyIGF1dGhvcml6ZWRfa2V5czIg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPIGRkZXYKKyAjLiDQvdCwINGB0LLQvtC10Lkg0LzQsNGI0LjQvdC1OiDQvtGC0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0YwgL2V0Yy9zdWRvZXJzICjQutC+0LzQsNC90LTQsCBgYHZpc3Vkb2BgKSDQv9GA0LjQvNC10YDQvdC+INGB0LvQtdC00YPRjtGJ0LjQvCDQvtCx0YDQsNC30L7QvDo6CistLSAKKzEuNS42LjUKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcGF0Y2gwMDEzIGIvdC90NTEwMC9wYXRjaDAwMTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDEzCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNCBiL3QvdDUxMDAvcGF0Y2gwMDE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMzgyNWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxNApAQCAtMCwwICsxLDY0IEBACistLS0KKyBidWlsdGluLW1haWxpbmZvLmMgfCAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgMSBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCBiMGI1ZDhmLi40NjFjNDdlIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC03MTIsNiArNzEyLDM0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhdGNoYnJlYWsoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBpbnQgc2Npc3NvcnMoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyt7CisrCXNpemVfdCBpLCBsZW4gPSBsaW5lLT5sZW47CisrCWludCBzY2lzc29yc19kYXNoZXNfc2VlbiA9IDA7CisrCWNvbnN0IGNoYXIgKmJ1ZiA9IGxpbmUtPmJ1ZjsKKysKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisrCQlpZiAoaXNzcGFjZShidWZbaV0pKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKGJ1ZltpXSA9PSAnLScpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMjsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmIChpICsgMSA8IGxlbiAmJiAhbWVtY21wKGJ1ZiArIGksICI+OCIsIDIpKSB7CisrCQkJc2Npc3NvcnNfZGFzaGVzX3NlZW4gfD0gMDE7CisrCQkJaSsrOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyA3IDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgImN1dCBoZXJlIiwgOCkpIHsKKysJCQlpICs9IDc7CisrCQkJY29udGludWU7CisrCQl9CisrCQkvKiBldmVyeXRoaW5nIGVsc2UgLS0tIG5vdCBzY2lzc29ycyAqLworKwkJYnJlYWs7CisrCX0KKysJcmV0dXJuIHNjaXNzb3JzX2Rhc2hlc19zZWVuID09IDAzOworK30KKysKKyBzdGF0aWMgaW50IGhhbmRsZV9jb21taXRfbXNnKHN0cnVjdCBzdHJidWYgKmxpbmUpCisgeworIAlzdGF0aWMgaW50IHN0aWxsX2xvb2tpbmcgPSAxOworQEAgLTcyMywxMCArNzUxLDE3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJCXN0cmJ1Zl9sdHJpbShsaW5lKTsKKyAJCWlmICghbGluZS0+bGVuKQorIAkJCXJldHVybiAwOworLQkJaWYgKChzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApKSAhPSAwKQorKwkJc3RpbGxfbG9va2luZyA9IGNoZWNrX2hlYWRlcihsaW5lLCBzX2hkcl9kYXRhLCAwKTsKKysJCWlmIChzdGlsbF9sb29raW5nKQorIAkJCXJldHVybiAwOworIAl9CisgCisrCWlmIChzY2lzc29ycyhsaW5lKSkgeworKwkJZnNlZWsoY21pdG1zZywgMEwsIFNFRUtfU0VUKTsKKysJCXN0aWxsX2xvb2tpbmcgPSAxOworKwkJcmV0dXJuIDA7CisrCX0KKysKKyAJLyogbm9ybWFsaXplIHRoZSBsb2cgbWVzc2FnZSB0byBVVEYtOC4gKi8KKyAJaWYgKG1ldGFpbmZvX2NoYXJzZXQpCisgCQljb252ZXJ0X3RvX3V0ZjgobGluZSwgY2hhcnNldC5idWYpOworLS0gCisxLjYuNC4xCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNC0tc2Npc3NvcnMgYi90L3Q1MTAwL3BhdGNoMDAxNC0tc2Npc3NvcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzODI1ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE0LS1zY2lzc29ycwpAQCAtMCwwICsxLDY0IEBACistLS0KKyBidWlsdGluLW1haWxpbmZvLmMgfCAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCisgMSBmaWxlcyBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCBiMGI1ZDhmLi40NjFjNDdlIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC03MTIsNiArNzEyLDM0IEBAIHN0YXRpYyBpbmxpbmUgaW50IHBhdGNoYnJlYWsoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJcmV0dXJuIDA7CisgfQorIAorK3N0YXRpYyBpbnQgc2Npc3NvcnMoY29uc3Qgc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyt7CisrCXNpemVfdCBpLCBsZW4gPSBsaW5lLT5sZW47CisrCWludCBzY2lzc29yc19kYXNoZXNfc2VlbiA9IDA7CisrCWNvbnN0IGNoYXIgKmJ1ZiA9IGxpbmUtPmJ1ZjsKKysKKysJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisrCQlpZiAoaXNzcGFjZShidWZbaV0pKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKGJ1ZltpXSA9PSAnLScpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMjsKKysJCQljb250aW51ZTsKKysJCX0KKysJCWlmIChpICsgMSA8IGxlbiAmJiAhbWVtY21wKGJ1ZiArIGksICI+OCIsIDIpKSB7CisrCQkJc2Npc3NvcnNfZGFzaGVzX3NlZW4gfD0gMDE7CisrCQkJaSsrOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyA3IDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgImN1dCBoZXJlIiwgOCkpIHsKKysJCQlpICs9IDc7CisrCQkJY29udGludWU7CisrCQl9CisrCQkvKiBldmVyeXRoaW5nIGVsc2UgLS0tIG5vdCBzY2lzc29ycyAqLworKwkJYnJlYWs7CisrCX0KKysJcmV0dXJuIHNjaXNzb3JzX2Rhc2hlc19zZWVuID09IDAzOworK30KKysKKyBzdGF0aWMgaW50IGhhbmRsZV9jb21taXRfbXNnKHN0cnVjdCBzdHJidWYgKmxpbmUpCisgeworIAlzdGF0aWMgaW50IHN0aWxsX2xvb2tpbmcgPSAxOworQEAgLTcyMywxMCArNzUxLDE3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyAJCXN0cmJ1Zl9sdHJpbShsaW5lKTsKKyAJCWlmICghbGluZS0+bGVuKQorIAkJCXJldHVybiAwOworLQkJaWYgKChzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApKSAhPSAwKQorKwkJc3RpbGxfbG9va2luZyA9IGNoZWNrX2hlYWRlcihsaW5lLCBzX2hkcl9kYXRhLCAwKTsKKysJCWlmIChzdGlsbF9sb29raW5nKQorIAkJCXJldHVybiAwOworIAl9CisgCisrCWlmIChzY2lzc29ycyhsaW5lKSkgeworKwkJZnNlZWsoY21pdG1zZywgMEwsIFNFRUtfU0VUKTsKKysJCXN0aWxsX2xvb2tpbmcgPSAxOworKwkJcmV0dXJuIDA7CisrCX0KKysKKyAJLyogbm9ybWFsaXplIHRoZSBsb2cgbWVzc2FnZSB0byBVVEYtOC4gKi8KKyAJaWYgKG1ldGFpbmZvX2NoYXJzZXQpCisgCQljb252ZXJ0X3RvX3V0ZjgobGluZSwgY2hhcnNldC5idWYpOworLS0gCisxLjYuNC4xCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNSBiL3QvdDUxMDAvcGF0Y2gwMDE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjQ4NDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxNQpAQCAtMCwwICsxLDggQEAKKy0tLQorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNS0tbm8taW5ib2R5LWhlYWRlcnMgYi90L3Q1MTAwL3BhdGNoMDAxNS0tbm8taW5ib2R5LWhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2NDg0OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE1LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDggQEAKKy0tLQorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNiBiL3QvdDUxMDAvcGF0Y2gwMDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjQ4NDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxNgpAQCAtMCwwICsxLDggQEAKKy0tLQorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNi0tbm8taW5ib2R5LWhlYWRlcnMgYi90L3Q1MTAwL3BhdGNoMDAxNi0tbm8taW5ib2R5LWhlYWRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2NDg0OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcGF0Y2gwMDE2LS1uby1pbmJvZHktaGVhZGVycwpAQCAtMCwwICsxLDggQEAKKy0tLQorZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggZTY5ZGUyOS4uZDk1ZjNhZCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMCwwICsxIEBACisrY29udGVudAorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3BhdGNoMDAxNyBiL3QvdDUxMDAvcGF0Y2gwMDE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1Y2Y4NGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3BhdGNoMDAxNwpAQCAtMCwwICsxLDYgQEAKK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK05ldyBjb250ZW50CmRpZmYgLS1naXQgYS90L3Q1MTAwL3F1b3RlZC1mcm9tLmV4cGVjdCBiL3QvdDUxMDAvcXVvdGVkLWZyb20uZXhwZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjOWQ0OGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3F1b3RlZC1mcm9tLmV4cGVjdApAQCAtMCwwICsxLDMgQEAKKz5Gcm9tIHRoZSBkZXB0aHMgb2YgaGlzdG9yeSwgd2UgYXJlIHN0dWNrIHdpdGggdGhlCitmbGFreSBtYm94IGZvcm1hdC4KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9xdW90ZWQtZnJvbS5pbiBiL3QvdDUxMDAvcXVvdGVkLWZyb20uaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ3ZTFjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcXVvdGVkLWZyb20uaW4KQEAgLTAsMCArMSwxMCBAQAorRnJvbSAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQXV0aG9yIE5hbWUgPHNvbWVib2R5QGV4YW1wbGUuY29tPgorRGF0ZTogU3VuLCAyNSBNYXkgMjAwOCAwMDozODoxOCAtMDcwMAorU3ViamVjdDogW1BBVENIXSB0ZXN0aW5nIHF1b3RlZCA+RnJvbQorCis+RnJvbSB0aGUgZGVwdGhzIG9mIGhpc3RvcnksIHdlIGFyZSBzdHVjayB3aXRoIHRoZQorZmxha3kgbWJveCBmb3JtYXQuCisKKy0tLQorcGF0Y2gKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDEgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMzgzYjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAxCkBAIC0wLDAgKzEsNCBAQAorQXV0aG9yOiBLZWl0aCBNb29yZQorRW1haWw6IG1vb3JlQGNzLnV0ay5lZHUKK1N1YmplY3Q6IElmIHlvdSBjYW4gcmVhZCB0aGlzIHlvdSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDAyIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODFiZTc1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMgpAQCAtMCwwICsxLDQgQEAKK0F1dGhvcjogT2xsZSBKw6RybmVmb3JzCitFbWFpbDogb2phcm5lZkBhZG1pbi5rdGguc2UKK1N1YmplY3Q6IFRpbWUgZm9yIElTTyAxMDY0Nj8KKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwMyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBmNzg5MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDMKQEAgLTAsMCArMSw0IEBACitBdXRob3I6IFBhdHJpayBGw6RsdHN0csO2bQorRW1haWw6IHBhZkBuYWRhLmt0aC5zZQorU3ViamVjdDogUkZDLUhEUiBjYXJlIGFuZCBmZWVkaW5nCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDQgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2N2E5MGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA0CkBAIC0wLDAgKzEsNCBAQAorQXV0aG9yOiBOYXRoYW5pZWwgQm9yZW5zdGVpbiAo153Xldec16kg15/XkSDXmdec15jXpNegKQorRW1haWw6IG5zYkB0aHVtcGVyLmJlbGxjb3JlLmNvbQorU3ViamVjdDogVGVzdCBvZiBuZXcgaGVhZGVyIGdlbmVyYXRvcgorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA1IGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjdiZTNiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNQpAQCAtMCwwICsxLDIgQEAKK1N1YmplY3Q6IChhKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA2IGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFkNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwNgpAQCAtMCwwICsxLDIgQEAKK1N1YmplY3Q6IChhIGIpCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDcgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NGYxOTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA3CkBAIC0wLDAgKzEsMiBAQAorU3ViamVjdDogKGFiKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDA4IGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRmMTk1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwOApAQCAtMCwwICsxLDIgQEAKK1N1YmplY3Q6IChhYikKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAwOSBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0ZjE5NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMDkKQEAgLTAsMCArMSwyIEBACitTdWJqZWN0OiAoYWIpCisKZGlmZiAtLWdpdCBhL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMTAgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDEwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYWQ0NzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MTAwL3JmYzIwNDctaW5mby0wMDEwCkBAIC0wLDAgKzEsMiBAQAorU3ViamVjdDogKGEgYikKKwpkaWZmIC0tZ2l0IGEvdC90NTEwMC9yZmMyMDQ3LWluZm8tMDAxMSBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRhZDQ3NAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvcmZjMjA0Ny1pbmZvLTAwMTEKQEAgLTAsMCArMSwyIEBACitTdWJqZWN0OiAoYSBiKQorCmRpZmYgLS1naXQgYS90L3Q1MTAwL3JmYzIwNDctc2FtcGxlcy5tYm94IGIvdC90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmMyMjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTEwMC9yZmMyMDQ3LXNhbXBsZXMubWJveApAQCAtMCwwICsxLDQ4IEBACitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/VVMtQVNDSUk/UT9LZWl0aF9Nb29yZT89IDxtb29yZUBjcy51dGsuZWR1PgorVG86ID0/SVNPODg1OS0xP1E/S2VsZF9KPUY4cm5fU2ltb25zZW4/PSA8a2VsZEBka3V1Zy5kaz4KK0NDOiA9P0lTTzg4NTktMT9RP0FuZHI9RTk/PSBQaXJhcmQgPFBJUkFSREB2bTEudWxnLmFjLmJlPgorU3ViamVjdDogPT9JU084ODU5LTE/Qj9TV1lnZVc5MUlHTmhiaUJ5WldGa0lIUm9hWE1nZVc4PT89CisgPT9JU084ODU5LTI/Qj9kU0IxYm1SbGNuTjBZVzVrSUhSb1pTQmxlR0Z0Y0d4bExnPT0/PQorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206ID0/SVNPODg1OS0xP1E/T2xsZV9KPUU0cm5lZm9ycz89IDxvamFybmVmQGFkbWluLmt0aC5zZT4KK1RvOiBpZXRmLTgyMkBkaW1hY3MucnV0Z2Vycy5lZHUsIG9qYXJuZWZAYWRtaW4ua3RoLnNlCitTdWJqZWN0OiBUaW1lIGZvciBJU08gMTA2NDY/CisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorVG86IERhdmUgQ3JvY2tlciA8ZGNyb2NrZXJAbW9yZG9yLnN0YW5mb3JkLmVkdT4KK0NjOiBpZXRmLTgyMkBkaW1hY3MucnV0Z2Vycy5lZHUsIHBhZkBjb21zb2wuc2UKK0Zyb206ID0/SVNPODg1OS0xP1E/UGF0cmlrX0Y9RTRsdHN0cj1GNm0/PSA8cGFmQG5hZGEua3RoLnNlPgorU3ViamVjdDogUmU6IFJGQy1IRFIgY2FyZSBhbmQgZmVlZGluZworCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IE5hdGhhbmllbCBCb3JlbnN0ZWluIDxuc2JAdGh1bXBlci5iZWxsY29yZS5jb20+CisgICAgICAoPT9JU084ODU5LTg/Yj83ZVhzK1NEdjRTRHA3T2owOEE9PT89KQorVG86IEdyZWcgVmF1ZHJldWlsIDxndmF1ZHJlQE5SSS5SZXN0b24uVkEuVVM+LCBOZWQgRnJlZWQKKyAgIDxuZWRAaW5ub3NvZnQuY29tPiwgS2VpdGggTW9vcmUgPG1vb3JlQGNzLnV0ay5lZHU+CitTdWJqZWN0OiBUZXN0IG9mIG5ldyBoZWFkZXIgZ2VuZXJhdG9yCitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMQorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK1N1YmplY3Q6ICg9P0lTTzg4NTktMT9RP2E/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gYikKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gPT9JU084ODU5LTE/UT9iPz0pCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorU3ViamVjdDogKD0/SVNPODg1OS0xP1E/YT89ICA9P0lTTzg4NTktMT9RP2I/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0KKyAgICA9P0lTTzg4NTktMT9RP2I/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hX2I/PSkKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitTdWJqZWN0OiAoPT9JU084ODU5LTE/UT9hPz0gPT9JU084ODU5LTI/UT9fYj89KQpkaWZmIC0tZ2l0IGEvdC90NTEwMC9zYW1wbGUubWJveCBiL3QvdDUxMDAvc2FtcGxlLm1ib3gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyYWUwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUxMDAvc2FtcGxlLm1ib3gKQEAgLTAsMCArMSw3MDEgQEAKKyAgICAKKwkKKyAgICAKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSAoenp6KQorICAgICAgVQorICAgICAgVGhvcgorICAgICAgPGEudS50aG9yQGV4YW1wbGUuY29tPiAoQ29tbWVudCkKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBhIGNvbW1pdC4KKworSGVyZSBpcyBhIHBhdGNoIGZyb20gQSBVIFRob3IuCisKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGFub3RoZXIgcGF0Y2gKKworSGVyZSBpcyBhIHBhdGNoIGZyb20gQSBVIFRob3IuICBUaGlzIGFkZHJlc3NlcyB0aGUgaXNzdWUgcmFpc2VkIGluIHRoZQorbWVzc2FnZToKKworRnJvbTogTml0IFBpY2tlciA8bml0LnBpY2tlckBleGFtcGxlLm5ldD4KK1N1YmplY3Q6IGZvbyBpcyB0b28gb2xkCitNZXNzYWdlLUlkOiA8bml0cGlja2VyLjEyMTIxMjEyQGV4YW1wbGUubmV0PgorCitIb3BlZnVsbHkgdGhpcyB3b3VsZCBmaXggdGhlIHByb2JsZW0gc3RhdGVkIHRoZXJlLgorCisKK0kgaGF2ZSBpbmNsdWRlZCBhbiBleHRyYSBibGFuayBsaW5lIGFib3ZlLCBidXQgaXQgZG9lcyBub3QgaGF2ZSB0byBiZQorc3RyaXBwZWQgYXdheSBoZXJlLCBhbG9uZyB3aXRoIHRoZSAgICAgICAgICAgICAgIAkJICAgCit3aGl0ZXNwYWNlcyBhdCB0aGUgZW5kIG9mIHRoZSBhYm92ZSBsaW5lLiAgVGhleSBhcmUgZXhwZWN0ZWQgdG8gYmUgc3F1YXNoZWQKK3doZW4gdGhlIG1lc3NhZ2UgaXMgbWFkZSBpbnRvIGEgY29tbWl0IGxvZyBieSBzdHJpcHNwYWNlLAorQWxzbywgdGhlcmUgYXJlIHRocmVlIGJsYW5rIGxpbmVzIGFmdGVyIHRoaXMgcGFyYWdyYXBoLAordHdvIHRydWx5IGJsYW5rIGFuZCBhbm90aGVyIGZ1bGwgb2Ygc3BhY2VzIGluIGJldHdlZW4uCisKKyAgICAgICAgICAgIAorCitIb3BlIHRoaXMgaGVscHMuCisKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGp1bmlvQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IHJlOiBbUEFUQ0hdIGFub3RoZXIgcGF0Y2gKKworRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIXSB0aGlyZCBwYXRjaAorCitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4gIFRoaXMgYWRkcmVzc2VzIHRoZSBpc3N1ZSByYWlzZWQgaW4gdGhlCittZXNzYWdlOgorCitGcm9tOiBOaXQgUGlja2VyIDxuaXQucGlja2VyQGV4YW1wbGUubmV0PgorU3ViamVjdDogZm9vIGlzIHRvbyBvbGQKK01lc3NhZ2UtSWQ6IDxuaXRwaWNrZXIuMTIxMjEyMTJAZXhhbXBsZS5uZXQ+CisKK0hvcGVmdWxseSB0aGlzIHdvdWxkIGZpeCB0aGUgcHJvYmxlbSBzdGF0ZWQgdGhlcmUuCisKKy0tLQorIGZvbyB8IDIgKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKKworZGlmZiAtLWdpdCBhL2ZvbyBiL2ZvbworaW5kZXggOTEyM2NkYy4uOTE4ZGNmOCAxMDA2NDQKKy0tLSBhL2ZvbworKysrIGIvZm9vCitAQCAtMSArMSBAQAorLUZyaSBKdW4gIDkgMDA6NDQ6MDQgUERUIDIwMDYKKytGcmkgSnVuICA5IDAwOjQ0OjEzIFBEVCAyMDA2CistLSAKKzEuNC4wLmc2ZjJiCisKK0Zyb20gbm9ib2R5IFNhdCBBdWcgMjcgMjM6MDc6NDkgMjAwNQorUGF0aDogbmV3cy5nbWFuZS5vcmchbm90LWZvci1tYWlsCitNZXNzYWdlLUlEOiA8MjAwNTA3MjEuMDkxMDM2LjAxMTE5NTE2Lnlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorRnJvbTogWU9TSElGVUpJIEhpZGVha2kgLyA9P0lTTy0yMDIyLUpQP0I/R3lSQ05VaEdJekZSVEVBYktFST0/PSAKKwk8eW9zaGZ1amlAbGludXgtaXB2Ni5vcmc+CitOZXdzZ3JvdXBzOiBnbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQKK1N1YmplY3Q6IFtQQVRDSCAxLzJdIEdJVDogVHJ5IGFsbCBhZGRyZXNzZXMgZm9yIGdpdmVuIHJlbW90ZSBuYW1lCitEYXRlOiBUaHUsIDIxIEp1bCAyMDA1IDA5OjEwOjM2IC0wNDAwIChFRFQpCitMaW5lczogOTkKK09yZ2FuaXphdGlvbjogVVNBR0kvV0lERSBQcm9qZWN0CitBcHByb3ZlZDogbmV3c0BnbWFuZS5vcmcKK05OVFAtUG9zdGluZy1Ib3N0OiBtYWluLmdtYW5lLm9yZworTWltZS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogVGV4dC9QbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorWC1UcmFjZTogc2VhLmdtYW5lLm9yZyAxMTIxOTUxNDM0IDI5MzUwIDgwLjkxLjIyOS4yICgyMSBKdWwgMjAwNSAxMzoxMDozNCBHTVQpCitYLUNvbXBsYWludHMtVG86IHVzZW5ldEBzZWEuZ21hbmUub3JnCitOTlRQLVBvc3RpbmctRGF0ZTogVGh1LCAyMSBKdWwgMjAwNSAxMzoxMDozNCArMDAwMCAoVVRDKQorCitIZWxsby4KKworVHJ5IGFsbCBhZGRyZXNzZXMgZm9yIGdpdmVuIHJlbW90ZSBuYW1lIHVudGlsIGl0IHN1Y2NlZWRzLgorQWxzbyBzdXBwb3J0cyBJUHY2LgorCitTaWduZWQtb2YtYnk6IEhpZGVha2kgWU9TSElGVUpJIDx5b3NoZnVqaUBsaW51eC1pcHY2Lm9yZz4KKworZGlmZiAtLWdpdCBhL2Nvbm5lY3QuYyBiL2Nvbm5lY3QuYworLS0tIGEvY29ubmVjdC5jCisrKysgYi9jb25uZWN0LmMKK0BAIC05Niw0MiArOTYsNTcgQEAgc3RhdGljIGVudW0gcHJvdG9jb2wgZ2V0X3Byb3RvY29sKGNvbnN0IAorIAlkaWUoIkkgZG9uJ3QgaGFuZGxlIHByb3RvY29sICclcyciLCBuYW1lKTsKKyB9CisgCistc3RhdGljIHZvaWQgbG9va3VwX2hvc3QoY29uc3QgY2hhciAqaG9zdCwgc3RydWN0IHNvY2thZGRyICppbikKKy17CistCXN0cnVjdCBhZGRyaW5mbyAqcmVzOworLQlpbnQgcmV0OworLQorLQlyZXQgPSBnZXRhZGRyaW5mbyhob3N0LCBOVUxMLCBOVUxMLCAmcmVzKTsKKy0JaWYgKHJldCkKKy0JCWRpZSgiVW5hYmxlIHRvIGxvb2sgdXAgJXMgKCVzKSIsIGhvc3QsIGdhaV9zdHJlcnJvcihyZXQpKTsKKy0JKmluID0gKnJlcy0+YWlfYWRkcjsKKy0JZnJlZWFkZHJpbmZvKHJlcyk7CistfQorKyNkZWZpbmUgU1RSXyhzKQkjIHMKKysjZGVmaW5lIFNUUihzKQlTVFJfKHMpCisgCisgc3RhdGljIGludCBnaXRfdGNwX2Nvbm5lY3QoaW50IGZkWzJdLCBjb25zdCBjaGFyICpwcm9nLCBjaGFyICpob3N0LCBjaGFyICpwYXRoKQorIHsKKy0Jc3RydWN0IHNvY2thZGRyIGFkZHI7CistCWludCBwb3J0ID0gREVGQVVMVF9HSVRfUE9SVCwgc29ja2ZkOworLQljaGFyICpjb2xvbjsKKy0KKy0JY29sb24gPSBzdHJjaHIoaG9zdCwgJzonKTsKKy0JaWYgKGNvbG9uKSB7CistCQljaGFyICplbmQ7CistCQl1bnNpZ25lZCBsb25nIG4gPSBzdHJ0b3VsKGNvbG9uKzEsICZlbmQsIDApOworLQkJaWYgKGNvbG9uWzFdICYmICEqZW5kKSB7CistCQkJKmNvbG9uID0gMDsKKy0JCQlwb3J0ID0gbjsKKysJaW50IHNvY2tmZCA9IC0xOworKwljaGFyICpjb2xvbiwgKmVuZDsKKysJY2hhciAqcG9ydCA9IFNUUihERUZBVUxUX0dJVF9QT1JUKTsKKysJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWkwLCAqYWk7CisrCWludCBnYWk7CisrCisrCWlmIChob3N0WzBdID09ICdbJykgeworKwkJZW5kID0gc3RyY2hyKGhvc3QgKyAxLCAnXScpOworKwkJaWYgKGVuZCkgeworKwkJCSplbmQgPSAwOworKwkJCWVuZCsrOworKwkJCWhvc3QrKzsKKysJCX0gZWxzZQorKwkJCWVuZCA9IGhvc3Q7CisrCX0gZWxzZQorKwkJZW5kID0gaG9zdDsKKysJY29sb24gPSBzdHJjaHIoZW5kLCAnOicpOworKworKwlpZiAoY29sb24pCisrCQlwb3J0ID0gY29sb24gKyAxOworKworKwltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKysJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKysJaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKKysKKysJZ2FpID0gZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgJmhpbnRzLCAmYWkpOworKwlpZiAoZ2FpKQorKwkJZGllKCJVbmFibGUgdG8gbG9vayB1cCAlcyAoJXMpIiwgaG9zdCwgZ2FpX3N0cmVycm9yKGdhaSkpOworKworKwlmb3IgKGFpMCA9IGFpOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCkgeworKwkJc29ja2ZkID0gc29ja2V0KGFpLT5haV9mYW1pbHksIGFpLT5haV9zb2NrdHlwZSwgYWktPmFpX3Byb3RvY29sKTsKKysJCWlmIChzb2NrZmQgPCAwKQorKwkJCWNvbnRpbnVlOworKwkJaWYgKGNvbm5lY3Qoc29ja2ZkLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pIDwgMCkgeworKwkJCWNsb3NlKHNvY2tmZCk7CisrCQkJc29ja2ZkID0gLTE7CisrCQkJY29udGludWU7CisgCQl9CisrCQlicmVhazsKKyAJfQorIAorLQlsb29rdXBfaG9zdChob3N0LCAmYWRkcik7CistCSgoc3RydWN0IHNvY2thZGRyX2luICopJmFkZHIpLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworKwlmcmVlYWRkcmluZm8oYWkwKTsKKyAKKy0Jc29ja2ZkID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX0lQKTsKKyAJaWYgKHNvY2tmZCA8IDApCisgCQlkaWUoInVuYWJsZSB0byBjcmVhdGUgc29ja2V0ICglcykiLCBzdHJlcnJvcihlcnJubykpOworLQlpZiAoY29ubmVjdChzb2NrZmQsICh2b2lkICopJmFkZHIsIHNpemVvZihhZGRyKSkgPCAwKQorLQkJZGllKCJ1bmFibGUgdG8gY29ubmVjdCAoJXMpIiwgc3RyZXJyb3IoZXJybm8pKTsKKysKKyAJZmRbMF0gPSBzb2NrZmQ7CisgCWZkWzFdID0gc29ja2ZkOworIAlwYWNrZXRfd3JpdGUoc29ja2ZkLCAiJXMgJXNcbiIsIHByb2csIHBhdGgpOworCistLSAKK1lPU0hJRlVKSSBIaWRlYWtpIEAgVVNBR0kgUHJvamVjdCAgPHlvc2hmdWppQGxpbnV4LWlwdjYub3JnPgorR1BHLUZQICA6IDkwMjIgNjVFQiAxRUNGIDNBRDEgMEJERiAgODBEOCA0ODA3IEY4OTQgRTA2MiAwRUVBCisKK0Zyb20gbm9ib2R5IFNhdCBBdWcgMjcgMjM6MDc6NDkgMjAwNQorUGF0aDogbmV3cy5nbWFuZS5vcmchbm90LWZvci1tYWlsCitNZXNzYWdlLUlEOiA8dTV0YWNqamRweHEuZnNmQGx5c2F0b3IubGl1LnNlPgorRnJvbTogPT9JU084ODU5LTE/UT9EYXZpZF9LPUU1Z2VkYWw/PSA8ZGF2aWRrQGx5c2F0b3IubGl1LnNlPgorTmV3c2dyb3VwczogZ21hbmUuY29tcC52ZXJzaW9uLWNvbnRyb2wuZ2l0CitTdWJqZWN0OiBbUEFUQ0hdIEZpeGVkIHR3byBidWdzIGluIGdpdC1jdnNpbXBvcnQtc2NyaXB0LgorRGF0ZTogTW9uLCAxNSBBdWcgMjAwNSAyMDoxODoyNSArMDIwMAorTGluZXM6IDgzCitBcHByb3ZlZDogbmV3c0BnbWFuZS5vcmcKK05OVFAtUG9zdGluZy1Ib3N0OiBtYWluLmdtYW5lLm9yZworTWltZS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1JU084ODU5LTEKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IFFVT1RFRC1QUklOVEFCTEUKK1gtVHJhY2U6IHNlYS5nbWFuZS5vcmcgMTEyNDEzMDI0NyAzMTgzOSA4MC45MS4yMjkuMiAoMTUgQXVnIDIwMDUgMTg6MjQ6MDcgR01UKQorWC1Db21wbGFpbnRzLVRvOiB1c2VuZXRAc2VhLmdtYW5lLm9yZworTk5UUC1Qb3N0aW5nLURhdGU6IE1vbiwgMTUgQXVnIDIwMDUgMTg6MjQ6MDcgKzAwMDAgKFVUQykKK0NjOiAiSnVuaW8gQy4gSGFtYW5vIiA8anVua2lvQGNveC5uZXQ+CitPcmlnaW5hbC1YLUZyb206IGdpdC1vd25lckB2Z2VyLmtlcm5lbC5vcmcgTW9uIEF1ZyAxNSAyMDoyNDowNSAyMDA1CisKK1RoZSBnaXQtY3ZzaW1wb3J0LXNjcmlwdCBoYWQgYSBjb3B1bGUgb2Ygc21hbGwgYnVncyB0aGF0IHByZXZlbnRlZCBtZQorZnJvbSBpbXBvcnRpbmcgYSBiaWcgQ1ZTIHJlcG9zaXRvcnkuCisKK1RoZSBmaXJzdCB3YXMgdGhhdCBpdCBkaWRuJ3QgaGFuZGxlIHJlbW92ZWQgZmlsZXMgd2l0aCBhIG11bHRpLWRpZ2l0CitwcmltYXJ5IHJldmlzaW9uIG51bWJlci4KKworVGhlIHNlY29uZCB3YXMgdGhhdCBpdCB3YXMgYXNraW5nIHRoZSBDVlMgc2VydmVyIGZvciAiRiIgbWVzc2FnZXMsCithbHRob3VnaCB0aGV5IHdlcmUgbm90IGhhbmRsZWQuCisKK0kgYWxzbyB1cGRhdGVkIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGF0IHNjcmlwdCB0byBjb3JyZXNwb25kIHRvCithY3R1YWwgZmxhZ3MuCisKK1NpZ25lZC1vZmYtYnk6IERhdmlkIEs9RTVnZWRhbCA8ZGF2aWRrQGx5c2F0b3IubGl1LnNlPgorLS0tCisKKyBEb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCB8IDkgKysrKysrKystCisgZ2l0LWN2c2ltcG9ydC1zY3JpcHQgICAgICAgICAgICAgICAgICAgfCA0ICsrLS0KKyAyIGZpbGVzIGNoYW5nZWQsIDEwIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKKzUwNDUyZjljMGMyZGYxZjA0ZDgzYTI2MjY2YmE3MDRiMTM4NjE2MzIKK2RpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dCBiL0RvY3VtZW50YXRpb24vZ2l0PQorLWN2c2ltcG9ydC1zY3JpcHQudHh0CistLS0gYS9Eb2N1bWVudGF0aW9uL2dpdC1jdnNpbXBvcnQtc2NyaXB0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9naXQtY3ZzaW1wb3J0LXNjcmlwdC50eHQKK0BAIC0yOSw2ICsyOSwxMCBAQCBPUFRJT05TCisgCWN1cnJlbnRseSwgb25seSB0aGUgOmxvY2FsOiwgOmV4dDogYW5kIDpwc2VydmVyOiBhY2Nlc3MgbWV0aG9kcz0yMAorIAlhcmUgc3VwcG9ydGVkLgorPTIwCisrLUMgPHRhcmdldC1kaXI+OjoKKysgICAgICAgIFRoZSBHSVQgcmVwb3NpdG9yeSB0byBpbXBvcnQgdG8uICBJZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QKKysgICAgICAgIGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuICBEZWZhdWx0IGlzIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKysKKyAtaTo6CisgCUltcG9ydC1vbmx5OiBkb24ndCBwZXJmb3JtIGEgY2hlY2tvdXQgYWZ0ZXIgaW1wb3J0aW5nLiAgVGhpcyBvcHRpb24KKyAJZW5zdXJlcyB0aGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIGNhY2hlIHJlbWFpbiB1bnRvdWNoZWQgYW5kIHdpbGwKK0BAIC00NCw3ICs0OCw3IEBAIE9QVElPTlMKKz0yMAorIC1wIDxvcHRpb25zLWZvci1jdnNwcz46OgorIAlBZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGN2c3BzLgorLQlUaGUgb3B0aW9ucyAnLXgnIGFuZCAnLUEnIGFyZSBpbXBsaWNpdCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGhlcmUuCisrCVRoZSBvcHRpb25zICctdScgYW5kICctQScgYXJlIGltcGxpY2l0IGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaGVyZS4KKz0yMAorIAlJZiB5b3UgbmVlZCB0byBwYXNzIG11bHRpcGxlIG9wdGlvbnMsIHNlcGFyYXRlIHRoZW0gd2l0aCBhIGNvbW1hLgorPTIwCitAQCAtNTcsNiArNjEsOSBAQCBPUFRJT05TCisgLWg6OgorIAlQcmludCBhIHNob3J0IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQuCis9MjAKKysteiA8ZnV6ej46OgorKyAgICAgICAgUGFzcyB0aGUgdGltZXN0YW1wIGZ1enogZmFjdG9yIHRvIGN2c3BzLgorKworIE9VVFBVVAorIC0tLS0tLQorIElmICctdicgaXMgc3BlY2lmaWVkLCB0aGUgc2NyaXB0IHJlcG9ydHMgd2hhdCBpdCBpcyBkb2luZy4KK2RpZmYgLS1naXQgYS9naXQtY3ZzaW1wb3J0LXNjcmlwdCBiL2dpdC1jdnNpbXBvcnQtc2NyaXB0CistLS0gYS9naXQtY3ZzaW1wb3J0LXNjcmlwdAorKysrIGIvZ2l0LWN2c2ltcG9ydC1zY3JpcHQKK0BAIC0xOTAsNyArMTkwLDcgQEAgc3ViIGNvbm4geworIAkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJSb290ICRyZXBvXG4iKTsKKz0yMAorIAkjIFRyaWFsIGFuZCBlcnJvciBzYXlzIHRoYXQgdGhpcyBwcm9iYWJseSBpcyB0aGUgbWluaW11bSBzZXQKKy0JJHNlbGYtPnsnc29ja2V0byd9LT53cml0ZSgiVmFsaWQtcmVzcG9uc2VzIG9rIGVycm9yIFZhbGlkLXJlcXVlc3RzIE1vPQorZGUgTSBNYmluYXJ5IEUgRiBDaGVja2VkLWluIENyZWF0ZWQgVXBkYXRlZCBNZXJnZWQgUmVtb3ZlZFxuIik7CisrCSRzZWxmLT57J3NvY2tldG8nfS0+d3JpdGUoIlZhbGlkLXJlc3BvbnNlcyBvayBlcnJvciBWYWxpZC1yZXF1ZXN0cyBNbz0KK2RlIE0gTWJpbmFyeSBFIENoZWNrZWQtaW4gQ3JlYXRlZCBVcGRhdGVkIE1lcmdlZCBSZW1vdmVkXG4iKTsKKz0yMAorIAkkc2VsZi0+eydzb2NrZXRvJ30tPndyaXRlKCJ2YWxpZC1yZXF1ZXN0c1xuIik7CisgCSRzZWxmLT57J3NvY2tldG8nfS0+Zmx1c2goKTsKK0BAIC02OTEsNyArNjkxLDcgQEAgd2hpbGUoPENWUz4pIHsKKyAJCXVubGluaygkdG1wbmFtZSk7CisgCQlteSAkbW9kZSA9M0QgcG1vZGUoJGN2cy0+eydtb2RlJ30pOworIAkJcHVzaChAbmV3LFskbW9kZSwgJHNoYSwgJGZuXSk7ICMgbWF5IGJlIHJlc3VycmVjdGVkIQorLQl9IGVsc2lmKCRzdGF0ZSA9M0Q9M0QgOSBhbmQgL15ccysoXFMrKTpcZCg/OlwuXGQrKSstPihcZCg/OlwuXGQrKSspXCg9CitERUFEXClccyokLykgeworKwl9IGVsc2lmKCRzdGF0ZSA9M0Q9M0QgOSBhbmQgL15ccysoXFMrKTpcZCsoPzpcLlxkKykrLT4oXGQrKD86XC5cZCspKyk9CitcKERFQURcKVxzKiQvKSB7CisgCQlteSAkZm4gPTNEICQxOworIAkJJGZuID0zRH4gcyNeLysjIzsKKyAJCXB1c2goQG9sZCwkZm4pOworCistLT0yMAorRGF2aWQgSz1FNWdlZGFsCistCitUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgZ2l0IiBpbgordGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKK01vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAorCitGcm9tIG5vYm9keSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IEEgVSBUaG9yIDxhLnUudGhvckBleGFtcGxlLmNvbT4KK1JlZmVyZW5jZXM6IDxQaW5lLkxOWC40LjY0MC4wMDAxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDAyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDAzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDA5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDEwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDExQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDEyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDEzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDE5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDIzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDI5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDMzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDM5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQxQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQyQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQzQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ0QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ1QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ2QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ3QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ4QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDQ5QHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorIDxQaW5lLkxOWC40LjY0MC4wMDUwQHdvb2R5LmxpbnV4LWZvdW5kYXRpb24ub3JnPgorRGF0ZTogRnJpLCA5IEp1biAyMDA2IDAwOjQ0OjE2IC0wNzAwCitTdWJqZWN0OiBbUEFUQ0hdIGEgY29tbWl0LgorCitIZXJlIGlzIGEgcGF0Y2ggZnJvbSBBIFUgVGhvci4KKworLS0tCisgZm9vIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCA5MTIzY2RjLi45MThkY2Y4IDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0xICsxIEBACistRnJpIEp1biAgOSAwMDo0NDowNCBQRFQgMjAwNgorK0ZyaSBKdW4gIDkgMDA6NDQ6MTMgUERUIDIwMDYKKy0tIAorMS40LjAuZzZmMmIKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IFtQQVRDSF0gYW5vdGhlciBwYXRjaAorCitIZXJlIGlzIGFuIGVtcHR5IHBhdGNoIGZyb20gQSBVIFRob3IuCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVuaW8gQyBIYW1hbm8gPGp1bmlvQGtlcm5lbC5vcmc+CitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKK1N1YmplY3Q6IHJlOiBbUEFUQ0hdIGFub3RoZXIgcGF0Y2gKKworRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIXSBhbm90aGVyIHBhdGNoCis+SGVyZSBpcyBhbiBlbXB0eSBwYXRjaCBmcm9tIEEgVSBUaG9yLgorCitIZXkgeW91IGZvcmdvdCB0aGUgcGF0Y2ghCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorRGF0ZTogTW9uLCAxNyBTZXAgMjAwMSAwMDowMDowMCArMDkwMAorTWltZS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogVGV4dC9QbGFpbjsgY2hhcnNldD11cy1hc2NpaQorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogUXVvdGVkLVByaW50YWJsZQorCis9MEE9MEFGcm9tOiBGIFUgQmFyIDxmLnUuYmFyQGV4YW1wbGUuY29tPgorU3ViamVjdDogW1BBVENIXSB1cGRhdGVzPTBBPTBBVGhpcyBpcyB0byBmaXggZGlmZi1mb3JtYXQgZG9jdW1lbnRhdGlvbi4KKworZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGlmZi1mb3JtYXQudHh0IGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK2luZGV4IGI0MjZhMTQuLjk3NzU2ZWMgMTAwNjQ0CistLS0gYS9Eb2N1bWVudGF0aW9uL2RpZmYtZm9ybWF0LnR4dAorKysrIGIvRG9jdW1lbnRhdGlvbi9kaWZmLWZvcm1hdC50eHQKK0BAIC04MSw3ICs4MSw3IEBAIFRoZSAiZGlmZiIgZm9ybWF0dGluZyBvcHRpb25zIGNhbiBiZSBjdXN0b21pemVkIHZpYSB0aGUKKyBlbnZpcm9ubWVudCB2YXJpYWJsZSAnR0lUX0RJRkZfT1BUUycuICBGb3IgZXhhbXBsZSwgaWYgeW91CisgcHJlZmVyIGNvbnRleHQgZGlmZjoKKz0yMAorLSAgICAgIEdJVF9ESUZGX09QVFM9M0QtYyBnaXQtZGlmZi1pbmRleCAtcCAkKGNhdCAuZ2l0L0hFQUQpCisrICAgICAgR0lUX0RJRkZfT1BUUz0zRC1jIGdpdC1kaWZmLWluZGV4IC1wIEhFQUQKKz0yMAorPTIwCisgMi4gV2hlbiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJ0dJVF9FWFRFUk5BTF9ESUZGJyBpcyBzZXQsIHRoZQorRnJvbSBiOTcwNGE1MThlMjExNTg0MzNiYWEyY2MyZDU5MWZlYTY4Nzk2N2Y2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogPT9VVEYtOD9xP0x1a2FzPTIwU2FuZHN0cj1DMz1CNm0/PSA8bHVrYXNzQGV0ZWsuY2hhbG1lcnMuc2U+CitEYXRlOiBUaHUsIDEwIEp1bCAyMDA4IDIzOjQxOjMzICswMjAwCitTdWJqZWN0OiBSZTogZGlzY3Vzc2lvbiB0aGF0IGxlYWQgdG8gdGhpcyBwYXRjaAorTUlNRS1WZXJzaW9uOiAxLjAKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCitbUEFUQ0hdIGdpdC1tYWlsaW5mbzogRml4IGdldHRpbmcgdGhlIHN1YmplY3QgZnJvbSB0aGUgYm9keQorCisiU3ViamVjdDogIiBpc24ndCBpbiB0aGUgc3RhdGljIGFycmF5ICJoZWFkZXIiLCBhbmQgdGh1cworbWVtY21wKCJTdWJqZWN0OiAiLCBoZWFkZXJbaV0sIDcpIHdpbGwgbmV2ZXIgbWF0Y2guCisKK1NpZ25lZC1vZmYtYnk6IEx1a2FzIFNhbmRzdHLDtm0gPGx1a2Fzc0BldGVrLmNoYWxtZXJzLnNlPgorU2lnbmVkLW9mZi1ieTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorLS0tCisgYnVpbHRpbi1tYWlsaW5mby5jIHwgMiArLQorIDEgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvYnVpbHRpbi1tYWlsaW5mby5jIGIvYnVpbHRpbi1tYWlsaW5mby5jCitpbmRleCA5NjJhYTM0Li4yZDE1MjBmIDEwMDY0NAorLS0tIGEvYnVpbHRpbi1tYWlsaW5mby5jCisrKysgYi9idWlsdGluLW1haWxpbmZvLmMKK0BAIC0zMzQsNyArMzM0LDcgQEAgc3RhdGljIGludCBjaGVja19oZWFkZXIoY2hhciAqbGluZSwgdW5zaWduZWQgbGluZXNpemUsIGNoYXIgKipoZHJfZGF0YSwgaW50IG92ZXIKKyAJCXJldHVybiAxOworIAlpZiAoIW1lbWNtcCgiW1BBVENIXSIsIGxpbmUsIDcpICYmIGlzc3BhY2UobGluZVs3XSkpIHsKKyAJCWZvciAoaSA9IDA7IGhlYWRlcltpXTsgaSsrKSB7CistCQkJaWYgKCFtZW1jbXAoIlN1YmplY3Q6ICIsIGhlYWRlcltpXSwgOSkpIHsKKysJCQlpZiAoIW1lbWNtcCgiU3ViamVjdCIsIGhlYWRlcltpXSwgNykpIHsKKyAJCQkJaWYgKCEgaGFuZGxlX2hlYWRlcihsaW5lLCBoZHJfZGF0YVtpXSwgMCkpIHsKKyAJCQkJCXJldHVybiAxOworIAkJCQl9CistLSAKKzEuNS42LjIuNDU1LmcxZWZiMgorCitGcm9tIG5vYm9keSBGcmkgQXVnICA4IDIyOjI0OjAzIDIwMDgKK0RhdGU6IEZyaSwgOCBBdWcgMjAwOCAxMzowODozNyArMDIwMCAoQ0VTVCkKK0Zyb206IEEgVSBUaG9yIDxhLnUudGhvckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCAzLzMgdjJdIFh5enp5CitNSU1FLVZlcnNpb246IDEuMAorQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9LT0tPSIKKworLS09LT0tPQorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTzg4NTktMTUKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworSGVyZSBjb21lcyBhIGNvbW1pdCBsb2cgbWVzc2FnZSwgYW5kCitpdHMgc2Vjb25kIGxpbmUgaXMgaGVyZS4KKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyAgfCA0ICsrLS0KKworZGlmZiAtLWdpdCBhL2J1aWx0aW4tbWFpbGluZm8uYyBiL2J1aWx0aW4tbWFpbGluZm8uYworaW5kZXggM2U1ZmU1MS4uYWFiZmU1YyAxMDA2NDQKKy0tLSBhL2J1aWx0aW4tbWFpbGluZm8uYworKysrIGIvYnVpbHRpbi1tYWlsaW5mby5jCitAQCAtNzU4LDggKzc1OCw4IEBAIHN0YXRpYyB2b2lkIGhhbmRsZV9ib2R5KHZvaWQpCisgCQkvKiBwcm9jZXNzIGFueSBib3VuZGFyeSBsaW5lcyAqLworIAkJaWYgKCpjb250ZW50X3RvcCAmJiBpc19tdWx0aXBhcnRfYm91bmRhcnkoJmxpbmUpKSB7CisgCQkJLyogZmx1c2ggYW55IGxlZnRvdmVyICovCistCQkJaWYgKGxpbmUubGVuKQorLQkJCQloYW5kbGVfZmlsdGVyKCZsaW5lKTsKKysJCQlpZiAocHJldi5sZW4pCisrCQkJCWhhbmRsZV9maWx0ZXIoJnByZXYpOworPTIwCisgCQkJaWYgKCFoYW5kbGVfYm91bmRhcnkoKSkKKyAJCQkJZ290byBoYW5kbGVfYm9keV9vdXQ7CistLT0yMAorMS42LjAucmMyCisKKy0tPS09LT0tLQorCitGcm9tIGJkYUBtbnNzcGIucnUgV2VkIE5vdiAxMiAxNzo1NDo0MSAyMDA4CitGcm9tOiBEbWl0cml5IEJsaW5vdiA8YmRhQG1uc3NwYi5ydT4KK1RvOiBuYXZ5LXBhdGNoZXNAZGluYXIubW5zLm1uc3NwYi5ydQorRGF0ZTogV2VkLCAxMiBOb3YgMjAwOCAxNzo1NDo0MSArMDMwMAorTWVzc2FnZS1JZDogPDEyMjY1MDE2ODEtMjQ5MjMtMS1naXQtc2VuZC1lbWFpbC1iZGFAbW5zc3BiLnJ1PgorWC1NYWlsZXI6IGdpdC1zZW5kLWVtYWlsIDEuNS42LjUKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47CisgIGNoYXJzZXQ9dXRmLTgKK0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKK1N1YmplY3Q6IFtOYXZ5LXBhdGNoZXNdIFtQQVRDSF0KKwk9P3V0Zi04P2I/MEpqUXQ5QzgwTFhRdmRHUjBMMGcwWUhRdjlDNDBZSFF2dEM2SU5DLzBMQT0/PQorCT0/dXRmLTg/Yj8wTHJRdGRHQzBMN1FzaURRdmRDMTBMN1FzZEdGMEw3UXROQzQwTHpSaTlHRklOQzAwTHZSanlBPT89CisJPT91dGYtOD9iPzBZSFFzZEMrMFlEUXV0QzQ/PQorCit0ZXh0bGl2ZS0qINC40YHQv9GA0LDQstC70LXQvdGLINC90LAgdGV4bGl2ZS0qCitkb2N1dGlscyDQt9Cw0LzQtdC90ZHQvSDQvdCwIHB5dGhvbi1kb2N1dGlscworCivQlNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Qviwg0L7QutCw0LfQsNC70L7RgdGMLCDRh9GC0L4gcmVzdDJ3ZWIg0LLRi9GC0Y/Qs9C40LLQsNC10YIg0LfQsCDRgdC+0LHQvtC5CitweXRob24tZG9jdXRpbHMuINCSINGC0L4g0LLRgNC10LzRjyDQutCw0Log0YHQsNC8IHJlc3Qyd2ViINC90LUg0L3Rg9C20LXQvS4KKworU2lnbmVkLW9mZi1ieTogRG1pdHJpeSBCbGlub3YgPGJkYUBtbnNzcGIucnU+CistLS0KKyBob3d0by9idWlsZF9uYXZ5LnR4dCB8ICAgIDYgKysrLS0tCisgMSBmaWxlcyBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9ob3d0by9idWlsZF9uYXZ5LnR4dCBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitpbmRleCAzZmQzYWZiLi4wZWU4MDdlIDEwMDY0NAorLS0tIGEvaG93dG8vYnVpbGRfbmF2eS50eHQKKysrKyBiL2hvd3RvL2J1aWxkX25hdnkudHh0CitAQCAtMTE5LDggKzExOSw4IEBACisgICAgLSBsaWJ4di1kZXYKKyAgICAtIGxpYnVzcGxhc2gtZGV2CisgICAgLSBsYXRleC1tYWtlCistICAgLSB0ZXh0bGl2ZS1sYW5nLWN5cmlsbGljCistICAgLSB0ZXh0bGl2ZS1sYXRleC1leHRyYQorKyAgIC0gdGV4bGl2ZS1sYW5nLWN5cmlsbGljCisrICAgLSB0ZXhsaXZlLWxhdGV4LWV4dHJhCisgICAgLSBkaWEKKyAgICAtIHB5dGhvbi1weXJleAorICAgIC0gbGlidG9vbAorQEAgLTEyOCw3ICsxMjgsNyBAQAorICAgIC0gc294CisgICAgLSBjeXRob24KKyAgICAtIGltYWdlbWFnaWNrCistICAgLSBkb2N1dGlscworKyAgIC0gcHl0aG9uLWRvY3V0aWxzCisgCisgIy4g0L3QsCDQvNCw0YjQuNC90LUgZGluYXI6INC00L7QsdCw0LLQuNGC0Ywg0YHQstC+0Lkg0L7RgtC60YDRi9GC0YvQuSBzc2gt0LrQu9GO0Ycg0LIgYXV0aG9yaXplZF9rZXlzMiDQv9C+0LvRjNC30L7QstCw0YLQtdC70Y8gZGRldgorICMuINC90LAg0YHQstC+0LXQuSDQvNCw0YjQuNC90LU6INC+0YLRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCAvZXRjL3N1ZG9lcnMgKNC60L7QvNCw0L3QtNCwIGBgdmlzdWRvYGApINC/0YDQuNC80LXRgNC90L4g0YHQu9C10LTRg9GO0YnQuNC8INC+0LHRgNCw0LfQvtC8OjoKKy0tIAorMS41LjYuNQorRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiA8YS51LnRob3JAZXhhbXBsZS5jb20+IChBIFUgVGhvcikKK0RhdGU6IEZyaSwgOSBKdW4gMjAwNiAwMDo0NDoxNiAtMDcwMAorU3ViamVjdDogW1BBVENIXSBhIHBhdGNoCisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogSnVuaW8gSGFtYW5vIDxqdW5raW9AY294Lm5ldD4KK0RhdGU6IFRodSwgMjAgQXVnIDIwMDkgMTc6MTg6MjIgLTA3MDAKK1N1YmplY3Q6IFdoeSBkb2Vzbid0IGdpdC1hbSBkb2VzIG5vdCBsaWtlID44IHNjaXNzb3JzIG1hcms/CisKK1N1YmplY3Q6IFtQQVRDSF0gQkxBSCBPTkUKKworSW4gcmVhbCBsaWZlLCB3ZSB3aWxsIHNlZSBhIGRpc2N1c3Npb24gdGhhdCBpbnNwaXJlZCB0aGlzIHBhdGNoCitkaXNjdXNzaW5nIHJlbGF0ZWQgYW5kIHVucmVsYXRlZCB0aGluZ3MgYXJvdW5kID44IHNjaXNzb3JzIG1hcmsKK2luIHRoaXMgcGFydCBvZiB0aGUgbWVzc2FnZS4KKworU3ViamVjdDogW1BBVENIXSBCTEFIIFRXTworCitBbmQgdGhlbiB3ZSB3aWxsIHNlZSB0aGUgc2Npc3NvcnMuCisKKyBUaGlzIGxpbmUgaXMgbm90IGEgc2Npc3NvcnMgbWFyayAtLSA+OCAtLSBidXQgdGFsa3MgYWJvdXQgaXQuCisgLSAtID44IC0gLSBwbGVhc2UgcmVtb3ZlIGV2ZXJ5dGhpbmcgYWJvdmUgdGhpcyBsaW5lIC0gLSA+OCAtIC0KKworU3ViamVjdDogW1BBVENIXSBUZWFjaCBtYWlsaW5mbyB0byBpZ25vcmUgZXZlcnl0aGluZyBiZWZvcmUgLS0gPjggLS0gbWFyaworRnJvbTogSnVuaW8gQyBIYW1hbm8gPGdpdHN0ZXJAcG9ib3guY29tPgorCitUaGlzIHRlYWNoZXMgbWFpbGluZm8gdGhlIHNjaXNzb3JzIC0tID44IC0tIG1hcms7IHRoZSBjb21tYW5kIGlnbm9yZXMKK2V2ZXJ5dGhpbmcgYmVmb3JlIGl0IGluIHRoZSBtZXNzYWdlIGJvZHkuCisKK1NpZ25lZC1vZmYtYnk6IEp1bmlvIEMgSGFtYW5vIDxnaXRzdGVyQHBvYm94LmNvbT4KKy0tLQorIGJ1aWx0aW4tbWFpbGluZm8uYyB8IDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KKyAxIGZpbGVzIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9idWlsdGluLW1haWxpbmZvLmMgYi9idWlsdGluLW1haWxpbmZvLmMKK2luZGV4IGIwYjVkOGYuLjQ2MWM0N2UgMTAwNjQ0CistLS0gYS9idWlsdGluLW1haWxpbmZvLmMKKysrKyBiL2J1aWx0aW4tbWFpbGluZm8uYworQEAgLTcxMiw2ICs3MTIsMzQgQEAgc3RhdGljIGlubGluZSBpbnQgcGF0Y2hicmVhayhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAlyZXR1cm4gMDsKKyB9CisgCisrc3RhdGljIGludCBzY2lzc29ycyhjb25zdCBzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorK3sKKysJc2l6ZV90IGksIGxlbiA9IGxpbmUtPmxlbjsKKysJaW50IHNjaXNzb3JzX2Rhc2hlc19zZWVuID0gMDsKKysJY29uc3QgY2hhciAqYnVmID0gbGluZS0+YnVmOworKworKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKysJCWlmIChpc3NwYWNlKGJ1ZltpXSkpCisrCQkJY29udGludWU7CisrCQlpZiAoYnVmW2ldID09ICctJykgeworKwkJCXNjaXNzb3JzX2Rhc2hlc19zZWVuIHw9IDAyOworKwkJCWNvbnRpbnVlOworKwkJfQorKwkJaWYgKGkgKyAxIDwgbGVuICYmICFtZW1jbXAoYnVmICsgaSwgIj44IiwgMikpIHsKKysJCQlzY2lzc29yc19kYXNoZXNfc2VlbiB8PSAwMTsKKysJCQlpKys7CisrCQkJY29udGludWU7CisrCQl9CisrCQlpZiAoaSArIDcgPCBsZW4gJiYgIW1lbWNtcChidWYgKyBpLCAiY3V0IGhlcmUiLCA4KSkgeworKwkJCWkgKz0gNzsKKysJCQljb250aW51ZTsKKysJCX0KKysJCS8qIGV2ZXJ5dGhpbmcgZWxzZSAtLS0gbm90IHNjaXNzb3JzICovCisrCQlicmVhazsKKysJfQorKwlyZXR1cm4gc2Npc3NvcnNfZGFzaGVzX3NlZW4gPT0gMDM7CisrfQorKworIHN0YXRpYyBpbnQgaGFuZGxlX2NvbW1pdF9tc2coc3RydWN0IHN0cmJ1ZiAqbGluZSkKKyB7CisgCXN0YXRpYyBpbnQgc3RpbGxfbG9va2luZyA9IDE7CitAQCAtNzIzLDEwICs3NTEsMTcgQEAgc3RhdGljIGludCBoYW5kbGVfY29tbWl0X21zZyhzdHJ1Y3Qgc3RyYnVmICpsaW5lKQorIAkJc3RyYnVmX2x0cmltKGxpbmUpOworIAkJaWYgKCFsaW5lLT5sZW4pCisgCQkJcmV0dXJuIDA7CistCQlpZiAoKHN0aWxsX2xvb2tpbmcgPSBjaGVja19oZWFkZXIobGluZSwgc19oZHJfZGF0YSwgMCkpICE9IDApCisrCQlzdGlsbF9sb29raW5nID0gY2hlY2tfaGVhZGVyKGxpbmUsIHNfaGRyX2RhdGEsIDApOworKwkJaWYgKHN0aWxsX2xvb2tpbmcpCisgCQkJcmV0dXJuIDA7CisgCX0KKyAKKysJaWYgKHNjaXNzb3JzKGxpbmUpKSB7CisrCQlmc2VlayhjbWl0bXNnLCAwTCwgU0VFS19TRVQpOworKwkJc3RpbGxfbG9va2luZyA9IDE7CisrCQlyZXR1cm4gMDsKKysJfQorKworIAkvKiBub3JtYWxpemUgdGhlIGxvZyBtZXNzYWdlIHRvIFVURi04LiAqLworIAlpZiAobWV0YWluZm9fY2hhcnNldCkKKyAJCWNvbnZlcnRfdG9fdXRmOChsaW5lLCBjaGFyc2V0LmJ1Zik7CistLSAKKzEuNi40LjEKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGZyb20pCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKworRnJvbTogYm9nb3NpdHkKKyAgLSBhIGxpc3QKKyAgLSBvZiBzdHVmZgorLS0tCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytjb250ZW50CisKK0Zyb20gbm9ib2R5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQSBVIFRob3IgPGEudS50aG9yQGV4YW1wbGUuY29tPgorU3ViamVjdDogY2hlY2sgYm9ndXMgYm9keSBoZWFkZXIgKGRhdGUpCitEYXRlOiBGcmksIDkgSnVuIDIwMDYgMDA6NDQ6MTYgLTA3MDAKKworRGF0ZTogYm9ndXMKKworYW5kIHNvbWUgY29udGVudAorCistLS0KK2RpZmYgLS1naXQgYS9mb28gYi9mb28KK2luZGV4IGU2OWRlMjkuLmQ5NWYzYWQgMTAwNjQ0CistLS0gYS9mb28KKysrKyBiL2ZvbworQEAgLTAsMCArMSBAQAorK2NvbnRlbnQKKworRnJvbSBub2JvZHkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBBIFUgVGhvciA8YS51LnRob3JAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBBIEUgSSBPIFUKK0RhdGU6IE1vbiwgMTcgU2VwIDIwMTIgMTQ6MjM6NDQgLTA3MDAKK01JTUUtVmVyc2lvbjogMS4wCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9Imlzby0yMDIyLWpwIgorQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJVVEYtOCIKKworTmV3IGNvbnRlbnQgaGVyZQorCitkaWZmIC0tZ2l0IGEvZm9vIGIvZm9vCitpbmRleCBlNjlkZTI5Li5kOTVmM2FkIDEwMDY0NAorLS0tIGEvZm9vCisrKysgYi9mb28KK0BAIC0wLDAgKzEgQEAKKytOZXcgY29udGVudApkaWZmIC0tZ2l0IGEvdC90NTE1MC1yZXF1ZXN0LXB1bGwuc2ggYi90L3Q1MTUwLXJlcXVlc3QtcHVsbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MmMzM2I4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTE1MC1yZXF1ZXN0LXB1bGwuc2gKQEAgLTAsMCArMSwyNDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHdvcmtmbG93cyBpbnZvbHZpbmcgcHVsbCByZXF1ZXN0LicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlnaXQgaW5pdCAtLWJhcmUgdXBzdHJlYW0uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRvd25zdHJlYW0uZ2l0ICYmCisJZ2l0IGNsb25lIHVwc3RyZWFtLmdpdCB1cHN0cmVhbS1wcml2YXRlICYmCisJZ2l0IGNsb25lIGRvd25zdHJlYW0uZ2l0IGxvY2FsICYmCisKKwl0cmFzaF91cmw9ImZpbGU6Ly8kVFJBU0hfRElSRUNUT1JZIiAmJgorCWRvd25zdHJlYW1fdXJsPSIkdHJhc2hfdXJsL2Rvd25zdHJlYW0uZ2l0LyIgJiYKKwl1cHN0cmVhbV91cmw9IiR0cmFzaF91cmwvdXBzdHJlYW0uZ2l0LyIgJiYKKworCSgKKwkJY2QgdXBzdHJlYW0tcHJpdmF0ZSAmJgorCQljYXQgPDwtXEVPVCA+bW5lbW9uaWMudHh0ICYmCisJCVRoaXJ0ZXkgZGF5cyBoYXRoIE5vdmVtYmVyLAorCQlBcHJpbGUsIEp1bmUsIGFuZCBTZXB0ZW1iZXI6CisJCUVPVAorCQlnaXQgYWRkIG1uZW1vbmljLnR4dCAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiXCJUaGlydHkgZGF5c1wiLCBhIHJlbWluZGVyIG9mIG1vbnRoIGxlbmd0aHMiICYmCisJCWdpdCB0YWcgLW0gInZlcnNpb24gMSIgLWEgaW5pdGlhbCAmJgorCQlnaXQgcHVzaCAtLXRhZ3Mgb3JpZ2luIG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCByZW1vdGUgYWRkIHVwc3RyZWFtICIkdHJhc2hfdXJsL3Vwc3RyZWFtLmdpdCIgJiYKKwkJZ2l0IGZldGNoIHVwc3RyZWFtICYmCisJCWdpdCBwdWxsIHVwc3RyZWFtIG1hc3RlciAmJgorCQljYXQgPDwtXEVPVCA+Pm1uZW1vbmljLnR4dCAmJgorCQlPZiB0d3llY2VzY29yZS1laWdodHQgaXMgYnV0IGVpbmUsCisJCUFuZCBhbGwgdGhlIHJlbW5hbnRlIGJlIHRocnljZXNjb3JlLWVpbmUuCisJCU/igJljb3Vyc2UgTGVhcCB5YXJlIGNvbWVzIGFu4oCZcHluZXMsCisJCUV24oCZcmllIGZvdXJlIHlhcmVzLCBnb3RlIGl0IHJ5Z2h0aC4KKwkJQW7igJl0d3llY2VzY29yZS1laWdodCBpcyBidXQgdHd5ZWNlc2NvcmUtbnluZS4KKwkJRU9UCisJCWdpdCBhZGQgbW5lbW9uaWMudHh0ICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJNb3JlIGRldGFpbCIgJiYKKwkJZ2l0IHRhZyAtbSAidmVyc2lvbiAyIiAtYSBmdWxsICYmCisJCWdpdCBjaGVja291dCAtYiBzaW1wbGlmeSBIRUFEXiAmJgorCQltdiBtbmVtb25pYy50eHQgbW5lbW9uaWMuc3RhbmRhcmQgJiYKKwkJY2F0IDw8LVxFT1QgPm1uZW1vbmljLmNsYXJpZmllZCAmJgorCQlUaGlydHkgZGF5cyBoYXMgU2VwdGVtYmVyLAorCQlBbGwgdGhlIHJlc3QgSSBjYW7igJl0IHJlbWVtYmVyLgorCQlFT1QKKwkJZ2l0IGFkZCAtTiBtbmVtb25pYy5zdGFuZGFyZCBtbmVtb25pYy5jbGFyaWZpZWQgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiQWRhcHQgdG8gdXNlIG1vZGVybiwgc2ltcGxlciBFbmdsaXNoCisKK0J1dCBrZWVwIHRoZSBvbGQgdmVyc2lvbiwgdG9vLCBpbiBjYXNlIHNvbWUgcGVvcGxlIHByZWZlciBpdC4iICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHR3byBzY3JpcHRzIGZvciByZWFkaW5nIHB1bGwgcmVxdWVzdHMnICcKKworCWRvd25zdHJlYW1fdXJsX2Zvcl9zZWQ9JCgKKwkJcHJpbnRmICIlc1xuIiAiJGRvd25zdHJlYW1fdXJsIiB8CisJCXNlZCAtZSAnXCcncy9cXC9cXFxcL2cnXCcnIC1lICdcJydzL1tbLy4qXiRdL1xcJi9nJ1wnJworCSkgJiYKKworCWNhdCA8PC1cRU9UID5yZWFkLXJlcXVlc3Quc2VkICYmCisJIyEvYmluL3NlZCAtbmYKKwkjIE5vdGUgdGhhdCBhIHJlcXVlc3QgY291bGQgYXNrIGZvciAidGFnICR0YWduYW1lIgorCS8gaW4gdGhlIGdpdCByZXBvc2l0b3J5IGF0OiQvIWQKKwluCisJL14kLyBuCisJcy8gdGFnIFwoW14gXSpcKSQvIHRhZy0tXDEvCisJcy9eWyAJXSpcKC4qXCkgXChbXiBdKlwpL3BsZWFzZSBwdWxsXAorCVwxXAorCVwyL3AKKwlxCisJRU9UCisKKwljYXQgPDwtRU9UID5mdXp6LnNlZAorCSMhL2Jpbi9zZWQgLW5mCisJcy8kZG93bnN0cmVhbV91cmxfZm9yX3NlZC9VUkwvZworCXMvJF94NDAvT0JKRUNUX05BTUUvZworCXMvQSBVIFRob3IvQVVUSE9SL2cKKwlzL1stMC05XVx7MTBcfSBbOjAtOV1cezhcfSBbLStdWzAtOV1cezRcfS9EQVRFL2cKKwlzLyAgICAgICAgW14gXS4qLyAgICAgICAgU1VCSkVDVC9nCisJcy8gIFteIF0uKiAoREFURSkvICBTVUJKRUNUIChEQVRFKS9nCisJc3x0YWdzL2Z1bGx8QlJBTkNIfGcKKwlzL21uZW1vbmljLnR4dC9GSUxFTkFNRS9nCisJcy9edmVyc2lvbiBbMC05XS9WRVJTSU9OLworCS9eIEZJTEVOQU1FIHwgKlswLTldKiBbLStdKlwkLyBiIGRpZmZzdGF0CisJL15BVVRIT1IgKFswLTldKik6XCQvIGIgc2hvcnRsb2cKKwlwCisJYgorCTogZGlmZnN0YXQKKwluCisJLyBbMC05XSogZmlsZXMqIGNoYW5nZWQvIHsKKwkJYVxcCisJRElGRlNUQVQKKwkJYgorCX0KKwliIGRpZmZzdGF0CisJOiBzaG9ydGxvZworCS9eICAgICAgICBbYS16QS1aXS8gbgorCS9eW2EtekEtWl0qIChbMC05XSopOlwkLyBuCisJL15cJC8gTgorCS9eXG5bYS16QS1aXSogKFswLTldKik6XCQvIXsKKwkJYVxcCisJU0hPUlRMT0cKKwkJRAorCX0KKwluCisJYiBzaG9ydGxvZworCUVPVAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgcmVxdWVzdCB3aGVuIGZvcmdvdCB0byBwdXNoJyAnCisKKwlybSAtZnIgZG93bnN0cmVhbS5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZG93bnN0cmVhbS5naXQgJiYKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgbWFzdGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXF1ZXN0LXB1bGwgaW5pdGlhbCAiJGRvd25zdHJlYW1fdXJsIiBcCisJCQkyPi4uL2VycgorCSkgJiYKKwlncmVwICJObyBtYXRjaCBmb3IgY29tbWl0IC4qIiBlcnIgJiYKKwlncmVwICJBcmUgeW91IHN1cmUgeW91IHB1c2hlZCIgZXJyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCByZXF1ZXN0IGFmdGVyIHB1c2gnICcKKworCXJtIC1mciBkb3duc3RyZWFtLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkb3duc3RyZWFtLmdpdCAmJgorCSgKKwkJY2QgbG9jYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3Rlcjpmb3ItdXBzdHJlYW0gJiYKKwkJZ2l0IHJlcXVlc3QtcHVsbCBpbml0aWFsIG9yaWdpbiBtYXN0ZXI6Zm9yLXVwc3RyZWFtID4uLi9yZXF1ZXN0CisJKSAmJgorCXNlZCAtbmYgcmVhZC1yZXF1ZXN0LnNlZCA8cmVxdWVzdCA+ZGlnZXN0ICYmCisJY2F0IGRpZ2VzdCAmJgorCXsKKwkJcmVhZCB0YXNrICYmCisJCXJlYWQgcmVwb3NpdG9yeSAmJgorCQlyZWFkIGJyYW5jaAorCX0gPGRpZ2VzdCAmJgorCSgKKwkJY2QgdXBzdHJlYW0tcHJpdmF0ZSAmJgorCQlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCQlnaXQgcHVsbCAtLWZmLW9ubHkgIiRyZXBvc2l0b3J5IiAiJGJyYW5jaCIKKwkpICYmCisJdGVzdCAiJGJyYW5jaCIgPSBmb3ItdXBzdHJlYW0gJiYKKwl0ZXN0X2NtcCBsb2NhbC9tbmVtb25pYy50eHQgdXBzdHJlYW0tcHJpdmF0ZS9tbmVtb25pYy50eHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXF1ZXN0IGFza3MgSEVBRCB0byBiZSBwdWxsZWQnICcKKworCXJtIC1mciBkb3duc3RyZWFtLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkb3duc3RyZWFtLmdpdCAmJgorCSgKKwkJY2QgbG9jYWwgJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS10YWdzIG9yaWdpbiBtYXN0ZXIgc2ltcGxpZnkgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3Rlcjpmb3ItdXBzdHJlYW0gJiYKKwkJZ2l0IHJlcXVlc3QtcHVsbCBpbml0aWFsICIkZG93bnN0cmVhbV91cmwiID4uLi9yZXF1ZXN0CisJKSAmJgorCXNlZCAtbmYgcmVhZC1yZXF1ZXN0LnNlZCA8cmVxdWVzdCA+ZGlnZXN0ICYmCisJY2F0IGRpZ2VzdCAmJgorCXsKKwkJcmVhZCB0YXNrICYmCisJCXJlYWQgcmVwb3NpdG9yeSAmJgorCQlyZWFkIGJyYW5jaAorCX0gPGRpZ2VzdCAmJgorCXRlc3QgLXogIiRicmFuY2giCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCByZXF1ZXN0IGZvcm1hdCcgJworCisJcm0gLWZyIGRvd25zdHJlYW0uZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIGRvd25zdHJlYW0uZ2l0ICYmCisJY2F0IDw8LVxFT1QgPmV4cGVjdCAmJgorCVRoZSBmb2xsb3dpbmcgY2hhbmdlcyBzaW5jZSBjb21taXQgT0JKRUNUX05BTUU6CisKKwkgIFNVQkpFQ1QgKERBVEUpCisKKwlhcmUgYXZhaWxhYmxlIGluIHRoZSBnaXQgcmVwb3NpdG9yeSBhdDoKKworCSAgVVJMIEJSQU5DSAorCisJZm9yIHlvdSB0byBmZXRjaCBjaGFuZ2VzIHVwIHRvIE9CSkVDVF9OQU1FOgorCisJICBTVUJKRUNUIChEQVRFKQorCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVZFUlNJT04KKworCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTSE9SVExPRworCisJRElGRlNUQVQKKwlFT1QKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgbWFzdGVyICYmCisJCWdpdCBwdXNoIG9yaWdpbiB0YWdzL2Z1bGwgJiYKKwkJZ2l0IHJlcXVlc3QtcHVsbCBpbml0aWFsICIkZG93bnN0cmVhbV91cmwiIHRhZ3MvZnVsbCA+Li4vcmVxdWVzdAorCSkgJiYKKwk8cmVxdWVzdCBzZWQgLW5mIGZ1enouc2VkID5yZXF1ZXN0LmZ1enp5ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCByZXF1ZXN0LmZ1enp5ICYmCisKKwkoCisJCWNkIGxvY2FsICYmCisJCWdpdCByZXF1ZXN0LXB1bGwgaW5pdGlhbCAiJGRvd25zdHJlYW1fdXJsIiB0YWdzL2Z1bGw6cmVmcy90YWdzL2Z1bGwKKwkpID5yZXF1ZXN0ICYmCisJc2VkIC1uZiBmdXp6LnNlZCA8cmVxdWVzdCA+cmVxdWVzdC5mdXp6eSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgcmVxdWVzdC5mdXp6eSAmJgorCisJKAorCQljZCBsb2NhbCAmJgorCQlnaXQgcmVxdWVzdC1wdWxsIGluaXRpYWwgIiRkb3duc3RyZWFtX3VybCIgZnVsbAorCSkgPnJlcXVlc3QgJiYKKwlncmVwICIgdGFncy9mdWxsXCQiIHJlcXVlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxdWVzdC1wdWxsIGlnbm9yZXMgT1BUSU9OU19LRUVQREFTSERBU0ggcG9pc29uJyAnCisKKwkoCisJCWNkIGxvY2FsICYmCisJCU9QVElPTlNfS0VFUERBU0hEQVNIPVllcyAmJgorCQlleHBvcnQgT1BUSU9OU19LRUVQREFTSERBU0ggJiYKKwkJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3Rlcjpmb3ItdXBzdHJlYW0gJiYKKwkJZ2l0IHJlcXVlc3QtcHVsbCAtLSBpbml0aWFsICIkZG93bnN0cmVhbV91cmwiIG1hc3Rlcjpmb3ItdXBzdHJlYW0gPi4uL3JlcXVlc3QKKwkpCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzAwLXBhY2stb2JqZWN0LnNoIGIvdC90NTMwMC1wYWNrLW9iamVjdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMGMxOTYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwMC1wYWNrLW9iamVjdC5zaApAQCAtMCwwICsxLDQyNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcGFjay1vYmplY3QKKworJworLiAuL3Rlc3QtbGliLnNoCisKK1RSQVNIPWBwd2RgCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZXR1cCcgXAorICAgICdybSAtZiAuZ2l0L2luZGV4KiAmJgorICAgICBwZXJsIC1lICJwcmludCBcImFcIiB4IDQwOTY7IiA+IGEgJiYKKyAgICAgcGVybCAtZSAicHJpbnQgXCJiXCIgeCA0MDk2OyIgPiBiICYmCisgICAgIHBlcmwgLWUgInByaW50IFwiY1wiIHggNDA5NjsiID4gYyAmJgorICAgICB0ZXN0LWdlbnJhbmRvbSAic2VlZCBhIiAyMDk3MTUyID4gYV9iaWcgJiYKKyAgICAgdGVzdC1nZW5yYW5kb20gInNlZWQgYiIgMjA5NzE1MiA+IGJfYmlnICYmCisgICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSBhX2JpZyBiIGJfYmlnIGMgJiYKKyAgICAgY2F0IGMgPmQgJiYgZWNobyBmb28gPj5kICYmIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZCAmJgorICAgICB0cmVlPWBnaXQgd3JpdGUtdHJlZWAgJiYKKyAgICAgY29tbWl0PWBnaXQgY29tbWl0LXRyZWUgJHRyZWUgPC9kZXYvbnVsbGAgJiYgeworCSBlY2hvICR0cmVlICYmCisJIGVjaG8gJGNvbW1pdCAmJgorCSBnaXQgbHMtdHJlZSAkdHJlZSB8IHNlZCAtZSAicy8uKiBcXChbMC05YS1mXSpcXCkJLiovXFwxLyIKKyAgICAgfSA+b2JqLWxpc3QgJiYgeworCSBnaXQgZGlmZi10cmVlIC0tcm9vdCAtcCAkY29tbWl0ICYmCisJIHdoaWxlIHJlYWQgb2JqZWN0CisJIGRvCisJICAgIHQ9YGdpdCBjYXQtZmlsZSAtdCAkb2JqZWN0YCAmJgorCSAgICBnaXQgY2F0LWZpbGUgJHQgJG9iamVjdCB8fCByZXR1cm4gMQorCSBkb25lIDxvYmotbGlzdAorICAgICB9ID5leHBlY3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwYWNrIHdpdGhvdXQgZGVsdGEnIFwKKyAgICAncGFja25hbWVfMT0kKGdpdCBwYWNrLW9iamVjdHMgLS13aW5kb3c9MCB0ZXN0LTEgPG9iai1saXN0KScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3BhY2stb2JqZWN0cyB3aXRoIGJvZ3VzIGFyZ3VtZW50cycgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgcGFjay1vYmplY3RzIC0td2luZG93PTAgdGVzdC0xIGJsYWggYmxhaCA8b2JqLWxpc3QnCisKK3JtIC1mciAuZ2l0MgorbWtkaXIgLmdpdDIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3VucGFjayB3aXRob3V0IGRlbHRhJyBcCisgICAgIkdJVF9PQkpFQ1RfRElSRUNUT1JZPS5naXQyL29iamVjdHMgJiYKKyAgICAgZXhwb3J0IEdJVF9PQkpFQ1RfRElSRUNUT1JZICYmCisgICAgIGdpdCBpbml0ICYmCisgICAgIGdpdCB1bnBhY2stb2JqZWN0cyAtbiA8dGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayAmJgorICAgICBnaXQgdW5wYWNrLW9iamVjdHMgPHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2siCisKK3Vuc2V0IEdJVF9PQkpFQ1RfRElSRUNUT1JZCitjZCAiJFRSQVNILy5naXQyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2sgdW5wYWNrIHdpdGhvdXQgZGVsdGEnIFwKKyAgICAnKGNkIC4uLy5naXQgJiYgZmluZCBvYmplY3RzIC10eXBlIGYgLXByaW50KSB8CisgICAgIHdoaWxlIHJlYWQgcGF0aAorICAgICBkbworICAgICAgICAgY21wICRwYXRoIC4uLy5naXQvJHBhdGggfHwgeworCSAgICAgZWNobyAkcGF0aCBkaWZmZXJzLgorCSAgICAgcmV0dXJuIDEKKwkgfQorICAgICBkb25lJworY2QgIiRUUkFTSCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3BhY2sgd2l0aCBSRUZfREVMVEEnIFwKKyAgICAncHdkICYmCisgICAgIHBhY2tuYW1lXzI9JChnaXQgcGFjay1vYmplY3RzIHRlc3QtMiA8b2JqLWxpc3QpJworCitybSAtZnIgLmdpdDIKK21rZGlyIC5naXQyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd1bnBhY2sgd2l0aCBSRUZfREVMVEEnIFwKKyAgICAnR0lUX09CSkVDVF9ESVJFQ1RPUlk9LmdpdDIvb2JqZWN0cyAmJgorICAgICBleHBvcnQgR0lUX09CSkVDVF9ESVJFQ1RPUlkgJiYKKyAgICAgZ2l0IGluaXQgJiYKKyAgICAgZ2l0IHVucGFjay1vYmplY3RzIC1uIDx0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrICYmCisgICAgIGdpdCB1bnBhY2stb2JqZWN0cyA8dGVzdC0yLSR7cGFja25hbWVfMn0ucGFjaycKKwordW5zZXQgR0lUX09CSkVDVF9ESVJFQ1RPUlkKK2NkICIkVFJBU0gvLmdpdDIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2sgdW5wYWNrIHdpdGggUkVGX0RFTFRBJyBcCisgICAgJyhjZCAuLi8uZ2l0ICYmIGZpbmQgb2JqZWN0cyAtdHlwZSBmIC1wcmludCkgfAorICAgICB3aGlsZSByZWFkIHBhdGgKKyAgICAgZG8KKyAgICAgICAgIGNtcCAkcGF0aCAuLi8uZ2l0LyRwYXRoIHx8IHsKKwkgICAgIGVjaG8gJHBhdGggZGlmZmVycy4KKwkgICAgIHJldHVybiAxCisJIH0KKyAgICAgZG9uZScKK2NkICIkVFJBU0giCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwYWNrIHdpdGggT0ZTX0RFTFRBJyBcCisgICAgJ3B3ZCAmJgorICAgICBwYWNrbmFtZV8zPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWRlbHRhLWJhc2Utb2Zmc2V0IHRlc3QtMyA8b2JqLWxpc3QpJworCitybSAtZnIgLmdpdDIKK21rZGlyIC5naXQyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd1bnBhY2sgd2l0aCBPRlNfREVMVEEnIFwKKyAgICAnR0lUX09CSkVDVF9ESVJFQ1RPUlk9LmdpdDIvb2JqZWN0cyAmJgorICAgICBleHBvcnQgR0lUX09CSkVDVF9ESVJFQ1RPUlkgJiYKKyAgICAgZ2l0IGluaXQgJiYKKyAgICAgZ2l0IHVucGFjay1vYmplY3RzIC1uIDx0ZXN0LTMtJHtwYWNrbmFtZV8zfS5wYWNrICYmCisgICAgIGdpdCB1bnBhY2stb2JqZWN0cyA8dGVzdC0zLSR7cGFja25hbWVfM30ucGFjaycKKwordW5zZXQgR0lUX09CSkVDVF9ESVJFQ1RPUlkKK2NkICIkVFJBU0gvLmdpdDIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2sgdW5wYWNrIHdpdGggT0ZTX0RFTFRBJyBcCisgICAgJyhjZCAuLi8uZ2l0ICYmIGZpbmQgb2JqZWN0cyAtdHlwZSBmIC1wcmludCkgfAorICAgICB3aGlsZSByZWFkIHBhdGgKKyAgICAgZG8KKyAgICAgICAgIGNtcCAkcGF0aCAuLi8uZ2l0LyRwYXRoIHx8IHsKKwkgICAgIGVjaG8gJHBhdGggZGlmZmVycy4KKwkgICAgIHJldHVybiAxCisJIH0KKyAgICAgZG9uZScKK2NkICIkVFJBU0giCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBhcmUgZGVsdGEgZmxhdm9ycycgJworCXBlcmwgLWUgJ1wnJworCQlkZWZpbmVkKCRfID0gLXMgJF8pIG9yIGRpZSBmb3IgQEFSR1Y7CisJCWV4aXQgMSBpZiAkQVJHVlswXSA8PSAkQVJHVlsxXTsKKwknXCcnIHRlc3QtMi0kcGFja25hbWVfMi5wYWNrIHRlc3QtMy0kcGFja25hbWVfMy5wYWNrCisnCisKK3JtIC1mciAuZ2l0MgorbWtkaXIgLmdpdDIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3VzZSBwYWNrZWQgb2JqZWN0cycgXAorICAgICdHSVRfT0JKRUNUX0RJUkVDVE9SWT0uZ2l0Mi9vYmplY3RzICYmCisgICAgIGV4cG9ydCBHSVRfT0JKRUNUX0RJUkVDVE9SWSAmJgorICAgICBnaXQgaW5pdCAmJgorICAgICBjcCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrIHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCAuZ2l0Mi9vYmplY3RzL3BhY2sgJiYgeworCSBnaXQgZGlmZi10cmVlIC0tcm9vdCAtcCAkY29tbWl0ICYmCisJIHdoaWxlIHJlYWQgb2JqZWN0CisJIGRvCisJICAgIHQ9YGdpdCBjYXQtZmlsZSAtdCAkb2JqZWN0YCAmJgorCSAgICBnaXQgY2F0LWZpbGUgJHQgJG9iamVjdCB8fCByZXR1cm4gMQorCSBkb25lIDxvYmotbGlzdAorICAgIH0gPmN1cnJlbnQgJiYKKyAgICBjbXAgZXhwZWN0IGN1cnJlbnQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd1c2UgcGFja2VkIGRlbHRpZmllZCAoUkVGX0RFTFRBKSBvYmplY3RzJyBcCisgICAgJ0dJVF9PQkpFQ1RfRElSRUNUT1JZPS5naXQyL29iamVjdHMgJiYKKyAgICAgZXhwb3J0IEdJVF9PQkpFQ1RfRElSRUNUT1JZICYmCisgICAgIHJtIC1mIC5naXQyL29iamVjdHMvcGFjay90ZXN0LSogJiYKKyAgICAgY3AgdGVzdC0yLSR7cGFja25hbWVfMn0ucGFjayB0ZXN0LTItJHtwYWNrbmFtZV8yfS5pZHggLmdpdDIvb2JqZWN0cy9wYWNrICYmIHsKKwkgZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLXAgJGNvbW1pdCAmJgorCSB3aGlsZSByZWFkIG9iamVjdAorCSBkbworCSAgICB0PWBnaXQgY2F0LWZpbGUgLXQgJG9iamVjdGAgJiYKKwkgICAgZ2l0IGNhdC1maWxlICR0ICRvYmplY3QgfHwgcmV0dXJuIDEKKwkgZG9uZSA8b2JqLWxpc3QKKyAgICB9ID5jdXJyZW50ICYmCisgICAgY21wIGV4cGVjdCBjdXJyZW50JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndXNlIHBhY2tlZCBkZWx0aWZpZWQgKE9GU19ERUxUQSkgb2JqZWN0cycgXAorICAgICdHSVRfT0JKRUNUX0RJUkVDVE9SWT0uZ2l0Mi9vYmplY3RzICYmCisgICAgIGV4cG9ydCBHSVRfT0JKRUNUX0RJUkVDVE9SWSAmJgorICAgICBybSAtZiAuZ2l0Mi9vYmplY3RzL3BhY2svdGVzdC0qICYmCisgICAgIGNwIHRlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2sgdGVzdC0zLSR7cGFja25hbWVfM30uaWR4IC5naXQyL29iamVjdHMvcGFjayAmJiB7CisJIGdpdCBkaWZmLXRyZWUgLS1yb290IC1wICRjb21taXQgJiYKKwkgd2hpbGUgcmVhZCBvYmplY3QKKwkgZG8KKwkgICAgdD1gZ2l0IGNhdC1maWxlIC10ICRvYmplY3RgICYmCisJICAgIGdpdCBjYXQtZmlsZSAkdCAkb2JqZWN0IHx8IHJldHVybiAxCisJIGRvbmUgPG9iai1saXN0CisgICAgfSA+Y3VycmVudCAmJgorICAgIGNtcCBleHBlY3QgY3VycmVudCcKKwordW5zZXQgR0lUX09CSkVDVF9ESVJFQ1RPUlkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Vydml2ZSBtaXNzaW5nIG9iamVjdHMvcGFjayBkaXJlY3RvcnknICcKKwkoCisJCXJtIC1mciBtaXNzaW5nLXBhY2sgJiYKKwkJbWtkaXIgbWlzc2luZy1wYWNrICYmCisJCWNkIG1pc3NpbmctcGFjayAmJgorCQlnaXQgaW5pdCAmJgorCQlHT1A9LmdpdC9vYmplY3RzL3BhY2sKKwkJcm0gLWZyICRHT1AgJiYKKwkJZ2l0IGluZGV4LXBhY2sgLS1zdGRpbiAtLWtlZXA9dGVzdCA8Li4vdGVzdC0zLSR7cGFja25hbWVfM30ucGFjayAmJgorCQl0ZXN0IC1mICRHT1AvcGFjay0ke3BhY2tuYW1lXzN9LnBhY2sgJiYKKwkJY21wICRHT1AvcGFjay0ke3BhY2tuYW1lXzN9LnBhY2sgLi4vdGVzdC0zLSR7cGFja25hbWVfM30ucGFjayAmJgorCQl0ZXN0IC1mICRHT1AvcGFjay0ke3BhY2tuYW1lXzN9LmlkeCAmJgorCQljbXAgJEdPUC9wYWNrLSR7cGFja25hbWVfM30uaWR4IC4uL3Rlc3QtMy0ke3BhY2tuYW1lXzN9LmlkeCAmJgorCQl0ZXN0IC1mICRHT1AvcGFjay0ke3BhY2tuYW1lXzN9LmtlZXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnkgcGFjaycgXAorICAgICdnaXQgdmVyaWZ5LXBhY2sJdGVzdC0xLSR7cGFja25hbWVfMX0uaWR4IFwKKwkJCXRlc3QtMi0ke3BhY2tuYW1lXzJ9LmlkeCBcCisJCQl0ZXN0LTMtJHtwYWNrbmFtZV8zfS5pZHgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnkgcGFjayAtdicgXAorICAgICdnaXQgdmVyaWZ5LXBhY2sgLXYJdGVzdC0xLSR7cGFja25hbWVfMX0uaWR4IFwKKwkJCXRlc3QtMi0ke3BhY2tuYW1lXzJ9LmlkeCBcCisJCQl0ZXN0LTMtJHtwYWNrbmFtZV8zfS5pZHgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnktcGFjayBjYXRjaGVzIG1pc21hdGNoZWQgLmlkeCBhbmQgLnBhY2sgZmlsZXMnIFwKKyAgICAnY2F0IHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCA+dGVzdC0zLmlkeCAmJgorICAgICBjYXQgdGVzdC0yLSR7cGFja25hbWVfMn0ucGFjayA+dGVzdC0zLnBhY2sgJiYKKyAgICAgaWYgZ2l0IHZlcmlmeS1wYWNrIHRlc3QtMy5pZHgKKyAgICAgdGhlbiBmYWxzZQorICAgICBlbHNlIDo7CisgICAgIGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgY2F0Y2hlcyBhIGNvcnJ1cHRlZCBwYWNrIHNpZ25hdHVyZScgXAorICAgICdjYXQgdGVzdC0xLSR7cGFja25hbWVfMX0ucGFjayA+dGVzdC0zLnBhY2sgJiYKKyAgICAgZWNobyB8IGRkIG9mPXRlc3QtMy5wYWNrIGNvdW50PTEgYnM9MSBjb252PW5vdHJ1bmMgc2Vlaz0yICYmCisgICAgIGlmIGdpdCB2ZXJpZnktcGFjayB0ZXN0LTMuaWR4CisgICAgIHRoZW4gZmFsc2UKKyAgICAgZWxzZSA6OworICAgICBmaScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ZlcmlmeS1wYWNrIGNhdGNoZXMgYSBjb3JydXB0ZWQgcGFjayB2ZXJzaW9uJyBcCisgICAgJ2NhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBlY2hvIHwgZGQgb2Y9dGVzdC0zLnBhY2sgY291bnQ9MSBicz0xIGNvbnY9bm90cnVuYyBzZWVrPTcgJiYKKyAgICAgaWYgZ2l0IHZlcmlmeS1wYWNrIHRlc3QtMy5pZHgKKyAgICAgdGhlbiBmYWxzZQorICAgICBlbHNlIDo7CisgICAgIGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgY2F0Y2hlcyBhIGNvcnJ1cHRlZCB0eXBlL3NpemUgb2YgdGhlIDFzdCBwYWNrZWQgb2JqZWN0IGRhdGEnIFwKKyAgICAnY2F0IHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgPnRlc3QtMy5wYWNrICYmCisgICAgIGVjaG8gfCBkZCBvZj10ZXN0LTMucGFjayBjb3VudD0xIGJzPTEgY29udj1ub3RydW5jIHNlZWs9MTIgJiYKKyAgICAgaWYgZ2l0IHZlcmlmeS1wYWNrIHRlc3QtMy5pZHgKKyAgICAgdGhlbiBmYWxzZQorICAgICBlbHNlIDo7CisgICAgIGZpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgY2F0Y2hlcyBhIGNvcnJ1cHRlZCBzdW0gb2YgdGhlIGluZGV4IGZpbGUgaXRzZWxmJyBcCisgICAgJ2w9YHdjIC1jIDx0ZXN0LTMuaWR4YCAmJgorICAgICBsPWBleHByICRsIC0gMjBgICYmCisgICAgIGNhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBwcmludGYgIiUyMHMiICIiIHwgZGQgb2Y9dGVzdC0zLmlkeCBjb3VudD0yMCBicz0xIGNvbnY9bm90cnVuYyBzZWVrPSRsICYmCisgICAgIGlmIGdpdCB2ZXJpZnktcGFjayB0ZXN0LTMucGFjaworICAgICB0aGVuIGZhbHNlCisgICAgIGVsc2UgOjsKKyAgICAgZmknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdidWlsZCBwYWNrIGluZGV4IGZvciBhbiBleGlzdGluZyBwYWNrJyBcCisgICAgJ2NhdCB0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBnaXQgaW5kZXgtcGFjayAtbyB0bXAuaWR4IHRlc3QtMy5wYWNrICYmCisgICAgIGNtcCB0bXAuaWR4IHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCAmJgorCisgICAgIGdpdCBpbmRleC1wYWNrIHRlc3QtMy5wYWNrICYmCisgICAgIGNtcCB0ZXN0LTMuaWR4IHRlc3QtMS0ke3BhY2tuYW1lXzF9LmlkeCAmJgorCisgICAgIGNhdCB0ZXN0LTItJHtwYWNrbmFtZV8yfS5wYWNrID50ZXN0LTMucGFjayAmJgorICAgICBnaXQgaW5kZXgtcGFjayAtbyB0bXAuaWR4IHRlc3QtMi0ke3BhY2tuYW1lXzJ9LnBhY2sgJiYKKyAgICAgY21wIHRtcC5pZHggdGVzdC0yLSR7cGFja25hbWVfMn0uaWR4ICYmCisKKyAgICAgZ2l0IGluZGV4LXBhY2sgdGVzdC0zLnBhY2sgJiYKKyAgICAgY21wIHRlc3QtMy5pZHggdGVzdC0yLSR7cGFja25hbWVfMn0uaWR4ICYmCisKKyAgICAgY2F0IHRlc3QtMy0ke3BhY2tuYW1lXzN9LnBhY2sgPnRlc3QtMy5wYWNrICYmCisgICAgIGdpdCBpbmRleC1wYWNrIC1vIHRtcC5pZHggdGVzdC0zLSR7cGFja25hbWVfM30ucGFjayAmJgorICAgICBjbXAgdG1wLmlkeCB0ZXN0LTMtJHtwYWNrbmFtZV8zfS5pZHggJiYKKworICAgICBnaXQgaW5kZXgtcGFjayB0ZXN0LTMucGFjayAmJgorICAgICBjbXAgdGVzdC0zLmlkeCB0ZXN0LTMtJHtwYWNrbmFtZV8zfS5pZHggJiYKKworICAgICA6JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnBhY2tpbmcgd2l0aCAtLXN0cmljdCcgJworCisJZm9yIGogaW4gYSBiIGMgZCBlIGYgZworCWRvCisJCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDkKKwkJZG8KKwkJCW89JChlY2hvICRqJGkgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwkJCWVjaG8gIjEwMDY0NCAkbwkwICRqJGkiCisJCWRvbmUKKwlkb25lID5MSVNUICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvIDxMSVNUICYmCisJTElTVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwloZWFkIC1uIDEwIExJU1QgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCUxJPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCXRhaWwgLW4gMTAgTElTVCB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisJU1Q9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlQQUNLNT0kKCBnaXQgcmV2LWxpc3QgLS1vYmplY3RzICIkTElTVCIgIiRMSSIgIiRTVCIgfCBcCisJCWdpdCBwYWNrLW9iamVjdHMgdGVzdC01ICkgJiYKKwlQQUNLNj0kKCAoCisJCQllY2hvICIkTElTVCIKKwkJCWVjaG8gIiRMSSIKKwkJCWVjaG8gIiRTVCIKKwkJICkgfCBnaXQgcGFjay1vYmplY3RzIHRlc3QtNiApICYmCisJdGVzdF9jcmVhdGVfcmVwbyB0ZXN0LTUgJiYKKwkoCisJCWNkIHRlc3QtNSAmJgorCQlnaXQgdW5wYWNrLW9iamVjdHMgLS1zdHJpY3QgPC4uL3Rlc3QtNS0kUEFDSzUucGFjayAmJgorCQlnaXQgbHMtdHJlZSAtciAkTElTVCAmJgorCQlnaXQgbHMtdHJlZSAtciAkTEkgJiYKKwkJZ2l0IGxzLXRyZWUgLXIgJFNUCisJKSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdGVzdC02ICYmCisJKAorCQkjIHRyZWUtb25seSBpbnRvIGVtcHR5IHJlcG8gLS0gbWFueSB1bnJlYWNoYWJsZXMKKwkJY2QgdGVzdC02ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCB1bnBhY2stb2JqZWN0cyAtLXN0cmljdCA8Li4vdGVzdC02LSRQQUNLNi5wYWNrCisJKSAmJgorCSgKKwkJIyBhbHJlYWR5IHBvcHVsYXRlZCAtLSBubyB1bnJlYWNoYWJsZXMKKwkJY2QgdGVzdC01ICYmCisJCWdpdCB1bnBhY2stb2JqZWN0cyAtLXN0cmljdCA8Li4vdGVzdC02LSRQQUNLNi5wYWNrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIHdpdGggLS1zdHJpY3QnICcKKworCWZvciBqIGluIGEgYiBjIGQgZSBmIGcKKwlkbworCQlmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5CisJCWRvCisJCQlvPSQoZWNobyAkaiRpIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJCQllY2hvICIxMDA2NDQgJG8JMCAkaiRpIgorCQlkb25lCisJZG9uZSA+TElTVCAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyA8TElTVCAmJgorCUxJU1Q9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJaGVhZCAtbiAxMCBMSVNUIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlMST0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwl0YWlsIC1uIDEwIExJU1QgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCVNUPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJUEFDSzU9JCggZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAiJExJU1QiICIkTEkiICIkU1QiIHwgXAorCQlnaXQgcGFjay1vYmplY3RzIHRlc3QtNSApICYmCisJUEFDSzY9JCggKAorCQkJZWNobyAiJExJU1QiCisJCQllY2hvICIkTEkiCisJCQllY2hvICIkU1QiCisJCSApIHwgZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTYgKSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gdGVzdC03ICYmCisJKAorCQljZCB0ZXN0LTcgJiYKKwkJZ2l0IGluZGV4LXBhY2sgLS1zdHJpY3QgLS1zdGRpbiA8Li4vdGVzdC01LSRQQUNLNS5wYWNrICYmCisJCWdpdCBscy10cmVlIC1yICRMSVNUICYmCisJCWdpdCBscy10cmVlIC1yICRMSSAmJgorCQlnaXQgbHMtdHJlZSAtciAkU1QKKwkpICYmCisJdGVzdF9jcmVhdGVfcmVwbyB0ZXN0LTggJiYKKwkoCisJCSMgdHJlZS1vbmx5IGludG8gZW1wdHkgcmVwbyAtLSBtYW55IHVucmVhY2hhYmxlcworCQljZCB0ZXN0LTggJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS1zdHJpY3QgLS1zdGRpbiA8Li4vdGVzdC02LSRQQUNLNi5wYWNrCisJKSAmJgorCSgKKwkJIyBhbHJlYWR5IHBvcHVsYXRlZCAtLSBubyB1bnJlYWNoYWJsZXMKKwkJY2QgdGVzdC03ICYmCisJCWdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IC0tc3RkaW4gPC4uL3Rlc3QtNi0kUEFDSzYucGFjaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9ub3IgcGFjay5wYWNrU2l6ZUxpbWl0JyAnCisJZ2l0IGNvbmZpZyBwYWNrLnBhY2tTaXplTGltaXQgM20gJiYKKwlwYWNrbmFtZV8xMD0kKGdpdCBwYWNrLW9iamVjdHMgdGVzdC0xMCA8b2JqLWxpc3QpICYmCisJdGVzdCAyID0gJChscyB0ZXN0LTEwLSoucGFjayB8IHdjIC1sKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgcmVzdWx0aW5nIHBhY2tzJyAnCisJZ2l0IHZlcmlmeS1wYWNrIHRlc3QtMTAtKi5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvbGVyYXRlIHBhY2tzaXplbGltaXQgc21hbGxlciB0aGFuIGJpZ2dlc3Qgb2JqZWN0JyAnCisJZ2l0IGNvbmZpZyBwYWNrLnBhY2tTaXplTGltaXQgMSAmJgorCXBhY2tuYW1lXzExPSQoZ2l0IHBhY2stb2JqZWN0cyB0ZXN0LTExIDxvYmotbGlzdCkgJiYKKwl0ZXN0IDUgPSAkKGxzIHRlc3QtMTEtKi5wYWNrIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSByZXN1bHRpbmcgcGFja3MnICcKKwlnaXQgdmVyaWZ5LXBhY2sgdGVzdC0xMS0qLnBhY2sKKycKKworIworIyBXQVJOSU5HIQorIworIyBUaGUgZm9sbG93aW5nIHRlc3QgaXMgZGVzdHJ1Y3RpdmUuICBQbGVhc2Uga2VlcCB0aGUgbmV4dAorIyB0d28gdGVzdHMgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdmYWtlIGEgU0hBMSBoYXNoIGNvbGxpc2lvbicgXAorICAgICd0ZXN0IC1mCS5naXQvb2JqZWN0cy9jOC8yZGUxOTMxMmI2YzM2OTVjMGMxOGY3MDcwOWE2YzUzNTY4MmE2NyAmJgorICAgICBjcCAtZgkuZ2l0L29iamVjdHMvOWQvMjM1ZWQwN2NkMTk4MTFhNmNlYjM0MmRlODJmMTkwZTQ5YzlmNjggXAorCQkuZ2l0L29iamVjdHMvYzgvMmRlMTkzMTJiNmMzNjk1YzBjMThmNzA3MDlhNmM1MzU2ODJhNjcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtYWtlIHN1cmUgaW5kZXgtcGFjayBkZXRlY3RzIHRoZSBTSEExIGNvbGxpc2lvbicgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtbyBiYWQuaWR4IHRlc3QtMy5wYWNrIDI+bXNnICYmCisgICAgIHRlc3RfaTE4bmdyZXAgIlNIQTEgQ09MTElTSU9OIEZPVU5EIiBtc2cnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtYWtlIHN1cmUgaW5kZXgtcGFjayBkZXRlY3RzIHRoZSBTSEExIGNvbGxpc2lvbiAobGFyZ2UgYmxvYnMpJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb3JlLmJpZ2ZpbGV0aHJlc2hvbGQ9MSBpbmRleC1wYWNrIC1vIGJhZC5pZHggdGVzdC0zLnBhY2sgMj5tc2cgJiYKKyAgICAgdGVzdF9pMThuZ3JlcCAiU0hBMSBDT0xMSVNJT04gRk9VTkQiIG1zZycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzAxLXNsaWRpbmctd2luZG93LnNoIGIvdC90NTMwMS1zbGlkaW5nLXdpbmRvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZmM1YWY2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwMS1zbGlkaW5nLXdpbmRvdy5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFNoYXduIFBlYXJjZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdtbWFwIHNsaWRpbmcgd2luZG93IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZXR1cCcgXAorICAgICdybSAtZiAuZ2l0L2luZGV4KiAmJgorICAgICBmb3IgaSBpbiBhIGIgYworICAgICBkbworICAgICAgICAgZWNobyAkaSA+JGkgJiYKKyAgICAgICAgIHRlc3QtZ2VucmFuZG9tICIkaSIgMzI3NjggPj4kaSAmJgorICAgICAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAkaSB8fCByZXR1cm4gMQorICAgICBkb25lICYmCisgICAgIGVjaG8gZCA+ZCAmJiBjYXQgYyA+PmQgJiYgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBkICYmCisgICAgIHRyZWU9YGdpdCB3cml0ZS10cmVlYCAmJgorICAgICBjb21taXQxPWBnaXQgY29tbWl0LXRyZWUgJHRyZWUgPC9kZXYvbnVsbGAgJiYKKyAgICAgZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkY29tbWl0MSAmJgorICAgICBnaXQgcmVwYWNrIC1hIC1kICYmCisgICAgIHRlc3QgImBnaXQgY291bnQtb2JqZWN0c2AiID0gIjAgb2JqZWN0cywgMCBraWxvYnl0ZXMiICYmCisgICAgIHBhY2sxPWBscyAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2tgICYmCisgICAgIHRlc3QgLWYgIiRwYWNrMSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnktcGFjayAtdiwgZGVmYXVsdHMnIFwKKyAgICAnZ2l0IHZlcmlmeS1wYWNrIC12ICIkcGFjazEiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgLXYsIHBhY2tlZEdpdFdpbmRvd1NpemUgPT0gMSBwYWdlJyBcCisgICAgJ2dpdCBjb25maWcgY29yZS5wYWNrZWRHaXRXaW5kb3dTaXplIDUxMiAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgLXYgIiRwYWNrMSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICd2ZXJpZnktcGFjayAtdiwgcGFja2VkR2l0e1dpbmRvd1NpemUsTGltaXR9ID09IDEgcGFnZScgXAorICAgICdnaXQgY29uZmlnIGNvcmUucGFja2VkR2l0V2luZG93U2l6ZSA1MTIgJiYKKyAgICAgZ2l0IGNvbmZpZyBjb3JlLnBhY2tlZEdpdExpbWl0IDUxMiAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgLXYgIiRwYWNrMSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZXBhY2sgLWEgLWQsIHBhY2tlZEdpdHtXaW5kb3dTaXplLExpbWl0fSA9PSAxIHBhZ2UnIFwKKyAgICAnZ2l0IGNvbmZpZyBjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUgNTEyICYmCisgICAgIGdpdCBjb25maWcgY29yZS5wYWNrZWRHaXRMaW1pdCA1MTIgJiYKKyAgICAgY29tbWl0Mj1gZ2l0IGNvbW1pdC10cmVlICR0cmVlIC1wICRjb21taXQxIDwvZGV2L251bGxgICYmCisgICAgIGdpdCB1cGRhdGUtcmVmIEhFQUQgJGNvbW1pdDIgJiYKKyAgICAgZ2l0IHJlcGFjayAtYSAtZCAmJgorICAgICB0ZXN0ICJgZ2l0IGNvdW50LW9iamVjdHNgIiA9ICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiAmJgorICAgICBwYWNrMj1gbHMgLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrYCAmJgorICAgICB0ZXN0IC1mICIkcGFjazIiICYmCisgICAgIHRlc3QgIiRwYWNrMSIgXCE9ICIkcGFjazIiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAndmVyaWZ5LXBhY2sgLXYsIGRlZmF1bHRzJyBcCisgICAgJ2dpdCBjb25maWcgLS11bnNldCBjb3JlLnBhY2tlZEdpdFdpbmRvd1NpemUgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUucGFja2VkR2l0TGltaXQgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrIC12ICIkcGFjazIiJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMDItcGFjay1pbmRleC5zaCBiL3QvdDUzMDItcGFjay1pbmRleC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZGM1ZWM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwMi1wYWNrLWluZGV4LnNoCkBAIC0wLDAgKzEsMjY1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IE5pY29sYXMgUGl0cmUKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ncGFjayBpbmRleCB3aXRoIDY0LWJpdCBvZmZzZXRzIGFuZCBvYmplY3QgQ1JDJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzZXR1cCcgXAorICAgICdybSAtcmYgLmdpdCAmJgorICAgICBnaXQgaW5pdCAmJgorICAgICBnaXQgY29uZmlnIHBhY2sudGhyZWFkcyAxICYmCisgICAgIGk9MSAmJgorICAgICB3aGlsZSB0ZXN0ICRpIC1sZSAxMDAKKyAgICAgZG8KKyAgICAgICAgIGlpaT1gcHJpbnRmICclMDNpJyAkaWAKKyAgICAgICAgIHRlc3QtZ2VucmFuZG9tICJiYXIiIDIwMCA+IHdpZGVfZGVsdGFfJGlpaSAmJgorICAgICAgICAgdGVzdC1nZW5yYW5kb20gImJheiAkaWlpIiA1MCA+PiB3aWRlX2RlbHRhXyRpaWkgJiYKKyAgICAgICAgIHRlc3QtZ2VucmFuZG9tICJmb28iJGkgMTAwID4gZGVlcF9kZWx0YV8kaWlpICYmCisgICAgICAgICB0ZXN0LWdlbnJhbmRvbSAiZm9vImBleHByICRpICsgMWAgMTAwID4+IGRlZXBfZGVsdGFfJGlpaSAmJgorICAgICAgICAgdGVzdC1nZW5yYW5kb20gImZvbyJgZXhwciAkaSArIDJgIDEwMCA+PiBkZWVwX2RlbHRhXyRpaWkgJiYKKyAgICAgICAgIGVjaG8gJGlpaSA+ZmlsZV8kaWlpICYmCisgICAgICAgICB0ZXN0LWdlbnJhbmRvbSAiJGlpaSIgODE5MiA+PmZpbGVfJGlpaSAmJgorICAgICAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlXyRpaWkgZGVlcF9kZWx0YV8kaWlpIHdpZGVfZGVsdGFfJGlpaSAmJgorICAgICAgICAgaT1gZXhwciAkaSArIDFgIHx8IHJldHVybiAxCisgICAgIGRvbmUgJiYKKyAgICAgeyBlY2hvIDEwMSAmJiB0ZXN0LWdlbnJhbmRvbSAxMDAgODE5MjsgfSA+ZmlsZV8xMDEgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmaWxlXzEwMSAmJgorICAgICB0cmVlPWBnaXQgd3JpdGUtdHJlZWAgJiYKKyAgICAgY29tbWl0PWBnaXQgY29tbWl0LXRyZWUgJHRyZWUgPC9kZXYvbnVsbGAgJiYgeworCSBlY2hvICR0cmVlICYmCisJIGdpdCBscy10cmVlICR0cmVlIHwgc2VkIC1lICJzLy4qIFxcKFswLTlhLWZdKlxcKQkuKi9cXDEvIgorICAgICB9ID5vYmotbGlzdCAmJgorICAgICBnaXQgdXBkYXRlLXJlZiBIRUFEICRjb21taXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdwYWNrLW9iamVjdHMgd2l0aCBpbmRleCB2ZXJzaW9uIDEnIFwKKyAgICAncGFjazE9JChnaXQgcGFjay1vYmplY3RzIC0taW5kZXgtdmVyc2lvbj0xIHRlc3QtMSA8b2JqLWxpc3QpICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAtdiAidGVzdC0xLSR7cGFjazF9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjay1vYmplY3RzIHdpdGggaW5kZXggdmVyc2lvbiAyJyBcCisgICAgJ3BhY2syPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MiB0ZXN0LTIgPG9iai1saXN0KSAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgLXYgInRlc3QtMi0ke3BhY2syfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2JvdGggcGFja3Mgc2hvdWxkIGJlIGlkZW50aWNhbCcgXAorICAgICdjbXAgInRlc3QtMS0ke3BhY2sxfS5wYWNrIiAidGVzdC0yLSR7cGFjazJ9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnaW5kZXggdjEgYW5kIGluZGV4IHYyIHNob3VsZCBiZSBkaWZmZXJlbnQnIFwKKyAgICAnISBjbXAgInRlc3QtMS0ke3BhY2sxfS5pZHgiICJ0ZXN0LTItJHtwYWNrMn0uaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luZGV4LXBhY2sgd2l0aCBpbmRleCB2ZXJzaW9uIDEnIFwKKyAgICAnZ2l0IGluZGV4LXBhY2sgLS1pbmRleC12ZXJzaW9uPTEgLW8gMS5pZHggInRlc3QtMS0ke3BhY2sxfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luZGV4LXBhY2sgd2l0aCBpbmRleCB2ZXJzaW9uIDInIFwKKyAgICAnZ2l0IGluZGV4LXBhY2sgLS1pbmRleC12ZXJzaW9uPTIgLW8gMi5pZHggInRlc3QtMS0ke3BhY2sxfS5wYWNrIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luZGV4LXBhY2sgcmVzdWx0cyBzaG91bGQgbWF0Y2ggcGFjay1vYmplY3RzIG9uZXMnIFwKKyAgICAnY21wICJ0ZXN0LTEtJHtwYWNrMX0uaWR4IiAiMS5pZHgiICYmCisgICAgIGNtcCAidGVzdC0yLSR7cGFjazJ9LmlkeCIgIjIuaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayAtLXZlcmlmeSBvbiBpbmRleCB2ZXJzaW9uIDEnICcKKwlnaXQgaW5kZXgtcGFjayAtLXZlcmlmeSAidGVzdC0xLSR7cGFjazF9LnBhY2siCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgLS12ZXJpZnkgb24gaW5kZXggdmVyc2lvbiAyJyAnCisJZ2l0IGluZGV4LXBhY2sgLS12ZXJpZnkgInRlc3QtMi0ke3BhY2syfS5wYWNrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAncGFjay1vYmplY3RzIC0taW5kZXgtdmVyc2lvbj0yLCBpcyBub3QgYWNjZXB0ZWQnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IHBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MiwgdGVzdC0zIDxvYmotbGlzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2luZGV4IHYyOiBmb3JjZSBzb21lIDY0LWJpdCBvZmZzZXRzIHdpdGggcGFjay1vYmplY3RzJyBcCisgICAgJ3BhY2szPSQoZ2l0IHBhY2stb2JqZWN0cyAtLWluZGV4LXZlcnNpb249MiwweDQwMDAwIHRlc3QtMyA8b2JqLWxpc3QpJworCitpZiBtc2c9JChnaXQgdmVyaWZ5LXBhY2sgLXYgInRlc3QtMy0ke3BhY2szfS5wYWNrIiAyPiYxKSB8fAorCSEgKGVjaG8gIiRtc2ciIHwgZ3JlcCAicGFjayB0b28gbGFyZ2UgLiogb2ZmX3QiKQordGhlbgorCXRlc3Rfc2V0X3ByZXJlcSBPRkY2NF9UCitlbHNlCisJc2F5ICIjIHNraXBwaW5nIHRlc3RzIGNvbmNlcm5pbmcgNjQtYml0IG9mZnNldHMiCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgXAorICAgICdpbmRleCB2MjogdmVyaWZ5IGEgcGFjayB3aXRoIHNvbWUgNjQtYml0IG9mZnNldHMnIFwKKyAgICAnZ2l0IHZlcmlmeS1wYWNrIC12ICJ0ZXN0LTMtJHtwYWNrM30ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgT0ZGNjRfVCBcCisgICAgJzY0LWJpdCBvZmZzZXRzOiBzaG91bGQgYmUgZGlmZmVyZW50IGZyb20gcHJldmlvdXMgaW5kZXggdjIgcmVzdWx0cycgXAorICAgICchIGNtcCAidGVzdC0yLSR7cGFjazJ9LmlkeCIgInRlc3QtMy0ke3BhY2szfS5pZHgiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgXAorICAgICdpbmRleCB2MjogZm9yY2Ugc29tZSA2NC1iaXQgb2Zmc2V0cyB3aXRoIGluZGV4LXBhY2snIFwKKyAgICAnZ2l0IGluZGV4LXBhY2sgLS1pbmRleC12ZXJzaW9uPTIsMHg0MDAwMCAtbyAzLmlkeCAidGVzdC0xLSR7cGFjazF9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgXAorICAgICc2NC1iaXQgb2Zmc2V0czogaW5kZXgtcGFjayByZXN1bHQgc2hvdWxkIG1hdGNoIHBhY2stb2JqZWN0cyBvbmUnIFwKKyAgICAnY21wICJ0ZXN0LTMtJHtwYWNrM30uaWR4IiAiMy5pZHgiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgJ2luZGV4LXBhY2sgLS12ZXJpZnkgb24gNjQtYml0IG9mZnNldCB2MiAoY2hlYXQpJyAnCisJIyBUaGlzIGNoZWF0cyBieSBrbm93aW5nIHdoaWNoIGxvd2VyIG9mZnNldCBzaG91bGQgc3RpbGwgYmUgZW5jb2RlZAorCSMgaW4gNjQtYml0IHJlcHJlc2VudGF0aW9uLgorCWdpdCBpbmRleC1wYWNrIC0tdmVyaWZ5IC0taW5kZXgtdmVyc2lvbj0yLDB4NDAwMDAgInRlc3QtMy0ke3BhY2szfS5wYWNrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE9GRjY0X1QgJ2luZGV4LXBhY2sgLS12ZXJpZnkgb24gNjQtYml0IG9mZnNldCB2MicgJworCWdpdCBpbmRleC1wYWNrIC0tdmVyaWZ5ICJ0ZXN0LTMtJHtwYWNrM30ucGFjayIKKycKKworIyByZXR1cm5zIHRoZSBvYmplY3QgbnVtYmVyIGZvciBnaXZlbiBvYmplY3QgaW4gZ2l2ZW4gcGFjayBpbmRleAoraW5kZXhfb2JqX25yKCkKK3sKKyAgICBpZHhfZmlsZT0kMQorICAgIG9iamVjdF9zaGExPSQyCisgICAgbnI9MAorICAgIGdpdCBzaG93LWluZGV4IDwgJGlkeF9maWxlIHwKKyAgICB3aGlsZSByZWFkIG9mZnMgc2hhMSBleHRyYQorICAgIGRvCisgICAgICBucj0kKCgkbnIgKyAxKSkKKyAgICAgIHRlc3QgIiRzaGExIiA9ICIkb2JqZWN0X3NoYTEiIHx8IGNvbnRpbnVlCisgICAgICBlY2hvICIkKCgkbnIgLSAxKSkiCisgICAgICBicmVhaworICAgIGRvbmUKK30KKworIyByZXR1cm5zIHRoZSBwYWNrIG9mZnNldCBmb3IgZ2l2ZW4gb2JqZWN0IGFzIGZvdW5kIGluIGdpdmVuIHBhY2sgaW5kZXgKK2luZGV4X29ial9vZmZzZXQoKQoreworICAgIGlkeF9maWxlPSQxCisgICAgb2JqZWN0X3NoYTE9JDIKKyAgICBnaXQgc2hvdy1pbmRleCA8ICRpZHhfZmlsZSB8IGdyZXAgJG9iamVjdF9zaGExIHwKKyAgICAoIHJlYWQgb2ZmcyBleHRyYSAmJiBlY2hvICIkb2ZmcyIgKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYxXSAxKSBzdHJlYW0gcGFjayB0byByZXBvc2l0b3J5JyBcCisgICAgJ2dpdCBpbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0xIC0tc3RkaW4gPCAidGVzdC0xLSR7cGFjazF9LnBhY2siICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IGNvdW50LW9iamVjdHMgfCAoIHJlYWQgbnIgcmVzdCAmJiB0ZXN0ICIkbnIiIC1lcSAxICkgJiYKKyAgICAgY21wICJ0ZXN0LTEtJHtwYWNrMX0ucGFjayIgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0ucGFjayIgJiYKKyAgICAgY21wICJ0ZXN0LTEtJHtwYWNrMX0uaWR4IiAgIi5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1tpbmRleCB2MV0gMikgY3JlYXRlIGEgc3RlYWx0aCBjb3JydXB0aW9uIGluIGEgZGVsdGEgYmFzZSByZWZlcmVuY2UnIFwKKyAgICAnIyBUaGlzIHRlc3QgYXNzdW1lcyBmaWxlXzEwMSBpcyBhIGRlbHRhIHNtYWxsZXIgdGhhbiAxNiBieXRlcy4KKyAgICAgIyBJdCBzaG91bGQgYmUgYWdhaW5zdCBmaWxlXzEwMCBidXQgd2Ugc3Vic3RpdHV0ZSBpdHMgYmFzZSBmb3IgZmlsZV8wOTkKKyAgICAgc2hhMV8xMDE9YGdpdCBoYXNoLW9iamVjdCBmaWxlXzEwMWAgJiYKKyAgICAgc2hhMV8wOTk9YGdpdCBoYXNoLW9iamVjdCBmaWxlXzA5OWAgJiYKKyAgICAgb2Zmc18xMDE9YGluZGV4X29ial9vZmZzZXQgMS5pZHggJHNoYTFfMTAxYCAmJgorICAgICBucl8wOTk9YGluZGV4X29ial9uciAxLmlkeCAkc2hhMV8wOTlgICYmCisgICAgIGNobW9kICt3ICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LnBhY2siICYmCisgICAgIGRkIG9mPSIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LnBhY2siIHNlZWs9JCgoJG9mZnNfMTAxICsgMSkpIFwKKyAgICAgICAgaWY9Ii5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrMX0uaWR4IiBcCisgICAgICAgIHNraXA9JCgoNCArIDI1NiAqIDQgKyAkbnJfMDk5ICogMjQpKSBcCisgICAgICAgIGJzPTEgY291bnQ9MjAgY29udj1ub3RydW5jICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRzaGExXzEwMSA+IGZpbGVfMTAxX2ZvbzEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjFdIDMpIGNvcnJ1cHRlZCBkZWx0YSBoYXBwaWx5IHJldHVybmVkIHdyb25nIGRhdGEnIFwKKyAgICAndGVzdCAtZiBmaWxlXzEwMV9mb28xICYmICEgY21wIGZpbGVfMTAxIGZpbGVfMTAxX2ZvbzEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjFdIDQpIGNvbmZpcm0gdGhhdCB0aGUgcGFjayBpcyBhY3R1YWxseSBjb3JydXB0ZWQnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sgLS1mdWxsICRjb21taXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjFdIDUpIHBhY2stb2JqZWN0cyBoYXBwaWx5IHJldXNlcyBjb3JydXB0ZWQgZGF0YScgXAorICAgICdwYWNrND0kKGdpdCBwYWNrLW9iamVjdHMgdGVzdC00IDxvYmotbGlzdCkgJiYKKyAgICAgdGVzdCAtZiAidGVzdC00LSR7cGFjazR9LnBhY2siJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYxXSA2KSBuZXdseSBjcmVhdGVkIHBhY2sgaXMgQkFEICEnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IHZlcmlmeS1wYWNrIC12ICJ0ZXN0LTQtJHtwYWNrNH0ucGFjayInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjJdIDEpIHN0cmVhbSBwYWNrIHRvIHJlcG9zaXRvcnknIFwKKyAgICAncm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorICAgICBnaXQgaW5kZXgtcGFjayAtLWluZGV4LXZlcnNpb249MiAtLXN0ZGluIDwgInRlc3QtMS0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCBjb3VudC1vYmplY3RzIHwgKCByZWFkIG5yIHJlc3QgJiYgdGVzdCAiJG5yIiAtZXEgMSApICYmCisgICAgIGNtcCAidGVzdC0xLSR7cGFjazF9LnBhY2siICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LnBhY2siICYmCisgICAgIGNtcCAidGVzdC0yLSR7cGFjazF9LmlkeCIgICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdbaW5kZXggdjJdIDIpIGNyZWF0ZSBhIHN0ZWFsdGggY29ycnVwdGlvbiBpbiBhIGRlbHRhIGJhc2UgcmVmZXJlbmNlJyBcCisgICAgJyMgVGhpcyB0ZXN0IGFzc3VtZXMgZmlsZV8xMDEgaXMgYSBkZWx0YSBzbWFsbGVyIHRoYW4gMTYgYnl0ZXMuCisgICAgICMgSXQgc2hvdWxkIGJlIGFnYWluc3QgZmlsZV8xMDAgYnV0IHdlIHN1YnN0aXR1dGUgaXRzIGJhc2UgZm9yIGZpbGVfMDk5CisgICAgIHNoYTFfMTAxPWBnaXQgaGFzaC1vYmplY3QgZmlsZV8xMDFgICYmCisgICAgIHNoYTFfMDk5PWBnaXQgaGFzaC1vYmplY3QgZmlsZV8wOTlgICYmCisgICAgIG9mZnNfMTAxPWBpbmRleF9vYmpfb2Zmc2V0IDEuaWR4ICRzaGExXzEwMWAgJiYKKyAgICAgbnJfMDk5PWBpbmRleF9vYmpfbnIgMS5pZHggJHNoYTFfMDk5YCAmJgorICAgICBjaG1vZCArdyAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBkZCBvZj0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiBzZWVrPSQoKCRvZmZzXzEwMSArIDEpKSBcCisgICAgICAgIGlmPSIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCIgXAorICAgICAgICBza2lwPSQoKDggKyAyNTYgKiA0ICsgJG5yXzA5OSAqIDIwKSkgXAorICAgICAgICBicz0xIGNvdW50PTIwIGNvbnY9bm90cnVuYyAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkc2hhMV8xMDEgPiBmaWxlXzEwMV9mb28yJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYyXSAzKSBjb3JydXB0ZWQgZGVsdGEgaGFwcGlseSByZXR1cm5lZCB3cm9uZyBkYXRhJyBcCisgICAgJ3Rlc3QgLWYgZmlsZV8xMDFfZm9vMiAmJiAhIGNtcCBmaWxlXzEwMSBmaWxlXzEwMV9mb28yJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYyXSA0KSBjb25maXJtIHRoYXQgdGhlIHBhY2sgaXMgYWN0dWFsbHkgY29ycnVwdGVkJyBcCisgICAgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tZnVsbCAkY29tbWl0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYyXSA1KSBwYWNrLW9iamVjdHMgcmVmdXNlcyB0byByZXVzZSBjb3JydXB0ZWQgZGF0YScgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgcGFjay1vYmplY3RzIHRlc3QtNSA8b2JqLWxpc3QgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHBhY2stb2JqZWN0cyAtLW5vLXJldXNlLW9iamVjdCB0ZXN0LTYgPG9iai1saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnW2luZGV4IHYyXSA2KSB2ZXJpZnktcGFjayBkZXRlY3RzIENSQyBtaXNtYXRjaCcgXAorICAgICdybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisgICAgIGdpdCBpbmRleC1wYWNrIC0taW5kZXgtdmVyc2lvbj0yIC0tc3RkaW4gPCAidGVzdC0xLSR7cGFjazF9LnBhY2siICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIiAmJgorICAgICBvYmo9YGdpdCBoYXNoLW9iamVjdCBmaWxlXzAwMWAgJiYKKyAgICAgbnI9YGluZGV4X29ial9uciAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiICRvYmpgICYmCisgICAgIGNobW9kICt3ICIuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeCIgJiYKKyAgICAgcHJpbnRmIHh4eHggfCBkZCBvZj0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5pZHgiIGNvbnY9bm90cnVuYyBcCisgICAgICAgIGJzPTEgY291bnQ9NCBzZWVrPSQoKDggKyAyNTYgKiA0ICsgYHdjIC1sIDxvYmotbGlzdGAgKiAyMCArICRuciAqIDQpKSAmJgorICAgICAoIHdoaWxlIHJlYWQgb2JqCisgICAgICAgZG8gZ2l0IGNhdC1maWxlIC1wICRvYmogPi9kZXYvbnVsbCB8fCBleGl0IDEKKyAgICAgICBkb25lIDxvYmotbGlzdCApICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktcGFjayAiLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2sxfS5wYWNrIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW5uaW5nIGluZGV4LXBhY2sgaW4gdGhlIG9iamVjdCBzdG9yZScgJworICAgIHJtIC1mIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKyAgICBjcCB0ZXN0LTEtJHtwYWNrMX0ucGFjayAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LnBhY2sgJiYKKyAgICAoCisJY2QgLmdpdC9vYmplY3RzL3BhY2sKKwlnaXQgaW5kZXgtcGFjayBwYWNrLSR7cGFjazF9LnBhY2sKKyAgICApICYmCisgICAgdGVzdCAtZiAuZ2l0L29iamVjdHMvcGFjay9wYWNrLSR7cGFjazF9LmlkeAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIC0tc3RyaWN0IHdhcm5zIHVwb24gbWlzc2luZyB0YWdnZXIgaW4gdGFnJyAnCisgICAgc2hhPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorICAgIGNhdCA+d3JvbmctdGFnIDw8RU9GICYmCitvYmplY3QgJHNoYQordHlwZSBjb21taXQKK3RhZyBndXRlbiB0YWcKKworVGhpcyBpcyBhbiBpbnZhbGlkIHRhZy4KK0VPRgorCisgICAgdGFnPSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRhZyAtdyAtLXN0ZGluIDx3cm9uZy10YWcpICYmCisgICAgcGFjazE9JChlY2hvICR0YWcgJHNoYSB8IGdpdCBwYWNrLW9iamVjdHMgdGFnLXRlc3QpICYmCisgICAgZWNobyByZW1vdmUgdGFnIG9iamVjdCAmJgorICAgIHRoaXJ0eWVpZ2h0PSR7dGFnIz8/fSAmJgorICAgIHJtIC1mIC5naXQvb2JqZWN0cy8ke3RhZyUkdGhpcnR5ZWlnaHR9LyR0aGlydHllaWdodCAmJgorICAgIGdpdCBpbmRleC1wYWNrIC0tc3RyaWN0IHRhZy10ZXN0LSR7cGFjazF9LnBhY2sgMj5lcnIgJiYKKyAgICBncmVwICJed2FybmluZzouKiBleHBlY3RlZCAudGFnZ2VyLiBsaW5lIiBlcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzAzLXBhY2stY29ycnVwdGlvbi1yZXNpbGllbmNlLnNoIGIvdC90NTMwMy1wYWNrLWNvcnJ1cHRpb24tcmVzaWxpZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NjNiMDJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTMwMy1wYWNrLWNvcnJ1cHRpb24tcmVzaWxpZW5jZS5zaApAQCAtMCwwICsxLDMxNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBOaWNvbGFzIFBpdHJlCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Jlc2lsaWVuY2UgdG8gcGFjayBjb3JydXB0aW9ucyB3aXRoIHJlZHVuZGFudCBvYmplY3RzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgTm90ZTogdGhlIHRlc3Qgb2JqZWN0cyBhcmUgY3JlYXRlZCB3aXRoIGtub3dsZWRnZSBvZiB0aGVpciBwYWNrIGVuY29kaW5nCisjIHRvIGVuc3VyZSBnb29kIGNvZGUgcGF0aCBjb3ZlcmFnZSwgYW5kIHRvIGZhY2lsaXRhdGUgZGlyZWN0IGFsdGVyYXRpb24KKyMgbGF0ZXIgb24uICBUaGUgYXNzdW1lZCBjaGFyYWN0ZXJpc3RpY3MgYXJlOgorIworIyAxKSBibG9iXzIgaXMgYSBkZWx0YSB3aXRoIGJsb2JfMSBmb3IgYmFzZSBhbmQgYmxvYl8zIGlzIGEgZGVsdGEgd2l0aCBibG9iMgorIyAgICBmb3IgYmFzZSwgc3VjaCB0aGF0IGJsb2JfMyBkZWx0YSBkZXB0aCBpcyAyOworIworIyAyKSB0aGUgYnVsayBvZiBvYmplY3QgZGF0YSBpcyB1bmNvbXByZXNzaWJsZSBzbyB0aGUgdGV4dCBwYXJ0IHJlbWFpbnMKKyMgICAgdmlzaWJsZTsKKyMKKyMgMykgb2JqZWN0IGhlYWRlciBpcyBhbHdheXMgMiBieXRlcy4KKworY3JlYXRlX3Rlc3RfZmlsZXMoKSB7CisgICAgdGVzdC1nZW5yYW5kb20gImZvbyIgMjAwMCA+IGZpbGVfMSAmJgorICAgIHRlc3QtZ2VucmFuZG9tICJmb28iIDE4MDAgPiBmaWxlXzIgJiYKKyAgICB0ZXN0LWdlbnJhbmRvbSAiZm9vIiAxODAwID4gZmlsZV8zICYmCisgICAgZWNobyAiIGJhc2UgIiA+PiBmaWxlXzEgJiYKKyAgICBlY2hvICIgZGVsdGExICIgPj4gZmlsZV8yICYmCisgICAgZWNobyAiIGRlbHRhIGRlbHRhMiAiID4+IGZpbGVfMyAmJgorICAgIHRlc3QtZ2VucmFuZG9tICJiYXIiIDE1MCA+PiBmaWxlXzIgJiYKKyAgICB0ZXN0LWdlbnJhbmRvbSAiYmF6IiAxMDAgPj4gZmlsZV8zCit9CisKK2NyZWF0ZV9uZXdfcGFjaygpIHsKKyAgICBybSAtcmYgLmdpdCAmJgorICAgIGdpdCBpbml0ICYmCisgICAgYmxvYl8xPWBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzFgICYmCisgICAgYmxvYl8yPWBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzJgICYmCisgICAgYmxvYl8zPWBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzNgICYmCisgICAgcGFjaz1gcHJpbnRmICIkYmxvYl8xXG4kYmxvYl8yXG4kYmxvYl8zXG4iIHwKKyAgICAgICAgICBnaXQgcGFjay1vYmplY3RzICRAIC5naXQvb2JqZWN0cy9wYWNrL3BhY2tgICYmCisgICAgcGFjaz0iLmdpdC9vYmplY3RzL3BhY2svcGFjay0ke3BhY2t9IiAmJgorICAgIGdpdCB2ZXJpZnktcGFjayAtdiAke3BhY2t9LnBhY2sKK30KKworZG9fcmVwYWNrKCkgeworICAgIHBhY2s9YHByaW50ZiAiJGJsb2JfMVxuJGJsb2JfMlxuJGJsb2JfM1xuIiB8CisgICAgICAgICAgZ2l0IHBhY2stb2JqZWN0cyAkQCAuZ2l0L29iamVjdHMvcGFjay9wYWNrYCAmJgorICAgIHBhY2s9Ii5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrfSIKK30KKworZG9fY29ycnVwdF9vYmplY3QoKSB7CisgICAgb2ZzPWBnaXQgc2hvdy1pbmRleCA8ICR7cGFja30uaWR4IHwgZ3JlcCAkMSB8IGN1dCAtZjEgLWQiICJgICYmCisgICAgb2ZzPSQoKCRvZnMgKyAkMikpICYmCisgICAgY2htb2QgK3cgJHtwYWNrfS5wYWNrICYmCisgICAgZGQgb2Y9JHtwYWNrfS5wYWNrIGJzPTEgY29udj1ub3RydW5jIHNlZWs9JG9mcyAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktcGFjayAke3BhY2t9LnBhY2sKK30KKworcHJpbnRmICdcMCcgPiB6ZXJvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbml0aWFsIHNldHVwIHZhbGlkYXRpb24nIFwKKyAgICAnY3JlYXRlX3Rlc3RfZmlsZXMgJiYKKyAgICAgY3JlYXRlX25ld19wYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGUgY29ycnVwdGlvbiBpbiBoZWFkZXIgb2YgZmlyc3Qgb2JqZWN0JyBcCisgICAgJ2RvX2NvcnJ1cHRfb2JqZWN0ICRibG9iXzEgMCA8IHplcm8gJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYnV0IGhhdmluZyBhIGxvb3NlIGNvcHkgYWxsb3dzIGZvciBmdWxsIHJlY292ZXJ5JyBcCisgICAgJ212ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzEgJiYKKyAgICAgbXYgdG1wICR7cGFja30uaWR4ICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGFuZCBsb29zZSBjb3B5IG9mIGZpcnN0IGRlbHRhIGFsbG93cyBmb3IgcGFydGlhbCByZWNvdmVyeScgXAorICAgICdnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjcmVhdGUgY29ycnVwdGlvbiBpbiBkYXRhIG9mIGZpcnN0IG9iamVjdCcgXAorICAgICdjcmVhdGVfbmV3X3BhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBjaG1vZCArdyAke3BhY2t9LnBhY2sgJiYKKyAgICAgcGVybCAtaS5iYWsgLXBlICJzLyBiYXNlIC9hYmNkZWYvIiAke3BhY2t9LnBhY2sgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYnV0IGhhdmluZyBhIGxvb3NlIGNvcHkgYWxsb3dzIGZvciBmdWxsIHJlY292ZXJ5JyBcCisgICAgJ212ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzEgJiYKKyAgICAgbXYgdG1wICR7cGFja30uaWR4ICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGFuZCBsb29zZSBjb3B5IG9mIHNlY29uZCBvYmplY3QgYWxsb3dzIGZvciBwYXJ0aWFsIHJlY292ZXJ5JyBcCisgICAgJ2dpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0ZSBjb3JydXB0aW9uIGluIGhlYWRlciBvZiBmaXJzdCBkZWx0YScgXAorICAgICdjcmVhdGVfbmV3X3BhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBkb19jb3JydXB0X29iamVjdCAkYmxvYl8yIDAgPCB6ZXJvICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGJ1dCBoYXZpbmcgYSBsb29zZSBjb3B5IGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeScgXAorICAgICdtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgdGhlbiBhIHJlcGFjayAiY2xlYXJzIiB0aGUgY29ycnVwdGlvbicgXAorICAgICdkb19yZXBhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgJHtwYWNrfS5wYWNrICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY3JlYXRlIGNvcnJ1cHRpb24gaW4gZGF0YSBvZiBmaXJzdCBkZWx0YScgXAorICAgICdjcmVhdGVfbmV3X3BhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBjaG1vZCArdyAke3BhY2t9LnBhY2sgJiYKKyAgICAgcGVybCAtaS5iYWsgLXBlICJzLyBkZWx0YTEgL2FiY2RlZmdoLyIgJHtwYWNrfS5wYWNrICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGJ1dCBoYXZpbmcgYSBsb29zZSBjb3B5IGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeScgXAorICAgICdtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgdGhlbiBhIHJlcGFjayAiY2xlYXJzIiB0aGUgY29ycnVwdGlvbicgXAorICAgICdkb19yZXBhY2sgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgJHtwYWNrfS5wYWNrICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29ycnVwdGlvbiBpbiBkZWx0YSBiYXNlIHJlZmVyZW5jZSBvZiBmaXJzdCBkZWx0YSAoT0JKX1JFRl9ERUxUQSknIFwKKyAgICAnY3JlYXRlX25ld19wYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAyIDwgemVybyAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIHRoZW4gYSByZXBhY2sgImNsZWFycyIgdGhlIGNvcnJ1cHRpb24nIFwKKyAgICAnZG9fcmVwYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZ2l0IHZlcmlmeS1wYWNrICR7cGFja30ucGFjayAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvcnJ1cHRpb24gIzAgaW4gZGVsdGEgYmFzZSByZWZlcmVuY2Ugb2YgZmlyc3QgZGVsdGEgKE9CSl9PRlNfREVMVEEpJyBcCisgICAgJ2NyZWF0ZV9uZXdfcGFjayAtLWRlbHRhLWJhc2Utb2Zmc2V0ICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAyIDwgemVybyAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBidXQgaGF2aW5nIGEgbG9vc2UgY29weSBhbGxvd3MgZm9yIGZ1bGwgcmVjb3ZlcnknIFwKKyAgICAnbXYgJHtwYWNrfS5pZHggdG1wICYmCisgICAgIGdpdCBoYXNoLW9iamVjdCAtdCBibG9iIC13IGZpbGVfMiAmJgorICAgICBtdiB0bXAgJHtwYWNrfS5pZHggJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIHRoZW4gYSByZXBhY2sgImNsZWFycyIgdGhlIGNvcnJ1cHRpb24nIFwKKyAgICAnZG9fcmVwYWNrIC0tZGVsdGEtYmFzZS1vZmZzZXQgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgJHtwYWNrfS5wYWNrICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29ycnVwdGlvbiAjMSBpbiBkZWx0YSBiYXNlIHJlZmVyZW5jZSBvZiBmaXJzdCBkZWx0YSAoT0JKX09GU19ERUxUQSknIFwKKyAgICAnY3JlYXRlX25ld19wYWNrIC0tZGVsdGEtYmFzZS1vZmZzZXQgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBwcmludGYgIlwwMDEiIHwgZG9fY29ycnVwdF9vYmplY3QgJGJsb2JfMiAyICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGJ1dCBoYXZpbmcgYSBsb29zZSBjb3B5IGFsbG93cyBmb3IgZnVsbCByZWNvdmVyeScgXAorICAgICdtdiAke3BhY2t9LmlkeCB0bXAgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJy4uLiBhbmQgdGhlbiBhIHJlcGFjayAiY2xlYXJzIiB0aGUgY29ycnVwdGlvbicgXAorICAgICdkb19yZXBhY2sgLS1kZWx0YS1iYXNlLW9mZnNldCAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIGdpdCB2ZXJpZnktcGFjayAke3BhY2t9LnBhY2sgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYW5kIGEgcmVkdW5kYW50IHBhY2sgYWxsb3dzIGZvciBmdWxsIHJlY292ZXJ5IHRvbycgXAorICAgICdkb19jb3JydXB0X29iamVjdCAkYmxvYl8yIDIgPCB6ZXJvICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsICYmCisgICAgIG12ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzEgJiYKKyAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgZmlsZV8yICYmCisgICAgIHByaW50ZiAiJGJsb2JfMVxuJGJsb2JfMlxuIiB8IGdpdCBwYWNrLW9iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svcGFjayAmJgorICAgICBnaXQgcHJ1bmUtcGFja2VkICYmCisgICAgIG12IHRtcCAke3BhY2t9LmlkeCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8xID4gL2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMyA+IC9kZXYvbnVsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NvcnJ1cHRpb24gb2YgZGVsdGEgYmFzZSByZWZlcmVuY2UgcG9pbnRpbmcgdG8gd3Jvbmcgb2JqZWN0JyBcCisgICAgJ2NyZWF0ZV9uZXdfcGFjayAtLWRlbHRhLWJhc2Utb2Zmc2V0ICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgcHJpbnRmICJcMjIwXDAzMyIgfCBkb19jb3JydXB0X29iamVjdCAkYmxvYl8zIDIgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+L2Rldi9udWxsICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzIgPi9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4vZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICcuLi4gYnV0IGhhdmluZyBhIGxvb3NlIGNvcHkgYWxsb3dzIGZvciBmdWxsIHJlY292ZXJ5JyBcCisgICAgJ212ICR7cGFja30uaWR4IHRtcCAmJgorICAgICBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyBmaWxlXzMgJiYKKyAgICAgbXYgdG1wICR7cGFja30uaWR4ICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnLi4uIGFuZCB0aGVuIGEgcmVwYWNrICJjbGVhcnMiIHRoZSBjb3JydXB0aW9uJyBcCisgICAgJ2RvX3JlcGFjayAtLWRlbHRhLWJhc2Utb2Zmc2V0IC0tbm8tcmV1c2UtZGVsdGEgJiYKKyAgICAgZ2l0IHBydW5lLXBhY2tlZCAmJgorICAgICBnaXQgdmVyaWZ5LXBhY2sgJHtwYWNrfS5wYWNrICYmCisgICAgIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzEgPiAvZGV2L251bGwgJiYKKyAgICAgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMiA+IC9kZXYvbnVsbCAmJgorICAgICBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8zID4gL2Rldi9udWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29ycnVwdGluZyBoZWFkZXIgdG8gaGF2ZSB0b28gc21hbGwgb3V0cHV0IGJ1ZmZlciBmYWlscyB1bnBhY2snIFwKKyAgICAnY3JlYXRlX25ld19wYWNrICYmCisgICAgIGdpdCBwcnVuZS1wYWNrZWQgJiYKKyAgICAgcHJpbnRmICJcMjYyXDAwMSIgfCBkb19jb3JydXB0X29iamVjdCAkYmxvYl8xIDAgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIGJsb2IgJGJsb2JfMSA+IC9kZXYvbnVsbCAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgYmxvYiAkYmxvYl8yID4gL2Rldi9udWxsICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSBibG9iICRibG9iXzMgPiAvZGV2L251bGwnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwNC1wcnVuZS5zaCBiL3QvdDUzMDQtcHJ1bmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDIzZDdjNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDQtcHJ1bmUuc2gKQEAgLTAsMCArMSwyNjUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggSm9oYW5uZXMgRS4gU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdwcnVuZScKKy4gLi90ZXN0LWxpYi5zaAorCitkYXk9JCgoNjAqNjAqMjQpKQord2Vlaz0kKCgkZGF5KjcpKQorCithZGRfYmxvYigpIHsKKwliZWZvcmU9JChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJQkxPQj0kKGVjaG8gYWxlcGhfMCB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCUJMT0JfRklMRT0uZ2l0L29iamVjdHMvJChlY2hvICRCTE9CIHwgc2VkICJzL14uLi8mXC8vIikgJiYKKwl2ZXJib3NlIHRlc3QgJCgoMSArICRiZWZvcmUpKSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwl0ZXN0LWNobXRpbWUgPSswICRCTE9CX0ZJTEUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk6ID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBnYworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIHN0YWxlIHBhY2tzJyAnCisKKwlvcmlnX3BhY2s9JChlY2hvIC5naXQvb2JqZWN0cy9wYWNrLyoucGFjaykgJiYKKwk6ID4gLmdpdC9vYmplY3RzL3RtcF8xLnBhY2sgJiYKKwk6ID4gLmdpdC9vYmplY3RzL3RtcF8yLnBhY2sgJiYKKwl0ZXN0LWNobXRpbWUgPS04NjUwMSAuZ2l0L29iamVjdHMvdG1wXzEucGFjayAmJgorCWdpdCBwcnVuZSAtLWV4cGlyZSAxLmRheSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRvcmlnX3BhY2sgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0L29iamVjdHMvdG1wXzIucGFjayAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvb2JqZWN0cy90bXBfMS5wYWNrCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLS1leHBpcmUnICcKKworCWFkZF9ibG9iICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlPTEuaG91ci5hZ28gJiYKKwl2ZXJib3NlIHRlc3QgJCgoMSArICRiZWZvcmUpKSA9ICQoZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgInMvIC4qLy8iKSAmJgorCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwl0ZXN0LWNobXRpbWUgPS04NjUwMCAkQkxPQl9GSUxFICYmCisJZ2l0IHBydW5lIC0tZXhwaXJlIDEuZGF5ICYmCisJdmVyYm9zZSB0ZXN0ICRiZWZvcmUgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkQkxPQl9GSUxFCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2M6IGltcGxpY2l0IHBydW5lIC0tZXhwaXJlJyAnCisKKwlhZGRfYmxvYiAmJgorCXRlc3QtY2htdGltZSA9LSQoKDIqJHdlZWstMzApKSAkQkxPQl9GSUxFICYmCisJZ2l0IGdjICYmCisJdmVyYm9zZSB0ZXN0ICQoKDEgKyAkYmVmb3JlKSkgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkQkxPQl9GSUxFICYmCisJdGVzdC1jaG10aW1lID0tJCgoMiokd2VlaysxKSkgJEJMT0JfRklMRSAmJgorCWdpdCBnYyAmJgorCXZlcmJvc2UgdGVzdCAkYmVmb3JlID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djOiByZWZ1c2UgdG8gc3RhcnQgd2l0aCBpbnZhbGlkIGdjLnBydW5lRXhwaXJlJyAnCisKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIGludmFsaWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ2MKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYzogc3RhcnQgd2l0aCBvayBnYy5wcnVuZUV4cGlyZScgJworCisJZ2l0IGNvbmZpZyBnYy5wcnVuZUV4cGlyZSAyLmRheXMuYWdvICYmCisJZ2l0IGdjCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmU6IHBydW5lIG5vbnNlbnNlIHBhcmFtZXRlcnMnICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBwcnVuZSBnYXJiYWdlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHBydW5lIC0tLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwcnVuZSAtLW5vLXN1Y2gtb3B0aW9uCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmU6IHBydW5lIHVucmVhY2hhYmxlIGhlYWRzJyAnCisKKwlnaXQgY29uZmlnIGNvcmUubG9nQWxsUmVmVXBkYXRlcyBmYWxzZSAmJgorCW12IC5naXQvbG9ncyAuZ2l0L2xvZ3Mub2xkICYmCisJOiA+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gdGVtcG9yYXJ5ICYmCisJdG1wX2hlYWQ9JChnaXQgcmV2LWxpc3QgLTEgSEVBRCkgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwlnaXQgcHJ1bmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgJHRtcF9oZWFkIC0tCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmU6IGRvIG5vdCBwcnVuZSBkZXRhY2hlZCBIRUFEIHdpdGggbm8gcmVmbG9nJyAnCisKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggLS1xdWlldCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZGV0YWNoZWQgY29tbWl0IiAmJgorCSMgdmVyaWZ5IHRoYXQgdGhlcmUgaXMgbm8gcmVmbG9ncworCSMgKHNob3VsZCBiZSByZW1vdmVkIGFuZCBkaXNhYmxlZCBieSBwcmV2aW91cyB0ZXN0KQorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvbG9ncyAmJgorCWdpdCBwcnVuZSAtbiA+cHJ1bmVfYWN0dWFsICYmCisJOiA+cHJ1bmVfZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBwcnVuZV9hY3R1YWwgcHJ1bmVfZXhwZWN0ZWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZTogcHJ1bmUgZm9ybWVyIEhFQUQgYWZ0ZXIgY2hlY2tpbmcgb3V0IGJyYW5jaCcgJworCisJaGVhZF9zaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBjaGVja291dCAtLXF1aWV0IG1hc3RlciAmJgorCWdpdCBwcnVuZSAtdiA+cHJ1bmVfYWN0dWFsICYmCisJZ3JlcCAiJGhlYWRfc2hhMSIgcHJ1bmVfYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmU6IGRvIG5vdCBwcnVuZSBoZWFkcyBsaXN0ZWQgYXMgYW4gYXJndW1lbnQnICcKKworCTogPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIHRlbXBvcmFyeSAmJgorCXRtcF9oZWFkPSQoZ2l0IHJldi1saXN0IC0xIEhFQUQpICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJZ2l0IHBydW5lIC0tICR0bXBfaGVhZCAmJgorCWdpdCByZXNldCAkdG1wX2hlYWQgLS0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyAtLW5vLXBydW5lJyAnCisKKwlhZGRfYmxvYiAmJgorCXRlc3QtY2htdGltZSA9LSQoKDUwMDEqJGRheSkpICRCTE9CX0ZJTEUgJiYKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIDIuZGF5cy5hZ28gJiYKKwlnaXQgZ2MgLS1uby1wcnVuZSAmJgorCXZlcmJvc2UgdGVzdCAxID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIHJlc3BlY3RzIGdjLnBydW5lRXhwaXJlJyAnCisKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIDUwMDIuZGF5cy5hZ28gJiYKKwlnaXQgZ2MgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkQkxPQl9GSUxFICYmCisJZ2l0IGNvbmZpZyBnYy5wcnVuZUV4cGlyZSA1MDAwLmRheXMuYWdvICYmCisJZ2l0IGdjICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIC0tcHJ1bmU9PGRhdGU+JyAnCisKKwlhZGRfYmxvYiAmJgorCXRlc3QtY2htdGltZSA9LSQoKDUwMDEqJGRheSkpICRCTE9CX0ZJTEUgJiYKKwlnaXQgZ2MgLS1wcnVuZT01MDAyLmRheXMuYWdvICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgJEJMT0JfRklMRSAmJgorCWdpdCBnYyAtLXBydW5lPTUwMDAuZGF5cy5hZ28gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkQkxPQl9GSUxFCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgLS1wcnVuZT1uZXZlcicgJworCisJYWRkX2Jsb2IgJiYKKwlnaXQgZ2MgLS1wcnVuZT1uZXZlciAmJgorCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwlnaXQgZ2MgLS1wcnVuZT1ub3cgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAkQkxPQl9GSUxFCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgcmVzcGVjdHMgZ2MucHJ1bmVFeHBpcmU9bmV2ZXInICcKKworCWdpdCBjb25maWcgZ2MucHJ1bmVFeHBpcmUgbmV2ZXIgJiYKKwlhZGRfYmxvYiAmJgorCWdpdCBnYyAmJgorCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwlnaXQgY29uZmlnIGdjLnBydW5lRXhwaXJlIG5vdyAmJgorCWdpdCBnYyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICRCTE9CX0ZJTEUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSAtLWV4cGlyZT1uZXZlcicgJworCisJYWRkX2Jsb2IgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmU9bmV2ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAkQkxPQl9GSUxFICYmCisJZ2l0IHBydW5lICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgJEJMT0JfRklMRQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djOiBwcnVuZSBvbGQgb2JqZWN0cyBhZnRlciBsb2NhbCBjbG9uZScgJworCWFkZF9ibG9iICYmCisJdGVzdC1jaG10aW1lID0tJCgoMiokd2VlaysxKSkgJEJMT0JfRklMRSAmJgorCWdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIGFjbG9uZSAmJgorCSgKKwkJY2QgYWNsb25lICYmCisJCXZlcmJvc2UgdGVzdCAxID0gJChnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAicy8gLiovLyIpICYmCisJCXRlc3RfcGF0aF9pc19maWxlICRCTE9CX0ZJTEUgJiYKKwkJZ2l0IGdjIC0tcHJ1bmUgJiYKKwkJdmVyYm9zZSB0ZXN0IDAgPSAkKGdpdCBjb3VudC1vYmplY3RzIHwgc2VkICJzLyAuKi8vIikgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgJEJMT0JfRklMRQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2FyYmFnZSByZXBvcnQgaW4gY291bnQtb2JqZWN0cyAtdicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC9vYmplY3RzL3BhY2svZmFrZSoiICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZm9vICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZm9vLmJhciAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zvby5rZWVwICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZm9vLnBhY2sgJiYKKwk6ID4uZ2l0L29iamVjdHMvcGFjay9mYWtlLmJhciAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zha2Uua2VlcCAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zha2UucGFjayAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zha2UuaWR4ICYmCisJOiA+LmdpdC9vYmplY3RzL3BhY2svZmFrZTIua2VlcCAmJgorCTogPi5naXQvb2JqZWN0cy9wYWNrL2Zha2UzLmlkeCAmJgorCWdpdCBjb3VudC1vYmplY3RzIC12IDI+c3RkZXJyICYmCisJZ3JlcCAiaW5kZXggZmlsZSAuZ2l0L29iamVjdHMvcGFjay9mYWtlLmlkeCBpcyB0b28gc21hbGwiIHN0ZGVyciAmJgorCWdyZXAgIl53YXJuaW5nOiIgc3RkZXJyIHwgc29ydCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK3dhcm5pbmc6IGdhcmJhZ2UgZm91bmQ6IC5naXQvb2JqZWN0cy9wYWNrL2Zha2UuYmFyCit3YXJuaW5nOiBnYXJiYWdlIGZvdW5kOiAuZ2l0L29iamVjdHMvcGFjay9mb28KK3dhcm5pbmc6IGdhcmJhZ2UgZm91bmQ6IC5naXQvb2JqZWN0cy9wYWNrL2Zvby5iYXIKK3dhcm5pbmc6IG5vIGNvcnJlc3BvbmRpbmcgLmlkeCBvciAucGFjazogLmdpdC9vYmplY3RzL3BhY2svZmFrZTIua2VlcAord2FybmluZzogbm8gY29ycmVzcG9uZGluZyAuaWR4OiAuZ2l0L29iamVjdHMvcGFjay9mb28ua2VlcAord2FybmluZzogbm8gY29ycmVzcG9uZGluZyAuaWR4OiAuZ2l0L29iamVjdHMvcGFjay9mb28ucGFjaword2FybmluZzogbm8gY29ycmVzcG9uZGluZyAucGFjazogLmdpdC9vYmplY3RzL3BhY2svZmFrZTMuaWR4CitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUgLmdpdC9zaGFsbG93JyAnCisJU0hBMT1gZWNobyBoaXxnaXQgY29tbWl0LXRyZWUgSEVBRF57dHJlZX1gICYmCisJZWNobyAkU0hBMSA+LmdpdC9zaGFsbG93ICYmCisJZ2l0IHBydW5lIC0tZHJ5LXJ1biA+b3V0ICYmCisJZ3JlcCAkU0hBMSAuZ2l0L3NoYWxsb3cgJiYKKwlncmVwICRTSEExIG91dCAmJgorCWdpdCBwcnVuZSAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZTogaGFuZGxlIGFsdGVybmF0ZSBvYmplY3QgZGF0YWJhc2UnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIEEgJiYKKwlnaXQgLUMgQSBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiaW5pdGlhbCBjb21taXQiICYmCisJZ2l0IGNsb25lIC0tc2hhcmVkIEEgQiAmJgorCWdpdCAtQyBCIGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJuZXh0IGNvbW1pdCIgJiYKKwlnaXQgLUMgQiBwcnVuZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMDUtaW5jbHVkZS10YWcuc2ggYi90L3Q1MzA1LWluY2x1ZGUtdGFnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIxNTE3YzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzA1LWluY2x1ZGUtdGFnLnNoCkBAIC0wLDAgKzEsODIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcGFjay1vYmplY3QgLS1pbmNsdWRlLXRhZycKKy4gLi90ZXN0LWxpYi5zaAorCitUUkFTSD1gcHdkYAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGMgPmQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGQgJiYKKwl0cmVlPWBnaXQgd3JpdGUtdHJlZWAgJiYKKwljb21taXQ9YGdpdCBjb21taXQtdHJlZSAkdHJlZSA8L2Rldi9udWxsYCAmJgorCWVjaG8gIm9iamVjdCAkY29tbWl0IiA+c2lnICYmCisJZWNobyAidHlwZSBjb21taXQiID4+c2lnICYmCisJZWNobyAidGFnIG15dGFnIiA+PnNpZyAmJgorCWVjaG8gInRhZ2dlciAkKGdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCkiID4+c2lnICYmCisJZWNobyA+PnNpZyAmJgorCWVjaG8gIm91ciB0ZXN0IHRhZyIgPj5zaWcgJiYKKwl0YWc9YGdpdCBta3RhZyA8c2lnYCAmJgorCXJtIGQgc2lnICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy90YWdzL215dGFnICR0YWcgJiYgeworCQllY2hvICR0cmVlICYmCisJCWVjaG8gJGNvbW1pdCAmJgorCQlnaXQgbHMtdHJlZSAkdHJlZSB8IHNlZCAtZSAicy8uKiBcXChbMC05YS1mXSpcXCkJLiovXFwxLyIKKwl9ID5vYmotbGlzdAorJworCitybSAtcmYgY2xvbmUuZ2l0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHdpdGhvdXQgLS1pbmNsdWRlLXRhZycgJworCXBhY2tuYW1lXzE9JChnaXQgcGFjay1vYmplY3RzIFwKKwkJLS13aW5kb3c9MCBcCisJCXRlc3QtMSA8b2JqLWxpc3QpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VucGFjayBvYmplY3RzJyAnCisJKAorCQlHSVRfRElSPWNsb25lLmdpdCAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgdW5wYWNrLW9iamVjdHMgLW4gPHRlc3QtMS0ke3BhY2tuYW1lXzF9LnBhY2sgJiYKKwkJZ2l0IHVucGFjay1vYmplY3RzIDx0ZXN0LTEtJHtwYWNrbmFtZV8xfS5wYWNrCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB1bnBhY2tlZCByZXN1bHQgKGhhdmUgY29tbWl0LCBubyB0YWcpJyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAkY29tbWl0ID5saXN0LmV4cGVjdCAmJgorCSgKKwkJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9ESVI9Y2xvbmUuZ2l0IGdpdCBjYXQtZmlsZSAtZSAkdGFnICYmCisJCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgJGNvbW1pdAorCSkgPmxpc3QuYWN0dWFsICYmCisJdGVzdF9jbXAgbGlzdC5leHBlY3QgbGlzdC5hY3R1YWwKKycKKworcm0gLXJmIGNsb25lLmdpdAordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB3aXRoIC0taW5jbHVkZS10YWcnICcKKwlwYWNrbmFtZV8xPSQoZ2l0IHBhY2stb2JqZWN0cyBcCisJCS0td2luZG93PTAgXAorCQktLWluY2x1ZGUtdGFnIFwKKwkJdGVzdC0yIDxvYmotbGlzdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5wYWNrIG9iamVjdHMnICcKKwkoCisJCUdJVF9ESVI9Y2xvbmUuZ2l0ICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCB1bnBhY2stb2JqZWN0cyAtbiA8dGVzdC0yLSR7cGFja25hbWVfMX0ucGFjayAmJgorCQlnaXQgdW5wYWNrLW9iamVjdHMgPHRlc3QtMi0ke3BhY2tuYW1lXzF9LnBhY2sKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHVucGFja2VkIHJlc3VsdCAoaGF2ZSBjb21taXQsIGhhdmUgdGFnKScgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgbXl0YWcgPmxpc3QuZXhwZWN0ICYmCisJKAorCQlHSVRfRElSPWNsb25lLmdpdCAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzICR0YWcKKwkpID5saXN0LmFjdHVhbCAmJgorCXRlc3RfY21wIGxpc3QuZXhwZWN0IGxpc3QuYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwNi1wYWNrLW5vYmFzZS5zaCBiL3QvdDUzMDYtcGFjay1ub2Jhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjQ5MzFjMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDYtcGFjay1ub2Jhc2Uuc2gKQEAgLTAsMCArMSw4MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBHb29nbGUgSW5jLgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtcGFjay1vYmplY3Qgd2l0aCBtaXNzaW5nIGJhc2UKKworJworLiAuL3Rlc3QtbGliLnNoCisKKyMgQ3JlYXRlIEEtQiBjaGFpbgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NldHVwIGJhc2UnIFwKKyAgICAnZm9yIGEgaW4gYSBiIGMgZCBlIGYgZyBoIGk7IGRvIGVjaG8gJGEgPj50ZXh0OyBkb25lICYmCisgICAgIGVjaG8gc2lkZSA+c2lkZSAmJgorICAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHRleHQgc2lkZSAmJgorICAgICBBPSQoZWNobyBBIHwgZ2l0IGNvbW1pdC10cmVlICQoZ2l0IHdyaXRlLXRyZWUpKSAmJgorCisgICAgIGVjaG8gbSA+PnRleHQgJiYKKyAgICAgZ2l0IHVwZGF0ZS1pbmRleCB0ZXh0ICYmCisgICAgIEI9JChlY2hvIEIgfCBnaXQgY29tbWl0LXRyZWUgJChnaXQgd3JpdGUtdHJlZSkgLXAgJEEpICYmCisgICAgIGdpdCB1cGRhdGUtcmVmIEhFQUQgJEIKKyAgICAnCisKKyMgQ3JlYXRlIHJlcG9zaXRvcnkgd2l0aCBDIHdob3NlIHBhcmVudCBpcyBCLgorIyBSZXBvc2l0b3J5IGNvbnRhaW5zIEMsIENee3RyZWV9LCBDOnRleHQsIEIsIEJee3RyZWV9LgorIyBSZXBvc2l0b3J5IGlzIG1pc3NpbmcgQjp0ZXh0IChiZXN0IGRlbHRhIGJhc2UgZm9yIEM6dGV4dCkuCisjIFJlcG9zaXRvcnkgaXMgbWlzc2luZyBBIChwYXJlbnQgb2YgQikuCisjIFJlcG9zaXRvcnkgaXMgbWlzc2luZyBBOnNpZGUuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc2V0dXAgcGF0Y2hfY2xvbmUnIFwKKyAgICAnYmFzZV9vYmplY3RzPSQocHdkKS8uZ2l0L29iamVjdHMgJiYKKyAgICAgKG1rZGlyIHBhdGNoX2Nsb25lICYmCisgICAgICBjZCBwYXRjaF9jbG9uZSAmJgorICAgICAgZ2l0IGluaXQgJiYKKyAgICAgIGVjaG8gIiRiYXNlX29iamVjdHMiID4uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisgICAgICBlY2hvIHEgPj50ZXh0ICYmCisgICAgICBnaXQgcmVhZC10cmVlICRCICYmCisgICAgICBnaXQgdXBkYXRlLWluZGV4IHRleHQgJiYKKyAgICAgIGdpdCB1cGRhdGUtcmVmIEhFQUQgJChlY2hvIEMgfCBnaXQgY29tbWl0LXRyZWUgJChnaXQgd3JpdGUtdHJlZSkgLXAgJEIpICYmCisgICAgICBybSAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisKKyAgICAgIGdpdCAtLWdpdC1kaXI9Li4vLmdpdCBjYXQtZmlsZSBjb21taXQgJEIgfAorICAgICAgZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyAtLXN0ZGluICYmCisKKyAgICAgIGdpdCAtLWdpdC1kaXI9Li4vLmdpdCBjYXQtZmlsZSB0cmVlICIkQl57dHJlZX0iIHwKKyAgICAgIGdpdCBoYXNoLW9iamVjdCAtdCB0cmVlIC13IC0tc3RkaW4KKyAgICAgKSAmJgorICAgICBDPSQoZ2l0IC0tZ2l0LWRpcj1wYXRjaF9jbG9uZS8uZ2l0IHJldi1wYXJzZSBIRUFEKQorICAgICcKKworIyBDbG9uZSBwYXRjaF9jbG9uZSBpbmRpcmVjdGx5IGJ5IGNsb25pbmcgYmFzZSBhbmQgZmV0Y2hpbmcuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnaW5kaXJlY3RseSBjbG9uZSBwYXRjaF9jbG9uZScgXAorICAgICcobWtkaXIgdXNlcl9jbG9uZSAmJgorICAgICAgY2QgdXNlcl9jbG9uZSAmJgorICAgICAgZ2l0IGluaXQgJiYKKyAgICAgIGdpdCBwdWxsIC4uLy5naXQgJiYKKyAgICAgIHRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJEIgJiYKKworICAgICAgZ2l0IHB1bGwgLi4vcGF0Y2hfY2xvbmUvLmdpdCAmJgorICAgICAgdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkQworICAgICApCisgICAgJworCisjIENsb25pbmcgdGhlIHBhdGNoX2Nsb25lIGRpcmVjdGx5IHNob3VsZCBmYWlsLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2Nsb25lIG9mIHBhdGNoX2Nsb25lIGlzIGluY29tcGxldGUnIFwKKyAgICAnKG1rZGlyIHVzZXJfZGlyZWN0ICYmCisgICAgICBjZCB1c2VyX2RpcmVjdCAmJgorICAgICAgZ2l0IGluaXQgJiYKKyAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAuLi9wYXRjaF9jbG9uZS8uZ2l0CisgICAgICkKKyAgICAnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMwNy1wYWNrLW1pc3NpbmctY29tbWl0LnNoIGIvdC90NTMwNy1wYWNrLW1pc3NpbmctY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFlNTJhMTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzA3LXBhY2stbWlzc2luZy1jb21taXQuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3BhY2sgc2hvdWxkIG5vdGljZSBtaXNzaW5nIGNvbW1pdCBvYmplY3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZm9yIGkgaW4gMSAyIDMgNCA1CisJZG8KKwkJZWNobyAiJGkiID4iZmlsZSRpIiAmJgorCQlnaXQgYWRkICJmaWxlJGkiICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICIkaSIgJiYKKwkJZ2l0IHRhZyAidGFnJGkiCisJZG9uZSAmJgorCW9iaj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMykgJiYKKwlmYW5vdXQ9JChleHByICIkb2JqIiA6ICJcKC4uXCkiKSAmJgorCXJlbWFpbmRlcj0kKGV4cHIgIiRvYmoiIDogIi4uXCguKlwpIikgJiYKKwlybSAtZiAiLmdpdC9vYmplY3RzLyRmYW5vdXQvJHJlbWFpbmRlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgY29ycnVwdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG5vdGljZXMgY29ycnVwdGlvbiAoMSknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LWxpc3QgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBub3RpY2VzIGNvcnJ1cHRpb24gKDIpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stb2JqZWN0cyBub3RpY2VzIGNvcnJ1cHRpb24nICcKKwllY2hvIEhFQUQgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCBwYWNrLW9iamVjdHMgLS1yZXZzIHBhY2sKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1MzA4LXBhY2stZGV0ZWN0LWR1cGxpY2F0ZXMuc2ggYi90L3Q1MzA4LXBhY2stZGV0ZWN0LWR1cGxpY2F0ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWM1YTg3NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMDgtcGFjay1kZXRlY3QtZHVwbGljYXRlcy5zaApAQCAtMCwwICsxLDgwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0naGFuZGxpbmcgb2YgZHVwbGljYXRlIG9iamVjdHMgaW4gaW5jb21pbmcgcGFja2ZpbGVzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1wYWNrLnNoCisKKyMgVGhlIHNoYTFzIHdlIGhhdmUgaW4gb3VyIHBhY2suIEl0J3MgaW1wb3J0YW50IHRoYXQgdGhlc2UgaGF2ZSB0aGUgc2FtZQorIyBzdGFydGluZyBieXRlLCBzbyB0aGF0IHRoZXkgZW5kIHVwIGluIHRoZSBzYW1lIGZhbm91dCBzZWN0aW9uIG9mIHRoZSBpbmRleC4KKyMgVGhhdCBsZXRzIHVzIG1ha2Ugc3VyZSB3ZSBhcmUgZXhlcmNpc2luZyB0aGUgYmluYXJ5IHNlYXJjaCB3aXRoIGJvdGggc2V0cy4KK0xPX1NIQTE9ZTY4ZmU4MTI5YjU0NmIxMDFhZWU5NTEwYzUzMjhlN2YyMWNhMWQxOAorSElfU0hBMT1lNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxCisKKyMgQW5kIGhlcmUncyBhICJtaXNzaW5nIHNoYTEiIHdoaWNoIHdpbGwgcHJvZHVjZSBmYWlsZWQgbG9va3Vwcy4gSXQgbXVzdCBhbHNvCisjIGJlIGluIHRoZSBzYW1lIGZhbm91dCBzZWN0aW9uLCBhbmQgc2hvdWxkIGJlIGJldHdlZW4gdGhlIHR3byAoc28gdGhhdCBkdXJpbmcKKyMgb3VyIGJpbmFyeSBzZWFyY2gsIHdlIGFyZSBzdXJlIHRvIGVuZCB1cCBsb29raW5nIGF0IG9uZSBvciB0aGUgb3RoZXIgb2YgdGhlCisjIGR1cGxpY2F0ZSBydW5zKS4KK01JU1NJTkdfU0hBMT0nZTY5ZDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKKworIyBnaXQgd2lsbCBuZXZlciBpbnRlbnRpb25hbGx5IGNyZWF0ZSBwYWNrZmlsZXMgd2l0aAorIyBkdXBsaWNhdGUgb2JqZWN0cywgc28gd2UgaGF2ZSB0byBjb25zdHJ1Y3QgdGhlbSBieSBoYW5kLgorIworIyAkMSBpcyB0aGUgbmFtZSBvZiB0aGUgcGFja2ZpbGUgdG8gY3JlYXRlCisjCisjICQyIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdG8gZHVwbGljYXRlIGVhY2ggb2JqZWN0CitjcmVhdGVfcGFjayAoKSB7CisJcGFja19oZWFkZXIgIiQoKDIgKiAkMikpIiA+IiQxIiAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSAiJDIiKTsgZG8KKwkJcGFja19vYmogJExPX1NIQTEgJiYKKwkJcGFja19vYmogJEhJX1NIQTEKKwlkb25lID4+IiQxIiAmJgorCXBhY2tfdHJhaWxlciAiJDEiCit9CisKKyMgZG91YmxlLWNoZWNrIHRoYXQgY3JlYXRlX3BhY2sgYWN0dWFsbHkgd29ya3MKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgd2l0aCBubyBkdXBsaWNhdGVzJyAnCisJY3JlYXRlX3BhY2sgbm8tZHVwcy5wYWNrIDEgJiYKKwlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDxuby1kdXBzLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayB3aWxsIGFsbG93IGR1cGxpY2F0ZSBvYmplY3RzIGJ5IGRlZmF1bHQnICcKKwljbGVhcl9wYWNrcyAmJgorCWNyZWF0ZV9wYWNrIGR1cHMucGFjayAxMDAgJiYKKwlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIDxkdXBzLnBhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGJhdGNoLWNoZWNrIHRlc3QgdmVjdG9ycycgJworCWNhdCA+aW5wdXQgPDwtRU9GICYmCisJJExPX1NIQTEKKwkkSElfU0hBMQorCSRNSVNTSU5HX1NIQTEKKwlFT0YKKwljYXQgPmV4cGVjdCA8PC1FT0YKKwkkTE9fU0hBMSBibG9iIDIKKwkkSElfU0hBMSBibG9iIDAKKwkkTUlTU0lOR19TSEExIG1pc3NpbmcKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va3VwIGluIGR1cGxpY2F0ZWQgcGFjayAoYmluYXJ5IHNlYXJjaCknICcKKwlnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9va3VwIGluIGR1cGxpY2F0ZWQgcGFjayAoR0lUX1VTRV9MT09LVVApJyAnCisJKAorCQlHSVRfVVNFX0xPT0tVUD0xICYmCisJCWV4cG9ydCBHSVRfVVNFX0xPT0tVUCAmJgorCQlnaXQgY2F0LWZpbGUgLS1iYXRjaC1jaGVjayA8aW5wdXQgPmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgY2FuIHJlamVjdCBwYWNrcyB3aXRoIGR1cGxpY2F0ZXMnICcKKwljbGVhcl9wYWNrcyAmJgorCWNyZWF0ZV9wYWNrIGR1cHMucGFjayAyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS1zdHJpY3QgLS1zdGRpbiA8ZHVwcy5wYWNrICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBjYXQtZmlsZSAtZSAkTE9fU0hBMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMDktcGFjay1kZWx0YS1jeWNsZXMuc2ggYi90L3Q1MzA5LXBhY2stZGVsdGEtY3ljbGVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlNzg2MWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzA5LXBhY2stZGVsdGEtY3ljbGVzLnNoCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGluZGV4LXBhY2sgaGFuZGxpbmcgb2YgZGVsdGEgY3ljbGVzIGluIHBhY2tmaWxlcycKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcGFjay5zaAorCisjIFR3byBzaW1pbGFyLWlzaCBvYmplY3RzIHRoYXQgd2UgaGF2ZSBjb21wdXRlZCBkZWx0YXMgYmV0d2Vlbi4KK0E9MDFkNzcxMzY2NmY0ZGU4MjI3NzZjNzYyMmMxMGYxYjA3ZGUyODBkYworQj1lNjhmZTgxMjliNTQ2YjEwMWFlZTk1MTBjNTMyOGU3ZjIxY2ExZDE4CisKKyMgZG91YmxlLWNoZWNrIG91ciBoYW5kLWNvbnN0dWN0ZWQgcGFja3MKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZGV4LXBhY2sgd29ya3Mgd2l0aCBhIHNpbmdsZSBkZWx0YSAoQS0+QiknICcKKwljbGVhcl9wYWNrcyAmJgorCXsKKwkJcGFja19oZWFkZXIgMiAmJgorCQlwYWNrX29iaiAkQSAkQiAmJgorCQlwYWNrX29iaiAkQgorCX0gPmFiLnBhY2sgJiYKKwlwYWNrX3RyYWlsZXIgYWIucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIC0tc3RkaW4gPGFiLnBhY2sgJiYKKwlnaXQgY2F0LWZpbGUgLXQgJEEgJiYKKwlnaXQgY2F0LWZpbGUgLXQgJEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXgtcGFjayB3b3JrcyB3aXRoIGEgc2luZ2xlIGRlbHRhIChCLT5BKScgJworCWNsZWFyX3BhY2tzICYmCisJeworCQlwYWNrX2hlYWRlciAyICYmCisJCXBhY2tfb2JqICRBICYmCisJCXBhY2tfb2JqICRCICRBCisJfSA+YmEucGFjayAmJgorCXBhY2tfdHJhaWxlciBiYS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgLS1zdGRpbiA8YmEucGFjayAmJgorCWdpdCBjYXQtZmlsZSAtdCAkQSAmJgorCWdpdCBjYXQtZmlsZSAtdCAkQgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIGRldGVjdHMgbWlzc2luZyBiYXNlIG9iamVjdHMnICcKKwljbGVhcl9wYWNrcyAmJgorCXsKKwkJcGFja19oZWFkZXIgMSAmJgorCQlwYWNrX29iaiAkQSAkQgorCX0gPm1pc3NpbmcucGFjayAmJgorCXBhY2tfdHJhaWxlciBtaXNzaW5nLnBhY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgaW5kZXgtcGFjayAtLWZpeC10aGluIC0tc3RkaW4gPG1pc3NpbmcucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIGRldGVjdHMgUkVGX0RFTFRBIGN5Y2xlcycgJworCWNsZWFyX3BhY2tzICYmCisJeworCQlwYWNrX2hlYWRlciAyICYmCisJCXBhY2tfb2JqICRBICRCICYmCisJCXBhY2tfb2JqICRCICRBCisJfSA+Y3ljbGUucGFjayAmJgorCXBhY2tfdHJhaWxlciBjeWNsZS5wYWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGluZGV4LXBhY2sgLS1maXgtdGhpbiAtLXN0ZGluIDxjeWNsZS5wYWNrCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2ZhaWxvdmVyIHRvIGFuIG9iamVjdCBpbiBhbm90aGVyIHBhY2snICcKKwljbGVhcl9wYWNrcyAmJgorCWdpdCBpbmRleC1wYWNrIC0tc3RkaW4gPGFiLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayAtLXN0ZGluIC0tZml4LXRoaW4gPGN5Y2xlLnBhY2sKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZmFpbG92ZXIgdG8gYSBkdXBsaWNhdGUgb2JqZWN0IGluIHRoZSBzYW1lIHBhY2snICcKKwljbGVhcl9wYWNrcyAmJgorCXsKKwkJcGFja19oZWFkZXIgMyAmJgorCQlwYWNrX29iaiAkQSAkQiAmJgorCQlwYWNrX29iaiAkQiAkQSAmJgorCQlwYWNrX29iaiAkQQorCX0gPnJlY292ZXJhYmxlLnBhY2sgJiYKKwlwYWNrX3RyYWlsZXIgcmVjb3ZlcmFibGUucGFjayAmJgorCWdpdCBpbmRleC1wYWNrIC0tZml4LXRoaW4gLS1zdGRpbiA8cmVjb3ZlcmFibGUucGFjaworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDUzMTAtcGFjay1iaXRtYXBzLnNoIGIvdC90NTMxMC1wYWNrLWJpdG1hcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQ0NjcwNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMTAtcGFjay1iaXRtYXBzLnNoCkBAIC0wLDAgKzEsMTg4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZXhlcmNpc2UgYmFzaWMgYml0bWFwIGZ1bmN0aW9uYWxpdHknCisuIC4vdGVzdC1saWIuc2gKKworb2JqcGF0aCAoKSB7CisJZWNobyAiLmdpdC9vYmplY3RzLyQoZWNobyAiJDEiIHwgc2VkIC1lICdzfFwoLi5cKXxcMS98JykiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBtb2RlcmF0ZS1zaXplZCBoaXN0b3J5JyAnCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxIDEwKTsgZG8KKwkJdGVzdF9jb21taXQgJGkKKwlkb25lICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIEhFQUR+NSAmJgorCWZvciBpIGluICQodGVzdF9zZXEgMSAxMCk7IGRvCisJCXRlc3RfY29tbWl0IHNpZGUtJGkKKwlkb25lICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWJsb2I9JChlY2hvIHRhZ2dlZC1ibG9iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJZ2l0IHRhZyB0YWdnZWQtYmxvYiAkYmxvYiAmJgorCWdpdCBjb25maWcgcmVwYWNrLndyaXRlYml0bWFwcyB0cnVlICYmCisJZ2l0IGNvbmZpZyBwYWNrLndyaXRlYml0bWFwaGFzaGNhY2hlIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZnVsbCByZXBhY2sgY3JlYXRlcyBiaXRtYXBzJyAnCisJZ2l0IHJlcGFjayAtYWQgJiYKKwlscyAuZ2l0L29iamVjdHMvcGFjay8gfCBncmVwIGJpdG1hcCA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS10ZXN0LWJpdG1hcCB2ZXJpZmllcyBiaXRtYXBzJyAnCisJZ2l0IHJldi1saXN0IC0tdGVzdC1iaXRtYXAgSEVBRAorJworCityZXZfbGlzdF90ZXN0cygpIHsKKwlzdGF0ZT0kMQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY291bnRpbmcgY29tbWl0cyB2aWEgYml0bWFwICgkc3RhdGUpIiAnCisJCWdpdCByZXYtbGlzdCAtLWNvdW50IEhFQUQgPmV4cGVjdCAmJgorCQlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IC0tY291bnQgSEVBRCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb3VudGluZyBwYXJ0aWFsIGNvbW1pdHMgdmlhIGJpdG1hcCAoJHN0YXRlKSIgJworCQlnaXQgcmV2LWxpc3QgLS1jb3VudCBIRUFEfjUuLkhFQUQgPmV4cGVjdCAmJgorCQlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IC0tY291bnQgSEVBRH41Li5IRUFEID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvdW50aW5nIG5vbi1saW5lYXIgaGlzdG9yeSAoJHN0YXRlKSIgJworCQlnaXQgcmV2LWxpc3QgLS1jb3VudCBvdGhlci4uLm1hc3RlciA+ZXhwZWN0ICYmCisJCWdpdCByZXYtbGlzdCAtLXVzZS1iaXRtYXAtaW5kZXggLS1jb3VudCBvdGhlci4uLm1hc3RlciA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb3VudGluZyBjb21taXRzIHdpdGggbGltaXRpbmcgKCRzdGF0ZSkiICcKKwkJZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRCAtLSAxLnQgPmV4cGVjdCAmJgorCQlnaXQgcmV2LWxpc3QgLS11c2UtYml0bWFwLWluZGV4IC0tY291bnQgSEVBRCAtLSAxLnQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZW51bWVyYXRlIC0tb2JqZWN0cyAoJHN0YXRlKSIgJworCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIC0tdXNlLWJpdG1hcC1pbmRleCBIRUFEID50bXAgJiYKKwkJY3V0IC1kIiAiIC1mMSA8dG1wID50bXAyICYmCisJCXNvcnQgPHRtcDIgPmFjdHVhbCAmJgorCQlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgPnRtcCAmJgorCQljdXQgLWQiICIgLWYxIDx0bXAgPnRtcDIgJiYKKwkJc29ydCA8dG1wMiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJiaXRtYXAgLS1vYmplY3RzIGhhbmRsZXMgbm9uLWNvbW1pdCBvYmplY3RzICgkc3RhdGUpIiAnCisJCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS11c2UtYml0bWFwLWluZGV4IEhFQUQgdGFnZ2VkLWJsb2IgPmFjdHVhbCAmJgorCQlncmVwICRibG9iIGFjdHVhbAorCScKK30KKworcmV2X2xpc3RfdGVzdHMgJ2Z1bGwgYml0bWFwJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIGJpdG1hcHBlZCByZXBvc2l0b3J5JyAnCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIC4gY2xvbmUuZ2l0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWNsb25lLmdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmdXJ0aGVyIG5vbi1iaXRtYXBwZWQgY29tbWl0cycgJworCWZvciBpIGluICQodGVzdF9zZXEgMSAxMCk7IGRvCisJCXRlc3RfY29tbWl0IGZ1cnRoZXItJGkKKwlkb25lCisnCisKK3Jldl9saXN0X3Rlc3RzICdwYXJ0aWFsIGJpdG1hcCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggKHBhcnRpYWwgYml0bWFwKScgJworCWdpdCAtLWdpdC1kaXI9Y2xvbmUuZ2l0IGZldGNoIG9yaWdpbiBtYXN0ZXI6bWFzdGVyICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWNsb25lLmdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmNyZW1lbnRhbCByZXBhY2sgY2Fubm90IGNyZWF0ZSBiaXRtYXBzJyAnCisJdGVzdF9jb21taXQgbW9yZS0xICYmCisJZmluZCAuZ2l0L29iamVjdHMvcGFjayAtbmFtZSAiKi5iaXRtYXAiID5leHBlY3QgJiYKKwlnaXQgcmVwYWNrIC1kICYmCisJZmluZCAuZ2l0L29iamVjdHMvcGFjayAtbmFtZSAiKi5iaXRtYXAiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luY3JlbWVudGFsIHJlcGFjayBjYW4gZGlzYWJsZSBiaXRtYXBzJyAnCisJdGVzdF9jb21taXQgbW9yZS0yICYmCisJZ2l0IHJlcGFjayAtZCAtLW5vLXdyaXRlLWJpdG1hcC1pbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdWxsIHJlcGFjaywgcmV1c2luZyBwcmV2aW91cyBiaXRtYXBzJyAnCisJZ2l0IHJlcGFjayAtYWQgJiYKKwlscyAuZ2l0L29iamVjdHMvcGFjay8gfCBncmVwIGJpdG1hcCA+b3V0cHV0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggKGZ1bGwgYml0bWFwKScgJworCWdpdCAtLWdpdC1kaXI9Y2xvbmUuZ2l0IGZldGNoIG9yaWdpbiBtYXN0ZXI6bWFzdGVyICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWNsb25lLmdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgb2JqZWN0cyBmb3IgbWlzc2luZy1IQVZFIHRlc3RzJyAnCisJYmxvYj0kKGVjaG8gIm1pc3NpbmcgaGF2ZSIgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwl0cmVlPSQocHJpbnRmICIxMDA2NDQgYmxvYiAkYmxvYlx0ZmlsZVxuIiB8IGdpdCBta3RyZWUpICYmCisJcGFyZW50PSQoZWNobyBwYXJlbnQgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUpICYmCisJY29tbWl0PSQoZWNobyBjb21taXQgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUgLXAgJHBhcmVudCkgJiYKKwljYXQgPnJldnMgPDwtRU9GCisJSEVBRAorCV5IRUFEXgorCV4kY29tbWl0CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgd2l0aCBtaXNzaW5nIGJsb2InICcKKwlybSAkKG9ianBhdGggJGJsb2IpICYmCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLXJldnMgPHJldnMgPi9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHdpdGggbWlzc2luZyB0cmVlJyAnCisJcm0gJChvYmpwYXRoICR0cmVlKSAmJgorCWdpdCBwYWNrLW9iamVjdHMgLS1zdGRvdXQgLS1yZXZzIDxyZXZzID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB3aXRoIG1pc3NpbmcgcGFyZW50JyAnCisJcm0gJChvYmpwYXRoICRwYXJlbnQpICYmCisJZ2l0IHBhY2stb2JqZWN0cyAtLXN0ZG91dCAtLXJldnMgPHJldnMgPi9kZXYvbnVsbAorJworCit0ZXN0X2xhenlfcHJlcmVxIEpHSVQgJworCXR5cGUgamdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEpHSVQgJ3dlIGNhbiByZWFkIGpnaXQgYml0bWFwcycgJworCWdpdCBjbG9uZSAuIGNvbXBhdC1qZ2l0ICYmCisJKAorCQljZCBjb21wYXQtamdpdCAmJgorCQlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qLmJpdG1hcCAmJgorCQlqZ2l0IGdjICYmCisJCWdpdCByZXYtbGlzdCAtLXRlc3QtYml0bWFwIEhFQUQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgSkdJVCAnamdpdCBjYW4gcmVhZCBvdXIgYml0bWFwcycgJworCWdpdCBjbG9uZSAuIGNvbXBhdC11cyAmJgorCSgKKwkJY2QgY29tcGF0LXVzICYmCisJCWdpdCByZXBhY2sgLWFkYiAmJgorCQkjIGpnaXQgZ2Mgd2lsbCBiYXJmIGlmIGl0IGRvZXMgbm90IGxpa2Ugb3VyIGJpdG1hcHMKKwkJamdpdCBnYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3BsaXR0aW5nIHBhY2tzIGRvZXMgbm90IGdlbmVyYXRlIGJvZ3VzIGJpdG1hcHMnICcKKwl0ZXN0LWdlbnJhbmRvbSBmb28gJCgoMTAyNCAqIDEwMjQpKSA+cmFuZCAmJgorCWdpdCBhZGQgcmFuZCAmJgorCWdpdCBjb21taXQgLW0gImNvbW1pdCB3aXRoIGJpZyBmaWxlIiAmJgorCWdpdCAtYyBwYWNrLnBhY2tTaXplTGltaXQ9NTAwayByZXBhY2sgLWFkYiAmJgorCWdpdCBpbml0IC0tYmFyZSBuby1iaXRtYXBzLmdpdCAmJgorCWdpdCAtQyBuby1iaXRtYXBzLmdpdCBmZXRjaCAuLiBIRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMxMS1wYWNrLWJpdG1hcHMtc2hhbGxvdy5zaCBiL3QvdDUzMTEtcGFjay1iaXRtYXBzLXNoYWxsb3cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODcyYTk1ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDUzMTEtcGFjay1iaXRtYXBzLXNoYWxsb3cuc2gKQEAgLTAsMCArMSwzOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIGJpdG1hcCBvcGVyYXRpb24gd2l0aCBzaGFsbG93IHJlcG9zaXRvcmllcycKKy4gLi90ZXN0LWxpYi5zaAorCisjIFdlIHdhbnQgdG8gY3JlYXRlIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBzaGFsbG93LCBncmFmdGVkCisjIHZpZXcgb2YgcmVhY2hhYmlsaXR5IGRvZXMgbm90IG1hdGNoIHJlYWxpdHkgaW4gYSB3YXkgdGhhdAorIyBtaWdodCBjYXVzZSB1cyB0byBzZW5kIGluc3VmZmljaWVudCBvYmplY3RzLgorIworIyBXZSBkbyB0aGlzIHdpdGggYSBoaXN0b3J5IHRoYXQgcmVwZWF0cyBhIHN0YXRlLCBsaWtlOgorIworIyAgICAgIEEgICAgLS0gICBCICAgIC0tICAgQworIyAgICBmaWxlPTEgICAgZmlsZT0yICAgIGZpbGU9MQorIworIyBhbmQgdGhlbiBjcmVhdGUgYSBzaGFsbG93IGNsb25lIHRvIHRoZSBzZWNvbmQgY29tbWl0LCBCLgorIyBJbiBhIG5vbi1zaGFsbG93IGNsb25lLCB0aGF0IHdvdWxkIG1lYW4gd2UgYWxyZWFkeSBoYXZlCisjIHRoZSB0cmVlIGZvciBBLiBCdXQgaW4gYSBzaGFsbG93IG9uZSwgd2UndmUgZ3JhZnRlZCBhd2F5CisjIEEsIGFuZCBmZXRjaGluZyBBIHRvIEIgcmVxdWlyZXMgdGhhdCB0aGUgb3RoZXIgc2lkZSBzZW5kCisjIHVzIHRoZSB0cmVlIGZvciBmaWxlPTEuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzaGFsbG93IHJlcG8nICcKKwllY2hvIDEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9yaWcgJiYKKwllY2hvIDIgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHVwZGF0ZSAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tYmFyZSAtLWRlcHRoPTEgLiBzaGFsbG93LmdpdCAmJgorCWVjaG8gMSA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gcmVwZWF0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R1cm4gb24gYml0bWFwcyBpbiB0aGUgcGFyZW50JyAnCisJZ2l0IHJlcGFjayAtYWRiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgZmV0Y2ggZnJvbSBiaXRtYXBwZWQgcmVwbycgJworCShjZCBzaGFsbG93LmdpdCAmJiBnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTMxMi1wcnVuZS1jb3JydXB0aW9uLnNoIGIvdC90NTMxMi1wcnVuZS1jb3JydXB0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRhOWQ1OTkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1MzEyLXBydW5lLWNvcnJ1cHRpb24uc2gKQEAgLTAsMCArMSwxMTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPScKK1Rlc3QgcHJ1bmluZyBvZiByZXBvc2l0b3JpZXMgd2l0aCBtaW5vciBjb3JydXB0aW9ucy4gVGhlIGdvYWwKK2hlcmUgaXMgdGhhdCB3ZSBzaG91bGQgYWx3YXlzIGJlIGVycmluZyBvbiB0aGUgc2lkZSBvZiBzYWZldHkuIFNvCitpZiB3ZSBzZWUsIGZvciBleGFtcGxlLCBhIHJlZiB3aXRoIGEgYm9ndXMgbmFtZSwgaXQgaXMgT0sgZWl0aGVyIHRvCitiYWlsIG91dCBvciB0byBwcm9jZWVkIHVzaW5nIGl0IGFzIGEgcmVhY2hhYmxlIHRpcCwgYnV0IGl0IGlzIF9ub3RfCitPSyB0byBwcm9jZWVkIGFzIGlmIGl0IGRpZCBub3QgZXhpc3QuIE90aGVyd2lzZSB3ZSBtaWdodCBzaWxlbnRseQorZGVsZXRlIG9iamVjdHMgdGhhdCBjYW5ub3QgYmUgcmVjb3ZlcmVkLgorJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FibGUgcmVmbG9ncycgJworCWdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIGZhbHNlICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9YWxsIC0tYWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBoaXN0b3J5IHJlYWNoYWJsZSBvbmx5IGZyb20gYSBib2d1cy1uYW1lZCByZWYnICcKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG1hc3RlciAmJgorCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBib2d1cyAmJgorCWJvZ3VzPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgJGJvZ3VzID5zYXZlZCAmJgorCWVjaG8gJGJvZ3VzID4uZ2l0L3JlZnMvaGVhZHMvYm9ndXMuLm5hbWUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5pbmcgZG9lcyBub3QgZHJvcCBib2d1cyBvYmplY3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBoYXNoLW9iamVjdCAtdyAtdCBjb21taXQgc2F2ZWQiICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBwcnVuZSAtLWV4cGlyZT1ub3cgJiYKKwl2ZXJib3NlIGdpdCBjYXQtZmlsZSAtZSAkYm9ndXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHV0IGJvZ3VzIG9iamVjdCBpbnRvIHBhY2snICcKKwlnaXQgdGFnIHJlYWNoYWJsZSAkYm9ndXMgJiYKKwlnaXQgcmVwYWNrIC1hZCAmJgorCWdpdCB0YWcgLWQgcmVhY2hhYmxlICYmCisJdmVyYm9zZSBnaXQgY2F0LWZpbGUgLWUgJGJvZ3VzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc3RydWN0aXZlIHJlcGFjayBrZWVwcyBwYWNrZWQgb2JqZWN0JyAnCisJdGVzdF9taWdodF9mYWlsIGdpdCByZXBhY2sgLUFkIC0tdW5wYWNrLXVucmVhY2hhYmxlPW5vdyAmJgorCXZlcmJvc2UgZ2l0IGNhdC1maWxlIC1lICRib2d1cyAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgcmVwYWNrIC1hZCAmJgorCXZlcmJvc2UgZ2l0IGNhdC1maWxlIC1lICRib2d1cworJworCisjIHN1YnNlcXVlbnQgdGVzdHMgd2lsbCBoYXZlIGRpZmZlcmVudCBjb3JydXB0aW9ucwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4gdXAgYm9ndXMgcmVmJyAnCisJcm0gLmdpdC9yZWZzL2hlYWRzL2JvZ3VzLi5uYW1lCisnCisKKyMgV2UgY3JlYXRlIHR3byBuZXcgb2JqZWN0cyBoZXJlLCAib25lIiBhbmQgInR3byIuIE91cgorIyBtYXN0ZXIgYnJhbmNoIHBvaW50cyB0byAidHdvIiwgd2hpY2ggaXMgZGVsZXRlZCwKKyMgY29ycnVwdGluZyB0aGUgcmVwb3NpdG9yeS4gQnV0IHdlJ2QgbGlrZSB0byBtYWtlIHN1cmUKKyMgdGhhdCB0aGUgb3RoZXJ3aXNlIHVucmVhY2hhYmxlICJvbmUiIGlzIG5vdCBwcnVuZWQKKyMgKHNpbmNlIGl0IGlzIHRoZSB1c2VyJ3MgYmVzdCBiZXQgZm9yIHJlY292ZXJpbmcKKyMgZnJvbSB0aGUgY29ycnVwdGlvbikuCisjCisjIE5vdGUgdGhhdCB3ZSBhbHNvIHBvaW50IEhFQUQgc29tZXdoZXJlIGJlc2lkZXMgInR3byIsCisjIGFzIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIHRlc3QgdGhlIGNhc2Ugd2hlcmUgd2UKKyMgcGljayB1cCB0aGUgcmVmZXJlbmNlIHRvICJ0d28iIGJ5IGl0ZXJhdGluZyB0aGUgcmVmcywKKyMgbm90IGJ5IHJlc29sdmluZyBIRUFELgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGhpc3Rvcnkgd2l0aCBtaXNzaW5nIHRpcCBjb21taXQnICcKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIG9uZSAmJgorCXJlY292ZXJhYmxlPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgJHJlY292ZXJhYmxlID5zYXZlZCAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gdHdvICYmCisJbWlzc2luZz0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY2hlY2tvdXQgLS1kZXRhY2ggJGJhc2UgJiYKKwlybSAuZ2l0L29iamVjdHMvJChlY2hvICRtaXNzaW5nIHwgc2VkICJzLC4uLCYvLCIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC1lICRtaXNzaW5nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5pbmcgd2l0aCBhIGNvcnJ1cHRlZCB0aXAgZG9lcyBub3QgZHJvcCBoaXN0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgaGFzaC1vYmplY3QgLXcgLXQgY29tbWl0IHNhdmVkIiAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgcHJ1bmUgLS1leHBpcmU9bm93ICYmCisJdmVyYm9zZSBnaXQgY2F0LWZpbGUgLWUgJHJlY292ZXJhYmxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stcmVmcyBkb2VzIG5vdCBzaWxlbnRseSBkZWxldGUgYnJva2VuIGxvb3NlIHJlZicgJworCWdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorCWVjaG8gJG1pc3NpbmcgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyB3ZSBkbyBub3Qgd2FudCB0byBjb3VudCBvbiBydW5uaW5nIHBhY2stcmVmcyB0bworIyBhY3R1YWxseSBwYWNrIGl0LCBhcyBpdCBpcyBwZXJmZWN0bHkgcmVhc29uYWJsZSB0bworIyBza2lwIHByb2Nlc3NpbmcgYSBicm9rZW4gcmVmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcGFja2VkLXJlZnMgZmlsZSB3aXRoIGJyb2tlbiByZWYnICcKKwlybSAtZiAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyICYmCisJY2F0ID4uZ2l0L3BhY2tlZC1yZWZzIDw8LUVPRiAmJgorCSRtaXNzaW5nIHJlZnMvaGVhZHMvbWFzdGVyCisJJHJlY292ZXJhYmxlIHJlZnMvaGVhZHMvb3RoZXIKKwlFT0YKKwllY2hvICRtaXNzaW5nID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stcmVmcyBkb2VzIG5vdCBzaWxlbnRseSBkZWxldGUgYnJva2VuIHBhY2tlZCByZWYnICcKKwlnaXQgcGFjay1yZWZzIC0tYWxsIC0tcHJ1bmUgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2stcmVmcyBkb2VzIG5vdCBkcm9wIGJyb2tlbiByZWZzIGR1cmluZyBkZWxldGlvbicgJworCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvb3RoZXIgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwMC1zZW5kLXBhY2suc2ggYi90L3Q1NDAwLXNlbmQtcGFjay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNGNlYTk3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTQwMC1zZW5kLXBhY2suc2gKQEAgLTAsMCArMSwyNDYgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nU2VlIHdoeSByZXdpbmRpbmcgaGVhZCBicmVha3Mgc2VuZC1wYWNrCisKKycKKy4gLi90ZXN0LWxpYi5zaAorCitjbnQ9NjQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCW1rZGlyIG1vemFydCBtb3phcnQvaXMgJiYKKwllY2hvICJDb21taXQgIzAiID5tb3phcnQvaXMvcGluayAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbW96YXJ0L2lzL3BpbmsgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJY29tbWl0PSQoZWNobyAiQ29tbWl0ICMwIiB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSkgJiYKKwl6ZXJvPSRjb21taXQgJiYKKwlwYXJlbnQ9JHplcm8gJiYKKwlpPTAgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sZSAkY250CisJZG8KKwkgICAgaT0kKCgkaSsxKSkgJiYKKwkgICAgdGVzdF90aWNrICYmCisJICAgIGVjaG8gIkNvbW1pdCAjJGkiID5tb3phcnQvaXMvcGluayAmJgorCSAgICBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIG1vemFydC9pcy9waW5rICYmCisJICAgIHRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwkgICAgY29tbWl0PSQoZWNobyAiQ29tbWl0ICMkaSIgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUgLXAgJHBhcmVudCkgJiYKKwkgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy90YWdzL2NvbW1pdCRpICRjb21taXQgJiYKKwkgICAgcGFyZW50PSRjb21taXQgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IHVwZGF0ZS1yZWYgSEVBRCAiJGNvbW1pdCIgJiYKKwlnaXQgY2xvbmUgLi8uIHZpY3RpbSAmJgorCSggY2QgdmljdGltICYmIGdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuICYmIGdpdCBsb2cgKSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiR6ZXJvIiAmJgorCXBhcmVudD0kemVybyAmJgorCWk9MCAmJgorCXdoaWxlIHRlc3QgJGkgLWxlICRjbnQKKwlkbworCSAgICBpPSQoKCRpKzEpKSAmJgorCSAgICB0ZXN0X3RpY2sgJiYKKwkgICAgZWNobyAiUmViYXNlICMkaSIgPm1vemFydC9pcy9waW5rICYmCisJICAgIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgbW96YXJ0L2lzL3BpbmsgJiYKKwkgICAgdHJlZT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCSAgICBjb21taXQ9JChlY2hvICJSZWJhc2UgIyRpIiB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSAtcCAkcGFyZW50KSAmJgorCSAgICBnaXQgdXBkYXRlLXJlZiByZWZzL3RhZ3MvcmViYXNlJGkgJGNvbW1pdCAmJgorCSAgICBwYXJlbnQ9JGNvbW1pdCB8fCByZXR1cm4gMQorCWRvbmUgJiYKKwlnaXQgdXBkYXRlLXJlZiBIRUFEICIkY29tbWl0IiAmJgorCWVjaG8gUmViYXNlICYmCisJZ2l0IGxvZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFjayB0aGUgc291cmNlIHJlcG9zaXRvcnknICcKKwlnaXQgcmVwYWNrIC1hIC1kICYmCisJZ2l0IHBydW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhY2sgdGhlIGRlc3RpbmF0aW9uIHJlcG9zaXRvcnknICcKKyAgICAoCisJY2QgdmljdGltICYmCisJZ2l0IHJlcGFjayAtYSAtZCAmJgorCWdpdCBwcnVuZQorICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIHB1c2hpbmcgcmV3b3VuZCBoZWFkIHdpdGhvdXQgLS1mb3JjZScgJworCXB1c2hlZF9oZWFkPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdmljdGltX29yaWc9JChjZCB2aWN0aW0gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtcGFjayAuL3ZpY3RpbSBtYXN0ZXIgJiYKKwl2aWN0aW1faGVhZD0kKGNkIHZpY3RpbSAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkdmljdGltX2hlYWQiID0gIiR2aWN0aW1fb3JpZyIgJiYKKwkjIHRoaXMgc2hvdWxkIHVwZGF0ZQorCWdpdCBzZW5kLXBhY2sgLS1mb3JjZSAuL3ZpY3RpbSBtYXN0ZXIgJiYKKwl2aWN0aW1faGVhZD0kKGNkIHZpY3RpbSAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkdmljdGltX2hlYWQiID0gIiRwdXNoZWRfaGVhZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBjYW4gYmUgdXNlZCB0byBkZWxldGUgYSByZWYnICcKKwkoIGNkIHZpY3RpbSAmJiBnaXQgYnJhbmNoIGV4dHJhIG1hc3RlciApICYmCisJZ2l0IHNlbmQtcGFjayAuL3ZpY3RpbSA6ZXh0cmEgbWFzdGVyICYmCisJKCBjZCB2aWN0aW0gJiYKKwkgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZXh0cmEgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgZGVsZXRpbmcgcHVzaCB3aXRoIGRlbnlEZWxldGVzJyAnCisJKAorCSAgICBjZCB2aWN0aW0gJiYKKwkgICAgKCBnaXQgYnJhbmNoIC1EIGV4dHJhIHx8IDogKSAmJgorCSAgICBnaXQgY29uZmlnIHJlY2VpdmUuZGVueURlbGV0ZXMgdHJ1ZSAmJgorCSAgICBnaXQgYnJhbmNoIGV4dHJhIG1hc3RlcgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC4vdmljdGltIDpleHRyYSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IG92ZXJyaWRlIGRlbnlEZWxldGVzIHdpdGggZ2l0IC1jIHNlbmQtcGFjaycgJworCSgKKwkJY2QgdmljdGltICYmCisJCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGV4dHJhICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55RGVsZXRlcyB0cnVlICYmCisJCWdpdCBicmFuY2ggZXh0cmEgbWFzdGVyCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyByZWNlaXZlLmRlbnlEZWxldGVzPWZhbHNlIFwKKwkJCQkJc2VuZC1wYWNrIC4vdmljdGltIDpleHRyYSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcnJpZGUgZGVueURlbGV0ZXMgd2l0aCBnaXQgLWMgcmVjZWl2ZS1wYWNrJyAnCisJKAorCQljZCB2aWN0aW0gJiYKKwkJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgZXh0cmEgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlEZWxldGVzIHRydWUgJiYKKwkJZ2l0IGJyYW5jaCBleHRyYSBtYXN0ZXIKKwkpICYmCisJZ2l0IHNlbmQtcGFjayBcCisJCS0tcmVjZWl2ZS1wYWNrPSJnaXQgLWMgcmVjZWl2ZS5kZW55RGVsZXRlcz1mYWxzZSByZWNlaXZlLXBhY2siIFwKKwkJLi92aWN0aW0gOmV4dHJhIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZW55Tm9uRmFzdGZvcndhcmRzIHRydW1wcyAtLWZvcmNlJyAnCisJKAorCSAgICBjZCB2aWN0aW0gJiYKKwkgICAgKCBnaXQgYnJhbmNoIC1EIGV4dHJhIHx8IDogKSAmJgorCSAgICBnaXQgY29uZmlnIHJlY2VpdmUuZGVueU5vbkZhc3Rmb3J3YXJkcyB0cnVlCisJKSAmJgorCXZpY3RpbV9vcmlnPSQoY2QgdmljdGltICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLS1mb3JjZSAuL3ZpY3RpbSBtYXN0ZXJeOm1hc3RlciAmJgorCXZpY3RpbV9oZWFkPSQoY2QgdmljdGltICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3QgIiR2aWN0aW1fb3JpZyIgPSAiJHZpY3RpbV9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tYWxsIGV4Y2x1ZGVzIHJlbW90ZS10cmFja2luZyBoaWVyYXJjaHknICcKKwlta2RpciBwYXJlbnQgJiYKKwkoCisJICAgIGNkIHBhcmVudCAmJgorCSAgICBnaXQgaW5pdCAmJiA6ID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIGFkZAorCSkgJiYKKwlnaXQgY2xvbmUgcGFyZW50IGNoaWxkICYmCisJKAorCSAgICBjZCBjaGlsZCAmJiBnaXQgcHVzaCAtLWFsbAorCSkgJiYKKwkoCisJICAgIGNkIHBhcmVudCAmJgorCSAgICB0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbikiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWNlaXZlLXBhY2sgcnVucyBhdXRvLWdjIGluIHJlbW90ZSByZXBvJyAnCisJcm0gLXJmIHBhcmVudCBjaGlsZCAmJgorCWdpdCBpbml0IHBhcmVudCAmJgorCSgKKwkgICAgIyBTZXR1cCBhIHJlcG8gd2l0aCAyIHBhY2tzCisJICAgIGNkIHBhcmVudCAmJgorCSAgICBlY2hvICJTb21lIHRleHQiID5maWxlLnR4dCAmJgorCSAgICBnaXQgYWRkIC4gJiYKKwkgICAgZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJICAgIGdpdCByZXBhY2sgLWFkbCAmJgorCSAgICBlY2hvICJTb21lIG1vcmUgdGV4dCIgPj5maWxlLnR4dCAmJgorCSAgICBnaXQgY29tbWl0IC1hIC1tICJTZWNvbmQgY29tbWl0IiAmJgorCSAgICBnaXQgcmVwYWNrCisJKSAmJgorCWNwIC1SIHBhcmVudCBjaGlsZCAmJgorCSgKKwkgICAgIyBTZXQgdGhlIGNoaWxkIHRvIGF1dG8tcGFjayBpZiBtb3JlIHRoYW4gb25lIHBhY2sgZXhpc3RzCisJICAgIGNkIGNoaWxkICYmCisJICAgIGdpdCBjb25maWcgZ2MuYXV0b3BhY2tsaW1pdCAxICYmCisJICAgIGdpdCBjb25maWcgZ2MuYXV0b2RldGFjaCBmYWxzZSAmJgorCSAgICBnaXQgYnJhbmNoIHRlc3RfYXV0b19nYyAmJgorCSAgICAjIEFuZCBjcmVhdGUgYSBmaWxlIHRoYXQgZm9sbG93cyB0aGUgdGVtcG9yYXJ5IG9iamVjdCBuYW1pbmcKKwkgICAgIyBjb252ZW50aW9uIGZvciB0aGUgYXV0by1nYyB0byByZW1vdmUKKwkgICAgOiA+LmdpdC9vYmplY3RzL3RtcF90ZXN0X29iamVjdCAmJgorCSAgICB0ZXN0LWNobXRpbWUgPS0xMjA5NjAxIC5naXQvb2JqZWN0cy90bXBfdGVzdF9vYmplY3QKKwkpICYmCisJKAorCSAgICBjZCBwYXJlbnQgJiYKKwkgICAgZWNobyAiRXZlbiBtb3JlIHRleHQiID4+ZmlsZS50eHQgJiYKKwkgICAgZ2l0IGNvbW1pdCAtYSAtbSAiVGhpcmQgY29tbWl0IiAmJgorCSAgICBnaXQgc2VuZC1wYWNrIC4uL2NoaWxkIEhFQUQ6cmVmcy9oZWFkcy90ZXN0X2F1dG9fZ2MKKwkpICYmCisJdGVzdCAhIC1lIGNoaWxkLy5naXQvb2JqZWN0cy90bXBfdGVzdF9vYmplY3QKKycKKworcmV3b3VuZF9wdXNoX3NldHVwKCkgeworCXJtIC1yZiBwYXJlbnQgY2hpbGQgJiYKKwlta2RpciBwYXJlbnQgJiYKKwkoCisJICAgIGNkIHBhcmVudCAmJgorCSAgICBnaXQgaW5pdCAmJgorCSAgICBlY2hvIG9uZSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkgICAgZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4gJiYKKwkgICAgZWNobyB0d28gPmZpbGUgJiYgZ2l0IGNvbW1pdCAtYSAtbSB0d28KKwkpICYmCisJZ2l0IGNsb25lIHBhcmVudCBjaGlsZCAmJgorCSgKKwkgICAgY2QgY2hpbGQgJiYgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyBleHBsaWNpdCByZWZzcGVjcyByZXNwZWN0cyBmb3JjaW5nJyAnCisJcmV3b3VuZF9wdXNoX3NldHVwICYmCisJcGFyZW50X29yaWc9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJKAorCSAgICBjZCBjaGlsZCAmJgorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIC4uL3BhcmVudCBcCisJCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyCisJKSAmJgorCXBhcmVudF9oZWFkPSQoY2QgcGFyZW50ICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3QgIiRwYXJlbnRfb3JpZyIgPSAiJHBhcmVudF9oZWFkIiAmJgorCSgKKwkgICAgY2QgY2hpbGQgJiYKKwkgICAgZ2l0IHNlbmQtcGFjayAuLi9wYXJlbnQgXAorCSAgICAgICAgK3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyCisJKSAmJgorCXBhcmVudF9oZWFkPSQoY2QgcGFyZW50ICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCWNoaWxkX2hlYWQ9JChjZCBjaGlsZCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcGFyZW50X2hlYWQiID0gIiRjaGlsZF9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHdpbGRjYXJkIHJlZnNwZWNzIHJlc3BlY3RzIGZvcmNpbmcnICcKKwlyZXdvdW5kX3B1c2hfc2V0dXAgJiYKKwlwYXJlbnRfb3JpZz0kKGNkIHBhcmVudCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi4vcGFyZW50IFwKKwkgICAgICAgICJyZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy8qIgorCSkgJiYKKwlwYXJlbnRfaGVhZD0kKGNkIHBhcmVudCAmJiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcikgJiYKKwl0ZXN0ICIkcGFyZW50X29yaWciID0gIiRwYXJlbnRfaGVhZCIgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmCisJICAgIGdpdCBzZW5kLXBhY2sgLi4vcGFyZW50IFwKKwkgICAgICAgICIrcmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKiIKKwkpICYmCisJcGFyZW50X2hlYWQ9JChjZCBwYXJlbnQgJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXIpICYmCisJY2hpbGRfaGVhZD0kKGNkIGNoaWxkICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCXRlc3QgIiRwYXJlbnRfaGVhZCIgPSAiJGNoaWxkX2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbnkgcHVzaGluZyB0byBkZWxldGUgY3VycmVudCBicmFuY2gnICcKKwlyZXdvdW5kX3B1c2hfc2V0dXAgJiYKKwkoCisJICAgIGNkIGNoaWxkICYmCisJICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLi4vcGFyZW50IDpyZWZzL2hlYWRzL21hc3RlciAyPmVycnMKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwMS11cGRhdGUtaG9va3Muc2ggYi90L3Q1NDAxLXVwZGF0ZS1ob29rcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZjI3OGQ4YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDEtdXBkYXRlLWhvb2tzLnNoCkBAIC0wLDAgKzEsMTUxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IFNoYXduIE8uIFBlYXJjZQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSB1cGRhdGUgaG9vayBpbmZyYXN0cnVjdHVyZS4nCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBUaGlzIGlzIGEgdGVzdC4gPmEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgJiYKKwl0cmVlMD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdDA9JChlY2hvIHNldHVwIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlMCkgJiYKKwllY2hvIFdlIGhvcGUgaXQgd29ya3MuID5hICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBhICYmCisJdHJlZTE9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwljb21taXQxPSQoZWNobyBtb2RpZnkgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUxIC1wICRjb21taXQwKSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRjb21taXQwICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy90b2ZhaWwgJGNvbW1pdDEgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC4vLiB2aWN0aW0uZ2l0ICYmCisJR0lUX0RJUj12aWN0aW0uZ2l0IGdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvdG9mYWlsICRjb21taXQxICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJGNvbW1pdDEgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL3RvZmFpbCAkY29tbWl0MAorJworCitjYXQgPnZpY3RpbS5naXQvaG9va3MvcHJlLXJlY2VpdmUgPDwnRU9GJworIyEvYmluL3NoCitwcmludGYgJXMgIiRAIiA+PiRHSVRfRElSL3ByZS1yZWNlaXZlLmFyZ3MKK2NhdCAtID4kR0lUX0RJUi9wcmUtcmVjZWl2ZS5zdGRpbgorZWNobyBTVERPVVQgcHJlLXJlY2VpdmUKK2VjaG8gU1RERVJSIHByZS1yZWNlaXZlID4mMgorRU9GCitjaG1vZCB1K3ggdmljdGltLmdpdC9ob29rcy9wcmUtcmVjZWl2ZQorCitjYXQgPnZpY3RpbS5naXQvaG9va3MvdXBkYXRlIDw8J0VPRicKKyMhL2Jpbi9zaAorZWNobyAiJEAiID4+JEdJVF9ESVIvdXBkYXRlLmFyZ3MKK3JlYWQgeDsgcHJpbnRmICVzICIkeCIgPiRHSVRfRElSL3VwZGF0ZS5zdGRpbgorZWNobyBTVERPVVQgdXBkYXRlICQxCitlY2hvIFNUREVSUiB1cGRhdGUgJDEgPiYyCit0ZXN0ICIkMSIgPSByZWZzL2hlYWRzL21hc3RlciB8fCBleGl0CitFT0YKK2NobW9kIHUreCB2aWN0aW0uZ2l0L2hvb2tzL3VwZGF0ZQorCitjYXQgPnZpY3RpbS5naXQvaG9va3MvcG9zdC1yZWNlaXZlIDw8J0VPRicKKyMhL2Jpbi9zaAorcHJpbnRmICVzICIkQCIgPj4kR0lUX0RJUi9wb3N0LXJlY2VpdmUuYXJncworY2F0IC0gPiRHSVRfRElSL3Bvc3QtcmVjZWl2ZS5zdGRpbgorZWNobyBTVERPVVQgcG9zdC1yZWNlaXZlCitlY2hvIFNUREVSUiBwb3N0LXJlY2VpdmUgPiYyCitFT0YKK2NobW9kIHUreCB2aWN0aW0uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZQorCitjYXQgPnZpY3RpbS5naXQvaG9va3MvcG9zdC11cGRhdGUgPDwnRU9GJworIyEvYmluL3NoCitlY2hvICIkQCIgPj4kR0lUX0RJUi9wb3N0LXVwZGF0ZS5hcmdzCityZWFkIHg7IHByaW50ZiAlcyAiJHgiID4kR0lUX0RJUi9wb3N0LXVwZGF0ZS5zdGRpbgorZWNobyBTVERPVVQgcG9zdC11cGRhdGUKK2VjaG8gU1RERVJSIHBvc3QtdXBkYXRlID4mMgorRU9GCitjaG1vZCB1K3ggdmljdGltLmdpdC9ob29rcy9wb3N0LXVwZGF0ZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHB1c2ggJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgLS1mb3JjZSAuL3ZpY3RpbS5naXQgXAorCQltYXN0ZXIgdG9mYWlsID5zZW5kLm91dCAyPnNlbmQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZWQgYXMgZXhwZWN0ZWQnICcKKwl0ZXN0ICQoR0lUX0RJUj12aWN0aW0uZ2l0IGdpdCByZXYtcGFyc2UgbWFzdGVyKSA9ICRjb21taXQxICYmCisJdGVzdCAkKEdJVF9ESVI9dmljdGltLmdpdCBnaXQgcmV2LXBhcnNlIHRvZmFpbCkgPSAkY29tbWl0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdob29rcyByYW4nICcKKwl0ZXN0IC1mIHZpY3RpbS5naXQvcHJlLXJlY2VpdmUuYXJncyAmJgorCXRlc3QgLWYgdmljdGltLmdpdC9wcmUtcmVjZWl2ZS5zdGRpbiAmJgorCXRlc3QgLWYgdmljdGltLmdpdC91cGRhdGUuYXJncyAmJgorCXRlc3QgLWYgdmljdGltLmdpdC91cGRhdGUuc3RkaW4gJiYKKwl0ZXN0IC1mIHZpY3RpbS5naXQvcG9zdC1yZWNlaXZlLmFyZ3MgJiYKKwl0ZXN0IC1mIHZpY3RpbS5naXQvcG9zdC1yZWNlaXZlLnN0ZGluICYmCisJdGVzdCAtZiB2aWN0aW0uZ2l0L3Bvc3QtdXBkYXRlLmFyZ3MgJiYKKwl0ZXN0IC1mIHZpY3RpbS5naXQvcG9zdC11cGRhdGUuc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlY2VpdmUgaG9vayBpbnB1dCcgJworCShlY2hvICRjb21taXQwICRjb21taXQxIHJlZnMvaGVhZHMvbWFzdGVyOworCSBlY2hvICRjb21taXQxICRjb21taXQwIHJlZnMvaGVhZHMvdG9mYWlsCisJKSB8IHRlc3RfY21wIC0gdmljdGltLmdpdC9wcmUtcmVjZWl2ZS5zdGRpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgaG9vayBhcmd1bWVudHMnICcKKwkoZWNobyByZWZzL2hlYWRzL21hc3RlciAkY29tbWl0MCAkY29tbWl0MTsKKwkgZWNobyByZWZzL2hlYWRzL3RvZmFpbCAkY29tbWl0MSAkY29tbWl0MAorCSkgfCB0ZXN0X2NtcCAtIHZpY3RpbS5naXQvdXBkYXRlLmFyZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1yZWNlaXZlIGhvb2sgaW5wdXQnICcKKwllY2hvICRjb21taXQwICRjb21taXQxIHJlZnMvaGVhZHMvbWFzdGVyIHwKKwl0ZXN0X2NtcCAtIHZpY3RpbS5naXQvcG9zdC1yZWNlaXZlLnN0ZGluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtdXBkYXRlIGhvb2sgYXJndW1lbnRzJyAnCisJZWNobyByZWZzL2hlYWRzL21hc3RlciB8CisJdGVzdF9jbXAgLSB2aWN0aW0uZ2l0L3Bvc3QtdXBkYXRlLmFyZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIGhvb2sgc3RkaW4gaXMgL2Rldi9udWxsJyAnCisJISB0ZXN0IC1zIHZpY3RpbS5naXQvdXBkYXRlLnN0ZGluICYmCisJISB0ZXN0IC1zIHZpY3RpbS5naXQvcG9zdC11cGRhdGUuc3RkaW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsICotcmVjZWl2ZSBob29rIGFyZ3MgYXJlIGVtcHR5JyAnCisJISB0ZXN0IC1zIHZpY3RpbS5naXQvcHJlLXJlY2VpdmUuYXJncyAmJgorCSEgdGVzdCAtcyB2aWN0aW0uZ2l0L3Bvc3QtcmVjZWl2ZS5hcmdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmQtcGFjayBwcm9kdWNlZCBubyBvdXRwdXQnICcKKwkhIHRlc3QgLXMgc2VuZC5vdXQKKycKKworY2F0IDw8RU9GID5leHBlY3QKK3JlbW90ZTogU1RET1VUIHByZS1yZWNlaXZlCityZW1vdGU6IFNUREVSUiBwcmUtcmVjZWl2ZQorcmVtb3RlOiBTVERPVVQgdXBkYXRlIHJlZnMvaGVhZHMvbWFzdGVyCityZW1vdGU6IFNUREVSUiB1cGRhdGUgcmVmcy9oZWFkcy9tYXN0ZXIKK3JlbW90ZTogU1RET1VUIHVwZGF0ZSByZWZzL2hlYWRzL3RvZmFpbAorcmVtb3RlOiBTVERFUlIgdXBkYXRlIHJlZnMvaGVhZHMvdG9mYWlsCityZW1vdGU6IGVycm9yOiBob29rIGRlY2xpbmVkIHRvIHVwZGF0ZSByZWZzL2hlYWRzL3RvZmFpbAorcmVtb3RlOiBTVERPVVQgcG9zdC1yZWNlaXZlCityZW1vdGU6IFNUREVSUiBwb3N0LXJlY2VpdmUKK3JlbW90ZTogU1RET1VUIHBvc3QtdXBkYXRlCityZW1vdGU6IFNUREVSUiBwb3N0LXVwZGF0ZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZW5kLXBhY2sgc3RkZXJyIGNvbnRhaW5zIGhvb2sgbWVzc2FnZXMnICcKKwlncmVwIF5yZW1vdGU6IHNlbmQuZXJyIHwgc2VkICJzLyAqXCQvLyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlLXJlY2VpdmUgaG9vayB0aGF0IGZvcmdldHMgdG8gcmVhZCBpdHMgaW5wdXQnICcKKwl3cml0ZV9zY3JpcHQgdmljdGltLmdpdC9ob29rcy9wcmUtcmVjZWl2ZSA8PC1cRU9GICYmCisJZXhpdCAwCisJRU9GCisJcm0gLWYgdmljdGltLmdpdC9ob29rcy91cGRhdGUgdmljdGltLmdpdC9ob29rcy9wb3N0LXVwZGF0ZSAmJgorCisJZm9yIHYgaW4gJCh0ZXN0X3NlcSAxMDAgOTk5KQorCWRvCisJCWdpdCBicmFuY2ggYnJhbmNoXyR2IG1hc3RlciB8fCByZXR1cm4KKwlkb25lICYmCisJZ2l0IHB1c2ggLi92aWN0aW0uZ2l0ICIrcmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKiIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDAyLXBvc3QtbWVyZ2UtaG9vay5zaCBiL3QvdDU0MDItcG9zdC1tZXJnZS1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlYjJmZmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDAyLXBvc3QtbWVyZ2UtaG9vay5zaApAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEpvc2ggRW5nbGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBwb3N0LW1lcmdlIGhvb2suJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gRGF0YSBmb3IgY29tbWl0MC4gPmEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEgJiYKKwl0cmVlMD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdDA9JChlY2hvIHNldHVwIHwgZ2l0IGNvbW1pdC10cmVlICR0cmVlMCkgJiYKKwllY2hvIENoYW5nZWQgZGF0YSBmb3IgY29tbWl0MS4gPmEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IGEgJiYKKwl0cmVlMT0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWNvbW1pdDE9JChlY2hvIG1vZGlmeSB8IGdpdCBjb21taXQtdHJlZSAkdHJlZTEgLXAgJGNvbW1pdDApICYmCisgICAgICAgIGdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRjb21taXQwICYmCisJZ2l0IGNsb25lIC4vLiBjbG9uZTEgJiYKKwlHSVRfRElSPWNsb25lMS8uZ2l0IGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYSAmJgorCWdpdCBjbG9uZSAuLy4gY2xvbmUyICYmCisJR0lUX0RJUj1jbG9uZTIvLmdpdCBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGEKKycKKworZm9yIGNsb25lIGluIDEgMjsgZG8KKyAgICBjYXQgPmNsb25lJHtjbG9uZX0vLmdpdC9ob29rcy9wb3N0LW1lcmdlIDw8J0VPRicKKyMhL2Jpbi9zaAorZWNobyAkQCA+PiAkR0lUX0RJUi9wb3N0LW1lcmdlLmFyZ3MKK0VPRgorICAgIGNobW9kIHUreCBjbG9uZSR7Y2xvbmV9Ly5naXQvaG9va3MvcG9zdC1tZXJnZQorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LW1lcmdlIGRvZXMgbm90IHJ1biBmb3IgdXAtdG8tZGF0ZSAnICcKKyAgICAgICAgR0lUX0RJUj1jbG9uZTEvLmdpdCBnaXQgbWVyZ2UgJGNvbW1pdDAgJiYKKwkhIHRlc3QgLWYgY2xvbmUxLy5naXQvcG9zdC1tZXJnZS5hcmdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtbWVyZ2UgcnVucyBhcyBleHBlY3RlZCAnICcKKyAgICAgICAgR0lUX0RJUj1jbG9uZTEvLmdpdCBnaXQgbWVyZ2UgJGNvbW1pdDEgJiYKKwl0ZXN0IC1lIGNsb25lMS8uZ2l0L3Bvc3QtbWVyZ2UuYXJncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LW1lcmdlIGZyb20gbm9ybWFsIG1lcmdlIHJlY2VpdmVzIHRoZSByaWdodCBhcmd1bWVudCAnICcKKyAgICAgICAgZ3JlcCAwIGNsb25lMS8uZ2l0L3Bvc3QtbWVyZ2UuYXJncworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LW1lcmdlIGZyb20gc3F1YXNoIG1lcmdlIHJ1bnMgYXMgZXhwZWN0ZWQgJyAnCisgICAgICAgIEdJVF9ESVI9Y2xvbmUyLy5naXQgZ2l0IG1lcmdlIC0tc3F1YXNoICRjb21taXQxICYmCisJdGVzdCAtZSBjbG9uZTIvLmdpdC9wb3N0LW1lcmdlLmFyZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1tZXJnZSBmcm9tIHNxdWFzaCBtZXJnZSByZWNlaXZlcyB0aGUgcmlnaHQgYXJndW1lbnQgJyAnCisgICAgICAgIGdyZXAgMSBjbG9uZTIvLmdpdC9wb3N0LW1lcmdlLmFyZ3MKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDAzLXBvc3QtY2hlY2tvdXQtaG9vay5zaCBiL3QvdDU0MDMtcG9zdC1jaGVja291dC1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjODk4YzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDAzLXBvc3QtY2hlY2tvdXQtaG9vay5zaApAQCAtMCwwICsxLDg4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEpvc2ggRW5nbGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHRoZSBwb3N0LWNoZWNrb3V0IGhvb2suJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gRGF0YSBmb3IgY29tbWl0MC4gPmEgJiYKKwllY2hvIERhdGEgZm9yIGNvbW1pdDAuID5iICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBhICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBiICYmCisJdHJlZTA9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwljb21taXQwPSQoZWNobyBzZXR1cCB8IGdpdCBjb21taXQtdHJlZSAkdHJlZTApICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgJGNvbW1pdDAgJiYKKwlnaXQgY2xvbmUgLi8uIGNsb25lMSAmJgorCWdpdCBjbG9uZSAuLy4gY2xvbmUyICYmCisJR0lUX0RJUj1jbG9uZTIvLmdpdCBnaXQgYnJhbmNoIG5ldzIgJiYKKwllY2hvIERhdGEgZm9yIGNvbW1pdDEuID5jbG9uZTIvYiAmJgorCUdJVF9ESVI9Y2xvbmUyLy5naXQgZ2l0IGFkZCBjbG9uZTIvYiAmJgorCUdJVF9ESVI9Y2xvbmUyLy5naXQgZ2l0IGNvbW1pdCAtbSBuZXcyCisnCisKK2ZvciBjbG9uZSBpbiAxIDI7IGRvCisgICAgY2F0ID5jbG9uZSR7Y2xvbmV9Ly5naXQvaG9va3MvcG9zdC1jaGVja291dCA8PCdFT0YnCisjIS9iaW4vc2gKK2VjaG8gJEAgPiAkR0lUX0RJUi9wb3N0LWNoZWNrb3V0LmFyZ3MKK0VPRgorICAgIGNobW9kIHUreCBjbG9uZSR7Y2xvbmV9Ly5naXQvaG9va3MvcG9zdC1jaGVja291dAorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwb3N0LWNoZWNrb3V0IHJ1bnMgYXMgZXhwZWN0ZWQgJyAnCisJR0lUX0RJUj1jbG9uZTEvLmdpdCBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdCAtZSBjbG9uZTEvLmdpdC9wb3N0LWNoZWNrb3V0LmFyZ3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCByZWNlaXZlcyB0aGUgcmlnaHQgYXJndW1lbnRzIHdpdGggSEVBRCB1bmNoYW5nZWQgJyAnCisJb2xkPSQoYXdrICJ7cHJpbnQgXCQxfSIgY2xvbmUxLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCW5ldz0kKGF3ayAie3ByaW50IFwkMn0iIGNsb25lMS8uZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncykgJiYKKwlmbGFnPSQoYXdrICJ7cHJpbnQgXCQzfSIgY2xvbmUxLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCXRlc3QgJG9sZCA9ICRuZXcgJiYgdGVzdCAkZmxhZyA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCBydW5zIGFzIGV4cGVjdGVkICcgJworCUdJVF9ESVI9Y2xvbmUxLy5naXQgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3QgLWUgY2xvbmUxLy5naXQvcG9zdC1jaGVja291dC5hcmdzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgYXJncyBhcmUgY29ycmVjdCB3aXRoIGdpdCBjaGVja291dCAtYiAnICcKKwlHSVRfRElSPWNsb25lMS8uZ2l0IGdpdCBjaGVja291dCAtYiBuZXcxICYmCisJb2xkPSQoYXdrICJ7cHJpbnQgXCQxfSIgY2xvbmUxLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCW5ldz0kKGF3ayAie3ByaW50IFwkMn0iIGNsb25lMS8uZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncykgJiYKKwlmbGFnPSQoYXdrICJ7cHJpbnQgXCQzfSIgY2xvbmUxLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCXRlc3QgJG9sZCA9ICRuZXcgJiYgdGVzdCAkZmxhZyA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncG9zdC1jaGVja291dCByZWNlaXZlcyB0aGUgcmlnaHQgYXJncyB3aXRoIEhFQUQgY2hhbmdlZCAnICcKKwlHSVRfRElSPWNsb25lMi8uZ2l0IGdpdCBjaGVja291dCBuZXcyICYmCisJb2xkPSQoYXdrICJ7cHJpbnQgXCQxfSIgY2xvbmUyLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCW5ldz0kKGF3ayAie3ByaW50IFwkMn0iIGNsb25lMi8uZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncykgJiYKKwlmbGFnPSQoYXdrICJ7cHJpbnQgXCQzfSIgY2xvbmUyLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCXRlc3QgJG9sZCAhPSAkbmV3ICYmIHRlc3QgJGZsYWcgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgcmVjZWl2ZXMgdGhlIHJpZ2h0IGFyZ3Mgd2hlbiBub3Qgc3dpdGNoaW5nIGJyYW5jaGVzICcgJworCUdJVF9ESVI9Y2xvbmUyLy5naXQgZ2l0IGNoZWNrb3V0IG1hc3RlciBiICYmCisJb2xkPSQoYXdrICJ7cHJpbnQgXCQxfSIgY2xvbmUyLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCW5ldz0kKGF3ayAie3ByaW50IFwkMn0iIGNsb25lMi8uZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncykgJiYKKwlmbGFnPSQoYXdrICJ7cHJpbnQgXCQzfSIgY2xvbmUyLy5naXQvcG9zdC1jaGVja291dC5hcmdzKSAmJgorCXRlc3QgJG9sZCA9ICRuZXcgJiYgdGVzdCAkZmxhZyA9IDAKKycKKworaWYgdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmZpbGVtb2RlKSIgPSB0cnVlOyB0aGVuCitta2RpciAtcCB0ZW1wbGF0ZXMvaG9va3MKK2NhdCA+dGVtcGxhdGVzL2hvb2tzL3Bvc3QtY2hlY2tvdXQgPDwnRU9GJworIyEvYmluL3NoCitlY2hvICRAID4gJEdJVF9ESVIvcG9zdC1jaGVja291dC5hcmdzCitFT0YKK2NobW9kICt4IHRlbXBsYXRlcy9ob29rcy9wb3N0LWNoZWNrb3V0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QtY2hlY2tvdXQgaG9vayBpcyB0cmlnZ2VyZWQgYnkgY2xvbmUnICcKKwlnaXQgY2xvbmUgLS10ZW1wbGF0ZT10ZW1wbGF0ZXMgLiBjbG9uZTMgJiYKKwl0ZXN0IC1mIGNsb25lMy8uZ2l0L3Bvc3QtY2hlY2tvdXQuYXJncworJworZmkKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NDA0LXRyYWNraW5nLWJyYW5jaGVzLnNoIGIvdC90NTQwNC10cmFja2luZy1icmFuY2hlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYjhjMGJhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTQwNC10cmFja2luZy1icmFuY2hlcy5zaApAQCAtMCwwICsxLDYyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndHJhY2tpbmcgYnJhbmNoIHVwZGF0ZSBjaGVja3MgZm9yIGdpdCBwdXNoJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIDEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIDEgJiYKKwlnaXQgYnJhbmNoIGIxICYmCisJZ2l0IGJyYW5jaCBiMiAmJgorCWdpdCBicmFuY2ggYjMgJiYKKwlnaXQgY2xvbmUgLiBhYSAmJgorCWdpdCBjaGVja291dCBiMSAmJgorCWVjaG8gYjEgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBiMSAmJgorCWdpdCBjaGVja291dCBiMiAmJgorCWVjaG8gYjIgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBiMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHB1c2hhYmxlIGJyYW5jaGVzJyAnCisJY2QgYWEgJiYKKwliMT0kKGdpdCByZXYtcGFyc2Ugb3JpZ2luL2IxKSAmJgorCWIyPSQoZ2l0IHJldi1wYXJzZSBvcmlnaW4vYjIpICYmCisJZ2l0IGNoZWNrb3V0IC1iIGIxIG9yaWdpbi9iMSAmJgorCWVjaG8gYWEtYjEgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBhYS1iMSAmJgorCWdpdCBjaGVja291dCAtYiBiMiBvcmlnaW4vYjIgJiYKKwllY2hvIGFhLWIyID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gYWEtYjIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBhYS1tYXN0ZXIgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBhYS1tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWl4ZWQtc3VjY2VzcyBwdXNoIHJldHVybnMgZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBvcmlnaW4gOgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0cmFja2luZyBicmFuY2hlcyB1cGRhdGVkIGNvcnJlY3RseSBhZnRlciBwdXNoJyAnCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIG9yaWdpbi9tYXN0ZXIpIiA9ICIkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdHJhY2tpbmcgYnJhbmNoZXMgbm90IHVwZGF0ZWQgZm9yIGZhaWxlZCByZWZzJyAnCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIG9yaWdpbi9iMSkiID0gIiRiMSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugb3JpZ2luL2IyKSIgPSAiJGIyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGVkIGJyYW5jaGVzIGhhdmUgdGhlaXIgdHJhY2tpbmcgYnJhbmNoZXMgcmVtb3ZlZCcgJworCWdpdCBwdXNoIG9yaWdpbiA6YjEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugb3JpZ2luL2IxKSIgPSAib3JpZ2luL2IxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbHJlYWR5IGRlbGV0ZWQgdHJhY2tpbmcgYnJhbmNoZXMgaWdub3JlZCcgJworCWdpdCBicmFuY2ggLWQgLXIgb3JpZ2luL2IzICYmCisJZ2l0IHB1c2ggb3JpZ2luIDpiMyA+b3V0cHV0IDI+JjEgJiYKKwkhIGdyZXAgZXJyb3Igb3V0cHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwNS1zZW5kLXBhY2stcmV3aW5kLnNoIGIvdC90NTQwNS1zZW5kLXBhY2stcmV3aW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRiZGExOGEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NDA1LXNlbmQtcGFjay1yZXdpbmQuc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZvcmNlZCBwdXNoIHRvIHJlcGxhY2UgY29tbWl0IHdlIGRvIG5vdCBoYXZlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZTEgJiYgZ2l0IGFkZCBmaWxlMSAmJiB0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEluaXRpYWwgJiYKKwlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggd2FybiAmJgorCisJbWtkaXIgYW5vdGhlciAmJiAoCisJCWNkIGFub3RoZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGZldGNoIC0tdXBkYXRlLWhlYWQtb2sgLi4gbWFzdGVyOm1hc3RlcgorCSkgJiYKKworCT5maWxlMiAmJiBnaXQgYWRkIGZpbGUyICYmIHRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gU2Vjb25kCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uIGZvcmNlZCBwdXNoIHNob3VsZCBkaWUgbm90IHNlZ2ZhdWx0JyAnCisKKwkoCisJCWNkIGFub3RoZXIgJiYKKwkJZ2l0IHB1c2ggLi4gbWFzdGVyOm1hc3RlcgorCQl0ZXN0ICQ/ID0gMQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZWQgcHVzaCBzaG91bGQgc3VjY2VlZCcgJworCisJKAorCQljZCBhbm90aGVyICYmCisJCWdpdCBwdXNoIC4uICttYXN0ZXI6bWFzdGVyCisJKQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwNi1yZW1vdGUtcmVqZWN0cy5zaCBiL3QvdDU0MDYtcmVtb3RlLXJlamVjdHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTllODBhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDYtcmVtb3RlLXJlamVjdHMuc2gKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlbW90ZSBwdXNoIHJlamVjdHMgYXJlIHJlcG9ydGVkIGJ5IGNsaWVudCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgLmdpdC9ob29rcyAmJgorCShlY2hvICIjIS9iaW4vc2giIDsgZWNobyAiZXhpdCAxIikgPi5naXQvaG9va3MvdXBkYXRlICYmCisJY2htb2QgK3ggLmdpdC9ob29rcy91cGRhdGUgJiYKKwllY2hvIDEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIDEgJiYKKwlnaXQgY2xvbmUgLiBjaGlsZCAmJgorCWNkIGNoaWxkICYmCisJZWNobyAyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggcmVwb3J0cyBlcnJvcicgJ3Rlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIDI+c3RkZXJyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRpdmlkdWFsIHJlZiByZXBvcnRzIGVycm9yJyAnZ3JlcCByZWplY3RlZCBzdGRlcnInCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwNy1wb3N0LXJld3JpdGUtaG9vay5zaCBiL3QvdDU0MDctcG9zdC1yZXdyaXRlLWhvb2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2E0ODIzNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU0MDctcG9zdC1yZXdyaXRlLWhvb2suc2gKQEAgLTAsMCArMSwyMzIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhvbWFzIFJhc3QKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCB0aGUgcG9zdC1yZXdyaXRlIGhvb2suJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQSBmb28gQSAmJgorCXRlc3RfY29tbWl0IEIgZm9vIEIgJiYKKwl0ZXN0X2NvbW1pdCBDIGZvbyBDICYmCisJdGVzdF9jb21taXQgRCBmb28gRCAmJgorCWdpdCBjaGVja291dCBBXjAgJiYKKwl0ZXN0X2NvbW1pdCBFIGJhciBFICYmCisJdGVzdF9jb21taXQgRiBmb28gRiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKworbWtkaXIgLmdpdC9ob29rcworCitjYXQgPi5naXQvaG9va3MvcG9zdC1yZXdyaXRlIDw8RU9GCisjIS9iaW4vc2gKK2VjaG8gXCRAID4gIiRUUkFTSF9ESVJFQ1RPUlkiL3Bvc3QtcmV3cml0ZS5hcmdzCitjYXQgPiAiJFRSQVNIX0RJUkVDVE9SWSIvcG9zdC1yZXdyaXRlLmRhdGEKK0VPRgorY2htb2QgdSt4IC5naXQvaG9va3MvcG9zdC1yZXdyaXRlCisKK2NsZWFyX2hvb2tfaW5wdXQgKCkgeworCXJtIC1mIHBvc3QtcmV3cml0ZS5hcmdzIHBvc3QtcmV3cml0ZS5kYXRhCit9CisKK3ZlcmlmeV9ob29rX2lucHV0ICgpIHsKKwl0ZXN0X2NtcCBleHBlY3RlZC5hcmdzICIkVFJBU0hfRElSRUNUT1JZIi9wb3N0LXJld3JpdGUuYXJncyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmRhdGEgIiRUUkFTSF9ESVJFQ1RPUlkiL3Bvc3QtcmV3cml0ZS5kYXRhCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQgLS1hbWVuZCcgJworCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwllY2hvICJEIG5ldyBtZXNzYWdlIiA+IG5ld21zZyAmJgorCW9sZHNoYT0kKGdpdCByZXYtcGFyc2UgSEVBRF4wKSAmJgorCWdpdCBjb21taXQgLUZuZXdtc2cgLS1hbWVuZCAmJgorCWVjaG8gYW1lbmQgPiBleHBlY3RlZC5hcmdzICYmCisJZWNobyAkb2xkc2hhICQoZ2l0IHJldi1wYXJzZSBIRUFEXjApID4gZXhwZWN0ZWQuZGF0YSAmJgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQgLS1hbWVuZCAtLW5vLXBvc3QtcmV3cml0ZScgJworCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwllY2hvICJEIG5ldyBtZXNzYWdlIGFnYWluIiA+IG5ld21zZyAmJgorCWdpdCBjb21taXQgLS1uby1wb3N0LXJld3JpdGUgLUZuZXdtc2cgLS1hbWVuZCAmJgorCXRlc3QgISAtZiBwb3N0LXJld3JpdGUuYXJncyAmJgorCXRlc3QgISAtZiBwb3N0LXJld3JpdGUuZGF0YQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIEEgQiAmJgorCWVjaG8gQyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtLXNraXAnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW9udG8gQSBCICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLXNraXAgJiYKKwllY2hvIEQgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC0tc2tpcCB0aGUgbGFzdCBvbmUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEYgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW9udG8gRCBBICYmCisJZ2l0IHJlYmFzZSAtLXNraXAgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgRSkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtbScgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1tIC0tb250byBBIEIgJiYKKwllY2hvIEMgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCisJJChnaXQgcmV2LXBhcnNlIEQpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLW0gLS1za2lwJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1vbnRvIEEgQiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1za2lwICYmCisJZWNobyBEID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3NldF9mYWtlX2VkaXRvcgorCisjIEhlbHBlciB0byB3b3JrIGFyb3VuZCB0aGUgbGFjayBvZiBvbmUtc2hvdCBleHBvcnRpbmcgZm9yCisjIHRlc3RfbXVzdF9mYWlsIChhcyBpdCBpcyBhIHNoZWxsIGZ1bmN0aW9uKQordGVzdF9mYWlsX2ludGVyYWN0aXZlX3JlYmFzZSAoKSB7CisJKAorCQlGQUtFX0xJTkVTPSIkMSIgJiYKKwkJc2hpZnQgJiYKKwkJZXhwb3J0IEZBS0VfTElORVMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSAiJEAiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1pICh1bmNoYW5nZWQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCXRlc3RfZmFpbF9pbnRlcmFjdGl2ZV9yZWJhc2UgIjEgMiIgLS1vbnRvIEEgQiAmJgorCWVjaG8gQyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEMpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtaSAoc2tpcCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9mYWlsX2ludGVyYWN0aXZlX3JlYmFzZSAiMiIgLS1vbnRvIEEgQiAmJgorCWVjaG8gRCA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEQpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZWJhc2UgLWkgKHNxdWFzaCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIEQgJiYKKwljbGVhcl9ob29rX2lucHV0ICYmCisJdGVzdF9mYWlsX2ludGVyYWN0aXZlX3JlYmFzZSAiMSBzcXVhc2ggMiIgLS1vbnRvIEEgQiAmJgorCWVjaG8gQyA+IGZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJZWNobyByZWJhc2UgPmV4cGVjdGVkLmFyZ3MgJiYKKwljYXQgPmV4cGVjdGVkLmRhdGEgPDwtRU9GICYmCisJJChnaXQgcmV2LXBhcnNlIEMpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1pIChmaXh1cCB3aXRob3V0IGNvbmZsaWN0KScgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwlGQUtFX0xJTkVTPSIxIGZpeHVwIDIiIGdpdCByZWJhc2UgLWkgQiAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkkKGdpdCByZXYtcGFyc2UgRCkgJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJRU9GCisJdmVyaWZ5X2hvb2tfaW5wdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJlYmFzZSAtaSAoZG91YmxlIGVkaXQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBEICYmCisJY2xlYXJfaG9va19pbnB1dCAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIiIGdpdCByZWJhc2UgLWkgQiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gc29tZXRoaW5nID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwllY2hvIHJlYmFzZSA+ZXhwZWN0ZWQuYXJncyAmJgorCWNhdCA+ZXhwZWN0ZWQuZGF0YSA8PC1FT0YgJiYKKwkkKGdpdCByZXYtcGFyc2UgQykgJChnaXQgcmV2LXBhcnNlIEhFQUReKQorCSQoZ2l0IHJldi1wYXJzZSBEKSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwlFT0YKKwl2ZXJpZnlfaG9va19pbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcmViYXNlIC1pIChleGVjKScgJworCWdpdCByZXNldCAtLWhhcmQgRCAmJgorCWNsZWFyX2hvb2tfaW5wdXQgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZXhlY19mYWxzZSAyIiBnaXQgcmViYXNlIC1pIEIgJiYKKwllY2hvIHNvbWV0aGluZyA+YmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwkjIEZhaWxzIGJlY2F1c2Ugb2YgZXhlYyBmYWxzZQorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWVjaG8gcmViYXNlID5leHBlY3RlZC5hcmdzICYmCisJY2F0ID5leHBlY3RlZC5kYXRhIDw8LUVPRiAmJgorCSQoZ2l0IHJldi1wYXJzZSBDKSAkKGdpdCByZXYtcGFyc2UgSEVBRF4pCisJJChnaXQgcmV2LXBhcnNlIEQpICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCUVPRgorCXZlcmlmeV9ob29rX2lucHV0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTQwOC1zZW5kLXBhY2stc3RkaW4uc2ggYi90L3Q1NDA4LXNlbmQtcGFjay1zdGRpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lODczN2RmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTQwOC1zZW5kLXBhY2stc3RkaW4uc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NlbmQtcGFjayAtLXN0ZGluIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK2NyZWF0ZV9yZWYgKCkgeworCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwl0ZXN0X3RpY2sgJiYKKwljb21taXQ9JChlY2hvICIkMSIgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUpICYmCisJZ2l0IHVwZGF0ZS1yZWYgIiQxIiAkY29tbWl0Cit9CisKK2NsZWFyX3JlbW90ZSAoKSB7CisJcm0gLXJmIHJlbW90ZS5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVtb3RlLmdpdAorfQorCit2ZXJpZnlfcHVzaCAoKSB7CisJZ2l0IHJldi1wYXJzZSAiJDEiID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPXJlbW90ZS5naXQgcmV2LXBhcnNlICIkezI6LSQxfSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVmcycgJworCWNhdCA+cmVmcyA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9BCisJcmVmcy9oZWFkcy9DCisJcmVmcy90YWdzL0QKKwlyZWZzL2hlYWRzL0IKKwlyZWZzL3RhZ3MvRQorCUVPRgorCWZvciBpIGluICQoY2F0IHJlZnMpOyBkbworCQljcmVhdGVfcmVmICRpIHx8IHJldHVybiAxCisJZG9uZQorJworCisjIHNhbml0eSBjaGVjayBvdXIgc2V0dXAKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnMgb24gY21kbGluZScgJworCWNsZWFyX3JlbW90ZSAmJgorCWdpdCBzZW5kLXBhY2sgcmVtb3RlLmdpdCAkKGNhdCByZWZzKSAmJgorCWZvciBpIGluICQoY2F0IHJlZnMpOyBkbworCQl2ZXJpZnlfcHVzaCAkaSB8fCByZXR1cm4gMQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcyBvdmVyIHN0ZGluJyAnCisJY2xlYXJfcmVtb3RlICYmCisJZ2l0IHNlbmQtcGFjayByZW1vdGUuZ2l0IC0tc3RkaW4gPHJlZnMgJiYKKwlmb3IgaSBpbiAkKGNhdCByZWZzKTsgZG8KKwkJdmVyaWZ5X3B1c2ggJGkgfHwgcmV0dXJuIDEKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0ZGluIGxpbmVzIGFyZSBmdWxsIHJlZnNwZWNzJyAnCisJY2xlYXJfcmVtb3RlICYmCisJZWNobyAiQTpvdGhlciIgPmlucHV0ICYmCisJZ2l0IHNlbmQtcGFjayByZW1vdGUuZ2l0IC0tc3RkaW4gPGlucHV0ICYmCisJdmVyaWZ5X3B1c2ggcmVmcy9oZWFkcy9BIHJlZnMvaGVhZHMvb3RoZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RkaW4gbWl4ZWQgd2l0aCBjbWRsaW5lJyAnCisJY2xlYXJfcmVtb3RlICYmCisJZWNobyBBID5pbnB1dCAmJgorCWdpdCBzZW5kLXBhY2sgcmVtb3RlLmdpdCAtLXN0ZGluIEIgPGlucHV0ICYmCisJdmVyaWZ5X3B1c2ggQSAmJgorCXZlcmlmeV9wdXNoIEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY21kbGluZSByZWZzIHdyaXR0ZW4gaW4gb3JkZXInICcKKwljbGVhcl9yZW1vdGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIHJlbW90ZS5naXQgQTpmb28gQjpmb28gJiYKKwl2ZXJpZnlfcHVzaCBBIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXN0ZGluIHJlZnMgY29tZSBhZnRlciBjbWRsaW5lJyAnCisJY2xlYXJfcmVtb3RlICYmCisJZWNobyBBOmZvbyA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIHJlbW90ZS5naXQgLS1zdGRpbiBCOmZvbyA8aW5wdXQgJiYKKwl2ZXJpZnlfcHVzaCBCIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZzcGVjcyBhbmQgLS1taXJyb3IgZG8gbm90IG1peCAoY21kbGluZSknICcKKwljbGVhcl9yZW1vdGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1wYWNrIHJlbW90ZS5naXQgLS1taXJyb3IgJChjYXQgcmVmcykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmc3BlY3MgYW5kIC0tbWlycm9yIGRvIG5vdCBtaXggKHN0ZGluKScgJworCWNsZWFyX3JlbW90ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLXBhY2sgcmVtb3RlLmdpdCAtLW1pcnJvciAtLXN0ZGluIDxyZWZzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwMC1mZXRjaC1wYWNrLnNoIGIvdC90NTUwMC1mZXRjaC1wYWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNhOWI3NzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTAwLWZldGNoLXBhY2suc2gKQEAgLTAsMCArMSw2NDAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0aW5nIG11bHRpX2FjayBwYWNrIGZldGNoaW5nJworCisuIC4vdGVzdC1saWIuc2gKKworIyBUZXN0IGZldGNoLXBhY2svdXBsb2FkLXBhY2sgcGFpci4KKworIyBTb21lIGNvbnZlbmllbmNlIGZ1bmN0aW9ucworCithZGQgKCkgeworCW5hbWU9JDEgJiYKKwl0ZXh0PSIkQCIgJiYKKwlicmFuY2g9YGVjaG8gJG5hbWUgfCBzZWQgLWUgJ3MvXlwoLlwpLiokL1wxLydgICYmCisJcGFyZW50cz0iIiAmJgorCisJc2hpZnQgJiYKKwl3aGlsZSB0ZXN0ICQxOyBkbworCQlwYXJlbnRzPSIkcGFyZW50cyAtcCAkMSIgJiYKKwkJc2hpZnQKKwlkb25lICYmCisKKwllY2hvICIkdGV4dCIgPiB0ZXN0LnR4dCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgdGVzdC50eHQgJiYKKwl0cmVlPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJIyBtYWtlIHN1cmUgdGltZXN0YW1wcyBhcmUgaW4gY29ycmVjdCBvcmRlcgorCXRlc3RfdGljayAmJgorCWNvbW1pdD0kKGVjaG8gIiR0ZXh0IiB8IGdpdCBjb21taXQtdHJlZSAkdHJlZSAkcGFyZW50cykgJiYKKwlldmFsICIkbmFtZT0kY29tbWl0OyBleHBvcnQgJG5hbWUiICYmCisJZWNobyAkY29tbWl0ID4gLmdpdC9yZWZzL2hlYWRzLyRicmFuY2ggJiYKKwlldmFsICR7YnJhbmNofVRJUD0kY29tbWl0Cit9CisKK3B1bGxfdG9fY2xpZW50ICgpIHsKKwludW1iZXI9JDEgJiYKKwloZWFkcz0kMiAmJgorCWNvdW50PSQzICYmCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJG51bWJlciBwdWxsIiAnCisJCSgKKwkJCWNkIGNsaWVudCAmJgorCQkJZ2l0IGZldGNoLXBhY2sgLWsgLXYgLi4gJGhlYWRzICYmCisKKwkJCWNhc2UgIiRoZWFkcyIgaW4KKwkJCSAgICAqQSopCisJCQkJICAgIGVjaG8gJEFUSVAgPiAuZ2l0L3JlZnMvaGVhZHMvQTs7CisJCQllc2FjICYmCisJCQljYXNlICIkaGVhZHMiIGluICpCKikKKwkJCSAgICBlY2hvICRCVElQID4gLmdpdC9yZWZzL2hlYWRzL0I7OworCQkJZXNhYyAmJgorCQkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvYGVjaG8gJGhlYWRzIFwKKwkJCQl8IHNlZCAtZSAicy9eXCguXCkuKiQvXDEvImAgJiYKKworCQkJZ2l0IGZzY2sgLS1mdWxsICYmCisKKwkJCW12IC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKiAuICYmCisJCQlwPWBscyAtMSBwYWNrLSoucGFja2AgJiYKKwkJCWdpdCB1bnBhY2stb2JqZWN0cyA8JHAgJiYKKwkJCWdpdCBmc2NrIC0tZnVsbCAmJgorCisJCQlpZHg9YGVjaG8gcGFjay0qLmlkeGAgJiYKKwkJCXBhY2tfY291bnQ9YGdpdCBzaG93LWluZGV4IDwkaWR4IHwgd2MgLWxgICYmCisJCQl0ZXN0ICRwYWNrX2NvdW50ID0gJGNvdW50ICYmCisJCQlybSAtZiBwYWNrLSoKKwkJKQorCScKK30KKworIyBIZXJlIGJlZ2lucyB0aGUgYWN0dWFsIHRlc3RpbmcKKworIyBBMSAtIC4uLiAtIEEyMCAtIEEyMQorIyAgICBcCisjICAgICAgQjEgIC0gICBCMiAtIC4uIC0gQjcwCisKKyMgY2xpZW50IHB1bGxzIEEyMCwgQjEuIFRoZW4gdHJhY2tzIG9ubHkgQi4gVGhlbiBwdWxscyBBLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIGNsaWVudCAmJgorCSgKKwkJY2QgY2xpZW50ICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIudW5wYWNrbGltaXQgMAorCSkgJiYKKwlhZGQgQTEgJiYKKwlwcmV2PTEgJiYKKwljdXI9MiAmJgorCXdoaWxlIFsgJGN1ciAtbGUgMTAgXTsgZG8KKwkJYWRkIEEkY3VyICQoZXZhbCBlY2hvIFwkQSRwcmV2KSAmJgorCQlwcmV2PSRjdXIgJiYKKwkJY3VyPSQoKCRjdXIrMSkpCisJZG9uZSAmJgorCWFkZCBCMSAkQTEgJiYKKwllY2hvICRBVElQID4gLmdpdC9yZWZzL2hlYWRzL0EgJiYKKwllY2hvICRCVElQID4gLmdpdC9yZWZzL2hlYWRzL0IgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9CCisnCisKK3B1bGxfdG9fY2xpZW50IDFzdCAicmVmcy9oZWFkcy9CIHJlZnMvaGVhZHMvQSIgJCgoMTEqMykpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Bvc3QgMXN0IHB1bGwgc2V0dXAnICcKKwlhZGQgQTExICRBMTAgJiYKKwlwcmV2PTEgJiYKKwljdXI9MiAmJgorCXdoaWxlIFsgJGN1ciAtbGUgNjUgXTsgZG8KKwkJYWRkIEIkY3VyICQoZXZhbCBlY2hvIFwkQiRwcmV2KSAmJgorCQlwcmV2PSRjdXIgJiYKKwkJY3VyPSQoKCRjdXIrMSkpCisJZG9uZQorJworCitwdWxsX3RvX2NsaWVudCAybmQgInJlZnMvaGVhZHMvQiIgJCgoNjQqMykpCisKK3B1bGxfdG9fY2xpZW50IDNyZCAicmVmcy9oZWFkcy9BIiAkKCgxKjMpKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaW5nbGUgYnJhbmNoIGNsb25lJyAnCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAiZmlsZTovLyQocHdkKS8uIiBzaW5nbGVicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlIGJyYW5jaCBvYmplY3QgY291bnQnICcKKwlHSVRfRElSPXNpbmdsZWJyYW5jaC8uZ2l0IGdpdCBjb3VudC1vYmplY3RzIC12IHwKKwkJZ3JlcCAiXmluLXBhY2s6IiA+IGNvdW50LnNpbmdsZWJyYW5jaCAmJgorCWVjaG8gImluLXBhY2s6IDE5OCIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY291bnQuc2luZ2xlYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZSBnaXZlbiBicmFuY2ggY2xvbmUnICcKKwlnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIC0tYnJhbmNoIEEgImZpbGU6Ly8kKHB3ZCkvLiIgYnJhbmNoLWEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLS1naXQtZGlyPWJyYW5jaC1hLy5naXQgcmV2LXBhcnNlIG9yaWdpbi9CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgZGVwdGggMScgJworCWdpdCBjbG9uZSAtLW5vLXNpbmdsZS1icmFuY2ggLS1kZXB0aCAxICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3cwICYmCisJdGVzdCAiYGdpdCAtLWdpdC1kaXI9c2hhbGxvdzAvLmdpdCByZXYtbGlzdCAtLWNvdW50IEhFQURgIiA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBkZXB0aCAxIHdpdGggZnNjaycgJworCWdpdCBjb25maWcgLS1nbG9iYWwgZmV0Y2guZnNja29iamVjdHMgdHJ1ZSAmJgorCWdpdCBjbG9uZSAtLW5vLXNpbmdsZS1icmFuY2ggLS1kZXB0aCAxICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3cwZnNjayAmJgorCXRlc3QgImBnaXQgLS1naXQtZGlyPXNoYWxsb3cwZnNjay8uZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRGAiID0gMSAmJgorCWdpdCBjb25maWcgLS1nbG9iYWwgLS11bnNldCBmZXRjaC5mc2Nrb2JqZWN0cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93JyAnCisJZ2l0IGNsb25lIC0tbm8tc2luZ2xlLWJyYW5jaCAtLWRlcHRoIDIgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IGRlcHRoIGNvdW50JyAnCisJdGVzdCAiYGdpdCAtLWdpdC1kaXI9c2hhbGxvdy8uZ2l0IHJldi1saXN0IC0tY291bnQgSEVBRGAiID0gMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmluLXBhY2s6IDEyIiBjb3VudC5zaGFsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50IChwYXJ0IDIpJyAnCisJc2VkIC1lICIvXmluLXBhY2s6L2QiIC1lICIvXnBhY2tzOi9kIiAtZSAiL15zaXplLXBhY2s6L2QiIFwKKwkgICAgLWUgIi86IDAkL2QiIGNvdW50LnNoYWxsb3cgPiBjb3VudF9vdXRwdXQgJiYKKwkhIHRlc3QgLXMgY291bnRfb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZzY2sgaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmc2NrIC0tZnVsbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIGZldGNoIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgZmV0Y2gKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoYW5nZXMgZXhwZWN0ZWQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdy4yICYmCisJY21wIGNvdW50LnNoYWxsb3cgY291bnQuc2hhbGxvdy4yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHNhbWUgZGVwdGggaW4gc2hhbGxvdyByZXBvJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBmZXRjaCAtLWRlcHRoPTIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNoYW5nZXMgZXhwZWN0ZWQnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdy4zICYmCisJY21wIGNvdW50LnNoYWxsb3cgY291bnQuc2hhbGxvdy4zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB0d28gbW9yZScgJworCWFkZCBCNjYgJEI2NSAmJgorCWFkZCBCNjcgJEI2NgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIGluIHNoYWxsb3cgcmVwbycgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgcHVsbCAuLiBCCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQlnaXQgY291bnQtb2JqZWN0cyAtdgorCSkgPiBjb3VudC5zaGFsbG93ICYmCisJZ3JlcCAiXmNvdW50OiA2IiBjb3VudC5zaGFsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB0d28gbW9yZSAocGFydCAyKScgJworCWFkZCBCNjggJEI2NyAmJgorCWFkZCBCNjkgJEI2OAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWVwZW5pbmcgcHVsbCBpbiBzaGFsbG93IHJlcG8nICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IHB1bGwgLS1kZXB0aCA0IC4uIEIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50JyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cgJiYKKwlncmVwICJeY291bnQ6IDEyIiBjb3VudC5zaGFsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZXBlbmluZyBmZXRjaCBpbiBzaGFsbG93IHJlcG8nICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGZldGNoIC0tZGVwdGggNCAuLiBBOkEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50JyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cgJiYKKwlncmVwICJeY291bnQ6IDE4IiBjb3VudC5zaGFsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgaW4gc2hhbGxvdyByZXBvIHdpdGggbWlzc2luZyBtZXJnZSBiYXNlJyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tZGVwdGggNCAuLiBBCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpdGlvbmFsIHNpbXBsZSBzaGFsbG93IGRlZXBlbmluZ3MnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGZldGNoIC0tZGVwdGg9OCAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0xMCAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0xMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyBkZXB0aCBjb3VudCcgJworCXRlc3QgImBnaXQgLS1naXQtZGlyPXNoYWxsb3cvLmdpdCByZXYtbGlzdCAtLWNvdW50IEhFQURgIiA9IDExCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50JyAnCisJKAorCQljZCBzaGFsbG93ICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12CisJKSA+IGNvdW50LnNoYWxsb3cgJiYKKwlncmVwICJeY291bnQ6IDU1IiBjb3VudC5zaGFsbG93CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tbm8tc2hhbGxvdyBvbiBmdWxsIHJlcG8nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1ub3NoYWxsb3cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1kZXB0aCAtLW5vLXNoYWxsb3cnICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC0tZGVwdGg9MSAtLW5vc2hhbGxvdworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHVybiBzaGFsbG93IHRvIGNvbXBsZXRlIHJlcG9zaXRvcnknICcKKwkoCisJCWNkIHNoYWxsb3cgJiYKKwkJZ2l0IGZldGNoIC0tdW5zaGFsbG93ICYmCisJCSEgdGVzdCAtZiAuZ2l0L3NoYWxsb3cgJiYKKwkJZ2l0IGZzY2sgLS1mdWxsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IHdpdGhvdXQgLS1uby1zaW5nbGUtYnJhbmNoJyAnCisJZ2l0IGNsb25lIC0tZGVwdGggMSAiZmlsZTovLyQocHdkKS8uIiBzaGFsbG93MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzaGFsbG93IG9iamVjdCBjb3VudCcgJworCSgKKwkJY2Qgc2hhbGxvdzIgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgLXYKKwkpID4gY291bnQuc2hhbGxvdzIgJiYKKwlncmVwICJeaW4tcGFjazogMyIgY291bnQuc2hhbGxvdzIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyB3aXRoIC0tYnJhbmNoJyAnCisJZ2l0IGNsb25lIC0tZGVwdGggMSAtLWJyYW5jaCBBICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3czCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNoYWxsb3cgb2JqZWN0IGNvdW50JyAnCisJZWNobyAiaW4tcGFjazogMyIgPiBjb3VudDMuZXhwZWN0ZWQgJiYKKwlHSVRfRElSPXNoYWxsb3czLy5naXQgZ2l0IGNvdW50LW9iamVjdHMgLXYgfAorCQlncmVwICJeaW4tcGFjayIgPiBjb3VudDMuYWN0dWFsICYmCisJdGVzdF9jbXAgY291bnQzLmV4cGVjdGVkIGNvdW50My5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyB3aXRoIGRldGFjaGVkIEhFQUQnICcKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwlnaXQgY2xvbmUgLS1kZXB0aCAxICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3c1ICYmCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwlHSVRfRElSPXNoYWxsb3c1Ly5naXQgZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IGNsb25lIHB1bGxpbmcgdGFncycgJworCWdpdCB0YWcgLWEgLW0gQSBUQUdBMSBBICYmCisJZ2l0IHRhZyAtYSAtbSBCIFRBR0IxIEIgJiYKKwlnaXQgdGFnIFRBR0EyIEEgJiYKKwlnaXQgdGFnIFRBR0IyIEIgJiYKKwlnaXQgY2xvbmUgLS1kZXB0aCAxICJmaWxlOi8vJChwd2QpLy4iIHNoYWxsb3c2ICYmCisKKwljYXQgPnRhZ2xpc3QuZXhwZWN0ZWQgPDxcRU9GICYmCitUQUdCMQorVEFHQjIKK0VPRgorCUdJVF9ESVI9c2hhbGxvdzYvLmdpdCBnaXQgdGFnIC1sID50YWdsaXN0LmFjdHVhbCAmJgorCXRlc3RfY21wIHRhZ2xpc3QuZXhwZWN0ZWQgdGFnbGlzdC5hY3R1YWwgJiYKKworCWVjaG8gImluLXBhY2s6IDQiID4gY291bnQ2LmV4cGVjdGVkICYmCisJR0lUX0RJUj1zaGFsbG93Ni8uZ2l0IGdpdCBjb3VudC1vYmplY3RzIC12IHwKKwkJZ3JlcCAiXmluLXBhY2siID4gY291bnQ2LmFjdHVhbCAmJgorCXRlc3RfY21wIGNvdW50Ni5leHBlY3RlZCBjb3VudDYuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NoYWxsb3cgY2xvbmluZyBzaW5nbGUgdGFnJyAnCisJZ2l0IGNsb25lIC0tZGVwdGggMSAtLWJyYW5jaD1UQUdCMSAiZmlsZTovLyQocHdkKS8uIiBzaGFsbG93NyAmJgorCWNhdCA+dGFnbGlzdC5leHBlY3RlZCA8PFxFT0YgJiYKK1RBR0IxCitUQUdCMgorRU9GCisJR0lUX0RJUj1zaGFsbG93Ny8uZ2l0IGdpdCB0YWcgLWwgPnRhZ2xpc3QuYWN0dWFsICYmCisJdGVzdF9jbXAgdGFnbGlzdC5leHBlY3RlZCB0YWdsaXN0LmFjdHVhbCAmJgorCisJZWNobyAiaW4tcGFjazogNCIgPiBjb3VudDcuZXhwZWN0ZWQgJiYKKwlHSVRfRElSPXNoYWxsb3c3Ly5naXQgZ2l0IGNvdW50LW9iamVjdHMgLXYgfAorCQlncmVwICJeaW4tcGFjayIgPiBjb3VudDcuYWN0dWFsICYmCisJdGVzdF9jbXAgY291bnQ3LmV4cGVjdGVkIGNvdW50Ny5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2hhbGxvdyB3aXRoIHBhY2tlZCByZWZzJyAnCisJZ2l0IHBhY2stcmVmcyAtLWFsbCAmJgorCWdpdCBjbG9uZSAtLWRlcHRoIDEgLS1icmFuY2ggQSAiZmlsZTovLyQocHdkKS8uIiBzaGFsbG93OCAmJgorCWVjaG8gImluLXBhY2s6IDQiID4gY291bnQ4LmV4cGVjdGVkICYmCisJR0lUX0RJUj1zaGFsbG93OC8uZ2l0IGdpdCBjb3VudC1vYmplY3RzIC12IHwKKwkJZ3JlcCAiXmluLXBhY2siID4gY291bnQ4LmFjdHVhbCAmJgorCXRlc3RfY21wIGNvdW50OC5leHBlY3RlZCBjb3VudDguYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGluIHNoYWxsb3cgcmVwbyB1bnJlYWNoYWJsZSBzaGFsbG93IG9iamVjdHMnICcKKwkoCisJCWdpdCBjbG9uZSAtLWJhcmUgLS1icmFuY2ggQiAtLXNpbmdsZS1icmFuY2ggImZpbGU6Ly8kKHB3ZCkvLiIgbm8tcmVmbG9nICYmCisJCWdpdCBjbG9uZSAtLWRlcHRoIDEgImZpbGU6Ly8kKHB3ZCkvbm8tcmVmbG9nIiBzaGFsbG93OSAmJgorCQljZCBuby1yZWZsb2cgJiYKKwkJZ2l0IHRhZyAtZCBUQUdCMSBUQUdCMiAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL0IgQn5+ICYmCisJCWdpdCBnYyAtLXBydW5lPW5vdyAmJgorCQljZCAuLi9zaGFsbG93OSAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luICYmCisJCWdpdCBmc2NrIC0tbm8tZGFuZ2xpbmcKKwkpCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjcmVhdGluZyBuZXcgc2hhbGxvdyByb290JyAnCisJKAorCQlnaXQgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvLiIgc2hhbGxvdzEwICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBlbXB0eSAmJgorCQljZCBzaGFsbG93MTAgJiYKKwkJZ2l0IGZldGNoIC0tZGVwdGg9MSAtLXByb2dyZXNzIDI+YWN0dWFsICYmCisJCSMgVGhpcyBzaG91bGQgZmV0Y2ggb25seSB0aGUgZW1wdHkgY29tbWl0LCBubyB0cmVlIG9yCisJCSMgYmxvYiBvYmplY3RzCisJCWdyZXAgInJlbW90ZTogVG90YWwgMSIgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0cyBmb3IgdGhlIC0tc3RkaW4gcGFyYW1ldGVyJyAnCisJZm9yIGhlYWQgaW4gQyBEIEUgRgorCWRvCisJCWFkZCAkaGVhZAorCWRvbmUgJiYKKwlmb3IgaGVhZCBpbiBBIEIgQyBEIEUgRgorCWRvCisJCWdpdCB0YWcgJGhlYWQgJGhlYWQKKwlkb25lICYmCisJY2F0ID5pbnB1dCA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9DCisJcmVmcy9oZWFkcy9BCisJcmVmcy9oZWFkcy9ECisJcmVmcy90YWdzL0MKKwlyZWZzL2hlYWRzL0IKKwlyZWZzL3RhZ3MvQQorCXJlZnMvaGVhZHMvRQorCXJlZnMvdGFncy9CCisJcmVmcy90YWdzL0UKKwlyZWZzL3RhZ3MvRAorCUVPRgorCXNvcnQgPGlucHV0ID5leHBlY3QgJiYKKwkoCisJCWVjaG8gcmVmcy9oZWFkcy9FICYmCisJCWVjaG8gcmVmcy90YWdzL0UgJiYKKwkJY2F0IGlucHV0CisJKSA+aW5wdXQuZHVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHJlZnMgZnJvbSBjbWRsaW5lJyAnCisJKAorCQljZCBjbGllbnQgJiYKKwkJZ2l0IGZldGNoLXBhY2sgLS1uby1wcm9ncmVzcyAuLiAkKGNhdCAuLi9pbnB1dCkKKwkpID5vdXRwdXQgJiYKKwljdXQgLWQgIiAiIC1mIDIgPG91dHB1dCB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcmVmcyBmcm9tIHN0ZGluJyAnCisJKAorCQljZCBjbGllbnQgJiYKKwkJZ2l0IGZldGNoLXBhY2sgLS1zdGRpbiAtLW5vLXByb2dyZXNzIC4uIDwuLi9pbnB1dAorCSkgPm91dHB1dCAmJgorCWN1dCAtZCAiICIgLWYgMiA8b3V0cHV0IHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBtaXhlZCByZWZzIGZyb20gY21kbGluZSBhbmQgc3RkaW4nICcKKwkoCisJCWNkIGNsaWVudCAmJgorCQl0YWlsIC1uICs1IC4uL2lucHV0IHwKKwkJZ2l0IGZldGNoLXBhY2sgLS1zdGRpbiAtLW5vLXByb2dyZXNzIC4uICQoaGVhZCAtbiA0IC4uL2lucHV0KQorCSkgPm91dHB1dCAmJgorCWN1dCAtZCAiICIgLWYgMiA8b3V0cHV0IHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGR1cGxpY2F0ZSByZWZzIGZyb20gc3RkaW4nICcKKwkoCisJY2QgY2xpZW50ICYmCisJZ2l0IGZldGNoLXBhY2sgLS1zdGRpbiAtLW5vLXByb2dyZXNzIC4uIDwuLi9pbnB1dC5kdXAKKwkpID5vdXRwdXQgJiYKKwljdXQgLWQgIiAiIC1mIDIgPG91dHB1dCB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIHRlc3RzIG9mIG1pc3NpbmcgcmVmZXJlbmNlJyAnCisJY2F0ID5leHBlY3QtZXJyb3IgPDwtXEVPRgorCWVycm9yOiBubyBzdWNoIHJlbW90ZSByZWYgcmVmcy9oZWFkcy94eXp6eQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGxvbmVseSBtaXNzaW5nIHJlZicgJworCSgKKwkJY2QgY2xpZW50ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaC1wYWNrIC0tbm8tcHJvZ3Jlc3MgLi4gcmVmcy9oZWFkcy94eXp6eQorCSkgPi9kZXYvbnVsbCAyPmVycm9yLW0gJiYKKwl0ZXN0X2NtcCBleHBlY3QtZXJyb3IgZXJyb3ItbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IG1pc3NpbmcgcmVmIGFmdGVyIGV4aXN0aW5nJyAnCisJKAorCQljZCBjbGllbnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoLXBhY2sgLS1uby1wcm9ncmVzcyAuLiByZWZzL2hlYWRzL0EgcmVmcy9oZWFkcy94eXp6eQorCSkgPi9kZXYvbnVsbCAyPmVycm9yLWVtICYmCisJdGVzdF9jbXAgZXhwZWN0LWVycm9yIGVycm9yLWVtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgbWlzc2luZyByZWYgYmVmb3JlIGV4aXN0aW5nJyAnCisJKAorCQljZCBjbGllbnQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoLXBhY2sgLS1uby1wcm9ncmVzcyAuLiByZWZzL2hlYWRzL3h5enp5IHJlZnMvaGVhZHMvQQorCSkgPi9kZXYvbnVsbCAyPmVycm9yLW1lICYmCisJdGVzdF9jbXAgZXhwZWN0LWVycm9yIGVycm9yLW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1hbGwsIC0tZGVwdGgsIGFuZCBleHBsaWNpdCBoZWFkJyAnCisJKAorCQljZCBjbGllbnQgJiYKKwkJZ2l0IGZldGNoLXBhY2sgLS1uby1wcm9ncmVzcyAtLWFsbCAtLWRlcHRoPTEgLi4gcmVmcy9oZWFkcy9BCisJKSA+b3V0LWFkaCAyPmVycm9yLWFkaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tYWxsLCAtLWRlcHRoLCBhbmQgZXhwbGljaXQgdGFnJyAnCisJZ2l0IHRhZyBPTERUQUcgcmVmcy9oZWFkcy9CfjUgJiYKKwkoCisJCWNkIGNsaWVudCAmJgorCQlnaXQgZmV0Y2gtcGFjayAtLW5vLXByb2dyZXNzIC0tYWxsIC0tZGVwdGg9MSAuLiByZWZzL3RhZ3MvT0xEVEFHCisJKSA+b3V0LWFkdCAyPmVycm9yLWFkdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IGZldGNoIHdpdGggdGFncyBkb2VzIG5vdCBicmVhayB0aGUgcmVwb3NpdG9yeScgJworCW1rZGlyIHJlcG8xICYmCisJKAorCQljZCByZXBvMSAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCAxICYmCisJCXRlc3RfY29tbWl0IDIgJiYKKwkJdGVzdF9jb21taXQgMyAmJgorCQlta2RpciByZXBvMiAmJgorCQljZCByZXBvMiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgZmV0Y2ggLS1kZXB0aD0yIC4uLy5naXQgbWFzdGVyOmJyYW5jaCAmJgorCQlnaXQgZnNjaworCSkKKycKK2NoZWNrX3Byb3RfcGF0aCAoKSB7CisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlEaWFnOiB1cmw9JDEKKwlEaWFnOiBwcm90b2NvbD0kMgorCURpYWc6IHBhdGg9JDMKKwlFT0YKKwlnaXQgZmV0Y2gtcGFjayAtLWRpYWctdXJsICIkMSIgfCBncmVwIC12IGhvc3RhbmRwb3J0PSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCit9CisKK2NoZWNrX3Byb3RfaG9zdF9wb3J0X3BhdGggKCkgeworCWxvY2FsIGRpYWdwb3J0CisJY2FzZSAiJDIiIGluCisJCSpzc2gqKQorCQlwcD1zc2gKKwkJdWFoPXVzZXJhbmRob3N0CisJCWVob3N0PSQoZWNobyAkMyB8IHRyIC1kICJbXSIpCisJCWRpYWdwb3J0PSJEaWFnOiBwb3J0PSQ0IgorCQk7OworCQkqKQorCQlwcD0kcAorCQl1YWg9aG9zdGFuZHBvcnQKKwkJZWhvc3Q9JChlY2hvICQzJDQgfCBzZWQgLWUgInMvMjIkLzoyMi8iIC1lICJzL05PTkUvLyIpCisJCWRpYWdwb3J0PSIiCisJCTs7CisJZXNhYworCWNhdCA+ZXhwIDw8LUVPRiAmJgorCURpYWc6IHVybD0kMQorCURpYWc6IHByb3RvY29sPSRwcAorCURpYWc6ICR1YWg9JGVob3N0CisJJGRpYWdwb3J0CisJRGlhZzogcGF0aD0kNQorCUVPRgorCWdyZXAgLXYgIl4kIiBleHAgPmV4cGVjdGVkCisJZ2l0IGZldGNoLXBhY2sgLS1kaWFnLXVybCAiJDEiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKK30KKworZm9yIHIgaW4gcmVwbyByZTpwbyByZS9wbworZG8KKwkjIGdpdCBvciBzc2ggd2l0aCBzY2hlbWUKKwlmb3IgcCBpbiAic3NoK2dpdCIgImdpdCtzc2giIGdpdCBzc2gKKwlkbworCQlmb3IgaCBpbiBob3N0IHVzZXJAaG9zdCB1c2VyQFs6OjFdIHVzZXJAOjoxCisJCWRvCisJCQlmb3IgYyBpbiAiIiA6CisJCQlkbworCQkJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoLXBhY2sgLS1kaWFnLXVybCAkcDovLyRoJGMvJHIiICcKKwkJCQkJY2hlY2tfcHJvdF9ob3N0X3BvcnRfcGF0aCAkcDovLyRoLyRyICRwICIkaCIgTk9ORSAiLyRyIgorCQkJCScKKwkJCQkjICIvfiIgLT4gIn4iIGNvbnZlcnNpb24KKwkJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaC1wYWNrIC0tZGlhZy11cmwgJHA6Ly8kaCRjL34kciIgJworCQkJCQljaGVja19wcm90X2hvc3RfcG9ydF9wYXRoICRwOi8vJGgvfiRyICRwICIkaCIgTk9ORSAifiRyIgorCQkJCScKKwkJCWRvbmUKKwkJZG9uZQorCQlmb3IgaCBpbiBob3N0IFVzZXJAaG9zdCBVc2VyQFs6OjFdCisJCWRvCisJCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaC1wYWNrIC0tZGlhZy11cmwgJHA6Ly8kaDoyMi8kciIgJworCQkJCWNoZWNrX3Byb3RfaG9zdF9wb3J0X3BhdGggJHA6Ly8kaDoyMi8kciAkcCAiJGgiIDIyICIvJHIiCisJCQknCisJCWRvbmUKKwlkb25lCisJIyBmaWxlIHdpdGggc2NoZW1lCisJZm9yIHAgaW4gZmlsZQorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoLXBhY2sgLS1kaWFnLXVybCAkcDovLyRoLyRyIiAnCisJCQljaGVja19wcm90X3BhdGggJHA6Ly8kaC8kciAkcCAiLyRyIgorCQknCisJCSMgTm8gIi9+IiAtPiAifiIgY29udmVyc2lvbiBmb3IgZmlsZQorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaC1wYWNrIC0tZGlhZy11cmwgJHA6Ly8kaC9+JHIiICcKKwkJCWNoZWNrX3Byb3RfcGF0aCAkcDovLyRoL34kciAkcCAiL34kciIKKwkJJworCWRvbmUKKwkjIGZpbGUgd2l0aG91dCBzY2hlbWUKKwlmb3IgaCBpbiBub2hvc3Qgbm9ob3N0OjEyIFs6OjFdIFs6OjFdOjIzIFsgWzphYQorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoLXBhY2sgLS1kaWFnLXVybCAuLyRoOiRyIiAnCisJCQljaGVja19wcm90X3BhdGggLi8kaDokciAkcCAiLi8kaDokciIKKwkJJworCQkjIE5vICIvfiIgLT4gIn4iIGNvbnZlcnNpb24gZm9yIGZpbGUKKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2gtcGFjayAtLWRpYWctdXJsIC4vJHA6JGgvfiRyIiAnCisJCWNoZWNrX3Byb3RfcGF0aCAuLyRwOiRoL34kciAkcCAiLi8kcDokaC9+JHIiCisJCScKKwlkb25lCisJI3NzaCB3aXRob3V0IHNjaGVtZQorCXA9c3NoCisJZm9yIGggaW4gaG9zdCBbOjoxXQorCWRvCisJCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoLXBhY2sgLS1kaWFnLXVybCAkaDokciIgJworCQkJY2hlY2tfcHJvdF9ob3N0X3BvcnRfcGF0aCAkaDokciAkcCAiJGgiIE5PTkUgIiRyIgorCQknCisJCSMgRG8gIi9+IiAtPiAifiIgY29udmVyc2lvbgorCQl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaC1wYWNrIC0tZGlhZy11cmwgJGg6L34kciIgJworCQkJY2hlY2tfcHJvdF9ob3N0X3BvcnRfcGF0aCAkaDovfiRyICRwICIkaCIgTk9ORSAifiRyIgorCQknCisJZG9uZQorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdmZXRjaC1wYWNrIC0tZGlhZy11cmwgZmlsZTovL2M6L3JlcG8nICcKKwljaGVja19wcm90X3BhdGggZmlsZTovL2M6L3JlcG8gZmlsZSBjOi9yZXBvCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIE1JTkdXICdmZXRjaC1wYWNrIC0tZGlhZy11cmwgYzpyZXBvJyAnCisJY2hlY2tfcHJvdF9wYXRoIGM6cmVwbyBmaWxlIGM6cmVwbworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDEtZmV0Y2gtcHVzaC1hbHRlcm5hdGVzLnNoIGIvdC90NTUwMS1mZXRjaC1wdXNoLWFsdGVybmF0ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWJjNTdhYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDEtZmV0Y2gtcHVzaC1hbHRlcm5hdGVzLnNoCkBAIC0wLDAgKzEsNjYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaC9wdXNoIGludm9sdmluZyBhbHRlcm5hdGVzJworLiAuL3Rlc3QtbGliLnNoCisKK2NvdW50X29iamVjdHMgKCkgeworCWxvb3NlPTAgaW5wYWNrPTAKKwlldmFsICIkKAorCQlnaXQgY291bnQtb2JqZWN0cyAtdiB8CisJCXNlZCAtbiAtZSAncy9eY291bnQ6IFwoLipcKS9sb29zZT1cMS9wJyBcCisJCSAgICAtZSAncy9eaW4tcGFjazogXCguKlwpL2lucGFjaz1cMS9wJworCSkiICYmCisJZWNobyAkKCggJGxvb3NlICsgJGlucGFjayApKQorfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCSgKKwkJZ2l0IGluaXQgb3JpZ2luYWwgJiYKKwkJY2Qgb3JpZ2luYWwgJiYKKwkJaT0wICYmCisJCXdoaWxlIHRlc3QgJGkgLWxlIDEwMAorCQlkbworCQkJZWNobyAiJGkiID5jb3VudCAmJgorCQkJZ2l0IGFkZCBjb3VudCAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiJGkiIHx8IGV4aXQKKwkJCWk9JCgoJGkgKyAxKSkKKwkJZG9uZQorCSkgJiYKKwkoCisJCWdpdCBjbG9uZSAtLXJlZmVyZW5jZT1vcmlnaW5hbCAiZmlsZTovLyQocHdkKS9vcmlnaW5hbCIgb25lICYmCisJCWNkIG9uZSAmJgorCQllY2hvIFogPmNvdW50ICYmCisJCWdpdCBhZGQgY291bnQgJiYKKwkJZ2l0IGNvbW1pdCAtbSBaICYmCisJCWNvdW50X29iamVjdHMgPi4uL29uZS5jb3VudAorCSkgJiYKKwlBPSQocHdkKS9vcmlnaW5hbC8uZ2l0L29iamVjdHMgJiYKKwlnaXQgaW5pdCByZWNlaXZlciAmJgorCWVjaG8gIiRBIiA+cmVjZWl2ZXIvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWdpdCBpbml0IGZldGNoZXIgJiYKKwllY2hvICIkQSIgPmZldGNoZXIvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5IHdpdGggdGhlIHNhbWUgYWx0ZXJuYXRlJyAnCisJKAorCQljZCBvbmUgJiYKKwkJZ2l0IHB1c2ggLi4vcmVjZWl2ZXIgbWFzdGVyOnJlZnMvaGVhZHMvaXQKKwkpICYmCisJKAorCQljZCByZWNlaXZlciAmJgorCQljb3VudF9vYmplY3RzID4uLi9yZWNlaXZlci5jb3VudAorCSkgJiYKKwl0ZXN0X2NtcCBvbmUuY291bnQgcmVjZWl2ZXIuY291bnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2hpbmcgZnJvbSBhIHJlcG9zaXRvcnkgd2l0aCB0aGUgc2FtZSBhbHRlcm5hdGUnICcKKwkoCisJCWNkIGZldGNoZXIgJiYKKwkJZ2l0IGZldGNoIC4uL29uZSBtYXN0ZXI6cmVmcy9oZWFkcy9pdCAmJgorCQljb3VudF9vYmplY3RzID4uLi9mZXRjaGVyLmNvdW50CisJKSAmJgorCXRlc3RfY21wIG9uZS5jb3VudCBmZXRjaGVyLmNvdW50CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwMi1xdWlja2ZldGNoLnNoIGIvdC90NTUwMi1xdWlja2ZldGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdhNDZjYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTAyLXF1aWNrZmV0Y2guc2gKQEAgLTAsMCArMSwxNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHF1aWNrZmV0Y2ggZnJvbSBsb2NhbCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJdGVzdF90aWNrICYmCisJZWNobyBpY2hpID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwljbnQ9JCggKAorCQlnaXQgY291bnQtb2JqZWN0cyB8IHNlZCAtZSAicy8gKm9iamVjdHMsLiovLyIKKwkpICkgJiYKKwl0ZXN0ICRjbnQgLWVxIDMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aG91dCBhbHRlcm5hdGUnICcKKworCSgKKwkJbWtkaXIgY2xvbmVkICYmCisJCWNkIGNsb25lZCAmJgorCQlnaXQgaW5pdC1kYiAmJgorCQlnaXQgcmVtb3RlIGFkZCAtZiBvcmlnaW4gLi4KKwkpICYmCisJY250PSQoICgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBjb3VudC1vYmplY3RzIHwgc2VkIC1lICJzLyAqb2JqZWN0cywuKi8vIgorCSkgKSAmJgorCXRlc3QgJGNudCAtZXEgMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmdXJ0aGVyIGNvbW1pdHMgaW4gdGhlIG9yaWdpbmFsJyAnCisKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIG5pID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQgJiYKKworCWNudD0kKCAoCisJCWdpdCBjb3VudC1vYmplY3RzIHwgc2VkIC1lICJzLyAqb2JqZWN0cywuKi8vIgorCSkgKSAmJgorCXRlc3QgJGNudCAtZXEgNgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IGNvbW1pdCBhbmQgdHJlZSBidXQgbm90IGJsb2IgYnkgaGFuZCcgJworCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBIRUFEIHwKKwlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0IHwKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgdW5wYWNrLW9iamVjdHMKKwkpICYmCisKKwljbnQ9JCggKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgLWUgInMvICpvYmplY3RzLC4qLy8iCisJKSApICYmCisJdGVzdCAkY250IC1lcSA2ICYmCisKKwlibG9iPSQoZ2l0IHJldi1wYXJzZSBIRUFEOmZpbGUgfCBzZWQgLWUgInN8Li58Ji98IikgJiYKKwl0ZXN0IC1mICJjbG9uZWQvLmdpdC9vYmplY3RzLyRibG9iIiAmJgorCXJtIC1mICJjbG9uZWQvLmdpdC9vYmplY3RzLyRibG9iIiAmJgorCisJY250PSQoICgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBjb3VudC1vYmplY3RzIHwgc2VkIC1lICJzLyAqb2JqZWN0cywuKi8vIgorCSkgKSAmJgorCXRlc3QgJGNudCAtZXEgNQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1aWNrZmV0Y2ggc2hvdWxkIG5vdCBsZWF2ZSBhIGNvcnJ1cHRlZCByZXBvc2l0b3J5JyAnCisKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgZmV0Y2gKKwkpICYmCisKKwljbnQ9JCggKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IGNvdW50LW9iamVjdHMgfCBzZWQgLWUgInMvICpvYmplY3RzLC4qLy8iCisJKSApICYmCisJdGVzdCAkY250IC1lcSA2CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncXVpY2tmZXRjaCBzaG91bGQgbm90IGNvcHkgZnJvbSBhbHRlcm5hdGUnICcKKworCSgKKwkJbWtkaXIgcXVpY2tjbG9uZSAmJgorCQljZCBxdWlja2Nsb25lICYmCisJCWdpdCBpbml0LWRiICYmCisJCShjZCAuLi8uZ2l0L29iamVjdHMgJiYgcHdkKSA+LmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gLi4gJiYKKwkJZ2l0IGZldGNoIC1rIC1rCisJKSAmJgorCW9ial9jbnQ9JCggKAorCQljZCBxdWlja2Nsb25lICYmCisJCWdpdCBjb3VudC1vYmplY3RzIHwgc2VkIC1lICJzLyAqb2JqZWN0cywuKi8vIgorCSkgKSAmJgorCXBja19jbnQ9JCggKAorCQljZCBxdWlja2Nsb25lICYmCisJCWdpdCBjb3VudC1vYmplY3RzIC12IHwgc2VkIC1uIC1lICIvcGFja3M6L3sKKwkJCQlzL3BhY2tzOi8vCisJCQkJcAorCQkJCXEKKwkJCX0iCisJKSApICYmCisJb3JpZ2luX21hc3Rlcj0kKCAoCisJCWNkIHF1aWNrY2xvbmUgJiYKKwkJZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyCisJKSApICYmCisJZWNobyAibG9vc2Ugb2JqZWN0czogJG9ial9jbnQsIHBhY2tmaWxlczogJHBja19jbnQiICYmCisJdGVzdCAkb2JqX2NudCAtZXEgMCAmJgorCXRlc3QgJHBja19jbnQgLWVxIDAgJiYKKwl0ZXN0IHokb3JpZ2luX21hc3RlciA9IHokKGdpdCByZXYtcGFyc2UgbWFzdGVyKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1aWNrZmV0Y2ggc2hvdWxkIGhhbmRsZSB+MTAwMCByZWZzIChvbiBXaW5kb3dzKScgJworCisJZ2l0IGdjICYmCisJaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlicmFuY2hwcmVmaXg9IiRoZWFkIHJlZnMvaGVhZHMvYnJhbmNoIiAmJgorCWZvciBpIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvCisJCWZvciBqIGluIDAgMSAyIDMgNCA1IDYgNyA4IDk7IGRvCisJCQlmb3IgayBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbworCQkJCWVjaG8gIiRicmFuY2hwcmVmaXgkaSRqJGsiID4+IC5naXQvcGFja2VkLXJlZnMKKwkJCWRvbmUKKwkJZG9uZQorCWRvbmUgJiYKKwkoCisJCWNkIGNsb25lZCAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZldGNoCisJKQorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwMy10YWdmb2xsb3cuc2ggYi90L3Q1NTAzLXRhZ2ZvbGxvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40Y2E0OGYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwMy10YWdmb2xsb3cuc2gKQEAgLTAsMCArMSwxNjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGF1dG9tYXRpYyB0YWcgZm9sbG93aW5nJworCisuIC4vdGVzdC1saWIuc2gKKworIyBFbmQgc3RhdGUgb2YgdGhlIHJlcG9zaXRvcnk6CisjCisjICAgICAgICAgVCAtIHRhZzEgICAgICAgICAgUyAtIHRhZzIKKyMgICAgICAgIC8gICAgICAgICAgICAgICAgIC8KKyMgICBMIC0gQSAtLS0tLS0gTyAtLS0tLS0gQgorIyAgICBcICAgXCAgICAgICAgICAgICAgICAgXAorIyAgICAgXCAgIEMgLSBvcmlnaW4vY2F0ICAgIFwKKyMgICAgICBvcmlnaW4vbWFzdGVyICAgICAgICAgbWFzdGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCWVjaG8gaWNoaSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gTCAmJgorCUw9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisKKwkoCisJCW1rZGlyIGNsb25lZCAmJgorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IGluaXQtZGIgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLWYgb3JpZ2luIC4uCisJKSAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBBID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJQT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKworVT1VUExPQURfTE9HCitVUEFUSD0iJChwd2QpLyRVIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3QnICcKK2NhdCAtIDw8RU9GID5leHBlY3QKK3dhbnQgJEEKK0VPRgorJworCitnZXRfbmVlZHMgKCkgeworCXRlc3QgLXMgIiQxIiAmJgorCXBlcmwgLWFsbmUgJworCQluZXh0IHVubGVzcyAkRlsxXSBlcSAidXBsb2FkLXBhY2s8IjsKKwkJbGFzdCBpZiAkRlsyXSBlcSAiMDAwMCI7CisJCXByaW50ICRGWzJdLCAiICIsICRGWzNdOworCScgIiQxIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBBIChuZXcgY29tbWl0IDogMSBjb25uZWN0aW9uKScgJworCXJtIC1mICRVICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJR0lUX1RSQUNFX1BBQ0tFVD0kVVBBVEggZ2l0IGZldGNoICYmCisJCXRlc3QgJEEgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgb3JpZ2luL21hc3RlcikKKwkpICYmCisJZ2V0X25lZWRzICRVID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNyZWF0ZSB0YWcgVCBvbiBBLCBjcmVhdGUgQyBvbiBicmFuY2ggY2F0IiAnCisJZ2l0IHRhZyAtYSAtbSB0YWcxIHRhZzEgJEEgJiYKKwlUPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0YWcxKSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGNhdCAmJgorCWVjaG8gQyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gQyAmJgorCUM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBleHBlY3QnICcKK2NhdCAtIDw8RU9GID5leHBlY3QKK3dhbnQgJEMKK3dhbnQgJFQKK0VPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBDLCBUIChuZXcgYnJhbmNoLCB0YWcgOiAxIGNvbm5lY3Rpb24pJyAnCisJcm0gLWYgJFUgJiYKKwkoCisJCWNkIGNsb25lZCAmJgorCQlHSVRfVFJBQ0VfUEFDS0VUPSRVUEFUSCBnaXQgZmV0Y2ggJiYKKwkJdGVzdCAkQyA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBvcmlnaW4vY2F0KSAmJgorCQl0ZXN0ICRUID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzEpICYmCisJCXRlc3QgJEEgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMV4wKQorCSkgJiYKKwlnZXRfbmVlZHMgJFUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlIGNvbW1pdHMgTywgQiwgdGFnIFMgb24gQiIgJworCXRlc3RfdGljayAmJgorCWVjaG8gTyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gTyAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBCID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisJQj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKworCWdpdCB0YWcgLWEgLW0gdGFnMiB0YWcyICRCICYmCisJUz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0JyAnCitjYXQgLSA8PEVPRiA+ZXhwZWN0Cit3YW50ICRCCit3YW50ICRTCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggQiwgUyAoY29tbWl0IGFuZCB0YWcgOiAxIGNvbm5lY3Rpb24pJyAnCisJcm0gLWYgJFUgJiYKKwkoCisJCWNkIGNsb25lZCAmJgorCQlHSVRfVFJBQ0VfUEFDS0VUPSRVUEFUSCBnaXQgZmV0Y2ggJiYKKwkJdGVzdCAkQiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBvcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICRCID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzJeMCkgJiYKKwkJdGVzdCAkUyA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0YWcyKQorCSkgJiYKKwlnZXRfbmVlZHMgJFUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZXhwZWN0JyAnCitjYXQgLSA8PEVPRiA+ZXhwZWN0Cit3YW50ICRCCit3YW50ICRTCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IGNsb25lIGZldGNoIG1hc3RlciBhbmQgdGFncycgJworCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGNhdCAmJgorCXJtIC1mICRVICYmCisJKAorCQlta2RpciBjbG9uZTIgJiYKKwkJY2QgY2xvbmUyICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAuLiAmJgorCQlHSVRfVFJBQ0VfUEFDS0VUPSRVUEFUSCBnaXQgZmV0Y2ggJiYKKwkJdGVzdCAkQiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBvcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICRTID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzIpICYmCisJCXRlc3QgJEIgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMl4wKSAmJgorCQl0ZXN0ICRUID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRhZzEpICYmCisJCXRlc3QgJEEgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGFnMV4wKQorCSkgJiYKKwlnZXRfbmVlZHMgJFUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTA0LWZldGNoLXJlY2VpdmUtc3RyaWN0LnNoIGIvdC90NTUwNC1mZXRjaC1yZWNlaXZlLXN0cmljdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NGYzZDVmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwNC1mZXRjaC1yZWNlaXZlLXN0cmljdC5zaApAQCAtMCwwICsxLDE2OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoL3JlY2VpdmUgc3RyaWN0IG1vZGUnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBoZWxsbyA+Z3JlZXRpbmdzICYmCisJZ2l0IGFkZCBncmVldGluZ3MgJiYKKwlnaXQgY29tbWl0IC1tIGdyZWV0aW5ncyAmJgorCisJUz0kKGdpdCByZXYtcGFyc2UgOmdyZWV0aW5ncyB8IHNlZCAtZSAic3xeLi58Ji98IikgJiYKKwlYPSQoZWNobyBieWUgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiB8IHNlZCAtZSAic3xeLi58Ji98IikgJiYKKwltdiAtZiAuZ2l0L29iamVjdHMvJFggLmdpdC9vYmplY3RzLyRTICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZnNjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRob3V0IHN0cmljdCcgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIGZldGNoLmZzY2tvYmplY3RzIGZhbHNlICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgZmFsc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uLy5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoICFmZXRjaC5mc2Nrb2JqZWN0cycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIGZldGNoLmZzY2tvYmplY3RzIGZhbHNlICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgdHJ1ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLi4vLmdpdCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggZmV0Y2guZnNja29iamVjdHMnICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5mc2Nrb2JqZWN0cyB0cnVlICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgZmFsc2UgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uLy5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIHRyYW5zZmVyLmZzY2tvYmplY3RzJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBpbml0IGRzdCAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBjb25maWcgdHJhbnNmZXIuZnNja29iamVjdHMgdHJ1ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLi4vLmdpdCBtYXN0ZXIKKwkpCisnCisKK2NhdCA+ZXhwIDw8RU9GCitUbyBkc3QKKyEJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy90ZXN0CVtyZW1vdGUgcmVqZWN0ZWRdIChtaXNzaW5nIG5lY2Vzc2FyeSBvYmplY3RzKQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aG91dCBzdHJpY3QnICcKKwlybSAtcmYgZHN0ICYmCisJZ2l0IGluaXQgZHN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5mc2Nrb2JqZWN0cyBmYWxzZSAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmZzY2tvYmplY3RzIGZhbHNlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBtYXN0ZXI6cmVmcy9oZWFkcy90ZXN0ID5hY3QgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCAhcmVjZWl2ZS5mc2Nrb2JqZWN0cycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZnNja29iamVjdHMgZmFsc2UgJiYKKwkJZ2l0IGNvbmZpZyB0cmFuc2Zlci5mc2Nrb2JqZWN0cyB0cnVlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBtYXN0ZXI6cmVmcy9oZWFkcy90ZXN0ID5hY3QgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK2NhdCA+ZXhwIDw8RU9GCitUbyBkc3QKKyEJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy90ZXN0CVtyZW1vdGUgcmVqZWN0ZWRdICh1bnBhY2tlciBlcnJvcikKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggcmVjZWl2ZS5mc2Nrb2JqZWN0cycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZnNja29iamVjdHMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmZzY2tvYmplY3RzIGZhbHNlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBtYXN0ZXI6cmVmcy9oZWFkcy90ZXN0ID5hY3QgJiYKKwl0ZXN0X2NtcCBleHAgYWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCB0cmFuc2Zlci5mc2Nrb2JqZWN0cycgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmZzY2tvYmplY3RzIHRydWUKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1wb3JjZWxhaW4gZHN0IG1hc3RlcjpyZWZzL2hlYWRzL3Rlc3QgPmFjdCAmJgorCXRlc3RfY21wIGV4cCBhY3QKKycKKworY2F0ID5ib2d1cy1jb21taXQgPDxcRU9GCit0cmVlIDRiODI1ZGM2NDJjYjZlYjlhMDYwZTU0YmY4ZDY5Mjg4ZmJlZTQ5MDQKK2F1dGhvciBCdWdzIEJ1bm55IDEyMzQ1Njc4OTAgKzAwMDAKK2NvbW1pdHRlciBCdWdzIEJ1bm55IDxidWdzQGJ1bi5uaT4gMTIzNDU2Nzg5MCArMDAwMAorCitUaGlzIGNvbW1pdCBvYmplY3QgaW50ZW50aW9uYWxseSBicm9rZW4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggcmVjZWl2ZS5mc2NrLnNraXBMaXN0JyAnCisJY29tbWl0PSIkKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbiA8Ym9ndXMtY29tbWl0KSIgJiYKKwlnaXQgcHVzaCAuICRjb21taXQ6cmVmcy9oZWFkcy9ib2d1cyAmJgorCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyByZWNlaXZlLmZzY2tPYmplY3RzIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgYm9ndXMgJiYKKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyByZWNlaXZlLmZzY2suc2tpcExpc3QgU0tJUCAmJgorCWVjaG8gJGNvbW1pdCA+ZHN0Ly5naXQvU0tJUCAmJgorCWdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBib2d1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggcmVjZWl2ZS5mc2NrLm1pc3NpbmdFbWFpbD13YXJuJyAnCisJY29tbWl0PSIkKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgLS1zdGRpbiA8Ym9ndXMtY29tbWl0KSIgJiYKKwlnaXQgcHVzaCAuICRjb21taXQ6cmVmcy9oZWFkcy9ib2d1cyAmJgorCXJtIC1yZiBkc3QgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyByZWNlaXZlLmZzY2tvYmplY3RzIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXBvcmNlbGFpbiBkc3QgYm9ndXMgJiYKKwlnaXQgLS1naXQtZGlyPWRzdC8uZ2l0IGNvbmZpZyBcCisJCXJlY2VpdmUuZnNjay5taXNzaW5nRW1haWwgd2FybiAmJgorCWdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBib2d1cyA+YWN0IDI+JjEgJiYKKwlncmVwICJtaXNzaW5nRW1haWwiIGFjdCAmJgorCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgYnJhbmNoIC1EIGJvZ3VzICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QvLmdpdCBjb25maWcgLS1hZGQgXAorCQlyZWNlaXZlLmZzY2subWlzc2luZ0VtYWlsIGlnbm9yZSAmJgorCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIC0tYWRkIFwKKwkJcmVjZWl2ZS5mc2NrLmJhZERhdGUgd2FybiAmJgorCWdpdCBwdXNoIC0tcG9yY2VsYWluIGRzdCBib2d1cyA+YWN0IDI+JjEgJiYKKwl0ZXN0X211c3RfZmFpbCBncmVwICJtaXNzaW5nRW1haWwiIGFjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncmVjZWl2ZS5mc2NrLnVudGVybWluYXRlZEhlYWRlcj13YXJuIHRyaWdnZXJzIGVycm9yJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBpbml0IGRzdCAmJgorCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIHJlY2VpdmUuZnNja29iamVjdHMgdHJ1ZSAmJgorCWdpdCAtLWdpdC1kaXI9ZHN0Ly5naXQgY29uZmlnIFwKKwkJcmVjZWl2ZS5mc2NrLnVudGVybWluYXRlZGhlYWRlciB3YXJuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1wb3JjZWxhaW4gZHN0IEhFQUQgPmFjdCAyPiYxICYmCisJZ3JlcCAiQ2Fubm90IGRlbW90ZSB1bnRlcm1pbmF0ZWRoZWFkZXIiIGFjdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MDUtcmVtb3RlLnNoIGIvdC90NTUwNS1yZW1vdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGZhZjlkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MDUtcmVtb3RlLnNoCkBAIC0wLDAgKzEsMTE1OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZW1vdGUgcG9yY2VsYWluLWlzaCcKKworLiAuL3Rlc3QtbGliLnNoCisKK3NldHVwX3JlcG9zaXRvcnkgKCkgeworCW1rZGlyICIkMSIgJiYgKAorCWNkICIkMSIgJiYKKwlnaXQgaW5pdCAmJgorCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCT5lbGlmICYmCisJZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKwkpCit9CisKK3Rva2Vuc19tYXRjaCAoKSB7CisJZWNobyAiJDEiIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgfCBzZWQgLWUgJy9eJC9kJyA+ZXhwZWN0ICYmCisJZWNobyAiJDIiIHwgdHIgJyAnICdcMDEyJyB8IHNvcnQgfCBzZWQgLWUgJy9eJC9kJyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCitjaGVja19yZW1vdGVfdHJhY2sgKCkgeworCWFjdHVhbD0kKGdpdCByZW1vdGUgc2hvdyAiJDEiIHwgc2VkIC1uZSAnc3xeICAgIFwoLipcKSB0cmFja2VkJHxcMXxwJykKKwlzaGlmdCAmJgorCXRva2Vuc19tYXRjaCAiJCoiICIkYWN0dWFsIgorfQorCitjaGVja190cmFja2luZ19icmFuY2ggKCkgeworCWY9IiIgJiYKKwlyPSQoZ2l0IGZvci1lYWNoLXJlZiAiLS1mb3JtYXQ9JShyZWZuYW1lKSIgfAorCQlzZWQgLW5lICJzfF5yZWZzL3JlbW90ZXMvJDEvfHxwIikgJiYKKwlzaGlmdCAmJgorCXRva2Vuc19tYXRjaCAiJCoiICIkciIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJc2V0dXBfcmVwb3NpdG9yeSBvbmUgJiYKKwlzZXR1cF9yZXBvc2l0b3J5IHR3byAmJgorCSgKKwkJY2QgdHdvICYmCisJCWdpdCBicmFuY2ggYW5vdGhlcgorCSkgJiYKKwlnaXQgY2xvbmUgb25lIHRlc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ3JlbW90ZSBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbicgJworCSgKKwkJY2QgdGVzdCAmJgorCQl0b2tlbnNfbWF0Y2ggb3JpZ2luICIkKGdpdCByZW1vdGUpIiAmJgorCQljaGVja19yZW1vdGVfdHJhY2sgb3JpZ2luIG1hc3RlciBzaWRlICYmCisJCWNoZWNrX3RyYWNraW5nX2JyYW5jaCBvcmlnaW4gSEVBRCBtYXN0ZXIgc2lkZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFub3RoZXIgcmVtb3RlJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCByZW1vdGUgYWRkIC1mIHNlY29uZCAuLi90d28gJiYKKwkJdG9rZW5zX21hdGNoICJvcmlnaW4gc2Vjb25kIiAiJChnaXQgcmVtb3RlKSIgJiYKKwkJY2hlY2tfdHJhY2tpbmdfYnJhbmNoIHNlY29uZCBtYXN0ZXIgc2lkZSBhbm90aGVyICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgIi0tZm9ybWF0PSUocmVmbmFtZSkiIHJlZnMvcmVtb3RlcyB8CisJCXNlZCAtZSAiL15yZWZzXC9yZW1vdGVzXC9vcmlnaW5cLy9kIiBcCisJCSAgICAtZSAiL15yZWZzXC9yZW1vdGVzXC9zZWNvbmRcLy9kIiA+YWN0dWFsICYmCisJCT5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2NoZWNrIHJlbW90ZS10cmFja2luZycgJworCSgKKwkJY2QgdGVzdCAmJgorCQljaGVja19yZW1vdGVfdHJhY2sgb3JpZ2luIG1hc3RlciBzaWRlICYmCisJCWNoZWNrX3JlbW90ZV90cmFjayBzZWNvbmQgbWFzdGVyIHNpZGUgYW5vdGhlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIGZvcmNlcyB0cmFja2luZyBicmFuY2hlcycgJworCSgKKwkJY2QgdGVzdCAmJgorCQljYXNlIGBnaXQgY29uZmlnIHJlbW90ZS5zZWNvbmQuZmV0Y2hgIGluCisJCSsqKSB0cnVlIDs7CisJCSAqKSBmYWxzZSA7OworCQllc2FjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgcmVtb3RlJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL3NlY29uZC9IRUFEIHJlZnMvcmVtb3Rlcy9zZWNvbmQvbWFzdGVyICYmCisJCWdpdCByZW1vdGUgcm0gc2Vjb25kCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAncmVtb3ZlIHJlbW90ZScgJworCSgKKwkJY2QgdGVzdCAmJgorCQl0b2tlbnNfbWF0Y2ggb3JpZ2luICIkKGdpdCByZW1vdGUpIiAmJgorCQljaGVja19yZW1vdGVfdHJhY2sgb3JpZ2luIG1hc3RlciBzaWRlICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgIi0tZm9ybWF0PSUocmVmbmFtZSkiIHJlZnMvcmVtb3RlcyB8CisJCXNlZCAtZSAiL15yZWZzXC9yZW1vdGVzXC9vcmlnaW5cLy9kIiA+YWN0dWFsICYmCisJCT5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3ZlIHJlbW90ZSBwcm90ZWN0cyBsb2NhbCBicmFuY2hlcycgJworCSgKKwkJY2QgdGVzdCAmJgorCQljYXQgPmV4cGVjdDEgPDwtXEVPRiAmJgorCQlOb3RlOiBBIGJyYW5jaCBvdXRzaWRlIHRoZSByZWZzL3JlbW90ZXMvIGhpZXJhcmNoeSB3YXMgbm90IHJlbW92ZWQ7CisJCXRvIGRlbGV0ZSBpdCwgdXNlOgorCQkgIGdpdCBicmFuY2ggLWQgbWFzdGVyCisJCUVPRgorCQljYXQgPmV4cGVjdDIgPDwtXEVPRiAmJgorCQlOb3RlOiBTb21lIGJyYW5jaGVzIG91dHNpZGUgdGhlIHJlZnMvcmVtb3Rlcy8gaGllcmFyY2h5IHdlcmUgbm90IHJlbW92ZWQ7CisJCXRvIGRlbGV0ZSB0aGVtLCB1c2U6CisJCSAgZ2l0IGJyYW5jaCAtZCBmb29icmFuY2gKKwkJICBnaXQgYnJhbmNoIC1kIG1hc3RlcgorCQlFT0YKKwkJZ2l0IHRhZyBmb290YWcgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub29wcy5mZXRjaCAiK3JlZnMvKjpyZWZzLyoiICYmCisJCWdpdCByZW1vdGUgcmVtb3ZlIG9vcHMgMj5hY3R1YWwxICYmCisJCWdpdCBicmFuY2ggZm9vYnJhbmNoICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9vcHMuZmV0Y2ggIityZWZzLyo6cmVmcy8qIiAmJgorCQlnaXQgcmVtb3RlIHJtIG9vcHMgMj5hY3R1YWwyICYmCisJCWdpdCBicmFuY2ggLWQgZm9vYnJhbmNoICYmCisJCWdpdCB0YWcgLWQgZm9vdGFnICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3QxIGFjdHVhbDEgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdDIgYWN0dWFsMgorCSkKKycKKworY2F0ID50ZXN0L2V4cGVjdCA8PEVPRgorKiByZW1vdGUgb3JpZ2luCisgIEZldGNoIFVSTDogJChwd2QpL29uZQorICBQdXNoICBVUkw6ICQocHdkKS9vbmUKKyAgSEVBRCBicmFuY2g6IG1hc3RlcgorICBSZW1vdGUgYnJhbmNoZXM6CisgICAgbWFzdGVyIG5ldyAobmV4dCBmZXRjaCB3aWxsIHN0b3JlIGluIHJlbW90ZXMvb3JpZ2luKQorICAgIHNpZGUgICB0cmFja2VkCisgIExvY2FsIGJyYW5jaGVzIGNvbmZpZ3VyZWQgZm9yICdnaXQgcHVsbCc6CisgICAgYWhlYWQgICAgbWVyZ2VzIHdpdGggcmVtb3RlIG1hc3RlcgorICAgIG1hc3RlciAgIG1lcmdlcyB3aXRoIHJlbW90ZSBtYXN0ZXIKKyAgICBvY3RvcHVzICBtZXJnZXMgd2l0aCByZW1vdGUgdG9waWMtYQorICAgICAgICAgICAgICAgIGFuZCB3aXRoIHJlbW90ZSB0b3BpYy1iCisgICAgICAgICAgICAgICAgYW5kIHdpdGggcmVtb3RlIHRvcGljLWMKKyAgICByZWJhc2UgIHJlYmFzZXMgb250byByZW1vdGUgbWFzdGVyCisgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJzoKKyAgICBtYXN0ZXIgcHVzaGVzIHRvIG1hc3RlciAgIChsb2NhbCBvdXQgb2YgZGF0ZSkKKyAgICBtYXN0ZXIgcHVzaGVzIHRvIHVwc3RyZWFtIChjcmVhdGUpCisqIHJlbW90ZSB0d28KKyAgRmV0Y2ggVVJMOiAuLi90d28KKyAgUHVzaCAgVVJMOiAuLi90aHJlZQorICBIRUFEIGJyYW5jaDogbWFzdGVyCisgIExvY2FsIHJlZnMgY29uZmlndXJlZCBmb3IgJ2dpdCBwdXNoJzoKKyAgICBhaGVhZCAgZm9yY2VzIHRvIG1hc3RlciAgKGZhc3QtZm9yd2FyZGFibGUpCisgICAgbWFzdGVyIHB1c2hlcyB0byBhbm90aGVyICh1cCB0byBkYXRlKQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3cnICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLmZldGNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdXBzdHJlYW0gJiYKKwkJZ2l0IGZldGNoICYmCisJCWdpdCBjaGVja291dCAtYiBhaGVhZCBvcmlnaW4vbWFzdGVyICYmCisJCWVjaG8gMSA+PmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gdXBkYXRlIGZpbGUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgYnJhbmNoIC0tdHJhY2sgb2N0b3B1cyBvcmlnaW4vbWFzdGVyICYmCisJCWdpdCBicmFuY2ggLS10cmFjayByZWJhc2Ugb3JpZ2luL21hc3RlciAmJgorCQlnaXQgYnJhbmNoIC1kIC1yIG9yaWdpbi9tYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnVybCAuLi90d28gJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUudHdvLnB1c2h1cmwgLi4vdGhyZWUgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2gucmViYXNlLnJlYmFzZSB0cnVlICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm9jdG9wdXMubWVyZ2UgInRvcGljLWEgdG9waWMtYiB0b3BpYy1jIiAmJgorCQkoCisJCQljZCAuLi9vbmUgJiYKKwkJCWVjaG8gMSA+ZmlsZSAmJgorCQkJdGVzdF90aWNrICYmCisJCQlnaXQgY29tbWl0IC1tIHVwZGF0ZSBmaWxlCisJCSkgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLnB1c2ggOiAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5vcmlnaW4ucHVzaCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3Vwc3RyZWFtICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5wdXNoICtyZWZzL3RhZ3MvbGFzdGJhY2t1cCAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS50d28ucHVzaCArcmVmcy9oZWFkcy9haGVhZDpyZWZzL2hlYWRzL21hc3RlciAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS50d28ucHVzaCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL2Fub3RoZXIgJiYKKwkJZ2l0IHJlbW90ZSBzaG93IG9yaWdpbiB0d28gPm91dHB1dCAmJgorCQlnaXQgYnJhbmNoIC1kIHJlYmFzZSBvY3RvcHVzICYmCisJCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCitjYXQgPnRlc3QvZXhwZWN0IDw8RU9GCisqIHJlbW90ZSBvcmlnaW4KKyAgRmV0Y2ggVVJMOiAkKHB3ZCkvb25lCisgIFB1c2ggIFVSTDogJChwd2QpL29uZQorICBIRUFEIGJyYW5jaDogKG5vdCBxdWVyaWVkKQorICBSZW1vdGUgYnJhbmNoZXM6IChzdGF0dXMgbm90IHF1ZXJpZWQpCisgICAgbWFzdGVyCisgICAgc2lkZQorICBMb2NhbCBicmFuY2hlcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1bGwnOgorICAgIGFoZWFkICBtZXJnZXMgd2l0aCByZW1vdGUgbWFzdGVyCisgICAgbWFzdGVyIG1lcmdlcyB3aXRoIHJlbW90ZSBtYXN0ZXIKKyAgTG9jYWwgcmVmcyBjb25maWd1cmVkIGZvciAnZ2l0IHB1c2gnIChzdGF0dXMgbm90IHF1ZXJpZWQpOgorICAgIChtYXRjaGluZykgICAgICAgICAgIHB1c2hlcyB0byAobWF0Y2hpbmcpCisgICAgcmVmcy9oZWFkcy9tYXN0ZXIgICAgcHVzaGVzIHRvIHJlZnMvaGVhZHMvdXBzdHJlYW0KKyAgICByZWZzL3RhZ3MvbGFzdGJhY2t1cCBmb3JjZXMgdG8gcmVmcy90YWdzL2xhc3RiYWNrdXAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IC1uJyAnCisJbXYgb25lIG9uZS51bnJlYWNoYWJsZSAmJgorCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgcmVtb3RlIHNob3cgLW4gb3JpZ2luID5vdXRwdXQgJiYKKwkJbXYgLi4vb25lLnVucmVhY2hhYmxlIC4uL29uZSAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJ1bmUnICcKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgYnJhbmNoIC1tIHNpZGUgc2lkZTIKKwkpICYmCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwkJZ2l0IHJlbW90ZSBwcnVuZSBvcmlnaW4gJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtaGVhZCAtLWRlbGV0ZScgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCAmJgorCQlnaXQgcmVtb3RlIHNldC1oZWFkIC0tZGVsZXRlIG9yaWdpbiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LWhlYWQgLS1hdXRvJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCByZW1vdGUgc2V0LWhlYWQgLS1hdXRvIG9yaWdpbiAmJgorCQllY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPm91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtaGVhZCAtLWF1dG8gaGFzIG5vIHByb2JsZW0gdy9tdWx0aXBsZSBIRUFEcycgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgZmV0Y2ggdHdvICJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3R3by8qIiAmJgorCQlnaXQgcmVtb3RlIHNldC1oZWFkIC0tYXV0byB0d28gPm91dHB1dCAyPiYxICYmCisJCWVjaG8gInR3by9IRUFEIHNldCB0byBtYXN0ZXIiID5leHBlY3QgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKwkpCisnCisKK2NhdCA+dGVzdC9leHBlY3QgPDxcRU9GCityZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0LWhlYWQgZXhwbGljaXQnICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtaGVhZCBvcmlnaW4gc2lkZTIgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPm91dHB1dCAmJgorCQlnaXQgcmVtb3RlIHNldC1oZWFkIG9yaWdpbiBtYXN0ZXIgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKworY2F0ID50ZXN0L2V4cGVjdCA8PEVPRgorUHJ1bmluZyBvcmlnaW4KK1VSTDogJChwd2QpL29uZQorICogW3dvdWxkIHBydW5lXSBvcmlnaW4vc2lkZTIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSAtLWRyeS1ydW4nICcKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgYnJhbmNoIC1tIHNpZGUyIHNpZGUpICYmCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCByZW1vdGUgcHJ1bmUgLS1kcnktcnVuIG9yaWdpbiA+b3V0cHV0ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZSAmJgorCSgKKwkJY2QgLi4vb25lICYmCisJCWdpdCBicmFuY2ggLW0gc2lkZSBzaWRlMikgJiYKKwkJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtLW1pcnJvciAmJiBwcnVuZScgJworCW1rZGlyIG1pcnJvciAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWdpdCBpbml0IC0tYmFyZSAmJgorCQlnaXQgcmVtb3RlIGFkZCAtLW1pcnJvciAtZiBvcmlnaW4gLi4vb25lCisJKSAmJgorCSgKKwkJY2Qgb25lICYmCisJCWdpdCBicmFuY2ggLW0gc2lkZTIgc2lkZQorCSkgJiYKKwkoCisJCWNkIG1pcnJvciAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvc2lkZTIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUgJiYKKwkJZ2l0IGZldGNoIG9yaWdpbiAmJgorCQlnaXQgcmVtb3RlIHBydW5lIG9yaWdpbiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvc2lkZTIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtLW1pcnJvcj1mZXRjaCcgJworCW1rZGlyIG1pcnJvci1mZXRjaCAmJgorCWdpdCBpbml0IG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKKwkoCisJCWNkIG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKKwkJdGVzdF9jb21taXQgb25lCisJKSAmJgorCWdpdCBpbml0IC0tYmFyZSBtaXJyb3ItZmV0Y2gvY2hpbGQgJiYKKwkoCisJCWNkIG1pcnJvci1mZXRjaC9jaGlsZCAmJgorCQlnaXQgcmVtb3RlIGFkZCAtLW1pcnJvcj1mZXRjaCAtZiBwYXJlbnQgLi4vcGFyZW50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBtaXJyb3JzIGFjdCBhcyBtaXJyb3JzIGR1cmluZyBmZXRjaCcgJworCSgKKwkJY2QgbWlycm9yLWZldGNoL3BhcmVudCAmJgorCQlnaXQgYnJhbmNoIG5ldyAmJgorCQlnaXQgYnJhbmNoIC1tIG1hc3RlciByZW5hbWVkCisJKSAmJgorCSgKKwkJY2QgbWlycm9yLWZldGNoL2NoaWxkICYmCisJCWdpdCBmZXRjaCBwYXJlbnQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL25ldyAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcmVuYW1lZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbWlycm9ycyBjYW4gcHJ1bmUnICcKKwkoCisJCWNkIG1pcnJvci1mZXRjaC9jaGlsZCAmJgorCQlnaXQgcmVtb3RlIHBydW5lIHBhcmVudCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBtaXJyb3JzIGRvIG5vdCBhY3QgYXMgbWlycm9ycyBkdXJpbmcgcHVzaCcgJworCSgKKwkJY2QgbWlycm9yLWZldGNoL3BhcmVudCAmJgorCQlnaXQgY2hlY2tvdXQgSEVBRF4wCisJKSAmJgorCSgKKwkJY2QgbWlycm9yLWZldGNoL2NoaWxkICYmCisJCWdpdCBicmFuY2ggLW0gcmVuYW1lZCByZW5hbWVkMiAmJgorCQlnaXQgcHVzaCBwYXJlbnQgOgorCSkgJiYKKwkoCisJCWNkIG1pcnJvci1mZXRjaC9wYXJlbnQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZW5hbWVkICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW5hbWVkMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGZldGNoIG1pcnJvciB3aXRoIHNwZWNpZmljIGJyYW5jaGVzJyAnCisJZ2l0IGluaXQgLS1iYXJlIG1pcnJvci1mZXRjaC90cmFjayAmJgorCSgKKwkJY2QgbWlycm9yLWZldGNoL3RyYWNrICYmCisJCWdpdCByZW1vdGUgYWRkIC0tbWlycm9yPWZldGNoIC10IGhlYWRzL25ldyBwYXJlbnQgLi4vcGFyZW50CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBtaXJyb3IgcmVzcGVjdHMgc3BlY2lmaWMgYnJhbmNoZXMnICcKKwkoCisJCWNkIG1pcnJvci1mZXRjaC90cmFjayAmJgorCQlnaXQgZmV0Y2ggcGFyZW50ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9uZXcgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbmFtZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtLW1pcnJvcj1wdXNoJyAnCisJbWtkaXIgbWlycm9yLXB1c2ggJiYKKwlnaXQgaW5pdCAtLWJhcmUgbWlycm9yLXB1c2gvcHVibGljICYmCisJZ2l0IGluaXQgbWlycm9yLXB1c2gvcHJpdmF0ZSAmJgorCSgKKwkJY2QgbWlycm9yLXB1c2gvcHJpdmF0ZSAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgLS1taXJyb3I9cHVzaCBwdWJsaWMgLi4vcHVibGljCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvcnMgYWN0IGFzIG1pcnJvcnMgZHVyaW5nIHB1c2gnICcKKwkoCisJCWNkIG1pcnJvci1wdXNoL3ByaXZhdGUgJiYKKwkJZ2l0IGJyYW5jaCBuZXcgJiYKKwkJZ2l0IGJyYW5jaCAtbSBtYXN0ZXIgcmVuYW1lZCAmJgorCQlnaXQgcHVzaCBwdWJsaWMKKwkpICYmCisJKAorCQljZCBtaXJyb3ItcHVzaC9wcml2YXRlICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9uZXcgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbmFtZWQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3JzIGRvIG5vdCBhY3QgYXMgbWlycm9ycyBkdXJpbmcgZmV0Y2gnICcKKwkoCisJCWNkIG1pcnJvci1wdXNoL3B1YmxpYyAmJgorCQlnaXQgYnJhbmNoIC1tIHJlbmFtZWQgcmVuYW1lZDIgJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvcmVuYW1lZDIKKwkpICYmCisJKAorCQljZCBtaXJyb3ItcHVzaC9wcml2YXRlICYmCisJCWdpdCBmZXRjaCBwdWJsaWMgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbmFtZWQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbmFtZWQyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvcnMgZG8gbm90IGFsbG93IHlvdSB0byBzcGVjaWZ5IHJlZnMnICcKKwlnaXQgaW5pdCBtaXJyb3ItcHVzaC90cmFjayAmJgorCSgKKwkJY2QgbWlycm9yLXB1c2gvdHJhY2sgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBhZGQgLS1taXJyb3I9cHVzaCAtdCBuZXcgcHVibGljIC4uL3B1YmxpYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGFsdCAmJiBwcnVuZScgJworCW1rZGlyIGFsdHRzdCAmJgorCSgKKwkJY2QgYWx0dHN0ICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCByZW1vdGUgYWRkIC1mIG9yaWdpbiAuLi9vbmUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUuYWx0LnVybCAuLi9vbmUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUuYWx0LmZldGNoICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIKKwkpICYmCisJKAorCQljZCBvbmUgJiYKKwkJZ2l0IGJyYW5jaCAtbSBzaWRlIHNpZGUyCisJKSAmJgorCSgKKwkJY2QgYWx0dHN0ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMiAmJgorCQlnaXQgZmV0Y2ggYWx0ICYmCisJCWdpdCByZW1vdGUgcHJ1bmUgYWx0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlMgorCSkKKycKKworY2F0ID50ZXN0L2V4cGVjdCA8PFxFT0YKK3NvbWUtdGFnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHdpdGggcmVhY2hhYmxlIHRhZ3MgKGRlZmF1bHQpJyAnCisJKAorCQljZCBvbmUgJiYKKwkJPmZvb2JhciAmJgorCQlnaXQgYWRkIGZvb2JhciAmJgorCQlnaXQgY29tbWl0IC1tICJGb29iYXIiICYmCisJCWdpdCB0YWcgLWEgLW0gIkZvb2JhciB0YWciIGZvb2Jhci10YWcgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEgJiYKKwkJZ2l0IHRhZyAtYSAtbSAiU29tZSB0YWciIHNvbWUtdGFnCisJKSAmJgorCW1rZGlyIGFkZC10YWdzICYmCisJKAorCQljZCBhZGQtdGFncyAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcmVtb3RlIGFkZCAtZiBvcmlnaW4gLi4vb25lICYmCisJCWdpdCB0YWcgLWwgc29tZS10YWcgPi4uL3Rlc3Qvb3V0cHV0ICYmCisJCWdpdCB0YWcgLWwgZm9vYmFyLXRhZyA+Pi4uL3Rlc3Qvb3V0cHV0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi50YWdvcHQKKwkpICYmCisJdGVzdF9jbXAgdGVzdC9leHBlY3QgdGVzdC9vdXRwdXQKKycKKworY2F0ID50ZXN0L2V4cGVjdCA8PFxFT0YKK3NvbWUtdGFnCitmb29iYXItdGFnCistLXRhZ3MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgLS10YWdzJyAnCisJcm0gLXJmIGFkZC10YWdzICYmCisJKAorCQlta2RpciBhZGQtdGFncyAmJgorCQljZCBhZGQtdGFncyAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcmVtb3RlIGFkZCAtZiAtLXRhZ3Mgb3JpZ2luIC4uL29uZSAmJgorCQlnaXQgdGFnIC1sIHNvbWUtdGFnID4uLi90ZXN0L291dHB1dCAmJgorCQlnaXQgdGFnIC1sIGZvb2Jhci10YWcgPj4uLi90ZXN0L291dHB1dCAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udGFnb3B0ID4+Li4vdGVzdC9vdXRwdXQKKwkpICYmCisJdGVzdF9jbXAgdGVzdC9leHBlY3QgdGVzdC9vdXRwdXQKKycKKworY2F0ID50ZXN0L2V4cGVjdCA8PFxFT0YKKy0tbm8tdGFncworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCAtLW5vLXRhZ3MnICcKKwlybSAtcmYgYWRkLXRhZ3MgJiYKKwkoCisJCW1rZGlyIGFkZC1uby10YWdzICYmCisJCWNkIGFkZC1uby10YWdzICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCByZW1vdGUgYWRkIC1mIC0tbm8tdGFncyBvcmlnaW4gLi4vb25lICYmCisJCWdpdCB0YWcgLWwgc29tZS10YWcgPi4uL3Rlc3Qvb3V0cHV0ICYmCisJCWdpdCB0YWcgLWwgZm9vYmFyLXRhZyA+Li4vdGVzdC9vdXRwdXQgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnRhZ29wdCA+Pi4uL3Rlc3Qvb3V0cHV0CisJKSAmJgorCSgKKwkJY2Qgb25lICYmCisJCWdpdCB0YWcgLWQgc29tZS10YWcgZm9vYmFyLXRhZworCSkgJiYKKwl0ZXN0X2NtcCB0ZXN0L2V4cGVjdCB0ZXN0L291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgLS1uby1uby10YWdzJyAnCisJKAorCQljZCBhZGQtbm8tdGFncyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIGFkZCAtZiAtLW5vLW5vLXRhZ3MgbmV3b3JpZ2luIC4uL29uZQorCSkKKycKKworY2F0ID5vbmUvZXhwZWN0IDw8XEVPRgorICBhcGlzL21hc3RlcgorICBhcGlzL3NpZGUKKyAgZHJvc29waGlsYS9hbm90aGVyCisgIGRyb3NvcGhpbGEvbWFzdGVyCisgIGRyb3NvcGhpbGEvc2lkZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZScgJworCSgKKwkJY2Qgb25lICYmCisJCWdpdCByZW1vdGUgYWRkIGRyb3NvcGhpbGEgLi4vdHdvICYmCisJCWdpdCByZW1vdGUgYWRkIGFwaXMgLi4vbWlycm9yICYmCisJCWdpdCByZW1vdGUgdXBkYXRlICYmCisJCWdpdCBicmFuY2ggLXIgPm91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCitjYXQgPm9uZS9leHBlY3QgPDxcRU9GCisgIGRyb3NvcGhpbGEvYW5vdGhlcgorICBkcm9zb3BoaWxhL21hc3RlcgorICBkcm9zb3BoaWxhL3NpZGUKKyAgbWFuZHVjYS9tYXN0ZXIKKyAgbWFuZHVjYS9zaWRlCisgIG1lZ2Fsb3ByZXB1cy9tYXN0ZXIKKyAgbWVnYWxvcHJlcHVzL3NpZGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgd2l0aCBhcmd1bWVudHMnICcKKwkoCisJCWNkIG9uZSAmJgorCQlmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJCWRvCisJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgZXhpdCAxCisJCWRvbmUgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgbWFuZHVjYSAuLi9taXJyb3IgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgbWVnYWxvcHJlcHVzIC4uL21pcnJvciAmJgorCQlnaXQgY29uZmlnIHJlbW90ZXMucGhvYmFldGljdXMgImRyb3NvcGhpbGEgbWVnYWxvcHJlcHVzIiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZXMudGl0YW51cyBtYW5kdWNhICYmCisJCWdpdCByZW1vdGUgdXBkYXRlIHBob2JhZXRpY3VzIHRpdGFudXMgJiYKKwkJZ2l0IGJyYW5jaCAtciA+b3V0cHV0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSAtLXBydW5lJyAnCisJKAorCQljZCBvbmUgJiYKKwkJZ2l0IGJyYW5jaCAtbSBzaWRlMiBzaWRlMworCSkgJiYKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IHJlbW90ZSB1cGRhdGUgLS1wcnVuZSAmJgorCQkoCisJCQljZCAuLi9vbmUgJiYKKwkJCWdpdCBicmFuY2ggLW0gc2lkZTMgc2lkZTIKKwkJKSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZTMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUyCisJKQorJworCitjYXQgPm9uZS9leHBlY3QgPDwtXEVPRgorICBhcGlzL21hc3RlcgorICBhcGlzL3NpZGUKKyAgbWFuZHVjYS9tYXN0ZXIKKyAgbWFuZHVjYS9zaWRlCisgIG1lZ2Fsb3ByZXB1cy9tYXN0ZXIKKyAgbWVnYWxvcHJlcHVzL3NpZGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZGVmYXVsdCcgJworCSgKKwkJY2Qgb25lICYmCisJCWZvciBiIGluICQoZ2l0IGJyYW5jaCAtcikKKwkJZG8KKwkJZ2l0IGJyYW5jaCAtciAtZCAkYiB8fCBleGl0IDEKKwkJZG9uZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5kcm9zb3BoaWxhLnNraXBEZWZhdWx0VXBkYXRlIHRydWUgJiYKKwkJZ2l0IHJlbW90ZSB1cGRhdGUgZGVmYXVsdCAmJgorCQlnaXQgYnJhbmNoIC1yID5vdXRwdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKworY2F0ID5vbmUvZXhwZWN0IDw8XEVPRgorICBkcm9zb3BoaWxhL2Fub3RoZXIKKyAgZHJvc29waGlsYS9tYXN0ZXIKKyAgZHJvc29waGlsYS9zaWRlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGRlZmF1bHQgKG92ZXJyaWRkZW4sIHdpdGggZnVubnkgd2hpdGVzcGFjZSknICcKKwkoCisJCWNkIG9uZSAmJgorCQlmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJCWRvCisJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgZXhpdCAxCisJCWRvbmUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGVzLmRlZmF1bHQgIiQocHJpbnRmICJcdCBkcm9zb3BoaWxhICBcbiIpIiAmJgorCQlnaXQgcmVtb3RlIHVwZGF0ZSBkZWZhdWx0ICYmCisJCWdpdCBicmFuY2ggLXIgPm91dHB1dCAmJgorCQl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgKHdpdGggcmVtb3Rlcy5kZWZhdWx0IGRlZmluZWQpJyAnCisJKAorCQljZCBvbmUgJiYKKwkJZm9yIGIgaW4gJChnaXQgYnJhbmNoIC1yKQorCQlkbworCQlnaXQgYnJhbmNoIC1yIC1kICRiIHx8IGV4aXQgMQorCQlkb25lICYmCisJCWdpdCBjb25maWcgcmVtb3Rlcy5kZWZhdWx0ICJkcm9zb3BoaWxhIiAmJgorCQlnaXQgcmVtb3RlIHVwZGF0ZSAmJgorCQlnaXQgYnJhbmNoIC1yID5vdXRwdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInJlbW90ZSBzaG93IiBkb2VzIG5vdCBzaG93IHN5bWJvbGljIHJlZnMnICcKKwlnaXQgY2xvbmUgb25lIHRocmVlICYmCisJKAorCQljZCB0aHJlZSAmJgorCQlnaXQgcmVtb3RlIHNob3cgb3JpZ2luID5vdXRwdXQgJiYKKwkJISBncmVwICJeICpIRUFEJCIgPCBvdXRwdXQgJiYKKwkJISBncmVwIC1pIHN0YWxlIDwgb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgYWRkaW5nIHJlbW90ZSB3aXRoIGFuIGludmFsaWQgbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgYWRkIHNvbWU6dXJsIGRlc2lyZWQtbmFtZQorJworCisjIFRoZSBmaXJzdCB0aHJlZSB0ZXN0IGlmIHRoZSB0cmFja2luZyBicmFuY2hlcyBhcmUgcHJvcGVybHkgcmVuYW1lZCwKKyMgdGhlIGxhc3QgdHdvIG9uZXMgY2hlY2sgaWYgdGhlIGNvbmZpZyBpcyB1cGRhdGVkLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgYSByZW1vdGUnICcKKwlnaXQgY2xvbmUgb25lIGZvdXIgJiYKKwkoCisJCWNkIGZvdXIgJiYKKwkJZ2l0IHJlbW90ZSByZW5hbWUgb3JpZ2luIHVwc3RyZWFtICYmCisJCXJtZGlyIC5naXQvcmVmcy9yZW1vdGVzL29yaWdpbiAmJgorCQl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL3Vwc3RyZWFtL0hFQUQpIiA9ICJyZWZzL3JlbW90ZXMvdXBzdHJlYW0vbWFzdGVyIiAmJgorCQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgdXBzdHJlYW0vbWFzdGVyKSIgPSAiJChnaXQgcmV2LXBhcnNlIG1hc3RlcikiICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUudXBzdHJlYW0uZmV0Y2gpIiA9ICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy91cHN0cmVhbS8qIiAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUpIiA9ICJ1cHN0cmVhbSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBkb2VzIG5vdCB1cGRhdGUgYSBub24tZGVmYXVsdCBmZXRjaCByZWZzcGVjJyAnCisJZ2l0IGNsb25lIG9uZSBmb3VyLm9uZSAmJgorCSgKKwkJY2QgZm91ci5vbmUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoICtyZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy9vcmlnaW4vKiAmJgorCQlnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gdXBzdHJlYW0gJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS51cHN0cmVhbS5mZXRjaCkiID0gIityZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy9vcmlnaW4vKiIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtcSBvcmlnaW4vbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgYSByZW1vdGUgd2l0aCBuYW1lIHBhcnQgb2YgZmV0Y2ggc3BlYycgJworCWdpdCBjbG9uZSBvbmUgZm91ci50d28gJiYKKwkoCisJCWNkIGZvdXIudHdvICYmCisJCWdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiByZW1vdGUgJiYKKwkJZ2l0IHJlbW90ZSByZW5hbWUgcmVtb3RlIHVwc3RyZWFtICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUudXBzdHJlYW0uZmV0Y2gpIiA9ICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy91cHN0cmVhbS8qIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGEgcmVtb3RlIHdpdGggbmFtZSBwcmVmaXggb2Ygb3RoZXIgcmVtb3RlJyAnCisJZ2l0IGNsb25lIG9uZSBmb3VyLnRocmVlICYmCisJKAorCQljZCBmb3VyLnRocmVlICYmCisJCWdpdCByZW1vdGUgYWRkIG8gZ2l0Oi8vZXhhbXBsZS5jb20vcmVwby5naXQgJiYKKwkJZ2l0IHJlbW90ZSByZW5hbWUgbyB1cHN0cmVhbSAmJgorCQl0ZXN0ICIkKGdpdCByZXYtcGFyc2Ugb3JpZ2luL21hc3RlcikiID0gIiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpIgorCSkKKycKKworY2F0ID5yZW1vdGVzX29yaWdpbiA8PEVPRgorVVJMOiAkKHB3ZCkvb25lCitQdXNoOiByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3Vwc3RyZWFtCitQdXNoOiByZWZzL2hlYWRzL25leHQ6cmVmcy9oZWFkcy91cHN0cmVhbTIKK1B1bGw6IHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvb3JpZ2luCitQdWxsOiByZWZzL2hlYWRzL25leHQ6cmVmcy9oZWFkcy9vcmlnaW4yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlncmF0ZSBhIHJlbW90ZSBmcm9tIG5hbWVkIGZpbGUgaW4gJEdJVF9ESVIvcmVtb3RlcycgJworCWdpdCBjbG9uZSBvbmUgZml2ZSAmJgorCW9yaWdpbl91cmw9JChwd2QpL29uZSAmJgorCSgKKwkJY2QgZml2ZSAmJgorCQlnaXQgcmVtb3RlIHJlbW92ZSBvcmlnaW4gJiYKKwkJbWtkaXIgLXAgLmdpdC9yZW1vdGVzICYmCisJCWNhdCAuLi9yZW1vdGVzX29yaWdpbiA+LmdpdC9yZW1vdGVzL29yaWdpbiAmJgorCQlnaXQgcmVtb3RlIHJlbmFtZSBvcmlnaW4gb3JpZ2luICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVtb3Rlcy9vcmlnaW4gJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiJG9yaWdpbl91cmwiICYmCisJCWNhdCA+cHVzaF9leHBlY3RlZCA8PC1cRU9GICYmCisJCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvdXBzdHJlYW0KKwkJcmVmcy9oZWFkcy9uZXh0OnJlZnMvaGVhZHMvdXBzdHJlYW0yCisJCUVPRgorCQljYXQgPmZldGNoX2V4cGVjdGVkIDw8LVxFT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW4KKwkJcmVmcy9oZWFkcy9uZXh0OnJlZnMvaGVhZHMvb3JpZ2luMgorCQlFT0YKKwkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLm9yaWdpbi5wdXNoID5wdXNoX2FjdHVhbCAmJgorCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUub3JpZ2luLmZldGNoID5mZXRjaF9hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcHVzaF9leHBlY3RlZCBwdXNoX2FjdHVhbCAmJgorCQl0ZXN0X2NtcCBmZXRjaF9leHBlY3RlZCBmZXRjaF9hY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21pZ3JhdGUgYSByZW1vdGUgZnJvbSBuYW1lZCBmaWxlIGluICRHSVRfRElSL2JyYW5jaGVzJyAnCisJZ2l0IGNsb25lIG9uZSBzaXggJiYKKwlvcmlnaW5fdXJsPSQocHdkKS9vbmUgJiYKKwkoCisJCWNkIHNpeCAmJgorCQlnaXQgcmVtb3RlIHJtIG9yaWdpbiAmJgorCQllY2hvICIkb3JpZ2luX3VybCIgPi5naXQvYnJhbmNoZXMvb3JpZ2luICYmCisJCWdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiBvcmlnaW4gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9icmFuY2hlcy9vcmlnaW4gJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiJG9yaWdpbl91cmwiICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoKSIgPSAicmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW4iICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnB1c2gpIiA9ICJIRUFEOnJlZnMvaGVhZHMvbWFzdGVyIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlncmF0ZSBhIHJlbW90ZSBmcm9tIG5hbWVkIGZpbGUgaW4gJEdJVF9ESVIvYnJhbmNoZXMgKDIpJyAnCisJZ2l0IGNsb25lIG9uZSBzZXZlbiAmJgorCSgKKwkJY2Qgc2V2ZW4gJiYKKwkJZ2l0IHJlbW90ZSBybSBvcmlnaW4gJiYKKwkJZWNobyAicXV1eCNmb29tIiA+IC5naXQvYnJhbmNoZXMvb3JpZ2luICYmCisJCWdpdCByZW1vdGUgcmVuYW1lIG9yaWdpbiBvcmlnaW4gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9icmFuY2hlcy9vcmlnaW4gJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAicXV1eCIgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2gpIiA9ICJyZWZzL2hlYWRzL2Zvb206cmVmcy9oZWFkcy9vcmlnaW4iCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnB1c2gpIiA9ICJIRUFEOnJlZnMvaGVhZHMvZm9vbSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBwcnVuZSB0byBjYXVzZSBhIGRhbmdsaW5nIHN5bXJlZicgJworCWdpdCBjbG9uZSBvbmUgZWlnaHQgJiYKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgY2hlY2tvdXQgc2lkZTIgJiYKKwkJZ2l0IGJyYW5jaCAtRCBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBlaWdodCAmJgorCQlnaXQgcmVtb3RlIHBydW5lIG9yaWdpbgorCSkgPmVyciAyPiYxICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGJlY29tZSBkYW5nbGluZyIgZXJyICYmCisKKwk6IEFuZCB0aGUgZGFuZ2xpbmcgc3ltcmVmIHdpbGwgbm90IGNhdXNlIG90aGVyIGFubm95aW5nIGVycm9ycyAmJgorCSgKKwkJY2QgZWlnaHQgJiYKKwkJZ2l0IGJyYW5jaCAtYQorCSkgMj5lcnIgJiYKKwkhIGdyZXAgInBvaW50cyBub3doZXJlIiBlcnIgJiYKKwkoCisJCWNkIGVpZ2h0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggbm9tb3JlIG9yaWdpbgorCSkgMj5lcnIgJiYKKwlncmVwICJkYW5nbGluZyBzeW1yZWYiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93IGVtcHR5IHJlbW90ZScgJworCXRlc3RfY3JlYXRlX3JlcG8gZW1wdHkgJiYKKwlnaXQgY2xvbmUgZW1wdHkgZW1wdHktY2xvbmUgJiYKKwkoCisJCWNkIGVtcHR5LWNsb25lICYmCisJCWdpdCByZW1vdGUgc2hvdyBvcmlnaW4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtYnJhbmNoZXMgcmVxdWlyZXMgYSByZW1vdGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHNldC1icmFuY2hlcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgc2V0LWJyYW5jaGVzIC0tYWRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtYnJhbmNoZXMnICcKKwllY2hvICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9zY3JhdGNoLyoiID5leHBlY3QuaW5pdGlhbCAmJgorCXNvcnQgPDwtXEVPRiA+ZXhwZWN0LmFkZCAmJgorCStyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvKgorCStyZWZzL2hlYWRzL290aGVyOnJlZnMvcmVtb3Rlcy9zY3JhdGNoL290aGVyCisJRU9GCisJc29ydCA8PC1cRU9GID5leHBlY3QucmVwbGFjZSAmJgorCStyZWZzL2hlYWRzL21haW50OnJlZnMvcmVtb3Rlcy9zY3JhdGNoL21haW50CisJK3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9zY3JhdGNoL21hc3RlcgorCStyZWZzL2hlYWRzL25leHQ6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbmV4dAorCUVPRgorCXNvcnQgPDwtXEVPRiA+ZXhwZWN0LmFkZC10d28gJiYKKwkrcmVmcy9oZWFkcy9tYWludDpyZWZzL3JlbW90ZXMvc2NyYXRjaC9tYWludAorCStyZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvc2NyYXRjaC9tYXN0ZXIKKwkrcmVmcy9oZWFkcy9uZXh0OnJlZnMvcmVtb3Rlcy9zY3JhdGNoL25leHQKKwkrcmVmcy9oZWFkcy9wdTpyZWZzL3JlbW90ZXMvc2NyYXRjaC9wdQorCStyZWZzL2hlYWRzL3QvdG9waWM6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvdC90b3BpYworCUVPRgorCXNvcnQgPDwtXEVPRiA+ZXhwZWN0LnNldHVwLWZmb25seSAmJgorCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9zY3JhdGNoL21hc3RlcgorCStyZWZzL2hlYWRzL25leHQ6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbmV4dAorCUVPRgorCXNvcnQgPDwtXEVPRiA+ZXhwZWN0LnJlc3BlY3QtZmZvbmx5ICYmCisJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbWFzdGVyCisJK3JlZnMvaGVhZHMvbmV4dDpyZWZzL3JlbW90ZXMvc2NyYXRjaC9uZXh0CisJK3JlZnMvaGVhZHMvcHU6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvcHUKKwlFT0YKKworCWdpdCBjbG9uZSAuZ2l0LyBzZXRicmFuY2hlcyAmJgorCSgKKwkJY2Qgc2V0YnJhbmNoZXMgJiYKKwkJZ2l0IHJlbW90ZSByZW5hbWUgb3JpZ2luIHNjcmF0Y2ggJiYKKwkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggPmNvbmZpZy1yZXN1bHQgJiYKKwkJc29ydCA8Y29uZmlnLXJlc3VsdCA+Li4vYWN0dWFsLmluaXRpYWwgJiYKKworCQlnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBzY3JhdGNoIC0tYWRkIG90aGVyICYmCisJCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zY3JhdGNoLmZldGNoID5jb25maWctcmVzdWx0ICYmCisJCXNvcnQgPGNvbmZpZy1yZXN1bHQgPi4uL2FjdHVhbC5hZGQgJiYKKworCQlnaXQgcmVtb3RlIHNldC1icmFuY2hlcyBzY3JhdGNoIG1haW50IG1hc3RlciBuZXh0ICYmCisJCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zY3JhdGNoLmZldGNoID5jb25maWctcmVzdWx0ICYmCisJCXNvcnQgPGNvbmZpZy1yZXN1bHQgPi4uL2FjdHVhbC5yZXBsYWNlICYmCisKKwkJZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgc2NyYXRjaCBwdSB0L3RvcGljICYmCisJCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zY3JhdGNoLmZldGNoID5jb25maWctcmVzdWx0ICYmCisJCXNvcnQgPGNvbmZpZy1yZXN1bHQgPi4uL2FjdHVhbC5hZGQtdHdvICYmCisKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCByZW1vdGUuc2NyYXRjaC5mZXRjaCAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5zY3JhdGNoLmZldGNoIFwKKwkJCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9zY3JhdGNoL21hc3RlciAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS5zY3JhdGNoLmZldGNoIFwKKwkJCStyZWZzL2hlYWRzL25leHQ6cmVmcy9yZW1vdGVzL3NjcmF0Y2gvbmV4dCAmJgorCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc2NyYXRjaC5mZXRjaCA+Y29uZmlnLXJlc3VsdCAmJgorCQlzb3J0IDxjb25maWctcmVzdWx0ID4uLi9hY3R1YWwuc2V0dXAtZmZvbmx5ICYmCisKKwkJZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgLS1hZGQgc2NyYXRjaCBwdSAmJgorCQlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc2NyYXRjaC5mZXRjaCA+Y29uZmlnLXJlc3VsdCAmJgorCQlzb3J0IDxjb25maWctcmVzdWx0ID4uLi9hY3R1YWwucmVzcGVjdC1mZm9ubHkKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0LmluaXRpYWwgYWN0dWFsLmluaXRpYWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYWRkIGFjdHVhbC5hZGQgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmVwbGFjZSBhY3R1YWwucmVwbGFjZSAmJgorCXRlc3RfY21wIGV4cGVjdC5hZGQtdHdvIGFjdHVhbC5hZGQtdHdvICYmCisJdGVzdF9jbXAgZXhwZWN0LnNldHVwLWZmb25seSBhY3R1YWwuc2V0dXAtZmZvbmx5ICYmCisJdGVzdF9jbXAgZXhwZWN0LnJlc3BlY3QtZmZvbmx5IGFjdHVhbC5yZXNwZWN0LWZmb25seQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LWJyYW5jaGVzIHdpdGggLS1taXJyb3InICcKKwllY2hvICIrcmVmcy8qOnJlZnMvKiIgPmV4cGVjdC5pbml0aWFsICYmCisJZWNobyAiK3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0LnJlcGxhY2UgJiYKKwlnaXQgY2xvbmUgLS1taXJyb3IgLmdpdC8gc2V0YnJhbmNoZXMtbWlycm9yICYmCisJKAorCQljZCBzZXRicmFuY2hlcy1taXJyb3IgJiYKKwkJZ2l0IHJlbW90ZSByZW5hbWUgb3JpZ2luIHNjcmF0Y2ggJiYKKwkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggPi4uL2FjdHVhbC5pbml0aWFsICYmCisKKwkJZ2l0IHJlbW90ZSBzZXQtYnJhbmNoZXMgc2NyYXRjaCBoZWFkcy9tYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNjcmF0Y2guZmV0Y2ggPi4uL2FjdHVhbC5yZXBsYWNlCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdC5pbml0aWFsIGFjdHVhbC5pbml0aWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LnJlcGxhY2UgYWN0dWFsLnJlcGxhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV3IHJlbW90ZScgJworCWdpdCByZW1vdGUgYWRkIHNvbWVyZW1vdGUgZm9vICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKworZ2V0X3VybF90ZXN0ICgpIHsKKwljYXQgPmV4cGVjdCAmJgorCWdpdCByZW1vdGUgZ2V0LXVybCAiJEAiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldC11cmwgb24gbmV3IHJlbW90ZScgJworCWVjaG8gZm9vIHwgZ2V0X3VybF90ZXN0IHNvbWVyZW1vdGUgJiYKKwllY2hvIGZvbyB8IGdldF91cmxfdGVzdCAtLWFsbCBzb21lcmVtb3RlICYmCisJZWNobyBmb28gfCBnZXRfdXJsX3Rlc3QgLS1wdXNoIHNvbWVyZW1vdGUgJiYKKwllY2hvIGZvbyB8IGdldF91cmxfdGVzdCAtLXB1c2ggLS1hbGwgc29tZXJlbW90ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCBiYXInICcKKwlnaXQgcmVtb3RlIHNldC11cmwgc29tZXJlbW90ZSBiYXIgJiYKKwllY2hvIGJhciA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCBiYXogYmFyJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIHNvbWVyZW1vdGUgYmF6IGJhciAmJgorCWVjaG8gYmF6ID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIHpvdCBiYXInICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHNldC11cmwgc29tZXJlbW90ZSB6b3QgYmFyICYmCisJZWNobyBiYXogPmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1wdXNoIHpvdCBiYXonICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIHNvbWVyZW1vdGUgem90IGJheiAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tcHVzaCB6b3QnICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIHNvbWVyZW1vdGUgem90ICYmCisJZWNobyB6b3QgPmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQtdXJsIHdpdGggZGlmZmVyZW50IHVybHMnICcKKwllY2hvIGJheiB8IGdldF91cmxfdGVzdCBzb21lcmVtb3RlICYmCisJZWNobyBiYXogfCBnZXRfdXJsX3Rlc3QgLS1hbGwgc29tZXJlbW90ZSAmJgorCWVjaG8gem90IHwgZ2V0X3VybF90ZXN0IC0tcHVzaCBzb21lcmVtb3RlICYmCisJZWNobyB6b3QgfCBnZXRfdXJsX3Rlc3QgLS1wdXNoIC0tYWxsIHNvbWVyZW1vdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1wdXNoIHF1eCB6b3QnICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIHNvbWVyZW1vdGUgcXV4IHpvdCAmJgorCWVjaG8gcXV4ID5leHBlY3QgJiYKKwllY2hvICJZWVkiID4+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1wdXNoIGZvbyBxdSt4JyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCBzb21lcmVtb3RlIGZvbyBxdSt4ICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggLS1hZGQgYWFhJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCAtLWFkZCBzb21lcmVtb3RlIGFhYSAmJgorCWVjaG8gZm9vID5leHBlY3QgJiYKKwllY2hvIGFhYSA+PmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQtdXJsIG9uIG11bHRpIHB1c2ggcmVtb3RlJyAnCisJZWNobyBmb28gfCBnZXRfdXJsX3Rlc3QgLS1wdXNoIHNvbWVyZW1vdGUgJiYKKwlnZXRfdXJsX3Rlc3QgLS1wdXNoIC0tYWxsIHNvbWVyZW1vdGUgPDwtXEVPRgorCWZvbworCWFhYQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggYmFyIGFhYScgJworCWdpdCByZW1vdGUgc2V0LXVybCAtLXB1c2ggc29tZXJlbW90ZSBiYXIgYWFhICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWVjaG8gYmFyID4+ZXhwZWN0ICYmCisJZWNobyAiWVlZIiA+PmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tcHVzaCAtLWRlbGV0ZSBiYXInICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1wdXNoIC0tZGVsZXRlIHNvbWVyZW1vdGUgYmFyICYmCisJZWNobyBmb28gPmV4cGVjdCAmJgorCWVjaG8gIllZWSIgPj5leHBlY3QgJiYKKwllY2hvIGJheiA+PmV4cGVjdCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLXB1c2ggLS1kZWxldGUgZm9vJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tcHVzaCAtLWRlbGV0ZSBzb21lcmVtb3RlIGZvbyAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUucHVzaHVybCA+YWN0dWFsICYmCisJZWNobyAiWVlZIiA+PmFjdHVhbCAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnVybCA+PmFjdHVhbCAmJgorCWNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZSBzZXQtdXJsIC0tYWRkIGJiYicgJworCWdpdCByZW1vdGUgc2V0LXVybCAtLWFkZCBzb21lcmVtb3RlIGJiYiAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZWNobyBiYmIgPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2V0LXVybCBvbiBtdWx0aSBmZXRjaCByZW1vdGUnICcKKwllY2hvIGJheiB8IGdldF91cmxfdGVzdCBzb21lcmVtb3RlICYmCisJZ2V0X3VybF90ZXN0IC0tYWxsIHNvbWVyZW1vdGUgPDwtXEVPRgorCWJhegorCWJiYgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSAuKicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSBzb21lcmVtb3RlIC5cKiAmJgorCWVjaG8gIllZWSIgPmV4cGVjdCAmJgorCWVjaG8gYmF6ID4+ZXhwZWN0ICYmCisJZWNobyBiYmIgPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1kZWxldGUgYmJiJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIHNvbWVyZW1vdGUgYmJiICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1kZWxldGUgYmF6JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSBzZXQtdXJsIC0tZGVsZXRlIHNvbWVyZW1vdGUgYmF6ICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS5wdXNodXJsID5hY3R1YWwgJiYKKwllY2hvICJZWVkiID4+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLWdldC1hbGwgcmVtb3RlLnNvbWVyZW1vdGUudXJsID4+YWN0dWFsICYmCisJY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVtb3RlIHNldC11cmwgLS1hZGQgY2NjJyAnCisJZ2l0IHJlbW90ZSBzZXQtdXJsIC0tYWRkIHNvbWVyZW1vdGUgY2NjICYmCisJZWNobyAiWVlZIiA+ZXhwZWN0ICYmCisJZWNobyBiYXogPj5leHBlY3QgJiYKKwllY2hvIGNjYyA+PmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgc2V0LXVybCAtLWRlbGV0ZSBiYXonICcKKwlnaXQgcmVtb3RlIHNldC11cmwgLS1kZWxldGUgc29tZXJlbW90ZSBiYXogJiYKKwllY2hvICJZWVkiID5leHBlY3QgJiYKKwllY2hvIGNjYyA+PmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgLS1nZXQtYWxsIHJlbW90ZS5zb21lcmVtb3RlLnB1c2h1cmwgPmFjdHVhbCAmJgorCWVjaG8gIllZWSIgPj5hY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCByZW1vdGUuc29tZXJlbW90ZS51cmwgPj5hY3R1YWwgJiYKKwljbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHRyYSBhcmdzOiBzZXR1cCcgJworCSMgYWRkIGEgZHVtbXkgb3JpZ2luIHNvIHRoYXQgdGhpcyBkb2VzIG5vdCB0cmlnZ2VyIGZhaWx1cmUKKwlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gLgorJworCit0ZXN0X2V4dHJhX2FyZyAoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZXh0cmEgYXJnczogJCoiICIKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlbW90ZSAkKiBib2d1c19leHRyYV9hcmcgMj5hY3R1YWwgJiYKKwkJZ3JlcCAnXnVzYWdlOicgYWN0dWFsCisJIgorfQorCit0ZXN0X2V4dHJhX2FyZyBhZGQgbmljayB1cmwKK3Rlc3RfZXh0cmFfYXJnIHJlbmFtZSBvcmlnaW4gbmV3bmFtZQordGVzdF9leHRyYV9hcmcgcmVtb3ZlIG9yaWdpbgordGVzdF9leHRyYV9hcmcgc2V0LWhlYWQgb3JpZ2luIG1hc3RlcgorIyBzZXQtYnJhbmNoZXMgdGFrZXMgYW55IG51bWJlciBvZiBhcmdzCit0ZXN0X2V4dHJhX2FyZyBnZXQtdXJsIG9yaWdpbiBuZXd1cmwKK3Rlc3RfZXh0cmFfYXJnIHNldC11cmwgb3JpZ2luIG5ld3VybCBvbGR1cmwKKyMgc2hvdyB0YWtlcyBhbnkgbnVtYmVyIG9mIGFyZ3MKKyMgcHJ1bmUgdGFrZXMgYW55IG51bWJlciBvZiBhcmdzCisjIHVwZGF0ZSB0YWtlcyBhbnkgbnVtYmVyIG9mIGFyZ3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHJlbW90ZSBtYXRjaGluZyB0aGUgImluc3RlYWRPZiIgVVJMJyAnCisJZ2l0IGNvbmZpZyB1cmwueHl6QGV4YW1wbGUuY29tLmluc3RlYWRPZiBiYWNrdXAgJiYKKwlnaXQgcmVtb3RlIGFkZCBiYWNrdXAgeHl6QGV4YW1wbGUuY29tCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwNi1yZW1vdGUtZ3JvdXBzLnNoIGIvdC90NTUwNi1yZW1vdGUtZ3JvdXBzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUzMGIwMTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTA2LXJlbW90ZS1ncm91cHMuc2gKQEAgLTAsMCArMSw5OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZW1vdGUgZ3JvdXAgaGFuZGxpbmcnCisuIC4vdGVzdC1saWIuc2gKKworbWFyaygpIHsKKwllY2hvICIkMSIgPm1hcmsKK30KKwordXBkYXRlX3JlcG8oKSB7CisJKGNkICQxICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLUYgLi4vbWFyaykKK30KKwordXBkYXRlX3JlcG9zKCkgeworCXVwZGF0ZV9yZXBvIG9uZSAkMSAmJgorCXVwZGF0ZV9yZXBvIHR3byAkMQorfQorCityZXBvX2ZldGNoZWQoKSB7CisJaWYgdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzICQxIC0tYCIgPSAiYGNhdCBtYXJrYCI7IHRoZW4KKwkJZWNobyA+JjIgInJlcG8gd2FzIGZldGNoZWQ6ICQxIgorCQlyZXR1cm4gMAorCWZpCisJZWNobyA+JjIgInJlcG8gd2FzIG5vdCBmZXRjaGVkOiAkMSIKKwlyZXR1cm4gMQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIG9uZSAmJiAoY2Qgb25lICYmIGdpdCBpbml0KSAmJgorCW1rZGlyIHR3byAmJiAoY2QgdHdvICYmIGdpdCBpbml0KSAmJgorCWdpdCByZW1vdGUgYWRkIC1tIG1hc3RlciBvbmUgb25lICYmCisJZ2l0IHJlbW90ZSBhZGQgLW0gbWFzdGVyIHR3byB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZ3JvdXAgdXBkYXRlcyBhbGwnICcKKwltYXJrIHVwZGF0ZS1hbGwgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgcmVtb3RlIHVwZGF0ZSAmJgorCXJlcG9fZmV0Y2hlZCBvbmUgJiYKKwlyZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmV4aXN0ZW50IGdyb3VwIHByb2R1Y2VzIGVycm9yJyAnCisJbWFyayBub25leGlzdGVudCAmJgorCXVwZGF0ZV9yZXBvcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZW1vdGUgdXBkYXRlIG5vbmV4aXN0ZW50ICYmCisJISByZXBvX2ZldGNoZWQgb25lICYmCisJISByZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIGdyb3VwIHVwZGF0ZXMgYWxsIG1lbWJlcnMgKHJlbW90ZSB1cGRhdGUpJyAnCisJbWFyayBncm91cC1hbGwgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZXMuYWxsIG9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3Rlcy5hbGwgdHdvICYmCisJZ2l0IHJlbW90ZSB1cGRhdGUgYWxsICYmCisJcmVwb19mZXRjaGVkIG9uZSAmJgorCXJlcG9fZmV0Y2hlZCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgZ3JvdXAgdXBkYXRlcyBhbGwgbWVtYmVycyAoZmV0Y2gpJyAnCisJbWFyayBmZXRjaC1ncm91cC1hbGwgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgZmV0Y2ggYWxsICYmCisJcmVwb19mZXRjaGVkIG9uZSAmJgorCXJlcG9fZmV0Y2hlZCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgZ3JvdXAgZG9lcyBub3QgdXBkYXRlIG5vbi1tZW1iZXJzIChyZW1vdGUgdXBkYXRlKScgJworCW1hcmsgZ3JvdXAtc29tZSAmJgorCXVwZGF0ZV9yZXBvcyAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3Rlcy5zb21lIG9uZSAmJgorCWdpdCByZW1vdGUgdXBkYXRlIHNvbWUgJiYKKwlyZXBvX2ZldGNoZWQgb25lICYmCisJISByZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0aW5nIGdyb3VwIGRvZXMgbm90IHVwZGF0ZSBub24tbWVtYmVycyAoZmV0Y2gpJyAnCisJbWFyayBmZXRjaC1ncm91cC1zb21lICYmCisJdXBkYXRlX3JlcG9zICYmCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGVzLnNvbWUgb25lICYmCisJZ2l0IHJlbW90ZSB1cGRhdGUgc29tZSAmJgorCXJlcG9fZmV0Y2hlZCBvbmUgJiYKKwkhIHJlcG9fZmV0Y2hlZCB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgcmVtb3RlIG5hbWUgdXBkYXRlcyB0aGF0IHJlbW90ZScgJworCW1hcmsgcmVtb3RlLW5hbWUgJiYKKwl1cGRhdGVfcmVwb3MgJiYKKwlnaXQgcmVtb3RlIHVwZGF0ZSBvbmUgJiYKKwlyZXBvX2ZldGNoZWQgb25lICYmCisJISByZXBvX2ZldGNoZWQgdHdvCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUwNy1yZW1vdGUtZW52aXJvbm1lbnQuc2ggYi90L3Q1NTA3LXJlbW90ZS1lbnZpcm9ubWVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNjE0OTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUwNy1yZW1vdGUtZW52aXJvbm1lbnQuc2gKQEAgLTAsMCArMSwzNCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIGVudmlyb25tZW50IHNob3dlZCB0byByZW1vdGUgc2lkZSBvZiB0cmFuc3BvcnRzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCAicmVtb3RlIiBwdXNoIHNpdHVhdGlvbicgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IGN1cnJlbnQgJiYKKwlnaXQgaW5pdCByZW1vdGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZha2Ugc3NoJyAnCisJR0lUX1NTSF9DT01NQU5EPSJmKCkgeworCQljZCBcIlwkVFJBU0hfRElSRUNUT1JZXCIgJiYKKwkJZXZhbCBcIlwkMlwiCisJfTsgZiIgJiYKKwlleHBvcnQgR0lUX1NTSF9DT01NQU5EICYmCisJZXhwb3J0IFRSQVNIX0RJUkVDVE9SWQorJworCisjIGR1ZSB0byByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoPXRydWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpcm0gZGVmYXVsdCBwdXNoIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggcmVtb3RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyBkb2VzIG5vdCB0cmF2ZWwgb3ZlciBzYW1lLW1hY2hpbmUgcHVzaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoPWZhbHNlIHB1c2ggcmVtb3RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZyBkb2VzIG5vdCB0cmF2ZWwgb3ZlciBzc2ggcHVzaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoPWZhbHNlIHB1c2ggaG9zdDpyZW1vdGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTA5LWZldGNoLXB1c2gtbmFtZXNwYWNlcy5zaCBiL3QvdDU1MDktZmV0Y2gtcHVzaC1uYW1lc3BhY2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjMGIzMWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTA5LWZldGNoLXB1c2gtbmFtZXNwYWNlcy5zaApAQCAtMCwwICsxLDg1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2gvcHVzaCBpbnZvbHZpbmcgcmVmIG5hbWVzcGFjZXMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF90aWNrICYmCisJZ2l0IGluaXQgb3JpZ2luYWwgJiYKKwkoCisJCWNkIG9yaWdpbmFsICYmCisJCWVjaG8gMCA+Y291bnQgJiYKKwkJZ2l0IGFkZCBjb3VudCAmJgorCQl0ZXN0X2NvbW1pdCAwICYmCisJCWVjaG8gMSA+Y291bnQgJiYKKwkJZ2l0IGFkZCBjb3VudCAmJgorCQl0ZXN0X2NvbW1pdCAxICYmCisJCWdpdCByZW1vdGUgYWRkIHB1c2hlZS1uYW1lc3BhY2VkICJleHQ6OmdpdCAtLW5hbWVzcGFjZT1uYW1lc3BhY2UgJXMgLi4vcHVzaGVlIiAmJgorCQlnaXQgcmVtb3RlIGFkZCBwdXNoZWUtdW5uYW1lc3BhY2VkIC4uL3B1c2hlZQorCSkgJiYKKwljb21taXQwPSQoY2Qgb3JpZ2luYWwgJiYgZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwljb21taXQxPSQoY2Qgb3JpZ2luYWwgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBpbml0IHB1c2hlZSAmJgorCWdpdCBpbml0IHB1bGxlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIGludG8gYSByZXBvc2l0b3J5IHVzaW5nIGEgcmVmIG5hbWVzcGFjZScgJworCSgKKwkJY2Qgb3JpZ2luYWwgJiYKKwkJZ2l0IHB1c2ggcHVzaGVlLW5hbWVzcGFjZWQgbWFzdGVyICYmCisJCWdpdCBscy1yZW1vdGUgcHVzaGVlLW5hbWVzcGFjZWQgPmFjdHVhbCAmJgorCQlwcmludGYgIiRjb21taXQxXHRyZWZzL2hlYWRzL21hc3RlclxuIiA+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCWdpdCBwdXNoIHB1c2hlZS1uYW1lc3BhY2VkIC0tdGFncyAmJgorCQlnaXQgbHMtcmVtb3RlIHB1c2hlZS1uYW1lc3BhY2VkID5hY3R1YWwgJiYKKwkJcHJpbnRmICIkY29tbWl0MFx0cmVmcy90YWdzLzBcbiIgPj5leHBlY3RlZCAmJgorCQlwcmludGYgIiRjb21taXQxXHRyZWZzL3RhZ3MvMVxuIiA+PmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCQkjIFZlcmlmeSB0aGF0IHRoZSBHSVRfTkFNRVNQQUNFIGVudmlyb25tZW50IHZhcmlhYmxlIHdvcmtzIGFzIHdlbGwKKwkJR0lUX05BTUVTUEFDRT1uYW1lc3BhY2UgZ2l0IGxzLXJlbW90ZSAiZXh0OjpnaXQgJXMgLi4vcHVzaGVlIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCQkjIFZlcmlmeSB0aGF0IC0tbmFtZXNwYWNlIG92ZXJyaWRlcyBHSVRfTkFNRVNQQUNFCisJCUdJVF9OQU1FU1BBQ0U9Z2FyYmFnZSBnaXQgbHMtcmVtb3RlIHB1c2hlZS1uYW1lc3BhY2VkID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJCSMgVHJ5IGEgbmFtZXNwYWNlIHdpdGggbm8gY29udGVudAorCQlnaXQgbHMtcmVtb3RlICJleHQ6OmdpdCAtLW5hbWVzcGFjZT1nYXJiYWdlICVzIC4uL3B1c2hlZSIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCAvZGV2L251bGwgYWN0dWFsICYmCisJCWdpdCBscy1yZW1vdGUgcHVzaGVlLXVubmFtZXNwYWNlZCA+YWN0dWFsICYmCisJCXNlZCAtZSAic3xyZWZzL3xyZWZzL25hbWVzcGFjZXMvbmFtZXNwYWNlL3JlZnMvfCIgZXhwZWN0ZWQgPmV4cGVjdGVkLnVubmFtZXNwYWNlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZC51bm5hbWVzcGFjZWQgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGZyb20gYSByZXBvc2l0b3J5IHVzaW5nIGEgcmVmIG5hbWVzcGFjZScgJworCSgKKwkJY2QgcHVsbGVyICYmCisJCWdpdCByZW1vdGUgYWRkIC1mIHB1c2hlZS1uYW1lc3BhY2VkICJleHQ6OmdpdCAtLW5hbWVzcGFjZT1uYW1lc3BhY2UgJXMgLi4vcHVzaGVlIiAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvID5hY3R1YWwgJiYKKwkJcHJpbnRmICIkY29tbWl0MSBjb21taXRcdHJlZnMvcmVtb3Rlcy9wdXNoZWUtbmFtZXNwYWNlZC9tYXN0ZXJcbiIgPmV4cGVjdGVkICYmCisJCXByaW50ZiAiJGNvbW1pdDAgY29tbWl0XHRyZWZzL3RhZ3MvMFxuIiA+PmV4cGVjdGVkICYmCisJCXByaW50ZiAiJGNvbW1pdDEgY29tbWl0XHRyZWZzL3RhZ3MvMVxuIiA+PmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKworIyBUaGlzIHRlc3Qgd2l0aCBjbG9uZSAtLW1pcnJvciBjaGVja3MgZm9yIHBvc3NpYmxlIHJlZ3Jlc3Npb25zIGluIGNsb25lCisjIG9yIHRoZSBtYWNoaW5lcnkgdW5kZXJuZWF0aCBpdC4gSXQgZW5zdXJlcyB0aGF0IG5vIGZ1dHVyZSBjaGFuZ2UKKyMgY2F1c2VzIGNsb25lIHRvIGlnbm9yZSByZWZzIGluIHJlZnMvbmFtZXNwYWNlcy8qLiBJbiBwYXJ0aWN1bGFyLCBpdAorIyBwcm90ZWN0cyBhZ2FpbnN0IGEgcmVncmVzc2lvbiBjYXVzZWQgYnkgYW55IGZ1dHVyZSBjaGFuZ2UgdG8gdGhlIHJlZnMKKyMgbWFjaGluZXJ5IHRoYXQgbWlnaHQgY2F1c2UgaXQgdG8gaWdub3JlIHJlZnMgb3V0c2lkZSBvZiByZWZzL2hlYWRzLyoKKyMgb3IgcmVmcy90YWdzLyouIE1vcmUgZ2VuZXJhbGx5LCB0aGlzIHRlc3QgYWxzbyBjaGVja3MgdGhlIGhpZ2gtbGV2ZWwKKyMgZnVuY3Rpb25hbGl0eSBvZiB1c2luZyBjbG9uZSAtLW1pcnJvciB0byBiYWNrIHVwIGEgc2V0IG9mIHJlcG9zIGhvc3RlZAorIyBpbiB0aGUgbmFtZXNwYWNlcyBvZiBhIHNpbmdsZSByZXBvLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlycm9yaW5nIGEgcmVwb3NpdG9yeSB1c2luZyBhIHJlZiBuYW1lc3BhY2UnICcKKwlnaXQgY2xvbmUgLS1taXJyb3IgcHVzaGVlIG1pcnJvciAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy8gPmFjdHVhbCAmJgorCQlwcmludGYgIiRjb21taXQxIGNvbW1pdFx0cmVmcy9uYW1lc3BhY2VzL25hbWVzcGFjZS9yZWZzL2hlYWRzL21hc3RlclxuIiA+ZXhwZWN0ZWQgJiYKKwkJcHJpbnRmICIkY29tbWl0MCBjb21taXRcdHJlZnMvbmFtZXNwYWNlcy9uYW1lc3BhY2UvcmVmcy90YWdzLzBcbiIgPj5leHBlY3RlZCAmJgorCQlwcmludGYgIiRjb21taXQxIGNvbW1pdFx0cmVmcy9uYW1lc3BhY2VzL25hbWVzcGFjZS9yZWZzL3RhZ3MvMVxuIiA+PmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTEwLWZldGNoLnNoIGIvdC90NTUxMC1mZXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYmE5ZGIwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxMC1mZXRjaC5zaApAQCAtMCwwICsxLDcxMSBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwNiwgSnVuaW8gQyBIYW1hbm8uCisKK3Rlc3RfZGVzY3JpcHRpb249J1BlciBicmFuY2ggY29uZmlnIHZhcmlhYmxlcyBhZmZlY3RzICJnaXQgZmV0Y2giLgorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitEPWBwd2RgCisKK3Rlc3RfYnVuZGxlX29iamVjdF9jb3VudCAoKSB7CisJZ2l0IHZlcmlmeS1wYWNrIC12ICIkMSIgPnZlcmlmeS5vdXQgJiYKKwl0ZXN0ICIkMiIgPSAkKGdyZXAgJ15bMC05YS1mXVx7NDBcfSAnIHZlcmlmeS5vdXQgfCB3YyAtbCkKK30KKworY29udmVydF9idW5kbGVfdG9fcGFjayAoKSB7CisJd2hpbGUgcmVhZCB4ICYmIHRlc3QgLW4gIiR4IgorCWRvCisJCTo7CisJZG9uZQorCWNhdAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvID5maWxlIG9yaWdpbmFsICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBvcmlnaW5hbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgYW5kIHNldHVwIGNoaWxkIHJlcG9zIiAnCisJZ2l0IGNsb25lIC4gb25lICYmCisJKAorCQljZCBvbmUgJiYKKwkJZWNobyA+ZmlsZSB1cGRhdGVkIGJ5IG9uZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJ1cGRhdGVkIGJ5IG9uZSIKKwkpICYmCisJZ2l0IGNsb25lIC4gdHdvICYmCisJKAorCQljZCB0d28gJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBvbmUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub25lLnVybCAuLi9vbmUvLmdpdC8gJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub25lLmZldGNoIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvb25lCisJKSAmJgorCWdpdCBjbG9uZSAuIHRocmVlICYmCisJKAorCQljZCB0aHJlZSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHR3byAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9vbmUgJiYKKwkJbWtkaXIgLXAgLmdpdC9yZW1vdGVzICYmCisJCXsKKwkJCWVjaG8gIlVSTDogLi4vdHdvLy5naXQvIgorCQkJZWNobyAiUHVsbDogcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy90d28iCisJCQllY2hvICJQdWxsOiByZWZzL2hlYWRzL29uZTpyZWZzL2hlYWRzL29uZSIKKwkJfSA+LmdpdC9yZW1vdGVzL3R3bworCSkgJiYKKwlnaXQgY2xvbmUgLiBidW5kbGUgJiYKKwlnaXQgY2xvbmUgLiBzZXZlbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCB0ZXN0IiAnCisJY2QgIiREIiAmJgorCWVjaG8gPmZpbGUgdXBkYXRlZCBieSBvcmlnaW4gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ1cGRhdGVkIGJ5IG9yaWdpbiIgJiYKKwljZCB0d28gJiYKKwlnaXQgZmV0Y2ggJiYKKwl0ZXN0IC1mIC5naXQvcmVmcy9oZWFkcy9vbmUgJiYKKwltaW5lPWBnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvb25lYCAmJgorCWhpcz1gY2QgLi4vb25lICYmIGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXJgICYmCisJdGVzdCAieiRtaW5lIiA9ICJ6JGhpcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggdGVzdCBmb3ItbWVyZ2UiICcKKwljZCAiJEQiICYmCisJY2QgdGhyZWUgJiYKKwlnaXQgZmV0Y2ggJiYKKwl0ZXN0IC1mIC5naXQvcmVmcy9oZWFkcy90d28gJiYKKwl0ZXN0IC1mIC5naXQvcmVmcy9oZWFkcy9vbmUgJiYKKwltYXN0ZXJfaW5fdHdvPWBjZCAuLi90d28gJiYgZ2l0IHJldi1wYXJzZSBtYXN0ZXJgICYmCisJb25lX2luX3R3bz1gY2QgLi4vdHdvICYmIGdpdCByZXYtcGFyc2Ugb25lYCAmJgorCXsKKwkJZWNobyAiJG9uZV9pbl90d28JIgorCQllY2hvICIkbWFzdGVyX2luX3R3bwlub3QtZm9yLW1lcmdlIgorCX0gPmV4cGVjdGVkICYmCisJY3V0IC1mIC0yIC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLXBydW5lIG9uIGl0cyBvd24gd29ya3MgYXMgZXhwZWN0ZWQnICcKKwljZCAiJEQiICYmCisJZ2l0IGNsb25lIC4gcHJ1bmUgJiYKKwljZCBwcnVuZSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vZXh0cmFicmFuY2ggbWFzdGVyICYmCisKKwlnaXQgZmV0Y2ggLS1wcnVuZSBvcmlnaW4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIG9yaWdpbi9leHRyYWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLXBydW5lIHdpdGggYSBicmFuY2ggbmFtZSBrZWVwcyBicmFuY2hlcycgJworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLiBwcnVuZS1icmFuY2ggJiYKKwljZCBwcnVuZS1icmFuY2ggJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL2V4dHJhYnJhbmNoIG1hc3RlciAmJgorCisJZ2l0IGZldGNoIC0tcHJ1bmUgb3JpZ2luIG1hc3RlciAmJgorCWdpdCByZXYtcGFyc2Ugb3JpZ2luL2V4dHJhYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tcHJ1bmUgd2l0aCBhIG5hbWVzcGFjZSBrZWVwcyBvdGhlciBuYW1lc3BhY2VzJyAnCisJY2QgIiREIiAmJgorCWdpdCBjbG9uZSAuIHBydW5lLW5hbWVzcGFjZSAmJgorCWNkIHBydW5lLW5hbWVzcGFjZSAmJgorCisJZ2l0IGZldGNoIC0tcHJ1bmUgb3JpZ2luIHJlZnMvaGVhZHMvYS8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYS8qICYmCisJZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tcHJ1bmUgaGFuZGxlcyBvdmVybGFwcGluZyByZWZzcGVjcycgJworCWNkICIkRCIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3B1bGwvNDIvaGVhZCBtYXN0ZXIgJiYKKwlnaXQgY2xvbmUgLiBwcnVuZS1vdmVybGFwcGluZyAmJgorCWNkIHBydW5lLW92ZXJsYXBwaW5nICYmCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLmZldGNoIHJlZnMvcHVsbC8qL2hlYWQ6cmVmcy9yZW1vdGVzL29yaWdpbi9wci8qICYmCisKKwlnaXQgZmV0Y2ggLS1wcnVuZSBvcmlnaW4gJiYKKwlnaXQgcmV2LXBhcnNlIG9yaWdpbi9tYXN0ZXIgJiYKKwlnaXQgcmV2LXBhcnNlIG9yaWdpbi9wci80MiAmJgorCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCByZW1vdGUub3JpZ2luLmZldGNoICYmCisJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoIHJlZnMvcHVsbC8qL2hlYWQ6cmVmcy9yZW1vdGVzL29yaWdpbi9wci8qICYmCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLmZldGNoIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyogJiYKKworCWdpdCBmZXRjaCAtLXBydW5lIG9yaWdpbiAmJgorCWdpdCByZXYtcGFyc2Ugb3JpZ2luL21hc3RlciAmJgorCWdpdCByZXYtcGFyc2Ugb3JpZ2luL3ByLzQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tcHJ1bmUgLS10YWdzIHBydW5lcyBicmFuY2hlcyBidXQgbm90IHRhZ3MnICcKKwljZCAiJEQiICYmCisJZ2l0IGNsb25lIC4gcHJ1bmUtdGFncyAmJgorCWNkIHBydW5lLXRhZ3MgJiYKKwlnaXQgdGFnIHNvbWV0YWcgbWFzdGVyICYmCisJIyBDcmVhdGUgd2hhdCBsb29rcyBsaWtlIGEgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCBmcm9tIGFuIGVhcmxpZXIKKwkjIGZldGNoIHRoYXQgaGFzIHNpbmNlIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSByZW1vdGU6CisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9mYWtlLXJlbW90ZSBtYXN0ZXIgJiYKKworCWdpdCBmZXRjaCAtLXBydW5lIC0tdGFncyBvcmlnaW4gJiYKKwlnaXQgcmV2LXBhcnNlIG9yaWdpbi9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIG9yaWdpbi9mYWtlLXJlbW90ZSAmJgorCWdpdCByZXYtcGFyc2Ugc29tZXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLXBydW5lIC0tdGFncyB3aXRoIGJyYW5jaCBkb2VzIG5vdCBwcnVuZSBvdGhlciB0aGluZ3MnICcKKwljZCAiJEQiICYmCisJZ2l0IGNsb25lIC4gcHJ1bmUtdGFncy1icmFuY2ggJiYKKwljZCBwcnVuZS10YWdzLWJyYW5jaCAmJgorCWdpdCB0YWcgc29tZXRhZyBtYXN0ZXIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL2V4dHJhYnJhbmNoIG1hc3RlciAmJgorCisJZ2l0IGZldGNoIC0tcHJ1bmUgLS10YWdzIG9yaWdpbiBtYXN0ZXIgJiYKKwlnaXQgcmV2LXBhcnNlIG9yaWdpbi9leHRyYWJyYW5jaCAmJgorCWdpdCByZXYtcGFyc2Ugc29tZXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCAtLXBydW5lIC0tdGFncyB3aXRoIHJlZnNwZWMgcHJ1bmVzIGJhc2VkIG9uIHJlZnNwZWMnICcKKwljZCAiJEQiICYmCisJZ2l0IGNsb25lIC4gcHJ1bmUtdGFncy1yZWZzcGVjICYmCisJY2QgcHJ1bmUtdGFncy1yZWZzcGVjICYmCisJZ2l0IHRhZyBzb21ldGFnIG1hc3RlciAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vZm9vL290aGVyYnJhbmNoIG1hc3RlciAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vZXh0cmFicmFuY2ggbWFzdGVyICYmCisKKwlnaXQgZmV0Y2ggLS1wcnVuZSAtLXRhZ3Mgb3JpZ2luIHJlZnMvaGVhZHMvZm9vLyo6cmVmcy9yZW1vdGVzL29yaWdpbi9mb28vKiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9mb28vb3RoZXJicmFuY2ggJiYKKwlnaXQgcmV2LXBhcnNlIG9yaWdpbi9leHRyYWJyYW5jaCAmJgorCWdpdCByZXYtcGFyc2Ugc29tZXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB0YWdzIHdoZW4gdGhlcmUgaXMgbm8gdGFncycgJworCisgICAgY2QgIiREIiAmJgorCisgICAgbWtkaXIgbm90YWdzICYmCisgICAgY2Qgbm90YWdzICYmCisgICAgZ2l0IGluaXQgJiYKKworICAgIGdpdCBmZXRjaCAtdCAuLgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZvbGxvd2luZyB0YWdzJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IHRhZyAtYSAtbSAnYW5ub3RhdGVkJyBhbm5vIEhFQUQgJiYKKwlnaXQgdGFnIGxpZ2h0IEhFQUQgJiYKKworCW1rZGlyIGZvdXIgJiYKKwljZCBmb3VyICYmCisJZ2l0IGluaXQgJiYKKworCWdpdCBmZXRjaCAuLiA6dHJhY2sgJiYKKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy90YWdzL2Fubm8gJiYKKwlnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy90YWdzL2xpZ2h0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdXNlcyByZW1vdGUgcmVmIG5hbWVzIHRvIGRlc2NyaWJlIG5ldyByZWZzJyAnCisJY2QgIiREIiAmJgorCWdpdCBpbml0IGRlc2NyaXB0aXZlICYmCisJKAorCQljZCBkZXNjcmlwdGl2ZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vLnVybCAuLiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vLmZldGNoICJyZWZzL2hlYWRzLyo6cmVmcy9jcmF6eWhlYWRzLyoiICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm8uZmV0Y2ggInJlZnMvb3RoZXJzLyo6cmVmcy9oZWFkcy8qIiAmJgorCQlnaXQgZmV0Y2ggbworCSkgJiYKKwlnaXQgdGFnIC1hIC1tICJEZXNjcmlwdGl2ZSB0YWciIGRlc2NyaXB0aXZlLXRhZyAmJgorCWdpdCBicmFuY2ggZGVzY3JpcHRpdmUtYnJhbmNoICYmCisJZ2l0IGNoZWNrb3V0IGRlc2NyaXB0aXZlLWJyYW5jaCAmJgorCWVjaG8gIk51dHMiID5jcmF6eSAmJgorCWdpdCBhZGQgY3JhenkgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJkZXNjcmlwdGl2ZSBjb21taXQiICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9vdGhlcnMvY3JhenkgSEVBRCAmJgorCSgKKwkJY2QgZGVzY3JpcHRpdmUgJiYKKwkJZ2l0IGZldGNoIG8gMj5hY3R1YWwgJiYKKwkJZ3JlcCAiIC0+IHJlZnMvY3JhenloZWFkcy9kZXNjcmlwdGl2ZS1icmFuY2gkIiBhY3R1YWwgfAorCQl0ZXN0X2kxOG5ncmVwICJuZXcgYnJhbmNoIiAmJgorCQlncmVwICIgLT4gZGVzY3JpcHRpdmUtdGFnJCIgYWN0dWFsIHwKKwkJdGVzdF9pMThuZ3JlcCAibmV3IHRhZyIgJiYKKwkJZ3JlcCAiIC0+IGNyYXp5JCIgYWN0dWFsIHwKKwkJdGVzdF9pMThuZ3JlcCAibmV3IHJlZiIKKwkpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBtdXN0IG5vdCByZXNvbHZlIHNob3J0IHRhZyBuYW1lJyAnCisKKwljZCAiJEQiICYmCisKKwlta2RpciBmaXZlICYmCisJY2QgZml2ZSAmJgorCWdpdCBpbml0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLi4gYW5ubzpmaXZlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY2FuIG5vdyByZXNvbHZlIHNob3J0IHJlbW90ZSBuYW1lJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL3NpeC9IRUFEIEhFQUQgJiYKKworCW1rZGlyIHNpeCAmJgorCWNkIHNpeCAmJgorCWdpdCBpbml0ICYmCisKKwlnaXQgZmV0Y2ggLi4gc2l4OnNpeAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYnVuZGxlIDEnICcKKwljZCAiJEQiICYmCisJZWNobyA+ZmlsZSB1cGRhdGVkIGFnYWluIGJ5IG9yaWdpbiAmJgorCWdpdCBjb21taXQgLWEgLW0gInRpcCIgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSBidW5kbGUxIG1hc3Rlcl4uLm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoZWFkZXIgb2YgYnVuZGxlIGxvb2tzIHJpZ2h0JyAnCisJaGVhZCAtbiAxICIkRCIvYnVuZGxlMSB8IGdyZXAgIl4jIiAmJgorCWhlYWQgLW4gMiAiJEQiL2J1bmRsZTEgfCBncmVwICJeLVswLTlhLWZdXHs0MFx9ICIgJiYKKwloZWFkIC1uIDMgIiREIi9idW5kbGUxIHwgZ3JlcCAiXlswLTlhLWZdXHs0MFx9ICIgJiYKKwloZWFkIC1uIDQgIiREIi9idW5kbGUxIHwgZ3JlcCAiXiQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBidW5kbGUgMicgJworCWNkICIkRCIgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSBidW5kbGUyIG1hc3Rlcn4yLi5tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5idW5kbGUgMScgJworCWNkICIkRC9idW5kbGUiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNvbWUtYnJhbmNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoICIkRC9idW5kbGUxIiBtYXN0ZXI6bWFzdGVyCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVuZGxlIDEgaGFzIG9ubHkgMyBmaWxlcyAnICcKKwljZCAiJEQiICYmCisJY29udmVydF9idW5kbGVfdG9fcGFjayA8YnVuZGxlMSA+YnVuZGxlLnBhY2sgJiYKKwlnaXQgaW5kZXgtcGFjayBidW5kbGUucGFjayAmJgorCXRlc3RfYnVuZGxlX29iamVjdF9jb3VudCBidW5kbGUucGFjayAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuYnVuZGxlIDInICcKKwljZCAiJEQvYnVuZGxlIiAmJgorCWdpdCBmZXRjaCAuLi9idW5kbGUyIG1hc3RlcjptYXN0ZXIgJiYKKwl0ZXN0ICJ0aXAiID0gIiQoZ2l0IGxvZyAtMSAtLXByZXR0eT1vbmVsaW5lIG1hc3RlciB8IGN1dCAtYjQyLSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBkb2VzIG5vdCBwcmVyZXF1aXNpdGUgb2JqZWN0cycgJworCWNkICIkRCIgJiYKKwl0b3VjaCBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIGFkZC5maWxlMiBmaWxlMiAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZTMgLTEgSEVBRCAmJgorCWNvbnZlcnRfYnVuZGxlX3RvX3BhY2sgPGJ1bmRsZTMgPmJ1bmRsZS5wYWNrICYmCisJZ2l0IGluZGV4LXBhY2sgYnVuZGxlLnBhY2sgJiYKKwl0ZXN0X2J1bmRsZV9vYmplY3RfY291bnQgYnVuZGxlLnBhY2sgMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIGEgZnVsbCBoaXN0b3J5JyAnCisKKwljZCAiJEQiICYmCisJZ2l0IHRhZyAtYSAtbSAnMS4wJyB2MS4wIG1hc3RlciAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZTQgdjEuMAorCisnCisKKyEgcnN5bmMgLS1oZWxwID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbCAmJgorc2F5ICdTa2lwcGluZyByc3luYyB0ZXN0cyBiZWNhdXNlIHJzeW5jIHdhcyBub3QgZm91bmQnIHx8IHsKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHZpYSByc3luYycgJworCWdpdCBwYWNrLXJlZnMgJiYKKwlta2RpciByc3luY2VkICYmCisJKGNkIHJzeW5jZWQgJiYKKwkgZ2l0IGluaXQgLS1iYXJlICYmCisJIGdpdCBmZXRjaCAicnN5bmM6Li4vLmdpdCIgbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyICYmCisJIGdpdCBnYyAtLXBydW5lICYmCisJIHRlc3QgJChnaXQgcmV2LXBhcnNlIG1hc3RlcikgPSAkKGNkIC4uICYmIGdpdCByZXYtcGFyc2UgbWFzdGVyKSAmJgorCSBnaXQgZnNjayAtLWZ1bGwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdmlhIHJzeW5jJyAnCisJbWtkaXIgcnN5bmNlZDIgJiYKKwkoY2QgcnN5bmNlZDIgJiYKKwkgZ2l0IGluaXQpICYmCisJKGNkIHJzeW5jZWQgJiYKKwkgZ2l0IHB1c2ggInJzeW5jOi4uL3JzeW5jZWQyLy5naXQiIG1hc3RlcikgJiYKKwkoY2QgcnN5bmNlZDIgJiYKKwkgZ2l0IGdjIC0tcHJ1bmUgJiYKKwkgdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSA9ICQoY2QgLi4gJiYgZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICYmCisJIGdpdCBmc2NrIC0tZnVsbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB2aWEgcnN5bmMnICcKKwlta2RpciByc3luY2VkMyAmJgorCShjZCByc3luY2VkMyAmJgorCSBnaXQgaW5pdCkgJiYKKwlnaXQgcHVzaCAtLWFsbCAicnN5bmM6cnN5bmNlZDMvLmdpdCIgJiYKKwkoY2QgcnN5bmNlZDMgJiYKKwkgdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSA9ICQoY2QgLi4gJiYgZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICYmCisJIGdpdCBmc2NrIC0tZnVsbCkKKycKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBhIG5vbi1hcHBseWluZyBicmFuY2guPG5hbWU+Lm1lcmdlJyAnCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSB5ZXRpICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvYmlnZm9vdCAmJgorCWdpdCBjb25maWcgcmVtb3RlLmJsdWIudXJsIG9uZSAmJgorCWdpdCBjb25maWcgcmVtb3RlLmJsdWIuZmV0Y2ggInJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb25lLyoiICYmCisJZ2l0IGZldGNoIGJsdWIKKycKKworIyBVUkwgc3VwcGxpZWQgdG8gZmV0Y2ggZG9lcyBub3QgbWF0Y2ggdGhlIHVybCBvZiB0aGUgY29uZmlndXJlZCBicmFuY2gncyByZW1vdGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZyb20gR0lUIFVSTCB3aXRoIGEgbm9uLWFwcGx5aW5nIGJyYW5jaC48bmFtZT4ubWVyZ2UgWzFdJyAnCisJb25lX2hlYWQ9JChjZCBvbmUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRoaXNfaGVhZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCBGRVRDSF9IRUFEICYmCisJZ2l0IGZldGNoIG9uZSAmJgorCXRlc3QgJG9uZV9oZWFkID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBGRVRDSF9IRUFEKSIgJiYKKwl0ZXN0ICR0aGlzX2hlYWQgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIgorJworCisjIFVSTCBzdXBwbGllZCB0byBmZXRjaCBtYXRjaGVzIHRoZSB1cmwgb2YgdGhlIGNvbmZpZ3VyZWQgYnJhbmNoJ3MgcmVtb3RlIGFuZAorIyB0aGUgbWVyZ2Ugc3BlYyBtYXRjaGVzIHRoZSBicmFuY2ggdGhlIHJlbW90ZSBIRUFEIHBvaW50cyB0bwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZnJvbSBHSVQgVVJMIHdpdGggYSBub24tYXBwbHlpbmcgYnJhbmNoLjxuYW1lPi5tZXJnZSBbMl0nICcKKwlvbmVfcmVmPSQoY2Qgb25lICYmIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIGJsdWIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgIiRvbmVfcmVmIiAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIEZFVENIX0hFQUQgJiYKKwlnaXQgZmV0Y2ggb25lICYmCisJdGVzdCAkb25lX2hlYWQgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEZFVENIX0hFQUQpIiAmJgorCXRlc3QgJHRoaXNfaGVhZCA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiCisnCisKKyMgVVJMIHN1cHBsaWVkIHRvIGZldGNoIG1hdGNoZXMgdGhlIHVybCBvZiB0aGUgY29uZmlndXJlZCBicmFuY2gncyByZW1vdGUsIGJ1dAorIyB0aGUgbWVyZ2Ugc3BlYyBkb2VzIG5vdCBtYXRjaCB0aGUgYnJhbmNoIHRoZSByZW1vdGUgSEVBRCBwb2ludHMgdG8KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZyb20gR0lUIFVSTCB3aXRoIGEgbm9uLWFwcGx5aW5nIGJyYW5jaC48bmFtZT4ubWVyZ2UgWzNdJyAnCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlICIke29uZV9yZWZ9X25vdCIgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCBGRVRDSF9IRUFEICYmCisJZ2l0IGZldGNoIG9uZSAmJgorCXRlc3QgJG9uZV9oZWFkID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBGRVRDSF9IRUFEKSIgJiYKKwl0ZXN0ICR0aGlzX2hlYWQgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIgorJworCisjIHRoZSBzdHJhbmdlIG5hbWUgaXM6IGFcISdiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90aW5nIG9mIGEgc3RyYW5nZWx5IG5hbWVkIHJlcG8nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggImFcXCEnXCcnYiIgPiByZXN1bHQgMj4mMSAmJgorCWNhdCByZXN1bHQgJiYKKwlncmVwICJmYXRhbDogJ1wnJ2FcXFxcISdcJydiJ1wnJyIgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBzaG91bGQgcmVjb3JkIEhFQUQgY29ycmVjdGx5JyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGJ1bmRsZSBjcmVhdGUgYnVuZGxlNSBIRUFEIG1hc3RlciAmJgorCWdpdCBidW5kbGUgbGlzdC1oZWFkcyBidW5kbGU1ID5hY3R1YWwgJiYKKwlmb3IgaCBpbiBIRUFEIHJlZnMvaGVhZHMvbWFzdGVyCisJZG8KKwkJZWNobyAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRoKSAkaCIKKwlkb25lID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFyayBpbml0aWFsIHN0YXRlIG9mIG9yaWdpbi9tYXN0ZXInICcKKwkoCisJCWNkIHRocmVlICYmCisJCWdpdCB0YWcgYmFzZS1vcmlnaW4tbWFzdGVyIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCBmZXRjaCBzaG91bGQgdXBkYXRlIHRyYWNraW5nJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlICYmCisJKAorCQljZCB0aHJlZSAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciBiYXNlLW9yaWdpbi1tYXN0ZXIgJiYKKwkJbz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCWdpdCBmZXRjaCBvcmlnaW4gbWFzdGVyICYmCisJCW49JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICIkbyIgIT0gIiRuIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgcHVsbCBzaG91bGQgdXBkYXRlIHRyYWNraW5nJyAnCisKKwljZCAiJEQiICYmCisJZ2l0IGJyYW5jaCAtZiBzaWRlICYmCisJKAorCQljZCB0aHJlZSAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciBiYXNlLW9yaWdpbi1tYXN0ZXIgJiYKKwkJbz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCWdpdCBwdWxsIG9yaWdpbiBtYXN0ZXIgJiYKKwkJbj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgIiRvIiAhPSAiJG4iICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9zaWRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdCAtLXJlZm1hcCBpcyBhbGxvd2VkIG9ubHkgd2l0aCBjb21tYW5kLWxpbmUgcmVmc3BlYycgJworCWNkICIkRCIgJiYKKwkoCisJCWNkIHRocmVlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtLXJlZm1hcD0iKjpyZWZzL3JlbW90ZXMvbm9uZS8qIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwbGljaXQgLS1yZWZtYXAgb3B0aW9uIG92ZXJyaWRlcyByZW1vdGUuKi5mZXRjaCcgJworCWNkICIkRCIgJiYKKwlnaXQgYnJhbmNoIC1mIHNpZGUgJiYKKwkoCisJCWNkIHRocmVlICYmCisJCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIGJhc2Utb3JpZ2luLW1hc3RlciAmJgorCQlvPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKKwkJZ2l0IGZldGNoIC0tcmVmbWFwPSJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL290aGVyLyoiIG9yaWdpbiBtYXN0ZXIgJiYKKwkJbj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgIiRvIiA9ICIkbiIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3RoZXIvbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBsaWNpdGx5IGVtcHR5IC0tcmVmbWFwIG9wdGlvbiBkaXNhYmxlcyByZW1vdGUuKi5mZXRjaCcgJworCWNkICIkRCIgJiYKKwlnaXQgYnJhbmNoIC1mIHNpZGUgJiYKKwkoCisJCWNkIHRocmVlICYmCisJCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIGJhc2Utb3JpZ2luLW1hc3RlciAmJgorCQlvPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKKwkJZ2l0IGZldGNoIC0tcmVmbWFwPSIiIG9yaWdpbiBtYXN0ZXIgJiYKKwkJbj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIpICYmCisJCXRlc3QgIiRvIiA9ICIkbiIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL3NpZGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZ3VyZWQgZmV0Y2ggdXBkYXRlcyB0cmFja2luZycgJworCisJY2QgIiREIiAmJgorCWdpdCBicmFuY2ggLWYgc2lkZSAmJgorCSgKKwkJY2QgdGhyZWUgJiYKKwkJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgYmFzZS1vcmlnaW4tbWFzdGVyICYmCisJCW89JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luICYmCisJCW49JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQl0ZXN0ICIkbyIgIT0gIiRuIiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vc2lkZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLW1hdGNoaW5nIHJlZnNwZWNzIGRvIG5vdCBjb25mdXNlIHRyYWNraW5nIHVwZGF0ZScgJworCWNkICIkRCIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL29kZC9sb2NhdGlvbiBIRUFEICYmCisJKAorCQljZCB0aHJlZSAmJgorCQlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciBiYXNlLW9yaWdpbi1tYXN0ZXIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUub3JpZ2luLmZldGNoIFwKKwkJCXJlZnMvb2RkL2xvY2F0aW9uOnJlZnMvcmVtb3Rlcy9vcmlnaW4vb2RkICYmCisJCW89JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luIG1hc3RlciAmJgorCQluPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcikgJiYKKwkJdGVzdCAiJG8iICE9ICIkbiIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL29kZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaGluZyBub25leGlzdGVudCBicmFuY2ggYnkgbWlzdGFrZSBzaG91bGQgbm90IHNlZ3YnICcKKworCWNkICIkRCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBzZXZlbiBubzpubworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG8gdGFnIGZvbGxvd2luZyBmZXRjaGVzIG1pbmltdW0nICcKKworCWNkICIkRCIgJiYKKwlnaXQgY2xvbmUgLmdpdCBmb2xsb3cgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4wICYmCisJKAorCQlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3CisJCWRvCisJCQllY2hvICRpID4+ZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtbSAkaSAtYSAmJgorCQkJZ2l0IHRhZyAtYSAtbSAkaSBleGNlc3MtJGkgfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSgKKwkJY2QgZm9sbG93ICYmCisJCWdpdCBmZXRjaAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmdXNlIHRvIGZldGNoIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLiBzaWRlOm1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggLS11cGRhdGUtaGVhZC1vaycgJworCisJZ2l0IGZldGNoIC0tdXBkYXRlLWhlYWQtb2sgLiBzaWRlOm1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tZHJ5LXJ1bicgJworCisJcm0gLWYgLmdpdC9GRVRDSF9IRUFEICYmCisJZ2l0IGZldGNoIC0tZHJ5LXJ1biAuICYmCisJISB0ZXN0IC1mIC5naXQvRkVUQ0hfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzaG91bGQgYmUgYWJsZSB0byBmZXRjaCB3aXRoIGR1cGxpY2F0ZSByZWZzcGVjcyIgJworCW1rZGlyIGR1cHMgJiYKKwkoCisJCWNkIGR1cHMgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSB0aHJlZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS50aHJlZS51cmwgLi4vdGhyZWUvLmdpdCAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS50aHJlZS5mZXRjaCArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiAmJgorCQlnaXQgY29uZmlnIC0tYWRkIHJlbW90ZS50aHJlZS5mZXRjaCArcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiAmJgorCQlnaXQgZmV0Y2ggdGhyZWUKKwkpCisnCisKKyMgY29uZmlndXJlZCBwcnVuZSB0ZXN0cworCitzZXRfY29uZmlnX3RyaXN0YXRlICgpIHsKKwkjIHZhcj0kMSB2YWw9JDIKKwljYXNlICIkMiIgaW4KKwl1bnNldCkgIHRlc3RfdW5jb25maWcgIiQxIiA7OworCSopCWdpdCBjb25maWcgIiQxIiAiJDIiIDs7CisJZXNhYworfQorCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgKCkgeworCWZldGNoX3BydW5lPSQxIHJlbW90ZV9vcmlnaW5fcHJ1bmU9JDIgY21kbGluZT0kMyBleHBlY3RlZD0kNAorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicHJ1bmUgZmV0Y2gucHJ1bmU9JDEgcmVtb3RlLm9yaWdpbi5wcnVuZT0kMiR7MzorICQzfTsgJDQiICcKKwkJIyBtYWtlIHN1cmUgYSBuZXdicmFuY2ggaXMgdGhlcmUgaW4gLiBhbmQgYWxzbyBpbiBvbmUKKwkJZ2l0IGJyYW5jaCAtZiBuZXdicmFuY2ggJiYKKwkJKAorCQkJY2Qgb25lICYmCisJCQl0ZXN0X3VuY29uZmlnIGZldGNoLnBydW5lICYmCisJCQl0ZXN0X3VuY29uZmlnIHJlbW90ZS5vcmlnaW4ucHJ1bmUgJiYKKwkJCWdpdCBmZXRjaCAmJgorCQkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL25ld2JyYW5jaAorCQkpICYmCisKKwkJIyBub3cgcmVtb3ZlIGl0CisJCWdpdCBicmFuY2ggLWQgbmV3YnJhbmNoICYmCisKKwkJIyB0aGVuIHRlc3QKKwkJKAorCQkJY2Qgb25lICYmCisJCQlzZXRfY29uZmlnX3RyaXN0YXRlIGZldGNoLnBydW5lICRmZXRjaF9wcnVuZSAmJgorCQkJc2V0X2NvbmZpZ190cmlzdGF0ZSByZW1vdGUub3JpZ2luLnBydW5lICRyZW1vdGVfb3JpZ2luX3BydW5lICYmCisKKwkJCWdpdCBmZXRjaCAkY21kbGluZSAmJgorCQkJY2FzZSAiJGV4cGVjdGVkIiBpbgorCQkJcHJ1bmVkKQorCQkJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9uZXdicmFuY2gKKwkJCQk7OworCQkJa2VwdCkKKwkJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbmV3YnJhbmNoCisJCQkJOzsKKwkJCWVzYWMKKwkJKQorCScKK30KKwordGVzdF9jb25maWd1cmVkX3BydW5lIHVuc2V0IHVuc2V0ICIiCQlrZXB0Cit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdW5zZXQgdW5zZXQgIi0tbm8tcHJ1bmUiCWtlcHQKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB1bnNldCB1bnNldCAiLS1wcnVuZSIJcHJ1bmVkCisKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSBmYWxzZSB1bnNldCAiIgkJa2VwdAordGVzdF9jb25maWd1cmVkX3BydW5lIGZhbHNlIHVuc2V0ICItLW5vLXBydW5lIglrZXB0Cit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgZmFsc2UgdW5zZXQgIi0tcHJ1bmUiCXBydW5lZAorCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdHJ1ZSAgdW5zZXQgIiIJCXBydW5lZAordGVzdF9jb25maWd1cmVkX3BydW5lIHRydWUgIHVuc2V0ICItLXBydW5lIglwcnVuZWQKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB0cnVlICB1bnNldCAiLS1uby1wcnVuZSIJa2VwdAorCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdW5zZXQgZmFsc2UgIiIJCWtlcHQKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB1bnNldCBmYWxzZSAiLS1uby1wcnVuZSIJa2VwdAordGVzdF9jb25maWd1cmVkX3BydW5lIHVuc2V0IGZhbHNlICItLXBydW5lIglwcnVuZWQKKwordGVzdF9jb25maWd1cmVkX3BydW5lIGZhbHNlIGZhbHNlICIiCQlrZXB0Cit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgZmFsc2UgZmFsc2UgIi0tbm8tcHJ1bmUiCWtlcHQKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSBmYWxzZSBmYWxzZSAiLS1wcnVuZSIJcHJ1bmVkCisKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB0cnVlICBmYWxzZSAiIgkJa2VwdAordGVzdF9jb25maWd1cmVkX3BydW5lIHRydWUgIGZhbHNlICItLXBydW5lIglwcnVuZWQKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB0cnVlICBmYWxzZSAiLS1uby1wcnVuZSIJa2VwdAorCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdW5zZXQgdHJ1ZSAgIiIJCXBydW5lZAordGVzdF9jb25maWd1cmVkX3BydW5lIHVuc2V0IHRydWUgICItLW5vLXBydW5lIglrZXB0Cit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdW5zZXQgdHJ1ZSAgIi0tcHJ1bmUiCXBydW5lZAorCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgZmFsc2UgdHJ1ZSAgIiIJCXBydW5lZAordGVzdF9jb25maWd1cmVkX3BydW5lIGZhbHNlIHRydWUgICItLW5vLXBydW5lIglrZXB0Cit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgZmFsc2UgdHJ1ZSAgIi0tcHJ1bmUiCXBydW5lZAorCit0ZXN0X2NvbmZpZ3VyZWRfcHJ1bmUgdHJ1ZSAgdHJ1ZSAgIiIJCXBydW5lZAordGVzdF9jb25maWd1cmVkX3BydW5lIHRydWUgIHRydWUgICItLXBydW5lIglwcnVuZWQKK3Rlc3RfY29uZmlndXJlZF9wcnVuZSB0cnVlICB0cnVlICAiLS1uby1wcnVuZSIJa2VwdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGwgYm91bmRhcnkgY29tbWl0cyBhcmUgZXhjbHVkZWQnICcKKwl0ZXN0X2NvbW1pdCBiYXNlICYmCisJdGVzdF9jb21taXQgb25lc2lkZSAmJgorCWdpdCBjaGVja291dCBIRUFEXiAmJgorCXRlc3RfY29tbWl0IG90aGVyc2lkZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2Ugb3RoZXJzaWRlICYmCisJYWQ9JChnaXQgbG9nIC0tbm8td2FsayAtLWZvcm1hdD0lYWQgSEVBRCkgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSB0d29zaWRlLWJvdW5kYXJ5LmJkbCBtYXN0ZXIgLS1zaW5jZT0iJGFkIiAmJgorCWNvbnZlcnRfYnVuZGxlX3RvX3BhY2sgPHR3b3NpZGUtYm91bmRhcnkuYmRsID50d29zaWRlLWJvdW5kYXJ5LnBhY2sgJiYKKwlwYWNrPSQoZ2l0IGluZGV4LXBhY2sgLS1maXgtdGhpbiAtLXN0ZGluIDx0d29zaWRlLWJvdW5kYXJ5LnBhY2spICYmCisJdGVzdF9idW5kbGVfb2JqZWN0X2NvdW50IC5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHtwYWNrIyNwYWNrCX0ucGFjayAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tcHJ1bmUgcHJpbnRzIHRoZSByZW1vdGVzIHVybCcgJworCWdpdCBicmFuY2ggZ29vZGJ5ZSAmJgorCWdpdCBjbG9uZSAuIG9ubHktcHJ1bmVzICYmCisJZ2l0IGJyYW5jaCAtRCBnb29kYnllICYmCisJKAorCQljZCBvbmx5LXBydW5lcyAmJgorCQlnaXQgZmV0Y2ggLS1wcnVuZSBvcmlnaW4gMj4mMSB8IGhlYWQgLW4xID4uLi9hY3R1YWwKKwkpICYmCisJZWNobyAiRnJvbSAke0R9Ly4iID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaG5hbWUgRC9GIGNvbmZsaWN0IHJlc29sdmVkIGJ5IC0tcHJ1bmUnICcKKwlnaXQgYnJhbmNoIGRpci9maWxlICYmCisJZ2l0IGNsb25lIC4gcHJ1bmUtZGYtY29uZmxpY3QgJiYKKwlnaXQgYnJhbmNoIC1EIGRpci9maWxlICYmCisJZ2l0IGJyYW5jaCBkaXIgJiYKKwkoCisJCWNkIHBydW5lLWRmLWNvbmZsaWN0ICYmCisJCWdpdCBmZXRjaCAtLXBydW5lICYmCisJCWdpdCByZXYtcGFyc2Ugb3JpZ2luL2RpciA+Li4vYWN0dWFsCisJKSAmJgorCWdpdCByZXYtcGFyc2UgZGlyID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoaW5nIGEgb25lLWxldmVsIHJlZiB3b3JrcycgJworCXRlc3RfY29tbWl0IGV4dHJhICYmCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvZm9vIGV4dHJhICYmCisJZ2l0IGluaXQgb25lLWxldmVsICYmCisJKAorCQljZCBvbmUtbGV2ZWwgJiYKKwkJZ2l0IGZldGNoIC4uIEhFQUQgcmVmcy9mb28KKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxMS1yZWZzcGVjLnNoIGIvdC90NTUxMS1yZWZzcGVjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1NDFmMzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTExLXJlZnNwZWMuc2gKQEAgLTAsMCArMSw5NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3JlZnNwZWMgcGFyc2luZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfcmVmc3BlYyAoKSB7CisJa2luZD0kMSByZWZzcGVjPSQyIGV4cGVjdD0kMworCWdpdCBjb25maWcgcmVtb3RlLmZyb3R6LnVybCAiLiIgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gcmVtb3RlLmZyb3R6ICYmCisJZ2l0IGNvbmZpZyByZW1vdGUuZnJvdHoudXJsICIuIiAmJgorCWdpdCBjb25maWcgInJlbW90ZS5mcm90ei4ka2luZCIgIiRyZWZzcGVjIiAmJgorCWlmIHRlc3QgIiRleHBlY3QiICE9IGludmFsaWQKKwl0aGVuCisJCXRpdGxlPSIka2luZCAkcmVmc3BlYyIKKwkJdGVzdD0nZ2l0IGxzLXJlbW90ZSBmcm90eicKKwllbHNlCisJCXRpdGxlPSIka2luZCAkcmVmc3BlYyAoaW52YWxpZCkiCisJCXRlc3Q9J3Rlc3RfbXVzdF9mYWlsIGdpdCBscy1yZW1vdGUgZnJvdHonCisJZmkKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkdGl0bGUiICIkdGVzdCIKK30KKwordGVzdF9yZWZzcGVjIHB1c2ggJycJCQkJCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAnOicKK3Rlc3RfcmVmc3BlYyBwdXNoICc6OicJCQkJCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAnKzonCisKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnJwordGVzdF9yZWZzcGVjIGZldGNoICc6JwordGVzdF9yZWZzcGVjIGZldGNoICc6OicJCQkJCQlpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2Zyb3R6LyonCit0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9mcm90eicJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzOnJlZnMvcmVtb3Rlcy9mcm90ei8qJwkJaW52YWxpZAordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9mcm90ei94eXp6eScKKworCisjIFRoZXNlIGhhdmUgaW52YWxpZCBMSFMsIGJ1dCB3ZSBkbyBub3QgaGF2ZSBhIGZvcm1hbCAidmFsaWQgc2hhLTEKKyMgZXhwcmVzc2lvbiBzeW50YXggY2hlY2tlciIgc28gdGhleSBhcmUgbm90IGNoZWNrZWQgd2l0aCB0aGUgY3VycmVudAorIyBjb2RlLiAgVGhleSB3aWxsIGJlIGNhdWdodCBkb3duc3RyZWFtIGFueXdheSwgYnV0IHdlIG1heSB3YW50IHRvCisjIGhhdmUgdGlnaHRlciBjaGVjayBsYXRlci4uLgorCis6IHRlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzL21hc3Rlcjo6cmVmcy9yZW1vdGVzL2Zyb3R6L3h5enp5JwlpbnZhbGlkCis6IHRlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzL21hc3RlIDpyZWZzL3JlbW90ZXMvZnJvdHoveHl6enknCWludmFsaWQKKwordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2Zyb3R6LyonCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvZnJvdHonCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHM6cmVmcy9yZW1vdGVzL2Zyb3R6LyonCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9mcm90ei94eXp6eScKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy9tYXN0ZXI6OnJlZnMvcmVtb3Rlcy9mcm90ei94eXp6eScJaW52YWxpZAordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzL21hc3RlIDpyZWZzL3JlbW90ZXMvZnJvdHoveHl6enknCWludmFsaWQKKwordGVzdF9yZWZzcGVjIHB1c2ggJ21hc3Rlcn4xOnJlZnMvcmVtb3Rlcy9mcm90ei9iYWNrdXAnCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ21hc3Rlcn4xOnJlZnMvcmVtb3Rlcy9mcm90ei9iYWNrdXAnCQlpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAnSEVBRH40OnJlZnMvcmVtb3Rlcy9mcm90ei9uZXcnCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ0hFQUR+NDpyZWZzL3JlbW90ZXMvZnJvdHovbmV3JwkJaW52YWxpZAorCit0ZXN0X3JlZnNwZWMgcHVzaCAnSEVBRCcKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnSEVBRCcKK3Rlc3RfcmVmc3BlYyBwdXNoICdyZWZzL2hlYWRzLyBuaXRmb2wnCQkJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy8gbml0Zm9sJwkJCQlpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBwdXNoICdIRUFEOicJCQkJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnSEVBRDonCit0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcy8gbml0Zm9sOicJCQkJaW52YWxpZAordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzLyBuaXRmb2w6JwkJCWludmFsaWQKKwordGVzdF9yZWZzcGVjIHB1c2ggJzpyZWZzL3JlbW90ZXMvZnJvdHovZGVsZXRlbWUnCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJzpyZWZzL3JlbW90ZXMvZnJvdHovSEVBRC10by1tZScKK3Rlc3RfcmVmc3BlYyBwdXNoICc6cmVmcy9yZW1vdGVzL2Zyb3R6L2RlbGV0ZSBtZScJCWludmFsaWQKK3Rlc3RfcmVmc3BlYyBmZXRjaCAnOnJlZnMvcmVtb3Rlcy9mcm90ei9IRUFEIHRvIG1lJwkJaW52YWxpZAorCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKi1ibGFoJwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKi1ibGFoJworCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMqL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMqL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJworCit0ZXN0X3JlZnNwZWMgZmV0Y2ggJ3JlZnMvaGVhZHMvKi8qL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJyBpbnZhbGlkCit0ZXN0X3JlZnNwZWMgcHVzaCAncmVmcy9oZWFkcy8qLyovZm9yLWxpbnVzOnJlZnMvcmVtb3Rlcy9taW5lLyonIGludmFsaWQKKwordGVzdF9yZWZzcGVjIGZldGNoICdyZWZzL2hlYWRzLypnKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKicgaW52YWxpZAordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKmcqL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJyBpbnZhbGlkCisKK3Rlc3RfcmVmc3BlYyBmZXRjaCAncmVmcy9oZWFkcy8qL2Zvci1saW51czpyZWZzL3JlbW90ZXMvbWluZS8qJwordGVzdF9yZWZzcGVjIHB1c2ggJ3JlZnMvaGVhZHMvKi9mb3ItbGludXM6cmVmcy9yZW1vdGVzL21pbmUvKicKKworZ29vZD0kKHByaW50ZiAnXDMwM1wyMDQnKQordGVzdF9yZWZzcGVjIGZldGNoICJyZWZzL2hlYWRzLyR7Z29vZH0iCitiYWQ9JChwcmludGYgJ1wwMTF0YWInKQordGVzdF9yZWZzcGVjIGZldGNoICJyZWZzL2hlYWRzLyR7YmFkfSIJCQkJaW52YWxpZAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTItbHMtcmVtb3RlLnNoIGIvdC90NTUxMi1scy1yZW1vdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWFkYWFjNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTItbHMtcmVtb3RlLnNoCkBAIC0wLDAgKzEsMTY2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGxzLXJlbW90ZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCT5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBtYXJrICYmCisJZ2l0IHNob3ctcmVmIC0tdGFncyAtZCB8IHNlZCAtZSAicy8gLwkvIiA+ZXhwZWN0ZWQudGFnICYmCisJKAorCQllY2hvICIkKGdpdCByZXYtcGFyc2UgSEVBRCkJSEVBRCIKKwkJZ2l0IHNob3ctcmVmIC1kCXwgc2VkIC1lICJzLyAvCS8iCisJKSA+ZXhwZWN0ZWQuYWxsICYmCisKKwlnaXQgcmVtb3RlIGFkZCBzZWxmICIkKHB3ZCkvLmdpdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtcmVtb3RlIC0tdGFncyAuZ2l0JyAnCisJZ2l0IGxzLXJlbW90ZSAtLXRhZ3MgLmdpdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQudGFnIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgLmdpdCcgJworCWdpdCBscy1yZW1vdGUgLmdpdCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYWxsIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1yZW1vdGUgLS10YWdzIHNlbGYnICcKKwlnaXQgbHMtcmVtb3RlIC0tdGFncyBzZWxmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC50YWcgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xzLXJlbW90ZSBzZWxmJyAnCisJZ2l0IGxzLXJlbW90ZSBzZWxmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5hbGwgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZXMgd2hlbiBubyByZW1vdGUgc3BlY2lmaWVkIGFuZCBubyBkZWZhdWx0IHJlbW90ZXMgZm91bmQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbHMtcmVtb3RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAib3JpZ2luIiB3aGVuIG5vIHJlbW90ZSBzcGVjaWZpZWQnICcKKwlVUkw9IiQocHdkKS8uZ2l0IiAmJgorCWVjaG8gIkZyb20gJFVSTCIgPmV4cF9lcnIgJiYKKworCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAiJFVSTCIgJiYKKwlnaXQgbHMtcmVtb3RlIDI+YWN0dWFsX2VyciA+YWN0dWFsICYmCisKKwl0ZXN0X2NtcCBleHBfZXJyIGFjdHVhbF9lcnIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5hbGwgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1cHByZXNzICJGcm9tIDx1cmw+IiB3aXRoIC1xJyAnCisJZ2l0IGxzLXJlbW90ZSAtcSAyPmFjdHVhbF9lcnIgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0X2NtcCBleHBfZXJyIGFjdHVhbF9lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIGJyYW5jaC48bmFtZT4ucmVtb3RlIGlmIHBvc3NpYmxlJyAnCisJIworCSMgVGVzdCB0aGF0IHdlIGFyZSBpbmRlZWQgdXNpbmcgYnJhbmNoLjxuYW1lPi5yZW1vdGUsIG5vdCAib3JpZ2luIiwgZXZlbgorCSMgdGhvdWdoIHRoZSAib3JpZ2luIiByZW1vdGUgaGFzIGJlZW4gc2V0LgorCSMKKworCSMgc2V0dXAgYSBuZXcgcmVtb3RlIHRvIGRpZmZlcmVudGlhdGUgZnJvbSAib3JpZ2luIgorCWdpdCBjbG9uZSAuIG90aGVyLmdpdCAmJgorCSgKKwkJY2Qgb3RoZXIuZ2l0ICYmCisJCWVjaG8gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKQlIRUFEIgorCQlnaXQgc2hvdy1yZWYJfCBzZWQgLWUgInMvIC8JLyIKKwkpID5leHAgJiYKKworCVVSTD0ib3RoZXIuZ2l0IiAmJgorCWVjaG8gIkZyb20gJFVSTCIgPmV4cF9lcnIgJiYKKworCWdpdCByZW1vdGUgYWRkIG90aGVyICRVUkwgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIG90aGVyICYmCisKKwlnaXQgbHMtcmVtb3RlIDI+YWN0dWFsX2VyciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwX2VyciBhY3R1YWxfZXJyICYmCisJdGVzdF9jbXAgZXhwIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mdXNlcyBwYXR0ZXJuIGFzIHJlbW90ZSB3aGVuIG5vIHJlbW90ZSBzcGVjaWZpZWQnICcKKwljYXQgPmV4cCA8PC1cRU9GICYmCisJZmF0YWw6ICdcJydyZWZzKm1hc3RlcidcJycgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgZ2l0IHJlcG9zaXRvcnkKKwlmYXRhbDogQ291bGQgbm90IHJlYWQgZnJvbSByZW1vdGUgcmVwb3NpdG9yeS4KKworCVBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgYWNjZXNzIHJpZ2h0cworCWFuZCB0aGUgcmVwb3NpdG9yeSBleGlzdHMuCisJRU9GCisJIworCSMgRG8gbm90IGV4cGVjdCAiZ2l0IGxzLXJlbW90ZSA8cGF0dGVybj4iIHRvIHdvcms7IGxzLXJlbW90ZSBuZWVkcworCSMgPHJlbW90ZT4gaWYgeW91IHdhbnQgdG8gZmVlZCA8cGF0dGVybj4sIGp1c3QgbGlrZSB5b3UgY2Fubm90IHNheQorCSMgZmV0Y2ggPGJyYW5jaD4uCisJIyBXZSBjb3VsZCBqdXN0IGFzIGVhc2lseSBoYXZlIHVzZWQgIm1hc3RlciI7IHRoZSAiKiIgZW1waGFzaXplcyBpdHMKKwkjIHJvbGUgYXMgYSBwYXR0ZXJuLgorCXRlc3RfbXVzdF9mYWlsIGdpdCBscy1yZW1vdGUgcmVmcyptYXN0ZXIgPmFjdHVhbCAyPiYxICYmCisJdGVzdF9jbXAgZXhwIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWUgd2l0aCBub24tMiBmb3Igd3JvbmcgcmVwb3NpdG9yeSBldmVuIHdpdGggLS1leGl0LWNvZGUnICcKKwl7CisJCWdpdCBscy1yZW1vdGUgLS1leGl0LWNvZGUgLi9uby1zdWNoLXJlcG9zaXRvcnkKKwkJc3RhdHVzPSQ/CisJfSAmJgorCXRlc3QgJHN0YXR1cyAhPSAyICYmIHRlc3QgJHN0YXR1cyAhPSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlcG9ydCBzdWNjZXNzIGV2ZW4gd2hlbiBub3RoaW5nIG1hdGNoZXMnICcKKwlnaXQgbHMtcmVtb3RlIG90aGVyLmdpdCAicmVmcy9uc24vKiIgPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlcG9ydCBuby1tYXRjaCB3aXRoIC0tZXhpdC1jb2RlJyAnCisJdGVzdF9leHBlY3RfY29kZSAyIGdpdCBscy1yZW1vdGUgLS1leGl0LWNvZGUgb3RoZXIuZ2l0ICJyZWZzL25zbi8qIiA+YWN0dWFsICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVwb3J0IG1hdGNoIHdpdGggLS1leGl0LWNvZGUnICcKKwlnaXQgbHMtcmVtb3RlIC0tZXhpdC1jb2RlIG90aGVyLmdpdCAicmVmcy90YWdzLyoiID5hY3R1YWwgJiYKKwlnaXQgbHMtcmVtb3RlIC4gdGFncy9tYXJrID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBzb21lIGV4dHJhIHRhZ3MgZm9yIHJlZiBoaWRpbmcnICcKKwlnaXQgdGFnIG1hZ2ljL29uZSAmJgorCWdpdCB0YWcgbWFnaWMvdHdvCisnCisKK2ZvciBjb25maWdzZWN0aW9uIGluIHRyYW5zZmVyIHVwbG9hZHBhY2sKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiSGlkZSBzb21lIHJlZnMgd2l0aCAkY29uZmlnc2VjdGlvbi5oaWRlcmVmcyIgJworCQl0ZXN0X2NvbmZpZyAkY29uZmlnc2VjdGlvbi5oaWRlcmVmcyByZWZzL3RhZ3MgJiYKKwkJZ2l0IGxzLXJlbW90ZSAuID5hY3R1YWwgJiYKKwkJdGVzdF91bmNvbmZpZyAkY29uZmlnc2VjdGlvbi5oaWRlcmVmcyAmJgorCQlnaXQgbHMtcmVtb3RlIC4gfAorCQlzZWQgLWUgIi8JcmVmc1wvdGFnc1wvL2QiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIk92ZXJyaWRlIGhpZGluZyBvZiAkY29uZmlnc2VjdGlvbi5oaWRlcmVmcyIgJworCQl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfdW5jb25maWcgJGNvbmZpZ3NlY3Rpb24uaGlkZXJlZnMiICYmCisJCWdpdCBjb25maWcgLS1hZGQgJGNvbmZpZ3NlY3Rpb24uaGlkZXJlZnMgcmVmcy90YWdzICYmCisJCWdpdCBjb25maWcgLS1hZGQgJGNvbmZpZ3NlY3Rpb24uaGlkZXJlZnMgIiFyZWZzL3RhZ3MvbWFnaWMiICYmCisJCWdpdCBjb25maWcgLS1hZGQgJGNvbmZpZ3NlY3Rpb24uaGlkZXJlZnMgcmVmcy90YWdzL21hZ2ljL29uZSAmJgorCQlnaXQgbHMtcmVtb3RlIC4gPmFjdHVhbCAmJgorCQlncmVwIHJlZnMvdGFncy9tYWdpYy90d28gYWN0dWFsICYmCisJCSEgZ3JlcCByZWZzL3RhZ3MvbWFnaWMvb25lIGFjdHVhbAorCScKKworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZXMgd29yayBiZXR3ZWVuIG1peGVkIHRyYW5zZmVyL3VwbG9hZC1wYWNrIGhpZGVSZWZzJyAnCisJdGVzdF9jb25maWcgdXBsb2FkcGFjay5oaWRlcmVmcyByZWZzL3RhZ3MgJiYKKwl0ZXN0X2NvbmZpZyB0cmFuc2Zlci5oaWRlcmVmcyAiIXJlZnMvdGFncy9tYWdpYyIgJiYKKwlnaXQgbHMtcmVtb3RlIC4gPmFjdHVhbCAmJgorCWdyZXAgcmVmcy90YWdzL21hZ2ljIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTMtZmV0Y2gtdHJhY2suc2ggYi90L3Q1NTEzLWZldGNoLXRyYWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1ZDFlMDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTEzLWZldGNoLXRyYWNrLnNoCkBAIC0wLDAgKzEsMzAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaCBmb2xsb3dzIHJlbW90ZS10cmFja2luZyBicmFuY2hlcyBjb3JyZWN0bHknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk+ZmlsZSAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCWdpdCBicmFuY2ggYi0wICYmCisJZ2l0IGJyYW5jaCBiMSAmJgorCWdpdCBicmFuY2ggYi9vbmUgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIG90aGVyICYmCisJKAorCQljZCBvdGhlciAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIC4uICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi5mZXRjaCAiK3JlZnMvaGVhZHMvYi8qOnJlZnMvcmVtb3Rlcy9iLyoiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIGZldGNoICcKKwkoCisJCWNkIG90aGVyICYmIGdpdCBmZXRjaCBvcmlnaW4gJiYKKwkJdGVzdCAiJChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIikiID0gcmVmcy9yZW1vdGVzL2Ivb25lCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTQtZmV0Y2gtbXVsdGlwbGUuc2ggYi90L3Q1NTE0LWZldGNoLW11bHRpcGxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRiNGI2NjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE0LWZldGNoLW11bHRpcGxlLnNoCkBAIC0wLDAgKzEsMTg0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2ggLS1hbGwgd29ya3MgY29ycmVjdGx5JworCisuIC4vdGVzdC1saWIuc2gKKworc2V0dXBfcmVwb3NpdG9yeSAoKSB7CisJbWtkaXIgIiQxIiAmJiAoCisJY2QgIiQxIiAmJgorCWdpdCBpbml0ICYmCisJPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJPmVsaWYgJiYKKwlnaXQgYWRkIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTZWNvbmQiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJc2V0dXBfcmVwb3NpdG9yeSBvbmUgJiYKKwlzZXR1cF9yZXBvc2l0b3J5IHR3byAmJgorCSgKKwkJY2QgdHdvICYmIGdpdCBicmFuY2ggYW5vdGhlcgorCSkgJiYKKwlnaXQgY2xvbmUgLS1taXJyb3IgdHdvIHRocmVlICYmCisJZ2l0IGNsb25lIG9uZSB0ZXN0CisnCisKK2NhdCA+IHRlc3QvZXhwZWN0IDw8IEVPRgorICBvbmUvbWFzdGVyCisgIG9uZS9zaWRlCisgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL21hc3RlcgorICBvcmlnaW4vc2lkZQorICB0aHJlZS9hbm90aGVyCisgIHRocmVlL21hc3RlcgorICB0aHJlZS9zaWRlCisgIHR3by9hbm90aGVyCisgIHR3by9tYXN0ZXIKKyAgdHdvL3NpZGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1hbGwnICcKKwkoY2QgdGVzdCAmJgorCSBnaXQgcmVtb3RlIGFkZCBvbmUgLi4vb25lICYmCisJIGdpdCByZW1vdGUgYWRkIHR3byAuLi90d28gJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdGhyZWUgLi4vdGhyZWUgJiYKKwkgZ2l0IGZldGNoIC0tYWxsICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tYWxsIHNob3VsZCBjb250aW51ZSBpZiBhIHJlbW90ZSBoYXMgZXJyb3JzJyAnCisJKGdpdCBjbG9uZSBvbmUgdGVzdDIgJiYKKwkgY2QgdGVzdDIgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgYmFkIC4uL25vbi1leGlzdGluZyAmJgorCSBnaXQgcmVtb3RlIGFkZCBvbmUgLi4vb25lICYmCisJIGdpdCByZW1vdGUgYWRkIHR3byAuLi90d28gJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdGhyZWUgLi4vdGhyZWUgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC0tYWxsICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgLi4vdGVzdC9leHBlY3Qgb3V0cHV0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZmV0Y2ggLS1hbGwgZG9lcyBub3QgYWxsb3cgbm9uLW9wdGlvbiBhcmd1bWVudHMnICcKKwkoY2QgdGVzdCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1hbGwgb3JpZ2luICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtLWFsbCBvcmlnaW4gbWFzdGVyKQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisgIG9yaWdpbi9IRUFEIC0+IG9yaWdpbi9tYXN0ZXIKKyAgb3JpZ2luL21hc3RlcgorICBvcmlnaW4vc2lkZQorICB0aHJlZS9hbm90aGVyCisgIHRocmVlL21hc3RlcgorICB0aHJlZS9zaWRlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tbXVsdGlwbGUgKGJ1dCBvbmx5IG9uZSByZW1vdGUpJyAnCisJKGdpdCBjbG9uZSBvbmUgdGVzdDMgJiYKKwkgY2QgdGVzdDMgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdGhyZWUgLi4vdGhyZWUgJiYKKwkgZ2l0IGZldGNoIC0tbXVsdGlwbGUgdGhyZWUgJiYKKwkgZ2l0IGJyYW5jaCAtciA+IG91dHB1dCAmJgorCSB0ZXN0X2NtcCAuLi9leHBlY3Qgb3V0cHV0KQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCisgIG9uZS9tYXN0ZXIKKyAgb25lL3NpZGUKKyAgdHdvL2Fub3RoZXIKKyAgdHdvL21hc3RlcgorICB0d28vc2lkZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLW11bHRpcGxlICh0d28gcmVtb3RlcyknICcKKwkoZ2l0IGNsb25lIG9uZSB0ZXN0NCAmJgorCSBjZCB0ZXN0NCAmJgorCSBnaXQgcmVtb3RlIHJtIG9yaWdpbiAmJgorCSBnaXQgcmVtb3RlIGFkZCBvbmUgLi4vb25lICYmCisJIGdpdCByZW1vdGUgYWRkIHR3byAuLi90d28gJiYKKwkgZ2l0IGZldGNoIC0tbXVsdGlwbGUgb25lIHR3byAmJgorCSBnaXQgYnJhbmNoIC1yID4gb3V0cHV0ICYmCisJIHRlc3RfY21wIC4uL2V4cGVjdCBvdXRwdXQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLW11bHRpcGxlIChiYWQgcmVtb3RlIG5hbWVzKScgJworCShjZCB0ZXN0NCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggLS1tdWx0aXBsZSBmb3VyKQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCAoc2tpcEZldGNoQWxsKScgJworCShjZCB0ZXN0NCAmJgorCSBmb3IgYiBpbiAkKGdpdCBicmFuY2ggLXIpCisJIGRvCisJCWdpdCBicmFuY2ggLXIgLWQgJGIgfHwgZXhpdCAxCisJIGRvbmUgJiYKKwkgZ2l0IHJlbW90ZSBhZGQgdGhyZWUgLi4vdGhyZWUgJiYKKwkgZ2l0IGNvbmZpZyByZW1vdGUudGhyZWUuc2tpcEZldGNoQWxsIHRydWUgJiYKKwkgZ2l0IGZldGNoIC0tYWxsICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgLi4vZXhwZWN0IG91dHB1dCkKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorICBvbmUvbWFzdGVyCisgIG9uZS9zaWRlCisgIHRocmVlL2Fub3RoZXIKKyAgdGhyZWUvbWFzdGVyCisgIHRocmVlL3NpZGUKKyAgdHdvL2Fub3RoZXIKKyAgdHdvL21hc3RlcgorICB0d28vc2lkZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLW11bHRpcGxlIChpZ25vcmluZyBza2lwRmV0Y2hBbGwpJyAnCisJKGNkIHRlc3Q0ICYmCisJIGZvciBiIGluICQoZ2l0IGJyYW5jaCAtcikKKwkgZG8KKwkJZ2l0IGJyYW5jaCAtciAtZCAkYiB8fCBleGl0IDEKKwkgZG9uZSAmJgorCSBnaXQgZmV0Y2ggLS1tdWx0aXBsZSBvbmUgdHdvIHRocmVlICYmCisJIGdpdCBicmFuY2ggLXIgPiBvdXRwdXQgJiYKKwkgdGVzdF9jbXAgLi4vZXhwZWN0IG91dHB1dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGZldGNoIC0tYWxsIC0tbm8tdGFncycgJworCT5leHBlY3QgJiYKKwlnaXQgY2xvbmUgb25lIHRlc3Q1ICYmCisJZ2l0IGNsb25lIHRlc3Q1IHRlc3Q2ICYmCisJKGNkIHRlc3Q1ICYmIGdpdCB0YWcgdGVzdC10YWcpICYmCisJKAorCQljZCB0ZXN0NiAmJgorCQlnaXQgZmV0Y2ggLS1hbGwgLS1uby10YWdzICYmCisJCWdpdCB0YWcgPm91dHB1dAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgdGVzdDYvb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBmZXRjaCAtLWFsbCAtLXRhZ3MnICcKKwllY2hvIHRlc3QtdGFnID5leHBlY3QgJiYKKwlnaXQgY2xvbmUgb25lIHRlc3Q3ICYmCisJZ2l0IGNsb25lIHRlc3Q3IHRlc3Q4ICYmCisJKAorCQljZCB0ZXN0NyAmJgorCQl0ZXN0X2NvbW1pdCB0ZXN0LXRhZyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJKSAmJgorCSgKKwkJY2QgdGVzdDggJiYKKwkJZ2l0IGZldGNoIC0tYWxsIC0tdGFncyAmJgorCQlnaXQgdGFnID5vdXRwdXQKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IHRlc3Q4L291dHB1dAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTUtZmV0Y2gtbWVyZ2UtbG9naWMuc2ggYi90L3Q1NTE1LWZldGNoLW1lcmdlLWxvZ2ljLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRiYjkyN2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1LWZldGNoLW1lcmdlLWxvZ2ljLnNoCkBAIC0wLDAgKzEsMTc1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IFNhbnRpIELDqWphciwgYmFzZWQgb24gdDQwMTMgYnkgSnVuaW8gQyBIYW1hbm8KKyMKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nTWVyZ2UgbG9naWMgaW4gZmV0Y2gnCisKKy4gLi90ZXN0LWxpYi5zaAorCitMRj0nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCUdJVF9BVVRIT1JfREFURT0iMjAwNi0wNi0yNiAwMDowMDowMCArMDAwMCIgJiYKKwlHSVRfQ09NTUlUVEVSX0RBVEU9IjIwMDYtMDYtMjYgMDA6MDA6MDAgKzAwMDAiICYmCisJZXhwb3J0IEdJVF9BVVRIT1JfREFURSBHSVRfQ09NTUlUVEVSX0RBVEUgJiYKKworCWVjaG8gPmZpbGUgb3JpZ2luYWwgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIE9uZSAmJgorCWdpdCB0YWcgdGFnLW9uZSAmJgorCWdpdCB0YWcgdGFnLW9uZS10cmVlIEhFQURee3RyZWV9ICYmCisJZ2l0IGJyYW5jaCBvbmUgJiYKKworCWVjaG8gdHdvID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIFR3byAmJgorCWdpdCB0YWcgLWEgLW0gIlRhZyBUd28iIHRhZy10d28gJiYKKwlnaXQgYnJhbmNoIHR3byAmJgorCisJZWNobyB0aHJlZSA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBUaHJlZSAmJgorCWdpdCB0YWcgLWEgLW0gIlRhZyBUaHJlZSIgdGFnLXRocmVlICYmCisJZ2l0IHRhZyAtYSAtbSAiVGFnIFRocmVlIGZpbGUiIHRhZy10aHJlZS1maWxlIEhFQURee3RyZWV9OmZpbGUgJiYKKwlnaXQgYnJhbmNoIHRocmVlICYmCisKKwllY2hvIG1hc3RlciA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBNYXN0ZXIgJiYKKwlnaXQgdGFnIC1hIC1tICJUYWcgTWFzdGVyIiB0YWctbWFzdGVyICYmCisKKwlnaXQgY2hlY2tvdXQgdGhyZWUgJiYKKworCWdpdCBjbG9uZSAuIGNsb25lZCAmJgorCWNkIGNsb25lZCAmJgorCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgLi4vLmdpdC8gJiYKKworCWdpdCBjb25maWcgcmVtb3RlLmNvbmZpZy1leHBsaWNpdC51cmwgLi4vLmdpdC8gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5jb25maWctZXhwbGljaXQuZmV0Y2ggcmVmcy9oZWFkcy9tYXN0ZXI6cmVtb3Rlcy9yZW0vbWFzdGVyICYmCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUuY29uZmlnLWV4cGxpY2l0LmZldGNoIHJlZnMvaGVhZHMvb25lOnJlbW90ZXMvcmVtL29uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLmNvbmZpZy1leHBsaWNpdC5mZXRjaCB0d286cmVtb3Rlcy9yZW0vdHdvICYmCisJZ2l0IGNvbmZpZyAtLWFkZCByZW1vdGUuY29uZmlnLWV4cGxpY2l0LmZldGNoIHJlZnMvaGVhZHMvdGhyZWU6cmVtb3Rlcy9yZW0vdGhyZWUgJiYKKwlyZW1vdGVzPSJjb25maWctZXhwbGljaXQiICYmCisKKwlnaXQgY29uZmlnIHJlbW90ZS5jb25maWctZ2xvYi51cmwgLi4vLmdpdC8gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5jb25maWctZ2xvYi5mZXRjaCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3JlbS8qICYmCisJcmVtb3Rlcz0iJHJlbW90ZXMgY29uZmlnLWdsb2IiICYmCisKKwlta2RpciAtcCAuZ2l0L3JlbW90ZXMgJiYKKwl7CisJCWVjaG8gIlVSTDogLi4vLmdpdC8iCisJCWVjaG8gIlB1bGw6IHJlZnMvaGVhZHMvbWFzdGVyOnJlbW90ZXMvcmVtL21hc3RlciIKKwkJZWNobyAiUHVsbDogcmVmcy9oZWFkcy9vbmU6cmVtb3Rlcy9yZW0vb25lIgorCQllY2hvICJQdWxsOiB0d286cmVtb3Rlcy9yZW0vdHdvIgorCQllY2hvICJQdWxsOiByZWZzL2hlYWRzL3RocmVlOnJlbW90ZXMvcmVtL3RocmVlIgorCX0gPi5naXQvcmVtb3Rlcy9yZW1vdGUtZXhwbGljaXQgJiYKKwlyZW1vdGVzPSIkcmVtb3RlcyByZW1vdGUtZXhwbGljaXQiICYmCisKKwl7CisJCWVjaG8gIlVSTDogLi4vLmdpdC8iCisJCWVjaG8gIlB1bGw6IHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvcmVtLyoiCisJfSA+LmdpdC9yZW1vdGVzL3JlbW90ZS1nbG9iICYmCisJcmVtb3Rlcz0iJHJlbW90ZXMgcmVtb3RlLWdsb2IiICYmCisKKwlta2RpciAtcCAuZ2l0L2JyYW5jaGVzICYmCisJZWNobyAiLi4vLmdpdCIgPiAuZ2l0L2JyYW5jaGVzL2JyYW5jaGVzLWRlZmF1bHQgJiYKKwlyZW1vdGVzPSIkcmVtb3RlcyBicmFuY2hlcy1kZWZhdWx0IiAmJgorCisJZWNobyAiLi4vLmdpdCNvbmUiID4gLmdpdC9icmFuY2hlcy9icmFuY2hlcy1vbmUgJiYKKwlyZW1vdGVzPSIkcmVtb3RlcyBicmFuY2hlcy1vbmUiICYmCisKKwlmb3IgcmVtb3RlIGluICRyZW1vdGVzIDsgZG8KKwkJZ2l0IGNvbmZpZyBicmFuY2guYnItJHJlbW90ZS5yZW1vdGUgJHJlbW90ZSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5ici0kcmVtb3RlLW1lcmdlLnJlbW90ZSAkcmVtb3RlICYmCisJCWdpdCBjb25maWcgYnJhbmNoLmJyLSRyZW1vdGUtbWVyZ2UubWVyZ2UgcmVmcy9oZWFkcy90aHJlZSAmJgorCQlnaXQgY29uZmlnIGJyYW5jaC5ici0kcmVtb3RlLW9jdG9wdXMucmVtb3RlICRyZW1vdGUgJiYKKwkJZ2l0IGNvbmZpZyBicmFuY2guYnItJHJlbW90ZS1vY3RvcHVzLm1lcmdlIHJlZnMvaGVhZHMvb25lICYmCisJCWdpdCBjb25maWcgLS1hZGQgYnJhbmNoLmJyLSRyZW1vdGUtb2N0b3B1cy5tZXJnZSB0d28KKwlkb25lCisnCisKKyMgTWVyZ2UgbG9naWMgZGVwZW5kcyBvbiBicmFuY2ggcHJvcGVydGllcyBhbmQgUHVsbDogb3IgLmZldGNoIGxpbmVzCitmb3IgcmVtb3RlIGluICRyZW1vdGVzIDsgZG8KKyAgICBmb3IgYnJhbmNoIGluICIiICItbWVyZ2UiICItb2N0b3B1cyIgOyBkbworY2F0IDw8RU9GCitici0kcmVtb3RlJGJyYW5jaAorYnItJHJlbW90ZSRicmFuY2ggJHJlbW90ZQorRU9GCisgICAgZG9uZQorZG9uZSA+IHRlc3RzCisKKyMgTWVyZ2UgbG9naWMgZG9lcyBub3QgZGVwZW5kIG9uIGJyYW5jaCBwcm9wZXJ0aWVzLAorIyBidXQgZG9lcyBkZXBlbmQgb24gUHVsbDogb3IgZmV0Y2ggbGluZXMuCisjIFVzZSB0d28gYnJhbmNoZXMgY29tcGxldGVseSB1bnJlbGF0ZWQgZnJvbSB0aGUgYXJndW1lbnRzLAorIyB0aGUgY2xvbmUgZGVmYXVsdCBhbmQgb25lIHdpdGhvdXQgYnJhbmNoIHByb3BlcnRpZXMKK2ZvciBicmFuY2ggaW4gbWFzdGVyIGJyLXVuY29uZmlnIDsgZG8KKyAgICBlY2hvICRicmFuY2gKKyAgICBmb3IgcmVtb3RlIGluICRyZW1vdGVzIDsgZG8KKwllY2hvICRicmFuY2ggJHJlbW90ZQorICAgIGRvbmUKK2RvbmUgPj4gdGVzdHMKKworIyBNZXJnZSBsb2dpYyBkb2VzIG5vdCBkZXBlbmQgb24gYnJhbmNoIHByb3BlcnRpZXMKKyMgbmVpdGhlciBpbiB0aGUgUHVsbDogb3IgLmZldGNoIGNvbmZpZworZm9yIGJyYW5jaCBpbiBtYXN0ZXIgYnItdW5jb25maWcgOyBkbworICAgIGNhdCA8PEVPRgorJGJyYW5jaCAuLi8uZ2l0CiskYnJhbmNoIC4uLy5naXQgb25lCiskYnJhbmNoIC4uLy5naXQgb25lIHR3bworJGJyYW5jaCAtLXRhZ3MgLi4vLmdpdAorJGJyYW5jaCAuLi8uZ2l0IHRhZyB0YWctb25lIHRhZyB0YWctdGhyZWUKKyRicmFuY2ggLi4vLmdpdCB0YWcgdGFnLW9uZS10cmVlIHRhZyB0YWctdGhyZWUtZmlsZQorJGJyYW5jaCAuLi8uZ2l0IG9uZSB0YWcgdGFnLW9uZSB0YWcgdGFnLXRocmVlLWZpbGUKK0VPRgorZG9uZSA+PiB0ZXN0cworCit3aGlsZSByZWFkIGNtZAorZG8KKwljYXNlICIkY21kIiBpbgorCScnIHwgJyMnKikgY29udGludWUgOzsKKwllc2FjCisJdGVzdD1gZWNobyAiJGNtZCIgfCBzZWQgLWUgJ3N8Wy8gXVsvIF0qfF98ZydgCisJcGZ4PWBwcmludGYgIiUwNGQiICR0ZXN0X2NvdW50YAorCWV4cGVjdF9mPSIkVEVTVF9ESVJFQ1RPUlkvdDU1MTUvZmV0Y2guJHRlc3QiCisJYWN0dWFsX2Y9IiRwZngtZmV0Y2guJHRlc3QiCisJZXhwZWN0X3I9IiRURVNUX0RJUkVDVE9SWS90NTUxNS9yZWZzLiR0ZXN0IgorCWFjdHVhbF9yPSIkcGZ4LXJlZnMuJHRlc3QiCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkY21kIiAnCisJCXsKKwkJCWVjaG8gIiMgJGNtZCIKKwkJCXNldCB4ICRjbWQ7IHNoaWZ0CisJCQlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy8kMSA7IHNoaWZ0CisJCQlybSAtZiAuZ2l0L0ZFVENIX0hFQUQKKwkJCWdpdCBmb3ItZWFjaC1yZWYgXAorCQkJCXJlZnMvaGVhZHMgcmVmcy9yZW1vdGVzL3JlbSByZWZzL3RhZ3MgfAorCQkJd2hpbGUgcmVhZCB2YWwgdHlwZSByZWZuYW1lCisJCQlkbworCQkJCWdpdCB1cGRhdGUtcmVmIC1kICIkcmVmbmFtZSIgIiR2YWwiCisJCQlkb25lCisJCQlnaXQgZmV0Y2ggIiRAIiA+L2Rldi9udWxsCisJCQljYXQgLmdpdC9GRVRDSF9IRUFECisJCX0gPiIkYWN0dWFsX2YiICYmCisJCWdpdCBzaG93LXJlZiA+IiRhY3R1YWxfciIgJiYKKwkJaWYgdGVzdCAtZiAiJGV4cGVjdF9mIgorCQl0aGVuCisJCQl0ZXN0X2NtcCAiJGV4cGVjdF9mIiAiJGFjdHVhbF9mIiAmJgorCQkJcm0gLWYgIiRhY3R1YWxfZiIKKwkJZWxzZQorCQkJIyB0aGlzIGlzIHRvIGhlbHAgZGV2ZWxvcGluZyBuZXcgdGVzdHMuCisJCQljcCAiJGFjdHVhbF9mIiAiJGV4cGVjdF9mIgorCQkJZmFsc2UKKwkJZmkgJiYKKwkJaWYgdGVzdCAtZiAiJGV4cGVjdF9yIgorCQl0aGVuCisJCQl0ZXN0X2NtcCAiJGV4cGVjdF9yIiAiJGFjdHVhbF9yIiAmJgorCQkJcm0gLWYgIiRhY3R1YWxfciIKKwkJZWxzZQorCQkJIyB0aGlzIGlzIHRvIGhlbHAgZGV2ZWxvcGluZyBuZXcgdGVzdHMuCisJCQljcCAiJGFjdHVhbF9yIiAiJGV4cGVjdF9yIgorCQkJZmFsc2UKKwkJZmkKKwknCitkb25lIDwgdGVzdHMKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiYzNkNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDggQEAKKyMgYnItYnJhbmNoZXMtZGVmYXVsdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhYjA4ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZQpAQCAtMCwwICsxLDkgQEAKKyMgYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2VfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZV9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NDI3NTIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2VfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDkgQEAKKyMgYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZSBicmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4YTc2MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTAgQEAKKyMgYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1c19icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODU3ZjEzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDEwIEBACisjIGJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1cyBicmFuY2hlcy1kZWZhdWx0Cis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CQlicmFuY2ggJ3R3bycgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHRfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtZGVmYXVsdF9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYmQ3MTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLWRlZmF1bHRfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDggQEAKKyMgYnItYnJhbmNoZXMtZGVmYXVsdCBicmFuY2hlcy1kZWZhdWx0Cis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk4ZjY3MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsOCBAQAorIyBici1icmFuY2hlcy1vbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtbWVyZ2UgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1tZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGE3NzQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtbWVyZ2UKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLW9uZS1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1tZXJnZV9icmFuY2hlcy1vbmUgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1tZXJnZV9icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkMWJiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lLW1lcmdlX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDkgQEAKKyMgYnItYnJhbmNoZXMtb25lLW1lcmdlIGJyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2M0YjU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1cwpAQCAtMCwwICsxLDkgQEAKKyMgYnItYnJhbmNoZXMtb25lLW9jdG9wdXMKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjcwNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUKQEAgLTAsMCArMSw5IEBACisjIGJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzIGJyYW5jaGVzLW9uZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZV9icmFuY2hlcy1vbmUgYi90L3Q1NTE1L2ZldGNoLmJyLWJyYW5jaGVzLW9uZV9icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY4OTBlNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItYnJhbmNoZXMtb25lX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDggQEAKKyMgYnItYnJhbmNoZXMtb25lIGJyYW5jaGVzLW9uZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZmM5MjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlNzY0YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtbWVyZ2VfY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtbWVyZ2VfY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMTUyYjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZV9jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZXhwbGljaXQtbWVyZ2UgY29uZmlnLWV4cGxpY2l0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtb2N0b3B1cyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEwNTc3YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXMKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZXhwbGljaXQtb2N0b3B1cworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtb2N0b3B1c19jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjlkZDhiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXQtb2N0b3B1c19jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZXhwbGljaXQtb2N0b3B1cyBjb25maWctZXhwbGljaXQKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0X2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWV4cGxpY2l0X2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTliMDE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZXhwbGljaXRfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWV4cGxpY2l0IGNvbmZpZy1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NmQ3MGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWdsb2IKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1tZXJnZSBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2ItbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmMjU5NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2ItbWVyZ2UKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZ2xvYi1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2ItbWVyZ2VfY29uZmlnLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYTQ4MzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWdsb2ItbWVyZ2UgY29uZmlnLWdsb2IKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXMgYi90L3Q1NTE1L2ZldGNoLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ5OTRkZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2Itb2N0b3B1cwpAQCAtMCwwICsxLDExIEBACisjIGJyLWNvbmZpZy1nbG9iLW9jdG9wdXMKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYiBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODFhNzI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYi1vY3RvcHVzX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItY29uZmlnLWdsb2Itb2N0b3B1cyBjb25maWctZ2xvYgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1jb25maWctZ2xvYl9jb25maWctZ2xvYiBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2JfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkYWYwYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItY29uZmlnLWdsb2JfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxMSBAQAorIyBici1jb25maWctZ2xvYiBjb25maWctZ2xvYgorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDRiYzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdApAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxOGIzNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2VfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtbWVyZ2VfcmVtb3RlLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkM2Q3ODAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZV9yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZXhwbGljaXQtbWVyZ2UgcmVtb3RlLWV4cGxpY2l0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY4NDMwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXMKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1c19yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTQ2YTgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1c19yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cyByZW1vdGUtZXhwbGljaXQKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0X3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWV4cGxpY2l0X3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWUwMTRlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZXhwbGljaXRfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWV4cGxpY2l0IHJlbW90ZS1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YmZjZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWdsb2IKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1tZXJnZSBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2ItbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UxYTQzMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2ItbWVyZ2UKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZ2xvYi1tZXJnZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJYnJhbmNoICd0aHJlZScgb2YgLi4vCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2ItbWVyZ2VfcmVtb3RlLWdsb2IgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNTcxYmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWdsb2ItbWVyZ2UgcmVtb3RlLWdsb2IKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXMgYi90L3Q1NTE1L2ZldGNoLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjOGI2ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2Itb2N0b3B1cwpAQCAtMCwwICsxLDExIEBACisjIGJyLXJlbW90ZS1nbG9iLW9jdG9wdXMKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJbm90LWZvci1tZXJnZQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjA3NmZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItcmVtb3RlLWdsb2Itb2N0b3B1cyByZW1vdGUtZ2xvYgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAkJYnJhbmNoICd0d28nIG9mIC4uLworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici1yZW1vdGUtZ2xvYl9yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2JfcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBiYTVjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItcmVtb3RlLWdsb2JfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxMSBAQAorIyBici1yZW1vdGUtZ2xvYiByZW1vdGUtZ2xvYgorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODdjY2ZjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZwpAQCAtMCwwICsxLDExIEBACisjIGJyLXVuY29uZmlnCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLS10YWdzXy4uXy5naXQgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNzBmNjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0CkBAIC0wLDAgKzEsOCBAQAorIyBici11bmNvbmZpZyAtLXRhZ3MgLi4vLmdpdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YgkJLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdCBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODRiYjFmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0CkBAIC0wLDAgKzEsMiBAQAorIyBici11bmNvbmZpZyAuLi8uZ2l0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQkuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmUgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZWI1YTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lCkBAIC0wLDAgKzEsMiBAQAorIyBici11bmNvbmZpZyAuLi8uZ2l0IG9uZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDExNTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKQEAgLTAsMCArMSw4IEBACisjIGJyLXVuY29uZmlnIC4uLy5naXQgb25lIHRhZyB0YWctb25lIHRhZyB0YWctdGhyZWUtZmlsZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJYnJhbmNoICdvbmUnIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJdGFnICd0YWctb25lJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdHdvIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90d28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxYmUyMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdHdvCkBAIC0wLDAgKzEsMyBAQAorIyBici11bmNvbmZpZyAuLi8uZ2l0IG9uZSB0d28KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZSBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzI2OTgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsNyBAQAorIyBici11bmNvbmZpZyAuLi8uZ2l0IHRhZyB0YWctb25lLXRyZWUgdGFnIHRhZy10aHJlZS1maWxlCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IzNzUwYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlCkBAIC0wLDAgKzEsNyBAQAorIyBici11bmNvbmZpZyAuLi8uZ2l0IHRhZyB0YWctb25lIHRhZyB0YWctdGhyZWUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCXRhZyAndGFnLW9uZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTMwZTNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsOCBAQAorIyBici11bmNvbmZpZyBicmFuY2hlcy1kZWZhdWx0Cis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ2MTQzMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsOCBAQAorIyBici11bmNvbmZpZyBicmFuY2hlcy1vbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDMyM2M5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxMSBAQAorIyBici11bmNvbmZpZyBjb25maWctZXhwbGljaXQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYJCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2Yglub3QtZm9yLW1lcmdlCWJyYW5jaCAndGhyZWUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLmJyLXVuY29uZmlnX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzcyZWQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19jb25maWctZ2xvYgpAQCAtMCwwICsxLDExIEBACisjIGJyLXVuY29uZmlnIGNvbmZpZy1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMxOGRkMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgYnItdW5jb25maWcgcmVtb3RlLWV4cGxpY2l0Cis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdvbmUnIG9mIC4uLworNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOAlub3QtZm9yLW1lcmdlCWJyYW5jaCAndHdvJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5ici11bmNvbmZpZ19yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ5YWZhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2guYnItdW5jb25maWdfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxMSBAQAorIyBici11bmNvbmZpZyByZW1vdGUtZ2xvYgorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3RlciBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMjlkNjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3RlcgpAQCAtMCwwICsxLDExIEBACisjIG1hc3RlcgorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4Zglub3QtZm9yLW1lcmdlCWJyYW5jaCAnbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQlicmFuY2ggJ29uZScgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4CW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0d28nIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lJyBvZiAuLi8KKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUtdHJlZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8tLXRhZ3NfLi5fLmdpdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy0tdGFnc18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDczYTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8tLXRhZ3NfLi5fLmdpdApAQCAtMCwwICsxLDggQEAKKyMgbWFzdGVyIC0tdGFncyAuLi8uZ2l0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQkuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZkMWFhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXQKQEAgLTAsMCArMSwyIEBACisjIG1hc3RlciAuLi8uZ2l0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCQkuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkZWRkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lCkBAIC0wLDAgKzEsMiBAQAorIyBtYXN0ZXIgLi4vLmdpdCBvbmUKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZSBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjcyZDEyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsOCBAQAorIyBtYXN0ZXIgLi4vLmdpdCBvbmUgdGFnIHRhZy1vbmUgdGFnIHRhZy10aHJlZS1maWxlCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5Ywlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlLWZpbGUnIG9mIC4uLworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW1hc3Rlcicgb2YgLi4vCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctb25lLXRyZWUnIG9mIC4uLworYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmVfdHdvIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfLi5fLmdpdF9vbmVfdHdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZWM1NzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X29uZV90d28KQEAgLTAsMCArMSwzIEBACisjIG1hc3RlciAuLi8uZ2l0IG9uZSB0d28KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJCWJyYW5jaCAndHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDczN2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsNyBAQAorIyBtYXN0ZXIgLi4vLmdpdCB0YWcgdGFnLW9uZS10cmVlIHRhZyB0YWctdGhyZWUtZmlsZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZScgb2YgLi4vCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUnIG9mIC4uLworNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLXR3bycgb2YgLi4vCmRpZmYgLS1naXQgYS90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUgYi90L3Q1NTE1L2ZldGNoLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4ODk4NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZQpAQCAtMCwwICsxLDcgQEAKKyMgbWFzdGVyIC4uLy5naXQgdGFnIHRhZy1vbmUgdGFnIHRhZy10aHJlZQorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQkJdGFnICd0YWctb25lJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJCXRhZyAndGFnLXRocmVlJyBvZiAuLi8KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1tYXN0ZXInIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZS1maWxlJyBvZiAuLi8KKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10d28nIG9mIC4uLwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9mZXRjaC5tYXN0ZXJfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVlZGQzYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSw4IEBACisjIG1hc3RlciBicmFuY2hlcy1kZWZhdWx0Cis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCQlicmFuY2ggJ21hc3Rlcicgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDFjZTIxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsOCBAQAorIyBtYXN0ZXIgYnJhbmNoZXMtb25lCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5CQlicmFuY2ggJ29uZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTFjODI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIGNvbmZpZy1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjMTU4ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX2NvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIGNvbmZpZy1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2NmZTZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIHJlbW90ZS1leHBsaWNpdAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZgkJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICd0aHJlZScgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9mZXRjaC5tYXN0ZXJfcmVtb3RlLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE4YmVmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvZmV0Y2gubWFzdGVyX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTEgQEAKKyMgbWFzdGVyIHJlbW90ZS1nbG9iCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmCW5vdC1mb3ItbWVyZ2UJYnJhbmNoICdtYXN0ZXInIG9mIC4uLworOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OQlub3QtZm9yLW1lcmdlCWJyYW5jaCAnb25lJyBvZiAuLi8KKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIJbm90LWZvci1tZXJnZQlicmFuY2ggJ3RocmVlJyBvZiAuLi8KKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTgJbm90LWZvci1tZXJnZQlicmFuY2ggJ3R3bycgb2YgLi4vCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1CW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctbWFzdGVyJyBvZiAuLi8KKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy1vbmUnIG9mIC4uLworMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYQlub3QtZm9yLW1lcmdlCXRhZyAndGFnLW9uZS10cmVlJyBvZiAuLi8KK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkJbm90LWZvci1tZXJnZQl0YWcgJ3RhZy10aHJlZScgb2YgLi4vCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdGhyZWUtZmlsZScgb2YgLi4vCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhCW5vdC1mb3ItbWVyZ2UJdGFnICd0YWctdHdvJyBvZiAuLi8KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MTdjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE5MTdjMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlCkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW1lcmdlX2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZV9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1tZXJnZV9icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXMgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0LW9jdG9wdXNfYnJhbmNoZXMtZGVmYXVsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTkxN2MxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLWRlZmF1bHQtb2N0b3B1c19icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1kZWZhdWx0X2JyYW5jaGVzLWRlZmF1bHQgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdF9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtZGVmYXVsdF9icmFuY2hlcy1kZWZhdWx0CkBAIC0wLDAgKzEsMTIgQEAKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9oZWFkcy9icmFuY2hlcy1kZWZhdWx0CiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lCkBAIC0wLDAgKzEsMTIgQEAKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9oZWFkcy9icmFuY2hlcy1vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZS1tZXJnZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MDVhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtbWVyZ2UKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW1lcmdlX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtbWVyZ2VfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lLW1lcmdlX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDEyIEBACis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvaGVhZHMvYnJhbmNoZXMtb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1cyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzCkBAIC0wLDAgKzEsMTIgQEAKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9oZWFkcy9icmFuY2hlcy1vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWJyYW5jaGVzLW9uZS1vY3RvcHVzX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE3MDVhNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmUtb2N0b3B1c19icmFuY2hlcy1vbmUKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lX2JyYW5jaGVzLW9uZSBiL3QvdDU1MTUvcmVmcy5ici1icmFuY2hlcy1vbmVfYnJhbmNoZXMtb25lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA1YTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItYnJhbmNoZXMtb25lX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDEyIEBACis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvaGVhZHMvYnJhbmNoZXMtb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZV9jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0LW1lcmdlX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1tZXJnZV9jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtb2N0b3B1cyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZXhwbGljaXQtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0LW9jdG9wdXNfY29uZmlnLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzX2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdC1vY3RvcHVzX2NvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdF9jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWV4cGxpY2l0X2NvbmZpZy1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1leHBsaWNpdF9jb25maWctZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2ItbWVyZ2UgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2ItbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW1lcmdlX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2ItbWVyZ2VfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1vY3RvcHVzIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1jb25maWctZ2xvYi1vY3RvcHVzX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2Itb2N0b3B1c19jb25maWctZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iX2NvbmZpZy1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLWNvbmZpZy1nbG9iX2NvbmZpZy1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItY29uZmlnLWdsb2JfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZV9yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0LW1lcmdlX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1tZXJnZV9yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZXhwbGljaXQtb2N0b3B1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0LW9jdG9wdXNfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzX3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdC1vY3RvcHVzX3JlbW90ZS1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdF9yZW1vdGUtZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWV4cGxpY2l0X3JlbW90ZS1leHBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1leHBsaWNpdF9yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2ItbWVyZ2UgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2ItbWVyZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1tZXJnZQpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW1lcmdlX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2ItbWVyZ2VfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iLW9jdG9wdXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici1yZW1vdGUtZ2xvYi1vY3RvcHVzX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2Itb2N0b3B1c19yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9yZWZzLmJyLXJlbW90ZS1nbG9iX3JlbW90ZS1nbG9iCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItcmVtb3RlLWdsb2JfcmVtb3RlLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U0YWQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0IGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy0tdGFnc18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLS10YWdzXy4uXy5naXQKQEAgLTAsMCArMSwxMSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdCBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOTYyZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdApAQCAtMCwwICsxLDUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZSBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lCkBAIC0wLDAgKzEsNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3RhZ190YWctb25lX3RhZ190YWctdGhyZWUtZmlsZSBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKQEAgLTAsMCArMSwxMSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfLi5fLmdpdF9vbmVfdHdvIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3R3bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfb25lX3R3bwpAQCAtMCwwICsxLDUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lLXRyZWVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnXy4uXy5naXRfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZSBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ18uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKQEAgLTAsMCArMSwxMSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdCBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfYnJhbmNoZXMtZGVmYXVsdApAQCAtMCwwICsxLDEyIEBACis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvaGVhZHMvYnJhbmNoZXMtZGVmYXVsdAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfYnJhbmNoZXMtb25lIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX2JyYW5jaGVzLW9uZQpAQCAtMCwwICsxLDEyIEBACis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvaGVhZHMvYnJhbmNoZXMtb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19jb25maWctZXhwbGljaXQgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWdsb2IgYi90L3Q1NTE1L3JlZnMuYnItdW5jb25maWdfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19jb25maWctZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX3JlbW90ZS1leHBsaWNpdCBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZXhwbGljaXQKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZ2xvYiBiL3QvdDU1MTUvcmVmcy5ici11bmNvbmZpZ19yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLmJyLXVuY29uZmlnX3JlbW90ZS1nbG9iCkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyIGIvdC90NTUxNS9yZWZzLm1hc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2U0YWQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3RlcgpAQCAtMCwwICsxLDExIEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLS10YWdzXy4uXy5naXQgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy0tdGFnc18uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZTRhZDIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy0tdGFnc18uLl8uZ2l0CkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0IGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOTYyZWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXQKQEAgLTAsMCArMSw1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfb25lIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZQpAQCAtMCwwICsxLDUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZV90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF9vbmVfdGFnX3RhZy1vbmVfdGFnX3RhZy10aHJlZS1maWxlCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZV90d28gYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfb25lX3R3bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk2MmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X29uZV90d28KQEAgLTAsMCArMSw1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUgYi90L3Q1NTE1L3JlZnMubWFzdGVyXy4uXy5naXRfdGFnX3RhZy1vbmUtdHJlZV90YWdfdGFnLXRocmVlLWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZS10cmVlX3RhZ190YWctdGhyZWUtZmlsZQpAQCAtMCwwICsxLDExIEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl8uLl8uZ2l0X3RhZ190YWctb25lX3RhZ190YWctdGhyZWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNlNGFkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfLi5fLmdpdF90YWdfdGFnLW9uZV90YWdfdGFnLXRocmVlCkBAIC0wLDAgKzEsMTEgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1kZWZhdWx0IGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTE3YzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2JyYW5jaGVzLWRlZmF1bHQKQEAgLTAsMCArMSwxMiBAQAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL2hlYWRzL2JyYW5jaGVzLWRlZmF1bHQKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1vbmUgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2JyYW5jaGVzLW9uZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTcwNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9icmFuY2hlcy1vbmUKQEAgLTAsMCArMSwxMiBAQAorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL2hlYWRzL2JyYW5jaGVzLW9uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyX2NvbmZpZy1leHBsaWNpdCBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfY29uZmlnLWV4cGxpY2l0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE1L3JlZnMubWFzdGVyX2NvbmZpZy1leHBsaWNpdApAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNS9yZWZzLm1hc3Rlcl9jb25maWctZ2xvYiBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfY29uZmlnLWdsb2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfY29uZmlnLWdsb2IKQEAgLTAsMCArMSwxNSBAQAorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQKKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL29yaWdpbi9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvb3JpZ2luL3R3bworNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvcmVtL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvcmVtL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvcmVtL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9yZW0vdHdvCis2YzlkZWMyYjkyMzIyOGM5ZmY5OTRjNmNmZTRhZTE2YzEyNDA4ZGM1IHJlZnMvdGFncy90YWctbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvdGFncy90YWctb25lCisyMmZlZWE0NDhiMDIzYTJkODY0ZWY5NGIwMTM3MzVhZjM0ZDIzOGJhIHJlZnMvdGFncy90YWctb25lLXRyZWUKK2M2MWE4MmI2MDk2NzE4MDU0NGUzYzE5ZjgxOWRkYmQwYzlmODk4OTkgcmVmcy90YWdzL3RhZy10aHJlZQorMGUzYjE0MDQ3ZDNlZTM2NWY0ZjJhMWI2NzNkYjA1OWMzOTcyNTg5YyByZWZzL3RhZ3MvdGFnLXRocmVlLWZpbGUKKzUyNWI3ZmIwNjhkNTk5NTBkMTg1YTg3NzlkYzk1N2M3N2VlZDczYmEgcmVmcy90YWdzL3RhZy10d28KZGlmZiAtLWdpdCBhL3QvdDU1MTUvcmVmcy5tYXN0ZXJfcmVtb3RlLWV4cGxpY2l0IGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9yZW1vdGUtZXhwbGljaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiYmZkOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTUvcmVmcy5tYXN0ZXJfcmVtb3RlLWV4cGxpY2l0CkBAIC0wLDAgKzEsMTUgQEAKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFECis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL29yaWdpbi90d28KKzc1NGI3NTQ0MDdiZjAzMmU5YTJmOWQ1YTlhZDA1Y2E3OWE2YjIyOGYgcmVmcy9yZW1vdGVzL3JlbS9tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy9yZW1vdGVzL3JlbS9vbmUKKzA1NjdkYTRkNWVkZDJmZjRiYjI5MmE0NjViYTllNjRkY2FkOTUzNmIgcmVmcy9yZW1vdGVzL3JlbS90aHJlZQorNjEzNGVlOGY4NTc2OTNiOTZmZjFjYzk4ZDNlMmZkNjJiMTk5ZTVhOCByZWZzL3JlbW90ZXMvcmVtL3R3bworNmM5ZGVjMmI5MjMyMjhjOWZmOTk0YzZjZmU0YWUxNmMxMjQwOGRjNSByZWZzL3RhZ3MvdGFnLW1hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3RhZ3MvdGFnLW9uZQorMjJmZWVhNDQ4YjAyM2EyZDg2NGVmOTRiMDEzNzM1YWYzNGQyMzhiYSByZWZzL3RhZ3MvdGFnLW9uZS10cmVlCitjNjFhODJiNjA5NjcxODA1NDRlM2MxOWY4MTlkZGJkMGM5Zjg5ODk5IHJlZnMvdGFncy90YWctdGhyZWUKKzBlM2IxNDA0N2QzZWUzNjVmNGYyYTFiNjczZGIwNTljMzk3MjU4OWMgcmVmcy90YWdzL3RhZy10aHJlZS1maWxlCis1MjViN2ZiMDY4ZDU5OTUwZDE4NWE4Nzc5ZGM5NTdjNzdlZWQ3M2JhIHJlZnMvdGFncy90YWctdHdvCmRpZmYgLS1naXQgYS90L3Q1NTE1L3JlZnMubWFzdGVyX3JlbW90ZS1nbG9iIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9yZW1vdGUtZ2xvYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJiZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxNS9yZWZzLm1hc3Rlcl9yZW1vdGUtZ2xvYgpAQCAtMCwwICsxLDE1IEBACiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRAorNzU0Yjc1NDQwN2JmMDMyZTlhMmY5ZDVhOWFkMDVjYTc5YTZiMjI4ZiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorOGUzMmE2ZDkwMTMyN2EyM2VmODMxNTExYmFkY2U3YmYzYmY0NjY4OSByZWZzL3JlbW90ZXMvb3JpZ2luL29uZQorMDU2N2RhNGQ1ZWRkMmZmNGJiMjkyYTQ2NWJhOWU2NGRjYWQ5NTM2YiByZWZzL3JlbW90ZXMvb3JpZ2luL3RocmVlCis2MTM0ZWU4Zjg1NzY5M2I5NmZmMWNjOThkM2UyZmQ2MmIxOTllNWE4IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHdvCis3NTRiNzU0NDA3YmYwMzJlOWEyZjlkNWE5YWQwNWNhNzlhNmIyMjhmIHJlZnMvcmVtb3Rlcy9yZW0vbWFzdGVyCis4ZTMyYTZkOTAxMzI3YTIzZWY4MzE1MTFiYWRjZTdiZjNiZjQ2Njg5IHJlZnMvcmVtb3Rlcy9yZW0vb25lCiswNTY3ZGE0ZDVlZGQyZmY0YmIyOTJhNDY1YmE5ZTY0ZGNhZDk1MzZiIHJlZnMvcmVtb3Rlcy9yZW0vdGhyZWUKKzYxMzRlZThmODU3NjkzYjk2ZmYxY2M5OGQzZTJmZDYyYjE5OWU1YTggcmVmcy9yZW1vdGVzL3JlbS90d28KKzZjOWRlYzJiOTIzMjI4YzlmZjk5NGM2Y2ZlNGFlMTZjMTI0MDhkYzUgcmVmcy90YWdzL3RhZy1tYXN0ZXIKKzhlMzJhNmQ5MDEzMjdhMjNlZjgzMTUxMWJhZGNlN2JmM2JmNDY2ODkgcmVmcy90YWdzL3RhZy1vbmUKKzIyZmVlYTQ0OGIwMjNhMmQ4NjRlZjk0YjAxMzczNWFmMzRkMjM4YmEgcmVmcy90YWdzL3RhZy1vbmUtdHJlZQorYzYxYTgyYjYwOTY3MTgwNTQ0ZTNjMTlmODE5ZGRiZDBjOWY4OTg5OSByZWZzL3RhZ3MvdGFnLXRocmVlCiswZTNiMTQwNDdkM2VlMzY1ZjRmMmExYjY3M2RiMDU5YzM5NzI1ODljIHJlZnMvdGFncy90YWctdGhyZWUtZmlsZQorNTI1YjdmYjA2OGQ1OTk1MGQxODVhODc3OWRjOTU3Yzc3ZWVkNzNiYSByZWZzL3RhZ3MvdGFnLXR3bwpkaWZmIC0tZ2l0IGEvdC90NTUxNi1mZXRjaC1wdXNoLnNoIGIvdC90NTUxNi1mZXRjaC1wdXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVjMjJjOTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTE2LWZldGNoLXB1c2guc2gKQEAgLTAsMCArMSwxNjE1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQmFzaWMgZmV0Y2gvcHVzaCBmdW5jdGlvbmFsaXR5LgorCitUaGlzIHRlc3QgY2hlY2tzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25hbGl0eToKKworKiBjb21tYW5kLWxpbmUgc3ludGF4CisqIHJlZnNwZWNzCisqIGZhc3QtZm9yd2FyZCBkZXRlY3Rpb24sIGFuZCBvdmVycmlkaW5nIGl0CisqIGNvbmZpZ3VyYXRpb24KKyogaG9va3MKKyogLS1wb3JjZWxhaW4gb3V0cHV0IGZvcm1hdAorKiBoaWRlcmVmcworKiByZWZsb2dzCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCitEPWBwd2RgCisKK21rX2VtcHR5ICgpIHsKKwlyZXBvX25hbWU9IiQxIgorCXJtIC1mciAiJHJlcG9fbmFtZSIgJiYKKwlta2RpciAiJHJlcG9fbmFtZSIgJiYKKwkoCisJCWNkICIkcmVwb19uYW1lIiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggd2FybiAmJgorCQltdiAuZ2l0L2hvb2tzIC5naXQvaG9va3MtZGlzYWJsZWQKKwkpCit9CisKK21rX3Rlc3QgKCkgeworCXJlcG9fbmFtZT0iJDEiCisJc2hpZnQKKworCW1rX2VtcHR5ICIkcmVwb19uYW1lIiAmJgorCSgKKwkJZm9yIHJlZiBpbiAiJEAiCisJCWRvCisJCQlnaXQgcHVzaCAiJHJlcG9fbmFtZSIgJHRoZV9maXJzdF9jb21taXQ6cmVmcy8kcmVmIHx8CisJCQlleGl0CisJCWRvbmUgJiYKKwkJY2QgIiRyZXBvX25hbWUiICYmCisJCWZvciByZWYgaW4gIiRAIgorCQlkbworCQkJZWNobyAiJHRoZV9maXJzdF9jb21taXQiID5leHBlY3QgJiYKKwkJCWdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzLyRyZWYgPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCB8fAorCQkJZXhpdAorCQlkb25lICYmCisJCWdpdCBmc2NrIC0tZnVsbAorCSkKK30KKworbWtfdGVzdF93aXRoX2hvb2tzKCkgeworCXJlcG9fbmFtZT0kMQorCW1rX3Rlc3QgIiRAIiAmJgorCSgKKwkJY2QgIiRyZXBvX25hbWUiICYmCisJCW1rZGlyIC5naXQvaG9va3MgJiYKKwkJY2QgLmdpdC9ob29rcyAmJgorCisJCWNhdCA+cHJlLXJlY2VpdmUgPDwtJ0VPRicgJiYKKwkJIyEvYmluL3NoCisJCWNhdCAtID4+cHJlLXJlY2VpdmUuYWN0dWFsCisJCUVPRgorCisJCWNhdCA+dXBkYXRlIDw8LSdFT0YnICYmCisJCSMhL2Jpbi9zaAorCQlwcmludGYgIiVzICVzICVzXG4iICIkQCIgPj51cGRhdGUuYWN0dWFsCisJCUVPRgorCisJCWNhdCA+cG9zdC1yZWNlaXZlIDw8LSdFT0YnICYmCisJCSMhL2Jpbi9zaAorCQljYXQgLSA+PnBvc3QtcmVjZWl2ZS5hY3R1YWwKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXVwZGF0ZSA8PC0nRU9GJyAmJgorCQkjIS9iaW4vc2gKKwkJZm9yIHJlZiBpbiAiJEAiCisJCWRvCisJCQlwcmludGYgIiVzXG4iICIkcmVmIiA+PnBvc3QtdXBkYXRlLmFjdHVhbAorCQlkb25lCisJCUVPRgorCisJCWNobW9kICt4IHByZS1yZWNlaXZlIHVwZGF0ZSBwb3N0LXJlY2VpdmUgcG9zdC11cGRhdGUKKwkpCit9CisKK21rX2NoaWxkKCkgeworCXJtIC1yZiAiJDIiICYmCisJZ2l0IGNsb25lICIkMSIgIiQyIgorfQorCitjaGVja19wdXNoX3Jlc3VsdCAoKSB7CisJcmVwb19uYW1lPSIkMSIKKwlzaGlmdAorCisJKAorCQljZCAiJHJlcG9fbmFtZSIgJiYKKwkJZWNobyAiJDEiID5leHBlY3QgJiYKKwkJc2hpZnQgJiYKKwkJZm9yIHJlZiBpbiAiJEAiCisJCWRvCisJCQlnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy8kcmVmID5hY3R1YWwgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgfHwKKwkJCWV4aXQKKwkJZG9uZSAmJgorCQlnaXQgZnNjayAtLWZ1bGwKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJPnBhdGgxICYmCisJZ2l0IGFkZCBwYXRoMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gcmVwbyAmJgorCXRoZV9maXJzdF9jb21taXQ9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisKKwk+cGF0aDIgJiYKKwlnaXQgYWRkIHBhdGgyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQgJiYKKwl0aGVfY29tbWl0PSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGhvdXQgd2lsZGNhcmQnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGZldGNoIC4uIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisKKwkJZWNobyAiJHRoZV9jb21taXQgY29tbWl0CXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggd2lsZGNhcmQnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUudXAudXJsIC4uICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnVwLmZldGNoICJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJgorCQlnaXQgZmV0Y2ggdXAgJiYKKworCQllY2hvICIkdGhlX2NvbW1pdCBjb21taXQJcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBpbnN0ZWFkT2YnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCSgKKwkJVFJBU0g9JChwd2QpLyAmJgorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY29uZmlnICJ1cmwuJFRSQVNILmluc3RlYWRPZiIgdHJhc2gvICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnVwLnVybCB0cmFzaC8uICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnVwLmZldGNoICJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJgorCQlnaXQgZmV0Y2ggdXAgJiYKKworCQllY2hvICIkdGhlX2NvbW1pdCBjb21taXQJcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggd2l0aCBwdXNoSW5zdGVhZE9mIChzaG91bGQgbm90IHJld3JpdGUpJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwkoCisJCVRSQVNIPSQocHdkKS8gJiYKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNvbmZpZyAidXJsLnRyYXNoLy5wdXNoSW5zdGVhZE9mIiAiJFRSQVNIIiAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS51cC51cmwgIiRUUkFTSC4iICYmCisJCWdpdCBjb25maWcgcmVtb3RlLnVwLmZldGNoICJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJgorCQlnaXQgZmV0Y2ggdXAgJiYKKworCQllY2hvICIkdGhlX2NvbW1pdCBjb21taXQJcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRob3V0IHdpbGRjYXJkJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKworCWdpdCBwdXNoIHRlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQllY2hvICIkdGhlX2NvbW1pdCBjb21taXQJcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHdpbGRjYXJkJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKworCWdpdCBwdXNoIHRlc3RyZXBvICJyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZWNobyAiJHRoZV9jb21taXQgY29tbWl0CXJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBpbnN0ZWFkT2YnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCVRSQVNIPSIkKHB3ZCkvIiAmJgorCXRlc3RfY29uZmlnICJ1cmwuJFRSQVNILmluc3RlYWRPZiIgdHJhc2gvICYmCisJZ2l0IHB1c2ggdHJhc2gvdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggcHVzaEluc3RlYWRPZicgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJVFJBU0g9IiQocHdkKS8iICYmCisJdGVzdF9jb25maWcgInVybC4kVFJBU0gucHVzaEluc3RlYWRPZiIgdHJhc2gvICYmCisJZ2l0IHB1c2ggdHJhc2gvdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggcHVzaEluc3RlYWRPZiBhbmQgZXhwbGljaXQgcHVzaHVybCAocHVzaEluc3RlYWRPZiBzaG91bGQgbm90IHJld3JpdGUpJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwl0ZXN0X2NvbmZpZyAidXJsLnRyYXNoMi8ucHVzaEluc3RlYWRPZiIgdGVzdHJlcG8vICYmCisJdGVzdF9jb25maWcgInVybC50cmFzaDMvLnB1c2hJbnN0ZWFkT2YiIHRyYXNoL3dyb25nICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnIudXJsIHRyYXNoL3dyb25nICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnIucHVzaHVybCAidGVzdHJlcG8vIiAmJgorCWdpdCBwdXNoIHIgcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbWF0Y2hpbmcgaGVhZHMnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBtYXRjaGluZyBoZWFkcyBvbiB0aGUgY29tbWFuZCBsaW5lJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIDogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsZWQgKG5vbi1mYXN0LWZvcndhcmQpIHB1c2ggd2l0aCBtYXRjaGluZyBoZWFkcycgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6ICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tYXNzYWdlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAkdGhlX2NvbW1pdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1mb3JjZSB3aXRoIG1hdGNoaW5nIGhlYWRzJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIDogJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW1hc3NhZ2VkICYmCisJZ2l0IHB1c2ggLS1mb3JjZSB0ZXN0cmVwbyA6ICYmCisJISBjaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICR0aGVfY29tbWl0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIG1hdGNoaW5nIGhlYWRzIGFuZCBmb3JjZWQgdXBkYXRlJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIDogJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW1hc3NhZ2VkICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gKzogJiYKKwkhIGNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJHRoZV9jb21taXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggbm8gYW1iaWd1aXR5ICgxKScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6bWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIG5vIGFtYmlndWl0eSAoMiknICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyOm9yaWdpbi9tYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCByZW1vdGVzL29yaWdpbi9tYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggY29sb24tbGVzcyByZWZzcGVjLCBubyBhbWJpZ3VpdHknICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyIGhlYWRzL3QvbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtZiB0L21hc3RlciBtYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy90L21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCB3ZWFrIGFtYmlndWl0eSAoMSknICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyIHJlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlcjptYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCByZW1vdGVzL29yaWdpbi9tYXN0ZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggd2VhayBhbWJpZ3VpdHkgKDIpJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciByZW1vdGVzL29yaWdpbi9tYXN0ZXIgcmVtb3Rlcy9hbm90aGVyL21hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlcjptYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCByZW1vdGVzL29yaWdpbi9tYXN0ZXIgcmVtb3Rlcy9hbm90aGVyL21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBhbWJpZ3VpdHknICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvZnJvdHogdGFncy9mcm90eiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIG1hc3Rlcjpmcm90eiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IGhlYWRzL2Zyb3R6IHRhZ3MvZnJvdHoKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggY29sb24tbGVzcyByZWZzcGVjICgxKScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9mcm90eiB0YWdzL2Zyb3R6ICYmCisJZ2l0IGJyYW5jaCAtZiBmcm90eiBtYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBmcm90eiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL2Zyb3R6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgdGFncy9mcm90egorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb2xvbi1sZXNzIHJlZnNwZWMgKDIpJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL2Zyb3R6IHRhZ3MvZnJvdHogJiYKKwlpZiBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLXEgcmVmcy9oZWFkcy9mcm90egorCXRoZW4KKwkJZ2l0IGJyYW5jaCAtRCBmcm90egorCWZpICYmCisJZ2l0IHRhZyAtZiBmcm90eiAmJgorCWdpdCBwdXNoIC1mIHRlc3RyZXBvIGZyb3R6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgdGFncy9mcm90eiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IGhlYWRzL2Zyb3R6CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGNvbG9uLWxlc3MgcmVmc3BlYyAoMyknICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gJiYKKwlpZiBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgLXEgcmVmcy90YWdzL2Zyb3R6CisJdGhlbgorCQlnaXQgdGFnIC1kIGZyb3R6CisJZmkgJiYKKwlnaXQgYnJhbmNoIC1mIGZyb3R6IG1hc3RlciAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIGZyb3R6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvZnJvdHogJiYKKwl0ZXN0IDEgPSAkKCBjZCB0ZXN0cmVwbyAmJiBnaXQgc2hvdy1yZWYgfCB3YyAtbCApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb2xvbi1sZXNzIHJlZnNwZWMgKDQpJyAnCisKKwlta190ZXN0IHRlc3RyZXBvICYmCisJaWYgZ2l0IHNob3ctcmVmIC0tdmVyaWZ5IC1xIHJlZnMvaGVhZHMvZnJvdHoKKwl0aGVuCisJCWdpdCBicmFuY2ggLUQgZnJvdHoKKwlmaSAmJgorCWdpdCB0YWcgLWYgZnJvdHogJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBmcm90eiAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IHRhZ3MvZnJvdHogJiYKKwl0ZXN0IDEgPSAkKCBjZCB0ZXN0cmVwbyAmJiBnaXQgc2hvdy1yZWYgfCB3YyAtbCApCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBoZWFkIHdpdGggbm9uLWV4aXN0ZW50LCBpbmNvbXBsZXRlIGRlc3QnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6YnJhbmNoICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvYnJhbmNoCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0YWcgd2l0aCBub24tZXhpc3RlbnQsIGluY29tcGxldGUgZGVzdCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyAmJgorCWdpdCB0YWcgLWYgdjEuMCAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIHYxLjA6dGFnICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgdGFncy90YWcKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHNoYTEgd2l0aCBub24tZXhpc3RlbnQsIGluY29tcGxldGUgZGVzdCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIGBnaXQgcmV2LXBhcnNlIG1hc3RlcmA6Zm9vCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCByZWYgZXhwcmVzc2lvbiB3aXRoIG5vbi1leGlzdGVudCwgaW5jb21wbGV0ZSBkZXN0JyAnCisKKwlta190ZXN0IHRlc3RyZXBvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyXjpicmFuY2gKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggSEVBRCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gSEVBRCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBIRUFEIG5vbmV4aXN0aW5nIGF0IHJlbW90ZScgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbG9jYWwgbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gSEVBRCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL2xvY2FsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCArSEVBRCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtRCBsb2NhbCAmJgorCWdpdCBjaGVja291dCAtYiBsb2NhbCAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciBsb2NhbCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL2xvY2FsICYmCisKKwkjIFdpdGhvdXQgZm9yY2UgcmV3aW5kaW5nIHNob3VsZCBmYWlsCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIEhFQUQgJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9sb2NhbCAmJgorCisJIyBXaXRoIGZvcmNlIHJld2luZGluZyBzaG91bGQgc3VjY2VlZAorCWdpdCBwdXNoIHRlc3RyZXBvICtIRUFEICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvbG9jYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIEhFQUQgd2l0aCBub24tZXhpc3RlbnQsIGluY29tcGxldGUgZGVzdCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBIRUFEOmJyYW5jaCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhlYWRzL2JyYW5jaAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb25maWcgcmVtb3RlLioucHVzaCA9IEhFQUQnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGJyYW5jaCAtZiBsb2NhbCAkdGhlX2NvbW1pdCAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNoZWNrb3V0IGxvY2FsICYmCisJCWdpdCByZXNldCAtLWhhcmQgJHRoZV9maXJzdF9jb21taXQKKwkpICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnRoZXJlLnVybCB0ZXN0cmVwbyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS50aGVyZS5wdXNoIEhFQUQgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSB0aGVyZSAmJgorCWdpdCBwdXNoICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvbG9jYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIHJlbW90ZS5wdXNoZGVmYXVsdCcgJworCW1rX3Rlc3QgdXBfcmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlta190ZXN0IGRvd25fcmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUudXAudXJsIHVwX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUuZG93bi51cmwgZG93bl9yZXBvICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgdXAgJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUucHVzaGRlZmF1bHQgZG93biAmJgorCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCWdpdCBwdXNoICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdXBfcmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCBkb3duX3JlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBjb25maWcgcmVtb3RlLioucHVzaHVybCcgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnRoZXJlLnVybCB0ZXN0MnJlcG8gJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUudGhlcmUucHVzaHVybCB0ZXN0cmVwbyAmJgorCWdpdCBwdXNoIHRoZXJlIDogJiYKKwljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGNvbmZpZyBicmFuY2guKi5wdXNocmVtb3RlJyAnCisJbWtfdGVzdCB1cF9yZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX3Rlc3Qgc2lkZV9yZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX3Rlc3QgZG93bl9yZXBvIGhlYWRzL21hc3RlciAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS51cC51cmwgdXBfcmVwbyAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5wdXNoZGVmYXVsdCBzaWRlX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUuZG93bi51cmwgZG93bl9yZXBvICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgdXAgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnB1c2hyZW1vdGUgZG93biAmJgorCXRlc3RfY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCWdpdCBwdXNoICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdXBfcmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKwljaGVja19wdXNoX3Jlc3VsdCBzaWRlX3JlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgZG93bl9yZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2guKi5wdXNocmVtb3RlIGNvbmZpZyBvcmRlciBpcyBpcnJlbGV2YW50JyAnCisJbWtfdGVzdCBvbmVfcmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlta190ZXN0IHR3b19yZXBvIGhlYWRzL21hc3RlciAmJgorCXRlc3RfY29uZmlnIHJlbW90ZS5vbmUudXJsIG9uZV9yZXBvICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnR3by51cmwgdHdvX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnB1c2hyZW1vdGUgdHdvX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyByZW1vdGUucHVzaGRlZmF1bHQgb25lX3JlcG8gJiYKKwl0ZXN0X2NvbmZpZyBwdXNoLmRlZmF1bHQgbWF0Y2hpbmcgJiYKKwlnaXQgcHVzaCAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IG9uZV9yZXBvICR0aGVfZmlyc3RfY29tbWl0IGhlYWRzL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHR3b19yZXBvICR0aGVfY29tbWl0IGhlYWRzL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggZHJ5LXJ1bicgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCW9sZF9jb21taXQ9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpCisJKSAmJgorCWdpdCBwdXNoIC0tZHJ5LXJ1biB0ZXN0cmVwbyA6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJG9sZF9jb21taXQgaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdXBkYXRlcyBsb2NhbCByZWZzJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkICYmCisJKAorCQljZCBjaGlsZCAmJgorCQlnaXQgcHVsbCAuLiBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSA9IFwKKwkJCSQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi9tYXN0ZXIpCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdXBkYXRlcyB1cC10by1kYXRlIGxvY2FsIHJlZnMnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQxICYmCisJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQyICYmCisJKGNkIGNoaWxkMSAmJiBnaXQgcHVsbCAuLiBtYXN0ZXIgJiYgZ2l0IHB1c2gpICYmCisJKAorCQljZCBjaGlsZDIgJiYKKwkJZ2l0IHB1bGwgLi4vY2hpbGQxIG1hc3RlciAmJgorCQlnaXQgcHVzaCAmJgorCQl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXIpID0gXAorCQkJJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL21hc3RlcikKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBwcmVzZXJ2ZXMgdXAtdG8tZGF0ZSBwYWNrZWQgcmVmcycgJworCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlta19jaGlsZCB0ZXN0cmVwbyBjaGlsZCAmJgorCSgKKwkJY2QgY2hpbGQgJiYKKwkJZ2l0IHB1c2ggJiYKKwkJISB0ZXN0IC1mIC5naXQvcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBkb2VzIG5vdCB1cGRhdGUgbG9jYWwgcmVmcyBvbiBmYWlsdXJlJyAnCisKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkICYmCisJbWtkaXIgdGVzdHJlcG8vLmdpdC9ob29rcyAmJgorCWVjaG8gIiMhL25vL2Zyb2JuaWNhdGlvbi90b2RheSIgPnRlc3RyZXBvLy5naXQvaG9va3MvcHJlLXJlY2VpdmUgJiYKKwljaG1vZCAreCB0ZXN0cmVwby8uZ2l0L2hvb2tzL3ByZS1yZWNlaXZlICYmCisJKAorCQljZCBjaGlsZCAmJgorCQlnaXQgcHVsbCAuLiBtYXN0ZXIKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSAhPSBcCisJCQkkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbGxvdyBkZWxldGluZyBhbiBpbnZhbGlkIHJlbW90ZSByZWYnICcKKworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJcm0gLWYgdGVzdHJlcG8vLmdpdC9vYmplY3RzLz8/LyogJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkoY2QgdGVzdHJlcG8gJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHZhbGlkIHJlZnMgdHJpZ2dlcnMgcG9zdC1yZWNlaXZlIGFuZCBwb3N0LXVwZGF0ZSBob29rcycgJworCW1rX3Rlc3Rfd2l0aF9ob29rcyB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgaGVhZHMvbmV4dCAmJgorCW9yZ21hc3Rlcj0kKGNkIHRlc3RyZXBvICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwluZXdtYXN0ZXI9JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJb3JnbmV4dD0kKGNkIHRlc3RyZXBvICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL25leHQpICYmCisJbmV3bmV4dD0kX3o0MCAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWFzdGVyIDpyZWZzL2hlYWRzL25leHQgJiYKKwkoCisJCWNkIHRlc3RyZXBvLy5naXQgJiYKKwkJY2F0ID5wcmUtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRvcmdtYXN0ZXIgJG5ld21hc3RlciByZWZzL2hlYWRzL21hc3RlcgorCQkkb3JnbmV4dCAkbmV3bmV4dCByZWZzL2hlYWRzL25leHQKKwkJRU9GCisKKwkJY2F0ID51cGRhdGUuZXhwZWN0IDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL21hc3RlciAkb3JnbWFzdGVyICRuZXdtYXN0ZXIKKwkJcmVmcy9oZWFkcy9uZXh0ICRvcmduZXh0ICRuZXduZXh0CisJCUVPRgorCisJCWNhdCA+cG9zdC1yZWNlaXZlLmV4cGVjdCA8PC1FT0YgJiYKKwkJJG9yZ21hc3RlciAkbmV3bWFzdGVyIHJlZnMvaGVhZHMvbWFzdGVyCisJCSRvcmduZXh0ICRuZXduZXh0IHJlZnMvaGVhZHMvbmV4dAorCQlFT0YKKworCQljYXQgPnBvc3QtdXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIKKwkJcmVmcy9oZWFkcy9uZXh0CisJCUVPRgorCisJCXRlc3RfY21wIHByZS1yZWNlaXZlLmV4cGVjdCBwcmUtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgdXBkYXRlLmV4cGVjdCB1cGRhdGUuYWN0dWFsICYmCisJCXRlc3RfY21wIHBvc3QtcmVjZWl2ZS5leHBlY3QgcG9zdC1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBwb3N0LXVwZGF0ZS5leHBlY3QgcG9zdC11cGRhdGUuYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyBkYW5nbGluZyByZWYgdHJpZ2dlcnMgaG9va3Mgd2l0aCBjb3JyZWN0IGFyZ3MnICcKKwlta190ZXN0X3dpdGhfaG9va3MgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJcm0gLWYgdGVzdHJlcG8vLmdpdC9vYmplY3RzLz8/LyogJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyA6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvLy5naXQgJiYKKwkJY2F0ID5wcmUtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRfejQwICRfejQwIHJlZnMvaGVhZHMvbWFzdGVyCisJCUVPRgorCisJCWNhdCA+dXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIgJF96NDAgJF96NDAKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkX3o0MCAkX3o0MCByZWZzL2hlYWRzL21hc3RlcgorCQlFT0YKKworCQljYXQgPnBvc3QtdXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIKKwkJRU9GCisKKwkJdGVzdF9jbXAgcHJlLXJlY2VpdmUuZXhwZWN0IHByZS1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCB1cGRhdGUuZXhwZWN0IHVwZGF0ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcG9zdC1yZWNlaXZlLmV4cGVjdCBwb3N0LXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfY21wIHBvc3QtdXBkYXRlLmV4cGVjdCBwb3N0LXVwZGF0ZS5hY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbGV0aW9uIG9mIGEgbm9uLWV4aXN0ZW50IHJlZiBpcyBub3QgZmVkIHRvIHBvc3QtcmVjZWl2ZSBhbmQgcG9zdC11cGRhdGUgaG9va3MnICcKKwlta190ZXN0X3dpdGhfaG9va3MgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJb3JnbWFzdGVyPSQoY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW5ld21hc3Rlcj0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgOnJlZnMvaGVhZHMvbm9uZXhpc3RlbnQgJiYKKwkoCisJCWNkIHRlc3RyZXBvLy5naXQgJiYKKwkJY2F0ID5wcmUtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRvcmdtYXN0ZXIgJG5ld21hc3RlciByZWZzL2hlYWRzL21hc3RlcgorCQkkX3o0MCAkX3o0MCByZWZzL2hlYWRzL25vbmV4aXN0ZW50CisJCUVPRgorCisJCWNhdCA+dXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIgJG9yZ21hc3RlciAkbmV3bWFzdGVyCisJCXJlZnMvaGVhZHMvbm9uZXhpc3RlbnQgJF96NDAgJF96NDAKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkb3JnbWFzdGVyICRuZXdtYXN0ZXIgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJRU9GCisKKwkJY2F0ID5wb3N0LXVwZGF0ZS5leHBlY3QgPDwtRU9GICYmCisJCXJlZnMvaGVhZHMvbWFzdGVyCisJCUVPRgorCisJCXRlc3RfY21wIHByZS1yZWNlaXZlLmV4cGVjdCBwcmUtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgdXBkYXRlLmV4cGVjdCB1cGRhdGUuYWN0dWFsICYmCisJCXRlc3RfY21wIHBvc3QtcmVjZWl2ZS5leHBlY3QgcG9zdC1yZWNlaXZlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBwb3N0LXVwZGF0ZS5leHBlY3QgcG9zdC11cGRhdGUuYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGlvbiBvZiBhIG5vbi1leGlzdGVudCByZWYgYWxvbmUgZG9lcyB0cmlnZ2VyIHBvc3QtcmVjZWl2ZSBhbmQgcG9zdC11cGRhdGUgaG9va3MnICcKKwlta190ZXN0X3dpdGhfaG9va3MgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gOnJlZnMvaGVhZHMvbm9uZXhpc3RlbnQgJiYKKwkoCisJCWNkIHRlc3RyZXBvLy5naXQgJiYKKwkJY2F0ID5wcmUtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRfejQwICRfejQwIHJlZnMvaGVhZHMvbm9uZXhpc3RlbnQKKwkJRU9GCisKKwkJY2F0ID51cGRhdGUuZXhwZWN0IDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL25vbmV4aXN0ZW50ICRfejQwICRfejQwCisJCUVPRgorCisJCXRlc3RfY21wIHByZS1yZWNlaXZlLmV4cGVjdCBwcmUtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgdXBkYXRlLmV4cGVjdCB1cGRhdGUuYWN0dWFsICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHBvc3QtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgcG9zdC11cGRhdGUuYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXhlZCByZWYgdXBkYXRlcywgZGVsZXRlcywgaW52YWxpZCBkZWxldGVzIHRyaWdnZXIgaG9va3Mgd2l0aCBjb3JyZWN0IGlucHV0JyAnCisJbWtfdGVzdF93aXRoX2hvb2tzIHRlc3RyZXBvIGhlYWRzL21hc3RlciBoZWFkcy9uZXh0IGhlYWRzL3B1ICYmCisJb3JnbWFzdGVyPSQoY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW5ld21hc3Rlcj0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwlvcmduZXh0PSQoY2QgdGVzdHJlcG8gJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbmV4dCkgJiYKKwluZXduZXh0PSRfejQwICYmCisJb3JncHU9JChjZCB0ZXN0cmVwbyAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9wdSkgJiYKKwluZXdwdT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlciBcCisJICAgIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvcHUgOnJlZnMvaGVhZHMvbmV4dCBcCisJICAgIDpyZWZzL2hlYWRzL25vbmV4aXN0ZW50ICYmCisJKAorCQljZCB0ZXN0cmVwby8uZ2l0ICYmCisJCWNhdCA+cHJlLXJlY2VpdmUuZXhwZWN0IDw8LUVPRiAmJgorCQkkb3JnbWFzdGVyICRuZXdtYXN0ZXIgcmVmcy9oZWFkcy9tYXN0ZXIKKwkJJG9yZ25leHQgJG5ld25leHQgcmVmcy9oZWFkcy9uZXh0CisJCSRvcmdwdSAkbmV3cHUgcmVmcy9oZWFkcy9wdQorCQkkX3o0MCAkX3o0MCByZWZzL2hlYWRzL25vbmV4aXN0ZW50CisJCUVPRgorCisJCWNhdCA+dXBkYXRlLmV4cGVjdCA8PC1FT0YgJiYKKwkJcmVmcy9oZWFkcy9tYXN0ZXIgJG9yZ21hc3RlciAkbmV3bWFzdGVyCisJCXJlZnMvaGVhZHMvbmV4dCAkb3JnbmV4dCAkbmV3bmV4dAorCQlyZWZzL2hlYWRzL3B1ICRvcmdwdSAkbmV3cHUKKwkJcmVmcy9oZWFkcy9ub25leGlzdGVudCAkX3o0MCAkX3o0MAorCQlFT0YKKworCQljYXQgPnBvc3QtcmVjZWl2ZS5leHBlY3QgPDwtRU9GICYmCisJCSRvcmdtYXN0ZXIgJG5ld21hc3RlciByZWZzL2hlYWRzL21hc3RlcgorCQkkb3JnbmV4dCAkbmV3bmV4dCByZWZzL2hlYWRzL25leHQKKwkJJG9yZ3B1ICRuZXdwdSByZWZzL2hlYWRzL3B1CisJCUVPRgorCisJCWNhdCA+cG9zdC11cGRhdGUuZXhwZWN0IDw8LUVPRiAmJgorCQlyZWZzL2hlYWRzL21hc3RlcgorCQlyZWZzL2hlYWRzL25leHQKKwkJcmVmcy9oZWFkcy9wdQorCQlFT0YKKworCQl0ZXN0X2NtcCBwcmUtcmVjZWl2ZS5leHBlY3QgcHJlLXJlY2VpdmUuYWN0dWFsICYmCisJCXRlc3RfY21wIHVwZGF0ZS5leHBlY3QgdXBkYXRlLmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBwb3N0LXJlY2VpdmUuZXhwZWN0IHBvc3QtcmVjZWl2ZS5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgcG9zdC11cGRhdGUuZXhwZWN0IHBvc3QtdXBkYXRlLmFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgZGVsZXRpbmcgYSByZWYgdXNpbmcgLS1kZWxldGUnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCShjZCB0ZXN0cmVwbyAmJiBnaXQgY29uZmlnIHJlY2VpdmUuZGVueURlbGV0ZUN1cnJlbnQgd2FybikgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyAtLWRlbGV0ZSBtYXN0ZXIgJiYKKwkoY2QgdGVzdHJlcG8gJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgZGVsZXRpbmcgYSB0YWcgdXNpbmcgLS1kZWxldGUnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCWdpdCB0YWcgLWEgLW0gZHVtbXlfbWVzc2FnZSBkZWx0YWcgaGVhZHMvbWFzdGVyICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gLS10YWdzICYmCisJKGNkIHRlc3RyZXBvICYmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLXEgcmVmcy90YWdzL2RlbHRhZykgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyAtLWRlbGV0ZSB0YWcgZGVsdGFnICYmCisJKGNkIHRlc3RyZXBvICYmIHRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy90YWdzL2RlbHRhZykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLWRlbGV0ZSB3aXRob3V0IGFyZ3MgYWJvcnRzJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyAtLWRlbGV0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tZGVsZXRlIHJlZnVzZXMgc3JjOmRlc3QgcmVmc3BlY3MnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIC0tZGVsZXRlIG1hc3Rlcjpmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FybiBvbiBwdXNoIHRvIEhFQUQgb2Ygbm9uLWJhcmUgcmVwb3NpdG9yeScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuCisJKSAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAyPnN0ZGVyciAmJgorCWdyZXAgIndhcm5pbmc6IHVwZGF0aW5nIHRoZSBjdXJyZW50IGJyYW5jaCIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbnkgcHVzaCB0byBIRUFEIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnknICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdHJ1ZQorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgcHVzaCB0byBIRUFEIG9mIGJhcmUgcmVwb3NpdG9yeSAoYmFyZSknICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGNvcmUuYmFyZSB0cnVlCisJKSAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAyPnN0ZGVyciAmJgorCSEgZ3JlcCAid2FybmluZzogdXBkYXRpbmcgdGhlIGN1cnJlbnQgYnJhbmNoIiBzdGRlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsb3cgcHVzaCB0byBIRUFEIG9mIG5vbi1iYXJlIHJlcG9zaXRvcnkgKGNvbmZpZyknICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggZmFsc2UKKwkpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyIDI+c3RkZXJyICYmCisJISBncmVwICJ3YXJuaW5nOiB1cGRhdGluZyB0aGUgY3VycmVudCBicmFuY2giIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCB3aXRoIGJyYW5jaGVzJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwlnaXQgYnJhbmNoIHNlY29uZCAkdGhlX2ZpcnN0X2NvbW1pdCAmJgorCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwllY2hvICIuLiIgPiB0ZXN0cmVwby8uZ2l0L2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBmZXRjaCBicmFuY2gxICYmCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL2hlYWRzL2JyYW5jaDEiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggYnJhbmNoZXMgY29udGFpbmluZyAjJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwllY2hvICIuLiNzZWNvbmQiID4gdGVzdHJlcG8vLmdpdC9icmFuY2hlcy9icmFuY2gyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgZmV0Y2ggYnJhbmNoMiAmJgorCQllY2hvICIkdGhlX2ZpcnN0X2NvbW1pdCBjb21taXQJcmVmcy9oZWFkcy9icmFuY2gyIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdpdGggYnJhbmNoZXMnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwllY2hvICJ0ZXN0cmVwbyIgPiAuZ2l0L2JyYW5jaGVzL2JyYW5jaDEgJiYKKwlnaXQgcHVzaCBicmFuY2gxICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQllY2hvICIkdGhlX2ZpcnN0X2NvbW1pdCBjb21taXQJcmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGJyYW5jaGVzIGNvbnRhaW5pbmcgIycgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJZWNobyAidGVzdHJlcG8jYnJhbmNoMyIgPiAuZ2l0L2JyYW5jaGVzL2JyYW5jaDIgJiYKKwlnaXQgcHVzaCBicmFuY2gyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQllY2hvICIkdGhlX2ZpcnN0X2NvbW1pdCBjb21taXQJcmVmcy9oZWFkcy9icmFuY2gzIiA+ZXhwZWN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGludG8gYWxpYXNlZCByZWZzIChjb25zaXN0ZW50KScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQxICYmCisJbWtfY2hpbGQgdGVzdHJlcG8gY2hpbGQyICYmCisJKAorCQljZCBjaGlsZDEgJiYKKwkJZ2l0IGJyYW5jaCBmb28gJiYKKwkJZ2l0IHN5bWJvbGljLXJlZiByZWZzL2hlYWRzL2JhciByZWZzL2hlYWRzL2ZvbworCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggZmFsc2UKKwkpICYmCisJKAorCQljZCBjaGlsZDIgJiYKKwkJPnBhdGgyICYmCisJCWdpdCBhZGQgcGF0aDIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gY2hpbGQyICYmCisJCWdpdCBicmFuY2ggZm9vICYmCisJCWdpdCBicmFuY2ggYmFyICYmCisJCWdpdCBwdXNoIC4uL2NoaWxkMSBmb28gYmFyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGludG8gYWxpYXNlZCByZWZzIChpbmNvbnNpc3RlbnQpJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlta19jaGlsZCB0ZXN0cmVwbyBjaGlsZDEgJiYKKwlta19jaGlsZCB0ZXN0cmVwbyBjaGlsZDIgJiYKKwkoCisJCWNkIGNoaWxkMSAmJgorCQlnaXQgYnJhbmNoIGZvbyAmJgorCQlnaXQgc3ltYm9saWMtcmVmIHJlZnMvaGVhZHMvYmFyIHJlZnMvaGVhZHMvZm9vCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCBmYWxzZQorCSkgJiYKKwkoCisJCWNkIGNoaWxkMiAmJgorCQk+cGF0aDIgJiYKKwkJZ2l0IGFkZCBwYXRoMiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBjaGlsZDIgJiYKKwkJZ2l0IGJyYW5jaCBmb28gJiYKKwkJPnBhdGgzICYmCisJCWdpdCBhZGQgcGF0aDMgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gY2hpbGQyICYmCisJCWdpdCBicmFuY2ggYmFyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC4uL2NoaWxkMSBmb28gYmFyIDI+c3RkZXJyICYmCisJCWdyZXAgInJlZnVzaW5nIGluY29uc2lzdGVudCB1cGRhdGUiIHN0ZGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCByZXF1aXJlcyAtLWZvcmNlIHRvIHVwZGF0ZSBsaWdodHdlaWdodCB0YWcnICcKKwlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciAmJgorCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkMSAmJgorCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkMiAmJgorCSgKKwkJY2QgY2hpbGQxICYmCisJCWdpdCB0YWcgVGFnICYmCisJCWdpdCBwdXNoIC4uL2NoaWxkMiBUYWcgJiYKKwkJZ2l0IHB1c2ggLi4vY2hpbGQyIFRhZyAmJgorCQk+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJmaWxlMSIgJiYKKwkJZ2l0IHRhZyAtZiBUYWcgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLi4vY2hpbGQyIFRhZyAmJgorCQlnaXQgcHVzaCAtLWZvcmNlIC4uL2NoaWxkMiBUYWcgJiYKKwkJZ2l0IHRhZyAtZiBUYWcgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLi4vY2hpbGQyIFRhZyBIRUFEfiAmJgorCQlnaXQgcHVzaCAtLWZvcmNlIC4uL2NoaWxkMiBUYWcKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wb3JjZWxhaW4nICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCWVjaG8gPi5naXQvZm9vICAiVG8gdGVzdHJlcG8iICYmCisJZWNobyA+Pi5naXQvZm9vICIqCXJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCVtuZXcgYnJhbmNoXSIgICYmCisJZWNobyA+Pi5naXQvZm9vICJEb25lIiAmJgorCWdpdCBwdXNoID4uZ2l0L2JhciAtLXBvcmNlbGFpbiAgdGVzdHJlcG8gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWVjaG8gIiR0aGVfY29tbWl0IGNvbW1pdAlyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciIgPmV4cGVjdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIC5naXQvZm9vIC5naXQvYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wb3JjZWxhaW4gYmFkIHVybCcgJworCW1rX2VtcHR5IHRlc3RyZXBvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggPi5naXQvYmFyIC0tcG9yY2VsYWluIGFzZGZhc2RmYXNkIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ3JlcCAtcSBEb25lIC5naXQvYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wb3JjZWxhaW4gcmVqZWN0ZWQnICcKKwlta19lbXB0eSB0ZXN0cmVwbyAmJgorCWdpdCBwdXNoIHRlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyICYmCisJKGNkIHRlc3RyZXBvICYmCisJCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL21hc3Rlcl4KKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHRydWUpICYmCisKKwllY2hvID4uZ2l0L2ZvbyAgIlRvIHRlc3RyZXBvIiAgJiYKKwllY2hvID4+LmdpdC9mb28gIiEJcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9tYXN0ZXIJW3JlbW90ZSByZWplY3RlZF0gKGJyYW5jaCBpcyBjdXJyZW50bHkgY2hlY2tlZCBvdXQpIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggPi5naXQvYmFyIC0tcG9yY2VsYWluICB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfY21wIC5naXQvZm9vIC5naXQvYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wb3JjZWxhaW4gLS1kcnktcnVuIHJlamVjdGVkJyAnCisJbWtfZW1wdHkgdGVzdHJlcG8gJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyByZWZzL2hlYWRzL21hc3RlcjpyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciAmJgorCShjZCB0ZXN0cmVwbyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXIKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHRydWUpICYmCisKKwllY2hvID4uZ2l0L2ZvbyAgIlRvIHRlc3RyZXBvIiAgJiYKKwllY2hvID4+LmdpdC9mb28gIiEJcmVmcy9oZWFkcy9tYXN0ZXJeOnJlZnMvaGVhZHMvbWFzdGVyCVtyZWplY3RlZF0gKG5vbi1mYXN0LWZvcndhcmQpIiAmJgorCWVjaG8gPj4uZ2l0L2ZvbyAiRG9uZSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoID4uZ2l0L2JhciAtLXBvcmNlbGFpbiAgLS1kcnktcnVuIHRlc3RyZXBvIHJlZnMvaGVhZHMvbWFzdGVyXjpyZWZzL2hlYWRzL21hc3RlciAmJgorCXRlc3RfY21wIC5naXQvZm9vIC5naXQvYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wcnVuZScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyIGhlYWRzL3NlY29uZCBoZWFkcy9mb28gaGVhZHMvYmFyICYmCisJZ2l0IHB1c2ggLS1wcnVuZSB0ZXN0cmVwbyA6ICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgaGVhZHMvbWFzdGVyICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9maXJzdF9jb21taXQgaGVhZHMvc2Vjb25kICYmCisJISBjaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2ZpcnN0X2NvbW1pdCBoZWFkcy9mb28gaGVhZHMvYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1wcnVuZSByZWZzcGVjJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyB0bXAvbWFzdGVyIHRtcC9zZWNvbmQgdG1wL2ZvbyB0bXAvYmFyICYmCisJZ2l0IHB1c2ggLS1wcnVuZSB0ZXN0cmVwbyAicmVmcy9oZWFkcy8qOnJlZnMvdG1wLyoiICYmCisJY2hlY2tfcHVzaF9yZXN1bHQgdGVzdHJlcG8gJHRoZV9jb21taXQgdG1wL21hc3RlciAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IHRtcC9zZWNvbmQgJiYKKwkhIGNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IHRtcC9mb28gdG1wL2JhcgorJworCitmb3IgY29uZmlnc2VjdGlvbiBpbiB0cmFuc2ZlciByZWNlaXZlCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInB1c2ggdG8gdXBkYXRlIGEgcmVmIGhpZGRlbiBieSAkY29uZmlnc2VjdGlvbi5oaWRlcmVmcyIgJworCQlta190ZXN0IHRlc3RyZXBvIGhlYWRzL21hc3RlciBoaWRkZW4vb25lIGhpZGRlbi90d28gaGlkZGVuL3RocmVlICYmCisJCSgKKwkJCWNkIHRlc3RyZXBvICYmCisJCQlnaXQgY29uZmlnICRjb25maWdzZWN0aW9uLmhpZGVyZWZzIHJlZnMvaGlkZGVuCisJCSkgJiYKKworCQkjIHB1c2ggdG8gdW5oaWRkZW4gcmVmIHN1Y2NlZWRzIG5vcm1hbGx5CisJCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlcjpyZWZzL2hlYWRzL21hc3RlciAmJgorCQljaGVja19wdXNoX3Jlc3VsdCB0ZXN0cmVwbyAkdGhlX2NvbW1pdCBoZWFkcy9tYXN0ZXIgJiYKKworCQkjIHB1c2ggdG8gdXBkYXRlIGEgaGlkZGVuIHJlZiBzaG91bGQgZmFpbAorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6cmVmcy9oaWRkZW4vb25lICYmCisJCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IGhpZGRlbi9vbmUgJiYKKworCQkjIHB1c2ggdG8gZGVsZXRlIGEgaGlkZGVuIHJlZiBzaG91bGQgZmFpbAorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyA6cmVmcy9oaWRkZW4vdHdvICYmCisJCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IGhpZGRlbi90d28gJiYKKworCQkjIGlkZW1wb3RlbnQgcHVzaCB0byB1cGRhdGUgYSBoaWRkZW4gcmVmIHNob3VsZCBmYWlsCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0OnJlZnMvaGlkZGVuL3RocmVlICYmCisJCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfZmlyc3RfY29tbWl0IGhpZGRlbi90aHJlZQorCScKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZXhhY3QgU0hBMScgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyIGhpZGRlbi9vbmUgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXI6cmVmcy9oaWRkZW4vb25lICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgY29uZmlnIHRyYW5zZmVyLmhpZGVyZWZzIHJlZnMvaGlkZGVuCisJKSAmJgorCWNoZWNrX3B1c2hfcmVzdWx0IHRlc3RyZXBvICR0aGVfY29tbWl0IGhpZGRlbi9vbmUgJiYKKworCW1rX2NoaWxkIHRlc3RyZXBvIGNoaWxkICYmCisJKAorCQljZCBjaGlsZCAmJgorCisJCSMgbWFrZSBzdXJlICR0aGVfY29tbWl0IGRvZXMgbm90IGV4aXN0IGhlcmUKKwkJZ2l0IHJlcGFjayAtYSAtZCAmJgorCQlnaXQgcHJ1bmUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC10ICR0aGVfY29tbWl0ICYmCisKKwkJIyBmZXRjaGluZyB0aGUgaGlkZGVuIG9iamVjdCBzaG91bGQgZmFpbCBieSBkZWZhdWx0CisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAtdiAuLi90ZXN0cmVwbyAkdGhlX2NvbW1pdDpyZWZzL2hlYWRzL2NvcHkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2NvcHkgJiYKKworCQkjIHRoZSBzZXJ2ZXIgc2lkZSBjYW4gYWxsb3cgaXQgdG8gc3VjY2VlZAorCQkoCisJCQljZCAuLi90ZXN0cmVwbyAmJgorCQkJZ2l0IGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93dGlwc2hhMWlud2FudCB0cnVlCisJCSkgJiYKKworCQlnaXQgZmV0Y2ggLXYgLi4vdGVzdHJlcG8gJHRoZV9jb21taXQ6cmVmcy9oZWFkcy9jb3B5IG1hc3RlcjpyZWZzL2hlYWRzL2V4dHJhICYmCisJCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCQkkdGhlX2NvbW1pdAorCQkkdGhlX2ZpcnN0X2NvbW1pdAorCQlFT0YKKwkJeworCQkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2NvcHkgJiYKKwkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9leHRyYQorCQl9ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworZm9yIGNvbmZpZ2FsbG93dGlwc2hhMWlud2FudCBpbiB0cnVlIGZhbHNlCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNoYWxsb3cgZmV0Y2ggcmVhY2hhYmxlIFNIQTEgKGJ1dCBub3QgYSByZWYpLCBhbGxvd3RpcHNoYTFpbndhbnQ9JGNvbmZpZ2FsbG93dGlwc2hhMWlud2FudCIgJworCQlta19lbXB0eSB0ZXN0cmVwbyAmJgorCQkoCisJCQljZCB0ZXN0cmVwbyAmJgorCQkJZ2l0IGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93dGlwc2hhMWlud2FudCAkY29uZmlnYWxsb3d0aXBzaGExaW53YW50ICYmCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm9vICYmCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYmFyCisJCSkgJiYKKwkJU0hBMT0kKGdpdCAtLWdpdC1kaXI9dGVzdHJlcG8vLmdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJCW1rX2VtcHR5IHNoYWxsb3cgJiYKKwkJKAorCQkJY2Qgc2hhbGxvdyAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC0tZGVwdGg9MSAuLi90ZXN0cmVwby8uZ2l0ICRTSEExICYmCisJCQlnaXQgLS1naXQtZGlyPS4uL3Rlc3RyZXBvLy5naXQgY29uZmlnIHVwbG9hZHBhY2suYWxsb3dyZWFjaGFibGVzaGExaW53YW50IHRydWUgJiYKKwkJCWdpdCBmZXRjaCAtLWRlcHRoPTEgLi4vdGVzdHJlcG8vLmdpdCAkU0hBMSAmJgorCQkJZ2l0IGNhdC1maWxlIGNvbW1pdCAkU0hBMQorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZGVueSBmZXRjaCB1bnJlYWNoYWJsZSBTSEExLCBhbGxvd3RpcHNoYTFpbndhbnQ9JGNvbmZpZ2FsbG93dGlwc2hhMWlud2FudCIgJworCQlta19lbXB0eSB0ZXN0cmVwbyAmJgorCQkoCisJCQljZCB0ZXN0cmVwbyAmJgorCQkJZ2l0IGNvbmZpZyB1cGxvYWRwYWNrLmFsbG93dGlwc2hhMWlud2FudCAkY29uZmlnYWxsb3d0aXBzaGExaW53YW50ICYmCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZm9vICYmCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYmFyICYmCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0geHl6CisJCSkgJiYKKwkJU0hBMV8xPSQoZ2l0IC0tZ2l0LWRpcj10ZXN0cmVwby8uZ2l0IHJldi1wYXJzZSBIRUFEXl4pICYmCisJCVNIQTFfMj0kKGdpdCAtLWdpdC1kaXI9dGVzdHJlcG8vLmdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJCVNIQTFfMz0kKGdpdCAtLWdpdC1kaXI9dGVzdHJlcG8vLmdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJKAorCQkJY2QgdGVzdHJlcG8gJiYKKwkJCWdpdCByZXNldCAtLWhhcmQgJFNIQTFfMiAmJgorCQkJZ2l0IGNhdC1maWxlIGNvbW1pdCAkU0hBMV8xICYmCisJCQlnaXQgY2F0LWZpbGUgY29tbWl0ICRTSEExXzMKKwkJKSAmJgorCQlta19lbXB0eSBzaGFsbG93ICYmCisJCSgKKwkJCWNkIHNoYWxsb3cgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAuLi90ZXN0cmVwby8uZ2l0ICRTSEExXzMgJiYKKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCAuLi90ZXN0cmVwby8uZ2l0ICRTSEExXzEgJiYKKwkJCWdpdCAtLWdpdC1kaXI9Li4vdGVzdHJlcG8vLmdpdCBjb25maWcgdXBsb2FkcGFjay5hbGxvd3JlYWNoYWJsZXNoYTFpbndhbnQgdHJ1ZSAmJgorCQkJZ2l0IGZldGNoIC4uL3Rlc3RyZXBvLy5naXQgJFNIQTFfMSAmJgorCQkJZ2l0IGNhdC1maWxlIGNvbW1pdCAkU0hBMV8xICYmCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgY29tbWl0ICRTSEExXzIgJiYKKwkJCWdpdCBmZXRjaCAuLi90ZXN0cmVwby8uZ2l0ICRTSEExXzIgJiYKKwkJCWdpdCBjYXQtZmlsZSBjb21taXQgJFNIQTFfMiAmJgorCQkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uL3Rlc3RyZXBvLy5naXQgJFNIQTFfMworCQkpCisJJworZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmb2xsb3dzIHRhZ3MgYnkgZGVmYXVsdCcgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJcm0gLWZyIHNyYyBkc3QgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgcHVsbCAuLi90ZXN0cmVwbyBtYXN0ZXIgJiYKKwkJZ2l0IHRhZyAtbSAiYW5ub3RhdGVkIiB0YWcgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiA+dG1wMSAmJgorCQkoCisJCQljYXQgdG1wMQorCQkJc2VkIC1uICJzfHJlZnMvaGVhZHMvbWFzdGVyJHxyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcnxwIiB0bXAxCisJCSkgfAorCQlzb3J0IC1rIDMgPi4uL2V4cGVjdAorCSkgJiYKKwlnaXQgaW5pdCBkc3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgcmVtb3RlIGFkZCBvcmlnaW4gLi4vc3JjICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgb3JpZ2luICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL21hc3RlciAmJgorCQlnaXQgcHVsbCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIGEgc3BlY2lmaWMgcmVmIGFwcGxpZXMgcmVtb3RlLiRuYW1lLnB1c2ggYXMgcmVmbWFwJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlybSAtZnIgc3JjIGRzdCAmJgorCWdpdCBpbml0IHNyYyAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgcHVsbCAuLi90ZXN0cmVwbyBtYXN0ZXIgJiYKKwkJZ2l0IGJyYW5jaCBuZXh0ICYmCisJCWdpdCBjb25maWcgcmVtb3RlLmRzdC51cmwgLi4vZHN0ICYmCisJCWdpdCBjb25maWcgcmVtb3RlLmRzdC5wdXNoICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9zcmMvKiIgJiYKKwkJZ2l0IHB1c2ggZHN0IG1hc3RlciAmJgorCQlnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgfAorCQlzZWQgLWUgInN8cmVmcy9oZWFkcy98cmVmcy9yZW1vdGVzL3NyYy98IiA+Li4vZHN0L2V4cGVjdAorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9uZXh0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiByZWZzL2hlYWRzL21hc3RlciAmJgorCQlnaXQgc2hvdy1yZWYgcmVmcy9yZW1vdGVzL3NyYy9tYXN0ZXIgPmFjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBkc3QvZXhwZWN0IGRzdC9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBubyByZW1vdGUuJG5hbWUucHVzaCwgaXQgaXMgbm90IHVzZWQgYXMgcmVmbWFwJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlybSAtZnIgc3JjIGRzdCAmJgorCWdpdCBpbml0IHNyYyAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgcHVsbCAuLi90ZXN0cmVwbyBtYXN0ZXIgJiYKKwkJZ2l0IGJyYW5jaCBuZXh0ICYmCisJCWdpdCBjb25maWcgcmVtb3RlLmRzdC51cmwgLi4vZHN0ICYmCisJCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nICYmCisJCWdpdCBwdXNoIGRzdCBtYXN0ZXIgJiYKKwkJZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvbWFzdGVyID4uLi9kc3QvZXhwZWN0CisJKSAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiByZWZzL2hlYWRzL25leHQgJiYKKwkJZ2l0IHNob3ctcmVmIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZHN0L2V4cGVjdCBkc3QvYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbm8gcmVtb3RlLiRuYW1lLnB1c2gsIHVwc3RyZWFtIG1hcHBpbmcgaXMgdXNlZCcgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJcm0gLWZyIHNyYyBkc3QgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0ICYmCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IHB1bGwgLi4vdGVzdHJlcG8gbWFzdGVyICYmCisJCWdpdCBicmFuY2ggbmV4dCAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5kc3QudXJsIC4uL2RzdCAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5kc3QuZmV0Y2ggIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL2RzdC8qIiAmJgorCQlnaXQgY29uZmlnIHB1c2guZGVmYXVsdCB1cHN0cmVhbSAmJgorCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL3RydW5rICYmCisJCWdpdCBjb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgZHN0ICYmCisKKwkJZ2l0IHB1c2ggZHN0IG1hc3RlciAmJgorCQlnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgfAorCQlzZWQgLWUgInN8cmVmcy9oZWFkcy9tYXN0ZXJ8cmVmcy9oZWFkcy90cnVua3wiID4uLi9kc3QvZXhwZWN0CisJKSAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiByZWZzL2hlYWRzL21hc3RlciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgcmVmcy9oZWFkcy9uZXh0ICYmCisJCWdpdCBzaG93LXJlZiByZWZzL2hlYWRzL3RydW5rID5hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZHN0L2V4cGVjdCBkc3QvYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZG9lcyBub3QgZm9sbG93IHRhZ3MgYnkgZGVmYXVsdCcgJworCW1rX3Rlc3QgdGVzdHJlcG8gaGVhZHMvbWFzdGVyICYmCisJcm0gLWZyIHNyYyBkc3QgJiYKKwlnaXQgaW5pdCBzcmMgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0ICYmCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IHB1bGwgLi4vdGVzdHJlcG8gbWFzdGVyICYmCisJCWdpdCB0YWcgLW0gImFubm90YXRlZCIgdGFnICYmCisJCWdpdCBjaGVja291dCAtYiBhbm90aGVyICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiZnV0dXJlIGNvbW1pdCIgJiYKKwkJZ2l0IHRhZyAtbSAiZnV0dXJlIiBmdXR1cmUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvbWFzdGVyID4uLi9leHBlY3QgJiYKKwkJZ2l0IHB1c2ggLi4vZHN0IG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tZm9sbG93LXRhZyBvbmx5IHB1c2hlcyByZWxldmFudCB0YWdzJyAnCisJbWtfdGVzdCB0ZXN0cmVwbyBoZWFkcy9tYXN0ZXIgJiYKKwlybSAtZnIgc3JjIGRzdCAmJgorCWdpdCBpbml0IHNyYyAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgcHVsbCAuLi90ZXN0cmVwbyBtYXN0ZXIgJiYKKwkJZ2l0IHRhZyAtbSAiYW5ub3RhdGVkIiB0YWcgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGFub3RoZXIgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJmdXR1cmUgY29tbWl0IiAmJgorCQlnaXQgdGFnIC1tICJmdXR1cmUiIGZ1dHVyZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy9tYXN0ZXIgcmVmcy90YWdzL3RhZyA+Li4vZXhwZWN0CisJCWdpdCBwdXNoIC0tZm9sbG93LXRhZyAuLi9kc3QgbWFzdGVyCisJKSAmJgorCSgKKwkJY2QgZHN0ICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLS1uby10aGluIG11c3QgcHJvZHVjZSBub24tdGhpbiBwYWNrJyAnCisJY2F0ID4+cGF0aDEgPDxcRU9GICYmCitrZWVwIGJhc2UgdmVyc2lvbiBvZiBwYXRoMSBiaWcgZW5vdWdoLCBjb21wYXJlZCB0byB0aGUgbmV3IGNoYW5nZXMKK2xhdGVyLCBpbiBvcmRlciB0byBwYXNzIHNpemUgaGV1cmlzdGljcyBpbgorYnVpbHRpbi9wYWNrLW9iamVjdHMuYzp0cnlfZGVsdGEoKQorRU9GCisJZ2l0IGNvbW1pdCAtYW0gaW5pdGlhbCAmJgorCWdpdCBpbml0IG5vLXRoaW4gJiYKKwlnaXQgLS1naXQtZGlyPW5vLXRoaW4vLmdpdCBjb25maWcgcmVjZWl2ZS51bnBhY2tsaW1pdCAwICYmCisJZ2l0IHB1c2ggbm8tdGhpbi8uZ2l0IHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvZm9vICYmCisJZWNobyBtb2RpZmllZCA+PiBwYXRoMSAmJgorCWdpdCBjb21taXQgLWFtIG1vZGlmaWVkICYmCisJZ2l0IHJlcGFjayAtYWRmICYmCisJcmN2cGNrPSJnaXQgcmVjZWl2ZS1wYWNrIC0tcmVqZWN0LXRoaW4tcGFjay1mb3ItdGVzdGluZyIgJiYKKwlnaXQgcHVzaCAtLW5vLXRoaW4gLS1yZWNlaXZlLXBhY2s9IiRyY3ZwY2siIG5vLXRoaW4vLmdpdCByZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIGEgdGFnIHB1c2hlcyB0aGUgdGFnZ2VkIG9iamVjdCcgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJYmxvYj0kKGVjaG8gdW5yZWZlcmVuY2VkIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJZ2l0IHRhZyAtbSBmb28gdGFnLW9mLWJsb2IgJGJsb2IgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0LmdpdCAmJgorCWdpdCBwdXNoIGRzdC5naXQgdGFnLW9mLWJsb2IgJiYKKwkjIHRoZSByZWNlaXZpbmcgaW5kZXgtcGFjayBzaG91bGQgaGF2ZSBub3RpY2VkCisJIyBhbnkgcHJvYmxlbXMsIGJ1dCB3ZSBkb3VibGUgY2hlY2sKKwllY2hvIHVucmVmZXJlbmNlZCA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1kc3QuZ2l0IGNhdC1maWxlIGJsb2IgdGFnLW9mLWJsb2IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBpbnRvIGJhcmUgcmVzcGVjdHMgY29yZS5sb2dhbGxyZWZ1cGRhdGVzJyAnCisJcm0gLXJmIGRzdC5naXQgJiYKKwlnaXQgaW5pdCAtLWJhcmUgZHN0LmdpdCAmJgorCWdpdCAtQyBkc3QuZ2l0IGNvbmZpZyBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMgdHJ1ZSAmJgorCisJIyBkb3VibGUgcHVzaCB0byB0ZXN0IGJvdGggd2l0aCBhbmQgd2l0aG91dAorCSMgdGhlIGFjdHVhbCBwYWNrIHRyYW5zZmVyCisJZ2l0IHB1c2ggZHN0LmdpdCBtYXN0ZXI6b25lICYmCisJZWNobyAib25lQHswfSBwdXNoIiA+ZXhwZWN0ICYmCisJZ2l0IC1DIGRzdC5naXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiBvbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBwdXNoIGRzdC5naXQgbWFzdGVyOnR3byAmJgorCWVjaG8gInR3b0B7MH0gcHVzaCIgPmV4cGVjdCAmJgorCWdpdCAtQyBkc3QuZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWdkICVncyIgdHdvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGludG8gYmFyZSByZXNwZWN0cyBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMnICcKKwlybSAtcmYgZHN0LmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSBkc3QuZ2l0ICYmCisJKAorCQljZCBkc3QuZ2l0ICYmCisJCWdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIHRydWUgJiYKKworCQkjIGFzIGFib3ZlLCB3ZSBkb3VibGUtZmV0Y2ggdG8gdGVzdCBib3RoCisJCSMgd2l0aCBhbmQgd2l0aG91dCBwYWNrIHRyYW5zZmVyCisJCWdpdCBmZXRjaCAuLiBtYXN0ZXI6b25lICYmCisJCWVjaG8gIm9uZUB7MH0gZmV0Y2ggLi4gbWFzdGVyOm9uZTogc3RvcmluZyBoZWFkIiA+ZXhwZWN0ICYmCisJCWdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVnZCAlZ3MiIG9uZSA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCQlnaXQgZmV0Y2ggLi4gbWFzdGVyOnR3byAmJgorCQllY2hvICJ0d29AezB9IGZldGNoIC4uIG1hc3Rlcjp0d286IHN0b3JpbmcgaGVhZCIgPmV4cGVjdCAmJgorCQlnaXQgbG9nIC1nIC0tZm9ybWF0PSIlZ2QgJWdzIiB0d28gPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoID0gdXBkYXRlSW5zdGVhZCcgJworCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdXBkYXRlSW5zdGVhZAorCSkgJiYKKwl0ZXN0X2NvbW1pdCB0aGlyZCBwYXRoMiAmJgorCisJIyBUcnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aXRoIHByaXN0aW5lIHdvcmtpbmcgdHJlZQorCWdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtcSAtLXJlZnJlc2ggJiYKKwkJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLSAmJgorCQlnaXQgZGlmZi1pbmRleCAtLXF1aWV0IC0tY2FjaGVkIEhFQUQgLS0gJiYKKwkJdGVzdCB0aGlyZCA9ICIkKGNhdCBwYXRoMikiICYmCisJCXRlc3QgJChnaXQgLUMgLi4gcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJKSAmJgorCisJIyBUcnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aXRoIHdvcmtpbmcgdHJlZSBuZWVkaW5nIGEgcmVmcmVzaAorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBIRUFEXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJdGVzdC1jaG10aW1lICsxMDAgcGF0aDEKKwkpICYmCisJZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaCAmJgorCQlnaXQgZGlmZi1maWxlcyAtLXF1aWV0IC0tICYmCisJCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRCAtLSAmJgorCQl0ZXN0X2NtcCAuLi9wYXRoMSBwYXRoMSAmJgorCQl0ZXN0IHRoaXJkID0gIiQoY2F0IHBhdGgyKSIgJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkpICYmCisKKwkjIFVwZGF0ZSB3aGF0IGlzIHRvIGJlIHB1c2hlZAorCXRlc3RfY29tbWl0IGZvdXJ0aCBwYXRoMiAmJgorCisJIyBUcnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aXRoIGEgZGlydHkgd29ya2luZyB0cmVlCisJIyAoMSkgdGhlIHdvcmtpbmcgdHJlZSB1cGRhdGVkCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQllY2hvIGNoYW5nZWQgPnBhdGgxCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgLS1jYWNoZWQgJiYKKwkJdGVzdCBjaGFuZ2VkID0gIiQoY2F0IHBhdGgxKSIKKwkpICYmCisKKwkjICgyKSB0aGUgaW5kZXggdXBkYXRlZAorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZWNobyBjaGFuZ2VkID5wYXRoMSAmJgorCQlnaXQgYWRkIHBhdGgxCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgSEVBRF4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgJiYKKwkJdGVzdCBjaGFuZ2VkID0gIiQoY2F0IHBhdGgxKSIKKwkpICYmCisKKwkjIEludHJvZHVjZSBhIG5ldyBmaWxlIGluIHRoZSB1cGRhdGUKKwl0ZXN0X2NvbW1pdCBmaWZ0aCBwYXRoMyAmJgorCisJIyAoMykgdGhlIHdvcmtpbmcgdHJlZSBoYXMgYW4gdW50cmFja2VkIGZpbGUgdGhhdCB3b3VsZCBpbnRlcmZlcmUKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJZWNobyBjaGFuZ2VkID5wYXRoMworCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCXRlc3QgJChnaXQgLUMgLi4gcmV2LXBhcnNlIEhFQUReXikgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJZ2l0IGRpZmYgLS1xdWlldCAmJgorCQlnaXQgZGlmZiAtLXF1aWV0IC0tY2FjaGVkICYmCisJCXRlc3QgY2hhbmdlZCA9ICIkKGNhdCBwYXRoMykiCisJKSAmJgorCisJIyAoNCkgdGhlIHRhcmdldCBjaGFuZ2VzIHRvIHdoYXQgZ2V0cyBwdXNoZWQgYnV0IGl0IHN0aWxsIGlzIGEgY2hhbmdlCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkICYmCisJCWVjaG8gZmlmdGggPnBhdGgzICYmCisJCWdpdCBhZGQgcGF0aDMKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggdGVzdHJlcG8gbWFzdGVyICYmCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBIRUFEXl4pID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgJiYKKwkJdGVzdCBmaWZ0aCA9ICIkKGNhdCBwYXRoMykiCisJKSAmJgorCisJIyAoNSkgcHVzaCBpbnRvIHZvaWQKKwlybSAtZnIgdm9pZCAmJgorCWdpdCBpbml0IHZvaWQgJiYKKwkoCisJCWNkIHZvaWQgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHVwZGF0ZUluc3RlYWQKKwkpICYmCisJZ2l0IHB1c2ggdm9pZCBtYXN0ZXIgJiYKKwkoCisJCWNkIHZvaWQgJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgbWFzdGVyKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCQlnaXQgZGlmZiAtLXF1aWV0ICYmCisJCWdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZUluc3RlYWQgd2l0aCBwdXNoLXRvLWNoZWNrb3V0IGhvb2snICcKKwlybSAtZnIgdGVzdHJlcG8gJiYKKwlnaXQgaW5pdCB0ZXN0cmVwbyAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHB1bGwgLi4gbWFzdGVyICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF5eICYmCisJCWdpdCB0YWcgaW5pdGlhbCAmJgorCQlnaXQgY29uZmlnIHJlY2VpdmUuZGVueUN1cnJlbnRCcmFuY2ggdXBkYXRlSW5zdGVhZCAmJgorCQl3cml0ZV9zY3JpcHQgLmdpdC9ob29rcy9wdXNoLXRvLWNoZWNrb3V0IDw8LVxFT0YKKwkJZWNobyA+JjIgdXBkYXRpbmcgZnJvbSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkJZWNobyA+JjIgdXBkYXRpbmcgdG8gIiQxIgorCisJCWdpdCB1cGRhdGUtaW5kZXggLXEgLS1yZWZyZXNoICYmCisJCWdpdCByZWFkLXRyZWUgLXUgLW0gSEVBRCAiJDEiIHx8IHsKKwkJCXN0YXR1cz0kPworCQkJZWNobyA+JjIgcmVhZC10cmVlIGZhaWxlZAorCQkJZXhpdCAkc3RhdHVzCisJCX0KKwkJRU9GCisJKSAmJgorCisJIyBUcnkgcHVzaGluZyBpbnRvIGEgcHJpc3RpbmUKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCWdpdCBkaWZmIC0tcXVpZXQgJiYKKwkJZ2l0IGRpZmYgSEVBRCAtLXF1aWV0ICYmCisJCXRlc3QgJChnaXQgLUMgLi4gcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisJKSAmJgorCisJIyBUcnkgcHVzaGluZyBpbnRvIGEgcmVwb3NpdG9yeSB3aXRoIGNvbmZsaWN0aW5nIGNoYW5nZQorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJCWVjaG8gY29uZmxpY3RpbmcgPnBhdGgyCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHRlc3RyZXBvIG1hc3RlciAmJgorCSgKKwkJY2QgdGVzdHJlcG8gJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgaW5pdGlhbCkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkJdGVzdCBjb25mbGljdGluZyA9ICIkKGNhdCBwYXRoMikiICYmCisJCWdpdCBkaWZmLWluZGV4IC0tcXVpZXQgLS1jYWNoZWQgSEVBRAorCSkgJiYKKworCSMgVHJ5IHB1c2hpbmcgaW50byBhIHJlcG9zaXRvcnkgd2l0aCB1bnJlbGF0ZWQgY2hhbmdlCisJKAorCQljZCB0ZXN0cmVwbyAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwkJZWNobyB1bnJlbGF0ZWQgPnBhdGgxICYmCisJCWVjaG8gaXJyZWxldmFudCA+cGF0aDUgJiYKKwkJZ2l0IGFkZCBwYXRoNQorCSkgJiYKKwlnaXQgcHVzaCB0ZXN0cmVwbyBtYXN0ZXIgJiYKKwkoCisJCWNkIHRlc3RyZXBvICYmCisJCXRlc3QgIiQoY2F0IHBhdGgxKSIgPSB1bnJlbGF0ZWQgJiYKKwkJdGVzdCAiJChjYXQgcGF0aDUpIiA9IGlycmVsZXZhbnQgJiYKKwkJdGVzdCAiJChnaXQgZGlmZiAtLW5hbWUtb25seSAtLWNhY2hlZCBIRUFEKSIgPSBwYXRoNSAmJgorCQl0ZXN0ICQoZ2l0IC1DIC4uIHJldi1wYXJzZSBIRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCSkgJiYKKworCSMgcHVzaCBpbnRvIHZvaWQKKwlybSAtZnIgdm9pZCAmJgorCWdpdCBpbml0IHZvaWQgJiYKKwkoCisJCWNkIHZvaWQgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHVwZGF0ZUluc3RlYWQgJiYKKwkJd3JpdGVfc2NyaXB0IC5naXQvaG9va3MvcHVzaC10by1jaGVja291dCA8PC1cRU9GCisJCWlmIGdpdCByZXYtcGFyc2UgLS1xdWlldCAtLXZlcmlmeSBIRUFECisJCXRoZW4KKwkJCWhhc19oZWFkPXllcworCQkJZWNobyA+JjIgdXBkYXRpbmcgZnJvbSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkJZWxzZQorCQkJaGFzX2hlYWQ9bm8KKwkJCWVjaG8gPiYyIHB1c2hpbmcgaW50byB2b2lkCisJCWZpCisJCWVjaG8gPiYyIHVwZGF0aW5nIHRvICIkMSIKKworCQlnaXQgdXBkYXRlLWluZGV4IC1xIC0tcmVmcmVzaCAmJgorCQljYXNlICIkaGFzX2hlYWQiIGluCisJCXllcykKKwkJCWdpdCByZWFkLXRyZWUgLXUgLW0gSEVBRCAiJDEiIDs7CisJCW5vKQorCQkJZ2l0IHJlYWQtdHJlZSAtdSAtbSAiJDEiIDs7CisJCWVzYWMgfHwgeworCQkJc3RhdHVzPSQ/CisJCQllY2hvID4mMiByZWFkLXRyZWUgZmFpbGVkCisJCQlleGl0ICRzdGF0dXMKKwkJfQorCQlFT0YKKwkpICYmCisKKwlnaXQgcHVzaCB2b2lkIG1hc3RlciAmJgorCSgKKwkJY2Qgdm9pZCAmJgorCQlnaXQgZGlmZiAtLXF1aWV0ICYmCisJCWdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgJiYKKwkJdGVzdCAkKGdpdCAtQyAuLiByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUxNy1wdXNoLW1pcnJvci5zaCBiL3QvdDU1MTctcHVzaC1taXJyb3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTJhNWRmYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTctcHVzaC1taXJyb3Iuc2gKQEAgLTAsMCArMSwyNjggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdXNoaW5nIHRvIGEgbWlycm9yIHJlcG9zaXRvcnknCisKKy4gLi90ZXN0LWxpYi5zaAorCitEPWBwd2RgCisKK2ludmVydCAoKSB7CisJaWYgIiRAIjsgdGhlbgorCQlyZXR1cm4gMQorCWVsc2UKKwkJcmV0dXJuIDAKKwlmaQorfQorCitta19yZXBvX3BhaXIgKCkgeworCXJtIC1yZiBtYXN0ZXIgbWlycm9yICYmCisJbWtkaXIgbWlycm9yICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmRlbnlDdXJyZW50QnJhbmNoIHdhcm4KKwkpICYmCisJbWtkaXIgbWFzdGVyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgJDEgdXAgLi4vbWlycm9yCisJKQorfQorCisKKyMgQlJBTkNIIHRlc3RzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciBjcmVhdGVzIG5ldyBicmFuY2hlcycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwltYXN0ZXJfbWFzdGVyPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwltaXJyb3JfbWFzdGVyPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICIkbWFzdGVyX21hc3RlciIgPSAiJG1pcnJvcl9tYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgdXBkYXRlcyBleGlzdGluZyBicmFuY2hlcycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQllY2hvIHR3byA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gdHdvICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCW1hc3Rlcl9tYXN0ZXI9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCW1pcnJvcl9tYXN0ZXI9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgIiRtYXN0ZXJfbWFzdGVyIiA9ICIkbWlycm9yX21hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciBmb3JjZSB1cGRhdGVzIGV4aXN0aW5nIGJyYW5jaGVzJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWVjaG8gdHdvID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwltYXN0ZXJfbWFzdGVyPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwltaXJyb3JfbWFzdGVyPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICIkbWFzdGVyX21hc3RlciIgPSAiJG1pcnJvcl9tYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgcmVtb3ZlcyBicmFuY2hlcycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgYnJhbmNoIHJlbW92ZSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IGJyYW5jaCAtRCByZW1vdmUKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJaW52ZXJ0IGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbW92ZQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciBhZGRzLCB1cGRhdGVzIGFuZCByZW1vdmVzIGJyYW5jaGVzIHRvZ2V0aGVyJyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCBicmFuY2ggcmVtb3ZlIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQlnaXQgYnJhbmNoIC1EIHJlbW92ZSAmJgorCQlnaXQgYnJhbmNoIGFkZCBtYXN0ZXIgJiYKKwkJZWNobyB0d28gPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIHR3byAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwltYXN0ZXJfbWFzdGVyPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwltYXN0ZXJfYWRkPSQoY2QgbWFzdGVyICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL2FkZCkgJiYKKwltaXJyb3JfbWFzdGVyPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwltaXJyb3JfYWRkPSQoY2QgbWlycm9yICYmIGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL2FkZCkgJiYKKwl0ZXN0ICIkbWFzdGVyX21hc3RlciIgPSAiJG1pcnJvcl9tYXN0ZXIiICYmCisJdGVzdCAiJG1hc3Rlcl9hZGQiID0gIiRtaXJyb3JfYWRkIiAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWludmVydCBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9yZW1vdmUKKwkpCisKKycKKworCisjIFRBRyB0ZXN0cwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBtaXJyb3IgY3JlYXRlcyBuZXcgdGFncycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCW1hc3Rlcl9tYXN0ZXI9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCW1pcnJvcl9tYXN0ZXI9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCXRlc3QgIiRtYXN0ZXJfbWFzdGVyIiA9ICIkbWlycm9yX21hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1pcnJvciB1cGRhdGVzIGV4aXN0aW5nIHRhZ3MnICcKKworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgbWFzdGVyICYmCisJCWVjaG8gb25lID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkJZ2l0IHRhZyAtZiB0bWFzdGVyIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQllY2hvIHR3byA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gdHdvICYmCisJCWdpdCB0YWcgLWYgdG1hc3RlciBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJbWFzdGVyX21hc3Rlcj0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJbWlycm9yX21hc3Rlcj0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJdGVzdCAiJG1hc3Rlcl9tYXN0ZXIiID0gIiRtaXJyb3JfbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIGZvcmNlIHVwZGF0ZXMgZXhpc3RpbmcgdGFncycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWVjaG8gdHdvID5mb28gJiYgZ2l0IGFkZCBmb28gJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkJZ2l0IHRhZyAtZiB0bWFzdGVyIG1hc3RlciAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJCWdpdCB0YWcgLWYgdG1hc3RlciBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAKKwkpICYmCisJbWFzdGVyX21hc3Rlcj0kKGNkIG1hc3RlciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJbWlycm9yX21hc3Rlcj0kKGNkIG1pcnJvciAmJiBnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy90YWdzL3RtYXN0ZXIpICYmCisJdGVzdCAiJG1hc3Rlcl9tYXN0ZXIiID0gIiRtaXJyb3JfbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIHJlbW92ZXMgdGFncycgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgdGFnIC1mIHRyZW1vdmUgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWdpdCB0YWcgLWQgdHJlbW92ZQorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwkoCisJCWNkIG1pcnJvciAmJgorCQlpbnZlcnQgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90cmVtb3ZlCisJKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWlycm9yIGFkZHMsIHVwZGF0ZXMgYW5kIHJlbW92ZXMgdGFncyB0b2dldGhlcicgJworCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCBtYXN0ZXIgJiYKKwkJZWNobyBvbmUgPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIG9uZSAmJgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCB0YWcgLWYgdHJlbW92ZSBtYXN0ZXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IHRhZyAtZCB0cmVtb3ZlICYmCisJCWdpdCB0YWcgdGFkZCBtYXN0ZXIgJiYKKwkJZWNobyB0d28gPmZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tIHR3byAmJgorCQlnaXQgdGFnIC1mIHRtYXN0ZXIgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwCisJKSAmJgorCW1hc3Rlcl9tYXN0ZXI9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCW1hc3Rlcl9hZGQ9JChjZCBtYXN0ZXIgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90YWRkKSAmJgorCW1pcnJvcl9tYXN0ZXI9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90bWFzdGVyKSAmJgorCW1pcnJvcl9hZGQ9JChjZCBtaXJyb3IgJiYgZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvdGFncy90YWRkKSAmJgorCXRlc3QgIiRtYXN0ZXJfbWFzdGVyIiA9ICIkbWlycm9yX21hc3RlciIgJiYKKwl0ZXN0ICIkbWFzdGVyX2FkZCIgPSAiJG1pcnJvcl9hZGQiICYmCisJKAorCQljZCBtaXJyb3IgJiYKKwkJaW52ZXJ0IGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL3RhZ3MvdHJlbW92ZQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUuZm9vLm1pcnJvciBhZGRzIGFuZCByZW1vdmVzIGJyYW5jaGVzJyAnCisKKwlta19yZXBvX3BhaXIgLS1taXJyb3IgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCBicmFuY2gga2VlcCBtYXN0ZXIgJiYKKwkJZ2l0IGJyYW5jaCByZW1vdmUgbWFzdGVyICYmCisJCWdpdCBwdXNoIHVwICYmCisJCWdpdCBicmFuY2ggLUQgcmVtb3ZlCisJCWdpdCBwdXNoIHVwCisJKSAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL2tlZXAgJiYKKwkJaW52ZXJ0IGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL3JlbW92ZQorCSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUuZm9vLm1pcnJvcj1ubyBoYXMgbm8gZWZmZWN0JyAnCisKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIG1hc3RlciAmJgorCQllY2hvIG9uZSA+Zm9vICYmIGdpdCBhZGQgZm9vICYmIGdpdCBjb21taXQgLW0gb25lICYmCisJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLnVwLm1pcnJvciBubyAmJgorCQlnaXQgYnJhbmNoIGtlZXAgbWFzdGVyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCWdpdCBicmFuY2ggLUQga2VlcCAmJgorCQlnaXQgcHVzaCB1cCA6CisJKSAmJgorCSgKKwkJY2QgbWlycm9yICYmCisJCWdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL2tlZXAKKwkpCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTE4LWZldGNoLWV4aXQtc3RhdHVzLnNoIGIvdC90NTUxOC1mZXRjaC1leGl0LXN0YXR1cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMjA2MGJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUxOC1mZXRjaC1leGl0LXN0YXR1cy5zaApAQCAtMCwwICsxLDM3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IERtaXRyeSBWLiBMZXZpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaCBleGl0IHN0YXR1cyB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwllY2hvIHNpZGUgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHNpZGUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIG5leHQgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG5leHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9uLWZhc3QtZm9yd2FyZCBmZXRjaCcgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4gbWFzdGVyOnNpZGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JjZWQgdXBkYXRlJyAnCisKKwlnaXQgZmV0Y2ggLiArbWFzdGVyOnNpZGUKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MTktcHVzaC1hbHRlcm5hdGVzLnNoIGIvdC90NTUxOS1wdXNoLWFsdGVybmF0ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTFmY2QzNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MTktcHVzaC1hbHRlcm5hdGVzLnNoCkBAIC0wLDAgKzEsMTQzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVzaCB0byBhIHJlcG9zaXRvcnkgdGhhdCBib3Jyb3dzIGZyb20gZWxzZXdoZXJlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJbWtkaXIgYWxpY2UtcHViICYmCisJKAorCQljZCBhbGljZS1wdWIgJiYKKwkJR0lUX0RJUj0uIGdpdCBpbml0CisJKSAmJgorCW1rZGlyIGFsaWNlLXdvcmsgJiYKKwkoCisJCWNkIGFsaWNlLXdvcmsgJiYKKwkJZ2l0IGluaXQgJiYKKwkJPmZpbGUgJiYKKwkJZ2l0IGFkZCAuICYmCisJCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCQlnaXQgcHVzaCAuLi9hbGljZS1wdWIgbWFzdGVyCisJKSAmJgorCisJIyBQcm9qZWN0IEJvYiBpcyBhIGZvcmsgb2YgcHJvamVjdCBBbGljZQorCW1rZGlyIGJvYi1wdWIgJiYKKwkoCisJCWNkIGJvYi1wdWIgJiYKKwkJR0lUX0RJUj0uIGdpdCBpbml0ICYmCisJCW1rZGlyIC1wIG9iamVjdHMvaW5mbyAmJgorCQllY2hvIC4uLy4uL2FsaWNlLXB1Yi9vYmplY3RzID5vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworCSkgJiYKKwlnaXQgY2xvbmUgYWxpY2UtcHViIGJvYi13b3JrICYmCisJKAorCQljZCBib2Itd29yayAmJgorCQlnaXQgcHVzaCAuLi9ib2ItcHViIG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpY2Ugd29ya3MgYW5kIHB1c2hlcycgJworCSgKKwkJY2QgYWxpY2Utd29yayAmJgorCQllY2hvIG1vcmUgPmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBzZWNvbmQgJiYKKwkJZ2l0IHB1c2ggLi4vYWxpY2UtcHViIDoKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JvYiBmZXRjaGVzIGZyb20gYWxpY2UsIHdvcmtzIGFuZCBwdXNoZXMnICcKKwkoCisJCSMgQm9iIGFjcXVpcmVzIHdoYXQgQWxpY2UgZGlkIGluIGhpcyB3b3JrIHRyZWUgZmlyc3QuCisJCSMgRXZlbiB0aG91Z2ggdGhlc2Ugb2JqZWN0cyBhcmUgbm90IGRpcmVjdGx5IGluCisJCSMgdGhlIHB1YmxpYyByZXBvc2l0b3J5IG9mIEJvYiwgdGhpcyBwdXNoIGRvZXMgbm90CisJCSMgbmVlZCB0byBzZW5kIHRoZSBjb21taXQgQm9iIHJlY2VpdmVkIGZyb20gQWxpY2UKKwkJIyB0byBoaXMgcHVibGljIHJlcG9zaXRvcnksIGFzIGFsbCB0aGUgb2JqZWN0IEFsaWNlCisJCSMgaGFzIGF0IGhlciBwdWJsaWMgcmVwb3NpdG9yeSBhcmUgYXZhaWxhYmxlIHRvIGl0CisJCSMgdmlhIGl0cyBhbHRlcm5hdGVzLgorCQljZCBib2Itd29yayAmJgorCQlnaXQgcHVsbCAuLi9hbGljZS1wdWIgbWFzdGVyICYmCisJCWVjaG8gbW9yZSBib2IgPmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSB0aGlyZCAmJgorCQlnaXQgcHVzaCAuLi9ib2ItcHViIDoKKwkpICYmCisKKwkjIENoZWNrIHRoYXQgdGhlIHNlY29uZCBjb21taXQgYnkgQWxpY2UgaXMgbm90IHNlbnQKKwkjIHRvIC4uL2JvYi1wdWIKKwkoCisJCWNkIGJvYi1wdWIgJiYKKwkJc2Vjb25kPSQoZ2l0IHJldi1wYXJzZSBIRUFEXikgJiYKKwkJcm0gLWYgb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNhdC1maWxlIC10ICRzZWNvbmQgJiYKKwkJZWNobyAuLi8uLi9hbGljZS1wdWIvb2JqZWN0cyA+b2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuLXVwIGluIGNhc2UgdGhlIHByZXZpb3VzIGZhaWxlZCcgJworCSgKKwkJY2QgYm9iLXB1YiAmJgorCQllY2hvIC4uLy4uL2FsaWNlLXB1Yi9vYmplY3RzID5vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpY2Ugd29ya3MgYW5kIHB1c2hlcyBhZ2FpbicgJworCSgKKwkJIyBBbGljZSBkb2VzIG5vdCBjYXJlIHdoYXQgQm9iIGRvZXMuICBTaGUgZG9lcyBub3QKKwkJIyBldmVuIGhhdmUgdG8gYmUgYXdhcmUgb2YgaGlzIGV4aXN0ZW5jZS4gIFNoZSBqdXN0CisJCSMga2VlcHMgd29ya2luZyBhbmQgcHVzaGluZworCQljZCBhbGljZS13b3JrICYmCisJCWVjaG8gbW9yZSBhbGljZSA+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGZvdXJ0aCAmJgorCQlnaXQgcHVzaCAuLi9hbGljZS1wdWIgOgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYm9iIHdvcmtzIGFuZCBwdXNoZXMnICcKKwkoCisJCSMgVGhpcyB0aW1lIEJvYiBkb2VzIG5vdCBwdWxsIGZyb20gQWxpY2UsIGFuZAorCQkjIHRoZSBtYXN0ZXIgYnJhbmNoIGF0IGhlciBwdWJsaWMgcmVwb3NpdG9yeSBwb2ludHMKKwkJIyBhdCBhIGNvbW1pdCBCb2IgZG9lcyBub3Qga25vdyBhYm91dC4gIFRoaXMgc2hvdWxkCisJCSMgbm90IHByZXZlbnQgdGhlIHB1c2ggYnkgQm9iIGZyb20gc3VjY2VlZGluZy4KKwkJY2QgYm9iLXdvcmsgJiYKKwkJZWNobyB5ZXQgbW9yZSBib2IgPmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBmaWZ0aCAmJgorCQlnaXQgcHVzaCAuLi9ib2ItcHViIDoKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FsaWNlIHdvcmtzIGFuZCBwdXNoZXMgeWV0IGFnYWluJyAnCisJKAorCQkjIEFsaWNlIGRvZXMgbm90IGNhcmUgd2hhdCBCb2IgZG9lcy4gIFNoZSBkb2VzIG5vdAorCQkjIGV2ZW4gaGF2ZSB0byBiZSBhd2FyZSBvZiBoaXMgZXhpc3RlbmNlLiAgU2hlIGp1c3QKKwkJIyBrZWVwcyB3b3JraW5nIGFuZCBwdXNoaW5nCisJCWNkIGFsaWNlLXdvcmsgJiYKKwkJZWNobyBtb3JlIGFuZCBtb3JlIGFsaWNlID5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2l4dGguMSAmJgorCQllY2hvIG1vcmUgYW5kIG1vcmUgYWxpY2UgPj5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2l4dGguMiAmJgorCQllY2hvIG1vcmUgYW5kIG1vcmUgYWxpY2UgPj5maWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2l4dGguMyAmJgorCQlnaXQgcHVzaCAuLi9hbGljZS1wdWIgOgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYm9iIHdvcmtzIGFuZCBwdXNoZXMgYWdhaW4nICcKKwkoCisJCWNkIGFsaWNlLXB1YiAmJgorCQlnaXQgY2F0LWZpbGUgY29tbWl0IG1hc3RlciA+Li4vYm9iLXdvcmsvY29tbWl0CisJKSAmJgorCSgKKwkJIyBUaGlzIHRpbWUgQm9iIGRvZXMgbm90IHB1bGwgZnJvbSBBbGljZSwgYW5kCisJCSMgdGhlIG1hc3RlciBicmFuY2ggYXQgaGVyIHB1YmxpYyByZXBvc2l0b3J5IHBvaW50cworCQkjIGF0IGEgY29tbWl0IEJvYiBkb2VzIG5vdCBmdWxseSBrbm93IGFib3V0LCBidXQKKwkJIyBoZSBoYXBwZW5zIHRvIGhhdmUgdGhlIGNvbW1pdCBvYmplY3QgKGJ1dCBub3QgdGhlCisJCSMgbmVjZXNzYXJ5IHRyZWUpIGluIGhpcyByZXBvc2l0b3J5IGZyb20gQWxpY2UuCisJCSMgVGhpcyBzaG91bGQgbm90IHByZXZlbnQgdGhlIHB1c2ggYnkgQm9iIGZyb20KKwkJIyBzdWNjZWVkaW5nLgorCQljZCBib2Itd29yayAmJgorCQlnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IGNvbW1pdCAmJgorCQllY2hvIGV2ZW4gbW9yZSBib2IgPmZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBzZXZlbnRoICYmCisJCWdpdCBwdXNoIC4uL2JvYi1wdWIgOgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTIwLXB1bGwuc2ggYi90L3Q1NTIwLXB1bGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTAwMTNlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjAtcHVsbC5zaApAQCAtMCwwICsxLDUzMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3B1bGxpbmcgaW50byB2b2lkJworCisuIC4vdGVzdC1saWIuc2gKKworbW9kaWZ5ICgpIHsKKwlzZWQgLWUgIiQxIiA8IiQyIiA+IiQyLngiICYmCisJbXYgIiQyLngiICIkMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBmaWxlID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBvcmlnaW5hbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGludG8gdm9pZCcgJworCWdpdCBpbml0IGNsb25lZCAmJgorCSgKKwkJY2QgY2xvbmVkICYmCisJCWdpdCBwdWxsIC4uCisJKSAmJgorCXRlc3QgLWYgZmlsZSAmJgorCXRlc3QgLWYgY2xvbmVkL2ZpbGUgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lZC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgaW50byB2b2lkIHVzaW5nIG1hc3RlcjptYXN0ZXInICcKKwlnaXQgaW5pdCBjbG9uZWQtdWhvICYmCisJKAorCQljZCBjbG9uZWQtdWhvICYmCisJCWdpdCBwdWxsIC4uIG1hc3RlcjptYXN0ZXIKKwkpICYmCisJdGVzdCAtZiBmaWxlICYmCisJdGVzdCAtZiBjbG9uZWQtdWhvL2ZpbGUgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lZC11aG8vZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGludG8gdm9pZCBkb2VzIG5vdCBvdmVyd3JpdGUgdW50cmFja2VkIGZpbGVzJyAnCisJZ2l0IGluaXQgY2xvbmVkLXVudHJhY2tlZCAmJgorCSgKKwkJY2QgY2xvbmVkLXVudHJhY2tlZCAmJgorCQllY2hvIHVudHJhY2tlZCA+ZmlsZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuLiBtYXN0ZXIgJiYKKwkJZWNobyB1bnRyYWNrZWQgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBpbnRvIHZvaWQgZG9lcyBub3Qgb3ZlcndyaXRlIHN0YWdlZCBmaWxlcycgJworCWdpdCBpbml0IGNsb25lZC1zdGFnZWQtY29sbGlkaW5nICYmCisJKAorCQljZCBjbG9uZWQtc3RhZ2VkLWNvbGxpZGluZyAmJgorCQllY2hvICJhbHRlcm5hdGUgY29udGVudCIgPmZpbGUgJiYKKwkJZ2l0IGFkZCBmaWxlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4uIG1hc3RlciAmJgorCQllY2hvICJhbHRlcm5hdGUgY29udGVudCIgPmV4cGVjdCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgZmlsZSAmJgorCQlnaXQgY2F0LWZpbGUgYmxvYiA6ZmlsZSA+ZmlsZS5pbmRleCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgZmlsZS5pbmRleAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBpbnRvIHZvaWQgZG9lcyBub3QgcmVtb3ZlIG5ldyBzdGFnZWQgZmlsZXMnICcKKwlnaXQgaW5pdCBjbG9uZWQtc3RhZ2VkLW5ldyAmJgorCSgKKwkJY2QgY2xvbmVkLXN0YWdlZC1uZXcgJiYKKwkJZWNobyAibmV3IHRyYWNrZWQgZmlsZSIgPm5ld2ZpbGUgJiYKKwkJZ2l0IGFkZCBuZXdmaWxlICYmCisJCWdpdCBwdWxsIC4uIG1hc3RlciAmJgorCQllY2hvICJuZXcgdHJhY2tlZCBmaWxlIiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBuZXdmaWxlICYmCisJCWdpdCBjYXQtZmlsZSBibG9iIDpuZXdmaWxlID5uZXdmaWxlLmluZGV4ICYmCisJCXRlc3RfY21wIGV4cGVjdCBuZXdmaWxlLmluZGV4CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGludG8gdm9pZCBtdXN0IG5vdCBjcmVhdGUgYW4gb2N0b3B1cycgJworCWdpdCBpbml0IGNsb25lZC1vY3RvcHVzICYmCisJKAorCQljZCBjbG9uZWQtb2N0b3B1cyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuLiBtYXN0ZXIgbWFzdGVyICYmCisJCSEgdGVzdCAtZiBmaWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC4gYXMgYSByZW1vdGUnICcKKwlnaXQgYnJhbmNoIGNvcHkgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBicmFuY2guY29weS5yZW1vdGUgLiAmJgorCWdpdCBjb25maWcgYnJhbmNoLmNvcHkubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwllY2hvIHVwZGF0ZWQgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHVwZGF0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgY29weSAmJgorCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUgJiYKKwlnaXQgcHVsbCAmJgorCXRlc3QgIiQoY2F0IGZpbGUpIiA9IHVwZGF0ZWQgJiYKKwlnaXQgcmVmbG9nIC0xID5yZWZsb2cuYWN0dWFsICYmCisJc2VkICJzL15bMC05YS1mXVswLTlhLWZdKi9PQkpJRC8iIHJlZmxvZy5hY3R1YWwgPnJlZmxvZy5mdXp6eSAmJgorCWVjaG8gIk9CSklEIEhFQURAezB9OiBwdWxsOiBGYXN0LWZvcndhcmQiID5yZWZsb2cuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCByZWZsb2cuZXhwZWN0ZWQgcmVmbG9nLmZ1enp5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoZSBkZWZhdWx0IHJlbW90ZSAuIHNob3VsZCBub3QgYnJlYWsgZXhwbGljaXQgcHVsbCcgJworCWdpdCBjaGVja291dCAtYiBzZWNvbmQgbWFzdGVyXiAmJgorCWVjaG8gbW9kaWZpZWQgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG1vZGlmaWVkICYmCisJZ2l0IGNoZWNrb3V0IGNvcHkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCWdpdCBwdWxsIC4gc2Vjb25kICYmCisJdGVzdCAiJChjYXQgZmlsZSkiID0gbW9kaWZpZWQgJiYKKwlnaXQgcmVmbG9nIC0xID5yZWZsb2cuYWN0dWFsICYmCisJc2VkICJzL15bMC05YS1mXVswLTlhLWZdKi9PQkpJRC8iIHJlZmxvZy5hY3R1YWwgPnJlZmxvZy5mdXp6eSAmJgorCWVjaG8gIk9CSklEIEhFQURAezB9OiBwdWxsIC4gc2Vjb25kOiBGYXN0LWZvcndhcmQiID5yZWZsb2cuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCByZWZsb2cuZXhwZWN0ZWQgcmVmbG9nLmZ1enp5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgd2lsZGNhcmQgc3BlYyBkb2VzIG5vdCBtYXRjaCBhbnkgcmVmcycgJworCWdpdCBjaGVja291dCAtYiB0ZXN0IGNvcHleICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRlc3QiICYmCisJdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gInJlZnMvbm9uZXhpc3RpbmcxLyo6cmVmcy9ub25leGlzdGluZzIvKiIgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJubyBjYW5kaWRhdGVzIGZvciBtZXJnaW5nIiBlcnIgJiYKKwl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgbm8gYnJhbmNoZXMgc3BlY2lmaWVkIHdpdGggbm9uLWRlZmF1bHQgcmVtb3RlJyAnCisJZ2l0IHJlbW90ZSBhZGQgdGVzdF9yZW1vdGUgLiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlbW90ZSByZW1vdmUgdGVzdF9yZW1vdGUiICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QgY29weV4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5ICYmIGdpdCBicmFuY2ggLUQgdGVzdCIgJiYKKwl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QucmVtb3RlIG9yaWdpbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIHRlc3RfcmVtb3RlIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAic3BlY2lmeSBhIGJyYW5jaCBvbiB0aGUgY29tbWFuZCBsaW5lIiBlcnIgJiYKKwl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgbm90IG9uIGEgYnJhbmNoJyAnCisJZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIC4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZW1vdGUgcmVtb3ZlIG9yaWdpbiIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5IiAmJgorCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdCBjdXJyZW50bHkgb24gYSBicmFuY2giIGVyciAmJgorCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiBubyBjb25maWd1cmF0aW9uIGZvciBjdXJyZW50IGJyYW5jaCcgJworCWdpdCByZW1vdGUgYWRkIHRlc3RfcmVtb3RlIC4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZW1vdGUgcmVtb3ZlIHRlc3RfcmVtb3RlIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0IGNvcHleICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRlc3QiICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QucmVtb3RlIHRlc3RfcmVtb3RlICYmCisJdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibm8gdHJhY2tpbmcgaW5mb3JtYXRpb24iIGVyciAmJgorCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLWFsbDogZmFpbCBpZiBubyBjb25maWd1cmF0aW9uIGZvciBjdXJyZW50IGJyYW5jaCcgJworCWdpdCByZW1vdGUgYWRkIHRlc3RfcmVtb3RlIC4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZW1vdGUgcmVtb3ZlIHRlc3RfcmVtb3RlIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0IGNvcHleICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLWYgY29weSAmJiBnaXQgYnJhbmNoIC1EIHRlc3QiICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QucmVtb3RlIHRlc3RfcmVtb3RlICYmCisJdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tYWxsIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiVGhlcmUgaXMgbm8gdHJhY2tpbmcgaW5mb3JtYXRpb24iIGVyciAmJgorCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpZiB1cHN0cmVhbSBicmFuY2ggZG9lcyBub3QgZXhpc3QnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdCBjb3B5XiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0ZXN0IiAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC50ZXN0LnJlbW90ZSAuICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRlc3QubWVyZ2UgcmVmcy9oZWFkcy9ub25leGlzdGluZyAmJgorCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIm5vIHN1Y2ggcmVmIHdhcyBmZXRjaGVkIiBlcnIgJiYKKwl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgaWYgdGhlIGluZGV4IGhhcyB1bnJlc29sdmVkIGVudHJpZXMnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGhpcmQgc2Vjb25kXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIGNvcHkgJiYgZ2l0IGJyYW5jaCAtRCB0aGlyZCIgJiYKKwl0ZXN0ICIkKGNhdCBmaWxlKSIgPSBmaWxlICYmCisJdGVzdF9jb21taXQgbW9kaWZpZWQyIGZpbGUgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLiBzZWNvbmQgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJY3AgZmlsZSBleHBlY3RlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gc2Vjb25kIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiUHVsbCBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB5b3UgaGF2ZSB1bm1lcmdlZCBmaWxlcyIgZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIHNlY29uZCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIllvdSBoYXZlIG5vdCBjb25jbHVkZWQgeW91ciBtZXJnZSIgZXJyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmRzIHdvcmtpbmcgdHJlZSBpZiBicmFuY2ggaGVhZCBpcyB1cGRhdGVkJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRoaXJkIHNlY29uZF4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5ICYmIGdpdCBicmFuY2ggLUQgdGhpcmQiICYmCisJdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCWdpdCBwdWxsIC4gc2Vjb25kOnRoaXJkIDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiZmV0Y2ggdXBkYXRlZCB0aGUgY3VycmVudCBicmFuY2ggaGVhZCIgZXJyICYmCisJdGVzdCAiJChjYXQgZmlsZSkiID0gbW9kaWZpZWQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgdGhpcmQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1mb3J3YXJkIGZhaWxzIHdpdGggY29uZmxpY3Rpbmcgd29yayB0cmVlJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRoaXJkIHNlY29uZF4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBjb3B5ICYmIGdpdCBicmFuY2ggLUQgdGhpcmQiICYmCisJdGVzdCAiJChjYXQgZmlsZSkiID0gZmlsZSAmJgorCWVjaG8gY29uZmxpY3QgPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAuIHNlY29uZDp0aGlyZCAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgIkNhbm5vdCBmYXN0LWZvcndhcmQgeW91ciB3b3JraW5nIHRyZWUiIGVyciAmJgorCXRlc3QgIiQoY2F0IGZpbGUpIiA9IGNvbmZsaWN0ICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIHRoaXJkKSIgPSAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlJyAnCisJZ2l0IGJyYW5jaCB0by1yZWJhc2UgJiYKKwllY2hvIG1vZGlmaWVkIGFnYWluID4gZmlsZSAmJgorCWdpdCBjb21taXQgLW0gZmlsZSBmaWxlICYmCisJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgorCWVjaG8gbmV3ID4gZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IGZpbGUiICYmCisJZ2l0IHRhZyBiZWZvcmUtcmViYXNlICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLiBjb3B5ICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgorCXRlc3QgbmV3ID0gIiQoZ2l0IHNob3cgSEVBRDpmaWxlMikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIGZhaWxzIHdpdGggbXVsdGlwbGUgYnJhbmNoZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZSAuIGNvcHkgbWFzdGVyIDI+ZXJyICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgYmVmb3JlLXJlYmFzZSkiICYmCisJdGVzdF9pMThuZ3JlcCAiQ2Fubm90IHJlYmFzZSBvbnRvIG11bHRpcGxlIGJyYW5jaGVzIiBlcnIgJiYKKwl0ZXN0IG1vZGlmaWVkID0gIiQoZ2l0IHNob3cgSEVBRDpmaWxlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCAtLXJlYmFzZSBzdWNjZWVkcyB3aXRoIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCByZWJhc2UuYXV0b3N0YXNoIHNldCcgJworCXRlc3RfY29uZmlnIHJlYmFzZS5hdXRvc3Rhc2ggdHJ1ZSAmJgorCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCWVjaG8gZGlydHkgPm5ld19maWxlICYmCisJZ2l0IGFkZCBuZXdfZmlsZSAmJgorCWdpdCBwdWxsIC0tcmViYXNlIC4gY29weSAmJgorCXRlc3RfY21wX3JldiBIRUFEXiBjb3B5ICYmCisJdGVzdCAiJChjYXQgbmV3X2ZpbGUpIiA9IGRpcnR5ICYmCisJdGVzdCAiJChjYXQgZmlsZSkiID0gIm1vZGlmaWVkIGFnYWluIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsLnJlYmFzZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKKwlnaXQgcHVsbCAuIGNvcHkgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCisJdGVzdCBuZXcgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoLnRvLXJlYmFzZS5yZWJhc2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1yZWJhc2UgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gudG8tcmViYXNlLnJlYmFzZSB0cnVlICYmCisJZ2l0IHB1bGwgLiBjb3B5ICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgorCXRlc3QgbmV3ID0gIiQoZ2l0IHNob3cgSEVBRDpmaWxlMikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYW5jaC50by1yZWJhc2UucmViYXNlIHNob3VsZCBvdmVycmlkZSBwdWxsLnJlYmFzZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gudG8tcmViYXNlLnJlYmFzZSBmYWxzZSAmJgorCWdpdCBwdWxsIC4gY29weSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXikiICE9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCisJdGVzdCBuZXcgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUyKSIKKycKKworIyBhZGQgYSBmZWF0dXJlIGJyYW5jaCwga2VlcC1tZXJnZSwgdGhhdCBpcyBtZXJnZWQgaW50byBtYXN0ZXIsIHNvIHRoZQorIyB0ZXN0IGNhbiB0cnkgcHJlc2VydmluZyB0aGUgbWVyZ2UgY29tbWl0IChvciBub3QpIHdpdGggdmFyaW91cworIyAtLXJlYmFzZSBmbGFncy9wdWxsLnJlYmFzZSBzZXR0aW5ncy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXNlcnZlIG1lcmdlIHNldHVwJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcmViYXNlICYmCisJZ2l0IGNoZWNrb3V0IC1iIGtlZXAtbWVyZ2Ugc2Vjb25kXiAmJgorCXRlc3RfY29tbWl0IGZpbGUzICYmCisJZ2l0IGNoZWNrb3V0IHRvLXJlYmFzZSAmJgorCWdpdCBtZXJnZSBrZWVwLW1lcmdlICYmCisJZ2l0IHRhZyBiZWZvcmUtcHJlc2VydmUtcmViYXNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlPWZhbHNlIGNyZWF0ZSBhIG5ldyBtZXJnZSBjb21taXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSBmYWxzZSAmJgorCWdpdCBwdWxsIC4gY29weSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjEpIiA9ICIkKGdpdCByZXYtcGFyc2UgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiID0gIiQoZ2l0IHJldi1wYXJzZSBjb3B5KSIgJiYKKwl0ZXN0IGZpbGUzID0gIiQoZ2l0IHNob3cgSEVBRDpmaWxlMy50KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbC5yZWJhc2U9dHJ1ZSBmbGF0dGVucyBrZWVwLW1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgdHJ1ZSAmJgorCWdpdCBwdWxsIC4gY29weSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCisJdGVzdCBmaWxlMyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTMudCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlPTEgaXMgdHJlYXRlZCBhcyB0cnVlIGFuZCBmbGF0dGVucyBrZWVwLW1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgMSAmJgorCWdpdCBwdWxsIC4gY29weSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXl4pIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCisJdGVzdCBmaWxlMyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTMudCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlPXByZXNlcnZlIHJlYmFzZXMgYW5kIG1lcmdlcyBrZWVwLW1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBiZWZvcmUtcHJlc2VydmUtcmViYXNlICYmCisJdGVzdF9jb25maWcgcHVsbC5yZWJhc2UgcHJlc2VydmUgJiYKKwlnaXQgcHVsbCAuIGNvcHkgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2Uga2VlcC1tZXJnZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwucmViYXNlPWludmFsaWQgZmFpbHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLnJlYmFzZSBpbnZhbGlkICYmCisJISBnaXQgcHVsbCAuIGNvcHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2U9ZmFsc2UgY3JlYXRlIGEgbmV3IG1lcmdlIGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZT1mYWxzZSAuIGNvcHkgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgPSAiJChnaXQgcmV2LXBhcnNlIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2UgY29weSkiICYmCisJdGVzdCBmaWxlMyA9ICIkKGdpdCBzaG93IEhFQUQ6ZmlsZTMudCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlPXRydWUgcmViYXNlcyBhbmQgZmxhdHRlbnMga2VlcC1tZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHByZXNlcnZlICYmCisJZ2l0IHB1bGwgLS1yZWJhc2U9dHJ1ZSAuIGNvcHkgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgorCXRlc3QgZmlsZTMgPSAiJChnaXQgc2hvdyBIRUFEOmZpbGUzLnQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlYmFzZT1wcmVzZXJ2ZSByZWJhc2VzIGFuZCBtZXJnZXMga2VlcC1tZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHRydWUgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZT1wcmVzZXJ2ZSAuIGNvcHkgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSIgPSAiJChnaXQgcmV2LXBhcnNlIGNvcHkpIiAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpIiA9ICIkKGdpdCByZXYtcGFyc2Uga2VlcC1tZXJnZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlPWludmFsaWQgZmFpbHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGJlZm9yZS1wcmVzZXJ2ZS1yZWJhc2UgJiYKKwkhIGdpdCBwdWxsIC0tcmViYXNlPWludmFsaWQgLiBjb3B5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIG92ZXJyaWRlcyBwdWxsLnJlYmFzZT1wcmVzZXJ2ZSBhbmQgZmxhdHRlbnMga2VlcC1tZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYmVmb3JlLXByZXNlcnZlLXJlYmFzZSAmJgorCXRlc3RfY29uZmlnIHB1bGwucmViYXNlIHByZXNlcnZlICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLiBjb3B5ICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReXikiID0gIiQoZ2l0IHJldi1wYXJzZSBjb3B5KSIgJiYKKwl0ZXN0IGZpbGUzID0gIiQoZ2l0IHNob3cgSEVBRDpmaWxlMy50KSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2Ugd2l0aCByZWJhc2VkIHVwc3RyZWFtJyAnCisKKwlnaXQgcmVtb3RlIGFkZCAtZiBtZSAuICYmCisJZ2l0IGNoZWNrb3V0IGNvcHkgJiYKKwlnaXQgdGFnIGNvcHktb3JpZyAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwllY2hvIGNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiA+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGNvbmZsaWN0IGZpbGUgJiYKKwlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCisJZWNobyBmaWxlID4gZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1tIHRvLXJlYmFzZSBmaWxlMiAmJgorCWdpdCB0YWcgdG8tcmViYXNlLW9yaWcgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSBtZSBjb3B5ICYmCisJdGVzdCAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA9ICIkKGNhdCBmaWxlKSIgJiYKKwl0ZXN0IGZpbGUgPSAiJChjYXQgZmlsZTIpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmViYXNlIC1mIHdpdGggcmViYXNlZCB1cHN0cmVhbScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF9taWdodF9mYWlsIGdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLWYgbWUgY29weSAmJgorCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCisJdGVzdCBmaWxlID0gIiQoY2F0IGZpbGUyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1yZWJhc2Ugd2l0aCByZWJhc2VkIGRlZmF1bHQgdXBzdHJlYW0nICcKKworCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9tZS9jb3B5IGNvcHktb3JpZyAmJgorCWdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRvLXJlYmFzZTIgbWUvY29weSAmJgorCWdpdCByZXNldCAtLWhhcmQgdG8tcmViYXNlLW9yaWcgJiYKKwlnaXQgcHVsbCAtLXJlYmFzZSAmJgorCXRlc3QgImNvbmZsaWN0aW5nIG1vZGlmaWNhdGlvbiIgPSAiJChjYXQgZmlsZSkiICYmCisJdGVzdCBmaWxlID0gIiQoY2F0IGZpbGUyKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2VkIHVwc3RyZWFtICsgZmV0Y2ggKyBwdWxsIC0tcmViYXNlJyAnCisKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3JlbW90ZXMvbWUvY29weSBjb3B5LW9yaWcgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHRvLXJlYmFzZS1vcmlnICYmCisJZ2l0IGNoZWNrb3V0IC0tdHJhY2sgLWIgdG8tcmViYXNlMyBtZS9jb3B5ICYmCisJZ2l0IHJlc2V0IC0taGFyZCB0by1yZWJhc2Utb3JpZyAmJgorCWdpdCBmZXRjaCAmJgorCWdpdCBwdWxsIC0tcmViYXNlICYmCisJdGVzdCAiY29uZmxpY3RpbmcgbW9kaWZpY2F0aW9uIiA9ICIkKGNhdCBmaWxlKSIgJiYKKwl0ZXN0IGZpbGUgPSAiJChjYXQgZmlsZTIpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2UgZGllcyBlYXJseSB3aXRoIGRpcnR5IHdvcmtpbmcgZGlyZWN0b3J5JyAnCisKKwlnaXQgY2hlY2tvdXQgdG8tcmViYXNlICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL21lL2NvcHkgY29weV4gJiYKKwlDT1BZPSIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWUvY29weSkiICYmCisJZ2l0IHJlYmFzZSAtLW9udG8gJENPUFkgY29weSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC50by1yZWJhc2UucmVtb3RlIG1lICYmCisJdGVzdF9jb25maWcgYnJhbmNoLnRvLXJlYmFzZS5tZXJnZSByZWZzL2hlYWRzL2NvcHkgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gudG8tcmViYXNlLnJlYmFzZSB0cnVlICYmCisJZWNobyBkaXJ0eSA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgJiYKKwl0ZXN0ICIkQ09QWSIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1lL2NvcHkpIiAmJgorCWdpdCBjaGVja291dCBIRUFEIC0tIGZpbGUgJiYKKwlnaXQgcHVsbCAmJgorCXRlc3QgIiRDT1BZIiAhPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1lL2NvcHkpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgLS1yZWJhc2Ugd29ya3Mgb24gYnJhbmNoIHlldCB0byBiZSBib3JuJyAnCisJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPmV4cGVjdCAmJgorCW1rZGlyIGVtcHR5X3JlcG8gJiYKKwkoY2QgZW1wdHlfcmVwbyAmJgorCSBnaXQgaW5pdCAmJgorCSBnaXQgcHVsbCAtLXJlYmFzZSAuLiBtYXN0ZXIgJiYKKwkgZ2l0IHJldi1wYXJzZSBIRUFEID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIC0tcmViYXNlIGZhaWxzIG9uIHVuYm9ybiBicmFuY2ggd2l0aCBzdGFnZWQgY2hhbmdlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGVtcHR5X3JlcG8yIiAmJgorCWdpdCBpbml0IGVtcHR5X3JlcG8yICYmCisJKAorCQljZCBlbXB0eV9yZXBvMiAmJgorCQllY2hvIHN0YWdlZC1maWxlID5zdGFnZWQtZmlsZSAmJgorCQlnaXQgYWRkIHN0YWdlZC1maWxlICYmCisJCXRlc3QgIiQoZ2l0IGxzLWZpbGVzKSIgPSBzdGFnZWQtZmlsZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVsbCAtLXJlYmFzZSAuLiBtYXN0ZXIgMj5lcnIgJiYKKwkJdGVzdCAiJChnaXQgbHMtZmlsZXMpIiA9IHN0YWdlZC1maWxlICYmCisJCXRlc3QgIiQoZ2l0IHNob3cgOnN0YWdlZC1maWxlKSIgPSBzdGFnZWQtZmlsZSAmJgorCQl0ZXN0X2kxOG5ncmVwICJ1bmJvcm4gYnJhbmNoIHdpdGggY2hhbmdlcyBhZGRlZCB0byB0aGUgaW5kZXgiIGVycgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIGRldGVjdGluZyB1cHN0cmVhbWVkIGNoYW5nZXMnICcKKwlta2RpciBzcmMgJiYKKwkoY2Qgc3JjICYmCisJIGdpdCBpbml0ICYmCisJIHByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuMTBcbiIgPiBzdHVmZiAmJgorCSBnaXQgYWRkIHN0dWZmICYmCisJIGdpdCBjb21taXQgLW0gIkluaXRpYWwgcmV2aXNpb24iCisJKSAmJgorCWdpdCBjbG9uZSBzcmMgZHN0ICYmCisJKGNkIHNyYyAmJgorCSBtb2RpZnkgcy81LzQzLyBzdHVmZiAmJgorCSBnaXQgY29tbWl0IC1hIC1tICI1LT40MyIgJiYKKwkgbW9kaWZ5IHMvNi80Mi8gc3R1ZmYgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiTWFrZSBpdCBiaWdnZXIiCisJKSAmJgorCShjZCBkc3QgJiYKKwkgbW9kaWZ5IHMvNS80My8gc3R1ZmYgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiSW5kZXBlbmRlbnQgZGlzY292ZXJ5IG9mIDUtPjQzIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1yZWJhc2UgZGV0ZWN0cyB1cHN0cmVhbWVkIGNoYW5nZXMnICcKKwkoY2QgZHN0ICYmCisJIGdpdCBwdWxsIC0tcmViYXNlICYmCisJIHRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC11KSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBhdm9pZGluZyByZWFwcGx5aW5nIG9sZCBwYXRjaGVzJyAnCisJKGNkIGRzdCAmJgorCSB0ZXN0X21pZ2h0X2ZhaWwgZ2l0IHJlYmFzZSAtLWFib3J0ICYmCisJIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luL21hc3RlcgorCSkgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIHNyYyBzcmMtcmVwbGFjZS5naXQgJiYKKwlybSAtcmYgc3JjICYmCisJbXYgc3JjLXJlcGxhY2UuZ2l0IHNyYyAmJgorCShjZCBkc3QgJiYKKwkgbW9kaWZ5IHMvMi8yMi8gc3R1ZmYgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiQ2hhbmdlIDIiICYmCisJIG1vZGlmeSBzLzMvMzMvIHN0dWZmICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkNoYW5nZSAzIiAmJgorCSBtb2RpZnkgcy80LzQ0LyBzdHVmZiAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJDaGFuZ2UgNCIgJiYKKwkgZ2l0IHB1c2ggJiYKKworCSBtb2RpZnkgcy80NC81NS8gc3R1ZmYgJiYKKwkgZ2l0IGNvbW1pdCAtLWFtZW5kIC1hIC1tICJNb2RpZmllZCBDaGFuZ2UgNCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tcmViYXNlIGRvZXMgbm90IHJlYXBwbHkgb2xkIHBhdGNoZXMnICcKKwkoY2QgZHN0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC0tcmViYXNlICYmCisJIHRlc3QgMSA9ICQoZmluZCAuZ2l0L3JlYmFzZS1hcHBseSAtbmFtZSAiMDAwKiIgfCB3YyAtbCkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tcmViYXNlIGFnYWluc3QgbG9jYWwgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGNvcHkyIHRvLXJlYmFzZS1vcmlnICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgLiB0by1yZWJhc2UgJiYKKwl0ZXN0ICJjb25mbGljdGluZyBtb2RpZmljYXRpb24iID0gIiQoY2F0IGZpbGUpIiAmJgorCXRlc3QgZmlsZSA9ICIkKGNhdCBmaWxlMikiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyMS1wdWxsLW9wdGlvbnMuc2ggYi90L3Q1NTIxLXB1bGwtb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xODM3MmNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyMS1wdWxsLW9wdGlvbnMuc2gKQEAgLTAsMCArMSwxNDcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdWxsIG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIHBhcmVudCAmJgorCShjZCBwYXJlbnQgJiYgZ2l0IGluaXQgJiYKKwkgZWNobyBvbmUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gb25lKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtcScgJworCW1rZGlyIGNsb25lZHEgJiYKKwkoY2QgY2xvbmVkcSAmJiBnaXQgaW5pdCAmJgorCWdpdCBwdWxsIC1xICIuLi9wYXJlbnQiID5vdXQgMj5lcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXEgLS1yZWJhc2UnICcKKwlta2RpciBjbG9uZWRxcmIgJiYKKwkoY2QgY2xvbmVkcXJiICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLXEgLS1yZWJhc2UgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0ICYmCisJZ2l0IHB1bGwgLXEgLS1yZWJhc2UgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCcgJworCW1rZGlyIGNsb25lZCAmJgorCShjZCBjbG9uZWQgJiYgZ2l0IGluaXQgJiYKKwlnaXQgcHVsbCAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCisJdGVzdCAtcyBlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLXJlYmFzZScgJworCW1rZGlyIGNsb25lZHJiICYmCisJKGNkIGNsb25lZHJiICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLS1yZWJhc2UgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3QgLXMgZXJyICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IG91dCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLXYnICcKKwlta2RpciBjbG9uZWR2ICYmCisJKGNkIGNsb25lZHYgJiYgZ2l0IGluaXQgJiYKKwlnaXQgcHVsbCAtdiAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCisJdGVzdCAtcyBlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtdiAtLXJlYmFzZScgJworCW1rZGlyIGNsb25lZHZyYiAmJgorCShjZCBjbG9uZWR2cmIgJiYgZ2l0IGluaXQgJiYKKwlnaXQgcHVsbCAtdiAtLXJlYmFzZSAiLi4vcGFyZW50IiA+b3V0IDI+ZXJyICYmCisJdGVzdCAtcyBlcnIgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgb3V0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtdiAtcScgJworCW1rZGlyIGNsb25lZHZxICYmCisJKGNkIGNsb25lZHZxICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLXYgLXEgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgZXJyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtcSAtdicgJworCW1rZGlyIGNsb25lZHF2ICYmCisJKGNkIGNsb25lZHF2ICYmIGdpdCBpbml0ICYmCisJZ2l0IHB1bGwgLXEgLXYgIi4uL3BhcmVudCIgPm91dCAyPmVyciAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBvdXQgJiYKKwl0ZXN0IC1zIGVycikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHB1bGwgLS1mb3JjZScgJworCW1rZGlyIGNsb25lZG9sZHN0eWxlICYmCisJKGNkIGNsb25lZG9sZHN0eWxlICYmIGdpdCBpbml0ICYmCisJY2F0ID4+LmdpdC9jb25maWcgPDwtXEVPRiAmJgorCVtyZW1vdGUgIm9uZSJdCisJCXVybCA9IC4uL3BhcmVudAorCQlmZXRjaCA9IHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvbWlycm9yCisJW3JlbW90ZSAidHdvIl0KKwkJdXJsID0gLi4vcGFyZW50CisJCWZldGNoID0gcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy9vcmlnaW4KKwlbYnJhbmNoICJtYXN0ZXIiXQorCQlyZW1vdGUgPSB0d28KKwkJbWVyZ2UgPSByZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCWdpdCBwdWxsIHR3byAmJgorCXRlc3RfY29tbWl0IEEgJiYKKwlnaXQgYnJhbmNoIC1mIG9yaWdpbiAmJgorCWdpdCBwdWxsIC0tYWxsIC0tZm9yY2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tYWxsJyAnCisJbWtkaXIgY2xvbmVkbXVsdGkgJiYKKwkoY2QgY2xvbmVkbXVsdGkgJiYgZ2l0IGluaXQgJiYKKwljYXQgPj4uZ2l0L2NvbmZpZyA8PC1cRU9GICYmCisJW3JlbW90ZSAib25lIl0KKwkJdXJsID0gLi4vcGFyZW50CisJCWZldGNoID0gcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vbmUvKgorCVtyZW1vdGUgInR3byJdCisJCXVybCA9IC4uL3BhcmVudAorCQlmZXRjaCA9IHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvdHdvLyoKKwlbYnJhbmNoICJtYXN0ZXIiXQorCQlyZW1vdGUgPSBvbmUKKwkJbWVyZ2UgPSByZWZzL2hlYWRzL21hc3RlcgorCUVPRgorCWdpdCBwdWxsIC0tYWxsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcHVsbCAtLWRyeS1ydW4nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBjbG9uZWRyeSIgJiYKKwlnaXQgaW5pdCBjbG9uZWRyeSAmJgorCSgKKwkJY2QgY2xvbmVkcnkgJiYKKwkJZ2l0IHB1bGwgLS1kcnktcnVuIC4uL3BhcmVudCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L0ZFVENIX0hFQUQgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9yZWZzL2hlYWRzL21hc3RlciAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2luZGV4ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwdWxsIC0tYWxsIC0tZHJ5LXJ1bicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGNsb25lZGRyeSIgJiYKKwlnaXQgaW5pdCBjbG9uZWRyeSAmJgorCSgKKwkJY2QgY2xvbmVkcnkgJiYKKwkJZ2l0IHJlbW90ZSBhZGQgb3JpZ2luIC4uL3BhcmVudCAmJgorCQlnaXQgcHVsbCAtLWFsbCAtLWRyeS1ydW4gJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9GRVRDSF9IRUFEICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9pbmRleCAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjItcHVsbC1zeW1saW5rLnNoIGIvdC90NTUyMi1wdWxsLXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGU5YjIwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjItcHVsbC1zeW1saW5rLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwdWxsaW5nIGZyb20gc3ltbGlua2VkIHN1YmRpcicKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgVGhlIHNjZW5hcmlvIHdlIGFyZSBidWlsZGluZzoKKyMKKyMgICB0cmFzaFwgZGlyZWN0b3J5LworIyAgICAgY2xvbmUtcmVwby8KKyMgICAgICAgc3ViZGlyLworIyAgICAgICAgIGJhcgorIyAgICAgc3ViZGlyLWxpbmsgLT4gY2xvbmUtcmVwby9zdWJkaXIvCisjCisjIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBpcyBzdWJkaXItbGluay4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyBzZXR1cCAnCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyBmaWxlID5zdWJkaXIvZmlsZSAmJgorCWdpdCBhZGQgc3ViZGlyL2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1xIC1tIGZpbGUgJiYKKwlnaXQgY2xvbmUgLXEgLiBjbG9uZS1yZXBvICYmCisJbG4gLXMgY2xvbmUtcmVwby9zdWJkaXIvIHN1YmRpci1saW5rICYmCisJKAorCQljZCBjbG9uZS1yZXBvICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuCisJKSAmJgorCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuCisnCisKKyMgRGVtb25zdHJhdGUgdGhhdCB0aGluZ3Mgd29yayBpZiB3ZSBqdXN0IGF2b2lkIHRoZSBzeW1saW5rCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwdWxsaW5nIGZyb20gcmVhbCBzdWJkaXInICcKKwkoCisJCWVjaG8gcmVhbCA+c3ViZGlyL2ZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSByZWFsIHN1YmRpci9maWxlICYmCisJCWNkIGNsb25lLXJlcG8vc3ViZGlyLyAmJgorCQlnaXQgcHVsbCAmJgorCQl0ZXN0IHJlYWwgPSAkKGNhdCBmaWxlKQorCSkKKycKKworIyBGcm9tIHN1YmRpci1saW5rLCBwdWxsaW5nIHNob3VsZCB3b3JrIGFzIGl0IGRvZXMgZnJvbQorIyBjbG9uZS1yZXBvL3N1YmRpci8uCisjCisjIEluc3RlYWQsIHRoZSBlcnJvciBwdWxsIGdhdmUgd2FzOgorIworIyAgIGZhdGFsOiAnb3JpZ2luJzogdW5hYmxlIHRvIGNoZGlyIG9yIG5vdCBhIGdpdCBhcmNoaXZlCisjICAgZmF0YWw6IFRoZSByZW1vdGUgZW5kIGh1bmcgdXAgdW5leHBlY3RlZGx5CisjCisjIGJlY2F1c2UgZ2l0IHdvdWxkIGZpbmQgdGhlIC5naXQvY29uZmlnIGZvciB0aGUgInRyYXNoIGRpcmVjdG9yeSIKKyMgcmVwbywgbm90IGZvciB0aGUgY2xvbmUtcmVwbyByZXBvLiAgVGhlICJ0cmFzaCBkaXJlY3RvcnkiIHJlcG8KKyMgaGFkIG5vIGVudHJ5IGZvciBvcmlnaW4uICBHaXQgZm91bmQgdGhlIHdyb25nIC5naXQgYmVjYXVzZQorIyBnaXQgcmV2LXBhcnNlIC0tc2hvdy1jZHVwIHByaW50ZWQgYSBwYXRoIHJlbGF0aXZlIHRvCisjIGNsb25lLXJlcG8vc3ViZGlyLywgbm90IHN1YmRpci1saW5rLy4gIEdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXAKKyMgdXNlZCB0aGUgY29ycmVjdCAuZ2l0LCBidXQgd2hlbiB0aGUgZ2l0IHB1bGwgc2hlbGwgc2NyaXB0IGRpZAorIyAiY2QgYGdpdCByZXYtcGFyc2UgLS1zaG93LWNkdXBgIiwgaXQgZW5kZWQgdXAgaW4gdGhlIHdyb25nCisjIGRpcmVjdG9yeS4gIEEgUE9TSVggc2hlbGwncyAiY2QiIHdvcmtzIGEgbGl0dGxlIGRpZmZlcmVudGx5CisjIHRoYW4gY2hkaXIoKSBpbiBDOyAiY2QgLVAiIGlzIG11Y2ggY2xvc2VyIHRvIGNoZGlyKCkuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdwdWxsaW5nIGZyb20gc3ltbGlua2VkIHN1YmRpcicgJworCSgKKwkJZWNobyBsaW5rID5zdWJkaXIvZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIGxpbmsgc3ViZGlyL2ZpbGUgJiYKKwkJY2Qgc3ViZGlyLWxpbmsvICYmCisJCWdpdCBwdWxsICYmCisJCXRlc3QgbGluayA9ICQoY2F0IGZpbGUpCisJKQorJworCisjIFByb3ZlIHRoYXQgdGhlIHJlbW90ZSBlbmQgcmVhbGx5IGlzIGEgcmVwbywgYW5kIG90aGVyIGNvbW1hbmRzCisjIHdvcmsgZmluZSBpbiB0aGlzIGNvbnRleHQuICBJdCdzIGp1c3QgdGhhdCAiZ2l0IHB1bGwiIGJyZWFrcy4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3B1c2hpbmcgZnJvbSBzeW1saW5rZWQgc3ViZGlyJyAnCisJKAorCQljZCBzdWJkaXItbGluay8gJiYKKwkJZWNobyBwdXNoID5maWxlICYmCisJCWdpdCBjb21taXQgLW0gcHVzaCAuL2ZpbGUgJiYKKwkJZ2l0IHB1c2gKKwkpICYmCisJdGVzdCBwdXNoID0gJChnaXQgc2hvdyBIRUFEOnN1YmRpci9maWxlKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjMtcHVzaC11cHN0cmVhbS5zaCBiL3QvdDU1MjMtcHVzaC11cHN0cmVhbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNjgzZGYxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyMy1wdXNoLXVwc3RyZWFtLnNoCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVzaCB3aXRoIC0tc2V0LXVwc3RyZWFtJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorCitlbnN1cmVfZnJlc2hfdXBzdHJlYW0oKSB7CisJcm0gLXJmIHBhcmVudCAmJiBnaXQgaW5pdCAtLWJhcmUgcGFyZW50Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUgcGFyZW50JyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisJZ2l0IHJlbW90ZSBhZGQgdXBzdHJlYW0gcGFyZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGxvY2FsIGNvbW1pdCcgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK2NoZWNrX2NvbmZpZygpIHsKKwkoZWNobyAkMjsgZWNobyAkMykgPmV4cGVjdC4kMQorCShnaXQgY29uZmlnIGJyYW5jaC4kMS5yZW1vdGUKKwkgZ2l0IGNvbmZpZyBicmFuY2guJDEubWVyZ2UpID5hY3R1YWwuJDEKKwl0ZXN0X2NtcCBleHBlY3QuJDEgYWN0dWFsLiQxCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgbWFzdGVyOm1hc3RlcicgJworCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlcjptYXN0ZXIgJiYKKwljaGVja19jb25maWcgbWFzdGVyIHVwc3RyZWFtIHJlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgbWFzdGVyOm90aGVyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gbWFzdGVyOm90aGVyICYmCisJY2hlY2tfY29uZmlnIG1hc3RlciB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggLXUgLS1kcnktcnVuIG1hc3RlcjpvdGhlclgnICcKKwlnaXQgcHVzaCAtdSAtLWRyeS1ydW4gdXBzdHJlYW0gbWFzdGVyOm90aGVyWCAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIgdXBzdHJlYW0gcmVmcy9oZWFkcy9vdGhlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IG1hc3RlcjI6bWFzdGVyMicgJworCWdpdCBicmFuY2ggbWFzdGVyMiAmJgorCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlcjI6bWFzdGVyMiAmJgorCWNoZWNrX2NvbmZpZyBtYXN0ZXIyIHVwc3RyZWFtIHJlZnMvaGVhZHMvbWFzdGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IG1hc3RlcjI6b3RoZXIyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gbWFzdGVyMjpvdGhlcjIgJiYKKwljaGVja19jb25maWcgbWFzdGVyMiB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IDptYXN0ZXIyJyAnCisJZ2l0IHB1c2ggLXUgdXBzdHJlYW0gOm1hc3RlcjIgJiYKKwljaGVja19jb25maWcgbWFzdGVyMiB1cHN0cmVhbSByZWZzL2hlYWRzL290aGVyMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC11IC0tYWxsJyAnCisJZ2l0IGJyYW5jaCBhbGwxICYmCisJZ2l0IGJyYW5jaCBhbGwyICYmCisJZ2l0IHB1c2ggLXUgLS1hbGwgJiYKKwljaGVja19jb25maWcgYWxsMSB1cHN0cmVhbSByZWZzL2hlYWRzL2FsbDEgJiYKKwljaGVja19jb25maWcgYWxsMiB1cHN0cmVhbSByZWZzL2hlYWRzL2FsbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtdSBIRUFEJyAnCisJZ2l0IGNoZWNrb3V0IC1iIGhlYWRicmFuY2ggJiYKKwlnaXQgcHVzaCAtdSB1cHN0cmVhbSBIRUFEICYmCisJY2hlY2tfY29uZmlnIGhlYWRicmFuY2ggdXBzdHJlYW0gcmVmcy9oZWFkcy9oZWFkYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdwcm9ncmVzcyBtZXNzYWdlcyBnbyB0byB0dHknICcKKwllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKKworCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLXUgdXBzdHJlYW0gbWFzdGVyID5vdXQgMj5lcnIgJiYKKwlncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9ncmVzcyBtZXNzYWdlcyBkbyBub3QgZ28gdG8gbm9uLXR0eScgJworCWVuc3VyZV9mcmVzaF91cHN0cmVhbSAmJgorCisJIyBza2lwIHByb2dyZXNzIG1lc3NhZ2VzLCBzaW5jZSBzdGRlcnIgaXMgbm9uLXR0eQorCWdpdCBwdXNoIC11IHVwc3RyZWFtIG1hc3RlciA+b3V0IDI+ZXJyICYmCisJISBncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9ncmVzcyBtZXNzYWdlcyBnbyB0byBub24tdHR5IChmb3JjZWQpJyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisKKwkjIGZvcmNlIHByb2dyZXNzIG1lc3NhZ2VzIHRvIHN0ZGVyciwgZXZlbiB0aG91Z2ggaXQgaXMgbm9uLXR0eQorCWdpdCBwdXNoIC11IC0tcHJvZ3Jlc3MgdXBzdHJlYW0gbWFzdGVyID5vdXQgMj5lcnIgJiYKKwlncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAncHVzaCAtcSBzdXBwcmVzc2VzIHByb2dyZXNzJyAnCisJZW5zdXJlX2ZyZXNoX3Vwc3RyZWFtICYmCisKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBwdXNoIC11IC1xIHVwc3RyZWFtIG1hc3RlciA+b3V0IDI+ZXJyICYmCisJISBncmVwICJXcml0aW5nIG9iamVjdHMiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAncHVzaCAtLW5vLXByb2dyZXNzIHN1cHByZXNzZXMgcHJvZ3Jlc3MnICcKKwllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKKworCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLXUgLS1uby1wcm9ncmVzcyB1cHN0cmVhbSBtYXN0ZXIgPm91dCAyPmVyciAmJgorCSEgZ3JlcCAiVW5wYWNraW5nIG9iamVjdHMiIGVyciAmJgorCSEgZ3JlcCAiV3JpdGluZyBvYmplY3RzIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3F1aWV0IHB1c2gnICcKKwllbnN1cmVfZnJlc2hfdXBzdHJlYW0gJiYKKworCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLS1xdWlldCAtLW5vLXByb2dyZXNzIHVwc3RyZWFtIG1hc3RlciAyPiYxIHwgdGVlIG91dHB1dCAmJgorCXRlc3RfY21wIC9kZXYvbnVsbCBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTI0LXB1bGwtbXNnLnNoIGIvdC90NTUyNC1wdWxsLW1zZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMjc4YWRhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyNC1wdWxsLW1zZy5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHB1bGwgbWVzc2FnZSBnZW5lcmF0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworZG9sbGFyPSckRG9sbGFyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGFmaWxlIG9yaWdpbmFsICYmCisJZ2l0IGNsb25lIC4gY2xvbmVkICYmCisJKAorCQljZCBjbG9uZWQgJiYKKwkJZWNobyBhZGRlZCA+YmZpbGUgJiYKKwkJZ2l0IGFkZCBiZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGJmaWxlIgorCSkgJiYKKwl0ZXN0X3RpY2sgJiYgdGVzdF90aWNrICYmCisJZWNobyAic2Vjb25kIiA+YWZpbGUgJiYKKwlnaXQgYWRkIGFmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIGNvbW1pdCIgJiYKKwllY2hvICJvcmlnaW5hbCAkZG9sbGFyIiA+YWZpbGUgJiYKKwlnaXQgYWRkIGFmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiZG8gbm90IGNsb2JiZXIgJGRvbGxhciBzaWducyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBwdWxsICcKKygKKwljZCBjbG9uZWQgJiYKKwlnaXQgcHVsbCAtLWxvZyAmJgorCWdpdCBsb2cgLTIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJlc3VsdCAmJgorCWdyZXAgRG9sbGFyIHJlc3VsdAorKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxvZz0xIGxpbWl0cyBzaG9ydGxvZyBsZW5ndGgnICcKKygKKwljZCBjbG9uZWQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJdGVzdCAiJChjYXQgYWZpbGUpIiA9IG9yaWdpbmFsICYmCisJdGVzdCAiJChjYXQgYmZpbGUpIiA9IGFkZGVkICYmCisJZ2l0IHB1bGwgLS1sb2c9MSAmJgorCWdpdCBsb2cgLTMgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgPnJlc3VsdCAmJgorCWdyZXAgRG9sbGFyIHJlc3VsdCAmJgorCSEgZ3JlcCAic2Vjb25kIGNvbW1pdCIgcmVzdWx0CispCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyNS1mZXRjaC10YWdvcHQuc2ggYi90L3Q1NTI1LWZldGNoLXRhZ29wdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NTgxNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyNS1mZXRjaC10YWdvcHQuc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3RhZ29wdCB2YXJpYWJsZSBhZmZlY3RzICJnaXQgZmV0Y2giIGFuZCBpcyBvdmVycmlkZGVuIGJ5IGNvbW1hbmRsaW5lLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3NldHVwX2Nsb25lICgpIHsKKwlnaXQgY2xvbmUgLS1taXJyb3IgLiAkMSAmJgorCWdpdCByZW1vdGUgYWRkIHJlbW90ZV8kMSAkMSAmJgorCShjZCAkMSAmJgorCWdpdCB0YWcgdGFnXyQxICYmCisJZ2l0IGJyYW5jaCBicmFuY2hfJDEpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IHRlc3QgJiYKKwlzZXR1cF9jbG9uZSBvbmUgJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yZW1vdGVfb25lLnRhZ29wdCAtLW5vLXRhZ3MgJiYKKwlzZXR1cF9jbG9uZSB0d28gJiYKKwlnaXQgY29uZmlnIHJlbW90ZS5yZW1vdGVfdHdvLnRhZ29wdCAtLXRhZ3MKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIHdpdGggdGFnb3B0PS0tbm8tdGFncyBkb2VzIG5vdCBnZXQgdGFnIiAnCisJZ2l0IGZldGNoIHJlbW90ZV9vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgdGFnX29uZSAmJgorCWdpdCBzaG93LXJlZiByZW1vdGVfb25lL2JyYW5jaF9vbmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIC0tdGFncyB3aXRoIHRhZ29wdD0tLW5vLXRhZ3MgZ2V0cyB0YWciICcKKwkoCisJCWNkIG9uZSAmJgorCQlnaXQgYnJhbmNoIHNlY29uZF9icmFuY2hfb25lCisJKSAmJgorCWdpdCBmZXRjaCAtLXRhZ3MgcmVtb3RlX29uZSAmJgorCWdpdCBzaG93LXJlZiB0YWdfb25lICYmCisJZ2l0IHNob3ctcmVmIHJlbW90ZV9vbmUvc2Vjb25kX2JyYW5jaF9vbmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIC0tbm8tdGFncyB3aXRoIHRhZ29wdD0tLXRhZ3MgZG9lcyBub3QgZ2V0IHRhZyIgJworCWdpdCBmZXRjaCAtLW5vLXRhZ3MgcmVtb3RlX3R3byAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiB0YWdfdHdvICYmCisJZ2l0IHNob3ctcmVmIHJlbW90ZV90d28vYnJhbmNoX3R3bworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggd2l0aCB0YWdvcHQ9LS10YWdzIGdldHMgdGFnIiAnCisJKAorCQljZCB0d28gJiYKKwkJZ2l0IGJyYW5jaCBzZWNvbmRfYnJhbmNoX3R3bworCSkgJiYKKwlnaXQgZmV0Y2ggcmVtb3RlX3R3byAmJgorCWdpdCBzaG93LXJlZiB0YWdfdHdvICYmCisJZ2l0IHNob3ctcmVmIHJlbW90ZV90d28vc2Vjb25kX2JyYW5jaF90d28KKwknCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MjYtZmV0Y2gtc3VibW9kdWxlcy5zaCBiL3QvdDU1MjYtZmV0Y2gtc3VibW9kdWxlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNDUzMmIwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyNi1mZXRjaC1zdWJtb2R1bGVzLnNoCkBAIC0wLDAgKzEsNDUzIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDEwLCBKZW5zIExlaG1hbm4KKwordGVzdF9kZXNjcmlwdGlvbj0nUmVjdXJzaXZlICJnaXQgZmV0Y2giIGZvciBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKworcHdkPSQocHdkKQorCithZGRfdXBzdHJlYW1fY29tbWl0KCkgeworCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gbmV3ID4+IHN1YmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBhZGQgc3ViZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIG5ldyBzdWJmaWxlICYmCisJCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gIkZyb20gJHB3ZC9zdWJtb2R1bGUiID4gLi4vZXhwZWN0LmVyciAmJgorCQllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiAuLi9leHBlY3QuZXJyCisJKSAmJgorCSgKKwkJY2QgZGVlcHN1Ym1vZHVsZSAmJgorCQloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCQllY2hvIG5ldyA+PiBkZWVwc3ViZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGFkZCBkZWVwc3ViZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIG5ldyBkZWVwc3ViZmlsZSAmJgorCQloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCQllY2hvICJGcm9tICRwd2QvZGVlcHN1Ym1vZHVsZSIgPj4gLi4vZXhwZWN0LmVyciAmJgorCQllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiAuLi9leHBlY3QuZXJyCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBkZWVwc3VibW9kdWxlICYmCisJKAorCQljZCBkZWVwc3VibW9kdWxlICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gZGVlcHN1YmNvbnRlbnQgPiBkZWVwc3ViZmlsZSAmJgorCQlnaXQgYWRkIGRlZXBzdWJmaWxlICYmCisJCWdpdCBjb21taXQgLW0gbmV3IGRlZXBzdWJmaWxlCisJKSAmJgorCW1rZGlyIHN1Ym1vZHVsZSAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gc3ViY29udGVudCA+IHN1YmZpbGUgJiYKKwkJZ2l0IGFkZCBzdWJmaWxlICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkICIkcHdkL2RlZXBzdWJtb2R1bGUiIHN1YmRpci9kZWVwc3VibW9kdWxlICYmCisJCWdpdCBjb21taXQgLWEgLW0gbmV3CisJKSAmJgorCWdpdCBzdWJtb2R1bGUgYWRkICIkcHdkL3N1Ym1vZHVsZSIgc3VibW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtYW0gaW5pdGlhbCAmJgorCWdpdCBjbG9uZSAuIGRvd25zdHJlYW0gJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCisJKSAmJgorCWVjaG8gIkZldGNoaW5nIHN1Ym1vZHVsZSBzdWJtb2R1bGUiID4gZXhwZWN0Lm91dCAmJgorCWVjaG8gIkZldGNoaW5nIHN1Ym1vZHVsZSBzdWJtb2R1bGUvc3ViZGlyL2RlZXBzdWJtb2R1bGUiID4+IGV4cGVjdC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgcmVjdXJzZXMgaW50byBzdWJtb2R1bGVzIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qub3V0IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZldGNoIGFsb25lIG9ubHkgZmV0Y2hlcyBzdXBlcnByb2plY3QiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJISB0ZXN0IC1zIGFjdHVhbC5vdXQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJmZXRjaCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyBvbmx5IGZldGNoZXMgc3VwZXJwcm9qZWN0IiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJISB0ZXN0IC1zIGFjdHVhbC5vdXQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJ1c2luZyBmZXRjaFJlY3Vyc2VTdWJtb2R1bGVzPXRydWUgaW4gLmdpdG1vZHVsZXMgcmVjdXJzZXMgaW50byBzdWJtb2R1bGVzIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzIHRydWUgJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0Lm91dCBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyBvdmVycmlkZXMgLmdpdG1vZHVsZXMgY29uZmlnIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCSEgdGVzdCAtcyBhY3R1YWwub3V0ICYmCisJISB0ZXN0IC1zIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAidXNpbmcgZmV0Y2hSZWN1cnNlU3VibW9kdWxlcz1mYWxzZSBpbiAuZ2l0L2NvbmZpZyBvdmVycmlkZXMgc2V0dGluZyBpbiAuZ2l0bW9kdWxlcyIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUuZmV0Y2hSZWN1cnNlU3VibW9kdWxlcyBmYWxzZSAmJgorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCSEgdGVzdCAtcyBhY3R1YWwub3V0ICYmCisJISB0ZXN0IC1zIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1yZWN1cnNlLXN1Ym1vZHVsZXMgb3ZlcnJpZGVzIGZldGNoUmVjdXJzZVN1Ym1vZHVsZXMgc2V0dGluZyBmcm9tIC5naXQvY29uZmlnIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIgJiYKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUuZmV0Y2hSZWN1cnNlU3VibW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaFJlY3Vyc2VTdWJtb2R1bGVzCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qub3V0IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tcXVpZXQgcHJvcGFnYXRlcyB0byBzdWJtb2R1bGVzIiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLXF1aWV0ID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLm91dCAmJgorCSEgdGVzdCAtcyBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tZHJ5LXJ1biBwcm9wYWdhdGVzIHRvIHN1Ym1vZHVsZXMiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcyAtLWRyeS1ydW4gPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qub3V0IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIldpdGhvdXQgLS1kcnktcnVuIHByb3BhZ2F0ZXMgdG8gc3VibW9kdWxlcyIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qub3V0IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlY3Vyc2VTdWJtb2R1bGVzPXRydWUgcHJvcGFnYXRlcyBpbnRvIHN1Ym1vZHVsZXMiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgdHJ1ZQorCQlnaXQgZmV0Y2ggPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qub3V0IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tcmVjdXJzZS1zdWJtb2R1bGVzIG92ZXJyaWRlcyBjb25maWcgaW4gc3VibW9kdWxlIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgZmFsc2UKKwkJKSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qub3V0IGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzIG92ZXJyaWRlcyBjb25maWcgc2V0dGluZyIgJworCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyB0cnVlCisJCWdpdCBmZXRjaCAtLW5vLXJlY3Vyc2Utc3VibW9kdWxlcyA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJISB0ZXN0IC1zIGFjdHVhbC5vdXQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJSZWN1cnNpb24gZG9lc24ndCBoYXBwZW4gd2hlbiBubyBuZXcgY29tbWl0cyBhcmUgZmV0Y2hlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IiAnCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJZ2l0IGNvbmZpZyAtLXVuc2V0IGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzCisJCSkgJiYKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJISB0ZXN0IC1zIGFjdHVhbC5vdXQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJSZWN1cnNpb24gc3RvcHMgd2hlbiBubyBuZXcgc3VibW9kdWxlIGNvbW1pdHMgYXJlIGZldGNoZWQiICcKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IHN1Ym1vZHVsZSIgJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWVjaG8gIkZldGNoaW5nIHN1Ym1vZHVsZSBzdWJtb2R1bGUiID4gZXhwZWN0Lm91dC5zdWIgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLnN1YiAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+ZXhwZWN0LmVyci5zdWIgJiYKKwloZWFkIC0yIGV4cGVjdC5lcnIgPj4gZXhwZWN0LmVyci5zdWIgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyci5zdWIgYWN0dWFsLmVyciAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qub3V0LnN1YiBhY3R1YWwub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIlJlY3Vyc2lvbiBkb2Vzbid0IGhhcHBlbiB3aGVuIG5ldyBzdXBlcnByb2plY3QgY29tbWl0cyBkb24ndCBjaGFuZ2UgYW55IHN1Ym1vZHVsZXMiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvIGEgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IGZpbGUiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLmZpbGUgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiBleHBlY3QuZXJyLmZpbGUgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLmZpbGUgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJSZWN1cnNpb24gcGlja3MgdXAgY29uZmlnIGluIHN1Ym1vZHVsZSIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgY29uZmlnIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIHRydWUKKwkJKQorCSkgJiYKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBzdWJtb2R1bGUiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLnN1YiAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IGV4cGVjdC5lcnIuc3ViICYmCisJY2F0IGV4cGVjdC5lcnIgPj4gZXhwZWN0LmVyci5zdWIgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVyciAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBjb25maWcgLS11bnNldCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcworCQkpCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLnN1YiBhY3R1YWwuZXJyICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJSZWN1cnNpb24gcGlja3MgdXAgYWxsIHN1Ym1vZHVsZXMgd2hlbiBuZWNlc3NhcnkiICcKKwlhZGRfdXBzdHJlYW1fY29tbWl0ICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJKAorCQkJY2Qgc3ViZGlyL2RlZXBzdWJtb2R1bGUgJiYKKwkJCWdpdCBmZXRjaCAmJgorCQkJZ2l0IGNoZWNrb3V0IC1xIEZFVENIX0hFQUQKKwkJKSAmJgorCQloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXikgJiYKKwkJZ2l0IGFkZCBzdWJkaXIvZGVlcHN1Ym1vZHVsZSAmJgorCQlnaXQgY29tbWl0IC1tICJuZXcgZGVlcHN1Ym1vZHVsZSIKKwkJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwkJZWNobyAiRnJvbSAkcHdkL3N1Ym1vZHVsZSIgPiAuLi9leHBlY3QuZXJyLnN1YiAmJgorCQllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiAuLi9leHBlY3QuZXJyLnN1YgorCSkgJiYKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IHN1Ym1vZHVsZSIgJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWVjaG8gIkZyb20gJHB3ZC8uIiA+IGV4cGVjdC5lcnIuMiAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+IGV4cGVjdC5lcnIuMiAmJgorCWNhdCBleHBlY3QuZXJyLnN1YiA+PiBleHBlY3QuZXJyLjIgJiYKKwl0YWlsIC0yIGV4cGVjdC5lcnIgPj4gZXhwZWN0LmVyci4yICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIuMiBhY3R1YWwuZXJyICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5vdXQgYWN0dWFsLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICInLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kJyBkb2Vzbid0IHJlY3Vyc2Ugd2hlbiBubyBuZXcgY29tbWl0cyBhcmUgZmV0Y2hlZCBpbiB0aGUgc3VwZXJwcm9qZWN0IChhbmQgaWdub3JlcyBjb25maWcpIiAnCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCSgKKwkJCWNkIHN1YmRpci9kZWVwc3VibW9kdWxlICYmCisJCQlnaXQgZmV0Y2ggJiYKKwkJCWdpdCBjaGVja291dCAtcSBGRVRDSF9IRUFECisJCSkgJiYKKwkJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJCWdpdCBhZGQgc3ViZGlyL2RlZXBzdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibmV3IGRlZXBzdWJtb2R1bGUiICYmCisJCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJCWVjaG8gIkZyb20gJHB3ZC9zdWJtb2R1bGUiID4gLi4vZXhwZWN0LmVyci5zdWIgJiYKKwkJZWNobyAiICAgJGhlYWQxLi4kaGVhZDIgIG1hc3RlciAgICAgLT4gb3JpZ2luL21hc3RlciIgPj4gLi4vZXhwZWN0LmVyci5zdWIKKwkpICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgdHJ1ZSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVyciAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMKKwkpICYmCisJISB0ZXN0IC1zIGFjdHVhbC5vdXQgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICInLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kJyByZWN1cnNlcyBhcyBkZWVwIGFzIG5lY2Vzc2FyeSAoYW5kIGlnbm9yZXMgY29uZmlnKSIgJworCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgc3VibW9kdWxlIiAmJgorCWhlYWQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJdGFpbCAtMiBleHBlY3QuZXJyID4gZXhwZWN0LmVyci5kZWVwc3ViICYmCisJZWNobyAiRnJvbSAkcHdkLy4iID4gZXhwZWN0LmVyciAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+ZXhwZWN0LmVyciAmJgorCWNhdCBleHBlY3QuZXJyLnN1YiA+PiBleHBlY3QuZXJyICYmCisJY2F0IGV4cGVjdC5lcnIuZGVlcHN1YiA+PiBleHBlY3QuZXJyICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgZmFsc2UgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJkaXIvZGVlcHN1Ym1vZHVsZS5mZXRjaFJlY3Vyc2l2ZSBmYWxzZQorCQkpICYmCisJCWdpdCBmZXRjaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgPi4uL2FjdHVhbC5vdXQgMj4uLi9hY3R1YWwuZXJyICYmCisJCWdpdCBjb25maWcgLS11bnNldCBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcworCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBjb25maWcgLS11bnNldCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViZGlyL2RlZXBzdWJtb2R1bGUuZmV0Y2hSZWN1cnNpdmUKKwkJKQorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0Lm91dCBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICInLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kJyBzdG9wcyB3aGVuIG5vIG5ldyBzdWJtb2R1bGUgY29tbWl0cyBhcmUgZm91bmQgaW4gdGhlIHN1cGVycHJvamVjdCAoYW5kIGlnbm9yZXMgY29uZmlnKSIgJworCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWVjaG8gYSA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IGZpbGUiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLmZpbGUgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiBleHBlY3QuZXJyLmZpbGUgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJISB0ZXN0IC1zIGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyci5maWxlIGFjdHVhbC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJ2ZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzPW9uLWRlbWFuZCcgb3ZlcnJpZGVzIGdsb2JhbCBjb25maWciICcKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGZldGNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzCisJKSAmJgorCWFkZF91cHN0cmVhbV9jb21taXQgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzIGZhbHNlICYmCisJaGVhZDE9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCWdpdCBjb21taXQgLW0gIm5ldyBzdWJtb2R1bGUiICYmCisJaGVhZDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwllY2hvICJGcm9tICRwd2QvLiIgPiBleHBlY3QuZXJyLjIgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PmV4cGVjdC5lcnIuMiAmJgorCWhlYWQgLTIgZXhwZWN0LmVyciA+PiBleHBlY3QuZXJyLjIgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyBvbi1kZW1hbmQgJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IGZldGNoLnJlY3Vyc2VTdWJtb2R1bGVzCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qub3V0LnN1YiBhY3R1YWwub3V0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdC5lcnIuMiBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIidzdWJtb2R1bGUuPHN1Yj4uZmV0Y2hSZWN1cnNlU3VibW9kdWxlcz1vbi1kZW1hbmQnIG92ZXJyaWRlcyBmZXRjaC5yZWN1cnNlU3VibW9kdWxlcyIgJworCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgZmV0Y2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXMKKwkpICYmCisJYWRkX3Vwc3RyZWFtX2NvbW1pdCAmJgorCWdpdCBjb25maWcgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgZmFsc2UgJiYKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibmV3IHN1Ym1vZHVsZSIgJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWVjaG8gIkZyb20gJHB3ZC8uIiA+IGV4cGVjdC5lcnIuMiAmJgorCWVjaG8gIiAgICRoZWFkMS4uJGhlYWQyICBtYXN0ZXIgICAgIC0+IG9yaWdpbi9tYXN0ZXIiID4+ZXhwZWN0LmVyci4yICYmCisJaGVhZCAtMiBleHBlY3QuZXJyID4+IGV4cGVjdC5lcnIuMiAmJgorCSgKKwkJY2QgZG93bnN0cmVhbSAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUuZmV0Y2hSZWN1cnNlU3VibW9kdWxlcyBvbi1kZW1hbmQgJiYKKwkJZ2l0IGZldGNoID4uLi9hY3R1YWwub3V0IDI+Li4vYWN0dWFsLmVycgorCSkgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgZmV0Y2gucmVjdXJzZVN1Ym1vZHVsZXMgJiYKKwkoCisJCWNkIGRvd25zdHJlYW0gJiYKKwkJZ2l0IGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS5zdWJtb2R1bGUuZmV0Y2hSZWN1cnNlU3VibW9kdWxlcworCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0Lm91dC5zdWIgYWN0dWFsLm91dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QuZXJyLjIgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJkb24ndCBmZXRjaCBzdWJtb2R1bGUgd2hlbiBuZXdseSByZWNvcmRlZCBjb21taXRzIGFyZSBhbHJlYWR5IHByZXNlbnQiICcKKwkoCisJCWNkIHN1Ym1vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgLXEgSEVBRF5eCisJKSAmJgorCWhlYWQxPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgcmV3b3VuZCIgJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCWVjaG8gIkZyb20gJHB3ZC8uIiA+IGV4cGVjdC5lcnIgJiYKKwllY2hvICIgICAkaGVhZDEuLiRoZWFkMiAgbWFzdGVyICAgICAtPiBvcmlnaW4vbWFzdGVyIiA+PiBleHBlY3QuZXJyICYmCisJKAorCQljZCBkb3duc3RyZWFtICYmCisJCWdpdCBmZXRjaCA+Li4vYWN0dWFsLm91dCAyPi4uL2FjdHVhbC5lcnIKKwkpICYmCisJISB0ZXN0IC1zIGFjdHVhbC5vdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyNy1mZXRjaC1vZGQtcmVmcy5zaCBiL3QvdDU1MjctZmV0Y2gtb2RkLXJlZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjA3ODk5YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MjctZmV0Y2gtb2RkLXJlZnMuc2gKQEAgLTAsMCArMSw2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZmV0Y2hpbmcgb2Ygb2RkbHktbmFtZWQgcmVmcycKKy4gLi90ZXN0LWxpYi5zaAorCisjIGFmdGVyd2FyZHMgd2Ugd2lsbCBoYXZlOgorIyAgSEVBRCAtIHR3bworIyAgcmVmcy9mb3IvcmVmcy9oZWFkcy9tYXN0ZXIgLSBvbmUKKyMgIHJlZnMvaGVhZHMvbWFzdGVyIC0gdGhyZWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBvZGQgc3VmZml4IHJlZicgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9mb3IvcmVmcy9oZWFkcy9tYXN0ZXIgSEVBRCAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRocmVlICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1ZmZpeCByZWYgaXMgaWdub3JlZCBkdXJpbmcgZmV0Y2gnICcKKwlnaXQgY2xvbmUgLS1iYXJlIGZpbGU6Ly8iJFBXRCIgc3VmZml4ICYmCisJZWNobyB0aHJlZSA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1zdWZmaXggbG9nIC0xIC0tZm9ybWF0PSVzIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyeSB0byBjcmVhdGUgcmVwbyB3aXRoIGFic3VyZGx5IGxvbmcgcmVmbmFtZScgJworCXJlZjI0MD0kX3o0MC8kX3o0MC8kX3o0MC8kX3o0MC8kX3o0MC8kX3o0MCAmJgorCXJlZjE0NDA9JHJlZjI0MC8kcmVmMjQwLyRyZWYyNDAvJHJlZjI0MC8kcmVmMjQwLyRyZWYyNDAgJiYKKwlnaXQgaW5pdCBsb25nICYmCisJKAorCQljZCBsb25nICYmCisJCXRlc3RfY29tbWl0IGxvbmcgJiYKKwkJdGVzdF9jb21taXQgbWFzdGVyCisJKSAmJgorCWlmIGdpdCAtQyBsb25nIHVwZGF0ZS1yZWYgcmVmcy9oZWFkcy8kcmVmMTQ0MCBsb25nOyB0aGVuCisJCXRlc3Rfc2V0X3ByZXJlcSBMT05HX1JFRgorCWVsc2UKKwkJZWNobyA+JjIgImxvbmcgcmVmcyBub3Qgc3VwcG9ydGVkIgorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTE9OR19SRUYgJ2ZldGNoIGhhbmRsZXMgZXh0cmVtZWx5IGxvbmcgcmVmbmFtZScgJworCWdpdCBmZXRjaCBsb25nIHJlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvbG9uZy8qICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWxvbmcKKwltYXN0ZXIKKwlFT0YKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHN1YmplY3QpIiByZWZzL3JlbW90ZXMvbG9uZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExPTkdfUkVGICdwdXNoIGhhbmRsZXMgZXh0cmVtZWx5IGxvbmcgcmVmbmFtZScgJworCWdpdCBwdXNoIGxvbmcgOnJlZnMvaGVhZHMvJHJlZjE0NDAgJiYKKwlnaXQgLUMgbG9uZyBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoc3ViamVjdCkiIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCWVjaG8gbWFzdGVyID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUyOC1wdXNoLWRlZmF1bHQuc2ggYi90L3Q1NTI4LXB1c2gtZGVmYXVsdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43M2Y0YmI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyOC1wdXNoLWRlZmF1bHQuc2gKQEAgLTAsMCArMSwyMDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayB2YXJpb3VzIHB1c2guZGVmYXVsdCBzZXR0aW5ncycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBiYXJlIHJlbW90ZXMnICcKKwlnaXQgaW5pdCAtLWJhcmUgcmVwbzEgJiYKKwlnaXQgcmVtb3RlIGFkZCBwYXJlbnQxIHJlcG8xICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlcG8yICYmCisJZ2l0IHJlbW90ZSBhZGQgcGFyZW50MiByZXBvMiAmJgorCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBwdXNoIHBhcmVudDEgSEVBRCAmJgorCWdpdCBwdXNoIHBhcmVudDIgSEVBRAorJworCisjICQxID0gbG9jYWwgcmV2aXNpb24KKyMgJDIgPSByZW1vdGUgcmV2aXNpb24gKHRlc3RlZCB0byBiZSBlcXVhbCB0byB0aGUgbG9jYWwgb25lKQorIyAkMyA9IFtvcHRpb25hbF0gcmVwbyB0byBjaGVjayBmb3IgYWN0dWFsIG91dHB1dCAocmVwbzEgYnkgZGVmYXVsdCkKK2NoZWNrX3B1c2hlZF9jb21taXQgKCkgeworCWdpdCBsb2cgLTEgLS1mb3JtYXQ9JyVoICVzJyAiJDEiID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPSIkezM6LXJlcG8xfSIgbG9nIC0xIC0tZm9ybWF0PSclaCAlcycgIiQyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCisjICQxID0gcHVzaC5kZWZhdWx0IHZhbHVlCisjICQyID0gZXhwZWN0ZWQgdGFyZ2V0IGJyYW5jaCBmb3IgdGhlIHB1c2gKKyMgJDMgPSBbb3B0aW9uYWxdIHJlcG8gdG8gY2hlY2sgZm9yIGFjdHVhbCBvdXRwdXQgKHJlcG8xIGJ5IGRlZmF1bHQpCit0ZXN0X3B1c2hfc3VjY2VzcyAoKSB7CisJZ2l0ICR7MTorLWN9ICR7MTorcHVzaC5kZWZhdWx0PSIkMSJ9IHB1c2ggJiYKKwljaGVja19wdXNoZWRfY29tbWl0IEhFQUQgIiQyIiAiJDMiCit9CisKKyMgJDEgPSBwdXNoLmRlZmF1bHQgdmFsdWUKKyMgY2hlY2sgdGhhdCBwdXNoIGZhaWxzIGFuZCBkb2VzIG5vdCBtb2RpZnkgYW55IHJlbW90ZSBicmFuY2gKK3Rlc3RfcHVzaF9mYWlsdXJlICgpIHsKKwlnaXQgLS1naXQtZGlyPXJlcG8xIGxvZyAtLW5vLXdhbGsgLS1mb3JtYXQ9JyVoICVzJyAtLWFsbCA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0ICR7MTorLWN9ICR7MTorcHVzaC5kZWZhdWx0PSIkMSJ9IHB1c2ggJiYKKwlnaXQgLS1naXQtZGlyPXJlcG8xIGxvZyAtLW5vLXdhbGsgLS1mb3JtYXQ9JyVoICVzJyAtLWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCisjICQxID0gc3VjY2VzcyBvciBmYWlsdXJlCisjICQyID0gcHVzaC5kZWZhdWx0IHZhbHVlCisjICQzID0gYnJhbmNoIHRvIGNoZWNrIGZvciBhY3R1YWwgb3V0cHV0IChtYXN0ZXIgb3IgZm9vKQorIyAkNCA9IFtvcHRpb25hbF0gc3dpdGNoIHRvIHRyaWFuZ3VsYXIgd29ya2Zsb3cKK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgKCkgeworCXdvcmtmbG93PWNlbnRyYWwKKwlwdXNoZGVmYXVsdD1wYXJlbnQxCisJaWYgdGVzdCAtbiAiJHs0LX0iOyB0aGVuCisJCXdvcmtmbG93PXRyaWFuZ3VsYXIKKwkJcHVzaGRlZmF1bHQ9cGFyZW50MgorCWZpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicHVzaC5kZWZhdWx0ID0gJDIgJDEgaW4gJHdvcmtmbG93IHdvcmtmbG93cyIgIgorCQl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBwYXJlbnQxICYmCisJCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9mb28gJiYKKwkJdGVzdF9jb25maWcgcmVtb3RlLnB1c2hkZWZhdWx0ICRwdXNoZGVmYXVsdCAmJgorCQl0ZXN0X2NvbW1pdCBjb21taXQtZm9yLSQyJHs0Ky10cmlhbmd1bGFyfSAmJgorCQl0ZXN0X3B1c2hfJDEgJDIgJDMgJHs0K3JlcG8yfQorCSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInVwc3RyZWFtIiBwdXNoZXMgdG8gY29uZmlndXJlZCB1cHN0cmVhbScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBwYXJlbnQxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZSByZWZzL2hlYWRzL2ZvbyAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfcHVzaF9zdWNjZXNzIHVwc3RyZWFtIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcidXBzdHJlYW0iIGRvZXMgbm90IHB1c2ggb24gdW5jb25maWd1cmVkIHJlbW90ZScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3VuY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlICYmCisJdGVzdF9jb21taXQgdGhyZWUgJiYKKwl0ZXN0X3B1c2hfZmFpbHVyZSB1cHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcidXBzdHJlYW0iIGRvZXMgbm90IHB1c2ggb24gdW5jb25maWd1cmVkIGJyYW5jaCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBwYXJlbnQxICYmCisJdGVzdF91bmNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlICYmCisJdGVzdF9jb21taXQgZm91ciAmJgorCXRlc3RfcHVzaF9mYWlsdXJlIHVwc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJ1cHN0cmVhbSIgZG9lcyBub3QgcHVzaCB3aGVuIHJlbW90ZXMgZG8gbm90IG1hdGNoJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHBhcmVudDEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9jb25maWcgcHVzaC5kZWZhdWx0IHVwc3RyZWFtICYmCisJdGVzdF9jb21taXQgZml2ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIHBhcmVudDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmcm9tL3RvIG5ldyBicmFuY2ggd2l0aCB1cHN0cmVhbSwgbWF0Y2hpbmcgYW5kIHNpbXBsZScgJworCWdpdCBjaGVja291dCAtYiBuZXctYnJhbmNoICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgc2ltcGxlICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgbWF0Y2hpbmcgJiYKKwl0ZXN0X3B1c2hfZmFpbHVyZSB1cHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZyb20vdG8gbmV3IGJyYW5jaCB3aXRoIGN1cnJlbnQgY3JlYXRlcyByZW1vdGUgYnJhbmNoJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLm5ldy1icmFuY2gucmVtb3RlIHJlcG8xICYmCisJZ2l0IGNoZWNrb3V0IG5ldy1icmFuY2ggJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyBjdXJyZW50IG5ldy1icmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBleGlzdGluZyBicmFuY2gsIHdpdGggbm8gdXBzdHJlYW0gY29uZmlndXJlZCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHJlcG8xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfcHVzaF9mYWlsdXJlIHNpbXBsZSAmJgorCXRlc3RfcHVzaF9mYWlsdXJlIHVwc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gZXhpc3RpbmcgYnJhbmNoLCB1cHN0cmVhbSBjb25maWd1cmVkIHdpdGggc2FtZSBuYW1lJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcmVwbzEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHNpeCAmJgorCXRlc3RfcHVzaF9zdWNjZXNzIHVwc3RyZWFtIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHNldmVuICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3Mgc2ltcGxlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIGV4aXN0aW5nIGJyYW5jaCwgdXBzdHJlYW0gY29uZmlndXJlZCB3aXRoIGRpZmZlcmVudCBuYW1lJyAnCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5yZW1vdGUgcmVwbzEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvb3RoZXItbmFtZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBlaWdodCAmJgorCXRlc3RfcHVzaF9zdWNjZXNzIHVwc3RyZWFtIG90aGVyLW5hbWUgJiYKKwl0ZXN0X2NvbW1pdCBuaW5lICYmCisJdGVzdF9wdXNoX2ZhaWx1cmUgc2ltcGxlICYmCisJZ2l0IC0tZ2l0LWRpcj1yZXBvMSBsb2cgLTEgLS1mb3JtYXQ9IiVoICVzIiAib3RoZXItbmFtZSIgPmV4cGVjdC1vdGhlci1uYW1lICYmCisJdGVzdF9wdXNoX3N1Y2Nlc3MgY3VycmVudCBtYXN0ZXIgJiYKKwlnaXQgLS1naXQtZGlyPXJlcG8xIGxvZyAtMSAtLWZvcm1hdD0iJWggJXMiICJvdGhlci1uYW1lIiA+YWN0dWFsLW90aGVyLW5hbWUgJiYKKwl0ZXN0X2NtcCBleHBlY3Qtb3RoZXItbmFtZSBhY3R1YWwtb3RoZXItbmFtZQorJworCisjIFdlIGFyZSBvbiAnbWFzdGVyJywgd2hpY2ggaW50ZWdyYXRlcyB3aXRoICdmb28nIGZyb20gcGFyZW50MQorIyByZW1vdGUgKHNldCBpbiB0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IGhlbHBlcikuICBQdXNoIHRvCisjIHBhcmVudDEgaW4gY2VudHJhbGl6ZWQsIGFuZCBwdXNoIHRvIHBhcmVudDIgaW4gdHJpYW5ndWxhciB3b3JrZmxvdy4KKyMgVGhlIHBhcmVudDEgcmVwb3NpdG9yeSBoYXMgJ21hc3RlcicgYW5kICdmb28nIGJyYW5jaGVzLCB3aGlsZQorIyB0aGUgcGFyZW50MiByZXBvc2l0b3J5IGhhcyBvbmx5ICdtYXN0ZXInIGJyYW5jaC4KKyMKKyMgdGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdygpIGFyZ3VtZW50czoKKyMgJDEgPSBzdWNjZXNzIG9yIGZhaWx1cmUKKyMgJDIgPSBwdXNoLmRlZmF1bHQgdmFsdWUKKyMgJDMgPSBicmFuY2ggdG8gY2hlY2sgZm9yIGFjdHVhbCBvdXRwdXQgKG1hc3RlciBvciBmb28pCisjICQ0ID0gW29wdGlvbmFsXSBzd2l0Y2ggdG8gdHJpYW5ndWxhciB3b3JrZmxvdworCisjIHVwZGF0ZSBwYXJlbnQxJ3MgbWFzdGVyICh3aGljaCBpcyBub3Qgb3VyIHVwc3RyZWFtKQordGVzdF9wdXNoZGVmYXVsdF93b3JrZmxvdyBzdWNjZXNzIGN1cnJlbnQgbWFzdGVyCisKKyMgdXBkYXRlIHBhcmVudDEncyBmb28gKHdoaWNoIGlzIG91ciB1cHN0cmVhbSkKK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgc3VjY2VzcyB1cHN0cmVhbSBmb28KKworIyB1cHNyZWFtIGlzIGZvbyB3aGljaCBpcyBub3QgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgYnJhbmNoCit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IGZhaWx1cmUgc2ltcGxlIG1hc3RlcgorCisjIG1hc3RlciBhbmQgZm9vIGFyZSB1cGRhdGVkCit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IHN1Y2Nlc3MgbWF0Y2hpbmcgbWFzdGVyCisKKyMgbWFzdGVyIGlzIHVwZGF0ZWQKK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgc3VjY2VzcyBjdXJyZW50IG1hc3RlciB0cmlhbmd1bGFyCisKKyMgdXBzdHJlYW0gbW9kZSBjYW5ub3QgYmUgdXNlZCBpbiB0cmlhbmd1bGFyCit0ZXN0X3B1c2hkZWZhdWx0X3dvcmtmbG93IGZhaWx1cmUgdXBzdHJlYW0gZm9vIHRyaWFuZ3VsYXIKKworIyBpbiB0cmlhbmd1bGFyLCAnc2ltcGxlJyB3b3JrcyBhcyAnY3VycmVudCcgYW5kIHVwZGF0ZSB0aGUgYnJhbmNoCisjIHdpdGggdGhlIHNhbWUgbmFtZS4KK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgc3VjY2VzcyBzaW1wbGUgbWFzdGVyIHRyaWFuZ3VsYXIKKworIyBtYXN0ZXIgaXMgdXBkYXRlZCAocGFyZW50MiBkb2VzIG5vdCBoYXZlIGZvbykKK3Rlc3RfcHVzaGRlZmF1bHRfd29ya2Zsb3cgc3VjY2VzcyBtYXRjaGluZyBtYXN0ZXIgdHJpYW5ndWxhcgorCisjIGRlZmF1bHQgdGVzdHMsIHdoZW4gbm8gcHVzaC1kZWZhdWx0IGlzIHNwZWNpZmllZC4gVGhpcworIyBzaG91bGQgYmVoYXZlIHRoZSBzYW1lIGFzICJzaW1wbGUiIGluIG5vbi10cmlhbmd1bGFyCisjIHNldHRpbmdzLCBhbmQgYXMgImN1cnJlbnQiIG90aGVyd2lzZS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCBiZWhhdmlvciBhbGxvd3MgInNpbXBsZSIgcHVzaCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHBhcmVudDEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvbWFzdGVyICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnB1c2hkZWZhdWx0IHBhcmVudDEgJiYKKwl0ZXN0X2NvbW1pdCBkZWZhdWx0LW1hc3Rlci1tYXN0ZXIgJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyAiIiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVmYXVsdCBiZWhhdmlvciByZWplY3RzIG5vbi1zaW1wbGUgcHVzaCcgJworCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHBhcmVudDEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnB1c2hkZWZhdWx0IHBhcmVudDEgJiYKKwl0ZXN0X2NvbW1pdCBkZWZhdWx0LW1hc3Rlci1mb28gJiYKKwl0ZXN0X3B1c2hfZmFpbHVyZSAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWZhdWx0IHRyaWFuZ3VsYXIgYmVoYXZpb3IgYWN0cyBsaWtlICJjdXJyZW50IicgJworCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIucmVtb3RlIHBhcmVudDEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZm9vICYmCisJdGVzdF9jb25maWcgcmVtb3RlLnB1c2hkZWZhdWx0IHBhcmVudDIgJiYKKwl0ZXN0X2NvbW1pdCBkZWZhdWx0LXRyaWFuZ3VsYXIgJiYKKwl0ZXN0X3B1c2hfc3VjY2VzcyAiIiBtYXN0ZXIgcmVwbzIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTI5LXB1c2gtZXJyb3JzLnNoIGIvdC90NTUyOS1wdXNoLWVycm9ycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODcxMzA3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUyOS1wdXNoLWVycm9ycy5zaApAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZGV0ZWN0IHNvbWUgcHVzaCBlcnJvcnMgZWFybHkgKGJlZm9yZSBjb250YWN0aW5nIHJlbW90ZSknCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29tbWl0cycgJworCXRlc3RfY29tbWl0IG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW1vdGUnICcKKwlnaXQgaW5pdCAtLWJhcmUgcmVtb3RlLmdpdCAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiByZW1vdGUuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZha2UgcmVjZWl2ZS1wYWNrJyAnCisJRkFLRV9SUF9ST09UPSQocHdkKSAmJgorCWV4cG9ydCBGQUtFX1JQX1JPT1QgJiYKKwl3cml0ZV9zY3JpcHQgZmFrZS1ycCA8PC1cRU9GICYmCisJZWNobyB5ZXMgPiIkRkFLRV9SUF9ST09UIi9ycC1yYW4KKwlleGl0IDEKKwlFT0YKKwlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4ucmVjZWl2ZXBhY2sgIlwiXCRGQUtFX1JQX1JPT1QvZmFrZS1ycFwiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgbWlzc2luZyBicmFuY2hlcyBlYXJseScgJworCWVjaG8gbm8gPnJwLXJhbiAmJgorCWVjaG8gbm8gPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiBtaXNzaW5nICYmCisJdGVzdF9jbXAgZXhwZWN0IHJwLXJhbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgbWlzc2luZyBzaGExIGV4cHJlc3Npb25zIGVhcmx5JyAnCisJZWNobyBubyA+cnAtcmFuICYmCisJZWNobyBubyA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggb3JpZ2luIG1hc3Rlcn4yOm1hc3RlciAmJgorCXRlc3RfY21wIGV4cGVjdCBycC1yYW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IGFtYmlndW91cyByZWZzIGVhcmx5JyAnCisJZ2l0IGJyYW5jaCBmb28gJiYKKwlnaXQgdGFnIGZvbyAmJgorCWVjaG8gbm8gPnJwLXJhbiAmJgorCWVjaG8gbm8gPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIG9yaWdpbiBmb28gJiYKKwl0ZXN0X2NtcCBleHBlY3QgcnAtcmFuCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzMC11cGxvYWQtcGFjay1lcnJvci5zaCBiL3QvdDU1MzAtdXBsb2FkLXBhY2stZXJyb3Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzkzMmU3OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzAtdXBsb2FkLXBhY2stZXJyb3Iuc2gKQEAgLTAsMCArMSw5MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Vycm9ycyBpbiB1cGxvYWQtcGFjaycKKworLiAuL3Rlc3QtbGliLnNoCisKK0Q9YHB3ZGAKKworY29ycnVwdF9yZXBvICgpIHsKKwlvYmplY3Rfc2hhMT0kKGdpdCByZXYtcGFyc2UgIiQxIikgJiYKKwlvYj0kKGV4cHIgIiRvYmplY3Rfc2hhMSIgOiAiXCguLlwpIikgJiYKKwlqZWN0PSQoZXhwciAiJG9iamVjdF9zaGExIiA6ICIuLlwoLi4qXCkiKSAmJgorCXJtIC1mICIuZ2l0L29iamVjdHMvJG9iLyRqZWN0IgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhbmQgY29ycnVwdCByZXBvc2l0b3J5JyAnCisKKwllY2hvIGZpbGUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgcmV2LXBhcnNlIDpmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBvcmlnaW5hbCAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gY2hhbmdlZCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gY2hhbmdlZCAmJgorCWNvcnJ1cHRfcmVwbyBIRUFEOmZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsb2FkLXBhY2sgZmFpbHMgZHVlIHRvIGVycm9yIGluIHBhY2stb2JqZWN0cyBwYWNraW5nJyAnCisKKwlwcmludGYgIjAwMzJ3YW50ICVzXG4wMDAwMDAwOWRvbmVcbjAwMDAiIFwKKwkJJChnaXQgcmV2LXBhcnNlIEhFQUQpID5pbnB1dCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGxvYWQtcGFjayAuIDxpbnB1dCA+L2Rldi9udWxsIDI+b3V0cHV0LmVyciAmJgorCXRlc3RfaTE4bmdyZXAgInVuYWJsZSB0byByZWFkIiBvdXRwdXQuZXJyICYmCisJdGVzdF9pMThuZ3JlcCAicGFjay1vYmplY3RzIGRpZWQiIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29ycnVwdCByZXBvIGRpZmZlcmVudGx5JyAnCisKKwlnaXQgaGFzaC1vYmplY3QgLXcgZmlsZSAmJgorCWNvcnJ1cHRfcmVwbyBIRUFEXl57dHJlZX0KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmc2NrIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZzY2sKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1wYWNrIGZhaWxzIGR1ZSB0byBlcnJvciBpbiByZXYtbGlzdCcgJworCisJcHJpbnRmICIwMDMyd2FudCAlc1xuMDAzNHNoYWxsb3cgJXMwMDAwMDAwOWRvbmVcbjAwMDAiIFwKKwkJJChnaXQgcmV2LXBhcnNlIEhFQUQpICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwbG9hZC1wYWNrIC4gPGlucHV0ID4vZGV2L251bGwgMj5vdXRwdXQuZXJyICYmCisJZ3JlcCAiYmFkIHRyZWUgb2JqZWN0IiBvdXRwdXQuZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwbG9hZC1wYWNrIGVycm9yIG1lc3NhZ2Ugd2hlbiBiYWQgcmVmIHJlcXVlc3RlZCcgJworCisJcHJpbnRmICIwMDQ1d2FudCAlcyBtdWx0aV9hY2tfZGV0YWlsZWRcbjAwMDAwMDA5ZG9uZVxuMDAwMCIgXAorCQkiZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZiIgPmlucHV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHVwbG9hZC1wYWNrIC4gPGlucHV0ID5vdXRwdXQgMj5vdXRwdXQuZXJyICYmCisJZ3JlcCAtcSAibm90IG91ciByZWYiIG91dHB1dC5lcnIgJiYKKwkhIGdyZXAgLXEgbXVsdGlfYWNrX2RldGFpbGVkIG91dHB1dC5lcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsb2FkLXBhY2sgZmFpbHMgZHVlIHRvIGVycm9yIGluIHBhY2stb2JqZWN0cyBlbnVtZXJhdGlvbicgJworCisJcHJpbnRmICIwMDMyd2FudCAlc1xuMDAwMDAwMDlkb25lXG4wMDAwIiBcCisJCSQoZ2l0IHJldi1wYXJzZSBIRUFEKSA+aW5wdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdXBsb2FkLXBhY2sgLiA8aW5wdXQgPi9kZXYvbnVsbCAyPm91dHB1dC5lcnIgJiYKKwlncmVwICJiYWQgdHJlZSBvYmplY3QiIG91dHB1dC5lcnIgJiYKKwlncmVwICJwYWNrLW9iamVjdHMgZGllZCIgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZW1wdHkgcmVwb3NpdG9yeScgJworCisJbWtkaXIgZm9vICYmCisJY2QgZm9vICYmCisJZ2l0IGluaXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmYWlscycgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZldGNoIC4uIG1hc3RlcgorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzMS1kZWVwLXN1Ym1vZHVsZS1wdXNoLnNoIGIvdC90NTUzMS1kZWVwLXN1Ym1vZHVsZS1wdXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1MDc0ODcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTMxLWRlZXAtc3VibW9kdWxlLXB1c2guc2gKQEAgLTAsMCArMSwyMTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd1bnBhY2stb2JqZWN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCW1rZGlyIHB1Yi5naXQgJiYKKwlHSVRfRElSPXB1Yi5naXQgZ2l0IGluaXQgLS1iYXJlICYmCisJR0lUX0RJUj1wdWIuZ2l0IGdpdCBjb25maWcgcmVjZWl2ZS5mc2Nrb2JqZWN0cyB0cnVlICYmCisJbWtkaXIgd29yayAmJgorCSgKKwkJY2Qgd29yayAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCQlta2RpciAtcCBnYXIvYmFnZSAmJgorCQkoCisJCQljZCBnYXIvYmFnZSAmJgorCQkJZ2l0IGluaXQgJiYKKwkJCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nICYmCisJCQk+anVuayAmJgorCQkJZ2l0IGFkZCBqdW5rICYmCisJCQlnaXQgY29tbWl0IC1tICJJbml0aWFsIGp1bmsiCisJCSkgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJJbml0aWFsIHN1cGVycHJvamVjdCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgcHVzaCAnCisJKAorCQljZCB3b3JrICYmCisJCWdpdCBwdXNoIC4uL3B1Yi5naXQgbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGlmIHN1Ym1vZHVsZSBoYXMgbm8gcmVtb3RlJyAnCisJKAorCQljZCB3b3JrL2dhci9iYWdlICYmCisJCT5qdW5rMiAmJgorCQlnaXQgYWRkIGp1bmsyICYmCisJCWdpdCBjb21taXQgLW0gIlNlY29uZCBqdW5rIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJTZWNvbmQgY29tbWl0IGZvciBnYXIvYmFnZSIgJiYKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Y2hlY2sgLi4vcHViLmdpdCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZmFpbHMgaWYgc3VibW9kdWxlIGNvbW1pdCBub3Qgb24gcmVtb3RlJyAnCisJKAorCQljZCB3b3JrL2dhciAmJgorCQlnaXQgY2xvbmUgLS1iYXJlIGJhZ2UgLi4vLi4vc3VibW9kdWxlLmdpdCAmJgorCQljZCBiYWdlICYmCisJCWdpdCByZW1vdGUgYWRkIG9yaWdpbiAuLi8uLi8uLi9zdWJtb2R1bGUuZ2l0ICYmCisJCWdpdCBmZXRjaCAmJgorCQk+anVuazMgJiYKKwkJZ2l0IGFkZCBqdW5rMyAmJgorCQlnaXQgY29tbWl0IC1tICJUaGlyZCBqdW5rIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJUaGlyZCBjb21taXQgZm9yIGdhci9iYWdlIiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1jaGVjayAuLi9wdWIuZ2l0IG1hc3RlcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBzdWNjZWVkcyBhZnRlciBjb21taXQgd2FzIHB1c2hlZCB0byByZW1vdGUnICcKKwkoCisJCWNkIHdvcmsvZ2FyL2JhZ2UgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Y2hlY2sgLi4vcHViLmdpdCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZmFpbHMgd2hlbiBjb21taXQgb24gbXVsdGlwbGUgYnJhbmNoZXMgaWYgb25lIGJyYW5jaCBoYXMgbm8gcmVtb3RlJyAnCisJKAorCQljZCB3b3JrL2dhci9iYWdlICYmCisJCT5qdW5rNCAmJgorCQlnaXQgYWRkIGp1bms0ICYmCisJCWdpdCBjb21taXQgLW0gIkZvdXJ0aCBqdW5rIgorCSkgJiYKKwkoCisJCWNkIHdvcmsgJiYKKwkJZ2l0IGJyYW5jaCBicmFuY2gyICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRm91cnRoIGNvbW1pdCBmb3IgZ2FyL2JhZ2UiICYmCisJCWdpdCBjaGVja291dCBicmFuY2gyICYmCisJCSgKKwkJCWNkIGdhci9iYWdlICYmCisJCQlnaXQgY2hlY2tvdXQgSEVBRH4xCisJCSkgJiYKKwkJPmp1bmsxICYmCisJCWdpdCBhZGQganVuazEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRmlyc3QganVuayIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9Y2hlY2sgLi4vcHViLmdpdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBzdWNjZWVkcyBpZiBzdWJtb2R1bGUgaGFzIG5vIHJlbW90ZSBhbmQgaXMgb24gdGhlIGZpcnN0IHN1cGVycHJvamVjdCBjb21taXQnICcKKwlnaXQgaW5pdCAtLWJhcmUgYSAmJgorCWdpdCBjbG9uZSBhIGExICYmCisJKAorCQljZCBhMSAmJgorCQlnaXQgaW5pdCBiCisJCSgKKwkJCWNkIGIgJiYKKwkJCT5qdW5rICYmCisJCQlnaXQgYWRkIGp1bmsgJiYKKwkJCWdpdCBjb21taXQgLW0gImluaXRpYWwiCisJCSkgJiYKKwkJZ2l0IGFkZCBiICYmCisJCWdpdCBjb21taXQgLW0gImFkZGVkIHN1Ym1vZHVsZSIgJiYKKwkJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZT1jaGVjayBvcmlnaW4gbWFzdGVyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHVucHVzaGVkIHN1Ym1vZHVsZXMgd2hlbiBub3QgbmVlZGVkJyAnCisJKAorCQljZCB3b3JrICYmCisJCSgKKwkJCWNkIGdhci9iYWdlICYmCisJCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCQk+anVuazUgJiYKKwkJCWdpdCBhZGQganVuazUgJiYKKwkJCWdpdCBjb21taXQgLW0gIkZpZnRoIGp1bmsiICYmCisJCQlnaXQgcHVzaCAmJgorCQkJZ2l0IHJldi1wYXJzZSBvcmlnaW4vbWFzdGVyID4uLi8uLi8uLi9leHBlY3RlZAorCQkpICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJGaWZ0aCBjb21taXQgZm9yIGdhci9iYWdlIiAmJgorCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBzdWJtb2R1bGUuZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgbWFzdGVyID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdW5wdXNoZWQgc3VibW9kdWxlcyB3aGVuIG5vdCBuZWVkZWQgMicgJworCSgKKwkJY2Qgc3VibW9kdWxlLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIG1hc3RlciA+Li4vZXhwZWN0ZWQKKwkpICYmCisJKAorCQljZCB3b3JrICYmCisJCSgKKwkJCWNkIGdhci9iYWdlICYmCisJCQk+anVuazYgJiYKKwkJCWdpdCBhZGQganVuazYgJiYKKwkJCWdpdCBjb21taXQgLW0gIlNpeHRoIGp1bmsiCisJCSkgJiYKKwkJPmp1bmsyICYmCisJCWdpdCBhZGQganVuazIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiU2Vjb25kIGp1bmsgZm9yIHdvcmsiICYmCisJCWdpdCBwdXNoIC0tcmVjdXJzZS1zdWJtb2R1bGVzPW9uLWRlbWFuZCAuLi9wdWIuZ2l0IG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIHN1Ym1vZHVsZS5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSBtYXN0ZXIgPi4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB1bnB1c2hlZCBzdWJtb2R1bGVzIHJlY3Vyc2l2ZWx5JyAnCisJKAorCQljZCB3b3JrICYmCisJCSgKKwkJCWNkIGdhci9iYWdlICYmCisJCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCQk+IGp1bms3ICYmCisJCQlnaXQgYWRkIGp1bms3ICYmCisJCQlnaXQgY29tbWl0IC1tICJTZXZlbnRoIGp1bmsiICYmCisJCQlnaXQgcmV2LXBhcnNlIG1hc3RlciA+Li4vLi4vLi4vZXhwZWN0ZWQKKwkJKSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBhZGQgZ2FyL2JhZ2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiU2V2ZW50aCBjb21taXQgZm9yIGdhci9iYWdlIiAmJgorCQlnaXQgcHVzaCAtLXJlY3Vyc2Utc3VibW9kdWxlcz1vbi1kZW1hbmQgLi4vcHViLmdpdCBtYXN0ZXIKKwkpICYmCisJKAorCQljZCBzdWJtb2R1bGUuZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgbWFzdGVyID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdW5wdXNoYWJsZSBzdWJtb2R1bGUgcmVjdXJzaXZlbHkgZmFpbHMnICcKKwkoCisJCWNkIHdvcmsgJiYKKwkJKAorCQkJY2QgZ2FyL2JhZ2UgJiYKKwkJCWdpdCByZXYtcGFyc2Ugb3JpZ2luL21hc3RlciA+Li4vLi4vLi4vZXhwZWN0ZWQgJiYKKwkJCWdpdCBjaGVja291dCBtYXN0ZXJ+MCAmJgorCQkJPiBqdW5rOCAmJgorCQkJZ2l0IGFkZCBqdW5rOCAmJgorCQkJZ2l0IGNvbW1pdCAtbSAiRWlnaHRoIGp1bmsiCisJCSkgJiYKKwkJZ2l0IGFkZCBnYXIvYmFnZSAmJgorCQlnaXQgY29tbWl0IC1tICJFaWdodGggY29tbWl0IGZvciBnYXIvYmFnZSIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kIC4uL3B1Yi5naXQgbWFzdGVyCisJKSAmJgorCSgKKwkJY2Qgc3VibW9kdWxlLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIG1hc3RlciA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MzItZmV0Y2gtcHJveHkuc2ggYi90L3Q1NTMyLWZldGNoLXByb3h5LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1MzFiZDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTMyLWZldGNoLXByb3h5LnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmZXRjaGluZyB2aWEgZ2l0Oi8vIHVzaW5nIGNvcmUuZ2l0cHJveHknCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVtb3RlIHJlcG8nICcKKwlnaXQgaW5pdCByZW1vdGUgJiYKKwkoY2QgcmVtb3RlICYmCisJIGVjaG8gY29udGVudCA+ZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSBvbmUKKwkpCisnCisKK2NhdCA+cHJveHkgPDwnRU9GJworIyEvYmluL3NoCitlY2hvID4mMiAicHJveHlpbmcgZm9yICQqIgorY21kPWAiJFBFUkxfUEFUSCIgLWUgJworCXJlYWQoU1RESU4sICRidWYsIDQpOworCW15ICRuID0gaGV4KCRidWYpIC0gNDsKKwlyZWFkKFNURElOLCAkYnVmLCAkbik7CisJbXkgKCRjbWQsICRvdGhlcikgPSBzcGxpdCAvXDAvLCAkYnVmOworCSMgZHJvcCBhYnNvbHV0ZS1wYXRoIG9uIHJlcG8gbmFtZQorCSRjbWQgPX4gc3sgL317IH07CisJcHJpbnQgJGNtZDsKKydgCitlY2hvID4mMiAiUnVubmluZyAnJGNtZCciCitleGVjICRjbWQKK0VPRgorY2htb2QgK3ggcHJveHkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGxvY2FsIHJlcG8nICcKKwlnaXQgcmVtb3RlIGFkZCBmYWtlIGdpdDovL2V4YW1wbGUuY29tL3JlbW90ZSAmJgorCWdpdCBjb25maWcgY29yZS5naXRwcm94eSAuL3Byb3h5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHRocm91Z2ggcHJveHkgd29ya3MnICcKKwlnaXQgZmV0Y2ggZmFrZSAmJgorCWVjaG8gb25lID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSVzIEZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTMzLXB1c2gtY2FzLnNoIGIvdC90NTUzMy1wdXNoLWNhcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNDAyZDhkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTUzMy1wdXNoLWNhcy5zaApAQCAtMCwwICsxLDE4OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NvbXBhcmUgJiBzd2FwIHB1c2ggZm9yY2UvZGVsZXRlIHNhZmV0eScKKworLiAuL3Rlc3QtbGliLnNoCisKK3NldHVwX3NyY2RzdF9iYXNpYyAoKSB7CisJcm0gLWZyIHNyYyBkc3QgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAuIHNyYyAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIHNyYyBkc3QgJiYKKwkoCisJCWNkIHNyYyAmJiBnaXQgY2hlY2tvdXQgSEVBRF4wCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwkjIGNyZWF0ZSB0ZW1wbGF0ZSByZXBvc2l0b3J5CisJdGVzdF9jb21taXQgQSAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwl0ZXN0X2NvbW1pdCBDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gdXBkYXRlIChwcm90ZWN0ZWQpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9jb21taXQgRCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyOm1hc3RlciBvcmlnaW4gbWFzdGVyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgLiByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byB1cGRhdGUgKHByb3RlY3RlZCwgZm9yY2VkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfY29tbWl0IEQgJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZSAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyOm1hc3RlciBvcmlnaW4gbWFzdGVyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgZHN0IHJlZnMvaGVhZHMvbWFzdGVyID5leHBlY3QgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHVwZGF0ZSAocHJvdGVjdGVkLCB0cmFja2luZyknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IEQgJiYKKwkJZ2l0IGNoZWNrb3V0IEhFQUReMAorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9jb21taXQgRSAmJgorCQlnaXQgbHMtcmVtb3RlIC4gcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPmV4cGVjdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyIG9yaWdpbiBtYXN0ZXIgJiYKKwkJZ2l0IGxzLXJlbW90ZSAuIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHVwZGF0ZSAocHJvdGVjdGVkLCB0cmFja2luZywgZm9yY2VkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJdGVzdF9jb21taXQgRCAmJgorCQlnaXQgY2hlY2tvdXQgSEVBRF4wCisJKSAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfY29tbWl0IEUgJiYKKwkJZ2l0IGxzLXJlbW90ZSAuIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZSAtLWZvcmNlLXdpdGgtbGVhc2U9bWFzdGVyIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBkc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gdXBkYXRlIChhbGxvd2VkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2QgZHN0ICYmCisJCXRlc3RfY29tbWl0IEQgJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlPW1hc3RlcjptYXN0ZXJeIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBkc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gdXBkYXRlIChhbGxvd2VkLCB0cmFja2luZyknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwkoCisJCWNkIGRzdCAmJgorCQl0ZXN0X2NvbW1pdCBEICYmCisJCWdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZT1tYXN0ZXIgb3JpZ2luIG1hc3RlcgorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIGRzdCByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byB1cGRhdGUgKGFsbG93ZWQgZXZlbiB0aG91Z2ggbm8tZmYpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCQl0ZXN0X2NvbW1pdCBEICYmCisJCWdpdCBwdXNoIC0tZm9yY2Utd2l0aC1sZWFzZT1tYXN0ZXIgb3JpZ2luIG1hc3RlcgorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIGRzdCByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBkZWxldGUgKHByb3RlY3RlZCknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlPW1hc3RlcjptYXN0ZXJeIG9yaWdpbiA6bWFzdGVyCisJKSAmJgorCWdpdCBscy1yZW1vdGUgc3JjIHJlZnMvaGVhZHMvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gZGVsZXRlIChwcm90ZWN0ZWQsIGZvcmNlZCknICcKKwlzZXR1cF9zcmNkc3RfYmFzaWMgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgcHVzaCAtLWZvcmNlIC0tZm9yY2Utd2l0aC1sZWFzZT1tYXN0ZXI6bWFzdGVyXiBvcmlnaW4gOm1hc3RlcgorCSkgJiYKKwk+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBkZWxldGUgKGFsbG93ZWQpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlPW1hc3RlciBvcmlnaW4gOm1hc3RlcgorCSkgJiYKKwk+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY292ZXIgZXZlcnl0aGluZyB3aXRoIGRlZmF1bHQgZm9yY2Utd2l0aC1sZWFzZSAocHJvdGVjdGVkKScgJworCXNldHVwX3NyY2RzdF9iYXNpYyAmJgorCSgKKwkJY2Qgc3JjICYmCisJCWdpdCBicmFuY2ggbmFzdGVyIG1hc3Rlcl4KKwkpICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9cKiA+ZXhwZWN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlIG9yaWdpbiBtYXN0ZXIgbWFzdGVyOm5hc3RlcgorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIHNyYyByZWZzL2hlYWRzL1wqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvdmVyIGV2ZXJ5dGhpbmcgd2l0aCBkZWZhdWx0IGZvcmNlLXdpdGgtbGVhc2UgKGFsbG93ZWQpJyAnCisJc2V0dXBfc3JjZHN0X2Jhc2ljICYmCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IGJyYW5jaCBuYXN0ZXIgbWFzdGVyXgorCSkgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgZmV0Y2ggJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZS13aXRoLWxlYXNlIG9yaWdpbiBtYXN0ZXIgbWFzdGVyOm5hc3RlcgorCSkgJiYKKwlnaXQgbHMtcmVtb3RlIGRzdCByZWZzL2hlYWRzL21hc3RlciB8CisJc2VkIC1lICJzL21hc3Rlci9uYXN0ZXIvIiA+ZXhwZWN0ICYmCisJZ2l0IGxzLXJlbW90ZSBzcmMgcmVmcy9oZWFkcy9uYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTM0LXB1c2gtc2lnbmVkLnNoIGIvdC90NTUzNC1wdXNoLXNpZ25lZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lY2I4ZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUzNC1wdXNoLXNpZ25lZC5zaApAQCAtMCwwICsxLDE3MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NpZ25lZCBwdXNoJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy5zaAorCitwcmVwYXJlX2RzdCAoKSB7CisJcm0gLWZyIGRzdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gZHN0ICYmCisKKwlnaXQgcHVzaCBkc3QgbWFzdGVyOm5vb3AgbWFzdGVyOmZmIG1hc3Rlcjpub2ZmCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCSMgbWFzdGVyLCBmZiBhbmQgbm9mZiBicmFuY2hlcyBwb2ludGluZyBhdCB0aGUgc2FtZSBjb21taXQKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gaW5pdGlhbCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIG5vb3AgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZmYgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbm9mZiAmJgorCisJIyBub29wIHN0YXlzIHRoZSBzYW1lLCBmZiBhZHZhbmNlcywgbm9mZiByZXdyaXRlcworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLWFtZW5kIC1tIHJld3JpdHRlbiAmJgorCWdpdCBjaGVja291dCBmZiAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnNpZ25lZCBwdXNoIGRvZXMgbm90IHNlbmQgcHVzaCBjZXJ0aWZpY2F0ZScgJworCXByZXBhcmVfZHN0ICYmCisJbWtkaXIgLXAgZHN0Ly5naXQvaG9va3MgJiYKKwl3cml0ZV9zY3JpcHQgZHN0Ly5naXQvaG9va3MvcG9zdC1yZWNlaXZlIDw8LVxFT0YgJiYKKwkjIGRpc2NhcmQgdGhlIHVwZGF0ZSBsaXN0CisJY2F0ID4vZGV2L251bGwKKwkjIHJlY29yZCB0aGUgcHVzaCBjZXJ0aWZpY2F0ZQorCWlmIHRlc3QgLW4gIiR7R0lUX1BVU0hfQ0VSVC19IgorCXRoZW4KKwkJZ2l0IGNhdC1maWxlIGJsb2IgJEdJVF9QVVNIX0NFUlQgPi4uL3B1c2gtY2VydAorCWZpCisJRU9GCisKKwlnaXQgcHVzaCBkc3Qgbm9vcCBmZiArbm9mZiAmJgorCSEgdGVzdCAtZiBkc3QvcHVzaC1jZXJ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RhbGtpbmcgd2l0aCBhIHJlY2VpdmVyIHdpdGhvdXQgcHVzaCBjZXJ0aWZpY2F0ZSBzdXBwb3J0JyAnCisJcHJlcGFyZV9kc3QgJiYKKwlta2RpciAtcCBkc3QvLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCBkc3QvLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUgPDwtXEVPRiAmJgorCSMgZGlzY2FyZCB0aGUgdXBkYXRlIGxpc3QKKwljYXQgPi9kZXYvbnVsbAorCSMgcmVjb3JkIHRoZSBwdXNoIGNlcnRpZmljYXRlCisJaWYgdGVzdCAtbiAiJHtHSVRfUFVTSF9DRVJULX0iCisJdGhlbgorCQlnaXQgY2F0LWZpbGUgYmxvYiAkR0lUX1BVU0hfQ0VSVCA+Li4vcHVzaC1jZXJ0CisJZmkKKwlFT0YKKworCWdpdCBwdXNoIGRzdCBub29wIGZmICtub2ZmICYmCisJISB0ZXN0IC1mIGRzdC9wdXNoLWNlcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLXNpZ25lZCBmYWlscyB3aXRoIGEgcmVjZWl2ZXIgd2l0aG91dCBwdXNoIGNlcnRpZmljYXRlIHN1cHBvcnQnICcKKwlwcmVwYXJlX2RzdCAmJgorCW1rZGlyIC1wIGRzdC8uZ2l0L2hvb2tzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1zaWduZWQgZHN0IG5vb3AgZmYgK25vZmYgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJ0aGUgcmVjZWl2aW5nIGVuZCBkb2VzIG5vdCBzdXBwb3J0IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ25vIGNlcnRpZmljYXRlIGZvciBhIHNpZ25lZCBwdXNoIHdpdGggbm8gdXBkYXRlJyAnCisJcHJlcGFyZV9kc3QgJiYKKwlta2RpciAtcCBkc3QvLmdpdC9ob29rcyAmJgorCXdyaXRlX3NjcmlwdCBkc3QvLmdpdC9ob29rcy9wb3N0LXJlY2VpdmUgPDwtXEVPRiAmJgorCWlmIHRlc3QgLW4gIiR7R0lUX1BVU0hfQ0VSVC19IgorCXRoZW4KKwkJZ2l0IGNhdC1maWxlIGJsb2IgJEdJVF9QVVNIX0NFUlQgPi4uL3B1c2gtY2VydAorCWZpCisJRU9GCisJZ2l0IHB1c2ggZHN0IG5vb3AgJiYKKwkhIHRlc3QgLWYgZHN0L3B1c2gtY2VydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2lnbmVkIHB1c2ggc2VuZHMgcHVzaCBjZXJ0aWZpY2F0ZScgJworCXByZXBhcmVfZHN0ICYmCisJbWtkaXIgLXAgZHN0Ly5naXQvaG9va3MgJiYKKwlnaXQgLUMgZHN0IGNvbmZpZyByZWNlaXZlLmNlcnRub25jZXNlZWQgc2Vrcml0ICYmCisJd3JpdGVfc2NyaXB0IGRzdC8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZSA8PC1cRU9GICYmCisJIyBkaXNjYXJkIHRoZSB1cGRhdGUgbGlzdAorCWNhdCA+L2Rldi9udWxsCisJIyByZWNvcmQgdGhlIHB1c2ggY2VydGlmaWNhdGUKKwlpZiB0ZXN0IC1uICIke0dJVF9QVVNIX0NFUlQtfSIKKwl0aGVuCisJCWdpdCBjYXQtZmlsZSBibG9iICRHSVRfUFVTSF9DRVJUID4uLi9wdXNoLWNlcnQKKwlmaSAmJgorCisJY2F0ID4uLi9wdXNoLWNlcnQtc3RhdHVzIDw8RV9PX0YKKwlTSUdORVI9JHtHSVRfUFVTSF9DRVJUX1NJR05FUi1ub2JvZHl9CisJS0VZPSR7R0lUX1BVU0hfQ0VSVF9LRVktbm9rZXl9CisJU1RBVFVTPSR7R0lUX1BVU0hfQ0VSVF9TVEFUVVMtbm9zdGF0dXN9CisJTk9OQ0VfU1RBVFVTPSR7R0lUX1BVU0hfQ0VSVF9OT05DRV9TVEFUVVMtbm9ub25jZXN0YXR1c30KKwlOT05DRT0ke0dJVF9QVVNIX0NFUlRfTk9OQ0Utbm9ub25jZX0KKwlFX09fRgorCisJRU9GCisKKwlnaXQgcHVzaCAtLXNpZ25lZCBkc3Qgbm9vcCBmZiArbm9mZiAmJgorCisJKAorCQljYXQgPDwtXEVPRiAmJgorCQlTSUdORVI9QyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCQlLRVk9MTNCNkY1MUVDRERFNDMwRAorCQlTVEFUVVM9RworCQlOT05DRV9TVEFUVVM9T0sKKwkJRU9GCisJCXNlZCAtbiAtZSAicy9ebm9uY2UgL05PTkNFPS9wIiAtZSAiL14kL3EiIGRzdC9wdXNoLWNlcnQKKwkpID5leHBlY3QgJiYKKworCWdyZXAgIiQoZ2l0IHJldi1wYXJzZSBub29wIGZmKSByZWZzL2hlYWRzL2ZmIiBkc3QvcHVzaC1jZXJ0ICYmCisJZ3JlcCAiJChnaXQgcmV2LXBhcnNlIG5vb3Agbm9mZikgcmVmcy9oZWFkcy9ub2ZmIiBkc3QvcHVzaC1jZXJ0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGRzdC9wdXNoLWNlcnQtc3RhdHVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdmYWlsIHdpdGhvdXQga2V5IGFuZCBoZWVkIHVzZXIuc2lnbmluZ2tleScgJworCXByZXBhcmVfZHN0ICYmCisJbWtkaXIgLXAgZHN0Ly5naXQvaG9va3MgJiYKKwlnaXQgLUMgZHN0IGNvbmZpZyByZWNlaXZlLmNlcnRub25jZXNlZWQgc2Vrcml0ICYmCisJd3JpdGVfc2NyaXB0IGRzdC8uZ2l0L2hvb2tzL3Bvc3QtcmVjZWl2ZSA8PC1cRU9GICYmCisJIyBkaXNjYXJkIHRoZSB1cGRhdGUgbGlzdAorCWNhdCA+L2Rldi9udWxsCisJIyByZWNvcmQgdGhlIHB1c2ggY2VydGlmaWNhdGUKKwlpZiB0ZXN0IC1uICIke0dJVF9QVVNIX0NFUlQtfSIKKwl0aGVuCisJCWdpdCBjYXQtZmlsZSBibG9iICRHSVRfUFVTSF9DRVJUID4uLi9wdXNoLWNlcnQKKwlmaSAmJgorCisJY2F0ID4uLi9wdXNoLWNlcnQtc3RhdHVzIDw8RV9PX0YKKwlTSUdORVI9JHtHSVRfUFVTSF9DRVJUX1NJR05FUi1ub2JvZHl9CisJS0VZPSR7R0lUX1BVU0hfQ0VSVF9LRVktbm9rZXl9CisJU1RBVFVTPSR7R0lUX1BVU0hfQ0VSVF9TVEFUVVMtbm9zdGF0dXN9CisJTk9OQ0VfU1RBVFVTPSR7R0lUX1BVU0hfQ0VSVF9OT05DRV9TVEFUVVMtbm9ub25jZXN0YXR1c30KKwlOT05DRT0ke0dJVF9QVVNIX0NFUlRfTk9OQ0Utbm9ub25jZX0KKwlFX09fRgorCisJRU9GCisKKwl1bnNldCBHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJZ2l0IGNvbmZpZyB1c2VyLmVtYWlsIGhhc25va2V5QG5vd2hlcmUuY29tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1zaWduZWQgZHN0IG5vb3AgZmYgK25vZmYgJiYKKwlnaXQgY29uZmlnIHVzZXIuc2lnbmluZ2tleSBjb21taXR0ZXJAZXhhbXBsZS5jb20gJiYKKwlnaXQgcHVzaCAtLXNpZ25lZCBkc3Qgbm9vcCBmZiArbm9mZiAmJgorCisJKAorCQljYXQgPDwtXEVPRiAmJgorCQlTSUdORVI9QyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCQlLRVk9MTNCNkY1MUVDRERFNDMwRAorCQlTVEFUVVM9RworCQlOT05DRV9TVEFUVVM9T0sKKwkJRU9GCisJCXNlZCAtbiAtZSAicy9ebm9uY2UgL05PTkNFPS9wIiAtZSAiL14kL3EiIGRzdC9wdXNoLWNlcnQKKwkpID5leHBlY3QgJiYKKworCWdyZXAgIiQoZ2l0IHJldi1wYXJzZSBub29wIGZmKSByZWZzL2hlYWRzL2ZmIiBkc3QvcHVzaC1jZXJ0ICYmCisJZ3JlcCAiJChnaXQgcmV2LXBhcnNlIG5vb3Agbm9mZikgcmVmcy9oZWFkcy9ub2ZmIiBkc3QvcHVzaC1jZXJ0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGRzdC9wdXNoLWNlcnQtc3RhdHVzCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTUzNS1mZXRjaC1wdXNoLXN5bXJlZi5zaCBiL3QvdDU1MzUtZmV0Y2gtcHVzaC1zeW1yZWYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGVkNThkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzUtZmV0Y2gtcHVzaC1zeW1yZWYuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2F2b2lkaW5nIGNvbmZsaWN0aW5nIHVwZGF0ZSB0aHJ1IHN5bXJlZiBhbGlhc2luZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IGNsb25lIC4gc3JjICYmCisJZ2l0IGNsb25lIHNyYyBkc3QxICYmCisJZ2l0IGNsb25lIHNyYyBkc3QyICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJKCBjZCBzcmMgJiYgZ2l0IHB1bGwgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoJyAnCisJKAorCQljZCBzcmMgJiYKKwkJZ2l0IHB1c2ggLi4vZHN0MSAicmVmcy9yZW1vdGVzLyo6cmVmcy9yZW1vdGVzLyoiCisJKSAmJgorCWdpdCBscy1yZW1vdGUgc3JjICJyZWZzL3JlbW90ZXMvKiIgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgZHN0MSAicmVmcy9yZW1vdGVzLyoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJKCBjZCBzcmMgJiYgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgKSA+ZXhwZWN0ICYmCisJKCBjZCBkc3QxICYmIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEICkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2gnICcKKwkoCisJCWNkIGRzdDIgJiYKKwkJZ2l0IGZldGNoIC4uL3NyYyAicmVmcy9yZW1vdGVzLyo6cmVmcy9yZW1vdGVzLyoiCisJKSAmJgorCWdpdCBscy1yZW1vdGUgc3JjICJyZWZzL3JlbW90ZXMvKiIgPmV4cGVjdCAmJgorCWdpdCBscy1yZW1vdGUgZHN0MiAicmVmcy9yZW1vdGVzLyoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJKCBjZCBzcmMgJiYgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgKSA+ZXhwZWN0ICYmCisJKCBjZCBkc3QyICYmIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEICkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTM2LWZldGNoLWNvbmZsaWN0cy5zaCBiL3QvdDU1MzYtZmV0Y2gtY29uZmxpY3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjNWQzYTQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTM2LWZldGNoLWNvbmZsaWN0cy5zaApAQCAtMCwwICsxLDEwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2ZldGNoIGhhbmRsZXMgY29uZmxpY3RpbmcgcmVmc3BlY3MgY29ycmVjdGx5JworCisuIC4vdGVzdC1saWIuc2gKKworRD0kKHB3ZCkKKworc2V0dXBfcmVwb3NpdG9yeSAoKSB7CisJZ2l0IGluaXQgIiQxIiAmJiAoCisJCWNkICIkMSIgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAiJEQiICYmCisJCXNoaWZ0ICYmCisJCWZvciByZWZzcGVjIGluICIkQCIKKwkJZG8KKwkJCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5mZXRjaCAiJHJlZnNwZWMiCisJCWRvbmUKKwkpCit9CisKK3ZlcmlmeV9zdGRlcnIgKCkgeworCWNhdCA+ZXhwZWN0ZWQgJiYKKwkjIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSBlcnJvcgorCSMgImZhdGFsOiBUaGUgcmVtb3RlIGVuZCBodW5nIHVwIHVuZXhwZWN0ZWRseSI6CisJZ3JlcCAtRSAnXihmYXRhbHx3YXJuaW5nKTonIDxlcnJvciB8IGdyZXAgLXYgJ2h1bmcgdXAnID5hY3R1YWwgfCBzb3J0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJJbml0aWFsIiAmJgorCWdpdCBicmFuY2ggYnJhbmNoMSAmJgorCWdpdCB0YWcgdGFnMSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiRmlyc3QiICYmCisJZ2l0IGJyYW5jaCBicmFuY2gyICYmCisJZ2l0IHRhZyB0YWcyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggbm8gY29uZmxpY3QnICcKKwlzZXR1cF9yZXBvc2l0b3J5IG9rICIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgJiYgKAorCQljZCBvayAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjb25mbGljdDogY29uZmlnIHZzLiBjb25maWcnICcKKwlzZXR1cF9yZXBvc2l0b3J5IGNjYyBcCisJCSIrcmVmcy9oZWFkcy9icmFuY2gxOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMSIgXAorCQkiK3JlZnMvaGVhZHMvYnJhbmNoMjpyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDEiICYmICgKKwkJY2QgY2NjICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCBvcmlnaW4gMj5lcnJvciAmJgorCQl2ZXJpZnlfc3RkZXJyIDw8LVxFT0YKKwkJZmF0YWw6IENhbm5vdCBmZXRjaCBib3RoIHJlZnMvaGVhZHMvYnJhbmNoMSBhbmQgcmVmcy9oZWFkcy9icmFuY2gyIHRvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMQorCQlFT0YKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGR1cGxpY2F0ZTogY29uZmlnIHZzLiBjb25maWcnICcKKwlzZXR1cF9yZXBvc2l0b3J5IGRjYyBcCisJCSIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIgXAorCQkiK3JlZnMvaGVhZHMvYnJhbmNoMTpyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDEiICYmICgKKwkJY2QgZGNjICYmCisJCWdpdCBmZXRjaCBvcmlnaW4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNvbmZsaWN0OiBhcmcgb3ZlcnJpZGVzIGNvbmZpZycgJworCXNldHVwX3JlcG9zaXRvcnkgYW9jIFwKKwkJIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJiAoCisJCWNkIGFvYyAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luIHJlZnMvaGVhZHMvYnJhbmNoMjpyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGNvbmZsaWN0OiBhcmcgdnMuIGFyZycgJworCXNldHVwX3JlcG9zaXRvcnkgY2FhICYmICgKKwkJY2QgY2FhICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBmZXRjaCBvcmlnaW4gXAorCQkJcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiBcCisJCQlyZWZzL2hlYWRzL2JyYW5jaDI6cmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2gxIDI+ZXJyb3IgJiYKKwkJdmVyaWZ5X3N0ZGVyciA8PC1cRU9GCisJCWZhdGFsOiBDYW5ub3QgZmV0Y2ggYm90aCByZWZzL2hlYWRzL2JyYW5jaDEgYW5kIHJlZnMvaGVhZHMvYnJhbmNoMiB0byByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDEKKwkJRU9GCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjb25mbGljdDogY3Jpc3MtY3Jvc3MgYXJncycgJworCXNldHVwX3JlcG9zaXRvcnkgeGFhIFwKKwkJIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJiAoCisJCWNkIHhhYSAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luIFwKKwkJCXJlZnMvaGVhZHMvYnJhbmNoMTpyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDIgXAorCQkJcmVmcy9oZWFkcy9icmFuY2gyOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMSAyPmVycm9yICYmCisJCXZlcmlmeV9zdGRlcnIgPDwtXEVPRgorCQl3YXJuaW5nOiByZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaDEgdXN1YWxseSB0cmFja3MgcmVmcy9oZWFkcy9icmFuY2gxLCBub3QgcmVmcy9oZWFkcy9icmFuY2gyCisJCXdhcm5pbmc6IHJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNoMiB1c3VhbGx5IHRyYWNrcyByZWZzL2hlYWRzL2JyYW5jaDIsIG5vdCByZWZzL2hlYWRzL2JyYW5jaDEKKwkJRU9GCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MzctZmV0Y2gtc2hhbGxvdy5zaCBiL3QvdDU1MzctZmV0Y2gtc2hhbGxvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOTgwNTc0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTUzNy1mZXRjaC1zaGFsbG93LnNoCkBAIC0wLDAgKzEsMTg5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2gvY2xvbmUgZnJvbSBhIHNoYWxsb3cgY2xvbmUnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjb21taXQoKSB7CisJZWNobyAiJDEiID50cmFja2VkICYmCisJZ2l0IGFkZCB0cmFja2VkICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY29tbWl0IDEgJiYKKwljb21taXQgMiAmJgorCWNvbW1pdCAzICYmCisJY29tbWl0IDQgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHRyYW5zZmVyLmZzY2tPYmplY3RzIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2hhbGxvdyBjbG9uZScgJworCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tZGVwdGg9MiAuZ2l0IHNoYWxsb3cgJiYKKwlnaXQgLS1naXQtZGlyPXNoYWxsb3cvLmdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCis0CiszCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZyb20gc2hhbGxvdyBjbG9uZScgJworCWdpdCBjbG9uZSAtLW5vLWxvY2FsIHNoYWxsb3cgc2hhbGxvdzIgJiYKKwkoCisJY2Qgc2hhbGxvdzIgJiYKKwlnaXQgZnNjayAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCis0CiszCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmcm9tIHNoYWxsb3cgY2xvbmUnICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWNvbW1pdCA1CisJKSAmJgorCSgKKwljZCBzaGFsbG93MiAmJgorCWdpdCBmZXRjaCAmJgorCWdpdCBmc2NrICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorNQorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggLS1kZXB0aCBmcm9tIHNoYWxsb3cgY2xvbmUnICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWNvbW1pdCA2CisJKSAmJgorCSgKKwljZCBzaGFsbG93MiAmJgorCWdpdCBmZXRjaCAtLWRlcHRoPTIgJiYKKwlnaXQgZnNjayAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzYKKzUKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tdW5zaGFsbG93IGZyb20gc2hhbGxvdyBjbG9uZScgJworCSgKKwljZCBzaGFsbG93MiAmJgorCWdpdCBmZXRjaCAtLXVuc2hhbGxvdyAmJgorCWdpdCBmc2NrICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyBvcmlnaW4vbWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorNgorNQorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggc29tZXRoaW5nIHVwc3RyZWFtIGhhcyBidXQgaGlkZGVuIGJ5IGNsaWVudHMgc2hhbGxvdyBib3VuZGFyaWVzJyAnCisJIyB0aGUgYmxvYiAiMSIgaXMgYXZhaWxhYmxlIGluIC5naXQgYnV0IGhpZGRlbiBieSB0aGUKKwkjIHNoYWxsb3cyLy5naXQvc2hhbGxvdyBhbmQgaXQgc2hvdWxkIGJlIHJlc2VudAorCSEgZ2l0IC0tZ2l0LWRpcj1zaGFsbG93Mi8uZ2l0IGNhdC1maWxlIGJsb2IgYGVjaG8gMXxnaXQgaGFzaC1vYmplY3QgLS1zdGRpbmAgPi9kZXYvbnVsbCAmJgorCWVjaG8gMSA+MS50ICYmCisJZ2l0IGFkZCAxLnQgJiYKKwlnaXQgY29tbWl0IC1tIGFkZC0xLWJhY2sgJiYKKwkoCisJY2Qgc2hhbGxvdzIgJiYKKwlnaXQgZmV0Y2ggLi4vLmdpdCArcmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9yZW1vdGVzL3RvcC9tYXN0ZXIgJiYKKwlnaXQgZnNjayAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgdG9wL21hc3RlciA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK2FkZC0xLWJhY2sKKzQKKzMKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpICYmCisJZ2l0IC0tZ2l0LWRpcj1zaGFsbG93Mi8uZ2l0IGNhdC1maWxlIGJsb2IgYGVjaG8gMXxnaXQgaGFzaC1vYmplY3QgLS1zdGRpbmAgPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHRoYXQgcmVxdWlyZXMgY2hhbmdlcyBpbiAuZ2l0L3NoYWxsb3cgaXMgZmlsdGVyZWQnICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBuby1zaGFsbG93ICYmCisJY29tbWl0IG5vLXNoYWxsb3cKKwkpICYmCisJZ2l0IGluaXQgbm90c2hhbGxvdyAmJgorCSgKKwljZCBub3RzaGFsbG93ICYmCisJZ2l0IGZldGNoIC4uL3NoYWxsb3cvLmdpdCByZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL3NoYWxsb3cvKiYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbC5yZWZzICYmCisJY2F0IDw8RU9GID5leHBlY3QucmVmcyAmJgorcmVmcy9yZW1vdGVzL3NoYWxsb3cvbm8tc2hhbGxvdworRU9GCisJdGVzdF9jbXAgZXhwZWN0LnJlZnMgYWN0dWFsLnJlZnMgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIHNoYWxsb3cvbm8tc2hhbGxvdyA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK25vLXNoYWxsb3cKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIC0tdXBkYXRlLXNoYWxsb3cnICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwljb21taXQgNyAmJgorCWdpdCB0YWcgLW0gZm9vIGhlYXZ5LXRhZyBIRUFEXiAmJgorCWdpdCB0YWcgbGlnaHQtdGFnIEhFQUReOnRyYWNrZWQKKwkpICYmCisJKAorCWNkIG5vdHNoYWxsb3cgJiYKKwlnaXQgZmV0Y2ggLS11cGRhdGUtc2hhbGxvdyAuLi9zaGFsbG93Ly5naXQgcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9zaGFsbG93LyogJiYKKwlnaXQgZnNjayAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1zb3J0PXJlZm5hbWUgLS1mb3JtYXQ9IiUocmVmbmFtZSkiID5hY3R1YWwucmVmcyAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0LnJlZnMgJiYKK3JlZnMvcmVtb3Rlcy9zaGFsbG93L21hc3RlcgorcmVmcy9yZW1vdGVzL3NoYWxsb3cvbm8tc2hhbGxvdworcmVmcy90YWdzL2hlYXZ5LXRhZworcmVmcy90YWdzL2xpZ2h0LXRhZworRU9GCisJdGVzdF9jbXAgZXhwZWN0LnJlZnMgYWN0dWFsLnJlZnMgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIHNoYWxsb3cvbWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorNworNgorNQorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0sU0FOSVRZICdzaGFsbG93IGZldGNoIGZyb20gYSByZWFkLW9ubHkgcmVwbycgJworCWNwIC1SIC5naXQgcmVhZC1vbmx5LmdpdCAmJgorCWZpbmQgcmVhZC1vbmx5LmdpdCAtcHJpbnQgfCB4YXJncyBjaG1vZCAtdyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZmluZCByZWFkLW9ubHkuZ2l0IC10eXBlIGQgLXByaW50IHwgeGFyZ3MgY2htb2QgK3ciICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1kZXB0aD0yIHJlYWQtb25seS5naXQgZnJvbS1yZWFkLW9ubHkgJiYKKwlnaXQgLS1naXQtZGlyPWZyb20tcmVhZC1vbmx5Ly5naXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorYWRkLTEtYmFjaworNAorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1MzgtcHVzaC1zaGFsbG93LnNoIGIvdC90NTUzOC1wdXNoLXNoYWxsb3cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2VlZTk1YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1MzgtcHVzaC1zaGFsbG93LnNoCkBAIC0wLDAgKzEsMTIzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncHVzaCBmcm9tL3RvIGEgc2hhbGxvdyBjbG9uZScKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvbW1pdCgpIHsKKwllY2hvICIkMSIgPnRyYWNrZWQgJiYKKwlnaXQgYWRkIHRyYWNrZWQgJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHRyYW5zZmVyLmZzY2tPYmplY3RzIHRydWUgJiYKKwljb21taXQgMSAmJgorCWNvbW1pdCAyICYmCisJY29tbWl0IDMgJiYKKwljb21taXQgNCAmJgorCWdpdCBjbG9uZSAuIGZ1bGwgJiYKKwkoCisJZ2l0IGluaXQgZnVsbC1hYmMgJiYKKwljZCBmdWxsLWFiYyAmJgorCWNvbW1pdCBhICYmCisJY29tbWl0IGIgJiYKKwljb21taXQgYworCSkgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWRlcHRoPTIgLmdpdCBzaGFsbG93ICYmCisJZ2l0IC0tZ2l0LWRpcj1zaGFsbG93Ly5naXQgbG9nIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tZGVwdGg9MiBmdWxsLWFiYy8uZ2l0IHNoYWxsb3cyICYmCisJZ2l0IC0tZ2l0LWRpcj1zaGFsbG93Mi8uZ2l0IGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK2MKK2IKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmcm9tIHNoYWxsb3cgY2xvbmUnICcKKwkoCisJY2Qgc2hhbGxvdyAmJgorCWNvbW1pdCA1ICYmCisJZ2l0IHB1c2ggLi4vLmdpdCArbWFzdGVyOnJlZnMvcmVtb3Rlcy9zaGFsbG93L21hc3RlcgorCSkgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIHNoYWxsb3cvbWFzdGVyID5hY3R1YWwgJiYKKwlnaXQgZnNjayAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCis1Cis0CiszCisyCisxCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZnJvbSBzaGFsbG93IGNsb25lLCB3aXRoIGdyYWZ0ZWQgcm9vdHMnICcKKwkoCisJY2Qgc2hhbGxvdzIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAuLi8uZ2l0ICttYXN0ZXI6cmVmcy9yZW1vdGVzL3NoYWxsb3cyL21hc3RlciAyPmVyciAmJgorCWdyZXAgInNoYWxsb3cyL21hc3Rlci4qc2hhbGxvdyB1cGRhdGUgbm90IGFsbG93ZWQiIGVycgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHNoYWxsb3cyL21hc3RlciAmJgorCWdpdCBmc2NrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBuZXcgc2hhbGxvdyByb290IHdpdGggcmVjZWl2ZS51cGRhdGVzaGFsbG93IG9uJyAnCisJdGVzdF9jb25maWcgcmVjZWl2ZS5zaGFsbG93dXBkYXRlIHRydWUgJiYKKwkoCisJY2Qgc2hhbGxvdzIgJiYKKwlnaXQgcHVzaCAuLi8uZ2l0ICttYXN0ZXI6cmVmcy9yZW1vdGVzL3NoYWxsb3cyL21hc3RlcgorCSkgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIHNoYWxsb3cyL21hc3RlciA+YWN0dWFsICYmCisJZ2l0IGZzY2sgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorYworYgorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGZyb20gc2hhbGxvdyB0byBzaGFsbG93JyAnCisJKAorCWNkIHNoYWxsb3cgJiYKKwlnaXQgLS1naXQtZGlyPS4uL3NoYWxsb3cyLy5naXQgY29uZmlnIHJlY2VpdmUuc2hhbGxvd3VwZGF0ZSB0cnVlICYmCisJZ2l0IHB1c2ggLi4vc2hhbGxvdzIvLmdpdCArbWFzdGVyOnJlZnMvcmVtb3Rlcy9zaGFsbG93L21hc3RlciAmJgorCWdpdCAtLWdpdC1kaXI9Li4vc2hhbGxvdzIvLmdpdCBjb25maWcgcmVjZWl2ZS5zaGFsbG93dXBkYXRlIGZhbHNlCisJKSAmJgorCSgKKwljZCBzaGFsbG93MiAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgc2hhbGxvdy9tYXN0ZXIgPmFjdHVhbCAmJgorCWdpdCBmc2NrICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzUKKzQKKzMKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZnJvbSBmdWxsIHRvIHNoYWxsb3cnICcKKwkhIGdpdCAtLWdpdC1kaXI9c2hhbGxvdzIvLmdpdCBjYXQtZmlsZSBibG9iIGBlY2hvIDF8Z2l0IGhhc2gtb2JqZWN0IC0tc3RkaW5gICYmCisJY29tbWl0IDEgJiYKKwlnaXQgcHVzaCBzaGFsbG93Mi8uZ2l0ICttYXN0ZXI6cmVmcy9yZW1vdGVzL3RvcC9tYXN0ZXIgJiYKKwkoCisJY2Qgc2hhbGxvdzIgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIHRvcC9tYXN0ZXIgPmFjdHVhbCAmJgorCWdpdCBmc2NrICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzEKKzQKKzMKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBgZWNobyAxfGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluYCA+L2Rldi9udWxsCisJKQorJwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTM5LWZldGNoLWh0dHAtc2hhbGxvdy5zaCBiL3QvdDU1MzktZmV0Y2gtaHR0cC1zaGFsbG93LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3YTQzMzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTM5LWZldGNoLWh0dHAtc2hhbGxvdy5zaApAQCAtMCwwICsxLDc3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZmV0Y2gvY2xvbmUgZnJvbSBhIHNoYWxsb3cgY2xvbmUgb3ZlciBodHRwJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitzdGFydF9odHRwZAorCitjb21taXQoKSB7CisJZWNobyAiJDEiID50cmFja2VkICYmCisJZ2l0IGFkZCB0cmFja2VkICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNoYWxsb3cgY2xvbmUnICcKKwljb21taXQgMSAmJgorCWNvbW1pdCAyICYmCisJY29tbWl0IDMgJiYKKwljb21taXQgNCAmJgorCWNvbW1pdCA1ICYmCisJY29tbWl0IDYgJiYKKwljb21taXQgNyAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tZGVwdGg9NSAuZ2l0IHNoYWxsb3cgJiYKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIHRyYW5zZmVyLmZzY2tPYmplY3RzIHRydWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgaHR0cCByZXBvc2l0b3J5JyAnCisJZ2l0IGNsb25lIC0tYmFyZSAtLW5vLWxvY2FsIHNoYWxsb3cgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IGNsb25lICRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQgY2xvbmUgJiYKKwkoCisJY2QgY2xvbmUgJiYKKwlnaXQgZnNjayAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgb3JpZ2luL21hc3RlciA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzcKKzYKKzUKKzQKKzMKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKKyMgVGhpcyB0ZXN0IGlzIHRyaWNreS4gV2UgbmVlZCBsYXJnZSBlbm91Z2ggImhhdmUicyB0aGF0IGZldGNoLXBhY2sKKyMgd2lsbCBwdXQgcGt0LWZsdXNoIGluIGJldHdlZW4uIFRoZW4gd2UgbmVlZCBhICJoYXZlIiB0aGUgc2VydmVyCisjIGRvZXMgbm90IGhhdmUsIGl0J2xsIHNlbmQgIkFDSyAlcyByZWFkeSIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHNoYWxsb3cgbGluZXMgYWZ0ZXIgcmVjZWl2aW5nIEFDSyByZWFkeScgJworCSgKKwkJY2Qgc2hhbGxvdyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZm9yIGkgaW4gJCh0ZXN0X3NlcSAxNSkKKwkJZG8KKwkJCWdpdCBjaGVja291dCAtLW9ycGhhbiB1bnJlbGF0ZWQkaSAmJgorCQkJdGVzdF9jb21taXQgdW5yZWxhdGVkJGkgJiYKKwkJCWdpdCBwdXNoIC1xICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBcCisJCQkJcmVmcy9oZWFkcy91bnJlbGF0ZWQkaTpyZWZzL2hlYWRzL3VucmVsYXRlZCRpICYmCisJCQlnaXQgcHVzaCAtcSAuLi9jbG9uZS8uZ2l0IFwKKwkJCQlyZWZzL2hlYWRzL3VucmVsYXRlZCRpOnJlZnMvaGVhZHMvdW5yZWxhdGVkJGkgfHwKKwkJCWV4aXQgMQorCQlkb25lICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJdGVzdF9jb21taXQgbmV3ICYmCisJCWdpdCBwdXNoICAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgbWFzdGVyCisJKSAmJgorCSgKKwkJY2QgY2xvbmUgJiYKKwkJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ld25ldyAmJgorCQl0ZXN0X2NvbW1pdCBuZXctdG9vICYmCisJCUdJVF9UUkFDRV9QQUNLRVQ9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIGdpdCBmZXRjaCAtLWRlcHRoPTIgJiYKKwkJZ3JlcCAiZmV0Y2gtcGFjazwgQUNLIC4qIHJlYWR5IiAuLi90cmFjZSAmJgorCQkhIGdyZXAgImZldGNoLXBhY2s+IGRvbmUiIC4uL3RyYWNlCisJKQorJworCitzdG9wX2h0dHBkCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NDAtaHR0cC1wdXNoLXdlYmRhdi5zaCBiL3QvdDU1NDAtaHR0cC1wdXNoLXdlYmRhdi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OGZmNWE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTU0MC1odHRwLXB1c2gtd2ViZGF2LnNoCkBAIC0wLDAgKzEsMTgxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IENsZW1lbnMgQnVjaGFjaGVyIDxkcml6emRAYW9uLmF0PgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IFdlYkRBViBodHRwLXB1c2gKKworVGhpcyB0ZXN0IHJ1bnMgdmFyaW91cyBzYW5pdHkgY2hlY2tzIG9uIGh0dHAtcHVzaC4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiBnaXQgaHR0cC1wdXNoID4gL2Rldi9udWxsIDI+JjEgfHwgWyAkPyAtZXEgMTI4IF0KK3RoZW4KKwlza2lwX2FsbD0ic2tpcHBpbmcgdGVzdCwgVVNFX0NVUkxfTVVMVEkgaXMgbm90IGRlZmluZWQiCisJdGVzdF9kb25lCitmaQorCitMSUJfSFRUUERfREFWPXQKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitST09UX1BBVEg9IiRQV0QiCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW1vdGUgcmVwb3NpdG9yeScgJworCWNkICIkUk9PVF9QQVRIIiAmJgorCW1rZGlyIHRlc3RfcmVwbyAmJgorCWNkIHRlc3RfcmVwbyAmJgorCWdpdCBpbml0ICYmCisJOiA+cGF0aDEgJiYKKwlnaXQgYWRkIHBhdGgxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJY2QgLSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgdGVzdF9yZXBvIHRlc3RfcmVwby5naXQgJiYKKwljZCB0ZXN0X3JlcG8uZ2l0ICYmCisJZ2l0IC0tYmFyZSB1cGRhdGUtc2VydmVyLWluZm8gJiYKKwltdiBob29rcy9wb3N0LXVwZGF0ZS5zYW1wbGUgaG9va3MvcG9zdC11cGRhdGUgJiYKKwlPUklHX0hFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJY2QgLSAmJgorCW12IHRlc3RfcmVwby5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBwYXNzd29yZC1wcm90ZWN0ZWQgcmVwb3NpdG9yeScgJworCW1rZGlyIC1wICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2F1dGgvZHVtYiIgJiYKKwljcCAtUmYgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCSAgICAgICAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hdXRoL2R1bWIvdGVzdF9yZXBvLmdpdCIKKycKKworc2V0dXBfYXNrcGFzc19oZWxwZXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVtb3RlIHJlcG9zaXRvcnknICcKKwljZCAiJFJPT1RfUEFUSCIgJiYKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9kdW1iL3Rlc3RfcmVwby5naXQgdGVzdF9yZXBvX2Nsb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gcmVtb3RlIHJlcG9zaXRvcnkgd2l0aCBwYWNrZWQgcmVmcycgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwk6ID5wYXRoMiAmJgorCWdpdCBhZGQgcGF0aDIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHBhdGgyICYmCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgcHVzaCAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCAmJgorCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGFscmVhZHkgdXAtdG8tZGF0ZScgJworCWdpdCBwdXNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gcmVtb3RlIHJlcG9zaXRvcnkgd2l0aCB1bnBhY2tlZCByZWZzJyAnCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0ICYmCisJIHJtIHBhY2tlZC1yZWZzICYmCisJIGdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvbWFzdGVyICRPUklHX0hFQUQgJiYKKwkgZ2l0IC0tYmFyZSB1cGRhdGUtc2VydmVyLWluZm8pICYmCisJZ2l0IHB1c2ggJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgJiYKKwkgdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cC1wdXNoIGZldGNoZXMgdW5wYWNrZWQgb2JqZWN0cycgJworCWNwIC1SICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0IFwKKwkJIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwb191bnBhY2tlZC5naXQgJiYKKworCWdpdCBjbG9uZSAkSFRUUERfVVJML2R1bWIvdGVzdF9yZXBvX3VucGFja2VkLmdpdCBcCisJCSIkUk9PVF9QQVRIIi9mZXRjaF91bnBhY2tlZCAmJgorCisJIyBCeSByZXNldCwgd2UgZm9yY2UgZ2l0IHRvIHJldHJpZXZlIHRoZSBvYmplY3QKKwkoY2QgIiRST09UX1BBVEgiL2ZldGNoX3VucGFja2VkICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwkgZ2l0IHJlbW90ZSBybSBvcmlnaW4gJiYKKwkgZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9MCAtLWFsbCAmJgorCSBnaXQgcHJ1bmUgJiYKKwkgZ2l0IHB1c2ggLWYgLXYgJEhUVFBEX1VSTC9kdW1iL3Rlc3RfcmVwb191bnBhY2tlZC5naXQgbWFzdGVyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLXB1c2ggZmV0Y2hlcyBwYWNrZWQgb2JqZWN0cycgJworCWNwIC1SICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0IFwKKwkJIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwb19wYWNrZWQuZ2l0ICYmCisKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9kdW1iL3Rlc3RfcmVwb19wYWNrZWQuZ2l0IFwKKwkJIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZV9wYWNrZWQgJiYKKworCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvX3BhY2tlZC5naXQgJiYKKwkgZ2l0IC0tYmFyZSByZXBhY2sgJiYKKwkgZ2l0IC0tYmFyZSBwcnVuZS1wYWNrZWQpICYmCisKKwkjIEJ5IHJlc2V0LCB3ZSBmb3JjZSBnaXQgdG8gcmV0cmlldmUgdGhlIHBhY2tlZCBvYmplY3QKKwkoY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZV9wYWNrZWQgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCSBnaXQgcmVtb3RlIHJlbW92ZSBvcmlnaW4gJiYKKwkgZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9MCAtLWFsbCAmJgorCSBnaXQgcHJ1bmUgJiYKKwkgZ2l0IHB1c2ggLWYgLXYgJEhUVFBEX1VSTC9kdW1iL3Rlc3RfcmVwb19wYWNrZWQuZ2l0IG1hc3RlcikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGFuZCBkZWxldGUgcmVtb3RlIGJyYW5jaCcgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZGV2ICYmCisJOiA+cGF0aDMgJiYKKwlnaXQgYWRkIHBhdGgzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBkZXYgJiYKKwlnaXQgcHVzaCBvcmlnaW4gZGV2ICYmCisJZ2l0IHB1c2ggb3JpZ2luIDpkZXYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi9kZXYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTUtDT0wgc2VuZHMgZGlyZWN0b3J5IG5hbWVzIHdpdGggdHJhaWxpbmcgc2xhc2hlcycgJworCisJISBncmVwICJcIk1LQ09MLipbXi9dIEhUVFAvW14gXSpcIiIgPCAiJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZworCisnCisKK3gxPSJbMC05YS1mXSIKK3gyPSIkeDEkeDEiCit4NT0iJHgxJHgxJHgxJHgxJHgxIgoreDM4PSIkeDUkeDUkeDUkeDUkeDUkeDUkeDUkeDEkeDEkeDEiCit4NDA9IiR4MzgkeDIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1BVVCBhbmQgTU9WRSBzZW5kcyBvYmplY3QgdG8gVVJMcyB3aXRoIFNIQS0xIGhhc2ggc3VmZml4JyAnCisJc2VkIFwKKwkJLWUgInMvUFVUIC9PUCAvIiBcCisJCS1lICJzL01PVkUgL09QIC8iIFwKKwkgICAgLWUgInN8L29iamVjdHMvJHgyLyR7eDM4fV8keDQwfFdBTlRFRF9QQVRIX1JFUVVFU1R8IiBcCisJCSIkSFRUUERfUk9PVF9QQVRIIi9hY2Nlc3MubG9nIHwKKwlncmVwIC1lICJcIk9QIC4qV0FOVEVEX1BBVEhfUkVRVUVTVCBIVFRQL1suMC05XSpcIiAyMFswLTldICIKKworJworCit0ZXN0X2h0dHBfcHVzaF9ub25mZiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCBcCisJIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSBtYXN0ZXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB0byBwYXNzd29yZC1wcm90ZWN0ZWQgcmVwb3NpdG9yeSAodXNlciBpbiBVUkwpJyAnCisJdGVzdF9jb21taXQgcHctdXNlciAmJgorCXNldF9hc2twYXNzIHVzZXJAaG9zdCBwYXNzQGhvc3QgJiYKKwlnaXQgcHVzaCAiJEhUVFBEX1VSTF9VU0VSL2F1dGgvZHVtYi90ZXN0X3JlcG8uZ2l0IiBIRUFEICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2F1dGgvZHVtYi90ZXN0X3JlcG8uZ2l0IiBcCisJCXJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3VzZXIgd2FzIHByb21wdGVkIG9ubHkgb25jZSBmb3IgcGFzc3dvcmQnICcKKwlleHBlY3RfYXNrcGFzcyBwYXNzIHVzZXJAaG9zdAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdwdXNoIHRvIHBhc3N3b3JkLXByb3RlY3RlZCByZXBvc2l0b3J5IChubyB1c2VyIGluIFVSTCknICcKKwl0ZXN0X2NvbW1pdCBwdy1ub3VzZXIgJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9VUkwvYXV0aC9kdW1iL3Rlc3RfcmVwby5naXQiIEhFQUQgJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHVzZXJAaG9zdCAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9hdXRoL2R1bWIvdGVzdF9yZXBvLmdpdCIgXAorCQlyZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitzdG9wX2h0dHBkCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU0MS1odHRwLXB1c2gtc21hcnQuc2ggYi90L3Q1NTQxLWh0dHAtcHVzaC1zbWFydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZDdkMDZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU0MS1odHRwLXB1c2gtc21hcnQuc2gKQEAgLTAsMCArMSwzNzIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggQ2xlbWVucyBCdWNoYWNoZXIgPGRyaXp6ZEBhb24uYXQ+CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3Qgc21hcnQgcHVzaGluZyBvdmVyIGh0dHAgdmlhIGh0dHAtYmFja2VuZCcKKy4gLi90ZXN0LWxpYi5zaAorCitST09UX1BBVEg9IiRQV0QiCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1ncGcuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10ZXJtaW5hbC5zaAorc3RhcnRfaHR0cGQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVtb3RlIHJlcG9zaXRvcnknICcKKwljZCAiJFJPT1RfUEFUSCIgJiYKKwlta2RpciB0ZXN0X3JlcG8gJiYKKwljZCB0ZXN0X3JlcG8gJiYKKwlnaXQgaW5pdCAmJgorCTogPnBhdGgxICYmCisJZ2l0IGFkZCBwYXRoMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWNkIC0gJiYKKwlnaXQgY2xvbmUgLS1iYXJlIHRlc3RfcmVwbyB0ZXN0X3JlcG8uZ2l0ICYmCisJY2QgdGVzdF9yZXBvLmdpdCAmJgorCWdpdCBjb25maWcgaHR0cC5yZWNlaXZlcGFjayB0cnVlICYmCisJZ2l0IGNvbmZpZyBjb3JlLmxvZ2FsbHJlZnVwZGF0ZXMgdHJ1ZSAmJgorCU9SSUdfSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwljZCAtICYmCisJbXYgdGVzdF9yZXBvLmdpdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIKKycKKworc2V0dXBfYXNrcGFzc19oZWxwZXIKKworY2F0ID5leHAgPDxFT0YKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvdGVzdF9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGVtcHR5IHBhdGggY29tcG9uZW50cycgJworCSMgSW4gdGhlIFVSTCwgYWRkIGEgdHJhaWxpbmcgc2xhc2gsIGFuZCBzZWUgaWYgZ2l0IGFwcGVuZHMgeWV0IGFub3RoZXIKKwkjIHNsYXNoLgorCWNkICIkUk9PVF9QQVRIIiAmJgorCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0L3Rlc3RfcmVwby5naXQvIHRlc3RfcmVwb19jbG9uZSAmJgorCisJc2VkIC1lICIKKwkJcy9eLiogXCIvLworCQlzL1wiLy8KKwkJcy8gWzEtOV1bMC05XSpcJC8vCisJCXMvXkdFVCAvR0VUICAvCisJIiA+YWN0IDwiJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZyAmJgorCisJIyBDbGVhciB0aGUgbG9nLCBzbyB0aGF0IGl0IGRvZXMgbm90IGFmZmVjdCB0aGUgInVzZWQgcmVjZWl2ZS1wYWNrCisJIyBzZXJ2aWNlIiB0ZXN0IHdoaWNoIHJlYWRzIHRoZSBsb2cgdG9vLgorCSMKKwkjIFdlIGRvIHRoaXMgYmVmb3JlIHRoZSBhY3R1YWwgY29tcGFyaXNvbiB0byBlbnN1cmUgdGhlIGxvZyBpcyBjbGVhcmVkLgorCWVjaG8gPiAiJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZyAmJgorCisJdGVzdF9jbXAgZXhwIGFjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZW1vdGUgcmVwb3NpdG9yeScgJworCXJtIC1yZiB0ZXN0X3JlcG9fY2xvbmUgJiYKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9zbWFydC90ZXN0X3JlcG8uZ2l0IHRlc3RfcmVwb19jbG9uZSAmJgorCSgKKwkJY2QgdGVzdF9yZXBvX2Nsb25lICYmIGdpdCBjb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIHJlbW90ZSByZXBvc2l0b3J5IChzdGFuZGFyZCknICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJOiA+cGF0aDIgJiYKKwlnaXQgYWRkIHBhdGgyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBwYXRoMiAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJR0lUX0NVUkxfVkVSQk9TRT0xIGdpdCBwdXNoIC12IC12IDI+ZXJyICYmCisJISBncmVwICJFeHBlY3Q6IDEwMC1jb250aW51ZSIgZXJyICYmCisJZ3JlcCAiUE9TVCBnaXQtcmVjZWl2ZS1wYWNrIChbMC05XSogYnl0ZXMpIiBlcnIgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3Rlc3RfcmVwby5naXQgJiYKKwkgdGVzdCAkSEVBRCA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBhbHJlYWR5IHVwLXRvLWRhdGUnICcKKwlnaXQgcHVzaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgYW5kIGRlbGV0ZSByZW1vdGUgYnJhbmNoJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCWdpdCBjaGVja291dCAtYiBkZXYgJiYKKwk6ID5wYXRoMyAmJgorCWdpdCBhZGQgcGF0aDMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGRldiAmJgorCWdpdCBwdXNoIG9yaWdpbiBkZXYgJiYKKwlnaXQgcHVzaCBvcmlnaW4gOmRldiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzaG93LXJlZiAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL2RldgorJworCitjYXQgPiIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQvaG9va3MvdXBkYXRlIiA8PEVPRgorIyEvYmluL3NoCitleGl0IDEKK0VPRgorY2htb2QgYSt4ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQvaG9va3MvdXBkYXRlIgorCitjYXQgPmV4cCA8PEVPRgorcmVtb3RlOiBlcnJvcjogaG9vayBkZWNsaW5lZCB0byB1cGRhdGUgcmVmcy9oZWFkcy9kZXYyCitUbyBodHRwOi8vMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVC9zbWFydC90ZXN0X3JlcG8uZ2l0CisgISBbcmVtb3RlIHJlamVjdGVkXSBkZXYyIC0+IGRldjIgKGhvb2sgZGVjbGluZWQpCitlcnJvcjogZmFpbGVkIHRvIHB1c2ggc29tZSByZWZzIHRvICdodHRwOi8vMTI3LjAuMC4xOiRMSUJfSFRUUERfUE9SVC9zbWFydC90ZXN0X3JlcG8uZ2l0JworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdGVkIHVwZGF0ZSBwcmludHMgc3RhdHVzJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCWdpdCBjaGVja291dCAtYiBkZXYyICYmCisJOiA+cGF0aDQgJiYKKwlnaXQgYWRkIHBhdGg0ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBkZXYyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggb3JpZ2luIGRldjIgMj5hY3QgJiYKKwlzZWQgLWUgIi9ecmVtb3RlOiAvcy8gKiQvLyIgPGFjdCA+Y21wICYmCisJdGVzdF9jbXAgZXhwIGNtcAorJworcm0gLWYgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdC9ob29rcy91cGRhdGUiCisKK2NhdCA+ZXhwIDw8RU9GCisKK0dFVCAgL3NtYXJ0L3Rlc3RfcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvdGVzdF9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC90ZXN0X3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZWQgcmVjZWl2ZS1wYWNrIHNlcnZpY2UnICcKKwlzZWQgLWUgIgorCQlzL14uKiBcIi8vCisJCXMvXCIvLworCQlzLyBbMS05XVswLTldKlwkLy8KKwkJcy9eR0VUIC9HRVQgIC8KKwkiID5hY3QgPCIkSFRUUERfUk9PVF9QQVRIIi9hY2Nlc3MubG9nICYmCisJdGVzdF9jbXAgZXhwIGFjdAorJworCit0ZXN0X2h0dHBfcHVzaF9ub25mZiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCBcCisJIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSBtYXN0ZXIgCQlzdWNjZXNzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZmFpbHMgZm9yIG5vbi1mYXN0LWZvcndhcmQgcmVmcyB1bm1hdGNoZWQgYnkgcmVtb3RlIGhlbHBlcicgJworCSMgY3JlYXRlIGEgZGlzc2ltaWxhcmx5LW5hbWVkIHJlbW90ZSByZWYgc28gdGhhdCBnaXQgaXMgdW5hYmxlIHRvIG1hdGNoIHRoZQorCSMgdHdvIHJlZnMgKHZpei4gbG9jYWwsIHJlbW90ZSkgdW5sZXNzIGFuIGV4cGxpY2l0IHJlZnNwZWMgaXMgcHJvdmlkZWQuCisJZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcjpyZXRzYW0gJiYKKworCWVjaG8gImNoYW5nZSBjaGFuZ2VkIiA+IHBhdGgyICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBwYXRoMiAtLWFtZW5kICYmCisKKwkjIHB1c2ggbWFzdGVyIHRvbzsgdGhpcyBlbnN1cmVzIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSAnIidwdXNoJyInIGNvbW1hbmQgdG8KKwkjIHRoZSByZW1vdGUgaGVscGVyIGFuZCB0cmlnZ2VycyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoZWxwZXIuCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLXYgb3JpZ2luICttYXN0ZXIgbWFzdGVyOnJldHNhbSA+b3V0cHV0IDI+JjEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZmFpbHMgZm9yIG5vbi1mYXN0LWZvcndhcmQgcmVmcyB1bm1hdGNoZWQgYnkgcmVtb3RlIGhlbHBlcjogcmVtb3RlIG91dHB1dCcgJworCWdyZXAgIl4gKyBbYS1mMC05XSpcLlwuXC5bYS1mMC05XSogKm1hc3RlciAtPiBtYXN0ZXIgKGZvcmNlZCB1cGRhdGUpJCIgb3V0cHV0ICYmCisJZ3JlcCAiXiAhIFxbcmVqZWN0ZWRcXSAqbWFzdGVyIC0+IHJldHNhbSAobm9uLWZhc3QtZm9yd2FyZCkkIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmYWlscyBmb3Igbm9uLWZhc3QtZm9yd2FyZCByZWZzIHVubWF0Y2hlZCBieSByZW1vdGUgaGVscGVyOiBvdXIgb3V0cHV0JyAnCisJdGVzdF9pMThuZ3JlcCAiVXBkYXRlcyB3ZXJlIHJlamVjdGVkIGJlY2F1c2UiIFwKKwkJb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggKGNodW5rZWQpJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IGNvbW1pdCBwYXRoMyAmJgorCUhFQUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdF9jb25maWcgaHR0cC5wb3N0YnVmZmVyIDQgJiYKKwlnaXQgcHVzaCAtdiAtdiBvcmlnaW4gJEJSQU5DSCAyPmVyciAmJgorCWdyZXAgIlBPU1QgZ2l0LXJlY2VpdmUtcGFjayAoY2h1bmtlZCkiIGVyciAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvdGVzdF9yZXBvLmdpdCAmJgorCSB0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tYWxsIGNhbiBwdXNoIHRvIGVtcHR5IHJlcG8nICcKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvZW1wdHktYWxsLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJGQiICYmCisJZ2l0IC0tZ2l0LWRpcj0iJGQiIGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlnaXQgcHVzaCAtLWFsbCAiJEhUVFBEX1VSTCIvc21hcnQvZW1wdHktYWxsLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tbWlycm9yIGNhbiBwdXNoIHRvIGVtcHR5IHJlcG8nICcKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvZW1wdHktbWlycm9yLmdpdCAmJgorCWdpdCBpbml0IC0tYmFyZSAiJGQiICYmCisJZ2l0IC0tZ2l0LWRpcj0iJGQiIGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlnaXQgcHVzaCAtLW1pcnJvciAiJEhUVFBEX1VSTCIvc21hcnQvZW1wdHktbWlycm9yLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tYWxsIHRvIHJlcG8gd2l0aCBhbHRlcm5hdGVzJyAnCisJcz0kSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3Rlc3RfcmVwby5naXQgJiYKKwlkPSRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvYWx0ZXJuYXRlcy1hbGwuZ2l0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSAtLXNoYXJlZCAiJHMiICIkZCIgJiYKKwlnaXQgLS1naXQtZGlyPSIkZCIgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZSAmJgorCWdpdCAtLWdpdC1kaXI9IiRkIiByZXBhY2sgLWFkbCAmJgorCWdpdCBwdXNoIC0tYWxsICIkSFRUUERfVVJMIi9zbWFydC9hbHRlcm5hdGVzLWFsbC5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCAtLW1pcnJvciB0byByZXBvIHdpdGggYWx0ZXJuYXRlcycgJworCXM9JEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC90ZXN0X3JlcG8uZ2l0ICYmCisJZD0kSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2FsdGVybmF0ZXMtbWlycm9yLmdpdCAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLS1zaGFyZWQgIiRzIiAiJGQiICYmCisJZ2l0IC0tZ2l0LWRpcj0iJGQiIGNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlnaXQgLS1naXQtZGlyPSIkZCIgcmVwYWNrIC1hZGwgJiYKKwlnaXQgcHVzaCAtLW1pcnJvciAiJEhUVFBEX1VSTCIvc21hcnQvYWx0ZXJuYXRlcy1taXJyb3IuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdwdXNoIHNob3dzIHByb2dyZXNzIHdoZW4gc3RkZXJyIGlzIGEgdHR5JyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCXRlc3RfY29tbWl0IG5vaXN5ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgcHVzaCA+b3V0cHV0IDI+JjEgJiYKKwlncmVwICJeV3JpdGluZyBvYmplY3RzIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3B1c2ggLS1xdWlldCBzaWxlbmNlcyBzdGF0dXMgYW5kIHByb2dyZXNzJyAnCisJY2QgIiRST09UX1BBVEgiL3Rlc3RfcmVwb19jbG9uZSAmJgorCXRlc3RfY29tbWl0IHF1aWV0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgcHVzaCAtLXF1aWV0ID5vdXRwdXQgMj4mMSAmJgorCXRlc3RfY21wIC9kZXYvbnVsbCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3B1c2ggLS1uby1wcm9ncmVzcyBzaWxlbmNlcyBwcm9ncmVzcyBidXQgbm90IHN0YXR1cycgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwl0ZXN0X2NvbW1pdCBuby1wcm9ncmVzcyAmJgorCXRlc3RfdGVybWluYWwgZ2l0IHB1c2ggLS1uby1wcm9ncmVzcyA+b3V0cHV0IDI+JjEgJiYKKwlncmVwICJeVG8gaHR0cCIgb3V0cHV0ICYmCisJISBncmVwICJeV3JpdGluZyBvYmplY3RzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIC0tcHJvZ3Jlc3Mgc2hvd3MgcHJvZ3Jlc3MgdG8gbm9uLXR0eScgJworCWNkICIkUk9PVF9QQVRIIi90ZXN0X3JlcG9fY2xvbmUgJiYKKwl0ZXN0X2NvbW1pdCBwcm9ncmVzcyAmJgorCWdpdCBwdXNoIC0tcHJvZ3Jlc3MgPm91dHB1dCAyPiYxICYmCisJZ3JlcCAiXlRvIGh0dHAiIG91dHB1dCAmJgorCWdyZXAgIl5Xcml0aW5nIG9iamVjdHMiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIHB1c2ggZ2l2ZXMgc2FuZSBkZWZhdWx0cyB0byByZWZsb2cnICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJdGVzdF9jb21taXQgcmVmbG9nLXRlc3QgJiYKKwlnaXQgcHVzaCAiJEhUVFBEX1VSTCIvc21hcnQvdGVzdF9yZXBvLmdpdCAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCQlsb2cgLWcgLTEgLS1mb3JtYXQ9IiVnbiA8JWdlPiIgPmFjdHVhbCAmJgorCWVjaG8gImFub255bW91cyA8YW5vbnltb3VzQGh0dHAuMTI3LjAuMC4xPiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cCBwdXNoIHJlc3BlY3RzIEdJVF9DT01NSVRURVJfKiBpbiByZWZsb2cnICcKKwljZCAiJFJPT1RfUEFUSCIvdGVzdF9yZXBvX2Nsb25lICYmCisJdGVzdF9jb21taXQgY3VzdG9tLXJlZmxvZy10ZXN0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9VUkwiL3NtYXJ0X2N1c3RvbV9lbnYvdGVzdF9yZXBvLmdpdCAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCQlsb2cgLWcgLTEgLS1mb3JtYXQ9IiVnbiA8JWdlPiIgPmFjdHVhbCAmJgorCWVjaG8gIkN1c3RvbSBVc2VyIDxjdXN0b21AZXhhbXBsZS5jb20+IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG92ZXIgc21hcnQgaHR0cCB3aXRoIGF1dGgnICcKKwljZCAiJFJPT1RfUEFUSC90ZXN0X3JlcG9fY2xvbmUiICYmCisJZWNobyBwdXNoLWF1dGgtdGVzdCA+ZXhwZWN0ICYmCisJdGVzdF9jb21taXQgcHVzaC1hdXRoLXRlc3QgJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9VUkwiL2F1dGgvc21hcnQvdGVzdF9yZXBvLmdpdCAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCQlsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWV4cGVjdF9hc2twYXNzIGJvdGggdXNlckBob3N0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIGF1dGgtb25seS1mb3ItcHVzaCByZXBvJyAnCisJY2QgIiRST09UX1BBVEgvdGVzdF9yZXBvX2Nsb25lIiAmJgorCWVjaG8gcHVzaC1oYWxmLWF1dGggPmV4cGVjdCAmJgorCXRlc3RfY29tbWl0IHB1c2gtaGFsZi1hdXRoICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0IHBhc3NAaG9zdCAmJgorCWdpdCBwdXNoICIkSFRUUERfVVJMIi9hdXRoLXB1c2gvc21hcnQvdGVzdF9yZXBvLmdpdCAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvdGVzdF9yZXBvLmdpdCIgXAorCQlsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWV4cGVjdF9hc2twYXNzIGJvdGggdXNlckBob3N0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgcmVwbyB3aXRob3V0IGh0dHAucmVjZWl2ZXBhY2sgc2V0JyAnCisJY2QgIiRST09UX1BBVEgiICYmCisJZ2l0IGluaXQgaGFsZi1hdXRoICYmCisJKAorCQljZCBoYWxmLWF1dGggJiYKKwkJdGVzdF9jb21taXQgb25lCisJKSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgaGFsZi1hdXRoICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2hhbGYtYXV0aC5naXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHZpYSBoYWxmLWF1dGgtY29tcGxldGUgZG9lcyBub3QgbmVlZCBwYXNzd29yZCcgJworCWNkICIkUk9PVF9QQVRIIiAmJgorCXNldF9hc2twYXNzIHdyb25nICYmCisJZ2l0IGNsb25lICIkSFRUUERfVVJMIi9oYWxmLWF1dGgtY29tcGxldGUvc21hcnQvaGFsZi1hdXRoLmdpdCBcCisJCWhhbGYtYXV0aC1jbG9uZSAmJgorCWV4cGVjdF9hc2twYXNzIG5vbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBpbnRvIGhhbGYtYXV0aC1jb21wbGV0ZSByZXF1aXJlcyBwYXNzd29yZCcgJworCWNkICIkUk9PVF9QQVRIL2hhbGYtYXV0aC1jbG9uZSIgJiYKKwllY2hvIHR3byA+ZXhwZWN0ICYmCisJdGVzdF9jb21taXQgdHdvICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0IHBhc3NAaG9zdCAmJgorCWdpdCBwdXNoICIkSFRUUERfVVJML2hhbGYtYXV0aC1jb21wbGV0ZS9zbWFydC9oYWxmLWF1dGguZ2l0IiAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvaGFsZi1hdXRoLmdpdCIgXAorCQlsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWV4cGVjdF9hc2twYXNzIGJvdGggdXNlckBob3N0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENNRExJTkVfTElNSVQgJ3B1c2ggMjAwMCB0YWdzIG92ZXIgaHR0cCcgJworCXNoYTE9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF9zZXEgMjAwMCB8CisJICBzb3J0IHwKKwkgIHNlZCAic3wuKnwkc2hhMSByZWZzL3RhZ3MvcmVhbGx5LWxvbmctdGFnLW5hbWUtJnwiIFwKKwkgID4uZ2l0L3BhY2tlZC1yZWZzICYmCisJcnVuX3dpdGhfbGltaXRlZF9jbWRsaW5lIGdpdCBwdXNoIC0tbWlycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdXNoIHdpdGggcG9zdC1yZWNlaXZlIHRvIGluc3BlY3QgY2VydGlmaWNhdGUnICcKKwkoCisJCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi90ZXN0X3JlcG8uZ2l0ICYmCisJCW1rZGlyIC1wIGhvb2tzICYmCisJCXdyaXRlX3NjcmlwdCBob29rcy9wb3N0LXJlY2VpdmUgPDwtXEVPRiAmJgorCQkjIGRpc2NhcmQgdGhlIHVwZGF0ZSBsaXN0CisJCWNhdCA+L2Rldi9udWxsCisJCSMgcmVjb3JkIHRoZSBwdXNoIGNlcnRpZmljYXRlCisJCWlmIHRlc3QgLW4gIiR7R0lUX1BVU0hfQ0VSVC19IgorCQl0aGVuCisJCQlnaXQgY2F0LWZpbGUgYmxvYiAkR0lUX1BVU0hfQ0VSVCA+Li4vcHVzaC1jZXJ0CisJCWZpICYmCisJCWNhdCA+Li4vcHVzaC1jZXJ0LXN0YXR1cyA8PEVfT19GCisJCVNJR05FUj0ke0dJVF9QVVNIX0NFUlRfU0lHTkVSLW5vYm9keX0KKwkJS0VZPSR7R0lUX1BVU0hfQ0VSVF9LRVktbm9rZXl9CisJCVNUQVRVUz0ke0dJVF9QVVNIX0NFUlRfU1RBVFVTLW5vc3RhdHVzfQorCQlOT05DRV9TVEFUVVM9JHtHSVRfUFVTSF9DRVJUX05PTkNFX1NUQVRVUy1ub25vbmNlc3RhdHVzfQorCQlOT05DRT0ke0dJVF9QVVNIX0NFUlRfTk9OQ0Utbm9ub25jZX0KKwkJRV9PX0YKKwkJRU9GCisKKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmNlcnRub25jZXNlZWQgc2Vrcml0ICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5jZXJ0bm9uY2VzbG9wIDMwCisJKSAmJgorCWNkICIkUk9PVF9QQVRIL3Rlc3RfcmVwb19jbG9uZSIgJiYKKwl0ZXN0X2NvbW1pdCBjZXJ0LXRlc3QgJiYKKwlnaXQgcHVzaCAtLXNpZ25lZCAiJEhUVFBEX1VSTC9zbWFydC90ZXN0X3JlcG8uZ2l0IiAmJgorCSgKKwkJY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiICYmCisJCWNhdCA8PC1cRU9GICYmCisJCVNJR05FUj1DIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJCUtFWT0xM0I2RjUxRUNEREU0MzBECisJCVNUQVRVUz1HCisJCU5PTkNFX1NUQVRVUz1PSworCQlFT0YKKwkJc2VkIC1uIC1lICJzL15ub25jZSAvTk9OQ0U9L3AiIC1lICIvXiQvcSIgcHVzaC1jZXJ0CisJKSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3B1c2gtY2VydC1zdGF0dXMiCisnCisKK3N0b3BfaHR0cGQKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU0Mi1wdXNoLWh0dHAtc2hhbGxvdy5zaCBiL3QvdDU1NDItcHVzaC1odHRwLXNoYWxsb3cuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTE2NTgzMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NDItcHVzaC1odHRwLXNoYWxsb3cuc2gKQEAgLTAsMCArMSw5NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3B1c2ggZnJvbS90byBhIHNoYWxsb3cgY2xvbmUgb3ZlciBodHRwJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWh0dHBkLnNoCitzdGFydF9odHRwZAorCitjb21taXQoKSB7CisJZWNobyAiJDEiID50cmFja2VkICYmCisJZ2l0IGFkZCB0cmFja2VkICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCB0cmFuc2Zlci5mc2NrT2JqZWN0cyB0cnVlICYmCisJY29tbWl0IDEgJiYKKwljb21taXQgMiAmJgorCWNvbW1pdCAzICYmCisJY29tbWl0IDQgJiYKKwlnaXQgY2xvbmUgLiBmdWxsICYmCisJKAorCWdpdCBpbml0IGZ1bGwtYWJjICYmCisJY2QgZnVsbC1hYmMgJiYKKwljb21taXQgYSAmJgorCWNvbW1pdCBiICYmCisJY29tbWl0IGMKKwkpICYmCisJZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1kZXB0aD0yIC5naXQgc2hhbGxvdyAmJgorCWdpdCAtLWdpdC1kaXI9c2hhbGxvdy8uZ2l0IGxvZyAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKKzQKKzMKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLWRlcHRoPTIgZnVsbC1hYmMvLmdpdCBzaGFsbG93MiAmJgorCWdpdCAtLWdpdC1kaXI9c2hhbGxvdzIvLmdpdCBsb2cgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitjCitiCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gc2hhbGxvdyByZXBvIHZpYSBodHRwJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAtLW5vLWxvY2FsIHNoYWxsb3cgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJKAorCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWdpdCBjb25maWcgaHR0cC5yZWNlaXZlcGFjayB0cnVlCisJKSAmJgorCSgKKwljZCBmdWxsICYmCisJY29tbWl0IDkgJiYKKwlnaXQgcHVzaCAkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0ICttYXN0ZXI6cmVmcy9yZW1vdGVzL3RvcC9tYXN0ZXIKKwkpICYmCisJKAorCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWdpdCBmc2NrICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyB0b3AvbWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorOQorNAorMworRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBmcm9tIHNoYWxsb3cgcmVwbyB2aWEgaHR0cCcgJworCW12ICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBzaGFsbG93LXVwc3RyZWFtLmdpdCAmJgorCWdpdCBjbG9uZSAtLWJhcmUgLS1uby1sb2NhbCBmdWxsICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSgKKwljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgdHJ1ZQorCSkgJiYKKwljb21taXQgMTAgJiYKKwlnaXQgcHVzaCAkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0ICttYXN0ZXI6cmVmcy9yZW1vdGVzL3RvcC9tYXN0ZXIgJiYKKwkoCisJY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IGZzY2sgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIHRvcC9tYXN0ZXIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCisxMAorNAorMworMgorMQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworc3RvcF9odHRwZAordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTQzLWF0b21pYy1wdXNoLnNoIGIvdC90NTU0My1hdG9taWMtcHVzaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNDgwYjMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU0My1hdG9taWMtcHVzaC5zaApAQCAtMCwwICsxLDE5NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3B1c2hpbmcgdG8gYSByZXBvc2l0b3J5IHVzaW5nIHRoZSBhdG9taWMgcHVzaCBvcHRpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCitta19yZXBvX3BhaXIgKCkgeworCXJtIC1yZiB3b3JrYmVuY2ggdXBzdHJlYW0gJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHVwc3RyZWFtICYmCisJdGVzdF9jcmVhdGVfcmVwbyB3b3JrYmVuY2ggJiYKKwkoCisJCWNkIHVwc3RyZWFtICYmCisJCWdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuCisJKSAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCWdpdCByZW1vdGUgYWRkIHVwIC4uL3Vwc3RyZWFtCisJKQorfQorCisjIENvbXBhcmUgdGhlIHJlZiAoJDEpIGluIHVwc3RyZWFtIHdpdGggYSByZWYgdmFsdWUgZnJvbSB3b3JrYmVuY2ggKCQyKQorIyBpLmUuIHRlc3RfcmVmcyBzZWNvbmQgSEVBREB7Mn0KK3Rlc3RfcmVmcyAoKSB7CisJdGVzdCAkIyA9IDIgJiYKKwlnaXQgLUMgdXBzdHJlYW0gcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSIgPmV4cGVjdCAmJgorCWdpdCAtQyB3b3JrYmVuY2ggcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXRvbWljIHB1c2ggd29ya3MgZm9yIGEgc2luZ2xlIGJyYW5jaCcgJworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IHB1c2ggLS1hdG9taWMgdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0b21pYyBwdXNoIHdvcmtzIGZvciB0d28gYnJhbmNoZXMnICcKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IGJyYW5jaCBzZWNvbmQgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwkJdGVzdF9jb21taXQgdGhyZWUgJiYKKwkJZ2l0IHB1c2ggLS1hdG9taWMgdXAgbWFzdGVyIHNlY29uZAorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIG1hc3RlciAmJgorCXRlc3RfcmVmcyBzZWNvbmQgc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0b21pYyBwdXNoIHdvcmtzIGluIGNvbWJpbmF0aW9uIHdpdGggLS1taXJyb3InICcKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNlY29uZCAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJZ2l0IHB1c2ggLS1hdG9taWMgLS1taXJyb3IgdXAKKwkpICYmCisJdGVzdF9yZWZzIG1hc3RlciBtYXN0ZXIgJiYKKwl0ZXN0X3JlZnMgc2Vjb25kIHNlY29uZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCB3b3JrcyBpbiBjb21iaW5hdGlvbiB3aXRoIC0tZm9yY2UnICcKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IGJyYW5jaCBzZWNvbmQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IHR3b19hICYmCisJCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwkJdGVzdF9jb21taXQgdHdvX2IgJiYKKwkJdGVzdF9jb21taXQgdGhyZWVfYiAmJgorCQl0ZXN0X2NvbW1pdCBmb3VyICYmCisJCWdpdCBwdXNoIC0tbWlycm9yIHVwICYmCisJCSMgVGhlIGFjdHVhbCB0ZXN0IGlzIGJlbG93CisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJdGVzdF9jb21taXQgdGhyZWVfYSAmJgorCQlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwkJZ2l0IHB1c2ggLS1mb3JjZSAtLWF0b21pYyB1cCBtYXN0ZXIgc2Vjb25kCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgbWFzdGVyICYmCisJdGVzdF9yZWZzIHNlY29uZCBzZWNvbmQKKycKKworIyBzZXQgdXAgdHdvIGJyYW5jaGVzIHdoZXJlIG1hc3RlciBjYW4gYmUgcHVzaGVkIGJ1dCBzZWNvbmQgY2FuIG5vdAorIyAobm9uLWZhc3QtZm9yd2FyZCkuIFNpbmNlIHNlY29uZCBjYW4gbm90IGJlIHB1c2hlZCB0aGUgd2hvbGUgb3BlcmF0aW9uCisjIHdpbGwgZmFpbCBhbmQgbGVhdmUgbWFzdGVyIHVudG91Y2hlZC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0b21pYyBwdXNoIGZhaWxzIGlmIG9uZSBicmFuY2ggZmFpbHMnICcKKwlta19yZXBvX3BhaXIgJiYKKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQl0ZXN0X2NvbW1pdCBvbmUgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNlY29uZCBtYXN0ZXIgJiYKKwkJdGVzdF9jb21taXQgdHdvICYmCisJCXRlc3RfY29tbWl0IHRocmVlICYmCisJCXRlc3RfY29tbWl0IGZvdXIgJiYKKwkJZ2l0IHB1c2ggLS1taXJyb3IgdXAgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjIgJiYKKwkJdGVzdF9jb21taXQgZml2ZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IHNpeCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCAtLWF0b21pYyAtLWFsbCB1cAorCSkgJiYKKwl0ZXN0X3JlZnMgbWFzdGVyIEhFQURAezd9ICYmCisJdGVzdF9yZWZzIHNlY29uZCBIRUFEQHs0fQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdG9taWMgcHVzaCBmYWlscyBpZiBvbmUgdGFnIGZhaWxzIHJlbW90ZWx5JyAnCisJIyBwcmVwYXJlIHRoZSByZXBvCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBjaGVja291dCAtYiBzZWNvbmQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwkjIGEgdGhpcmQgcGFydHkgbW9kaWZpZXMgdGhlIHNlcnZlciBzaWRlOgorCSgKKwkJY2QgdXBzdHJlYW0gJiYKKwkJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCQlnaXQgdGFnIHRlc3RfdGFnIHNlY29uZAorCSkgJiYKKwkjIHNlZSBpZiB3ZSBjYW4gbm93IHB1c2ggYm90aCBicmFuY2hlcy4KKwkoCisJCWNkIHdvcmtiZW5jaCAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IHRocmVlICYmCisJCWdpdCBjaGVja291dCBzZWNvbmQgJiYKKwkJdGVzdF9jb21taXQgZm91ciAmJgorCQlnaXQgdGFnIHRlc3RfdGFnICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tdGFncyAtLWF0b21pYyB1cCBtYXN0ZXIgc2Vjb25kCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgSEVBREB7M30gJiYKKwl0ZXN0X3JlZnMgc2Vjb25kIEhFQURAezF9CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F0b21pYyBwdXNoIG9iZXlzIHVwZGF0ZSBob29rIHByZXZlbnRpbmcgYSBicmFuY2ggdG8gYmUgcHVzaGVkJyAnCisJbWtfcmVwb19wYWlyICYmCisJKAorCQljZCB3b3JrYmVuY2ggJiYKKwkJdGVzdF9jb21taXQgb25lICYmCisJCWdpdCBjaGVja291dCAtYiBzZWNvbmQgbWFzdGVyICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cAorCSkgJiYKKwkoCisJCWNkIHVwc3RyZWFtICYmCisJCUhPT0tESVI9IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2hvb2tzIiAmJgorCQlIT09LPSIkSE9PS0RJUi91cGRhdGUiICYmCisJCW1rZGlyIC1wICIkSE9PS0RJUiIgJiYKKwkJd3JpdGVfc2NyaXB0ICIkSE9PSyIgPDwtXEVPRgorCQkJIyBvbmx5IGFsbG93IHVwZGF0ZSB0byBtYXN0ZXIgZnJvbSBub3cgb24KKwkJCXRlc3QgIiQxIiA9ICJyZWZzL2hlYWRzL21hc3RlciIKKwkJRU9GCisJKSAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJdGVzdF9jb21taXQgdGhyZWUgJiYKKwkJZ2l0IGNoZWNrb3V0IHNlY29uZCAmJgorCQl0ZXN0X2NvbW1pdCBmb3VyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIC0tYXRvbWljIHVwIG1hc3RlciBzZWNvbmQKKwkpICYmCisJdGVzdF9yZWZzIG1hc3RlciBIRUFEQHszfSAmJgorCXRlc3RfcmVmcyBzZWNvbmQgSEVBREB7MX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXRvbWljIHB1c2ggaXMgbm90IGFkdmVydGlzZWQgaWYgY29uZmlndXJlZCcgJworCW1rX3JlcG9fcGFpciAmJgorCSgKKwkJY2QgdXBzdHJlYW0KKwkJZ2l0IGNvbmZpZyByZWNlaXZlLmFkdmVydGlzZWF0b21pYyAwCisJKSAmJgorCSgKKwkJY2Qgd29ya2JlbmNoICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgcHVzaCAtLW1pcnJvciB1cCAmJgorCQl0ZXN0X2NvbW1pdCB0d28gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2ggLS1hdG9taWMgdXAgbWFzdGVyCisJKSAmJgorCXRlc3RfcmVmcyBtYXN0ZXIgSEVBREB7MX0KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTUwLWh0dHAtZmV0Y2gtZHVtYi5zaCBiL3QvdDU1NTAtaHR0cC1mZXRjaC1kdW1iLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3YTdhYTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTUwLWh0dHAtZmV0Y2gtZHVtYi5zaApAQCAtMCwwICsxLDI1NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZHVtYiBmZXRjaGluZyBvdmVyIGh0dHAgdmlhIHN0YXRpYyBmaWxlJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1odHRwZC5zaAorc3RhcnRfaHR0cGQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeScgJworCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nICYmCisJZWNobyBjb250ZW50MSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZWNobyBjb250ZW50MiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBodHRwLWFjY2Vzc2libGUgYmFyZSByZXBvc2l0b3J5IHdpdGggbG9vc2Ugb2JqZWN0cycgJworCWNwIC1SIC5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSBnaXQgY29uZmlnIGNvcmUuYmFyZSB0cnVlICYmCisJIG1rZGlyIC1wIGhvb2tzICYmCisJIGVjaG8gImV4ZWMgZ2l0IHVwZGF0ZS1zZXJ2ZXItaW5mbyIgPmhvb2tzL3Bvc3QtdXBkYXRlICYmCisJIGNobW9kICt4IGhvb2tzL3Bvc3QtdXBkYXRlICYmCisJIGhvb2tzL3Bvc3QtdXBkYXRlCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHB1YmxpYyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBodHRwIHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9kdW1iL3JlcG8uZ2l0IGNsb25lLXRtcGwgJiYKKwljcCAtUiBjbG9uZS10bXBsIGNsb25lICYmCisJdGVzdF9jbXAgZmlsZSBjbG9uZS9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBwYXNzd29yZC1wcm90ZWN0ZWQgcmVwb3NpdG9yeScgJworCW1rZGlyIC1wICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2F1dGgvZHVtYi8iICYmCisJY3AgLVJmICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBcCisJICAgICAgICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL2F1dGgvZHVtYi9yZXBvLmdpdCIKKycKKworc2V0dXBfYXNrcGFzc19oZWxwZXIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBwYXNzd29yZC1wcm90ZWN0ZWQgcmVwb3NpdG9yeSBjYW4gZmFpbCcgJworCXNldF9hc2twYXNzIHdyb25nICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICIkSFRUUERfVVJML2F1dGgvZHVtYi9yZXBvLmdpdCIgY2xvbmUtYXV0aC1mYWlsICYmCisJZXhwZWN0X2Fza3Bhc3MgYm90aCB3cm9uZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIGF1dGggY2FuIHVzZSB1c2VyL3Bhc3MgaW4gVVJMJyAnCisJc2V0X2Fza3Bhc3Mgd3JvbmcgJiYKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkxfVVNFUl9QQVNTL2F1dGgvZHVtYi9yZXBvLmdpdCIgY2xvbmUtYXV0aC1ub25lICYmCisJZXhwZWN0X2Fza3Bhc3Mgbm9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIGF1dGggY2FuIHVzZSBqdXN0IHVzZXIgaW4gVVJMJyAnCisJc2V0X2Fza3Bhc3Mgd3JvbmcgcGFzc0Bob3N0ICYmCisJZ2l0IGNsb25lICIkSFRUUERfVVJMX1VTRVIvYXV0aC9kdW1iL3JlcG8uZ2l0IiBjbG9uZS1hdXRoLXBhc3MgJiYKKwlleHBlY3RfYXNrcGFzcyBwYXNzIHVzZXJAaG9zdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIGF1dGggY2FuIHJlcXVlc3QgYm90aCB1c2VyIGFuZCBwYXNzJyAnCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0IHBhc3NAaG9zdCAmJgorCWdpdCBjbG9uZSAiJEhUVFBEX1VSTC9hdXRoL2R1bWIvcmVwby5naXQiIGNsb25lLWF1dGgtYm90aCAmJgorCWV4cGVjdF9hc2twYXNzIGJvdGggdXNlckBob3N0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAgYXV0aCByZXNwZWN0cyBjcmVkZW50aWFsIGhlbHBlciBjb25maWcnICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgY3JlZGVudGlhbC5oZWxwZXIgIiFmKCkgeworCQljYXQgPi9kZXYvbnVsbAorCQllY2hvIHVzZXJuYW1lPXVzZXJAaG9zdAorCQllY2hvIHBhc3N3b3JkPXBhc3NAaG9zdAorCX07IGYiICYmCisJc2V0X2Fza3Bhc3Mgd3JvbmcgJiYKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkwvYXV0aC9kdW1iL3JlcG8uZ2l0IiBjbG9uZS1hdXRoLWhlbHBlciAmJgorCWV4cGVjdF9hc2twYXNzIG5vbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaHR0cCBhdXRoIGNhbiBnZXQgdXNlcm5hbWUgZnJvbSBjb25maWcnICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgImNyZWRlbnRpYWwuJEhUVFBEX1VSTC51c2VybmFtZSIgdXNlckBob3N0ICYmCisJc2V0X2Fza3Bhc3Mgd3JvbmcgcGFzc0Bob3N0ICYmCisJZ2l0IGNsb25lICIkSFRUUERfVVJML2F1dGgvZHVtYi9yZXBvLmdpdCIgY2xvbmUtYXV0aC11c2VyICYmCisJZXhwZWN0X2Fza3Bhc3MgcGFzcyB1c2VyQGhvc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlndXJlZCB1c2VybmFtZSBkb2VzIG5vdCBvdmVycmlkZSBVUkwnICcKKwl0ZXN0X2NvbmZpZ19nbG9iYWwgImNyZWRlbnRpYWwuJEhUVFBEX1VSTC51c2VybmFtZSIgd3JvbmcgJiYKKwlzZXRfYXNrcGFzcyB3cm9uZyBwYXNzQGhvc3QgJiYKKwlnaXQgY2xvbmUgIiRIVFRQRF9VUkxfVVNFUi9hdXRoL2R1bWIvcmVwby5naXQiIGNsb25lLWF1dGgtdXNlcjIgJiYKKwlleHBlY3RfYXNrcGFzcyBwYXNzIHVzZXJAaG9zdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjaGFuZ2VzIHZpYSBodHRwJyAnCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJZ2l0IHB1c2ggcHVibGljICYmCisJKGNkIGNsb25lICYmIGdpdCBwdWxsKSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjaGFuZ2VzIHZpYSBtYW51YWwgaHR0cC1mZXRjaCcgJworCWNwIC1SIGNsb25lLXRtcGwgY2xvbmUyICYmCisKKwlIRUFEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCShjZCBjbG9uZTIgJiYKKwkgZ2l0IGh0dHAtZmV0Y2ggLWEgLXcgaGVhZHMvbWFzdGVyLW5ldyAkSEVBRCAkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpICYmCisJIGdpdCBjaGVja291dCBtYXN0ZXItbmV3ICYmCisJIHRlc3QgJEhFQUQgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkpICYmCisJdGVzdF9jbXAgZmlsZSBjbG9uZTIvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIHJlbW90ZSBkZXRlY3RzIGNvcnJlY3QgSEVBRCcgJworCWdpdCBwdXNoIHB1YmxpYyBtYXN0ZXI6b3RoZXIgJiYKKwkoY2QgY2xvbmUgJiYKKwkgZ2l0IHJlbW90ZSBzZXQtaGVhZCBvcmlnaW4gLWQgJiYKKwkgZ2l0IHJlbW90ZSBzZXQtaGVhZCBvcmlnaW4gLWEgJiYKKwkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPiBvdXRwdXQgJiYKKwkgZWNobyByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlciA+IGV4cGVjdCAmJgorCSB0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBwYWNrZWQgb2JqZWN0cycgJworCWNwIC1SICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvLmdpdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAmJgorCSBnaXQgLS1iYXJlIHJlcGFjayAtYSAtZAorCSkgJiYKKwlnaXQgY2xvbmUgJEhUVFBEX1VSTC9kdW1iL3JlcG9fcGFjay5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbm90aWNlcyBjb3JydXB0IHBhY2snICcKKwljcCAtUiAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19iYWQxLmdpdCAmJgorCShjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19iYWQxLmdpdCAmJgorCSBwPWBscyBvYmplY3RzL3BhY2svcGFjay0qLnBhY2tgICYmCisJIGNobW9kIHUrdyAkcCAmJgorCSBwcmludGYgJTAyNTZkIDAgfCBkZCBvZj0kcCBicz0yNTYgY291bnQ9MSBzZWVrPTEgY29udj1ub3RydW5jCisJKSAmJgorCW1rZGlyIHJlcG9fYmFkMS5naXQgJiYKKwkoY2QgcmVwb19iYWQxLmdpdCAmJgorCSBnaXQgLS1iYXJlIGluaXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tYmFyZSBmZXRjaCAkSFRUUERfVVJML2R1bWIvcmVwb19iYWQxLmdpdCAmJgorCSB0ZXN0IDAgPSBgbHMgb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrIHwgd2MgLWxgCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBub3RpY2VzIGNvcnJ1cHQgaWR4JyAnCisJY3AgLVIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMi5naXQgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMi5naXQgJiYKKwkgcD1gbHMgb2JqZWN0cy9wYWNrL3BhY2stKi5pZHhgICYmCisJIGNobW9kIHUrdyAkcCAmJgorCSBwcmludGYgJTAyNTZkIDAgfCBkZCBvZj0kcCBicz0yNTYgY291bnQ9MSBzZWVrPTEgY29udj1ub3RydW5jCisJKSAmJgorCW1rZGlyIHJlcG9fYmFkMi5naXQgJiYKKwkoY2QgcmVwb19iYWQyLmdpdCAmJgorCSBnaXQgLS1iYXJlIGluaXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tYmFyZSBmZXRjaCAkSFRUUERfVVJML2R1bWIvcmVwb19iYWQyLmdpdCAmJgorCSB0ZXN0IDAgPSBgbHMgb2JqZWN0cy9wYWNrIHwgd2MgLWxgCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBjYW4gaGFuZGxlIHByZXZpb3VzbHktZmV0Y2hlZCAuaWR4IGZpbGVzJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGJyYW5jaDEgJiYKKwllY2hvIGJhc2UgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwlnaXQgLS1iYXJlIGluaXQgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFja2VkX2JyYW5jaGVzLmdpdCAmJgorCWdpdCBwdXNoICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2tlZF9icmFuY2hlcy5naXQgYnJhbmNoMSAmJgorCWdpdCAtLWdpdC1kaXI9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFja2VkX2JyYW5jaGVzLmdpdCByZXBhY2sgLWQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoMiBicmFuY2gxICYmCisJZWNobyBiMiA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIGIyICYmCisJZ2l0IHB1c2ggIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFja2VkX2JyYW5jaGVzLmdpdCBicmFuY2gyICYmCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrZWRfYnJhbmNoZXMuZ2l0IHJlcGFjayAtZCAmJgorCWdpdCAtLWJhcmUgaW5pdCBjbG9uZV9wYWNrZWRfYnJhbmNoZXMuZ2l0ICYmCisJZ2l0IC0tZ2l0LWRpcj1jbG9uZV9wYWNrZWRfYnJhbmNoZXMuZ2l0IGZldGNoICIkSFRUUERfVVJMIi9kdW1iL3JlcG9fcGFja2VkX2JyYW5jaGVzLmdpdCBicmFuY2gxOmJyYW5jaDEgJiYKKwlnaXQgLS1naXQtZGlyPWNsb25lX3BhY2tlZF9icmFuY2hlcy5naXQgZmV0Y2ggIiRIVFRQRF9VUkwiL2R1bWIvcmVwb19wYWNrZWRfYnJhbmNoZXMuZ2l0IGJyYW5jaDI6YnJhbmNoMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWQgbm90IHVzZSB1cGxvYWQtcGFjayBzZXJ2aWNlJyAnCisJdGVzdF9taWdodF9mYWlsIGdyZXAgJy9naXQtdXBsb2FkLXBhY2snIDwiJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZyA+YWN0ICYmCisJOiA+ZXhwICYmCisJdGVzdF9jbXAgZXhwIGFjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xpZW50IHNob3dzIHRleHQvcGxhaW4gZXJyb3JzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICIkSFRUUERfVVJML2Vycm9yL3RleHQiIDI+c3RkZXJyICYmCisJZ3JlcCAidGhpcyBpcyB0aGUgZXJyb3IgbWVzc2FnZSIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGllbnQgZG9lcyBub3Qgc2hvdyBodG1sIGVycm9ycycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAiJEhUVFBEX1VSTC9lcnJvci9odG1sIiAyPnN0ZGVyciAmJgorCSEgZ3JlcCAidGhpcyBpcyB0aGUgZXJyb3IgbWVzc2FnZSIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGllbnQgc2hvd3MgdGV4dC9wbGFpbiB3aXRoIGEgY2hhcnNldCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAiJEhUVFBEX1VSTC9lcnJvci9jaGFyc2V0IiAyPnN0ZGVyciAmJgorCWdyZXAgInRoaXMgaXMgdGhlIGVycm9yIG1lc3NhZ2UiIHN0ZGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwIGVycm9yIG1lc3NhZ2VzIGFyZSByZWVuY29kZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgIiRIVFRQRF9VUkwvZXJyb3IvdXRmMTYiIDI+c3RkZXJyICYmCisJZ3JlcCAidGhpcyBpcyB0aGUgZXJyb3IgbWVzc2FnZSIgc3RkZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZW5jb2RpbmcgaXMgcm9idXN0IHRvIHdoaXRlc3BhY2Ugb2RkaXRpZXMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgIiRIVFRQRF9VUkwvZXJyb3Ivb2RkLXNwYWNpbmciIDI+c3RkZXJyICYmCisJZ3JlcCAidGhpcyBpcyB0aGUgZXJyb3IgbWVzc2FnZSIgc3RkZXJyCisnCisKK2NoZWNrX2xhbmd1YWdlICgpIHsKKwljYXNlICIkMiIgaW4KKwknJykKKwkJPmV4cGVjdAorCQk7OworCT8qKQorCQllY2hvICJBY2NlcHQtTGFuZ3VhZ2U6ICQxIiA+ZXhwZWN0CisJCTs7CisJZXNhYyAmJgorCUdJVF9DVVJMX1ZFUkJPU0U9MSBcCisJTEFOR1VBR0U9JDIgXAorCWdpdCBscy1yZW1vdGUgIiRIVFRQRF9VUkwvZHVtYi9yZXBvLmdpdCIgPm91dHB1dCAyPiYxICYmCisJdHIgLWQgJ1wwMTUnIDxvdXRwdXQgfAorCXNvcnQgLXUgfAorCXNlZCAtbmUgJy9eQWNjZXB0LUxhbmd1YWdlOi8gcCcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsaWVudCBzZW5kcyBBY2NlcHQtTGFuZ3VhZ2UgYmFzZWQgb24gTEFOR1VBR0UnICcKKwljaGVja19sYW5ndWFnZSAia28tS1IsICo7cT0wLjkiIGtvX0tSLlVURi04JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xpZW50IHNlbmRzIEFjY2VwdC1MYW5ndWFnZSBjb3JyZWN0bHkgd2l0aCB1bm9yZGluYXJ5IExBTkdVQUdFJyAnCisJY2hlY2tfbGFuZ3VhZ2UgImtvLUtSLCAqO3E9MC45IiAia29fS1I6IiAmJgorCWNoZWNrX2xhbmd1YWdlICJrby1LUiwgZW4tVVM7cT0wLjksICo7cT0wLjgiICJrb19LUjo6ZW5fVVMiICYmCisJY2hlY2tfbGFuZ3VhZ2UgImtvLUtSLCAqO3E9MC45IiAiOjo6a29fS1IiICYmCisJY2hlY2tfbGFuZ3VhZ2UgImtvLUtSLCBlbi1VUztxPTAuOSwgKjtxPTAuOCIgImtvX0tSISE6ZW5fVVMiICYmCisJY2hlY2tfbGFuZ3VhZ2UgImtvLUtSLCBqYS1KUDtxPTAuOSwgKjtxPTAuOCIgImtvX0tSIGVuX1VTOmphX0pQIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsaWVudCBzZW5kcyBBY2NlcHQtTGFuZ3VhZ2Ugd2l0aCBtYW55IHByZWZlcnJlZCBsYW5ndWFnZXMnICcKKwljaGVja19sYW5ndWFnZSAia28tS1IsIGVuLVVTO3E9MC45LCBmci1DQTtxPTAuOCwgZGU7cT0wLjcsIHNyO3E9MC42LCBcCitqYTtxPTAuNSwgemg7cT0wLjQsIHN2O3E9MC4zLCBwdDtxPTAuMiwgKjtxPTAuMSIgXAorCQlrb19LUi5FVUMtS1I6ZW5fVVMuVVRGLTg6ZnJfQ0E6ZGUuVVRGLThAZXVybzpzckBsYXRpbjpqYTp6aDpzdjpwdCAmJgorCWNoZWNrX2xhbmd1YWdlICJrby1LUiwgZW4tVVM7cT0wLjk5LCBmci1DQTtxPTAuOTgsIGRlO3E9MC45Nywgc3I7cT0wLjk2LCBcCitqYTtxPTAuOTUsIHpoO3E9MC45NCwgc3Y7cT0wLjkzLCBwdDtxPTAuOTIsIG5iO3E9MC45MSwgKjtxPTAuOTAiIFwKKwkJa29fS1IuRVVDLUtSOmVuX1VTLlVURi04OmZyX0NBOmRlLlVURi04QGV1cm86c3JAbGF0aW46amE6emg6c3Y6cHQ6bmIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsaWVudCBkb2VzIG5vdCBzZW5kIGFuIGVtcHR5IEFjY2VwdC1MYW5ndWFnZScgJworCUdJVF9DVVJMX1ZFUkJPU0U9MSBMQU5HVUFHRT0gZ2l0IGxzLXJlbW90ZSAiJEhUVFBEX1VSTC9kdW1iL3JlcG8uZ2l0IiAyPnN0ZGVyciAmJgorCSEgZ3JlcCAiXkFjY2VwdC1MYW5ndWFnZToiIHN0ZGVycgorJworCitzdG9wX2h0dHBkCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NTEtaHR0cC1mZXRjaC1zbWFydC5zaCBiL3QvdDU1NTEtaHR0cC1mZXRjaC1zbWFydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ODIwN2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTU1MS1odHRwLWZldGNoLXNtYXJ0LnNoCkBAIC0wLDAgKzEsMjg2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBzbWFydCBmZXRjaGluZyBvdmVyIGh0dHAgdmlhIGh0dHAtYmFja2VuZCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwlnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBodHRwLWFjY2Vzc2libGUgYmFyZSByZXBvc2l0b3J5JyAnCisJbWtkaXIgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSBnaXQgLS1iYXJlIGluaXQKKwkpICYmCisJZ2l0IHJlbW90ZSBhZGQgcHVibGljICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWdpdCBwdXNoIHB1YmxpYyBtYXN0ZXI6bWFzdGVyCisnCisKK3NldHVwX2Fza3Bhc3NfaGVscGVyCisKK2NhdCA+ZXhwIDw8RU9GCis+IEdFVCAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xCis+IEFjY2VwdDogKi8qCis+IEFjY2VwdC1FbmNvZGluZzogZ3ppcAorPiBQcmFnbWE6IG5vLWNhY2hlCis8IEhUVFAvMS4xIDIwMCBPSworPCBQcmFnbWE6IG5vLWNhY2hlCis8IENhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtYXgtYWdlPTAsIG11c3QtcmV2YWxpZGF0ZQorPCBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLWFkdmVydGlzZW1lbnQKKz4gUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xCis+IEFjY2VwdC1FbmNvZGluZzogZ3ppcAorPiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtZ2l0LXVwbG9hZC1wYWNrLXJlcXVlc3QKKz4gQWNjZXB0OiBhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1yZXN1bHQKKz4gQ29udGVudC1MZW5ndGg6IHh4eAorPCBIVFRQLzEuMSAyMDAgT0sKKzwgUHJhZ21hOiBuby1jYWNoZQorPCBDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbWF4LWFnZT0wLCBtdXN0LXJldmFsaWRhdGUKKzwgQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1yZXN1bHQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgaHR0cCByZXBvc2l0b3J5JyAnCisJR0lUX0NVUkxfVkVSQk9TRT0xIGdpdCBjbG9uZSAtLXF1aWV0ICRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQgY2xvbmUgMj5lcnIgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lL2ZpbGUgJiYKKwl0ciAnXCcnXDAxNSdcJycgUSA8ZXJyIHwKKwlzZWQgLWUgIgorCQlzL1FcJC8vCisJCS9eWypdIC9kCisJCS9eJC9kCisJCS9ePCAkL2QKKworCQkvXltePjxdL3sKKwkJCXMvXi8+IC8KKwkJfQorCisJCS9ePiBVc2VyLUFnZW50OiAvZAorCQkvXj4gSG9zdDogL2QKKwkJL14+IFBPU1QgLywkIHsKKwkJCS9ePiBBY2NlcHQ6IFsqXVxcL1sqXS9kCisJCX0KKwkJcy9ePiBDb250ZW50LUxlbmd0aDogLiovPiBDb250ZW50LUxlbmd0aDogeHh4LworCQkvXj4gMDAuLndhbnQgL2QKKwkJL14+IDAwLipkb25lL2QKKworCQkvXjwgU2VydmVyOiAvZAorCQkvXjwgRXhwaXJlczogL2QKKwkJL148IERhdGU6IC9kCisJCS9ePCBDb250ZW50LUxlbmd0aDogL2QKKwkJL148IFRyYW5zZmVyLUVuY29kaW5nOiAvZAorCSIgPmFjdCAmJgorCXRlc3RfY21wIGV4cCBhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY2hhbmdlcyB2aWEgaHR0cCcgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCBwdXNoIHB1YmxpYyAmJgorCShjZCBjbG9uZSAmJiBnaXQgcHVsbCkgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lL2ZpbGUKKycKKworY2F0ID5leHAgPDxFT0YKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlZCB1cGxvYWQtcGFjayBzZXJ2aWNlJyAnCisJc2VkIC1lICIKKwkJcy9eLiogXCIvLworCQlzL1wiLy8KKwkJcy8gWzEtOV1bMC05XSpcJC8vCisJCXMvXkdFVCAvR0VUICAvCisJIiA+YWN0IDwiJEhUVFBEX1JPT1RfUEFUSCIvYWNjZXNzLmxvZyAmJgorCXRlc3RfY21wIGV4cCBhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IHJlZGlyZWN0cyAoMzAxKScgJworCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0LXJlZGlyLXBlcm0vcmVwby5naXQgLS1xdWlldCByZXBvLXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9sbG93IHJlZGlyZWN0cyAoMzAyKScgJworCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0LXJlZGlyLXRlbXAvcmVwby5naXQgLS1xdWlldCByZXBvLXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkaXJlY3RzIHJlLXJvb3QgZnVydGhlciByZXF1ZXN0cycgJworCWdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0LXJlZGlyLWxpbWl0ZWQvcmVwby5naXQgcmVwby1yZWRpci1saW1pdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZyb20gcGFzc3dvcmQtcHJvdGVjdGVkIHJlcG9zaXRvcnknICcKKwllY2hvIHR3byA+ZXhwZWN0ICYmCisJc2V0X2Fza3Bhc3MgdXNlckBob3N0IHBhc3NAaG9zdCAmJgorCWdpdCBjbG9uZSAtLWJhcmUgIiRIVFRQRF9VUkwvYXV0aC9zbWFydC9yZXBvLmdpdCIgc21hcnQtYXV0aCAmJgorCWV4cGVjdF9hc2twYXNzIGJvdGggdXNlckBob3N0ICYmCisJZ2l0IC0tZ2l0LWRpcj1zbWFydC1hdXRoIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIGF1dGgtb25seS1mb3ItcHVzaCByZXBvc2l0b3J5JyAnCisJZWNobyB0d28gPmV4cGVjdCAmJgorCXNldF9hc2twYXNzIHdyb25nICYmCisJZ2l0IGNsb25lIC0tYmFyZSAiJEhUVFBEX1VSTC9hdXRoLXB1c2gvc21hcnQvcmVwby5naXQiIHNtYXJ0LW5vYXV0aCAmJgorCWV4cGVjdF9hc2twYXNzIG5vbmUgJiYKKwlnaXQgLS1naXQtZGlyPXNtYXJ0LW5vYXV0aCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZnJvbSBhdXRoLW9ubHktZm9yLW9iamVjdHMgcmVwb3NpdG9yeScgJworCWVjaG8gdHdvID5leHBlY3QgJiYKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSAiJEhUVFBEX1VSTC9hdXRoLWZldGNoL3NtYXJ0L3JlcG8uZ2l0IiBoYWxmLWF1dGggJiYKKwlleHBlY3RfYXNrcGFzcyBib3RoIHVzZXJAaG9zdCAmJgorCWdpdCAtLWdpdC1kaXI9aGFsZi1hdXRoIGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduby1vcCBoYWxmLWF1dGggZmV0Y2ggZG9lcyBub3QgcmVxdWlyZSBhIHBhc3N3b3JkJyAnCisJc2V0X2Fza3Bhc3Mgd3JvbmcgJiYKKwlnaXQgLS1naXQtZGlyPWhhbGYtYXV0aCBmZXRjaCAmJgorCWV4cGVjdF9hc2twYXNzIG5vbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVkaXJlY3RzIHNlbmQgYXV0aCB0byBuZXcgbG9jYXRpb24nICcKKwlzZXRfYXNrcGFzcyB1c2VyQGhvc3QgcGFzc0Bob3N0ICYmCisJZ2l0IC1jIGNyZWRlbnRpYWwudXNlSHR0cFBhdGg9dHJ1ZSBcCisJICBjbG9uZSAkSFRUUERfVVJML3NtYXJ0LXJlZGlyLWF1dGgvcmVwby5naXQgcmVwby1yZWRpci1hdXRoICYmCisJZXhwZWN0X2Fza3Bhc3MgYm90aCB1c2VyQGhvc3QgYXV0aC9zbWFydC9yZXBvLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhYmxlIGR1bWIgaHR0cCBvbiBzZXJ2ZXInICcKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBcCisJCWNvbmZpZyBodHRwLmdldGFueWZpbGUgZmFsc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnR0lUX1NNQVJUX0hUVFAgY2FuIGRpc2FibGUgc21hcnQgaHR0cCcgJworCShHSVRfU01BUlRfSFRUUD0wICYmCisJIGV4cG9ydCBHSVRfU01BUlRfSFRUUCAmJgorCSBjZCBjbG9uZSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgQ29udGVudC1UeXBlIHJlamVjdGVkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICRIVFRQRF9VUkwvYnJva2VuX3NtYXJ0L3JlcG8uZ2l0IDI+YWN0dWFsICYmCisJZ3JlcCAibm90IHZhbGlkOiIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBuYW1lc3BhY2VkIHJlZnMnICcKKwl0ZXN0X2NvbW1pdCBuYW1lc3BhY2VkICYmCisJZ2l0IHB1c2ggcHVibGljIEhFQUQ6cmVmcy9uYW1lc3BhY2VzL25zL3JlZnMvaGVhZHMvbWFzdGVyICYmCisJZ2l0IC0tZ2l0LWRpcj0iJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgXAorCQlzeW1ib2xpYy1yZWYgcmVmcy9uYW1lc3BhY2VzL25zL0hFQUQgcmVmcy9uYW1lc3BhY2VzL25zL3JlZnMvaGVhZHMvbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NtYXJ0IGNsb25lIHJlc3BlY3RzIG5hbWVzcGFjZScgJworCWdpdCBjbG9uZSAiJEhUVFBEX1VSTC9zbWFydF9uYW1lc3BhY2UvcmVwby5naXQiIG5zLXNtYXJ0ICYmCisJZWNobyBuYW1lc3BhY2VkID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPW5zLXNtYXJ0Ly5naXQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2R1bWIgY2xvbmUgdmlhIGh0dHAtYmFja2VuZCByZXNwZWN0cyBuYW1lc3BhY2UnICcKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBcCisJCWNvbmZpZyBodHRwLmdldGFueWZpbGUgdHJ1ZSAmJgorCUdJVF9TTUFSVF9IVFRQPTAgZ2l0IGNsb25lIFwKKwkJIiRIVFRQRF9VUkwvc21hcnRfbmFtZXNwYWNlL3JlcG8uZ2l0IiBucy1kdW1iICYmCisJZWNobyBuYW1lc3BhY2VkID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPW5zLWR1bWIvLmdpdCBsb2cgLTEgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5jb29raWVzLnR4dCA8PEVPRgorMTI3LjAuMC4xCUZBTFNFCS9zbWFydF9jb29raWVzLwlGQUxTRQkwCW90aGVybmFtZQlvdGhlcnZhbHVlCitFT0YKK2NhdCA+ZXhwZWN0X2Nvb2tpZXMudHh0IDw8RU9GCisKKzEyNy4wLjAuMQlGQUxTRQkvc21hcnRfY29va2llcy8JRkFMU0UJMAlvdGhlcm5hbWUJb3RoZXJ2YWx1ZQorMTI3LjAuMC4xCUZBTFNFCS9zbWFydF9jb29raWVzL3JlcG8uZ2l0L2luZm8vCUZBTFNFCTAJbmFtZQl2YWx1ZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb29raWVzIHN0b3JlZCBpbiBodHRwLmNvb2tpZWZpbGUgd2hlbiBodHRwLnNhdmVjb29raWVzIHNldCcgJworCWdpdCBjb25maWcgaHR0cC5jb29raWVmaWxlIGNvb2tpZXMudHh0ICYmCisJZ2l0IGNvbmZpZyBodHRwLnNhdmVjb29raWVzIHRydWUgJiYKKwlnaXQgbHMtcmVtb3RlICRIVFRQRF9VUkwvc21hcnRfY29va2llcy9yZXBvLmdpdCBtYXN0ZXIgJiYKKwl0YWlsIC0zIGNvb2tpZXMudHh0ID5jb29raWVzX3RhaWwudHh0ICYmCisJdGVzdF9jbXAgZXhwZWN0X2Nvb2tpZXMudHh0IGNvb2tpZXNfdGFpbC50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJhbnNmZXIuaGlkZXJlZnMgd29ya3Mgb3ZlciBzbWFydC1odHRwJyAnCisJdGVzdF9jb21taXQgaGlkZGVuICYmCisJdGVzdF9jb21taXQgdmlzaWJsZSAmJgorCWdpdCBwdXNoIHB1YmxpYyBIRUFEXjpyZWZzL2hlYWRzL2EgSEVBRDpyZWZzL2hlYWRzL2IgJiYKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBcCisJCWNvbmZpZyB0cmFuc2Zlci5oaWRlcmVmcyByZWZzL2hlYWRzL2EgJiYKKwlnaXQgY2xvbmUgLS1iYXJlICIkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IiBoaWRkZW4uZ2l0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1DIGhpZGRlbi5naXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGEgJiYKKwlnaXQgLUMgaGlkZGVuLmdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYgorJworCisjIGNyZWF0ZSBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHRhZ3MsIG51bWJlcmVkIGZyb20gdGFnLSQxIHRvIHRhZy0kMgorY3JlYXRlX3RhZ3MgKCkgeworCXJtIC1mIG1hcmtzICYmCisJZm9yIGkgaW4gJCh0ZXN0X3NlcSAiJDEiICIkMiIpCisJZG8KKwkJIyBkb24ndCB1c2UgaGVyZS1kb2MsIGJlY2F1c2UgaXQgcmVxdWlyZXMgYSBwcm9jZXNzCisJCSMgcGVyIGxvb3AgaXRlcmF0aW9uCisJCWVjaG8gImNvbW1pdCByZWZzL2hlYWRzL3Rvby1tYW55LXJlZnMtJDEiICYmCisJCWVjaG8gIm1hcmsgOiRpIiAmJgorCQllY2hvICJjb21taXR0ZXIgZ2l0IDxnaXRAZXhhbXBsZS5jb20+ICRpICswMDAwIiAmJgorCQllY2hvICJkYXRhIDAiICYmCisJCWVjaG8gIk0gNjQ0IGlubGluZSBibGEudHh0IiAmJgorCQllY2hvICJkYXRhIDQiICYmCisJCWVjaG8gImJsYSIgJiYKKwkJIyBtYWtlIGV2ZXJ5IGNvbW1pdCBkYW5nbGluZyBieSBhbHdheXMKKwkJIyByZXdpbmRpbmcgdGhlIGJyYW5jaCBhZnRlciBlYWNoIGNvbW1pdAorCQllY2hvICJyZXNldCByZWZzL2hlYWRzL3Rvby1tYW55LXJlZnMtJDEiICYmCisJCWVjaG8gImZyb20gOiQxIgorCWRvbmUgfCBnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9bWFya3MgJiYKKworCSMgbm93IGFzc2lnbiB0YWdzIHRvIGFsbCB0aGUgZGFuZ2xpbmcgY29tbWl0cyB3ZSBjcmVhdGVkIGFib3ZlCisJdGFnPSQocGVybCAtZSAicHJpbnQgXCJibGFcIiB4IDMwIikgJiYKKwlzZWQgLWUgInN8XjpcKFteIF0qXCkgXCguKlwpJHxcMiByZWZzL3RhZ3MvJHRhZy1cMXwiIDxtYXJrcyA+PnBhY2tlZC1yZWZzCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSAyLDAwMCB0YWdzIGluIHRoZSByZXBvJyAnCisJKAorCQljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkJY3JlYXRlX3RhZ3MgMSAyMDAwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENNRExJTkVfTElNSVQgXAorCSdjbG9uZSB0aGUgMiwwMDAgdGFnIHJlcG8gdG8gY2hlY2sgT1MgY29tbWFuZCBsaW5lIG92ZXJmbG93JyAnCisJcnVuX3dpdGhfbGltaXRlZF9jbWRsaW5lIGdpdCBjbG9uZSAkSFRUUERfVVJML3NtYXJ0L3JlcG8uZ2l0IHRvby1tYW55LXJlZnMgJiYKKwkoCisJCWNkIHRvby1tYW55LXJlZnMgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPmFjdHVhbCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyMDAwIGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFyZ2UgZmV0Y2gtcGFjayByZXF1ZXN0cyBjYW4gYmUgc3BsaXQgYWNyb3NzIFBPU1RzJyAnCisJR0lUX0NVUkxfVkVSQk9TRT0xIGdpdCAtYyBodHRwLnBvc3RidWZmZXI9NjU1MzYgXAorCQljbG9uZSAtLWJhcmUgIiRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQiIHNwbGl0LmdpdCAyPmVyciAmJgorCWdyZXAgIl4+IFBPU1QiIGVyciA+cG9zdHMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIHBvc3RzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRVhQRU5TSVZFICdodHRwIGNhbiBoYW5kbGUgZW5vcm1vdXMgcmVmIG5lZ290aWF0aW9uJyAnCisJKAorCQljZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkJY3JlYXRlX3RhZ3MgMjAwMSA1MDAwMAorCSkgJiYKKwlnaXQgLUMgdG9vLW1hbnktcmVmcyBmZXRjaCAtcSAtLXRhZ3MgJiYKKwkoCisJCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCQljcmVhdGVfdGFncyA1MDAwMSAxMDAwMDAKKwkpICYmCisJZ2l0IC1DIHRvby1tYW55LXJlZnMgZmV0Y2ggLXEgLS10YWdzICYmCisJZ2l0IC1DIHRvby1tYW55LXJlZnMgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+dGFncyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEwMDAwMCB0YWdzCisnCisKK3N0b3BfaHR0cGQKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU2MC1odHRwLWJhY2tlbmQtbm9zZXJ2ZXIuc2ggYi90L3Q1NTYwLWh0dHAtYmFja2VuZC1ub3NlcnZlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZmFmY2YxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU2MC1odHRwLWJhY2tlbmQtbm9zZXJ2ZXIuc2gKQEAgLTAsMCArMSw3NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0LWh0dHAtYmFja2VuZC1ub3NlcnZlcicKKy4gLi90ZXN0LWxpYi5zaAorCitIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEg9IiRUUkFTSF9ESVJFQ1RPUlkiCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgR1JFUF9TVFJJUFNfQ1IKK3RoZW4KKwlHUkVQX09QVElPTlM9LVUKKwlleHBvcnQgR1JFUF9PUFRJT05TCitmaQorCitydW5fYmFja2VuZCgpIHsKKwllY2hvICIkMiIgfAorCVFVRVJZX1NUUklORz0iJHsxIypbP119IiBcCisJUEFUSF9UUkFOU0xBVEVEPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRILyR7MSUlWz9dKn0iIFwKKwlnaXQgaHR0cC1iYWNrZW5kID5hY3Qub3V0IDI+YWN0LmVycgorfQorCitHRVQoKSB7CisJUkVRVUVTVF9NRVRIT0Q9IkdFVCIgJiYgZXhwb3J0IFJFUVVFU1RfTUVUSE9EICYmCisJcnVuX2JhY2tlbmQgIi9yZXBvLmdpdC8kMSIgJiYKKwlzYW5lX3Vuc2V0IFJFUVVFU1RfTUVUSE9EICYmCisJaWYgISBncmVwICJTdGF0dXMiIGFjdC5vdXQgPmFjdAorCXRoZW4KKwkJcHJpbnRmICJTdGF0dXM6IDIwMCBPS1xyXG4iID5hY3QKKwlmaQorCXByaW50ZiAiU3RhdHVzOiAkMlxyXG4iID5leHAgJiYKKwl0ZXN0X2NtcCBleHAgYWN0Cit9CisKK1BPU1QoKSB7CisJUkVRVUVTVF9NRVRIT0Q9IlBPU1QiICYmIGV4cG9ydCBSRVFVRVNUX01FVEhPRCAmJgorCUNPTlRFTlRfVFlQRT0iYXBwbGljYXRpb24veC0kMS1yZXF1ZXN0IiAmJiBleHBvcnQgQ09OVEVOVF9UWVBFICYmCisJcnVuX2JhY2tlbmQgIi9yZXBvLmdpdC8kMSIgIiQyIiAmJgorCXNhbmVfdW5zZXQgUkVRVUVTVF9NRVRIT0QgJiYKKwlzYW5lX3Vuc2V0IENPTlRFTlRfVFlQRSAmJgorCWlmICEgZ3JlcCAiU3RhdHVzIiBhY3Qub3V0ID5hY3QKKwl0aGVuCisJCXByaW50ZiAiU3RhdHVzOiAyMDAgT0tcclxuIiA+YWN0CisJZmkKKwlwcmludGYgIlN0YXR1czogJDNcclxuIiA+ZXhwICYmCisJdGVzdF9jbXAgZXhwIGFjdAorfQorCisuICIkVEVTVF9ESVJFQ1RPUlkiL3Q1NTZ4X2NvbW1vbgorCitleHBlY3RfYWxpYXNlZCgpIHsKKwlSRVFVRVNUX01FVEhPRD0iR0VUIiAmJiBleHBvcnQgUkVRVUVTVF9NRVRIT0QgJiYKKwlpZiB0ZXN0ICQxID0gMDsgdGhlbgorCQlydW5fYmFja2VuZCAiJDIiCisJZWxzZQorCQlydW5fYmFja2VuZCAiJDIiICYmCisJCWVjaG8gImZhdGFsOiAnJDInOiBhbGlhc2VkIiA+ZXhwLmVyciAmJgorCQl0ZXN0X2NtcCBleHAuZXJyIGFjdC5lcnIKKwlmaQorCXVuc2V0IFJFUVVFU1RfTUVUSE9ECit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAtYmFja2VuZCBibG9ja3MgYmFkIFBBVEhfSU5GTycgJworCWNvbmZpZyBodHRwLmdldGFueWZpbGUgdHJ1ZSAmJgorCisJZXhwZWN0X2FsaWFzZWQgMCAvcmVwby5naXQvSEVBRCAmJgorCisJZXhwZWN0X2FsaWFzZWQgMSAvcmVwby5naXQvLi4vSEVBRCAmJgorCWV4cGVjdF9hbGlhc2VkIDEgLy4uL2V0Yy9wYXNzd2QgJiYKKwlleHBlY3RfYWxpYXNlZCAxIC4uL2V0Yy9wYXNzd2QgJiYKKwlleHBlY3RfYWxpYXNlZCAxIC9ldGMvL3Bhc3N3ZCAmJgorCWV4cGVjdF9hbGlhc2VkIDEgL2V0Yy8uL3Bhc3N3ZCAmJgorCWV4cGVjdF9hbGlhc2VkIDEgLy9kb21haW4vZGF0YS50eHQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NTYxLWh0dHAtYmFja2VuZC5zaCBiL3QvdDU1NjEtaHR0cC1iYWNrZW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkwZTBkNmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NTYxLWh0dHAtYmFja2VuZC5zaApAQCAtMCwwICsxLDEzNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0LWh0dHAtYmFja2VuZCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItaHR0cGQuc2gKK3N0YXJ0X2h0dHBkCisKK0dFVCgpIHsKKwljdXJsIC0taW5jbHVkZSAiJEhUVFBEX1VSTC8kU01BUlQvcmVwby5naXQvJDEiID5vdXQgMj4vZGV2L251bGwgJiYKKwl0ciAnXDAxNScgUSA8b3V0IHwKKwlzZWQgJworCQlzL1EkLy8KKwkJMXEKKwknID5hY3QgJiYKKwllY2hvICJIVFRQLzEuMSAkMiIgPmV4cCAmJgorCXRlc3RfY21wIGV4cCBhY3QKK30KKworUE9TVCgpIHsKKwljdXJsIC0taW5jbHVkZSAtLWRhdGEgIiQyIiBcCisJLS1oZWFkZXIgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC0kMS1yZXF1ZXN0IiBcCisJIiRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQvJDEiID5vdXQgMj4vZGV2L251bGwgJiYKKwl0ciAnXDAxNScgUSA8b3V0IHwKKwlzZWQgJworCQlzL1EkLy8KKwkJMXEKKwknID5hY3QgJiYKKwllY2hvICJIVFRQLzEuMSAkMyIgPmV4cCAmJgorCXRlc3RfY21wIGV4cCBhY3QKK30KKworLiAiJFRFU1RfRElSRUNUT1JZIi90NTU2eF9jb21tb24KKworZ3JlcCAnXlteI10nID5leHAgPDxFT0YKKworIyMjICByZWZzL2hlYWRzL21hc3RlcgorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9yZWZzL2hlYWRzL21hc3RlciBIVFRQLzEuMSA0MDQgLQorCisjIyMgIGdldGFueWZpbGUgZGVmYXVsdAorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9IRUFEIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL3BhY2tzIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgSFRUUC8xLjEgMjAwIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgSFRUUC8xLjEgMjAwIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRMT09TRV9VUkwgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kUEFDS19VUkwgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kSURYX1VSTCBIVFRQLzEuMSAyMDAKKworIyMjICBubyBnaXQtZGFlbW9uLWV4cG9ydC1vaworIyMjCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9IRUFEIEhUVFAvMS4xIDQwNCAtCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9pbmZvL3JlZnMgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9wYWNrcyBIVFRQLzEuMSA0MDQgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0LyRMT09TRV9VUkwgSFRUUC8xLjEgNDA0IC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0LyRQQUNLX1VSTCBIVFRQLzEuMSA0MDQgLQorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvJElEWF9VUkwgSFRUUC8xLjEgNDA0IC0KKworIyMjICBnaXQtZGFlbW9uLWV4cG9ydC1vaworIyMjCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC9IRUFEIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvaW5mby9yZWZzIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL3BhY2tzIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnRfbm9leHBvcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgSFRUUC8xLjEgMjAwIC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgSFRUUC8xLjEgMjAwIC0KK0dFVCAgL3NtYXJ0X25vZXhwb3J0L3JlcG8uZ2l0LyRMT09TRV9VUkwgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC8kUEFDS19VUkwgSFRUUC8xLjEgMjAwCitHRVQgIC9zbWFydF9ub2V4cG9ydC9yZXBvLmdpdC8kSURYX1VSTCBIVFRQLzEuMSAyMDAKKworIyMjICBnZXRhbnlmaWxlIHRydWUKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvSEVBRCBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9wYWNrcyBIVFRQLzEuMSAyMDAKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC9vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzIEhUVFAvMS4xIDIwMCAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC8kTE9PU0VfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvJFBBQ0tfVVJMIEhUVFAvMS4xIDIwMAorR0VUICAvc21hcnQvcmVwby5naXQvJElEWF9VUkwgSFRUUC8xLjEgMjAwCisKKyMjIyAgZ2V0YW55ZmlsZSBmYWxzZQorIyMjCitHRVQgIC9zbWFydC9yZXBvLmdpdC9IRUFEIEhUVFAvMS4xIDQwMyAtCitHRVQgIC9zbWFydC9yZXBvLmdpdC9pbmZvL3JlZnMgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9wYWNrcyBIVFRQLzEuMSA0MDMgLQorR0VUICAvc21hcnQvcmVwby5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L29iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRMT09TRV9VUkwgSFRUUC8xLjEgNDAzIC0KK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0LyRQQUNLX1VSTCBIVFRQLzEuMSA0MDMgLQorR0VUICAvc21hcnQvcmVwby5naXQvJElEWF9VUkwgSFRUUC8xLjEgNDAzIC0KKworIyMjICB1cGxvYWRwYWNrIGRlZmF1bHQKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMAorUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDIwMCAtCisKKyMjIyAgdXBsb2FkcGFjayB0cnVlCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAKK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC11cGxvYWQtcGFjayBIVFRQLzEuMSAyMDAgLQorCisjIyMgIHVwbG9hZHBhY2sgZmFsc2UKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrIEhUVFAvMS4xIDQwMyAtCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtdXBsb2FkLXBhY2sgSFRUUC8xLjEgNDAzIC0KKworIyMjICByZWNlaXZlcGFjayBkZWZhdWx0CisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgNDAzIC0KK1BPU1QgL3NtYXJ0L3JlcG8uZ2l0L2dpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgNDAzIC0KKworIyMjICByZWNlaXZlcGFjayB0cnVlCisjIyMKK0dFVCAgL3NtYXJ0L3JlcG8uZ2l0L2luZm8vcmVmcz9zZXJ2aWNlPWdpdC1yZWNlaXZlLXBhY2sgSFRUUC8xLjEgMjAwCitQT1NUIC9zbWFydC9yZXBvLmdpdC9naXQtcmVjZWl2ZS1wYWNrIEhUVFAvMS4xIDIwMCAtCisKKyMjIyAgcmVjZWl2ZXBhY2sgZmFsc2UKKyMjIworR0VUICAvc21hcnQvcmVwby5naXQvaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSA0MDMgLQorUE9TVCAvc21hcnQvcmVwby5naXQvZ2l0LXJlY2VpdmUtcGFjayBIVFRQLzEuMSA0MDMgLQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXJ2ZXIgcmVxdWVzdCBsb2cgbWF0Y2hlcyB0ZXN0IHJlc3VsdHMnICcKKwlzZWQgLWUgIgorCQlzL14uKiBcIi8vCisJCXMvXCIvLworCQlzLyBbMS05XVswLTldKlwkLy8KKwkJcy9eR0VUIC9HRVQgIC8KKwkiID5hY3QgPCIkSFRUUERfUk9PVF9QQVRIIi9hY2Nlc3MubG9nICYmCisJdGVzdF9jbXAgZXhwIGFjdAorJworCitzdG9wX2h0dHBkCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NnhfY29tbW9uIGIvdC90NTU2eF9jb21tb24KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzU5ZmNmZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NnhfY29tbW9uCkBAIC0wLDAgKzEsMTEwIEBACisjIS9iaW4vc2gKKworZmluZF9maWxlKCkgeworCWNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCWZpbmQgJDEgLXR5cGUgZiB8CisJc2VkIC1lIDFxCit9CisKK2NvbmZpZygpIHsKKwlnaXQgLS1naXQtZGlyPSIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiBjb25maWcgJDEgJDIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisKKwlta2RpciAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkoY2QgIiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJIGdpdCAtLWJhcmUgaW5pdCAmJgorCSA6ID5vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCSA6ID5vYmplY3RzL2luZm8vaHR0cC1hbHRlcm5hdGVzCisJKSAmJgorCWdpdCByZW1vdGUgYWRkIHB1YmxpYyAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm1hc3RlciAmJgorCisJKGNkICIkSFRUUERfRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSBnaXQgcmVwYWNrIC1hIC1kCisJKSAmJgorCisJZWNobyBvdGhlciA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gdHdvICYmCisJZ2l0IHB1c2ggcHVibGljIG1hc3RlcjptYXN0ZXIgJiYKKworCUxPT1NFX1VSTD0kKGZpbmRfZmlsZSBvYmplY3RzLz8/KSAmJgorCVBBQ0tfVVJMPSQoZmluZF9maWxlIG9iamVjdHMvcGFjay8qLnBhY2spICYmCisJSURYX1VSTD0kKGZpbmRfZmlsZSBvYmplY3RzL3BhY2svKi5pZHgpCisnCisKK2dldF9zdGF0aWNfZmlsZXMoKSB7CisJR0VUIEhFQUQgIiQxIiAmJgorCUdFVCBpbmZvL3JlZnMgIiQxIiAmJgorCUdFVCBvYmplY3RzL2luZm8vcGFja3MgIiQxIiAmJgorCUdFVCBvYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAiJDEiICYmCisJR0VUIG9iamVjdHMvaW5mby9odHRwLWFsdGVybmF0ZXMgIiQxIiAmJgorCUdFVCAkTE9PU0VfVVJMICIkMSIgJiYKKwlHRVQgJFBBQ0tfVVJMICIkMSIgJiYKKwlHRVQgJElEWF9VUkwgIiQxIgorfQorCitTTUFSVD1zbWFydAorR0lUX0hUVFBfRVhQT1JUX0FMTD0xICYmIGV4cG9ydCBHSVRfSFRUUF9FWFBPUlRfQUxMCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3QgcmVmcy9oZWFkcy9tYXN0ZXIgbm90IGZvdW5kJyAnCisJR0VUIHJlZnMvaGVhZHMvbWFzdGVyICI0MDQgTm90IEZvdW5kIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdGljIGZpbGUgaXMgb2snICcKKwlnZXRfc3RhdGljX2ZpbGVzICIyMDAgT0siCisnCitTTUFSVD1zbWFydF9ub2V4cG9ydAordW5zZXQgR0lUX0hUVFBfRVhQT1JUX0FMTAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gZXhwb3J0IGJ5IGRlZmF1bHQnICcKKwlnZXRfc3RhdGljX2ZpbGVzICI0MDQgTm90IEZvdW5kIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhwb3J0IGlmIGdpdC1kYWVtb24tZXhwb3J0LW9rJyAnCisgICAgICAgIChjZCAiJEhUVFBEX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwkgdG91Y2ggZ2l0LWRhZW1vbi1leHBvcnQtb2sKKwkpICYmCisgICAgICAgIGdldF9zdGF0aWNfZmlsZXMgIjIwMCBPSyIKKycKK1NNQVJUPXNtYXJ0CitHSVRfSFRUUF9FWFBPUlRfQUxMPTEgJiYgZXhwb3J0IEdJVF9IVFRQX0VYUE9SVF9BTEwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXRpYyBmaWxlIGlmIGh0dHAuZ2V0YW55ZmlsZSB0cnVlIGlzIG9rJyAnCisJY29uZmlnIGh0dHAuZ2V0YW55ZmlsZSB0cnVlICYmCisJZ2V0X3N0YXRpY19maWxlcyAiMjAwIE9LIgorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdGljIGZpbGUgaWYgaHR0cC5nZXRhbnlmaWxlIGZhbHNlIGZhaWxzJyAnCisJY29uZmlnIGh0dHAuZ2V0YW55ZmlsZSBmYWxzZSAmJgorCWdldF9zdGF0aWNfZmlsZXMgIjQwMyBGb3JiaWRkZW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAudXBsb2FkcGFjayBkZWZhdWx0IGVuYWJsZWQnICcKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrICIyMDAgT0siICAmJgorCVBPU1QgZ2l0LXVwbG9hZC1wYWNrIDAwMDAgIjIwMCBPSyIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAudXBsb2FkcGFjayB0cnVlJyAnCisJY29uZmlnIGh0dHAudXBsb2FkcGFjayB0cnVlICYmCisJR0VUIGluZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayAiMjAwIE9LIiAmJgorCVBPU1QgZ2l0LXVwbG9hZC1wYWNrIDAwMDAgIjIwMCBPSyIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAudXBsb2FkcGFjayBmYWxzZScgJworCWNvbmZpZyBodHRwLnVwbG9hZHBhY2sgZmFsc2UgJiYKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXVwbG9hZC1wYWNrICI0MDMgRm9yYmlkZGVuIiAmJgorCVBPU1QgZ2l0LXVwbG9hZC1wYWNrIDAwMDAgIjQwMyBGb3JiaWRkZW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAucmVjZWl2ZXBhY2sgZGVmYXVsdCBkaXNhYmxlZCcgJworCUdFVCBpbmZvL3JlZnM/c2VydmljZT1naXQtcmVjZWl2ZS1wYWNrICI0MDMgRm9yYmlkZGVuIiAgJiYKKwlQT1NUIGdpdC1yZWNlaXZlLXBhY2sgMDAwMCAiNDAzIEZvcmJpZGRlbiIKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2h0dHAucmVjZWl2ZXBhY2sgdHJ1ZScgJworCWNvbmZpZyBodHRwLnJlY2VpdmVwYWNrIHRydWUgJiYKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayAiMjAwIE9LIiAmJgorCVBPU1QgZ2l0LXJlY2VpdmUtcGFjayAwMDAwICIyMDAgT0siCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdodHRwLnJlY2VpdmVwYWNrIGZhbHNlJyAnCisJY29uZmlnIGh0dHAucmVjZWl2ZXBhY2sgZmFsc2UgJiYKKwlHRVQgaW5mby9yZWZzP3NlcnZpY2U9Z2l0LXJlY2VpdmUtcGFjayAiNDAzIEZvcmJpZGRlbiIgJiYKKwlQT1NUIGdpdC1yZWNlaXZlLXBhY2sgMDAwMCAiNDAzIEZvcmJpZGRlbiIKKycKZGlmZiAtLWdpdCBhL3QvdDU1NzAtZ2l0LWRhZW1vbi5zaCBiL3QvdDU1NzAtZ2l0LWRhZW1vbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iN2UyODMyCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU3MC1naXQtZGFlbW9uLnNoCkBAIC0wLDAgKzEsMTcyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBmZXRjaGluZyBvdmVyIGdpdCBwcm90b2NvbCcKKy4gLi90ZXN0LWxpYi5zaAorCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1naXQtZGFlbW9uLnNoCitzdGFydF9naXRfZGFlbW9uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwlnaXQgY29uZmlnIHB1c2guZGVmYXVsdCBtYXRjaGluZyAmJgorCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBnaXQtYWNjZXNzaWJsZSBiYXJlIHJlcG9zaXRvcnknICcKKwlta2RpciAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCShjZCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IiAmJgorCSBnaXQgLS1iYXJlIGluaXQgJiYKKwkgOiA+Z2l0LWRhZW1vbi1leHBvcnQtb2sKKwkpICYmCisJZ2l0IHJlbW90ZSBhZGQgcHVibGljICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJZ2l0IHB1c2ggcHVibGljIG1hc3RlcjptYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZ2l0IHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgIiRHSVRfREFFTU9OX1VSTC9yZXBvLmdpdCIgY2xvbmUgJiYKKwl0ZXN0X2NtcCBmaWxlIGNsb25lL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY2hhbmdlcyB2aWEgZ2l0IHByb3RvY29sJyAnCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJZ2l0IHB1c2ggcHVibGljICYmCisJKGNkIGNsb25lICYmIGdpdCBwdWxsKSAmJgorCXRlc3RfY21wIGZpbGUgY2xvbmUvZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdGUgZGV0ZWN0cyBjb3JyZWN0IEhFQUQnICcKKwlnaXQgcHVzaCBwdWJsaWMgbWFzdGVyOm90aGVyICYmCisJKGNkIGNsb25lICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgLWQgb3JpZ2luICYmCisJIGdpdCByZW1vdGUgc2V0LWhlYWQgLWEgb3JpZ2luICYmCisJIGdpdCBzeW1ib2xpYy1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEID4gb3V0cHV0ICYmCisJIGVjaG8gcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgPiBleHBlY3QgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBwYWNrIG9iamVjdHMnICcKKwljcCAtUiAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvLmdpdCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX3BhY2suZ2l0ICYmCisJKGNkICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fcGFjay5naXQgJiYKKwkgZ2l0IC0tYmFyZSByZXBhY2sgLWEgLWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIG5vdGljZXMgY29ycnVwdCBwYWNrJyAnCisJY3AgLVIgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX2JhZDEuZ2l0ICYmCisJKGNkICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMS5naXQgJiYKKwkgcD1gbHMgb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrYCAmJgorCSBjaG1vZCB1K3cgJHAgJiYKKwkgcHJpbnRmICUwMjU2ZCAwIHwgZGQgb2Y9JHAgYnM9MjU2IGNvdW50PTEgc2Vlaz0xIGNvbnY9bm90cnVuYworCSkgJiYKKwlta2RpciByZXBvX2JhZDEuZ2l0ICYmCisJKGNkIHJlcG9fYmFkMS5naXQgJiYKKwkgZ2l0IC0tYmFyZSBpbml0ICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCAtLWJhcmUgZmV0Y2ggIiRHSVRfREFFTU9OX1VSTC9yZXBvX2JhZDEuZ2l0IiAmJgorCSB0ZXN0IDAgPSBgbHMgb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrIHwgd2MgLWxgCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBub3RpY2VzIGNvcnJ1cHQgaWR4JyAnCisJY3AgLVIgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSCIvcmVwb19wYWNrLmdpdCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIIi9yZXBvX2JhZDIuZ2l0ICYmCisJKGNkICIkR0lUX0RBRU1PTl9ET0NVTUVOVF9ST09UX1BBVEgiL3JlcG9fYmFkMi5naXQgJiYKKwkgcD1gbHMgb2JqZWN0cy9wYWNrL3BhY2stKi5pZHhgICYmCisJIGNobW9kIHUrdyAkcCAmJgorCSBwcmludGYgJTAyNTZkIDAgfCBkZCBvZj0kcCBicz0yNTYgY291bnQ9MSBzZWVrPTEgY29udj1ub3RydW5jCisJKSAmJgorCW1rZGlyIHJlcG9fYmFkMi5naXQgJiYKKwkoY2QgcmVwb19iYWQyLmdpdCAmJgorCSBnaXQgLS1iYXJlIGluaXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tYmFyZSBmZXRjaCAiJEdJVF9EQUVNT05fVVJML3JlcG9fYmFkMi5naXQiICYmCisJIHRlc3QgMCA9IGBscyBvYmplY3RzL3BhY2sgfCB3YyAtbGAKKwkpCisnCisKK3Rlc3RfcmVtb3RlX2Vycm9yKCkKK3sKKwlkb19leHBvcnQ9WWVzUGxlYXNlCisJd2hpbGUgdGVzdCAkIyAtZ3QgMAorCWRvCisJCWNhc2UgJDEgaW4KKwkJLXgpCisJCQlzaGlmdAorCQkJY2htb2QgLXggIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIKKwkJCTs7CisJCS1uKQorCQkJc2hpZnQKKwkJCWRvX2V4cG9ydD0KKwkJCTs7CisJCSopCisJCQlicmVhaworCQllc2FjCisJZG9uZQorCisJbXNnPSQxCisJc2hpZnQKKwljbWQ9JDEKKwlzaGlmdAorCXJlcG89JDEKKwlzaGlmdCB8fCBlcnJvciAiaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIgorCisJaWYgdGVzdCAteCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRILyRyZXBvIgorCXRoZW4KKwkJaWYgdGVzdCAtbiAiJGRvX2V4cG9ydCIKKwkJdGhlbgorCQkJOiA+IiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC8kcmVwby9naXQtZGFlbW9uLWV4cG9ydC1vayIKKwkJZWxzZQorCQkJcm0gLWYgIiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC8kcmVwby9naXQtZGFlbW9uLWV4cG9ydC1vayIKKwkJZmkKKwlmaQorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0ICIkY21kIiAiJEdJVF9EQUVNT05fVVJMLyRyZXBvIiAiJEAiIDI+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiZmF0YWw6IHJlbW90ZSBlcnJvcjogJG1zZzogLyRyZXBvIiBvdXRwdXQgJiYKKwlyZXQ9JD8KKwljaG1vZCAreCAiJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIL3JlcG8uZ2l0IgorCShleGl0ICRyZXQpCit9CisKK21zZz0iYWNjZXNzIGRlbmllZCBvciByZXBvc2l0b3J5IG5vdCBleHBvcnRlZCIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIG5vbi1leGlzdGVudCcgInRlc3RfcmVtb3RlX2Vycm9yICAgICckbXNnJyBjbG9uZSBub3doZXJlLmdpdCAgICAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIGRpc2FibGVkJyAgICAgICJ0ZXN0X3JlbW90ZV9lcnJvciAgICAnJG1zZycgcHVzaCAgcmVwby5naXQgbWFzdGVyIgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCBhY2Nlc3MgZGVuaWVkJyAidGVzdF9yZW1vdGVfZXJyb3IgLXggJyRtc2cnIGZldGNoIHJlcG8uZ2l0ICAgICAgICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBleHBvcnRlZCcgICAgICAgInRlc3RfcmVtb3RlX2Vycm9yIC1uICckbXNnJyBmZXRjaCByZXBvLmdpdCAgICAgICAiCisKK3N0b3BfZ2l0X2RhZW1vbgorc3RhcnRfZ2l0X2RhZW1vbiAtLWluZm9ybWF0aXZlLWVycm9ycworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBub24tZXhpc3RlbnQnICJ0ZXN0X3JlbW90ZV9lcnJvciAgICAnbm8gc3VjaCByZXBvc2l0b3J5JyAgICAgIGNsb25lIG5vd2hlcmUuZ2l0ICAgICIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggZGlzYWJsZWQnICAgICAgInRlc3RfcmVtb3RlX2Vycm9yICAgICdzZXJ2aWNlIG5vdCBlbmFibGVkJyAgICAgcHVzaCAgcmVwby5naXQgbWFzdGVyIgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZCBhY2Nlc3MgZGVuaWVkJyAidGVzdF9yZW1vdGVfZXJyb3IgLXggJ25vIHN1Y2ggcmVwb3NpdG9yeScgICAgICBmZXRjaCByZXBvLmdpdCAgICAgICAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgZXhwb3J0ZWQnICAgICAgICJ0ZXN0X3JlbW90ZV9lcnJvciAtbiAncmVwb3NpdG9yeSBub3QgZXhwb3J0ZWQnIGZldGNoIHJlcG8uZ2l0ICAgICAgICIKKworc3RvcF9naXRfZGFlbW9uCitzdGFydF9naXRfZGFlbW9uIC0taW50ZXJwb2xhdGVkLXBhdGg9IiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC8lSCVEIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhY2Nlc3MgcmVwbyB2aWEgaW50ZXJwb2xhdGVkIGhvc3RuYW1lJyAnCisJcmVwbz0iJEdJVF9EQUVNT05fRE9DVU1FTlRfUk9PVF9QQVRIL2xvY2FsaG9zdC9pbnRlcnAuZ2l0IiAmJgorCWdpdCBpbml0IC0tYmFyZSAiJHJlcG8iICYmCisJZ2l0IHB1c2ggIiRyZXBvIiBIRUFEICYmCisJPiIkcmVwbyIvZ2l0LWRhZW1vbi1leHBvcnQtb2sgJiYKKwlybSAtcmYgdG1wLmdpdCAmJgorCUdJVF9PVkVSUklERV9WSVJUVUFMX0hPU1Q9bG9jYWxob3N0IFwKKwkJZ2l0IGNsb25lIC0tYmFyZSAiJEdJVF9EQUVNT05fVVJML2ludGVycC5naXQiIHRtcC5naXQgJiYKKwlybSAtcmYgdG1wLmdpdCAmJgorCUdJVF9PVkVSUklERV9WSVJUVUFMX0hPU1Q9TE9DQUxIT1NUIFwKKwkJZ2l0IGNsb25lIC0tYmFyZSAiJEdJVF9EQUVNT05fVVJML2ludGVycC5naXQiIHRtcC5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9zdG5hbWUgY2Fubm90IGJyZWFrIG91dCBvZiBkaXJlY3RvcnknICcKKwlybSAtcmYgdG1wLmdpdCAmJgorCXJlcG89IiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC8uLi9lc2NhcGUuZ2l0IiAmJgorCWdpdCBpbml0IC0tYmFyZSAiJHJlcG8iICYmCisJZ2l0IHB1c2ggIiRyZXBvIiBIRUFEICYmCisJPiIkcmVwbyIvZ2l0LWRhZW1vbi1leHBvcnQtb2sgJiYKKwl0ZXN0X211c3RfZmFpbCBcCisJCWVudiBHSVRfT1ZFUlJJREVfVklSVFVBTF9IT1NUPS4uIFwKKwkJZ2l0IGNsb25lIC0tYmFyZSAiJEdJVF9EQUVNT05fVVJML2VzY2FwZS5naXQiIHRtcC5naXQKKycKKworc3RvcF9naXRfZGFlbW9uCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU1NzEtcHJlLXB1c2gtaG9vay5zaCBiL3QvdDU1NzEtcHJlLXB1c2gtaG9vay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42Zjk5MTZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTU3MS1wcmUtcHVzaC1ob29rLnNoCkBAIC0wLDAgKzEsMTMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgcHJlLXB1c2ggaG9va3MnCisuIC4vdGVzdC1saWIuc2gKKworIyBTZXR1cCBob29rIHRoYXQgYWx3YXlzIHN1Y2NlZWRzCitIT09LRElSPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9ob29rcyIKK0hPT0s9IiRIT09LRElSL3ByZS1wdXNoIgorbWtkaXIgLXAgIiRIT09LRElSIgord3JpdGVfc2NyaXB0ICIkSE9PSyIgPDxFT0YKK2NhdCA+L2Rldi9udWxsCitleGl0IDAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBjb25maWcgcHVzaC5kZWZhdWx0IHVwc3RyZWFtICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlcG8xICYmCisJZ2l0IHJlbW90ZSBhZGQgcGFyZW50MSByZXBvMSAmJgorCXRlc3RfY29tbWl0IG9uZSAmJgorCWdpdCBwdXNoIHBhcmVudDEgSEVBRDpmb3JlaWduCisnCit3cml0ZV9zY3JpcHQgIiRIT09LIiA8PEVPRgorY2F0ID4vZGV2L251bGwKK2V4aXQgMQorRU9GCisKK0NPTU1JVDE9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKK2V4cG9ydCBDT01NSVQxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggd2l0aCBmYWlsaW5nIGhvb2snICcKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcHVzaCBwYXJlbnQxIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgYnlwYXNzZXMgaG9vaycgJworCWdpdCBwdXNoIC0tbm8tdmVyaWZ5IHBhcmVudDEgSEVBRAorJworCitDT01NSVQyPSIkKGdpdCByZXYtcGFyc2UgSEVBRCkiCitleHBvcnQgQ09NTUlUMgorCit3cml0ZV9zY3JpcHQgIiRIT09LIiA8PCdFT0YnCitlY2hvICIkMSIgPmFjdHVhbAorZWNobyAiJDIiID4+YWN0dWFsCitjYXQgPj5hY3R1YWwKK0VPRgorCitjYXQgPmV4cGVjdGVkIDw8RU9GCitwYXJlbnQxCityZXBvMQorcmVmcy9oZWFkcy9tYXN0ZXIgJENPTU1JVDIgcmVmcy9oZWFkcy9mb3JlaWduICRDT01NSVQxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCB3aXRoIGhvb2snICcKKwlnaXQgcHVzaCBwYXJlbnQxIG1hc3Rlcjpmb3JlaWduICYmCisJZGlmZiBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGEgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIHBhcmVudDEvZm9yZWlnbiAmJgorCXRlc3RfY29tbWl0IHRocmVlCisnCisKK0NPTU1JVDM9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKK2V4cG9ydCBDT01NSVQzCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK3BhcmVudDEKK3JlcG8xCityZWZzL2hlYWRzL290aGVyICRDT01NSVQzIHJlZnMvaGVhZHMvZm9yZWlnbiAkQ09NTUlUMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdG8gZGVmYXVsdCcgJworCWdpdCBwdXNoICYmCisJZGlmZiBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorcGFyZW50MQorcmVwbzEKK3JlZnMvdGFncy9vbmUgJENPTU1JVDEgcmVmcy90YWdzL3RhZzEgJF96NDAKK0hFQUR+ICRDT01NSVQyIHJlZnMvaGVhZHMvcHJldiAkX3o0MAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbm9uLWJyYW5jaGVzJyAnCisJZ2l0IHB1c2ggcGFyZW50MSBvbmU6dGFnMSBIRUFEfjpyZWZzL2hlYWRzL3ByZXYgJiYKKwlkaWZmIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitwYXJlbnQxCityZXBvMQorKGRlbGV0ZSkgJF96NDAgcmVmcy9oZWFkcy9wcmV2ICRDT01NSVQyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBkZWxldGUnICcKKwlnaXQgcHVzaCBwYXJlbnQxIDpwcmV2ICYmCisJZGlmZiBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorcmVwbzEKK3JlcG8xCitIRUFEICRDT01NSVQzIHJlZnMvaGVhZHMvb3RoZXIgJF96NDAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIFVSTCcgJworCWdpdCBwdXNoIHJlcG8xIEhFQUQgJiYKKwlkaWZmIGV4cGVjdGVkIGFjdHVhbAorJworCisjIFRlc3QgdGhhdCBmaWxsaW5nIHBpcGUgYnVmZmVycyBkb2Vzbid0IGNhdXNlIGZhaWx1cmUKKyMgVG9vIHNsb3cgdG8gbGVhdmUgZW5hYmxlZCBmb3IgZ2VuZXJhbCB1c2UKK2lmIGZhbHNlCit0aGVuCisJcHJpbnRmICdwYXJlbnQxXG5yZXBvMVxuJyA+ZXhwZWN0ZWQKKwlucj0xMDAwCisJd2hpbGUgdGVzdCAkbnIgLWx0IDIwMDAKKwlkbworCQlucj0kKCggJG5yICsgMSApKQorCQlnaXQgYnJhbmNoIGIvJG5yICRDT01NSVQzCisJCWVjaG8gInJlZnMvaGVhZHMvYi8kbnIgJENPTU1JVDMgcmVmcy9oZWFkcy9iLyRuciAkX3o0MCIgPj5leHBlY3RlZAorCWRvbmUKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggbWFueSByZWZzJyAnCisJCWdpdCBwdXNoIHBhcmVudDEgInJlZnMvaGVhZHMvYi8qOnJlZnMvaGVhZHMvYi8qIiAmJgorCQlkaWZmIGV4cGVjdGVkIGFjdHVhbAorCScKK2ZpCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTU3Mi1wdWxsLXN1Ym1vZHVsZS5zaCBiL3QvdDU1NzItcHVsbC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWNjZmE1YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU1NzItcHVsbC1zdWJtb2R1bGUuc2gKQEAgLTAsMCArMSw0NSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3B1bGwgY2FuIGhhbmRsZSBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXN1Ym1vZHVsZS11cGRhdGUuc2gKKworcmVzZXRfYnJhbmNoX3RvX0hFQUQgKCkgeworCWdpdCBicmFuY2ggLUQgIiQxIiAmJgorCWdpdCBjaGVja291dCAtYiAiJDEiIEhFQUQgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtLXRvPSJvcmlnaW4vJDEiICIkMSIKK30KKworZ2l0X3B1bGwgKCkgeworCXJlc2V0X2JyYW5jaF90b19IRUFEICIkMSIgJiYKKwlnaXQgcHVsbAorfQorCisjIHB1bGxzIHdpdGhvdXQgY29uZmxpY3RzCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdF9wdWxsIgorCitnaXRfcHVsbF9mZiAoKSB7CisJcmVzZXRfYnJhbmNoX3RvX0hFQUQgIiQxIiAmJgorCWdpdCBwdWxsIC0tZmYKK30KKwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXRfcHVsbF9mZiIKKworZ2l0X3B1bGxfZmZfb25seSAoKSB7CisJcmVzZXRfYnJhbmNoX3RvX0hFQUQgIiQxIiAmJgorCWdpdCBwdWxsIC0tZmYtb25seQorfQorCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdF9wdWxsX2ZmX29ubHkiCisKK2dpdF9wdWxsX25vZmYgKCkgeworCXJlc2V0X2JyYW5jaF90b19IRUFEICIkMSIgJiYKKwlnaXQgcHVsbCAtLW5vLWZmCit9CisKK0tOT1dOX0ZBSUxVUkVfTk9GRl9NRVJHRV9ET0VTTlRfQ1JFQVRFX0VNUFRZX1NVQk1PRFVMRV9ESVI9MQorS05PV05fRkFJTFVSRV9OT0ZGX01FUkdFX0FUVEVNUFRTX1RPX01FUkdFX1JFTU9WRURfU1VCTU9EVUxFX0ZJTEVTPTEKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0X3B1bGxfbm9mZiIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjAwLWNsb25lLWZhaWwtY2xlYW51cC5zaCBiL3QvdDU2MDAtY2xvbmUtZmFpbC1jbGVhbnVwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0MzU2OTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NjAwLWNsb25lLWZhaWwtY2xlYW51cC5zaApAQCAtMCwwICsxLDUyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IENhcmwgRC4gV29ydGggPGN3b3J0aEBjd29ydGgub3JnPgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCBjbG9uZSB0byBjbGVhbnVwIGFmdGVyIGZhaWx1cmUKKworVGhpcyB0ZXN0IGNvdmVycyB0aGUgZmFjdCB0aGF0IGlmIGdpdCBjbG9uZSBmYWlscywgaXQgc2hvdWxkIHJlbW92ZQordGhlIGRpcmVjdG9yeSBpdCBjcmVhdGVkLCB0byBhdm9pZCB0aGUgdXNlciBoYXZpbmcgdG8gbWFudWFsbHkKK3JlbW92ZSB0aGUgZGlyZWN0b3J5IGJlZm9yZSBhdHRlbXB0aW5nIGEgY2xvbmUgYWdhaW4uJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2Nsb25lIG9mIG5vbi1leGlzdGVudCBzb3VyY2Ugc2hvdWxkIGZhaWwnIFwKKyAgICAndGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIGZvbyBiYXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdmYWlsZWQgY2xvbmUgc2hvdWxkIG5vdCBsZWF2ZSBhIGRpcmVjdG9yeScgXAorICAgICchIHRlc3QgLWQgYmFyJworCisjIE5lZWQgYSByZXBvIHRvIGNsb25lCit0ZXN0X2NyZWF0ZV9yZXBvIGZvbworCisjIGNsb25lIGRvZXNuJ3QgbGlrZSBpdCBpZiB0aGVyZSBpcyBubyBIRUFELiBJcyB0aGF0IGEgYnVnPworKGNkIGZvbyAmJiB0b3VjaCBmaWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tICdhZGQgZmlsZScgPi9kZXYvbnVsbCAyPiYxKQorCisjIHNvdXJjZSByZXBvc2l0b3J5IGdpdmVuIHRvIGdpdCBjbG9uZSBzaG91bGQgYmUgcmVsYXRpdmUgdG8gdGhlCisjIGN1cnJlbnQgcGF0aCBub3QgdG8gdGhlIHRhcmdldCBkaXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjbG9uZSBvZiBub24tZXhpc3RlbnQgKHJlbGF0aXZlIHRvICRQV0QpIHNvdXJjZSBzaG91bGQgZmFpbCcgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLi4vZm9vIGJheicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2Nsb25lIHNob3VsZCB3b3JrIG5vdyB0aGF0IHNvdXJjZSBleGlzdHMnIFwKKyAgICAnZ2l0IGNsb25lIGZvbyBiYXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdzdWNjZXNzZnVsIGNsb25lIG11c3QgbGVhdmUgdGhlIGRpcmVjdG9yeScgXAorICAgICd0ZXN0IC1kIGJhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbGVkIGNsb25lIC0tc2VwYXJhdGUtZ2l0LWRpciBzaG91bGQgbm90IGxlYXZlIGFueSBkaXJlY3RvcmllcycgJworCW1rZGlyIGZvby8uZ2l0L29iamVjdHMuYmFrLyAmJgorCW12IGZvby8uZ2l0L29iamVjdHMvKiBmb28vLmdpdC9vYmplY3RzLmJhay8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1zZXBhcmF0ZS1naXQtZGlyIGdpdGRpciBmb28gd29ya3RyZWUgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1lIGdpdGRpciAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWUgd29ya3RyZWUgJiYKKwltdiBmb28vLmdpdC9vYmplY3RzLmJhay8qIGZvby8uZ2l0L29iamVjdHMvICYmCisJcm1kaXIgZm9vLy5naXQvb2JqZWN0cy5iYWsKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjAxLWNsb25lLnNoIGIvdC90NTYwMS1jbG9uZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YjM0ZjNjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTYwMS1jbG9uZS5zaApAQCAtMCwwICsxLDUwNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Y2xvbmUKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJcm0gLWZyIC5naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHNyYyAmJgorCSgKKwkJY2Qgc3JjICYmCisJCT5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwkJZWNobyAxID5maWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIHVwZGF0ZWQKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBleGNlc3MgcGFyYW1ldGVycyAoMSknICcKKworCXJtIC1mciBkc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLW4gc3JjIGRzdCBqdW5rCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCBleGNlc3MgcGFyYW1ldGVycyAoMiknICcKKworCXJtIC1mciBkc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLW4gImZpbGU6Ly8kKHB3ZCkvc3JjIiBkc3QganVuaworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdvdXRwdXQgZnJvbSBjbG9uZScgJworCXJtIC1mciBkc3QgJiYKKwlnaXQgY2xvbmUgLW4gImZpbGU6Ly8kKHB3ZCkvc3JjIiBkc3QgPm91dHB1dCAyPiYxICYmCisJdGVzdCAkKGdyZXAgQ2xvbiBvdXRwdXQgfCB3YyAtbCkgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGRvZXMgbm90IGtlZXAgcGFjaycgJworCisJcm0gLWZyIGRzdCAmJgorCWdpdCBjbG9uZSAtbiAiZmlsZTovLyQocHdkKS9zcmMiIGRzdCAmJgorCSEgdGVzdCAtZiBkc3QvZmlsZSAmJgorCSEgKGVjaG8gZHN0Ly5naXQvb2JqZWN0cy9wYWNrL3BhY2stKiB8IGdyZXAgIlwua2VlcCIpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgY2hlY2tzIG91dCBmaWxlcycgJworCisJcm0gLWZyIGRzdCAmJgorCWdpdCBjbG9uZSBzcmMgZHN0ICYmCisJdGVzdCAtZiBkc3QvZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlc3BlY3RzIEdJVF9XT1JLX1RSRUUnICcKKworCUdJVF9XT1JLX1RSRUU9d29ya3RyZWUgZ2l0IGNsb25lIHNyYyBiYXJlICYmCisJdGVzdCAtZiBiYXJlL2NvbmZpZyAmJgorCXRlc3QgLWYgd29ya3RyZWUvZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNyZWF0ZXMgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzJyAnCisKKwlnaXQgY2xvbmUgc3JjIGxvbmcvcGF0aC90by9kc3QgJiYKKwl0ZXN0IC1mIGxvbmcvcGF0aC90by9kc3QvZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNyZWF0ZXMgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzIGZvciBiYXJlIHJlcG8nICcKKworCWdpdCBjbG9uZSAtLWJhcmUgc3JjIGxvbmcvcGF0aC90by9iYXJlL2RzdCAmJgorCXRlc3QgLWYgbG9uZy9wYXRoL3RvL2JhcmUvZHN0L2NvbmZpZworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tbWlycm9yJyAnCisKKwlnaXQgY2xvbmUgLS1taXJyb3Igc3JjIG1pcnJvciAmJgorCXRlc3QgLWYgbWlycm9yL0hFQUQgJiYKKwl0ZXN0ICEgLWYgbWlycm9yL2ZpbGUgJiYKKwlGRVRDSD0iJChjZCBtaXJyb3IgJiYgZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLmZldGNoKSIgJiYKKwl0ZXN0ICIrcmVmcy8qOnJlZnMvKiIgPSAiJEZFVENIIiAmJgorCU1JUlJPUj0iJChjZCBtaXJyb3IgJiYgZ2l0IGNvbmZpZyAtLWJvb2wgcmVtb3RlLm9yaWdpbi5taXJyb3IpIiAmJgorCXRlc3QgIiRNSVJST1IiID0gdHJ1ZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tbWlycm9yIHdpdGggZGV0YWNoZWQgSEVBRCcgJworCisJKCBjZCBzcmMgJiYgZ2l0IGNoZWNrb3V0IEhFQUReICYmIGdpdCByZXYtcGFyc2UgSEVBRCA+Li4vZXhwZWN0ZWQgKSAmJgorCWdpdCBjbG9uZSAtLW1pcnJvciBzcmMgbWlycm9yLmRldGFjaGVkICYmCisJKCBjZCBzcmMgJiYgZ2l0IGNoZWNrb3V0IC0gKSAmJgorCUdJVF9ESVI9bWlycm9yLmRldGFjaGVkIGdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1iYXJlIHdpdGggZGV0YWNoZWQgSEVBRCcgJworCisJKCBjZCBzcmMgJiYgZ2l0IGNoZWNrb3V0IEhFQUReICYmIGdpdCByZXYtcGFyc2UgSEVBRCA+Li4vZXhwZWN0ZWQgKSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgc3JjIGJhcmUuZGV0YWNoZWQgJiYKKwkoIGNkIHNyYyAmJiBnaXQgY2hlY2tvdXQgLSApICYmCisJR0lUX0RJUj1iYXJlLmRldGFjaGVkIGdpdCByZXYtcGFyc2UgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1iYXJlIG5hbWVzIHRoZSBsb2NhbCByZXBvc2l0b3J5IDxuYW1lPi5naXQnICcKKworCWdpdCBjbG9uZSAtLWJhcmUgc3JjICYmCisJdGVzdCAtZCBzcmMuZ2l0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1taXJyb3IgZG9lcyBub3QgcmVwZWF0IHRhZ3MnICcKKworCShjZCBzcmMgJiYKKwkgZ2l0IHRhZyBzb21lLXRhZyBIRUFEKSAmJgorCWdpdCBjbG9uZSAtLW1pcnJvciBzcmMgbWlycm9yMiAmJgorCShjZCBtaXJyb3IyICYmCisJIGdpdCBzaG93LXJlZiAyPiBjbG9uZS5lcnIgPiBjbG9uZS5vdXQpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ3JlcCBEdXBsaWNhdGUgbWlycm9yMi9jbG9uZS5lcnIgJiYKKwlncmVwIHNvbWUtdGFnIG1pcnJvcjIvY2xvbmUub3V0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gZGVzdGluYXRpb24gd2l0aCB0cmFpbGluZyAvJyAnCisKKwlnaXQgY2xvbmUgc3JjIHRhcmdldC0xLyAmJgorCVQ9JCggY2QgdGFyZ2V0LTEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEICkgJiYKKwlTPSQoIGNkIHNyYyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQgKSAmJgorCXRlc3QgIiRUIiA9ICIkUyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byBkZXN0aW5hdGlvbiB3aXRoIGV4dHJhIHRyYWlsaW5nIC8nICcKKworCWdpdCBjbG9uZSBzcmMgdGFyZ2V0LTIvLy8gJiYKKwlUPSQoIGNkIHRhcmdldC0yICYmIGdpdCByZXYtcGFyc2UgSEVBRCApICYmCisJUz0kKCBjZCBzcmMgJiYgZ2l0IHJldi1wYXJzZSBIRUFEICkgJiYKKwl0ZXN0ICIkVCIgPSAiJFMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gYW4gZXhpc3RpbmcgZW1wdHkgZGlyZWN0b3J5JyAnCisJbWtkaXIgdGFyZ2V0LTMgJiYKKwlnaXQgY2xvbmUgc3JjIHRhcmdldC0zICYmCisJVD0kKCBjZCB0YXJnZXQtMyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQgKSAmJgorCVM9JCggY2Qgc3JjICYmIGdpdCByZXYtcGFyc2UgSEVBRCApICYmCisJdGVzdCAiJFQiID0gIiRTIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB0byBhbiBleGlzdGluZyBub24tZW1wdHkgZGlyZWN0b3J5JyAnCisJbWtkaXIgdGFyZ2V0LTQgJiYKKwk+dGFyZ2V0LTQvRmFrZWZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgc3JjIHRhcmdldC00CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRvIGFuIGV4aXN0aW5nIHBhdGgnICcKKwk+dGFyZ2V0LTUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgc3JjIHRhcmdldC01CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGEgdm9pZCcgJworCW1rZGlyIHNyYy0wICYmCisJKAorCQljZCBzcmMtMCAmJiBnaXQgaW5pdAorCSkgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kKHB3ZCkvc3JjLTAiIHRhcmdldC02IDI+ZXJyLTYgJiYKKwkhIGdyZXAgImZhdGFsOiIgZXJyLTYgJiYKKwkoCisJCWNkIHNyYy0wICYmIHRlc3RfY29tbWl0IEEKKwkpICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpL3NyYy0wIiB0YXJnZXQtNyAyPmVyci03ICYmCisJISBncmVwICJmYXRhbDoiIGVyci03ICYmCisJIyBUaGVyZSBpcyBubyByZWFzb24gdG8gaW5zaXN0IHRoZXkgYXJlIGJpdC1mb3ItYml0CisJIyBpZGVudGljYWwsIGJ1dCB0aGlzIHRlc3Qgc2hvdWxkIHN1ZmZpY2UgZm9yIG5vdy4KKwl0ZXN0X2NtcCB0YXJnZXQtNi8uZ2l0L2NvbmZpZyB0YXJnZXQtNy8uZ2l0L2NvbmZpZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZXNwZWN0cyBnbG9iYWwgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZScgJworCSgKKwkJdGVzdF9jb25maWc9IiRIT01FLy5naXRjb25maWciICYmCisJCWdpdCBjb25maWcgLWYgIiR0ZXN0X2NvbmZpZyIgYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSByZW1vdGUgJiYKKwkJcm0gLWZyIGRzdCAmJgorCQlnaXQgY2xvbmUgc3JjIGRzdCAmJgorCQljZCBkc3QgJiYKKwkJYWN0dWFsPSJ6JChnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIucmViYXNlKSIgJiYKKwkJdGVzdCB6dHJ1ZSA9ICRhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3BlY3QgdXJsLWVuY29kaW5nIG9mIGZpbGU6Ly8nICcKKwlnaXQgaW5pdCB4K3kgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kUFdEL3greSIgeHktdXJsLTEgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kUFdEL3glMkJ5IiB4eS11cmwtMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgcXVlcnktc3RyaW5nLWRlY29kZSArIGluIFVSTHMnICcKKwlybSAtcmYgeCt5ICYmCisJZ2l0IGluaXQgInggeSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgImZpbGU6Ly8kUFdEL3greSIgeHktbm8tcGx1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgcmVzcGVjdCB1cmwtZW5jb2Rpbmcgb2Ygbm9uLXVybCBwYXRoJyAnCisJZ2l0IGluaXQgeCt5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIHglMkJ5IHh5LXJlZ3VsYXIgJiYKKwlnaXQgY2xvbmUgeCt5IHh5LXJlZ3VsYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2VwYXJhdGUgZ2l0ZGlyJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBjbG9uZSAtLXNlcGFyYXRlLWdpdC1kaXIgcmVhbGdpdGRpciBzcmMgZHN0ICYmCisJdGVzdCAtZCByZWFsZ2l0ZGlyL3JlZnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc2VwYXJhdGUgZ2l0ZGlyOiBvdXRwdXQnICcKKwllY2hvICJnaXRkaXI6IGBwd2RgL3JlYWxnaXRkaXIiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGRzdC8uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGZyb20gLmdpdCBmaWxlJyAnCisJZ2l0IGNsb25lIGRzdC8uZ2l0IGRzdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggZnJvbSAuZ2l0IGdpdGZpbGUnICcKKwkoCisJCWNkIGRzdDIgJiYKKwkJZ2l0IGZldGNoIC4uL2RzdC8uZ2l0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmcm9tIGdpdGZpbGUgcGFyZW50JyAnCisJKAorCQljZCBkc3QyICYmCisJCWdpdCBmZXRjaCAuLi9kc3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHNlcGFyYXRlIGdpdGRpciB3aGVyZSB0YXJnZXQgYWxyZWFkeSBleGlzdHMnICcKKwlybSAtcmYgZHN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lIC0tc2VwYXJhdGUtZ2l0LWRpciByZWFsZ2l0ZGlyIHNyYyBkc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1yZWZlcmVuY2UgZnJvbSBvcmlnaW5hbCcgJworCWdpdCBjbG9uZSAtLXNoYXJlZCAtLWJhcmUgc3JjIHNyYy0xICYmCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgc3JjLTIgJiYKKwlnaXQgY2xvbmUgLS1yZWZlcmVuY2U9c3JjLTIgLS1iYXJlIHNyYy0xIHRhcmdldC04ICYmCisJZ3JlcCAvc3JjLTIvIHRhcmdldC04L29iamVjdHMvaW5mby9hbHRlcm5hdGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggbW9yZSB0aGFuIG9uZSAtLXJlZmVyZW5jZScgJworCWdpdCBjbG9uZSAtLWJhcmUgc3JjIHNyYy0zICYmCisJZ2l0IGNsb25lIC0tYmFyZSBzcmMgc3JjLTQgJiYKKwlnaXQgY2xvbmUgLS1yZWZlcmVuY2U9c3JjLTMgLS1yZWZlcmVuY2U9c3JjLTQgc3JjIHRhcmdldC05ICYmCisJZ3JlcCAvc3JjLTMvIHRhcmdldC05Ly5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwlncmVwIC9zcmMtNC8gdGFyZ2V0LTkvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBmcm9tIG9yaWdpbmFsIHdpdGggcmVsYXRpdmUgYWx0ZXJuYXRlJyAnCisJbWtkaXIgbmVzdCAmJgorCWdpdCBjbG9uZSAtLWJhcmUgc3JjIG5lc3Qvc3JjLTUgJiYKKwllY2hvIC4uLy4uLy4uL3NyYy8uZ2l0L29iamVjdHMgPm5lc3Qvc3JjLTUvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIG5lc3Qvc3JjLTUgdGFyZ2V0LTEwICYmCisJZ3JlcCAvc3JjL1xcLmdpdC9vYmplY3RzIHRhcmdldC0xMC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjaGVja2luZyBvdXQgYSB0YWcnICcKKwlnaXQgY2xvbmUgLS1icmFuY2g9c29tZS10YWcgc3JjIGRzdC50YWcgJiYKKwlHSVRfRElSPXNyYy8uZ2l0IGdpdCByZXYtcGFyc2Ugc29tZS10YWcgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZHN0LnRhZy8uZ2l0L0hFQUQgJiYKKwlHSVRfRElSPWRzdC50YWcvLmdpdCBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2ggPmZldGNoLmFjdHVhbCAmJgorCWVjaG8gIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiA+ZmV0Y2guZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBmZXRjaC5leHBlY3RlZCBmZXRjaC5hY3R1YWwKKycKKworc2V0dXBfc3NoX3dyYXBwZXIgKCkgeworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNzaCB3cmFwcGVyJyAnCisJCXdyaXRlX3NjcmlwdCAiJFRSQVNIX0RJUkVDVE9SWS9zc2gtd3JhcHBlciIgPDwtXEVPRiAmJgorCQllY2hvID4+IiRUUkFTSF9ESVJFQ1RPUlkvc3NoLW91dHB1dCIgInNzaDogJCoiICYmCisJCSMgdGhyb3cgYXdheSBhbGwgYnV0IHRoZSBsYXN0IGFyZ3VtZW50LCB3aGljaCBzaG91bGQgYmUgdGhlCisJCSMgY29tbWFuZAorCQl3aGlsZSB0ZXN0ICQjIC1ndCAxOyBkbyBzaGlmdDsgZG9uZQorCQlldmFsICIkMSIKKwkJRU9GCisJCUdJVF9TU0g9IiRUUkFTSF9ESVJFQ1RPUlkvc3NoLXdyYXBwZXIiICYmCisJCWV4cG9ydCBHSVRfU1NIICYmCisJCWV4cG9ydCBUUkFTSF9ESVJFQ1RPUlkgJiYKKwkJPiIkVFJBU0hfRElSRUNUT1JZIi9zc2gtb3V0cHV0CisJJworfQorCitjb3B5X3NzaF93cmFwcGVyX2FzICgpIHsKKwljcCAiJFRSQVNIX0RJUkVDVE9SWS9zc2gtd3JhcHBlciIgIiQxIiAmJgorCUdJVF9TU0g9IiQxIiAmJgorCWV4cG9ydCBHSVRfU1NICit9CisKK2V4cGVjdF9zc2ggKCkgeworCXRlc3Rfd2hlbl9maW5pc2hlZCAnCisJCShjZCAiJFRSQVNIX0RJUkVDVE9SWSIgJiYgcm0gLWYgc3NoLWV4cGVjdCAmJiA+c3NoLW91dHB1dCkKKwknICYmCisJeworCQljYXNlICIkIyIgaW4KKwkJMSkKKwkJCTs7CisJCTIpCisJCQllY2hvICJzc2g6ICQxIGdpdC11cGxvYWQtcGFjayAnJDInIgorCQkJOzsKKwkJMykKKwkJCWVjaG8gInNzaDogJDEgJDIgZ2l0LXVwbG9hZC1wYWNrICckMyciCisJCQk7OworCQkqKQorCQkJZWNobyAic3NoOiAkMSAkMiBnaXQtdXBsb2FkLXBhY2sgJyQzJyAkNCIKKwkJZXNhYworCX0gPiIkVFJBU0hfRElSRUNUT1JZL3NzaC1leHBlY3QiICYmCisJKGNkICIkVFJBU0hfRElSRUNUT1JZIiAmJiB0ZXN0X2NtcCBzc2gtZXhwZWN0IHNzaC1vdXRwdXQpCit9CisKK3NldHVwX3NzaF93cmFwcGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIG15aG9zdDpzcmMgdXNlcyBzc2gnICcKKwlnaXQgY2xvbmUgbXlob3N0OnNyYyBzc2gtY2xvbmUgJiYKKwlleHBlY3Rfc3NoIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1csIUNZR1dJTiAnY2xvbmUgbG9jYWwgcGF0aCBmb286YmFyJyAnCisJY3AgLVIgc3JjICJmb286YmFyIiAmJgorCWdpdCBjbG9uZSAiZm9vOmJhciIgZm9vYmFyICYmCisJZXhwZWN0X3NzaCBub25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYWNrZXRlZCBob3N0bmFtZXMgYXJlIHN0aWxsIHNzaCcgJworCWdpdCBjbG9uZSAiW215aG9zdDoxMjNdOnNyYyIgc3NoLWJyYWNrZXQtY2xvbmUgJiYKKwlleHBlY3Rfc3NoICItcCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBsaW5rIGlzIG5vdCB0cmVhdGVkIGFzIHB1dHR5JyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS91cGxpbmsiICYmCisJZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS11cGxpbmsgJiYKKwlleHBlY3Rfc3NoICItcCAxMjMiIG15aG9zdCBzcmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxpbmsgaXMgdHJlYXRlZCBzcGVjaWFsbHkgKGFzIHB1dHR5KScgJworCWNvcHlfc3NoX3dyYXBwZXJfYXMgIiRUUkFTSF9ESVJFQ1RPUlkvcGxpbmsiICYmCisJZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS1wbGluay0wICYmCisJZXhwZWN0X3NzaCAiLVAgMTIzIiBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BsaW5rLmV4ZSBpcyB0cmVhdGVkIHNwZWNpYWxseSAoYXMgcHV0dHkpJyAnCisJY29weV9zc2hfd3JhcHBlcl9hcyAiJFRSQVNIX0RJUkVDVE9SWS9wbGluay5leGUiICYmCisJZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS1wbGluay0xICYmCisJZXhwZWN0X3NzaCAiLVAgMTIzIiBteWhvc3Qgc3JjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RvcnRvaXNlcGxpbmsgaXMgbGlrZSBwdXR0eSwgd2l0aCBleHRyYSBhcmd1bWVudHMnICcKKwljb3B5X3NzaF93cmFwcGVyX2FzICIkVFJBU0hfRElSRUNUT1JZL3RvcnRvaXNlcGxpbmsiICYmCisJZ2l0IGNsb25lICJbbXlob3N0OjEyM106c3JjIiBzc2gtYnJhY2tldC1jbG9uZS1wbGluay0yICYmCisJZXhwZWN0X3NzaCAiLWJhdGNoIC1QIDEyMyIgbXlob3N0IHNyYworJworCisjIFJlc2V0IHRoZSBHSVRfU1NIIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciBjbG9uZSB0ZXN0cy4KK3NldHVwX3NzaF93cmFwcGVyCisKK2NvdW50ZXI9MAorIyAkMSB1cmwKKyMgJDIgbm9uZXxob3N0CisjICQzIHBhdGgKK3Rlc3RfY2xvbmVfdXJsICgpIHsKKwljb3VudGVyPSQoKCRjb3VudGVyICsgMSkpCisJdGVzdF9taWdodF9mYWlsIGdpdCBjbG9uZSAiJDEiIHRtcCRjb3VudGVyICYmCisJc2hpZnQgJiYKKwlleHBlY3Rfc3NoICIkQCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ2Nsb25lIGM6dGVtcCBpcyBzc2wnICcKKwl0ZXN0X2Nsb25lX3VybCBjOnRlbXAgYyB0ZW1wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTUlOR1cgJ2Nsb25lIGM6dGVtcCBpcyBkb3MgZHJpdmUnICcKKwl0ZXN0X2Nsb25lX3VybCBjOnRlbXAgbm9uZQorJworCisjaXAgdjQKK2ZvciByZXBvIGluIHJlcCByZXAvaG9tZS9wcm9qZWN0IDEyMworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBob3N0OiRyZXBvIiAnCisJCXRlc3RfY2xvbmVfdXJsIGhvc3Q6JHJlcG8gaG9zdCAkcmVwbworCScKK2RvbmUKKworI2lwdjYKK2ZvciByZXBvIGluIHJlcCByZXAvaG9tZS9wcm9qZWN0IDEyMworZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBbOjoxXTokcmVwbyIgJworCQl0ZXN0X2Nsb25lX3VybCBbOjoxXTokcmVwbyA6OjEgIiRyZXBvIgorCScKK2RvbmUKKyNob21lIGRpcmVjdG9yeQordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgaG9zdDovfnJlcG8iICcKKwl0ZXN0X2Nsb25lX3VybCBob3N0Oi9+cmVwbyBob3N0ICJ+cmVwbyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgWzo6MV06L35yZXBvIiAnCisJdGVzdF9jbG9uZV91cmwgWzo6MV06L35yZXBvIDo6MSAifnJlcG8iCisnCisKKyMgQ29ybmVyIGNhc2VzCitmb3IgdXJsIGluIGZvby9iYXI6YmF6IFtmb29dYmFyL2JhejpxdXggW2Zvby9iYXJdOmJhegorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSAkdXJsIGlzIG5vdCBzc2giICcKKwkJdGVzdF9jbG9uZV91cmwgJHVybCBub25lCisJJworZG9uZQorCisjd2l0aCBzc2g6Ly8gc2NoZW1lCisjaWdub3JlIHRyYWlsaW5nIGNvbG9uCitmb3IgdGNvbCBpbiAiIiA6CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImNsb25lIHNzaDovL2hvc3QueHokdGNvbC9ob21lL3VzZXIvcmVwbyIgJworCQl0ZXN0X2Nsb25lX3VybCAic3NoOi8vaG9zdC54eiR0Y29sL2hvbWUvdXNlci9yZXBvIiBob3N0Lnh6IC9ob21lL3VzZXIvcmVwbworCScKKwkjIGZyb20gaG9tZSBkaXJlY3RvcnkKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzc2g6Ly9ob3N0Lnh6JHRjb2wvfnJlcG8iICcKKwl0ZXN0X2Nsb25lX3VybCAic3NoOi8vaG9zdC54eiR0Y29sL35yZXBvIiBob3N0Lnh6ICJ+cmVwbyIKKycKK2RvbmUKKworIyB3aXRoIHBvcnQgbnVtYmVyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzc2g6Ly9ob3N0Lnh6OjIyL2hvbWUvdXNlci9yZXBvJyAnCisJdGVzdF9jbG9uZV91cmwgInNzaDovL2hvc3QueHo6MjIvaG9tZS91c2VyL3JlcG8iICItcCAyMiBob3N0Lnh6IiAiL2hvbWUvdXNlci9yZXBvIgorJworCisjIGZyb20gaG9tZSBkaXJlY3Rvcnkgd2l0aCBwb3J0IG51bWJlcgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgc3NoOi8vaG9zdC54ejoyMi9+cmVwbycgJworCXRlc3RfY2xvbmVfdXJsICJzc2g6Ly9ob3N0Lnh6OjIyL35yZXBvIiAiLXAgMjIgaG9zdC54eiIgIn5yZXBvIgorJworCisjSVB2NgorZm9yIHR1YWggaW4gOjoxIFs6OjFdIFs6OjFdOiB1c2VyQDo6MSB1c2VyQFs6OjFdIHVzZXJAWzo6MV06IFt1c2VyQDo6MV0gW3VzZXJAOjoxXToKK2RvCisJZWhvc3Q9JChlY2hvICR0dWFoIHwgc2VkIC1lICJzLzFdOi8xXS8gInwgdHIgLWQgIltdIikKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJjbG9uZSBzc2g6Ly8kdHVhaC9ob21lL3VzZXIvcmVwbyIgIgorCSAgdGVzdF9jbG9uZV91cmwgc3NoOi8vJHR1YWgvaG9tZS91c2VyL3JlcG8gJGVob3N0IC9ob21lL3VzZXIvcmVwbworCSIKK2RvbmUKKworI0lQdjYgZnJvbSBob21lIGRpcmVjdG9yeQorZm9yIHR1YWggaW4gOjoxIFs6OjFdIHVzZXJAOjoxIHVzZXJAWzo6MV0gW3VzZXJAOjoxXQorZG8KKwlldWFoPSQoZWNobyAkdHVhaCB8IHRyIC1kICJbXSIpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc3NoOi8vJHR1YWgvfnJlcG8iICIKKwkgIHRlc3RfY2xvbmVfdXJsIHNzaDovLyR0dWFoL35yZXBvICRldWFoICd+cmVwbycKKwkiCitkb25lCisKKyNJUHY2IHdpdGggcG9ydCBudW1iZXIKK2ZvciB0dWFoIGluIFs6OjFdIHVzZXJAWzo6MV0gW3VzZXJAOjoxXQorZG8KKwlldWFoPSQoZWNobyAkdHVhaCB8IHRyIC1kICJbXSIpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc3NoOi8vJHR1YWg6MjIvaG9tZS91c2VyL3JlcG8iICIKKwkgIHRlc3RfY2xvbmVfdXJsIHNzaDovLyR0dWFoOjIyL2hvbWUvdXNlci9yZXBvICctcCAyMicgJGV1YWggL2hvbWUvdXNlci9yZXBvCisJIgorZG9uZQorCisjSVB2NiBmcm9tIGhvbWUgZGlyZWN0b3J5IHdpdGggcG9ydCBudW1iZXIKK2ZvciB0dWFoIGluIFs6OjFdIHVzZXJAWzo6MV0gW3VzZXJAOjoxXQorZG8KKwlldWFoPSQoZWNobyAkdHVhaCB8IHRyIC1kICJbXSIpCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2xvbmUgc3NoOi8vJHR1YWg6MjIvfnJlcG8iICIKKwkgIHRlc3RfY2xvbmVfdXJsIHNzaDovLyR0dWFoOjIyL35yZXBvICctcCAyMicgJGV1YWggJ35yZXBvJworCSIKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZnJvbSBhIHJlcG9zaXRvcnkgd2l0aCB0d28gaWRlbnRpY2FsIGJyYW5jaGVzJyAnCisKKwkoCisJCWNkIHNyYyAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYW5vdGhlciBtYXN0ZXIKKwkpICYmCisJZ2l0IGNsb25lIHNyYyB0YXJnZXQtMTEgJiYKKwl0ZXN0ICJ6JCggY2QgdGFyZ2V0LTExICYmIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCApIiA9IHpyZWZzL2hlYWRzL2Fub3RoZXIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGFsbG93IGNsb25lIGxvY2FsbHknICcKKwlnaXQgY2xvbmUgLS1kZXB0aD0xIC0tbm8tbG9jYWwgc3JjIHNzcnJjYyAmJgorCWdpdCBjbG9uZSBzc3JyY2MgZGRzc3R0ICYmCisJdGVzdF9jbXAgc3NycmNjLy5naXQvc2hhbGxvdyBkZHNzdHQvLmdpdC9zaGFsbG93ICYmCisJKCBjZCBkZHNzdHQgJiYgZ2l0IGZzY2sgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHSVRfVFJBQ0VfUEFDS0ZJTEUgcHJvZHVjZXMgYSB1c2FibGUgcGFjaycgJworCXJtIC1yZiBkc3QuZ2l0ICYmCisJR0lUX1RSQUNFX1BBQ0tGSUxFPSRQV0QvdG1wLnBhY2sgZ2l0IGNsb25lIC0tbm8tbG9jYWwgLS1iYXJlIHNyYyBkc3QuZ2l0ICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlcGxheS5naXQgJiYKKwlnaXQgLUMgcmVwbGF5LmdpdCBpbmRleC1wYWNrIC12IC0tc3RkaW4gPHRtcC5wYWNrCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTYwMi1jbG9uZS1yZW1vdGUtZXhlYy5zaCBiL3QvdDU2MDItY2xvbmUtcmVtb3RlLWV4ZWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2JjY2VhYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MDItY2xvbmUtcmVtb3RlLWV4ZWMuc2gKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Y2xvbmUKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gIiMhL2Jpbi9zaCIgPiBub3Rfc3NoICYmCisJZWNobyAiZWNobyBcIlwkKlwiID4gbm90X3NzaF9vdXRwdXQiID4+IG5vdF9zc2ggJiYKKwllY2hvICJleGl0IDEiID4+IG5vdF9zc2ggJiYKKwljaG1vZCAreCBub3Rfc3NoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNhbGxzIGdpdCB1cGxvYWQtcGFjayB1bnF1YWxpZmllZCB3aXRoIG5vIC11IG9wdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfU1NIPS4vbm90X3NzaCBnaXQgY2xvbmUgbG9jYWxob3N0Oi9wYXRoL3RvL3JlcG8ganVuayAmJgorCWVjaG8gImxvY2FsaG9zdCBnaXQtdXBsb2FkLXBhY2sgJ1wnJy9wYXRoL3RvL3JlcG8nXCcnIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBub3Rfc3NoX291dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBjYWxscyBzcGVjaWZpZWQgZ2l0IHVwbG9hZC1wYWNrIHdpdGggLXUgb3B0aW9uJyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9TU0g9Li9ub3Rfc3NoIFwKKwkJZ2l0IGNsb25lIC11IC4vc29tZXRoaW5nL2Jpbi9naXQtdXBsb2FkLXBhY2sgbG9jYWxob3N0Oi9wYXRoL3RvL3JlcG8ganVuayAmJgorCWVjaG8gImxvY2FsaG9zdCAuL3NvbWV0aGluZy9iaW4vZ2l0LXVwbG9hZC1wYWNrICdcJycvcGF0aC90by9yZXBvJ1wnJyIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgbm90X3NzaF9vdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NjAzLWNsb25lLWRpcm5hbWUuc2ggYi90L3Q1NjAzLWNsb25lLWRpcm5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDVhZjc1OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU2MDMtY2xvbmUtZGlybmFtZS5zaApAQCAtMCwwICsxLDEwNiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NoZWNrIG91dHB1dCBkaXJlY3RvcnkgbmFtZXMgdXNlZCBieSBnaXQtY2xvbmUnCisuIC4vdGVzdC1saWIuc2gKKworIyB3ZSB1c2UgYSBmYWtlIHNzaCB3cmFwcGVyIHRoYXQgaWdub3JlcyB0aGUgYXJndW1lbnRzCisjIGVudGlyZWx5OyB3ZSByZWFsbHkgb25seSBjYXJlIHRoYXQgd2UgZ2V0IF9zb21lXyByZXBvLAorIyBhcyB0aGUgcmVhbCB0ZXN0IGlzIHdoYXQgY2xvbmUgZG9lcyBvbiB0aGUgbG9jYWwgc2lkZQordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3NoIHdyYXBwZXInICcKKwl3cml0ZV9zY3JpcHQgIiRUUkFTSF9ESVJFQ1RPUlkvc3NoLXdyYXBwZXIiIDw8LVxFT0YgJiYKKwlnaXQgdXBsb2FkLXBhY2sgIiRUUkFTSF9ESVJFQ1RPUlkiCisJRU9GCisJR0lUX1NTSD0iJFRSQVNIX0RJUkVDVE9SWS9zc2gtd3JhcHBlciIgJiYKKwlleHBvcnQgR0lUX1NTSCAmJgorCWV4cG9ydCBUUkFTSF9ESVJFQ1RPUlkKKycKKworIyBtYWtlIHN1cmUgdGhhdCBjbG9uaW5nICQxIHJlc3VsdHMgaW4gbG9jYWwgZGlyZWN0b3J5ICQyCit0ZXN0X2Nsb25lX2RpciAoKSB7CisJdXJsPSQxOyBzaGlmdAorCWRpcj0kMTsgc2hpZnQKKwlleHBlY3Q9c3VjY2VzcworCWJhcmU9bm9uLWJhcmUKKwljbG9uZV9vcHRzPQorCWZvciBpIGluICIkQCIKKwlkbworCQljYXNlICIkaSIgaW4KKwkJZmFpbCkKKwkJCWV4cGVjdD1mYWlsdXJlCisJCQk7OworCQliYXJlKQorCQkJYmFyZT1iYXJlCisJCQljbG9uZV9vcHRzPS0tYmFyZQorCQkJOzsKKwkJZXNhYworCWRvbmUKKwl0ZXN0X2V4cGVjdF8kZXhwZWN0ICJjbG9uZSBvZiAkdXJsIGdvZXMgdG8gJGRpciAoJGJhcmUpIiAiCisJCXJtIC1yZiAkZGlyICYmCisJCWdpdCBjbG9uZSAkY2xvbmVfb3B0cyAkdXJsICYmCisJCXRlc3RfcGF0aF9pc19kaXIgJGRpcgorCSIKK30KKworIyBiYXNpYyBzeW50YXggd2l0aCBiYXJlIGFuZCBub24tYmFyZSB2YXJpYW50cwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28gZm9vCit0ZXN0X2Nsb25lX2RpciBob3N0OmZvbyBmb28uZ2l0IGJhcmUKK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLmdpdCBmb28KK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLmdpdCBmb28uZ2l0IGJhcmUKK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLy5naXQgZm9vCit0ZXN0X2Nsb25lX2RpciBob3N0OmZvby8uZ2l0IGZvby5naXQgYmFyZQorCisjIHNpbWlsYXIsIGJ1dCB1c2luZyBzc2ggVVJMIHJhdGhlciB0aGFuIGhvc3Q6cGF0aCBzeW50YXgKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vIGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28gZm9vLmdpdCBiYXJlCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby5naXQgZm9vCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby5naXQgZm9vLmdpdCBiYXJlCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby8uZ2l0IGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28vLmdpdCBmb28uZ2l0IGJhcmUKKworIyB3ZSBzaG91bGQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMgYW5kIC5naXQgc3VmZml4ZXMKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vLyBmb28KK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vLy8vIGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28vLmdpdC8gZm9vCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0L2Zvby5naXQvIGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28uZ2l0Ly8vIGZvbwordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb28vLy8uZ2l0LyBmb28KK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vLy5naXQvLy8gZm9vCisKK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLyBmb28KK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLy8vIGZvbwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28uZ2l0LyBmb28KK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLy5naXQvIGZvbwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28uZ2l0Ly8vIGZvbwordGVzdF9jbG9uZV9kaXIgaG9zdDpmb28vLy8uZ2l0LyBmb28KK3Rlc3RfY2xvbmVfZGlyIGhvc3Q6Zm9vLy5naXQvLy8gZm9vCisKKyMgb21pdHRpbmcgdGhlIHBhdGggc2hvdWxkIGRlZmF1bHQgdG8gdGhlIGhvc3RuYW1lCit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0LyBob3N0Cit0ZXN0X2Nsb25lX2RpciBzc2g6Ly9ob3N0OjEyMzQvIGhvc3QKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL3VzZXJAaG9zdC8gaG9zdAordGVzdF9jbG9uZV9kaXIgaG9zdDovIGhvc3QKKworIyBhdXRoIG1hdGVyaWFscyBzaG91bGQgYmUgcmVkYWN0ZWQKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL3VzZXI6cGFzc3dvcmRAaG9zdC8gaG9zdAordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlcjpwYXNzd29yZEBob3N0OjEyMzQvIGhvc3QKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL3VzZXI6cGFzc3dAcmRAaG9zdDoxMjM0LyBob3N0Cit0ZXN0X2Nsb25lX2RpciB1c2VyQGhvc3Q6LyBob3N0Cit0ZXN0X2Nsb25lX2RpciB1c2VyOnBhc3N3b3JkQGhvc3Q6LyBob3N0Cit0ZXN0X2Nsb25lX2RpciB1c2VyOnBhc3N3QHJkQGhvc3Q6LyBob3N0CisKKyMgYXV0aC1saWtlIG1hdGVyaWFsIHNob3VsZCBub3QgYmUgZHJvcHBlZAordGVzdF9jbG9uZV9kaXIgc3NoOi8vaG9zdC9mb29AYmFyIGZvb0BiYXIKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL2hvc3QvZm9vQGJhci5naXQgZm9vQGJhcgordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlcjpwYXNzd29yZEBob3N0L2Zvb0BiYXIgZm9vQGJhcgordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlcjpwYXNzd0ByZEBob3N0L2Zvb0BiYXIuZ2l0IGZvb0BiYXIKKwordGVzdF9jbG9uZV9kaXIgaG9zdDovZm9vQGJhciBmb29AYmFyCit0ZXN0X2Nsb25lX2RpciBob3N0Oi9mb29AYmFyLmdpdCBmb29AYmFyCit0ZXN0X2Nsb25lX2RpciB1c2VyOnBhc3N3b3JkQGhvc3Q6L2Zvb0BiYXIgZm9vQGJhcgordGVzdF9jbG9uZV9kaXIgdXNlcjpwYXNzd0ByZEBob3N0Oi9mb29AYmFyLmdpdCBmb29AYmFyCisKKyMgdHJhaWxpbmcgcG9ydC1saWtlIG51bWJlcnMgc2hvdWxkIG5vdCBiZSBzdHJpcHBlZCBmb3IgcGF0aHMKK3Rlc3RfY2xvbmVfZGlyIHNzaDovL3VzZXI6cGFzc3dvcmRAaG9zdC90ZXN0OjEyMzQgMTIzNAordGVzdF9jbG9uZV9kaXIgc3NoOi8vdXNlcjpwYXNzd29yZEBob3N0L3Rlc3Q6MTIzNC5naXQgMTIzNAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU3MDAtY2xvbmUtcmVmZXJlbmNlLnNoIGIvdC90NTcwMC1jbG9uZS1yZWZlcmVuY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjI1MGVmNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU3MDAtY2xvbmUtcmVmZXJlbmNlLnNoCkBAIC0wLDAgKzEsMjEzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA2IE1hcnRpbiBXYWl0eiA8dGFsaUBhZG1pbmdpbGRlLm9yZz4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjbG9uZSAtLXJlZmVyZW5jZScKKy4gLi90ZXN0LWxpYi5zaAorCitiYXNlX2Rpcj1gcHdkYAorCitVPSRiYXNlX2Rpci9VUExPQURfTE9HCisKKyMgY3JlYXRlIGEgY29tbWl0IGluIHJlcG8gJDEgd2l0aCBuYW1lICQyCitjb21taXRfaW4gKCkgeworCSgKKwkJY2QgIiQxIiAmJgorCQllY2hvICIkMiIgPiIkMiIgJiYKKwkJZ2l0IGFkZCAiJDIiICYmCisJCWdpdCBjb21taXQgLW0gIiQyIgorCSkKK30KKworIyBjaGVjayB0aGF0IHRoZXJlIGFyZSAkMiBsb29zZSBvYmplY3RzIGluIHJlcG8gJDEKK3Rlc3Rfb2JqY291bnQgKCkgeworCWVjaG8gIiQyIiA+ZXhwZWN0ICYmCisJZ2l0IC1DICIkMSIgY291bnQtb2JqZWN0cyA+YWN0dWFsLnJhdyAmJgorCWN1dCAtZCcgJyAtZjEgPGFjdHVhbC5yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyaW5nIGZpcnN0IHJlcG9zaXRvcnknICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIEEgJiYKKwljb21taXRfaW4gQSBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc2Vjb25kIHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgQSBCICYmCisJY29tbWl0X2luIEIgZmlsZTIgJiYKKwlnaXQgLUMgQiByZXBhY2sgLWFkICYmCisJZ2l0IC1DIEIgcHJ1bmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyB3aXRoIHJlZmVyZW5jZSAoLWwgLXMpJyAnCisJZ2l0IGNsb25lIC1sIC1zIC0tcmVmZXJlbmNlIEIgQSBDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4aXN0ZW5jZSBvZiBpbmZvL2FsdGVybmF0ZXMnICcKKwl0ZXN0X2xpbmVfY291bnQgPSAyIEMvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGZyb20gcmVmZXJlbmNlJyAnCisJZ2l0IC1DIEMgcHVsbCAuLi9CIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGF0IHJlZmVyZW5jZSBnZXRzIHVzZWQnICcKKwl0ZXN0X29iamNvdW50IEMgMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggcmVmZXJlbmNlIChubyAtbCAtcyknICcKKwlHSVRfVFJBQ0VfUEFDS0VUPSRVLkQgZ2l0IGNsb25lIC0tcmVmZXJlbmNlIEIgImZpbGU6Ly8kKHB3ZCkvQSIgRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaGVkIG5vIG9iamVjdHMnICcKKwl0ZXN0IC1zICIkVS5EIiAmJgorCSEgZ3JlcCAiIHdhbnQiICIkVS5EIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGlzdGVuY2Ugb2YgaW5mby9hbHRlcm5hdGVzJyAnCisJdGVzdF9saW5lX2NvdW50ID0gMSBELy5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBmcm9tIHJlZmVyZW5jZScgJworCWdpdCAtQyBEIHB1bGwgLi4vQiBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhhdCByZWZlcmVuY2UgZ2V0cyB1c2VkJyAnCisJdGVzdF9vYmpjb3VudCBEIDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcgb3JpZ2luJyAnCisJY29tbWl0X2luIEEgZmlsZTMgJiYKKwlnaXQgLUMgQSByZXBhY2sgLWFkICYmCisJZ2l0IC1DIEEgcHJ1bmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbGluZyBjaGFuZ2VzIGZyb20gb3JpZ2luJyAnCisJZ2l0IC1DIEMgcHVsbCBvcmlnaW4KKycKKworIyB0aGUgMiBsb2NhbCBvYmplY3RzIGFyZSBjb21taXQgYW5kIHRyZWUgZnJvbSB0aGUgbWVyZ2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgYWx0ZXJuYXRlIHRvIG9yaWdpbiBnZXRzIHVzZWQnICcKKwl0ZXN0X29iamNvdW50IEMgMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGNoYW5nZXMgZnJvbSBvcmlnaW4nICcKKwlnaXQgLUMgRCBwdWxsIG9yaWdpbgorJworCisjIHRoZSA1IGxvY2FsIG9iamVjdHMgYXJlIGV4cGVjdGVkOyBmaWxlMyBibG9iLCBjb21taXQgaW4gQSB0byBhZGQgaXQKKyMgYW5kIGl0cyB0cmVlLCBhbmQgMiBhcmUgb3VyIHRyZWUgYW5kIHRoZSBtZXJnZSBjb21taXQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBvYmplY3RzIGV4cGVjdGVkIHRvIGV4aXN0IGxvY2FsbHknICcKKwl0ZXN0X29iamNvdW50IEQgNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgYWx0ZXJuYXRlIHJlcG9zaXRvcnkgIzEnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIEYgJiYKKwljb21taXRfaW4gRiBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIGFsdGVybmF0ZSByZXBvICMyIGFuZCBhZGRpbmcgY2hhbmdlcyB0byByZXBvICMxJyAnCisJZ2l0IGNsb25lIEYgRyAmJgorCWNvbW1pdF9pbiBGIGZpbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgYWx0ZXJuYXRlIHJlcG8gIzEsIHVzaW5nICMyIGFzIHJlZmVyZW5jZScgJworCWdpdCBjbG9uZSAtLXJlZmVyZW5jZSBHIEYgSAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggcmVmZXJlbmNlIGJlaW5nIHN1YnNldCBvZiBzb3VyY2UgKC1sIC1zKScgJworCWdpdCBjbG9uZSAtbCAtcyAtLXJlZmVyZW5jZSBBIEIgRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGggbXVsdGlwbGUgcmVmZXJlbmNlcyBkcm9wcyBkdXBsaWNhdGVzJyAnCisJZ2l0IGNsb25lIC1zIC0tcmVmZXJlbmNlIEIgLS1yZWZlcmVuY2UgQSAtLXJlZmVyZW5jZSBCIEEgZHVwcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDIgZHVwcy8uZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggcmVmZXJlbmNlIGZyb20gYSB0YWdnZWQgcmVwb3NpdG9yeScgJworCSgKKwkJY2QgQSAmJiBnaXQgdGFnIC1hIC1tIHRhZ2dlZCBIRUFECisJKSAmJgorCWdpdCBjbG9uZSAtLXJlZmVyZW5jZT1BIEEgSQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGJyYW5jaGVkIHJlcG9zaXRvcnknICcKKwlnaXQgY2xvbmUgQSBKICYmCisJKAorCQljZCBKICYmCisJCWdpdCBjaGVja291dCAtYiBvdGhlciBtYXN0ZXJeICYmCisJCWVjaG8gb3RoZXIgPm90aGVyZmlsZSAmJgorCQlnaXQgYWRkIG90aGVyZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIG90aGVyICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHdpdGggaW5jb21wbGV0ZSBhbHRlcm5hdGVzJyAnCisJZ2l0IGluaXQgSyAmJgorCWVjaG8gIiRiYXNlX2Rpci9BLy5naXQvb2JqZWN0cyIgPksvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCSgKKwkJY2QgSyAmJgorCQlnaXQgcmVtb3RlIGFkZCBKICJmaWxlOi8vJGJhc2VfZGlyL0oiICYmCisJCUdJVF9UUkFDRV9QQUNLRVQ9JFUuSyBnaXQgZmV0Y2ggSgorCSkgJiYKKwltYXN0ZXJfb2JqZWN0PSQoY2QgQSAmJiBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWUpIiByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0IC1zICIkVS5LIiAmJgorCSEgZ3JlcCAiIHdhbnQgJG1hc3Rlcl9vYmplY3QiICIkVS5LIiAmJgorCXRhZ19vYmplY3Q9JChjZCBBICYmIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUob2JqZWN0bmFtZSkiIHJlZnMvdGFncy9IRUFEKSAmJgorCSEgZ3JlcCAiIHdhbnQgJHRhZ19vYmplY3QiICIkVS5LIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB1c2luZyByZXBvIHdpdGggZ2l0ZmlsZSBhcyBhIHJlZmVyZW5jZScgJworCWdpdCBjbG9uZSAtLXNlcGFyYXRlLWdpdC1kaXI9TCBBIE0gJiYKKwlnaXQgY2xvbmUgLS1yZWZlcmVuY2U9TSBBIE4gJiYKKwllY2hvICIkYmFzZV9kaXIvTC9vYmplY3RzIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGJhc2VfZGlyL04vLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgcmVwbyBwb2ludGVkIGF0IGJ5IGdpdGZpbGUgYXMgcmVmZXJlbmNlJyAnCisJZ2l0IGNsb25lIC0tcmVmZXJlbmNlPU0vLmdpdCBBIE8gJiYKKwllY2hvICIkYmFzZV9kaXIvTC9vYmplY3RzIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGJhc2VfZGlyL08vLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYW5kIGRpc3NvY2lhdGUgZnJvbSByZWZlcmVuY2UnICcKKwlnaXQgaW5pdCBQICYmCisJKAorCQljZCBQICYmCXRlc3RfY29tbWl0IG9uZQorCSkgJiYKKwlnaXQgY2xvbmUgUCBRICYmCisJKAorCQljZCBRICYmIHRlc3RfY29tbWl0IHR3bworCSkgJiYKKwlnaXQgY2xvbmUgLS1uby1sb2NhbCAtLXJlZmVyZW5jZT1QIFEgUiAmJgorCWdpdCBjbG9uZSAtLW5vLWxvY2FsIC0tcmVmZXJlbmNlPVAgLS1kaXNzb2NpYXRlIFEgUyAmJgorCSMgcmVtb3ZpbmcgdGhlIHJlZmVyZW5jZSBQIHdvdWxkIGNvcnJ1cHQgUiBidXQgbm90IFMKKwlybSAtZnIgUCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBSIGZzY2sgJiYKKwlnaXQgLUMgUyBmc2NrCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSwgZGlzc29jaWF0ZSBmcm9tIHBhcnRpYWwgcmVmZXJlbmNlIGFuZCByZXBhY2snICcKKwlybSAtZnIgUCBRIFIgJiYKKwlnaXQgaW5pdCBQICYmCisJKAorCQljZCBQICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgcmVwYWNrICYmCisJCXRlc3RfY29tbWl0IHR3byAmJgorCQlnaXQgcmVwYWNrCisJKSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgUCBRICYmCisJKAorCQljZCBQICYmCisJCWdpdCBjaGVja291dCAtYiBzZWNvbmQgJiYKKwkJdGVzdF9jb21taXQgdGhyZWUgJiYKKwkJZ2l0IHJlcGFjaworCSkgJiYKKwlnaXQgY2xvbmUgLS1iYXJlIC0tZGlzc29jaWF0ZSAtLXJlZmVyZW5jZT1QIFEgUiAmJgorCWxzIFIvb2JqZWN0cy9wYWNrLyoucGFjayA+cGFja3MudHh0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBwYWNrcy50eHQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1NzAxLWNsb25lLWxvY2FsLnNoIGIvdC90NTcwMS1jbG9uZS1sb2NhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYzA4N2U5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwMS1jbG9uZS1sb2NhbC5zaApAQCAtMCwwICsxLDE0MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgbG9jYWwgY2xvbmUnCisuIC4vdGVzdC1saWIuc2gKKworcmVwb19pc19oYXJkbGlua2VkKCkgeworCWZpbmQgIiQxL29iamVjdHMiIC10eXBlIGYgLWxpbmtzIDEgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDAgb3V0cHV0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBvcmlnaW4gcmVwb3NpdG9yeScgJworCTogPmZpbGUgJiYgZ2l0IGFkZCAuICYmIGdpdCBjb21taXQgLW0xICYmCisJZ2l0IGNsb25lIC0tYmFyZSAuIGEuZ2l0ICYmCisJZ2l0IGNsb25lIC0tYmFyZSAuIHggJiYKKwl0ZXN0ICIkKGNkIGEuZ2l0ICYmIGdpdCBjb25maWcgLS1ib29sIGNvcmUuYmFyZSkiID0gdHJ1ZSAmJgorCXRlc3QgIiQoY2QgeCAmJiBnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmJhcmUpIiA9IHRydWUgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSBiMS5idW5kbGUgLS1hbGwgJiYKKwlnaXQgYnVuZGxlIGNyZWF0ZSBiMi5idW5kbGUgbWFzdGVyICYmCisJbWtkaXIgZGlyICYmCisJY3AgYjEuYnVuZGxlIGRpci9iMyAmJgorCWNwIGIxLmJ1bmRsZSBiNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBjbG9uZSB3aXRob3V0IC5naXQgc3VmZml4JyAnCisJZ2l0IGNsb25lIC1sIC1zIGEgYiAmJgorCShjZCBiICYmCisJdGVzdCAiJChnaXQgY29uZmlnIC0tYm9vbCBjb3JlLmJhcmUpIiA9IGZhbHNlICYmCisJZ2l0IGZldGNoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBjbG9uZSB3aXRoIC5naXQgc3VmZml4JyAnCisJZ2l0IGNsb25lIC1sIC1zIGEuZ2l0IGMgJiYKKwkoY2QgYyAmJiBnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGNsb25lIGZyb20geCcgJworCWdpdCBjbG9uZSAtbCAtcyB4IHkgJiYKKwkoY2QgeSAmJiBnaXQgZmV0Y2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGNsb25lIGZyb20geC5naXQgdGhhdCBkb2VzIG5vdCBleGlzdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtbCAtcyB4LmdpdCB6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1dpdGggLW5vLWhhcmRsaW5rcywgbG9jYWwgd2lsbCBtYWtlIGEgY29weScgJworCWdpdCBjbG9uZSAtLWJhcmUgLS1uby1oYXJkbGlua3MgeCB3ICYmCisJISByZXBvX2lzX2hhcmRsaW5rZWQgdworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFdmVuIHdpdGhvdXQgLWwsIGxvY2FsIHdpbGwgbWFrZSBhIGhhcmRsaW5rJyAnCisJcm0gLWZyIHcgJiYKKwlnaXQgY2xvbmUgLWwgLS1iYXJlIHggdyAmJgorCXJlcG9faXNfaGFyZGxpbmtlZCB3CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGNsb25lIG9mIHJlcG8gd2l0aCBub25leGlzdGVudCByZWYgaW4gSEVBRCcgJworCWVjaG8gInJlZjogcmVmcy9oZWFkcy9ub25leGlzdGVudCIgPiBhLmdpdC9IRUFEICYmCisJZ2l0IGNsb25lIGEgZCAmJgorCShjZCBkICYmCisJZ2l0IGZldGNoICYmCisJdGVzdCAhIC1lIC5naXQvcmVmcy9yZW1vdGVzL29yaWdpbi9IRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgY2xvbmUgd2l0aG91dCAuYnVuZGxlIHN1ZmZpeCcgJworCWdpdCBjbG9uZSBkaXIvYjMgJiYKKwkoY2QgYjMgJiYgZ2l0IGZldGNoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgY2xvbmUgd2l0aCAuYnVuZGxlIHN1ZmZpeCcgJworCWdpdCBjbG9uZSBiMS5idW5kbGUgJiYKKwkoY2QgYjEgJiYgZ2l0IGZldGNoKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdidW5kbGUgY2xvbmUgZnJvbSBiNCcgJworCWdpdCBjbG9uZSBiNCBiZGwgJiYKKwkoY2QgYmRsICYmIGdpdCBmZXRjaCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnVuZGxlIGNsb25lIGZyb20gYjQuYnVuZGxlIHRoYXQgZG9lcyBub3QgZXhpc3QnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgYjQuYnVuZGxlIGJiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2J1bmRsZSBjbG9uZSB3aXRoIG5vbmV4aXN0ZW50IEhFQUQnICcKKwlnaXQgY2xvbmUgYjIuYnVuZGxlIGIyICYmCisJKGNkIGIyICYmCisJZ2l0IGZldGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZW1wdHkgcmVwb3NpdG9yeScgJworCW1rZGlyIGVtcHR5ICYmCisJKGNkIGVtcHR5ICYmCisJIGdpdCBpbml0ICYmCisJIGdpdCBjb25maWcgcmVjZWl2ZS5kZW55Q3VycmVudEJyYW5jaCB3YXJuKSAmJgorCWdpdCBjbG9uZSBlbXB0eSBlbXB0eS1jbG9uZSAmJgorCXRlc3RfdGljayAmJgorCShjZCBlbXB0eS1jbG9uZQorCSBlY2hvICJjb250ZW50IiA+PiBmb28gJiYKKwkgZ2l0IGFkZCBmb28gJiYKKwkgZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIgJiYKKwkgZXhwZWN0ZWQ9JChnaXQgcmV2LXBhcnNlIG1hc3RlcikgJiYKKwkgYWN0dWFsPSQoZ2l0IC0tZ2l0LWRpcj0uLi9lbXB0eS8uZ2l0IHJldi1wYXJzZSBtYXN0ZXIpICYmCisJIHRlc3QgJGFjdHVhbCA9ICRleHBlY3RlZCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgZW1wdHkgcmVwb3NpdG9yeSwgYW5kIHRoZW4gcHVzaCBzaG91bGQgbm90IHNlZ2ZhdWx0LicgJworCXJtIC1mciBlbXB0eS8gZW1wdHktY2xvbmUvICYmCisJbWtkaXIgZW1wdHkgJiYKKwkoY2QgZW1wdHkgJiYgZ2l0IGluaXQpICYmCisJZ2l0IGNsb25lIGVtcHR5IGVtcHR5LWNsb25lICYmCisJKGNkIGVtcHR5LWNsb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1c2gpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgbm9uLWV4aXN0ZW50IGRpcmVjdG9yeSBmYWlscycgJworCXJtIC1yZiBkb2VzLW5vdC1leGlzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSBkb2VzLW5vdC1leGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIG5vbi1naXQgZGlyZWN0b3J5IGZhaWxzJyAnCisJcm0gLXJmIG5vdC1hLWdpdC1yZXBvIG5vdC1hLWdpdC1yZXBvLWNsb25lICYmCisJbWtkaXIgbm90LWEtZ2l0LXJlcG8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgbm90LWEtZ2l0LXJlcG8gbm90LWEtZ2l0LXJlcG8tY2xvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBmaWxlOi8vIGRvZXMgbm90IGhhcmRsaW5rJyAnCisJZ2l0IGNsb25lIC0tYmFyZSBmaWxlOi8vIiQocHdkKSIvYSBub24tbG9jYWwgJiYKKwkhIHJlcG9faXNfaGFyZGxpbmtlZCBub24tbG9jYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBhIGxvY2FsIHBhdGggd2l0aCAtLW5vLWxvY2FsIGRvZXMgbm90IGhhcmRsaW5rJyAnCisJZ2l0IGNsb25lIC0tYmFyZSAtLW5vLWxvY2FsIGEgZm9yY2Utbm9ubG9jYWwgJiYKKwkhIHJlcG9faXNfaGFyZGxpbmtlZCBmb3JjZS1ub25sb2NhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIGxvY2FsbHkgcmVzcGVjdHMgIi11IiBmb3IgZmV0Y2hpbmcgcmVmcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtLWJhcmUgLXUgZmFsc2UgYSBzaG91bGRfbm90X3dvcmsuZ2l0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwMi1jbG9uZS1vcHRpb25zLnNoIGIvdC90NTcwMi1jbG9uZS1vcHRpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjllMjRlYzgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NzAyLWNsb25lLW9wdGlvbnMuc2gKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Jhc2ljIGNsb25lIG9wdGlvbnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCW1rZGlyIHBhcmVudCAmJgorCShjZCBwYXJlbnQgJiYgZ2l0IGluaXQgJiYKKwkgZWNobyBvbmUgPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLW0gb25lKQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1vJyAnCisKKwlnaXQgY2xvbmUgLW8gZm9vIHBhcmVudCBjbG9uZS1vICYmCisJKGNkIGNsb25lLW8gJiYgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvZm9vL21hc3RlcikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRpcmVjdGVkIGNsb25lIGRvZXMgbm90IHNob3cgcHJvZ3Jlc3MnICcKKworCWdpdCBjbG9uZSAiZmlsZTovLyQocHdkKS9wYXJlbnQiIGNsb25lLXJlZGlyZWN0ZWQgPm91dCAyPmVyciAmJgorCSEgZ3JlcCAlIGVyciAmJgorCXRlc3RfaTE4bmdyZXAgISAiQ2hlY2tpbmcgY29ubmVjdGl2aXR5IiBlcnIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWRpcmVjdGVkIGNsb25lIC12IGRvZXMgc2hvdyBwcm9ncmVzcycgJworCisJZ2l0IGNsb25lIC0tcHJvZ3Jlc3MgImZpbGU6Ly8kKHB3ZCkvcGFyZW50IiBjbG9uZS1yZWRpcmVjdGVkLXByb2dyZXNzIFwKKwkJPm91dCAyPmVyciAmJgorCWdyZXAgJSBlcnIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU3MDQtYnVuZGxlLnNoIGIvdC90NTcwNC1idW5kbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzQ4ZDliMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU3MDQtYnVuZGxlLnNoCkBAIC0wLDAgKzEsNzQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzb21lIGJ1bmRsZSByZWxhdGVkIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLW0gdGFnIHRhZyAmJgorCXRlc3RfY29tbWl0IHNlY29uZCAmJgorCXRlc3RfY29tbWl0IHRoaXJkICYmCisJZ2l0IHRhZyAtZCBpbml0aWFsICYmCisJZ2l0IHRhZyAtZCBzZWNvbmQgJiYKKwlnaXQgdGFnIC1kIHRoaXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fubm90YXRlZCB0YWdzIGNhbiBiZSBleGNsdWRlZCBieSByZXYtbGlzdCBvcHRpb25zJyAnCisJZ2l0IGJ1bmRsZSBjcmVhdGUgYnVuZGxlIC0tYWxsIC0tc2luY2U9Ny5BcHIuMjAwNS4xNToxNDowMC4tMDcwMCAmJgorCWdpdCBscy1yZW1vdGUgYnVuZGxlID4gb3V0cHV0ICYmCisJZ3JlcCB0YWcgb3V0cHV0ICYmCisJZ2l0IGJ1bmRsZSBjcmVhdGUgYnVuZGxlIC0tYWxsIC0tc2luY2U9Ny5BcHIuMjAwNS4xNToxNjowMC4tMDcwMCAmJgorCWdpdCBscy1yZW1vdGUgYnVuZGxlID4gb3V0cHV0ICYmCisJISBncmVwIHRhZyBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGllIGlmIGJ1bmRsZSBmaWxlIGNhbm5vdCBiZSBjcmVhdGVkJyAnCisJbWtkaXIgYWRpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBidW5kbGUgY3JlYXRlIGFkaXIgLS1hbGwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnYnVuZGxlIC0tc3RkaW4nICcKKwllY2hvIG1hc3RlciB8IGdpdCBidW5kbGUgY3JlYXRlIHN0ZGluLWJ1bmRsZS5iZGwgLS1zdGRpbiAmJgorCWdpdCBscy1yZW1vdGUgc3RkaW4tYnVuZGxlLmJkbCA+b3V0cHV0ICYmCisJZ3JlcCBtYXN0ZXIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2J1bmRsZSAtLXN0ZGluIDxyZXYtbGlzdCBvcHRpb25zPicgJworCWVjaG8gbWFzdGVyIHwgZ2l0IGJ1bmRsZSBjcmVhdGUgaHlicmlkLWJ1bmRsZS5iZGwgLS1zdGRpbiB0YWcgJiYKKwlnaXQgbHMtcmVtb3RlIGh5YnJpZC1idW5kbGUuYmRsID5vdXRwdXQgJiYKKwlncmVwIG1hc3RlciBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW1wdHkgYnVuZGxlIGZpbGUgaXMgcmVqZWN0ZWQnICcKKwk6ID5lbXB0eS1idW5kbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmV0Y2ggZW1wdHktYnVuZGxlCisnCisKKyMgVGhpcyB0cmlnZ2VycyBhIGJ1ZyBpbiBvbGRlciB2ZXJzaW9ucyB3aGVyZSB0aGUgcmVzdWx0aW5nIGxpbmUgKHdpdGgKKyMgLS1wcmV0dHk9b25lbGluZSkgd2FzIGxvbmdlciB0aGFuIGEgMTAyNC1jaGFyIGJ1ZmZlci4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JpZGljdWxvdXNseSBsb25nIHN1YmplY3QgaW4gYm91bmRhcnknICcKKwk6ID5maWxlNCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBhZGQgZmlsZTQgJiYKKwlwcmludGYgIiUwMTIwMGRcbiIgMCB8IGdpdCBjb21taXQgLUYgLSAmJgorCXRlc3RfY29tbWl0IGZpZnRoICYmCisJZ2l0IGJ1bmRsZSBjcmVhdGUgbG9uZy1zdWJqZWN0LWJ1bmRsZS5iZGwgSEVBRF4uLkhFQUQgJiYKKwlnaXQgYnVuZGxlIGxpc3QtaGVhZHMgbG9uZy1zdWJqZWN0LWJ1bmRsZS5iZGwgPmhlYWRzICYmCisJdGVzdCAtcyBoZWFkcyAmJgorCWdpdCBmZXRjaCBsb25nLXN1YmplY3QtYnVuZGxlLmJkbCAmJgorCXNlZCAtbiAiL14tL3twO3E7fSIgbG9uZy1zdWJqZWN0LWJ1bmRsZS5iZGwgPmJvdW5kYXJ5ICYmCisJZ3JlcCAiXi1bMC05YS1mXVxcezQwXFx9ICIgYm91bmRhcnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcmVxdWlzaXRlcyB3aXRoIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlJyAnCisJOiA+ZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0gIiIgJiYKKwl0ZXN0X2NvbW1pdCBmaWxlMiAmJgorCWdpdCBidW5kbGUgY3JlYXRlIGJ1bmRsZSBIRUFEXi4uICYmCisJZ2l0IGJ1bmRsZSB2ZXJpZnkgYnVuZGxlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwNS1jbG9uZS0yZ2Iuc2ggYi90L3Q1NzA1LWNsb25lLTJnYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xOTFkNmQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwNS1jbG9uZS0yZ2Iuc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgY2xvbmluZyBhIHJlcG9zaXRvcnkgbGFyZ2VyIHRoYW4gMiBnaWdhYnl0ZScKKy4gLi90ZXN0LWxpYi5zaAorCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfQ0xPTkVfMkdCIgordGhlbgorCXNheSAnU2tpcHBpbmcgZXhwZW5zaXZlIDJHQiBjbG9uZSB0ZXN0OyBlbmFibGUgaXQgd2l0aCBHSVRfVEVTVF9DTE9ORV8yR0I9dCcKK2Vsc2UKKwl0ZXN0X3NldF9wcmVyZXEgQ0xPTkVfMkdCCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENMT05FXzJHQiAnc2V0dXAnICcKKworCWdpdCBjb25maWcgcGFjay5jb21wcmVzc2lvbiAwICYmCisJZ2l0IGNvbmZpZyBwYWNrLmRlcHRoIDAgJiYKKwlibG9ic2l6ZT0kKCgxMDAqMTAyNCoxMDI0KSkgJiYKKwlibG9iY291bnQ9JCgoMioxMDI0KjEwMjQqMTAyNC8kYmxvYnNpemUrMSkpICYmCisJaT0xICYmCisJKHdoaWxlIHRlc3QgJGkgLWxlICRibG9iY291bnQKKwkgZG8KKwkJcHJpbnRmICJHZW5lcmF0aW5nIGJsb2IgJGkvJGJsb2Jjb3VudFxyIiA+JjIgJiYKKwkJcHJpbnRmICJibG9iXG5tYXJrIDokaVxuZGF0YSAkYmxvYnNpemVcbiIgJiYKKwkJI3Rlc3QtZ2VucmFuZG9tICRpICRibG9ic2l6ZSAmJgorCQlwcmludGYgIiUtJHtibG9ic2l6ZX1zIiAkaSAmJgorCQllY2hvICJNIDEwMDY0NCA6JGkgJGkiID4+IGNvbW1pdAorCQlpPSQoKCRpKzEpKSB8fAorCQllY2hvICQ/ID4gZXhpdC1zdGF0dXMKKwkgZG9uZSAmJgorCSBlY2hvICJjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIiICYmCisJIGVjaG8gImF1dGhvciBBIFUgVGhvciA8YXV0aG9yQGVtYWlsLmNvbT4gMTIzNDU2Nzg5ICswMDAwIiAmJgorCSBlY2hvICJjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGVtYWlsLmNvbT4gMTIzNDU2Nzg5ICswMDAwIiAmJgorCSBlY2hvICJkYXRhIDUiICYmCisJIGVjaG8gIj4yZ2IiICYmCisJIGNhdCBjb21taXQpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1iaWctZmlsZS10aHJlc2hvbGQ9MiAmJgorCXRlc3QgISAtZiBleGl0LXN0YXR1cworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ0xPTkVfMkdCICdjbG9uZSAtIGJhcmUnICcKKworCWdpdCBjbG9uZSAtLWJhcmUgLS1uby1oYXJkbGlua3MgLiBjbG9uZS1iYXJlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDTE9ORV8yR0IgJ2Nsb25lIC0gd2l0aCB3b3JrdHJlZSwgZmlsZTovLyBwcm90b2NvbCcgJworCisJZ2l0IGNsb25lICJmaWxlOi8vJChwd2QpIiBjbG9uZS13dAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwNi1jbG9uZS1icmFuY2guc2ggYi90L3Q1NzA2LWNsb25lLWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZTdhN2JlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTcwNi1jbG9uZS1icmFuY2guc2gKQEAgLTAsMCArMSw3MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Nsb25lIC0tYnJhbmNoIG9wdGlvbicKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19IRUFEKCkgeworCWVjaG8gcmVmcy9oZWFkcy8iJDEiID5leHBlY3QgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKworY2hlY2tfZmlsZSgpIHsKKwllY2hvICIkMSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJbWtkaXIgcGFyZW50ICYmCisJKGNkIHBhcmVudCAmJiBnaXQgaW5pdCAmJgorCSBlY2hvIG9uZSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHR3byAmJgorCSBlY2hvIHR3byA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSB0d28gJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlcikgJiYKKwlta2RpciBlbXB0eSAmJgorCShjZCBlbXB0eSAmJiBnaXQgaW5pdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFuaWxsYSBjbG9uZSBjaG9vc2VzIEhFQUQnICcKKwlnaXQgY2xvbmUgcGFyZW50IGNsb25lICYmCisJKGNkIGNsb25lICYmCisJIGNoZWNrX0hFQUQgbWFzdGVyICYmCisJIGNoZWNrX2ZpbGUgb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiBjaG9vc2VzIHNwZWNpZmllZCBicmFuY2gnICcKKwlnaXQgY2xvbmUgLWIgdHdvIHBhcmVudCBjbG9uZS10d28gJiYKKwkoY2QgY2xvbmUtdHdvICYmCisJIGNoZWNrX0hFQUQgdHdvICYmCisJIGNoZWNrX2ZpbGUgdHdvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiBzZXRzIHVwIHRyYWNraW5nJyAnCisJKGNkIGNsb25lLXR3byAmJgorCSBlY2hvIG9yaWdpbiA+ZXhwZWN0ICYmCisJIGdpdCBjb25maWcgYnJhbmNoLnR3by5yZW1vdGUgPmFjdHVhbCAmJgorCSBlY2hvIHJlZnMvaGVhZHMvdHdvID4+ZXhwZWN0ICYmCisJIGdpdCBjb25maWcgYnJhbmNoLnR3by5tZXJnZSA+PmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiBkb2VzIG5vdCBtdW5nZSByZW1vdGVzL29yaWdpbi9IRUFEJyAnCisJKGNkIGNsb25lLXR3byAmJgorCSBlY2hvIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyID5leHBlY3QgJiYKKwkgZ2l0IHN5bWJvbGljLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luL0hFQUQgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYiB3aXRoIGJvZ3VzIGJyYW5jaCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtYiBib2d1cyBwYXJlbnQgY2xvbmUtYm9ndXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWIgbm90IGFsbG93ZWQgd2l0aCBlbXB0eSByZXBvcycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjbG9uZSAtYiBicmFuY2ggZW1wdHkgY2xvbmUtYnJhbmNoLWVtcHR5CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwNy1jbG9uZS1kZXRhY2hlZC5zaCBiL3QvdDU3MDctY2xvbmUtZGV0YWNoZWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGIwZDYwNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU3MDctY2xvbmUtZGV0YWNoZWQuc2gKQEAgLTAsMCArMSw3NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2xvbmluZyBhIHJlcG9zaXRvcnkgd2l0aCBkZXRhY2hlZCBIRUFEJworLiAuL3Rlc3QtbGliLnNoCisKK2hlYWRfaXNfZGV0YWNoZWQoKSB7CisJZ2l0IC0tZ2l0LWRpcj0kMS8uZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tZ2l0LWRpcj0kMS8uZ2l0IHN5bWJvbGljLXJlZiBIRUFECit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCWVjaG8gdHdvID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28gJiYKKwlnaXQgdGFnIHR3byAmJgorCWVjaG8gdGhyZWUgPmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlcG8gKGRldGFjaGVkIEhFQUQgcG9pbnRzIHRvIGJyYW5jaCknICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kUFdEIiBkZXRhY2hlZC1icmFuY2gKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lZCBIRUFEIG1hdGNoZXMnICcKKwllY2hvIHRocmVlID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWRldGFjaGVkLWJyYW5jaC8uZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3RfZmFpbHVyZSAnY2xvbmVkIEhFQUQgaXMgZGV0YWNoZWQnICcKKwloZWFkX2lzX2RldGFjaGVkIGRldGFjaGVkLWJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSByZXBvIChkZXRhY2hlZCBIRUFEIHBvaW50cyB0byB0YWcpJyAnCisJZ2l0IGNoZWNrb3V0IHR3b14wICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJFBXRCIgZGV0YWNoZWQtdGFnCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZWQgSEVBRCBtYXRjaGVzJyAnCisJZWNobyB0d28gPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9ZGV0YWNoZWQtdGFnLy5naXQgbG9nIC0xIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZWQgSEVBRCBpcyBkZXRhY2hlZCcgJworCWhlYWRfaXNfZGV0YWNoZWQgZGV0YWNoZWQtdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHJlcG8gKGRldGFjaGVkIEhFQUQgcG9pbnRzIHRvIGhpc3RvcnkpJyAnCisJZ2l0IGNoZWNrb3V0IHR3b14gJiYKKwlnaXQgY2xvbmUgImZpbGU6Ly8kUFdEIiBkZXRhY2hlZC1oaXN0b3J5CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZWQgSEVBRCBtYXRjaGVzJyAnCisJZWNobyBvbmUgPmV4cGVjdCAmJgorCWdpdCAtLWdpdC1kaXI9ZGV0YWNoZWQtaGlzdG9yeS8uZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgaXMgZGV0YWNoZWQnICcKKwloZWFkX2lzX2RldGFjaGVkIGRldGFjaGVkLWhpc3RvcnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVwbyAob3JwaGFuIGRldGFjaGVkIEhFQUQpJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZWNobyBmb3VyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBmb3VyICYmCisJZ2l0IGNsb25lICJmaWxlOi8vJFBXRCIgZGV0YWNoZWQtb3JwaGFuCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZWQgSEVBRCBtYXRjaGVzJyAnCisJZWNobyBmb3VyID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWRldGFjaGVkLW9ycGhhbi8uZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmVkIEhFQUQgaXMgZGV0YWNoZWQnICcKKwloZWFkX2lzX2RldGFjaGVkIGRldGFjaGVkLW9ycGhhbgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU3MDgtY2xvbmUtY29uZmlnLnNoIGIvdC90NTcwOC1jbG9uZS1jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjdkNzMwYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU3MDgtY2xvbmUtY29uZmlnLnNoCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0cyBmb3IgZ2l0IGNsb25lIC1jIGtleT12YWx1ZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYyBzZXRzIGNvbmZpZyBpbiBjbG9uZWQgcmVwbycgJworCXJtIC1yZiBjaGlsZCAmJgorCWdpdCBjbG9uZSAtYyBjb3JlLmZvbz1iYXIgLiBjaGlsZCAmJgorCWVjaG8gYmFyID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWNoaWxkLy5naXQgY29uZmlnIGNvcmUuZm9vID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC1jIGNhbiBzZXQgbXVsdGkta2V5cycgJworCXJtIC1yZiBjaGlsZCAmJgorCWdpdCBjbG9uZSAtYyBjb3JlLmZvbz1iYXIgLWMgY29yZS5mb289YmF6IC4gY2hpbGQgJiYKKwl7IGVjaG8gYmFyOyBlY2hvIGJhejsgfSA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1jaGlsZC8uZ2l0IGNvbmZpZyAtLWdldC1hbGwgY29yZS5mb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLWMgd2l0aG91dCBhIHZhbHVlIGlzIGJvb2xlYW4gdHJ1ZScgJworCXJtIC1yZiBjaGlsZCAmJgorCWdpdCBjbG9uZSAtYyBjb3JlLmZvbyAuIGNoaWxkICYmCisJZWNobyB0cnVlID5leHBlY3QgJiYKKwlnaXQgLS1naXQtZGlyPWNoaWxkLy5naXQgY29uZmlnIC0tYm9vbCBjb3JlLmZvbyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtYyBjb25maWcgaXMgYXZhaWxhYmxlIGR1cmluZyBjbG9uZScgJworCWVjaG8gY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJcm0gLXJmIGNoaWxkICYmCisJZ2l0IGNsb25lIC1jIGNvcmUuYXV0b2NybGYgLiBjaGlsZCAmJgorCXByaW50ZiAiY29udGVudFxcclxcbiIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjaGlsZC9maWxlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcwOS1jbG9uZS1yZWZzcGVjLnNoIGIvdC90NTcwOS1jbG9uZS1yZWZzcGVjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdhY2UyNTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1NzA5LWNsb25lLXJlZnNwZWMuc2gKQEAgLTAsMCArMSwxNTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHJlZnNwZWMgd3JpdHRlbiBieSBjbG9uZS1jb21tYW5kJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJIyBNYWtlIHR3byBicmFuY2hlcywgIm1hc3RlciIgYW5kICJzaWRlIgorCWVjaG8gb25lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwllY2hvIHR3byA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvICYmCisJZ2l0IHRhZyB0d28gJiYKKwllY2hvIHRocmVlID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0aHJlZSAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJZWNobyBmb3VyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBmb3VyICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJIyBkZWZhdWx0IGNsb25lCisJZ2l0IGNsb25lIC4gZGlyX2FsbCAmJgorCisJIyBkZWZhdWx0IC0tc2luZ2xlIHRoYXQgZm9sbG93cyBIRUFEPW1hc3RlcgorCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggLiBkaXJfbWFzdGVyICYmCisKKwkjIGRlZmF1bHQgLS1zaW5nbGUgdGhhdCBmb2xsb3dzIEhFQUQ9c2lkZQorCWdpdCBjaGVja291dCBzaWRlICYmCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAuIGRpcl9zaWRlICYmCisKKwkjIGV4cGxpY2l0IC0tc2luZ2xlIHRoYXQgZm9sbG93cyBzaWRlCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggLS1icmFuY2ggc2lkZSAuIGRpcl9zaWRlMiAmJgorCisJIyBkZWZhdWx0IC0tc2luZ2xlIHdpdGggLS1taXJyb3IKKwlnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIC0tbWlycm9yIC4gZGlyX21pcnJvciAmJgorCisJIyBkZWZhdWx0IC0tc2luZ2xlIHdpdGggLS1icmFuY2ggYW5kIC0tbWlycm9yCisJZ2l0IGNsb25lIC0tc2luZ2xlLWJyYW5jaCAtLW1pcnJvciAtLWJyYW5jaCBzaWRlIC4gZGlyX21pcnJvcl9zaWRlICYmCisKKwkjIC0tc2luZ2xlIHRoYXQgZG9lcyBub3Qga25vdyB3aGF0IGJyYW5jaCB0byBmb2xsb3cKKwlnaXQgY2hlY2tvdXQgdHdvXiAmJgorCWdpdCBjbG9uZSAtLXNpbmdsZS1icmFuY2ggLiBkaXJfZGV0YWNoZWQgJiYKKworCSMgZXhwbGljaXQgLS1zaW5nbGUgd2l0aCB0YWcKKwlnaXQgY2xvbmUgLS1zaW5nbGUtYnJhbmNoIC0tYnJhbmNoIHR3byAuIGRpcl90YWcgJiYKKworCSMgYWR2YW5jZSBib3RoICJtYXN0ZXIiIGFuZCAic2lkZSIgYnJhbmNoZXMKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCWVjaG8gZml2ZSA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gZml2ZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIHNpeCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gc2l4ICYmCisKKwkjIHVwZGF0ZSB0YWcKKwlnaXQgdGFnIC1kIHR3byAmJiBnaXQgdGFnIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdieSBkZWZhdWx0IGFsbCBicmFuY2hlcyB3aWxsIGJlIGtlcHQgdXBkYXRlZCcgJworCSgKKwkJY2QgZGlyX2FsbCAmJiBnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwKKwkJc2VkIC1lICIvSEVBRCQvZCIgXAorCQkgICAgLWUgInN8L3JlbW90ZXMvb3JpZ2luL3wvaGVhZHMvfCIgPi4uL2FjdHVhbAorCSkgJiYKKwkjIGZvbGxvdyBib3RoIG1hc3RlciBhbmQgc2lkZQorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdieSBkZWZhdWx0IG5vIHRhZ3Mgd2lsbCBiZSBrZXB0IHVwZGF0ZWQnICcKKwkoCisJCWNkIGRpcl9hbGwgJiYgZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy90YWdzID4uLi9hY3R1YWwKKwkpICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPmV4cGVjdCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdoaWxlIEhFQUQgcG9pbnRpbmcgYXQgbWFzdGVyJyAnCisJKAorCQljZCBkaXJfbWFzdGVyICYmIGdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gfAorCQlzZWQgLWUgIi9IRUFEJC9kIiBcCisJCSAgICAtZSAic3wvcmVtb3Rlcy9vcmlnaW4vfC9oZWFkcy98IiA+Li4vYWN0dWFsCisJKSAmJgorCSMgb25seSBmb2xsb3cgbWFzdGVyCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzL21hc3RlciA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpbmdsZS1icmFuY2ggd2hpbGUgSEVBRCBwb2ludGluZyBhdCBzaWRlJyAnCisJKAorCQljZCBkaXJfc2lkZSAmJiBnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3JlbW90ZXMvb3JpZ2luIHwKKwkJc2VkIC1lICIvSEVBRCQvZCIgXAorCQkgICAgLWUgInN8L3JlbW90ZXMvb3JpZ2luL3wvaGVhZHMvfCIgPi4uL2FjdHVhbAorCSkgJiYKKwkjIG9ubHkgZm9sbG93IHNpZGUKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvaGVhZHMvc2lkZSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpbmdsZS1icmFuY2ggd2l0aCBleHBsaWNpdCAtLWJyYW5jaCBzaWRlJyAnCisJKAorCQljZCBkaXJfc2lkZTIgJiYgZ2l0IGZldGNoICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbiB8CisJCXNlZCAtZSAiL0hFQUQkL2QiIFwKKwkJICAgIC1lICJzfC9yZW1vdGVzL29yaWdpbi98L2hlYWRzL3wiID4uLi9hY3R1YWwKKwkpICYmCisJIyBvbmx5IGZvbGxvdyBzaWRlCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzL3NpZGUgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaW5nbGUtYnJhbmNoIHdpdGggZXhwbGljaXQgLS1icmFuY2ggd2l0aCB0YWcgZmV0Y2hlcyB1cGRhdGVkIHRhZycgJworCSgKKwkJY2QgZGlyX3RhZyAmJiBnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL3RhZ3MgPi4uL2FjdHVhbAorCSkgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvdGFncyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpbmdsZS1icmFuY2ggd2l0aCAtLW1pcnJvcicgJworCSgKKwkJY2QgZGlyX21pcnJvciAmJiBnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzID4gLi4vYWN0dWFsCisJKSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpbmdsZS1icmFuY2ggd2l0aCBleHBsaWNpdCAtLWJyYW5jaCBhbmQgLS1taXJyb3InICcKKwkoCisJCWNkIGRpcl9taXJyb3Jfc2lkZSAmJiBnaXQgZmV0Y2ggJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzID4gLi4vYWN0dWFsCisJKSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNpbmdsZS1icmFuY2ggd2l0aCBkZXRhY2hlZCcgJworCSgKKwkJY2QgZGlyX2RldGFjaGVkICYmIGdpdCBmZXRjaCAmJgorCQlnaXQgZm9yLWVhY2gtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4gfAorCQlzZWQgLWUgIi9IRUFEJC9kIiBcCisJCSAgICAtZSAic3wvcmVtb3Rlcy9vcmlnaW4vfC9oZWFkcy98IiA+Li4vYWN0dWFsCisJKSAmJgorCSMgbm90aGluZworCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTcxMC1pbmZvLWFsdGVybmF0ZS5zaCBiL3QvdDU3MTAtaW5mby1hbHRlcm5hdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWE2ZTQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU3MTAtaW5mby1hbHRlcm5hdGUuc2gKQEAgLTAsMCArMSwxMTIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMDYgTWFydGluIFdhaXR6IDx0YWxpQGFkbWluZ2lsZGUub3JnPgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHRyYW5zaXRpdmUgaW5mby9hbHRlcm5hdGUgZW50cmllcycKKy4gLi90ZXN0LWxpYi5zaAorCisjIHRlc3QgdGhhdCBhIGZpbGUgaXMgbm90IHJlYWNoYWJsZSBpbiB0aGUgY3VycmVudCByZXBvc2l0b3J5CisjIGJ1dCB0aGF0IGl0IGlzIGFmdGVyIGNyZWF0aW5nIGEgaW5mby9hbHRlcm5hdGUgZW50cnkKK3JlYWNoYWJsZV92aWEoKSB7CisJYWx0ZXJuYXRlPSIkMSIKKwlmaWxlPSIkMiIKKwlpZiBnaXQgY2F0LWZpbGUgLWUgIkhFQUQ6JGZpbGUiOyB0aGVuIHJldHVybiAxOyBmaQorCWVjaG8gIiRhbHRlcm5hdGUiID4+IC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZQorCWdpdCBjYXQtZmlsZSAtZSAiSEVBRDokZmlsZSIKK30KKwordGVzdF92YWxpZF9yZXBvKCkgeworCWdpdCBmc2NrIC0tZnVsbCA+IGZzY2subG9nICYmCisJdGVzdF9saW5lX2NvdW50ID0gMCBmc2NrLmxvZworfQorCitiYXNlX2Rpcj1gcHdkYAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgZmlyc3QgcmVwb3NpdG9yeScgXAorJ3Rlc3RfY3JlYXRlX3JlcG8gQSAmJiBjZCBBICYmCitlY2hvICJIZWxsbyBXb3JsZCIgPiBmaWxlMSAmJgorZ2l0IGFkZCBmaWxlMSAmJgorZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiIGZpbGUxICYmCitnaXQgcmVwYWNrIC1hIC1kICYmCitnaXQgcHJ1bmUnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyBzZWNvbmQgcmVwb3NpdG9yeScgXAorJ2dpdCBjbG9uZSAtbCAtcyBBIEIgJiYgY2QgQiAmJgorZWNobyAiZm9vIGJhciIgPiBmaWxlMiAmJgorZ2l0IGFkZCBmaWxlMiAmJgorZ2l0IGNvbW1pdCAtbSAibmV4dCBjb21taXQiIGZpbGUyICYmCitnaXQgcmVwYWNrIC1hIC1kIC1sICYmCitnaXQgcHJ1bmUnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmluZyB0aGlyZCByZXBvc2l0b3J5JyBcCisnZ2l0IGNsb25lIC1sIC1zIEIgQyAmJiBjZCBDICYmCitlY2hvICJHb29kYnllLCBjcnVlbCB3b3JsZCIgPiBmaWxlMyAmJgorZ2l0IGFkZCBmaWxlMyAmJgorZ2l0IGNvbW1pdCAtbSAib25lIG1vcmUiIGZpbGUzICYmCitnaXQgcmVwYWNrIC1hIC1kIC1sICYmCitnaXQgcHJ1bmUnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIHRvbyBkZWVwIG5lc3RpbmcnIFwKKydnaXQgY2xvbmUgLWwgLXMgQyBEICYmCitnaXQgY2xvbmUgLWwgLXMgRCBFICYmCitnaXQgY2xvbmUgLWwgLXMgRSBGICYmCitnaXQgY2xvbmUgLWwgLXMgRiBHICYmCitnaXQgY2xvbmUgLS1iYXJlIC1sIC1zIEcgSCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZGl0eSBvZiBkZWVwZXN0IHJlcG9zaXRvcnknIFwKKydjZCBIICYmIHsKKwl0ZXN0X3ZhbGlkX3JlcG8KKwl0ZXN0ICQ/IC1uZSAwCit9JworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGl0eSBvZiB0aGlyZCByZXBvc2l0b3J5JyBcCisnY2QgQyAmJgordGVzdF92YWxpZF9yZXBvJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGl0eSBvZiBmb3VydGggcmVwb3NpdG9yeScgXAorJ2NkIEQgJiYKK3Rlc3RfdmFsaWRfcmVwbycKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJlYWtpbmcgb2YgbG9vcHMnIFwKKydlY2hvICIkYmFzZV9kaXIiL0IvLmdpdC9vYmplY3RzID4+ICIkYmFzZV9kaXIiL0EvLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyYmCitjZCBDICYmCit0ZXN0X3ZhbGlkX3JlcG8nCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgaW5mby9hbHRlcm5hdGVzIGlzIG5lY2Vzc2FyeScgXAorJ2NkIEMgJiYKK3JtIC1mIC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKyEgKHRlc3RfdmFsaWRfcmVwbyknCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgcmVsYXRpdmUgYWx0ZXJuYXRlIGlzIHBvc3NpYmxlIGZvciBjdXJyZW50IGRpcicgXAorJ2NkIEMgJiYKK2VjaG8gIi4uLy4uLy4uL0IvLmdpdC9vYmplY3RzIiA+IC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKK3Rlc3RfdmFsaWRfcmVwbycKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3RoYXQgcmVsYXRpdmUgYWx0ZXJuYXRlIGlzIG9ubHkgcG9zc2libGUgZm9yIGN1cnJlbnQgZGlyJyAnCisgICAgY2QgRCAmJgorICAgICEgKHRlc3RfdmFsaWRfcmVwbykKKycKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1ODAxLXJlbW90ZS1oZWxwZXJzLnNoIGIvdC90NTgwMS1yZW1vdGUtaGVscGVycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNjJiMTU4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTgwMS1yZW1vdGUtaGVscGVycy5zaApAQCAtMCwwICsxLDMwNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBTdmVycmUgUmFiYmVsaWVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgcmVtb3RlLWhlbHBlciBpbXBvcnQgYW5kIGV4cG9ydCBjb21tYW5kcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1ncGcuc2gKKworY29tcGFyZV9yZWZzKCkgeworCWdpdCAtLWdpdC1kaXI9IiQxLy5naXQiIHJldi1wYXJzZSAtLXZlcmlmeSAkMiA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj0iJDMvLmdpdCIgcmV2LXBhcnNlIC0tdmVyaWZ5ICQ0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnknICcKKwlnaXQgaW5pdCBzZXJ2ZXIgJiYKKwkoY2Qgc2VydmVyICYmCisJIGVjaG8gY29udGVudCA+ZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSBvbmUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25pbmcgZnJvbSBsb2NhbCByZXBvJyAnCisJZ2l0IGNsb25lICJ0ZXN0Z2l0Ojoke1BXRH0vc2VydmVyIiBsb2NhbCAmJgorCXRlc3RfY21wIHNlcnZlci9maWxlIGxvY2FsL2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIG5ldyBjb21taXQgb24gcmVtb3RlJyAnCisJKGNkIHNlcnZlciAmJgorCSBlY2hvIGNvbnRlbnQgPj5maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gdHdvKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIGZyb20gbG9jYWwgcmVwbycgJworCShjZCBsb2NhbCAmJiBnaXQgcHVsbCkgJiYKKwl0ZXN0X2NtcCBzZXJ2ZXIvZmlsZSBsb2NhbC9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2hpbmcgdG8gbG9jYWwgcmVwbycgJworCShjZCBsb2NhbCAmJgorCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRocmVlICYmCisJZ2l0IHB1c2gpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsIEhFQUQgc2VydmVyIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggbmV3IGJyYW5jaCcgJworCShjZCBzZXJ2ZXIgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCAmJgorCSBnaXQgY2hlY2tvdXQgLWIgbmV3ICYmCisJIGVjaG8gY29udGVudCA+PmZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSBmaXZlCisJKSAmJgorCShjZCBsb2NhbCAmJgorCSBnaXQgZmV0Y2ggb3JpZ2luIG5ldworCSkgJiYKKwljb21wYXJlX3JlZnMgc2VydmVyIEhFQUQgbG9jYWwgRkVUQ0hfSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBtdWx0aXBsZSBicmFuY2hlcycgJworCShjZCBsb2NhbCAmJgorCSBnaXQgZmV0Y2gKKwkpICYmCisJY29tcGFyZV9yZWZzIHNlcnZlciBtYXN0ZXIgbG9jYWwgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgJiYKKwljb21wYXJlX3JlZnMgc2VydmVyIG5ldyBsb2NhbCByZWZzL3JlbW90ZXMvb3JpZ2luL25ldworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHdoZW4gcmVtb3RlIGhhcyBleHRyYSByZWZzJyAnCisJKGNkIGxvY2FsICYmCisJIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luL21hc3RlciAmJgorCSBlY2hvIGNvbnRlbnQgPj5maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gc2l4ICYmCisJIGdpdCBwdXNoCisJKSAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbCBtYXN0ZXIgc2VydmVyIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG5ldyBicmFuY2ggYnkgbmFtZScgJworCShjZCBsb2NhbCAmJgorCSBnaXQgY2hlY2tvdXQgLWIgbmV3LW5hbWUgICYmCisJIGVjaG8gY29udGVudCA+PmZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSBzZXZlbiAmJgorCSBnaXQgcHVzaCBvcmlnaW4gbmV3LW5hbWUKKwkpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsIEhFQUQgc2VydmVyIHJlZnMvaGVhZHMvbmV3LW5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBuZXcgYnJhbmNoIHdpdGggb2xkOm5ldyByZWZzcGVjJyAnCisJKGNkIGxvY2FsICYmCisJIGdpdCBwdXNoIG9yaWdpbiBuZXctbmFtZTpuZXctcmVmc3BlYworCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgSEVBRCBzZXJ2ZXIgcmVmcy9oZWFkcy9uZXctcmVmc3BlYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG5ldyBicmFuY2ggd2l0aCBIRUFEOm5ldyByZWZzcGVjJyAnCisJKGNkIGxvY2FsICYmCisJIGdpdCBjaGVja291dCBuZXctbmFtZQorCSBnaXQgcHVzaCBvcmlnaW4gSEVBRDpuZXctcmVmc3BlYy0yCisJKSAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbCBIRUFEIHNlcnZlciByZWZzL2hlYWRzL25ldy1yZWZzcGVjLTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBkZWxldGUgYnJhbmNoJyAnCisJKGNkIGxvY2FsICYmCisJIGdpdCBwdXNoIG9yaWdpbiA6bmV3LW5hbWUKKwkpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC0tZ2l0LWRpcj0ic2VydmVyLy5naXQiIFwKKwkgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbmV3LW5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9yY2VkIHB1c2gnICcKKwkoY2QgbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZm9yY2UtdGVzdCAmJgorCWVjaG8gY29udGVudCA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBlaWdodCAmJgorCWdpdCBwdXNoIG9yaWdpbiBmb3JjZS10ZXN0ICYmCisJZWNobyBjb250ZW50ID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC0tYW1lbmQgLW0gZWlnaHQtbW9kaWZpZWQgJiYKKwlnaXQgcHVzaCAtLWZvcmNlIG9yaWdpbiBmb3JjZS10ZXN0CisJKSAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbCByZWZzL2hlYWRzL2ZvcmNlLXRlc3Qgc2VydmVyIHJlZnMvaGVhZHMvZm9yY2UtdGVzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uaW5nIHdpdGhvdXQgcmVmc3BlYycgJworCUdJVF9SRU1PVEVfVEVTVEdJVF9SRUZTUEVDPSIiIFwKKwlnaXQgY2xvbmUgInRlc3RnaXQ6OiR7UFdEfS9zZXJ2ZXIiIGxvY2FsMiAyPmVycm9yICYmCisJZ3JlcCAiVGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IiBlcnJvciAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbDIgSEVBRCBzZXJ2ZXIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsaW5nIHdpdGhvdXQgcmVmc3BlY3MnICcKKwkoY2QgbG9jYWwyICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCUdJVF9SRU1PVEVfVEVTVEdJVF9SRUZTUEVDPSIiIGdpdCBwdWxsIDI+Li4vZXJyb3IpICYmCisJZ3JlcCAiVGhpcyByZW1vdGUgaGVscGVyIHNob3VsZCBpbXBsZW1lbnQgcmVmc3BlYyBjYXBhYmlsaXR5IiBlcnJvciAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbDIgSEVBRCBzZXJ2ZXIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoaW5nIHdpdGhvdXQgcmVmc3BlY3MnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgIihjZCBsb2NhbDIgJiYgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4pIiAmJgorCShjZCBsb2NhbDIgJiYKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0ZW4gJiYKKwlHSVRfUkVNT1RFX1RFU1RHSVRfUkVGU1BFQz0iIiAmJgorCWV4cG9ydCBHSVRfUkVNT1RFX1RFU1RHSVRfUkVGU1BFQyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdXNoIDI+Li4vZXJyb3IpICYmCisJZ3JlcCAicmVtb3RlLWhlbHBlciBkb2Vzbi50IHN1cHBvcnQgcHVzaDsgcmVmc3BlYyBuZWVkZWQiIGVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGxpbmcgd2l0aG91dCBtYXJrcycgJworCShjZCBsb2NhbDIgJiYKKwlHSVRfUkVNT1RFX1RFU1RHSVRfTk9fTUFSS1M9MSBnaXQgcHVsbCkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwyIEhFQUQgc2VydmVyIEhFQUQKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncHVzaGluZyB3aXRob3V0IG1hcmtzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICIoY2QgbG9jYWwyICYmIGdpdCByZXNldCAtLWhhcmQgb3JpZ2luKSIgJiYKKwkoY2QgbG9jYWwyICYmCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdlbHZlICYmCisJR0lUX1JFTU9URV9URVNUR0lUX05PX01BUktTPTEgZ2l0IHB1c2gpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsMiBIRUFEIHNlcnZlciBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggYWxsIHdpdGggZXhpc3Rpbmcgb2JqZWN0JyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGJyYW5jaCBkdXAyIG1hc3RlciAmJgorCWdpdCBwdXNoIG9yaWdpbiAtLWFsbAorCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgZHVwMiBzZXJ2ZXIgZHVwMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHJlZiB3aXRoIGV4aXN0aW5nIG9iamVjdCcgJworCShjZCBsb2NhbCAmJgorCWdpdCBicmFuY2ggZHVwIG1hc3RlciAmJgorCWdpdCBwdXNoIG9yaWdpbiBkdXAKKwkpICYmCisJY29tcGFyZV9yZWZzIGxvY2FsIGR1cCBzZXJ2ZXIgZHVwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdXNoIHNpZ25lZCB0YWcnICcKKwkoY2QgbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyAtcyAtbSBzaWduZWQtdGFnIHNpZ25lZC10YWcgJiYKKwlnaXQgcHVzaCBvcmlnaW4gc2lnbmVkLXRhZworCSkgJiYKKwljb21wYXJlX3JlZnMgbG9jYWwgc2lnbmVkLXRhZ157fSBzZXJ2ZXIgc2lnbmVkLXRhZ157fSAmJgorCXRlc3RfbXVzdF9mYWlsIGNvbXBhcmVfcmVmcyBsb2NhbCBzaWduZWQtdGFnIHNlcnZlciBzaWduZWQtdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdwdXNoIHNpZ25lZCB0YWcgd2l0aCBzaWduZWQtdGFncyBjYXBhYmlsaXR5JyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCB0YWcgLXMgLW0gc2lnbmVkLXRhZyBzaWduZWQtdGFnLTIgJiYKKwlHSVRfUkVNT1RFX1RFU1RHSVRfU0lHTkVEX1RBR1M9MSBnaXQgcHVzaCBvcmlnaW4gc2lnbmVkLXRhZy0yCisJKSAmJgorCWNvbXBhcmVfcmVmcyBsb2NhbCBzaWduZWQtdGFnLTIgc2VydmVyIHNpZ25lZC10YWctMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHVwZGF0ZSByZWZzJyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IC1iIHVwZGF0ZSBtYXN0ZXIgJiYKKwllY2hvIHVwZGF0ZSA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHVwZGF0ZSAmJgorCWdpdCBwdXNoIG9yaWdpbiB1cGRhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlbW90ZXMvb3JpZ2luL3VwZGF0ZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0ZXN0Z2l0L29yaWdpbi9oZWFkcy91cGRhdGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1c2ggdXBkYXRlIHJlZnMgZGlzYWJsZWQgYnkgbm8tcHJpdmF0ZS11cGRhdGUnICcKKwkoY2QgbG9jYWwgJiYKKwllY2hvIG1vcmUtdXBkYXRlID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gbW9yZS11cGRhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRlc3RnaXQvb3JpZ2luL2hlYWRzL3VwZGF0ZSA+ZXhwZWN0ICYmCisJR0lUX1JFTU9URV9URVNUR0lUX05PX1BSSVZBVEVfVVBEQVRFPXQgZ2l0IHB1c2ggb3JpZ2luIHVwZGF0ZSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGVzdGdpdC9vcmlnaW4vaGVhZHMvdXBkYXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHVwZGF0ZSByZWZzIGZhaWx1cmUnICcKKwkoY2QgbG9jYWwgJiYKKwlnaXQgY2hlY2tvdXQgdXBkYXRlICYmCisJZWNobyAidXBkYXRlIGZhaWwiID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInVwZGF0ZSBmYWlsIiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgdGVzdGdpdC9vcmlnaW4vaGVhZHMvdXBkYXRlID5leHBlY3QgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZW52IEdJVF9SRU1PVEVfVEVTVEdJVF9GQUlMVVJFPSJub24tZmFzdCBmb3J3YXJkIiBcCisJCWdpdCBwdXNoIG9yaWdpbiB1cGRhdGUgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRlc3RnaXQvb3JpZ2luL2hlYWRzL3VwZGF0ZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworY2xlYW5fbWFyayAoKSB7CisJY3V0IC1mIDIgLWQgJyAnICIkMSIgfAorCWdpdCBjYXQtZmlsZSAtLWJhdGNoLWNoZWNrIHwKKwlncmVwIGNvbW1pdCB8CisJc29ydCA+JChiYXNlbmFtZSAiJDEiKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wZXIgZmFpbHVyZSBjaGVja3MgZm9yIGZldGNoaW5nJyAnCisJKGNkIGxvY2FsICYmCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9SRU1PVEVfVEVTVEdJVF9GQUlMVVJFPTEgZ2l0IGZldGNoIDI+ZXJyb3IgJiYKKwljYXQgZXJyb3IgJiYKKwlncmVwIC1xICJFcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtaW1wb3J0IiBlcnJvcgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvcGVyIGZhaWx1cmUgY2hlY2tzIGZvciBwdXNoaW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgbG9jYWwvZ2l0Lm1hcmtzIGxvY2FsL3Rlc3RnaXQubWFya3MiICYmCisJKGNkIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNyYXNoIG1hc3RlciAmJgorCWVjaG8gY3Jhc2ggPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBjcmFzaCAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfUkVNT1RFX1RFU1RHSVRfRkFJTFVSRT0xIGdpdCBwdXNoIC0tYWxsICYmCisJY2xlYW5fbWFyayAiLmdpdC90ZXN0Z2l0L29yaWdpbi9naXQubWFya3MiICYmCisJY2xlYW5fbWFyayAiLmdpdC90ZXN0Z2l0L29yaWdpbi90ZXN0Z2l0Lm1hcmtzIiAmJgorCXRlc3RfY21wIGdpdC5tYXJrcyB0ZXN0Z2l0Lm1hcmtzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIG1lc3NhZ2VzJyAnCisJKGNkIGxvY2FsICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ld19icmFuY2ggbWFzdGVyICYmCisJZWNobyBuZXcgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBuZXcgJiYKKwlnaXQgcHVzaCBvcmlnaW4gbmV3X2JyYW5jaCAmJgorCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwllY2hvIG5ldyA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG5ldyAmJgorCWdpdCBwdXNoIG9yaWdpbiBuZXdfYnJhbmNoIDI+IG1zZyAmJgorCSEgZ3JlcCAiXFtuZXcgYnJhbmNoXF0iIG1zZworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggSEVBRCcgJworCShjZCBzZXJ2ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyBtb3JlID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gbW9yZQorCSkgJiYKKwkoY2QgbG9jYWwgJiYKKwlnaXQgZmV0Y2ggb3JpZ2luIEhFQUQKKwkpICYmCisJY29tcGFyZV9yZWZzIHNlcnZlciBIRUFEIGxvY2FsIEZFVENIX0hFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdXJsJyAnCisJKGNkIHNlcnZlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIG1vcmUgPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBtb3JlCisJKSAmJgorCShjZCBsb2NhbCAmJgorCWdpdCBmZXRjaCAidGVzdGdpdDo6JHtQV0R9Ly4uL3NlcnZlciIKKwkpICYmCisJY29tcGFyZV9yZWZzIHNlcnZlciBIRUFEIGxvY2FsIEZFVENIX0hFQUQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1ODAyLWNvbm5lY3QtaGVscGVyLnNoIGIvdC90NTgwMi1jb25uZWN0LWhlbHBlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iN2E3ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTgwMi1jb25uZWN0LWhlbHBlci5zaApAQCAtMCwwICsxLDEwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2V4dDo6Y21kIHJlbW90ZSAiY29ubmVjdCIgaGVscGVyJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBpbml0aWFsICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHNlY29uZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0aGlyZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gInRpcCB0aHJlZSIgdGhyZWUgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBmb3VydGgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBjbG9uZSAnCisJY21kPSQoZWNobyAiZWNobyA+JjIgZXh0OjpzaCBpbnZva2VkICYmICVTIC4uIiB8IHNlZCAtZSAicy8gLyUgL2ciKSAmJgorCWdpdCBjbG9uZSAiZXh0OjpzaCAtYyAlUyUgLiIgZHN0ICYmCisJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyByZWZzL3RhZ3MvID5leHBlY3QgJiYKKwkoCisJCWNkIGRzdCAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsICJleHQ6OnNoIC1jICRjbWQiICYmCisJCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8gcmVmcy90YWdzLworCSkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGZvbGxvd2luZyB0YWcnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gZmlmdGggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIC1hIC1tICJ0aXAgZml2ZSIgZml2ZSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8gcmVmcy90YWdzLyA+ZXhwZWN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IHB1bGwgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyByZWZzL3RhZ3MvID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgYmFja2ZpbGxlZCB0YWcnICcKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gc2l4dGggJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIC1hIC1tICJ0aXAgdHdvIiB0d28gdGhyZWVeMSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8gcmVmcy90YWdzLyA+ZXhwZWN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IHB1bGwgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyByZWZzL3RhZ3MvID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgYmFja2ZpbGxlZCB0YWcgd2l0aG91dCBwcmltYXJ5IHRyYW5zZmVyJyAnCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSAidGlwIG9uZSAiIG9uZSB0d29eMSAmJgorCWdpdCBmb3ItZWFjaC1yZWYgcmVmcy9oZWFkcy8gcmVmcy90YWdzLyA+ZXhwZWN0ICYmCisJKAorCQljZCBkc3QgJiYKKwkJZ2l0IHB1bGwgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiByZWZzL2hlYWRzLyByZWZzL3RhZ3MvID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBmYWtlIGdpdC1kYWVtb24nICcKKwlta2RpciByZW1vdGUgJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVtb3RlL29uZS5naXQgJiYKKwlta2RpciByZW1vdGUvaG9zdCAmJgorCWdpdCBpbml0IC0tYmFyZSByZW1vdGUvaG9zdC90d28uZ2l0ICYmCisJd3JpdGVfc2NyaXB0IGZha2UtZGFlbW9uIDw8LVxFT0YgJiYKKwlnaXQgZGFlbW9uIC0taW5ldGQgXAorCQktLWluZm9ybWF0aXZlLWVycm9ycyBcCisJCS0tZXhwb3J0LWFsbCBcCisJCS0tYmFzZS1wYXRoPSIkVFJBU0hfRElSRUNUT1JZL3JlbW90ZSIgXAorCQktLWludGVycG9sYXRlZC1wYXRoPSIkVFJBU0hfRElSRUNUT1JZL3JlbW90ZS8lSCVEIiBcCisJCSIkVFJBU0hfRElSRUNUT1JZL3JlbW90ZSIKKwlFT0YKKwlleHBvcnQgVFJBU0hfRElSRUNUT1JZICYmCisJUEFUSD0kVFJBU0hfRElSRUNUT1JZOiRQQVRICisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dCBjb21tYW5kIGNhbiBjb25uZWN0IHRvIGdpdCBkYWVtb24gKG5vIHZob3N0KScgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgY2xvbmUgImV4dDo6ZmFrZS1kYWVtb24gJUcvb25lLmdpdCIgZHN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4dCBjb21tYW5kIGNhbiBjb25uZWN0IHRvIGdpdCBkYWVtb24gKHZob3N0KScgJworCXJtIC1yZiBkc3QgJiYKKwlnaXQgY2xvbmUgImV4dDo6ZmFrZS1kYWVtb24gJUcvdHdvLmdpdCAlVmhvc3QiIGRzdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU4MTAtcHJvdG8tZGlzYWJsZS1sb2NhbC5zaCBiL3QvdDU4MTAtcHJvdG8tZGlzYWJsZS1sb2NhbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjM1OTJkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTgxMC1wcm90by1kaXNhYmxlLWxvY2FsLnNoCkBAIC0wLDAgKzEsMTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRpc2FibGluZyBvZiBsb2NhbCBwYXRocyBpbiBjbG9uZS9mZXRjaCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1wcm90by1kaXNhYmxlLnNoIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IHRvIGNsb25lJyAnCisJdGVzdF9jb21taXQgb25lCisnCisKK3Rlc3RfcHJvdG8gImZpbGU6Ly8iIGZpbGUgImZpbGU6Ly8kUFdEIgordGVzdF9wcm90byAicGF0aCIgZmlsZSAuCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTgxMS1wcm90by1kaXNhYmxlLWdpdC5zaCBiL3QvdDU4MTEtcHJvdG8tZGlzYWJsZS1naXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGFjNmIyYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU4MTEtcHJvdG8tZGlzYWJsZS1naXQuc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGlzYWJsaW5nIG9mIGdpdC1vdmVyLXRjcCBpbiBjbG9uZS9mZXRjaCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1wcm90by1kaXNhYmxlLnNoIgorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1naXQtZGFlbW9uLnNoIgorc3RhcnRfZ2l0X2RhZW1vbgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZ2l0LWFjY2Vzc2libGUgcmVwbycgJworCWJhcmU9IiRHSVRfREFFTU9OX0RPQ1VNRU5UX1JPT1RfUEFUSC9yZXBvLmdpdCIgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwlnaXQgLS1iYXJlIGluaXQgIiRiYXJlIiAmJgorCWdpdCBwdXNoICIkYmFyZSIgSEVBRCAmJgorCT4iJGJhcmUvZ2l0LWRhZW1vbi1leHBvcnQtb2siICYmCisJZ2l0IC1DICIkYmFyZSIgY29uZmlnIGRhZW1vbi5yZWNlaXZlcGFjayB0cnVlCisnCisKK3Rlc3RfcHJvdG8gImdpdDovLyIgZ2l0ICIkR0lUX0RBRU1PTl9VUkwvcmVwby5naXQiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTgxMi1wcm90by1kaXNhYmxlLWh0dHAuc2ggYi90L3Q1ODEyLXByb3RvLWRpc2FibGUtaHR0cC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZDEwNWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTgxMi1wcm90by1kaXNhYmxlLWh0dHAuc2gKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGlzYWJsaW5nIG9mIGdpdC1vdmVyLWh0dHAgaW4gY2xvbmUvZmV0Y2gnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItcHJvdG8tZGlzYWJsZS5zaCIKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItaHR0cGQuc2giCitzdGFydF9odHRwZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZ2l0LWFjY2Vzc2libGUgcmVwbycgJworCWJhcmU9IiRIVFRQRF9ET0NVTUVOVF9ST09UX1BBVEgvcmVwby5naXQiICYmCisJdGVzdF9jb21taXQgb25lICYmCisJZ2l0IC0tYmFyZSBpbml0ICIkYmFyZSIgJiYKKwlnaXQgcHVzaCAiJGJhcmUiIEhFQUQgJiYKKwlnaXQgLUMgIiRiYXJlIiBjb25maWcgaHR0cC5yZWNlaXZlcGFjayB0cnVlCisnCisKK3Rlc3RfcHJvdG8gInNtYXJ0IGh0dHAiIGh0dHAgIiRIVFRQRF9VUkwvc21hcnQvcmVwby5naXQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1cmwgcmVkaXJlY3RzIHJlc3BlY3Qgd2hpdGVsaXN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9BTExPV19QUk9UT0NPTD1odHRwOmh0dHBzIFwKKwkJZ2l0IGNsb25lICIkSFRUUERfVVJML2Z0cC1yZWRpci9yZXBvLmdpdCIgMj5zdGRlcnIgJiYKKwl7CisJCXRlc3RfaTE4bmdyZXAgImZ0cC4qZGlzYWJsZWQiIHN0ZGVyciB8fAorCQl0ZXN0X2kxOG5ncmVwICJ5b3VyIGN1cmwgdmVyc2lvbiBpcyB0b28gb2xkIgorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VybCBsaW1pdHMgcmVkaXJlY3RzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsb25lICIkSFRUUERfVVJML2xvb3AtcmVkaXIvc21hcnQvcmVwby5naXQiCisnCisKK3N0b3BfaHR0cGQKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NTgxMy1wcm90by1kaXNhYmxlLXNzaC5zaCBiL3QvdDU4MTMtcHJvdG8tZGlzYWJsZS1zc2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWQ4NzdkNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDU4MTMtcHJvdG8tZGlzYWJsZS1zc2guc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGlzYWJsaW5nIG9mIGdpdC1vdmVyLXNzaCBpbiBjbG9uZS9mZXRjaCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1wcm90by1kaXNhYmxlLnNoIgorCitzZXR1cF9zc2hfd3JhcHBlcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXBvc2l0b3J5IHRvIGNsb25lJyAnCisJdGVzdF9jb21taXQgb25lICYmCisJbWtkaXIgcmVtb3RlICYmCisJZ2l0IGluaXQgLS1iYXJlIHJlbW90ZS9yZXBvLmdpdCAmJgorCWdpdCBwdXNoIHJlbW90ZS9yZXBvLmdpdCBIRUFECisnCisKK3Rlc3RfcHJvdG8gImhvc3Q6cGF0aCIgc3NoICJyZW1vdGU6cmVwby5naXQiCit0ZXN0X3Byb3RvICJzc2g6Ly8iIHNzaCAic3NoOi8vcmVtb3RlLyRQV0QvcmVtb3RlL3JlcG8uZ2l0IgordGVzdF9wcm90byAiZ2l0K3NzaDovLyIgc3NoICJnaXQrc3NoOi8vcmVtb3RlLyRQV0QvcmVtb3RlL3JlcG8uZ2l0IgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU4MTQtcHJvdG8tZGlzYWJsZS1leHQuc2ggYi90L3Q1ODE0LXByb3RvLWRpc2FibGUtZXh0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkNmY3ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q1ODE0LXByb3RvLWRpc2FibGUtZXh0LnNoCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGRpc2FibGluZyBvZiByZW1vdGUtaGVscGVyIHBhdGhzIGluIGNsb25lL2ZldGNoJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLXByb3RvLWRpc2FibGUuc2giCisKK3NldHVwX2V4dF93cmFwcGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnkgdG8gY2xvbmUnICcKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKwlta2RpciByZW1vdGUgJiYKKwlnaXQgaW5pdCAtLWJhcmUgcmVtb3RlL3JlcG8uZ2l0ICYmCisJZ2l0IHB1c2ggcmVtb3RlL3JlcG8uZ2l0IEhFQUQKKycKKwordGVzdF9wcm90byAicmVtb3RlLWhlbHBlciIgZXh0ICJleHQ6OmZha2UtcmVtb3RlICVTIHJlcG8uZ2l0IgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDU4MTUtc3VibW9kdWxlLXByb3Rvcy5zaCBiL3QvdDU4MTUtc3VibW9kdWxlLXByb3Rvcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNmY1NWExCi0tLSAvZGV2L251bGwKKysrIGIvdC90NTgxNS1zdWJtb2R1bGUtcHJvdG9zLnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHByb3RvY29sIHdoaXRlbGlzdGluZyB3aXRoIHN1Ym1vZHVsZXMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXByb3RvLWRpc2FibGUuc2gKKworc2V0dXBfZXh0X3dyYXBwZXIKK3NldHVwX3NzaF93cmFwcGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG9zaXRvcnkgd2l0aCBzdWJtb2R1bGVzJyAnCisJbWtkaXIgcmVtb3RlICYmCisJZ2l0IGluaXQgcmVtb3RlL3JlcG8uZ2l0ICYmCisJKGNkIHJlbW90ZS9yZXBvLmdpdCAmJiB0ZXN0X2NvbW1pdCBvbmUpICYmCisJIyBzdWJtb2R1bGUtYWRkIHNob3VsZCBwcm9iYWJseSB0cnVzdCB3aGF0IHdlIGZlZWQgaXQgb24gdGhlIGNtZGxpbmUsCisJIyBidXQgaXRzIGltcGxlbWVudGF0aW9uIGlzIG92ZXJseSBjb25zZXJ2YXRpdmUuCisJR0lUX0FMTE9XX1BST1RPQ09MPXNzaCBnaXQgc3VibW9kdWxlIGFkZCByZW1vdGU6cmVwby5naXQgc3NoLW1vZHVsZSAmJgorCUdJVF9BTExPV19QUk9UT0NPTD1leHQgZ2l0IHN1Ym1vZHVsZSBhZGQgImV4dDo6ZmFrZS1yZW1vdGUgJVMgcmVwby5naXQiIGV4dC1tb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3VibW9kdWxlcyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCByZWN1cnNlLXN1Ym1vZHVsZXMgZmFpbHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2xvbmUgLS1yZWN1cnNlLXN1Ym1vZHVsZXMgLiBkc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgaW5kaXZpZHVhbCB1cGRhdGVzJyAnCisJcm0gLXJmIGRzdCAmJgorCWdpdCBjbG9uZSAuIGRzdCAmJgorCWdpdCAtQyBkc3Qgc3VibW9kdWxlIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIG9mIHNzaCBhbGxvd2VkJyAnCisJZ2l0IC1DIGRzdCBzdWJtb2R1bGUgdXBkYXRlIHNzaC1tb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIG9mIGV4dCBub3QgYWxsb3dlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtQyBkc3Qgc3VibW9kdWxlIHVwZGF0ZSBleHQtbW9kdWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZXIgY2FuIG92ZXJyaWRlIHdoaXRlbGlzdCcgJworCUdJVF9BTExPV19QUk9UT0NPTD1leHQgZ2l0IC1DIGRzdCBzdWJtb2R1bGUgdXBkYXRlIGV4dC1tb2R1bGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q1OTAwLXJlcG8tc2VsZWN0aW9uLnNoIGIvdC90NTkwMC1yZXBvLXNlbGVjdGlvbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZDViNDE4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NTkwMC1yZXBvLXNlbGVjdGlvbi5zaApAQCAtMCwwICsxLDEwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NlbGVjdGluZyByZW1vdGUgcmVwbyBpbiBhbWJpZ3VvdXMgY2FzZXMnCisuIC4vdGVzdC1saWIuc2gKKworcmVzZXQoKSB7CisJcm0gLXJmIGZvbyBmb28uZ2l0IGZldGNoIGNsb25lCit9CisKK21ha2VfdHJlZSgpIHsKKwlnaXQgaW5pdCAiJDEiICYmCisJKGNkICIkMSIgJiYgdGVzdF9jb21taXQgIiQxIikKK30KKworbWFrZV9iYXJlKCkgeworCWdpdCBpbml0IC0tYmFyZSAiJDEiICYmCisJKGNkICIkMSIgJiYKKwkgdHJlZT1gZ2l0IGhhc2gtb2JqZWN0IC13IC10IHRyZWUgL2Rldi9udWxsYCAmJgorCSBjb21taXQ9JChlY2hvICIkMSIgfCBnaXQgY29tbWl0LXRyZWUgJHRyZWUpICYmCisJIGdpdCB1cGRhdGUtcmVmIEhFQUQgJGNvbW1pdAorCSkKK30KKworZ2V0KCkgeworCWdpdCBpbml0IC0tYmFyZSBmZXRjaCAmJgorCShjZCBmZXRjaCAmJiBnaXQgZmV0Y2ggIi4uLyQxIikgJiYKKwlnaXQgY2xvbmUgIiQxIiBjbG9uZQorfQorCitjaGVjaygpIHsKKwllY2hvICIkMSIgPmV4cGVjdCAmJgorCShjZCBmZXRjaCAmJiBnaXQgbG9nIC0xIC0tZm9ybWF0PSVzIEZFVENIX0hFQUQpID5hY3R1YWwuZmV0Y2ggJiYKKwkoY2QgY2xvbmUgJiYgZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyBIRUFEKSA+YWN0dWFsLmNsb25lICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5mZXRjaCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuY2xvbmUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmluZCAuZ2l0IGRpciBpbiB3b3JrdHJlZScgJworCXJlc2V0ICYmCisJbWFrZV90cmVlIGZvbyAmJgorCWdldCBmb28gJiYKKwljaGVjayBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b21hZ2ljYWxseSBhZGQgLmdpdCBzdWZmaXgnICcKKwlyZXNldCAmJgorCW1ha2VfYmFyZSBmb28uZ2l0ICYmCisJZ2V0IGZvbyAmJgorCWNoZWNrIGZvby5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0b21hZ2ljYWxseSBhZGQgLmdpdCBzdWZmaXggdG8gd29ya3RyZWUnICcKKwlyZXNldCAmJgorCW1ha2VfdHJlZSBmb28uZ2l0ICYmCisJZ2V0IGZvbyAmJgorCWNoZWNrIGZvby5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlZmVyIHdvcmt0cmVlIGZvbyBvdmVyIGJhcmUgZm9vLmdpdCcgJworCXJlc2V0ICYmCisJbWFrZV90cmVlIGZvbyAmJgorCW1ha2VfYmFyZSBmb28uZ2l0ICYmCisJZ2V0IGZvbyAmJgorCWNoZWNrIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVmZXIgYmFyZSBmb28gb3ZlciBiYXJlIGZvby5naXQnICcKKwlyZXNldCAmJgorCW1ha2VfYmFyZSBmb28gJiYKKwltYWtlX2JhcmUgZm9vLmdpdCAmJgorCWdldCBmb28gJiYKKwljaGVjayBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlzYW1iaWd1YXRlIHdpdGggZnVsbCBmb28uZ2l0JyAnCisJcmVzZXQgJiYKKwltYWtlX2JhcmUgZm9vICYmCisJbWFrZV9iYXJlIGZvby5naXQgJiYKKwlnZXQgZm9vLmdpdCAmJgorCWNoZWNrIGZvby5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2UgYXJlIG5vdCBmb29sZWQgYnkgbm9uLWdpdCBmb28gZGlyZWN0b3J5JyAnCisJcmVzZXQgJiYKKwltYWtlX2JhcmUgZm9vLmdpdCAmJgorCW1rZGlyIGZvbyAmJgorCWdldCBmb28gJiYKKwljaGVjayBmb28uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZWZlciBpbm5lciAuZ2l0IG92ZXIgb3V0ZXIgYmFyZScgJworCXJlc2V0ICYmCisJbWFrZV90cmVlIGZvbyAmJgorCW1ha2VfYmFyZSBmb28uZ2l0ICYmCisJbXYgZm9vLy5naXQgZm9vLmdpdCAmJgorCWdldCBmb28uZ2l0ICYmCisJY2hlY2sgZm9vCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAwMC1yZXYtbGlzdC1taXNjLnNoIGIvdC90NjAwMC1yZXYtbGlzdC1taXNjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNlNzUyY2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDAwLXJldi1saXN0LW1pc2Muc2gKQEAgLTAsMCArMSwxMDMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtaXNjZWxsYW5lb3VzIHJldi1saXN0IHRlc3RzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJZWNobyBjb250ZW50MSA+d2FudGVkX2ZpbGUgJiYKKwllY2hvIGNvbnRlbnQyID51bndhbnRlZF9maWxlICYmCisJZ2l0IGFkZCB3YW50ZWRfZmlsZSB1bndhbnRlZF9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1vYmplY3RzIGhlZWRzIHBhdGhzcGVjcycgJworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCAtLSB3YW50ZWRfZmlsZSA+b3V0cHV0ICYmCisJZ3JlcCB3YW50ZWRfZmlsZSBvdXRwdXQgJiYKKwkhIGdyZXAgdW53YW50ZWRfZmlsZSBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1vYmplY3RzIHdpdGggcGF0aHNwZWNzIGFuZCBkZWVwZXIgcGF0aHMnICcKKwlta2RpciBmb28gJiYKKwk+Zm9vL2ZpbGUgJiYKKwlnaXQgYWRkIGZvby9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSB0d28gJiYKKworCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCAtLSBmb28gPm91dHB1dCAmJgorCWdyZXAgZm9vL2ZpbGUgb3V0cHV0ICYmCisKKwlnaXQgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgLS0gZm9vL2ZpbGUgPm91dHB1dCAmJgorCWdyZXAgZm9vL2ZpbGUgb3V0cHV0ICYmCisJISBncmVwIHVud2FudGVkX2ZpbGUgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tb2JqZWN0cyB3aXRoIHBhdGhzcGVjcyBhbmQgY29waWVkIGZpbGVzJyAnCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGp1bmlvLXRlc3RjYXNlICYmCisJZ2l0IHJtIC1yZiAuICYmCisKKwlta2RpciB0d28gJiYKKwllY2hvIGZyb3R6ID5vbmUgJiYKKwljcCBvbmUgdHdvL3RocmVlICYmCisJZ2l0IGFkZCBvbmUgdHdvL3RocmVlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aGF0ICYmCisKKwlPTkU9JChnaXQgcmV2LXBhcnNlIEhFQUQ6b25lKSAmJgorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgSEVBRCB0d28gPm91dHB1dCAmJgorCWdyZXAgIiRPTkUgdHdvL3RocmVlIiBvdXRwdXQgJiYKKwkhIGdyZXAgb25lIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBBLi5CIGFuZCByZXYtbGlzdCBeQSBCIGFyZSB0aGUgc2FtZScgJworCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBhbm90aGVyICYmCisJZ2l0IHRhZyAtYSAtbSAiYW5ub3RhdGVkIiB2MS4wICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBedjEuMF4gdjEuMCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyB2MS4wXi4udjEuMCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wYWdhdGUgdW5pbnRlcmVzdGluZyBmbGFnIGRvd24gY29ycmVjdGx5JyAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBeSEVBRF57dHJlZX0gSEVBRF57dHJlZX0gPmFjdHVhbCAmJgorCT5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bWxlZnQgZmxhZyBiaXQgaXMgcHJvcGFnYXRlZCBkb3duIGZyb20gdGFnJyAnCisJZ2l0IGxvZyAtLWZvcm1hdD0iJW0gJXMiIC0tbGVmdC1yaWdodCB2MS4wLi4ubWFzdGVyID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJPiB0d28KKwk+IG9uZQorCTwgYW5vdGhlcgorCTwgdGhhdAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgY2FuIHNob3cgaW5kZXggb2JqZWN0cycgJworCSMgT2YgdGhlIGJsb2JzIGFuZCB0cmVlcyBpbiB0aGUgaW5kZXgsIG5vdGU6CisJIworCSMgICAtIHdlIGRvIG5vdCBzaG93IHR3by90aHJlZSwgYmVjYXVzZSBpdCBpcyB0aGUKKwkjICAgICBzYW1lIGJsb2IgYXMgIm9uZSIsIGFuZCB3ZSBzaG93IG9iamVjdHMgb25seSBvbmNlCisJIworCSMgICAtIHdlIGRvIHNob3cgdGhlIHRyZWUgInR3byIsIGJlY2F1c2UgaXQgaGFzIGEgdmFsaWQgY2FjaGUgdHJlZQorCSMgICAgIGZyb20gdGhlIGxhc3QgY29tbWl0CisJIworCSMgICAtIHdlIGRvIG5vdCBzaG93IHRoZSByb290IHRyZWU7IHNpbmNlIHdlIHVwZGF0ZWQgdGhlIGluZGV4LCBpdAorCSMgICAgIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBjYWNoZSB0cmVlCisJIworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk4ZTQwMjBiYjVhOGQ4Yzg3M2IyNWRlMTU5MzNlNzVjYzBmYzI3NWRmIG9uZQorCWQ5ZDNhNzQxN2I5NjA1Y2ZkODhlZTYzMDZiMjhkYWRjMjllNmFiMDggb25seS1pbi1pbmRleAorCTkyMDBiNjI4Y2Y5ZGM4ODNhODVhN2FiYzhkNmU2NzMwYmFlZTU4OWMgdHdvCisJRU9GCisJZWNobyBvbmx5LWluLWluZGV4ID5vbmx5LWluLWluZGV4ICYmCisJZ2l0IGFkZCBvbmx5LWluLWluZGV4ICYmCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyAtLWluZGV4ZWQtb2JqZWN0cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWJpc2VjdCBhbmQgLS1maXJzdC1wYXJlbnQgY2FuIG5vdCBiZSBjb21iaW5lZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLWJpc2VjdCAtLWZpcnN0LXBhcmVudCBIRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAwMS1yZXYtbGlzdC1ncmFmdC5zaCBiL3QvdDYwMDEtcmV2LWxpc3QtZ3JhZnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGVmY2QxMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMDEtcmV2LWxpc3QtZ3JhZnQuc2gKQEAgLTAsMCArMSwxMTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdSZXZpc2lvbiB0cmF2ZXJzYWwgdnMgZ3JhZnRzIGFuZCBwYXRoIGxpbWl0ZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvID5maWxlQSBmaWxlQSAmJgorCWVjaG8gPnN1YmRpci9maWxlQiBmaWxlQiAmJgorCWdpdCBhZGQgZmlsZUEgc3ViZGlyL2ZpbGVCICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiSW5pdGlhbCBpbiBvbmUgaGlzdG9yeS4iICYmCisJQTA9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRGAgJiYKKworCWVjaG8gPmZpbGVBIGZpbGVBIG1vZGlmaWVkICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiU2Vjb25kIGluIG9uZSBoaXN0b3J5LiIgJiYKKwlBMT1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYCAmJgorCisJZWNobyA+c3ViZGlyL2ZpbGVCIGZpbGVCIG1vZGlmaWVkICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiVGhpcmQgaW4gb25lIGhpc3RvcnkuIiAmJgorCUEyPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURgICYmCisKKwlybSAtZiAuZ2l0L3JlZnMvaGVhZHMvbWFzdGVyIC5naXQvaW5kZXggJiYKKworCWVjaG8gPmZpbGVBIGZpbGVBIGFnYWluICYmCisJZWNobyA+c3ViZGlyL2ZpbGVCIGZpbGVCIGFnYWluICYmCisJZ2l0IGFkZCBmaWxlQSBzdWJkaXIvZmlsZUIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJJbml0aWFsIGluIGFsdGVybmF0ZSBoaXN0b3J5LiIgJiYKKwlCMD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEYCAmJgorCisJZWNobyA+ZmlsZUEgZmlsZUEgbW9kaWZpZWQgaW4gYWx0ZXJuYXRlIGhpc3RvcnkgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJTZWNvbmQgaW4gYWx0ZXJuYXRlIGhpc3RvcnkuIiAmJgorCUIxPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURgICYmCisKKwllY2hvID5zdWJkaXIvZmlsZUIgZmlsZUIgbW9kaWZpZWQgaW4gYWx0ZXJuYXRlIGhpc3RvcnkgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJUaGlyZCBpbiBhbHRlcm5hdGUgaGlzdG9yeS4iICYmCisJQjI9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRGAgJiYKKwk6IGRvbmUKKycKKworY2hlY2sgKCkgeworCXR5cGU9JDEKKwlzaGlmdAorCisJYXJnPQorCXdoaWNoPWFyZworCXJtIC1mIHRlc3QuZXhwZWN0CisJZm9yIGEKKwlkbworCQlpZiB0ZXN0ICJ6JGEiID0gei0tCisJCXRoZW4KKwkJCXdoaWNoPWV4cGVjdAorCQkJY2hpbGQ9CisJCQljb250aW51ZQorCQlmaQorCQlpZiB0ZXN0ICIkd2hpY2giID0gYXJnCisJCXRoZW4KKwkJCWFyZz0iJGFyZyRhICIKKwkJCWNvbnRpbnVlCisJCWZpCisJCWlmIHRlc3QgIiR0eXBlIiA9IGJhc2ljCisJCXRoZW4KKwkJCWVjaG8gIiRhIgorCQllbHNlCisJCQlpZiB0ZXN0ICJ6JGNoaWxkIiAhPSB6CisJCQl0aGVuCisJCQkJZWNobyAiJGNoaWxkICRhIgorCQkJZmkKKwkJCWNoaWxkPSIkYSIKKwkJZmkKKwlkb25lID50ZXN0LmV4cGVjdAorCWlmIHRlc3QgIiR0eXBlIiAhPSBiYXNpYyAmJiB0ZXN0ICJ6JGNoaWxkIiAhPSB6CisJdGhlbgorCQllY2hvID4+dGVzdC5leHBlY3QgJGNoaWxkCisJZmkKKwlpZiB0ZXN0ICR0eXBlID0gYmFzaWMKKwl0aGVuCisJCWdpdCByZXYtbGlzdCAkYXJnID50ZXN0LmFjdHVhbAorCWVsaWYgdGVzdCAkdHlwZSA9IHBhcmVudHMKKwl0aGVuCisJCWdpdCByZXYtbGlzdCAtLXBhcmVudHMgJGFyZyA+dGVzdC5hY3R1YWwKKwllbGlmIHRlc3QgJHR5cGUgPSBwYXJlbnRzLXJhdworCXRoZW4KKwkJZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLXByZXR0eT1yYXcgJGFyZyB8CisJCXNlZCAtbiAtZSAncy9eY29tbWl0IC8vcCcgPnRlc3QuYWN0dWFsCisJZmkKKwl0ZXN0X2NtcCB0ZXN0LmV4cGVjdCB0ZXN0LmFjdHVhbAorfQorCitmb3IgdHlwZSBpbiBiYXNpYyBwYXJlbnRzIHBhcmVudHMtcmF3CitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGhvdXQgZ3JhZnRzJyAiCisJCXJtIC1mIC5naXQvaW5mby9ncmFmdHMgJiYKKwkJY2hlY2sgJHR5cGUgJEIyIC0tICRCMiAkQjEgJEIwCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBncmFmdHMnICIKKwkJZWNobyAnJEIwICRBMicgPi5naXQvaW5mby9ncmFmdHMgJiYKKwkJY2hlY2sgJHR5cGUgJEIyIC0tICRCMiAkQjEgJEIwICRBMiAkQTEgJEEwCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aG91dCBncmFmdHMsIHdpdGggcGF0aGxpbWl0JyAiCisJCXJtIC1mIC5naXQvaW5mby9ncmFmdHMgJiYKKwkJY2hlY2sgJHR5cGUgJEIyIHN1YmRpciAtLSAkQjIgJEIwCisJIgorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBncmFmdHMsIHdpdGggcGF0aGxpbWl0JyAiCisJCWVjaG8gJyRCMCAkQTInID4uZ2l0L2luZm8vZ3JhZnRzICYmCisJCWNoZWNrICR0eXBlICRCMiBzdWJkaXIgLS0gJEIyICRCMCAkQTIgJEEwCisJIgorCitkb25lCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoIGIvdC90NjAwMi1yZXYtbGlzdC1iaXNlY3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDNhZDc3MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMDItcmV2LWxpc3QtYmlzZWN0LnNoCkBAIC0wLDAgKzEsMjM4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEpvbiBTZXltb3VyCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyBnaXQgcmV2LWxpc3QgLS1iaXNlY3QgZnVuY3Rpb25hbGl0eScKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi10NjAwMC5zaCAjIHQ2eHh4IHNwZWNpZmljIGZ1bmN0aW9ucworCisjIHVzYWdlOiB0ZXN0X2Jpc2VjdGlvbiBtYXgtZGlmZiBiaXNlY3Qtb3B0aW9uIGhlYWQgXnBydW5lLi4uCisjCisjIGUuZy4gdGVzdF9iaXNlY3Rpb24gMSAtLWJpc2VjdCBsMSBebDAKKyMKK3Rlc3RfYmlzZWN0aW9uX2RpZmYoKQoreworCV9tYXhfZGlmZj0kMQorCV9iaXNlY3Rfb3B0aW9uPSQyCisJc2hpZnQgMgorCV9iaXNlY3Rpb249JChnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uICIkQCIpCisJX2xpc3Rfc2l6ZT0kKGdpdCByZXYtbGlzdCAiJEAiIHwgd2MgLWwpCisgICAgICAgIF9oZWFkPSQxCisJc2hpZnQgMQorCV9iaXNlY3Rpb25fc2l6ZT0kKGdpdCByZXYtbGlzdCAkX2Jpc2VjdGlvbiAiJEAiIHwgd2MgLWwpCisJWyAtbiAiJF9saXN0X3NpemUiIC1hIC1uICIkX2Jpc2VjdGlvbl9zaXplIiBdIHx8CisJZXJyb3IgInRlc3RfYmlzZWN0aW9uX2RpZmYgZmFpbGVkIgorCisJIyBUZXN0IGlmIGJpc2VjdGlvbiBzaXplIGlzIGNsb3NlIHRvIGhhbGYgb2YgbGlzdCBzaXplIHdpdGhpbgorCSMgdG9sZXJhbmNlLgorCSMKKwlfYmlzZWN0X2Vycj1gZXhwciAkX2xpc3Rfc2l6ZSAtICRfYmlzZWN0aW9uX3NpemUgXCogMmAKKwl0ZXN0ICIkX2Jpc2VjdF9lcnIiIC1sdCAwICYmIF9iaXNlY3RfZXJyPWBleHByIDAgLSAkX2Jpc2VjdF9lcnJgCisJX2Jpc2VjdF9lcnI9YGV4cHIgJF9iaXNlY3RfZXJyIC8gMmAgOyAjIGZsb29yCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkiYmlzZWN0aW9uIGRpZmYgJF9iaXNlY3Rfb3B0aW9uICRfaGVhZCAkKiA8PSAkX21heF9kaWZmIiBcCisJJ3Rlc3QgJF9iaXNlY3RfZXJyIC1sZSAkX21heF9kaWZmJworfQorCitkYXRlID5wYXRoMAorZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBwYXRoMAorc2F2ZV90YWcgdHJlZSBnaXQgd3JpdGUtdHJlZQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAwIiBoaWRlX2Vycm9yIHNhdmVfdGFnIHJvb3QgdW5pcXVlX2NvbW1pdCByb290IHRyZWUKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMSIgc2F2ZV90YWcgbDAgdW5pcXVlX2NvbW1pdCBsMCB0cmVlIC1wIHJvb3QKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMiIgc2F2ZV90YWcgbDEgdW5pcXVlX2NvbW1pdCBsMSB0cmVlIC1wIGwwCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDMiIHNhdmVfdGFnIGwyIHVuaXF1ZV9jb21taXQgbDIgdHJlZSAtcCBsMQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA0IiBzYXZlX3RhZyBhMCB1bmlxdWVfY29tbWl0IGEwIHRyZWUgLXAgbDIKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNSIgc2F2ZV90YWcgYTEgdW5pcXVlX2NvbW1pdCBhMSB0cmVlIC1wIGEwCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDYiIHNhdmVfdGFnIGIxIHVuaXF1ZV9jb21taXQgYjEgdHJlZSAtcCBhMAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA3IiBzYXZlX3RhZyBjMSB1bmlxdWVfY29tbWl0IGMxIHRyZWUgLXAgYjEKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowOCIgc2F2ZV90YWcgYjIgdW5pcXVlX2NvbW1pdCBiMiB0cmVlIC1wIGIxCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDkiIHNhdmVfdGFnIGIzIHVuaXF1ZV9jb21taXQgYjIgdHJlZSAtcCBiMgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjEwIiBzYXZlX3RhZyBjMiB1bmlxdWVfY29tbWl0IGMyIHRyZWUgLXAgYzEgLXAgYjIKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxMSIgc2F2ZV90YWcgYzMgdW5pcXVlX2NvbW1pdCBjMyB0cmVlIC1wIGMyCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTIiIHNhdmVfdGFnIGEyIHVuaXF1ZV9jb21taXQgYTIgdHJlZSAtcCBhMQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjEzIiBzYXZlX3RhZyBhMyB1bmlxdWVfY29tbWl0IGEzIHRyZWUgLXAgYTIKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxNCIgc2F2ZV90YWcgYjQgdW5pcXVlX2NvbW1pdCBiNCB0cmVlIC1wIGIzIC1wIGEzCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTUiIHNhdmVfdGFnIGE0IHVuaXF1ZV9jb21taXQgYTQgdHJlZSAtcCBhMyAtcCBiNCAtcCBjMworb25fY29tbWl0dGVyX2RhdGUgIjAwOjE2IiBzYXZlX3RhZyBsMyB1bmlxdWVfY29tbWl0IGwzIHRyZWUgLXAgYTQKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxNyIgc2F2ZV90YWcgbDQgdW5pcXVlX2NvbW1pdCBsNCB0cmVlIC1wIGwzCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTgiIHNhdmVfdGFnIGw1IHVuaXF1ZV9jb21taXQgbDUgdHJlZSAtcCBsNAorZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkKHRhZyBsNSkKKworCisjICAgICBFCisjICAgIC8gXAorIyAgIGUxICB8CisjICAgfCAgIHwKKyMgICBlMiAgfAorIyAgIHwgICB8CisjICAgZTMgIHwKKyMgICB8ICAgfAorIyAgIGU0ICB8CisjICAgfCAgIHwKKyMgICB8ICAgZjEKKyMgICB8ICAgfAorIyAgIHwgICBmMgorIyAgIHwgICB8CisjICAgfCAgIGYzCisjICAgfCAgIHwKKyMgICB8ICAgZjQKKyMgICB8ICAgfAorIyAgIGU1ICB8CisjICAgfCAgIHwKKyMgICBlNiAgfAorIyAgIHwgICB8CisjICAgZTcgIHwKKyMgICB8ICAgfAorIyAgIGU4ICB8CisjICAgIFwgLworIyAgICAgRgorCisKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMCIgaGlkZV9lcnJvciBzYXZlX3RhZyBGIHVuaXF1ZV9jb21taXQgRiB0cmVlCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDEiIHNhdmVfdGFnIGU4IHVuaXF1ZV9jb21taXQgZTggdHJlZSAtcCBGCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDIiIHNhdmVfdGFnIGU3IHVuaXF1ZV9jb21taXQgZTcgdHJlZSAtcCBlOAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAzIiBzYXZlX3RhZyBlNiB1bmlxdWVfY29tbWl0IGU2IHRyZWUgLXAgZTcKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNCIgc2F2ZV90YWcgZTUgdW5pcXVlX2NvbW1pdCBlNSB0cmVlIC1wIGU2Citvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDUiIHNhdmVfdGFnIGY0IHVuaXF1ZV9jb21taXQgZjQgdHJlZSAtcCBGCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDYiIHNhdmVfdGFnIGYzIHVuaXF1ZV9jb21taXQgZjMgdHJlZSAtcCBmNAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA3IiBzYXZlX3RhZyBmMiB1bmlxdWVfY29tbWl0IGYyIHRyZWUgLXAgZjMKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowOCIgc2F2ZV90YWcgZjEgdW5pcXVlX2NvbW1pdCBmMSB0cmVlIC1wIGYyCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDkiIHNhdmVfdGFnIGU0IHVuaXF1ZV9jb21taXQgZTQgdHJlZSAtcCBlNQorb25fY29tbWl0dGVyX2RhdGUgIjAwOjEwIiBzYXZlX3RhZyBlMyB1bmlxdWVfY29tbWl0IGUzIHRyZWUgLXAgZTQKK29uX2NvbW1pdHRlcl9kYXRlICIwMDoxMSIgc2F2ZV90YWcgZTIgdW5pcXVlX2NvbW1pdCBlMiB0cmVlIC1wIGUzCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MTIiIHNhdmVfdGFnIGUxIHVuaXF1ZV9jb21taXQgZTEgdHJlZSAtcCBlMgorb25fY29tbWl0dGVyX2RhdGUgIjAwOjEzIiBzYXZlX3RhZyBFIHVuaXF1ZV9jb21taXQgRSB0cmVlIC1wIGUxIC1wIGYxCisKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMCIgaGlkZV9lcnJvciBzYXZlX3RhZyBVIHVuaXF1ZV9jb21taXQgVSB0cmVlCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDEiIHNhdmVfdGFnIHUwIHVuaXF1ZV9jb21taXQgdTAgdHJlZSAtcCBVCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDEiIHNhdmVfdGFnIHUxIHVuaXF1ZV9jb21taXQgdTEgdHJlZSAtcCB1MAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjAyIiBzYXZlX3RhZyB1MiB1bmlxdWVfY29tbWl0IHUyIHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowMyIgc2F2ZV90YWcgdTMgdW5pcXVlX2NvbW1pdCB1MyB0cmVlIC1wIHUwCitvbl9jb21taXR0ZXJfZGF0ZSAiMDA6MDQiIHNhdmVfdGFnIHU0IHVuaXF1ZV9jb21taXQgdTQgdHJlZSAtcCB1MAorb25fY29tbWl0dGVyX2RhdGUgIjAwOjA1IiBzYXZlX3RhZyB1NSB1bmlxdWVfY29tbWl0IHU1IHRyZWUgLXAgdTAKK29uX2NvbW1pdHRlcl9kYXRlICIwMDowNiIgc2F2ZV90YWcgViB1bmlxdWVfY29tbWl0IFYgdHJlZSAtcCB1MSAtcCB1MiAtcCB1MyAtcCB1NCAtcCB1NQorCit0ZXN0X3NlcXVlbmNlKCkKK3sKKwlfYmlzZWN0X29wdGlvbj0kMQorCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBsMCBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gbDEgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGwyIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBhMCBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYTEgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGEyIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBhMyBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYjEgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGIyIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBiMyBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gYzEgXnJvb3QKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGMyIF5yb290CisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBjMyBecm9vdAorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gRSBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZTEgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGUyIF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBlMyBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZTQgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGU1IF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBlNiBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZTcgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGYxIF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBmMiBeRgorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gZjMgXkYKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIGY0IF5GCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiBFIF5GCisKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDEgJF9iaXNlY3Rfb3B0aW9uIFYgXlUKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIFYgXlUgXnUxIF51MiBedTMKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIHUxIF5VCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiB1MiBeVQorCXRlc3RfYmlzZWN0aW9uX2RpZmYgMCAkX2Jpc2VjdF9vcHRpb24gdTMgXlUKKwl0ZXN0X2Jpc2VjdGlvbl9kaWZmIDAgJF9iaXNlY3Rfb3B0aW9uIHU0IF5VCisJdGVzdF9iaXNlY3Rpb25fZGlmZiAwICRfYmlzZWN0X29wdGlvbiB1NSBeVQorCisjCisjIHRoZSBmb2xsb3dpbmcgaWxsdXN0cmF0ZXMgTGludXMnIGJpbmFyeSBidWcgYmxhdHQgaWRlYS4KKyMKKyMgYXNzdW1lIHRoZSBidWcgaXMgYWN0dWFsbHkgYXQgbDMsIGJ1dCB5b3UgZG9uJ3Qga25vdyB0aGF0IC0gYWxsIHlvdSBrbm93IGlzIHRoYXQgbDMgaXMgYnJva2VuCisjIGFuZCBpdCB3YXNuJ3QgYnJva2VuIGJlZm9yZQorIworIyBrZWVwIGJpc2VjdGluZyB0aGUgbGlzdCwgYWR2YW5jaW5nIHRoZSAiYmFkIiBoZWFkIGFuZCBhY2N1bXVsYXRpbmcgImdvb2QiIGhlYWRzIHVudGlsCisjIHRoZSBiaXNlY3Rpb24gcG9pbnQgaXMgdGhlIGhlYWQgLSB0aGlzIGlzIHRoZSBiYWQgcG9pbnQuCisjCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gbDUgXnJvb3QiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGw1IF5yb290JyA8PEVPRgorYzMKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGw1IF5yb290IF5jMyIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDUgXnJvb3QgXmMzJyA8PEVPRgorYjQKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGw1IF5yb290IF5jMyBeYjQiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGw1IF5jMyBeYjQnIDw8RU9GCitsMworRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gbDMgXnJvb3QgXmMzIF5iNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDMgXnJvb3QgXmMzIF5iNCcgPDxFT0YKK2E0CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBsNSBeYjMgXmEzIF5iNCBeYTQiICdnaXQgcmV2LWxpc3QgJF9iaXNlY3Rfb3B0aW9uIGwzIF5iMyBeYTMgXmE0JyA8PEVPRgorbDMKK0VPRgorCisjCisjIGlmIGwzIGlzIGJhZCwgdGhlbiBsNCBpcyBiYWQgdG9vIC0gc28gYWR2YW5jZSB0aGUgYmFkIHBvaW50ZXIgYnkgbWFraW5nIGI0IHRoZSBrbm93biBiYWQgaGVhZAorIworCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiJF9iaXNlY3Rfb3B0aW9uIGw0IF5hMiBeYTMgXmIgXmE0IiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBsNCBeYTIgXmEzIF5hNCcgPDxFT0YKK2wzCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBsMyBeYTIgXmEzIF5iIF5hNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gbDMgXmEyIF5hMyBeYTQnIDw8RU9GCitsMworRU9GCisKKyMgZm91bmQhCisKKyMKKyMgYXMgYW5vdGhlciBleGFtcGxlLCBsZXQncyBjb25zaWRlciBhNCB0byBiZSB0aGUgYmFkIGhlYWQsIGluIHdoaWNoIGNhc2UKKyMKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gYTQgXmEyIF5hMyBeYjQnIDw8RU9GCitjMgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gYTQgXmEyIF5hMyBeYjQgXmMyIiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCBeYzInIDw8RU9GCitjMworRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gYTQgXmEyIF5hMyBeYjQgXmMyIF5jMyIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gYTQgXmEyIF5hMyBeYjQgXmMyIF5jMycgPDxFT0YKK2E0CitFT0YKKworIyBmb3VuZCEKKworIworIyBvciBjb25zaWRlciBjMyB0byBiZSB0aGUgYmFkIGhlYWQKKyMKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIiRfYmlzZWN0X29wdGlvbiBhNCBeYTIgXmEzIF5iNCIgJ2dpdCByZXYtbGlzdCAkX2Jpc2VjdF9vcHRpb24gYTQgXmEyIF5hMyBeYjQnIDw8RU9GCitjMgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICIkX2Jpc2VjdF9vcHRpb24gYzMgXmEyIF5hMyBeYjQgXmMyIiAnZ2l0IHJldi1saXN0ICRfYmlzZWN0X29wdGlvbiBjMyBeYTIgXmEzIF5iNCBeYzInIDw8RU9GCitjMworRU9GCisKKyMgZm91bmQhCisKK30KKwordGVzdF9zZXF1ZW5jZSAiLS1iaXNlY3QiCisKKyMKKyMKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAwMy1yZXYtbGlzdC10b3BvLW9yZGVyLnNoIGIvdC90NjAwMy1yZXYtbGlzdC10b3BvLW9yZGVyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI0ZDE4MzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDAzLXJldi1saXN0LXRvcG8tb3JkZXIuc2gKQEAgLTAsMCArMSw0NDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9uIFNleW1vdXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdHMgZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBmdW5jdGlvbmFsaXR5JworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXQ2MDAwLnNoICMgdDZ4eHggc3BlY2lmaWMgZnVuY3Rpb25zCisKK2xpc3RfZHVwbGljYXRlcygpCit7CisgICAgIiRAIiB8IHNvcnQgfCB1bmlxIC1kCit9CisKK2RhdGUgPnBhdGgwCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHBhdGgwCitzYXZlX3RhZyB0cmVlIGdpdCB3cml0ZS10cmVlCitvbl9kYXRlcyAiMDA6MDAiICIwMDowMCIgaGlkZV9lcnJvciBzYXZlX3RhZyByb290IHVuaXF1ZV9jb21taXQgcm9vdCB0cmVlCitvbl9kYXRlcyAiMDA6MDEiICIwMDowMSIgc2F2ZV90YWcgbDAgdW5pcXVlX2NvbW1pdCBsMCB0cmVlIC1wIHJvb3QKK29uX2RhdGVzICIwMDowMiIgIjAwOjAyIiBzYXZlX3RhZyBsMSB1bmlxdWVfY29tbWl0IGwxIHRyZWUgLXAgbDAKK29uX2RhdGVzICIwMDowMyIgIjAwOjAzIiBzYXZlX3RhZyBsMiB1bmlxdWVfY29tbWl0IGwyIHRyZWUgLXAgbDEKK29uX2RhdGVzICIwMDowNCIgIjAwOjA0IiBzYXZlX3RhZyBhMCB1bmlxdWVfY29tbWl0IGEwIHRyZWUgLXAgbDIKK29uX2RhdGVzICIwMDowNSIgIjAwOjA1IiBzYXZlX3RhZyBhMSB1bmlxdWVfY29tbWl0IGExIHRyZWUgLXAgYTAKK29uX2RhdGVzICIwMDowNiIgIjAwOjA2IiBzYXZlX3RhZyBiMSB1bmlxdWVfY29tbWl0IGIxIHRyZWUgLXAgYTAKK29uX2RhdGVzICIwMDowNyIgIjAwOjA3IiBzYXZlX3RhZyBjMSB1bmlxdWVfY29tbWl0IGMxIHRyZWUgLXAgYjEKK29uX2RhdGVzICIwMDowOCIgIjAwOjA4IiBhc19hdXRob3IgZm9vYmFyQGV4YW1wbGUuY29tIHNhdmVfdGFnIGIyIHVuaXF1ZV9jb21taXQgYjIgdHJlZSAtcCBiMQorb25fZGF0ZXMgIjAwOjA5IiAiMDA6MDkiIHNhdmVfdGFnIGIzIHVuaXF1ZV9jb21taXQgYjMgdHJlZSAtcCBiMgorb25fZGF0ZXMgIjAwOjEwIiAiMDA6MTAiIHNhdmVfdGFnIGMyIHVuaXF1ZV9jb21taXQgYzIgdHJlZSAtcCBjMSAtcCBiMgorb25fZGF0ZXMgIjAwOjExIiAiMDA6MTEiIHNhdmVfdGFnIGMzIHVuaXF1ZV9jb21taXQgYzMgdHJlZSAtcCBjMgorb25fZGF0ZXMgIjAwOjEyIiAiMDA6MDAiIHNhdmVfdGFnIGEyIHVuaXF1ZV9jb21taXQgYTIgdHJlZSAtcCBhMQorb25fZGF0ZXMgIjAwOjEzIiAiMDA6MDEiIHNhdmVfdGFnIGEzIHVuaXF1ZV9jb21taXQgYTMgdHJlZSAtcCBhMgorb25fZGF0ZXMgIjAwOjE0IiAiMDA6MTQiIHNhdmVfdGFnIGI0IHVuaXF1ZV9jb21taXQgYjQgdHJlZSAtcCBiMyAtcCBhMworb25fZGF0ZXMgIjAwOjE1IiAiMDA6MTUiIHNhdmVfdGFnIGE0IHVuaXF1ZV9jb21taXQgYTQgdHJlZSAtcCBhMyAtcCBiNCAtcCBjMworb25fZGF0ZXMgIjAwOjE2IiAiMDA6MTYiIHNhdmVfdGFnIGwzIHVuaXF1ZV9jb21taXQgbDMgdHJlZSAtcCBhNAorb25fZGF0ZXMgIjAwOjE3IiAiMDA6MTciIHNhdmVfdGFnIGw0IHVuaXF1ZV9jb21taXQgbDQgdHJlZSAtcCBsMworb25fZGF0ZXMgIjAwOjE4IiAiMDA6MTgiIHNhdmVfdGFnIGw1IHVuaXF1ZV9jb21taXQgbDUgdHJlZSAtcCBsNAorb25fZGF0ZXMgIjAwOjE5IiAiMDA6MTkiIHNhdmVfdGFnIG0xIHVuaXF1ZV9jb21taXQgbTEgdHJlZSAtcCBhNCAtcCBjMworb25fZGF0ZXMgIjAwOjIwIiAiMDA6MjAiIHNhdmVfdGFnIG0yIHVuaXF1ZV9jb21taXQgbTIgdHJlZSAtcCBjMyAtcCBhNAorb25fZGF0ZXMgIjAwOjIxIiAiMDA6MjEiIGhpZGVfZXJyb3Igc2F2ZV90YWcgYWx0X3Jvb3QgdW5pcXVlX2NvbW1pdCBhbHRfcm9vdCB0cmVlCitvbl9kYXRlcyAiMDA6MjIiICIwMDoyMiIgc2F2ZV90YWcgcjAgdW5pcXVlX2NvbW1pdCByMCB0cmVlIC1wIGFsdF9yb290Citvbl9kYXRlcyAiMDA6MjMiICIwMDoyMyIgc2F2ZV90YWcgcjEgdW5pcXVlX2NvbW1pdCByMSB0cmVlIC1wIHIwCitvbl9kYXRlcyAiMDA6MjQiICIwMDoyNCIgc2F2ZV90YWcgbDVyMSB1bmlxdWVfY29tbWl0IGw1cjEgdHJlZSAtcCBsNSAtcCByMQorb25fZGF0ZXMgIjAwOjI1IiAiMDA6MjUiIHNhdmVfdGFnIHIxbDUgdW5pcXVlX2NvbW1pdCByMWw1IHRyZWUgLXAgcjEgLXAgbDUKKworCitoaWRlX2Vycm9yIHNhdmVfdGFnIGUxIGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTEgdHJlZQorc2F2ZV90YWcgZTIgYXNfYXV0aG9yIGVAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBlMiB0cmVlIC1wIGUxCitzYXZlX3RhZyBmMSBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGYxIHRyZWUgLXAgZTEKK3NhdmVfdGFnIGUzIGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTMgdHJlZSAtcCBlMgorc2F2ZV90YWcgZjIgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmMiB0cmVlIC1wIGYxCitzYXZlX3RhZyBlNCBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGU0IHRyZWUgLXAgZTMgLXAgZjIKK3NhdmVfdGFnIGU1IGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTUgdHJlZSAtcCBlNAorc2F2ZV90YWcgZjMgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmMyB0cmVlIC1wIGYyCitzYXZlX3RhZyBmNCBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGY0IHRyZWUgLXAgZjMKK3NhdmVfdGFnIGU2IGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTYgdHJlZSAtcCBlNSAtcCBmNAorc2F2ZV90YWcgZjUgYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmNSB0cmVlIC1wIGY0CitzYXZlX3RhZyBmNiBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGY2IHRyZWUgLXAgZjUgLXAgZTYKK3NhdmVfdGFnIGU3IGFzX2F1dGhvciBlQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZTcgdHJlZSAtcCBlNgorc2F2ZV90YWcgZTggYXNfYXV0aG9yIGVAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBlOCB0cmVlIC1wIGU3CitzYXZlX3RhZyBlOSBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGU5IHRyZWUgLXAgZTgKK3NhdmVfdGFnIGY3IGFzX2F1dGhvciBmQGV4YW1wbGUuY29tIHVuaXF1ZV9jb21taXQgZjcgdHJlZSAtcCBmNgorc2F2ZV90YWcgZjggYXNfYXV0aG9yIGZAZXhhbXBsZS5jb20gdW5pcXVlX2NvbW1pdCBmOCB0cmVlIC1wIGY3CitzYXZlX3RhZyBmOSBhc19hdXRob3IgZkBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGY5IHRyZWUgLXAgZjgKK3NhdmVfdGFnIGUxMCBhc19hdXRob3IgZUBleGFtcGxlLmNvbSB1bmlxdWVfY29tbWl0IGUxIHRyZWUgLXAgZTkgLXAgZjgKKworaGlkZV9lcnJvciBzYXZlX3RhZyBnMCB1bmlxdWVfY29tbWl0IGcwIHRyZWUKK3NhdmVfdGFnIGcxIHVuaXF1ZV9jb21taXQgZzEgdHJlZSAtcCBnMAorc2F2ZV90YWcgaDEgdW5pcXVlX2NvbW1pdCBnMiB0cmVlIC1wIGcwCitzYXZlX3RhZyBnMiB1bmlxdWVfY29tbWl0IGczIHRyZWUgLXAgZzEgLXAgaDEKK3NhdmVfdGFnIGgyIHVuaXF1ZV9jb21taXQgZzQgdHJlZSAtcCBnMgorc2F2ZV90YWcgZzMgdW5pcXVlX2NvbW1pdCBnNSB0cmVlIC1wIGcyCitzYXZlX3RhZyBnNCB1bmlxdWVfY29tbWl0IGc2IHRyZWUgLXAgZzMgLXAgaDIKKworZ2l0IHVwZGF0ZS1yZWYgSEVBRCAkKHRhZyBsNSkKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IGhhcyBjb3JyZWN0IG51bWJlciBvZiBlbnRyaWVzJyAnZ2l0IHJldi1saXN0IEhFQUQgfCB3YyAtbCB8IHRyIC1kIFwiIFwiJyA8PEVPRgorMTkKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnc2ltcGxlIHRvcG8gb3JkZXInICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBIRUFEJyA8PEVPRgorbDUKK2w0CitsMworYTQKK2MzCitjMgorYzEKK2I0CithMworYTIKK2ExCitiMworYjIKK2IxCithMAorbDIKK2wxCitsMAorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdzaW1wbGUgZGF0ZSBvcmRlcicgJ2dpdCByZXYtbGlzdCAtLWRhdGUtb3JkZXIgIEhFQUQnIDw8RU9GCitsNQorbDQKK2wzCithNAorYjQKK2EzCithMgorYzMKK2MyCitiMworYjIKK2MxCitiMQorYTEKK2EwCitsMgorbDEKK2wwCityb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBhdXRob3ItZGF0ZSBvcmRlcicgJ2dpdCByZXYtbGlzdCAtLWF1dGhvci1kYXRlLW9yZGVyICBIRUFEJyA8PEVPRgorbDUKK2w0CitsMworYTQKK2I0CitjMworYzIKK2IzCitiMgorYzEKK2IxCithMworYTIKK2ExCithMAorbDIKK2wxCitsMAorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICd0d28gZGlhbW9uZHMgdG9wbyBvcmRlciAoZzYpJyAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgZzQnIDw8RU9GCitnNAoraDIKK2czCitnMgoraDEKK2cxCitnMAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBoZWFkcycgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgYTMgYjMgYzMnIDw8RU9GCithMworYTIKK2ExCitjMworYzIKK2MxCitiMworYjIKK2IxCithMAorbDIKK2wxCitsMAorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBoZWFkcywgcHJ1bmUgYXQgYTEnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGEzIGIzIGMzIF5hMScgPDxFT0YKK2EzCithMgorYzMKK2MyCitjMQorYjMKK2IyCitiMQorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBoZWFkcywgcHJ1bmUgYXQgbDEnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGEzIGIzIGMzIF5sMScgPDxFT0YKK2EzCithMgorYTEKK2MzCitjMgorYzEKK2IzCitiMgorYjEKK2EwCitsMgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdjcm9zcy1lcG9jaCwgaGVhZCBhdCBsNSwgcHJ1bmUgYXQgbDEnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGw1IF5sMScgPDxFT0YKK2w1CitsNAorbDMKK2E0CitjMworYzIKK2MxCitiNAorYTMKK2EyCithMQorYjMKK2IyCitiMQorYTAKK2wyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ2R1cGxpY2F0ZWQgaGVhZCBhcmd1bWVudHMnICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGw1IGw1IF5sMScgPDxFT0YKK2w1CitsNAorbDMKK2E0CitjMworYzIKK2MxCitiNAorYTMKK2EyCithMQorYjMKK2IyCitiMQorYTAKK2wyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3BydW5lIG5lYXIgdG9wbycgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgYTQgXmMzJyA8PEVPRgorYTQKK2I0CithMworYTIKK2ExCitiMworRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJoZWFkIGhhcyBubyBwYXJlbnQiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICByb290JyA8PEVPRgorcm9vdAorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICJ0d28gbm9kZXMgLSBvbmUgaGVhZCwgb25lIGJhc2UiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsMCcgPDxFT0YKK2wwCityb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgInRocmVlIG5vZGVzIG9uZSBoZWFkLCBvbmUgaW50ZXJuYWwsIG9uZSBiYXNlIiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgbDEnIDw8RU9GCitsMQorbDAKK3Jvb3QKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAibGluZWFyIHBydW5lIGwyIF5yb290IiAnZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciAgbDIgXnJvb3QnIDw8RU9GCitsMgorbDEKK2wwCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsMiBebDAiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsMiBebDAnIDw8RU9GCitsMgorbDEKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAibGluZWFyIHBydW5lIGwyIF5sMSIgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGwyIF5sMScgPDxFT0YKK2wyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsNSBeYTQiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsNSBeYTQnIDw8RU9GCitsNQorbDQKK2wzCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImxpbmVhciBwcnVuZSBsNSBebDMiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICBsNSBebDMnIDw8RU9GCitsNQorbDQKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAibGluZWFyIHBydW5lIGw1IF5sNCIgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGw1IF5sNCcgPDxFT0YKK2w1CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIm1heC1jb3VudCAxMCAtIHRvcG8gb3JkZXIiICdnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyICAtLW1heC1jb3VudD0xMCBsNScgPDxFT0YKK2w1CitsNAorbDMKK2E0CitjMworYzIKK2MxCitiNAorYTMKK2EyCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgIm1heC1jb3VudCAxMCAtIG5vbiB0b3BvIG9yZGVyIiAnZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEwIGw1JyA8PEVPRgorbDUKK2w0CitsMworYTQKK2I0CithMworYTIKK2MzCitjMgorYjMKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnLS1tYXgtYWdlPWMzLCBubyAtLXRvcG8tb3JkZXInICJnaXQgcmV2LWxpc3QgLS1tYXgtYWdlPSQoY29tbWl0X2RhdGUgYzMpIGw1IiA8PEVPRgorbDUKK2w0CitsMworYTQKK2I0CithMworYTIKK2MzCitFT0YKKworIworIyB0aGlzIHRlc3QgZmFpbHMgb24gLS10b3BvLW9yZGVyIC0gYSBmaXggaXMgcmVxdWlyZWQKKyMKKyN0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnLS1tYXgtYWdlPWMzLCAtLXRvcG8tb3JkZXInICJnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIC0tbWF4LWFnZT0kKGNvbW1pdF9kYXRlIGMzKSBsNSIgPDxFT0YKKyNsNQorI2w0CisjbDMKKyNhNAorI2MzCisjYjQKKyNhMworI2EyCisjRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdvbmUgc3BlY2lmaWVkIGhlYWQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBhNCwgYzMsIC0tdG9wby1vcmRlcicgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGE0IGMzIiA8PEVPRgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdvbmUgc3BlY2lmaWVkIGhlYWQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBjMywgYTQsIC0tdG9wby1vcmRlcicgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgLS10b3BvLW9yZGVyIGMzIGE0IiA8PEVPRgorRU9GCisKK3Rlc3Rfb3V0cHV0X2V4cGVjdF9zdWNjZXNzICdvbmUgc3BlY2lmaWVkIGhlYWQgcmVhY2hhYmxlIGZyb20gYW5vdGhlciBhNCwgYzMsIG5vIC0tdG9wby1vcmRlcicgImxpc3RfZHVwbGljYXRlcyBnaXQgcmV2LWxpc3QgYTQgYzMiIDw8RU9GCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ29uZSBzcGVjaWZpZWQgaGVhZCByZWFjaGFibGUgZnJvbSBhbm90aGVyIGMzLCBhNCwgbm8gLS10b3BvLW9yZGVyJyAibGlzdF9kdXBsaWNhdGVzIGdpdCByZXYtbGlzdCBjMyBhNCIgPDxFT0YKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnZ3JhcGggd2l0aCBjMyBhbmQgYTQgcGFyZW50cyBvZiBoZWFkJyAibGlzdF9kdXBsaWNhdGVzIGdpdCByZXYtbGlzdCBtMSIgPDxFT0YKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAnZ3JhcGggd2l0aCBhNCBhbmQgYzMgcGFyZW50cyBvZiBoZWFkJyAibGlzdF9kdXBsaWNhdGVzIGdpdCByZXYtbGlzdCBtMiIgPDxFT0YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWFkIF5oZWFkIC0tdG9wby1vcmRlciIgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGEzIF5hMycgPDxFT0YKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJoZWFkIF5oZWFkIG5vIC0tdG9wby1vcmRlciIgJ2dpdCByZXYtbGlzdCBhMyBeYTMnIDw8RU9GCitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSB0b3BvIG9yZGVyIChsNXIxKScgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIGw1cjEnIDw8RU9GCitsNXIxCityMQorcjAKK2FsdF9yb290CitsNQorbDQKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorYTEKK2IzCitiMgorYjEKK2EwCitsMgorbDEKK2wwCityb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSB0b3BvIG9yZGVyIChyMWw1KScgJ2dpdCByZXYtbGlzdCAtLXRvcG8tb3JkZXIgIHIxbDUnIDw8RU9GCityMWw1CitsNQorbDQKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorYTEKK2IzCitiMgorYjEKK2EwCitsMgorbDEKK2wwCityb290CityMQorcjAKK2FsdF9yb290CitFT0YKKwordGVzdF9vdXRwdXRfZXhwZWN0X3N1Y2Nlc3MgImRvbid0IHByaW50IHRoaW5ncyB1bnJlYWNoYWJsZSBmcm9tIG9uZSBicmFuY2giICJnaXQgcmV2LWxpc3QgYTMgXmIzIC0tdG9wby1vcmRlciIgPDxFT0YKK2EzCithMgorYTEKK0VPRgorCit0ZXN0X291dHB1dF9leHBlY3Rfc3VjY2VzcyAiLS10b3BvLW9yZGVyIGE0IGwzIiAiZ2l0IHJldi1saXN0IC0tdG9wby1vcmRlciBhNCBsMyIgPDxFT0YKK2wzCithNAorYzMKK2MyCitjMQorYjQKK2EzCithMgorYTEKK2IzCitiMgorYjEKK2EwCitsMgorbDEKK2wwCityb290CitFT0YKKworIworIworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDQtcmV2LWxpc3QtcGF0aC1vcHRpbS5zaCBiL3QvdDYwMDQtcmV2LWxpc3QtcGF0aC1vcHRpbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZThjNDJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAwNC1yZXYtbGlzdC1wYXRoLW9wdGltLnNoCkBAIC0wLDAgKzEsOTYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmV2LWxpc3QgdHJpdmlhbCBwYXRoIG9wdGltaXphdGlvbiB0ZXN0CisKKyAgIGQvejEKKyAgIGIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiMQorICAgby0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotLS0tbyBtYXN0ZXIKKyAgLyAgICAgICAgICAgICAgICAgICAgICAgIC8KKyBvLS0tLS0tLS0tby0tLS1vLS0tLW8tLS0tbyBzaWRlCisgYTAgICAgICAgIGMwICAgYzEgICBhMSAgIGMyCisgZC9mMCAgICAgIGQvZjEKKyBkL3owCisKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWVjaG8gSGVsbG8gPmEgJiYKKwlta2RpciBkICYmCisJZWNobyBXb3JsZCA+ZC9mICYmCisJZWNobyBXb3JsZCA+ZC96ICYmCisJZ2l0IGFkZCBhIGQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgJiYKKwlnaXQgdGFnIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBwYXRoLW9wdGltaXphdGlvbiAnCisJdGVzdF90aWNrICYmCisJY29tbWl0PSQoZWNobyAiVW5jaGFuZ2VkIHRyZWUiIHwgZ2l0IGNvbW1pdC10cmVlICJIRUFEXnt0cmVlfSIgLXAgSEVBRCkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1saXN0ICRjb21taXQgfCB3YyAtbCkgPSAyICYmCisJdGVzdCAkKGdpdCByZXYtbGlzdCAkY29tbWl0IC0tIC4gfCB3YyAtbCkgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1cnRoZXIgc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSAmJgorCWVjaG8gSXJyZWxldmFudCA+YyAmJgorCWVjaG8gSXJyZWxldmFudCA+ZC9mICYmCisJZ2l0IGFkZCBjIGQvZiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlNpZGUgbWFrZXMgYW4gaXJyZWxldmFudCBjb21taXQiICYmCisJZ2l0IHRhZyBzaWRlX2MwICYmCisJZWNobyAiTW9yZSBJcnJlbGV2YW5jeSIgPmMgJiYKKwlnaXQgYWRkIGMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIG1ha2VzIGFub3RoZXIgaXJyZWxldmFudCBjb21taXQiICYmCisJZWNobyBCeWUgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIHRvdWNoZXMgYSIgJiYKKwlnaXQgdGFnIHNpZGVfYTEgJiYKKwllY2hvICJZZXQgbW9yZSBJcnJlbGV2YW5jeSIgPmMgJiYKKwlnaXQgYWRkIGMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIG1ha2VzIHlldCBhbm90aGVyIGlycmVsZXZhbnQgY29tbWl0IiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIEFub3RoZXIgPmIgJiYKKwllY2hvIE11bmdlZCA+ZC96ICYmCisJZ2l0IGFkZCBiIGQveiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIk1hc3RlciB0b3VjaGVzIGIiICYmCisJZ2l0IHRhZyBtYXN0ZXJfYjAgJiYKKwlnaXQgbWVyZ2Ugc2lkZSAmJgorCWVjaG8gVG91Y2hlZCA+YiAmJgorCWdpdCBhZGQgYiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIk1hc3RlciB0b3VjaGVzIGIgYWdhaW4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGggb3B0aW1pemF0aW9uIDInICcKKwlnaXQgcmV2LXBhcnNlIHNpZGVfYTEgaW5pdGlhbCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCAtLSBhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aHNwZWMgd2l0aCBsZWFkaW5nIHBhdGgnICcKKwlnaXQgcmV2LXBhcnNlIG1hc3Rlcl4gbWFzdGVyX2IwIHNpZGVfYzAgaW5pdGlhbCA+ZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCAtLSBkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aHNwZWMgd2l0aCBnbG9iICgxKScgJworCWdpdCByZXYtcGFyc2UgbWFzdGVyXiBtYXN0ZXJfYjAgc2lkZV9jMCBpbml0aWFsID5leHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCBIRUFEIC0tICJkLyoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aHNwZWMgd2l0aCBnbG9iICgyKScgJworCWdpdCByZXYtcGFyc2Ugc2lkZV9jMCBpbml0aWFsID5leHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCBIRUFEIC0tICJkL1thLW1dKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDUtcmV2LWxpc3QtY291bnQuc2ggYi90L3Q2MDA1LXJldi1saXN0LWNvdW50LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiNjQ4MjIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDA1LXJldi1saXN0LWNvdW50LnNoCkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQgYW5kIC0tc2tpcCB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKyAgICBmb3IgbiBpbiAxIDIgMyA0IDUgOyBkbyBcCisgICAgICAgIGVjaG8gJG4gPiBhIDsgXAorICAgICAgICBnaXQgYWRkIGEgOyBcCisgICAgICAgIGdpdCBjb21taXQgLW0gIiRuIiA7IFwKKyAgICBkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIG9wdGlvbnMnICcKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgfCB3YyAtbCkgPSA1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWF4LWNvdW50JyAnCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTAgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTMgfCB3YyAtbCkgPSAzICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTUgfCB3YyAtbCkgPSA1ICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tbWF4LWNvdW50PTEwIHwgd2MgLWwpID0gNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1heC1jb3VudCBhbGwgZm9ybXMnICcKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1tYXgtY291bnQ9MSB8IHdjIC1sKSA9IDEgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLTEgfCB3YyAtbCkgPSAxICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC1uMSB8IHdjIC1sKSA9IDEgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLW4gMSB8IHdjIC1sKSA9IDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1za2lwJyAnCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0wIHwgd2MgLWwpID0gNSAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyB8IHdjIC1sKSA9IDIgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1za2lwPTUgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0xMCB8IHdjIC1sKSA9IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1za2lwIC0tbWF4LWNvdW50JyAnCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0wIC0tbWF4LWNvdW50PTAgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0wIC0tbWF4LWNvdW50PTEwIHwgd2MgLWwpID0gNSAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0wIHwgd2MgLWwpID0gMCAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0xIHwgd2MgLWwpID0gMSAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0yIHwgd2MgLWwpID0gMiAmJgorICAgIHRlc3QgJChnaXQgcmV2LWxpc3QgSEVBRCAtLXNraXA9MyAtLW1heC1jb3VudD0xMCB8IHdjIC1sKSA9IDIgJiYKKyAgICB0ZXN0ICQoZ2l0IHJldi1saXN0IEhFQUQgLS1za2lwPTUgLS1tYXgtY291bnQ9MTAgfCB3YyAtbCkgPSAwICYmCisgICAgdGVzdCAkKGdpdCByZXYtbGlzdCBIRUFEIC0tc2tpcD0xMCAtLW1heC1jb3VudD0xMCB8IHdjIC1sKSA9IDAKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaCBiL3QvdDYwMDYtcmV2LWxpc3QtZm9ybWF0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3N2Q0YzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDA2LXJldi1saXN0LWZvcm1hdC5zaApAQCAtMCwwICsxLDQ3NCBAQAorIyEvYmluL3NoCisKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEplbnMgTGVobWFubgorIyBDb3B5cmlnaHQgKGMpIDIwMTEgQWxleGV5IFNodW1raW4gKCsgbm9uLVVURi04IGNvbW1pdCBlbmNvZGluZyB0ZXN0cykKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJldi1saXN0IC0tcHJldHR5PWZvcm1hdCB0ZXN0JworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCisKK3Rlc3RfdGljaworIyBUZXN0ZWQgbm9uLVVURi04IGVuY29kaW5nCit0ZXN0X2VuY29kaW5nPSJJU084ODU5LTEiCisKKyMgU3RyaW5nICJhZGRlZCIgaW4gR2VybWFuCisjICh0cmFuc2xhdGVkIHdpdGggR29vZ2xlIFRyYW5zbGF0ZSksCisjIGVuY29kZWQgaW4gVVRGLTgsIHVzZWQgYXMgYSBjb21taXQgbG9nIG1lc3NhZ2UgYmVsb3cuCithZGRlZF91dGY4X3BhcnQ9JChwcmludGYgIlwzMDNcMjc0IikKK2FkZGVkX3V0ZjhfcGFydF9pc284ODU5MT0kKGVjaG8gIiRhZGRlZF91dGY4X3BhcnQiIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcpCithZGRlZD0kKHByaW50ZiAiYWRkZWQgKGhpbnp1Z2VmJHthZGRlZF91dGY4X3BhcnR9Z3QpIGZvbyIpCithZGRlZF9pc284ODU5MT0kKGVjaG8gIiRhZGRlZCIgfCBpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZykKKyMgc2FtZSBidXQgImNoYW5nZWQiCitjaGFuZ2VkX3V0ZjhfcGFydD0kKHByaW50ZiAiXDMwM1wyNDQiKQorY2hhbmdlZF91dGY4X3BhcnRfaXNvODg1OTE9JChlY2hvICIkY2hhbmdlZF91dGY4X3BhcnQiIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcpCitjaGFuZ2VkPSQocHJpbnRmICJjaGFuZ2VkIChnZSR7Y2hhbmdlZF91dGY4X3BhcnR9bmRlcnQpIGZvbyIpCitjaGFuZ2VkX2lzbzg4NTkxPSQoZWNobyAiJGNoYW5nZWQiIHwgaWNvbnYgLWYgdXRmLTggLXQgJHRlc3RfZW5jb2RpbmcpCisKKyMgQ291bnQgb2YgY2hhciB0byB0cnVuY2F0ZQorIyBOdW1iZXIgaXMgY2hvc2VuIHNvLCB0aGF0IG5vbi1BQ1NJSSBjaGFyYWN0ZXJzCisjIChzZWUgJGFkZGVkX3V0ZjhfcGFydCBhbmQgJGNoYW5nZWRfdXRmOF9wYXJ0KQorIyBmYWxsIGludG8gdHJ1bmNhdGVkIHBhcnRzIG9mIGFwcHJvcHJpYXRlIHdvcmRzIGJvdGggZnJvbSBsZWZ0IGFuZCByaWdodAordHJ1bmNhdGVfY291bnQ9MjAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwk6ID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb25maWcgaTE4bi5jb21taXRFbmNvZGluZyAkdGVzdF9lbmNvZGluZyAmJgorCWVjaG8gIiRhZGRlZF9pc284ODU5MSIgfCBnaXQgY29tbWl0IC1GIC0gJiYKKwloZWFkMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwloZWFkMV9zaG9ydD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCAkaGVhZDEpICYmCisJdHJlZTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6KSAmJgorCXRyZWUxX3Nob3J0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0ICR0cmVlMSkgJiYKKwllY2hvICIkY2hhbmdlZCIgPiBmb28gJiYKKwllY2hvICIkY2hhbmdlZF9pc284ODU5MSIgfCBnaXQgY29tbWl0IC1hIC1GIC0gJiYKKwloZWFkMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwloZWFkMl9zaG9ydD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydCAkaGVhZDIpICYmCisJdHJlZTI9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQ6KSAmJgorCXRyZWUyX3Nob3J0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0ICR0cmVlMikgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgaTE4bi5jb21taXRFbmNvZGluZworJworCisjIHVzYWdlOiB0ZXN0X2Zvcm1hdCBuYW1lIGZvcm1hdF9zdHJpbmcgW2ZhaWx1cmVdIDxleHBlY3RlZF9vdXRwdXQKK3Rlc3RfZm9ybWF0ICgpIHsKKwljYXQgPmV4cGVjdC4kMQorCXRlc3RfZXhwZWN0XyR7Mzotc3VjY2Vzc30gImZvcm1hdCAkMSIgIgorCQlnaXQgcmV2LWxpc3QgLS1wcmV0dHk9Zm9ybWF0OickMicgbWFzdGVyID5vdXRwdXQuJDEgJiYKKwkJdGVzdF9jbXAgZXhwZWN0LiQxIG91dHB1dC4kMQorCSIKK30KKworIyBGZWVkIHRvIC0tZm9ybWF0IHRvIHByb3ZpZGUgcHJlZGljdGFibGUgY29sb3JlZCBzZXF1ZW5jZXMuCitBVVRPX0NPTE9SPSclQyhhdXRvLHJlZClmb28lQyhhdXRvLHJlc2V0KScKK2hhc19jb2xvciAoKSB7CisJcHJpbnRmICdcMDMzWzMxbWZvb1wwMzNbbVxuJyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0ICIkMSIKK30KKworaGFzX25vX2NvbG9yICgpIHsKKwllY2hvIGZvbyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0ICIkMSIKK30KKwordGVzdF9mb3JtYXQgcGVyY2VudCAlJWggPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyVoCitjb21taXQgJGhlYWQxCislaAorRU9GCisKK3Rlc3RfZm9ybWF0IGhhc2ggJUglbiVoIDw8RU9GCitjb21taXQgJGhlYWQyCiskaGVhZDIKKyRoZWFkMl9zaG9ydAorY29tbWl0ICRoZWFkMQorJGhlYWQxCiskaGVhZDFfc2hvcnQKK0VPRgorCit0ZXN0X2Zvcm1hdCB0cmVlICVUJW4ldCA8PEVPRgorY29tbWl0ICRoZWFkMgorJHRyZWUyCiskdHJlZTJfc2hvcnQKK2NvbW1pdCAkaGVhZDEKKyR0cmVlMQorJHRyZWUxX3Nob3J0CitFT0YKKwordGVzdF9mb3JtYXQgcGFyZW50cyAlUCVuJXAgPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyRoZWFkMQorJGhlYWQxX3Nob3J0Citjb21taXQgJGhlYWQxCisKKworRU9GCisKKyMgd2UgZG9uJ3QgdGVzdCByZWxhdGl2ZSBoZXJlCit0ZXN0X2Zvcm1hdCBhdXRob3IgJWFuJW4lYWUlbiVhZCVuJWFEJW4lYXQgPDxFT0YKK2NvbW1pdCAkaGVhZDIKK0EgVSBUaG9yCithdXRob3JAZXhhbXBsZS5jb20KK1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCitUaHUsIDcgQXByIDIwMDUgMTU6MTM6MTMgLTA3MDAKKzExMTI5MTE5OTMKK2NvbW1pdCAkaGVhZDEKK0EgVSBUaG9yCithdXRob3JAZXhhbXBsZS5jb20KK1RodSBBcHIgNyAxNToxMzoxMyAyMDA1IC0wNzAwCitUaHUsIDcgQXByIDIwMDUgMTU6MTM6MTMgLTA3MDAKKzExMTI5MTE5OTMKK0VPRgorCit0ZXN0X2Zvcm1hdCBjb21taXR0ZXIgJWNuJW4lY2UlbiVjZCVuJWNEJW4lY3QgPDxFT0YKK2NvbW1pdCAkaGVhZDIKK0MgTyBNaXR0ZXIKK2NvbW1pdHRlckBleGFtcGxlLmNvbQorVGh1IEFwciA3IDE1OjEzOjEzIDIwMDUgLTA3MDAKK1RodSwgNyBBcHIgMjAwNSAxNToxMzoxMyAtMDcwMAorMTExMjkxMTk5MworY29tbWl0ICRoZWFkMQorQyBPIE1pdHRlcgorY29tbWl0dGVyQGV4YW1wbGUuY29tCitUaHUgQXByIDcgMTU6MTM6MTMgMjAwNSAtMDcwMAorVGh1LCA3IEFwciAyMDA1IDE1OjEzOjEzIC0wNzAwCisxMTEyOTExOTkzCitFT0YKKwordGVzdF9mb3JtYXQgZW5jb2RpbmcgJWUgPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyR0ZXN0X2VuY29kaW5nCitjb21taXQgJGhlYWQxCiskdGVzdF9lbmNvZGluZworRU9GCisKK3Rlc3RfZm9ybWF0IHN1YmplY3QgJXMgPDxFT0YKK2NvbW1pdCAkaGVhZDIKKyRjaGFuZ2VkCitjb21taXQgJGhlYWQxCiskYWRkZWQKK0VPRgorCit0ZXN0X2Zvcm1hdCBzdWJqZWN0LXRydW5jYXRlZCAiJTwoJHRydW5jYXRlX2NvdW50LHRydW5jKSVzIiA8PEVPRgorY29tbWl0ICRoZWFkMgorY2hhbmdlZCAoZ2Uke2NoYW5nZWRfdXRmOF9wYXJ0fW5kZXJ0KS4uCitjb21taXQgJGhlYWQxCithZGRlZCAoaGluenVnZWYke2FkZGVkX3V0ZjhfcGFydH1ndC4uCitFT0YKKwordGVzdF9mb3JtYXQgYm9keSAlYiA8PEVPRgorY29tbWl0ICRoZWFkMgorY29tbWl0ICRoZWFkMQorRU9GCisKK3Rlc3RfZm9ybWF0IHJhdy1ib2R5ICVCIDw8RU9GCitjb21taXQgJGhlYWQyCiskY2hhbmdlZAorCitjb21taXQgJGhlYWQxCiskYWRkZWQKKworRU9GCisKK3Rlc3RfZm9ybWF0IGNvbG9ycyAlQ3JlZGZvbyVDZ3JlZW5iYXIlQ2JsdWViYXolQ3Jlc2V0eHl6enkgPDxFT0YKK2NvbW1pdCAkaGVhZDIKKxtbMzFtZm9vG1szMm1iYXIbWzM0bWJhehtbbXh5enp5Citjb21taXQgJGhlYWQxCisbWzMxbWZvbxtbMzJtYmFyG1szNG1iYXobW214eXp6eQorRU9GCisKK3Rlc3RfZm9ybWF0IGFkdmFuY2VkLWNvbG9ycyAnJUMocmVkIHllbGxvdyBib2xkKWZvbyVDKHJlc2V0KScgPDxFT0YKK2NvbW1pdCAkaGVhZDIKKxtbMTszMTs0M21mb28bW20KK2NvbW1pdCAkaGVhZDEKKxtbMTszMTs0M21mb28bW20KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclQyhhdXRvKSBkb2VzIG5vdCBlbmFibGUgY29sb3IgYnkgZGVmYXVsdCcgJworCWdpdCBsb2cgLS1mb3JtYXQ9JEFVVE9fQ09MT1IgLTEgPmFjdHVhbCAmJgorCWhhc19ub19jb2xvciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJUMoYXV0bykgZW5hYmxlcyBjb2xvcnMgZm9yIGNvbG9yLmRpZmYnICcKKwlnaXQgLWMgY29sb3IuZGlmZj1hbHdheXMgbG9nIC0tZm9ybWF0PSRBVVRPX0NPTE9SIC0xID5hY3R1YWwgJiYKKwloYXNfY29sb3IgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8pIGVuYWJsZXMgY29sb3JzIGZvciBjb2xvci51aScgJworCWdpdCAtYyBjb2xvci51aT1hbHdheXMgbG9nIC0tZm9ybWF0PSRBVVRPX0NPTE9SIC0xID5hY3R1YWwgJiYKKwloYXNfY29sb3IgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyVDKGF1dG8pIHJlc3BlY3RzIC0tY29sb3InICcKKwlnaXQgbG9nIC0tZm9ybWF0PSRBVVRPX0NPTE9SIC0xIC0tY29sb3IgPmFjdHVhbCAmJgorCWhhc19jb2xvciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJUMoYXV0bykgcmVzcGVjdHMgLS1uby1jb2xvcicgJworCWdpdCAtYyBjb2xvci51aT1hbHdheXMgbG9nIC0tZm9ybWF0PSRBVVRPX0NPTE9SIC0xIC0tbm8tY29sb3IgPmFjdHVhbCAmJgorCWhhc19ub19jb2xvciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJyVDKGF1dG8pIHJlc3BlY3RzIC0tY29sb3I9YXV0byAoc3Rkb3V0IGlzIHR0eSknICcKKwl0ZXN0X3Rlcm1pbmFsIGVudiBURVJNPXZ0MTAwIFwKKwkJZ2l0IGxvZyAtLWZvcm1hdD0kQVVUT19DT0xPUiAtMSAtLWNvbG9yPWF1dG8gPmFjdHVhbCAmJgorCWhhc19jb2xvciBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJUMoYXV0bykgcmVzcGVjdHMgLS1jb2xvcj1hdXRvIChzdGRvdXQgbm90IHR0eSknICcKKwkoCisJCVRFUk09dnQxMDAgJiYgZXhwb3J0IFRFUk0gJiYKKwkJZ2l0IGxvZyAtLWZvcm1hdD0kQVVUT19DT0xPUiAtMSAtLWNvbG9yPWF1dG8gPmFjdHVhbCAmJgorCQloYXNfbm9fY29sb3IgYWN0dWFsCisJKQorJworCitpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyA+IGNvbW1pdC1tc2cgPDxFT0YKK1Rlc3QgcHJpbnRpbmcgb2YgY29tcGxleCBib2RpZXMKKworVGhpcyBjb21taXQgbWVzc2FnZSBpcyBtdWNoIGxvbmdlciB0aGFuIHRoZSBvdGhlcnMsCithbmQgaXQgd2lsbCBiZSBlbmNvZGVkIGluICR0ZXN0X2VuY29kaW5nLiBXZSBzaG91bGQgdGhlcmVmb3JlCitpbmNsdWRlIGFuIElTTzg4NTkgY2hhcmFjdGVyOiDCoWJ1ZW5vIQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbXBsZXggYm9keScgJworCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkdGVzdF9lbmNvZGluZyAmJgorCWVjaG8gY2hhbmdlMiA+Zm9vICYmIGdpdCBjb21taXQgLWEgLUYgY29tbWl0LW1zZyAmJgorCWhlYWQzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWhlYWQzX3Nob3J0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0ICRoZWFkMykKKycKKwordGVzdF9mb3JtYXQgY29tcGxleC1lbmNvZGluZyAlZSA8PEVPRgorY29tbWl0ICRoZWFkMworJHRlc3RfZW5jb2RpbmcKK2NvbW1pdCAkaGVhZDIKKyR0ZXN0X2VuY29kaW5nCitjb21taXQgJGhlYWQxCiskdGVzdF9lbmNvZGluZworRU9GCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdCAlcyA8PEVPRgorY29tbWl0ICRoZWFkMworVGVzdCBwcmludGluZyBvZiBjb21wbGV4IGJvZGllcworY29tbWl0ICRoZWFkMgorJGNoYW5nZWRfaXNvODg1OTEKK2NvbW1pdCAkaGVhZDEKKyRhZGRlZF9pc284ODU5MQorRU9GCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdC10cnVuYyAiJTwoJHRydW5jYXRlX2NvdW50LHRydW5jKSVzIiA8PEVPRgorY29tbWl0ICRoZWFkMworVGVzdCBwcmludGluZyBvZiBjLi4KK2NvbW1pdCAkaGVhZDIKK2NoYW5nZWQgKGdlJHtjaGFuZ2VkX3V0ZjhfcGFydF9pc284ODU5MX1uZGVydCkuLgorY29tbWl0ICRoZWFkMQorYWRkZWQgKGhpbnp1Z2VmJHthZGRlZF91dGY4X3BhcnRfaXNvODg1OTF9Z3QuLgorRU9GCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdC1tdHJ1bmMgIiU8KCR0cnVuY2F0ZV9jb3VudCxtdHJ1bmMpJXMiIDw8RU9GCitjb21taXQgJGhlYWQzCitUZXN0IHByaW4uLmV4IGJvZGllcworY29tbWl0ICRoZWFkMgorY2hhbmdlZCAoLi5kZXJ0KSBmb28KK2NvbW1pdCAkaGVhZDEKK2FkZGVkIChoaS4uZiR7YWRkZWRfdXRmOF9wYXJ0X2lzbzg4NTkxfWd0KSBmb28KK0VPRgorCit0ZXN0X2Zvcm1hdCBjb21wbGV4LXN1YmplY3QtbHRydW5jICIlPCgkdHJ1bmNhdGVfY291bnQsbHRydW5jKSVzIiA8PEVPRgorY29tbWl0ICRoZWFkMworLi4gb2YgY29tcGxleCBib2RpZXMKK2NvbW1pdCAkaGVhZDIKKy4uZ2VkIChnZSR7Y2hhbmdlZF91dGY4X3BhcnRfaXNvODg1OTF9bmRlcnQpIGZvbworY29tbWl0ICRoZWFkMQorLi4gKGhpbnp1Z2VmJHthZGRlZF91dGY4X3BhcnRfaXNvODg1OTF9Z3QpIGZvbworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZXhwZWN0ZWQgbWVzc2FnZXMgKGZvciB0ZXN0ICViKScgJworCWNhdCA8PC1FT0YgPmV4cGVjdGVkLnV0Zi04ICYmCisJY29tbWl0ICRoZWFkMworCVRoaXMgY29tbWl0IG1lc3NhZ2UgaXMgbXVjaCBsb25nZXIgdGhhbiB0aGUgb3RoZXJzLAorCWFuZCBpdCB3aWxsIGJlIGVuY29kZWQgaW4gJHRlc3RfZW5jb2RpbmcuIFdlIHNob3VsZCB0aGVyZWZvcmUKKwlpbmNsdWRlIGFuIElTTzg4NTkgY2hhcmFjdGVyOiDCoWJ1ZW5vIQorCisJY29tbWl0ICRoZWFkMgorCWNvbW1pdCAkaGVhZDEKKwlFT0YKKwlpY29udiAtZiB1dGYtOCAtdCAkdGVzdF9lbmNvZGluZyBleHBlY3RlZC51dGYtOCA+ZXhwZWN0ZWQuSVNPODg1OS0xCisnCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtYm9keSAlYiA8ZXhwZWN0ZWQuSVNPODg1OS0xCisKKyMgR2l0IHVzZXMgaTE4bi5jb21taXRFbmNvZGluZyBpZiBubyBpMThuLmxvZ091dHB1dEVuY29kaW5nIHNldAorIyBzbyB1bnNldCBpMThuLmNvbW1pdEVuY29kaW5nIHRvIHRlc3QgZW5jb2RpbmcgY29udmVyc2lvbgorZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0RW5jb2RpbmcKKwordGVzdF9mb3JtYXQgY29tcGxleC1zdWJqZWN0LWNvbW1pdGVuY29kaW5nLXVuc2V0ICVzIDw8RU9GCitjb21taXQgJGhlYWQzCitUZXN0IHByaW50aW5nIG9mIGNvbXBsZXggYm9kaWVzCitjb21taXQgJGhlYWQyCiskY2hhbmdlZAorY29tbWl0ICRoZWFkMQorJGFkZGVkCitFT0YKKwordGVzdF9mb3JtYXQgY29tcGxleC1zdWJqZWN0LWNvbW1pdGVuY29kaW5nLXVuc2V0LXRydW5jICIlPCgkdHJ1bmNhdGVfY291bnQsdHJ1bmMpJXMiIDw8RU9GCitjb21taXQgJGhlYWQzCitUZXN0IHByaW50aW5nIG9mIGMuLgorY29tbWl0ICRoZWFkMgorY2hhbmdlZCAoZ2Uke2NoYW5nZWRfdXRmOF9wYXJ0fW5kZXJ0KS4uCitjb21taXQgJGhlYWQxCithZGRlZCAoaGluenVnZWYke2FkZGVkX3V0ZjhfcGFydH1ndC4uCitFT0YKKwordGVzdF9mb3JtYXQgY29tcGxleC1zdWJqZWN0LWNvbW1pdGVuY29kaW5nLXVuc2V0LW10cnVuYyAiJTwoJHRydW5jYXRlX2NvdW50LG10cnVuYyklcyIgPDxFT0YKK2NvbW1pdCAkaGVhZDMKK1Rlc3QgcHJpbi4uZXggYm9kaWVzCitjb21taXQgJGhlYWQyCitjaGFuZ2VkICguLmRlcnQpIGZvbworY29tbWl0ICRoZWFkMQorYWRkZWQgKGhpLi5mJHthZGRlZF91dGY4X3BhcnR9Z3QpIGZvbworRU9GCisKK3Rlc3RfZm9ybWF0IGNvbXBsZXgtc3ViamVjdC1jb21taXRlbmNvZGluZy11bnNldC1sdHJ1bmMgIiU8KCR0cnVuY2F0ZV9jb3VudCxsdHJ1bmMpJXMiIDw8RU9GCitjb21taXQgJGhlYWQzCisuLiBvZiBjb21wbGV4IGJvZGllcworY29tbWl0ICRoZWFkMgorLi5nZWQgKGdlJHtjaGFuZ2VkX3V0ZjhfcGFydH1uZGVydCkgZm9vCitjb21taXQgJGhlYWQxCisuLiAoaGluenVnZWYke2FkZGVkX3V0ZjhfcGFydH1ndCkgZm9vCitFT0YKKwordGVzdF9mb3JtYXQgY29tcGxleC1ib2R5LWNvbW1pdGVuY29kaW5nLXVuc2V0ICViIDxleHBlY3RlZC51dGYtOAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcleDAwIHNob3dzIE5VTCcgJworCWVjaG8gID5leHBlY3QgY29tbWl0ICRoZWFkMyAmJgorCWVjaG8gPj5leHBlY3QgZm9vUWJhciAmJgorCWdpdCByZXYtbGlzdCAtMSAtLWZvcm1hdD1mb28leDAwYmFyIEhFQUQgPmFjdHVhbC5udWwgJiYKKwludWxfdG9fcSA8YWN0dWFsLm51bCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclYWQgcmVzcGVjdHMgLS1kYXRlPScgJworCWVjaG8gMjAwNS0wNC0wNyA+ZXhwZWN0LmFkLXNob3J0ICYmCisJZ2l0IGxvZyAtMSAtLWRhdGU9c2hvcnQgLS1wcmV0dHk9dGZvcm1hdDolYWQgPm91dHB1dC5hZC1zaG9ydCBtYXN0ZXIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYWQtc2hvcnQgb3V0cHV0LmFkLXNob3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGVtYWlsJyAnCisJdGVzdF90aWNrICYmCisJQz0kKEdJVF9BVVRIT1JfRU1BSUw9IGdpdCBjb21taXQtdHJlZSBIRUFEXnt0cmVlfSA8L2Rldi9udWxsKSAmJgorCUE9JChnaXQgc2hvdyAtLXByZXR0eT1mb3JtYXQ6JWFuLCVhZSwlYWQlbiAtcyAkQykgJiYKKwl2ZXJib3NlIHRlc3QgIiRBIiA9ICJBIFUgVGhvciwsVGh1IEFwciA3IDE1OjE0OjEzIDIwMDUgLTA3MDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbCBMRiBiZWZvcmUgZW1wdHkgKDEpJyAnCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiIlcyVuJS1iJW5UaGFua3MlbiIgSEVBRF5eID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWwgTEYgYmVmb3JlIGVtcHR5ICgyKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlbiUtYiVuVGhhbmtzJW4iIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDYgYWN0dWFsICYmCisJZ3JlcCAiXiQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgTEYgYmVmb3JlIG5vbi1lbXB0eSAoMSknICcKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IiVzJStiJW5UaGFua3MlbiIgSEVBRF5eID5hY3R1YWwgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgTEYgYmVmb3JlIG5vbi1lbXB0eSAoMiknICcKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IiVzJStiJW5UaGFua3MlbiIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gNiBhY3R1YWwgJiYKKwlncmVwICJeJCIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBTUCBiZWZvcmUgbm9uLWVtcHR5ICgxKScgJworCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDoiJXMlIGJUaGFua3MiIEhFQUReXiA+YWN0dWFsICYmCisJdGVzdCAkKHdjIC13IDxhY3R1YWwpID0gMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgU1AgYmVmb3JlIG5vbi1lbXB0eSAoMiknICcKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6IiVzJSBzVGhhbmtzIiBIRUFEXl4gPmFjdHVhbCAmJgorCXRlc3QgJCh3YyAtdyA8YWN0dWFsKSA9IDYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hYmJyZXYnICcKKwllY2hvIFNIT1JUIFNIT1JUIFNIT1JUID5leHBlY3QyICYmCisJZWNobyBMT05HIExPTkcgTE9ORyA+ZXhwZWN0MyAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoICVoICVoIiBIRUFEID5hY3R1YWwxICYmCisJZ2l0IGxvZyAtMSAtLWFiYnJldj01IC0tZm9ybWF0PSIlaCAlaCAlaCIgSEVBRCA+YWN0dWFsMiAmJgorCWdpdCBsb2cgLTEgLS1hYmJyZXY9NSAtLWZvcm1hdD0iJUggJUggJUgiIEhFQUQgPmFjdHVhbDMgJiYKKwlzZWQgLWUgInMvJF94NDAvTE9ORy9nIiAtZSAicy8kX3gwNS9TSE9SVC9nIiA8YWN0dWFsMiA+ZnV6enkyICYmCisJc2VkIC1lICJzLyRfeDQwL0xPTkcvZyIgLWUgInMvJF94MDUvU0hPUlQvZyIgPGFjdHVhbDMgPmZ1enp5MyAmJgorCXRlc3RfY21wIGV4cGVjdDIgZnV6enkyICYmCisJdGVzdF9jbXAgZXhwZWN0MyBmdXp6eTMgJiYKKwkhIHRlc3RfY21wIGFjdHVhbDEgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclSCBpcyBub3QgYWZmZWN0ZWQgYnkgLS1hYmJyZXYtY29tbWl0JyAnCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lSCAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9MjAgSEVBRCA+YWN0dWFsICYmCisJbGVuPSQod2MgLWMgPGFjdHVhbCkgJiYKKwl0ZXN0ICRsZW4gPSA0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclaCBpcyBub3QgYWZmZWN0ZWQgYnkgLS1hYmJyZXYtY29tbWl0JyAnCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0laCAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9MjAgSEVBRCA+YWN0dWFsICYmCisJbGVuPSQod2MgLWMgPGFjdHVhbCkgJiYKKwl0ZXN0ICRsZW4gPSAyMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciJWggJWdEOiAlZ3MiIGlzIHNhbWUgYXMgZ2l0LXJlZmxvZycgJworCWdpdCByZWZsb2cgPmV4cGVjdCAmJgorCWdpdCBsb2cgLWcgLS1mb3JtYXQ9IiVoICVnRDogJWdzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciJWggJWdEOiAlZ3MiIGlzIHNhbWUgYXMgZ2l0LXJlZmxvZyAod2l0aCBkYXRlKScgJworCWdpdCByZWZsb2cgLS1kYXRlPXJhdyA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtZyAtLWZvcm1hdD0iJWggJWdEOiAlZ3MiIC0tZGF0ZT1yYXcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIiVoICVnRDogJWdzIiBpcyBzYW1lIGFzIGdpdC1yZWZsb2cgKHdpdGggLS1hYmJyZXYpJyAnCisJZ2l0IHJlZmxvZyAtLWFiYnJldj0xMyAtLWRhdGU9cmF3ID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0tYWJicmV2PTEzIC0tZm9ybWF0PSIlaCAlZ0Q6ICVncyIgLS1kYXRlPXJhdyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICclZ2Qgc2hvcnRlbnMgcmVmIG5hbWUnICcKKwllY2hvICJtYXN0ZXJAezB9IiA+ZXhwZWN0LmdkLXNob3J0ICYmCisJZ2l0IGxvZyAtZyAtMSAtLWZvcm1hdD0lZ2QgcmVmcy9oZWFkcy9tYXN0ZXIgPmFjdHVhbC5nZC1zaG9ydCAmJgorCXRlc3RfY21wIGV4cGVjdC5nZC1zaG9ydCBhY3R1YWwuZ2Qtc2hvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmbG9nIGlkZW50aXR5JyAnCisJZWNobyAiQyBPIE1pdHRlcjpjb21taXR0ZXJAZXhhbXBsZS5jb20iID5leHBlY3QgJiYKKwlnaXQgbG9nIC1nIC0xIC0tZm9ybWF0PSIlZ246JWdlIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmVsaW5lIHdpdGggZW1wdHkgbWVzc2FnZScgJworCWdpdCBjb21taXQgLW0gImR1bW15IiAtLWFsbG93LWVtcHR5ICYmCisJZ2l0IGNvbW1pdCAtbSAiZHVtbXkiIC0tYWxsb3ctZW1wdHkgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtLW1zZy1maWx0ZXIgInNlZCAtZSBzL2R1bW15Ly8iIEhFQUReXi4uICYmCisJZ2l0IHJldi1saXN0IC0tb25lbGluZSBIRUFEID50ZXN0LnR4dCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDUgdGVzdC50eHQgJiYKKwlnaXQgcmV2LWxpc3QgLS1vbmVsaW5lIC0tZ3JhcGggSEVBRCA+dGVzdGcudHh0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gNSB0ZXN0Zy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2luZ2xlLWNoYXJhY3RlciBuYW1lIGlzIHBhcnNlZCBjb3JyZWN0bHknICcKKwlnaXQgY29tbWl0IC0tYXV0aG9yPSJhIDxhQGV4YW1wbGUuY29tPiIgLS1hbGxvdy1lbXB0eSAtbSBmb28gJiYKKwllY2hvICJhIDxhQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVhbiA8JWFlPiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW51c2VkICVHIHBsYWNlaG9sZGVycyBhcmUgcGFzc2VkIHRocm91Z2gnICcKKwllY2hvICIlR1ggJUciID5leHBlY3QgJiYKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSIlR1ggJUciID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAwNy1yZXYtbGlzdC1jaGVycnktcGljay1maWxlLnNoIGIvdC90NjAwNy1yZXYtbGlzdC1jaGVycnktcGljay1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4ZDRmNmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDA3LXJldi1saXN0LWNoZXJyeS1waWNrLWZpbGUuc2gKQEAgLTAsMCArMSwyMTAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCByZXYtbGlzdCAtLWNoZXJyeS1waWNrIC0tIGZpbGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIEEtLS1CLS0tRC0tLUYKKyMgIFwKKyMgICBcCisjICAgIEMtLS1FCisjCisjIEIgY2hhbmdlcyBhIGZpbGUgZm9vLmMsIGFkZGluZyBhIGxpbmUgb2YgdGV4dC4gIEMgY2hhbmdlcyBmb28uYyBhcworIyB3ZWxsIGFzIGJhci5jLCBidXQgdGhlIGNoYW5nZSBpbiBmb28uYyB3YXMgaWRlbnRpY2FsIHRvIGNoYW5nZSBCLgorIyBEIGFuZCBDIGNoYW5nZSBiYXIgaW4gdGhlIHNhbWUgd2F5LCBFIGFuZCBGIGRpZmZlcmVudGx5LgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIEhhbGxvID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJBIiAmJgorCWdpdCB0YWcgQSAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2ggJiYKKwllY2hvIEJlbGxvID4gZm9vICYmCisJZWNobyBDZWxsbyA+IGJhciAmJgorCWdpdCBhZGQgZm9vIGJhciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkMiICYmCisJZ2l0IHRhZyBDICYmCisJZWNobyBEZWxsbyA+IGJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiRSIgJiYKKwlnaXQgdGFnIEUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IGJyYW5jaCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJCIiAmJgorCWdpdCB0YWcgQiAmJgorCWVjaG8gQ2VsbG8gPiBiYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkQiICYmCisJZ2l0IHRhZyBEICYmCisJZWNobyBOZWxsbyA+IGJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiRiIgJiYKKwlnaXQgdGFnIEYKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzx0YWdzL0IKKz50YWdzL0MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxlZnQtcmlnaHQnICcKKwlnaXQgcmV2LWxpc3QgLS1sZWZ0LXJpZ2h0IEIuLi5DID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgYWN0dWFsLm5hbWVkIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvdW50JyAnCisJZ2l0IHJldi1saXN0IC0tY291bnQgQi4uLkMgPiBhY3R1YWwgJiYKKwl0ZXN0ICIkKGNhdCBhY3R1YWwpIiA9IDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktcGljayBmb28gY29tZXMgdXAgZW1wdHknICcKKwl0ZXN0IC16ICIkKGdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBCLi4uQyAtLSBmb28pIgorJworCitjYXQgPmV4cGVjdCA8PEVPRgorPnRhZ3MvQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LXBpY2sgYmFyIGRvZXMgbm90IGNvbWUgdXAgZW1wdHknICcKKwlnaXQgcmV2LWxpc3QgLS1sZWZ0LXJpZ2h0IC0tY2hlcnJ5LXBpY2sgQi4uLkMgLS0gYmFyID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgYWN0dWFsLm5hbWVkIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXIgZG9lcyBub3QgY29tZSB1cCBlbXB0eScgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgQi4uLkMgLS0gYmFyID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgYWN0dWFsLm5hbWVkIGV4cGVjdAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorPHRhZ3MvRgorPnRhZ3MvRQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LXBpY2sgYmFyIGRvZXMgbm90IGNvbWUgdXAgZW1wdHkgKElJKScgJworCWdpdCByZXYtbGlzdCAtLWxlZnQtcmlnaHQgLS1jaGVycnktcGljayBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBhY3R1YWwubmFtZWQgZXhwZWN0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisrdGFncy9GCis9dGFncy9ECisrdGFncy9FCis9dGFncy9DCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnktbWFyaycgJworCWdpdCByZXYtbGlzdCAtLWNoZXJyeS1tYXJrIEYuLi5FIC0tIGJhciA+IGFjdHVhbCAmJgorCWdpdCBuYW1lLXJldiAtLXN0ZGluIC0tbmFtZS1vbmx5IC0tcmVmcz0iKnRhZ3MvKiIgXAorCQk8IGFjdHVhbCA+IGFjdHVhbC5uYW1lZCAmJgorCXRlc3RfY21wIGFjdHVhbC5uYW1lZCBleHBlY3QKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzx0YWdzL0YKKz10YWdzL0QKKz50YWdzL0UKKz10YWdzL0MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeS1tYXJrIC0tbGVmdC1yaWdodCcgJworCWdpdCByZXYtbGlzdCAtLWNoZXJyeS1tYXJrIC0tbGVmdC1yaWdodCBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBhY3R1YWwubmFtZWQgZXhwZWN0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCit0YWdzL0UKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeS1waWNrIC0tcmlnaHQtb25seScgJworCWdpdCByZXYtbGlzdCAtLWNoZXJyeS1waWNrIC0tcmlnaHQtb25seSBGLi4uRSAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBhY3R1YWwubmFtZWQgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LXBpY2sgLS1sZWZ0LW9ubHknICcKKwlnaXQgcmV2LWxpc3QgLS1jaGVycnktcGljayAtLWxlZnQtb25seSBFLi4uRiAtLSBiYXIgPiBhY3R1YWwgJiYKKwlnaXQgbmFtZS1yZXYgLS1zdGRpbiAtLW5hbWUtb25seSAtLXJlZnM9Iip0YWdzLyoiIFwKKwkJPCBhY3R1YWwgPiBhY3R1YWwubmFtZWQgJiYKKwl0ZXN0X2NtcCBhY3R1YWwubmFtZWQgZXhwZWN0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisrdGFncy9FCis9dGFncy9DCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnknICcKKwlnaXQgcmV2LWxpc3QgLS1jaGVycnkgRi4uLkUgLS0gYmFyID4gYWN0dWFsICYmCisJZ2l0IG5hbWUtcmV2IC0tc3RkaW4gLS1uYW1lLW9ubHkgLS1yZWZzPSIqdGFncy8qIiBcCisJCTwgYWN0dWFsID4gYWN0dWFsLm5hbWVkICYmCisJdGVzdF9jbXAgYWN0dWFsLm5hbWVkIGV4cGVjdAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorMQkxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1jaGVycnkgLS1jb3VudCcgJworCWdpdCByZXYtbGlzdCAtLWNoZXJyeSAtLWNvdW50IEYuLi5FIC0tIGJhciA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3QKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzIJMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY2hlcnJ5LW1hcmsgLS1jb3VudCcgJworCWdpdCByZXYtbGlzdCAtLWNoZXJyeS1tYXJrIC0tY291bnQgRi4uLkUgLS0gYmFyID4gYWN0dWFsICYmCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorMQkxCTIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeS1tYXJrIC0tbGVmdC1yaWdodCAtLWNvdW50JyAnCisJZ2l0IHJldi1saXN0IC0tY2hlcnJ5LW1hcmsgLS1sZWZ0LXJpZ2h0IC0tY291bnQgRi4uLkUgLS0gYmFyID4gYWN0dWFsICYmCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNoZXJyeS1waWNrIHdpdGggaW5kZXBlbmRlbnQsIGJ1dCBpZGVudGljYWwgYnJhbmNoZXMnICcKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9pbmRlcGVuZGVudCAmJgorCXJtIC5naXQvaW5kZXggJiYKKwllY2hvIEhhbGxvID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJpbmRlcGVuZGVudCIgJiYKKwllY2hvIEJlbGxvID4gZm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiaW5kZXBlbmRlbnQsIHRvbyIgZm9vICYmCisJdGVzdCAteiAiJChnaXQgcmV2LWxpc3QgLS1sZWZ0LXJpZ2h0IC0tY2hlcnJ5LXBpY2sgXAorCQlIRUFELi4ubWFzdGVyIC0tIGZvbykiCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisxCTIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWNvdW50IC0tbGVmdC1yaWdodCcgJworCWdpdCByZXYtbGlzdCAtLWNvdW50IC0tbGVmdC1yaWdodCBDLi4uRCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDA4LXJldi1saXN0LXN1Ym1vZHVsZS5zaCBiL3QvdDYwMDgtcmV2LWxpc3Qtc3VibW9kdWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0YWY5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDA4LXJldi1saXN0LXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDQyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEpvaGFubmVzIEUuIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJldi1saXN0IGludm9sdmluZyBzdWJtb2R1bGVzIHRoYXQgdGhpcyByZXBvIGhhcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJOiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIDEgPiBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgZmlsZSAmJgorCWVjaG8gMiA+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHRoaXJkIGZpbGUgJiYKKworCXJtIC5naXQvaW5kZXggJiYKKworCTogPiBzdXBlci1maWxlICYmCisJZ2l0IGFkZCBzdXBlci1maWxlICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgIiQocHdkKSIgc3ViICYmCisJZ2l0IHN5bWJvbGljLXJlZiBIRUFEIHJlZnMvaGVhZHMvc3VwZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHN1cGVyLWluaXRpYWwgJiYKKwllY2hvIDEgPiBzdXBlci1maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzdXBlci1maXJzdCBzdXBlci1maWxlICYmCisJZWNobyAyID4gc3VwZXItZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc3VwZXItc2Vjb25kIHN1cGVyLWZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiSWxhcmkncyB0ZXN0IiAnCisJZ2l0IHJldi1saXN0IC0tb2JqZWN0cyBzdXBlciBtYXN0ZXIgXnN1cGVyXgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMDktcmV2LWxpc3QtcGFyZW50LnNoIGIvdC90NjAwOS1yZXYtbGlzdC1wYXJlbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjZjZGExNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMDktcmV2LWxpc3QtcGFyZW50LnNoCkBAIC0wLDAgKzEsMTQ5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYW5jZXN0b3IgY3VsbGluZyBhbmQgbGltaXRpbmcgYnkgcGFyZW50IG51bWJlcicKKworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX3Jldmxpc3QgKCkgeworCXJldl9saXN0X2FyZ3M9IiQxIiAmJgorCXNoaWZ0ICYmCisJZ2l0IHJldi1wYXJzZSAiJEAiID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgJHJldl9saXN0X2FyZ3MgLS1hbGwgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwl0b3VjaCBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisKKwl0ZXN0X2NvbW1pdCBvbmUgJiYKKworCXRlc3RfdGljaz0kKCgkdGVzdF90aWNrIC0gMjQwMCkpICYmCisKKwl0ZXN0X2NvbW1pdCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZSAmJgorCXRlc3RfY29tbWl0IGZvdXIgJiYKKworCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSAtLWFiYnJldi1jb21taXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb25lIGlzIGFuY2VzdG9yIG9mIG90aGVycyBhbmQgc2hvdWxkIG5vdCBiZSBzaG93bicgJworCisJZ2l0IHJldi1saXN0IG9uZSAtLW5vdCBmb3VyID5yZXN1bHQgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlc3VsdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJvb3RzLCBtZXJnZXMgYW5kIG9jdG9wdXNlcycgJworCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ld3Jvb3QgJiYKKwl0ZXN0X2NvbW1pdCBmaXZlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGVicmFuY2ggdHdvICYmCisJdGVzdF9jb21taXQgc2l4ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGFub3RoZXJicmFuY2ggdGhyZWUgJiYKKwl0ZXN0X2NvbW1pdCBzZXZlbiAmJgorCWdpdCBjaGVja291dCAtYiB5ZXRhbm90aGVyYnJhbmNoIGZvdXIgJiYKKwl0ZXN0X2NvbW1pdCBlaWdodCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X21lcmdlIG5vcm1hbG1lcmdlIG5ld3Jvb3QgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLW0gdHJpcHVzIHNpZGVicmFuY2ggYW5vdGhlcmJyYW5jaCAmJgorCWdpdCB0YWcgdHJpcHVzICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRldHJhYnJhbmNoIG5vcm1hbG1lcmdlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1tIHRldHJhcHVzIHNpZGVicmFuY2ggYW5vdGhlcmJyYW5jaCB5ZXRhbm90aGVyYnJhbmNoICYmCisJZ2l0IHRhZyB0ZXRyYXB1cyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgcm9vdHMnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWF4LXBhcmVudHM9MCIgb25lIGZpdmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgbm8gbWVyZ2VzJyAnCisKKwljaGVja19yZXZsaXN0ICItLW1heC1wYXJlbnRzPTEiIG9uZSBlaWdodCBzZXZlbiBzaXggZml2ZSBmb3VyIHRocmVlIHR3byAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbm8tbWVyZ2VzIiBvbmUgZWlnaHQgc2V2ZW4gc2l4IGZpdmUgZm91ciB0aHJlZSB0d28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgbm8gb2N0b3B1c2VzJyAnCisKKwljaGVja19yZXZsaXN0ICItLW1heC1wYXJlbnRzPTIiIG9uZSBub3JtYWxtZXJnZSBlaWdodCBzZXZlbiBzaXggZml2ZSBmb3VyIHRocmVlIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBubyByb290cycgJworCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0xIiB0ZXRyYXB1cyB0cmlwdXMgbm9ybWFsbWVyZ2UgZWlnaHQgc2V2ZW4gc2l4IGZvdXIgdGhyZWUgdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG1lcmdlcycgJworCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0yIiB0ZXRyYXB1cyB0cmlwdXMgbm9ybWFsbWVyZ2UgJiYKKwljaGVja19yZXZsaXN0ICItLW1lcmdlcyIgdGV0cmFwdXMgdHJpcHVzIG5vcm1hbG1lcmdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG9jdG9wdXMnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MyIgdGV0cmFwdXMgdHJpcHVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG9yZGluYXJ5IGNvbW1pdHMnICcKKworCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MSAtLW1heC1wYXJlbnRzPTEiIGVpZ2h0IHNldmVuIHNpeCBmb3VyIHRocmVlIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLW1lcmdlcyAtLW5vLW1lcmdlcyB5aWVsZHMgZW1wdHkgc2V0JyAnCisKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTIgLS1uby1tZXJnZXMiICYmCisJY2hlY2tfcmV2bGlzdCAiLS1tZXJnZXMgLS1uby1tZXJnZXMiICYmCisJY2hlY2tfcmV2bGlzdCAiLS1uby1tZXJnZXMgLS1tZXJnZXMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IG92ZXJyaWRlIGFuZCBpbmZpbml0aWVzJyAnCisKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTIgLS1tYXgtcGFyZW50cz0xIC0tbWF4LXBhcmVudHM9MyIgdHJpcHVzIG5vcm1hbG1lcmdlICYmCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz0xIC0tbWluLXBhcmVudHM9MiAtLW1heC1wYXJlbnRzPTciIHRldHJhcHVzIHRyaXB1cyBub3JtYWxtZXJnZSAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MiAtLW1heC1wYXJlbnRzPTgiIHRldHJhcHVzIHRyaXB1cyBub3JtYWxtZXJnZSAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9MiAtLW1heC1wYXJlbnRzPS0xIiB0ZXRyYXB1cyB0cmlwdXMgbm9ybWFsbWVyZ2UgJiYKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTIgLS1uby1tYXgtcGFyZW50cyIgdGV0cmFwdXMgdHJpcHVzIG5vcm1hbG1lcmdlICYmCisJY2hlY2tfcmV2bGlzdCAiLS1tYXgtcGFyZW50cz0wIC0tbWluLXBhcmVudHM9MSAtLW5vLW1pbi1wYXJlbnRzIiBvbmUgZml2ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb2RlY2FwdXMnICcKKworCXJvb3RzPSAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExCisJZG8KKwkJZ2l0IGNoZWNrb3V0IC1iIHJvb3QkaSBmaXZlICYmCisJCXRlc3RfY29tbWl0ICRpICYmCisJCXJvb3RzPSIkcm9vdHMgcm9vdCRpIiB8fAorCQlyZXR1cm4KKwlkb25lICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtbSBkb2RlY2FwdXMgJHJvb3RzICYmCisJZ2l0IHRhZyBkb2RlY2FwdXMgJiYKKworCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9NCIgZG9kZWNhcHVzIHRldHJhcHVzICYmCisJY2hlY2tfcmV2bGlzdCAiLS1taW4tcGFyZW50cz04IiBkb2RlY2FwdXMgJiYKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTEyIiBkb2RlY2FwdXMgJiYKKwljaGVja19yZXZsaXN0ICItLW1pbi1wYXJlbnRzPTEzIiAmJgorCWNoZWNrX3Jldmxpc3QgIi0tbWluLXBhcmVudHM9NCAtLW1heC1wYXJlbnRzPTExIiB0ZXRyYXB1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbmNlc3RvcnMgd2l0aCB0aGUgc2FtZSBjb21taXQgdGltZScgJworCisJdGVzdF90aWNrX2tlZXA9JHRlc3RfdGljayAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgODsgZG8KKwkJdGVzdF90aWNrPSR0ZXN0X3RpY2tfa2VlcAorCQl0ZXN0X2NvbW1pdCB0JGkKKwlkb25lICYmCisJZ2l0IHJldi1saXN0IHQxXiEgLS1ub3QgdCRpID5yZXN1bHQgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHJlc3VsdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMTAtbWVyZ2UtYmFzZS5zaCBiL3QvdDYwMTAtbWVyZ2UtYmFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOWIzMjM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxMC1tZXJnZS1iYXNlLnNoCkBAIC0wLDAgKzEsMzAwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEp1bmlvIEMgSGFtYW5vCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J01lcmdlIGJhc2UgYW5kIHBhcmVudCBsaXN0IGNvbXB1dGF0aW9uLgorJworCisuIC4vdGVzdC1saWIuc2gKKworTT0xMTMwMDAwMDAwCitaPSswMDAwCisKK0dJVF9DT01NSVRURVJfRU1BSUw9Z2l0QGNvbW0uaXRlci54egorR0lUX0NPTU1JVFRFUl9OQU1FPSdDIE8gTW1pdGVyJworR0lUX0FVVEhPUl9OQU1FPSdBIFUgVGhvcicKK0dJVF9BVVRIT1JfRU1BSUw9Z2l0QGF1LnRob3IueHoKK2V4cG9ydCBHSVRfQ09NTUlUVEVSX0VNQUlMIEdJVF9DT01NSVRURVJfTkFNRSBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTAorCitkb2l0ICgpIHsKKwlPRkZTRVQ9JDEgJiYKKwlOQU1FPSQyICYmCisJc2hpZnQgMiAmJgorCisJUEFSRU5UUz0gJiYKKwlmb3IgUAorCWRvCisJCVBBUkVOVFM9IiR7UEFSRU5UU30tcCAkUCAiCisJZG9uZSAmJgorCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIkKCgkTSArICRPRkZTRVQpKSAkWiIgJiYKKwlHSVRfQVVUSE9SX0RBVEU9JEdJVF9DT01NSVRURVJfREFURSAmJgorCWV4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEUgR0lUX0FVVEhPUl9EQVRFICYmCisKKwljb21taXQ9JChlY2hvICROQU1FIHwgZ2l0IGNvbW1pdC10cmVlICRUICRQQVJFTlRTKSAmJgorCisJZWNobyAkY29tbWl0ID4uZ2l0L3JlZnMvdGFncy8kTkFNRSAmJgorCWVjaG8gJGNvbW1pdAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCVQ9JChnaXQgbWt0cmVlIDwvZGV2L251bGwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBHIGFuZCBIJyAnCisJIyBFLS0tRC0tLUMtLS1CLS0tQQorCSMgXCItXyAgICAgICAgIFwgICBcCisJIyAgXCAgYC0tLS0tLS0tLUcgICBcCisJIyAgIFwgICAgICAgICAgICAgICAgXAorCSMgICAgRi0tLS0tLS0tLS0tLS0tLS1ICisJRT0kKGRvaXQgNSBFKSAmJgorCUQ9JChkb2l0IDQgRCAkRSkgJiYKKwlGPSQoZG9pdCA2IEYgJEUpICYmCisJQz0kKGRvaXQgMyBDICREKSAmJgorCUI9JChkb2l0IDIgQiAkQykgJiYKKwlBPSQoZG9pdCAxIEEgJEIpICYmCisJRz0kKGRvaXQgNyBHICRCICRFKSAmJgorCUg9JChkb2l0IDggSCAkQSAkRikKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtYmFzZSBHIEgnICcKKwlnaXQgbmFtZS1yZXYgJEIgPmV4cGVjdGVkICYmCisKKwlNQj0kKGdpdCBtZXJnZS1iYXNlIEcgSCkgJiYKKwlnaXQgbmFtZS1yZXYgIiRNQiIgPmFjdHVhbC5zaW5nbGUgJiYKKworCU1CPSQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgRyBIKSAmJgorCWdpdCBuYW1lLXJldiAiJE1CIiA+YWN0dWFsLmFsbCAmJgorCisJTUI9JChnaXQgc2hvdy1icmFuY2ggLS1tZXJnZS1iYXNlIEcgSCkgJiYKKwlnaXQgbmFtZS1yZXYgIiRNQiIgPmFjdHVhbC5zYiAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLnNpbmdsZSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbC5hbGwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwuc2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtYmFzZS9zaG93LWJyYW5jaCAtLWluZGVwZW5kZW50JyAnCisJZ2l0IG5hbWUtcmV2ICIkSCIgPmV4cGVjdGVkMSAmJgorCWdpdCBuYW1lLXJldiAiJEgiICIkRyIgPmV4cGVjdGVkMiAmJgorCisJcGFyZW50cz0kKGdpdCBtZXJnZS1iYXNlIC0taW5kZXBlbmRlbnQgSCkgJiYKKwlnaXQgbmFtZS1yZXYgJHBhcmVudHMgPmFjdHVhbDEubWIgJiYKKwlwYXJlbnRzPSQoZ2l0IG1lcmdlLWJhc2UgLS1pbmRlcGVuZGVudCBBIEggRykgJiYKKwlnaXQgbmFtZS1yZXYgJHBhcmVudHMgPmFjdHVhbDIubWIgJiYKKworCXBhcmVudHM9JChnaXQgc2hvdy1icmFuY2ggLS1pbmRlcGVuZGVudCBIKSAmJgorCWdpdCBuYW1lLXJldiAkcGFyZW50cyA+YWN0dWFsMS5zYiAmJgorCXBhcmVudHM9JChnaXQgc2hvdy1icmFuY2ggLS1pbmRlcGVuZGVudCBBIEggRykgJiYKKwlnaXQgbmFtZS1yZXYgJHBhcmVudHMgPmFjdHVhbDIuc2IgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkMSBhY3R1YWwxLm1iICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQyIGFjdHVhbDIubWIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZDEgYWN0dWFsMS5zYiAmJgorCXRlc3RfY21wIGV4cGVjdGVkMiBhY3R1YWwyLnNiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Vuc3luY2hyb25pemVkIGNsb2NrcycgJworCSMgVGhpcyB0ZXN0IGlzIHRvIGRlbW9uc3RyYXRlIHRoYXQgcmVseWluZyBvbiB0aW1lc3RhbXBzIGluIGEgZGlzdHJpYnV0ZWQKKwkjIFNDTSB0byBwcm92aWRlIGEgX2NvbnNpc3RlbnRfIHBhcnRpYWwgb3JkZXJpbmcgb2YgY29tbWl0cyBsZWFkcyB0bworCSMgaW5zYW5pdHkuCisJIworCSMgICAgICAgICAgICAgICBSZWxhdGl2ZQorCSMgU3RydWN0dXJlICAgICB0aW1lc3RhbXBzCisJIworCSMgICBQTCAgUFIgICAgICAgICs0ICArNAorCSMgIC8gIFwvICBcICAgICAgLyAgXC8gIFwKKwkjIEwyICBDMiAgUjIgICAgKzMgIC0xICArMworCSMgfCAgIHwgICB8ICAgICB8ICAgfCAgIHwKKwkjIEwxICBDMSAgUjEgICAgKzIgIC0yICArMgorCSMgfCAgIHwgICB8ICAgICB8ICAgfCAgIHwKKwkjIEwwICBDMCAgUjAgICAgKzEgIC0zICArMQorCSMgICBcIHwgIC8gICAgICAgIFwgfCAgLworCSMgICAgIFMgICAgICAgICAgICAgMAorCSMKKwkjIFRoZSBsZWZ0IGFuZCByaWdodCBjaGFpbnMgb2YgY29tbWl0cyBjYW4gYmUgb2YgYW55IGxlbmd0aCBhbmQgY29tcGxleGl0eSBhcworCSMgbG9uZyBhcyBhbGwgb2YgdGhlIHRpbWVzdGFtcHMgYXJlIGdyZWF0ZXIgdGhhbiB0aGF0IG9mIFMuCisKKwlTPSQoZG9pdCAgMCBTKSAmJgorCisJQzA9JChkb2l0IC0zIEMwICRTKSAmJgorCUMxPSQoZG9pdCAtMiBDMSAkQzApICYmCisJQzI9JChkb2l0IC0xIEMyICRDMSkgJiYKKworCUwwPSQoZG9pdCAgMSBMMCAkUykgJiYKKwlMMT0kKGRvaXQgIDIgTDEgJEwwKSAmJgorCUwyPSQoZG9pdCAgMyBMMiAkTDEpICYmCisKKwlSMD0kKGRvaXQgIDEgUjAgJFMpICYmCisJUjE9JChkb2l0ICAyIFIxICRSMCkgJiYKKwlSMj0kKGRvaXQgIDMgUjIgJFIxKSAmJgorCisJUEw9JChkb2l0ICA0IFBMICRMMiAkQzIpICYmCisJUFI9JChkb2l0ICA0IFBSICRDMiAkUjIpICYmCisKKwlnaXQgbmFtZS1yZXYgJEMyID5leHBlY3RlZCAmJgorCisJTUI9JChnaXQgbWVyZ2UtYmFzZSBQTCBQUikgJiYKKwlnaXQgbmFtZS1yZXYgIiRNQiIgPmFjdHVhbC5zaW5nbGUgJiYKKworCU1CPSQoZ2l0IG1lcmdlLWJhc2UgLS1hbGwgUEwgUFIpICYmCisJZ2l0IG5hbWUtcmV2ICIkTUIiID5hY3R1YWwuYWxsICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwuc2luZ2xlICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLmFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWluZGVwZW5kZW50IHdpdGggdW5zeW5jaHJvbml6ZWQgY2xvY2tzJyAnCisJSUI9JChkb2l0IDAgSUIpICYmCisJSTE9JChkb2l0IC0xMCBJMSAkSUIpICYmCisJSTI9JChkb2l0ICAtOSBJMiAkSTEpICYmCisJSTM9JChkb2l0ICAtOCBJMyAkSTIpICYmCisJSTQ9JChkb2l0ICAtNyBJNCAkSTMpICYmCisJSTU9JChkb2l0ICAtNiBJNSAkSTQpICYmCisJSTY9JChkb2l0ICAtNSBJNiAkSTUpICYmCisJSTc9JChkb2l0ICAtNCBJNyAkSTYpICYmCisJSTg9JChkb2l0ICAtMyBJOCAkSTcpICYmCisJSUg9JChkb2l0ICAtMiBJSCAkSTgpICYmCisKKwllY2hvICRJSCA+ZXhwZWN0ZWQgJiYKKwlnaXQgbWVyZ2UtYmFzZSAtLWluZGVwZW5kZW50IElCIElIID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtYmFzZSBmb3Igb2N0b3B1cy1zdGVwIChzZXR1cCknICcKKwkjIEFub3RoZXIgc2V0IHRvIGRlbW9uc3RyYXRlIGJhc2UgYmV0d2VlbiBvbmUgY29tbWl0IGFuZCBhIG1lcmdlCisJIyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKwkjCisJIyAqIEMgKE1NQykgKiBCIChNTUIpICogQSAgKE1NQSkKKwkjICogbyAgICAgICAqIG8gICAgICAgKiBvCisJIyAqIG8gICAgICAgKiBvICAgICAgICogbworCSMgKiBvICAgICAgICogbyAgICAgICAqIG8KKwkjICogbyAgICAgICB8IF9fX19fX18vCisJIyB8ICAgICAgICAgfC8KKwkjIHwgICAgICAgICAqIDEgKE1NMSkKKwkjIHwgX19fX19fXy8KKwkjIHwvCisJIyAqIHJvb3QgKE1NUikKKworCXRlc3RfY29tbWl0IE1NUiAmJgorCXRlc3RfY29tbWl0IE1NMSAmJgorCXRlc3RfY29tbWl0IE1NLW8gJiYKKwl0ZXN0X2NvbW1pdCBNTS1wICYmCisJdGVzdF9jb21taXQgTU0tcSAmJgorCXRlc3RfY29tbWl0IE1NQSAmJgorCWdpdCBjaGVja291dCBNTTEgJiYKKwl0ZXN0X2NvbW1pdCBNTS1yICYmCisJdGVzdF9jb21taXQgTU0tcyAmJgorCXRlc3RfY29tbWl0IE1NLXQgJiYKKwl0ZXN0X2NvbW1pdCBNTUIgJiYKKwlnaXQgY2hlY2tvdXQgTU1SICYmCisJdGVzdF9jb21taXQgTU0tdSAmJgorCXRlc3RfY29tbWl0IE1NLXYgJiYKKwl0ZXN0X2NvbW1pdCBNTS13ICYmCisJdGVzdF9jb21taXQgTU0teCAmJgorCXRlc3RfY29tbWl0IE1NQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1iYXNlIEEgQiBDJyAnCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBNTTEgPmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBNTVIgPmV4cGVjdGVkLnNiICYmCisKKwlnaXQgbWVyZ2UtYmFzZSAtLWFsbCBNTUEgTU1CIE1NQyA+YWN0dWFsICYmCisJZ2l0IG1lcmdlLWJhc2UgLS1hbGwgLS1vY3RvcHVzIE1NQSBNTUIgTU1DID5hY3R1YWwuY29tbW9uICYmCisJZ2l0IHNob3ctYnJhbmNoIC0tbWVyZ2UtYmFzZSBNTUEgTU1CIE1NQyA+YWN0dWFsLnNiICYmCisKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5zYiBhY3R1YWwuY29tbW9uICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuc2IgYWN0dWFsLnNiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyaXNzLWNyb3NzIG1lcmdlLWJhc2UgZm9yIG9jdG9wdXMtc3RlcCcgJworCWdpdCByZXNldCAtLWhhcmQgTU1SICYmCisJdGVzdF9jb21taXQgQ0MxICYmCisJZ2l0IHJlc2V0IC0taGFyZCBFICYmCisJdGVzdF9jb21taXQgQ0MyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgQ0MxICYmCisJdGVzdF9jb21taXQgQ0MtbyAmJgorCXRlc3RfY29tbWl0IENDQiAmJgorCWdpdCByZXNldCAtLWhhcmQgQ0MxICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgQ0MyICYmCisJdGVzdF9jb21taXQgQ0NBICYmCisKKwlnaXQgcmV2LXBhcnNlIENDMSBDQzIgPmV4cGVjdGVkICYmCisJZ2l0IG1lcmdlLWJhc2UgLS1hbGwgQ0NCIENDQV5eIENDQV5eMiA+YWN0dWFsICYmCisKKwlzb3J0IGV4cGVjdGVkID5leHBlY3RlZC5zb3J0ZWQgJiYKKwlzb3J0IGFjdHVhbCA+YWN0dWFsLnNvcnRlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLnNvcnRlZCBhY3R1YWwuc29ydGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIHJlZmxvZyB0byBmaW5kIHRoZSBmb3JrIHBvaW50JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBiYXNlICRFICYmCisKKwkoCisJCWZvciBjb3VudCBpbiAxIDIgMworCQlkbworCQkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJCYXNlIGNvbW1pdCAjJGNvdW50IiAmJgorCQkJZ2l0IHJldi1wYXJzZSBIRUFEID5leHBlY3QkY291bnQgJiYKKwkJCWdpdCBjaGVja291dCAtQiBkZXJpdmVkICYmCisJCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkRlcml2ZWQgIyRjb3VudCIgJiYKKwkJCWdpdCByZXYtcGFyc2UgSEVBRCA+ZGVyaXZlZCRjb3VudCAmJgorCQkJZ2l0IGNoZWNrb3V0IC1CIGJhc2UgJEUgfHwgZXhpdCAxCisJCWRvbmUKKworCQlmb3IgY291bnQgaW4gMSAyIDMKKwkJZG8KKwkJCWdpdCBtZXJnZS1iYXNlIC0tZm9yay1wb2ludCBiYXNlICQoY2F0IGRlcml2ZWQkY291bnQpID5hY3R1YWwgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCRjb3VudCBhY3R1YWwgfHwgZXhpdCAxCisJCWRvbmUKKworCSkgJiYKKwkjIGNoZWNrIHRoYXQgd2UgY29ycmVjdGx5IGRlZmF1bHQgdG8gSEVBRAorCWdpdCBjaGVja291dCBkZXJpdmVkICYmCisJZ2l0IG1lcmdlLWJhc2UgLS1mb3JrLXBvaW50IGJhc2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdDMgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLWJhc2UgLS1vY3RvcHVzIC0tYWxsIGZvciBjb21wbGV4IHRyZWUnICcKKwkjIEJlc3QgY29tbW9uIGFuY2VzdG9yIGZvciBKRSwgSkFBIGFuZCBKREQgaXMgSkMKKwkjICAgICAgICAgICAgIEpFCisJIyAgICAgICAgICAgIC8gfAorCSMgICAgICAgICAgIC8gIHwKKwkjICAgICAgICAgIC8gICB8CisJIyAgSkFBICAgIC8gICAgfAorCSMgICB8XCAgIC8gICAgIHwKKwkjICAgfCBcICB8IEpERCB8CisJIyAgIHwgIFwgfC8gfCAgfAorCSMgICB8ICAgSkMgSkQgIHwKKwkjICAgfCAgICB8IC98ICB8CisJIyAgIHwgICAgfC8gfCAgfAorCSMgIEpBICAgIHwgIHwgIHwKKwkjICAgfFwgIC98ICB8ICB8CisJIyAgIFggSkIgfCAgWCAgWAorCSMgICBcICBcIHwgLyAgIC8KKwkjICAgIFxfX1x8L19fXy8KKwkjICAgICAgICBKCisJdGVzdF9jb21taXQgSiAmJgorCXRlc3RfY29tbWl0IEpCICYmCisJZ2l0IHJlc2V0IC0taGFyZCBKICYmCisJdGVzdF9jb21taXQgSkMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEogJiYKKwl0ZXN0X2NvbW1pdCBKVEVNUDEgJiYKKwl0ZXN0X21lcmdlIEpBIEpCICYmCisJdGVzdF9tZXJnZSBKQUEgSkMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEogJiYKKwl0ZXN0X2NvbW1pdCBKVEVNUDIgJiYKKwl0ZXN0X21lcmdlIEpEIEpCICYmCisJdGVzdF9tZXJnZSBKREQgSkMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEogJiYKKwl0ZXN0X2NvbW1pdCBKVEVNUDMgJiYKKwl0ZXN0X21lcmdlIEpFIEpDICYmCisJZ2l0IHJldi1wYXJzZSBKQyA+ZXhwZWN0ZWQgJiYKKwlnaXQgbWVyZ2UtYmFzZSAtLWFsbCAtLW9jdG9wdXMgSkFBIEpERCBKRSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxMS1yZXYtbGlzdC13aXRoLWJhZC1jb21taXQuc2ggYi90L3Q2MDExLXJldi1saXN0LXdpdGgtYmFkLWNvbW1pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNTFlYjQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxMS1yZXYtbGlzdC13aXRoLWJhZC1jb21taXQuc2gKQEAgLTAsMCArMSw2MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXYtbGlzdCBzaG91bGQgbm90aWNlIGJhZCBjb21taXRzJworCisuIC4vdGVzdC1saWIuc2gKKworIyBOb3RlOgorIyAtIGNvbXByZXNzaW9uIGxldmVsIGlzIHNldCB0byB6ZXJvIHRvIG1ha2UgImNvcnJ1cHRpb25zIiBlYXNpZXIgdG8gcGVyZm9ybQorIyAtIHJlZmxvZyBpcyBkaXNhYmxlZCB0byBhdm9pZCBleHRyYSByZWZlcmVuY2VzIHdoaWNoIHdvdWxkIHR3YXJ0IHRoZSB0ZXN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyBcCisgICAnCisgICBnaXQgaW5pdCAmJgorICAgZ2l0IGNvbmZpZyBjb3JlLmNvbXByZXNzaW9uIDAgJiYKKyAgIGdpdCBjb25maWcgY29yZS5sb2dhbGxyZWZ1cGRhdGVzIGZhbHNlICYmCisgICBlY2hvICJmb28iID4gZm9vICYmCisgICBnaXQgYWRkIGZvbyAmJgorICAgZ2l0IGNvbW1pdCAtbSAiZmlyc3QgY29tbWl0IiAmJgorICAgZWNobyAiYmFyIiA+IGJhciAmJgorICAgZ2l0IGFkZCBiYXIgJiYKKyAgIGdpdCBjb21taXQgLW0gInNlY29uZCBjb21taXQiICYmCisgICBlY2hvICJiYXoiID4gYmF6ICYmCisgICBnaXQgYWRkIGJheiAmJgorICAgZ2l0IGNvbW1pdCAtbSAidGhpcmQgY29tbWl0IiAmJgorICAgZWNobyAiZm9vIGFnYWluIiA+PiBmb28gJiYKKyAgIGdpdCBhZGQgZm9vICYmCisgICBnaXQgY29tbWl0IC1tICJmb3VydGggY29tbWl0IiAmJgorICAgZ2l0IHJlcGFjayAtYSAtZiAtZAorICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbnVtYmVyIG9mIHJldmlzaW9ucycgXAorICAgJworICAgcmV2cz0kKGdpdCByZXYtbGlzdCAtLWFsbCB8IHdjIC1sKSAmJgorICAgdGVzdCAkcmV2cyAtZXEgNCAmJgorICAgZmlyc3RfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEfjMpCisgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcnJ1cHQgc2Vjb25kIGNvbW1pdCBvYmplY3QnIFwKKyAgICcKKyAgIHBlcmwgLWkuYmFrIC1wZSAicy9zZWNvbmQgY29tbWl0L3NvY29uZCBjb21taXQvIiAuZ2l0L29iamVjdHMvcGFjay8qLnBhY2sgJiYKKyAgIHRlc3RfbXVzdF9mYWlsIGdpdCBmc2NrIC0tZnVsbAorICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBzaG91bGQgZmFpbCcgXAorICAgJworICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1saXN0IC0tYWxsID4gL2Rldi9udWxsCisgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCByZXBhY2sgX01VU1RfIGZhaWwnIFwKKyAgICcKKyAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBhY2sgLWEgLWYgLWQKKyAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlyc3QgY29tbWl0IGlzIHN0aWxsIGF2YWlsYWJsZScgXAorICAgJworICAgZ2l0IGxvZyAkZmlyc3RfY29tbWl0CisgICAnCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3Q2MDEyLXJldi1saXN0LXNpbXBsaWZ5LnNoIGIvdC90NjAxMi1yZXYtbGlzdC1zaW1wbGlmeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iODljZDZiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxMi1yZXYtbGlzdC1zaW1wbGlmeS5zaApAQCAtMCwwICsxLDEzMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlIHNpbXBsaWZpY2F0aW9uJworCisuIC4vdGVzdC1saWIuc2gKKworbm90ZSAoKSB7CisJZ2l0IHRhZyAiJDEiCit9CisKK3Vubm90ZSAoKSB7CisJZ2l0IG5hbWUtcmV2IC0tdGFncyAtLXN0ZGluIHwgc2VkIC1lICJzfCRfeDQwICh0YWdzL1woW14pXSpcKSkgfFwxIHxnIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvICJIaSB0aGVyZSIgPmZpbGUgJiYKKwllY2hvICJpbml0aWFsIiA+bG9zdCAmJgorCWdpdCBhZGQgZmlsZSBsb3N0ICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIkluaXRpYWwgZmlsZSBhbmQgbG9zdCIgJiYKKwlub3RlIEEgJiYKKworCWdpdCBicmFuY2ggb3RoZXItYnJhbmNoICYmCisKKwllY2hvICJIZWxsbyIgPmZpbGUgJiYKKwllY2hvICJzZWNvbmQiID5sb3N0ICYmCisJZ2l0IGFkZCBmaWxlIGxvc3QgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiTW9kaWZpZWQgZmlsZSBhbmQgbG9zdCIgJiYKKwlub3RlIEIgJiYKKworCWdpdCBjaGVja291dCBvdGhlci1icmFuY2ggJiYKKworCWVjaG8gIkhlbGxvIiA+ZmlsZSAmJgorCT5sb3N0ICYmCisJZ2l0IGFkZCBmaWxlIGxvc3QgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiTW9kaWZpZWQgdGhlIGZpbGUgaWRlbnRpY2FsbHkiICYmCisJbm90ZSBDICYmCisKKwllY2hvICJUaGlzIGlzIGEgc3R1cGlkIGV4YW1wbGUiID5hbm90aGVyLWZpbGUgJiYKKwlnaXQgYWRkIGFub3RoZXItZmlsZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJBZGQgYW5vdGhlciBmaWxlIiAmJgorCW5vdGUgRCAmJgorCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1tICJtZXJnZSIgbWFzdGVyICYmCisJPmxvc3QgJiYgZ2l0IGNvbW1pdCAtYSAtbSAibWVyZ2UiICYmCisJbm90ZSBFICYmCisKKwllY2hvICJZZXQgYW5vdGhlciIgPmVsaWYgJiYKKwlnaXQgYWRkIGVsaWYgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiSXJyZWxldmFudCBjaGFuZ2UiICYmCisJbm90ZSBGICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyAiWWV0IGFub3RoZXIiID5lbGlmICYmCisJZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gIkFub3RoZXIgaXJyZWxldmFudCBjaGFuZ2UiICYmCisJbm90ZSBHICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1tICJtZXJnZSIgb3RoZXItYnJhbmNoICYmCisJbm90ZSBIICYmCisKKwllY2hvICJGaW5hbCBjaGFuZ2UiID5maWxlICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gIkZpbmFsIGNoYW5nZSIgJiYKKwlub3RlIEkgJiYKKworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL3VucmVsYXRlZCAmJgorCWdpdCBybSAtZiAiKiIgJiYKKwllY2hvICJVbnJlbGF0ZWQgYnJhbmNoIiA+c2lkZSAmJgorCWdpdCBhZGQgc2lkZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJTaWRlIHJvb3QiICYmCisJbm90ZSBKICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtbSAiQ29vbGVzdCIgdW5yZWxhdGVkICYmCisJbm90ZSBLICYmCisKKwllY2hvICJJbW1hdGVyaWFsIiA+ZWxpZiAmJgorCWdpdCBhZGQgZWxpZiAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJMYXN0IiAmJgorCW5vdGUgTAorJworCitGTVQ9J3Rmb3JtYXQ6JVAgCSVIIHwgJXMnCisKK2NoZWNrX291dGNvbWUgKCkgeworCW91dGNvbWU9JDEKKwlzaGlmdAorCWZvciBjIGluICQxCisJZG8KKwkJZWNobyAiJGMiCisJZG9uZSA+ZXhwZWN0ICYmCisJc2hpZnQgJiYKKwlwYXJhbT0iJCoiICYmCisJdGVzdF9leHBlY3RfJG91dGNvbWUgImxvZyAkcGFyYW0iICcKKwkJZ2l0IGxvZyAtLXByZXR0eT0iJEZNVCIgLS1wYXJlbnRzICRwYXJhbSB8CisJCXVubm90ZSA+YWN0dWFsICYmCisJCXNlZCAtZSAicy9eLioJXChbXiBdKlwpIC4qL1wxLyIgPmNoZWNrIDxhY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGNoZWNrCisJJworfQorCitjaGVja19yZXN1bHQgKCkgeworCWNoZWNrX291dGNvbWUgc3VjY2VzcyAiJEAiCit9CisKK2NoZWNrX3Jlc3VsdCAnTCBLIEogSSBIIEcgRiBFIEQgQyBCIEEnIC0tZnVsbC1oaXN0b3J5CitjaGVja19yZXN1bHQgJ0sgSSBIIEUgQyBCIEEnIC0tZnVsbC1oaXN0b3J5IC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSyBJIEggRSBDIEIgQScgLS1mdWxsLWhpc3RvcnkgLS10b3BvLW9yZGVyIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSyBJIEggRSBDIEIgQScgLS1mdWxsLWhpc3RvcnkgLS1kYXRlLW9yZGVyIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnSSBFIEMgQiBBJyAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0kgQiBBJyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0kgQiBBJyAtLXRvcG8tb3JkZXIgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdIJyAtLWZpcnN0LXBhcmVudCAtLSBhbm90aGVyLWZpbGUKKworY2hlY2tfcmVzdWx0ICdFIEMgQiBBJyAtLWZ1bGwtaGlzdG9yeSBFIC0tIGxvc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1bGwgaGlzdG9yeSBzaW1wbGlmaWNhdGlvbiB3aXRob3V0IHBhcmVudCcgJworCXByaW50ZiAiJXNcbiIgRSBDIEIgQSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLXByZXR0eT0iJEZNVCIgLS1mdWxsLWhpc3RvcnkgRSAtLSBsb3N0IHwKKwl1bm5vdGUgPmFjdHVhbCAmJgorCXNlZCAtZSAicy9eLioJXChbXiBdKlwpIC4qL1wxLyIgPmNoZWNrIDxhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY2hlY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1mdWxsLWRpZmYgaXMgbm90IGFmZmVjdGVkIGJ5IC0tcGFyZW50cycgJworCWdpdCBsb2cgLXAgLS1wcmV0dHk9IiVIIiAtLWZ1bGwtZGlmZiAtLSBmaWxlID5leHBlY3RlZCAmJgorCWdpdCBsb2cgLXAgLS1wcmV0dHk9IiVIIiAtLWZ1bGwtZGlmZiAtLXBhcmVudHMgLS0gZmlsZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxMy1yZXYtbGlzdC1yZXZlcnNlLXBhcmVudHMuc2ggYi90L3Q2MDEzLXJldi1saXN0LXJldmVyc2UtcGFyZW50cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41OWZjMmYwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxMy1yZXYtbGlzdC1yZXZlcnNlLXBhcmVudHMuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Jy0tcmV2ZXJzZSBjb21iaW5lcyB3aXRoIC0tcGFyZW50cycKKworLiAuL3Rlc3QtbGliLnNoCisKKworY29tbWl0ICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwllY2hvICQxID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIC0tcmV2ZXJzZSBleGFtcGxlJyAnCisJY29tbWl0IG9uZSAmJgorCWdpdCB0YWcgcm9vdCAmJgorCWNvbW1pdCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBIRUFEXiAmJgorCWNvbW1pdCB0aHJlZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyBzaWRlICYmCisJY29tbWl0IGZpdmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmV2ZXJzZSAtLXBhcmVudHMgLS1mdWxsLWhpc3RvcnkgY29tYmluZXMgY29ycmVjdGx5JyAnCisJZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLWZ1bGwtaGlzdG9yeSBtYXN0ZXIgLS0gZm9vIHwKKwkJcGVybCAtZSAicHJpbnQgcmV2ZXJzZSA8PiIgPiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLXJldmVyc2UgLS1wYXJlbnRzIC0tZnVsbC1oaXN0b3J5IG1hc3RlciAtLSBmb28gXAorCQk+IGFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ib3VuZGFyeSBkb2VzIHRvbycgJworCWdpdCByZXYtbGlzdCAtLWJvdW5kYXJ5IC0tcGFyZW50cyAtLWZ1bGwtaGlzdG9yeSBtYXN0ZXIgXnJvb3QgLS0gZm9vIHwKKwkJcGVybCAtZSAicHJpbnQgcmV2ZXJzZSA8PiIgPiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWJvdW5kYXJ5IC0tcmV2ZXJzZSAtLXBhcmVudHMgLS1mdWxsLWhpc3RvcnkgXAorCQltYXN0ZXIgXnJvb3QgLS0gZm9vID4gYWN0dWFsICYmCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMTQtcmV2LWxpc3QtYWxsLnNoIGIvdC90NjAxNC1yZXYtbGlzdC1hbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzliZWRkMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMTQtcmV2LWxpc3QtYWxsLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSctLWFsbCBpbmNsdWRlcyBkZXRhY2hlZCBIRUFEcycKKworLiAuL3Rlc3QtbGliLnNoCisKKworY29tbWl0ICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwllY2hvICQxID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWNvbW1pdCBvbmUgJiYKKwljb21taXQgdHdvICYmCisJZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJY29tbWl0IGRldGFjaGVkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1hbGwgbGlzdHMgZGV0YWNoZWQgSEVBRCcgJworCisJdGVzdCAzID0gJChnaXQgcmV2LWxpc3QgLS1hbGwgfCB3YyAtbCkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgZG9lcyBub3QgbG9zZSBkZXRhY2hlZCBIRUFEJyAnCisKKwlnaXQgZ2MgJiYKKwlnaXQgcHJ1bmUgLS1leHBpcmU9bm93ICYmCisJZ2l0IHNob3cgSEVBRAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZ3JhcGggLS1uby13YWxrIGlzIGZvcmJpZGRlbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtbGlzdCAtLWdyYXBoIC0tbm8td2FsayBIRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxNS1yZXYtbGlzdC1zaG93LWFsbC1wYXJlbnRzLnNoIGIvdC90NjAxNS1yZXYtbGlzdC1zaG93LWFsbC1wYXJlbnRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhiMTQ2ZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDE1LXJldi1saXN0LXNob3ctYWxsLXBhcmVudHMuc2gKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249Jy0tc2hvdy1hbGwgLS1wYXJlbnRzIGRvZXMgbm90IHJld3JpdGUgVFJFRVNBTUUgY29tbWl0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCAtLXNob3ctYWxsIC0tcGFyZW50cyB0ZXN0JyAnCisJdGVzdF9jb21taXQgb25lIGZvby50eHQgJiYKKwljb21taXQxPWBnaXQgcmV2LWxpc3QgLTEgSEVBRGAgJiYKKwl0ZXN0X2NvbW1pdCB0d28gYmFyLnR4dCAmJgorCWNvbW1pdDI9YGdpdCByZXYtbGlzdCAtMSBIRUFEYCAmJgorCXRlc3RfY29tbWl0IHRocmVlIGZvby50eHQgJiYKKwljb21taXQzPWBnaXQgcmV2LWxpc3QgLTEgSEVBRGAKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcGFyZW50cyByZXdyaXRlcyBUUkVFU0FNRSBwYXJlbnRzIGNvcnJlY3RseScgJworCWVjaG8gJGNvbW1pdDMgJGNvbW1pdDEgPiBleHBlY3RlZCAmJgorCWVjaG8gJGNvbW1pdDEgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIEhFQUQgLS0gZm9vLnR4dCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wYXJlbnRzIC0tc2hvdy1hbGwgZG9lcyBub3QgcmV3cml0ZXMgVFJFRVNBTUUgcGFyZW50cycgJworCWVjaG8gJGNvbW1pdDMgJGNvbW1pdDIgPiBleHBlY3RlZCAmJgorCWVjaG8gJGNvbW1pdDIgJGNvbW1pdDEgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICRjb21taXQxID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tcGFyZW50cyAtLXNob3ctYWxsIEhFQUQgLS0gZm9vLnR4dCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDE2LXJldi1saXN0LWdyYXBoLXNpbXBsaWZ5LWhpc3Rvcnkuc2ggYi90L3Q2MDE2LXJldi1saXN0LWdyYXBoLXNpbXBsaWZ5LWhpc3Rvcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjcxODFkMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMTYtcmV2LWxpc3QtZ3JhcGgtc2ltcGxpZnktaGlzdG9yeS5zaApAQCAtMCwwICsxLDI2NyBAQAorIyEvYmluL3NoCisKKyMgVGhlcmUncyBtb3JlIHRoYW4gb25lICJjb3JyZWN0IiB3YXkgdG8gcmVwcmVzZW50IHRoZSBoaXN0b3J5IGdyYXBoaWNhbGx5LgorIyBUaGVzZSB0ZXN0cyBkZXBlbmQgb24gdGhlIGN1cnJlbnQgYmVoYXZpb3Igb2YgdGhlIGdyYXBoaW5nIGNvZGUuICBJZiB0aGUKKyMgZ3JhcGhpbmcgY29kZSBpcyBldmVyIGNoYW5nZWQgdG8gZHJhdyB0aGUgb3V0cHV0IGRpZmZlcmVudGx5LCB0aGVzZSB0ZXN0cworIyBjYXNlcyB3aWxsIG5lZWQgdG8gYmUgdXBkYXRlZCB0byBrbm93IGFib3V0IHRoZSBuZXcgbGF5b3V0LgorCit0ZXN0X2Rlc2NyaXB0aW9uPSctLWdyYXBoIGFuZCBzaW1wbGlmaWVkIGhpc3RvcnknCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgcmV2LWxpc3QgLS1ncmFwaCB0ZXN0JyAnCisJIyAzIGNvbW1pdHMgb24gYnJhbmNoIEEKKwl0ZXN0X2NvbW1pdCBBMSBmb28udHh0ICYmCisJdGVzdF9jb21taXQgQTIgYmFyLnR4dCAmJgorCXRlc3RfY29tbWl0IEEzIGJhci50eHQgJiYKKwlnaXQgYnJhbmNoIC1tIG1hc3RlciBBICYmCisKKwkjIDIgY29tbWl0cyBvbiBicmFuY2ggQiwgc3RhcnRlZCBmcm9tIEExCisJZ2l0IGNoZWNrb3V0IC1iIEIgQTEgJiYKKwl0ZXN0X2NvbW1pdCBCMSBmb28udHh0ICYmCisJdGVzdF9jb21taXQgQjIgYWJjLnR4dCAmJgorCisJIyAyIGNvbW1pdHMgb24gYnJhbmNoIEMsIHN0YXJ0ZWQgZnJvbSBBMgorCWdpdCBjaGVja291dCAtYiBDIEEyICYmCisJdGVzdF9jb21taXQgQzEgeHl6LnR4dCAmJgorCXRlc3RfY29tbWl0IEMyIHh5ei50eHQgJiYKKworCSMgT2N0b3B1cyBtZXJnZSBCIGFuZCBDIGludG8gYnJhbmNoIEEKKwlnaXQgY2hlY2tvdXQgQSAmJgorCWdpdCBtZXJnZSBCIEMgJiYKKwlnaXQgdGFnIEE0ICYmCisKKwl0ZXN0X2NvbW1pdCBBNSBiYXIudHh0ICYmCisKKwkjIE1vcmUgY29tbWl0cyBvbiBDLCB0aGVuIG1lcmdlIEMgaW50byBBCisJZ2l0IGNoZWNrb3V0IEMgJiYKKwl0ZXN0X2NvbW1pdCBDMyBmb28udHh0ICYmCisJdGVzdF9jb21taXQgQzQgYmFyLnR4dCAmJgorCWdpdCBjaGVja291dCBBICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgQyAmJgorCWdpdCB0YWcgQTYgJiYKKworCXRlc3RfY29tbWl0IEE3IGJhci50eHQgJiYKKworCSMgU3RvcmUgY29tbWl0IG5hbWVzIGluIHZhcmlhYmxlcyBmb3IgbGF0ZXIgdXNlCisJQTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEExKSAmJgorCUEyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBBMikgJiYKKwlBMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQTMpICYmCisJQTQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEE0KSAmJgorCUE1PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBBNSkgJiYKKwlBNj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQTYpICYmCisJQTc9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEE3KSAmJgorCUIxPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBCMSkgJiYKKwlCMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQjIpICYmCisJQzE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEMxKSAmJgorCUMyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBDMikgJiYKKwlDMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgQzMpICYmCisJQzQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEM0KQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ncmFwaCAtLWFsbCcgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzMiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBNSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgICAgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICBcXCAgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKi0uIFxcICAgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCBcXCBcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCAqICRDMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgKiAkQzEiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqIHwgJEIyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiB8ICRCMSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvfCAgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEEyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTEiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1hbGwgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKyMgTWFrZSBzdXJlIHRoZSBncmFwaF9pc19pbnRlcmVzdGluZygpIGNvZGUgc3RpbGwgcmVhbGl6ZXMKKyMgdGhhdCB1bmRlY29yYXRlZCBtZXJnZXMgYXJlIGludGVyZXN0aW5nLCBldmVuIHdpdGggLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIC0tc2ltcGxpZnktYnktZGVjb3JhdGlvbicgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZ2l0IHRhZyAtZCBBNCAmJgorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogICAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8ICAgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAgXFwgICAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiotLiBcXCAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgXFwgXFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgfC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwgKiAkQzIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCB8ICogJEMxIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiB8ICRCMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogfCAkQjEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8IHwgJEEzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8L3wgICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8LyAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEExIiA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWdyYXBoIC0tYWxsIC0tc2ltcGxpZnktYnktZGVjb3JhdGlvbiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGdldCByaWQgb2YgZGVjb3JhdGlvbnMgb24gQicgJworCWdpdCB0YWcgLWQgQjIgJiYKKwlnaXQgdGFnIC1kIEIxICYmCisJZ2l0IGJyYW5jaCAtZCBCCisnCisKKyMgR3JhcGggd2l0aCBicmFuY2ggQiBzaW1wbGlmaWVkIGF3YXkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggLS1zaW1wbGlmeS1ieS1kZWNvcmF0aW9uIHBydW5lIGJyYW5jaCBCJyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE2IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDMyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEE1IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgXFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IHwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMxIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMSIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLXNpbXBsaWZ5LWJ5LWRlY29yYXRpb24gLS1hbGwgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggLS1mdWxsLWhpc3RvcnkgLS0gYmFyLnR4dCcgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogfCAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICAgJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCBcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEEzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTIiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1mdWxsLWhpc3RvcnkgLS1hbGwgLS0gYmFyLnR4dCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1ncmFwaCAtLWZ1bGwtaGlzdG9yeSAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBiYXIudHh0JyAnCisJcm0gLWYgZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBNyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICAgJEE2IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInxcXCAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8ICRBNSIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEEzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTIiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1mdWxsLWhpc3RvcnkgLS1zaW1wbGlmeS1tZXJnZXMgLS1hbGwgXAorCQktLSBiYXIudHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIC0tIGJhci50eHQnICcKKwlybSAtZiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE1IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLWFsbCAtLSBiYXIudHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIC0tc3BhcnNlIC0tIGJhci50eHQnICcKKwlybSAtZiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE2IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE1IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDMyIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEMyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQzEiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqICRBMSIgPj4gZXhwZWN0ZWQgJiYKKwlnaXQgcmV2LWxpc3QgLS1ncmFwaCAtLXNwYXJzZSAtLWFsbCAtLSBiYXIudHh0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIF5DNCcgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTUiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEIyIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgKiAkQjEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTMiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1hbGwgXkM0ID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWdyYXBoIF5DMycgJworCXJtIC1mIGV4cGVjdGVkICYmCisJZWNobyAiKiAkQTciID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiAgICRBNiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8XFwgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEM0IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE1IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogICAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRCMiIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8ICogJEIxIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEEzIiA+PiBleHBlY3RlZCAmJgorCWdpdCByZXYtbGlzdCAtLWdyYXBoIC0tYWxsIF5DMyA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworIyBJIGRvbid0IHRoaW5rIHRoZSBvcmRlcmluZyBvZiB0aGUgYm91bmRhcnkgY29tbWl0cyBpcyByZWFsbHkKKyMgdGhhdCBpbXBvcnRhbnQsIGJ1dCB0aGlzIHRlc3QgZGVwZW5kcyBvbiBpdC4gIElmIHRoZSBvcmRlcmluZyBldmVyIGNoYW5nZXMKKyMgaW4gdGhlIGNvZGUsIHdlJ2xsIG5lZWQgdG8gdXBkYXRlIHRoaXMgdGVzdC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhcGggLS1ib3VuZGFyeSBeQzMnICcKKwlybSAtZiBleHBlY3RlZCAmJgorCWVjaG8gIiogJEE3IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiogICAkQTYiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqICRDNCIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqIHwgJEE1IiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgfCAgICAgIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwgIFxcICAgICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICIqLS4gXFwgICAkQTQiID4+IGV4cGVjdGVkICYmCisJZWNobyAifFxcIFxcIFxcICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqIHwgfCAkQjIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifCAqIHwgfCAkQjEiID4+IGV4cGVjdGVkICYmCisJZWNobyAiKiB8IHwgfCAkQTMiID4+IGV4cGVjdGVkICYmCisJZWNobyAibyB8IHwgfCAkQTIiID4+IGV4cGVjdGVkICYmCisJZWNobyAifC8gLyAvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAibyB8IHwgJEExIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gIiAvIC8gICIgPj4gZXhwZWN0ZWQgJiYKKwllY2hvICJ8IG8gJEMzIiA+PiBleHBlY3RlZCAmJgorCWVjaG8gInwvICAiID4+IGV4cGVjdGVkICYmCisJZWNobyAibyAkQzIiID4+IGV4cGVjdGVkICYmCisJZ2l0IHJldi1saXN0IC0tZ3JhcGggLS1ib3VuZGFyeSAtLWFsbCBeQzMgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxNy1yZXYtbGlzdC1zdGRpbi5zaCBiL3QvdDYwMTctcmV2LWxpc3Qtc3RkaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjY3YjM3NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMTctcmV2LWxpc3Qtc3RkaW4uc2gKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSwgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nbG9nIGZhbWlseSBsZWFybnMgLS1zdGRpbicKKworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrICgpIHsKKwlmb3IgY21kIGluIHJldi1saXN0ICJsb2cgLS1zdGF0IgorCWRvCisJCWZvciBpIGluICIkQCIKKwkJZG8KKwkJCXByaW50ZiAiJXNcbiIgJGkKKwkJZG9uZSA+aW5wdXQgJiYKKwkJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2sgJGNtZCAkKiIgJworCQkJZ2l0ICRjbWQgJChjYXQgaW5wdXQpID5leHBlY3QgJiYKKwkJCWdpdCAkY21kIC0tc3RkaW4gPGlucHV0ID5hY3R1YWwgJiYKKwkJCXNlZCAtZSAicy9eL2lucHV0IC8iIGlucHV0ICYmCisJCQlzZWQgLWUgInMvXi9vdXRwdXQgLyIgZXhwZWN0ICYmCisJCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJCScKKwlkb25lCit9CisKK3RoZW09JzEgMiAzIDQgNSA2IDcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCSgKKwkJZm9yIGkgaW4gMCAkdGhlbQorCQlkbworCQkJZm9yIGogaW4gJHRoZW0KKwkJCWRvCisJCQkJZWNobyAkaS4kaiA+ZmlsZS0kaiAmJgorCQkJCWdpdCBhZGQgZmlsZS0kaiB8fCBleGl0CisJCQlkb25lICYmCisJCQl0ZXN0X3RpY2sgJiYKKwkJCWdpdCBjb21taXQgLW0gJGkgfHwgZXhpdAorCQlkb25lICYmCisJCWZvciBpIGluICR0aGVtCisJCWRvCisJCQlnaXQgY2hlY2tvdXQgLWIgc2lkZS0kaSBtYXN0ZXJ+JGkgJiYKKwkJCWVjaG8gdXBkYXRlZCAkaSA+ZmlsZS0kaSAmJgorCQkJZ2l0IGFkZCBmaWxlLSRpICYmCisJCQl0ZXN0X3RpY2sgJiYKKwkJCWdpdCBjb21taXQgLW0gc2lkZS0kaSB8fCBleGl0CisJCWRvbmUKKwkpCisnCisKK2NoZWNrIG1hc3RlcgorY2hlY2sgc2lkZS0xIF5zaWRlLTQKK2NoZWNrIHNpZGUtMSBec2lkZS03IC0tCitjaGVjayBzaWRlLTEgXnNpZGUtNyAtLSBmaWxlLTEKK2NoZWNrIHNpZGUtMSBec2lkZS03IC0tIGZpbGUtMgorY2hlY2sgc2lkZS0zIF5zaWRlLTQgLS0gZmlsZS0zCitjaGVjayBzaWRlLTMgXnNpZGUtMgorY2hlY2sgc2lkZS0zIF5zaWRlLTIgLS0gZmlsZS0xCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vdCBvbmx5IC0tc3RkaW4nICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwk3CisKKwlmaWxlLTEKKwlmaWxlLTIKKwlFT0YKKwljYXQgPmlucHV0IDw8LUVPRiAmJgorCV5tYXN0ZXJeCisJLS0KKwlmaWxlLTIKKwlFT0YKKwlnaXQgbG9nIC0tcHJldHR5PXRmb3JtYXQ6JXMgLS1uYW1lLW9ubHkgLS1zdGRpbiBtYXN0ZXIgLS0gZmlsZS0xIFwKKwkJPGlucHV0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAxOC1yZXYtbGlzdC1nbG9iLnNoIGIvdC90NjAxOC1yZXYtbGlzdC1nbG9iLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQwMGY3ZGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDE4LXJldi1saXN0LWdsb2Iuc2gKQEAgLTAsMCArMSwzMjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXYtbGlzdC9yZXYtcGFyc2UgLS1nbG9iJworCisuIC4vdGVzdC1saWIuc2gKKworY29tbWl0ICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwllY2hvICQxID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICIkMSIKK30KKworY29tcGFyZSAoKSB7CisJIyBTcGxpdCBhcmd1bWVudHMgb24gd2hpdGVzcGFjZS4KKwlnaXQgJDEgJDIgPmV4cGVjdGVkICYmCisJZ2l0ICQxICQzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKworCWNvbW1pdCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc3Vic3BhY2Uvb25lIG1hc3RlciAmJgorCWNvbW1pdCBvbmUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc3Vic3BhY2UvdHdvIG1hc3RlciAmJgorCWNvbW1pdCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgc3Vic3BhY2UteCBtYXN0ZXIgJiYKKwljb21taXQgc3Vic3BhY2UteCAmJgorCWdpdCBjaGVja291dCAtYiBvdGhlci90aHJlZSBtYXN0ZXIgJiYKKwljb21taXQgdGhyZWUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc29tZXJlZiBtYXN0ZXIgJiYKKwljb21taXQgc29tZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwljb21taXQgbWFzdGVyMiAmJgorCWdpdCB0YWcgZm9vL2JhciBtYXN0ZXIgJiYKKwljb21taXQgbWFzdGVyMyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9mb28vYmF6IG1hc3RlciAmJgorCWNvbW1pdCBtYXN0ZXI0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8qJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1yZWZzL2hlYWRzL3N1YnNwYWNlLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8nICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPXJlZnMvaGVhZHMvc3Vic3BhY2UvIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9aGVhZHMvc3Vic3BhY2UvJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZ2xvYj1oZWFkcy9zdWJzcGFjZScgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9aGVhZHMvc3Vic3BhY2UiCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncmV2LXBhcnNlIGFjY2VwdHMgLS1nbG9iIGFzIGRldGFjaGVkIG9wdGlvbicgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2IgaGVhZHMvc3Vic3BhY2UiCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncmV2LXBhcnNlIGlzIG5vdCBjb25mdXNlZCBieSBvcHRpb24tbGlrZSBnbG9iJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAibWFzdGVyIiAiLS1nbG9iIC0tc3ltYm9saWMgbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWJyYW5jaGVzPXN1YnNwYWNlLyonICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1icmFuY2hlcz1zdWJzcGFjZS8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWJyYW5jaGVzPXN1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWJyYW5jaGVzPXN1YnNwYWNlLyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1icmFuY2hlcz1zdWJzcGFjZScgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWJyYW5jaGVzPXN1YnNwYWNlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiAtLWdsb2I9aGVhZHMvb3RoZXIvKicgJworCisJY29tcGFyZSByZXYtcGFyc2UgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28gb3RoZXIvdGhyZWUiICItLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiAtLWdsb2I9aGVhZHMvb3RoZXIvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1nbG9iPWhlYWRzL3NvbWVyZWYvKiBtYXN0ZXInICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJtYXN0ZXIiICItLWdsb2I9aGVhZHMvc29tZXJlZi8qIG1hc3RlciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS1nbG9iPWhlYWRzLyonICcKKworCWNvbXBhcmUgcmV2LXBhcnNlICJtYXN0ZXIgb3RoZXIvdGhyZWUgc29tZXJlZiBzdWJzcGFjZS14IHN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9aGVhZHMvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgLS10YWdzPWZvbycgJworCisJY29tcGFyZSByZXYtcGFyc2UgImZvby9iYXIiICItLXRhZ3M9Zm9vIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1wYXJzZSAtLXJlbW90ZXM9Zm9vJyAnCisKKwljb21wYXJlIHJldi1wYXJzZSAiZm9vL2JheiIgIi0tcmVtb3Rlcz1mb28iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZXhjbHVkZSB3aXRoIC0tYnJhbmNoZXMnICcKKwljb21wYXJlIHJldi1wYXJzZSAiLS1leGNsdWRlPSovKiAtLWJyYW5jaGVzIiAibWFzdGVyIHNvbWVyZWYgc3Vic3BhY2UteCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LXBhcnNlIC0tZXhjbHVkZSB3aXRoIC0tYWxsJyAnCisJY29tcGFyZSByZXYtcGFyc2UgIi0tZXhjbHVkZT1yZWZzL3JlbW90ZXMvKiAtLWFsbCIgIi0tYnJhbmNoZXMgLS10YWdzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtcGFyc2UgYWNjdW11bGF0ZXMgbXVsdGlwbGUgLS1leGNsdWRlJyAnCisJY29tcGFyZSByZXYtcGFyc2UgIi0tZXhjbHVkZT1yZWZzL3JlbW90ZXMvKiAtLWV4Y2x1ZGU9cmVmcy90YWdzLyogLS1hbGwiIC0tYnJhbmNoZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPXJlZnMvaGVhZHMvc3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1yZWZzL2hlYWRzL3N1YnNwYWNlLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iIHJlZnMvaGVhZHMvc3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYiByZWZzL2hlYWRzL3N1YnNwYWNlLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3Qgbm90IGNvbmZ1c2VkIGJ5IG9wdGlvbi1saWtlIC0tZ2xvYiBhcmcnICcKKworCWNvbXBhcmUgcmV2LWxpc3QgIm1hc3RlciIgIi0tZ2xvYiAtMCBtYXN0ZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3N1YnNwYWNlLyonICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9aGVhZHMvc3Vic3BhY2UvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8nICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWdsb2I9cmVmcy9oZWFkcy9zdWJzcGFjZS8iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3N1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8iCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3N1YnNwYWNlJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIiAiLS1nbG9iPWhlYWRzL3N1YnNwYWNlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYnJhbmNoZXM9c3Vic3BhY2UvKicgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tYnJhbmNoZXM9c3Vic3BhY2UvKiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWJyYW5jaGVzPXN1YnNwYWNlLycgJworCisJY29tcGFyZSByZXYtbGlzdCAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tYnJhbmNoZXM9c3Vic3BhY2UvIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYnJhbmNoZXM9c3Vic3BhY2UnICcKKworCWNvbXBhcmUgcmV2LWxpc3QgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iICItLWJyYW5jaGVzPXN1YnNwYWNlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYnJhbmNoZXMnICcKKworCWNvbXBhcmUgcmV2LWxpc3QgIm1hc3RlciBzdWJzcGFjZS14IHNvbWVyZWYgb3RoZXIvdGhyZWUgc3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tYnJhbmNoZXMiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzL3NvbWVyZWYvKiBtYXN0ZXInICcKKworCWNvbXBhcmUgcmV2LWxpc3QgIm1hc3RlciIgIi0tZ2xvYj1oZWFkcy9zb21lcmVmLyogbWFzdGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qIC0tZ2xvYj1oZWFkcy9vdGhlci8qJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJzdWJzcGFjZS9vbmUgc3Vic3BhY2UvdHdvIG90aGVyL3RocmVlIiAiLS1nbG9iPWhlYWRzL3N1YnNwYWNlLyogLS1nbG9iPWhlYWRzL290aGVyLyoiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1nbG9iPWhlYWRzLyonICcKKworCWNvbXBhcmUgcmV2LWxpc3QgIm1hc3RlciBvdGhlci90aHJlZSBzb21lcmVmIHN1YnNwYWNlLXggc3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgIi0tZ2xvYj1oZWFkcy8qIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tdGFncz1mb28nICcKKworCWNvbXBhcmUgcmV2LWxpc3QgImZvby9iYXIiICItLXRhZ3M9Zm9vIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tdGFncycgJworCisJY29tcGFyZSByZXYtbGlzdCAiZm9vL2JhciIgIi0tdGFncyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLXJlbW90ZXM9Zm9vJyAnCisKKwljb21wYXJlIHJldi1saXN0ICJmb28vYmF6IiAiLS1yZW1vdGVzPWZvbyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWV4Y2x1ZGUgd2l0aCAtLWJyYW5jaGVzJyAnCisJY29tcGFyZSByZXYtbGlzdCAiLS1leGNsdWRlPSovKiAtLWJyYW5jaGVzIiAibWFzdGVyIHNvbWVyZWYgc3Vic3BhY2UteCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1leGNsdWRlIHdpdGggLS1hbGwnICcKKwljb21wYXJlIHJldi1saXN0ICItLWV4Y2x1ZGU9cmVmcy9yZW1vdGVzLyogLS1hbGwiICItLWJyYW5jaGVzIC0tdGFncyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgYWNjdW11bGF0ZXMgbXVsdGlwbGUgLS1leGNsdWRlJyAnCisJY29tcGFyZSByZXYtbGlzdCAiLS1leGNsdWRlPXJlZnMvcmVtb3Rlcy8qIC0tZXhjbHVkZT1yZWZzL3RhZ3MvKiAtLWFsbCIgLS1icmFuY2hlcworJworCisKKyMgImdpdCByZXYtbGlzdDxFTlRFUj4iIGlzIGxpa2VseSB0byBiZSBhIGJ1ZyBpbiB0aGUgY2FsbGluZyBzY3JpcHQgYW5kIG1heQorIyBkZXNlcnZlIGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBkbyBjYXNlcyB3aGVyZSBzZXQgb2YgcmVmcyBwcm9ncmFtYXRpY2FsbHkKKyMgZ2l2ZW4gdXNpbmcgZ2xvYmJpbmcgYW5kL29yIC0tc3RkaW4gbmVlZCB0byBmYWlsIHdpdGggdGhlIHNhbWUgZXJyb3IsIG9yCisjIGFyZSB3ZSBiZXR0ZXIgb2ZmIHJlcG9ydGluZyBhIHN1Y2Nlc3Mgd2l0aCBubyBvdXRwdXQ/ICBUaGUgZm9sbG93aW5nIGZldworIyB0ZXN0cyBkb2N1bWVudCB0aGUgY3VycmVudCBiZWhhdmlvdXIgdG8gcmVtaW5kIHVzIHRoYXQgd2UgbWlnaHQgd2FudCB0bworIyB0aGluayBhYm91dCB0aGlzIGlzc3VlLgorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZXYtbGlzdCBtYXkgd2FudCB0byBzdWNjZWVkIHdpdGggZW1wdHkgb3V0cHV0IG9uIG5vIGlucHV0ICgxKScgJworCT5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1zdGRpbiA8ZXhwZWN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3Jldi1saXN0IG1heSB3YW50IHRvIHN1Y2NlZWQgd2l0aCBlbXB0eSBvdXRwdXQgb24gbm8gaW5wdXQgKDIpJyAnCisJPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWV4Y2x1ZGU9KiAtLWFsbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZXYtbGlzdCBtYXkgd2FudCB0byBzdWNjZWVkIHdpdGggZW1wdHkgb3V0cHV0IG9uIG5vIGlucHV0ICgzKScgJworCSgKKwkJdGVzdF9jcmVhdGVfcmVwbyBlbXB0eSAmJgorCQljZCBlbXB0eSAmJgorCQk+ZXhwZWN0ICYmCisJCWdpdCByZXYtbGlzdCAtLWFsbCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3J0bG9nIGFjY2VwdHMgLS1nbG9iLy0tdGFncy8tLXJlbW90ZXMnICcKKworCWNvbXBhcmUgc2hvcnRsb2cgInN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iIC0tYnJhbmNoZXM9c3Vic3BhY2UgJiYKKwljb21wYXJlIHNob3J0bG9nIFwKKwkgICJtYXN0ZXIgc3Vic3BhY2UteCBzb21lcmVmIG90aGVyL3RocmVlIHN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iIFwKKwkgIC0tYnJhbmNoZXMgJiYKKwljb21wYXJlIHNob3J0bG9nIG1hc3RlciAiLS1nbG9iPWhlYWRzL3NvbWVyZWYvKiBtYXN0ZXIiICYmCisJY29tcGFyZSBzaG9ydGxvZyAic3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byBvdGhlci90aHJlZSIgXAorCSAgIi0tZ2xvYj1oZWFkcy9zdWJzcGFjZS8qIC0tZ2xvYj1oZWFkcy9vdGhlci8qIiAmJgorCWNvbXBhcmUgc2hvcnRsb2cgXAorCSAgIm1hc3RlciBvdGhlci90aHJlZSBzb21lcmVmIHN1YnNwYWNlLXggc3Vic3BhY2Uvb25lIHN1YnNwYWNlL3R3byIgXAorCSAgIi0tZ2xvYj1oZWFkcy8qIiAmJgorCWNvbXBhcmUgc2hvcnRsb2cgZm9vL2JhciAtLXRhZ3M9Zm9vICYmCisJY29tcGFyZSBzaG9ydGxvZyBmb28vYmFyIC0tdGFncyAmJgorCWNvbXBhcmUgc2hvcnRsb2cgZm9vL2JheiAtLXJlbW90ZXM9Zm9vCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnc2hvcnRsb2cgYWNjZXB0cyAtLWdsb2IgYXMgZGV0YWNoZWQgb3B0aW9uJyAnCisKKwljb21wYXJlIHNob3J0bG9nIFwKKwkgICJtYXN0ZXIgb3RoZXIvdGhyZWUgc29tZXJlZiBzdWJzcGFjZS14IHN1YnNwYWNlL29uZSBzdWJzcGFjZS90d28iIFwKKwkgICItLWdsb2IgaGVhZHMvKiIKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdzaG9ydGxvZyAtLWdsb2IgaXMgbm90IGNvbmZ1c2VkIGJ5IG9wdGlvbi1saWtlIGFyZ3VtZW50JyAnCisKKwljb21wYXJlIHNob3J0bG9nIG1hc3RlciAiLS1nbG9iIC1lIG1hc3RlciIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMTktcmV2LWxpc3QtYW5jZXN0cnktcGF0aC5zaCBiL3QvdDYwMTktcmV2LWxpc3QtYW5jZXN0cnktcGF0aC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYWJlYmFlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAxOS1yZXYtbGlzdC1hbmNlc3RyeS1wYXRoLnNoCkBAIC0wLDAgKzEsMTU3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nLS1hbmNlc3RyeS1wYXRoJworCisjICAgICAgICAgIEQtLS1FLS0tLS0tLUYKKyMgICAgICAgICAvICAgICBcICAgICAgIFwKKyMgICAgQi0tLUMtLS1HLS0tSC0tLUktLS1KCisjICAgLyAgICAgICAgICAgICAgICAgICAgIFwKKyMgIEEtLS0tLS0tSy0tLS0tLS0tLS0tLS0tLUwtLU0KKyMKKyMgIEQuLk0gICAgICAgICAgICAgICAgID09IEUgRiBHIEggSSBKIEsgTCBNCisjICAtLWFuY2VzdHJ5LXBhdGggRC4uTSA9PSBFIEYgSCBJIEogTCBNCisjCisjICBELi5NIC0tIE0udCAgICAgICAgICAgICAgICAgPT0gTQorIyAgLS1hbmNlc3RyeS1wYXRoIEQuLk0gLS0gTS50ID09IE0KKyMKKyMgIEYuLi5JICAgICAgICAgICAgICAgICA9PSBGIEcgSCBJCisjICAtLWFuY2VzdHJ5LXBhdGggRi4uLkkgPT0gRiBIIEkKKyMKKyMgIEcuLk0gLS0gRy50ICAgICAgICAgICAgICAgICA9PSBbbm90aGluZyAtIHdhcyBkcm9wcGVkIGluICItcyBvdXJzIiBtZXJnZSBMXQorIyAgLS1hbmNlc3RyeS1wYXRoIEcuLk0gLS0gRy50ID09IEwKKyMgIC0tYW5jZXN0cnktcGF0aCAtLXNpbXBsaWZ5LW1lcmdlcyBHXi4uTSAtLSBHLnQgPT0gRyBMCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X21lcmdlICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyAtbSAiJDIiICIkMSIgJiYKKwlnaXQgdGFnICIkMiIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJdGVzdF9jb21taXQgQSAmJgorCXRlc3RfY29tbWl0IEIgJiYKKwl0ZXN0X2NvbW1pdCBDICYmCisJdGVzdF9jb21taXQgRCAmJgorCXRlc3RfY29tbWl0IEUgJiYKKwl0ZXN0X2NvbW1pdCBGICYmCisJZ2l0IHJlc2V0IC0taGFyZCBDICYmCisJdGVzdF9jb21taXQgRyAmJgorCXRlc3RfbWVyZ2UgRSBIICYmCisJdGVzdF9jb21taXQgSSAmJgorCXRlc3RfbWVyZ2UgRiBKICYmCisJZ2l0IHJlc2V0IC0taGFyZCBBICYmCisJdGVzdF9jb21taXQgSyAmJgorCXRlc3RfbWVyZ2UgSiBMICYmCisJdGVzdF9jb21taXQgTQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBELi5NJyAnCisJZm9yIGMgaW4gRSBGIEcgSCBJIEogSyBMIE07IGRvIGVjaG8gJGM7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWZvcm1hdD0lcyBELi5NIHwKKwlzZWQgLWUgIi9eY29tbWl0IC9kIiB8CisJc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggRC4uTScgJworCWZvciBjIGluIEUgRiBIIEkgSiBMIE07IGRvIGVjaG8gJGM7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1mb3JtYXQ9JXMgRC4uTSB8CisJc2VkIC1lICIvXmNvbW1pdCAvZCIgfAorCXNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgRC4uTSAtLSBNLnQnICcKKwllY2hvIE0gPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWZvcm1hdD0lcyBELi5NIC0tIE0udCB8CisJc2VkIC1lICIvXmNvbW1pdCAvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIEQuLk0gLS0gTS50JyAnCisJZWNobyBNID5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIC0tZm9ybWF0PSVzIEQuLk0gLS0gTS50IHwKKwlzZWQgLWUgIi9eY29tbWl0IC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBGLi4uSScgJworCWZvciBjIGluIEYgRyBIIEk7IGRvIGVjaG8gJGM7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWZvcm1hdD0lcyBGLi4uSSB8CisJc2VkIC1lICIvXmNvbW1pdCAvZCIgfAorCXNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIEYuLi5JJyAnCisJZm9yIGMgaW4gRiBIIEk7IGRvIGVjaG8gJGM7IGRvbmUgPmV4cGVjdCAmJgorCWdpdCByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggLS1mb3JtYXQ9JXMgRi4uLkkgfAorCXNlZCAtZSAiL15jb21taXQgL2QiIHwKKwlzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgRy50IGlzIGRyb3BwZWQgaW4gYW4gIi1zIG91cnMiIG1lcmdlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXYtbGlzdCBHLi5NIC0tIEcudCcgJworCT5leHBlY3QgJiYKKwlnaXQgcmV2LWxpc3QgLS1mb3JtYXQ9JXMgRy4uTSAtLSBHLnQgfAorCXNlZCAtZSAiL15jb21taXQgL2QiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tYW5jZXN0cnktcGF0aCBHLi5NIC0tIEcudCcgJworCWVjaG8gTCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tYW5jZXN0cnktcGF0aCAtLWZvcm1hdD0lcyBHLi5NIC0tIEcudCB8CisJc2VkIC1lICIvXmNvbW1pdCAvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2LWxpc3QgLS1hbmNlc3RyeS1wYXRoIC0tc2ltcGxpZnktbWVyZ2VzIEdeLi5NIC0tIEcudCcgJworCWZvciBjIGluIEcgTDsgZG8gZWNobyAkYzsgZG9uZSA+ZXhwZWN0ICYmCisJZ2l0IHJldi1saXN0IC0tYW5jZXN0cnktcGF0aCAtLXNpbXBsaWZ5LW1lcmdlcyAtLWZvcm1hdD0lcyBHXi4uTSAtLSBHLnQgfAorCXNlZCAtZSAiL15jb21taXQgL2QiIHwKKwlzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgICBiLS0tYmMKKyMgIC8gXCAvCisjIGEgICBYCisjICBcIC8gXAorIyAgIGMtLS1jYgorIworIyBBbGwgcmVmbmFtZXMgcHJlZml4ZWQgd2l0aCAneCcgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggdGhlIHRhZ3MKKyMgZ2VuZXJhdGVkIGJ5IHRlc3RfY29tbWl0IG9uIGNhc2UtaW5zZW5zaXRpdmUgc3lzdGVtcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNyaXNzLWNyb3NzJyAnCisJbWtkaXIgY3Jpc3MtY3Jvc3MgJiYKKwkoY2QgY3Jpc3MtY3Jvc3MgJiYKKwkgZ2l0IGluaXQgJiYKKwkgdGVzdF9jb21taXQgQSAmJgorCSBnaXQgY2hlY2tvdXQgLWIgeGIgbWFzdGVyICYmCisJIHRlc3RfY29tbWl0IEIgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHhjIG1hc3RlciAmJgorCSB0ZXN0X2NvbW1pdCBDICYmCisJIGdpdCBjaGVja291dCAtYiB4YmMgeGIgLS0gJiYKKwkgZ2l0IG1lcmdlIHhjICYmCisJIGdpdCBjaGVja291dCAtYiB4Y2IgeGMgLS0gJiYKKwkgZ2l0IG1lcmdlIHhiICYmCisJIGdpdCBjaGVja291dCBtYXN0ZXIpCisnCisKKyMgbm8gY29tbWl0cyBpbiBiYyBkZXNjZW5kIGZyb20gY2IKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyaXNzLWNyb3NzOiByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggY2IuLmJjJyAnCisJKGNkIGNyaXNzLWNyb3NzICYmCisJIGdpdCByZXYtbGlzdCAtLWFuY2VzdHJ5LXBhdGggeGNiLi54YmMgPiBhY3R1YWwgJiYKKwkgdGVzdCAteiAiJChjYXQgYWN0dWFsKSIpCisnCisKKyMgbm8gY29tbWl0cyBpbiByZXBvc2l0b3J5IGRlc2NlbmQgZnJvbSBjYgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3Jpc3MtY3Jvc3M6IHJldi1saXN0IC0tYW5jZXN0cnktcGF0aCAtLWFsbCBeY2InICcKKwkoY2QgY3Jpc3MtY3Jvc3MgJiYKKwkgZ2l0IHJldi1saXN0IC0tYW5jZXN0cnktcGF0aCAtLWFsbCBeeGNiID4gYWN0dWFsICYmCisJIHRlc3QgLXogIiQoY2F0IGFjdHVhbCkiKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjAtbWVyZ2UtZGYuc2ggYi90L3Q2MDIwLW1lcmdlLWRmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhZjFiZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDIwLW1lcmdlLWRmLnNoCkBAIC0wLDAgKzEsMTEwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA1IEZyZWRyaWsgS3VpdmluZW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBtZXJnZSB3aXRoIGRpcmVjdG9yeS9maWxlIGNvbmZsaWN0cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIHJlcG9zaXRvcnknICcKKwllY2hvIEhlbGxvID5pbml0ICYmCisJZ2l0IGFkZCBpbml0ICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIEIgJiYKKwlta2RpciBkaXIgJiYKKwllY2hvIGZvbyA+ZGlyL2ZvbyAmJgorCWdpdCBhZGQgZGlyL2ZvbyAmJgorCWdpdCBjb21taXQgLW0gIkZpbGU6IGRpci9mb28iICYmCisKKwlnaXQgY2hlY2tvdXQgQiAmJgorCWVjaG8gZmlsZSBkaXIgPmRpciAmJgorCWdpdCBhZGQgZGlyICYmCisJZ2l0IGNvbW1pdCAtbSAiRmlsZTogZGlyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNZXJnZSB3aXRoIGQvZiBjb25mbGljdHMnICcKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlIC1tICJtZXJnZSBtc2ciIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGL0QgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXJtIC5naXQvaW5kZXggJiYKKworCW1rZGlyIGJlZm9yZSAmJgorCWVjaG8gRklMRSA+YmVmb3JlL29uZSAmJgorCWVjaG8gRklMRSA+YWZ0ZXIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGZpcnN0ICYmCisKKwlybSAtZiBhZnRlciAmJgorCWdpdCBtdiBiZWZvcmUgYWZ0ZXIgJiYKKwlnaXQgY29tbWl0IC1tIG1vdmUgJiYKKworCWdpdCBjaGVja291dCAtYiBwYXJhIEhFQUReICYmCisJZWNobyBDT01QTEVURUxZIEFOT1RIRVIgRklMRSA+YW5vdGhlciAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gcGFyYSAmJgorCisJZ2l0IG1lcmdlIG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtb2RpZnkvZGVsZXRlICsgZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gbW9kaWZ5ICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwlwcmludGYgImFcbmJcbmNcbmRcbmVcbmZcbmdcbmhcbiIgPmxldHRlcnMgJiYKKwlnaXQgYWRkIGxldHRlcnMgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCSMgVGhyb3cgaW4gbGV0dGVycy50eHQgZm9yIHNvcnRpbmcgb3JkZXIgZnVuCisJIyAoImxldHRlcnMudHh0IiBzb3J0cyBiZXR3ZWVuICJsZXR0ZXJzIiBhbmQgImxldHRlcnMvZmlsZSIpCisJZWNobyBpID4+bGV0dGVycyAmJgorCWVjaG8gInZlcnNpb24gMiIgPmxldHRlcnMudHh0ICYmCisJZ2l0IGFkZCBsZXR0ZXJzIGxldHRlcnMudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSBtb2RpZmllZCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGRlbGV0ZSBIRUFEXiAmJgorCWdpdCBybSBsZXR0ZXJzICYmCisJbWtkaXIgbGV0dGVycyAmJgorCT5sZXR0ZXJzL2ZpbGUgJiYKKwllY2hvICJ2ZXJzaW9uIDEiID5sZXR0ZXJzLnR4dCAmJgorCWdpdCBhZGQgbGV0dGVycyBsZXR0ZXJzLnR4dCAmJgorCWdpdCBjb21taXQgLW0gZGVsZXRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkvZGVsZXRlICsgZGlyZWN0b3J5L2ZpbGUgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgZGVsZXRlXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbW9kaWZ5ICYmCisKKwl0ZXN0IDUgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCA0IC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgLWYgbGV0dGVycy9maWxlICYmCisJdGVzdCAtZiBsZXR0ZXJzLnR4dCAmJgorCXRlc3QgLWYgbGV0dGVyc35tb2RpZnkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZ5L2RlbGV0ZSArIGRpcmVjdG9yeS9maWxlIGNvbmZsaWN0OyBvdGhlciB3YXknICcKKwkjIFllcywgd2UgcmVhbGx5IG5lZWQgdGhlIGRvdWJsZSByZXNldCBzaW5jZSAibGV0dGVycyIgYXBwZWFycyBhcworCSMgYm90aCBhIGZpbGUgYW5kIGEgZGlyZWN0b3J5LgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNsZWFuIC1mICYmCisJZ2l0IGNoZWNrb3V0IG1vZGlmeV4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZGVsZXRlICYmCisKKwl0ZXN0IDUgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCA0IC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgLWYgbGV0dGVycy9maWxlICYmCisJdGVzdCAtZiBsZXR0ZXJzLnR4dCAmJgorCXRlc3QgLWYgbGV0dGVyc35IRUFECisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAyMS1tZXJnZS1jcmlzcy1jcm9zcy5zaCBiL3QvdDYwMjEtbWVyZ2UtY3Jpc3MtY3Jvc3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjEzZGVlYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjEtbWVyZ2UtY3Jpc3MtY3Jvc3Muc2gKQEAgLTAsMCArMSw5NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNSBGcmVkcmlrIEt1aXZpbmVuCisjCisKKyMgU2VlIGh0dHA6Ly9tYXJjLmluZm8vP2w9Z2l0Jm09MTExNDYzMzU4NTAwMzYyJnc9MiBmb3IgYQorIyBuaWNlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBpcyBhYm91dC4KKworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGNyaXNzLWNyb3NzIG1lcmdlJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgcmVwb3NpdG9yeScgXAorJ2VjaG8gIjEKKzIKKzMKKzQKKzUKKzYKKzcKKzgKKzkiID4gZmlsZSAmJgorZ2l0IGFkZCBmaWxlICYmCitnaXQgY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgZmlsZSAmJgorZ2l0IGJyYW5jaCBBICYmCitnaXQgYnJhbmNoIEIgJiYKK2dpdCBjaGVja291dCBBICYmCitlY2hvICIxCisyCiszCis0Cis1Cis2Cis3Cis4IGNoYW5nZWQgaW4gQjgsIGJyYW5jaCBBCis5IiA+IGZpbGUgJiYKK2dpdCBjb21taXQgLW0gIkI4IiBmaWxlICYmCitnaXQgY2hlY2tvdXQgQiAmJgorZWNobyAiMQorMgorMyBjaGFuZ2VkIGluIEMzLCBicmFuY2ggQgorNAorNQorNgorNworOAorOQorIiA+IGZpbGUgJiYKK2dpdCBjb21taXQgLW0gIkMzIiBmaWxlICYmCitnaXQgYnJhbmNoIEMzICYmCitnaXQgbWVyZ2UgLW0gInByZSBFMyBtZXJnZSIgQSAmJgorZWNobyAiMQorMgorMyBjaGFuZ2VkIGluIEUzLCBicmFuY2ggQi4gTmV3IGZpbGUgc2l6ZQorNAorNQorNgorNworOCBjaGFuZ2VkIGluIEI4LCBicmFuY2ggQQorOQorIiA+IGZpbGUgJiYKK2dpdCBjb21taXQgLW0gIkUzIiBmaWxlICYmCitnaXQgY2hlY2tvdXQgQSAmJgorZ2l0IG1lcmdlIC1tICJwcmUgRDggbWVyZ2UiIEMzICYmCitlY2hvICIxCisyCiszIGNoYW5nZWQgaW4gQzMsIGJyYW5jaCBCCis0Cis1Cis2Cis3Cis4IGNoYW5nZWQgaW4gRDgsIGJyYW5jaCBBLiBOZXcgZmlsZSBzaXplIDIKKzkiID4gZmlsZSAmJgorZ2l0IGNvbW1pdCAtbSBEOCBmaWxlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmlzcy1jcm9zcyBtZXJnZScgJ2dpdCBtZXJnZSAtbSAiZmluYWwgbWVyZ2UiIEInCisKK2NhdCA+IGZpbGUtZXhwZWN0IDw8RU9GCisxCisyCiszIGNoYW5nZWQgaW4gRTMsIGJyYW5jaCBCLiBOZXcgZmlsZSBzaXplCis0Cis1Cis2Cis3Cis4IGNoYW5nZWQgaW4gRDgsIGJyYW5jaCBBLiBOZXcgZmlsZSBzaXplIDIKKzkKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmlzcy1jcm9zcyBtZXJnZSByZXN1bHQnICdjbXAgZmlsZSBmaWxlLWV4cGVjdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3Jpc3MtY3Jvc3MgbWVyZ2UgZmFpbHMgKC1zIHJlc29sdmUpJyBcCisnZ2l0IHJlc2V0IC0taGFyZCBBXiAmJgordGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgLW0gImZpbmFsIG1lcmdlIiBCJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjItbWVyZ2UtcmVuYW1lLnNoIGIvdC90NjAyMi1tZXJnZS1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDVlYmJhNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjItbWVyZ2UtcmVuYW1lLnNoCkBAIC0wLDAgKzEsOTAzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nTWVyZ2UtcmVjdXJzaXZlIG1lcmdpbmcgcmVuYW1lcycKKy4gLi90ZXN0LWxpYi5zaAorCittb2RpZnkgKCkgeworCXNlZCAtZSAiJDEiIDwiJDIiID4iJDIueCIgJiYKKwltdiAiJDIueCIgIiQyIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwIFwKKycKK2NhdCA+QSA8PFxFT0YgJiYKK2EgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitiIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorYyBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKK2QgZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkCitlIGVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZQorZiBmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYKK2cgZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnCitoIGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaAoraSBpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWkKK2ogampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqCitrIGtra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2traworbCBsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGwKK20gbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tCituIG5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubgorbyBvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28KK0VPRgorCitjYXQgPk0gPDxcRU9GICYmCitBIEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorQiBCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkIKK0MgQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDCitEIERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERAorRSBFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUUKK0YgRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCitHIEdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRworSCBISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEgKK0kgSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJCitKIEpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSgorSyBLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0sKK0wgTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCitNIE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQorTiBOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4KK08gT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PCitFT0YKKworZ2l0IGFkZCBBIE0gJiYKK2dpdCBjb21taXQgLW0gImluaXRpYWwgaGFzIEEgYW5kIE0iICYmCitnaXQgYnJhbmNoIHdoaXRlICYmCitnaXQgYnJhbmNoIHJlZCAmJgorZ2l0IGJyYW5jaCBibHVlICYmCitnaXQgYnJhbmNoIHllbGxvdyAmJgorZ2l0IGJyYW5jaCBjaGFuZ2UgJiYKK2dpdCBicmFuY2ggY2hhbmdlK3JlbmFtZSAmJgorCitzZWQgLWUgIi9eZyAvcy8uKi9nIDogbWFzdGVyIGNoYW5nZXMgYSBsaW5lLyIgPEEgPkErICYmCittdiBBKyBBICYmCitnaXQgY29tbWl0IC1hIC1tICJtYXN0ZXIgdXBkYXRlcyBBIiAmJgorCitnaXQgY2hlY2tvdXQgeWVsbG93ICYmCitybSAtZiBNICYmCitnaXQgY29tbWl0IC1hIC1tICJ5ZWxsb3cgcmVtb3ZlcyBNIiAmJgorCitnaXQgY2hlY2tvdXQgd2hpdGUgJiYKK3NlZCAtZSAiL15nIC9zLy4qL2cgOiB3aGl0ZSBjaGFuZ2VzIGEgbGluZS8iIDxBID5CICYmCitzZWQgLWUgIi9eRyAvcy8uKi9HIDogY29sb3JlZCBicmFuY2ggY2hhbmdlcyBhIGxpbmUvIiA8TSA+TiAmJgorcm0gLWYgQSBNICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQiBNIE4gJiYKK2dpdCBjb21taXQgLW0gIndoaXRlIHJlbmFtZXMgQS0+QiwgTS0+TiIgJiYKKworZ2l0IGNoZWNrb3V0IHJlZCAmJgorc2VkIC1lICIvXmcgL3MvLiovZyA6IHJlZCBjaGFuZ2VzIGEgbGluZS8iIDxBID5CICYmCitzZWQgLWUgIi9eRyAvcy8uKi9HIDogY29sb3JlZCBicmFuY2ggY2hhbmdlcyBhIGxpbmUvIiA8TSA+TiAmJgorcm0gLWYgQSBNICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQiBNIE4gJiYKK2dpdCBjb21taXQgLW0gInJlZCByZW5hbWVzIEEtPkIsIE0tPk4iICYmCisKK2dpdCBjaGVja291dCBibHVlICYmCitzZWQgLWUgIi9eZyAvcy8uKi9nIDogYmx1ZSBjaGFuZ2VzIGEgbGluZS8iIDxBID5DICYmCitzZWQgLWUgIi9eRyAvcy8uKi9HIDogY29sb3JlZCBicmFuY2ggY2hhbmdlcyBhIGxpbmUvIiA8TSA+TiAmJgorcm0gLWYgQSBNICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIEEgQyBNIE4gJiYKK2dpdCBjb21taXQgLW0gImJsdWUgcmVuYW1lcyBBLT5DLCBNLT5OIiAmJgorCitnaXQgY2hlY2tvdXQgY2hhbmdlICYmCitzZWQgLWUgIi9eZyAvcy8uKi9nIDogY2hhbmdlZCBsaW5lLyIgPEEgPkErICYmCittdiBBKyBBICYmCitnaXQgY29tbWl0IC1xIC1hIC1tICJjaGFuZ2VkIiAmJgorCitnaXQgY2hlY2tvdXQgY2hhbmdlK3JlbmFtZSAmJgorc2VkIC1lICIvXmcgL3MvLiovZyA6IGNoYW5nZWQgbGluZS8iIDxBID5CICYmCitybSBBICYmCitnaXQgdXBkYXRlLWluZGV4IC0tYWRkIEIgJiYKK2dpdCBjb21taXQgLXEgLWEgLW0gImNoYW5nZWQgYW5kIHJlbmFtZWQiICYmCisKK2dpdCBjaGVja291dCBtYXN0ZXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgcmVuYW1pbmcgYnJhbmNoIGludG8gdW5yZW5hbWluZyBvbmUnIFwKKycKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHB1bGwgLiB3aGl0ZSAmJgorCWdpdCBscy1maWxlcyAtcyAmJgorCWdpdCBscy1maWxlcyAtdSBCID5iLnN0YWdlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYi5zdGFnZXMgJiYKKwlnaXQgbHMtZmlsZXMgLXMgTiA+bi5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG4uc3RhZ2VzICYmCisJc2VkIC1uZSAiL15nL3sKKwlwCisJcQorCX0iIEIgfCBncmVwIG1hc3RlciAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHdoaXRlIE4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCByZW5hbWluZyBicmFuY2ggaW50byBhbm90aGVyIHJlbmFtaW5nIG9uZScgXAorJworCXJtIC1mIEIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IHJlZCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcHVsbCAuIHdoaXRlICYmCisJZ2l0IGxzLWZpbGVzIC11IEIgPmIuc3RhZ2VzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMyBiLnN0YWdlcyAmJgorCWdpdCBscy1maWxlcyAtcyBOID5uLnN0YWdlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgbi5zdGFnZXMgJiYKKwlzZWQgLW5lICIvXmcveworCXAKKwlxCisJfSIgQiB8IGdyZXAgcmVkICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgd2hpdGUgTgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIHVucmVuYW1pbmcgYnJhbmNoIGludG8gcmVuYW1pbmcgb25lJyBcCisnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzaG93LWJyYW5jaCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcHVsbCAuIG1hc3RlciAmJgorCWdpdCBscy1maWxlcyAtdSBCID5iLnN0YWdlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYi5zdGFnZXMgJiYKKwlnaXQgbHMtZmlsZXMgLXMgTiA+bi5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG4uc3RhZ2VzICYmCisJc2VkIC1uZSAiL15nL3sKKwlwCisJcQorCX0iIEIgfCBncmVwIHJlZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHdoaXRlIE4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCBjb25mbGljdGluZyByZW5hbWVzJyBcCisnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzaG93LWJyYW5jaCAmJgorCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcHVsbCAuIGJsdWUgJiYKKwlnaXQgbHMtZmlsZXMgLXUgQSA+YS5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIGEuc3RhZ2VzICYmCisJZ2l0IGxzLWZpbGVzIC11IEIgPmIuc3RhZ2VzICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSBiLnN0YWdlcyAmJgorCWdpdCBscy1maWxlcyAtdSBDID5jLnN0YWdlcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgYy5zdGFnZXMgJiYKKwlnaXQgbHMtZmlsZXMgLXMgTiA+bi5zdGFnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG4uc3RhZ2VzICYmCisJc2VkIC1uZSAiL15nL3sKKwlwCisJcQorCX0iIEIgfCBncmVwIHJlZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHdoaXRlIE4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJmZXJlbmNlIHdpdGggdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzaG93LWJyYW5jaCAmJgorCWVjaG8gPkEgdGhpcyBmaWxlIHNob3VsZCBub3QgbWF0dGVyICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwdWxsIC4gd2hpdGUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyZmVyZW5jZSB3aXRoIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgd2hpdGUgJiYKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwlybSAtZiBBICYmCisJZWNobyA+QSB0aGlzIGZpbGUgc2hvdWxkIG5vdCBtYXR0ZXIgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHB1bGwgLiByZWQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyZmVyZW5jZSB3aXRoIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBBIE0gJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHRhZyAtZiBhbmNob3IgJiYKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwlnaXQgcHVsbCAuIHllbGxvdyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIE0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGFuY2hvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGVkIHdvcmtpbmcgdHJlZSBmaWxlIHNob3VsZCBwcmV2ZW50IHRoZSBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtZiBBIE0gJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IHRhZyAtZiBhbmNob3IgJiYKKwlnaXQgc2hvdy1icmFuY2ggJiYKKwllY2hvID4+TSBvbmUgbGluZSBhZGRpdGlvbiAmJgorCWNhdCBNID5NLnNhdmVkICYmCisJdGVzdF9leHBlY3RfY29kZSAxMjggZ2l0IHB1bGwgLiB5ZWxsb3cgJiYKKwl0ZXN0X2NtcCBNIE0uc2F2ZWQgJiYKKwlybSAtZiBNLnNhdmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZWQgd29ya2luZyB0cmVlIGZpbGUgc2hvdWxkIHByZXZlbnQgdGhlIG1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIEEgTSAmJgorCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlnaXQgdGFnIC1mIGFuY2hvciAmJgorCWdpdCBzaG93LWJyYW5jaCAmJgorCWVjaG8gPj5NIG9uZSBsaW5lIGFkZGl0aW9uICYmCisJY2F0IE0gPk0uc2F2ZWQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IE0gJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDEyOCBnaXQgcHVsbCAuIHllbGxvdyAmJgorCXRlc3RfY21wIE0gTS5zYXZlZCAmJgorCXJtIC1mIE0uc2F2ZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJmZXJlbmNlIHdpdGggdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1mIEEgTSAmJgorCWdpdCBjaGVja291dCAtZiB5ZWxsb3cgJiYKKwlnaXQgdGFnIC1mIGFuY2hvciAmJgorCWdpdCBzaG93LWJyYW5jaCAmJgorCWVjaG8gPk0gdGhpcyBmaWxlIHNob3VsZCBub3QgbWF0dGVyICYmCisJZ2l0IHB1bGwgLiBtYXN0ZXIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBNICYmCisJISB7CisJCWdpdCBscy1maWxlcyAtcyB8CisJCWdyZXAgTQorCX0gJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGFuY2hvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvZiBpZGVudGljYWwgY2hhbmdlcyBpbiBhIHJlbmFtZWQgZmlsZScgJworCXJtIC1mIEEgTSBOICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBjaGFuZ2UrcmVuYW1lICYmCisJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCBtZXJnZSBjaGFuZ2UgfCB0ZXN0X2kxOG5ncmVwICJeU2tpcHBlZCBCIiAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgY2hlY2tvdXQgY2hhbmdlICYmCisJR0lUX01FUkdFX1ZFUkJPU0lUWT0zIGdpdCBtZXJnZSBjaGFuZ2UrcmVuYW1lIHwgdGVzdF9pMThuZ3JlcCAiXlNraXBwZWQgQiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHJlbmFtZSArIGQvZiBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGRpci1pbi13YXkgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCW1rZGlyIHN1YiAmJgorCW1rZGlyIGRpciAmJgorCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuMTBcbiIgPnN1Yi9maWxlICYmCisJZWNobyBmb28gPmRpci9maWxlLWluLXRoZS13YXkgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbW9uIGNvbW1pdCIgJiYKKworCWVjaG8gMTEgPj5zdWIvZmlsZSAmJgorCWVjaG8gbW9yZSA+PmRpci9maWxlLWluLXRoZS13YXkgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbWl0IHRvIG1lcmdlLCB3aXRoIGRpciBpbiB0aGUgd2F5IiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGRpci1ub3QtaW4td2F5ICYmCisJZ2l0IHJlc2V0IC0tc29mdCBIRUFEXiAmJgorCWdpdCBybSAtcmYgZGlyICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbWl0IHRvIG1lcmdlLCB3aXRoIGRpciByZW1vdmVkIiAtLSBkaXIgc3ViL2ZpbGUgJiYKKworCWdpdCBjaGVja291dCAtYiByZW5hbWVkLWZpbGUtaGFzLW5vLWNvbmZsaWN0cyBkaXItaW4td2F5fjEgJiYKKwlnaXQgcm0gLXJmIGRpciAmJgorCWdpdCBybSBzdWIvZmlsZSAmJgorCXByaW50ZiAiMVxuMlxuM1xuNFxuNTU1NVxuNlxuN1xuOFxuOVxuMTBcbiIgPmRpciAmJgorCWdpdCBhZGQgZGlyICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5kZXBlbmRlbnQgY2hhbmdlIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHJlbmFtZWQtZmlsZS1oYXMtY29uZmxpY3RzIGRpci1pbi13YXl+MSAmJgorCWdpdCBybSAtcmYgZGlyICYmCisJZ2l0IG12IHN1Yi9maWxlIGRpciAmJgorCWVjaG8gMTIgPj5kaXIgJiYKKwlnaXQgYWRkIGRpciAmJgorCWdpdCBjb21taXQgLW0gIkNvbmZsaWN0aW5nIGNoYW5nZSIKKycKKworcHJpbnRmICIxXG4yXG4zXG40XG41NTU1XG42XG43XG44XG45XG4xMFxuMTFcbiIgPmV4cGVjdGVkCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlbmFtZStEL0YgY29uZmxpY3Q7IHJlbmFtZWQgZmlsZSBtZXJnZXMgKyBkaXIgbm90IGluIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLXEgcmVuYW1lZC1maWxlLWhhcy1uby1jb25mbGljdHNeMCAmJgorCWdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBkaXItbm90LWluLXdheSAmJgorCWdpdCBkaWZmIC0tcXVpZXQgJiYKKwl0ZXN0IC1mIGRpciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGRpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZW5hbWUrRC9GIGNvbmZsaWN0OyByZW5hbWVkIGZpbGUgbWVyZ2VzIGJ1dCBkaXIgaW4gd2F5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1yZiBkaXJ+KiAmJgorCWdpdCBjaGVja291dCAtcSByZW5hbWVkLWZpbGUtaGFzLW5vLWNvbmZsaWN0c14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIGRpci1pbi13YXkgPm91dHB1dCAmJgorCisJdGVzdF9pMThuZ3JlcCAiQ09ORkxJQ1QgKG1vZGlmeS9kZWxldGUpOiBkaXIvZmlsZS1pbi10aGUtd2F5IiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJBdXRvLW1lcmdpbmcgZGlyIiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJBZGRpbmcgYXMgZGlyfkhFQUQgaW5zdGVhZCIgb3V0cHV0ICYmCisKKwl0ZXN0IDMgLWVxICIkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDIgLWVxICIkKGdpdCBscy1maWxlcyAtdSBkaXIvZmlsZS1pbi10aGUtd2F5IHwgd2MgLWwpIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgJiYKKworCXRlc3QgLWYgZGlyL2ZpbGUtaW4tdGhlLXdheSAmJgorCXRlc3QgLWYgZGlyfkhFQUQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaXJ+SEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTYW1lIGFzIHByZXZpb3VzLCBidXQgbWVyZ2VkIG90aGVyIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtcmYgZGlyfiogJiYKKwlnaXQgY2hlY2tvdXQgLXEgZGlyLWluLXdheV4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHJlbmFtZWQtZmlsZS1oYXMtbm8tY29uZmxpY3RzID5vdXRwdXQgMj5lcnJvcnMgJiYKKworCSEgZ3JlcCAiZXJyb3I6IHJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIGZpbGUgYXQiIGVycm9ycyAmJgorCXRlc3RfaTE4bmdyZXAgIkNPTkZMSUNUIChtb2RpZnkvZGVsZXRlKTogZGlyL2ZpbGUtaW4tdGhlLXdheSIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiQXV0by1tZXJnaW5nIGRpciIgb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiQWRkaW5nIGFzIGRpcn5yZW5hbWVkLWZpbGUtaGFzLW5vLWNvbmZsaWN0cyBpbnN0ZWFkIiBvdXRwdXQgJiYKKworCXRlc3QgMyAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpIiAmJgorCXRlc3QgMiAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IGRpci9maWxlLWluLXRoZS13YXkgfCB3YyAtbCkiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jYWNoZWQgLS1xdWlldCAmJgorCisJdGVzdCAtZiBkaXIvZmlsZS1pbi10aGUtd2F5ICYmCisJdGVzdCAtZiBkaXJ+cmVuYW1lZC1maWxlLWhhcy1uby1jb25mbGljdHMgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaXJ+cmVuYW1lZC1maWxlLWhhcy1uby1jb25mbGljdHMKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEKKzIKKzMKKzQKKzUKKzYKKzcKKzgKKzkKKzEwCis8PDw8PDw8IEhFQUQ6ZGlyCisxMgorPT09PT09PQorMTEKKz4+Pj4+Pj4gZGlyLW5vdC1pbi13YXk6c3ViL2ZpbGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZW5hbWUrRC9GIGNvbmZsaWN0OyByZW5hbWVkIGZpbGUgY2Fubm90IG1lcmdlLCBkaXIgbm90IGluIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtcmYgZGlyfiogJiYKKwlnaXQgY2hlY2tvdXQgLXEgcmVuYW1lZC1maWxlLWhhcy1jb25mbGljdHNeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBkaXItbm90LWluLXdheSAmJgorCisJdGVzdCAzIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkiICYmCisJdGVzdCAzIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgZGlyIHwgd2MgLWwpIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgJiYKKworCXRlc3QgLWYgZGlyICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlbmFtZStEL0YgY29uZmxpY3Q7IHJlbmFtZWQgZmlsZSBjYW5ub3QgbWVyZ2UgYW5kIGRpciBpbiB0aGUgd2F5JyAnCisJbW9kaWZ5IHMvZGlyLW5vdC1pbi13YXkvZGlyLWluLXdheS8gZXhwZWN0ZWQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlybSAtcmYgZGlyfiogJiYKKwlnaXQgY2hlY2tvdXQgLXEgcmVuYW1lZC1maWxlLWhhcy1jb25mbGljdHNeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLXN0cmF0ZWd5PXJlY3Vyc2l2ZSBkaXItaW4td2F5ICYmCisKKwl0ZXN0IDUgLWVxICIkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDMgLWVxICIkKGdpdCBscy1maWxlcyAtdSBkaXIgfCBncmVwIC12IGZpbGUtaW4tdGhlLXdheSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDIgLWVxICIkKGdpdCBscy1maWxlcyAtdSBkaXIvZmlsZS1pbi10aGUtd2F5IHwgd2MgLWwpIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tY2FjaGVkIC0tcXVpZXQgJiYKKworCXRlc3QgLWYgZGlyL2ZpbGUtaW4tdGhlLXdheSAmJgorCXRlc3QgLWYgZGlyfkhFQUQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaXJ+SEVBRAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorMQorMgorMworNAorNQorNgorNworOAorOQorMTAKKzw8PDw8PDwgSEVBRDpzdWIvZmlsZQorMTEKKz09PT09PT0KKzEyCis+Pj4+Pj4+IHJlbmFtZWQtZmlsZS1oYXMtY29uZmxpY3RzOmRpcgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NhbWUgYXMgcHJldmlvdXMsIGJ1dCBtZXJnZWQgb3RoZXIgd2F5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXJtIC1yZiBkaXJ+KiAmJgorCWdpdCBjaGVja291dCAtcSBkaXItaW4td2F5XjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zdHJhdGVneT1yZWN1cnNpdmUgcmVuYW1lZC1maWxlLWhhcy1jb25mbGljdHMgJiYKKworCXRlc3QgNSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpIiAmJgorCXRlc3QgMyAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IGRpciB8IGdyZXAgLXYgZmlsZS1pbi10aGUtd2F5IHwgd2MgLWwpIiAmJgorCXRlc3QgMiAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IGRpci9maWxlLWluLXRoZS13YXkgfCB3YyAtbCkiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1jYWNoZWQgLS1xdWlldCAmJgorCisJdGVzdCAtZiBkaXIvZmlsZS1pbi10aGUtd2F5ICYmCisJdGVzdCAtZiBkaXJ+cmVuYW1lZC1maWxlLWhhcy1jb25mbGljdHMgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBkaXJ+cmVuYW1lZC1maWxlLWhhcy1jb25mbGljdHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYm90aCByZW5hbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbnZvbHZlZCBpbiBEL0YgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHJlbmFtZS1kZXN0ICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwlta2RpciBvbmUgJiYKKwllY2hvIHN0dWZmID5vbmUvZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJDb21tb24gY29tbWl0IiAmJgorCisJZ2l0IG12IG9uZS9maWxlIGRlc3RkaXIgJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWVkIHRvIGRlc3RkaXIiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc291cmNlLWNvbmZsaWN0IEhFQUR+MSAmJgorCWdpdCBybSAtcmYgb25lICYmCisJbWtkaXIgZGVzdGRpciAmJgorCXRvdWNoIG9uZSBkZXN0ZGlyL2ZvbyAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJDb25mbGljdHMgaW4gdGhlIHdheSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYm90aCByZW5hbWUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbnZvbHZlZCBpbiBEL0YgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gLXJmIGRpcn4qICYmCisJZ2l0IGNoZWNrb3V0IC1xIHJlbmFtZS1kZXN0XjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zdHJhdGVneT1yZWN1cnNpdmUgc291cmNlLWNvbmZsaWN0ICYmCisKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKworCXRlc3QgLWYgZGVzdGRpci9mb28gJiYKKwl0ZXN0IC1mIG9uZSAmJgorCXRlc3QgLWYgZGVzdGRpcn5IRUFEICYmCisJdGVzdCAic3R1ZmYiID0gIiQoY2F0IGRlc3RkaXJ+SEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHBhaXIgcmVuYW1lIHRvIHBhcmVudCBvZiBvdGhlciAoRC9GIGNvbmZsaWN0cyknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHJlbmFtZS10d28gJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCW1rZGlyIG9uZSAmJgorCW1rZGlyIHR3byAmJgorCWVjaG8gc3R1ZmYgPm9uZS9maWxlICYmCisJZWNobyBvdGhlciA+dHdvL2ZpbGUgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbW9uIGNvbW1pdCIgJiYKKworCWdpdCBybSAtcmYgb25lICYmCisJZ2l0IG12IHR3by9maWxlIG9uZSAmJgorCWdpdCBjb21taXQgLW0gIlJlbmFtZSB0d28vZmlsZSAtPiBvbmUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lLW9uZSBIRUFEfjEgJiYKKwlnaXQgcm0gLXJmIHR3byAmJgorCWdpdCBtdiBvbmUvZmlsZSB0d28gJiYKKwlybSAtciBvbmUgJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWUgb25lL2ZpbGUgLT4gdHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWlyIHJlbmFtZSB0byBwYXJlbnQgb2Ygb3RoZXIgKEQvRiBjb25mbGljdHMpIHcvIHVudHJhY2tlZCBkaXInICcKKwlnaXQgY2hlY2tvdXQgLXEgcmVuYW1lLW9uZV4wICYmCisJbWtkaXIgb25lICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHJlbmFtZS10d28gJiYKKworCXRlc3QgMiAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpIiAmJgorCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IG9uZSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSB0d28gfCB3YyAtbCkiICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0ICYmCisKKwl0ZXN0IDQgLWVxICQoZmluZCAuIHwgZ3JlcCAtdiAuZ2l0IHwgd2MgLWwpICYmCisKKwl0ZXN0IC1kIG9uZSAmJgorCXRlc3QgLWYgb25lfnJlbmFtZS10d28gJiYKKwl0ZXN0IC1mIHR3byAmJgorCXRlc3QgIm90aGVyIiA9ICQoY2F0IG9uZX5yZW5hbWUtdHdvKSAmJgorCXRlc3QgInN0dWZmIiA9ICQoY2F0IHR3bykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFpciByZW5hbWUgdG8gcGFyZW50IG9mIG90aGVyIChEL0YgY29uZmxpY3RzKSB3LyBjbGVhbiBzdGFydCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zdHJhdGVneT1yZWN1cnNpdmUgcmVuYW1lLXR3byAmJgorCisJdGVzdCAyIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkiICYmCisJdGVzdCAxIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgb25lIHwgd2MgLWwpIiAmJgorCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHR3byB8IHdjIC1sKSIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKworCXRlc3QgMyAtZXEgJChmaW5kIC4gfCBncmVwIC12IC5naXQgfCB3YyAtbCkgJiYKKworCXRlc3QgLWYgb25lICYmCisJdGVzdCAtZiB0d28gJiYKKwl0ZXN0ICJvdGhlciIgPSAkKGNhdCBvbmUpICYmCisJdGVzdCAic3R1ZmYiID0gJChjYXQgdHdvKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUgb2Ygb25lIGZpbGUgdG8gdHdvLCB3aXRoIGRpcmVjdG9yaWVzIGluIHRoZSB3YXknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGZpcnN0LXJlbmFtZSAmJgorCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCisJZWNobyBzdHVmZiA+b3JpZ2luYWwgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbW9uIGNvbW1pdCIgJiYKKworCW1rZGlyIHR3byAmJgorCT50d28vZmlsZSAmJgorCWdpdCBhZGQgdHdvL2ZpbGUgJiYKKwlnaXQgbXYgb3JpZ2luYWwgb25lICYmCisJZ2l0IGNvbW1pdCAtbSAiUHV0IHR3by9maWxlIGluIHRoZSB3YXksIHJlbmFtZSB0byBvbmUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2Vjb25kLXJlbmFtZSBIRUFEfjEgJiYKKwlta2RpciBvbmUgJiYKKwk+b25lL2ZpbGUgJiYKKwlnaXQgYWRkIG9uZS9maWxlICYmCisJZ2l0IG12IG9yaWdpbmFsIHR3byAmJgorCWdpdCBjb21taXQgLW0gIlB1dCBvbmUvZmlsZSBpbiB0aGUgd2F5LCByZW5hbWUgdG8gdHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBoYW5kbGluZyBvZiBkaWZmZXJlbnRseSByZW5hbWVkIGZpbGUgd2l0aCBEL0YgY29uZmxpY3RzJyAnCisJZ2l0IGNoZWNrb3V0IC1xIGZpcnN0LXJlbmFtZV4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9cmVjdXJzaXZlIHNlY29uZC1yZW5hbWUgJiYKKworCXRlc3QgNSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpIiAmJgorCXRlc3QgMyAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpIiAmJgorCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IG9uZSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSB0d28gfCB3YyAtbCkiICYmCisJdGVzdCAxIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgb3JpZ2luYWwgfCB3YyAtbCkiICYmCisJdGVzdCAyIC1lcSAiJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkiICYmCisKKwl0ZXN0IC1mIG9uZS9maWxlICYmCisJdGVzdCAtZiB0d28vZmlsZSAmJgorCXRlc3QgLWYgb25lfkhFQUQgJiYKKwl0ZXN0IC1mIHR3b35zZWNvbmQtcmVuYW1lICYmCisJISB0ZXN0IC1mIG9yaWdpbmFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbmFtZSBvbmUgZmlsZSB0byB0d287IGRpcmVjdG9yaWVzIG1vdmluZyBvdXQgb2YgdGhlIHdheScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gZmlyc3QtcmVuYW1lLXJlZG8gJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCWVjaG8gc3R1ZmYgPm9yaWdpbmFsICYmCisJbWtkaXIgb25lIHR3byAmJgorCXRvdWNoIG9uZS9maWxlIHR3by9maWxlICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIkNvbW1vbiBjb21taXQiICYmCisKKwlnaXQgcm0gLXJmIG9uZSAmJgorCWdpdCBtdiBvcmlnaW5hbCBvbmUgJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWUgdG8gb25lIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNlY29uZC1yZW5hbWUtcmVkbyBIRUFEfjEgJiYKKwlnaXQgcm0gLXJmIHR3byAmJgorCWdpdCBtdiBvcmlnaW5hbCB0d28gJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWUgdG8gdHdvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBoYW5kbGluZyBvZiBkaWZmZXJlbnRseSByZW5hbWVkIGZpbGUgd2l0aCBEL0YgY29uZmxpY3RzJyAnCisJZ2l0IGNoZWNrb3V0IC1xIGZpcnN0LXJlbmFtZS1yZWRvXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zdHJhdGVneT1yZWN1cnNpdmUgc2Vjb25kLXJlbmFtZS1yZWRvICYmCisKKwl0ZXN0IDMgLWVxICIkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSIgJiYKKwl0ZXN0IDEgLWVxICIkKGdpdCBscy1maWxlcyAtdSBvbmUgfCB3YyAtbCkiICYmCisJdGVzdCAxIC1lcSAiJChnaXQgbHMtZmlsZXMgLXUgdHdvIHwgd2MgLWwpIiAmJgorCXRlc3QgMSAtZXEgIiQoZ2l0IGxzLWZpbGVzIC11IG9yaWdpbmFsIHwgd2MgLWwpIiAmJgorCXRlc3QgMCAtZXEgIiQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpIiAmJgorCisJdGVzdCAtZiBvbmUgJiYKKwl0ZXN0IC1mIHR3byAmJgorCSEgdGVzdCAtZiBvcmlnaW5hbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhdm9pZCB1bm5lY2Vzc2FyeSB1cGRhdGUsIG5vcm1hbCByZW5hbWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGF2b2lkLXVubmVjZXNzYXJ5LXVwZGF0ZS0xICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbjlcbjEwXG4iID5vcmlnaW5hbCAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJDb21tb24gY29tbWl0IiAmJgorCisJZ2l0IG12IG9yaWdpbmFsIHJlbmFtZSAmJgorCWVjaG8gMTEgPj5yZW5hbWUgJiYKKwlnaXQgYWRkIC11ICYmCisJZ2l0IGNvbW1pdCAtbSAiUmVuYW1lZCBhbmQgbW9kaWZpZWQiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbWVyZ2UtYnJhbmNoLTEgSEVBRH4xICYmCisJZWNobyAicmFuZG9tIGNvbnRlbnQiID5yYW5kb20tZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tICJSYW5kb20sIHVucmVsYXRlZCBjaGFuZ2VzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdm9pZCB1bm5lY2Vzc2FyeSB1cGRhdGUsIG5vcm1hbCByZW5hbWUnICcKKwlnaXQgY2hlY2tvdXQgLXEgYXZvaWQtdW5uZWNlc3NhcnktdXBkYXRlLTFeMCAmJgorCXRlc3QtY2htdGltZSA9MTAwMDAwMDAwMCByZW5hbWUgJiYKKwl0ZXN0LWNobXRpbWUgLXYgKzAgcmVuYW1lID5leHBlY3QgJiYKKwlnaXQgbWVyZ2UgbWVyZ2UtYnJhbmNoLTEgJiYKKwl0ZXN0LWNobXRpbWUgLXYgKzAgcmVuYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICMgInJlbmFtZSIgc2hvdWxkIGhhdmUgc3RheWVkIGludGFjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0byB0ZXN0IGF2b2lkaW5nIHVubmVjZXNzYXJ5IHVwZGF0ZSwgd2l0aCBEL0YgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGF2b2lkLXVubmVjZXNzYXJ5LXVwZGF0ZS0yICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwlta2RpciBkZiAmJgorCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuMTBcbiIgPmRmL2ZpbGUgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbW9uIGNvbW1pdCIgJiYKKworCWdpdCBtdiBkZi9maWxlIHRlbXAgJiYKKwlybSAtcmYgZGYgJiYKKwlnaXQgbXYgdGVtcCBkZiAmJgorCWVjaG8gMTEgPj5kZiAmJgorCWdpdCBhZGQgLXUgJiYKKwlnaXQgY29tbWl0IC1tICJSZW5hbWVkIGFuZCBtb2RpZmllZCIgJiYKKworCWdpdCBjaGVja291dCAtYiBtZXJnZS1icmFuY2gtMiBIRUFEfjEgJiYKKwk+dW5yZWxhdGVkLWNoYW5nZSAmJgorCWdpdCBhZGQgdW5yZWxhdGVkLWNoYW5nZSAmJgorCWdpdCBjb21taXQgLW0gIk9ubHkgdW5yZWxhdGVkIGNoYW5nZXMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F2b2lkIHVubmVjZXNzYXJ5IHVwZGF0ZSwgd2l0aCBEL0YgY29uZmxpY3QnICcKKwlnaXQgY2hlY2tvdXQgLXEgYXZvaWQtdW5uZWNlc3NhcnktdXBkYXRlLTJeMCAmJgorCXRlc3QtY2htdGltZSA9MTAwMDAwMDAwMCBkZiAmJgorCXRlc3QtY2htdGltZSAtdiArMCBkZiA+ZXhwZWN0ICYmCisJZ2l0IG1lcmdlIG1lcmdlLWJyYW5jaC0yICYmCisJdGVzdC1jaG10aW1lIC12ICswIGRmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICMgImRmIiBzaG91bGQgaGF2ZSBzdGF5ZWQgaW50YWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGF2b2lkIHVubmVjZXNzYXJ5IHVwZGF0ZSwgZGlyLT4oZmlsZSxub3RoaW5nKScgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCT5pcnJlbGV2YW50ICYmCisJbWtkaXIgZGYgJiYKKwk+ZGYvZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tQSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwlnaXQgcm0gLXJmIGRmICYmCisJZ2l0IGNvbW1pdCAtbUIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcm0gLXJmIGRmICYmCisJZWNobyBibGEgPmRmICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBhIG5ld2ZpbGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F2b2lkIHVubmVjZXNzYXJ5IHVwZGF0ZSwgZGlyLT4oZmlsZSxub3RoaW5nKScgJworCWdpdCBjaGVja291dCAtcSBtYXN0ZXJeMCAmJgorCXRlc3QtY2htdGltZSA9MTAwMDAwMDAwMCBkZiAmJgorCXRlc3QtY2htdGltZSAtdiArMCBkZiA+ZXhwZWN0ICYmCisJZ2l0IG1lcmdlIHNpZGUgJiYKKwl0ZXN0LWNobXRpbWUgLXYgKzAgZGYgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgIyAiZGYiIHNob3VsZCBoYXZlIHN0YXllZCBpbnRhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYXZvaWQgdW5uZWNlc3NhcnkgdXBkYXRlLCBtb2RpZnkvZGVsZXRlJyAnCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJPmlycmVsZXZhbnQgJiYKKwk+ZmlsZSAmJgorCWdpdCBhZGQgLUEgJiYKKwlnaXQgY29tbWl0IC1tQSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwlnaXQgcm0gLWYgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIkRlbGV0ZSBmaWxlIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWVjaG8gYmxhID5maWxlICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIk1vZGlmeSBmaWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdm9pZCB1bm5lY2Vzc2FyeSB1cGRhdGUsIG1vZGlmeS9kZWxldGUnICcKKwlnaXQgY2hlY2tvdXQgLXEgbWFzdGVyXjAgJiYKKwl0ZXN0LWNobXRpbWUgPTEwMDAwMDAwMDAgZmlsZSAmJgorCXRlc3QtY2htdGltZSAtdiArMCBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2lkZSAmJgorCXRlc3QtY2htdGltZSAtdiArMCBmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICMgImZpbGUiIHNob3VsZCBoYXZlIHN0YXllZCBpbnRhY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYXZvaWQgdW5uZWNlc3NhcnkgdXBkYXRlLCByZW5hbWUvYWRkLWRlc3QnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbiIgPmZpbGUgJiYKKwlnaXQgYWRkIC1BICYmCisJZ2l0IGNvbW1pdCAtbUEgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJY3AgZmlsZSBuZXdmaWxlICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBmaWxlIGNvcHkiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG12IGZpbGUgbmV3ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIlJlbmFtZSBmaWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhdm9pZCB1bm5lY2Vzc2FyeSB1cGRhdGUsIHJlbmFtZS9hZGQtZGVzdCcgJworCWdpdCBjaGVja291dCAtcSBtYXN0ZXJeMCAmJgorCXRlc3QtY2htdGltZSA9MTAwMDAwMDAwMCBuZXdmaWxlICYmCisJdGVzdC1jaG10aW1lIC12ICswIG5ld2ZpbGUgPmV4cGVjdCAmJgorCWdpdCBtZXJnZSBzaWRlICYmCisJdGVzdC1jaG10aW1lIC12ICswIG5ld2ZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgIyAiZmlsZSIgc2hvdWxkIGhhdmUgc3RheWVkIGludGFjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBtZXJnZSBvZiByZW5hbWUgKyBzbWFsbCBjaGFuZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHJlbmFtZS1wbHVzLXNtYWxsLWNoYW5nZSAmJgorCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCisJZWNobyBPUklHSU5BTCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlbmFtZV9icmFuY2ggJiYKKwlnaXQgbXYgZmlsZSByZW5hbWVkX2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIFJlbmFtZSAmJgorCWdpdCBjaGVja291dCByZW5hbWUtcGx1cy1zbWFsbC1jaGFuZ2UgJiYKKwllY2hvIE5FVy1WRVJTSU9OID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBSZWZvcm1hdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSByZW5hbWUgKyBzbWFsbCBjaGFuZ2UnICcKKwlnaXQgbWVyZ2UgcmVuYW1lX2JyYW5jaCAmJgorCisJdGVzdCAxIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMCAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOnJlbmFtZWRfZmlsZSkgPSAkKGdpdCByZXYtcGFyc2UgSEVBRH4xOmZpbGUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciB1c2Ugb2YgZXh0ZW5kZWQgbWVyZ2UgbWFya2VycycgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCXByaW50ZiAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuIiA+b3JpZ2luYWxfZmlsZSAmJgorCWdpdCBhZGQgb3JpZ2luYWxfZmlsZSAmJgorCWdpdCBjb21taXQgLW1BICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lICYmCisJZWNobyA5ID4+b3JpZ2luYWxfZmlsZSAmJgorCWdpdCBhZGQgb3JpZ2luYWxfZmlsZSAmJgorCWdpdCBtdiBvcmlnaW5hbF9maWxlIHJlbmFtZWRfZmlsZSAmJgorCWdpdCBjb21taXQgLW1CICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZWNobyA4LjUgPj5vcmlnaW5hbF9maWxlICYmCisJZ2l0IGFkZCBvcmlnaW5hbF9maWxlICYmCisJZ2l0IGNvbW1pdCAtbUMKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKzEKKzIKKzMKKzQKKzUKKzYKKzcKKzgKKzw8PDw8PDwgSEVBRDpyZW5hbWVkX2ZpbGUKKzkKKz09PT09PT0KKzguNQorPj4+Pj4+PiBtYXN0ZXJeMDpvcmlnaW5hbF9maWxlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgbWFzdGVyIGludG8gcmVuYW1lIGhhcyBjb3JyZWN0IGV4dGVuZGVkIG1hcmtlcnMnICcKKwlnaXQgY2hlY2tvdXQgcmVuYW1lXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIG1hc3Rlcl4wICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVuYW1lZF9maWxlCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCisxCisyCiszCis0Cis1Cis2Cis3Cis4Cis8PDw8PDw8IEhFQUQ6b3JpZ2luYWxfZmlsZQorOC41Cis9PT09PT09Cis5Cis+Pj4+Pj4+IHJlbmFtZV4wOnJlbmFtZWRfZmlsZQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHJlbmFtZSBpbnRvIG1hc3RlciBoYXMgY29ycmVjdCBleHRlbmRlZCBtYXJrZXJzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgcmVuYW1lXjAgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZW5hbWVkX2ZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3B1cmlvdXMgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIiBtZXNzYWdlJyAnCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJPiBpcnJlbGV2YW50X2ZpbGUgJiYKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbiIgPm9yaWdpbmFsX2ZpbGUgJiYKKwlnaXQgYWRkIGlycmVsZXZhbnRfZmlsZSBvcmlnaW5hbF9maWxlICYmCisJZ2l0IGNvbW1pdCAtbUEgJiYKKworCWdpdCBjaGVja291dCAtYiByZW5hbWUgJiYKKwlnaXQgbXYgb3JpZ2luYWxfZmlsZSByZW5hbWVkX2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1tQiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBybSBvcmlnaW5hbF9maWxlICYmCisJZ2l0IGNvbW1pdCAtbUMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gc3B1cmlvdXMgInJlZnVzaW5nIHRvIGxvc2UgdW50cmFja2VkIiBtZXNzYWdlJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHJlbmFtZV4wIDI+ZXJyb3JzLnR4dCAmJgorCSEgZ3JlcCAicmVmdXNpbmcgdG8gbG9zZSB1bnRyYWNrZWQgZmlsZSIgZXJyb3JzLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgZm9sbG93IHJlbmFtZXMgZm9yIGVtcHR5IGZpbGVzJyAnCisJZ2l0IGNoZWNrb3V0IC1mIC1iIGVtcHR5LWJhc2UgJiYKKwk+ZW1wdHkxICYmCisJZ2l0IGFkZCBlbXB0eTEgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwllY2hvIGNvbnRlbnQgPmVtcHR5MSAmJgorCWdpdCBhZGQgZW1wdHkxICYmCisJZ2l0IGNvbW1pdCAtbSBmaWxsICYmCisJZ2l0IGNoZWNrb3V0IC1iIGVtcHR5LXRvcGljIEhFQUReICYmCisJZ2l0IG12IGVtcHR5MSBlbXB0eTIgJiYKKwlnaXQgY29tbWl0IC1tIHJlbmFtZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBlbXB0eS1iYXNlICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBlbXB0eTIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDIzLW1lcmdlLWZpbGUuc2ggYi90L3Q2MDIzLW1lcmdlLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTkwZWU5MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMjMtbWVyZ2UtZmlsZS5zaApAQCAtMCwwICsxLDM0OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J1JDUyBtZXJnZSByZXBsYWNlbWVudDogbWVyZ2UtZmlsZScKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPiBvcmlnLnR4dCA8PCBFT0YKK0RvbWludXMgcmVnaXQgbWUsCitldCBuaWhpbCBtaWhpIGRlZXJpdC4KK0luIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKK3N1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworYW5pbWFtIG1lYW0gY29udmVydGl0LAorZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorcHJvcHRlciBub21lbiBzdXVtLgorRU9GCisKK2NhdCA+IG5ldzEudHh0IDw8IEVPRgorRG9taW51cyByZWdpdCBtZSwKK2V0IG5paGlsIG1paGkgZGVlcml0LgorSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CithbmltYW0gbWVhbSBjb252ZXJ0aXQsCitkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCitwcm9wdGVyIG5vbWVuIHN1dW0uCitOYW0gZXQgc2kgYW1idWxhdmVybyBpbiBtZWRpbyB1bWJyYWUgbW9ydGlzLAorbm9uIHRpbWVibyBtYWxhLCBxdW9uaWFtIHR1IG1lY3VtIGVzOgordmlyZ2EgdHVhIGV0IGJhY3VsdXMgdHV1cyBpcHNhIG1lIGNvbnNvbGF0YSBzdW50LgorRU9GCisKK2NhdCA+IG5ldzIudHh0IDw8IEVPRgorRG9taW51cyByZWdpdCBtZSwgZXQgbmloaWwgbWloaSBkZWVyaXQuCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKK2FuaW1hbSBtZWFtIGNvbnZlcnRpdCwKK2RlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKK3Byb3B0ZXIgbm9tZW4gc3V1bS4KK0VPRgorCitjYXQgPiBuZXczLnR4dCA8PCBFT0YKK0RPTUlOVVMgcmVnaXQgbWUsCitldCBuaWhpbCBtaWhpIGRlZXJpdC4KK0luIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKK3N1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworYW5pbWFtIG1lYW0gY29udmVydGl0LAorZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorcHJvcHRlciBub21lbiBzdXVtLgorRU9GCisKK2NhdCA+IG5ldzQudHh0IDw8IEVPRgorRG9taW51cyByZWdpdCBtZSwgZXQgbmloaWwgbWloaSBkZWVyaXQuCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKK2FuaW1hbSBtZWFtIGNvbnZlcnRpdCwKK2RlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKK0VPRgorcHJpbnRmICJwcm9wdGVyIG5vbWVuIHN1dW0uIiA+PiBuZXc0LnR4dAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB3aXRoIG5vIGNoYW5nZXMnICcKKwljcCBvcmlnLnR4dCB0ZXN0LnR4dCAmJgorCWdpdCBtZXJnZS1maWxlIHRlc3QudHh0IG9yaWcudHh0IG9yaWcudHh0ICYmCisJdGVzdF9jbXAgdGVzdC50eHQgb3JpZy50eHQKKycKKworY3AgbmV3MS50eHQgdGVzdC50eHQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIHdpdGhvdXQgY29uZmxpY3QiIFwKKwkiZ2l0IG1lcmdlLWZpbGUgdGVzdC50eHQgb3JpZy50eHQgbmV3Mi50eHQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dvcmtzIGluIHN1YmRpcmVjdG9yeScgJworCW1rZGlyIGRpciAmJgorCWNwIG5ldzEudHh0IGRpci9hLnR4dCAmJgorCWNwIG9yaWcudHh0IGRpci9vLnR4dCAmJgorCWNwIG5ldzIudHh0IGRpci9iLnR4dCAmJgorCSggY2QgZGlyICYmIGdpdCBtZXJnZS1maWxlIGEudHh0IG8udHh0IGIudHh0ICkgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhLnR4dAorJworCitjcCBuZXcxLnR4dCB0ZXN0LnR4dAordGVzdF9leHBlY3Rfc3VjY2VzcyAibWVyZ2Ugd2l0aG91dCBjb25mbGljdCAoLS1xdWlldCkiIFwKKwkiZ2l0IG1lcmdlLWZpbGUgLS1xdWlldCB0ZXN0LnR4dCBvcmlnLnR4dCBuZXcyLnR4dCIKKworY3AgbmV3MS50eHQgdGVzdDIudHh0Cit0ZXN0X2V4cGVjdF9mYWlsdXJlICJtZXJnZSB3aXRob3V0IGNvbmZsaWN0IChtaXNzaW5nIExGIGF0IEVPRikiIFwKKwkiZ2l0IG1lcmdlLWZpbGUgdGVzdDIudHh0IG9yaWcudHh0IG5ldzQudHh0IgorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICJtZXJnZSByZXN1bHQgYWRkZWQgbWlzc2luZyBMRiIgXAorCSJ0ZXN0X2NtcCB0ZXN0LnR4dCB0ZXN0Mi50eHQiCisKK2NwIG5ldzQudHh0IHRlc3QzLnR4dAordGVzdF9leHBlY3Rfc3VjY2VzcyAibWVyZ2Ugd2l0aG91dCBjb25mbGljdCAobWlzc2luZyBMRiBhdCBFT0YsIGF3YXkgZnJvbSBjaGFuZ2UgaW4gdGhlIG90aGVyIGZpbGUpIiBcCisJImdpdCBtZXJnZS1maWxlIC0tcXVpZXQgdGVzdDMudHh0IG5ldzIudHh0IG5ldzMudHh0IgorCitjYXQgPiBleHBlY3QudHh0IDw8IEVPRgorRE9NSU5VUyByZWdpdCBtZSwKK2V0IG5paGlsIG1paGkgZGVlcml0LgorSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CithbmltYW0gbWVhbSBjb252ZXJ0aXQsCitkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCitFT0YKK3ByaW50ZiAicHJvcHRlciBub21lbiBzdXVtLiIgPj4gZXhwZWN0LnR4dAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtZXJnZSBkb2VzIG5vdCBhZGQgTEYgYXdheSBvZiBjaGFuZ2UiIFwKKwkidGVzdF9jbXAgdGVzdDMudHh0IGV4cGVjdC50eHQiCisKK2NwIHRlc3QudHh0IGJhY2t1cC50eHQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIHdpdGggY29uZmxpY3RzIiBcCisJInRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIHRlc3QudHh0IG9yaWcudHh0IG5ldzMudHh0IgorCitjYXQgPiBleHBlY3QudHh0IDw8IEVPRgorPDw8PDw8PCB0ZXN0LnR4dAorRG9taW51cyByZWdpdCBtZSwgZXQgbmloaWwgbWloaSBkZWVyaXQuCis9PT09PT09CitET01JTlVTIHJlZ2l0IG1lLAorZXQgbmloaWwgbWloaSBkZWVyaXQuCis+Pj4+Pj4+IG5ldzMudHh0CitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKK2FuaW1hbSBtZWFtIGNvbnZlcnRpdCwKK2RlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKK3Byb3B0ZXIgbm9tZW4gc3V1bS4KK05hbSBldCBzaSBhbWJ1bGF2ZXJvIGluIG1lZGlvIHVtYnJhZSBtb3J0aXMsCitub24gdGltZWJvIG1hbGEsIHF1b25pYW0gdHUgbWVjdW0gZXM6Cit2aXJnYSB0dWEgZXQgYmFjdWx1cyB0dXVzIGlwc2EgbWUgY29uc29sYXRhIHN1bnQuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZXhwZWN0ZWQgY29uZmxpY3QgbWFya2VycyIgInRlc3RfY21wIHRlc3QudHh0IGV4cGVjdC50eHQiCisKK2NwIGJhY2t1cC50eHQgdGVzdC50eHQKKworY2F0ID4gZXhwZWN0LnR4dCA8PCBFT0YKK0RvbWludXMgcmVnaXQgbWUsIGV0IG5paGlsIG1paGkgZGVlcml0LgorSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CithbmltYW0gbWVhbSBjb252ZXJ0aXQsCitkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCitwcm9wdGVyIG5vbWVuIHN1dW0uCitOYW0gZXQgc2kgYW1idWxhdmVybyBpbiBtZWRpbyB1bWJyYWUgbW9ydGlzLAorbm9uIHRpbWVibyBtYWxhLCBxdW9uaWFtIHR1IG1lY3VtIGVzOgordmlyZ2EgdHVhIGV0IGJhY3VsdXMgdHV1cyBpcHNhIG1lIGNvbnNvbGF0YSBzdW50LgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtZXJnZSBjb25mbGljdGluZyB3aXRoIC0tb3VycyIgXAorCSJnaXQgbWVyZ2UtZmlsZSAtLW91cnMgdGVzdC50eHQgb3JpZy50eHQgbmV3My50eHQgJiYgdGVzdF9jbXAgdGVzdC50eHQgZXhwZWN0LnR4dCIKK2NwIGJhY2t1cC50eHQgdGVzdC50eHQKKworY2F0ID4gZXhwZWN0LnR4dCA8PCBFT0YKK0RPTUlOVVMgcmVnaXQgbWUsCitldCBuaWhpbCBtaWhpIGRlZXJpdC4KK0luIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdCwKK3N1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lOworYW5pbWFtIG1lYW0gY29udmVydGl0LAorZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorcHJvcHRlciBub21lbiBzdXVtLgorTmFtIGV0IHNpIGFtYnVsYXZlcm8gaW4gbWVkaW8gdW1icmFlIG1vcnRpcywKK25vbiB0aW1lYm8gbWFsYSwgcXVvbmlhbSB0dSBtZWN1bSBlczoKK3ZpcmdhIHR1YSBldCBiYWN1bHVzIHR1dXMgaXBzYSBtZSBjb25zb2xhdGEgc3VudC4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAibWVyZ2UgY29uZmxpY3Rpbmcgd2l0aCAtLXRoZWlycyIgXAorCSJnaXQgbWVyZ2UtZmlsZSAtLXRoZWlycyB0ZXN0LnR4dCBvcmlnLnR4dCBuZXczLnR4dCAmJiB0ZXN0X2NtcCB0ZXN0LnR4dCBleHBlY3QudHh0IgorY3AgYmFja3VwLnR4dCB0ZXN0LnR4dAorCitjYXQgPiBleHBlY3QudHh0IDw8IEVPRgorRG9taW51cyByZWdpdCBtZSwgZXQgbmloaWwgbWloaSBkZWVyaXQuCitET01JTlVTIHJlZ2l0IG1lLAorZXQgbmloaWwgbWloaSBkZWVyaXQuCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKK2FuaW1hbSBtZWFtIGNvbnZlcnRpdCwKK2RlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKK3Byb3B0ZXIgbm9tZW4gc3V1bS4KK05hbSBldCBzaSBhbWJ1bGF2ZXJvIGluIG1lZGlvIHVtYnJhZSBtb3J0aXMsCitub24gdGltZWJvIG1hbGEsIHF1b25pYW0gdHUgbWVjdW0gZXM6Cit2aXJnYSB0dWEgZXQgYmFjdWx1cyB0dXVzIGlwc2EgbWUgY29uc29sYXRhIHN1bnQuCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIGNvbmZsaWN0aW5nIHdpdGggLS11bmlvbiIgXAorCSJnaXQgbWVyZ2UtZmlsZSAtLXVuaW9uIHRlc3QudHh0IG9yaWcudHh0IG5ldzMudHh0ICYmIHRlc3RfY21wIHRlc3QudHh0IGV4cGVjdC50eHQiCitjcCBiYWNrdXAudHh0IHRlc3QudHh0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm1lcmdlIHdpdGggY29uZmxpY3RzLCB1c2luZyAtTCIgXAorCSJ0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSAtTCAxIC1MIDIgdGVzdC50eHQgb3JpZy50eHQgbmV3My50eHQiCisKK2NhdCA+IGV4cGVjdC50eHQgPDwgRU9GCis8PDw8PDw8IDEKK0RvbWludXMgcmVnaXQgbWUsIGV0IG5paGlsIG1paGkgZGVlcml0LgorPT09PT09PQorRE9NSU5VUyByZWdpdCBtZSwKK2V0IG5paGlsIG1paGkgZGVlcml0LgorPj4+Pj4+PiBuZXczLnR4dAorSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CithbmltYW0gbWVhbSBjb252ZXJ0aXQsCitkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCitwcm9wdGVyIG5vbWVuIHN1dW0uCitOYW0gZXQgc2kgYW1idWxhdmVybyBpbiBtZWRpbyB1bWJyYWUgbW9ydGlzLAorbm9uIHRpbWVibyBtYWxhLCBxdW9uaWFtIHR1IG1lY3VtIGVzOgordmlyZ2EgdHVhIGV0IGJhY3VsdXMgdHV1cyBpcHNhIG1lIGNvbnNvbGF0YSBzdW50LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImV4cGVjdGVkIGNvbmZsaWN0IG1hcmtlcnMsIHdpdGggLUwiIFwKKwkidGVzdF9jbXAgdGVzdC50eHQgZXhwZWN0LnR4dCIKKworc2VkICJzLyB0dSAvIFRVIC8iIDwgbmV3MS50eHQgPiBuZXc1LnR4dAordGVzdF9leHBlY3Rfc3VjY2VzcyAiY29uZmxpY3QgaW4gcmVtb3ZlZCB0YWlsIiBcCisJInRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIC1wIG9yaWcudHh0IG5ldzEudHh0IG5ldzUudHh0ID4gb3V0IgorCitjYXQgPiBleHBlY3QgPDwgRU9GCitEb21pbnVzIHJlZ2l0IG1lLAorZXQgbmloaWwgbWloaSBkZWVyaXQuCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKK2FuaW1hbSBtZWFtIGNvbnZlcnRpdCwKK2RlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKK3Byb3B0ZXIgbm9tZW4gc3V1bS4KKzw8PDw8PDwgb3JpZy50eHQKKz09PT09PT0KK05hbSBldCBzaSBhbWJ1bGF2ZXJvIGluIG1lZGlvIHVtYnJhZSBtb3J0aXMsCitub24gdGltZWJvIG1hbGEsIHF1b25pYW0gVFUgbWVjdW0gZXM6Cit2aXJnYSB0dWEgZXQgYmFjdWx1cyB0dXVzIGlwc2EgbWUgY29uc29sYXRhIHN1bnQuCis+Pj4+Pj4+IG5ldzUudHh0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiZXhwZWN0ZWQgY29uZmxpY3QgbWFya2VycyIgInRlc3RfY21wIGV4cGVjdCBvdXQiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JpbmFyeSBmaWxlcyBjYW5ub3QgYmUgbWVyZ2VkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLXAgXAorCQlvcmlnLnR4dCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyBuZXcxLnR4dCAyPiBtZXJnZS5lcnIgJiYKKwlncmVwICJDYW5ub3QgbWVyZ2UgYmluYXJ5IGZpbGVzIiBtZXJnZS5lcnIKKycKKworc2VkIC1lICJzL2RlZXJpdC5cJC9kZWVyaXQ7LyIgLWUgInMvbWU7XCQvbWUuLyIgPCBuZXc1LnR4dCA+IG5ldzYudHh0CitzZWQgLWUgInMvZGVlcml0LlwkL2RlZXJpdCwvIiAtZSAicy9tZTtcJC9tZSwvIiA8IG5ldzUudHh0ID4gbmV3Ny50eHQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTUVSR0VfWkVBTE9VUyBzaW1wbGlmaWVzIG5vbi1jb25mbGljdHMnICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIC1wIG5ldzYudHh0IG5ldzUudHh0IG5ldzcudHh0ID4gb3V0cHV0ICYmCisJdGVzdCAxID0gJChncmVwID09PT09PT0gPCBvdXRwdXQgfCB3YyAtbCkKKworJworCitzZWQgLWUgJ3MvZGVlcml0Li8mJSUlJS8nIC1lICJzL2xvY2F2aXQsL2xvY2F2aXQ7LyI8IG5ldzYudHh0IHwgdHIgJyUnICdcMDEyJyA+IG5ldzgudHh0CitzZWQgLWUgJ3MvZGVlcml0Li8mJSUlJS8nIC1lICJzL2xvY2F2aXQsL2xvY2F2aXQgLS0vIiA8IG5ldzcudHh0IHwgdHIgJyUnICdcMDEyJyA+IG5ldzkudHh0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1pFQUxPVVNfQUxOVU0nICcKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIC1wIFwKKwkJbmV3OC50eHQgbmV3NS50eHQgbmV3OS50eHQgPiBtZXJnZS5vdXQgJiYKKwl0ZXN0IDEgPSAkKGdyZXAgPT09PT09PSA8IG1lcmdlLm91dCB8IHdjIC1sKQorCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorRG9taW51cyByZWdpdCBtZSwKKzw8PDw8PDwgbmV3OC50eHQKK2V0IG5paGlsIG1paGkgZGVlcml0OworCisKKworCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQ7CitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZS4KK3x8fHx8fHwgbmV3NS50eHQKK2V0IG5paGlsIG1paGkgZGVlcml0LgorSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7Cis9PT09PT09CitldCBuaWhpbCBtaWhpIGRlZXJpdCwKKworCisKKworSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0IC0tCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZSwKKz4+Pj4+Pj4gbmV3OS50eHQKK2FuaW1hbSBtZWFtIGNvbnZlcnRpdCwKK2RlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKK3Byb3B0ZXIgbm9tZW4gc3V1bS4KK05hbSBldCBzaSBhbWJ1bGF2ZXJvIGluIG1lZGlvIHVtYnJhZSBtb3J0aXMsCitub24gdGltZWJvIG1hbGEsIHF1b25pYW0gVFUgbWVjdW0gZXM6Cit2aXJnYSB0dWEgZXQgYmFjdWx1cyB0dXVzIGlwc2EgbWUgY29uc29sYXRhIHN1bnQuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImRpZmYzIC1tIiBzdHlsZSBvdXRwdXQgKDEpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlLWZpbGUgLXAgLS1kaWZmMyBcCisJCW5ldzgudHh0IG5ldzUudHh0IG5ldzkudHh0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJkaWZmMyAtbSIgc3R5bGUgb3V0cHV0ICgyKScgJworCWdpdCBjb25maWcgbWVyZ2UuY29uZmxpY3RzdHlsZSBkaWZmMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIC1wIFwKKwkJbmV3OC50eHQgbmV3NS50eHQgbmV3OS50eHQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitEb21pbnVzIHJlZ2l0IG1lLAorPDw8PDw8PDw8PCBuZXc4LnR4dAorZXQgbmloaWwgbWloaSBkZWVyaXQ7CisKKworCisKK0luIGxvY28gcGFzY3VhZSBpYmkgbWUgY29sbG9jYXZpdDsKK3N1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lLgorfHx8fHx8fHx8fCBuZXc1LnR4dAorZXQgbmloaWwgbWloaSBkZWVyaXQuCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCitzdXBlciBhcXVhbSByZWZlY3Rpb25pcyBlZHVjYXZpdCBtZTsKKz09PT09PT09PT0KK2V0IG5paGlsIG1paGkgZGVlcml0LAorCisKKworCitJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQgLS0KK3N1cGVyIGFxdWFtIHJlZmVjdGlvbmlzIGVkdWNhdml0IG1lLAorPj4+Pj4+Pj4+PiBuZXc5LnR4dAorYW5pbWFtIG1lYW0gY29udmVydGl0LAorZGVkdXhpdCBtZSBzdXBlciBzZW1pdGFzIGp1c2l0aWFlLAorcHJvcHRlciBub21lbiBzdXVtLgorTmFtIGV0IHNpIGFtYnVsYXZlcm8gaW4gbWVkaW8gdW1icmFlIG1vcnRpcywKK25vbiB0aW1lYm8gbWFsYSwgcXVvbmlhbSBUVSBtZWN1bSBlczoKK3ZpcmdhIHR1YSBldCBiYWN1bHVzIHR1dXMgaXBzYSBtZSBjb25zb2xhdGEgc3VudC4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXJrZXIgc2l6ZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIC1wIC0tbWFya2VyLXNpemU9MTAgXAorCQluZXc4LnR4dCBuZXc1LnR4dCBuZXc5LnR4dCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitwcmludGYgImxpbmUxXG5saW5lMlxubGluZTMiID5ub2xmLW9yaWcudHh0CitwcmludGYgImxpbmUxXG5saW5lMlxubGluZTN4IiA+bm9sZi1kaWZmMS50eHQKK3ByaW50ZiAibGluZTFcbmxpbmUyXG5saW5lM3kiID5ub2xmLWRpZmYyLnR4dAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBhdCBFT0Ygd2l0aG91dCBMRiByZXNvbHZlZCBieSAtLW91cnMnIFwKKwknZ2l0IG1lcmdlLWZpbGUgLXAgLS1vdXJzIG5vbGYtZGlmZjEudHh0IG5vbGYtb3JpZy50eHQgbm9sZi1kaWZmMi50eHQgPm91dHB1dC50eHQgJiYKKwkgcHJpbnRmICJsaW5lMVxubGluZTJcbmxpbmUzeCIgPmV4cGVjdC50eHQgJiYKKwkgdGVzdF9jbXAgZXhwZWN0LnR4dCBvdXRwdXQudHh0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBhdCBFT0Ygd2l0aG91dCBMRiByZXNvbHZlZCBieSAtLXRoZWlycycgXAorCSdnaXQgbWVyZ2UtZmlsZSAtcCAtLXRoZWlycyBub2xmLWRpZmYxLnR4dCBub2xmLW9yaWcudHh0IG5vbGYtZGlmZjIudHh0ID5vdXRwdXQudHh0ICYmCisJIHByaW50ZiAibGluZTFcbmxpbmUyXG5saW5lM3kiID5leHBlY3QudHh0ICYmCisJIHRlc3RfY21wIGV4cGVjdC50eHQgb3V0cHV0LnR4dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3QgYXQgRU9GIHdpdGhvdXQgTEYgcmVzb2x2ZWQgYnkgLS11bmlvbicgXAorCSdnaXQgbWVyZ2UtZmlsZSAtcCAtLXVuaW9uIG5vbGYtZGlmZjEudHh0IG5vbGYtb3JpZy50eHQgbm9sZi1kaWZmMi50eHQgPm91dHB1dC50eHQgJiYKKwkgcHJpbnRmICJsaW5lMVxubGluZTJcbmxpbmUzeFxubGluZTN5IiA+ZXhwZWN0LnR4dCAmJgorCSB0ZXN0X2NtcCBleHBlY3QudHh0IG91dHB1dC50eHQnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2ggYi90L3Q2MDI0LXJlY3Vyc2l2ZS1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NTVkMzBjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAyNC1yZWN1cnNpdmUtbWVyZ2Uuc2gKQEAgLTAsMCArMSwxMjIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IG1lcmdlIHdpdGhvdXQgY29tbW9uIGFuY2VzdG9ycycKKy4gLi90ZXN0LWxpYi5zaAorCisjIFRoaXMgc2NlbmFyaW8gaXMgYmFzZWQgb24gYSByZWFsLXdvcmxkIHJlcG9zaXRvcnkgb2YgU2hhd24gUGVhcmNlLgorCisjIDEgLSBBIC0gRCAtIEYKKyMgICBcICAgWCAgIC8KKyMgICAgIEIgICBYCisjICAgICAgIFggICBcCisjIDIgLSBDIC0gRSAtIEcKKworR0lUX0NPTU1JVFRFUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjI4OjAwICswMTAwIgorZXhwb3J0IEdJVF9DT01NSVRURVJfREFURQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCB0ZXN0cyIgJworZWNobyAxID4gYTEgJiYKK2dpdCBhZGQgYTEgJiYKK0dJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowMCIgZ2l0IGNvbW1pdCAtbSAxIGExICYmCisKK2dpdCBjaGVja291dCAtYiBBIG1hc3RlciAmJgorZWNobyBBID4gYTEgJiYKK0dJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowMSIgZ2l0IGNvbW1pdCAtbSBBIGExICYmCisKK2dpdCBjaGVja291dCAtYiBCIG1hc3RlciAmJgorZWNobyBCID4gYTEgJiYKK0dJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowMiIgZ2l0IGNvbW1pdCAtbSBCIGExICYmCisKK2dpdCBjaGVja291dCAtYiBEIEEgJiYKK2dpdCByZXYtcGFyc2UgQiA+IC5naXQvTUVSR0VfSEVBRCAmJgorZWNobyBEID4gYTEgJiYKK2dpdCB1cGRhdGUtaW5kZXggYTEgJiYKK0dJVF9BVVRIT1JfREFURT0iMjAwNi0xMi0xMiAyMzowMDowMyIgZ2l0IGNvbW1pdCAtbSBEICYmCisKK2dpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL290aGVyICYmCitlY2hvIDIgPiBhMSAmJgorR0lUX0FVVEhPUl9EQVRFPSIyMDA2LTEyLTEyIDIzOjAwOjA0IiBnaXQgY29tbWl0IC1tIDIgYTEgJiYKKworZ2l0IGNoZWNrb3V0IC1iIEMgJiYKK2VjaG8gQyA+IGExICYmCitHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDUiIGdpdCBjb21taXQgLW0gQyBhMSAmJgorCitnaXQgY2hlY2tvdXQgLWIgRSBDICYmCitnaXQgcmV2LXBhcnNlIEIgPiAuZ2l0L01FUkdFX0hFQUQgJiYKK2VjaG8gRSA+IGExICYmCitnaXQgdXBkYXRlLWluZGV4IGExICYmCitHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDYiIGdpdCBjb21taXQgLW0gRSAmJgorCitnaXQgY2hlY2tvdXQgLWIgRyBFICYmCitnaXQgcmV2LXBhcnNlIEEgPiAuZ2l0L01FUkdFX0hFQUQgJiYKK2VjaG8gRyA+IGExICYmCitnaXQgdXBkYXRlLWluZGV4IGExICYmCitHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDciIGdpdCBjb21taXQgLW0gRyAmJgorCitnaXQgY2hlY2tvdXQgLWIgRiBEICYmCitnaXQgcmV2LXBhcnNlIEMgPiAuZ2l0L01FUkdFX0hFQUQgJiYKK2VjaG8gRiA+IGExICYmCitnaXQgdXBkYXRlLWluZGV4IGExICYmCitHSVRfQVVUSE9SX0RBVEU9IjIwMDYtMTItMTIgMjM6MDA6MDgiIGdpdCBjb21taXQgLW0gRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjb21iaW5lZCBtZXJnZSBjb25mbGljdHMiICIKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLW0gZmluYWwgRworIgorCitjYXQgPiBleHBlY3QgPDwgRU9GCis8PDw8PDw8IEhFQUQKK0YKKz09PT09PT0KK0cKKz4+Pj4+Pj4gRworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlc3VsdCBjb250YWlucyBhIGNvbmZsaWN0IiAidGVzdF9jbXAgZXhwZWN0IGExIgorCitnaXQgbHMtZmlsZXMgLS1zdGFnZSA+IG91dAorY2F0ID4gZXhwZWN0IDw8IEVPRgorMTAwNjQ0IDQzOWNjNDZkZTc3M2Q4YTgzYzc3Nzk5YjdjYzkxOTFjMTI4YmZjZmYgMQlhMQorMTAwNjQ0IGNmODQ0NDNlNDllMWIzNjZmYWM5Mzg3MTFkZGY0YmUyZDRkMWQ5ZTkgMglhMQorMTAwNjQ0IGZkNzkyMzUyOTg1NWQwYjI3NDc5NWFlMzM0OWM1ZTA0MzgzMzM5NzkgMwlhMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInZpcnR1YWwgdHJlZXMgd2VyZSBwcm9jZXNzZWQiICJ0ZXN0X2NtcCBleHBlY3Qgb3V0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgdG8gbWVyZ2UgYmluYXJ5IGZpbGVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXByaW50ZiAiXDAiID4gYmluYXJ5LWZpbGUgJiYKKwlnaXQgYWRkIGJpbmFyeS1maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBiaW5hcnkgJiYKKwlnaXQgY2hlY2tvdXQgRyAmJgorCXByaW50ZiAiXDBcMCIgPiBiaW5hcnktZmlsZSAmJgorCWdpdCBhZGQgYmluYXJ5LWZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIGJpbmFyeTIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgRiA+IG1lcmdlLm91dCAyPiBtZXJnZS5lcnIgJiYKKwlncmVwICJDYW5ub3QgbWVyZ2UgYmluYXJ5IGZpbGVzOiBiaW5hcnktZmlsZSAoSEVBRCB2cy4gRikiIG1lcmdlLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXJrIHJlbmFtZS9kZWxldGUgYXMgdW5tZXJnZWQnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgZGVsZXRlICYmCisJZ2l0IHJtIGExICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBkZWxldGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lIEhFQUReICYmCisJZ2l0IG12IGExIGEyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgZGVsZXRlICYmCisJdGVzdCAxID0gJChnaXQgbHMtZmlsZXMgLS11bm1lcmdlZCB8IHdjIC1sKSAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOjI6YTIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IDozOmEyICYmCisJZ2l0IGNoZWNrb3V0IC1mIGRlbGV0ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSByZW5hbWUgJiYKKwl0ZXN0IDEgPSAkKGdpdCBscy1maWxlcyAtLXVubWVyZ2VkIHwgd2MgLWwpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSA6MjphMiAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgOjM6YTIKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjUtbWVyZ2Utc3ltbGlua3Muc2ggYi90L3Q2MDI1LW1lcmdlLXN5bWxpbmtzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQzM2M0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDI1LW1lcmdlLXN5bWxpbmtzLnNoCkBAIC0wLDAgKzEsNjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSm9oYW5uZXMgU2l4dAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnaW5nIHN5bWxpbmtzIG9uIGZpbGVzeXN0ZW0gdy9vIHN5bWxpbmsgc3VwcG9ydC4KKworVGhpcyB0ZXN0cyB0aGF0IGdpdCBtZXJnZS1yZWN1cnNpdmUgd3JpdGVzIG1lcmdlIHJlc3VsdHMgYXMgcGxhaW4gZmlsZXMKK2lmIGNvcmUuc3ltbGlua3MgaXMgZmFsc2UuJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnc2V0dXAnICcKK2dpdCBjb25maWcgY29yZS5zeW1saW5rcyBmYWxzZSAmJgorPiBmaWxlICYmCitnaXQgYWRkIGZpbGUgJiYKK2dpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorZ2l0IGJyYW5jaCBiLXN5bWxpbmsgJiYKK2dpdCBicmFuY2ggYi1maWxlICYmCitsPSQocHJpbnRmIGZpbGUgfCBnaXQgaGFzaC1vYmplY3QgLXQgYmxvYiAtdyAtLXN0ZGluKSAmJgorZWNobyAiMTIwMDAwICRsCXN5bWxpbmsiIHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKK2dpdCBjb21taXQgLW0gbWFzdGVyICYmCitnaXQgY2hlY2tvdXQgYi1zeW1saW5rICYmCitsPSQocHJpbnRmIGZpbGUtZGlmZmVyZW50IHwgZ2l0IGhhc2gtb2JqZWN0IC10IGJsb2IgLXcgLS1zdGRpbikgJiYKK2VjaG8gIjEyMDAwMCAkbAlzeW1saW5rIiB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCitnaXQgY29tbWl0IC1tIGItc3ltbGluayAmJgorZ2l0IGNoZWNrb3V0IGItZmlsZSAmJgorZWNobyBwbGFpbi1maWxlID4gc3ltbGluayAmJgorZ2l0IGFkZCBzeW1saW5rICYmCitnaXQgY29tbWl0IC1tIGItZmlsZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisnbWVyZ2UgbWFzdGVyIGludG8gYi1zeW1saW5rLCB3aGljaCBoYXMgYSBkaWZmZXJlbnQgc3ltYm9saWMgbGluaycgJworZ2l0IGNoZWNrb3V0IGItc3ltbGluayAmJgordGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisndGhlIG1lcmdlIHJlc3VsdCBtdXN0IGJlIGEgZmlsZScgJwordGVzdCAtZiBzeW1saW5rJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydtZXJnZSBtYXN0ZXIgaW50byBiLWZpbGUsIHdoaWNoIGhhcyBhIGZpbGUgaW5zdGVhZCBvZiBhIHN5bWJvbGljIGxpbmsnICcKK2dpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNoZWNrb3V0IGItZmlsZSAmJgordGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisndGhlIG1lcmdlIHJlc3VsdCBtdXN0IGJlIGEgZmlsZScgJwordGVzdCAtZiBzeW1saW5rJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKydtZXJnZSBiLWZpbGUsIHdoaWNoIGhhcyBhIGZpbGUgaW5zdGVhZCBvZiBhIHN5bWJvbGljIGxpbmssIGludG8gbWFzdGVyJyAnCitnaXQgcmVzZXQgLS1oYXJkICYmCitnaXQgY2hlY2tvdXQgbWFzdGVyICYmCit0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYi1maWxlJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyd0aGUgbWVyZ2UgcmVzdWx0IG11c3QgYmUgYSBmaWxlJyAnCit0ZXN0IC1mIHN5bWxpbmsnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAyNi1tZXJnZS1hdHRyLnNoIGIvdC90NjAyNi1tZXJnZS1hdHRyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0YzA1MDkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDI2LW1lcmdlLWF0dHIuc2gKQEAgLTAsMCArMSwxODMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ncGVyIHBhdGggbWVyZ2UgY29udHJvbGxlZCBieSBtZXJnZSBhdHRyaWJ1dGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCWZvciBmIGluIHRleHQgYmluYXJ5IHVuaW9uCisJZG8KKwkJZWNobyBJbml0aWFsID4kZiAmJiBnaXQgYWRkICRmIHx8IHJldHVybiAxCisJZG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gSW5pdGlhbCAmJgorCisJZ2l0IGJyYW5jaCBzaWRlICYmCisJZm9yIGYgaW4gdGV4dCBiaW5hcnkgdW5pb24KKwlkbworCQllY2hvIE1hc3RlciA+PiRmICYmIGdpdCBhZGQgJGYgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBNYXN0ZXIgJiYKKworCWdpdCBjaGVja291dCBzaWRlICYmCisJZm9yIGYgaW4gdGV4dCBiaW5hcnkgdW5pb24KKwlkbworCQllY2hvIFNpZGUgPj4kZiAmJiBnaXQgYWRkICRmIHx8IHJldHVybiAxCisJZG9uZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gU2lkZSAmJgorCisJZ2l0IHRhZyBhbmNob3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBtZXJnZSAnCisKKwl7CisJCWVjaG8gImJpbmFyeSAtbWVyZ2UiCisJCWVjaG8gInVuaW9uIG1lcmdlPXVuaW9uIgorCX0gPi5naXRhdHRyaWJ1dGVzICYmCisKKwlpZiBnaXQgbWVyZ2UgbWFzdGVyCisJdGhlbgorCQllY2hvIEdhYWgsIHNob3VsZCBoYXZlIGNvbmZsaWN0ZWQKKwkJZmFsc2UKKwllbHNlCisJCWVjaG8gT2ssIGNvbmZsaWN0ZWQuCisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbWVyZ2UgcmVzdWx0IGluIGluZGV4JyAnCisKKwlnaXQgbHMtZmlsZXMgLXUgfCBncmVwIGJpbmFyeSAmJgorCWdpdCBscy1maWxlcyAtdSB8IGdyZXAgdGV4dCAmJgorCSEgKGdpdCBscy1maWxlcyAtdSB8IGdyZXAgdW5pb24pCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgbWVyZ2UgcmVzdWx0IGluIHdvcmtpbmcgdHJlZScgJworCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQ6YmluYXJ5ID5iaW5hcnktb3JpZyAmJgorCWdyZXAgIjw8PDw8PDwiIHRleHQgJiYKKwljbXAgYmluYXJ5LW9yaWcgYmluYXJ5ICYmCisJISBncmVwICI8PDw8PDw8IiB1bmlvbiAmJgorCWdyZXAgTWFzdGVyIHVuaW9uICYmCisJZ3JlcCBTaWRlIHVuaW9uCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV0cnkgdGhlIG1lcmdlIHdpdGggbG9uZ2VyIGNvbnRleHQnICcKKwllY2hvIHRleHQgY29uZmxpY3QtbWFya2VyLXNpemU9MzIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjaGVja291dCAtbSB0ZXh0ICYmCisJc2VkIC1uZSAiL15cKFs8PT5dXClcMVwxXDEqL3sKKwkJcy8gLiokLy8KKwkJcAorCX0iID5hY3R1YWwgdGV4dCAmJgorCWdyZXAgIj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+IiBhY3R1YWwgJiYKKwlncmVwICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIgYWN0dWFsICYmCisJZ3JlcCAiPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwiIGFjdHVhbAorJworCitjYXQgPi4vY3VzdG9tLW1lcmdlIDw8XEVPRgorIyEvYmluL3NoCisKK29yaWc9IiQxIiBvdXJzPSIkMiIgdGhlaXJzPSIkMyIgZXhpdD0iJDQiIHBhdGg9JDUKKygKKwllY2hvICJvcmlnIGlzICRvcmlnIgorCWVjaG8gIm91cnMgaXMgJG91cnMiCisJZWNobyAidGhlaXJzIGlzICR0aGVpcnMiCisJZWNobyAicGF0aCBpcyAkcGF0aCIKKwllY2hvICI9PT0gb3JpZyA9PT0iCisJY2F0ICIkb3JpZyIKKwllY2hvICI9PT0gb3VycyA9PT0iCisJY2F0ICIkb3VycyIKKwllY2hvICI9PT0gdGhlaXJzID09PSIKKwljYXQgIiR0aGVpcnMiCispID4iJG91cnMrIgorY2F0ICIkb3VycysiID4iJG91cnMiCitybSAtZiAiJG91cnMrIgorZXhpdCAiJGV4aXQiCitFT0YKK2NobW9kICt4IC4vY3VzdG9tLW1lcmdlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1c3RvbSBtZXJnZSBiYWNrZW5kJyAnCisKKwllY2hvICIqIG1lcmdlPXVuaW9uIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJ0ZXh0IG1lcmdlPWN1c3RvbSIgPj4uZ2l0YXR0cmlidXRlcyAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBhbmNob3IgJiYKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgXAorCW1lcmdlLmN1c3RvbS5kcml2ZXIgIi4vY3VzdG9tLW1lcmdlICVPICVBICVCIDAgJVAiICYmCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIFwKKwltZXJnZS5jdXN0b20ubmFtZSAiY3VzdG9tIG1lcmdlIGRyaXZlciBmb3IgdGVzdGluZyIgJiYKKworCWdpdCBtZXJnZSBtYXN0ZXIgJiYKKworCWNtcCBiaW5hcnkgdW5pb24gJiYKKwlzZWQgLWUgMSwzZCB0ZXh0ID5jaGVjay0xICYmCisJbz0kKGdpdCB1bnBhY2stZmlsZSBtYXN0ZXJeOnRleHQpICYmCisJYT0kKGdpdCB1bnBhY2stZmlsZSBzaWRlXjp0ZXh0KSAmJgorCWI9JChnaXQgdW5wYWNrLWZpbGUgbWFzdGVyOnRleHQpICYmCisJc2ggLWMgIi4vY3VzdG9tLW1lcmdlICRvICRhICRiIDAgJ3RleHQnIiAmJgorCXNlZCAtZSAxLDNkICRhID5jaGVjay0yICYmCisJY21wIGNoZWNrLTEgY2hlY2stMiAmJgorCXJtIC1mICRvICRhICRiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1c3RvbSBtZXJnZSBiYWNrZW5kJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIGFuY2hvciAmJgorCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBcCisJbWVyZ2UuY3VzdG9tLmRyaXZlciAiLi9jdXN0b20tbWVyZ2UgJU8gJUEgJUIgMSAlUCIgJiYKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgXAorCW1lcmdlLmN1c3RvbS5uYW1lICJjdXN0b20gbWVyZ2UgZHJpdmVyIGZvciB0ZXN0aW5nIiAmJgorCisJaWYgZ2l0IG1lcmdlIG1hc3RlcgorCXRoZW4KKwkJZWNobyAiRWg/IHNob3VsZCBoYXZlIGNvbmZsaWN0ZWQiCisJCWZhbHNlCisJZWxzZQorCQllY2hvICJPaywgY29uZmxpY3RlZCIKKwlmaSAmJgorCisJY21wIGJpbmFyeSB1bmlvbiAmJgorCXNlZCAtZSAxLDNkIHRleHQgPmNoZWNrLTEgJiYKKwlvPSQoZ2l0IHVucGFjay1maWxlIG1hc3Rlcl46dGV4dCkgJiYKKwlhPSQoZ2l0IHVucGFjay1maWxlIGFuY2hvcjp0ZXh0KSAmJgorCWI9JChnaXQgdW5wYWNrLWZpbGUgbWFzdGVyOnRleHQpICYmCisJc2ggLWMgIi4vY3VzdG9tLW1lcmdlICRvICRhICRiIDAgJ3RleHQnIiAmJgorCXNlZCAtZSAxLDNkICRhID5jaGVjay0yICYmCisJY21wIGNoZWNrLTEgY2hlY2stMiAmJgorCXNlZCAtZSAxLDNkIC1lIDRxICRhID5jaGVjay0zICYmCisJZWNobyAicGF0aCBpcyB0ZXh0IiA+ZXhwZWN0ICYmCisJY21wIGV4cGVjdCBjaGVjay0zICYmCisJcm0gLWYgJG8gJGEgJGIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXAtdG8tZGF0ZSBtZXJnZSB3aXRob3V0IGNvbW1vbiBhbmNlc3RvcicgJworCXRlc3RfY3JlYXRlX3JlcG8gcmVwbzEgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHJlcG8yICYmCisJdGVzdF90aWNrICYmCisJKAorCQljZCByZXBvMSAmJgorCQk+YSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisJKSAmJgorCXRlc3RfdGljayAmJgorCSgKKwkJY2QgcmVwbzIgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGluaXRpYWwKKwkpICYmCisJdGVzdF90aWNrICYmCisJKAorCQljZCByZXBvMSAmJgorCQlnaXQgcHVsbCAuLi9yZXBvMiBtYXN0ZXIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAyNy1tZXJnZS1iaW5hcnkuc2ggYi90L3Q2MDI3LW1lcmdlLWJpbmFyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNzczNTQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAyNy1tZXJnZS1iaW5hcnkuc2gKQEAgLTAsMCArMSw2NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2FzayBtZXJnZS1yZWN1cnNpdmUgdG8gbWVyZ2UgYmluYXJ5IGZpbGVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwljYXQgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1iaW5hcnktMS5wbmcgPm0gJiYKKwlnaXQgYWRkIG0gJiYKKwlnaXQgbHMtZmlsZXMgLXMgfCBzZWQgLWUgInMvIDAJLyAxCS8iID5FMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImluaXRpYWwiICYmCisKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwllY2hvIGZyb3R6ID5hICYmCisJZ2l0IGFkZCBhICYmCisJZWNobyBuaXRmb2wgPj5tICYmCisJZ2l0IGFkZCBhIG0gJiYKKwlnaXQgbHMtZmlsZXMgLXMgYSA+RTAgJiYKKwlnaXQgbHMtZmlsZXMgLXMgbSB8IHNlZCAtZSAicy8gMAkvIDMJLyIgPkUzICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAibWFzdGVyIGFkZHMgc29tZSIgJiYKKworCWdpdCBjaGVja291dCBzaWRlICYmCisJZWNobyByZXpyb3YgPj5tICYmCisJZ2l0IGFkZCBtICYmCisJZ2l0IGxzLWZpbGVzIC1zIG0gfCBzZWQgLWUgInMvIDAJLyAyCS8iID5FMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInNpZGUgbW9kaWZpZXMiICYmCisKKwlnaXQgdGFnIGFuY2hvciAmJgorCisJY2F0IEUwIEUxIEUyIEUzID5leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyByZXNvbHZlICcKKworCXJtIC1mIGEqIG0qICYmCisJZ2l0IHJlc2V0IC0taGFyZCBhbmNob3IgJiYKKworCWlmIGdpdCBtZXJnZSAtcyByZXNvbHZlIG1hc3RlcgorCXRoZW4KKwkJZWNobyBPb3BzLCBzaG91bGQgbm90IGhhdmUgc3VjY2VlZGVkCisJCWZhbHNlCisJZWxzZQorCQlnaXQgbHMtZmlsZXMgLXMgPmN1cnJlbnQKKwkJdGVzdF9jbXAgY3VycmVudCBleHBlY3QKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHJlY3Vyc2l2ZSAnCisKKwlybSAtZiBhKiBtKiAmJgorCWdpdCByZXNldCAtLWhhcmQgYW5jaG9yICYmCisKKwlpZiBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIG1hc3RlcgorCXRoZW4KKwkJZWNobyBPb3BzLCBzaG91bGQgbm90IGhhdmUgc3VjY2VlZGVkCisJCWZhbHNlCisJZWxzZQorCQlnaXQgbHMtZmlsZXMgLXMgPmN1cnJlbnQKKwkJdGVzdF9jbXAgY3VycmVudCBleHBlY3QKKwlmaQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMjgtbWVyZ2UtdXAtdG8tZGF0ZS5zaCBiL3QvdDYwMjgtbWVyZ2UtdXAtdG8tZGF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NzYzYzFiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAyOC1tZXJnZS11cC10by1kYXRlLnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZSBmYXN0LWZvcndhcmQgYW5kIHVwIHRvIGRhdGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwk+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCB0YWcgYzAgJiYKKworCWVjaG8gc2Vjb25kID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzZWNvbmQgJiYKKwlnaXQgdGFnIGMxICYmCisJZ2l0IGJyYW5jaCB0ZXN0ICYmCisJZWNobyB0aGlyZCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgJiYKKwlnaXQgdGFnIGMyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC1zIHJlY3Vyc2l2ZSB1cC10by1kYXRlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBjMCAmJgorCWV4cGVjdD0kKGdpdCByZXYtcGFyc2UgYzEpICYmCisJY3VycmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0ICIkZXhwZWN0IiA9ICIkY3VycmVudCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtcyByZWN1cnNpdmUgZmFzdC1mb3J3YXJkJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBjMSAmJgorCWV4cGVjdD0kKGdpdCByZXYtcGFyc2UgYzEpICYmCisJY3VycmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0ICIkZXhwZWN0IiA9ICIkY3VycmVudCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtcyBvdXJzIHVwLXRvLWRhdGUnICcKKworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyBjMCAmJgorCWV4cGVjdD0kKGdpdCByZXYtcGFyc2UgYzEpICYmCisJY3VycmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwl0ZXN0ICIkZXhwZWN0IiA9ICIkY3VycmVudCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtcyBvdXJzIGZhc3QtZm9yd2FyZCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIGMxICYmCisJZXhwZWN0PSQoZ2l0IHJldi1wYXJzZSBjMF57dHJlZX0pICYmCisJY3VycmVudD0kKGdpdCByZXYtcGFyc2UgSEVBRF57dHJlZX0pICYmCisJdGVzdCAiJGV4cGVjdCIgPSAiJGN1cnJlbnQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLXMgc3VidHJlZSB1cC10by1kYXRlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1zIHN1YnRyZWUgYzAgJiYKKwlleHBlY3Q9JChnaXQgcmV2LXBhcnNlIGMxKSAmJgorCWN1cnJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdCAiJGV4cGVjdCIgPSAiJGN1cnJlbnQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZmFzdC1mb3J3YXJkIG9jdG9wdXMnICcKKworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgYzEgYzIgJiYKKwlleHBlY3Q9JChnaXQgcmV2LXBhcnNlIGMyKSAmJgorCWN1cnJlbnQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdCAiJGV4cGVjdCIgPSAiJGN1cnJlbnQiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAyOS1tZXJnZS1zdWJ0cmVlLnNoIGIvdC90NjAyOS1tZXJnZS1zdWJ0cmVlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjczZmMyNDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDI5LW1lcmdlLXN1YnRyZWUuc2gKQEAgLTAsMCArMSwxMjQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzdWJ0cmVlIG1lcmdlIHN0cmF0ZWd5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlzPSIxIDIgMyA0IDUgNiA3IDgiICYmCisJZm9yIGkgaW4gJHM7IGRvIGVjaG8gJGk7IGRvbmUgPmhlbGxvICYmCisJZ2l0IGFkZCBoZWxsbyAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICYmCisJZWNobyA+PmhlbGxvIHdvcmxkICYmCisJZ2l0IGFkZCBoZWxsbyAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWZvciBpIGluIG11bmRvICRzOyBkbyBlY2hvICRpOyBkb25lID5oZWxsbyAmJgorCWdpdCBhZGQgaGVsbG8gJiYKKwlnaXQgY29tbWl0IC1tIG1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YnRyZWUgYXZhaWxhYmxlIGFuZCB3b3JrcyBsaWtlIHJlY3Vyc2l2ZScgJworCisJZ2l0IG1lcmdlIC1zIHN1YnRyZWUgc2lkZSAmJgorCWZvciBpIGluIG11bmRvICRzIHdvcmxkOyBkbyBlY2hvICRpOyBkb25lID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVsbG8KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCW1rZGlyIGdpdC1ndWkgJiYKKwljZCBnaXQtZ3VpICYmCisJZ2l0IGluaXQgJiYKKwllY2hvIGdpdC1ndWkgPiBnaXQtZ3VpLnNoICYmCisJbzE9JChnaXQgaGFzaC1vYmplY3QgZ2l0LWd1aS5zaCkgJiYKKwlnaXQgYWRkIGdpdC1ndWkuc2ggJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGdpdC1ndWkiICYmCisJY2QgLi4gJiYKKwlta2RpciBnaXQgJiYKKwljZCBnaXQgJiYKKwlnaXQgaW5pdCAmJgorCWVjaG8gZ2l0ID5naXQuYyAmJgorCW8yPSQoZ2l0IGhhc2gtb2JqZWN0IGdpdC5jKSAmJgorCWdpdCBhZGQgZ2l0LmMgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGdpdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCBtZXJnZScgJworCWdpdCByZW1vdGUgYWRkIC1mIGd1aSAuLi9naXQtZ3VpICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgLS1uby1jb21taXQgZ3VpL21hc3RlciAmJgorCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9Z2l0LWd1aS8gLXUgZ3VpL21hc3RlciAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIGdpdC1ndWkgYXMgb3VyIHN1YmRpcmVjdG9yeSIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgd29yayAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJZ2l0LWd1aS9naXQtZ3VpLnNoIgorCQllY2hvICIxMDA2NDQgJG8yIDAJZ2l0LmMiCisJKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgdXBkYXRlJyAnCisJY2QgLi4vZ2l0LWd1aSAmJgorCWVjaG8gZ2l0LWd1aTIgPiBnaXQtZ3VpLnNoICYmCisJbzM9JChnaXQgaGFzaC1vYmplY3QgZ2l0LWd1aS5zaCkgJiYKKwlnaXQgYWRkIGdpdC1ndWkuc2ggJiYKKwlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyMiAmJgorCWdpdCBjb21taXQgLW0gInVwZGF0ZSBnaXQtZ3VpIiAmJgorCWNkIC4uL2dpdCAmJgorCWdpdCBwdWxsIC1zIHN1YnRyZWUgZ3VpIG1hc3RlcjIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMyAwCWdpdC1ndWkvZ2l0LWd1aS5zaCIKKwkJZWNobyAiMTAwNjQ0ICRvMiAwCWdpdC5jIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgYW1iaWd1b3VzIHN1YnRyZWUnICcKKwljZCAuLi9naXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBtYXN0ZXIyICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgLS1uby1jb21taXQgZ3VpL21hc3RlciAmJgorCWdpdCByZWFkLXRyZWUgLS1wcmVmaXg9Z2l0LWd1aTIvIC11IGd1aS9tYXN0ZXIgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSBnaXQtZ3VpMiBhcyBvdXIgc3ViZGlyZWN0b3J5IiAmJgorCWdpdCBjaGVja291dCAtYiB3b3JrMiAmJgorCWdpdCBscy1maWxlcyAtcyA+YWN0dWFsICYmCisJKAorCQllY2hvICIxMDA2NDQgJG8xIDAJZ2l0LWd1aS9naXQtZ3VpLnNoIgorCQllY2hvICIxMDA2NDQgJG8xIDAJZ2l0LWd1aTIvZ2l0LWd1aS5zaCIKKwkJZWNobyAiMTAwNjQ0ICRvMiAwCWdpdC5jIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHVzaW5nIGV4cGxpY2l0JyAnCisJY2QgLi4vZ2l0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIyICYmCisJZ2l0IHB1bGwgLVhzdWJ0cmVlPWdpdC1ndWkgZ3VpIG1hc3RlcjIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMyAwCWdpdC1ndWkvZ2l0LWd1aS5zaCIKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWdpdC1ndWkyL2dpdC1ndWkuc2giCisJCWVjaG8gIjEwMDY0NCAkbzIgMAlnaXQuYyIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZTIgdXNpbmcgZXhwbGljaXQnICcKKwljZCAuLi9naXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlcjIgJiYKKwlnaXQgcHVsbCAtWHN1YnRyZWU9Z2l0LWd1aTIgZ3VpIG1hc3RlcjIgJiYKKwlnaXQgbHMtZmlsZXMgLXMgPmFjdHVhbCAmJgorCSgKKwkJZWNobyAiMTAwNjQ0ICRvMSAwCWdpdC1ndWkvZ2l0LWd1aS5zaCIKKwkJZWNobyAiMTAwNjQ0ICRvMyAwCWdpdC1ndWkyL2dpdC1ndWkuc2giCisJCWVjaG8gIjEwMDY0NCAkbzIgMAlnaXQuYyIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaCBiL3QvdDYwMzAtYmlzZWN0LXBvcmNlbGFpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNzQ2NjJiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzMC1iaXNlY3QtcG9yY2VsYWluLnNoCkBAIC0wLDAgKzEsODk3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IENocmlzdGlhbiBDb3VkZXIKKyMKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3RzIGdpdCBiaXNlY3QgZnVuY3Rpb25hbGl0eScKKworZXhlYyA8L2Rldi9udWxsCisKKy4gLi90ZXN0LWxpYi5zaAorCithZGRfbGluZV9pbnRvX2ZpbGUoKQoreworICAgIF9saW5lPSQxCisgICAgX2ZpbGU9JDIKKworICAgIGlmIFsgLWYgIiRfZmlsZSIgXTsgdGhlbgorICAgICAgICBlY2hvICIkX2xpbmUiID4+ICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICAgICAgTVNHPSJBZGQgPCRfbGluZT4gaW50byA8JF9maWxlPi4iCisgICAgZWxzZQorICAgICAgICBlY2hvICIkX2xpbmUiID4gJF9maWxlIHx8IHJldHVybiAkPworICAgICAgICBnaXQgYWRkICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICAgICAgTVNHPSJDcmVhdGUgZmlsZSA8JF9maWxlPiB3aXRoIDwkX2xpbmU+IGluc2lkZS4iCisgICAgZmkKKworICAgIHRlc3RfdGljaworICAgIGdpdCBjb21taXQgLS1xdWlldCAtbSAiJE1TRyIgJF9maWxlCit9CisKK0hBU0gxPQorSEFTSDI9CitIQVNIMz0KK0hBU0g0PQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYmFzaWMgcmVwbyB3aXRoIDEgZmlsZSAoaGVsbG8pIGFuZCA0IGNvbW1pdHMnICcKKyAgICAgYWRkX2xpbmVfaW50b19maWxlICIxOiBIZWxsbyBXb3JsZCIgaGVsbG8gJiYKKyAgICAgSEFTSDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGFkZF9saW5lX2ludG9fZmlsZSAiMjogQSBuZXcgZGF5IGZvciBnaXQiIGhlbGxvICYmCisgICAgIEhBU0gyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBhZGRfbGluZV9pbnRvX2ZpbGUgIjM6IEFub3RoZXIgbmV3IGRheSBmb3IgZ2l0IiBoZWxsbyAmJgorICAgICBIQVNIMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgYWRkX2xpbmVfaW50b19maWxlICI0OiBDaWFvIGZvciBub3ciIGhlbGxvICYmCisgICAgIEhBU0g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnRzIHdpdGggb25seSBvbmUgYmFkJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDQgJiYKKwlnaXQgYmlzZWN0IG5leHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGRvZXMgbm90IHN0YXJ0IHdpdGggb25seSBvbmUgZ29vZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgbmV4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQgd2l0aCBvbmUgYmFkIGFuZCBnb29kJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisJZ2l0IGJpc2VjdCBuZXh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBmYWlscyBpZiBnaXZlbiBhbnkganVuayBpbnN0ZWFkIG9mIHJldnMnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCBmb28gJEhBU0gxIC0tICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIGJhciAtLSAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAicmVmcy9iaXNlY3QvKiIpIiAmJgorCXRlc3QgLXogIiQobHMgLmdpdC9CSVNFQ1RfKiAyPi9kZXYvbnVsbCkiICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgZ29vZCBmb28gJEhBU0gxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBnb29kICRIQVNIMSBiYXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCBmcm90eiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgYmFkICRIQVNIMyAkSEFTSDQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHNraXAgYmFyICRIQVNIMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc2tpcCAkSEFTSDEgZm9vICYmCisJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2Jpc2VjdC8qIikiICYmCisJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgYmFkICRIQVNINAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcmVzZXQ6IGJhY2sgaW4gdGhlIG1hc3RlciBicmFuY2gnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZWNobyAiKiBtYXN0ZXIiID4gYnJhbmNoLmV4cGVjdCAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJY21wIGJyYW5jaC5leHBlY3QgYnJhbmNoLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcmVzZXQ6IGJhY2sgaW4gYW5vdGhlciBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXIgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgYmFkICRIQVNIMyAmJgorCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwllY2hvICIgIG1hc3RlciIgPiBicmFuY2guZXhwZWN0ICYmCisJZWNobyAiKiBvdGhlciIgPj4gYnJhbmNoLmV4cGVjdCAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJY21wIGJyYW5jaC5leHBlY3QgYnJhbmNoLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcmVzZXQgd2hlbiBub3QgYmlzZWN0aW5nJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJY21wIGJyYW5jaC5leHBlY3QgYnJhbmNoLm91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcmVzZXQgcmVtb3ZlcyBwYWNrZWQgcmVmcycgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgYmFkICRIQVNIMyAmJgorCWdpdCBwYWNrLXJlZnMgLS1hbGwgLS1wcnVuZSAmJgorCWdpdCBiaXNlY3QgbmV4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvYmlzZWN0LyoiKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvaGVhZHMvYmlzZWN0IikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCByZXNldCByZW1vdmVzIGJpc2VjdCBzdGF0ZSBhZnRlciAtLW5vLWNoZWNrb3V0JyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgLS1uby1jaGVja291dCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGJhZCAkSEFTSDMgJiYKKwlnaXQgYmlzZWN0IG5leHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2Jpc2VjdC8qIikiICYmCisJdGVzdCAteiAiJChnaXQgZm9yLWVhY2gtcmVmICJyZWZzL2hlYWRzL2Jpc2VjdCIpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGZvci1lYWNoLXJlZiAiQklTRUNUX0hFQUQiKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0OiBiYWNrIGluIGdvb2QgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCA+IGJyYW5jaC5vdXRwdXQgJiYKKwlncmVwICIqIG90aGVyIiBicmFuY2gub3V0cHV0ID4gL2Rldi9udWxsICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIC0tICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIC0tICYmCisJZ2l0IGJpc2VjdCBiYWQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJyYW5jaCA+IGJyYW5jaC5vdXRwdXQgJiYKKwlncmVwICIqIG90aGVyIiBicmFuY2gub3V0cHV0ID4gL2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydDogbm8gIi5naXQvQklTRUNUX1NUQVJUIiBjcmVhdGVkIGlmIGp1bmsgcmV2JyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0IGZvbyAtLSAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWUgLmdpdC9CSVNFQ1RfU1RBUlQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0OiBleGlzdGluZyAiLmdpdC9CSVNFQ1RfU1RBUlQiIG5vdCBtb2RpZmllZCBpZiBqdW5rIHJldicgJworCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g0ICRIQVNIMSAtLSAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCWNwIC5naXQvQklTRUNUX1NUQVJUIHNhdmVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgZm9vIC0tICYmCisJZ2l0IGJyYW5jaCA+IGJyYW5jaC5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICIqIChubyBicmFuY2gsIGJpc2VjdCBzdGFydGVkIG9uIG90aGVyKSIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCXRlc3RfY21wIHNhdmVkIC5naXQvQklTRUNUX1NUQVJUCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IG5vICIuZ2l0L0JJU0VDVF9TVEFSVCIgaWYgbWlzdGFrZW4gcmV2JyAnCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIC0tICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDEgJEhBU0g0IC0tICYmCisJZ2l0IGJyYW5jaCA+IGJyYW5jaC5vdXRwdXQgJiYKKwlncmVwICIqIG90aGVyIiBicmFuY2gub3V0cHV0ID4gL2Rldi9udWxsICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZSAuZ2l0L0JJU0VDVF9TVEFSVAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQ6IG5vICIuZ2l0L0JJU0VDVF9TVEFSVCIgaWYgY2hlY2tvdXQgZXJyb3InICcKKwllY2hvICJ0ZW1wIHN0dWZmIiA+IGhlbGxvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxIC0tICYmCisJZ2l0IGJyYW5jaCAmJgorCWdpdCBicmFuY2ggPiBicmFuY2gub3V0cHV0ICYmCisJZ3JlcCAiKiBvdGhlciIgYnJhbmNoLm91dHB1dCA+IC9kZXYvbnVsbCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWUgLmdpdC9CSVNFQ1RfU1RBUlQgJiYKKwl0ZXN0IC16ICIkKGdpdCBmb3ItZWFjaC1yZWYgInJlZnMvYmlzZWN0LyoiKSIgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCBoZWxsbworJworCisjICRIQVNIMSBpcyBnb29kLCAkSEFTSDQgaXMgYmFkLCB3ZSBza2lwICRIQVNIMworIyBidXQgJEhBU0gyIGlzIGJhZCwKKyMgc28gd2Ugc2hvdWxkIGZpbmQgJEhBU0gyIGFzIHRoZSBmaXJzdCBiYWQgY29tbWl0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcDogc3VjY2Vzc2Z1bCByZXN1bHQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IHNraXAgJiYKKwlnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0gyIGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dAorJworCisjICRIQVNIMSBpcyBnb29kLCAkSEFTSDQgaXMgYmFkLCB3ZSBza2lwICRIQVNIMyBhbmQgJEhBU0gyCisjIHNvIHdlIHNob3VsZCBub3QgYmUgYWJsZSB0byB0ZWxsIHRoZSBmaXJzdCBiYWQgY29tbWl0CisjIGFtb25nICRIQVNIMiwgJEhBU0gzIGFuZCAkSEFTSDQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBza2lwOiBjYW5ub3QgdGVsbCBiZXR3ZWVuIDMgY29tbWl0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICYmCisJdGVzdF9leHBlY3RfY29kZSAyIGdpdCBiaXNlY3Qgc2tpcCA+bXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICJmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZiIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkhIGdyZXAgJEhBU0gxIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRIQVNIMyBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgJEhBU0g0IG15X2Jpc2VjdF9sb2cudHh0CisnCisKKyMgJEhBU0gxIGlzIGdvb2QsICRIQVNINCBpcyBiYWQsIHdlIHNraXAgJEhBU0gzCisjIGJ1dCAkSEFTSDIgaXMgZ29vZCwKKyMgc28gd2Ugc2hvdWxkIG5vdCBiZSBhYmxlIHRvIHRlbGwgdGhlIGZpcnN0IGJhZCBjb21taXQKKyMgYW1vbmcgJEhBU0gzIGFuZCAkSEFTSDQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBza2lwOiBjYW5ub3QgdGVsbCBiZXR3ZWVuIDIgY29tbWl0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBza2lwICYmCisJdGVzdF9leHBlY3RfY29kZSAyIGdpdCBiaXNlY3QgZ29vZCA+bXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICJmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZiIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkhIGdyZXAgJEhBU0gxIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJISBncmVwICRIQVNIMiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgJEhBU0gzIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQKKycKKworIyAkSEFTSDEgaXMgZ29vZCwgJEhBU0g0IGlzIGJvdGggc2tpcHBlZCBhbmQgYmFkLCB3ZSBza2lwICRIQVNIMworIyBhbmQgJEhBU0gyIGlzIGdvb2QsCisjIHNvIHdlIHNob3VsZCBub3QgYmUgYWJsZSB0byB0ZWxsIHRoZSBmaXJzdCBiYWQgY29tbWl0CisjIGFtb25nICRIQVNIMyBhbmQgJEhBU0g0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcDogd2l0aCBjb21taXQgYm90aCBiYWQgYW5kIHNraXBwZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwlnaXQgYmlzZWN0IHNraXAgJiYKKwlnaXQgYmlzZWN0IGJhZCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IHNraXAgJiYKKwl0ZXN0X2V4cGVjdF9jb2RlIDIgZ2l0IGJpc2VjdCBnb29kID5teV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgImZpcnN0IGJhZCBjb21taXQgY291bGQgYmUgYW55IG9mIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCSEgZ3JlcCAkSEFTSDEgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkhIGdyZXAgJEhBU0gyIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDMgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRIQVNINCBteV9iaXNlY3RfbG9nLnR4dAorJworCisjIFdlIHdhbnQgdG8gYXV0b21hdGljYWxseSBmaW5kIHRoZSBjb21taXQgdGhhdAorIyBpbnRyb2R1Y2VkICJBbm90aGVyIiBpbnRvIGhlbGxvLgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJyJnaXQgYmlzZWN0IHJ1biIgc2ltcGxlIGNhc2UnIFwKKyAgICAnZWNobyAiIyJcISIvYmluL3NoIiA+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGVjaG8gImdyZXAgQW5vdGhlciBoZWxsbyA+IC9kZXYvbnVsbCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKyAgICAgZWNobyAidGVzdCBcJD8gLW5lIDAiID4+IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGNobW9kICt4IHRlc3Rfc2NyaXB0LnNoICYmCisgICAgIGdpdCBiaXNlY3Qgc3RhcnQgJiYKKyAgICAgZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorICAgICBnaXQgYmlzZWN0IGJhZCAkSEFTSDQgJiYKKyAgICAgZ2l0IGJpc2VjdCBydW4gLi90ZXN0X3NjcmlwdC5zaCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisgICAgIGdyZXAgIiRIQVNIMyBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKyAgICAgZ2l0IGJpc2VjdCByZXNldCcKKworIyBXZSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZmluZCB0aGUgY29tbWl0IHRoYXQKKyMgaW50cm9kdWNlZCAiQ2lhbyIgaW50byBoZWxsby4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICciZ2l0IGJpc2VjdCBydW4iIHdpdGggbW9yZSBjb21wbGV4ICJnaXQgYmlzZWN0IHN0YXJ0IicgXAorICAgICdlY2hvICIjIlwhIi9iaW4vc2giID4gdGVzdF9zY3JpcHQuc2ggJiYKKyAgICAgZWNobyAiZ3JlcCBDaWFvIGhlbGxvID4gL2Rldi9udWxsIiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorICAgICBlY2hvICJ0ZXN0IFwkPyAtbmUgMCIgPj4gdGVzdF9zY3JpcHQuc2ggJiYKKyAgICAgY2htb2QgK3ggdGVzdF9zY3JpcHQuc2ggJiYKKyAgICAgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gxICYmCisgICAgIGdpdCBiaXNlY3QgcnVuIC4vdGVzdF9zY3JpcHQuc2ggPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorICAgICBncmVwICIkSEFTSDQgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisgICAgIGdpdCBiaXNlY3QgcmVzZXQnCisKKyMgJEhBU0gxIGlzIGdvb2QsICRIQVNINSBpcyBiYWQsIHdlIHNraXAgJEhBU0gzCisjIGJ1dCAkSEFTSDQgaXMgZ29vZCwKKyMgc28gd2Ugc2hvdWxkIGZpbmQgJEhBU0g1IGFzIHRoZSBmaXJzdCBiYWQgY29tbWl0CitIQVNINT0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBza2lwOiBhZGQgbGluZSBhbmQgdGhlbiBhIG5ldyB0ZXN0JyAnCisJYWRkX2xpbmVfaW50b19maWxlICI1OiBBbm90aGVyIG5ldyBsaW5lLiIgaGVsbG8gJiYKKwlIQVNINT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINSAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IHNraXAgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRIQVNINSBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IGxvZyA+IGxvZ190b19yZXBsYXkudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcCBhbmQgYmlzZWN0IHJlcGxheScgJworCWdpdCBiaXNlY3QgcmVwbGF5IGxvZ190b19yZXBsYXkudHh0ID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkSEFTSDUgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCitIQVNINj0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBydW4gJiBza2lwOiBjYW5ub3QgdGVsbCBiZXR3ZWVuIDInICcKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjY6IFlldCBhIGxpbmUuIiBoZWxsbyAmJgorCUhBU0g2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWVjaG8gIiMiXCEiL2Jpbi9zaCIgPiB0ZXN0X3NjcmlwdC5zaCAmJgorCWVjaG8gInNlZCAtbmUgXFxcJHAgaGVsbG8gfCBncmVwIENpYW8gPiAvZGV2L251bGwgJiYgZXhpdCAxMjUiID4+IHRlc3Rfc2NyaXB0LnNoICYmCisJZWNobyAiZ3JlcCBsaW5lIGhlbGxvID4gL2Rldi9udWxsIiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorCWVjaG8gInRlc3QgXCQ/IC1uZSAwIiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorCWNobW9kICt4IHRlc3Rfc2NyaXB0LnNoICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDYgJEhBU0gxICYmCisJaWYgZ2l0IGJpc2VjdCBydW4gLi90ZXN0X3NjcmlwdC5zaCA+IG15X2Jpc2VjdF9sb2cudHh0CisJdGhlbgorCQllY2hvIE9vcHMsIHNob3VsZCBoYXZlIGZhaWxlZC4KKwkJZmFsc2UKKwllbHNlCisJCXRlc3QgJD8gLWVxIDIgJiYKKwkJZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJCSEgZ3JlcCAkSEFTSDMgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJISBncmVwICRIQVNINiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQlncmVwICRIQVNINCBteV9iaXNlY3RfbG9nLnR4dCAmJgorCQlncmVwICRIQVNINSBteV9iaXNlY3RfbG9nLnR4dAorCWZpCisnCisKK0hBU0g3PQordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHJ1biAmIHNraXA6IGZpbmQgZmlyc3QgYmFkJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiNzogU2hvdWxkIGJlIHRoZSBsYXN0IGxpbmUuIiBoZWxsbyAmJgorCUhBU0g3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWVjaG8gIiMiXCEiL2Jpbi9zaCIgPiB0ZXN0X3NjcmlwdC5zaCAmJgorCWVjaG8gInNlZCAtbmUgXFxcJHAgaGVsbG8gfCBncmVwIENpYW8gPiAvZGV2L251bGwgJiYgZXhpdCAxMjUiID4+IHRlc3Rfc2NyaXB0LnNoICYmCisJZWNobyAic2VkIC1uZSBcXFwkcCBoZWxsbyB8IGdyZXAgZGF5ID4gL2Rldi9udWxsICYmIGV4aXQgMTI1IiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorCWVjaG8gImdyZXAgWWV0IGhlbGxvID4gL2Rldi9udWxsIiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorCWVjaG8gInRlc3QgXCQ/IC1uZSAwIiA+PiB0ZXN0X3NjcmlwdC5zaCAmJgorCWNobW9kICt4IHRlc3Rfc2NyaXB0LnNoICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDcgJEhBU0gxICYmCisJZ2l0IGJpc2VjdCBydW4gLi90ZXN0X3NjcmlwdC5zaCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiJEhBU0g2IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc2tpcCBvbmx5IG9uZSByYW5nZScgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINyAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IHNraXAgJEhBU0gxLi4kSEFTSDUgJiYKKwl0ZXN0ICIkSEFTSDYiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiZmlyc3QgYmFkIGNvbW1pdCBjb3VsZCBiZSBhbnkgb2YiIG15X2Jpc2VjdF9sb2cudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBza2lwIG1hbnkgcmFuZ2VzJyAnCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDcgJEhBU0gxICYmCisJdGVzdCAiJEhBU0g0IiA9ICIkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkiICYmCisJZ2l0IGJpc2VjdCBza2lwICRIQVNIMiAkSEFTSDIuLiAuLiRIQVNINSAmJgorCXRlc3QgIiRIQVNINiIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgYmFkID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICJmaXJzdCBiYWQgY29tbWl0IGNvdWxkIGJlIGFueSBvZiIgbXlfYmlzZWN0X2xvZy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0aW5nIHdpdGggYSBkZXRhY2hlZCBIRUFEJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXJeICYmCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJdGVzdCAkSEVBRCA9ICQoY2F0IC5naXQvQklTRUNUX1NUQVJUKSAmJgorCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwl0ZXN0ICRIRUFEID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBlcnJvcnMgb3V0IGlmIGJhZCBhbmQgZ29vZCBhcmUgbWlzdGFrZW4nICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDIgJEhBU0g0IDI+IHJldl9saXN0X2Vycm9yICYmCisJZ3JlcCAibWlzdG9vayBnb29kIGFuZCBiYWQiIHJldl9saXN0X2Vycm9yICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZG9lcyBub3QgY3JlYXRlIGEgImJpc2VjdCIgYnJhbmNoJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorCWdpdCBicmFuY2ggYmlzZWN0ICYmCisJcmV2X2hhc2g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRyZXZfaGFzaDQiID0gIiRIQVNINCIgJiYKKwlnaXQgYnJhbmNoIC1EIGJpc2VjdCAmJgorCWdpdCBiaXNlY3QgZ29vZCAmJgorCWdpdCBicmFuY2ggYmlzZWN0ICYmCisJcmV2X2hhc2g2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRyZXZfaGFzaDYiID0gIiRIQVNINiIgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRIQVNINyBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJcmV2X2hhc2g2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBiaXNlY3QpICYmCisJdGVzdCAiJHJldl9oYXNoNiIgPSAiJEhBU0g2IiAmJgorCWdpdCBicmFuY2ggLUQgYmlzZWN0CisnCisKKyMgVGhpcyBjcmVhdGVzIGEgInNpZGUiIGJyYW5jaCB0byB0ZXN0ICJzaWJsaW5ncyIgY2FzZXMuCisjCisjIEgxLUgyLUgzLUg0LUg1LUg2LUg3ICA8LS1vdGhlcgorIyAgICAgICAgICAgIFwKKyMgICAgICAgICAgICAgUzUtUzYtUzcgIDwtLXNpZGUKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZGUgYnJhbmNoIGNyZWF0aW9uJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlICRIQVNINCAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiNShzaWRlKTogZmlyc3QgbGluZSBvbiBhIHNpZGUgYnJhbmNoIiBoZWxsbzIgJiYKKwlTSURFX0hBU0g1PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiNihzaWRlKTogc2Vjb25kIGxpbmUgb24gYSBzaWRlIGJyYW5jaCIgaGVsbG8yICYmCisJU0lERV9IQVNINj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjcoc2lkZSk6IHRoaXJkIGxpbmUgb24gYSBzaWRlIGJyYW5jaCIgaGVsbG8yICYmCisJU0lERV9IQVNINz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ29vZCBtZXJnZSBiYXNlIHdoZW4gZ29vZCBhbmQgYmFkIGFyZSBzaWJsaW5ncycgJworCWdpdCBiaXNlY3Qgc3RhcnQgIiRIQVNINyIgIiRTSURFX0hBU0g3IiA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRIQVNINCBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgZ29vZCA+IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRIQVNINiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NraXBwZWQgbWVyZ2UgYmFzZSB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkU0lERV9IQVNINyIgIiRIQVNINyIgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IHNraXAgPiBteV9iaXNlY3RfbG9nLnR4dCAyPiYxICYmCisJZ3JlcCAid2FybmluZyIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICRTSURFX0hBU0g2IG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYWQgbWVyZ2UgYmFzZSB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkSEFTSDciIEhFQUQgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAkSEFTSDQgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGJhZCA+IG15X2Jpc2VjdF9sb2cudHh0IDI+JjEgJiYKKwlncmVwICJtZXJnZSBiYXNlICRIQVNINCBpcyBiYWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ3JlcCAiZml4ZWQgYmV0d2VlbiAkSEFTSDQgYW5kIFxbJFNJREVfSEFTSDdcXSIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKKyMgVGhpcyBjcmVhdGVzIGEgZmV3IG1vcmUgY29tbWl0cyAoQSBhbmQgQikgdG8gdGVzdCAic2libGluZ3MiIGNhc2VzCisjIHdoZW4gYSBnb29kIGFuZCBhIGJhZCByZXYgaGF2ZSBtYW55IG1lcmdlIGJhc2VzLgorIworIyBXZSBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nOgorIworIyBIMS1IMi1IMy1INC1INS1INi1INworIyAgICAgICAgICAgIFwgIFwgICAgIFwKKyMgICAgICAgICAgICAgUzUtQSAgICAgXAorIyAgICAgICAgICAgICAgXCAgICAgICAgXAorIyAgICAgICAgICAgICAgIFM2LVM3LS0tLUIKKyMKKyMgQW5kIHRoZXJlIEEgYW5kIEIgaGF2ZSAyIG1lcmdlIGJhc2VzIChTNSBhbmQgSDUpIHRoYXQgc2hvdWxkIGJlCisjIHJlcG9ydGVkIGJ5ICJnaXQgbWVyZ2UtYmFzZSAtLWFsbCBBIEIiLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFueSBtZXJnZSBiYXNlcyBjcmVhdGlvbicgJworCWdpdCBjaGVja291dCAiJFNJREVfSEFTSDUiICYmCisJZ2l0IG1lcmdlIC1tICJtZXJnZSBIQVNINSBhbmQgU0lERV9IQVNINSIgIiRIQVNINSIgJiYKKwlBX0hBU0g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwlnaXQgbWVyZ2UgLW0gIm1lcmdlIEhBU0g3IGFuZCBTSURFX0hBU0g3IiAiJEhBU0g3IiAmJgorCUJfSEFTSD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgbWVyZ2UtYmFzZSAtLWFsbCAiJEFfSEFTSCIgIiRCX0hBU0giID4gbWVyZ2VfYmFzZXMudHh0ICYmCisJdGVzdF9saW5lX2NvdW50ID0gMiBtZXJnZV9iYXNlcy50eHQgJiYKKwlncmVwICIkSEFTSDUiIG1lcmdlX2Jhc2VzLnR4dCAmJgorCWdyZXAgIiRTSURFX0hBU0g1IiBtZXJnZV9iYXNlcy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ29vZCBtZXJnZSBiYXNlcyB3aGVuIGdvb2QgYW5kIGJhZCBhcmUgc2libGluZ3MnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICIkQl9IQVNIIiAiJEFfSEFTSCIgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCBnb29kID4gbXlfYmlzZWN0X2xvZzIudHh0ICYmCisJZ3JlcCAibWVyZ2UgYmFzZSBtdXN0IGJlIHRlc3RlZCIgbXlfYmlzZWN0X2xvZzIudHh0ICYmCisJeworCQl7CisJCQlncmVwICIkU0lERV9IQVNINSIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwkJCWdyZXAgIiRIQVNINSIgbXlfYmlzZWN0X2xvZzIudHh0CisJCX0gfHwgeworCQkJZ3JlcCAiJFNJREVfSEFTSDUiIG15X2Jpc2VjdF9sb2cyLnR4dCAmJgorCQkJZ3JlcCAiJEhBU0g1IiBteV9iaXNlY3RfbG9nLnR4dAorCQl9CisJfSAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW1pemVkIG1lcmdlIGJhc2UgY2hlY2tzJyAnCisJZ2l0IGJpc2VjdCBzdGFydCAiJEhBU0g3IiAiJFNJREVfSEFTSDciID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICJtZXJnZSBiYXNlIG11c3QgYmUgdGVzdGVkIiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRIQVNINCIgbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nMi50eHQgJiYKKwl0ZXN0IC1mICIuZ2l0L0JJU0VDVF9BTkNFU1RPUlNfT0siICYmCisJdGVzdCAiJEhBU0g2IiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBiaXNlY3QgYmFkID4gbXlfYmlzZWN0X2xvZzMudHh0ICYmCisJZ2l0IGJpc2VjdCBnb29kICIkQV9IQVNIIiA+IG15X2Jpc2VjdF9sb2c0LnR4dCAmJgorCWdyZXAgIm1lcmdlIGJhc2UgbXVzdCBiZSB0ZXN0ZWQiIG15X2Jpc2VjdF9sb2c0LnR4dCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWYgIi5naXQvQklTRUNUX0FOQ0VTVE9SU19PSyIKKycKKworIyBUaGlzIGNyZWF0ZXMgYW5vdGhlciBzaWRlIGJyYW5jaCBjYWxsZWQgInBhcmFsbGVsIiB3aXRoIHNvbWUgZmlsZXMKKyMgaW4gc29tZSBkaXJlY3RvcmllcywgdG8gdGVzdCBiaXNlY3Rpbmcgd2l0aCBwYXRocy4KKyMKKyMgV2Ugc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgUDEtUDItUDMtUDQtUDUtUDYtUDcKKyMgICAvICAgICAgICAvICAgICAgICAvCisjIEgxLUgyLUgzLUg0LUg1LUg2LUg3CisjICAgICAgICAgICAgXCAgXCAgICAgXAorIyAgICAgICAgICAgICBTNS1BICAgICBcCisjICAgICAgICAgICAgICBcICAgICAgICBcCisjICAgICAgICAgICAgICAgUzYtUzctLS0tQgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInBhcmFsbGVsIiBzaWRlIGJyYW5jaCBjcmVhdGlvbicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcGFyYWxsZWwgJEhBU0gxICYmCisJbWtkaXIgZGlyMSBkaXIyICYmCisJYWRkX2xpbmVfaW50b19maWxlICIxKHBhcmEpOiBsaW5lIDEgb24gcGFyYWxsZWwgYnJhbmNoIiBkaXIxL2ZpbGUxICYmCisJUEFSQV9IQVNIMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjIocGFyYSk6IGxpbmUgMiBvbiBwYXJhbGxlbCBicmFuY2giIGRpcjIvZmlsZTIgJiYKKwlQQVJBX0hBU0gyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiMyhwYXJhKTogbGluZSAzIG9uIHBhcmFsbGVsIGJyYW5jaCIgZGlyMi9maWxlMyAmJgorCVBBUkFfSEFTSDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IG1lcmdlIC1tICJtZXJnZSBIQVNINCBhbmQgUEFSQV9IQVNIMyIgIiRIQVNINCIgJiYKKwlQQVJBX0hBU0g0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiNShwYXJhKTogYWRkIGxpbmUgb24gcGFyYWxsZWwgYnJhbmNoIiBkaXIxL2ZpbGUxICYmCisJUEFSQV9IQVNINT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjYocGFyYSk6IGFkZCBsaW5lIG9uIHBhcmFsbGVsIGJyYW5jaCIgZGlyMi9maWxlMiAmJgorCVBBUkFfSEFTSDY9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IG1lcmdlIC1tICJtZXJnZSBIQVNINyBhbmQgUEFSQV9IQVNINiIgIiRIQVNINyIgJiYKKwlQQVJBX0hBU0g3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0cmljdGluZyBiaXNlY3Rpb24gb24gb25lIGRpcicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgJEhBU0gxIC0tIGRpcjEgJiYKKwlwYXJhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcGFyYTEiID0gIiRQQVJBX0hBU0gxIiAmJgorCWdpdCBiaXNlY3QgYmFkID4gbXlfYmlzZWN0X2xvZy50eHQgJiYKKwlncmVwICIkUEFSQV9IQVNIMSBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbXlfYmlzZWN0X2xvZy50eHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdHJpY3RpbmcgYmlzZWN0aW9uIG9uIG9uZSBkaXIgYW5kIGEgZmlsZScgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IEhFQUQgJEhBU0gxIC0tIGRpcjEgaGVsbG8gJiYKKwlwYXJhND0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcGFyYTQiID0gIiRQQVJBX0hBU0g0IiAmJgorCWdpdCBiaXNlY3QgYmFkICYmCisJaGFzaDM9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJGhhc2gzIiA9ICIkSEFTSDMiICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJaGFzaDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJGhhc2g0IiA9ICIkSEFTSDQiICYmCisJZ2l0IGJpc2VjdCBnb29kICYmCisJcGFyYTE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdCAiJHBhcmExIiA9ICIkUEFSQV9IQVNIMSIgJiYKKwlnaXQgYmlzZWN0IGdvb2QgPiBteV9iaXNlY3RfbG9nLnR4dCAmJgorCWdyZXAgIiRQQVJBX0hBU0g0IGlzIHRoZSBmaXJzdCBiYWQgY29tbWl0IiBteV9iaXNlY3RfbG9nLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwcGluZyBhd2F5IGZyb20gc2tpcHBlZCBjb21taXQnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICRQQVJBX0hBU0g3ICRIQVNIMSAmJgorCXBhcmE0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRwYXJhNCIgPSAiJFBBUkFfSEFTSDQiICYmCisgICAgICAgIGdpdCBiaXNlY3Qgc2tpcCAmJgorCWhhc2g3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3QgIiRoYXNoNyIgPSAiJEhBU0g3IiAmJgorICAgICAgICBnaXQgYmlzZWN0IHNraXAgJiYKKwlwYXJhMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0ICIkcGFyYTMiID0gIiRQQVJBX0hBU0gzIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvcmluZyBvdXQgd2hlbiB1c2luZyBiYWQgcGF0aCBwYXJhbWV0ZXJzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAkUEFSQV9IQVNINyAkSEFTSDEgLS0gZm9vYmFyIDI+IGVycm9yLnR4dCAmJgorCWdyZXAgImJhZCBwYXRoIHBhcmFtZXRlcnMiIGVycm9yLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGJpc2VjdGlvbiBvbiBiYXJlIHJlcG8gLSAtLW5vLWNoZWNrb3V0IHNwZWNpZmllZCcgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLm5vY2hlY2tvdXQgJiYKKwkoCisJCWNkIGJhcmUubm9jaGVja291dCAmJgorCQlnaXQgYmlzZWN0IHN0YXJ0IC0tbm8tY2hlY2tvdXQgJiYKKwkJZ2l0IGJpc2VjdCBnb29kICRIQVNIMSAmJgorCQlnaXQgYmlzZWN0IGJhZCAkSEFTSDQgJiYKKwkJZ2l0IGJpc2VjdCBydW4gZXZhbCBcCisJCQkidGVzdCBcJChnaXQgcmV2LWxpc3QgQklTRUNUX0hFQUQgXiRIQVNIMiAtLW1heC1jb3VudD0xIHwgd2MgLWwpID0gMCIgXAorCQkJPi4uL25vY2hlY2tvdXQubG9nCisJKSAmJgorCWdyZXAgIiRIQVNIMyBpcyB0aGUgZmlyc3QgYmFkIGNvbW1pdCIgbm9jaGVja291dC5sb2cKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGJpc2VjdGlvbiBvbiBiYXJlIHJlcG8gLSAtLW5vLWNoZWNrb3V0IGRlZmF1bHRlZCcgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmRlZmF1bHRlZCAmJgorCSgKKwkJY2QgYmFyZS5kZWZhdWx0ZWQgJiYKKwkJZ2l0IGJpc2VjdCBzdGFydCAmJgorCQlnaXQgYmlzZWN0IGdvb2QgJEhBU0gxICYmCisJCWdpdCBiaXNlY3QgYmFkICRIQVNINCAmJgorCQlnaXQgYmlzZWN0IHJ1biBldmFsIFwKKwkJCSJ0ZXN0IFwkKGdpdCByZXYtbGlzdCBCSVNFQ1RfSEVBRCBeJEhBU0gyIC0tbWF4LWNvdW50PTEgfCB3YyAtbCkgPSAwIiBcCisJCQk+Li4vZGVmYXVsdGVkLmxvZworCSkgJiYKKwlncmVwICIkSEFTSDMgaXMgdGhlIGZpcnN0IGJhZCBjb21taXQiIGRlZmF1bHRlZC5sb2cKKycKKworIworIyBUaGlzIGNyZWF0ZXMgYSBicm9rZW4gYnJhbmNoIHdoaWNoIGNhbm5vdCBiZSBjaGVja2VkIG91dCBiZWNhdXNlCisjIHRoZSB0cmVlIGNyZWF0ZWQgaGFzIGJlZW4gZGVsZXRlZC4KKyMKKyMgSDEtSDItSDMtSDQtSDUtSDYtSDcgIDwtLW90aGVyCisjICAgICAgICAgICAgXAorIyAgICAgICAgICAgICBTNS1TNictUzcnLVM4Jy1TOSAgPC0tYnJva2VuCisjCisjIENvbW1pdHMgbWFya2VkIHdpdGggJyBoYXZlIGEgbWlzc2luZyB0cmVlLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJva2VuIGJyYW5jaCBjcmVhdGlvbicgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYnJva2VuICRIQVNINCAmJgorCWdpdCB0YWcgQlJPS0VOX0hBU0g0ICRIQVNINCAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiNShicm9rZW4pOiBmaXJzdCBsaW5lIG9uIGEgYnJva2VuIGJyYW5jaCIgaGVsbG8yICYmCisJZ2l0IHRhZyBCUk9LRU5fSEFTSDUgJiYKKwlta2RpciBtaXNzaW5nICYmCisJOj4gbWlzc2luZy9NSVNTSU5HICYmCisJZ2l0IGFkZCBtaXNzaW5nL01JU1NJTkcgJiYKKwlnaXQgY29tbWl0IC1tICI2KGJyb2tlbik6IEFkZGVkIGZpbGUgdGhhdCB3aWxsIGJlIGRlbGV0ZWQiICYmCisJZ2l0IHRhZyBCUk9LRU5fSEFTSDYgJiYKKwlhZGRfbGluZV9pbnRvX2ZpbGUgIjcoYnJva2VuKTogc2Vjb25kIGxpbmUgb24gYSBicm9rZW4gYnJhbmNoIiBoZWxsbzIgJiYKKwlnaXQgdGFnIEJST0tFTl9IQVNINyAmJgorCWFkZF9saW5lX2ludG9fZmlsZSAiOChicm9rZW4pOiB0aGlyZCBsaW5lIG9uIGEgYnJva2VuIGJyYW5jaCIgaGVsbG8yICYmCisJZ2l0IHRhZyBCUk9LRU5fSEFTSDggJiYKKwlnaXQgcm0gbWlzc2luZy9NSVNTSU5HICYmCisJZ2l0IGNvbW1pdCAtbSAiOShicm9rZW4pOiBSZW1vdmUgbWlzc2luZyBmaWxlIiAmJgorCWdpdCB0YWcgQlJPS0VOX0hBU0g5ICYmCisJcm0gLmdpdC9vYmplY3RzLzM5L2Y3ZTYxYTcyNDE4N2FiNzY3ZDJlMDg0NDJkOWI2YjlkYWI1ODdkCisnCisKK2VjaG8gIiIgPiBleHBlY3RlZC5vaworY2F0ID4gZXhwZWN0ZWQubWlzc2luZy10cmVlLmRlZmF1bHQgPDxFT0YKK2ZhdGFsOiB1bmFibGUgdG8gcmVhZCB0cmVlIDM5ZjdlNjFhNzI0MTg3YWI3NjdkMmUwODQ0MmQ5YjZiOWRhYjU4N2QKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZmFpbHMgaWYgdHJlZSBpcyBicm9rZW4gb24gc3RhcnQgY29tbWl0JyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgQlJPS0VOX0hBU0g3IEJST0tFTl9IQVNINCAyPmVycm9yLnR4dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLm1pc3NpbmctdHJlZS5kZWZhdWx0IGVycm9yLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgZmFpbHMgaWYgdHJlZSBpcyBicm9rZW4gb24gdHJpYWwgY29tbWl0JyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgc3RhcnQgQlJPS0VOX0hBU0g5IEJST0tFTl9IQVNINCAyPmVycm9yLnR4dCAmJgorCWdpdCByZXNldCAtLWhhcmQgYnJva2VuICYmCisJZ2l0IGNoZWNrb3V0IGJyb2tlbiAmJgorCXRlc3RfY21wIGV4cGVjdGVkLm1pc3NpbmctdHJlZS5kZWZhdWx0IGVycm9yLnR4dAorJworCitjaGVja19zYW1lKCkKK3sKKwllY2hvICJDaGVja2luZyAkMSBpcyB0aGUgc2FtZSBhcyAkMiIgJiYKKwl0ZXN0X2NtcF9yZXYgIiQxIiAiJDIiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdDogLS1uby1jaGVja291dCAtIHN0YXJ0IGNvbW1pdCBiYWQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBCUk9LRU5fSEFTSDcgQlJPS0VOX0hBU0g0IC0tbm8tY2hlY2tvdXQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINiBCSVNFQ1RfSEVBRCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0OiAtLW5vLWNoZWNrb3V0IC0gdHJpYWwgY29tbWl0IGJhZCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0IGJyb2tlbiBCUk9LRU5fSEFTSDQgLS1uby1jaGVja291dCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g2IEJJU0VDVF9IRUFEICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Q6IC0tbm8tY2hlY2tvdXQgLSB0YXJnZXQgYmVmb3JlIGJyZWFrYWdlJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgYnJva2VuIEJST0tFTl9IQVNINCAtLW5vLWNoZWNrb3V0ICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDYgQklTRUNUX0hFQUQgJiYKKwlnaXQgYmlzZWN0IGJhZCBCSVNFQ1RfSEVBRCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g1IEJJU0VDVF9IRUFEICYmCisJZ2l0IGJpc2VjdCBiYWQgQklTRUNUX0hFQUQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINSBiaXNlY3QvYmFkICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Q6IC0tbm8tY2hlY2tvdXQgLSB0YXJnZXQgaW4gYnJlYWthZ2UnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBicm9rZW4gQlJPS0VOX0hBU0g0IC0tbm8tY2hlY2tvdXQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINiBCSVNFQ1RfSEVBRCAmJgorCWdpdCBiaXNlY3QgYmFkIEJJU0VDVF9IRUFEICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDUgQklTRUNUX0hFQUQgJiYKKwlnaXQgYmlzZWN0IGdvb2QgQklTRUNUX0hFQUQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINiBiaXNlY3QvYmFkICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Q6IC0tbm8tY2hlY2tvdXQgLSB0YXJnZXQgYWZ0ZXIgYnJlYWthZ2UnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBicm9rZW4gQlJPS0VOX0hBU0g0IC0tbm8tY2hlY2tvdXQgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINiBCSVNFQ1RfSEVBRCAmJgorCWdpdCBiaXNlY3QgZ29vZCBCSVNFQ1RfSEVBRCAmJgorCWNoZWNrX3NhbWUgQlJPS0VOX0hBU0g4IEJJU0VDVF9IRUFEICYmCisJZ2l0IGJpc2VjdCBnb29kIEJJU0VDVF9IRUFEICYmCisJY2hlY2tfc2FtZSBCUk9LRU5fSEFTSDkgYmlzZWN0L2JhZCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0OiBkZW1vbnN0cmF0ZSBpZGVudGlmaWNhdGlvbiBvZiBkYW1hZ2UgYm91bmRhcnknICIKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGNoZWNrb3V0IGJyb2tlbiAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgYnJva2VuIG1hc3RlciAtLW5vLWNoZWNrb3V0ICYmCisJZ2l0IGJpc2VjdCBydW4gXCJcJFNIRUxMX1BBVEhcIiAtYyAnCisJCUdPT0Q9XCQoZ2l0IGZvci1lYWNoLXJlZiBcIi0tZm9ybWF0PSUob2JqZWN0bmFtZSlcIiByZWZzL2Jpc2VjdC9nb29kLSopICYmCisJCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgQklTRUNUX0hFQUQgLS1ub3QgXCRHT09EID50bXAuXCRcJCAmJgorCQlnaXQgcGFjay1vYmplY3RzIC0tc3Rkb3V0ID4vZGV2L251bGwgPCB0bXAuXCRcJAorCQlyYz1cJD8KKwkJcm0gLWYgdG1wLlwkXCQKKwkJdGVzdCBcJHJjID0gMCcgJiYKKwljaGVja19zYW1lIEJST0tFTl9IQVNINiBiaXNlY3QvYmFkICYmCisJZ2l0IGJpc2VjdCByZXNldAorIgorCitjYXQgPiBleHBlY3RlZC5iaXNlY3QtbG9nIDw8RU9GCisjIGJhZDogWzMyYTU5NGEzZmRhYzJkNTdjZjZkMDI5ODdlMzBlZWM2ODUxMTQ5OGNdIEFkZCA8NDogQ2lhbyBmb3Igbm93PiBpbnRvIDxoZWxsbz4uCisjIGdvb2Q6IFs3YjdmMjA0YTc0OWMzMTI1ZDUyMjRlZDYxZWEyYWUxMTg3YWQwNDZmXSBBZGQgPDI6IEEgbmV3IGRheSBmb3IgZ2l0PiBpbnRvIDxoZWxsbz4uCitnaXQgYmlzZWN0IHN0YXJ0ICczMmE1OTRhM2ZkYWMyZDU3Y2Y2ZDAyOTg3ZTMwZWVjNjg1MTE0OThjJyAnN2I3ZjIwNGE3NDljMzEyNWQ1MjI0ZWQ2MWVhMmFlMTE4N2FkMDQ2ZicKKyMgZ29vZDogWzNkZTk1MmYyNDE2YjYwODRmNTU3ZWM0MTc3MDllYWM3NDBjNjgxOGNdIEFkZCA8MzogQW5vdGhlciBuZXcgZGF5IGZvciBnaXQ+IGludG8gPGhlbGxvPi4KK2dpdCBiaXNlY3QgZ29vZCAzZGU5NTJmMjQxNmI2MDg0ZjU1N2VjNDE3NzA5ZWFjNzQwYzY4MThjCisjIGZpcnN0IGJhZCBjb21taXQ6IFszMmE1OTRhM2ZkYWMyZDU3Y2Y2ZDAyOTg3ZTMwZWVjNjg1MTE0OThjXSBBZGQgPDQ6IENpYW8gZm9yIG5vdz4gaW50byA8aGVsbG8+LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBsb2c6IHN1Y2Nlc3NmdWxsIHJlc3VsdCcgJworCWdpdCBiaXNlY3QgcmVzZXQgJiYKKwlnaXQgYmlzZWN0IHN0YXJ0ICRIQVNINCAkSEFTSDIgJiYKKwlnaXQgYmlzZWN0IGdvb2QgJiYKKwlnaXQgYmlzZWN0IGxvZyA+YmlzZWN0LWxvZy50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5iaXNlY3QtbG9nIGJpc2VjdC1sb2cudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCitjYXQgPiBleHBlY3RlZC5iaXNlY3Qtc2tpcC1sb2cgPDxFT0YKKyMgYmFkOiBbMzJhNTk0YTNmZGFjMmQ1N2NmNmQwMjk4N2UzMGVlYzY4NTExNDk4Y10gQWRkIDw0OiBDaWFvIGZvciBub3c+IGludG8gPGhlbGxvPi4KKyMgZ29vZDogWzdiN2YyMDRhNzQ5YzMxMjVkNTIyNGVkNjFlYTJhZTExODdhZDA0NmZdIEFkZCA8MjogQSBuZXcgZGF5IGZvciBnaXQ+IGludG8gPGhlbGxvPi4KK2dpdCBiaXNlY3Qgc3RhcnQgJzMyYTU5NGEzZmRhYzJkNTdjZjZkMDI5ODdlMzBlZWM2ODUxMTQ5OGMnICc3YjdmMjA0YTc0OWMzMTI1ZDUyMjRlZDYxZWEyYWUxMTg3YWQwNDZmJworIyBza2lwOiBbM2RlOTUyZjI0MTZiNjA4NGY1NTdlYzQxNzcwOWVhYzc0MGM2ODE4Y10gQWRkIDwzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdD4gaW50byA8aGVsbG8+LgorZ2l0IGJpc2VjdCBza2lwIDNkZTk1MmYyNDE2YjYwODRmNTU3ZWM0MTc3MDllYWM3NDBjNjgxOGMKKyMgb25seSBza2lwcGVkIGNvbW1pdHMgbGVmdCB0byB0ZXN0CisjIHBvc3NpYmxlIGZpcnN0IGJhZCBjb21taXQ6IFszMmE1OTRhM2ZkYWMyZDU3Y2Y2ZDAyOTg3ZTMwZWVjNjg1MTE0OThjXSBBZGQgPDQ6IENpYW8gZm9yIG5vdz4gaW50byA8aGVsbG8+LgorIyBwb3NzaWJsZSBmaXJzdCBiYWQgY29tbWl0OiBbM2RlOTUyZjI0MTZiNjA4NGY1NTdlYzQxNzcwOWVhYzc0MGM2ODE4Y10gQWRkIDwzOiBBbm90aGVyIG5ldyBkYXkgZm9yIGdpdD4gaW50byA8aGVsbG8+LgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBsb2c6IG9ubHkgc2tpcCBjb21taXRzIGxlZnQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDQgJEhBU0gyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBza2lwICYmCisJZ2l0IGJpc2VjdCBsb2cgPmJpc2VjdC1za2lwLWxvZy50eHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC5iaXNlY3Qtc2tpcC1sb2cgYmlzZWN0LXNraXAtbG9nLnR4dCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBiaXNlY3QgYmFkIEhFQUQiIGJlaGF2ZXMgYXMgImdpdCBiaXNlY3QgYmFkIicgJworCWdpdCBjaGVja291dCBwYXJhbGxlbCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgSEVBRCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IGdvb2QgSEVBRCAmJgorCWdpdCBiaXNlY3QgYmFkIEhFQUQgJiYKKwl0ZXN0ICIkSEFTSDYiID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnRzIHdpdGggb25seSBvbmUgbmV3JyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwlnaXQgYmlzZWN0IG5ldyAkSEFTSDQgJiYKKwlnaXQgYmlzZWN0IG5leHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGRvZXMgbm90IHN0YXJ0IHdpdGggb25seSBvbmUgb2xkJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwlnaXQgYmlzZWN0IG9sZCAkSEFTSDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IG5leHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0IHdpdGggb25lIG5ldyBhbmQgb2xkJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwlnaXQgYmlzZWN0IG9sZCAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IG5ldyAkSEFTSDQgJiYKKwlnaXQgYmlzZWN0IG5ldyAmJgorCWdpdCBiaXNlY3QgbmV3ID5iaXNlY3RfcmVzdWx0ICYmCisJZ3JlcCAiJEhBU0gyIGlzIHRoZSBmaXJzdCBuZXcgY29tbWl0IiBiaXNlY3RfcmVzdWx0ICYmCisJZ2l0IGJpc2VjdCBsb2cgPmxvZ190b19yZXBsYXkudHh0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgcmVwbGF5IHdpdGggb2xkIGFuZCBuZXcnICcKKwlnaXQgYmlzZWN0IHJlcGxheSBsb2dfdG9fcmVwbGF5LnR4dCA+YmlzZWN0X3Jlc3VsdCAmJgorCWdyZXAgIiRIQVNIMiBpcyB0aGUgZmlyc3QgbmV3IGNvbW1pdCIgYmlzZWN0X3Jlc3VsdCAmJgorCWdpdCBiaXNlY3QgcmVzZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IGNhbm5vdCBtaXggb2xkL25ldyBhbmQgZ29vZC9iYWQnICcKKwlnaXQgYmlzZWN0IHN0YXJ0ICYmCisJZ2l0IGJpc2VjdCBiYWQgJEhBU0g0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBvbGQgJEhBU0gxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCB0ZXJtcyBuZWVkcyAwIG9yIDEgYXJndW1lbnQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCB0ZXJtcyBvbmx5LW9uZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgdGVybXMgMSAyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCB0ZXJtcyAyPmFjdHVhbCAmJgorCWVjaG8gIm5vIHRlcm1zIGRlZmluZWQiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3QgdGVybXMgc2hvd3MgZ29vZC9iYWQgYWZ0ZXIgc3RhcnQnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCBIRUFEICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgdGVybXMgLS10ZXJtLWdvb2QgPmFjdHVhbCAmJgorCWVjaG8gZ29vZCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgYmlzZWN0IHRlcm1zIC0tdGVybS1iYWQgPmFjdHVhbCAmJgorCWVjaG8gYmFkID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQgd2l0aCBvbmUgdGVybTEgYW5kIHRlcm0yJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgLS10ZXJtLW9sZCB0ZXJtMiAtLXRlcm0tbmV3IHRlcm0xICYmCisJZ2l0IGJpc2VjdCB0ZXJtMiAkSEFTSDEgJiYKKwlnaXQgYmlzZWN0IHRlcm0xICRIQVNINCAmJgorCWdpdCBiaXNlY3QgdGVybTEgJiYKKwlnaXQgYmlzZWN0IHRlcm0xID5iaXNlY3RfcmVzdWx0ICYmCisJZ3JlcCAiJEhBU0gyIGlzIHRoZSBmaXJzdCB0ZXJtMSBjb21taXQiIGJpc2VjdF9yZXN1bHQgJiYKKwlnaXQgYmlzZWN0IGxvZyA+bG9nX3RvX3JlcGxheS50eHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCByZXBsYXkgd2l0aCB0ZXJtMSBhbmQgdGVybTInICcKKwlnaXQgYmlzZWN0IHJlcGxheSBsb2dfdG9fcmVwbGF5LnR4dCA+YmlzZWN0X3Jlc3VsdCAmJgorCWdyZXAgIiRIQVNIMiBpcyB0aGUgZmlyc3QgdGVybTEgY29tbWl0IiBiaXNlY3RfcmVzdWx0ICYmCisJZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaXNlY3Qgc3RhcnQgdGVybTEgdGVybTInICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJZ2l0IGJpc2VjdCBzdGFydCAtLXRlcm0tbmV3IHRlcm0xIC0tdGVybS1vbGQgdGVybTIgJEhBU0g0ICRIQVNIMSAmJgorCWdpdCBiaXNlY3QgdGVybTEgJiYKKwlnaXQgYmlzZWN0IHRlcm0xID5iaXNlY3RfcmVzdWx0ICYmCisJZ3JlcCAiJEhBU0gyIGlzIHRoZSBmaXJzdCB0ZXJtMSBjb21taXQiIGJpc2VjdF9yZXN1bHQgJiYKKwlnaXQgYmlzZWN0IGxvZyA+bG9nX3RvX3JlcGxheS50eHQgJiYKKwlnaXQgYmlzZWN0IHJlc2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBjYW5ub3QgbWl4IHRlcm1zJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgLS10ZXJtLWdvb2QgdGVybTEgLS10ZXJtLWJhZCB0ZXJtMiAkSEFTSDQgJEhBU0gxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBiYWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IGdvb2QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IG5ldyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3Qgb2xkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCB0ZXJtcyByZWplY3RzIGludmFsaWQgdGVybXMnICcKKwlnaXQgYmlzZWN0IHJlc2V0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCBzdGFydCAtLXRlcm0tZ29vZCBpbnZhbGlkLi50ZXJtICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCB0ZXJtcyAtLXRlcm0tYmFkIGludmFsaWQuLnRlcm0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmlzZWN0IHRlcm1zIC0tdGVybS1nb29kIGJhZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBiaXNlY3QgdGVybXMgLS10ZXJtLWdvb2Qgb2xkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCB0ZXJtcyAtLXRlcm0tZ29vZCBza2lwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJpc2VjdCB0ZXJtcyAtLXRlcm0tZ29vZCByZXNldCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvQklTRUNUX1RFUk1TCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBzdGFydCAtLXRlcm0tKiBkb2VzIHN0b3JlIHRlcm1zJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgLS10ZXJtLWJhZD1vbmUgLS10ZXJtLWdvb2Q9dHdvICYmCisJZ2l0IGJpc2VjdCB0ZXJtcyA+YWN0dWFsICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ZWQgJiYKKwlZb3VyIGN1cnJlbnQgdGVybXMgYXJlIHR3byBmb3IgdGhlIG9sZCBzdGF0ZQorCWFuZCBvbmUgZm9yIHRoZSBuZXcgc3RhdGUuCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGJpc2VjdCB0ZXJtcyAtLXRlcm0tYmFkID5hY3R1YWwgJiYKKwllY2hvIG9uZSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgYmlzZWN0IHRlcm1zIC0tdGVybS1nb29kID5hY3R1YWwgJiYKKwllY2hvIHR3byA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmlzZWN0IHN0YXJ0IHRha2VzIG9wdGlvbnMgYW5kIHJldnMgaW4gYW55IG9yZGVyJyAnCisJZ2l0IGJpc2VjdCByZXNldCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgLS10ZXJtLWdvb2Qgb25lICRIQVNINCBcCisJCS0tdGVybS1nb29kIHR3byAtLXRlcm0tYmFkIGJhZC10ZXJtIFwKKwkJJEhBU0gxIC0tdGVybS1nb29kIHRocmVlIC0tICYmCisJKGdpdCBiaXNlY3QgdGVybXMgLS10ZXJtLWJhZCAmJiBnaXQgYmlzZWN0IHRlcm1zIC0tdGVybS1nb29kKSA+YWN0dWFsICYmCisJcHJpbnRmICIlc1xuJXNcbiIgYmFkLXRlcm0gdGhyZWUgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzMS1tZXJnZS1yZWN1cnNpdmUuc2ggYi90L3Q2MDMxLW1lcmdlLXJlY3Vyc2l2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NDY0YTE2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzMS1tZXJnZS1yZWN1cnNpdmUuc2gKQEAgLTAsMCArMSw4NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdlLXJlY3Vyc2l2ZTogaGFuZGxlIGZpbGUgbW9kZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RlIGNoYW5nZSBpbiBvbmUgYnJhbmNoOiBrZWVwIGNoYW5nZWQgdmVyc2lvbicgJworCTogPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWdpdCBjaGVja291dCAtYiBhMSBtYXN0ZXIgJiYKKwk6ID5kdW1teSAmJgorCWdpdCBhZGQgZHVtbXkgJiYKKwlnaXQgY29tbWl0IC1tIGEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYjEgbWFzdGVyICYmCisJdGVzdF9jaG1vZCAreCBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tIGIxICYmCisJZ2l0IGNoZWNrb3V0IGExICYmCisJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBtYXN0ZXIgLS0gYTEgYjEgJiYKKwlnaXQgbHMtZmlsZXMgLXMgZmlsZTEgfCBncmVwIF4xMDA3NTUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBGSUxFTU9ERSAndmVyaWZ5IGV4ZWN1dGFibGUgYml0IG9uIGZpbGUnICcKKwl0ZXN0IC14IGZpbGUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGUgY2hhbmdlIGluIGJvdGggYnJhbmNoZXM6IGV4cGVjdCBjb25mbGljdCcgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRCAmJgorCWdpdCBjaGVja291dCAtYiBhMiBtYXN0ZXIgJiYKKwk6ID5maWxlMiAmJgorCUg9JChnaXQgaGFzaC1vYmplY3QgZmlsZTIpICYmCisJdGVzdF9jaG1vZCAreCBmaWxlMiAmJgorCWdpdCBjb21taXQgLW0gYTIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYjIgbWFzdGVyICYmCisJOiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSBiMiAmJgorCWdpdCBjaGVja291dCBhMiAmJgorCSgKKwkJZ2l0IG1lcmdlLXJlY3Vyc2l2ZSBtYXN0ZXIgLS0gYTIgYjIKKwkJdGVzdCAkPyA9IDEKKwkpICYmCisJZ2l0IGxzLWZpbGVzIC11ID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gIjEwMDc1NSAkSCAyCWZpbGUyIgorCQllY2hvICIxMDA2NDQgJEggMwlmaWxlMiIKKwkpID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ICYmCisJZ2l0IGxzLWZpbGVzIC1zIGZpbGUyIHwgZ3JlcCBeMTAwNzU1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgRklMRU1PREUgJ3ZlcmlmeSBleGVjdXRhYmxlIGJpdCBvbiBmaWxlJyAnCisJdGVzdCAteCBmaWxlMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnaW5nIHdpdGggdHJpcGxlIHJlbmFtZSBhY3Jvc3MgRC9GIGNvbmZsaWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJZ2l0IGNoZWNrb3V0IC1iIG1haW4gJiYKKwlnaXQgcm0gLXJmIC4gJiYKKworCWVjaG8gImp1c3QgYSBmaWxlIiA+c3ViMSAmJgorCW1rZGlyIC1wIHN1YjIgJiYKKwllY2hvIGNvbnRlbnQxID5zdWIyL2ZpbGUxICYmCisJZWNobyBjb250ZW50MiA+c3ViMi9maWxlMiAmJgorCWVjaG8gY29udGVudDMgPnN1YjIvZmlsZTMgJiYKKwlta2RpciBzaW1wbGUgJiYKKwllY2hvIGJhc2UgPnNpbXBsZS9iYXIgJiYKKwlnaXQgYWRkIC1BICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgb3RoZXIgJiYKKwllY2hvIG1vcmUgPj5zaW1wbGUvYmFyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBjaGFuZ2VzaW1wbGVmaWxlICYmCisKKwlnaXQgY2hlY2tvdXQgbWFpbiAmJgorCWdpdCBybSBzdWIxICYmCisJZ2l0IG12IHN1YjIgc3ViMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gY2hhbmdlZmlsZXRvZGlyICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2Ugb3RoZXIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDMyLW1lcmdlLWxhcmdlLXJlbmFtZS5zaCBiL3QvdDYwMzItbWVyZ2UtbGFyZ2UtcmVuYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmNzkyNjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDMyLW1lcmdlLWxhcmdlLXJlbmFtZS5zaApAQCAtMCwwICsxLDEwMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J21lcmdpbmcgd2l0aCBsYXJnZSByZW5hbWUgbWF0cml4JworLiAuL3Rlc3QtbGliLnNoCisKK2NvdW50KCkgeworCWk9MQorCXdoaWxlIHRlc3QgJGkgLWxlICQxOyBkbworCQllY2hvICRpCisJCWk9JCgoJGkgKyAxKSkKKwlkb25lCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIChpbml0aWFsKScgJworCXRvdWNoIGZpbGUgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwKKycKKworbWFrZV90ZXh0KCkgeworCWVjaG8gJDE6ICQyCisJZm9yIGkgaW4gYGNvdW50IDIwYDsgZG8KKwkJZWNobyAkMTogJGkKKwlkb25lCisJZWNobyAkMTogJDMKK30KKwordGVzdF9yZW5hbWUoKSB7CisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVuYW1lICgkMSwgJDIpIiAnCisJbj0nJDEnICYmCisJZXhwZWN0PSckMicgJiYKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBicmFuY2ggLUQgdGVzdCRuICYmCisJZ2l0IHJlc2V0IC0taGFyZCBpbml0aWFsICYmCisJZm9yIGkgaW4gJChjb3VudCAkbik7IGRvCisJCW1ha2VfdGV4dCAkaSBpbml0aWFsIGluaXRpYWwgPiRpCisJZG9uZSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gYWRkPSRuICYmCisJZm9yIGkgaW4gJChjb3VudCAkbik7IGRvCisJCW1ha2VfdGV4dCAkaSBjaGFuZ2VkIGluaXRpYWwgPiRpCisJZG9uZSAmJgorCWdpdCBjb21taXQgLWEgLW0gY2hhbmdlPSRuICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QkbiBIRUFEXiAmJgorCWZvciBpIGluICQoY291bnQgJG4pOyBkbworCQlnaXQgcm0gJGkKKwkJbWFrZV90ZXh0ICRpIGluaXRpYWwgY2hhbmdlZCA+JGkubW92ZWQKKwlkb25lICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBjaGFuZ2UrcmVuYW1lPSRuICYmCisJY2FzZSAiJGV4cGVjdCIgaW4KKwkJb2spIGdpdCBtZXJnZSBtYXN0ZXIgOzsKKwkJICopIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgOzsKKwllc2FjCisJJworfQorCit0ZXN0X3JlbmFtZSA1IG9rCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCBkaWZmLnJlbmFtZWxpbWl0IHRvIDQnICcKKwlnaXQgY29uZmlnIGRpZmYucmVuYW1lbGltaXQgNAorJwordGVzdF9yZW5hbWUgNCBvawordGVzdF9yZW5hbWUgNSBmYWlsCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCBtZXJnZS5yZW5hbWVsaW1pdCB0byA1JyAnCisJZ2l0IGNvbmZpZyBtZXJnZS5yZW5hbWVsaW1pdCA1CisnCit0ZXN0X3JlbmFtZSA1IG9rCit0ZXN0X3JlbmFtZSA2IGZhaWwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbGFyZ2Ugc2ltcGxlIHJlbmFtZScgJworCWdpdCBjb25maWcgLS11bnNldCBtZXJnZS5yZW5hbWVsaW1pdCAmJgorCWdpdCBjb25maWcgLS11bnNldCBkaWZmLnJlbmFtZWxpbWl0ICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlmb3IgaSBpbiAkKGNvdW50IDIwMCk7IGRvCisJCW1ha2VfdGV4dCBmb28gYmFyIGJheiA+JGkKKwlkb25lICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBjcmVhdGUtZmlsZXMgJiYKKworCWdpdCBicmFuY2ggc2ltcGxlLWNoYW5nZSAmJgorCWdpdCBjaGVja291dCAtYiBzaW1wbGUtcmVuYW1lICYmCisKKwlta2RpciBidWlsdGluICYmCisJZ2l0IG12IFswLTldKiBidWlsdGluLyAmJgorCWdpdCBjb21taXQgLW0gcmVuYW1lZCAmJgorCisJZ2l0IGNoZWNrb3V0IHNpbXBsZS1jaGFuZ2UgJiYKKwk+dW5yZWxhdGVkLWNoYW5nZSAmJgorCWdpdCBhZGQgdW5yZWxhdGVkLWNoYW5nZSAmJgorCWdpdCBjb21taXQgLW0gdW5yZWxhdGVkLWNoYW5nZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXNzaXZlIHNpbXBsZSByZW5hbWUgZG9lcyBub3Qgc3BhbSBhZGRlZCBmaWxlcycgJworCXNhbmVfdW5zZXQgR0lUX01FUkdFX1ZFUkJPU0lUWSAmJgorCWdpdCBtZXJnZSAtLW5vLXN0YXQgc2ltcGxlLXJlbmFtZSB8IGdyZXAgLXYgUmVtb3ZpbmcgPm91dHB1dCAmJgorCXRlc3RfbGluZV9jb3VudCAtbHQgNSBvdXRwdXQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDMzLW1lcmdlLWNybGYuc2ggYi90L3Q2MDMzLW1lcmdlLWNybGYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZThkNjVlZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzMtbWVyZ2UtY3JsZi5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nbWVyZ2UgY29uZmxpY3QgaW4gY3JsZiByZXBvCisKKwkJYi0tLU0KKwkgICAgICAgLyAgIC8KKwlpbml0aWFsLS0tYQorCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWVjaG8gZm9vIHwgYXBwZW5kX2NyID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCIgJiYKKwlnaXQgdGFnIGluaXRpYWwgJiYKKwlnaXQgYnJhbmNoIHNpZGUgJiYKKwllY2hvIGxpbmUgZnJvbSBhIHwgYXBwZW5kX2NyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgZnJvbSBhIiBmaWxlICYmCisJZ2l0IHRhZyBhICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIGxpbmUgZnJvbSBiIHwgYXBwZW5kX2NyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgZnJvbSBiIiBmaWxlICYmCisJZ2l0IHRhZyBiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayAib3VycyIgaXMgQ1JMRicgJworCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBtZXJnZSBzaWRlIC1zIG91cnMgJiYKKwljYXQgZmlsZSB8IHJlbW92ZV9jciB8IGFwcGVuZF9jciA+ZmlsZS50ZW1wICYmCisJdGVzdF9jbXAgZmlsZSBmaWxlLnRlbXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgdGhhdCBjb25mbGljdCBmaWxlIGlzIENSTEYnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2lkZSAmJgorCWNhdCBmaWxlIHwgcmVtb3ZlX2NyIHwgYXBwZW5kX2NyID5maWxlLnRlbXAgJiYKKwl0ZXN0X2NtcCBmaWxlIGZpbGUudGVtcAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzQtbWVyZ2UtcmVuYW1lLW5vY3J1ZnQuc2ggYi90L3Q2MDM0LW1lcmdlLXJlbmFtZS1ub2NydWZ0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5ODcxYWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDM0LW1lcmdlLXJlbmFtZS1ub2NydWZ0LnNoCkBAIC0wLDAgKzEsOTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdNZXJnZS1yZWN1cnNpdmUgbWVyZ2luZyByZW5hbWVzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgXAorJworY2F0ID5BIDw8XEVPRiAmJgorYSBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK2IgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCitjIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworZCBkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQKK2UgZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlCitmIGZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZgorZyBnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cKK2ggaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoCitpIGlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaQoraiBqampqampqampqampqampqampqampqampqampqampqampqampqampqampqampqamoKK2sga2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2trCitsIGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbAorbSBtbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW0KK24gbm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubm5uCitvIG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbworRU9GCisKK2NhdCA+TSA8PFxFT0YgJiYKK0EgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBCitCIEJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQgorQyBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0MKK0QgRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERECitFIEVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRQorRiBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKK0cgR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHCitIIEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISAorSSBJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUkKK0ogSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKCitLIEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSworTCBMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwKK00gTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NCitOIE5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgorTyBPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08KK0VPRgorCitnaXQgYWRkIEEgTSAmJgorZ2l0IGNvbW1pdCAtbSAiaW5pdGlhbCBoYXMgQSBhbmQgTSIgJiYKK2dpdCBicmFuY2ggd2hpdGUgJiYKK2dpdCBicmFuY2ggcmVkICYmCitnaXQgYnJhbmNoIGJsdWUgJiYKKworZ2l0IGNoZWNrb3V0IHdoaXRlICYmCitzZWQgLWUgIi9eZyAvcy8uKi9nIDogd2hpdGUgY2hhbmdlcyBhIGxpbmUvIiA8QSA+QiAmJgorc2VkIC1lICIvXkcgL3MvLiovRyA6IGNvbG9yZWQgYnJhbmNoIGNoYW5nZXMgYSBsaW5lLyIgPE0gPk4gJiYKK3JtIC1mIEEgTSAmJgorZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLXJlbW92ZSBBIEIgTSBOICYmCitnaXQgY29tbWl0IC1tICJ3aGl0ZSByZW5hbWVzIEEtPkIsIE0tPk4iICYmCisKK2dpdCBjaGVja291dCByZWQgJiYKK2VjaG8gY3JlYXRlZCBieSByZWQgPlIgJiYKK2dpdCB1cGRhdGUtaW5kZXggLS1hZGQgUiAmJgorZ2l0IGNvbW1pdCAtbSAicmVkIGNyZWF0ZXMgUiIgJiYKKworZ2l0IGNoZWNrb3V0IGJsdWUgJiYKK3NlZCAtZSAiL15vIC9zLy4qL2cgOiBibHVlIGNoYW5nZXMgYSBsaW5lLyIgPEEgPkIgJiYKK3JtIC1mIEEgJiYKK212IEIgQSAmJgorZ2l0IHVwZGF0ZS1pbmRleCBBICYmCitnaXQgY29tbWl0IC1tICJibHVlIG1vZGlmeSBBIiAmJgorCitnaXQgY2hlY2tvdXQgbWFzdGVyJworCisjIFRoaXMgdGVzdCBicm9rZSBpbiA2NWFjNmU5YzNmNDc4MDdjYjYwM2FmMDdhNmE5ZTFhNDNiYzExOWFlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB3aGl0ZSBpbnRvIHJlZCAoQS0+QixNLT5OKScgXAorJworCWdpdCBjaGVja291dCAtYiByZWQtd2hpdGUgcmVkICYmCisJZ2l0IG1lcmdlIHdoaXRlICYmCisJZ2l0IHdyaXRlLXRyZWUgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBCICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgTiAmJgorCXRlc3RfcGF0aF9pc19maWxlIFIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBBICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgTQorJworCisjIFRoaXMgdGVzdCBicm9rZSBpbiA4MzcxMjM0ZWNhYWY2ZTE0ZmUzZjIwODJhODU1ZWZmMWJiZDc5YWU5Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBibHVlIGludG8gd2hpdGUgKEEtPkIsIG1vZCBBLCBBIHVudHJhY2tlZCknIFwKKycKKwlnaXQgY2hlY2tvdXQgLWIgd2hpdGUtYmx1ZSB3aGl0ZSAmJgorCWVjaG8gZGlydHkgPkEgJiYKKwlnaXQgbWVyZ2UgYmx1ZSAmJgorCWdpdCB3cml0ZS10cmVlICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgQSAmJgorCWVjaG8gZGlydHkgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBBICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgQiAmJgorCXRlc3RfcGF0aF9pc19maWxlIE4gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBNCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzNS1tZXJnZS1kaXItdG8tc3ltbGluay5zaCBiL3QvdDYwMzUtbWVyZ2UtZGlyLXRvLXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTMyNGVhNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwMzUtbWVyZ2UtZGlyLXRvLXN5bWxpbmsuc2gKQEAgLTAsMCArMSwxNzIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnaW5nIHdoZW4gYSBkaXJlY3Rvcnkgd2FzIHJlcGxhY2VkIHdpdGggYSBzeW1saW5rJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBhIGNvbW1pdCB3aGVyZSBkaXIgYS9iIGNoYW5nZWQgdG8gc3ltbGluaycgJworCW1rZGlyIC1wIGEvYi9jIGEvYi0yL2MgJiYKKwk+IGEvYi9jL2QgJiYKKwk+IGEvYi0yL2MvZCAmJgorCT4gYS94ICYmCisJZ2l0IGFkZCAtQSAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCB0YWcgc3RhcnQgJiYKKwlybSAtcmYgYS9iICYmCisJZ2l0IGFkZCAtQSAmJgorCXRlc3RfbG5fc19hZGQgYi0yIGEvYiAmJgorCWdpdCBjb21taXQgLW0gImRpciB0byBzeW1saW5rIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBkb2VzIG5vdCBjbG9iYmVyIHVudHJhY2tlZCBzeW1saW5rJyAnCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IHJtIC0tY2FjaGVkIGEvYiAmJgorCWdpdCBjb21taXQgLW0gInVudHJhY2tlZCBzeW1saW5rIHJlbWFpbnMiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IHN0YXJ0XjAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYS9iLTIvYy9kIGlzIGtlcHQgd2hlbiBjbG9iYmVyaW5nIHN5bWxpbmsgYicgJworCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBybSAtLWNhY2hlZCBhL2IgJiYKKwlnaXQgY29tbWl0IC1tICJ1bnRyYWNrZWQgc3ltbGluayByZW1haW5zIiAmJgorCWdpdCBjaGVja291dCAtZiBzdGFydF4wICYmCisJdGVzdCAtZiBhL2ItMi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgc2hvdWxkIG5vdCBoYXZlIGRlbGV0ZWQgYS9iLTIvYy9kJyAnCisJZ2l0IGNoZWNrb3V0IEhFQUReMCAmJgorCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJIGdpdCBjaGVja291dCBzdGFydF4wICYmCisJIHRlc3QgLWYgYS9iLTIvYy9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciBtZXJnZSB0ZXN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3QgLWYgYS9iLTIvYy9kICYmCisJZWNobyB4ID4gYS94ICYmCisJZ2l0IGFkZCBhL3ggJiYKKwlnaXQgY29tbWl0IC1tIHggJiYKKwlnaXQgdGFnIGJhc2VsaW5lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hhbmRsZSBEL0YgY29uZmxpY3QsIGRvIG5vdCBsb3NlIGEvYi0yL2MvZCBpbiBtZXJnZSAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwlnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBtYXN0ZXIgJiYKKwl0ZXN0IC1mIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhL2Igd2FzIHJlc29sdmVkIGFzIHN5bWxpbmsnICcKKwl0ZXN0IC1oIGEvYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIYW5kbGUgRC9GIGNvbmZsaWN0LCBkbyBub3QgbG9zZSBhL2ItMi9jL2QgaW4gbWVyZ2UgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIG1hc3RlciAmJgorCXRlc3QgLWYgYS9iLTIvYy9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2EvYiB3YXMgcmVzb2x2ZWQgYXMgc3ltbGluaycgJworCXRlc3QgLWggYS9iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hhbmRsZSBGL0QgY29uZmxpY3QsIGRvIG5vdCBsb3NlIGEvYi0yL2MvZCBpbiBtZXJnZSAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisJZ2l0IG1lcmdlIC1zIHJlc29sdmUgYmFzZWxpbmVeMCAmJgorCXRlc3QgLWYgYS9iLTIvYy9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2EvYiB3YXMgcmVzb2x2ZWQgYXMgc3ltbGluaycgJworCXRlc3QgLWggYS9iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0hhbmRsZSBGL0QgY29uZmxpY3QsIGRvIG5vdCBsb3NlIGEvYi0yL2MvZCBpbiBtZXJnZSAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIGJhc2VsaW5lXjAgJiYKKwl0ZXN0IC1mIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdhL2Igd2FzIHJlc29sdmVkIGFzIHN5bWxpbmsnICcKKwl0ZXN0IC1oIGEvYgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdkbyBub3QgbG9zZSB1bnRyYWNrZWQgaW4gbWVyZ2UgKHJlc29sdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBiYXNlbGluZV4wICYmCisJPmEvYi9jL2UgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBtYXN0ZXIgJiYKKwl0ZXN0IC1mIGEvYi9jL2UgJiYKKwl0ZXN0IC1mIGEvYi0yL2MvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgbG9zZSB1bnRyYWNrZWQgaW4gbWVyZ2UgKHJlY3Vyc2l2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwk+YS9iL2MvZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgbWFzdGVyICYmCisJdGVzdCAtZiBhL2IvYy9lICYmCisJdGVzdCAtZiBhL2ItMi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGxvc2UgbW9kaWZpY2F0aW9ucyBpbiBtZXJnZSAocmVzb2x2ZSknICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGJhc2VsaW5lXjAgJiYKKwllY2hvIG1vcmUgY29udGVudCA+PmEvYi9jL2QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVzb2x2ZSBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGxvc2UgbW9kaWZpY2F0aW9ucyBpbiBtZXJnZSAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgorCWVjaG8gbW9yZSBjb250ZW50ID4+YS9iL2MvZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgbWVyZ2Ugd2hlcmUgZGlyIGEvYi0yIGNoYW5nZWQgdG8gc3ltbGluaycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc3RhcnReMCAmJgorCXJtIC1yZiBhL2ItMiAmJgorCWdpdCBhZGQgLUEgJiYKKwl0ZXN0X2xuX3NfYWRkIGIgYS9iLTIgJiYKKwlnaXQgY29tbWl0IC1tICJkaXIgYS9iLTIgdG8gc3ltbGluayIgJiYKKwlnaXQgdGFnIHRlc3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHNob3VsZCBub3QgaGF2ZSBEL0YgY29uZmxpY3RzIChyZXNvbHZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgorCWdpdCBtZXJnZSAtcyByZXNvbHZlIHRlc3QyICYmCisJdGVzdCAtZiBhL2IvYy9kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2EvYi0yIHdhcyByZXNvbHZlZCBhcyBzeW1saW5rJyAnCisJdGVzdCAtaCBhL2ItMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBzaG91bGQgbm90IGhhdmUgRC9GIGNvbmZsaWN0cyAocmVjdXJzaXZlKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgYmFzZWxpbmVeMCAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgdGVzdDIgJiYKKwl0ZXN0IC1mIGEvYi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYS9iLTIgd2FzIHJlc29sdmVkIGFzIHN5bWxpbmsnICcKKwl0ZXN0IC1oIGEvYi0yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHNob3VsZCBub3QgaGF2ZSBGL0QgY29uZmxpY3RzIChyZWN1cnNpdmUpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAtYiBmb28gdGVzdDIgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIGJhc2VsaW5lXjAgJiYKKwl0ZXN0IC1mIGEvYi9jL2QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnYS9iLTIgd2FzIHJlc29sdmVkIGFzIHN5bWxpbmsnICcKKwl0ZXN0IC1oIGEvYi0yCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzNi1yZWN1cnNpdmUtY29ybmVyLWNhc2VzLnNoIGIvdC90NjAzNi1yZWN1cnNpdmUtY29ybmVyLWNhc2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlkNjYyMWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDM2LXJlY3Vyc2l2ZS1jb3JuZXItY2FzZXMuc2gKQEAgLTAsMCArMSw3NzEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZWN1cnNpdmUgbWVyZ2UgY29ybmVyIGNhc2VzIGludm9sdmluZyBjcmlzcy1jcm9zcyBtZXJnZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitnZXRfY2xlYW5fY2hlY2tvdXQgKCkgeworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlnaXQgY2hlY2tvdXQgIiQxIgorfQorCisjCisjICBMMSAgTDIKKyMgICBvLS0tbworIyAgLyBcIC8gXAorIyBvICAgWCAgID8KKyMgIFwgLyBcIC8KKyMgICBvLS0tbworIyAgUjEgIFIyCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhc2ljIGNyaXNzLWNyb3NzICsgcmVuYW1lIHdpdGggbm8gbW9kaWZpY2F0aW9ucycgJworCXRlbj0iMCAxIDIgMyA0IDUgNiA3IDggOSIgJiYKKwlmb3IgaSBpbiAkdGVuCisJZG8KKwkJZWNobyBsaW5lICRpIGluIGEgc2FtcGxlIGZpbGUKKwlkb25lID5vbmUgJiYKKwlmb3IgaSBpbiAkdGVuCisJZG8KKwkJZWNobyBsaW5lICRpIGluIGFub3RoZXIgc2FtcGxlIGZpbGUKKwlkb25lID50d28gJiYKKwlnaXQgYWRkIG9uZSB0d28gJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisKKwlnaXQgYnJhbmNoIEwxICYmCisJZ2l0IGNoZWNrb3V0IC1iIFIxICYmCisJZ2l0IG12IG9uZSB0aHJlZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIFIxICYmCisKKwlnaXQgY2hlY2tvdXQgTDEgJiYKKwlnaXQgbXYgdHdvIHRocmVlICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gTDEgJiYKKworCWdpdCBjaGVja291dCBMMV4wICYmCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtcyBvdXJzIFIxICYmCisJZ2l0IHRhZyBMMiAmJgorCisJZ2l0IGNoZWNrb3V0IFIxXjAgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IG1lcmdlIC1zIG91cnMgTDEgJiYKKwlnaXQgdGFnIFIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHNpbXBsZSByZW5hbWUrY3Jpc3MtY3Jvc3Mgd2l0aCBubyBtb2RpZmljYXRpb25zJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBMMl4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIFIyXjAgJiYKKworCXRlc3QgMiA9ICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAyID0gJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgPSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6dGhyZWUpID0gJChnaXQgcmV2LXBhcnNlIEwyOnRocmVlKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDozOnRocmVlKSA9ICQoZ2l0IHJldi1wYXJzZSBSMjp0aHJlZSkgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEwyOnRocmVlKSA9ICQoZ2l0IGhhc2gtb2JqZWN0IHRocmVlfkhFQUQpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgUjI6dGhyZWUpID0gJChnaXQgaGFzaC1vYmplY3QgdGhyZWV+UjJeMCkKKycKKworIworIyBTYW1lIGFzIGJlZm9yZSwgYnV0IG1vZGlmeSBMMSBzbGlnaHRseToKKyMKKyMgIEwxbSBMMgorIyAgIG8tLS1vCisjICAvIFwgLyBcCisjIG8gICBYICAgPworIyAgXCAvIFwgLworIyAgIG8tLS1vCisjICBSMSAgUjIKKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY3Jpc3MtY3Jvc3MgKyByZW5hbWUgbWVyZ2VzIHdpdGggYmFzaWMgbW9kaWZpY2F0aW9uJyAnCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJdGVuPSIwIDEgMiAzIDQgNSA2IDcgOCA5IiAmJgorCWZvciBpIGluICR0ZW4KKwlkbworCQllY2hvIGxpbmUgJGkgaW4gYSBzYW1wbGUgZmlsZQorCWRvbmUgPm9uZSAmJgorCWZvciBpIGluICR0ZW4KKwlkbworCQllY2hvIGxpbmUgJGkgaW4gYW5vdGhlciBzYW1wbGUgZmlsZQorCWRvbmUgPnR3byAmJgorCWdpdCBhZGQgb25lIHR3byAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCWdpdCBicmFuY2ggTDEgJiYKKwlnaXQgY2hlY2tvdXQgLWIgUjEgJiYKKwlnaXQgbXYgb25lIHRocmVlICYmCisJZWNobyBtb3JlID4+dHdvICYmCisJZ2l0IGFkZCB0d28gJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBSMSAmJgorCisJZ2l0IGNoZWNrb3V0IEwxICYmCisJZ2l0IG12IHR3byB0aHJlZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEwxICYmCisKKwlnaXQgY2hlY2tvdXQgTDFeMCAmJgorCXRlc3RfdGljayAmJiBnaXQgbWVyZ2UgLXMgb3VycyBSMSAmJgorCWdpdCB0YWcgTDIgJiYKKworCWdpdCBjaGVja291dCBSMV4wICYmCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtcyBvdXJzIEwxICYmCisJZ2l0IHRhZyBSMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjcmlzcy1jcm9zcyArIHJlbmFtZSBtZXJnZXMgd2l0aCBiYXNpYyBtb2RpZmljYXRpb24nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEwyXjAgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgUjJeMCAmJgorCisJdGVzdCAyID0gJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgPSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMiA9ICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6Mjp0aHJlZSkgPSAkKGdpdCByZXYtcGFyc2UgTDI6dGhyZWUpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjM6dGhyZWUpID0gJChnaXQgcmV2LXBhcnNlIFIyOnRocmVlKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgTDI6dGhyZWUpID0gJChnaXQgaGFzaC1vYmplY3QgdGhyZWV+SEVBRCkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBSMjp0aHJlZSkgPSAkKGdpdCBoYXNoLW9iamVjdCB0aHJlZX5SMl4wKQorJworCisjCisjIEZvciB0aGUgbmV4dCB0ZXN0LCB3ZSBzdGFydCB3aXRoIHRocmVlIGNvbW1pdHMgaW4gdHdvIGxpbmVzIG9mIGRldmVsb3BtZW50CisjIHdoaWNoIHNldHVwIGEgcmVuYW1lL2FkZCBjb25mbGljdDoKKyMgICBDb21taXQgQTogRmlsZSAnYScgZXhpc3RzCisjICAgQ29tbWl0IEI6IFJlbmFtZSAnYScgLT4gJ25ld19hJworIyAgIENvbW1pdCBDOiBNb2RpZnkgJ2EnLCBjcmVhdGUgZGlmZmVyZW50ICduZXdfYScKKyMgTGF0ZXIsIHR3byBkaWZmZXJlbnQgcGVvcGxlIG1lcmdlIGFuZCByZXNvbHZlIGRpZmZlcmVudGx5OgorIyAgIENvbW1pdCBEOiBNZXJnZSBCICYgQywgaWdub3Jpbmcgc2VwYXJhdGVseSBjcmVhdGVkICduZXdfYScKKyMgICBDb21taXQgRTogTWVyZ2UgQiAmIEMgbWFraW5nIHVzZSBvZiBzb21lIHBpZWNlIG9mIHNlY29uZGFyeSAnbmV3X2EnCisjIEZpbmFsbHksIHNvbWVvbmUgZ29lcyB0byBtZXJnZSBEICYgRS4gIERvZXMgZ2l0IGRldGVjdCB0aGUgY29uZmxpY3Q/CisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUKKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZGlmZmVyZW50bHkgaGFuZGxlZCBtZXJnZXMgb2YgcmVuYW1lL2FkZCBjb25mbGljdCcgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCXByaW50ZiAiMFxuMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuIiA+YSAmJgorCWdpdCBhZGQgYSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEEgJiYKKworCWdpdCBicmFuY2ggQiAmJgorCWdpdCBjaGVja291dCAtYiBDICYmCisJZWNobyAxMCA+PmEgJiYKKwllY2hvICJvdGhlciBjb250ZW50IiA+Pm5ld19hICYmCisJZ2l0IGFkZCBhIG5ld19hICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gQyAmJgorCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwlnaXQgbXYgYSBuZXdfYSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEIgJiYKKworCWdpdCBjaGVja291dCBCXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQyAmJgorCWdpdCBjbGVhbiAtZiAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEQgJiYKKwlnaXQgdGFnIEQgJiYKKworCWdpdCBjaGVja291dCBDXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQiAmJgorCXJtIG5ld19hfkhFQUQgbmV3X2EgJiYKKwlwcmludGYgIkluY29ycmVjdGx5IG1lcmdlZCBjb250ZW50IiA+Pm5ld19hICYmCisJZ2l0IGFkZCAtdSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIEUgJiYKKwlnaXQgdGFnIEUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRldGVjdHMgZGlmZmVyZW50bHkgaGFuZGxlZCBtZXJnZXMgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEReMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFXjAgJiYKKworCXRlc3QgMyA9ICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAzID0gJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgPSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6bmV3X2EpID0gJChnaXQgcmV2LXBhcnNlIEQ6bmV3X2EpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjM6bmV3X2EpID0gJChnaXQgcmV2LXBhcnNlIEU6bmV3X2EpICYmCisKKwlnaXQgY2F0LWZpbGUgLXAgQjpuZXdfYSA+Pm1lcmdlZCAmJgorCWdpdCBjYXQtZmlsZSAtcCBDOm5ld19hID4+bWVyZ2UtbWUgJiYKKwk+ZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtZmlsZSBcCisJCS1MICJUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIiIFwKKwkJLUwgIiIgXAorCQktTCAiVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxIiBcCisJCW1lcmdlZCBlbXB0eSBtZXJnZS1tZSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDoxOm5ld19hKSA9ICQoZ2l0IGhhc2gtb2JqZWN0IG1lcmdlZCkKKycKKworIworIyBjcmlzcy1jcm9zcyArIG1vZGlmeS9kZWxldGU6CisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUKKyMKKyMgICBDb21taXQgQTogZmlsZSB3aXRoIGNvbnRlbnRzICdBXG4nCisjICAgQ29tbWl0IEI6IGZpbGUgd2l0aCBjb250ZW50cyAnQlxuJworIyAgIENvbW1pdCBDOiBmaWxlIG5vdCBwcmVzZW50CisjICAgQ29tbWl0IEQ6IGZpbGUgd2l0aCBjb250ZW50cyAnQlxuJworIyAgIENvbW1pdCBFOiBmaWxlIG5vdCBwcmVzZW50CisjCisjIE1lcmdpbmcgY29tbWl0cyBEICYgRSBzaG91bGQgcmVzdWx0IGluIG1vZGlmeS9kZWxldGUgY29uZmxpY3QuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNyaXNzLWNyb3NzICsgbW9kaWZ5L2RlbGV0ZSByZXNvbHZlZCBkaWZmZXJlbnRseScgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCWVjaG8gQSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCisJZ2l0IGJyYW5jaCBCICYmCisJZ2l0IGNoZWNrb3V0IC1iIEMgJiYKKwlnaXQgcm0gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQyAmJgorCisJZ2l0IGNoZWNrb3V0IEIgJiYKKwllY2hvIEIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEIgJiYKKworCWdpdCBjaGVja291dCBCXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQyAmJgorCWVjaG8gQiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gRCAmJgorCWdpdCB0YWcgRCAmJgorCisJZ2l0IGNoZWNrb3V0IENeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBCICYmCisJZ2l0IHJtIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEUgJiYKKwlnaXQgdGFnIEUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRldGVjdHMgY29uZmxpY3QgbWVyZ2luZyBjcmlzcy1jcm9zcyttb2RpZnkvZGVsZXRlJyAnCisJZ2l0IGNoZWNrb3V0IEReMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFXjAgJiYKKworCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MTpmaWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXI6ZmlsZSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MjpmaWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBCOmZpbGUpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBkZXRlY3RzIGNvbmZsaWN0IG1lcmdpbmcgY3Jpc3MtY3Jvc3MrbW9kaWZ5L2RlbGV0ZSwgcmV2ZXJzZSBkaXJlY3Rpb24nICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IEVeMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBEXjAgJiYKKworCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MTpmaWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBtYXN0ZXI6ZmlsZSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MzpmaWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBCOmZpbGUpCisnCisKKyMKKyMgY3Jpc3MtY3Jvc3MgKyBtb2RpZnkvbW9kaWZ5IHdpdGggdmVyeSBjb250cml2ZWQgZmlsZSBjb250ZW50czoKKyMKKyMgICAgICBCICAgRAorIyAgICAgIG8tLS1vCisjICAgICAvIFwgLyBcCisjICBBIG8gICBYICAgPyBGCisjICAgICBcIC8gXCAvCisjICAgICAgby0tLW8KKyMgICAgICBDICAgRQorIworIyAgIENvbW1pdCBBOiBmaWxlIHdpdGggY29udGVudHMgJ0FcbicKKyMgICBDb21taXQgQjogZmlsZSB3aXRoIGNvbnRlbnRzICdCXG4nCisjICAgQ29tbWl0IEM6IGZpbGUgd2l0aCBjb250ZW50cyAnQ1xuJworIyAgIENvbW1pdCBEOiBmaWxlIHdpdGggY29udGVudHMgJ0RcbicKKyMgICBDb21taXQgRTogZmlsZSB3aXRoIGNvbnRlbnRzOgorIyAgICAgIDw8PDw8PDwgVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxCisjICAgICAgQworIyAgICAgID09PT09PT0KKyMgICAgICBCCisjICAgICAgPj4+Pj4+PiBUZW1wb3JhcnkgbWVyZ2UgYnJhbmNoIDIKKyMKKyMgTm93LCB3aGVuIHdlIG1lcmdlIGNvbW1pdHMgRCAmIEUsIGRvZXMgZ2l0IGRldGVjdCB0aGUgY29uZmxpY3Q/CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpZmZlcmVudGx5IGhhbmRsZWQgbWVyZ2VzIG9mIGNvbnRlbnQgY29uZmxpY3QnICcKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwllY2hvIEEgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKworCWdpdCBicmFuY2ggQiAmJgorCWdpdCBjaGVja291dCAtYiBDICYmCisJZWNobyBDID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwlnaXQgY2hlY2tvdXQgQiAmJgorCWVjaG8gQiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBDICYmCisJZWNobyBEID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBEICYmCisJZ2l0IHRhZyBEICYmCisKKwlnaXQgY2hlY2tvdXQgQ14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEIgJiYKKwljYXQgPDxFT0YgPmZpbGUgJiYKKzw8PDw8PDwgVGVtcG9yYXJ5IG1lcmdlIGJyYW5jaCAxCitDCis9PT09PT09CitCCis+Pj4+Pj4+IFRlbXBvcmFyeSBtZXJnZSBicmFuY2ggMgorRU9GCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBFICYmCisJZ2l0IHRhZyBFCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdCBkZXRlY3RzIGNvbmZsaWN0IHcvIGNyaXNzLWNyb3NzK2NvbnRyaXZlZCByZXNvbHV0aW9uJyAnCisJZ2l0IGNoZWNrb3V0IEReMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFXjAgJiYKKworCXRlc3QgMyAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDMgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6ZmlsZSkgPSAkKGdpdCByZXYtcGFyc2UgRDpmaWxlKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDozOmZpbGUpID0gJChnaXQgcmV2LXBhcnNlIEU6ZmlsZSkKKycKKworIworIyBjcmlzcy1jcm9zcyArIGQvZiBjb25mbGljdCB2aWEgYWRkL2FkZDoKKyMgICBDb21taXQgQTogTmVpdGhlciBmaWxlICdhJyBub3IgZGlyZWN0b3J5ICdhLycgZXhpc3RzLgorIyAgIENvbW1pdCBCOiBJbnRyb2R1Y2UgJ2EnCisjICAgQ29tbWl0IEM6IEludHJvZHVjZSAnYS9maWxlJworIyAgIENvbW1pdCBEOiBNZXJnZSBCICYgQywga2VlcGluZyAnYScgYW5kIGRlbGV0aW5nICdhLycKKyMKKyMgVHdvIGRpZmZlcmVudCBsYXRlciBjYXNlczoKKyMgICBDb21taXQgRTE6IE1lcmdlIEIgJiBDLCBkZWxldGluZyAnYScgYnV0IGtlZXBpbmcgJ2EvZmlsZScKKyMgICBDb21taXQgRTI6IE1lcmdlIEIgJiBDLCBkZWxldGluZyAnYScgYnV0IGtlZXBpbmcgYSBzbGlnaHRseSBtb2RpZmllZCAnYS9maWxlJworIworIyAgICAgIEIgICBECisjICAgICAgby0tLW8KKyMgICAgIC8gXCAvIFwKKyMgIEEgbyAgIFggICA/IEYKKyMgICAgIFwgLyBcIC8KKyMgICAgICBvLS0tbworIyAgICAgIEMgICBFMSBvciBFMgorIworIyBNZXJnaW5nIEQgJiBFMSByZXF1aXJlcyB3ZSBmaXJzdCBjcmVhdGUgYSB2aXJ0dWFsIG1lcmdlIGJhc2UgWCBmcm9tCisjIG1lcmdpbmcgQSAmIEIgaW4gbWVtb3J5LiAgTm93LCBpZiBYIGNvdWxkIGtlZXAgYm90aCAnYScgYW5kICdhL2ZpbGUnIGluCisjIHRoZSBpbmRleCwgdGhlbiB0aGUgbWVyZ2Ugb2YgRCAmIEUxIGNvdWxkIGJlIHJlc29sdmVkIGNsZWFubHkgd2l0aCBib3RoCisjICdhJyBhbmQgJ2EvZmlsZScgcmVtb3ZlZC4gIFNpbmNlIGdpdCBkb2VzIG5vdCBjdXJyZW50bHkgYWxsb3cgY3JlYXRpbmcKKyMgc3VjaCBhIHRyZWUsIHRoZSBiZXN0IHdlIGNhbiBkbyBpcyBoYXZlIFggY29udGFpbiBib3RoICdhfjx1bmlxdWU+JyBhbmQKKyMgJ2EvZmlsZScgcmVzdWx0aW5nIGluIHRoZSBtZXJnZSBvZiBEIGFuZCBFMSBoYXZpbmcgYSByZW5hbWUvZGVsZXRlCisjIGNvbmZsaWN0IGZvciAnYScuICAoQWx0aG91Z2ggdGhpcyBtZXJnZSBhcHBlYXJzIHRvIGJlIHVuc29sdmFibGUgd2l0aCBnaXQKKyMgY3VycmVudGx5LCBnaXQgY291bGQgZG8gYSBsb3QgYmV0dGVyIHRoYW4gaXQgY3VycmVudGx5IGRvZXMgd2l0aCB0aGVzZQorIyBkL2YgY29uZmxpY3RzLCB3aGljaCBpcyB0aGUgcHVycG9zZSBvZiB0aGlzIHRlc3QuKQorIworIyBNZXJnZSBvZiBEICYgRTIgaGFzIHNpbWlsYXIgaXNzdWVzIGZvciBwYXRoICdhJywgYnV0IHNob3VsZCBhbHdheXMgcmVzdWx0CisjIGluIGEgbW9kaWZ5L2RlbGV0ZSBjb25mbGljdCBmb3IgcGF0aCAnYS9maWxlJy4KKyMKKyMgV2UgcnVuIGVhY2ggbWVyZ2UgaW4gYm90aCBkaXJlY3Rpb25zLCB0byBjaGVjayBmb3IgZGlyZWN0aW9uYWwgaXNzdWVzCisjIHdpdGggRC9GIGNvbmZsaWN0IGhhbmRsaW5nLgorIworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkaWZmZXJlbnRseSBoYW5kbGVkIG1lcmdlcyBvZiBkaXJlY3RvcnkvZmlsZSBjb25mbGljdCcgJworCWdpdCBybSAtcmYgLiAmJgorCWdpdCBjbGVhbiAtZmRxeCAmJgorCXJtIC1yZiAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKworCT5pZ25vcmUtbWUgJiYKKwlnaXQgYWRkIGlnbm9yZS1tZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCWdpdCB0YWcgQSAmJgorCisJZ2l0IGJyYW5jaCBCICYmCisJZ2l0IGNoZWNrb3V0IC1iIEMgJiYKKwlta2RpciBhICYmCisJZWNobyAxMCA+YS9maWxlICYmCisJZ2l0IGFkZCBhL2ZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEMgJiYKKworCWdpdCBjaGVja291dCBCICYmCisJZWNobyA1ID5hICYmCisJZ2l0IGFkZCBhICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwlnaXQgY2hlY2tvdXQgQl4wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEMgJiYKKwlnaXQgY2xlYW4gLWYgJiYKKwlybSAtcmYgYS8gJiYKKwllY2hvIDUgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEQgJiYKKwlnaXQgdGFnIEQgJiYKKworCWdpdCBjaGVja291dCBDXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQiAmJgorCWdpdCBjbGVhbiAtZiAmJgorCWdpdCBybSAtLWNhY2hlZCBhICYmCisJZWNobyAxMCA+YS9maWxlICYmCisJZ2l0IGFkZCBhL2ZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEUxICYmCisJZ2l0IHRhZyBFMSAmJgorCisJZ2l0IGNoZWNrb3V0IENeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBCICYmCisJZ2l0IGNsZWFuIC1mICYmCisJZ2l0IHJtIC0tY2FjaGVkIGEgJiYKKwlwcmludGYgIjEwXG4xMVxuIiA+YS9maWxlICYmCisJZ2l0IGFkZCBhL2ZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEUyICYmCisJZ2l0IHRhZyBFMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvZiBEICYgRTEgZmFpbHMgYnV0IGhhcyBhcHByb3ByaWF0ZSBjb250ZW50cycgJworCWdldF9jbGVhbl9jaGVja291dCBEXjAgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRTFeMCAmJgorCisJdGVzdCAyIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MDppZ25vcmUtbWUpID0gJChnaXQgcmV2LXBhcnNlIEE6aWdub3JlLW1lKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDoyOmEpID0gJChnaXQgcmV2LXBhcnNlIEI6YSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb2YgRTEgJiBEIGZhaWxzIGJ1dCBoYXMgYXBwcm9wcmlhdGUgY29udGVudHMnICcKKwlnZXRfY2xlYW5fY2hlY2tvdXQgRTFeMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBEXjAgJiYKKworCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDEgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjA6aWdub3JlLW1lKSA9ICQoZ2l0IHJldi1wYXJzZSBBOmlnbm9yZS1tZSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MzphKSA9ICQoZ2l0IHJldi1wYXJzZSBCOmEpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIG9mIEQgJiBFMiBmYWlscyBidXQgaGFzIGFwcHJvcHJpYXRlIGNvbnRlbnRzJyAnCisJZ2V0X2NsZWFuX2NoZWNrb3V0IEReMCAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFMl4wICYmCisKKwl0ZXN0IDQgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAzIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIDoyOmEpID0gJChnaXQgcmV2LXBhcnNlIEI6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MzphL2ZpbGUpID0gJChnaXQgcmV2LXBhcnNlIEUyOmEvZmlsZSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MTphL2ZpbGUpID0gJChnaXQgcmV2LXBhcnNlIEM6YS9maWxlKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDowOmlnbm9yZS1tZSkgPSAkKGdpdCByZXYtcGFyc2UgQTppZ25vcmUtbWUpICYmCisKKwl0ZXN0IC1mIGF+SEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBvZiBFMiAmIEQgZmFpbHMgYnV0IGhhcyBhcHByb3ByaWF0ZSBjb250ZW50cycgJworCWdldF9jbGVhbl9jaGVja291dCBFMl4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEReMCAmJgorCisJdGVzdCA0IC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMyAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDEgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MzphKSA9ICQoZ2l0IHJldi1wYXJzZSBCOmEpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6YS9maWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBFMjphL2ZpbGUpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjE6YS9maWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBDOmEvZmlsZSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MDppZ25vcmUtbWUpID0gJChnaXQgcmV2LXBhcnNlIEE6aWdub3JlLW1lKSAmJgorCisJdGVzdCAtZiBhfkReMAorJworCisjCisjIGNyaXNzLWNyb3NzIHdpdGggcmVuYW1lL3JlbmFtZSgxdG8yKS9tb2RpZnkgZm9sbG93ZWQgYnkKKyMgcmVuYW1lL3JlbmFtZSgydG8xKS9tb2RpZnk6CisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUKKyMKKyMgICBDb21taXQgQTogbmV3IGZpbGU6IGEKKyMgICBDb21taXQgQjogcmVuYW1lIGEtPmIsIG1vZGlmeWluZyBieSBhZGRpbmcgYSBsaW5lCisjICAgQ29tbWl0IEM6IHJlbmFtZSBhLT5jCisjICAgQ29tbWl0IEQ6IG1lcmdlIEImQywgcmVzb2x2aW5nIGNvbmZsaWN0IGJ5IGtlZXBpbmcgY29udGVudHMgaW4gbmV3bmFtZQorIyAgIENvbW1pdCBFOiBtZXJnZSBCJkMsIHJlc29sdmluZyBjb25mbGljdCBzaW1pbGFyIHRvIEQgYnV0IGFkZGluZyBhbm90aGVyIGxpbmUKKyMKKyMgVGhlcmUgaXMgYSBjb25mbGljdCBtZXJnaW5nIEIgJiBDLCBidXQgb25lIG9mIGZpbGVuYW1lIG5vdCBvZiBmaWxlCisjIGNvbnRlbnQuICBXaG9ldmVyIGNyZWF0ZWQgRCBhbmQgRSBjaG9zZSBzcGVjaWZpYyByZXNvbHV0aW9ucyBmb3IgdGhhdAorIyBjb25mbGljdCByZXNvbHV0aW9uLiAgTm93LCBzaW5jZTogKDEpIHRoZXJlIGlzIG5vIGNvbnRlbnQgY29uZmxpY3QKKyMgbWVyZ2luZyBCICYgQywgKDIpIEQgZG9lcyBub3QgbW9kaWZ5IHRoYXQgbWVyZ2VkIGNvbnRlbnQgZnVydGhlciwgYW5kICgzKQorIyBib3RoIEQgJiBFIHJlc29sdmUgdGhlIG5hbWUgY29uZmxpY3QgaW4gdGhlIHNhbWUgd2F5LCB0aGUgbW9kaWZpY2F0aW9uIHRvCisjIG5ld25hbWUgaW4gRSBzaG91bGQgbm90IGNhdXNlIGFueSBjb25mbGljdHMgd2hlbiBpdCBpcyBtZXJnZWQgd2l0aCBELgorIyAoTm90ZSB0aGF0IHRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBoYXZpbmcgdGhlIHZpcnR1YWwgbWVyZ2UgYmFzZSBoYXZlCisjIHRoZSBtZXJnZWQgY29udGVudHMgb2YgYiBhbmQgYyBzdG9yZWQgaW4gYSBmaWxlIG5hbWVkIGEsIHdoaWNoIHNlZW1zIGxpa2UKKyMgdGhlIG1vc3QgbG9naWNhbCBjaG9pY2UgYW55d2F5LikKKyMKKyMgQ29tbWVudCBmcm9tIEp1bmlvOiBJIGRvIG5vdCBuZWNlc3NhcmlseSBhZ3JlZSB3aXRoIHRoZSBjaG9pY2UgImEiLCBidXQKKyMgaXQgZmVlbHMgc291bmQgdG8gc2F5ICJCIGFuZCBDIGRvIG5vdCBhZ3JlZSB3aGF0IHRoZSBmaW5hbCBwYXRobmFtZQorIyBzaG91bGQgYmUsIGJ1dCB3ZSBrbm93IHRoaXMgY29udGVudCB3YXMgZGVyaXZlZCBmcm9tIHRoZSBjb21tb24gQTphIHNvIHdlCisjIHVzZSBvbmUgcGF0aCB3aG9zZSBuYW1lIGlzIGFyYml0cmFyeSBpbiB0aGUgdmlydHVhbCBtZXJnZSBiYXNlIFggYmV0d2VlbgorIyBEIGFuZCBFIiBhbmQgdGhlbiBmdXJ0aGVyIGxldCB0aGUgcmVuYW1lIGRldGVjdGlvbiB0byBub3RpY2UgdGhhdCB0aGF0CisjIGFyYml0cmFyeSBwYXRoIGdldHMgcmVuYW1lZCBiZXR3ZWVuIFgtRCB0byAibmV3bmFtZSIgYW5kIFgtRSBhbHNvIHRvCisjICJuZXduYW1lIiB0byByZXNvbHZlIGl0IGFzIGJvdGggc2lkZXMgcmVuYW1pbmcgaXQgdG8gdGhlIHNhbWUgbmV3CisjIG5hbWUuIEl0IGlzIGFraW4gdG8gd2hhdCB3ZSBkbyBhdCB0aGUgY29udGVudCBsZXZlbCwgaS5lLiAiQiBhbmQgQyBkbyBub3QKKyMgYWdyZWUgd2hhdCB0aGUgZmluYWwgY29udGVudHMgc2hvdWxkIGJlLCBzbyB3ZSBsZWF2ZSB0aGUgY29uZmxpY3QgbWFya2VyCisjIGJ1dCB0aGF0IG1heSBjYW5jZWwgb3V0IGF0IHRoZSBmaW5hbCBtZXJnZSBzdGFnZSIuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbmFtZS9yZW5hbWUoMXRvMikvbW9kaWZ5IGZvbGxvd2VkIGJ5IHdoYXQgbG9va3MgbGlrZSByZW5hbWUvcmVuYW1lKDJ0bzEpL21vZGlmeScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbiIgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKwlnaXQgdGFnIEEgJiYKKworCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwlnaXQgbXYgYSBiICYmCisJZWNobyA3ID4+YiAmJgorCWdpdCBhZGQgLXUgJiYKKwlnaXQgY29tbWl0IC1tIEIgJiYKKworCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwlnaXQgbXYgYSBjICYmCisJZ2l0IGNvbW1pdCAtbSBDICYmCisKKwlnaXQgY2hlY2tvdXQgLXEgQl4wICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IC1zIG91cnMgQ14wICYmCisJZ2l0IG12IGIgbmV3bmFtZSAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIGNvbW1pdCBDXjAgaW50byBIRUFEIiAmJgorCWdpdCB0YWcgRCAmJgorCisJZ2l0IGNoZWNrb3V0IC1xIENeMCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyBvdXJzIEJeMCAmJgorCWdpdCBtdiBjIG5ld25hbWUgJiYKKwlwcmludGYgIjdcbjhcbiIgPj5uZXduYW1lICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIGNvbW1pdCBCXjAgaW50byBIRUFEIiAmJgorCWdpdCB0YWcgRQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdoYW5kbGUgcmVuYW1lL3JlbmFtZSgxdG8yKS9tb2RpZnkgZm9sbG93ZWQgYnkgd2hhdCBsb29rcyBsaWtlIHJlbmFtZS9yZW5hbWUoMnRvMSkvbW9kaWZ5JyAnCisJZ2l0IGNoZWNrb3V0IEReMCAmJgorCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBFXjAgJiYKKworCXRlc3QgMSAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRDpuZXduYW1lKSA9ICQoZ2l0IHJldi1wYXJzZSBFOm5ld25hbWUpCisnCisKKyMKKyMgY3Jpc3MtY3Jvc3Mgd2l0aCByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZC1zb3VyY2UgKyByZXNvbHZhYmxlIG1vZGlmeS9tb2RpZnk6CisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUKKyMKKyMgICBDb21taXQgQTogbmV3IGZpbGU6IGEKKyMgICBDb21taXQgQjogcmVuYW1lIGEtPmIKKyMgICBDb21taXQgQzogcmVuYW1lIGEtPmMsIGFkZCBkaWZmZXJlbnQgYQorIyAgIENvbW1pdCBEOiBtZXJnZSBCJkMsIGtlZXBpbmcgYiZjIGFuZCAobmV3KSBhIG1vZGlmaWVkIGF0IGJlZ2lubmluZworIyAgIENvbW1pdCBFOiBtZXJnZSBCJkMsIGtlZXBpbmcgYiZjIGFuZCAobmV3KSBhIG1vZGlmaWVkIGF0IGVuZAorIworIyBNZXJnaW5nIGNvbW1pdHMgRCAmIEUgc2hvdWxkIHJlc3VsdCBpbiBubyBjb25mbGljdDsgZG9pbmcgc28gY29ycmVjdGx5CisjIHJlcXVpcmVzIGdldHRpbmcgdGhlIHZpcnR1YWwgbWVyZ2UgYmFzZSAoZnJvbSBtZXJnaW5nIEImQykgcmlnaHQsIGhhbmRsaW5nCisjIHJlbmFtaW5nIGNhcmVmdWxseSAoYm90aCBpbiB0aGUgdmlydHVhbCBtZXJnZSBiYXNlIGFuZCBsYXRlciksIGFuZCBnZXR0aW5nCisjIGNvbnRlbnQgbWVyZ2UgaGFuZGxlZC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY3Jpc3MtY3Jvc3MgKyByZW5hbWUvcmVuYW1lL2FkZCArIG1vZGlmeS9tb2RpZnknICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgImxvdHNcbm9mXG53b3Jkc1xuYW5kXG5jb250ZW50XG4iID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IHRhZyBBICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJZ2l0IG12IGEgYiAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCWdpdCBtdiBhIGMgJiYKKwlwcmludGYgIjJcbjNcbjRcbjVcbjZcbjdcbiIgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIEMgJiYKKworCWdpdCBjaGVja291dCBCXjAgJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgLXMgb3VycyBDXjAgJiYKKwlnaXQgY2hlY2tvdXQgQyAtLSBhIGMgJiYKKwltdiBhIG9sZF9hICYmCisJZWNobyAxID5hICYmCisJY2F0IG9sZF9hID4+YSAmJgorCXJtIG9sZF9hICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIGNvbW1pdCBDXjAgaW50byBIRUFEIiAmJgorCWdpdCB0YWcgRCAmJgorCisJZ2l0IGNoZWNrb3V0IENeMCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyBvdXJzIEJeMCAmJgorCWdpdCBjaGVja291dCBCIC0tIGIgJiYKKwllY2hvIDggPj5hICYmCisJZ2l0IGFkZCAtdSAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIGNvbW1pdCBCXjAgaW50byBIRUFEIiAmJgorCWdpdCB0YWcgRQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdkZXRlY3QgcmVuYW1lL3JlbmFtZS9hZGQtc291cmNlIGZvciB2aXJ0dWFsIG1lcmdlLWJhc2UnICcKKwlnaXQgY2hlY2tvdXQgRF4wICYmCisKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEVeMCAmJgorCisJdGVzdCAzIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMCAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmIpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmMpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkgJiYKKwl0ZXN0ICIkKGNhdCBhKSIgPSAiJChwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbjhcbiIpIgorJworCisjCisjIGNyaXNzLWNyb3NzIHdpdGggcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQtZGVzdCArIHNpbXBsZSBtb2RpZnk6CisjCisjICAgICAgQiAgIEQKKyMgICAgICBvLS0tbworIyAgICAgLyBcIC8gXAorIyAgQSBvICAgWCAgID8gRgorIyAgICAgXCAvIFwgLworIyAgICAgIG8tLS1vCisjICAgICAgQyAgIEUKKyMKKyMgICBDb21taXQgQTogbmV3IGZpbGU6IGEKKyMgICBDb21taXQgQjogcmVuYW1lIGEtPmIsIGFkZCBjCisjICAgQ29tbWl0IEM6IHJlbmFtZSBhLT5jCisjICAgQ29tbWl0IEQ6IG1lcmdlIEImQywga2VlcGluZyBBOmEgYW5kIEI6YworIyAgIENvbW1pdCBFOiBtZXJnZSBCJkMsIGtlZXBpbmcgQTphIGFuZCBzbGlnaHRseSBtb2RpZmllZCBjIGZyb20gQgorIworIyBNZXJnaW5nIGNvbW1pdHMgRCAmIEUgc2hvdWxkIHJlc3VsdCBpbiBubyBjb25mbGljdC4gIFRoZSB2aXJ0dWFsIG1lcmdlCisjIGJhc2Ugb2YgQiAmIEMgbmVlZHMgdG8gbm90IGRlbGV0ZSBCOmMgZm9yIHRoYXQgdG8gd29yaywgdGhvdWdoLi4uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNyaXNzLWNyb3NzK3JlbmFtZS9yZW5hbWUvYWRkLWRlc3QgKyBzaW1wbGUgbW9kaWZ5JyAnCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKwlnaXQgdGFnIEEgJiYKKworCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwlnaXQgbXYgYSBiICYmCisJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG4iID5jICYmCisJZ2l0IGFkZCBjICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZ2l0IG12IGEgYyAmJgorCWdpdCBjb21taXQgLW0gQyAmJgorCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCAtcyBvdXJzIENeMCAmJgorCWdpdCBtdiBiIGEgJiYKKwlnaXQgY29tbWl0IC1tICJEIGlzIGxpa2UgQiBidXQgcmVuYW1lcyBiIGJhY2sgdG8gYSIgJiYKKwlnaXQgdGFnIEQgJiYKKworCWdpdCBjaGVja291dCBCXjAgJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgLXMgb3VycyBDXjAgJiYKKwlnaXQgbXYgYiBhICYmCisJZWNobyA4ID4+YyAmJgorCWdpdCBhZGQgYyAmJgorCWdpdCBjb21taXQgLW0gIkUgbGlrZSBEIGJ1dCBoYXMgbW9kIGluIGMiICYmCisJZ2l0IHRhZyBFCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZpcnR1YWwgbWVyZ2UgYmFzZSBoYW5kbGVzIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkLWRlc3QnICcKKwlnaXQgY2hlY2tvdXQgRF4wICYmCisKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIEVeMCAmJgorCisJdGVzdCAyIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMCAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmEpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmMpID0gJChnaXQgcmV2LXBhcnNlIEU6YykKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDM3LW1lcmdlLW91cnMtdGhlaXJzLnNoIGIvdC90NjAzNy1tZXJnZS1vdXJzLXRoZWlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zODg5ZWNhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzNy1tZXJnZS1vdXJzLXRoZWlycy5zaApAQCAtMCwwICsxLDc2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nTWVyZ2UtcmVjdXJzaXZlIG91cnMgYW5kIHRoZWlycyB2YXJpYW50cycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOQorCWRvCisJCWVjaG8gIiRpIgorCWRvbmUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwljcCBmaWxlIGVsaWYgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKworCXNlZCAtZSAicy8xL29uZS8iIC1lICJzLzkvbmluZS8iID5maWxlIDxlbGlmICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBvdXJzICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZSBIRUFEXiAmJgorCisJc2VkIC1lICJzLzkvbnVldmUvIiA+ZmlsZSA8ZWxpZiAmJgorCWdpdCBjb21taXQgLWEgLW0gdGhlaXJzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhaW4gcmVjdXJzaXZlIC0gc2hvdWxkIGNvbmZsaWN0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIHNpZGUgJiYKKwlncmVwIG5pbmUgZmlsZSAmJgorCWdyZXAgbnVldmUgZmlsZSAmJgorCSEgZ3JlcCA5IGZpbGUgJiYKKwlncmVwIG9uZSBmaWxlICYmCisJISBncmVwIDEgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUgZmF2b3VyaW5nIHRoZWlycycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSAtWHRoZWlycyBzaWRlICYmCisJISBncmVwIG5pbmUgZmlsZSAmJgorCWdyZXAgbnVldmUgZmlsZSAmJgorCSEgZ3JlcCA5IGZpbGUgJiYKKwlncmVwIG9uZSBmaWxlICYmCisJISBncmVwIDEgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWN1cnNpdmUgZmF2b3VyaW5nIG91cnMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgLVggb3VycyBzaWRlICYmCisJZ3JlcCBuaW5lIGZpbGUgJiYKKwkhIGdyZXAgbnVldmUgZmlsZSAmJgorCSEgZ3JlcCA5IGZpbGUgJiYKKwlncmVwIG9uZSBmaWxlICYmCisJISBncmVwIDEgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiaW5hcnkgZmlsZSB3aXRoIC1Yb3Vycy8tWHRoZWlycycgJworCWVjaG8gZmlsZSBiaW5hcnkgPi5naXRhdHRyaWJ1dGVzICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgLVggdGhlaXJzIHNpZGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBzaWRlIEhFQUQgLS0gZmlsZSAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIC1YIG91cnMgc2lkZSAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlciBIRUFEIC0tIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVsbCBwYXNzZXMgLVggdG8gdW5kZXJseWluZyBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmIGdpdCBwdWxsIC1zIHJlY3Vyc2l2ZSAtWG91cnMgLiBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYgZ2l0IHB1bGwgLXMgcmVjdXJzaXZlIC1YIG91cnMgLiBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYgZ2l0IHB1bGwgLXMgcmVjdXJzaXZlIC1YdGhlaXJzIC4gc2lkZSAmJgorCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmIGdpdCBwdWxsIC1zIHJlY3Vyc2l2ZSAtWCB0aGVpcnMgLiBzaWRlICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYgdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLXMgcmVjdXJzaXZlIC1YIGJvcmsgLiBzaWRlCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjAzOC1tZXJnZS10ZXh0LWF1dG8uc2ggYi90L3Q2MDM4LW1lcmdlLXRleHQtYXV0by5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NWMxMGIwCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzOC1tZXJnZS10ZXh0LWF1dG8uc2gKQEAgLTAsMCArMSwyMDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDUkxGIG1lcmdlIGNvbmZsaWN0IGFjcm9zcyB0ZXh0PWF1dG8gY2hhbmdlCisKKyogW21hc3Rlcl0gcmVtb3ZlIC5naXRhdHRyaWJ1dGVzCisgISBbc2lkZV0gYWRkIGxpbmUgZnJvbSBiCistLQorICsgW3NpZGVdIGFkZCBsaW5lIGZyb20gYgorKiAgW21hc3Rlcl0gcmVtb3ZlIC5naXRhdHRyaWJ1dGVzCisqICBbbWFzdGVyXl0gYWRkIGxpbmUgZnJvbSBhCisqICBbbWFzdGVyfjJdIG5vcm1hbGl6ZSBmaWxlCisqKyBbc2lkZV5dIEluaXRpYWwKKycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfaGF2ZV9wcmVyZXEgU0VEX1NUUklQU19DUiAmJiBTRURfT1BUSU9OUz0tYgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKworCWVjaG8gZmlyc3QgbGluZSB8IGFwcGVuZF9jciA+ZmlsZSAmJgorCWVjaG8gZmlyc3QgbGluZSA+Y29udHJvbF9maWxlICYmCisJZWNobyBvbmx5IGxpbmUgPmluZXJ0X2ZpbGUgJiYKKworCWdpdCBhZGQgZmlsZSBjb250cm9sX2ZpbGUgaW5lcnRfZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIkluaXRpYWwiICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwllY2hvICIqIHRleHQ9YXV0byIgPi5naXRhdHRyaWJ1dGVzICYmCisJdG91Y2ggZmlsZSAmJgorCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIm5vcm1hbGl6ZSBmaWxlIiAmJgorCisJZWNobyBzYW1lIGxpbmUgfCBhcHBlbmRfY3IgPj5maWxlICYmCisJZWNobyBzYW1lIGxpbmUgPj5jb250cm9sX2ZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgY29udHJvbF9maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGxpbmUgZnJvbSBhIiAmJgorCWdpdCB0YWcgYSAmJgorCisJZ2l0IHJtIC5naXRhdHRyaWJ1dGVzICYmCisJcm0gZmlsZSAmJgorCWdpdCBjaGVja291dCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIC5naXRhdHRyaWJ1dGVzIiAmJgorCWdpdCB0YWcgYyAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIHNhbWUgbGluZSB8IGFwcGVuZF9jciA+PmZpbGUgJiYKKwllY2hvIHNhbWUgbGluZSA+PmNvbnRyb2xfZmlsZSAmJgorCWdpdCBhZGQgZmlsZSBjb250cm9sX2ZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgbGluZSBmcm9tIGIiICYmCisJZ2l0IHRhZyBiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBmdXp6X2NvbmZsaWN0KCkgaGVscGVyJyAnCisJZnV6el9jb25mbGljdCgpIHsKKwkJc2VkICRTRURfT1BUSU9OUyAtZSAicy9eXChbPD49XS4uLi4uLlwpIC4qL1wxLyIgIiRAIgorCX0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTWVyZ2UgYWZ0ZXIgc2V0dGluZyB0ZXh0PWF1dG8nICcKKwljYXQgPDwtXEVPRiA+ZXhwZWN0ZWQgJiYKKwlmaXJzdCBsaW5lCisJc2FtZSBsaW5lCisJRU9GCisKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIE5BVElWRV9DUkxGOyB0aGVuCisJCWFwcGVuZF9jciA8ZXhwZWN0ZWQgPmV4cGVjdGVkLnRlbXAgJiYKKwkJbXYgZXhwZWN0ZWQudGVtcCBleHBlY3RlZAorCWZpICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5yZW5vcm1hbGl6ZSB0cnVlICYmCisJZ2l0IHJtIC1mciAuICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGEgJiYKKwlnaXQgbWVyZ2UgYiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTWVyZ2UgYWRkaXRpb24gb2YgdGV4dD1hdXRvJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZmlyc3QgbGluZQorCXNhbWUgbGluZQorCUVPRgorCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBOQVRJVkVfQ1JMRjsgdGhlbgorCQlhcHBlbmRfY3IgPGV4cGVjdGVkID5leHBlY3RlZC50ZW1wICYmCisJCW12IGV4cGVjdGVkLnRlbXAgZXhwZWN0ZWQKKwlmaSAmJgorCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgdHJ1ZSAmJgorCWdpdCBybSAtZnIgLiAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBiICYmCisJZ2l0IG1lcmdlIGEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RldGVjdCBDUkxGL0xGIGNvbmZsaWN0IGFmdGVyIHNldHRpbmcgdGV4dD1hdXRvJyAnCisJZWNobyAiPDw8PDw8PCIgPmV4cGVjdGVkICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBOQVRJVkVfQ1JMRjsgdGhlbgorCQllY2hvIGZpcnN0IGxpbmUgfCBhcHBlbmRfY3IgPj5leHBlY3RlZCAmJgorCQllY2hvIHNhbWUgbGluZSB8IGFwcGVuZF9jciA+PmV4cGVjdGVkICYmCisJCWVjaG8gPT09PT09PSB8IGFwcGVuZF9jciA+PmV4cGVjdGVkCisJZWxzZQorCQllY2hvIGZpcnN0IGxpbmUgPj5leHBlY3RlZCAmJgorCQllY2hvIHNhbWUgbGluZSA+PmV4cGVjdGVkICYmCisJCWVjaG8gPT09PT09PSA+PmV4cGVjdGVkCisJZmkgJiYKKwllY2hvIGZpcnN0IGxpbmUgfCBhcHBlbmRfY3IgPj5leHBlY3RlZCAmJgorCWVjaG8gc2FtZSBsaW5lIHwgYXBwZW5kX2NyID4+ZXhwZWN0ZWQgJiYKKwllY2hvICI+Pj4+Pj4+IiA+PmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5yZW5vcm1hbGl6ZSBmYWxzZSAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGIgJiYKKwlmdXp6X2NvbmZsaWN0IGZpbGUgPmZpbGUuZnV6enkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlLmZ1enp5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0RldGVjdCBMRi9DUkxGIGNvbmZsaWN0IGZyb20gYWRkaXRpb24gb2YgdGV4dD1hdXRvJyAnCisJZWNobyAiPDw8PDw8PCIgPmV4cGVjdGVkICYmCisJZWNobyBmaXJzdCBsaW5lIHwgYXBwZW5kX2NyID4+ZXhwZWN0ZWQgJiYKKwllY2hvIHNhbWUgbGluZSB8IGFwcGVuZF9jciA+PmV4cGVjdGVkICYmCisJaWYgdGVzdF9oYXZlX3ByZXJlcSBOQVRJVkVfQ1JMRjsgdGhlbgorCQllY2hvID09PT09PT0gfCBhcHBlbmRfY3IgPj5leHBlY3RlZCAmJgorCQllY2hvIGZpcnN0IGxpbmUgfCBhcHBlbmRfY3IgPj5leHBlY3RlZCAmJgorCQllY2hvIHNhbWUgbGluZSB8IGFwcGVuZF9jciA+PmV4cGVjdGVkCisJZWxzZQorCQllY2hvID09PT09PT0gPj5leHBlY3RlZCAmJgorCQllY2hvIGZpcnN0IGxpbmUgPj5leHBlY3RlZCAmJgorCQllY2hvIHNhbWUgbGluZSA+PmV4cGVjdGVkCisJZmkgJiYKKwllY2hvICI+Pj4+Pj4+IiA+PmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyBtZXJnZS5yZW5vcm1hbGl6ZSBmYWxzZSAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGEgJiYKKwlmdXp6X2NvbmZsaWN0IGZpbGUgPmZpbGUuZnV6enkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlLmZ1enp5CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NoZWNrb3V0IC1tIGFmdGVyIHNldHRpbmcgdGV4dD1hdXRvJyAnCisJY2F0IDw8LVxFT0YgPmV4cGVjdGVkICYmCisJZmlyc3QgbGluZQorCXNhbWUgbGluZQorCUVPRgorCisJZ2l0IGNvbmZpZyBtZXJnZS5yZW5vcm1hbGl6ZSB0cnVlICYmCisJZ2l0IHJtIC1mciAuICYmCisJcm0gLWYgLmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgYSAtLSAuICYmCisJZ2l0IGNoZWNrb3V0IC1tIGIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NoZWNrb3V0IC1tIGFkZGl0aW9uIG9mIHRleHQ9YXV0bycgJworCWNhdCA8PC1cRU9GID5leHBlY3RlZCAmJgorCWZpcnN0IGxpbmUKKwlzYW1lIGxpbmUKKwlFT0YKKworCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgdHJ1ZSAmJgorCWdpdCBybSAtZnIgLiAmJgorCXJtIC1mIC5naXRhdHRyaWJ1dGVzIGZpbGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgYiAtLSAuICYmCisJZ2l0IGNoZWNrb3V0IC1tIGEgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NoZXJyeS1waWNrIHBhdGNoIGZyb20gYWZ0ZXIgdGV4dD1hdXRvIHdhcyBhZGRlZCcgJworCWFwcGVuZF9jciA8PC1cRU9GID5leHBlY3RlZCAmJgorCWZpcnN0IGxpbmUKKwlzYW1lIGxpbmUKKwlFT0YKKworCWdpdCBjb25maWcgbWVyZ2UucmVub3JtYWxpemUgdHJ1ZSAmJgorCWdpdCBybSAtZnIgLiAmJgorCWdpdCByZXNldCAtLWhhcmQgYiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBhID5lcnIgMj4mMSAmJgorCWdyZXAgIltObl1vdGhpbmcgYWRkZWQiIGVyciAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGVzdCBkZWxldGUvbm9ybWFsaXplIGNvbmZsaWN0JyAnCisJZ2l0IGNoZWNrb3V0IC1mIHNpZGUgJiYKKwlnaXQgcm0gLWZyIC4gJiYKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorCWdpdCBybSBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGUiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgYV4gJiYKKwlnaXQgbWVyZ2Ugc2lkZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwMzktbWVyZ2UtaWdub3JlY2FzZS5zaCBiL3QvdDYwMzktbWVyZ2UtaWdub3JlY2FzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MzE4NTBkCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjAzOS1tZXJnZS1pZ25vcmVjYXNlLnNoCkBAIC0wLDAgKzEsNTMgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtbWVyZ2Ugd2l0aCBjYXNlLWNoYW5naW5nIHJlbmFtZSBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtJworCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIENBU0VfSU5TRU5TSVRJVkVfRlMKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgY2FzZSBpbnNlbnNpdGl2ZSB0ZXN0cyAtIGNhc2Ugc2Vuc2l0aXZlIGZpbGUgc3lzdGVtJworCXRlc3RfZG9uZQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugd2l0aCBjYXNlLWNoYW5naW5nIHJlbmFtZScgJworCXRlc3QgJChnaXQgY29uZmlnIGNvcmUuaWdub3JlY2FzZSkgPSB0cnVlICYmCisJPlRlc3RDYXNlICYmCisJZ2l0IGFkZCBUZXN0Q2FzZSAmJgorCWdpdCBjb21taXQgLW0gImFkZCBUZXN0Q2FzZSIgJiYKKwlnaXQgdGFnIGJhc2VsaW5lICYmCisJZ2l0IGNoZWNrb3V0IC1iIHdpdGgtY2FtZWwgJiYKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJpbnRlcnZlbmluZyBjb21taXQiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBybSBUZXN0Q2FzZSAmJgorCT50ZXN0Y2FzZSAmJgorCWdpdCBhZGQgdGVzdGNhc2UgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUgdG8gdGVzdGNhc2UiICYmCisJZ2l0IGNoZWNrb3V0IHdpdGgtY2FtZWwgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyIC1tICJtZXJnZSIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXN0Y2FzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB3aXRoIGNhc2UtY2hhbmdpbmcgcmVuYW1lIG9uIGJvdGggc2lkZXMnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHJlc2V0IC0taGFyZCBiYXNlbGluZSAmJgorCWdpdCBicmFuY2ggLUQgd2l0aC1jYW1lbCAmJgorCWdpdCBjaGVja291dCAtYiB3aXRoLWNhbWVsICYmCisJZ2l0IG12IFRlc3RDYXNlIHRlc3RjYXNlICYmCisJZ2l0IGNvbW1pdCAtbSAicmVjYXNlIG9uIGJyYW5jaCIgJiYKKwk+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJpbnRlcnZlbmluZyBjb21taXQiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBybSBUZXN0Q2FzZSAmJgorCT50ZXN0Y2FzZSAmJgorCWdpdCBhZGQgdGVzdGNhc2UgJiYKKwlnaXQgY29tbWl0IC1tICJyZW5hbWUgdG8gdGVzdGNhc2UiICYmCisJZ2l0IGNoZWNrb3V0IHdpdGgtY2FtZWwgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyIC1tICJtZXJnZSIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXN0Y2FzZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNDAtdHJhY2tpbmctaW5mby5zaCBiL3QvdDYwNDAtdHJhY2tpbmctaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZDVjMjM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjA0MC10cmFja2luZy1pbmZvLnNoCkBAIC0wLDAgKzEsMjI1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVtb3RlIHRyYWNraW5nIHN0YXRzJworCisuIC4vdGVzdC1saWIuc2gKKworYWR2YW5jZSAoKSB7CisJZWNobyAiJDEiID4iJDEiICYmCisJZ2l0IGFkZCAiJDEiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWFkdmFuY2UgYSAmJgorCWFkdmFuY2UgYiAmJgorCWFkdmFuY2UgYyAmJgorCWdpdCBjbG9uZSAuIHRlc3QgJiYKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGIxIG9yaWdpbiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJCWFkdmFuY2UgZCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYjIgb3JpZ2luICYmCisJCWdpdCByZXNldCAtLWhhcmQgYjEgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGIzIG9yaWdpbiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJCWdpdCBjaGVja291dCAtYiBiNCBvcmlnaW4gJiYKKwkJYWR2YW5jZSBlICYmCisJCWFkdmFuY2UgZiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYnJva2VuYmFzZSBvcmlnaW4gJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIGI1IC0tdHJhY2sgYnJva2VuYmFzZSAmJgorCQlhZHZhbmNlIGcgJiYKKwkJZ2l0IGJyYW5jaCAtZCBicm9rZW5iYXNlICYmCisJCWdpdCBjaGVja291dCAtYiBiNiBvcmlnaW4KKwkpICYmCisJZ2l0IGNoZWNrb3V0IC1iIGZvbGxvd2VyIC0tdHJhY2sgbWFzdGVyICYmCisJYWR2YW5jZSBoCisnCisKK3NjcmlwdD0ncy9eLi5cKGIuXCkgKlswLTlhLWZdKiBcKC4qXCkkL1wxIFwyL3AnCitjYXQgPmV4cGVjdCA8PFxFT0YKK2IxIFthaGVhZCAxLCBiZWhpbmQgMV0gZAorYjIgW2FoZWFkIDEsIGJlaGluZCAxXSBkCitiMyBbYmVoaW5kIDFdIGIKK2I0IFthaGVhZCAyXSBmCitiNSBnCitiNiBjCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIC12JyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBicmFuY2ggLXYKKwkpIHwKKwlzZWQgLW4gLWUgIiRzY3JpcHQiID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2IxIFtvcmlnaW4vbWFzdGVyOiBhaGVhZCAxLCBiZWhpbmQgMV0gZAorYjIgW29yaWdpbi9tYXN0ZXI6IGFoZWFkIDEsIGJlaGluZCAxXSBkCitiMyBbb3JpZ2luL21hc3RlcjogYmVoaW5kIDFdIGIKK2I0IFtvcmlnaW4vbWFzdGVyOiBhaGVhZCAyXSBmCitiNSBbYnJva2VuYmFzZTogZ29uZV0gZworYjYgW29yaWdpbi9tYXN0ZXJdIGMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdicmFuY2ggLXZ2JyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBicmFuY2ggLXZ2CisJKSB8CisJc2VkIC1uIC1lICIkc2NyaXB0IiA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgKGRpdmVyZ2VkIGZyb20gdXBzdHJlYW0pJyAnCisJKAorCQljZCB0ZXN0ICYmIGdpdCBjaGVja291dCBiMQorCSkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImhhdmUgMSBhbmQgMSBkaWZmZXJlbnQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGxvY2FsIHRyYWNrZWQgYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBjaGVja291dCBmb2xsb3dlciA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiaXMgYWhlYWQgb2YiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAodXBzdHJlYW0gaXMgZ29uZSknICcKKwkoCisJCWNkIHRlc3QgJiYKKwkJZ2l0IGNoZWNrb3V0IGI1CisJKSA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiaXMgYmFzZWQgb24gLiosIGJ1dCB0aGUgdXBzdHJlYW0gaXMgZ29uZS4iIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAodXAtdG8tZGF0ZSB3aXRoIHVwc3RyZWFtKScgJworCSgKKwkJY2QgdGVzdCAmJiBnaXQgY2hlY2tvdXQgYjYKKwkpID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJZb3VyIGJyYW5jaCBpcyB1cC10by1kYXRlIHdpdGggLm9yaWdpbi9tYXN0ZXIiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgKGRpdmVyZ2VkIGZyb20gdXBzdHJlYW0pJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiMSA+L2Rldi9udWxsICYmCisJCSMgcmVwb3J0cyBub3RoaW5nIHRvIGNvbW1pdAorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1bgorCSkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImhhdmUgMSBhbmQgMSBkaWZmZXJlbnQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgKHVwc3RyZWFtIGlzIGdvbmUpJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiNSA+L2Rldi9udWxsICYmCisJCSMgcmVwb3J0cyBub3RoaW5nIHRvIGNvbW1pdAorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1bgorCSkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgImlzIGJhc2VkIG9uIC4qLCBidXQgdGhlIHVwc3RyZWFtIGlzIGdvbmUuIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzICh1cC10by1kYXRlIHdpdGggdXBzdHJlYW0pJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiNiA+L2Rldi9udWxsICYmCisJCSMgcmVwb3J0cyBub3RoaW5nIHRvIGNvbW1pdAorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1bgorCSkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIllvdXIgYnJhbmNoIGlzIHVwLXRvLWRhdGUgd2l0aCAub3JpZ2luL21hc3RlciIgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIyMgYjEuLi5vcmlnaW4vbWFzdGVyIFthaGVhZCAxLCBiZWhpbmQgMV0KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLWIgKGRpdmVyZ2VkIGZyb20gdXBzdHJlYW0pJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiMSA+L2Rldi9udWxsICYmCisJCWdpdCBzdGF0dXMgLXMgLWIgfCBoZWFkIC0xCisJKSA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisjIyBiNS4uLmJyb2tlbmJhc2UgW2dvbmVdCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIC1iICh1cHN0cmVhbSBpcyBnb25lKScgJworCSgKKwkJY2QgdGVzdCAmJgorCQlnaXQgY2hlY2tvdXQgYjUgPi9kZXYvbnVsbCAmJgorCQlnaXQgc3RhdHVzIC1zIC1iIHwgaGVhZCAtMQorCSkgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIyMgYjYuLi5vcmlnaW4vbWFzdGVyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIC1iICh1cC10by1kYXRlIHdpdGggdXBzdHJlYW0pJyAnCisJKAorCQljZCB0ZXN0ICYmCisJCWdpdCBjaGVja291dCBiNiA+L2Rldi9udWxsICYmCisJCWdpdCBzdGF0dXMgLXMgLWIgfCBoZWFkIC0xCisJKSA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCB0byB0cmFjayBsaWdodHdlaWdodCB0YWdzJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCB0YWcgbGlnaHQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYnJhbmNoIC0tdHJhY2sgbGlnaHR0cmFjayBsaWdodCA+YWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAhICJzZXQgdXAgdG8gdHJhY2siIGFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBsaWdodHRyYWNrCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgdG8gdHJhY2sgYW5ub3RhdGVkIHRhZ3MnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyAtbSBoZWF2eSBoZWF2eSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBicmFuY2ggLS10cmFjayBoZWF2eXRyYWNrIGhlYXZ5ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICEgInNldCB1cCB0byB0cmFjayIgYWN0dWFsICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGhlYXZ5dHJhY2sKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdHJhY2tpbmcgd2l0aCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gb24gZXhpc3RpbmcgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBmcm9tLW1hc3RlciBtYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3Rlci5tZXJnZSA+IGFjdHVhbCAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gZnJvbS1tYXN0ZXIgbWFzdGVyICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZnJvbS1tYXN0ZXIubWVyZ2UgPiBhY3R1YWwgJiYKKwlncmVwIC1xICJecmVmcy9oZWFkcy9tYXN0ZXIkIiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zZXQtdXBzdHJlYW0gZG9lcyBub3QgY2hhbmdlIGJyYW5jaCcgJworCWdpdCBicmFuY2ggZnJvbS1tYXN0ZXIyIG1hc3RlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb25maWcgYnJhbmNoLmZyb20tbWFzdGVyMi5tZXJnZSA+IGFjdHVhbCAmJgorCWdpdCByZXYtbGlzdCBmcm9tLW1hc3RlcjIgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2Zyb20tbWFzdGVyMiBmcm9tLW1hc3RlcjJeICYmCisJZ2l0IHJldi1wYXJzZSBmcm9tLW1hc3RlcjIgPmV4cGVjdDIgJiYKKwlnaXQgYnJhbmNoIC0tc2V0LXVwc3RyZWFtIGZyb20tbWFzdGVyMiBtYXN0ZXIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3Rlci5tZXJnZSA+IGFjdHVhbCAmJgorCWdpdCByZXYtcGFyc2UgZnJvbS1tYXN0ZXIyID5hY3R1YWwyICYmCisJZ3JlcCAtcSAiXnJlZnMvaGVhZHMvbWFzdGVyJCIgYWN0dWFsICYmCisJY21wIGV4cGVjdDIgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNldC11cHN0cmVhbSBAey0xfScgJworCWdpdCBjaGVja291dCBmcm9tLW1hc3RlciAmJgorCWdpdCBjaGVja291dCBmcm9tLW1hc3RlcjIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3RlcjIubWVyZ2UgPiBleHBlY3QyICYmCisJZ2l0IGJyYW5jaCAtLXNldC11cHN0cmVhbSBAey0xfSBmb2xsb3dlciAmJgorCWdpdCBjb25maWcgYnJhbmNoLmZyb20tbWFzdGVyLm1lcmdlID4gYWN0dWFsICYmCisJZ2l0IGNvbmZpZyBicmFuY2guZnJvbS1tYXN0ZXIyLm1lcmdlID4gYWN0dWFsMiAmJgorCWdpdCBicmFuY2ggLS1zZXQtdXBzdHJlYW0gZnJvbS1tYXN0ZXIgZm9sbG93ZXIgJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5mcm9tLW1hc3Rlci5tZXJnZSA+IGV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdDIgYWN0dWFsMiAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDQxLWJpc2VjdC1zdWJtb2R1bGUuc2ggYi90L3Q2MDQxLWJpc2VjdC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzZiN2FhNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwNDEtYmlzZWN0LXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmlzZWN0IGNhbiBoYW5kbGUgc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1zdWJtb2R1bGUtdXBkYXRlLnNoCisKK2dpdF9iaXNlY3QgKCkgeworCWdpdCBzdGF0dXMgLXN1ID5leHBlY3QgJiYKKwlscyAtMXBSICogPj5leHBlY3QgJiYKKwl0YXIgY3pmICIkVFJBU0hfRElSRUNUT1JZL3RtcC50Z3oiICogJiYKKwlHT09EPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCBjaGVja291dCAiJDEiICYmCisJZWNobyAiZm9vIiA+YmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgY29tbWl0IC1tICJiaXNlY3QgYmFkIiAmJgorCUJBRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReXiAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IGJpc2VjdCBzdGFydCAmJgorCWdpdCBiaXNlY3QgZ29vZCAkR09PRCAmJgorCXJtIC1yZiAqICYmCisJdGFyIHh6ZiAiJFRSQVNIX0RJUkVDVE9SWS90bXAudGd6IiAmJgorCWdpdCBzdGF0dXMgLXN1ID5hY3R1YWwgJiYKKwlscyAtMXBSICogPj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGJpc2VjdCBiYWQgJEJBRAorfQorCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdF9iaXNlY3QiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjA0Mi1tZXJnZS1yZW5hbWUtY29ybmVyLWNhc2VzLnNoIGIvdC90NjA0Mi1tZXJnZS1yZW5hbWUtY29ybmVyLWNhc2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxMTU1MGQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDQyLW1lcmdlLXJlbmFtZS1jb3JuZXItY2FzZXMuc2gKQEAgLTAsMCArMSw1NzggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSJyZWN1cnNpdmUgbWVyZ2UgY29ybmVyIGNhc2VzIHcvIHJlbmFtZXMgYnV0IG5vdCBjcmlzcy1jcm9zc2VzIgorIyB0NjAzNiBoYXMgY29ybmVyIGNhc2VzIHRoYXQgaW52b2x2ZSBib3RoIGNyaXNzLWNyb3NzIG1lcmdlcyBhbmQgcmVuYW1lcworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVuYW1lL2RlbGV0ZSArIHVudHJhY2tlZCBmaWxlJyAnCisJZWNobyAiQSBwcmV0dHkgaW5zY3JpcHRpb24iID5yaW5nICYmCisJZ2l0IGFkZCByaW5nICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBiZWdpbm5pbmcgJiYKKworCWdpdCBicmFuY2ggcGVvcGxlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlbmFtZS10aGUtcmluZyAmJgorCWdpdCBtdiByaW5nIG9uZS1yaW5nLXRvLXJ1bGUtdGhlbS1hbGwgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGZ1bGxuYW1lICYmCisKKwlnaXQgY2hlY2tvdXQgcGVvcGxlICYmCisJZ2l0IHJtIHJpbmcgJiYKKwllY2hvIGdvbGx1bSA+b3duZXIgJiYKKwlnaXQgYWRkIG93bmVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0cmFjay1wZW9wbGUtaW5zdGVhZC1vZi1vYmplY3RzICYmCisJZWNobyAiTXl5eSBQUkVDSU9VU1NTIiA+cmluZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJEb2VzIGdpdCBwcmVzZXJ2ZSBHb2xsdW0ncyBwcmVjaW91cyBhcnRpZmFjdD8iICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIHJlbmFtZS10aGUtcmluZyAmJgorCisJIyBNYWtlIHN1cmUgZ2l0IGRpZCBub3QgZGVsZXRlIGFuIHVudHJhY2tlZCBmaWxlCisJdGVzdCAtZiByaW5nCisnCisKKyMgVGVzdGNhc2Ugc2V0dXAgZm9yIHJlbmFtZS9tb2RpZnkvYWRkLXNvdXJjZToKKyMgICBDb21taXQgQTogbmV3IGZpbGU6IGEKKyMgICBDb21taXQgQjogbW9kaWZ5IGEgc2xpZ2h0bHkKKyMgICBDb21taXQgQzogcmVuYW1lIGEtPmIsIGFkZCBjb21wbGV0ZWx5IGRpZmZlcmVudCBhCisjCisjIFdlIHNob3VsZCBiZSBhYmxlIHRvIG1lcmdlIEIgJiBDIGNsZWFubHkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVuYW1lL21vZGlmeS9hZGQtc291cmNlIGNvbmZsaWN0JyAnCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG43XG4iID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IHRhZyBBICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJZWNobyA4ID4+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCWdpdCBtdiBhIGIgJiYKKwllY2hvIHNvbWV0aGluZyBjb21wbGV0ZWx5IGRpZmZlcmVudCA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gQworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdyZW5hbWUvbW9kaWZ5L2FkZC1zb3VyY2UgY29uZmxpY3QgcmVzb2x2YWJsZScgJworCWdpdCBjaGVja291dCBCXjAgJiYKKworCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQ14wICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBCOmEpID0gJChnaXQgcmV2LXBhcnNlIGIpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgQzphKSA9ICQoZ2l0IHJldi1wYXJzZSBhKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZXNvbHZhYmxlIGNvbmZsaWN0IG1pc3NlZCBpZiByZW5hbWUgbWlzc2VkJyAnCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJcHJpbnRmICIxXG4yXG4zXG40XG41XG4iID5hICYmCisJZWNobyBmb28gPmIgJiYKKwlnaXQgYWRkIGEgYiAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCWdpdCB0YWcgQSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCWdpdCBtdiBhIGMgJiYKKwllY2hvICJDb21wbGV0ZWx5IGRpZmZlcmVudCBjb250ZW50IiA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCWVjaG8gNiA+PmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIEMKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnY29uZmxpY3QgY2F1c2VkIGlmIHJlbmFtZSBub3QgZGV0ZWN0ZWQnICcKKwlnaXQgY2hlY2tvdXQgLXEgQ14wICYmCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCXRlc3QgMyAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdF9saW5lX2NvdW50ID0gNiBjICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRDphKSA9ICQoZ2l0IHJldi1wYXJzZSBCOmEpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRDpiKSA9ICQoZ2l0IHJldi1wYXJzZSBBOmIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbmZsaWN0IHJlc29sdmVkIHdyb25nIGlmIHJlbmFtZSBtaXNzZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNsZWFuIC1mICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgRCBBICYmCisJZWNobyA3ID4+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBtdiBhIGMgJiYKKwllY2hvICJDb21wbGV0ZWx5IGRpZmZlcmVudCBjb250ZW50IiA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gRCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEUgQSAmJgorCWdpdCBybSBhICYmCisJZWNobyAiQ29tcGxldGVseSBkaWZmZXJlbnQgY29udGVudCIgPj5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBFCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ21pc3NlZCBjb25mbGljdCBpZiByZW5hbWUgbm90IGRldGVjdGVkJyAnCisJZ2l0IGNoZWNrb3V0IC1xIEVeMCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgRF4wCisnCisKKyMgVGVzdHMgZm9yIHVuZGV0ZWN0ZWQgcmVuYW1lL2FkZC1zb3VyY2UgY2F1c2luZyBhIGZpbGUgdG8gZXJyb25lb3VzbHkgYmUKKyMgZGVsZXRlZCAoYW5kIGZvciBtaXNoYW5kbGVkIHJlbmFtZS9yZW5hbWUoMXRvMSkgY2F1c2luZyB0aGUgc2FtZSBpc3N1ZSkuCisjCisjIFRoaXMgdGVzdCB1c2VzIGEgcmVuYW1lL3JlbmFtZSgxdG8xKSthZGQtc291cmNlIGNvbmZsaWN0ICgxdG8xIG1lYW5zIHRoZQorIyBzYW1lIGZpbGUgaXMgcmVuYW1lZCBvbiBib3RoIHNpZGVzIHRvIHRoZSBzYW1lIHRoaW5nOyBpdCBzaG91bGQgdHJpZ2dlcgorIyB0aGUgMXRvMiBsb2dpYywgd2hpY2ggaXQgd291bGQgZG8gaWYgdGhlIGFkZC1zb3VyY2UgZGlkbid0IGNhdXNlIGlzc3VlcworIyBmb3IgZ2l0J3MgcmVuYW1lIGRldGVjdGlvbik6CisjICAgQ29tbWl0IEE6IG5ldyBmaWxlOiBhCisjICAgQ29tbWl0IEI6IHJlbmFtZSBhLT5iCisjICAgQ29tbWl0IEM6IHJlbmFtZSBhLT5iLCBhZGQgdW5yZWxhdGVkIGEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdW5kZXRlY3RlZCByZW5hbWUvYWRkLXNvdXJjZSBjYXVzZXMgZGF0YSBsb3NzJyAnCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJcHJpbnRmICIxXG4yXG4zXG40XG41XG4iID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBBICYmCisJZ2l0IHRhZyBBICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJZ2l0IG12IGEgYiAmJgorCWdpdCBjb21taXQgLW0gQiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCWdpdCBtdiBhIGIgJiYKKwllY2hvIGZvb2JhciA+YSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gQworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdkZXRlY3QgcmVuYW1lL2FkZC1zb3VyY2UgYW5kIHByZXNlcnZlIGFsbCBkYXRhJyAnCisJZ2l0IGNoZWNrb3V0IEJeMCAmJgorCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBDXjAgJiYKKworCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAtZiBhICYmCisJdGVzdCAtZiBiICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmIpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmEpID0gJChnaXQgcmV2LXBhcnNlIEM6YSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZGV0ZWN0IHJlbmFtZS9hZGQtc291cmNlIGFuZCBwcmVzZXJ2ZSBhbGwgZGF0YSwgbWVyZ2Ugb3RoZXIgd2F5JyAnCisJZ2l0IGNoZWNrb3V0IENeMCAmJgorCisJZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAtZiBhICYmCisJdGVzdCAtZiBiICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmIpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEOmEpID0gJChnaXQgcmV2LXBhcnNlIEM6YSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgY29udGVudCBtZXJnZSArIHJlbmFtZS9kaXJlY3RvcnkgY29uZmxpY3QnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbiIgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwlnaXQgdGFnIGJhc2UgJiYKKworCWdpdCBjaGVja291dCAtYiByaWdodCAmJgorCWVjaG8gNyA+PmZpbGUgJiYKKwlta2RpciBuZXdmaWxlICYmCisJZWNobyBqdW5rID5uZXdmaWxlL3JlYWxmaWxlICYmCisJZ2l0IGFkZCBmaWxlIG5ld2ZpbGUvcmVhbGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJpZ2h0ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgbGVmdC1jb25mbGljdCBiYXNlICYmCisJZWNobyA4ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBtdiBmaWxlIG5ld2ZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGxlZnQgJiYKKworCWdpdCBjaGVja291dCAtYiBsZWZ0LWNsZWFuIGJhc2UgJiYKKwllY2hvIDAgPm5ld2ZpbGUgJiYKKwljYXQgZmlsZSA+Pm5ld2ZpbGUgJiYKKwlnaXQgYWRkIG5ld2ZpbGUgJiYKKwlnaXQgcm0gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbGVmdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUvZGlyZWN0b3J5IGNvbmZsaWN0ICsgY2xlYW4gY29udGVudCBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwlnaXQgY2hlY2tvdXQgbGVmdC1jbGVhbl4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIHJpZ2h0XjAgJiYKKworCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDEgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAxIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJZWNobyAwID5leHBlY3QgJiYKKwlnaXQgY2F0LWZpbGUgLXAgYmFzZTpmaWxlID4+ZXhwZWN0ICYmCisJZWNobyA3ID4+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG5ld2ZpbGV+SEVBRCAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6bmV3ZmlsZSkgPSAkKGdpdCBoYXNoLW9iamVjdCBleHBlY3QpICYmCisKKwl0ZXN0IC1mIG5ld2ZpbGUvcmVhbGZpbGUgJiYKKwl0ZXN0IC1mIG5ld2ZpbGV+SEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUvZGlyZWN0b3J5IGNvbmZsaWN0ICsgY29udGVudCBtZXJnZSBjb25mbGljdCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisKKwlnaXQgY2hlY2tvdXQgbGVmdC1jb25mbGljdF4wICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLXMgcmVjdXJzaXZlIHJpZ2h0XjAgJiYKKworCXRlc3QgNCAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDMgLWVxICQoZ2l0IGxzLWZpbGVzIC11IHwgd2MgLWwpICYmCisJdGVzdCAxIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJZ2l0IGNhdC1maWxlIC1wIGxlZnQtY29uZmxpY3Q6bmV3ZmlsZSA+bGVmdCAmJgorCWdpdCBjYXQtZmlsZSAtcCBiYXNlOmZpbGUgICAgPmJhc2UgJiYKKwlnaXQgY2F0LWZpbGUgLXAgcmlnaHQ6ZmlsZSAgID5yaWdodCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZS1maWxlIFwKKwkJLUwgIkhFQUQ6bmV3ZmlsZSIgXAorCQktTCAiIiBcCisJCS1MICJyaWdodF4wOmZpbGUiIFwKKwkJbGVmdCBiYXNlIHJpZ2h0ICYmCisJdGVzdF9jbXAgbGVmdCBuZXdmaWxlfkhFQUQgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIDoxOm5ld2ZpbGUpID0gJChnaXQgcmV2LXBhcnNlIGJhc2U6ZmlsZSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MjpuZXdmaWxlKSA9ICQoZ2l0IHJldi1wYXJzZSBsZWZ0LWNvbmZsaWN0Om5ld2ZpbGUpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjM6bmV3ZmlsZSkgPSAkKGdpdCByZXYtcGFyc2UgcmlnaHQ6ZmlsZSkgJiYKKworCXRlc3QgLWYgbmV3ZmlsZS9yZWFsZmlsZSAmJgorCXRlc3QgLWYgbmV3ZmlsZX5IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvbnRlbnQgbWVyZ2UgKyByZW5hbWUvZGlyZWN0b3J5IGNvbmZsaWN0IHcvIGRpc2FwcGVhcmluZyBkaXInICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJbWtkaXIgc3ViICYmCisJcHJpbnRmICIxXG4yXG4zXG40XG41XG42XG4iID5zdWIvZmlsZSAmJgorCWdpdCBhZGQgc3ViL2ZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGJhc2UgJiYKKwlnaXQgdGFnIGJhc2UgJiYKKworCWdpdCBjaGVja291dCAtYiByaWdodCAmJgorCWVjaG8gNyA+PnN1Yi9maWxlICYmCisJZ2l0IGFkZCBzdWIvZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gcmlnaHQgJiYKKworCWdpdCBjaGVja291dCAtYiBsZWZ0IGJhc2UgJiYKKwllY2hvIDAgPm5ld2ZpbGUgJiYKKwljYXQgc3ViL2ZpbGUgPj5uZXdmaWxlICYmCisJZ2l0IHJtIHN1Yi9maWxlICYmCisJbXYgbmV3ZmlsZSBzdWIgJiYKKwlnaXQgYWRkIHN1YiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbGVmdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhcHBlYXJpbmcgZGlyIGluIHJlbmFtZS9kaXJlY3RvcnkgY29uZmxpY3QgaGFuZGxlZCcgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKworCWdpdCBjaGVja291dCBsZWZ0XjAgJiYKKworCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgcmlnaHReMCAmJgorCisJdGVzdCAxIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMCAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDAgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwllY2hvIDAgPmV4cGVjdCAmJgorCWdpdCBjYXQtZmlsZSAtcCBiYXNlOnN1Yi9maWxlID4+ZXhwZWN0ICYmCisJZWNobyA3ID4+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHN1YiAmJgorCisJdGVzdCAtZiBzdWIKKycKKworIyBUZXN0IGZvciBhbGwga2luZHMgb2YgdGhpbmdzIHRoYXQgY2FuIGdvIHdyb25nIHdpdGggcmVuYW1lL3JlbmFtZSAoMnRvMSk6CisjICAgQ29tbWl0IEE6IG5ldyBmaWxlczogYSAmIGIKKyMgICBDb21taXQgQjogcmVuYW1lIGEtPmMsIG1vZGlmeSBiCisjICAgQ29tbWl0IEM6IHJlbmFtZSBiLT5jLCBtb2RpZnkgYQorIworIyBNZXJnaW5nIG9mIEIgJiBDIHNob3VsZCBOT1QgYmUgY2xlYW4uICBRdWVzdGlvbnM6CisjICAgKiBCb3RoIGEgJiBiIHNob3VsZCBiZSByZW1vdmVkIGJ5IHRoZSBtZXJnZTsgYXJlIHRoZXk/CisjICAgKiBUaGUgdHdvIGMncyBzaG91bGQgY29udGFpbiBtb2RpZmljYXRpb25zIHRvIGEgJiBiOyBkbyB0aGV5PworIyAgICogVGhlIGluZGV4IHNob3VsZCBjb250YWluIHR3byBmaWxlcywgYm90aCBmb3IgYzsgZG9lcyBpdD8KKyMgICAqIFRoZSB3b3JraW5nIGNvcHkgc2hvdWxkIGhhdmUgdHdvIGZpbGVzLCBib3RoIG9mIGZvcm0gY348dW5pcXVlPjsgZG9lcyBpdD8KKyMgICAqIE5vdGhpbmcgZWxzZSBzaG91bGQgYmUgcHJlc2VudC4gIElzIGFueXRoaW5nPworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUvcmVuYW1lICgydG8xKSArIG1vZGlmeS9tb2RpZnknICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbiIgPmEgJiYKKwlwcmludGYgIjVcbjRcbjNcbjJcbjFcbiIgPmIgJiYKKwlnaXQgYWRkIGEgYiAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCWdpdCB0YWcgQSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCWdpdCBtdiBhIGMgJiYKKwllY2hvIDAgPj5iICYmCisJZ2l0IGFkZCBiICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZ2l0IG12IGIgYyAmJgorCWVjaG8gNiA+PmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIEMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFuZGxlIHJlbmFtZS9yZW5hbWUgKDJ0bzEpIGNvbmZsaWN0IGNvcnJlY3RseScgJworCWdpdCBjaGVja291dCBCXjAgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQ14wID5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJDT05GTElDVCAocmVuYW1lL3JlbmFtZSkiIG91dCAmJgorCisJdGVzdCAyIC1lcSAkKGdpdCBscy1maWxlcyAtcyB8IHdjIC1sKSAmJgorCXRlc3QgMiAtZXEgJChnaXQgbHMtZmlsZXMgLXUgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IGMgfCB3YyAtbCkgJiYKKwl0ZXN0IDMgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0ICEgLWYgYSAmJgorCXRlc3QgISAtZiBiICYmCisJdGVzdCAtZiBjfkhFQUQgJiYKKwl0ZXN0IC1mIGN+Q14wICYmCisKKwl0ZXN0ICQoZ2l0IGhhc2gtb2JqZWN0IGN+SEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgQzphKSAmJgorCXRlc3QgJChnaXQgaGFzaC1vYmplY3QgY35DXjApID0gJChnaXQgcmV2LXBhcnNlIEI6YikKKycKKworIyBUZXN0Y2FzZSBzZXR1cCBmb3Igc2ltcGxlIHJlbmFtZS9yZW5hbWUgKDF0bzIpIGNvbmZsaWN0OgorIyAgIENvbW1pdCBBOiBuZXcgZmlsZTogYQorIyAgIENvbW1pdCBCOiByZW5hbWUgYS0+YgorIyAgIENvbW1pdCBDOiByZW5hbWUgYS0+YwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2ltcGxlIHJlbmFtZS9yZW5hbWUgKDF0bzIpIGNvbmZsaWN0JyAnCisJZ2l0IHJtIC1yZiAuICYmCisJZ2l0IGNsZWFuIC1mZHF4ICYmCisJcm0gLXJmIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCisJZWNobyBzdHVmZiA+YSAmJgorCWdpdCBhZGQgYSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gQSAmJgorCWdpdCB0YWcgQSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCWdpdCBtdiBhIGIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIEIgJiYKKworCWdpdCBjaGVja291dCAtYiBDIEEgJiYKKwlnaXQgbXYgYSBjICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBDCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGhhcyBjb3JyZWN0IHdvcmtpbmcgdHJlZSBjb250ZW50cycgJworCWdpdCBjaGVja291dCBDXjAgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwl0ZXN0IDMgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAzIC1lcSAkKGdpdCBscy1maWxlcyAtdSB8IHdjIC1sKSAmJgorCXRlc3QgMCAtZXEgJChnaXQgbHMtZmlsZXMgLW8gfCB3YyAtbCkgJiYKKworCXRlc3QgJChnaXQgcmV2LXBhcnNlIDoxOmEpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MzpiKSA9ICQoZ2l0IHJldi1wYXJzZSBBOmEpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6YykgPSAkKGdpdCByZXYtcGFyc2UgQTphKSAmJgorCisJdGVzdCAhIC1mIGEgJiYKKwl0ZXN0ICQoZ2l0IGhhc2gtb2JqZWN0IGIpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkgJiYKKwl0ZXN0ICQoZ2l0IGhhc2gtb2JqZWN0IGMpID0gJChnaXQgcmV2LXBhcnNlIEE6YSkKKycKKworIyBUZXN0Y2FzZSBzZXR1cCBmb3IgcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQtc291cmNlIGNvbmZsaWN0OgorIyAgIENvbW1pdCBBOiBuZXcgZmlsZTogYQorIyAgIENvbW1pdCBCOiByZW5hbWUgYS0+YgorIyAgIENvbW1pdCBDOiByZW5hbWUgYS0+YywgYWRkIGNvbXBsZXRlbHkgZGlmZmVyZW50IGEKKyMKKyMgTWVyZ2luZyBvZiBCICYgQyBzaG91bGQgTk9UIGJlIGNsZWFuOyB0aGVyZSdzIGEgcmVuYW1lL3JlbmFtZSBjb25mbGljdAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCByZW5hbWUvcmVuYW1lKDF0bzIpL2FkZC1zb3VyY2UgY29uZmxpY3QnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwlwcmludGYgIjFcbjJcbjNcbjRcbjVcbjZcbjdcbiIgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tIEEgJiYKKwlnaXQgdGFnIEEgJiYKKworCWdpdCBjaGVja291dCAtYiBCIEEgJiYKKwlnaXQgbXYgYSBiICYmCisJZ2l0IGNvbW1pdCAtbSBCICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZ2l0IG12IGEgYyAmJgorCWVjaG8gc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50ID5hICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IGNvbW1pdCAtbSBDCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RldGVjdCBjb25mbGljdCB3aXRoIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkLXNvdXJjZSBtZXJnZScgJworCWdpdCBjaGVja291dCBCXjAgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQ14wICYmCisKKwl0ZXN0IDQgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgMzphKSA9ICQoZ2l0IHJldi1wYXJzZSBDOmEpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgMTphKSA9ICQoZ2l0IHJldi1wYXJzZSBBOmEpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgMjpiKSA9ICQoZ2l0IHJldi1wYXJzZSBCOmIpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgMzpjKSA9ICQoZ2l0IHJldi1wYXJzZSBDOmMpICYmCisKKwl0ZXN0IC1mIGEgJiYKKwl0ZXN0IC1mIGIgJiYKKwl0ZXN0IC1mIGMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVuYW1lL3JlbmFtZSgxdG8yKS9hZGQtc291cmNlIHJlc29sdmFibGUgY29uZmxpY3QnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwk+YSAmJgorCWdpdCBhZGQgYSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCB0YWcgQSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEIgQSAmJgorCWdpdCBtdiBhIGIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG9uZSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIEMgQSAmJgorCWdpdCBtdiBhIGIgJiYKKwllY2hvIGltcG9ydGFudC1pbmZvID5hICYmCisJZ2l0IGFkZCBhICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0d28KKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAncmVuYW1lL3JlbmFtZS9hZGQtc291cmNlIHN0aWxsIHRyYWNrcyBuZXcgYSBmaWxlJyAnCisJZ2l0IGNoZWNrb3V0IENeMCAmJgorCWdpdCBtZXJnZSAtcyByZWN1cnNpdmUgQl4wICYmCisKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC1zIHwgd2MgLWwpICYmCisJdGVzdCAwIC1lcSAkKGdpdCBscy1maWxlcyAtbyB8IHdjIC1sKSAmJgorCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRDphKSA9ICQoZ2l0IHJldi1wYXJzZSBDOmEpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRDpiKSA9ICQoZ2l0IHJldi1wYXJzZSBBOmEpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlbmFtZS9yZW5hbWUoMXRvMikvYWRkLWRlc3QgY29uZmxpY3QnICcKKwlnaXQgcm0gLXJmIC4gJiYKKwlnaXQgY2xlYW4gLWZkcXggJiYKKwlybSAtcmYgLmdpdCAmJgorCWdpdCBpbml0ICYmCisKKwllY2hvIHN0dWZmID5hICYmCisJZ2l0IGFkZCBhICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBiYXNlICYmCisJZ2l0IHRhZyBBICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQiBBICYmCisJZ2l0IG12IGEgYiAmJgorCWVjaG8gcHJlY2lvdXMtZGF0YSA+YyAmJgorCWdpdCBhZGQgYyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgQyBBICYmCisJZ2l0IG12IGEgYyAmJgorCWVjaG8gaW1wb3J0YW50LWluZm8gPmIgJiYKKwlnaXQgYWRkIGIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHR3bworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUvcmVuYW1lL2FkZC1kZXN0IG1lcmdlIHN0aWxsIGtub3dzIGFib3V0IGNvbmZsaWN0aW5nIGZpbGUgdmVyc2lvbnMnICcKKwlnaXQgY2hlY2tvdXQgQ14wICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSBCXjAgJiYKKworCXRlc3QgNSAtZXEgJChnaXQgbHMtZmlsZXMgLXMgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IGIgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgLWVxICQoZ2l0IGxzLWZpbGVzIC11IGMgfCB3YyAtbCkgJiYKKwl0ZXN0IDQgLWVxICQoZ2l0IGxzLWZpbGVzIC1vIHwgd2MgLWwpICYmCisKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MTphKSA9ICQoZ2l0IHJldi1wYXJzZSBBOmEpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjI6YikgPSAkKGdpdCByZXYtcGFyc2UgQzpiKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIDozOmIpID0gJChnaXQgcmV2LXBhcnNlIEI6YikgJiYKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSA6MjpjKSA9ICQoZ2l0IHJldi1wYXJzZSBDOmMpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgOjM6YykgPSAkKGdpdCByZXYtcGFyc2UgQjpjKSAmJgorCisJdGVzdCAkKGdpdCBoYXNoLW9iamVjdCBjfkhFQUQpID0gJChnaXQgcmV2LXBhcnNlIEM6YykgJiYKKwl0ZXN0ICQoZ2l0IGhhc2gtb2JqZWN0IGN+QlxeMCkgPSAkKGdpdCByZXYtcGFyc2UgQjpjKSAmJgorCXRlc3QgJChnaXQgaGFzaC1vYmplY3QgYn5IRUFEKSA9ICQoZ2l0IHJldi1wYXJzZSBDOmIpICYmCisJdGVzdCAkKGdpdCBoYXNoLW9iamVjdCBifkJcXjApID0gJChnaXQgcmV2LXBhcnNlIEI6YikgJiYKKworCXRlc3QgISAtZiBiICYmCisJdGVzdCAhIC1mIGMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MDUwLXJlcGxhY2Uuc2ggYi90L3Q2MDUwLXJlcGxhY2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGQ1YTI1ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYwNTAtcmVwbGFjZS5zaApAQCAtMCwwICsxLDQ0MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBDaHJpc3RpYW4gQ291ZGVyCisjCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyByZXBsYWNlIHJlZnMgZnVuY3Rpb25hbGl0eScKKworZXhlYyA8L2Rldi9udWxsCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1ncGcuc2giCisKK2FkZF9hbmRfY29tbWl0X2ZpbGUgKCkKK3sKKyAgICBfZmlsZT0iJDEiCisgICAgX21zZz0iJDIiCisKKyAgICBnaXQgYWRkICRfZmlsZSB8fCByZXR1cm4gJD8KKyAgICB0ZXN0X3RpY2sgfHwgcmV0dXJuICQ/CisgICAgZ2l0IGNvbW1pdCAtLXF1aWV0IC1tICIkX2ZpbGU6ICRfbXNnIgorfQorCitjb21taXRfYnVmZmVyX2NvbnRhaW5zX3BhcmVudHMgKCkKK3sKKyAgICBnaXQgY2F0LWZpbGUgY29tbWl0ICIkMSIgPnBheWxvYWQgJiYKKyAgICBzZWQgLW4gLWUgJy9eJC9xJyAtZSAnL15wYXJlbnQgL3AnIDxwYXlsb2FkID5hY3R1YWwgJiYKKyAgICBzaGlmdCAmJgorICAgIGZvciBfcGFyZW50CisgICAgZG8KKwllY2hvICJwYXJlbnQgJF9wYXJlbnQiCisgICAgZG9uZSA+ZXhwZWN0ZWQgJiYKKyAgICB0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKK30KKworY29tbWl0X3BlZWxpbmdfc2hvd3NfcGFyZW50cyAoKQoreworICAgIF9wYXJlbnRfbnVtYmVyPTEKKyAgICBfY29tbWl0PSIkMSIKKyAgICBzaGlmdCAmJgorICAgIGZvciBfcGFyZW50CisgICAgZG8KKwlfZm91bmQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRfY29tbWl0XiRfcGFyZW50X251bWJlcikgfHwgcmV0dXJuIDEKKwl0ZXN0ICIkX2ZvdW5kIiA9ICIkX3BhcmVudCIgfHwgcmV0dXJuIDEKKwlfcGFyZW50X251bWJlcj0kKCggJF9wYXJlbnRfbnVtYmVyICsgMSApKQorICAgIGRvbmUgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICRfY29tbWl0XiRfcGFyZW50X251bWJlcgorfQorCitjb21taXRfaGFzX3BhcmVudHMgKCkKK3sKKyAgICBjb21taXRfYnVmZmVyX2NvbnRhaW5zX3BhcmVudHMgIiRAIiAmJgorICAgIGNvbW1pdF9wZWVsaW5nX3Nob3dzX3BhcmVudHMgIiRAIgorfQorCitIQVNIMT0KK0hBU0gyPQorSEFTSDM9CitIQVNIND0KK0hBU0g1PQorSEFTSDY9CitIQVNINz0KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGJ1Z2d5IGJyYW5jaCcgJworICAgICBlY2hvICJsaW5lIDEiID4+aGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAyIiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMyIgPj5oZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDQiID4+aGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiNCBsaW5lcyIgJiYKKyAgICAgSEFTSDE9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGVjaG8gImxpbmUgQlVHIiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgNiIgPj5oZWxsbyAmJgorICAgICBlY2hvICJsaW5lIDciID4+aGVsbG8gJiYKKyAgICAgZWNobyAibGluZSA4IiA+PmhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gIjQgbW9yZSBsaW5lcyB3aXRoIGEgQlVHIiAmJgorICAgICBIQVNIMj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZWNobyAibGluZSA5IiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMTAiID4+aGVsbG8gJiYKKyAgICAgYWRkX2FuZF9jb21taXRfZmlsZSBoZWxsbyAiMiBtb3JlIGxpbmVzIiAmJgorICAgICBIQVNIMz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKyAgICAgZWNobyAibGluZSAxMSIgPj5oZWxsbyAmJgorICAgICBhZGRfYW5kX2NvbW1pdF9maWxlIGhlbGxvICIxIG1vcmUgbGluZSIgJiYKKyAgICAgSEFTSDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIHNlZCAtZSAicy9CVUcvNS8iIGhlbGxvID5oZWxsby5uZXcgJiYKKyAgICAgbXYgaGVsbG8ubmV3IGhlbGxvICYmCisgICAgIGFkZF9hbmRfY29tbWl0X2ZpbGUgaGVsbG8gIkJVRyBmaXhlZCIgJiYKKyAgICAgSEFTSDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisgICAgIGVjaG8gImxpbmUgMTIiID4+aGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAxMyIgPj5oZWxsbyAmJgorICAgICBhZGRfYW5kX2NvbW1pdF9maWxlIGhlbGxvICIyIG1vcmUgbGluZXMiICYmCisgICAgIEhBU0g2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBlY2hvICJsaW5lIDE0IiA+PmhlbGxvICYmCisgICAgIGVjaG8gImxpbmUgMTUiID4+aGVsbG8gJiYKKyAgICAgZWNobyAibGluZSAxNiIgPj5oZWxsbyAmJgorICAgICBhZGRfYW5kX2NvbW1pdF9maWxlIGhlbGxvICJhZ2FpbiAzIG1vcmUgbGluZXMiICYmCisgICAgIEhBU0g3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBsYWNlIHRoZSBhdXRob3InICcKKyAgICAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDIgfCBncmVwICJhdXRob3IgQSBVIFRob3IiICYmCisgICAgIFI9JChnaXQgY2F0LWZpbGUgY29tbWl0ICRIQVNIMiB8IHNlZCAtZSAicy9BIFUvTy8iIHwgZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtLXN0ZGluIC13KSAmJgorICAgICBnaXQgY2F0LWZpbGUgY29tbWl0ICRSIHwgZ3JlcCAiYXV0aG9yIE8gVGhvciIgJiYKKyAgICAgZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZXBsYWNlLyRIQVNIMiAkUiAmJgorICAgICBnaXQgc2hvdyBIRUFEfjUgfCBncmVwICJPIFRob3IiICYmCisgICAgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIk8gVGhvciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyBvcHRpb24nICcKKyAgICAgZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDIgfCBncmVwICJhdXRob3IgTyBUaG9yIiAmJgorICAgICBnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgY2F0LWZpbGUgY29tbWl0ICRIQVNIMiB8IGdyZXAgImF1dGhvciBBIFUgVGhvciIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiTyBUaG9yIiAmJgorICAgICBnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgc2hvdyAkSEFTSDIgfCBncmVwICJBIFUgVGhvciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBHSVRfTk9fUkVQTEFDRV9PQkpFQ1RTIGVudiB2YXJpYWJsZScgJworICAgICBHSVRfTk9fUkVQTEFDRV9PQkpFQ1RTPTEgZ2l0IGNhdC1maWxlIGNvbW1pdCAkSEFTSDIgfCBncmVwICJhdXRob3IgQSBVIFRob3IiICYmCisgICAgIEdJVF9OT19SRVBMQUNFX09CSkVDVFM9MSBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJBIFUgVGhvciIKKycKKworY2F0ID50YWcuc2lnIDw8RU9GCitvYmplY3QgJEhBU0gyCit0eXBlIGNvbW1pdAordGFnIG15dGFnCit0YWdnZXIgVCBBIEdnZXIgPD4gMCArMDAwMAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHJlcGxhY2VkIGNvbW1pdCcgJworICAgICBnaXQgbWt0YWcgPHRhZy5zaWcgPi5naXQvcmVmcy90YWdzL215dGFnIDI+bWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IGZzY2siIHdvcmtzJyAnCisgICAgIGdpdCBmc2NrIG1hc3RlciA+ZnNja19tYXN0ZXIub3V0ICYmCisgICAgIGdyZXAgImRhbmdsaW5nIGNvbW1pdCAkUiIgZnNja19tYXN0ZXIub3V0ICYmCisgICAgIGdyZXAgImRhbmdsaW5nIHRhZyAkKGNhdCAuZ2l0L3JlZnMvdGFncy9teXRhZykiIGZzY2tfbWFzdGVyLm91dCAmJgorICAgICB0ZXN0IC16ICIkKGdpdCBmc2NrKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwYWNrLCBjbG9uZSBhbmQgZmV0Y2ggd29yaycgJworICAgICBnaXQgcmVwYWNrIC1hIC1kICYmCisgICAgIGdpdCBjbG9uZSAtLW5vLWhhcmRsaW5rcyAuIGNsb25lX2RpciAmJgorICAgICAoCisJICBjZCBjbG9uZV9kaXIgJiYKKwkgIGdpdCBzaG93IEhFQUR+NSB8IGdyZXAgIkEgVSBUaG9yIiAmJgorCSAgZ2l0IHNob3cgJEhBU0gyIHwgZ3JlcCAiQSBVIFRob3IiICYmCisJICBnaXQgY2F0LWZpbGUgY29tbWl0ICRSICYmCisJICBnaXQgcmVwYWNrIC1hIC1kICYmCisJICB0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgY29tbWl0ICRSICYmCisJICBnaXQgZmV0Y2ggLi4vICJyZWZzL3JlcGxhY2UvKjpyZWZzL3JlcGxhY2UvKiIgJiYKKwkgIGdpdCBzaG93IEhFQUR+NSB8IGdyZXAgIk8gVGhvciIgJiYKKwkgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIk8gVGhvciIgJiYKKwkgIGdpdCBjYXQtZmlsZSBjb21taXQgJFIKKyAgICAgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHJlcGxhY2UiIGxpc3RpbmcgYW5kIGRlbGV0aW5nJyAnCisgICAgIHRlc3QgIiRIQVNIMiIgPSAiJChnaXQgcmVwbGFjZSAtbCkiICYmCisgICAgIHRlc3QgIiRIQVNIMiIgPSAiJChnaXQgcmVwbGFjZSkiICYmCisgICAgIGFhPSR7SEFTSDIlPz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz99ICYmCisgICAgIHRlc3QgIiRIQVNIMiIgPSAiJChnaXQgcmVwbGFjZSAtLWxpc3QgIiRhYSoiKSIgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLWQgJFIgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLS1kZWxldGUgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLWwgLWQgJEhBU0gyICYmCisgICAgIGdpdCByZXBsYWNlIC1kICRIQVNIMiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJBIFUgVGhvciIgJiYKKyAgICAgdGVzdCAteiAiJChnaXQgcmVwbGFjZSAtbCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgcmVwbGFjZSIgcmVwbGFjaW5nJyAnCisgICAgIGdpdCByZXBsYWNlICRIQVNIMiAkUiAmJgorICAgICBnaXQgc2hvdyAkSEFTSDIgfCBncmVwICJPIFRob3IiICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlICRIQVNIMiAkUiAmJgorICAgICBnaXQgcmVwbGFjZSAtZiAkSEFTSDIgJFIgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLWYgJiYKKyAgICAgdGVzdCAiJEhBU0gyIiA9ICIkKGdpdCByZXBsYWNlKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCByZXBsYWNlIiByZXNvbHZlcyBzaGExJyAnCisgICAgIFNIT1JUSEFTSDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9OCAkSEFTSDIpICYmCisgICAgIGdpdCByZXBsYWNlIC1kICRTSE9SVEhBU0gyICYmCisgICAgIGdpdCByZXBsYWNlICRTSE9SVEhBU0gyICRSICYmCisgICAgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIk8gVGhvciIgJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgJEhBU0gyICRSICYmCisgICAgIGdpdCByZXBsYWNlIC1mICRIQVNIMiAkUiAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAtLWZvcmNlICYmCisgICAgIHRlc3QgIiRIQVNIMiIgPSAiJChnaXQgcmVwbGFjZSkiCisnCisKKyMgVGhpcyBjcmVhdGVzIGEgc2lkZSBicmFuY2ggd2hlcmUgdGhlIGJ1ZyBpbiBIMgorIyBkb2VzIG5vdCBhcHBlYXIgYmVjYXVzZSBQMiBpcyBjcmVhdGVkIGJ5IGFwcGx5aW5nCisjIEgyIGFuZCBzcXVhc2hpbmcgSDUgaW50byBpdC4KKyMgUDMsIFA0IGFuZCBQNiBhcmUgY3JlYXRlZCBieSBjaGVycnktcGlja2luZyBIMywgSDQKKyMgYW5kIEg2IHJlc3BlY3RpdmVseS4KKyMKKyMgQXQgdGhpcyBwb2ludCwgd2Ugc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgUDItLVAzLS1QNC0tUDYKKyMgICAvCisjIEgxLUgyLUgzLUg0LUg1LUg2LUg3CisjCisjIFRoZW4gd2UgcmVwbGFjZSBINiB3aXRoIFA2LgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIHBhcmFsbGVsIGJyYW5jaCB3aXRob3V0IHRoZSBidWcnICcKKyAgICAgZ2l0IHJlcGxhY2UgLWQgJEhBU0gyICYmCisgICAgIGdpdCBzaG93ICRIQVNIMiB8IGdyZXAgIkEgVSBUaG9yIiAmJgorICAgICBnaXQgY2hlY2tvdXQgJEhBU0gxICYmCisgICAgIGdpdCBjaGVycnktcGljayAkSEFTSDIgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0g1IHwgZ2l0IGFwcGx5ICYmCisgICAgIGdpdCBjb21taXQgLS1hbWVuZCAtbSAiaGVsbG86IDQgbW9yZSBsaW5lcyBXSVRIT1VUIHRoZSBidWciIGhlbGxvICYmCisgICAgIFBBUkEyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBnaXQgY2hlcnJ5LXBpY2sgJEhBU0gzICYmCisgICAgIFBBUkEzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBnaXQgY2hlcnJ5LXBpY2sgJEhBU0g0ICYmCisgICAgIFBBUkE0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBnaXQgY2hlcnJ5LXBpY2sgJEhBU0g2ICYmCisgICAgIFBBUkE2PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICBnaXQgcmVwbGFjZSAkSEFTSDYgJFBBUkE2ICYmCisgICAgIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKyAgICAgY3VyPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorICAgICB0ZXN0ICIkY3VyIiA9ICIkSEFTSDciICYmCisgICAgIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgJFBBUkEyICYmCisgICAgIGdpdCByZW1vdGUgYWRkIGNsb25lZCAuL2Nsb25lX2RpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdXNoIHRvIGNsb25lZCByZXBvJyAnCisgICAgIGdpdCBwdXNoIGNsb25lZCAkSEFTSDZeOnJlZnMvaGVhZHMvcGFyYWxsZWwgJiYKKyAgICAgKAorCSAgY2QgY2xvbmVfZGlyICYmCisJICBnaXQgY2hlY2tvdXQgcGFyYWxsZWwgJiYKKwkgIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSB8IGdyZXAgJFBBUkEyCisgICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHVzaCBicmFuY2ggd2l0aCByZXBsYWNlbWVudCcgJworICAgICBnaXQgY2F0LWZpbGUgY29tbWl0ICRQQVJBMyB8IGdyZXAgImF1dGhvciBBIFUgVGhvciIgJiYKKyAgICAgUz0kKGdpdCBjYXQtZmlsZSBjb21taXQgJFBBUkEzIHwgc2VkIC1lICJzL0EgVS9PLyIgfCBnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC0tc3RkaW4gLXcpICYmCisgICAgIGdpdCBjYXQtZmlsZSBjb21taXQgJFMgfCBncmVwICJhdXRob3IgTyBUaG9yIiAmJgorICAgICBnaXQgcmVwbGFjZSAkUEFSQTMgJFMgJiYKKyAgICAgZ2l0IHNob3cgJEhBU0g2fjIgfCBncmVwICJPIFRob3IiICYmCisgICAgIGdpdCBzaG93ICRQQVJBMyB8IGdyZXAgIk8gVGhvciIgJiYKKyAgICAgZ2l0IHB1c2ggY2xvbmVkICRIQVNINl46cmVmcy9oZWFkcy9wYXJhbGxlbDIgJiYKKyAgICAgKAorCSAgY2QgY2xvbmVfZGlyICYmCisJICBnaXQgY2hlY2tvdXQgcGFyYWxsZWwyICYmCisJICBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgfCBncmVwICRQQVJBMyAmJgorCSAgZ2l0IHNob3cgJFBBUkEzIHwgZ3JlcCAiQSBVIFRob3IiCisgICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggYnJhbmNoIHdpdGggcmVwbGFjZW1lbnQnICcKKyAgICAgZ2l0IGJyYW5jaCB0b2ZldGNoICRIQVNINiAmJgorICAgICAoCisJICBjZCBjbG9uZV9kaXIgJiYKKwkgIGdpdCBmZXRjaCBvcmlnaW4gcmVmcy9oZWFkcy90b2ZldGNoOnJlZnMvaGVhZHMvcGFyYWxsZWwzICYmCisJICBnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcGFyYWxsZWwzID5vdXRwdXQudHh0ICYmCisJICAhIGdyZXAgJFBBUkEzIG91dHB1dC50eHQgJiYKKwkgIGdpdCBzaG93ICRQQVJBMyA+cGFyYTMudHh0ICYmCisJICBncmVwICJBIFUgVGhvciIgcGFyYTMudHh0ICYmCisJICBnaXQgZmV0Y2ggb3JpZ2luICJyZWZzL3JlcGxhY2UvKjpyZWZzL3JlcGxhY2UvKiIgJiYKKwkgIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSBwYXJhbGxlbDMgPm91dHB1dC50eHQgJiYKKwkgIGdyZXAgJFBBUkEzIG91dHB1dC50eHQgJiYKKwkgIGdpdCBzaG93ICRQQVJBMyA+cGFyYTMudHh0ICYmCisJICBncmVwICJPIFRob3IiIHBhcmEzLnR4dAorICAgICApCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jpc2VjdCBhbmQgcmVwbGFjZW1lbnRzJyAnCisgICAgIGdpdCBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorICAgICB0ZXN0ICIkUEFSQTMiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKyAgICAgZ2l0IGJpc2VjdCByZXNldCAmJgorICAgICBHSVRfTk9fUkVQTEFDRV9PQkpFQ1RTPTEgZ2l0IGJpc2VjdCBzdGFydCAkSEFTSDcgJEhBU0gxICYmCisgICAgIHRlc3QgIiRIQVNINCIgPSAiJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpIiAmJgorICAgICBnaXQgYmlzZWN0IHJlc2V0ICYmCisgICAgIGdpdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyBiaXNlY3Qgc3RhcnQgJEhBU0g3ICRIQVNIMSAmJgorICAgICB0ZXN0ICIkSEFTSDQiID0gIiQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSIgJiYKKyAgICAgZ2l0IGJpc2VjdCByZXNldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRleC1wYWNrIGFuZCByZXBsYWNlbWVudHMnICcKKwlnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgcmV2LWxpc3QgLS1vYmplY3RzIEhFQUQgfAorCWdpdCAtLW5vLXJlcGxhY2Utb2JqZWN0cyBwYWNrLW9iamVjdHMgdGVzdC0gJiYKKwlnaXQgaW5kZXgtcGFjayB0ZXN0LSoucGFjaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QganVzdCBjb21taXRzJyAnCisJZWNobyByZXBsYWNlZCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCVJFUExBQ0VEPSQoZ2l0IHJldi1wYXJzZSA6ZmlsZSkgJiYKKwltdiBmaWxlIGZpbGUucmVwbGFjZWQgJiYKKworCWVjaG8gb3JpZ2luYWwgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlPUklHSU5BTD0kKGdpdCByZXYtcGFyc2UgOmZpbGUpICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZXBsYWNlLyRPUklHSU5BTCAkUkVQTEFDRUQgJiYKKwltdiBmaWxlIGZpbGUub3JpZ2luYWwgJiYKKworCWdpdCBjaGVja291dCBmaWxlICYmCisJdGVzdF9jbXAgZmlsZS5yZXBsYWNlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2VkIGFuZCByZXBsYWNlbWVudCBvYmplY3RzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIG15dGFnICRIQVNIMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIEhFQURee3RyZWV9IEhFQUR+MSAmJgorCUJMT0I9JChnaXQgcmV2LXBhcnNlIDpmaWxlKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIEhFQUReICRCTE9CCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1mIG9wdGlvbiBieXBhc3NlcyB0aGUgdHlwZSBjaGVjaycgJworCWdpdCByZXBsYWNlIC1mIG15dGFnICRIQVNIMSAmJgorCWdpdCByZXBsYWNlIC0tZm9yY2UgSEVBRF57dHJlZX0gSEVBRH4xICYmCisJZ2l0IHJlcGxhY2UgLWYgSEVBRF4gJEJMT0IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNhdC1maWxlIC0tYmF0Y2ggd29ya3Mgb24gcmVwbGFjZSBvYmplY3RzJyAnCisJZ2l0IHJlcGxhY2UgfCBncmVwICRQQVJBMyAmJgorCWVjaG8gJFBBUkEzIHwgZ2l0IGNhdC1maWxlIC0tYmF0Y2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAtLWZvcm1hdCBib2d1cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXBsYWNlIC0tZm9ybWF0IGJvZ3VzID4vZGV2L251bGwgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tZm9ybWF0IHNob3J0JyAnCisJZ2l0IHJlcGxhY2UgLS1mb3JtYXQ9c2hvcnQgPmFjdHVhbCAmJgorCWdpdCByZXBsYWNlID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IC0tZm9ybWF0IG1lZGl1bScgJworCUgxPSQoZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIHJldi1wYXJzZSBIRUFEfjEpICYmCisJSFQ9JChnaXQgLS1uby1yZXBsYWNlLW9iamVjdHMgcmV2LXBhcnNlIEhFQURee3RyZWV9KSAmJgorCU1ZVEFHPSQoZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIHJldi1wYXJzZSBteXRhZykgJiYKKwl7CisJCWVjaG8gIiRIMSAtPiAkQkxPQiIgJiYKKwkJZWNobyAiJEJMT0IgLT4gJFJFUExBQ0VEIiAmJgorCQllY2hvICIkSFQgLT4gJEgxIiAmJgorCQllY2hvICIkUEFSQTMgLT4gJFMiICYmCisJCWVjaG8gIiRNWVRBRyAtPiAkSEFTSDEiCisJfSB8IHNvcnQgPmV4cGVjdGVkICYmCisJZ2l0IHJlcGxhY2UgLWwgLS1mb3JtYXQgbWVkaXVtIHwgc29ydCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1mb3JtYXQgbG9uZycgJworCXsKKwkJZWNobyAiJEgxIChjb21taXQpIC0+ICRCTE9CIChibG9iKSIgJiYKKwkJZWNobyAiJEJMT0IgKGJsb2IpIC0+ICRSRVBMQUNFRCAoYmxvYikiICYmCisJCWVjaG8gIiRIVCAodHJlZSkgLT4gJEgxIChjb21taXQpIiAmJgorCQllY2hvICIkUEFSQTMgKGNvbW1pdCkgLT4gJFMgKGNvbW1pdCkiICYmCisJCWVjaG8gIiRNWVRBRyAodGFnKSAtPiAkSEFTSDEgKGNvbW1pdCkiCisJfSB8IHNvcnQgPmV4cGVjdGVkICYmCisJZ2l0IHJlcGxhY2UgLS1mb3JtYXQ9bG9uZyB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIGZha2UgZWRpdG9yJyAnCisJd3JpdGVfc2NyaXB0IGZha2VlZGl0b3IgPDwtXEVPRgorCQlzZWQgLWUgInMvQSBVIFRob3IvQSBmYWtlIFRob3IvIiAiJDEiID4iJDEubmV3IgorCQltdiAiJDEubmV3IiAiJDEiCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZWRpdCB3aXRoIGFuZCB3aXRob3V0IGFscmVhZHkgcmVwbGFjZWQgb2JqZWN0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZW52IEdJVF9FRElUT1I9Li9mYWtlZWRpdG9yIGdpdCByZXBsYWNlIC0tZWRpdCAiJFBBUkEzIiAmJgorCUdJVF9FRElUT1I9Li9mYWtlZWRpdG9yIGdpdCByZXBsYWNlIC0tZm9yY2UgLS1lZGl0ICIkUEFSQTMiICYmCisJZ2l0IHJlcGxhY2UgLWwgfCBncmVwICIkUEFSQTMiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJFBBUkEzIiB8IGdyZXAgIkEgZmFrZSBUaG9yIiAmJgorCWdpdCByZXBsYWNlIC1kICIkUEFSQTMiICYmCisJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0IHJlcGxhY2UgLS1lZGl0ICIkUEFSQTMiICYmCisJZ2l0IHJlcGxhY2UgLWwgfCBncmVwICIkUEFSQTMiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCAiJFBBUkEzIiB8IGdyZXAgIkEgZmFrZSBUaG9yIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWVkaXQgYW5kIGNoYW5nZSBub3RoaW5nIG9yIGNvbW1hbmQgZmFpbGVkJyAnCisJZ2l0IHJlcGxhY2UgLWQgIiRQQVJBMyIgJiYKKwl0ZXN0X211c3RfZmFpbCBlbnYgR0lUX0VESVRPUj10cnVlIGdpdCByZXBsYWNlIC0tZWRpdCAiJFBBUkEzIiAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRURJVE9SPSIuL2Zha2VlZGl0b3I7ZmFsc2UiIGdpdCByZXBsYWNlIC0tZWRpdCAiJFBBUkEzIiAmJgorCUdJVF9FRElUT1I9Li9mYWtlZWRpdG9yIGdpdCByZXBsYWNlIC0tZWRpdCAiJFBBUkEzIiAmJgorCWdpdCByZXBsYWNlIC1sIHwgZ3JlcCAiJFBBUkEzIiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgIiRQQVJBMyIgfCBncmVwICJBIGZha2UgVGhvciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbGFjZSByZWYgY2xlYW51cCcgJworCXRlc3QgLW4gIiQoZ2l0IHJlcGxhY2UpIiAmJgorCWdpdCByZXBsYWNlIC1kICQoZ2l0IHJlcGxhY2UpICYmCisJdGVzdCAteiAiJChnaXQgcmVwbGFjZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZ3JhZnQgd2l0aCBhbmQgd2l0aG91dCBhbHJlYWR5IHJlcGxhY2VkIG9iamVjdCcgJworCXRlc3QgJChnaXQgbG9nIC0tb25lbGluZSB8IHdjIC1sKSA9IDcgJiYKKwlnaXQgcmVwbGFjZSAtLWdyYWZ0ICRIQVNINSAmJgorCXRlc3QgJChnaXQgbG9nIC0tb25lbGluZSB8IHdjIC1sKSA9IDMgJiYKKwljb21taXRfaGFzX3BhcmVudHMgJEhBU0g1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlcGxhY2UgLS1ncmFmdCAkSEFTSDUgJEhBU0g0ICRIQVNIMyAmJgorCWdpdCByZXBsYWNlIC0tZm9yY2UgLWcgJEhBU0g1ICRIQVNINCAkSEFTSDMgJiYKKwljb21taXRfaGFzX3BhcmVudHMgJEhBU0g1ICRIQVNINCAkSEFTSDMgJiYKKwlnaXQgcmVwbGFjZSAtZCAkSEFTSDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3NldCB1cCBhIHNpZ25lZCBjb21taXQnICcKKwllY2hvICJsaW5lIDE3IiA+PmhlbGxvICYmCisJZWNobyAibGluZSAxOCIgPj5oZWxsbyAmJgorCWdpdCBhZGQgaGVsbG8gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tcXVpZXQgLVMgLW0gImhlbGxvOiAyIG1vcmUgbGluZXMgaW4gYSBzaWduZWQgY29tbWl0IiAmJgorCUhBU0g4PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCWdpdCB2ZXJpZnktY29tbWl0ICRIQVNIOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnLS1ncmFmdCB3aXRoIGEgc2lnbmVkIGNvbW1pdCcgJworCWdpdCBjYXQtZmlsZSBjb21taXQgJEhBU0g4ID5vcmlnICYmCisJZ2l0IHJlcGxhY2UgLS1ncmFmdCAkSEFTSDggJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICRIQVNIOCA+cmVwbCAmJgorCWNvbW1pdF9oYXNfcGFyZW50cyAkSEFTSDggJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LWNvbW1pdCAkSEFTSDggJiYKKwlzZWQgLW4gLWUgIi9edHJlZSAvcCIgLWUgIi9eYXV0aG9yIC9wIiAtZSAiL15jb21taXR0ZXIgL3AiIG9yaWcgPmV4cGVjdGVkICYmCisJZWNobyA+PmV4cGVjdGVkICYmCisJc2VkIC1lICIvXiQvcSIgcmVwbCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IHJlcGxhY2UgLWQgJEhBU0g4CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzZXQgdXAgYSBtZXJnZSBjb21taXQgd2l0aCBhIG1lcmdldGFnJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3RfYnJhbmNoIEhFQUR+MiAmJgorCWVjaG8gImxpbmUgMSBmcm9tIHRlc3QgYnJhbmNoIiA+PmhlbGxvICYmCisJZWNobyAibGluZSAyIGZyb20gdGVzdCBicmFuY2giID4+aGVsbG8gJiYKKwlnaXQgYWRkIGhlbGxvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiaGVsbG86IDIgbW9yZSBsaW5lcyBmcm9tIGEgdGVzdCBicmFuY2giICYmCisJSEFTSDk9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJZ2l0IHRhZyAtcyAtbSAidGFnIGZvciB0ZXN0aW5nIHdpdGggYSBtZXJnZXRhZyIgdGVzdF90YWcgSEVBRCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyB0ZXN0X3RhZyAmJgorCUhBU0gxMD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0ICRIQVNIMTAgfCBncmVwICJebWVyZ2V0YWcgb2JqZWN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnLS1ncmFmdCBvbiBhIGNvbW1pdCB3aXRoIGEgbWVyZ2V0YWcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVwbGFjZSAtLWdyYWZ0ICRIQVNIMTAgJEhBU0g4XjEgJiYKKwlnaXQgcmVwbGFjZSAtLWdyYWZ0ICRIQVNIMTAgJEhBU0g4XjEgJEhBU0g5ICYmCisJZ2l0IHJlcGxhY2UgLWQgJEhBU0gxMAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYwNjAtbWVyZ2UtaW5kZXguc2ggYi90L3Q2MDYwLW1lcmdlLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRlYmFkYmQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MDYwLW1lcmdlLWluZGV4LnNoCkBAIC0wLDAgKzEsMTAwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgZ2l0IG1lcmdlLWluZGV4IC8gZ2l0LW1lcmdlLW9uZS1maWxlIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpdmVyZ2luZyBicmFuY2hlcycgJworCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwOyBkbworCQllY2hvICRpCisJZG9uZSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gYmFzZSAmJgorCWdpdCB0YWcgYmFzZSAmJgorCXNlZCBzLzIvdHdvLyA8ZmlsZSA+dG1wICYmCisJbXYgdG1wIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHR3byAmJgorCWdpdCB0YWcgdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1iIG90aGVyIEhFQUReICYmCisJc2VkIHMvMTAvdGVuLyA8ZmlsZSA+dG1wICYmCisJbXYgdG1wIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHRlbiAmJgorCWdpdCB0YWcgdGVuCisnCisKK2NhdCA+ZXhwZWN0LW1lcmdlZCA8PCdFT0YnCisxCit0d28KKzMKKzQKKzUKKzYKKzcKKzgKKzkKK3RlbgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWQtdHJlZSBkb2VzIG5vdCByZXNvbHZlIGNvbnRlbnQgbWVyZ2UnICcKKwlnaXQgcmVhZC10cmVlIC1pIC1tIGJhc2UgdGVuIHR3byAmJgorCWVjaG8gZmlsZSA+ZXhwZWN0ICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1uYW1lLW9ubHkgLS1kaWZmLWZpbHRlcj1VID51bm1lcmdlZCAmJgorCXRlc3RfY21wIGV4cGVjdCB1bm1lcmdlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIHJlc29sdmVzJyAnCisJZ2l0IG1lcmdlLWluZGV4IGdpdC1tZXJnZS1vbmUtZmlsZSAtYSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9VSA+dW5tZXJnZWQgJiYKKwk+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IHVubWVyZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0LW1lcmdlZCBmaWxlICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOmZpbGUgPmZpbGUtaW5kZXggJiYKKwl0ZXN0X2NtcCBleHBlY3QtbWVyZ2VkIGZpbGUtaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYmFyZSBtZXJnZScgJworCWdpdCBjbG9uZSAtLWJhcmUgLiBiYXJlLmdpdCAmJgorCShjZCBiYXJlLmdpdCAmJgorCSBHSVRfSU5ERVhfRklMRT0kUFdEL21lcmdlLmluZGV4ICYmCisJIGV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCSBnaXQgcmVhZC10cmVlIC1pIC1tIGJhc2UgdGVuIHR3bworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Utb25lLWZpbGUgZmFpbHMgd2l0aG91dCBhIHdvcmsgdHJlZScgJworCShjZCBiYXJlLmdpdCAmJgorCSBHSVRfSU5ERVhfRklMRT0kUFdEL21lcmdlLmluZGV4ICYmCisJIGV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIC1hCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1vbmUtZmlsZSByZXNwZWN0cyBHSVRfV09SS19UUkVFJyAnCisJKGNkIGJhcmUuZ2l0ICYmCisJIG1rZGlyIHdvcmsgJiYKKwkgR0lUX1dPUktfVFJFRT0kUFdEL3dvcmsgJiYKKwkgZXhwb3J0IEdJVF9XT1JLX1RSRUUgJiYKKwkgR0lUX0lOREVYX0ZJTEU9JFBXRC9tZXJnZS5pbmRleCAmJgorCSBleHBvcnQgR0lUX0lOREVYX0ZJTEUgJiYKKwkgZ2l0IG1lcmdlLWluZGV4IGdpdC1tZXJnZS1vbmUtZmlsZSAtYSAmJgorCSBnaXQgY2F0LWZpbGUgYmxvYiA6ZmlsZSA+d29yay9maWxlLWluZGV4CisJKSAmJgorCXRlc3RfY21wIGV4cGVjdC1tZXJnZWQgYmFyZS5naXQvd29yay9maWxlICYmCisJdGVzdF9jbXAgZXhwZWN0LW1lcmdlZCBiYXJlLmdpdC93b3JrL2ZpbGUtaW5kZXgKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Utb25lLWZpbGUgcmVzcGVjdHMgY29yZS53b3JrdHJlZScgJworCW1rZGlyIHN1YmRpciAmJgorCWdpdCBjbG9uZSAuIHN1YmRpci9jaGlsZCAmJgorCShjZCBzdWJkaXIgJiYKKwkgR0lUX0RJUj0kUFdEL2NoaWxkLy5naXQgJiYKKwkgZXhwb3J0IEdJVF9ESVIgJiYKKwkgZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlICIkUFdEL2NoaWxkIiAmJgorCSBnaXQgcmVhZC10cmVlIC1pIC1tIGJhc2UgdGVuIHR3byAmJgorCSBnaXQgbWVyZ2UtaW5kZXggZ2l0LW1lcmdlLW9uZS1maWxlIC1hICYmCisJIGdpdCBjYXQtZmlsZSBibG9iIDpmaWxlID5maWxlLWluZGV4CisJKSAmJgorCXRlc3RfY21wIGV4cGVjdC1tZXJnZWQgc3ViZGlyL2NoaWxkL2ZpbGUgJiYKKwl0ZXN0X2NtcCBleHBlY3QtbWVyZ2VkIHN1YmRpci9maWxlLWluZGV4CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjEwMS1yZXYtcGFyc2UtcGFyZW50cy5zaCBiL3QvdDYxMDEtcmV2LXBhcnNlLXBhcmVudHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTBiMTQ1MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMDEtcmV2LXBhcnNlLXBhcmVudHMuc2gKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSm9oYW5uZXMgU2NoaW5kZWxpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGdpdCByZXYtcGFyc2Ugd2l0aCBkaWZmZXJlbnQgcGFyZW50IG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2NtcF9yZXZfb3V0cHV0ICgpIHsKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICIkMSIgPmV4cGVjdCAmJgorCWV2YWwgIiQyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IHN0YXJ0ICYmCisJdGVzdF9jb21taXQgc2Vjb25kICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHRtcCAmJgorCXRlc3RfY29tbWl0IHN0YXJ0MiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2UgLW0gbmV4dCBzdGFydDIgJiYKKwl0ZXN0X2NvbW1pdCBmaW5hbCAmJgorCisJdGVzdF9zZXEgNDAgfAorCXdoaWxlIHJlYWQgaQorCWRvCisJCWdpdCBjaGVja291dCAtLW9ycGhhbiAiYiRpIiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICIkaSIgJiYKKwkJY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCQlwcmludGYgIiRjb21taXQgIiA+Pi5naXQvaW5mby9ncmFmdHMKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IGlzIHZhbGlkJyAnCisJZ2l0IHJldi1wYXJzZSBzdGFydCB8IGdyZXAgIl5bMC05YS1mXVx7NDBcfSQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0XjAnICcKKwl0ZXN0X2NtcF9yZXZfb3V0cHV0IHRhZ3Mvc3RhcnQgImdpdCByZXYtcGFyc2Ugc3RhcnReMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnReMSBub3QgdmFsaWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHN0YXJ0XjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2Vjb25kXjEgPSBzZWNvbmReJyAnCisJdGVzdF9jbXBfcmV2X291dHB1dCBzZWNvbmReICJnaXQgcmV2LXBhcnNlIHNlY29uZF4xIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5hbF4xXjFeMScgJworCXRlc3RfY21wX3Jldl9vdXRwdXQgc3RhcnQgImdpdCByZXYtcGFyc2UgZmluYWxeMV4xXjEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeMV4xID0gZmluYWxeXl4nICcKKwl0ZXN0X2NtcF9yZXZfb3V0cHV0IGZpbmFsXl5eICJnaXQgcmV2LXBhcnNlIGZpbmFsXjFeMV4xIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5hbF4xXjInICcKKwl0ZXN0X2NtcF9yZXZfb3V0cHV0IHN0YXJ0MiAiZ2l0IHJldi1wYXJzZSBmaW5hbF4xXjIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeMiAhPSBmaW5hbF4xXjEnICcKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBmaW5hbF4xXjIpICE9ICQoZ2l0IHJldi1wYXJzZSBmaW5hbF4xXjEpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeMyBub3QgdmFsaWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGZpbmFsXjFeMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXZlcmlmeSBzdGFydDJeMScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc3RhcnQyXjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS12ZXJpZnkgc3RhcnQyXjAnICcKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHN0YXJ0Ml4wCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeQCA9IGZpbmFsXjFeMSBmaW5hbF4xXjInICcKKwlnaXQgcmV2LXBhcnNlIGZpbmFsXjFeMSBmaW5hbF4xXjIgPmV4cGVjdCAmJgorCWdpdCByZXYtcGFyc2UgZmluYWxeMV5AID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbmFsXjFeISA9IGZpbmFsXjEgXmZpbmFsXjFeMSBeZmluYWxeMV4yJyAnCisJZ2l0IHJldi1wYXJzZSBmaW5hbF4xIF5maW5hbF4xXjEgXmZpbmFsXjFeMiA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBmaW5hbF4xXiEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGFyZ2UgZ3JhZnQgb2N0b3B1cycgJworCXRlc3RfY21wX3Jldl9vdXRwdXQgYjMxICJnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGIxXjMwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXBhY2sgZm9yIG5leHQgdGVzdCcgJworCWdpdCByZXBhY2sgLWEgLWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnQgU0hBLTEgd29ya3MnICcKKwlzdGFydD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgc3RhcnQpICYmCisJdGVzdF9jbXBfcmV2X291dHB1dCBzdGFydCAiZ2l0IHJldi1wYXJzZSAke3N0YXJ0JT99IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMTAtcmV2LWxpc3Qtc3BhcnNlLnNoIGIvdC90NjExMC1yZXYtbGlzdC1zcGFyc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjU2YWM3ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMTAtcmV2LWxpc3Qtc3BhcnNlLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdvcGVyYXRpb25zIHRoYXQgY3VsbCBoaXN0b3JpZXMgaW4gdW51c3VhbCB3YXlzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IEEgJiYKKwl0ZXN0X2NvbW1pdCBCICYmCisJdGVzdF9jb21taXQgQyAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReICYmCisJdGVzdF9jb21taXQgRCAmJgorCXRlc3RfY29tbWl0IEUgJiYKKwlnaXQgbWVyZ2UgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jldi1saXN0IC0tZmlyc3QtcGFyZW50IC0tYm91bmRhcnknICcKKwlnaXQgcmV2LWxpc3QgLS1maXJzdC1wYXJlbnQgLS1ib3VuZGFyeSBIRUFEXi4uCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjExMS1yZXYtbGlzdC10cmVlc2FtZS5zaCBiL3QvdDYxMTEtcmV2LWxpc3QtdHJlZXNhbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzI0NzRjMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMTEtcmV2LWxpc3QtdHJlZXNhbWUuc2gKQEAgLTAsMCArMSwxOTMgQEAKKyMhL2Jpbi9zaAorIworIyAgICAgICAgLC0tLUUtLS4gICAqSC0tLS0tLS0tLS0uICAgICAgICAgICAgICogbWFya3MgIVRSRUVTQU1FIHBhcmVudCBwYXRocworIyAgICAgICAvICAgICAgICBcIC8gICAgICAgICAgICAgXCoKKyMgKkEtLSpCLS0tRC0tKkYtKkctLS0tLS0tLS1LLSpMLSpNCisjICAgXCAgICAgLyogICAgICAgXCAgICAgICAvCisjICAgIGAtQy0nICAgICAgICAgIGAtKkktKkoKKyMKKyMgQSBjcmVhdGVzICJmaWxlIiwgQiBhbmQgRiBjaGFuZ2UgaXQuCisjIE9kZCBtZXJnZSBHIHRha2VzIHRoZSBvbGQgdmVyc2lvbiBmcm9tIEIuCisjIEkgY2hhbmdlcyBpdCwgYnV0IEogcmV2ZXJ0cyBpdCwgc28gSyBpcyBUUkVFU0FNRSB0byBib3RoIHBhcmVudHMuCisjIEggYW5kIEwgYm90aCBjaGFuZ2UgImZpbGUiLCBhbmQgTSBtZXJnZXMgdGhvc2UgY2hhbmdlcy4KKwordGVzdF9kZXNjcmlwdGlvbj0nVFJFRVNBTUUgYW5kIGxpbWl0aW5nJworCisuIC4vdGVzdC1saWIuc2gKKworbm90ZSAoKSB7CisJZ2l0IHRhZyAiJDEiCit9CisKK3Vubm90ZSAoKSB7CisJZ2l0IG5hbWUtcmV2IC0tdGFncyAtLXN0ZGluIHwgc2VkIC1lICJzfCRfeDQwICh0YWdzL1woW14pXSpcKSlcKFsgCV1cKXxcMVwyfGciCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0ICJJbml0aWFsIGZpbGUiIGZpbGUgIkhpIHRoZXJlIiBBICYmCisJZ2l0IGJyYW5jaCBvdGhlci1icmFuY2ggJiYKKworCXRlc3RfY29tbWl0ICJmaWxlPUhlbGxvIiBmaWxlICJIZWxsbyIgQiAmJgorCWdpdCBicmFuY2ggdGhpcmQtYnJhbmNoICYmCisKKwlnaXQgY2hlY2tvdXQgb3RoZXItYnJhbmNoICYmCisJdGVzdF9jb21taXQgIkFkZGVkIG90aGVyIiBvdGhlciAiSGVsbG8iIEMgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X21lcmdlIEQgb3RoZXItYnJhbmNoICYmCisKKwlnaXQgY2hlY2tvdXQgdGhpcmQtYnJhbmNoICYmCisJdGVzdF9jb21taXQgIlRoaXJkIGZpbGUiIHRoaXJkICJOb3RoaW5nIiBFICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgImZpbGU9QmxhaCIgZmlsZSAiQmxhaCIgRiAmJgorCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtLW5vLWNvbW1pdCB0aGlyZC1icmFuY2ggJiYKKwlnaXQgY2hlY2tvdXQgdGhpcmQtYnJhbmNoIGZpbGUgJiYKKwlnaXQgY29tbWl0ICYmCisJbm90ZSBHICYmCisJZ2l0IGJyYW5jaCBmaWRkbGVyLWJyYW5jaCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHBhcnQyLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0ICJmaWxlPVBhcnQgMiIgZmlsZSAiUGFydCAyIiBIICYmCisKKwlnaXQgY2hlY2tvdXQgZmlkZGxlci1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCAiQmFkIGNvbW1pdCIgZmlsZSAiU2lsbHkiIEkgJiYKKworCXRlc3RfdGljayAmJiBnaXQgcmV2ZXJ0IEkgJiYgbm90ZSBKICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtLW5vLWZmIGZpZGRsZXItYnJhbmNoICYmCisJbm90ZSBLICYmCisKKwl0ZXN0X2NvbW1pdCAiZmlsZT1QYXJ0IDEiIGZpbGUgIlBhcnQgMSIgTCAmJgorCisJdGVzdF90aWNrICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBwYXJ0Mi1icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBNIGZpbGUgIlBhcnRzIDErMiIKKycKKworY2hlY2tfb3V0Y29tZSAoKSB7CisJb3V0Y29tZT0kMQorCXNoaWZ0CisKKwljYXNlICIkMSIgaW4KKwkqIigiKikKKwkJRk1UPSIlUAklSCB8ICVzIgorCQltdW5nZV9hY3R1YWw9IgorCQkJcy9eXChbXgldKlwpCVwoW14gXSpcKSAuKi8oXDEpXDIvCisJCQlzLyAvL2cKKwkJCXMvKCkvLworCQkiCisJCTs7CisJKikKKwkJRk1UPSIlSCB8ICVzIgorCQltdW5nZV9hY3R1YWw9InMvXlwoW14gXSpcKSAuKi9cMS8iCisJCTs7CisJZXNhYyAmJgorCXByaW50ZiAiJXNcbiIgJDEgPmV4cGVjdCAmJgorCXNoaWZ0CisKKwlwYXJhbT0iJCoiICYmCisJdGVzdF9leHBlY3RfJG91dGNvbWUgImxvZyAkcGFyYW0iICcKKwkJZ2l0IGxvZyAtLWZvcm1hdD0iJEZNVCIgJHBhcmFtIHwKKwkJdW5ub3RlID5hY3R1YWwgJiYKKwkJc2VkIC1lICIkbXVuZ2VfYWN0dWFsIiA8YWN0dWFsID5jaGVjayAmJgorCQl0ZXN0X2NtcCBleHBlY3QgY2hlY2sKKwknCit9CisKK2NoZWNrX3Jlc3VsdCAoKSB7CisJY2hlY2tfb3V0Y29tZSBzdWNjZXNzICIkQCIKK30KKworIyBPZGQgbWVyZ2UgRyBkcm9wcyBhIGNoYW5nZSBpbiBGLiBJbXBvcnRhbnQgdGhhdCBHIGlzIGxpc3RlZCBpbiBhbGwKKyMgZXhjZXB0IHRoZSBtb3N0IGJhc2ljIGxpc3QuIEFjaGlldmluZyB0aGlzIG1lYW5zIG5vcm1hbCBtZXJnZSBEIHdpbGwgYWxzbyBiZQorIyBzaG93biBpbiBub3JtYWwgZnVsbC1oaXN0b3J5LCBhcyB3ZSBjYW4ndCBkaXN0aW5ndWlzaCB1bmxlc3Mgd2UgZG8gYQorIyBzaW1wbGlmaWNhdGlvbiBwYXNzLiBBZnRlciBzaW1wbGlmaWNhdGlvbiwgRCBpcyBkcm9wcGVkIGJ1dCBHIHJlbWFpbnMuCisjIEFsc28sIG1lcmdlIHNpbXBsaWZpY2F0aW9uIG9mIEcgc2hvdWxkIG5vdCBkcm9wIHRoZSBwYXJlbnQgQiB0aGF0IHRoZSBkZWZhdWx0CisjIHNpbXBsZSBoaXN0b3J5IGZvbGxvd3MuCitjaGVja19yZXN1bHQgJ00gTCBLIEogSSBIIEcgRiBFIEQgQyBCIEEnCitjaGVja19yZXN1bHQgJyhMSClNIChLKUwgKEdKKUsgKEkpSiAoRylJIChHKUggKEZFKUcgKEQpRiAoQilFIChCQylEIChBKUMgKEEpQiBBJworY2hlY2tfcmVzdWx0ICdNIEggTCBLIEogSSBHIEUgRiBEIEMgQiBBJyAtLXRvcG8tb3JkZXIKK2NoZWNrX3Jlc3VsdCAnTSBMIEggQiBBJyAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChCKUwgKEIpSCAoQSlCIEEnIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBKIEkgSCBHIEYgRCBCIEEnIC0tZnVsbC1oaXN0b3J5IC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEspTCAoR0opSyAoSSlKIChHKUkgKEcpSCAoRkIpRyAoRClGIChCQSlEIChBKUIgQScgLS1mdWxsLWhpc3RvcnkgLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEcpSCAoSilMIChJKUogKEcpSSAoRkIpRyAoQilGIChBKUIgQScgLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEwgSyBHIEYgRCBCIEEnIC0tZmlyc3QtcGFyZW50CitjaGVja19yZXN1bHQgJ00gTCBHIEYgQiBBJyAtLWZpcnN0LXBhcmVudCAtLSBmaWxlCisKKyMgQ2hlY2sgdGhhdCBvZGQgbWVyZ2UgRyByZW1haW5zIHNob3duIHdoZW4gRiBpcyB0aGUgYm90dG9tLgorY2hlY2tfcmVzdWx0ICdNIEwgSyBKIEkgSCBHIEUnIEYuLk0KK2NoZWNrX3Jlc3VsdCAnTSBIIEwgSyBKIEkgRyBFJyBGLi5NIC0tdG9wby1vcmRlcgorY2hlY2tfcmVzdWx0ICdNIEwgSCcgRi4uTSAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChCKUwgKEIpSCcgLS1wYXJlbnRzIEYuLk0gLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEwgSiBJIEggRycgRi4uTSAtLWZ1bGwtaGlzdG9yeSAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChLKUwgKEdKKUsgKEkpSiAoRylJIChHKUggKEZCKUcnIEYuLk0gLS1mdWxsLWhpc3RvcnkgLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKExIKU0gKEcpSCAoSilMIChJKUogKEcpSSAoRkIpRycgRi4uTSAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ00gTCBLIEogSSBIIEcnIEYuLk0gLS1hbmNlc3RyeS1wYXRoCitjaGVja19yZXN1bHQgJ00gTCBKIEkgSCBHJyBGLi5NIC0tYW5jZXN0cnktcGF0aCAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChLKUwgKEdKKUsgKEkpSiAoRylJIChHKUggKEZFKUcnIEYuLk0gLS1hbmNlc3RyeS1wYXRoIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhMSClNIChHKUggKEopTCAoSSlKIChHKUkgKEZFKUcnIEYuLk0gLS1hbmNlc3RyeS1wYXRoIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEsgRycgRi4uTSAtLWZpcnN0LXBhcmVudAorY2hlY2tfcmVzdWx0ICdNIEwgRycgRi4uTSAtLWZpcnN0LXBhcmVudCAtLSBmaWxlCisKKyMgTm90ZSB0aGF0IEcgaXMgcHJ1bmVkIHdoZW4gRSBpcyB0aGUgYm90dG9tLCBldmVuIGlmIGl0J3MgdGhlIHNhbWUgY29tbWl0IGxpc3QKKyMgSWYgd2Ugd2FudCBoaXN0b3J5IHNpbmNlIEUsIHRoZW4gd2UncmUgcXVpdGUgaGFwcHkgdG8gaWdub3JlIEcgdGhhdCB0b29rIEUuCitjaGVja19yZXN1bHQgJ00gTCBLIEogSSBIIEcnIEUuLk0gLS1hbmNlc3RyeS1wYXRoCitjaGVja19yZXN1bHQgJ00gTCBKIEkgSCcgRS4uTSAtLWFuY2VzdHJ5LXBhdGggLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoSylMIChFSilLIChJKUogKEUpSSAoRSlIJyBFLi5NIC0tYW5jZXN0cnktcGF0aCAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoRSlIIChKKUwgKEkpSiAoRSlJJyBFLi5NIC0tYW5jZXN0cnktcGF0aCAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCisKKyMgU2hvdWxkIHN0aWxsIGJlIGFibGUgdG8gaWdub3JlIEktSiBicmFuY2ggaW4gc2ltcGxlIGxvZywgZGVzcGl0ZSBsaW1pdGluZworIyB0byBHLgorY2hlY2tfcmVzdWx0ICdNIEwgSyBKIEkgSCcgRy4uTQorY2hlY2tfcmVzdWx0ICdNIEggTCBLIEogSScgRy4uTSAtLXRvcG8tb3JkZXIKK2NoZWNrX3Jlc3VsdCAnTSBMIEgnIEcuLk0gLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoTEgpTSAoRylMIChHKUgnIEcuLk0gLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEogSSBIJyBHLi5NIC0tZnVsbC1oaXN0b3J5IC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEsgSiBJIEgnIEcuLk0gLS1mdWxsLWhpc3RvcnkgLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBIIEwgSiBJJyBHLi5NIC0tc2ltcGxpZnktbWVyZ2VzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBMIEsgSiBJIEgnIEcuLk0gLS1hbmNlc3RyeS1wYXRoCitjaGVja19yZXN1bHQgJ00gTCBKIEkgSCcgRy4uTSAtLWFuY2VzdHJ5LXBhdGggLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdNIEwgSyBKIEkgSCcgRy4uTSAtLWFuY2VzdHJ5LXBhdGggLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnTSBIIEwgSiBJJyBHLi5NIC0tYW5jZXN0cnktcGF0aCAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCisKKyMgQi4uRiBzaG91bGQgYmUgYWJsZSB0byBzaW1wbGlmeSB0aGUgbWVyZ2UgRCBmcm9tIGlycmVsZXZhbnQgc2lkZSBicmFuY2ggQy4KKyMgRGVmYXVsdCBsb2cgc2hvdWxkIGFsc28gYmUgZnJlZSB0byBmb2xsb3cgQi1ELCBhbmQgaWdub3JlIEMuCisjIEJ1dCAtLWZ1bGwtaGlzdG9yeSBzaG91bGRuJ3QgZHJvcCBEIG9uIGl0cyBvd24gLSB3aXRob3V0IHNpbXBsaWZpY2F0aW9uLAorIyB3ZSBjYW4ndCBkZWNpZGUgaWYgdGhlIG1lcmdlIGZyb20gSU5URVJFU1RJTkcgY29tbWl0IEMgd2FzIHNlbnNpYmxlLgorY2hlY2tfcmVzdWx0ICdGIEQgQycgQi4uRgorY2hlY2tfcmVzdWx0ICdGJyBCLi5GIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKEIpRicgQi4uRiAtLXBhcmVudHMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQnIEIuLkYgLS1mdWxsLWhpc3RvcnkgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICcoRClGIChCQSlEJyBCLi5GIC0tZnVsbC1oaXN0b3J5IC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhCKUYnIEIuLkYgLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQnIEIuLkYgLS1hbmNlc3RyeS1wYXRoCitjaGVja19yZXN1bHQgJ0YnIEIuLkYgLS1hbmNlc3RyeS1wYXRoIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRicgQi4uRiAtLWFuY2VzdHJ5LXBhdGggLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRicgQi4uRiAtLWFuY2VzdHJ5LXBhdGggLS1zaW1wbGlmeS1tZXJnZXMgLS0gZmlsZQorY2hlY2tfcmVzdWx0ICdGIEQnIEIuLkYgLS1maXJzdC1wYXJlbnQKK2NoZWNrX3Jlc3VsdCAnRicgQi4uRiAtLWZpcnN0LXBhcmVudCAtLSBmaWxlCisKKyMgRS4uLkYgc2hvdWxkIGJlIGVxdWl2YWxlbnQgdG8gRSBGIF5CLCBhbmQgYmUgYWJsZSB0byBkcm9wIEQgYXMgYWJvdmUuCitjaGVja19yZXN1bHQgJ0YnIEUgRiBeQiAtLSBmaWxlICMgaW5jbHVkZXMgRAorY2hlY2tfcmVzdWx0ICdGJyBFLi4uRiAtLSBmaWxlICMgaW5jbHVkZXMgRAorCisjIEFueSBzb3J0IG9mIGZ1bGwgaGlzdG9yeSBvZiBDLi5GIHNob3VsZCBzaG93IEQsIGFzIGl0J3MgdGhlIGNvbm5lY3Rpb24gdG8gQywKKyMgYW5kIGl0IGRpZmZlcnMgZnJvbSBpdC4KK2NoZWNrX3Jlc3VsdCAnRiBEIEInIEMuLkYKK2NoZWNrX3Jlc3VsdCAnRiBCJyBDLi5GIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKEIpRiAoQSlCJyBDLi5GIC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YgRCBCJyBDLi5GIC0tZnVsbC1oaXN0b3J5IC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnKEQpRiAoQkMpRCAoQSlCJyBDLi5GIC0tZnVsbC1oaXN0b3J5IC0tcGFyZW50cyAtLSBmaWxlCitjaGVja19yZXN1bHQgJyhEKUYgKEJDKUQgKEEpQicgQy4uRiAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YgRCcgQy4uRiAtLWFuY2VzdHJ5LXBhdGgKK2NoZWNrX3Jlc3VsdCAnRiBEJyBDLi5GIC0tYW5jZXN0cnktcGF0aCAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YgRCcgQy4uRiAtLWFuY2VzdHJ5LXBhdGggLS1wYXJlbnRzIC0tIGZpbGUKK2NoZWNrX3Jlc3VsdCAnRiBEJyBDLi5GIC0tYW5jZXN0cnktcGF0aCAtLXNpbXBsaWZ5LW1lcmdlcyAtLSBmaWxlCitjaGVja19yZXN1bHQgJ0YgRCBCJyBDLi5GIC0tZmlyc3QtcGFyZW50CitjaGVja19yZXN1bHQgJ0YgQicgQy4uRiAtLWZpcnN0LXBhcmVudCAtLSBmaWxlCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MTIwLWRlc2NyaWJlLnNoIGIvdC90NjEyMC1kZXNjcmliZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NWYyNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjEyMC1kZXNjcmliZS5zaApAQCAtMCwwICsxLDIwOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZGVzY3JpYmUKKworICAgICAgICAgICAgICAgICAgICAgICBCCisgICAgICAgIC4tLS0tLS0tLS0tLS0tLW8tLS0tby0tLS1vLS0tLXgKKyAgICAgICAvICAgICAgICAgICAgICAgICAgIC8gICAgLworIG8tLS0tby0tLS1vLS0tLW8tLS0tby0tLS0uICAgIC8KKyAgICAgICBcICAgICAgICBBICAgIGMgICAgICAgIC8KKyAgICAgICAgLi0tLS0tLS0tLS0tLW8tLS1vLS0tbworICAgICAgICAgICAgICAgICAgIEQsUiAgIGUKKycKKy4gLi90ZXN0LWxpYi5zaAorCitjaGVja19kZXNjcmliZSAoKSB7CisJZXhwZWN0PSIkMSIKKwlzaGlmdAorCVI9JChnaXQgZGVzY3JpYmUgIiRAIiAyPmVyci5hY3R1YWwpCisJUz0kPworCWNhdCBlcnIuYWN0dWFsID4mMworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImRlc2NyaWJlICQqIiAnCisJdGVzdCAkUyA9IDAgJiYKKwljYXNlICIkUiIgaW4KKwkkZXhwZWN0KQllY2hvIGhhcHB5IDs7CisJKikJZWNobyAiT29wcyAtICRSIGlzIG5vdCAkZXhwZWN0IjsKKwkJZmFsc2UgOzsKKwllc2FjCisJJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCXRlc3RfdGljayAmJgorCWVjaG8gb25lID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlvbmU9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisKKwlnaXQgZGVzY3JpYmUgLS1hbHdheXMgSEVBRCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyB0d28gPmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmIGdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJdHdvPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyB0aHJlZSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYgZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBBID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIEEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIC1hIC1tIEEgQSAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBjID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJiBnaXQgY29tbWl0IC1tIGMgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIGMgJiYKKworCWdpdCByZXNldCAtLWhhcmQgJHR3byAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gQiA+c2lkZSAmJiBnaXQgYWRkIHNpZGUgJiYgZ2l0IGNvbW1pdCAtbSBCICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSBCIEIgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtbSBNZXJnZWQgYyAmJgorCW1lcmdlZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKworCWdpdCByZXNldCAtLWhhcmQgJHR3byAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gRCA+YW5vdGhlciAmJiBnaXQgYWRkIGFub3RoZXIgJiYgZ2l0IGNvbW1pdCAtbSBEICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHRhZyAtYSAtbSBEIEQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIC1hIC1tIFIgUiAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBERCA+YW5vdGhlciAmJiBnaXQgY29tbWl0IC1hIC1tIGFub3RoZXIgJiYKKworCXRlc3RfdGljayAmJgorCWdpdCB0YWcgZSAmJgorCisJdGVzdF90aWNrICYmCisJZWNobyBEREQgPmFub3RoZXIgJiYgZ2l0IGNvbW1pdCAtYSAtbSAieWV0IGFub3RoZXIiICYmCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLW0gTWVyZ2VkICRtZXJnZWQgJiYKKworCXRlc3RfdGljayAmJgorCWVjaG8gWCA+ZmlsZSAmJiBlY2hvIFggPnNpZGUgJiYgZ2l0IGFkZCBmaWxlIHNpZGUgJiYKKwlnaXQgY29tbWl0IC1tIHgKKworJworCitjaGVja19kZXNjcmliZSBBLSogSEVBRAorY2hlY2tfZGVzY3JpYmUgQS0qIEhFQUReCitjaGVja19kZXNjcmliZSBSLSogSEVBRF5eCitjaGVja19kZXNjcmliZSBBLSogSEVBRF5eMgorY2hlY2tfZGVzY3JpYmUgQiBIRUFEXl4yXgorY2hlY2tfZGVzY3JpYmUgUi0qIEhFQUReXl4KKworY2hlY2tfZGVzY3JpYmUgYy0qIC0tdGFncyBIRUFECitjaGVja19kZXNjcmliZSBjLSogLS10YWdzIEhFQUReCitjaGVja19kZXNjcmliZSBlLSogLS10YWdzIEhFQUReXgorY2hlY2tfZGVzY3JpYmUgYy0qIC0tdGFncyBIRUFEXl4yCitjaGVja19kZXNjcmliZSBCIC0tdGFncyBIRUFEXl4yXgorY2hlY2tfZGVzY3JpYmUgZSAtLXRhZ3MgSEVBRF5eXgorCitjaGVja19kZXNjcmliZSBoZWFkcy9tYXN0ZXIgLS1hbGwgSEVBRAorY2hlY2tfZGVzY3JpYmUgdGFncy9jLSogLS1hbGwgSEVBRF4KK2NoZWNrX2Rlc2NyaWJlIHRhZ3MvZSAtLWFsbCBIRUFEXl5eCisKK2NoZWNrX2Rlc2NyaWJlIEItMC0qIC0tbG9uZyBIRUFEXl4yXgorY2hlY2tfZGVzY3JpYmUgQS0zLSogLS1sb25nIEhFQUReXjIKKworY2hlY2tfZGVzY3JpYmUgYy03LSogLS10YWdzCitjaGVja19kZXNjcmliZSBlLTMtKiAtLWZpcnN0LXBhcmVudCAtLXRhZ3MKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpYmUgLS1jb250YWlucyBkZWZhdWx0cyB0byBIRUFEIHdpdGhvdXQgY29tbWl0LWlzaCcgJworCWVjaG8gIkFeMCIgPmV4cGVjdCAmJgorCWdpdCBjaGVja291dCBBICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLSIgJiYKKwlnaXQgZGVzY3JpYmUgLS1jb250YWlucyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCis6ID5lcnIuZXhwZWN0CitjaGVja19kZXNjcmliZSBBIC0tYWxsIEFeMAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gd2FybmluZyB3YXMgZGlzcGxheWVkIGZvciBBJyAnCisJdGVzdF9jbXAgZXJyLmV4cGVjdCBlcnIuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSB0YWcgQSB0byBRIGxvY2FsbHknICcKKwltdiAuZ2l0L3JlZnMvdGFncy9BIC5naXQvcmVmcy90YWdzL1EKKycKK2NhdCAtID5lcnIuZXhwZWN0IDw8RU9GCit3YXJuaW5nOiB0YWcgJ0EnIGlzIHJlYWxseSAnUScgaGVyZQorRU9GCitjaGVja19kZXNjcmliZSBBLSogSEVBRAordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2FybmluZyB3YXMgZGlzcGxheWVkIGZvciBRJyAnCisJdGVzdF9pMThuY21wIGVyci5leHBlY3QgZXJyLmFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHRhZyBRIGJhY2sgdG8gQScgJworCW12IC5naXQvcmVmcy90YWdzL1EgLmdpdC9yZWZzL3RhZ3MvQQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrIHRhZyByZWZzJyAnZ2l0IHBhY2stcmVmcycKK2NoZWNrX2Rlc2NyaWJlIEEtKiBIRUFECisKK2NoZWNrX2Rlc2NyaWJlICJBLSpbMC05YS1mXSIgLS1kaXJ0eQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQtdXAgZGlydHkgd29yayB0cmVlJyAnCisJZWNobyA+PmZpbGUKKycKKworY2hlY2tfZGVzY3JpYmUgIkEtKlswLTlhLWZdLWRpcnR5IiAtLWRpcnR5CisKK2NoZWNrX2Rlc2NyaWJlICJBLSpbMC05YS1mXS5tb2QiIC0tZGlydHk9Lm1vZAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXNjcmliZSAtLWRpcnR5IEhFQUQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGVzY3JpYmUgLS1kaXJ0eSBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC11cCBtYXRjaGluZyBwYXR0ZXJuIHRlc3RzJyAnCisJZ2l0IHRhZyAtYSAtbSB0ZXN0LWFubm90YXRlZCB0ZXN0LWFubm90YXRlZCAmJgorCWVjaG8gPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAib25lIG1vcmUiICYmCisJZ2l0IHRhZyB0ZXN0MS1saWdodHdlaWdodCAmJgorCWVjaG8gPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAieWV0IGFub3RoZXIiICYmCisJZ2l0IHRhZyB0ZXN0Mi1saWdodHdlaWdodCAmJgorCWVjaG8gPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiZXZlbiBtb3JlIgorCisnCisKK2NoZWNrX2Rlc2NyaWJlICJ0ZXN0LWFubm90YXRlZC0qIiAtLW1hdGNoPSJ0ZXN0LSoiCisKK2NoZWNrX2Rlc2NyaWJlICJ0ZXN0MS1saWdodHdlaWdodC0qIiAtLXRhZ3MgLS1tYXRjaD0idGVzdDEtKiIKKworY2hlY2tfZGVzY3JpYmUgInRlc3QyLWxpZ2h0d2VpZ2h0LSoiIC0tdGFncyAtLW1hdGNoPSJ0ZXN0Mi0qIgorCitjaGVja19kZXNjcmliZSAidGVzdDItbGlnaHR3ZWlnaHQtKiIgLS1sb25nIC0tdGFncyAtLW1hdGNoPSJ0ZXN0Mi0qIiBIRUFEXgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduYW1lLXJldiB3aXRoIGV4YWN0IHRhZ3MnICcKKwllY2hvIEEgPmV4cGVjdCAmJgorCXRhZ19vYmplY3Q9JChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9BKSAmJgorCWdpdCBuYW1lLXJldiAtLXRhZ3MgLS1uYW1lLW9ubHkgJHRhZ19vYmplY3QgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gIkFeMCIgPmV4cGVjdCAmJgorCXRhZ2dlZF9jb21taXQ9JChnaXQgcmV2LXBhcnNlICJyZWZzL3RhZ3MvQV4wIikgJiYKKwlnaXQgbmFtZS1yZXYgLS10YWdzIC0tbmFtZS1vbmx5ICR0YWdnZWRfY29tbWl0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaWJlIC0tY29udGFpbnMgd2l0aCB0aGUgZXhhY3QgdGFncycgJworCWVjaG8gIkFeMCIgPmV4cGVjdCAmJgorCXRhZ19vYmplY3Q9JChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9BKSAmJgorCWdpdCBkZXNjcmliZSAtLWNvbnRhaW5zICR0YWdfb2JqZWN0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICJBXjAiID5leHBlY3QgJiYKKwl0YWdnZWRfY29tbWl0PSQoZ2l0IHJldi1wYXJzZSAicmVmcy90YWdzL0FeMCIpICYmCisJZ2l0IGRlc2NyaWJlIC0tY29udGFpbnMgJHRhZ2dlZF9jb21taXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MTMwLXBhdGhzcGVjLW5vZ2xvYi5zaCBiL3QvdDYxMzAtcGF0aHNwZWMtbm9nbG9iLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1ODM1MzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MTMwLXBhdGhzcGVjLW5vZ2xvYi5zaApAQCAtMCwwICsxLDE2MiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2xvYmJpbmcgKGFuZCBub2dsb2IpIG9mIHBhdGhzcGVjIGxpbWl0aW5nJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBjb21taXRzIHdpdGggZ2xvYiBjaGFyYWN0ZXJzJyAnCisJdGVzdF9jb21taXQgdW5yZWxhdGVkIGJhciAmJgorCXRlc3RfY29tbWl0IHZhbmlsbGEgZm9vICYmCisJIyBpbnNlcnQgZmlsZSAiZioiIGluIHRoZSBjb21taXQsIGJ1dCBpbiBhIHdheSB0aGF0IGF2b2lkcworCSMgdGhlIG5hbWUgImYqIiBpbiB0aGUgd29ya3RyZWUsIGJlY2F1c2UgaXQgaXMgbm90IGFsbG93ZWQKKwkjIG9uIFdpbmRvd3MgKHRoZSB0ZXN0cyBiZWxvdyBkbyBub3QgZGVwZW5kIG9uIHRoZSBwcmVzZW5jZQorCSMgb2YgdGhlIGZpbGUgaW4gdGhlIHdvcmt0cmVlKQorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTAwNjQ0ICIkKGdpdCByZXYtcGFyc2UgSEVBRDpmb28pIiAiZioiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzdGFyICYmCisJdGVzdF9jb21taXQgYnJhY2tldCAiZltvXVtvXSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFuaWxsYSBwYXRoc3BlYyBtYXRjaGVzIGxpdGVyYWxseScgJworCWVjaG8gdmFuaWxsYSA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLSBmb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhciBwYXRoc3BlYyBnbG9icycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlicmFja2V0CisJc3RhcgorCXZhbmlsbGEKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC0tICJmKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhciBwYXRoc3BlYyBnbG9icycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlicmFja2V0CisJc3RhcgorCXZhbmlsbGEKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC0tICI6KGdsb2IpZioiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYWNrZXQgcGF0aHNwZWMgZ2xvYnMgYW5kIG1hdGNoZXMgbGl0ZXJhbCBicmFja2V0cycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlicmFja2V0CisJdmFuaWxsYQorCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgLS0gImZbb11bb10iID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JyYWNrZXQgcGF0aHNwZWMgZ2xvYnMgYW5kIG1hdGNoZXMgbGl0ZXJhbCBicmFja2V0cycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlicmFja2V0CisJdmFuaWxsYQorCUVPRgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgLS0gIjooZ2xvYilmW29dW29dIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduby1nbG9iIG9wdGlvbiBtYXRjaGVzIGxpdGVyYWxseSAodmFuaWxsYSknICcKKwllY2hvIHZhbmlsbGEgPmV4cGVjdCAmJgorCWdpdCAtLWxpdGVyYWwtcGF0aHNwZWNzIGxvZyAtLWZvcm1hdD0lcyAtLSBmb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8tZ2xvYiBvcHRpb24gbWF0Y2hlcyBsaXRlcmFsbHkgKHZhbmlsbGEpJyAnCisJZWNobyB2YW5pbGxhID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC0tICI6KGxpdGVyYWwpZm9vIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduby1nbG9iIG9wdGlvbiBtYXRjaGVzIGxpdGVyYWxseSAoc3RhciknICcKKwllY2hvIHN0YXIgPmV4cGVjdCAmJgorCWdpdCAtLWxpdGVyYWwtcGF0aHNwZWNzIGxvZyAtLWZvcm1hdD0lcyAtLSAiZioiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vLWdsb2Igb3B0aW9uIG1hdGNoZXMgbGl0ZXJhbGx5IChzdGFyKScgJworCWVjaG8gc3RhciA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLSAiOihsaXRlcmFsKWYqIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICduby1nbG9iIG9wdGlvbiBtYXRjaGVzIGxpdGVyYWxseSAoYnJhY2tldCknICcKKwllY2hvIGJyYWNrZXQgPmV4cGVjdCAmJgorCWdpdCAtLWxpdGVyYWwtcGF0aHNwZWNzIGxvZyAtLWZvcm1hdD0lcyAtLSAiZltvXVtvXSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8tZ2xvYiBvcHRpb24gbWF0Y2hlcyBsaXRlcmFsbHkgKGJyYWNrZXQpJyAnCisJZWNobyBicmFja2V0ID5leHBlY3QgJiYKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC0tICI6KGxpdGVyYWwpZltvXVtvXSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8tZ2xvYiBvcHRpb24gZGlzYWJsZXMgOihsaXRlcmFsKScgJworCTogPmV4cGVjdCAmJgorCWdpdCAtLWxpdGVyYWwtcGF0aHNwZWNzIGxvZyAtLWZvcm1hdD0lcyAtLSAiOihsaXRlcmFsKWZvbyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8tZ2xvYiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3b3JrcycgJworCWVjaG8gc3RhciA+ZXhwZWN0ICYmCisJR0lUX0xJVEVSQUxfUEFUSFNQRUNTPTEgZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLSAiZioiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIHRha2VzIGdsb2JhbCBwYXRoc3BlYyBmbGFncycgJworCWdpdCAtLWxpdGVyYWwtcGF0aHNwZWNzIGJsYW1lIC0tIGZvbyAmJgorCWdpdCAtLWljYXNlLXBhdGhzcGVjcyAgIGJsYW1lIC0tIGZvbyAmJgorCWdpdCAtLWdsb2ItcGF0aHNwZWNzICAgIGJsYW1lIC0tIGZvbyAmJgorCWdpdCAtLW5vZ2xvYi1wYXRoc3BlY3MgIGJsYW1lIC0tIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB4eHgvYmFyJyAnCisJbWtkaXIgeHh4ICYmCisJdGVzdF9jb21taXQgeHh4IHh4eC9iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnKiovIHdvcmtzIHdpdGggOihnbG9iKScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl4eHgKKwl1bnJlbGF0ZWQKKwlFT0YKKwlnaXQgbG9nIC0tZm9ybWF0PSVzIC0tICI6KGdsb2IpKiovYmFyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcqKi8gZG9lcyBub3Qgd29yayB3aXRoIC0tbm9nbG9iLXBhdGhzcGVjcycgJworCTogPmV4cGVjdCAmJgorCWdpdCAtLW5vZ2xvYi1wYXRoc3BlY3MgbG9nIC0tZm9ybWF0PSVzIC0tICIqKi9iYXIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyoqLyB3b3JrcyB3aXRoIDooZ2xvYikgYW5kIC0tbm9nbG9iLXBhdGhzcGVjcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl4eHgKKwl1bnJlbGF0ZWQKKwlFT0YKKwlnaXQgLS1ub2dsb2ItcGF0aHNwZWNzIGxvZyAtLWZvcm1hdD0lcyAtLSAiOihnbG9iKSoqL2JhciIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnKiovIHdvcmtzIHdpdGggLS1nbG9iLXBhdGhzcGVjcycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl4eHgKKwl1bnJlbGF0ZWQKKwlFT0YKKwlnaXQgLS1nbG9iLXBhdGhzcGVjcyBsb2cgLS1mb3JtYXQ9JXMgLS0gIioqL2JhciIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnKiovIGRvZXMgbm90IHdvcmsgd2l0aCA6KGxpdGVyYWwpIGFuZCAtLWdsb2ItcGF0aHNwZWNzJyAnCisJOiA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2xvYi1wYXRoc3BlY3MgbG9nIC0tZm9ybWF0PSVzIC0tICI6KGxpdGVyYWwpKiovYmFyIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYxMzEtcGF0aHNwZWMtaWNhc2Uuc2ggYi90L3Q2MTMxLXBhdGhzcGVjLWljYXNlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM5ZmMzZjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MTMxLXBhdGhzcGVjLWljYXNlLnNoCkBAIC0wLDAgKzEsMTA5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBjYXNlIGluc2Vuc2l0aXZlIHBhdGhzcGVjIGxpbWl0aW5nJworLiAuL3Rlc3QtbGliLnNoCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgQ0FTRV9JTlNFTlNJVElWRV9GUwordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBjYXNlIHNlbnNpdGl2ZSB0ZXN0cyAtIGNhc2UgaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0nCisJdGVzdF9kb25lCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgY29tbWl0cyB3aXRoIGdsb2IgY2hhcmFjdGVycycgJworCXRlc3RfY29tbWl0IGJhciBiYXIgJiYKKwl0ZXN0X2NvbW1pdCBiQXIgYkFyICYmCisJdGVzdF9jb21taXQgQkFSIEJBUiAmJgorCW1rZGlyIGZvbyAmJgorCXRlc3RfY29tbWl0IGZvby9iYXIgZm9vL2JhciAmJgorCXRlc3RfY29tbWl0IGZvby9iQXIgZm9vL2JBciAmJgorCXRlc3RfY29tbWl0IGZvby9CQVIgZm9vL0JBUiAmJgorCW1rZGlyIGZPbyAmJgorCXRlc3RfY29tbWl0IGZPby9iYXIgZk9vL2JhciAmJgorCXRlc3RfY29tbWl0IGZPby9iQXIgZk9vL2JBciAmJgorCXRlc3RfY29tbWl0IGZPby9CQVIgZk9vL0JBUiAmJgorCW1rZGlyIEZPTyAmJgorCXRlc3RfY29tbWl0IEZPTy9iYXIgRk9PL2JhciAmJgorCXRlc3RfY29tbWl0IEZPTy9iQXIgRk9PL2JBciAmJgorCXRlc3RfY29tbWl0IEZPTy9CQVIgRk9PL0JBUgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX2VudHJ5X2ludGVyZXN0aW5nIG1hdGNoZXMgYmFyJyAnCisJZWNobyBiYXIgPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JXMgLS0gImJhciIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJlZV9lbnRyeV9pbnRlcmVzdGluZyBtYXRjaGVzIDooaWNhc2UpYmFyJyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJQkFSCisJYkFyCisJYmFyCisJRU9GCisJZ2l0IGxvZyAtLWZvcm1hdD0lcyAtLSAiOihpY2FzZSliYXIiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWVfZW50cnlfaW50ZXJlc3RpbmcgbWF0Y2hlcyA6KGljYXNlKWJhciB3aXRoIHByZWZpeCcgJworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCWZPby9CQVIKKwlmT28vYkFyCisJZk9vL2JhcgorCUVPRgorCSggY2QgZk9vICYmIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLS0gIjooaWNhc2UpYmFyIiApID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWVfZW50cnlfaW50ZXJlc3RpbmcgbWF0Y2hlcyA6KGljYXNlKWJhciB3aXRoIGVtcHR5IHByZWZpeCcgJworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCUZPTy9CQVIKKwlGT08vYkFyCisJRk9PL2JhcgorCWZPby9CQVIKKwlmT28vYkFyCisJZk9vL2JhcgorCWZvby9CQVIKKwlmb28vYkFyCisJZm9vL2JhcgorCUVPRgorCSggY2QgZk9vICYmIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLS0gIjooaWNhc2UpLi4vZm9vL2JhciIgKSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYXRjaF9wYXRoc3BlYyBtYXRjaGVzIDooaWNhc2UpYmFyJyAnCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJQkFSCisJYkFyCisJYmFyCisJRU9GCisJZ2l0IGxzLWZpbGVzICI6KGljYXNlKWJhciIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2hfcGF0aHNwZWMgbWF0Y2hlcyA6KGljYXNlKWJhciB3aXRoIHByZWZpeCcgJworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCWZPby9CQVIKKwlmT28vYkFyCisJZk9vL2JhcgorCUVPRgorCSggY2QgZk9vICYmIGdpdCBscy1maWxlcyAtLWZ1bGwtbmFtZSAiOihpY2FzZSliYXIiICkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWF0Y2hfcGF0aHNwZWMgbWF0Y2hlcyA6KGljYXNlKWJhciB3aXRoIGVtcHR5IHByZWZpeCcgJworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCWJhcgorCWZPby9CQVIKKwlmT28vYkFyCisJZk9vL2JhcgorCUVPRgorCSggY2QgZk9vICYmIGdpdCBscy1maWxlcyAtLWZ1bGwtbmFtZSAiOihpY2FzZSliYXIiIC4uL2JhciApID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgZGlmZiIgY2FuIHRha2UgbWFnaWMgOihpY2FzZSkgcGF0aHNwZWMnICcKKwllY2hvIEZPTy9CQVIgPmV4cGVjdCAmJgorCWdpdCBkaWZmIC0tbmFtZS1vbmx5IEhFQUReIEhFQUQgLS0gIjooaWNhc2UpZm9vL2JhciIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MTMyLXBhdGhzcGVjLWV4Y2x1ZGUuc2ggYi90L3Q2MTMyLXBhdGhzcGVjLWV4Y2x1ZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTFlMWIxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYxMzItcGF0aHNwZWMtZXhjbHVkZS5zaApAQCAtMCwwICsxLDE4NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2FzZSBleGNsdWRlIHBhdGhzcGVjJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlmb3IgcCBpbiBmaWxlIHN1Yi9maWxlIHN1Yi9zdWIvZmlsZSBzdWIvZmlsZTIgc3ViL3N1Yi9zdWIvZmlsZSBzdWIyL2ZpbGU7IGRvCisJCWlmIGVjaG8gJHAgfCBncmVwIC87IHRoZW4KKwkJCW1rZGlyIC1wIGBkaXJuYW1lICRwYAorCQlmaSAmJgorCQk6ID4kcCAmJgorCQlnaXQgYWRkICRwICYmCisJCWdpdCBjb21taXQgLW0gJHAKKwlkb25lICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb3JtYXQ9JXMgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitzdWIyL2ZpbGUKK3N1Yi9zdWIvc3ViL2ZpbGUKK3N1Yi9maWxlMgorc3ViL3N1Yi9maWxlCitzdWIvZmlsZQorZmlsZQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNsdWRlIG9ubHkgc2hvdWxkIGVycm9yIG91dCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLS1vbmVsaW5lIC0tZm9ybWF0PSVzIC0tICI6KGV4Y2x1ZGUpc3ViIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0X2VfaSgpIGV4Y2x1ZGUgc3ViJyAnCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb3JtYXQ9JXMgLS0gLiAiOihleGNsdWRlKXN1YiIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitzdWIyL2ZpbGUKK2ZpbGUKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndF9lX2koKSBleGNsdWRlIHN1Yi9zdWIvZmlsZScgJworCWdpdCBsb2cgLS1vbmVsaW5lIC0tZm9ybWF0PSVzIC0tIC4gIjooZXhjbHVkZSlzdWIvc3ViL2ZpbGUiID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorc3ViMi9maWxlCitzdWIvc3ViL3N1Yi9maWxlCitzdWIvZmlsZTIKK3N1Yi9maWxlCitmaWxlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RfZV9pKCkgZXhjbHVkZSBzdWIgdXNpbmcgbW5lbW9uaWMnICcKKwlnaXQgbG9nIC0tb25lbGluZSAtLWZvcm1hdD0lcyAtLSAuICI6IXN1YiIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitzdWIyL2ZpbGUKK2ZpbGUKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndF9lX2koKSBleGNsdWRlIDooaWNhc2UpU1VCJyAnCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb3JtYXQ9JXMgLS0gLiAiOihleGNsdWRlLGljYXNlKVNVQiIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitzdWIyL2ZpbGUKK2ZpbGUKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndF9lX2koKSBleGNsdWRlIHN1YjIgZnJvbSBzdWInICcKKwkoCisJY2Qgc3ViICYmCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb3JtYXQ9JXMgLS0gOi8gIjovIXN1YjIiID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorc3ViL3N1Yi9zdWIvZmlsZQorc3ViL2ZpbGUyCitzdWIvc3ViL2ZpbGUKK3N1Yi9maWxlCitmaWxlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0X2VfaSgpIGV4Y2x1ZGUgc3ViLypmaWxlJyAnCisJZ2l0IGxvZyAtLW9uZWxpbmUgLS1mb3JtYXQ9JXMgLS0gLiAiOihleGNsdWRlKXN1Yi8qZmlsZSIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitzdWIyL2ZpbGUKK3N1Yi9maWxlMgorZmlsZQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0X2VfaSgpIGV4Y2x1ZGUgOihnbG9iKXN1Yi8qL2ZpbGUnICcKKwlnaXQgbG9nIC0tb25lbGluZSAtLWZvcm1hdD0lcyAtLSAuICI6KGV4Y2x1ZGUsZ2xvYilzdWIvKi9maWxlIiA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK3N1YjIvZmlsZQorc3ViL3N1Yi9zdWIvZmlsZQorc3ViL2ZpbGUyCitzdWIvZmlsZQorZmlsZQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtX3BfZCgpIGV4Y2x1ZGUgc3ViJyAnCisJZ2l0IGxzLWZpbGVzIC0tIC4gIjooZXhjbHVkZSlzdWIiID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorZmlsZQorc3ViMi9maWxlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21fcF9kKCkgZXhjbHVkZSBzdWIvc3ViL2ZpbGUnICcKKwlnaXQgbHMtZmlsZXMgLS0gLiAiOihleGNsdWRlKXN1Yi9zdWIvZmlsZSIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitmaWxlCitzdWIvZmlsZQorc3ViL2ZpbGUyCitzdWIvc3ViL3N1Yi9maWxlCitzdWIyL2ZpbGUKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbV9wX2QoKSBleGNsdWRlIHN1YiB1c2luZyBtbmVtb25pYycgJworCWdpdCBscy1maWxlcyAtLSAuICI6IXN1YiIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCitmaWxlCitzdWIyL2ZpbGUKK0VPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbV9wX2QoKSBleGNsdWRlIDooaWNhc2UpU1VCJyAnCisJZ2l0IGxzLWZpbGVzIC0tIC4gIjooZXhjbHVkZSxpY2FzZSlTVUIiID5hY3R1YWwgJiYKKwljYXQgPDxFT0YgPmV4cGVjdCAmJgorZmlsZQorc3ViMi9maWxlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21fcF9kKCkgZXhjbHVkZSBzdWIyIGZyb20gc3ViJyAnCisJKAorCWNkIHN1YiAmJgorCWdpdCBscy1maWxlcyAtLSA6LyAiOi8hc3ViMiIgPmFjdHVhbCAmJgorCWNhdCA8PEVPRiA+ZXhwZWN0ICYmCisuLi9maWxlCitmaWxlCitmaWxlMgorc3ViL2ZpbGUKK3N1Yi9zdWIvZmlsZQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbV9wX2QoKSBleGNsdWRlIHN1Yi8qZmlsZScgJworCWdpdCBscy1maWxlcyAtLSAuICI6KGV4Y2x1ZGUpc3ViLypmaWxlIiA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK2ZpbGUKK3N1Yi9maWxlMgorc3ViMi9maWxlCitFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21fcF9kKCkgZXhjbHVkZSA6KGdsb2Ipc3ViLyovZmlsZScgJworCWdpdCBscy1maWxlcyAtLSAuICI6KGV4Y2x1ZGUsZ2xvYilzdWIvKi9maWxlIiA+YWN0dWFsICYmCisJY2F0IDw8RU9GID5leHBlY3QgJiYKK2ZpbGUKK3N1Yi9maWxlCitzdWIvZmlsZTIKK3N1Yi9zdWIvc3ViL2ZpbGUKK3N1YjIvZmlsZQorRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYyMDAtZm10LW1lcmdlLW1zZy5zaCBiL3QvdDYyMDAtZm10LW1lcmdlLW1zZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZTJmYjBlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NjIwMC1mbXQtbWVyZ2UtbXNnLnNoCkBAIC0wLDAgKzEsNTI5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2LCBKdW5pbyBDIEhhbWFubworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdmbXQtbWVyZ2UtbXNnIHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCisJZ2l0IGNsb25lIC4gcmVtb3RlICYmCisKKwllY2hvIHVubyA+b25lICYmCisJZWNobyBkb3MgPnR3byAmJgorCWdpdCBhZGQgdHdvICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiU2Vjb25kIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGxlZnQgJiYKKworCWVjaG8gImMxIiA+b25lICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiQ29tbW9uICMxIiAmJgorCisJZWNobyAiYzIiID5vbmUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJDb21tb24gIzIiICYmCisKKwlnaXQgYnJhbmNoIHJpZ2h0ICYmCisKKwllY2hvICJsMyIgPnR3byAmJgorCXRlc3RfdGljayAmJgorCUdJVF9DT01NSVRURVJfTkFNRT0iQW5vdGhlciBDb21taXR0ZXIiIFwKKwlHSVRfQVVUSE9SX05BTUU9IkFub3RoZXIgQXV0aG9yIiBnaXQgY29tbWl0IC1hIC1tICJMZWZ0ICMzIiAmJgorCisJZWNobyAibDQiID50d28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQ09NTUlUVEVSX05BTUU9IkFub3RoZXIgQ29tbWl0dGVyIiBcCisJR0lUX0FVVEhPUl9OQU1FPSJBbm90aGVyIEF1dGhvciIgZ2l0IGNvbW1pdCAtYSAtbSAiTGVmdCAjNCIgJiYKKworCWVjaG8gImw1IiA+dHdvICYmCisJdGVzdF90aWNrICYmCisJR0lUX0NPTU1JVFRFUl9OQU1FPSJBbm90aGVyIENvbW1pdHRlciIgXAorCUdJVF9BVVRIT1JfTkFNRT0iQW5vdGhlciBBdXRob3IiIGdpdCBjb21taXQgLWEgLW0gIkxlZnQgIzUiICYmCisJZ2l0IHRhZyB0YWctbDUgJiYKKworCWdpdCBjaGVja291dCByaWdodCAmJgorCisJZWNobyAicjMiID50aHJlZSAmJgorCWdpdCBhZGQgdGhyZWUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJSaWdodCAjMyIgJiYKKwlnaXQgdGFnIHRhZy1yMyAmJgorCisJZWNobyAicjQiID50aHJlZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIlJpZ2h0ICM0IiAmJgorCisJZWNobyAicjUiID50aHJlZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gIlJpZ2h0ICM1IiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGxvbmcgJiYKKwlpPTAgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sdCAzMAorCWRvCisJCXRlc3RfY29tbWl0ICRpIG9uZSAmJgorCQlpPSQoKCRpKzEpKQorCWRvbmUgJiYKKworCWdpdCBzaG93LWJyYW5jaCAmJgorCisJYXBvcz0iJ1wnJyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVzc2FnZSBmb3IgbWVyZ2luZyBsb2NhbCBicmFuY2gnICcKKwllY2hvICJNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9IiA+ZXhwZWN0ZWQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVzc2FnZSBmb3IgbWVyZ2luZyBleHRlcm5hbCBicmFuY2gnICcKKwllY2hvICJNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9IG9mICQocHdkKSIgPmV4cGVjdGVkICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IGZldGNoICIkKHB3ZCkiIGxlZnQgJiYKKworCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdbbWVyZ2VdIHN1bW1hcnkvbG9nIGNvbmZpZ3VyYXRpb24nICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCU1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30KKworCSMgQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwkjIFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogbGVmdDoKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwl0ZXN0X2NvbmZpZyBtZXJnZS5sb2cgdHJ1ZSAmJgorCXRlc3RfdW5jb25maWcgbWVyZ2Uuc3VtbWFyeSAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIGxlZnQgJiYKKworCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbDEgJiYKKworCXRlc3RfdW5jb25maWcgbWVyZ2UubG9nICYmCisJdGVzdF9jb25maWcgbWVyZ2Uuc3VtbWFyeSB0cnVlICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbGVmdCAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsMiAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgRkVUQ0hfSEVBRCcgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLmxvZz0zIGxpbWl0cyBzaG9ydGxvZyBsZW5ndGgnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCU1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30KKworCSMgQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwkjIFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogbGVmdDogKDUgY29tbWl0cykKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIC4uLgorCUVPRgorCisJZ2l0IC1jIG1lcmdlLmxvZz0zIGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLmxvZz01IHNob3dzIGFsbCA1IGNvbW1pdHMnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCU1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30KKworCSMgQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwkjIFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogbGVmdDoKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwlnaXQgLWMgbWVyZ2UubG9nPTUgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1sb2c9NSB3aXRoIGN1c3RvbSBjb21tZW50IGNoYXJhY3RlcicgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJTWVyZ2UgYnJhbmNoICR7YXBvc31sZWZ0JHthcG9zfQorCisJeCBCeSBBbm90aGVyIEF1dGhvciAoMykgYW5kIEEgVSBUaG9yICgyKQorCXggVmlhIEFub3RoZXIgQ29tbWl0dGVyCisJKiBsZWZ0OgorCSAgTGVmdCAjNQorCSAgTGVmdCAjNAorCSAgTGVmdCAjMworCSAgQ29tbW9uICMyCisJICBDb21tb24gIzEKKwlFT0YKKworCWdpdCAtYyBjb3JlLmNvbW1lbnRjaGFyPSJ4IiBmbXQtbWVyZ2UtbXNnIC0tbG9nPTUgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLmxvZz0wIGRpc2FibGVzIHNob3J0bG9nJyAnCisJZWNobyAiTWVyZ2UgYnJhbmNoICR7YXBvc31sZWZ0JHthcG9zfSIgPmV4cGVjdGVkICYmCisJZ2l0IC1jIG1lcmdlLmxvZz0wIGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbG9nPTMgbGltaXRzIHNob3J0bG9nIGxlbmd0aCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJTWVyZ2UgYnJhbmNoICR7YXBvc31sZWZ0JHthcG9zfQorCisJIyBCeSBBbm90aGVyIEF1dGhvciAoMykgYW5kIEEgVSBUaG9yICgyKQorCSMgVmlhIEFub3RoZXIgQ29tbWl0dGVyCisJKiBsZWZ0OiAoNSBjb21taXRzKQorCSAgTGVmdCAjNQorCSAgTGVmdCAjNAorCSAgTGVmdCAjMworCSAgLi4uCisJRU9GCisKKwlnaXQgZm10LW1lcmdlLW1zZyAtLWxvZz0zIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxvZz01IHNob3dzIGFsbCA1IGNvbW1pdHMnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCU1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30KKworCSMgQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwkjIFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogbGVmdDoKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwlnaXQgZm10LW1lcmdlLW1zZyAtLWxvZz01IDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLWxvZyBkaXNhYmxlcyBzaG9ydGxvZycgJworCWVjaG8gIk1lcmdlIGJyYW5jaCAke2Fwb3N9bGVmdCR7YXBvc30iID5leHBlY3RlZCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC0tbm8tbG9nIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxvZz0wIGRpc2FibGVzIHNob3J0bG9nJyAnCisJZWNobyAiTWVyZ2UgYnJhbmNoICR7YXBvc31sZWZ0JHthcG9zfSIgPmV4cGVjdGVkICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgLS1uby1sb2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZtdC1tZXJnZS1tc2cgLW0nICcKKwllY2hvICJTeW5jIHdpdGggbGVmdCIgPmV4cGVjdGVkICYmCisJY2F0ID5leHBlY3RlZC5sb2cgPDwtRU9GICYmCisJU3luYyB3aXRoIGxlZnQKKworCSMgQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwkjIFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogJHthcG9zfWxlZnQke2Fwb3N9IG9mICQocHdkKToKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmxvZyAmJgorCXRlc3RfdW5jb25maWcgbWVyZ2Uuc3VtbWFyeSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgZmV0Y2ggIiQocHdkKSIgbGVmdCAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC1tICJTeW5jIHdpdGggbGVmdCIgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgLS1sb2cgLW0gIlN5bmMgd2l0aCBsZWZ0IiBcCisJCQkJCTwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbC5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5sb2cgdHJ1ZSAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC1tICJTeW5jIHdpdGggbGVmdCIgXAorCQkJCQk8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwubG9nLWNvbmZpZyAmJgorCWdpdCBmbXQtbWVyZ2UtbXNnIC0tbm8tbG9nIC1tICJTeW5jIHdpdGggbGVmdCIgXAorCQkJCQk8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwubm9sb2cgJiYKKworCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLmxvZyBhY3R1YWwubG9nICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQubG9nIGFjdHVhbC5sb2ctY29uZmlnICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsLm5vbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBleHBlY3RlZCBzaG9ydGxvZyBmb3IgdHdvIGJyYW5jaGVzJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YKKwlNZXJnZSBicmFuY2hlcyAke2Fwb3N9bGVmdCR7YXBvc30gYW5kICR7YXBvc31yaWdodCR7YXBvc30KKworCSMgQnkgQW5vdGhlciBBdXRob3IgKDMpIGFuZCBBIFUgVGhvciAoMikKKwkjIFZpYSBBbm90aGVyIENvbW1pdHRlcgorCSogbGVmdDoKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisKKwkqIHJpZ2h0OgorCSAgUmlnaHQgIzUKKwkgIFJpZ2h0ICM0CisJICBSaWdodCAjMworCSAgQ29tbW9uICMyCisJICBDb21tb24gIzEKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvcnRsb2cgZm9yIHR3byBicmFuY2hlcycgJworCXRlc3RfY29uZmlnIG1lcmdlLmxvZyB0cnVlICYmCisJdGVzdF91bmNvbmZpZyBtZXJnZS5zdW1tYXJ5ICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwxICYmCisKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmxvZyAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgdHJ1ZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsMiAmJgorCisJdGVzdF9jb25maWcgbWVyZ2UubG9nIHllcyAmJgorCXRlc3RfdW5jb25maWcgbWVyZ2Uuc3VtbWFyeSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsMyAmJgorCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsNCAmJgorCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsMSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbDIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwzICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgLUYnICcKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmxvZyAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIGxlZnQgcmlnaHQgJiYKKwlnaXQgZm10LW1lcmdlLW1zZyAtRiAuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgLUYgaW4gc3ViZGlyZWN0b3J5JyAnCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgZmV0Y2ggLiBsZWZ0IHJpZ2h0ICYmCisJbWtkaXIgc3ViICYmCisJY3AgLmdpdC9GRVRDSF9IRUFEIHN1Yi9GRVRDSF9IRUFEICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGZtdC1tZXJnZS1tc2cgLUYgRkVUQ0hfSEVBRCA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgd2l0aCBub3RoaW5nIHRvIG1lcmdlJyAnCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCisJPmVtcHR5ICYmCisKKwkoCisJCWNkIHJlbW90ZSAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdW5yZWxhdGVkICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgZmV0Y2ggb3JpZ2luICYmCisJCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPi4uL2FjdHVhbAorCSkgJiYKKworCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZS1tc2cgdGFnJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSB0YWcgJHthcG9zfXRhZy1yMyR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmxvZyAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gdGFnIHRhZy1yMyAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB0d28gdGFncycgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJTWVyZ2UgdGFncyAke2Fwb3N9dGFnLXIzJHthcG9zfSBhbmQgJHthcG9zfXRhZy1sNSR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIHRhZyAke2Fwb3N9dGFnLWw1JHthcG9zfToKKwkgIExlZnQgIzUKKwkgIExlZnQgIzQKKwkgIExlZnQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisJRU9GCisKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmxvZyAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gdGFnIHRhZy1yMyB0YWcgdGFnLWw1ICYmCisKKwlnaXQgZm10LW1lcmdlLW1zZyA8LmdpdC9GRVRDSF9IRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UtbXNnIHRhZyBhbmQgYnJhbmNoJyAnCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKwlNZXJnZSBicmFuY2ggJHthcG9zfWxlZnQke2Fwb3N9LCB0YWcgJHthcG9zfXRhZy1yMyR7YXBvc30KKworCSogdGFnICR7YXBvc310YWctcjMke2Fwb3N9OgorCSAgUmlnaHQgIzMKKwkgIENvbW1vbiAjMgorCSAgQ29tbW9uICMxCisKKwkjIEJ5IEFub3RoZXIgQXV0aG9yICgzKSBhbmQgQSBVIFRob3IgKDIpCisJIyBWaWEgQW5vdGhlciBDb21taXR0ZXIKKwkqIGxlZnQ6CisJICBMZWZ0ICM1CisJICBMZWZ0ICM0CisJICBMZWZ0ICMzCisJICBDb21tb24gIzIKKwkgIENvbW1vbiAjMQorCUVPRgorCisJdGVzdF91bmNvbmZpZyBtZXJnZS5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5zdW1tYXJ5IHllcyAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJgorCWdpdCBmZXRjaCAuIHRhZyB0YWctcjMgbGVmdCAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyBsb3RzIG9mIGNvbW1pdHMnICcKKwl7CisJCWNhdCA8PC1FT0YgJiYKKwkJTWVyZ2UgYnJhbmNoICR7YXBvc31sb25nJHthcG9zfQorCisJCSogbG9uZzogKDM1IGNvbW1pdHMpCisJCUVPRgorCisJCWk9MjkgJiYKKwkJd2hpbGUgdGVzdCAkaSAtZ3QgOQorCQlkbworCQkJZWNobyAiICAkaSIgJiYKKwkJCWk9JCgoJGktMSkpCisJCWRvbmUgJiYKKwkJZWNobyAiICAuLi4iCisJfSA+ZXhwZWN0ZWQgJiYKKworCXRlc3RfY29uZmlnIG1lcmdlLnN1bW1hcnkgeWVzICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGZldGNoIC4gbG9uZyAmJgorCisJZ2l0IGZtdC1tZXJnZS1tc2cgPC5naXQvRkVUQ0hfSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlLW1zZyB3aXRoICJtZXJnaW5nIiBhbiBhbm5vdGF0ZWQgdGFnJyAnCisJdGVzdF9jb25maWcgbWVyZ2UubG9nIHRydWUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiT25lIHN0ZXAgYWhlYWQiICYmCisJZ2l0IHRhZyAtYSAtbSAiQW4gYW5ub3RhdGVkIG9uZSIgYW5ub3RlIEhFQUQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgZmV0Y2ggLiBhbm5vdGUgJiYKKworCWdpdCBmbXQtbWVyZ2UtbXNnIDwuZ2l0L0ZFVENIX0hFQUQgPmFjdHVhbCAmJgorCXsKKwkJY2F0IDw8LVxFT0YKKwkJTWVyZ2UgdGFnICdcJydhbm5vdGUnXCcnCisKKwkJQW4gYW5ub3RhdGVkIG9uZQorCisJCSogdGFnICdcJydhbm5vdGUnXCcnOgorCQkgIE9uZSBzdGVwIGFoZWFkCisJCUVPRgorCX0gPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJYW5ub3RlPSQoZ2l0IHJldi1wYXJzZSBhbm5vdGUpICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0ICRhbm5vdGUgJiYKKwl7CisJCWNhdCA8PC1FT0YKKwkJTWVyZ2UgdGFnICdcJyckYW5ub3RlJ1wnJworCisJCUFuIGFubm90YXRlZCBvbmUKKworCQkqIHRhZyAnXCcnJGFubm90ZSdcJyc6CisJCSAgT25lIHN0ZXAgYWhlYWQKKwkJRU9GCisJfSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAuZ2l0L01FUkdFX01TRworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDYzMDAtZm9yLWVhY2gtcmVmLnNoIGIvdC90NjMwMC1mb3ItZWFjaC1yZWYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDM4NzNiMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYzMDAtZm9yLWVhY2gtcmVmLnNoCkBAIC0wLDAgKzEsNTg2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEFuZHkgUGFya2lucworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdmb3ItZWFjaC1yZWYgdGVzdCcKKworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkiL2xpYi1ncGcuc2gKKworIyBNb24gSnVsIDMgMjM6MTg6NDMgMjAwNiArMDAwMAorZGF0ZXN0YW1wPTExNTE5Njg3MjMKK3NldGRhdGVfYW5kX2luY3JlbWVudCAoKSB7CisgICAgR0lUX0NPTU1JVFRFUl9EQVRFPSIkZGF0ZXN0YW1wICswMjAwIgorICAgIGRhdGVzdGFtcD0kKGV4cHIgIiRkYXRlc3RhbXAiICsgMSkKKyAgICBHSVRfQVVUSE9SX0RBVEU9IiRkYXRlc3RhbXAgKzAyMDAiCisgICAgZGF0ZXN0YW1wPSQoZXhwciAiJGRhdGVzdGFtcCIgKyAxKQorICAgIGV4cG9ydCBHSVRfQ09NTUlUVEVSX0RBVEUgR0lUX0FVVEhPUl9EQVRFCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXNldGRhdGVfYW5kX2luY3JlbWVudCAmJgorCWVjaG8gIlVzaW5nICRkYXRlc3RhbXAiID4gb25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIiAmJgorCXNldGRhdGVfYW5kX2luY3JlbWVudCAmJgorCWdpdCB0YWcgLWEgLW0gIlRhZ2dpbmcgYXQgJGRhdGVzdGFtcCIgdGVzdHRhZyAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIG1hc3RlciAmJgorCWdpdCByZW1vdGUgYWRkIG9yaWdpbiBub3doZXJlICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLnJlbW90ZSBvcmlnaW4gJiYKKwlnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgcmVtb3RlIGFkZCBteWZvcmsgZWxzZXdoZXJlICYmCisJZ2l0IGNvbmZpZyByZW1vdGUucHVzaGRlZmF1bHQgbXlmb3JrICYmCisJZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgY3VycmVudAorJworCit0ZXN0X2F0b20oKSB7CisJY2FzZSAiJDEiIGluCisJCWhlYWQpIHJlZj1yZWZzL2hlYWRzL21hc3RlciA7OworCQkgdGFnKSByZWY9cmVmcy90YWdzL3Rlc3R0YWcgOzsKKwkJICAgKikgcmVmPSQxIDs7CisJZXNhYworCXByaW50ZiAnJXNcbicgIiQzIiA+ZXhwZWN0ZWQKKwl0ZXN0X2V4cGVjdF8kezQ6LXN1Y2Nlc3N9ICRQUkVSRVEgImJhc2ljIGF0b206ICQxICQyIiAiCisJCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9JyUoJDIpJyAkcmVmID5hY3R1YWwgJiYKKwkJc2FuaXRpemVfcGdwIDxhY3R1YWwgPmFjdHVhbC5jbGVhbiAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwuY2xlYW4KKwkiCit9CisKK3Rlc3RfYXRvbSBoZWFkIHJlZm5hbWUgcmVmcy9oZWFkcy9tYXN0ZXIKK3Rlc3RfYXRvbSBoZWFkIHVwc3RyZWFtIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCit0ZXN0X2F0b20gaGVhZCBwdXNoIHJlZnMvcmVtb3Rlcy9teWZvcmsvbWFzdGVyCit0ZXN0X2F0b20gaGVhZCBvYmplY3R0eXBlIGNvbW1pdAordGVzdF9hdG9tIGhlYWQgb2JqZWN0c2l6ZSAxNzEKK3Rlc3RfYXRvbSBoZWFkIG9iamVjdG5hbWUgJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKQordGVzdF9hdG9tIGhlYWQgdHJlZSAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXJee3RyZWV9KQordGVzdF9hdG9tIGhlYWQgcGFyZW50ICcnCit0ZXN0X2F0b20gaGVhZCBudW1wYXJlbnQgMAordGVzdF9hdG9tIGhlYWQgb2JqZWN0ICcnCit0ZXN0X2F0b20gaGVhZCB0eXBlICcnCit0ZXN0X2F0b20gaGVhZCAnKm9iamVjdG5hbWUnICcnCit0ZXN0X2F0b20gaGVhZCAnKm9iamVjdHR5cGUnICcnCit0ZXN0X2F0b20gaGVhZCBhdXRob3IgJ0EgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDExNTE5Njg3MjQgKzAyMDAnCit0ZXN0X2F0b20gaGVhZCBhdXRob3JuYW1lICdBIFUgVGhvcicKK3Rlc3RfYXRvbSBoZWFkIGF1dGhvcmVtYWlsICc8YXV0aG9yQGV4YW1wbGUuY29tPicKK3Rlc3RfYXRvbSBoZWFkIGF1dGhvcmRhdGUgJ1R1ZSBKdWwgNCAwMToxODo0NCAyMDA2ICswMjAwJwordGVzdF9hdG9tIGhlYWQgY29tbWl0dGVyICdDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExNTE5Njg3MjMgKzAyMDAnCit0ZXN0X2F0b20gaGVhZCBjb21taXR0ZXJuYW1lICdDIE8gTWl0dGVyJwordGVzdF9hdG9tIGhlYWQgY29tbWl0dGVyZW1haWwgJzxjb21taXR0ZXJAZXhhbXBsZS5jb20+JwordGVzdF9hdG9tIGhlYWQgY29tbWl0dGVyZGF0ZSAnVHVlIEp1bCA0IDAxOjE4OjQzIDIwMDYgKzAyMDAnCit0ZXN0X2F0b20gaGVhZCB0YWcgJycKK3Rlc3RfYXRvbSBoZWFkIHRhZ2dlciAnJwordGVzdF9hdG9tIGhlYWQgdGFnZ2VybmFtZSAnJwordGVzdF9hdG9tIGhlYWQgdGFnZ2VyZW1haWwgJycKK3Rlc3RfYXRvbSBoZWFkIHRhZ2dlcmRhdGUgJycKK3Rlc3RfYXRvbSBoZWFkIGNyZWF0b3IgJ0MgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTE1MTk2ODcyMyArMDIwMCcKK3Rlc3RfYXRvbSBoZWFkIGNyZWF0b3JkYXRlICdUdWUgSnVsIDQgMDE6MTg6NDMgMjAwNiArMDIwMCcKK3Rlc3RfYXRvbSBoZWFkIHN1YmplY3QgJ0luaXRpYWwnCit0ZXN0X2F0b20gaGVhZCBjb250ZW50czpzdWJqZWN0ICdJbml0aWFsJwordGVzdF9hdG9tIGhlYWQgYm9keSAnJwordGVzdF9hdG9tIGhlYWQgY29udGVudHM6Ym9keSAnJwordGVzdF9hdG9tIGhlYWQgY29udGVudHM6c2lnbmF0dXJlICcnCit0ZXN0X2F0b20gaGVhZCBjb250ZW50cyAnSW5pdGlhbAorJwordGVzdF9hdG9tIGhlYWQgSEVBRCAnKicKKwordGVzdF9hdG9tIHRhZyByZWZuYW1lIHJlZnMvdGFncy90ZXN0dGFnCit0ZXN0X2F0b20gdGFnIHVwc3RyZWFtICcnCit0ZXN0X2F0b20gdGFnIHB1c2ggJycKK3Rlc3RfYXRvbSB0YWcgb2JqZWN0dHlwZSB0YWcKK3Rlc3RfYXRvbSB0YWcgb2JqZWN0c2l6ZSAxNTQKK3Rlc3RfYXRvbSB0YWcgb2JqZWN0bmFtZSAkKGdpdCByZXYtcGFyc2UgcmVmcy90YWdzL3Rlc3R0YWcpCit0ZXN0X2F0b20gdGFnIHRyZWUgJycKK3Rlc3RfYXRvbSB0YWcgcGFyZW50ICcnCit0ZXN0X2F0b20gdGFnIG51bXBhcmVudCAnJwordGVzdF9hdG9tIHRhZyBvYmplY3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy90ZXN0dGFnXjApCit0ZXN0X2F0b20gdGFnIHR5cGUgJ2NvbW1pdCcKK3Rlc3RfYXRvbSB0YWcgJypvYmplY3RuYW1lJyAnZWExMjI4NDJmNDhiZTRhZmIyZDFmYzZhNGI5NmMwNTg4NWFiNzQ2MycKK3Rlc3RfYXRvbSB0YWcgJypvYmplY3R0eXBlJyAnY29tbWl0JwordGVzdF9hdG9tIHRhZyBhdXRob3IgJycKK3Rlc3RfYXRvbSB0YWcgYXV0aG9ybmFtZSAnJwordGVzdF9hdG9tIHRhZyBhdXRob3JlbWFpbCAnJwordGVzdF9hdG9tIHRhZyBhdXRob3JkYXRlICcnCit0ZXN0X2F0b20gdGFnIGNvbW1pdHRlciAnJwordGVzdF9hdG9tIHRhZyBjb21taXR0ZXJuYW1lICcnCit0ZXN0X2F0b20gdGFnIGNvbW1pdHRlcmVtYWlsICcnCit0ZXN0X2F0b20gdGFnIGNvbW1pdHRlcmRhdGUgJycKK3Rlc3RfYXRvbSB0YWcgdGFnICd0ZXN0dGFnJwordGVzdF9hdG9tIHRhZyB0YWdnZXIgJ0MgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTE1MTk2ODcyNSArMDIwMCcKK3Rlc3RfYXRvbSB0YWcgdGFnZ2VybmFtZSAnQyBPIE1pdHRlcicKK3Rlc3RfYXRvbSB0YWcgdGFnZ2VyZW1haWwgJzxjb21taXR0ZXJAZXhhbXBsZS5jb20+JwordGVzdF9hdG9tIHRhZyB0YWdnZXJkYXRlICdUdWUgSnVsIDQgMDE6MTg6NDUgMjAwNiArMDIwMCcKK3Rlc3RfYXRvbSB0YWcgY3JlYXRvciAnQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTUxOTY4NzI1ICswMjAwJwordGVzdF9hdG9tIHRhZyBjcmVhdG9yZGF0ZSAnVHVlIEp1bCA0IDAxOjE4OjQ1IDIwMDYgKzAyMDAnCit0ZXN0X2F0b20gdGFnIHN1YmplY3QgJ1RhZ2dpbmcgYXQgMTE1MTk2ODcyNycKK3Rlc3RfYXRvbSB0YWcgY29udGVudHM6c3ViamVjdCAnVGFnZ2luZyBhdCAxMTUxOTY4NzI3JwordGVzdF9hdG9tIHRhZyBib2R5ICcnCit0ZXN0X2F0b20gdGFnIGNvbnRlbnRzOmJvZHkgJycKK3Rlc3RfYXRvbSB0YWcgY29udGVudHM6c2lnbmF0dXJlICcnCit0ZXN0X2F0b20gdGFnIGNvbnRlbnRzICdUYWdnaW5nIGF0IDExNTE5Njg3MjcKKycKK3Rlc3RfYXRvbSB0YWcgSEVBRCAnICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgaW52YWxpZCBhdG9tcyBuYW1lcyBhcmUgZXJyb3JzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShJTlZBTElEKSIgcmVmcy9oZWFkcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgc3BlY2lmaWVycyBhcmUgaWdub3JlZCBpbiBuYW1pbmcgZGF0ZSBhdG9tcycgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZSkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6ZGVmYXVsdCkgJShhdXRob3JkYXRlKSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZSkgJShhdXRob3JkYXRlOmRlZmF1bHQpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlOmRlZmF1bHQpICUoYXV0aG9yZGF0ZTpkZWZhdWx0KSIgcmVmcy9oZWFkcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayB2YWxpZCBmb3JtYXQgc3BlY2lmaWVycyBmb3IgZGF0ZSBmaWVsZHMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6ZGVmYXVsdCkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6cmVsYXRpdmUpIiByZWZzL2hlYWRzICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlOnNob3J0KSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpsb2NhbCkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6aXNvODYwMSkiIHJlZnMvaGVhZHMgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6cmZjMjgyMikiIHJlZnMvaGVhZHMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgaW52YWxpZCBmb3JtYXQgc3BlY2lmaWVycyBhcmUgZXJyb3JzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlOklOVkFMSUQpIiByZWZzL2hlYWRzCisnCisKK3Rlc3RfZGF0ZSAoKSB7CisJZj0kMSAmJgorCWNvbW1pdHRlcl9kYXRlPSQyICYmCisJYXV0aG9yX2RhdGU9JDMgJiYKKwl0YWdnZXJfZGF0ZT0kNCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJJ3JlZnMvaGVhZHMvbWFzdGVyJyAnJGNvbW1pdHRlcl9kYXRlJyAnJGF1dGhvcl9kYXRlJworCSdyZWZzL3RhZ3MvdGVzdHRhZycgJyR0YWdnZXJfZGF0ZScKKwlFT0YKKwkoCisJCWdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCBcCisJCQktLWZvcm1hdD0iJShyZWZuYW1lKSAlKGNvbW1pdHRlcmRhdGUke2Y6KzokZn0pICUoYXV0aG9yZGF0ZSR7ZjorOiRmfSkiIFwKKwkJCXJlZnMvaGVhZHMgJiYKKwkJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIFwKKwkJCS0tZm9ybWF0PSIlKHJlZm5hbWUpICUodGFnZ2VyZGF0ZSR7ZjorOiRmfSkiIFwKKwkJCXJlZnMvdGFncworCSkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayB1bmZvcm1hdHRlZCBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgIiIgXAorCQkiVHVlIEp1bCA0IDAxOjE4OjQzIDIwMDYgKzAyMDAiIFwKKwkJIlR1ZSBKdWwgNCAwMToxODo0NCAyMDA2ICswMjAwIiBcCisJCSJUdWUgSnVsIDQgMDE6MTg6NDUgMjAwNiArMDIwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJkZWZhdWx0IiBmb3JtYXR0ZWQgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJdGVzdF9kYXRlIGRlZmF1bHQgXAorCQkiVHVlIEp1bCA0IDAxOjE4OjQzIDIwMDYgKzAyMDAiIFwKKwkJIlR1ZSBKdWwgNCAwMToxODo0NCAyMDA2ICswMjAwIiBcCisJCSJUdWUgSnVsIDQgMDE6MTg6NDUgMjAwNiArMDIwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJkZWZhdWx0LWxvY2FsIiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgZGVmYXVsdC1sb2NhbCAiTW9uIEp1bCAzIDIzOjE4OjQzIDIwMDYiICJNb24gSnVsIDMgMjM6MTg6NDQgMjAwNiIgIk1vbiBKdWwgMyAyMzoxODo0NSAyMDA2IgorJworCisjIERvbid0IGtub3cgaG93IHRvIGRvIHJlbGF0aXZlIGNoZWNrIGJlY2F1c2UgSSBjYW4ndCBrbm93IHdoZW4gdGhpcyBzY3JpcHQKKyMgaXMgZ29pbmcgdG8gYmUgcnVuIGFuZCBjYW4ndCBmYWtlIHRoZSBjdXJyZW50IHRpbWUgdG8gZ2l0LCBhbmQgaGVuY2UgY2FuJ3QKKyMgcHJvdmlkZSBleHBlY3RlZCBvdXRwdXQuICBJbnN0ZWFkLCBJJ2xsIGp1c3QgbWFrZSBzdXJlIHRoYXQgInJlbGF0aXZlIgorIyBkb2Vzbid0IGV4aXQgaW4gZXJyb3IKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAicmVsYXRpdmUiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCWY9cmVsYXRpdmUgJiYKKwkoZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSIlKHJlZm5hbWUpICUoY29tbWl0dGVyZGF0ZTokZikgJShhdXRob3JkYXRlOiRmKSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSAlKHRhZ2dlcmRhdGU6JGYpIiByZWZzL3RhZ3MpID5hY3R1YWwKKycKKworIyBXZSBqdXN0IGNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhcyAicmVsYXRpdmUiIGZvciBub3cuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgInJlbGF0aXZlLWxvY2FsIiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgcmVsYXRpdmUtbG9jYWwgXAorCQkiJChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGNvbW1pdHRlcmRhdGU6cmVsYXRpdmUpIiByZWZzL2hlYWRzKSIgXAorCQkiJChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKGF1dGhvcmRhdGU6cmVsYXRpdmUpIiByZWZzL2hlYWRzKSIgXAorCQkiJChnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHRhZ2dlcmRhdGU6cmVsYXRpdmUpIiByZWZzL3RhZ3MpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgInNob3J0IiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgc2hvcnQgMjAwNi0wNy0wNCAyMDA2LTA3LTA0IDIwMDYtMDctMDQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJzaG9ydC1sb2NhbCIgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJdGVzdF9kYXRlIHNob3J0LWxvY2FsIDIwMDYtMDctMDMgMjAwNi0wNy0wMyAyMDA2LTA3LTAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAibG9jYWwiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSBsb2NhbCBcCisJCSJNb24gSnVsIDMgMjM6MTg6NDMgMjAwNiIgXAorCQkiTW9uIEp1bCAzIDIzOjE4OjQ0IDIwMDYiIFwKKwkJIk1vbiBKdWwgMyAyMzoxODo0NSAyMDA2IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgImlzbzg2MDEiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSBpc284NjAxIFwKKwkJIjIwMDYtMDctMDQgMDE6MTg6NDMgKzAyMDAiIFwKKwkJIjIwMDYtMDctMDQgMDE6MTg6NDQgKzAyMDAiIFwKKwkJIjIwMDYtMDctMDQgMDE6MTg6NDUgKzAyMDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAiaXNvODYwMS1sb2NhbCIgZGF0ZSBmaWVsZHMgb3V0cHV0JyAnCisJdGVzdF9kYXRlIGlzbzg2MDEtbG9jYWwgIjIwMDYtMDctMDMgMjM6MTg6NDMgKzAwMDAiICIyMDA2LTA3LTAzIDIzOjE4OjQ0ICswMDAwIiAiMjAwNi0wNy0wMyAyMzoxODo0NSArMDAwMCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgZm9ybWF0ICJyZmMyODIyIiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgcmZjMjgyMiBcCisJCSJUdWUsIDQgSnVsIDIwMDYgMDE6MTg6NDMgKzAyMDAiIFwKKwkJIlR1ZSwgNCBKdWwgMjAwNiAwMToxODo0NCArMDIwMCIgXAorCQkiVHVlLCA0IEp1bCAyMDA2IDAxOjE4OjQ1ICswMjAwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDaGVjayBmb3JtYXQgInJmYzI4MjItbG9jYWwiIGRhdGUgZmllbGRzIG91dHB1dCcgJworCXRlc3RfZGF0ZSByZmMyODIyLWxvY2FsICJNb24sIDMgSnVsIDIwMDYgMjM6MTg6NDMgKzAwMDAiICJNb24sIDMgSnVsIDIwMDYgMjM6MTg6NDQgKzAwMDAiICJNb24sIDMgSnVsIDIwMDYgMjM6MTg6NDUgKzAwMDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAicmF3IiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgcmF3ICIxMTUxOTY4NzIzICswMjAwIiAiMTE1MTk2ODcyNCArMDIwMCIgIjExNTE5Njg3MjUgKzAyMDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCAicmF3LWxvY2FsIiBkYXRlIGZpZWxkcyBvdXRwdXQnICcKKwl0ZXN0X2RhdGUgcmF3LWxvY2FsICIxMTUxOTY4NzIzICswMDAwIiAiMTE1MTk2ODcyNCArMDAwMCIgIjExNTE5Njg3MjUgKzAwMDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCBvZiBzdHJmdGltZSBkYXRlIGZpZWxkcycgJworCWVjaG8gIm15IGRhdGUgaXMgMjAwNi0wNy0wNCIgPmV4cGVjdGVkICYmCisJZ2l0IGZvci1lYWNoLXJlZiBcCisJICAtLWZvcm1hdD0iJShhdXRob3JkYXRlOmZvcm1hdDpteSBkYXRlIGlzICVZLSVtLSVkKSIgXAorCSAgcmVmcy9oZWFkcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvcm1hdCBvZiBzdHJmdGltZS1sb2NhbCBkYXRlIGZpZWxkcycgJworCWVjaG8gIm15IGRhdGUgaXMgMjAwNi0wNy0wMyIgPmV4cGVjdGVkICYmCisJZ2l0IGZvci1lYWNoLXJlZiBcCisJICAtLWZvcm1hdD0iJShhdXRob3JkYXRlOmZvcm1hdC1sb2NhbDpteSBkYXRlIGlzICVZLSVtLSVkKSIgXAorCSAgcmVmcy9oZWFkcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4ZXJjaXNlIHN0cmZ0aW1lIHdpdGggb2RkIGZpZWxkcycgJworCWVjaG8gPmV4cGVjdGVkICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhdXRob3JkYXRlOmZvcm1hdDopIiByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlsb25nPSJsb25nIGZvcm1hdCAtLSAkX3o0MCRfejQwJF96NDAkX3o0MCRfejQwJF96NDAkX3o0MCIgJiYKKwllY2hvICRsb25nID5leHBlY3RlZCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoYXV0aG9yZGF0ZTpmb3JtYXQ6JGxvbmcpIiByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK3JlZnMvaGVhZHMvbWFzdGVyCityZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorcmVmcy90YWdzL3Rlc3R0YWcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgYXNjZW5kaW5nIHNvcnQnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiAtLXNvcnQ9cmVmbmFtZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK3JlZnMvdGFncy90ZXN0dGFnCityZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcgorcmVmcy9oZWFkcy9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgZGVzY2VuZGluZyBzb3J0JyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgLS1zb3J0PS1yZWZuYW1lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKydyZWZzL2hlYWRzL21hc3RlcicKKydyZWZzL3JlbW90ZXMvb3JpZ2luL21hc3RlcicKKydyZWZzL3RhZ3MvdGVzdHRhZycKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdW90aW5nIHN0eWxlOiBzaGVsbCcgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdRdW90aW5nIHN0eWxlOiBwZXJsJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLXBlcmwgLS1mb3JtYXQ9IiUocmVmbmFtZSkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUXVvdGluZyBzdHlsZTogcHl0aG9uJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLXB5dGhvbiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorInJlZnMvaGVhZHMvbWFzdGVyIgorInJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyIgorInJlZnMvdGFncy90ZXN0dGFnIgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1F1b3Rpbmcgc3R5bGU6IHRjbCcgJworCWdpdCBmb3ItZWFjaC1yZWYgLS10Y2wgLS1mb3JtYXQ9IiUocmVmbmFtZSkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworZm9yIGkgaW4gIi0tcGVybCAtLXNoZWxsIiAiLXMgLS1weXRob24iICItLXB5dGhvbiAtLXRjbCIgIi0tdGNsIC0tcGVybCI7IGRvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAibW9yZSB0aGFuIG9uZSBxdW90aW5nIHN0eWxlOiAkaSIgIgorCQlnaXQgZm9yLWVhY2gtcmVmICRpIDI+JjEgfCAocmVhZCBsaW5lICYmCisJCWNhc2UgXCRsaW5lIGluCisJCVwiZXJyb3I6IG1vcmUgdGhhbiBvbmUgcXVvdGluZyBzdHlsZVwiKikgOiBoYXBweTs7CisJCSopIGZhbHNlCisJCWVzYWMpCisJIgorZG9uZQorCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorbWFzdGVyCit0ZXN0dGFnCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgc2hvcnQgcmVmbmFtZSBmb3JtYXQnICcKKwkoZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lOnNob3J0KSIgcmVmcy9oZWFkcyAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZTpzaG9ydCkiIHJlZnMvdGFncykgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitvcmlnaW4vbWFzdGVyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgc2hvcnQgdXBzdHJlYW0gZm9ybWF0JyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJSh1cHN0cmVhbTpzaG9ydCkiIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgdXBzdHJlYW06dHJhY2tbc2hvcnRdJyAnCisJdGVzdF9jb21taXQgdHdvCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK1thaGVhZCAxXQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHVwc3RyZWFtOnRyYWNrIGZvcm1hdCcgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUodXBzdHJlYW06dHJhY2spIiByZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorPgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHVwc3RyZWFtOnRyYWNrc2hvcnQgZm9ybWF0JyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJSh1cHN0cmVhbTp0cmFja3Nob3J0KSIgcmVmcy9oZWFkcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHRoYXQgOnRyYWNrW3Nob3J0XSBjYW5ub3QgYmUgdXNlZCB3aXRoIG90aGVyIGF0b21zJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lOnRyYWNrKSIgMj4vZGV2L251bGwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWU6dHJhY2tzaG9ydCkiIDI+L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHRoYXQgOnRyYWNrW3Nob3J0XSB3b3JrcyB3aGVuIHVwc3RyZWFtIGlzIGludmFsaWQnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCisJRU9GCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2UgcmVmcy9oZWFkcy9tYXN0ZXIiICYmCisJZ2l0IGNvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlIHJlZnMvaGVhZHMvZG9lcy1ub3QtZXhpc3QgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIFwKKwkJLS1mb3JtYXQ9IiUodXBzdHJlYW06dHJhY2spJExGJSh1cHN0cmVhbTp0cmFja3Nob3J0KSIgXAorCQlyZWZzL2hlYWRzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnJShwdXNoKSBzdXBwb3J0cyB0cmFja2luZyBzcGVjaWZpZXJzLCB0b28nICcKKwllY2hvICJbYWhlYWQgMV0iID5leHBlY3RlZCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocHVzaDp0cmFjaykiIHJlZnMvaGVhZHMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCiskKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHNob3J0IG9iamVjdG5hbWUgZm9ybWF0JyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lOnNob3J0KSIgcmVmcy9oZWFkcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGZvciBpbnZhbGlkIHJlZm5hbWUgZm9ybWF0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lOklOVkFMSUQpIgorJworCitnZXRfY29sb3IgKCkKK3sKKwlnaXQgY29uZmlnIC0tZ2V0LWNvbG9yIG5vLnN1Y2guc2xvdCAiJDEiCit9CisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKyQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlZnMvaGVhZHMvbWFzdGVyKSAkKGdldF9jb2xvciBncmVlbiltYXN0ZXIkKGdldF9jb2xvciByZXNldCkKKyQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyKSAkKGdldF9jb2xvciBncmVlbilvcmlnaW4vbWFzdGVyJChnZXRfY29sb3IgcmVzZXQpCiskKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWZzL3RhZ3MvdGVzdHRhZykgJChnZXRfY29sb3IgZ3JlZW4pdGVzdHRhZyQoZ2V0X2NvbG9yIHJlc2V0KQorJChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmVmcy90YWdzL3R3bykgJChnZXRfY29sb3IgZ3JlZW4pdHdvJChnZXRfY29sb3IgcmVzZXQpCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgJShjb2xvcjouLi4pICcgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUob2JqZWN0bmFtZTpzaG9ydCkgJShjb2xvcjpncmVlbiklKHJlZm5hbWU6c2hvcnQpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitoZWFkcy9tYXN0ZXIKK3RhZ3MvbWFzdGVyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgYW1iaWd1b3VzIGhlYWQgYW5kIHRhZyByZWZzIChzdHJpY3QpJyAnCisJZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS53YXJuYW1iaWd1b3VzcmVmcyB0cnVlICYmCisJZ2l0IGNoZWNrb3V0IC1iIG5ld3RhZyAmJgorCWVjaG8gIlVzaW5nICRkYXRlc3RhbXAiID4gb25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgY29tbWl0IC1tICJCcmFuY2giICYmCisJc2V0ZGF0ZV9hbmRfaW5jcmVtZW50ICYmCisJZ2l0IHRhZyAtbSAiVGFnZ2luZyBhdCAkZGF0ZXN0YW1wIiBtYXN0ZXIgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0ICIlKHJlZm5hbWU6c2hvcnQpIiByZWZzL2hlYWRzL21hc3RlciByZWZzL3RhZ3MvbWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK2hlYWRzL21hc3RlcgorbWFzdGVyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2hlY2sgYW1iaWd1b3VzIGhlYWQgYW5kIHRhZyByZWZzIChsb29zZSknICcKKwlnaXQgY29uZmlnIC0tYm9vbCBjb3JlLndhcm5hbWJpZ3VvdXNyZWZzIGZhbHNlICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdCAiJShyZWZuYW1lOnNob3J0KSIgcmVmcy9oZWFkcy9tYXN0ZXIgcmVmcy90YWdzL21hc3RlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCitoZWFkcy9hbWJpZ3VvdXMKK2FtYmlndW91cworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIGFtYmlndW91cyBoZWFkIGFuZCB0YWcgcmVmcyBJSSAobG9vc2UpJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCB0YWcgYW1iaWd1b3VzIHRlc3R0YWdeMCAmJgorCWdpdCBicmFuY2ggYW1iaWd1b3VzIHRlc3R0YWdeMCAmJgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQgIiUocmVmbmFtZTpzaG9ydCkiIHJlZnMvaGVhZHMvYW1iaWd1b3VzIHJlZnMvdGFncy9hbWJpZ3VvdXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbiB1bnVzdWFsIHRhZyB3aXRoIGFuIGluY29tcGxldGUgbGluZScgJworCisJZ2l0IHRhZyAtbSAiYm9nbyIgYm9nbyAmJgorCWJvZ289JChnaXQgY2F0LWZpbGUgdGFnIGJvZ28pICYmCisJYm9nbz0kKHByaW50ZiAiJXMiICIkYm9nbyIgfCBnaXQgbWt0YWcpICYmCisJZ2l0IHRhZyAtZiBib2dvICIkYm9nbyIgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0ICIlKGJvZHkpIiByZWZzL3RhZ3MvYm9nbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSB0YWcgd2l0aCBzdWJqZWN0IGFuZCBib2R5IGNvbnRlbnQnICcKKwljYXQgPj5tc2cgPDwtXEVPRiAmJgorCQl0aGUgc3ViamVjdCBsaW5lCisKKwkJZmlyc3QgYm9keSBsaW5lCisJCXNlY29uZCBib2R5IGxpbmUKKwlFT0YKKwlnaXQgdGFnIC1GIG1zZyBzdWJqZWN0LWJvZHkKKycKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc3ViamVjdC1ib2R5IHN1YmplY3QgJ3RoZSBzdWJqZWN0IGxpbmUnCit0ZXN0X2F0b20gcmVmcy90YWdzL3N1YmplY3QtYm9keSBib2R5ICdmaXJzdCBib2R5IGxpbmUKK3NlY29uZCBib2R5IGxpbmUKKycKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc3ViamVjdC1ib2R5IGNvbnRlbnRzICd0aGUgc3ViamVjdCBsaW5lCisKK2ZpcnN0IGJvZHkgbGluZQorc2Vjb25kIGJvZHkgbGluZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgdGFnIHdpdGggbXVsdGlsaW5lIHN1YmplY3QnICcKKwljYXQgPm1zZyA8PC1cRU9GICYmCisJCWZpcnN0IHN1YmplY3QgbGluZQorCQlzZWNvbmQgc3ViamVjdCBsaW5lCisKKwkJZmlyc3QgYm9keSBsaW5lCisJCXNlY29uZCBib2R5IGxpbmUKKwlFT0YKKwlnaXQgdGFnIC1GIG1zZyBtdWx0aWxpbmUKKycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvbXVsdGlsaW5lIHN1YmplY3QgJ2ZpcnN0IHN1YmplY3QgbGluZSBzZWNvbmQgc3ViamVjdCBsaW5lJwordGVzdF9hdG9tIHJlZnMvdGFncy9tdWx0aWxpbmUgY29udGVudHM6c3ViamVjdCAnZmlyc3Qgc3ViamVjdCBsaW5lIHNlY29uZCBzdWJqZWN0IGxpbmUnCit0ZXN0X2F0b20gcmVmcy90YWdzL211bHRpbGluZSBib2R5ICdmaXJzdCBib2R5IGxpbmUKK3NlY29uZCBib2R5IGxpbmUKKycKK3Rlc3RfYXRvbSByZWZzL3RhZ3MvbXVsdGlsaW5lIGNvbnRlbnRzOmJvZHkgJ2ZpcnN0IGJvZHkgbGluZQorc2Vjb25kIGJvZHkgbGluZQorJwordGVzdF9hdG9tIHJlZnMvdGFncy9tdWx0aWxpbmUgY29udGVudHM6c2lnbmF0dXJlICcnCit0ZXN0X2F0b20gcmVmcy90YWdzL211bHRpbGluZSBjb250ZW50cyAnZmlyc3Qgc3ViamVjdCBsaW5lCitzZWNvbmQgc3ViamVjdCBsaW5lCisKK2ZpcnN0IGJvZHkgbGluZQorc2Vjb25kIGJvZHkgbGluZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnY3JlYXRlIHNpZ25lZCB0YWdzJyAnCisJZ2l0IHRhZyAtcyAtbSAiIiBzaWduZWQtZW1wdHkgJiYKKwlnaXQgdGFnIC1zIC1tICJzdWJqZWN0IGxpbmUiIHNpZ25lZC1zaG9ydCAmJgorCWNhdCA+bXNnIDw8LVxFT0YgJiYKKwlzdWJqZWN0IGxpbmUKKworCWJvZHkgY29udGVudHMKKwlFT0YKKwlnaXQgdGFnIC1zIC1GIG1zZyBzaWduZWQtbG9uZworJworCitzaWc9Jy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCistLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0KKycKKworUFJFUkVRPUdQRwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtZW1wdHkgc3ViamVjdCAnJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtZW1wdHkgY29udGVudHM6c3ViamVjdCAnJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtZW1wdHkgYm9keSAiJHNpZyIKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWVtcHR5IGNvbnRlbnRzOmJvZHkgJycKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWVtcHR5IGNvbnRlbnRzOnNpZ25hdHVyZSAiJHNpZyIKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWVtcHR5IGNvbnRlbnRzICIkc2lnIgorCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1zaG9ydCBzdWJqZWN0ICdzdWJqZWN0IGxpbmUnCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1zaG9ydCBjb250ZW50czpzdWJqZWN0ICdzdWJqZWN0IGxpbmUnCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1zaG9ydCBib2R5ICIkc2lnIgordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtc2hvcnQgY29udGVudHM6Ym9keSAnJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtc2hvcnQgY29udGVudHM6c2lnbmF0dXJlICIkc2lnIgordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtc2hvcnQgY29udGVudHMgInN1YmplY3QgbGluZQorJHNpZyIKKwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtbG9uZyBzdWJqZWN0ICdzdWJqZWN0IGxpbmUnCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1sb25nIGNvbnRlbnRzOnN1YmplY3QgJ3N1YmplY3QgbGluZScKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWxvbmcgYm9keSAiYm9keSBjb250ZW50cworJHNpZyIKK3Rlc3RfYXRvbSByZWZzL3RhZ3Mvc2lnbmVkLWxvbmcgY29udGVudHM6Ym9keSAnYm9keSBjb250ZW50cworJwordGVzdF9hdG9tIHJlZnMvdGFncy9zaWduZWQtbG9uZyBjb250ZW50czpzaWduYXR1cmUgIiRzaWciCit0ZXN0X2F0b20gcmVmcy90YWdzL3NpZ25lZC1sb25nIGNvbnRlbnRzICJzdWJqZWN0IGxpbmUKKworYm9keSBjb250ZW50cworJHNpZyIKKworY2F0ID5leHBlY3RlZCA8PEVPRgorJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9ib2dvKSA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiByZWZzL3RhZ3MvYm9nbworJChnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9tYXN0ZXIpIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IHJlZnMvdGFncy9tYXN0ZXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdWZXJpZnkgc29ydCB3aXRoIG11bHRpcGxlIGtleXMnICcKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWUpICUodGFnZ2VyZW1haWwpICUocmVmbmFtZSkiIC0tc29ydD1vYmplY3RuYW1lIC0tc29ydD10YWdnZXJlbWFpbCBcCisJCXJlZnMvdGFncy9ib2dvIHJlZnMvdGFncy9tYXN0ZXIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NjMwMS1mb3ItZWFjaC1yZWYtZXJyb3JzLnNoIGIvdC90NjMwMS1mb3ItZWFjaC1yZWYtZXJyb3JzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkYjY3YTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2MzAxLWZvci1lYWNoLXJlZi1lcnJvcnMuc2gKQEAgLTAsMCArMSw1NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2Zvci1lYWNoLXJlZiBlcnJvcnMgZm9yIGJyb2tlbiByZWZzJworCisuIC4vdGVzdC1saWIuc2gKKworWkVST1M9JF96NDAKK01JU1NJTkc9YWJhYmFiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkluaXRpYWwiICYmCisJZ2l0IHRhZyB0ZXN0dGFnICYmCisJZ2l0IGZvci1lYWNoLXJlZiA+ZnVsbC1saXN0ICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKSAlKHJlZm5hbWUpIiA+YnJpZWYtbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCcm9rZW4gcmVmcyBhcmUgcmVwb3J0ZWQgY29ycmVjdGx5JyAnCisJcj1yZWZzL2hlYWRzL2JvZ3VzICYmCisJOiA+LmdpdC8kciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdC8kciIgJiYKKwllY2hvICJ3YXJuaW5nOiBpZ25vcmluZyBicm9rZW4gcmVmICRyIiA+YnJva2VuLWVyciAmJgorCWdpdCBmb3ItZWFjaC1yZWYgPm91dCAyPmVyciAmJgorCXRlc3RfY21wIGZ1bGwtbGlzdCBvdXQgJiYKKwl0ZXN0X2NtcCBicm9rZW4tZXJyIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdOVUxMX1NIQTEgcmVmcyBhcmUgcmVwb3J0ZWQgY29ycmVjdGx5JyAnCisJcj1yZWZzL2hlYWRzL3plcm9zICYmCisJZWNobyAkWkVST1MgPi5naXQvJHIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIC5naXQvJHIiICYmCisJZWNobyAid2FybmluZzogaWdub3JpbmcgYnJva2VuIHJlZiAkciIgPnplcm9zLWVyciAmJgorCWdpdCBmb3ItZWFjaC1yZWYgPm91dCAyPmVyciAmJgorCXRlc3RfY21wIGZ1bGwtbGlzdCBvdXQgJiYKKwl0ZXN0X2NtcCB6ZXJvcy1lcnIgZXJyICYmCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShvYmplY3RuYW1lKSAlKHJlZm5hbWUpIiA+YnJpZWYtb3V0IDI+YnJpZWYtZXJyICYmCisJdGVzdF9jbXAgYnJpZWYtbGlzdCBicmllZi1vdXQgJiYKKwl0ZXN0X2NtcCB6ZXJvcy1lcnIgYnJpZWYtZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ01pc3Npbmcgb2JqZWN0cyBhcmUgcmVwb3J0ZWQgY29ycmVjdGx5JyAnCisJcj1yZWZzL2hlYWRzL21pc3NpbmcgJiYKKwllY2hvICRNSVNTSU5HID4uZ2l0LyRyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0LyRyIiAmJgorCWVjaG8gImZhdGFsOiBtaXNzaW5nIG9iamVjdCAkTUlTU0lORyBmb3IgJHIiID5taXNzaW5nLWVyciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgMj5lcnIgJiYKKwl0ZXN0X2NtcCBtaXNzaW5nLWVyciBlcnIgJiYKKwkoCisJCWNhdCBicmllZi1saXN0ICYmCisJCWVjaG8gIiRNSVNTSU5HICRyIgorCSkgfCBzb3J0IC1rIDIgPm1pc3NpbmctYnJpZWYtZXhwZWN0ZWQgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKG9iamVjdG5hbWUpICUocmVmbmFtZSkiID5icmllZi1vdXQgMj5icmllZi1lcnIgJiYKKwl0ZXN0X2NtcCBtaXNzaW5nLWJyaWVmLWV4cGVjdGVkIGJyaWVmLW91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBicmllZi1lcnIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2MzAyLWZvci1lYWNoLXJlZi1maWx0ZXIuc2ggYi90L3Q2MzAyLWZvci1lYWNoLXJlZi1maWx0ZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmU0Nzk2YwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDYzMDItZm9yLWVhY2gtcmVmLWZpbHRlci5zaApAQCAtMCwwICsxLDI1OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZm9yLWVhY2gtcmVmcyB1c2FnZSBvZiByZWYtZmlsdGVyIEFQSXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItZ3BnLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBHUEcKK3RoZW4KKwlza2lwX2FsbD0ic2tpcHBpbmcgZm9yLWVhY2gtcmVmIHRlc3RzLCBHUEcgbm90IGF2YWlsYWJsZSIKKwl0ZXN0X2RvbmUKK2ZpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNvbWUgaGlzdG9yeSBhbmQgcmVmcycgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyICYmCisJZ2l0IHRhZyAtcyAtbSAiQSBzaWduZWQgdGFnIG1lc3NhZ2UiIHNpZ25lZC10YWcgJiYKKwlnaXQgdGFnIC1zIC1tICJBbm5vbmF0ZWQgZG91Ymx5IiBkb3VibGUtdGFnIHNpZ25lZC10YWcgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9vZGQvc3BvdCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsdGVyaW5nIHdpdGggLS1wb2ludHMtYXQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9tYXN0ZXIKKwlyZWZzL29kZC9zcG90CisJcmVmcy90YWdzL3RocmVlCisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgLS1wb2ludHMtYXQ9bWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHNpZ25lZCB0YWdzIHdpdGggLS1wb2ludHMtYXQnICcKKwlzZWQgLWUgInMvWiQvLyIgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9zaWRlIFoKKwlyZWZzL3RhZ3MvZm91ciBaCisJcmVmcy90YWdzL3NpZ25lZC10YWcgZm91cgorCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkgJSgqc3ViamVjdCkiIC0tcG9pbnRzLWF0PXNpZGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsdGVyaW5nIHdpdGggLS1tZXJnZWQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9tYXN0ZXIKKwlyZWZzL29kZC9zcG90CisJcmVmcy90YWdzL29uZQorCXJlZnMvdGFncy90aHJlZQorCXJlZnMvdGFncy90d28KKwlFT0YKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWUpIiAtLW1lcmdlZD1tYXN0ZXIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsdGVyaW5nIHdpdGggLS1uby1tZXJnZWQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9zaWRlCisJcmVmcy90YWdzL2RvdWJsZS10YWcKKwlyZWZzL3RhZ3MvZm91cgorCXJlZnMvdGFncy9zaWduZWQtdGFnCisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgLS1uby1tZXJnZWQ9bWFzdGVyID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlcmluZyB3aXRoIC0tY29udGFpbnMnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJcmVmcy9oZWFkcy9tYXN0ZXIKKwlyZWZzL2hlYWRzL3NpZGUKKwlyZWZzL29kZC9zcG90CisJcmVmcy90YWdzL2RvdWJsZS10YWcKKwlyZWZzL3RhZ3MvZm91cgorCXJlZnMvdGFncy9zaWduZWQtdGFnCisJcmVmcy90YWdzL3RocmVlCisJcmVmcy90YWdzL3R3bworCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUocmVmbmFtZSkiIC0tY29udGFpbnM9dHdvID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyUoY29sb3IpIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9IiUoY29sb3IpJShyZWZuYW1lKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGVmdCBhbGlnbm1lbnQgaXMgZGVmYXVsdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlyZWZuYW1lIGlzIHJlZnMvaGVhZHMvbWFzdGVyICB8cmVmcy9oZWFkcy9tYXN0ZXIKKwlyZWZuYW1lIGlzIHJlZnMvaGVhZHMvc2lkZSAgICB8cmVmcy9oZWFkcy9zaWRlCisJcmVmbmFtZSBpcyByZWZzL29kZC9zcG90ICAgICAgfHJlZnMvb2RkL3Nwb3QKKwlyZWZuYW1lIGlzIHJlZnMvdGFncy9kb3VibGUtdGFnfHJlZnMvdGFncy9kb3VibGUtdGFnCisJcmVmbmFtZSBpcyByZWZzL3RhZ3MvZm91ciAgICAgfHJlZnMvdGFncy9mb3VyCisJcmVmbmFtZSBpcyByZWZzL3RhZ3Mvb25lICAgICAgfHJlZnMvdGFncy9vbmUKKwlyZWZuYW1lIGlzIHJlZnMvdGFncy9zaWduZWQtdGFnfHJlZnMvdGFncy9zaWduZWQtdGFnCisJcmVmbmFtZSBpcyByZWZzL3RhZ3MvdGhyZWUgICAgfHJlZnMvdGFncy90aHJlZQorCXJlZm5hbWUgaXMgcmVmcy90YWdzL3R3byAgICAgIHxyZWZzL3RhZ3MvdHdvCisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShhbGlnbjozMClyZWZuYW1lIGlzICUocmVmbmFtZSklKGVuZCl8JShyZWZuYW1lKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlkZGxlIGFsaWdubWVudCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwl8IHJlZm5hbWUgaXMgcmVmcy9oZWFkcy9tYXN0ZXIgfHJlZnMvaGVhZHMvbWFzdGVyCisJfCAgcmVmbmFtZSBpcyByZWZzL2hlYWRzL3NpZGUgIHxyZWZzL2hlYWRzL3NpZGUKKwl8ICAgcmVmbmFtZSBpcyByZWZzL29kZC9zcG90ICAgfHJlZnMvb2RkL3Nwb3QKKwl8cmVmbmFtZSBpcyByZWZzL3RhZ3MvZG91YmxlLXRhZ3xyZWZzL3RhZ3MvZG91YmxlLXRhZworCXwgIHJlZm5hbWUgaXMgcmVmcy90YWdzL2ZvdXIgICB8cmVmcy90YWdzL2ZvdXIKKwl8ICAgcmVmbmFtZSBpcyByZWZzL3RhZ3Mvb25lICAgfHJlZnMvdGFncy9vbmUKKwl8cmVmbmFtZSBpcyByZWZzL3RhZ3Mvc2lnbmVkLXRhZ3xyZWZzL3RhZ3Mvc2lnbmVkLXRhZworCXwgIHJlZm5hbWUgaXMgcmVmcy90YWdzL3RocmVlICB8cmVmcy90YWdzL3RocmVlCisJfCAgIHJlZm5hbWUgaXMgcmVmcy90YWdzL3R3byAgIHxyZWZzL3RhZ3MvdHdvCisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0ifCUoYWxpZ246bWlkZGxlLDMwKXJlZm5hbWUgaXMgJShyZWZuYW1lKSUoZW5kKXwlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyaWdodCBhbGlnbm1lbnQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJfCAgcmVmbmFtZSBpcyByZWZzL2hlYWRzL21hc3RlcnxyZWZzL2hlYWRzL21hc3RlcgorCXwgICAgcmVmbmFtZSBpcyByZWZzL2hlYWRzL3NpZGV8cmVmcy9oZWFkcy9zaWRlCisJfCAgICAgIHJlZm5hbWUgaXMgcmVmcy9vZGQvc3BvdHxyZWZzL29kZC9zcG90CisJfHJlZm5hbWUgaXMgcmVmcy90YWdzL2RvdWJsZS10YWd8cmVmcy90YWdzL2RvdWJsZS10YWcKKwl8ICAgICByZWZuYW1lIGlzIHJlZnMvdGFncy9mb3VyfHJlZnMvdGFncy9mb3VyCisJfCAgICAgIHJlZm5hbWUgaXMgcmVmcy90YWdzL29uZXxyZWZzL3RhZ3Mvb25lCisJfHJlZm5hbWUgaXMgcmVmcy90YWdzL3NpZ25lZC10YWd8cmVmcy90YWdzL3NpZ25lZC10YWcKKwl8ICAgIHJlZm5hbWUgaXMgcmVmcy90YWdzL3RocmVlfHJlZnMvdGFncy90aHJlZQorCXwgICAgICByZWZuYW1lIGlzIHJlZnMvdGFncy90d298cmVmcy90YWdzL3R3bworCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgLS1mb3JtYXQ9InwlKGFsaWduOjMwLHJpZ2h0KXJlZm5hbWUgaXMgJShyZWZuYW1lKSUoZW5kKXwlKHJlZm5hbWUpIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIEluZGl2aWR1YWwgYXRvbXMgaW5zaWRlICUoYWxpZ246Li4uKSBhbmQgJShlbmQpIG11c3Qgbm90IGJlIHF1b3RlZC4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxpZ25tZW50IHdpdGggZm9ybWF0IHF1b3RlJyAiCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXwnICAgICAgJ1wnJ21hc3RlcnwgQSBVIFRob3InXCcnICAgICAgJ3wKKwl8JyAgICAgICAnXCcnc2lkZXwgQSBVIFRob3InXCcnICAgICAgICd8CisJfCcgICAgICdcJydvZGQvc3BvdHwgQSBVIFRob3InXCcnICAgICAnfAorCXwnICAgICAgICAnXCcnZG91YmxlLXRhZ3wgJ1wnJyAgICAgICAgJ3wKKwl8JyAgICAgICAnXCcnZm91cnwgQSBVIFRob3InXCcnICAgICAgICd8CisJfCcgICAgICAgJ1wnJ29uZXwgQSBVIFRob3InXCcnICAgICAgICAnfAorCXwnICAgICAgICAnXCcnc2lnbmVkLXRhZ3wgJ1wnJyAgICAgICAgJ3wKKwl8JyAgICAgICdcJyd0aHJlZXwgQSBVIFRob3InXCcnICAgICAgICd8CisJfCcgICAgICAgJ1wnJ3R3b3wgQSBVIFRob3InXCcnICAgICAgICAnfAorCUVPRgorCWdpdCBmb3ItZWFjaC1yZWYgLS1zaGVsbCAtLWZvcm1hdD1cInwlKGFsaWduOjMwLG1pZGRsZSknJShyZWZuYW1lOnNob3J0KXwgJShhdXRob3JuYW1lKSclKGVuZCl8XCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIGFsaWdubWVudCB3aXRoIHF1b3RlIGZvcm1hdHRpbmcnICIKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJfCcgICAgICAgICBtYXN0ZXIgICAgICAgICAgICAgICAnfAorCXwnICAgICAgICAgICBzaWRlICAgICAgICAgICAgICAgJ3wKKwl8JyAgICAgICBvZGQvc3BvdCAgICAgICAgICAgICAgICd8CisJfCcgICAgIGRvdWJsZS10YWcgICAgICAgICAgICAgICAnfAorCXwnICAgICAgICAgICBmb3VyICAgICAgICAgICAgICAgJ3wKKwl8JyAgICAgICAgICAgIG9uZSAgICAgICAgICAgICAgICd8CisJfCcgICAgIHNpZ25lZC10YWcgICAgICAgICAgICAgICAnfAorCXwnICAgICAgICAgIHRocmVlICAgICAgICAgICAgICAgJ3wKKwl8JyAgICAgICAgICAgIHR3byAgICAgICAgICAgICAgICd8CisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNoZWxsIC0tZm9ybWF0PSd8JShhbGlnbjozMCxsZWZ0KSUoYWxpZ246MTUscmlnaHQpJShyZWZuYW1lOnNob3J0KSUoZW5kKSUoZW5kKXwnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIGAlKGNvbnRlbnRzOmxpbmVzPTEpYCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwltYXN0ZXIgfHRocmVlCisJc2lkZSB8Zm91cgorCW9kZC9zcG90IHx0aHJlZQorCWRvdWJsZS10YWcgfEFubm9uYXRlZCBkb3VibHkKKwlmb3VyIHxmb3VyCisJb25lIHxvbmUKKwlzaWduZWQtdGFnIHxBIHNpZ25lZCB0YWcgbWVzc2FnZQorCXRocmVlIHx0aHJlZQorCXR3byB8dHdvCisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lOnNob3J0KSB8JShjb250ZW50czpsaW5lcz0xKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYCUoY29udGVudHM6bGluZXM9MClgJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCW1hc3RlciB8CisJc2lkZSB8CisJb2RkL3Nwb3QgfAorCWRvdWJsZS10YWcgfAorCWZvdXIgfAorCW9uZSB8CisJc2lnbmVkLXRhZyB8CisJdGhyZWUgfAorCXR3byB8CisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lOnNob3J0KSB8JShjb250ZW50czpsaW5lcz0wKSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgYCUoY29udGVudHM6bGluZXM9OTk5OTkpYCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwltYXN0ZXIgfHRocmVlCisJc2lkZSB8Zm91cgorCW9kZC9zcG90IHx0aHJlZQorCWRvdWJsZS10YWcgfEFubm9uYXRlZCBkb3VibHkKKwlmb3VyIHxmb3VyCisJb25lIHxvbmUKKwlzaWduZWQtdGFnIHxBIHNpZ25lZCB0YWcgbWVzc2FnZQorCXRocmVlIHx0aHJlZQorCXR3byB8dHdvCisJRU9GCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lOnNob3J0KSB8JShjb250ZW50czpsaW5lcz05OTk5OSkiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2AlKGNvbnRlbnRzOmxpbmVzPS0xKWAgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKHJlZm5hbWU6c2hvcnQpIHwlKGNvbnRlbnRzOmxpbmVzPS0xKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZm9yIHZlcnNpb24gc29ydCcgJworCXRlc3RfY29tbWl0IGZvbzEuMyAmJgorCXRlc3RfY29tbWl0IGZvbzEuNiAmJgorCXRlc3RfY29tbWl0IGZvbzEuMTAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyc2lvbiBzb3J0JyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLXNvcnQ9dmVyc2lvbjpyZWZuYW1lIC0tZm9ybWF0PSIlKHJlZm5hbWU6c2hvcnQpIiByZWZzL3RhZ3MvIHwgZ3JlcCAiZm9vIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuMworCWZvbzEuNgorCWZvbzEuMTAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcnNpb24gc29ydCAoc2hvcnRlbmVkKScgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1zb3J0PXY6cmVmbmFtZSAtLWZvcm1hdD0iJShyZWZuYW1lOnNob3J0KSIgcmVmcy90YWdzLyB8IGdyZXAgImZvbyIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjMKKwlmb28xLjYKKwlmb28xLjEwCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnNlIHZlcnNpb24gc29ydCcgJworCWdpdCBmb3ItZWFjaC1yZWYgLS1zb3J0PS12ZXJzaW9uOnJlZm5hbWUgLS1mb3JtYXQ9IiUocmVmbmFtZTpzaG9ydCkiIHJlZnMvdGFncy8gfCBncmVwICJmb28iID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS4xMAorCWZvbzEuNgorCWZvbzEuMworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2NTAwLWdjLnNoIGIvdC90NjUwMC1nYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZDdkNDE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NjUwMC1nYy5zaApAQCAtMCwwICsxLDQ2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgZ2l0IGdjIHRlc3RzCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyBlbXB0eSByZXBvc2l0b3J5JyAnCisJZ2l0IGdjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIGRvZXMgbm90IGxlYXZlIGJlaGluZCBwaWQgZmlsZScgJworCWdpdCBnYyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvZ2MucGlkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2djIC0tZ29iYmxlZGVnb29rJyAnCisJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IGdjIC0tbm9uc2Vuc2UgMj5lcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZTogZ2l0IGdjIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2MgLWggd2l0aCBpbnZhbGlkIGNvbmZpZ3VyYXRpb24nICcKKwlta2RpciBicm9rZW4gJiYKKwkoCisJCWNkIGJyb2tlbiAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvICJbZ2NdIHBydW5lZXhwaXJlID0gQ09SUlVQVCIgPj4uZ2l0L2NvbmZpZyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEyOSBnaXQgZ2MgLWggPnVzYWdlIDI+JjEKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2UiIGJyb2tlbi91c2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnYyBpcyBub3QgYWJvcnRlZCBkdWUgdG8gYSBzdGFsZSBzeW1yZWYnICcKKwlnaXQgaW5pdCByZW1vdGUgJiYKKwkoCisJCWNkIHJlbW90ZSAmJgorCQl0ZXN0X2NvbW1pdCBpbml0aWFsICYmCisJCWdpdCBjbG9uZSAuIC4uL2NsaWVudCAmJgorCQlnaXQgYnJhbmNoIC1tIGRldmVsb3AgJiYKKwkJY2QgLi4vY2xpZW50ICYmCisJCWdpdCBmZXRjaCAtLXBydW5lICYmCisJCWdpdCBnYworCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q2NTAxLWZyZXNoZW4tb2JqZWN0cy5zaCBiL3QvdDY1MDEtZnJlc2hlbi1vYmplY3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmMDc2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q2NTAxLWZyZXNoZW4tb2JqZWN0cy5zaApAQCAtMCwwICsxLDE0NyBAQAorIyEvYmluL3NoCisjCisjIFRoaXMgdGVzdCBjb3ZlcnMgdGhlIGhhbmRsaW5nIG9mIG9iamVjdHMgd2hpY2ggbWlnaHQgaGF2ZSBvbGQKKyMgbXRpbWVzIGluIHRoZSBmaWxlc3lzdGVtIChiZWNhdXNlIHRoZXkgd2VyZSB1c2VkIHByZXZpb3VzbHkpCisjIGFuZCBhcmUganVzdCBub3cgYmVjb21pbmcgcmVmZXJlbmNlZCBhZ2Fpbi4KKyMKKyMgV2UncmUgZ29pbmcgdG8gZG8gdHdvIHRoaW5ncyB0aGF0IGFyZSBhIGxpdHRsZSBiaXQgImZha2UiIHRvCisjIGhlbHAgbWFrZSBvdXIgc2ltdWxhdGlvbiBlYXNpZXI6CisjCisjICAgMS4gV2UnbGwgdHVybiBvZmYgcmVmbG9ncy4gWW91IGNhbiBzdGlsbCBydW4gaW50bworIyAgICAgIHByb2JsZW1zIHdpdGggcmVmbG9ncyBvbiwgYnV0IHlvdXIgb2JqZWN0cworIyAgICAgIGRvbid0IGdldCBwcnVuZWQgdW50aWwgYm90aCB0aGUgcmVmbG9nIGV4cGlyYXRpb24KKyMgICAgICBoYXMgcGFzc2VkIG9uIHRoZWlyIHJlZmVyZW5jZXMsIF9hbmRfIHRoZXkgYXJlIG91dAorIyAgICAgIG9mIHBydW5lJ3MgZXhwaXJhdGlvbiBwZXJpb2QuIERyb3BwaW5nIHJlZmxvZ3MKKyMgICAgICBtZWFucyB3ZSBvbmx5IGhhdmUgdG8gZGVhbCB3aXRoIG9uZSB2YXJpYWJsZSBpbiBvdXIgdGVzdHMsCisjICAgICAgYnV0IHRoZSByZXN1bHRzIGdlbmVyYWxpemUuCisjCisjICAgMi4gV2UnbGwgdXNlIGEgdGVtcG9yYXJ5IGluZGV4IGZpbGUgdG8gY3JlYXRlIG91cgorIyAgICAgIHdvcmtzLWluLXByb2dyZXNzLiBNb3N0IHdvcmtmbG93cyB3b3VsZCBtZW50aW9uCisjICAgICAgcmVmZXJlbmNlZCBvYmplY3RzIGluIHRoZSBpbmRleCwgd2hpY2ggcHJ1bmUgdGFrZXMKKyMgICAgICBpbnRvIGFjY291bnQuIEhvd2V2ZXIsIG1hbnkgb3BlcmF0aW9ucyBkb24ndC4gRm9yCisjICAgICAgZXhhbXBsZSwgYSBwYXJ0aWFsIGNvbW1pdCB3aXRoICJnaXQgY29tbWl0IGZvbyIKKyMgICAgICB3aWxsIHVzZSBhIHRlbXBvcmFyeSBpbmRleC4gT3IgdGhleSBtYXkgbm90IG5lZWQKKyMgICAgICBhbiBpbmRleCBhdCBhbGwgKGUuZy4sIGNyZWF0aW5nIGEgbmV3IGNvbW1pdAorIyAgICAgIHRvIHJlZmVyIHRvIGFuIGV4aXN0aW5nIHRyZWUpLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdjaGVjayBwcnVuaW5nIG9mIGRlcGVuZGVudCBvYmplY3RzJworLiAuL3Rlc3QtbGliLnNoCisKKyMgV2UgY2FyZSBhYm91dCByZWFjaGFiaWxpdHksIHNvIHdlIGRvIG5vdCB3YW50IHRvIHVzZQorIyB0aGUgbm9ybWFsIHRlc3RfY29tbWl0LCB3aGljaCBjcmVhdGVzIGV4dHJhIHRhZ3MuCithZGQgKCkgeworCWVjaG8gIiQxIiA+IiQxIiAmJgorCWdpdCBhZGQgIiQxIgorfQorY29tbWl0ICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwlhZGQgIiQxIiAmJgorCWdpdCBjb21taXQgLW0gIiQxIgorfQorCittYXliZV9yZXBhY2sgKCkgeworCWlmIHRlc3QgLW4gIiRyZXBhY2siOyB0aGVuCisJCWdpdCByZXBhY2sgLWFkCisJZmkKK30KKworZm9yIHJlcGFjayBpbiAnJyB0cnVlOyBkbworCXRpdGxlPSR7cmVwYWNrOityZXBhY2t9CisJdGl0bGU9JHt0aXRsZTotbG9vc2V9CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJtYWtlIHJlcG8gY29tcGxldGVseSBlbXB0eSAoJHRpdGxlKSIgJworCQlybSAtcmYgLmdpdCAmJgorCQlnaXQgaW5pdAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImRpc2FibGUgcmVmbG9ncyAoJHRpdGxlKSIgJworCQlnaXQgY29uZmlnIGNvcmUubG9nYWxscmVmdXBkYXRlcyBmYWxzZSAmJgorCQlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT1hbGwgLS1hbGwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzZXR1cCBiYXNpYyBoaXN0b3J5ICgkdGl0bGUpIiAnCisJCWNvbW1pdCBiYXNlCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiY3JlYXRlIGFuZCBhYmFuZG9uIHNvbWUgb2JqZWN0cyAoJHRpdGxlKSIgJworCQlnaXQgY2hlY2tvdXQgLWIgZXhwZXJpbWVudCAmJgorCQljb21taXQgYWJhbmRvbiAmJgorCQltYXliZV9yZXBhY2sgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgYnJhbmNoIC1EIGV4cGVyaW1lbnQKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzaW11bGF0ZSB0aW1lIHBhc3NpbmcgKCR0aXRsZSkiICcKKwkJZmluZCAuZ2l0L29iamVjdHMgLXR5cGUgZiB8CisJCXhhcmdzIHRlc3QtY2htdGltZSAtdiAtODY0MDAKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJzdGFydCB3cml0aW5nIG5ldyBjb21taXQgd2l0aCBvbGQgYmxvYiAoJHRpdGxlKSIgJworCQl0cmVlPSQoCisJCQlHSVRfSU5ERVhfRklMRT1pbmRleC50bXAgJiYKKwkJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQkJZ2l0IHJlYWQtdHJlZSBIRUFEICYmCisJCQlhZGQgdW5yZWxhdGVkICYmCisJCQlhZGQgYWJhbmRvbiAmJgorCQkJZ2l0IHdyaXRlLXRyZWUKKwkJKQorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgInNpbXVsdGFuZW91cyBnYyAoJHRpdGxlKSIgJworCQlnaXQgZ2MgLS1wcnVuZT0xMi5ob3Vycy5hZ28KKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJmaW5pc2ggd3JpdGluZyBvdXQgY29tbWl0ICgkdGl0bGUpIiAnCisJCWNvbW1pdD0kKGVjaG8gZm9vIHwgZ2l0IGNvbW1pdC10cmVlIC1wIEhFQUQgJHRyZWUpICYmCisJCWdpdCB1cGRhdGUtcmVmIEhFQUQgJGNvbW1pdAorCScKKworCSMgImFiYW5kb24iIGJsb2Igc2hvdWxkIGhhdmUgYmVlbiByZXNjdWVkIGJ5IHJlZmVyZW5jZSBmcm9tIG5ldyB0cmVlCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAicmVwb3NpdG9yeSBwYXNzZXMgZnNjayAoJHRpdGxlKSIgJworCQlnaXQgZnNjaworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImFiYW5kb24gb2JqZWN0cyBhZ2FpbiAoJHRpdGxlKSIgJworCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJCWZpbmQgLmdpdC9vYmplY3RzIC10eXBlIGYgfAorCQl4YXJncyB0ZXN0LWNobXRpbWUgLXYgLTg2NDAwCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic3RhcnQgd3JpdGluZyBuZXcgY29tbWl0IHdpdGggc2FtZSB0cmVlICgkdGl0bGUpIiAnCisJCXRyZWU9JCgKKwkJCUdJVF9JTkRFWF9GSUxFPWluZGV4LnRtcCAmJgorCQkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCQlnaXQgcmVhZC10cmVlIEhFQUQgJiYKKwkJCWFkZCBhYmFuZG9uICYmCisJCQlhZGQgdW5yZWxhdGVkICYmCisJCQlnaXQgd3JpdGUtdHJlZQorCQkpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic2ltdWx0YW5lb3VzIGdjICgkdGl0bGUpIiAnCisJCWdpdCBnYyAtLXBydW5lPTEyLmhvdXJzLmFnbworCScKKworCSMgdHJlZSBzaG91bGQgaGF2ZSBiZWVuIHJlZnJlc2hlZCBieSB3cml0ZS10cmVlCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZmluaXNoIHdyaXRpbmcgb3V0IGNvbW1pdCAoJHRpdGxlKSIgJworCQljb21taXQ9JChlY2hvIGZvbyB8IGdpdCBjb21taXQtdHJlZSAtcCBIRUFEICR0cmVlKSAmJgorCQlnaXQgdXBkYXRlLXJlZiBIRUFEICRjb21taXQKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBjb21wbGFpbiBhYm91dCBleGlzdGluZyBicm9rZW4gbGlua3MnICcKKwljYXQgPmJyb2tlbi1jb21taXQgPDwtXEVPRiAmJgorCXRyZWUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorCXBhcmVudCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCisJYXV0aG9yIHdoYXRldmVyIDx3aGF0ZXZlckBleGFtcGxlLmNvbT4gMTIzNCAtMDAwMAorCWNvbW1pdHRlciB3aGF0ZXZlciA8d2hhdGV2ZXJAZXhhbXBsZS5jb20+IDEyMzQgLTAwMDAKKworCXNvbWUgbWVzc2FnZQorCUVPRgorCWNvbW1pdD0kKGdpdCBoYXNoLW9iamVjdCAtdCBjb21taXQgLXcgYnJva2VuLWNvbW1pdCkgJiYKKwlnaXQgZ2MgMj5zdGRlcnIgJiYKKwl2ZXJib3NlIGdpdCBjYXQtZmlsZSAtZSAkY29tbWl0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHN0ZGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDEtbXYuc2ggYi90L3Q3MDAxLW12LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdiNTYwODEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDAxLW12LnNoCkBAIC0wLDAgKzEsNDc4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG12IGluIHN1YmRpcnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3ByZXBhcmUgcmVmZXJlbmNlIHRyZWUnIFwKKyAgICAnbWtkaXIgcGF0aDAgcGF0aDEgJiYKKyAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMC9DT1BZSU5HICYmCisgICAgIGdpdCBhZGQgcGF0aDAvQ09QWUlORyAmJgorICAgICBnaXQgY29tbWl0IC1tIGFkZCAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ21vdmluZyB0aGUgZmlsZSBvdXQgb2Ygc3ViZGlyZWN0b3J5JyBcCisgICAgJ2NkIHBhdGgwICYmIGdpdCBtdiBDT1BZSU5HIC4uL3BhdGgxL0NPUFlJTkcnCisKKyMgaW4gcGF0aDAgY3VycmVudGx5Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29tbWl0aW5nIHRoZSBjaGFuZ2UnIFwKKyAgICAnY2QgLi4gJiYgZ2l0IGNvbW1pdCAtbSBtb3ZlLW91dCAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIHRoZSBjb21taXQnIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAtciAtTSAtLW5hbWUtc3RhdHVzICBIRUFEXiBIRUFEIHwgXAorICAgIGdyZXAgIl5SMTAwLi4qcGF0aDAvQ09QWUlORy4uKnBhdGgxL0NPUFlJTkciJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbW92aW5nIHRoZSBmaWxlIGJhY2sgaW50byBzdWJkaXJlY3RvcnknIFwKKyAgICAnY2QgcGF0aDAgJiYgZ2l0IG12IC4uL3BhdGgxL0NPUFlJTkcgQ09QWUlORycKKworIyBpbiBwYXRoMCBjdXJyZW50bHkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb21taXRpbmcgdGhlIGNoYW5nZScgXAorICAgICdjZCAuLiAmJiBnaXQgY29tbWl0IC1tIG1vdmUtaW4gLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyB0aGUgY29tbWl0JyBcCisgICAgJ2dpdCBkaWZmLXRyZWUgLXIgLU0gLS1uYW1lLXN0YXR1cyAgSEVBRF4gSEVBRCB8IFwKKyAgICBncmVwICJeUjEwMC4uKnBhdGgxL0NPUFlJTkcuLipwYXRoMC9DT1BZSU5HIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIC1rIG9uIG5vbi1leGlzdGluZyBmaWxlJyBcCisgICAgJ2dpdCBtdiAtayBpZG9udGV4aXN0IHBhdGgwJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgLWsgb24gdW50cmFja2VkIGZpbGUnIFwKKyAgICAndG91Y2ggdW50cmFja2VkMSAmJgorICAgICBnaXQgbXYgLWsgdW50cmFja2VkMSBwYXRoMCAmJgorICAgICB0ZXN0IC1mIHVudHJhY2tlZDEgJiYKKyAgICAgdGVzdCAhIC1mIHBhdGgwL3VudHJhY2tlZDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyAtayBvbiBtdWx0aXBsZSB1bnRyYWNrZWQgZmlsZXMnIFwKKyAgICAndG91Y2ggdW50cmFja2VkMiAmJgorICAgICBnaXQgbXYgLWsgdW50cmFja2VkMSB1bnRyYWNrZWQyIHBhdGgwICYmCisgICAgIHRlc3QgLWYgdW50cmFja2VkMSAmJgorICAgICB0ZXN0IC1mIHVudHJhY2tlZDIgJiYKKyAgICAgdGVzdCAhIC1mIHBhdGgwL3VudHJhY2tlZDEgJiYKKyAgICAgdGVzdCAhIC1mIHBhdGgwL3VudHJhY2tlZDInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyAtZiBvbiB1bnRyYWNrZWQgZmlsZSB3aXRoIGV4aXN0aW5nIHRhcmdldCcgXAorICAgICd0b3VjaCBwYXRoMC91bnRyYWNrZWQxICYmCisgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtdiAtZiB1bnRyYWNrZWQxIHBhdGgwICYmCisgICAgIHRlc3QgISAtZiAuZ2l0L2luZGV4LmxvY2sgJiYKKyAgICAgdGVzdCAtZiB1bnRyYWNrZWQxICYmCisgICAgIHRlc3QgLWYgcGF0aDAvdW50cmFja2VkMScKKworIyBjbGVhbiB1cCB0aGUgbWVzcyBpbiBjYXNlIGJhZCB0aGluZ3MgaGFwcGVuCitybSAtZiBpZG9udGV4aXN0IHVudHJhY2tlZDEgdW50cmFja2VkMiBcCisgICAgIHBhdGgwL2lkb250ZXhpc3QgcGF0aDAvdW50cmFja2VkMSBwYXRoMC91bnRyYWNrZWQyIFwKKyAgICAgLmdpdC9pbmRleC5sb2NrCitybWRpciBwYXRoMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbW92aW5nIHRvIGFic2VudCB0YXJnZXQgd2l0aCB0cmFpbGluZyBzbGFzaCcgXAorICAgICd0ZXN0X211c3RfZmFpbCBnaXQgbXYgcGF0aDAvQ09QWUlORyBuby1zdWNoLWRpci8gJiYKKyAgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG12IHBhdGgwL0NPUFlJTkcgbm8tc3VjaC1kaXIvLyAmJgorICAgICBnaXQgbXYgcGF0aDAvIG5vLXN1Y2gtZGlyLyAmJgorICAgICB0ZXN0X3BhdGhfaXNfZGlyIG5vLXN1Y2gtZGlyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2xlYW4gdXAnIFwKKyAgICAnZ2l0IHJlc2V0IC0taGFyZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ21vdmluZyB0byBleGlzdGluZyB1bnRyYWNrZWQgdGFyZ2V0IHdpdGggdHJhaWxpbmcgc2xhc2gnIFwKKyAgICAnbWtkaXIgcGF0aDEgJiYKKyAgICAgZ2l0IG12IHBhdGgwLyBwYXRoMS8gJiYKKyAgICAgdGVzdF9wYXRoX2lzX2RpciBwYXRoMS9wYXRoMC8nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdtb3ZpbmcgdG8gZXhpc3RpbmcgdHJhY2tlZCB0YXJnZXQgd2l0aCB0cmFpbGluZyBzbGFzaCcgXAorICAgICdta2RpciBwYXRoMiAmJgorICAgICA+cGF0aDIvZmlsZSAmJiBnaXQgYWRkIHBhdGgyL2ZpbGUgJiYKKyAgICAgZ2l0IG12IHBhdGgxL3BhdGgwLyBwYXRoMi8gJiYKKyAgICAgdGVzdF9wYXRoX2lzX2RpciBwYXRoMi9wYXRoMC8nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjbGVhbiB1cCcgXAorICAgICdnaXQgcmVzZXQgLS1oYXJkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnYWRkaW5nIGFub3RoZXIgZmlsZScgXAorICAgICdjcCAiJFRFU1RfRElSRUNUT1JZIi8uLi9SRUFETUUgcGF0aDAvUkVBRE1FICYmCisgICAgIGdpdCBhZGQgcGF0aDAvUkVBRE1FICYmCisgICAgIGdpdCBjb21taXQgLW0gYWRkMiAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ21vdmluZyB3aG9sZSBzdWJkaXJlY3RvcnknIFwKKyAgICAnZ2l0IG12IHBhdGgwIHBhdGgyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY29tbWl0aW5nIHRoZSBjaGFuZ2UnIFwKKyAgICAnZ2l0IGNvbW1pdCAtbSBkaXItbW92ZSAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIHRoZSBjb21taXQnIFwKKyAgICAnZ2l0IGRpZmYtdHJlZSAtciAtTSAtLW5hbWUtc3RhdHVzICBIRUFEXiBIRUFEIHwgXAorICAgICBncmVwICJeUjEwMC4uKnBhdGgwL0NPUFlJTkcuLipwYXRoMi9DT1BZSU5HIiAmJgorICAgICBnaXQgZGlmZi10cmVlIC1yIC1NIC0tbmFtZS1zdGF0dXMgIEhFQUReIEhFQUQgfCBcCisgICAgIGdyZXAgIl5SMTAwLi4qcGF0aDAvUkVBRE1FLi4qcGF0aDIvUkVBRE1FIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3N1Y2NlZWQgd2hlbiBzb3VyY2UgaXMgYSBwcmVmaXggb2YgZGVzdGluYXRpb24nIFwKKyAgICAnZ2l0IG12IHBhdGgyL0NPUFlJTkcgcGF0aDIvQ09QWUlORy1yZW5hbWVkJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnbW92aW5nIHdob2xlIHN1YmRpcmVjdG9yeSBpbnRvIHN1YmRpcmVjdG9yeScgXAorICAgICdnaXQgbXYgcGF0aDIgcGF0aDEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjb21taXRpbmcgdGhlIGNoYW5nZScgXAorICAgICdnaXQgY29tbWl0IC1tIGRpci1tb3ZlIC1hJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgdGhlIGNvbW1pdCcgXAorICAgICdnaXQgZGlmZi10cmVlIC1yIC1NIC0tbmFtZS1zdGF0dXMgIEhFQUReIEhFQUQgfCBcCisgICAgIGdyZXAgIl5SMTAwLi4qcGF0aDIvQ09QWUlORy4uKnBhdGgxL3BhdGgyL0NPUFlJTkciICYmCisgICAgIGdpdCBkaWZmLXRyZWUgLXIgLU0gLS1uYW1lLXN0YXR1cyAgSEVBRF4gSEVBRCB8IFwKKyAgICAgZ3JlcCAiXlIxMDAuLipwYXRoMi9SRUFETUUuLipwYXRoMS9wYXRoMi9SRUFETUUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnZG8gbm90IG1vdmUgZGlyZWN0b3J5IG92ZXIgZXhpc3RpbmcgZGlyZWN0b3J5JyBcCisgICAgJ21rZGlyIHBhdGgwICYmIG1rZGlyIHBhdGgwL3BhdGgyICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBtdiBwYXRoMiBwYXRoMCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ21vdmUgaW50byAiLiInIFwKKyAgICAnZ2l0IG12IHBhdGgxL3BhdGgyLyAuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJNaWNoYWVsIENhc3NhcidzIHRlc3QgY2FzZSIgJworCXJtIC1mciAuZ2l0IHBhcGVycyBwYXJ0QSAmJgorCWdpdCBpbml0ICYmCisJbWtkaXIgLXAgcGFwZXJzL3Vuc29ydGVkIHBhcGVycy9hbGwtcGFwZXJzIHBhcnRBICYmCisJZWNobyBhID4gcGFwZXJzL3Vuc29ydGVkL1RoZXNpcy5wZGYgJiYKKwllY2hvIGIgPiBwYXJ0QS9vdXRsaW5lLnR4dCAmJgorCWVjaG8gYyA+IHBhcGVycy91bnNvcnRlZC9fYW5vdGhlciAmJgorCWdpdCBhZGQgcGFwZXJzIHBhcnRBICYmCisJVDE9YGdpdCB3cml0ZS10cmVlYCAmJgorCisJZ2l0IG12IHBhcGVycy91bnNvcnRlZC9UaGVzaXMucGRmIHBhcGVycy9hbGwtcGFwZXJzL21vby1ibGFoLnBkZiAmJgorCisJVD1gZ2l0IHdyaXRlLXRyZWVgICYmCisJZ2l0IGxzLXRyZWUgLXIgJFQgfCB2ZXJib3NlIGdyZXAgcGFydEEvb3V0bGluZS50eHQKKycKKworcm0gLWZyIHBhcGVycyBwYXJ0QSBwYXRoPworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJTZXJnZXkgVmxhc292J3MgdGVzdCBjYXNlIiAnCisJcm0gLWZyIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCW1rZGlyIGFiICYmCisJZGF0ZSA+YWIuYyAmJgorCWRhdGUgPmFiL2QgJiYKKwlnaXQgYWRkIGFiLmMgYWIgJiYKKwlnaXQgY29tbWl0IC1tICdpbml0aWFsJyAmJgorCWdpdCBtdiBhYiBhCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fic29sdXRlIHBhdGhuYW1lJyAnKAorCisJcm0gLWZyIG1pbmUgJiYKKwlta2RpciBtaW5lICYmCisJY2QgbWluZSAmJgorCXRlc3RfY3JlYXRlX3JlcG8gb25lICYmCisJY2Qgb25lICYmCisJbWtkaXIgc3ViICYmCisJPnN1Yi9maWxlICYmCisJZ2l0IGFkZCBzdWIvZmlsZSAmJgorCisJZ2l0IG12IHN1YiAiJChwd2QpL2luIiAmJgorCSEgdGVzdCAtZCBzdWIgJiYKKwl0ZXN0IC1kIGluICYmCisJZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCBpbi9maWxlCisKKworKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJzb2x1dGUgcGF0aG5hbWUgb3V0c2lkZSBzaG91bGQgZmFpbCcgJygKKworCXJtIC1mciBtaW5lICYmCisJbWtkaXIgbWluZSAmJgorCWNkIG1pbmUgJiYKKwlvdXQ9JChwd2QpICYmCisJdGVzdF9jcmVhdGVfcmVwbyBvbmUgJiYKKwljZCBvbmUgJiYKKwlta2RpciBzdWIgJiYKKwk+c3ViL2ZpbGUgJiYKKwlnaXQgYWRkIHN1Yi9maWxlICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbXYgc3ViICIkb3V0L291dCIgJiYKKwl0ZXN0IC1kIHN1YiAmJgorCSEgdGVzdCAtZCAuLi9pbiAmJgorCWdpdCBscy1maWxlcyAtLWVycm9yLXVubWF0Y2ggc3ViL2ZpbGUKKworKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG12IHRvIG1vdmUgbXVsdGlwbGUgc291cmNlcyBpbnRvIGEgZGlyZWN0b3J5JyAnCisJcm0gLWZyIC5naXQgJiYgZ2l0IGluaXQgJiYKKwlta2RpciBkaXIgb3RoZXIgJiYKKwk+ZGlyL2EudHh0ICYmCisJPmRpci9iLnR4dCAmJgorCWdpdCBhZGQgZGlyLz8udHh0ICYmCisJZ2l0IG12IGRpci9hLnR4dCBkaXIvYi50eHQgb3RoZXIgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXsgZWNobyBvdGhlci9hLnR4dDsgZWNobyBvdGhlci9iLnR4dDsgfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbXYgc2hvdWxkIG5vdCBjaGFuZ2Ugc2hhMSBvZiBtb3ZlZCBjYWNoZSBlbnRyeScgJworCisJcm0gLWZyIC5naXQgJiYKKwlnaXQgaW5pdCAmJgorCWVjaG8gMSA+ZGlydHkgJiYKKwlnaXQgYWRkIGRpcnR5ICYmCisJZW50cnk9IiQoZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZGlydHkgfCBjdXQgLWYgMSkiICYmCisJZ2l0IG12IGRpcnR5IGRpcnR5MiAmJgorCVsgIiRlbnRyeSIgPSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBkaXJ0eTIgfCBjdXQgLWYgMSkiIF0gJiYKKwllY2hvIDIgPmRpcnR5MiAmJgorCWdpdCBtdiBkaXJ0eTIgZGlydHkgJiYKKwlbICIkZW50cnkiID0gIiQoZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgZGlydHkgfCBjdXQgLWYgMSkiIF0KKworJworCitybSAtZiBkaXJ0eSBkaXJ0eTIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG12IHNob3VsZCBvdmVyd3JpdGUgc3ltbGluayB0byBhIGZpbGUnICcKKworCXJtIC1mciAuZ2l0ICYmCisJZ2l0IGluaXQgJiYKKwllY2hvIDEgPm1vdmVkICYmCisJdGVzdF9sbl9zX2FkZCBtb3ZlZCBzeW1saW5rICYmCisJZ2l0IGFkZCBtb3ZlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtdiBtb3ZlZCBzeW1saW5rICYmCisJZ2l0IG12IC1mIG1vdmVkIHN5bWxpbmsgJiYKKwkhIHRlc3QgLWUgbW92ZWQgJiYKKwl0ZXN0IC1mIHN5bWxpbmsgJiYKKwl0ZXN0ICIkKGNhdCBzeW1saW5rKSIgPSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0CisKKycKKworcm0gLWYgbW92ZWQgc3ltbGluaworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbXYgc2hvdWxkIG92ZXJ3cml0ZSBmaWxlIHdpdGggYSBzeW1saW5rJyAnCisKKwlybSAtZnIgLmdpdCAmJgorCWdpdCBpbml0ICYmCisJZWNobyAxID5tb3ZlZCAmJgorCXRlc3RfbG5fc19hZGQgbW92ZWQgc3ltbGluayAmJgorCWdpdCBhZGQgbW92ZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbXYgc3ltbGluayBtb3ZlZCAmJgorCWdpdCBtdiAtZiBzeW1saW5rIG1vdmVkICYmCisJISB0ZXN0IC1lIHN5bWxpbmsgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdjaGVjayBtb3ZlZCBzeW1saW5rJyAnCisKKwl0ZXN0IC1oIG1vdmVkCisnCisKK3JtIC1mIG1vdmVkIHN5bWxpbmsKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3VibW9kdWxlJyAnCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgYWRkIC4vLiBzdWIgJiYKKwllY2hvIGNvbnRlbnQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhZGRlZCBzdWIgYW5kIGZpbGUiICYmCisJZ2l0IGJyYW5jaCBzdWJtb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG12IGNhbm5vdCBtb3ZlIGEgc3VibW9kdWxlIGluIGEgZmlsZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtdiBzdWIgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbXYgbW92ZXMgYSBzdWJtb2R1bGUgd2l0aCBhIC5naXQgZGlyZWN0b3J5IGFuZCBubyAuZ2l0bW9kdWxlcycgJworCWVudHJ5PSIkKGdpdCBscy1maWxlcyAtLXN0YWdlIHN1YiB8IGN1dCAtZiAxKSIgJiYKKwlnaXQgcm0gLmdpdG1vZHVsZXMgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlybSAtZiAuZ2l0ICYmCisJCWNwIC1SIC1QIC1wIC4uLy5naXQvbW9kdWxlcy9zdWIgLmdpdCAmJgorCQlHSVRfV09SS19UUkVFPS4gZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud29ya3RyZWUKKwkpICYmCisJbWtkaXIgbW9kICYmCisJZ2l0IG12IHN1YiBtb2Qvc3ViICYmCisJISB0ZXN0IC1lIHN1YiAmJgorCVsgIiRlbnRyeSIgPSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBtb2Qvc3ViIHwgY3V0IC1mIDEpIiBdICYmCisJKAorCQljZCBtb2Qvc3ViICYmCisJCWdpdCBzdGF0dXMKKwkpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBtdiBtb3ZlcyBhIHN1Ym1vZHVsZSB3aXRoIGEgLmdpdCBkaXJlY3RvcnkgYW5kIC5naXRtb2R1bGVzJyAnCisJcm0gLXJmIG1vZCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWVudHJ5PSIkKGdpdCBscy1maWxlcyAtLXN0YWdlIHN1YiB8IGN1dCAtZiAxKSIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlybSAtZiAuZ2l0ICYmCisJCWNwIC1SIC1QIC1wIC4uLy5naXQvbW9kdWxlcy9zdWIgLmdpdCAmJgorCQlHSVRfV09SS19UUkVFPS4gZ2l0IGNvbmZpZyAtLXVuc2V0IGNvcmUud29ya3RyZWUKKwkpICYmCisJbWtkaXIgbW9kICYmCisJZ2l0IG12IHN1YiBtb2Qvc3ViICYmCisJISB0ZXN0IC1lIHN1YiAmJgorCVsgIiRlbnRyeSIgPSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBtb2Qvc3ViIHwgY3V0IC1mIDEpIiBdICYmCisJKAorCQljZCBtb2Qvc3ViICYmCisJCWdpdCBzdGF0dXMKKwkpICYmCisJZWNobyBtb2Qvc3ViID5leHBlY3RlZCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IG12IG1vdmVzIGEgc3VibW9kdWxlIHdpdGggZ2l0ZmlsZScgJworCXJtIC1yZiBtb2QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwllbnRyeT0iJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBzdWIgfCBjdXQgLWYgMSkiICYmCisJbWtkaXIgbW9kICYmCisJKAorCQljZCBtb2QgJiYKKwkJZ2l0IG12IC4uL3N1Yi8gLgorCSkgJiYKKwkhIHRlc3QgLWUgc3ViICYmCisJWyAiJGVudHJ5IiA9ICIkKGdpdCBscy1maWxlcyAtLXN0YWdlIG1vZC9zdWIgfCBjdXQgLWYgMSkiIF0gJiYKKwkoCisJCWNkIG1vZC9zdWIgJiYKKwkJZ2l0IHN0YXR1cworCSkgJiYKKwllY2hvIG1vZC9zdWIgPmV4cGVjdGVkICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLnBhdGggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdiBkb2VzIG5vdCBjb21wbGFpbiB3aGVuIG5vIC5naXRtb2R1bGVzIGZpbGUgaXMgZm91bmQnICcKKwlybSAtcmYgbW9kICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJZ2l0IHJtIC5naXRtb2R1bGVzICYmCisJZW50cnk9IiQoZ2l0IGxzLWZpbGVzIC0tc3RhZ2Ugc3ViIHwgY3V0IC1mIDEpIiAmJgorCW1rZGlyIG1vZCAmJgorCWdpdCBtdiBzdWIgbW9kL3N1YiAyPmFjdHVhbC5lcnIgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLmVyciAmJgorCSEgdGVzdCAtZSBzdWIgJiYKKwlbICIkZW50cnkiID0gIiQoZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgbW9kL3N1YiB8IGN1dCAtZiAxKSIgXSAmJgorCSgKKwkJY2QgbW9kL3N1YiAmJgorCQlnaXQgc3RhdHVzCisJKSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdiB3aWxsIGVycm9yIG91dCBvbiBhIG1vZGlmaWVkIC5naXRtb2R1bGVzIGZpbGUgdW5sZXNzIHN0YWdlZCcgJworCXJtIC1yZiBtb2QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIGZvby5iYXIgdHJ1ZSAmJgorCWVudHJ5PSIkKGdpdCBscy1maWxlcyAtLXN0YWdlIHN1YiB8IGN1dCAtZiAxKSIgJiYKKwlta2RpciBtb2QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbXYgc3ViIG1vZC9zdWIgMj5hY3R1YWwuZXJyICYmCisJdGVzdCAtcyBhY3R1YWwuZXJyICYmCisJdGVzdCAtZSBzdWIgJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0IC0tIHN1YiAmJgorCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwlnaXQgbXYgc3ViIG1vZC9zdWIgMj5hY3R1YWwuZXJyICYmCisJISB0ZXN0IC1zIGFjdHVhbC5lcnIgJiYKKwkhIHRlc3QgLWUgc3ViICYmCisJWyAiJGVudHJ5IiA9ICIkKGdpdCBscy1maWxlcyAtLXN0YWdlIG1vZC9zdWIgfCBjdXQgLWYgMSkiIF0gJiYKKwkoCisJCWNkIG1vZC9zdWIgJiYKKwkJZ2l0IHN0YXR1cworCSkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCWdpdCBkaWZmLWZpbGVzIC0tcXVpZXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXYgaXNzdWVzIGEgd2FybmluZyB3aGVuIHNlY3Rpb24gaXMgbm90IGZvdW5kIGluIC5naXRtb2R1bGVzJyAnCisJcm0gLXJmIG1vZCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3ViICYmCisJZ2l0IGFkZCAuZ2l0bW9kdWxlcyAmJgorCWVudHJ5PSIkKGdpdCBscy1maWxlcyAtLXN0YWdlIHN1YiB8IGN1dCAtZiAxKSIgJiYKKwllY2hvICJ3YXJuaW5nOiBDb3VsZCBub3QgZmluZCBzZWN0aW9uIGluIC5naXRtb2R1bGVzIHdoZXJlIHBhdGg9c3ViIiA+ZXhwZWN0LmVyciAmJgorCW1rZGlyIG1vZCAmJgorCWdpdCBtdiBzdWIgbW9kL3N1YiAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LmVyciBhY3R1YWwuZXJyICYmCisJISB0ZXN0IC1lIHN1YiAmJgorCVsgIiRlbnRyeSIgPSAiJChnaXQgbHMtZmlsZXMgLS1zdGFnZSBtb2Qvc3ViIHwgY3V0IC1mIDEpIiBdICYmCisJKAorCQljZCBtb2Qvc3ViICYmCisJCWdpdCBzdGF0dXMKKwkpICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwlnaXQgZGlmZi1maWxlcyAtLXF1aWV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ212IC0tZHJ5LXJ1biBkb2VzIG5vdCB0b3VjaCB0aGUgc3VibW9kdWxlIG9yIC5naXRtb2R1bGVzJyAnCisJcm0gLXJmIG1vZCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCW1rZGlyIG1vZCAmJgorCWdpdCBtdiAtbiBzdWIgbW9kL3N1YiAyPmFjdHVhbC5lcnIgJiYKKwl0ZXN0IC1mIHN1Yi8uZ2l0ICYmCisJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLSBzdWIgLmdpdG1vZHVsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgb3V0IGEgY29tbWl0IGJlZm9yZSBzdWJtb2R1bGUgbW92ZWQgbmVlZHMgbWFudWFsIHVwZGF0ZXMnICcKKwlnaXQgbXYgc3ViIHN1YjIgJiYKKwlnaXQgY29tbWl0IC1tICJtb3ZlZCBzdWIgdG8gc3ViMiIgJiYKKwlnaXQgY2hlY2tvdXQgLXEgSEVBRF4gMj5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJed2FybmluZzogdW5hYmxlIHRvIHJtZGlyIHN1YjI6IiBhY3R1YWwgJiYKKwlnaXQgc3RhdHVzIC1zIHN1YjIgPmFjdHVhbCAmJgorCWVjaG8gIj8/IHN1YjIvIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkhIHRlc3QgLWYgc3ViLy5naXQgJiYKKwl0ZXN0IC1mIHN1YjIvLmdpdCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJdGVzdCAtZiBzdWIvLmdpdCAmJgorCXJtIC1yZiBzdWIyICYmCisJZ2l0IGRpZmYtaW5kZXggLS1leGl0LWNvZGUgSEVBRCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYtZmlsZXMgLS1xdWlldCAtLSBzdWIgLmdpdG1vZHVsZXMgJiYKKwlnaXQgc3RhdHVzIC1zIHN1YjIgPmFjdHVhbCAmJgorCSEgdGVzdCAtcyBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXYgLWsgZG9lcyBub3QgYWNjaWRlbnRhbGx5IGRlc3Ryb3kgc3VibW9kdWxlcycgJworCWdpdCBjaGVja291dCBzdWJtb2R1bGUgJiYKKwlta2RpciBkdW1teSBkZXN0ICYmCisJZ2l0IG12IC1rIGR1bW15IHN1YiBkZXN0ICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJZ3JlcCAiXlIgIHN1YiAtPiBkZXN0L3N1YiIgYWN0dWFsICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCAuCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwMy1maWx0ZXItYnJhbmNoLnNoIGIvdC90NzAwMy1maWx0ZXItYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM3N2M2NDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDAzLWZpbHRlci1icmFuY2guc2gKQEAgLTAsMCArMSw0MjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgZmlsdGVyLWJyYW5jaCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2xpYi1ncGcuc2giCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb21taXQgQSAmJgorCUdJVF9DT01NSVRURVJfREFURT0iQDAgKzAwMDAiIEdJVF9BVVRIT1JfREFURT0iQDAgKzAwMDAiICYmCisJdGVzdF9jb21taXQgLS1ub3RpY2sgQiAmJgorCWdpdCBjaGVja291dCAtYiBicmFuY2ggQiAmJgorCXRlc3RfY29tbWl0IEQgJiYKKwlta2RpciBkaXIgJiYKKwl0ZXN0X2NvbW1pdCBkaXIvRCAmJgorCXRlc3RfY29tbWl0IEUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgQyAmJgorCWdpdCBjaGVja291dCBicmFuY2ggJiYKKwlnaXQgbWVyZ2UgQyAmJgorCWdpdCB0YWcgRiAmJgorCXRlc3RfY29tbWl0IEcgJiYKKwl0ZXN0X2NvbW1pdCBICisnCisjICogKEhFQUQsIGJyYW5jaCkgSAorIyAqIEcKKyMgKiAgIE1lcmdlIGNvbW1pdCAnQycgaW50byBicmFuY2gKKyMgfFwKKyMgfCAqIChtYXN0ZXIpIEMKKyMgKiB8IEUKKyMgKiB8IGRpci9ECisjICogfCBECisjIHwvCisjICogQgorIyAqIEEKKworCitIPSQoZ2l0IHJldi1wYXJzZSBIKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIGlkZW50aWNhbGx5JyAnCisJZ2l0IGZpbHRlci1icmFuY2ggYnJhbmNoCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN1bHQgaXMgcmVhbGx5IGlkZW50aWNhbCcgJworCXRlc3QgJEggPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSBiYXJlIHJlcG9zaXRvcnkgaWRlbnRpY2FsbHknICcKKwkoZ2l0IGNvbmZpZyBjb3JlLmJhcmUgdHJ1ZSAmJiBjZCAuZ2l0ICYmCisJIGdpdCBmaWx0ZXItYnJhbmNoIGJyYW5jaCA+IGZpbHRlci1vdXRwdXQgMj4mMSAmJgorCSEgZmdyZXAgZmF0YWwgZmlsdGVyLW91dHB1dCkKKycKK2dpdCBjb25maWcgY29yZS5iYXJlIGZhbHNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN1bHQgaXMgcmVhbGx5IGlkZW50aWNhbCcgJworCXRlc3QgJEggPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkKKycKKworVFJBU0hESVI9JChwd2QpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3JyZWN0IEdJVF9ESVIgd2hpbGUgdXNpbmcgLWQnICcKKwlta2RpciBkcmVwbyAmJgorCSggY2QgZHJlcG8gJiYKKwlnaXQgaW5pdCAmJgorCXRlc3RfY29tbWl0IGRyZXBvICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWQgIiRUUkFTSERJUi9kZm9vIiBcCisJCS0taW5kZXgtZmlsdGVyICJjcCBcIiRUUkFTSERJUlwiL2Rmb28vYmFja3VwLXJlZnMgXCIkVFJBU0hESVJcIiIgXAorCSkgJiYKKwlncmVwIGRyZXBvICIkVFJBU0hESVIvYmFja3VwLXJlZnMiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWUtZmlsdGVyIHdvcmtzIHdpdGggLWQnICcKKwlnaXQgaW5pdCBkcmVwby10cmVlICYmCisJKAorCQljZCBkcmVwby10cmVlICYmCisJCXRlc3RfY29tbWl0IG9uZSAmJgorCQlnaXQgZmlsdGVyLWJyYW5jaCAtZCAiJFRSQVNIRElSL2Rmb28iIFwKKwkJCS0tdHJlZS1maWx0ZXIgImVjaG8gY2hhbmdlZCA+b25lLnQiICYmCisJCWVjaG8gY2hhbmdlZCA+ZXhwZWN0ICYmCisJCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6b25lLnQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCXRlc3RfY21wIG9uZS50IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRmFpbCBpZiBjb21taXQgZmlsdGVyIGZhaWxzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1jb21taXQtZmlsdGVyICJleGl0IDEiIEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSwgcmVuYW1pbmcgYSBzcGVjaWZpYyBmaWxlJyAnCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS10cmVlLWZpbHRlciAibXYgRC50IGRvaCB8fCA6IiBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgdGhhdCB0aGUgZmlsZSB3YXMgcmVuYW1lZCcgJworCXRlc3QgRCA9ICIkKGdpdCBzaG93IEhFQUQ6ZG9oIC0tKSIgJiYKKwkhIHRlc3QgLWYgRC50ICYmCisJdGVzdCAtZiBkb2ggJiYKKwl0ZXN0IEQgPSAiJChjYXQgZG9oKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV3cml0ZSwgcmVuYW1pbmcgYSBzcGVjaWZpYyBkaXJlY3RvcnknICcKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRyZWUtZmlsdGVyICJtdiBkaXIgZGlyb2ggfHwgOiIgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRoYXQgdGhlIGRpcmVjdG9yeSB3YXMgcmVuYW1lZCcgJworCXRlc3QgZGlyL0QgPSAiJChnaXQgc2hvdyBIRUFEOmRpcm9oL0QudCAtLSkiICYmCisJISB0ZXN0IC1kIGRpciAmJgorCXRlc3QgLWQgZGlyb2ggJiYKKwkhIHRlc3QgLWQgZGlyb2gvZGlyICYmCisJdGVzdCAtZiBkaXJvaC9ELnQgJiYKKwl0ZXN0IGRpci9EID0gIiQoY2F0IGRpcm9oL0QudCkiCisnCisKK2dpdCB0YWcgb2xkRCBIRUFEfjQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jld3JpdGUgb25lIGJyYW5jaCwga2VlcGluZyBhIHNpZGUgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBtb2REIG9sZEQgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRyZWUtZmlsdGVyICJtdiBCLnQgYm9oIHx8IDoiIEQuLm1vZEQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbW9uIGFuY2VzdG9yIGlzIHN0aWxsIGNvbW1vbiAodW5jaGFuZ2VkKScgJworCXRlc3QgIiQoZ2l0IG1lcmdlLWJhc2UgbW9kRCBEKSIgPSAiJChnaXQgcmV2LXBhcnNlIEIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWx0ZXIgc3ViZGlyZWN0b3J5IG9ubHknICcKKwlta2RpciBzdWJkaXIgJiYKKwl0b3VjaCBzdWJkaXIvbmV3ICYmCisJZ2l0IGFkZCBzdWJkaXIvbmV3ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViZGlyIiAmJgorCWVjaG8gSCA+IEEudCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIm5vdCBzdWJkaXIiIEEudCAmJgorCWVjaG8gQSA+IHN1YmRpci9uZXcgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJhZ2FpbiBzdWJkaXIiIHN1YmRpci9uZXcgJiYKKwlnaXQgcm0gQS50ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWdhaW4gbm90IHN1YmRpciIgJiYKKwlnaXQgYnJhbmNoIHN1YiAmJgorCWdpdCBicmFuY2ggc3ViLWVhcmxpZXIgSEVBRH4yICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1zdWJkaXJlY3RvcnktZmlsdGVyIHN1YmRpciBcCisJCXJlZnMvaGVhZHMvc3ViIHJlZnMvaGVhZHMvc3ViLWVhcmxpZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyZWN0b3J5IGZpbHRlciByZXN1bHQgbG9va3Mgb2theScgJworCXRlc3QgMiA9ICQoZ2l0IHJldi1saXN0IHN1YiB8IHdjIC1sKSAmJgorCWdpdCBzaG93IHN1YjpuZXcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyBzdWI6c3ViZGlyICYmCisJZ2l0IHNob3cgc3ViLWVhcmxpZXI6bmV3ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3cgc3ViLWVhcmxpZXI6c3ViZGlyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vcmUgc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyBBID4gc3ViZGlyL25ldyAmJgorCWdpdCBhZGQgc3ViZGlyL25ldyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInN1YmRpciBvbiBtYXN0ZXIiIHN1YmRpci9uZXcgJiYKKwlnaXQgcm0gQS50ICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWdhaW4gc3ViZGlyIG9uIG1hc3RlciIgJiYKKwlnaXQgbWVyZ2UgYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSBpbmRleC1maWx0ZXIgdG8gbW92ZSBpbnRvIGEgc3ViZGlyZWN0b3J5JyAnCisJZ2l0IGJyYW5jaCBkaXJlY3Rvcnltb3ZlZCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0taW5kZXgtZmlsdGVyIFwKKwkJICJnaXQgbHMtZmlsZXMgLXMgfCBzZWQgXCJzLQktJm5ld3N1YmRpci8tXCIgfAorCSAgICAgICAgICBHSVRfSU5ERVhfRklMRT1cJEdJVF9JTkRFWF9GSUxFLm5ldyBcCisJCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCQkgIG12IFwiXCRHSVRfSU5ERVhfRklMRS5uZXdcIiBcIlwkR0lUX0lOREVYX0ZJTEVcIiIgZGlyZWN0b3J5bW92ZWQgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFEIGRpcmVjdG9yeW1vdmVkOm5ld3N1YmRpcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdG9wcyB3aGVuIG1zZyBmaWx0ZXIgZmFpbHMnICcKKwlvbGQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1tc2ctZmlsdGVyIGZhbHNlIEhFQUQgJiYKKwl0ZXN0ICRvbGQgPSAkKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlybSAtcmYgLmdpdC1yZXdyaXRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvciBpbmZvcm1hdGlvbiBpcyBwcmVzZXJ2ZWQnICcKKwk6ID4gaSAmJgorCWdpdCBhZGQgaSAmJgorCXRlc3RfdGljayAmJgorCUdJVF9BVVRIT1JfTkFNRT0iQiBWIFVpcHMiIGdpdCBjb21taXQgLW0gYnZ1aXBzICYmCisJZ2l0IGJyYW5jaCBwcmVzZXJ2ZWQtYXV0aG9yICYmCisJKHNhbmVfdW5zZXQgR0lUX0FVVEhPUl9OQU1FICYmCisJIGdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tbXNnLWZpbHRlciAiY2F0OyBcCisJCQl0ZXN0IFwkR0lUX0NPTU1JVCAhPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyKSB8fCBcCisJCQllY2hvIEhhbGxvIiBcCisJCXByZXNlcnZlZC1hdXRob3IpICYmCisJdGVzdCAxID0gJChnaXQgcmV2LWxpc3QgLS1hdXRob3I9IkIgViBVaXBzIiBwcmVzZXJ2ZWQtYXV0aG9yIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInJlbW92ZSBhIGNlcnRhaW4gYXV0aG9yJ3MgY29tbWl0cyIgJworCWVjaG8gaSA+IGkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGkgaSAmJgorCWdpdCBicmFuY2ggcmVtb3ZlZC1hdXRob3IgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLWNvbW1pdC1maWx0ZXIgIlwKKwkJaWYgWyBcIlwkR0lUX0FVVEhPUl9OQU1FXCIgPSBcIkIgViBVaXBzXCIgXTtcCisJCXRoZW5cCisJCQlza2lwX2NvbW1pdCBcIlwkQFwiOworCQllbHNlXAorCQkJZ2l0IGNvbW1pdC10cmVlIFwiXCRAXCI7XAorCQlmaSIgcmVtb3ZlZC1hdXRob3IgJiYKKwljbnQxPSQoZ2l0IHJldi1saXN0IG1hc3RlciB8IHdjIC1sKSAmJgorCWNudDI9JChnaXQgcmV2LWxpc3QgcmVtb3ZlZC1hdXRob3IgfCB3YyAtbCkgJiYKKwl0ZXN0ICRjbnQxIC1lcSAkKCgkY250MiArIDEpKSAmJgorCXRlc3QgMCA9ICQoZ2l0IHJldi1saXN0IC0tYXV0aG9yPSJCIFYgVWlwcyIgcmVtb3ZlZC1hdXRob3IgfCB3YyAtbCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFyZiBvbiBpbnZhbGlkIG5hbWUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmlsdGVyLWJyYW5jaCAtZiBtYXN0ZXIgeHktcHJvYmxlbSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmaWx0ZXItYnJhbmNoIC1mIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJtYXAiIHdvcmtzIGluIGNvbW1pdCBmaWx0ZXInICcKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLWNvbW1pdC1maWx0ZXIgIlwKKwkJcGFyZW50PVwkKGdpdCByZXYtcGFyc2UgXCRHSVRfQ09NTUlUXikgJiYKKwkJbWFwcGVkPVwkKG1hcCBcJHBhcmVudCkgJiYKKwkJYWN0dWFsPVwkKGVjaG8gXCJcJEBcIiB8IHNlZCBcInMvXi4qLXAgLy9cIikgJiYKKwkJdGVzdCBcJG1hcHBlZCA9IFwkYWN0dWFsICYmCisJCWdpdCBjb21taXQtdHJlZSBcIlwkQFwiOyIgbWFzdGVyfjIuLm1hc3RlciAmJgorCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ05hbWUgbmVlZGluZyBxdW90ZXMnICcKKworCWdpdCBjaGVja291dCAtYiByZXJlcmUgQSAmJgorCW1rZGlyIGZvbyAmJgorCW5hbWU9IuOCjOOCjOOCjCIgJiYKKwk+Zm9vLyRuYW1lICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJBZGRpbmcgYSBmaWxlIiAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC0tdHJlZS1maWx0ZXIgInJtIC1mciBmb28iICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAiZm9vLyRuYW1lIiAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlcmVyZSkgIT0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEEpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU3ViZGlyZWN0b3J5IGZpbHRlciB3aXRoIGRpc2FwcGVhcmluZyB0cmVlcycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlta2RpciBmb28gJiYKKwl0b3VjaCBmb28vYmFyICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJBZGRpbmcgZm9vIiAmJgorCisJZ2l0IHJtIC1yIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlJlbW92aW5nIGZvbyIgJiYKKworCW1rZGlyIGZvbyAmJgorCXRvdWNoIGZvby9iYXIgJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gIlJlLWFkZGluZyBmb28iICYmCisKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXN1YmRpcmVjdG9yeS1maWx0ZXIgZm9vICYmCisJdGVzdCAkKGdpdCByZXYtbGlzdCBtYXN0ZXIgfCB3YyAtbCkgPSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1RhZyBuYW1lIGZpbHRlcmluZyByZXRhaW5zIHRhZyBtZXNzYWdlJyAnCisJZ2l0IHRhZyAtbSBhdGFnIFQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIFQgPiBleHBlY3QgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRhZy1uYW1lLWZpbHRlciBjYXQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIFQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2ZhdXhfZ3BnX3RhZz0nb2JqZWN0IFhYWFhYWAordHlwZSBjb21taXQKK3RhZyBTCit0YWdnZXIgVCBBIEdnZXIgPHRhZ2dlckBleGFtcGxlLmNvbT4gMTIwNjAyNjMzOSAtMDUwMAorCitUaGlzIGlzIGEgZmF1eCBncGcgc2lnbmVkIHRhZy4KKy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCitWZXJzaW9uOiBGYXV4R1BHIHYwLjAuMCAoRkFVWC9MaW51eCkKKworZ2RzZm9ld2h4dS82bDA2ZjFreHl4aEtkWmtyY2JhaU9NdGtKVUE5SVRBYzFtbGFtaDBvb2FzeGtIMVh3TWJZUQorYWNtd1hhV0VUMjBIMEdlQUdQKzd2b3c9Cis9YWdwTworLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUYWcgbmFtZSBmaWx0ZXJpbmcgc3RyaXBzIGdwZyBzaWduYXR1cmUnICcKKwlzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXNoYTF0PSQoZWNobyAiJGZhdXhfZ3BnX3RhZyIgfCBzZWQgLWUgcy9YWFhYWFgvJHNoYTEvIHwgZ2l0IG1rdGFnKSAmJgorCWdpdCB1cGRhdGUtcmVmICJyZWZzL3RhZ3MvUyIgIiRzaGExdCIgJiYKKwllY2hvICIkZmF1eF9ncGdfdGFnIiB8IHNlZCAtZSBzL1hYWFhYWC8kc2hhMS8gfCBoZWFkIC1uIDYgPiBleHBlY3QgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLXRhZy1uYW1lLWZpbHRlciBjYXQgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIFMgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdGaWx0ZXJpbmcgcmV0YWlucyBtZXNzYWdlIG9mIGdwZyBzaWduZWQgY29tbWl0JyAnCisJbWtkaXIgZ3BnICYmCisJdG91Y2ggZ3BnL2ZvbyAmJgorCWdpdCBhZGQgZ3BnICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtUyAtbSAiQWRkaW5nIGdwZyIgJiYKKworCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVzIiA+IGV4cGVjdCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tbXNnLWZpbHRlciAiY2F0IiAmJgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVzIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVGFnIG5hbWUgZmlsdGVyaW5nIGFsbG93cyBzbGFzaGVzIGluIHRhZyBuYW1lcycgJworCWdpdCB0YWcgLW0gdGFnLXdpdGgtc2xhc2ggWC8xICYmCisJZ2l0IGNhdC1maWxlIHRhZyBYLzEgfCBzZWQgLWUgcyxYLzEsWC8yLCA+IGV4cGVjdCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdGFnLW5hbWUtZmlsdGVyICJlY2hvIFgvMiIgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIFgvMiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUHJ1bmUgZW1wdHkgY29tbWl0cycgJworCWdpdCByZXYtbGlzdCBIRUFEID4gZXhwZWN0ICYmCisJdGVzdF9jb21taXQgdG9fcmVtb3ZlICYmCisJZ2l0IGZpbHRlci1icmFuY2ggLWYgLS1pbmRleC1maWx0ZXIgImdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgdG9fcmVtb3ZlLnQiIC0tcHJ1bmUtZW1wdHkgSEVBRCAmJgorCWdpdCByZXYtbGlzdCBIRUFEID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcnVuZSBlbXB0eSBjb2xsYXBzZWQgbWVyZ2VzJyAnCisJdGVzdF9jb25maWcgbWVyZ2UuZmYgZmFsc2UgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCA+ZXhwZWN0ICYmCisJdGVzdF9jb21taXQgdG9fcmVtb3ZlXzIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJdGVzdF9tZXJnZSBub24tZmYgdG9fcmVtb3ZlXzIgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCAtZiAtLWluZGV4LWZpbHRlciAiZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSB0b19yZW1vdmVfMi50IiAtLXBydW5lLWVtcHR5IEhFQUQgJiYKKwlnaXQgcmV2LWxpc3QgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlbWFwLXRvLWFuY2VzdG9yIHdpdGggZmlsZW5hbWUgZmlsdGVycycgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEEgJiYKKwl0ZXN0X2NvbW1pdCBhZGQtZm9vIGZvbyAxICYmCisJZ2l0IGJyYW5jaCBtb3ZlZC1mb28gJiYKKwl0ZXN0X2NvbW1pdCBhZGQtYmFyIGJhciBhICYmCisJZ2l0IGJyYW5jaCBpbnZhcmlhbnQgJiYKKwlvcmlnX2ludmFyaWFudD0kKGdpdCByZXYtcGFyc2UgaW52YXJpYW50KSAmJgorCWdpdCBicmFuY2ggbW92ZWQtYmFyICYmCisJdGVzdF9jb21taXQgY2hhbmdlLWZvbyBmb28gMiAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tcmVtYXAtdG8tYW5jZXN0b3IgXAorCQltb3ZlZC1mb28gbW92ZWQtYmFyIEEuLm1hc3RlciBcCisJCS0tIC0tIGZvbyAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1vdmVkLWZvbykgPSAkKGdpdCByZXYtcGFyc2UgbW92ZWQtYmFyKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1vdmVkLWZvbykgPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyXikgJiYKKwl0ZXN0ICRvcmlnX2ludmFyaWFudCA9ICQoZ2l0IHJldi1wYXJzZSBpbnZhcmlhbnQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dG9tYXRpYyByZW1hcHBpbmcgdG8gYW5jZXN0b3Igd2l0aCBmaWxlbmFtZSBmaWx0ZXJzJyAnCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgQSAmJgorCXRlc3RfY29tbWl0IGFkZC1mb28yIGZvbyAxICYmCisJZ2l0IGJyYW5jaCBtb3ZlZC1mb28yICYmCisJdGVzdF9jb21taXQgYWRkLWJhcjIgYmFyIGEgJiYKKwlnaXQgYnJhbmNoIGludmFyaWFudDIgJiYKKwlvcmlnX2ludmFyaWFudD0kKGdpdCByZXYtcGFyc2UgaW52YXJpYW50MikgJiYKKwlnaXQgYnJhbmNoIG1vdmVkLWJhcjIgJiYKKwl0ZXN0X2NvbW1pdCBjaGFuZ2UtZm9vMiBmb28gMiAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIFwKKwkJbW92ZWQtZm9vMiBtb3ZlZC1iYXIyIEEuLm1hc3RlciBcCisJCS0tIC0tIGZvbyAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIG1vdmVkLWZvbzIpID0gJChnaXQgcmV2LXBhcnNlIG1vdmVkLWJhcjIpICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgbW92ZWQtZm9vMikgPSAkKGdpdCByZXYtcGFyc2UgbWFzdGVyXikgJiYKKwl0ZXN0ICRvcmlnX2ludmFyaWFudCA9ICQoZ2l0IHJldi1wYXJzZSBpbnZhcmlhbnQyKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdWJtb2R1bGUnICcKKwlybSAtZnIgPyogLmdpdCAmJgorCWdpdCBpbml0ICYmCisJdGVzdF9jb21taXQgZmlsZSAmJgorCW1rZGlyIHN1Ym1vZCAmJgorCXN1Ym1vZHVybD0iJFBXRC9zdWJtb2QiICYmCisJKCBjZCBzdWJtb2QgJiYKKwkgIGdpdCBpbml0ICYmCisJICB0ZXN0X2NvbW1pdCBmaWxlLWluLXN1Ym1vZCApICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgc3VibW9kdWxlIiAmJgorCXRlc3RfY29tbWl0IGFkZC1maWxlICYmCisJKCBjZCBzdWJtb2QgJiYgdGVzdF9jb21taXQgYWRkLWluLXN1Ym1vZHVsZSApICYmCisJZ2l0IGFkZCBzdWJtb2QgJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2VkIHN1Ym1vZHVsZSIgJiYKKwlnaXQgYnJhbmNoIG9yaWdpbmFsIEhFQUQKKycKKworb3JpZ19oZWFkPWBnaXQgc2hvdy1yZWYgLS1oYXNoIC0taGVhZCBIRUFEYAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRlIHN1Ym1vZHVsZSB3aXRoIGFub3RoZXIgY29udGVudCcgJworCWdpdCBmaWx0ZXItYnJhbmNoIC0tdHJlZS1maWx0ZXIgInRlc3QgLWQgc3VibW9kICYmIHsKKwkJCQkJIHJtIC1yZiBzdWJtb2QgJiYKKwkJCQkJIGdpdCBybSAtcmYgLS1xdWlldCBzdWJtb2QgJiYKKwkJCQkJIG1rZGlyIHN1Ym1vZCAmJgorCQkJCQkgOiA+IHN1Ym1vZC9maWxlCisJCQkJCSB9IHx8IDoiIEhFQUQgJiYKKwl0ZXN0ICRvcmlnX2hlYWQgIT0gYGdpdCBzaG93LXJlZiAtLWhhc2ggLS1oZWFkIEhFQURgCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcGxhY2Ugc3VibW9kdWxlIHJldmlzaW9uJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW5hbCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIC0tdHJlZS1maWx0ZXIgXAorCSAgICAiaWYgZ2l0IGxzLWZpbGVzIC0tZXJyb3ItdW5tYXRjaCAtLSBzdWJtb2QgPiAvZGV2L251bGwgMj4mMQorCSAgICAgdGhlbiBnaXQgdXBkYXRlLWluZGV4IC0tY2FjaGVpbmZvIDE2MDAwMCAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5IHN1Ym1vZAorCSAgICAgZmkiIEhFQUQgJiYKKwl0ZXN0ICRvcmlnX2hlYWQgIT0gYGdpdCBzaG93LXJlZiAtLWhhc2ggLS1oZWFkIEhFQURgCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlciBjb21taXQgbWVzc2FnZSB3aXRob3V0IHRyYWlsaW5nIG5ld2xpbmUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbmFsICYmCisJY29tbWl0PSQocHJpbnRmICJubyBuZXdsaW5lIiB8IGdpdCBjb21taXQtdHJlZSBIRUFEXnt0cmVlfSkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL25vLW5ld2xpbmUgJGNvbW1pdCAmJgorCWdpdCBmaWx0ZXItYnJhbmNoIC1mIHJlZnMvaGVhZHMvbm8tbmV3bGluZSAmJgorCWVjaG8gJGNvbW1pdCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL25vLW5ld2xpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDA0LXRhZy5zaCBiL3QvdDcwMDQtdGFnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNkZDJmNTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDA0LXRhZy5zaApAQCAtMCwwICsxLDE1NjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2FybG9zIFJpY2EKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHRhZworCitUZXN0cyBmb3Igb3BlcmF0aW9ucyB3aXRoIHRhZ3MuJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy5zaAorCisjIGNyZWF0aW5nIGFuZCBsaXN0aW5nIGxpZ2h0d2VpZ2h0IHRhZ3M6CisKK3RhZ19leGlzdHMgKCkgeworCWdpdCBzaG93LXJlZiAtLXF1aWV0IC0tdmVyaWZ5IHJlZnMvdGFncy8iJDEiCit9CisKKyMgdG9kbzogZ2l0IHRhZyAtbCBub3cgcmV0dXJucyBhbHdheXMgemVybywgd2hlbiBmaXhlZCwgY2hhbmdlIHRoaXMgdGVzdAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyBhbGwgdGFncyBpbiBhbiBlbXB0eSB0cmVlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtbCAmJgorCWdpdCB0YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyBhbGwgdGFncyBpbiBhbiBlbXB0eSB0cmVlIHNob3VsZCBvdXRwdXQgbm90aGluZycgJworCXRlc3QgYGdpdCB0YWcgLWwgfCB3YyAtbGAgLWVxIDAgJiYKKwl0ZXN0IGBnaXQgdGFnIHwgd2MgLWxgIC1lcSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb2tpbmcgZm9yIGEgdGFnIGluIGFuIGVtcHR5IHRyZWUgc2hvdWxkIGZhaWwnIFwKKwknISAodGFnX2V4aXN0cyBteXRhZyknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIGEgdGFnIGluIGFuIGVtcHR5IHRyZWUgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIG15bm90YWcgJiYKKwkhIHRhZ19leGlzdHMgbXlub3RhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhIHRhZyBmb3IgSEVBRCBpbiBhbiBlbXB0eSB0cmVlIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyBteXRhZ2hlYWQgSEVBRCAmJgorCSEgdGFnX2V4aXN0cyBteXRhZ2hlYWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgYSB0YWcgZm9yIGFuIHVua25vd24gcmV2aXNpb24gc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIG15dGFnbm9yZXYgYWFhYWFhYWFhYWEgJiYKKwkhIHRhZ19leGlzdHMgbXl0YWdub3JldgorJworCisjIGNvbW1pdCB1c2VkIGluIHRoZSB0ZXN0cywgdGVzdF90aWNrIGlzIGFsc28gY2FsbGVkIGhlcmUgdG8gZnJlZXplIHRoZSBkYXRlOgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgYSB0YWcgdXNpbmcgZGVmYXVsdCBIRUFEIHNob3VsZCBzdWNjZWVkJyAnCisJdGVzdF90aWNrICYmCisJZWNobyBmb28gPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBGb28gJiYKKwlnaXQgdGFnIG15dGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlZmxvZyBleGlzdHMgcmVmcy90YWdzL215dGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIGEgdGFnIHdpdGggLS1jcmVhdGUtcmVmbG9nIHNob3VsZCBjcmVhdGUgcmVmbG9nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgdGFnIC1kIHRhZ193aXRoX3JlZmxvZyIgJiYKKwlnaXQgdGFnIC0tY3JlYXRlLXJlZmxvZyB0YWdfd2l0aF9yZWZsb2cgJiYKKwlnaXQgcmVmbG9nIGV4aXN0cyByZWZzL3RhZ3MvdGFnX3dpdGhfcmVmbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tY3JlYXRlLXJlZmxvZyBkb2VzIG5vdCBjcmVhdGUgcmVmbG9nIG9uIGZhaWx1cmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC0tY3JlYXRlLXJlZmxvZyBteXRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWZsb2cgZXhpc3RzIHJlZnMvdGFncy9teXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIGFsbCB0YWdzIGlmIG9uZSBleGlzdHMgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1sICYmCisJZ2l0IHRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIGFsbCB0YWdzIGlmIG9uZSBleGlzdHMgc2hvdWxkIG91dHB1dCB0aGF0IHRhZycgJworCXRlc3QgYGdpdCB0YWcgLWxgID0gbXl0YWcgJiYKKwl0ZXN0IGBnaXQgdGFnYCA9IG15dGFnCisnCisKKyMgcGF0dGVybiBtYXRjaGluZzoKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyBhIHRhZyB1c2luZyBhIG1hdGNoaW5nIHBhdHRlcm4gc2hvdWxkIHN1Y2NlZWQnIFwKKwknZ2l0IHRhZyAtbCBteXRhZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgYSB0YWcgdXNpbmcgYSBtYXRjaGluZyBwYXR0ZXJuIHNob3VsZCBvdXRwdXQgdGhhdCB0YWcnIFwKKwkndGVzdCBgZ2l0IHRhZyAtbCBteXRhZ2AgPSBteXRhZycKKworIyB0b2RvOiBnaXQgdGFnIC1sIG5vdyByZXR1cm5zIGFsd2F5cyB6ZXJvLCB3aGVuIGZpeGVkLCBjaGFuZ2UgdGhpcyB0ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0YWdzIHVzaW5nIGEgbm9uLW1hdGNoaW5nIHBhdHRlcm4gc2hvdWxkIHN1Y2VlZCcgXAorCSdnaXQgdGFnIC1sIHh4eCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGFncyB1c2luZyBhIG5vbi1tYXRjaGluZyBwYXR0ZXJuIHNob3VsZCBvdXRwdXQgbm90aGluZycgXAorCSd0ZXN0IGBnaXQgdGFnIC1sIHh4eCB8IHdjIC1sYCAtZXEgMCcKKworIyBzcGVjaWFsIGNhc2VzIGZvciBjcmVhdGluZyB0YWdzOgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndHJ5aW5nIHRvIGNyZWF0ZSBhIHRhZyB3aXRoIHRoZSBuYW1lIG9mIG9uZSBleGlzdGluZyBzaG91bGQgZmFpbCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgdGFnIG15dGFnJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndHJ5aW5nIHRvIGNyZWF0ZSBhIHRhZyB3aXRoIGEgbm9uLXZhbGlkIG5hbWUgc2hvdWxkIGZhaWwnICcKKwl0ZXN0IGBnaXQgdGFnIC1sIHwgd2MgLWxgIC1lcSAxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAiIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLm90aGVydGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAib3RoZXIgdGFnIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgIm90aGVydGFnXiIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnICJvdGhlcn50YWciICYmCisJdGVzdCBgZ2l0IHRhZyAtbCB8IHdjIC1sYCAtZXEgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBhIHRhZyB1c2luZyBIRUFEIGRpcmVjdGx5IHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyBteWhlYWQgSEVBRCAmJgorCXRhZ19leGlzdHMgbXloZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZm9yY2UgY2FuIGNyZWF0ZSBhIHRhZyB3aXRoIHRoZSBuYW1lIG9mIG9uZSBleGlzdGluZycgJworCXRhZ19leGlzdHMgbXl0YWcgJiYKKwlnaXQgdGFnIC0tZm9yY2UgbXl0YWcgJiYKKwl0YWdfZXhpc3RzIG15dGFnJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWZvcmNlIGlzIG1vb3Qgd2l0aCBhIG5vbi1leGlzdGluZyB0YWcgbmFtZScgJworCWdpdCB0YWcgbmV3dGFnID5leHBlY3QgJiYKKwlnaXQgdGFnIC0tZm9yY2UgZm9yY2V0YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKK2dpdCB0YWcgLWQgbmV3dGFnIGZvcmNldGFnCisKKyMgZGVsZXRpbmcgdGFnczoKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHJ5aW5nIHRvIGRlbGV0ZSBhbiB1bmtub3duIHRhZyBzaG91bGQgZmFpbCcgJworCSEgdGFnX2V4aXN0cyB1bmtub3duLXRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLWQgdW5rbm93bi10YWcKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK215aGVhZAorbXl0YWcKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byBkZWxldGUgdGFncyB3aXRob3V0IHBhcmFtcyBzaG91bGQgc3VjY2VlZCBhbmQgZG8gbm90aGluZycgJworCWdpdCB0YWcgLWwgPiBhY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLWQgJiYKKwlnaXQgdGFnIC1sID4gYWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2RlbGV0aW5nIHR3byBleGlzdGluZyB0YWdzIGluIG9uZSBjb21tYW5kIHNob3VsZCBzdWNjZWVkJyAnCisJdGFnX2V4aXN0cyBteXRhZyAmJgorCXRhZ19leGlzdHMgbXloZWFkICYmCisJZ2l0IHRhZyAtZCBteXRhZyBteWhlYWQgJiYKKwkhIHRhZ19leGlzdHMgbXl0YWcgJiYKKwkhIHRhZ19leGlzdHMgbXloZWFkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhIHRhZyB3aXRoIHRoZSBuYW1lIG9mIGFub3RoZXIgZGVsZXRlZCBvbmUgc2hvdWxkIHN1Y2NlZWQnICcKKwkhIHRhZ19leGlzdHMgbXl0YWcgJiYKKwlnaXQgdGFnIG15dGFnICYmCisJdGFnX2V4aXN0cyBteXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndHJ5aW5nIHRvIGRlbGV0ZSB0d28gdGFncywgZXhpc3RpbmcgYW5kIG5vdCwgc2hvdWxkIGZhaWwgaW4gdGhlIDJuZCcgJworCXRhZ19leGlzdHMgbXl0YWcgJiYKKwkhIHRhZ19leGlzdHMgbXloZWFkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtZCBteXRhZyBhbm90aGVydGFnICYmCisJISB0YWdfZXhpc3RzIG15dGFnICYmCisJISB0YWdfZXhpc3RzIG15aGVhZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cnlpbmcgdG8gZGVsZXRlIGFuIGFscmVhZHkgZGVsZXRlZCB0YWcgc2hvdWxkIGZhaWwnIFwKKwkndGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtZCBteXRhZycKKworIyBsaXN0aW5nIHZhcmlvdXMgdGFncyB3aXRoIHBhdHRlcm4gbWF0Y2hpbmc6CisKK2NhdCA+ZXhwZWN0IDw8RU9GCithMQorYWExCitjYmEKK3QyMTAKK3QyMTEKK3YwLjIuMQordjEuMAordjEuMC4xCit2MS4xLjMKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyBhbGwgdGFncyBzaG91bGQgcHJpbnQgdGhlbSBvcmRlcmVkJyAnCisJZ2l0IHRhZyB2MS4wLjEgJiYKKwlnaXQgdGFnIHQyMTEgJiYKKwlnaXQgdGFnIGFhMSAmJgorCWdpdCB0YWcgdjAuMi4xICYmCisJZ2l0IHRhZyB2MS4xLjMgJiYKKwlnaXQgdGFnIGNiYSAmJgorCWdpdCB0YWcgYTEgJiYKKwlnaXQgdGFnIHYxLjAgJiYKKwlnaXQgdGFnIHQyMTAgJiYKKwlnaXQgdGFnIC1sID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCithMQorYWExCitjYmEKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGFncyB3aXRoIHN1YnN0cmluZyBhcyBwYXR0ZXJuIG11c3QgcHJpbnQgdGhvc2UgbWF0Y2hpbmcnICcKKwlybSAqYSogJiYKKwlnaXQgdGFnIC1sICIqYSoiID4gY3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCit2MC4yLjEKK3YxLjAuMQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0YWdzIHdpdGggYSBzdWZmaXggYXMgcGF0dGVybiBtdXN0IHByaW50IHRob3NlIG1hdGNoaW5nJyAnCisJZ2l0IHRhZyAtbCAiKi4xIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK3QyMTAKK3QyMTEKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGFncyB3aXRoIGEgcHJlZml4IGFzIHBhdHRlcm4gbXVzdCBwcmludCB0aG9zZSBtYXRjaGluZycgJworCWdpdCB0YWcgLWwgInQyMSoiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorYTEKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGFncyB1c2luZyBhIG5hbWUgYXMgcGF0dGVybiBtdXN0IHByaW50IHRoYXQgb25lIG1hdGNoaW5nJyAnCisJZ2l0IHRhZyAtbCBhMSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK3YxLjAKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGFncyB1c2luZyBhIG5hbWUgYXMgcGF0dGVybiBtdXN0IHByaW50IHRoYXQgb25lIG1hdGNoaW5nJyAnCisJZ2l0IHRhZyAtbCB2MS4wID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgordjEuMC4xCit2MS4xLjMKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGFncyB3aXRoID8gaW4gdGhlIHBhdHRlcm4gc2hvdWxkIHByaW50IHRob3NlIG1hdGNoaW5nJyAnCisJZ2l0IHRhZyAtbCAidjEuPy4/IiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGFncyB1c2luZyB2Liogc2hvdWxkIHByaW50IG5vdGhpbmcgYmVjYXVzZSBub25lIGhhdmUgdi4nICcKKwlnaXQgdGFnIC1sICJ2LioiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmV4cGVjdCA8PEVPRgordjAuMi4xCit2MS4wCit2MS4wLjEKK3YxLjEuMworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0YWdzIHVzaW5nIHYqIHNob3VsZCBwcmludCBvbmx5IHRob3NlIGhhdmluZyB2JyAnCisJZ2l0IHRhZyAtbCAidioiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgLWwgY2FuIGFjY2VwdCBtdWx0aXBsZSBwYXR0ZXJucycgJworCWdpdCB0YWcgLWwgInYxKiIgInYwKiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGlzdGluZyB0YWdzIGluIGNvbHVtbicgJworCUNPTFVNTlM9NDAgZ2l0IHRhZyAtbCAtLWNvbHVtbj1yb3cgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCithMSAgICAgIGFhMSAgICAgY2JhICAgICB0MjEwICAgIHQyMTEKK3YwLjIuMSAgdjEuMCAgICB2MS4wLjEgIHYxLjEuMworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xpc3RpbmcgdGFncyBpbiBjb2x1bW4gd2l0aCBjb2x1bW4uKicgJworCWdpdCBjb25maWcgY29sdW1uLnRhZyByb3cgJiYKKwlnaXQgY29uZmlnIGNvbHVtbi51aSBkZW5zZSAmJgorCUNPTFVNTlM9NDAgZ2l0IHRhZyAtbCA+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbHVtbi51aSAmJgorCWdpdCBjb25maWcgLS11bnNldCBjb2x1bW4udGFnICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK2ExICAgICAgYWExICAgY2JhICAgICB0MjEwICAgIHQyMTEKK3YwLjIuMSAgdjEuMCAgdjEuMC4xICB2MS4xLjMKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIHRhZyB3aXRoIC1uIC0tY29sdW1uIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtLWNvbHVtbiAtbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsaXN0aW5nIHRhZ3MgLW4gaW4gY29sdW1uIHdpdGggY29sdW1uLnVpIGlnbm9yZWQnICcKKwlnaXQgY29uZmlnIGNvbHVtbi51aSAicm93IGRlbnNlIiAmJgorCUNPTFVNTlM9NDAgZ2l0IHRhZyAtbCAtbiA+YWN0dWFsICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbHVtbi51aSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCithMSAgICAgICAgICAgICAgRm9vCithYTEgICAgICAgICAgICAgRm9vCitjYmEgICAgICAgICAgICAgRm9vCit0MjEwICAgICAgICAgICAgRm9vCit0MjExICAgICAgICAgICAgRm9vCit2MC4yLjEgICAgICAgICAgRm9vCit2MS4wICAgICAgICAgICAgRm9vCit2MS4wLjEgICAgICAgICAgRm9vCit2MS4xLjMgICAgICAgICAgRm9vCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworIyBjcmVhdGluZyBhbmQgdmVyaWZ5aW5nIGxpZ2h0d2VpZ2h0IHRhZ3M6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdhIG5vbi1hbm5vdGF0ZWQgdGFnIGNyZWF0ZWQgd2l0aG91dCBwYXJhbWV0ZXJzIHNob3VsZCBwb2ludCB0byBIRUFEJyAnCisJZ2l0IHRhZyBub24tYW5ub3RhdGVkLXRhZyAmJgorCXRlc3QgJChnaXQgY2F0LWZpbGUgLXQgbm9uLWFubm90YXRlZC10YWcpID0gY29tbWl0ICYmCisJdGVzdCAkKGdpdCByZXYtcGFyc2Ugbm9uLWFubm90YXRlZC10YWcpID0gJChnaXQgcmV2LXBhcnNlIEhFQUQpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyeWluZyB0byB2ZXJpZnkgYW4gdW5rbm93biB0YWcgc2hvdWxkIGZhaWwnIFwKKwkndGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiB1bmtub3duLXRhZycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byB2ZXJpZnkgYSBub24tYW5ub3RhdGVkIGFuZCBub24tc2lnbmVkIHRhZyBzaG91bGQgZmFpbCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IG5vbi1hbm5vdGF0ZWQtdGFnJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndHJ5aW5nIHRvIHZlcmlmeSBtYW55IG5vbi1hbm5vdGF0ZWQgb3IgdW5rbm93biB0YWdzLCBzaG91bGQgZmFpbCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IHVua25vd24tdGFnMSBub24tYW5ub3RhdGVkLXRhZyB1bmtub3duLXRhZzInCisKKyMgY3JlYXRpbmcgYW5ub3RhdGVkIHRhZ3M6CisKK2dldF90YWdfbXNnICgpIHsKKwlnaXQgY2F0LWZpbGUgdGFnICIkMSIgfCBzZWQgLWUgIi9CRUdJTiBQR1AvcSIKK30KKworIyBydW4gdGVzdF90aWNrIGJlZm9yZSBjb21taXR0aW5nIGFsd2F5cyBnaXZlcyB0aGUgdGltZSBpbiB0aGF0IHRpbWV6b25lCitnZXRfdGFnX2hlYWRlciAoKSB7CitjYXQgPDxFT0YKK29iamVjdCAkMgordHlwZSAkMwordGFnICQxCit0YWdnZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAkNCAtMDcwMAorCitFT0YKK30KKworY29tbWl0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKQordGltZT0kdGVzdF90aWNrCisKK2dldF90YWdfaGVhZGVyIGFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAiQSBtZXNzYWdlIiA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NyZWF0aW5nIGFuIGFubm90YXRlZCB0YWcgd2l0aCAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtbSAiQSBtZXNzYWdlIiBhbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPm1zZ2ZpbGUgPDxFT0YKK0Fub3RoZXIgbWVzc2FnZQoraW4gYSBmaWxlLgorRU9GCitnZXRfdGFnX2hlYWRlciBmaWxlLWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorY2F0IG1zZ2ZpbGUgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhbiBhbm5vdGF0ZWQgdGFnIHdpdGggLUYgbWVzc2FnZWZpbGUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1GIG1zZ2ZpbGUgZmlsZS1hbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgZmlsZS1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+aW5wdXRtc2cgPDxFT0YKK0EgbWVzc2FnZSBmcm9tIHRoZQorc3RhbmRhcmQgaW5wdXQKK0VPRgorZ2V0X3RhZ19oZWFkZXIgc3RkaW4tYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitjYXQgaW5wdXRtc2cgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0aW5nIGFuIGFubm90YXRlZCB0YWcgd2l0aCAtRiAtIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtRiAtIHN0ZGluLWFubm90YXRlZC10YWcgPGlucHV0bXNnICYmCisJZ2V0X3RhZ19tc2cgc3RkaW4tYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndHJ5aW5nIHRvIGNyZWF0ZSBhIHRhZyB3aXRoIGEgbm9uLWV4aXN0aW5nIC1GIGZpbGUgc2hvdWxkIGZhaWwnICcKKwkhIHRlc3QgLWYgbm9uZXhpc3RpbmdmaWxlICYmCisJISB0YWdfZXhpc3RzIG5vdGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtRiBub25leGlzdGluZ2ZpbGUgbm90YWcgJiYKKwkhIHRhZ19leGlzdHMgbm90YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byBjcmVhdGUgdGFncyBnaXZpbmcgYm90aCAtbSBvciAtRiBvcHRpb25zIHNob3VsZCBmYWlsJyAnCisJZWNobyAibWVzc2FnZSBmaWxlIDEiID5tc2dmaWxlMSAmJgorCWVjaG8gIm1lc3NhZ2UgZmlsZSAyIiA+bXNnZmlsZTIgJiYKKwkhIHRhZ19leGlzdHMgbXNndGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtbSAibWVzc2FnZSAxIiAtRiBtc2dmaWxlMSBtc2d0YWcgJiYKKwkhIHRhZ19leGlzdHMgbXNndGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtRiBtc2dmaWxlMSAtbSAibWVzc2FnZSAxIiBtc2d0YWcgJiYKKwkhIHRhZ19leGlzdHMgbXNndGFnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtbSAibWVzc2FnZSAxIiAtRiBtc2dmaWxlMSBcCisJCS1tICJtZXNzYWdlIDIiIG1zZ3RhZyAmJgorCSEgdGFnX2V4aXN0cyBtc2d0YWcKKycKKworIyBibGFuayBhbmQgZW1wdHkgbWVzc2FnZXM6CisKK2dldF90YWdfaGVhZGVyIGVtcHR5LWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NyZWF0aW5nIGEgdGFnIHdpdGggYW4gZW1wdHkgLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLW0gIiIgZW1wdHktYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGVtcHR5LWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworPmVtcHR5ZmlsZQorZ2V0X3RhZ19oZWFkZXIgZW1wdHlmaWxlLWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NyZWF0aW5nIGEgdGFnIHdpdGggYW4gZW1wdHkgLUYgbWVzc2FnZWZpbGUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1GIGVtcHR5ZmlsZSBlbXB0eWZpbGUtYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGVtcHR5ZmlsZS1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3ByaW50ZiAnXG5cbiAgXG5cdFxuTGVhZGluZyBibGFuayBsaW5lc1xuJyA+YmxhbmtzZmlsZQorcHJpbnRmICdcblx0IFx0ICBcblJlcGVhdGVkIGJsYW5rIGxpbmVzXG4nID4+YmxhbmtzZmlsZQorcHJpbnRmICdcblxuXG5UcmFpbGluZyBzcGFjZXMgICAgICBcdCAgXG4nID4+YmxhbmtzZmlsZQorcHJpbnRmICdcblRyYWlsaW5nIGJsYW5rIGxpbmVzXG5cblx0IFxuXG4nID4+YmxhbmtzZmlsZQorZ2V0X3RhZ19oZWFkZXIgYmxhbmtzLWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorY2F0ID4+ZXhwZWN0IDw8RU9GCitMZWFkaW5nIGJsYW5rIGxpbmVzCisKK1JlcGVhdGVkIGJsYW5rIGxpbmVzCisKK1RyYWlsaW5nIHNwYWNlcworCitUcmFpbGluZyBibGFuayBsaW5lcworRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZXh0cmEgYmxhbmtzIGluIHRoZSBtZXNzYWdlIGZvciBhbiBhbm5vdGF0ZWQgdGFnIHNob3VsZCBiZSByZW1vdmVkJyAnCisJZ2l0IHRhZyAtRiBibGFua3NmaWxlIGJsYW5rcy1hbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgYmxhbmtzLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZ2V0X3RhZ19oZWFkZXIgYmxhbmstYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYSB0YWcgd2l0aCBibGFuayAtbSBtZXNzYWdlIHdpdGggc3BhY2VzIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtbSAiICAgICAiIGJsYW5rLWFubm90YXRlZC10YWcgJiYKKwlnZXRfdGFnX21zZyBibGFuay1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2VjaG8gJyAgICAgJyA+YmxhbmtmaWxlCitlY2hvICcnICAgICAgPj5ibGFua2ZpbGUKK2VjaG8gJyAgJyAgICA+PmJsYW5rZmlsZQorZ2V0X3RhZ19oZWFkZXIgYmxhbmtmaWxlLWFubm90YXRlZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NyZWF0aW5nIGEgdGFnIHdpdGggYmxhbmsgLUYgbWVzc2FnZWZpbGUgd2l0aCBzcGFjZXMgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1GIGJsYW5rZmlsZSBibGFua2ZpbGUtYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGJsYW5rZmlsZS1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3ByaW50ZiAnICAgICAgJyA+Ymxhbmtub25sZmlsZQorZ2V0X3RhZ19oZWFkZXIgYmxhbmtub25sZmlsZS1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhIHRhZyB3aXRoIC1GIGZpbGUgb2Ygc3BhY2VzIGFuZCBubyBuZXdsaW5lIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtRiBibGFua25vbmxmaWxlIGJsYW5rbm9ubGZpbGUtYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGJsYW5rbm9ubGZpbGUtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIG1lc3NhZ2VzIHdpdGggY29tbWVudGVkIGxpbmVzOgorCitjYXQgPmNvbW1lbnRzZmlsZSA8PEVPRgorIyBBIGNvbW1lbnQKKworIyMjIyMjIyMjIyMjCitUaGUgbWVzc2FnZS4KKyMjIyMjIyMjIyMjIworT25lIGxpbmUuCisKKworIyBjb21tZW50ZWQgbGluZXMKKyMgY29tbWVudGVkIGxpbmVzCisKK0Fub3RoZXIgbGluZS4KKyMgY29tbWVudHMKKworTGFzdCBsaW5lLgorRU9GCitnZXRfdGFnX2hlYWRlciBjb21tZW50cy1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2NhdCA+PmV4cGVjdCA8PEVPRgorVGhlIG1lc3NhZ2UuCitPbmUgbGluZS4KKworQW5vdGhlciBsaW5lLgorCitMYXN0IGxpbmUuCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhIHRhZyB1c2luZyBhIC1GIG1lc3NhZ2VmaWxlIHdpdGggI2NvbW1lbnRzIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtRiBjb21tZW50c2ZpbGUgY29tbWVudHMtYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGNvbW1lbnRzLWFubm90YXRlZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZ2V0X3RhZ19oZWFkZXIgY29tbWVudC1hbm5vdGF0ZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjcmVhdGluZyBhIHRhZyB3aXRoIGEgI2NvbW1lbnQgaW4gdGhlIC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1tICIjY29tbWVudCIgY29tbWVudC1hbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgY29tbWVudC1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2VjaG8gJyNjb21tZW50JyA+Y29tbWVudGZpbGUKK2VjaG8gJycgICAgICAgICA+PmNvbW1lbnRmaWxlCitlY2hvICcjIyMjJyAgICAgPj5jb21tZW50ZmlsZQorZ2V0X3RhZ19oZWFkZXIgY29tbWVudGZpbGUtYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYSB0YWcgd2l0aCAjY29tbWVudHMgaW4gdGhlIC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtRiBjb21tZW50ZmlsZSBjb21tZW50ZmlsZS1hbm5vdGF0ZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgY29tbWVudGZpbGUtYW5ub3RhdGVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitwcmludGYgJyNjb21tZW50JyA+Y29tbWVudG5vbmxmaWxlCitnZXRfdGFnX2hlYWRlciBjb21tZW50bm9ubGZpbGUtYW5ub3RhdGVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3JlYXRpbmcgYSB0YWcgd2l0aCBhIGZpbGUgb2YgI2NvbW1lbnQgYW5kIG5vIG5ld2xpbmUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1GIGNvbW1lbnRub25sZmlsZSBjb21tZW50bm9ubGZpbGUtYW5ub3RhdGVkLXRhZyAmJgorCWdldF90YWdfbXNnIGNvbW1lbnRub25sZmlsZS1hbm5vdGF0ZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgbGlzdGluZyBtZXNzYWdlcyBmb3IgYW5ub3RhdGVkIG5vbi1zaWduZWQgdGFnczoKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2xpc3RpbmcgdGhlIG9uZS1saW5lIG1lc3NhZ2Ugb2YgYSBub24tc2lnbmVkIHRhZyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLW0gIkEgbXNnIiB0YWctb25lLWxpbmUgJiYKKworCWVjaG8gInRhZy1vbmUtbGluZSIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLWwgfCBncmVwICJedGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHwgZ3JlcCAiXnRhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCB0YWctb25lLWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gInRhZy1vbmUtbGluZSAgICBBIG1zZyIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLW4xIC1sIHwgZ3JlcCAiXnRhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uIC1sIHwgZ3JlcCAiXnRhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMSAtbCB0YWctb25lLWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMiAtbCB0YWctb25lLWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uOTk5IC1sIHRhZy1vbmUtbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyB0aGUgemVyby1saW5lcyBtZXNzYWdlIG9mIGEgbm9uLXNpZ25lZCB0YWcgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1tICIiIHRhZy16ZXJvLWxpbmVzICYmCisKKwllY2hvICJ0YWctemVyby1saW5lcyIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLWwgfCBncmVwICJedGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgfCBncmVwICJedGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gInRhZy16ZXJvLWxpbmVzICAiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1uMSAtbCB8IGdyZXAgIl50YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uIC1sIHwgZ3JlcCAiXnRhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4xIC1sIHRhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjIgLWwgdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uOTk5IC1sIHRhZy16ZXJvLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2VjaG8gJ3RhZyBsaW5lIG9uZScgPmFubm90YWdtc2cKK2VjaG8gJ3RhZyBsaW5lIHR3bycgPj5hbm5vdGFnbXNnCitlY2hvICd0YWcgbGluZSB0aHJlZScgPj5hbm5vdGFnbXNnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbGlzdGluZyBtYW55IG1lc3NhZ2UgbGluZXMgb2YgYSBub24tc2lnbmVkIHRhZyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLUYgYW5ub3RhZ21zZyB0YWctbGluZXMgJiYKKworCWVjaG8gInRhZy1saW5lcyIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLWwgfCBncmVwICJedGFnLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHwgZ3JlcCAiXnRhZy1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCB0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gInRhZy1saW5lcyAgICAgICB0YWcgbGluZSBvbmUiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1uMSAtbCB8IGdyZXAgIl50YWctbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbiAtbCB8IGdyZXAgIl50YWctbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjEgLWwgdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICIgICAgdGFnIGxpbmUgdHdvIiA+PmV4cGVjdCAmJgorCWdpdCB0YWcgLW4yIC1sIHwgZ3JlcCAiXiAqdGFnLmxpbmUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjIgLWwgdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICIgICAgdGFnIGxpbmUgdGhyZWUiID4+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbjMgLWwgfCBncmVwICJeICp0YWcubGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMyAtbCB0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uNCAtbCB8IGdyZXAgIl4gKnRhZy5saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW40IC1sIHRhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW45OSAtbCB8IGdyZXAgIl4gKnRhZy5saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW45OSAtbCB0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5ub3RhdGlvbnMgZm9yIGJsb2JzIGFyZSBlbXB0eScgJworCWJsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbiA8PC1cRU9GCisJQmxvYiBwYXJhZ3JhcGggMS4KKworCUJsb2IgcGFyYWdyYXBoIDIuCisJRU9GCisJKSAmJgorCWdpdCB0YWcgdGFnLWJsb2IgJGJsb2IgJiYKKwllY2hvICJ0YWctYmxvYiAgICAgICAgIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbjEgLWwgdGFnLWJsb2IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyB0cnlpbmcgdG8gdmVyaWZ5IGFubm90YXRlZCBub24tc2lnbmVkIHRhZ3M6CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwkndHJ5aW5nIHRvIHZlcmlmeSBhbiBhbm5vdGF0ZWQgbm9uLXNpZ25lZCB0YWcgc2hvdWxkIGZhaWwnICcKKwl0YWdfZXhpc3RzIGFubm90YXRlZC10YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IGFubm90YXRlZC10YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSd0cnlpbmcgdG8gdmVyaWZ5IGEgZmlsZS1hbm5vdGF0ZWQgbm9uLXNpZ25lZCB0YWcgc2hvdWxkIGZhaWwnICcKKwl0YWdfZXhpc3RzIGZpbGUtYW5ub3RhdGVkLXRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgZmlsZS1hbm5vdGF0ZWQtdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwkndHJ5aW5nIHRvIHZlcmlmeSB0d28gYW5ub3RhdGVkIG5vbi1zaWduZWQgdGFncyBzaG91bGQgZmFpbCcgJworCXRhZ19leGlzdHMgYW5ub3RhdGVkLXRhZyBmaWxlLWFubm90YXRlZC10YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IGFubm90YXRlZC10YWcgZmlsZS1hbm5vdGF0ZWQtdGFnCisnCisKKyMgY3JlYXRpbmcgYW5kIHZlcmlmeWluZyBzaWduZWQgdGFnczoKKworZ2V0X3RhZ19oZWFkZXIgc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICdBIHNpZ25lZCB0YWcgbWVzc2FnZScgPj5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1tICJBIHNpZ25lZCB0YWcgbWVzc2FnZSIgc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIHNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworZ2V0X3RhZ19oZWFkZXIgdS1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2VjaG8gJ0Fub3RoZXIgbWVzc2FnZScgPj5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3NpZ24gd2l0aCBhIGdpdmVuIGtleSBpZCcgJworCisJZ2l0IHRhZyAtdSBjb21taXR0ZXJAZXhhbXBsZS5jb20gLW0gIkFub3RoZXIgbWVzc2FnZSIgdS1zaWduZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgdS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3NpZ24gd2l0aCBhbiB1bmtub3duIGlkICgxKScgJworCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdSBhdXRob3JAZXhhbXBsZS5jb20gXAorCQktbSAiQW5vdGhlciBtZXNzYWdlIiBvLXNpZ25lZC10YWcKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2lnbiB3aXRoIGFuIHVua25vd24gaWQgKDIpJyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC11IERFQURCRUVGIC1tICJBbm90aGVyIG1lc3NhZ2UiIG8tc2lnbmVkLXRhZworCisnCisKK2NhdCA+ZmFrZWVkaXRvciA8PCdFT0YnCisjIS9iaW4vc2gKK3Rlc3QgLW4gIiQxIiAmJiBleGVjID4iJDEiCitlY2hvIEEgc2lnbmVkIHRhZyBtZXNzYWdlCitlY2hvIGZyb20gYSBmYWtlIGVkaXRvci4KK0VPRgorY2htb2QgK3ggZmFrZWVkaXRvcgorCitnZXRfdGFnX2hlYWRlciBpbXBsaWVkLXNpZ24gJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorLi9mYWtlZWRpdG9yID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICctdSBpbXBsaWVzIHNpZ25lZCB0YWcnICcKKwlHSVRfRURJVE9SPS4vZmFrZWVkaXRvciBnaXQgdGFnIC11IENEREU0MzBEIGltcGxpZWQtc2lnbiAmJgorCWdldF90YWdfbXNnIGltcGxpZWQtc2lnbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPnNpZ21zZ2ZpbGUgPDxFT0YKK0Fub3RoZXIgc2lnbmVkIHRhZworbWVzc2FnZSBpbiBhIGZpbGUuCitFT0YKK2dldF90YWdfaGVhZGVyIGZpbGUtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitjYXQgc2lnbXNnZmlsZSA+PmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIC1GIG1lc3NhZ2VmaWxlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtRiBzaWdtc2dmaWxlIGZpbGUtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPnNpZ2lucHV0bXNnIDw8RU9GCitBIHNpZ25lZCB0YWcgbWVzc2FnZSBmcm9tCit0aGUgc3RhbmRhcmQgaW5wdXQKK0VPRgorZ2V0X3RhZ19oZWFkZXIgc3RkaW4tc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitjYXQgc2lnaW5wdXRtc2cgPj5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoIC1GIC0gc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1GIC0gc3RkaW4tc2lnbmVkLXRhZyA8c2lnaW5wdXRtc2cgJiYKKwlnZXRfdGFnX21zZyBzdGRpbi1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2dldF90YWdfaGVhZGVyIGltcGxpZWQtYW5ub3RhdGUgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorLi9mYWtlZWRpdG9yID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICctcyBpbXBsaWVzIGFubm90YXRlZCB0YWcnICcKKwlHSVRfRURJVE9SPS4vZmFrZWVkaXRvciBnaXQgdGFnIC1zIGltcGxpZWQtYW5ub3RhdGUgJiYKKwlnZXRfdGFnX21zZyBpbXBsaWVkLWFubm90YXRlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwkndHJ5aW5nIHRvIGNyZWF0ZSBhIHNpZ25lZCB0YWcgd2l0aCBub24tZXhpc3RpbmcgLUYgZmlsZSBzaG91bGQgZmFpbCcgJworCSEgdGVzdCAtZiBub25leGlzdGluZ2ZpbGUgJiYKKwkhIHRhZ19leGlzdHMgbm9zaWd0YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1zIC1GIG5vbmV4aXN0aW5nZmlsZSBub3NpZ3RhZyAmJgorCSEgdGFnX2V4aXN0cyBub3NpZ3RhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5aW5nIGEgc2lnbmVkIHRhZyBzaG91bGQgc3VjY2VlZCcgXAorCSdnaXQgdGFnIC12IHNpZ25lZC10YWcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnlpbmcgdHdvIHNpZ25lZCB0YWdzIGluIG9uZSBjb21tYW5kIHNob3VsZCBzdWNjZWVkJyBcCisJJ2dpdCB0YWcgLXYgc2lnbmVkLXRhZyBmaWxlLXNpZ25lZC10YWcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwkndmVyaWZ5aW5nIG1hbnkgc2lnbmVkIGFuZCBub24tc2lnbmVkIHRhZ3Mgc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IHNpZ25lZC10YWcgYW5ub3RhdGVkLXRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgZmlsZS1hbm5vdGF0ZWQtdGFnIGZpbGUtc2lnbmVkLXRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgYW5ub3RhdGVkLXRhZyBcCisJCWZpbGUtc2lnbmVkLXRhZyBmaWxlLWFubm90YXRlZC10YWcgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IHNpZ25lZC10YWcgYW5ub3RhdGVkLXRhZyBmaWxlLXNpZ25lZC10YWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeWluZyBhIGZvcmdlZCB0YWcgc2hvdWxkIGZhaWwnICcKKwlmb3JnZWQ9JChnaXQgY2F0LWZpbGUgdGFnIHNpZ25lZC10YWcgfAorCQlzZWQgLWUgInMvc2lnbmVkLXRhZy9mb3JnZWQtdGFnLyIgfAorCQlnaXQgbWt0YWcpICYmCisJZ2l0IHRhZyBmb3JnZWQtdGFnICRmb3JnZWQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC12IGZvcmdlZC10YWcKKycKKworIyBibGFuayBhbmQgZW1wdHkgbWVzc2FnZXMgZm9yIHNpZ25lZCB0YWdzOgorCitnZXRfdGFnX2hlYWRlciBlbXB0eS1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBhbiBlbXB0eSAtbSBtZXNzYWdlIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtbSAiIiBlbXB0eS1zaWduZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgZW1wdHktc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLXYgZW1wdHktc2lnbmVkLXRhZworJworCis+c2lnZW1wdHlmaWxlCitnZXRfdGFnX2hlYWRlciBlbXB0eWZpbGUtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYW4gZW1wdHkgLUYgbWVzc2FnZWZpbGUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1GIHNpZ2VtcHR5ZmlsZSBlbXB0eWZpbGUtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGVtcHR5ZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtdiBlbXB0eWZpbGUtc2lnbmVkLXRhZworJworCitwcmludGYgJ1xuXG4gIFxuXHRcbkxlYWRpbmcgYmxhbmsgbGluZXNcbicgPiBzaWdibGFua3NmaWxlCitwcmludGYgJ1xuXHQgXHQgIFxuUmVwZWF0ZWQgYmxhbmsgbGluZXNcbicgPj5zaWdibGFua3NmaWxlCitwcmludGYgJ1xuXG5cblRyYWlsaW5nIHNwYWNlcyAgICAgIFx0ICBcbicgPj5zaWdibGFua3NmaWxlCitwcmludGYgJ1xuVHJhaWxpbmcgYmxhbmsgbGluZXNcblxuXHQgXG5cbicgPj5zaWdibGFua3NmaWxlCitnZXRfdGFnX2hlYWRlciBibGFua3Mtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitjYXQgPj5leHBlY3QgPDxFT0YKK0xlYWRpbmcgYmxhbmsgbGluZXMKKworUmVwZWF0ZWQgYmxhbmsgbGluZXMKKworVHJhaWxpbmcgc3BhY2VzCisKK1RyYWlsaW5nIGJsYW5rIGxpbmVzCitFT0YKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdleHRyYSBibGFua3MgaW4gdGhlIG1lc3NhZ2UgZm9yIGEgc2lnbmVkIHRhZyBzaG91bGQgYmUgcmVtb3ZlZCcgJworCWdpdCB0YWcgLXMgLUYgc2lnYmxhbmtzZmlsZSBibGFua3Mtc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGJsYW5rcy1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtdiBibGFua3Mtc2lnbmVkLXRhZworJworCitnZXRfdGFnX2hlYWRlciBibGFuay1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBhIGJsYW5rIC1tIG1lc3NhZ2Ugc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1tICIgICAgICIgYmxhbmstc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIGJsYW5rLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC12IGJsYW5rLXNpZ25lZC10YWcKKycKKworZWNobyAnICAgICAnID5zaWdibGFua2ZpbGUKK2VjaG8gJycgICAgICA+PnNpZ2JsYW5rZmlsZQorZWNobyAnICAnICAgID4+c2lnYmxhbmtmaWxlCitnZXRfdGFnX2hlYWRlciBibGFua2ZpbGUtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggYmxhbmsgLUYgZmlsZSB3aXRoIHNwYWNlcyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLUYgc2lnYmxhbmtmaWxlIGJsYW5rZmlsZS1zaWduZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgYmxhbmtmaWxlLXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC12IGJsYW5rZmlsZS1zaWduZWQtdGFnCisnCisKK3ByaW50ZiAnICAgICAgJyA+c2lnYmxhbmtub25sZmlsZQorZ2V0X3RhZ19oZWFkZXIgYmxhbmtub25sZmlsZS1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBzcGFjZXMgYW5kIG5vIG5ld2xpbmUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1GIHNpZ2JsYW5rbm9ubGZpbGUgYmxhbmtub25sZmlsZS1zaWduZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgYmxhbmtub25sZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtdiBzaWduZWQtdGFnCisnCisKKyMgbWVzc2FnZXMgd2l0aCBjb21tZW50ZWQgbGluZXMgZm9yIHNpZ25lZCB0YWdzOgorCitjYXQgPnNpZ2NvbW1lbnRzZmlsZSA8PEVPRgorIyBBIGNvbW1lbnQKKworIyMjIyMjIyMjIyMjCitUaGUgbWVzc2FnZS4KKyMjIyMjIyMjIyMjIworT25lIGxpbmUuCisKKworIyBjb21tZW50ZWQgbGluZXMKKyMgY29tbWVudGVkIGxpbmVzCisKK0Fub3RoZXIgbGluZS4KKyMgY29tbWVudHMKKworTGFzdCBsaW5lLgorRU9GCitnZXRfdGFnX2hlYWRlciBjb21tZW50cy1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2NhdCA+PmV4cGVjdCA8PEVPRgorVGhlIG1lc3NhZ2UuCitPbmUgbGluZS4KKworQW5vdGhlciBsaW5lLgorCitMYXN0IGxpbmUuCitFT0YKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBhIC1GIGZpbGUgd2l0aCAjY29tbWVudHMgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1GIHNpZ2NvbW1lbnRzZmlsZSBjb21tZW50cy1zaWduZWQtdGFnICYmCisJZ2V0X3RhZ19tc2cgY29tbWVudHMtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLXYgY29tbWVudHMtc2lnbmVkLXRhZworJworCitnZXRfdGFnX2hlYWRlciBjb21tZW50LXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoICNjb21tZW50ZWQgLW0gbWVzc2FnZSBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLW0gIiNjb21tZW50IiBjb21tZW50LXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBjb21tZW50LXNpZ25lZC10YWcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC12IGNvbW1lbnQtc2lnbmVkLXRhZworJworCitlY2hvICcjY29tbWVudCcgPnNpZ2NvbW1lbnRmaWxlCitlY2hvICcnICAgICAgICAgPj5zaWdjb21tZW50ZmlsZQorZWNobyAnIyMjIycgICAgID4+c2lnY29tbWVudGZpbGUKK2dldF90YWdfaGVhZGVyIGNvbW1lbnRmaWxlLXNpZ25lZC10YWcgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyB3aXRoICNjb21tZW50ZWQgLUYgbWVzc2FnZWZpbGUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1GIHNpZ2NvbW1lbnRmaWxlIGNvbW1lbnRmaWxlLXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBjb21tZW50ZmlsZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtdiBjb21tZW50ZmlsZS1zaWduZWQtdGFnCisnCisKK3ByaW50ZiAnI2NvbW1lbnQnID5zaWdjb21tZW50bm9ubGZpbGUKK2dldF90YWdfaGVhZGVyIGNvbW1lbnRub25sZmlsZS1zaWduZWQtdGFnICRjb21taXQgY29tbWl0ICR0aW1lID5leHBlY3QKK2VjaG8gJy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tJyA+PmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdjcmVhdGluZyBhIHNpZ25lZCB0YWcgd2l0aCBhICNjb21tZW50IGFuZCBubyBuZXdsaW5lIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtRiBzaWdjb21tZW50bm9ubGZpbGUgY29tbWVudG5vbmxmaWxlLXNpZ25lZC10YWcgJiYKKwlnZXRfdGFnX21zZyBjb21tZW50bm9ubGZpbGUtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLXYgY29tbWVudG5vbmxmaWxlLXNpZ25lZC10YWcKKycKKworIyBsaXN0aW5nIG1lc3NhZ2VzIGZvciBzaWduZWQgdGFnczoKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdsaXN0aW5nIHRoZSBvbmUtbGluZSBtZXNzYWdlIG9mIGEgc2lnbmVkIHRhZyBzaG91bGQgc3VjY2VlZCcgJworCWdpdCB0YWcgLXMgLW0gIkEgbWVzc2FnZSBsaW5lIHNpZ25lZCIgc3RhZy1vbmUtbGluZSAmJgorCisJZWNobyAic3RhZy1vbmUtbGluZSIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLWwgfCBncmVwICJec3RhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMCAtbCB8IGdyZXAgIl5zdGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHN0YWctb25lLWxpbmUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gInN0YWctb25lLWxpbmUgICBBIG1lc3NhZ2UgbGluZSBzaWduZWQiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1uMSAtbCB8IGdyZXAgIl5zdGFnLW9uZS1saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4gLWwgfCBncmVwICJec3RhZy1vbmUtbGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMSAtbCBzdGFnLW9uZS1saW5lID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjIgLWwgc3RhZy1vbmUtbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW45OTkgLWwgc3RhZy1vbmUtbGluZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2xpc3RpbmcgdGhlIHplcm8tbGluZXMgbWVzc2FnZSBvZiBhIHNpZ25lZCB0YWcgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1tICIiIHN0YWctemVyby1saW5lcyAmJgorCisJZWNobyAic3RhZy16ZXJvLWxpbmVzIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbCB8IGdyZXAgIl5zdGFnLXplcm8tbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgfCBncmVwICJec3RhZy16ZXJvLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHN0YWctemVyby1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAic3RhZy16ZXJvLWxpbmVzICIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLW4xIC1sIHwgZ3JlcCAiXnN0YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uIC1sIHwgZ3JlcCAiXnN0YWctemVyby1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMSAtbCBzdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMiAtbCBzdGFnLXplcm8tbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uOTk5IC1sIHN0YWctemVyby1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitlY2hvICdzdGFnIGxpbmUgb25lJyA+c2lndGFnbXNnCitlY2hvICdzdGFnIGxpbmUgdHdvJyA+PnNpZ3RhZ21zZworZWNobyAnc3RhZyBsaW5lIHRocmVlJyA+PnNpZ3RhZ21zZwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSdsaXN0aW5nIG1hbnkgbWVzc2FnZSBsaW5lcyBvZiBhIHNpZ25lZCB0YWcgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1GIHNpZ3RhZ21zZyBzdGFnLWxpbmVzICYmCisKKwllY2hvICJzdGFnLWxpbmVzIiA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtbCB8IGdyZXAgIl5zdGFnLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4wIC1sIHwgZ3JlcCAiXnN0YWctbGluZXMiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjAgLWwgc3RhZy1saW5lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAic3RhZy1saW5lcyAgICAgIHN0YWcgbGluZSBvbmUiID5leHBlY3QgJiYKKwlnaXQgdGFnIC1uMSAtbCB8IGdyZXAgIl5zdGFnLWxpbmVzIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4gLWwgfCBncmVwICJec3RhZy1saW5lcyIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMSAtbCBzdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICIgICAgc3RhZyBsaW5lIHR3byIgPj5leHBlY3QgJiYKKwlnaXQgdGFnIC1uMiAtbCB8IGdyZXAgIl4gKnN0YWcubGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uMiAtbCBzdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICIgICAgc3RhZyBsaW5lIHRocmVlIiA+PmV4cGVjdCAmJgorCWdpdCB0YWcgLW4zIC1sIHwgZ3JlcCAiXiAqc3RhZy5saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW4zIC1sIHN0YWctbGluZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uNCAtbCB8IGdyZXAgIl4gKnN0YWcubGluZSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgdGFnIC1uNCAtbCBzdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHRhZyAtbjk5IC1sIHwgZ3JlcCAiXiAqc3RhZy5saW5lIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLW45OSAtbCBzdGFnLWxpbmVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgdGFncyBwb2ludGluZyB0byBvYmplY3RzIGRpZmZlcmVudCBmcm9tIGNvbW1pdHM6CisKK3RyZWU9JChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KQorYmxvYj0kKGdpdCByZXYtcGFyc2UgSEVBRDpmb28pCit0YWc9JChnaXQgcmV2LXBhcnNlIHNpZ25lZC10YWcgMj4vZGV2L251bGwpCisKK2dldF90YWdfaGVhZGVyIHRyZWUtc2lnbmVkLXRhZyAkdHJlZSB0cmVlICR0aW1lID5leHBlY3QKK2VjaG8gIkEgbWVzc2FnZSBmb3IgYSB0cmVlIiA+PmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyBwb2ludGluZyB0byBhIHRyZWUgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1tICJBIG1lc3NhZ2UgZm9yIGEgdHJlZSIgdHJlZS1zaWduZWQtdGFnIEhFQURee3RyZWV9ICYmCisJZ2V0X3RhZ19tc2cgdHJlZS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2dldF90YWdfaGVhZGVyIGJsb2Itc2lnbmVkLXRhZyAkYmxvYiBibG9iICR0aW1lID5leHBlY3QKK2VjaG8gIkEgbWVzc2FnZSBmb3IgYSBibG9iIiA+PmV4cGVjdAorZWNobyAnLS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2NyZWF0aW5nIGEgc2lnbmVkIHRhZyBwb2ludGluZyB0byBhIGJsb2Igc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgdGFnIC1zIC1tICJBIG1lc3NhZ2UgZm9yIGEgYmxvYiIgYmxvYi1zaWduZWQtdGFnIEhFQUQ6Zm9vICYmCisJZ2V0X3RhZ19tc2cgYmxvYi1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2dldF90YWdfaGVhZGVyIHRhZy1zaWduZWQtdGFnICR0YWcgdGFnICR0aW1lID5leHBlY3QKK2VjaG8gIkEgbWVzc2FnZSBmb3IgYW5vdGhlciB0YWciID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLScgPj5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHBvaW50aW5nIHRvIGFub3RoZXIgdGFnIHNob3VsZCBzdWNjZWVkJyAnCisJZ2l0IHRhZyAtcyAtbSAiQSBtZXNzYWdlIGZvciBhbm90aGVyIHRhZyIgdGFnLXNpZ25lZC10YWcgc2lnbmVkLXRhZyAmJgorCWdldF90YWdfbXNnIHRhZy1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgdXNhZ2Ugd2l0aCByZmMxOTkxIHNpZ25hdHVyZXMKK2dldF90YWdfaGVhZGVyIHJmYzE5OTEtc2lnbmVkLXRhZyAkY29tbWl0IGNvbW1pdCAkdGltZSA+ZXhwZWN0CitlY2hvICJSRkMxOTkxIHNpZ25lZCB0YWciID4+ZXhwZWN0CitlY2hvICctLS0tLUJFR0lOIFBHUCBNRVNTQUdFLS0tLS0nID4+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyxSRkMxOTkxIFwKKwknY3JlYXRpbmcgYSBzaWduZWQgdGFnIHdpdGggcmZjMTk5MScgJworCWVjaG8gInJmYzE5OTEiID5ncGdob21lL2dwZy5jb25mICYmCisJZ2l0IHRhZyAtcyAtbSAiUkZDMTk5MSBzaWduZWQgdGFnIiByZmMxOTkxLXNpZ25lZC10YWcgJGNvbW1pdCAmJgorCWdldF90YWdfbXNnIHJmYzE5OTEtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmZha2VlZGl0b3IgPDwnRU9GJworIyEvYmluL3NoCitjcCAiJDEiIGFjdHVhbAorRU9GCitjaG1vZCAreCBmYWtlZWRpdG9yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHLFJGQzE5OTEgXAorCSdyZWVkaXRpbmcgYSBzaWduZWQgdGFnIGJvZHkgb21pdHMgc2lnbmF0dXJlJyAnCisJZWNobyAicmZjMTk5MSIgPmdwZ2hvbWUvZ3BnLmNvbmYgJiYKKwllY2hvICJSRkMxOTkxIHNpZ25lZCB0YWciID5leHBlY3QgJiYKKwlHSVRfRURJVE9SPS4vZmFrZWVkaXRvciBnaXQgdGFnIC1mIC1zIHJmYzE5OTEtc2lnbmVkLXRhZyAkY29tbWl0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyxSRkMxOTkxIFwKKwkndmVyaWZ5aW5nIHJmYzE5OTEgc2lnbmF0dXJlJyAnCisJZWNobyAicmZjMTk5MSIgPmdwZ2hvbWUvZ3BnLmNvbmYgJiYKKwlnaXQgdGFnIC12IHJmYzE5OTEtc2lnbmVkLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyxSRkMxOTkxIFwKKwknbGlzdCB0YWcgd2l0aCByZmMxOTkxIHNpZ25hdHVyZScgJworCWVjaG8gInJmYzE5OTEiID5ncGdob21lL2dwZy5jb25mICYmCisJZWNobyAicmZjMTk5MS1zaWduZWQtdGFnIFJGQzE5OTEgc2lnbmVkIHRhZyIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLWwgLW4xIHJmYzE5OTEtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLWwgLW4yIHJmYzE5OTEtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLWwgLW45OTkgcmZjMTk5MS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3JtIC1mIGdwZ2hvbWUvZ3BnLmNvbmYKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcsUkZDMTk5MSBcCisJJ3ZlcmlmeWluZyByZmMxOTkxIHNpZ25hdHVyZSB3aXRob3V0IC0tcmZjMTk5MScgJworCWdpdCB0YWcgLXYgcmZjMTk5MS1zaWduZWQtdGFnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHLFJGQzE5OTEgXAorCSdsaXN0IHRhZyB3aXRoIHJmYzE5OTEgc2lnbmF0dXJlIHdpdGhvdXQgLS1yZmMxOTkxJyAnCisJZWNobyAicmZjMTk5MS1zaWduZWQtdGFnIFJGQzE5OTEgc2lnbmVkIHRhZyIgPmV4cGVjdCAmJgorCWdpdCB0YWcgLWwgLW4xIHJmYzE5OTEtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLWwgLW4yIHJmYzE5OTEtc2lnbmVkLXRhZyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCB0YWcgLWwgLW45OTkgcmZjMTk5MS1zaWduZWQtdGFnID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHLFJGQzE5OTEgXAorCSdyZWVkaXRpbmcgYSBzaWduZWQgdGFnIGJvZHkgb21pdHMgc2lnbmF0dXJlJyAnCisJZWNobyAiUkZDMTk5MSBzaWduZWQgdGFnIiA+ZXhwZWN0ICYmCisJR0lUX0VESVRPUj0uL2Zha2VlZGl0b3IgZ2l0IHRhZyAtZiAtcyByZmMxOTkxLXNpZ25lZC10YWcgJGNvbW1pdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyB0cnkgdG8gc2lnbiB3aXRoIGJhZCB1c2VyLnNpZ25pbmdrZXkKK2dpdCBjb25maWcgdXNlci5zaWduaW5na2V5IEJvYlRoZU1vdXNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyBcCisJJ2dpdCB0YWcgLXMgZmFpbHMgaWYgZ3BnIGlzIG1pc2NvbmZpZ3VyZWQnIFwKKwkndGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtcyAtbSB0YWlsIHRhZy1ncGctZmFpbHVyZScKK2dpdCBjb25maWcgLS11bnNldCB1c2VyLnNpZ25pbmdrZXkKKworIyB0cnkgdG8gdmVyaWZ5IHdpdGhvdXQgZ3BnOgorCitybSAtcmYgZ3BnaG9tZQordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgXAorCSd2ZXJpZnkgc2lnbmVkIHRhZyBmYWlscyB3aGVuIHB1YmxpYyBrZXkgaXMgbm90IHByZXNlbnQnIFwKKwkndGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtdiBzaWduZWQtdGFnJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l0IHRhZyAtYSBmYWlscyBpZiB0YWcgYW5ub3RhdGlvbiBpcyBlbXB0eScgJworCSEgKEdJVF9FRElUT1I9Y2F0IGdpdCB0YWcgLWEgaW5pdGlhbC1jb21tZW50KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbWVzc2FnZSBpbiBlZGl0b3IgaGFzIGluaXRpYWwgY29tbWVudCcgJworCSEgKEdJVF9FRElUT1I9Y2F0IGdpdCB0YWcgLWEgaW5pdGlhbC1jb21tZW50ID4gYWN0dWFsKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXNzYWdlIGluIGVkaXRvciBoYXMgaW5pdGlhbCBjb21tZW50OiBmaXJzdCBsaW5lJyAnCisJIyBjaGVjayB0aGUgZmlyc3QgbGluZSAtLS0gc2hvdWxkIGJlIGVtcHR5CisJZWNobyA+Zmlyc3QuZXhwZWN0ICYmCisJc2VkIC1lIDFxIDxhY3R1YWwgPmZpcnN0LmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBmaXJzdC5leHBlY3QgZmlyc3QuYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdtZXNzYWdlIGluIGVkaXRvciBoYXMgaW5pdGlhbCBjb21tZW50OiByZW1haW5kZXInICcKKwkjIHJlbW92ZSBjb21tZW50ZWQgbGluZXMgZnJvbSB0aGUgcmVtYWluZGVyIC0tIHNob3VsZCBiZSBlbXB0eQorCT5yZXN0LmV4cGVjdCAmJgorCXNlZCAtZSAxZCAtZSAiL14jL2QiIDxhY3R1YWwgPnJlc3QuYWN0dWFsICYmCisJdGVzdF9jbXAgcmVzdC5leHBlY3QgcmVzdC5hY3R1YWwKKycKKworZ2V0X3RhZ19oZWFkZXIgcmV1c2UgJGNvbW1pdCBjb21taXQgJHRpbWUgPmV4cGVjdAorZWNobyAiQW4gYW5ub3RhdGlvbiB0byBiZSByZXVzZWQiID4+IGV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ292ZXJ3cml0aW5nIGFuIGFubm90ZWQgdGFnIHNob3VsZCB1c2UgaXRzIHByZXZpb3VzIGJvZHknICcKKwlnaXQgdGFnIC1hIC1tICJBbiBhbm5vdGF0aW9uIHRvIGJlIHJldXNlZCIgcmV1c2UgJiYKKwlHSVRfRURJVE9SPXRydWUgZ2l0IHRhZyAtZiAtYSByZXVzZSAmJgorCWdldF90YWdfbXNnIHJldXNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGVuYW1lIGZvciB0aGUgbWVzc2FnZSBpcyByZWxhdGl2ZSB0byBjd2QnICcKKwlta2RpciBzdWJkaXIgJiYKKwllY2hvICJUYWcgbWVzc2FnZSBpbiB0b3AgZGlyZWN0b3J5IiA+bXNnZmlsZS01ICYmCisJZWNobyAiVGFnIG1lc3NhZ2UgaW4gc3ViIGRpcmVjdG9yeSIgPnN1YmRpci9tc2dmaWxlLTUgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgdGFnIC1hIC1GIG1zZ2ZpbGUtNSB0YWctZnJvbS1zdWJkaXIKKwkpICYmCisJZ2l0IGNhdC1maWxlIHRhZyB0YWctZnJvbS1zdWJkaXIgfCBncmVwICJpbiBzdWIgZGlyZWN0b3J5IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlbmFtZSBmb3IgdGhlIG1lc3NhZ2UgaXMgcmVsYXRpdmUgdG8gY3dkJyAnCisJZWNobyAiVGFnIG1lc3NhZ2UgaW4gc3ViIGRpcmVjdG9yeSIgPnN1YmRpci9tc2dmaWxlLTYgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgdGFnIC1hIC1GIG1zZ2ZpbGUtNiB0YWctZnJvbS1zdWJkaXItMgorCSkgJiYKKwlnaXQgY2F0LWZpbGUgdGFnIHRhZy1mcm9tLXN1YmRpci0yIHwgZ3JlcCAiaW4gc3ViIGRpcmVjdG9yeSIKKycKKworIyBjcmVhdGUgYSBmZXcgbW9yZSBjb21taXRzIHRvIHRlc3QgLS1jb250YWlucworCitoYXNoMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgc2Vjb25kIGNvbW1pdCBhbmQgdGFnJyAnCisJZWNobyBmb28tMi4wID5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZ2l0IHRhZyB2Mi4wCisnCisKK2hhc2gyPSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyB0aGlyZCBjb21taXQgd2l0aG91dCB0YWcnICcKKwllY2hvIGZvby1kZXYgPmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZAorJworCitoYXNoMz0kKGdpdCByZXYtcGFyc2UgSEVBRCkKKworIyBzaW1wbGUgbGluZWFyIGNoZWNrcyBvZiAtLWNvbnRpbnVlCisKK2NhdCA+IGV4cGVjdGVkIDw8RU9GCit2MC4yLjEKK3YxLjAKK3YxLjAuMQordjEuMS4zCit2Mi4wCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBmaXJzdCBjb21taXQgaXMgaW4gYWxsIHRhZ3MgKGhhc2gpJyAiCisJZ2l0IHRhZyAtbCAtLWNvbnRhaW5zICRoYXNoMSB2KiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKKyMgb3RoZXIgd2F5cyBvZiBzcGVjaWZ5aW5nIHRoZSBjb21taXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgZmlyc3QgY29tbWl0IGlzIGluIGFsbCB0YWdzICh0YWcpJyAiCisJZ2l0IHRhZyAtbCAtLWNvbnRhaW5zIHYxLjAgdiogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IGZpcnN0IGNvbW1pdCBpcyBpbiBhbGwgdGFncyAocmVsYXRpdmUpJyAiCisJZ2l0IHRhZyAtbCAtLWNvbnRhaW5zIEhFQUR+MiB2KiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NhdCA+IGV4cGVjdGVkIDw8RU9GCit2Mi4wCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBzZWNvbmQgY29tbWl0IG9ubHkgaGFzIG9uZSB0YWcnICIKKwlnaXQgdGFnIC1sIC0tY29udGFpbnMgJGhhc2gyIHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworCitjYXQgPiBleHBlY3RlZCA8PEVPRgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgdGhpcmQgY29tbWl0IGhhcyBubyB0YWdzJyAiCisJZ2l0IHRhZyAtbCAtLWNvbnRhaW5zICRoYXNoMyB2KiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKKyMgaG93IGFib3V0IGEgc2ltcGxlIG1lcmdlPworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGluZyBzaW1wbGUgYnJhbmNoJyAnCisJZ2l0IGJyYW5jaCBzdGFibGUgdjIuMCAmJgorICAgICAgICBnaXQgY2hlY2tvdXQgc3RhYmxlICYmCisJZWNobyBmb28tMy4wID4gZm9vICYmCisJZ2l0IGNvbW1pdCBmb28gLW0gZm91cnRoICYmCisJZ2l0IHRhZyB2My4wCisnCisKK2hhc2g0PSQoZ2l0IHJldi1wYXJzZSBIRUFEKQorCitjYXQgPiBleHBlY3RlZCA8PEVPRgordjMuMAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNraW5nIHRoYXQgYnJhbmNoIGhlYWQgb25seSBoYXMgb25lIHRhZycgIgorCWdpdCB0YWcgLWwgLS1jb250YWlucyAkaGFzaDQgdiogPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnaW5nIG9yaWdpbmFsIGJyYW5jaCBpbnRvIHRoaXMgYnJhbmNoJyAnCisJZ2l0IG1lcmdlIC0tc3RyYXRlZ3k9b3VycyBtYXN0ZXIgJiYKKyAgICAgICAgZ2l0IHRhZyB2NC4wCisnCisKK2NhdCA+IGV4cGVjdGVkIDw8RU9GCit2NC4wCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tpbmcgdGhhdCBvcmlnaW5hbCBicmFuY2ggaGVhZCBoYXMgb25lIHRhZyBub3cnICIKKwlnaXQgdGFnIC1sIC0tY29udGFpbnMgJGhhc2gzIHYqID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY2F0ID4gZXhwZWN0ZWQgPDxFT0YKK3YwLjIuMQordjEuMAordjEuMC4xCit2MS4xLjMKK3YyLjAKK3YzLjAKK3Y0LjAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja2luZyB0aGF0IGluaXRpYWwgY29tbWl0IGlzIGluIGFsbCB0YWdzJyAiCisJZ2l0IHRhZyAtbCAtLWNvbnRhaW5zICRoYXNoMSB2KiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKKyMgbWl4aW5nIG1vZGVzIGFuZCBvcHRpb25zOgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaXhpbmcgaW5jb21wYXRpYmxlcyBtb2RlcyBhbmQgb3B0aW9ucyBpcyBmb3JiaWRkZW4nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1hICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtbCAtdiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLW4gMTAwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtbCAtbSBtc2cgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1sIC1GIHNvbWUgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLXYgLXMKKycKKworIyBjaGVjayBwb2ludHMtYXQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wb2ludHMtYXQgY2Fubm90IGJlIHVzZWQgaW4gbm9uLWxpc3QgbW9kZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCB0YWcgLS1wb2ludHMtYXQ9djQuMCBmb28KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1wb2ludHMtYXQgZmluZHMgbGlnaHR3ZWlnaHQgdGFncycgJworCWVjaG8gdjQuMCA+ZXhwZWN0ICYmCisJZ2l0IHRhZyAtLXBvaW50cy1hdCB2NC4wID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcG9pbnRzLWF0IGZpbmRzIGFubm90YXRlZCB0YWdzIG9mIGNvbW1pdHMnICcKKwlnaXQgdGFnIC1tICJ2NC4wLCBhbm5vdGF0ZWQiIGFubm90YXRlZC12NC4wIHY0LjAgJiYKKwllY2hvIGFubm90YXRlZC12NC4wID5leHBlY3QgJiYKKwlnaXQgdGFnIC1sIC0tcG9pbnRzLWF0IHY0LjAgImFubm90YXRlZCoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcG9pbnRzLWF0IGZpbmRzIGFubm90YXRlZCB0YWdzIG9mIHRhZ3MnICcKKwlnaXQgdGFnIC1tICJkZXNjcmliaW5nIHRoZSB2NC4wIHRhZyBvYmplY3QiIFwKKwkJYW5ub3RhdGVkLWFnYWluLXY0LjAgYW5ub3RhdGVkLXY0LjAgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJYW5ub3RhdGVkLWFnYWluLXY0LjAKKwlhbm5vdGF0ZWQtdjQuMAorCUVPRgorCWdpdCB0YWcgLS1wb2ludHMtYXQ9YW5ub3RhdGVkLXY0LjAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbXVsdGlwbGUgLS1wb2ludHMtYXQgYXJlIE9SLWVkIHRvZ2V0aGVyJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCXYyLjAKKwl2My4wCisJRU9GCisJZ2l0IHRhZyAtLXBvaW50cy1hdD12Mi4wIC0tcG9pbnRzLWF0PXYzLjAgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbGV4aWNhbCBzb3J0JyAnCisJZ2l0IHRhZyBmb28xLjMgJiYKKwlnaXQgdGFnIGZvbzEuNiAmJgorCWdpdCB0YWcgZm9vMS4xMCAmJgorCWdpdCB0YWcgLWwgLS1zb3J0PXJlZm5hbWUgImZvbyoiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS4xMAorCWZvbzEuMworCWZvbzEuNgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyc2lvbiBzb3J0JyAnCisJZ2l0IHRhZyAtbCAtLXNvcnQ9dmVyc2lvbjpyZWZuYW1lICJmb28qIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuMworCWZvbzEuNgorCWZvbzEuMTAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JldmVyc2UgdmVyc2lvbiBzb3J0JyAnCisJZ2l0IHRhZyAtbCAtLXNvcnQ9LXZlcnNpb246cmVmbmFtZSAiZm9vKiIgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlmb28xLjEwCisJZm9vMS42CisJZm9vMS4zCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXZlcnNlIGxleGljYWwgc29ydCcgJworCWdpdCB0YWcgLWwgLS1zb3J0PS1yZWZuYW1lICJmb28qIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuNgorCWZvbzEuMworCWZvbzEuMTAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZpZ3VyZWQgbGV4aWNhbCBzb3J0JyAnCisJZ2l0IGNvbmZpZyB0YWcuc29ydCAidjpyZWZuYW1lIiAmJgorCWdpdCB0YWcgLWwgImZvbyoiID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJZm9vMS4zCisJZm9vMS42CisJZm9vMS4xMAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9uIG92ZXJyaWRlIGNvbmZpZ3VyZWQgc29ydCcgJworCWdpdCB0YWcgLWwgLS1zb3J0PS1yZWZuYW1lICJmb28qIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuNgorCWZvbzEuMworCWZvbzEuMTAKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludmFsaWQgc29ydCBwYXJhbWV0ZXIgb24gY29tbWFuZCBsaW5lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHRhZyAtbCAtLXNvcnQ9bm90dmFsaWQgImZvbyoiID5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBzb3J0IHBhcmFtZXRlciBpbiBjb25maWd1cmF0b2luJyAnCisJZ2l0IGNvbmZpZyB0YWcuc29ydCAidjpub3R2YWxpZCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC1sICJmb28qIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJzaW9uIHNvcnQgd2l0aCBwcmVyZWxlYXNlIHJlb3JkZXJpbmcnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgdGFnLnNvcnQgJiYKKwlnaXQgY29uZmlnIHZlcnNpb25zb3J0LnByZXJlbGVhc2VTdWZmaXggLXJjICYmCisJZ2l0IHRhZyBmb28xLjYtcmMxICYmCisJZ2l0IHRhZyBmb28xLjYtcmMyICYmCisJZ2l0IHRhZyAtbCAtLXNvcnQ9dmVyc2lvbjpyZWZuYW1lICJmb28qIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuMworCWZvbzEuNi1yYzEKKwlmb28xLjYtcmMyCisJZm9vMS42CisJZm9vMS4xMAorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmV2ZXJzZSB2ZXJzaW9uIHNvcnQgd2l0aCBwcmVyZWxlYXNlIHJlb3JkZXJpbmcnICcKKwlnaXQgdGFnIC1sIC0tc29ydD0tdmVyc2lvbjpyZWZuYW1lICJmb28qIiA+YWN0dWFsICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWZvbzEuMTAKKwlmb28xLjYKKwlmb28xLjYtcmMyCisJZm9vMS42LXJjMQorCWZvbzEuMworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworcnVuX3dpdGhfbGltaXRlZF9zdGFjayAoKSB7CisJKHVsaW1pdCAtcyAxMjggJiYgIiRAIikKK30KKwordGVzdF9sYXp5X3ByZXJlcSBVTElNSVRfU1RBQ0tfU0laRSAncnVuX3dpdGhfbGltaXRlZF9zdGFjayB0cnVlJworCisjIHdlIHJlcXVpcmUgdWxpbWl0LCB0aGlzIGV4Y2x1ZGVzIFdpbmRvd3MKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVUxJTUlUX1NUQUNLX1NJWkUgJy0tY29udGFpbnMgd29ya3MgaW4gYSBkZWVwIHJlcG8nICcKKwk+ZXhwZWN0ICYmCisJaT0xICYmCisJd2hpbGUgdGVzdCAkaSAtbHQgODAwMAorCWRvCisJCWVjaG8gImNvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+ICQoKDEwMDAwMDAwMDAgKyAkaSAqIDEwMCkpICswMjAwCitkYXRhIDw8RU9GCitjb21taXQgIyRpCitFT0YiCisJCXRlc3QgJGkgPSAxICYmIGVjaG8gImZyb20gcmVmcy9oZWFkcy9tYXN0ZXJeMCIKKwkJaT0kKCgkaSArIDEpKQorCWRvbmUgfCBnaXQgZmFzdC1pbXBvcnQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHRhZyBmYXItZmFyLWF3YXkgSEVBRF4gJiYKKwlydW5fd2l0aF9saW1pdGVkX3N0YWNrIGdpdCB0YWcgLS1jb250YWlucyBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZm9ybWF0IHNob3VsZCBsaXN0IHRhZ3MgYXMgcGVyIGZvcm1hdCBnaXZlbicgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlyZWZuYW1lIDogcmVmcy90YWdzL2ZvbzEuMTAKKwlyZWZuYW1lIDogcmVmcy90YWdzL2ZvbzEuMworCXJlZm5hbWUgOiByZWZzL3RhZ3MvZm9vMS42CisJcmVmbmFtZSA6IHJlZnMvdGFncy9mb28xLjYtcmMxCisJcmVmbmFtZSA6IHJlZnMvdGFncy9mb28xLjYtcmMyCisJRU9GCisJZ2l0IHRhZyAtbCAtLWZvcm1hdD0icmVmbmFtZSA6ICUocmVmbmFtZSkiICJmb28qIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtLW1lcmdlZCB0ZXN0IHRhZ3MnICcKKwlnaXQgdGFnIG1lcmdldGVzdC0xIEhFQUR+MiAmJgorCWdpdCB0YWcgbWVyZ2V0ZXN0LTIgSEVBRH4xICYmCisJZ2l0IHRhZyBtZXJnZXRlc3QtMyBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWVyZ2VkIGNhbm5vdCBiZSB1c2VkIGluIG5vbi1saXN0IG1vZGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgdGFnIC0tbWVyZ2VkPW1lcmdldGVzdC0yIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1lcmdlZCBzaG93cyBtZXJnZWQgdGFncycgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwltZXJnZXRlc3QtMQorCW1lcmdldGVzdC0yCisJRU9GCisJZ2l0IHRhZyAtbCAtLW1lcmdlZD1tZXJnZXRlc3QtMiBtZXJnZXRlc3QtKiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLW1lcmdlZCBzaG93IHVubWVyZ2VkIHRhZ3MnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJbWVyZ2V0ZXN0LTMKKwlFT0YKKwlnaXQgdGFnIC1sIC0tbm8tbWVyZ2VkPW1lcmdldGVzdC0yIG1lcmdldGVzdC0qID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwNS1lZGl0b3Iuc2ggYi90L3Q3MDA1LWVkaXRvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYjUzMGI1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzAwNS1lZGl0b3Iuc2gKQEAgLTAsMCArMSwxMzcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdHSVRfRURJVE9SLCBjb3JlLmVkaXRvciwgYW5kIHN0dWZmJworCisuIC4vdGVzdC1saWIuc2gKKwordW5zZXQgRURJVE9SIFZJU1VBTCBHSVRfRURJVE9SCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RldGVybWluZSBkZWZhdWx0IGVkaXRvcicgJworCisJdmk9JChURVJNPXZ0MTAwIGdpdCB2YXIgR0lUX0VESVRPUikgJiYKKwl0ZXN0IC1uICIkdmkiCisKKycKKworaWYgISBleHByICIkdmkiIDogJ1thLXpdKiQnID4vZGV2L251bGwKK3RoZW4KKwl2aT0KK2ZpCisKK2ZvciBpIGluIEdJVF9FRElUT1IgY29yZV9lZGl0b3IgRURJVE9SIFZJU1VBTCAkdmkKK2RvCisJY2F0ID5lLSRpLnNoIDw8LUVPRgorCSMhJFNIRUxMX1BBVEgKKwllY2hvICJFZGl0ZWQgYnkgJGkiID4iXCQxIgorCUVPRgorCWNobW9kICt4IGUtJGkuc2gKK2RvbmUKKworaWYgISB0ZXN0IC16ICIkdmkiCit0aGVuCisJbXYgZS0kdmkuc2ggJHZpCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKworCW1zZz0iSGFuZC1lZGl0ZWQiICYmCisJdGVzdF9jb21taXQgIiRtc2ciICYmCisJZWNobyAiJG1zZyIgPmV4cGVjdCAmJgorCWdpdCBzaG93IC1zIC0tZm9ybWF0PSVzID4gYWN0dWFsICYmCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdAorCisnCisKK1RFUk09ZHVtYgorZXhwb3J0IFRFUk0KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2R1bWIgc2hvdWxkIGVycm9yIG91dCB3aGVuIGZhbGxpbmcgYmFjayBvbiB2aScgJworCisJaWYgZ2l0IGNvbW1pdCAtLWFtZW5kCisJdGhlbgorCQllY2hvICJPb3BzPyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkdW1iIHNob3VsZCBwcmVmZXIgRURJVE9SIHRvIFZJU1VBTCcgJworCisJRURJVE9SPS4vZS1FRElUT1Iuc2ggJiYKKwlWSVNVQUw9Li9lLVZJU1VBTC5zaCAmJgorCWV4cG9ydCBFRElUT1IgVklTVUFMICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kICYmCisJdGVzdCAiJChnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcykiID0gIkVkaXRlZCBieSBFRElUT1IiCisKKycKKworVEVSTT12dDEwMAorZXhwb3J0IFRFUk0KK2ZvciBpIGluICR2aSBFRElUT1IgVklTVUFMIGNvcmVfZWRpdG9yIEdJVF9FRElUT1IKK2RvCisJZWNobyAiRWRpdGVkIGJ5ICRpIiA+ZXhwZWN0CisJdW5zZXQgRURJVE9SIFZJU1VBTCBHSVRfRURJVE9SCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBjb3JlLmVkaXRvcgorCWNhc2UgIiRpIiBpbgorCWNvcmVfZWRpdG9yKQorCQlnaXQgY29uZmlnIGNvcmUuZWRpdG9yIC4vZS1jb3JlX2VkaXRvci5zaAorCQk7OworCVtBLVpdKikKKwkJZXZhbCAiJGk9Li9lLSRpLnNoIgorCQlleHBvcnQgJGkKKwkJOzsKKwllc2FjCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiVXNpbmcgJGkiICcKKwkJZ2l0IC0tZXhlYy1wYXRoPS4gY29tbWl0IC0tYW1lbmQgJiYKKwkJZ2l0IHNob3cgLXMgLS1wcmV0dHk9b25lbGluZSB8CisJCXNlZCAtZSAicy9eWzAtOWEtZl0qIC8vIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGFjdHVhbCBleHBlY3QKKwknCitkb25lCisKK3Vuc2V0IEVESVRPUiBWSVNVQUwgR0lUX0VESVRPUgorZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBjb3JlLmVkaXRvcgorZm9yIGkgaW4gJHZpIEVESVRPUiBWSVNVQUwgY29yZV9lZGl0b3IgR0lUX0VESVRPUgorZG8KKwllY2hvICJFZGl0ZWQgYnkgJGkiID5leHBlY3QKKwljYXNlICIkaSIgaW4KKwljb3JlX2VkaXRvcikKKwkJZ2l0IGNvbmZpZyBjb3JlLmVkaXRvciAuL2UtY29yZV9lZGl0b3Iuc2gKKwkJOzsKKwlbQS1aXSopCisJCWV2YWwgIiRpPS4vZS0kaS5zaCIKKwkJZXhwb3J0ICRpCisJCTs7CisJZXNhYworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIlVzaW5nICRpIChvdmVycmlkZSkiICcKKwkJZ2l0IC0tZXhlYy1wYXRoPS4gY29tbWl0IC0tYW1lbmQgJiYKKwkJZ2l0IHNob3cgLXMgLS1wcmV0dHk9b25lbGluZSB8CisJCXNlZCAtZSAicy9eWzAtOWEtZl0qIC8vIiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGFjdHVhbCBleHBlY3QKKwknCitkb25lCisKK2lmIGVjaG8gJ2VjaG8gc3BhY2UgPiAiJDEiJyA+ICJlIHNwYWNlLnNoIgordGhlbgorCSMgRlMgc3VwcG9ydHMgc3BhY2VzIGluIGZpbGVuYW1lcworCXRlc3Rfc2V0X3ByZXJlcSBTUEFDRVNfSU5fRklMRU5BTUVTCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNQQUNFU19JTl9GSUxFTkFNRVMgJ2VkaXRvciB3aXRoIGEgc3BhY2UnICcKKworCWNobW9kIGEreCAiZSBzcGFjZS5zaCIgJiYKKwlHSVRfRURJVE9SPSIuL2VcIHNwYWNlLnNoIiBnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwl0ZXN0IHNwYWNlID0gIiQoZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzKSIKKworJworCit1bnNldCBHSVRfRURJVE9SCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNQQUNFU19JTl9GSUxFTkFNRVMgJ2NvcmUuZWRpdG9yIHdpdGggYSBzcGFjZScgJworCisJZ2l0IGNvbmZpZyBjb3JlLmVkaXRvciBcIi4vZVwgc3BhY2Uuc2hcIiAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAmJgorCXRlc3Qgc3BhY2UgPSAiJChnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JXMpIgorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzAwNi1wYWdlci5zaCBiL3QvdDcwMDYtcGFnZXIuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmVhN2FjNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMDYtcGFnZXIuc2gKQEAgLTAsMCArMSw0NTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IGF1dG9tYXRpYyB1c2Ugb2YgYSBwYWdlci4nCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcGFnZXIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXRlcm1pbmFsLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJc2FuZV91bnNldCBHSVRfUEFHRVIgR0lUX1BBR0VSX0lOX1VTRSAmJgorCXRlc3RfdW5jb25maWcgY29yZS5wYWdlciAmJgorCisJUEFHRVI9ImNhdCA+cGFnaW5hdGVkLm91dCIgJiYKKwlleHBvcnQgUEFHRVIgJiYKKworCXRlc3RfY29tbWl0IGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ3NvbWUgY29tbWFuZHMgdXNlIGEgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgbG9nICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgVFRZICdwYWdlciBydW5zIGZyb20gc3ViZGlyJyAnCisJZWNobyBzdWJkaXIvcGFnaW5hdGVkLm91dCA+ZXhwZWN0ZWQgJiYKKwlta2RpciAtcCBzdWJkaXIgJiYKKwlybSAtZiBwYWdpbmF0ZWQub3V0IHN1YmRpci9wYWdpbmF0ZWQub3V0ICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJdGVzdF90ZXJtaW5hbCBnaXQgbG9nCisJKSAmJgorCXsKKwkJbHMgcGFnaW5hdGVkLm91dCBzdWJkaXIvcGFnaW5hdGVkLm91dCB8fAorCQk6CisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdMRVNTIGFuZCBMViBlbnZ2YXJzIGFyZSBzZXQgZm9yIHBhZ2luYXRpb24nICcKKwkoCisJCXNhbmVfdW5zZXQgTEVTUyBMViAmJgorCQlQQUdFUj0iZW52ID5wYWdlci1lbnYub3V0OyB3YyIgJiYKKwkJZXhwb3J0IFBBR0VSICYmCisKKwkJdGVzdF90ZXJtaW5hbCBnaXQgbG9nCisJKSAmJgorCWdyZXAgXkxFU1M9IHBhZ2VyLWVudi5vdXQgJiYKKwlncmVwIF5MVj0gcGFnZXItZW52Lm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc29tZSBjb21tYW5kcyBkbyBub3QgdXNlIGEgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgcmV2LWxpc3QgSEVBRCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHBhZ2VyIHdoZW4gc3Rkb3V0IGlzIGEgcGlwZScgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwlnaXQgbG9nIHwgY2F0ICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm8gcGFnZXIgd2hlbiBzdGRvdXQgaXMgYSByZWd1bGFyIGZpbGUnICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJZ2l0IGxvZyA+ZmlsZSAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdnaXQgLS1wYWdpbmF0ZSByZXYtbGlzdCB1c2VzIGEgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLS1wYWdpbmF0ZSByZXYtbGlzdCBIRUFEICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIHBhZ2VyIGV2ZW4gd2l0aCAtLXBhZ2luYXRlIHdoZW4gc3Rkb3V0IGlzIGEgcGlwZScgJworCXJtIC1mIGZpbGUgcGFnaW5hdGVkLm91dCAmJgorCWdpdCAtLXBhZ2luYXRlIGxvZyB8IGNhdCAmJgorCSEgdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdubyBwYWdlciB3aXRoIC0tbm8tcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgLS1uby1wYWdlciBsb2cgJiYKKwkhIHRlc3QgLWUgcGFnaW5hdGVkLm91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29uZmlndXJhdGlvbiBjYW4gZGlzYWJsZSBwYWdlcicgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X3VuY29uZmlnIHBhZ2VyLmdyZXAgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBncmVwIGluaXRpYWwgJiYKKwl0ZXN0IC1lIHBhZ2luYXRlZC5vdXQgJiYKKworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5ncmVwIGZhbHNlICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgZ3JlcCBpbml0aWFsICYmCisJISB0ZXN0IC1lIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2dpdCBjb25maWcgdXNlcyBhIHBhZ2VyIGlmIGNvbmZpZ3VyZWQgdG8nICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF9jb25maWcgcGFnZXIuY29uZmlnIHRydWUgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBjb25maWcgLS1saXN0ICYmCisJdGVzdCAtZSBwYWdpbmF0ZWQub3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb25maWd1cmF0aW9uIGNhbiBlbmFibGUgcGFnZXIgKGZyb20gc3ViZGlyKScgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwlta2RpciAtcCBzdWJkaXIgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5idW5kbGUgdHJ1ZSAmJgorCisJZ2l0IGJ1bmRsZSBjcmVhdGUgdGVzdC5idW5kbGUgLS1hbGwgJiYKKwlybSAtZiBwYWdpbmF0ZWQub3V0IHN1YmRpci9wYWdpbmF0ZWQub3V0ICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJdGVzdF90ZXJtaW5hbCBnaXQgYnVuZGxlIHVuYnVuZGxlIC4uL3Rlc3QuYnVuZGxlCisJKSAmJgorCXsKKwkJdGVzdCAtZSBwYWdpbmF0ZWQub3V0IHx8CisJCXRlc3QgLWUgc3ViZGlyL3BhZ2luYXRlZC5vdXQKKwl9CisnCisKKyMgQSBjb2xvcmVkIGNvbW1pdCBsb2cgd2lsbCBiZWdpbiB3aXRoIGFuIGFwcHJvcHJpYXRlIEFOU0kgZXNjYXBlCisjIGZvciB0aGUgZmlyc3QgY29sb3I7IHRoZSB0ZXh0ICJjb21taXQiIGNvbWVzIGxhdGVyLgorY29sb3JmdWwoKSB7CisJcmVhZCBmaXJzdGxpbmUgPCQxCisJISBleHByICIkZmlyc3RsaW5lIiA6ICJbYS16QS1aXSIgPi9kZXYvbnVsbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0cyBjYW4gZGV0ZWN0IGNvbG9yJyAnCisJcm0gLWYgY29sb3JmdWwubG9nIGNvbG9ybGVzcy5sb2cgJiYKKwlnaXQgbG9nIC0tbm8tY29sb3IgPmNvbG9ybGVzcy5sb2cgJiYKKwlnaXQgbG9nIC0tY29sb3IgPmNvbG9yZnVsLmxvZyAmJgorCSEgY29sb3JmdWwgY29sb3JsZXNzLmxvZyAmJgorCWNvbG9yZnVsIGNvbG9yZnVsLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjb2xvciB3aGVuIHN0ZG91dCBpcyBhIHJlZ3VsYXIgZmlsZScgJworCXJtIC1mIGNvbG9ybGVzcy5sb2cgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhdXRvICYmCisJZ2l0IGxvZyA+Y29sb3JsZXNzLmxvZyAmJgorCSEgY29sb3JmdWwgY29sb3JsZXNzLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29sb3Igd2hlbiB3cml0aW5nIHRvIGEgcGFnZXInICcKKwlybSAtZiBwYWdpbmF0ZWQub3V0ICYmCisJdGVzdF9jb25maWcgY29sb3IudWkgYXV0byAmJgorCXRlc3RfdGVybWluYWwgZW52IFRFUk09dnQxMDAgZ2l0IGxvZyAmJgorCWNvbG9yZnVsIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvbG9ycyBhcmUgc3VwcHJlc3NlZCBieSBjb2xvci5wYWdlcicgJworCXJtIC1mIHBhZ2luYXRlZC5vdXQgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhdXRvICYmCisJdGVzdF9jb25maWcgY29sb3IucGFnZXIgZmFsc2UgJiYKKwl0ZXN0X3Rlcm1pbmFsIGVudiBURVJNPXZ0MTAwIGdpdCBsb2cgJiYKKwkhIGNvbG9yZnVsIHBhZ2luYXRlZC5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29sb3Igd2hlbiB3cml0aW5nIHRvIGEgZmlsZSBpbnRlbmRlZCBmb3IgYSBwYWdlcicgJworCXJtIC1mIGNvbG9yZnVsLmxvZyAmJgorCXRlc3RfY29uZmlnIGNvbG9yLnVpIGF1dG8gJiYKKwkoCisJCVRFUk09dnQxMDAgJiYKKwkJR0lUX1BBR0VSX0lOX1VTRT10cnVlICYmCisJCWV4cG9ydCBURVJNIEdJVF9QQUdFUl9JTl9VU0UgJiYKKwkJZ2l0IGxvZyA+Y29sb3JmdWwubG9nCisJKSAmJgorCWNvbG9yZnVsIGNvbG9yZnVsLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29sb3JzIGFyZSBzZW50IHRvIHBhZ2VyIGZvciBleHRlcm5hbCBjb21tYW5kcycgJworCXRlc3RfY29uZmlnIGFsaWFzLmV4dGVybmFsbG9nICIhZ2l0IGxvZyIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci51aSBhdXRvICYmCisJdGVzdF90ZXJtaW5hbCBlbnYgVEVSTT12dDEwMCBnaXQgLXAgZXh0ZXJuYWxsb2cgJiYKKwljb2xvcmZ1bCBwYWdpbmF0ZWQub3V0CisnCisKKyMgVXNlIHRoaXMgaGVscGVyIHRvIG1ha2UgaXQgZWFzeSBmb3IgdGhlIGNhbGxlciBvZiB5b3VyCisjIHRlcm1pbmFsLXVzaW5nIGZ1bmN0aW9uIHRvIHNwZWNpZnkgd2hldGhlciBpdCBzaG91bGQgZmFpbC4KKyMgSWYgeW91IHdyaXRlCisjCisjCXlvdXJfdGVzdCgpIHsKKyMJCXBhcnNlX2FyZ3MgIiRAIgorIworIwkJJHRlc3RfZXhwZWN0YXRpb24gIiRjbWQgLSBiZWhhdmVzIHdlbGwiICIKKyMJCQkuLi4KKyMJCQkkZnVsbF9jb21tYW5kICYmCisjCQkJLi4uCisjCQkiCisjCX0KKyMKKyMgdGhlbiB5b3VyIHRlc3QgY2FuIGJlIHVzZWQgbGlrZSB0aGlzOgorIworIwl5b3VyX3Rlc3QgZXhwZWN0XyhzdWNjZXNzfGZhaWx1cmUpIFt0ZXN0X211c3RfZmFpbF0gJ2dpdCBmb28nCisjCitwYXJzZV9hcmdzKCkgeworCXRlc3RfZXhwZWN0YXRpb249InRlc3RfJDEiCisJc2hpZnQKKwlpZiB0ZXN0ICIkMSIgPSB0ZXN0X211c3RfZmFpbAorCXRoZW4KKwkJZnVsbF9jb21tYW5kPSJ0ZXN0X211c3RfZmFpbCB0ZXN0X3Rlcm1pbmFsICIKKwkJc2hpZnQKKwllbHNlCisJCWZ1bGxfY29tbWFuZD0idGVzdF90ZXJtaW5hbCAiCisJZmkKKwljbWQ9JDEKKwlmdWxsX2NvbW1hbmQ9IiRmdWxsX2NvbW1hbmQgJDEiCit9CisKK3Rlc3RfZGVmYXVsdF9wYWdlcigpIHsKKwlwYXJzZV9hcmdzICIkQCIKKworCSR0ZXN0X2V4cGVjdGF0aW9uIFNJTVBMRVBBR0VSLFRUWSAiJGNtZCAtIGRlZmF1bHQgcGFnZXIgaXMgdXNlZCBieSBkZWZhdWx0IiAiCisJCXNhbmVfdW5zZXQgUEFHRVIgR0lUX1BBR0VSICYmCisJCXRlc3RfdW5jb25maWcgY29yZS5wYWdlciAmJgorCQlybSAtZiBkZWZhdWx0X3BhZ2VyX3VzZWQgJiYKKwkJY2F0ID5cJGxlc3MgPDwtXEVPRiAmJgorCQkjIS9iaW4vc2gKKwkJd2MgPmRlZmF1bHRfcGFnZXJfdXNlZAorCQlFT0YKKwkJY2htb2QgK3ggXCRsZXNzICYmCisJCSgKKwkJCVBBVEg9LjpcJFBBVEggJiYKKwkJCWV4cG9ydCBQQVRIICYmCisJCQkkZnVsbF9jb21tYW5kCisJCSkgJiYKKwkJdGVzdCAtZSBkZWZhdWx0X3BhZ2VyX3VzZWQKKwkiCit9CisKK3Rlc3RfUEFHRVJfb3ZlcnJpZGVzKCkgeworCXBhcnNlX2FyZ3MgIiRAIgorCisJJHRlc3RfZXhwZWN0YXRpb24gVFRZICIkY21kIC0gUEFHRVIgb3ZlcnJpZGVzIGRlZmF1bHQgcGFnZXIiICIKKwkJc2FuZV91bnNldCBHSVRfUEFHRVIgJiYKKwkJdGVzdF91bmNvbmZpZyBjb3JlLnBhZ2VyICYmCisJCXJtIC1mIFBBR0VSX3VzZWQgJiYKKwkJUEFHRVI9J3djID5QQUdFUl91c2VkJyAmJgorCQlleHBvcnQgUEFHRVIgJiYKKwkJJGZ1bGxfY29tbWFuZCAmJgorCQl0ZXN0IC1lIFBBR0VSX3VzZWQKKwkiCit9CisKK3Rlc3RfY29yZV9wYWdlcl9vdmVycmlkZXMoKSB7CisJaWZfbG9jYWxfY29uZmlnPQorCXVzZWRfaWZfd2FudGVkPSdvdmVycmlkZXMgUEFHRVInCisJdGVzdF9jb3JlX3BhZ2VyICIkQCIKK30KKwordGVzdF9sb2NhbF9jb25maWdfaWdub3JlZCgpIHsKKwlpZl9sb2NhbF9jb25maWc9JyEgJworCXVzZWRfaWZfd2FudGVkPSdpcyBub3QgdXNlZCcKKwl0ZXN0X2NvcmVfcGFnZXIgIiRAIgorfQorCit0ZXN0X2NvcmVfcGFnZXIoKSB7CisJcGFyc2VfYXJncyAiJEAiCisKKwkkdGVzdF9leHBlY3RhdGlvbiBUVFkgIiRjbWQgLSByZXBvc2l0b3J5LWxvY2FsIGNvcmUucGFnZXIgc2V0dGluZyAkdXNlZF9pZl93YW50ZWQiICIKKwkJc2FuZV91bnNldCBHSVRfUEFHRVIgJiYKKwkJcm0gLWYgY29yZS5wYWdlcl91c2VkICYmCisJCVBBR0VSPXdjICYmCisJCWV4cG9ydCBQQUdFUiAmJgorCQl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyICd3YyA+Y29yZS5wYWdlcl91c2VkJyAmJgorCQkkZnVsbF9jb21tYW5kICYmCisJCSR7aWZfbG9jYWxfY29uZmlnfXRlc3QgLWUgY29yZS5wYWdlcl91c2VkCisJIgorfQorCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyKCkgeworCWlmX2xvY2FsX2NvbmZpZz0KKwl1c2VkX2lmX3dhbnRlZD0nb3ZlcnJpZGVzIFBBR0VSJworCXRlc3RfcGFnZXJfc3ViZGlyX2hlbHBlciAiJEAiCit9CisKK3Rlc3Rfbm9fbG9jYWxfY29uZmlnX3N1YmRpcigpIHsKKwlpZl9sb2NhbF9jb25maWc9JyEgJworCXVzZWRfaWZfd2FudGVkPSdpcyBub3QgdXNlZCcKKwl0ZXN0X3BhZ2VyX3N1YmRpcl9oZWxwZXIgIiRAIgorfQorCit0ZXN0X3BhZ2VyX3N1YmRpcl9oZWxwZXIoKSB7CisJcGFyc2VfYXJncyAiJEAiCisKKwkkdGVzdF9leHBlY3RhdGlvbiBUVFkgIiRjbWQgLSBjb3JlLnBhZ2VyICR1c2VkX2lmX3dhbnRlZCBmcm9tIHN1YmRpcmVjdG9yeSIgIgorCQlzYW5lX3Vuc2V0IEdJVF9QQUdFUiAmJgorCQlybSAtZiBjb3JlLnBhZ2VyX3VzZWQgJiYKKwkJcm0gLWZyIHN1YiAmJgorCQlQQUdFUj13YyAmJgorCQlzdGFtcG5hbWU9XCQocHdkKS9jb3JlLnBhZ2VyX3VzZWQgJiYKKwkJZXhwb3J0IFBBR0VSIHN0YW1wbmFtZSAmJgorCQl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyICd3YyA+XCJcJHN0YW1wbmFtZVwiJyAmJgorCQlta2RpciBzdWIgJiYKKwkJKAorCQkJY2Qgc3ViICYmCisJCQkkZnVsbF9jb21tYW5kCisJCSkgJiYKKwkJJHtpZl9sb2NhbF9jb25maWd9dGVzdCAtZSBjb3JlLnBhZ2VyX3VzZWQKKwkiCit9CisKK3Rlc3RfR0lUX1BBR0VSX292ZXJyaWRlcygpIHsKKwlwYXJzZV9hcmdzICIkQCIKKworCSR0ZXN0X2V4cGVjdGF0aW9uIFRUWSAiJGNtZCAtIEdJVF9QQUdFUiBvdmVycmlkZXMgY29yZS5wYWdlciIgIgorCQlybSAtZiBHSVRfUEFHRVJfdXNlZCAmJgorCQl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyIHdjICYmCisJCUdJVF9QQUdFUj0nd2MgPkdJVF9QQUdFUl91c2VkJyAmJgorCQlleHBvcnQgR0lUX1BBR0VSICYmCisJCSRmdWxsX2NvbW1hbmQgJiYKKwkJdGVzdCAtZSBHSVRfUEFHRVJfdXNlZAorCSIKK30KKwordGVzdF9kb2VzbnRfcGFnaW5hdGUoKSB7CisJcGFyc2VfYXJncyAiJEAiCisKKwkkdGVzdF9leHBlY3RhdGlvbiBUVFkgIm5vIHBhZ2VyIGZvciAnJGNtZCciICIKKwkJcm0gLWYgR0lUX1BBR0VSX3VzZWQgJiYKKwkJR0lUX1BBR0VSPSd3YyA+R0lUX1BBR0VSX3VzZWQnICYmCisJCWV4cG9ydCBHSVRfUEFHRVIgJiYKKwkJJGZ1bGxfY29tbWFuZCAmJgorCQkhIHRlc3QgLWUgR0lUX1BBR0VSX3VzZWQKKwkiCit9CisKK3Rlc3RfcGFnZXJfY2hvaWNlcygpIHsKKwl0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X1BBR0VSX292ZXJyaWRlcyAgICAgIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X2NvcmVfcGFnZXJfb3ZlcnJpZGVzIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9zdWNjZXNzICIkQCIKKwl0ZXN0X0dJVF9QQUdFUl9vdmVycmlkZXMgIGV4cGVjdF9zdWNjZXNzICIkQCIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IHNvbWUgYWxpYXNlcycgJworCWdpdCBjb25maWcgYWxpYXMuYWxpYXNlZGxvZyBsb2cgJiYKKwlnaXQgY29uZmlnIGFsaWFzLnRydWUgIiF0cnVlIgorJworCit0ZXN0X3BhZ2VyX2Nob2ljZXMgICAgICAgICAgICAgICAgICAgICAgICdnaXQgbG9nJwordGVzdF9wYWdlcl9jaG9pY2VzICAgICAgICAgICAgICAgICAgICAgICAnZ2l0IC1wIGxvZycKK3Rlc3RfcGFnZXJfY2hvaWNlcyAgICAgICAgICAgICAgICAgICAgICAgJ2dpdCBhbGlhc2VkbG9nJworCit0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzICdnaXQgLXAgYWxpYXNlZGxvZycKK3Rlc3RfUEFHRVJfb3ZlcnJpZGVzICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBhbGlhc2VkbG9nJwordGVzdF9jb3JlX3BhZ2VyX292ZXJyaWRlcyBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIGFsaWFzZWRsb2cnCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9mYWlsdXJlICdnaXQgLXAgYWxpYXNlZGxvZycKK3Rlc3RfR0lUX1BBR0VSX292ZXJyaWRlcyAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBhbGlhc2VkbG9nJworCit0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzICdnaXQgLXAgdHJ1ZScKK3Rlc3RfUEFHRVJfb3ZlcnJpZGVzICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCB0cnVlJwordGVzdF9jb3JlX3BhZ2VyX292ZXJyaWRlcyBleHBlY3Rfc3VjY2VzcyAnZ2l0IC1wIHRydWUnCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9mYWlsdXJlICdnaXQgLXAgdHJ1ZScKK3Rlc3RfR0lUX1BBR0VSX292ZXJyaWRlcyAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCB0cnVlJworCit0ZXN0X2RlZmF1bHRfcGFnZXIgICAgICAgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAgcmVxdWVzdC1wdWxsJwordGVzdF9QQUdFUl9vdmVycmlkZXMgICAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wIHJlcXVlc3QtcHVsbCcKK3Rlc3RfY29yZV9wYWdlcl9vdmVycmlkZXMgZXhwZWN0X3N1Y2Nlc3MgdGVzdF9tdXN0X2ZhaWwgJ2dpdCAtcCByZXF1ZXN0LXB1bGwnCit0ZXN0X2NvcmVfcGFnZXJfc3ViZGlyICAgIGV4cGVjdF9mYWlsdXJlIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAgcmVxdWVzdC1wdWxsJwordGVzdF9HSVRfUEFHRVJfb3ZlcnJpZGVzICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wIHJlcXVlc3QtcHVsbCcKKwordGVzdF9kZWZhdWx0X3BhZ2VyICAgICAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wJwordGVzdF9QQUdFUl9vdmVycmlkZXMgICAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wJwordGVzdF9sb2NhbF9jb25maWdfaWdub3JlZCBleHBlY3RfZmFpbHVyZSB0ZXN0X211c3RfZmFpbCAnZ2l0IC1wJwordGVzdF9ub19sb2NhbF9jb25maWdfc3ViZGlyIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAnCit0ZXN0X0dJVF9QQUdFUl9vdmVycmlkZXMgIGV4cGVjdF9zdWNjZXNzIHRlc3RfbXVzdF9mYWlsICdnaXQgLXAnCisKK3Rlc3RfZG9lc250X3BhZ2luYXRlICAgICAgZXhwZWN0X2ZhaWx1cmUgdGVzdF9tdXN0X2ZhaWwgJ2dpdCAtcCBub25zZW5zZScKKwordGVzdF9wYWdlcl9jaG9pY2VzICAgICAgICAgICAgICAgICAgICAgICAnZ2l0IHNob3J0bG9nJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGNvbmZpZ3VyZSBzaG9ydGxvZyBub3QgdG8gcGFnaW5hdGUnICcKKwlnaXQgY29uZmlnIHBhZ2VyLnNob3J0bG9nIGZhbHNlCisnCit0ZXN0X2RvZXNudF9wYWdpbmF0ZSAgICAgIGV4cGVjdF9zdWNjZXNzICdnaXQgc2hvcnRsb2cnCit0ZXN0X25vX2xvY2FsX2NvbmZpZ19zdWJkaXIgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzaG9ydGxvZycKK3Rlc3RfZGVmYXVsdF9wYWdlciAgICAgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBzaG9ydGxvZycKK3Rlc3RfY29yZV9wYWdlcl9zdWJkaXIgICAgZXhwZWN0X3N1Y2Nlc3MgJ2dpdCAtcCBzaG9ydGxvZycKKwordGVzdF9jb3JlX3BhZ2VyX3N1YmRpciAgICBleHBlY3Rfc3VjY2VzcyB0ZXN0X211c3RfZmFpbCBcCisJCQkJCSAnZ2l0IC1wIGFwcGx5IDwvZGV2L251bGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb21tYW5kLXNwZWNpZmljIHBhZ2VyJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X3VuY29uZmlnIGNvcmUucGFnZXIgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5sb2cgInNlZCBzL14vZm9vOi8gPmFjdHVhbCIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVFRZICdjb21tYW5kLXNwZWNpZmljIHBhZ2VyIG92ZXJyaWRlcyBjb3JlLnBhZ2VyJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLnBhZ2VyICJleGl0IDEiICYmCisJdGVzdF9jb25maWcgcGFnZXIubG9nICJzZWQgcy9eL2ZvbzovID5hY3R1YWwiICYmCisJdGVzdF90ZXJtaW5hbCBnaXQgbG9nIC0tZm9ybWF0PSVzIC0xICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnY29tbWFuZC1zcGVjaWZpYyBwYWdlciBvdmVycmlkZGVuIGJ5IGVudmlyb25tZW50JyAnCisJR0lUX1BBR0VSPSJzZWQgcy9eL2ZvbzovID5hY3R1YWwiICYmIGV4cG9ydCBHSVRfUEFHRVIgJiYKKwk+YWN0dWFsICYmCisJZWNobyAiZm9vOmluaXRpYWwiID5leHBlY3QgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5sb2cgImV4aXQgMSIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCBsb2cgLS1mb3JtYXQ9JXMgLTEgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGV4dGVybmFsIGNvbW1hbmQnICcKKwljYXQgPmdpdC1leHRlcm5hbCA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJZ2l0ICIkQCIKKwlFT0YKKwljaG1vZCAreCBnaXQtZXh0ZXJuYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2NvbW1hbmQtc3BlY2lmaWMgcGFnZXIgd29ya3MgZm9yIGV4dGVybmFsIGNvbW1hbmRzJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5leHRlcm5hbCAic2VkIHMvXi9mb286LyA+YWN0dWFsIiAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC0tZXhlYy1wYXRoPSJgcHdkYCIgZXh0ZXJuYWwgbG9nIC0tZm9ybWF0PSVzIC0xICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFRUWSAnc3ViLWNvbW1hbmRzIG9mIGV4dGVybmFscyB1c2UgdGhlaXIgb3duIHBhZ2VyJyAnCisJc2FuZV91bnNldCBQQUdFUiBHSVRfUEFHRVIgJiYKKwllY2hvICJmb286aW5pdGlhbCIgPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5sb2cgInNlZCBzL14vZm9vOi8gPmFjdHVhbCIgJiYKKwl0ZXN0X3Rlcm1pbmFsIGdpdCAtLWV4ZWMtcGF0aD0uIGV4dGVybmFsIGxvZyAtLWZvcm1hdD0lcyAtMSAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBUVFkgJ2V4dGVybmFsIGNvbW1hbmQgcGFnZXJzIG92ZXJyaWRlIHN1Yi1jb21tYW5kcycgJworCXNhbmVfdW5zZXQgUEFHRVIgR0lUX1BBR0VSICYmCisJPmV4cGVjdCAmJgorCT5hY3R1YWwgJiYKKwl0ZXN0X2NvbmZpZyBwYWdlci5leHRlcm5hbCBmYWxzZSAmJgorCXRlc3RfY29uZmlnIHBhZ2VyLmxvZyAic2VkIHMvXi9sb2c6LyA+YWN0dWFsIiAmJgorCXRlc3RfdGVybWluYWwgZ2l0IC0tZXhlYy1wYXRoPS4gZXh0ZXJuYWwgbG9nIC0tZm9ybWF0PSVzIC0xICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21tYW5kIHdpdGggdW5kZXJzY29yZXMgZG9lcyBub3QgY29tcGxhaW4nICcKKwl3cml0ZV9zY3JpcHQgZ2l0LXVuZGVyX3Njb3JlIDw8LVxFT0YgJiYKKwllY2hvIG9rCisJRU9GCisJZ2l0IC0tZXhlYy1wYXRoPS4gdW5kZXJfc2NvcmUgPmFjdHVhbCAyPiYxICYmCisJZWNobyBvayA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDctc2hvdy5zaCBiL3QvdDcwMDctc2hvdy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MmQzZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzAwNy1zaG93LnNoCkBAIC0wLDAgKzEsMTMxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHNob3cnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGhlbGxvIHdvcmxkID5mb28gJiYKKwlIPSQoZ2l0IGhhc2gtb2JqZWN0IC13IGZvbykgJiYKKwlnaXQgdGFnIC1hIGZvby10YWcgLW0gIlRhZ3MgJEgiICRIICYmCisJSEg9JChleHByICIkSCIgOiAiXCguLlwpIikgJiYKKwlIMzg9JChleHByICIkSCIgOiAiLi5cKC4qXCkiKSAmJgorCXJtIC1mIC5naXQvb2JqZWN0cy8kSEgvJEgzOAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGEgdGFnIHRoYXQgcG9pbnQgYXQgYSBtaXNzaW5nIG9iamVjdCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtLW5vLXBhZ2VyIHNob3cgZm9vLXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgYSBiaXQgb2YgaGlzdG9yeScgJworCXRlc3RfY29tbWl0IG1haW4xICYmCisJdGVzdF9jb21taXQgbWFpbjIgJiYKKwl0ZXN0X2NvbW1pdCBtYWluMyAmJgorCWdpdCB0YWcgLW0gImFubm90YXRlZCB0YWciIGFubm90YXRlZCAmJgorCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReXiAmJgorCXRlc3RfY29tbWl0IHNpZGUyICYmCisJdGVzdF9jb21taXQgc2lkZTMgJiYKKwl0ZXN0X21lcmdlIG1lcmdlIG1haW4zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgdHdvIGNvbW1pdHMnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4yKQorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjMpCisJRU9GCisJZ2l0IHNob3cgbWFpbjIgbWFpbjMgPmFjdHVhbCAmJgorCWdyZXAgXmNvbW1pdCBhY3R1YWwgPmFjdHVhbC5maWx0ZXJlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsdGVyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyBhIHJhbmdlIHdhbGtzIChsaW5lYXIpJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMykKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4yKQorCUVPRgorCWdpdCBzaG93IG1haW4xLi5tYWluMyA+YWN0dWFsICYmCisJZ3JlcCBeY29tbWl0IGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGEgcmFuZ2Ugd2Fsa3MgKFkgc2hhcGUsIF4gZmlyc3QpJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMykKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4yKQorCUVPRgorCWdpdCBzaG93IF5zaWRlMyBtYWluMyA+YWN0dWFsICYmCisJZ3JlcCBeY29tbWl0IGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGEgcmFuZ2Ugd2Fsa3MgKFkgc2hhcGUsIF4gbGFzdCknICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwljb21taXQgJChnaXQgcmV2LXBhcnNlIG1haW4zKQorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjIpCisJRU9GCisJZ2l0IHNob3cgbWFpbjMgXnNpZGUzID5hY3R1YWwgJiYKKwlncmVwIF5jb21taXQgYWN0dWFsID5hY3R1YWwuZmlsdGVyZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsLmZpbHRlcmVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3dpbmcgd2l0aCAtTiB3YWxrcycgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjMpCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMikKKwlFT0YKKwlnaXQgc2hvdyAtMiBtYWluMyA+YWN0dWFsICYmCisJZ3JlcCBeY29tbWl0IGFjdHVhbCA+YWN0dWFsLmZpbHRlcmVkICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbC5maWx0ZXJlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG93aW5nIGFubm90YXRlZCB0YWcnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwl0YWcgYW5ub3RhdGVkCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBhbm5vdGF0ZWRee2NvbW1pdH0pCisJRU9GCisJZ2l0IHNob3cgYW5ub3RhdGVkID5hY3R1YWwgJiYKKwlncmVwIC1FICJeKGNvbW1pdHx0YWcpIiBhY3R1YWwgPmFjdHVhbC5maWx0ZXJlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsdGVyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyBhbm5vdGF0ZWQgdGFnIHBsdXMgY29tbWl0JyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJdGFnIGFubm90YXRlZAorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgYW5ub3RhdGVkXntjb21taXR9KQorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2Ugc2lkZTMpCisJRU9GCisJZ2l0IHNob3cgYW5ub3RhdGVkIHNpZGUzID5hY3R1YWwgJiYKKwlncmVwIC1FICJeKGNvbW1pdHx0YWcpIiBhY3R1YWwgPmFjdHVhbC5maWx0ZXJlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsdGVyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvd2luZyByYW5nZScgJworCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCWNvbW1pdCAkKGdpdCByZXYtcGFyc2UgbWFpbjMpCisJY29tbWl0ICQoZ2l0IHJldi1wYXJzZSBtYWluMikKKwlFT0YKKwlnaXQgc2hvdyBec2lkZTMgYW5ub3RhdGVkID5hY3R1YWwgJiYKKwlncmVwIC1FICJeKGNvbW1pdHx0YWcpIiBhY3R1YWwgPmFjdHVhbC5maWx0ZXJlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuZmlsdGVyZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLXMgc3VwcHJlc3NlcyBkaWZmJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCW1lcmdlCisJbWFpbjMKKwlFT0YKKwlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyBtZXJnZSBtYWluMyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXF1aWV0IHN1cHByZXNzZXMgZGlmZicgJworCWVjaG8gbWFpbjMgPmV4cGVjdCAmJgorCWdpdCBzaG93IC0tcXVpZXQgLS1mb3JtYXQ9JXMgbWFpbjMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyAtLWdyYXBoIGlzIGZvcmJpZGRlbicgJworICB0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAtLWdyYXBoIEhFQUQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDA4LWdyZXAtYmluYXJ5LnNoIGIvdC90NzAwOC1ncmVwLWJpbmFyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMTQ2NDA2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzAwOC1ncmVwLWJpbmFyeS5zaApAQCAtMCwwICsxLDE3OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBncmVwIGluIGJpbmFyeSBmaWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAiCisJZWNobyAnYmluYXJ5UWZpbGUnIHwgcV90b19udWwgPmEgJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgY29tbWl0IC1tLgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCBpbmEgYScgJworCWVjaG8gQmluYXJ5IGZpbGUgYSBtYXRjaGVzID5leHBlY3QgJiYKKwlnaXQgZ3JlcCBpbmEgYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtYWggaW5hIGEnICcKKwlnaXQgZ3JlcCAtYWggaW5hIGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGEgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1JIGluYSBhJyAnCisJOiA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLUkgaW5hIGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgLWMgaW5hIGEnICcKKwllY2hvIGE6MSA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgLWMgaW5hIGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgLWwgaW5hIGEnICcKKwllY2hvIGEgPmV4cGVjdCAmJgorCWdpdCBncmVwIC1sIGluYSBhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1MIGJhciBhJyAnCisJZWNobyBhID5leHBlY3QgJiYKKwlnaXQgZ3JlcCAtTCBiYXIgYSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtcSBpbmEgYScgJworCTogPmV4cGVjdCAmJgorCWdpdCBncmVwIC1xIGluYSBhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1GIGlsZSBhJyAnCisJZ2l0IGdyZXAgLUYgaWxlIGEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgLUZpIGlMRSBhJyAnCisJZ2l0IGdyZXAgLUZpIGlMRSBhCisnCisKKyMgVGhpcyB0ZXN0IGFjdHVhbGx5IHBhc3NlcyBvbiBwbGF0Zm9ybXMgd2hlcmUgcmVnZXhlYygpIHN1cHBvcnRzIHRoZQorIyBmbGFnIFJFR19TVEFSVEVORC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIGlsZSBhJyAnCisJZ2l0IGdyZXAgaWxlIGEKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0IGdyZXAgLmZpIGEnICcKKwlnaXQgZ3JlcCAuZmkgYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtRiB5PE5VTD5mIGEnICIKKwlwcmludGYgJ3lRZicgfCBxX3RvX251bCA+ZiAmJgorCWdpdCBncmVwIC1mIGYgLUYgYQorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtRiB5PE5VTD54IGEnICIKKwlwcmludGYgJ3lReCcgfCBxX3RvX251bCA+ZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC1mIGYgLUYgYQorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZ3JlcCAtRmkgWTxOVUw+ZiBhJyAiCisJcHJpbnRmICdZUWYnIHwgcV90b19udWwgPmYgJiYKKwlnaXQgZ3JlcCAtZiBmIC1GaSBhCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1GaSBZPE5VTD54IGEnICIKKwlwcmludGYgJ1lReCcgfCBxX3RvX251bCA+ZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC1mIGYgLUZpIGEKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgeTxOVUw+ZiBhJyAiCisJcHJpbnRmICd5UWYnIHwgcV90b19udWwgPmYgJiYKKwlnaXQgZ3JlcCAtZiBmIGEKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgeTxOVUw+eCBhJyAiCisJcHJpbnRmICd5UXgnIHwgcV90b19udWwgPmYgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtZiBmIGEKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCByZXNwZWN0cyBiaW5hcnkgZGlmZiBhdHRyaWJ1dGUnICcKKwllY2hvIHRleHQgPnQgJiYKKwlnaXQgYWRkIHQgJiYKKwllY2hvIHQ6dGV4dCA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgdGV4dCB0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyAidCAtZGlmZiIgPi5naXRhdHRyaWJ1dGVzICYmCisJZWNobyAiQmluYXJ5IGZpbGUgdCBtYXRjaGVzIiA+ZXhwZWN0ICYmCisJZ2l0IGdyZXAgdGV4dCB0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1jYWNoZWQgcmVzcGVjdHMgYmluYXJ5IGRpZmYgYXR0cmlidXRlJyAnCisJZ2l0IGdyZXAgLS1jYWNoZWQgdGV4dCB0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1jYWNoZWQgcmVzcGVjdHMgYmluYXJ5IGRpZmYgYXR0cmlidXRlICgyKScgJworCWdpdCBhZGQgLmdpdGF0dHJpYnV0ZXMgJiYKKwlybSAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBncmVwIC0tY2FjaGVkIHRleHQgdCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcm0gLS1jYWNoZWQgLmdpdGF0dHJpYnV0ZXMiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgLmdpdGF0dHJpYnV0ZXMiICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHJldmlzaW9uIHJlc3BlY3RzIGJpbmFyeSBkaWZmIGF0dHJpYnV0ZScgJworCWdpdCBjb21taXQgLW0gbmV3ICYmCisJZWNobyAiQmluYXJ5IGZpbGUgSEVBRDp0IG1hdGNoZXMiID5leHBlY3QgJiYKKwlnaXQgZ3JlcCB0ZXh0IEhFQUQgLS0gdCA+YWN0dWFsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgSEVBRF4iICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHJlc3BlY3RzIG5vdC1iaW5hcnkgZGlmZiBhdHRyaWJ1dGUnICcKKwllY2hvIGJpblFhcnkgfCBxX3RvX251bCA+YiAmJgorCWdpdCBhZGQgYiAmJgorCWVjaG8gIkJpbmFyeSBmaWxlIGIgbWF0Y2hlcyIgPmV4cGVjdCAmJgorCWdpdCBncmVwIGJpbiBiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyAiYiBkaWZmIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwllY2hvICJiOmJpblFhcnkiID5leHBlY3QgJiYKKwlnaXQgZ3JlcCBiaW4gYiB8IG51bF90b19xID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+bnVsX3RvX3FfdGV4dGNvbnYgPDwnRU9GJworIyEvYmluL3NoCisiJFBFUkxfUEFUSCIgLXBlICd5L1wwMDAvUS8nIDwgIiQxIgorRU9GCitjaG1vZCAreCBudWxfdG9fcV90ZXh0Y29udgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXh0Y29udiBmaWx0ZXJzJyAnCisJZWNobyBhIGRpZmY9Zm9vID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgZGlmZi5mb28udGV4dGNvbnYgIlwiJChwd2QpXCIiL251bF90b19xX3RleHRjb252CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgZG9lcyBub3QgaG9ub3IgdGV4dGNvbnYnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCBRZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tdGV4dGNvbnYgaG9ub3JzIHRleHRjb252JyAnCisJZWNobyAiYTpiaW5hcnlRZmlsZSIgPmV4cGVjdCAmJgorCWdpdCBncmVwIC0tdGV4dGNvbnYgUWZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLW5vLXRleHRjb252IGRvZXMgbm90IGhvbm9yIHRleHRjb252JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1uby10ZXh0Y29udiBRZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tdGV4dGNvbnYgYmxvYiBob25vcnMgdGV4dGNvbnYnICcKKwllY2hvICJIRUFEOmE6YmluYXJ5UWZpbGUiID5leHBlY3QgJiYKKwlnaXQgZ3JlcCAtLXRleHRjb252IFFmaWxlIEhFQUQ6YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMDktZmlsdGVyLWJyYW5jaC1udWxsLXNoYTEuc2ggYi90L3Q3MDA5LWZpbHRlci1icmFuY2gtbnVsbC1zaGExLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyN2Y5MGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDA5LWZpbHRlci1icmFuY2gtbnVsbC1zaGExLnNoCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdmaWx0ZXItYnJhbmNoIHJlbW92YWwgb2YgdHJlZXMgd2l0aCBudWxsIHNoYTEnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGJhc2UgY29tbWl0cycgJworCXRlc3RfY29tbWl0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3byAmJgorCXRlc3RfY29tbWl0IHRocmVlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBhIGNvbW1pdCB3aXRoIGEgYm9ndXMgbnVsbCBzaGExIGluIHRoZSB0cmVlJyAnCisJeworCQlnaXQgbHMtdHJlZSBIRUFEICYmCisJCXByaW50ZiAiMTYwMDAwIGNvbW1pdCAkX3o0MFxcdGJyb2tlblxcbiIKKwl9ID5icm9rZW4tdHJlZSAmJgorCWVjaG8gImFkZCBicm9rZW4gZW50cnkiID5tc2cgJiYKKworCXRyZWU9JChnaXQgbWt0cmVlIDxicm9rZW4tdHJlZSkgJiYKKwl0ZXN0X3RpY2sgJiYKKwljb21taXQ9JChnaXQgY29tbWl0LXRyZWUgJHRyZWUgLXAgSEVBRCA8bXNnKSAmJgorCWdpdCB1cGRhdGUtcmVmIEhFQUQgIiRjb21taXQiCisnCisKKyMgd2UgaGF2ZSB0byBtYWtlIG9uZSBtb3JlIGNvbW1pdCBvbiB0b3AgcmVtb3ZpbmcgdGhlIGJyb2tlbgorIyBlbnRyeSwgc2luY2Ugb3RoZXJ3aXNlIG91ciBpbmRleCBkb2VzIG5vdCBtYXRjaCBIRUFEIChhbmQgZmlsdGVyLWJyYW5jaCB3aWxsCisjIGNvbXBsYWluKS4gV2UgY291bGQgbWFrZSB0aGUgaW5kZXggbWF0Y2ggSEVBRCwgYnV0IGRvaW5nIHNvIHdvdWxkIGludm9sdmUKKyMgd3JpdGluZyBhIG51bGwgc2hhMSBpbnRvIHRoZSBpbmRleC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBicmluZyBIRUFEIGFuZCBpbmRleCBpbiBzeW5jJyAnCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYmFjayB0byBub3JtYWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbHRlciBjb21tYW5kcyBhcmUgc3RpbGwgY2hlY2tlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmaWx0ZXItYnJhbmNoIFwKKwkJLS1mb3JjZSAtLXBydW5lLWVtcHR5IFwKKwkJLS1pbmRleC1maWx0ZXIgImdpdCBybSAtLWNhY2hlZCAtLWlnbm9yZS11bm1hdGNoIHRocmVlLnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92aW5nIHRoZSBicm9rZW4gZW50cnkgd29ya3MnICcKKwllY2hvIHRocmVlID5leHBlY3QgJiYKKwlnaXQgZmlsdGVyLWJyYW5jaCBcCisJCS0tZm9yY2UgLS1wcnVuZS1lbXB0eSBcCisJCS0taW5kZXgtZmlsdGVyICJnaXQgcm0gLS1jYWNoZWQgLS1pZ25vcmUtdW5tYXRjaCBicm9rZW4iICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMTAtc2V0dXAuc2ggYi90L3Q3MDEwLXNldHVwLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzMzVhOWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDEwLXNldHVwLnNoCkBAIC0wLDAgKzEsMTYxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nc2V0dXAgdGFraW5nIGFuZCBzYW5pdGl6aW5nIGZ1bm55IHBhdGhzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlta2RpciAtcCBhL2IvYyBhL2UgJiYKKwlEPSQocHdkKSAmJgorCT5hL2IvYy9kICYmCisJPmEvZS9mCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGFkZCAoYWJzb2x1dGUpJyAnCisKKwlnaXQgYWRkICIkRC9hL2IvYy9kIiAmJgorCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJgorCWVjaG8gYS9iL2MvZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKworJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBhZGQgKGZ1bm55IHJlbGF0aXZlKScgJworCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCSgKKwkJY2QgYS9iICYmCisJCWdpdCBhZGQgIi4uL2UvLi9mIgorCSkgJiYKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwllY2hvIGEvZS9mID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBybSAoYWJzb2x1dGUpJyAnCisKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IHJtIC1mIC0tY2FjaGVkICIkRC9hL2IvYy9kIiAmJgorCWdpdCBscy1maWxlcyA+Y3VycmVudCAmJgorCWVjaG8gYS9lL2YgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHJtIChmdW5ueSByZWxhdGl2ZSknICcKKworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwkoCisJCWNkIGEvYiAmJgorCQlnaXQgcm0gLWYgLS1jYWNoZWQgIi4uL2UvLi9mIgorCSkgJiYKKwlnaXQgbHMtZmlsZXMgPmN1cnJlbnQgJiYKKwllY2hvIGEvYi9jL2QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIChhYnNvbHV0ZSknICcKKworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwlnaXQgbHMtZmlsZXMgIiREL2EvZS8uLi9iIiA+Y3VycmVudCAmJgorCWVjaG8gYS9iL2MvZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgbHMtZmlsZXMgKHJlbGF0aXZlICMxKScgJworCisJcm0gLWYgLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSAmJgorCSgKKwkJY2QgYS9iICYmCisJCWdpdCBscy1maWxlcyAiLi4vYi9jIgorCSkgID5jdXJyZW50ICYmCisJZWNobyBjL2QgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIChyZWxhdGl2ZSAjMiknICcKKworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwkoCisJCWNkIGEvYiAmJgorCQlnaXQgbHMtZmlsZXMgLS1mdWxsLW5hbWUgIi4uL2UvZiIKKwkpICA+Y3VycmVudCAmJgorCWVjaG8gYS9lL2YgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGxzLWZpbGVzIChyZWxhdGl2ZSAjMyknICcKKworCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwkoCisJCWNkIGEvYiAmJgorCQlnaXQgbHMtZmlsZXMgIi4uL2UvZiIKKwkpICA+Y3VycmVudCAmJgorCWVjaG8gLi4vZS9mID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB1c2luZyBhYnNvbHV0ZSBwYXRoIG5hbWVzJyAnCisJZ2l0IGNvbW1pdCAtbSAiZm9vIiAmJgorCWVjaG8gYWEgPj5hL2IvYy9kICYmCisJZ2l0IGNvbW1pdCAtbSAiYWEiICIkKHB3ZCkvYS9iL2MvZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIHVzaW5nIGFic29sdXRlIHBhdGggbmFtZXMnICcKKwllY2hvIGJiID4+YS9iL2MvZCAmJgorCWdpdCBjb21taXQgLW0gImJiIiAiJChwd2QpL2EvYi9jL2QiICYmCisKKwlnaXQgbG9nIGEvYi9jL2QgPmYxLnR4dCAmJgorCWdpdCBsb2cgIiQocHdkKS9hL2IvYy9kIiA+ZjIudHh0ICYmCisJdGVzdF9jbXAgZjEudHh0IGYyLnR4dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSB1c2luZyBhYnNvbHV0ZSBwYXRoIG5hbWVzJyAnCisJZ2l0IGJsYW1lIGEvYi9jL2QgPmYxLnR4dCAmJgorCWdpdCBibGFtZSAiJChwd2QpL2EvYi9jL2QiID5mMi50eHQgJiYKKwl0ZXN0X2NtcCBmMS50eHQgZjIudHh0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRlZXBlciB3b3JrIHRyZWUnICcKKwl0ZXN0X2NyZWF0ZV9yZXBvIHRlc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYSBkaXJlY3Rvcnkgb3V0c2lkZSB0aGUgd29yayB0cmVlJyAnKAorCWNkIHRlc3RlciAmJgorCWQxPSIkKGNkIC4uIDsgcHdkKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYWRkICIkZDEiCispJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhIGZpbGUgb3V0c2lkZSB0aGUgd29yayB0cmVlLCBuYXN0eSBjYXNlIDEnICcoCisJY2QgdGVzdGVyICYmCisJZj0iJChwd2QpeCIgJiYKKwllY2hvICIkZiIgJiYKKwl0b3VjaCAiJGYiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCAiJGYiCispJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYSBmaWxlIG91dHNpZGUgdGhlIHdvcmsgdHJlZSwgbmFzdHkgY2FzZSAyJyAnKAorCWNkIHRlc3RlciAmJgorCWY9IiQocHdkIHwgc2VkICJzLy4kLy8iKXgiICYmCisJZWNobyAiJGYiICYmCisJdG91Y2ggIiRmIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhZGQgIiRmIgorKScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDExLXNraXAtd29ya3RyZWUtcmVhZGluZy5zaCBiL3QvdDcwMTEtc2tpcC13b3JrdHJlZS1yZWFkaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4ZDYwYzEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDExLXNraXAtd29ya3RyZWUtcmVhZGluZy5zaApAQCAtMCwwICsxLDE2MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBOZ3V54buFbiBUaMOhaSBOZ+G7jWMgRHV5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3NraXAtd29ya3RyZWUgYml0IHRlc3QnCisKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmV4cGVjdC5mdWxsIDw8RU9GCitIIDEKK0ggMgorSCBpbml0LnQKK0ggc3ViLzEKK0ggc3ViLzIKK0VPRgorCitjYXQgPmV4cGVjdC5za2lwIDw8RU9GCitTIDEKK0ggMgorSCBpbml0LnQKK1Mgc3ViLzEKK0ggc3ViLzIKK0VPRgorCitOVUxMX1NIQTE9ZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQorCitzZXR1cF9hYnNlbnQoKSB7CisJdGVzdCAtZiAxICYmIHJtIDEKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkTlVMTF9TSEExIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxCit9CisKK3Rlc3RfYWJzZW50KCkgeworCWVjaG8gIjEwMDY0NCAkTlVMTF9TSEExIDAJMSIgPiBleHBlY3RlZCAmJgorCWdpdCBscy1maWxlcyAtLXN0YWdlIDEgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQgJiYKKwl0ZXN0ICEgLWYgMQorfQorCitzZXR1cF9kaXJ0eSgpIHsKKwlnaXQgdXBkYXRlLWluZGV4IC0tZm9yY2UtcmVtb3ZlIDEgJiYKKwllY2hvIGRpcnR5ID4gMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTAwNjQ0ICROVUxMX1NIQTEgMSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEKK30KKwordGVzdF9kaXJ0eSgpIHsKKwllY2hvICIxMDA2NDQgJE5VTExfU0hBMSAwCTEiID4gZXhwZWN0ZWQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAxID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJZWNobyBkaXJ0eSA+IGV4cGVjdGVkCisJdGVzdF9jbXAgZXhwZWN0ZWQgMQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXQgJiYKKwlta2RpciBzdWIgJiYKKwl0b3VjaCAuLzEgLi8yIHN1Yi8xIHN1Yi8yICYmCisJZ2l0IGFkZCAxIDIgc3ViLzEgc3ViLzIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxIHN1Yi8xICYmCisJZ2l0IGxzLWZpbGVzIC10ID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0LnNraXAgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCcgJworCXNldHVwX2Fic2VudCAmJgorCWdpdCB1cGRhdGUtaW5kZXggMSAmJgorCXRlc3RfYWJzZW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZS1pbmRleCcgJworCXNldHVwX2RpcnR5ICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAxICYmCisJdGVzdF9kaXJ0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1yZW1vdmUnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIDEgJiYKKwl0ZXN0IC16ICIkKGdpdCBscy1maWxlcyAxKSIgJiYKKwl0ZXN0ICEgLWYgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUtaW5kZXggLS1yZW1vdmUnICcKKwlzZXR1cF9kaXJ0eSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgMSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIDEpIiAmJgorCWVjaG8gZGlydHkgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1kZWxldGVkJyAnCisJc2V0dXBfYWJzZW50ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyAtLWRlbGV0ZWQnICcKKwlzZXR1cF9kaXJ0eSAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC1kKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1tb2RpZmllZCcgJworCXNldHVwX2Fic2VudCAmJgorCXRlc3QgLXogIiQoZ2l0IGxzLWZpbGVzIC1tKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbHMtZmlsZXMgLS1tb2RpZmllZCcgJworCXNldHVwX2RpcnR5ICYmCisJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMgLW0pIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHdpdGggc2tpcC13b3JrdHJlZSBmaWxlJyAnCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLXNraXAtd29ya3RyZWUgMSAmJgorCWVjaG8gdGVzdCA+IDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxICYmCisJcm0gMSAmJgorCXRlc3QgIiQoZ2l0IGdyZXAgLS1uby1leHQtZ3JlcCB0ZXN0KSIgPSAiMTp0ZXN0IgorJworCitlY2hvICI6MDAwMDAwIDEwMDY0NCAkX3o0MCAkTlVMTF9TSEExIEEJMSIgPiBleHBlY3RlZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCBkb2VzIG5vdCBleGFtaW5lIHNraXAtd29ya3RyZWUgYWJzZW50IGVudHJpZXMnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgZGlmZi1pbmRleCBIRUFEIC0tIDEgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZi1pbmRleCBkb2VzIG5vdCBleGFtaW5lIHNraXAtd29ya3RyZWUgZGlydHkgZW50cmllcycgJworCXNldHVwX2RpcnR5ICYmCisJZ2l0IGRpZmYtaW5kZXggSEVBRCAtLSAxID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYtZmlsZXMgZG9lcyBub3QgZXhhbWluZSBza2lwLXdvcmt0cmVlIGFic2VudCBlbnRyaWVzJyAnCisJc2V0dXBfYWJzZW50ICYmCisJdGVzdCAteiAiJChnaXQgZGlmZi1maWxlcyAtLSBvbmUpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmLWZpbGVzIGRvZXMgbm90IGV4YW1pbmUgc2tpcC13b3JrdHJlZSBkaXJ0eSBlbnRyaWVzJyAnCisJc2V0dXBfZGlydHkgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmLWZpbGVzIC0tIG9uZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1ybSBzdWNjZWVkcyBvbiBza2lwLXdvcmt0cmVlIGFic2VudCBlbnRyaWVzJyAnCisJc2V0dXBfYWJzZW50ICYmCisJZ2l0IHJtIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG9uIHNraXAtd29ya3RyZWUgYWJzZW50IGVudHJpZXMnICcKKwlnaXQgcmVzZXQgJiYKKwlzZXR1cF9hYnNlbnQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIG51bGwgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgb24gc2tpcC13b3JrdHJlZSBkaXJ0eSBlbnRyaWVzJyAnCisJZ2l0IHJlc2V0ICYmCisJc2V0dXBfZGlydHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIG51bGwgMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoIGIvdC90NzAxMi1za2lwLXdvcmt0cmVlLXdyaXRpbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWNlYWE0MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMTItc2tpcC13b3JrdHJlZS13cml0aW5nLnNoCkBAIC0wLDAgKzEsMTQ2IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IE5ndXnhu4VuIFRow6FpIE5n4buNYyBEdXkKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB3b3JrdHJlZSB3cml0aW5nIG9wZXJhdGlvbnMgd2hlbiBza2lwLXdvcmt0cmVlIGlzIHVzZWQnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGluaXQgJiYKKwllY2hvIG1vZGlmaWVkID4+IGluaXQudCAmJgorCXRvdWNoIGFkZGVkICYmCisJZ2l0IGFkZCBpbml0LnQgYWRkZWQgJiYKKwlnaXQgY29tbWl0IC1tICJtb2RpZmllZCBhbmQgYWRkZWQiICYmCisJZ2l0IHRhZyB0b3AKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHVwZGF0ZXMgd29ya3RyZWUsIGFic2VudCBjYXNlJyAnCisJZ2l0IGNoZWNrb3V0IC1mIHRvcCAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIGluaXQudCAmJgorCXJtIGluaXQudCAmJgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRF4gJiYKKwllY2hvIGluaXQgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGluaXQudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgdXBkYXRlcyB3b3JrdHJlZSwgZGlydHkgY2FzZScgJworCWdpdCBjaGVja291dCAtZiB0b3AgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSBpbml0LnQgJiYKKwllY2hvIGRpcnR5ID4+IGluaXQudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRF4gJiYKKwlncmVwIC1xIGRpcnR5IGluaXQudCAmJgorCXRlc3QgIiQoZ2l0IGxzLWZpbGVzIC10IGluaXQudCkiID0gIlMgaW5pdC50IiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1uby1za2lwLXdvcmt0cmVlIGluaXQudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWFkLXRyZWUgcmVtb3ZlcyB3b3JrdHJlZSwgYWJzZW50IGNhc2UnICcKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgYWRkZWQgJiYKKwlybSBhZGRlZCAmJgorCWdpdCByZWFkLXRyZWUgLW0gLXUgSEVBRF4gJiYKKwl0ZXN0ICEgLWYgYWRkZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVhZC10cmVlIHJlbW92ZXMgd29ya3RyZWUsIGRpcnR5IGNhc2UnICcKKwlnaXQgY2hlY2tvdXQgLWYgdG9wICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgYWRkZWQgJiYKKwllY2hvIGRpcnR5ID4+IGFkZGVkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYWQtdHJlZSAtbSAtdSBIRUFEXiAmJgorCWdyZXAgLXEgZGlydHkgYWRkZWQgJiYKKwl0ZXN0ICIkKGdpdCBscy1maWxlcyAtdCBhZGRlZCkiID0gIlMgYWRkZWQiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLXNraXAtd29ya3RyZWUgYWRkZWQKKycKKworTlVMTF9TSEExPWU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKKworc2V0dXBfYWJzZW50KCkgeworCXRlc3QgLWYgMSAmJiBybSAxCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMDA2NDQgJE5VTExfU0hBMSAxICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXNraXAtd29ya3RyZWUgMQorfQorCit0ZXN0X2Fic2VudCgpIHsKKwllY2hvICIxMDA2NDQgJE5VTExfU0hBMSAwCTEiID4gZXhwZWN0ZWQgJiYKKwlnaXQgbHMtZmlsZXMgLS1zdGFnZSAxID4gcmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJdGVzdCAhIC1mIDEKK30KKworc2V0dXBfZGlydHkoKSB7CisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXJlbW92ZSAxICYmCisJZWNobyBkaXJ0eSA+IDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDEwMDY0NCAkTlVMTF9TSEExIDEgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tc2tpcC13b3JrdHJlZSAxCit9CisKK3Rlc3RfZGlydHkoKSB7CisJZWNobyAiMTAwNjQ0ICROVUxMX1NIQTEgMAkxIiA+IGV4cGVjdGVkICYmCisJZ2l0IGxzLWZpbGVzIC0tc3RhZ2UgMSA+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdCAmJgorCWVjaG8gZGlydHkgPiBleHBlY3RlZAorCXRlc3RfY21wIGV4cGVjdGVkIDEKK30KKworY2F0ID5leHBlY3RlZCA8PEVPRgorUyAxCitIIDIKK0ggaW5pdC50CitTIHN1Yi8xCitIIHN1Yi8yCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZXggc2V0dXAnICcKKwlnaXQgY2hlY2tvdXQgLWYgaW5pdCAmJgorCW1rZGlyIHN1YiAmJgorCXRvdWNoIC4vMSAuLzIgc3ViLzEgc3ViLzIgJiYKKwlnaXQgYWRkIDEgMiBzdWIvMSBzdWIvMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIDEgc3ViLzEgJiYKKwlnaXQgbHMtZmlsZXMgLXQgPiByZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWFkZCBpZ25vcmVzIHdvcmt0cmVlIGNvbnRlbnQnICcKKwlzZXR1cF9hYnNlbnQgJiYKKwlnaXQgYWRkIDEgJiYKKwl0ZXN0X2Fic2VudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtYWRkIGlnbm9yZXMgd29ya3RyZWUgY29udGVudCcgJworCXNldHVwX2RpcnR5ICYmCisJZ2l0IGFkZCAxICYmCisJdGVzdF9kaXJ0eQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtcm0gZmFpbHMgaWYgd29ya3RyZWUgaXMgZGlydHknICcKKwlzZXR1cF9kaXJ0eSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBybSAxICYmCisJdGVzdF9kaXJ0eQorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitXb3VsZCByZW1vdmUgZXhwZWN0ZWQKK1dvdWxkIHJlbW92ZSByZXN1bHQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWNsZWFuLCBhYnNlbnQgY2FzZScgJworCXNldHVwX2Fic2VudCAmJgorCWdpdCBjbGVhbiAtbiA+IHJlc3VsdCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LWNsZWFuLCBkaXJ0eSBjYXNlJyAnCisJc2V0dXBfZGlydHkgJiYKKwlnaXQgY2xlYW4gLW4gPiByZXN1bHQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKKyNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1hcHBseSBhZGRzIGZpbGUnIGZhbHNlCisjVE9ETyB0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQtYXBwbHkgdXBkYXRlcyBmaWxlJyBmYWxzZQorI1RPRE8gdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LWFwcGx5IHJlbW92ZXMgZmlsZScgZmFsc2UKKyNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1tdiB0byBza2lwLXdvcmt0cmVlJyBmYWxzZQorI1RPRE8gdGVzdF9leHBlY3RfZmFpbHVyZSAnZ2l0LW12IGZyb20gc2tpcC13b3JrdHJlZScgZmFsc2UKKyNUT0RPIHRlc3RfZXhwZWN0X2ZhaWx1cmUgJ2dpdC1jaGVja291dCcgZmFsc2UKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDMwLXZlcmlmeS10YWcuc2ggYi90L3Q3MDMwLXZlcmlmeS10YWcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDYwOGU3MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwMzAtdmVyaWZ5LXRhZy5zaApAQCAtMCwwICsxLDExNSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3NpZ25lZCB0YWcgdGVzdHMnCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWS9saWItZ3BnLnNoIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnY3JlYXRlIHNpZ25lZCB0YWdzJyAnCisJZWNobyAxID5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIC1zIC1tIGluaXRpYWwgaW5pdGlhbCAmJgorCWdpdCBicmFuY2ggc2lkZSAmJgorCisJZWNobyAyID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tIHNlY29uZCAmJgorCWdpdCB0YWcgLXMgLW0gc2Vjb25kIHNlY29uZCAmJgorCisJZ2l0IGNoZWNrb3V0IHNpZGUgJiYKKwllY2hvIDMgPmVsaWYgJiYgZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gInRoaXJkIG9uIHNpZGUiICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF90aWNrICYmIGdpdCBtZXJnZSAtUyBzaWRlICYmCisJZ2l0IHRhZyAtcyAtbSBtZXJnZSBtZXJnZSAmJgorCisJZWNobyA0ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1TIC1tICJmb3VydGggdW5zaWduZWQiICYmCisJZ2l0IHRhZyAtYSAtbSBmb3VydGgtdW5zaWduZWQgZm91cnRoLXVuc2lnbmVkICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtLWFtZW5kIC1TIC1tICJmb3VydGggc2lnbmVkIiAmJgorCWdpdCB0YWcgLXMgLW0gZm91cnRoIGZvdXJ0aC1zaWduZWQgJiYKKworCWVjaG8gNSA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSAiZmlmdGgiICYmCisJZ2l0IHRhZyBmaWZ0aC11bnNpZ25lZCAmJgorCisJZ2l0IGNvbmZpZyBjb21taXQuZ3Bnc2lnbiB0cnVlICYmCisJZWNobyA2ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tICJzaXh0aCIgJiYKKwlnaXQgdGFnIC1hIC1tIHNpeHRoIHNpeHRoLXVuc2lnbmVkICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IHJlYmFzZSAtZiBIRUFEXl4gJiYgZ2l0IHRhZyAtcyAtbSA2dGggc2l4dGgtc2lnbmVkIEhFQUReICYmCisJZ2l0IHRhZyAtbSBzZXZlbnRoIC1zIHNldmVudGgtc2lnbmVkICYmCisKKwllY2hvIDggPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gZWlnaHRoICYmCisJZ2l0IHRhZyAtdUI3MjI3MTg5IC1tIGVpZ2h0aCBlaWdodGgtc2lnbmVkLWFsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5IGFuZCBzaG93IHNpZ25hdHVyZXMnICcKKwkoCisJCWZvciB0YWcgaW4gaW5pdGlhbCBzZWNvbmQgbWVyZ2UgZm91cnRoLXNpZ25lZCBzaXh0aC1zaWduZWQgc2V2ZW50aC1zaWduZWQKKwkJZG8KKwkJCWdpdCB2ZXJpZnktdGFnICR0YWcgMj5hY3R1YWwgJiYKKwkJCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJZWNobyAkdGFnIE9LIHx8IGV4aXQgMQorCQlkb25lCisJKSAmJgorCSgKKwkJZm9yIHRhZyBpbiBmb3VydGgtdW5zaWduZWQgZmlmdGgtdW5zaWduZWQgc2l4dGgtdW5zaWduZWQKKwkJZG8KKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktdGFnICR0YWcgMj5hY3R1YWwgJiYKKwkJCSEgZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQllY2hvICR0YWcgT0sgfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisJKAorCQlmb3IgdGFnIGluIGVpZ2h0aC1zaWduZWQtYWx0CisJCWRvCisJCQlnaXQgdmVyaWZ5LXRhZyAkdGFnIDI+YWN0dWFsICYmCisJCQlncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkJCWdyZXAgIm5vdCBjZXJ0aWZpZWQiIGFjdHVhbCAmJgorCQkJZWNobyAkdGFnIE9LIHx8IGV4aXQgMQorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnZGV0ZWN0IGZ1ZGdlZCBzaWduYXR1cmUnICcKKwlnaXQgY2F0LWZpbGUgdGFnIHNldmVudGgtc2lnbmVkID5yYXcgJiYKKwlzZWQgLWUgInMvc2V2ZW50aC83dGggZm9yZ2VkLyIgcmF3ID5mb3JnZWQxICYmCisJZ2l0IGhhc2gtb2JqZWN0IC13IC10IHRhZyBmb3JnZWQxID5mb3JnZWQxLnRhZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktdGFnICQoY2F0IGZvcmdlZDEudGFnKSAyPmFjdHVhbDEgJiYKKwlncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbDEgJiYKKwkhIGdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3ZlcmlmeSBzaWduYXR1cmVzIHdpdGggLS1yYXcnICcKKwkoCisJCWZvciB0YWcgaW4gaW5pdGlhbCBzZWNvbmQgbWVyZ2UgZm91cnRoLXNpZ25lZCBzaXh0aC1zaWduZWQgc2V2ZW50aC1zaWduZWQKKwkJZG8KKwkJCWdpdCB2ZXJpZnktdGFnIC0tcmF3ICR0YWcgMj5hY3R1YWwgJiYKKwkJCWdyZXAgIkdPT0RTSUciIGFjdHVhbCAmJgorCQkJISBncmVwICJCQURTSUciIGFjdHVhbCAmJgorCQkJZWNobyAkdGFnIE9LIHx8IGV4aXQgMQorCQlkb25lCisJKSAmJgorCSgKKwkJZm9yIHRhZyBpbiBmb3VydGgtdW5zaWduZWQgZmlmdGgtdW5zaWduZWQgc2l4dGgtdW5zaWduZWQKKwkJZG8KKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktdGFnIC0tcmF3ICR0YWcgMj5hY3R1YWwgJiYKKwkJCSEgZ3JlcCAiR09PRFNJRyIgYWN0dWFsICYmCisJCQkhIGdyZXAgIkJBRFNJRyIgYWN0dWFsICYmCisJCQllY2hvICR0YWcgT0sgfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisJKAorCQlmb3IgdGFnIGluIGVpZ2h0aC1zaWduZWQtYWx0CisJCWRvCisJCQlnaXQgdmVyaWZ5LXRhZyAtLXJhdyAkdGFnIDI+YWN0dWFsICYmCisJCQlncmVwICJHT09EU0lHIiBhY3R1YWwgJiYKKwkJCSEgZ3JlcCAiQkFEU0lHIiBhY3R1YWwgJiYKKwkJCWdyZXAgIlRSVVNUX1VOREVGSU5FRCIgYWN0dWFsICYmCisJCQllY2hvICR0YWcgT0sgfHwgZXhpdCAxCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzA2MC13dHN0YXR1cy5zaCBiL3QvdDcwNjAtd3RzdGF0dXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzJkODE3NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwNjAtd3RzdGF0dXMuc2gKQEAgLTAsMCArMSwyMTcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdiYXNpYyB3b3JrIHRyZWUgc3RhdHVzIHJlcG9ydGluZycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCWdpdCBjb25maWcgLS1nbG9iYWwgYWR2aWNlLnN0YXR1c3VvcHRpb24gZmFsc2UgJiYKKwl0ZXN0X2NvbW1pdCBBICYmCisJdGVzdF9jb21taXQgQiBvbmVzaWRlIGFkZGVkICYmCisJZ2l0IGNoZWNrb3V0IEFeMCAmJgorCXRlc3RfY29tbWl0IEMgb25lc2lkZSBjcmVhdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0EvQSBjb25mbGljdCcgJworCWdpdCBjaGVja291dCBCXjAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgQworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXBvcnQgcGF0aCB3aXRoIGNvbmZsaWN0JyAnCisJZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyA+YWN0dWFsICYmCisJZWNobyAiVQlvbmVzaWRlIiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXBvcnQgbmV3IHBhdGggd2l0aCBjb25mbGljdCcgJworCWdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1zdGF0dXMgSEVBRF4gPmFjdHVhbCAmJgorCWVjaG8gIlUJb25lc2lkZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnTS9EIGNvbmZsaWN0IGRvZXMgbm90IHNlZ2ZhdWx0JyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBzaWRlCitZb3UgaGF2ZSB1bm1lcmdlZCBwYXRocy4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biAiZ2l0IGNvbW1pdCIpCisKK1VubWVyZ2VkIHBhdGhzOgorICAodXNlICJnaXQgYWRkL3JtIDxmaWxlPi4uLiIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKQorCisJZGVsZXRlZCBieSB1czogICBmb28KKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCW1rZGlyIG1kY29uZmxpY3QgJiYKKwkoCisJCWNkIG1kY29uZmxpY3QgJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgaW5pdGlhbCBmb28gIiIgJiYKKwkJdGVzdF9jb21taXQgbW9kaWZ5IGZvbyBmb28gJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgSEVBRF4gJiYKKwkJZ2l0IHJtIGZvbyAmJgorCQlnaXQgY29tbWl0IC1tIGRlbGV0ZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1kcnktcnVuID4uLi9hY3R1YWwgJiYKKwkJdGVzdF9pMThuY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwgJiYKKwkJZ2l0IHN0YXR1cyA+Li4vYWN0dWFsICYmCisJCXRlc3RfaTE4bmNtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW5hbWUgJiB1bm1lcmdlZCBzZXR1cCcgJworCWdpdCBybSAtZiAtciAuICYmCisJY2F0ICIkVEVTVF9ESVJFQ1RPUlkvUkVBRE1FIiA+T05FICYmCisJZ2l0IGFkZCBPTkUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJPbmUgY29tbWl0IHdpdGggT05FIiAmJgorCisJZWNobyBNb2RpZmllZCA+VFdPICYmCisJY2F0IE9ORSA+PlRXTyAmJgorCWNhdCBPTkUgPj5USFJFRSAmJgorCWdpdCBhZGQgVFdPIFRIUkVFICYmCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgOk9ORSkgJiYKKwlnaXQgcm0gLS1jYWNoZWQgT05FICYmCisJKAorCQllY2hvICIxMDA2NDQgJHNoYTEgMQlPTkUiICYmCisJCWVjaG8gIjEwMDY0NCAkc2hhMSAyCU9ORSIgJiYKKwkJZWNobyAiMTAwNjQ0ICRzaGExIDMJT05FIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCWVjaG8gRnVydGhlciA+PlRIUkVFCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSAmIHVubWVyZ2VkIHN0YXR1cycgJworCWdpdCBzdGF0dXMgLXN1bm8gPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0IDw8LUVPRiAmJgorCVVVIE9ORQorCUFNIFRIUkVFCisJQSAgVFdPCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCBzaG93cyAyIGFkZGVkICsgMSB1bm1lcmdlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJVQlPTkUKKwlBCVRIUkVFCisJQQlUV08KKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtTSBzaG93cyAyIGFkZGVkICsgMSB1bm1lcmdlZCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJVQlPTkUKKwlBCVRIUkVFCisJQQlUV08KKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtTSAtLW5hbWUtc3RhdHVzIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtQyBzaG93cyAyIGNvcGllcyArIDEgdW5tZXJnZWQnICcKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorCVUJT05FCisJQwlPTkUJVEhSRUUKKwlDCU9ORQlUV08KKwlFT0YKKwlnaXQgZGlmZi1pbmRleCAtLWNhY2hlZCAtQyAtLW5hbWUtc3RhdHVzIEhFQUQgfAorCXNlZCAicy9eQ1swLTldKi9DL2ciID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjb25mbGljdHMgd2l0aCBhZGQgYW5kIHJtIGFkdmljZSAoZGVsZXRlZCBieSB0aGVtKScgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgaW5pdCBtYWluLnR4dCBpbml0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIHNlY29uZF9icmFuY2ggJiYKKwlnaXQgcm0gbWFpbi50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJtYWluLnR4dCBkZWxldGVkIG9uIHNlY29uZF9icmFuY2giICYmCisJdGVzdF9jb21taXQgc2Vjb25kIGNvbmZsaWN0LnR4dCBzZWNvbmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJdGVzdF9jb21taXQgb25fc2Vjb25kIG1haW4udHh0IG9uX3NlY29uZCAmJgorCXRlc3RfY29tbWl0IG1hc3RlciBjb25mbGljdC50eHQgbWFzdGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHNlY29uZF9icmFuY2ggJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCisgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorCitVbm1lcmdlZCBwYXRoczoKKyAgKHVzZSAiZ2l0IGFkZC9ybSA8ZmlsZT4uLi4iIGFzIGFwcHJvcHJpYXRlIHRvIG1hcmsgcmVzb2x1dGlvbikKKworCWJvdGggYWRkZWQ6ICAgICAgY29uZmxpY3QudHh0CisJZGVsZXRlZCBieSB0aGVtOiBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIGNvbmZsaWN0cycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3QgJiYKKwl0ZXN0X2NvbW1pdCBvbmUgbWFpbi50eHQgb25lICYmCisJZ2l0IGJyYW5jaCBjb25mbGljdF9zZWNvbmQgJiYKKwlnaXQgbXYgbWFpbi50eHQgc3ViX21hc3Rlci50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJtYWluLnR4dCByZW5hbWVkIGluIHN1Yl9tYXN0ZXIudHh0IiAmJgorCWdpdCBjaGVja291dCBjb25mbGljdF9zZWNvbmQgJiYKKwlnaXQgbXYgbWFpbi50eHQgc3ViX3NlY29uZC50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJtYWluLnR4dCByZW5hbWVkIGluIHN1Yl9zZWNvbmQudHh0IgorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIGNvbmZsaWN0cyB3aXRoIGFkZCBhbmQgcm0gYWR2aWNlIChib3RoIGRlbGV0ZWQpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK09uIGJyYW5jaCBjb25mbGljdF9zZWNvbmQKK1lvdSBoYXZlIHVubWVyZ2VkIHBhdGhzLgorICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuICJnaXQgY29tbWl0IikKKworVW5tZXJnZWQgcGF0aHM6CisgICh1c2UgImdpdCBhZGQvcm0gPGZpbGU+Li4uIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pCisKKwlib3RoIGRlbGV0ZWQ6ICAgIG1haW4udHh0CisJYWRkZWQgYnkgdGhlbTogICBzdWJfbWFzdGVyLnR4dAorCWFkZGVkIGJ5IHVzOiAgICAgc3ViX3NlY29uZC50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjb25mbGljdHMgd2l0aCBvbmx5IHJtIGFkdmljZSAoYm90aCBkZWxldGVkKScgJworCWdpdCByZXNldCAtLWhhcmQgY29uZmxpY3Rfc2Vjb25kICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0ICYmCisJZ2l0IGFkZCBzdWJfbWFzdGVyLnR4dCAmJgorCWdpdCBhZGQgc3ViX3NlY29uZC50eHQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIGNvbmZsaWN0X3NlY29uZAorWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCisgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKworCW5ldyBmaWxlOiAgIHN1Yl9tYXN0ZXIudHh0CisKK1VubWVyZ2VkIHBhdGhzOgorICAodXNlICJnaXQgcm0gPGZpbGU+Li4uIiB0byBtYXJrIHJlc29sdXRpb24pCisKKwlib3RoIGRlbGV0ZWQ6ICAgIG1haW4udHh0CisKK1VudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDYxLXd0c3RhdHVzLWlnbm9yZS5zaCBiL3QvdDcwNjEtd3RzdGF0dXMtaWdub3JlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkYzA3NDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MDYxLXd0c3RhdHVzLWlnbm9yZS5zaApAQCAtMCwwICsxLDI3NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1zdGF0dXMgaWdub3JlZCBmaWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCis/PyB1bnRyYWNrZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHVudHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCAtLWlnbm9yZWQnICcKKwllY2hvICJpZ25vcmVkIiA+LmdpdGlnbm9yZSAmJgorCW1rZGlyIHVudHJhY2tlZCAmJgorCTogPnVudHJhY2tlZC9pZ25vcmVkICYmCisJOiA+dW50cmFja2VkL3VuY29tbWl0dGVkICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIHdpdGggZ2l0aWdub3JlIHN0YXJ0aW5nIHdpdGggQk9NJyAnCisJcHJpbnRmICJcMzU3XDI3M1wyNzdpZ25vcmVkXG4iID4uZ2l0aWdub3JlICYmCisJbWtkaXIgLXAgdW50cmFja2VkICYmCisJOiA+dW50cmFja2VkL2lnbm9yZWQgJiYKKwk6ID51bnRyYWNrZWQvdW5jb21taXR0ZWQgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCis/PyB1bnRyYWNrZWQvdW5jb21taXR0ZWQKKyEhIHVudHJhY2tlZC9pZ25vcmVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHVudHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCAtLWlnbm9yZWQgLXUnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gdW50cmFja2VkL3VuY29tbWl0dGVkCishISB1bnRyYWNrZWQvaWdub3JlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBwcmVmaXhlZCB1bnRyYWNrZWQgZGlyZWN0b3J5IHdpdGggLS1pZ25vcmVkJyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgdW50cmFja2VkLyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyB1bnRyYWNrZWQvdW5jb21taXR0ZWQKKyEhIHVudHJhY2tlZC9pZ25vcmVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHByZWZpeGVkIHVudHJhY2tlZCBzdWItZGlyZWN0b3J5IHdpdGggLS1pZ25vcmVkIC11JyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgLXUgdW50cmFja2VkLyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCishISBpZ25vcmVkLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIGRpcmVjdG9yeSB3aXRoIC0taWdub3JlJyAnCisJcm0gLXJmIHVudHJhY2tlZCAmJgorCW1rZGlyIGlnbm9yZWQgJiYKKwk6ID5pZ25vcmVkL3VuY29tbWl0dGVkICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorISEgaWdub3JlZC91bmNvbW1pdHRlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIGRpcmVjdG9yeSB3aXRoIC0taWdub3JlIC11JyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBlbXB0eSB1bnRyYWNrZWQgZGlyZWN0b3J5IHdpdGggLS1pZ25vcmUnICcKKwlybSAtcmYgaWdub3JlZCAmJgorCW1rZGlyIHVudHJhY2tlZC1pZ25vcmVkICYmCisJbWtkaXIgdW50cmFja2VkLWlnbm9yZWQvdGVzdCAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZW1wdHkgdW50cmFja2VkIGRpcmVjdG9yeSB3aXRoIC0taWdub3JlIC11JyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorISEgdW50cmFja2VkLWlnbm9yZWQvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHVudHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCBpZ25vcmVkIGZpbGVzIHdpdGggLS1pZ25vcmUnICcKKwk6ID51bnRyYWNrZWQtaWdub3JlZC9pZ25vcmVkICYmCisJOiA+dW50cmFja2VkLWlnbm9yZWQvdGVzdC9pZ25vcmVkICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorISEgdW50cmFja2VkLWlnbm9yZWQvaWdub3JlZAorISEgdW50cmFja2VkLWlnbm9yZWQvdGVzdC9pZ25vcmVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHVudHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCBpZ25vcmVkIGZpbGVzIHdpdGggLS1pZ25vcmUgLXUnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCAtLWlnbm9yZScgJworCXJtIC1yZiB1bnRyYWNrZWQtaWdub3JlZCAmJgorCW1rZGlyIHRyYWNrZWQgJiYKKwk6ID50cmFja2VkL2NvbW1pdHRlZCAmJgorCWdpdCBhZGQgdHJhY2tlZC9jb21taXR0ZWQgJiYKKwlnaXQgY29tbWl0IC1tLiAmJgorCWVjaG8gInRyYWNrZWQiID4uZ2l0aWdub3JlICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5IHdpdGggLS1pZ25vcmUgLXUnICcKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCAtdSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3RvcnkgYW5kIGlnbm9yZWQgZmlsZSB3aXRoIC0taWdub3JlJyAnCisJZWNobyAiY29tbWl0dGVkIiA+Pi5naXRpZ25vcmUgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3RvcnkgYW5kIGlnbm9yZWQgZmlsZSB3aXRoIC0taWdub3JlIC11JyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorISEgdHJhY2tlZC91bmNvbW1pdHRlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBpZ25vcmVkIHRyYWNrZWQgZGlyZWN0b3J5IGFuZCB1bmNvbW1pdHRlZCBmaWxlIHdpdGggLS1pZ25vcmUnICcKKwllY2hvICJ0cmFja2VkIiA+LmdpdGlnbm9yZSAmJgorCTogPnRyYWNrZWQvdW5jb21taXR0ZWQgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCishISB0cmFja2VkL3VuY29tbWl0dGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3RvcnkgYW5kIHVuY29tbWl0dGVkIGZpbGUgd2l0aCAtLWlnbm9yZSAtdScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKKz8/IC5naXRpZ25vcmUKKz8/IGFjdHVhbAorPz8gZXhwZWN0ZWQKKyEhIHRyYWNrZWQvaWdub3JlZC8KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeSB3aXRoIHVuY29tbWl0dGVkIGZpbGUgaW4gdW50cmFja2VkIHN1YmRpciB3aXRoIC0taWdub3JlJyAnCisJcm0gLXJmIHRyYWNrZWQvdW5jb21taXR0ZWQgJiYKKwlta2RpciB0cmFja2VkL2lnbm9yZWQgJiYKKwk6ID50cmFja2VkL2lnbm9yZWQvdW5jb21taXR0ZWQgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCishISB0cmFja2VkL2lnbm9yZWQvdW5jb21taXR0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeSB3aXRoIHVuY29tbWl0dGVkIGZpbGUgaW4gdW50cmFja2VkIHN1YmRpciB3aXRoIC0taWdub3JlIC11JyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtLWlnbm9yZWQgLXUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorPz8gLmdpdGlnbm9yZQorPz8gYWN0dWFsCis/PyBleHBlY3RlZAorISEgdHJhY2tlZC9pZ25vcmVkL3VuY29tbWl0dGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGlnbm9yZWQgdHJhY2tlZCBkaXJlY3Rvcnkgd2l0aCB1bmNvbW1pdHRlZCBmaWxlIGluIHRyYWNrZWQgc3ViZGlyIHdpdGggLS1pZ25vcmUnICcKKwk6ID50cmFja2VkL2lnbm9yZWQvY29tbWl0dGVkICYmCisJZ2l0IGFkZCAtZiB0cmFja2VkL2lnbm9yZWQvY29tbWl0dGVkICYmCisJZ2l0IGNvbW1pdCAtbS4gJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0taWdub3JlZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxcRU9GCis/PyAuZ2l0aWdub3JlCis/PyBhY3R1YWwKKz8/IGV4cGVjdGVkCishISB0cmFja2VkL2lnbm9yZWQvdW5jb21taXR0ZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeSB3aXRoIHVuY29tbWl0dGVkIGZpbGUgaW4gdHJhY2tlZCBzdWJkaXIgd2l0aCAtLWlnbm9yZSAtdScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gLS1pZ25vcmVkIC11ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MDYyLXd0c3RhdHVzLWlnbm9yZWNhc2Uuc2ggYi90L3Q3MDYyLXd0c3RhdHVzLWlnbm9yZWNhc2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzM3MDlkYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcwNjItd3RzdGF0dXMtaWdub3JlY2FzZS5zaApAQCAtMCwwICsxLDIwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LXN0YXR1cyB3aXRoIGNvcmUuaWdub3JlY2FzZT10cnVlJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggaGFzaCBjb2xsaXNpb25zJyAnCisJIyBub3RlOiAiVi8iLCAiVi9YUUFOWS8iIGFuZCAiV1VSWkFVUC8iIHByb2R1Y2UgdGhlIHNhbWUgaGFzaCBjb2RlCisJIyBpbiBuYW1lLWhhc2guYzo6aGFzaF9uYW1lCisJbWtkaXIgViAmJgorCW1rZGlyIFYvWFFBTlkgJiYKKwlta2RpciBXVVJaQVVQICYmCisJdG91Y2ggVi9YUUFOWS90ZXN0ICYmCisJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgdHJ1ZSAmJgorCWdpdCBhZGQgLiAmJgorCSMgdGVzdCBpcyBzdWNjZXNzZnVsIGlmIGdpdCBzdGF0dXMgY29tcGxldGVzIChubyBlbmRsZXNzIGxvb3ApCisJZ2l0IHN0YXR1cworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcwNjMtc3RhdHVzLXVudHJhY2tlZC1jYWNoZS5zaCBiL3QvdDcwNjMtc3RhdHVzLXVudHJhY2tlZC1jYWNoZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZThkMGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzA2My1zdGF0dXMtdW50cmFja2VkLWNhY2hlLnNoCkBAIC0wLDAgKzEsNTc0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB1bnRyYWNrZWQgY2FjaGUnCisKKy4gLi90ZXN0LWxpYi5zaAorCithdm9pZF9yYWN5KCkgeworCXNsZWVwIDEKK30KKworIyBJdCdzIGZpbmUgaWYgZ2l0IHVwZGF0ZS1pbmRleCByZXR1cm5zIGFuIGVycm9yIGNvZGUgb3RoZXIgdGhhbiBvbmUsCisjIGl0J2xsIGJlIGNhdWdodCBpbiB0aGUgZmlyc3QgdGVzdC4KK3Rlc3RfbGF6eV9wcmVyZXEgVU5UUkFDS0VEX0NBQ0hFICcKKwl7IGdpdCB1cGRhdGUtaW5kZXggLS11bnRyYWNrZWQtY2FjaGU7IHJldD0kPzsgfSAmJgorCXRlc3QgJHJldCAtbmUgMQorJworCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgVU5UUkFDS0VEX0NBQ0hFOyB0aGVuCisJc2tpcF9hbGw9J1RoaXMgc3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgdW50cmFja2VkIGNhY2hlJworCXRlc3RfZG9uZQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlnaXQgaW5pdCB3b3JrdHJlZSAmJgorCWNkIHdvcmt0cmVlICYmCisJbWtkaXIgZG9uZSBkdHdvIGR0aHJlZSAmJgorCXRvdWNoIG9uZSB0d28gdGhyZWUgZG9uZS9vbmUgZHR3by90d28gZHRocmVlL3RocmVlICYmCisJZ2l0IGFkZCBvbmUgdHdvIGRvbmUvb25lICYmCisJOiA+LmdpdC9pbmZvL2V4Y2x1ZGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tdW50cmFja2VkLWNhY2hlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VudHJhY2tlZCBjYWNoZSBpcyBlbXB0eScgJworCXRlc3QtZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CitFT0YKKwl0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKK2NhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorQSAgZG9uZS9vbmUKK0EgIG9uZQorQSAgdHdvCis/PyBkdGhyZWUvCis/PyBkdHdvLworPz8gdGhyZWUKK0VPRgorCitjYXQgPi4uL2R1bXAuZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorZHRocmVlLworZHR3by8KK3RocmVlCisvZG9uZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCisvZHRocmVlLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordGhyZWUKKy9kdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordHdvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGZpcnN0IHRpbWUgKGVtcHR5IGNhY2hlKScgJworCWF2b2lkX3JhY3kgJiYKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL2FjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAzCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAxCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAwCitvcGVuZGlyOiA0CitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGNhY2hlIGFmdGVyIGZpcnN0IHN0YXR1cycgJworCXRlc3QtZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCXRlc3RfY21wIC4uL2R1bXAuZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2Vjb25kIHRpbWUgKGZ1bGx5IHBvcHVsYXRlZCBjYWNoZSknICcKKwlhdm9pZF9yYWN5ICYmCisJOiA+Li4vdHJhY2UgJiYKKwlHSVRfVFJBQ0VfVU5UUkFDS0VEX1NUQVRTPSIkVFJBU0hfRElSRUNUT1JZL3RyYWNlIiBcCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9hY3R1YWwgJiYKKwljYXQgPi4uL3RyYWNlLmV4cGVjdCA8PEVPRiAmJgorbm9kZSBjcmVhdGlvbjogMAorZ2l0aWdub3JlIGludmFsaWRhdGlvbjogMAorZGlyZWN0b3J5IGludmFsaWRhdGlvbjogMAorb3BlbmRpcjogMAorRU9GCisJdGVzdF9jbXAgLi4vdHJhY2UuZXhwZWN0IC4uL3RyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VudHJhY2tlZCBjYWNoZSBhZnRlciBzZWNvbmQgc3RhdHVzJyAnCisJdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJdGVzdF9jbXAgLi4vZHVtcC5leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmeSBpbiByb290IGRpcmVjdG9yeSwgb25lIGRpciBpbnZhbGlkYXRpb24nICcKKwlhdm9pZF9yYWN5ICYmCisJOiA+Zm91ciAmJgorCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorQSAgZG9uZS9vbmUKK0EgIG9uZQorQSAgdHdvCis/PyBkdGhyZWUvCis/PyBkdHdvLworPz8gZm91cgorPz8gdGhyZWUKK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vYWN0dWFsICYmCisJY2F0ID4uLi90cmFjZS5leHBlY3QgPDxFT0YgJiYKK25vZGUgY3JlYXRpb246IDAKK2dpdGlnbm9yZSBpbnZhbGlkYXRpb246IDAKK2RpcmVjdG9yeSBpbnZhbGlkYXRpb246IDEKK29wZW5kaXI6IDEKK0VPRgorCXRlc3RfY21wIC4uL3RyYWNlLmV4cGVjdCAuLi90cmFjZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB1bnRyYWNrZWQgY2FjaGUgZHVtcCcgJworCXRlc3QtZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorZHRocmVlLworZHR3by8KK2ZvdXIKK3RocmVlCisvZG9uZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCisvZHRocmVlLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordGhyZWUKKy9kdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordHdvCitFT0YKKwl0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyAuZ2l0aWdub3JlIGludmFsaWRhdGVzIHJlY3Vyc2l2ZWx5JyAnCisJYXZvaWRfcmFjeSAmJgorCWVjaG8gZm91ciA+LmdpdGlnbm9yZSAmJgorCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorQSAgZG9uZS9vbmUKK0EgIG9uZQorQSAgdHdvCis/PyAuZ2l0aWdub3JlCis/PyBkdGhyZWUvCis/PyBkdHdvLworPz8gdGhyZWUKK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vYWN0dWFsICYmCisJY2F0ID4uLi90cmFjZS5leHBlY3QgPDxFT0YgJiYKK25vZGUgY3JlYXRpb246IDAKK2dpdGlnbm9yZSBpbnZhbGlkYXRpb246IDEKK2RpcmVjdG9yeSBpbnZhbGlkYXRpb246IDEKK29wZW5kaXI6IDQKK0VPRgorCXRlc3RfY21wIC4uL3RyYWNlLmV4cGVjdCAuLi90cmFjZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB1bnRyYWNrZWQgY2FjaGUgZHVtcCcgJworCXRlc3QtZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MQorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIGU2ZmNjOGYyZWUzMWJhZTMyMWQ2NmFmZDE4M2ZjYjcyMzdhZmFlNmUgcmVjdXJzZSB2YWxpZAorLmdpdGlnbm9yZQorZHRocmVlLworZHR3by8KK3RocmVlCisvZG9uZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCisvZHRocmVlLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordGhyZWUKKy9kdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordHdvCitFT0YKKwl0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25ldyBpbmZvL2V4Y2x1ZGUgaW52YWxpZGF0ZXMgZXZlcnl0aGluZycgJworCWF2b2lkX3JhY3kgJiYKKwllY2hvIHRocmVlID4+LmdpdC9pbmZvL2V4Y2x1ZGUgJiYKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKK0EgIGRvbmUvb25lCitBICBvbmUKK0EgIHR3bworPz8gLmdpdGlnbm9yZQorPz8gZHR3by8KK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vYWN0dWFsICYmCisJY2F0ID4uLi90cmFjZS5leHBlY3QgPDxFT0YgJiYKK25vZGUgY3JlYXRpb246IDAKK2dpdGlnbm9yZSBpbnZhbGlkYXRpb246IDEKK2RpcmVjdG9yeSBpbnZhbGlkYXRpb246IDAKK29wZW5kaXI6IDQKK0VPRgorCXRlc3RfY21wIC4uL3RyYWNlLmV4cGVjdCAuLi90cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdW50cmFja2VkIGNhY2hlIGR1bXAnICcKKwl0ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UgdmFsaWQKKy5naXRpZ25vcmUKK2R0d28vCisvZG9uZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCisvZHRocmVlLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAorL2R0d28vIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCit0d28KK0VPRgorCXRlc3RfY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSB0d28gZnJvbSB0cmFja2VkIHRvIHVudHJhY2tlZCcgJworCWdpdCBybSAtLWNhY2hlZCB0d28gJiYKKwl0ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UKKy9kb25lLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgYWZ0ZXIgdGhlIG1vdmUnICcKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKK0EgIGRvbmUvb25lCitBICBvbmUKKz8/IC5naXRpZ25vcmUKKz8/IGR0d28vCis/PyB0d28KK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vYWN0dWFsICYmCisJY2F0ID4uLi90cmFjZS5leHBlY3QgPDxFT0YgJiYKK25vZGUgY3JlYXRpb246IDAKK2dpdGlnbm9yZSBpbnZhbGlkYXRpb246IDAKK2RpcmVjdG9yeSBpbnZhbGlkYXRpb246IDAKK29wZW5kaXI6IDEKK0VPRgorCXRlc3RfY21wIC4uL3RyYWNlLmV4cGVjdCAuLi90cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdW50cmFja2VkIGNhY2hlIGR1bXAnICcKKwl0ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UgdmFsaWQKKy5naXRpZ25vcmUKK2R0d28vCit0d28KKy9kb25lLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZlIHR3byBmcm9tIHVudHJhY2tlZCB0byB0cmFja2VkJyAnCisJZ2l0IGFkZCB0d28gJiYKKwl0ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UKKy9kb25lLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgdmFsaWQKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgYWZ0ZXIgdGhlIG1vdmUnICcKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKK0EgIGRvbmUvb25lCitBICBvbmUKK0EgIHR3bworPz8gLmdpdGlnbm9yZQorPz8gZHR3by8KK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vYWN0dWFsICYmCisJY2F0ID4uLi90cmFjZS5leHBlY3QgPDxFT0YgJiYKK25vZGUgY3JlYXRpb246IDAKK2dpdGlnbm9yZSBpbnZhbGlkYXRpb246IDAKK2RpcmVjdG9yeSBpbnZhbGlkYXRpb246IDAKK29wZW5kaXI6IDEKK0VPRgorCXRlc3RfY21wIC4uL3RyYWNlLmV4cGVjdCAuLi90cmFjZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgdW50cmFja2VkIGNhY2hlIGR1bXAnICcKKwl0ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UgdmFsaWQKKy5naXRpZ25vcmUKK2R0d28vCisvZG9uZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIHZhbGlkCisvZHRocmVlLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAorL2R0d28vIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCit0d28KK0VPRgorCXRlc3RfY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZvciBzcGFyc2UgY2hlY2tvdXQgdGVzdGluZycgJworCWVjaG8gdHdvID5kb25lLy5naXRpZ25vcmUgJiYKKwllY2hvIHRocmVlID4+ZG9uZS8uZ2l0aWdub3JlICYmCisJZWNobyB0d28gPmRvbmUvdHdvICYmCisJZ2l0IGFkZCAtZiBkb25lL3R3byBkb25lLy5naXRpZ25vcmUgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCBjb21taXQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBhZnRlciBjb21taXQnICcKKwk6ID4uLi90cmFjZSAmJgorCUdJVF9UUkFDRV9VTlRSQUNLRURfU1RBVFM9IiRUUkFTSF9ESVJFQ1RPUlkvdHJhY2UiIFwKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKKz8/IC5naXRpZ25vcmUKKz8/IGR0d28vCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL2FjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAwCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAwCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAwCitvcGVuZGlyOiAyCitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGNhY2hlIGNvcnJlY3QgYWZ0ZXIgY29tbWl0JyAnCisJdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZSA+Li4vYWN0dWFsICYmCisJY2F0ID4uLi9leHBlY3QgPDxFT0YgJiYKK2luZm8vZXhjbHVkZSAxMzI2M2MwOTc4ZmI5ZmFkMTZiMmQ1ODBmYjgwMGI2ZDgxMWMzZmYwCitjb3JlLmV4Y2x1ZGVzZmlsZSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCitleGNsdWRlX3Blcl9kaXIgLmdpdGlnbm9yZQorZmxhZ3MgMDAwMDAwMDYKKy8gZTZmY2M4ZjJlZTMxYmFlMzIxZDY2YWZkMTgzZmNiNzIzN2FmYWU2ZSByZWN1cnNlIHZhbGlkCisuZ2l0aWdub3JlCitkdHdvLworL2RvbmUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSB2YWxpZAorL2R0aHJlZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKKy9kdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordHdvCitFT0YKKwl0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBzcGFyc2UgY2hlY2tvdXQnICcKKwllY2hvICJkb25lL1thLXpdKiIgPi5naXQvaW5mby9zcGFyc2UtY2hlY2tvdXQgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLnNwYXJzZWNoZWNrb3V0IHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWZvcmNlLXVudHJhY2tlZC1jYWNoZSAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi9kZXYvbnVsbCAmJiAjIHByaW1lIHRoZSBjYWNoZQorCXRlc3RfcGF0aF9pc19taXNzaW5nIGRvbmUvLmdpdGlnbm9yZSAmJgorCXRlc3RfcGF0aF9pc19maWxlIGRvbmUvb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZS9tb2RpZnkgZmlsZXMsIHNvbWUgb2Ygd2hpY2ggYXJlIGdpdGlnbm9yZWQnICcKKwllY2hvIHR3byBiaXMgPmRvbmUvdHdvICYmCisJZWNobyB0aHJlZSA+ZG9uZS90aHJlZSAmJiAjIHRocmVlIGlzIGdpdGlnbm9yZWQKKwllY2hvIGZvdXIgPmRvbmUvZm91ciAmJiAjIGZvdXIgaXMgZ2l0aWdub3JlZCBhdCBhIGhpZ2hlciBsZXZlbAorCWVjaG8gZml2ZSA+ZG9uZS9maXZlICYmICMgZml2ZSBpcyBub3QgZ2l0aWdub3JlZAorCWVjaG8gdGVzdCA+YmFzZSAmJiAjd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgcm9vdCBkaXIgaXMgdG91Y2hlZAorCXJtIGJhc2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBzcGFyc2Ugc3RhdHVzIHdpdGggdW50cmFja2VkIGNhY2hlJyAnCisJOiA+Li4vdHJhY2UgJiYKKwlhdm9pZF9yYWN5ICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5hY3R1YWwgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKKyBNIGRvbmUvdHdvCis/PyAuZ2l0aWdub3JlCis/PyBkb25lL2ZpdmUKKz8/IGR0d28vCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5hY3R1YWwgJiYKKwljYXQgPi4uL3RyYWNlLmV4cGVjdCA8PEVPRiAmJgorbm9kZSBjcmVhdGlvbjogMAorZ2l0aWdub3JlIGludmFsaWRhdGlvbjogMQorZGlyZWN0b3J5IGludmFsaWRhdGlvbjogMgorb3BlbmRpcjogMgorRU9GCisJdGVzdF9jbXAgLi4vdHJhY2UuZXhwZWN0IC4uL3RyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VudHJhY2tlZCBjYWNoZSBjb3JyZWN0IGFmdGVyIHN0YXR1cycgJworCXRlc3QtZHVtcC11bnRyYWNrZWQtY2FjaGUgPi4uL2FjdHVhbCAmJgorCWNhdCA+Li4vZXhwZWN0IDw8RU9GICYmCitpbmZvL2V4Y2x1ZGUgMTMyNjNjMDk3OGZiOWZhZDE2YjJkNTgwZmI4MDBiNmQ4MTFjM2ZmMAorY29yZS5leGNsdWRlc2ZpbGUgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorZXhjbHVkZV9wZXJfZGlyIC5naXRpZ25vcmUKK2ZsYWdzIDAwMDAwMDA2CisvIGU2ZmNjOGYyZWUzMWJhZTMyMWQ2NmFmZDE4M2ZjYjcyMzdhZmFlNmUgcmVjdXJzZSB2YWxpZAorLmdpdGlnbm9yZQorZHR3by8KKy9kb25lLyAxOTQ2ZjA0MzdmOTBjNTAwNTUzM2NiZTE3MzZhNjQ1MWNhMzAxNzE0IHJlY3Vyc2UgdmFsaWQKK2ZpdmUKKy9kdGhyZWUvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCisvZHR3by8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKK3R3bworRU9GCisJdGVzdF9jbXAgLi4vZXhwZWN0IC4uL2FjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHNwYXJzZSBzdGF0dXMgYWdhaW4gd2l0aCB1bnRyYWNrZWQgY2FjaGUnICcKKwlhdm9pZF9yYWN5ICYmCisJOiA+Li4vdHJhY2UgJiYKKwlHSVRfVFJBQ0VfVU5UUkFDS0VEX1NUQVRTPSIkVFJBU0hfRElSRUNUT1JZL3RyYWNlIiBcCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vc3RhdHVzLmFjdHVhbCAmJgorCWNhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorIE0gZG9uZS90d28KKz8/IC5naXRpZ25vcmUKKz8/IGRvbmUvZml2ZQorPz8gZHR3by8KK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vc3RhdHVzLmFjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAwCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAwCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAwCitvcGVuZGlyOiAwCitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZvciB0ZXN0IG9mIHN1YmRpciBhbmQgc3BhcnNlIGNoZWNrb3V0cycgJworCW1rZGlyIGRvbmUvc3ViICYmCisJbWtkaXIgZG9uZS9zdWIvc3ViICYmCisJZWNobyAic3ViIiA+IGRvbmUvc3ViL3N1Yi9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc3BhcnNlIHN0YXR1cyB3aXRoIHVudHJhY2tlZCBjYWNoZSBhbmQgc3ViZGlyJyAnCisJYXZvaWRfcmFjeSAmJgorCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5hY3R1YWwgJiYKKwljYXQgPi4uL3N0YXR1cy5leHBlY3QgPDxFT0YgJiYKKyBNIGRvbmUvdHdvCis/PyAuZ2l0aWdub3JlCis/PyBkb25lL2ZpdmUKKz8/IGRvbmUvc3ViLworPz8gZHR3by8KK0VPRgorCXRlc3RfY21wIC4uL3N0YXR1cy5leHBlY3QgLi4vc3RhdHVzLmFjdHVhbCAmJgorCWNhdCA+Li4vdHJhY2UuZXhwZWN0IDw8RU9GICYmCitub2RlIGNyZWF0aW9uOiAyCitnaXRpZ25vcmUgaW52YWxpZGF0aW9uOiAwCitkaXJlY3RvcnkgaW52YWxpZGF0aW9uOiAxCitvcGVuZGlyOiAzCitFT0YKKwl0ZXN0X2NtcCAuLi90cmFjZS5leHBlY3QgLi4vdHJhY2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHVudHJhY2tlZCBjYWNoZSBkdW1wIChzcGFyc2Uvc3ViZGlycyknICcKKwl0ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlID4uLi9hY3R1YWwgJiYKKwljYXQgPi4uL2V4cGVjdCA8PEVPRiAmJgoraW5mby9leGNsdWRlIDEzMjYzYzA5NzhmYjlmYWQxNmIyZDU4MGZiODAwYjZkODExYzNmZjAKK2NvcmUuZXhjbHVkZXNmaWxlIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKK2V4Y2x1ZGVfcGVyX2RpciAuZ2l0aWdub3JlCitmbGFncyAwMDAwMDAwNgorLyBlNmZjYzhmMmVlMzFiYWUzMjFkNjZhZmQxODNmY2I3MjM3YWZhZTZlIHJlY3Vyc2UgdmFsaWQKKy5naXRpZ25vcmUKK2R0d28vCisvZG9uZS8gMTk0NmYwNDM3ZjkwYzUwMDU1MzNjYmUxNzM2YTY0NTFjYTMwMTcxNCByZWN1cnNlIHZhbGlkCitmaXZlCitzdWIvCisvZG9uZS9zdWIvIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgcmVjdXJzZSBjaGVja19vbmx5IHZhbGlkCitzdWIvCisvZG9uZS9zdWIvc3ViLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAorZmlsZQorL2R0aHJlZS8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCByZWN1cnNlIGNoZWNrX29ubHkgdmFsaWQKKy9kdHdvLyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHJlY3Vyc2UgY2hlY2tfb25seSB2YWxpZAordHdvCitFT0YKKwl0ZXN0X2NtcCAuLi9leHBlY3QgLi4vYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc3BhcnNlIHN0YXR1cyBhZ2FpbiB3aXRoIHVudHJhY2tlZCBjYWNoZSBhbmQgc3ViZGlyJyAnCisJYXZvaWRfcmFjeSAmJgorCTogPi4uL3RyYWNlICYmCisJR0lUX1RSQUNFX1VOVFJBQ0tFRF9TVEFUUz0iJFRSQVNIX0RJUkVDVE9SWS90cmFjZSIgXAorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPi4uL3N0YXR1cy5hY3R1YWwgJiYKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5hY3R1YWwgJiYKKwljYXQgPi4uL3RyYWNlLmV4cGVjdCA8PEVPRiAmJgorbm9kZSBjcmVhdGlvbjogMAorZ2l0aWdub3JlIGludmFsaWRhdGlvbjogMAorZGlyZWN0b3J5IGludmFsaWRhdGlvbjogMAorb3BlbmRpcjogMAorRU9GCisJdGVzdF9jbXAgLi4vdHJhY2UuZXhwZWN0IC4uL3RyYWNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vdmUgZW50cnkgaW4gc3ViZGlyIGZyb20gdW50cmFja2VkIHRvIGNhY2hlZCcgJworCWdpdCBhZGQgZHR3by90d28gJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID4uLi9zdGF0dXMuYWN0dWFsICYmCisJY2F0ID4uLi9zdGF0dXMuZXhwZWN0IDw8RU9GICYmCisgTSBkb25lL3R3bworQSAgZHR3by90d28KKz8/IC5naXRpZ25vcmUKKz8/IGRvbmUvZml2ZQorPz8gZG9uZS9zdWIvCitFT0YKKwl0ZXN0X2NtcCAuLi9zdGF0dXMuZXhwZWN0IC4uL3N0YXR1cy5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW92ZSBlbnRyeSBpbiBzdWJkaXIgZnJvbSBjYWNoZWQgdG8gdW50cmFja2VkJyAnCisJZ2l0IHJtIC0tY2FjaGVkIGR0d28vdHdvICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+Li4vc3RhdHVzLmFjdHVhbCAmJgorCWNhdCA+Li4vc3RhdHVzLmV4cGVjdCA8PEVPRiAmJgorIE0gZG9uZS90d28KKz8/IC5naXRpZ25vcmUKKz8/IGRvbmUvZml2ZQorPz8gZG9uZS9zdWIvCis/PyBkdHdvLworRU9GCisJdGVzdF9jbXAgLi4vc3RhdHVzLmV4cGVjdCAuLi9zdGF0dXMuYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzEwMS1yZXNldC1lbXB0eS1zdWJkaXJzLnNoIGIvdC90NzEwMS1yZXNldC1lbXB0eS1zdWJkaXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2ZTE2M2YKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MTAxLXJlc2V0LWVtcHR5LXN1YmRpcnMuc2gKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNiBTaGF3biBQZWFyY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0IHNob3VsZCBjdWxsIGVtcHR5IHN1YmRpcnMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0aW5nIGluaXRpYWwgZmlsZXMnIFwKKyAgICAnbWtkaXIgcGF0aDAgJiYKKyAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMC9DT1BZSU5HICYmCisgICAgIGdpdCBhZGQgcGF0aDAvQ09QWUlORyAmJgorICAgICBnaXQgY29tbWl0IC1tIGFkZCAtYScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NyZWF0aW5nIHNlY29uZCBmaWxlcycgXAorICAgICdta2RpciBwYXRoMSAmJgorICAgICBta2RpciBwYXRoMS9wYXRoMiAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HIHBhdGgxL3BhdGgyL0NPUFlJTkcgJiYKKyAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvLi4vQ09QWUlORyBwYXRoMS9DT1BZSU5HICYmCisgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiLy4uL0NPUFlJTkcgQ09QWUlORyAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi8uLi9DT1BZSU5HIHBhdGgwL0NPUFlJTkctVE9PICYmCisgICAgIGdpdCBhZGQgcGF0aDEvcGF0aDIvQ09QWUlORyAmJgorICAgICBnaXQgYWRkIHBhdGgxL0NPUFlJTkcgJiYKKyAgICAgZ2l0IGFkZCBDT1BZSU5HICYmCisgICAgIGdpdCBhZGQgcGF0aDAvQ09QWUlORy1UT08gJiYKKyAgICAgZ2l0IGNvbW1pdCAtbSBjaGFuZ2UgLWEnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdyZXNldHRpbmcgdHJlZSBIRUFEXicgXAorICAgICdnaXQgcmVzZXQgLS1oYXJkIEhFQUReJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgaW5pdGlhbCBmaWxlcyBleGlzdCBhZnRlciByZXdpbmQnIFwKKyAgICAndGVzdCAtZCBwYXRoMCAmJgorICAgICB0ZXN0IC1mIHBhdGgwL0NPUFlJTkcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyBsYWNrIG9mIHBhdGgxL3BhdGgyL0NPUFlJTkcnIFwKKyAgICAnISB0ZXN0IC1mIHBhdGgxL3BhdGgyL0NPUFlJTkcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyBsYWNrIG9mIHBhdGgxL0NPUFlJTkcnIFwKKyAgICAnISB0ZXN0IC1mIHBhdGgxL0NPUFlJTkcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyBsYWNrIG9mIENPUFlJTkcnIFwKKyAgICAnISB0ZXN0IC1mIENPUFlJTkcnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja2luZyBjaGVja2luZyBsYWNrIG9mIHBhdGgxL0NPUFlJTkctVE9PJyBcCisgICAgJyEgdGVzdCAtZiBwYXRoMC9DT1BZSU5HLVRPTycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNraW5nIGxhY2sgb2YgcGF0aDEvcGF0aDInIFwKKyAgICAnISB0ZXN0IC1kIHBhdGgxL3BhdGgyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnY2hlY2tpbmcgbGFjayBvZiBwYXRoMScgXAorICAgICchIHRlc3QgLWQgcGF0aDEnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzEwMi1yZXNldC5zaCBiL3QvdDcxMDItcmVzZXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOThiY2ZlMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMDItcmVzZXQuc2gKQEAgLTAsMCArMSw1NzEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgQ2FybG9zIFJpY2EKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0CisKK0RvY3VtZW50ZWQgdGVzdHMgZm9yIGdpdCByZXNldCcKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvbW1pdF9tc2cgKCkgeworCSMgU3RyaW5nICJtb2RpZnkgMm5kIGZpbGUgKGNoYW5nZWQpIiBwYXJ0bHkgaW4gR2VybWFuCisJIyAodHJhbnNsYXRlZCB3aXRoIEdvb2dsZSBUcmFuc2xhdGUpLAorCSMgZW5jb2RlZCBpbiBVVEYtOCwgdXNlZCBhcyBhIGNvbW1pdCBsb2cgbWVzc2FnZSBiZWxvdy4KKwltc2c9Im1vZGlmeSAybmQgZmlsZSAoZ2VcMzAzXDI0NG5kZXJ0KVxuIgorCWlmIHRlc3QgLW4gIiQxIgorCXRoZW4KKwkJcHJpbnRmICIkbXNnIiB8IGljb252IC1mIHV0Zi04IC10ICIkMSIKKwllbHNlCisJCXByaW50ZiAiJG1zZyIKKwlmaQorfQorCisjIFRlc3RlZCBub24tVVRGLTggZW5jb2RpbmcKK3Rlc3RfZW5jb2Rpbmc9IklTTzg4NTktMSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgaW5pdGlhbCBmaWxlcyBhbmQgY29tbWl0cycgJworCXRlc3RfdGljayAmJgorCWVjaG8gIjFzdCBmaWxlIiA+Zmlyc3QgJiYKKwlnaXQgYWRkIGZpcnN0ICYmCisJZ2l0IGNvbW1pdCAtbSAiY3JlYXRlIDFzdCBmaWxlIiAmJgorCisJZWNobyAiMm5kIGZpbGUiID5zZWNvbmQgJiYKKwlnaXQgYWRkIHNlY29uZCAmJgorCWdpdCBjb21taXQgLW0gImNyZWF0ZSAybmQgZmlsZSIgJiYKKworCWVjaG8gIjJuZCBsaW5lIDFzdCBmaWxlIiA+PmZpcnN0ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAibW9kaWZ5IDFzdCBmaWxlIiAmJgorCisJZ2l0IHJtIGZpcnN0ICYmCisJZ2l0IG12IHNlY29uZCBzZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAicmVtb3ZlIDFzdCBhbmQgcmVuYW1lIDJuZCIgJiYKKworCWVjaG8gIjFzdCBsaW5lIDJuZCBmaWxlIiA+c2Vjb25kZmlsZSAmJgorCWVjaG8gIjJuZCBsaW5lIDJuZCBmaWxlIiA+PnNlY29uZGZpbGUgJiYKKwkjICJnaXQgY29tbWl0IC1tIiB3b3VsZCBicmVhayBNaW5HVywgYXMgV2luZG93cyByZWZ1c2UgdG8gcGFzcworCSMgJHRlc3RfZW5jb2RpbmcgZW5jb2RlZCBwYXJhbWV0ZXIgdG8gZ2l0LgorCWNvbW1pdF9tc2cgJHRlc3RfZW5jb2RpbmcgfCBnaXQgLWMgImkxOG4uY29tbWl0RW5jb2Rpbmc9JHRlc3RfZW5jb2RpbmciIGNvbW1pdCAtYSAtRiAtICYmCisJaGVhZDU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpCisnCisjIGdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSAjIHRvIHNlZSB0aG9zZSBTSEExIGludm9sdmVkCisKK2NoZWNrX2NoYW5nZXMgKCkgeworCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJDEiICYmCisJZ2l0IGRpZmYgfCB0ZXN0X2NtcCAuZGlmZl9leHBlY3QgLSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIHwgdGVzdF9jbXAgLmNhY2hlZF9leHBlY3QgLSAmJgorCWZvciBGSUxFIGluICoKKwlkbworCQllY2hvICRGSUxFJzonCisJCWNhdCAkRklMRSB8fCByZXR1cm4KKwlkb25lIHwgdGVzdF9jbXAgLmNhdF9leHBlY3QgLQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWhhcmQgbWVzc2FnZScgJworCWhleD0kKGdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoIikgJiYKKwlnaXQgcmVzZXQgLS1oYXJkID4gLmFjdHVhbCAmJgorCWVjaG8gSEVBRCBpcyBub3cgYXQgJGhleCAkKGNvbW1pdF9tc2cpID4gLmV4cGVjdGVkICYmCisJdGVzdF9jbXAgLmV4cGVjdGVkIC5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1oYXJkIG1lc3NhZ2UgKElTTzg4NTktMSBsb2dvdXRwdXRlbmNvZGluZyknICcKKwloZXg9JChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIpICYmCisJZ2l0IC1jICJpMThuLmxvZ091dHB1dEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIiByZXNldCAtLWhhcmQgPiAuYWN0dWFsICYmCisJZWNobyBIRUFEIGlzIG5vdyBhdCAkaGV4ICQoY29tbWl0X21zZyAkdGVzdF9lbmNvZGluZykgPiAuZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCAuZXhwZWN0ZWQgLmFjdHVhbAorJworCis+LmRpZmZfZXhwZWN0Cis+LmNhY2hlZF9leHBlY3QKK2NhdCA+LmNhdF9leHBlY3QgPDxFT0YKK3NlY29uZGZpbGU6Cisxc3QgbGluZSAybmQgZmlsZQorMm5kIGxpbmUgMm5kIGZpbGUKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZpbmcgYSBub24gZXhpc3RpbmcgcmV2aXNpb24gc2hvdWxkIGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgYWFhYWFhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWl4ZWQgYWFhYWFhICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tc29mdCBhYWFhYWEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1oYXJkIGFhYWFhYSAmJgorCWNoZWNrX2NoYW5nZXMgJGhlYWQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tc29mdCB3aXRoIHVubWVyZ2VkIGluZGV4IHNob3VsZCBmYWlsJyAnCisJdG91Y2ggLmdpdC9NRVJHRV9IRUFEICYmCisJZWNobyAiMTAwNjQ0IDQ0YzViNTg4NDU1MGMxNzc1ODczN2VkY2NlZDQ2MzQ0N2I5MWQ0MmIgMQl1biIgfAorCQlnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgSEVBRCAmJgorCXJtIC5naXQvTUVSR0VfSEVBRCAmJgorCWdpdCBybSAtLWNhY2hlZCAtLSB1bgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZ2l2aW5nIHBhdGhzIHdpdGggb3B0aW9ucyBkaWZmZXJlbnQgdGhhbiAtLW1peGVkIHNob3VsZCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tc29mdCAtLSBmaXJzdCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgLS0gZmlyc3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1zb2Z0IEhFQUReIC0tIGZpcnN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAtLSBmaXJzdCAmJgorCWNoZWNrX2NoYW5nZXMgJGhlYWQ1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmluZyB1bnJlY29nbml6ZWQgb3B0aW9ucyBzaG91bGQgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLW90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC1vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWl4ZWQgLS1vdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLW1peGVkIC1vICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tc29mdCAtLW90aGVyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tc29mdCAtbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgLS1vdGhlciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgLW8gJiYKKwljaGVja19jaGFuZ2VzICRoZWFkNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkndHJ5aW5nIHRvIGRvIHJlc2V0IC0tc29mdCB3aXRoIHBlbmRpbmcgbWVyZ2Ugc2hvdWxkIGZhaWwnICcKKwlnaXQgYnJhbmNoIGJyYW5jaDEgJiYKKwlnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoMSIgPj5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIGluIGJyYW5jaDEiICYmCisKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgorCWVjaG8gIjNyZCBsaW5lIGluIGJyYW5jaDIiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBpbiBicmFuY2gyIiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1zb2Z0ICYmCisKKwlwcmludGYgIjFzdCBsaW5lIDJuZCBmaWxlXG4ybmQgbGluZSAybmQgZmlsZVxuM3JkIGxpbmUiID5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAidGhlIGNoYW5nZSBpbiBicmFuY2gyIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgYnJhbmNoMSBicmFuY2gyICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RyeWluZyB0byBkbyByZXNldCAtLXNvZnQgd2l0aCBwZW5kaW5nIGNoZWNrb3V0IG1lcmdlIHNob3VsZCBmYWlsJyAnCisJZ2l0IGJyYW5jaCBicmFuY2gzICYmCisJZ2l0IGJyYW5jaCBicmFuY2g0ICYmCisKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMyAmJgorCWVjaG8gIjNyZCBsaW5lIGluIGJyYW5jaDMiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImxpbmUgaW4gYnJhbmNoMyIgJiYKKworCWdpdCBjaGVja291dCBicmFuY2g0ICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoNCIgPj5zZWNvbmRmaWxlICYmCisKKwlnaXQgY2hlY2tvdXQgLW0gYnJhbmNoMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLXNvZnQgJiYKKworCXByaW50ZiAiMXN0IGxpbmUgMm5kIGZpbGVcbjJuZCBsaW5lIDJuZCBmaWxlXG4zcmQgbGluZSIgPnNlY29uZGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0aGUgbGluZSBpbiBicmFuY2gzIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBicmFuY2ggLUQgYnJhbmNoMyBicmFuY2g0ICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3Jlc2V0dGluZyB0byBIRUFEIHdpdGggbm8gY2hhbmdlcyBzaG91bGQgc3VjY2VlZCBhbmQgZG8gbm90aGluZycgJworCWdpdCByZXNldCAtLWhhcmQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKwlnaXQgcmVzZXQgLS1zb2Z0ICYmCisJCWNoZWNrX2NoYW5nZXMgJGhlYWQ1ICYmCisJZ2l0IHJlc2V0IC0tc29mdCBIRUFEICYmCisJCWNoZWNrX2NoYW5nZXMgJGhlYWQ1ICYmCisJZ2l0IHJlc2V0IC0tbWl4ZWQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKwlnaXQgcmVzZXQgLS1taXhlZCBIRUFEICYmCisJCWNoZWNrX2NoYW5nZXMgJGhlYWQ1ICYmCisJZ2l0IHJlc2V0ICYmCisJCWNoZWNrX2NoYW5nZXMgJGhlYWQ1ICYmCisJZ2l0IHJlc2V0IEhFQUQgJiYKKwkJY2hlY2tfY2hhbmdlcyAkaGVhZDUKKycKKworPi5kaWZmX2V4cGVjdAorY2F0ID4uY2FjaGVkX2V4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL3NlY29uZGZpbGUgYi9zZWNvbmRmaWxlCitpbmRleCAxYmJiYTc5Li40NGM1YjU4IDEwMDY0NAorLS0tIGEvc2Vjb25kZmlsZQorKysrIGIvc2Vjb25kZmlsZQorQEAgLTEgKzEsMiBAQAorLTJuZCBmaWxlCisrMXN0IGxpbmUgMm5kIGZpbGUKKysybmQgbGluZSAybmQgZmlsZQorRU9GCitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc29mdCByZXNldCBvbmx5IHNob3VsZCBzaG93IGNoYW5nZXMgaW4gZGlmZiAtLWNhY2hlZCcgJworCWdpdCByZXNldCAtLXNvZnQgSEVBRF4gJiYKKwljaGVja19jaGFuZ2VzIGQxYTRiYzNhYmNlNDgyOTYyOGFlMmRjYjBkNjBlZjNkMWE3OGIxYzQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgT1JJR19IRUFEKSIgPSBcCisJCQkkaGVhZDUKKycKKworPi5kaWZmX2V4cGVjdAorPi5jYWNoZWRfZXhwZWN0CitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCiszcmQgbGluZSAybmQgZmlsZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2hhbmdpbmcgZmlsZXMgYW5kIHJlZG8gdGhlIGxhc3QgY29tbWl0IHNob3VsZCBzdWNjZWVkJyAnCisJZWNobyAiM3JkIGxpbmUgMm5kIGZpbGUiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLUMgT1JJR19IRUFEICYmCisJaGVhZDQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDQgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgT1JJR19IRUFEKSIgPSBcCisJCQkkaGVhZDUKKycKKworPi5kaWZmX2V4cGVjdAorPi5jYWNoZWRfZXhwZWN0CitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitmaXJzdDoKKzFzdCBmaWxlCisybmQgbGluZSAxc3QgZmlsZQorc2Vjb25kOgorMm5kIGZpbGUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy0taGFyZCByZXNldCBzaG91bGQgY2hhbmdlIHRoZSBmaWxlcyBhbmQgdW5kbyBjb21taXRzIHBlcm1hbmVudGx5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjIgJiYKKwljaGVja19jaGFuZ2VzIGRkYWVmZTAwZjFkYTE2ODY0NTkxYzYxZmRjN2FkYjVkN2NkNmI3NGUgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgT1JJR19IRUFEKSIgPSBcCisJCQkkaGVhZDQKKycKKworPi5kaWZmX2V4cGVjdAorY2F0ID4uY2FjaGVkX2V4cGVjdCA8PEVPRgorZGlmZiAtLWdpdCBhL2ZpcnN0IGIvZmlyc3QKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggODIwNmMyMi4uMDAwMDAwMAorLS0tIGEvZmlyc3QKKysrKyAvZGV2L251bGwKK0BAIC0xLDIgKzAsMCBAQAorLTFzdCBmaWxlCistMm5kIGxpbmUgMXN0IGZpbGUKK2RpZmYgLS1naXQgYS9zZWNvbmQgYi9zZWNvbmQKK2RlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMWJiYmE3OS4uMDAwMDAwMAorLS0tIGEvc2Vjb25kCisrKysgL2Rldi9udWxsCitAQCAtMSArMCwwIEBACistMm5kIGZpbGUKK2RpZmYgLS1naXQgYS9zZWNvbmRmaWxlIGIvc2Vjb25kZmlsZQorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAuLjQ0YzViNTgKKy0tLSAvZGV2L251bGwKKysrKyBiL3NlY29uZGZpbGUKK0BAIC0wLDAgKzEsMiBAQAorKzFzdCBsaW5lIDJuZCBmaWxlCisrMm5kIGxpbmUgMm5kIGZpbGUKK0VPRgorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncmVkb2luZyBjaGFuZ2VzIGFkZGluZyB0aGVtIHdpdGhvdXQgY29tbWl0IHRoZW0gc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgcm0gZmlyc3QgJiYKKwlnaXQgbXYgc2Vjb25kIHNlY29uZGZpbGUgJiYKKworCWVjaG8gIjFzdCBsaW5lIDJuZCBmaWxlIiA+c2Vjb25kZmlsZSAmJgorCWVjaG8gIjJuZCBsaW5lIDJuZCBmaWxlIiA+PnNlY29uZGZpbGUgJiYKKwlnaXQgYWRkIHNlY29uZGZpbGUgJiYKKwljaGVja19jaGFuZ2VzIGRkYWVmZTAwZjFkYTE2ODY0NTkxYzYxZmRjN2FkYjVkN2NkNmI3NGUKKycKKworY2F0ID4uZGlmZl9leHBlY3QgPDxFT0YKK2RpZmYgLS1naXQgYS9maXJzdCBiL2ZpcnN0CitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDgyMDZjMjIuLjAwMDAwMDAKKy0tLSBhL2ZpcnN0CisrKysgL2Rldi9udWxsCitAQCAtMSwyICswLDAgQEAKKy0xc3QgZmlsZQorLTJuZCBsaW5lIDFzdCBmaWxlCitkaWZmIC0tZ2l0IGEvc2Vjb25kIGIvc2Vjb25kCitkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDFiYmJhNzkuLjAwMDAwMDAKKy0tLSBhL3NlY29uZAorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLTJuZCBmaWxlCitFT0YKKz4uY2FjaGVkX2V4cGVjdAorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1peGVkIHJlc2V0IHRvIEhFQUQgc2hvdWxkIHVuYWRkIHRoZSBmaWxlcycgJworCWdpdCByZXNldCAmJgorCWNoZWNrX2NoYW5nZXMgZGRhZWZlMDBmMWRhMTY4NjQ1OTFjNjFmZGM3YWRiNWQ3Y2Q2Yjc0ZSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBPUklHX0hFQUQpIiA9IFwKKwkJCWRkYWVmZTAwZjFkYTE2ODY0NTkxYzYxZmRjN2FkYjVkN2NkNmI3NGUKKycKKworPi5kaWZmX2V4cGVjdAorPi5jYWNoZWRfZXhwZWN0CitjYXQgPi5jYXRfZXhwZWN0IDw8RU9GCitzZWNvbmRmaWxlOgorMXN0IGxpbmUgMm5kIGZpbGUKKzJuZCBsaW5lIDJuZCBmaWxlCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZG9pbmcgdGhlIGxhc3QgdHdvIGNvbW1pdHMgc2hvdWxkIHN1Y2NlZWQnICcKKwlnaXQgYWRkIHNlY29uZGZpbGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGRkYWVmZTAwZjFkYTE2ODY0NTkxYzYxZmRjN2FkYjVkN2NkNmI3NGUgJiYKKworCWdpdCBybSBmaXJzdCAmJgorCWdpdCBtdiBzZWNvbmQgc2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gInJlbW92ZSAxc3QgYW5kIHJlbmFtZSAybmQiICYmCisKKwllY2hvICIxc3QgbGluZSAybmQgZmlsZSIgPnNlY29uZGZpbGUgJiYKKwllY2hvICIybmQgbGluZSAybmQgZmlsZSIgPj5zZWNvbmRmaWxlICYmCisJIyAiZ2l0IGNvbW1pdCAtbSIgd291bGQgYnJlYWsgTWluR1csIGFzIFdpbmRvd3MgcmVmdXNlIHRvIHBhc3MKKwkjICR0ZXN0X2VuY29kaW5nIGVuY29kZWQgcGFyYW1ldGVyIHRvIGdpdC4KKwljb21taXRfbXNnICR0ZXN0X2VuY29kaW5nIHwgZ2l0IC1jICJpMThuLmNvbW1pdEVuY29kaW5nPSR0ZXN0X2VuY29kaW5nIiBjb21taXQgLWEgLUYgLSAmJgorCWNoZWNrX2NoYW5nZXMgJGhlYWQ1CisnCisKKz4uZGlmZl9leHBlY3QKKz4uY2FjaGVkX2V4cGVjdAorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorM3JkIGxpbmUgaW4gYnJhbmNoMgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWhhcmQgcmVzZXQgdG8gSEVBRCBzaG91bGQgY2xlYXIgYSBmYWlsZWQgbWVyZ2UnICcKKwlnaXQgYnJhbmNoIGJyYW5jaDEgJiYKKwlnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKworCWdpdCBjaGVja291dCBicmFuY2gxICYmCisJZWNobyAiM3JkIGxpbmUgaW4gYnJhbmNoMSIgPj5zZWNvbmRmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY2hhbmdlIGluIGJyYW5jaDEiICYmCisKKwlnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgorCWVjaG8gIjNyZCBsaW5lIGluIGJyYW5jaDIiID4+c2Vjb25kZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBpbiBicmFuY2gyIiAmJgorCWhlYWQzPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHB1bGwgLiBicmFuY2gxICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWNoZWNrX2NoYW5nZXMgJGhlYWQzCisnCisKKz4uZGlmZl9leHBlY3QKKz4uY2FjaGVkX2V4cGVjdAorY2F0ID4uY2F0X2V4cGVjdCA8PEVPRgorc2Vjb25kZmlsZToKKzFzdCBsaW5lIDJuZCBmaWxlCisybmQgbGluZSAybmQgZmlsZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLS1oYXJkIHJlc2V0IHRvIE9SSUdfSEVBRCBzaG91bGQgY2xlYXIgYSBmYXN0LWZvcndhcmQgbWVyZ2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKworCWdpdCBwdWxsIC4gYnJhbmNoMSAmJgorCWdpdCByZXNldCAtLWhhcmQgT1JJR19IRUFEICYmCisJY2hlY2tfY2hhbmdlcyAkaGVhZDUgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1EIGJyYW5jaDEgYnJhbmNoMiAmJgorCWNoZWNrX2NoYW5nZXMgJGhlYWQ1CisnCisKK2NhdCA+IGV4cGVjdCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlMSBiL2ZpbGUxCitpbmRleCBkMDA0OTFmLi43ZWQ2ZmY4IDEwMDY0NAorLS0tIGEvZmlsZTEKKysrKyBiL2ZpbGUxCitAQCAtMSArMSBAQAorLTEKKys1CitkaWZmIC0tZ2l0IGEvZmlsZTIgYi9maWxlMgorZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwY2ZiZjA4Li4wMDAwMDAwCistLS0gYS9maWxlMgorKysrIC9kZXYvbnVsbAorQEAgLTEgKzAsMCBAQAorLTIKK0VPRgorY2F0ID4gY2FjaGVkX2V4cGVjdCA8PCBFT0YKK2RpZmYgLS1naXQgYS9maWxlNCBiL2ZpbGU0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uYjg2MjZjNAorLS0tIC9kZXYvbnVsbAorKysrIGIvZmlsZTQKK0BAIC0wLDAgKzEgQEAKKys0CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgLS1taXhlZCA8cGF0aHM+JyAnCisJZWNobyAxID4gZmlsZTEgJiYKKwllY2hvIDIgPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTEgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGZpbGVzICYmCisJZ2l0IHJtIGZpbGUyICYmCisJZWNobyAzID4gZmlsZTMgJiYKKwllY2hvIDQgPiBmaWxlNCAmJgorCWVjaG8gNSA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSBmaWxlMyBmaWxlNCAmJgorCWdpdCByZXNldCBIRUFEIC0tIGZpbGUxIGZpbGUyIGZpbGUzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYgLS1xdWlldCAmJgorCWdpdCBkaWZmID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tY2FjaGVkID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgb3V0cHV0IGNhY2hlZF9leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCByZXNldHRpbmcgdGhlIGluZGV4IGF0IGdpdmUgcGF0aHMnICcKKworCW1rZGlyIHN1YiAmJgorCT5zdWIvZmlsZTEgJiYKKwk+c3ViL2ZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBzdWIvZmlsZTEgc3ViL2ZpbGUyICYmCisJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCWdpdCByZXNldCBIRUFEIHN1Yi9maWxlMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwlVPSQoZ2l0IHdyaXRlLXRyZWUpICYmCisJZWNobyAiJFQiICYmCisJZWNobyAiJFUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1leGl0LWNvZGUgIiRUIiAmJgorCXRlc3QgIiRUIiAhPSAiJFUiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXR0aW5nIGFuIHVubW9kaWZpZWQgcGF0aCBpcyBhIG5vLW9wJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCByZXNldCAtLSBmaWxlMSAmJgorCWdpdCBkaWZmLWZpbGVzIC0tZXhpdC1jb2RlICYmCisJZ2l0IGRpZmYtaW5kZXggLS1jYWNoZWQgLS1leGl0LWNvZGUgSEVBRAorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCitVbnN0YWdlZCBjaGFuZ2VzIGFmdGVyIHJlc2V0OgorTQlmaWxlMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbWl4ZWQgcmVmcmVzaGVzIHRoZSBpbmRleCcgJworCWVjaG8gMTIzID4+IGZpbGUyICYmCisJZ2l0IHJlc2V0IC0tbWl4ZWQgSEVBRCA+IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0dGluZyBzcGVjaWZpYyBwYXRoIHRoYXQgaXMgdW5tZXJnZWQnICcKKwlnaXQgcm0gLS1jYWNoZWQgZmlsZTIgJiYKKwlGMT0kKGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlMSkgJiYKKwlGMj0kKGdpdCByZXYtcGFyc2UgSEVBRDpmaWxlMikgJiYKKwlGMz0kKGdpdCByZXYtcGFyc2UgSEVBRDpzZWNvbmRmaWxlKSAmJgorCXsKKwkJZWNobyAiMTAwNjQ0ICRGMSAxCWZpbGUyIiAmJgorCQllY2hvICIxMDA2NDQgJEYyIDIJZmlsZTIiICYmCisJCWVjaG8gIjEwMDY0NCAkRjMgMwlmaWxlMiIKKwl9IHwgZ2l0IHVwZGF0ZS1pbmRleCAtLWluZGV4LWluZm8gJiYKKwlnaXQgbHMtZmlsZXMgLXUgJiYKKwlnaXQgcmVzZXQgSEVBRCBmaWxlMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwlnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSAtLWNhY2hlZCBIRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0aW9uICgxKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJZ2l0IHJlc2V0IHNlY29uZGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0IC0tIHNlY29uZGZpbGUgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5KSIgJiYKKwl0ZXN0IC1mIHNlY29uZGZpbGUgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgc2Vjb25kZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0aW9uICgyKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJcm0gLWYgc2Vjb25kZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCBzZWNvbmRmaWxlICYmCisJdGVzdCAtbiAiJChnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSAtLSBzZWNvbmRmaWxlKSIgJiYKKwl0ZXN0ICEgLWYgc2Vjb25kZmlsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rpc2FtYmlndWF0aW9uICgzKScgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCT5zZWNvbmRmaWxlICYmCisJZ2l0IGFkZCBzZWNvbmRmaWxlICYmCisJcm0gLWYgc2Vjb25kZmlsZSAmJgorCWdpdCByZXNldCBIRUFEIHNlY29uZGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXF1aWV0ICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSkiICYmCisJdGVzdCAhIC1mIHNlY29uZGZpbGUKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhbWJpZ3VhdGlvbiAoNCknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwk+c2Vjb25kZmlsZSAmJgorCWdpdCBhZGQgc2Vjb25kZmlsZSAmJgorCXJtIC1mIHNlY29uZGZpbGUgJiYKKwlnaXQgcmVzZXQgLS0gc2Vjb25kZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmIC0tcXVpZXQgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5KSIgJiYKKwl0ZXN0ICEgLWYgc2Vjb25kZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCB3aXRoIHBhdGhzIGFjY2VwdHMgdHJlZScgJworCSMgZm9yIHNpbXBsZXIgdGVzdHMsIGRyb3AgbGFzdCBjb21taXQgY29udGFpbmluZyBhZGRlZCBmaWxlcworCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwlnaXQgcmVzZXQgSEVBRF5ee3RyZWV9IC0tIC4gJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCBIRUFEXiAtLWV4aXQtY29kZSAmJgorCWdpdCBkaWZmIEhFQUQgLS1leGl0LWNvZGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLU4ga2VlcHMgcmVtb3ZlZCBmaWxlcyBhcyBpbnRlbnQtdG8tYWRkJyAnCisJZWNobyBuZXctZmlsZSA+bmV3LWZpbGUgJiYKKwlnaXQgYWRkIG5ldy1maWxlICYmCisJZ2l0IHJlc2V0IC1OIEhFQUQgJiYKKworCXRyZWU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwlnaXQgbHMtdHJlZSAkdHJlZSBuZXctZmlsZSA+YWN0dWFsICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWdpdCBkaWZmIC0tbmFtZS1vbmx5ID5hY3R1YWwgJiYKKwllY2hvIG5ldy1maWxlID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tbWl4ZWQgc2V0cyB1cCB3b3JrIHRyZWUnICcKKwlnaXQgaW5pdCBtaXhlZF93b3JrdHJlZSAmJgorCSgKKwkJY2QgbWl4ZWRfd29ya3RyZWUgJiYKKwkJdGVzdF9jb21taXQgZHVtbXkKKwkpICYmCisJOiA+ZXhwZWN0ICYmCisJZ2l0IC0tZ2l0LWRpcj1taXhlZF93b3JrdHJlZS8uZ2l0IC0td29yay10cmVlPW1peGVkX3dvcmt0cmVlIHJlc2V0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzEwMy1yZXNldC1iYXJlLnNoIGIvdC90NzEwMy1yZXNldC1iYXJlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFlZWY5M2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3MTAzLXJlc2V0LWJhcmUuc2gKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXNldCBpbiBhIGJhcmUgcmVwb3NpdG9yeScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBub24tYmFyZScgJworCWVjaG8gb25lID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwllY2hvIHR3byA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gdHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJoYXJkIiByZXNldCByZXF1aXJlcyBhIHdvcmt0cmVlJyAnCisJKGNkIC5naXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0taGFyZCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIm1lcmdlIiByZXNldCByZXF1aXJlcyBhIHdvcmt0cmVlJyAnCisJKGNkIC5naXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWVyZ2UpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJrZWVwIiByZXNldCByZXF1aXJlcyBhIHdvcmt0cmVlJyAnCisJKGNkIC5naXQgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0ta2VlcCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIm1peGVkIiByZXNldCBpcyBvaycgJworCShjZCAuZ2l0ICYmIGdpdCByZXNldCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInNvZnQiIHJlc2V0IGlzIG9rJyAnCisJKGNkIC5naXQgJiYgZ2l0IHJlc2V0IC0tc29mdCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaGFyZCByZXNldCB3b3JrcyB3aXRoIEdJVF9XT1JLX1RSRUUnICcKKwlta2RpciB3b3JrdHJlZSAmJgorCUdJVF9XT1JLX1RSRUU9JFBXRC93b3JrdHJlZSBHSVRfRElSPSRQV0QvLmdpdCBnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9jbXAgZmlsZSB3b3JrdHJlZS9maWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGJhcmUnICcKKwlnaXQgY2xvbmUgLS1iYXJlIC4gYmFyZS5naXQgJiYKKwljZCBiYXJlLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciaGFyZCIgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYmFyZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWhhcmQgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnIm1lcmdlIiByZXNldCBpcyBub3QgYWxsb3dlZCBpbiBiYXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRF4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImtlZXAiIHJlc2V0IGlzIG5vdCBhbGxvd2VkIGluIGJhcmUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1rZWVwIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJtaXhlZCIgcmVzZXQgaXMgbm90IGFsbG93ZWQgaW4gYmFyZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLW1peGVkIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzb2Z0IiByZXNldCBpcyBhbGxvd2VkIGluIGJhcmUnICcKKwlnaXQgcmVzZXQgLS1zb2Z0IEhFQUReICYmCisJdGVzdCAiYGdpdCBzaG93IC0tcHJldHR5PWZvcm1hdDolcyB8IGhlYWQgLW4gMWAiID0gIm9uZSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTA0LXJlc2V0LWhhcmQuc2ggYi90L3Q3MTA0LXJlc2V0LWhhcmQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTZmYWEwNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMDQtcmVzZXQtaGFyZC5zaApAQCAtMCwwICsxLDQ2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ncmVzZXQgLS1oYXJkIHVubWVyZ2VkJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwlta2RpciBiZWZvcmUgbGF0ZXIgJiYKKwk+YmVmb3JlLzEgJiYKKwk+YmVmb3JlLzIgJiYKKwk+aGVsbG8gJiYKKwk+bGF0ZXIvMyAmJgorCWdpdCBhZGQgYmVmb3JlIGhlbGxvIGxhdGVyICYmCisJZ2l0IGNvbW1pdCAtbSB3b3JsZCAmJgorCisJSD0kKGdpdCByZXYtcGFyc2UgOmhlbGxvKSAmJgorCWdpdCBybSAtLWNhY2hlZCBoZWxsbyAmJgorCWVjaG8gIjEwMDY0NCAkSCAyCWhlbGxvIiB8IGdpdCB1cGRhdGUtaW5kZXggLS1pbmRleC1pbmZvICYmCisKKwlybSAtZiBoZWxsbyAmJgorCW1rZGlyIC1wIGhlbGxvICYmCisJPmhlbGxvL3dvcmxkICYmCisJdGVzdCAiJChnaXQgbHMtZmlsZXMgLW8pIiA9IGhlbGxvL3dvcmxkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1oYXJkIHNob3VsZCByZXN0b3JlIHVubWVyZ2VkIG9uZXMnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgbHMtZmlsZXMgLS1lcnJvci11bm1hdGNoIGJlZm9yZS8xIGJlZm9yZS8yIGhlbGxvIGxhdGVyLzMgJiYKKwl0ZXN0IC1mIGhlbGxvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1oYXJkIGRpZCBub3QgY29ycnVwdCBpbmRleCBvciBjYWNoZWQtdHJlZScgJworCisJVD0kKGdpdCB3cml0ZS10cmVlKSAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGJlZm9yZSBoZWxsbyBsYXRlciAmJgorCVU9JChnaXQgd3JpdGUtdHJlZSkgJiYKKwl0ZXN0ICIkVCIgPSAiJFUiCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTA1LXJlc2V0LXBhdGNoLnNoIGIvdC90NzEwNS1yZXNldC1wYXRjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45OGI3ZDdiCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzEwNS1yZXNldC1wYXRjaC5zaApAQCAtMCwwICsxLDcxIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0IC0tcGF0Y2gnCisuIC4vbGliLXBhdGNoLW1vZGUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCcgJworCW1rZGlyIGRpciAmJgorCWVjaG8gcGFyZW50ID4gZGlyL2ZvbyAmJgorCWVjaG8gZHVtbXkgPiBiYXIgJiYKKwlnaXQgYWRkIGRpciAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfY29tbWl0IHNlY29uZCBkaXIvZm9vIGhlYWQgJiYKKwlzZXRfYW5kX3NhdmVfc3RhdGUgYmFyIGJhcl93b3JrIGJhcl9pbmRleCAmJgorCXNhdmVfaGVhZAorJworCisjIG5vdGU6IGJhciBzb3J0cyBiZWZvcmUgZm9vLCBzbyB0aGUgZmlyc3QgJ24nIGlzIGFsd2F5cyB0byBza2lwICdiYXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2F5aW5nICJuIiBkb2VzIG5vdGhpbmcnICcKKwlzZXRfYW5kX3NhdmVfc3RhdGUgZGlyL2ZvbyB3b3JrIHdvcmsgJiYKKwkoZWNobyBuOyBlY2hvIG4pIHwgZ2l0IHJlc2V0IC1wICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGRpci9mb28gJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wJyAnCisJKGVjaG8gbjsgZWNobyB5KSB8IGdpdCByZXNldCAtcCA+b3V0cHV0ICYmCisJdmVyaWZ5X3N0YXRlIGRpci9mb28gd29yayBoZWFkICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXRlc3RfaTE4bmdyZXAgIlVuc3RhZ2UiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2dpdCByZXNldCAtcCBIRUFEXicgJworCShlY2hvIG47IGVjaG8geSkgfCBnaXQgcmVzZXQgLXAgSEVBRF4gPm91dHB1dCAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgcGFyZW50ICYmCisJdmVyaWZ5X3NhdmVkX3N0YXRlIGJhciAmJgorCXRlc3RfaTE4bmdyZXAgIkFwcGx5IiBvdXRwdXQKKycKKworIyBUaGUgaWRlYSBpbiB0aGUgcmVzdCBpcyB0aGF0IGJhciBzb3J0cyBmaXJzdCwgc28gd2UgYWx3YXlzIHNheSAneScKKyMgZmlyc3QgYW5kIGlmIHRoZSBwYXRoIGxpbWl0ZXIgZmFpbHMgaXQnbGwgYXBwbHkgdG8gYmFyIGluc3RlYWQgb2YKKyMgZGlyL2Zvby4gIFRoZXJlJ3MgYWx3YXlzIGFuIGV4dHJhICduJyB0byByZWplY3QgZWRpdHMgdG8gZGlyL2ZvbyBpbgorIyB0aGUgZmFpbHVyZSBjYXNlIChhbmQgdGh1cyBnZXQgb3V0IG9mIHRoZSBsb29wKS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgZGlyJyAnCisJc2V0X3N0YXRlIGRpci9mb28gd29yayB3b3JrICYmCisJKGVjaG8geTsgZWNobyBuKSB8IGdpdCByZXNldCAtcCBkaXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIGhlYWQgJiYKKwl2ZXJpZnlfc2F2ZWRfc3RhdGUgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZ2l0IHJlc2V0IC1wIC0tIGZvbyAoaW5zaWRlIGRpciknICcKKwlzZXRfc3RhdGUgZGlyL2ZvbyB3b3JrIHdvcmsgJiYKKwkoZWNobyB5OyBlY2hvIG4pIHwgKGNkIGRpciAmJiBnaXQgcmVzZXQgLXAgLS0gZm9vKSAmJgorCXZlcmlmeV9zdGF0ZSBkaXIvZm9vIHdvcmsgaGVhZCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdnaXQgcmVzZXQgLXAgSEVBRF4gLS0gZGlyJyAnCisJKGVjaG8geTsgZWNobyBuKSB8IGdpdCByZXNldCAtcCBIRUFEXiAtLSBkaXIgJiYKKwl2ZXJpZnlfc3RhdGUgZGlyL2ZvbyB3b3JrIHBhcmVudCAmJgorCXZlcmlmeV9zYXZlZF9zdGF0ZSBiYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdub25lIG9mIHRoaXMgbW92ZWQgSEVBRCcgJworCXZlcmlmeV9zYXZlZF9oZWFkCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MTA2LXJlc2V0LXVuYm9ybi1icmFuY2guc2ggYi90L3Q3MTA2LXJlc2V0LXVuYm9ybi1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGY5NWYwMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMDYtcmVzZXQtdW5ib3JuLWJyYW5jaC5zaApAQCAtMCwwICsxLDcwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlc2V0IHNob3VsZCB3b3JrIG9uIHVuYm9ybiBicmFuY2gnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIGEgPmEgJiYKKwllY2hvIGIgPmIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQnICcKKwlnaXQgYWRkIGEgYiAmJgorCWdpdCByZXNldCAmJgorCisJPmV4cGVjdCAmJgorCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCBIRUFEJyAnCisJcm0gLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSBiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IEhFQUQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgJGZpbGUnICcKKwlybSAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhIGIgJiYKKwlnaXQgcmVzZXQgYSAmJgorCisJZWNobyBiID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdyZXNldCAtcCcgJworCXJtIC5naXQvaW5kZXggJiYKKwlnaXQgYWRkIGEgJiYKKwllY2hvIHkgPnllcyAmJgorCWdpdCByZXNldCAtcCA8eWVzID5vdXRwdXQgJiYKKworCT5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICJVbnN0YWdlIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1zb2Z0IGlzIGEgbm8tb3AnICcKKwlybSAuZ2l0L2luZGV4ICYmCisJZ2l0IGFkZCBhICYmCisJZ2l0IHJlc2V0IC0tc29mdCAmJgorCisJZWNobyBhID5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1oYXJkJyAnCisJcm0gLmdpdC9pbmRleCAmJgorCWdpdCBhZGQgYSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZWNobyBhID5hIiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKworCT5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzExMC1yZXNldC1tZXJnZS5zaCBiL3QvdDcxMTAtcmVzZXQtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTgyYTA3YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMTAtcmVzZXQtbWVyZ2Uuc2gKQEAgLTAsMCArMSwyOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgQ2hyaXN0aWFuIENvdWRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyBmb3IgImdpdCByZXNldCIgd2l0aCAiLS1tZXJnZSIgYW5kICItLWtlZXAiIG9wdGlvbnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKyAgICBmb3IgaSBpbiAxIDIgMzsgZG8gZWNobyBsaW5lICRpOyBkb25lID5maWxlMSAmJgorICAgIGNhdCBmaWxlMSA+ZmlsZTIgJiYKKyAgICBnaXQgYWRkIGZpbGUxIGZpbGUyICYmCisgICAgdGVzdF90aWNrICYmCisgICAgZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisgICAgZ2l0IHRhZyBpbml0aWFsICYmCisgICAgZWNobyBsaW5lIDQgPj5maWxlMSAmJgorICAgIGNhdCBmaWxlMSA+ZmlsZTIgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1tICJhZGQgbGluZSA0IHRvIGZpbGUxIiBmaWxlMSAmJgorICAgIGdpdCB0YWcgc2Vjb25kCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBDICAgICAgIEMgICAgIEMgICAgRCAgICAgLS1tZXJnZSAgRCAgICAgICBEICAgICBECisjIGZpbGUyOiAgICAgQyAgICAgICBEICAgICBEICAgIEQgICAgIC0tbWVyZ2UgIEMgICAgICAgRCAgICAgRAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBpcyBvayB3aXRoIGNoYW5nZXMgaW4gZmlsZSBpdCBkb2VzIG5vdCB0b3VjaCcgJworICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUReICYmCisgICAgISBncmVwIDQgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBpbml0aWFsKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBpcyBvayB3aGVuIHN3aXRjaGluZyBiYWNrJyAnCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2Ugc2Vjb25kICYmCisgICAgZ3JlcCA0IGZpbGUxICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEMgICAgICAgQyAgICAgQyAgICBEICAgICAtLWtlZXAgICBEICAgICAgIEQgICAgIEQKKyMgZmlsZTI6ICAgICBDICAgICAgIEQgICAgIEQgICAgRCAgICAgLS1rZWVwICAgQyAgICAgICBEICAgICBECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWtlZXAgaXMgb2sgd2l0aCBjaGFuZ2VzIGluIGZpbGUgaXQgZG9lcyBub3QgdG91Y2gnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIHNlY29uZCAmJgorICAgIGNhdCBmaWxlMSA+ZmlsZTIgJiYKKyAgICBnaXQgcmVzZXQgLS1rZWVwIEhFQUReICYmCisgICAgISBncmVwIDQgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBpbml0aWFsKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1rZWVwIGlzIG9rIHdoZW4gc3dpdGNoaW5nIGJhY2snICcKKyAgICBnaXQgcmVzZXQgLS1rZWVwIHNlY29uZCAmJgorICAgIGdyZXAgNCBmaWxlMSAmJgorICAgIGdyZXAgNCBmaWxlMiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBCICAgICAgIEIgICAgIEMgICAgRCAgICAgLS1tZXJnZSAgRCAgICAgICBEICAgICBECisjIGZpbGUyOiAgICAgQyAgICAgICBEICAgICBEICAgIEQgICAgIC0tbWVyZ2UgIEMgICAgICAgRCAgICAgRAordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBkaXNjYXJkcyBjaGFuZ2VzIGFkZGVkIHRvIGluZGV4ICgxKScgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgY2F0IGZpbGUxID5maWxlMiAmJgorICAgIGVjaG8gImxpbmUgNSIgPj4gZmlsZTEgJiYKKyAgICBnaXQgYWRkIGZpbGUxICYmCisgICAgZ2l0IHJlc2V0IC0tbWVyZ2UgSEVBRF4gJiYKKyAgICAhIGdyZXAgNCBmaWxlMSAmJgorICAgICEgZ3JlcCA1IGZpbGUxICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgaW5pdGlhbCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0tbWVyZ2UgaXMgb2sgYWdhaW4gd2hlbiBzd2l0Y2hpbmcgYmFjayAoMSknICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwgJiYKKyAgICBlY2hvICJsaW5lIDUiID4+IGZpbGUyICYmCisgICAgZ2l0IGFkZCBmaWxlMiAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIHNlY29uZCAmJgorICAgICEgZ3JlcCA0IGZpbGUyICYmCisgICAgISBncmVwIDUgZmlsZTEgJiYKKyAgICBncmVwIDQgZmlsZTEgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBzZWNvbmQpIiAmJgorICAgIHRlc3QgLXogIiQoZ2l0IGRpZmYgLS1jYWNoZWQpIgorJworCisjIFRoZSBuZXh0IHRlc3Qgd2lsbCB0ZXN0IHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQgdGFyZ2V0ICAgICAgICAgd29ya2luZyBpbmRleCBIRUFECisjICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbGUxOiAgICAgQiAgICAgICBCICAgICBDICAgIEQgICAgIC0ta2VlcCAgIChkaXNhbGxvd2VkKQordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1rZWVwIGZhaWxzIHdpdGggY2hhbmdlcyBpbiBpbmRleCBpbiBmaWxlcyBpdCB0b3VjaGVzJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKyAgICBlY2hvICJsaW5lIDUiID4+IGZpbGUxICYmCisgICAgZ2l0IGFkZCBmaWxlMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRF4KKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEMgICAgICAgQyAgICAgQyAgICBEICAgICAtLW1lcmdlICBEICAgICAgIEQgICAgIEQKKyMgZmlsZTI6ICAgICBDICAgICAgIEMgICAgIEQgICAgRCAgICAgLS1tZXJnZSAgRCAgICAgICBEICAgICBECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1lcmdlIGRpc2NhcmRzIGNoYW5nZXMgYWRkZWQgdG8gaW5kZXggKDIpJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCBzZWNvbmQgJiYKKyAgICBlY2hvICJsaW5lIDQiID4+IGZpbGUyICYmCisgICAgZ2l0IGFkZCBmaWxlMiAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUReICYmCisgICAgISBncmVwIDQgZmlsZTIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBpbml0aWFsKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgLS1tZXJnZSBpcyBvayBhZ2FpbiB3aGVuIHN3aXRjaGluZyBiYWNrICgyKScgJworICAgIGdpdCByZXNldCAtLWhhcmQgaW5pdGlhbCAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIHNlY29uZCAmJgorICAgICEgZ3JlcCA0IGZpbGUyICYmCisgICAgZ3JlcCA0IGZpbGUxICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIEMgICAgICAgQyAgICAgQyAgICBEICAgICAtLWtlZXAgICBEICAgICAgIEQgICAgIEQKKyMgZmlsZTI6ICAgICBDICAgICAgIEMgICAgIEQgICAgRCAgICAgLS1rZWVwICAgQyAgICAgICBEICAgICBECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWtlZXAga2VlcHMgY2hhbmdlcyBpdCBkb2VzIG5vdCB0b3VjaCcgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgZWNobyAibGluZSA0IiA+PiBmaWxlMiAmJgorICAgIGdpdCBhZGQgZmlsZTIgJiYKKyAgICBnaXQgcmVzZXQgLS1rZWVwIEhFQUReICYmCisgICAgZ3JlcCA0IGZpbGUyICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgaW5pdGlhbCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IC0ta2VlcCBrZWVwcyBjaGFuZ2VzIHdoZW4gc3dpdGNoaW5nIGJhY2snICcKKyAgICBnaXQgcmVzZXQgLS1rZWVwIHNlY29uZCAmJgorICAgIGdyZXAgNCBmaWxlMiAmJgorICAgIGdyZXAgNCBmaWxlMSAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHNlY29uZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBBICAgICAgIEIgICAgIEIgICAgQyAgICAgLS1tZXJnZSAgKGRpc2FsbG93ZWQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLW1lcmdlIGZhaWxzIHdpdGggY2hhbmdlcyBpbiBmaWxlIGl0IHRvdWNoZXMnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIHNlY29uZCAmJgorICAgIGVjaG8gImxpbmUgNSIgPj4gZmlsZTEgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1tICJhZGQgbGluZSA1IiBmaWxlMSAmJgorICAgIHNlZCAtZSAicy9saW5lIDEvY2hhbmdlZCBsaW5lIDEvIiA8ZmlsZTEgPmZpbGUzICYmCisgICAgbXYgZmlsZTMgZmlsZTEgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS1tZXJnZSBIRUFEXiAyPmVyci5sb2cgJiYKKyAgICBncmVwIGZpbGUxIGVyci5sb2cgfCBncmVwICJub3QgdXB0b2RhdGUiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBBICAgICAgIEIgICAgIEIgICAgQyAgICAgLS1rZWVwICAgKGRpc2FsbG93ZWQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNldCAtLWtlZXAgZmFpbHMgd2l0aCBjaGFuZ2VzIGluIGZpbGUgaXQgdG91Y2hlcycgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgZWNobyAibGluZSA1IiA+PiBmaWxlMSAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLW0gImFkZCBsaW5lIDUiIGZpbGUxICYmCisgICAgc2VkIC1lICJzL2xpbmUgMS9jaGFuZ2VkIGxpbmUgMS8iIDxmaWxlMSA+ZmlsZTMgJiYKKyAgICBtdiBmaWxlMyBmaWxlMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRF4gMj5lcnIubG9nICYmCisgICAgZ3JlcCBmaWxlMSBlcnIubG9nIHwgZ3JlcCAibm90IHVwdG9kYXRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAzIGRpZmZlcmVudCBicmFuY2hlcycgJworICAgIGdpdCByZXNldCAtLWhhcmQgc2Vjb25kICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gxICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gyICYmCisgICAgZ2l0IGJyYW5jaCBicmFuY2gzICYmCisgICAgZ2l0IGNoZWNrb3V0IGJyYW5jaDEgJiYKKyAgICBlY2hvICJsaW5lIDUgaW4gYnJhbmNoMSIgPj4gZmlsZTEgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMSIgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMiAmJgorICAgIGVjaG8gImxpbmUgNSBpbiBicmFuY2gyIiA+PiBmaWxlMSAmJgorICAgIHRlc3RfdGljayAmJgorICAgIGdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBpbiBicmFuY2gyIiAmJgorICAgIGdpdCB0YWcgdGhpcmQgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMyAmJgorICAgIGVjaG8gYSBuZXcgZmlsZSA+ZmlsZTMgJiYKKyAgICBybSAtZiBmaWxlMSAmJgorICAgIGdpdCBhZGQgZmlsZTMgJiYKKyAgICB0ZXN0X3RpY2sgJiYKKyAgICBnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgaW4gYnJhbmNoMyIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBDICAgICAtLW1lcmdlICBDICAgICAgIEMgICAgIEMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLW1lcmdlIEhFQUReIiBpcyBvayB3aXRoIHBlbmRpbmcgbWVyZ2UnICcKKyAgICBnaXQgY2hlY2tvdXQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUReICYmCisgICAgdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2Ugc2Vjb25kKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmIC0tY2FjaGVkKSIgJiYKKyAgICB0ZXN0IC16ICIkKGdpdCBkaWZmKSIKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBDICAgICAtLWtlZXAgICAoZGlzYWxsb3dlZCkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLWtlZXAgSEVBRF4iIGZhaWxzIHdpdGggcGVuZGluZyBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRF4gMj5lcnIubG9nICYmCisgICAgdGVzdF9pMThuZ3JlcCAibWlkZGxlIG9mIGEgbWVyZ2UiIGVyci5sb2cKKycKKworIyBUaGUgbmV4dCB0ZXN0IHdpbGwgdGVzdCB0aGUgZm9sbG93aW5nOgorIworIyAgICAgICAgICAgd29ya2luZyBpbmRleCBIRUFEIHRhcmdldCAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRAorIyAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaWxlMTogICAgIFggICAgICAgVSAgICAgQiAgICBCICAgICAtLW1lcmdlICBCICAgICAgIEIgICAgIEIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJyZXNldCAtLW1lcmdlIEhFQUQiIGlzIG9rIHdpdGggcGVuZGluZyBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUQgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSB0aGlyZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZiAtLWNhY2hlZCkiICYmCisgICAgdGVzdCAteiAiJChnaXQgZGlmZikiCisnCisKKyMgVGhlIG5leHQgdGVzdCB3aWxsIHRlc3QgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgICAgIHdvcmtpbmcgaW5kZXggSEVBRCB0YXJnZXQgICAgICAgICB3b3JraW5nIGluZGV4IEhFQUQKKyMgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmlsZTE6ICAgICBYICAgICAgIFUgICAgIEIgICAgQiAgICAgLS1rZWVwICAgKGRpc2FsbG93ZWQpCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcicmVzZXQgLS1rZWVwIEhFQUQiIGZhaWxzIHdpdGggcGVuZGluZyBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYnJhbmNoMSAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCByZXNldCAtLWtlZXAgSEVBRCAyPmVyci5sb2cgJiYKKyAgICB0ZXN0X2kxOG5ncmVwICJtaWRkbGUgb2YgYSBtZXJnZSIgZXJyLmxvZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW1lcmdlIGlzIG9rIHdpdGggYWRkZWQvZGVsZXRlZCBtZXJnZScgJworICAgIGdpdCByZXNldCAtLWhhcmQgdGhpcmQgJiYKKyAgICBybSAtZiBmaWxlMiAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2gzICYmCisgICAgISB0ZXN0IC1mIGZpbGUyICYmCisgICAgdGVzdCAtZiBmaWxlMyAmJgorICAgIGdpdCBkaWZmIC0tZXhpdC1jb2RlIGZpbGUzICYmCisgICAgZ2l0IGRpZmYgLS1leGl0LWNvZGUgYnJhbmNoMyBmaWxlMyAmJgorICAgIGdpdCByZXNldCAtLW1lcmdlIEhFQUQgJiYKKyAgICAhIHRlc3QgLWYgZmlsZTMgJiYKKyAgICAhIHRlc3QgLWYgZmlsZTIgJiYKKyAgICBnaXQgZGlmZiAtLWV4aXQtY29kZSAtLWNhY2hlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWtlZXAgZmFpbHMgd2l0aCBhZGRlZC9kZWxldGVkIG1lcmdlJyAnCisgICAgZ2l0IHJlc2V0IC0taGFyZCB0aGlyZCAmJgorICAgIHJtIC1mIGZpbGUyICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaDMgJiYKKyAgICAhIHRlc3QgLWYgZmlsZTIgJiYKKyAgICB0ZXN0IC1mIGZpbGUzICYmCisgICAgZ2l0IGRpZmYgLS1leGl0LWNvZGUgZmlsZTMgJiYKKyAgICBnaXQgZGlmZiAtLWV4aXQtY29kZSBicmFuY2gzIGZpbGUzICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlc2V0IC0ta2VlcCBIRUFEIDI+ZXJyLmxvZyAmJgorICAgIHRlc3RfaTE4bmdyZXAgIm1pZGRsZSBvZiBhIG1lcmdlIiBlcnIubG9nCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzExMS1yZXNldC10YWJsZS5zaCBiL3QvdDcxMTEtcmVzZXQtdGFibGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2U0MjFhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMTEtcmVzZXQtdGFibGUuc2gKQEAgLTAsMCArMSwxMjEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgQ2hyaXN0aWFuIENvdWRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0cyB0byBjaGVjayB0aGF0ICJyZXNldCIgb3B0aW9ucyBmb2xsb3cgYSBrbm93biB0YWJsZScKKworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRpbmcgaW5pdGlhbCBjb21taXRzJyAnCisgICAgdGVzdF9jb21taXQgRSBmaWxlMSAmJgorICAgIHRlc3RfY29tbWl0IEQgZmlsZTEgJiYKKyAgICB0ZXN0X2NvbW1pdCBDIGZpbGUxCisnCisKK3doaWxlIHJlYWQgVzEgSTEgSDEgVCBvcHQgVzIgSTIgSDIKK2RvCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2s6ICRXMSAkSTEgJEgxICRUIC0tJG9wdCAkVzIgJEkyICRIMiIgJworCWdpdCByZXNldCAtLWhhcmQgQyAmJgorCWlmIHRlc3QgIiRJMSIgIT0gIiRIMSIKKwl0aGVuCisJICAgIGVjaG8gIiRJMSIgPmZpbGUxICYmCisJICAgIGdpdCBhZGQgZmlsZTEKKwlmaSAmJgorCWlmIHRlc3QgIiRXMSIgIT0gIiRJMSIKKwl0aGVuCisJICAgIGVjaG8gIiRXMSIgPmZpbGUxCisJZmkgJiYKKwlpZiB0ZXN0ICIkVzIiICE9ICJYWFhYWCIKKwl0aGVuCisJICAgIGdpdCByZXNldCAtLSRvcHQgJFQgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkVzIiICYmCisJICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtLSBmaWxlMSAmJgorCSAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRJMiIgJiYKKwkgICAgZ2l0IGNoZWNrb3V0IC1mIEhFQUQgLS0gZmlsZTEgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkSDIiCisJZWxzZQorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS0kb3B0ICRUCisJZmkKKyAgICAnCitkb25lIDw8XEVPRgorQSBCIEMgRCBzb2Z0ICAgQSBCIEQKK0EgQiBDIEQgbWl4ZWQgIEEgRCBECitBIEIgQyBEIGhhcmQgICBEIEQgRAorQSBCIEMgRCBtZXJnZSAgWFhYWFgKK0EgQiBDIEQga2VlcCAgIFhYWFhYCitBIEIgQyBDIHNvZnQgICBBIEIgQworQSBCIEMgQyBtaXhlZCAgQSBDIEMKK0EgQiBDIEMgaGFyZCAgIEMgQyBDCitBIEIgQyBDIG1lcmdlICBYWFhYWAorQSBCIEMgQyBrZWVwICAgQSBDIEMKK0IgQiBDIEQgc29mdCAgIEIgQiBECitCIEIgQyBEIG1peGVkICBCIEQgRAorQiBCIEMgRCBoYXJkICAgRCBEIEQKK0IgQiBDIEQgbWVyZ2UgIEQgRCBECitCIEIgQyBEIGtlZXAgICBYWFhYWAorQiBCIEMgQyBzb2Z0ICAgQiBCIEMKK0IgQiBDIEMgbWl4ZWQgIEIgQyBDCitCIEIgQyBDIGhhcmQgICBDIEMgQworQiBCIEMgQyBtZXJnZSAgQyBDIEMKK0IgQiBDIEMga2VlcCAgIEIgQyBDCitCIEMgQyBEIHNvZnQgICBCIEMgRAorQiBDIEMgRCBtaXhlZCAgQiBEIEQKK0IgQyBDIEQgaGFyZCAgIEQgRCBECitCIEMgQyBEIG1lcmdlICBYWFhYWAorQiBDIEMgRCBrZWVwICAgWFhYWFgKK0IgQyBDIEMgc29mdCAgIEIgQyBDCitCIEMgQyBDIG1peGVkICBCIEMgQworQiBDIEMgQyBoYXJkICAgQyBDIEMKK0IgQyBDIEMgbWVyZ2UgIEIgQyBDCitCIEMgQyBDIGtlZXAgICBCIEMgQworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHRpbmcgdXAgYnJhbmNoZXMgdG8gdGVzdCB3aXRoIHVubWVyZ2VkIGVudHJpZXMnICcKKyAgICBnaXQgcmVzZXQgLS1oYXJkIEMgJiYKKyAgICBnaXQgYnJhbmNoIGJyYW5jaDEgJiYKKyAgICBnaXQgYnJhbmNoIGJyYW5jaDIgJiYKKyAgICBnaXQgY2hlY2tvdXQgYnJhbmNoMSAmJgorICAgIHRlc3RfY29tbWl0IEIxIGZpbGUxICYmCisgICAgZ2l0IGNoZWNrb3V0IGJyYW5jaDIgJiYKKyAgICB0ZXN0X2NvbW1pdCBCIGZpbGUxCisnCisKK3doaWxlIHJlYWQgVzEgSTEgSDEgVCBvcHQgVzIgSTIgSDIKK2RvCisgICAgdGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2s6ICRXMSAkSTEgJEgxICRUIC0tJG9wdCAkVzIgJEkyICRIMiIgJworCWdpdCByZXNldCAtLWhhcmQgQiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2gxICYmCisJY2F0IGZpbGUxID5YX2ZpbGUxICYmCisJaWYgdGVzdCAiJFcyIiAhPSAiWFhYWFgiCisJdGhlbgorCSAgICBnaXQgcmVzZXQgLS0kb3B0ICRUICYmCisJICAgIGlmIHRlc3QgIiRXMiIgPSAiWCIKKwkgICAgdGhlbgorCQl0ZXN0X2NtcCBmaWxlMSBYX2ZpbGUxCisJICAgIGVsc2UKKwkJdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkVzIiCisJICAgIGZpICYmCisJICAgIGdpdCBjaGVja291dC1pbmRleCAtZiAtLSBmaWxlMSAmJgorCSAgICB0ZXN0ICIkKGNhdCBmaWxlMSkiID0gIiRJMiIgJiYKKwkgICAgZ2l0IGNoZWNrb3V0IC1mIEhFQUQgLS0gZmlsZTEgJiYKKwkgICAgdGVzdCAiJChjYXQgZmlsZTEpIiA9ICIkSDIiCisJZWxzZQorCSAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmVzZXQgLS0kb3B0ICRUCisJZmkKKyAgICAnCitkb25lIDw8XEVPRgorWCBVIEIgQyBzb2Z0ICAgWFhYWFgKK1ggVSBCIEMgbWl4ZWQgIFggQyBDCitYIFUgQiBDIGhhcmQgICBDIEMgQworWCBVIEIgQyBtZXJnZSAgQyBDIEMKK1ggVSBCIEMga2VlcCAgIFhYWFhYCitYIFUgQiBCIHNvZnQgICBYWFhYWAorWCBVIEIgQiBtaXhlZCAgWCBCIEIKK1ggVSBCIEIgaGFyZCAgIEIgQiBCCitYIFUgQiBCIG1lcmdlICBCIEIgQgorWCBVIEIgQiBrZWVwICAgWFhYWFgKK0VPRgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDcxMTItcmVzZXQtc3VibW9kdWxlLnNoIGIvdC90NzExMi1yZXNldC1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmVkYTZhZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcxMTItcmVzZXQtc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMTQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXNldCBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCit0ZXN0X3N1Ym1vZHVsZV9zd2l0Y2ggImdpdCByZXNldCAtLWtlZXAiCisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0IHJlc2V0IC0tbWVyZ2UiCisKK3Rlc3Rfc3VibW9kdWxlX2ZvcmNlZF9zd2l0Y2ggImdpdCByZXNldCAtLWhhcmQiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzIwMS1jby5zaCBiL3QvdDcyMDEtY28uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODg1OTIzNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDcyMDEtY28uc2gKQEAgLTAsMCArMSw2ODQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNoZWNrb3V0IHRlc3RzLgorCitDcmVhdGVzIG1hc3RlciwgZm9ya3MgcmVuYW1lciBhbmQgc2lkZSBicmFuY2hlcyBmcm9tIGl0LgorVGVzdCBzd2l0Y2hpbmcgYWNyb3NzIHRoZW0uCisKKyAgISBbbWFzdGVyXSBJbml0aWFsIEEgb25lLCBBIHR3bworICAgKiBbcmVuYW1lcl0gUmVuYW1lciBSIG9uZS0+dW5vLCBNIHR3bworICAgICEgW3NpZGVdIFNpZGUgTSBvbmUsIEQgdHdvLCBBIHRocmVlCisgICAgICEgW3NpbXBsZV0gU2ltcGxlIEQgb25lLCBNIHR3bworICAtLS0tCisgICAgICsgW3NpbXBsZV0gU2ltcGxlIEQgb25lLCBNIHR3bworICAgICsgIFtzaWRlXSBTaWRlIE0gb25lLCBEIHR3bywgQSB0aHJlZQorICAgKiAgIFtyZW5hbWVyXSBSZW5hbWVyIFIgb25lLT51bm8sIE0gdHdvCisgICsqKysgW21hc3Rlcl0gSW5pdGlhbCBBIG9uZSwgQSB0d28KKworJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF90aWNrCisKK2ZpbGwgKCkgeworCWZvciBpCisJZG8KKwkJZWNobyAiJGkiCisJZG9uZQorfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZmlsbCB4IHkgeiA+IHNhbWUgJiYKKwlmaWxsIDEgMiAzIDQgNSA2IDcgOCA+b25lICYmCisJZmlsbCBhIGIgYyBkIGUgPnR3byAmJgorCWdpdCBhZGQgc2FtZSBvbmUgdHdvICYmCisJZ2l0IGNvbW1pdCAtbSAiSW5pdGlhbCBBIG9uZSwgQSB0d28iICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVuYW1lciAmJgorCXJtIC1mIG9uZSAmJgorCWZpbGwgMSAzIDQgNSA2IDcgOCA+dW5vICYmCisJZ2l0IGFkZCB1bm8gJiYKKwlmaWxsIGEgYiBjIGQgZSBmID50d28gJiYKKwlnaXQgY29tbWl0IC1hIC1tICJSZW5hbWVyIFIgb25lLT51bm8sIE0gdHdvIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUgbWFzdGVyICYmCisJZmlsbCAxIDIgMyA0IDUgNiA3ID5vbmUgJiYKKwlmaWxsIEEgQiBDIEQgRSA+dGhyZWUgJiYKKwlybSAtZiB0d28gJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tcmVtb3ZlIG9uZSB0d28gdGhyZWUgJiYKKwlnaXQgY29tbWl0IC1tICJTaWRlIE0gb25lLCBEIHR3bywgQSB0aHJlZSIgJiYKKworCWdpdCBjaGVja291dCAtYiBzaW1wbGUgbWFzdGVyICYmCisJcm0gLWYgb25lICYmCisJZmlsbCBhIGMgZSA+IHR3byAmJgorCWdpdCBjb21taXQgLWEgLW0gIlNpbXBsZSBEIG9uZSwgTSB0d28iICYmCisKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IGZyb20gbm9uLWV4aXN0aW5nIGJyYW5jaCIgJworCisJZ2l0IGNoZWNrb3V0IC1iIGRlbGV0ZS1tZSBtYXN0ZXIgJiYKKwlybSAuZ2l0L3JlZnMvaGVhZHMvZGVsZXRlLW1lICYmCisJdGVzdCByZWZzL2hlYWRzL2RlbGV0ZS1tZSA9ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3QgcmVmcy9oZWFkcy9tYXN0ZXIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCB3aXRoIGRpcnR5IHRyZWUgd2l0aG91dCAtbSIgJworCisJZmlsbCAwIDEgMiAzIDQgNSA2IDcgOCA+b25lICYmCisJaWYgZ2l0IGNoZWNrb3V0IHNpZGUKKwl0aGVuCisJCWVjaG8gTm90IGhhcHB5CisJCWZhbHNlCisJZWxzZQorCQllY2hvICJoYXBweSAtIGZhaWxlZCBjb3JyZWN0bHkiCisJZmkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCB3aXRoIHVucmVsYXRlZCBkaXJ0eSB0cmVlIHdpdGhvdXQgLW0iICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYKKwlmaWxsIDAgMSAyIDMgNCA1IDYgNyA4ID5zYW1lICYmCisJY3Agc2FtZSBrZXB0ICYmCisJZ2l0IGNoZWNrb3V0IHNpZGUgPm1lc3NhZ2VzICYmCisJdGVzdF9jbXAgc2FtZSBrZXB0ICYmCisJcHJpbnRmICJNXHQlc1xuIiBzYW1lID5tZXNzYWdlcy5leHBlY3QgJiYKKwl0ZXN0X2NtcCBtZXNzYWdlcy5leHBlY3QgbWVzc2FnZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiY2hlY2tvdXQgLW0gd2l0aCBkaXJ0eSB0cmVlIiAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJZ2l0IGNsZWFuIC1mICYmCisKKwlmaWxsIDAgMSAyIDMgNCA1IDYgNyA4ID5vbmUgJiYKKwlnaXQgY2hlY2tvdXQgLW0gc2lkZSA+IG1lc3NhZ2VzICYmCisKKwl0ZXN0ICIkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkiID0gInJlZnMvaGVhZHMvc2lkZSIgJiYKKworCXByaW50ZiAiTVx0JXNcbiIgb25lID5leHBlY3QubWVzc2FnZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3QubWVzc2FnZXMgbWVzc2FnZXMgJiYKKworCWZpbGwgIk0Jb25lIiAiQQl0aHJlZSIgIkQJdHdvIiA+ZXhwZWN0Lm1hc3RlciAmJgorCWdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgbWFzdGVyID5jdXJyZW50Lm1hc3RlciAmJgorCXRlc3RfY21wIGV4cGVjdC5tYXN0ZXIgY3VycmVudC5tYXN0ZXIgJiYKKworCWZpbGwgIk0Jb25lIiA+ZXhwZWN0LnNpZGUgJiYKKwlnaXQgZGlmZiAtLW5hbWUtc3RhdHVzIHNpZGUgPmN1cnJlbnQuc2lkZSAmJgorCXRlc3RfY21wIGV4cGVjdC5zaWRlIGN1cnJlbnQuc2lkZSAmJgorCisJOiA+ZXhwZWN0LmluZGV4ICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmN1cnJlbnQuaW5kZXggJiYKKwl0ZXN0X2NtcCBleHBlY3QuaW5kZXggY3VycmVudC5pbmRleAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVja291dCAtbSB3aXRoIGRpcnR5IHRyZWUsIHJlbmFtZWQiICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IGNsZWFuIC1mICYmCisKKwlmaWxsIDEgMiAzIDQgNSA3IDggPm9uZSAmJgorCWlmIGdpdCBjaGVja291dCByZW5hbWVyCisJdGhlbgorCQllY2hvIE5vdCBoYXBweQorCQlmYWxzZQorCWVsc2UKKwkJZWNobyAiaGFwcHkgLSBmYWlsZWQgY29ycmVjdGx5IgorCWZpICYmCisKKwlnaXQgY2hlY2tvdXQgLW0gcmVuYW1lciAmJgorCWZpbGwgMSAzIDQgNSA3IDggPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCB1bm8gJiYKKwkhIHRlc3QgLWYgb25lICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgPmN1cnJlbnQgJiYKKwkhIHRlc3QgLXMgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC1tIHdpdGggbWVyZ2UgY29uZmxpY3QnICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IGNsZWFuIC1mICYmCisKKwlmaWxsIDEgVCAzIDQgNSA2IFMgOCA+b25lICYmCisJaWYgZ2l0IGNoZWNrb3V0IHJlbmFtZXIKKwl0aGVuCisJCWVjaG8gTm90IGhhcHB5CisJCWZhbHNlCisJZWxzZQorCQllY2hvICJoYXBweSAtIGZhaWxlZCBjb3JyZWN0bHkiCisJZmkgJiYKKworCWdpdCBjaGVja291dCAtbSByZW5hbWVyICYmCisKKwlnaXQgZGlmZiBtYXN0ZXI6b25lIDozOnVubyB8CisJc2VkIC1lICIxLC9eQEAvZCIgLWUgIi9eIC9kIiAtZSAicy9eLS9kLyIgLWUgInMvXisvYS8iID5jdXJyZW50ICYmCisJZmlsbCBkMiBhVCBkNyBhUyA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgY3VycmVudCBleHBlY3QgJiYKKwlnaXQgZGlmZiAtLWNhY2hlZCB0d28gPmN1cnJlbnQgJiYKKwkhIHRlc3QgLXMgY3VycmVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JtYXQgb2YgbWVyZ2UgY29uZmxpY3QgZnJvbSBjaGVja291dCAtbScgJworCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJiBnaXQgY2xlYW4gLWYgJiYKKworCWZpbGwgYiBkID4gdHdvICYmCisJZ2l0IGNoZWNrb3V0IC1tIHNpbXBsZSAmJgorCisJZ2l0IGxzLWZpbGVzID5jdXJyZW50ICYmCisJZmlsbCBzYW1lIHR3byB0d28gdHdvID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBjdXJyZW50IGV4cGVjdCAmJgorCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisJPDw8PDw8PCBzaW1wbGUKKwlhCisJYworCWUKKwk9PT09PT09CisJYgorCWQKKwk+Pj4+Pj4+IGxvY2FsCisJRU9GCisJdGVzdF9jbXAgdHdvIGV4cGVjdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCAtLW1lcmdlIC0tY29uZmxpY3Q9ZGlmZjMgPGJyYW5jaD4nICcKKworCWdpdCBjaGVja291dCAtZiBtYXN0ZXIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBnaXQgY2xlYW4gLWYgJiYKKworCWZpbGwgYiBkID4gdHdvICYmCisJZ2l0IGNoZWNrb3V0IC0tbWVyZ2UgLS1jb25mbGljdD1kaWZmMyBzaW1wbGUgJiYKKworCWNhdCA8PC1FT0YgPmV4cGVjdCAmJgorCTw8PDw8PDwgc2ltcGxlCisJYQorCWMKKwllCisJfHx8fHx8fCBtYXN0ZXIKKwlhCisJYgorCWMKKwlkCisJZQorCT09PT09PT0KKwliCisJZAorCT4+Pj4+Pj4gbG9jYWwKKwlFT0YKKwl0ZXN0X2NtcCB0d28gZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCB0byBhbm90aGVyIGJyYW5jaCB3aGlsZSBjYXJyeWluZyBhIGRlbGV0aW9uJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZ2l0IGNsZWFuIC1mICYmCisJZ2l0IHJtIHR3byAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IHNpbXBsZSAyPmVycnMgJiYKKwl0ZXN0X2kxOG5ncmVwIG92ZXJ3cml0dGVuIGVycnMgJiYKKworCWdpdCBjaGVja291dCAtLW1lcmdlIHNpbXBsZSAyPmVycnMgJiYKKwl0ZXN0X2kxOG5ncmVwICEgb3ZlcndyaXR0ZW4gZXJycyAmJgorCWdpdCBscy1maWxlcyAtdSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjYXQtZmlsZSAtdCA6MDp0d28gJiYKKwl0ZXN0ICIkKGdpdCBjYXQtZmlsZSAtdCA6MTp0d28pIiA9IGJsb2IgJiYKKwl0ZXN0ICIkKGdpdCBjYXQtZmlsZSAtdCA6Mjp0d28pIiA9IGJsb2IgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLXQgOjM6dHdvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEICh3aXRoIGFkdmljZSBkZWNsaW5lZCknICcKKworCWdpdCBjb25maWcgYWR2aWNlLmRldGFjaGVkSGVhZCBmYWxzZSAmJgorCWdpdCBjaGVja291dCAtZiByZW5hbWVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCByZW5hbWVyXiAyPm1lc3NhZ2VzICYmCisJdGVzdF9pMThuZ3JlcCAiSEVBRCBpcyBub3cgYXQgNzMyOTM4OCIgbWVzc2FnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIG1lc3NhZ2VzICYmCisJSD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlNPSQoZ2l0IHNob3ctcmVmIC1zIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorCXRlc3QgInokSCIgPSAieiRNIiAmJgorCWlmIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCA+L2Rldi9udWxsIDI+JjEKKwl0aGVuCisJCWVjaG8gIk9PUFMsIEhFQUQgaXMgc3RpbGwgc3ltYm9saWM/Pz8iCisJCWZhbHNlCisJZWxzZQorCQk6IGhhcHB5CisJZmkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdG8gZGV0YWNoIEhFQUQnICcKKwlnaXQgY29uZmlnIGFkdmljZS5kZXRhY2hlZEhlYWQgdHJ1ZSAmJgorCWdpdCBjaGVja291dCAtZiByZW5hbWVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCByZW5hbWVyXiAyPm1lc3NhZ2VzICYmCisJdGVzdF9pMThuZ3JlcCAiSEVBRCBpcyBub3cgYXQgNzMyOTM4OCIgbWVzc2FnZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgLWd0IDEgbWVzc2FnZXMgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAieiRIIiA9ICJ6JE0iICYmCisJaWYgZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJZWNobyAiT09QUywgSEVBRCBpcyBzdGlsbCBzeW1ib2xpYz8/PyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB0byBkZXRhY2ggSEVBRCB3aXRoIGJyYW5jaG5hbWVeJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCByZW5hbWVyXiAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJTT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICJ6JEgiID0gInokTSIgJiYKKwlpZiBnaXQgc3ltYm9saWMtcmVmIEhFQUQgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvICJPT1BTLCBIRUFEIGlzIHN0aWxsIHN5bWJvbGljPz8/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEIHdpdGggOi9tZXNzYWdlJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCAiOi9Jbml0aWFsIiAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJTT0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwl0ZXN0ICJ6JEgiID0gInokTSIgJiYKKwlpZiBnaXQgc3ltYm9saWMtcmVmIEhFQUQgPi9kZXYvbnVsbCAyPiYxCisJdGhlbgorCQllY2hvICJPT1BTLCBIRUFEIGlzIHN0aWxsIHN5bWJvbGljPz8/IgorCQlmYWxzZQorCWVsc2UKKwkJOiBoYXBweQorCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHRvIGRldGFjaCBIRUFEIHdpdGggSEVBRF4wJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmIGdpdCBjbGVhbiAtZiAmJgorCWdpdCBjaGVja291dCBIRUFEXjAgJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAieiRIIiA9ICJ6JE0iICYmCisJaWYgZ2l0IHN5bWJvbGljLXJlZiBIRUFEID4vZGV2L251bGwgMj4mMQorCXRoZW4KKwkJZWNobyAiT09QUywgSEVBRCBpcyBzdGlsbCBzeW1ib2xpYz8/PyIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGFtYmlndW91cyB0YWcvYnJhbmNoIG5hbWVzJyAnCisKKwlnaXQgdGFnIGJvdGggc2lkZSAmJgorCWdpdCBicmFuY2ggYm90aCBtYXN0ZXIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJZ2l0IGNoZWNrb3V0IGJvdGggJiYKKwlIPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCU09JChnaXQgc2hvdy1yZWYgLXMgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpICYmCisJdGVzdCAieiRIIiA9ICJ6JE0iICYmCisJbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCkgJiYKKwl0ZXN0ICJ6JG5hbWUiID0genJlZnMvaGVhZHMvYm90aAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggYW1iaWd1b3VzIHRhZy9icmFuY2ggbmFtZXMnICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlnaXQgdGFnIGZyb3R6IHNpZGUgJiYKKwlnaXQgYnJhbmNoIGZyb3R6IG1hc3RlciAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlnaXQgY2hlY2tvdXQgdGFncy9mcm90eiAmJgorCUg9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJUz0kKGdpdCBzaG93LXJlZiAtcyAtLXZlcmlmeSByZWZzL2hlYWRzL3NpZGUpICYmCisJdGVzdCAieiRIIiA9ICJ6JFMiICYmCisJaWYgbmFtZT0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAyPi9kZXYvbnVsbCkKKwl0aGVuCisJCWVjaG8gIkJhZCAtLSBzaG91bGQgaGF2ZSBkZXRhY2hlZCIKKwkJZmFsc2UKKwllbHNlCisJCTogaGFwcHkKKwlmaQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N3aXRjaCBicmFuY2hlcyB3aGlsZSBpbiBzdWJkaXJlY3RvcnknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisKKwlta2RpciBzdWJzICYmCisJKAorCQljZCBzdWJzICYmCisJCWdpdCBjaGVja291dCBzaWRlCisJKSAmJgorCSEgdGVzdCAtZiBzdWJzL29uZSAmJgorCXJtIC1mciBzdWJzCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgc3BlY2lmaWMgcGF0aCB3aGlsZSBpbiBzdWJkaXJlY3RvcnknICcKKworCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgY2hlY2tvdXQgc2lkZSAmJgorCW1rZGlyIHN1YnMgJiYKKwk+c3Vicy9iZXJvICYmCisJZ2l0IGFkZCBzdWJzL2Jlcm8gJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3Vicy9iZXJvIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCW1rZGlyIC1wIHN1YnMgJiYKKwkoCisJCWNkIHN1YnMgJiYKKwkJZ2l0IGNoZWNrb3V0IHNpZGUgLS0gYmVybworCSkgJiYKKwl0ZXN0IC1mIHN1YnMvYmVybworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja291dCB3Ly0tdHJhY2sgc2V0cyB1cCB0cmFja2luZycgJworICAgIGdpdCBjb25maWcgYnJhbmNoLmF1dG9zZXR1cG1lcmdlIGZhbHNlICYmCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorICAgIGdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRyYWNrMSAmJgorICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gudHJhY2sxLnJlbW90ZSkiICYmCisgICAgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC50cmFjazEubWVyZ2UpIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrb3V0IHcvYXV0b3NldHVwbWVyZ2U9YWx3YXlzIHNldHMgdXAgdHJhY2tpbmcnICcKKyAgICB0ZXN0X3doZW5fZmluaXNoZWQgZ2l0IGNvbmZpZyBicmFuY2guYXV0b3NldHVwbWVyZ2UgZmFsc2UgJiYKKyAgICBnaXQgY29uZmlnIGJyYW5jaC5hdXRvc2V0dXBtZXJnZSBhbHdheXMgJiYKKyAgICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisgICAgZ2l0IGNoZWNrb3V0IC1iIHRyYWNrMiAmJgorICAgIHRlc3QgIiQoZ2l0IGNvbmZpZyBicmFuY2gudHJhY2syLnJlbW90ZSkiICYmCisgICAgdGVzdCAiJChnaXQgY29uZmlnIGJyYW5jaC50cmFjazIubWVyZ2UpIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdy8tLXRyYWNrIGZyb20gbm9uLWJyYW5jaCBIRUFEIGZhaWxzJyAnCisgICAgZ2l0IGNoZWNrb3V0IG1hc3Rlcl4wICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFEICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC0tdHJhY2sgLWIgdHJhY2sgJiYKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHRyYWNrICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN5bWJvbGljLXJlZiBIRUFEICYmCisgICAgdGVzdCAieiQoZ2l0IHJldi1wYXJzZSBtYXN0ZXJeMCkiID0gInokKGdpdCByZXYtcGFyc2UgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHcvLS10cmFjayBmcm9tIHRhZyBmYWlscycgJworICAgIGdpdCBjaGVja291dCBtYXN0ZXJeMCAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLXRyYWNrIC1iIHRyYWNrIGZyb3R6ICYmCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB0cmFjayAmJgorICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBzeW1ib2xpYy1yZWYgSEVBRCAmJgorICAgIHRlc3QgInokKGdpdCByZXYtcGFyc2UgbWFzdGVyXjApIiA9ICJ6JChnaXQgcmV2LXBhcnNlIEhFQUQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRhY2ggYSBzeW1ib2xpYyBsaW5rIEhFQUQnICcKKyAgICBnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisgICAgZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5wcmVmZXJzeW1saW5rcmVmcyB5ZXMgJiYKKyAgICBnaXQgY2hlY2tvdXQgc2lkZSAmJgorICAgIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKyAgICBpdD0kKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgJiYKKyAgICB0ZXN0ICJ6JGl0IiA9IHpyZWZzL2hlYWRzL21hc3RlciAmJgorICAgIGhlcmU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyKSAmJgorICAgIGdpdCBjaGVja291dCBzaWRlXiAmJgorICAgIHRlc3QgInokKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9tYXN0ZXIpIiA9ICJ6JGhlcmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdjaGVja291dCB3aXRoIC0tdHJhY2sgZmFrZXMgYSBzZW5zaWJsZSAtYiA8bmFtZT4nICcKKyAgICBnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4uZmV0Y2ggIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIiAmJgorICAgIGdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4va29hbGEvYmVhciByZW5hbWVyICYmCisKKyAgICBnaXQgY2hlY2tvdXQgLS10cmFjayBvcmlnaW4va29hbGEvYmVhciAmJgorICAgIHRlc3QgInJlZnMvaGVhZHMva29hbGEvYmVhciIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlbmFtZXIpIiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiBnaXQgYnJhbmNoIC1EIGtvYWxhL2JlYXIgJiYKKworICAgIGdpdCBjaGVja291dCAtLXRyYWNrIHJlZnMvcmVtb3Rlcy9vcmlnaW4va29hbGEvYmVhciAmJgorICAgIHRlc3QgInJlZnMvaGVhZHMva29hbGEvYmVhciIgPSAiJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpIiAmJgorICAgIHRlc3QgIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgPSAiJChnaXQgcmV2LXBhcnNlIHJlbmFtZXIpIiAmJgorCisgICAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJiBnaXQgYnJhbmNoIC1EIGtvYWxhL2JlYXIgJiYKKworICAgIGdpdCBjaGVja291dCAtLXRyYWNrIHJlbW90ZXMvb3JpZ2luL2tvYWxhL2JlYXIgJiYKKyAgICB0ZXN0ICJyZWZzL2hlYWRzL2tvYWxhL2JlYXIiID0gIiQoZ2l0IHN5bWJvbGljLXJlZiBIRUFEKSIgJiYKKyAgICB0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSByZW5hbWVyKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ2NoZWNrb3V0IHdpdGggLS10cmFjaywgYnV0IHdpdGhvdXQgLWIsIGZhaWxzIHdpdGggdG9vIHNob3J0IHRyYWNrZWQgbmFtZScgJworICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCAtLXRyYWNrIHJlbmFtZXInCisKK3NldHVwX2NvbmZsaWN0aW5nX2luZGV4ICgpIHsKKwlybSAtZiAuZ2l0L2luZGV4ICYmCisJTz0kKGVjaG8gb3JpZ2luYWwgfCBnaXQgaGFzaC1vYmplY3QgLXcgLS1zdGRpbikgJiYKKwlBPSQoZWNobyBvdXJzaWRlIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJQj0kKGVjaG8gdGhlaXJzaWRlIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJKAorCQllY2hvICIxMDA2NDQgJEEgMAlmaWxkIiAmJgorCQllY2hvICIxMDA2NDQgJE8gMQlmaWxlIiAmJgorCQllY2hvICIxMDA2NDQgJEEgMglmaWxlIiAmJgorCQllY2hvICIxMDA2NDQgJEIgMwlmaWxlIiAmJgorCQllY2hvICIxMDA2NDQgJEEgMAlmaWxmIgorCSkgfCBnaXQgdXBkYXRlLWluZGV4IC0taW5kZXgtaW5mbworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBhbiB1bm1lcmdlZCBwYXRoIHNob3VsZCBmYWlsJyAnCisJc2V0dXBfY29uZmxpY3RpbmdfaW5kZXggJiYKKwllY2hvICJub25lIG9mIHRoZSBhYm92ZSIgPnNhbXBsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGQgJiYKKwljYXQgc2FtcGxlID5maWxlICYmCisJY2F0IHNhbXBsZSA+ZmlsZiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVja291dCBmaWxkIGZpbGUgZmlsZiAmJgorCXRlc3RfY21wIHNhbXBsZSBmaWxkICYmCisJdGVzdF9jbXAgc2FtcGxlIGZpbGYgJiYKKwl0ZXN0X2NtcCBzYW1wbGUgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCB3aXRoIGFuIHVubWVyZ2VkIHBhdGggY2FuIGJlIGlnbm9yZWQnICcKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLWYgZmlsZCBmaWxlIGZpbGYgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxmICYmCisJdGVzdF9jbXAgc2FtcGxlIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgdW5tZXJnZWQgc3RhZ2UnICcKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLS1vdXJzIC4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxmICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUgJiYKKwlnaXQgY2hlY2tvdXQgLS10aGVpcnMgZmlsZSAmJgorCXRlc3QgenRoZWlyc2lkZSA9ICJ6JChjYXQgZmlsZSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggLS1tZXJnZScgJworCXNldHVwX2NvbmZsaWN0aW5nX2luZGV4ICYmCisJZWNobyAibm9uZSBvZiB0aGUgYWJvdmUiID5zYW1wbGUgJiYKKwllY2hvIG91cnNpZGUgPmV4cGVjdCAmJgorCWNhdCBzYW1wbGUgPmZpbGQgJiYKKwljYXQgc2FtcGxlID5maWxlICYmCisJY2F0IHNhbXBsZSA+ZmlsZiAmJgorCWdpdCBjaGVja291dCAtbSAtLSBmaWxkIGZpbGUgZmlsZiAmJgorCSgKKwkJZWNobyAiPDw8PDw8PCBvdXJzIgorCQllY2hvIG91cnNpZGUKKwkJZWNobyAiPT09PT09PSIKKwkJZWNobyB0aGVpcnNpZGUKKwkJZWNobyAiPj4+Pj4+PiB0aGVpcnMiCisJKSA+bWVyZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZiAmJgorCXRlc3RfY21wIG1lcmdlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHdpdGggLS1tZXJnZSwgaW4gZGlmZjMgLW0gc3R5bGUnICcKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLW0gLS0gZmlsZCBmaWxlIGZpbGYgJiYKKwkoCisJCWVjaG8gIjw8PDw8PDwgb3VycyIKKwkJZWNobyBvdXJzaWRlCisJCWVjaG8gInx8fHx8fHwgYmFzZSIKKwkJZWNobyBvcmlnaW5hbAorCQllY2hvICI9PT09PT09IgorCQllY2hvIHRoZWlyc2lkZQorCQllY2hvICI+Pj4+Pj4+IHRoZWlycyIKKwkpID5tZXJnZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxmICYmCisJdGVzdF9jbXAgbWVyZ2VkIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgLS1jb25mbGljdD1tZXJnZSwgb3ZlcnJpZGluZyBjb25maWcnICcKKwlnaXQgY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgZGlmZjMgJiYKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLS1jb25mbGljdD1tZXJnZSAtLSBmaWxkIGZpbGUgZmlsZiAmJgorCSgKKwkJZWNobyAiPDw8PDw8PCBvdXJzIgorCQllY2hvIG91cnNpZGUKKwkJZWNobyAiPT09PT09PSIKKwkJZWNobyB0aGVpcnNpZGUKKwkJZWNobyAiPj4+Pj4+PiB0aGVpcnMiCisJKSA+bWVyZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZmlsZiAmJgorCXRlc3RfY21wIG1lcmdlZCBmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IC0tY29uZmxpY3Q9ZGlmZjMnICcKKwl0ZXN0X3VuY29uZmlnIG1lcmdlLmNvbmZsaWN0c3R5bGUgJiYKKwlzZXR1cF9jb25mbGljdGluZ19pbmRleCAmJgorCWVjaG8gIm5vbmUgb2YgdGhlIGFib3ZlIiA+c2FtcGxlICYmCisJZWNobyBvdXJzaWRlID5leHBlY3QgJiYKKwljYXQgc2FtcGxlID5maWxkICYmCisJY2F0IHNhbXBsZSA+ZmlsZSAmJgorCWNhdCBzYW1wbGUgPmZpbGYgJiYKKwlnaXQgY2hlY2tvdXQgLS1jb25mbGljdD1kaWZmMyAtLSBmaWxkIGZpbGUgZmlsZiAmJgorCSgKKwkJZWNobyAiPDw8PDw8PCBvdXJzIgorCQllY2hvIG91cnNpZGUKKwkJZWNobyAifHx8fHx8fCBiYXNlIgorCQllY2hvIG9yaWdpbmFsCisJCWVjaG8gIj09PT09PT0iCisJCWVjaG8gdGhlaXJzaWRlCisJCWVjaG8gIj4+Pj4+Pj4gdGhlaXJzIgorCSkgPm1lcmdlZCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxkICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGYgJiYKKwl0ZXN0X2NtcCBtZXJnZWQgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYWlsaW5nIGNoZWNrb3V0IC1iIHNob3VsZCBub3QgYnJlYWsgd29ya2luZyB0cmVlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgc3ltYm9saWMtcmVmIEhFQUQgcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgLWIgcmVuYW1lciBzaWRlXiAmJgorCXRlc3QgJChnaXQgc3ltYm9saWMtcmVmIEhFQUQpID0gcmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCWdpdCBkaWZmIC0tY2FjaGVkIC0tZXhpdC1jb2RlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIG91dCBvZiBub24tYnJhbmNoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyXjAgJiYKKwllY2hvIG1vZGlmaWVkID5vbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgcmVuYW1lciAyPmVycm9yLmxvZyAmJgorCSEgZ3JlcCAiXlByZXZpb3VzIEhFQUQiIGVycm9yLmxvZworJworCisoCisgZWNobyAiIyEkU0hFTExfUEFUSCIKKyBjYXQgPDxcRU9GCitPPSQxIEE9JDIgQj0kMworY2F0ICIkQSIgPi50bXAKK2V4ZWMgPiIkQSIKK2VjaG8gJzw8PDw8PDwgZmlsZnJlLXRoZWlycycKK2NhdCAiJEIiCitlY2hvICd8fHx8fHx8IGZpbGZyZS1jb21tb24nCitjYXQgIiRPIgorZWNobyAnPT09PT09PScKK2NhdCAiLnRtcCIKK2VjaG8gJz4+Pj4+Pj4gZmlsZnJlLW91cnMnCitybSAtZiAudG1wCitleGl0IDEKK0VPRgorKSA+ZmlsZnJlLnNoCitjaG1vZCAreCBmaWxmcmUuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3VzdG9tIG1lcmdlIGRyaXZlciB3aXRoIGNoZWNrb3V0IC1tJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCisJZ2l0IGNvbmZpZyBtZXJnZS5maWxmcmUuZHJpdmVyICIuL2ZpbGZyZS5zaCAlTyAlQSAlQiIgJiYKKwlnaXQgY29uZmlnIG1lcmdlLmZpbGZyZS5uYW1lICJGZWVsLWZyZWUgbWVyZ2UgZHJpdmVyIiAmJgorCWdpdCBjb25maWcgbWVyZ2UuZmlsZnJlLnJlY3Vyc2l2ZSBiaW5hcnkgJiYKKwllY2hvICJhcm0gbWVyZ2U9ZmlsZnJlIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKworCWdpdCBjaGVja291dCAtYiBsZWZ0ICYmCisJZWNobyBuZXV0cmFsID5hcm0gJiYKKwlnaXQgYWRkIGFybSAuZ2l0YXR0cmlidXRlcyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gbmV1dHJhbCAmJgorCWdpdCBicmFuY2ggcmlnaHQgJiYKKworCWVjaG8gbGVmdCA+YXJtICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBsZWZ0ICYmCisJZ2l0IGNoZWNrb3V0IHJpZ2h0ICYmCisKKwllY2hvIHJpZ2h0ID5hcm0gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tIHJpZ2h0ICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbGVmdCAmJgorCSgKKwkJZm9yIHQgaW4gZmlsZnJlLWNvbW1vbiBsZWZ0IHJpZ2h0CisJCWRvCisJCQlncmVwICR0IGFybSB8fCBleGl0IDEKKwkJZG9uZQorCQlleGl0IDAKKwkpICYmCisKKwltdiBhcm0gZXhwZWN0ICYmCisJZ2l0IGNoZWNrb3V0IC1tIGFybSAmJgorCXRlc3RfY21wIGV4cGVjdCBhcm0KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3MzAwLWNsZWFuLnNoIGIvdC90NzMwMC1jbGVhbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NmNlYjM4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzMwMC1jbGVhbi5zaApAQCAtMCwwICsxLDY1NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBNaWNoYWVsIFNwYW5nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjbGVhbiBiYXNpYyB0ZXN0cycKKworLiAuL3Rlc3QtbGliLnNoCisKK2dpdCBjb25maWcgY2xlYW4ucmVxdWlyZUZvcmNlIG5vCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisKKwlta2RpciAtcCBzcmMgJiYKKwl0b3VjaCBzcmMvcGFydDEuYyBNYWtlZmlsZSAmJgorCWVjaG8gYnVpbGQgPi5naXRpZ25vcmUgJiYKKwllY2hvIFwqLm8gPj4uZ2l0aWdub3JlICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBzZXR1cCAmJgorCXRvdWNoIHNyYy9wYXJ0Mi5jIFJFQURNRSAmJgorCWdpdCBhZGQgLgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiB3aXRoIHNraXAtd29ya3RyZWUgLmdpdGlnbm9yZScgJworCWdpdCB1cGRhdGUtaW5kZXggLS1za2lwLXdvcmt0cmVlIC5naXRpZ25vcmUgJiYKKwlybSAuZ2l0aWdub3JlICYmCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLW5vLXNraXAtd29ya3RyZWUgLmdpdGlnbm9yZSAmJgorCWdpdCBjaGVja291dCAuZ2l0aWdub3JlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbicgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHNyYy8nICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIHNyYy8gJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiBzcmMvIHNyYy8nICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIHNyYy8gc3JjLyAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHdpdGggcHJlZml4JyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzIHNyYy90ZXN0ICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyBzcmMvdGVzdC8xLmMgJiYKKwkoY2Qgc3JjLyAmJiBnaXQgY2xlYW4pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvdGVzdC8xLmMgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQ19MT0NBTEVfT1VUUFVUICdnaXQgY2xlYW4gd2l0aCByZWxhdGl2ZSBwcmVmaXgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJd291bGRfY2xlYW49JCgKKwkJY2QgZG9jcyAmJgorCQlnaXQgY2xlYW4gLW4gLi4vc3JjIHwKKwkJc2VkIC1uIC1lICJzfF5Xb3VsZCByZW1vdmUgfHxwIgorCSkgJiYKKwl2ZXJib3NlIHRlc3QgIiR3b3VsZF9jbGVhbiIgPSAuLi9zcmMvcGFydDMuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIENfTE9DQUxFX09VVFBVVCAnZ2l0IGNsZWFuIHdpdGggYWJzb2x1dGUgcGF0aCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwl3b3VsZF9jbGVhbj0kKAorCQljZCBkb2NzICYmCisJCWdpdCBjbGVhbiAtbiAiJChwd2QpLy4uL3NyYyIgfAorCQlzZWQgLW4gLWUgInN8XldvdWxkIHJlbW92ZSB8fHAiCisJKSAmJgorCXZlcmJvc2UgdGVzdCAiJHdvdWxkX2NsZWFuIiA9IC4uL3NyYy9wYXJ0My5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiB3aXRoIG91dCBvZiB3b3JrIHRyZWUgcmVsYXRpdmUgcGF0aCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoCisJCWNkIGRvY3MgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNsZWFuIC1uIC4uLy4uCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gd2l0aCBvdXQgb2Ygd29yayB0cmVlIGFic29sdXRlIHBhdGgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZGQ9JChjZCAuLiAmJiBwd2QpICYmCisJKAorCQljZCBkb2NzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjbGVhbiAtbiAkZGQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtZCB3aXRoIHByZWZpeCBhbmQgcGF0aCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyBzcmMvZmVhdHVyZSAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9mZWF0dXJlL2ZpbGUuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGNkIHNyYy8gJiYgZ2l0IGNsZWFuIC1kIGZlYXR1cmUvKSAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL2ZlYXR1cmUvZmlsZS5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdnaXQgY2xlYW4gc3ltYm9saWMgbGluaycgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlsbiAtcyBkb2NzL21hbnVhbC50eHQgc3JjL3BhcnQ0LmMgJiYKKwlnaXQgY2xlYW4gJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIHdpdGggd2lsZGNhcmQnICcKKworCXRvdWNoIGEuY2xlYW4gYi5jbGVhbiBvdGhlci5jICYmCisJZ2l0IGNsZWFuICIqLmNsZWFuIiAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEuY2xlYW4gJiYKKwl0ZXN0ICEgLWYgYi5jbGVhbiAmJgorCXRlc3QgLWYgb3RoZXIuYworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtbicgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLW4gJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC1kICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWQgZG9jcyAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtZCBzcmMvIGV4YW1wbGVzLycgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyBleGFtcGxlcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gZXhhbXBsZXMvMS5jICYmCisJZ2l0IGNsZWFuIC1kIHNyYy8gZXhhbXBsZXMvICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIGV4YW1wbGVzLzEuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC14JyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWdpdCBjbGVhbiAteCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtZCAteCcgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLWQgLXggJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZCBkb2NzICYmCisJdGVzdCAhIC1mIG9iai5vICYmCisJdGVzdCAhIC1kIGJ1aWxkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kIC14IHdpdGggaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLWQgLXggLWUgc3JjICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1kIGRvY3MgJiYKKwl0ZXN0ICEgLWYgb2JqLm8gJiYKKwl0ZXN0ICEgLWQgYnVpbGQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLVgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC1YICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgLVgnICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC1kIC1YICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIG9iai5vICYmCisJdGVzdCAhIC1kIGJ1aWxkCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kIC1YIHdpdGggaWdub3JlZCB0cmFja2VkIGRpcmVjdG9yeScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIGRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwlnaXQgY2xlYW4gLWQgLVggLWUgc3JjICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgb2JqLm8gJiYKKwl0ZXN0ICEgLWQgYnVpbGQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbi5yZXF1aXJlRm9yY2UgZGVmYXVsdHMgdG8gdHJ1ZScgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGNsZWFuLnJlcXVpcmVGb3JjZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbGVhbgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuLnJlcXVpcmVGb3JjZScgJworCisJZ2l0IGNvbmZpZyBjbGVhbi5yZXF1aXJlRm9yY2UgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjbGVhbgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFuLnJlcXVpcmVGb3JjZSBhbmQgLW4nICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZ2l0IGNsZWFuIC1uICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW4ucmVxdWlyZUZvcmNlIGFuZCAtZicgJworCisJZ2l0IGNsZWFuIC1mICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDX0xPQ0FMRV9PVVRQVVQgJ2NvcmUuZXhjbHVkZXNmaWxlJyAnCisKKwllY2hvIGV4Y2x1ZGVzID5leGNsdWRlcyAmJgorCWVjaG8gaW5jbHVkZWQgPmluY2x1ZGVkICYmCisJZ2l0IGNvbmZpZyBjb3JlLmV4Y2x1ZGVzZmlsZSBleGNsdWRlcyAmJgorCW91dHB1dD0kKGdpdCBjbGVhbiAtbiBleGNsdWRlcyBpbmNsdWRlZCAyPiYxKSAmJgorCWV4cHIgIiRvdXRwdXQiIDogIi4qaW5jbHVkZWQiID4vZGV2L251bGwgJiYKKwkhIGV4cHIgIiRvdXRwdXQiIDogIi4qZXhjbHVkZXMiID4vZGV2L251bGwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNBTklUWSAncmVtb3ZhbCBmYWlsdXJlJyAnCisKKwlta2RpciBmb28gJiYKKwl0b3VjaCBmb28vYmFyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjaG1vZCA3NTUgZm9vIiAmJgorCShleGVjIDxmb28vYmFyICYmCisJIGNobW9kIDAgZm9vICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBjbGVhbiAtZiAtZCkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIGdpdCB3b3JrIHRyZWUnICcKKwlybSAtZnIgZm9vIGJhciBiYXogJiYKKwlta2RpciAtcCBmb28gYmFyIGJhei9ib28gJiYKKwkoCisJCWNkIGZvbyAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCBuZXN0ZWQgaGVsbG8ud29ybGQKKwkpICYmCisJKAorCQljZCBiYXIgJiYKKwkJPmdvb2RieWUucGVvcGxlCisJKSAmJgorCSgKKwkJY2QgYmF6L2JvbyAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCBkZWVwbHkubmVzdGVkIGRlZXBlci53b3JsZAorCSkgJiYKKwlnaXQgY2xlYW4gLWYgLWQgJiYKKwl0ZXN0IC1mIGZvby8uZ2l0L2luZGV4ICYmCisJdGVzdCAtZiBmb28vaGVsbG8ud29ybGQgJiYKKwl0ZXN0IC1mIGJhei9ib28vLmdpdC9pbmRleCAmJgorCXRlc3QgLWYgYmF6L2Jvby9kZWVwZXIud29ybGQgJiYKKwkhIHRlc3QgLWQgYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Nob3VsZCBjbGVhbiB0aGluZ3MgdGhhdCBhbG1vc3QgbG9vayBsaWtlIGdpdCBidXQgYXJlIG5vdCcgJworCXJtIC1mciBhbG1vc3RfZ2l0IGFsbW9zdF9iYXJlX2dpdCBhbG1vc3Rfc3VibW9kdWxlICYmCisJbWtkaXIgLXAgYWxtb3N0X2dpdC8uZ2l0L29iamVjdHMgJiYKKwlta2RpciAtcCBhbG1vc3RfZ2l0Ly5naXQvcmVmcyAmJgorCWNhdCA+YWxtb3N0X2dpdC8uZ2l0L0hFQUQgPDwtXEVPRiAmJgorCWdhcmJhZ2UKKwlFT0YKKwljcCAtciBhbG1vc3RfZ2l0Ly5naXQvIGFsbW9zdF9iYXJlX2dpdCAmJgorCW1rZGlyIGFsbW9zdF9zdWJtb2R1bGUvICYmCisJY2F0ID5hbG1vc3Rfc3VibW9kdWxlLy5naXQgPDwtXEVPRiAmJgorCWdhcmJhZ2UKKwlFT0YKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBhbG1vc3RfKiIgJiYKKwlnaXQgY2xlYW4gLWYgLWQgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBhbG1vc3RfZ2l0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYWxtb3N0X2JhcmVfZ2l0ICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYWxtb3N0X3N1Ym1vZHVsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG91bGQgbm90IGNsZWFuIHN1Ym1vZHVsZXMnICcKKwlybSAtZnIgcmVwbyB0b19jbGVhbiBzdWIxIHN1YjIgJiYKKwlta2RpciByZXBvIHRvX2NsZWFuICYmCisJKAorCQljZCByZXBvICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfY29tbWl0IG1zZyBoZWxsby53b3JsZAorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuL3JlcG8vLmdpdCBzdWIxICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViMSIgJiYKKwlnaXQgYnJhbmNoIGJlZm9yZV9zdWIyICYmCisJZ2l0IHN1Ym1vZHVsZSBhZGQgLi9yZXBvLy5naXQgc3ViMiAmJgorCWdpdCBjb21taXQgLW0gInN1YjIiICYmCisJZ2l0IGNoZWNrb3V0IGJlZm9yZV9zdWIyICYmCisJPnRvX2NsZWFuL3Nob3VsZF9jbGVhbi50aGlzICYmCisJZ2l0IGNsZWFuIC1mIC1kICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcmVwby8uZ2l0L2luZGV4ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgcmVwby9oZWxsby53b3JsZCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1YjEvLmdpdCAmJgorCXRlc3RfcGF0aF9pc19maWxlIHN1YjEvaGVsbG8ud29ybGQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWIyLy5naXQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBzdWIyL2hlbGxvLndvcmxkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdG9fY2xlYW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3Nob3VsZCBhdm9pZCBjbGVhbmluZyBwb3NzaWJsZSBzdWJtb2R1bGVzJyAnCisJcm0gLWZyIHRvX2NsZWFuIHBvc3NpYmxlX3N1YjEgJiYKKwlta2RpciB0b19jbGVhbiBwb3NzaWJsZV9zdWIxICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgcG9zc2libGVfc3ViKiIgJiYKKwllY2hvICJnaXRkaXI6IGZvbyIgPnBvc3NpYmxlX3N1YjEvLmdpdCAmJgorCT5wb3NzaWJsZV9zdWIxL2hlbGxvLndvcmxkICYmCisJY2htb2QgMCBwb3NzaWJsZV9zdWIxLy5naXQgJiYKKwk+dG9fY2xlYW4vc2hvdWxkX2NsZWFuLnRoaXMgJiYKKwlnaXQgY2xlYW4gLWYgLWQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBwb3NzaWJsZV9zdWIxLy5naXQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBwb3NzaWJsZV9zdWIxL2hlbGxvLndvcmxkICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgdG9fY2xlYW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmVzdGVkIChlbXB0eSkgZ2l0IHNob3VsZCBiZSBrZXB0JyAnCisJcm0gLWZyIGVtcHR5X3JlcG8gdG9fY2xlYW4gJiYKKwlnaXQgaW5pdCBlbXB0eV9yZXBvICYmCisJbWtkaXIgdG9fY2xlYW4gJiYKKwk+dG9fY2xlYW4vc2hvdWxkX2NsZWFuLnRoaXMgJiYKKwlnaXQgY2xlYW4gLWYgLWQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBlbXB0eV9yZXBvLy5naXQvSEVBRCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHRvX2NsZWFuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25lc3RlZCBiYXJlIHJlcG9zaXRvcmllcyBzaG91bGQgYmUgY2xlYW5lZCcgJworCXJtIC1mciBiYXJlMSBiYXJlMiBzdWJkaXIgJiYKKwlnaXQgaW5pdCAtLWJhcmUgYmFyZTEgJiYKKwlnaXQgY2xvbmUgLS1sb2NhbCAtLWJhcmUgLiBiYXJlMiAmJgorCW1rZGlyIHN1YmRpciAmJgorCWNwIC1yIGJhcmUyIHN1YmRpci9iYXJlMyAmJgorCWdpdCBjbGVhbiAtZiAtZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGJhcmUxICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgYmFyZTIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBzdWJkaXIKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbmVzdGVkIChlbXB0eSkgYmFyZSByZXBvc2l0b3JpZXMgc2hvdWxkIGJlIGNsZWFuZWQgZXZlbiB3aGVuIGluIC5naXQnICcKKwlybSAtZnIgc3RyYW5nZV9iYXJlICYmCisJbWtkaXIgc3RyYW5nZV9iYXJlICYmCisJZ2l0IGluaXQgLS1iYXJlIHN0cmFuZ2VfYmFyZS8uZ2l0ICYmCisJZ2l0IGNsZWFuIC1mIC1kICYmCisJdGVzdF9wYXRoX2lzX21pc3Npbmcgc3RyYW5nZV9iYXJlCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ25lc3RlZCAobm9uLWVtcHR5KSBiYXJlIHJlcG9zaXRvcmllcyBzaG91bGQgYmUgY2xlYW5lZCBldmVuIHdoZW4gaW4gLmdpdCcgJworCXJtIC1mciBzdHJhbmdlX2JhcmUgJiYKKwlta2RpciBzdHJhbmdlX2JhcmUgJiYKKwlnaXQgY2xvbmUgLS1sb2NhbCAtLWJhcmUgLiBzdHJhbmdlX2JhcmUvLmdpdCAmJgorCWdpdCBjbGVhbiAtZiAtZCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIHN0cmFuZ2VfYmFyZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXZpbmcgcGF0aCBpbiBuZXN0ZWQgZ2l0IHdvcmsgdHJlZSB3aWxsIHJlbW92ZSBpdCcgJworCXJtIC1mciByZXBvICYmCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQlta2RpciAtcCBiYXIvYmF6ICYmCisJCXRlc3RfY29tbWl0IG1zZyBiYXIvYmF6L2hlbGxvLndvcmxkCisJKSAmJgorCWdpdCBjbGVhbiAtZiAtZCByZXBvL2Jhci9iYXogJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSByZXBvLy5naXQvSEVBRCAmJgorCXRlc3RfcGF0aF9pc19kaXIgcmVwby9iYXIvICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgcmVwby9iYXIvYmF6CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmluZyBwYXRoIHRvIG5lc3RlZCAuZ2l0IHdpbGwgbm90IHJlbW92ZSBpdCcgJworCXJtIC1mciByZXBvICYmCisJbWtkaXIgcmVwbyB1bnRyYWNrZWQgJiYKKwkoCisJCWNkIHJlcG8gJiYKKwkJZ2l0IGluaXQgJiYKKwkJdGVzdF9jb21taXQgbXNnIGhlbGxvLndvcmxkCisJKSAmJgorCWdpdCBjbGVhbiAtZiAtZCByZXBvLy5naXQgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSByZXBvLy5naXQvSEVBRCAmJgorCXRlc3RfcGF0aF9pc19kaXIgcmVwby8uZ2l0L3JlZnMgJiYKKwl0ZXN0X3BhdGhfaXNfZGlyIHJlcG8vLmdpdC9vYmplY3RzICYmCisJdGVzdF9wYXRoX2lzX2RpciB1bnRyYWNrZWQvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdmluZyBwYXRoIHRvIG5lc3RlZCAuZ2l0LyB3aWxsIHJlbW92ZSBjb250ZW50cycgJworCXJtIC1mciByZXBvIHVudHJhY2tlZCAmJgorCW1rZGlyIHJlcG8gdW50cmFja2VkICYmCisJKAorCQljZCByZXBvICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3RfY29tbWl0IG1zZyBoZWxsby53b3JsZAorCSkgJiYKKwlnaXQgY2xlYW4gLWYgLWQgcmVwby8uZ2l0LyAmJgorCXRlc3RfcGF0aF9pc19kaXIgcmVwby8uZ2l0ICYmCisJdGVzdF9kaXJfaXNfZW1wdHkgcmVwby8uZ2l0ICYmCisJdGVzdF9wYXRoX2lzX2RpciB1bnRyYWNrZWQvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmNlIHJlbW92YWwgb2YgbmVzdGVkIGdpdCB3b3JrIHRyZWUnICcKKwlybSAtZnIgZm9vIGJhciBiYXogJiYKKwlta2RpciAtcCBmb28gYmFyIGJhei9ib28gJiYKKwkoCisJCWNkIGZvbyAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCBuZXN0ZWQgaGVsbG8ud29ybGQKKwkpICYmCisJKAorCQljZCBiYXIgJiYKKwkJPmdvb2RieWUucGVvcGxlCisJKSAmJgorCSgKKwkJY2QgYmF6L2JvbyAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X2NvbW1pdCBkZWVwbHkubmVzdGVkIGRlZXBlci53b3JsZAorCSkgJiYKKwlnaXQgY2xlYW4gLWYgLWYgLWQgJiYKKwkhIHRlc3QgLWQgZm9vICYmCisJISB0ZXN0IC1kIGJhciAmJgorCSEgdGVzdCAtZCBiYXoKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1lJyAnCisJcm0gLWZyIHJlcG8gJiYKKwlta2RpciByZXBvICYmCisJKAorCQljZCByZXBvICYmCisJCWdpdCBpbml0ICYmCisJCXRvdWNoIGtub3duIDEgMiAzICYmCisJCWdpdCBhZGQga25vd24gJiYKKwkJZ2l0IGNsZWFuIC1mIC1lIDEgLWUgMiAmJgorCQl0ZXN0IC1lIDEgJiYKKwkJdGVzdCAtZSAyICYmCisJCSEgKHRlc3QgLWUgMykgJiYKKwkJdGVzdCAtZSBrbm93bgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTQU5JVFkgJ2dpdCBjbGVhbiAtZCB3aXRoIGFuIHVucmVhZGFibGUgZW1wdHkgZGlyZWN0b3J5JyAnCisJbWtkaXIgZm9vICYmCisJY2htb2QgYT0gZm9vICYmCisJZ2l0IGNsZWFuIC1kZnggZm9vICYmCisJISB0ZXN0IC1kIGZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWQgcmVzcGVjdHMgcGF0aHNwZWNzIChkaXIgaXMgcHJlZml4IG9mIHBhdGhzcGVjKScgJworCW1rZGlyIC1wIGZvbyAmJgorCW1rZGlyIC1wIGZvb2JhciAmJgorCWdpdCBjbGVhbiAtZGYgZm9vYmFyICYmCisJdGVzdF9wYXRoX2lzX2RpciBmb28gJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmb29iYXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1kIHJlc3BlY3RzIHBhdGhzcGVjcyAocGF0aHNwZWMgaXMgcHJlZml4IG9mIGRpciknICcKKwlta2RpciAtcCBmb28gJiYKKwlta2RpciAtcCBmb29iYXIgJiYKKwlnaXQgY2xlYW4gLWRmIGZvbyAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIGZvbyAmJgorCXRlc3RfcGF0aF9pc19kaXIgZm9vYmFyCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzMwMS1jbGVhbi1pbnRlcmFjdGl2ZS5zaCBiL3QvdDczMDEtY2xlYW4taW50ZXJhY3RpdmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2FlMzk0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDczMDEtY2xlYW4taW50ZXJhY3RpdmUuc2gKQEAgLTAsMCArMSw0NzUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2xlYW4gLWkgYmFzaWMgdGVzdHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJbWtkaXIgLXAgc3JjICYmCisJdG91Y2ggc3JjL3BhcnQxLmMgTWFrZWZpbGUgJiYKKwllY2hvIGJ1aWxkID4uZ2l0aWdub3JlICYmCisJZWNobyBcKi5vID4+LmdpdGlnbm9yZSAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gc2V0dXAgJiYKKwl0b3VjaCBzcmMvcGFydDIuYyBSRUFETUUgJiYKKwlnaXQgYWRkIC4KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWkgKGM6IGNsZWFuIGhvdGtleSknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWVjaG8gYyB8IGdpdCBjbGVhbiAtaSAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWkgKGNsOiBjbGVhbiBwcmVmaXgpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwllY2hvIGNsIHwgZ2l0IGNsZWFuIC1pICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaSAocXVpdCknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCWVjaG8gcXVpdCB8IGdpdCBjbGVhbiAtaSAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaSAoQ3RybCtEKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJZWNobyAiXDA0IiB8IGdpdCBjbGVhbiAtaSAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKGZpbHRlciBhbGwpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoZWNobyBmOyBlY2hvICIqIjsgZWNobzsgZWNobyBjKSB8IFwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoZmlsdGVyIHBhdHRlcm5zKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGVjaG8gZjsgZWNobyAicGFydDMuKiAqLm91dCI7IGVjaG87IGVjaG8gYykgfCBcCisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKGZpbHRlciBwYXR0ZXJucyAyKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGVjaG8gZjsgZWNobyAiKiAhKi5vdXQiOyBlY2hvOyBlY2hvIGMpIHwgXAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKHNlbGVjdCAtIGFsbCknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCShlY2hvIHM7IGVjaG8gIioiOyBlY2hvOyBlY2hvIGMpIHwgXAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSBub25lKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGVjaG8gczsgZWNobzsgZWNobyBjKSB8IFwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gbnVtYmVyKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGVjaG8gczsgZWNobyAzOyBlY2hvOyBlY2hvIGMpIHwgXAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgKHNlbGVjdCAtIG51bWJlciAyKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGVjaG8gczsgZWNobyAyIDM7IGVjaG8gNTsgZWNobzsgZWNobyBjKSB8IFwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0IC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gbnVtYmVyIDMpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoZWNobyBzOyBlY2hvIDMsNCA1OyBlY2hvOyBlY2hvIGMpIHwgXAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgISAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChzZWxlY3QgLSBmaWxlbmFtZXMpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgZm9vLnR4dCBiYXIudHh0IGJhei50eHQgJiYKKwkoZWNobyBzOyBlY2hvIGEub3V0IGZvIGJhIGJhcjsgZWNobzsgZWNobyBjKSB8IFwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBmb28udHh0ICYmCisJdGVzdCAhIC1mIGJhci50eHQgJiYKKwl0ZXN0IC1mIGJhei50eHQgJiYKKwlybSBiYXoudHh0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gcmFuZ2UpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoZWNobyBzOyBlY2hvIDEsMy00OyBlY2hvIDI7IGVjaG87IGVjaG8gYykgfCBcCisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0ICEgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoc2VsZWN0IC0gcmFuZ2UgMiknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCShlY2hvIHM7IGVjaG8gNC0gMTsgZWNobzsgZWNobyBjKSB8IFwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0IC1mIGRvY3MvbWFudWFsLnR4dCAmJgorCXRlc3QgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmggJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChpbnZlcnNlIHNlbGVjdCknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCShlY2hvIHM7IGVjaG8gIioiOyBlY2hvIC01LSAxIC0yOyBlY2hvOyBlY2hvIGMpIHwgXAorCWdpdCBjbGVhbiAtaWQgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIChhc2spJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoZWNobyBhOyBlY2hvIFk7IGVjaG8geTsgZWNobyBubzsgZWNobyB5ZXM7IGVjaG8gYmFkOyBlY2hvKSB8IFwKKwlnaXQgY2xlYW4gLWlkICYmCisJdGVzdCAtZiBNYWtlZmlsZSAmJgorCXRlc3QgLWYgUkVBRE1FICYmCisJdGVzdCAtZiBzcmMvcGFydDEuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQyLmMgJiYKKwl0ZXN0ICEgLWYgYS5vdXQgJiYKKwl0ZXN0ICEgLWYgZG9jcy9tYW51YWwudHh0ICYmCisJdGVzdCAtZiBzcmMvcGFydDMuYyAmJgorCXRlc3QgISAtZiBzcmMvcGFydDMuaCAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0NC5oICYmCisJdGVzdCAtZiBvYmoubyAmJgorCXRlc3QgLWYgYnVpbGQvbGliLnNvCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNsZWFuIC1pZCAoYXNrIC0gQ3RybCtEKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGVjaG8gYTsgZWNobyBZOyBlY2hvIG5vOyBlY2hvIHllczsgZWNobyAiXDA0IikgfCBcCisJZ2l0IGNsZWFuIC1pZCAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY2xlYW4gLWlkIHdpdGggcHJlZml4IGFuZCBwYXRoIChmaWx0ZXIpJyAnCisKKwlta2RpciAtcCBidWlsZCBkb2NzICYmCisJdG91Y2ggYS5vdXQgc3JjL3BhcnQzLmMgc3JjL3BhcnQzLmggc3JjL3BhcnQ0LmMgc3JjL3BhcnQ0LmggXAorCWRvY3MvbWFudWFsLnR4dCBvYmoubyBidWlsZC9saWIuc28gJiYKKwkoY2QgYnVpbGQvICYmIFwKKwkgKGVjaG8gZjsgZWNobyAiZG9jcyI7IGVjaG8gIiouaCI7IGVjaG8gOyBlY2hvIGMpIHwgXAorCSBnaXQgY2xlYW4gLWlkIC4uKSAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAhIC1mIGEub3V0ICYmCisJdGVzdCAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgd2l0aCBwcmVmaXggYW5kIHBhdGggKHNlbGVjdCBieSBuYW1lKScgJworCisJbWtkaXIgLXAgYnVpbGQgZG9jcyAmJgorCXRvdWNoIGEub3V0IHNyYy9wYXJ0My5jIHNyYy9wYXJ0My5oIHNyYy9wYXJ0NC5jIHNyYy9wYXJ0NC5oIFwKKwlkb2NzL21hbnVhbC50eHQgb2JqLm8gYnVpbGQvbGliLnNvICYmCisJKGNkIGJ1aWxkLyAmJiBcCisJIChlY2hvIHM7IGVjaG8gIi4uL2RvY3MvIjsgZWNobyAiLi4vc3JjL3BhcnQzLmMiOyBcCisJICBlY2hvICIuLi9zcmMvcGFydDQuYyI7ICBlY2hvOyBlY2hvIGMpIHwgXAorCSBnaXQgY2xlYW4gLWlkIC4uKSAmJgorCXRlc3QgLWYgTWFrZWZpbGUgJiYKKwl0ZXN0IC1mIFJFQURNRSAmJgorCXRlc3QgLWYgc3JjL3BhcnQxLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0Mi5jICYmCisJdGVzdCAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0ICEgLWYgc3JjL3BhcnQzLmMgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0NC5jICYmCisJdGVzdCAtZiBzcmMvcGFydDQuaCAmJgorCXRlc3QgLWYgb2JqLm8gJiYKKwl0ZXN0IC1mIGJ1aWxkL2xpYi5zbworCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjbGVhbiAtaWQgd2l0aCBwcmVmaXggYW5kIHBhdGggKGFzayknICcKKworCW1rZGlyIC1wIGJ1aWxkIGRvY3MgJiYKKwl0b3VjaCBhLm91dCBzcmMvcGFydDMuYyBzcmMvcGFydDMuaCBzcmMvcGFydDQuYyBzcmMvcGFydDQuaCBcCisJZG9jcy9tYW51YWwudHh0IG9iai5vIGJ1aWxkL2xpYi5zbyAmJgorCShjZCBidWlsZC8gJiYgXAorCSAoZWNobyBhOyBlY2hvIFk7IGVjaG8geTsgZWNobyBubzsgZWNobyB5ZXM7IGVjaG8gYmFkOyBlY2hvKSB8IFwKKwkgZ2l0IGNsZWFuIC1pZCAuLikgJiYKKwl0ZXN0IC1mIE1ha2VmaWxlICYmCisJdGVzdCAtZiBSRUFETUUgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0MS5jICYmCisJdGVzdCAtZiBzcmMvcGFydDIuYyAmJgorCXRlc3QgISAtZiBhLm91dCAmJgorCXRlc3QgISAtZiBkb2NzL21hbnVhbC50eHQgJiYKKwl0ZXN0IC1mIHNyYy9wYXJ0My5jICYmCisJdGVzdCAhIC1mIHNyYy9wYXJ0My5oICYmCisJdGVzdCAtZiBzcmMvcGFydDQuYyAmJgorCXRlc3QgLWYgc3JjL3BhcnQ0LmggJiYKKwl0ZXN0IC1mIG9iai5vICYmCisJdGVzdCAtZiBidWlsZC9saWIuc28KKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoIGIvdC90NzQwMC1zdWJtb2R1bGUtYmFzaWMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTQwNzcxYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDAtc3VibW9kdWxlLWJhc2ljLnNoCkBAIC0wLDAgKzEsMTAwMyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBMYXJzIEhqZW1saQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdCYXNpYyBwb3JjZWxhaW4gc3VwcG9ydCBmb3Igc3VibW9kdWxlcworCitUaGlzIHRlc3QgdHJpZXMgdG8gdmVyaWZ5IGJhc2ljIHNhbml0eSBvZiB0aGUgaW5pdCwgdXBkYXRlIGFuZCBzdGF0dXMKK3N1YmNvbW1hbmRzIG9mIGdpdCBzdWJtb2R1bGUuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIGluaXRpYWwgY29tbWl0JyAnCisJPnQgJiYKKwlnaXQgYWRkIHQgJiYKKwlnaXQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwlnaXQgYnJhbmNoIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlndXJhdGlvbiBwYXJzaW5nJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiAuZ2l0bW9kdWxlcyIgJiYKKwljYXQgPi5naXRtb2R1bGVzIDw8LVxFT0YgJiYKKwlbc3VibW9kdWxlICJzIl0KKwkJcGF0aAorCQlpZ25vcmUKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3RhdHVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gcmVwb3NpdG9yeSBpbiBpbml0IHN1YmRpcmVjdG9yeScgJworCW1rZGlyIGluaXQgJiYKKwkoCisJCWNkIGluaXQgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZWNobyBhID5hICYmCisJCWdpdCBhZGQgYSAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgY29tbWl0IDEiICYmCisJCWdpdCB0YWcgLWEgLW0gInJldi0xIiByZXYtMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSBjb21taXQgd2l0aCBnaXRsaW5rJyAnCisJZWNobyBhID5hICYmCisJZWNobyB6ID56ICYmCisJZ2l0IGFkZCBhIGluaXQgeiAmJgorCWdpdCBjb21taXQgLW0gInN1cGVyIGNvbW1pdCAxIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIGhpZGUgaW5pdCBzdWJkaXJlY3RvcnknICcKKwltdiBpbml0IC5zdWJyZXBvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIC0gcmVwb3NpdG9yeSB0byBhZGQgc3VibW9kdWxlcyB0bycgJworCWdpdCBpbml0IGFkZHRlc3QgJiYKKwlnaXQgaW5pdCBhZGR0ZXN0LWlnbm9yZQorJworCisjIFRoZSAnc3VibW9kdWxlIGFkZCcgdGVzdHMgbmVlZCBzb21lIHJlcG9zaXRvcnkgdG8gYWRkIGFzIGEgc3VibW9kdWxlLgorIyBUaGUgdHJhc2ggZGlyZWN0b3J5IGlzIGEgZ29vZCBvbmUgYXMgYW55LiBXZSBuZWVkIHRvIGNhbm9uaWNhbGl6ZQorIyB0aGUgbmFtZSwgdGhvdWdoLCBhcyBzb21lIHRlc3RzIGNvbXBhcmUgaXQgdG8gdGhlIGFic29sdXRlIHBhdGggZ2l0CisjIGdlbmVyYXRlcywgd2hpY2ggd2lsbCBleHBhbmQgc3ltYm9saWMgbGlua3MuCitzdWJtb2R1cmw9JChwd2QgLVApCisKK2xpc3RicmFuY2hlcygpIHsKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSclKHJlZm5hbWUpJyAncmVmcy9oZWFkcy8qJworfQorCitpbnNwZWN0KCkgeworCWRpcj0kMSAmJgorCWRvdGRvdD0iJHsyOi0uLn0iICYmCisKKwkoCisJCWNkICIkZGlyIiAmJgorCQlsaXN0YnJhbmNoZXMgPiIkZG90ZG90L2hlYWRzIiAmJgorCQl7IGdpdCBzeW1ib2xpYy1yZWYgSEVBRCB8fCA6OyB9ID4iJGRvdGRvdC9oZWFkIiAmJgorCQlnaXQgcmV2LXBhcnNlIEhFQUQgPiIkZG90ZG90L2hlYWQtc2hhMSIgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwkJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUgJiYKKwkJZ2l0IGNsZWFuIC1uIC1kIC14ID4iJGRvdGRvdC91bnRyYWNrZWQiCisJKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkJyAnCisJZWNobyAicmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKwk+ZW1wdHkgJiYKKworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAtcSAiJHN1Ym1vZHVybCIgc3VibW9kID5hY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCQllY2hvICJnaXRkaXI6IC4uLy5naXQvbW9kdWxlcy9zdWJtb2QiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC8uZ2l0ICYmCisJCSgKKwkJCWNkIHN1Ym1vZCAmJgorCQkJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlID5hY3R1YWwgJiYKKwkJCWVjaG8gIi4uLy4uLy4uL3N1Ym1vZCIgPmV4cGVjdCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQkJcm0gLWYgYWN0dWFsIGV4cGVjdAorCQkpICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3N1Ym1vZCAuLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9jbXAgZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgdG8gLmdpdGlnbm9yZWQgcGF0aCBmYWlscycgJworCSgKKwkJY2QgYWRkdGVzdC1pZ25vcmUgJiYKKwkJY2F0IDw8LVxFT0YgPmV4cGVjdCAmJgorCQlUaGUgZm9sbG93aW5nIHBhdGggaXMgaWdub3JlZCBieSBvbmUgb2YgeW91ciAuZ2l0aWdub3JlIGZpbGVzOgorCQlzdWJtb2QKKwkJVXNlIC1mIGlmIHlvdSByZWFsbHkgd2FudCB0byBhZGQgaXQuCisJCUVPRgorCQkjIERvZXMgbm90IHVzZSB0ZXN0X2NvbW1pdCBkdWUgdG8gdGhlIGlnbm9yZQorCQllY2hvICIqIiA+IC5naXRpZ25vcmUgJiYKKwkJZ2l0IGFkZCAtLWZvcmNlIC5naXRpZ25vcmUgJiYKKwkJZ2l0IGNvbW1pdCAtbSJJZ25vcmUgZXZlcnl0aGluZyIgJiYKKwkJISBnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgc3VibW9kID5hY3R1YWwgMj4mMSAmJgorCQl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCB0byAuZ2l0aWdub3JlZCBwYXRoIHdpdGggLS1mb3JjZScgJworCSgKKwkJY2QgYWRkdGVzdC1pZ25vcmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLS1mb3JjZSAiJHN1Ym1vZHVybCIgc3VibW9kCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIC0tYnJhbmNoJyAnCisJZWNobyAicmVmcy9oZWFkcy9pbml0aWFsIiA+ZXhwZWN0LWhlYWQgJiYKKwljYXQgPDwtXEVPRiA+ZXhwZWN0LWhlYWRzICYmCisJcmVmcy9oZWFkcy9pbml0aWFsCisJcmVmcy9oZWFkcy9tYXN0ZXIKKwlFT0YKKwk+ZW1wdHkgJiYKKworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAtYiBpbml0aWFsICIkc3VibW9kdXJsIiBzdWJtb2QtYnJhbmNoICYmCisJCXRlc3QgImluaXRpYWwiID0gIiQoZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibW9kLWJyYW5jaC5icmFuY2gpIiAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpICYmCisKKwlybSAtZiBoZWFkcyBoZWFkIHVudHJhY2tlZCAmJgorCWluc3BlY3QgYWRkdGVzdC9zdWJtb2QtYnJhbmNoIC4uLy4uICYmCisJdGVzdF9jbXAgZXhwZWN0LWhlYWRzIGhlYWRzICYmCisJdGVzdF9jbXAgZXhwZWN0LWhlYWQgaGVhZCAmJgorCXRlc3RfY21wIGVtcHR5IHVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHdpdGggLi8gaW4gcGF0aCcgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisJPmVtcHR5ICYmCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIC4vLi9kb3RzdWJtb2QvLi9mcm90ei8uLyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpICYmCisKKwlybSAtZiBoZWFkcyBoZWFkIHVudHJhY2tlZCAmJgorCWluc3BlY3QgYWRkdGVzdC9kb3RzdWJtb2QvZnJvdHogLi4vLi4vLi4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZCAmJgorCXRlc3RfY21wIGVtcHR5IHVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHdpdGggLy4vLi8gaW4gcGF0aCcgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisJPmVtcHR5ICYmCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIGRvdHNsYXNoZG90c3VibW9kLy4vLi9mcm90ei8uLyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpICYmCisKKwlybSAtZiBoZWFkcyBoZWFkIHVudHJhY2tlZCAmJgorCWluc3BlY3QgYWRkdGVzdC9kb3RzbGFzaGRvdHN1Ym1vZC9mcm90eiAuLi8uLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9jbXAgZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgd2l0aCAvLyBpbiBwYXRoJyAnCisJZWNobyAicmVmcy9oZWFkcy9tYXN0ZXIiID5leHBlY3QgJiYKKwk+ZW1wdHkgJiYKKworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAiJHN1Ym1vZHVybCIgc2xhc2hzbGFzaHN1Ym1vZC8vL2Zyb3R6Ly8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0CisJKSAmJgorCisJcm0gLWYgaGVhZHMgaGVhZCB1bnRyYWNrZWQgJiYKKwlpbnNwZWN0IGFkZHRlc3Qvc2xhc2hzbGFzaHN1Ym1vZC9mcm90eiAuLi8uLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9jbXAgZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgd2l0aCAvLi4gaW4gcGF0aCcgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisJPmVtcHR5ICYmCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIGRvdGRvdHN1Ym1vZC8uLi9yZWFsc3VibW9kL2Zyb3R6Ly4uICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3JlYWxzdWJtb2QgLi4vLi4gJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZHMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgaGVhZCAmJgorCXRlc3RfY21wIGVtcHR5IHVudHJhY2tlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHdpdGggLi8sIC8uLiBhbmQgLy8gaW4gcGF0aCcgJworCWVjaG8gInJlZnMvaGVhZHMvbWFzdGVyIiA+ZXhwZWN0ICYmCisJPmVtcHR5ICYmCisKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwiIGRvdC9kb3RzbGFzaHN1Ym1vZC8uLy4uLy4uLy8vL3JlYWxzdWJtb2QyL2EvYi9jL2QvLi4vLi4vLi4vLi4vZnJvdHovLy4uICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKworCXJtIC1mIGhlYWRzIGhlYWQgdW50cmFja2VkICYmCisJaW5zcGVjdCBhZGR0ZXN0L3JlYWxzdWJtb2QyIC4uLy4uICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWRzICYmCisJdGVzdF9jbXAgZXhwZWN0IGhlYWQgJiYKKwl0ZXN0X2NtcCBlbXB0eSB1bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCBpbiBzdWJkaXJlY3RvcnknICcKKwllY2hvICJyZWZzL2hlYWRzL21hc3RlciIgPmV4cGVjdCAmJgorCT5lbXB0eSAmJgorCisJbWtkaXIgYWRkdGVzdC9zdWIgJiYKKwkoCisJCWNkIGFkZHRlc3Qvc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkICIkc3VibW9kdXJsIiAuLi9yZWFsc3VibW9kMyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQKKwkpICYmCisKKwlybSAtZiBoZWFkcyBoZWFkIHVudHJhY2tlZCAmJgorCWluc3BlY3QgYWRkdGVzdC9yZWFsc3VibW9kMyAuLi8uLiAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkcyAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkICYmCisJdGVzdF9jbXAgZW1wdHkgdW50cmFja2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBhZGQgaW4gc3ViZGlyZWN0b3J5IHdpdGggcmVsYXRpdmUgcGF0aCBzaG91bGQgZmFpbCcgJworCSgKKwkJY2QgYWRkdGVzdC9zdWIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vLi4vIHN1Ym1vZDMgMj4uLi8uLi9vdXRwdXQuZXJyCisJKSAmJgorCXRlc3RfaTE4bmdyZXAgdG9wbGV2ZWwgb3V0cHV0LmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIGFkZCBhbiBleGFtcGxlIGVudHJ5IHRvIC5naXRtb2R1bGVzJyAnCisJZ2l0IGNvbmZpZyAtLWZpbGU9LmdpdG1vZHVsZXMgc3VibW9kdWxlLmV4YW1wbGUudXJsIGdpdDovL2V4YW1wbGUuY29tL2luaXQuZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgZmFpbCBmb3IgdW5tYXBwZWQgcGF0aHMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHN0YXR1cworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAtIG1hcCBwYXRoIGluIC5naXRtb2R1bGVzJyAnCisJY2F0IDw8XEVPRiA+ZXhwZWN0ICYmCitbc3VibW9kdWxlICJleGFtcGxlIl0KKwl1cmwgPSBnaXQ6Ly9leGFtcGxlLmNvbS9pbml0LmdpdAorCXBhdGggPSBpbml0CitFT0YKKworCWdpdCBjb25maWcgLS1maWxlPS5naXRtb2R1bGVzIHN1Ym1vZHVsZS5leGFtcGxlLnBhdGggaW5pdCAmJgorCisJdGVzdF9jbXAgZXhwZWN0IC5naXRtb2R1bGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgb25seSBwcmludCBvbmUgbGluZScgJworCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5saW5lcyAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgbGluZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLSBmZXRjaCBjb21taXQgbmFtZSBmcm9tIHN1Ym1vZHVsZScgJworCXJldjE9JChjZCAuc3VicmVwbyAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJcHJpbnRmICJyZXYxOiAlc1xuIiAiJHJldjEiICYmCisJdGVzdCAtbiAiJHJldjEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgaW5pdGlhbGx5IGJlICJtaXNzaW5nIicgJworCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5saW5lcyAmJgorCWdyZXAgIl4tJHJldjEiIGxpbmVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgc2hvdWxkIHJlZ2lzdGVyIHN1Ym1vZHVsZSB1cmwgaW4gLmdpdC9jb25maWcnICcKKwllY2hvIGdpdDovL2V4YW1wbGUuY29tL2luaXQuZ2l0ID5leHBlY3QgJiYKKworCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLmV4YW1wbGUudXJsID51cmwgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlLnVybCAuLy5zdWJyZXBvICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgdXJsCisnCisKK3Rlc3RfZmFpbHVyZV93aXRoX3Vua25vd25fc3VibW9kdWxlICgpIHsKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlICQxIG5vLXN1Y2gtc3VibW9kdWxlIDI+b3V0cHV0LmVyciAmJgorCWdyZXAgIl5lcnJvcjogLipuby1zdWNoLXN1Ym1vZHVsZSIgb3V0cHV0LmVycgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHNob3VsZCBmYWlsIHdpdGggdW5rbm93biBzdWJtb2R1bGUnICcKKwl0ZXN0X2ZhaWx1cmVfd2l0aF91bmtub3duX3N1Ym1vZHVsZSBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzaG91bGQgZmFpbCB3aXRoIHVua25vd24gc3VibW9kdWxlJyAnCisJdGVzdF9mYWlsdXJlX3dpdGhfdW5rbm93bl9zdWJtb2R1bGUgdXBkYXRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzaG91bGQgZmFpbCB3aXRoIHVua25vd24gc3VibW9kdWxlJyAnCisJdGVzdF9mYWlsdXJlX3dpdGhfdW5rbm93bl9zdWJtb2R1bGUgc3RhdHVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bmMgc2hvdWxkIGZhaWwgd2l0aCB1bmtub3duIHN1Ym1vZHVsZScgJworCXRlc3RfZmFpbHVyZV93aXRoX3Vua25vd25fc3VibW9kdWxlIHN5bmMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHNob3VsZCBmYWlsIHdoZW4gcGF0aCBpcyB1c2VkIGJ5IGEgZmlsZScgJworCWVjaG8gaGVsbG8gPmV4cGVjdCAmJgorCisJZWNobyAiaGVsbG8iID5pbml0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKworCXRlc3RfY21wIGV4cGVjdCBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzaG91bGQgZmFpbCB3aGVuIHBhdGggaXMgdXNlZCBieSBhIG5vbmVtcHR5IGRpcmVjdG9yeScgJworCWVjaG8gaGVsbG8gPmV4cGVjdCAmJgorCisJcm0gLWZyIGluaXQgJiYKKwlta2RpciBpbml0ICYmCisJZWNobyAiaGVsbG8iID5pbml0L2EgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisKKwl0ZXN0X2NtcCBleHBlY3QgaW5pdC9hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBzaG91bGQgd29yayB3aGVuIHBhdGggaXMgYW4gZW1wdHkgZGlyJyAnCisJcm0gLWZyIGluaXQgJiYKKwlybSAtZiBoZWFkLXNoYTEgJiYKKwllY2hvICIkcmV2MSIgPmV4cGVjdCAmJgorCisJbWtkaXIgaW5pdCAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1xID51cGRhdGUub3V0ICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IHVwZGF0ZS5vdXQgJiYKKworCWluc3BlY3QgaW5pdCAmJgorCXRlc3RfY21wIGV4cGVjdCBoZWFkLXNoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3VsZCBiZSAidXAtdG8tZGF0ZSIgYWZ0ZXIgdXBkYXRlJyAnCisJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmxpc3QgJiYKKwlncmVwICJeICRyZXYxIiBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAidXAtdG8tZGF0ZSIgZnJvbSBzdWJkaXJlY3RvcnknICcKKwlta2RpciAtcCBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyA+Li4vbGlzdAorCSkgJiYKKwlncmVwICJeICRyZXYxIiBsaXN0ICYmCisJZ3JlcCAiXFwuXFwuL2luaXQiIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzICJ1cC10by1kYXRlIiBmcm9tIHN1YmRpcmVjdG9yeSB3aXRoIHBhdGgnICcKKwlta2RpciAtcCBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN0YXR1cyAuLi9pbml0ID4uLi9saXN0CisJKSAmJgorCWdyZXAgIl4gJHJldjEiIGxpc3QgJiYKKwlncmVwICJcXC5cXC4vaW5pdCIgbGlzdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgc2hvdWxkIGJlICJtb2RpZmllZCIgYWZ0ZXIgc3VibW9kdWxlIGNvbW1pdCcgJworCSgKKwkJY2QgaW5pdCAmJgorCQllY2hvIGIgPmIgJiYKKwkJZ2l0IGFkZCBiICYmCisJCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZSBjb21taXQgMiIKKwkpICYmCisKKwlyZXYyPSQoY2QgaW5pdCAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJdGVzdCAtbiAiJHJldjIiICYmCisJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmxpc3QgJiYKKworCWdyZXAgIl4rJHJldjIiIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhlIC0tY2FjaGVkIHNoYTEgc2hvdWxkIGJlIHJldjEnICcKKwlnaXQgc3VibW9kdWxlIC0tY2FjaGVkIHN0YXR1cyA+bGlzdCAmJgorCWdyZXAgIl4rJHJldjEiIGxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGRpZmYgc2hvdWxkIHJlcG9ydCB0aGUgU0hBMSBvZiB0aGUgbmV3IHN1Ym1vZHVsZSBjb21taXQnICcKKwlnaXQgZGlmZiA+ZGlmZiAmJgorCWdyZXAgIl4rU3VicHJvamVjdCBjb21taXQgJHJldjIiIGRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHNob3VsZCBjaGVja291dCByZXYxJyAnCisJcm0gLWYgaGVhZC1zaGExICYmCisJZWNobyAiJHJldjEiID5leHBlY3QgJiYKKworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIGluaXQgJiYKKwlpbnNwZWN0IGluaXQgJiYKKworCXRlc3RfY21wIGV4cGVjdCBoZWFkLXNoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3VsZCBiZSAidXAtdG8tZGF0ZSIgYWZ0ZXIgdXBkYXRlJyAnCisJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmxpc3QgJiYKKwlncmVwICJeICRyZXYxIiBsaXN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrb3V0IHN1cGVycHJvamVjdCB3aXRoIHN1YnByb2plY3QgYWxyZWFkeSBwcmVzZW50JyAnCisJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGx5IHN1Ym1vZHVsZSBkaWZmJyAnCisJPmVtcHR5ICYmCisKKwlnaXQgYnJhbmNoIHNlY29uZCAmJgorCSgKKwkJY2QgaW5pdCAmJgorCQllY2hvIHMgPnMgJiYKKwkJZ2l0IGFkZCBzICYmCisJCWdpdCBjb21taXQgLW0gImNoYW5nZSBzdWJwcm9qZWN0IgorCSkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGluaXQgJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2UgaW5pdCIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC0tc3Rkb3V0ID5QLmRpZmYgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJZ2l0IGFwcGx5IC0taW5kZXggUC5kaWZmICYmCisKKwlnaXQgZGlmZiAtLWNhY2hlZCBtYXN0ZXIgPnN0YWdlZCAmJgorCXRlc3RfY21wIGVtcHR5IHN0YWdlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgLS1pbml0JyAnCisJbXYgaW5pdCBpbml0MiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLmV4YW1wbGUudXJsICIkKHB3ZCkvaW5pdDIiICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5leGFtcGxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgJiYKKworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIGluaXQgPiB1cGRhdGUub3V0ICYmCisJY2F0IHVwZGF0ZS5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3QgaW5pdGlhbGl6ZWQiIHVwZGF0ZS5vdXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIGluaXQvLmdpdCAmJgorCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IGluaXQgJiYKKwlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIGluaXQvLmdpdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgLS1pbml0IGZyb20gc3ViZGlyZWN0b3J5JyAnCisJbXYgaW5pdCBpbml0MiAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLmV4YW1wbGUudXJsICIkKHB3ZCkvaW5pdDIiICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5leGFtcGxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuZXhhbXBsZS51cmwgJiYKKworCW1rZGlyIC1wIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC4uL2luaXQgPnVwZGF0ZS5vdXQgJiYKKwkJY2F0IHVwZGF0ZS5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAibm90IGluaXRpYWxpemVkIiB1cGRhdGUub3V0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgLi4vaW5pdC8uZ2l0ICYmCisKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC4uL2luaXQKKwkpICYmCisJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBpbml0Ly5naXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGFkZCBmaWxlcyBmcm9tIGEgc3VibW9kdWxlJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFkZCBpbml0L2EKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmFjZWZ1bGx5IGFkZC9yZXNldCBzdWJtb2R1bGUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IHN1YnByb2plY3QiIGluaXQgJiYKKwkoY2QgaW5pdCAmJgorCSBlY2hvIGIgPiBhKSAmJgorCWdpdCBhZGQgaW5pdC8gJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAtLWNhY2hlZCBpbml0ICYmCisJY29tbWl0PSQoY2QgaW5pdCAmJgorCSBnaXQgY29tbWl0IC1tIHVwZGF0ZSBhID4vZGV2L251bGwgJiYKKwkgZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBhZGQgaW5pdC8gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWV4aXQtY29kZSAtLWNhY2hlZCBpbml0ICYmCisJdGVzdCAkY29tbWl0ID0gJChnaXQgbHMtZmlsZXMgLS1zdGFnZSB8CisJCXNlZCAtbiAicy9eMTYwMDAwIFwoW14gXSpcKS4qL1wxL3AiKSAmJgorCWdpdCByZXNldCBpbml0LyAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIC0tY2FjaGVkIGluaXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdscy1maWxlcyBncmFjZWZ1bGx5IGhhbmRsZXMgdHJhaWxpbmcgc2xhc2gnICcKKworCXRlc3QgImluaXQiID0gIiQoZ2l0IGxzLWZpbGVzIGluaXQvKSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZpbmcgdG8gYSBjb21taXQgd2l0aG91dCBzdWJtb2R1bGUgZG9lcyBub3QgbGVhdmUgZW1wdHkgZGlyJyAnCisJcm0gLXJmIGluaXQgJiYKKwlta2RpciBpbml0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjaGVja291dCBpbml0aWFsICYmCisJdGVzdCAhIC1kIGluaXQgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSA8aW52YWxpZC1zdWJjb21tYW5kPiBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgbm8tc3VjaC1zdWJjb21tYW5kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzdWJtb2R1bGVzIHdpdGhvdXQgc3BlY2lmeWluZyBhbiBleHBsaWNpdCBwYXRoJyAnCisJbWtkaXIgcmVwbyAmJgorCSgKKwkJY2QgcmVwbyAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvIHIgPnIgJiYKKwkJZ2l0IGFkZCByICYmCisJCWdpdCBjb21taXQgLW0gInJlcG8gY29tbWl0IDEiCisJKSAmJgorCWdpdCBjbG9uZSAtLWJhcmUgcmVwby8gYmFyZS5naXQgJiYKKwkoCisJCWNkIGFkZHRlc3QgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwvcmVwbyIgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVwby5wYXRoIHJlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwvYmFyZS5naXQiICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLmJhcmUucGF0aCBiYXJlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgc2hvdWxkIGZhaWwgd2hlbiBwYXRoIGlzIHVzZWQgYnkgYSBmaWxlJyAnCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCXRvdWNoIGZpbGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwJZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwvcmVwbyIgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHNob3VsZCBmYWlsIHdoZW4gcGF0aCBpcyB1c2VkIGJ5IGFuIGV4aXN0aW5nIGRpcmVjdG9yeScgJworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlta2RpciBlbXB0eS1kaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBhZGQgIiRzdWJtb2R1cmwvcmVwbyIgZW1wdHktZGlyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2Ugc3VwZXJwcm9qZWN0IGFzIHVwc3RyZWFtIHdoZW4gcGF0aCBpcyByZWxhdGl2ZSBhbmQgbm8gdXJsIGlzIHNldCB0aGVyZScgJworCSgKKwkJY2QgYWRkdGVzdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9yZXBvIHJlbGF0aXZlICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVsYXRpdmUudXJsKSIgPSAuLi9yZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyByZWxhdGl2ZSAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnJlbGF0aXZlLnVybCkiID0gIiRzdWJtb2R1cmwvcmVwbyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBmb3IgcmVsYXRpdmUgcGF0aCB0ZXN0cycgJworCW1rZGlyIHJlbHRlc3QgJiYKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJZ2l0IGluaXQgJiYKKwkJbWtkaXIgc3ViICYmCisJCSgKKwkJCWNkIHN1YiAmJgorCQkJZ2l0IGluaXQgJiYKKwkJCXRlc3RfY29tbWl0IGZvbworCQkpICYmCisJCWdpdCBhZGQgc3ViICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Yi5wYXRoIHN1YiAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWIudXJsIC4uL3N1YnJlcG8gJiYKKwkJY3AgLmdpdC9jb25maWcgcHJpc3RpbmUtLmdpdC1jb25maWcgJiYKKwkJY3AgLmdpdG1vZHVsZXMgcHJpc3RpbmUtLmdpdG1vZHVsZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCBVUkwgLSBzc2g6Ly9ob3N0bmFtZS9yZXBvJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgc3NoOi8vaG9zdG5hbWUvcmVwbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBzc2g6Ly9ob3N0bmFtZS9zdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggcG9ydC1xdWFsaWZpZWQgVVJMIC0gc3NoOi8vaG9zdG5hbWU6MjIvcmVwbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIHNzaDovL2hvc3RuYW1lOjIyL3JlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gc3NoOi8vaG9zdG5hbWU6MjIvc3VicmVwbworCSkKKycKKworIyBBYm91dCB0aGUgY2hvaWNlIG9mIHRoZSBwYXRoIGluIHRoZSBuZXh0IHRlc3Q6CisjIC0gZG91YmxlLXNsYXNoIHNpZGUtc3RlcHMgcGF0aCBtYW5nbGluZyBpc3N1ZXMgb24gV2luZG93cworIyAtIGl0IGlzIHN0aWxsIGFuIGFic29sdXRlIGxvY2FsIHBhdGgKKyMgLSB0aGVyZSBjYW5ub3QgYmUgYSBzZXJ2ZXIgd2l0aCBhIGJsYW5rIGluIGl0cyBuYW1lIGp1c3QgaW4gY2FzZSB0aGUKKyMgICBwYXRoIGlzIHVzZWQgZXJyb25lb3VzbHkgdG8gYWNjZXNzIGEgLy9zZXJ2ZXIvc2hhcmUgc3R5bGUgcGF0aAordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyBwYXRoIHdvcmtzIHdpdGggbG9jYWwgcGF0aCAtIC8vc29tZXdoZXJlIGVsc2UvcmVwbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsICIvL3NvbWV3aGVyZSBlbHNlL3JlcG8iICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9ICIvL3NvbWV3aGVyZSBlbHNlL3N1YnJlcG8iCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggZmlsZSBVUkwgLSBmaWxlOi8vL3RtcC9yZXBvJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgZmlsZTovLy90bXAvcmVwbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBmaWxlOi8vL3RtcC9zdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggaGVscGVyIFVSTC0gaGVscGVyOjovL2hvc3RuYW1lL3JlcG8nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCBoZWxwZXI6Oi8vaG9zdG5hbWUvcmVwbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBoZWxwZXI6Oi8vaG9zdG5hbWUvc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHNjcC1zdHlsZSBVUkwgLSB1c2VyQGhvc3Q6cmVwbycgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIHVzZXJAaG9zdDpyZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IHVzZXJAaG9zdDpzdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggc2NwLXN0eWxlIFVSTCAtIHVzZXJAaG9zdDpwYXRoL3RvL3JlcG8nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCB1c2VyQGhvc3Q6cGF0aC90by9yZXBvICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IHVzZXJAaG9zdDpwYXRoL3RvL3N1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCByZWxhdGl2ZSBsb2NhbCBwYXRoIC0gZm9vJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgZm9vICYmCisJCSMgYWN0dWFsOiBmYWlscyB3aXRoIGFuIGVycm9yCisJCWdpdCBzdWJtb2R1bGUgaW5pdCAmJgorCQl0ZXN0ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Yi51cmwpIiA9IHN1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCByZWxhdGl2ZSBsb2NhbCBwYXRoIC0gZm9vL2JhcicgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIGZvby9iYXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gZm9vL3N1YnJlcG8KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy4uL3N1YnJlcG8gd29ya3Mgd2l0aCByZWxhdGl2ZSBsb2NhbCBwYXRoIC0gLi9mb28nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAuL2ZvbyAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBzdWJyZXBvCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuLi9zdWJyZXBvIHdvcmtzIHdpdGggcmVsYXRpdmUgbG9jYWwgcGF0aCAtIC4vZm9vL2JhcicgJworCSgKKwkJY2QgcmVsdGVzdCAmJgorCQljcCBwcmlzdGluZS0uZ2l0LWNvbmZpZyAuZ2l0L2NvbmZpZyAmJgorCQljcCBwcmlzdGluZS0uZ2l0bW9kdWxlcyAuZ2l0bW9kdWxlcyAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsIC4vZm9vL2JhciAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSBmb28vc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHJlbGF0aXZlIGxvY2FsIHBhdGggLSAuLi9mb28nICcKKwkoCisJCWNkIHJlbHRlc3QgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdC1jb25maWcgLmdpdC9jb25maWcgJiYKKwkJY3AgcHJpc3RpbmUtLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAuLi9mb28gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3ViLnVybCkiID0gLi4vc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vc3VicmVwbyB3b3JrcyB3aXRoIHJlbGF0aXZlIGxvY2FsIHBhdGggLSAuLi9mb28vYmFyJyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgLi4vZm9vL2JhciAmJgorCQlnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkJdGVzdCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWIudXJsKSIgPSAuLi9mb28vc3VicmVwbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLi4vYmFyL2EvYi9jIHdvcmtzIHdpdGggcmVsYXRpdmUgbG9jYWwgcGF0aCAtIC4uL2Zvby9iYXIuZ2l0JyAnCisJKAorCQljZCByZWx0ZXN0ICYmCisJCWNwIHByaXN0aW5lLS5naXQtY29uZmlnIC5naXQvY29uZmlnICYmCisJCWNwIHByaXN0aW5lLS5naXRtb2R1bGVzIC5naXRtb2R1bGVzICYmCisJCW1rZGlyIC1wIGEvYi9jICYmCisJCShjZCBhL2IvYzsgZ2l0IGluaXQpICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgLi4vZm9vL2Jhci5naXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vYmFyL2EvYi9jIC4vYS9iL2MgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJCXRlc3QgIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuYS9iL2MudXJsKSIgPSAuLi9mb28vYmFyL2EvYi9jCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3ZpbmcgdGhlIHN1cGVycHJvamVjdCBkb2VzIG5vdCBicmVhayBzdWJtb2R1bGVzJyAnCisJKAorCQljZCBhZGR0ZXN0ICYmCisJCWdpdCBzdWJtb2R1bGUgc3RhdHVzID5leHBlY3QKKwkpICYmCisJbXYgYWRkdGVzdCBhZGR0ZXN0MiAmJgorCSgKKwkJY2QgYWRkdGVzdDIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIC0tbmFtZSBhbGxvd3MgdG8gcmVwbGFjZSBhIHN1Ym1vZHVsZSB3aXRoIGFub3RoZXIgYXQgdGhlIHNhbWUgcGF0aCcgJworCSgKKwkJY2QgYWRkdGVzdDIgJiYKKwkJKAorCQkJY2QgcmVwbyAmJgorCQkJZWNobyAiJHN1Ym1vZHVybC9yZXBvIiA+ZXhwZWN0ICYmCisJCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsID5hY3R1YWwgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJCWVjaG8gImdpdGRpcjogLi4vLmdpdC9tb2R1bGVzL3JlcG8iID5leHBlY3QgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCAuZ2l0CisJCSkgJiYKKwkJcm0gLXJmIHJlcG8gJiYKKwkJZ2l0IHJtIHJlcG8gJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLXEgLS1uYW1lIHJlcG9fbmV3ICIkc3VibW9kdXJsL2JhcmUuZ2l0IiByZXBvID5hY3R1YWwgJiYKKwkJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbCAmJgorCQllY2hvICJnaXRkaXI6IC4uLy5naXQvbW9kdWxlcy9zdWJtb2QiID5leHBlY3QgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IHN1Ym1vZC8uZ2l0ICYmCisJCSgKKwkJCWNkIHJlcG8gJiYKKwkJCWVjaG8gIiRzdWJtb2R1cmwvYmFyZS5naXQiID5leHBlY3QgJiYKKwkJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQkJZWNobyAiZ2l0ZGlyOiAuLi8uZ2l0L21vZHVsZXMvcmVwb19uZXciID5leHBlY3QgJiYKKwkJCXRlc3RfY21wIGV4cGVjdCAuZ2l0CisJCSkgJiYKKwkJZWNobyAicmVwbyIgPmV4cGVjdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZXBvLnBhdGggJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVwb19uZXcucGF0aCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwmJgorCQllY2hvICIkc3VibW9kdXJsL3JlcG8iID5leHBlY3QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVwby51cmwgJiYKKwkJZWNobyAiJHN1Ym1vZHVybC9iYXJlLmdpdCIgPmV4cGVjdCAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZXBvX25ldy51cmwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWVjaG8gIiRzdWJtb2R1cmwvcmVwbyIgPmV4cGVjdCAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5yZXBvLnVybCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwkJZWNobyAiJHN1Ym1vZHVybC9iYXJlLmdpdCIgPmV4cGVjdCAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5yZXBvX25ldy51cmwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHdpdGggYW4gZXhpc3RpbmcgbmFtZSBmYWlscyB1bmxlc3MgZm9yY2VkJyAnCisJKAorCQljZCBhZGR0ZXN0MiAmJgorCQlybSAtcmYgcmVwbyAmJgorCQlnaXQgcm0gcmVwbyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGFkZCAtcSAtLW5hbWUgcmVwb19uZXcgIiRzdWJtb2R1cmwvcmVwby5naXQiIHJlcG8gJiYKKwkJdGVzdCAhIC1kIHJlcG8gJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVwb19uZXcucGF0aCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZXBvX25ldy51cmwgJiYKKwkJZWNobyAiJHN1Ym1vZHVybC9iYXJlLmdpdCIgPmV4cGVjdCAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5yZXBvX25ldy51cmwgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC1mIC1xIC0tbmFtZSByZXBvX25ldyAiJHN1Ym1vZHVybC9yZXBvLmdpdCIgcmVwbyAmJgorCQl0ZXN0IC1kIHJlcG8gJiYKKwkJZWNobyAicmVwbyIgPmV4cGVjdCAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZXBvX25ldy5wYXRoID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCYmCisJCWVjaG8gIiRzdWJtb2R1cmwvcmVwby5naXQiID5leHBlY3QgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUucmVwb19uZXcudXJsID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCQllY2hvICIkc3VibW9kdXJsL3JlcG8uZ2l0IiA+ZXhwZWN0ICYmCisJCWdpdCBjb25maWcgc3VibW9kdWxlLnJlcG9fbmV3LnVybCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBhIHNlY29uZCBzdWJtb2R1bGUnICcKKwlnaXQgc3VibW9kdWxlIGFkZCAuL2luaXQyIGV4YW1wbGUyICYmCisJZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIGV4YW1wbGUyIGFkZGVkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGVpbml0IHNob3VsZCByZW1vdmUgdGhlIHdob2xlIHN1Ym1vZHVsZSBzZWN0aW9uIGZyb20gLmdpdC9jb25maWcnICcKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlLmZvbyBiYXIgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlMi5mcm90eiBuaXRmb2wgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCBpbml0ICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlXC4iKSIgJiYKKwl0ZXN0IC1uICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGUyXC4iKSIgJiYKKwl0ZXN0IC1mIGV4YW1wbGUyLy5naXQgJiYKKwlybWRpciBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkZWluaXQgZnJvbSBzdWJkaXJlY3RvcnknICcKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwlnaXQgY29uZmlnIHN1Ym1vZHVsZS5leGFtcGxlLmZvbyBiYXIgJiYKKwlta2RpciAtcCBzdWIgJiYKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIGRlaW5pdCAuLi9pbml0ID4uLi9vdXRwdXQKKwkpICYmCisJZ3JlcCAiXFwuXFwuL2luaXQiIG91dHB1dCAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdCAtbiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlMlwuIikiICYmCisJdGVzdCAtZiBleGFtcGxlMi8uZ2l0ICYmCisJcm1kaXIgaW5pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgZGVpbml0IC4gZGVpbml0cyBhbGwgaW5pdGlhbGl6ZWQgc3VibW9kdWxlcycgJworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLmV4YW1wbGUuZm9vIGJhciAmJgorCWdpdCBjb25maWcgc3VibW9kdWxlLmV4YW1wbGUyLmZyb3R6IG5pdGZvbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgZGVpbml0ICYmCisJZ2l0IHN1Ym1vZHVsZSBkZWluaXQgLiA+YWN0dWFsICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlXC4iKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGUyXC4iKSIgJiYKKwl0ZXN0X2kxOG5ncmVwICJDbGVhcmVkIGRpcmVjdG9yeSAuaW5pdCIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmV4YW1wbGUyIiBhY3R1YWwgJiYKKwlybWRpciBpbml0IGV4YW1wbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkZWluaXQgZGVpbml0cyBhIHN1Ym1vZHVsZSB3aGVuIGl0cyB3b3JrIHRyZWUgaXMgbWlzc2luZyBvciBlbXB0eScgJworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCXJtIC1yZiBpbml0IGV4YW1wbGUyLyogZXhhbXBsZTIvLmdpdCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgZXhhbXBsZTIgPmFjdHVhbCAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdCAteiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlMlwuIikiICYmCisJdGVzdF9pMThuZ3JlcCAhICJDbGVhcmVkIGRpcmVjdG9yeSAuaW5pdCIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmV4YW1wbGUyIiBhY3R1YWwgJiYKKwlybWRpciBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkZWluaXQgZmFpbHMgd2hlbiB0aGUgc3VibW9kdWxlIGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdW5sZXNzIGZvcmNlZCcgJworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWVjaG8gWCA+PmluaXQvcyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgJiYKKwl0ZXN0IC1uICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3QgLWYgZXhhbXBsZTIvLmdpdCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC1mIGluaXQgPmFjdHVhbCAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCXJtZGlyIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCBmYWlscyB3aGVuIHRoZSBzdWJtb2R1bGUgY29udGFpbnMgdW50cmFja2VkIGZpbGVzIHVubGVzcyBmb3JjZWQnICcKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwllY2hvIFggPj5pbml0L3VudHJhY2tlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgJiYKKwl0ZXN0IC1uICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3QgLWYgZXhhbXBsZTIvLmdpdCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC1mIGluaXQgPmFjdHVhbCAmJgorCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyAtLWdldC1yZWdleHAgInN1Ym1vZHVsZVwuZXhhbXBsZVwuIikiICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCXJtZGlyIGluaXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGRlaW5pdCBmYWlscyB3aGVuIHRoZSBzdWJtb2R1bGUgSEVBRCBkb2VzIG5vdCBtYXRjaCB1bmxlc3MgZm9yY2VkJyAnCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0ICYmCisJKAorCQljZCBpbml0ICYmCisJCWdpdCBjaGVja291dCBIRUFEXgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGRlaW5pdCBpbml0ICYmCisJdGVzdCAtbiAiJChnaXQgY29uZmlnIC0tZ2V0LXJlZ2V4cCAic3VibW9kdWxlXC5leGFtcGxlXC4iKSIgJiYKKwl0ZXN0IC1mIGV4YW1wbGUyLy5naXQgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCAtZiBpbml0ID5hY3R1YWwgJiYKKwl0ZXN0IC16ICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIiAmJgorCXRlc3RfaTE4bmdyZXAgIkNsZWFyZWQgZGlyZWN0b3J5IC5pbml0IiBhY3R1YWwgJiYKKwlybWRpciBpbml0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkZWluaXQgaXMgc2lsZW50IHdoZW4gdXNlZCBvbiBhbiB1bmluaXRpYWxpemVkIHN1Ym1vZHVsZScgJworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIlN1Ym1vZHVsZSAuZXhhbXBsZS4gKC4qKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggLmluaXQiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIkNsZWFyZWQgZGlyZWN0b3J5IC5pbml0IiBhY3R1YWwgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCBpbml0ID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIlN1Ym1vZHVsZSAuZXhhbXBsZS4gKC4qKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggLmluaXQiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIkNsZWFyZWQgZGlyZWN0b3J5IC5pbml0IiBhY3R1YWwgJiYKKwlnaXQgc3VibW9kdWxlIGRlaW5pdCAuID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIlN1Ym1vZHVsZSAuZXhhbXBsZS4gKC4qKSB1bnJlZ2lzdGVyZWQgZm9yIHBhdGggLmluaXQiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIlN1Ym1vZHVsZSAuZXhhbXBsZTIuICguKikgdW5yZWdpc3RlcmVkIGZvciBwYXRoIC5leGFtcGxlMiIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAiQ2xlYXJlZCBkaXJlY3RvcnkgLmluaXQiIGFjdHVhbCAmJgorCWdpdCBzdWJtb2R1bGUgZGVpbml0IC4gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgISAiU3VibW9kdWxlIC5leGFtcGxlLiAoLiopIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAuaW5pdCIgYWN0dWFsICYmCisJdGVzdF9pMThuZ3JlcCAhICJTdWJtb2R1bGUgLmV4YW1wbGUyLiAoLiopIHVucmVnaXN0ZXJlZCBmb3IgcGF0aCAuZXhhbXBsZTIiIGFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIkNsZWFyZWQgZGlyZWN0b3J5IC5pbml0IiBhY3R1YWwgJiYKKwlybWRpciBpbml0IGV4YW1wbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBkZWluaXQgZmFpbHMgd2hlbiBzdWJtb2R1bGUgaGFzIGEgLmdpdCBkaXJlY3RvcnkgZXZlbiB3aGVuIGZvcmNlZCcgJworCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCSgKKwkJY2QgaW5pdCAmJgorCQlybSAuZ2l0ICYmCisJCWNwIC1SIC4uLy5naXQvbW9kdWxlcy9leGFtcGxlIC5naXQgJiYKKwkJR0lUX1dPUktfVFJFRT0uIGdpdCBjb25maWcgLS11bnNldCBjb3JlLndvcmt0cmVlCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdWJtb2R1bGUgZGVpbml0IGluaXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIGRlaW5pdCAtZiBpbml0ICYmCisJdGVzdCAtZCBpbml0Ly5naXQgJiYKKwl0ZXN0IC1uICIkKGdpdCBjb25maWcgLS1nZXQtcmVnZXhwICJzdWJtb2R1bGVcLmV4YW1wbGVcLiIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgd2l0aCBVVEYtOCBuYW1lJyAnCisJc3ZuYW1lPSQocHJpbnRmICJcMzAzXDI0NSBcMzAzXDI0NFwzMDNcMjY2IikgJiYKKwlta2RpciAiJHN2bmFtZSIgJiYKKwkoCisJCWNkICIkc3ZuYW1lIiAmJgorCQlnaXQgaW5pdCAmJgorCQk+c3ViICYmCisJCWdpdCBhZGQgc3ViICYmCisJCWdpdCBjb21taXQgLW0gImluaXQgc3ViIgorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuLyIkc3ZuYW1lIiAmJgorCWdpdCBzdWJtb2R1bGUgPiYyICYmCisJdGVzdCAtbiAiJChnaXQgc3VibW9kdWxlIHwgZ3JlcCAiJHN2bmFtZSIpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIGNsb25lIHNoYWxsb3cgc3VibW9kdWxlJyAnCisJbWtkaXIgc3VwZXIgJiYKKwlwd2Q9JChwd2QpICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAtLWRlcHRoPTEgZmlsZTovLyIkcHdkIi9leGFtcGxlMiBzdWJtb2R1bGUgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQl0ZXN0IDEgPSAkKGdpdCBsb2cgLS1vbmVsaW5lIHwgd2MgLWwpCisJCSkKKwkpCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDAxLXN1Ym1vZHVsZS1zdW1tYXJ5LnNoIGIvdC90NzQwMS1zdWJtb2R1bGUtc3VtbWFyeS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNjY3NDZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwMS1zdWJtb2R1bGUtc3VtbWFyeS5zaApAQCAtMCwwICsxLDMwNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBQaW5nIFlpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdTdW1tYXJ5IHN1cHBvcnQgZm9yIHN1Ym1vZHVsZXMKKworVGhpcyB0ZXN0IHRyaWVzIHRvIHZlcmlmeSB0aGUgc2FuaXR5IG9mIHN1bW1hcnkgc3ViY29tbWFuZCBvZiBnaXQgc3VibW9kdWxlLgorJworCisuIC4vdGVzdC1saWIuc2gKKworYWRkX2ZpbGUgKCkgeworCXNtPSQxCisJc2hpZnQKKwlvd2Q9JChwd2QpCisJY2QgIiRzbSIKKwlmb3IgbmFtZTsgZG8KKwkJZWNobyAiJG5hbWUiID4gIiRuYW1lIiAmJgorCQlnaXQgYWRkICIkbmFtZSIgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCAkbmFtZSIKKwlkb25lID4vZGV2L251bGwKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgfCBjdXQgLWMxLTcKKwljZCAiJG93ZCIKK30KK2NvbW1pdF9maWxlICgpIHsKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0ICIkQCIgLW0gIkNvbW1pdCAkKiIgPi9kZXYvbnVsbAorfQorCit0ZXN0X2NyZWF0ZV9yZXBvIHNtMSAmJgorYWRkX2ZpbGUgLiBmb28gPi9kZXYvbnVsbAorCitoZWFkMT0kKGFkZF9maWxlIHNtMSBmb28xIGZvbzIpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGVkIHN1Ym1vZHVsZScgIgorCWdpdCBhZGQgc20xICYmCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5ID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgMDAwMDAwMC4uLiRoZWFkMSAoMik6CisgID4gQWRkIGZvbzIKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGVkIHN1Ym1vZHVsZSAoc3ViZGlyZWN0b3J5KScgIgorCW1rZGlyIHN1YiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+Li4vYWN0dWFsCisJKSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIC4uL3NtMSAwMDAwMDAwLi4uJGhlYWQxICgyKToKKyAgPiBBZGQgZm9vMgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkZWQgc3VibW9kdWxlIChzdWJkaXJlY3Rvcnkgb25seSknICIKKwkoCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN1bW1hcnkgLiA+Li4vYWN0dWFsCisJKSAmJgorCT5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRlZCBzdWJtb2R1bGUgKHN1YmRpcmVjdG9yeSB3aXRoIGV4cGxpY2l0IHBhdGgpJyAiCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IC4uL3NtMSA+Li4vYWN0dWFsCisJKSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIC4uL3NtMSAwMDAwMDAwLi4uJGhlYWQxICgyKToKKyAgPiBBZGQgZm9vMgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworY29tbWl0X2ZpbGUgc20xICYmCitoZWFkMj0kKGFkZF9maWxlIHNtMSBmb28zKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoZm9yd2FyZCknICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDEuLi4kaGVhZDIgKDEpOgorICA+IEFkZCBmb28zCisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZmllZCBzdWJtb2R1bGUoZm9yd2FyZCksIC0tZmlsZXMnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgLS1maWxlcyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkMS4uLiRoZWFkMiAoMSk6CisgID4gQWRkIGZvbzMKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGlnbm9yZT1hbGwgc2V0dGluZyBoYXMgYW55IGVmZmVjdCcgIgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnNtMS5wYXRoIHNtMSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnNtMS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc20xLmlnbm9yZSBhbGwgJiYKKwlnaXQgY29uZmlnIGRpZmYuaWdub3JlU3VibW9kdWxlcyBhbGwgJiYKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDEuLi4kaGVhZDIgKDEpOgorICA+IEFkZCBmb28zCisKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbCAmJgorCWdpdCBjb25maWcgLS11bnNldCBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnNtMSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc20xCisiCisKKworY29tbWl0X2ZpbGUgc20xICYmCitoZWFkMz0kKAorCWNkIHNtMSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRH4yID4vZGV2L251bGwgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgfCBjdXQgLWMxLTcKKykKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGJhY2t3YXJkKScgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkMi4uLiRoZWFkMyAoMik6CisgIDwgQWRkIGZvbzMKKyAgPCBBZGQgZm9vMgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKworaGVhZDQ9JChhZGRfZmlsZSBzbTEgZm9vNCBmb281KSAmJgoraGVhZDRfZnVsbD0kKEdJVF9ESVI9c20xLy5naXQgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKQordGVzdF9leHBlY3Rfc3VjY2VzcyAnbW9kaWZpZWQgc3VibW9kdWxlKGJhY2t3YXJkIGFuZCBmb3J3YXJkKScgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkMi4uLiRoZWFkNCAoNCk6CisgID4gQWRkIGZvbzUKKyAgPiBBZGQgZm9vNAorICA8IEFkZCBmb28zCisgIDwgQWRkIGZvbzIKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tc3VtbWFyeS1saW1pdCcgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtbiAzID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQyLi4uJGhlYWQ0ICg0KToKKyAgPiBBZGQgZm9vNQorICA+IEFkZCBmb280CisgIDwgQWRkIGZvbzMKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NvbW1pdF9maWxlIHNtMSAmJgorbXYgc20xIHNtMS1iYWsgJiYKK2VjaG8gc20xID5zbTEgJiYKK2hlYWQ1PSQoZ2l0IGhhc2gtb2JqZWN0IHNtMSB8IGN1dCAtYzEtNykgJiYKK2dpdCBhZGQgc20xICYmCitybSAtZiBzbTEgJiYKK212IHNtMS1iYWsgc20xCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R5cGVjaGFuZ2VkIHN1Ym1vZHVsZShzdWJtb2R1bGUtPmJsb2IpLCAtLWNhY2hlZCcgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtLWNhY2hlZCA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNChzdWJtb2R1bGUpLT4kaGVhZDUoYmxvYikgKDMpOgorICA8IEFkZCBmb281CisKK0VPRgorCXRlc3RfaTE4bmNtcCBhY3R1YWwgZXhwZWN0ZWQKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiksIC0tZmlsZXMnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgLS1maWxlcyA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNShibG9iKS0+JGhlYWQ0KHN1Ym1vZHVsZSkgKDMpOgorICA+IEFkZCBmb281CisKK0VPRgorCXRlc3RfaTE4bmNtcCBhY3R1YWwgZXhwZWN0ZWQKKyIKKworcm0gLXJmIHNtMSAmJgorZ2l0IGNoZWNrb3V0LWluZGV4IHNtMQordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKHN1Ym1vZHVsZS0+YmxvYiknICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDQoc3VibW9kdWxlKS0+JGhlYWQ1KGJsb2IpOgorCitFT0YKKwl0ZXN0X2kxOG5jbXAgYWN0dWFsIGV4cGVjdGVkCisiCisKK3JtIC1mIHNtMSAmJgordGVzdF9jcmVhdGVfcmVwbyBzbTEgJiYKK2hlYWQ2PSQoYWRkX2ZpbGUgc20xIGZvbzYgZm9vNykKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmV4aXN0ZW50IGNvbW1pdCcgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSA+YWN0dWFsICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKyogc20xICRoZWFkNC4uLiRoZWFkNjoKKyAgV2Fybjogc20xIGRvZXNuJ3QgY29udGFpbiBjb21taXQgJGhlYWQ0X2Z1bGwKKworRU9GCisJdGVzdF9pMThuY21wIGFjdHVhbCBleHBlY3RlZAorIgorCitjb21taXRfZmlsZQordGVzdF9leHBlY3Rfc3VjY2VzcyAndHlwZWNoYW5nZWQgc3VibW9kdWxlKGJsb2ItPnN1Ym1vZHVsZSknICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDUoYmxvYiktPiRoZWFkNihzdWJtb2R1bGUpICgyKToKKyAgPiBBZGQgZm9vNworCitFT0YKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NvbW1pdF9maWxlIHNtMSAmJgorcm0gLXJmIHNtMQordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlZCBzdWJtb2R1bGUnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDYuLi4wMDAwMDAwOgorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9jcmVhdGVfcmVwbyBzbTIgJiYKK2hlYWQ3PSQoYWRkX2ZpbGUgc20yIGZvbzggZm9vOSkgJiYKK2dpdCBhZGQgc20yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIHN1Ym1vZHVsZXMnICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPmFjdHVhbCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisqIHNtMSAkaGVhZDYuLi4wMDAwMDAwOgorCisqIHNtMiAwMDAwMDAwLi4uJGhlYWQ3ICgyKToKKyAgPiBBZGQgZm9vOQorCitFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aCBmaWx0ZXInICIKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgc20yID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTIgMDAwMDAwMC4uLiRoZWFkNyAoMik6CisgID4gQWRkIGZvbzkKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK2NvbW1pdF9maWxlIHNtMgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l2ZW4gY29tbWl0JyAiCisJZ2l0IHN1Ym1vZHVsZSBzdW1tYXJ5IEhFQUReID5hY3R1YWwgJiYKKwljYXQgPmV4cGVjdGVkIDw8LUVPRiAmJgorKiBzbTEgJGhlYWQ2Li4uMDAwMDAwMDoKKworKiBzbTIgMDAwMDAwMC4uLiRoZWFkNyAoMik6CisgID4gQWRkIGZvbzkKKworRU9GCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZm9yLXN0YXR1cycgIgorCWdpdCBzdWJtb2R1bGUgc3VtbWFyeSAtLWZvci1zdGF0dXMgSEVBRF4gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBhY3R1YWwgLSA8PEVPRgorKiBzbTEgJGhlYWQ2Li4uMDAwMDAwMDoKKworKiBzbTIgMDAwMDAwMC4uLiRoZWFkNyAoMik6CisgID4gQWRkIGZvbzkKKworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWwgd2hlbiB1c2luZyAtLWZpbGVzIHRvZ2V0aGVyIHdpdGggLS1jYWNoZWQnICIKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHN1bW1hcnkgLS1maWxlcyAtLWNhY2hlZAorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaG91bGQgbm90IGZhaWwgaW4gYW4gZW1wdHkgcmVwbycgIgorCWdpdCBpbml0IHh5enp5ICYmCisJY2QgeHl6enkgJiYKKwlnaXQgc3VibW9kdWxlIHN1bW1hcnkgPm91dHB1dCAyPiYxICYmCisJdGVzdF9jbXAgb3V0cHV0IC9kZXYvbnVsbAorIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDItc3VibW9kdWxlLXJlYmFzZS5zaCBiL3QvdDc0MDItc3VibW9kdWxlLXJlYmFzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTMyZjE5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwMi1zdWJtb2R1bGUtcmViYXNlLnNoCkBAIC0wLDAgKzEsMTE4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEpvaGFubmVzIFNjaGluZGVsaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCByZWJhc2luZywgc3Rhc2hpbmcsIGV0Yy4gd2l0aCBzdWJtb2R1bGVzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisKKwllY2hvIGZpbGUgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGNsb25lIC4gc3VibW9kdWxlICYmCisJZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHN1Ym1vZHVsZSAmJgorCWVjaG8gc2Vjb25kIGxpbmUgPj4gZmlsZSAmJgorCShjZCBzdWJtb2R1bGUgJiYgZ2l0IHB1bGwpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBmaWxlLWFuZC1zdWJtb2R1bGUgLWEgJiYKKwlnaXQgYnJhbmNoIGFkZGVkLXN1Ym1vZHVsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoIGEgZGlydHkgc3VibW9kdWxlJyAnCisKKwkoY2Qgc3VibW9kdWxlICYmCisJIGVjaG8gM3JkIGxpbmUgPj4gZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSBmb3JrIC1hKSAmJgorCWVjaG8gdW5yZWxhdGVkID4+IGZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdW5yZWxhdGVkIGZpbGUyICYmCisJZWNobyBvdGhlciBsaW5lID4+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHVwZGF0ZSBmaWxlICYmCisJQ1VSUkVOVD0kKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJRVhQRUNURUQ9JChnaXQgcmV2LXBhcnNlIEhFQUR+MjpzdWJtb2R1bGUpICYmCisJR0lUX1RSQUNFPTEgZ2l0IHJlYmFzZSAtLW9udG8gSEVBRH4yIEhFQUReICYmCisJU1RPUkVEPSQoZ2l0IHJldi1wYXJzZSBIRUFEOnN1Ym1vZHVsZSkgJiYKKwl0ZXN0ICRFWFBFQ1RFRCA9ICRTVE9SRUQgJiYKKwl0ZXN0ICRDVVJSRU5UID0gJChjZCBzdWJtb2R1bGUgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorCisnCisKK2NhdCA+IGZha2UtZWRpdG9yLnNoIDw8IFxFT0YKKyMhL2Jpbi9zaAorZWNobyAkRURJVE9SX1RFWFQKK0VPRgorY2htb2QgYSt4IGZha2UtZWRpdG9yLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ludGVyYWN0aXZlIHJlYmFzZSB3aXRoIGEgZGlydHkgc3VibW9kdWxlJyAnCisKKwl0ZXN0IHN1Ym1vZHVsZSA9ICQoZ2l0IGRpZmYgLS1uYW1lLW9ubHkpICYmCisJSEVBRD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlHSVRfRURJVE9SPSJcIiQocHdkKS9mYWtlLWVkaXRvci5zaFwiIiBFRElUT1JfVEVYVD0icGljayAkSEVBRCIgXAorCQlnaXQgcmViYXNlIC1pIEhFQUReICYmCisJdGVzdCBzdWJtb2R1bGUgPSAkKGdpdCBkaWZmIC0tbmFtZS1vbmx5KQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYmFzZSB3aXRoIGRpcnR5IGZpbGUgYW5kIHN1Ym1vZHVsZSBmYWlscycgJworCisJZWNobyB5ZXQgYW5vdGhlciBsaW5lID4+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG5leHQgZmlsZSAmJgorCWVjaG8gcmV3cml0ZSA+IGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJld3JpdGUgZmlsZSAmJgorCWVjaG8gZGlydHkgPiBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW9udG8gSEVBRH4yIEhFQUReCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3Rhc2ggd2l0aCBhIGRpcnR5IHN1Ym1vZHVsZScgJworCisJZWNobyBuZXcgPiBmaWxlICYmCisJQ1VSUkVOVD0kKGNkIHN1Ym1vZHVsZSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdCBuZXcgIT0gJChjYXQgZmlsZSkgJiYKKwl0ZXN0IHN1Ym1vZHVsZSA9ICQoZ2l0IGRpZmYgLS1uYW1lLW9ubHkpICYmCisJdGVzdCAkQ1VSUkVOVCA9ICQoY2Qgc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgc3Rhc2ggYXBwbHkgJiYKKwl0ZXN0IG5ldyA9ICQoY2F0IGZpbGUpICYmCisJdGVzdCAkQ1VSUkVOVCA9ICQoY2Qgc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2luZyBzdWJtb2R1bGUgdGhhdCBzaG91bGQgY29uZmxpY3QnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNoZWNrb3V0IGFkZGVkLXN1Ym1vZHVsZSAmJgorCWdpdCBhZGQgc3VibW9kdWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB0aGlyZCAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBleHRyYQorCSkgJiYKKwlnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gZm91cnRoICYmCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC0tb250byBIRUFEXl4gSEVBRF4gSEVBRF4wICYmCisJZ2l0IGxzLWZpbGVzIC1zIHN1Ym1vZHVsZSA+YWN0dWFsICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZWNobyAiMTYwMDAwICQoZ2l0IHJldi1wYXJzZSBIRUFEXikgMQlzdWJtb2R1bGUiICYmCisJCWVjaG8gIjE2MDAwMCAkKGdpdCByZXYtcGFyc2UgSEVBRF5eKSAyCXN1Ym1vZHVsZSIgJiYKKwkJZWNobyAiMTYwMDAwICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAzCXN1Ym1vZHVsZSIKKwkpID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwMy1zdWJtb2R1bGUtc3luYy5zaCBiL3QvdDc0MDMtc3VibW9kdWxlLXN5bmMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzliYzEzNQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc0MDMtc3VibW9kdWxlLXN5bmMuc2gKQEAgLTAsMCArMSwzNTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggRGF2aWQgQWd1aWxhcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3VibW9kdWxlIHN5bmMKKworVGhlc2UgdGVzdHMgZXhlcmNpc2UgdGhlICJnaXQgc3VibW9kdWxlIHN5bmMiIHN1YmNvbW1hbmQuCisnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwllY2hvIGZpbGUgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHVwc3RyZWFtICYmCisJZ2l0IGNsb25lIC4gc3VwZXIgJiYKKwlnaXQgY2xvbmUgc3VwZXIgc3VibW9kdWxlICYmCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1Yi1zdWJtb2R1bGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gInN1Yi1zdWJtb2R1bGUiCisJKSAmJgorCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1Ym1vZHVsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIgorCSkgJiYKKwlnaXQgY2xvbmUgc3VwZXIgc3VwZXItY2xvbmUgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZQorCSkgJiYKKwlnaXQgY2xvbmUgc3VwZXIgZW1wdHktY2xvbmUgJiYKKwkoCisJCWNkIGVtcHR5LWNsb25lICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdAorCSkgJiYKKwlnaXQgY2xvbmUgc3VwZXIgdG9wLW9ubHktY2xvbmUgJiYKKwlnaXQgY2xvbmUgc3VwZXIgcmVsYXRpdmUtY2xvbmUgJiYKKwkoCisJCWNkIHJlbGF0aXZlLWNsb25lICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZQorCSkgJiYKKwlnaXQgY2xvbmUgc3VwZXIgcmVjdXJzaXZlLWNsb25lICYmCisJKAorCQljZCByZWN1cnNpdmUtY2xvbmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugc3VibW9kdWxlJyAnCisJKAorCQljZCBzdWJtb2R1bGUgJiYKKwkJZWNobyBzZWNvbmQgbGluZSA+PmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSBzdWJtb2R1bGUiCisJKQorJworCityZXNldF9zdWJtb2R1bGVfdXJscyAoKSB7CisJbG9jYWwgcm9vdAorCXJvb3Q9JChwd2QpICYmCisJKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCAiJHJvb3Qvc3VibW9kdWxlIgorCSkgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCWdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwgIiRyb290L3N1Ym1vZHVsZSIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBzdWJtb2R1bGUgdXJsJyAnCisJKAorCQljZCBzdXBlciAmJgorCQljZCBzdWJtb2R1bGUgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgcHVsbAorCSkgJiYKKwltdiBzdWJtb2R1bGUgbW92ZWQtc3VibW9kdWxlICYmCisJKAorCQljZCBtb3ZlZC1zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3ViLXN1Ym1vZHVsZS51cmwgLi4vbW92ZWQtc3VibW9kdWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIG1vdmVkLXN1Yi1zdWJtb2R1bGUKKwkpICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsIC4uL21vdmVkLXN1Ym1vZHVsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSBtb3ZlZC1zdWJtb2R1bGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIHNob3VsZCB1cGRhdGUgc3VibW9kdWxlIFVSTHMnICcKKwkoCisJCWNkIHN1cGVyLWNsb25lICYmCisJCWdpdCBwdWxsIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYworCSkgJiYKKwl0ZXN0IC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybAorCSkiICYmCisJdGVzdCAhIC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJKSIgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBwdWxsCisJKSAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJdGVzdCAtZCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUiIHNob3VsZCB1cGRhdGUgYWxsIHN1Ym1vZHVsZSBVUkxzJyAnCisJKAorCQljZCBzdXBlci1jbG9uZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBwdWxsIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzCisJCSkgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jIC0tcmVjdXJzaXZlCisJKSAmJgorCXRlc3QgLWQgIiQoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJKSIgJiYKKwl0ZXN0IC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJKSIgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHB1bGwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IHN1Ym1vZHVsZSBVUkxzJyAnCisJcmVzZXRfc3VibW9kdWxlX3VybHMgc3VwZXItY2xvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgc2hvdWxkIHVwZGF0ZSBzdWJtb2R1bGUgVVJMcyAtIHN1YmRpcmVjdG9yeScgJworCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJZ2l0IHB1bGwgLS1uby1yZWN1cnNlLXN1Ym1vZHVsZXMgJiYKKwkJbWtkaXIgLXAgc3ViICYmCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgPi4uLy4uL291dHB1dAorCSkgJiYKKwlncmVwICJcXC5cXC4vc3VibW9kdWxlIiBvdXRwdXQgJiYKKwl0ZXN0IC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybAorCSkiICYmCisJdGVzdCAhIC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJKSIgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZSAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBwdWxsCisJKSAmJgorCSgKKwkJY2Qgc3VwZXItY2xvbmUgJiYKKwkJdGVzdCAtZCAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUiIHNob3VsZCB1cGRhdGUgYWxsIHN1Ym1vZHVsZSBVUkxzIC0gc3ViZGlyZWN0b3J5JyAnCisJKAorCQljZCBzdXBlci1jbG9uZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCWdpdCBwdWxsIC0tbm8tcmVjdXJzZS1zdWJtb2R1bGVzCisJCSkgJiYKKwkJbWtkaXIgLXAgc3ViICYmCisJCWNkIHN1YiAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgLS1yZWN1cnNpdmUgPi4uLy4uL291dHB1dAorCSkgJiYKKwlncmVwICJcXC5cXC4vc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUiIG91dHB1dCAmJgorCXRlc3QgLWQgIiQoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJKSIgJiYKKwl0ZXN0IC1kICIkKAorCQljZCBzdXBlci1jbG9uZS9zdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsCisJKSIgJiYKKwkoCisJCWNkIHN1cGVyLWNsb25lL3N1Ym1vZHVsZS9zdWItc3VibW9kdWxlICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHB1bGwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIHNob3VsZCB1cGRhdGUga25vd24gc3VibW9kdWxlIFVSTHMnICcKKwkoCisJCWNkIGVtcHR5LWNsb25lICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQl0ZXN0IC1kICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwpIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgc2hvdWxkIG5vdCB2aXZpZnkgdW5pbnRlcmVzdGluZyBzdWJtb2R1bGUnICcKKwkoCisJCWNkIHRvcC1vbmx5LWNsb25lICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQl0ZXN0IC16ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cmwpIiAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgc3VibW9kdWxlICYmCisJCXRlc3QgLXogIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBoYW5kbGVzIG9yaWdpbiBVUkwgb2YgdGhlIGZvcm0gZm9vJyAnCisJKAorCQljZCByZWxhdGl2ZS1jbG9uZSAmJgorCQlnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIGZvbyAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQkjYWN0dWFsIGZhaWxzIHdpdGg6ICJjYW5ub3Qgc3RyaXAgb2ZmIHVybCBmb28KKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uL3N1Ym1vZHVsZSIKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIGZvby9iYXInICcKKwkoCisJCWNkIHJlbGF0aXZlLWNsb25lICYmCisJCWdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gZm9vL2JhciAmJgorCQlnaXQgc3VibW9kdWxlIHN5bmMgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlICYmCisJCQkjYWN0dWFsIGZvby9zdWJtb2R1bGUKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uL2Zvby9zdWJtb2R1bGUiCisJCSkgJiYKKwkJKAorCQkJY2Qgc3VibW9kdWxlL3N1Yi1zdWJtb2R1bGUgJiYKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiICE9ICIuLi8uLi9mb28vc3VibW9kdWxlIgorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIC0tcmVjdXJzaXZlIiBwcm9wYWdhdGVzIGNoYW5nZXMgaW4gb3JpZ2luJyAnCisJKAorCQljZCByZWN1cnNpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiBmb28vYmFyICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAtLXJlY3Vyc2l2ZSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCSNhY3R1YWwgZm9vL3N1Ym1vZHVsZQorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vZm9vL3N1Ym1vZHVsZSIKKwkJKSAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUvc3ViLXN1Ym1vZHVsZSAmJgorCQkJdGVzdCAiJChnaXQgY29uZmlnIHJlbW90ZS5vcmlnaW4udXJsKSIgPSAiLi4vLi4vZm9vL3N1Ym1vZHVsZSIKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIC4vZm9vJyAnCisJKAorCQljZCByZWxhdGl2ZS1jbG9uZSAmJgorCQlnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIC4vZm9vICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCSNhY3R1YWwgLi9zdWJtb2R1bGUKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uL3N1Ym1vZHVsZSIKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImdpdCBzdWJtb2R1bGUgc3luYyIgaGFuZGxlcyBvcmlnaW4gVVJMIG9mIHRoZSBmb3JtIC4vZm9vL2JhcicgJworCSgKKwkJY2QgcmVsYXRpdmUtY2xvbmUgJiYKKwkJZ2l0IHJlbW90ZSBzZXQtdXJsIG9yaWdpbiAuL2Zvby9iYXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJI2FjdHVhbCAuL2Zvby9zdWJtb2R1bGUKKwkJCXRlc3QgIiQoZ2l0IGNvbmZpZyByZW1vdGUub3JpZ2luLnVybCkiID0gIi4uL2Zvby9zdWJtb2R1bGUiCisJCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIGhhbmRsZXMgb3JpZ2luIFVSTCBvZiB0aGUgZm9ybSAuLi9mb28nICcKKwkoCisJCWNkIHJlbGF0aXZlLWNsb25lICYmCisJCWdpdCByZW1vdGUgc2V0LXVybCBvcmlnaW4gLi4vZm9vICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQkoCisJCQljZCBzdWJtb2R1bGUgJiYKKwkJCSNhY3R1YWwgLi4vc3VibW9kdWxlCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi8uLi9zdWJtb2R1bGUiCisJCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJnaXQgc3VibW9kdWxlIHN5bmMiIGhhbmRsZXMgb3JpZ2luIFVSTCBvZiB0aGUgZm9ybSAuLi9mb28vYmFyJyAnCisJKAorCQljZCByZWxhdGl2ZS1jbG9uZSAmJgorCQlnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIC4uL2Zvby9iYXIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzeW5jICYmCisJCSgKKwkJCWNkIHN1Ym1vZHVsZSAmJgorCQkJI2FjdHVhbCAuLi9mb28vc3VibW9kdWxlCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi8uLi9mb28vc3VibW9kdWxlIgorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciZ2l0IHN1Ym1vZHVsZSBzeW5jIiBoYW5kbGVzIG9yaWdpbiBVUkwgb2YgdGhlIGZvcm0gLi4vZm9vL2JhciB3aXRoIGRlZXBseSBuZXN0ZWQgc3VibW9kdWxlJyAnCisJKAorCQljZCByZWxhdGl2ZS1jbG9uZSAmJgorCQlnaXQgcmVtb3RlIHNldC11cmwgb3JpZ2luIC4uL2Zvby9iYXIgJiYKKwkJbWtkaXIgLXAgYS9iL2MgJiYKKwkJKAorCQkJY2QgYS9iL2MgJiYKKwkJCWdpdCBpbml0ICYmCisJCQk+LmdpdGlnbm9yZSAmJgorCQkJZ2l0IGFkZCAuZ2l0aWdub3JlICYmCisJCQl0ZXN0X3RpY2sgJiYKKwkJCWdpdCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IgorCQkpICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL2Jhci9hL2IvYyAuL2EvYi9jICYmCisJCWdpdCBzdWJtb2R1bGUgc3luYyAmJgorCQkoCisJCQljZCBhL2IvYyAmJgorCQkJI2FjdHVhbCAuLi9mb28vYmFyL2EvYi9jCisJCQl0ZXN0ICIkKGdpdCBjb25maWcgcmVtb3RlLm9yaWdpbi51cmwpIiA9ICIuLi8uLi8uLi8uLi9mb28vYmFyL2EvYi9jIgorCQkpCisJKQorJworCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwNS1zdWJtb2R1bGUtbWVyZ2Uuc2ggYi90L3Q3NDA1LXN1Ym1vZHVsZS1tZXJnZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZDViNDJhCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwNS1zdWJtb2R1bGUtbWVyZ2Uuc2gKQEAgLTAsMCArMSwyODIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnaW5nIHdpdGggc3VibW9kdWxlcycKKworLiAuL3Rlc3QtbGliLnNoCisKKyMKKyMgaGlzdG9yeQorIworIyAgICAgICAgYSAtLS0gYworIyAgICAgIC8gICBcIC8KKyMgcm9vdCAgICAgIFgKKyMgICAgICBcICAgLyBcCisjICAgICAgICBiIC0tLSBkCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJbWtkaXIgc3ViICYmCisJKGNkIHN1YiAmJgorCSBnaXQgaW5pdCAmJgorCSBlY2hvIG9yaWdpbmFsID4gZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gc3ViLXJvb3QpICYmCisJZ2l0IGFkZCBzdWIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIHJvb3QgJiYKKworCWdpdCBjaGVja291dCAtYiBhIG1hc3RlciAmJgorCShjZCBzdWIgJiYKKwkgZWNobyBBID4gZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gc3ViLWEpICYmCisJZ2l0IGFkZCBzdWIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGEgJiYKKworCWdpdCBjaGVja291dCAtYiBiIG1hc3RlciAmJgorCShjZCBzdWIgJiYKKwkgZWNobyBCID4gZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gc3ViLWIpICYmCisJZ2l0IGFkZCBzdWIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGIgJiYKKworCWdpdCBjaGVja291dCAtYiBjIGEgJiYKKwlnaXQgbWVyZ2UgLXMgb3VycyBiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgZCBiICYmCisJZ2l0IG1lcmdlIC1zIG91cnMgYQorJworCisjIEhpc3Rvcnkgc2V0dXAKKyMKKyMgICAgICAgICAgICAgYgorIyAgICAgICAgICAgLyAgIFwKKyMgIGluaXQgLS0gYSAgICAgZAorIyAgICBcICAgICAgXCAgIC8KKyMgICAgIGcgICAgICAgYworIworIyBhIGluIHRoZSBtYWluIHJlcG9zaXRvcnkgcmVjb3JkcyB0byBzdWItYSBpbiB0aGUgc3VibW9kdWxlIGFuZAorIyBhbmFsb2dvdXMgYiBhbmQgYy4gZCBzaG91bGQgYmUgYXV0b21hdGljYWxseSBmb3VuZCBieSBtZXJnaW5nIGMgaW50bworIyBiIGluIHRoZSBtYWluIHJlcG9zaXRvcnkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgbWVyZ2Ugc2VhcmNoJyAnCisJbWtkaXIgbWVyZ2Utc2VhcmNoICYmCisJKGNkIG1lcmdlLXNlYXJjaCAmJgorCWdpdCBpbml0ICYmCisJbWtkaXIgc3ViICYmCisJKGNkIHN1YiAmJgorCSBnaXQgaW5pdCAmJgorCSBlY2hvICJmaWxlLWEiID4gZmlsZS1hICYmCisJIGdpdCBhZGQgZmlsZS1hICYmCisJIGdpdCBjb21taXQgLW0gInN1Yi1hIiAmJgorCSBnaXQgYnJhbmNoIHN1Yi1hKSAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBpbml0ICYmCisJZ2l0IGJyYW5jaCBpbml0ICYmCisJZ2l0IGFkZCBzdWIgJiYKKwlnaXQgY29tbWl0IC1tICJhIiAmJgorCWdpdCBicmFuY2ggYSAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGIgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBjaGVja291dCAtYiBzdWItYiAmJgorCSBlY2hvICJmaWxlLWIiID4gZmlsZS1iICYmCisJIGdpdCBhZGQgZmlsZS1iICYmCisJIGdpdCBjb21taXQgLW0gInN1Yi1iIikgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJiIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGMgYSAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHN1Yi1jIHN1Yi1hICYmCisJIGVjaG8gImZpbGUtYyIgPiBmaWxlLWMgJiYKKwkgZ2l0IGFkZCBmaWxlLWMgJiYKKwkgZ2l0IGNvbW1pdCAtbSAic3ViLWMiKSAmJgorCWdpdCBjb21taXQgLWEgLW0gImMiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgZCBhICYmCisJKGNkIHN1YiAmJgorCSBnaXQgY2hlY2tvdXQgLWIgc3ViLWQgc3ViLWIgJiYKKwkgZ2l0IG1lcmdlIHN1Yi1jKSAmJgorCWdpdCBjb21taXQgLWEgLW0gImQiICYmCisJZ2l0IGJyYW5jaCB0ZXN0IGIgJiYKKworCWdpdCBjaGVja291dCAtYiBnIGluaXQgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBjaGVja291dCAtYiBzdWItZyBzdWItYykgJiYKKwlnaXQgYWRkIHN1YiAmJgorCWdpdCBjb21taXQgLWEgLW0gImciKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB3aXRoIG9uZSBzaWRlIGFzIGEgZmFzdC1mb3J3YXJkIG9mIHRoZSBvdGhlcicgJworCShjZCBtZXJnZS1zZWFyY2ggJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHRlc3QtZm9yd2FyZCBiICYmCisJIGdpdCBtZXJnZSBkICYmCisJIGdpdCBscy10cmVlIHRlc3QtZm9yd2FyZCBzdWIgfCBjdXQgLWYxIHwgY3V0IC1mMyAtZCIgIiA+IGFjdHVhbCAmJgorCSAoY2Qgc3ViICYmCisJICBnaXQgcmV2LXBhcnNlIHN1Yi1kID4gLi4vZXhwZWN0KSAmJgorCSB0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnaW5nIHNob3VsZCBjb25mbGljdCBmb3Igbm9uIGZhc3QtZm9yd2FyZCcgJworCShjZCBtZXJnZS1zZWFyY2ggJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHRlc3Qtbm9uZm9yd2FyZCBiICYmCisJIChjZCBzdWIgJiYKKwkgIGdpdCByZXYtcGFyc2Ugc3ViLWQgPiAuLi9leHBlY3QpICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjIDI+IGFjdHVhbCAgJiYKKwkgZ3JlcCAkKGNhdCBleHBlY3QpIGFjdHVhbCA+IC9kZXYvbnVsbCAmJgorCSBnaXQgcmVzZXQgLS1oYXJkKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnaW5nIHNob3VsZCBmYWlsIGZvciBhbWJpZ3VvdXMgY29tbW9uIHBhcmVudCcgJworCShjZCBtZXJnZS1zZWFyY2ggJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdC1hbWJpZ3VvdXMgYiAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIGFtYmlndW91cyBzdWItYiAmJgorCSBnaXQgbWVyZ2Ugc3ViLWMgJiYKKwkgZ2l0IHJldi1wYXJzZSBzdWItZCA+IC4uL2V4cGVjdDEgJiYKKwkgZ2l0IHJldi1wYXJzZSBhbWJpZ3VvdXMgPiAuLi9leHBlY3QyKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjIDI+IGFjdHVhbCAmJgorCWdyZXAgJChjYXQgZXhwZWN0MSkgYWN0dWFsID4gL2Rldi9udWxsICYmCisJZ3JlcCAkKGNhdCBleHBlY3QyKSBhY3R1YWwgPiAvZGV2L251bGwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkKQorJworCisjIGluIGEgc2l0dWF0aW9uIGxpa2UgdGhpcworIworIyBzdWJtb2R1bGUgdHJlZToKKyMKKyMgICAgc3ViLWEgLS0tIHN1Yi1iIC0tLSBzdWItZAorIworIyBtYWluIHRyZWU6CisjCisjICAgIGUgKHN1Yi1hKQorIyAgIC8KKyMgIGJiIChzdWItYikKKyMgICBcCisjICAgIGYgKHN1Yi1kKQorIworIyBBIG1lcmdlIGJldHdlZW4gZSBhbmQgZiBzaG91bGQgZmFpbCBiZWNhdXNlIG9uZSBvZiB0aGUgc3VibW9kdWxlCisjIGNvbW1pdHMgKHN1Yi1hKSBkb2VzIG5vdCBkZXNjZW5kIGZyb20gdGhlIHN1Ym1vZHVsZSBtZXJnZS1iYXNlIChzdWItYikuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnaW5nIHNob3VsZCBmYWlsIGZvciBjaGFuZ2VzIHRoYXQgYXJlIGJhY2t3YXJkcycgJworCShjZCBtZXJnZS1zZWFyY2ggJiYKKwlnaXQgY2hlY2tvdXQgLWIgYmIgYSAmJgorCShjZCBzdWIgJiYKKwkgZ2l0IGNoZWNrb3V0IHN1Yi1iKSAmJgorCWdpdCBjb21taXQgLWEgLW0gImJiIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGUgYmIgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBjaGVja291dCBzdWItYSkgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJlIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGYgYmIgJiYKKwkoY2Qgc3ViICYmCisJIGdpdCBjaGVja291dCBzdWItZCkgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJmIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QtYmFja3dhcmQgZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBmKQorJworCisKKyMgQ2hlY2sgdGhhdCB0aGUgY29uZmxpY3Rpbmcgc3VibW9kdWxlIGlzIGRldGVjdGVkIHdoZW4gaXQgaXMKKyMgaW4gdGhlIGNvbW1vbiBhbmNlc3Rvci4gc3RhdHVzIHNob3VsZCBiZSAnVTAwLi4uMDAiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3VibW9kdWxlIHN0YXR1cyBzaG91bGQgZGlzcGxheSB0aGUgbWVyZ2UgY29uZmxpY3QgcHJvcGVybHkgd2l0aCBtZXJnZSBiYXNlJyAnCisgICAgICAgKGNkIG1lcmdlLXNlYXJjaCAmJgorICAgICAgIGNhdCA+LmdpdG1vZHVsZXMgPDxFT0YgJiYKK1tzdWJtb2R1bGUgInN1YiJdCisgICAgICAgcGF0aCA9IHN1YgorICAgICAgIHVybCA9ICRUUkFTSF9ESVJFQ1RPUlkvc3ViCitFT0YKKyAgICAgICBjYXQgPmV4cGVjdCA8PEVPRiAmJgorVTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgc3ViCitFT0YKKyAgICAgICBnaXQgc3VibW9kdWxlIHN0YXR1cyA+IGFjdHVhbCAmJgorICAgICAgIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkKQorJworCisjIENoZWNrIHRoYXQgdGhlIGNvbmZsaWN0aW5nIHN1Ym1vZHVsZSBpcyBkZXRlY3RlZCB3aGVuIGl0IGlzCisjIG5vdCBpbiB0aGUgY29tbW9uIGFuY2VzdG9yLiBzdGF0dXMgc2hvdWxkIGJlICdVMDAuLi4wMCIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdWJtb2R1bGUgc3RhdHVzIHNob3VsZCBkaXNwbGF5IHRoZSBtZXJnZSBjb25mbGljdCBwcm9wZXJseSB3aXRob3V0IG1lcmdlLWJhc2UnICcKKyAgICAgICAoY2QgbWVyZ2Utc2VhcmNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3Qtbm8tbWVyZ2UtYmFzZSBnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGIgJiYKKyAgICAgICBjYXQgPi5naXRtb2R1bGVzIDw8RU9GICYmCitbc3VibW9kdWxlICJzdWIiXQorICAgICAgIHBhdGggPSBzdWIKKyAgICAgICB1cmwgPSAkVFJBU0hfRElSRUNUT1JZL3N1YgorRU9GCisgICAgICAgY2F0ID5leHBlY3QgPDxFT0YgJiYKK1UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIHN1YgorRU9GCisgICAgICAgZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgPiBhY3R1YWwgJiYKKyAgICAgICB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisgICAgICAgZ2l0IHJlc2V0IC0taGFyZCkKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnaW5nIHdpdGggYSBtb2RpZnkvbW9kaWZ5IGNvbmZsaWN0IGJldHdlZW4gbWVyZ2UgYmFzZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdDIgYyAmJgorCWdpdCBtZXJnZSBkCisnCisKKyMgY2Fub25pY2FsIGNyaXNzLWNyb3NzIGhpc3RvcnkgaW4gdG9wIGFuZCBzdWJtb2R1bGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciByZWN1cnNpdmUgbWVyZ2Ugd2l0aCBzdWJtb2R1bGUnICcKKwlta2RpciBtZXJnZS1yZWN1cnNpdmUgJiYKKwkoY2QgbWVyZ2UtcmVjdXJzaXZlICYmCisJIGdpdCBpbml0ICYmCisJIG1rZGlyIHN1YiAmJgorCSAoY2Qgc3ViICYmCisJICBnaXQgaW5pdCAmJgorCSAgdGVzdF9jb21taXQgYSAmJgorCSAgZ2l0IGNoZWNrb3V0IC1iIHN1Yi1iIG1hc3RlciAmJgorCSAgdGVzdF9jb21taXQgYiAmJgorCSAgZ2l0IGNoZWNrb3V0IC1iIHN1Yi1jIG1hc3RlciAmJgorCSAgdGVzdF9jb21taXQgYyAmJgorCSAgZ2l0IGNoZWNrb3V0IC1iIHN1Yi1iYyBzdWItYiAmJgorCSAgZ2l0IG1lcmdlIHN1Yi1jICYmCisJICBnaXQgY2hlY2tvdXQgLWIgc3ViLWNiIHN1Yi1jICYmCisJICBnaXQgbWVyZ2Ugc3ViLWIgJiYKKwkgIGdpdCBjaGVja291dCBtYXN0ZXIpICYmCisJIGdpdCBhZGQgc3ViICYmCisJIGdpdCBjb21taXQgLW0gYSAmJgorCSBnaXQgY2hlY2tvdXQgLWIgdG9wLWIgbWFzdGVyICYmCisJIChjZCBzdWIgJiYgZ2l0IGNoZWNrb3V0IHN1Yi1iKSAmJgorCSBnaXQgYWRkIHN1YiAmJgorCSBnaXQgY29tbWl0IC1tIGIgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHRvcC1jIG1hc3RlciAmJgorCSAoY2Qgc3ViICYmIGdpdCBjaGVja291dCBzdWItYykgJiYKKwkgZ2l0IGFkZCBzdWIgJiYKKwkgZ2l0IGNvbW1pdCAtbSBjICYmCisJIGdpdCBjaGVja291dCAtYiB0b3AtYmMgdG9wLWIgJiYKKwkgZ2l0IG1lcmdlIC1zIG91cnMgLS1uby1jb21taXQgdG9wLWMgJiYKKwkgKGNkIHN1YiAmJiBnaXQgY2hlY2tvdXQgc3ViLWJjKSAmJgorCSBnaXQgYWRkIHN1YiAmJgorCSBnaXQgY29tbWl0IC1tIGJjICYmCisJIGdpdCBjaGVja291dCAtYiB0b3AtY2IgdG9wLWMgJiYKKwkgZ2l0IG1lcmdlIC1zIG91cnMgLS1uby1jb21taXQgdG9wLWIgJiYKKwkgKGNkIHN1YiAmJiBnaXQgY2hlY2tvdXQgc3ViLWNiKSAmJgorCSBnaXQgYWRkIHN1YiAmJgorCSBnaXQgY29tbWl0IC1tIGNiKQorJworCisjIG1lcmdlIHNob3VsZCBsZWF2ZSBzdWJtb2R1bGUgdW5tZXJnZWQgaW4gaW5kZXgKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlY3Vyc2l2ZSBtZXJnZSB3aXRoIHN1Ym1vZHVsZScgJworCShjZCBtZXJnZS1yZWN1cnNpdmUgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRvcC1iYyAmJgorCSBlY2hvICIxNjAwMDAgJChnaXQgcmV2LXBhcnNlIHRvcC1jYjpzdWIpIDIJc3ViIiA+IGV4cGVjdDIgJiYKKwkgZWNobyAiMTYwMDAwICQoZ2l0IHJldi1wYXJzZSB0b3AtYmM6c3ViKSAzCXN1YiIgPiBleHBlY3QzICYmCisJIGdpdCBscy1maWxlcyAtdSA+IGFjdHVhbCAmJgorCSBncmVwICIkKGNhdCBleHBlY3QyKSIgYWN0dWFsID4gL2Rldi9udWxsICYmCisJIGdyZXAgIiQoY2F0IGV4cGVjdDMpIiBhY3R1YWwgPiAvZGV2L251bGwpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwNi1zdWJtb2R1bGUtdXBkYXRlLnNoIGIvdC90NzQwNi1zdWJtb2R1bGUtdXBkYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRkYTM5MjkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDA2LXN1Ym1vZHVsZS11cGRhdGUuc2gKQEAgLTAsMCArMSw3NzcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgUmVkIEhhdCwgSW5jLgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdUZXN0IHVwZGF0aW5nIHN1Ym1vZHVsZXMKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgImdpdCBzdWJtb2R1bGUgdXBkYXRlIiBkZXRhY2hlcyB0aGUgSEVBRCBvZiB0aGUKK3N1Ym1vZHVsZSBhbmQgImdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlLy0tbWVyZ2UiIGRvZXMgbm90IGRldGFjaCB0aGUgSEVBRC4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKKworY29tcGFyZV9oZWFkKCkKK3sKKyAgICBzaGFfbWFzdGVyPWBnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBtYXN0ZXJgCisgICAgc2hhX2hlYWQ9YGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQURgCisKKyAgICB0ZXN0ICIkc2hhX21hc3RlciIgPSAiJHNoYV9oZWFkIgorfQorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGEgc3VibW9kdWxlIHRyZWUnICcKKwllY2hvIGZpbGUgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSB1cHN0cmVhbSAmJgorCWdpdCBjbG9uZSAuIHN1cGVyICYmCisJZ2l0IGNsb25lIHN1cGVyIHN1Ym1vZHVsZSAmJgorCWdpdCBjbG9uZSBzdXBlciByZWJhc2luZyAmJgorCWdpdCBjbG9uZSBzdXBlciBtZXJnaW5nICYmCisJZ2l0IGNsb25lIHN1cGVyIG5vbmUgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1Ym1vZHVsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSAic3VibW9kdWxlIiAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgc3VibW9kdWxlCisJKSAmJgorCShjZCBzdWJtb2R1bGUgJiYKKwllY2hvICJsaW5lMiIgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiQ29tbWl0IDIiCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgcHVsbCAtLXJlYmFzZSBvcmlnaW4KKwkgKSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCSBnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUgdXBkYXRlIgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vcmViYXNpbmcgcmViYXNpbmcgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gInJlYmFzaW5nIgorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vbWVyZ2luZyBtZXJnaW5nICYmCisJIHRlc3RfdGljayAmJgorCSBnaXQgY29tbWl0IC1tICJyZWJhc2luZyIKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL25vbmUgbm9uZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSAibm9uZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgZGV0YWNoaW5nIHRoZSBIRUFEICcgJworCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgISBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgZnJvbSBzdWJkaXJlY3RvcnknICcKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCW1rZGlyIHN1cGVyL3N1YiAmJgorCShjZCBzdXBlci9zdWIgJiYKKwkgKGNkIC4uL3N1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLi4vc3VibW9kdWxlICYmCisJIGNkIC4uL3N1Ym1vZHVsZSAmJgorCSAhIGNvbXBhcmVfaGVhZAorCSkKKycKKworYXBvcz0iJyI7Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGRvZXMgbm90IGZldGNoIGFscmVhZHkgcHJlc2VudCBjb21taXRzJyAnCisJKGNkIHN1Ym1vZHVsZSAmJgorCSAgZWNobyBsaW5lMyA+PiBmaWxlICYmCisJICBnaXQgYWRkIGZpbGUgJiYKKwkgIHRlc3RfdGljayAmJgorCSAgZ2l0IGNvbW1pdCAtbSAidXBzdHJlYW0gbGluZTMiCisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGhlYWQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJICBlY2hvICJTdWJtb2R1bGUgcGF0aCAke2Fwb3N9c3VibW9kdWxlJGFwb3M6IGNoZWNrZWQgb3V0ICRhcG9zJGhlYWQkYXBvcyIgPiAuLi8uLi9leHBlY3RlZCAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJICBnaXQgc3VibW9kdWxlIHVwZGF0ZSA+IC4uL2FjdHVhbCAyPiAuLi9hY3R1YWwuZXJyCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwkhIHRlc3QgLXMgYWN0dWFsLmVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIHNob3VsZCBmYWlsIGR1ZSB0byBsb2NhbCBjaGFuZ2VzJyAnCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MSAmJgorCSBlY2hvICJsb2NhbCBjaGFuZ2UiID4gZmlsZQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlCisJKQorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBzaG91bGQgdGhyb3cgYXdheSBjaGFuZ2VzIHdpdGggLS1mb3JjZSAnICcKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1mb3JjZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJICEgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0tZm9yY2UgZm9yY2libHkgY2hlY2tzIG91dCBzdWJtb2R1bGVzJyAnCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIHJtIC1mIGZpbGUKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWZvcmNlIHN1Ym1vZHVsZSAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICB0ZXN0ICIkKGdpdCBzdGF0dXMgLXMgZmlsZSkiID0gIiIKKwkgKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSBzaG91bGQgZmV0Y2ggdXBzdHJlYW0gY2hhbmdlcycgJworCShjZCBzdWJtb2R1bGUgJiYKKwkgZWNobyBsaW5lNCA+PiBmaWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSB0ZXN0X3RpY2sgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidXBzdHJlYW0gbGluZTQiCisJKSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlbW90ZSAtLWZvcmNlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgdGVzdCAiJChnaXQgbG9nIC0xIC0tb25lbGluZSkiID0gIiQoR0lUX0RJUj0uLi8uLi9zdWJtb2R1bGUvLmdpdCBnaXQgbG9nIC0xIC0tb25lbGluZSkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2NhbCBjb25maWcgc2hvdWxkIG92ZXJyaWRlIC5naXRtb2R1bGVzIGJyYW5jaCcgJworCShjZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGNoZWNrb3V0IC1iIHRlc3QtYnJhbmNoICYmCisJIGVjaG8gbGluZTUgPj4gZmlsZSAmJgorCSBnaXQgYWRkIGZpbGUgJiYKKwkgdGVzdF90aWNrICYmCisJIGdpdCBjb21taXQgLW0gInVwc3RyZWFtIGxpbmU1IiAmJgorCSBnaXQgY2hlY2tvdXQgbWFzdGVyCisJKSAmJgorCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUuYnJhbmNoIHRlc3QtYnJhbmNoICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVtb3RlIC0tZm9yY2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSB0ZXN0ICIkKGdpdCBsb2cgLTEgLS1vbmVsaW5lKSIgPSAiJChHSVRfRElSPS4uLy4uL3N1Ym1vZHVsZS8uZ2l0IGdpdCBsb2cgLTEgLS1vbmVsaW5lIHRlc3QtYnJhbmNoKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1yZWJhc2Ugc3RheWluZyBvbiBtYXN0ZXInICcKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgY2hlY2tvdXQgbWFzdGVyCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlYmFzZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJIGNvbXBhcmVfaGVhZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLW1lcmdlIHN0YXlpbmcgb24gbWFzdGVyJyAnCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tbWVyZ2Ugc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSByZWJhc2UgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSByZWJhc2UKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY2hlY2tvdXQgaW4gLmdpdC9jb25maWcgYnV0IC0tcmViYXNlIGdpdmVuJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgY2hlY2tvdXQKKwkpICYmCisJKGNkIHN1cGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEfjEKKwkpICYmCisJKGNkIHN1cGVyICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gbWVyZ2UgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBtZXJnZQorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUR+MQorCSkgJiYKKwkoY2Qgc3VwZXIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgY29tcGFyZV9oZWFkCisJICkgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGNkIHN1Ym1vZHVsZSAmJgorCSBjb21wYXJlX2hlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLSBjaGVja291dCBpbiAuZ2l0L2NvbmZpZyBidXQgLS1tZXJnZSBnaXZlbicgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIGNoZWNrb3V0CisJKSAmJgorCShjZCBzdXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCByZXNldCAtLWhhcmQgSEVBRH4xCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLW1lcmdlIHN1Ym1vZHVsZSAmJgorCSBjZCBzdWJtb2R1bGUgJiYKKwkgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY2hlY2tvdXQgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBjaGVja291dAorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJICEgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY29tbWFuZCBpbiAuZ2l0L2NvbmZpZycgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlICIhZ2l0IGNoZWNrb3V0IgorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJKSAmJgorCShjZCBzdXBlciAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgY2Qgc3VibW9kdWxlICYmCisJICEgY29tcGFyZV9oZWFkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gY29tbWFuZCBpbiAuZ2l0L2NvbmZpZyBjYXRjaGVzIGZhaWx1cmUnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSAiIWZhbHNlIgorCSkgJiYKKwkoY2Qgc3VwZXIvc3VibW9kdWxlICYmCisJICBnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJKSAmJgorCShjZCBzdXBlciAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IGRvZXMgbm90IGNvcHkgY29tbWFuZCBpbnRvIC5naXQvY29uZmlnJyAnCisJKGNkIHN1cGVyICYmCisJIEg9JChnaXQgbHMtZmlsZXMgLXMgc3VibW9kdWxlIHwgY3V0IC1kIiAiIC1mMikgJiYKKwkgbWtkaXIgc3VibW9kdWxlMSAmJgorCSBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tY2FjaGVpbmZvIDE2MDAwMCAkSCBzdWJtb2R1bGUxICYmCisJIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZTEucGF0aCBzdWJtb2R1bGUxICYmCisJIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym1vZHVsZTEudXJsIC4uL3N1Ym1vZHVsZSAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUxLnVwZGF0ZSAhZmFsc2UgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0IHN1Ym1vZHVsZTEgJiYKKwkgZWNobyAibm9uZSIgPmV4cGVjdCAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUxLnVwZGF0ZSA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IHBpY2tzIHVwIHJlYmFzZScgJworCShjZCBzdXBlciAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5yZWJhc2luZy51cGRhdGUgcmViYXNlICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCByZWJhc2luZyAmJgorCSB0ZXN0ICJyZWJhc2UiID0gIiQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUucmViYXNpbmcudXBkYXRlKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IHBpY2tzIHVwIG1lcmdlJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLm1lcmdpbmcudXBkYXRlIG1lcmdlICYmCisJIGdpdCBzdWJtb2R1bGUgaW5pdCBtZXJnaW5nICYmCisJIHRlc3QgIm1lcmdlIiA9ICIkKGdpdCBjb25maWcgc3VibW9kdWxlLm1lcmdpbmcudXBkYXRlKSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1tZXJnZSAgLSBpZ25vcmVzIC0tbWVyZ2UgIGZvciBuZXcgc3VibW9kdWxlcycgJworCShjZCBzdXBlciAmJgorCSBybSAtcmYgc3VibW9kdWxlICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+ZXhwZWN0ICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1tZXJnZSBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN0YXR1cyAtcyBzdWJtb2R1bGUgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlIC0gaWdub3JlcyAtLXJlYmFzZSBmb3IgbmV3IHN1Ym1vZHVsZXMnICcKKwkoY2Qgc3VwZXIgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN0YXR1cyAtcyBzdWJtb2R1bGUgPmV4cGVjdCAmJgorCSBybSAtcmYgc3VibW9kdWxlICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmViYXNlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgaWdub3JlcyB1cGRhdGU9bWVyZ2UgY29uZmlnIGZvciBuZXcgc3VibW9kdWxlcycgJworCShjZCBzdXBlciAmJgorCSBybSAtcmYgc3VibW9kdWxlICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+ZXhwZWN0ICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBtZXJnZSAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSBzdWJtb2R1bGUgJiYKKwkgZ2l0IHN0YXR1cyAtcyBzdWJtb2R1bGUgPmFjdHVhbCAmJgorCSBnaXQgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBpZ25vcmVzIHVwZGF0ZT1yZWJhc2UgY29uZmlnIGZvciBuZXcgc3VibW9kdWxlcycgJworCShjZCBzdXBlciAmJgorCSBybSAtcmYgc3VibW9kdWxlICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIHN1Ym1vZHVsZSAmJgorCSBnaXQgc3RhdHVzIC1zIHN1Ym1vZHVsZSA+ZXhwZWN0ICYmCisJIHJtIC1yZiBzdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSByZWJhc2UgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlICYmCisJIGdpdCBzdGF0dXMgLXMgc3VibW9kdWxlID5hY3R1YWwgJiYKKwkgZ2l0IGNvbmZpZyAtLXVuc2V0IHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBpbml0IHBpY2tzIHVwIHVwZGF0ZT1ub25lJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLm5vbmUudXBkYXRlIG5vbmUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0IG5vbmUgJiYKKwkgdGVzdCAibm9uZSIgPSAiJChnaXQgY29uZmlnIHN1Ym1vZHVsZS5ub25lLnVwZGF0ZSkiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gdXBkYXRlPW5vbmUgaW4gLmdpdC9jb25maWcnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBub25lICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBkaWZmIC0tcmF3IHwgZ3JlcCAiCXN1Ym1vZHVsZSIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkgZ2l0IGRpZmYgLS1yYXcgfCBncmVwICIJc3VibW9kdWxlIiAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgc3VibW9kdWxlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIC0gdXBkYXRlPW5vbmUgaW4gLmdpdC9jb25maWcgYnV0IC0tY2hlY2tvdXQgZ2l2ZW4nICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVwZGF0ZSBub25lICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkgIGNvbXBhcmVfaGVhZAorCSApICYmCisJIGdpdCBkaWZmIC0tcmF3IHwgZ3JlcCAiCXN1Ym1vZHVsZSIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1jaGVja291dCAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLXJhdyBcfCBncmVwICIJc3VibW9kdWxlIiAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICB0ZXN0X211c3RfZmFpbCBjb21wYXJlX2hlYWQKKwkgKSAmJgorCSBnaXQgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IHNraXBzIHN1Ym1vZHVsZSB3aXRoIHVwZGF0ZT1ub25lJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwkgZ2l0IGNvbW1pdCAtbSAiLmdpdG1vZHVsZXMiCisJKSAmJgorCWdpdCBjbG9uZSBzdXBlciBjbG9uZWQgJiYKKwkoY2QgY2xvbmVkICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCSB0ZXN0IC1lIHN1Ym1vZHVsZS8uZ2l0ICYmCisJIHRlc3RfbXVzdF9mYWlsIHRlc3QgLWUgbm9uZS8uZ2l0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIGNvbnRpbnVlcyBhZnRlciBjaGVja291dCBlcnJvcicgJworCShjZCBzdXBlciAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1Ym1vZHVsZTIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJIGdpdCBjb21taXQgLWFtICJuZXdfc3VibW9kdWxlIiAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9leHBlY3QKKwkgKSAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZSIgZmlsZQorCSApICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1Ym1vZHVsZTIiIGZpbGUKKwkgKSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZTIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidHdvX25ld19zdWJtb2R1bGVfY29tbWl0cyIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZWNobyAiIiA+IGZpbGUKKwkgKSAmJgorCSBnaXQgY2hlY2tvdXQgSEVBRF4gJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkgKGNkIHN1Ym1vZHVsZTIgJiYKKwkgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+Li4vYWN0dWFsCisJICkgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgY29udGludWVzIGFmdGVyIHJlY3Vyc2l2ZSBjaGVja291dCBlcnJvcicgJworCShjZCBzdXBlciAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSAoY2Qgc3VibW9kdWxlICYmCisJICBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3Vic3VibW9kdWxlICYmCisJICBnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkgIGdpdCBjb21taXQgLW0gIm5ld19zdWJzdWJtb2R1bGUiCisJICkgJiYKKwkgZ2l0IGFkZCBzdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidXBkYXRlX3N1Ym1vZHVsZSIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgKGNkIHN1YnN1Ym1vZHVsZSAmJgorCSAgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3Vic3VibW9kdWxlIiBmaWxlCisJICApICYmCisJICBnaXQgYWRkIHN1YnN1Ym1vZHVsZSAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGVfYWdhaW4iIGZpbGUgJiYKKwkgIChjZCBzdWJzdWJtb2R1bGUgJiYKKwkgICB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1YnN1Ym1vZHVsZV9hZ2FpbiIgZmlsZQorCSAgKSAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGVfYWdhaW5fYWdhaW4iIGZpbGUKKwkgKSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9leHBlY3QgJiYKKwkgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VibW9kdWxlMl9hZ2FpbiIgZmlsZQorCSApICYmCisJIGdpdCBhZGQgc3VibW9kdWxlICYmCisJIGdpdCBhZGQgc3VibW9kdWxlMiAmJgorCSBnaXQgY29tbWl0IC1tICJuZXdfY29tbWl0cyIgJiYKKwkgZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIGdpdCBjaGVja291dCBIRUFEXiAmJgorCSAgKGNkIHN1YnN1Ym1vZHVsZSAmJgorCSAgIGVjaG8gIiIgPiBmaWxlCisJICApCisJICkgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1yZWN1cnNpdmUgJiYKKwkgKGNkIHN1Ym1vZHVsZTIgJiYKKwkgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+Li4vYWN0dWFsCisJICkgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBleGl0IGltbWVkaWF0ZWx5IGluIGNhc2Ugb2YgbWVyZ2UgY29uZmxpY3QnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgKGNkIHN1YnN1Ym1vZHVsZSAmJgorCSAgIGdpdCByZXNldCAtLWhhcmQgSEVBRAorCSAgKQorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VibW9kdWxlXzIiIGZpbGUKKwkgKSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGUyXzIiIGZpbGUKKwkgKSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZTIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidHdvX25ld19zdWJtb2R1bGVfY29tbWl0cyIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSAgdGVzdF9jb21taXQgImNvbmZsaWN0IiBmaWxlICYmCisJICBlY2hvICJjb25mbGljdCIgPiBmaWxlCisJICkgJiYKKwkgZ2l0IGNoZWNrb3V0IEhFQUReICYmCisJIChjZCBzdWJtb2R1bGUyICYmCisJICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi4uL2V4cGVjdAorCSApICYmCisJIGdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS51cGRhdGUgbWVyZ2UgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkgKGNkIHN1Ym1vZHVsZTIgJiYKKwkgIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+Li4vYWN0dWFsCisJICkgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBleGl0IGltbWVkaWF0ZWx5IGFmdGVyIHJlY3Vyc2l2ZSByZWJhc2UgZXJyb3InICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgcmVzZXQgLS1oYXJkIEhFQUQgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IHJlc2V0IC0taGFyZCBIRUFEICYmCisJICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZQorCSApICYmCisJIChjZCBzdWJtb2R1bGUgJiYKKwkgIHRlc3RfY29tbWl0ICJ1cGRhdGVfc3VibW9kdWxlXzMiIGZpbGUKKwkgKSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJtb2R1bGUyXzMiIGZpbGUKKwkgKSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZSAmJgorCSBnaXQgYWRkIHN1Ym1vZHVsZTIgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidHdvX25ld19zdWJtb2R1bGVfY29tbWl0cyIgJiYKKwkgKGNkIHN1Ym1vZHVsZSAmJgorCSAgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSAgdGVzdF9jb21taXQgImNvbmZsaWN0MiIgZmlsZSAmJgorCSAgZWNobyAiY29uZmxpY3QiID4gZmlsZQorCSApICYmCisJIGdpdCBjaGVja291dCBIRUFEXiAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9leHBlY3QKKwkgKSAmJgorCSBnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXBkYXRlIHJlYmFzZSAmJgorCSB0ZXN0X211c3RfZmFpbCBnaXQgc3VibW9kdWxlIHVwZGF0ZSAmJgorCSAoY2Qgc3VibW9kdWxlMiAmJgorCSAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9hY3R1YWwKKwkgKSAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZGlmZmVyZW50IHN1Ym1vZHVsZXMgdG8gdGhlIHNhbWUgcGF0aCcgJworCShjZCBzdXBlciAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgczEgJiYKKwkgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vbWVyZ2luZyBzMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCBwbGFjZXMgZ2l0LWRpciBpbiBzdXBlcnByb2plY3RzIGdpdC1kaXInICcKKwkoY2Qgc3VwZXIgJiYKKwkgbWtkaXIgZGVlcGVyICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBkZWVwZXIvc3VibW9kdWxlICYmCisJIChjZCBkZWVwZXIvc3VibW9kdWxlICYmCisJICBnaXQgbG9nID4gLi4vLi4vZXhwZWN0ZWQKKwkgKSAmJgorCSAoY2QgLmdpdC9tb2R1bGVzL2RlZXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCBsb2cgPiAuLi8uLi8uLi8uLi9hY3R1YWwKKwkgKSAmJgorCSB0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSB1cGRhdGUgcGxhY2VzIGdpdC1kaXIgaW4gc3VwZXJwcm9qZWN0cyBnaXQtZGlyJyAnCisJKGNkIHN1cGVyICYmCisJIGdpdCBjb21taXQgLW0gImFkZGVkIHN1Ym1vZHVsZSIKKwkpICYmCisJZ2l0IGNsb25lIHN1cGVyIHN1cGVyMiAmJgorCShjZCBzdXBlcjIgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0IGRlZXBlci9zdWJtb2R1bGUgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkgKGNkIGRlZXBlci9zdWJtb2R1bGUgJiYKKwkgIGdpdCBsb2cgPiAuLi8uLi9leHBlY3RlZAorCSApICYmCisJIChjZCAuZ2l0L21vZHVsZXMvZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IGxvZyA+IC4uLy4uLy4uLy4uL2FjdHVhbAorCSApICYmCisJIHRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCBwbGFjZXMgZ2l0LWRpciBpbiBzdXBlcnByb2plY3RzIGdpdC1kaXIgcmVjdXJzaXZlJyAnCisJKGNkIHN1cGVyMiAmJgorCSAoY2QgZGVlcGVyL3N1Ym1vZHVsZSAmJgorCSAgZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlIHN1YnN1Ym1vZHVsZSAmJgorCSAgKGNkIHN1YnN1Ym1vZHVsZSAmJgorCSAgIGdpdCBsb2cgPiAuLi8uLi8uLi9leHBlY3RlZAorCSAgKSAmJgorCSAgZ2l0IGNvbW1pdCAtbSAiYWRkZWQgc3Vic3VibW9kdWxlIiAmJgorCSAgZ2l0IHB1c2ggb3JpZ2luIDoKKwkgKSAmJgorCSAoY2QgLmdpdC9tb2R1bGVzL2RlZXBlci9zdWJtb2R1bGUvbW9kdWxlcy9zdWJzdWJtb2R1bGUgJiYKKwkgIGdpdCBsb2cgPiAuLi8uLi8uLi8uLi8uLi9hY3R1YWwKKwkgKSAmJgorCSBnaXQgYWRkIGRlZXBlci9zdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSAidXBkYXRlIHN1Ym1vZHVsZSIgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIDogJiYKKwkgdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgdXBkYXRlIHBsYWNlcyBnaXQtZGlyIGluIHN1cGVycHJvamVjdHMgZ2l0LWRpciByZWN1cnNpdmUnICcKKwlta2RpciBzdXBlcl91cGRhdGVfciAmJgorCShjZCBzdXBlcl91cGRhdGVfciAmJgorCSBnaXQgaW5pdCAtLWJhcmUKKwkpICYmCisJbWtkaXIgc3Vic3VwZXJfdXBkYXRlX3IgJiYKKwkoY2Qgc3Vic3VwZXJfdXBkYXRlX3IgJiYKKwkgZ2l0IGluaXQgLS1iYXJlCisJKSAmJgorCW1rZGlyIHN1YnN1YnN1cGVyX3VwZGF0ZV9yICYmCisJKGNkIHN1YnN1YnN1cGVyX3VwZGF0ZV9yICYmCisJIGdpdCBpbml0IC0tYmFyZQorCSkgJiYKKwlnaXQgY2xvbmUgc3Vic3Vic3VwZXJfdXBkYXRlX3Igc3Vic3Vic3VwZXJfdXBkYXRlX3IyICYmCisJKGNkIHN1YnN1YnN1cGVyX3VwZGF0ZV9yMiAmJgorCSB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1YnN1YnN1cGVyIiBmaWxlICYmCisJIGdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJZ2l0IGNsb25lIHN1YnN1cGVyX3VwZGF0ZV9yIHN1YnN1cGVyX3VwZGF0ZV9yMiAmJgorCShjZCBzdWJzdXBlcl91cGRhdGVfcjIgJiYKKwkgdGVzdF9jb21taXQgInVwZGF0ZV9zdWJzdXBlciIgZmlsZSAmJgorCSBnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJzdWJzdXBlcl91cGRhdGVfciBzdWJzdWJtb2R1bGUgJiYKKwkgZ2l0IGNvbW1pdCAtYW0gInN1YnN1Ym1vZHVsZSIgJiYKKwkgZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcgorCSkgJiYKKwlnaXQgY2xvbmUgc3VwZXJfdXBkYXRlX3Igc3VwZXJfdXBkYXRlX3IyICYmCisJKGNkIHN1cGVyX3VwZGF0ZV9yMiAmJgorCSB0ZXN0X2NvbW1pdCAidXBkYXRlX3N1cGVyIiBmaWxlICYmCisJIGdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1YnN1cGVyX3VwZGF0ZV9yIHN1Ym1vZHVsZSAmJgorCSBnaXQgY29tbWl0IC1hbSAic3VibW9kdWxlIiAmJgorCSBnaXQgcHVzaCBvcmlnaW4gbWFzdGVyCisJKSAmJgorCXJtIC1yZiBzdXBlcl91cGRhdGVfcjIgJiYKKwlnaXQgY2xvbmUgc3VwZXJfdXBkYXRlX3Igc3VwZXJfdXBkYXRlX3IyICYmCisJKGNkIHN1cGVyX3VwZGF0ZV9yMiAmJgorCSBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUgPmFjdHVhbCAmJgorCSB0ZXN0X2kxOG5ncmVwICJTdWJtb2R1bGUgcGF0aCAuc3VibW9kdWxlL3N1YnN1Ym1vZHVsZS46IGNoZWNrZWQgb3V0IiBhY3R1YWwgJiYKKwkgKGNkIHN1Ym1vZHVsZS9zdWJzdWJtb2R1bGUgJiYKKwkgIGdpdCBsb2cgPiAuLi8uLi9leHBlY3RlZAorCSApICYmCisJIChjZCAuZ2l0L21vZHVsZXMvc3VibW9kdWxlL21vZHVsZXMvc3Vic3VibW9kdWxlCisJICBnaXQgbG9nID4gLi4vLi4vLi4vLi4vLi4vYWN0dWFsCisJICkKKwkgdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgYWRkIHByb3Blcmx5IHJlLWNyZWF0ZXMgZGVlcGVyIGxldmVsIHN1Ym1vZHVsZXMnICcKKwkoY2Qgc3VwZXIgJiYKKwkgZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwkgcm0gLXJmIGRlZXBlci8gJiYKKwkgZ2l0IHN1Ym1vZHVsZSBhZGQgLS1mb3JjZSAuLi9zdWJtb2R1bGUgZGVlcGVyL3N1Ym1vZHVsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBwcm9wZXJseSByZXZpdmVzIGEgbW92ZWQgc3VibW9kdWxlJyAnCisJKGNkIHN1cGVyICYmCisJIEg9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRCkgJiYKKwkgZ2l0IGNvbW1pdCAtYW0gInByZSBtb3ZlIiAmJgorCSBIMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCSBnaXQgc3RhdHVzIHwgc2VkICJzLyRIL1hYWC8iID5leHBlY3QgJiYKKwkgSD0kKGNkIHN1Ym1vZHVsZTI7IGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwkgZ2l0IHJtIC0tY2FjaGVkIHN1Ym1vZHVsZTIgJiYKKwkgcm0gLXJmIHN1Ym1vZHVsZTIgJiYKKwkgbWtkaXIgLXAgIm1vdmVkL3N1YiBtb2R1bGUiICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1jYWNoZWluZm8gMTYwMDAwICRIICJtb3ZlZC9zdWIgbW9kdWxlIiAmJgorCSBnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJtb2R1bGUyLnBhdGggIm1vdmVkL3N1YiBtb2R1bGUiCisJIGdpdCBjb21taXQgLWFtICJwb3N0IG1vdmUiICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlICYmCisJIGdpdCBzdGF0dXMgfCBzZWQgInMvJEgyL1hYWC8iID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3VibW9kdWxlIHVwZGF0ZSBjYW4gaGFuZGxlIHN5bWJvbGljIGxpbmtzIGluIHB3ZCcgJworCW1rZGlyIC1wIGxpbmtlZC9kaXIgJiYKKwlsbiAtcyBsaW5rZWQvZGlyIGxpbmt0byAmJgorCShjZCBsaW5rdG8gJiYKKwkgZ2l0IGNsb25lICIkVFJBU0hfRElSRUNUT1JZIi9zdXBlcl91cGRhdGVfcjIgc3VwZXIgJiYKKwkgKGNkIHN1cGVyICYmCisJICBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgLS1yZWN1cnNpdmUKKwkgKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSBjbG9uZSBzaGFsbG93IHN1Ym1vZHVsZScgJworCWdpdCBjbG9uZSBjbG9uZWQgc3VwZXIzICYmCisJcHdkPSQocHdkKSAmJgorCShjZCBzdXBlcjMgJiYKKwkgc2VkIC1lICJzI3VybCA9IC4uLyN1cmwgPSBmaWxlOi8vJHB3ZC8jIiA8LmdpdG1vZHVsZXMgPi5naXRtb2R1bGVzLnRtcCAmJgorCSBtdiAtZiAuZ2l0bW9kdWxlcy50bXAgLmdpdG1vZHVsZXMgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tZGVwdGg9MworCSAoY2Qgc3VibW9kdWxlICYmCisJICB0ZXN0IDEgPSAkKGdpdCBsb2cgLS1vbmVsaW5lIHwgd2MgLWwpCisJICkKKykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIHVwZGF0ZSAtLXJlY3Vyc2l2ZSBkcm9wcyBtb2R1bGUgbmFtZSBiZWZvcmUgcmVjdXJzaW5nJyAnCisJKGNkIHN1cGVyMiAmJgorCSAoY2QgZGVlcGVyL3N1Ym1vZHVsZS9zdWJzdWJtb2R1bGUgJiYKKwkgIGdpdCBjaGVja291dCBIRUFEXgorCSApICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0tcmVjdXJzaXZlIGRlZXBlci9zdWJtb2R1bGUgPmFjdHVhbCAmJgorCSB0ZXN0X2kxOG5ncmVwICJTdWJtb2R1bGUgcGF0aCAuZGVlcGVyL3N1Ym1vZHVsZS9zdWJzdWJtb2R1bGUuOiBjaGVja2VkIG91dCIgYWN0dWFsCisJKQorJwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDA3LXN1Ym1vZHVsZS1mb3JlYWNoLnNoIGIvdC90NzQwNy1zdWJtb2R1bGUtZm9yZWFjaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43Y2ExMGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwNy1zdWJtb2R1bGUtZm9yZWFjaC5zaApAQCAtMCwwICsxLDMzNyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBKb2hhbiBIZXJsYW5kCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgImdpdCBzdWJtb2R1bGUgZm9yZWFjaCIKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgImdpdCBzdWJtb2R1bGUgZm9yZWFjaCIgY29ycmVjdGx5IHZpc2l0cyBhbGwgc3VibW9kdWxlcwordGhhdCBhcmUgY3VycmVudGx5IGNoZWNrZWQgb3V0LgorJworCisuIC4vdGVzdC1saWIuc2gKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBhIHN1Ym1vZHVsZSB0cmVlJyAnCisJZWNobyBmaWxlID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdXBzdHJlYW0gJiYKKwlnaXQgY2xvbmUgLiBzdXBlciAmJgorCWdpdCBjbG9uZSBzdXBlciBzdWJtb2R1bGUgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWIxICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWIyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBzdWIzICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgLS1yZW5hbWUtc2VjdGlvbiBcCisJCQlzdWJtb2R1bGUuc3ViMSBzdWJtb2R1bGUuZm9vMSAmJgorCQlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzIC0tcmVuYW1lLXNlY3Rpb24gXAorCQkJc3VibW9kdWxlLnN1YjIgc3VibW9kdWxlLmZvbzIgJiYKKwkJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAtLXJlbmFtZS1zZWN0aW9uIFwKKwkJCXN1Ym1vZHVsZS5zdWIzIHN1Ym1vZHVsZS5mb28zICYmCisJCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gInN1Ym1vZHVsZXMiICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBzdWIxICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBzdWIyICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBzdWIzCisJKSAmJgorCSgKKwkJY2Qgc3VibW9kdWxlICYmCisJCWVjaG8gZGlmZmVyZW50ID4gZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gImRpZmZlcmVudCIKKwkpICYmCisJKAorCQljZCBzdXBlciAmJgorCQkoCisJCQljZCBzdWIzICYmCisJCQlnaXQgcHVsbAorCQkpICYmCisJCWdpdCBhZGQgc3ViMyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAidXBkYXRlIHN1YjMiCisJKQorJworCitzdWIxc2hhMT0kKGNkIHN1cGVyL3N1YjEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorc3ViM3NoYTE9JChjZCBzdXBlci9zdWIzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKKworcHdkPSQocHdkKQorCitjYXQgPiBleHBlY3QgPDxFT0YKK0VudGVyaW5nICdzdWIxJworJHB3ZC9jbG9uZS1mb28xLXN1YjEtJHN1YjFzaGExCitFbnRlcmluZyAnc3ViMycKKyRwd2QvY2xvbmUtZm9vMy1zdWIzLSRzdWIzc2hhMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYmFzaWMgInN1Ym1vZHVsZSBmb3JlYWNoIiB1c2FnZScgJworCWdpdCBjbG9uZSBzdXBlciBjbG9uZSAmJgorCSgKKwkJY2QgY2xvbmUgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tIHN1YjEgc3ViMyAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggImVjaG8gXCR0b3BsZXZlbC1cJG5hbWUtXCRwYXRoLVwkc2hhMSIgPiAuLi9hY3R1YWwgJiYKKwkJZ2l0IGNvbmZpZyBmb28uYmFyIHphciAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggImdpdCBjb25maWcgLS1maWxlIFwiXCR0b3BsZXZlbC8uZ2l0L2NvbmZpZ1wiIGZvby5iYXIiCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitFbnRlcmluZyAnLi4vc3ViMScKKyRwd2QvY2xvbmUtZm9vMS0uLi9zdWIxLSRzdWIxc2hhMQorRW50ZXJpbmcgJy4uL3N1YjMnCiskcHdkL2Nsb25lLWZvbzMtLi4vc3ViMy0kc3ViM3NoYTEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0ICJzdWJtb2R1bGUgZm9yZWFjaCIgZnJvbSBzdWJkaXJlY3RvcnknICcKKwlta2RpciBjbG9uZS9zdWIgJiYKKwkoCisJCWNkIGNsb25lL3N1YiAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggImVjaG8gXCR0b3BsZXZlbC1cJG5hbWUtXCRzbV9wYXRoLVwkc2hhMSIgPi4uLy4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBuZXN0ZWQgc3VibW9kdWxlcycgJworCWdpdCBjbG9uZSBzdWJtb2R1bGUgbmVzdGVkMSAmJgorCWdpdCBjbG9uZSBzdWJtb2R1bGUgbmVzdGVkMiAmJgorCWdpdCBjbG9uZSBzdWJtb2R1bGUgbmVzdGVkMyAmJgorCSgKKwkJY2QgbmVzdGVkMyAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWJtb2R1bGUgc3VibW9kdWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1tICJzdWJtb2R1bGUiICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBzdWJtb2R1bGUKKwkpICYmCisJKAorCQljZCBuZXN0ZWQyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL25lc3RlZDMgbmVzdGVkMyAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibmVzdGVkMyIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0IG5lc3RlZDMKKwkpICYmCisJKAorCQljZCBuZXN0ZWQxICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL25lc3RlZDIgbmVzdGVkMiAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibmVzdGVkMiIgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBpbml0IG5lc3RlZDIKKwkpICYmCisJKAorCQljZCBzdXBlciAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9uZXN0ZWQxIG5lc3RlZDEgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLW0gIm5lc3RlZDEiICYmCisJCWdpdCBzdWJtb2R1bGUgaW5pdCBuZXN0ZWQxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgInN1Ym1vZHVsZSBmb3JlYWNoIiB0byBjaGVja291dCAybmQgbGV2ZWwgc3VibW9kdWxlJyAnCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lMiAmJgorCSgKKwkJY2QgY2xvbmUyICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMS8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMi8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMy8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjEvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjIvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIHN1YjMvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvLmdpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi8uZ2l0ICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvLmdpdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlICJmb3JlYWNoIC0tcmVjdXJzaXZlIiB0byBjaGVja291dCBhbGwgc3VibW9kdWxlcycgJworCSgKKwkJY2QgY2xvbmUyICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAtLXJlY3Vyc2l2ZSAiZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUvLmdpdAorCSkKKycKKworY2F0ID4gZXhwZWN0IDw8RU9GCitFbnRlcmluZyAnbmVzdGVkMScKK0VudGVyaW5nICduZXN0ZWQxL25lc3RlZDInCitFbnRlcmluZyAnbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMnCitFbnRlcmluZyAnbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlJworRW50ZXJpbmcgJ3N1YjEnCitFbnRlcmluZyAnc3ViMicKK0VudGVyaW5nICdzdWIzJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgbWVzc2FnZXMgZnJvbSAiZm9yZWFjaCAtLXJlY3Vyc2l2ZSInICcKKwkoCisJCWNkIGNsb25lMiAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgInRydWUiID4gLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+IGV4cGVjdCA8PEVPRgorbmVzdGVkMS1uZXN0ZWQxCituZXN0ZWQyLW5lc3RlZDIKK25lc3RlZDMtbmVzdGVkMworc3VibW9kdWxlLXN1Ym1vZHVsZQorZm9vMS1zdWIxCitmb28yLXN1YjIKK2ZvbzMtc3ViMworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgImZvcmVhY2ggLS1xdWlldCAtLXJlY3Vyc2l2ZSInICcKKwkoCisJCWNkIGNsb25lMiAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggLXEgLS1yZWN1cnNpdmUgImVjaG8gXCRuYW1lLVwkcGF0aCIgPiAuLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgInVwZGF0ZSAtLXJlY3Vyc2l2ZSIgdG8gY2hlY2tvdXQgYWxsIHN1Ym1vZHVsZXMnICcKKwlnaXQgY2xvbmUgc3VwZXIgY2xvbmUzICYmCisJKAorCQljZCBjbG9uZTMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIxLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIyLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIzLy5naXQgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMS8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMi8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlLy5naXQKKwkpCisnCisKK25lc3RlZDFzaGExPSQoY2QgY2xvbmUzL25lc3RlZDEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorbmVzdGVkMnNoYTE9JChjZCBjbG9uZTMvbmVzdGVkMS9uZXN0ZWQyICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK25lc3RlZDNzaGExPSQoY2QgY2xvbmUzL25lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1Ym1vZHVsZXNoYTE9JChjZCBjbG9uZTMvbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjFzaGExPSQoY2QgY2xvbmUzL3N1YjEgJiYgZ2l0IHJldi1wYXJzZSBIRUFEKQorc3ViMnNoYTE9JChjZCBjbG9uZTMvc3ViMiAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzdWIzc2hhMT0kKGNkIGNsb25lMy9zdWIzICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3N1YjFzaGExX3Nob3J0PSQoY2QgY2xvbmUzL3N1YjEgJiYgZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpCitzdWIyc2hhMV9zaG9ydD0kKGNkIGNsb25lMy9zdWIyICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorCitjYXQgPiBleHBlY3QgPDxFT0YKKyAkbmVzdGVkMXNoYTEgbmVzdGVkMSAoaGVhZHMvbWFzdGVyKQorICRuZXN0ZWQyc2hhMSBuZXN0ZWQxL25lc3RlZDIgKGhlYWRzL21hc3RlcikKKyAkbmVzdGVkM3NoYTEgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMgKGhlYWRzL21hc3RlcikKKyAkc3VibW9kdWxlc2hhMSBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUgKGhlYWRzL21hc3RlcikKKyAkc3ViMXNoYTEgc3ViMSAoJHN1YjFzaGExX3Nob3J0KQorICRzdWIyc2hhMSBzdWIyICgkc3ViMnNoYTFfc2hvcnQpCisgJHN1YjNzaGExIHN1YjMgKGhlYWRzL21hc3RlcikKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0ICJzdGF0dXMgLS1yZWN1cnNpdmUiJyAnCisJKAorCQljZCBjbG9uZTMgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgLS1yZWN1cnNpdmUgPiAuLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitzZWQgLWUgIi9uZXN0ZWQyIC9zLy4qLyskbmVzdGVkMnNoYTEgbmVzdGVkMVwvbmVzdGVkMiAoZmlsZTJ+MSkvOy9zdWJbMS0zXS9kIiA8IGV4cGVjdCA+IGV4cGVjdDIKK212IC1mIGV4cGVjdDIgZXhwZWN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vuc3VyZSAic3RhdHVzIC0tY2FjaGVkIC0tcmVjdXJzaXZlIiBwcmVzZXJ2ZXMgdGhlIC0tY2FjaGVkIGZsYWcnICcKKwkoCisJCWNkIGNsb25lMyAmJgorCQkoCisJCQljZCBuZXN0ZWQxL25lc3RlZDIgJiYKKwkJCXRlc3RfY29tbWl0IGZpbGUyCisJCSkgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBzdGF0dXMgLS1jYWNoZWQgLS1yZWN1cnNpdmUgLS0gbmVzdGVkMSA+IC4uL2FjdHVhbAorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAiZ2l0IGNsb25lIC0tcmVjdXJzaXZlIiB0byBjaGVja291dCBhbGwgc3VibW9kdWxlcycgJworCWdpdCBjbG9uZSAtLXJlY3Vyc2l2ZSBzdXBlciBjbG9uZTQgJiYKKwkoCisJCWNkIGNsb25lNCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIC5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIxLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIyLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBzdWIzLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy9zdWJtb2R1bGUvLmdpdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCAidXBkYXRlIC0tcmVjdXJzaXZlIiB3aXRoIGEgZmxhZyB3aXRoIHNwYWNlcycgJworCWdpdCBjbG9uZSBzdXBlciAiY29tbW9uIG9iamVjdHMiICYmCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lNSAmJgorCSgKKwkJY2QgY2xvbmU1ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgZCBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlIC0tcmVmZXJlbmNlPSIkKGRpcm5hbWUgIiRQV0QiKS9jb21tb24gb2JqZWN0cyIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvLmdpdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tcmVzb2x2ZS1naXQtZGlyIG5lc3RlZDEvbmVzdGVkMi9uZXN0ZWQzLy5naXQgJiYKKwkJdGVzdCAtZiAuZ2l0L21vZHVsZXMvbmVzdGVkMS9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0IC1mIC5naXQvbW9kdWxlcy9uZXN0ZWQxL21vZHVsZXMvbmVzdGVkMi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCQl0ZXN0IC1mIC5naXQvbW9kdWxlcy9uZXN0ZWQxL21vZHVsZXMvbmVzdGVkMi9tb2R1bGVzL25lc3RlZDMvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZSAidXBkYXRlIC0tcmVjdXJzaXZlIG5lc3RlZDEiIHRvIGNoZWNrb3V0IGFsbCBzdWJtb2R1bGVzIHJvb3RlZCBpbiBuZXN0ZWQxJyAnCisJZ2l0IGNsb25lIHN1cGVyIGNsb25lNiAmJgorCSgKKwkJY2QgY2xvbmU2ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMS8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMi8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMy8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlY3Vyc2l2ZSAtLSBuZXN0ZWQxICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMS8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMi8uZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgc3ViMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyLy5naXQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXJlc29sdmUtZ2l0LWRpciBuZXN0ZWQxL25lc3RlZDIvbmVzdGVkMy8uZ2l0ICYmCisJCWdpdCByZXYtcGFyc2UgLS1yZXNvbHZlLWdpdC1kaXIgbmVzdGVkMS9uZXN0ZWQyL25lc3RlZDMvc3VibW9kdWxlLy5naXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgcGFzc2VkIHRvIGZvcmVhY2ggcmV0YWlucyBub3Rpb24gb2Ygc3RkaW4nICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCBlY2hvIHN1Y2Nlc3MgPi4uL2V4cGVjdGVkICYmCisJCXllcyB8IGdpdCBzdWJtb2R1bGUgZm9yZWFjaCAicmVhZCB5ICYmIHRlc3QgXCJ4XCR5XCIgPSB4eSAmJiBlY2hvIHN1Y2Nlc3MiID4uLi9hY3R1YWwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1hbmQgcGFzc2VkIHRvIGZvcmVhY2ggLS1yZWN1cnNpdmUgcmV0YWlucyBub3Rpb24gb2Ygc3RkaW4nICcKKwkoCisJCWNkIGNsb25lMiAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgZWNobyBzdWNjZXNzID4uLi9leHBlY3RlZCAmJgorCQl5ZXMgfCBnaXQgc3VibW9kdWxlIGZvcmVhY2ggLS1yZWN1cnNpdmUgInJlYWQgeSAmJiB0ZXN0IFwieFwkeVwiID0geHkgJiYgZWNobyBzdWNjZXNzIiA+Li4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aS1hcmd1bWVudCBjb21tYW5kIHBhc3NlZCB0byBmb3JlYWNoIGlzIG5vdCBzaGVsbC1ldmFsdWF0ZWQgdHdpY2UnICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBzdWJtb2R1bGUgZm9yZWFjaCAiZWNobyBcXFwicXVvdGVkXFxcIiIgPiAuLi9leHBlY3RlZCAmJgorCQlnaXQgc3VibW9kdWxlIGZvcmVhY2ggZWNobyBcInF1b3RlZFwiID4gLi4vYWN0dWFsCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc0MDgtc3VibW9kdWxlLXJlZmVyZW5jZS5zaCBiL3QvdDc0MDgtc3VibW9kdWxlLXJlZmVyZW5jZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNzcwYjJmCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwOC1zdWJtb2R1bGUtcmVmZXJlbmNlLnNoCkBAIC0wLDAgKzEsODEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDksIFJlZCBIYXQgSW5jLCBBdXRob3I6IE1pY2hhZWwgUy4gVHNpcmtpbiAobXN0QHJlZGhhdC5jb20pCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgY2xvbmUgLS1yZWZlcmVuY2UnCisuIC4vdGVzdC1saWIuc2gKKworYmFzZV9kaXI9YHB3ZGAKKworVT0kYmFzZV9kaXIvVVBMT0FEX0xPRworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgZmlyc3QgcmVwb3NpdG9yeScgXAorJ3Rlc3RfY3JlYXRlX3JlcG8gQSAmJiBjZCBBICYmCitlY2hvIGZpcnN0ID4gZmlsZTEgJiYKK2dpdCBhZGQgZmlsZTEgJiYKK2dpdCBjb21taXQgLW0gQS1pbml0aWFsJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc2Vjb25kIHJlcG9zaXRvcnknIFwKKydnaXQgY2xvbmUgQSBCICYmIGNkIEIgJiYKK2VjaG8gc2Vjb25kID4gZmlsZTIgJiYKK2dpdCBhZGQgZmlsZTIgJiYKK2dpdCBjb21taXQgLW0gQi1hZGRpdGlvbiAmJgorZ2l0IHJlcGFjayAtYSAtZCAmJgorZ2l0IHBydW5lJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJpbmcgc3VwZXJwcm9qZWN0JyBcCisndGVzdF9jcmVhdGVfcmVwbyBzdXBlciAmJiBjZCBzdXBlciAmJgorZWNobyBmaWxlID4gZmlsZSAmJgorZ2l0IGFkZCBmaWxlICYmCitnaXQgY29tbWl0IC1tIEItc3VwZXItaW5pdGlhbCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibW9kdWxlIGFkZCAtLXJlZmVyZW5jZScgXAorJ2NkIHN1cGVyICYmIGdpdCBzdWJtb2R1bGUgYWRkIC0tcmVmZXJlbmNlIC4uL0IgImZpbGU6Ly8kYmFzZV9kaXIvQSIgc3ViICYmCitnaXQgY29tbWl0IC1tIEItc3VwZXItYWRkZWQnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FmdGVyIGFkZDogZXhpc3RlbmNlIG9mIGluZm8vYWx0ZXJuYXRlcycgXAorJ3Rlc3RfbGluZV9jb3VudCA9IDEgc3VwZXIvLmdpdC9tb2R1bGVzL3N1Yi9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcycKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGhhdCByZWZlcmVuY2UgZ2V0cyB1c2VkIHdpdGggYWRkJyBcCisnY2Qgc3VwZXIvc3ViICYmCitlY2hvICIwIG9iamVjdHMsIDAga2lsb2J5dGVzIiA+IGV4cGVjdGVkICYmCitnaXQgY291bnQtb2JqZWN0cyA+IGN1cnJlbnQgJiYKK2RpZmYgZXhwZWN0ZWQgY3VycmVudCcKKworY2QgIiRiYXNlX2RpciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmluZyBzdXBlcnByb2plY3QnIFwKKydnaXQgY2xvbmUgc3VwZXIgc3VwZXItY2xvbmUnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSB3aXRoIHJlZmVyZW5jZScgXAorJ2NkIHN1cGVyLWNsb25lICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAtLXJlZmVyZW5jZSAuLi9CJworCitjZCAiJGJhc2VfZGlyIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZnRlciB1cGRhdGU6IGV4aXN0ZW5jZSBvZiBpbmZvL2FsdGVybmF0ZXMnIFwKKyd0ZXN0X2xpbmVfY291bnQgPSAxIHN1cGVyLWNsb25lLy5naXQvbW9kdWxlcy9zdWIvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RoYXQgcmVmZXJlbmNlIGdldHMgdXNlZCB3aXRoIHVwZGF0ZScgXAorJ2NkIHN1cGVyLWNsb25lL3N1YiAmJgorZWNobyAiMCBvYmplY3RzLCAwIGtpbG9ieXRlcyIgPiBleHBlY3RlZCAmJgorZ2l0IGNvdW50LW9iamVjdHMgPiBjdXJyZW50ICYmCitkaWZmIGV4cGVjdGVkIGN1cnJlbnQnCisKK2NkICIkYmFzZV9kaXIiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQwOS1zdWJtb2R1bGUtZGV0YWNoZWQtd29ya3RyZWUuc2ggYi90L3Q3NDA5LXN1Ym1vZHVsZS1kZXRhY2hlZC13b3JrdHJlZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMjA3MTcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzQwOS1zdWJtb2R1bGUtZGV0YWNoZWQtd29ya3RyZWUuc2gKQEAgLTAsMCArMSw4NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBEYW5pZWwgR3Jhw7FhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3Qgc3VibW9kdWxlcyBvbiBkZXRhY2hlZCB3b3JraW5nIHRyZWUKKworVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgImdpdCBzdWJtb2R1bGUiIGluaXRpYWxpemF0aW9uLCB1cGRhdGUgYW5kIGFkZGl0aW9uIHdvcmtzCitvbiBkZXRhaGNlZCB3b3JraW5nIHRyZWVzCisnCisKK1RFU1RfTk9fQ1JFQVRFX1JFUE89MQorLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBvbiBkZXRhY2hlZCB3b3JraW5nIHRyZWUnICcKKwlnaXQgaW5pdCAtLWJhcmUgcmVtb3RlICYmCisJdGVzdF9jcmVhdGVfcmVwbyBidW5kbGUxICYmCisJKAorCQljZCBidW5kbGUxICYmCisJCXRlc3RfY29tbWl0ICJzaG9vdCIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEID4uLi9leHBlY3QKKwkpICYmCisJbWtkaXIgaG9tZSAmJgorCSgKKwkJY2QgaG9tZSAmJgorCQlHSVRfV09SS19UUkVFPSIkKHB3ZCkiICYmCisJCUdJVF9ESVI9IiQocHdkKS8uZG90ZmlsZXMiICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFIEdJVF9ESVIgJiYKKwkJZ2l0IGNsb25lIC0tYmFyZSAuLi9yZW1vdGUgLmRvdGZpbGVzICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL2J1bmRsZTEgLnZpbS9idW5kbGUvc29nb29kICYmCisJCXRlc3RfY29tbWl0ICJzb2dvb2QiICYmCisJCSgKKwkJCXVuc2V0IEdJVF9XT1JLX1RSRUUgR0lUX0RJUiAmJgorCQkJY2QgLnZpbS9idW5kbGUvc29nb29kICYmCisJCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPmFjdHVhbCAmJgorCQkJdGVzdF9jbXAgLi4vLi4vLi4vLi4vZXhwZWN0IGFjdHVhbAorCQkpICYmCisJCWdpdCBwdXNoIG9yaWdpbiBtYXN0ZXIKKwkpICYmCisJbWtkaXIgaG9tZTIgJiYKKwkoCisJCWNkIGhvbWUyICYmCisJCWdpdCBjbG9uZSAtLWJhcmUgLi4vcmVtb3RlIC5kb3RmaWxlcyAmJgorCQlHSVRfV09SS19UUkVFPSIkKHB3ZCkiICYmCisJCUdJVF9ESVI9IiQocHdkKS8uZG90ZmlsZXMiICYmCisJCWV4cG9ydCBHSVRfV09SS19UUkVFIEdJVF9ESVIgJiYKKwkJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCQlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQgJiYKKwkJKAorCQkJdW5zZXQgR0lUX1dPUktfVFJFRSBHSVRfRElSICYmCisJCQljZCAudmltL2J1bmRsZS9zb2dvb2QgJiYKKwkJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+YWN0dWFsICYmCisJCQl0ZXN0X2NtcCAuLi8uLi8uLi8uLi9leHBlY3QgYWN0dWFsCisJCSkKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBvbiBkZXRhY2hlZCB3b3JraW5nIHBvaW50ZWQgYnkgY29yZS53b3JrdHJlZScgJworCW1rZGlyIGhvbWUzICYmCisJKAorCQljZCBob21lMyAmJgorCQlHSVRfRElSPSIkKHB3ZCkvLmRvdGZpbGVzIiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQlnaXQgY2xvbmUgLS1iYXJlIC4uL3JlbW90ZSAiJEdJVF9ESVIiICYmCisJCWdpdCBjb25maWcgY29yZS5iYXJlIGZhbHNlICYmCisJCWdpdCBjb25maWcgY29yZS53b3JrdHJlZSAuLiAmJgorCQlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL2J1bmRsZTEgLnZpbS9idW5kbGUvZHVwZSAmJgorCQl0ZXN0X2NvbW1pdCAiZHVwZSIgJiYKKwkJZ2l0IHB1c2ggb3JpZ2luIG1hc3RlcgorCSkgJiYKKwkoCisJCWNkIGhvbWUgJiYKKwkJR0lUX0RJUj0iJChwd2QpLy5kb3RmaWxlcyIgJiYKKwkJZXhwb3J0IEdJVF9ESVIgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmJhcmUgZmFsc2UgJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLndvcmt0cmVlIC4uICYmCisJCWdpdCBwdWxsICYmCisJCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC0taW5pdCAmJgorCQl0ZXN0IC1mIC52aW0vYnVuZGxlL2R1cGUvc2hvb3QudAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NDEwLXN1Ym1vZHVsZS1jaGVja291dC10by5zaCBiL3QvdDc0MTAtc3VibW9kdWxlLWNoZWNrb3V0LXRvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFhY2VmMzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDEwLXN1Ym1vZHVsZS1jaGVja291dC10by5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ29tYmluYXRpb24gb2Ygc3VibW9kdWxlcyBhbmQgbXVsdGlwbGUgd29ya2RpcnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitiYXNlX3BhdGg9JChwd2QgLVApCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBtYWtlIG9yaWdpbicgXAorICAgICdta2RpciAtcCBvcmlnaW4vc3ViICYmICggY2Qgb3JpZ2luL3N1YiAmJiBnaXQgaW5pdCAmJgorCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gZmlsZTEgKSAmJgorICAgIG1rZGlyIC1wIG9yaWdpbi9tYWluICYmICggY2Qgb3JpZ2luL21haW4gJiYgZ2l0IGluaXQgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWIgJiYKKwlnaXQgY29tbWl0IC1tICJhZGQgc3ViIiApICYmCisgICAgKCBjZCBvcmlnaW4vc3ViICYmCisJZWNobyBmaWxlMXVwZGF0ZWQgPmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWdpdCBjb21taXQgLW0gImZpbGUxIHVwZGF0ZWQiICkgJiYKKyAgICAoIGNkIG9yaWdpbi9tYWluL3N1YiAmJiBnaXQgcHVsbCApICYmCisgICAgKCBjZCBvcmlnaW4vbWFpbiAmJgorCWdpdCBhZGQgc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViIHVwZGF0ZWQiICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjbG9uZScgXAorICAgICdta2RpciBjbG9uZSAmJiAoIGNkIGNsb25lICYmCisJZ2l0IGNsb25lIC0tcmVjdXJzaXZlICIkYmFzZV9wYXRoL29yaWdpbi9tYWluIiknCisKK3JldjFfaGFzaF9tYWluPSQoZ2l0IC0tZ2l0LWRpcj1vcmlnaW4vbWFpbi8uZ2l0IHNob3cgLS1wcmV0dHk9Zm9ybWF0OiVoIC1xICJIRUFEfjEiKQorcmV2MV9oYXNoX3N1Yj0kKGdpdCAtLWdpdC1kaXI9b3JpZ2luL3N1Yi8uZ2l0IHNob3cgLS1wcmV0dHk9Zm9ybWF0OiVoIC1xICJIRUFEfjEiKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBtYWluJyBcCisgICAgJ21rZGlyIGRlZmF1bHRfY2hlY2tvdXQgJiYKKyAgICAoY2QgY2xvbmUvbWFpbiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgIiRiYXNlX3BhdGgvZGVmYXVsdF9jaGVja291dC9tYWluIiAiJHJldjFfaGFzaF9tYWluIiknCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2NhbiBzZWUgc3VibW9kdWxlIGRpZmZzIGp1c3QgYWZ0ZXIgY2hlY2tvdXQnIFwKKyAgICAnKGNkIGRlZmF1bHRfY2hlY2tvdXQvbWFpbiAmJiBnaXQgZGlmZiAtLXN1Ym1vZHVsZSBtYXN0ZXIiXiEiIHwgZ3JlcCAiZmlsZTEgdXBkYXRlZCIpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBtYWluIGFuZCBpbml0aWFsaXplIGluZGVwZW5kZWQgY2xvbmVzJyBcCisgICAgJ21rZGlyIGZ1bGx5X2Nsb25lZF9zdWJtb2R1bGUgJiYKKyAgICAoY2QgY2xvbmUvbWFpbiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgIiRiYXNlX3BhdGgvZnVsbHlfY2xvbmVkX3N1Ym1vZHVsZS9tYWluIiAiJHJldjFfaGFzaF9tYWluIikgJiYKKyAgICAoY2QgZnVsbHlfY2xvbmVkX3N1Ym1vZHVsZS9tYWluICYmIGdpdCBzdWJtb2R1bGUgdXBkYXRlKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2FuIHNlZSBzdWJtb2R1bGUgZGlmZnMgYWZ0ZXIgaW5kZXBlbmRlZCBjbG9uaW5nJyBcCisgICAgJyhjZCBmdWxseV9jbG9uZWRfc3VibW9kdWxlL21haW4gJiYgZ2l0IGRpZmYgLS1zdWJtb2R1bGUgbWFzdGVyIl4hIiB8IGdyZXAgImZpbGUxIHVwZGF0ZWQiKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgc3ViIG1hbnVhbGx5JyBcCisgICAgJ21rZGlyIGxpbmtlZF9zdWJtb2R1bGUgJiYKKyAgICAoY2QgY2xvbmUvbWFpbiAmJgorCWdpdCB3b3JrdHJlZSBhZGQgIiRiYXNlX3BhdGgvbGlua2VkX3N1Ym1vZHVsZS9tYWluIiAiJHJldjFfaGFzaF9tYWluIikgJiYKKyAgICAoY2QgY2xvbmUvbWFpbi9zdWIgJiYKKwlnaXQgd29ya3RyZWUgYWRkICIkYmFzZV9wYXRoL2xpbmtlZF9zdWJtb2R1bGUvbWFpbi9zdWIiICIkcmV2MV9oYXNoX3N1YiIpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYW4gc2VlIHN1Ym1vZHVsZSBkaWZmcyBhZnRlciBtYW51YWwgY2hlY2tvdXQgb2YgbGlua2VkIHN1Ym1vZHVsZScgXAorICAgICcoY2QgbGlua2VkX3N1Ym1vZHVsZS9tYWluICYmIGdpdCBkaWZmIC0tc3VibW9kdWxlIG1hc3RlciJeISIgfCBncmVwICJmaWxlMSB1cGRhdGVkIiknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzQxMS1zdWJtb2R1bGUtY29uZmlnLnNoIGIvdC90NzQxMS1zdWJtb2R1bGUtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZjOTdjMzMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NDExLXN1Ym1vZHVsZS1jb25maWcuc2gKQEAgLTAsMCArMSwxNTMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgSGVpa28gVm9pZ3QKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nVGVzdCBzdWJtb2R1bGVzIGNvbmZpZyBjYWNoZSBpbmZyYXN0cnVjdHVyZQorCitUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBwYXJzaW5nIC5naXRtb2R1bGVzIGNvbmZpZ3VyYXRpb25zIGRpcmVjdGx5Citmcm9tIHRoZSBkYXRhYmFzZSBhbmQgZnJvbSB0aGUgd29ya3RyZWUgd29ya3MuCisnCisKK1RFU1RfTk9fQ1JFQVRFX1JFUE89MQorLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBjb25maWcgY2FjaGUgc2V0dXAnICcKKwlta2RpciBzdWJtb2R1bGUgJiYKKwkoY2Qgc3VibW9kdWxlICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gYSA+YSAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGNvbW1pdCAtbWEKKwkpICYmCisJbWtkaXIgc3VwZXIgJiYKKwkoY2Qgc3VwZXIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3VibW9kdWxlICYmCisJCWdpdCBzdWJtb2R1bGUgYWRkIC4uL3N1Ym1vZHVsZSBhICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBhcyBzdWJtb2R1bGUgYW5kIGFzIGEiICYmCisJCWdpdCBtdiBhIGIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibW92ZSBhIHRvIGIiCisJKQorJworCitjYXQgPnN1cGVyL2V4cGVjdCA8PEVPRgorU3VibW9kdWxlIG5hbWU6ICdhJyBmb3IgcGF0aCAnYScKK1N1Ym1vZHVsZSBuYW1lOiAnYScgZm9yIHBhdGggJ2InCitTdWJtb2R1bGUgbmFtZTogJ3N1Ym1vZHVsZScgZm9yIHBhdGggJ3N1Ym1vZHVsZScKK1N1Ym1vZHVsZSBuYW1lOiAnc3VibW9kdWxlJyBmb3IgcGF0aCAnc3VibW9kdWxlJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcGFyc2luZyBhbmQgbG9va3VwIG9mIHN1Ym1vZHVsZSBjb25maWcgYnkgcGF0aCcgJworCShjZCBzdXBlciAmJgorCQl0ZXN0LXN1Ym1vZHVsZS1jb25maWcgXAorCQkJSEVBRF4gYSBcCisJCQlIRUFEIGIgXAorCQkJSEVBRF4gc3VibW9kdWxlIFwKKwkJCUhFQUQgc3VibW9kdWxlIFwKKwkJCQk+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcGFyc2luZyBhbmQgbG9va3VwIG9mIHN1Ym1vZHVsZSBjb25maWcgYnkgbmFtZScgJworCShjZCBzdXBlciAmJgorCQl0ZXN0LXN1Ym1vZHVsZS1jb25maWcgLS1uYW1lIFwKKwkJCUhFQUReIGEgXAorCQkJSEVBRCBhIFwKKwkJCUhFQUReIHN1Ym1vZHVsZSBcCisJCQlIRUFEIHN1Ym1vZHVsZSBcCisJCQkJPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCitjYXQgPnN1cGVyL2V4cGVjdF9lcnJvciA8PEVPRgorU3VibW9kdWxlIG5hbWU6ICdhJyBmb3IgcGF0aCAnYicKK1N1Ym1vZHVsZSBuYW1lOiAnc3VibW9kdWxlJyBmb3IgcGF0aCAnc3VibW9kdWxlJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vycm9yIGluIG9uZSBzdWJtb2R1bGUgY29uZmlnIGxldHMgY29udGludWUnICcKKwkoY2Qgc3VwZXIgJiYKKwkJY3AgLmdpdG1vZHVsZXMgLmdpdG1vZHVsZXMuYmFrICYmCisJCWVjaG8gIgl2YWx1ZSA9IFwiIiA+Pi5naXRtb2R1bGVzICYmCisJCWdpdCBhZGQgLmdpdG1vZHVsZXMgJiYKKwkJbXYgLmdpdG1vZHVsZXMuYmFrIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBlcnJvciIgJiYKKwkJdGVzdC1zdWJtb2R1bGUtY29uZmlnIFwKKwkJCUhFQUQgYiBcCisJCQlIRUFEIHN1Ym1vZHVsZSBcCisJCQkJPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RfZXJyb3IgYWN0dWFsCisJKQorJworCitjYXQgPnN1cGVyL2V4cGVjdF91cmwgPDxFT0YKK1N1Ym1vZHVsZSB1cmw6ICdnaXRAc29tZXdoZXJlLmVsc2UubmV0OmEuZ2l0JyBmb3IgcGF0aCAnYicKK1N1Ym1vZHVsZSB1cmw6ICdnaXRAc29tZXdoZXJlLmVsc2UubmV0OnN1Ym1vZHVsZS5naXQnIGZvciBwYXRoICdzdWJtb2R1bGUnCitFT0YKKworY2F0ID5zdXBlci9leHBlY3RfbG9jYWxfcGF0aCA8PEVPRgorU3VibW9kdWxlIG5hbWU6ICdhJyBmb3IgcGF0aCAnYycKK1N1Ym1vZHVsZSBuYW1lOiAnc3VibW9kdWxlJyBmb3IgcGF0aCAnc3VibW9kdWxlJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYWRpbmcgb2YgbG9jYWwgY29uZmlndXJhdGlvbicgJworCShjZCBzdXBlciAmJgorCQlvbGRfYT0kKGdpdCBjb25maWcgc3VibW9kdWxlLmEudXJsKSAmJgorCQlvbGRfc3VibW9kdWxlPSQoZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCkgJiYKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuYS51cmwgZ2l0QHNvbWV3aGVyZS5lbHNlLm5ldDphLmdpdCAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5zdWJtb2R1bGUudXJsIGdpdEBzb21ld2hlcmUuZWxzZS5uZXQ6c3VibW9kdWxlLmdpdCAmJgorCQl0ZXN0LXN1Ym1vZHVsZS1jb25maWcgLS11cmwgXAorCQkJIiIgYiBcCisJCQkiIiBzdWJtb2R1bGUgXAorCQkJCT5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0X3VybCBhY3R1YWwgJiYKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuYS5wYXRoIGMgJiYKKwkJdGVzdC1zdWJtb2R1bGUtY29uZmlnIFwKKwkJCSIiIGMgXAorCQkJIiIgc3VibW9kdWxlIFwKKwkJCQk+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdF9sb2NhbF9wYXRoIGFjdHVhbCAmJgorCQlnaXQgY29uZmlnIHN1Ym1vZHVsZS5hLnVybCAkb2xkX2EgJiYKKwkJZ2l0IGNvbmZpZyBzdWJtb2R1bGUuc3VibW9kdWxlLnVybCAkb2xkX3N1Ym1vZHVsZSAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLmEucGF0aCBjCisJKQorJworCitjYXQgPnN1cGVyL2V4cGVjdF9mZXRjaHJlY3Vyc2VfZGllLmVyciA8PEVPRgorZmF0YWw6IGJhZCBzdWJtb2R1bGUuc3VibW9kdWxlLmZldGNocmVjdXJzZXN1Ym1vZHVsZXMgYXJndW1lbnQ6IGJsYWJsYQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIGVycm9yIGluIGZldGNocmVjdXJzZXN1Ym1vZHVsZSBkaWVzIGVhcmx5JyAnCisJKGNkIHN1cGVyICYmCisJCWdpdCBjb25maWcgc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaHJlY3Vyc2VzdWJtb2R1bGVzIGJsYWJsYSAmJgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0LXN1Ym1vZHVsZS1jb25maWcgXAorCQkJIiIgYiBcCisJCQkiIiBzdWJtb2R1bGUgXAorCQkJCT5hY3R1YWwub3V0IDI+YWN0dWFsLmVyciAmJgorCQl0b3VjaCBleHBlY3RfZmV0Y2hyZWN1cnNlX2RpZS5vdXQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0X2ZldGNocmVjdXJzZV9kaWUub3V0IGFjdHVhbC5vdXQgICYmCisJCXRlc3RfY21wIGV4cGVjdF9mZXRjaHJlY3Vyc2VfZGllLmVyciBhY3R1YWwuZXJyICAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaHJlY3Vyc2VzdWJtb2R1bGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlcnJvciBpbiBoaXN0b3J5IGluIGZldGNocmVjdXJzZXN1Ym1vZHVsZSBsZXRzIGNvbnRpbnVlJyAnCisJKGNkIHN1cGVyICYmCisJCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgXAorCQkJc3VibW9kdWxlLnN1Ym1vZHVsZS5mZXRjaHJlY3Vyc2VzdWJtb2R1bGVzIGJsYWJsYSAmJgorCQlnaXQgYWRkIC5naXRtb2R1bGVzICYmCisJCWdpdCBjb25maWcgLS11bnNldCAtZiAuZ2l0bW9kdWxlcyBcCisJCQlzdWJtb2R1bGUuc3VibW9kdWxlLmZldGNocmVjdXJzZXN1Ym1vZHVsZXMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGVycm9yIGluIGZldGNocmVjdXJzZXN1Ym1vZHVsZXMiICYmCisJCXRlc3Qtc3VibW9kdWxlLWNvbmZpZyBcCisJCQlIRUFEIGIgXAorCQkJSEVBRCBzdWJtb2R1bGUgXAorCQkJCT5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0X2Vycm9yIGFjdHVhbCAgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTAwLWNvbW1pdC5zaCBiL3QvdDc1MDAtY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjExNjg4NWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAwLWNvbW1pdC5zaApAQCAtMCwwICsxLDMzMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBTdGV2ZW4gR3JpbW0KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNvbW1pdAorCitUZXN0cyBmb3Igc2VsZWN0ZWQgY29tbWl0IG9wdGlvbnMuJworCisuIC4vdGVzdC1saWIuc2gKKworY29tbWl0X21zZ19pcyAoKSB7CisJZXhwZWN0PWNvbW1pdF9tc2dfaXMuZXhwZWN0CisJYWN0dWFsPWNvbW1pdF9tc2dfaXMuYWN0dWFsCisKKwlwcmludGYgIiVzIiAiJChnaXQgbG9nIC0tcHJldHR5PWZvcm1hdDolcyViIC0xKSIgPiIkYWN0dWFsIiAmJgorCXByaW50ZiAiJXMiICIkMSIgPiIkZXhwZWN0IiAmJgorCXRlc3RfaTE4bmNtcCAiJGV4cGVjdCIgIiRhY3R1YWwiCit9CisKKyMgQSBzYW5pdHkgY2hlY2sgdG8gc2VlIGlmIGNvbW1pdCBpcyB3b3JraW5nIGF0IGFsbC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2EgYmFzaWMgY29tbWl0IGluIGFuIGVtcHR5IHRyZWUgc2hvdWxkIHN1Y2NlZWQnICcKKwllY2hvIGNvbnRlbnQgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25leGlzdGVudCB0ZW1wbGF0ZSBmaWxlIHNob3VsZCByZXR1cm4gZXJyb3InICcKKwllY2hvIGNoYW5nZXMgPj4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwkoCisJCUdJVF9FRElUT1I9ImVjaG8gaGVsbG8gPlwiXCQxXCIiICYmCisJCWV4cG9ydCBHSVRfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFBXRCIvbm90ZXhpc3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vbmV4aXN0ZW50IHRlbXBsYXRlIGZpbGUgaW4gY29uZmlnIHNob3VsZCByZXR1cm4gZXJyb3InICcKKwl0ZXN0X2NvbmZpZyBjb21taXQudGVtcGxhdGUgIiRQV0QiL25vdGV4aXN0ICYmCisJKAorCQlHSVRfRURJVE9SPSJlY2hvIGhlbGxvID5cIlwkMVwiIiAmJgorCQlleHBvcnQgR0lUX0VESVRPUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0CisJKQorJworCisjIEZyb20gbm93IG9uIHdlJ2xsIHVzZSBhIHRlbXBsYXRlIGZpbGUgdGhhdCBleGlzdHMuCitURU1QTEFURT0iJFBXRCIvdGVtcGxhdGUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5lZGl0ZWQgdGVtcGxhdGUgc2hvdWxkIG5vdCBjb21taXQnICcKKwllY2hvICJ0ZW1wbGF0ZSBsaW5lIiA+ICIkVEVNUExBVEUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkVEVNUExBVEUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VuZWRpdGVkIHRlbXBsYXRlIHdpdGggY29tbWVudHMgc2hvdWxkIG5vdCBjb21taXQnICcKKwllY2hvICIjIGNvbW1lbnQgaW4gdGVtcGxhdGUiID4+ICIkVEVNUExBVEUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkVEVNUExBVEUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2EgU2lnbmVkLW9mZi1ieSBsaW5lIGJ5IGl0c2VsZiBzaG91bGQgbm90IGNvbW1pdCcgJworCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1zaWduZWQtb2ZmICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFRFTVBMQVRFIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkaW5nIGNvbW1lbnRzIHRvIGEgdGVtcGxhdGUgc2hvdWxkIG5vdCBjb21taXQnICcKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtY29tbWVudHMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLXRlbXBsYXRlICIkVEVNUExBVEUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGRpbmcgcmVhbCBjb250ZW50IHRvIGEgdGVtcGxhdGUgc2hvdWxkIGNvbW1pdCcgJworCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50ICYmCisJCWdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFRFTVBMQVRFIgorCSkgJiYKKwljb21taXRfbXNnX2lzICJ0ZW1wbGF0ZSBsaW5lY29tbWl0IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy10IG9wdGlvbiBzaG91bGQgYmUgc2hvcnQgZm9yIC0tdGVtcGxhdGUnICcKKwllY2hvICJzaG9ydCB0ZW1wbGF0ZSIgPiAiJFRFTVBMQVRFIiAmJgorCWVjaG8gIm5ldyBjb250ZW50IiA+PiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50ICYmCisJCWdpdCBjb21taXQgLXQgIiRURU1QTEFURSIKKwkpICYmCisJY29tbWl0X21zZ19pcyAic2hvcnQgdGVtcGxhdGVjb21taXQgbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmlnLXNwZWNpZmllZCB0ZW1wbGF0ZSBzaG91bGQgY29tbWl0JyAnCisJZWNobyAibmV3IHRlbXBsYXRlIiA+ICIkVEVNUExBVEUiICYmCisJdGVzdF9jb25maWcgY29tbWl0LnRlbXBsYXRlICIkVEVNUExBVEUiICYmCisJZWNobyAibW9yZSBjb250ZW50IiA+PiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCSgKKwkJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50ICYmCisJCWdpdCBjb21taXQKKwkpICYmCisJY29tbWl0X21zZ19pcyAibmV3IHRlbXBsYXRlY29tbWl0IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cGxpY2l0IGNvbW1pdCBtZXNzYWdlIHNob3VsZCBvdmVycmlkZSB0ZW1wbGF0ZScgJworCWVjaG8gInN0aWxsIG1vcmUgY29udGVudCIgPj4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlHSVRfRURJVE9SPSIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50IGdpdCBjb21taXQgLS10ZW1wbGF0ZSAiJFRFTVBMQVRFIiBcCisJCS1tICJjb21tYW5kIGxpbmUgbXNnIiAmJgorCWNvbW1pdF9tc2dfaXMgImNvbW1hbmQgbGluZSBtc2ciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIGZyb20gZmlsZSBzaG91bGQgb3ZlcnJpZGUgdGVtcGxhdGUnICcKKwllY2hvICJjb250ZW50IGdhbG9yZSIgPj4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwllY2hvICJzdGFuZGFyZCBpbnB1dCBtc2ciIHwKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAiJFRFU1RfRElSRUNUT1JZIi90NzUwMC9hZGQtY29udGVudCAmJgorCQlnaXQgY29tbWl0IC0tdGVtcGxhdGUgIiRURU1QTEFURSIgLS1maWxlIC0KKwkpICYmCisJY29tbWl0X21zZ19pcyAic3RhbmRhcmQgaW5wdXQgbXNnIgorJworCitjYXQgPiIkVEVNUExBVEUiIDw8XEVPRgorCisKKyMjIyB0ZW1wbGF0ZQorCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtZXNzYWdlIGZyb20gdGVtcGxhdGUgd2l0aCB3aGl0ZXNwYWNlIGlzc3VlJyAnCisJZWNobyAiY29udGVudCBnYWxvcmUiID4+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlHSVRfRURJVE9SPSIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC13aGl0ZXNwYWNlZC1jb250ZW50IGdpdCBjb21taXQgXAorCQktLXRlbXBsYXRlICIkVEVNUExBVEUiICYmCisJY29tbWl0X21zZ19pcyAiY29tbWl0IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIGFsdGVybmF0ZSBHSVRfSU5ERVhfRklMRSAoMSknICcKKworCWNwIC5naXQvaW5kZXggc2F2ZWQtaW5kZXggJiYKKwkoCisJCWVjaG8gc29tZSBuZXcgY29udGVudCA+ZmlsZSAmJgorCSAgICAgICAgR0lUX0lOREVYX0ZJTEU9LmdpdC9hbm90aGVyX2luZGV4ICYmCisJCWV4cG9ydCBHSVRfSU5ERVhfRklMRSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IHVzaW5nIGFub3RoZXIgaW5kZXgiICYmCisJCWdpdCBkaWZmLWluZGV4IC0tZXhpdC1jb2RlIEhFQUQgJiYKKwkJZ2l0IGRpZmYtZmlsZXMgLS1leGl0LWNvZGUKKwkpICYmCisJY21wIC5naXQvaW5kZXggc2F2ZWQtaW5kZXggPi9kZXYvbnVsbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIGFsdGVybmF0ZSBHSVRfSU5ERVhfRklMRSAoMiknICcKKworCWNwIC5naXQvaW5kZXggc2F2ZWQtaW5kZXggJiYKKwkoCisJCXJtIC1mIC5naXQvbm8tc3VjaC1pbmRleCAmJgorCQlHSVRfSU5ERVhfRklMRT0uZ2l0L25vLXN1Y2gtaW5kZXggJiYKKwkJZXhwb3J0IEdJVF9JTkRFWF9GSUxFICYmCisJCWdpdCBjb21taXQgLW0gImNvbW1pdCB1c2luZyBub25leGlzdGVudCBpbmRleCIgJiYKKwkJdGVzdCAteiAiJChnaXQgbHMtZmlsZXMpIiAmJgorCQl0ZXN0IC16ICIkKGdpdCBscy10cmVlIEhFQUQpIgorCisJKSAmJgorCWNtcCAuZ2l0L2luZGV4IHNhdmVkLWluZGV4ID4vZGV2L251bGwKKycKKworY2F0ID4gZXhwZWN0IDw8IEVPRgorem9ydAorCitTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1zaWdub2ZmJyAnCisJZWNobyAieWV0IGFub3RoZXIgY29udGVudCAqbmFyZioiID4+IGZvbyAmJgorCWVjaG8gInpvcnQiIHwgZ2l0IGNvbW1pdCAtcyAtRiAtIGZvbyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAiMSwvXlwkL2QiID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSBmcm9tIGZpbGUgKDEpJyAnCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyAiTG9nIGluIHRvcCBkaXJlY3RvcnkiID5sb2cgJiYKKwllY2hvICJMb2cgaW4gc3ViIGRpcmVjdG9yeSIgPnN1YmRpci9sb2cgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUYgbG9nCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgIkxvZyBpbiBzdWIgZGlyZWN0b3J5IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSBmcm9tIGZpbGUgKDIpJyAnCisJcm0gLWYgbG9nICYmCisJZWNobyAiTG9nIGluIHN1YiBkaXJlY3RvcnkiID5zdWJkaXIvbG9nICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIGxvZworCSkgJiYKKwljb21taXRfbXNnX2lzICJMb2cgaW4gc3ViIGRpcmVjdG9yeSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lc3NhZ2UgZnJvbSBzdGRpbicgJworCSgKKwkJY2Qgc3ViZGlyICYmCisJCWVjaG8gIkxvZyB3aXRoIGZvbyB3b3JkIiB8IGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtRiAtCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgIkxvZyB3aXRoIGZvbyB3b3JkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLUYgb3ZlcnJpZGVzIC10JyAnCisJKAorCQljZCBzdWJkaXIgJiYKKwkJZWNobyAiLUYgbG9nIiA+IGYubG9nICYmCisJCWVjaG8gIi10IHRlbXBsYXRlIiA+IHQudGVtcGxhdGUgJiYKKwkJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1GIGYubG9nIC10IHQudGVtcGxhdGUKKwkpICYmCisJY29tbWl0X21zZ19pcyAiLUYgbG9nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDb21taXQgd2l0aG91dCBtZXNzYWdlIGlzIGFsbG93ZWQgd2l0aCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UnICcKKwllY2hvICJtb3JlIGNvbnRlbnQiID4+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwk+ZW1wdHkgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHktbWVzc2FnZSA8ZW1wdHkgJiYKKwljb21taXRfbXNnX2lzICIiICYmCisJZ2l0IHRhZyBlbXB0eS1tZXNzYWdlLWNvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDb21taXQgd2l0aG91dCBtZXNzYWdlIGlzIG5vLW5vIHdpdGhvdXQgLS1hbGxvdy1lbXB0eS1tZXNzYWdlJyAnCisJZWNobyAibW9yZSBjb250ZW50IiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJPmVtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCA8ZW1wdHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ29tbWl0IGEgbWVzc2FnZSB3aXRoIC0tYWxsb3ctZW1wdHktbWVzc2FnZScgJworCWVjaG8gImV2ZW4gbW9yZSBjb250ZW50IiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgLW0iaGVsbG8gdGhlcmUiICYmCisJY29tbWl0X21zZ19pcyAiaGVsbG8gdGhlcmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtQyBlbXB0eSByZXNwZWN0cyAtLWFsbG93LWVtcHR5LW1lc3NhZ2UnICcKKwllY2hvIG1vcmUgPj5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLUMgZW1wdHktbWVzc2FnZS1jb21taXQgJiYKKwlnaXQgY29tbWl0IC1DIGVtcHR5LW1lc3NhZ2UtY29tbWl0IC0tYWxsb3ctZW1wdHktbWVzc2FnZSAmJgorCWNvbW1pdF9tc2dfaXMgIiIKKycKKworY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAoKSB7CisJZWNobyAiZmlyc3QgY29udGVudCBsaW5lIiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vICYmCisJY2F0ID5sb2cgPDxFT0YgJiYKK3RhcmdldCBtZXNzYWdlIHN1YmplY3QgbGluZQorCit0YXJnZXQgbWVzc2FnZSBib2R5IGxpbmUgMQordGFyZ2V0IG1lc3NhZ2UgYm9keSBsaW5lIDIKK0VPRgorCWdpdCBjb21taXQgLUYgbG9nICYmCisJZWNobyAic2Vjb25kIGNvbnRlbnQgbGluZSIgPj5mb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImludGVybWVkaWF0ZSBjb21taXQiICYmCisJZWNobyAidGhpcmQgY29udGVudCBsaW5lIiA+PmZvbyAmJgorCWdpdCBhZGQgZm9vCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWZpeHVwIHByb3ZpZGVzIGNvcnJlY3Qgb25lLWxpbmUgY29tbWl0IG1lc3NhZ2UnICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJZ2l0IGNvbW1pdCAtLWZpeHVwIEhFQUR+MSAmJgorCWNvbW1pdF9tc2dfaXMgImZpeHVwISB0YXJnZXQgbWVzc2FnZSBzdWJqZWN0IGxpbmUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLXNxdWFzaCB3b3JrcyB3aXRoIC1GJyAnCisJY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAmJgorCWVjaG8gImxvZyBtZXNzYWdlIGZyb20gZmlsZSIgPm1zZ2ZpbGUgJiYKKwlnaXQgY29tbWl0IC0tc3F1YXNoIEhFQUR+MSAtRiBtc2dmaWxlICAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgdGFyZ2V0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lbG9nIG1lc3NhZ2UgZnJvbSBmaWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCAtbScgJworCWNvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgJiYKKwlnaXQgY29tbWl0IC0tc3F1YXNoIEhFQUR+MSAtbSAiZm9vIGJhclxuYmF6IiAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgdGFyZ2V0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lZm9vIGJhclxuYmF6IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCAtQycgJworCWNvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgJiYKKwlnaXQgY29tbWl0IC0tc3F1YXNoIEhFQUR+MSAtQyBIRUFEICYmCisJY29tbWl0X21zZ19pcyAic3F1YXNoISB0YXJnZXQgbWVzc2FnZSBzdWJqZWN0IGxpbmVpbnRlcm1lZGlhdGUgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCAtYycgJworCWNvbW1pdF9mb3JfcmViYXNlX2F1dG9zcXVhc2hfc2V0dXAgJiYKKwl0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvZWRpdC1jb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtLXNxdWFzaCBIRUFEfjEgLWMgSEVBRCAmJgorCWNvbW1pdF9tc2dfaXMgInNxdWFzaCEgdGFyZ2V0IG1lc3NhZ2Ugc3ViamVjdCBsaW5lZWRpdGVkIGNvbW1pdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3F1YXNoIHdvcmtzIHdpdGggLUMgZm9yIHNhbWUgY29tbWl0JyAnCisJY29tbWl0X2Zvcl9yZWJhc2VfYXV0b3NxdWFzaF9zZXR1cCAmJgorCWdpdCBjb21taXQgLS1zcXVhc2ggSEVBRCAtQyBIRUFEICYmCisJY29tbWl0X21zZ19pcyAic3F1YXNoISBpbnRlcm1lZGlhdGUgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCAtYyBmb3Igc2FtZSBjb21taXQnICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2VkaXQtY29udGVudCAmJgorCWdpdCBjb21taXQgLS1zcXVhc2ggSEVBRCAtYyBIRUFEICYmCisJY29tbWl0X21zZ19pcyAic3F1YXNoISBlZGl0ZWQgY29tbWl0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zcXVhc2ggd29ya3Mgd2l0aCBlZGl0b3InICcKKwljb21taXRfZm9yX3JlYmFzZV9hdXRvc3F1YXNoX3NldHVwICYmCisJdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50ICYmCisJZ2l0IGNvbW1pdCAtLXNxdWFzaCBIRUFEfjEgJiYKKwljb21taXRfbXNnX2lzICJzcXVhc2ghIHRhcmdldCBtZXNzYWdlIHN1YmplY3QgbGluZWNvbW1pdCBtZXNzYWdlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbnZhbGlkIG1lc3NhZ2Ugb3B0aW9ucyB3aGVuIHVzaW5nIC0tZml4dXAnICcKKwllY2hvIGNoYW5nZXMgPj5mb28gJiYKKwllY2hvICJtZXNzYWdlIiA+bG9nICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZml4dXAgSEVBRH4xIC0tc3F1YXNoIEhFQUR+MiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1maXh1cCBIRUFEfjEgLUMgSEVBRH4yICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWZpeHVwIEhFQUR+MSAtYyBIRUFEfjIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZml4dXAgSEVBRH4xIC1tICJjbWRsaW5lIG1lc3NhZ2UiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWZpeHVwIEhFQUR+MSAtRiBsb2cKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTAwL2FkZC1jb21tZW50cyBiL3QvdDc1MDAvYWRkLWNvbW1lbnRzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3MmU2NWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAwL2FkZC1jb21tZW50cwpAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorZWNobyAiIyB0aGlzIGlzIGEgbmV3IGNvbW1lbnQiID4+ICIkMSIKK2VjaG8gIiMgYW5kIHNvIGlzIHRoaXMiID4+ICIkMSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdC90NzUwMC9hZGQtY29udGVudCBiL3QvdDc1MDAvYWRkLWNvbnRlbnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmZhM2Q4NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDAvYWRkLWNvbnRlbnQKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKK2VjaG8gImNvbW1pdCBtZXNzYWdlIiA+PiAiJDEiCitleGl0IDAKZGlmZiAtLWdpdCBhL3QvdDc1MDAvYWRkLWNvbnRlbnQtYW5kLWNvbW1lbnQgYi90L3Q3NTAwL2FkZC1jb250ZW50LWFuZC1jb21tZW50Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0ZGNjZmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAwL2FkZC1jb250ZW50LWFuZC1jb21tZW50CkBAIC0wLDAgKzEsNSBAQAorIyEvYmluL3NoCitlY2hvICJjb21taXQgbWVzc2FnZSIgPj4gIiQxIgorZWNobyAiIyBjb21tZW50IiA+PiAiJDEiCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvdC90NzUwMC9hZGQtc2lnbmVkLW9mZiBiL3QvdDc1MDAvYWRkLXNpZ25lZC1vZmYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTFkODU2YQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDAvYWRkLXNpZ25lZC1vZmYKQEAgLTAsMCArMSwzIEBACisjIS9iaW4vc2gKK2VjaG8gIlNpZ25lZC1vZmYtYnk6IGZvbyA8YmFyQGZyb3R6PiIgPj4gIiQxIgorZXhpdCAwCmRpZmYgLS1naXQgYS90L3Q3NTAwL2FkZC13aGl0ZXNwYWNlZC1jb250ZW50IGIvdC90NzUwMC9hZGQtd2hpdGVzcGFjZWQtY29udGVudApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jY2YwN2M2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMC9hZGQtd2hpdGVzcGFjZWQtY29udGVudApAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorc2VkIC1lICdzL3wkLy8nID4+IiQxIiA8PFxFT0YKKworIHwKK2NvbW1pdCBtZXNzYWdlICAJIHwKKworRU9GCitleGl0IDAKZGlmZiAtLWdpdCBhL3QvdDc1MDAvZWRpdC1jb250ZW50IGIvdC90NzUwMC9lZGl0LWNvbnRlbnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDhkYjlmZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDAvZWRpdC1jb250ZW50CkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCitzZWQgLWUgInMvaW50ZXJtZWRpYXRlL2VkaXRlZC9nIiA8IiQxIiA+IiQxLSIKK212ICIkMS0iICIkMSIKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdC90NzUwMS1jb21taXQuc2ggYi90L3Q3NTAxLWNvbW1pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42M2UwNDI3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMS1jb21taXQuc2gKQEAgLTAsMCArMSw1OTAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgS3Jpc3RpYW4gSMO4Z3NiZXJnIDxrcmhAcmVkaGF0LmNvbT4KKyMKKworIyBGSVhNRTogVGVzdCB0aGUgdmFyaW91cyBpbmRleCB1c2FnZXMsIC1pIGFuZCAtbywgdGVzdCByZWZsb2csCisjIHNpZ25vZmYKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNvbW1pdCcKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZL2RpZmYtbGliLnNoIgorCithdXRob3I9J1RoZSBSZWFsIEF1dGhvciA8c29tZWd1eUBoaXMuZW1haWwub3JnPicKKwordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgc3RhdHVzJyAnCisJZWNobyBib25nbyBib25nbyA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBzdGF0dXMgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmdyZXAgIkluaXRpYWwgY29tbWl0IiBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbCBpbml0aWFsIGFtZW5kJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWFtZW5kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBpbml0aWFsIGNvbW1pdCcgJworCWdpdCBjb21taXQgLW0gaW5pdGlhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctbSBhbmQgLUYgZG8gbm90IG1peCcgJworCWdpdCBjaGVja291dCBIRUFEIGZpbGUgJiYgZWNobyA+PmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBmb28gLW0gYmFyIC1GIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLW0gYW5kIC1DIGRvIG5vdCBtaXgnICcKKwlnaXQgY2hlY2tvdXQgSEVBRCBmaWxlICYmIGVjaG8gPj5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLUMgSEVBRCAtbSBpbGxlZ2FsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzIGFuZCAtYSBkbyBub3QgbWl4JyAnCisJZWNobyBLaW5nIG9mIHRoZSBib25nbyA+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gZm9vIC1hIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjYW4gdXNlIHBhdGhzIHdpdGggLS1pbnRlcmFjdGl2ZScgJworCWVjaG8gYm9uZy1vLWJvbmcgPmZpbGUgJiYKKwkjIDI6IHVwZGF0ZSwgMTpzdCBwYXRoLCB0aGF0IGlzIGFsbCwgNzogcXVpdAorCSggZWNobyAyOyBlY2hvIDE7IGVjaG87IGVjaG8gNyApIHwKKwlnaXQgY29tbWl0IC1tIGZvbyAtLWludGVyYWN0aXZlIGZpbGUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIGludmFsaWQgY29tbWl0IHdpdGggLUMnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLUMgYm9ndXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90aGluZyB0byBjb21taXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tZHJ5LXJ1biBmYWlscyB3aXRoIG5vdGhpbmcgdG8gY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBpbml0aWFsIC0tZHJ5LXJ1bgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXNob3J0IGZhaWxzIHdpdGggbm90aGluZyB0byBjb21taXQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tIGluaXRpYWwgLS1zaG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXBvcmNlbGFpbiBmYWlscyB3aXRoIG5vdGhpbmcgdG8gY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBpbml0aWFsIC0tcG9yY2VsYWluCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbG9uZyBmYWlscyB3aXRoIG5vdGhpbmcgdG8gY29tbWl0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBpbml0aWFsIC0tbG9uZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cDogbm9uLWluaXRpYWwgY29tbWl0JyAnCisJZWNobyBib25nbyBib25nbyBib25nbyA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gbmV4dCAtYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWRyeS1ydW4gd2l0aCBzdHVmZiB0byBjb21taXQgcmV0dXJucyBvaycgJworCWVjaG8gYm9uZ28gYm9uZ28gYm9uZ28gPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBuZXh0IC1hIC0tZHJ5LXJ1bgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICctLXNob3J0IHdpdGggc3R1ZmYgdG8gY29tbWl0IHJldHVybnMgb2snICcKKwllY2hvIGJvbmdvIGJvbmdvIGJvbmdvID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gbmV4dCAtYSAtLXNob3J0CisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJy0tcG9yY2VsYWluIHdpdGggc3R1ZmYgdG8gY29tbWl0IHJldHVybnMgb2snICcKKwllY2hvIGJvbmdvIGJvbmdvIGJvbmdvID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gbmV4dCAtYSAtLXBvcmNlbGFpbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWxvbmcgd2l0aCBzdHVmZiB0byBjb21taXQgcmV0dXJucyBvaycgJworCWVjaG8gYm9uZ28gYm9uZ28gYm9uZ28gPj5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBuZXh0IC1hIC0tbG9uZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgbWVzc2FnZSBmcm9tIG5vbi1leGlzdGluZyBmaWxlJyAnCisJZWNobyBtb3JlIGJvbmdvOiBib25nbyBib25nbyBib25nbyBib25nbyA+ZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLUYgZ2FoIC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGNvbW1pdCBtZXNzYWdlJyAnCisJIyBFbXB0eSBleGNlcHQgc3RyYXkgdGFicyBhbmQgc3BhY2VzIG9uIGEgZmV3IGxpbmVzLgorCXNlZCAtZSAicy9ALy9nIiA+bXNnIDw8LVxFT0YgJiYKKwkJQAkJQAorCQlAQAorCQlAICBACisJCUBTaWduZWQtb2ZmLWJ5OiBodWxhQAorCUVPRgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLUYgbXNnIC1hCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RlbXBsYXRlICJlbXB0eW5lc3MiIGNoZWNrIGRvZXMgbm90IGtpY2sgaW4gd2l0aCAtRicgJworCWdpdCBjaGVja291dCBIRUFEIGZpbGUgJiYgZWNobyA+PmZpbGUgJiYgZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtdCBmaWxlIC1GIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVtcGxhdGUgImVtcHR5bmVzcyIgY2hlY2snICcKKwlnaXQgY2hlY2tvdXQgSEVBRCBmaWxlICYmIGVjaG8gPj5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLXQgZmlsZSAyPmVyciAmJgorCXRlc3RfaTE4bmdyZXAgImRpZCBub3QgZWRpdCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBjb21taXQgbWVzc2FnZSBmcm9tIGZpbGUnICcKKwlnaXQgY2hlY2tvdXQgSEVBRCBmaWxlICYmIGVjaG8gPj5maWxlICYmIGdpdCBhZGQgZmlsZSAmJgorCWVjaG8gdGhpcyBpcyB0aGUgY29tbWl0IG1lc3NhZ2UsIGNvbWluZyBmcm9tIGEgZmlsZSA+bXNnICYmCisJZ2l0IGNvbW1pdCAtRiBtc2cgLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmQgY29tbWl0JyAnCisJY2F0ID5lZGl0b3IgPDwtXEVPRiAmJgorCSMhL2Jpbi9zaAorCXNlZCAtZSAicy9hIGZpbGUvYW4gYW1lbmQgY29tbWl0L2ciIDwgIiQxIiA+ICIkMS0iCisJbXYgIiQxLSIgIiQxIgorCUVPRgorCWNobW9kIDc1NSBlZGl0b3IgJiYKKwlFRElUT1I9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtLWFtZW5kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIC0tb25seSBpZ25vcmVzIHN0YWdlZCBjb250ZW50cycgJworCWNwIGZpbGUgZmlsZS5leHBlY3QgJiYKKwllY2hvIGNoYW5nZWQgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tZWRpdCAtLWFtZW5kIC0tb25seSAmJgorCWdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6ZmlsZSA+ZmlsZS5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBmaWxlLmV4cGVjdCBmaWxlLmFjdHVhbCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBlZGl0b3InICcKKwljYXQgPmVkaXRvciA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJc2VkIC1lICJzL3VuYW1lbmRlZC9hbWVuZGVkL2ciIDwiJDEiID4iJDEtIgorCW12ICIkMS0iICIkMSIKKwlFT0YKKwljaG1vZCA3NTUgZWRpdG9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIHdpdGhvdXQgbGF1bmNoaW5nIGVkaXRvcicgJworCWVjaG8gdW5hbWVuZGVkID5leHBlY3QgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gInVuYW1lbmRlZCIgJiYKKwllY2hvIG5lZWRzIG1vcmUgYm9uZ28gPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlFRElUT1I9Li9lZGl0b3IgZ2l0IGNvbW1pdCAtLW5vLWVkaXQgLS1hbWVuZCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQgLS0gZmlsZSAmJgorCWdpdCBkaWZmLXRyZWUgLXMgLS1mb3JtYXQ9JXMgSEVBRCA+bXNnICYmCisJdGVzdF9jbXAgZXhwZWN0IG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFtZW5kIC0tZWRpdCcgJworCWVjaG8gYW1lbmRlZCA+ZXhwZWN0ICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJ1bmFtZW5kZWQiICYmCisJZWNobyBib25nbyBhZ2FpbiA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUVESVRPUj0uL2VkaXRvciBnaXQgY29tbWl0IC0tZWRpdCAtLWFtZW5kICYmCisJZ2l0IGRpZmYtdHJlZSAtcyAtLWZvcm1hdD0lcyBIRUFEID5tc2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYW1lbmQgLS1lZGl0IG9mIGVtcHR5IG1lc3NhZ2UnICcKKwljYXQgPnJlcGxhY2UgPDwtXEVPRiAmJgorCSMhL2Jpbi9zaAorCWVjaG8gImFtZW5kZWQiID4iJDEiCisJRU9GCisJY2htb2QgNzU1IHJlcGxhY2UgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbGxvdy1lbXB0eS1tZXNzYWdlIC1tICIiICYmCisJZWNobyBtb3JlIGJvbmdvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJRURJVE9SPS4vcmVwbGFjZSBnaXQgY29tbWl0IC0tZWRpdCAtLWFtZW5kICYmCisJZ2l0IGRpZmYtdHJlZSAtcyAtLWZvcm1hdD0lcyBIRUFEID5tc2cgJiYKKwkuL3JlcGxhY2UgZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG1zZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctbSAtLWVkaXQnICcKKwllY2hvIGFtZW5kZWQgPmV4cGVjdCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBidWZmZXIgJiYKKwllY2hvIGJvbmdvIGJvbmdvID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLW0gdW5hbWVuZGVkIC0tZWRpdCAmJgorCWdpdCBkaWZmLXRyZWUgLXMgIC0tZm9ybWF0PSVzIEhFQUQgPm1zZyAmJgorCXRlc3RfY21wIGV4cGVjdCBtc2cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLW0gYW5kIC1GIGRvIG5vdCBtaXgnICcKKwllY2hvIGVub3VnaCB3aXRoIHRoZSBib25nb3MgPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1GIG1zZyAtbSBhbWVuZGluZyAuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nIG1lc3NhZ2UgZnJvbSBvdGhlciBjb21taXQnICcKKwlnaXQgY29tbWl0IC1DIEhFQUReIC4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdGluZyBtZXNzYWdlIGZyb20gb3RoZXIgY29tbWl0JyAnCisJY2F0ID5lZGl0b3IgPDwtXEVPRiAmJgorCSMhL2Jpbi9zaAorCXNlZCAtZSAicy9hbWVuZC9vbGRlci9nIiAgPCAiJDEiID4gIiQxLSIKKwltdiAiJDEtIiAiJDEiCisJRU9GCisJY2htb2QgNzU1IGVkaXRvciAmJgorCWVjaG8gaHVsYSBodWxhID5maWxlICYmCisJRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLWMgSEVBRF4gLWEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVzc2FnZSBmcm9tIHN0ZGluJyAnCisJZWNobyBzaWxseSBuZXcgY29udGVudHMgPmZpbGUgJiYKKwllY2hvIGNvbW1pdCBtZXNzYWdlIGZyb20gc3RkaW4gfAorCWdpdCBjb21taXQgLUYgLSAtYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkaW5nIGF1dGhvciBmcm9tIGNvbW1hbmQgbGluZScgJworCWVjaG8gZ2FrID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSBhdXRob3IgXAorCQktLWF1dGhvciAiUnViYmVyIER1Y2sgPHJkdWNrQGNvbnZveS5vcmc+IiAtYSA+b3V0cHV0IDI+JjEgJiYKKwlncmVwIFJ1YmJlci5EdWNrIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2ludGVyYWN0aXZlIGFkZCcgJworCWVjaG8gNyB8CisJZ2l0IGNvbW1pdCAtLWludGVyYWN0aXZlIHwKKwlncmVwICJXaGF0IG5vdyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICJjb21taXQgLS1pbnRlcmFjdGl2ZSBkb2Vzbid0IGNoYW5nZSBpbmRleCBpZiBlZGl0b3IgYWJvcnRzIiAnCisJZWNobyB6b28gPmZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZiAtLWV4aXQtY29kZSA+ZGlmZjEgJiYKKwkoZWNobyB1IDsgZWNobyAiKiIgOyBlY2hvIHEpIHwKKwkoCisJCUVESVRPUj06ICYmCisJCWV4cG9ydCBFRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWludGVyYWN0aXZlCisJKSAmJgorCWdpdCBkaWZmID5kaWZmMiAmJgorCWNvbXBhcmVfZGlmZl9wYXRjaCBkaWZmMSBkaWZmMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0b3Igbm90IGludm9rZWQgaWYgLUYgaXMgZ2l2ZW4nICcKKwljYXQgPmVkaXRvciA8PC1cRU9GICYmCisJIyEvYmluL3NoCisJc2VkIC1lIHMvZ29vZC9iYWQvZyA8IiQxIiA+IiQxLSIKKwltdiAiJDEtIiAiJDEiCisJRU9GCisJY2htb2QgNzU1IGVkaXRvciAmJgorCisJZWNobyBBIGdvb2QgY29tbWl0IG1lc3NhZ2UuID5tc2cgJiYKKwllY2hvIG1vbyA+ZmlsZSAmJgorCisJRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLWEgLUYgbXNnICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9Zm9ybWF0OiVzID5zdWJqZWN0ICYmCisJZ3JlcCAtcSBnb29kIHN1YmplY3QgJiYKKworCWVjaG8gcXVhY2sgPmZpbGUgJiYKKwllY2hvIEFub3RoZXIgZ29vZCBtZXNzYWdlLiB8CisJRURJVE9SPS4vZWRpdG9yIGdpdCBjb21taXQgLWEgLUYgLSAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolcyA+c3ViamVjdCAmJgorCWdyZXAgLXEgZ29vZCBzdWJqZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgY29tbWl0IHRoYXQgaW52b2x2ZXMgcmVtb3ZhbCAoMSknICcKKworCWdpdCBybSAtLWNhY2hlZCBmaWxlICYmCisJbXYgZmlsZSBlbGlmICYmCisJZ2l0IGFkZCBlbGlmICYmCisJZ2l0IGNvbW1pdCAtbSAiUGFydGlhbDogYWRkIGVsaWYiIGVsaWYgJiYKKwlnaXQgZGlmZi10cmVlIC0tbmFtZS1zdGF0dXMgSEVBRF4gSEVBRCA+Y3VycmVudCAmJgorCWVjaG8gIkEJZWxpZiIgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgY29tbWl0IHRoYXQgaW52b2x2ZXMgcmVtb3ZhbCAoMiknICcKKworCWdpdCBjb21taXQgLW0gIlBhcnRpYWw6IHJlbW92ZSBmaWxlIiBmaWxlICYmCisJZ2l0IGRpZmYtdHJlZSAtLW5hbWUtc3RhdHVzIEhFQUReIEhFQUQgPmN1cnJlbnQgJiYKKwllY2hvICJECWZpbGUiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIGNvbW1pdCB0aGF0IGludm9sdmVzIHJlbW92YWwgKDMpJyAnCisKKwlnaXQgcm0gLS1jYWNoZWQgZWxpZiAmJgorCWVjaG8gZWxpZiA+ZWxpZiAmJgorCWdpdCBjb21taXQgLW0gIlBhcnRpYWw6IG1vZGlmeSBlbGlmIiBlbGlmICYmCisJZ2l0IGRpZmYtdHJlZSAtLW5hbWUtc3RhdHVzIEhFQUReIEhFQUQgPmN1cnJlbnQgJiYKKwllY2hvICJNCWVsaWYiID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCBjb21taXQgdG8gZml4IGF1dGhvcicgJworCisJb2xkdGljaz0kR0lUX0FVVEhPUl9EQVRFICYmCisJdGVzdF90aWNrICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEIHwKKwlzZWQgLWUgInMvYXV0aG9yLiovYXV0aG9yICRhdXRob3IgJG9sZHRpY2svIiBcCisJCS1lICJzL15cKGNvbW1pdHRlci4qPiBcKS4qJC9cMSRHSVRfQ09NTUlUVEVSX0RBVEUvIiA+IFwKKwkJZXhwZWN0ZWQgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1hdXRob3I9IiRhdXRob3IiICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgPiBjdXJyZW50ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIGNvbW1pdCB0byBmaXggZGF0ZScgJworCisJdGVzdF90aWNrICYmCisJbmV3dGljaz0kR0lUX0FVVEhPUl9EQVRFICYmCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEIHwKKwlzZWQgLWUgInMvYXV0aG9yLiovYXV0aG9yICRhdXRob3IgJG5ld3RpY2svIiBcCisJCS1lICJzL15cKGNvbW1pdHRlci4qPiBcKS4qJC9cMSRHSVRfQ09NTUlUVEVSX0RBVEUvIiA+IFwKKwkJZXhwZWN0ZWQgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLS1kYXRlPSIkbmV3dGljayIgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+IGN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IG1lbnRpb25zIGZvcmNlZCBkYXRlIGluIG91dHB1dCcgJworCWdpdCBjb21taXQgLS1hbWVuZCAtLWRhdGU9MjAxMC0wMS0wMlQwMzowNDowNSA+b3V0cHV0ICYmCisJZ3JlcCAiRGF0ZTogKlNhdCBKYW4gMiAwMzowNDowNSAyMDEwIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNvbXBsYWlucyBhYm91dCBjb21wbGV0ZWx5IGJvZ3VzIGRhdGVzJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWFtZW5kIC0tZGF0ZT1zZXZlbnRlZW4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tZGF0ZSBhbGxvd3MgYXBwcm94aWRhdGUnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgXAorCQktLWRhdGU9Im1pZG5pZ2h0IHRoZSAxMnRoIG9mIG9jdG9iZXIsIGFubm8gZG9taW5pIDE5NzkiICYmCisJZWNobyAiRnJpIE9jdCAxMiAwMDowMDowMCAxOTc5ICswMDAwIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0lYWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbiBvZmYgKDEpJyAnCisKKwllY2hvIDEgPnBvc2l0aXZlICYmCisJZ2l0IGFkZCBwb3NpdGl2ZSAmJgorCWdpdCBjb21taXQgLXMgLW0gInRoYW5rIHlvdSIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJKAorCQllY2hvIHRoYW5rIHlvdQorCQllY2hvCisJCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8CisJCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ24gb2ZmICgyKScgJworCisJZWNobyAyID5wb3NpdGl2ZSAmJgorCWdpdCBhZGQgcG9zaXRpdmUgJiYKKwlleGlzdGluZz0iU2lnbmVkLW9mZi1ieTogV2F0Y2ggVGhpcyA8d2F0Y2h0aGlzQGV4YW1wbGUuY29tPiIgJiYKKwlnaXQgY29tbWl0IC1zIC1tICJ0aGFuayB5b3UKKworJGV4aXN0aW5nIiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiID5hY3R1YWwgJiYKKwkoCisJCWVjaG8gdGhhbmsgeW91CisJCWVjaG8KKwkJZWNobyAkZXhpc3RpbmcKKwkJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UIHwKKwkJc2VkIC1lICJzLz4uKi8+LyIgLWUgInMvXi9TaWduZWQtb2ZmLWJ5OiAvIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbm9mZiBnYXAnICcKKworCWVjaG8gMyA+cG9zaXRpdmUgJiYKKwlnaXQgYWRkIHBvc2l0aXZlICYmCisJYWx0PSJBbHQtUkZDLTgyMi1IZWFkZXI6IFZhbHVlIiAmJgorCWdpdCBjb21taXQgLXMgLW0gIndlbGNvbWUKKworJGFsdCIgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLWUgIjEsL15cJC9kIiA+IGFjdHVhbCAmJgorCSgKKwkJZWNobyB3ZWxjb21lCisJCWVjaG8KKwkJZWNobyAkYWx0CisJCWdpdCB2YXIgR0lUX0NPTU1JVFRFUl9JREVOVCB8CisJCXNlZCAtZSAicy8+LiovPi8iIC1lICJzL14vU2lnbmVkLW9mZi1ieTogLyIKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWdub2ZmIGdhcCAyJyAnCisKKwllY2hvIDQgPnBvc2l0aXZlICYmCisJZ2l0IGFkZCBwb3NpdGl2ZSAmJgorCWFsdD0iZml4ZWQ6IDM0IiAmJgorCWdpdCBjb21taXQgLXMgLW0gIndlbGNvbWUKKworV2UgaGF2ZSBub3cKKyRhbHQiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPiBhY3R1YWwgJiYKKwkoCisJCWVjaG8gd2VsY29tZQorCQllY2hvCisJCWVjaG8gV2UgaGF2ZSBub3cKKwkJZWNobyAkYWx0CisJCWVjaG8KKwkJZ2l0IHZhciBHSVRfQ09NTUlUVEVSX0lERU5UIHwKKwkJc2VkIC1lICJzLz4uKi8+LyIgLWUgInMvXi9TaWduZWQtb2ZmLWJ5OiAvIgorCSkgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIC1tJyAnCisKKwk+bmVnYXRpdmUgJiYKKwlnaXQgYWRkIG5lZ2F0aXZlICYmCisJZ2l0IGNvbW1pdCAtbSAib25lIiAtbSAidHdvIiAtbSAidGhyZWUiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1lICIxLC9eXCQvZCIgPmFjdHVhbCAmJgorCSgKKwkJZWNobyBvbmUKKwkJZWNobworCQllY2hvIHR3bworCQllY2hvCisJCWVjaG8gdGhyZWUKKwkpID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtZW5kIGNvbW1pdCB0byBmaXggYXV0aG9yJyAnCisKKwlvbGR0aWNrPSRHSVRfQVVUSE9SX0RBVEUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgfAorCXNlZCAtZSAicy9hdXRob3IuKi9hdXRob3IgJGF1dGhvciAkb2xkdGljay8iIFwKKwkJLWUgInMvXlwoY29tbWl0dGVyLio+IFwpLiokL1wxJEdJVF9DT01NSVRURVJfREFURS8iID4gXAorCQlleHBlY3RlZCAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtLWF1dGhvcj0iJGF1dGhvciIgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCA+IGN1cnJlbnQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBjdXJyZW50CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGNvbW1pdCA8ZmlsZT4gd2l0aCBkaXJ0eSBpbmRleCcgJworCWVjaG8gdGFjb2NhdCA+IGVsaWYgJiYKKwllY2hvIHRlaGx1bHogPiBjaHogJiYKKwlnaXQgYWRkIGNoeiAmJgorCWdpdCBjb21taXQgZWxpZiAtbSAidGFjb2NhdCBpcyBhIHBhbGluZHJvbWUiICYmCisJZ2l0IHNob3cgLS1zdGF0IHwgZ3JlcCBlbGlmICYmCisJZ2l0IGRpZmYgLS1jYWNoZWQgfCBncmVwIGNoegorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIHRyZWUgKHNpbmdsZSBwYXJlbnQpJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtbSBlbXB0eQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NhbWUgdHJlZSAoc2luZ2xlIHBhcmVudCkgLS1hbGxvdy1lbXB0eScgJworCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJmb3JjZWQgZW1wdHkiICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBmb3JjZWQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzYW1lIHRyZWUgKG1lcmdlIGFuZCBhbWVuZCBtZXJnZSknICcKKworCWdpdCBjaGVja291dCAtYiBzaWRlIEhFQUReICYmCisJZWNobyB6ZXJvID56ZXJvICYmCisJZ2l0IGFkZCB6ZXJvICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIHplcm8iICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCisJZ2l0IG1lcmdlIC1zIG91cnMgc2lkZSAtbSAiZW1wdHkgb2siICYmCisJZ2l0IGRpZmYgSEVBRF4gSEVBRCA+YWN0dWFsICYmCisJOiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKworCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZW1wdHkgcmVhbGx5IG9rIiAmJgorCWdpdCBkaWZmIEhFQUReIEhFQUQgPmFjdHVhbCAmJgorCTogPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW1lbmQgdXNpbmcgdGhlIG1lc3NhZ2UgZnJvbSBhbm90aGVyIGNvbW1pdCcgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAib2xkIGNvbW1pdCIgJiYKKwlvbGQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJuZXcgY29tbWl0IiAmJgorCW5ldz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLS1hbWVuZCAtQyAiJG9sZCIgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT0iZm9ybWF0OiVhZCAlcyIgIiRvbGQiID5leHBlY3RlZCAmJgorCWdpdCBzaG93IC0tcHJldHR5PSJmb3JtYXQ6JWFkICVzIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCB1c2luZyB0aGUgbWVzc2FnZSBmcm9tIGEgY29tbWl0IG5hbWVkIHdpdGggdGFnJyAnCisKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJvbGQgY29tbWl0IiAmJgorCW9sZD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCkgJiYKKwlnaXQgdGFnIC1hIC1tICJ0YWcgb24gb2xkIiB0YWdnZWQtb2xkIEhFQUQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIm5ldyBjb21taXQiICYmCisJbmV3PSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtLWFtZW5kIC1DIHRhZ2dlZC1vbGQgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT0iZm9ybWF0OiVhZCAlcyIgIiRvbGQiID5leHBlY3RlZCAmJgorCWdpdCBzaG93IC0tcHJldHR5PSJmb3JtYXQ6JWFkICVzIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZCBjYW4gY29weSBub3RlcycgJworCisJZ2l0IGNvbmZpZyBub3Rlcy5yZXdyaXRlLmFtZW5kIHRydWUgJiYKKwlnaXQgY29uZmlnIG5vdGVzLnJld3JpdGVSZWYgInJlZnMvbm90ZXMvKiIgJiYKKwl0ZXN0X2NvbW1pdCBmb28gJiYKKwlnaXQgbm90ZXMgYWRkIC1tImEgbm90ZSIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0ibmV3IGZvbyIgJiYKKwl0ZXN0ICIkKGdpdCBub3RlcyBzaG93KSIgPSAiYSBub3RlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBhIGZpbGUgd2hvc2UgbmFtZSBpcyBhIGRhc2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZm9yIGkgaW4gMSAyIDMgNCA1CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPi4vLSAmJgorCWdpdCBhZGQgLi8tICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIGRhc2giID5vdXRwdXQgPC9kZXYvbnVsbCAmJgorCXRlc3RfaTE4bmdyZXAgIiBjaGFuZ2VkLCA1IGluc2VydGlvbnMiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW9ubHkgd29ya3Mgb24gdG8tYmUtYm9ybiBicmFuY2gnICcKKwkjIFRoaXMgdGVzdCByZWxpZXMgb24gaGF2aW5nIHNvbWV0aGluZyBpbiB0aGUgaW5kZXgsIGFzIGl0CisJIyB3b3VsZCBub3Qgb3RoZXJ3aXNlIGFjdHVhbGx5IHByb3ZlIG11Y2guICBTbyBjaGVjayB0aGlzLgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzKSIgJiYKKwlnaXQgY2hlY2tvdXQgLS1vcnBoYW4gb3JwaGFuICYmCisJZWNobyBmb28gPm5ld2ZpbGUgJiYKKwlnaXQgYWRkIG5ld2ZpbGUgJiYKKwlnaXQgY29tbWl0IC0tb25seSBuZXdmaWxlIC1tIi0tb25seSBvbiB1bmJvcm4gYnJhbmNoIiAmJgorCWVjaG8gbmV3ZmlsZSA+ZXhwZWN0ZWQgJiYKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTAyLWNvbW1pdC5zaCBiL3QvdDc1MDItY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIzOWUzMTMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTAyLWNvbW1pdC5zaApAQCAtMCwwICsxLDYyMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjb21taXQgcG9yY2VsYWluLWlzaCcKKworLiAuL3Rlc3QtbGliLnNoCisKK2NvbW1pdF9tc2dfaXMgKCkgeworCWV4cGVjdD1jb21taXRfbXNnX2lzLmV4cGVjdAorCWFjdHVhbD1jb21taXRfbXNnX2lzLmFjdHVhbAorCisJcHJpbnRmICIlcyIgIiQoZ2l0IGxvZyAtLXByZXR0eT1mb3JtYXQ6JXMlYiAtMSkiID4kYWN0dWFsICYmCisJcHJpbnRmICIlcyIgIiQxIiA+JGV4cGVjdCAmJgorCXRlc3RfaTE4bmNtcCAkZXhwZWN0ICRhY3R1YWwKK30KKworIyBBcmd1bWVudHM6IFs8cHJlZml4XSBbPGNvbW1pdCBtZXNzYWdlPl0gWzxjb21taXQgb3B0aW9ucz5dCitjaGVja19zdW1tYXJ5X29uZWxpbmUoKSB7CisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAkezMrIiQzIn0gLW0gIiQyIiB8IGhlYWQgLTEgPiBhY3QgJiYKKworCSMgYnJhbmNoIG5hbWUKKwlTVU1NQVJZX1BSRUZJWD0iJChnaXQgbmFtZS1yZXYgLS1uYW1lLW9ubHkgSEVBRCkiICYmCisKKwkjIGFwcGVuZCB0aGUgInNwZWNpYWwiIHByZWZpeCwgbGlrZSAicm9vdC1jb21taXQiLCAiZGV0YWNoZWQgSEVBRCIKKwlpZiB0ZXN0IC1uICIkMSIKKwl0aGVuCisJCVNVTU1BUllfUFJFRklYPSIkU1VNTUFSWV9QUkVGSVggKCQxKSIKKwlmaQorCisJIyBhYmJyZXYgU0hBLTEKKwlTVU1NQVJZX1BPU1RGSVg9IiQoZ2l0IGxvZyAtMSAtLXByZXR0eT0nZm9ybWF0OiVoJykiCisJZWNobyAiWyRTVU1NQVJZX1BSRUZJWCAkU1VNTUFSWV9QT1NURklYXSAkMiIgPmV4cCAmJgorCisJdGVzdF9pMThuY21wIGV4cCBhY3QKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IHN1bW1hcnkgZm9ybWF0JyAnCisKKwllY2hvIG5ldyA+ZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJY2hlY2tfc3VtbWFyeV9vbmVsaW5lICJyb290LWNvbW1pdCIgImluaXRpYWwiICYmCisKKwllY2hvIGNoYW5nZSA+PmZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdXRwdXQgc3VtbWFyeSBmb3JtYXQ6IHJvb3QtY29tbWl0JyAnCisJY2hlY2tfc3VtbWFyeV9vbmVsaW5lICIiICJhIGNoYW5nZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IHN1bW1hcnkgZm9ybWF0IGZvciBjb21taXQgd2l0aCBhbiBlbXB0eSBkaWZmJyAnCisKKwljaGVja19zdW1tYXJ5X29uZWxpbmUgIiIgImVtcHR5IiAiLS1hbGxvdy1lbXB0eSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0cHV0IHN1bW1hcnkgZm9ybWF0IGZvciBtZXJnZXMnICcKKworCWdpdCBjaGVja291dCAtYiByZWN1cnNpdmUtYmFzZSAmJgorCXRlc3RfY29tbWl0IGJhc2UgZmlsZTEgJiYKKworCWdpdCBjaGVja291dCAtYiByZWN1cnNpdmUtYSByZWN1cnNpdmUtYmFzZSAmJgorCXRlc3RfY29tbWl0IGNvbW1pdC1hIGZpbGUxICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgcmVjdXJzaXZlLWIgcmVjdXJzaXZlLWJhc2UgJiYKKwl0ZXN0X2NvbW1pdCBjb21taXQtYiBmaWxlMSAmJgorCisJIyBjb25mbGljdAorCWdpdCBjaGVja291dCByZWN1cnNpdmUtYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSByZWN1cnNpdmUtYiAmJgorCSMgcmVzb2x2ZSB0aGUgY29uZmxpY3QKKwllY2hvIGNvbW1pdC1hID4gZmlsZTEgJiYKKwlnaXQgYWRkIGZpbGUxICYmCisJY2hlY2tfc3VtbWFyeV9vbmVsaW5lICIiICJNZXJnZSIKKycKKworb3V0cHV0X3Rlc3RzX2NsZWFudXAoKSB7CisJIyB0aGlzIGlzIG5lZWRlZCBmb3IgImRvIG5vdCBmaXJlIGVkaXRvciBpbiB0aGUgcHJlc2VuY2Ugb2YgY29uZmxpY3RzIgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKworCSMgdGhpcyBpcyBuZWVkZWQgZm9yIHRoZSAicGFydGlhbCByZW1vdmFsIiB0ZXN0IHRvIHBhc3MKKwlnaXQgcm0gZmlsZTEgJiYKKwlnaXQgY29tbWl0IC1tICJjbGVhbnVwIgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgYmFzaWNzJyAnCisKKwlvdXRwdXRfdGVzdHNfY2xlYW51cCAmJgorCisJZWNobyBkb2luZyBwYXJ0aWFsID4iY29tbWl0IGlzIiAmJgorCW1rZGlyIG5vdCAmJgorCWVjaG8gdmVyeSBtdWNoIGVuY291cmFnZWQgYnV0IHdlIHNob3VsZCA+bm90L2ZvcmJpZCAmJgorCWdpdCBhZGQgImNvbW1pdCBpcyIgbm90ICYmCisJZWNobyB1cGRhdGUgYWRkZWQgImNvbW1pdCBpcyIgZmlsZSA+ImNvbW1pdCBpcyIgJiYKKwllY2hvIGFsc28gdXBkYXRlIGFub3RoZXIgPm5vdC9mb3JiaWQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJpbml0aWFsIHdpdGggLWEiICYmCisKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOiJjb21taXQgaXMiID5jdXJyZW50LjEgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOm5vdC9mb3JiaWQgPmN1cnJlbnQuMiAmJgorCisJY21wIGN1cnJlbnQuMSAiY29tbWl0IGlzIiAmJgorCWNtcCBjdXJyZW50LjIgbm90L2ZvcmJpZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwnICcKKworCWVjaG8gYW5vdGhlciA+ImNvbW1pdCBpcyIgJiYKKwllY2hvIGFub3RoZXIgPm5vdC9mb3JiaWQgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJwYXJ0aWFsIGNvbW1pdCB0byBoYW5kbGUgYSBmaWxlIiAiY29tbWl0IGlzIiAmJgorCisJY2hhbmdlZD0kKGdpdCBkaWZmLXRyZWUgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCkgJiYKKwl0ZXN0ICIkY2hhbmdlZCIgPSAiY29tbWl0IGlzIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhcnRpYWwgbW9kaWZpY2F0aW9uIGluIGEgc3ViZGlyZWN0b3J5JyAnCisKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJwYXJ0aWFsIGNvbW1pdCB0byBzdWJkaXJlY3RvcnkiIG5vdCAmJgorCisJY2hhbmdlZD0kKGdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCkgJiYKKwl0ZXN0ICIkY2hhbmdlZCIgPSAibm90L2ZvcmJpZCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYXJ0aWFsIHJlbW92YWwnICcKKworCWdpdCBybSBub3QvZm9yYmlkICYmCisJZ2l0IGNvbW1pdCAtbSAicGFydGlhbCBjb21taXQgdG8gcmVtb3ZlIG5vdC9mb3JiaWQiIG5vdCAmJgorCisJY2hhbmdlZD0kKGdpdCBkaWZmLXRyZWUgLXIgLS1uYW1lLW9ubHkgSEVBRF4gSEVBRCkgJiYKKwl0ZXN0ICIkY2hhbmdlZCIgPSAibm90L2ZvcmJpZCIgJiYKKwlyZW1haW49JChnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEKSAmJgorCXRlc3QgIiRyZW1haW4iID0gImNvbW1pdCBpcyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWduIG9mZicgJworCisJPnBvc2l0aXZlICYmCisJZ2l0IGFkZCBwb3NpdGl2ZSAmJgorCWdpdCBjb21taXQgLXMgLW0gInRoYW5rIHlvdSIgJiYKKwlhY3R1YWw9JChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lICJzL1NpZ25lZC1vZmYtYnk6IC8vcCIpICYmCisJZXhwZWN0ZWQ9JChnaXQgdmFyIEdJVF9DT01NSVRURVJfSURFTlQgfCBzZWQgLWUgInMvPi4qLz4vIikgJiYKKwl0ZXN0ICJ6JGFjdHVhbCIgPSAieiRleHBlY3RlZCIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSAtbScgJworCisJPm5lZ2F0aXZlICYmCisJZ2l0IGFkZCBuZWdhdGl2ZSAmJgorCWdpdCBjb21taXQgLW0gIm9uZSIgLW0gInR3byIgLW0gInRocmVlIiAmJgorCWFjdHVhbD0kKGdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXlwkL2QiKSAmJgorCWV4cGVjdGVkPSQoZWNobyBvbmU7IGVjaG87IGVjaG8gdHdvOyBlY2hvOyBlY2hvIHRocmVlKSAmJgorCXRlc3QgInokYWN0dWFsIiA9ICJ6JGV4cGVjdGVkIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmJvc2UnICcKKworCWVjaG8gbWludXMgPm5lZ2F0aXZlICYmCisJZ2l0IGFkZCBuZWdhdGl2ZSAmJgorCWdpdCBzdGF0dXMgLXYgfCBzZWQgLW5lICIvXmRpZmYgLS1naXQgL3AiID5hY3R1YWwgJiYKKwllY2hvICJkaWZmIC0tZ2l0IGEvbmVnYXRpdmUgYi9uZWdhdGl2ZSIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIHJlc3BlY3RzIGRpZmYgY29uZmlnJyAnCisKKwl0ZXN0X2NvbmZpZyBjb2xvci5kaWZmIGFsd2F5cyAmJgorCWdpdCBzdGF0dXMgLXYgPmFjdHVhbCAmJgorCWdyZXAgIlxbMW1kaWZmIC0tZ2l0IiBhY3R1YWwKKycKKworbWVzZ193aXRoX2NvbW1lbnRfYW5kX25ld2xpbmVzPScKKyMgdGV4dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZmlsZSB3aXRoIGNvbW1lbnQgbGluZSBhbmQgdHJhaWxpbmcgbmV3bGluZXMnICAnCisJcHJpbnRmICIlcyIgIiRtZXNnX3dpdGhfY29tbWVudF9hbmRfbmV3bGluZXMiID5leHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHZlcmJhdGltIG9wdGlvbiwtdCknICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCWdpdCBjb21taXQgLS1jbGVhbnVwPXZlcmJhdGltIC0tbm8tc3RhdHVzIC10IGV4cGVjdCAtYSAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEIHxzZWQgLWUgIjEsL15cJC9kIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzICh2ZXJiYXRpbSBvcHRpb24sLUYpJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwlnaXQgY29tbWl0IC0tY2xlYW51cD12ZXJiYXRpbSAtRiBleHBlY3QgLWEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCB8c2VkIC1lICIxLC9eXCQvZCI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzICh2ZXJiYXRpbSBvcHRpb24sLW0pJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwlnaXQgY29tbWl0IC0tY2xlYW51cD12ZXJiYXRpbSAtbSAiJG1lc2dfd2l0aF9jb21tZW50X2FuZF9uZXdsaW5lcyIgLWEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCB8c2VkIC1lICIxLC9eXCQvZCI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzICh3aGl0ZXNwYWNlIG9wdGlvbiwtRiknICcKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCXsgZWNobztlY2hvICIjIHRleHQiO2VjaG87IH0gPnRleHQgJiYKKwllY2hvICIjIHRleHQiID5leHBlY3QgJiYKKwlnaXQgY29tbWl0IC0tY2xlYW51cD13aGl0ZXNwYWNlIC1GIHRleHQgLWEgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCB8c2VkIC1lICIxLC9eXCQvZCI+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzIChzY2lzc29ycyBvcHRpb24sLUYsLWUpJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwljYXQgPnRleHQgPDxFT0YgJiYKKworIyB0byBiZSBrZXB0CisKKyAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRvIGJlIGtlcHQsIHRvbworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0byBiZSByZW1vdmVkCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RvIGJlIHJlbW92ZWQsIHRvbworRU9GCisKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorIyB0byBiZSBrZXB0CisKKyAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRvIGJlIGtlcHQsIHRvbworRU9GCisJZ2l0IGNvbW1pdCAtLWNsZWFudXA9c2Npc3NvcnMgLWUgLUYgdGV4dCAtYSAmJgorCWdpdCBjYXQtZmlsZSAtcCBIRUFEIHxzZWQgLWUgIjEsL15cJC9kIj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2VzIChzY2lzc29ycyBvcHRpb24sLUYsLWUsIHNjaXNzb3JzIG9uIGZpcnN0IGxpbmUpJyAnCisKKwllY2hvID4+bmVnYXRpdmUgJiYKKwljYXQgPnRleHQgPDxFT0YgJiYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordG8gYmUgcmVtb3ZlZAorRU9GCisJZ2l0IGNvbW1pdCAtLWNsZWFudXA9c2Npc3NvcnMgLWUgLUYgdGV4dCAtYSAtLWFsbG93LWVtcHR5LW1lc3NhZ2UgJiYKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRCB8c2VkIC1lICIxLC9eXCQvZCI+YWN0dWFsICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlcyAoc3RyaXAgb3B0aW9uLC1GKScgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJeyBlY2hvO2VjaG8gIiMgdGV4dCI7ZWNobyBzYW1wbGU7ZWNobzsgfSA+dGV4dCAmJgorCWVjaG8gc2FtcGxlID5leHBlY3QgJiYKKwlnaXQgY29tbWl0IC0tY2xlYW51cD1zdHJpcCAtRiB0ZXh0IC1hICYmCisJZ2l0IGNhdC1maWxlIC1wIEhFQUQgfHNlZCAtZSAiMSwvXlwkL2QiPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlcyAoc3RyaXAgb3B0aW9uLC1GLC1lKScgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJeyBlY2hvO2VjaG8gc2FtcGxlO2VjaG87IH0gPnRleHQgJiYKKwlnaXQgY29tbWl0IC1lIC1GIHRleHQgLWEgJiYKKwloZWFkIC1uIDQgLmdpdC9DT01NSVRfRURJVE1TRyA+YWN0dWFsCisnCisKK2VjaG8gInNhbXBsZQorCisjIFBsZWFzZSBlbnRlciB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIHlvdXIgY2hhbmdlcy4gTGluZXMgc3RhcnRpbmcKKyMgd2l0aCAnIycgd2lsbCBiZSBpZ25vcmVkLCBhbmQgYW4gZW1wdHkgbWVzc2FnZSBhYm9ydHMgdGhlIGNvbW1pdC4iID5leHBlY3QKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZXMgKHN0cmlwIG9wdGlvbiwtRiwtZSk6IG91dHB1dCcgJworCXRlc3RfaTE4bmNtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKGZhaWwgb24gaW52YWxpZCBjbGVhbnVwIG1vZGUgb3B0aW9uKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1jbGVhbnVwPW5vbi1leGlzdGVudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvbW1pdCBtZXNzYWdlIChmYWlsIG9uIGludmFsaWQgY2xlYW51cCBtb2RlIGNvbmZpZ3VyYXRpb24pJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGNvbW1pdC5jbGVhbnVwPW5vbi1leGlzdGVudCBjb21taXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZSAobm8gY29uZmlnIGFuZCBubyBvcHRpb24gdXNlcyBkZWZhdWx0KScgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwkoCisJICB0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQtYW5kLWNvbW1lbnQgJiYKKwkgIGdpdCBjb21taXQgLS1uby1zdGF0dXMKKwkpICYmCisJY29tbWl0X21zZ19pcyAiY29tbWl0IG1lc3NhZ2UiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKG9wdGlvbiBvdmVycmlkZXMgZGVmYXVsdCknICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJKAorCSAgdGVzdF9zZXRfZWRpdG9yICIkVEVTVF9ESVJFQ1RPUlkiL3Q3NTAwL2FkZC1jb250ZW50LWFuZC1jb21tZW50ICYmCisJICBnaXQgY29tbWl0IC0tY2xlYW51cD13aGl0ZXNwYWNlIC0tbm8tc3RhdHVzCisJKSAmJgorCWNvbW1pdF9tc2dfaXMgImNvbW1pdCBtZXNzYWdlICMgY29tbWVudCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZSAoY29uZmlnIG92ZXJyaWRlcyBkZWZhdWx0KScgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwkoCisJICB0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQtYW5kLWNvbW1lbnQgJiYKKwkgIGdpdCAtYyBjb21taXQuY2xlYW51cD13aGl0ZXNwYWNlIGNvbW1pdCAtLW5vLXN0YXR1cworCSkgJiYKKwljb21taXRfbXNnX2lzICJjb21taXQgbWVzc2FnZSAjIGNvbW1lbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKG9wdGlvbiBvdmVycmlkZXMgY29uZmlnKScgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwkoCisJICB0ZXN0X3NldF9lZGl0b3IgIiRURVNUX0RJUkVDVE9SWSIvdDc1MDAvYWRkLWNvbnRlbnQtYW5kLWNvbW1lbnQgJiYKKwkgIGdpdCAtYyBjb21taXQuY2xlYW51cD13aGl0ZXNwYWNlIGNvbW1pdCAtLWNsZWFudXA9ZGVmYXVsdAorCSkgJiYKKwljb21taXRfbXNnX2lzICJjb21taXQgbWVzc2FnZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZSAoZGVmYXVsdCwgLW0pJyAnCisJZWNobyBjb250ZW50ID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIm1lc3NhZ2UgI2NvbW1lbnQgIiAmJgorCWNvbW1pdF9tc2dfaXMgIm1lc3NhZ2UgI2NvbW1lbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgY29tbWl0IG1lc3NhZ2UgKHdoaXRlc3BhY2Ugb3B0aW9uLCAtbSknICcKKwllY2hvIGNvbnRlbnQgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLWNsZWFudXA9d2hpdGVzcGFjZSAtLW5vLXN0YXR1cyAtbSAibWVzc2FnZSAjY29tbWVudCAiICYmCisJY29tbWl0X21zZ19pcyAibWVzc2FnZSAjY29tbWVudCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb21taXQgbWVzc2FnZSAod2hpdGVzcGFjZSBjb25maWcsIC1tKScgJworCWVjaG8gY29udGVudCA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgLWMgY29tbWl0LmNsZWFudXA9d2hpdGVzcGFjZSBjb21taXQgLS1uby1zdGF0dXMgLW0gIm1lc3NhZ2UgI2NvbW1lbnQgIiAmJgorCWNvbW1pdF9tc2dfaXMgIm1lc3NhZ2UgI2NvbW1lbnQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2Ugc2hvd3MgYXV0aG9yIHdoZW4gaXQgaXMgbm90IGVxdWFsIHRvIGNvbW1pdHRlcicgJworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCWdpdCBjb21taXQgLWUgLW0gInNhbXBsZSIgLWEgJiYKKwl0ZXN0X2kxOG5ncmVwIFwKKwkgICJeIyBBdXRob3I6ICpBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPlwkIiBcCisJICAuZ2l0L0NPTU1JVF9FRElUTVNHCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lc3NhZ2Ugc2hvd3MgZGF0ZSB3aGVuIGl0IGlzIGV4cGxpY2l0bHkgc2V0JyAnCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1lIC1tIGZvbyAtLWRhdGU9IjIwMTAtMDEtMDJUMDM6MDQ6MDUiICYmCisJdGVzdF9pMThuZ3JlcCBcCisJICAiXiMgRGF0ZTogKlNhdCBKYW4gMiAwMzowNDowNSAyMDEwICswMDAwIiBcCisJICAuZ2l0L0NPTU1JVF9FRElUTVNHCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgQVVUT0lERU5UICdtZXNzYWdlIHNob3dzIGNvbW1pdHRlciB3aGVuIGl0IGlzIGF1dG9tYXRpYycgJworCisJZWNobyA+Pm5lZ2F0aXZlICYmCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9DT01NSVRURVJfRU1BSUwgJiYKKwkJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX05BTUUgJiYKKwkJZ2l0IGNvbW1pdCAtZSAtbSAic2FtcGxlIiAtYQorCSkgJiYKKwkjIHRoZSBpZGVudCBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHN5c3RlbSwgc28gd2UgY2Fubm90CisJIyBjaGVjayB0aGUgYWN0dWFsIHZhbHVlLCBvbmx5IHRoYXQgaXQgaXMgdGhlcmUKKwl0ZXN0X2kxOG5ncmVwICJeIyBDb21taXR0ZXI6ICIgLmdpdC9DT01NSVRfRURJVE1TRworJworCit3cml0ZV9zY3JpcHQgLmdpdC9GQUtFX0VESVRPUiA8PEVPRgorZWNobyBlZGl0b3Igc3RhcnRlZCA+ICIkKHB3ZCkvLmdpdC9yZXN1bHQiCitleGl0IDAKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFBVVRPSURFTlQgJ2RvIG5vdCBmaXJlIGVkaXRvciB3aGVuIGNvbW1pdHRlciBpcyBib2d1cycgJworCT4uZ2l0L3Jlc3VsdCAmJgorCT5leHBlY3QgJiYKKworCWVjaG8gPj5uZWdhdGl2ZSAmJgorCSgKKwkJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9OQU1FICYmCisJCUdJVF9FRElUT1I9IlwiJChwd2QpLy5naXQvRkFLRV9FRElUT1JcIiIgJiYKKwkJZXhwb3J0IEdJVF9FRElUT1IgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtZSAtbSBzYW1wbGUgLWEKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IC5naXQvcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBmaXJlIGVkaXRvciBpZiAtbSA8bXNnPiB3YXMgZ2l2ZW4nICcKKwllY2hvIHRpY2sgPmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJlZGl0b3Igbm90IHN0YXJ0ZWQiID4uZ2l0L3Jlc3VsdCAmJgorCShHSVRfRURJVE9SPSJcIiQocHdkKS8uZ2l0L0ZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLW0gdGljaykgJiYKKwl0ZXN0ICIkKGNhdCAuZ2l0L3Jlc3VsdCkiID0gImVkaXRvciBub3Qgc3RhcnRlZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGZpcmUgZWRpdG9yIGlmIC1tICIiIHdhcyBnaXZlbicgJworCWVjaG8gdG9jayA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gImVkaXRvciBub3Qgc3RhcnRlZCIgPi5naXQvcmVzdWx0ICYmCisJKEdJVF9FRElUT1I9IlwiJChwd2QpLy5naXQvRkFLRV9FRElUT1JcIiIgXAorCSBnaXQgY29tbWl0IC1tICIiIC0tYWxsb3ctZW1wdHktbWVzc2FnZSkgJiYKKwl0ZXN0ICIkKGNhdCAuZ2l0L3Jlc3VsdCkiID0gImVkaXRvciBub3Qgc3RhcnRlZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZG8gbm90IGZpcmUgZWRpdG9yIGluIHRoZSBwcmVzZW5jZSBvZiBjb25mbGljdHMnICcKKworCWdpdCBjbGVhbiAtZiAmJgorCWVjaG8gZiA+ZyAmJgorCWdpdCBhZGQgZyAmJgorCWdpdCBjb21taXQgLW0gImFkZCBnIiAmJgorCWdpdCBicmFuY2ggc2Vjb25kICYmCisJZWNobyBtYXN0ZXIgPmcgJiYKKwllY2hvIGcgPmggJiYKKwlnaXQgYWRkIGcgaCAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmeSBnIGFuZCBhZGQgaCIgJiYKKwlnaXQgY2hlY2tvdXQgc2Vjb25kICYmCisJZWNobyBzZWNvbmQgPmcgJiYKKwlnaXQgYWRkIGcgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZCAmJgorCSMgTXVzdCBmYWlsIGR1ZSB0byBjb25mbGljdAorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayAtbiBtYXN0ZXIgJiYKKwllY2hvICJlZGl0b3Igbm90IHN0YXJ0ZWQiID4uZ2l0L3Jlc3VsdCAmJgorCSgKKwkJR0lUX0VESVRPUj0iXCIkKHB3ZCkvLmdpdC9GQUtFX0VESVRPUlwiIiAmJgorCQlleHBvcnQgR0lUX0VESVRPUiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0CisJKSAmJgorCXRlc3QgIiQoY2F0IC5naXQvcmVzdWx0KSIgPSAiZWRpdG9yIG5vdCBzdGFydGVkIgorJworCit3cml0ZV9zY3JpcHQgLmdpdC9GQUtFX0VESVRPUiA8PEVPRgorIyBraWxsIC1URVJNIGNvbW1hbmQgYWRkZWQgYmVsb3cuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBFWEVDS0VFUFNQSUQgJ2EgU0lHVEVSTSBzaG91bGQgYnJlYWsgbG9ja3MnICcKKwllY2hvID4+bmVnYXRpdmUgJiYKKwkhICIkU0hFTExfUEFUSCIgLWMgJ1wnJworCSAgZWNobyBraWxsIC1URVJNICQkID4+IC5naXQvRkFLRV9FRElUT1IKKwkgIEdJVF9FRElUT1I9LmdpdC9GQUtFX0VESVRPUgorCSAgZXhwb3J0IEdJVF9FRElUT1IKKwkgIGV4ZWMgZ2l0IGNvbW1pdCAtYSdcJycgJiYKKwl0ZXN0ICEgLWYgLmdpdC9pbmRleC5sb2NrCisnCisKK3JtIC1mIC5naXQvTUVSR0VfTVNHIC5naXQvQ09NTUlUX0VESVRNU0cKK2dpdCByZXNldCAtcSAtLWhhcmQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnSGFuZCBjb21taXR0aW5nIG9mIGEgcmVkdW5kYW50IG1lcmdlIHJlbW92ZXMgZHVwcycgJworCisJZ2l0IHJldi1wYXJzZSBzZWNvbmQgbWFzdGVyID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc2Vjb25kIG1hc3RlciAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgZyAmJgorCUVESVRPUj06IGdpdCBjb21taXQgLWEgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW4gLWUgInMvXnBhcmVudCAvL3AiIC1lICIvXiQvcSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBIHNpbmdsZS1saW5lciBzdWJqZWN0IHdpdGggYSB0b2tlbiBwbHVzIGNvbG9uIGlzIG5vdCBhIGZvb3RlcicgJworCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWdpdCBjb21taXQgLXMgLW0gImhlbGxvOiBraXR0eSIgLS1hbGxvdy1lbXB0eSAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXiQvZCIgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9IDMgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC1zIHBsYWNlcyBzb2Igb24gdGhpcmQgbGluZSBhZnRlciB0d28gZW1wdHkgbGluZXMnICcKKwlnaXQgY29tbWl0IC1zIC0tYWxsb3ctZW1wdHkgLS1hbGxvdy1lbXB0eS1tZXNzYWdlICYmCisJY2F0IDw8LUVPRiA+ZXhwZWN0ICYmCisKKworCVNpZ25lZC1vZmYtYnk6ICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPgorCisJRU9GCisJc2VkIC1lICIvXiMvZCIgLWUgInMvXjouKi8vIiAuZ2l0L0NPTU1JVF9FRElUTVNHID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3dyaXRlX3NjcmlwdCAuZ2l0L0ZBS0VfRURJVE9SIDw8XEVPRgorbXYgIiQxIiAiJDEub3JpZyIKKygKKwllY2hvIG1lc3NhZ2UKKwljYXQgIiQxLm9yaWciCispID4iJDEiCitFT0YKKworZWNobyAnIyMgQ3VzdG9tIHRlbXBsYXRlJyA+dGVtcGxhdGUKKwordHJ5X2NvbW1pdCAoKSB7CisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCWVjaG8gPj5uZWdhdGl2ZSAmJgorCUdJVF9FRElUT1I9LmdpdC9GQUtFX0VESVRPUiBnaXQgY29tbWl0IC1hICQqICR1c2VfdGVtcGxhdGUgJiYKKwljYXNlICIkdXNlX3RlbXBsYXRlIiBpbgorCScnKQorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIyBDdXN0b20gdGVtcGxhdGUiIC5naXQvQ09NTUlUX0VESVRNU0cgOzsKKwkqKQorCQl0ZXN0X2kxOG5ncmVwICJeIyMgQ3VzdG9tIHRlbXBsYXRlIiAuZ2l0L0NPTU1JVF9FRElUTVNHIDs7CisJZXNhYworfQorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibyAoKSB7CisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQnICcKKwkJdHJ5X2NvbW1pdCAiIiAmJgorCQl0ZXN0X2kxOG5ncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQnICcKKwkJdHJ5X2NvbW1pdCAiIiAmJgorCQl0ZXN0X2kxOG5ncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zdGF0dXMnICcKKwkJdHJ5X2NvbW1pdCAtLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1uby1zdGF0dXMnICcKKwkJdHJ5X2NvbW1pdCAtLW5vLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRoIGNvbW1pdC5zdGF0dXMgPSB5ZXMnICcKKwkJdGVzdF9jb25maWcgY29tbWl0LnN0YXR1cyB5ZXMgJiYKKwkJdHJ5X2NvbW1pdCAiIiAmJgorCQl0ZXN0X2kxOG5ncmVwICJeIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgd2l0aCBjb21taXQuc3RhdHVzID0gbm8nICcKKwkJdGVzdF9jb25maWcgY29tbWl0LnN0YXR1cyBubyAmJgorCQl0cnlfY29tbWl0ICIiICYmCisJCXRlc3RfaTE4bmdyZXAgISAiXiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAuZ2l0L0NPTU1JVF9FRElUTVNHCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tc3RhdHVzIHdpdGggY29tbWl0LnN0YXR1cyA9IHllcycgJworCQl0ZXN0X2NvbmZpZyBjb21taXQuc3RhdHVzIHllcyAmJgorCQl0cnlfY29tbWl0IC0tc3RhdHVzICYmCisJCXRlc3RfaTE4bmdyZXAgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLW5vLXN0YXR1cyB3aXRoIGNvbW1pdC5zdGF0dXMgPSB5ZXMnICcKKwkJdGVzdF9jb25maWcgY29tbWl0LnN0YXR1cyB5ZXMgJiYKKwkJdHJ5X2NvbW1pdCAtLW5vLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLXN0YXR1cyB3aXRoIGNvbW1pdC5zdGF0dXMgPSBubycgJworCQl0ZXN0X2NvbmZpZyBjb21taXQuc3RhdHVzIG5vICYmCisJCXRyeV9jb21taXQgLS1zdGF0dXMgJiYKKwkJdGVzdF9pMThuZ3JlcCAiXiMgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAuZ2l0L0NPTU1JVF9FRElUTVNHCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tbm8tc3RhdHVzIHdpdGggY29tbWl0LnN0YXR1cyA9IG5vJyAnCisJCXRlc3RfY29uZmlnIGNvbW1pdC5zdGF0dXMgbm8gJiYKKwkJdHJ5X2NvbW1pdCAtLW5vLXN0YXR1cyAmJgorCQl0ZXN0X2kxOG5ncmVwICEgIl4jIENoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIgLmdpdC9DT01NSVRfRURJVE1TRworCScKKworfQorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibworCit1c2VfdGVtcGxhdGU9Ii10IHRlbXBsYXRlIgorCit0cnlfY29tbWl0X3N0YXR1c19jb21ibworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgLS1zdGF0dXMgd2l0aCBjdXN0b20gY29tbWVudCBjaGFyYWN0ZXInICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmNvbW1lbnRjaGFyICI7IiAmJgorCXRyeV9jb21taXQgLS1zdGF0dXMgJiYKKwl0ZXN0X2kxOG5ncmVwICJeOyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGNvcmUuY29tbWVudGNoYXInICcKKwl0ZXN0X2NvbW1pdCAiI2ZvbyIgZm9vICYmCisJR0lUX0VESVRPUj0uZ2l0L0ZBS0VfRURJVE9SIGdpdCAtYyBjb3JlLmNvbW1lbnRDaGFyPWF1dG8gY29tbWl0IC0tYW1lbmQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeOyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiIC5naXQvQ09NTUlUX0VESVRNU0cKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3dpdGNoIGNvcmUuY29tbWVudGNoYXIgYnV0IG91dCBvZiBvcHRpb25zJyAnCisJY2F0ID50ZXh0IDw8XEVPRiAmJgorIyAxCis7IDIKK0AgMworISA0CiskIDUKKyUgNgorXiA3CismIDgKK3wgOQorOiAxMAorRU9GCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1GIHRleHQgJiYKKwkoCisJCXRlc3Rfc2V0X2VkaXRvciAuZ2l0L0ZBS0VfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb3JlLmNvbW1lbnRDaGFyPWF1dG8gY29tbWl0IC0tYW1lbmQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUwMy1wcmUtY29tbWl0LWhvb2suc2ggYi90L3Q3NTAzLXByZS1jb21taXQtaG9vay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ODQ4ODliCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwMy1wcmUtY29tbWl0LWhvb2suc2gKQEAgLTAsMCArMSwxMzkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdwcmUtY29tbWl0IGhvb2snCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG5vIGhvb2snICcKKworCWVjaG8gImZvbyIgPiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlyc3QiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBubyBob29rJyAnCisKKwllY2hvICJiYXIiID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gImJhciIKKworJworCisjIG5vdyBpbnN0YWxsIGhvb2sgdGhhdCBhbHdheXMgc3VjY2VlZHMKK0hPT0tESVI9IiQoZ2l0IHJldi1wYXJzZSAtLWdpdC1kaXIpL2hvb2tzIgorSE9PSz0iJEhPT0tESVIvcHJlLWNvbW1pdCIKK21rZGlyIC1wICIkSE9PS0RJUiIKK2NhdCA+ICIkSE9PSyIgPDxFT0YKKyMhL2Jpbi9zaAorZXhpdCAwCitFT0YKK2NobW9kICt4ICIkSE9PSyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBzdWNjZWVkaW5nIGhvb2snICcKKworCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJtb3JlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggc3VjY2VlZGluZyBob29rJyAnCisKKwllY2hvICJldmVuIG1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJldmVuIG1vcmUiCisKKycKKworIyBub3cgYSBob29rIHRoYXQgZmFpbHMKK2NhdCA+ICIkSE9PSyIgPDxFT0YKKyMhL2Jpbi9zaAorZXhpdCAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBmYWlsaW5nIGhvb2snICcKKworCWVjaG8gImFub3RoZXIiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1tICJhbm90aGVyIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggZmFpbGluZyBob29rJyAnCisKKwllY2hvICJzdHVmZiIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gInN0dWZmIgorCisnCisKK2NobW9kIC14ICIkSE9PSyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICd3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2snICcKKworCWVjaG8gImNvbnRlbnQiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJjb250ZW50IgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNICctLW5vLXZlcmlmeSB3aXRoIG5vbi1leGVjdXRhYmxlIGhvb2snICcKKworCWVjaG8gIm1vcmUgY29udGVudCIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gIm1vcmUgY29udGVudCIKKworJworY2htb2QgK3ggIiRIT09LIgorCisjIGEgaG9vayB0aGF0IGNoZWNrcyAkR0lUX1BSRUZJWCBhbmQgc3VjY2VlZHMgaW5zaWRlIHRoZQorIyBzdWNjZXNzLyBzdWJkaXJlY3Rvcnkgb25seQorY2F0ID4gIiRIT09LIiA8PEVPRgorIyEvYmluL3NoCit0ZXN0IFwkR0lUX1BSRUZJWCA9IHN1Y2Nlc3MvCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rIHJlcXVpcmluZyBHSVRfUFJFRklYJyAnCisKKwllY2hvICJtb3JlIGNvbnRlbnQiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlta2RpciBzdWNjZXNzICYmCisJKAorCQljZCBzdWNjZXNzICYmCisJCWdpdCBjb21taXQgLW0gImhvb2sgcmVxdWlyZXMgR0lUX1BSRUZJWCA9IHN1Y2Nlc3MvIgorCSkgJiYKKwlybWRpciBzdWNjZXNzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBob29rIHJlcXVpcmluZyBHSVRfUFJFRklYJyAnCisKKwllY2hvICJtb3JlIGNvbnRlbnQiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlta2RpciBmYWlsICYmCisJKAorCQljZCBmYWlsICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gImhvb2sgbXVzdCBmYWlsIgorCSkgJiYKKwlybWRpciBmYWlsICYmCisJZ2l0IGNoZWNrb3V0IC0tIGZpbGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGhlIGF1dGhvciBpbiBob29rJyAnCisJd3JpdGVfc2NyaXB0ICIkSE9PSyIgPDwtXEVPRiAmJgorCXRlc3QgIiRHSVRfQVVUSE9SX05BTUUiID0gIk5ldyBBdXRob3IiICYmCisJdGVzdCAiJEdJVF9BVVRIT1JfRU1BSUwiID0gIm5ld2F1dGhvckBleGFtcGxlLmNvbSIKKwlFT0YKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImJ5IGEudS50aG9yIiAmJgorCSgKKwkJR0lUX0FVVEhPUl9OQU1FPSJOZXcgQXV0aG9yIiAmJgorCQlHSVRfQVVUSE9SX0VNQUlMPSJuZXdhdXRob3JAZXhhbXBsZS5jb20iICYmCisJCWV4cG9ydCBHSVRfQVVUSE9SX05BTUUgR0lUX0FVVEhPUl9FTUFJTCAmJgorCQlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gImJ5IG5ldy5hdXRob3IgdmlhIGVudiIgJiYKKwkJZ2l0IHNob3cgLXMKKwkpICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvcj0iTmV3IEF1dGhvciA8bmV3YXV0aG9yQGV4YW1wbGUuY29tPiIgXAorCQktLWFsbG93LWVtcHR5IC1tICJieSBuZXcuYXV0aG9yIHZpYSBjb21tYW5kIGxpbmUiICYmCisJZ2l0IHNob3cgLXMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTA0LWNvbW1pdC1tc2ctaG9vay5zaCBiL3QvdDc1MDQtY29tbWl0LW1zZy1ob29rLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFmNTNlYTgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTA0LWNvbW1pdC1tc2ctaG9vay5zaApAQCAtMCwwICsxLDIyMyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2NvbW1pdC1tc2cgaG9vaycKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbm8gaG9vaycgJworCisJZWNobyAiZm9vIiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJmaXJzdCIKKworJworCisjIHNldCB1cCBmYWtlIGVkaXRvciBmb3IgaW50ZXJhY3RpdmUgZWRpdGluZworY2F0ID4gZmFrZS1lZGl0b3IgPDwnRU9GJworIyEvYmluL3NoCitjcCBGQUtFX01TRyAiJDEiCitleGl0IDAKK0VPRgorY2htb2QgK3ggZmFrZS1lZGl0b3IKKworIyMgTm90IHVzaW5nIHRlc3Rfc2V0X2VkaXRvciBoZXJlIHNvIHdlIGNhbiBlYXNpbHkgZW5zdXJlIHRoZSBlZGl0b3IgdmFyaWFibGUKKyMjIGlzIG9ubHkgc2V0IGZvciB0aGUgZWRpdG9yIHRlc3RzCitGQUtFX0VESVRPUj0iJChwd2QpL2Zha2UtZWRpdG9yIgorZXhwb3J0IEZBS0VfRURJVE9SCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbm8gaG9vayAoZWRpdG9yKScgJworCisJZWNobyAibW9yZSBmb28iID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJtb3JlIGZvbyIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1uby12ZXJpZnkgd2l0aCBubyBob29rJyAnCisKKwllY2hvICJiYXIiID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gImJhciIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIG5vIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gIm1vcmUgYmFyIiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJtb3JlIGJhciIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5CisKKycKKworIyBub3cgaW5zdGFsbCBob29rIHRoYXQgYWx3YXlzIHN1Y2NlZWRzCitIT09LRElSPSIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS9ob29rcyIKK0hPT0s9IiRIT09LRElSL2NvbW1pdC1tc2ciCitta2RpciAtcCAiJEhPT0tESVIiCitjYXQgPiAiJEhPT0siIDw8RU9GCisjIS9iaW4vc2gKK2V4aXQgMAorRU9GCitjaG1vZCAreCAiJEhPT0siCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggc3VjY2VlZGluZyBob29rJyAnCisKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibW9yZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIHN1Y2NlZWRpbmcgaG9vayAoZWRpdG9yKScgJworCisJZWNobyAibW9yZSBtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAibW9yZSBtb3JlIiA+IEZBS0VfTVNHICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLW5vLXZlcmlmeSB3aXRoIHN1Y2NlZWRpbmcgaG9vaycgJworCisJZWNobyAiZXZlbiBtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtbSAiZXZlbiBtb3JlIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggc3VjY2VlZGluZyBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJldmVuIG1vcmUgbW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gImV2ZW4gbW9yZSBtb3JlIiA+IEZBS0VfTVNHICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLS1uby12ZXJpZnkKKworJworCisjIG5vdyBhIGhvb2sgdGhhdCBmYWlscworY2F0ID4gIiRIT09LIiA8PEVPRgorIyEvYmluL3NoCitleGl0IDEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGZhaWxpbmcgaG9vaycgJworCisJZWNobyAiYW5vdGhlciIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLW0gImFub3RoZXIiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBmYWlsaW5nIGhvb2sgKGVkaXRvciknICcKKworCWVjaG8gIm1vcmUgYW5vdGhlciIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gIm1vcmUgYW5vdGhlciIgPiBGQUtFX01TRyAmJgorCSEgKEdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0KQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggZmFpbGluZyBob29rJyAnCisKKwllY2hvICJzdHVmZiIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gInN0dWZmIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tbm8tdmVyaWZ5IHdpdGggZmFpbGluZyBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJtb3JlIHN0dWZmIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAibW9yZSBzdHVmZiIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5CisKKycKKworY2htb2QgLXggIiRIT09LIgordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3dpdGggbm9uLWV4ZWN1dGFibGUgaG9vaycgJworCisJZWNobyAiY29udGVudCIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImNvbnRlbnQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJ3dpdGggbm9uLWV4ZWN1dGFibGUgaG9vayAoZWRpdG9yKScgJworCisJZWNobyAiY29udGVudCBhZ2FpbiIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWVjaG8gImNvbnRlbnQgYWdhaW4iID4gRkFLRV9NU0cgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtbSAiY29udGVudCBhZ2FpbiIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBPU0lYUEVSTSAnLS1uby12ZXJpZnkgd2l0aCBub24tZXhlY3V0YWJsZSBob29rJyAnCisKKwllY2hvICJtb3JlIGNvbnRlbnQiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC0tbm8tdmVyaWZ5IC1tICJtb3JlIGNvbnRlbnQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQT1NJWFBFUk0gJy0tbm8tdmVyaWZ5IHdpdGggbm9uLWV4ZWN1dGFibGUgaG9vayAoZWRpdG9yKScgJworCisJZWNobyAiZXZlbiBtb3JlIGNvbnRlbnQiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwllY2hvICJldmVuIG1vcmUgY29udGVudCIgPiBGQUtFX01TRyAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC0tbm8tdmVyaWZ5CisKKycKKworIyBub3cgYSBob29rIHRoYXQgZWRpdHMgdGhlIGNvbW1pdCBtZXNzYWdlCitjYXQgPiAiJEhPT0siIDw8J0VPRicKKyMhL2Jpbi9zaAorZWNobyAibmV3IG1lc3NhZ2UiID4gIiQxIgorZXhpdCAwCitFT0YKK2NobW9kICt4ICIkSE9PSyIKKworY29tbWl0X21zZ19pcyAoKSB7CisJdGVzdCAiYGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVzJWIgLTFgIiA9ICIkMSIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9vayBlZGl0cyBjb21taXQgbWVzc2FnZScgJworCisJZWNobyAiYWRkaXRpb25hbCIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZGl0aW9uYWwiICYmCisJY29tbWl0X21zZ19pcyAibmV3IG1lc3NhZ2UiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaG9vayBlZGl0cyBjb21taXQgbWVzc2FnZSAoZWRpdG9yKScgJworCisJZWNobyAiYWRkaXRpb25hbCBjb250ZW50IiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAiYWRkaXRpb25hbCBjb250ZW50IiA+IEZBS0VfTVNHICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgJiYKKwljb21taXRfbXNnX2lzICJuZXcgbWVzc2FnZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJob29rIGRvZXNuJ3QgZWRpdCBjb21taXQgbWVzc2FnZSIgJworCisJZWNobyAicGx1cyIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1uby12ZXJpZnkgLW0gInBsdXMiICYmCisJY29tbWl0X21zZ19pcyAicGx1cyIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJob29rIGRvZXNuJ3QgZWRpdCBjb21taXQgbWVzc2FnZSAoZWRpdG9yKSIgJworCisJZWNobyAibW9yZSBwbHVzIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZWNobyAibW9yZSBwbHVzIiA+IEZBS0VfTVNHICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLS1uby12ZXJpZnkgJiYKKwljb21taXRfbXNnX2lzICJtb3JlIHBsdXMiCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTA1LXByZXBhcmUtY29tbWl0LW1zZy1ob29rLnNoIGIvdC90NzUwNS1wcmVwYXJlLWNvbW1pdC1tc2ctaG9vay5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wM2RjZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwNS1wcmVwYXJlLWNvbW1pdC1tc2ctaG9vay5zaApAQCAtMCwwICsxLDIwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3ByZXBhcmUtY29tbWl0LW1zZyBob29rJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBubyBob29rJyAnCisKKwllY2hvICJmb28iID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImZpcnN0IgorCisnCisKKyMgc2V0IHVwIGZha2UgZWRpdG9yIGZvciBpbnRlcmFjdGl2ZSBlZGl0aW5nCitjYXQgPiBmYWtlLWVkaXRvciA8PCdFT0YnCisjIS9iaW4vc2gKK2V4aXQgMAorRU9GCitjaG1vZCAreCBmYWtlLWVkaXRvcgorCisjIyBOb3QgdXNpbmcgdGVzdF9zZXRfZWRpdG9yIGhlcmUgc28gd2UgY2FuIGVhc2lseSBlbnN1cmUgdGhlIGVkaXRvciB2YXJpYWJsZQorIyMgaXMgb25seSBzZXQgZm9yIHRoZSBlZGl0b3IgdGVzdHMKK0ZBS0VfRURJVE9SPSIkKHB3ZCkvZmFrZS1lZGl0b3IiCitleHBvcnQgRkFLRV9FRElUT1IKKworIyBub3cgaW5zdGFsbCBob29rIHRoYXQgYWx3YXlzIHN1Y2NlZWRzIGFuZCBhZGRzIGEgbWVzc2FnZQorSE9PS0RJUj0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvaG9va3MiCitIT09LPSIkSE9PS0RJUi9wcmVwYXJlLWNvbW1pdC1tc2ciCitta2RpciAtcCAiJEhPT0tESVIiCitlY2hvICIjISRTSEVMTF9QQVRIIiA+ICIkSE9PSyIKK2NhdCA+PiAiJEhPT0siIDw8J0VPRicKKworaWYgdGVzdCAiJDIiID0gY29tbWl0OyB0aGVuCisgIHNvdXJjZT0kKGdpdCByZXYtcGFyc2UgIiQzIikKK2Vsc2UKKyAgc291cmNlPSR7Mi1kZWZhdWx0fQorZmkKK2lmIHRlc3QgIiRHSVRfRURJVE9SIiA9IDo7IHRoZW4KKyAgc2VkIC1lICIxcy8uKi8kc291cmNlIChubyBlZGl0b3IpLyIgIiQxIiA+IG1zZy50bXAKK2Vsc2UKKyAgc2VkIC1lICIxcy8uKi8kc291cmNlLyIgIiQxIiA+IG1zZy50bXAKK2ZpCittdiBtc2cudG1wICIkMSIKK2V4aXQgMAorRU9GCitjaG1vZCAreCAiJEhPT0siCisKK2VjaG8gZHVtbXkgdGVtcGxhdGUgPiAiJChnaXQgcmV2LXBhcnNlIC0tZ2l0LWRpcikvdGVtcGxhdGUiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLW0pJyAnCisKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibW9yZSIgJiYKKwl0ZXN0ICJgZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXNgIiA9ICJtZXNzYWdlIChubyBlZGl0b3IpIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLW0gZWRpdG9yKScgJworCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC1lIC1tICJtb3JlIG1vcmUiICYmCisJdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzYCIgPSBtZXNzYWdlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rICgtdCknICcKKworCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC10ICIkKGdpdCByZXYtcGFyc2UgLS1naXQtZGlyKS90ZW1wbGF0ZSIgJiYKKwl0ZXN0ICJgZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXNgIiA9IHRlbXBsYXRlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rICgtRiknICcKKworCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwkoZWNobyBtb3JlIHwgZ2l0IGNvbW1pdCAtRiAtKSAmJgorCXRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolc2AiID0gIm1lc3NhZ2UgKG5vIGVkaXRvcikiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rICgtRiBlZGl0b3IpJyAnCisKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJKGVjaG8gbW9yZSBtb3JlIHwgR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLWUgLUYgLSkgJiYKKwl0ZXN0ICJgZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXNgIiA9IG1lc3NhZ2UKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgKC1DKScgJworCisJaGVhZD1gZ2l0IHJldi1wYXJzZSBIRUFEYCAmJgorCWVjaG8gIm1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1DICRoZWFkICYmCisJdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzYCIgPSAiJGhlYWQgKG5vIGVkaXRvcikiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rIChlZGl0b3IpJyAnCisKKwllY2hvICJtb3JlIG1vcmUiID4+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAmJgorCXRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolc2AiID0gZGVmYXVsdAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLS1hbWVuZCknICcKKworCWhlYWQ9YGdpdCByZXYtcGFyc2UgSEVBRGAgJiYKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJR0lUX0VESVRPUj0iXCJcJEZBS0VfRURJVE9SXCIiIGdpdCBjb21taXQgLS1hbWVuZCAmJgorCXRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolc2AiID0gIiRoZWFkIgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggaG9vayAoLWMpJyAnCisKKwloZWFkPWBnaXQgcmV2LXBhcnNlIEhFQURgICYmCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCUdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgY29tbWl0IC1jICRoZWFkICYmCisJdGVzdCAiYGdpdCBsb2cgLTEgLS1wcmV0dHk9Zm9ybWF0OiVzYCIgPSAiJGhlYWQiCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBob29rIChtZXJnZSknICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLUIgb3RoZXIgSEVBREB7MX0gJiYKKwllY2hvICJtb3JlIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tIG90aGVyICYmCisJZ2l0IGNoZWNrb3V0IC0gJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBvdGhlciAmJgorCXRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolc2AiID0gIm1lcmdlIChubyBlZGl0b3IpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGhvb2sgYW5kIGVkaXRvciAobWVyZ2UpJyAnCisKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCAtZiBtYXN0ZXIiICYmCisJZ2l0IGNoZWNrb3V0IC1CIG90aGVyIEhFQURAezF9ICYmCisJZWNobyAibW9yZSIgPj5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSBvdGhlciAmJgorCWdpdCBjaGVja291dCAtICYmCisJZW52IEdJVF9FRElUT1I9IlwiXCRGQUtFX0VESVRPUlwiIiBnaXQgbWVyZ2UgLS1uby1mZiAtZSBvdGhlciAmJgorCXRlc3QgImBnaXQgbG9nIC0xIC0tcHJldHR5PWZvcm1hdDolc2AiID0gIm1lcmdlIgorJworCitjYXQgPiAiJEhPT0siIDw8J0VPRicKKyMhL2Jpbi9zaAorZXhpdCAxCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBmYWlsaW5nIGhvb2snICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwloZWFkPWBnaXQgcmV2LXBhcnNlIEhFQURgICYmCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtYyAkaGVhZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBob29rICgtLW5vLXZlcmlmeSknICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwloZWFkPWBnaXQgcmV2LXBhcnNlIEhFQURgICYmCisJZWNobyAibW9yZSIgPj4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBHSVRfRURJVE9SPSJcIlwkRkFLRV9FRElUT1JcIiIgZ2l0IGNvbW1pdCAtLW5vLXZlcmlmeSAtYyAkaGVhZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBob29rIChtZXJnZSknICcKKworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwlnaXQgY2hlY2tvdXQgLUIgb3RoZXIgSEVBREB7MX0gJiYKKwllY2hvICJtb3JlIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJcm0gLWYgIiRIT09LIiAmJgorCWdpdCBjb21taXQgLW0gb3RoZXIgJiYKKwl3cml0ZV9zY3JpcHQgIiRIT09LIiA8PC1FT0YgJiYKKwlleGl0IDEKKwlFT0YKKwlnaXQgY2hlY2tvdXQgLSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWZmIG90aGVyCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTA2LXN0YXR1cy1zdWJtb2R1bGUuc2ggYi90L3Q3NTA2LXN0YXR1cy1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDMxYjM0ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDYtc3RhdHVzLXN1Ym1vZHVsZS5zaApAQCAtMCwwICsxLDI3NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdGF0dXMgZm9yIHN1Ym1vZHVsZScKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfY3JlYXRlX3JlcG9fd2l0aF9jb21taXQgKCkgeworCXRlc3RfY3JlYXRlX3JlcG8gIiQxIiAmJgorCSgKKwkJY2QgIiQxIiAmJgorCQk6ID5iYXIgJiYKKwkJZ2l0IGFkZCBiYXIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiIEFkZCBiYXIiICYmCisJCTogPmZvbyAmJgorCQlnaXQgYWRkIGZvbyAmJgorCQlnaXQgY29tbWl0IC1tICIgQWRkIGZvbyIKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jcmVhdGVfcmVwb193aXRoX2NvbW1pdCBzdWIgJiYKKwllY2hvIG91dHB1dCA+IC5naXRpZ25vcmUgJiYKKwlnaXQgYWRkIHN1YiAuZ2l0aWdub3JlICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIHN1Ym1vZHVsZSBzdWIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBjbGVhbicgJworCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm5vdGhpbmcgdG8gY29tbWl0IiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IC0tZHJ5LXJ1biAtYSBjbGVhbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLS1kcnktcnVuIC1hID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3RoaW5nIHRvIGNvbW1pdCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1vZGlmaWVkIGZpbGUgaW4gc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNoYW5nZWQiID5zdWIvZm9vICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibW9kaWZpZWQ6ICAgc3ViIChtb2RpZmllZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1vZGlmaWVkIGZpbGUgaW4gc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCWVjaG8gImNoYW5nZWQiID5zdWIvZm9vICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGFkZGVkIGZpbGUgaW4gc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJtb2RpZmllZDogICBzdWIgKG1vZGlmaWVkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgZmlsZSBpbiBzdWJtb2R1bGUgKHBvcmNlbGFpbiknICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZWNobyA+Zm9vICYmIGdpdCBhZGQgZm9vKSAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCB1bnRyYWNrZWQgZmlsZSBpbiBzdWJtb2R1bGUnICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQpICYmCisJZWNobyAiY29udGVudCIgPnN1Yi9uZXctZmlsZSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAodW50cmFja2VkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC11bm8gd2l0aCB1bnRyYWNrZWQgZmlsZSBpbiBzdWJtb2R1bGUnICcKKwlnaXQgc3RhdHVzIC11bm8gPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIl5ub3RoaW5nIHRvIGNvbW1pdCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHVudHJhY2tlZCBmaWxlIGluIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBhbmQgdW50cmFja2VkIGZpbGUgaW4gc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwllY2hvICJjb250ZW50IiA+c3ViL25ldy1maWxlICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibW9kaWZpZWQ6ICAgc3ViIChtb2RpZmllZCBjb250ZW50LCB1bnRyYWNrZWQgY29udGVudCkiIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBhbmQgdW50cmFja2VkIGZpbGUgaW4gc3VibW9kdWxlIChwb3JjZWxhaW4pJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwllY2hvICJjb250ZW50IiA+c3ViL25ldy1maWxlICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+b3V0cHV0ICYmCisJZGlmZiBvdXRwdXQgLSA8PC1cRU9GCisJIE0gc3ViCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1vZGlmaWVkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkKSAmJgorCXJtIHN1Yi9uZXctZmlsZSAmJgorCShjZCBzdWIgJiYgZWNobyAibmV4dCBjaGFuZ2UiID5mb28gJiYgZ2l0IGNvbW1pdCAtbSAibmV4dCBjaGFuZ2UiIGZvbykgJiYKKwllY2hvICJjaGFuZ2VkIiA+c3ViL2ZvbyAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobmV3IGNvbW1pdHMsIG1vZGlmaWVkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggbW9kaWZpZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUgKHBvcmNlbGFpbiknICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQpICYmCisJZWNobyAiY2hhbmdlZCIgPnN1Yi9mb28gJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5vdXRwdXQgJiYKKwlkaWZmIG91dHB1dCAtIDw8LVxFT0YKKwkgTSBzdWIKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUnICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZWNobyA+Zm9vICYmIGdpdCBhZGQgZm9vKSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobmV3IGNvbW1pdHMsIG1vZGlmaWVkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUgKHBvcmNlbGFpbiknICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZWNobyA+Zm9vICYmIGdpdCBhZGQgZm9vKSAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCB1bnRyYWNrZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUnICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQpICYmCisJZWNobyAiY29udGVudCIgPnN1Yi9uZXctZmlsZSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobmV3IGNvbW1pdHMsIHVudHJhY2tlZCBjb250ZW50KSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHVudHJhY2tlZCBmaWxlIGluIG1vZGlmaWVkIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBhZGRlZCBhbmQgdW50cmFja2VkIGZpbGUgaW4gbW9kaWZpZWQgc3VibW9kdWxlJyAnCisJKGNkIHN1YiAmJiBnaXQgcmVzZXQgLS1oYXJkICYmIGVjaG8gPmZvbyAmJiBnaXQgYWRkIGZvbykgJiYKKwllY2hvICJjb250ZW50IiA+c3ViL25ldy1maWxlICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibW9kaWZpZWQ6ICAgc3ViIChuZXcgY29tbWl0cywgbW9kaWZpZWQgY29udGVudCwgdW50cmFja2VkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgYW5kIHVudHJhY2tlZCBmaWxlIGluIG1vZGlmaWVkIHN1Ym1vZHVsZSAocG9yY2VsYWluKScgJworCShjZCBzdWIgJiYgZ2l0IHJlc2V0IC0taGFyZCAmJiBlY2hvID5mb28gJiYgZ2l0IGFkZCBmb28pICYmCisJZWNobyAiY29udGVudCIgPnN1Yi9uZXctZmlsZSAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gPm91dHB1dCAmJgorCWRpZmYgb3V0cHV0IC0gPDwtXEVPRgorCSBNIHN1YgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCAuZ2l0IGZpbGUgZm9yIHN1YicgJworCShjZCBzdWIgJiYKKwkgcm0gLWYgbmV3LWZpbGUKKwkgUkVBTD0iJChwd2QpLy4uLy5yZWFsIiAmJgorCSBtdiAuZ2l0ICIkUkVBTCIKKwkgZWNobyAiZ2l0ZGlyOiAkUkVBTCIgPi5naXQpICYmCisJIGVjaG8gLnJlYWwgPj4uZ2l0aWdub3JlICYmCisJIGdpdCBjb21taXQgLW0gImFkZGVkIC5yZWFsIHRvIC5naXRpZ25vcmUiIC5naXRpZ25vcmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggYWRkZWQgZmlsZSBpbiBtb2RpZmllZCBzdWJtb2R1bGUgd2l0aCAuZ2l0IGZpbGUnICcKKwkoY2Qgc3ViICYmIGdpdCByZXNldCAtLWhhcmQgJiYgZWNobyA+Zm9vICYmIGdpdCBhZGQgZm9vKSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgIm1vZGlmaWVkOiAgIHN1YiAobmV3IGNvbW1pdHMsIG1vZGlmaWVkIGNvbnRlbnQpIiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncm0gc3VibW9kdWxlIGNvbnRlbnRzJyAnCisJcm0gLXJmIHN1Yi8qIHN1Yi8uZ2l0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBjbGVhbiAoZW1wdHkgc3VibW9kdWxlIGRpciknICcKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJub3RoaW5nIHRvIGNvbW1pdCIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtYSBjbGVhbiAoZW1wdHkgc3VibW9kdWxlIGRpciknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC0tZHJ5LXJ1biAtYSA+b3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAibm90aGluZyB0byBjb21taXQiIG91dHB1dAorJworCitjYXQgPnN0YXR1c19leHBlY3QgPDxcRU9GCitBQSAuZ2l0bW9kdWxlcworQSAgc3ViMQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIG1lcmdlIGNvbmZsaWN0IGluIC5naXRtb2R1bGVzJyAnCisJZ2l0IGNsb25lIC4gc3VwZXIgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvX3dpdGhfY29tbWl0IHN1YjEgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvX3dpdGhfY29tbWl0IHN1YjIgJiYKKwkoCisJCWNkIHN1cGVyICYmCisJCXByZXY9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJCWdpdCBjaGVja291dCAtYiBhZGRfc3ViMSAmJgorCQlnaXQgc3VibW9kdWxlIGFkZCAuLi9zdWIxICYmCisJCWdpdCBjb21taXQgLW0gImFkZCBzdWIxIiAmJgorCQlnaXQgY2hlY2tvdXQgLWIgYWRkX3N1YjIgJHByZXYgJiYKKwkJZ2l0IHN1Ym1vZHVsZSBhZGQgLi4vc3ViMiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc3ViMiIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIG1lcmdlX2NvbmZsaWN0X2dpdG1vZHVsZXMgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGFkZF9zdWIxICYmCisJCWdpdCBzdGF0dXMgLXMgPi4uL3N0YXR1c19hY3R1YWwgMj4mMQorCSkgJiYKKwl0ZXN0X2NtcCBzdGF0dXNfYWN0dWFsIHN0YXR1c19leHBlY3QKKycKKworc2hhMV9tZXJnZV9zdWIxPSQoY2Qgc3ViMSAmJiBnaXQgcmV2LXBhcnNlIEhFQUQpCitzaGExX21lcmdlX3N1YjI9JChjZCBzdWIyICYmIGdpdCByZXYtcGFyc2UgSEVBRCkKK3Nob3J0X3NoYTFfbWVyZ2Vfc3ViMT0kKGNkIHN1YjEgJiYgZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUQpCitzaG9ydF9zaGExX21lcmdlX3N1YjI9JChjZCBzdWIyICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKQorY2F0ID5kaWZmX2V4cGVjdCA8PFxFT0YKK2RpZmYgLS1jYyAuZ2l0bW9kdWxlcworaW5kZXggYmFkYWE0Yyw0NGY5OTlhLi4wMDAwMDAwCistLS0gYS8uZ2l0bW9kdWxlcworKysrIGIvLmdpdG1vZHVsZXMKK0BAQCAtMSwzIC0xLDMgKzEsOSBAQEAKKysrPDw8PDw8PCBIRUFECisgK1tzdWJtb2R1bGUgInN1YjIiXQorICsJcGF0aCA9IHN1YjIKKyArCXVybCA9IC4uL3N1YjIKKysrPT09PT09PQorKyBbc3VibW9kdWxlICJzdWIxIl0KKysgCXBhdGggPSBzdWIxCisrIAl1cmwgPSAuLi9zdWIxCisrKz4+Pj4+Pj4gYWRkX3N1YjEKK0VPRgorCitjYXQgPmRpZmZfc3VibW9kdWxlX2V4cGVjdCA8PFxFT0YKK2RpZmYgLS1jYyAuZ2l0bW9kdWxlcworaW5kZXggYmFkYWE0Yyw0NGY5OTlhLi4wMDAwMDAwCistLS0gYS8uZ2l0bW9kdWxlcworKysrIGIvLmdpdG1vZHVsZXMKK0BAQCAtMSwzIC0xLDMgKzEsOSBAQEAKKysrPDw8PDw8PCBIRUFECisgK1tzdWJtb2R1bGUgInN1YjIiXQorICsJcGF0aCA9IHN1YjIKKyArCXVybCA9IC4uL3N1YjIKKysrPT09PT09PQorKyBbc3VibW9kdWxlICJzdWIxIl0KKysgCXBhdGggPSBzdWIxCisrIAl1cmwgPSAuLi9zdWIxCisrKz4+Pj4+Pj4gYWRkX3N1YjEKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIHdpdGggbWVyZ2UgY29uZmxpY3QgaW4gLmdpdG1vZHVsZXMnICcKKwkoCisJCWNkIHN1cGVyICYmCisJCWdpdCBkaWZmID4uLi9kaWZmX2FjdHVhbCAyPiYxCisJKSAmJgorCXRlc3RfY21wIGRpZmZfYWN0dWFsIGRpZmZfZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpZmYgLS1zdWJtb2R1bGUgd2l0aCBtZXJnZSBjb25mbGljdCBpbiAuZ2l0bW9kdWxlcycgJworCSgKKwkJY2Qgc3VwZXIgJiYKKwkJZ2l0IGRpZmYgLS1zdWJtb2R1bGUgPi4uL2RpZmZfc3VibW9kdWxlX2FjdHVhbCAyPiYxCisJKSAmJgorCXRlc3RfY21wIGRpZmZfc3VibW9kdWxlX2FjdHVhbCBkaWZmX3N1Ym1vZHVsZV9leHBlY3QKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTA3LWNvbW1pdC12ZXJib3NlLnNoIGIvdC90NzUwNy1jb21taXQtdmVyYm9zZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZGRmMjhjCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUwNy1jb21taXQtdmVyYm9zZS5zaApAQCAtMCwwICsxLDk5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndmVyYm9zZSBjb21taXQgdGVtcGxhdGUnCisuIC4vdGVzdC1saWIuc2gKKworY2F0ID5jaGVjay1mb3ItZGlmZiA8PEVPRgorIyEkU0hFTExfUEFUSAorZXhlYyBncmVwICdeZGlmZiAtLWdpdCcgIlwkMSIKK0VPRgorY2htb2QgK3ggY2hlY2stZm9yLWRpZmYKK3Rlc3Rfc2V0X2VkaXRvciAiJFBXRC9jaGVjay1mb3ItZGlmZiIKKworY2F0ID5tZXNzYWdlIDw8J0VPRicKK3N1YmplY3QKKworYm9keQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBjb250ZW50ID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtRiBtZXNzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWwgY29tbWl0IHNob3dzIHZlcmJvc2UgZGlmZicgJworCWdpdCBjb21taXQgLS1hbWVuZCAtdgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZWNvbmQgY29tbWl0JyAnCisJZWNobyBjb250ZW50IG1vZGlmaWVkID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbW1pdCAtRiBtZXNzYWdlCisnCisKK2NoZWNrX21lc3NhZ2UoKSB7CisJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMlbiVuJWIgPmFjdHVhbCAmJgorCXRlc3RfY21wICIkMSIgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmJvc2UgZGlmZiBpcyBzdHJpcHBlZCBvdXQnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLXYgJiYKKwljaGVja19tZXNzYWdlIG1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyYm9zZSBkaWZmIGlzIHN0cmlwcGVkIG91dCAobW5lbW9uaWNwcmVmaXgpJyAnCisJZ2l0IGNvbmZpZyBkaWZmLm1uZW1vbmljcHJlZml4IHRydWUgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLXYgJiYKKwljaGVja19tZXNzYWdlIG1lc3NhZ2UKKycKKworY2F0ID5kaWZmIDw8J0VPRicKK1RoaXMgaXMgYW4gZXhhbXBsZSBjb21taXQgbWVzc2FnZSB0aGF0IGNvbnRhaW5zIGEgZGlmZi4KKworZGlmZiAtLWdpdCBjL2ZpbGUgaS9maWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uZjk1YzExZAorLS0tIC9kZXYvbnVsbAorKysrIGkvZmlsZQorQEAgLTAsMCArMSBAQAorK3RoaXMgaXMgc29tZSBjb250ZW50CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlmZiBpbiBtZXNzYWdlIGlzIHJldGFpbmVkIHdpdGhvdXQgLXYnICcKKwlnaXQgY29tbWl0IC0tYW1lbmQgLUYgZGlmZiAmJgorCWNoZWNrX21lc3NhZ2UgZGlmZgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaWZmIGluIG1lc3NhZ2UgaXMgcmV0YWluZWQgd2l0aCAtdicgJworCWdpdCBjb21taXQgLS1hbWVuZCAtRiBkaWZmIC12ICYmCisJY2hlY2tfbWVzc2FnZSBkaWZmCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBsb2cgaXMgc3RyaXBwZWQgb3V0IHRvbyB3aXRoIC12JyAnCisJZ2l0IGNvbmZpZyBkaWZmLnN1Ym1vZHVsZSBsb2cgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAuLy4gc3ViICYmCisJZ2l0IGNvbW1pdCAtbSAic3ViIGFkZGVkIiAmJgorCSgKKwkJY2Qgc3ViICYmCisJCWVjaG8gIm1vcmUiID4+ZmlsZSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJzdWJtb2R1bGUgY29tbWl0IgorCSkgJiYKKwkoCisJCUdJVF9FRElUT1I9Y2F0ICYmCisJCWV4cG9ydCBHSVRfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLWEgLXYgMj5lcnIKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS4iIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJib3NlIGRpZmYgaXMgc3RyaXBwZWQgb3V0IHdpdGggc2V0IGNvcmUuY29tbWVudENoYXInICcKKwkoCisJCUdJVF9FRElUT1I9Y2F0ICYmCisJCWV4cG9ydCBHSVRfRURJVE9SICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBjb3JlLmNvbW1lbnRjaGFyPSI7IiBjb21taXQgLWEgLXYgMj5lcnIKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiQWJvcnRpbmcgY29tbWl0IGR1ZSB0byBlbXB0eSBjb21taXQgbWVzc2FnZS4iIGVycgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MDgtc3RhdHVzLnNoIGIvdC90NzUwOC1zdGF0dXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzNlZDdjYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MDgtc3RhdHVzLnNoCkBAIC0wLDAgKzEsMTUwMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdGF0dXMnCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLWggaW4gYnJva2VuIHJlcG9zaXRvcnknICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIGFkdmljZS5zdGF0dXN1b3B0aW9uIGZhbHNlICYmCisJbWtkaXIgYnJva2VuICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZnIgYnJva2VuIiAmJgorCSgKKwkJY2QgYnJva2VuICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gIltzdGF0dXNdIHNob3d1bnRyYWNrZWRmaWxlcyA9IENPUlJVUFQiID4+LmdpdC9jb25maWcgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IHN0YXR1cyAtaCA+dXNhZ2UgMj4mMQorCSkgJiYKKwl0ZXN0X2kxOG5ncmVwICJbVXVdc2FnZSIgYnJva2VuL3VzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtaCBpbiBicm9rZW4gcmVwb3NpdG9yeScgJworCW1rZGlyIGJyb2tlbiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWZyIGJyb2tlbiIgJiYKKwkoCisJCWNkIGJyb2tlbiAmJgorCQlnaXQgaW5pdCAmJgorCQllY2hvICJbc3RhdHVzXSBzaG93dW50cmFja2VkZmlsZXMgPSBDT1JSVVBUIiA+Pi5naXQvY29uZmlnICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMTI5IGdpdCBjb21taXQgLWggPnVzYWdlIDI+JjEKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2UiIGJyb2tlbi91c2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCTogPnRyYWNrZWQgJiYKKwk6ID5tb2RpZmllZCAmJgorCW1rZGlyIGRpcjEgJiYKKwk6ID5kaXIxL3RyYWNrZWQgJiYKKwk6ID5kaXIxL21vZGlmaWVkICYmCisJbWtkaXIgZGlyMiAmJgorCTogPmRpcjEvdHJhY2tlZCAmJgorCTogPmRpcjEvbW9kaWZpZWQgJiYKKwlnaXQgYWRkIC4gJiYKKworCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJOiA+dW50cmFja2VkICYmCisJOiA+ZGlyMS91bnRyYWNrZWQgJiYKKwk6ID5kaXIyL3VudHJhY2tlZCAmJgorCWVjaG8gMSA+ZGlyMS9tb2RpZmllZCAmJgorCWVjaG8gMiA+ZGlyMi9tb2RpZmllZCAmJgorCWVjaG8gMyA+ZGlyMi9hZGRlZCAmJgorCWdpdCBhZGQgZGlyMi9hZGRlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgKDEpJyAnCisJdGVzdF9pMThuZ3JlcCAidXNlIFwiZ2l0IHJtIC0tY2FjaGVkIDxmaWxlPlwuXC5cLlwiIHRvIHVuc3RhZ2UiIG91dHB1dAorJworCitzdHJpcF9jb21tZW50cyAoKSB7CisJdGFiPScJJworCXNlZCAicy9eXCMgLy87IHMvXlwjJC8vOyBzL14jJHRhYi8kdGFiLyIgPCIkMSIgPiIkMSIudG1wICYmCisJcm0gIiQxIiAmJiBtdiAiJDEiLnRtcCAiJDEiCit9CisKK2NhdCA+LmdpdGlnbm9yZSA8PFxFT0YKKy5naXRpZ25vcmUKK2V4cGVjdCoKK291dHB1dCoKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1jb2x1bW4nICcKKwljYXQgPmV4cGVjdCA8PFxFT0YgJiYKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCisjCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKyMKKyMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyMKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJZGlyMS91bnRyYWNrZWQgZGlyMi91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZCAgdW50cmFja2VkCisjCitFT0YKKwlDT0xVTU5TPTUwIGdpdCAtYyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9dHJ1ZSBzdGF0dXMgLS1jb2x1bW49ImNvbHVtbiBkZW5zZSIgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLWNvbHVtbiBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9ZmFsc2UnICcKKwlzdHJpcF9jb21tZW50cyBleHBlY3QgJiYKKwlDT0xVTU5TPTQ5IGdpdCAtYyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9ZmFsc2Ugc3RhdHVzIC0tY29sdW1uPSJjb2x1bW4gZGVuc2UiID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMgT24gYnJhbmNoIG1hc3RlcgorIyBDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyMgICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisjCisjCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKyMKKyMgQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorIyAgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKyMKKyMJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorIworIyBVbnRyYWNrZWQgZmlsZXM6CisjICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyMKKyMJZGlyMS91bnRyYWNrZWQKKyMJZGlyMi9tb2RpZmllZAorIwlkaXIyL3VudHJhY2tlZAorIwl1bnRyYWNrZWQKKyMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9dHJ1ZScgJworCWdpdCAtYyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9dHJ1ZSBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD1mYWxzZScgJworCXN0cmlwX2NvbW1lbnRzIGV4cGVjdCAmJgorCWdpdCAtYyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9ZmFsc2Ugc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXYnICcKKwkoY2F0IGV4cGVjdCAmJiBnaXQgZGlmZiAtLWNhY2hlZCkgPmV4cGVjdC13aXRoLXYgJiYKKwlnaXQgc3RhdHVzIC12ID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0LXdpdGgtdiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC12IC12JyAnCisJKGNhdCBleHBlY3QgJiYKKwkgZWNobyAiQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IiAmJgorCSBnaXQgLWMgZGlmZi5tbmVtb25pY3ByZWZpeD10cnVlIGRpZmYgLS1jYWNoZWQgJiYKKwkgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iICYmCisJIGVjaG8gIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIgJiYKKwkgZ2l0IC1jIGRpZmYubW5lbW9uaWNwcmVmaXg9dHJ1ZSBkaWZmKSA+ZXhwZWN0LXdpdGgtdiAmJgorCWdpdCBzdGF0dXMgLXYgLXYgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qtd2l0aC12IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmYWtlIGVkaXRvcicgJworCWNhdCA+LmdpdC9lZGl0b3IgPDwtXEVPRiAmJgorCSMhIC9iaW4vc2gKKwljcCAiJDEiIG91dHB1dAorRU9GCisJY2htb2QgNzU1IC5naXQvZWRpdG9yCisnCisKK2NvbW1pdF90ZW1wbGF0ZV9jb21tZW50ZWQgKCkgeworCSgKKwkJRURJVE9SPS5naXQvZWRpdG9yICYmCisJCWV4cG9ydCBFRElUT1IgJiYKKwkJIyBGYWlscyBkdWUgdG8gZW1wdHkgbWVzc2FnZQorCQl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0CisJKSAmJgorCSEgZ3JlcCAnXlteI10nIG91dHB1dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQgaWdub3JlcyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9ZmFsc2UgaW4gQ09NTUlUX0VESVRNU0cnICcKKwljb21taXRfdGVtcGxhdGVfY29tbWVudGVkCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorT24gYnJhbmNoIG1hc3RlcgorQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlczoKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCXVudHJhY2tlZAorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIChhZHZpY2Uuc3RhdHVzSGludHMgZmFsc2UpJyAnCisJdGVzdF9jb25maWcgYWR2aWNlLnN0YXR1c0hpbnRzIGZhbHNlICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zJyAnCisKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdpdGggZ2l0aWdub3JlJyAnCisJeworCQllY2hvICIuZ2l0aWdub3JlIiAmJgorCQllY2hvICJleHBlY3QqIiAmJgorCQllY2hvICJvdXRwdXQiICYmCisJCWVjaG8gInVudHJhY2tlZCIKKwl9ID4uZ2l0aWdub3JlICYmCisKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJIE0gZGlyMS9tb2RpZmllZAorCUEgIGRpcjIvYWRkZWQKKwk/PyBkaXIyL21vZGlmaWVkCisJRU9GCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBNIGRpcjEvbW9kaWZpZWQKKwlBICBkaXIyL2FkZGVkCisJPz8gZGlyMi9tb2RpZmllZAorCSEhIC5naXRpZ25vcmUKKwkhISBkaXIxL3VudHJhY2tlZAorCSEhIGRpcjIvdW50cmFja2VkCisJISEgZXhwZWN0CisJISEgZXhwZWN0LXdpdGgtdgorCSEhIG91dHB1dAorCSEhIHVudHJhY2tlZAorCUVPRgorCWdpdCBzdGF0dXMgLXMgLS1pZ25vcmVkID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisKKwljYXQgPmV4cGVjdCA8PFxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisKKwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKworCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCisJZGlyMi9tb2RpZmllZAorCitJZ25vcmVkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIC1mIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCisJLmdpdGlnbm9yZQorCWRpcjEvdW50cmFja2VkCisJZGlyMi91bnRyYWNrZWQKKwlleHBlY3QKKwlleHBlY3Qtd2l0aC12CisJb3V0cHV0CisJdW50cmFja2VkCisKK0VPRgorCWdpdCBzdGF0dXMgLS1pZ25vcmVkID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBnaXRpZ25vcmUgKG5vdGhpbmcgdW50cmFja2VkKScgJworCXsKKwkJZWNobyAiLmdpdGlnbm9yZSIgJiYKKwkJZWNobyAiZXhwZWN0KiIgJiYKKwkJZWNobyAiZGlyMi9tb2RpZmllZCIgJiYKKwkJZWNobyAib3V0cHV0IiAmJgorCQllY2hvICJ1bnRyYWNrZWQiCisJfSA+LmdpdGlnbm9yZSAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBNIGRpcjEvbW9kaWZpZWQKKwlBICBkaXIyL2FkZGVkCisJRU9GCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgorCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSBNIGRpcjEvbW9kaWZpZWQKKwlBICBkaXIyL2FkZGVkCisJISEgLmdpdGlnbm9yZQorCSEhIGRpcjEvdW50cmFja2VkCisJISEgZGlyMi9tb2RpZmllZAorCSEhIGRpcjIvdW50cmFja2VkCisJISEgZXhwZWN0CisJISEgZXhwZWN0LXdpdGgtdgorCSEhIG91dHB1dAorCSEhIHVudHJhY2tlZAorCUVPRgorCWdpdCBzdGF0dXMgLXMgLS1pZ25vcmVkID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0ICYmCisKKwljYXQgPmV4cGVjdCA8PFxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisKKwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKworCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworSWdub3JlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCAtZiA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKworCS5naXRpZ25vcmUKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCWV4cGVjdAorCWV4cGVjdC13aXRoLXYKKwlvdXRwdXQKKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IHN0YXR1cyAtLWlnbm9yZWQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+LmdpdGlnbm9yZSA8PFxFT0YKKy5naXRpZ25vcmUKK2V4cGVjdCoKK291dHB1dCoKK0VPRgorCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMjIG1hc3RlcgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyB1bnRyYWNrZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLWInICcKKworCWdpdCBzdGF0dXMgLXMgLWIgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLXogLWInICcKKwl0ciAiXFxuIiBRIDxleHBlY3QgPmV4cGVjdC5xICYmCisJbXYgZXhwZWN0LnEgZXhwZWN0ICYmCisJZ2l0IHN0YXR1cyAtcyAteiAtYiA+b3V0cHV0ICYmCisJbnVsX3RvX3EgPG91dHB1dCA+b3V0cHV0LnEgJiYKKwltdiBvdXRwdXQucSBvdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpcjMnICcKKwlta2RpciBkaXIzICYmCisJOiA+ZGlyMy91bnRyYWNrZWQxICYmCisJOiA+ZGlyMy91bnRyYWNrZWQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtdW5vJyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisKKwluZXcgZmlsZTogICBkaXIyL2FkZGVkCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKworCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworVW50cmFja2VkIGZpbGVzIG5vdCBsaXN0ZWQgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC11bm8gPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAoc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcyBubyknICcKKwl0ZXN0X2NvbmZpZyBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIG5vICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC11bm8gKGFkdmljZS5zdGF0dXNIaW50cyBmYWxzZSknICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkCitFT0YKKwl0ZXN0X2NvbmZpZyBhZHZpY2Uuc3RhdHVzSGludHMgZmFsc2UgJiYKKwlnaXQgc3RhdHVzIC11bm8gPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8IEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLXVubycgJworCWdpdCBzdGF0dXMgLXMgLXVubyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgKHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMgbm8pJyAnCisJZ2l0IGNvbmZpZyBzdGF0dXMuc2hvd3VudHJhY2tlZGZpbGVzIG5vICYmCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXVub3JtYWwnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKworCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCWRpcjMvCisJdW50cmFja2VkCisKK0VPRgorCWdpdCBzdGF0dXMgLXVub3JtYWwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAoc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcyBub3JtYWwpJyAnCisJdGVzdF9jb25maWcgc3RhdHVzLnNob3d1bnRyYWNrZWRmaWxlcyBub3JtYWwgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyBkaXIzLworPz8gdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAtdW5vcm1hbCcgJworCWdpdCBzdGF0dXMgLXMgLXVub3JtYWwgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIChzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzIG5vcm1hbCknICcKKwlnaXQgY29uZmlnIHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMgbm9ybWFsICYmCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXVhbGwnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKworCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCWRpcjMvdW50cmFja2VkMQorCWRpcjMvdW50cmFja2VkMgorCXVudHJhY2tlZAorCitFT0YKKwlnaXQgc3RhdHVzIC11YWxsID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgKHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMgYWxsKScgJworCXRlc3RfY29uZmlnIHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMgYWxsICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVhcmRvd24gZGlyMycgJworCXJtIC1yZiBkaXIzCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IHVudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLXVhbGwnICcKKwl0ZXN0X3VuY29uZmlnIHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMgJiYKKwlnaXQgc3RhdHVzIC1zIC11YWxsID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgKHN0YXR1cy5zaG93VW50cmFja2VkRmlsZXMgYWxsKScgJworCXRlc3RfY29uZmlnIHN0YXR1cy5zaG93dW50cmFja2VkZmlsZXMgYWxsICYmCisJZ2l0IHN0YXR1cyAtcyA+b3V0cHV0ICYmCisJcm0gLXJmIGRpcjMgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIHJlbGF0aXZlIHBhdGhzJyAnCisJY2F0ID5leHBlY3QgPDxcRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCisJbmV3IGZpbGU6ICAgLi4vZGlyMi9hZGRlZAorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisKKwltb2RpZmllZDogICBtb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisKKwl1bnRyYWNrZWQKKwkuLi9kaXIyL21vZGlmaWVkCisJLi4vZGlyMi91bnRyYWNrZWQKKwkuLi91bnRyYWNrZWQKKworRU9GCisJKGNkIGRpcjEgJiYgZ2l0IHN0YXR1cykgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIE0gbW9kaWZpZWQKK0EgIC4uL2RpcjIvYWRkZWQKKz8/IHVudHJhY2tlZAorPz8gLi4vZGlyMi9tb2RpZmllZAorPz8gLi4vZGlyMi91bnRyYWNrZWQKKz8/IC4uL3VudHJhY2tlZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgd2l0aCByZWxhdGl2ZSBwYXRocycgJworCisJKGNkIGRpcjEgJiYgZ2l0IHN0YXR1cyAtcykgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKK0EgIGRpcjIvYWRkZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC0tcG9yY2VsYWluIGlnbm9yZXMgcmVsYXRpdmUgcGF0aHMgc2V0dGluZycgJworCisJKGNkIGRpcjEgJiYgZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbikgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB1bmlxdWUgY29sb3JzJyAnCisKKwlnaXQgY29uZmlnIHN0YXR1cy5jb2xvci51bnRyYWNrZWQgYmx1ZSAmJgorCWdpdCBjb25maWcgc3RhdHVzLmNvbG9yLmJyYW5jaCBncmVlbgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aXRoIGNvbG9yLnVpJyAnCisJY2F0ID5leHBlY3QgPDxcRU9GICYmCitPbiBicmFuY2ggPEdSRUVOPm1hc3RlcjxSRVNFVD4KK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisKKwk8R1JFRU4+bmV3IGZpbGU6ICAgZGlyMi9hZGRlZDxSRVNFVD4KKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCisJPFJFRD5tb2RpZmllZDogICBkaXIxL21vZGlmaWVkPFJFU0VUPgorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisKKwk8QkxVRT5kaXIxL3VudHJhY2tlZDxSRVNFVD4KKwk8QkxVRT5kaXIyL21vZGlmaWVkPFJFU0VUPgorCTxCTFVFPmRpcjIvdW50cmFja2VkPFJFU0VUPgorCTxCTFVFPnVudHJhY2tlZDxSRVNFVD4KKworRU9GCisJdGVzdF9jb25maWcgY29sb3IudWkgYWx3YXlzICYmCisJZ2l0IHN0YXR1cyB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aCBjb2xvci5zdGF0dXMnICcKKwl0ZXN0X2NvbmZpZyBjb2xvci5zdGF0dXMgYWx3YXlzICYmCisJZ2l0IHN0YXR1cyB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyA8UkVEPk08UkVTRVQ+IGRpcjEvbW9kaWZpZWQKKzxHUkVFTj5BPFJFU0VUPiAgZGlyMi9hZGRlZAorPEJMVUU+Pz88UkVTRVQ+IGRpcjEvdW50cmFja2VkCis8QkxVRT4/PzxSRVNFVD4gZGlyMi9tb2RpZmllZAorPEJMVUU+Pz88UkVTRVQ+IGRpcjIvdW50cmFja2VkCis8QkxVRT4/PzxSRVNFVD4gdW50cmFja2VkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHdpdGggY29sb3IudWknICcKKworCWdpdCBjb25maWcgY29sb3IudWkgYWx3YXlzICYmCisJZ2l0IHN0YXR1cyAtcyB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHdpdGggY29sb3Iuc3RhdHVzJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sb3IudWkgJiYKKwlnaXQgY29uZmlnIGNvbG9yLnN0YXR1cyBhbHdheXMgJiYKKwlnaXQgc3RhdHVzIC1zIHwgdGVzdF9kZWNvZGVfY29sb3IgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCitjYXQgPmV4cGVjdCA8PFxFT0YKKyMjIDxHUkVFTj5tYXN0ZXI8UkVTRVQ+CisgPFJFRD5NPFJFU0VUPiBkaXIxL21vZGlmaWVkCis8R1JFRU4+QTxSRVNFVD4gIGRpcjIvYWRkZWQKKzxCTFVFPj8/PFJFU0VUPiBkaXIxL3VudHJhY2tlZAorPEJMVUU+Pz88UkVTRVQ+IGRpcjIvbW9kaWZpZWQKKzxCTFVFPj8/PFJFU0VUPiBkaXIyL3VudHJhY2tlZAorPEJMVUU+Pz88UkVTRVQ+IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyAtYiB3aXRoIGNvbG9yLnN0YXR1cycgJworCisJZ2l0IHN0YXR1cyAtcyAtYiB8IHRlc3RfZGVjb2RlX2NvbG9yID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCis/PyBkaXIxL3VudHJhY2tlZAorPz8gZGlyMi9tb2RpZmllZAorPz8gZGlyMi91bnRyYWNrZWQKKz8/IHVudHJhY2tlZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLXBvcmNlbGFpbiBpZ25vcmVzIGNvbG9yLnVpJyAnCisKKwlnaXQgY29uZmlnIC0tdW5zZXQgY29sb3Iuc3RhdHVzICYmCisJZ2l0IGNvbmZpZyBjb2xvci51aSBhbHdheXMgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluIHwgdGVzdF9kZWNvZGVfY29sb3IgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS1wb3JjZWxhaW4gaWdub3JlcyBjb2xvci5zdGF0dXMnICcKKworCWdpdCBjb25maWcgLS11bnNldCBjb2xvci51aSAmJgorCWdpdCBjb25maWcgY29sb3Iuc3RhdHVzIGFsd2F5cyAmJgorCWdpdCBzdGF0dXMgLS1wb3JjZWxhaW4gfCB0ZXN0X2RlY29kZV9jb2xvciA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKKyMgcmVjb3ZlciB1bmNvbmRpdGlvbmFsbHkgZnJvbSBjb2xvciB0ZXN0cworZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbG9yLnN0YXR1cworZ2l0IGNvbmZpZyAtLXVuc2V0IGNvbG9yLnVpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtLXBvcmNlbGFpbiByZXNwZWN0cyAtYicgJworCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiAtYiA+b3V0cHV0ICYmCisJeworCQllY2hvICIjIyBtYXN0ZXIiICYmCisJCWNhdCBleHBlY3QKKwl9ID50bXAgJiYKKwltdiB0bXAgZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2l0aG91dCByZWxhdGl2ZSBwYXRocycgJworCWNhdCA+ZXhwZWN0IDw8XEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKworCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCXVudHJhY2tlZAorCitFT0YKKwl0ZXN0X2NvbmZpZyBzdGF0dXMucmVsYXRpdmVQYXRocyBmYWxzZSAmJgorCShjZCBkaXIxICYmIGdpdCBzdGF0dXMpID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyB1bnRyYWNrZWQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgd2l0aG91dCByZWxhdGl2ZSBwYXRocycgJworCisJdGVzdF9jb25maWcgc3RhdHVzLnJlbGF0aXZlUGF0aHMgZmFsc2UgJiYKKwkoY2QgZGlyMSAmJiBnaXQgc3RhdHVzIC1zKSA+b3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RyeS1ydW4gb2YgcGFydGlhbCBjb21taXQgZXhjbHVkaW5nIG5ldyBmaWxlIGluIGluZGV4JyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKworCWRpcjEvdW50cmFja2VkCisJZGlyMi8KKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IGNvbW1pdCAtLWRyeS1ydW4gZGlyMS9tb2RpZmllZCA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzoxMDA2NDQgMTAwNjQ0IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBNCWRpcjEvbW9kaWZpZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHJlZnJlc2hlcyB0aGUgaW5kZXgnICcKKwl0b3VjaCBkaXIyL2FkZGVkICYmCisJZ2l0IHN0YXR1cyAmJgorCWdpdCBkaWZmLWZpbGVzID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeScgJworCXRlc3RfY3JlYXRlX3JlcG8gc20gJiYgKAorCQljZCBzbSAmJgorCQk+Zm9vICYmCisJCWdpdCBhZGQgZm9vICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBmb28iCisJKSAmJgorCWdpdCBhZGQgc20KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHN1Ym1vZHVsZSBzdW1tYXJ5IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKworCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKwluZXcgZmlsZTogICBzbQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKworCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK0VPRgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKKyMgd2UgZXhwZWN0IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyB0ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9YWxsIGRvZXMgbm90IHNob3cgc3VibW9kdWxlJyAnCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCisgTSBkaXIxL21vZGlmaWVkCitBICBkaXIyL2FkZGVkCitBICBzbQorPz8gZGlyMS91bnRyYWNrZWQKKz8/IGRpcjIvbW9kaWZpZWQKKz8/IGRpcjIvdW50cmFja2VkCis/PyB1bnRyYWNrZWQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC1zIHN1Ym1vZHVsZSBzdW1tYXJ5IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQnICcKKwlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKKyMgd2UgZXhwZWN0IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyB0ZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgLXMgLS11bnRyYWNrZWQtZmlsZXM9YWxsIGRvZXMgbm90IHNob3cgc3VibW9kdWxlJyAnCisJZ2l0IHN0YXR1cyAtcyAtLXVudHJhY2tlZC1maWxlcz1hbGwgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKworaGVhZD0kKGNkIHNtICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydD03IC0tdmVyaWZ5IEhFQUQpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBzdWJtb2R1bGUgc3VtbWFyeScgJworCWNhdCA+ZXhwZWN0IDw8RU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCisJbmV3IGZpbGU6ICAgZGlyMi9hZGRlZAorCW5ldyBmaWxlOiAgIHNtCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKworCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorCisqIHNtIDAwMDAwMDAuLi4kaGVhZCAoMSk6CisgID4gQWRkIGZvbworCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCXVudHJhY2tlZAorCitFT0YKKwlnaXQgY29uZmlnIHN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5IDEwICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHN1Ym1vZHVsZSBzdW1tYXJ5IHdpdGggc3RhdHVzLmRpc3BsYXlDb21tZW50UHJlZml4PWZhbHNlJyAnCisJc3RyaXBfY29tbWVudHMgZXhwZWN0ICYmCisJZ2l0IC1jIHN0YXR1cy5kaXNwbGF5Q29tbWVudFByZWZpeD1mYWxzZSBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCB3aXRoIHN1Ym1vZHVsZSBzdW1tYXJ5IGlnbm9yZXMgc3RhdHVzLmRpc3BsYXlDb21tZW50UHJlZml4JyAnCisJY29tbWl0X3RlbXBsYXRlX2NvbW1lbnRlZAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorIE0gZGlyMS9tb2RpZmllZAorQSAgZGlyMi9hZGRlZAorQSAgc20KKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyBzdWJtb2R1bGUgc3VtbWFyeScgJworCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHN1Ym1vZHVsZSBzdW1tYXJ5IChjbGVhbiBzdWJtb2R1bGUpOiBjb21taXQnICcKKwljYXQgPmV4cGVjdCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCXVudHJhY2tlZAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IHN1Ym1vZHVsZSIgJiYKKwlnaXQgY29uZmlnIHN0YXR1cy5zdWJtb2R1bGVzdW1tYXJ5IDEwICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtLWRyeS1ydW4gPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKyBNIGRpcjEvbW9kaWZpZWQKKz8/IGRpcjEvdW50cmFja2VkCis/PyBkaXIyL21vZGlmaWVkCis/PyBkaXIyL3VudHJhY2tlZAorPz8gdW50cmFja2VkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyAtcyBzdWJtb2R1bGUgc3VtbWFyeSAoY2xlYW4gc3VibW9kdWxlKScgJworCWdpdCBzdGF0dXMgLXMgPm91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIC16IGltcGxpZXMgcG9yY2VsYWluJyAnCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiB8CisJcGVybCAtcGUgInMvXDAxMi9cMDAwL2ciID5leHBlY3QgJiYKKwlnaXQgc3RhdHVzIC16ID5vdXRwdXQgJiYKKwl0ZXN0X2NtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCAtLWRyeS1ydW4gc3VibW9kdWxlIHN1bW1hcnkgKC0tYW1lbmQpJyAnCisJY2F0ID5leHBlY3QgPDxFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzZXQgSEVBRF4xIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKworCW5ldyBmaWxlOiAgIGRpcjIvYWRkZWQKKwluZXcgZmlsZTogICBzbQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1N1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKworKiBzbSAwMDAwMDAwLi4uJGhlYWQgKDEpOgorICA+IEFkZCBmb28KKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL21vZGlmaWVkCisJZGlyMi91bnRyYWNrZWQKKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IGNvbmZpZyBzdGF0dXMuc3VibW9kdWxlc3VtbWFyeSAxMCAmJgorCWdpdCBjb21taXQgLS1kcnktcnVuIC0tYW1lbmQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUE9TSVhQRVJNLFNBTklUWSAnc3RhdHVzIHN1Y2NlZWRzIGluIGEgcmVhZC1vbmx5IHJlcG9zaXRvcnknICcKKwkoCisJCWNobW9kIGEtdyAuZ2l0ICYmCisJCSMgbWFrZSBkaXIxL3RyYWNrZWQgc3RhdC1kaXJ0eQorCQk+ZGlyMS90cmFja2VkMSAmJiBtdiAtZiBkaXIxL3RyYWNrZWQxIGRpcjEvdHJhY2tlZCAmJgorCQlnaXQgc3RhdHVzIC1zID5vdXRwdXQgJiYKKwkJISBncmVwIGRpcjEvdHJhY2tlZCBvdXRwdXQgJiYKKwkJIyBtYWtlIHN1cmUgInN0YXR1cyIgc3VjY2VlZGVkIHdpdGhvdXQgd3JpdGluZyBpbmRleCBvdXQKKwkJZ2l0IGRpZmYtZmlsZXMgfCBncmVwIGRpcjEvdHJhY2tlZAorCSkKKwlzdGF0dXM9JD8KKwljaG1vZCA3NzUgLmdpdAorCShleGl0ICRzdGF0dXMpCisnCisKKyhjZCBzbSAmJiBlY2hvID4gYmFyICYmIGdpdCBhZGQgYmFyICYmIGdpdCBjb21taXQgLXEgLW0gJ0FkZCBiYXInKSAmJiBnaXQgYWRkIHNtCituZXdfaGVhZD0kKGNkIHNtICYmIGdpdCByZXYtcGFyc2UgLS1zaG9ydD03IC0tdmVyaWZ5IEhFQUQpCit0b3VjaCAuZ2l0bW9kdWxlcworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCB1bnRyYWNrZWQgY29udGVudCcgJworCWNhdCA+IGV4cGVjdCA8PCBFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisKKwltb2RpZmllZDogICBzbQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1N1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKworKiBzbSAkaGVhZC4uLiRuZXdfaGVhZCAoMSk6CisgID4gQWRkIGJhcgorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisKKwkuZ2l0bW9kdWxlcworCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK0VPRgorCWVjaG8gbW9kaWZpZWQgIHNtL3VudHJhY2tlZCAmJgorCWdpdCBzdGF0dXMgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRtb2R1bGVzIGlnbm9yZT11bnRyYWNrZWQgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggdW50cmFja2VkIGNvbnRlbnQnICcKKwl0ZXN0X2NvbmZpZyBkaWZmLmlnbm9yZVN1Ym1vZHVsZXMgZGlydHkgJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0L2NvbmZpZyBpZ25vcmU9dW50cmFja2VkIHN1cHByZXNzZXMgc3VibW9kdWxlcyB3aXRoIHVudHJhY2tlZCBjb250ZW50JyAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggdW50cmFja2VkIGNvbnRlbnQnICcKKwlnaXQgc3RhdHVzIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRtb2R1bGVzIGlnbm9yZT1kaXJ0eSBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCB1bnRyYWNrZWQgY29udGVudCcgJworCXRlc3RfY29uZmlnIGRpZmYuaWdub3JlU3VibW9kdWxlcyBkaXJ0eSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCSEgdGVzdCAtcyBhY3R1YWwgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0L2NvbmZpZyBpZ25vcmU9ZGlydHkgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggdW50cmFja2VkIGNvbnRlbnQnICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBub25lICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgZGlydHkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1pZ25vcmUtc3VibW9kdWxlcz1kaXJ0eSBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCBtb2RpZmllZCBjb250ZW50JyAnCisJZWNobyBtb2RpZmllZCA+c20vZm9vICYmCisJZ2l0IHN0YXR1cyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcuZ2l0bW9kdWxlcyBpZ25vcmU9ZGlydHkgc3VwcHJlc3NlcyBzdWJtb2R1bGVzIHdpdGggbW9kaWZpZWQgY29udGVudCcgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGRpcnR5ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXQvY29uZmlnIGlnbm9yZT1kaXJ0eSBzdXBwcmVzc2VzIHN1Ym1vZHVsZXMgd2l0aCBtb2RpZmllZCBjb250ZW50JyAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIGRpcnR5ICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+b3V0cHV0ICYmCisJdGVzdF9pMThuY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIi0taWdub3JlLXN1Ym1vZHVsZXM9dW50cmFja2VkIGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlcyB3aXRoIG1vZGlmaWVkIGNvbnRlbnQiICcKKwljYXQgPiBleHBlY3QgPDwgRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCisJbW9kaWZpZWQ6ICAgc20KKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpCisKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisJbW9kaWZpZWQ6ICAgc20gKG1vZGlmaWVkIGNvbnRlbnQpCisKK1N1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKworKiBzbSAkaGVhZC4uLiRuZXdfaGVhZCAoMSk6CisgID4gQWRkIGJhcgorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisKKwkuZ2l0bW9kdWxlcworCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK0VPRgorCWdpdCBzdGF0dXMgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgPiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIuZ2l0bW9kdWxlcyBpZ25vcmU9dW50cmFja2VkIGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlcyB3aXRoIG1vZGlmaWVkIGNvbnRlbnQiICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSB1bnRyYWNrZWQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLmdpdC9jb25maWcgaWdub3JlPXVudHJhY2tlZCBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZXMgd2l0aCBtb2RpZmllZCBjb250ZW50IiAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCitoZWFkMj0kKGNkIHNtICYmIGdpdCBjb21taXQgLXEgLW0gIjJuZCBjb21taXQiIGZvbyAmJiBnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9NyAtLXZlcmlmeSBIRUFEKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWlnbm9yZS1zdWJtb2R1bGVzPXVudHJhY2tlZCBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZSBzdW1tYXJ5IiAnCisJY2F0ID4gZXhwZWN0IDw8IEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKworCW1vZGlmaWVkOiAgIHNtCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKworCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKwltb2RpZmllZDogICBzbSAobmV3IGNvbW1pdHMpCisKK1N1Ym1vZHVsZSBjaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKworKiBzbSAkaGVhZC4uLiRuZXdfaGVhZCAoMSk6CisgID4gQWRkIGJhcgorCitTdWJtb2R1bGVzIGNoYW5nZWQgYnV0IG5vdCB1cGRhdGVkOgorCisqIHNtICRuZXdfaGVhZC4uLiRoZWFkMiAoMSk6CisgID4gMm5kIGNvbW1pdAorCitVbnRyYWNrZWQgZmlsZXM6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byBpbmNsdWRlIGluIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisKKwkuZ2l0bW9kdWxlcworCWRpcjEvdW50cmFja2VkCisJZGlyMi9tb2RpZmllZAorCWRpcjIvdW50cmFja2VkCisJdW50cmFja2VkCisKK0VPRgorCWdpdCBzdGF0dXMgLS1pZ25vcmUtc3VibW9kdWxlcz11bnRyYWNrZWQgPiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIuZ2l0bW9kdWxlcyBpZ25vcmU9dW50cmFja2VkIGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlIHN1bW1hcnkiICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSB1bnRyYWNrZWQgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLmdpdC9jb25maWcgaWdub3JlPXVudHJhY2tlZCBkb2Vzbid0IHN1cHByZXNzIHN1Ym1vZHVsZSBzdW1tYXJ5IiAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgbm9uZSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIHVudHJhY2tlZCAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICItLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5IGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlIHN1bW1hcnkiICcKKwlnaXQgc3RhdHVzIC0taWdub3JlLXN1Ym1vZHVsZXM9ZGlydHkgPiBvdXRwdXQgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0IG91dHB1dAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLmdpdG1vZHVsZXMgaWdub3JlPWRpcnR5IGRvZXNuJ3Qgc3VwcHJlc3Mgc3VibW9kdWxlIHN1bW1hcnkiICcKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIuZ2l0L2NvbmZpZyBpZ25vcmU9ZGlydHkgZG9lc24ndCBzdXBwcmVzcyBzdWJtb2R1bGUgc3VtbWFyeSIgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBkaXJ0eSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3VibW9kdWxlLnN1Ym5hbWUucGF0aCBzbSAmJgorCWdpdCBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IGNvbmZpZyAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lICYmCisJZ2l0IGNvbmZpZyAtZiAuZ2l0bW9kdWxlcyAgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZQorJworCitjYXQgPiBleHBlY3QgPDwgRU9GCis7IE9uIGJyYW5jaCBtYXN0ZXIKKzsgQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6Cis7ICAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorOworOwltb2RpZmllZDogICBzbQorOworOyBDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKzsgICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCis7ICAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorOworOwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCis7CW1vZGlmaWVkOiAgIHNtIChuZXcgY29tbWl0cykKKzsKKzsgU3VibW9kdWxlIGNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorOworOyAqIHNtICRoZWFkLi4uJG5ld19oZWFkICgxKToKKzsgICA+IEFkZCBiYXIKKzsKKzsgU3VibW9kdWxlcyBjaGFuZ2VkIGJ1dCBub3QgdXBkYXRlZDoKKzsKKzsgKiBzbSAkbmV3X2hlYWQuLi4kaGVhZDIgKDEpOgorOyAgID4gMm5kIGNvbW1pdAorOworOyBVbnRyYWNrZWQgZmlsZXM6Cis7ICAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKzsKKzsJLmdpdG1vZHVsZXMKKzsJZGlyMS91bnRyYWNrZWQKKzsJZGlyMi9tb2RpZmllZAorOwlkaXIyL3VudHJhY2tlZAorOwl1bnRyYWNrZWQKKzsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJzdGF0dXMgKGNvcmUuY29tbWVudGNoYXIgd2l0aCBzdWJtb2R1bGUgc3VtbWFyeSkiICcKKwl0ZXN0X2NvbmZpZyBjb3JlLmNvbW1lbnRjaGFyICI7IiAmJgorCWdpdCAtYyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9dHJ1ZSBzdGF0dXMgPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInN0YXR1cyAoY29yZS5jb21tZW50Y2hhciB3aXRoIHR3byBjaGFycyB3aXRoIHN1Ym1vZHVsZSBzdW1tYXJ5KSIgJworCXRlc3RfY29uZmlnIGNvcmUuY29tbWVudGNoYXIgIjs7IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBzdGF0dXMuZGlzcGxheUNvbW1lbnRQcmVmaXg9dHJ1ZSBzdGF0dXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiLS1pZ25vcmUtc3VibW9kdWxlcz1hbGwgc3VwcHJlc3NlcyBzdWJtb2R1bGUgc3VtbWFyeSIgJworCWNhdCA+IGV4cGVjdCA8PCBFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKworCW1vZGlmaWVkOiAgIGRpcjEvbW9kaWZpZWQKKworVW50cmFja2VkIGZpbGVzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorCisJLmdpdG1vZHVsZXMKKwlkaXIxL3VudHJhY2tlZAorCWRpcjIvbW9kaWZpZWQKKwlkaXIyL3VudHJhY2tlZAorCXVudHJhY2tlZAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLWlnbm9yZS1zdWJtb2R1bGVzPWFsbCA+IG91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXRtb2R1bGVzIGlnbm9yZT1hbGwgc3VwcHJlc3NlcyB1bnN0YWdlZCBzdWJtb2R1bGUgc3VtbWFyeScgJworCWNhdCA+IGV4cGVjdCA8PCBFT0YgJiYKK09uIGJyYW5jaCBtYXN0ZXIKK0NoYW5nZXMgdG8gYmUgY29tbWl0dGVkOgorICAodXNlICJnaXQgcmVzZXQgSEVBRCA8ZmlsZT4uLi4iIHRvIHVuc3RhZ2UpCisKKwltb2RpZmllZDogICBzbQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisKKwltb2RpZmllZDogICBkaXIxL21vZGlmaWVkCisKK1VudHJhY2tlZCBmaWxlczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIGluY2x1ZGUgaW4gd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKworCS5naXRtb2R1bGVzCisJZGlyMS91bnRyYWNrZWQKKwlkaXIyL21vZGlmaWVkCisJZGlyMi91bnRyYWNrZWQKKwl1bnRyYWNrZWQKKworRU9GCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IHN0YXR1cyA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdCBvdXRwdXQgJiYKKwlnaXQgY29uZmlnIC1mIC5naXRtb2R1bGVzICAtLXJlbW92ZS1zZWN0aW9uIHN1Ym1vZHVsZS5zdWJuYW1lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy5naXQvY29uZmlnIGlnbm9yZT1hbGwgc3VwcHJlc3NlcyB1bnN0YWdlZCBzdWJtb2R1bGUgc3VtbWFyeScgJworCWdpdCBjb25maWcgLS1hZGQgLWYgLmdpdG1vZHVsZXMgc3VibW9kdWxlLnN1Ym5hbWUuaWdub3JlIG5vbmUgJiYKKwlnaXQgY29uZmlnIC0tYWRkIC1mIC5naXRtb2R1bGVzIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLmlnbm9yZSBhbGwgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN1Ym1vZHVsZS5zdWJuYW1lLnBhdGggc20gJiYKKwlnaXQgc3RhdHVzID4gb3V0cHV0ICYmCisJdGVzdF9jbXAgZXhwZWN0IG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgb2YgdGVzdCBlbnZpcm9ubWVudCcgJworCWdpdCBjb25maWcgc3RhdHVzLnNob3dVbnRyYWNrZWRGaWxlcyBubyAmJgorCWdpdCBzdGF0dXMgLXMgPmV4cGVjdGVkX3Nob3J0ICYmCisJZ2l0IHN0YXR1cyAtLW5vLXNob3J0ID5leHBlY3RlZF9ub3Nob3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuc2hvcnQ9dHJ1ZSIgc2FtZSBhcyAiLXMiJyAnCisJZ2l0IC1jIHN0YXR1cy5zaG9ydD10cnVlIHN0YXR1cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfc2hvcnQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuc2hvcnQ9dHJ1ZSIgd2Vha2VyIHRoYW4gIi0tbm8tc2hvcnQiJyAnCisJZ2l0IC1jIHN0YXR1cy5zaG9ydD10cnVlIHN0YXR1cyAtLW5vLXNob3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ub3Nob3J0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLnNob3J0PWZhbHNlIiBzYW1lIGFzICItLW5vLXNob3J0IicgJworCWdpdCAtYyBzdGF0dXMuc2hvcnQ9ZmFsc2Ugc3RhdHVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ub3Nob3J0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLnNob3J0PWZhbHNlIiB3ZWFrZXIgdGhhbiAiLXMiJyAnCisJZ2l0IC1jIHN0YXR1cy5zaG9ydD1mYWxzZSBzdGF0dXMgLXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX3Nob3J0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcic3RhdHVzLmJyYW5jaD10cnVlIiBzYW1lIGFzICItYiInICcKKwlnaXQgc3RhdHVzIC1zYiA+ZXhwZWN0ZWRfYnJhbmNoICYmCisJZ2l0IC1jIHN0YXR1cy5icmFuY2g9dHJ1ZSBzdGF0dXMgLXMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9dHJ1ZSIgZGlmZmVyZW50IGZyb20gIi0tbm8tYnJhbmNoIicgJworCWdpdCBzdGF0dXMgLXMgLS1uby1icmFuY2ggID5leHBlY3RlZF9ub2JyYW5jaCAmJgorCWdpdCAtYyBzdGF0dXMuYnJhbmNoPXRydWUgc3RhdHVzIC1zID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0X2NtcCBleHBlY3RlZF9ub2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9dHJ1ZSIgd2Vha2VyIHRoYW4gIi0tbm8tYnJhbmNoIicgJworCWdpdCAtYyBzdGF0dXMuYnJhbmNoPXRydWUgc3RhdHVzIC1zIC0tbm8tYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9ub2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9dHJ1ZSIgd2Vha2VyIHRoYW4gIi0tcG9yY2VsYWluIicgJworICAgICAgIGdpdCAtYyBzdGF0dXMuYnJhbmNoPXRydWUgc3RhdHVzIC0tcG9yY2VsYWluID5hY3R1YWwgJiYKKyAgICAgICB0ZXN0X2NtcCBleHBlY3RlZF9ub2JyYW5jaCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnInN0YXR1cy5icmFuY2g9ZmFsc2UiIHNhbWUgYXMgIi0tbm8tYnJhbmNoIicgJworCWdpdCAtYyBzdGF0dXMuYnJhbmNoPWZhbHNlIHN0YXR1cyAtcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfbm9icmFuY2ggYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJzdGF0dXMuYnJhbmNoPWZhbHNlIiB3ZWFrZXIgdGhhbiAiLWIiJyAnCisJZ2l0IC1jIHN0YXR1cy5icmFuY2g9ZmFsc2Ugc3RhdHVzIC1zYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfYnJhbmNoIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXN0b3JlIGRlZmF1bHQgdGVzdCBlbnZpcm9ubWVudCcgJworCWdpdCBjb25maWcgLS11bnNldCBzdGF0dXMuc2hvd1VudHJhY2tlZEZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQgd2lsbCBjb21taXQgYSBzdGFnZWQgYnV0IGlnbm9yZWQgc3VibW9kdWxlJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IGNvbmZpZyAtLWFkZCAtZiAuZ2l0bW9kdWxlcyBzdWJtb2R1bGUuc3VibmFtZS5wYXRoIHNtICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdWJtb2R1bGUuc3VibmFtZS5pZ25vcmUgYWxsICYmCisJZ2l0IHN0YXR1cyAtcyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeTS4gc20iIG91dHB1dCAmJgorCUdJVF9FRElUT1I9ImVjaG8gaGVsbG8gPj5cIlwkMVwiIiAmJgorCWV4cG9ydCBHSVRfRURJVE9SICYmCisJZ2l0IGNvbW1pdCAtdW5vICYmCisJZ2l0IHN0YXR1cyAtcyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICEgIl5NLiBzbSIgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBjb21taXQgLS1kcnktcnVuIHdpbGwgc2hvdyBhIHN0YWdlZCBidXQgaWdub3JlZCBzdWJtb2R1bGUnICcKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwlnaXQgYWRkIHNtICYmCisJY2F0ID5leHBlY3QgPDwgRU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCisJbW9kaWZpZWQ6ICAgc20KKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCisJbW9kaWZpZWQ6ICAgZGlyMS9tb2RpZmllZAorCitVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBjb21taXQgLXVubyAtLWRyeS1ydW4gPm91dHB1dCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3Qgb3V0cHV0ICYmCisJZ2l0IHN0YXR1cyAtcyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ID5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJeTS4gc20iIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgY29tbWl0IC1tIHdpbGwgY29tbWl0IGEgc3RhZ2VkIGJ1dCBpZ25vcmVkIHN1Ym1vZHVsZScgJworCWdpdCBjb21taXQgLXVubyAtbSBtZXNzYWdlICYmCisJZ2l0IHN0YXR1cyAtcyAtLWlnbm9yZS1zdWJtb2R1bGVzPWRpcnR5ID5vdXRwdXQgJiYKKwkgdGVzdF9pMThuZ3JlcCAhICJeTS4gc20iIG91dHB1dCAmJgorCWdpdCBjb25maWcgLS1yZW1vdmUtc2VjdGlvbiBzdWJtb2R1bGUuc3VibmFtZSAmJgorCWdpdCBjb25maWcgLWYgLmdpdG1vZHVsZXMgIC0tcmVtb3ZlLXNlY3Rpb24gc3VibW9kdWxlLnN1Ym5hbWUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTA5LWNvbW1pdC5zaCBiL3QvdDc1MDktY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRiOTc3NGUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTA5LWNvbW1pdC5zaApAQCAtMCwwICsxLDE3NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljayBNYXR0b3MKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGNvbW1pdCAtLXJlc2V0LWF1dGhvcicKKworLiAuL3Rlc3QtbGliLnNoCisKK2F1dGhvcl9oZWFkZXIgKCkgeworCWdpdCBjYXQtZmlsZSBjb21taXQgIiQxIiB8CisJc2VkIC1uIC1lICcvXiQvcScgLWUgJy9eYXV0aG9yIC9wJworfQorCittZXNzYWdlX2JvZHkgKCkgeworCWdpdCBjYXQtZmlsZSBjb21taXQgIiQxIiB8CisJc2VkIC1lICcxLC9eJC9kJworfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctQyBvcHRpb24gY29waWVzIGF1dGhvcnNoaXAgYW5kIG1lc3NhZ2UnICcKKwllY2hvICJJbml0aWFsIiA+Zm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJJbml0aWFsIENvbW1pdCIgLS1hdXRob3IgRnJpZ2F0ZVwgXDxmbHlpbmdAb3Zlci53b3JsZFw+ICYmCisJZ2l0IHRhZyBJbml0aWFsICYmCisJZWNobyAiVGVzdCAxIiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLUMgSW5pdGlhbCAmJgorCWF1dGhvcl9oZWFkZXIgSW5pdGlhbCA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwltZXNzYWdlX2JvZHkgSW5pdGlhbCA+ZXhwZWN0ICYmCisJbWVzc2FnZV9ib2R5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLUMgb3B0aW9uIGNvcGllcyBvbmx5IHRoZSBtZXNzYWdlIHdpdGggLS1yZXNldC1hdXRob3InICcKKwllY2hvICJUZXN0IDIiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtQyBJbml0aWFsIC0tcmVzZXQtYXV0aG9yICYmCisJZWNobyAiYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAkR0lUX0FVVEhPUl9EQVRFIiA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwltZXNzYWdlX2JvZHkgSW5pdGlhbCA+ZXhwZWN0ICYmCisJbWVzc2FnZV9ib2R5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLWMgb3B0aW9uIGNvcGllcyBhdXRob3JzaGlwIGFuZCBtZXNzYWdlJyAnCisJZWNobyAiVGVzdCAzIiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCUVESVRPUj06IFZJU1VBTD06IGdpdCBjb21taXQgLWEgLWMgSW5pdGlhbCAmJgorCWF1dGhvcl9oZWFkZXIgSW5pdGlhbCA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1jIG9wdGlvbiBjb3BpZXMgb25seSB0aGUgbWVzc2FnZSB3aXRoIC0tcmVzZXQtYXV0aG9yJyAnCisJZWNobyAiVGVzdCA0IiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCUVESVRPUj06IFZJU1VBTD06IGdpdCBjb21taXQgLWEgLWMgSW5pdGlhbCAtLXJlc2V0LWF1dGhvciAmJgorCWVjaG8gImF1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gJEdJVF9BVVRIT1JfREFURSIgPmV4cGVjdCAmJgorCWF1dGhvcl9oZWFkZXIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJbWVzc2FnZV9ib2R5IEluaXRpYWwgPmV4cGVjdCAmJgorCW1lc3NhZ2VfYm9keSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tYW1lbmQgb3B0aW9uIGNvcGllcyBhdXRob3JzaGlwJyAnCisJZ2l0IGNoZWNrb3V0IEluaXRpYWwgJiYKKwllY2hvICJUZXN0IDUiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtLWFtZW5kIC1tICJhbWVuZCB0ZXN0IiAmJgorCWF1dGhvcl9oZWFkZXIgSW5pdGlhbCA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwllY2hvICJhbWVuZCB0ZXN0IiA+ZXhwZWN0ICYmCisJbWVzc2FnZV9ib2R5IEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworc2hhMV9maWxlKCkgeworCWVjaG8gIiQqIiB8IHNlZCAicyMuLiMuZ2l0L29iamVjdHMvJi8jIgorfQorcmVtb3ZlX29iamVjdCgpIHsKKwlybSAtZiAkKHNoYTFfZmlsZSAiJCoiKQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLWFtZW5kIG9wdGlvbiB3aXRoIGVtcHR5IGF1dGhvcicgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSW5pdGlhbCA+dG1wICYmCisJc2VkICJzL2F1dGhvciBbXjxdKiA8L2F1dGhvciAgPC8iIHRtcCA+ZW1wdHktYXV0aG9yICYmCisJc2hhPSQoZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyBlbXB0eS1hdXRob3IpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJyZW1vdmVfb2JqZWN0ICRzaGEiICYmCisJZ2l0IGNoZWNrb3V0ICRzaGEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBJbml0aWFsIiAmJgorCWVjaG8gIkVtcHR5IGF1dGhvciB0ZXN0IiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjb21taXQgLWEgLW0gImVtcHR5IGF1dGhvciIgLS1hbWVuZCAyPmVyciAmJgorCWdyZXAgImVtcHR5IGlkZW50IiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnLS1hbWVuZCBvcHRpb24gd2l0aCBtaXNzaW5nIGF1dGhvcicgJworCWdpdCBjYXQtZmlsZSBjb21taXQgSW5pdGlhbCA+dG1wICYmCisJc2VkICJzL2F1dGhvciBbXjxdKiA8L2F1dGhvciA8LyIgdG1wID5tYWxmb3JtZWQgJiYKKwlzaGE9JChnaXQgaGFzaC1vYmplY3QgLXQgY29tbWl0IC13IG1hbGZvcm1lZCkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJlbW92ZV9vYmplY3QgJHNoYSIgJiYKKwlnaXQgY2hlY2tvdXQgJHNoYSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IEluaXRpYWwiICYmCisJZWNobyAiTWlzc2luZyBhdXRob3IgdGVzdCIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1hIC1tICJtYWxmb3JtZWQgYXV0aG9yIiAtLWFtZW5kIDI+ZXJyICYmCisJZ3JlcCAiZW1wdHkgaWRlbnQiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlc2V0LWF1dGhvciBtYWtlcyB0aGUgY29tbWl0IG91cnMgZXZlbiB3aXRoIC0tYW1lbmQgb3B0aW9uJyAnCisJZ2l0IGNoZWNrb3V0IEluaXRpYWwgJiYKKwllY2hvICJUZXN0IDYiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtLXJlc2V0LWF1dGhvciAtbSAiQ2hhbmdlZCBhZ2FpbiIgLS1hbWVuZCAmJgorCWVjaG8gImF1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gJEdJVF9BVVRIT1JfREFURSIgPmV4cGVjdCAmJgorCWF1dGhvcl9oZWFkZXIgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJZWNobyAiQ2hhbmdlZCBhZ2FpbiIgPmV4cGVjdCAmJgorCW1lc3NhZ2VfYm9keSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVzZXQtYXV0aG9yIGFuZCAtLWF1dGhvciBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlJyAnCisJZ2l0IGNoZWNrb3V0IEluaXRpYWwgJiYKKwllY2hvICJUZXN0IDciID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNvbW1pdCAtYSAtLXJlc2V0LWF1dGhvciAtLWF1dGhvcj0iWHl6enkgPGZyb3R6QG5pdGZvbC54ej4iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy0tcmVzZXQtYXV0aG9yIHNob3VsZCBiZSByZWplY3RlZCB3aXRob3V0IC1jLy1DLy0tYW1lbmQnICcKKwlnaXQgY2hlY2tvdXQgSW5pdGlhbCAmJgorCWVjaG8gIlRlc3QgNyIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY29tbWl0IC1hIC0tcmVzZXQtYXV0aG9yIC1tIGRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IHJlc3BlY3RzIENIRVJSWV9QSUNLX0hFQUQgYW5kIE1FUkdFX01TRycgJworCWVjaG8gImNoZXJyeS1waWNrIDFhIiA+PmZvbyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWFtICJjaGVycnktcGljayAxIiAtLWF1dGhvcj0iQ2hlcnJ5IDxjaGVycnlAcGljay5lcj4iICYmCisJZ2l0IHRhZyBjaGVycnktcGljay1oZWFkICYmCisJZ2l0IHJldi1wYXJzZSBjaGVycnktcGljay1oZWFkID4uZ2l0L0NIRVJSWV9QSUNLX0hFQUQgJiYKKwllY2hvICJUaGlzIGlzIGEgTUVSR0VfTVNHIiA+LmdpdC9NRVJHRV9NU0cgJiYKKwllY2hvICJjaGVycnktcGljayAxYiIgPj5mb28gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hICYmCisJYXV0aG9yX2hlYWRlciBjaGVycnktcGljay1oZWFkID5leHBlY3QgJiYKKwlhdXRob3JfaGVhZGVyIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCWVjaG8gIlRoaXMgaXMgYSBNRVJHRV9NU0ciID5leHBlY3QgJiYKKwltZXNzYWdlX2JvZHkgSEVBRCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXJlc2V0LWF1dGhvciB3aXRoIENIRVJSWV9QSUNLX0hFQUQnICcKKwlnaXQgcmV2LXBhcnNlIGNoZXJyeS1waWNrLWhlYWQgPi5naXQvQ0hFUlJZX1BJQ0tfSEVBRCAmJgorCWVjaG8gImNoZXJyeS1waWNrIDIiID4+Zm9vICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYW0gImNoZXJyeS1waWNrIDIiIC0tcmVzZXQtYXV0aG9yICYmCisJZWNobyAiYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiAkR0lUX0FVVEhPUl9EQVRFIiA+ZXhwZWN0ICYmCisJYXV0aG9yX2hlYWRlciBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxMC1zaWduZWQtY29tbWl0LnNoIGIvdC90NzUxMC1zaWduZWQtY29tbWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE4ZTVjZjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTEwLXNpZ25lZC1jb21taXQuc2gKQEAgLTAsMCArMSwyMDYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdzaWduZWQgY29tbWl0IHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLWdwZy5zaCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2NyZWF0ZSBzaWduZWQgY29tbWl0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAidGVzdF91bmNvbmZpZyBjb21taXQuZ3Bnc2lnbiIgJiYKKworCWVjaG8gMSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtUyAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBzaWRlICYmCisKKwllY2hvIDIgPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLVMgLW0gc2Vjb25kICYmCisJZ2l0IHRhZyBzZWNvbmQgJiYKKworCWdpdCBjaGVja291dCBzaWRlICYmCisJZWNobyAzID5lbGlmICYmIGdpdCBhZGQgZWxpZiAmJgorCXRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1tICJ0aGlyZCBvbiBzaWRlIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfdGljayAmJiBnaXQgbWVyZ2UgLVMgc2lkZSAmJgorCWdpdCB0YWcgbWVyZ2UgJiYKKworCWVjaG8gNCA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSAiZm91cnRoIHVuc2lnbmVkIiAmJgorCWdpdCB0YWcgZm91cnRoLXVuc2lnbmVkICYmCisKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtLWFtZW5kIC1TIC1tICJmb3VydGggc2lnbmVkIiAmJgorCWdpdCB0YWcgZm91cnRoLXNpZ25lZCAmJgorCisJZ2l0IGNvbmZpZyBjb21taXQuZ3Bnc2lnbiB0cnVlICYmCisJZWNobyA1ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tICJmaWZ0aCBzaWduZWQiICYmCisJZ2l0IHRhZyBmaWZ0aC1zaWduZWQgJiYKKworCWdpdCBjb25maWcgY29tbWl0LmdwZ3NpZ24gZmFsc2UgJiYKKwllY2hvIDYgPmZpbGUgJiYgdGVzdF90aWNrICYmIGdpdCBjb21taXQgLWEgLW0gInNpeHRoIiAmJgorCWdpdCB0YWcgc2l4dGgtdW5zaWduZWQgJiYKKworCWdpdCBjb25maWcgY29tbWl0LmdwZ3NpZ24gdHJ1ZSAmJgorCWVjaG8gNyA+ZmlsZSAmJiB0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtYSAtbSAic2V2ZW50aCIgLS1uby1ncGctc2lnbiAmJgorCWdpdCB0YWcgc2V2ZW50aC11bnNpZ25lZCAmJgorCisJdGVzdF90aWNrICYmIGdpdCByZWJhc2UgLWYgSEVBRF5eICYmIGdpdCB0YWcgc2l4dGgtc2lnbmVkIEhFQUReICYmCisJZ2l0IHRhZyBzZXZlbnRoLXNpZ25lZCAmJgorCisJZWNobyA4ID5maWxlICYmIHRlc3RfdGljayAmJiBnaXQgY29tbWl0IC1hIC1tIGVpZ2h0aCAtU0I3MjI3MTg5ICYmCisJZ2l0IHRhZyBlaWdodGgtc2lnbmVkLWFsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5IGFuZCBzaG93IHNpZ25hdHVyZXMnICcKKwkoCisJCWZvciBjb21taXQgaW4gaW5pdGlhbCBzZWNvbmQgbWVyZ2UgZm91cnRoLXNpZ25lZCBmaWZ0aC1zaWduZWQgc2l4dGgtc2lnbmVkIHNldmVudGgtc2lnbmVkCisJCWRvCisJCQlnaXQgdmVyaWZ5LWNvbW1pdCAkY29tbWl0ICYmCisJCQlnaXQgc2hvdyAtLXByZXR0eT1zaG9ydCAtLXNob3ctc2lnbmF0dXJlICRjb21taXQgPmFjdHVhbCAmJgorCQkJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJCQllY2hvICRjb21taXQgT0sgfHwgZXhpdCAxCisJCWRvbmUKKwkpICYmCisJKAorCQlmb3IgY29tbWl0IGluIG1lcmdlXjIgZm91cnRoLXVuc2lnbmVkIHNpeHRoLXVuc2lnbmVkIHNldmVudGgtdW5zaWduZWQKKwkJZG8KKwkJCXRlc3RfbXVzdF9mYWlsIGdpdCB2ZXJpZnktY29tbWl0ICRjb21taXQgJiYKKwkJCWdpdCBzaG93IC0tcHJldHR5PXNob3J0IC0tc2hvdy1zaWduYXR1cmUgJGNvbW1pdCA+YWN0dWFsICYmCisJCQkhIGdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJZWNobyAkY29tbWl0IE9LIHx8IGV4aXQgMQorCQlkb25lCisJKSAmJgorCSgKKwkJZm9yIGNvbW1pdCBpbiBlaWdodGgtc2lnbmVkLWFsdAorCQlkbworCQkJZ2l0IHNob3cgLS1wcmV0dHk9c2hvcnQgLS1zaG93LXNpZ25hdHVyZSAkY29tbWl0ID5hY3R1YWwgJiYKKwkJCWdyZXAgIkdvb2Qgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCQkJZ3JlcCAibm90IGNlcnRpZmllZCIgYWN0dWFsICYmCisJCQllY2hvICRjb21taXQgT0sgfHwgZXhpdCAxCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICd2ZXJpZnktY29tbWl0IGV4aXRzIHN1Y2Nlc3Mgb24gdW50cnVzdGVkIHNpZ25hdHVyZScgJworCWdpdCB2ZXJpZnktY29tbWl0IGVpZ2h0aC1zaWduZWQtYWx0IDI+YWN0dWFsICYmCisJZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsICYmCisJISBncmVwICJCQUQgc2lnbmF0dXJlIGZyb20iIGFjdHVhbCAmJgorCWdyZXAgIm5vdCBjZXJ0aWZpZWQiIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAndmVyaWZ5IHNpZ25hdHVyZXMgd2l0aCAtLXJhdycgJworCSgKKwkJZm9yIGNvbW1pdCBpbiBpbml0aWFsIHNlY29uZCBtZXJnZSBmb3VydGgtc2lnbmVkIGZpZnRoLXNpZ25lZCBzaXh0aC1zaWduZWQgc2V2ZW50aC1zaWduZWQKKwkJZG8KKwkJCWdpdCB2ZXJpZnktY29tbWl0IC0tcmF3ICRjb21taXQgMj5hY3R1YWwgJiYKKwkJCWdyZXAgIkdPT0RTSUciIGFjdHVhbCAmJgorCQkJISBncmVwICJCQURTSUciIGFjdHVhbCAmJgorCQkJZWNobyAkY29tbWl0IE9LIHx8IGV4aXQgMQorCQlkb25lCisJKSAmJgorCSgKKwkJZm9yIGNvbW1pdCBpbiBtZXJnZV4yIGZvdXJ0aC11bnNpZ25lZCBzaXh0aC11bnNpZ25lZCBzZXZlbnRoLXVuc2lnbmVkCisJCWRvCisJCQl0ZXN0X211c3RfZmFpbCBnaXQgdmVyaWZ5LWNvbW1pdCAtLXJhdyAkY29tbWl0IDI+YWN0dWFsICYmCisJCQkhIGdyZXAgIkdPT0RTSUciIGFjdHVhbCAmJgorCQkJISBncmVwICJCQURTSUciIGFjdHVhbCAmJgorCQkJZWNobyAkY29tbWl0IE9LIHx8IGV4aXQgMQorCQlkb25lCisJKSAmJgorCSgKKwkJZm9yIGNvbW1pdCBpbiBlaWdodGgtc2lnbmVkLWFsdAorCQlkbworCQkJZ2l0IHZlcmlmeS1jb21taXQgLS1yYXcgJGNvbW1pdCAyPmFjdHVhbCAmJgorCQkJZ3JlcCAiR09PRFNJRyIgYWN0dWFsICYmCisJCQkhIGdyZXAgIkJBRFNJRyIgYWN0dWFsICYmCisJCQlncmVwICJUUlVTVF9VTkRFRklORUQiIGFjdHVhbCAmJgorCQkJZWNobyAkY29tbWl0IE9LIHx8IGV4aXQgMQorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnc2hvdyBzaWduZWQgY29tbWl0IHdpdGggc2lnbmF0dXJlJyAnCisJZ2l0IHNob3cgLXMgaW5pdGlhbCA+Y29tbWl0ICYmCisJZ2l0IHNob3cgLXMgLS1zaG93LXNpZ25hdHVyZSBpbml0aWFsID5zaG93ICYmCisJZ2l0IHZlcmlmeS1jb21taXQgLXYgaW5pdGlhbCA+dmVyaWZ5LjEgMj52ZXJpZnkuMiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgaW5pdGlhbCA+Y2F0ICYmCisJZ3JlcCAtdiAtZSAiZ3BnOiAiIC1lICJXYXJuaW5nOiAiIHNob3cgPnNob3cuY29tbWl0ICYmCisJZ3JlcCAtZSAiZ3BnOiAiIC1lICJXYXJuaW5nOiAiIHNob3cgPnNob3cuZ3BnICYmCisJZ3JlcCAtdiAiXiAiIGNhdCB8IGdyZXAgLXYgIl5ncGdzaWcgIiA+Y2F0LmNvbW1pdCAmJgorCXRlc3RfY21wIHNob3cuY29tbWl0IGNvbW1pdCAmJgorCXRlc3RfY21wIHNob3cuZ3BnIHZlcmlmeS4yICYmCisJdGVzdF9jbXAgY2F0LmNvbW1pdCB2ZXJpZnkuMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnZGV0ZWN0IGZ1ZGdlZCBzaWduYXR1cmUnICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHNldmVudGgtc2lnbmVkID5yYXcgJiYKKworCXNlZCAtZSAicy9zZXZlbnRoLzd0aCBmb3JnZWQvIiByYXcgPmZvcmdlZDEgJiYKKwlnaXQgaGFzaC1vYmplY3QgLXcgLXQgY29tbWl0IGZvcmdlZDEgPmZvcmdlZDEuY29tbWl0ICYmCisJISBnaXQgdmVyaWZ5LWNvbW1pdCAkKGNhdCBmb3JnZWQxLmNvbW1pdCkgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT1zaG9ydCAtLXNob3ctc2lnbmF0dXJlICQoY2F0IGZvcmdlZDEuY29tbWl0KSA+YWN0dWFsMSAmJgorCWdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsMSAmJgorCSEgZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnZGV0ZWN0IGZ1ZGdlZCBzaWduYXR1cmUgd2l0aCBOVUwnICcKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHNldmVudGgtc2lnbmVkID5yYXcgJiYKKwljYXQgcmF3ID5mb3JnZWQyICYmCisJZWNobyBRd2lrIHwgdHIgIlEiICJcMDAwIiA+PmZvcmdlZDIgJiYKKwlnaXQgaGFzaC1vYmplY3QgLXcgLXQgY29tbWl0IGZvcmdlZDIgPmZvcmdlZDIuY29tbWl0ICYmCisJISBnaXQgdmVyaWZ5LWNvbW1pdCAkKGNhdCBmb3JnZWQyLmNvbW1pdCkgJiYKKwlnaXQgc2hvdyAtLXByZXR0eT1zaG9ydCAtLXNob3ctc2lnbmF0dXJlICQoY2F0IGZvcmdlZDIuY29tbWl0KSA+YWN0dWFsMiAmJgorCWdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsMiAmJgorCSEgZ3JlcCAiR29vZCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnYW1lbmRpbmcgYWxyZWFkeSBzaWduZWQgY29tbWl0JyAnCisJZ2l0IGNoZWNrb3V0IGZvdXJ0aC1zaWduZWReMCAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtUyAtLW5vLWVkaXQgJiYKKwlnaXQgdmVyaWZ5LWNvbW1pdCBIRUFEICYmCisJZ2l0IHNob3cgLXMgLS1zaG93LXNpZ25hdHVyZSBIRUFEID5hY3R1YWwgJiYKKwlncmVwICJHb29kIHNpZ25hdHVyZSBmcm9tIiBhY3R1YWwgJiYKKwkhIGdyZXAgIkJBRCBzaWduYXR1cmUgZnJvbSIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaG93IGdvb2Qgc2lnbmF0dXJlIHdpdGggY3VzdG9tIGZvcm1hdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlHCisJMTNCNkY1MUVDRERFNDMwRAorCUMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KKwlFT0YKKwlnaXQgbG9nIC0xIC0tZm9ybWF0PSIlRz8lbiVHSyVuJUdTIiBzaXh0aC1zaWduZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ3Nob3cgYmFkIHNpZ25hdHVyZSB3aXRoIGN1c3RvbSBmb3JtYXQnICcKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJQgorCTEzQjZGNTFFQ0RERTQzMEQKKwlDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJUc/JW4lR0slbiVHUyIgJChjYXQgZm9yZ2VkMS5jb21taXQpID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaG93IHVua25vd24gc2lnbmF0dXJlIHdpdGggY3VzdG9tIGZvcm1hdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlVCisJNjEwOTJFODVCNzIyNzE4OQorCUVyaXMgRGlzY29yZGlhIDxkaXNjb3JkQGV4YW1wbGUubmV0PgorCUVPRgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVHPyVuJUdLJW4lR1MiIGVpZ2h0aC1zaWduZWQtYWx0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdzaG93IGxhY2sgb2Ygc2lnbmF0dXJlIHdpdGggY3VzdG9tIGZvcm1hdCcgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlOCisKKworCUVPRgorCWdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVHPyVuJUdLJW4lR1MiIHNldmVudGgtdW5zaWduZWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTExLXN0YXR1cy1pbmRleC5zaCBiL3QvdDc1MTEtc3RhdHVzLWluZGV4LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1ZmRjMDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTExLXN0YXR1cy1pbmRleC5zaApAQCAtMCwwICsxLDUwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN0YXR1cyB3aXRoIGNlcnRhaW4gZmlsZSBuYW1lIGxlbmd0aHMnCisKKy4gLi90ZXN0LWxpYi5zaAorCitmaWxlcz0iMCAxIDIgMyA0IDUgNiA3IDggOSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHoiCisKK2NoZWNrKCkgeworCWxlbj0kMQorCXByZWZpeD0kMgorCisJZm9yIGkgaW4gJGZpbGVzCisJZG8KKwkJOiA+JHByZWZpeCRpCisJZG9uZQorCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAic3RhdHVzLCBmaWxlbmFtZSBsZW5ndGggJGxlbiIgIgorCQlnaXQgYWRkICRwcmVmaXgqICYmCisJCWdpdCBzdGF0dXMKKwkiCisJcm0gJHByZWZpeCogLmdpdC9pbmRleAorfQorCitjaGVjayAgMQorY2hlY2sgIDIgcAorY2hlY2sgIDMgcHgKK2NoZWNrICA0IHByZQorY2hlY2sgIDUgcHJlZgorY2hlY2sgIDYgcHJlZmkKK2NoZWNrICA3IHByZWZpeAorY2hlY2sgIDggcHJlZml4LQorY2hlY2sgIDkgcHJlZml4LXAKK2NoZWNrIDEwIHByZWZpeC1wcgorY2hlY2sgMTEgcHJlZml4LXByZQorY2hlY2sgMTIgcHJlZml4LXByZWYKK2NoZWNrIDEzIHByZWZpeC1wcmVmaQorY2hlY2sgMTQgcHJlZml4LXByZWZpeAorY2hlY2sgMTUgcHJlZml4LXByZWZpeC0KK2NoZWNrIDE2IHByZWZpeC1wcmVmaXgtcAorY2hlY2sgMTcgcHJlZml4LXByZWZpeC1wcgorY2hlY2sgMTggcHJlZml4LXByZWZpeC1wcmUKK2NoZWNrIDE5IHByZWZpeC1wcmVmaXgtcHJlZgorY2hlY2sgMjAgcHJlZml4LXByZWZpeC1wcmVmaQorY2hlY2sgMjEgcHJlZml4LXByZWZpeC1wcmVmaXgKK2NoZWNrIDIyIHByZWZpeC1wcmVmaXgtcHJlZml4LQorY2hlY2sgMjMgcHJlZml4LXByZWZpeC1wcmVmaXgtcAorY2hlY2sgMjQgcHJlZml4LXByZWZpeC1wcmVmaXgtcHIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTEyLXN0YXR1cy1oZWxwLnNoIGIvdC90NzUxMi1zdGF0dXMtaGVscC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OWQxOWEzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxMi1zdGF0dXMtaGVscC5zaApAQCAtMCwwICsxLDk0NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBWYWxlbnRpbiBEdXBlcnJheSwgTHVjaWVuIEtvbmcsIEZyYW5jayBKb25hcywKKyMJCSAgICAgVGhvbWFzIE5ndXksIEtob2kgTmd1eWVuCisjCQkgICAgIEdyZW5vYmxlIElOUCBFbnNpbWFnCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdGF0dXMgYWR2aWNlJworCisuIC4vdGVzdC1saWIuc2gKKworLiAiJFRFU1RfRElSRUNUT1JZIi9saWItcmViYXNlLnNoCisKK3NldF9mYWtlX2VkaXRvcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZvciBjb25mbGljdHMnICcKKwlnaXQgY29uZmlnIC0tZ2xvYmFsIGFkdmljZS5zdGF0dXN1b3B0aW9uIGZhbHNlICYmCisJdGVzdF9jb21taXQgaW5pdCBtYWluLnR4dCBpbml0ICYmCisJZ2l0IGJyYW5jaCBjb25mbGljdHMgJiYKKwl0ZXN0X2NvbW1pdCBvbl9tYXN0ZXIgbWFpbi50eHQgb25fbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IGNvbmZsaWN0cyAmJgorCXRlc3RfY29tbWl0IG9uX2NvbmZsaWN0cyBtYWluLnR4dCBvbl9jb25mbGljdHMKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjb25mbGljdHMgdW5yZXNvbHZlZCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIGNvbmZsaWN0cworWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuCisgIChmaXggY29uZmxpY3RzIGFuZCBydW4gImdpdCBjb21taXQiKQorCitVbm1lcmdlZCBwYXRoczoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIG1hcmsgcmVzb2x1dGlvbikKKworCWJvdGggbW9kaWZpZWQ6ICAgbWFpbi50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjb25mbGljdHMgcmVzb2x2ZWQgYmVmb3JlIGNvbW1pdCcgJworCWdpdCByZXNldCAtLWhhcmQgY29uZmxpY3RzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCWVjaG8gb25lID5tYWluLnR4dCAmJgorCWdpdCBhZGQgbWFpbi50eHQgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIGNvbmZsaWN0cworQWxsIGNvbmZsaWN0cyBmaXhlZCBidXQgeW91IGFyZSBzdGlsbCBtZXJnaW5nLgorICAodXNlICJnaXQgY29tbWl0IiB0byBjb25jbHVkZSBtZXJnZSkKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisKKwltb2RpZmllZDogICBtYWluLnR4dAorCitVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZvciByZWJhc2UgY29uZmxpY3RzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgcmViYXNlX2NvbmZsaWN0cyAmJgorCXRlc3RfY29tbWl0IG9uZV9yZWJhc2UgbWFpbi50eHQgb25lICYmCisJdGVzdF9jb21taXQgdHdvX3JlYmFzZSBtYWluLnR4dCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9yZWJhc2UgbWFpbi50eHQgdGhyZWUKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiByZWJhc2UgaW4gcHJvZ3Jlc3MgYmVmb3JlIHJlc29sdmluZyBjb25mbGljdHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReXikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIEhFQUReIC0tb250byBIRUFEXl4gJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCityZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK1lvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnXCcncmViYXNlX2NvbmZsaWN0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorICAodXNlICJnaXQgcmViYXNlIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgcmViYXNlIC0tYWJvcnQiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKQorCitVbm1lcmdlZCBwYXRoczoKKyAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQorCisJYm90aCBtb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIHJlYmFzZSBpbiBwcm9ncmVzcyBiZWZvcmUgcmViYXNlIC0tY29udGludWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHJlYmFzZV9jb25mbGljdHMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUReXikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIEhFQUReIC0tb250byBIRUFEXl4gJiYKKwllY2hvIHRocmVlID5tYWluLnR4dCAmJgorCWdpdCBhZGQgbWFpbi50eHQgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCityZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK1lvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnXCcncmViYXNlX2NvbmZsaWN0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKworCW1vZGlmaWVkOiAgIG1haW4udHh0CisKK1VudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIHJlYmFzZV9pX2NvbmZsaWN0cycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZV9pX2NvbmZsaWN0cyAmJgorCXRlc3RfY29tbWl0IG9uZV91bm1lcmdlIG1haW4udHh0IG9uZV91bm1lcmdlICYmCisJZ2l0IGJyYW5jaCByZWJhc2VfaV9jb25mbGljdHNfc2Vjb25kICYmCisJdGVzdF9jb21taXQgb25lX21hc3RlciBtYWluLnR4dCBvbmVfbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IHJlYmFzZV9pX2NvbmZsaWN0c19zZWNvbmQgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfc2Vjb25kIG1haW4udHh0IG9uZV9zZWNvbmQKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgZHVyaW5nIHJlYmFzZSAtaSB3aGVuIGNvbmZsaWN0cyB1bnJlc29sdmVkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWJhc2VfaV9jb25mbGljdHMpICYmCisJTEFTVF9DT01NSVQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmViYXNlX2lfY29uZmxpY3RzX3NlY29uZCkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIHJlYmFzZV9pX2NvbmZsaWN0cyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kIGRvbmUgKDEgY29tbWFuZCBkb25lKToKKyAgIHBpY2sgJExBU1RfQ09NTUlUIG9uZV9zZWNvbmQKK05vIGNvbW1hbmRzIHJlbWFpbmluZy4KK1lvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnXCcncmViYXNlX2lfY29uZmxpY3RzX3NlY29uZCdcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorICAodXNlICJnaXQgcmViYXNlIC0tc2tpcCIgdG8gc2tpcCB0aGlzIHBhdGNoKQorICAodXNlICJnaXQgcmViYXNlIC0tYWJvcnQiIHRvIGNoZWNrIG91dCB0aGUgb3JpZ2luYWwgYnJhbmNoKQorCitVbm1lcmdlZCBwYXRoczoKKyAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQorCisJYm90aCBtb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBkdXJpbmcgcmViYXNlIC1pIGFmdGVyIHJlc29sdmluZyBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHJlYmFzZV9pX2NvbmZsaWN0c19zZWNvbmQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHJlYmFzZV9pX2NvbmZsaWN0cykgJiYKKwlMQVNUX0NPTU1JVD0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCByZWJhc2VfaV9jb25mbGljdHNfc2Vjb25kKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgLWkgcmViYXNlX2lfY29uZmxpY3RzICYmCisJZ2l0IGFkZCBtYWluLnR4dCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kIGRvbmUgKDEgY29tbWFuZCBkb25lKToKKyAgIHBpY2sgJExBU1RfQ09NTUlUIG9uZV9zZWNvbmQKK05vIGNvbW1hbmRzIHJlbWFpbmluZy4KK1lvdSBhcmUgY3VycmVudGx5IHJlYmFzaW5nIGJyYW5jaCAnXCcncmViYXNlX2lfY29uZmxpY3RzX3NlY29uZCdcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKGFsbCBjb25mbGljdHMgZml4ZWQ6IHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKworCW1vZGlmaWVkOiAgIG1haW4udHh0CisKK1VudHJhY2tlZCBmaWxlcyBub3QgbGlzdGVkICh1c2UgLXUgb3B0aW9uIHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIHJlYmFzaW5nIC1pIGluIGVkaXQgbW9kZScgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIHJlYmFzZV9pX2VkaXQgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfcmViYXNlX2kgbWFpbi50eHQgb25lICYmCisJdGVzdF9jb21taXQgdHdvX3JlYmFzZV9pIG1haW4udHh0IHR3byAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmViYXNlX2lfZWRpdCkgJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9yZWJhc2VfaSBtYWluLnR4dCB0aHJlZSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgcmViYXNlX2lfZWRpdCkgJiYKKwlGQUtFX0xJTkVTPSIxIGVkaXQgMiIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4yKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4yICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBwaWNrICRDT01NSVQyIHR3b19yZWJhc2VfaQorICAgZWRpdCAkQ09NTUlUMyB0aHJlZV9yZWJhc2VfaQorTm8gY29tbWFuZHMgcmVtYWluaW5nLgorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3JlYmFzZV9pX2VkaXQnXCcnIG9uICdcJyckT05UTydcJycuCisgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gc3BsaXR0aW5nIGEgY29tbWl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc3BsaXRfY29tbWl0ICYmCisJdGVzdF9jb21taXQgb25lX3NwbGl0IG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19zcGxpdCBtYWluLnR4dCB0d28gJiYKKwlDT01NSVQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNwbGl0X2NvbW1pdCkgJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9zcGxpdCBtYWluLnR4dCB0aHJlZSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc3BsaXRfY29tbWl0KSAmJgorCXRlc3RfY29tbWl0IGZvdXJfc3BsaXQgbWFpbi50eHQgZm91ciAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc3BsaXRfY29tbWl0KSAmJgorCUZBS0VfTElORVM9IjEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgyIGNvbW1hbmRzIGRvbmUpOgorICAgcGljayAkQ09NTUlUMiB0d29fc3BsaXQKKyAgIGVkaXQgJENPTU1JVDMgdGhyZWVfc3BsaXQKK05leHQgY29tbWFuZCB0byBkbyAoMSByZW1haW5pbmcgY29tbWFuZCk6CisgICBwaWNrICRDT01NSVQ0IGZvdXJfc3BsaXQKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NwbGl0X2NvbW1pdCdcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuICJnaXQgcmViYXNlIC0tY29udGludWUiKQorCitDaGFuZ2VzIG5vdCBzdGFnZWQgZm9yIGNvbW1pdDoKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKQorICAodXNlICJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uIiB0byBkaXNjYXJkIGNoYW5nZXMgaW4gd29ya2luZyBkaXJlY3RvcnkpCisKKwltb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyBhZnRlciBlZGl0aW5nIHRoZSBsYXN0IGNvbW1pdCB3aXRoIC0tYW1lbmQgZHVyaW5nIGEgcmViYXNlIC1pJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYW1lbmRfbGFzdCAmJgorCXRlc3RfY29tbWl0IG9uZV9hbWVuZCBtYWluLnR4dCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d29fYW1lbmQgbWFpbi50eHQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWVfYW1lbmQgbWFpbi50eHQgdGhyZWUgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IGFtZW5kX2xhc3QpICYmCisJdGVzdF9jb21taXQgZm91cl9hbWVuZCBtYWluLnR4dCBmb3VyICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBhbWVuZF9sYXN0KSAmJgorCUZBS0VfTElORVM9IjEgMiBlZGl0IDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZm9vIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgzIGNvbW1hbmRzIGRvbmUpOgorICAgcGljayAkQ09NTUlUMyB0aHJlZV9hbWVuZAorICAgZWRpdCAkQ09NTUlUNCBmb3VyX2FtZW5kCisgIChzZWUgbW9yZSBpbiBmaWxlIC5naXQvcmViYXNlLW1lcmdlL2RvbmUpCitObyBjb21tYW5kcyByZW1haW5pbmcuCitZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnYW1lbmRfbGFzdCdcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGZvciBzZXZlcmFsIGVkaXRzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc2V2ZXJhbF9lZGl0cyAmJgorCXRlc3RfY29tbWl0IG9uZV9lZGl0cyBtYWluLnR4dCBvbmUgJiYKKwl0ZXN0X2NvbW1pdCB0d29fZWRpdHMgbWFpbi50eHQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWVfZWRpdHMgbWFpbi50eHQgdGhyZWUgJiYKKwl0ZXN0X2NvbW1pdCBmb3VyX2VkaXRzIG1haW4udHh0IGZvdXIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChjb250aW51ZSBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCcgJworCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c15eKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c14pICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzKSAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IHJlYmFzZSAtLWNvbnRpbnVlICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBlZGl0ICRDT01NSVQyIHR3b19lZGl0cworICAgZWRpdCAkQ09NTUlUMyB0aHJlZV9lZGl0cworTmV4dCBjb21tYW5kIHRvIGRvICgxIHJlbWFpbmluZyBjb21tYW5kKToKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9lZGl0cworICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfZWRpdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiAoY29udGludWUgZmlyc3QgZWRpdCkgc2Vjb25kIGVkaXQgYW5kIHNwbGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzZXZlcmFsX2VkaXRzICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXl4pICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXikgJiYKKwlDT01NSVQ0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHMpICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIGVkaXQgJENPTU1JVDIgdHdvX2VkaXRzCisgICBlZGl0ICRDT01NSVQzIHRocmVlX2VkaXRzCitOZXh0IGNvbW1hbmQgdG8gZG8gKDEgcmVtYWluaW5nIGNvbW1hbmQpOgorICAgcGljayAkQ09NTUlUNCBmb3VyX2VkaXRzCisgICh1c2UgImdpdCByZWJhc2UgLS1lZGl0LXRvZG8iIHRvIHZpZXcgYW5kIGVkaXQpCitZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKworCW1vZGlmaWVkOiAgIG1haW4udHh0CisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiAoY29udGludWUgZmlyc3QgZWRpdCkgc2Vjb25kIGVkaXQgYW5kIGFtZW5kJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzZXZlcmFsX2VkaXRzICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXl4pICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXikgJiYKKwlDT01NSVQ0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHMpICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImZvbyIgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIGVkaXQgJENPTU1JVDIgdHdvX2VkaXRzCisgICBlZGl0ICRDT01NSVQzIHRocmVlX2VkaXRzCitOZXh0IGNvbW1hbmQgdG8gZG8gKDEgcmVtYWluaW5nIGNvbW1hbmQpOgorICAgcGljayAkQ09NTUlUNCBmb3VyX2VkaXRzCisgICh1c2UgImdpdCByZWJhc2UgLS1lZGl0LXRvZG8iIHRvIHZpZXcgYW5kIGVkaXQpCitZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChhbWVuZCBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCcgJworCWdpdCByZXNldCAtLWhhcmQgc2V2ZXJhbF9lZGl0cyAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c15eKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c14pICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzKSAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJhIiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgyIGNvbW1hbmRzIGRvbmUpOgorICAgZWRpdCAkQ09NTUlUMiB0d29fZWRpdHMKKyAgIGVkaXQgJENPTU1JVDMgdGhyZWVfZWRpdHMKK05leHQgY29tbWFuZCB0byBkbyAoMSByZW1haW5pbmcgY29tbWFuZCk6CisgICBwaWNrICRDT01NSVQ0IGZvdXJfZWRpdHMKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKGFtZW5kIGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0IGFuZCBzcGxpdCcgJworCWdpdCByZXNldCAtLWhhcmQgc2V2ZXJhbF9lZGl0cyAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c15eKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c14pICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJiIiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgyIGNvbW1hbmRzIGRvbmUpOgorICAgZWRpdCAkQ09NTUlUMiB0d29fZWRpdHMKKyAgIGVkaXQgJENPTU1JVDMgdGhyZWVfZWRpdHMKK05leHQgY29tbWFuZCB0byBkbyAoMSByZW1haW5pbmcgY29tbWFuZCk6CisgICBwaWNrICRDT01NSVQ0IGZvdXJfZWRpdHMKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfZWRpdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgIChPbmNlIHlvdXIgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4sIHJ1biAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIikKKworQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6CisgICh1c2UgImdpdCBhZGQgPGZpbGU+Li4uIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkKKyAgKHVzZSAiZ2l0IGNoZWNrb3V0IC0tIDxmaWxlPi4uLiIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KQorCisJbW9kaWZpZWQ6ICAgbWFpbi50eHQKKworbm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgKHVzZSAiZ2l0IGFkZCIgYW5kL29yICJnaXQgY29tbWl0IC1hIikKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IChhbWVuZCBmaXJzdCBlZGl0KSBzZWNvbmQgZWRpdCBhbmQgYW1lbmQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNldmVyYWxfZWRpdHMgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlDT01NSVQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeXikgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeKSAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0cykgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiYyIgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgY29tbWl0IC0tYW1lbmQgLW0gImQiICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgoraW50ZXJhY3RpdmUgcmViYXNlIGluIHByb2dyZXNzOyBvbnRvICRPTlRPCitMYXN0IGNvbW1hbmRzIGRvbmUgKDIgY29tbWFuZHMgZG9uZSk6CisgICBlZGl0ICRDT01NSVQyIHR3b19lZGl0cworICAgZWRpdCAkQ09NTUlUMyB0aHJlZV9lZGl0cworTmV4dCBjb21tYW5kIHRvIGRvICgxIHJlbWFpbmluZyBjb21tYW5kKToKKyAgIHBpY2sgJENPTU1JVDQgZm91cl9lZGl0cworICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfZWRpdHMnXCcnIG9uICdcJyckT05UTydcJycuCisgICh1c2UgImdpdCBjb21taXQgLS1hbWVuZCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KQorICAodXNlICJnaXQgcmViYXNlIC0tY29udGludWUiIG9uY2UgeW91IGFyZSBzYXRpc2ZpZWQgd2l0aCB5b3VyIGNoYW5nZXMpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiAoc3BsaXQgZmlyc3QgZWRpdCkgc2Vjb25kIGVkaXQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIHNldmVyYWxfZWRpdHMgJiYKKwlGQUtFX0xJTkVTPSJlZGl0IDEgZWRpdCAyIDMiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlDT01NSVQyPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeXikgJiYKKwlDT01NSVQzPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHNeKSAmJgorCUNPTU1JVDQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0cykgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwlnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWdpdCBhZGQgbWFpbi50eHQgJiYKKwlnaXQgY29tbWl0IC1tICJlIiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kcyBkb25lICgyIGNvbW1hbmRzIGRvbmUpOgorICAgZWRpdCAkQ09NTUlUMiB0d29fZWRpdHMKKyAgIGVkaXQgJENPTU1JVDMgdGhyZWVfZWRpdHMKK05leHQgY29tbWFuZCB0byBkbyAoMSByZW1haW5pbmcgY29tbWFuZCk6CisgICBwaWNrICRDT01NSVQ0IGZvdXJfZWRpdHMKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kbyIgdG8gdmlldyBhbmQgZWRpdCkKK1lvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAodXNlICJnaXQgY29tbWl0IC0tYW1lbmQiIHRvIGFtZW5kIHRoZSBjdXJyZW50IGNvbW1pdCkKKyAgKHVzZSAiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlIiBvbmNlIHlvdSBhcmUgc2F0aXNmaWVkIHdpdGggeW91ciBjaGFuZ2VzKQorCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1czogKHNwbGl0IGZpcnN0IGVkaXQpIHNlY29uZCBlZGl0IGFuZCBzcGxpdCcgJworCWdpdCByZXNldCAtLWhhcmQgc2V2ZXJhbF9lZGl0cyAmJgorCUZBS0VfTElORVM9ImVkaXQgMSBlZGl0IDIgMyIgJiYKKwlleHBvcnQgRkFLRV9MSU5FUyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCUNPTU1JVDI9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c15eKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgc2V2ZXJhbF9lZGl0c14pICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzKSAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRH4zKSAmJgorCWdpdCByZWJhc2UgLWkgSEVBRH4zICYmCisJZ2l0IHJlc2V0IEhFQUReICYmCisJZ2l0IGFkZCBtYWluLnR4dCAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiZiIgJiYKKwlnaXQgcmViYXNlIC0tY29udGludWUgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIGVkaXQgJENPTU1JVDIgdHdvX2VkaXRzCisgICBlZGl0ICRDT01NSVQzIHRocmVlX2VkaXRzCitOZXh0IGNvbW1hbmQgdG8gZG8gKDEgcmVtYWluaW5nIGNvbW1hbmQpOgorICAgcGljayAkQ09NTUlUNCBmb3VyX2VkaXRzCisgICh1c2UgImdpdCByZWJhc2UgLS1lZGl0LXRvZG8iIHRvIHZpZXcgYW5kIGVkaXQpCitZb3UgYXJlIGN1cnJlbnRseSBzcGxpdHRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICdcJydzZXZlcmFsX2VkaXRzJ1wnJyBvbiAnXCcnJE9OVE8nXCcnLgorICAoT25jZSB5b3VyIHdvcmtpbmcgZGlyZWN0b3J5IGlzIGNsZWFuLCBydW4gImdpdCByZWJhc2UgLS1jb250aW51ZSIpCisKK0NoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gdXBkYXRlIHdoYXQgd2lsbCBiZSBjb21taXR0ZWQpCisgICh1c2UgImdpdCBjaGVja291dCAtLSA8ZmlsZT4uLi4iIHRvIGRpc2NhcmQgY2hhbmdlcyBpbiB3b3JraW5nIGRpcmVjdG9yeSkKKworCW1vZGlmaWVkOiAgIG1haW4udHh0CisKK25vIGNoYW5nZXMgYWRkZWQgdG8gY29tbWl0ICh1c2UgImdpdCBhZGQiIGFuZC9vciAiZ2l0IGNvbW1pdCAtYSIpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiAoc3BsaXQgZmlyc3QgZWRpdCkgc2Vjb25kIGVkaXQgYW5kIGFtZW5kJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBzZXZlcmFsX2VkaXRzICYmCisJRkFLRV9MSU5FUz0iZWRpdCAxIGVkaXQgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXl4pICYmCisJQ09NTUlUMz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBzZXZlcmFsX2VkaXRzXikgJiYKKwlDT01NSVQ0PSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHNldmVyYWxfZWRpdHMpICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwlnaXQgcmVzZXQgSEVBRF4gJiYKKwlnaXQgYWRkIG1haW4udHh0ICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC1tICJnIiAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCBjb21taXQgLS1hbWVuZCAtbSAiaCIgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIGVkaXQgJENPTU1JVDIgdHdvX2VkaXRzCisgICBlZGl0ICRDT01NSVQzIHRocmVlX2VkaXRzCitOZXh0IGNvbW1hbmQgdG8gZG8gKDEgcmVtYWluaW5nIGNvbW1hbmQpOgorICAgcGljayAkQ09NTUlUNCBmb3VyX2VkaXRzCisgICh1c2UgImdpdCByZWJhc2UgLS1lZGl0LXRvZG8iIHRvIHZpZXcgYW5kIGVkaXQpCitZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IHdoaWxlIHJlYmFzaW5nIGJyYW5jaCAnXCcnc2V2ZXJhbF9lZGl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVwYXJlIGFtX3Nlc3Npb24nICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBhbV9zZXNzaW9uICYmCisJdGVzdF9jb21taXQgb25lX2FtIG9uZS50eHQgIm9uZSIgJiYKKwl0ZXN0X2NvbW1pdCB0d29fYW0gdHdvLnR4dCAidHdvIiAmJgorCXRlc3RfY29tbWl0IHRocmVlX2FtIHRocmVlLnR4dCAidGhyZWUiCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGluIGFuIGFtIHNlc3Npb246IGZpbGUgYWxyZWFkeSBleGlzdHMnICcKKwlnaXQgY2hlY2tvdXQgLWIgYW1fYWxyZWFkeV9leGlzdHMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIE1haWxkaXIvKiAmJiBnaXQgYW0gLS1hYm9ydCIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xIC1vTWFpbGRpciAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBhbSBNYWlsZGlyLyoucGF0Y2ggJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIGFtX2FscmVhZHlfZXhpc3RzCitZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuICJnaXQgYW0gLS1jb250aW51ZSIpCisgICh1c2UgImdpdCBhbSAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKKyAgKHVzZSAiZ2l0IGFtIC0tYWJvcnQiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaW4gYW4gYW0gc2Vzc2lvbjogZmlsZSBkb2VzIG5vdCBleGlzdCcgJworCWdpdCByZXNldCAtLWhhcmQgYW1fc2Vzc2lvbiAmJgorCWdpdCBjaGVja291dCAtYiBhbV9ub3RfZXhpc3RzICYmCisJZ2l0IHJtIHRocmVlLnR4dCAmJgorCWdpdCBjb21taXQgLW0gImRlbGV0ZSB0aHJlZS50eHQiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBNYWlsZGlyLyogJiYgZ2l0IGFtIC0tYWJvcnQiICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMSAtb01haWxkaXIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgYW0gTWFpbGRpci8qLnBhdGNoICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK09uIGJyYW5jaCBhbV9ub3RfZXhpc3RzCitZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuICJnaXQgYW0gLS1jb250aW51ZSIpCisgICh1c2UgImdpdCBhbSAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKKyAgKHVzZSAiZ2l0IGFtIC0tYWJvcnQiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgaW4gYW4gYW0gc2Vzc2lvbjogZW1wdHkgcGF0Y2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGFtX3Nlc3Npb24gJiYKKwlnaXQgY2hlY2tvdXQgLWIgYW1fZW1wdHkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIE1haWxkaXIvKiAmJiBnaXQgYW0gLS1hYm9ydCIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0zIC1vTWFpbGRpciAmJgorCWdpdCBybSBvbmUudHh0IHR3by50eHQgdGhyZWUudHh0ICYmCisJZ2l0IGNvbW1pdCAtbSAiZGVsZXRlIGFsbCBhbV9lbXB0eSIgJiYKKwllY2hvIGVycm9yID5NYWlsZGlyLzAwMDItdHdvX2FtLnBhdGNoICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGFtIE1haWxkaXIvKi5wYXRjaCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitPbiBicmFuY2ggYW1fZW1wdHkKK1lvdSBhcmUgaW4gdGhlIG1pZGRsZSBvZiBhbiBhbSBzZXNzaW9uLgorVGhlIGN1cnJlbnQgcGF0Y2ggaXMgZW1wdHkuCisgICh1c2UgImdpdCBhbSAtLXNraXAiIHRvIHNraXAgdGhpcyBwYXRjaCkKKyAgKHVzZSAiZ2l0IGFtIC0tYWJvcnQiIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJyYW5jaCkKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBiaXNlY3RpbmcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBiaXNlY3QgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfYmlzZWN0IG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19iaXNlY3QgbWFpbi50eHQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWVfYmlzZWN0IG1haW4udHh0IHRocmVlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgYmlzZWN0IHJlc2V0IiAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwlnaXQgYmlzZWN0IGJhZCAmJgorCWdpdCBiaXNlY3QgZ29vZCBvbmVfYmlzZWN0ICYmCisJVEdUPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IHR3b19iaXNlY3QpICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorSEVBRCBkZXRhY2hlZCBhdCAkVEdUCitZb3UgYXJlIGN1cnJlbnRseSBiaXNlY3RpbmcsIHN0YXJ0ZWQgZnJvbSBicmFuY2ggJ1wnJ2Jpc2VjdCdcJycuCisgICh1c2UgImdpdCBiaXNlY3QgcmVzZXQiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpCisKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHdoZW4gcmViYXNlIGNvbmZsaWN0cyB3aXRoIHN0YXR1c2hpbnRzIGRpc2FibGVkJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgc3RhdHVzaGludHNfZGlzYWJsZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjb25maWcgLS1sb2NhbCBhZHZpY2Uuc3RhdHVzaGludHMgdHJ1ZSIgJiYKKwlnaXQgY29uZmlnIC0tbG9jYWwgYWR2aWNlLnN0YXR1c2hpbnRzIGZhbHNlICYmCisJdGVzdF9jb21taXQgb25lX3N0YXR1c2hpbnRzIG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19zdGF0dXNoaW50cyBtYWluLnR4dCB0d28gJiYKKwl0ZXN0X2NvbW1pdCB0aHJlZV9zdGF0dXNoaW50cyBtYWluLnR4dCB0aHJlZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCU9OVE89JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF5eKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZWJhc2UgSEVBRF4gLS1vbnRvIEhFQUReXiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK3JlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworWW91IGFyZSBjdXJyZW50bHkgcmViYXNpbmcgYnJhbmNoICdcJydzdGF0dXNoaW50c19kaXNhYmxlZCdcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKworVW5tZXJnZWQgcGF0aHM6CisJYm90aCBtb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdAorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ByZXBhcmUgZm9yIGNoZXJyeS1waWNrIGNvbmZsaWN0cycgJworCWdpdCByZXNldCAtLWhhcmQgbWFzdGVyICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNoZXJyeV9icmFuY2ggJiYKKwl0ZXN0X2NvbW1pdCBvbmVfY2hlcnJ5IG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19jaGVycmllcyBtYWluLnR4dCB0d28gJiYKKwlnaXQgY2hlY2tvdXQgLWIgY2hlcnJ5X2JyYW5jaF9zZWNvbmQgJiYKKwl0ZXN0X2NvbW1pdCBzZWNvbmRfY2hlcnJ5IG1haW4udHh0IHNlY29uZCAmJgorCWdpdCBjaGVja291dCBjaGVycnlfYnJhbmNoICYmCisJdGVzdF9jb21taXQgdGhyZWVfY2hlcnJpZXMgbWFpbi50eHQgdGhyZWUKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hlbiBjaGVycnktcGlja2luZyBiZWZvcmUgcmVzb2x2aW5nIGNvbmZsaWN0cycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZXJyeS1waWNrIC0tYWJvcnQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZXJyeS1waWNrIGNoZXJyeV9icmFuY2hfc2Vjb25kICYmCisJVE9fQ0hFUlJZX1BJQ0s9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgQ0hFUlJZX1BJQ0tfSEVBRCkgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitPbiBicmFuY2ggY2hlcnJ5X2JyYW5jaAorWW91IGFyZSBjdXJyZW50bHkgY2hlcnJ5LXBpY2tpbmcgY29tbWl0ICRUT19DSEVSUllfUElDSy4KKyAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biAiZ2l0IGNoZXJyeS1waWNrIC0tY29udGludWUiKQorICAodXNlICJnaXQgY2hlcnJ5LXBpY2sgLS1hYm9ydCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pCisKK1VubWVyZ2VkIHBhdGhzOgorICAodXNlICJnaXQgYWRkIDxmaWxlPi4uLiIgdG8gbWFyayByZXNvbHV0aW9uKQorCisJYm90aCBtb2RpZmllZDogICBtYWluLnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXR1cyB3aGVuIGNoZXJyeS1waWNraW5nIGFmdGVyIHJlc29sdmluZyBjb25mbGljdHMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGNoZXJyeV9icmFuY2ggJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVycnktcGljayAtLWFib3J0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBjaGVycnlfYnJhbmNoX3NlY29uZCAmJgorCVRPX0NIRVJSWV9QSUNLPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IENIRVJSWV9QSUNLX0hFQUQpICYmCisJZWNobyBlbmQgPm1haW4udHh0ICYmCisJZ2l0IGFkZCBtYWluLnR4dCAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK09uIGJyYW5jaCBjaGVycnlfYnJhbmNoCitZb3UgYXJlIGN1cnJlbnRseSBjaGVycnktcGlja2luZyBjb21taXQgJFRPX0NIRVJSWV9QSUNLLgorICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuICJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZSIpCisgICh1c2UgImdpdCBjaGVycnktcGljayAtLWFib3J0IiB0byBjYW5jZWwgdGhlIGNoZXJyeS1waWNrIG9wZXJhdGlvbikKKworQ2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6CisKKwltb2RpZmllZDogICBtYWluLnR4dAorCitVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIHNob3dpbmcgZGV0YWNoZWQgYXQgYW5kIGZyb20gYSB0YWcnICcKKwl0ZXN0X2NvbW1pdCBhdGFnIHRhZ2dpbmcgJiYKKwlnaXQgY2hlY2tvdXQgYXRhZyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitIRUFEIGRldGFjaGVkIGF0IGF0YWcKK25vdGhpbmcgdG8gY29tbWl0ICh1c2UgLXUgdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpCitFT0YKKwlnaXQgc3RhdHVzIC0tdW50cmFja2VkLWZpbGVzPW5vID5hY3R1YWwgJiYKKwl0ZXN0X2kxOG5jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK0hFQUQgZGV0YWNoZWQgZnJvbSBhdGFnCitub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hpbGUgcmV2ZXJ0aW5nIGNvbW1pdCAoY29uZmxpY3RzKScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIGJlZm9yZSA+dG8tcmV2ZXJ0LnR4dCAmJgorCXRlc3RfY29tbWl0IGJlZm9yZSB0by1yZXZlcnQudHh0ICYmCisJZWNobyBvbGQgPnRvLXJldmVydC50eHQgJiYKKwl0ZXN0X2NvbW1pdCBvbGQgdG8tcmV2ZXJ0LnR4dCAmJgorCWVjaG8gbmV3ID50by1yZXZlcnQudHh0ICYmCisJdGVzdF9jb21taXQgbmV3IHRvLXJldmVydC50eHQgJiYKKwlUT19SRVZFUlQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldmVydCAkVE9fUkVWRVJUICYmCisJY2F0ID5leHBlY3RlZCA8PEVPRiAmJgorT24gYnJhbmNoIG1hc3RlcgorWW91IGFyZSBjdXJyZW50bHkgcmV2ZXJ0aW5nIGNvbW1pdCAkVE9fUkVWRVJULgorICAoZml4IGNvbmZsaWN0cyBhbmQgcnVuICJnaXQgcmV2ZXJ0IC0tY29udGludWUiKQorICAodXNlICJnaXQgcmV2ZXJ0IC0tYWJvcnQiIHRvIGNhbmNlbCB0aGUgcmV2ZXJ0IG9wZXJhdGlvbikKKworVW5tZXJnZWQgcGF0aHM6CisgICh1c2UgImdpdCByZXNldCBIRUFEIDxmaWxlPi4uLiIgdG8gdW5zdGFnZSkKKyAgKHVzZSAiZ2l0IGFkZCA8ZmlsZT4uLi4iIHRvIG1hcmsgcmVzb2x1dGlvbikKKworCWJvdGggbW9kaWZpZWQ6ICAgdG8tcmV2ZXJ0LnR4dAorCitubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdCAodXNlICJnaXQgYWRkIiBhbmQvb3IgImdpdCBjb21taXQgLWEiKQorRU9GCisJZ2l0IHN0YXR1cyAtLXVudHJhY2tlZC1maWxlcz1ubyA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXMgd2hpbGUgcmV2ZXJ0aW5nIGNvbW1pdCAoY29uZmxpY3RzIHJlc29sdmVkKScgJworCWVjaG8gcmV2ZXJ0ZWQgPnRvLXJldmVydC50eHQgJiYKKwlnaXQgYWRkIHRvLXJldmVydC50eHQgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitPbiBicmFuY2ggbWFzdGVyCitZb3UgYXJlIGN1cnJlbnRseSByZXZlcnRpbmcgY29tbWl0ICRUT19SRVZFUlQuCisgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gImdpdCByZXZlcnQgLS1jb250aW51ZSIpCisgICh1c2UgImdpdCByZXZlcnQgLS1hYm9ydCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKQorCitDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoKKyAgKHVzZSAiZ2l0IHJlc2V0IEhFQUQgPGZpbGU+Li4uIiB0byB1bnN0YWdlKQorCisJbW9kaWZpZWQ6ICAgdG8tcmV2ZXJ0LnR4dAorCitVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCAodXNlIC11IG9wdGlvbiB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzIGFmdGVyIHJldmVydGluZyBjb21taXQnICcKKwlnaXQgcmV2ZXJ0IC0tY29udGludWUgJiYKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorT24gYnJhbmNoIG1hc3Rlcgorbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlcGFyZSBmb3IgZGlmZmVyZW50IG51bWJlciBvZiBjb21taXRzIHJlYmFzZWQnICcKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciAmJgorCWdpdCBjaGVja291dCAtYiBzZXZlcmFsX2NvbW1pdHMgJiYKKwl0ZXN0X2NvbW1pdCBvbmVfY29tbWl0IG1haW4udHh0IG9uZSAmJgorCXRlc3RfY29tbWl0IHR3b19jb21taXQgbWFpbi50eHQgdHdvICYmCisJdGVzdF9jb21taXQgdGhyZWVfY29tbWl0IG1haW4udHh0IHRocmVlICYmCisJdGVzdF9jb21taXQgZm91cl9jb21taXQgbWFpbi50eHQgZm91cgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGF0dXM6IG9uZSBjb21tYW5kIGRvbmUgbm90aGluZyByZW1haW5pbmcnICcKKwlGQUtFX0xJTkVTPSJleGVjX2V4aXRfMTUiICYmCisJZXhwb3J0IEZBS0VfTElORVMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZWJhc2UgLS1hYm9ydCIgJiYKKwlPTlRPPSQoZ2l0IHJldi1wYXJzZSAtLXNob3J0IEhFQUR+MykgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmViYXNlIC1pIEhFQUR+MyAmJgorCWNhdCA+ZXhwZWN0ZWQgPDxFT0YgJiYKK2ludGVyYWN0aXZlIHJlYmFzZSBpbiBwcm9ncmVzczsgb250byAkT05UTworTGFzdCBjb21tYW5kIGRvbmUgKDEgY29tbWFuZCBkb25lKToKKyAgIGV4ZWMgZXhpdCAxNQorTm8gY29tbWFuZHMgcmVtYWluaW5nLgorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfY29tbWl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiB0d28gY29tbWFuZHMgZG9uZSB3aXRoIHNvbWUgd2hpdGUgbGluZXMgaW4gZG9uZSBmaWxlJyAnCisJRkFLRV9MSU5FUz0iMSA+IGV4ZWNfZXhpdF8xNSAgMiAzIiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjMpICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXl4pICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBIRUFEfjMgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMiBjb21tYW5kcyBkb25lKToKKyAgIHBpY2sgJENPTU1JVDIgdHdvX2NvbW1pdAorICAgZXhlYyBleGl0IDE1CitOZXh0IGNvbW1hbmRzIHRvIGRvICgyIHJlbWFpbmluZyBjb21tYW5kcyk6CisgICBwaWNrICRDT01NSVQzIHRocmVlX2NvbW1pdAorICAgcGljayAkQ09NTUlUNCBmb3VyX2NvbW1pdAorICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfY29tbWl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhdHVzOiB0d28gcmVtYWluaW5nIGNvbW1hbmRzIHdpdGggc29tZSB3aGl0ZSBsaW5lcyBpbiB0b2RvIGZpbGUnICcKKwlGQUtFX0xJTkVTPSIxIDIgZXhlY19leGl0XzE1IDMgPiA0IiAmJgorCWV4cG9ydCBGQUtFX0xJTkVTICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJT05UTz0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEfjQpICYmCisJQ09NTUlUND0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEKSAmJgorCUNPTU1JVDM9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQgSEVBRF4pICYmCisJQ09NTUlUMj0kKGdpdCByZXYtcGFyc2UgLS1zaG9ydCBIRUFEXl4pICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtaSBIRUFEfjQgJiYKKwljYXQgPmV4cGVjdGVkIDw8RU9GICYmCitpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gJE9OVE8KK0xhc3QgY29tbWFuZHMgZG9uZSAoMyBjb21tYW5kcyBkb25lKToKKyAgIHBpY2sgJENPTU1JVDIgdHdvX2NvbW1pdAorICAgZXhlYyBleGl0IDE1CisgIChzZWUgbW9yZSBpbiBmaWxlIC5naXQvcmViYXNlLW1lcmdlL2RvbmUpCitOZXh0IGNvbW1hbmRzIHRvIGRvICgyIHJlbWFpbmluZyBjb21tYW5kcyk6CisgICBwaWNrICRDT01NSVQzIHRocmVlX2NvbW1pdAorICAgcGljayAkQ09NTUlUNCBmb3VyX2NvbW1pdAorICAodXNlICJnaXQgcmViYXNlIC0tZWRpdC10b2RvIiB0byB2aWV3IGFuZCBlZGl0KQorWW91IGFyZSBjdXJyZW50bHkgZWRpdGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJ1wnJ3NldmVyYWxfY29tbWl0cydcJycgb24gJ1wnJyRPTlRPJ1wnJy4KKyAgKHVzZSAiZ2l0IGNvbW1pdCAtLWFtZW5kIiB0byBhbWVuZCB0aGUgY3VycmVudCBjb21taXQpCisgICh1c2UgImdpdCByZWJhc2UgLS1jb250aW51ZSIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykKKworbm90aGluZyB0byBjb21taXQgKHVzZSAtdSB0byBzaG93IHVudHJhY2tlZCBmaWxlcykKK0VPRgorCWdpdCBzdGF0dXMgLS11bnRyYWNrZWQtZmlsZXM9bm8gPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTEzLWludGVycHJldC10cmFpbGVycy5zaCBiL3QvdDc1MTMtaW50ZXJwcmV0LXRyYWlsZXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMyMmM0MzYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTEzLWludGVycHJldC10cmFpbGVycy5zaApAQCAtMCwwICsxLDkyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMywgMjAxNCBDaHJpc3RpYW4gQ291ZGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBpbnRlcnByZXQtdHJhaWxlcnMnCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIFdoZW4gd2Ugd2FudCBvbmUgdHJhaWxpbmcgc3BhY2UgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUsIGxldCdzIHVzZSBzZWQKKyMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2Ugc3BhY2VzIGFyZSBub3QgcmVtb3ZlZCBieSBhbnkgYXV0b21hdGljIHRvb2wuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJOiA+ZW1wdHkgJiYKKwljYXQgPmJhc2ljX21lc3NhZ2UgPDwtXEVPRiAmJgorCQlzdWJqZWN0CisKKwkJYm9keQorCUVPRgorCWNhdCA+Y29tcGxleF9tZXNzYWdlX2JvZHkgPDwtXEVPRiAmJgorCQlteSBzdWJqZWN0CisKKwkJbXkgYm9keSB3aGljaCBpcyBsb25nCisJCWFuZCBjb250YWlucyBzb21lIHNwZWNpYWwKKwkJY2hhcnMgbGlrZSA6ID0gPyAhCisKKwlFT0YKKwlzZWQgLWUgInMvIFpcJC8gLyIgPmNvbXBsZXhfbWVzc2FnZV90cmFpbGVycyA8PC1cRU9GICYmCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5OiBaCisJCVJldmlld2VkLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwljYXQgPmJhc2ljX3BhdGNoIDw8LVxFT0YKKwkJLS0tCisJCSBmb28udHh0IHwgMiArLQorCQkgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisKKwkJZGlmZiAtLWdpdCBhL2Zvby50eHQgYi9mb28udHh0CisJCWluZGV4IDAzNTM3NjcuLjFkOTFhYTEgMTAwNjQ0CisJCS0tLSBhL2Zvby50eHQKKwkJKysrIGIvZm9vLnR4dAorCQlAQCAtMSwzICsxLDMgQEAKKworCQktYmFyCisJCStiYXoKKworCQktLQorCQkxLjkucmMwLjExLmdhNTYyZGRjCisKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aG91dCBjb25maWcnICcKKwlzZWQgLWUgInMvIFpcJC8gLyIgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlhY2s6IFBlZmYKKwkJUmV2aWV3ZWQtYnk6IFoKKwkJQWNrZWQtYnk6IEpvaGFuCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjayA9IFBlZmYiIC0tdHJhaWxlciAiUmV2aWV3ZWQtYnkiIFwKKwkJLS10cmFpbGVyICJBY2tlZC1ieTogSm9oYW4iIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aG91dCBjb25maWcgaW4gYW5vdGhlciBvcmRlcicgJworCXNlZCAtZSAicy8gWlwkLyAvIiA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCUFja2VkLWJ5OiBKb2hhbgorCQlSZXZpZXdlZC1ieTogWgorCQlhY2s6IFBlZmYKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiQWNrZWQtYnk6IEpvaGFuIiAtLXRyYWlsZXIgIlJldmlld2VkLWJ5IiBcCisJCS0tdHJhaWxlciAiYWNrID0gUGVmZiIgZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctLXRyaW0tZW1wdHkgd2l0aG91dCBjb25maWcnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlhY2s6IFBlZmYKKwkJQWNrZWQtYnk6IEpvaGFuCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyIGFjaz1QZWZmIFwKKwkJLS10cmFpbGVyICJSZXZpZXdlZC1ieSIgLS10cmFpbGVyICJBY2tlZC1ieTogSm9oYW4iIFwKKwkJLS10cmFpbGVyICJzb2I6IiBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29uZmlnIG9wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJQWNrZWQtYnk6IEpvaGFuCisJCVJldmlld2VkLWJ5OiBQZWZmCisJRU9GCisJeyBlY2hvOyBlY2hvICJBY2tlZC1ieTogSm9oYW4iOyB9IHwKKwlnaXQgLWMgInRyYWlsZXIuQWNrZWQtYnkuaWZleGlzdHM9YWRkaWZkaWZmZXJlbnQiIGludGVycHJldC10cmFpbGVycyBcCisJCS0tdHJhaWxlciAiUmV2aWV3ZWQtYnk6IFBlZmYiIC0tdHJhaWxlciAiQWNrZWQtYnk6IEpvaGFuIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggb25seSBhIHRpdGxlIGluIHRoZSBtZXNzYWdlJyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisJCWFyZWE6IGNoYW5nZQorCisJCVJldmlld2VkLWJ5OiBQZWZmCisJCUFja2VkLWJ5OiBKb2hhbgorCUVPRgorCWVjaG8gImFyZWE6IGNoYW5nZSIgfAorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJSZXZpZXdlZC1ieTogUGVmZiIgXAorCQktLXRyYWlsZXIgIkFja2VkLWJ5OiBKb2hhbiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG11bHRpbGluZSB0aXRsZSBpbiB0aGUgbWVzc2FnZScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlwbGFjZSBvZgorCQljb2RlOiBjaGFuZ2UKKworCQlSZXZpZXdlZC1ieTogUGVmZgorCQlBY2tlZC1ieTogSm9oYW4KKwlFT0YKKwlwcmludGYgIiVzXG4iICJwbGFjZSBvZiIgImNvZGU6IGNoYW5nZSIgfAorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJSZXZpZXdlZC1ieTogUGVmZiIgXAorCQktLXRyYWlsZXIgIkFja2VkLWJ5OiBKb2hhbiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbmZpZyBzZXR1cCcgJworCWdpdCBjb25maWcgdHJhaWxlci5hY2sua2V5ICJBY2tlZC1ieTogIiAmJgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCisJCUFja2VkLWJ5OiBQZWZmCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJhY2sgPSBQZWZmIiBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJBY2tlZC1ieSA9IFBlZmYiIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgIkFja2VkLWJ5IDpQZWZmIiBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29uZmlnIHNldHVwIGFuZCAiOj0iIGFzIHNlcGFyYXRvcnMnICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2VwYXJhdG9ycyAiOj0iICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay5rZXkgIkFja2VkLWJ5PSAiICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJQWNrZWQtYnk9IFBlZmYKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgImFjayA9IFBlZmYiIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwgJiYKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgIkFja2VkLWJ5PSBQZWZmIiBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJBY2tlZC1ieSA6IFBlZmYiIGVtcHR5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb25maWcgc2V0dXAgYW5kICIlIiBhcyBzZXBhcmF0b3JzJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNlcGFyYXRvcnMgIiUiICYmCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GICYmCisKKwkJYnVnJSA0MgorCQljb3VudCUgMTAKKwkJYnVnJSA0MjIKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgImJ1ZyA9IDQyIiBcCisJCS0tdHJhaWxlciBjb3VudCUxMCAtLXRyYWlsZXIgInRlc3Q6IHN0dWZmIiBcCisJCS0tdHJhaWxlciAiYnVnICUgNDIyIiBlbXB0eSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggIiUiIGFzIHNlcGFyYXRvcnMgYW5kIGEgbWVzc2FnZSB3aXRoIHRyYWlsZXJzJyAnCisJY2F0ID5zcGVjaWFsX21lc3NhZ2UgPDwtXEVPRiAmJgorCQlTcGVjaWFsIE1lc3NhZ2UKKworCQlidWclIDQyCisJCWNvdW50JSAxMAorCQlidWclIDQyMgorCUVPRgorCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlTcGVjaWFsIE1lc3NhZ2UKKworCQlidWclIDQyCisJCWNvdW50JSAxMAorCQlidWclIDQyMgorCQljb3VudCUgMTAwCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgY291bnQlMTAwIFwKKwkJc3BlY2lhbF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb25maWcgc2V0dXAgYW5kICI6PSMiIGFzIHNlcGFyYXRvcnMnICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2VwYXJhdG9ycyAiOj0jIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5idWcua2V5ICJCdWcgIyIgJiYKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YgJiYKKworCQlCdWcgIzQyCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJidWcgPSA0MiIgZW1wdHkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1pdCBiYXNpYyBtZXNzYWdlJyAnCisJY2F0IGJhc2ljX21lc3NhZ2UgPmV4cGVjdGVkICYmCisJZWNobyA+PmV4cGVjdGVkICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyA8YmFzaWNfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggYmFzaWMgcGF0Y2gnICcKKwljYXQgYmFzaWNfbWVzc2FnZSA+aW5wdXQgJiYKKwljYXQgYmFzaWNfcGF0Y2ggPj5pbnB1dCAmJgorCWNhdCBiYXNpY19tZXNzYWdlID5leHBlY3RlZCAmJgorCWVjaG8gPj5leHBlY3RlZCAmJgorCWNhdCBiYXNpY19wYXRjaCA+PmV4cGVjdGVkICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyA8aW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1pdCBjb21wbGV4IG1lc3NhZ2UgYXMgYXJndW1lbnQnICcKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgY29tcGxleF9tZXNzYWdlX3RyYWlsZXJzID5jb21wbGV4X21lc3NhZ2UgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlSZXZpZXdlZC1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyBjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIDIgZmlsZXMgYXJndW1lbnRzJyAnCisJY2F0IGJhc2ljX21lc3NhZ2UgPj5leHBlY3RlZCAmJgorCWVjaG8gPj5leHBlY3RlZCAmJgorCWNhdCBiYXNpY19wYXRjaCA+PmV4cGVjdGVkICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyBjb21wbGV4X21lc3NhZ2UgaW5wdXQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIG1lc3NhZ2UgdGhhdCBoYXMgY29tbWVudHMnICcKKwljYXQgYmFzaWNfbWVzc2FnZSA+bWVzc2FnZV93aXRoX2NvbW1lbnRzICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+bWVzc2FnZV93aXRoX2NvbW1lbnRzIDw8LVxFT0YgJiYKKwkJIyBjb21tZW50CisKKwkJIyBvdGhlciBjb21tZW50CisJCUNjOiBaCisJCSMgeWV0IGFub3RoZXIgY29tbWVudAorCQlSZXZpZXdlZC1ieTogSm9oYW4KKwkJUmV2aWV3ZWQtYnk6IFoKKwkJIyBsYXN0IGNvbW1lbnQKKworCUVPRgorCWNhdCBiYXNpY19wYXRjaCA+Pm1lc3NhZ2Vfd2l0aF9jb21tZW50cyAmJgorCWNhdCBiYXNpY19tZXNzYWdlID5leHBlY3RlZCAmJgorCWNhdCA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJIyBjb21tZW50CisKKwkJUmV2aWV3ZWQtYnk6IEpvaGFuCisJCUNjOiBQZWZmCisJCSMgbGFzdCBjb21tZW50CisKKwlFT0YKKwljYXQgYmFzaWNfcGF0Y2ggPj5leHBlY3RlZCAmJgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiQ2M6IFBlZmYiIG1lc3NhZ2Vfd2l0aF9jb21tZW50cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggbWVzc2FnZSB0aGF0IGhhcyBhbiBvbGQgc3R5bGUgY29uZmxpY3QgYmxvY2snICcKKwljYXQgYmFzaWNfbWVzc2FnZSA+bWVzc2FnZV93aXRoX2NvbW1lbnRzICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+bWVzc2FnZV93aXRoX2NvbW1lbnRzIDw8LVxFT0YgJiYKKwkJIyBjb21tZW50CisKKwkJIyBvdGhlciBjb21tZW50CisJCUNjOiBaCisJCSMgeWV0IGFub3RoZXIgY29tbWVudAorCQlSZXZpZXdlZC1ieTogSm9oYW4KKwkJUmV2aWV3ZWQtYnk6IFoKKwkJIyBsYXN0IGNvbW1lbnQKKworCQlDb25mbGljdHM6CisKKwlFT0YKKwljYXQgYmFzaWNfbWVzc2FnZSA+ZXhwZWN0ZWQgJiYKKwljYXQgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCSMgY29tbWVudAorCisJCVJldmlld2VkLWJ5OiBKb2hhbgorCQlDYzogUGVmZgorCQkjIGxhc3QgY29tbWVudAorCisJCUNvbmZsaWN0czoKKworCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiQ2M6IFBlZmYiIG1lc3NhZ2Vfd2l0aF9jb21tZW50cyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggY29tbWl0IGNvbXBsZXggbWVzc2FnZSBhbmQgdHJhaWxlciBhcmdzJyAnCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6IFoKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlBY2tlZC1ieT0gUGVmZgorCQlCdWcgIzQyCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIDxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbXBsZXggcGF0Y2gsIGFyZ3MgYW5kIC0tdHJpbS1lbXB0eScgJworCWNhdCBjb21wbGV4X21lc3NhZ2UgPmNvbXBsZXhfcGF0Y2ggJiYKKwljYXQgYmFzaWNfcGF0Y2ggPj5jb21wbGV4X3BhdGNoICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCWNhdCA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQnVnICM0MgorCUVPRgorCWNhdCBiYXNpY19wYXRjaCA+PmV4cGVjdGVkICYmCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyaW0tZW1wdHkgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJidWc6IDQyIiA8Y29tcGxleF9wYXRjaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJ3aGVyZSA9IGJlZm9yZSInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYnVnLndoZXJlICJiZWZvcmUiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlSZXZpZXdlZC1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCUFja2VkLWJ5PSBQZWZmCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJ3aGVyZSA9IGFmdGVyIicgJworCWdpdCBjb25maWcgdHJhaWxlci5hY2sud2hlcmUgImFmdGVyIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6IFoKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJLS10cmFpbGVyICJidWc6IDQyIiBjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAid2hlcmUgPSBlbmQiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnJldmlldy5rZXkgIlJldmlld2VkLWJ5IiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5yZXZpZXcud2hlcmUgImVuZCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCVJldmlld2VkLWJ5OiBKdW5pbworCQlSZXZpZXdlZC1ieTogSm9oYW5uZXMKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiUmV2aWV3ZWQtYnk6IEp1bmlvIiAtLXRyYWlsZXIgIlJldmlld2VkLWJ5OiBKb2hhbm5lcyIgXAorCQljb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAid2hlcmUgPSBzdGFydCInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIucmV2aWV3LmtleSAiUmV2aWV3ZWQtYnkiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnJldmlldy53aGVyZSAic3RhcnQiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJUmV2aWV3ZWQtYnk6IEpvaGFubmVzCisJCVJldmlld2VkLWJ5OiBKdW5pbworCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgIlJldmlld2VkLWJ5OiBKdW5pbyIgLS10cmFpbGVyICJSZXZpZXdlZC1ieTogSm9oYW5uZXMiIFwKKwkJY29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgIndoZXJlID0gYmVmb3JlIiBmb3IgYSB0b2tlbiBpbiB0aGUgbWlkZGxlIG9mIHRoZSBtZXNzYWdlJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnJldmlldy5rZXkgIlJldmlld2VkLWJ5OiIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIucmV2aWV3LndoZXJlICJiZWZvcmUiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieTpKb2hhbgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIC0tdHJhaWxlciAiYnVnOiA0MiIgXAorCQktLXRyYWlsZXIgInJldmlldzogSm9oYW4iIDxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAid2hlcmUgPSBiZWZvcmUiIGFuZCAtLXRyaW0tZW1wdHknICcKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJY2F0ID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQ2CisJCUJ1ZyAjNDIKKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6Sm9oYW4KKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJpbS1lbXB0eSAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAicmV2aWV3OiBKb2hhbiIgXAorCQktLXRyYWlsZXIgIkJ1ZzogNDYiIDxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgZGVmYXVsdCBpcyAiaWZFeGlzdHMgPSBhZGRJZkRpZmZlcmVudE5laWdoYm9yIicgJworCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IFBlZmYKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJidWc6IDQyIiAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgImFjazogUGVmZiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgImlmRXhpc3RzIiBpcyBub3cgImFkZElmRGlmZmVyZW50IicgJworCWdpdCBjb25maWcgdHJhaWxlci5pZmV4aXN0cyAiYWRkSWZEaWZmZXJlbnQiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiAtLXRyYWlsZXIgInJldmlldzoiIFwKKwkJLS10cmFpbGVyICJhY2s6IEp1bmlvIiAtLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiYWNrOiBQZWZmIiA8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmRXhpc3RzID0gYWRkSWZEaWZmZXJlbnQiIHdpdGggIndoZXJlID0gZW5kIicgJworCWdpdCBjb25maWcgdHJhaWxlci5hY2suaWZFeGlzdHMgImFkZElmRGlmZmVyZW50IiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5hY2sud2hlcmUgImVuZCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCUFja2VkLWJ5PSBQZWZmCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IGFkZElmRGlmZmVyZW50IiB3aXRoICJ3aGVyZSA9IGJlZm9yZSInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLmlmRXhpc3RzICJhZGRJZkRpZmZlcmVudCIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLndoZXJlICJiZWZvcmUiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gUGVmZgorCQlBY2tlZC1ieT0gWgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAiaWZFeGlzdHMgPSBhZGRJZkRpZmZlcmVudE5laWdoYm9yIiB3aXRoICJ3aGVyZSA9IGVuZCInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLmlmRXhpc3RzICJhZGRJZkRpZmZlcmVudE5laWdoYm9yIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5hY2sud2hlcmUgImVuZCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBKdW5pbworCQlUZXN0ZWQtYnk6IEpha3ViCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJhY2s6IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiYnVnOiA0MiIgXAorCQktLXRyYWlsZXIgIlRlc3RlZC1ieTogSmFrdWIiIC0tdHJhaWxlciAiYWNrOiBKdW5pbyIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiYWNrOiBQZWZmIiA8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNpbmcgImlmRXhpc3RzID0gYWRkSWZEaWZmZXJlbnROZWlnaGJvciIgIHdpdGggIndoZXJlID0gYWZ0ZXIiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay5pZkV4aXN0cyAiYWRkSWZEaWZmZXJlbnROZWlnaGJvciIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLndoZXJlICJhZnRlciIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlUZXN0ZWQtYnk6IEpha3ViCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJidWc6IDQyIiBcCisJCS0tdHJhaWxlciAiVGVzdGVkLWJ5OiBKYWt1YiIgLS10cmFpbGVyICJhY2s6IEp1bmlvIiBcCisJCS0tdHJhaWxlciAiYWNrOiBKdW5pbyIgLS10cmFpbGVyICJhY2s6IFBlZmYiIDxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAiaWZFeGlzdHMgPSBhZGRJZkRpZmZlcmVudE5laWdoYm9yIiBhbmQgLS10cmltLWVtcHR5JyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay5pZkV4aXN0cyAiYWRkSWZEaWZmZXJlbnROZWlnaGJvciIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJY2F0ID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmltLWVtcHR5IC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiQWNrZWQtYnk9IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiYnVnOiA0MiIgXAorCQktLXRyYWlsZXIgImFjazogUGVmZiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IGFkZCIgd2l0aCAid2hlcmUgPSBlbmQiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay5pZkV4aXN0cyAiYWRkIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5hY2sud2hlcmUgImVuZCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCUFja2VkLWJ5PSBQZWZmCisJCUFja2VkLWJ5PSBQZWZmCisJCVRlc3RlZC1ieTogSmFrdWIKKwkJQWNrZWQtYnk9IEp1bmlvCisJCVRlc3RlZC1ieTogSm9oYW5uZXMKKwkJQWNrZWQtYnk9IFBlZmYKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiQWNrZWQtYnk9IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgIlRlc3RlZC1ieTogSmFrdWIiIC0tdHJhaWxlciAiYWNrOiBKdW5pbyIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiVGVzdGVkLWJ5OiBKb2hhbm5lcyIgXAorCQktLXRyYWlsZXIgImFjazogUGVmZiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IGFkZCIgd2l0aCAid2hlcmUgPSBhZnRlciInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuYWNrLmlmRXhpc3RzICJhZGQiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmFjay53aGVyZSAiYWZ0ZXIiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlBY2tlZC1ieT0gUGVmZgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCS0tdHJhaWxlciAiQWNrZWQtYnk9IFBlZmYiIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiYnVnOiA0MiIgXAorCQktLXRyYWlsZXIgImFjazogUGVmZiIgPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IHJlcGxhY2UiJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC5rZXkgIkZpeGVzOiAiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC5pZkV4aXN0cyAicmVwbGFjZSIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlGaXhlczogMjIKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3OiIgXAorCQktLXRyYWlsZXIgImZpeD01MyIgLS10cmFpbGVyICJhY2s6IEp1bmlvIiAtLXRyYWlsZXIgImZpeD0yMiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAiaWZFeGlzdHMgPSByZXBsYWNlIiB3aXRoICJ3aGVyZSA9IGFmdGVyIicgJworCWdpdCBjb25maWcgdHJhaWxlci5maXgud2hlcmUgImFmdGVyIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUJ1ZyAjNDIKKwkJRml4ZXM6IDIyCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiBcCisJCS0tdHJhaWxlciAiZml4PTUzIiAtLXRyYWlsZXIgImFjazogSnVuaW8iIC0tdHJhaWxlciAiZml4PTIyIiBcCisJCS0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzaW5nICJpZkV4aXN0cyA9IGRvTm90aGluZyInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuZml4LmlmRXhpc3RzICJkb05vdGhpbmciICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3OiIgLS10cmFpbGVyICJmaXg9NTMiIFwKKwkJLS10cmFpbGVyICJhY2s6IEp1bmlvIiAtLXRyYWlsZXIgImZpeD0yMiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0aGUgZGVmYXVsdCBpcyAiaWZNaXNzaW5nID0gYWRkIicgJworCWdpdCBjb25maWcgdHJhaWxlci5jYy5rZXkgIkNjOiAiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmNjLndoZXJlICJiZWZvcmUiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlDYzogTGludXMKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJQWNrZWQtYnk9IEp1bmlvCisJCUFja2VkLWJ5PSBQZWZmCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PTUzIiBcCisJCS0tdHJhaWxlciAiY2M9TGludXMiIC0tdHJhaWxlciAiYWNrOiBKdW5pbyIgXAorCQktLXRyYWlsZXIgImZpeD0yMiIgLS10cmFpbGVyICJidWc6IDQyIiAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2hlbiBkZWZhdWx0ICJpZk1pc3NpbmciIGlzICJkb05vdGhpbmciJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmlmbWlzc2luZyAiZG9Ob3RoaW5nIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD01MyIgXAorCQktLXRyYWlsZXIgImNjPUxpbnVzIiAtLXRyYWlsZXIgImFjazogSnVuaW8iIFwKKwkJLS10cmFpbGVyICJmaXg9MjIiIC0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmlmbWlzc2luZyAiYWRkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAiaWZNaXNzaW5nID0gYWRkIiB3aXRoICJ3aGVyZSA9IGVuZCInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuY2Mua2V5ICJDYzogIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5jYy53aGVyZSAiZW5kIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5jYy5pZk1pc3NpbmcgImFkZCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlDYzogTGludXMKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3OiIgLS10cmFpbGVyICJmaXg9NTMiIFwKKwkJLS10cmFpbGVyICJhY2s6IEp1bmlvIiAtLXRyYWlsZXIgImZpeD0yMiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiY2M9TGludXMiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAiaWZNaXNzaW5nID0gYWRkIiB3aXRoICJ3aGVyZSA9IGJlZm9yZSInICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuY2Mua2V5ICJDYzogIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5jYy53aGVyZSAiYmVmb3JlIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5jYy5pZk1pc3NpbmcgImFkZCIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlDYzogTGludXMKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwlFT0YKKwlnaXQgaW50ZXJwcmV0LXRyYWlsZXJzIC0tdHJhaWxlciAicmV2aWV3OiIgLS10cmFpbGVyICJmaXg9NTMiIFwKKwkJLS10cmFpbGVyICJhY2s6IEp1bmlvIiAtLXRyYWlsZXIgImZpeD0yMiIgXAorCQktLXRyYWlsZXIgImJ1ZzogNDIiIC0tdHJhaWxlciAiY2M9TGludXMiIC0tdHJhaWxlciAiYWNrOiBQZWZmIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2luZyAiaWZNaXNzaW5nID0gZG9Ob3RoaW5nIicgJworCWdpdCBjb25maWcgdHJhaWxlci5jYy5pZk1pc3NpbmcgImRvTm90aGluZyIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlCdWcgIzQyCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCUFja2VkLWJ5PSBKdW5pbworCQlBY2tlZC1ieT0gUGVmZgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD01MyIgXAorCQktLXRyYWlsZXIgImNjPUxpbnVzIiAtLXRyYWlsZXIgImFjazogSnVuaW8iIFwKKwkJLS10cmFpbGVyICJmaXg9MjIiIC0tdHJhaWxlciAiYnVnOiA0MiIgLS10cmFpbGVyICJhY2s6IFBlZmYiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlZmF1bHQgIndoZXJlIiBpcyBub3cgImFmdGVyIicgJworCWdpdCBjb25maWcgdHJhaWxlci53aGVyZSAiYWZ0ZXIiICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHRyYWlsZXIuYWNrLndoZXJlICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJQnVnICM0MgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlBY2tlZC1ieT0gUGVmZgorCQlBY2tlZC1ieT0gUGVmZgorCQlBY2tlZC1ieT0gSnVuaW8KKwkJQWNrZWQtYnk9IFBlZmYKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJVGVzdGVkLWJ5OiBKYWt1YgorCQlUZXN0ZWQtYnk6IEpvaGFubmVzCisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgImFjazogUGVmZiIgXAorCQktLXRyYWlsZXIgIkFja2VkLWJ5PSBQZWZmIiAtLXRyYWlsZXIgInJldmlldzoiIFwKKwkJLS10cmFpbGVyICJUZXN0ZWQtYnk6IEpha3ViIiAtLXRyYWlsZXIgImFjazogSnVuaW8iIFwKKwkJLS10cmFpbGVyICJidWc6IDQyIiAtLXRyYWlsZXIgIlRlc3RlZC1ieTogSm9oYW5uZXMiIFwKKwkJLS10cmFpbGVyICJhY2s6IFBlZmYiIDxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIHNpbXBsZSBjb21tYW5kJyAnCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24ua2V5ICJTaWduZWQtb2ZmLWJ5OiAiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24ud2hlcmUgImFmdGVyIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmlmRXhpc3RzICJhZGRJZkRpZmZlcmVudE5laWdoYm9yIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmNvbW1hbmQgImVjaG8gXCJBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPlwiIiAmJgorCWNhdCBjb21wbGV4X21lc3NhZ2VfYm9keSA+ZXhwZWN0ZWQgJiYKKwlzZWQgLWUgInMvIFpcJC8gLyIgPj5leHBlY3RlZCA8PC1cRU9GICYmCisJCUZpeGVzOiBaCisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PTIyIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1hbmQgdXNpbmcgY29tbWl0ZXIgaW5mb3JtYXRpb24nICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5pZkV4aXN0cyAiYWRkSWZEaWZmZXJlbnQiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLnNpZ24uY29tbWFuZCAiZWNobyBcIlwkR0lUX0NPTU1JVFRFUl9OQU1FIDxcJEdJVF9DT01NSVRURVJfRU1BSUw+XCIiICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LVxFT0YgJiYKKwkJRml4ZXM6IFoKKwkJQWNrZWQtYnk9IFoKKwkJUmV2aWV3ZWQtYnk6CisJCVNpZ25lZC1vZmYtYnk6IFoKKwkJU2lnbmVkLW9mZi1ieTogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD0yMiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBjb21tYW5kIHVzaW5nIGF1dGhvciBpbmZvcm1hdGlvbicgJworCWdpdCBjb25maWcgdHJhaWxlci5zaWduLmtleSAiU2lnbmVkLW9mZi1ieTogIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5zaWduLndoZXJlICJhZnRlciIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5pZkV4aXN0cyAiYWRkSWZEaWZmZXJlbnROZWlnaGJvciIgJiYKKwlnaXQgY29uZmlnIHRyYWlsZXIuc2lnbi5jb21tYW5kICJlY2hvIFwiXCRHSVRfQVVUSE9SX05BTUUgPFwkR0lUX0FVVEhPUl9FTUFJTD5cIiIgJiYKKwljYXQgY29tcGxleF9tZXNzYWdlX2JvZHkgPmV4cGVjdGVkICYmCisJc2VkIC1lICJzLyBaXCQvIC8iID4+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD0yMiIgXAorCQk8Y29tcGxleF9tZXNzYWdlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgYSBjb21taXQnICcKKwllY2hvICJDb250ZW50IG9mIHRoZSBmaXJzdCBjb21taXQuIiA+IGEudHh0ICYmCisJZ2l0IGFkZCBhLnR4dCAmJgorCWdpdCBjb21taXQgLW0gIkFkZCBmaWxlIGEudHh0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1hbmQgdXNpbmcgJEFSRycgJworCWdpdCBjb25maWcgdHJhaWxlci5maXguaWZFeGlzdHMgInJlcGxhY2UiICYmCisJZ2l0IGNvbmZpZyB0cmFpbGVyLmZpeC5jb21tYW5kICJnaXQgbG9nIC0xIC0tb25lbGluZSAtLWZvcm1hdD1cIiVoICglcylcIiAtLWFiYnJldi1jb21taXQgLS1hYmJyZXY9MTQgXCRBUkciICYmCisJRklYRUQ9JChnaXQgbG9nIC0xIC0tb25lbGluZSAtLWZvcm1hdD0iJWggKCVzKSIgLS1hYmJyZXYtY29tbWl0IC0tYWJicmV2PTE0IEhFQUQpICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LUVPRiAmJgorCQlGaXhlczogJEZJWEVECisJCUFja2VkLWJ5PSBaCisJCVJldmlld2VkLWJ5OgorCQlTaWduZWQtb2ZmLWJ5OiBaCisJCVNpZ25lZC1vZmYtYnk6IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzoiIC0tdHJhaWxlciAiZml4PUhFQUQiIFwKKwkJPGNvbXBsZXhfbWVzc2FnZSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpdGggZmFpbGluZyBjb21tYW5kIHVzaW5nICRBUkcnICcKKwlnaXQgY29uZmlnIHRyYWlsZXIuZml4LmlmRXhpc3RzICJyZXBsYWNlIiAmJgorCWdpdCBjb25maWcgdHJhaWxlci5maXguY29tbWFuZCAiZmFsc2UgXCRBUkciICYmCisJY2F0IGNvbXBsZXhfbWVzc2FnZV9ib2R5ID5leHBlY3RlZCAmJgorCXNlZCAtZSAicy8gWlwkLyAvIiA+PmV4cGVjdGVkIDw8LUVPRiAmJgorCQlGaXhlczogWgorCQlBY2tlZC1ieT0gWgorCQlSZXZpZXdlZC1ieToKKwkJU2lnbmVkLW9mZi1ieTogWgorCQlTaWduZWQtb2ZmLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICJyZXZpZXc6IiAtLXRyYWlsZXIgImZpeD1IRUFEIiBcCisJCTxjb21wbGV4X21lc3NhZ2UgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGVtcHR5IHRva2VucycgJworCWdpdCBjb25maWcgLS11bnNldCB0cmFpbGVyLmZpeC5jb21tYW5kICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKworCQlTaWduZWQtb2ZmLWJ5OiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgLS10cmFpbGVyICI6IiAtLXRyYWlsZXIgIjp0ZXN0IiA+YWN0dWFsIDw8LUVPRiAmJgorCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aXRoIGNvbW1hbmQgYnV0IG5vIGtleScgJworCWdpdCBjb25maWcgLS11bnNldCB0cmFpbGVyLnNpZ24ua2V5ICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKworCQlzaWduOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCUVPRgorCWdpdCBpbnRlcnByZXQtdHJhaWxlcnMgPmFjdHVhbCA8PC1FT0YgJiYKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2l0aCBubyBjb21tYW5kIGFuZCBubyBrZXknICcKKwlnaXQgY29uZmlnIC0tdW5zZXQgdHJhaWxlci5yZXZpZXcua2V5ICYmCisJY2F0ID5leHBlY3RlZCA8PC1FT0YgJiYKKworCQlyZXZpZXc6IEp1bmlvCisJCXNpZ246IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRU9GCisJZ2l0IGludGVycHJldC10cmFpbGVycyAtLXRyYWlsZXIgInJldmlldzpKdW5pbyIgPmFjdHVhbCA8PC1FT0YgJiYKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NTE0LWNvbW1pdC1wYXRjaC5zaCBiL3QvdDc1MTQtY29tbWl0LXBhdGNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5OGEyMTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NTE0LWNvbW1pdC1wYXRjaC5zaApAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0naHVuayBlZGl0IHdpdGggImNvbW1pdCAtcCAtbSInCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkwKK3RoZW4KKwlza2lwX2FsbD0ic2tpcHBpbmcgJyR0ZXN0X2Rlc2NyaXB0aW9uJyB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlIgorCXRlc3RfZG9uZQorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgKGluaXRpYWwpJyAnCisJZWNobyBsaW5lMSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gY29tbWl0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlZGl0IGh1bmsgImNvbW1pdCAtcCAtbSBtZXNzYWdlIicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgZWRpdG9yX3dhc19zdGFydGVkIiAmJgorCXJtIC1mIGVkaXRvcl93YXNfc3RhcnRlZCAmJgorCWVjaG8gbW9yZSA+PmZpbGUgJiYKKwllY2hvIGUgfCBlbnYgR0lUX0VESVRPUj0iOiA+ZWRpdG9yX3dhc19zdGFydGVkIiBnaXQgY29tbWl0IC1wIC1tIGNvbW1pdDIgZmlsZSAmJgorCXRlc3QgLXIgZWRpdG9yX3dhc19zdGFydGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXQgaHVuayAiY29tbWl0IC0tZHJ5LXJ1biAtcCAtbSBtZXNzYWdlIicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgZWRpdG9yX3dhc19zdGFydGVkIiAmJgorCXJtIC1mIGVkaXRvcl93YXNfc3RhcnRlZCAmJgorCWVjaG8gbW9yZSA+PmZpbGUgJiYKKwllY2hvIGUgfCBlbnYgR0lUX0VESVRPUj0iOiA+ZWRpdG9yX3dhc19zdGFydGVkIiBnaXQgY29tbWl0IC1wIC1tIGNvbW1pdDMgZmlsZSAmJgorCXRlc3QgLXIgZWRpdG9yX3dhc19zdGFydGVkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzUxNS1zdGF0dXMtc3ltbGlua3Muc2ggYi90L3Q3NTE1LXN0YXR1cy1zeW1saW5rcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45Zjk4OWJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzUxNS1zdGF0dXMtc3ltbGlua3Muc2gKQEAgLTAsMCArMSw0MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdGF0dXMgYW5kIHN5bWxpbmtzJworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIC5naXRpZ25vcmUgPi5naXRpZ25vcmUgJiYKKwllY2hvIGFjdHVhbCA+Pi5naXRpZ25vcmUgJiYKKwllY2hvIGV4cGVjdCA+Pi5naXRpZ25vcmUgJiYKKwlta2RpciBkaXIgJiYKKwllY2hvIHggPmRpci9maWxlMSAmJgorCWVjaG8geSA+ZGlyL2ZpbGUyICYmCisJZ2l0IGFkZCBkaXIgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwlnaXQgdGFnIGluaXRpYWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnc3ltbGluayB0byBhIGRpcmVjdG9yeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gc3ltbGluayIgJiYKKwlsbiAtcyBkaXIgc3ltbGluayAmJgorCWVjaG8gIj8/IHN5bWxpbmsiID5leHBlY3QgJiYKKwlnaXQgc3RhdHVzIC0tcG9yY2VsYWluID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3N5bWxpbmsgcmVwbGFjaW5nIGEgZGlyZWN0b3J5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgY29weSAmJiBnaXQgcmVzZXQgLS1oYXJkIGluaXRpYWwiICYmCisJbWtkaXIgY29weSAmJgorCWNwIGRpci9maWxlMSBjb3B5L2ZpbGUxICYmCisJZWNobyAiY2hhbmdlZCBpbiBjb3B5IiA+Y29weS9maWxlMiAmJgorCWdpdCBhZGQgY29weSAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJcm0gLXJmIGNvcHkgJiYKKwlsbiAtcyBkaXIgY29weSAmJgorCWVjaG8gIiBEIGNvcHkvZmlsZTEiID5leHBlY3QgJiYKKwllY2hvICIgRCBjb3B5L2ZpbGUyIiA+PmV4cGVjdCAmJgorCWVjaG8gIj8/IGNvcHkiID4+ZXhwZWN0ICYmCisJZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc1MTYtY29tbWl0LXJhY2VzLnNoIGIvdC90NzUxNi1jb21taXQtcmFjZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjJjZTE0ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc1MTYtY29tbWl0LXJhY2VzLnNoCkBAIC0wLDAgKzEsMzAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY29tbWl0IHJhY2VzJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JhY2UgdG8gY3JlYXRlIG9ycGhhbiBjb21taXQnICcKKwl3cml0ZV9zY3JpcHQgaGFyZS1lZGl0b3IgPDwtXEVPRiAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBoYXJlCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZW52IEVESVRPUj0uL2hhcmUtZWRpdG9yIGdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSB0b3J0b2lzZSAtZSAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolcyA+c3ViamVjdCAmJgorCWdyZXAgaGFyZSBzdWJqZWN0ICYmCisJdGVzdCAteiAiJChnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JVApIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyYWNlIHRvIGNyZWF0ZSBub24tb3JwaGFuIGNvbW1pdCcgJworCXdyaXRlX3NjcmlwdCBhaXJwbGFuZS1lZGl0b3IgPDwtXEVPRiAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSBhaXJwbGFuZQorCUVPRgorCWdpdCBjaGVja291dCAtLW9ycGhhbiBicmFuY2ggJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gYmFzZSAmJgorCWdpdCByZXYtcGFyc2UgSEVBRCA+YmFzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGVudiBFRElUT1I9Li9haXJwbGFuZS1lZGl0b3IgZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIHNoaXAgLWUgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JXMgPnN1YmplY3QgJiYKKwlncmVwIGFpcnBsYW5lIHN1YmplY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReID5wYXJlbnQgJiYKKwl0ZXN0X2NtcCBiYXNlIHBhcmVudAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDAtbWVyZ2Uuc2ggYi90L3Q3NjAwLW1lcmdlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1YzUwZWUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjAwLW1lcmdlLnNoCkBAIC0wLDAgKzEsNjk1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IExhcnMgSGplbWxpCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZQorCitUZXN0aW5nIGJhc2ljIG1lcmdlIG9wZXJhdGlvbnMvb3B0aW9uIHBhcnNpbmcuCisKKyEgW2MwXSBjb21taXQgMAorICEgW2MxXSBjb21taXQgMQorICAhIFtjMl0gY29tbWl0IDIKKyAgICEgW2MzXSBjb21taXQgMworICAgICEgW2M0XSBjNAorICAgICAhIFtjNV0gYzUKKyAgICAgICEgW2M2XSBjNgorICAgICAgICogW21hc3Rlcl0gTWVyZ2UgY29tbWl0ICdjMScKKy0tLS0tLS0tCisgICAgICAgLSBbbWFzdGVyXSBNZXJnZSBjb21taXQgJ2MxJworICsgICAgICogW2MxXSBjb21taXQgMQorICAgICAgKyAgW2M2XSBjNgorICAgICArICAgW2M1XSBjNQorICAgICsrICAgW2M0XSBjNAorICAgKysrKyAgW2MzXSBjb21taXQgMworICArICAgICAgW2MyXSBjb21taXQgMgorKysrKysrKyogW2MwXSBjb21taXQgMAorJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLWdwZy5zaAorCitwcmludGYgJyVzXG4nIDEgMiAzIDQgNSA2IDcgOCA5ID5maWxlCitwcmludGYgJyVzXG4nICcxIFgnIDIgMyA0IDUgNiA3IDggOSA+ZmlsZS4xCitwcmludGYgJyVzXG4nIDEgMiAzIDQgJzUgWCcgNiA3IDggOSA+ZmlsZS41CitwcmludGYgJyVzXG4nIDEgMiAzIDQgNSA2IDcgOCAnOSBYJyA+ZmlsZS45CitwcmludGYgJyVzXG4nICcxIFgnIDIgMyA0IDUgNiA3IDggOSA+cmVzdWx0LjEKK3ByaW50ZiAnJXNcbicgJzEgWCcgMiAzIDQgJzUgWCcgNiA3IDggOSA+cmVzdWx0LjEtNQorcHJpbnRmICclc1xuJyAnMSBYJyAyIDMgNCAnNSBYJyA2IDcgOCAnOSBYJyA+cmVzdWx0LjEtNS05Cis+ZW1wdHkKKworY3JlYXRlX21lcmdlX21zZ3MgKCkgeworCWVjaG8gIk1lcmdlIHRhZyAnYzInIiA+bXNnLjEtNSAmJgorCWVjaG8gIk1lcmdlIHRhZ3MgJ2MyJyBhbmQgJ2MzJyIgPm1zZy4xLTUtOSAmJgorCXsKKwkJZWNobyAiU3F1YXNoZWQgY29tbWl0IG9mIHRoZSBmb2xsb3dpbmc6IiAmJgorCQllY2hvICYmCisJCWdpdCBsb2cgLS1uby1tZXJnZXMgXkhFQUQgYzEKKwl9ID5zcXVhc2guMSAmJgorCXsKKwkJZWNobyAiU3F1YXNoZWQgY29tbWl0IG9mIHRoZSBmb2xsb3dpbmc6IiAmJgorCQllY2hvICYmCisJCWdpdCBsb2cgLS1uby1tZXJnZXMgXkhFQUQgYzIKKwl9ID5zcXVhc2guMS01ICYmCisJeworCQllY2hvICJTcXVhc2hlZCBjb21taXQgb2YgdGhlIGZvbGxvd2luZzoiICYmCisJCWVjaG8gJiYKKwkJZ2l0IGxvZyAtLW5vLW1lcmdlcyBeSEVBRCBjMiBjMworCX0gPnNxdWFzaC4xLTUtOSAmJgorCTogPm1zZy5ub2xvZ2ZmICYmCisJOiA+bXNnLm5vbG9nbm9mZiAmJgorCXsKKwkJZWNobyAiKiB0YWcgJ2MzJzoiICYmCisJCWVjaG8gIiAgY29tbWl0IDMiCisJfSA+bXNnLmxvZworfQorCit2ZXJpZnlfbWVyZ2UgKCkgeworCXRlc3RfY21wICIkMiIgIiQxIiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwlpZiB0ZXN0IC1uICIkMyIKKwl0aGVuCisJCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMgSEVBRCA+bXNnLmFjdCAmJgorCQl0ZXN0X2NtcCAiJDMiIG1zZy5hY3QKKwlmaQorfQorCit2ZXJpZnlfaGVhZCAoKSB7CisJZWNobyAiJDEiID5oZWFkLmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5oZWFkLmFjdHVhbCAmJgorCXRlc3RfY21wIGhlYWQuZXhwZWN0ZWQgaGVhZC5hY3R1YWwKK30KKwordmVyaWZ5X3BhcmVudHMgKCkgeworCXByaW50ZiAnJXNcbicgIiRAIiA+cGFyZW50cy5leHBlY3RlZCAmJgorCT5wYXJlbnRzLmFjdHVhbCAmJgorCWk9MSAmJgorCXdoaWxlIHRlc3QgJGkgLWxlICQjCisJZG8KKwkJZ2l0IHJldi1wYXJzZSBIRUFEXiRpID4+cGFyZW50cy5hY3R1YWwgJiYKKwkJaT0kKGV4cHIgJGkgKyAxKSB8fAorCQlyZXR1cm4gMQorCWRvbmUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5ICJIRUFEXiRpIiAmJgorCXRlc3RfY21wIHBhcmVudHMuZXhwZWN0ZWQgcGFyZW50cy5hY3R1YWwKK30KKwordmVyaWZ5X21lcmdlaGVhZHMgKCkgeworCXByaW50ZiAnJXNcbicgIiRAIiA+bWVyZ2VoZWFkLmV4cGVjdGVkICYmCisJd2hpbGUgcmVhZCBzaGExIHJlc3QKKwlkbworCQlnaXQgcmV2LXBhcnNlICRzaGExCisJZG9uZSA8LmdpdC9NRVJHRV9IRUFEID5tZXJnZWhlYWQuYWN0dWFsICYmCisJdGVzdF9jbXAgbWVyZ2VoZWFkLmV4cGVjdGVkIG1lcmdlaGVhZC5hY3R1YWwKK30KKwordmVyaWZ5X25vX21lcmdlaGVhZCAoKSB7CisJISB0ZXN0IC1lIC5naXQvTUVSR0VfSEVBRAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvbW1pdCAwIiAmJgorCWdpdCB0YWcgYzAgJiYKKwljMD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwljcCBmaWxlLjEgZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gImNvbW1pdCAxIiAmJgorCWdpdCB0YWcgYzEgJiYKKwljMT0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICIkYzAiICYmCisJY3AgZmlsZS41IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tICJjb21taXQgMiIgJiYKKwlnaXQgdGFnIGMyICYmCisJYzI9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCAiJGMwIiAmJgorCWNwIGZpbGUuOSBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAiY29tbWl0IDMiICYmCisJZ2l0IHRhZyBjMyAmJgorCWMzPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCByZXNldCAtLWhhcmQgIiRjMCIgJiYKKwljcmVhdGVfbWVyZ2VfbXNncworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgb3B0aW9uIHBhcnNpbmcnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLSQgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1zdWNoIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIGZvb2JhciBjMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcz1mb29iYXIgYzEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLW0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgLWggd2l0aCBpbnZhbGlkIGluZGV4JyAnCisJbWtkaXIgYnJva2VuICYmCisJKAorCQljZCBicm9rZW4gJiYKKwkJZ2l0IGluaXQgJiYKKwkJPi5naXQvaW5kZXggJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxMjkgZ2l0IG1lcmdlIC1oIDI+dXNhZ2UKKwkpICYmCisJdGVzdF9pMThuZ3JlcCAiW1V1XXNhZ2U6IGdpdCBtZXJnZSIgYnJva2VuL3VzYWdlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdCBub24tc3RyYXRlZ3kgd2l0aCBhIGdpdC1tZXJnZS1mb28gbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyBpbmRleCBjMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxJyAnCisJZWNobyAiT0JKSUQgSEVBREB7MH06IG1lcmdlIGMxOiBGYXN0LWZvcndhcmQiID5yZWZsb2cuZXhwZWN0ZWQgJiYKKworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgYzEgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMSAmJgorCXZlcmlmeV9oZWFkICIkYzEiICYmCisKKwlnaXQgcmVmbG9nIC0xID5yZWZsb2cuYWN0dWFsICYmCisJc2VkICJzLyRfeDA1WzAtOWEtZl0qL09CSklEL2ciIHJlZmxvZy5hY3R1YWwgPnJlZmxvZy5mdXp6eSAmJgorCXRlc3RfY21wIHJlZmxvZy5leHBlY3RlZCByZWZsb2cuZnV6enkKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxIHdpdGggLS1mZi1vbmx5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLWZmLW9ubHkgYzEgJiYKKwlnaXQgbWVyZ2UgLS1mZi1vbmx5IEhFQUQgYzAgYzEgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMSAmJgorCXZlcmlmeV9oZWFkICIkYzEiCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZnJvbSB1bmJvcm4gYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciAmJgorCXRlc3RfbWlnaHRfZmFpbCBnaXQgYnJhbmNoIC1EIGtpZCAmJgorCisJZWNobyAiT0JKSUQgSEVBREB7MH06IGluaXRpYWwgcHVsbCIgPnJlZmxvZy5leHBlY3RlZCAmJgorCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIGtpZCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IC1mIG1hc3RlciIgJiYKKwlnaXQgcm0gLWZyIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLS1mZi1vbmx5IGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfaGVhZCAiJGMxIiAmJgorCisJZ2l0IHJlZmxvZyAtMSA+cmVmbG9nLmFjdHVhbCAmJgorCXNlZCAicy8kX3gwNVswLTlhLWZdWzAtOWEtZl0vT0JKSUQvZyIgcmVmbG9nLmFjdHVhbCA+cmVmbG9nLmZ1enp5ICYmCisJdGVzdF9jbXAgcmVmbG9nLmV4cGVjdGVkIHJlZmxvZy5mdXp6eQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIGMyICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSBtc2cuMS01ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgYW5kIGMzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSBjMiBjMyAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUtOSBtc2cuMS01LTkgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyICRjMworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlcyB3aXRoIC0tZmYtb25seScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X3RpY2sgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1mZi1vbmx5IGMyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSBjMyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWZmLW9ubHkgYzIgYzMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIGMzICYmCisJdmVyaWZ5X2hlYWQgJGMzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlcyB3aXRoIG1lcmdlLmZmPW9ubHknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF90aWNrICYmCisJdGVzdF9jb25maWcgbWVyZ2UuZmYgIm9ubHkiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMyIGMzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSBjMyAmJgorCXZlcmlmeV9oZWFkICRjMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMCB3aXRoIGMxIChuby1jb21taXQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgJGMxCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAobm8tY29tbWl0KScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgYzIgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisJdmVyaWZ5X2hlYWQgJGMxICYmCisJdmVyaWZ5X21lcmdlaGVhZHMgJGMyCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiBhbmQgYzMgKG5vLWNvbW1pdCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGMyIGMzICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNS05ICYmCisJdmVyaWZ5X2hlYWQgJGMxICYmCisJdmVyaWZ5X21lcmdlaGVhZHMgJGMyICRjMworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEgKHNxdWFzaCknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IG1lcmdlIC0tc3F1YXNoIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfaGVhZCAkYzAgJiYKKwl2ZXJpZnlfbm9fbWVyZ2VoZWFkICYmCisJdGVzdF9jbXAgc3F1YXNoLjEgLmdpdC9TUVVBU0hfTVNHCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSAoc3F1YXNoLCBmZi1vbmx5KScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1zcXVhc2ggLS1mZi1vbmx5IGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfaGVhZCAkYzAgJiYKKwl2ZXJpZnlfbm9fbWVyZ2VoZWFkICYmCisJdGVzdF9jbXAgc3F1YXNoLjEgLmdpdC9TUVVBU0hfTVNHCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAoc3F1YXNoKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLS1zcXVhc2ggYzIgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisJdmVyaWZ5X2hlYWQgJGMxICYmCisJdmVyaWZ5X25vX21lcmdlaGVhZCAmJgorCXRlc3RfY21wIHNxdWFzaC4xLTUgLmdpdC9TUVVBU0hfTVNHCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5zdWNjZXNzZnVsIG1lcmdlIG9mIGMxIHdpdGggYzIgKHNxdWFzaCwgZmYtb25seSknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tc3F1YXNoIC0tZmYtb25seSBjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgYW5kIGMzIChzcXVhc2gpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtLXNxdWFzaCBjMiBjMyAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUtOSAmJgorCXZlcmlmeV9oZWFkICRjMSAmJgorCXZlcmlmeV9ub19tZXJnZWhlYWQgJiYKKwl0ZXN0X2NtcCBzcXVhc2guMS01LTkgLmdpdC9TUVVBU0hfTVNHCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAobm8tY29tbWl0IGluIGNvbmZpZyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tbm8tY29tbWl0IiAmJgorCWdpdCBtZXJnZSBjMiAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgJiYKKwl2ZXJpZnlfaGVhZCAkYzEgJiYKKwl2ZXJpZnlfbWVyZ2VoZWFkcyAkYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIChsb2cgaW4gY29uZmlnKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbWVyZ2UgLS1sb2cgYzIgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT10Zm9ybWF0OiVzJW4lYiA+ZXhwZWN0ICYmCisKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1sb2ciICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSBjMiAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMlbiViID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAobG9nIGluIGNvbmZpZyBnZXRzIG92ZXJyaWRkZW4pJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSBjMiAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMlbiViID5leHBlY3QgJiYKKworCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLW5vLWxvZyIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5sb2cgInRydWUiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSBjMiAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PXRmb3JtYXQ6JXMlbiViID5hY3R1YWwgJiYKKworCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAoc3F1YXNoIGluIGNvbmZpZyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdF9jb25maWcgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgIi0tc3F1YXNoIiAmJgorCWdpdCBtZXJnZSBjMiAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgJiYKKwl2ZXJpZnlfaGVhZCAkYzEgJiYKKwl2ZXJpZnlfbm9fbWVyZ2VoZWFkICYmCisJdGVzdF9jbXAgc3F1YXNoLjEtNSAuZ2l0L1NRVUFTSF9NU0cKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBjb25maWcgb3B0aW9uIC1uIHdpdGggLS1zdW1tYXJ5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItbiIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLS1zdW1tYXJ5IGMyID5kaWZmc3RhdC50eHQgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01IG1zZy4xLTUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyICYmCisJaWYgISBncmVwICJeIGZpbGUgfCAgKjIgKy0kIiBkaWZmc3RhdC50eHQKKwl0aGVuCisJCWVjaG8gIltPT1BTXSBkaWZmc3RhdCB3YXMgbm90IGdlbmVyYXRlZCB3aXRoIC0tc3VtbWFyeSIKKwkJZmFsc2UKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVycmlkZSBjb25maWcgb3B0aW9uIC1uIHdpdGggLS1zdGF0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItbiIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLS1zdGF0IGMyID5kaWZmc3RhdC50eHQgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01IG1zZy4xLTUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyICYmCisJaWYgISBncmVwICJeIGZpbGUgfCAgKjIgKy0kIiBkaWZmc3RhdC50eHQKKwl0aGVuCisJCWVjaG8gIltPT1BTXSBkaWZmc3RhdCB3YXMgbm90IGdlbmVyYXRlZCB3aXRoIC0tc3RhdCIKKwkJZmFsc2UKKwlmaQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJyaWRlIGNvbmZpZyBvcHRpb24gLS1zdGF0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLXN0YXQiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC1uIGMyID5kaWZmc3RhdC50eHQgJiYKKwl2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01IG1zZy4xLTUgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzEgJGMyICYmCisJaWYgZ3JlcCAiXiBmaWxlIHwgICoyICstJCIgZGlmZnN0YXQudHh0CisJdGhlbgorCQllY2hvICJbT09QU10gZGlmZnN0YXQgd2FzIGdlbmVyYXRlZCIKKwkJZmFsc2UKKwlmaQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKG92ZXJyaWRlIC0tbm8tY29tbWl0KScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1uby1jb21taXQiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tY29tbWl0IGMyICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSBtc2cuMS01ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgKG92ZXJyaWRlIC0tc3F1YXNoKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1zcXVhc2giICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIC0tbm8tc3F1YXNoIGMyICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSBtc2cuMS01ICYmCisJdmVyaWZ5X3BhcmVudHMgJGMxICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEgKG5vLWZmKScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X3BhcmVudHMgJGMwICRjMQorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMwIHdpdGggYzEgKG1lcmdlLmZmPWZhbHNlKScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5mZiAiZmFsc2UiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxCisnCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbWJpbmUgYnJhbmNoLm1hc3Rlci5tZXJnZW9wdGlvbnMgd2l0aCBtZXJnZS5mZicgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1mZiIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5mZiAiZmFsc2UiICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIGMxICYmCisJdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEgJiYKKwl2ZXJpZnlfcGFyZW50cyAiJGMwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0b2xlcmF0ZSB1bmtub3duIHZhbHVlcyBmb3IgbWVyZ2UuZmYnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9jb25maWcgbWVyZ2UuZmYgInNvbWV0aGluZy1uZXciICYmCisJdGVzdF90aWNrICYmCisJZ2l0IG1lcmdlIGMxIDI+bWVzc2FnZSAmJgorCXZlcmlmeV9oZWFkICIkYzEiICYmCisJdGVzdF9jbXAgZW1wdHkgbWVzc2FnZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21iaW5pbmcgLS1zcXVhc2ggYW5kIC0tbm8tZmYgaXMgcmVmdXNlZCcgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1zcXVhc2ggLS1uby1mZiBjMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLW5vLWZmIC0tc3F1YXNoIGMxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbiAtLWZmLW9ubHkgb3ZlcndyaXRlcyAtLW5vLWZmJyAnCisJZ2l0IG1lcmdlIC0tbm8tZmYgLS1mZi1vbmx5IGMxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tZmYgLS1mZi1vbmx5IGMyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29wdGlvbiAtLW5vLWZmIG92ZXJyaWRlcyBtZXJnZS5mZj1vbmx5IGNvbmZpZycgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZS5mZiBvbmx5ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgYzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzAgd2l0aCBjMSAoZmYgb3ZlcnJpZGVzIG5vLWZmKScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwl0ZXN0X2NvbmZpZyBicmFuY2gubWFzdGVyLm1lcmdlb3B0aW9ucyAiLS1uby1mZiIgJiYKKwlnaXQgbWVyZ2UgLS1mZiBjMSAmJgorCXZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xICYmCisJdmVyaWZ5X2hlYWQgJGMxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGxvZyBtZXNzYWdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLW5vLWxvZyBjMiAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolYiBIRUFEID5tc2cuYWN0ICYmCisJdGVzdF9jbXAgbXNnLm5vbG9nZmYgbXNnLmFjdCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfY29uZmlnIGJyYW5jaC5tYXN0ZXIubWVyZ2VvcHRpb25zICItLW5vLWZmIiAmJgorCWdpdCBtZXJnZSAtLW5vLWxvZyBjMiAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolYiBIRUFEID5tc2cuYWN0ICYmCisJdGVzdF9jbXAgbXNnLm5vbG9nbm9mZiBtc2cuYWN0ICYmCisKKwlnaXQgbWVyZ2UgLS1sb2cgYzMgJiYKKwlnaXQgc2hvdyAtcyAtLXByZXR0eT1mb3JtYXQ6JWIgSEVBRCA+bXNnLmFjdCAmJgorCXRlc3RfY21wIG1zZy5sb2cgbXNnLmFjdCAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCBIRUFEXiAmJgorCXRlc3RfY29uZmlnIG1lcmdlLmxvZyAieWVzIiAmJgorCWdpdCBtZXJnZSBjMyAmJgorCWdpdCBzaG93IC1zIC0tcHJldHR5PWZvcm1hdDolYiBIRUFEID5tc2cuYWN0ICYmCisJdGVzdF9jbXAgbXNnLmxvZyBtc2cuYWN0CisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMCwgYzIsIGMwLCBhbmQgYzEnICcKKyAgICAgICBnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisgICAgICAgdGVzdF90aWNrICYmCisgICAgICAgZ2l0IG1lcmdlIGMwIGMyIGMwIGMxICYmCisgICAgICAgdmVyaWZ5X21lcmdlIGZpbGUgcmVzdWx0LjEtNSAmJgorICAgICAgIHZlcmlmeV9wYXJlbnRzICRjMSAkYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMwLCBjMiwgYzAsIGFuZCBjMScgJworICAgICAgIGdpdCByZXNldCAtLWhhcmQgYzEgJiYKKyAgICAgICB0ZXN0X3RpY2sgJiYKKyAgICAgICBnaXQgbWVyZ2UgYzAgYzIgYzAgYzEgJiYKKyAgICAgICB2ZXJpZnlfbWVyZ2UgZmlsZSByZXN1bHQuMS01ICYmCisgICAgICAgdmVyaWZ5X3BhcmVudHMgJGMxICRjMgorJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzEgYW5kIGMyJyAnCisgICAgICAgZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorICAgICAgIHRlc3RfdGljayAmJgorICAgICAgIGdpdCBtZXJnZSBjMSBjMiAmJgorICAgICAgIHZlcmlmeV9tZXJnZSBmaWxlIHJlc3VsdC4xLTUgJiYKKyAgICAgICB2ZXJpZnlfcGFyZW50cyAkYzEgJGMyCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZmFzdC1mb3J3YXJkIGluIGEgZGlydHkgdHJlZScgJworICAgICAgIGdpdCByZXNldCAtLWhhcmQgYzAgJiYKKyAgICAgICBtdiBmaWxlIGZpbGUxICYmCisgICAgICAgY2F0IGZpbGUxID5maWxlICYmCisgICAgICAgcm0gLWYgZmlsZTEgJiYKKyAgICAgICBnaXQgbWVyZ2UgYzIKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbi1pbmRleCBtZXJnZScgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiAtcyByZXNvbHZlIGMxID5vdXQgJiYKKwl0ZXN0X2kxOG5ncmVwICJXb25kZXJmdWwuIiBvdXQgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmcmVzaCB0aGUgaW5kZXggYmVmb3JlIG1lcmdpbmcnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJY3AgZmlsZSBmaWxlLm4gJiYgbXYgLWYgZmlsZS5uIGZpbGUgJiYKKwlnaXQgbWVyZ2UgYzMKKycKKworY2F0ID5leHBlY3RlZC5icmFuY2ggPDxcRU9GCitNZXJnZSBicmFuY2ggJ2M1LWJyYW5jaCcgKGVhcmx5IHBhcnQpCitFT0YKK2NhdCA+ZXhwZWN0ZWQudGFnIDw8XEVPRgorTWVyZ2UgY29tbWl0ICdjNX4xJworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGVhcmx5IHBhcnQgb2YgYzInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMzICYmCisJZWNobyBjNCA+YzQuYyAmJgorCWdpdCBhZGQgYzQuYyAmJgorCWdpdCBjb21taXQgLW0gYzQgJiYKKwlnaXQgdGFnIGM0ICYmCisJZWNobyBjNSA+YzUuYyAmJgorCWdpdCBhZGQgYzUuYyAmJgorCWdpdCBjb21taXQgLW0gYzUgJiYKKwlnaXQgdGFnIGM1ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMyAmJgorCWVjaG8gYzYgPmM2LmMgJiYKKwlnaXQgYWRkIGM2LmMgJiYKKwlnaXQgY29tbWl0IC1tIGM2ICYmCisJZ2l0IHRhZyBjNiAmJgorCWdpdCBicmFuY2ggLWYgYzUtYnJhbmNoIGM1ICYmCisJZ2l0IG1lcmdlIGM1LWJyYW5jaH4xICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9dGZvcm1hdDolcyBIRUFEID5hY3R1YWwuYnJhbmNoICYmCisJZ2l0IHJlc2V0IC0ta2VlcCBIRUFEXiAmJgorCWdpdCBtZXJnZSBjNX4xICYmCisJZ2l0IHNob3cgLXMgLS1wcmV0dHk9dGZvcm1hdDolcyBIRUFEID5hY3R1YWwudGFnICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQuYnJhbmNoIGFjdHVhbC5icmFuY2ggJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC50YWcgYWN0dWFsLnRhZworJworCit0ZXN0X2RlYnVnICdnaXQgbG9nIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLW9uZWxpbmUgLS1hbGwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tbm8tZmYgLS1uby1jb21taXQgJiYgY29tbWl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBtZXJnZSAtLW5vLWZmIC0tbm8tY29tbWl0IGMxICYmCisJRURJVE9SPTogZ2l0IGNvbW1pdCAmJgorCXZlcmlmeV9wYXJlbnRzICRjMCAkYzEKKycKKwordGVzdF9kZWJ1ZyAnZ2l0IGxvZyAtLWdyYXBoIC0tZGVjb3JhdGUgLS1vbmVsaW5lIC0tYWxsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbWVuZGluZyBuby1mZiBtZXJnZSBjb21taXQnICcKKwlFRElUT1I9OiBnaXQgY29tbWl0IC0tYW1lbmQgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxCisnCisKK3Rlc3RfZGVidWcgJ2dpdCBsb2cgLS1ncmFwaCAtLWRlY29yYXRlIC0tb25lbGluZSAtLWFsbCcKKworY2F0ID5lZGl0b3IgPDxcRU9GCisjIS9iaW4vc2gKKyMgQWRkIGEgbmV3IG1lc3NhZ2Ugc3RyaW5nIHRoYXQgd2FzIG5vdCBpbiB0aGUgdGVtcGxhdGUKKygKKwllY2hvICJNZXJnZSB3b3JrIGRvbmUgb24gdGhlIHNpZGUgYnJhbmNoIGMxIgorCWVjaG8KKwljYXQgPCIkMSIKKykgPiIkMS50bXAiICYmIG12ICIkMS50bXAiICIkMSIKKyMgc3RyaXAgY29tbWVudHMgYW5kIGJsYW5rIGxpbmVzIGZyb20gZW5kIG9mIG1lc3NhZ2UKK3NlZCAtZSAnL14jL2QnIDwgIiQxIiB8IHNlZCAtZSA6YSAtZSAnL15cbiokL3skZDtOO2JhJyAtZSAnfScgPiBleHBlY3RlZAorRU9GCitjaG1vZCA3NTUgZWRpdG9yCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIC0tbm8tZmYgLS1lZGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCUVESVRPUj0uL2VkaXRvciBnaXQgbWVyZ2UgLS1uby1mZiAtLWVkaXQgYzEgJiYKKwl2ZXJpZnlfcGFyZW50cyAkYzAgJGMxICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEID5yYXcgJiYKKwlncmVwICJ3b3JrIGRvbmUgb24gdGhlIHNpZGUgYnJhbmNoIiByYXcgJiYKKwlzZWQgIjEsL14kL2QiID5hY3R1YWwgcmF3ICYmCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdGVkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdtZXJnZSAtLWZmLW9ubHkgdGFnJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWdpdCBjb21taXQgLS1hbGxvdy1lbXB0eSAtbSAiQSBuZXdlciBjb21taXQiICYmCisJZ2l0IHRhZyAtcyAtbSAiQSBuZXdlciBjb21taXQiIHNpZ25lZCAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKworCWdpdCBtZXJnZSAtLWZmLW9ubHkgc2lnbmVkICYmCisJZ2l0IHJldi1wYXJzZSBzaWduZWReMCA+ZXhwZWN0ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdtZXJnZSAtLW5vLWVkaXQgdGFnIHNob3VsZCBza2lwIGVkaXRvcicgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgY29tbWl0IC0tYWxsb3ctZW1wdHkgLW0gIkEgbmV3ZXIgY29tbWl0IiAmJgorCWdpdCB0YWcgLWYgLXMgLW0gIkEgbmV3ZXIgY29tbWl0IiBzaWduZWQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisKKwlFRElUT1I9ZmFsc2UgZ2l0IG1lcmdlIC0tbm8tZWRpdCBzaWduZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHNpZ25lZF4wID5leHBlY3QgJiYKKwlnaXQgcmV2LXBhcnNlIEhFQUReMiA+YWN0dWFsICYmCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDEtbWVyZ2UtcHVsbC1jb25maWcuc2ggYi90L3Q3NjAxLW1lcmdlLXB1bGwtY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2YzQ0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjAxLW1lcmdlLXB1bGwtY29uZmlnLnNoCkBAIC0wLDAgKzEsMTg1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IG1lcmdlCisKK1Rlc3RpbmcgcHVsbC4qIGNvbmZpZ3VyYXRpb24gcGFyc2luZy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYzAgPmMwLmMgJiYKKwlnaXQgYWRkIGMwLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMwICYmCisJZ2l0IHRhZyBjMCAmJgorCWVjaG8gYzEgPmMxLmMgJiYKKwlnaXQgYWRkIGMxLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMxICYmCisJZ2l0IHRhZyBjMSAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIGMyID5jMi5jICYmCisJZ2l0IGFkZCBjMi5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMiAmJgorCWdpdCB0YWcgYzIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjMyA+YzMuYyAmJgorCWdpdCBhZGQgYzMuYyAmJgorCWdpdCBjb21taXQgLW0gYzMgJiYKKwlnaXQgdGFnIGMzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzInICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJdGVzdCAtZiBjMC5jICYmCisJdGVzdCAtZiBjMS5jICYmCisJdGVzdCAhIC1mIGMyLmMgJiYKKwl0ZXN0ICEgLWYgYzMuYyAmJgorCWdpdCBtZXJnZSBjMiAmJgorCXRlc3QgLWYgYzEuYyAmJgorCXRlc3QgLWYgYzIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmQgcHVsbCBzdWNjZWVkcyB3aXRoICJ0cnVlIiBpbiBwdWxsLmZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfY29uZmlnIHB1bGwuZmYgdHJ1ZSAmJgorCWdpdCBwdWxsIC4gYzEgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiID0gIiQoZ2l0IHJldi1wYXJzZSBjMSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwuZmY9dHJ1ZSBvdmVycmlkZXMgbWVyZ2UuZmY9ZmFsc2UnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJdGVzdF9jb25maWcgbWVyZ2UuZmYgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZyBwdWxsLmZmIHRydWUgJiYKKwlnaXQgcHVsbCAuIGMxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiA9ICIkKGdpdCByZXYtcGFyc2UgYzEpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWZvcndhcmQgcHVsbCBjcmVhdGVzIG1lcmdlIHdpdGggImZhbHNlIiBpbiBwdWxsLmZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfY29uZmlnIHB1bGwuZmYgZmFsc2UgJiYKKwlnaXQgcHVsbCAuIGMxICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiID0gIiQoZ2l0IHJldi1wYXJzZSBjMCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiID0gIiQoZ2l0IHJldi1wYXJzZSBjMSkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3B1bGwgcHJldmVudHMgbm9uLWZhc3QtZm9yd2FyZCB3aXRoICJvbmx5IiBpbiBwdWxsLmZmJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCXRlc3RfY29uZmlnIHB1bGwuZmYgb25seSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBwdWxsIC4gYzMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiAob3VycyBpbiBwdWxsLnR3b2hlYWQpJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBjb25maWcgcHVsbC50d29oZWFkIG91cnMgJiYKKwlnaXQgbWVyZ2UgYzIgJiYKKwl0ZXN0IC1mIGMxLmMgJiYKKwkhIHRlc3QgLWYgYzIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMSB3aXRoIGMyIGFuZCBjMyAocmVjdXJzaXZlIGluIHB1bGwub2N0b3B1cyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IGNvbmZpZyBwdWxsLm9jdG9wdXMgInJlY3Vyc2l2ZSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzIgYzMgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIgYW5kIGMzIChyZWN1cnNpdmUgYW5kIG9jdG9wdXMgaW4gcHVsbC5vY3RvcHVzKScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgY29uZmlnIHB1bGwub2N0b3B1cyAicmVjdXJzaXZlIG9jdG9wdXMiICYmCisJZ2l0IG1lcmdlIGMyIGMzICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzIpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzMpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4zKSIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCXRlc3QgLWYgYzAuYyAmJgorCXRlc3QgLWYgYzEuYyAmJgorCXRlc3QgLWYgYzIuYyAmJgorCXRlc3QgLWYgYzMuYworJworCitjb25mbGljdF9jb3VudCgpCit7CisJeworCQlnaXQgZGlmZi1maWxlcyAtLW5hbWUtb25seQorCQlnaXQgbHMtZmlsZXMgLS11bm1lcmdlZAorCX0gfCB3YyAtbAorfQorCisjIGM0IC0gYzUKKyMgICAgXCBjNgorIworIyBUaGVyZSBhcmUgdHdvIGNvbmZsaWN0cyBoZXJlOgorIworIyAxKSBCZWNhdXNlIGZvby5jIGlzIHJlbmFtZWQgdG8gYmFyLmMsIHJlY3Vyc2l2ZSB3aWxsIGhhbmRsZSB0aGlzLAorIyByZXNvbHZlIHdvbid0LgorIworIyAyKSBPbmUgaW4gY29uZmxpY3QuYyBhbmQgdGhhdCB3aWxsIGFsd2F5cyBmYWlsLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBjb25mbGljdGVkIG1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWVjaG8gQSA+Y29uZmxpY3QuYyAmJgorCWdpdCBhZGQgY29uZmxpY3QuYyAmJgorCWVjaG8gY29udGVudHMgPmZvby5jICYmCisJZ2l0IGFkZCBmb28uYyAmJgorCWdpdCBjb21taXQgLW0gYzQgJiYKKwlnaXQgdGFnIGM0ICYmCisJZWNobyBCID5jb25mbGljdC5jICYmCisJZ2l0IGFkZCBjb25mbGljdC5jICYmCisJZ2l0IG12IGZvby5jIGJhci5jICYmCisJZ2l0IGNvbW1pdCAtbSBjNSAmJgorCWdpdCB0YWcgYzUgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM0ICYmCisJZWNobyBDID5jb25mbGljdC5jICYmCisJZ2l0IGFkZCBjb25mbGljdC5jICYmCisJZWNobyBzZWNvbmRsaW5lID4+IGZvby5jICYmCisJZ2l0IGFkZCBmb28uYyAmJgorCWdpdCBjb21taXQgLW0gYzYgJiYKKwlnaXQgdGFnIGM2CisnCisKKyMgRmlyc3QgZG8gdGhlIG1lcmdlIHdpdGggcmVzb2x2ZSBhbmQgcmVjdXJzaXZlIHRoZW4gdmVyaWZ5IHRoYXQKKyMgcmVjdXJzaXZlIGlzIGNob3Nlbi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgcGlja3MgdXAgdGhlIGJlc3QgcmVzdWx0JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBwdWxsLnR3b2hlYWQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgYzYgJiYKKwlyZXNvbHZlX2NvdW50PSQoY29uZmxpY3RfY291bnQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgYzYgJiYKKwlyZWN1cnNpdmVfY291bnQ9JChjb25mbGljdF9jb3VudCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlY3Vyc2l2ZSAtcyByZXNvbHZlIGM2ICYmCisJYXV0b19jb3VudD0kKGNvbmZsaWN0X2NvdW50KSAmJgorCXRlc3QgJGF1dG9fY291bnQgPSAkcmVjdXJzaXZlX2NvdW50ICYmCisJdGVzdCAkYXV0b19jb3VudCAhPSAkcmVzb2x2ZV9jb3VudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBwaWNrcyB1cCB0aGUgYmVzdCByZXN1bHQgKGZyb20gY29uZmlnKScgJworCWdpdCBjb25maWcgcHVsbC50d29oZWFkICJyZWN1cnNpdmUgcmVzb2x2ZSIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgYzYgJiYKKwlyZXNvbHZlX2NvdW50PSQoY29uZmxpY3RfY291bnQpICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtcyByZWN1cnNpdmUgYzYgJiYKKwlyZWN1cnNpdmVfY291bnQ9JChjb25mbGljdF9jb3VudCkgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGM2ICYmCisJYXV0b19jb3VudD0kKGNvbmZsaWN0X2NvdW50KSAmJgorCXRlc3QgJGF1dG9fY291bnQgPSAkcmVjdXJzaXZlX2NvdW50ICYmCisJdGVzdCAkYXV0b19jb3VudCAhPSAkcmVzb2x2ZV9jb3VudAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBlcnJvcnMgb3V0IG9uIGludmFsaWQgc3RyYXRlZ3knICcKKwlnaXQgY29uZmlnIHB1bGwudHdvaGVhZCAiZm9vYmFyIiAmJgorCWdpdCByZXNldCAtLWhhcmQgYzUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZXJyb3JzIG91dCBvbiBpbnZhbGlkIHN0cmF0ZWd5JyAnCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBwdWxsLnR3b2hlYWQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGM1ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zICJyZXNvbHZlIHJlY3Vyc2l2ZSIgYzYKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjAyLW1lcmdlLW9jdG9wdXMtbWFueS5zaCBiL3QvdDc2MDItbWVyZ2Utb2N0b3B1cy1tYW55LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk1NWYwOWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjAyLW1lcmdlLW9jdG9wdXMtbWFueS5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZQorCitUZXN0aW5nIG9jdG9wdXMgbWVyZ2Ugd2l0aCBtb3JlIHRoYW4gMjUgcmVmcy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYzAgPiBjMC5jICYmCisJZ2l0IGFkZCBjMC5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMCAmJgorCWdpdCB0YWcgYzAgJiYKKwlpPTEgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sZSAzMAorCWRvCisJCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwkJZWNobyBjJGkgPiBjJGkuYyAmJgorCQlnaXQgYWRkIGMkaS5jICYmCisJCWdpdCBjb21taXQgLW0gYyRpICYmCisJCWdpdCB0YWcgYyRpICYmCisJCWk9YGV4cHIgJGkgKyAxYCB8fCByZXR1cm4gMQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzEgd2l0aCBjMiwgYzMsIGM0LCAuLi4gYzI5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWk9MiAmJgorCXJlZnM9IiIgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sZSAzMAorCWRvCisJCXJlZnM9IiRyZWZzIGMkaSIKKwkJaT1gZXhwciAkaSArIDFgCisJZG9uZSAmJgorCWdpdCBtZXJnZSAkcmVmcyAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiICE9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJaT0xICYmCisJd2hpbGUgdGVzdCAkaSAtbGUgMzAKKwlkbworCQl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYyRpKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReJGkpIiAmJgorCQlpPWBleHByICRpICsgMWAgfHwgcmV0dXJuIDEKKwlkb25lICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwlpPTEgJiYKKwl3aGlsZSB0ZXN0ICRpIC1sZSAzMAorCWRvCisJCXRlc3QgLWYgYyRpLmMgJiYKKwkJaT1gZXhwciAkaSArIDFgIHx8IHJldHVybiAxCisJZG9uZQorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorVHJ5aW5nIHNpbXBsZSBtZXJnZSB3aXRoIGMyCitUcnlpbmcgc2ltcGxlIG1lcmdlIHdpdGggYzMKK1RyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCBjNAorTWVyZ2UgbWFkZSBieSB0aGUgJ29jdG9wdXMnIHN0cmF0ZWd5LgorIGMyLmMgfCAxICsKKyBjMy5jIHwgMSArCisgYzQuYyB8IDEgKworIDMgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisgY3JlYXRlIG1vZGUgMTAwNjQ0IGMyLmMKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYzMuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBjNC5jCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb3V0cHV0IHVzZXMgcHJldHR5IG5hbWVzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSBjMiBjMyBjNCA+YWN0dWFsICYmCisJdGVzdF9pMThuY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8XEVPRgorTWVyZ2UgbWFkZSBieSB0aGUgJ3JlY3Vyc2l2ZScgc3RyYXRlZ3kuCisgYzUuYyB8IDEgKworIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQorIGNyZWF0ZSBtb2RlIDEwMDY0NCBjNS5jCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgcmVkdWNlcyBpcnJlbGV2YW50IHJlbW90ZSBoZWFkcycgJworCUdJVF9NRVJHRV9WRVJCT1NJVFk9MCBnaXQgbWVyZ2UgYzQgYzUgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK0Zhc3QtZm9yd2FyZGluZyB0bzogYzEKK1RyeWluZyBzaW1wbGUgbWVyZ2Ugd2l0aCBjMgorTWVyZ2UgbWFkZSBieSB0aGUgJ29jdG9wdXMnIHN0cmF0ZWd5LgorIGMxLmMgfCAxICsKKyBjMi5jIHwgMSArCisgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKykKKyBjcmVhdGUgbW9kZSAxMDA2NDQgYzEuYworIGNyZWF0ZSBtb2RlIDEwMDY0NCBjMi5jCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgZmFzdC1mb3J3YXJkIG91dHB1dCB1c2VzIHByZXR0eSBuYW1lcycgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgYzEgYzIgPmFjdHVhbCAmJgorCXRlc3RfaTE4bmNtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjAzLW1lcmdlLXJlZHVjZS1oZWFkcy5zaCBiL3QvdDc2MDMtbWVyZ2UtcmVkdWNlLWhlYWRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk4OTQ4OTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjAzLW1lcmdlLXJlZHVjZS1oZWFkcy5zaApAQCAtMCwwICsxLDE2NCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZQorCitUZXN0aW5nIG9jdG9wdXMgbWVyZ2Ugd2hlbiByZWR1Y2luZyBwYXJlbnRzIHRvIGluZGVwZW5kZW50IGJyYW5jaGVzLicKKworLiAuL3Rlc3QtbGliLnNoCisKKyMgMCAtIDEKKyMgICBcIDIKKyMgICBcIDMKKyMgICBcIDQgLSA1CisjCisjIFNvIDEsIDIsIDMgYW5kIDUgc2hvdWxkIGJlIGtlcHQsIDQgc2hvdWxkIGJlIGF2b2lkZWQuCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBjMCA+IGMwLmMgJiYKKwlnaXQgYWRkIGMwLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMwICYmCisJZ2l0IHRhZyBjMCAmJgorCWVjaG8gYzEgPiBjMS5jICYmCisJZ2l0IGFkZCBjMS5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMSAmJgorCWdpdCB0YWcgYzEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjMiA+IGMyLmMgJiYKKwlnaXQgYWRkIGMyLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMyICYmCisJZ2l0IHRhZyBjMiAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIGMzID4gYzMuYyAmJgorCWdpdCBhZGQgYzMuYyAmJgorCWdpdCBjb21taXQgLW0gYzMgJiYKKwlnaXQgdGFnIGMzICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCWVjaG8gYzQgPiBjNC5jICYmCisJZ2l0IGFkZCBjNC5jICYmCisJZ2l0IGNvbW1pdCAtbSBjNCAmJgorCWdpdCB0YWcgYzQgJiYKKwllY2hvIGM1ID4gYzUuYyAmJgorCWdpdCBhZGQgYzUuYyAmJgorCWdpdCBjb21taXQgLW0gYzUgJiYKKwlnaXQgdGFnIGM1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHdpdGggYzIsIGMzLCBjNCwgYzUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IG1lcmdlIGMyIGMzIGM0IGM1ICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzIpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzMpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4zKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzUpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF40KSIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCXRlc3QgLWYgYzAuYyAmJgorCXRlc3QgLWYgYzEuYyAmJgorCXRlc3QgLWYgYzIuYyAmJgorCXRlc3QgLWYgYzMuYyAmJgorCXRlc3QgLWYgYzQuYyAmJgorCXRlc3QgLWYgYzUuYyAmJgorCWdpdCBzaG93IC0tZm9ybWF0PSVzIC1zID5hY3R1YWwgJiYKKwkhIGdyZXAgYzEgYWN0dWFsICYmCisJZ3JlcCBjMiBhY3R1YWwgJiYKKwlncmVwIGMzIGFjdHVhbCAmJgorCSEgZ3JlcCBjNCBhY3R1YWwgJiYKKwlncmVwIGM1IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwdWxsIGMyLCBjMywgYzQsIGM1IGludG8gYzEnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IHB1bGwgLiBjMiBjMyBjNCBjNSAmJgorCXRlc3QgIiQoZ2l0IHJldi1wYXJzZSBjMSkiICE9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMSkiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMyKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMikiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMzKSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReMykiICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGM1KSIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUReNCkiICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwl0ZXN0IC1mIGMxLmMgJiYKKwl0ZXN0IC1mIGMyLmMgJiYKKwl0ZXN0IC1mIGMzLmMgJiYKKwl0ZXN0IC1mIGM0LmMgJiYKKwl0ZXN0IC1mIGM1LmMgJiYKKwlnaXQgc2hvdyAtLWZvcm1hdD0lcyAtcyA+YWN0dWFsICYmCisJISBncmVwIGMxIGFjdHVhbCAmJgorCWdyZXAgYzIgYWN0dWFsICYmCisJZ3JlcCBjMyBhY3R1YWwgJiYKKwkhIGdyZXAgYzQgYWN0dWFsICYmCisJZ3JlcCBjNSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwlmb3IgaSBpbiBBIEIgQyBEIEUKKwlkbworCQllY2hvICRpID4gJGkuYyAmJgorCQlnaXQgYWRkICRpLmMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAkaSAmJgorCQlnaXQgdGFnICRpCisJZG9uZSAmJgorCWdpdCByZXNldCAtLWhhcmQgQSAmJgorCWZvciBpIGluIEYgRyBIIEkKKwlkbworCQllY2hvICRpID4gJGkuYyAmJgorCQlnaXQgYWRkICRpLmMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAkaSAmJgorCQlnaXQgdGFnICRpCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBFIGFuZCBJJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBBICYmCisJZ2l0IG1lcmdlIEUgSQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgcmVzdWx0JyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSA9ICQoZ2l0IHJldi1wYXJzZSBFKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReMikgPSAkKGdpdCByZXYtcGFyc2UgSSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGNvbmZsaWN0cycgJworCWdpdCByZXNldCAtLWhhcmQgRSAmJgorCWVjaG8gZm9vID4gZmlsZS5jICYmCisJZ2l0IGFkZCBmaWxlLmMgJiYKKwlnaXQgY29tbWl0IC1tIEUyICYmCisJZ2l0IHRhZyBFMiAmJgorCWdpdCByZXNldCAtLWhhcmQgSSAmJgorCWVjaG8gYmFyID5maWxlLmMgJiYKKwlnaXQgYWRkIGZpbGUuYyAmJgorCWdpdCBjb21taXQgLW0gSTIgJiYKKwlnaXQgdGFnIEkyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIEUyIGFuZCBJMiwgY2F1c2luZyBhIGNvbmZsaWN0IGFuZCByZXNvbHZlIGl0JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBBICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIEUyIEkyICYmCisJZWNobyBiYXogPiBmaWxlLmMgJiYKKwlnaXQgYWRkIGZpbGUuYyAmJgorCWdpdCBjb21taXQgLW0gInJlc29sdmUgY29uZmxpY3QiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXJnZSByZXN1bHQnICcKKwl0ZXN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEXjEpID0gJChnaXQgcmV2LXBhcnNlIEUyKSAmJgorCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReMikgPSAkKGdpdCByZXYtcGFyc2UgSTIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZm9yd2FyZCB0byByZWR1bmRhbnQgcmVmcycgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlnaXQgbWVyZ2UgYzQgYzUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1lcmdlIHJlc3VsdCcgJworCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUQpID0gJChnaXQgcmV2LXBhcnNlIGM1KQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSB1cC10by1kYXRlIHJlZHVuZGFudCByZWZzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjNSAmJgorCWdpdCBtZXJnZSBjMCBjNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgcmVzdWx0JyAnCisJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgYzUpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwNC1tZXJnZS1jdXN0b20tbWVzc2FnZS5zaCBiL3QvdDc2MDQtbWVyZ2UtY3VzdG9tLW1lc3NhZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODk2MTljZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDQtbWVyZ2UtY3VzdG9tLW1lc3NhZ2Uuc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZQorCitUZXN0aW5nIG1lcmdlIHdoZW4gdXNpbmcgYSBjdXN0b20gbWVzc2FnZSBmb3IgdGhlIG1lcmdlIGNvbW1pdC4nCisKKy4gLi90ZXN0LWxpYi5zaAorCitjcmVhdGVfbWVyZ2VfbXNncygpIHsKKwllY2hvID5leHAuc3ViamVjdCAiY3VzdG9tIG1lc3NhZ2UiCisKKwljcCBleHAuc3ViamVjdCBleHAubG9nICYmCisJZWNobyA+PmV4cC5sb2cgIiIgJiYKKwllY2hvID4+ZXhwLmxvZyAiKiB0YWcgJ2MyJzoiICYmCisJZWNobyA+PmV4cC5sb2cgIiAgYzIiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBjMCA+IGMwLmMgJiYKKwlnaXQgYWRkIGMwLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMwICYmCisJZ2l0IHRhZyBjMCAmJgorCWVjaG8gYzEgPiBjMS5jICYmCisJZ2l0IGFkZCBjMS5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMSAmJgorCWdpdCB0YWcgYzEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjMiA+IGMyLmMgJiYKKwlnaXQgYWRkIGMyLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMyICYmCisJZ2l0IHRhZyBjMiAmJgorCWNyZWF0ZV9tZXJnZV9tc2dzCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2UgYzIgd2l0aCBhIGN1c3RvbSBtZXNzYWdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtbSAiJChjYXQgZXhwLnN1YmplY3QpIiBjMiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXiQvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cC5zdWJqZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSAtLWxvZyBhcHBlbmRzIHRvIGN1c3RvbSBtZXNzYWdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtLWxvZyAtbSAiJChjYXQgZXhwLnN1YmplY3QpIiBjMiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IHNlZCAtZSAiMSwvXiQvZCIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cC5sb2cgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwNS1tZXJnZS1yZXNvbHZlLnNoIGIvdC90NzYwNS1tZXJnZS1yZXNvbHZlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBjYjlkMTEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjA1LW1lcmdlLXJlc29sdmUuc2gKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZQorCitUZXN0aW5nIHRoZSByZXNvbHZlIHN0cmF0ZWd5LicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJZWNobyBjMCA+IGMwLmMgJiYKKwlnaXQgYWRkIGMwLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMwICYmCisJZ2l0IHRhZyBjMCAmJgorCWVjaG8gYzEgPiBjMS5jICYmCisJZ2l0IGFkZCBjMS5jICYmCisJZ2l0IGNvbW1pdCAtbSBjMSAmJgorCWdpdCB0YWcgYzEgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZWNobyBjMiA+IGMyLmMgJiYKKwlnaXQgYWRkIGMyLmMgJiYKKwlnaXQgY29tbWl0IC1tIGMyICYmCisJZ2l0IHRhZyBjMiAmJgorCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwllY2hvIGMzID4gYzIuYyAmJgorCWdpdCBhZGQgYzIuYyAmJgorCWdpdCBjb21taXQgLW0gYzMgJiYKKwlnaXQgdGFnIGMzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMxIHRvIGMyJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBtZXJnZSAtcyByZXNvbHZlIGMyICYmCisJdGVzdCAiJChnaXQgcmV2LXBhcnNlIGMxKSIgIT0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzEpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4xKSIgJiYKKwl0ZXN0ICIkKGdpdCByZXYtcGFyc2UgYzIpIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRF4yKSIgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSAmJgorCXRlc3QgLWYgYzAuYyAmJgorCXRlc3QgLWYgYzEuYyAmJgorCXRlc3QgLWYgYzIuYyAmJgorCXRlc3QgMyA9ICQoZ2l0IGxzLXRyZWUgLXIgSEVBRCB8IHdjIC1sKSAmJgorCXRlc3QgMyA9ICQoZ2l0IGxzLWZpbGVzIHwgd2MgLWwpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGMyIHRvIGMzIChmYWlscyknICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC1zIHJlc29sdmUgYzMKKycKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90NzYwNi1tZXJnZS1jdXN0b20uc2ggYi90L3Q3NjA2LW1lcmdlLWN1c3RvbS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZThjNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzYwNi1tZXJnZS1jdXN0b20uc2gKQEAgLTAsMCArMSw5MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249ImdpdCBtZXJnZQorCitUZXN0aW5nIGEgY3VzdG9tIHN0cmF0ZWd5LgorCisqICAgKEhFQUQsIG1hc3RlcikgTWVyZ2UgY29tbWl0ICdjMycKK3xcCit8ICogKHRhZzogYzMpIGMzCisqIHwgKHRhZzogYzEpIGMxCit8LworfCAqIHRhZzogYzIpIGMyCit8LworKiAodGFnOiBjMCkgYzAKKyIKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBjdXN0b20gc3RyYXRlZ3knICcKKwljYXQgPmdpdC1tZXJnZS10aGVpcnMgPDwtRU9GICYmCisJIyEkU0hFTExfUEFUSAorCWV2YWwgZ2l0IHJlYWQtdHJlZSAtLXJlc2V0IC11IFxcXCRcJCMKKwlFT0YKKworCWNobW9kICt4IGdpdC1tZXJnZS10aGVpcnMgJiYKKwlQQVRIPS46JFBBVEggJiYKKwlleHBvcnQgUEFUSAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGMwIGMwLmMgJiYKKwl0ZXN0X2NvbW1pdCBjMSBjMS5jICYmCisJZ2l0IHJlc2V0IC0ta2VlcCBjMCAmJgorCWVjaG8gYzFjMSA+YzEuYyAmJgorCWdpdCBhZGQgYzEuYyAmJgorCXRlc3RfY29tbWl0IGMyIGMyLmMgJiYKKwlnaXQgcmVzZXQgLS1rZWVwIGMwICYmCisJdGVzdF9jb21taXQgYzMgYzMuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBjMiB3aXRoIGEgY3VzdG9tIHN0cmF0ZWd5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCisJZ2l0IHJldi1wYXJzZSBjMSA+aGVhZC5vbGQgJiYKKwlnaXQgcmV2LXBhcnNlIGMyID5zZWNvbmQtcGFyZW50LmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSBjMl57dHJlZX0gPnRyZWUuZXhwZWN0ZWQgJiYKKwlnaXQgbWVyZ2UgLXMgdGhlaXJzIGMyICYmCisKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmhlYWQubmV3ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmZpcnN0LXBhcmVudCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4yID5zZWNvbmQtcGFyZW50ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+dHJlZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjMiBIRUFEICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYzIgJiYKKworCSEgdGVzdF9jbXAgaGVhZC5vbGQgaGVhZC5uZXcgJiYKKwl0ZXN0X2NtcCBoZWFkLm9sZCBmaXJzdC1wYXJlbnQgJiYKKwl0ZXN0X2NtcCBzZWNvbmQtcGFyZW50LmV4cGVjdGVkIHNlY29uZC1wYXJlbnQgJiYKKwl0ZXN0X2NtcCB0cmVlLmV4cGVjdGVkIHRyZWUgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwlncmVwIGMxYzEgYzEuYyAmJgorCXRlc3QgLWYgYzIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cml2aWFsIG1lcmdlIHdpdGggY3VzdG9tIHN0cmF0ZWd5JyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCisJZ2l0IHJldi1wYXJzZSBjMSA+aGVhZC5vbGQgJiYKKwlnaXQgcmV2LXBhcnNlIGMzID5zZWNvbmQtcGFyZW50LmV4cGVjdGVkICYmCisJZ2l0IHJldi1wYXJzZSBjM157dHJlZX0gPnRyZWUuZXhwZWN0ZWQgJiYKKwlnaXQgbWVyZ2UgLXMgdGhlaXJzIGMzICYmCisKKwlnaXQgcmV2LXBhcnNlIEhFQUQgPmhlYWQubmV3ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXjEgPmZpcnN0LXBhcmVudCAmJgorCWdpdCByZXYtcGFyc2UgSEVBRF4yID5zZWNvbmQtcGFyZW50ICYmCisJZ2l0IHJldi1wYXJzZSBIRUFEXnt0cmVlfSA+dHJlZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBjMyBIRUFEICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgYzMgJiYKKworCSEgdGVzdF9jbXAgaGVhZC5vbGQgaGVhZC5uZXcgJiYKKwl0ZXN0X2NtcCBoZWFkLm9sZCBmaXJzdC1wYXJlbnQgJiYKKwl0ZXN0X2NtcCBzZWNvbmQtcGFyZW50LmV4cGVjdGVkIHNlY29uZC1wYXJlbnQgJiYKKwl0ZXN0X2NtcCB0cmVlLmV4cGVjdGVkIHRyZWUgJiYKKwl0ZXN0IC1mIGMwLmMgJiYKKwkhIHRlc3QgLWUgYzEuYyAmJgorCXRlc3QgLWYgYzMuYworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDctbWVyZ2Utb3ZlcndyaXRlLnNoIGIvdC90NzYwNy1tZXJnZS1vdmVyd3JpdGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzU4YTYyMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDctbWVyZ2Utb3ZlcndyaXRlLnNoCkBAIC0wLDAgKzEsMTkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LW1lcmdlCisKK0RvIG5vdCBvdmVyd3JpdGUgY2hhbmdlcy4nCisKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCXRlc3RfY29tbWl0IGMwIGMwLmMgJiYKKwl0ZXN0X2NvbW1pdCBjMSBjMS5jICYmCisJdGVzdF9jb21taXQgYzFhIGMxLmMgImMxIGEiICYmCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXRlc3RfY29tbWl0IGMyIGMyLmMgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJbWtkaXIgc3ViICYmCisJZWNobyAic3ViL2YiID4gc3ViL2YgJiYKKwlta2RpciBzdWIyICYmCisJZWNobyAic3ViMi9mIiA+IHN1YjIvZiAmJgorCWdpdCBhZGQgc3ViL2Ygc3ViMi9mICYmCisJZ2l0IGNvbW1pdCAtbSBzdWIgJiYKKwlnaXQgdGFnIHN1YiAmJgorCWVjaG8gIlZFUlkgSU1QT1JUQU5UIENIQU5HRVMiID4gaW1wb3J0YW50CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSB1bnRyYWNrZWQgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwljcCBpbXBvcnRhbnQgYzIuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgb3ZlcndyaXRlIHRyYWNrZWQgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwljcCBpbXBvcnRhbnQgYzIuYyAmJgorCWdpdCBhZGQgYzIuYyAmJgorCWdpdCBjb21taXQgLW0gaW1wb3J0YW50ICYmCisJZ2l0IGNoZWNrb3V0IGMyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSBuZXcgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwljcCBpbXBvcnRhbnQgYzIuYyAmJgorCWdpdCBhZGQgYzIuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSBzdGFnZWQgY2hhbmdlcycgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwljcCBpbXBvcnRhbnQgYzIuYyAmJgorCWdpdCBhZGQgYzIuYyAmJgorCXJtIGMyLmMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgYzIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwlnaXQgY2hlY2tvdXQgYzIuYyAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMi5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSByZW1vdmVkIGZpbGUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IHJtIGMxLmMgJiYKKwlnaXQgY29tbWl0IC1tICJybSBjMS5jIiAmJgorCWNwIGltcG9ydGFudCBjMS5jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMxYSAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMS5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IG92ZXJ3cml0ZSByZS1hZGRlZCBmaWxlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMSAmJgorCWdpdCBybSBjMS5jICYmCisJZ2l0IGNvbW1pdCAtbSAicm0gYzEuYyIgJiYKKwljcCBpbXBvcnRhbnQgYzEuYyAmJgorCWdpdCBhZGQgYzEuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMWEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgYzEuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBvdmVyd3JpdGUgcmVtb3ZlZCBmaWxlIHdpdGggc3RhZ2VkIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMxICYmCisJZ2l0IHJtIGMxLmMgJiYKKwlnaXQgY29tbWl0IC1tICJybSBjMS5jIiAmJgorCWNwIGltcG9ydGFudCBjMS5jICYmCisJZ2l0IGFkZCBjMS5jICYmCisJcm0gYzEuYyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjMWEgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwlnaXQgY2hlY2tvdXQgYzEuYyAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMS5jCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ3dpbGwgbm90IG92ZXJ3cml0ZSB1bnN0YWdlZCBjaGFuZ2VzIGluIHJlbmFtZWQgZmlsZScgJworCWdpdCByZXNldCAtLWhhcmQgYzEgJiYKKwlnaXQgbXYgYzEuYyBvdGhlci5jICYmCisJZ2l0IGNvbW1pdCAtbSByZW5hbWUgJiYKKwljcCBpbXBvcnRhbnQgb3RoZXIuYyAmJgorCWdpdCBtZXJnZSBjMWEgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgb3RoZXIuYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBvdmVyd3JpdGUgdW50cmFja2VkIHN1YnRyZWUnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJcm0gLXJmIHN1YiAmJgorCW1rZGlyIC1wIHN1Yi9mICYmCisJY3AgaW1wb3J0YW50IHN1Yi9mL2ltcG9ydGFudCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBzdWIgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgc3ViL2YvaW1wb3J0YW50CisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorZXJyb3I6IFRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZToKKwlzdWIKKwlzdWIyCitQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IGNhbiBtZXJnZS4KK0Fib3J0aW5nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlIGluIGxlYWRpbmcgcGF0aCcgJworCWdpdCByZXNldCAtLWhhcmQgYzAgJiYKKwlybSAtcmYgc3ViICYmCisJY3AgaW1wb3J0YW50IHN1YiAmJgorCWNwIGltcG9ydGFudCBzdWIyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHN1YiAyPm91dCAmJgorCXRlc3RfY21wIG91dCBleHBlY3QgJiYKKwl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0X2NtcCBpbXBvcnRhbnQgc3ViICYmCisJdGVzdF9jbXAgaW1wb3J0YW50IHN1YjIgJiYKKwlybSAtZiBzdWIgc3ViMgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICd3aWxsIG5vdCBvdmVyd3JpdGUgdW50cmFja2VkIHN5bWxpbmsgaW4gbGVhZGluZyBwYXRoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXJtIC1yZiBzdWIgJiYKKwlta2RpciBzdWIyICYmCisJbG4gLXMgc3ViMiBzdWIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2Ugc3ViICYmCisJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9NRVJHRV9IRUFECisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGwgbm90IGJlIGNvbmZ1c2VkIGJ5IHN5bWxpbmsgaW4gbGVhZGluZyBwYXRoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCBjMCAmJgorCXJtIC1yZiBzdWIgJiYKKwl0ZXN0X2xuX3NfYWRkIHN1YjIgc3ViICYmCisJZ2l0IGNvbW1pdCAtbSBsbiAmJgorCWdpdCBjaGVja291dCBzdWIKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitlcnJvcjogVW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlICdjMC5jJyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZS4KK2ZhdGFsOiByZWFkLXRyZWUgZmFpbGVkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlIG9uIHVuYm9ybiBicmFuY2gnICcKKwlnaXQgcmVzZXQgLS1oYXJkIGMwICYmCisJZ2l0IHJtIC1mciAuICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG5ldyAmJgorCWNwIGltcG9ydGFudCBjMC5jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGMwIDI+b3V0ICYmCisJdGVzdF9pMThuY21wIG91dCBleHBlY3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsbCBub3Qgb3ZlcndyaXRlIHVudHJhY2tlZCBmaWxlIG9uIHVuYm9ybiBicmFuY2ggLmdpdC9NRVJHRV9IRUFEIHNhbml0eSBldGMuJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBjMC5jIiAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3RfY21wIGltcG9ydGFudCBjMC5jCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxlZCBtZXJnZSBsZWF2ZXMgdW5ib3JuIGJyYW5jaCBpbiB0aGUgd29tYicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgdXAgdW5ib3JuIGJyYW5jaCBhbmQgY29udGVudCcgJworCWdpdCBzeW1ib2xpYy1yZWYgSEVBRCByZWZzL2hlYWRzL3VuYm9ybiAmJgorCXJtIC1mIC5naXQvaW5kZXggJiYKKwllY2hvIGZvbyA+IHRyYWNrZWQtZmlsZSAmJgorCWdpdCBhZGQgdHJhY2tlZC1maWxlICYmCisJZWNobyBiYXIgPiB1bnRyYWNrZWQtZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxsIG5vdCBjbG9iYmVyIFdUL2luZGV4IHdoZW4gbWVyZ2luZyBpbnRvIHVuYm9ybicgJworCWdpdCBtZXJnZSBtYXN0ZXIgJiYKKwlncmVwIGZvbyB0cmFja2VkLWZpbGUgJiYKKwlnaXQgc2hvdyA6dHJhY2tlZC1maWxlID5leHBlY3QgJiYKKwlncmVwIGZvbyBleHBlY3QgJiYKKwlncmVwIGJhciB1bnRyYWNrZWQtZmlsZQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MDgtbWVyZ2UtbWVzc2FnZXMuc2ggYi90L3Q3NjA4LW1lcmdlLW1lc3NhZ2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlN2UwYTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjA4LW1lcmdlLW1lc3NhZ2VzLnNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGF1dG8tZ2VuZXJhdGVkIG1lcmdlIG1lc3NhZ2VzJworLiAuL3Rlc3QtbGliLnNoCisKK2NoZWNrX29uZWxpbmUoKSB7CisJZWNobyAiJDEiIHwgc2VkICJzL1EvJy9nIiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtMSAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGxvY2FsIGJyYW5jaCcgJworCXRlc3RfY29tbWl0IG1hc3Rlci0xICYmCisJZ2l0IGNoZWNrb3V0IC1iIGxvY2FsLWJyYW5jaCAmJgorCXRlc3RfY29tbWl0IGJyYW5jaC0xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci0yICYmCisJZ2l0IG1lcmdlIGxvY2FsLWJyYW5jaCAmJgorCWNoZWNrX29uZWxpbmUgIk1lcmdlIGJyYW5jaCBRbG9jYWwtYnJhbmNoUSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2Ugb2N0b3B1cyBicmFuY2hlcycgJworCWdpdCBjaGVja291dCAtYiBvY3RvcHVzLWEgbWFzdGVyICYmCisJdGVzdF9jb21taXQgb2N0b3B1cy0xICYmCisJZ2l0IGNoZWNrb3V0IC1iIG9jdG9wdXMtYiBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBvY3RvcHVzLTIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJZ2l0IG1lcmdlIG9jdG9wdXMtYSBvY3RvcHVzLWIgJiYKKwljaGVja19vbmVsaW5lICJNZXJnZSBicmFuY2hlcyBRb2N0b3B1cy1hUSBhbmQgUW9jdG9wdXMtYlEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIHRhZycgJworCWdpdCBjaGVja291dCAtYiB0YWctYnJhbmNoIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHRhZy0xICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci0zICYmCisJZ2l0IG1lcmdlIHRhZy0xICYmCisJY2hlY2tfb25lbGluZSAiTWVyZ2UgdGFnIFF0YWctMVEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FtYmlndW91cyB0YWcnICcKKwlnaXQgY2hlY2tvdXQgLWIgYW1iaWd1b3VzIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IGFtYmlndW91cyAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwl0ZXN0X2NvbW1pdCBtYXN0ZXItNCAmJgorCWdpdCBtZXJnZSBhbWJpZ3VvdXMgJiYKKwljaGVja19vbmVsaW5lICJNZXJnZSB0YWcgUWFtYmlndW91c1EiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW90ZS10cmFja2luZyBicmFuY2gnICcKKwlnaXQgY2hlY2tvdXQgLWIgcmVtb3RlIG1hc3RlciAmJgorCXRlc3RfY29tbWl0IHJlbW90ZS0xICYmCisJZ2l0IHVwZGF0ZS1yZWYgcmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIgcmVtb3RlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCXRlc3RfY29tbWl0IG1hc3Rlci01ICYmCisJZ2l0IG1lcmdlIG9yaWdpbi9tYXN0ZXIgJiYKKwljaGVja19vbmVsaW5lICJNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoIFFvcmlnaW4vbWFzdGVyUSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjA5LW1lcmdlLWNvLWVycm9yLW1zZ3Muc2ggYi90L3Q3NjA5LW1lcmdlLWNvLWVycm9yLW1zZ3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGU0YTY4MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MDktbWVyZ2UtY28tZXJyb3ItbXNncy5zaApAQCAtMCwwICsxLDEzOCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3VucGFjay10cmVlcyBlcnJvciBtZXNzYWdlcycKKworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwllY2hvIG9uZSA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlnaXQgY29tbWl0IC1hIC1tIEZpcnN0ICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoICYmCisJZWNobyB0d28gPnR3byAmJgorCWVjaG8gdGhyZWUgPnRocmVlICYmCisJZWNobyBmb3VyID5mb3VyICYmCisJZWNobyBmaXZlID5maXZlICYmCisJZ2l0IGFkZCB0d28gdGhyZWUgZm91ciBmaXZlICYmCisJZ2l0IGNvbW1pdCAtbSBTZWNvbmQgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIG90aGVyID50d28gJiYKKwllY2hvIG90aGVyID50aHJlZSAmJgorCWVjaG8gb3RoZXIgPmZvdXIgJiYKKwllY2hvIG90aGVyID5maXZlCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorZXJyb3I6IFRoZSBmb2xsb3dpbmcgdW50cmFja2VkIHdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtZXJnZToKKwlmaXZlCisJZm91cgorCXRocmVlCisJdHdvCitQbGVhc2UgbW92ZSBvciByZW1vdmUgdGhlbSBiZWZvcmUgeW91IGNhbiBtZXJnZS4KK0Fib3J0aW5nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW50cmFja2VkIGZpbGVzIG92ZXJ3cml0dGVuIGJ5IG1lcmdlIChmYXN0IGFuZCBub24tZmFzdCBmb3J3YXJkKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBicmFuY2ggMj5vdXQgJiYKKwl0ZXN0X2NtcCBvdXQgZXhwZWN0ICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tIGVtcHR5ICYmCisJKAorCQlHSVRfTUVSR0VfVkVSQk9TSVRZPTAgJiYKKwkJZXhwb3J0IEdJVF9NRVJHRV9WRVJCT1NJVFkgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaCAyPm91dDIKKwkpICYmCisJdGVzdF9jbXAgb3V0MiBleHBlY3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisnCisKK2NhdCA+ZXhwZWN0IDw8XEVPRgorZXJyb3I6IFlvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOgorCWZvdXIKKwl0aHJlZQorCXR3bworUGxlYXNlLCBjb21taXQgeW91ciBjaGFuZ2VzIG9yIHN0YXNoIHRoZW0gYmVmb3JlIHlvdSBjYW4gbWVyZ2UuCitlcnJvcjogVGhlIGZvbGxvd2luZyB1bnRyYWNrZWQgd29ya2luZyB0cmVlIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOgorCWZpdmUKK1BsZWFzZSBtb3ZlIG9yIHJlbW92ZSB0aGVtIGJlZm9yZSB5b3UgY2FuIG1lcmdlLgorQWJvcnRpbmcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1bnRyYWNrZWQgZmlsZXMgb3IgbG9jYWwgY2hhbmdlcyBvdmV3cml0dGVuIGJ5IG1lcmdlJyAnCisJZ2l0IGFkZCB0d28gJiYKKwlnaXQgYWRkIHRocmVlICYmCisJZ2l0IGFkZCBmb3VyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGJyYW5jaCAyPm91dCAmJgorCXRlc3RfY21wIG91dCBleHBlY3QKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitlcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6CisJcmVwL29uZQorCXJlcC90d28KK1BsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgY2FuIHN3aXRjaCBicmFuY2hlcy4KK0Fib3J0aW5nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2Fubm90IHN3aXRjaCBicmFuY2hlcyBiZWNhdXNlIG9mIGxvY2FsIGNoYW5nZXMnICcKKwlnaXQgYWRkIGZpdmUgJiYKKwlta2RpciByZXAgJiYKKwllY2hvIG9uZSA+cmVwL29uZSAmJgorCWVjaG8gdHdvID5yZXAvdHdvICYmCisJZ2l0IGFkZCByZXAvb25lIHJlcC90d28gJiYKKwlnaXQgY29tbWl0IC1tIEZvdXJ0aCAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIHVubyA+cmVwL29uZSAmJgorCWVjaG8gZG9zID5yZXAvdHdvICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IGJyYW5jaCAyPm91dCAmJgorCXRlc3RfY21wIG91dCBleHBlY3QKKycKKworY2F0ID5leHBlY3QgPDxcRU9GCitlcnJvcjogWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgY2hlY2tvdXQ6CisJcmVwL29uZQorCXJlcC90d28KK1BsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgY2FuIHN3aXRjaCBicmFuY2hlcy4KK0Fib3J0aW5nCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm90IHVwdG9kYXRlIGZpbGUgcG9yY2VsYWluIGNoZWNrb3V0IGVycm9yJyAnCisJZ2l0IGFkZCByZXAvb25lIHJlcC90d28gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgYnJhbmNoIDI+b3V0ICYmCisJdGVzdF9jbXAgb3V0IGV4cGVjdAorJworCitjYXQgPmV4cGVjdCA8PFxFT0YKK2Vycm9yOiBVcGRhdGluZyB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIGl0OgorCXJlcAorCXJlcDIKKworQWJvcnRpbmcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3RfdXB0b2RhdGVfZGlyIHBvcmNlbGFpbiBjaGVja291dCBlcnJvcicgJworCWdpdCBpbml0IHVwdG9kYXRlICYmCisJY2QgdXB0b2RhdGUgJiYKKwlta2RpciByZXAgJiYKKwlta2RpciByZXAyICYmCisJdG91Y2ggcmVwL2ZvbyAmJgorCXRvdWNoIHJlcDIvZm9vICYmCisJZ2l0IGFkZCByZXAvZm9vIHJlcDIvZm9vICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0ICYmCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaCAmJgorCWdpdCBybSByZXAgLXIgJiYKKwlnaXQgcm0gcmVwMiAtciAmJgorCT5yZXAgJiYKKwk+cmVwMiAmJgorCWdpdCBhZGQgcmVwIHJlcDImJgorCWdpdCBjb21taXQgLW0gImFkZGVkIHRlc3QgYXMgYSBmaWxlIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwk+cmVwL3VudHJhY2tlZC1maWxlICYmCisJPnJlcDIvdW50cmFja2VkLWZpbGUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2hlY2tvdXQgYnJhbmNoIDI+b3V0ICYmCisJdGVzdF9jbXAgb3V0IC4uL2V4cGVjdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MTAtbWVyZ2V0b29sLnNoIGIvdC90NzYxMC1tZXJnZXRvb2wuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmYxMmIyMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MTAtbWVyZ2V0b29sLnNoCkBAIC0wLDAgKzEsNTQwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IENoYXJsZXMgQmFpbGV5CisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBtZXJnZXRvb2wKKworVGVzdGluZyBiYXNpYyBtZXJnZSB0b29sIGludm9jYXRpb24nCisKKy4gLi90ZXN0LWxpYi5zaAorCisjIEFsbCB0aGUgbWVyZ2V0b29sIHRlc3Qgd29yayBieSBjaGVja2luZyBvdXQgYSB0ZW1wb3JhcnkgYnJhbmNoIGJhc2VkCisjIG9mZiAnYnJhbmNoMScgYW5kIHRoZW4gbWVyZ2luZyBpbiBtYXN0ZXIgYW5kIGNoZWNraW5nIHRoZSByZXN1bHRzIG9mCisjIHJ1bm5pbmcgbWVyZ2V0b29sCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCWVjaG8gbWFzdGVyID5maWxlMSAmJgorCWVjaG8gbWFzdGVyIHNwYWNlZCA+InNwYWNlZCBuYW1lIiAmJgorCWVjaG8gbWFzdGVyIGZpbGUxMSA+ZmlsZTExICYmCisJZWNobyBtYXN0ZXIgZmlsZTEyID5maWxlMTIgJiYKKwllY2hvIG1hc3RlciBmaWxlMTMgPmZpbGUxMyAmJgorCWVjaG8gbWFzdGVyIGZpbGUxNCA+ZmlsZTE0ICYmCisJbWtkaXIgc3ViZGlyICYmCisJZWNobyBtYXN0ZXIgc3ViID5zdWJkaXIvZmlsZTMgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvIHN1Ym1vZCAmJgorCSgKKwkJY2Qgc3VibW9kICYmCisJCTogPmZvbyAmJgorCQlnaXQgYWRkIGZvbyAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgZm9vIgorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCBnaXQ6Ly9leGFtcGxlLmNvbS9zdWJtb2Qgc3VibW9kICYmCisJZ2l0IGFkZCBmaWxlMSAic3BhY2VkIG5hbWUiIGZpbGUxWzEtNF0gc3ViZGlyL2ZpbGUzIC5naXRtb2R1bGVzIHN1Ym1vZCAmJgorCWdpdCBjb21taXQgLW0gImFkZCBpbml0aWFsIHZlcnNpb25zIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIGJyYW5jaDEgbWFzdGVyICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwllY2hvIGJyYW5jaDEgY2hhbmdlID5maWxlMSAmJgorCWVjaG8gYnJhbmNoMSBuZXdmaWxlID5maWxlMiAmJgorCWVjaG8gYnJhbmNoMSBzcGFjZWQgPiJzcGFjZWQgbmFtZSIgJiYKKwllY2hvIGJyYW5jaDEgYm90aCBhZGRlZCA+Ym90aCAmJgorCWVjaG8gYnJhbmNoMSBjaGFuZ2UgZmlsZTExID5maWxlMTEgJiYKKwllY2hvIGJyYW5jaDEgY2hhbmdlIGZpbGUxMyA+ZmlsZTEzICYmCisJZWNobyBicmFuY2gxIHN1YiA+c3ViZGlyL2ZpbGUzICYmCisJKAorCQljZCBzdWJtb2QgJiYKKwkJZWNobyBicmFuY2gxIHN1Ym1vZHVsZSA+YmFyICYmCisJCWdpdCBhZGQgYmFyICYmCisJCWdpdCBjb21taXQgLW0gIkFkZCBiYXIgb24gYnJhbmNoMSIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHN1Ym1vZC1icmFuY2gxCisJKSAmJgorCWdpdCBhZGQgZmlsZTEgInNwYWNlZCBuYW1lIiBmaWxlMTEgZmlsZTEzIGZpbGUyIHN1YmRpci9maWxlMyBzdWJtb2QgJiYKKwlnaXQgYWRkIGJvdGggJiYKKwlnaXQgcm0gZmlsZTEyICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSBjaGFuZ2VzIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHN0YXNoMSBtYXN0ZXIgJiYKKwllY2hvIHN0YXNoMSBjaGFuZ2UgZmlsZTExID5maWxlMTEgJiYKKwlnaXQgYWRkIGZpbGUxMSAmJgorCWdpdCBjb21taXQgLW0gInN0YXNoMSBjaGFuZ2VzIiAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHN0YXNoMiBtYXN0ZXIgJiYKKwllY2hvIHN0YXNoMiBjaGFuZ2UgZmlsZTExID5maWxlMTEgJiYKKwlnaXQgYWRkIGZpbGUxMSAmJgorCWdpdCBjb21taXQgLW0gInN0YXNoMiBjaGFuZ2VzIiAmJgorCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJZWNobyBtYXN0ZXIgdXBkYXRlZCA+ZmlsZTEgJiYKKwllY2hvIG1hc3RlciBuZXcgPmZpbGUyICYmCisJZWNobyBtYXN0ZXIgdXBkYXRlZCBzcGFjZWQgPiJzcGFjZWQgbmFtZSIgJiYKKwllY2hvIG1hc3RlciBib3RoIGFkZGVkID5ib3RoICYmCisJZWNobyBtYXN0ZXIgdXBkYXRlZCBmaWxlMTIgPmZpbGUxMiAmJgorCWVjaG8gbWFzdGVyIHVwZGF0ZWQgZmlsZTE0ID5maWxlMTQgJiYKKwllY2hvIG1hc3RlciBuZXcgc3ViID5zdWJkaXIvZmlsZTMgJiYKKwkoCisJCWNkIHN1Ym1vZCAmJgorCQllY2hvIG1hc3RlciBzdWJtb2R1bGUgPmJhciAmJgorCQlnaXQgYWRkIGJhciAmJgorCQlnaXQgY29tbWl0IC1tICJBZGQgYmFyIG9uIG1hc3RlciIgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHN1Ym1vZC1tYXN0ZXIKKwkpICYmCisJZ2l0IGFkZCBmaWxlMSAic3BhY2VkIG5hbWUiIGZpbGUxMiBmaWxlMTQgZmlsZTIgc3ViZGlyL2ZpbGUzIHN1Ym1vZCAmJgorCWdpdCBhZGQgYm90aCAmJgorCWdpdCBybSBmaWxlMTEgJiYKKwlnaXQgY29tbWl0IC1tICJtYXN0ZXIgdXBkYXRlcyIgJiYKKworCWdpdCBjb25maWcgbWVyZ2UudG9vbCBteXRvb2wgJiYKKwlnaXQgY29uZmlnIG1lcmdldG9vbC5teXRvb2wuY21kICJjYXQgXCJcJFJFTU9URVwiID5cIlwkTUVSR0VEXCIiICYmCisJZ2l0IGNvbmZpZyBtZXJnZXRvb2wubXl0b29sLnRydXN0RXhpdENvZGUgdHJ1ZSAmJgorCWdpdCBjb25maWcgbWVyZ2V0b29sLm15YmFzZS5jbWQgImNhdCBcIlwkQkFTRVwiID5cIlwkTUVSR0VEXCIiICYmCisJZ2l0IGNvbmZpZyBtZXJnZXRvb2wubXliYXNlLnRydXN0RXhpdENvZGUgdHJ1ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdXN0b20gbWVyZ2V0b29sJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QxIGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgPi9kZXYvbnVsbCAyPiYxICYmCisJKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTEgKSAmJgorCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMiAic3BhY2VkIG5hbWUiID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIHN1YmRpci9maWxlMyA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCA+L2Rldi9udWxsIDI+JjEgKSAmJgorCXRlc3QgIiQoY2F0IGZpbGUxKSIgPSAibWFzdGVyIHVwZGF0ZWQiICYmCisJdGVzdCAiJChjYXQgZmlsZTIpIiA9ICJtYXN0ZXIgbmV3IiAmJgorCXRlc3QgIiQoY2F0IHN1YmRpci9maWxlMykiID0gIm1hc3RlciBuZXcgc3ViIiAmJgorCXRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJicmFuY2gxIHN1Ym1vZHVsZSIgJiYKKwlnaXQgY29tbWl0IC1tICJicmFuY2gxIHJlc29sdmVkIHdpdGggbWVyZ2V0b29sIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgY3JsZicgJworCXRlc3RfY29uZmlnIGNvcmUuYXV0b2NybGYgdHJ1ZSAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0MiBicmFuY2gxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciA+L2Rldi9udWxsIDI+JjEgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgInNwYWNlZCBuYW1lIiA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIHN1YmRpci9maWxlMyA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCA+L2Rldi9udWxsIDI+JjEgKSAmJgorCXRlc3QgIiQocHJpbnRmIHggfCBjYXQgZmlsZTEgLSkiID0gIiQocHJpbnRmICJtYXN0ZXIgdXBkYXRlZFxyXG54IikiICYmCisJdGVzdCAiJChwcmludGYgeCB8IGNhdCBmaWxlMiAtKSIgPSAiJChwcmludGYgIm1hc3RlciBuZXdcclxueCIpIiAmJgorCXRlc3QgIiQocHJpbnRmIHggfCBjYXQgc3ViZGlyL2ZpbGUzIC0pIiA9ICIkKHByaW50ZiAibWFzdGVyIG5ldyBzdWJcclxueCIpIiAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCAtIGF1dG9jcmxmIiAmJgorCXRlc3RfY29uZmlnIGNvcmUuYXV0b2NybGYgZmFsc2UgJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCBpbiBzdWJkaXInICcKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdDMgYnJhbmNoMSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciA+L2Rldi9udWxsIDI+JjEgJiYKKwkJKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUzID4vZGV2L251bGwgMj4mMSApICYmCisJCXRlc3QgIiQoY2F0IGZpbGUzKSIgPSAibWFzdGVyIG5ldyBzdWIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgb24gZmlsZSBpbiBwYXJlbnQgZGlyJyAnCisJKAorCQljZCBzdWJkaXIgJiYKKwkJKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC4uL2ZpbGUxID4vZGV2L251bGwgMj4mMSApICYmCisJCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCAuLi9maWxlMiAuLi9zcGFjZWRcIG5hbWUgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkJKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIC4uL2JvdGggPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkJKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCAuLi9maWxlMTEgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkJKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCAuLi9maWxlMTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkJKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCAuLi9zdWJtb2QgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkJdGVzdCAiJChjYXQgLi4vZmlsZTEpIiA9ICJtYXN0ZXIgdXBkYXRlZCIgJiYKKwkJdGVzdCAiJChjYXQgLi4vZmlsZTIpIiA9ICJtYXN0ZXIgbmV3IiAmJgorCQl0ZXN0ICIkKGNhdCAuLi9zdWJtb2QvYmFyKSIgPSAiYnJhbmNoMSBzdWJtb2R1bGUiICYmCisJCWdpdCBjb21taXQgLW0gImJyYW5jaDEgcmVzb2x2ZWQgd2l0aCBtZXJnZXRvb2wgLSBzdWJkaXIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgc2tpcHMgYXV0b3Jlc29sdmVkJyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3Q0IGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMiA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kID4vZGV2L251bGwgMj4mMSApICYmCisJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKwlnaXQgcmVzZXQgLS1oYXJkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdldG9vbCBtZXJnZXMgYWxsIGZyb20gc3ViZGlyJyAnCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgZmFsc2UgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJCSggeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgLi4vc3VibW9kICkgJiYKKwkJKCB5ZXMgImQiICJkIiB8IGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQgKSAmJgorCQl0ZXN0ICIkKGNhdCAuLi9maWxlMSkiID0gIm1hc3RlciB1cGRhdGVkIiAmJgorCQl0ZXN0ICIkKGNhdCAuLi9maWxlMikiID0gIm1hc3RlciBuZXciICYmCisJCXRlc3QgIiQoY2F0IGZpbGUzKSIgPSAibWFzdGVyIG5ldyBzdWIiICYmCisJCSggY2QgLi4gJiYgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gKSAmJgorCQl0ZXN0ICIkKGNhdCAuLi9zdWJtb2QvYmFyKSIgPSAibWFzdGVyIHN1Ym1vZHVsZSIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMiByZXNvbHZlZCBieSBtZXJnZXRvb2wgZnJvbSBzdWJkaXIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgc2tpcHMgcmVzb2x2ZWQgcGF0aHMgd2hlbiByZXJlcmUgaXMgYWN0aXZlJyAnCisJdGVzdF9jb25maWcgcmVyZXJlLmVuYWJsZWQgdHJ1ZSAmJgorCXJtIC1yZiAuZ2l0L3JyLWNhY2hlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3Q1IGJyYW5jaDEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgPi9kZXYvbnVsbCAyPiYxICYmCisJKCB5ZXMgImwiIHwgZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCBzdWJtb2QgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiZCIgImQiIHwgZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCA+L2Rldi9udWxsIDI+JjEgKSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJb3V0cHV0PSIkKHllcyAibiIgfCBnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKwl0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisJZ2l0IHJlc2V0IC0taGFyZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdGVkIHN0YXNoIHNldHMgdXAgcmVyZXJlJyAgJworCXRlc3RfY29uZmlnIHJlcmVyZS5lbmFibGVkIHRydWUgJiYKKwlnaXQgY2hlY2tvdXQgc3Rhc2gxICYmCisJZWNobyAiQ29uZmxpY3Rpbmcgc3Rhc2ggY29udGVudCIgPmZpbGUxMSAmJgorCWdpdCBzdGFzaCAmJgorCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIHN0YXNoMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSAmJgorCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCWNvbmZsaWN0cz0iJChnaXQgcmVyZXJlIHJlbWFpbmluZykiICYmCisJdGVzdCAiJGNvbmZsaWN0cyIgPSAiZmlsZTExIiAmJgorCW91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKwl0ZXN0ICIkb3V0cHV0IiAhPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCisJZ2l0IGNvbW1pdCAtYW0gInNhdmUgdGhlIHN0YXNoIHJlc29sdXRpb24iICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIHN0YXNoMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdGFzaCBhcHBseSAmJgorCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCWNvbmZsaWN0cz0iJChnaXQgcmVyZXJlIHJlbWFpbmluZykiICYmCisJdGVzdCAteiAiJGNvbmZsaWN0cyIgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZXRvb2wgdGFrZXMgcGFydGlhbCBwYXRoJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAmJgorCXRlc3RfY29uZmlnIHJlcmVyZS5lbmFibGVkIGZhbHNlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QxMiBicmFuY2gxICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgc3ViZGlyICkgJiYKKworCXRlc3QgIiQoY2F0IHN1YmRpci9maWxlMykiID0gIm1hc3RlciBuZXcgc3ViIiAmJgorCWdpdCByZXNldCAtLWhhcmQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlZCB2cyBtb2RpZmllZCBzdWJtb2R1bGUnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdDYgYnJhbmNoMSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJbXYgc3VibW9kIHN1Ym1vZC1tb3ZlZGFzaWRlICYmCisJZ2l0IHJtIC0tY2FjaGVkIHN1Ym1vZCAmJgorCWdpdCBjb21taXQgLW0gIlN1Ym1vZHVsZSBkZWxldGVkIGZyb20gYnJhbmNoIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0Ni5hIHRlc3Q2ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgorCXJtZGlyIHN1Ym1vZCAmJiBtdiBzdWJtb2QtbW92ZWRhc2lkZSBzdWJtb2QgJiYKKwl0ZXN0ICIkKGNhdCBzdWJtb2QvYmFyKSIgPSAiYnJhbmNoMSBzdWJtb2R1bGUiICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0ICIkKGNhdCBzdWJtb2QvYmFyKSIgPSAibWFzdGVyIHN1Ym1vZHVsZSIgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGtlZXBpbmcgbW9kdWxlIiAmJgorCisJbXYgc3VibW9kIHN1Ym1vZC1tb3ZlZGFzaWRlICYmCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3Q2LmIgdGVzdDYgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKKwl0ZXN0ICEgLWUgc3VibW9kICYmCisJb3V0cHV0PSIkKGdpdCBtZXJnZXRvb2wgLS1uby1wcm9tcHQpIiAmJgorCXRlc3QgIiRvdXRwdXQiID0gIk5vIGZpbGVzIG5lZWQgbWVyZ2luZyIgJiYKKwlnaXQgY29tbWl0IC1tICJNZXJnZSByZXNvbHZlZCBieSBkZWxldGluZyBtb2R1bGUiICYmCisKKwltdiBzdWJtb2QtbW92ZWRhc2lkZSBzdWJtb2QgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdDYuYyBtYXN0ZXIgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0NiAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgorCXRlc3QgISAtZSBzdWJtb2QgJiYKKwl0ZXN0IC1kIHN1Ym1vZC5vcmlnICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGRlbGV0aW5nIG1vZHVsZSIgJiYKKwltdiBzdWJtb2Qub3JpZyBzdWJtb2QgJiYKKworCWdpdCBjaGVja291dCAtYiB0ZXN0Ni5kIG1hc3RlciAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3Q2ICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisJdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0ICIkKGNhdCBzdWJtb2QvYmFyKSIgPSAibWFzdGVyIHN1Ym1vZHVsZSIgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGtlZXBpbmcgbW9kdWxlIiAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaWxlIHZzIG1vZGlmaWVkIHN1Ym1vZHVsZScgJworCWdpdCBjaGVja291dCAtYiB0ZXN0NyBicmFuY2gxICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwltdiBzdWJtb2Qgc3VibW9kLW1vdmVkYXNpZGUgJiYKKwlnaXQgcm0gLS1jYWNoZWQgc3VibW9kICYmCisJZWNobyBub3QgYSBzdWJtb2R1bGUgPnN1Ym1vZCAmJgorCWdpdCBhZGQgc3VibW9kICYmCisJZ2l0IGNvbW1pdCAtbSAiU3VibW9kdWxlIHBhdGggYmVjb21lcyBmaWxlIiAmJgorCWdpdCBjaGVja291dCAtYiB0ZXN0Ny5hIGJyYW5jaDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMSBmaWxlMiBzcGFjZWRcIG5hbWUgc3ViZGlyL2ZpbGUzID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGJvdGggPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisJcm1kaXIgc3VibW9kICYmIG12IHN1Ym1vZC1tb3ZlZGFzaWRlIHN1Ym1vZCAmJgorCXRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJicmFuY2gxIHN1Ym1vZHVsZSIgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJtYXN0ZXIgc3VibW9kdWxlIiAmJgorCW91dHB1dD0iJChnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0KSIgJiYKKwl0ZXN0ICIkb3V0cHV0IiA9ICJObyBmaWxlcyBuZWVkIG1lcmdpbmciICYmCisJZ2l0IGNvbW1pdCAtbSAiTWVyZ2UgcmVzb2x2ZWQgYnkga2VlcGluZyBtb2R1bGUiICYmCisKKwltdiBzdWJtb2Qgc3VibW9kLW1vdmVkYXNpZGUgJiYKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdDcuYiB0ZXN0NyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJKCB5ZXMgIiIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxIGZpbGUyIHNwYWNlZFwgbmFtZSBzdWJkaXIvZmlsZTMgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgYm90aCA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICJkIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTExIGZpbGUxMiA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3QgIiQoY2F0IHN1Ym1vZCkiID0gIm5vdCBhIHN1Ym1vZHVsZSIgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGtlZXBpbmcgZmlsZSIgJiYKKworCWdpdCBjaGVja291dCAtYiB0ZXN0Ny5jIG1hc3RlciAmJgorCXJtZGlyIHN1Ym1vZCAmJiBtdiBzdWJtb2QtbW92ZWRhc2lkZSBzdWJtb2QgJiYKKwl0ZXN0ICEgLWUgc3VibW9kLm9yaWcgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0NyAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgImQiIHwgZ2l0IG1lcmdldG9vbCBmaWxlMTEgZmlsZTEyID4vZGV2L251bGwgMj4mMSApICYmCisJKCB5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgorCXRlc3QgLWQgc3VibW9kLm9yaWcgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3QgIiQoY2F0IHN1Ym1vZCkiID0gIm5vdCBhIHN1Ym1vZHVsZSIgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGtlZXBpbmcgZmlsZSIgJiYKKworCWdpdCBjaGVja291dCAtYiB0ZXN0Ny5kIG1hc3RlciAmJgorCXJtZGlyIHN1Ym1vZCAmJiBtdiBzdWJtb2Qub3JpZyBzdWJtb2QgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0NyAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwkoIHllcyAiIiB8IGdpdCBtZXJnZXRvb2wgZmlsZTEgZmlsZTIgc3BhY2VkXCBuYW1lIHN1YmRpci9maWxlMyA+L2Rldi9udWxsIDI+JjEgKSAmJgorCSggeWVzICIiIHwgZ2l0IG1lcmdldG9vbCBib3RoPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAiZCIgfCBnaXQgbWVyZ2V0b29sIGZpbGUxMSBmaWxlMTIgPi9kZXYvbnVsbCAyPiYxICkgJiYKKwkoIHllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisJdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0ICIkKGNhdCBzdWJtb2QvYmFyKSIgPSAibWFzdGVyIHN1Ym1vZHVsZSIgJiYKKwlvdXRwdXQ9IiQoZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCkiICYmCisJdGVzdCAiJG91dHB1dCIgPSAiTm8gZmlsZXMgbmVlZCBtZXJnaW5nIiAmJgorCWdpdCBjb21taXQgLW0gIk1lcmdlIHJlc29sdmVkIGJ5IGtlZXBpbmcgbW9kdWxlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtb2R1bGUgaW4gc3ViZGlyZWN0b3J5JyAnCisJZ2l0IGNoZWNrb3V0IC1iIHRlc3QxMCBicmFuY2gxICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQl0ZXN0X2NyZWF0ZV9yZXBvIHN1YmRpcl9tb2R1bGUgJiYKKwkJKAorCQljZCBzdWJkaXJfbW9kdWxlICYmCisJCTogPmZpbGUxNSAmJgorCQlnaXQgYWRkIGZpbGUxNSAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgaW5pdGlhbCB2ZXJzaW9ucyIKKwkJKQorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCBnaXQ6Ly9leGFtcGxlLmNvbS9zdWJzdWJtb2R1bGUgc3ViZGlyL3N1YmRpcl9tb2R1bGUgJiYKKwlnaXQgYWRkIHN1YmRpci9zdWJkaXJfbW9kdWxlICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkIHN1Ym1vZHVsZSBpbiBzdWJkaXJlY3RvcnkiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdDEwLmEgdGVzdDEwICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwkoCisJY2Qgc3ViZGlyL3N1YmRpcl9tb2R1bGUgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHN1cGVyMTAuYSAmJgorCQllY2hvIHRlc3QxMC5hID5maWxlMTUgJiYKKwkJZ2l0IGFkZCBmaWxlMTUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAib24gYnJhbmNoIDEwLmEiCisJKSAmJgorCWdpdCBhZGQgc3ViZGlyL3N1YmRpcl9tb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2Ugc3VibW9kdWxlIGluIHN1YmRpcmVjdG9yeSBvbiB0ZXN0MTAuYSIgJiYKKworCWdpdCBjaGVja291dCAtYiB0ZXN0MTAuYiB0ZXN0MTAgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCSgKKwkJY2Qgc3ViZGlyL3N1YmRpcl9tb2R1bGUgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIHN1cGVyMTAuYiAmJgorCQllY2hvIHRlc3QxMC5iID5maWxlMTUgJiYKKwkJZ2l0IGFkZCBmaWxlMTUgJiYKKwkJZ2l0IGNvbW1pdCAtbSAib24gYnJhbmNoIDEwLmIiCisJKSAmJgorCWdpdCBhZGQgc3ViZGlyL3N1YmRpcl9tb2R1bGUgJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2Ugc3VibW9kdWxlIGluIHN1YmRpcmVjdG9yeSBvbiB0ZXN0MTAuYiIgJiYKKworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0MTAuYSA+L2Rldi9udWxsIDI+JjEgJiYKKwkoCisJCWNkIHN1YmRpciAmJgorCQkoIHllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1YmRpcl9tb2R1bGUgKQorCSkgJiYKKwl0ZXN0ICIkKGNhdCBzdWJkaXIvc3ViZGlyX21vZHVsZS9maWxlMTUpIiA9ICJ0ZXN0MTAuYiIgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3QgIiQoY2F0IHN1YmRpci9zdWJkaXJfbW9kdWxlL2ZpbGUxNSkiID0gInRlc3QxMC5iIiAmJgorCWdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIHRlc3QxMC5hID4vZGV2L251bGwgMj4mMSAmJgorCSggeWVzICJyIiB8IGdpdCBtZXJnZXRvb2wgc3ViZGlyL3N1YmRpcl9tb2R1bGUgKSAmJgorCXRlc3QgIiQoY2F0IHN1YmRpci9zdWJkaXJfbW9kdWxlL2ZpbGUxNSkiID0gInRlc3QxMC5iIiAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJdGVzdCAiJChjYXQgc3ViZGlyL3N1YmRpcl9tb2R1bGUvZmlsZTE1KSIgPSAidGVzdDEwLmEiICYmCisJZ2l0IGNvbW1pdCAtbSAiYnJhbmNoMSByZXNvbHZlZCB3aXRoIG1lcmdldG9vbCIgJiYKKwlybSAtcmYgc3ViZGlyL3N1YmRpcl9tb2R1bGUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGlyZWN0b3J5IHZzIG1vZGlmaWVkIHN1Ym1vZHVsZScgJworCWdpdCBjaGVja291dCAtYiB0ZXN0MTEgYnJhbmNoMSAmJgorCW12IHN1Ym1vZCBzdWJtb2QtbW92ZWRhc2lkZSAmJgorCWdpdCBybSAtLWNhY2hlZCBzdWJtb2QgJiYKKwlta2RpciBzdWJtb2QgJiYKKwllY2hvIG5vdCBhIHN1Ym1vZHVsZSA+c3VibW9kL2ZpbGUxNiAmJgorCWdpdCBhZGQgc3VibW9kL2ZpbGUxNiAmJgorCWdpdCBjb21taXQgLW0gIlN1Ym1vZHVsZSBwYXRoIGJlY29tZXMgZGlyZWN0b3J5IiAmJgorCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwkoIHllcyAibCIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisJdGVzdCAiJChjYXQgc3VibW9kL2ZpbGUxNikiID0gIm5vdCBhIHN1Ym1vZHVsZSIgJiYKKwlybSAtcmYgc3VibW9kLm9yaWcgJiYKKworCWdpdCByZXNldCAtLWhhcmQgPi9kZXYvbnVsbCAyPiYxICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIG1hc3RlciAmJgorCXRlc3QgLW4gIiQoZ2l0IGxzLWZpbGVzIC11KSIgJiYKKwl0ZXN0ICEgLWUgc3VibW9kLm9yaWcgJiYKKwkoIHllcyAiciIgfCBnaXQgbWVyZ2V0b29sIHN1Ym1vZCApICYmCisJdGVzdCAtZCBzdWJtb2Qub3JpZyAmJgorCXRlc3QgIiQoY2F0IHN1Ym1vZC5vcmlnL2ZpbGUxNikiID0gIm5vdCBhIHN1Ym1vZHVsZSIgJiYKKwlybSAtciBzdWJtb2Qub3JpZyAmJgorCW12IHN1Ym1vZC1tb3ZlZGFzaWRlLy5naXQgc3VibW9kICYmCisJKCBjZCBzdWJtb2QgJiYgZ2l0IGNsZWFuIC1mICYmIGdpdCByZXNldCAtLWhhcmQgKSAmJgorCWdpdCBzdWJtb2R1bGUgdXBkYXRlIC1OICYmCisJdGVzdCAiJChjYXQgc3VibW9kL2JhcikiID0gIm1hc3RlciBzdWJtb2R1bGUiICYmCisJZ2l0IHJlc2V0IC0taGFyZCA+L2Rldi9udWxsIDI+JjEgJiYgcm0gLXJmIHN1Ym1vZC1tb3ZlZGFzaWRlICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdDExLmMgbWFzdGVyICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgdGVzdDExICYmCisJdGVzdCAtbiAiJChnaXQgbHMtZmlsZXMgLXUpIiAmJgorCSggeWVzICJsIiB8IGdpdCBtZXJnZXRvb2wgc3VibW9kICkgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3QgIiQoY2F0IHN1Ym1vZC9iYXIpIiA9ICJtYXN0ZXIgc3VibW9kdWxlIiAmJgorCisJZ2l0IHJlc2V0IC0taGFyZCA+L2Rldi9udWxsIDI+JjEgJiYKKwlnaXQgc3VibW9kdWxlIHVwZGF0ZSAtTiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSB0ZXN0MTEgJiYKKwl0ZXN0IC1uICIkKGdpdCBscy1maWxlcyAtdSkiICYmCisJdGVzdCAhIC1lIHN1Ym1vZC5vcmlnICYmCisJKCB5ZXMgInIiIHwgZ2l0IG1lcmdldG9vbCBzdWJtb2QgKSAmJgorCXRlc3QgIiQoY2F0IHN1Ym1vZC9maWxlMTYpIiA9ICJub3QgYSBzdWJtb2R1bGUiICYmCisKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciA+L2Rldi9udWxsIDI+JjEgJiYKKwkoIGNkIHN1Ym1vZCAmJiBnaXQgY2xlYW4gLWYgJiYgZ2l0IHJlc2V0IC0taGFyZCApICYmCisJZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLU4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZSB3aXRoIG5vIGJhc2UnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdDEzIGJyYW5jaDEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCAtLXRvb2wgbXliYXNlIC0tIGJvdGggJiYKKwk+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBib3RoIGV4cGVjdGVkICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgPi9kZXYvbnVsbCAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N1c3RvbSBjb21tYW5kcyBvdmVycmlkZSBidWlsdC1pbnMnICcKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdDE0IGJyYW5jaDEgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wuZGVmYXVsdHMuY21kICJjYXQgXCJcJFJFTU9URVwiID5cIlwkTUVSR0VEXCIiICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLmRlZmF1bHRzLnRydXN0RXhpdENvZGUgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0IC0tdG9vbCBkZWZhdWx0cyAtLSBib3RoICYmCisJZWNobyBtYXN0ZXIgYm90aCBhZGRlZCA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBib3RoIGV4cGVjdGVkICYmCisJZ2l0IHJlc2V0IC0taGFyZCBtYXN0ZXIgPi9kZXYvbnVsbCAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZpbGVuYW1lcyBzZWVuIGJ5IHRvb2xzIHN0YXJ0IHdpdGggLi8nICcKKwlnaXQgY2hlY2tvdXQgLWIgdGVzdDE1IGJyYW5jaDEgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wud3JpdGVUb1RlbXAgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wubXllY2hvLmNtZCAiZWNobyBcIlwkTE9DQUxcIiIgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wubXllY2hvLnRydXN0RXhpdENvZGUgdHJ1ZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBtYXN0ZXIgJiYKKwlnaXQgbWVyZ2V0b29sIC0tbm8tcHJvbXB0IC0tdG9vbCBteWVjaG8gLS0gYm90aCA+YWN0dWFsICYmCisJZ3JlcCBeXC4vYm90aF9MT0NBTF8gYWN0dWFsID4vZGV2L251bGwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciA+L2Rldi9udWxsIDI+JjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVtcG9yYXJ5IGZpbGVuYW1lcyBhcmUgdXNlZCB3aXRoIG1lcmdldG9vbC53cml0ZVRvVGVtcCcgJworCWdpdCBjaGVja291dCAtYiB0ZXN0MTYgYnJhbmNoMSAmJgorCXRlc3RfY29uZmlnIG1lcmdldG9vbC53cml0ZVRvVGVtcCB0cnVlICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLm15ZWNoby5jbWQgImVjaG8gXCJcJExPQ0FMXCIiICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLm15ZWNoby50cnVzdEV4aXRDb2RlIHRydWUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgbWFzdGVyICYmCisJZ2l0IG1lcmdldG9vbCAtLW5vLXByb21wdCAtLXRvb2wgbXllY2hvIC0tIGJvdGggPmFjdHVhbCAmJgorCXRlc3RfbXVzdF9mYWlsIGdyZXAgXlwuL2JvdGhfTE9DQUxfIGFjdHVhbCA+L2Rldi9udWxsICYmCisJZ3JlcCAvYm90aF9MT0NBTF8gYWN0dWFsID4vZGV2L251bGwgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG1hc3RlciA+L2Rldi9udWxsIDI+JjEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NjExLW1lcmdlLWFib3J0LnNoIGIvdC90NzYxMS1tZXJnZS1hYm9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YjQ3OThlCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzYxMS1tZXJnZS1hYm9ydC5zaApAQCAtMCwwICsxLDMxOSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgYWJvcnRpbmcgaW4tcHJvZ3Jlc3MgbWVyZ2VzCisKK1NldCB1cCByZXBvIHdpdGggY29uZmxpY3RpbmcgYW5kIG5vbi1jb25mbGljdGluZyBicmFuY2hlczoKKworVGhlcmUgYXJlIHRocmVlIGZpbGVzIGZvby9iYXIvYmF6LCBhbmQgdGhlIGZvbGxvd2luZyBncmFwaCBpbGx1c3RyYXRlcyB0aGUKK2NvbnRlbnQgb2YgdGhlc2UgZmlsZXMgaW4gZWFjaCBjb21taXQ6CisKKyMgZm9vL2Jhci9iYXogLS0tIGZvby9iYXIvYmF6eiAgICAgPC0tIG1hc3RlcgorIyAgICAgICAgICAgICBcCisjICAgICAgICAgICAgICAtLS0gZm9vL2JhcmYvYmF6ZiAgIDwtLSBjb25mbGljdF9icmFuY2gKKyMgICAgICAgICAgICAgICBcCisjICAgICAgICAgICAgICAgIC0tLSBmb28vYmFydC9iYXogIDwtLSBjbGVhbl9icmFuY2gKKworTmV4dCwgdGVzdCBnaXQgbWVyZ2UgLS1hYm9ydCB3aXRoIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgorLSBiZWZvcmUvYWZ0ZXIgc3VjY2Vzc2Z1bCBtZXJnZSAoc2hvdWxkIGZhaWwgd2hlbiBub3QgaW4gbWVyZ2UgY29udGV4dCkKKy0gd2l0aC93aXRob3V0IGNvbmZsaWN0cworLSBjbGVhbi9kaXJ0eSBpbmRleCBiZWZvcmUgbWVyZ2UKKy0gY2xlYW4vZGlydHkgd29ya3RyZWUgYmVmb3JlIG1lcmdlCistIGRpcnR5IGluZGV4IGJlZm9yZSBtZXJnZSBtYXRjaGVzIGNvbnRlbnRzIG9uIHJlbW90ZSBicmFuY2gKKy0gY2hhbmdlZC91bmNoYW5nZWQgd29ya3RyZWUgYWZ0ZXIgbWVyZ2UKKy0gY2hhbmdlZC91bmNoYW5nZWQgaW5kZXggYWZ0ZXIgbWVyZ2UKKycKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCSMgQ3JlYXRlIHRoZSBhYm92ZSByZXBvCisJZWNobyBmb28gPiBmb28gJiYKKwllY2hvIGJhciA+IGJhciAmJgorCWVjaG8gYmF6ID4gYmF6ICYmCisJZ2l0IGFkZCBmb28gYmFyIGJheiAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbCAmJgorCWVjaG8gYmF6eiA+IGJheiAmJgorCWdpdCBjb21taXQgLWEgLW0gInNlY29uZCIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY29uZmxpY3RfYnJhbmNoIEhFQUReICYmCisJZWNobyBiYXJmID4gYmFyICYmCisJZWNobyBiYXpmID4gYmF6ICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiY29uZmxpY3QiICYmCisJZ2l0IGNoZWNrb3V0IC1iIGNsZWFuX2JyYW5jaCBIRUFEXiAmJgorCWVjaG8gYmFydCA+IGJhciAmJgorCWdpdCBjb21taXQgLWEgLW0gImNsZWFuIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKworcHJlX21lcmdlX2hlYWQ9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aG91dCBNRVJHRV9IRUFEICh1bnN0YXJ0ZWQgbWVyZ2UpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tYWJvcnQgMj5vdXRwdXQgJiYKKwl0ZXN0X2kxOG5ncmVwIE1FUkdFX0hFQUQgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWxzIHdpdGhvdXQgTUVSR0VfSEVBRCAodW5zdGFydGVkIG1lcmdlKTogLmdpdC9NRVJHRV9IRUFEIHNhbml0eScgJworCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aG91dCBNRVJHRV9IRUFEIChjb21wbGV0ZWQgbWVyZ2UpJyAnCisJZ2l0IG1lcmdlIGNsZWFuX2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwkjIE1lcmdlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQKKwlwb3N0X21lcmdlX2hlYWQ9IiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1hYm9ydCAyPm91dHB1dCAmJgorCXRlc3RfaTE4bmdyZXAgTUVSR0VfSEVBRCBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFpbHMgd2l0aG91dCBNRVJHRV9IRUFEIChjb21wbGV0ZWQgbWVyZ2UpOiAuZ2l0L01FUkdFX0hFQUQgc2FuaXR5JyAnCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwb3N0X21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRm9yZ2V0IHByZXZpb3VzIG1lcmdlJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAiJHByZV9tZXJnZV9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBYm9ydCBhZnRlciAtLW5vLWNvbW1pdCcgJworCSMgUmVkbyBtZXJnZSwgYnV0IHN0b3AgYmVmb3JlIGNyZWF0aW5nIG1lcmdlIGNvbW1pdAorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjbGVhbl9icmFuY2ggJiYKKwl0ZXN0IC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCSMgQWJvcnQgbm9uLWNvbmZsaWN0aW5nIG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZikiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLXN0YWdlZCkiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Fib3J0IGFmdGVyIGNvbmZsaWN0cycgJworCSMgQ3JlYXRlIGNvbmZsaWN0aW5nIG1lcmdlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJIyBBYm9ydCBjb25mbGljdGluZyBtZXJnZQorCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1zdGFnZWQpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbGVhbiBtZXJnZSB3aXRoIGRpcnR5IGluZGV4IGZhaWxzJyAnCisJZWNobyB4eXp6eSA+PiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBkaWZmIC0tc3RhZ2VkID4gZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNsZWFuX2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmKSIgJiYKKwlnaXQgZGlmZiAtLXN0YWdlZCA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ29uZmxpY3RpbmcgbWVyZ2Ugd2l0aCBkaXJ0eSBpbmRleCBmYWlscycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdF9icmFuY2ggJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZikiICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Jlc2V0IGluZGV4IChidXQgcHJlc2VydmUgd29ya3RyZWUgY2hhbmdlcyknICcKKwlnaXQgcmVzZXQgIiRwcmVfbWVyZ2VfaGVhZCIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWJvcnQgY2xlYW4gbWVyZ2Ugd2l0aCBub24tY29uZmxpY3RpbmcgZGlydHkgd29ya3RyZWUnICcKKwlnaXQgbWVyZ2UgLS1uby1jb21taXQgY2xlYW5fYnJhbmNoICYmCisJdGVzdCAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwkjIEFib3J0IG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJdGVzdCAteiAiJChnaXQgZGlmZiAtLXN0YWdlZCkiICYmCisJZ2l0IGRpZmYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Fib3J0IGNvbmZsaWN0aW5nIG1lcmdlIHdpdGggbm9uLWNvbmZsaWN0aW5nIGRpcnR5IHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJIyBBYm9ydCBtZXJnZQorCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1zdGFnZWQpIiAmJgorCWdpdCBkaWZmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXNldCB3b3JrdHJlZSBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAiJHByZV9tZXJnZV9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdGYWlsIGNsZWFuIG1lcmdlIHdpdGggY29uZmxpY3RpbmcgZGlydHkgd29ya3RyZWUnICcKKwllY2hvIHh5enp5ID4+IGJhciAmJgorCWdpdCBkaWZmID4gZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tbm8tY29tbWl0IGNsZWFuX2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tc3RhZ2VkKSIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRmFpbCBjb25mbGljdGluZyBtZXJnZSB3aXRoIGNvbmZsaWN0aW5nIGRpcnR5IHdvcmt0cmVlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tc3RhZ2VkKSIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUmVzZXQgd29ya3RyZWUgY2hhbmdlcycgJworCWdpdCByZXNldCAtLWhhcmQgIiRwcmVfbWVyZ2VfaGVhZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRmFpbCBjbGVhbiBtZXJnZSB3aXRoIG1hdGNoaW5nIGRpcnR5IHdvcmt0cmVlJyAnCisJZWNobyBiYXJ0ID4gYmFyICYmCisJZ2l0IGRpZmYgPiBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgLS1uby1jb21taXQgY2xlYW5fYnJhbmNoICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYgLS1zdGFnZWQpIiAmJgorCWdpdCBkaWZmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBYm9ydCBjbGVhbiBtZXJnZSB3aXRoIG1hdGNoaW5nIGRpcnR5IGluZGV4JyAnCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgZGlmZiAtLXN0YWdlZCA+IGV4cGVjdCAmJgorCWdpdCBtZXJnZSAtLW5vLWNvbW1pdCBjbGVhbl9icmFuY2ggJiYKKwl0ZXN0IC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCSMjIyBXaGVuIGFib3J0aW5nIHRoZSBtZXJnZSwgZ2l0IHdpbGwgZGlzY2FyZCBhbGwgc3RhZ2VkIGNoYW5nZXMsCisJIyMjIGluY2x1ZGluZyB0aG9zZSB0aGF0IHdlcmUgc3RhZ2VkIHByZS1tZXJnZS4gSW4gb3RoZXIgd29yZHMsCisJIyMjIC0tYWJvcnQgd2lsbCBMT1NFIGFueSBzdGFnZWQgY2hhbmdlcyAodGhlIHN0YWdlZCBjaGFuZ2VzIHRoYXQKKwkjIyMgYXJlIGxvc3QgbXVzdCBtYXRjaCB0aGUgbWVyZ2UgcmVzdWx0LCBvciB0aGUgbWVyZ2Ugd291bGQgbm90CisJIyMjIGhhdmUgYmVlbiBhbGxvd2VkIHRvIHN0YXJ0KS4gQ2hhbmdlIGV4cGVjdGF0aW9ucyBhY2NvcmRpbmdseToKKwlybSBleHBlY3QgJiYKKwl0b3VjaCBleHBlY3QgJiYKKwkjIEFib3J0IG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdCAteiAiJChnaXQgZGlmZikiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Jlc2V0IHdvcmt0cmVlIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICIkcHJlX21lcmdlX2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0ZhaWwgY29uZmxpY3RpbmcgbWVyZ2Ugd2l0aCBtYXRjaGluZyBkaXJ0eSB3b3JrdHJlZScgJworCWVjaG8gYmFyZiA+IGJhciAmJgorCWdpdCBkaWZmID4gZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgISAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwl0ZXN0ICIkcHJlX21lcmdlX2hlYWQiID0gIiQoZ2l0IHJldi1wYXJzZSBIRUFEKSIgJiYKKwl0ZXN0IC16ICIkKGdpdCBkaWZmIC0tc3RhZ2VkKSIgJiYKKwlnaXQgZGlmZiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWJvcnQgY29uZmxpY3RpbmcgbWVyZ2Ugd2l0aCBtYXRjaGluZyBkaXJ0eSBpbmRleCcgJworCWdpdCBhZGQgYmFyICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBleHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgbWVyZ2UgY29uZmxpY3RfYnJhbmNoICYmCisJdGVzdCAtZiAuZ2l0L01FUkdFX0hFQUQgJiYKKwkjIyMgV2hlbiBhYm9ydGluZyB0aGUgbWVyZ2UsIGdpdCB3aWxsIGRpc2NhcmQgYWxsIHN0YWdlZCBjaGFuZ2VzLAorCSMjIyBpbmNsdWRpbmcgdGhvc2UgdGhhdCB3ZXJlIHN0YWdlZCBwcmUtbWVyZ2UuIEluIG90aGVyIHdvcmRzLAorCSMjIyAtLWFib3J0IHdpbGwgTE9TRSBhbnkgc3RhZ2VkIGNoYW5nZXMgKHRoZSBzdGFnZWQgY2hhbmdlcyB0aGF0CisJIyMjIGFyZSBsb3N0IG11c3QgbWF0Y2ggdGhlIG1lcmdlIHJlc3VsdCwgb3IgdGhlIG1lcmdlIHdvdWxkIG5vdAorCSMjIyBoYXZlIGJlZW4gYWxsb3dlZCB0byBzdGFydCkuIENoYW5nZSBleHBlY3RhdGlvbnMgYWNjb3JkaW5nbHk6CisJcm0gZXhwZWN0ICYmCisJdG91Y2ggZXhwZWN0ICYmCisJIyBBYm9ydCBtZXJnZQorCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCWdpdCBkaWZmIC0tc3RhZ2VkID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3QgLXogIiQoZ2l0IGRpZmYpIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSZXNldCB3b3JrdHJlZSBjaGFuZ2VzJyAnCisJZ2l0IHJlc2V0IC0taGFyZCAiJHByZV9tZXJnZV9oZWFkIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBYm9ydCBtZXJnZSB3aXRoIHByZS0gYW5kIHBvc3QtbWVyZ2Ugd29ya3RyZWUgY2hhbmdlcycgJworCSMgUHJlLW1lcmdlIHdvcmt0cmVlIGNoYW5nZXMKKwllY2hvIHh5enp5ID4gZm9vICYmCisJZWNobyBiYXJmID4gYmFyICYmCisJZ2l0IGFkZCBiYXIgJiYKKwlnaXQgZGlmZiA+IGV4cGVjdCAmJgorCWdpdCBkaWZmIC0tc3RhZ2VkID4gZXhwZWN0LXN0YWdlZCAmJgorCSMgUGVyZm9ybSBtZXJnZQorCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSBjb25mbGljdF9icmFuY2ggJiYKKwl0ZXN0IC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCSMgUG9zdC1tZXJnZSB3b3JrdHJlZSBjaGFuZ2VzCisJZWNobyB5enh4eiA+IGZvbyAmJgorCWVjaG8gYmxlY2ggPiBiYXogJiYKKwkjIyMgV2hlbiBhYm9ydGluZyB0aGUgbWVyZ2UsIGdpdCB3aWxsIGRpc2NhcmQgc3RhZ2VkIGNoYW5nZXMgKGJhcikKKwkjIyMgYW5kIHVubWVyZ2VkIGNoYW5nZXMgKGJheikuIE90aGVyIGNoYW5nZXMgdGhhdCBhcmUgbmVpdGhlcgorCSMjIyBzdGFnZWQgbm9yIG1hcmtlZCBhcyB1bm1lcmdlZCAoZm9vKSwgd2lsbCBiZSBwcmVzZXJ2ZWQuIEZvcgorCSMjIyB0aGVzZSBjaGFuZ2VkLCBnaXQgY2Fubm90IHRlbGwgcHJlLW1lcmdlIGNoYW5nZXMgYXBhcnQgZnJvbQorCSMjIyBwb3N0LW1lcmdlIGNoYW5nZXMsIHNvIHRoZSBwb3N0LW1lcmdlIGNoYW5nZXMgd2lsbCBiZQorCSMjIyBwcmVzZXJ2ZWQuIENoYW5nZSBleHBlY3RhdGlvbnMgYWNjb3JkaW5nbHk6CisJZ2l0IGRpZmYgLS0gZm9vID4gZXhwZWN0ICYmCisJcm0gZXhwZWN0LXN0YWdlZCAmJgorCXRvdWNoIGV4cGVjdC1zdGFnZWQgJiYKKwkjIEFib3J0IG1lcmdlCisJZ2l0IG1lcmdlIC0tYWJvcnQgJiYKKwl0ZXN0ICEgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJdGVzdCAiJHByZV9tZXJnZV9oZWFkIiA9ICIkKGdpdCByZXYtcGFyc2UgSEVBRCkiICYmCisJZ2l0IGRpZmYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBhY3R1YWwtc3RhZ2VkICYmCisJdGVzdF9jbXAgZXhwZWN0LXN0YWdlZCBhY3R1YWwtc3RhZ2VkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1Jlc2V0IHdvcmt0cmVlIGNoYW5nZXMnICcKKwlnaXQgcmVzZXQgLS1oYXJkICIkcHJlX21lcmdlX2hlYWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Fib3J0IG1lcmdlIHdpdGggcHJlLSBhbmQgcG9zdC1tZXJnZSBpbmRleCBjaGFuZ2VzJyAnCisJIyBQcmUtbWVyZ2Ugd29ya3RyZWUgY2hhbmdlcworCWVjaG8geHl6enkgPiBmb28gJiYKKwllY2hvIGJhcmYgPiBiYXIgJiYKKwlnaXQgYWRkIGJhciAmJgorCWdpdCBkaWZmID4gZXhwZWN0ICYmCisJZ2l0IGRpZmYgLS1zdGFnZWQgPiBleHBlY3Qtc3RhZ2VkICYmCisJIyBQZXJmb3JtIG1lcmdlCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGNvbmZsaWN0X2JyYW5jaCAmJgorCXRlc3QgLWYgLmdpdC9NRVJHRV9IRUFEICYmCisJIyBQb3N0LW1lcmdlIHdvcmt0cmVlIGNoYW5nZXMKKwllY2hvIHl6eHh6ID4gZm9vICYmCisJZWNobyBibGVjaCA+IGJheiAmJgorCWdpdCBhZGQgZm9vIGJhciAmJgorCSMjIyBXaGVuIGFib3J0aW5nIHRoZSBtZXJnZSwgZ2l0IHdpbGwgZGlzY2FyZCBhbGwgc3RhZ2VkIGNoYW5nZXMKKwkjIyMgKGZvbywgYmFyIGFuZCBiYXopLCBhbmQgbm8gY2hhbmdlcyB3aWxsIGJlIHByZXNlcnZlZC4gV2hldGhlcgorCSMjIyB0aGUgY2hhbmdlcyB3ZXJlIHN0YWdlZCBwcmUtIG9yIHBvc3QtbWVyZ2UgZG9lcyBub3QgbWF0dGVyCisJIyMjIChleGNlcHQgZm9yIG5vdCBwcmV2ZW50aW5nIHN0YXJ0aW5nIHRoZSBtZXJnZSkuCisJIyMjIENoYW5nZSBleHBlY3RhdGlvbnMgYWNjb3JkaW5nbHk6CisJcm0gZXhwZWN0IGV4cGVjdC1zdGFnZWQgJiYKKwl0b3VjaCBleHBlY3QgJiYKKwl0b3VjaCBleHBlY3Qtc3RhZ2VkICYmCisJIyBBYm9ydCBtZXJnZQorCWdpdCBtZXJnZSAtLWFib3J0ICYmCisJdGVzdCAhIC1mIC5naXQvTUVSR0VfSEVBRCAmJgorCXRlc3QgIiRwcmVfbWVyZ2VfaGVhZCIgPSAiJChnaXQgcmV2LXBhcnNlIEhFQUQpIiAmJgorCWdpdCBkaWZmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBkaWZmIC0tc3RhZ2VkID4gYWN0dWFsLXN0YWdlZCAmJgorCXRlc3RfY21wIGV4cGVjdC1zdGFnZWQgYWN0dWFsLXN0YWdlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MTItbWVyZ2UtdmVyaWZ5LXNpZ25hdHVyZXMuc2ggYi90L3Q3NjEyLW1lcmdlLXZlcmlmeS1zaWduYXR1cmVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhhZTY5YTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NjEyLW1lcmdlLXZlcmlmeS1zaWduYXR1cmVzLnNoCkBAIC0wLDAgKzEsNjEgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHRlc3RzJworLiAuL3Rlc3QtbGliLnNoCisuICIkVEVTVF9ESVJFQ1RPUlkvbGliLWdwZy5zaCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ2NyZWF0ZSBzaWduZWQgY29tbWl0cycgJworCWVjaG8gMSA+ZmlsZSAmJiBnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyBpbml0aWFsICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZS1zaWduZWQgJiYKKwllY2hvIDMgPmVsaWYgJiYgZ2l0IGFkZCBlbGlmICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLVMgLW0gInNpZ25lZCBvbiBzaWRlIiAmJgorCWdpdCBjaGVja291dCBpbml0aWFsICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgc2lkZS11bnNpZ25lZCAmJgorCWVjaG8gMyA+Zm9vICYmIGdpdCBhZGQgZm9vICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLW0gInVuc2lnbmVkIG9uIHNpZGUiICYmCisJZ2l0IGNoZWNrb3V0IGluaXRpYWwgJiYKKworCWdpdCBjaGVja291dCAtYiBzaWRlLWJhZCAmJgorCWVjaG8gMyA+YmFyICYmIGdpdCBhZGQgYmFyICYmCisJdGVzdF90aWNrICYmIGdpdCBjb21taXQgLVMgLW0gImJhZCBvbiBzaWRlIiAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgc2lkZS1iYWQgPnJhdyAmJgorCXNlZCAtZSAicy9iYWQvZm9yZ2VkIGJhZC8iIHJhdyA+Zm9yZ2VkICYmCisJZ2l0IGhhc2gtb2JqZWN0IC13IC10IGNvbW1pdCBmb3JnZWQgPmZvcmdlZC5jb21taXQgJiYKKwlnaXQgY2hlY2tvdXQgaW5pdGlhbCAmJgorCisJZ2l0IGNoZWNrb3V0IC1iIHNpZGUtdW50cnVzdGVkICYmCisJZWNobyAzID5iYXogJiYgZ2l0IGFkZCBiYXogJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtU0I3MjI3MTg5IC1tICJ1bnRydXN0ZWQgb24gc2lkZSIgJiYKKworCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBHUEcgJ21lcmdlIHVuc2lnbmVkIGNvbW1pdCB3aXRoIHZlcmlmaWNhdGlvbicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBtZXJnZSAtLWZmLW9ubHkgLS12ZXJpZnktc2lnbmF0dXJlcyBzaWRlLXVuc2lnbmVkIDI+bWVyZ2VlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImRvZXMgbm90IGhhdmUgYSBHUEcgc2lnbmF0dXJlIiBtZXJnZWVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdtZXJnZSBjb21taXQgd2l0aCBiYWQgc2lnbmF0dXJlIHdpdGggdmVyaWZpY2F0aW9uJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzICQoY2F0IGZvcmdlZC5jb21taXQpIDI+bWVyZ2VlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhIGJhZCBHUEcgc2lnbmF0dXJlIiBtZXJnZWVycm9yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgR1BHICdtZXJnZSBjb21taXQgd2l0aCB1bnRydXN0ZWQgc2lnbmF0dXJlIHdpdGggdmVyaWZpY2F0aW9uJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIC0tZmYtb25seSAtLXZlcmlmeS1zaWduYXR1cmVzIHNpZGUtdW50cnVzdGVkIDI+bWVyZ2VlcnJvciAmJgorCXRlc3RfaTE4bmdyZXAgImhhcyBhbiB1bnRydXN0ZWQgR1BHIHNpZ25hdHVyZSIgbWVyZ2VlcnJvcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2Ugc2lnbmVkIGNvbW1pdCB3aXRoIHZlcmlmaWNhdGlvbicgJworCWdpdCBtZXJnZSAtLXZlcmJvc2UgLS1mZi1vbmx5IC0tdmVyaWZ5LXNpZ25hdHVyZXMgc2lkZS1zaWduZWQgPm1lcmdlb3V0cHV0ICYmCisJdGVzdF9pMThuZ3JlcCAiaGFzIGEgZ29vZCBHUEcgc2lnbmF0dXJlIiBtZXJnZW91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEdQRyAnbWVyZ2UgY29tbWl0IHdpdGggYmFkIHNpZ25hdHVyZSB3aXRob3V0IHZlcmlmaWNhdGlvbicgJworCWdpdCBtZXJnZSAkKGNhdCBmb3JnZWQuY29tbWl0KQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc2MTMtbWVyZ2Utc3VibW9kdWxlLnNoIGIvdC90NzYxMy1tZXJnZS1zdWJtb2R1bGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDFlOWZjYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc2MTMtbWVyZ2Utc3VibW9kdWxlLnNoCkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdtZXJnZSBjYW4gaGFuZGxlIHN1Ym1vZHVsZXMnCisKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9saWItc3VibW9kdWxlLXVwZGF0ZS5zaAorCisjIG1lcmdlcyB3aXRob3V0IGNvbmZsaWN0cwordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXQgbWVyZ2UiCisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0IG1lcmdlIC0tZmYiCisKK3Rlc3Rfc3VibW9kdWxlX3N3aXRjaCAiZ2l0IG1lcmdlIC0tZmYtb25seSIKKworS05PV05fRkFJTFVSRV9OT0ZGX01FUkdFX0RPRVNOVF9DUkVBVEVfRU1QVFlfU1VCTU9EVUxFX0RJUj0xCitLTk9XTl9GQUlMVVJFX05PRkZfTUVSR0VfQVRURU1QVFNfVE9fTUVSR0VfUkVNT1ZFRF9TVUJNT0RVTEVfRklMRVM9MQordGVzdF9zdWJtb2R1bGVfc3dpdGNoICJnaXQgbWVyZ2UgLS1uby1mZiIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NzAwLXJlcGFjay5zaCBiL3QvdDc3MDAtcmVwYWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyMWM1NDcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3NzAwLXJlcGFjay5zaApAQCAtMCwwICsxLDIwMCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCByZXBhY2sgd29ya3MgY29ycmVjdGx5JworCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2JqZWN0cyBpbiBwYWNrcyBtYXJrZWQgLmtlZXAgYXJlIG5vdCByZXBhY2tlZCcgJworCWVjaG8gY29udGVudDEgPiBmaWxlMSAmJgorCWVjaG8gY29udGVudDIgPiBmaWxlMiAmJgorCWdpdCBhZGQgLiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gaW5pdGlhbF9jb21taXQgJiYKKwkjIENyZWF0ZSB0d28gcGFja3MKKwkjIFRoZSBmaXJzdCBwYWNrIHdpbGwgY29udGFpbiBhbGwgb2YgdGhlIG9iamVjdHMgZXhjZXB0IG9uZQorCWdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1hbGwgfCBncmVwIC12IGZpbGUyIHwKKwkJZ2l0IHBhY2stb2JqZWN0cyBwYWNrID4gL2Rldi9udWxsICYmCisJIyBUaGUgc2Vjb25kIHBhY2sgd2lsbCBjb250YWluIHRoZSBleGNsdWRlZCBvYmplY3QKKwlwYWNrc2hhMT0kKGdpdCByZXYtbGlzdCAtLW9iamVjdHMgLS1hbGwgfCBncmVwIGZpbGUyIHwKKwkJZ2l0IHBhY2stb2JqZWN0cyBwYWNrKSAmJgorCT5wYWNrLSRwYWNrc2hhMS5rZWVwICYmCisJb2Jqc2hhMT0kKGdpdCB2ZXJpZnktcGFjayAtdiBwYWNrLSRwYWNrc2hhMS5pZHggfCBoZWFkIC1uIDEgfAorCQlzZWQgLWUgInMvXlwoWzAtOWEtZl1cezQwXH1cKS4qL1wxLyIpICYmCisJbXYgcGFjay0qIC5naXQvb2JqZWN0cy9wYWNrLyAmJgorCWdpdCByZXBhY2sgLUEgLWQgLWwgJiYKKwlnaXQgcHJ1bmUtcGFja2VkICYmCisJZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svKi5pZHg7IGRvCisJCWlkeD0kKGJhc2VuYW1lICRwKQorCQl0ZXN0ICJwYWNrLSRwYWNrc2hhMS5pZHgiID0gIiRpZHgiICYmIGNvbnRpbnVlCisJCWlmIGdpdCB2ZXJpZnktcGFjayAtdiAkcCB8IGVncmVwICJeJG9ianNoYTEiOyB0aGVuCisJCQlmb3VuZF9kdXBsaWNhdGVfb2JqZWN0PTEKKwkJCWVjaG8gIkRVUExJQ0FURSBPQkpFQ1QgRk9VTkQiCisJCQlicmVhaworCQlmaQorCWRvbmUgJiYKKwl0ZXN0IC16ICIkZm91bmRfZHVwbGljYXRlX29iamVjdCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd3JpdGluZyBiaXRtYXBzIHZpYSBjb21tYW5kLWxpbmUgY2FuIGR1cGxpY2F0ZSAua2VlcCBvYmplY3RzJyAnCisJIyBidWlsZCBvbiAkb2Jqc2hhMSwgJHBhY2tzaGExLCBhbmQgLmtlZXAgc3RhdGUgZnJvbSBwcmV2aW91cworCWdpdCByZXBhY2sgLUFkYmwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImZvdW5kX2R1cGxpY2F0ZV9vYmplY3Q9IiAmJgorCWZvciBwIGluIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4OyBkbworCQlpZHg9JChiYXNlbmFtZSAkcCkKKwkJdGVzdCAicGFjay0kcGFja3NoYTEuaWR4IiA9ICIkaWR4IiAmJiBjb250aW51ZQorCQlpZiBnaXQgdmVyaWZ5LXBhY2sgLXYgJHAgfCBlZ3JlcCAiXiRvYmpzaGExIjsgdGhlbgorCQkJZm91bmRfZHVwbGljYXRlX29iamVjdD0xCisJCQllY2hvICJEVVBMSUNBVEUgT0JKRUNUIEZPVU5EIgorCQkJYnJlYWsKKwkJZmkKKwlkb25lICYmCisJdGVzdCAiJGZvdW5kX2R1cGxpY2F0ZV9vYmplY3QiID0gMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3cml0aW5nIGJpdG1hcHMgdmlhIGNvbmZpZyBjYW4gZHVwbGljYXRlIC5rZWVwIG9iamVjdHMnICcKKwkjIGJ1aWxkIG9uICRvYmpzaGExLCAkcGFja3NoYTEsIGFuZCAua2VlcCBzdGF0ZSBmcm9tIHByZXZpb3VzCisJZ2l0IC1jIHJlcGFjay53cml0ZWJpdG1hcHM9dHJ1ZSByZXBhY2sgLUFkbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZm91bmRfZHVwbGljYXRlX29iamVjdD0iICYmCisJZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svKi5pZHg7IGRvCisJCWlkeD0kKGJhc2VuYW1lICRwKQorCQl0ZXN0ICJwYWNrLSRwYWNrc2hhMS5pZHgiID0gIiRpZHgiICYmIGNvbnRpbnVlCisJCWlmIGdpdCB2ZXJpZnktcGFjayAtdiAkcCB8IGVncmVwICJeJG9ianNoYTEiOyB0aGVuCisJCQlmb3VuZF9kdXBsaWNhdGVfb2JqZWN0PTEKKwkJCWVjaG8gIkRVUExJQ0FURSBPQkpFQ1QgRk9VTkQiCisJCQlicmVhaworCQlmaQorCWRvbmUgJiYKKwl0ZXN0ICIkZm91bmRfZHVwbGljYXRlX29iamVjdCIgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvb3NlIG9iamVjdHMgaW4gYWx0ZXJuYXRlIE9EQiBhcmUgbm90IHJlcGFja2VkJyAnCisJbWtkaXIgYWx0X29iamVjdHMgJiYKKwllY2hvIGBwd2RgL2FsdF9vYmplY3RzID4gLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWVjaG8gY29udGVudDMgPiBmaWxlMyAmJgorCW9ianNoYTE9JChHSVRfT0JKRUNUX0RJUkVDVE9SWT1hbHRfb2JqZWN0cyBnaXQgaGFzaC1vYmplY3QgLXcgZmlsZTMpICYmCisJZ2l0IGFkZCBmaWxlMyAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gY29tbWl0X2ZpbGUzICYmCisJZ2l0IHJlcGFjayAtYSAtZCAtbCAmJgorCWdpdCBwcnVuZS1wYWNrZWQgJiYKKwlmb3IgcCBpbiAuZ2l0L29iamVjdHMvcGFjay8qLmlkeDsgZG8KKwkJaWYgZ2l0IHZlcmlmeS1wYWNrIC12ICRwIHwgZWdyZXAgIl4kb2Jqc2hhMSI7IHRoZW4KKwkJCWZvdW5kX2R1cGxpY2F0ZV9vYmplY3Q9MQorCQkJZWNobyAiRFVQTElDQVRFIE9CSkVDVCBGT1VORCIKKwkJCWJyZWFrCisJCWZpCisJZG9uZSAmJgorCXRlc3QgLXogIiRmb3VuZF9kdXBsaWNhdGVfb2JqZWN0IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrZWQgb2JzIGluIGFsdCBPREIgYXJlIHJlcGFja2VkIGV2ZW4gd2hlbiBsb2NhbCByZXBvIGlzIHBhY2tsZXNzJyAnCisJbWtkaXIgYWx0X29iamVjdHMvcGFjayAmJgorCW12IC5naXQvb2JqZWN0cy9wYWNrLyogYWx0X29iamVjdHMvcGFjayAmJgorCWdpdCByZXBhY2sgLWEgJiYKKwlteWlkeD0kKGxzIC0xIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4KSAmJgorCXRlc3QgLWYgIiRteWlkeCIgJiYKKwlmb3IgcCBpbiBhbHRfb2JqZWN0cy9wYWNrLyouaWR4OyBkbworCQlnaXQgdmVyaWZ5LXBhY2sgLXYgJHAgfCBzZWQgLW4gLWUgIi9eWzAtOWEtZl1cezQwXH0vcCIKKwlkb25lIHwgd2hpbGUgcmVhZCBzaGExIHJlc3Q7IGRvCisJCWlmICEgKCBnaXQgdmVyaWZ5LXBhY2sgLXYgJG15aWR4IHwgZ3JlcCAiXiRzaGExIiApOyB0aGVuCisJCQllY2hvICJNaXNzaW5nIG9iamVjdCBpbiBsb2NhbCBwYWNrOiAkc2hhMSIKKwkJCXJldHVybiAxCisJCWZpCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrZWQgb2JzIGluIGFsdCBPREIgYXJlIHJlcGFja2VkIHdoZW4gbG9jYWwgcmVwbyBoYXMgcGFja3MnICcKKwlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisJZWNobyBuZXdfY29udGVudCA+PiBmaWxlMSAmJgorCWdpdCBhZGQgZmlsZTEgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIG1vcmVfY29udGVudCAmJgorCWdpdCByZXBhY2sgJiYKKwlnaXQgcmVwYWNrIC1hIC1kICYmCisJbXlpZHg9JChscyAtMSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCkgJiYKKwl0ZXN0IC1mICIkbXlpZHgiICYmCisJZm9yIHAgaW4gYWx0X29iamVjdHMvcGFjay8qLmlkeDsgZG8KKwkJZ2l0IHZlcmlmeS1wYWNrIC12ICRwIHwgc2VkIC1uIC1lICIvXlswLTlhLWZdXHs0MFx9L3AiCisJZG9uZSB8IHdoaWxlIHJlYWQgc2hhMSByZXN0OyBkbworCQlpZiAhICggZ2l0IHZlcmlmeS1wYWNrIC12ICRteWlkeCB8IGdyZXAgIl4kc2hhMSIgKTsgdGhlbgorCQkJZWNobyAiTWlzc2luZyBvYmplY3QgaW4gbG9jYWwgcGFjazogJHNoYTEiCisJCQlyZXR1cm4gMQorCQlmaQorCWRvbmUKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGFja2VkIG9icyBpbiBhbHRlcm5hdGUgT0RCIGtlcHQgcGFjayBhcmUgcmVwYWNrZWQnICcKKwkjIHN3YXAgdGhlIC5rZWVwIHNvIHRoZSBjb21taXQgb2JqZWN0IGlzIGluIHRoZSBwYWNrIHdpdGggLmtlZXAKKwlmb3IgcCBpbiBhbHRfb2JqZWN0cy9wYWNrLyoucGFjaworCWRvCisJCWJhc2VfbmFtZT0kKGJhc2VuYW1lICRwIC5wYWNrKSAmJgorCQlpZiB0ZXN0IC1mIGFsdF9vYmplY3RzL3BhY2svJGJhc2VfbmFtZS5rZWVwCisJCXRoZW4KKwkJCXJtIGFsdF9vYmplY3RzL3BhY2svJGJhc2VfbmFtZS5rZWVwCisJCWVsc2UKKwkJCXRvdWNoIGFsdF9vYmplY3RzL3BhY2svJGJhc2VfbmFtZS5rZWVwCisJCWZpCisJZG9uZSAmJgorCWdpdCByZXBhY2sgLWEgLWQgJiYKKwlteWlkeD0kKGxzIC0xIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4KSAmJgorCXRlc3QgLWYgIiRteWlkeCIgJiYKKwlmb3IgcCBpbiBhbHRfb2JqZWN0cy9wYWNrLyouaWR4OyBkbworCQlnaXQgdmVyaWZ5LXBhY2sgLXYgJHAgfCBzZWQgLW4gLWUgIi9eWzAtOWEtZl1cezQwXH0vcCIKKwlkb25lIHwgd2hpbGUgcmVhZCBzaGExIHJlc3Q7IGRvCisJCWlmICEgKCBnaXQgdmVyaWZ5LXBhY2sgLXYgJG15aWR4IHwgZ3JlcCAiXiRzaGExIiApOyB0aGVuCisJCQllY2hvICJNaXNzaW5nIG9iamVjdCBpbiBsb2NhbCBwYWNrOiAkc2hhMSIKKwkJCXJldHVybiAxCisJCWZpCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwYWNrZWQgdW5yZWFjaGFibGUgb2JzIGluIGFsdGVybmF0ZSBPREIgYXJlIG5vdCBsb29zZW5lZCcgJworCXJtIC1mIGFsdF9vYmplY3RzL3BhY2svKi5rZWVwICYmCisJbXYgLmdpdC9vYmplY3RzL3BhY2svKiBhbHRfb2JqZWN0cy9wYWNrLyAmJgorCWNzaGExPSQoZ2l0IHJldi1wYXJzZSBIRUFEXntjb21taXR9KSAmJgorCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT0kdGVzdF90aWNrIC0tZXhwaXJlLXVucmVhY2hhYmxlPSR0ZXN0X3RpY2sgLS1hbGwgJiYKKwkjIFRoZSBwYWNrLW9iamVjdHMgY2FsbCBvbiB0aGUgbmV4dCBsaW5lIGlzIGVxdWl2YWxlbnQgdG8KKwkjIGdpdCByZXBhY2sgLUEgLWQgd2l0aG91dCB0aGUgY2FsbCB0byBwcnVuZS1wYWNrZWQKKwlnaXQgcGFjay1vYmplY3RzIC0taG9ub3ItcGFjay1rZWVwIC0tbm9uLWVtcHR5IC0tYWxsIC0tcmVmbG9nIFwKKwkgICAgLS11bnBhY2stdW5yZWFjaGFibGUgPC9kZXYvbnVsbCBwYWNrICYmCisJcm0gLWYgLmdpdC9vYmplY3RzL3BhY2svKiAmJgorCW12IHBhY2stKiAuZ2l0L29iamVjdHMvcGFjay8gJiYKKwl0ZXN0IDAgPSAkKGdpdCB2ZXJpZnktcGFjayAtdiAtLSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCB8CisJCWVncmVwICJeJGNzaGExICIgfCBzb3J0IHwgdW5pcSB8IHdjIC1sKSAmJgorCWVjaG8gPiAuZ2l0L29iamVjdHMvaW5mby9hbHRlcm5hdGVzICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNob3cgJGNzaGExCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvY2FsIHBhY2tlZCB1bnJlYWNoYWJsZSBvYnMgdGhhdCBleGlzdCBpbiBhbHRlcm5hdGUgT0RCIGFyZSBub3QgbG9vc2VuZWQnICcKKwllY2hvIGBwd2RgL2FsdF9vYmplY3RzID4gLmdpdC9vYmplY3RzL2luZm8vYWx0ZXJuYXRlcyAmJgorCWVjaG8gIiRjc2hhMSIgfCBnaXQgcGFjay1vYmplY3RzIC0tbm9uLWVtcHR5IC0tYWxsIC0tcmVmbG9nIHBhY2sgJiYKKwlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisJbXYgcGFjay0qIC5naXQvb2JqZWN0cy9wYWNrLyAmJgorCSMgVGhlIHBhY2stb2JqZWN0cyBjYWxsIG9uIHRoZSBuZXh0IGxpbmUgaXMgZXF1aXZhbGVudCB0bworCSMgZ2l0IHJlcGFjayAtQSAtZCB3aXRob3V0IHRoZSBjYWxsIHRvIHBydW5lLXBhY2tlZAorCWdpdCBwYWNrLW9iamVjdHMgLS1ob25vci1wYWNrLWtlZXAgLS1ub24tZW1wdHkgLS1hbGwgLS1yZWZsb2cgXAorCSAgICAtLXVucGFjay11bnJlYWNoYWJsZSA8L2Rldi9udWxsIHBhY2sgJiYKKwlybSAtZiAuZ2l0L29iamVjdHMvcGFjay8qICYmCisJbXYgcGFjay0qIC5naXQvb2JqZWN0cy9wYWNrLyAmJgorCXRlc3QgMCA9ICQoZ2l0IHZlcmlmeS1wYWNrIC12IC0tIC5naXQvb2JqZWN0cy9wYWNrLyouaWR4IHwKKwkJZWdyZXAgIl4kY3NoYTEgIiB8IHNvcnQgfCB1bmlxIHwgd2MgLWwpICYmCisJZWNobyA+IC5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdyAkY3NoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb2JqZWN0cyBtYWRlIHVucmVhY2hhYmxlIGJ5IGdyYWZ0cyBvbmx5IGFyZSBrZXB0JyAnCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtLWFsbG93LWVtcHR5IC1tICJjb21taXQgNCIgJiYKKwlIMD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlIMT0kKGdpdCByZXYtcGFyc2UgSEVBRF4pICYmCisJSDI9JChnaXQgcmV2LXBhcnNlIEhFQUReXikgJiYKKwllY2hvICIkSDAgJEgyIiA+IC5naXQvaW5mby9ncmFmdHMgJiYKKwlnaXQgcmVmbG9nIGV4cGlyZSAtLWV4cGlyZT0kdGVzdF90aWNrIC0tZXhwaXJlLXVucmVhY2hhYmxlPSR0ZXN0X3RpY2sgLS1hbGwgJiYKKwlnaXQgcmVwYWNrIC1hIC1kICYmCisJZ2l0IGNhdC1maWxlIC10ICRIMQorCScKKwordGVzdF9kb25lCisKZGlmZiAtLWdpdCBhL3QvdDc3MDEtcmVwYWNrLXVucGFjay11bnJlYWNoYWJsZS5zaCBiL3QvdDc3MDEtcmVwYWNrLXVucGFjay11bnJlYWNoYWJsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNjZlMzgzCi0tLSAvZGV2L251bGwKKysrIGIvdC90NzcwMS1yZXBhY2stdW5wYWNrLXVucmVhY2hhYmxlLnNoCkBAIC0wLDAgKzEsMTI1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHJlcGFjayB3b3JrcyBjb3JyZWN0bHknCisKKy4gLi90ZXN0LWxpYi5zaAorCitmc2hhMT0KK2NzaGExPQordHNoYTE9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy1BIHdpdGggLWQgb3B0aW9uIGxlYXZlcyB1bnJlYWNoYWJsZSBvYmplY3RzIHVucGFja2VkJyAnCisJZWNobyBjb250ZW50ID4gZmlsZTEgJiYKKwlnaXQgYWRkIC4gJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWxfY29tbWl0ICYmCisJIyBjcmVhdGUgYSB0cmFuc2llbnQgYnJhbmNoIHdpdGggdW5pcXVlIGNvbnRlbnQKKwlnaXQgY2hlY2tvdXQgLWIgdHJhbnNpZW50X2JyYW5jaCAmJgorCWVjaG8gbW9yZSBjb250ZW50ID4+IGZpbGUxICYmCisJIyByZWNvcmQgdGhlIG9iamVjdHMgY3JlYXRlZCBpbiB0aGUgZGF0YWJhc2UgZm9yIGZpbGUsIGNvbW1pdCwgdHJlZQorCWZzaGExPSQoZ2l0IGhhc2gtb2JqZWN0IGZpbGUxKSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLWEgLW0gbW9yZV9jb250ZW50ICYmCisJY3NoYTE9JChnaXQgcmV2LXBhcnNlIEhFQURee2NvbW1pdH0pICYmCisJdHNoYTE9JChnaXQgcmV2LXBhcnNlIEhFQURee3RyZWV9KSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvIGV2ZW4gbW9yZSBjb250ZW50ID4+IGZpbGUxICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBldmVuX21vcmVfY29udGVudCAmJgorCSMgZGVsZXRlIHRoZSB0cmFuc2llbnQgYnJhbmNoCisJZ2l0IGJyYW5jaCAtRCB0cmFuc2llbnRfYnJhbmNoICYmCisJIyBwYWNrIHRoZSByZXBvCisJZ2l0IHJlcGFjayAtQSAtZCAtbCAmJgorCSMgdmVyaWZ5IG9iamVjdHMgYXJlIHBhY2tlZCBpbiByZXBvc2l0b3J5CisJdGVzdCAzID0gJChnaXQgdmVyaWZ5LXBhY2sgLXYgLS0gLmdpdC9vYmplY3RzL3BhY2svKi5pZHggfAorCQkgICBlZ3JlcCAiXigkZnNoYTF8JGNzaGExfCR0c2hhMSkgIiB8CisJCSAgIHNvcnQgfCB1bmlxIHwgd2MgLWwpICYmCisJZ2l0IHNob3cgJGZzaGExICYmCisJZ2l0IHNob3cgJGNzaGExICYmCisJZ2l0IHNob3cgJHRzaGExICYmCisJIyBub3cgZXhwaXJlIHRoZSByZWZsb2csIHdoaWxlIGtlZXBpbmcgcmVhY2hhYmxlIG9uZXMgYnV0IGV4cGlyaW5nCisJIyB1bnJlYWNoYWJsZXMgaW1tZWRpYXRlbHkKKwl0ZXN0X3RpY2sgJiYKKwlzb21ldGltZWFnbz0kKCggJHRlc3RfdGljayAtIDEwMDAwICkpICYmCisJZ2l0IHJlZmxvZyBleHBpcmUgLS1leHBpcmU9JHNvbWV0aW1lYWdvIC0tZXhwaXJlLXVucmVhY2hhYmxlPSR0ZXN0X3RpY2sgLS1hbGwgJiYKKwkjIGFuZCByZXBhY2sKKwlnaXQgcmVwYWNrIC1BIC1kIC1sICYmCisJIyB2ZXJpZnkgb2JqZWN0cyBhcmUgcmV0YWluZWQgdW5wYWNrZWQKKwl0ZXN0IDAgPSAkKGdpdCB2ZXJpZnktcGFjayAtdiAtLSAuZ2l0L29iamVjdHMvcGFjay8qLmlkeCB8CisJCSAgIGVncmVwICJeKCRmc2hhMXwkY3NoYTF8JHRzaGExKSAiIHwKKwkJICAgc29ydCB8IHVuaXEgfCB3YyAtbCkgJiYKKwlnaXQgc2hvdyAkZnNoYTEgJiYKKwlnaXQgc2hvdyAkY3NoYTEgJiYKKwlnaXQgc2hvdyAkdHNoYTEKKycKKworY29tcGFyZV9tdGltZXMgKCkKK3sKKwlyZWFkIHRyZWYgcmVzdCAmJgorCXdoaWxlIHJlYWQgdCByZXN0OyBkbworCQl0ZXN0ICIkdHJlZiIgPSAiJHQiIHx8IHJldHVybiAxCisJZG9uZQorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICctQSB3aXRob3V0IC1kIG9wdGlvbiBsZWF2ZXMgdW5yZWFjaGFibGUgb2JqZWN0cyBwYWNrZWQnICcKKwlmc2hhMXBhdGg9JChlY2hvICIkZnNoYTEiIHwgc2VkIC1lICJzfFwoLi5cKXxcMS98IikgJiYKKwlmc2hhMXBhdGg9Ii5naXQvb2JqZWN0cy8kZnNoYTFwYXRoIiAmJgorCWNzaGExcGF0aD0kKGVjaG8gIiRjc2hhMSIgfCBzZWQgLWUgInN8XCguLlwpfFwxL3wiKSAmJgorCWNzaGExcGF0aD0iLmdpdC9vYmplY3RzLyRjc2hhMXBhdGgiICYmCisJdHNoYTFwYXRoPSQoZWNobyAiJHRzaGExIiB8IHNlZCAtZSAic3xcKC4uXCl8XDEvfCIpICYmCisJdHNoYTFwYXRoPSIuZ2l0L29iamVjdHMvJHRzaGExcGF0aCIgJiYKKwlnaXQgYnJhbmNoIHRyYW5zaWVudF9icmFuY2ggJGNzaGExICYmCisJZ2l0IHJlcGFjayAtYSAtZCAtbCAmJgorCXRlc3QgISAtZiAiJGZzaGExcGF0aCIgJiYKKwl0ZXN0ICEgLWYgIiRjc2hhMXBhdGgiICYmCisJdGVzdCAhIC1mICIkdHNoYTFwYXRoIiAmJgorCXRlc3QgMSA9ICQobHMgLTEgLmdpdC9vYmplY3RzL3BhY2svcGFjay0qLnBhY2sgfCB3YyAtbCkgJiYKKwlwYWNrZmlsZT0kKGxzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stKi5wYWNrKSAmJgorCWdpdCBicmFuY2ggLUQgdHJhbnNpZW50X2JyYW5jaCAmJgorCXRlc3RfdGljayAmJgorCWdpdCByZXBhY2sgLUEgLWwgJiYKKwl0ZXN0ICEgLWYgIiRmc2hhMXBhdGgiICYmCisJdGVzdCAhIC1mICIkY3NoYTFwYXRoIiAmJgorCXRlc3QgISAtZiAiJHRzaGExcGF0aCIgJiYKKwlnaXQgc2hvdyAkZnNoYTEgJiYKKwlnaXQgc2hvdyAkY3NoYTEgJiYKKwlnaXQgc2hvdyAkdHNoYTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5wYWNrZWQgb2JqZWN0cyByZWNlaXZlIHRpbWVzdGFtcCBvZiBwYWNrIGZpbGUnICcKKwl0bXBwYWNrPSIuZ2l0L29iamVjdHMvcGFjay90bXBfcGFjayIgJiYKKwlsbiAiJHBhY2tmaWxlIiAiJHRtcHBhY2siICYmCisJZ2l0IHJlcGFjayAtQSAtbCAtZCAmJgorCXRlc3QtY2htdGltZSAtdiArMCAiJHRtcHBhY2siICIkZnNoYTFwYXRoIiAiJGNzaGExcGF0aCIgIiR0c2hhMXBhdGgiIFwKKwkJPiBtdGltZXMgJiYKKwljb21wYXJlX210aW1lcyA8IG10aW1lcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkbyBub3QgYm90aGVyIGxvb3NlbmluZyBvbGQgb2JqZWN0cycgJworCW9iajE9JChlY2hvIG9uZSB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCW9iajI9JChlY2hvIHR3byB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluKSAmJgorCXBhY2sxPSQoZWNobyAkb2JqMSB8IGdpdCBwYWNrLW9iamVjdHMgLmdpdC9vYmplY3RzL3BhY2svcGFjaykgJiYKKwlwYWNrMj0kKGVjaG8gJG9iajIgfCBnaXQgcGFjay1vYmplY3RzIC5naXQvb2JqZWN0cy9wYWNrL3BhY2spICYmCisJZ2l0IHBydW5lLXBhY2tlZCAmJgorCWdpdCBjYXQtZmlsZSAtcCAkb2JqMSAmJgorCWdpdCBjYXQtZmlsZSAtcCAkb2JqMiAmJgorCXRlc3QtY2htdGltZSA9LTg2NDAwIC5naXQvb2JqZWN0cy9wYWNrL3BhY2stJHBhY2syLnBhY2sgJiYKKwlnaXQgcmVwYWNrIC1BIC1kIC0tdW5wYWNrLXVucmVhY2hhYmxlPTEuaG91ci5hZ28gJiYKKwlnaXQgY2F0LWZpbGUgLXAgJG9iajEgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgY2F0LWZpbGUgLXAgJG9iajIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2VlcCBwYWNrZWQgb2JqZWN0cyBmb3VuZCBvbmx5IGluIGluZGV4JyAnCisJZWNobyBteS11bmlxdWUtY29udGVudCA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gIm1ha2UgaXQgcmVhY2hhYmxlIiAmJgorCWdpdCBnYyAmJgorCWdpdCByZXNldCBIRUFEXiAmJgorCWdpdCByZWZsb2cgZXhwaXJlIC0tZXhwaXJlPW5vdyAtLWFsbCAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3QtY2htdGltZSA9LTg2NDAwIC5naXQvb2JqZWN0cy9wYWNrLyogJiYKKwlnaXQgZ2MgLS1wcnVuZT0xLmhvdXIuYWdvICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgOmZpbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3NzAyLXJlcGFjay1jeWNsaWMtYWx0ZXJuYXRlLnNoIGIvdC90NzcwMi1yZXBhY2stY3ljbGljLWFsdGVybmF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45M2I3NDg2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90NzcwMi1yZXBhY2stY3ljbGljLWFsdGVybmF0ZS5zaApAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEVwaHJpbSBLaG9uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdyZXBhY2sgaW52b2x2aW5nIGN5Y2xpYyBhbHRlcm5hdGUnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBzZXR1cCAnCisJR0lUX09CSkVDVF9ESVJFQ1RPUlk9LmdpdC8vLi4vLmdpdC9vYmplY3RzICYmCisJZXhwb3J0IEdJVF9PQkpFQ1RfRElSRUNUT1JZICYmCisJdG91Y2ggYSAmJgorCWdpdCBhZGQgYSAmJgorCWdpdCBjb21taXQgLW0gMSAmJgorCWdpdCByZXBhY2sgLWFkbCAmJgorCWVjaG8gIiQocHdkKSIvLmdpdC9vYmplY3RzLy4uL29iamVjdHMgPi5naXQvb2JqZWN0cy9pbmZvL2FsdGVybmF0ZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmUtcGFja2luZyByZXBvc2l0b3J5IHdpdGggaXRzc2VsZiBhcyBhbHRlcm5hdGUnICcKKwlnaXQgcmVwYWNrIC1hZGwgJiYKKwlnaXQgZnNjaworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDc4MDAtZGlmZnRvb2wuc2ggYi90L3Q3ODAwLWRpZmZ0b29sLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ4YzZlMmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3ODAwLWRpZmZ0b29sLnNoCkBAIC0wLDAgKzEsNTA3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwLCAyMDEyLCAyMDEzIERhdmlkIEFndWlsYXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0LWRpZmZ0b29sCisKK1Rlc3RpbmcgYmFzaWMgZGlmZiB0b29sIGludm9jYXRpb24KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK2RpZmZ0b29sX3Rlc3Rfc2V0dXAgKCkKK3sKKwl0ZXN0X2NvbmZpZyBkaWZmLnRvb2wgdGVzdC10b29sICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wudGVzdC10b29sLmNtZCAnY2F0ICIkTE9DQUwiJyAmJgorCXRlc3RfY29uZmlnIGRpZmZ0b29sLmJvZ3VzLXRvb2wuY21kIGZhbHNlCit9CisKK3Byb21wdF9naXZlbiAoKQoreworCXByb21wdD0iJDEiCisJdGVzdCAiJHByb21wdCIgPSAiTGF1bmNoICd0ZXN0LXRvb2wnIFtZL25dOiBicmFuY2giCit9CisKKyMgQ3JlYXRlIGEgZmlsZSBvbiBtYXN0ZXIgYW5kIGNoYW5nZSBpdCBvbiBicmFuY2gKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAnICcKKwllY2hvIG1hc3RlciA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIGZpbGUiICYmCisKKwlnaXQgY2hlY2tvdXQgLWIgYnJhbmNoIG1hc3RlciAmJgorCWVjaG8gYnJhbmNoID5maWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiYnJhbmNoIGNoYW5nZWQgZmlsZSIgJiYKKwlnaXQgY2hlY2tvdXQgbWFzdGVyCisnCisKKyMgQ29uZmlndXJlIGEgY3VzdG9tIGRpZmZ0b29sLjx0b29sPi5jbWQgYW5kIHVzZSBpdAordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjdXN0b20gY29tbWFuZHMnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wudGVzdC10b29sLmNtZCAiY2F0IFwiXCRSRU1PVEVcIiIgJiYKKwllY2hvIG1hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF9jb25maWcgZGlmZnRvb2wudGVzdC10b29sLmNtZCAiY2F0IFwiXCRMT0NBTFwiIiAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY3VzdG9tIHRvb2wgY29tbWFuZHMgb3ZlcnJpZGUgYnVpbHQtaW5zJyAnCisJdGVzdF9jb25maWcgZGlmZnRvb2wudmltZGlmZi5jbWQgImNhdCBcIlwkUkVNT1RFXCIiICYmCisJZWNobyBtYXN0ZXIgPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLXRvb2wgdmltZGlmZiAtLW5vLXByb21wdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCBpZ25vcmVzIGJhZCAtLXRvb2wgdmFsdWVzJyAnCisJOiA+ZXhwZWN0ICYmCisJdGVzdF9tdXN0X2ZhaWwgXAorCQlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS10b29sPWJhZC10b29sIGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIGZvcndhcmRzIGFyZ3VtZW50cyB0byBkaWZmJyAnCisJZGlmZnRvb2xfdGVzdF9zZXR1cCAmJgorCT5mb3ItZGlmZiAmJgorCWdpdCBhZGQgZm9yLWRpZmYgJiYKKwllY2hvIGNoYW5nZXM+Zm9yLWRpZmYgJiYKKwlnaXQgYWRkIGZvci1kaWZmICYmCisJOiA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tY2FjaGVkIC0tbm8tcHJvbXB0IC0tIGZvci1kaWZmID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZ2l0IHJlc2V0IC0tIGZvci1kaWZmICYmCisJcm0gZm9yLWRpZmYKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCBpZ25vcmVzIGV4aXQgY29kZScgJworCXRlc3RfY29uZmlnIGRpZmZ0b29sLmVycm9yLmNtZCBmYWxzZSAmJgorCWdpdCBkaWZmdG9vbCAteSAtdCBlcnJvciBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCBmb3J3YXJkcyBleGl0IGNvZGUgd2l0aCAtLXRydXN0LWV4aXQtY29kZScgJworCXRlc3RfY29uZmlnIGRpZmZ0b29sLmVycm9yLmNtZCBmYWxzZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBkaWZmdG9vbCAteSAtLXRydXN0LWV4aXQtY29kZSAtdCBlcnJvciBicmFuY2gKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCBmb3J3YXJkcyBleGl0IGNvZGUgd2l0aCAtLXRydXN0LWV4aXQtY29kZSBmb3IgYnVpbHQtaW5zJyAnCisJdGVzdF9jb25maWcgZGlmZnRvb2wudmltZGlmZi5wYXRoIGZhbHNlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmZ0b29sIC15IC0tdHJ1c3QtZXhpdC1jb2RlIC10IHZpbWRpZmYgYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgaG9ub3JzIGRpZmZ0b29sLnRydXN0RXhpdENvZGUgPSB0cnVlJyAnCisJdGVzdF9jb25maWcgZGlmZnRvb2wuZXJyb3IuY21kIGZhbHNlICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wudHJ1c3RFeGl0Q29kZSB0cnVlICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGRpZmZ0b29sIC15IC10IGVycm9yIGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIGhvbm9ycyBkaWZmdG9vbC50cnVzdEV4aXRDb2RlID0gZmFsc2UnICcKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC5lcnJvci5jbWQgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC50cnVzdEV4aXRDb2RlIGZhbHNlICYmCisJZ2l0IGRpZmZ0b29sIC15IC10IGVycm9yIGJyYW5jaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIGlnbm9yZXMgZXhpdCBjb2RlIHdpdGggLS1uby10cnVzdC1leGl0LWNvZGUnICcKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC5lcnJvci5jbWQgZmFsc2UgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC50cnVzdEV4aXRDb2RlIHRydWUgJiYKKwlnaXQgZGlmZnRvb2wgLXkgLS1uby10cnVzdC1leGl0LWNvZGUgLXQgZXJyb3IgYnJhbmNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgc3RvcHMgb24gZXJyb3Igd2l0aCAtLXRydXN0LWV4aXQtY29kZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgZm9yLWRpZmYgLmdpdC9mYWlsLXJpZ2h0LWZpbGUiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS0gZm9yLWRpZmYiICYmCisJd3JpdGVfc2NyaXB0IC5naXQvZmFpbC1yaWdodC1maWxlIDw8LVxFT0YgJiYKKwllY2hvICIkMiIKKwlleGl0IDEKKwlFT0YKKwk+Zm9yLWRpZmYgJiYKKwlnaXQgYWRkIGZvci1kaWZmICYmCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLXkgLS10cnVzdC1leGl0LWNvZGUgXAorCQktLWV4dGNtZCAuZ2l0L2ZhaWwtcmlnaHQtZmlsZSBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCBob25vcnMgLS1ndWknICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9jb25maWcgbWVyZ2UudG9vbCBib2d1cy10b29sICYmCisJdGVzdF9jb25maWcgZGlmZi50b29sIGJvZ3VzLXRvb2wgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLmd1aXRvb2wgdGVzdC10b29sICYmCisKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tZ3VpIGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIC0tZ3VpIGxhc3Qgc2V0dGluZyB3aW5zJyAnCisJZGlmZnRvb2xfdGVzdF9zZXR1cCAmJgorCTogPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLWd1aSAtLW5vLWd1aSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJdGVzdF9jb25maWcgbWVyZ2UudG9vbCBib2d1cy10b29sICYmCisJdGVzdF9jb25maWcgZGlmZi50b29sIGJvZ3VzLXRvb2wgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLmd1aXRvb2wgdGVzdC10b29sICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAtLW5vLWd1aSAtLWd1aSBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCAtLWd1aSB3b3JrcyB3aXRob3V0IGNvbmZpZ3VyZWQgZGlmZi5ndWl0b29sJyAnCisJZGlmZnRvb2xfdGVzdF9zZXR1cCAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1ndWkgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgU3BlY2lmeSB0aGUgZGlmZiB0b29sIHVzaW5nICRHSVRfRElGRl9UT09MCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ0dJVF9ESUZGX1RPT0wgdmFyaWFibGUnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGRpZmYudG9vbCAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlHSVRfRElGRl9UT09MPXRlc3QtdG9vbCBnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGVzdCB0aGUgJEdJVF8qX1RPT0wgdmFyaWFibGVzIGFuZCBlbnN1cmUKKyMgdGhhdCAkR0lUX0RJRkZfVE9PTCBhbHdheXMgd2lucyB1bmxlc3MgLS10b29sIGlzIHNwZWNpZmllZAordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdHSVRfRElGRl9UT09MIG92ZXJyaWRlcycgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwl0ZXN0X2NvbmZpZyBkaWZmLnRvb2wgYm9ndXMtdG9vbCAmJgorCXRlc3RfY29uZmlnIG1lcmdlLnRvb2wgYm9ndXMtdG9vbCAmJgorCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCUdJVF9ESUZGX1RPT0w9dGVzdC10b29sIGdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKworCXRlc3RfY29uZmlnIGRpZmYudG9vbCBib2d1cy10b29sICYmCisJdGVzdF9jb25maWcgbWVyZ2UudG9vbCBib2d1cy10b29sICYmCisJR0lUX0RJRkZfVE9PTD1ib2d1cy10b29sIFwKKwkJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tdG9vbD10ZXN0LXRvb2wgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGVzdCB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcGFzcyAtLW5vLXByb21wdCB0byBkaWZmdG9vbAorIyB3aGVuICRHSVRfRElGRlRPT0xfTk9fUFJPTVBUIGlzIHRydWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnR0lUX0RJRkZUT09MX05PX1BST01QVCB2YXJpYWJsZScgJworCWRpZmZ0b29sX3Rlc3Rfc2V0dXAgJiYKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJR0lUX0RJRkZUT09MX05PX1BST01QVD10cnVlIGdpdCBkaWZmdG9vbCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBnaXQtZGlmZnRvb2wgc3VwcG9ydHMgdGhlIGRpZmZ0b29sLnByb21wdCB2YXJpYWJsZS4KKyMgVGVzdCB0aGF0IEdJVF9ESUZGVE9PTF9QUk9NUFQgY2FuIG92ZXJyaWRlIGRpZmZ0b29sLnByb21wdCA9IGZhbHNlCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ0dJVF9ESUZGVE9PTF9QUk9NUFQgdmFyaWFibGUnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wucHJvbXB0IGZhbHNlICYmCisJZWNobyA+aW5wdXQgJiYKKwlHSVRfRElGRlRPT0xfUFJPTVBUPXRydWUgZ2l0IGRpZmZ0b29sIGJyYW5jaCA8aW5wdXQgPm91dHB1dCAmJgorCXByb21wdD0kKHRhaWwgLTEgPG91dHB1dCkgJiYKKwlwcm9tcHRfZ2l2ZW4gIiRwcm9tcHQiCisnCisKKyMgVGVzdCB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcGFzcyAtLW5vLXByb21wdCB3aGVuIGRpZmZ0b29sLnByb21wdCBpcyBmYWxzZQordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbC5wcm9tcHQgY29uZmlnIHZhcmlhYmxlIGlzIGZhbHNlJyAnCisJZGlmZnRvb2xfdGVzdF9zZXR1cCAmJgorCXRlc3RfY29uZmlnIGRpZmZ0b29sLnByb21wdCBmYWxzZSAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgVGVzdCB0aGF0IHdlIGRvbid0IGhhdmUgdG8gcGFzcyAtLW5vLXByb21wdCB3aGVuIG1lcmdldG9vbC5wcm9tcHQgaXMgZmFsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgbWVyZ2UucHJvbXB0ID0gZmFsc2UnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBkaWZmdG9vbC5wcm9tcHQgJiYKKwl0ZXN0X2NvbmZpZyBtZXJnZXRvb2wucHJvbXB0IGZhbHNlICYmCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworIyBUZXN0IHRoYXQgdGhlIC15IGZsYWcgY2FuIG92ZXJyaWRlIGRpZmZ0b29sLnByb21wdCA9IHRydWUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wucHJvbXB0IGNhbiBvdmVycmlkZGVuIHdpdGggLXknICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wucHJvbXB0IHRydWUgJiYKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC15IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCisjIFRlc3QgdGhhdCB0aGUgLS1wcm9tcHQgZmxhZyBjYW4gb3ZlcnJpZGUgZGlmZnRvb2wucHJvbXB0ID0gZmFsc2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wucHJvbXB0IGNhbiBvdmVycmlkZGVuIHdpdGggLS1wcm9tcHQnICcKKwlkaWZmdG9vbF90ZXN0X3NldHVwICYmCisJdGVzdF9jb25maWcgZGlmZnRvb2wucHJvbXB0IGZhbHNlICYmCisJZWNobyA+aW5wdXQgJiYKKwlnaXQgZGlmZnRvb2wgLS1wcm9tcHQgYnJhbmNoIDxpbnB1dCA+b3V0cHV0ICYmCisJcHJvbXB0PSQodGFpbCAtMSA8b3V0cHV0KSAmJgorCXByb21wdF9naXZlbiAiJHByb21wdCIKKycKKworIyBUZXN0IHRoYXQgdGhlIGxhc3QgZmxhZyBwYXNzZWQgb24gdGhlIGNvbW1hbmQtbGluZSB3aW5zCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIGxhc3QgZmxhZyB3aW5zJyAnCisJZGlmZnRvb2xfdGVzdF9zZXR1cCAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1wcm9tcHQgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJZWNobyA+aW5wdXQgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1wcm9tcHQgYnJhbmNoIDxpbnB1dCA+b3V0cHV0ICYmCisJcHJvbXB0PSQodGFpbCAtMSA8b3V0cHV0KSAmJgorCXByb21wdF9naXZlbiAiJHByb21wdCIKKycKKworIyBnaXQtZGlmZnRvb2wgZmFsbHMgYmFjayB0byBnaXQtbWVyZ2V0b29sIGNvbmZpZyB2YXJpYWJsZXMKKyMgc28gdGVzdCB0aGF0IGJlaGF2aW9yIGhlcmUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgKyBtZXJnZXRvb2wgY29uZmlnIHZhcmlhYmxlcycgJworCXRlc3RfY29uZmlnIG1lcmdlLnRvb2wgdGVzdC10b29sICYmCisJdGVzdF9jb25maWcgbWVyZ2V0b29sLnRlc3QtdG9vbC5jbWQgImNhdCBcJExPQ0FMIiAmJgorCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisKKwkjIHNldCBtZXJnZS50b29sIHRvIHNvbWV0aGluZyBib2d1cywgZGlmZi50b29sIHRvIHRlc3QtdG9vbAorCXRlc3RfY29uZmlnIG1lcmdlLnRvb2wgYm9ndXMtdG9vbCAmJgorCXRlc3RfY29uZmlnIGRpZmYudG9vbCB0ZXN0LXRvb2wgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wuPHRvb2w+LnBhdGgnICcKKwl0ZXN0X2NvbmZpZyBkaWZmdG9vbC50a2RpZmYucGF0aCBlY2hvICYmCisJZ2l0IGRpZmZ0b29sIC0tdG9vbD10a2RpZmYgLS1uby1wcm9tcHQgYnJhbmNoID5vdXRwdXQgJiYKKwlsaW5lcz0kKGdyZXAgZmlsZSBvdXRwdXQgfCB3YyAtbCkgJiYKKwl0ZXN0ICIkbGluZXMiIC1lcSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgLS1leHRjbWQ9Y2F0JyAnCisJZWNobyBicmFuY2ggPmV4cGVjdCAmJgorCWVjaG8gbWFzdGVyID4+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IC0tZXh0Y21kPWNhdCBicmFuY2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCAtLWV4dGNtZCBjYXQnICcKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZWNobyBtYXN0ZXIgPj5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgLS1leHRjbWQ9Y2F0IGJyYW5jaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIC14IGNhdCcgJworCWVjaG8gYnJhbmNoID5leHBlY3QgJiYKKwllY2hvIG1hc3RlciA+PmV4cGVjdCAmJgorCWdpdCBkaWZmdG9vbCAtLW5vLXByb21wdCAteCBjYXQgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgLS1leHRjbWQgZWNobyBhcmcxJyAnCisJZWNobyBmaWxlID5leHBlY3QgJiYKKwlnaXQgZGlmZnRvb2wgLS1uby1wcm9tcHQgXAorCQktLWV4dGNtZCBzaFwgLWNcIFwiZWNob1wgXCQxXCIgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgLS1leHRjbWQgY2F0IGFyZzEnICcKKwllY2hvIG1hc3RlciA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IFwKKwkJLS1leHRjbWQgc2hcIC1jXCBcImNhdFwgXCQxXCIgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnZGlmZnRvb2wgLS1leHRjbWQgY2F0IGFyZzInICcKKwllY2hvIGJyYW5jaCA+ZXhwZWN0ICYmCisJZ2l0IGRpZmZ0b29sIC0tbm8tcHJvbXB0IFwKKwkJLS1leHRjbWQgc2hcIC1jXCBcImNhdFwgXCQyXCIgYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKKyMgQ3JlYXRlIGEgc2Vjb25kIGZpbGUgb24gbWFzdGVyIGFuZCBhIGRpZmZlcmVudCB2ZXJzaW9uIG9uIGJyYW5jaAordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCB3aXRoIDIgZmlsZXMgZGlmZmVyZW50JyAnCisJZWNobyBtMiA+ZmlsZTIgJiYKKwlnaXQgYWRkIGZpbGUyICYmCisJZ2l0IGNvbW1pdCAtbSAiYWRkZWQgZmlsZTIiICYmCisKKwlnaXQgY2hlY2tvdXQgYnJhbmNoICYmCisJZWNobyBicjIgPmZpbGUyICYmCisJZ2l0IGFkZCBmaWxlMiAmJgorCWdpdCBjb21taXQgLWEgLW0gImJyYW5jaCBjaGFuZ2VkIGZpbGUyIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzYXkgbm8gdG8gdGhlIGZpcnN0IGZpbGUnICcKKwkoZWNobyBuICYmIGVjaG8pID5pbnB1dCAmJgorCWdpdCBkaWZmdG9vbCAteCBjYXQgYnJhbmNoIDxpbnB1dCA+b3V0cHV0ICYmCisJZ3JlcCBtMiBvdXRwdXQgJiYKKwlncmVwIGJyMiBvdXRwdXQgJiYKKwkhIGdyZXAgbWFzdGVyIG91dHB1dCAmJgorCSEgZ3JlcCBicmFuY2ggb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2F5IG5vIHRvIHRoZSBzZWNvbmQgZmlsZScgJworCShlY2hvICYmIGVjaG8gbikgPmlucHV0ICYmCisJZ2l0IGRpZmZ0b29sIC14IGNhdCBicmFuY2ggPGlucHV0ID5vdXRwdXQgJiYKKwlncmVwIG1hc3RlciBvdXRwdXQgJiYKKwlncmVwIGJyYW5jaCBvdXRwdXQgJiYKKwkhIGdyZXAgbTIgb3V0cHV0ICYmCisJISBncmVwIGJyMiBvdXRwdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdlbmRpbmcgcHJvbXB0IGlucHV0IHdpdGggRU9GJyAnCisJZ2l0IGRpZmZ0b29sIC14IGNhdCBicmFuY2ggPC9kZXYvbnVsbCA+b3V0cHV0ICYmCisJISBncmVwIG1hc3RlciBvdXRwdXQgJiYKKwkhIGdyZXAgYnJhbmNoIG91dHB1dCAmJgorCSEgZ3JlcCBtMiBvdXRwdXQgJiYKKwkhIGdyZXAgYnIyIG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIC0tdG9vbC1oZWxwJyAnCisJZ2l0IGRpZmZ0b29sIC0tdG9vbC1oZWxwID5vdXRwdXQgJiYKKwlncmVwIHRvb2wgb3V0cHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnc2V0dXAgY2hhbmdlIGluIHN1YmRpcmVjdG9yeScgJworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlta2RpciBzdWIgJiYKKwllY2hvIG1hc3RlciA+c3ViL3N1YiAmJgorCWdpdCBhZGQgc3ViL3N1YiAmJgorCWdpdCBjb21taXQgLW0gImFkZGVkIHN1Yi9zdWIiICYmCisJZWNobyB0ZXN0ID4+ZmlsZSAmJgorCWVjaG8gdGVzdCA+PnN1Yi9zdWIgJiYKKwlnaXQgYWRkIGZpbGUgc3ViL3N1YiAmJgorCWdpdCBjb21taXQgLW0gIm1vZGlmaWVkIGJvdGgiCisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICgpIHsKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgIiQxIC0tbm8tc3ltbGlua3MiICIKKwkJc3ltbGlua3M9LS1uby1zeW1saW5rcyAmJgorCQkkMgorCSIKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwsU1lNTElOS1MgIiQxIC0tc3ltbGlua3MiICIKKwkJc3ltbGlua3M9LS1zeW1saW5rcyAmJgorCQkkMgorCSIKK30KKworcnVuX2Rpcl9kaWZmX3Rlc3QgJ2RpZmZ0b29sIC1kJyAnCisJZ2l0IGRpZmZ0b29sIC1kICRzeW1saW5rcyAtLWV4dGNtZCBscyBicmFuY2ggPm91dHB1dCAmJgorCWdyZXAgc3ViIG91dHB1dCAmJgorCWdyZXAgZmlsZSBvdXRwdXQKKycKKworcnVuX2Rpcl9kaWZmX3Rlc3QgJ2RpZmZ0b29sIC0tZGlyLWRpZmYnICcKKwlnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAkc3ltbGlua3MgLS1leHRjbWQgbHMgYnJhbmNoID5vdXRwdXQgJiYKKwlncmVwIHN1YiBvdXRwdXQgJiYKKwlncmVwIGZpbGUgb3V0cHV0CisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIGlnbm9yZXMgLS1wcm9tcHQnICcKKwlnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAkc3ltbGlua3MgLS1wcm9tcHQgLS1leHRjbWQgbHMgYnJhbmNoID5vdXRwdXQgJiYKKwlncmVwIHN1YiBvdXRwdXQgJiYKKwlncmVwIGZpbGUgb3V0cHV0CisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIGZyb20gc3ViZGlyZWN0b3J5JyAnCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYgJHN5bWxpbmtzIC0tZXh0Y21kIGxzIGJyYW5jaCA+b3V0cHV0ICYmCisJCWdyZXAgc3ViIG91dHB1dCAmJgorCQlncmVwIGZpbGUgb3V0cHV0CisJKQorJworCitydW5fZGlyX2RpZmZfdGVzdCAnZGlmZnRvb2wgLS1kaXItZGlmZiB3aGVuIHdvcmt0cmVlIGZpbGUgaXMgbWlzc2luZycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgcmVzZXQgLS1oYXJkICYmCisJcm0gZmlsZTIgJiYKKwlnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAkc3ltbGlua3MgLS1leHRjbWQgbHMgYnJhbmNoIG1hc3RlciA+b3V0cHV0ICYmCisJZ3JlcCBmaWxlMiBvdXRwdXQKKycKKword3JpdGVfc2NyaXB0IC5naXQvQ0hFQ0tfU1lNTElOS1MgPDxcRU9GCitmb3IgZiBpbiBmaWxlIGZpbGUyIHN1Yi9zdWIKK2RvCisJZWNobyAiJGYiCisJcmVhZGxpbmsgIiQyLyRmIgorZG9uZSA+YWN0dWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMLFNZTUxJTktTICdkaWZmdG9vbCAtLWRpci1kaWZmIC0tc3ltbGluayB3aXRob3V0IHVuc3RhZ2VkIGNoYW5nZXMnICcKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwlmaWxlCisJJChwd2QpL2ZpbGUKKwlmaWxlMgorCSQocHdkKS9maWxlMgorCXN1Yi9zdWIKKwkkKHB3ZCkvc3ViL3N1YgorCUVPRgorCWdpdCBkaWZmdG9vbCAtLWRpci1kaWZmIC0tc3ltbGluayBcCisJCS0tZXh0Y21kICIuLy5naXQvQ0hFQ0tfU1lNTElOS1MiIGJyYW5jaCBIRUFEICYmCisJdGVzdF9jbXAgYWN0dWFsIGV4cGVjdAorJworCit3cml0ZV9zY3JpcHQgbW9kaWZ5LXJpZ2h0LWZpbGUgPDxcRU9GCitlY2hvICJuZXcgY29udGVudCIgPiIkMi9maWxlIgorRU9GCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIHN5bmNzIHdvcmt0cmVlIHdpdGggdW5zdGFnZWQgY2hhbmdlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCByZXNldCAtLWhhcmQgJiYKKwllY2hvICJvcmlnIGNvbnRlbnQiID5maWxlICYmCisJZ2l0IGRpZmZ0b29sIC1kICRzeW1saW5rcyAtLWV4dGNtZCAiJChwd2QpL21vZGlmeS1yaWdodC1maWxlIiBicmFuY2ggJiYKKwllY2hvICJuZXcgY29udGVudCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3J1bl9kaXJfZGlmZl90ZXN0ICdkaWZmdG9vbCAtLWRpci1kaWZmIHN5bmNzIHdvcmt0cmVlIHdpdGhvdXQgdW5zdGFnZWQgY2hhbmdlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCByZXNldCAtLWhhcmQgJiYKKwlnaXQgZGlmZnRvb2wgLWQgJHN5bWxpbmtzIC0tZXh0Y21kICIkKHB3ZCkvbW9kaWZ5LXJpZ2h0LWZpbGUiIGJyYW5jaCAmJgorCWVjaG8gIm5ldyBjb250ZW50IiA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGZpbGUKKycKKword3JpdGVfc2NyaXB0IG1vZGlmeS1maWxlIDw8XEVPRgorZWNobyAibmV3IGNvbnRlbnQiID5maWxlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCAtLW5vLXN5bWxpbmtzIGRvZXMgbm90IG92ZXJ3cml0ZSB3b3JraW5nIHRyZWUgZmlsZSAnICcKKwllY2hvICJvcmlnIGNvbnRlbnQiID5maWxlICYmCisJZ2l0IGRpZmZ0b29sIC0tZGlyLWRpZmYgLS1uby1zeW1saW5rcyAtLWV4dGNtZCAiJChwd2QpL21vZGlmeS1maWxlIiBicmFuY2ggJiYKKwllY2hvICJuZXcgY29udGVudCIgPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBmaWxlCisnCisKK3dyaXRlX3NjcmlwdCBtb2RpZnktYm90aC1maWxlcyA8PFxFT0YKK2VjaG8gInd0IGNvbnRlbnQiID5maWxlICYmCitlY2hvICJ0bXAgY29udGVudCIgPiIkMi9maWxlIiAmJgorZWNobyAiJDIiID50bXBkaXIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2RpZmZ0b29sIC0tbm8tc3ltbGlua3MgZGV0ZWN0cyBjb25mbGljdCAnICcKKwkoCisJCVRNUERJUj0kVFJBU0hfRElSRUNUT1JZICYmCisJCWV4cG9ydCBUTVBESVIgJiYKKwkJZWNobyAib3JpZyBjb250ZW50IiA+ZmlsZSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZGlmZnRvb2wgLS1kaXItZGlmZiAtLW5vLXN5bWxpbmtzIC0tZXh0Y21kICIkKHB3ZCkvbW9kaWZ5LWJvdGgtZmlsZXMiIGJyYW5jaCAmJgorCQllY2hvICJ3dCBjb250ZW50IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCBmaWxlICYmCisJCWVjaG8gInRtcCBjb250ZW50IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wIGV4cGVjdCAiJChjYXQgdG1wZGlyKS9maWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdkaWZmdG9vbCBwcm9wZXJseSBob25vcnMgZ2l0bGluayBhbmQgY29yZS53b3JrdHJlZScgJworCWdpdCBzdWJtb2R1bGUgYWRkIC4vLiBzdWJtb2QvdWxlICYmCisJdGVzdF9jb25maWcgLUMgc3VibW9kL3VsZSBkaWZmLnRvb2wgY2hlY2t0cmVlcyAmJgorCXRlc3RfY29uZmlnIC1DIHN1Ym1vZC91bGUgZGlmZnRvb2wuY2hlY2t0cmVlcy5jbWQgJ1wnJworCQl0ZXN0IC1kICIkTE9DQUwiICYmIHRlc3QgLWQgIiRSRU1PVEUiICYmIGVjaG8gZ29vZAorCQknXCcnICYmCisJKAorCQljZCBzdWJtb2QvdWxlICYmCisJCWVjaG8gZ29vZCA+ZXhwZWN0ICYmCisJCWdpdCBkaWZmdG9vbCAtLXRvb2w9Y2hlY2t0cmVlcyAtLWRpci1kaWZmIEhFQUR+ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3ODEwLWdyZXAuc2ggYi90L3Q3ODEwLWdyZXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDI4ZmZlNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDc4MTAtZ3JlcC5zaApAQCAtMCwwICsxLDEyOTkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgSnVuaW8gQyBIYW1hbm8KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGdyZXAgdmFyaW91cy4KKycKKworLiAuL3Rlc3QtbGliLnNoCisKK2NhdCA+aGVsbG8uYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGlvLmg+CitpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCit7CisJcHJpbnRmKCJIZWxsbyB3b3JsZC5cbiIpOworCXJldHVybiAwOworCS8qIGNoYXIgPz8gKi8KK30KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIHNldHVwICcKKwl7CisJCWVjaG8gZm9vIG1tYXAgYmFyCisJCWVjaG8gZm9vX21tYXAgYmFyCisJCWVjaG8gZm9vX21tYXAgYmFyIG1tYXAKKwkJZWNobyBmb28gbW1hcCBiYXJfbW1hcAorCQllY2hvIGZvb19tbWFwIGJhciBtbWFwIGJhegorCX0gPmZpbGUgJiYKKwl7CisJCWVjaG8gSGVsbG8gd29ybGQKKwkJZWNobyBIZUxMbyB3b3JsZAorCQllY2hvIEhlbGxvX3dvcmxkCisJCWVjaG8gSGVMTG9fd29ybGQKKwl9ID5oZWxsb193b3JsZCAmJgorCXsKKwkJZWNobyAiYStiKmMiCisJCWVjaG8gImErYmMiCisJCWVjaG8gImFiYyIKKwl9ID5hYiAmJgorCWVjaG8gdnZ2ID52ICYmCisJZWNobyB3dyB3ID53ICYmCisJZWNobyB4IHggeHggeCA+eCAmJgorCWVjaG8geSB5eSA+eSAmJgorCWVjaG8genp6ID4geiAmJgorCW1rZGlyIHQgJiYKKwllY2hvIHRlc3QgPnQvdCAmJgorCWVjaG8gdnZ2ID50L3YgJiYKKwlta2RpciB0L2EgJiYKKwllY2hvIHZ2diA+dC9hL3YgJiYKKwl7CisJCWVjaG8gImxpbmUgd2l0aG91dCBsZWFkaW5nIHNwYWNlMSIKKwkJZWNobyAiIGxpbmUgd2l0aCBsZWFkaW5nIHNwYWNlMSIKKwkJZWNobyAiIGxpbmUgd2l0aCBsZWFkaW5nIHNwYWNlMiIKKwkJZWNobyAiIGxpbmUgd2l0aCBsZWFkaW5nIHNwYWNlMyIKKwkJZWNobyAibGluZSB3aXRob3V0IGxlYWRpbmcgc3BhY2UyIgorCX0gPnNwYWNlICYmCisJZ2l0IGFkZCAuICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgc2hvdWxkIG5vdCBzZWdmYXVsdCB3aXRoIGEgYmFkIGlucHV0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgIigiCisnCisKK2ZvciBIIGluIEhFQUQgJycKK2RvCisJY2FzZSAiJEgiIGluCisJSEVBRCkJSEM9J0hFQUQ6JyBMPSdIRUFEJyA7OworCScnKQlIQz0gTD0naW4gd29ya2luZyB0cmVlJyA7OworCWVzYWMKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6MTpmb28gbW1hcCBiYXIKKwkJCWVjaG8gJHtIQ31maWxlOjM6Zm9vX21tYXAgYmFyIG1tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjQ6Zm9vIG1tYXAgYmFyX21tYXAKKwkJCWVjaG8gJHtIQ31maWxlOjU6Zm9vX21tYXAgYmFyIG1tYXAgYmF6CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLmxpbmVudW1iZXI9ZmFsc2UgZ3JlcCAtbiAtdyAtZSBtbWFwICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCIgJworCQl7CisJCQllY2hvICR7SEN9ZmlsZToxOmZvbyBtbWFwIGJhcgorCQkJZWNobyAke0hDfWZpbGU6Mzpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6NDpmb28gbW1hcCBiYXJfbW1hcAorCQkJZWNobyAke0hDfWZpbGU6NTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IC1jIGdyZXAubGluZW51bWJlcj10cnVlIGdyZXAgLXcgLWUgbW1hcCAkSCA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLXcgJEwiICcKKwkJeworCQkJZWNobyAke0hDfWZpbGU6Zm9vIG1tYXAgYmFyCisJCQllY2hvICR7SEN9ZmlsZTpmb29fbW1hcCBiYXIgbW1hcAorCQkJZWNobyAke0hDfWZpbGU6Zm9vIG1tYXAgYmFyX21tYXAKKwkJCWVjaG8gJHtIQ31maWxlOmZvb19tbWFwIGJhciBtbWFwIGJhegorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5saW5lbnVtYmVyPXRydWUgZ3JlcCAtLW5vLWxpbmUtbnVtYmVyIC13IC1lIG1tYXAgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh3KSIgJworCQk6ID5leHBlY3RlZCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtbiAtdyAtZSAiXnciICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCAoeCkiICcKKwkJeworCQkJZWNobyAke0hDfXg6MTp4IHggeHggeAorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtbiAtdyAtZSAieCB4eCogeCIgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh5LTEpIiAnCisJCXsKKwkJCWVjaG8gJHtIQ315OjE6eSB5eQorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtbiAtdyAtZSAiXnkiICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtdyAkTCAoeS0yKSIgJworCQk6ID5leHBlY3RlZCAmJgorCQlpZiBnaXQgZ3JlcCAtbiAtdyAtZSAiXnkgeSIgJEggPmFjdHVhbAorCQl0aGVuCisJCQllY2hvIHNob3VsZCBub3QgaGF2ZSBtYXRjaGVkCisJCQljYXQgYWN0dWFsCisJCQlmYWxzZQorCQllbHNlCisJCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwkJZmkKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC13ICRMICh6KSIgJworCQk6ID5leHBlY3RlZCAmJgorCQlpZiBnaXQgZ3JlcCAtbiAtdyAtZSAiXnoiICRIID5hY3R1YWwKKwkJdGhlbgorCQkJZWNobyBzaG91bGQgbm90IGhhdmUgbWF0Y2hlZAorCQkJY2F0IGFjdHVhbAorCQkJZmFsc2UKKwkJZWxzZQorCQkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJCWZpCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCAodC0xKSIgJworCQllY2hvICIke0hDfXQvdDoxOnRlc3QiID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtbiAtZSB0ZXN0ICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCAodC0yKSIgJworCQllY2hvICIke0hDfXQ6MTp0ZXN0IiA+ZXhwZWN0ZWQgJiYKKwkJKAorCQkJY2QgdCAmJgorCQkJZ2l0IGdyZXAgLW4gLWUgdGVzdCAkSAorCQkpID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCAodC0zKSIgJworCQllY2hvICIke0hDfXQvdDoxOnRlc3QiID5leHBlY3RlZCAmJgorCQkoCisJCQljZCB0ICYmCisJCQlnaXQgZ3JlcCAtLWZ1bGwtbmFtZSAtbiAtZSB0ZXN0ICRICisJCSkgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC1jICRMIChubyAvZGV2L251bGwpIiAnCisJCSEgZ2l0IGdyZXAgLWMgdGVzdCAkSCB8IGdyZXAgL2Rldi9udWxsCisgICAgICAgICcKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgLS1tYXgtZGVwdGggLTEgJEwiICcKKwkJeworCQkJZWNobyAke0hDfXQvYS92OjE6dnZ2CisJCQllY2hvICR7SEN9dC92OjE6dnZ2CisJCQllY2hvICR7SEN9djoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAtMSAtbiAtZSB2dnYgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIDAgJEwiICcKKwkJeworCQkJZWNobyAke0hDfXY6MTp2dnYKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1tYXgtZGVwdGggMCAtbiAtZSB2dnYgJEggPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIDAgLS0gJyonICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L2EvdjoxOnZ2dgorCQkJZWNobyAke0hDfXQvdjoxOnZ2dgorCQkJZWNobyAke0hDfXY6MTp2dnYKKwkJfSA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IGdyZXAgLS1tYXgtZGVwdGggMCAtbiAtZSB2dnYgJEggLS0gIioiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLW1heC1kZXB0aCAxICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L3Y6MTp2dnYKKwkJCWVjaG8gJHtIQ312OjE6dnZ2CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tbWF4LWRlcHRoIDEgLW4gLWUgdnZ2ICRIID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLW1heC1kZXB0aCAwIC0tIHQgJEwiICcKKwkJeworCQkJZWNobyAke0hDfXQvdjoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAwIC1uIC1lIHZ2diAkSCAtLSB0ID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLW1heC1kZXB0aCAwIC0tIC4gdCAkTCIgJworCQl7CisJCQllY2hvICR7SEN9dC92OjE6dnZ2CisJCQllY2hvICR7SEN9djoxOnZ2dgorCQl9ID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLW1heC1kZXB0aCAwIC1uIC1lIHZ2diAkSCAtLSAuIHQgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tbWF4LWRlcHRoIDAgLS0gdCAuICRMIiAnCisJCXsKKwkJCWVjaG8gJHtIQ310L3Y6MTp2dnYKKwkJCWVjaG8gJHtIQ312OjE6dnZ2CisJCX0gPmV4cGVjdGVkICYmCisJCWdpdCBncmVwIC0tbWF4LWRlcHRoIDAgLW4gLWUgdnZ2ICRIIC0tIHQgLiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD1mYWxzZSIgJworCQllY2hvICIke0hDfWFiOmErYmMiID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD1mYWxzZSBncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIiAnCisJCWVjaG8gIiR7SEN9YWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IC1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSBncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJudHlwZT1iYXNpYyIgJworCQllY2hvICIke0hDfWFiOmErYmMiID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5wYXR0ZXJudHlwZT1iYXNpYyBncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCIgJworCQllY2hvICIke0hDfWFiOmFiYyIgPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLnBhdHRlcm50eXBlPWV4dGVuZGVkIGdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm50eXBlPWZpeGVkIiAnCisJCWVjaG8gIiR7SEN9YWI6YStiKmMiID5leHBlY3RlZCAmJgorCQlnaXQgLWMgZ3JlcC5wYXR0ZXJudHlwZT1maXhlZCBncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIExJQlBDUkUgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm50eXBlPXBlcmwiICcKKwkJZWNobyAiJHtIQ31hYjphK2IqYyIgPmV4cGVjdGVkICYmCisJCWdpdCAtYyBncmVwLnBhdHRlcm50eXBlPXBlcmwgZ3JlcCAiYVx4ezJifWJceHsyYX1jIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm5UeXBlPWRlZmF1bHQgYW5kIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSIgJworCQllY2hvICIke0hDfWFiOmFiYyIgPmV4cGVjdGVkICYmCisJCWdpdCBcCisJCQktYyBncmVwLnBhdHRlcm5UeXBlPWRlZmF1bHQgXAorCQkJLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIFwKKwkJCWdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUgYW5kIGdyZXAucGF0dGVyblR5cGU9ZGVmYXVsdCIgJworCQllY2hvICIke0hDfWFiOmFiYyIgPmV4cGVjdGVkICYmCisJCWdpdCBcCisJCQktYyBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUgXAorCQkJLWMgZ3JlcC5wYXR0ZXJuVHlwZT1kZWZhdWx0IFwKKwkJCWdyZXAgImErYipjIiAkSCBhYiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorCScKKworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgImdyZXAgJEwgd2l0aCBncmVwLnBhdHRlcm5UeXBlPWV4dGVuZGVkIGFuZCBncmVwLmV4dGVuZGVkUmVnZXhwPWZhbHNlIiAnCisJCWVjaG8gIiR7SEN9YWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwkJZ2l0IFwKKwkJCS1jIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQgXAorCQkJLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD1mYWxzZSBcCisJCQlncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYyBhbmQgZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIiAnCisJCWVjaG8gIiR7SEN9YWI6YStiYyIgPmV4cGVjdGVkICYmCisJCWdpdCBcCisJCQktYyBncmVwLnBhdHRlcm5UeXBlPWJhc2ljIFwKKwkJCS1jIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSBcCisJCQlncmVwICJhK2IqYyIgJEggYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwICRMIHdpdGggZ3JlcC5leHRlbmRlZFJlZ2V4cD1mYWxzZSBhbmQgZ3JlcC5wYXR0ZXJuVHlwZT1leHRlbmRlZCIgJworCQllY2hvICIke0hDfWFiOmFiYyIgPmV4cGVjdGVkICYmCisJCWdpdCBcCisJCQktYyBncmVwLmV4dGVuZGVkUmVnZXhwPWZhbHNlIFwKKwkJCS1jIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQgXAorCQkJZ3JlcCAiYStiKmMiICRIIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAkTCB3aXRoIGdyZXAuZXh0ZW5kZWRSZWdleHA9dHJ1ZSBhbmQgZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYyIgJworCQllY2hvICIke0hDfWFiOmErYmMiID5leHBlY3RlZCAmJgorCQlnaXQgXAorCQkJLWMgZ3JlcC5leHRlbmRlZFJlZ2V4cD10cnVlIFwKKwkJCS1jIGdyZXAucGF0dGVyblR5cGU9YmFzaWMgXAorCQkJZ3JlcCAiYStiKmMiICRIIGFiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisJJworCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiZ3JlcCAtLWNvdW50ICRMIiAnCisJCWVjaG8gJHtIQ31hYjozID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLWNvdW50IC1lIGIgJEggLS0gYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICJncmVwIC0tY291bnQgLWggJEwiICcKKwkJZWNobyAzID5leHBlY3RlZCAmJgorCQlnaXQgZ3JlcCAtLWNvdW50IC1oIC1lIGIgJEggLS0gYWIgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKwknCitkb25lCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2ZpbGUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtbCAtQycgJworCWdpdCBncmVwIC1sIC1DMSBmb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitmaWxlOjUKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtbCAtQycgJworCWdpdCBncmVwIC1jIC1DMSBmb28gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1MIC1DJyAnCisJZ2l0IGxzLWZpbGVzID5leHBlY3RlZCAmJgorCWdpdCBncmVwIC1MIC1DMSBub25leGlzdGVudF9zdHJpbmcgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitmaWxlOmZvbyBtbWFwIGJhcl9tbWFwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZSBBIC0tYW5kIC1lIEInICcKKwlnaXQgZ3JlcCAtZSAiZm9vIG1tYXAiIC0tYW5kIC1lIGJhcl9tbWFwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTpmb29fbW1hcCBiYXIgbW1hcAorZmlsZTpmb29fbW1hcCBiYXIgbW1hcCBiYXoKK0VPRgorCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgKCAtZSBBIC0tb3IgLWUgQiApIC0tYW5kIC1lIEInICcKKwlnaXQgZ3JlcCBcKCAtZSBmb29fIC0tb3IgLWUgYmF6IFwpIFwKKwkJLS1hbmQgLWUgIiBtbWFwIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2ZpbGU6Zm9vIG1tYXAgYmFyCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZSBBIC0tYW5kIC0tbm90IC1lIEInICcKKwlnaXQgZ3JlcCAtZSAiZm9vIG1tYXAiIC0tYW5kIC0tbm90IC1lIGJhcl9tbWFwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBzaG91bGQgaWdub3JlIEdSRVBfT1BUSU9OUycgJworCUdSRVBfT1BUSU9OUz0tdiBnaXQgZ3JlcCAiIG1tYXAgYmFyXCQiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZiwgbm9uLWV4aXN0ZW50IGZpbGUnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtZiBwYXR0ZXJucworJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitmaWxlOmZvbyBtbWFwIGJhcgorZmlsZTpmb29fbW1hcCBiYXIKK2ZpbGU6Zm9vX21tYXAgYmFyIG1tYXAKK2ZpbGU6Zm9vIG1tYXAgYmFyX21tYXAKK2ZpbGU6Zm9vX21tYXAgYmFyIG1tYXAgYmF6CitFT0YKKworY2F0ID5wYXR0ZXJuIDw8RU9GCittbWFwCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZiwgb25lIHBhdHRlcm4nICcKKwlnaXQgZ3JlcCAtZiBwYXR0ZXJuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTpmb28gbW1hcCBiYXIKK2ZpbGU6Zm9vX21tYXAgYmFyCitmaWxlOmZvb19tbWFwIGJhciBtbWFwCitmaWxlOmZvbyBtbWFwIGJhcl9tbWFwCitmaWxlOmZvb19tbWFwIGJhciBtbWFwIGJhegordC9hL3Y6dnZ2Cit0L3Y6dnZ2Cit2OnZ2dgorRU9GCisKK2NhdCA+cGF0dGVybnMgPDxFT0YKK21tYXAKK3Z2dgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWYsIG11bHRpcGxlIHBhdHRlcm5zJyAnCisJZ2l0IGdyZXAgLWYgcGF0dGVybnMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwLCBtdWx0aXBsZSBwYXR0ZXJucycgJworCWdpdCBncmVwICIkKGNhdCBwYXR0ZXJucykiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorZmlsZTpmb28gbW1hcCBiYXIKK2ZpbGU6Zm9vX21tYXAgYmFyCitmaWxlOmZvb19tbWFwIGJhciBtbWFwCitmaWxlOmZvbyBtbWFwIGJhcl9tbWFwCitmaWxlOmZvb19tbWFwIGJhciBtbWFwIGJhegordC9hL3Y6dnZ2Cit0L3Y6dnZ2Cit2OnZ2dgorRU9GCisKK2NhdCA+cGF0dGVybnMgPDxFT0YKKworbW1hcAorCit2dnYKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLWYsIGlnbm9yZSBlbXB0eSBsaW5lcycgJworCWdpdCBncmVwIC1mIHBhdHRlcm5zID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtZiwgaWdub3JlIGVtcHR5IGxpbmVzLCByZWFkIHBhdHRlcm5zIGZyb20gc3RkaW4nICcKKwlnaXQgZ3JlcCAtZiAtIDxwYXR0ZXJucyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK3k6eSB5eQorLS0KK3o6enp6CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtcSwgc2lsZW50bHkgcmVwb3J0IG1hdGNoZXMnICcKKwk+ZW1wdHkgJiYKKwlnaXQgZ3JlcCAtcSBtbWFwID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtcSBxZndmcSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUMxIGh1bmsgbWFyayBiZXR3ZWVuIGZpbGVzJyAnCisJZ2l0IGdyZXAgLUMxICJeW3l6XSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCBzZXR1cCcgJworCWVjaG8gYSA+PmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9IldpdGggKiBBc3RlcmlzayIgXAorCUdJVF9BVVRIT1JfRU1BSUw9Inh5enp5QGZyb3R6LmNvbSIgXAorCWdpdCBjb21taXQgLWEgLW0gInNlY29uZCIgJiYKKworCWVjaG8gYSA+PmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0aGlyZCIgJiYKKworCWVjaG8gYSA+PmZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9Ik5pZ2h0IEZhbGwiIFwKKwlHSVRfQVVUSE9SX0VNQUlMPSJuaXRmb2xAZnJvYm96ei5jb20iIFwKKwlnaXQgY29tbWl0IC1hIC1tICJmb3VydGgiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwICgxKScgJworCWdpdCBsb2cgLS1hdXRob3I9YXV0aG9yIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCXsKKwkJZWNobyB0aGlyZCAmJiBlY2hvIGluaXRpYWwKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwICgyKScgJworCWdpdCBsb2cgLS1hdXRob3I9IiAqICIgLUYgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJeworCQllY2hvIHNlY29uZAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgKDMpJyAnCisJZ2l0IGxvZyAtLWF1dGhvcj0iXkEgVSIgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJeworCQllY2hvIHRoaXJkICYmIGVjaG8gaW5pdGlhbAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgKDQpJyAnCisJZ2l0IGxvZyAtLWF1dGhvcj0iZnJvdHpcLmNvbT4kIiAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gc2Vjb25kCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCAoNSknICcKKwlnaXQgbG9nIC0tYXV0aG9yPVRob3IgLUYgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJeworCQllY2hvIHRoaXJkICYmIGVjaG8gaW5pdGlhbAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgKDYpJyAnCisJZ2l0IGxvZyAtLWF1dGhvcj0tMDcwMCAgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgKDcpJyAnCisJZ2l0IGxvZyAtZyAtLWdyZXAtcmVmbG9nPSJjb21taXQ6IHRoaXJkIiAtLXByZXR0eT10Zm9ybWF0OiVzID5hY3R1YWwgJiYKKwllY2hvIHRoaXJkID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyBncmVwICg4KScgJworCWdpdCBsb2cgLWcgLS1ncmVwLXJlZmxvZz0iY29tbWl0OiB0aGlyZCIgLS1ncmVwLXJlZmxvZz0iY29tbWl0OiBzZWNvbmQiIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCXsKKwkJZWNobyB0aGlyZCAmJiBlY2hvIHNlY29uZAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIGdyZXAgKDkpJyAnCisJZ2l0IGxvZyAtZyAtLWdyZXAtcmVmbG9nPSJjb21taXQ6IHRoaXJkIiAtLWF1dGhvcj0iVGhvciIgLS1wcmV0dHk9dGZvcm1hdDolcyA+YWN0dWFsICYmCisJZWNobyB0aGlyZCA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgZ3JlcCAoOSknICcKKwlnaXQgbG9nIC1nIC0tZ3JlcC1yZWZsb2c9ImNvbW1pdDogdGhpcmQiIC0tYXV0aG9yPSJub24tZXhpc3RhbnQiIC0tcHJldHR5PXRmb3JtYXQ6JXMgPmFjdHVhbCAmJgorCTogPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JlcC1yZWZsb2cgY2FuIG9ubHkgYmUgdXNlZCB1bmRlciAtZycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBsb2cgLS1ncmVwLXJlZmxvZz0iY29tbWl0OiB0aGlyZCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIHdpdGggbXVsdGlwbGUgLS1ncmVwIHVzZXMgdW5pb24nICcKKwlnaXQgbG9nIC0tZ3JlcD1pIC0tZ3JlcD1yIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gZm91cnRoICYmIGVjaG8gdGhpcmQgJiYgZWNobyBpbml0aWFsCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1hbGwtbWF0Y2ggd2l0aCBtdWx0aXBsZSAtLWdyZXAgdXNlcyBpbnRlcnNlY3Rpb24nICcKKwlnaXQgbG9nIC0tYWxsLW1hdGNoIC0tZ3JlcD1pIC0tZ3JlcD1yIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gdGhpcmQKKwl9ID5leHBlY3QgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyB3aXRoIG11bHRpcGxlIC0tYXV0aG9yIHVzZXMgdW5pb24nICcKKwlnaXQgbG9nIC0tYXV0aG9yPSJUaG9yIiAtLWF1dGhvcj0iQXN0ZXIiIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl7CisJICAgIGVjaG8gdGhpcmQgJiYgZWNobyBzZWNvbmQgJiYgZWNobyBpbml0aWFsCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1hbGwtbWF0Y2ggd2l0aCBtdWx0aXBsZSAtLWF1dGhvciBzdGlsbCB1c2VzIHVuaW9uJyAnCisJZ2l0IGxvZyAtLWFsbC1tYXRjaCAtLWF1dGhvcj0iVGhvciIgLS1hdXRob3I9IkFzdGVyIiAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCSAgICBlY2hvIHRoaXJkICYmIGVjaG8gc2Vjb25kICYmIGVjaG8gaW5pdGlhbAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JlcCAtLWF1dGhvciB1c2VzIGludGVyc2VjdGlvbicgJworCSMgZ3JlcCBtYXRjaGVzIG9ubHkgdGhpcmQgYW5kIGZvdXJ0aAorCSMgYXV0aG9yIG1hdGNoZXMgb25seSBpbml0aWFsIGFuZCB0aGlyZAorCWdpdCBsb2cgLS1hdXRob3I9IkEgVSBUaG9yIiAtLWdyZXA9ciAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCQllY2hvIHRoaXJkCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1ncmVwIC0tZ3JlcCAtLWF1dGhvciB0YWtlcyB1bmlvbiBvZiBncmVwcyBhbmQgaW50ZXJzZWN0cyB3aXRoIGF1dGhvcicgJworCSMgZ3JlcCBtYXRjaGVzIGluaXRpYWwgYW5kIHNlY29uZCBidXQgbm90IHRoaXJkCisJIyBhdXRob3IgbWF0Y2hlcyBvbmx5IGluaXRpYWwgYW5kIHRoaXJkCisJZ2l0IGxvZyAtLWF1dGhvcj0iQSBVIFRob3IiIC0tZ3JlcD1zIC0tZ3JlcD1sIC0tZm9ybWF0PSVzID5hY3R1YWwgJiYKKwl7CisJCWVjaG8gaW5pdGlhbAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tLWFsbC1tYXRjaCAtZ3JlcCAtLWF1dGhvciAtLWF1dGhvciBzdGlsbCB0YWtlcyB1bmlvbiBvZiBhdXRob3JzIGFuZCBpbnRlcnNlY3RzIHdpdGggZ3JlcCcgJworCSMgZ3JlcCBtYXRjaGVzIG9ubHkgaW5pdGlhbCBhbmQgdGhpcmQKKwkjIGF1dGhvciBtYXRjaGVzIGFsbCBidXQgc2Vjb25kCisJZ2l0IGxvZyAtLWFsbC1tYXRjaCAtLWF1dGhvcj0iVGhvciIgLS1hdXRob3I9Ik5pZ2h0IiAtLWdyZXA9aSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCSAgICBlY2hvIHRoaXJkICYmIGVjaG8gaW5pdGlhbAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tZ3JlcCAtLWF1dGhvciAtLWF1dGhvciB0YWtlcyB1bmlvbiBvZiBhdXRob3JzIGFuZCBpbnRlcnNlY3RzIHdpdGggZ3JlcCcgJworCSMgZ3JlcCBtYXRjaGVzIG9ubHkgaW5pdGlhbCBhbmQgdGhpcmQKKwkjIGF1dGhvciBtYXRjaGVzIGFsbCBidXQgc2Vjb25kCisJZ2l0IGxvZyAtLWF1dGhvcj0iVGhvciIgLS1hdXRob3I9Ik5pZ2h0IiAtLWdyZXA9aSAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCSAgICBlY2hvIHRoaXJkICYmIGVjaG8gaW5pdGlhbAorCX0gPmV4cGVjdCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9nIC0tYWxsLW1hdGNoIC0tZ3JlcCAtLWdyZXAgLS1hdXRob3IgdGFrZXMgaW50ZXJzZWN0aW9uJyAnCisJIyBncmVwIG1hdGNoZXMgb25seSB0aGlyZAorCSMgYXV0aG9yIG1hdGNoZXMgb25seSBpbml0aWFsIGFuZCB0aGlyZAorCWdpdCBsb2cgLS1hbGwtbWF0Y2ggLS1hdXRob3I9IkEgVSBUaG9yIiAtLWdyZXA9aSAtLWdyZXA9ciAtLWZvcm1hdD0lcyA+YWN0dWFsICYmCisJeworCQllY2hvIHRoaXJkCisJfSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2cgLS1hdXRob3IgZG9lcyBub3Qgc2VhcmNoIGluIHRpbWVzdGFtcCcgJworCTogPmV4cGVjdCAmJgorCWdpdCBsb2cgLS1hdXRob3I9IiRHSVRfQVVUSE9SX0RBVEUiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvZyAtLWNvbW1pdHRlciBkb2VzIG5vdCBzZWFyY2ggaW4gdGltZXN0YW1wJyAnCisJOiA+ZXhwZWN0ICYmCisJZ2l0IGxvZyAtLWNvbW1pdHRlcj0iJEdJVF9DT01NSVRURVJfREFURSIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCB3aXRoIENFX1ZBTElEIGZpbGUnICcKKwlnaXQgdXBkYXRlLWluZGV4IC0tYXNzdW1lLXVuY2hhbmdlZCB0L3QgJiYKKwlybSB0L3QgJiYKKwl0ZXN0ICIkKGdpdCBncmVwIHRlc3QpIiA9ICJ0L3Q6dGVzdCIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tbm8tYXNzdW1lLXVuY2hhbmdlZCB0L3QgJiYKKwlnaXQgY2hlY2tvdXQgdC90CisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmM9I2luY2x1ZGUgPHN0ZGlvLmg+CitoZWxsby5jOglyZXR1cm4gMDsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1wIHdpdGggdXNlcmRpZmYnICcKKwlnaXQgY29uZmlnIGRpZmYuY3VzdG9tLmZ1bmNuYW1lICJeIyIgJiYKKwllY2hvICJoZWxsby5jIGRpZmY9Y3VzdG9tIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwlnaXQgZ3JlcCAtcCByZXR1cm4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jPWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2hlbGxvLmM6CXJldHVybiAwOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLXAnICcKKwlybSAtZiAuZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBncmVwIC1wIHJldHVybiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmMtI2luY2x1ZGUgPHN0ZGlvLmg+CitoZWxsby5jPWludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2hlbGxvLmMteworaGVsbG8uYy0JcHJpbnRmKCJIZWxsbyB3b3JsZC5cbiIpOworaGVsbG8uYzoJcmV0dXJuIDA7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtcCAtQjUnICcKKwlnaXQgZ3JlcCAtcCAtQjUgcmV0dXJuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYz1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jLXsKK2hlbGxvLmMtCXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKK2hlbGxvLmM6CXJldHVybiAwOworaGVsbG8uYy0JLyogY2hhciA/PyAqLworaGVsbG8uYy19CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtVycgJworCWdpdCBncmVwIC1XIHJldHVybiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmM9CXByaW50ZigiSGVsbG8gd29ybGQuXG4iKTsKK2hlbGxvLmM6CXJldHVybiAwOworaGVsbG8uYy0JLyogY2hhciA/PyAqLworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLVcgd2l0aCB1c2VyZGlmZicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgLmdpdGF0dHJpYnV0ZXMiICYmCisJZ2l0IGNvbmZpZyBkaWZmLmN1c3RvbS54ZnVuY25hbWUgIihwcmludGYuKnx9KSQiICYmCisJZWNobyAiaGVsbG8uYyBkaWZmPWN1c3RvbSIgPi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGdyZXAgLVcgcmV0dXJuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBmcm9tIGEgc3ViZGlyZWN0b3J5IHRvIHNlYXJjaCB3aWRlciBhcmVhICgxKScgJworCW1rZGlyIC1wIHMgJiYKKwkoCisJCWNkIHMgJiYgZ2l0IGdyZXAgInggeCB4IiAuLgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBmcm9tIGEgc3ViZGlyZWN0b3J5IHRvIHNlYXJjaCB3aWRlciBhcmVhICgyKScgJworCW1rZGlyIC1wIHMgJiYKKwkoCisJCWNkIHMgfHwgZXhpdCAxCisJCSggZ2l0IGdyZXAgeHh5eXp6IC4uID5vdXQgOyBlY2hvICQ/ID5zdGF0dXMgKQorCQkhIHRlc3QgLXMgb3V0ICYmCisJCXRlc3QgMSA9ICQoY2F0IHN0YXR1cykKKwkpCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmM6aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUZpJyAnCisJZ2l0IGdyZXAgLUZpICJDSEFSICoiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3V0c2lkZSBvZiBnaXQgcmVwb3NpdG9yeScgJworCXJtIC1mciBub24gJiYKKwlta2RpciAtcCBub24vZ2l0L3N1YiAmJgorCWVjaG8gaGVsbG8gPm5vbi9naXQvZmlsZTEgJiYKKwllY2hvIHdvcmxkID5ub24vZ2l0L3N1Yi9maWxlMiAmJgorCXsKKwkJZWNobyBmaWxlMTpoZWxsbyAmJgorCQllY2hvIHN1Yi9maWxlMjp3b3JsZAorCX0gPm5vbi9leHBlY3QuZnVsbCAmJgorCWVjaG8gZmlsZTI6d29ybGQgPm5vbi9leHBlY3Quc3ViICYmCisJKAorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJChwd2QpL25vbi9naXQiICYmCisJCWV4cG9ydCBHSVRfQ0VJTElOR19ESVJFQ1RPUklFUyAmJgorCQljZCBub24vZ2l0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIG8gJiYKKwkJZ2l0IGdyZXAgLS1uby1pbmRleCBvID4uLi9hY3R1YWwuZnVsbCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3QuZnVsbCAuLi9hY3R1YWwuZnVsbAorCQljZCBzdWIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgbyAmJgorCQlnaXQgZ3JlcCAtLW5vLWluZGV4IG8gPi4uLy4uL2FjdHVhbC5zdWIgJiYKKwkJdGVzdF9jbXAgLi4vLi4vZXhwZWN0LnN1YiAuLi8uLi9hY3R1YWwuc3ViCisJKSAmJgorCisJZWNobyAiLipvKiIgPm5vbi9naXQvLmdpdGlnbm9yZSAmJgorCSgKKwkJR0lUX0NFSUxJTkdfRElSRUNUT1JJRVM9IiQocHdkKS9ub24vZ2l0IiAmJgorCQlleHBvcnQgR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMgJiYKKwkJY2Qgbm9uL2dpdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCBvICYmCisJCWdpdCBncmVwIC0tbm8taW5kZXggLS1leGNsdWRlLXN0YW5kYXJkIG8gPi4uL2FjdHVhbC5mdWxsICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdC5mdWxsIC4uL2FjdHVhbC5mdWxsICYmCisKKwkJeworCQkJZWNobyAiLmdpdGlnbm9yZTouKm8qIgorCQkJY2F0IC4uL2V4cGVjdC5mdWxsCisJCX0gPi4uL2V4cGVjdC53aXRoLmlnbm9yZWQgJiYKKwkJZ2l0IGdyZXAgLS1uby1pbmRleCAtLW5vLWV4Y2x1ZGUgbyA+Li4vYWN0dWFsLmZ1bGwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0LndpdGguaWdub3JlZCAuLi9hY3R1YWwuZnVsbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5zaWRlIGdpdCByZXBvc2l0b3J5IGJ1dCB3aXRoIC0tbm8taW5kZXgnICcKKwlybSAtZnIgaXMgJiYKKwlta2RpciAtcCBpcy9naXQvc3ViICYmCisJZWNobyBoZWxsbyA+aXMvZ2l0L2ZpbGUxICYmCisJZWNobyB3b3JsZCA+aXMvZ2l0L3N1Yi9maWxlMiAmJgorCWVjaG8gIi4qbyoiID5pcy9naXQvLmdpdGlnbm9yZSAmJgorCXsKKwkJZWNobyBmaWxlMTpoZWxsbyAmJgorCQllY2hvIHN1Yi9maWxlMjp3b3JsZAorCX0gPmlzL2V4cGVjdC51bmlnbm9yZWQgJiYKKwl7CisJCWVjaG8gIi5naXRpZ25vcmU6LipvKiIgJiYKKwkJY2F0IGlzL2V4cGVjdC51bmlnbm9yZWQKKwl9ID5pcy9leHBlY3QuZnVsbCAmJgorCTogPmlzL2V4cGVjdC5lbXB0eSAmJgorCWVjaG8gZmlsZTI6d29ybGQgPmlzL2V4cGVjdC5zdWIgJiYKKwkoCisJCWNkIGlzL2dpdCAmJgorCQlnaXQgaW5pdCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCBvID4uLi9hY3R1YWwuZnVsbCAmJgorCQl0ZXN0X2NtcCAuLi9leHBlY3QuZW1wdHkgLi4vYWN0dWFsLmZ1bGwgJiYKKworCQlnaXQgZ3JlcCAtLXVudHJhY2tlZCBvID4uLi9hY3R1YWwudW5pZ25vcmVkICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdC51bmlnbm9yZWQgLi4vYWN0dWFsLnVuaWdub3JlZCAmJgorCisJCWdpdCBncmVwIC0tbm8taW5kZXggbyA+Li4vYWN0dWFsLmZ1bGwgJiYKKwkJdGVzdF9jbXAgLi4vZXhwZWN0LmZ1bGwgLi4vYWN0dWFsLmZ1bGwgJiYKKworCQlnaXQgZ3JlcCAtLW5vLWluZGV4IC0tZXhjbHVkZS1zdGFuZGFyZCBvID4uLi9hY3R1YWwudW5pZ25vcmVkICYmCisJCXRlc3RfY21wIC4uL2V4cGVjdC51bmlnbm9yZWQgLi4vYWN0dWFsLnVuaWdub3JlZCAmJgorCisJCWNkIHN1YiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCBvID4uLi8uLi9hY3R1YWwuc3ViICYmCisJCXRlc3RfY21wIC4uLy4uL2V4cGVjdC5lbXB0eSAuLi8uLi9hY3R1YWwuc3ViICYmCisKKwkJZ2l0IGdyZXAgLS1uby1pbmRleCBvID4uLi8uLi9hY3R1YWwuc3ViICYmCisJCXRlc3RfY21wIC4uLy4uL2V4cGVjdC5zdWIgLi4vLi4vYWN0dWFsLnN1YiAmJgorCisJCWdpdCBncmVwIC0tdW50cmFja2VkIG8gPi4uLy4uL2FjdHVhbC5zdWIgJiYKKwkJdGVzdF9jbXAgLi4vLi4vZXhwZWN0LnN1YiAuLi8uLi9hY3R1YWwuc3ViCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBkb3VibGUtZGFzaCB0ZXN0cycgJworY2F0ID5kb3VibGUtZGFzaCA8PEVPRiAmJgorLS0KKy0+CitvdGhlcgorRU9GCitnaXQgYWRkIGRvdWJsZS1kYXNoCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2RvdWJsZS1kYXNoOi0+CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS0gcGF0dGVybicgJworCWdpdCBncmVwIC0tICItPiIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLSBwYXR0ZXJuIC0tIHBhdGhzcGVjJyAnCisJZ2l0IGdyZXAgLS0gIi0+IiAtLSBkb3VibGUtZGFzaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1lIHBhdHRlcm4gLS0gcGF0aCcgJworCWdpdCBncmVwIC1lICItPiIgLS0gZG91YmxlLWRhc2ggPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitkb3VibGUtZGFzaDotLQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1lIC0tIC0tIHBhdGgnICcKKwlnaXQgZ3JlcCAtZSAtLSAtLSBkb3VibGUtZGFzaCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmM6aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoraGVsbG8uYzoJcHJpbnRmKCJIZWxsbyB3b3JsZC5cbiIpOworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRSAnZ3JlcCAtLXBlcmwtcmVnZXhwIHBhdHRlcm4nICcKKwlnaXQgZ3JlcCAtLXBlcmwtcmVnZXhwICJccHtQc30uKj9ccHtQZX0iIGhlbGxvLmMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExJQlBDUkUgJ2dyZXAgLVAgcGF0dGVybicgJworCWdpdCBncmVwIC1QICJccHtQc30uKj9ccHtQZX0iIGhlbGxvLmMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIHBhdHRlcm4gd2l0aCBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUnICcKKwk+ZW1wdHkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZ3JlcC5leHRlbmRlZHJlZ2V4cD10cnVlIFwKKwkJZ3JlcCAiXHB7UHN9Lio/XHB7UGV9IiBoZWxsby5jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMSUJQQ1JFICdncmVwIC1QIHBhdHRlcm4gd2l0aCBncmVwLmV4dGVuZGVkUmVnZXhwPXRydWUnICcKKwlnaXQgLWMgZ3JlcC5leHRlbmRlZHJlZ2V4cD10cnVlIFwKKwkJZ3JlcCAtUCAiXHB7UHN9Lio/XHB7UGV9IiBoZWxsby5jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMSUJQQ1JFICdncmVwIC1QIC12IHBhdHRlcm4nICcKKwl7CisJCWVjaG8gImFiOmErYipjIgorCQllY2hvICJhYjphK2JjIgorCX0gPmV4cGVjdGVkICYmCisJZ2l0IGdyZXAgLVAgLXYgImFiYyIgYWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExJQlBDUkUgJ2dyZXAgLVAgLWkgcGF0dGVybicgJworCWNhdCA+ZXhwZWN0ZWQgPDwtRU9GICYmCisJaGVsbG8uYzoJcHJpbnRmKCJIZWxsbyB3b3JsZC5cbiIpOworCUVPRgorCWdpdCBncmVwIC1QIC1pICJQUklOVEZcKFteXGRdK1wpIiBoZWxsby5jID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMSUJQQ1JFICdncmVwIC1QIC13IHBhdHRlcm4nICcKKwl7CisJCWVjaG8gImhlbGxvX3dvcmxkOkhlbGxvIHdvcmxkIgorCQllY2hvICJoZWxsb193b3JsZDpIZUxMbyB3b3JsZCIKKwl9ID5leHBlY3RlZCAmJgorCWdpdCBncmVwIC1QIC13ICJIZSgoP2kpbGwpbyIgaGVsbG9fd29ybGQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1HIGludmFsaWRwYXR0ZXJuIHByb3Blcmx5IGRpZXMgJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLUcgImFbIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIGludmFsaWRwYXR0ZXJuIHByb3Blcmx5IGRpZXMgd2l0aCBncmVwLnBhdHRlcm5UeXBlPWJhc2ljJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IC1jIGdyZXAucGF0dGVybnR5cGU9YmFzaWMgZ3JlcCAiYVsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUUgaW52YWxpZHBhdHRlcm4gcHJvcGVybHkgZGllcyAnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZ3JlcCAtRSAiYVsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgaW52YWxpZHBhdHRlcm4gcHJvcGVybHkgZGllcyB3aXRoIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgLWMgZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCBncmVwICJhWyIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMSUJQQ1JFICdncmVwIC1QIGludmFsaWRwYXR0ZXJuIHByb3Blcmx5IGRpZXMgJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLVAgImFbIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIExJQlBDUkUgJ2dyZXAgaW52YWxpZHBhdHRlcm4gcHJvcGVybHkgZGllcyB3aXRoIGdyZXAucGF0dGVyblR5cGU9cGVybCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCAtYyBncmVwLnBhdHRlcm50eXBlPXBlcmwgZ3JlcCAiYVsiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUcgLUUgLUYgcGF0dGVybicgJworCWVjaG8gImFiOmErYipjIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZ3JlcCAtRyAtRSAtRiAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBwYXR0ZXJuIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1iYXNpYywgPWV4dGVuZGVkLCA9Zml4ZWQnICcKKwllY2hvICJhYjphK2IqYyIgPmV4cGVjdGVkICYmCisJZ2l0IFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1iYXNpYyBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9ZXh0ZW5kZWQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWZpeGVkIFwKKwkJZ3JlcCAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtRSAtRiAtRyBwYXR0ZXJuJyAnCisJZWNobyAiYWI6YStiYyIgPmV4cGVjdGVkICYmCisJZ2l0IGdyZXAgLUUgLUYgLUcgImErYipjIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgcGF0dGVybiB3aXRoIGdyZXAucGF0dGVyblR5cGU9ZXh0ZW5kZWQsID1maXhlZCwgPWJhc2ljJyAnCisJZWNobyAiYWI6YStiYyIgPmV4cGVjdGVkICYmCisJZ2l0IFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWJhc2ljIFwKKwkJZ3JlcCAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtRiAtRyAtRSBwYXR0ZXJuJyAnCisJZWNobyAiYWI6YWJjIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgZ3JlcCAtRiAtRyAtRSAiYStiKmMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBwYXR0ZXJuIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1maXhlZCwgPWJhc2ljLCA9ZXh0ZW5kZWQnICcKKwllY2hvICJhYjphYmMiID5leHBlY3RlZCAmJgorCWdpdCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9Zml4ZWQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWJhc2ljIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1leHRlbmRlZCBcCisJCWdyZXAgImErYipjIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUcgLUYgLVAgLUUgcGF0dGVybicgJworCT5lbXB0eSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBncmVwIC1HIC1GIC1QIC1FICJhXHh7MmJ9Ylx4ezJhfWMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCBwYXR0ZXJuIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1maXhlZCwgPWJhc2ljLCA9cGVybCwgPWV4dGVuZGVkJyAnCisJPmVtcHR5ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1maXhlZCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9YmFzaWMgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPXBlcmwgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWV4dGVuZGVkIFwKKwkJZ3JlcCAiYVx4ezJifWJceHsyYX1jIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZW1wdHkgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRSAnZ3JlcCAtRyAtRiAtRSAtUCBwYXR0ZXJuJyAnCisJZWNobyAiYWI6YStiKmMiID5leHBlY3RlZCAmJgorCWdpdCBncmVwIC1HIC1GIC1FIC1QICJhXHh7MmJ9Ylx4ezJhfWMiIGFiID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMSUJQQ1JFICdncmVwIHBhdHRlcm4gd2l0aCBncmVwLnBhdHRlcm5UeXBlPWZpeGVkLCA9YmFzaWMsID1leHRlbmRlZCwgPXBlcmwnICcKKwllY2hvICJhYjphK2IqYyIgPmV4cGVjdGVkICYmCisJZ2l0IFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1maXhlZCBcCisJCS1jIGdyZXAucGF0dGVybnR5cGU9YmFzaWMgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWV4dGVuZGVkIFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1wZXJsIFwKKwkJZ3JlcCAiYVx4ezJifWJceHsyYX1jIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgTElCUENSRSAnZ3JlcCAtUCBwYXR0ZXJuIHdpdGggZ3JlcC5wYXR0ZXJuVHlwZT1maXhlZCcgJworCWVjaG8gImFiOmErYipjIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgXAorCQktYyBncmVwLnBhdHRlcm50eXBlPWZpeGVkIFwKKwkJZ3JlcCAtUCAiYVx4ezJifWJceHsyYX1jIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUYgcGF0dGVybiB3aXRoIGdyZXAucGF0dGVyblR5cGU9YmFzaWMnICcKKwllY2hvICJhYjphK2IqYyIgPmV4cGVjdGVkICYmCisJZ2l0IFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1iYXNpYyBcCisJCWdyZXAgLUYgIipjIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLUcgcGF0dGVybiB3aXRoIGdyZXAucGF0dGVyblR5cGU9Zml4ZWQnICcKKwl7CisJCWVjaG8gImFiOmErYipjIgorCQllY2hvICJhYjphK2JjIgorCX0gPmV4cGVjdGVkICYmCisJZ2l0IFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1maXhlZCBcCisJCWdyZXAgLUcgImErYiIgYWIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC1FIHBhdHRlcm4gd2l0aCBncmVwLnBhdHRlcm5UeXBlPWZpeGVkJyAnCisJeworCQllY2hvICJhYjphK2IqYyIKKwkJZWNobyAiYWI6YStiYyIKKwkJZWNobyAiYWI6YWJjIgorCX0gPmV4cGVjdGVkICYmCisJZ2l0IFwKKwkJLWMgZ3JlcC5wYXR0ZXJudHlwZT1maXhlZCBcCisJCWdyZXAgLUUgImErIiBhYiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2hlbGxvLmM8UkVEPjo8UkVTRVQ+aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoraGVsbG8uYzxSRUQ+LTxSRVNFVD57Cis8UkVEPi0tPFJFU0VUPgoraGVsbG8uYzxSRUQ+OjxSRVNFVD4JLyogY2hhciA/PyAqLworaGVsbG8uYzxSRUQ+LTxSRVNFVD59Cis8UkVEPi0tPFJFU0VUPgoraGVsbG9fd29ybGQ8UkVEPjo8UkVTRVQ+SGVsbG9fd29ybGQKK2hlbGxvX3dvcmxkPFJFRD4tPFJFU0VUPkhlTExvX3dvcmxkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLWNvbG9yLCBzZXBhcmF0b3InICcKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmNvbnRleHQJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuZmlsZW5hbWUJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuZnVuY3Rpb24JCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAubGluZW51bWJlcglub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLm1hdGNoCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLnNlbGVjdGVkCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLnNlcGFyYXRvcglyZWQgJiYKKworCWdpdCBncmVwIC0tY29sb3I9YWx3YXlzIC1BMSAtZSBjaGFyIC1lIGxvX3cgaGVsbG8uYyBoZWxsb193b3JsZCB8CisJdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitoZWxsby5jOmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK2hlbGxvLmM6CS8qIGNoYXIgPz8gKi8KKworaGVsbG9fd29ybGQ6SGVsbG9fd29ybGQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tYnJlYWsnICcKKwlnaXQgZ3JlcCAtLWJyZWFrIC1lIGNoYXIgLWUgbG9fdyBoZWxsby5jIGhlbGxvX3dvcmxkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYzppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitoZWxsby5jLXsKKy0tCitoZWxsby5jOgkvKiBjaGFyID8/ICovCitoZWxsby5jLX0KKworaGVsbG9fd29ybGQ6SGVsbG9fd29ybGQKK2hlbGxvX3dvcmxkLUhlTExvX3dvcmxkCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ3JlcCAtLWJyZWFrIHdpdGggY29udGV4dCcgJworCWdpdCBncmVwIC0tYnJlYWsgLUExIC1lIGNoYXIgLWUgbG9fdyBoZWxsby5jIGhlbGxvX3dvcmxkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQorCS8qIGNoYXIgPz8gKi8KK2hlbGxvX3dvcmxkCitIZWxsb193b3JsZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1oZWFkaW5nJyAnCisJZ2l0IGdyZXAgLS1oZWFkaW5nIC1lIGNoYXIgLWUgbG9fdyBoZWxsby5jIGhlbGxvX3dvcmxkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorPEJPTEQ7R1JFRU4+aGVsbG8uYzxSRVNFVD4KKzI6aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IDxCTEFDSztCWUVMTE9XPmNoYXI8UkVTRVQ+ICoqYXJndikKKzY6CS8qIDxCTEFDSztCWUVMTE9XPmNoYXI8UkVTRVQ+ID8/ICovCisKKzxCT0xEO0dSRUVOPmhlbGxvX3dvcmxkPFJFU0VUPgorMzpIZWw8QkxBQ0s7QllFTExPVz5sb193PFJFU0VUPm9ybGQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaW1pYyBhY2stZ3JlcCAtLWdyb3VwJyAnCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5jb250ZXh0CQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZpbGVuYW1lCQkiYm9sZCBncmVlbiIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZ1bmN0aW9uCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmxpbmVudW1iZXIJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5tYXRjaAkJImJsYWNrIHllbGxvdyIgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLnNlbGVjdGVkCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLnNlcGFyYXRvcglub3JtYWwgJiYKKworCWdpdCBncmVwIC0tYnJlYWsgLS1oZWFkaW5nIC1uIC0tY29sb3IgXAorCQktZSBjaGFyIC1lIGxvX3cgaGVsbG8uYyBoZWxsb193b3JsZCB8CisJdGVzdF9kZWNvZGVfY29sb3IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitzcGFjZTogbGluZSB3aXRoIGxlYWRpbmcgc3BhY2UxCitzcGFjZTogbGluZSB3aXRoIGxlYWRpbmcgc3BhY2UyCitzcGFjZTogbGluZSB3aXRoIGxlYWRpbmcgc3BhY2UzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMSUJQQ1JFICdncmVwIC1FICJeICInICcKKwlnaXQgZ3JlcCAtRSAiXiAiIHNwYWNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBMSUJQQ1JFICdncmVwIC1QICJeICInICcKKwlnaXQgZ3JlcCAtUCAiXiAiIHNwYWNlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorc3BhY2UtbGluZSB3aXRob3V0IGxlYWRpbmcgc3BhY2UxCitzcGFjZTogbGluZSA8UkVEPndpdGggPFJFU0VUPmxlYWRpbmcgc3BhY2UxCitzcGFjZTogbGluZSA8UkVEPndpdGggPFJFU0VUPmxlYWRpbmcgPFJFRD5zcGFjZTI8UkVTRVQ+CitzcGFjZTogbGluZSA8UkVEPndpdGggPFJFU0VUPmxlYWRpbmcgc3BhY2UzCitzcGFjZTpsaW5lIHdpdGhvdXQgbGVhZGluZyA8UkVEPnNwYWNlMjxSRVNFVD4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tY29sb3IgLWUgQSAtZSBCIHdpdGggY29udGV4dCcgJworCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuY29udGV4dAkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5maWxlbmFtZQkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5mdW5jdGlvbgkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5saW5lbnVtYmVyCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAubWF0Y2hDb250ZXh0CW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAubWF0Y2hTZWxlY3RlZAlyZWQgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLnNlbGVjdGVkCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLnNlcGFyYXRvcglub3JtYWwgJiYKKworCWdpdCBncmVwIC0tY29sb3I9YWx3YXlzIC1DMiAtZSAid2l0aCAiIC1lIHNwYWNlMiAgc3BhY2UgfAorCXRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorc3BhY2UtbGluZSB3aXRob3V0IGxlYWRpbmcgc3BhY2UxCitzcGFjZS0gbGluZSB3aXRoIGxlYWRpbmcgc3BhY2UxCitzcGFjZTogbGluZSA8UkVEPndpdGggPFJFU0VUPmxlYWRpbmcgPFJFRD5zcGFjZTI8UkVTRVQ+CitzcGFjZS0gbGluZSB3aXRoIGxlYWRpbmcgc3BhY2UzCitzcGFjZS1saW5lIHdpdGhvdXQgbGVhZGluZyBzcGFjZTIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tY29sb3IgLWUgQSAtLWFuZCAtZSBCIHdpdGggY29udGV4dCcgJworCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuY29udGV4dAkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5maWxlbmFtZQkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5mdW5jdGlvbgkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5saW5lbnVtYmVyCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAubWF0Y2hDb250ZXh0CW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAubWF0Y2hTZWxlY3RlZAlyZWQgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLnNlbGVjdGVkCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLnNlcGFyYXRvcglub3JtYWwgJiYKKworCWdpdCBncmVwIC0tY29sb3I9YWx3YXlzIC1DMiAtZSAid2l0aCAiIC0tYW5kIC1lIHNwYWNlMiAgc3BhY2UgfAorCXRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorc3BhY2UtbGluZSB3aXRob3V0IGxlYWRpbmcgc3BhY2UxCitzcGFjZTogbGluZSA8UkVEPndpdGggPFJFU0VUPmxlYWRpbmcgc3BhY2UxCitzcGFjZS0gbGluZSB3aXRoIGxlYWRpbmcgc3BhY2UyCitzcGFjZTogbGluZSA8UkVEPndpdGggPFJFU0VUPmxlYWRpbmcgc3BhY2UzCitzcGFjZS1saW5lIHdpdGhvdXQgbGVhZGluZyBzcGFjZTIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdncmVwIC0tY29sb3IgLWUgQSAtLWFuZCAtLW5vdCAtZSBCIHdpdGggY29udGV4dCcgJworCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuY29udGV4dAkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5maWxlbmFtZQkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5mdW5jdGlvbgkJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5saW5lbnVtYmVyCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAubWF0Y2hDb250ZXh0CW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAubWF0Y2hTZWxlY3RlZAlyZWQgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLnNlbGVjdGVkCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLnNlcGFyYXRvcglub3JtYWwgJiYKKworCWdpdCBncmVwIC0tY29sb3I9YWx3YXlzIC1DMiAtZSAid2l0aCAiIC0tYW5kIC0tbm90IC1lIHNwYWNlMiAgc3BhY2UgfAorCXRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgoraGVsbG8uYy0jaW5jbHVkZSA8c3RkaW8uaD4KK2hlbGxvLmM9aW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoraGVsbG8uYy17CitoZWxsby5jOglwcjxSRUQ+aW50PFJFU0VUPmYoIjxSRUQ+SGVsbG88UkVTRVQ+IHdvcmxkLlxuIik7CitoZWxsby5jLQlyZXR1cm4gMDsKK2hlbGxvLmMtCS8qIGNoYXIgPz8gKi8KK2hlbGxvLmMtfQorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dyZXAgLS1jb2xvciAtZSBBIC0tYW5kIC1lIEIgLXAgd2l0aCBjb250ZXh0JyAnCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5jb250ZXh0CQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZpbGVuYW1lCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmZ1bmN0aW9uCQlub3JtYWwgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwLmxpbmVudW1iZXIJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5tYXRjaENvbnRleHQJbm9ybWFsICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5tYXRjaFNlbGVjdGVkCXJlZCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VsZWN0ZWQJCW5vcm1hbCAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuc2VwYXJhdG9yCW5vcm1hbCAmJgorCisJZ2l0IGdyZXAgLS1jb2xvcj1hbHdheXMgLXAgLUMzIC1lIGludCAtLWFuZCAtZSBIZWxsbyAtLW5vLWluZGV4IGhlbGxvLmMgfAorCXRlc3RfZGVjb2RlX2NvbG9yID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q3ODExLWdyZXAtb3Blbi5zaCBiL3QvdDc4MTEtZ3JlcC1vcGVuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUxOTUxYTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q3ODExLWdyZXAtb3Blbi5zaApAQCAtMCwwICsxLDE2MyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBncmVwIC0tb3Blbi1maWxlcy1pbi1wYWdlcgorJworCisuIC4vdGVzdC1saWIuc2gKKy4gIiRURVNUX0RJUkVDVE9SWSIvbGliLXBhZ2VyLnNoCit1bnNldCBQQUdFUiBHSVRfUEFHRVIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAnICcKKwl0ZXN0X2NvbW1pdCBpbml0aWFsIGdyZXAuaCAiCitlbnVtIGdyZXBfcGF0X3Rva2VuIHsKKwlHUkVQX1BBVFRFUk4sCisJR1JFUF9QQVRURVJOX0hFQUQsCisJR1JFUF9QQVRURVJOX0JPRFksCisJR1JFUF9BTkQsCisJR1JFUF9PUEVOX1BBUkVOLAorCUdSRVBfQ0xPU0VfUEFSRU4sCisJR1JFUF9OT1QsCisJR1JFUF9PUiwKK307IiAmJgorCisJdGVzdF9jb21taXQgYWRkLXVzZXIgcmV2aXNpb24uYyAiCisJfQorCWlmIChzZWVuX2Rhc2hkYXNoKQorCQlyZWFkX3BhdGhzcGVjX2Zyb21fc3RkaW4ocmV2cywgJnNiLCBwcnVuZSk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKK30KKworc3RhdGljIHZvaWQgYWRkX2dyZXAoc3RydWN0IHJldl9pbmZvICpyZXZzLCBjb25zdCBjaGFyICpwdG4sIGVudW0gZ3JlcF9wYXRfdG9rZW4gd2hhdCkKK3sKKwlhcHBlbmRfZ3JlcF9wYXR0ZXJuKCZyZXZzLT5ncmVwX2ZpbHRlciwgcHRuLCBcImNvbW1hbmQgbGluZVwiLCAwLCB3aGF0KTsKKyIgJiYKKworCW1rZGlyIHN1YmRpciAmJgorCXRlc3RfY29tbWl0IHN1YmRpciBzdWJkaXIvZ3JlcC5jICJlbnVtIGdyZXBfcGF0X3Rva2VuIiAmJgorCisJdGVzdF9jb21taXQgdW5pbnRlcmVzdGluZyB1bnJlbGF0ZWQgImhlbGxvLCB3b3JsZCIgJiYKKworCWVjaG8gR1JFUF9QQVRURVJOID51bnRyYWNrZWQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTSU1QTEVQQUdFUiAnZ2l0IGdyZXAgLU8nICcKKwljYXQgPiRsZXNzIDw8LVxFT0YgJiYKKwkjIS9iaW4vc2gKKwlwcmludGYgIiVzXG4iICIkQCIgPnBhZ2VyLWFyZ3MKKwlFT0YKKwljaG1vZCAreCAkbGVzcyAmJgorCWNhdCA+ZXhwZWN0Lmxlc3MgPDwtXEVPRiAmJgorCSsvKkdSRVBfUEFUVEVSTgorCWdyZXAuaAorCUVPRgorCWVjaG8gZ3JlcC5oID5leHBlY3Qubm90bGVzcyAmJgorCT5lbXB0eSAmJgorCisJUEFUSD0uOiRQQVRIIGdpdCBncmVwIC1PIEdSRVBfUEFUVEVSTiA+b3V0ICYmCisJeworCQl0ZXN0X2NtcCBleHBlY3QubGVzcyBwYWdlci1hcmdzIHx8CisJCXRlc3RfY21wIGV4cGVjdC5ub3RsZXNzIHBhZ2VyLWFyZ3MKKwl9ICYmCisJdGVzdF9jbXAgZW1wdHkgb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1PIC0tY2FjaGVkJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGdyZXAgLS1jYWNoZWQgLU8gR1JFUF9QQVRURVJOID5vdXQgMj5tc2cgJiYKKwl0ZXN0X2kxOG5ncmVwIG9wZW4tZmlsZXMtaW4tcGFnZXIgbXNnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBncmVwIC1PIC0tbm8taW5kZXgnICcKKwlybSAtZiBleHBlY3QubGVzcyBwYWdlci1hcmdzIG91dCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlncmVwLmgKKwl1bnRyYWNrZWQKKwlFT0YKKwk+ZW1wdHkgJiYKKworCSgKKwkJR0lUX1BBR0VSPSdcJydwcmludGYgIiVzXG4iID5wYWdlci1hcmdzJ1wnJyAmJgorCQlleHBvcnQgR0lUX1BBR0VSICYmCisJCWdpdCBncmVwIC0tbm8taW5kZXggLU8gR1JFUF9QQVRURVJOID5vdXQKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0IHBhZ2VyLWFyZ3MgJiYKKwl0ZXN0X2NtcCBlbXB0eSBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXA6IGZha2UgImxlc3MiJyAnCisJY2F0ID5sZXNzIDw8LVxFT0YgJiYKKwkjIS9iaW4vc2gKKwlwcmludGYgIiVzXG4iICIkQCIgPmFjdHVhbAorCUVPRgorCWNobW9kICt4IGxlc3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IGdyZXAgLU8ganVtcHMgdG8gbGluZSBpbiBsZXNzJyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCSsvKkdSRVBfUEFUVEVSTgorCWdyZXAuaAorCUVPRgorCT5lbXB0eSAmJgorCisJR0lUX1BBR0VSPS4vbGVzcyBnaXQgZ3JlcCAtTyBHUkVQX1BBVFRFUk4gPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBvdXQgJiYKKworCWdpdCBncmVwIC1PLi9sZXNzIEdSRVBfUEFUVEVSTiA+b3V0MiAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBvdXQyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21vZGlmaWVkIGZpbGUnICcKKwlybSAtZiBhY3R1YWwgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJKy8qZW51bSBncmVwX3BhdF90b2tlbgorCWdyZXAuaAorCXJldmlzaW9uLmMKKwlzdWJkaXIvZ3JlcC5jCisJdW5yZWxhdGVkCisJRU9GCisJPmVtcHR5ICYmCisKKwllY2hvICJlbnVtIGdyZXBfcGF0X3Rva2VuIiA+dW5yZWxhdGVkICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgSEVBRCB1bnJlbGF0ZWQiICYmCisJR0lUX1BBR0VSPS4vbGVzcyBnaXQgZ3JlcCAtRiAtTyAiZW51bSBncmVwX3BhdF90b2tlbiIgPm91dCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29wZXMgd2l0aCBjb2xvciBzZXR0aW5ncycgJworCXJtIC1mIGFjdHVhbCAmJgorCWVjaG8gZ3JlcC5oID5leHBlY3QgJiYKKwl0ZXN0X2NvbmZpZyBjb2xvci5ncmVwIGFsd2F5cyAmJgorCXRlc3RfY29uZmlnIGNvbG9yLmdyZXAuZmlsZW5hbWUgeWVsbG93ICYmCisJdGVzdF9jb25maWcgY29sb3IuZ3JlcC5zZXBhcmF0b3IgZ3JlZW4gJiYKKwlnaXQgZ3JlcCAtTydcJydwcmludGYgIiVzXG4iID5hY3R1YWwnXCcnIEdSRVBfQU5EICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdydW4gZnJvbSBzdWJkaXInICcKKwlybSAtZiBhY3R1YWwgJiYKKwllY2hvIGdyZXAuYyA+ZXhwZWN0ICYmCisJPmVtcHR5ICYmCisKKwkoCisJCWNkIHN1YmRpciAmJgorCQlleHBvcnQgR0lUX1BBR0VSICYmCisJCUdJVF9QQUdFUj0nXCcncHJpbnRmICIlc1xuIiA+Li4vYXJncydcJycgJiYKKwkJZ2l0IGdyZXAgLU8gImVudW0gZ3JlcF9wYXRfdG9rZW4iID4uLi9vdXQgJiYKKwkJZ2l0IGdyZXAgLU8icHdkID4uLi9kaXI7IDoiICJlbnVtIGdyZXBfcGF0X3Rva2VuIiA+Li4vb3V0MgorCSkgJiYKKwljYXNlICQoY2F0IGRpcikgaW4KKwkqc3ViZGlyKQorCQk6IGdvb2QKKwkJOzsKKwkqKQorCQlmYWxzZQorCQk7OworCWVzYWMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYXJncyAmJgorCXRlc3RfY21wIGVtcHR5IG91dCAmJgorCXRlc3RfY21wIGVtcHR5IG91dDIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q4MDAxLWFubm90YXRlLnNoIGIvdC90ODAwMS1hbm5vdGF0ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjE3NmU0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwMS1hbm5vdGF0ZS5zaApAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGFubm90YXRlJworLiAuL3Rlc3QtbGliLnNoCisKK1BST0c9J2dpdCBhbm5vdGF0ZScKKy4gIiRURVNUX0RJUkVDVE9SWSIvYW5ub3RhdGUtdGVzdHMuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5ub3RhdGUgb2xkIHJldmlzaW9uJyAnCisJZ2l0IGFubm90YXRlIGZpbGUgbWFzdGVyID5hY3R1YWwgJiYKKwlhd2sgInsgcHJpbnQgXCQzOyB9IiA8YWN0dWFsID5hdXRob3JzICYmCisJdGVzdCAyID0gJChncmVwIEEgPGF1dGhvcnMgfCB3YyAtbCkgJiYKKwl0ZXN0IDIgPSAkKGdyZXAgQiA8YXV0aG9ycyB8IHdjIC1sKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDgwMDItYmxhbWUuc2ggYi90L3Q4MDAyLWJsYW1lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZmMDlhY2UKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q4MDAyLWJsYW1lLnNoCkBAIC0wLDAgKzEsODQgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYmxhbWUnCisuIC4vdGVzdC1saWIuc2gKKworUFJPRz0nZ2l0IGJsYW1lIC1jJworLiAiJFRFU1RfRElSRUNUT1JZIi9hbm5vdGF0ZS10ZXN0cy5zaAorCitQUk9HPSdnaXQgYmxhbWUgLWMgLWUnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtLXNob3ctZW1haWwnICcKKwljaGVja19jb3VudCBcCisJCSI8QUB0ZXN0LmdpdD4iIDEgXAorCQkiPEJAdGVzdC5naXQ+IiAxIFwKKwkJIjxCMUB0ZXN0LmdpdD4iIDEgXAorCQkiPEIyQHRlc3QuZ2l0PiIgMSBcCisJCSI8YXV0aG9yQGV4YW1wbGUuY29tPiIgMSBcCisJCSI8Q0B0ZXN0LmdpdD4iIDEgXAorCQkiPERAdGVzdC5naXQ+IiAxIFwKKwkJIjxFIGF0IHRlc3QgZG90IGdpdD4iIDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2hvd0VtYWlsIHRlc3RzJyAnCisJZWNobyAiYmluOiB0ZXN0IG51bWJlciAxIiA+b25lICYmCisJZ2l0IGFkZCBvbmUgJiYKKwlHSVRfQVVUSE9SX05BTUU9bmFtZTEgXAorCUdJVF9BVVRIT1JfRU1BSUw9ZW1haWwxQHRlc3QuZ2l0IFwKKwlnaXQgY29tbWl0IC1tIEZpcnN0IC0tZGF0ZT0iMjAxMC0wMS0wMSAwMTowMDowMCIgJiYKKwljYXQgPmV4cGVjdGVkX24gPDwtXEVPRiAmJgorCShuYW1lMSAyMDEwLTAxLTAxIDAxOjAwOjAwICswMDAwIDEpIGJpbjogdGVzdCBudW1iZXIgMQorCUVPRgorCWNhdCA+ZXhwZWN0ZWRfZSA8PC1cRU9GCisJKDxlbWFpbDFAdGVzdC5naXQ+IDIwMTAtMDEtMDEgMDE6MDA6MDAgKzAwMDAgMSkgYmluOiB0ZXN0IG51bWJlciAxCisJRU9GCisnCisKK2ZpbmRfYmxhbWUgKCkgeworCXNlZCAtZSAncy9eW14oXSovLycKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgd2l0aCBubyBvcHRpb25zIGFuZCBubyBjb25maWcnICcKKwlnaXQgYmxhbWUgb25lID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgPGJsYW1lID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9uIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSB3aXRoIHNob3dlbWFpbCBvcHRpb25zJyAnCisJZ2l0IGJsYW1lIC0tc2hvdy1lbWFpbCBvbmUgPmJsYW1lMSAmJgorCWZpbmRfYmxhbWUgPGJsYW1lMSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfZSByZXN1bHQgJiYKKwlnaXQgYmxhbWUgLWUgb25lID5ibGFtZTIgJiYKKwlmaW5kX2JsYW1lIDxibGFtZTIgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2UgcmVzdWx0ICYmCisJZ2l0IGJsYW1lIC0tbm8tc2hvdy1lbWFpbCBvbmUgPmJsYW1lMyAmJgorCWZpbmRfYmxhbWUgPGJsYW1lMyA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfbiByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgd2l0aCBzaG93RW1haWwgY29uZmlnIGZhbHNlJyAnCisJZ2l0IGNvbmZpZyBibGFtZS5zaG93RW1haWwgZmFsc2UgJiYKKwlnaXQgYmxhbWUgb25lID5ibGFtZTEgJiYKKwlmaW5kX2JsYW1lIDxibGFtZTEgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX24gcmVzdWx0ICYmCisJZ2l0IGJsYW1lIC0tc2hvdy1lbWFpbCBvbmUgPmJsYW1lMiAmJgorCWZpbmRfYmxhbWUgPGJsYW1lMiA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfZSByZXN1bHQgJiYKKwlnaXQgYmxhbWUgLWUgb25lID5ibGFtZTMgJiYKKwlmaW5kX2JsYW1lIDxibGFtZTMgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX2UgcmVzdWx0ICYmCisJZ2l0IGJsYW1lIC0tbm8tc2hvdy1lbWFpbCBvbmUgPmJsYW1lNCAmJgorCWZpbmRfYmxhbWUgPGJsYW1lNCA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWRfbiByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgd2l0aCBzaG93RW1haWwgY29uZmlnIHRydWUnICcKKwlnaXQgY29uZmlnIGJsYW1lLnNob3dFbWFpbCB0cnVlICYmCisJZ2l0IGJsYW1lIG9uZSA+YmxhbWUxICYmCisJZmluZF9ibGFtZSA8YmxhbWUxID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZF9lIHJlc3VsdCAmJgorCWdpdCBibGFtZSAtLW5vLXNob3ctZW1haWwgb25lID5ibGFtZTIgJiYKKwlmaW5kX2JsYW1lIDxibGFtZTIgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX24gcmVzdWx0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwMy1ibGFtZS1jb3JuZXItY2FzZXMuc2ggYi90L3Q4MDAzLWJsYW1lLWNvcm5lci1jYXNlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xNmYxNDQyCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwMy1ibGFtZS1jb3JuZXItY2FzZXMuc2gKQEAgLTAsMCArMSwyMTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYmxhbWUgY29ybmVyIGNhc2VzJworLiAuL3Rlc3QtbGliLnNoCisKK3BpY2tfZmM9J3MvXlswLTlhLWZeXSogKlwoW14gXSpcKSAqKFwoW14gXSpcKSAuKi9cMS1cMi8nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCisJZWNobyBBIEEgQSBBIEEgPm9uZSAmJgorCWVjaG8gQiBCIEIgQiBCID50d28gJiYKKwllY2hvIEMgQyBDIEMgQyA+dHJlcyAmJgorCWVjaG8gQUJDID5tb3VzZSAmJgorCWZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5CisJZG8KKwkJZWNobyAkaQorCWRvbmUgPm5pbmVfbGluZXMgJiYKKwlmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOSBhCisJZG8KKwkJZWNobyAkaQorCWRvbmUgPnRlbl9saW5lcyAmJgorCWdpdCBhZGQgb25lIHR3byB0cmVzIG1vdXNlIG5pbmVfbGluZXMgdGVuX2xpbmVzICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPUluaXRpYWwgZ2l0IGNvbW1pdCAtbSBJbml0aWFsICYmCisKKwljYXQgb25lID51bm8gJiYKKwltdiB0d28gZG9zICYmCisJY2F0IG9uZSA+PnRyZXMgJiYKKwllY2hvIERFRiA+Pm1vdXNlICYmCisJZ2l0IGFkZCB1bm8gZG9zIHRyZXMgbW91c2UgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9U2Vjb25kIGdpdCBjb21taXQgLWEgLW0gU2Vjb25kICYmCisKKwllY2hvIEdISUpLID4+bW91c2UgJiYKKwlnaXQgYWRkIG1vdXNlICYmCisJdGVzdF90aWNrICYmCisJR0lUX0FVVEhPUl9OQU1FPVRoaXJkIGdpdCBjb21taXQgLW0gVGhpcmQgJiYKKworCWNhdCBtb3VzZSA+Y293ICYmCisJZ2l0IGFkZCBjb3cgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9Rm91cnRoIGdpdCBjb21taXQgLW0gRm91cnRoICYmCisKKwl7CisJCWVjaG8gQUJDCisJCWVjaG8gREVGCisJCWVjaG8gWFhYWAorCQllY2hvIEdISUpLCisJfSA+Y293ICYmCisJZ2l0IGFkZCBjb3cgJiYKKwl0ZXN0X3RpY2sgJiYKKwlHSVRfQVVUSE9SX05BTUU9RmlmdGggZ2l0IGNvbW1pdCAtbSBGaWZ0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJhaWdodCBjb3B5IHdpdGhvdXQgLUMnICcKKworCWdpdCBibGFtZSB1bm8gfCBncmVwIFNlY29uZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmFpZ2h0IG1vdmUgd2l0aG91dCAtQycgJworCisJZ2l0IGJsYW1lIGRvcyB8IGdyZXAgSW5pdGlhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmFpZ2h0IGNvcHkgd2l0aCAtQycgJworCisJZ2l0IGJsYW1lIC1DMSB1bm8gfCBncmVwIFNlY29uZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0cmFpZ2h0IG1vdmUgd2l0aCAtQycgJworCisJZ2l0IGJsYW1lIC1DMSBkb3MgfCBncmVwIEluaXRpYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJhaWdodCBjb3B5IHdpdGggLUMgLUMnICcKKworCWdpdCBibGFtZSAtQyAtQzEgdW5vIHwgZ3JlcCBJbml0aWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyYWlnaHQgbW92ZSB3aXRoIC1DIC1DJyAnCisKKwlnaXQgYmxhbWUgLUMgLUMxIGRvcyB8IGdyZXAgSW5pdGlhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZCB3aXRob3V0IC1DJyAnCisKKwlnaXQgYmxhbWUgLUwyIHRyZXMgfCBncmVwIFNlY29uZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FwcGVuZCB3aXRoIC1DJyAnCisKKwlnaXQgYmxhbWUgLUwyIC1DMSB0cmVzIHwgZ3JlcCBTZWNvbmQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhcHBlbmQgd2l0aCAtQyAtQycgJworCisJZ2l0IGJsYW1lIC1MMiAtQyAtQzEgdHJlcyB8IGdyZXAgU2Vjb25kCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwZW5kIHdpdGggLUMgLUMgLUMnICcKKworCWdpdCBibGFtZSAtTDIgLUMgLUMgLUMxIHRyZXMgfCBncmVwIEluaXRpYWwKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSB3aG9sZXNhbGUgY29weScgJworCisJZ2l0IGJsYW1lIC1mIC1DIC1DMSBIRUFEXiAtLSBjb3cgfCBzZWQgLWUgIiRwaWNrX2ZjIiA+Y3VycmVudCAmJgorCXsKKwkJZWNobyBtb3VzZS1Jbml0aWFsCisJCWVjaG8gbW91c2UtU2Vjb25kCisJCWVjaG8gbW91c2UtVGhpcmQKKwl9ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSB3aG9sZXNhbGUgY29weSBhbmQgbW9yZScgJworCisJZ2l0IGJsYW1lIC1mIC1DIC1DMSBIRUFEIC0tIGNvdyB8IHNlZCAtZSAiJHBpY2tfZmMiID5jdXJyZW50ICYmCisJeworCQllY2hvIG1vdXNlLUluaXRpYWwKKwkJZWNobyBtb3VzZS1TZWNvbmQKKwkJZWNobyBjb3ctRmlmdGgKKwkJZWNobyBtb3VzZS1UaGlyZAorCX0gPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgY3VycmVudAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIHBhdGggdGhhdCB1c2VkIHRvIGJlIGEgZGlyZWN0b3J5JyAnCisJbWtkaXIgcGF0aCAmJgorCWVjaG8gQSBBIEEgQSBBID5wYXRoL2ZpbGUgJiYKKwllY2hvIEIgQiBCIEIgQiA+cGF0aC9lbGlmICYmCisJZ2l0IGFkZCBwYXRoICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSAicGF0aCB3YXMgYSBkaXJlY3RvcnkiICYmCisJcm0gLWZyIHBhdGggJiYKKwllY2hvIEEgQSBBIEEgQSA+cGF0aCAmJgorCWdpdCBhZGQgcGF0aCAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gInBhdGggaXMgYSByZWd1bGFyIGZpbGUiICYmCisJZ2l0IGJsYW1lIEhFQUReLi4gLS0gcGF0aAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSB0byBhIGNvbW1pdCB3aXRoIG5vIGF1dGhvciBuYW1lJyAnCisgIFRSRUU9YGdpdCByZXYtcGFyc2UgSEVBRDpgICYmCisgIGNhdCA+YmFkY29tbWl0IDw8RU9GICYmCit0cmVlICRUUkVFCithdXRob3IgPG5vbmFtZT4gMTIzNDU2Nzg5MCArMDAwMAorY29tbWl0dGVyIERhdmlkIFJlaXNzIDxkcmVpc3NAZmFjZWJvb2suY29tPiAxMjM0NTY3ODkwICswMDAwCisKK3NvbWUgbWVzc2FnZQorRU9GCisgIENPTU1JVD1gZ2l0IGhhc2gtb2JqZWN0IC10IGNvbW1pdCAtdyBiYWRjb21taXRgICYmCisgIGdpdCAtLW5vLXBhZ2VyIGJsYW1lICRDT01NSVQgLS0gdW5vID4vZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLUwgd2l0aCBpbnZhbGlkIHN0YXJ0JyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJsYW1lIC1MNSB0cmVzIDI+ZXJyb3JzICYmCisJZ3JlcCAiaGFzIG9ubHkgMiBsaW5lcyIgZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC1MIHdpdGggaW52YWxpZCBlbmQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgYmxhbWUgLUwxLDUgdHJlcyAyPmVycm9ycyAmJgorCWdyZXAgImhhcyBvbmx5IDIgbGluZXMiIGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBwYXJzZXMgPGVuZD4gcGFydCBvZiAtTCcgJworCWdpdCBibGFtZSAtTDEsMSB0cmVzID5vdXQgJiYKKwljYXQgb3V0ICYmCisJdGVzdCAkKHdjIC1sIDwgb3V0KSAtZXEgMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmRlbnQgb2YgbGluZSBudW1iZXJzLCBuaW5lIGxpbmVzJyAnCisJZ2l0IGJsYW1lIG5pbmVfbGluZXMgPmFjdHVhbCAmJgorCXRlc3QgJChncmVwIC1jICIgICIgYWN0dWFsKSA9IDAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5kZW50IG9mIGxpbmUgbnVtYmVycywgdGVuIGxpbmVzJyAnCisJZ2l0IGJsYW1lIHRlbl9saW5lcyA+YWN0dWFsICYmCisJdGVzdCAkKGdyZXAgLWMgIiAgIiBhY3R1YWwpID0gOQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmaWxlIHdpdGggQ1JMRiBuZXdsaW5lcycgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCXByaW50ZiAidGVzdGNhc2VcbiIgPmNybGZmaWxlICYmCisJZ2l0IGFkZCBjcmxmZmlsZSAmJgorCWdpdCBjb21taXQgLW0gdGVzdGNhc2UgJiYKKwlwcmludGYgInRlc3RjYXNlXHJcbiIgPmNybGZmaWxlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGZpbGUgd2l0aCBDUkxGIGNvcmUuYXV0b2NybGYgdHJ1ZScgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiB0cnVlICYmCisJZ2l0IGJsYW1lIGNybGZmaWxlID5hY3R1YWwgJiYKKwlncmVwICJBIFUgVGhvciIgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGZpbGUgd2l0aCBDUkxGIGF0dHJpYnV0ZXMgdGV4dCcgJworCWdpdCBjb25maWcgY29yZS5hdXRvY3JsZiBmYWxzZSAmJgorCWVjaG8gImNybGZmaWxlIHRleHQiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBibGFtZSBjcmxmZmlsZSA+YWN0dWFsICYmCisJZ3JlcCAiQSBVIFRob3IiIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDgwMDQtYmxhbWUtd2l0aC1jb25mbGljdHMuc2ggYi90L3Q4MDA0LWJsYW1lLXdpdGgtY29uZmxpY3RzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjljMzUzYWIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q4MDA0LWJsYW1lLXdpdGgtY29uZmxpY3RzLnNoCkBAIC0wLDAgKzEsNzMgQEAKKyMhL2Jpbi9zaAorCisjIEJhc2VkIG9uIGEgdGVzdCBjYXNlIHN1Ym1pdHRlZCBieSBCasO2cm4gU3RlaW5icmluay4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGJsYW1lIG9uIGNvbmZsaWN0ZWQgZmlsZXMnCisuIC4vdGVzdC1saWIuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgZmlyc3QgY2FzZScgJworCSMgQ3JlYXRlIHRoZSBvbGQgZmlsZQorCWVjaG8gIk9sZCBsaW5lIiA+IGZpbGUxICYmCisJZ2l0IGFkZCBmaWxlMSAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIk9sZCBMaW5lIDxvbEBsb2NhbGhvc3Q+IiAtbSBmaWxlMS5hICYmCisKKwkjIEJyYW5jaAorCWdpdCBjaGVja291dCAtYiBmb28gJiYKKworCSMgRG8gYW4gdWdseSBtb3ZlIGFuZCBjaGFuZ2UKKwlnaXQgcm0gZmlsZTEgJiYKKwllY2hvICJOZXcgbGluZSAuLi4iICA+IGZpbGUyICYmCisJZWNobyAiLi4uIGFuZCBtb3JlIiA+PiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJVIEdseSA8dWdAbG9jYWxob3N0PiIgLW0gdWdseSAmJgorCisJIyBCYWNrIHRvIG1hc3RlciBhbmQgY2hhbmdlIHNvbWV0aGluZworCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwllY2hvICIKKworYmxhIiA+PiBmaWxlMSAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIk9sZCBMaW5lIDxvbEBsb2NhbGhvc3Q+IiAtYSAtbSBmaWxlMS5iICYmCisKKwkjIEJhY2sgdG8gZm9vIGFuZCBtZXJnZSBtYXN0ZXIKKwlnaXQgY2hlY2tvdXQgZm9vICYmCisJaWYgZ2l0IG1lcmdlIG1hc3RlcjsgdGhlbgorCQllY2hvIG5lZWRlZCBjb25mbGljdCBoZXJlCisJCWV4aXQgMQorCWVsc2UKKwkJZWNobyBtZXJnZSBmYWlsZWQgLSByZXNvbHZpbmcgYXV0b21hdGljYWxseQorCWZpICYmCisJZWNobyAiTmV3IGxpbmUgLi4uCisuLi4gYW5kIG1vcmUKKworYmxhCitFdmVuIG1vcmUiID4gZmlsZTIgJiYKKwlnaXQgcm0gZmlsZTEgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICJNIFJlc3VsdCA8bXJAbG9jYWxob3N0PiIgLWEgLW0gbWVyZ2VkICYmCisKKwkjIEJhY2sgdG8gbWFzdGVyIGFuZCBjaGFuZ2UgZmlsZTEgYWdhaW4KKwlnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJc2VkIHMvYmxhL2Zvby8gPGZpbGUxID5YICYmCisJcm0gZmlsZTEgJiYKKwltdiBYIGZpbGUxICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAiTm8gQmxhIDxuYkBsb2NhbGhvc3Q+IiAtYSAtbSByZXBsYWNlICYmCisKKwkjIFRyeSB0byBtZXJnZSBpbnRvIGZvbyBhZ2FpbgorCWdpdCBjaGVja291dCBmb28gJiYKKwlpZiBnaXQgbWVyZ2UgbWFzdGVyOyB0aGVuCisJCWVjaG8gbmVlZGVkIGNvbmZsaWN0IGhlcmUKKwkJZXhpdCAxCisJZWxzZQorCQllY2hvIG1lcmdlIGZhaWxlZCAtIHRlc3QgaXMgc2V0dXAKKwlmaQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknYmxhbWUgcnVucyBvbiB1bmNvbmZsaWN0ZWQgZmlsZSB3aGlsZSBvdGhlciBmaWxlIGhhcyBjb25mbGljdHMnICcKKwlnaXQgYmxhbWUgZmlsZTIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgZG9lcyBub3QgY3Jhc2ggd2l0aCBjb25mbGljdGVkIGZpbGUgaW4gc3RhZ2VzIDEsMycgJworCWdpdCBibGFtZSBmaWxlMQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDgwMDUtYmxhbWUtaTE4bi5zaCBiL3QvdDgwMDUtYmxhbWUtaTE4bi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NDdkMDk4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwNS1ibGFtZS1pMThuLnNoCkBAIC0wLDAgKzEsOTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgYmxhbWUgZW5jb2RpbmcgY29udmVyc2lvbicKKy4gLi90ZXN0LWxpYi5zaAorCisuICIkVEVTVF9ESVJFQ1RPUlkiL3Q4MDA1L3V0ZjgudHh0CisuICIkVEVTVF9ESVJFQ1RPUlkiL3Q4MDA1L2V1Yy1qYXBhbi50eHQKKy4gIiRURVNUX0RJUkVDVE9SWSIvdDgwMDUvc2ppcy50eHQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGhlIHJlcG9zaXRvcnknICcKKwkjIENyZWF0ZSB0aGUgZmlsZQorCWVjaG8gIlVURi04IExJTkUiID4gZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLS1hdXRob3IgIiRVVEY4X05BTUUgPHV0ZjhAbG9jYWxob3N0PiIgLW0gIiRVVEY4X01TRyIgJiYKKworCWVjaG8gIkVVQy1KQVBBTiBMSU5FIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIGV1Y0pQICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAiJEVVQ19KQVBBTl9OQU1FIDxldWMtamFwYW5AbG9jYWxob3N0PiIgLW0gIiRFVUNfSkFQQU5fTVNHIiAmJgorCisJZWNobyAiU0pJUyBMSU5FIiA+PiBmaWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIFNKSVMgJiYKKwlnaXQgY29tbWl0IC0tYXV0aG9yICIkU0pJU19OQU1FIDxzamlzQGxvY2FsaG9zdD4iIC1tICIkU0pJU19NU0ciCisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2F1dGhvciAkU0pJU19OQU1FCitzdW1tYXJ5ICRTSklTX01TRworYXV0aG9yICRTSklTX05BTUUKK3N1bW1hcnkgJFNKSVNfTVNHCithdXRob3IgJFNKSVNfTkFNRQorc3VtbWFyeSAkU0pJU19NU0cKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyBcCisJJ2JsYW1lIHJlc3BlY3RzIGkxOG4uY29tbWl0ZW5jb2RpbmcnICcKKwlnaXQgYmxhbWUgLS1pbmNyZW1lbnRhbCBmaWxlIHwgXAorCQllZ3JlcCAiXihhdXRob3J8c3VtbWFyeSkgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCithdXRob3IgJEVVQ19KQVBBTl9OQU1FCitzdW1tYXJ5ICRFVUNfSkFQQU5fTVNHCithdXRob3IgJEVVQ19KQVBBTl9OQU1FCitzdW1tYXJ5ICRFVUNfSkFQQU5fTVNHCithdXRob3IgJEVVQ19KQVBBTl9OQU1FCitzdW1tYXJ5ICRFVUNfSkFQQU5fTVNHCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgXAorCSdibGFtZSByZXNwZWN0cyBpMThuLmxvZ291dHB1dGVuY29kaW5nJyAnCisJZ2l0IGNvbmZpZyBpMThuLmxvZ291dHB1dGVuY29kaW5nIGV1Y0pQICYmCisJZ2l0IGJsYW1lIC0taW5jcmVtZW50YWwgZmlsZSB8IFwKKwkJZWdyZXAgIl4oYXV0aG9yfHN1bW1hcnkpICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorYXV0aG9yICRVVEY4X05BTUUKK3N1bW1hcnkgJFVURjhfTVNHCithdXRob3IgJFVURjhfTkFNRQorc3VtbWFyeSAkVVRGOF9NU0cKK2F1dGhvciAkVVRGOF9OQU1FCitzdW1tYXJ5ICRVVEY4X01TRworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXIFwKKwknYmxhbWUgcmVzcGVjdHMgLS1lbmNvZGluZz1VVEYtOCcgJworCWdpdCBibGFtZSAtLWluY3JlbWVudGFsIC0tZW5jb2Rpbmc9VVRGLTggZmlsZSB8IFwKKwkJZWdyZXAgIl4oYXV0aG9yfHN1bW1hcnkpICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgZXhwZWN0ZWQKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorYXV0aG9yICRTSklTX05BTUUKK3N1bW1hcnkgJFNKSVNfTVNHCithdXRob3IgJEVVQ19KQVBBTl9OQU1FCitzdW1tYXJ5ICRFVUNfSkFQQU5fTVNHCithdXRob3IgJFVURjhfTkFNRQorc3VtbWFyeSAkVVRGOF9NU0cKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyBcCisJJ2JsYW1lIHJlc3BlY3RzIC0tZW5jb2Rpbmc9bm9uZScgJworCWdpdCBibGFtZSAtLWluY3JlbWVudGFsIC0tZW5jb2Rpbmc9bm9uZSBmaWxlIHwgXAorCQllZ3JlcCAiXihhdXRob3J8c3VtbWFyeSkgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBleHBlY3RlZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDgwMDUvZXVjLWphcGFuLnR4dCBiL3QvdDgwMDUvZXVjLWphcGFuLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODhmMDQwCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwNS9ldWMtamFwYW4udHh0CkBAIC0wLDAgKzEsMiBAQAorRVVDX0pBUEFOX05BTUU9IruzxcQgwsDPuiIKK0VVQ19KQVBBTl9NU0c9IqXWpeyhvKXgpM6lxqW5pcikx6S5oaMiCmRpZmYgLS1naXQgYS90L3Q4MDA1L3NqaXMudHh0IGIvdC90ODAwNS9zamlzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmRlZmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwNS9zamlzLnR4dApAQCAtMCwwICsxLDIgQEAKK1NKSVNfTkFNRT0ijlKTYyCRvphZIgorU0pJU19NU0c9IoN1g4yBW4OAgsyDZYNYg2eCxYK3gUIiCmRpZmYgLS1naXQgYS90L3Q4MDA1L3V0ZjgudHh0IGIvdC90ODAwNS91dGY4LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDAwZGJlCi0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwNS91dGY4LnR4dApAQCAtMCwwICsxLDIgQEAKK1VURjhfTkFNRT0i5bGx55SwIOWkqumDjiIKK1VURjhfTVNHPSLjg5bjg6zjg7zjg6Djga7jg4bjgrnjg4jjgafjgZnjgIIiCmRpZmYgLS1naXQgYS90L3Q4MDA2LWJsYW1lLXRleHRjb252LnNoIGIvdC90ODAwNi1ibGFtZS10ZXh0Y29udi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NjgzNTE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90ODAwNi1ibGFtZS10ZXh0Y29udi5zaApAQCAtMCwwICsxLDE1NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBibGFtZSB0ZXh0Y29udiBzdXBwb3J0JworLiAuL3Rlc3QtbGliLnNoCisKK2ZpbmRfYmxhbWUoKSB7CisJc2VkIC1lICdzL15bXihdKi8vJworfQorCitjYXQgPmhlbHBlciA8PCdFT0YnCisjIS9iaW4vc2gKK2dyZXAgLXEgJ15iaW46ICcgIiQxIiB8fCB7IGVjaG8gIkU6ICQxIGlzIG5vdCBcImJpbmFyeVwiIGZpbGUiIDE+JjI7IGV4aXQgMTsgfQorIiRQRVJMX1BBVEgiIC1wIC1lICdzL15iaW46IC9jb252ZXJ0ZWQ6IC8nICIkMSIKK0VPRgorY2htb2QgK3ggaGVscGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwICcgJworCWVjaG8gImJpbjogdGVzdCBudW1iZXIgMCIgPnplcm8uYmluICYmCisJZWNobyAiYmluOiB0ZXN0IDEiID5vbmUuYmluICYmCisJZWNobyAiYmluOiB0ZXN0IG51bWJlciAyIiA+dHdvLmJpbiAmJgorCXRlc3RfbG5fc19hZGQgb25lLmJpbiBzeW1saW5rLmJpbiAmJgorCWdpdCBhZGQgLiAmJgorCUdJVF9BVVRIT1JfTkFNRT1OdW1iZXIxIGdpdCBjb21taXQgLWEgLW0gRmlyc3QgLS1kYXRlPSIyMDEwLTAxLTAxIDE4OjAwOjAwIiAmJgorCWVjaG8gImJpbjogdGVzdCAxIHZlcnNpb24gMiIgPm9uZS5iaW4gJiYKKwllY2hvICJiaW46IHRlc3QgbnVtYmVyIDIgdmVyc2lvbiAyIiA+PnR3by5iaW4gJiYKKwlybSAtZiBzeW1saW5rLmJpbiAmJgorCXRlc3RfbG5fc19hZGQgdHdvLmJpbiBzeW1saW5rLmJpbiAmJgorCUdJVF9BVVRIT1JfTkFNRT1OdW1iZXIyIGdpdCBjb21taXQgLWEgLW0gU2Vjb25kIC0tZGF0ZT0iMjAxMC0wMS0wMSAyMDowMDowMCIKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorKE51bWJlcjIgMjAxMC0wMS0wMSAyMDowMDowMCArMDAwMCAxKSBiaW46IHRlc3QgMSB2ZXJzaW9uIDIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBmaWx0ZXIgc3BlY2lmaWVkJyAnCisJZ2l0IGJsYW1lIG9uZS5iaW4gPmJsYW1lICYmCisJZmluZF9ibGFtZSBOdW1iZXIyIDxibGFtZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRleHRjb252IGZpbHRlcnMnICcKKwllY2hvICIqLmJpbiBkaWZmPXRlc3QiID4uZ2l0YXR0cmlidXRlcyAmJgorCWVjaG8gInplcm8uYmluIGVvbD1jcmxmIiA+Pi5naXRhdHRyaWJ1dGVzICYmCisJZ2l0IGNvbmZpZyBkaWZmLnRlc3QudGV4dGNvbnYgLi9oZWxwZXIgJiYKKwlnaXQgY29uZmlnIGRpZmYudGVzdC5jYWNoZXRleHRjb252IGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIHdpdGggLS1uby10ZXh0Y29udicgJworCWdpdCBibGFtZSAtLW5vLXRleHRjb252IG9uZS5iaW4gPmJsYW1lICYmCisJZmluZF9ibGFtZSA8YmxhbWU+IHJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCisoTnVtYmVyMiAyMDEwLTAxLTAxIDIwOjAwOjAwICswMDAwIDEpIGNvbnZlcnRlZDogdGVzdCAxIHZlcnNpb24gMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIGJsYW1lIG9uIGxhc3QgY29tbWl0JyAnCisJZ2l0IGJsYW1lIG9uZS5iaW4gPmJsYW1lICYmCisJZmluZF9ibGFtZSAgPGJsYW1lID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorKE51bWJlcjEgMjAxMC0wMS0wMSAxODowMDowMCArMDAwMCAxKSBjb252ZXJ0ZWQ6IHRlc3QgbnVtYmVyIDIKKyhOdW1iZXIyIDIwMTAtMDEtMDEgMjA6MDA6MDAgKzAwMDAgMikgY29udmVydGVkOiB0ZXN0IG51bWJlciAyIHZlcnNpb24gMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC0tdGV4dGNvbnYgZ29pbmcgdGhyb3VnaCByZXZpc2lvbnMnICcKKwlnaXQgYmxhbWUgLS10ZXh0Y29udiB0d28uYmluID5ibGFtZSAmJgorCWZpbmRfYmxhbWUgPGJsYW1lID5yZXN1bHQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmxhbWUgLS10ZXh0Y29udiB3aXRoIGxvY2FsIGNoYW5nZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCB6ZXJvLmJpbiIgJiYKKwlwcmludGYgImJpbjogdXBkYXRlZCBudW1iZXIgMFwwMTUiID56ZXJvLmJpbiAmJgorCWdpdCBibGFtZSAtLXRleHRjb252IHplcm8uYmluID5ibGFtZSAmJgorCWV4cGVjdD0iKE5vdCBDb21taXR0ZWQgWWV0IC4uLi4tLi4tLi4gLi46Li46Li4gKzAwMDAgMSkiICYmCisJZXhwZWN0PSIkZXhwZWN0IGNvbnZlcnRlZDogdXBkYXRlZCBudW1iZXIgMCIgJiYKKwlleHByICIkKGZpbmRfYmxhbWUgPGJsYW1lKSIgOiAiXiRleHBlY3QiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwICtjYWNoZXRleHRjb252JyAnCisJZ2l0IGNvbmZpZyBkaWZmLnRlc3QuY2FjaGV0ZXh0Y29udiB0cnVlCisnCisKK2NhdCA+ZXhwZWN0ZWRfb25lIDw8RU9GCisoTnVtYmVyMiAyMDEwLTAxLTAxIDIwOjAwOjAwICswMDAwIDEpIGNvbnZlcnRlZDogdGVzdCAxIHZlcnNpb24gMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC0tdGV4dGNvbnYgd29ya3Mgd2l0aCB0ZXh0Y29udmNhY2hlJyAnCisJZ2l0IGJsYW1lIC0tdGV4dGNvbnYgdHdvLmJpbiA+YmxhbWUgJiYKKwlmaW5kX2JsYW1lIDxibGFtZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0ICYmCisJZ2l0IGJsYW1lIC0tdGV4dGNvbnYgb25lLmJpbiA+YmxhbWUgJiYKKwlmaW5kX2JsYW1lICA8YmxhbWUgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkX29uZSByZXN1bHQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgLWNhY2hldGV4dGNvbnYnICcKKwlnaXQgY29uZmlnIGRpZmYudGVzdC5jYWNoZXRleHRjb252IGZhbHNlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgYSBuZXcgY29tbWl0JyAnCisJZWNobyAiYmluOiB0ZXN0IG51bWJlciAyIHZlcnNpb24gMyIgPj50d28uYmluICYmCisJR0lUX0FVVEhPUl9OQU1FPU51bWJlcjMgZ2l0IGNvbW1pdCAtYSAtbSBUaGlyZCAtLWRhdGU9IjIwMTAtMDEtMDEgMjI6MDA6MDAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIGZyb20gcHJldmlvdXMgcmV2aXNpb24nICcKKwlnaXQgYmxhbWUgSEVBRF4gdHdvLmJpbiA+YmxhbWUgJiYKKwlmaW5kX2JsYW1lIDxibGFtZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKKyhOdW1iZXIyIDIwMTAtMDEtMDEgMjA6MDA6MDAgKzAwMDAgMSkgdHdvLmJpbgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2JsYW1lIHdpdGggLS1uby10ZXh0Y29udiAob24gc3ltbGluayknICcKKwlnaXQgYmxhbWUgLS1uby10ZXh0Y29udiBzeW1saW5rLmJpbiA+YmxhbWUgJiYKKwlmaW5kX2JsYW1lIDxibGFtZSA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2JsYW1lIC0tdGV4dGNvbnYgKG9uIHN5bWxpbmspJyAnCisJZ2l0IGJsYW1lIC0tdGV4dGNvbnYgc3ltbGluay5iaW4gPmJsYW1lICYmCisJZmluZF9ibGFtZSA8YmxhbWUgPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCisjIGNwIHR3by5iaW4gdGhyZWUuYmluICBhbmQgbWFrZSBzbWFsbCB0d2VhaworIyAodGhpcyB3aWxsIGRpcmVjdCBibGFtZSAtQyAtQyB0aHJlZS5iaW4gdG8gY29uc2lkZXIgdHdvLmJpbiBhbmQgc3ltbGluay5iaW4pCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGFub3RoZXIgbmV3IGNvbW1pdCcgJworCWNhdCA+dGhyZWUuYmluIDw8XEVPRiAmJgorYmluOiB0ZXN0IG51bWJlciAyCitiaW46IHRlc3QgbnVtYmVyIDIgdmVyc2lvbiAyCitiaW46IHRlc3QgbnVtYmVyIDIgdmVyc2lvbiAzCitiaW46IHRlc3QgbnVtYmVyIDMKK0VPRgorCWdpdCBhZGQgdGhyZWUuYmluICYmCisJR0lUX0FVVEhPUl9OQU1FPU51bWJlcjQgZ2l0IGNvbW1pdCAtYSAtbSBGb3VydGggLS1kYXRlPSIyMDEwLTAxLTAxIDIzOjAwOjAwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSBvbiBsYXN0IGNvbW1pdCAoLUMgLUMsIHN5bWxpbmspJyAnCisJZ2l0IGJsYW1lIC1DIC1DIHRocmVlLmJpbiA+YmxhbWUgJiYKKwlmaW5kX2JsYW1lIDxibGFtZSA+cmVzdWx0ICYmCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKKyhOdW1iZXIxIDIwMTAtMDEtMDEgMTg6MDA6MDAgKzAwMDAgMSkgY29udmVydGVkOiB0ZXN0IG51bWJlciAyCisoTnVtYmVyMiAyMDEwLTAxLTAxIDIwOjAwOjAwICswMDAwIDIpIGNvbnZlcnRlZDogdGVzdCBudW1iZXIgMiB2ZXJzaW9uIDIKKyhOdW1iZXIzIDIwMTAtMDEtMDEgMjI6MDA6MDAgKzAwMDAgMykgY29udmVydGVkOiB0ZXN0IG51bWJlciAyIHZlcnNpb24gMworKE51bWJlcjQgMjAxMC0wMS0wMSAyMzowMDowMCArMDAwMCA0KSBjb252ZXJ0ZWQ6IHRlc3QgbnVtYmVyIDMKK0VPRgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDgwMDctY2F0LWZpbGUtdGV4dGNvbnYuc2ggYi90L3Q4MDA3LWNhdC1maWxlLXRleHRjb252LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVhY2Q0OWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q4MDA3LWNhdC1maWxlLXRleHRjb252LnNoCkBAIC0wLDAgKzEsODYgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY2F0LWZpbGUgdGV4dGNvbnYgc3VwcG9ydCcKKy4gLi90ZXN0LWxpYi5zaAorCitjYXQgPmhlbHBlciA8PCdFT0YnCisjIS9iaW4vc2gKK2dyZXAgLXEgJ15iaW46ICcgIiQxIiB8fCB7IGVjaG8gIkU6ICQxIGlzIG5vdCBcImJpbmFyeVwiIGZpbGUiIDE+JjI7IGV4aXQgMTsgfQorc2VkICdzL15iaW46IC9jb252ZXJ0ZWQ6IC8nICIkMSIKK0VPRgorY2htb2QgK3ggaGVscGVyCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwICcgJworCWVjaG8gImJpbjogdGVzdCIgPm9uZS5iaW4gJiYKKwl0ZXN0X2xuX3NfYWRkIG9uZS5iaW4gc3ltbGluay5iaW4gJiYKKwlnaXQgYWRkIC4gJiYKKwlHSVRfQVVUSE9SX05BTUU9TnVtYmVyMSBnaXQgY29tbWl0IC1hIC1tIEZpcnN0IC0tZGF0ZT0iMjAxMC0wMS0wMSAxODowMDowMCIgJiYKKwllY2hvICJiaW46IHRlc3QgdmVyc2lvbiAyIiA+b25lLmJpbiAmJgorCUdJVF9BVVRIT1JfTkFNRT1OdW1iZXIyIGdpdCBjb21taXQgLWEgLW0gU2Vjb25kIC0tZGF0ZT0iMjAxMC0wMS0wMSAyMDowMDowMCIKKycKKworY2F0ID5leHBlY3RlZCA8PEVPRgorYmluOiB0ZXN0IHZlcnNpb24gMgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGZpbHRlciBzcGVjaWZpZWQnICcKKwlnaXQgY2F0LWZpbGUgLS10ZXh0Y29udiA6b25lLmJpbiA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRleHRjb252IGZpbHRlcnMnICcKKwllY2hvICIqLmJpbiBkaWZmPXRlc3QiID4uZ2l0YXR0cmlidXRlcyAmJgorCWdpdCBjb25maWcgZGlmZi50ZXN0LnRleHRjb252IC4vaGVscGVyICYmCisJZ2l0IGNvbmZpZyBkaWZmLnRlc3QuY2FjaGV0ZXh0Y29udiBmYWxzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSB3aXRob3V0IC0tdGV4dGNvbnYnICcKKwlnaXQgY2F0LWZpbGUgYmxvYiA6b25lLmJpbiA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2JpbjogdGVzdAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NhdC1maWxlIHdpdGhvdXQgLS10ZXh0Y29udiBvbiBwcmV2aW91cyBjb21taXQnICcKKwlnaXQgY2F0LWZpbGUgLXAgSEVBRF46b25lLmJpbiA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK2NhdCA+ZXhwZWN0ZWQgPDxFT0YKK2NvbnZlcnRlZDogdGVzdCB2ZXJzaW9uIDIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSAtLXRleHRjb252IG9uIGxhc3QgY29tbWl0JyAnCisJZ2l0IGNhdC1maWxlIC0tdGV4dGNvbnYgOm9uZS5iaW4gPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCitjYXQgPmV4cGVjdGVkIDw8RU9GCitjb252ZXJ0ZWQ6IHRlc3QKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSAtLXRleHRjb252IG9uIHByZXZpb3VzIGNvbW1pdCcgJworCWdpdCBjYXQtZmlsZSAtLXRleHRjb252IEhFQUReOm9uZS5iaW4gPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSB3aXRob3V0IC0tdGV4dGNvbnYgKHN5bWxpbmspJyAnCisJcHJpbnRmICIlcyIgIm9uZS5iaW4iID5leHBlY3RlZCAmJgorCWdpdCBjYXQtZmlsZSBibG9iIDpzeW1saW5rLmJpbiA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0LWZpbGUgLS10ZXh0Y29udiBvbiBpbmRleCAoc3ltbGluayknICcKKwlnaXQgY2F0LWZpbGUgLS10ZXh0Y29udiA6c3ltbGluay5iaW4gPnJlc3VsdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIHJlc3VsdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXQtZmlsZSAtLXRleHRjb252IG9uIEhFQUQgKHN5bWxpbmspJyAnCisJZ2l0IGNhdC1maWxlIC0tdGV4dGNvbnYgSEVBRDpzeW1saW5rLmJpbiA+cmVzdWx0ICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgcmVzdWx0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90ODAwOC1ibGFtZS1mb3JtYXRzLnNoIGIvdC90ODAwOC1ibGFtZS1mb3JtYXRzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5Zjg0YTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q4MDA4LWJsYW1lLWZvcm1hdHMuc2gKQEAgLTAsMCArMSw5MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2JsYW1lIG91dHB1dCBpbiB2YXJpb3VzIGZvcm1hdHMgb24gYSBzaW1wbGUgY2FzZScKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCWVjaG8gYSA+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gb25lICYmCisJZWNobyBiID4+ZmlsZSAmJgorCWVjaG8gYyA+PmZpbGUgJiYKKwllY2hvIGQgPj5maWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0d28KKycKKworY2F0ID5leHBlY3QgPDwnRU9GJworXmJhZjVlMGIgKEEgVSBUaG9yIDIwMDUtMDQtMDcgMTU6MTM6MTMgLTA3MDAgMSkgYQorODgyNTM3OWQgKEEgVSBUaG9yIDIwMDUtMDQtMDcgMTU6MTQ6MTMgLTA3MDAgMikgYgorODgyNTM3OWQgKEEgVSBUaG9yIDIwMDUtMDQtMDcgMTU6MTQ6MTMgLTA3MDAgMykgYworODgyNTM3OWQgKEEgVSBUaG9yIDIwMDUtMDQtMDcgMTU6MTQ6MTMgLTA3MDAgNCkgZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3JtYWwgYmxhbWUgb3V0cHV0JyAnCisJZ2l0IGJsYW1lIGZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworSUQxPWJhZjVlMGIzODY5ZTBiMmIyYmViMzk1YTM3MjBjN2I1MWVhYzk0ZmMKK0NPTU1JVDE9J2F1dGhvciBBIFUgVGhvcgorYXV0aG9yLW1haWwgPGF1dGhvckBleGFtcGxlLmNvbT4KK2F1dGhvci10aW1lIDExMTI5MTE5OTMKK2F1dGhvci10eiAtMDcwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIKK2NvbW1pdHRlci1tYWlsIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+Citjb21taXR0ZXItdGltZSAxMTEyOTExOTkzCitjb21taXR0ZXItdHogLTA3MDAKK3N1bW1hcnkgb25lCitib3VuZGFyeQorZmlsZW5hbWUgZmlsZScKK0lEMj04ODI1Mzc5ZGZiOGExMjY3YjU4ZThlNWJjZjY5ZWVjODM4ZjY4NWVjCitDT01NSVQyPSdhdXRob3IgQSBVIFRob3IKK2F1dGhvci1tYWlsIDxhdXRob3JAZXhhbXBsZS5jb20+CithdXRob3ItdGltZSAxMTEyOTEyMDUzCithdXRob3ItdHogLTA3MDAKK2NvbW1pdHRlciBDIE8gTWl0dGVyCitjb21taXR0ZXItbWFpbCA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorY29tbWl0dGVyLXRpbWUgMTExMjkxMjA1MworY29tbWl0dGVyLXR6IC0wNzAwCitzdW1tYXJ5IHR3bworcHJldmlvdXMgYmFmNWUwYjM4NjllMGIyYjJiZWIzOTVhMzcyMGM3YjUxZWFjOTRmYyBmaWxlCitmaWxlbmFtZSBmaWxlJworCitjYXQgPmV4cGVjdCA8PEVPRgorJElEMSAxIDEgMQorJENPTU1JVDEKKwlhCiskSUQyIDIgMiAzCiskQ09NTUlUMgorCWIKKyRJRDIgMyAzCisJYworJElEMiA0IDQKKwlkCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2JsYW1lIC0tcG9yY2VsYWluIG91dHB1dCcgJworCWdpdCBibGFtZSAtLXBvcmNlbGFpbiBmaWxlID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCiskSUQxIDEgMSAxCiskQ09NTUlUMQorCWEKKyRJRDIgMiAyIDMKKyRDT01NSVQyCisJYgorJElEMiAzIDMKKyRDT01NSVQyCisJYworJElEMiA0IDQKKyRDT01NSVQyCisJZAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdibGFtZSAtLWxpbmUtcG9yY2VsYWluIG91dHB1dCcgJworCWdpdCBibGFtZSAtLWxpbmUtcG9yY2VsYWluIGZpbGUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDAwLWFkZHJlc3Nlcy5zaCBiL3QvdDkwMDAtYWRkcmVzc2VzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmExZWJlZjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MDAwLWFkZHJlc3Nlcy5zaApAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY29tcGFyZSBhZGRyZXNzIHBhcnNpbmcgd2l0aCBhbmQgd2l0aG91dCBNYWlsOjpBZGRyZXNzJworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHBlcmwgaW50ZXJmYWNlIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorCitwZXJsIC1NVGVzdDo6TW9yZSAtZSAwIDI+L2Rldi9udWxsIHx8IHsKKwlza2lwX2FsbD0iUGVybCBUZXN0OjpNb3JlIHVuYXZhaWxhYmxlLCBza2lwcGluZyB0ZXN0IgorCXRlc3RfZG9uZQorfQorCitwZXJsIC1NTWFpbDo6QWRkcmVzcyAtZSAwIDI+L2Rldi9udWxsIHx8IHsKKwlza2lwX2FsbD0iUGVybCBNYWlsOjpBZGRyZXNzIHVuYXZhaWxhYmxlLCBza2lwcGluZyB0ZXN0IgorCXRlc3RfZG9uZQorfQorCit0ZXN0X2V4dGVybmFsX2hhc190YXA9MQorCit0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyIFwKKwknUGVybCBhZGRyZXNzIHBhcnNpbmcgZnVuY3Rpb24nIFwKKwlwZXJsICIkVEVTVF9ESVJFQ1RPUlkiL3Q5MDAwL3Rlc3QucGwKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDAwL3Rlc3QucGwgYi90L3Q5MDAwL3Rlc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmQwNWQzZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkwMDAvdGVzdC5wbApAQCAtMCwwICsxLDY3IEBACisjIS91c3IvYmluL3BlcmwKK3VzZSBsaWIgKHNwbGl0KC86LywgJEVOVntHSVRQRVJMTElCfSkpOworCit1c2UgNS4wMDg7Cit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0OworCit1c2UgVGVzdDo6TW9yZSBxdyhub19wbGFuKTsKK3VzZSBNYWlsOjpBZGRyZXNzOworCitCRUdJTiB7IHVzZV9vaygnR2l0JykgfQorCitteSBAc3VjY2Vzc19saXN0ID0gKHFbSmFuZV0sCisJcVtqZG9lQGV4YW1wbGUuY29tXSwKKwlxWzxqZG9lQGV4YW1wbGUuY29tPl0sCisJcVtKYW5lIDxqZG9lQGV4YW1wbGUuY29tPl0sCisJcVtKYW5lIERvZSA8amRvZUBleGFtcGxlLmNvbT5dLAorCXFbIkphbmUiIDxqZG9lQGV4YW1wbGUuY29tPl0sCisJcVsiRG9lLCBKYW5lIiA8amRvZUBleGFtcGxlLmNvbT5dLAorCXFbIkphbmVAOjtcPi4sKCk8RG9lIiA8amRvZUBleGFtcGxlLmNvbT5dLAorCXFbSmFuZSEjJCUmJyorLS89P15fe3x9fkRvZScgPGpkb2VAZXhhbXBsZS5jb20+XSwKKwlxWyI8amRvZUBleGFtcGxlLmNvbT4iXSwKKwlxWyJKYW5lIGpkb2VAZXhhbXBsZS5jb20iXSwKKwlxW0phbmUgRG9lIDxqZG9lICAgIEAgICBleGFtcGxlLmNvbSAgPl0sCisJcVtKYW5lICAgICAgIERvZSA8ICBqZG9lQGV4YW1wbGUuY29tICA+XSwKKwlxW0phbmUgQCBEb2UgQCBKYW5lIEAgRG9lXSwKKwlxWyJKYW5lLCAnRG9lJyIgPGpkb2VAZXhhbXBsZS5jb20+XSwKKwlxWydEb2UsICJKYW5lJyA8amRvZUBleGFtcGxlLmNvbT5dLAorCXFbIkphbmUiICJEbyJlIDxqZG9lQGV4YW1wbGUuY29tPl0sCisJcVsiSmFuZScgRG9lIiA8amRvZUBleGFtcGxlLmNvbT5dLAorCXFbIkphbmUgRG9lIDxqZG9lQGV4YW1wbGUuY29tPiIgPGpkb2VAZXhhbXBsZS5jb20+XSwKKwlxWyJKYW5lXCIgRG9lIiA8amRvZUBleGFtcGxlLmNvbT5dLAorCXFbRG9lLCBqYW5lIDxqZG9lQGV4YW1wbGUuY29tPl0sCisJcVsiSmFuZSBEb2UgPGpkb2VAZXhhbXBsZS5jb20+XSwKKwlxWydKYW5lICdEb2UnIDxqZG9lQGV4YW1wbGUuY29tPl0pOworCitteSBAa25vd25fZmFpbHVyZV9saXN0ID0gKHFbSmFuZVwgRG9lIDxqZG9lQGV4YW1wbGUuY29tPl0sCisJcVsiRG9lLCBKYSJuZSA8amRvZUBleGFtcGxlLmNvbT5dLAorCXFbIkRvZSwgS2F0YXJpbmEiIEphbmUgPGpkb2VAZXhhbXBsZS5jb20+XSwKKwlxW0phbmVAOjtcLiwoKTw+RG9lIDxqZG9lQGV4YW1wbGUuY29tPl0sCisJcVtKYW5lIGpkb2VAZXhhbXBsZS5jb21dLAorCXFbPGpkb2VAZXhhbXBsZS5jb20+IEphbmUgRG9lXSwKKwlxW0phbmUgPGpkb2VAZXhhbXBsZS5jb20+IERvZV0sCisJcVsiSmFuZSAiS2F0ImEiIHJpIm5hIiAiLERvZSIgPGpkb2VAZXhhbXBsZS5jb20+XSwKKwlxW0phbmUgRG9lXSwKKwlxW0phbmUgIkRvZSA8amRvZUBleGFtcGxlLmNvbT4iXSwKKwlxW1wiSmFuZSBEb2UgPGpkb2VAZXhhbXBsZS5jb20+XSwKKwlxW0phbmVcIlwiIERvZSA8amRvZUBleGFtcGxlLmNvbT5dLAorCXFbJ0phbmUgIkthdGFyaW5hXCIgXCcgRG9lJyA8amRvZUBleGFtcGxlLmNvbT5dKTsKKworZm9yZWFjaCBteSAkc3RyIChAc3VjY2Vzc19saXN0KSB7CisJbXkgQGV4cGVjdGVkID0gbWFwIHsgJF8tPmZvcm1hdCB9IE1haWw6OkFkZHJlc3MtPnBhcnNlKCIkc3RyIik7CisJbXkgQGFjdHVhbCA9IEdpdDo6cGFyc2VfbWFpbGJveGVzKCIkc3RyIik7CisJaXNfZGVlcGx5KFxAZXhwZWN0ZWQsIFxAYWN0dWFsLCBxcVtzYW1lIG91dHB1dCA6ICRzdHJdKTsKK30KKworVE9ETzogeworCWxvY2FsICRUT0RPID0gImtub3duIGJyZWFrYWdlIjsKKwlmb3JlYWNoIG15ICRzdHIgKEBrbm93bl9mYWlsdXJlX2xpc3QpIHsKKwkJbXkgQGV4cGVjdGVkID0gbWFwIHsgJF8tPmZvcm1hdCB9IE1haWw6OkFkZHJlc3MtPnBhcnNlKCIkc3RyIik7CisJCW15IEBhY3R1YWwgPSBHaXQ6OnBhcnNlX21haWxib3hlcygiJHN0ciIpOworCQlpc19kZWVwbHkoXEBleHBlY3RlZCwgXEBhY3R1YWwsIHFxW3NhbWUgb3V0cHV0IDogJHN0cl0pOworCX0KK30KKworbXkgJGlzX3Bhc3NpbmcgPSBldmFsIHsgVGVzdDo6TW9yZS0+aXNfcGFzc2luZyB9OworZXhpdCgkaXNfcGFzc2luZyA/IDAgOiAxKSB1bmxlc3MgJEAgPX4gL0Nhbid0IGxvY2F0ZSBvYmplY3QgbWV0aG9kLzsKZGlmZiAtLWdpdCBhL3QvdDkwMDEtc2VuZC1lbWFpbC5zaCBiL3QvdDkwMDEtc2VuZC1lbWFpbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41YjRhNWNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTAwMS1zZW5kLWVtYWlsLnNoCkBAIC0wLDAgKzEsMTc5MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzZW5kLWVtYWlsJworLiAuL3Rlc3QtbGliLnNoCisKKyMgTWF5IGJlIGFsdGVyZWQgbGF0ZXIgaW4gdGhlIHRlc3QKK1BSRVJFUT0iUEVSTCIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdwcmVwYXJlIHJlZmVyZW5jZSB0cmVlJyAnCisJZWNobyAiMUEgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIiA+ZmlsZSAmJgorCWVjaG8gImxhenkgZG9nIiA+PmZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkEiIGdpdCBjb21taXQgLWEgLW0gIkluaXRpYWwuIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ1NldHVwIGhlbHBlciB0b29sJyAnCisJd3JpdGVfc2NyaXB0IGZha2Uuc2VuZG1haWwgPDwtXEVPRiAmJgorCXNoaWZ0CisJb3V0cHV0PTEKKwl3aGlsZSB0ZXN0IC1mIGNvbW1hbmRsaW5lJG91dHB1dAorCWRvCisJCW91dHB1dD0kKCgkb3V0cHV0KzEpKQorCWRvbmUKKwlmb3IgYQorCWRvCisJCWVjaG8gIiEkYSEiCisJZG9uZSA+Y29tbWFuZGxpbmUkb3V0cHV0CisJY2F0ID4ibXNndHh0JG91dHB1dCIKKwlFT0YKKwlnaXQgYWRkIGZha2Uuc2VuZG1haWwgJiYKKwlHSVRfQVVUSE9SX05BTUU9IkEiIGdpdCBjb21taXQgLWEgLW0gIlNlY29uZC4iCisnCisKK2NsZWFuX2Zha2Vfc2VuZG1haWwgKCkgeworCXJtIC1mIGNvbW1hbmRsaW5lKiBtc2d0eHQqCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnRXh0cmFjdCBwYXRjaGVzJyAnCisJcGF0Y2hlcz1gZ2l0IGZvcm1hdC1wYXRjaCAtcyAtLWNjPSJPbmUgPG9uZUBleGFtcGxlLmNvbT4iIC0tY2M9dHdvQGV4YW1wbGUuY29tIC1uIEhFQUReMWAKKycKKworIyBUZXN0IG5vIGNvbmZpcm0gZWFybHkgdG8gZW5zdXJlIHJlbWFpbmluZyB0ZXN0cyB3aWxsIG5vdCBoYW5nCit0ZXN0X25vX2NvbmZpcm0gKCkgeworCXJtIC1mIG5vX2NvbmZpcm1fb2theQorCWVjaG8gbiB8IFwKKwkJR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSBcCisJCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRAIFwKKwkJJHBhdGNoZXMgPnN0ZG91dCAmJgorCQl0ZXN0X211c3RfZmFpbCBncmVwICJTZW5kIHRoaXMgZW1haWwiIHN0ZG91dCAmJgorCQk+bm9fY29uZmlybV9va2F5Cit9CisKKyMgRXhpdCBpbW1lZGlhdGVseSB0byBwcmV2ZW50IGhhbmcgaWYgYSBuby1jb25maXJtIHRlc3QgZmFpbHMKK2NoZWNrX25vX2NvbmZpcm0gKCkgeworCWlmICEgdGVzdCAtZiBub19jb25maXJtX29rYXkKKwl0aGVuCisJCXNheSAnY29uZmlybSB0ZXN0IGZhaWxlZDsgc2tpcHBpbmcgcmVtYWluaW5nIHRlc3RzIHRvIHByZXZlbnQgaGFuZ2luZycKKwkJUFJFUkVRPSIkUFJFUkVRLENIRUNLX05PX0NPTkZJUk0iCisJZmkKKwlyZXR1cm4gMAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ05vIGNvbmZpcm0gd2l0aCAtLXN1cHByZXNzLWNjJyAnCisJdGVzdF9ub19jb25maXJtIC0tc3VwcHJlc3MtY2M9c29iICYmCisJY2hlY2tfbm9fY29uZmlybQorJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnTm8gY29uZmlybSB3aXRoIC0tY29uZmlybT1uZXZlcicgJworCXRlc3Rfbm9fY29uZmlybSAtLWNvbmZpcm09bmV2ZXIgJiYKKwljaGVja19ub19jb25maXJtCisnCisKKyMgbGVhdmUgc2VuZGVtYWlsLmNvbmZpcm0gc2V0IHRvIG5ldmVyIGFmdGVyIHRoaXMgc28gdGhhdCBub25lIG9mIHRoZQorIyByZW1haW5pbmcgdGVzdHMgcHJvbXB0IHVuaW50ZW50aW9uYWxseS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnTm8gY29uZmlybSB3aXRoIHNlbmRlbWFpbC5jb25maXJtPW5ldmVyJyAnCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29uZmlybSBuZXZlciAmJgorCXRlc3Rfbm9fY29uZmlybSAtLWNvbXBvc2UgLS1zdWJqZWN0PWZvbyAmJgorCWNoZWNrX25vX2NvbmZpcm0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdTZW5kIHBhdGNoZXMnICcKKwlnaXQgc2VuZC1lbWFpbCAtLXN1cHByZXNzLWNjPXNvYiAtLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIC0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiAkcGF0Y2hlcyAyPmVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCSFub2JvZHlAZXhhbXBsZS5jb20hCisJIWF1dGhvckBleGFtcGxlLmNvbSEKKwkhb25lQGV4YW1wbGUuY29tIQorCSF0d29AZXhhbXBsZS5jb20hCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnVmVyaWZ5IGNvbW1hbmRsaW5lJyAnCisJdGVzdF9jbXAgZXhwZWN0ZWQgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnU2VuZCBwYXRjaGVzIHdpdGggLS1lbnZlbG9wZS1zZW5kZXInICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IHNlbmQtZW1haWwgLS1lbnZlbG9wZS1zZW5kZXI9IlBhdGNoIENvbnRyaWJ1dG9yIDxwYXRjaEBleGFtcGxlLmNvbT4iIC0tc3VwcHJlc3MtY2M9c29iIC0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiICRwYXRjaGVzIDI+ZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCisJY2F0ID5leHBlY3RlZCA8PC1cRU9GCisJIXBhdGNoQGV4YW1wbGUuY29tIQorCSEtaSEKKwkhbm9ib2R5QGV4YW1wbGUuY29tIQorCSFhdXRob3JAZXhhbXBsZS5jb20hCisJIW9uZUBleGFtcGxlLmNvbSEKKwkhdHdvQGV4YW1wbGUuY29tIQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ1ZlcmlmeSBjb21tYW5kbGluZScgJworCXRlc3RfY21wIGV4cGVjdGVkIGNvbW1hbmRsaW5lMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ1NlbmQgcGF0Y2hlcyB3aXRoIC0tZW52ZWxvcGUtc2VuZGVyPWF1dG8nICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IHNlbmQtZW1haWwgLS1lbnZlbG9wZS1zZW5kZXI9YXV0byAtLXN1cHByZXNzLWNjPXNvYiAtLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIC0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiAkcGF0Y2hlcyAyPmVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCSFub2JvZHlAZXhhbXBsZS5jb20hCisJIS1pIQorCSFub2JvZHlAZXhhbXBsZS5jb20hCisJIWF1dGhvckBleGFtcGxlLmNvbSEKKwkhb25lQGV4YW1wbGUuY29tIQorCSF0d29AZXhhbXBsZS5jb20hCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnVmVyaWZ5IGNvbW1hbmRsaW5lJyAnCisJdGVzdF9jbXAgZXhwZWN0ZWQgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAiCitjYXQgPmV4cGVjdGVkLXNob3ctYWxsLWhlYWRlcnMgPDxcRU9GCiswMDAxLVNlY29uZC5wYXRjaAorKG1ib3gpIEFkZGluZyBjYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0Zyb206IEEgPGF1dGhvckBleGFtcGxlLmNvbT4nCisobWJveCkgQWRkaW5nIGNjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCisobWJveCkgQWRkaW5nIGNjOiB0d29AZXhhbXBsZS5jb20gZnJvbSBsaW5lICdDYzogT25lIDxvbmVAZXhhbXBsZS5jb20+LCB0d29AZXhhbXBsZS5jb20nCitEcnktT0suIExvZyBzYXlzOgorU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQorTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxjY0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PG9uZUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHR3b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGJjY0BleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBjY0BleGFtcGxlLmNvbSwKKwlBIDxhdXRob3JAZXhhbXBsZS5jb20+LAorCU9uZSA8b25lQGV4YW1wbGUuY29tPiwKKwl0d29AZXhhbXBsZS5jb20KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworSW4tUmVwbHktVG86IDx1bmlxdWUtbWVzc2FnZS1pZEBleGFtcGxlLmNvbT4KK1JlZmVyZW5jZXM6IDx1bmlxdWUtbWVzc2FnZS1pZEBleGFtcGxlLmNvbT4KKworUmVzdWx0OiBPSworRU9GCisiCisKK3Rlc3Rfc3VwcHJlc3Nfc2VsZiAoKSB7CisJdGVzdF9jb21taXQgJDMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRF4iICYmCisKKwl3cml0ZV9zY3JpcHQgY2NjbWQtc2VkIDw8LUVPRiAmJgorCQlzZWQgLW4gLWUgcy9eY2NjbWQtLS8vcCAiXCQxIgorCUVPRgorCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYXV0aG9yPSIkMSA8JDI+IiAtRiAtICYmCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPiJzdXBwcmVzcy1zZWxmLSQzLnBhdGNoIiAmJgorCisJZ2l0IHNlbmQtZW1haWwgLS1mcm9tPSIkMSA8JDI+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1jYy1jbWQ9Li9jY2NtZC1zZWQgXAorCQktLXN1cHByZXNzLWNjPXNlbGYgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlzdXBwcmVzcy1zZWxmLSQzLnBhdGNoICYmCisKKwltdiBtc2d0eHQxIG1zZ3R4dDEtJDMgJiYKKwlzZWQgLWUgJy9eJC9xJyBtc2d0eHQxLSQzID4ibXNnaGRyMS0kMyIgJiYKKwk+ImV4cGVjdGVkLW5vLWNjLSQzIiAmJgorCisJKGdyZXAgJ15DYzonIG1zZ2hkcjEtJDMgPiJhY3R1YWwtbm8tY2MtJDMiOworCSB0ZXN0X2NtcCBleHBlY3RlZC1uby1jYy0kMyBhY3R1YWwtbm8tY2MtJDMpCit9CisKK3Rlc3Rfc3VwcHJlc3Nfc2VsZl91bnF1b3RlZCAoKSB7CisJdGVzdF9zdXBwcmVzc19zZWxmICIkMSIgIiQyIiAidW5xdW90ZWQtJDMiIDw8LUVPRgorCQl0ZXN0IHN1cHByZXNzLWNjLnNlbGYgdW5xdW90ZWQtJDMgd2l0aCBuYW1lICQxIGVtYWlsICQyCisKKwkJdW5xdW90ZWQtJDMKKworCQljY2NtZC0tJDEgPCQyPgorCisJCUNjOiAkMSA8JDI+CisJCVNpZ25lZC1vZmYtYnk6ICQxIDwkMj4KKwlFT0YKK30KKwordGVzdF9zdXBwcmVzc19zZWxmX3F1b3RlZCAoKSB7CisJdGVzdF9zdXBwcmVzc19zZWxmICIkMSIgIiQyIiAicXVvdGVkLSQzIiA8PC1FT0YKKwkJdGVzdCBzdXBwcmVzcy1jYy5zZWxmIHF1b3RlZC0kMyB3aXRoIG5hbWUgJDEgZW1haWwgJDIKKworCQlxdW90ZWQtJDMKKworCQljY2NtZC0tIiQxIiA8JDI+CisKKwkJQ2M6ICQxIDwkMj4KKwkJQ2M6ICIkMSIgPCQyPgorCQlTaWduZWQtb2ZmLWJ5OiAkMSA8JDI+CisJCVNpZ25lZC1vZmYtYnk6ICIkMSIgPCQyPgorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbGYgbmFtZSBpcyBzdXBwcmVzc2VkJyAiCisJdGVzdF9zdXBwcmVzc19zZWxmX3VucXVvdGVkICdBIFUgVGhvcicgJ2F1dGhvckBleGFtcGxlLmNvbScgXAorCQknc2VsZl9uYW1lX3N1cHByZXNzZWQnCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VsZiBuYW1lIHdpdGggZG90IGlzIHN1cHByZXNzZWQnICIKKwl0ZXN0X3N1cHByZXNzX3NlbGZfcXVvdGVkICdBIFUuIFRob3InICdhdXRob3JAZXhhbXBsZS5jb20nIFwKKwkJJ3NlbGZfbmFtZV9kb3Rfc3VwcHJlc3NlZCcKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdub24tYXNjaWkgc2VsZiBuYW1lIGlzIHN1cHByZXNzZWQnICIKKwl0ZXN0X3N1cHByZXNzX3NlbGZfcXVvdGVkICdGw7zDsW7DvSBOw6Jtw6knICdvZGRfPz1tYWlsQGV4YW1wbGUuY29tJyBcCisJCSdub25fYXNjaWlfc2VsZl9zdXBwcmVzc2VkJworIgorCisjIFRoaXMgbmFtZSBpcyBsb25nIGVub3VnaCB0byBmb3JjZSBmb3JtYXQtcGF0Y2ggdG8gc3BsaXQgaXQgaW50byBtdWx0aXBsZQorIyBlbmNvZGVkLXdvcmRzLCBhc3N1bWluZyBpdCB1c2VzIFVURi04IHdpdGggdGhlICJRIiBlbmNvZGluZy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnbG9uZyBub24tYXNjaWkgc2VsZiBuYW1lIGlzIHN1cHByZXNzZWQnICIKKwl0ZXN0X3N1cHByZXNzX3NlbGZfcXVvdGVkICfGkcO8w7Fuw63EmcWZIOKCrC4gTsOi4bmBw6knICdvZGRfPz1tYWlsQGV4YW1wbGUuY29tJyBcCisJCSdsb25nX25vbl9hc2NpaV9zZWxmX3N1cHByZXNzZWQnCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2FuaXRpemVkIHNlbGYgbmFtZSBpcyBzdXBwcmVzc2VkJyAiCisJdGVzdF9zdXBwcmVzc19zZWxmX3VucXVvdGVkICdcIkEgVS4gVGhvclwiJyAnYXV0aG9yQGV4YW1wbGUuY29tJyBcCisJCSdzZWxmX25hbWVfc2FuaXRpemVkX3N1cHByZXNzZWQnCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnU2hvdyBhbGwgaGVhZGVycycgJworCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1zdXBwcmVzcy1jYz1zb2IgXAorCQktLWZyb209IkV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+IiBcCisJCS0tdG89dG9AZXhhbXBsZS5jb20gXAorCQktLWNjPWNjQGV4YW1wbGUuY29tIFwKKwkJLS1iY2M9YmNjQGV4YW1wbGUuY29tIFwKKwkJLS1pbi1yZXBseS10bz0iPHVuaXF1ZS1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPiIgXAorCQktLXNtdHAtc2VydmVyIHJlbGF5LmV4YW1wbGUuY29tIFwKKwkJJHBhdGNoZXMgfAorCXNlZAktZSAicy9eXChEYXRlOlwpLiovXDEgREFURS1TVFJJTkcvIiBcCisJCS1lICJzL15cKE1lc3NhZ2UtSWQ6XCkuKi9cMSBNRVNTQUdFLUlELVNUUklORy8iIFwKKwkJLWUgInMvXlwoWC1NYWlsZXI6XCkuKi9cMSBYLU1BSUxFUi1TVFJJTkcvIiBcCisJCT5hY3R1YWwtc2hvdy1hbGwtaGVhZGVycyAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXNob3ctYWxsLWhlYWRlcnMgYWN0dWFsLXNob3ctYWxsLWhlYWRlcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdQcm9tcHRpbmcgd29ya3MnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJKGVjaG8gInRvQGV4YW1wbGUuY29tIgorCSBlY2hvICIiCisJKSB8IEdJVF9TRU5EX0VNQUlMX05PVFRZPTEgZ2l0IHNlbmQtZW1haWwgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyBcCisJCTI+ZXJyb3JzICYmCisJCWdyZXAgIl5Gcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPlwkIiBtc2d0eHQxICYmCisJCWdyZXAgIl5UbzogdG9AZXhhbXBsZS5jb21cJCIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEsQVVUT0lERU5UICdpbXBsaWNpdCBpZGVudCBpcyBhbGxvd2VkJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCShzYW5lX3Vuc2V0IEdJVF9BVVRIT1JfTkFNRSAmJgorCXNhbmVfdW5zZXQgR0lUX0FVVEhPUl9FTUFJTCAmJgorCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9OQU1FICYmCisJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSBnaXQgc2VuZC1lbWFpbCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCS0tdG89dG9AZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyA8L2Rldi9udWxsIDI+ZXJyb3JzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEsIUFVVE9JREVOVCAnYnJva2VuIGltcGxpY2l0IGlkZW50IGFib3J0cyBzZW5kLWVtYWlsJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCShzYW5lX3Vuc2V0IEdJVF9BVVRIT1JfTkFNRSAmJgorCXNhbmVfdW5zZXQgR0lUX0FVVEhPUl9FTUFJTCAmJgorCXNhbmVfdW5zZXQgR0lUX0NPTU1JVFRFUl9OQU1FICYmCisJc2FuZV91bnNldCBHSVRfQ09NTUlUVEVSX0VNQUlMICYmCisJR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSAmJiBleHBvcnQgR0lUX1NFTkRfRU1BSUxfTk9UVFkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1lbWFpbCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCS0tdG89dG9AZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyA8L2Rldi9udWxsIDI+ZXJyb3JzICYmCisJdGVzdF9pMThuZ3JlcCAidGVsbCBtZSB3aG8geW91IGFyZSIgZXJyb3JzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIHRvY21kIGFuZCBjY2NtZCBzY3JpcHRzJyAnCisJd3JpdGVfc2NyaXB0IHRvY21kLXNlZCA8PC1cRU9GICYmCisJc2VkIC1uIC1lICJzL150b2NtZC0tLy9wIiAiJDEiCisJRU9GCisJd3JpdGVfc2NyaXB0IGNjY21kLXNlZCA8PC1cRU9GCisJc2VkIC1uIC1lICJzL15jY2NtZC0tLy9wIiAiJDEiCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAndG9jbWQgd29ya3MnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJY3AgJHBhdGNoZXMgdG9jbWQucGF0Y2ggJiYKKwllY2hvIHRvY21kLS10b2NtZEBleGFtcGxlLmNvbSA+PnRvY21kLnBhdGNoICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10by1jbWQ9Li90b2NtZC1zZWQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQl0b2NtZC5wYXRjaCBcCisJCSYmCisJZ3JlcCAiXlRvOiB0b2NtZEBleGFtcGxlLmNvbSIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2NjY21kIHdvcmtzJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWNwICRwYXRjaGVzIGNjY21kLnBhdGNoICYmCisJZWNobyAiY2NjbWQtLSAgY2NjbWRAZXhhbXBsZS5jb20iID4+Y2NjbWQucGF0Y2ggJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tY2MtY21kPS4vY2NjbWQtc2VkIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJY2NjbWQucGF0Y2ggXAorCQkmJgorCWdyZXAgIl4JY2NjbWRAZXhhbXBsZS5jb20iIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdyZWplY3QgbG9uZyBsaW5lcycgJworCXo4PXp6enp6enp6ICYmCisJejY0PSR6OCR6OCR6OCR6OCR6OCR6OCR6OCR6OCAmJgorCXo1MTI9JHo2NCR6NjQkejY0JHo2NCR6NjQkejY0JHo2NCR6NjQgJiYKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJY3AgJHBhdGNoZXMgbG9uZ2xpbmUucGF0Y2ggJiYKKwllY2hvICR6NTEyJHo1MTIgPj5sb25nbGluZS5wYXRjaCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgbG9uZ2xpbmUucGF0Y2ggXAorCQkyPmVycm9ycyAmJgorCWdyZXAgbG9uZ2xpbmUucGF0Y2ggZXJyb3JzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnbm8gcGF0Y2ggd2FzIHNlbnQnICcKKwkhIHRlc3QgLWUgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnQXV0aG9yIEZyb206IGluIG1lc3NhZ2UgYm9keScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzICYmCisJc2VkICIxLC9eXCQvZCIgPG1zZ3R4dDEgPm1zZ2JvZHkxICYmCisJZ3JlcCAiRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgbXNnYm9keTEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdBdXRob3IgRnJvbTogbm90IGluIG1lc3NhZ2UgYm9keScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iQSA8YXV0aG9yQGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzICYmCisJc2VkICIxLC9eXCQvZCIgPG1zZ3R4dDEgPm1zZ2JvZHkxICYmCisJISBncmVwICJGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IiBtc2dib2R5MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2FsbG93IGxvbmcgbGluZXMgd2l0aCAtLW5vLXZhbGlkYXRlJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQktLW5vLXZhbGlkYXRlIFwKKwkJJHBhdGNoZXMgbG9uZ2xpbmUucGF0Y2ggXAorCQkyPmVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ0ludmFsaWQgSW4tUmVwbHktVG8nICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLWluLXJlcGx5LXRvPSIgIiBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzIFwKKwkJMj5lcnJvcnMgJiYKKwkhIGdyZXAgIl5Jbi1SZXBseS1UbzogPCAqPiIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ1ZhbGlkIEluLVJlcGx5LVRvIHdoZW4gcHJvbXB0aW5nJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCShlY2hvICJGcm9tIEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+IgorCSBlY2hvICJUbyBFeGFtcGxlIDx0b0BleGFtcGxlLmNvbT4iCisJIGVjaG8gIiIKKwkpIHwgR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSBnaXQgc2VuZC1lbWFpbCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzIDI+ZXJyb3JzICYmCisJISBncmVwICJeSW4tUmVwbHktVG86IDwgKj4iIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdJbi1SZXBseS1UbyB3aXRob3V0IC0tY2hhaW4tcmVwbHktdG8nICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZWNobyAiPHVuaXF1ZS1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1uby1jaGFpbi1yZXBseS10byBcCisJCS0taW4tcmVwbHktdG89IiQoY2F0IGV4cGVjdCkiIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgJHBhdGNoZXMgJHBhdGNoZXMgXAorCQkyPmVycm9ycyAmJgorCSMgVGhlIGZpcnN0IG1lc3NhZ2UgaXMgYSByZXBseSB0byAtLWluLXJlcGx5LXRvCisJc2VkIC1uIC1lICJzL15Jbi1SZXBseS1UbzogKlwoLipcKS9cMS9wIiBtc2d0eHQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJIyBTZWNvbmQgYW5kIHN1YnNlcXVlbnQgbWVzc2FnZXMgYXJlIHJlcGxpZXMgdG8gdGhlIGZpcnN0IG9uZQorCXNlZCAtbiAtZSAicy9eTWVzc2FnZS1JZDogKlwoLipcKS9cMS9wIiBtc2d0eHQxID5leHBlY3QgJiYKKwlzZWQgLW4gLWUgInMvXkluLVJlcGx5LVRvOiAqXCguKlwpL1wxL3AiIG1zZ3R4dDIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlzZWQgLW4gLWUgInMvXkluLVJlcGx5LVRvOiAqXCguKlwpL1wxL3AiIG1zZ3R4dDMgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdJbi1SZXBseS1UbyB3aXRoIC0tY2hhaW4tcmVwbHktdG8nICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZWNobyAiPHVuaXF1ZS1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPiIgPmV4cGVjdCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1jaGFpbi1yZXBseS10byBcCisJCS0taW4tcmVwbHktdG89IiQoY2F0IGV4cGVjdCkiIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgJHBhdGNoZXMgJHBhdGNoZXMgXAorCQkyPmVycm9ycyAmJgorCXNlZCAtbiAtZSAicy9eSW4tUmVwbHktVG86ICpcKC4qXCkvXDEvcCIgbXNndHh0MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXNlZCAtbiAtZSAicy9eTWVzc2FnZS1JZDogKlwoLipcKS9cMS9wIiBtc2d0eHQxID5leHBlY3QgJiYKKwlzZWQgLW4gLWUgInMvXkluLVJlcGx5LVRvOiAqXCguKlwpL1wxL3AiIG1zZ3R4dDIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlzZWQgLW4gLWUgInMvXk1lc3NhZ2UtSWQ6ICpcKC4qXCkvXDEvcCIgbXNndHh0MiA+ZXhwZWN0ICYmCisJc2VkIC1uIC1lICJzL15Jbi1SZXBseS1UbzogKlwoLipcKS9cMS9wIiBtc2d0eHQzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZmFrZSBlZGl0b3InICcKKwl3cml0ZV9zY3JpcHQgZmFrZS1lZGl0b3IgPDwtXEVPRgorCWVjaG8gZmFrZSBlZGl0ID4+IiQxIgorCUVPRgorJworCit0ZXN0X3NldF9lZGl0b3IgIiQocHdkKS9mYWtlLWVkaXRvciIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLWNvbXBvc2Ugd29ya3MnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCS0tY29tcG9zZSAtLXN1YmplY3QgZm9vIFwKKwktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkkcGF0Y2hlcyBcCisJMj5lcnJvcnMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdmaXJzdCBtZXNzYWdlIGlzIGNvbXBvc2UgdGV4dCcgJworCWdyZXAgIl5mYWtlIGVkaXQiIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZWNvbmQgbWVzc2FnZSBpcyBwYXRjaCcgJworCWdyZXAgIlN1YmplY3Q6LipTZWNvbmQiIG1zZ3R4dDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3Mtc29iIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8Y2NAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxvbmVAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0d29AZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitDYzogY2NAZXhhbXBsZS5jb20sCisJQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tCitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisiCisKK3JlcGxhY2VfdmFyaWFibGVfZmllbGRzICgpIHsKKwlzZWQJLWUgInMvXlwoRGF0ZTpcKS4qL1wxIERBVEUtU1RSSU5HLyIgXAorCQktZSAicy9eXChNZXNzYWdlLUlkOlwpLiovXDEgTUVTU0FHRS1JRC1TVFJJTkcvIiBcCisJCS1lICJzL15cKFgtTWFpbGVyOlwpLiovXDEgWC1NQUlMRVItU1RSSU5HLyIKK30KKwordGVzdF9zdXBwcmVzc2lvbiAoKSB7CisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLXN1cHByZXNzLWNjPSQxICR7MisiLS1zdXBwcmVzcy1jYz0kMiJ9IFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiIgXAorCQktLXRvPXRvQGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlciByZWxheS5leGFtcGxlLmNvbSBcCisJCSRwYXRjaGVzIHwgcmVwbGFjZV92YXJpYWJsZV9maWVsZHMgXAorCQk+YWN0dWFsLXN1cHByZXNzLSQxJHsyKyItJDIifSAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXN1cHByZXNzLSQxJHsyKyItJDIifSBhY3R1YWwtc3VwcHJlc3MtJDEkezIrIi0kMiJ9Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmNjIHNldCcgJworCWdpdCBjb25maWcgc2VuZGVtYWlsLmNjIGNjQGV4YW1wbGUuY29tICYmCisJdGVzdF9zdXBwcmVzc2lvbiBzb2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3Mtc29iIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8b25lQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dHdvQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJT25lIDxvbmVAZXhhbXBsZS5jb20+LAorCXR3b0BleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCisKK1Jlc3VsdDogT0sKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5jYyB1bnNldCcgJworCWdpdCBjb25maWcgLS11bnNldCBzZW5kZW1haWwuY2MgJiYKKwl0ZXN0X3N1cHByZXNzaW9uIHNvYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgIgorY2F0ID5leHBlY3RlZC1zdXBwcmVzcy1jY2NtZCA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhib2R5KSBBZGRpbmcgY2M6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdTaWduZWQtb2ZmLWJ5OiBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+JworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8b25lQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dHdvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8Y29tbWl0dGVyQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJT25lIDxvbmVAZXhhbXBsZS5jb20+LAorCXR3b0BleGFtcGxlLmNvbSwKKwlDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmNjY21kJyAnCisJd3JpdGVfc2NyaXB0IGNjY21kIDw8LVxFT0YgJiYKKwllY2hvIGNjLWNtZEBleGFtcGxlLmNvbQorCUVPRgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmNjY21kIC4vY2NjbWQgJiYKKwl0ZXN0X3N1cHByZXNzaW9uIGNjY21kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCitjYXQgPmV4cGVjdGVkLXN1cHByZXNzLWFsbCA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCitEcnktT0suIExvZyBzYXlzOgorU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQorTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1zdXBwcmVzcy1jYz1hbGwnICcKKwl0ZXN0X3N1cHByZXNzaW9uIGFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgIgorY2F0ID5leHBlY3RlZC1zdXBwcmVzcy1ib2R5IDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKGNjLWNtZCkgQWRkaW5nIGNjOiBjYy1jbWRAZXhhbXBsZS5jb20gZnJvbTogJy4vY2NjbWQnCitEcnktT0suIExvZyBzYXlzOgorU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQorTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxvbmVAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0d29AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxjYy1jbWRAZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitDYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tLAorCWNjLWNtZEBleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCisKK1Jlc3VsdDogT0sKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tc3VwcHJlc3MtY2M9Ym9keScgJworCXRlc3Rfc3VwcHJlc3Npb24gYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgIgorY2F0ID5leHBlY3RlZC1zdXBwcmVzcy1ib2R5LWNjY21kIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworRHJ5LU9LLiBMb2cgc2F5czoKK1NlcnZlcjogcmVsYXkuZXhhbXBsZS5jb20KK01BSUwgRlJPTTo8ZnJvbUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHRvQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8YXV0aG9yQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8b25lQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dHdvQGV4YW1wbGUuY29tPgorRnJvbTogRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4KK1RvOiB0b0BleGFtcGxlLmNvbQorQ2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4sCisJT25lIDxvbmVAZXhhbXBsZS5jb20+LAorCXR3b0BleGFtcGxlLmNvbQorU3ViamVjdDogW1BBVENIIDEvMV0gU2Vjb25kLgorRGF0ZTogREFURS1TVFJJTkcKK01lc3NhZ2UtSWQ6IE1FU1NBR0UtSUQtU1RSSU5HCitYLU1haWxlcjogWC1NQUlMRVItU1RSSU5HCisKK1Jlc3VsdDogT0sKK0VPRgorIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tc3VwcHJlc3MtY2M9Ym9keSAtLXN1cHByZXNzLWNjPWNjY21kJyAnCisJdGVzdF9zdXBwcmVzc2lvbiBib2R5IGNjY21kCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAiCitjYXQgPmV4cGVjdGVkLXN1cHByZXNzLXNvYiA8PFxFT0YKKzAwMDEtU2Vjb25kLnBhdGNoCisobWJveCkgQWRkaW5nIGNjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnRnJvbTogQSA8YXV0aG9yQGV4YW1wbGUuY29tPicKKyhtYm94KSBBZGRpbmcgY2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKKyhtYm94KSBBZGRpbmcgY2M6IHR3b0BleGFtcGxlLmNvbSBmcm9tIGxpbmUgJ0NjOiBPbmUgPG9uZUBleGFtcGxlLmNvbT4sIHR3b0BleGFtcGxlLmNvbScKK0RyeS1PSy4gTG9nIHNheXM6CitTZXJ2ZXI6IHJlbGF5LmV4YW1wbGUuY29tCitNQUlMIEZST006PGZyb21AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0b0BleGFtcGxlLmNvbT4KK1JDUFQgVE86PGF1dGhvckBleGFtcGxlLmNvbT4KK1JDUFQgVE86PG9uZUBleGFtcGxlLmNvbT4KK1JDUFQgVE86PHR3b0BleGFtcGxlLmNvbT4KK0Zyb206IEV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+CitUbzogdG9AZXhhbXBsZS5jb20KK0NjOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+LAorCU9uZSA8b25lQGV4YW1wbGUuY29tPiwKKwl0d29AZXhhbXBsZS5jb20KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworCitSZXN1bHQ6IE9LCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLXN1cHByZXNzLWNjPXNvYicgJworCXRlc3RfbWlnaHRfZmFpbCBnaXQgY29uZmlnIC0tdW5zZXQgc2VuZGVtYWlsLmNjY21kICYmCisJdGVzdF9zdXBwcmVzc2lvbiBzb2IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICIKK2NhdCA+ZXhwZWN0ZWQtc3VwcHJlc3MtYm9keWNjIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKG1ib3gpIEFkZGluZyBjYzogT25lIDxvbmVAZXhhbXBsZS5jb20+IGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKG1ib3gpIEFkZGluZyBjYzogdHdvQGV4YW1wbGUuY29tIGZyb20gbGluZSAnQ2M6IE9uZSA8b25lQGV4YW1wbGUuY29tPiwgdHdvQGV4YW1wbGUuY29tJworKGJvZHkpIEFkZGluZyBjYzogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ1NpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4nCitEcnktT0suIExvZyBzYXlzOgorU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQorTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxvbmVAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjx0d29AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitDYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlPbmUgPG9uZUBleGFtcGxlLmNvbT4sCisJdHdvQGV4YW1wbGUuY29tLAorCUMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4KK1N1YmplY3Q6IFtQQVRDSCAxLzFdIFNlY29uZC4KK0RhdGU6IERBVEUtU1RSSU5HCitNZXNzYWdlLUlkOiBNRVNTQUdFLUlELVNUUklORworWC1NYWlsZXI6IFgtTUFJTEVSLVNUUklORworCitSZXN1bHQ6IE9LCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLXN1cHByZXNzLWNjPWJvZHljYycgJworCXRlc3Rfc3VwcHJlc3Npb24gYm9keWNjCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAiCitjYXQgPmV4cGVjdGVkLXN1cHByZXNzLWNjIDw8XEVPRgorMDAwMS1TZWNvbmQucGF0Y2gKKyhtYm94KSBBZGRpbmcgY2M6IEEgPGF1dGhvckBleGFtcGxlLmNvbT4gZnJvbSBsaW5lICdGcm9tOiBBIDxhdXRob3JAZXhhbXBsZS5jb20+JworKGJvZHkpIEFkZGluZyBjYzogQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiBmcm9tIGxpbmUgJ1NpZ25lZC1vZmYtYnk6IEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4nCitEcnktT0suIExvZyBzYXlzOgorU2VydmVyOiByZWxheS5leGFtcGxlLmNvbQorTUFJTCBGUk9NOjxmcm9tQGV4YW1wbGUuY29tPgorUkNQVCBUTzo8dG9AZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxhdXRob3JAZXhhbXBsZS5jb20+CitSQ1BUIFRPOjxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitGcm9tOiBFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPgorVG86IHRvQGV4YW1wbGUuY29tCitDYzogQSA8YXV0aG9yQGV4YW1wbGUuY29tPiwKKwlDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+CitTdWJqZWN0OiBbUEFUQ0ggMS8xXSBTZWNvbmQuCitEYXRlOiBEQVRFLVNUUklORworTWVzc2FnZS1JZDogTUVTU0FHRS1JRC1TVFJJTkcKK1gtTWFpbGVyOiBYLU1BSUxFUi1TVFJJTkcKKworUmVzdWx0OiBPSworRU9GCisiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1zdXBwcmVzcy1jYz1jYycgJworCXRlc3Rfc3VwcHJlc3Npb24gY2MKKycKKwordGVzdF9jb25maXJtICgpIHsKKwllY2hvIHkgfCBcCisJCUdJVF9TRU5EX0VNQUlMX05PVFRZPTEgXAorCQlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRAICRwYXRjaGVzID5zdGRvdXQgJiYKKwlncmVwICJTZW5kIHRoaXMgZW1haWwiIHN0ZG91dAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29uZmlybT1hbHdheXMnICcKKwl0ZXN0X2NvbmZpcm0gLS1jb25maXJtPWFsd2F5cyAtLXN1cHByZXNzLWNjPWFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29uZmlybT1hdXRvJyAnCisJdGVzdF9jb25maXJtIC0tY29uZmlybT1hdXRvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb25maXJtPWNjJyAnCisJdGVzdF9jb25maXJtIC0tY29uZmlybT1jYworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29uZmlybT1jb21wb3NlJyAnCisJdGVzdF9jb25maXJtIC0tY29uZmlybT1jb21wb3NlIC0tY29tcG9zZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2NvbmZpcm0gYnkgZGVmYXVsdCAoZHVlIHRvIGNjKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgY29uZmlnIHNlbmRlbWFpbC5jb25maXJtIG5ldmVyICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHNlbmRlbWFpbC5jb25maXJtICYmCisJdGVzdF9jb25maXJtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY29uZmlybSBieSBkZWZhdWx0IChkdWUgdG8gLS1jb21wb3NlKScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgY29uZmlnIHNlbmRlbWFpbC5jb25maXJtIG5ldmVyICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHNlbmRlbWFpbC5jb25maXJtICYmCisJdGVzdF9jb25maXJtIC0tc3VwcHJlc3MtY2M9YWxsIC0tY29tcG9zZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2NvbmZpcm0gZGV0ZWN0cyBFT0YgKGluZm9ybSBhc3N1bWVzIHkpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gbmV2ZXIgJiYKKwlnaXQgY29uZmlnIC0tdW5zZXQgc2VuZGVtYWlsLmNvbmZpcm0gJiYKKwlybSAtZnIgb3V0ZGlyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtMiAtbyBvdXRkaXIgJiYKKwlHSVRfU0VORF9FTUFJTF9OT1RUWT0xIFwKKwkJZ2l0IHNlbmQtZW1haWwgXAorCQkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkJb3V0ZGlyLyoucGF0Y2ggPC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2NvbmZpcm0gZGV0ZWN0cyBFT0YgKGF1dG8gY2F1c2VzIGZhaWx1cmUpJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGdpdCBjb25maWcgc2VuZGVtYWlsLmNvbmZpcm0gbmV2ZXIgJiYKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jb25maXJtIGF1dG8gJiYKKwlHSVRfU0VORF9FTUFJTF9OT1RUWT0xICYmCisJZXhwb3J0IEdJVF9TRU5EX0VNQUlMX05PVFRZICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLWVtYWlsIFwKKwkJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJCSRwYXRjaGVzIDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdjb25maXJtIGRvZXMgbm90IGxvb3AgZm9yZXZlcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBnaXQgY29uZmlnIHNlbmRlbWFpbC5jb25maXJtIG5ldmVyICYmCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29uZmlybSBhdXRvICYmCisJR0lUX1NFTkRfRU1BSUxfTk9UVFk9MSAmJgorCWV4cG9ydCBHSVRfU0VORF9FTUFJTF9OT1RUWSAmJgorCQl5ZXMgImJvZ3VzIiB8IHRlc3RfbXVzdF9mYWlsIGdpdCBzZW5kLWVtYWlsIFwKKwkJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJCSRwYXRjaGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAndXRmOCBDYyBpcyByZmMyMDQ3IGVuY29kZWQnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJcm0gLWZyIG91dGRpciAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLW8gb3V0ZGlyIC0tY2M9IsOgw6nDrMO2w7ogPHV0ZjhAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwlvdXRkaXIvKi5wYXRjaCAmJgorCWdyZXAgIl4JIiBtc2d0eHQxIHwKKwlncmVwICI9P1VURi04P3E/PUMzPUEwPUMzPUE5PUMzPUFDPUMzPUI2PUMzPUJBPz0gPHV0ZjhAZXhhbXBsZS5jb20+IgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29tcG9zZSBhZGRzIE1JTUUgZm9yIHV0ZjggYm9keScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwl3cml0ZV9zY3JpcHQgZmFrZS1lZGl0b3ItdXRmOCA8PC1cRU9GICYmCisJZWNobyAidXRmOCBib2R5OiDDoMOpw6zDtsO6IiA+PiIkMSIKKwlFT0YKKwlHSVRfRURJVE9SPSJcIiQocHdkKS9mYWtlLWVkaXRvci11dGY4XCIiIFwKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tY29tcG9zZSAtLXN1YmplY3QgZm9vIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgJiYKKwlncmVwICJedXRmOCBib2R5IiBtc2d0eHQxICYmCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29tcG9zZSByZXNwZWN0cyB1c2VyIG1pbWUgdHlwZScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwl3cml0ZV9zY3JpcHQgZmFrZS1lZGl0b3ItdXRmOC1taW1lIDw8LVxFT0YgJiYKKwljYXQgPiIkMSIgPDwtXEVPTQorCU1JTUUtVmVyc2lvbjogMS4wCisJQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTEKKwlDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisJU3ViamVjdDogZm9vCisKKwl1dGY4IGJvZHk6IMOgw6nDrMO2w7oKKwlFT00KKwlFT0YKKwlHSVRfRURJVE9SPSJcIiQocHdkKS9mYWtlLWVkaXRvci11dGY4LW1pbWVcIiIgXAorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1jb21wb3NlIC0tc3ViamVjdCBmb28gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyAmJgorCWdyZXAgIl51dGY4IGJvZHkiIG1zZ3R4dDEgJiYKKwlncmVwICJeQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWlzby04ODU5LTEiIG1zZ3R4dDEgJiYKKwkhIGdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLWNvbXBvc2UgYWRkcyBNSU1FIGZvciB1dGY4IHN1YmplY3QnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJR0lUX0VESVRPUj0iXCIkKHB3ZCkvZmFrZS1lZGl0b3JcIiIgXAorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1jb21wb3NlIC0tc3ViamVjdCB1dGY4LXPDvGJqw6tjdCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzICYmCisJZ3JlcCAiXmZha2UgZWRpdCIgbXNndHh0MSAmJgorCWdyZXAgIl5TdWJqZWN0OiA9P1VURi04P3E/dXRmOC1zPUMzPUJDYmo9QzM9QUJjdD89IiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAndXRmOCBhdXRob3IgaXMgY29ycmVjdGx5IHBhc3NlZCBvbicgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwl0ZXN0X2NvbW1pdCB3ZWlyZF9hdXRob3IgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRF4iICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYXV0aG9yICJGw7zDsW7DvSBOw6Jtw6kgPG9kZF8/PW1haWxAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPmZ1bm55X25hbWUucGF0Y2ggJiYKKwlnaXQgc2VuZC1lbWFpbCAtLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlmdW5ueV9uYW1lLnBhdGNoICYmCisJZ3JlcCAiXkZyb206IEbDvMOxbsO9IE7Dom3DqSA8b2RkXz89bWFpbEBleGFtcGxlLmNvbT4iIG1zZ3R4dDEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICd1dGY4IHNlbmRlciBpcyBub3QgZHVwbGljYXRlZCcgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwl0ZXN0X2NvbW1pdCB3ZWlyZF9zZW5kZXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQgSEVBRF4iICYmCisJZ2l0IGNvbW1pdCAtLWFtZW5kIC0tYXV0aG9yICJGw7zDsW7DvSBOw6Jtw6kgPG9kZF8/PW1haWxAZXhhbXBsZS5jb20+IiAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPmZ1bm55X25hbWUucGF0Y2ggJiYKKwlnaXQgc2VuZC1lbWFpbCAtLWZyb209IkbDvMOxbsO9IE7Dom3DqSA8b2RkXz89bWFpbEBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlmdW5ueV9uYW1lLnBhdGNoICYmCisJZ3JlcCAiXkZyb206ICIgbXNndHh0MSA+bXNnZnJvbSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgbXNnZnJvbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5jb21wb3NlZW5jb2Rpbmcgd29ya3MnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuY29tcG9zZWVuY29kaW5nIGlzby04ODU5LTEgJiYKKwl3cml0ZV9zY3JpcHQgZmFrZS1lZGl0b3ItdXRmOCA8PC1cRU9GICYmCisJZWNobyAidXRmOCBib2R5OiDDoMOpw6zDtsO6IiA+PiIkMSIKKwlFT0YKKwlHSVRfRURJVE9SPSJcIiQocHdkKS9mYWtlLWVkaXRvci11dGY4XCIiIFwKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tY29tcG9zZSAtLXN1YmplY3QgZm9vIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhdGNoZXMgJiYKKwlncmVwICJedXRmOCBib2R5IiBtc2d0eHQxICYmCisJZ3JlcCAiXkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1pc28tODg1OS0xIiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1jb21wb3NlLWVuY29kaW5nIHdvcmtzJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXdyaXRlX3NjcmlwdCBmYWtlLWVkaXRvci11dGY4IDw8LVxFT0YgJiYKKwllY2hvICJ1dGY4IGJvZHk6IMOgw6nDrMO2w7oiID4+IiQxIgorCUVPRgorCUdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yLXV0ZjhcIiIgXAorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1jb21wb3NlLWVuY29kaW5nIGlzby04ODU5LTEgXAorCQktLWNvbXBvc2UgLS1zdWJqZWN0IGZvbyBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzICYmCisJZ3JlcCAiXnV0ZjggYm9keSIgbXNndHh0MSAmJgorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMSIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29tcG9zZS1lbmNvZGluZyBvdmVycmlkZXMgc2VuZGVtYWlsLmNvbXBvc2VlbmNvZGluZycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5jb21wb3NlZW5jb2RpbmcgaXNvLTg4NTktMSAmJgorCXdyaXRlX3NjcmlwdCBmYWtlLWVkaXRvci11dGY4IDw8LVxFT0YgJiYKKwllY2hvICJ1dGY4IGJvZHk6IMOgw6nDrMO2w7oiID4+IiQxIgorCUVPRgorCUdJVF9FRElUT1I9IlwiJChwd2QpL2Zha2UtZWRpdG9yLXV0ZjhcIiIgXAorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1jb21wb3NlLWVuY29kaW5nIGlzby04ODU5LTIgXAorCQktLWNvbXBvc2UgLS1zdWJqZWN0IGZvbyBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCSRwYXRjaGVzICYmCisJZ3JlcCAiXnV0ZjggYm9keSIgbXNndHh0MSAmJgorCWdyZXAgIl5Db250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9aXNvLTg4NTktMiIgbXNndHh0MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tY29tcG9zZS1lbmNvZGluZyBhZGRzIGNvcnJlY3QgTUlNRSBmb3Igc3ViamVjdCcgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlHSVRfRURJVE9SPSJcIiQocHdkKS9mYWtlLWVkaXRvclwiIiBcCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWNvbXBvc2UtZW5jb2RpbmcgaXNvLTg4NTktMiBcCisJCS0tY29tcG9zZSAtLXN1YmplY3QgdXRmOC1zw7xiasOrY3QgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQkkcGF0Y2hlcyAmJgorCWdyZXAgIl5mYWtlIGVkaXQiIG1zZ3R4dDEgJiYKKwlncmVwICJeU3ViamVjdDogPT9pc28tODg1OS0yP3E/dXRmOC1zPUMzPUJDYmo9QzM9QUJjdD89IiBtc2d0eHQxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnZGV0ZWN0cyBhbWJpZ3VvdXMgcmVmZXJlbmNlL2ZpbGUgY29uZmxpY3QnICcKKwllY2hvIG1hc3RlciA+bWFzdGVyICYmCisJZ2l0IGFkZCBtYXN0ZXIgJiYKKwlnaXQgY29tbWl0IC1tImFkZCBtYXN0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgLS1kcnktcnVuIG1hc3RlciAyPmVycm9ycyAmJgorCWdyZXAgZGlzYW1iaWd1YXRlIGVycm9ycworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2ZlZWQgdHdvIGZpbGVzJyAnCisJcm0gLWZyIG91dGRpciAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLTIgLW8gb3V0ZGlyICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQlvdXRkaXIvMDAwPy0qLnBhdGNoIDI+ZXJyb3JzID5vdXQgJiYKKwlncmVwICJeU3ViamVjdDogIiBvdXQgPnN1YmplY3RzICYmCisJdGVzdCAieiQoc2VkIC1uIC1lIDFwIHN1YmplY3RzKSIgPSAielN1YmplY3Q6IFtQQVRDSCAxLzJdIFNlY29uZC4iICYmCisJdGVzdCAieiQoc2VkIC1uIC1lIDJwIHN1YmplY3RzKSIgPSAielN1YmplY3Q6IFtQQVRDSCAyLzJdIGFkZCBtYXN0ZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnaW4tcmVwbHktdG8gYnV0IG5vIHRocmVhZGluZycgJworCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJLS1pbi1yZXBseS10bz0iPGluLXJlcGx5LWlkQGV4YW1wbGUuY29tPiIgXAorCQktLW5vLXRocmVhZCBcCisJCSRwYXRjaGVzIHwKKwlncmVwICJJbi1SZXBseS1UbzogPGluLXJlcGx5LWlkQGV4YW1wbGUuY29tPiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdubyBpbi1yZXBseS10byBhbmQgbm8gdGhyZWFkaW5nJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLW5vLXRocmVhZCBcCisJCSRwYXRjaGVzICRwYXRjaGVzID5zdGRvdXQgJiYKKwkhIGdyZXAgIkluLVJlcGx5LVRvOiAiIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3RocmVhZGluZyBidXQgbm8gY2hhaW4tcmVwbHktdG8nICcKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tdGhyZWFkIFwKKwkJLS1uby1jaGFpbi1yZXBseS10byBcCisJCSRwYXRjaGVzICRwYXRjaGVzID5zdGRvdXQgJiYKKwlncmVwICJJbi1SZXBseS1UbzogIiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwudG8gd29ya3MnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgc2VuZGVtYWlsLnRvICJTb21lYm9keSA8c29tZWJvZHlAZXguY29tPiIgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiVG86IFNvbWVib2R5IDxzb21lYm9keUBleC5jb20+IiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLW5vLXRvIG92ZXJyaWRlcyBzZW5kZW1haWwudG8nICcKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZHJ5LXJ1biBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLW5vLXRvIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiVG86IG5vYm9keUBleGFtcGxlLmNvbSIgc3Rkb3V0ICYmCisJISBncmVwICJUbzogU29tZWJvZHkgPHNvbWVib2R5QGV4LmNvbT4iIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5jYyB3b3JrcycgJworCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBzZW5kZW1haWwuY2MgIlNvbWVib2R5IDxzb21lYm9keUBleC5jb20+IiAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1kcnktcnVuIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJJHBhdGNoZXMgJHBhdGNoZXMgPnN0ZG91dCAmJgorCWdyZXAgIkNjOiBTb21lYm9keSA8c29tZWJvZHlAZXguY29tPiIgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1uby1jYyBvdmVycmlkZXMgc2VuZGVtYWlsLmNjJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS1uby1jYyBcCisJCS0tY2M9Ym9kaWVzQGV4YW1wbGUuY29tIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiQ2M6IGJvZGllc0BleGFtcGxlLmNvbSIgc3Rkb3V0ICYmCisJISBncmVwICJDYzogU29tZWJvZHkgPHNvbWVib2R5QGV4LmNvbT4iIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC5iY2Mgd29ya3MnICcKKwlnaXQgY29uZmlnIC0tcmVwbGFjZS1hbGwgc2VuZGVtYWlsLmJjYyAiT3RoZXIgPG90aGVyQGV4LmNvbT4iICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyIHJlbGF5LmV4YW1wbGUuY29tIFwKKwkJJHBhdGNoZXMgJHBhdGNoZXMgPnN0ZG91dCAmJgorCWdyZXAgIlJDUFQgVE86PG90aGVyQGV4LmNvbT4iIHN0ZG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tbm8tYmNjIG92ZXJyaWRlcyBzZW5kZW1haWwuYmNjJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS1uby1iY2MgXAorCQktLWJjYz1ib2RpZXNAZXhhbXBsZS5jb20gXAorCQktLXRvPW5vYm9keUBleGFtcGxlLmNvbSBcCisJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAorCQkkcGF0Y2hlcyAkcGF0Y2hlcyA+c3Rkb3V0ICYmCisJZ3JlcCAiUkNQVCBUTzo8Ym9kaWVzQGV4YW1wbGUuY29tPiIgc3Rkb3V0ICYmCisJISBncmVwICJSQ1BUIFRPOjxvdGhlckBleC5jb20+IiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdwYXRjaGVzIFRvIGhlYWRlcnMgYXJlIHVzZWQgYnkgZGVmYXVsdCcgJworCXBhdGNoPWBnaXQgZm9ybWF0LXBhdGNoIC0xIC0tdG89ImJvZGllc0BleGFtcGxlLmNvbSJgICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAkcGF0Y2giICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS1zbXRwLXNlcnZlciByZWxheS5leGFtcGxlLmNvbSBcCisJCSRwYXRjaCA+c3Rkb3V0ICYmCisJZ3JlcCAiUkNQVCBUTzo8Ym9kaWVzQGV4YW1wbGUuY29tPiIgc3Rkb3V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAncGF0Y2hlcyBUbyBoZWFkZXJzIGFyZSBhcHBlbmRlZCB0bycgJworCXBhdGNoPWBnaXQgZm9ybWF0LXBhdGNoIC0xIC0tdG89ImJvZGllc0BleGFtcGxlLmNvbSJgICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAkcGF0Y2giICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyIHJlbGF5LmV4YW1wbGUuY29tIFwKKwkJJHBhdGNoID5zdGRvdXQgJiYKKwlncmVwICJSQ1BUIFRPOjxib2RpZXNAZXhhbXBsZS5jb20+IiBzdGRvdXQgJiYKKwlncmVwICJSQ1BUIFRPOjxub2JvZHlAZXhhbXBsZS5jb20+IiBzdGRvdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdUbyBoZWFkZXJzIGZyb20gZmlsZXMgcmVzZXQgZWFjaCBwYXRjaCcgJworCXBhdGNoMT1gZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXRvPSJib2RpZXNAZXhhbXBsZS5jb20iYCAmJgorCXBhdGNoMj1gZ2l0IGZvcm1hdC1wYXRjaCAtMSAtLXRvPSJvdGhlckBleGFtcGxlLmNvbSIgSEVBRH5gICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAkcGF0Y2gxICYmIHJtICRwYXRjaDIiICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWRyeS1ydW4gXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz0ibm9ib2R5QGV4YW1wbGUuY29tIiBcCisJCS0tc210cC1zZXJ2ZXIgcmVsYXkuZXhhbXBsZS5jb20gXAorCQkkcGF0Y2gxICRwYXRjaDIgPnN0ZG91dCAmJgorCXRlc3QgJChncmVwIC1jICJSQ1BUIFRPOjxib2RpZXNAZXhhbXBsZS5jb20+IiBzdGRvdXQpID0gMSAmJgorCXRlc3QgJChncmVwIC1jICJSQ1BUIFRPOjxub2JvZHlAZXhhbXBsZS5jb20+IiBzdGRvdXQpID0gMiAmJgorCXRlc3QgJChncmVwIC1jICJSQ1BUIFRPOjxvdGhlckBleGFtcGxlLmNvbT4iIHN0ZG91dCkgPSAxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCitjYXQgPmVtYWlsLXVzaW5nLThiaXQgPDxcRU9GCitGcm9tIGZlNmVjYzY2ZWNlMzcxOThmZTVkYjkxZmEyZmM0MWQ5ZjRmZTVjYzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitNZXNzYWdlLUlkOiA8Ym9ndXMtbWVzc2FnZS1pZEBleGFtcGxlLmNvbT4KK0Zyb206IGF1dGhvckBleGFtcGxlLmNvbQorRGF0ZTogU2F0LCAxMiBKdW4gMjAxMCAxNTo1Mzo1OCArMDIwMAorU3ViamVjdDogc3ViamVjdCBnb2VzIGhlcmUKKworRGllc2VyIGRldXRzY2hlIFRleHQgZW50aMOkbHQgZWluZW4gVW1sYXV0IQorRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCisJZWNobyAiU3ViamVjdDogc3ViamVjdCBnb2VzIGhlcmUiID5leHBlY3RlZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ0FTQ0lJIHN1YmplY3QgaXMgbm90IFJGQzIwNDcgcXVvdGVkJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWVjaG8gYm9ndXMgfAorCWdpdCBzZW5kLWVtYWlsIC0tZnJvbT1hdXRob3JAZXhhbXBsZS5jb20gLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJCS0tOGJpdC1lbmNvZGluZz1VVEYtOCBcCisJCQllbWFpbC11c2luZy04Yml0ID5zdGRvdXQgJiYKKwlncmVwICJTdWJqZWN0IiBtc2d0eHQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKKwljYXQgPmNvbnRlbnQtdHlwZS1kZWNsIDw8LVxFT0YKKwlNSU1FLVZlcnNpb246IDEuMAorCUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorCUNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdhc2tzIGFib3V0IGFuZCBmaXhlcyA4Yml0IGVuY29kaW5ncycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwllY2hvIHwKKwlnaXQgc2VuZC1lbWFpbCAtLWZyb209YXV0aG9yQGV4YW1wbGUuY29tIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCQllbWFpbC11c2luZy04Yml0ID5zdGRvdXQgJiYKKwlncmVwICJkbyBub3QgZGVjbGFyZSBhIENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmciIHN0ZG91dCAmJgorCWdyZXAgZW1haWwtdXNpbmctOGJpdCBzdGRvdXQgJiYKKwlncmVwICJXaGljaCA4Yml0IGVuY29kaW5nIiBzdGRvdXQgJiYKKwllZ3JlcCAiQ29udGVudHxNSU1FIiBtc2d0eHQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgY29udGVudC10eXBlLWRlY2wKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZW5kZW1haWwuOGJpdEVuY29kaW5nIHdvcmtzJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmFzc3VtZThiaXRFbmNvZGluZyBVVEYtOCAmJgorCWVjaG8gYm9ndXMgfAorCWdpdCBzZW5kLWVtYWlsIC0tZnJvbT1hdXRob3JAZXhhbXBsZS5jb20gLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJCWVtYWlsLXVzaW5nLThiaXQgPnN0ZG91dCAmJgorCWVncmVwICJDb250ZW50fE1JTUUiIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGFjdHVhbCBjb250ZW50LXR5cGUtZGVjbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tOGJpdC1lbmNvZGluZyBvdmVycmlkZXMgc2VuZGVtYWlsLjhiaXRFbmNvZGluZycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC5hc3N1bWU4Yml0RW5jb2RpbmcgImJvZ3VzIHRvbyIgJiYKKwllY2hvIGJvZ3VzIHwKKwlnaXQgc2VuZC1lbWFpbCAtLWZyb209YXV0aG9yQGV4YW1wbGUuY29tIC0tdG89bm9ib2R5QGV4YW1wbGUuY29tIFwKKwkJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCQktLThiaXQtZW5jb2Rpbmc9VVRGLTggXAorCQkJZW1haWwtdXNpbmctOGJpdCA+c3Rkb3V0ICYmCisJZWdyZXAgIkNvbnRlbnR8TUlNRSIgbXNndHh0MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgYWN0dWFsIGNvbnRlbnQtdHlwZS1kZWNsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCisJY2F0ID5lbWFpbC11c2luZy04Yml0IDw8LVxFT0YKKwlGcm9tIGZlNmVjYzY2ZWNlMzcxOThmZTVkYjkxZmEyZmM0MWQ5ZjRmZTVjYzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCisJTWVzc2FnZS1JZDogPGJvZ3VzLW1lc3NhZ2UtaWRAZXhhbXBsZS5jb20+CisJRnJvbTogYXV0aG9yQGV4YW1wbGUuY29tCisJRGF0ZTogU2F0LCAxMiBKdW4gMjAxMCAxNTo1Mzo1OCArMDIwMAorCVN1YmplY3Q6IERpZXNlciBCZXRyZWZmIGVudGjDpGx0IGF1Y2ggZWluZW4gVW1sYXV0IQorCisJTm90aGluZyB0byBzZWUgaGVyZS4KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YKKwlTdWJqZWN0OiA9P1VURi04P3E/RGllc2VyPTIwQmV0cmVmZj0yMGVudGg9QzM9QTRsdD0yMGF1Y2g9MjBlaW5lbj0yMFVtbGF1dCE/PQorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tOGJpdC1lbmNvZGluZyBhbHNvIHRyZWF0cyBzdWJqZWN0JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWVjaG8gYm9ndXMgfAorCWdpdCBzZW5kLWVtYWlsIC0tZnJvbT1hdXRob3JAZXhhbXBsZS5jb20gLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJCS0tOGJpdC1lbmNvZGluZz1VVEYtOCBcCisJCQllbWFpbC11c2luZy04Yml0ID5zdGRvdXQgJiYKKwlncmVwICJTdWJqZWN0IiBtc2d0eHQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKKwljYXQgPmVtYWlsLXVzaW5nLThiaXQgPDwtXEVPRgorCUZyb20gZmU2ZWNjNjZlY2UzNzE5OGZlNWRiOTFmYTJmYzQxZDlmNGZlNWNjNCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKKwlNZXNzYWdlLUlkOiA8Ym9ndXMtbWVzc2FnZS1pZEBleGFtcGxlLmNvbT4KKwlGcm9tOiBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPgorCURhdGU6IFNhdCwgMTIgSnVuIDIwMTAgMTU6NTM6NTggKzAyMDAKKwlDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKKwlTdWJqZWN0OiBOb3RoaW5nIHRvIHNlZSBoZXJlLgorCisJRGllc2VyIEJldHJlZmYgZW50aMOkbHQgYXVjaCBlaW5lbiBVbWxhdXQhCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLnRyYW5zZmVyZW5jb2Rpbmc9N2JpdCBmYWlscyBvbiA4Yml0IGRhdGEnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwudHJhbnNmZXJFbmNvZGluZyA3Yml0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgXAorCQktLXRyYW5zZmVyLWVuY29kaW5nPTdiaXQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQllbWFpbC11c2luZy04Yml0IFwKKwkJMj5lcnJvcnMgPm91dCAmJgorCWdyZXAgImNhbm5vdCBzZW5kIG1lc3NhZ2UgYXMgN2JpdCIgZXJyb3JzICYmCisJdGVzdCAteiAiJChscyBtc2d0eHQqKSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLXRyYW5zZmVyLWVuY29kaW5nIG92ZXJyaWRlcyBzZW5kZW1haWwudHJhbnNmZXJFbmNvZGluZycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgY29uZmlnIHNlbmRlbWFpbC50cmFuc2ZlckVuY29kaW5nIDhiaXQgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc2VuZC1lbWFpbCBcCisJCS0tdHJhbnNmZXItZW5jb2Rpbmc9N2JpdCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCWVtYWlsLXVzaW5nLThiaXQgXAorCQkyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiY2Fubm90IHNlbmQgbWVzc2FnZSBhcyA3Yml0IiBlcnJvcnMgJiYKKwl0ZXN0IC16ICIkKGxzIG1zZ3R4dCopIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NlbmRlbWFpbC50cmFuc2ZlcmVuY29kaW5nPThiaXQnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLXRyYW5zZmVyLWVuY29kaW5nPThiaXQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQllbWFpbC11c2luZy04Yml0IFwKKwkJMj5lcnJvcnMgPm91dCAmJgorCXNlZCAnMSwvXiQvZCcgbXNndHh0MSA+YWN0dWFsICYmCisJc2VkICcxLC9eJC9kJyBlbWFpbC11c2luZy04Yml0ID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCURpZXNlciBCZXRyZWZmIGVudGg9QzM9QTRsdCBhdWNoIGVpbmVuIFVtbGF1dCEKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICc4LWJpdCBhbmQgc2VuZGVtYWlsLnRyYW5zZmVyZW5jb2Rpbmc9cXVvdGVkLXByaW50YWJsZScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tdHJhbnNmZXItZW5jb2Rpbmc9cXVvdGVkLXByaW50YWJsZSBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCWVtYWlsLXVzaW5nLThiaXQgXAorCQkyPmVycm9ycyA+b3V0ICYmCisJc2VkICcxLC9eJC9kJyBtc2d0eHQxID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YKKwlSR2xsYzJWeUlFSmxkSEpsWm1ZZ1pXNTBhTU9rYkhRZ1lYVmphQ0JsYVc1bGJpQlZiV3hoZFhRaENnPT0KKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICc4LWJpdCBhbmQgc2VuZGVtYWlsLnRyYW5zZmVyZW5jb2Rpbmc9YmFzZTY0JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS10cmFuc2Zlci1lbmNvZGluZz1iYXNlNjQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQllbWFpbC11c2luZy04Yml0IFwKKwkJMj5lcnJvcnMgPm91dCAmJgorCXNlZCAnMSwvXiQvZCcgbXNndHh0MSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0JyAnCisJY2F0ID5lbWFpbC11c2luZy1xcCA8PC1cRU9GCisJRnJvbSBmZTZlY2M2NmVjZTM3MTk4ZmU1ZGI5MWZhMmZjNDFkOWY0ZmU1Y2M0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorCU1lc3NhZ2UtSWQ6IDxib2d1cy1tZXNzYWdlLWlkQGV4YW1wbGUuY29tPgorCUZyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CisJRGF0ZTogU2F0LCAxMiBKdW4gMjAxMCAxNTo1Mzo1OCArMDIwMAorCU1JTUUtVmVyc2lvbjogMS4wCisJQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCUNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOAorCVN1YmplY3Q6IE5vdGhpbmcgdG8gc2VlIGhlcmUuCisKKwlEaWVzZXIgQmV0cmVmZiBlbnRoPUMzPUE0bHQgYXVjaCBlaW5lbiBVbWxhdXQhCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY29udmVydCBmcm9tIHF1b3RlZC1wcmludGFibGUgdG8gYmFzZTY0JyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS10cmFuc2Zlci1lbmNvZGluZz1iYXNlNjQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQllbWFpbC11c2luZy1xcCBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwlzZWQgJzEsL14kL2QnIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgIgordHIgLWQgJ1xcMDE1JyB8IHRyICclJyAnXFwwMTUnID5lbWFpbC11c2luZy1jcmxmIDw8RU9GCitGcm9tIGZlNmVjYzY2ZWNlMzcxOThmZTVkYjkxZmEyZmM0MWQ5ZjRmZTVjYzQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitNZXNzYWdlLUlkOiA8Ym9ndXMtbWVzc2FnZS1pZEBleGFtcGxlLmNvbT4KK0Zyb206IEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+CitEYXRlOiBTYXQsIDEyIEp1biAyMDEwIDE1OjUzOjU4ICswMjAwCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKK1N1YmplY3Q6IE5vdGhpbmcgdG8gc2VlIGhlcmUuCisKK0xvb2ssIEkgaGF2ZSBhIENSTEYgYW5kIGFuID0gc2lnbiElCitFT0YKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdzZXR1cCBleHBlY3QnICcKKwljYXQgPmV4cGVjdGVkIDw8LVxFT0YKKwlMb29rLCBJIGhhdmUgYSBDUkxGIGFuZCBhbiA9M0Qgc2lnbiE9MEQKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdDUkxGIGFuZCBzZW5kZW1haWwudHJhbnNmZXJlbmNvZGluZz1xdW90ZWQtcHJpbnRhYmxlJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS10cmFuc2Zlci1lbmNvZGluZz1xdW90ZWQtcHJpbnRhYmxlIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJZW1haWwtdXNpbmctY3JsZiBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwlzZWQgJzEsL14kL2QnIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3NldHVwIGV4cGVjdCcgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRgorCVRHOXZheXdnU1NCb1lYWmxJR0VnUTFKTVJpQmhibVFnWVc0Z1BTQnphV2R1SVEwSworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ0NSTEYgYW5kIHNlbmRlbWFpbC50cmFuc2ZlcmVuY29kaW5nPWJhc2U2NCcgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tdHJhbnNmZXItZW5jb2Rpbmc9YmFzZTY0IFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJZW1haWwtdXNpbmctY3JsZiBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwlzZWQgJzEsL14kL2QnIG1zZ3R4dDEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCisKKyMgTm90ZSB0aGF0IHRoZSBwYXRjaGVzIGluIHRoaXMgdGVzdCBhcmUgZGVsaWJlcmF0ZWx5IG91dCBvZiBvcmRlcjsgd2UKKyMgd2FudCB0byBtYWtlIHN1cmUgaXQgd29ya3MgZXZlbiBpZiB0aGUgY292ZXItbGV0dGVyIGlzIG5vdCBpbiB0aGUKKyMgZmlyc3QgbWFpbC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAncmVmdXNpbmcgdG8gc2VuZCBjb3ZlciBsZXR0ZXIgdGVtcGxhdGUnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJcm0gLWZyIG91dGRpciAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1jb3Zlci1sZXR0ZXIgLTIgLW8gb3V0ZGlyICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlvdXRkaXIvMDAwMi0qLnBhdGNoIFwKKwkJb3V0ZGlyLzAwMDAtKi5wYXRjaCBcCisJCW91dGRpci8wMDAxLSoucGF0Y2ggXAorCQkyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiU1VCSkVDVCBIRVJFIiBlcnJvcnMgJiYKKwl0ZXN0IC16ICIkKGxzIG1zZ3R4dCopIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJy0tZm9yY2Ugc2VuZHMgY292ZXIgbGV0dGVyIHRlbXBsYXRlIGFueXdheScgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwlybSAtZnIgb3V0ZGlyICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLWNvdmVyLWxldHRlciAtMiAtbyBvdXRkaXIgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZm9yY2UgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1ub2JvZHlAZXhhbXBsZS5jb20gXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlvdXRkaXIvMDAwMi0qLnBhdGNoIFwKKwkJb3V0ZGlyLzAwMDAtKi5wYXRjaCBcCisJCW91dGRpci8wMDAxLSoucGF0Y2ggXAorCQkyPmVycm9ycyA+b3V0ICYmCisJISBncmVwICJTVUJKRUNUIEhFUkUiIGVycm9ycyAmJgorCXRlc3QgLW4gIiQobHMgbXNndHh0KikiCisnCisKK3Rlc3RfY292ZXJfYWRkcmVzc2VzICgpIHsKKwloZWFkZXI9IiQxIgorCXNoaWZ0CisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCXJtIC1mciBvdXRkaXIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tY292ZXItbGV0dGVyIC0yIC1vIG91dGRpciAmJgorCWNvdmVyPWBlY2hvIG91dGRpci8wMDAwLSoucGF0Y2hgICYmCisJbXYgJGNvdmVyIGNvdmVyLXRvLWVkaXQucGF0Y2ggJiYKKwlwZXJsIC1wZSAicy9eRnJvbTovJGhlYWRlcjogZXh0cmFcQGFkZHJlc3MuY29tXG5Gcm9tOi8iIGNvdmVyLXRvLWVkaXQucGF0Y2ggPiIkY292ZXIiICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZvcmNlIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tbm8tdG8gLS1uby1jYyBcCisJCSIkQCIgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlvdXRkaXIvMDAwMC0qLnBhdGNoIFwKKwkJb3V0ZGlyLzAwMDEtKi5wYXRjaCBcCisJCW91dGRpci8wMDAyLSoucGF0Y2ggXAorCQkyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiXiRoZWFkZXI6IGV4dHJhQGFkZHJlc3MuY29tIiBtc2d0eHQxID50bzEgJiYKKwlncmVwICJeJGhlYWRlcjogZXh0cmFAYWRkcmVzcy5jb20iIG1zZ3R4dDIgPnRvMiAmJgorCWdyZXAgIl4kaGVhZGVyOiBleHRyYUBhZGRyZXNzLmNvbSIgbXNndHh0MyA+dG8zICYmCisJdGVzdF9saW5lX2NvdW50ID0gMSB0bzEgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHRvMiAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgdG8zCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAndG8tY292ZXIgYWRkcyBUbyB0byBhbGwgbWFpbCcgJworCXRlc3RfY292ZXJfYWRkcmVzc2VzICJUbyIgLS10by1jb3ZlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2NjLWNvdmVyIGFkZHMgQ2MgdG8gYWxsIG1haWwnICcKKwl0ZXN0X2NvdmVyX2FkZHJlc3NlcyAiQ2MiIC0tY2MtY292ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICd0b2NvdmVyIGFkZHMgVG8gdG8gYWxsIG1haWwnICcKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwudG9jb3ZlciB0cnVlICYmCisJdGVzdF9jb3Zlcl9hZGRyZXNzZXMgIlRvIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ2NjY292ZXIgYWRkcyBDYyB0byBhbGwgbWFpbCcgJworCXRlc3RfY29uZmlnIHNlbmRlbWFpbC5jY2NvdmVyIHRydWUgJiYKKwl0ZXN0X2NvdmVyX2FkZHJlc3NlcyAiQ2MiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGU9bWFpbHJjJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWVjaG8gImFsaWFzIHNiZCAgc29tZWJvZHlAZXhhbXBsZS5vcmciID4ubWFpbHJjICYmCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIHNlbmRlbWFpbC5hbGlhc2VzZmlsZSAiJChwd2QpLy5tYWlscmMiICYmCisJZ2l0IGNvbmZpZyBzZW5kZW1haWwuYWxpYXNmaWxldHlwZSBtYWlscmMgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvPXNiZCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCW91dGRpci8wMDAxLSoucGF0Y2ggXAorCQkyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiXiFzb21lYm9keUBleGFtcGxlXC5vcmchJCIgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2VuZGVtYWlsLmFsaWFzZmlsZT1+Ly5tYWlscmMnICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZWNobyAiYWxpYXMgc2JkICBzb21lb25lQGV4YW1wbGUub3JnIiA+IiRIT01FLy5tYWlscmMiICYmCisJZ2l0IGNvbmZpZyAtLXJlcGxhY2UtYWxsIHNlbmRlbWFpbC5hbGlhc2VzZmlsZSAifi8ubWFpbHJjIiAmJgorCWdpdCBjb25maWcgc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGUgbWFpbHJjICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1zYmQgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlvdXRkaXIvMDAwMS0qLnBhdGNoIFwKKwkJMj5lcnJvcnMgPm91dCAmJgorCWdyZXAgIl4hc29tZW9uZUBleGFtcGxlXC5vcmchJCIgY29tbWFuZGxpbmUxCisnCisKK3Rlc3Rfc2VuZG1haWxfYWxpYXNlcyAoKSB7CisJbXNnPSIkMSIgJiYgc2hpZnQgJiYKKwlleHBlY3Q9IiRAIiAmJgorCWNhdCA+LnRtcC1lbWFpbC1hbGlhc2VzICYmCisKKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgIiRtc2ciICcKKwkJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJiBybSAtZnIgb3V0ZGlyICYmCisJCWdpdCBmb3JtYXQtcGF0Y2ggLTEgLW8gb3V0ZGlyICYmCisJCWdpdCBjb25maWcgLS1yZXBsYWNlLWFsbCBzZW5kZW1haWwuYWxpYXNlc2ZpbGUgXAorCQkJIiQocHdkKS8udG1wLWVtYWlsLWFsaWFzZXMiICYmCisJCWdpdCBjb25maWcgc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGUgc2VuZG1haWwgJiYKKwkJZ2l0IHNlbmQtZW1haWwgXAorCQkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCQktLXRvPWFsaWNlIC0tdG89YmNncnAgXAorCQkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJCW91dGRpci8wMDAxLSoucGF0Y2ggXAorCQkJMj5lcnJvcnMgPm91dCAmJgorCQlmb3IgaSBpbiAkZXhwZWN0CisJCWRvCisJCQlncmVwICJeISRpISQiIGNvbW1hbmRsaW5lMSB8fCByZXR1cm4gMQorCQlkb25lCisJJworfQorCit0ZXN0X3NlbmRtYWlsX2FsaWFzZXMgJ3NlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlPXNlbmRtYWlsJyBcCisJJ2F3b2xAZXhhbXBsZVwuY29tJyBcCisJJ2JvYkBleGFtcGxlXC5jb20nIFwKKwknY2hsb2VAZXhhbXBsZVwuY29tJyBcCisJJ29AZXhhbXBsZVwuY29tJyA8PC1cRU9GCisJYWxpY2U6IEFsaWNlIFcgTGFuZCA8YXdvbEBleGFtcGxlLmNvbT4KKwlib2I6IFJvYmVydCBCb2JieXRvbiA8Ym9iQGV4YW1wbGUuY29tPgorCSMgdGhpcyBpcyBhIGNvbW1lbnQKKwkgICAjIHRoaXMgaXMgYWxzbyBhIGNvbW1lbnQKKwljaGxvZTogY2hsb2VAZXhhbXBsZS5jb20KKwlhYmdyb3VwOiBhbGljZSwgYm9iCisJYmNncnA6IGJvYiwgY2hsb2UsIE90aGVyIDxvQGV4YW1wbGUuY29tPgorCUVPRgorCit0ZXN0X3NlbmRtYWlsX2FsaWFzZXMgJ3NlbmRtYWlsIGFsaWFzZXMgbGluZSBmb2xkaW5nJyBcCisJYWxpY2UxIFwKKwlib2IxIGJvYjIgXAorCWNodWNrMSBjaHVjazIgXAorCWRhcmxhMSBkYXJsYTIgZGFybGEzIFwKKwllbHRvbjEgZWx0b24yIGVsdG9uMyBcCisJZnJlZDEgZnJlZDIgXAorCWdyZWcxIDw8LVxFT0YKKwlhbGljZTogYWxpY2UxCisJYm9iOiBib2IxLFwKKwlib2IyCisJY2h1Y2s6IGNodWNrMSwKKwkgICAgY2h1Y2syCisJZGFybGE6IGRhcmxhMSxcCisJZGFybGEyLAorCSAgICBkYXJsYTMKKwllbHRvbjogZWx0b24xLAorCSAgICBlbHRvbjIsXAorCWVsdG9uMworCWZyZWQ6IGZyZWQxLFwKKwkgICAgZnJlZDIKKwlncmVnOiBncmVnMQorCWJjZ3JwOiBib2IsIGNodWNrLCBkYXJsYSwgZWx0b24sIGZyZWQsIGdyZWcKKwlFT0YKKwordGVzdF9zZW5kbWFpbF9hbGlhc2VzICdzZW5kbWFpbCBhbGlhc2VzIHRvbGVyYXRlIGJvZ3VzIGxpbmUgZm9sZGluZycgXAorCWFsaWNlMSBib2IxIDw8LVxFT0YKKwkgICAgYWxpY2U6IGFsaWNlMQorCWJjZ3JwOiBib2IxXAorCUVPRgorCit0ZXN0X3NlbmRtYWlsX2FsaWFzZXMgJ3NlbmRtYWlsIGFsaWFzZXMgZW1wdHknIGFsaWNlIGJjZ3JwIDw8LVxFT0YKKwlFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdhbGlhcyBzdXBwb3J0IGluIFRvIGhlYWRlcicgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwllY2hvICJhbGlhcyBzYmQgIHNvbWVvbmVAZXhhbXBsZS5vcmciID4ubWFpbHJjICYmCisJdGVzdF9jb25maWcgc2VuZGVtYWlsLmFsaWFzZXNmaWxlICIubWFpbHJjIiAmJgorCXRlc3RfY29uZmlnIHNlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlIG1haWxyYyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgLS10bz1zYmQgPmFsaWFzZWQucGF0Y2ggJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXNtdHAtc2VydmVyPSIkKHB3ZCkvZmFrZS5zZW5kbWFpbCIgXAorCQlhbGlhc2VkLnBhdGNoIFwKKwkJMj5lcnJvcnMgPm91dCAmJgorCWdyZXAgIl4hc29tZW9uZUBleGFtcGxlXC5vcmchJCIgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnYWxpYXMgc3VwcG9ydCBpbiBDYyBoZWFkZXInICcKKwljbGVhbl9mYWtlX3NlbmRtYWlsICYmCisJZWNobyAiYWxpYXMgc2JkICBzb21lb25lQGV4YW1wbGUub3JnIiA+Lm1haWxyYyAmJgorCXRlc3RfY29uZmlnIHNlbmRlbWFpbC5hbGlhc2VzZmlsZSAiLm1haWxyYyIgJiYKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwuYWxpYXNmaWxldHlwZSBtYWlscmMgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0tc3Rkb3V0IC0xIC0tY2M9c2JkID5hbGlhc2VkLnBhdGNoICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJYWxpYXNlZC5wYXRjaCBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwlncmVwICJeIXNvbWVvbmVAZXhhbXBsZVwub3JnISQiIGNvbW1hbmRsaW5lMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICRQUkVSRVEgJ3RvY21kIHdvcmtzIHdpdGggYWxpYXNlcycgJworCWNsZWFuX2Zha2Vfc2VuZG1haWwgJiYKKwllY2hvICJhbGlhcyBzYmQgIHNvbWVvbmVAZXhhbXBsZS5vcmciID4ubWFpbHJjICYmCisJdGVzdF9jb25maWcgc2VuZGVtYWlsLmFsaWFzZXNmaWxlICIubWFpbHJjIiAmJgorCXRlc3RfY29uZmlnIHNlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlIG1haWxyYyAmJgorCWdpdCBmb3JtYXQtcGF0Y2ggLS1zdGRvdXQgLTEgPnRvY21kLnBhdGNoICYmCisJZWNobyB0b2NtZC0tc2JkID4+dG9jbWQucGF0Y2ggJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJCS0tZnJvbT0iRXhhbXBsZSA8bm9ib2R5QGV4YW1wbGUuY29tPiIgXAorCQktLXRvLWNtZD0uL3RvY21kLXNlZCBcCisJCS0tc210cC1zZXJ2ZXI9IiQocHdkKS9mYWtlLnNlbmRtYWlsIiBcCisJCXRvY21kLnBhdGNoIFwKKwkJMj5lcnJvcnMgPm91dCAmJgorCWdyZXAgIl4hc29tZW9uZUBleGFtcGxlXC5vcmchJCIgY29tbWFuZGxpbmUxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnY2NjbWQgd29ya3Mgd2l0aCBhbGlhc2VzJyAnCisJY2xlYW5fZmFrZV9zZW5kbWFpbCAmJgorCWVjaG8gImFsaWFzIHNiZCAgc29tZW9uZUBleGFtcGxlLm9yZyIgPi5tYWlscmMgJiYKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwuYWxpYXNlc2ZpbGUgIi5tYWlscmMiICYmCisJdGVzdF9jb25maWcgc2VuZGVtYWlsLmFsaWFzZmlsZXR5cGUgbWFpbHJjICYmCisJZ2l0IGZvcm1hdC1wYXRjaCAtLXN0ZG91dCAtMSA+Y2NjbWQucGF0Y2ggJiYKKwllY2hvIGNjY21kLS1zYmQgPj5jY2NtZC5wYXRjaCAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwkJLS1mcm9tPSJFeGFtcGxlIDxub2JvZHlAZXhhbXBsZS5jb20+IiBcCisJCS0tY2MtY21kPS4vY2NjbWQtc2VkIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJY2NjbWQucGF0Y2ggXAorCQkyPmVycm9ycyA+b3V0ICYmCisJZ3JlcCAiXiFzb21lb25lQGV4YW1wbGVcLm9yZyEkIiBjb21tYW5kbGluZTEKKycKKworZG9feG1haWxlcl90ZXN0ICgpIHsKKwlleHBlY3RlZD0kMSBwYXJhbXM9JDIgJiYKKwlnaXQgZm9ybWF0LXBhdGNoIC0xICYmCisJZ2l0IHNlbmQtZW1haWwgXAorCQktLWZyb209IkV4YW1wbGUgPG5vYm9keUBleGFtcGxlLmNvbT4iIFwKKwkJLS10bz1zb21lb25lQGV4YW1wbGUuY29tIFwKKwkJLS1zbXRwLXNlcnZlcj0iJChwd2QpL2Zha2Uuc2VuZG1haWwiIFwKKwkJJHBhcmFtcyBcCisJCTAwMDEtKi5wYXRjaCBcCisJCTI+ZXJyb3JzID5vdXQgJiYKKwl7IGdyZXAgJ15YLU1haWxlcjonIG91dCB8fCA6OyB9ID5tYWlsZXIgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAkZXhwZWN0ZWQgbWFpbGVyCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1bbm8tXXhtYWlsZXIgd2l0aG91dCBhbnkgY29uZmlndXJhdGlvbicgJworCWRvX3htYWlsZXJfdGVzdCAxICItLXhtYWlsZXIiICYmCisJZG9feG1haWxlcl90ZXN0IDAgIi0tbm8teG1haWxlciIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICctLVtuby1deG1haWxlciB3aXRoIHNlbmRlbWFpbC54bWFpbGVyPXRydWUnICcKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwueG1haWxlciB0cnVlICYmCisJZG9feG1haWxlcl90ZXN0IDEgIiIgJiYKKwlkb194bWFpbGVyX3Rlc3QgMCAiLS1uby14bWFpbGVyIiAmJgorCWRvX3htYWlsZXJfdGVzdCAxICItLXhtYWlsZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnLS1bbm8tXXhtYWlsZXIgd2l0aCBzZW5kZW1haWwueG1haWxlcj1mYWxzZScgJworCXRlc3RfY29uZmlnIHNlbmRlbWFpbC54bWFpbGVyIGZhbHNlICYmCisJZG9feG1haWxlcl90ZXN0IDAgIiIgJiYKKwlkb194bWFpbGVyX3Rlc3QgMCAiLS1uby14bWFpbGVyIiAmJgorCWRvX3htYWlsZXJfdGVzdCAxICItLXhtYWlsZXIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJFBSRVJFUSAnc2V0dXAgZXhwZWN0ZWQtbGlzdCcgJworCWdpdCBzZW5kLWVtYWlsIFwKKwktLWRyeS1ydW4gXAorCS0tZnJvbT0iRXhhbXBsZSA8ZnJvbUBleGFtcGxlLmNvbT4iIFwKKwktLXRvPSJUbyAxIDx0bzFAZXhhbXBsZS5jb20+IiBcCisJLS10bz0idG8yQGV4YW1wbGUuY29tIiBcCisJLS10bz0idG8zQGV4YW1wbGUuY29tIiBcCisJLS1jYz0iQ2MgMSA8Y2MxQGV4YW1wbGUuY29tPiIgXAorCS0tY2M9IkNjMiA8Y2MyQGV4YW1wbGUuY29tPiIgXAorCS0tYmNjPSJiY2MxQGV4YW1wbGUuY29tIiBcCisJLS1iY2M9ImJjYzJAZXhhbXBsZS5jb20iIFwKKwkwMDAxLWFkZC1tYXN0ZXIucGF0Y2ggfCByZXBsYWNlX3ZhcmlhYmxlX2ZpZWxkcyBcCisJPmV4cGVjdGVkLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICd1c2UgZW1haWwgbGlzdCBpbiAtLWNjIC0tdG8gYW5kIC0tYmNjJyAnCisJZ2l0IHNlbmQtZW1haWwgXAorCS0tZHJ5LXJ1biBcCisJLS1mcm9tPSJFeGFtcGxlIDxmcm9tQGV4YW1wbGUuY29tPiIgXAorCS0tdG89IlRvIDEgPHRvMUBleGFtcGxlLmNvbT4sIHRvMkBleGFtcGxlLmNvbSIgXAorCS0tdG89InRvM0BleGFtcGxlLmNvbSIgXAorCS0tY2M9IkNjIDEgPGNjMUBleGFtcGxlLmNvbT4sIENjMiA8Y2MyQGV4YW1wbGUuY29tPiIgXAorCS0tYmNjPSJiY2MxQGV4YW1wbGUuY29tLCBiY2MyQGV4YW1wbGUuY29tIiBcCisJMDAwMS1hZGQtbWFzdGVyLnBhdGNoIHwgcmVwbGFjZV92YXJpYWJsZV9maWVsZHMgXAorCT5hY3R1YWwtbGlzdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWxpc3QgYWN0dWFsLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdhbGlhc2VzIHdvcmsgd2l0aCBlbWFpbCBsaXN0JyAnCisJZWNobyAiYWxpYXMgdG8yIHRvMkBleGFtcGxlLmNvbSIgPi5tdXR0ICYmCisJZWNobyAiYWxpYXMgY2MxIENjIDEgPGNjMUBleGFtcGxlLmNvbT4iID4+Lm11dHQgJiYKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwuYWxpYXNlc2ZpbGUgIi5tdXR0IiAmJgorCXRlc3RfY29uZmlnIHNlbmRlbWFpbC5hbGlhc2ZpbGV0eXBlIG11dHQgJiYKKwlnaXQgc2VuZC1lbWFpbCBcCisJLS1kcnktcnVuIFwKKwktLWZyb209IkV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+IiBcCisJLS10bz0iVG8gMSA8dG8xQGV4YW1wbGUuY29tPiwgdG8yLCB0bzNAZXhhbXBsZS5jb20iIFwKKwktLWNjPSJjYzEsIENjMiA8Y2MyQGV4YW1wbGUuY29tPiIgXAorCS0tYmNjPSJiY2MxQGV4YW1wbGUuY29tLCBiY2MyQGV4YW1wbGUuY29tIiBcCisJMDAwMS1hZGQtbWFzdGVyLnBhdGNoIHwgcmVwbGFjZV92YXJpYWJsZV9maWVsZHMgXAorCT5hY3R1YWwtbGlzdCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLWxpc3QgYWN0dWFsLWxpc3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAkUFJFUkVRICdsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgcmVtb3ZlZCcgJworCWVjaG8gImFsaWFzIHRvMiB0bzJAZXhhbXBsZS5jb20iID4ubXV0dCAmJgorCWVjaG8gImFsaWFzIGNjMSBDYyAxIDxjYzFAZXhhbXBsZS5jb20+IiA+Pi5tdXR0ICYmCisJdGVzdF9jb25maWcgc2VuZGVtYWlsLmFsaWFzZXNmaWxlICIubXV0dCIgJiYKKwl0ZXN0X2NvbmZpZyBzZW5kZW1haWwuYWxpYXNmaWxldHlwZSBtdXR0ICYmCisJVE8xPSQoZWNobyAiUVRvIDEgPHRvMUBleGFtcGxlLmNvbT4iIHwgcV90b190YWIpICYmCisJVE8yPSQoZWNobyAiUVp0bzIiIHwgcXpfdG9fdGFiX3NwYWNlKSAmJgorCUNDMT0kKGVjaG8gImNjMSIgfCBhcHBlbmRfY3IpICYmCisJQkNDMT0kKGVjaG8gIlEgYmNjMUBleGFtcGxlLmNvbSBRIiB8IHFfdG9fbnVsKSAmJgorCWdpdCBzZW5kLWVtYWlsIFwKKwktLWRyeS1ydW4gXAorCS0tZnJvbT0iCUV4YW1wbGUgPGZyb21AZXhhbXBsZS5jb20+IiBcCisJLS10bz0iJFRPMSIgXAorCS0tdG89IiRUTzIiIFwKKwktLXRvPSIgIHRvM0BleGFtcGxlLmNvbSAgICIgXAorCS0tY2M9IiRDQzEiIFwKKwktLWNjPSJDYzIgPGNjMkBleGFtcGxlLmNvbT4iIFwKKwktLWJjYz0iJEJDQzEiIFwKKwktLWJjYz0iYmNjMkBleGFtcGxlLmNvbSIgXAorCTAwMDEtYWRkLW1hc3Rlci5wYXRjaCB8IHJlcGxhY2VfdmFyaWFibGVfZmllbGRzIFwKKwk+YWN0dWFsLWxpc3QgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZC1saXN0IGFjdHVhbC1saXN0CisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTAwMi1jb2x1bW4uc2ggYi90L3Q5MDAyLWNvbHVtbi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OTk4MzUyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTAwMi1jb2x1bW4uc2gKQEAgLTAsMCArMSwxODAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgY29sdW1uJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisJY2F0ID5saXN0YSA8PFxFT0YKK29uZQordHdvCit0aHJlZQorZm91cgorZml2ZQorc2l4CitzZXZlbgorZWlnaHQKK25pbmUKK3RlbgorZWxldmVuCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbmV2ZXInICcKKwlnaXQgY29sdW1uIC0taW5kZW50PVogLS1tb2RlPW5ldmVyIDxsaXN0YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgbGlzdGEgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fsd2F5cycgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitab25lCitadHdvCitadGhyZWUKK1pmb3VyCitaZml2ZQorWnNpeAorWnNldmVuCitaZWlnaHQKK1puaW5lCitadGVuCitaZWxldmVuCitFT0YKKwlnaXQgY29sdW1uIC0taW5kZW50PVogLS1tb2RlPXBsYWluIDxsaXN0YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzgwIGNvbHVtbnMnICcKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorb25lICAgIHR3byAgICB0aHJlZSAgZm91ciAgIGZpdmUgICBzaXggICAgc2V2ZW4gIGVpZ2h0ICBuaW5lICAgdGVuICAgIGVsZXZlbgorRU9GCisJQ09MVU1OUz04MCBnaXQgY29sdW1uIC0tbW9kZT1jb2x1bW4gPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID5leHBlY3RlZCA8PFxFT0YKK29uZQordHdvCit0aHJlZQorZm91cgorZml2ZQorc2l4CitzZXZlbgorZWlnaHQKK25pbmUKK3RlbgorZWxldmVuCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBDT0xVTU5TX0NBTl9CRV8xICdDT0xVTU5TID0gMScgJworCUNPTFVNTlM9MSBnaXQgY29sdW1uIC0tbW9kZT1jb2x1bW4gPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lkdGggPSAxJyAnCisJZ2l0IGNvbHVtbiAtLW1vZGU9Y29sdW1uIC0td2lkdGg9MSA8bGlzdGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCitDT0xVTU5TPTIwCitleHBvcnQgQ09MVU1OUworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyMCBjb2x1bW5zJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK29uZSAgICBzZXZlbgordHdvICAgIGVpZ2h0Cit0aHJlZSAgbmluZQorZm91ciAgIHRlbgorZml2ZSAgIGVsZXZlbgorc2l4CitFT0YKKwlnaXQgY29sdW1uIC0tbW9kZT1jb2x1bW4gPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMjAgY29sdW1ucywgbm9kZW5zZScgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitvbmUgICAgc2V2ZW4KK3R3byAgICBlaWdodAordGhyZWUgIG5pbmUKK2ZvdXIgICB0ZW4KK2ZpdmUgICBlbGV2ZW4KK3NpeAorRU9GCisJZ2l0IGNvbHVtbiAtLW1vZGU9Y29sdW1uLG5vZGVuc2UgPCBsaXN0YSA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyMCBjb2x1bW5zLCBkZW5zZScgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitvbmUgICBmaXZlICBuaW5lCit0d28gICBzaXggICB0ZW4KK3RocmVlIHNldmVuIGVsZXZlbgorZm91ciAgZWlnaHQKK0VPRgorCWdpdCBjb2x1bW4gLS1tb2RlPWNvbHVtbixkZW5zZSA8IGxpc3RhID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzIwIGNvbHVtbnMsIHBhZGRpbmcgMicgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitvbmUgICAgIHNldmVuCit0d28gICAgIGVpZ2h0Cit0aHJlZSAgIG5pbmUKK2ZvdXIgICAgdGVuCitmaXZlICAgIGVsZXZlbgorc2l4CitFT0YKKwlnaXQgY29sdW1uIC0tbW9kZT1jb2x1bW4gLS1wYWRkaW5nIDIgPGxpc3RhID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnMjAgY29sdW1ucywgaW5kZW50ZWQnICcKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorICBvbmUgICAgc2V2ZW4KKyAgdHdvICAgIGVpZ2h0CisgIHRocmVlICBuaW5lCisgIGZvdXIgICB0ZW4KKyAgZml2ZSAgIGVsZXZlbgorICBzaXgKK0VPRgorCWdpdCBjb2x1bW4gLS1tb2RlPWNvbHVtbiAtLWluZGVudD0iICAiIDxsaXN0YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzIwIGNvbHVtbnMsIHJvdyBmaXJzdCcgJworCWNhdCA+ZXhwZWN0ZWQgPDxcRU9GICYmCitvbmUgICAgdHdvCit0aHJlZSAgZm91cgorZml2ZSAgIHNpeAorc2V2ZW4gIGVpZ2h0CituaW5lICAgdGVuCitlbGV2ZW4KK0VPRgorCWdpdCBjb2x1bW4gLS1tb2RlPXJvdyA8bGlzdGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyMCBjb2x1bW5zLCByb3cgZmlyc3QsIG5vZGVuc2UnICcKKwljYXQgPmV4cGVjdGVkIDw8XEVPRiAmJgorb25lICAgIHR3bwordGhyZWUgIGZvdXIKK2ZpdmUgICBzaXgKK3NldmVuICBlaWdodAorbmluZSAgIHRlbgorZWxldmVuCitFT0YKKwlnaXQgY29sdW1uIC0tbW9kZT1yb3csbm9kZW5zZSA8bGlzdGEgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICcyMCBjb2x1bW5zLCByb3cgZmlyc3QsIGRlbnNlJyAnCisJY2F0ID5leHBlY3RlZCA8PFxFT0YgJiYKK29uZSAgIHR3byAgICB0aHJlZQorZm91ciAgZml2ZSAgIHNpeAorc2V2ZW4gZWlnaHQgIG5pbmUKK3RlbiAgIGVsZXZlbgorRU9GCisJZ2l0IGNvbHVtbiAtLW1vZGU9cm93LGRlbnNlIDxsaXN0YSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTAxMC1zdm4tZmUuc2ggYi90L3Q5MDEwLXN2bi1mZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZGFmZTdlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTAxMC1zdm4tZmUuc2gKQEAgLTAsMCArMSwxMTA2IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nY2hlY2sgc3ZuIGR1bXBmaWxlIGltcG9ydGVyJworCisuIC4vdGVzdC1saWIuc2gKKworcmVpbml0X2dpdCAoKSB7CisJaWYgISB0ZXN0X2RlY2xhcmVkX3ByZXJlcSBQSVBFCisJdGhlbgorCQllY2hvID4mNCAicmVpbml0X2dpdDogbmVlZCB0byBkZWNsYXJlIFBJUEUgcHJlcmVxdWlzaXRlIgorCQlyZXR1cm4gMTI3CisJZmkKKwlybSAtZnIgLmdpdCAmJgorCXJtIC1mIHN0cmVhbSBiYWNrZmxvdyAmJgorCWdpdCBpbml0ICYmCisJbWtmaWZvIHN0cmVhbSBiYWNrZmxvdworfQorCit0cnlfZHVtcCAoKSB7CisJaW5wdXQ9JDEgJiYKKwltYXliZV9mYWlsX3N2bmZlPSR7MjordGVzdF8kMn0gJiYKKwltYXliZV9mYWlsX2ZpPSR7MzordGVzdF8kM30gJiYKKworCXsKKwkJJG1heWJlX2ZhaWxfc3ZuZmUgdGVzdC1zdm4tZmUgIiRpbnB1dCIgPnN0cmVhbSAzPGJhY2tmbG93ICYKKwl9ICYmCisJJG1heWJlX2ZhaWxfZmkgZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyA8c3RyZWFtIDM+YmFja2Zsb3cgJiYKKwl3YWl0ICQhCit9CisKK3Byb3BlcnRpZXMgKCkgeworCXdoaWxlIHRlc3QgIiQjIiAtbmUgMAorCWRvCisJCXByb3BlcnR5PSIkMSIgJiYKKwkJdmFsdWU9IiQyIiAmJgorCQlwcmludGYgIiVzXG4iICJLICR7I3Byb3BlcnR5fSIgJiYKKwkJcHJpbnRmICIlc1xuIiAiJHByb3BlcnR5IiAmJgorCQlwcmludGYgIiVzXG4iICJWICR7I3ZhbHVlfSIgJiYKKwkJcHJpbnRmICIlc1xuIiAiJHZhbHVlIiAmJgorCQlzaGlmdCAyIHx8CisJCXJldHVybiAxCisJZG9uZQorfQorCit0ZXh0X25vX3Byb3BzICgpIHsKKwl0ZXh0PSIkMQorIiAmJgorCXByaW50ZiAiJXNcbiIgIlByb3AtY29udGVudC1sZW5ndGg6IDEwIiAmJgorCXByaW50ZiAiJXNcbiIgIlRleHQtY29udGVudC1sZW5ndGg6ICR7I3RleHR9IiAmJgorCXByaW50ZiAiJXNcbiIgIkNvbnRlbnQtbGVuZ3RoOiAkKCgkeyN0ZXh0fSArIDEwKSkiICYmCisJcHJpbnRmICIlc1xuIiAiIiAiUFJPUFMtRU5EIiAmJgorCXByaW50ZiAiJXNcbiIgIiR0ZXh0IgorfQorCis+ZW1wdHkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdlbXB0eSBkdW1wJyAnCisJcmVpbml0X2dpdCAmJgorCWVjaG8gIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyIiA+aW5wdXQgJiYKKwl0cnlfZHVtcCBpbnB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ3Y0IGR1bXBzIG5vdCBzdXBwb3J0ZWQnICcKKwlyZWluaXRfZ2l0ICYmCisJZWNobyAiU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDQiID52NC5kdW1wICYmCisJdHJ5X2R1bXAgdjQuZHVtcCBtdXN0X2ZhaWwKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQSVBFICdlbXB0eSByZXZpc2lvbicgJworCXJlaW5pdF9naXQgJiYKKwlwcmludGYgInJldiA8bm9ib2R5LCBub2JvZHlAbG9jYWw+OiAlc1xuIiAiIiAiIiA+ZXhwZWN0ICYmCisJY2F0ID5lbXB0eXJldi5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMAorCUNvbnRlbnQtbGVuZ3RoOiAwCisKKwlSZXZpc2lvbi1udW1iZXI6IDIKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAwCisJQ29udGVudC1sZW5ndGg6IDAKKworCUVPRgorCXRyeV9kdW1wIGVtcHR5cmV2LmR1bXAgJiYKKwlnaXQgbG9nIC1wIC0tZm9ybWF0PSJyZXYgPCVhbiwgJWFlPjogJXMiIEhFQUQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdlbXB0eSBwcm9wZXJ0aWVzJyAnCisJcmVpbml0X2dpdCAmJgorCXByaW50ZiAicmV2IDxub2JvZHksIG5vYm9keUBsb2NhbD46ICVzXG4iICIiICIiID5leHBlY3QgJiYKKwljYXQgPmVtcHR5cHJvcC5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCUVPRgorCXRyeV9kdW1wIGVtcHR5cHJvcC5kdW1wICYmCisJZ2l0IGxvZyAtcCAtLWZvcm1hdD0icmV2IDwlYW4sICVhZT46ICVzIiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnYXV0aG9yIG5hbWUgYW5kIGNvbW1pdCBtZXNzYWdlJyAnCisJcmVpbml0X2dpdCAmJgorCWVjaG8gIjxhdXRob3JAZXhhbXBsZS5jb20sIGF1dGhvckBleGFtcGxlLmNvbUBsb2NhbD4iID5leHBlY3QuYXV0aG9yICYmCisJY2F0ID5tZXNzYWdlIDw8LVxFT0YgJiYKKwlBIGNvbmNpc2Ugc3VtbWFyeSBvZiB0aGUgY2hhbmdlCisKKwlBIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBjaGFuZ2UsIHdoeSBpdCBpcyBuZWVkZWQsIHdoYXQKKwl3YXMgYnJva2VuIGFuZCB3aHkgYXBwbHlpbmcgdGhpcyBpcyB0aGUgYmVzdCBjb3Vyc2Ugb2YgYWN0aW9uLgorCisJKiBmaWxlLmMKKwkgICAgRGV0YWlscyBwZXJ0YWluaW5nIHRvIGFuIGluZGl2aWR1YWwgZmlsZS4KKwlFT0YKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJc3ZuOmF1dGhvciBhdXRob3JAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmxvZyAiJChjYXQgbWVzc2FnZSkiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+cHJvcHMgJiYKKwl7CisJCWVjaG8gIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzIiAmJgorCQllY2hvICYmCisJCWVjaG8gIlJldmlzaW9uLW51bWJlcjogMSIgJiYKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzCisJfSA+bG9nLmR1bXAgJiYKKwl0cnlfZHVtcCBsb2cuZHVtcCAmJgorCWdpdCBsb2cgLXAgLS1mb3JtYXQ9IiVCIiBIRUFEID5hY3R1YWwubG9nICYmCisJZ2l0IGxvZyAtLWZvcm1hdD0iPCVhbiwgJWFlPiIgPmFjdHVhbC5hdXRob3IgJiYKKwl0ZXN0X2NtcCBtZXNzYWdlIGFjdHVhbC5sb2cgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYXV0aG9yIGFjdHVhbC5hdXRob3IKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICd1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzIGFyZSBpZ25vcmVkJyAnCisJcmVpbml0X2dpdCAmJgorCWVjaG8gYXV0aG9yID5leHBlY3QgJiYKKwljYXQgPmV4dHJhcHJvcC5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogNTYKKwlDb250ZW50LWxlbmd0aDogNTYKKworCUsgOAorCW5vbnNlbnNlCisJViAxCisJeQorCUsgMTAKKwlzdm46YXV0aG9yCisJViA2CisJYXV0aG9yCisJUFJPUFMtRU5ECisJRU9GCisJdHJ5X2R1bXAgZXh0cmFwcm9wLmR1bXAgJiYKKwlnaXQgbG9nIC1wIC0tZm9ybWF0PSVhbiBIRUFEID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUElQRSAndGltZXN0YW1wIGFuZCBlbXB0eSBmaWxlJyAnCisJZWNobyBhdXRob3JAZXhhbXBsZS5jb20gPmV4cGVjdC5hdXRob3IgJiYKKwllY2hvIDE5OTktMDEtMDEgPmV4cGVjdC5kYXRlICYmCisJZWNobyBmaWxlID5leHBlY3QuZmlsZXMgJiYKKwlyZWluaXRfZ2l0ICYmCisJeworCQlwcm9wZXJ0aWVzIFwKKwkJCXN2bjphdXRob3IgYXV0aG9yQGV4YW1wbGUuY29tIFwKKwkJCXN2bjpkYXRlICIxOTk5LTAxLTAxVDAwOjAxOjAwMi4wMDAwMDBaIiBcCisJCQlzdm46bG9nICJhZGQgZW1wdHkgZmlsZSIgJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9ID5wcm9wcyAmJgorCXsKKwkJY2F0IDw8LUVPRiAmJgorCQlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJCVJldmlzaW9uLW51bWJlcjogMQorCQlFT0YKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzICYmCisJCWNhdCA8PC1cRU9GCisKKwkJTm9kZS1wYXRoOiBlbXB0eS1maWxlCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCUNvbnRlbnQtbGVuZ3RoOiAwCisKKwkJRU9GCisJfSA+ZW1wdHlmaWxlLmR1bXAgJiYKKwl0cnlfZHVtcCBlbXB0eWZpbGUuZHVtcCAmJgorCWdpdCBsb2cgLS1mb3JtYXQ9JWFuIEhFQUQgPmFjdHVhbC5hdXRob3IgJiYKKwlnaXQgbG9nIC0tZGF0ZT1zaG9ydCAtLWZvcm1hdD0lYWQgSEVBRCA+YWN0dWFsLmRhdGUgJiYKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEID5hY3R1YWwuZmlsZXMgJiYKKwl0ZXN0X2NtcCBleHBlY3QuYXV0aG9yIGFjdHVhbC5hdXRob3IgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZGF0ZSBhY3R1YWwuZGF0ZSAmJgorCXRlc3RfY21wIGV4cGVjdC5maWxlcyBhY3R1YWwuZmlsZXMgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCBlbXB0eS1maWxlICYmCisJdGVzdF9jbXAgZW1wdHkgZmlsZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ2RpcmVjdG9yeSB3aXRoIGZpbGVzJyAnCisJcmVpbml0X2dpdCAmJgorCXByaW50ZiAiJXNcbiIgZGlyZWN0b3J5L2ZpbGUxIGRpcmVjdG9yeS9maWxlMiA+ZXhwZWN0LmZpbGVzICYmCisJZWNobyBoaSA+aGkgJiYKKwllY2hvIGhlbGxvID5oZWxsbyAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQlzdm46YXV0aG9yIGF1dGhvckBleGFtcGxlLmNvbSBcCisJCQlzdm46ZGF0ZSAiMTk5OS0wMi0wMVQwMDowMTowMDIuMDAwMDAwWiIgXAorCQkJc3ZuOmxvZyAiYWRkIGRpcmVjdG9yeSB3aXRoIHNvbWUgZmlsZXMgaW4gaXQiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+cHJvcHMgJiYKKwl7CisJCWNhdCA8PC1FT0YgJiYKKwkJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCQlSZXZpc2lvbi1udW1iZXI6IDEKKwkJRU9GCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wcyAmJgorCQljYXQgPDwtXEVPRiAmJgorCisJCU5vZGUtcGF0aDogZGlyZWN0b3J5CisJCU5vZGUta2luZDogZGlyCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJQ29udGVudC1sZW5ndGg6IDEwCisKKwkJUFJPUFMtRU5ECisKKwkJTm9kZS1wYXRoOiBkaXJlY3RvcnkvZmlsZTEKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJRU9GCisJCXRleHRfbm9fcHJvcHMgaGVsbG8gJiYKKwkJY2F0IDw8LVxFT0YgJiYKKwkJTm9kZS1wYXRoOiBkaXJlY3RvcnkvZmlsZTIKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJRU9GCisJCXRleHRfbm9fcHJvcHMgaGkKKwl9ID5kaXJlY3RvcnkuZHVtcCAmJgorCXRyeV9kdW1wIGRpcmVjdG9yeS5kdW1wICYmCisKKwlnaXQgbHMtdHJlZSAtciAtLW5hbWUtb25seSBIRUFEID5hY3R1YWwuZmlsZXMgJiYKKwlnaXQgY2hlY2tvdXQgSEVBRCBkaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcCBleHBlY3QuZmlsZXMgYWN0dWFsLmZpbGVzICYmCisJdGVzdF9jbXAgaGVsbG8gZGlyZWN0b3J5L2ZpbGUxICYmCisJdGVzdF9jbXAgaGkgZGlyZWN0b3J5L2ZpbGUyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnYnJhbmNoIG5hbWUgd2l0aCBiYWNrc2xhc2gnICcKKwlyZWluaXRfZ2l0ICYmCisJc29ydCA8PC1cRU9GID5leHBlY3QuYnJhbmNoLWZpbGVzICYmCisJdHJ1bmsvZmlsZTEKKwl0cnVuay9maWxlMgorCSJicmFuY2hlcy9VcGRhdGVGT1B0bzA5NFxcL2ZpbGUxIgorCSJicmFuY2hlcy9VcGRhdGVGT1B0bzA5NFxcL2ZpbGUyIgorCUVPRgorCisJZWNobyBoaSA+aGkgJiYKKwllY2hvIGhlbGxvID5oZWxsbyAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQlzdm46YXV0aG9yIGF1dGhvckBleGFtcGxlLmNvbSBcCisJCQlzdm46ZGF0ZSAiMTk5OS0wMi0wMlQwMDowMTowMi4wMDAwMDBaIiBcCisJCQlzdm46bG9nICJhZGQgZGlyZWN0b3J5IHdpdGggc29tZSBmaWxlcyBpbiBpdCIgJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9ID5wcm9wcy5zZXR1cCAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQlzdm46YXV0aG9yIGJyYW5jaGVyQGV4YW1wbGUuY29tIFwKKwkJCXN2bjpkYXRlICIyMDA3LTEyLTA2VDIxOjM4OjM0LjAwMDAwMFoiIFwKKwkJCXN2bjpsb2cgIlVwZGF0aW5nIGZvcCB0byAuOTQgYW5kIGFkanVzdCBmby1zdHlsZXNoZWV0cyIgJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9ID5wcm9wcy5icmFuY2ggJiYKKwl7CisJCWNhdCA8PC1FT0YgJiYKKwkJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCQlSZXZpc2lvbi1udW1iZXI6IDEKKwkJRU9GCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMuc2V0dXApICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzLnNldHVwKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wcy5zZXR1cCAmJgorCQljYXQgPDwtXEVPRiAmJgorCisJCU5vZGUtcGF0aDogdHJ1bmsKKwkJTm9kZS1raW5kOiBkaXIKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlDb250ZW50LWxlbmd0aDogMTAKKworCQlQUk9QUy1FTkQKKworCQlOb2RlLXBhdGg6IGJyYW5jaGVzCisJCU5vZGUta2luZDogZGlyCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJQ29udGVudC1sZW5ndGg6IDEwCisKKwkJUFJPUFMtRU5ECisKKwkJTm9kZS1wYXRoOiB0cnVuay9maWxlMQorCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlFT0YKKwkJdGV4dF9ub19wcm9wcyBoZWxsbyAmJgorCQljYXQgPDwtXEVPRiAmJgorCQlOb2RlLXBhdGg6IHRydW5rL2ZpbGUyCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCUVPRgorCQl0ZXh0X25vX3Byb3BzIGhpICYmCisJCWNhdCA8PC1cRU9GICYmCisKKwkJUmV2aXNpb24tbnVtYmVyOiAyCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzLmJyYW5jaCkgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMuYnJhbmNoKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wcy5icmFuY2ggJiYKKwkJY2F0IDw8LVxFT0YKKworCQlOb2RlLXBhdGg6IGJyYW5jaGVzL1VwZGF0ZUZPUHRvMDk0XAorCQlOb2RlLWtpbmQ6IGRpcgorCQlOb2RlLWFjdGlvbjogYWRkCisJCU5vZGUtY29weWZyb20tcmV2OiAxCisJCU5vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCQlOb2RlLWtpbmQ6IGRpcgorCQlOb2RlLWFjdGlvbjogYWRkCisJCVByb3AtY29udGVudC1sZW5ndGg6IDM0CisJCUNvbnRlbnQtbGVuZ3RoOiAzNAorCisJCUsgMTMKKwkJc3ZuOm1lcmdlaW5mbworCQlWIDAKKworCQlQUk9QUy1FTkQKKwkJRU9GCisJfSA+YnJhbmNoLmR1bXAgJiYKKwl0cnlfZHVtcCBicmFuY2guZHVtcCAmJgorCisJZ2l0IGxzLXRyZWUgLXIgLS1uYW1lLW9ubHkgSEVBRCB8CisJc29ydCA+YWN0dWFsLmJyYW5jaC1maWxlcyAmJgorCXRlc3RfY21wIGV4cGVjdC5icmFuY2gtZmlsZXMgYWN0dWFsLmJyYW5jaC1maWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ25vZGUgd2l0aG91dCBhY3Rpb24nICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5pbmFjdGlvbi5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBkaXJlY3RvcnkKKwlOb2RlLWtpbmQ6IGRpcgorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKwlFT0YKKwl0cnlfZHVtcCBpbmFjdGlvbi5kdW1wIG11c3RfZmFpbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ2FjdGlvbjogYWRkIG5vZGUgd2l0aG91dCB0ZXh0JyAnCisJcmVpbml0X2dpdCAmJgorCWNhdCA+dGV4dGxlc3MuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogdGV4dGxlc3MKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogYWRkCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCUVPRgorCXRyeV9kdW1wIHRleHRsZXNzLmR1bXAgbXVzdF9mYWlsCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUElQRSAnY2hhbmdlIGZpbGUgbW9kZSBidXQga2VlcCBvbGQgY29udGVudCcgJworCXJlaW5pdF9naXQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTIwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBUCWdyZWV0aW5nCisJT0JKSUQKKwk6MTAwNjQ0IDEyMDAwMCBPQkpJRCBPQkpJRCBUCWdyZWV0aW5nCisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWdyZWV0aW5nCisJRU9GCisJZWNobyAibGluayBoZWxsbyIgPmV4cGVjdC5ibG9iICYmCisJZWNobyBoZWxsbyA+aGVsbG8gJiYKKwljYXQgPmZpbGVtb2RlLmR1bXAgPDwtXEVPRiAmJgorCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwlSZXZpc2lvbi1udW1iZXI6IDEKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlOb2RlLXBhdGg6IGdyZWV0aW5nCisJTm9kZS1raW5kOiBmaWxlCisJTm9kZS1hY3Rpb246IGFkZAorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJVGV4dC1jb250ZW50LWxlbmd0aDogMTEKKwlDb250ZW50LWxlbmd0aDogMjEKKworCVBST1BTLUVORAorCWxpbmsgaGVsbG8KKworCVJldmlzaW9uLW51bWJlcjogMgorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogY2hhbmdlCisJUHJvcC1jb250ZW50LWxlbmd0aDogMzMKKwlDb250ZW50LWxlbmd0aDogMzMKKworCUsgMTEKKwlzdm46c3BlY2lhbAorCVYgMQorCSoKKwlQUk9QUy1FTkQKKworCVJldmlzaW9uLW51bWJlcjogMworCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogY2hhbmdlCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCUVPRgorCXRyeV9kdW1wIGZpbGVtb2RlLmR1bXAgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kX3g0MC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUQ6Z3JlZXRpbmcgPmFjdHVhbC5ibG9iICYmCisJZ2l0IHNob3cgSEVBRF46Z3JlZXRpbmcgPmFjdHVhbC50YXJnZXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmJsb2IgYWN0dWFsLmJsb2IgJiYKKwl0ZXN0X2NtcCBoZWxsbyBhY3R1YWwudGFyZ2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnTlVMIGluIHByb3BlcnR5IHZhbHVlJyAnCisJcmVpbml0X2dpdCAmJgorCWVjaG8gImNvbW1pdCBtZXNzYWdlIiA+ZXhwZWN0Lm1lc3NhZ2UgJiYKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJdW5pbXBvcnRhbnQgInNvbWV0aGluZyB3aXRoIGEgTlVMIChRKSIgXAorCQkJc3ZuOmxvZyAiY29tbWl0IG1lc3NhZ2UiJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9IHwKKwlxX3RvX251bCA+cHJvcHMgJiYKKwl7CisJCWNhdCA8PC1cRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyAmJgorCQljYXQgcHJvcHMKKwl9ID5udWxwcm9wLmR1bXAgJiYKKwl0cnlfZHVtcCBudWxwcm9wLmR1bXAgJiYKKwlnaXQgZGlmZi10cmVlIC0tYWx3YXlzIC1zIC0tZm9ybWF0PSVzIEhFQUQgPmFjdHVhbC5tZXNzYWdlICYmCisJdGVzdF9jbXAgZXhwZWN0Lm1lc3NhZ2UgYWN0dWFsLm1lc3NhZ2UKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdOVUwgaW4gbG9nIG1lc3NhZ2UsIGZpbGUgY29udGVudCwgYW5kIHByb3BlcnR5IG5hbWUnICcKKwkjIENhdmVhdDogc3ZuYWRtaW4gMS42LjE2IChyMTA3MzUyOSkgdHJ1bmNhdGVzIGF0IFwwIGluIHRoZQorCSMgc3ZuOnNwZWNpYWxRbm90cmVhbGx5IGV4YW1wbGUuCisJcmVpbml0X2dpdCAmJgorCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlPQkpJRAorCToxMDA2NDQgMTAwNjQ0IE9CSklEIE9CSklEIE0JZ3JlZXRpbmcKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJZ3JlZXRpbmcKKwlFT0YKKwlwcmludGYgIlxuJXNcbiIgInNvbWV0aGluZyB3aXRoIGFuIEFTQ0lJIE5VTCAoUSkiID5leHBlY3QubWVzc2FnZSAmJgorCXByaW50ZiAiJXNcbiIgImhlbFFvIiA+ZXhwZWN0LmhlbGxvMSAmJgorCXByaW50ZiAiJXNcbiIgImxpbmsgaGVsbG8iID5leHBlY3QuaGVsbG8yICYmCisJeworCQlwcm9wZXJ0aWVzIHN2bjpsb2cgInNvbWV0aGluZyB3aXRoIGFuIEFTQ0lJIE5VTCAoUSkiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSB8CisJcV90b19udWwgPnByb3BzICYmCisJeworCQlxX3RvX251bCA8PC1cRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJVGV4dC1jb250ZW50LWxlbmd0aDogNgorCQlDb250ZW50LWxlbmd0aDogMTYKKworCQlQUk9QUy1FTkQKKwkJaGVsUW8KKworCQlSZXZpc2lvbi1udW1iZXI6IDIKKwkJRU9GCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wcyAmJgorCQlxX3RvX251bCA8PC1cRU9GCisKKwkJTm9kZS1wYXRoOiBncmVldGluZworCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGNoYW5nZQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiA0MworCQlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMQorCQlDb250ZW50LWxlbmd0aDogNTQKKworCQlLIDIxCisJCXN2bjpzcGVjaWFsUW5vdHJlYWxseQorCQlWIDEKKwkJKgorCQlQUk9QUy1FTkQKKwkJbGluayBoZWxsbworCQlFT0YKKwl9ID44Yml0Y2xlYW4uZHVtcCAmJgorCXRyeV9kdW1wIDhiaXRjbGVhbi5kdW1wICYmCisJeworCQlnaXQgcmV2LWxpc3QgSEVBRCB8CisJCWdpdCBkaWZmLXRyZWUgLS1yb290IC0tc3RkaW4gfAorCQlzZWQgInMvJF94NDAvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwl7CisJCWdpdCBjYXQtZmlsZSBjb21taXQgSEVBRCB8IG51bF90b19xICYmCisJCWVjaG8KKwl9IHwKKwlzZWQgLW5lICIvXlwkLyxcJCBwIiA+YWN0dWFsLm1lc3NhZ2UgJiYKKwlnaXQgY2F0LWZpbGUgYmxvYiBIRUFEXjpncmVldGluZyB8IG51bF90b19xID5hY3R1YWwuaGVsbG8xICYmCisJZ2l0IGNhdC1maWxlIGJsb2IgSEVBRDpncmVldGluZyB8IG51bF90b19xID5hY3R1YWwuaGVsbG8yICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdC5tZXNzYWdlIGFjdHVhbC5tZXNzYWdlICYmCisJdGVzdF9jbXAgZXhwZWN0LmhlbGxvMSBhY3R1YWwuaGVsbG8xICYmCisJdGVzdF9jbXAgZXhwZWN0LmhlbGxvMiBhY3R1YWwuaGVsbG8yCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnY2hhbmdlIGZpbGUgbW9kZSBhbmQgcmVpdGVyYXRlIGNvbnRlbnQnICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEyMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgVAlncmVldGluZworCU9CSklECisJOjEwMDY0NCAxMjAwMDAgT0JKSUQgT0JKSUQgVAlncmVldGluZworCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlncmVldGluZworCUVPRgorCWVjaG8gImxpbmsgaGVsbG8iID5leHBlY3QuYmxvYiAmJgorCWVjaG8gaGVsbG8gPmhlbGxvICYmCisJY2F0ID5maWxlbW9kZTIuZHVtcCA8PC1cRU9GICYmCisJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCVJldmlzaW9uLW51bWJlcjogMQorCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJQ29udGVudC1sZW5ndGg6IDEwCisKKwlQUk9QUy1FTkQKKworCU5vZGUtcGF0aDogZ3JlZXRpbmcKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogYWRkCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMQorCUNvbnRlbnQtbGVuZ3RoOiAyMQorCisJUFJPUFMtRU5ECisJbGluayBoZWxsbworCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworCVRleHQtY29udGVudC1sZW5ndGg6IDExCisJQ29udGVudC1sZW5ndGg6IDQ0CisKKwlLIDExCisJc3ZuOnNwZWNpYWwKKwlWIDEKKwkqCisJUFJPUFMtRU5ECisJbGluayBoZWxsbworCisJUmV2aXNpb24tbnVtYmVyOiAzCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCVRleHQtY29udGVudC1sZW5ndGg6IDExCisJQ29udGVudC1sZW5ndGg6IDIxCisKKwlQUk9QUy1FTkQKKwlsaW5rIGhlbGxvCisJRU9GCisJdHJ5X2R1bXAgZmlsZW1vZGUyLmR1bXAgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1zdGRpbiB8CisJCXNlZCAicy8kX3g0MC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUQ6Z3JlZXRpbmcgPmFjdHVhbC5ibG9iICYmCisJZ2l0IHNob3cgSEVBRF46Z3JlZXRpbmcgPmFjdHVhbC50YXJnZXQgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0LmJsb2IgYWN0dWFsLmJsb2IgJiYKKwl0ZXN0X2NtcCBoZWxsbyBhY3R1YWwudGFyZ2V0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnZGVsdGFzIHN1cHBvcnRlZCcgJworCXJlaW5pdF9naXQgJiYKKwl7CisJCSMgKG9sZCkgaCArIChpbmxpbmUpIGVsbG8gKyAob2xkKSBcbgorCQlwcmludGYgIlNWTlElYiViJXMiICJRXDAwM1wwMDZcMDA1XDAwNCIgIlwwMDFRXDAyMDRcMDAxXDAwMiIgImVsbG8iIHwKKwkJcV90b19udWwKKwl9ID5kZWx0YSAmJgorCXsKKwkJcHJvcGVydGllcyBcCisJCQlzdm46YXV0aG9yIGF1dGhvckBleGFtcGxlLmNvbSBcCisJCQlzdm46ZGF0ZSAiMTk5OS0wMS0wNVQwMDowMTowMDIuMDAwMDAwWiIgXAorCQkJc3ZuOmxvZyAiYWRkIGdyZWV0aW5nIiAmJgorCQllY2hvIFBST1BTLUVORAorCX0gPnByb3BzICYmCisJeworCQlwcm9wZXJ0aWVzIFwKKwkJCXN2bjphdXRob3IgYXV0aG9yQGV4YW1wbGUuY29tIFwKKwkJCXN2bjpkYXRlICIxOTk5LTAxLTA2VDAwOjAxOjAwMi4wMDAwMDBaIiBcCisJCQlzdm46bG9nICJjaGFuZ2UgaXQiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+cHJvcHMyICYmCisJeworCQllY2hvIFNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzICYmCisJCWVjaG8gJiYKKwkJZWNobyBSZXZpc2lvbi1udW1iZXI6IDEgJiYKKwkJZWNobyBQcm9wLWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxwcm9wcykgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMpICYmCisJCWVjaG8gJiYKKwkJY2F0IHByb3BzICYmCisJCWNhdCA8PC1cRU9GICYmCisKKwkJTm9kZS1wYXRoOiBoZWxsbworCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAzCisJCUNvbnRlbnQtbGVuZ3RoOiAxMworCisJCVBST1BTLUVORAorCQloaQorCisJCUVPRgorCQllY2hvIFJldmlzaW9uLW51bWJlcjogMiAmJgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHByb3BzMikgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cHJvcHMyKSAmJgorCQllY2hvICYmCisJCWNhdCBwcm9wczIgJiYKKwkJY2F0IDw8LVxFT0YgJiYKKworCQlOb2RlLXBhdGg6IGhlbGxvCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogY2hhbmdlCisJCVRleHQtZGVsdGE6IHRydWUKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJRU9GCisJCWVjaG8gVGV4dC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8ZGVsdGEpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQoKDEwICsgJCh3YyAtYyA8ZGVsdGEpKSkgJiYKKwkJZWNobyAmJgorCQllY2hvIFBST1BTLUVORCAmJgorCQljYXQgZGVsdGEKKwl9ID5kZWx0YS5kdW1wICYmCisJdHJ5X2R1bXAgZGVsdGEuZHVtcAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ3Byb3BlcnR5IGRlbHRhcyBzdXBwb3J0ZWQnICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEwMDc1NSAxMDA2NDQgT0JKSUQgT0JKSUQgTQlzY3JpcHQuc2gKKwlFT0YKKwl7CisJCXByb3BlcnRpZXMgXAorCQkJc3ZuOmF1dGhvciBhdXRob3JAZXhhbXBsZS5jb20gXAorCQkJc3ZuOmRhdGUgIjE5OTktMDMtMDZUMDA6MDE6MDAyLjAwMDAwMFoiIFwKKwkJCXN2bjpsb2cgIm1ha2UgYW4gZXhlY3V0YWJsZSwgb3IgY2htb2QgLXggaXQiICYmCisJCWVjaG8gUFJPUFMtRU5ECisJfSA+cmV2cHJvcHMgJiYKKwl7CisJCWVjaG8gU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMgJiYKKwkJZWNobyAmJgorCQllY2hvIFJldmlzaW9uLW51bWJlcjogMSAmJgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHJldnByb3BzKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxyZXZwcm9wcykgJiYKKwkJZWNobyAmJgorCQljYXQgcmV2cHJvcHMgJiYKKwkJZWNobyAmJgorCQljYXQgPDwtXEVPRiAmJgorCQlOb2RlLXBhdGg6IHNjcmlwdC5zaAorCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGFkZAorCQlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCisJCVByb3AtY29udGVudC1sZW5ndGg6IDM5CisJCUNvbnRlbnQtbGVuZ3RoOiAzOQorCisJCUsgMTQKKwkJc3ZuOmV4ZWN1dGFibGUKKwkJViA0CisJCXRydWUKKwkJUFJPUFMtRU5ECisKKwkJRU9GCisJCWVjaG8gUmV2aXNpb24tbnVtYmVyOiAyICYmCisJCWVjaG8gUHJvcC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8cmV2cHJvcHMpICYmCisJCWVjaG8gQ29udGVudC1sZW5ndGg6ICQod2MgLWMgPHJldnByb3BzKSAmJgorCQllY2hvICYmCisJCWNhdCByZXZwcm9wcyAmJgorCQllY2hvICYmCisJCWNhdCA8PC1cRU9GCisJCU5vZGUtcGF0aDogc2NyaXB0LnNoCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogY2hhbmdlCisJCVByb3AtZGVsdGE6IHRydWUKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMzAKKwkJQ29udGVudC1sZW5ndGg6IDMwCisKKwkJRCAxNAorCQlzdm46ZXhlY3V0YWJsZQorCQlQUk9QUy1FTkQKKwkJRU9GCisJfSA+cHJvcGRlbHRhLmR1bXAgJiYKKwl0cnlfZHVtcCBwcm9wZGVsdGEuZHVtcCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tc3RkaW4gfAorCQlzZWQgInMvJF94NDAvT0JKSUQvZyIKKwl9ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAncHJvcGVydGllcyBvbiAvJyAnCisJcmVpbml0X2dpdCAmJgorCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwlPQkpJRAorCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlncmVldGluZworCUVPRgorCXNlZCAtZSAicy9YJC8vIiA8PC1cRU9GID5jaGFuZ2Vyb290LmR1bXAgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBncmVldGluZworCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBhZGQKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiBYCisJTm9kZS1raW5kOiBkaXIKKwlOb2RlLWFjdGlvbjogY2hhbmdlCisJUHJvcC1kZWx0YTogdHJ1ZQorCVByb3AtY29udGVudC1sZW5ndGg6IDQzCisJQ29udGVudC1sZW5ndGg6IDQzCisKKwlLIDEwCisJc3ZuOmlnbm9yZQorCVYgMTEKKwlidWlsZC1hcmVhCisKKwlQUk9QUy1FTkQKKwlFT0YKKwl0cnlfZHVtcCBjaGFuZ2Vyb290LmR1bXAgJiYKKwl7CisJCWdpdCByZXYtbGlzdCBIRUFEIHwKKwkJZ2l0IGRpZmYtdHJlZSAtLXJvb3QgLS1hbHdheXMgLS1zdGRpbiB8CisJCXNlZCAicy8kX3g0MC9PQkpJRC9nIgorCX0gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdkZWx0YXMgZm9yIHR5cGVjaGFuZ2UnICcKKwlyZWluaXRfZ2l0ICYmCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjEyMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgVAl0ZXN0LWZpbGUKKwlPQkpJRAorCToxMDA3NTUgMTIwMDAwIE9CSklEIE9CSklEIFQJdGVzdC1maWxlCisJT0JKSUQKKwk6MDAwMDAwIDEwMDc1NSBPQkpJRCBPQkpJRCBBCXRlc3QtZmlsZQorCUVPRgorCWNhdCA+ZGVsZXRlcHJvcC5kdW1wIDw8LVxFT0YgJiYKKwlTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMworCisJUmV2aXNpb24tbnVtYmVyOiAxCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiB0ZXN0LWZpbGUKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogYWRkCisJUHJvcC1kZWx0YTogdHJ1ZQorCVByb3AtY29udGVudC1sZW5ndGg6IDM1CisJVGV4dC1jb250ZW50LWxlbmd0aDogMTcKKwlDb250ZW50LWxlbmd0aDogNTIKKworCUsgMTQKKwlzdm46ZXhlY3V0YWJsZQorCVYgMAorCisJUFJPUFMtRU5ECisJbGluayB0ZXN0aW5nIDEyMworCisJUmV2aXNpb24tbnVtYmVyOiAyCisJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwlDb250ZW50LWxlbmd0aDogMTAKKworCVBST1BTLUVORAorCisJTm9kZS1wYXRoOiB0ZXN0LWZpbGUKKwlOb2RlLWtpbmQ6IGZpbGUKKwlOb2RlLWFjdGlvbjogY2hhbmdlCisJUHJvcC1kZWx0YTogdHJ1ZQorCVByb3AtY29udGVudC1sZW5ndGg6IDUzCisJVGV4dC1jb250ZW50LWxlbmd0aDogMTcKKwlDb250ZW50LWxlbmd0aDogNzAKKworCUsgMTEKKwlzdm46c3BlY2lhbAorCVYgMQorCSoKKwlEIDE0CisJc3ZuOmV4ZWN1dGFibGUKKwlQUk9QUy1FTkQKKwlsaW5rIHRlc3RpbmcgMjMxCisKKwlSZXZpc2lvbi1udW1iZXI6IDMKKwlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJUFJPUFMtRU5ECisKKwlOb2RlLXBhdGg6IHRlc3QtZmlsZQorCU5vZGUta2luZDogZmlsZQorCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwlQcm9wLWRlbHRhOiB0cnVlCisJUHJvcC1jb250ZW50LWxlbmd0aDogMjcKKwlUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxNworCUNvbnRlbnQtbGVuZ3RoOiA0NAorCisJRCAxMQorCXN2bjpzcGVjaWFsCisJUFJPUFMtRU5ECisJbGluayB0ZXN0aW5nIDMyMQorCUVPRgorCXRyeV9kdW1wIGRlbGV0ZXByb3AuZHVtcCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRfeDQwL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ2RlbHRhcyBuZWVkIG5vdCBjb25zdW1lIHRoZSB3aG9sZSBwcmVpbWFnZScgJworCXJlaW5pdF9naXQgJiYKKwljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTIwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBUCXBvc3RpbWFnZQorCU9CSklECisJOjEwMDY0NCAxMjAwMDAgT0JKSUQgT0JKSUQgVAlwb3N0aW1hZ2UKKwlPQkpJRAorCTowMDAwMDAgMTAwNjQ0IE9CSklEIE9CSklEIEEJcG9zdGltYWdlCisJRU9GCisJZWNobyAiZmlyc3QgcHJlaW1hZ2UiID5leHBlY3QuMSAmJgorCXByaW50ZiB0YXJnZXQgPmV4cGVjdC4yICYmCisJcHJpbnRmIGxuayA+ZXhwZWN0LjMgJiYKKwl7CisJCXByaW50ZiAiU1ZOUSViJWIlYiIgIlFRXDAxN1wwMDFcMDE3IiAiXDAyMTciICJmaXJzdCBwcmVpbWFnZVxuIiB8CisJCXFfdG9fbnVsCisJfSA+ZGVsdGEuMSAmJgorCXsKKwkJcHJvcGVydGllcyBzdm46c3BlY2lhbCAiKiIgJiYKKwkJZWNobyBQUk9QUy1FTkQKKwl9ID5zeW1saW5rLnByb3BzICYmCisJeworCQlwcmludGYgIlNWTlElYiViJWIiICJRXDAwMlwwMTNcMDA0XDAxMiIgIlwwMjAxXDAwMVwwMDFcMDIxMSIgImxuayB0YXJnZXQiIHwKKwkJcV90b19udWwKKwl9ID5kZWx0YS4yICYmCisJeworCQlwcmludGYgIlNWTlElYiViIiAiUVwwMDRcMDAzXDAwNFEiICJcMDAxUVwwMDJcMDAyIiB8CisJCXFfdG9fbnVsCisJfSA+ZGVsdGEuMyAmJgorCXsKKwkJY2F0IDw8LVxFT0YgJiYKKwkJU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDMKKworCQlSZXZpc2lvbi1udW1iZXI6IDEKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJQ29udGVudC1sZW5ndGg6IDEwCisKKwkJUFJPUFMtRU5ECisKKwkJTm9kZS1wYXRoOiBwb3N0aW1hZ2UKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBhZGQKKwkJVGV4dC1kZWx0YTogdHJ1ZQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlFT0YKKwkJZWNobyBUZXh0LWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxkZWx0YS4xKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKCgxMCArICQod2MgLWMgPGRlbHRhLjEpKSkgJiYKKwkJZWNobyAmJgorCQllY2hvIFBST1BTLUVORCAmJgorCQljYXQgZGVsdGEuMSAmJgorCQljYXQgPDwtXEVPRiAmJgorCisJCVJldmlzaW9uLW51bWJlcjogMgorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlDb250ZW50LWxlbmd0aDogMTAKKworCQlQUk9QUy1FTkQKKworCQlOb2RlLXBhdGg6IHBvc3RpbWFnZQorCQlOb2RlLWtpbmQ6IGZpbGUKKwkJTm9kZS1hY3Rpb246IGNoYW5nZQorCQlUZXh0LWRlbHRhOiB0cnVlCisJCUVPRgorCQllY2hvIFByb3AtY29udGVudC1sZW5ndGg6ICQod2MgLWMgPHN5bWxpbmsucHJvcHMpICYmCisJCWVjaG8gVGV4dC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8ZGVsdGEuMikgJiYKKwkJZWNobyBDb250ZW50LWxlbmd0aDogJCgoJCh3YyAtYyA8c3ltbGluay5wcm9wcykgKyAkKHdjIC1jIDxkZWx0YS4yKSkpICYmCisJCWVjaG8gJiYKKwkJY2F0IHN5bWxpbmsucHJvcHMgJiYKKwkJY2F0IGRlbHRhLjIgJiYKKwkJY2F0IDw8LVxFT0YgJiYKKworCQlSZXZpc2lvbi1udW1iZXI6IDMKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJQ29udGVudC1sZW5ndGg6IDEwCisKKwkJUFJPUFMtRU5ECisKKwkJTm9kZS1wYXRoOiBwb3N0aW1hZ2UKKwkJTm9kZS1raW5kOiBmaWxlCisJCU5vZGUtYWN0aW9uOiBjaGFuZ2UKKwkJVGV4dC1kZWx0YTogdHJ1ZQorCQlQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorCQlFT0YKKwkJZWNobyBUZXh0LWNvbnRlbnQtbGVuZ3RoOiAkKHdjIC1jIDxkZWx0YS4zKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKCgxMCArICQod2MgLWMgPGRlbHRhLjMpKSkgJiYKKwkJZWNobyAmJgorCQllY2hvIFBST1BTLUVORCAmJgorCQljYXQgZGVsdGEuMyAmJgorCQllY2hvCisJfSA+ZGVsdGFwYXJ0aWFsLmR1bXAgJiYKKwl0cnlfZHVtcCBkZWx0YXBhcnRpYWwuZHVtcCAmJgorCXsKKwkJZ2l0IHJldi1saXN0IEhFQUQgfAorCQlnaXQgZGlmZi10cmVlIC0tcm9vdCAtLXN0ZGluIHwKKwkJc2VkICJzLyRfeDQwL09CSklEL2ciCisJfSA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCWdpdCBzaG93IEhFQUQ6cG9zdGltYWdlID5hY3R1YWwuMyAmJgorCWdpdCBzaG93IEhFQUReOnBvc3RpbWFnZSA+YWN0dWFsLjIgJiYKKwlnaXQgc2hvdyBIRUFEXl46cG9zdGltYWdlID5hY3R1YWwuMSAmJgorCXRlc3RfY21wIGV4cGVjdC4xIGFjdHVhbC4xICYmCisJdGVzdF9jbXAgZXhwZWN0LjIgYWN0dWFsLjIgJiYKKwl0ZXN0X2NtcCBleHBlY3QuMyBhY3R1YWwuMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ25vIGhhbmcgZm9yIGRlbHRhIHRyeWluZyB0byByZWFkIHBhc3QgZW5kIG9mIHByZWltYWdlJyAnCisJcmVpbml0X2dpdCAmJgorCXsKKwkJIyBDT1BZIDEKKwkJcHJpbnRmICJTVk5RJWIlYiIgIlFcMDAxXDAwMVwwMDJRIiAiXDAwMVEiIHwKKwkJcV90b19udWwKKwl9ID5ncmVlZHkuZGVsdGEgJiYKKwl7CisJCWNhdCA8PC1cRU9GICYmCisJCVNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAzCisKKwkJUmV2aXNpb24tbnVtYmVyOiAxCisJCVByb3AtY29udGVudC1sZW5ndGg6IDEwCisJCUNvbnRlbnQtbGVuZ3RoOiAxMAorCisJCVBST1BTLUVORAorCisJCU5vZGUtcGF0aDogYm9vdHN0cmFwCisJCU5vZGUta2luZDogZmlsZQorCQlOb2RlLWFjdGlvbjogYWRkCisJCVRleHQtZGVsdGE6IHRydWUKKwkJUHJvcC1jb250ZW50LWxlbmd0aDogMTAKKwkJRU9GCisJCWVjaG8gVGV4dC1jb250ZW50LWxlbmd0aDogJCh3YyAtYyA8Z3JlZWR5LmRlbHRhKSAmJgorCQllY2hvIENvbnRlbnQtbGVuZ3RoOiAkKCgxMCArICQod2MgLWMgPGdyZWVkeS5kZWx0YSkpKSAmJgorCQllY2hvICYmCisJCWVjaG8gUFJPUFMtRU5EICYmCisJCWNhdCBncmVlZHkuZGVsdGEgJiYKKwkJZWNobworCX0gPmdyZWVkeWRlbHRhLmR1bXAgJiYKKwl0cnlfZHVtcCBncmVlZHlkZWx0YS5kdW1wIG11c3RfZmFpbCBtaWdodF9mYWlsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldCB1cCBzdm4gcmVwbycgJworCXN2bmNvbmY9JFBXRC9zdm5jb25mICYmCisJbWtkaXIgLXAgIiRzdm5jb25mIiAmJgorCisJaWYKKwkJc3ZuYWRtaW4gLWggPi9kZXYvbnVsbCAyPiYxICYmCisJCXN2bmFkbWluIGNyZWF0ZSBzaW1wbGUtc3ZuICYmCisJCXN2bmFkbWluIGxvYWQgc2ltcGxlLXN2biA8IiRURVNUX0RJUkVDVE9SWS90OTEzNS9zdm4uZHVtcCIgJiYKKwkJc3ZuIGV4cG9ydCAtLWNvbmZpZy1kaXIgIiRzdm5jb25mIiAiZmlsZTovLyRQV0Qvc2ltcGxlLXN2biIgc2ltcGxlLXN2bmNvCisJdGhlbgorCQl0ZXN0X3NldF9wcmVyZXEgU1ZOUkVQTworCWZpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1ZOUkVQTyxQSVBFICd0OTEzNS9zdm4uZHVtcCcgJworCW1rZGlyIC1wIHNpbXBsZS1naXQgJiYKKwkoCisJCWNkIHNpbXBsZS1naXQgJiYKKwkJcmVpbml0X2dpdCAmJgorCQl0cnlfZHVtcCAiJFRFU1RfRElSRUNUT1JZL3Q5MTM1L3N2bi5kdW1wIgorCSkgJiYKKwkoCisJCWNkIHNpbXBsZS1zdm5jbyAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgYWRkIC4gJiYKKwkJZ2l0IGZldGNoIC4uL3NpbXBsZS1naXQgbWFzdGVyICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlIEZFVENIX0hFQUQKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTAxMS1zdm4tZGEuc2ggYi90L3Q5MDExLXN2bi1kYS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMzhkMTZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTAxMS1zdm4tZGEuc2gKQEAgLTAsMCArMSwyNDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IHBhcnNpbmcgb2Ygc3ZuZGlmZjAgZmlsZXMKKworVXNpbmcgdGhlICJ0ZXN0LXN2bi1mZSAtZCIgaGVscGVyLCBjaGVjayB0aGF0IHN2bi1mZSBjb3JyZWN0bHkKK2ludGVycHJldHMgZGVsdGFzIHVzaW5nIHZhcmlvdXMgZmFjaWxpdGllcyAoc29tZSBmcm9tIHRoZSBzcGVjLAorc29tZSBvbmx5IGxlYXJuZWQgZnJvbSBwcmFjdGljZSkuCisnCisuIC4vdGVzdC1saWIuc2gKKworPmVtcHR5CitwcmludGYgZm9vID5wcmVpbWFnZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgZW1wdHkgZGVsdGEnICcKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBlbXB0eSAwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlbHRhIGNhbiBlbXB0eSBmaWxlJyAnCisJcHJpbnRmICJTVk5RIiB8IHFfdG9fbnVsID5jbGVhci5kZWx0YSAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLmRlbHRhIDQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3Qgc3ZuZGlmZjInICcKKwlwcmludGYgIlNWTlwwMDIiID5iYWQuZmlsZXR5cGUgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBiYWQuZmlsZXR5cGUgNAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbmUtd2luZG93IGVtcHR5IGRlbHRhJyAnCisJcHJpbnRmICJTVk5RJXMiICJRUVFRUSIgfCBxX3RvX251bCA+Y2xlYXIub25ld2luZG93ICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIub25ld2luZG93IDkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgaW5jb21wbGV0ZSB3aW5kb3cgaGVhZGVyJyAnCisJcHJpbnRmICJTVk5RJXMiICJRUVFRUSIgfCBxX3RvX251bCA+Y2xlYXIub25ld2luZG93ICYmCisJcHJpbnRmICJTVk5RJXMiICJRUSIgfCBxX3RvX251bCA+Y2xlYXIucGFydGlhbHdpbmRvdyAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLm9uZXdpbmRvdyA2ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIucGFydGlhbHdpbmRvdyA2CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdCBkZWNsYXJlZCBkZWx0YSBsb25nZXIgdGhhbiBhY3R1YWwgZGVsdGEnICcKKwlwcmludGYgIlNWTlElcyIgIlFRUVFRIiB8IHFfdG9fbnVsID5jbGVhci5vbmV3aW5kb3cgJiYKKwlwcmludGYgIlNWTlElcyIgIlFRIiB8IHFfdG9fbnVsID5jbGVhci5wYXJ0aWFsd2luZG93ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIub25ld2luZG93IDE0ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIucGFydGlhbHdpbmRvdyA5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3R3by13aW5kb3cgZW1wdHkgZGVsdGEnICcKKwlwcmludGYgIlNWTlElcyVzIiAiUVFRUVEiICJRUVFRUSIgfCBxX3RvX251bCA+Y2xlYXIudHdvd2luZG93ICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIudHdvd2luZG93IDE0ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci50d293aW5kb3cgMTMgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbm9pc3kgemVyb2VzJyAnCisJcHJpbnRmICJTVk5RJXMiIFwKKwkJIlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUVFRUVEiIHwKKwkJdHIgUiAiXDIwMCIgfAorCQlxX3RvX251bCA+Y2xlYXIubm9pc3kgJiYKKwlsZW49JCh3YyAtYyA8Y2xlYXIubm9pc3kpICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIubm9pc3kgJGxlbiAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgdmFyaWFibGUtbGVuZ3RoIGludCBpbiBtYWdpYycgJworCXByaW50ZiAiU1ZOUlEiIHwgdHIgUiAiXDIwMCIgfCBxX3RvX251bCA+Y2xlYXIuYmFkbWFnaWMgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5iYWRtYWdpYyA1CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlamVjdCB0cnVuY2F0ZWQgaW50ZWdlcicgJworCXByaW50ZiAiU1ZOUSVzJXMiICJRUVFRUSIgIlFRUVFSUlEiIHwKKwkJdHIgUiAiXDIwMCIgfAorCQlxX3RvX251bCA+Y2xlYXIuZnVsbGludCAmJgorCXByaW50ZiAiU1ZOUSVzJXMiICJRUVFRUSIgIlFRUVFSUiIgfAorCQl0ciBSVCAiXDIwMSIgfAorCQlxX3RvX251bCA+Y2xlYXIucGFydGlhbGludCAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLmZ1bGxpbnQgMTUgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5mdWxsaW50IDE2ICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIucGFydGlhbGludCAxNQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub25lbXB0eSAoYnV0IHVudXNlZCkgcHJlaW1hZ2UgdmlldycgJworCXByaW50ZiAiU1ZOUSViIiAiUVwwMDNRUVEiIHwgcV90b19udWwgPmNsZWFyLnJlYWRwcmVpbWFnZSAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNsZWFyLnJlYWRwcmVpbWFnZSA5ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlaW1hZ2UgdmlldzogcmlnaHQgZW5kcG9pbnQgY2Fubm90IGJhY2t0cmFjaycgJworCXByaW50ZiAiU1ZOUSViJWIiICJRXDAwM1FRUSIgIlFcMDAyUVFRIiB8CisJCXFfdG9fbnVsID5jbGVhci5iYWNrdHJhY2sgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5iYWNrdHJhY2sgMTQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlaW1hZ2UgdmlldzogbGVmdCBlbmRwb2ludCBjYW4gYWR2YW5jZScgJworCXByaW50ZiAiU1ZOUSViJWIiICJRXDAwM1FRUSIgIlwwMDFcMDAyUVFRIiB8CisJCXFfdG9fbnVsID5jbGVhci5wcmVzaHJpbmsgJiYKKwlwcmludGYgIlNWTlElYiViIiAiUVwwMDNRUVEiICJcMDAxXDAwMVFRUSIgfAorCQlxX3RvX251bCA+Y2xlYXIuc2hyaW5rYmFja3RyYWNrICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIucHJlc2hyaW5rIDE0ID5hY3R1YWwgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5zaHJpbmtiYWNrdHJhY2sgMTQgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlaW1hZ2Ugdmlldzogb2Zmc2V0cyBjb21wYXJlZCBieSB2YWx1ZScgJworCXByaW50ZiAiU1ZOUSViJWIiICJcMDAxXDAwMVFRUSIgIlwwMjAwUVwwMDNRUVEiIHwKKwkJcV90b19udWwgPmNsZWFyLm5vaXN5YmFja3RyYWNrICYmCisJcHJpbnRmICJTVk5RJWIlYiIgIlwwMDFcMDAxUVFRIiAiXDAyMDBcMDAxXDAwMlFRUSIgfAorCQlxX3RvX251bCA+Y2xlYXIubm9pc3lhZHZhbmNlICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY2xlYXIubm9pc3liYWNrdHJhY2sgMTUgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5ub2lzeWFkdmFuY2UgMTUgJiYKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlaW1hZ2UgdmlldzogcmVqZWN0IHRydW5jYXRlZCBwcmVpbWFnZScgJworCXByaW50ZiAiU1ZOUSViIiAiXDAxMFFRUVEiIHwgcV90b19udWwgPmNsZWFyLmxhdGVlbXB0eXJlYWQgJiYKKwlwcmludGYgIlNWTlElYiIgIlwwMTBcMDAxUVFRIiB8IHFfdG9fbnVsID5jbGVhci5sYXRlbm9uZW1wdHlyZWFkICYmCisJcHJpbnRmICJTVk5RJWIiICJcMDAxXDAxMFFRUSIgfCBxX3RvX251bCA+Y2xlYXIubG9uZ3JlYWQgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5sYXRlZW1wdHlyZWFkIDkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5sYXRlbm9uZW1wdHlyZWFkIDkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjbGVhci5sb25ncmVhZCA5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmJpZCB1bmNvbnN1bWVkIGlubGluZSBkYXRhJyAnCisJcHJpbnRmICJTVk5RJWIlcyViJXMiICJRUVFRXDAwMyIgImJhciIgIlFRUVFcMDAxIiAieCIgfAorCQlxX3RvX251bCA+aW5saW5lLmNsZWFyICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgaW5saW5lLmNsZWFyIDE4ID5hY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVqZWN0IHRydW5jYXRlZCBpbmxpbmUgZGF0YScgJworCXByaW50ZiAiU1ZOUSViJXMiICJRUVFRXDAwMyIgImIiIHwgcV90b19udWwgPmlubGluZS50cnVuYyAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGlubGluZS50cnVuYyAxMAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWplY3QgdHJ1bmNhdGVkIGlubGluZSBkYXRhIChhZnRlciBpbnN0cnVjdGlvbiBzZWN0aW9uKScgJworCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFRXDAwMVwwMDFcMDAzIiAiXDAyMDEiICJiIiB8IHFfdG9fbnVsID5pbnNuLnRydW5jICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgaW5zbi50cnVuYyAxMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5ZnJvbV9kYXRhJyAnCisJZWNobyBoaSA+ZXhwZWN0ICYmCisJcHJpbnRmICJTVk5RJWIlYiViIiAiUVFcMDAzXDAwMVwwMDMiICJcMDIwMyIgImhpXG4iIHwgcV90b19udWwgPmNvcHlkYXQgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5ZGF0IDEzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpcGxlIGNvcHlmcm9tX2RhdGEnICcKKwllY2hvIGhpID5leHBlY3QgJiYKKwlwcmludGYgIlNWTlElYiViJWIlYiViIiAiUVFcMDAzXDAwMlwwMDMiICJcMDIwMVwwMjAyIiAiaGlcbiIgXAorCQkiUVFRXDAwMlEiICJcMDIwMFEiIHwgcV90b19udWwgPmNvcHkubXVsdGkgJiYKKwlsZW49JCh3YyAtYyA8Y29weS5tdWx0aSkgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5Lm11bHRpICRsZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5jb21wbGV0ZSBtdWx0aXBsZSBpbnNuJyAnCisJcHJpbnRmICJTVk5RJWIlYiViIiAiUVFcMDAzXDAwMlwwMDMiICJcMDIwM1wwMjAwIiAiaGlcbiIgfAorCQlxX3RvX251bCA+Y29weS5wYXJ0aWFsICYmCisJbGVuPSQod2MgLWMgPGNvcHkucGFydGlhbCkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5LnBhcnRpYWwgJGxlbgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXRjaCBhdHRlbXB0IHRvIGNvcHkgbWlzc2luZyBkYXRhJyAnCisJcHJpbnRmICJTVk5RJWIlYiVzJWIlcyIgIlFRXDAwMlwwMDJcMDAxIiAiXDAyMDFcMDIwMSIgIlgiIFwKKwkJCSJRUVFRXDAwMiIgIllaIiB8CisJCXFfdG9fbnVsID5jb3B5LmluY29tcGxldGUgJiYKKwlsZW49JCh3YyAtYyA8Y29weS5pbmNvbXBsZXRlKSAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHkuaW5jb21wbGV0ZSAkbGVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHlmcm9tIHRhcmdldCB0byByZXBlYXQgZGF0YScgJworCXByaW50ZiBmb29mb28gPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFRXDAwNlwwMDRcMDAzIiAiXDAyMDNcMDEwMFwwMDNRIiAiZm9vIiB8CisJCXFfdG9fbnVsID5jb3B5dGFyZ2V0LnJlcGVhdCAmJgorCWxlbj0kKHdjIC1jIDxjb3B5dGFyZ2V0LnJlcGVhdCkgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5dGFyZ2V0LnJlcGVhdCAkbGVuID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHlmcm9tIHRhcmdldCBvdXQgb2Ygb3JkZXInICcKKwlwcmludGYgZm9vb29mID5leHBlY3QgJiYKKwlwcmludGYgIlNWTlElYiViJXMiIFwKKwkJIlFRXDAwNlwwMDdcMDAzIiAiXDAyMDNcMDEwMVwwMDJcMDEwMVwwMDFcMDEwMVEiICJmb28iIHwKKwkJcV90b19udWwgPmNvcHl0YXJnZXQucmV2ZXJzZSAmJgorCWxlbj0kKHdjIC1jIDxjb3B5dGFyZ2V0LnJldmVyc2UpICYmCisJdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weXRhcmdldC5yZXZlcnNlICRsZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2F0Y2ggY29weWZyb20gZnV0dXJlJyAnCisJcHJpbnRmICJTVk5RJWIlYiVzIiAiUVFcMDA0XDAwNFwwMDMiICJcMDIwMlwwMTAxXDAwMlwwMjAxIiAiWFlaIiB8CisJCXFfdG9fbnVsID5jb3B5dGFyZ2V0LmluZnV0dXJlICYmCisJbGVuPSQod2MgLWMgPGNvcHl0YXJnZXQuaW5mdXR1cmUpICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weXRhcmdldC5pbmZ1dHVyZSAkbGVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgdG8gc3VzdGFpbicgJworCXByaW50ZiBYWVhZWFlYWVhZWFogPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFRXDAxNFwwMDRcMDAzIiAiXDAyMDJcMDExMVFcMDIwMSIgIlhZWiIgfAorCQlxX3RvX251bCA+Y29weXRhcmdldC5zdXN0YWluICYmCisJbGVuPSQod2MgLWMgPGNvcHl0YXJnZXQuc3VzdGFpbikgJiYKKwl0ZXN0LXN2bi1mZSAtZCBwcmVpbWFnZSBjb3B5dGFyZ2V0LnN1c3RhaW4gJGxlbiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjYXRjaCBjb3B5IHRoYXQgb3ZlcmZsb3dzJyAnCisJcHJpbnRmICJTVk5RJWIlYiVzIiAiUVFcMDAzXDAwM1wwMDEiICJcMDIwMVwwMTc3USIgWCB8CisJCXFfdG9fbnVsID5jb3B5dGFyZ2V0Lm92ZXJmbG93ICYmCisJbGVuPSQod2MgLWMgPGNvcHl0YXJnZXQub3ZlcmZsb3cpICYmCisJdGVzdF9tdXN0X2ZhaWwgdGVzdC1zdm4tZmUgLWQgcHJlaW1hZ2UgY29weXRhcmdldC5vdmVyZmxvdyAkbGVuCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHlmcm9tIHNvdXJjZScgJworCXByaW50ZiBmb28gPmV4cGVjdCAmJgorCXByaW50ZiAiU1ZOUSViJWIiICJRXDAwM1wwMDNcMDAyUSIgIlwwMDNRIiB8IHFfdG9fbnVsID5jb3B5c291cmNlLmFsbCAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHlzb3VyY2UuYWxsIDExID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcHkgYmFja3dhcmRzJyAnCisJcHJpbnRmIG9vZiA+ZXhwZWN0ICYmCisJcHJpbnRmICJTVk5RJWIlYiIgIlFcMDAzXDAwM1wwMDZRIiAiXDAwMVwwMDJcMDAxXDAwMVwwMDFRIiB8CisJCXFfdG9fbnVsID5jb3B5c291cmNlLnJldiAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHlzb3VyY2UucmV2IDE1ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ29mZnNldHMgYXJlIHJlbGF0aXZlIHRvIHdpbmRvdycgJworCXByaW50ZiBmbyA+ZXhwZWN0ICYmCisJcHJpbnRmICJTVk5RJWIlYiViJWIiICJRXDAwM1wwMDFcMDAyUSIgIlwwMDFRIiBcCisJCSJcMDAyXDAwMVwwMDFcMDAyUSIgIlwwMDFRIiB8CisJCXFfdG9fbnVsID5jb3B5c291cmNlLnR3byAmJgorCXRlc3Qtc3ZuLWZlIC1kIHByZWltYWdlIGNvcHlzb3VyY2UudHdvIDE4ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4YW1wbGUgZnJvbSBub3Rlcy9zdm5kaWZmJyAnCisJcHJpbnRmIGFhYWFjY2NjZGRkZGRkZGQgPmV4cGVjdCAmJgorCXByaW50ZiBhYWFhYmJiYmNjY2MgPnNvdXJjZSAmJgorCXByaW50ZiAiU1ZOUSViJWIlcyIgIlFcMDE0XDAyMFwwMDdcMDAxIiBcCisJCSJcMDA0UVwwMDRcMDEwXDAyMDFcMDEwN1wwMTAiIGQgfAorCQlxX3RvX251bCA+ZGVsdGEuZXhhbXBsZSAmJgorCWxlbj0kKHdjIC1jIDxkZWx0YS5leGFtcGxlKSAmJgorCXRlc3Qtc3ZuLWZlIC1kIHNvdXJjZSBkZWx0YS5leGFtcGxlICRsZW4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MDIwLXJlbW90ZS1zdm4uc2ggYi90L3Q5MDIwLXJlbW90ZS1zdm4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGQ4MWJhMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkwMjAtcmVtb3RlLXN2bi5zaApAQCAtMCwwICsxLDg5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdHMgcmVtb3RlLXN2bicKKworLiAuL3Rlc3QtbGliLnNoCisKK01BUktTUEFUSD0uZ2l0L2luZm8vZmFzdC1pbXBvcnQvcmVtb3RlLXN2bgorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUFlUSE9OCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHJlbW90ZS1zdm4gdGVzdHMsIHB5dGhvbiBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworIyBPdmVycmlkZSBzdm5yZHVtcCB3aXRoIG91ciBzaW11bGF0b3IKK1BBVEg9IiRIT01FOiRQQVRIIgorZXhwb3J0IFBBVEggUFlUSE9OX1BBVEggR0lUX0JVSUxEX0RJUgorCit3cml0ZV9zY3JpcHQgIiRIT01FL3N2bnJkdW1wIiA8PFxFT0YKK2V4ZWMgIiRQWVRIT05fUEFUSCIgIiRHSVRfQlVJTERfRElSL2NvbnRyaWIvc3ZuLWZlL3N2bnJkdW1wX3NpbS5weSIgIiRAIgorRU9GCisKK2luaXRfZ2l0ICgpIHsKKwlybSAtZnIgLmdpdCAmJgorCWdpdCBpbml0ICYmCisJI2dpdCByZW1vdGUgYWRkIHN2bnNpbSB0ZXN0c3ZuOjpzaW06Ly8vJFRFU1RfRElSRUNUT1JZL3Q5MDIwL2V4YW1wbGUuc3ZucmR1bXAKKwkjIGxldCdzIHJldXNlIGFuIGV4aXN0aW5nIGR1bXAgZmlsZSE/CisJZ2l0IHJlbW90ZSBhZGQgc3Zuc2ltIHRlc3Rzdm46OnNpbTovLyRURVNUX0RJUkVDVE9SWS90OTE1NC9zdm4uZHVtcAorCWdpdCByZW1vdGUgYWRkIHN2bmZpbGUgdGVzdHN2bjo6ZmlsZTovLyRURVNUX0RJUkVDVE9SWS90OTE1NC9zdm4uZHVtcAorfQorCitpZiB0ZXN0IC1lICIkR0lUX0JVSUxEX0RJUi9naXQtcmVtb3RlLXRlc3Rzdm4iCit0aGVuCisJdGVzdF9zZXRfcHJlcmVxIFJFTU9URV9TVk4KK2ZpCisKK3Rlc3RfZGVidWcgJworCWdpdCAtLXZlcnNpb24KKwl0eXBlIGdpdAorCXR5cGUgc3ZucmR1bXAKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBSRU1PVEVfU1ZOICdzaW1wbGUgZmV0Y2gnICcKKwlpbml0X2dpdCAmJgorCWdpdCBmZXRjaCBzdm5zaW0gJiYKKwl0ZXN0X2NtcCAuZ2l0L3JlZnMvc3ZuL3N2bnNpbS9tYXN0ZXIgLmdpdC9yZWZzL3JlbW90ZXMvc3Zuc2ltL21hc3RlciAgJiYKKwljcCAuZ2l0L3JlZnMvcmVtb3Rlcy9zdm5zaW0vbWFzdGVyIG1hc3Rlci5nb29kCisnCisKK3Rlc3RfZGVidWcgJworCWNhdCAuZ2l0L3JlZnMvc3ZuL3N2bnNpbS9tYXN0ZXIKKwljYXQgLmdpdC9yZWZzL3JlbW90ZXMvc3Zuc2ltL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFTU9URV9TVk4gJ3JlcGVhdGVkIGZldGNoLCBub3RoaW5nIHNoYWxsIGNoYW5nZScgJworCWdpdCBmZXRjaCBzdm5zaW0gJiYKKwl0ZXN0X2NtcCBtYXN0ZXIuZ29vZCAuZ2l0L3JlZnMvcmVtb3Rlcy9zdm5zaW0vbWFzdGVyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUkVNT1RFX1NWTiAnZmV0Y2ggZnJvbSBhIGZpbGU6Ly8gdXJsIGdpdmVzIHRoZSBzYW1lIHJlc3VsdCcgJworCWdpdCBmZXRjaCBzdm5maWxlCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUkVNT1RFX1NWTiAndGhlIHNoYTEgZGlmZmVyIGJlY2F1c2UgdGhlIGdpdC1zdm4taWQgbGluZSBpbiB0aGUgY29tbWl0IG1zZyBjb250YWlucyB0aGUgdXJsJyAnCisJdGVzdF9jbXAgLmdpdC9yZWZzL3JlbW90ZXMvc3ZuZmlsZS9tYXN0ZXIgLmdpdC9yZWZzL3JlbW90ZXMvc3Zuc2ltL21hc3RlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFTU9URV9TVk4gJ21hcmstZmlsZSByZWdlbmVyYXRpb24nICcKKwkjIGZpbHRlciBvdXQgYW55IG90aGVyIG1hcmtzLCB0aGF0IGNhbiBub3QgYmUgcmVnZW5lcmF0ZWQuIE9ubHkgdXAgdG8gMyBkaWdpdCByZXZpc2lvbnMgYXJlIGFsbG93ZWQgaGVyZQorCWdyZXAgIjpbMC05XVx7MSwzXH0gIiAkTUFSS1NQQVRIL3N2bnNpbS5tYXJrcyA+ICRNQVJLU1BBVEgvc3Zuc2ltLm1hcmtzLm9sZCAmJgorCXJtICRNQVJLU1BBVEgvc3Zuc2ltLm1hcmtzICYmCisJZ2l0IGZldGNoIHN2bnNpbSAmJgorCXRlc3RfY21wICRNQVJLU1BBVEgvc3Zuc2ltLm1hcmtzLm9sZCAkTUFSS1NQQVRIL3N2bnNpbS5tYXJrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFJFTU9URV9TVk4gJ2luY3JlbWVudGFsIGltcG9ydHMgbXVzdCBsZWFkIHRvIHRoZSBzYW1lIGhlYWQnICcKKwlTVk5STUFYPTMgJiYKKwlleHBvcnQgU1ZOUk1BWCAmJgorCWluaXRfZ2l0ICYmCisJZ2l0IGZldGNoIHN2bnNpbSAmJgorCXRlc3RfY21wIC5naXQvcmVmcy9zdm4vc3Zuc2ltL21hc3RlciAuZ2l0L3JlZnMvcmVtb3Rlcy9zdm5zaW0vbWFzdGVyICAmJgorCXVuc2V0IFNWTlJNQVggJiYKKwlnaXQgZmV0Y2ggc3Zuc2ltICYmCisJdGVzdF9jbXAgbWFzdGVyLmdvb2QgLmdpdC9yZWZzL3JlbW90ZXMvc3Zuc2ltL21hc3RlcgorJworCit0ZXN0X2RlYnVnICdnaXQgYnJhbmNoIC1hJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaCBiL3QvdDkxMDAtZ2l0LXN2bi1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZmVhOGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwMC1naXQtc3ZuLWJhc2ljLnNoCkBAIC0wLDAgKzEsMzE4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGJhc2ljIHRlc3RzJworR0lUX1NWTl9MQ19BTEw9JHtMQ19BTEw6LSRMQU5HfQorCisuIC4vbGliLWdpdC1zdm4uc2gKKworc2F5ICdkZWZpbmUgTk9fU1ZOX1RFU1RTIHRvIHNraXAgZ2l0IHN2biB0ZXN0cycKKworY2FzZSAiJEdJVF9TVk5fTENfQUxMIiBpbgorKi5VVEYtOCkKKwl0ZXN0X3NldF9wcmVyZXEgVVRGOAorCTs7CisqKQorCXNheSAiIyBVVEYtOCBsb2NhbGUgbm90IHNldCwgc29tZSB0ZXN0cyBza2lwcGVkICgkR0lUX1NWTl9MQ19BTEwpIgorCTs7Citlc2FjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbml0aWFsaXplIGdpdCBzdm4nICcKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCWNkIGltcG9ydCAmJgorCQllY2hvIGZvbyA+Zm9vICYmCisJCWxuIC1zIGZvbyBmb28ubGluaworCQlta2RpciAtcCBkaXIvYS9iL2MvZC9lICYmCisJCWVjaG8gImRlZXAgZGlyIiA+ZGlyL2EvYi9jL2QvZS9maWxlICYmCisJCW1rZGlyIGJhciAmJgorCQllY2hvICJ6enoiID5iYXIvenp6ICYmCisJCWVjaG8gIiMhL2Jpbi9zaCIgPmV4ZWMuc2ggJiYKKwkJY2htb2QgK3ggZXhlYy5zaCAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAorCSkgJiYKKwlybSAtcmYgaW1wb3J0ICYmCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdpbXBvcnQgYW4gU1ZOIHJldmlzaW9uIGludG8gZ2l0JyBcCisgICAgJ2dpdCBzdm4gZmV0Y2gnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNoZWNrb3V0IGZyb20gc3ZuIiAnc3ZuIGNvICIkc3ZucmVwbyIgIiRTVk5fVFJFRSInCisKK25hbWU9J3RyeSBhIGRlZXAgLS1ybWRpciB3aXRoIGEgY29tbWl0JwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2ggJHtyZW1vdGVzX2dpdF9zdm59ICYmCisJbXYgZGlyL2EvYi9jL2QvZS9maWxlIGRpci9maWxlICYmCisJY3AgZGlyL2ZpbGUgZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS1yZW1vdmUgZGlyL2EvYi9jL2QvZS9maWxlIGRpci9maWxlIGZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKKwlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAorCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoICYmCisJc3ZuX2NtZCB1cCAiJFNWTl9UUkVFIiAmJgorCXRlc3QgLWQgIiRTVk5fVFJFRSIvZGlyICYmIHRlc3QgISAtZCAiJFNWTl9UUkVFIi9kaXIvYScKKworCituYW1lPSdkZXRlY3Qgbm9kZSBjaGFuZ2UgZnJvbSBmaWxlIHRvIGRpcmVjdG9yeSAjMScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAiCisJbWtkaXIgZGlyL25ld19maWxlICYmCisJbXYgZGlyL2ZpbGUgZGlyL25ld19maWxlL2ZpbGUgJiYKKwltdiBkaXIvbmV3X2ZpbGUgZGlyL2ZpbGUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGRpci9maWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBkaXIvZmlsZS9maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAnJG5hbWUnICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaAorIgorCisKK25hbWU9J2RldGVjdCBub2RlIGNoYW5nZSBmcm9tIGRpcmVjdG9yeSB0byBmaWxlICMxJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlybSAtcmYgZGlyICIkR0lUX0RJUiIvaW5kZXggJiYKKwlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2gyICR7cmVtb3Rlc19naXRfc3ZufSAmJgorCW12IGJhci96enogenp6ICYmCisJcm0gLXJmIGJhciAmJgorCW12IHp6eiBiYXIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIC0tIGJhci96enogJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIC0tIGJhciAmJgorCWdpdCBjb21taXQgLW0gIiRuYW1lIiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gc2V0LXRyZWUgLS1maW5kLWNvcGllcy1oYXJkZXIgLS1ybWRpciBcCisJCSR7cmVtb3Rlc19naXRfc3ZufS4ubXlicmFuY2gyCisnCisKKworbmFtZT0nZGV0ZWN0IG5vZGUgY2hhbmdlIGZyb20gZmlsZSB0byBkaXJlY3RvcnkgIzInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJworCXJtIC1mICIkR0lUX0RJUiIvaW5kZXggJiYKKwlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2gzICR7cmVtb3Rlc19naXRfc3ZufSAmJgorCXJtIGJhci96enogJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tcmVtb3ZlIGJhci96enogJiYKKwlta2RpciBiYXIvenp6ICYmCisJZWNobyB5eXkgPiBiYXIvenp6L3l5eSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgYmFyL3p6ei95eXkgJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKKwlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAorCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoMyAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0IC1kICIkU1ZOX1RSRUUiL2Jhci96enogJiYKKwl0ZXN0IC1lICIkU1ZOX1RSRUUiL2Jhci96enoveXl5CisnCisKK25hbWU9J2RldGVjdCBub2RlIGNoYW5nZSBmcm9tIGRpcmVjdG9yeSB0byBmaWxlICMyJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlybSAtZiAiJEdJVF9ESVIiL2luZGV4ICYmCisJZ2l0IGNoZWNrb3V0IC1mIC1iIG15YnJhbmNoNCAke3JlbW90ZXNfZ2l0X3N2bn0gJiYKKwlybSAtcmYgZGlyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlbW92ZSAtLSBkaXIvZmlsZSAmJgorCXRvdWNoIGRpciAmJgorCWVjaG8gYXNkZiA+IGRpciAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgLS0gZGlyICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDQKKycKKworCituYW1lPSdyZW1vdmUgZXhlY3V0YWJsZSBiaXQgZnJvbSBhIGZpbGUnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICIkbmFtZSIgJworCXJtIC1mICIkR0lUX0RJUiIvaW5kZXggJiYKKwlnaXQgY2hlY2tvdXQgLWYgLWIgbXlicmFuY2g1ICR7cmVtb3Rlc19naXRfc3ZufSAmJgorCWNobW9kIC14IGV4ZWMuc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IGV4ZWMuc2ggJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKKwlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAorCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoNSAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0ICEgLXggIiRTVk5fVFJFRSIvZXhlYy5zaCcKKworCituYW1lPSdhZGQgZXhlY3V0YWJsZSBiaXQgYmFjayBmaWxlJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwljaG1vZCAreCBleGVjLnNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBleGVjLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDUgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAteCAiJFNWTl9UUkVFIi9leGVjLnNoJworCisKK25hbWU9J2V4ZWN1dGFibGUgZmlsZSBiZWNvbWVzIGEgc3ltbGluayB0byBmaWxlJwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwlybSBleGVjLnNoICYmCisJbG4gLXMgZmlsZSBleGVjLnNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBleGVjLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDUgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAtaCAiJFNWTl9UUkVFIi9leGVjLnNoJworCituYW1lPSduZXcgc3ltbGluayBpcyBhZGRlZCB0byBhIGZpbGUgdGhhdCB3YXMgYWxzbyBqdXN0IG1hZGUgZXhlY3V0YWJsZScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICcKKwljaG1vZCAreCBmaWxlICYmCisJbG4gLXMgZmlsZSBleGVjLTIuc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGZpbGUgZXhlYy0yLnNoICYmCisJZ2l0IGNvbW1pdCAtbSAiJG5hbWUiICYmCisJZ2l0IHN2biBzZXQtdHJlZSAtLWZpbmQtY29waWVzLWhhcmRlciAtLXJtZGlyIFwKKwkJJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaDUgJiYKKwlzdm5fY21kIHVwICIkU1ZOX1RSRUUiICYmCisJdGVzdCAteCAiJFNWTl9UUkVFIi9maWxlICYmCisJdGVzdCAtaCAiJFNWTl9UUkVFIi9leGVjLTIuc2gnCisKK25hbWU9J21vZGlmeSBhIHN5bWxpbmsgdG8gYmVjb21lIGEgZmlsZScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiAnCisJZWNobyBnaXQgaGVscCA+aGVscCAmJgorCXJtIGV4ZWMtMi5zaCAmJgorCWNwIGhlbHAgZXhlYy0yLnNoICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBleGVjLTIuc2ggJiYKKwlnaXQgY29tbWl0IC1tICIkbmFtZSIgJiYKKwlnaXQgc3ZuIHNldC10cmVlIC0tZmluZC1jb3BpZXMtaGFyZGVyIC0tcm1kaXIgXAorCQkke3JlbW90ZXNfZ2l0X3N2bn0uLm15YnJhbmNoNSAmJgorCXN2bl9jbWQgdXAgIiRTVk5fVFJFRSIgJiYKKwl0ZXN0IC1mICIkU1ZOX1RSRUUiL2V4ZWMtMi5zaCAmJgorCXRlc3QgISAtaCAiJFNWTl9UUkVFIi9leGVjLTIuc2ggJiYKKwl0ZXN0X2NtcCBoZWxwICIkU1ZOX1RSRUUiL2V4ZWMtMi5zaCcKKworbmFtZT0iY29tbWl0IHdpdGggVVRGLTggbWVzc2FnZTogbG9jYWxlOiAkR0lUX1NWTl9MQ19BTEwiCitMQ19BTEw9IiRHSVRfU1ZOX0xDX0FMTCIKK2V4cG9ydCBMQ19BTEwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVVRGOCAiJG5hbWUiICIKKwllY2hvICcjIGhlbGxvJyA+PiBleGVjLTIuc2ggJiYKKwlnaXQgdXBkYXRlLWluZGV4IGV4ZWMtMi5zaCAmJgorCWdpdCBjb21taXQgLW0gJ8Opw6/iiI8nICYmCisJZ2l0IHN2biBzZXQtdHJlZSBIRUFEIgordW5zZXQgTENfQUxMCisKK25hbWU9J3Rlc3QgZmV0Y2ggZnVuY3Rpb25hbGl0eSAoc3ZuID0+IGdpdCkgd2l0aCBhbHRlcm5hdGUgR0lUX1NWTl9JRCcKK0dJVF9TVk5fSUQ9YWx0CitleHBvcnQgR0lUX1NWTl9JRAordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiIFwKKyAgICAnZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYgZ2l0IHN2biBmZXRjaCAmJgorICAgICBnaXQgcmV2LWxpc3QgLS1wcmV0dHk9cmF3ICR7cmVtb3Rlc19naXRfc3ZufSB8IGdyZXAgXnRyZWUgfCB1bmlxID4gYSAmJgorICAgICBnaXQgcmV2LWxpc3QgLS1wcmV0dHk9cmF3IHJlbW90ZXMvYWx0IHwgZ3JlcCBedHJlZSB8IHVuaXEgPiBiICYmCisgICAgIHRlc3RfY21wIGEgYicKKworbmFtZT0nY2hlY2sgaW1wb3J0ZWQgdHJlZSBjaGVja3N1bXMgZXhwZWN0ZWQgdHJlZSBjaGVja3N1bXMnCitybSAtZiBleHBlY3RlZAoraWYgdGVzdF9oYXZlX3ByZXJlcSBVVEY4Cit0aGVuCisJZWNobyB0cmVlIGRjNjhiMTRiNzMzZTRlYzg1YjA0YWI2ZjcxMjM0MGVkYzVkYzkzNmUgPiBleHBlY3RlZAorZmkKK2NhdCA+PiBleHBlY3RlZCA8PFxFT0YKK3RyZWUgYzMzMjI4OTBkY2Y3NDkwMWYzMmQyMTZmMDVjNTA0NGY2NzBjZTYzMgordHJlZSBkM2NjZDUwMzVmZWFmZDE3YjAzMGM1NzMyZTc4MDhjYzQ5MTIyODUzCit0cmVlIGQwM2UxNjMwMzYzZDQ4ODFlNjg5MjlkNTMyNzQ2YjIwYjA5ODZiODMKK3RyZWUgMTQ5ZDYzY2Q1ODc4MTU1Yzg0NmU4YzU1ZDdkODQ4N2RlMjgzZjg5ZQordHJlZSAzMTJiNzZlNGY2NGNlMTQ4OTNhZWFjODU5MWViMzk2MGIwNjVlMjQ3Cit0cmVlIDE0OWQ2M2NkNTg3ODE1NWM4NDZlOGM1NWQ3ZDg0ODdkZTI4M2Y4OWUKK3RyZWUgZDY2NzI3MGExZjdiMTA5ZjVlYjNhYWVhMjFlZGUxNGI1NmJmZGQ2ZQordHJlZSA4ZjUxZjc0Y2YwMTYzYWZjOWFkNjhhNGIxNTM3Mjg4YzQ1NThiNWE0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAiJG5hbWUiICJ0ZXN0X2NtcCBhIGV4cGVjdGVkIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGl0IGlmIHJlbW90ZSByZWZzIGFyZSBhbWJpZ2lvdXMnICIKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXI6cmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0gJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIG1pZ3JhdGUKKyIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpdCBpZiBpbml0LWluZyBhIHdvdWxkIGNsb2JiZXIgYSBVUkwnICcKKyAgICAgICAgc3ZuYWRtaW4gY3JlYXRlICIke1BXRH0vc3ZucmVwbzIiICYmCisgICAgICAgIHN2biBta2RpciAtbSAibWtkaXIgYmFyIiAiJHtzdm5yZXBvfTIvYmFyIiAmJgorICAgICAgICBnaXQgY29uZmlnIC0tdW5zZXQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXmJhcjpyZWZzLyR7cmVtb3Rlc19naXRfc3ZufSQiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbml0ICIke3N2bnJlcG99Mi9iYXIiCisgICAgICAgICcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICdpbml0IGFsbG93cyB1cyB0byBjb25uZWN0IHRvIGFub3RoZXIgZGlyZWN0b3J5IGluIHRoZSBzYW1lIHJlcG8nICcKKyAgICAgICAgZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGJhciAiJHN2bnJlcG8vYmFyIiAmJgorICAgICAgICBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeYmFyOnJlZnMvcmVtb3Rlcy9iYXIkIiAmJgorICAgICAgICBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeOnJlZnMvJHtyZW1vdGVzX2dpdF9zdm59JCIKKyAgICAgICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0ICRyZXYgZG9lcyBub3QgY2xvYmJlciBjdXJyZW50IGJyYW5jaCcgJworCWdpdCBzdm4gZmV0Y2ggLWkgYmFyICYmCisJZ2l0IGNoZWNrb3V0IC1iIG15LWJhciByZWZzL3JlbW90ZXMvYmFyICYmCisJZWNobyAxID4gZm9vICYmCisJZ2l0IGFkZCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJjaGFuZ2UgMSIgJiYKKwllY2hvIDIgPiBmb28gJiYKKwlnaXQgYWRkIGZvbyAmJgorCWdpdCBjb21taXQgLW0gImNoYW5nZSAyIiAmJgorCW9sZF9oZWFkPSQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCWdpdCBzdm4gZGNvbW1pdCAtaSBiYXIgSEVBRF4gJiYKKwl0ZXN0ICRvbGRfaGVhZCA9ICQoZ2l0IHJldi1wYXJzZSBIRUFEKSAmJgorCXRlc3QgcmVmcy9oZWFkcy9teS1iYXIgPSAkKGdpdCBzeW1ib2xpYy1yZWYgSEVBRCkgJiYKKwlnaXQgbG9nIHJlZnMvcmVtb3Rlcy9iYXIgfCBncmVwICJjaGFuZ2UgMSIgJiYKKwkhIGdpdCBsb2cgcmVmcy9yZW1vdGVzL2JhciB8IGdyZXAgImNoYW5nZSAyIiAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwlnaXQgYnJhbmNoIC1EIG15LWJhcgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWJsZSB0byBkY29tbWl0IHRvIGEgc3ViZGlyZWN0b3J5JyAiCisJZ2l0IHN2biBmZXRjaCAtaSBiYXIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgbXktYmFyIHJlZnMvcmVtb3Rlcy9iYXIgJiYKKwllY2hvIGFiYyA+IGQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGQgJiYKKwlnaXQgY29tbWl0IC1tICcvYmFyL2Qgc2hvdWxkIGJlIGluIHRoZSBsb2cnICYmCisJZ2l0IHN2biBkY29tbWl0IC1pIGJhciAmJgorCXRlc3QgLXogXCJcYGdpdCBkaWZmIHJlZnMvaGVhZHMvbXktYmFyIHJlZnMvcmVtb3Rlcy9iYXJcYFwiICYmCisJbWtkaXIgbmV3ZGlyICYmCisJZWNobyBuZXcgPiBuZXdkaXIvZGlyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBuZXdkaXIvZGlyICYmCisJZ2l0IGNvbW1pdCAtbSAnYWRkIGEgbmV3IGRpcmVjdG9yeScgJiYKKwlnaXQgc3ZuIGRjb21taXQgLWkgYmFyICYmCisJdGVzdCAteiBcIlxgZ2l0IGRpZmYgcmVmcy9oZWFkcy9teS1iYXIgcmVmcy9yZW1vdGVzL2JhclxgXCIgJiYKKwllY2hvIGZvbyA+PiBuZXdkaXIvZGlyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBuZXdkaXIvZGlyICYmCisJZ2l0IGNvbW1pdCAtbSAnbW9kaWZ5IGEgZmlsZSBpbiBuZXcgZGlyZWN0b3J5JyAmJgorCWdpdCBzdm4gZGNvbW1pdCAtaSBiYXIgJiYKKwl0ZXN0IC16IFwiXGBnaXQgZGlmZiByZWZzL2hlYWRzL215LWJhciByZWZzL3JlbW90ZXMvYmFyXGBcIgorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBzaG91bGQgbm90IGZhaWwgd2l0aCBhIHRvdWNoZWQgZmlsZScgJworCXRlc3RfY29tbWl0ICJjb21taXQtbmV3LWZpbGUtZm9vMiIgZm9vMiAmJgorCXRlc3QtY2htdGltZSA9LTYwIGZvbyAmJgorCWdpdCBzdm4gZGNvbW1pdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWJhc2Ugc2hvdWxkIG5vdCBmYWlsIHdpdGggYSB0b3VjaGVkIGZpbGUnICcKKwl0ZXN0LWNobXRpbWUgPS02MCBmb28gJiYKKwlnaXQgc3ZuIHJlYmFzZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhYmxlIHRvIHNldC10cmVlIHRvIGEgc3ViZGlyZWN0b3J5JyAiCisJZWNobyBjYmEgPiBkICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBkICYmCisJZ2l0IGNvbW1pdCAtbSAndXBkYXRlIC9iYXIvZCcgJiYKKwlnaXQgc3ZuIHNldC10cmVlIC1pIGJhciBIRUFEICYmCisJdGVzdCAteiBcIlxgZ2l0IGRpZmYgcmVmcy9oZWFkcy9teS1iYXIgcmVmcy9yZW1vdGVzL2JhclxgXCIKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdC1zdm4gd29ya3MgaW4gYSBiYXJlIHJlcG9zaXRvcnknICcKKwlta2RpciBiYXJlLXJlcG8gJiYKKwkoIGNkIGJhcmUtcmVwbyAmJgorCWdpdCBpbml0IC0tYmFyZSAmJgorCUdJVF9ESVI9LiBnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggKSAmJgorCXJtIC1yZiBiYXJlLXJlcG8KKwknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQtc3ZuIHdvcmtzIGluIGluIGEgcmVwb3NpdG9yeSB3aXRoIGEgZ2l0ZGlyOiBsaW5rJyAnCisJbWtkaXIgd29ya3RyZWUgZ2l0ZGlyICYmCisJKCBjZCB3b3JrdHJlZSAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IGluaXQgLS1zZXBhcmF0ZS1naXQtZGlyIC4uL2dpdGRpciAmJgorCWdpdCBzdm4gZmV0Y2ggKSAmJgorCXJtIC1yZiB3b3JrdHJlZSBnaXRkaXIKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoIGIvdC90OTEwMS1naXQtc3ZuLXByb3BzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4NjlmNTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTAxLWdpdC1zdm4tcHJvcHMuc2gKQEAgLTAsMCArMSwyMjUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcHJvcGVydHkgdGVzdHMnCisuIC4vbGliLWdpdC1zdm4uc2gKKworbWtkaXIgaW1wb3J0CisKK2FfY3JsZj0KK2FfbGY9CithX2NyPQorYV9uZV9jcmxmPQorYV9uZV9sZj0KK2FfbmVfY3I9CithX2VtcHR5PQorYV9lbXB0eV9sZj0KK2FfZW1wdHlfY3I9CithX2VtcHR5X2NybGY9CisKK2NkIGltcG9ydAorCWNhdCA+PiBrdy5jIDw8XEVPRgorLyogU29tZWJvZHkgcHJlbWF0dXJlbHkgcHV0IGEga2V5d29yZCBpbnRvIHRoaXMgZmlsZSAqLworLyogJElkJCAqLworRU9GCisKKwlwcmludGYgIkhlbGxvXHJcbldvcmxkXHJcbiIgPiBjcmxmCisJYV9jcmxmPWBnaXQgaGFzaC1vYmplY3QgLXcgY3JsZmAKKwlwcmludGYgIkhlbGxvXHJXb3JsZFxyIiA+IGNyCisJYV9jcj1gZ2l0IGhhc2gtb2JqZWN0IC13IGNyYAorCXByaW50ZiAiSGVsbG9cbldvcmxkXG4iID4gbGYKKwlhX2xmPWBnaXQgaGFzaC1vYmplY3QgLXcgbGZgCisKKwlwcmludGYgIkhlbGxvXHJcbldvcmxkIiA+IG5lX2NybGYKKwlhX25lX2NybGY9YGdpdCBoYXNoLW9iamVjdCAtdyBuZV9jcmxmYAorCXByaW50ZiAiSGVsbG9cbldvcmxkIiA+IG5lX2xmCisJYV9uZV9sZj1gZ2l0IGhhc2gtb2JqZWN0IC13IG5lX2xmYAorCXByaW50ZiAiSGVsbG9ccldvcmxkIiA+IG5lX2NyCisJYV9uZV9jcj1gZ2l0IGhhc2gtb2JqZWN0IC13IG5lX2NyYAorCisJdG91Y2ggZW1wdHkKKwlhX2VtcHR5PWBnaXQgaGFzaC1vYmplY3QgLXcgZW1wdHlgCisJcHJpbnRmICJcbiIgPiBlbXB0eV9sZgorCWFfZW1wdHlfbGY9YGdpdCBoYXNoLW9iamVjdCAtdyBlbXB0eV9sZmAKKwlwcmludGYgIlxyIiA+IGVtcHR5X2NyCisJYV9lbXB0eV9jcj1gZ2l0IGhhc2gtb2JqZWN0IC13IGVtcHR5X2NyYAorCXByaW50ZiAiXHJcbiIgPiBlbXB0eV9jcmxmCisJYV9lbXB0eV9jcmxmPWBnaXQgaGFzaC1vYmplY3QgLXcgZW1wdHlfY3JsZmAKKworCXN2bl9jbWQgaW1wb3J0IC0tbm8tYXV0by1wcm9wcyAtbSAnaW1wb3J0IGZvciBnaXQgc3ZuJyAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAorY2QgLi4KKworcm0gLXJmIGltcG9ydAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd29ya2luZyBjb3B5IGZyb20gc3ZuJyAnc3ZuIGNvICIkc3ZucmVwbyIgdGVzdF93YycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNvbWUgY29tbWl0cyB0byBzdm4nICcKKwkoCisJCWNkIHRlc3Rfd2MgJiYKKwkJZWNobyBHcmVldGluZ3MgPj4ga3cuYyAmJgorCQlwb2tlIGt3LmMgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIk5vdCB5ZXQgYW4gSWQiICYmCisJCWVjaG8gSGVsbG8gd29ybGQgPj4ga3cuYyAmJgorCQlwb2tlIGt3LmMgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIk1vZGlmaWVkIGZpbGUsIGJ1dCBzdGlsbCBub3QgeWV0IGFuIElkIiAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIGt3LmMgJiYKKwkJcG9rZSBrdy5jICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJQcm9wc2V0IElkIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBnaXQgc3ZuJyAnZ2l0IHN2biBpbml0ICIkc3ZucmVwbyInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCByZXZpc2lvbnMgZnJvbSBzdm4nICdnaXQgc3ZuIGZldGNoJworCituYW1lPSd0ZXN0IHN2bjprZXl3b3JkcyBpZ25vcmluZycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRuYW1lIiBcCisJJ2dpdCBjaGVja291dCAtYiBteWJyYW5jaCAke3JlbW90ZXNfZ2l0X3N2bn0gJiYKKwllY2hvIEhpIGFnYWluID4+IGt3LmMgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0ZXN0IGtleXdvcmRzIGlnbm9yaW5nIiAmJgorCWdpdCBzdm4gc2V0LXRyZWUgJHtyZW1vdGVzX2dpdF9zdm59Li5teWJyYW5jaCAmJgorCWdpdCBwdWxsIC4gJHtyZW1vdGVzX2dpdF9zdm59JworCitleHBlY3Q9Jy8qICRJZCQgKi8nCitnb3Q9ImBzZWQgLW5lIDJwIGt3LmNgIgordGVzdF9leHBlY3Rfc3VjY2VzcyAncmF3ICRJZCQgZm91bmQgaW4ga3cuYycgInRlc3QgJyRleHBlY3QnID0gJyRnb3QnIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJwcm9wc2V0IENSIG9uIGNybGYgZmlsZXMiICcKKwkoCisJCWNkIHRlc3Rfd2MgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1IgZW1wdHkgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1IgY3JsZiAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBDUiBuZV9jcmxmICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJwcm9wc2V0IENSIG9uIGNybGYgZmlsZXMiCisJICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggYW5kIHB1bGwgbGF0ZXN0IGZyb20gc3ZuIGFuZCBjaGVja291dCBhIG5ldyB3YycgXAorCSdnaXQgc3ZuIGZldGNoICYmCisJIGdpdCBwdWxsIC4gJHtyZW1vdGVzX2dpdF9zdm59ICYmCisJIHN2bl9jbWQgY28gIiRzdm5yZXBvIiBuZXdfd2MnCisKK2ZvciBpIGluIGNybGYgbmVfY3JsZiBsZiBuZV9sZiBjciBuZV9jciBlbXB0eV9jciBlbXB0eV9sZiBlbXB0eSBlbXB0eV9jcmxmCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIkNvbXBhcmluZyAkaSIgImNtcCAkaSBuZXdfd2MvJGkiCitkb25lCisKKworY2QgdGVzdF93YworCXByaW50ZiAnJElkJFxySGVsbG9ccldvcmxkXHInID4gY3IKKwlwcmludGYgJyRJZCRcckhlbGxvXHJXb3JsZCcgPiBuZV9jcgorCWFfY3I9YHByaW50ZiAnJElkJFxyXG5IZWxsb1xyXG5Xb3JsZFxyXG4nIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW5gCisJYV9uZV9jcj1gcHJpbnRmICckSWQkXHJcbkhlbGxvXHJcbldvcmxkJyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluYAorCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NldCBDUkxGIG9uIGNyIGZpbGVzJyBcCisJJ3N2bl9jbWQgcHJvcHNldCBzdm46ZW9sLXN0eWxlIENSTEYgY3IgJiYKKwkgc3ZuX2NtZCBwcm9wc2V0IHN2bjplb2wtc3R5bGUgQ1JMRiBuZV9jciAmJgorCSBzdm5fY21kIHByb3BzZXQgc3ZuOmtleXdvcmRzIElkIGNyICYmCisJIHN2bl9jbWQgcHJvcHNldCBzdm46a2V5d29yZHMgSWQgbmVfY3IgJiYKKwkgc3ZuX2NtZCBjb21taXQgLW0gInByb3BzZXQgQ1JMRiBvbiBjciBmaWxlcyInCitjZCAuLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggYW5kIHB1bGwgbGF0ZXN0IGZyb20gc3ZuJyBcCisJJ2dpdCBzdm4gZmV0Y2ggJiYgZ2l0IHB1bGwgLiAke3JlbW90ZXNfZ2l0X3N2bn0nCisKK2JfY3I9ImBnaXQgaGFzaC1vYmplY3QgY3JgIgorYl9uZV9jcj0iYGdpdCBoYXNoLW9iamVjdCBuZV9jcmAiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgKyAkSWQkJyAidGVzdCAnJGFfY3InID0gJyRiX2NyJyIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NSTEYgKyAkSWQkIChubyBuZXdsaW5lKScgInRlc3QgJyRhX25lX2NyJyA9ICckYl9uZV9jciciCisKK2NhdCA+IHNob3ctaWdub3JlLmV4cGVjdCA8PFxFT0YKKworIyAvCisvbm8tc3VjaC1maWxlKgorCisjIC9kZWVwbHkvCisvZGVlcGx5L25vLXN1Y2gtZmlsZSoKKworIyAvZGVlcGx5L25lc3RlZC8KKy9kZWVwbHkvbmVzdGVkL25vLXN1Y2gtZmlsZSoKKworIyAvZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvCisvZGVlcGx5L25lc3RlZC9kaXJlY3Rvcnkvbm8tc3VjaC1maWxlKgorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3Qgc2hvdy1pZ25vcmUnICIKKwkoCisJCWNkIHRlc3Rfd2MgJiYKKwkJbWtkaXIgLXAgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkgJiYKKwkJdG91Y2ggZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvLmtlZXAgJiYKKwkJc3ZuX2NtZCBhZGQgZGVlcGx5ICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IC1SIHN2bjppZ25vcmUgJworbm8tc3VjaC1maWxlKgorJyAuCisJCXN2bl9jbWQgY29tbWl0IC1tICdwcm9wc2V0IHN2bjppZ25vcmUnCisJKSAmJgorCWdpdCBzdm4gc2hvdy1pZ25vcmUgPiBzaG93LWlnbm9yZS5nb3QgJiYKKwljbXAgc2hvdy1pZ25vcmUuZXhwZWN0IHNob3ctaWdub3JlLmdvdAorIgorCitjYXQgPmNyZWF0ZS1pZ25vcmUuZXhwZWN0IDw8XEVPRgorL25vLXN1Y2gtZmlsZSoKK0VPRgorCitjYXQgPmNyZWF0ZS1pZ25vcmUtaW5kZXguZXhwZWN0IDw8XEVPRgorMTAwNjQ0IDhjNTJlNWRmY2QwYThiNmI2YmNmZTZiNDFiODliY2JmNDkzNzE4YTUgMAkuZ2l0aWdub3JlCisxMDA2NDQgOGM1MmU1ZGZjZDBhOGI2YjZiY2ZlNmI0MWI4OWJjYmY0OTM3MThhNSAwCWRlZXBseS8uZ2l0aWdub3JlCisxMDA2NDQgOGM1MmU1ZGZjZDBhOGI2YjZiY2ZlNmI0MWI4OWJjYmY0OTM3MThhNSAwCWRlZXBseS9uZXN0ZWQvLmdpdGlnbm9yZQorMTAwNjQ0IDhjNTJlNWRmY2QwYThiNmI2YmNmZTZiNDFiODliY2JmNDkzNzE4YTUgMAlkZWVwbHkvbmVzdGVkL2RpcmVjdG9yeS8uZ2l0aWdub3JlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjcmVhdGUtaWdub3JlJyAiCisJZ2l0IHN2biBmZXRjaCAmJiBnaXQgcHVsbCAuICR7cmVtb3Rlc19naXRfc3ZufSAmJgorCWdpdCBzdm4gY3JlYXRlLWlnbm9yZSAmJgorCWNtcCAuLy5naXRpZ25vcmUgY3JlYXRlLWlnbm9yZS5leHBlY3QgJiYKKwljbXAgLi9kZWVwbHkvLmdpdGlnbm9yZSBjcmVhdGUtaWdub3JlLmV4cGVjdCAmJgorCWNtcCAuL2RlZXBseS9uZXN0ZWQvLmdpdGlnbm9yZSBjcmVhdGUtaWdub3JlLmV4cGVjdCAmJgorCWNtcCAuL2RlZXBseS9uZXN0ZWQvZGlyZWN0b3J5Ly5naXRpZ25vcmUgY3JlYXRlLWlnbm9yZS5leHBlY3QgJiYKKwlnaXQgbHMtZmlsZXMgLXMgfCBncmVwIGdpdGlnbm9yZSB8IGNtcCAtIGNyZWF0ZS1pZ25vcmUtaW5kZXguZXhwZWN0CisJIgorCitjYXQgPnByb3AuZXhwZWN0IDw8XEVPRgorCituby1zdWNoLWZpbGUqCisKK0VPRgorY2F0ID5wcm9wMi5leHBlY3QgPDxcRU9GCis4CitFT0YKKworIyBUaGlzIHRlc3QgY2FuIGJlIGltcHJvdmVkOiBzaW5jZSBhbGwgdGhlIHN2bjppZ25vcmUgY29udGFpbiB0aGUgc2FtZQorIyBwYXR0ZXJuLCBpdCBjYW4gcGFzcyBldmVuIHRob3VnaCB0aGUgcHJvcGdldCBkaWQgbm90IGV4ZWN1dGUgb24gdGhlCisjIHJpZ2h0IGRpcmVjdG9yeS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcHJvcGdldCcgIgorCWdpdCBzdm4gcHJvcGdldCBzdm46aWdub3JlIC4gfCBjbXAgLSBwcm9wLmV4cGVjdCAmJgorCWNkIGRlZXBseSAmJgorCWdpdCBzdm4gcHJvcGdldCBzdm46aWdub3JlIC4gfCBjbXAgLSAuLi9wcm9wLmV4cGVjdCAmJgorCWdpdCBzdm4gcHJvcGdldCBzdm46ZW50cnk6Y29tbWl0dGVkLXJldiBuZXN0ZWQvZGlyZWN0b3J5Ly5rZWVwIFwKKwkgIHwgY21wIC0gLi4vcHJvcDIuZXhwZWN0ICYmCisJZ2l0IHN2biBwcm9wZ2V0IHN2bjppZ25vcmUgLi4gfCBjbXAgLSAuLi9wcm9wLmV4cGVjdCAmJgorCWdpdCBzdm4gcHJvcGdldCBzdm46aWdub3JlIG5lc3RlZC8gfCBjbXAgLSAuLi9wcm9wLmV4cGVjdCAmJgorCWdpdCBzdm4gcHJvcGdldCBzdm46aWdub3JlIC4vbmVzdGVkIHwgY21wIC0gLi4vcHJvcC5leHBlY3QgJiYKKwlnaXQgc3ZuIHByb3BnZXQgc3ZuOmlnbm9yZSAuLi8uL2RlZXBseS9uZXN0ZWQgfCBjbXAgLSAuLi9wcm9wLmV4cGVjdAorCSIKKworY2F0ID5wcm9wLmV4cGVjdCA8PFxFT0YKK1Byb3BlcnRpZXMgb24gJy4nOgorICBzdm46ZW50cnk6Y29tbWl0dGVkLWRhdGUKKyAgc3ZuOmVudHJ5OmNvbW1pdHRlZC1yZXYKKyAgc3ZuOmVudHJ5Omxhc3QtYXV0aG9yCisgIHN2bjplbnRyeTp1dWlkCisgIHN2bjppZ25vcmUKK0VPRgorY2F0ID5wcm9wMi5leHBlY3QgPDxcRU9GCitQcm9wZXJ0aWVzIG9uICduZXN0ZWQvZGlyZWN0b3J5Ly5rZWVwJzoKKyAgc3ZuOmVudHJ5OmNvbW1pdHRlZC1kYXRlCisgIHN2bjplbnRyeTpjb21taXR0ZWQtcmV2CisgIHN2bjplbnRyeTpsYXN0LWF1dGhvcgorICBzdm46ZW50cnk6dXVpZAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgcHJvcGxpc3QnICIKKwlnaXQgc3ZuIHByb3BsaXN0IC4gfCBjbXAgLSBwcm9wLmV4cGVjdCAmJgorCWdpdCBzdm4gcHJvcGxpc3QgbmVzdGVkL2RpcmVjdG9yeS8ua2VlcCB8IGNtcCAtIHByb3AyLmV4cGVjdAorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTAyLWdpdC1zdm4tZGVlcC1ybWRpci5zaCBiL3QvdDkxMDItZ2l0LXN2bi1kZWVwLXJtZGlyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmViNzBmNDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTAyLWdpdC1zdm4tZGVlcC1ybWRpci5zaApAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcm1kaXInCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJbWtkaXIgLXAgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzEgJiYKKwkJbWtkaXIgLXAgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzIgJiYKKwkJZWNobyBmb28gPmRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8xL2ZpbGUgJiYKKwkJZWNobyBmb28gPmRlZXBseS9uZXN0ZWQvZGlyZWN0b3J5L251bWJlci8yL2Fub3RoZXIgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgLiAiJHN2bnJlcG8iCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWlycm9yIHZpYSBnaXQgc3ZuJyAnCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IGNoZWNrb3V0IC1mIC1iIHRlc3Qtcm1kaXIgJHtyZW1vdGVzX2dpdF9zdm59CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUcnkgYSBjb21taXQgb24gcm1kaXInICcKKwlnaXQgcm0gLWYgZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzIvYW5vdGhlciAmJgorCWdpdCBjb21taXQgLWEgLW0gInJlbW92ZSBhbm90aGVyIiAmJgorCWdpdCBzdm4gc2V0LXRyZWUgLS1ybWRpciBIRUFEICYmCisJc3ZuX2NtZCBscyAtUiAiJHN2bnJlcG8iIHwgZ3JlcCBeZGVlcGx5L25lc3RlZC9kaXJlY3RvcnkvbnVtYmVyLzEKKwknCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaCBiL3QvdDkxMDMtZ2l0LXN2bi10cmFja2VkLWRpcmVjdG9yeS1yZW1vdmVkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0MTMxNjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTAzLWdpdC1zdm4tdHJhY2tlZC1kaXJlY3RvcnktcmVtb3ZlZC5zaApAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHRyYWNraW5nIHJlbW92ZWQgdG9wLWxldmVsIHBhdGgnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBoaXN0b3J5IGZvciB0cmFja2luZycgJworCW1rZGlyIGltcG9ydCAmJgorCW1rZGlyIGltcG9ydC90cnVuayAmJgorCWVjaG8gaGVsbG8gPj4gaW1wb3J0L3RydW5rL1JFQURNRSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tIGluaXRpYWwgaW1wb3J0ICIkc3ZucmVwbyIgJiYKKwlybSAtcmYgaW1wb3J0ICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rIHRydW5rICYmCisJZWNobyBieWUgYnllID4+IHRydW5rL1JFQURNRSAmJgorCXN2bl9jbWQgcm0gLW0gImdvbmUiICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlybSAtcmYgdHJ1bmsgJiYKKwlta2RpciB0cnVuayAmJgorCWVjaG8gIm5ldyIgPiB0cnVuay9GT0xMT1dNRSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJuZXcgdHJ1bmsiIHRydW5rICIkc3ZucmVwbyIvdHJ1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgcmVwbyB3aXRoIGdpdCcgJworCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIiB4ICYmCisJdGVzdCAtZiB4L0ZPTExPV01FICYmCisJdGVzdCAhIC1mIHgvUkVBRE1FCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2Ugc3VyZSByMiBzdGlsbCBoYXMgb2xkIGZpbGUnICIKKwljZCB4ICYmCisJCXRlc3QgLW4gXCJcJChnaXQgc3ZuIGZpbmQtcmV2IHIxKVwiICYmCisJCWdpdCByZXNldCAtLWhhcmQgXCQoZ2l0IHN2biBmaW5kLXJldiByMSkgJiYKKwkJdGVzdCAtZiBSRUFETUUgJiYKKwkJdGVzdCAhIC1mIEZPTExPV01FICYmCisJCXRlc3QgeFwkKGdpdCBzdm4gZmluZC1yZXYgcjIpID0geAorIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDQtZ2l0LXN2bi1mb2xsb3ctcGFyZW50LnNoIGIvdC90OTEwNC1naXQtc3ZuLWZvbGxvdy1wYXJlbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODNmMTdlMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDQtZ2l0LXN2bi1mb2xsb3ctcGFyZW50LnNoCkBAIC0wLDAgKzEsMjIzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA2IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGZldGNoaW5nJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCW1rZGlyIC1wIHRydW5rICYmCisJCWVjaG8gaGVsbG8gPnRydW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iCisJKSAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB3YyAmJgorCSgKKwkJY2Qgd2MgJiYKKwkJZWNobyB3b3JsZCA+PnRydW5rL3JlYWRtZSAmJgorCQlwb2tlIHRydW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYW5vdGhlciBjb21taXQiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBtdiB0cnVuayB0aHVuayAmJgorCQllY2hvIGdvb2RieWUgPj50aHVuay9yZWFkbWUgJiYKKwkJcG9rZSB0aHVuay9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImJ5ZSBub3ciCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggYSBtb3ZlZCBkaXJlY3RvcnknICcKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgdGh1bmsgIiRzdm5yZXBvIi90aHVuayAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgdGh1bmsgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvdGh1bmtAMmAiIFwKKyAgICAgICAgICAgPSAiYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3RodW5rfjFgIiAmJgorICAgICAgICB0ZXN0ICJgZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9yZW1vdGVzL3RodW5rOnJlYWRtZSB8XAorICAgICAgICAgICAgICAgICBzZWQgLW4gLWUgIjNwImAiID0gZ29vZGJ5ZSAmJgorCXRlc3QgLXogImBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKwkgICAgICAgICAiXnRydW5rOnJlZnMvcmVtb3Rlcy90aHVua0AyJCJgIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggZnJvbSBvbmUgc3ZuLXJlbW90ZScgJworICAgICAgICBnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLnVybCAiJHN2bnJlcG8iICYmCisgICAgICAgIGdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2ggXAorICAgICAgICAgIHRydW5rOnJlZnMvcmVtb3Rlcy9zdm4vdHJ1bmsgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisgICAgICAgICAgdGh1bms6cmVmcy9yZW1vdGVzL3N2bi90aHVuayAmJgorICAgICAgICBnaXQgc3ZuIGZldGNoIC1pIHN2bi90aHVuayAmJgorCXRlc3QgImBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdm4vdHJ1bmtgIiBcCisgICAgICAgICAgID0gImBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdm4vdGh1bmt+MWAiICYmCisgICAgICAgIHRlc3QgImBnaXQgY2F0LWZpbGUgYmxvYiByZWZzL3JlbW90ZXMvc3ZuL3RodW5rOnJlYWRtZSB8XAorICAgICAgICAgICAgICAgICBzZWQgLW4gLWUgIjNwImAiID0gZ29vZGJ5ZQorICAgICAgICAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvbGxvdyBkZWxldGVkIHBhcmVudCcgJworICAgICAgICAoc3ZuX2NtZCBjcCAtbSAicmVzdXJyZWN0aW5nIHRydW5rIGFzIGp1bmsiIFwKKyAgICAgICAgICAgICAgICIkc3ZucmVwbyIvdHJ1bmtAMiAiJHN2bnJlcG8iL2p1bmsgfHwKKyAgICAgICAgIHN2biBjcCAtbSAicmVzdXJyZWN0aW5nIHRydW5rIGFzIGp1bmsiIFwKKyAgICAgICAgICAgICAgIC1yMiAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvanVuaykgJiYKKyAgICAgICAgZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisgICAgICAgICAganVuazpyZWZzL3JlbW90ZXMvc3ZuL2p1bmsgJiYKKyAgICAgICAgZ2l0IHN2biBmZXRjaCAtaSBzdm4vdGh1bmsgJiYKKyAgICAgICAgZ2l0IHN2biBmZXRjaCAtaSBzdm4vanVuayAmJgorICAgICAgICB0ZXN0IC16ICJgZ2l0IGRpZmYgc3ZuL2p1bmsgc3ZuL3RydW5rYCIgJiYKKyAgICAgICAgdGVzdCAiYGdpdCBtZXJnZS1iYXNlIHN2bi9qdW5rIHN2bi90cnVua2AiIFwKKyAgICAgICAgICAgPSAiYGdpdCByZXYtcGFyc2Ugc3ZuL3RydW5rYCIKKyAgICAgICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgbGFyZ2VyIHBhcmVudCcgJworICAgICAgICBta2RpciAtcCBpbXBvcnQvdHJ1bmsvdGh1bmsvYnVtcC90aHVkICYmCisgICAgICAgIGVjaG8gaGkgPiBpbXBvcnQvdHJ1bmsvdGh1bmsvYnVtcC90aHVkL2ZpbGUgJiYKKyAgICAgICAgc3ZuIGltcG9ydCAtbSAiaW1wb3J0IGEgbGFyZ2VyIHBhcmVudCIgaW1wb3J0ICIkc3ZucmVwbyIvbGFyZ2VyLXBhcmVudCAmJgorICAgICAgICBzdm4gY3AgLW0gImhpIiAiJHN2bnJlcG8iL2xhcmdlci1wYXJlbnQgIiRzdm5yZXBvIi9hbm90aGVyLWxhcmdlciAmJgorICAgICAgICBnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgbGFyZ2VyIFwKKwkgICIkc3ZucmVwbyIvbGFyZ2VyLXBhcmVudC90cnVuay90aHVuay9idW1wL3RodWQgJiYKKyAgICAgICAgZ2l0IHN2biBmZXRjaCAtaSBsYXJnZXIgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgbGFyZ2VyLXBhcmVudCBcCisJICAiJHN2bnJlcG8iL2Fub3RoZXItbGFyZ2VyL3RydW5rL3RodW5rL2J1bXAvdGh1ZCAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgbGFyZ2VyLXBhcmVudCAmJgorICAgICAgICBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9sYXJnZXIgJiYKKyAgICAgICAgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBcCisJICAgcmVmcy9yZW1vdGVzL2xhcmdlci1wYXJlbnQgJiYKKyAgICAgICAgdGVzdCAiYGdpdCBtZXJnZS1iYXNlIFwKKwkJIHJlZnMvcmVtb3Rlcy9sYXJnZXItcGFyZW50IFwKKyAgICAgICAgICAgICAgICAgcmVmcy9yZW1vdGVzL2xhcmdlcmAiID0gXAorICAgICAgICAgICAgICJgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvbGFyZ2VyYCIKKyAgICAgICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgaGlnaGVyLWxldmVsIHBhcmVudCcgJworCXN2biBta2RpciAtbSAiZm9sbG93IGhpZ2hlci1sZXZlbCBwYXJlbnQiICIkc3ZucmVwbyIvYmxvYiAmJgorCXN2biBjbyAiJHN2bnJlcG8iL2Jsb2IgYmxvYiAmJgorCSgKKwkJY2QgYmxvYiAmJgorCQllY2hvIGhpID4gaGkgJiYKKwkJc3ZuIGFkZCBoaSAmJgorCQlzdm4gY29tbWl0IC1tICJoaWhpIgorCSkgJiYKKwlzdm4gbWtkaXIgLW0gIm5ldyBnbG9iIGF0IHRvcCBsZXZlbCIgIiRzdm5yZXBvIi9nbG9iICYmCisJc3ZuIG12IC1tICJtb3ZlIGJsb2IgZG93biBhIGxldmVsIiAiJHN2bnJlcG8iL2Jsb2IgIiRzdm5yZXBvIi9nbG9iL2Jsb2IgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgYmxvYiAiJHN2bnJlcG8iL2dsb2IvYmxvYiAmJgorICAgICAgICBnaXQgc3ZuIGZldGNoIC1pIGJsb2IKKyAgICAgICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3cgZGVsZXRlZCBkaXJlY3RvcnknICcKKwlzdm5fY21kIG12IC1tICJieWUhIiAiJHN2bnJlcG8iL2dsb2IvYmxvYi9oaSAiJHN2bnJlcG8iL2dsb2IvYmxvYi9ieWUgJiYKKwlzdm5fY21kIHJtIC1tICJyZW1vdmUgZ2xvYiIgIiRzdm5yZXBvIi9nbG9iICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGdsb2IgIiRzdm5yZXBvIi9nbG9iICYmCisJZ2l0IHN2biBmZXRjaCAtaSBnbG9iICYmCisJdGVzdCAiYGdpdCBjYXQtZmlsZSBibG9iIHJlZnMvcmVtb3Rlcy9nbG9iOmJsb2IvYnllYCIgPSBoaSAmJgorCXRlc3QgImBnaXQgbHMtdHJlZSByZWZzL3JlbW90ZXMvZ2xvYiB8IHdjIC1sIGAiIC1lcSAxCisJJworCisjIHJlZjogcjkyNzAgb2YgdGhlIFN1YnZlcnNpb24gcmVwb3NpdG9yeTogKGh0dHA6Ly9zdm4uY29sbGFiLm5ldC9yZXBvcy9zdm4pCisjIGluIHRydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb2xsb3ctcGFyZW50IGF2b2lkcyBkZWxldGluZyByZWxldmFudCBpbmZvJyAnCisJbWtkaXIgLXAgaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL3QgJiYKKwlmb3IgaSBpbiBhIGIgYyA7IGRvIFwKKwkgIGVjaG8gJGkgPiBpbXBvcnQvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwvJGkucG0gJiYKKwkgIGVjaG8gXyRpID4gaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL3QvJGkudDsgXAorCWRvbmUgJiYKKwkgIGVjaG8gImJhZCBkZWxldGUgdGVzdCIgPiBcCisJICAgaW1wb3J0L3RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL3QvbGFyZ2VyLXBhcmVudCAmJgorCSAgZWNobyAiYmFkIGRlbGV0ZSB0ZXN0IDIiID4gXAorCSAgIGltcG9ydC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC9hbm90aGVyLWxhcmdlciAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCXN2biBpbXBvcnQgLW0gInI5MjcwIHRlc3QiIC4gIiRzdm5yZXBvIi9yOTI3MAorCSkgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvcjkyNzAvdHJ1bmsvc3VidmVyc2lvbi9iaW5kaW5ncy9zd2lnL3BlcmwgcjkyNzAgJiYKKwkoCisJCWNkIHI5MjcwICYmCisJCXN2biBta2RpciBuYXRpdmUgJiYKKwkJc3ZuIG12IHQgbmF0aXZlL3QgJiYKKwkJZm9yIGkgaW4gYSBiIGMKKwkJZG8KKwkJCXN2biBtdiAkaS5wbSBuYXRpdmUvJGkucG0KKwkJZG9uZSAmJgorCQllY2hvIHogPj5uYXRpdmUvdC9jLnQgJiYKKwkJcG9rZSBuYXRpdmUvdC9jLnQgJiYKKwkJc3ZuIGNvbW1pdCAtbSAicmVvcmcgdGVzdCIKKwkpICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIHI5MjcwLXQgXAorCSAgIiRzdm5yZXBvIi9yOTI3MC90cnVuay9zdWJ2ZXJzaW9uL2JpbmRpbmdzL3N3aWcvcGVybC9uYXRpdmUvdCAmJgorCWdpdCBzdm4gZmV0Y2ggLWkgcjkyNzAtdCAmJgorCXRlc3QgYGdpdCByZXYtbGlzdCByOTI3MC10IHwgd2MgLWxgIC1lcSAyICYmCisJdGVzdCAiYGdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHI5MjcwLXR+MWAiID0gXAorCSAgICAgImBnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC10YCIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInRyYWNrIGluaXRpYWwgY2hhbmdlIGlmIGl0IHdhcyBvbmx5IG1hZGUgdG8gcGFyZW50IiAnCisJc3ZuX2NtZCBjcCAtbSAid2hlZWUhIiAiJHN2bnJlcG8iL3I5MjcwL3RydW5rICIkc3ZucmVwbyIvcjkyNzAvZHJ1bmsgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLWkgcjkyNzAtZCBcCisJICAiJHN2bnJlcG8iL3I5MjcwL2RydW5rL3N1YnZlcnNpb24vYmluZGluZ3Mvc3dpZy9wZXJsL25hdGl2ZS90ICYmCisJZ2l0IHN2biBmZXRjaCAtaSByOTI3MC1kICYmCisJdGVzdCBgZ2l0IHJldi1saXN0IHI5MjcwLWQgfCB3YyAtbGAgLWVxIDMgJiYKKwl0ZXN0ICJgZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgcjkyNzAtdGAiID0gXAorCSAgICAgImBnaXQgbHMtdHJlZSAtLW5hbWUtb25seSByOTI3MC1kYCIgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSByOTI3MC10YCIgPSBcCisJICAgICAiYGdpdCByZXYtcGFyc2UgcjkyNzAtZH4xYCIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImZvbGxvdy1wYXJlbnQgaXMgYXRvbWljIiAnCisJKAorCQljZCB3YyAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbWtkaXIgc3R1bmsgJiYKKwkJZWNobyAidHJ1bmsgc3R1bmsiID4gc3R1bmsvcmVhZG1lICYmCisJCXN2bl9jbWQgYWRkIHN0dW5rL3JlYWRtZSAmJgorCQlzdm5fY21kIGNpIC1tICJ0cnVuayBzdHVuayIgJiYKKwkJZWNobyAic3R1bmsgbGlrZSBqdW5rIiA+PiBzdHVuay9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAicmVhbGx5IHN0dW5rIiAmJgorCQllY2hvICJzdGluayBzdGFuayBzdHVuayIgPj4gc3R1bmsvcmVhZG1lICYmCisJCXN2bl9jbWQgY2kgLW0gImV2ZW4gdGhlIGdyaW5jaCBhZ3JlZXMiCisJKSAmJgorCXN2bl9jbWQgY29weSAtbSAic3R1bmsgZmx1bmtlZCIgIiRzdm5yZXBvIi9zdHVuayAiJHN2bnJlcG8iL2ZsdW5rICYmCisJeyBzdm4gY3AgLW0gImVhcmx5IHN0dW5rIGZsdW5rZWQgdG9vIiBcCisJCSIkc3ZucmVwbyIvc3R1bmtAMTcgIiRzdm5yZXBvIi9mbHVua2VkIHx8CisJc3ZuX2NtZCBjcCAtbSAiZWFybHkgc3R1bmsgZmx1bmtlZCB0b28iIFwKKwkJLXIxNyAiJHN2bnJlcG8iL3N0dW5rICIkc3ZucmVwbyIvZmx1bmtlZDsgfSAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtaSBzdHVuayAiJHN2bnJlcG8iL3N0dW5rICYmCisJZ2l0IHN2biBmZXRjaCAtaSBzdHVuayAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvcmVtb3Rlcy9mbHVua0AxOCByZWZzL3JlbW90ZXMvc3R1bmt+MiAmJgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvcmVtb3Rlcy9zdHVuayAmJgorCWdpdCBjb25maWcgLS11bnNldCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBzdHVuayAmJgorCW1rZGlyIC1wICIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy9mbHVua0AxOCAmJgorCXJldl9tYXA9JChjZCAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvc3R1bmsgJiYgbHMgLnJldl9tYXAqKSAmJgorCWRkIGlmPSIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy9zdHVuay8kcmV2X21hcCBcCisJICAgb2Y9IiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL2ZsdW5rQDE4LyRyZXZfbWFwIGJzPTI0IGNvdW50PTEgJiYKKwlybSAtcmYgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL3N0dW5rICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGZsdW5rICIkc3ZucmVwbyIvZmx1bmsgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIGZsdW5rICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIHN0dW5rICIkc3ZucmVwbyIvc3R1bmsgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIHN0dW5rICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1pIGZsdW5rZWQgIiRzdm5yZXBvIi9mbHVua2VkICYmCisJZ2l0IHN2biBmZXRjaCAtaSBmbHVua2VkICYmCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL2ZsdW5rQDE4YCIgXAorCSAgID0gImBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdHVua2AiICYmCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL2ZsdW5rfjFgIiBcCisJICAgPSAiYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3N0dW5rYCIgJiYKKwl0ZXN0ICJgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvZmx1bmtlZH4xYCIgXAorCSAgID0gImBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdHVua34xYCIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgInRyYWNrIG11bHRpLXBhcmVudCBwYXRocyIgJworCXN2bl9jbWQgY3AgLW0gInJlc3VycmVjdCAvZ2xvYiIgIiRzdm5yZXBvIi9yOTI3MCAiJHN2bnJlcG8iL2dsb2IgJiYKKwlnaXQgc3ZuIG11bHRpLWZldGNoICYmCisJdGVzdCBgZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZ2xvYiB8IFwKKwkgICAgICAgZ3JlcCAiXnBhcmVudCAiIHwgd2MgLWxgIC1lcSAyCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJtdWx0aS1mZXRjaCBjb250aW51ZXMgdG8gd29yayIgIgorCWdpdCBzdm4gbXVsdGktZmV0Y2gKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIm11bHRpLWZldGNoIHdvcmtzIG9mZiBhICdjbGVhbicgcmVwb3NpdG9yeSIgJworCXJtIC1yICIkR0lUX0RJUi9zdm4iICIkR0lUX0RJUi9yZWZzL3JlbW90ZXMiICIkR0lUX0RJUi9sb2dzIiAmJgorCW1rZGlyICIkR0lUX0RJUi9zdm4iICYmCisJZ2l0IHN2biBtdWx0aS1mZXRjaAorCScKKwordGVzdF9kZWJ1ZyAnZ2l0ayAtLWFsbCAmJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDUtZ2l0LXN2bi1jb21taXQtZGlmZi5zaCBiL3QvdDkxMDUtZ2l0LXN2bi1jb21taXQtZGlmZi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZDBhZmVhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwNS1naXQtc3ZuLWNvbW1pdC1kaWZmLnNoCkBAIC0wLDAgKzEsNDQgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgRXJpYyBXb25nCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGNvbW1pdC1kaWZmJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgcmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCWVjaG8gaGVsbG8gPnJlYWRtZSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iCisJKSAmJgorCWVjaG8gaGVsbG8gPiByZWFkbWUgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHJlYWRtZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImluaXRpYWwiICYmCisJZWNobyB3b3JsZCA+PiByZWFkbWUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJhbm90aGVyIgorCScKKworaGVhZD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXjBgCitwcmV2PWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUReMWAKKworIyB0aGUgaW50ZXJuYWxzIG9mIHRoZSBjb21taXQtZGlmZiBjb21tYW5kIGFyZSB0aGUgc2FtZSBhcyB0aGUgcmVndWxhcgorIyBjb21taXQsIHNvIG9ubHkgYSBiYXNpYyB0ZXN0IG9mIGZ1bmN0aW9uYWxpdHkgaXMgbmVlZGVkIHNpbmNlIHdlJ3ZlCisjIGFscmVhZHkgdGVzdGVkIGNvbW1pdCBleHRlbnNpdmVseSBlbHNld2hlcmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCB0aGUgY29tbWl0LWRpZmYgY29tbWFuZCcgJworCXRlc3QgLW4gIiRwcmV2IiAmJiB0ZXN0IC1uICIkaGVhZCIgJiYKKwlnaXQgc3ZuIGNvbW1pdC1kaWZmIC1yMSAiJHByZXYiICIkaGVhZCIgIiRzdm5yZXBvIiAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB3YyAmJgorCWNtcCByZWFkbWUgd2MvcmVhZG1lCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXQtZGlmZiB0byBhIHN1Yi1kaXJlY3RvcnkgKHdpdGggZ2l0IHN2biBjb25maWcpJyAnCisJc3ZuX2NtZCBpbXBvcnQgLW0gInN1Yi1kaXJlY3RvcnkiIGltcG9ydCAiJHN2bnJlcG8iL3N1YmRpciAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAiJHN2bnJlcG8iL3N1YmRpciAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgc3ZuIGNvbW1pdC1kaWZmIC1yMyAiJHByZXYiICIkaGVhZCIgJiYKKwlzdm5fY21kIGNhdCAiJHN2bnJlcG8iL3N1YmRpci9yZWFkbWUgPiByZWFkbWUuMiAmJgorCWNtcCByZWFkbWUgcmVhZG1lLjIKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwNi1naXQtc3ZuLWNvbW1pdC1kaWZmLWNsb2JiZXIuc2ggYi90L3Q5MTA2LWdpdC1zdm4tY29tbWl0LWRpZmYtY2xvYmJlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNmQ3YWM3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwNi1naXQtc3ZuLWNvbW1pdC1kaWZmLWNsb2JiZXIuc2gKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYgRXJpYyBXb25nCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGNvbW1pdC1kaWZmIGNsb2JiZXInCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJZWNobyBpbml0aWFsID5maWxlICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiAuICIkc3ZucmVwbyIKKwkpICYmCisJZWNobyBpbml0aWFsID4gZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImluaXRpYWwiCisJJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGNoYW5nZSBmcm9tIHN2biBzaWRlJyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCisJKAorCQljZCB0LnN2biAmJgorCQllY2hvIHNlY29uZCBsaW5lIGZyb20gc3ZuID4+ZmlsZSAmJgorCQlwb2tlIGZpbGUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInNlY29uZCBsaW5lIGZyb20gc3ZuIgorCSkgJiYKKwlybSAtcmYgdC5zdm4KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjb25mbGljdGluZyBjaGFuZ2UgZnJvbSBnaXQnICcKKwllY2hvIHNlY29uZCBsaW5lIGZyb20gZ2l0ID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgbGluZSBmcm9tIGdpdCIgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGNvbW1pdC1kaWZmIC1yMSBIRUFEfjEgSEVBRCAiJHN2bnJlcG8iCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBjb21wbGVtZW50aW5nIGNoYW5nZSBmcm9tIGdpdCcgJworCWdpdCByZXNldCAtLWhhcmQgSEVBRH4xICYmCisJZWNobyBzZWNvbmQgbGluZSBmcm9tIHN2biA+PiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAic2Vjb25kIGxpbmUgZnJvbSBzdm4iICYmCisJZWNobyB0aGlyZCBsaW5lIGZyb20gZ2l0ID4+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJ0aGlyZCBsaW5lIGZyb20gZ2l0IiAmJgorCWdpdCBzdm4gY29tbWl0LWRpZmYgLXIyIEhFQUR+MSBIRUFEICIkc3ZucmVwbyIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgZmFpbHMgdG8gY29tbWl0IGJlY2F1c2Ugb2YgY29uZmxpY3QnICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkIHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59ICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCisJKAorCQljZCB0LnN2biAmJgorCQllY2hvIGZvdXJ0aCBsaW5lIGZyb20gc3ZuID4+ZmlsZSAmJgorCQlwb2tlIGZpbGUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImZvdXJ0aCBsaW5lIGZyb20gc3ZuIgorCSkgJiYKKwlybSAtcmYgdC5zdm4gJiYKKwllY2hvICJmb3VydGggbGluZSBmcm9tIGdpdCIgPj4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImZvdXJ0aCBsaW5lIGZyb20gZ2l0IiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBkb2VzIHRoZSBzdm4gZXF1aXZhbGVudCBvZiBhbiBpbmRleCBtZXJnZScgIgorCWdpdCByZXNldCAtLWhhcmQgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0gJiYKKwllY2hvICdpbmRleCBtZXJnZScgPiBmaWxlMiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZmlsZTIgJiYKKwlnaXQgY29tbWl0IC1hIC1tICdpbmRleCBtZXJnZScgJiYKKwllY2hvICdtb3JlIGNoYW5nZXMnID4+IGZpbGUyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmaWxlMiAmJgorCWdpdCBjb21taXQgLWEgLW0gJ21vcmUgY2hhbmdlcycgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBhbm90aGVyIGNoYW5nZSBmcm9tIHN2biBzaWRlJyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHQuc3ZuICYmCisJKAorCQljZCB0LnN2biAmJgorCQllY2hvIHRoaXJkIGxpbmUgZnJvbSBzdm4gPj5maWxlICYmCisJCXBva2UgZmlsZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidGhpcmQgbGluZSBmcm9tIHN2biIKKwkpICYmCisJcm0gLXJmIHQuc3ZuCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtdWx0aXBsZSBkY29tbWl0IGZyb20gZ2l0IHN2biB3aWxsIG5vdCBjbG9iYmVyIHN2bicgIgorCWdpdCByZXNldCAtLWhhcmQgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0gJiYKKwllY2hvIG5ldyBmaWxlID4+IG5ldy1maWxlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBuZXctZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gJ25ldyBmaWxlJyAmJgorCWVjaG8gY2xvYmJlciA+IGZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICdjbG9iYmVyJyAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdAorCSIKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayB0aGF0IHJlYmFzZSByZWFsbHkgZmFpbGVkJyAnCisJdGVzdCAtZCAuZ2l0L3JlYmFzZS1hcHBseQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXNvbHZlLCBjb250aW51ZSB0aGUgcmViYXNlIGFuZCBkY29tbWl0JyAiCisJZWNobyBjbG9iYmVyIGFuZCBJIHJlYWxseSBtZWFuIGl0ID4gZmlsZSAmJgorCWdpdCB1cGRhdGUtaW5kZXggZmlsZSAmJgorCWdpdCByZWJhc2UgLS1jb250aW51ZSAmJgorCWdpdCBzdm4gZGNvbW1pdAorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTA3LWdpdC1zdm4tbWlncmF0ZS5zaCBiL3QvdDkxMDctZ2l0LXN2bi1taWdyYXRlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlNjlmYzQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTA3LWdpdC1zdm4tbWlncmF0ZS5zaApAQCAtMCwwICsxLDEyNSBAQAorIyEvYmluL3NoCisjIENvcHlyaWdodCAoYykgMjAwNiBFcmljIFdvbmcKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbWV0YWRhdGEgbWlncmF0aW9ucyBmcm9tIHByZXZpb3VzIHZlcnNpb25zJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIG9sZC1sb29raW5nIG1ldGFkYXRhJyAnCisJY3AgIiRHSVRfRElSIi9jb25maWcgIiRHSVRfRElSIi9jb25maWctb2xkLWdpdC1zdm4gJiYKKwlta2RpciBpbXBvcnQgJiYKKwkoCisJCWNkIGltcG9ydCAmJgorCQlmb3IgaSBpbiB0cnVuayBicmFuY2hlcy9hIGJyYW5jaGVzL2IgdGFncy8wLjEgdGFncy8wLjIgdGFncy8wLjMKKwkJZG8KKwkJCW1rZGlyIC1wICRpICYmCisJCQllY2hvIGhlbGxvID4+JGkvUkVBRE1FIHx8CisJCQlleGl0IDEKKwkJZG9uZSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSB0ZXN0IC4gIiRzdm5yZXBvIgorCSkgJiYKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlybSAtcmYgIiRHSVRfRElSIi9zdm4gJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL2hlYWRzL2dpdC1zdm4tSEVBRCByZWZzLyR7cmVtb3Rlc19naXRfc3ZufSAmJgorCWdpdCB1cGRhdGUtcmVmIHJlZnMvaGVhZHMvc3ZuLUhFQUQgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0gJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzLyR7cmVtb3Rlc19naXRfc3ZufSByZWZzLyR7cmVtb3Rlc19naXRfc3ZufQorCScKKworaGVhZD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL2dpdC1zdm4tSEVBRF4wYAordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0LXN2bi1IRUFEIGlzIGEgcmVhbCBIRUFEJyAidGVzdCAtbiAnJGhlYWQnIgorCitzdm5yZXBvX2VzY2FwZWQ9YGVjaG8gJHN2bnJlcG8gfCBzZWQgJ3MvIC8lMjAvJ2AKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBvbGQtc3R5bGUgKHYwKSBnaXQgc3ZuIGxheW91dCcgJworCW1rZGlyIC1wICIkR0lUX0RJUiIvZ2l0LXN2bi9pbmZvICIkR0lUX0RJUiIvc3ZuL2luZm8gJiYKKwllY2hvICIkc3ZucmVwbyIgPiAiJEdJVF9ESVIiL2dpdC1zdm4vaW5mby91cmwgJiYKKwllY2hvICIkc3ZucmVwbyIgPiAiJEdJVF9ESVIiL3N2bi9pbmZvL3VybCAmJgorCWdpdCBzdm4gbWlncmF0ZSAmJgorCSEgdGVzdCAtZCAiJEdJVF9ESVIiL2dpdC1zdm4gJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59XjAgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9zdm5eMCAmJgorCXRlc3QgIiQoZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi51cmwpIiA9ICIkc3ZucmVwb19lc2NhcGVkIiAmJgorCXRlc3QgYGdpdCBjb25maWcgLS1nZXQgc3ZuLXJlbW90ZS5zdm4uZmV0Y2hgID0gXAorICAgICAgICAgICAgICI6cmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0iCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIGEgbXVsdGktcmVwb3NpdG9yeSByZXBvJyAnCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgLVQgdHJ1bmsgLXQgdGFncyAtYiBicmFuY2hlcyAmJgorCWdpdCBjb25maWcgLS1nZXQtYWxsIHN2bi1yZW1vdGUuc3ZuLmZldGNoID4gZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRydW5rOnJlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmskIiBmZXRjaC5vdXQgJiYKKwl0ZXN0IC1uICJgZ2l0IGNvbmZpZyAtLWdldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyBcCisJICAgICAgICAgICAgIl5icmFuY2hlcy9cKjpyZWZzL3JlbW90ZXMvb3JpZ2luL1wqJCJgIiAmJgorCXRlc3QgLW4gImBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLnRhZ3MgXAorCSAgICAgICAgICAgICJedGFncy9cKjpyZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvXCokImAiICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzIFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAiXmJyYW5jaGVzL1wqOnJlZnMvcmVtb3Rlcy9vcmlnaW4vXCokIiAmJgorCWdpdCBjb25maWcgLS11bnNldCBzdm4tcmVtb3RlLnN2bi50YWdzIFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAiXnRhZ3MvXCo6cmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL1wqJCIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoICJicmFuY2hlcy9hOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYSIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoICJicmFuY2hlcy9iOnJlZnMvcmVtb3Rlcy9vcmlnaW4vYiIgJiYKKwlmb3IgaSBpbiB0YWdzLzAuMSB0YWdzLzAuMiB0YWdzLzAuMzsgZG8KKwkJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisJCSAgICAgICAgICAgICAgICAgJGk6cmVmcy9yZW1vdGVzL29yaWdpbi8kaSB8fCBleGl0IDE7IGRvbmUgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLnN2bi5mZXRjaCA+IGZldGNoLm91dCAmJgorCWdyZXAgIl50cnVuazpyZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXmJyYW5jaGVzL2E6cmVmcy9yZW1vdGVzL29yaWdpbi9hJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXmJyYW5jaGVzL2I6cmVmcy9yZW1vdGVzL29yaWdpbi9iJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMTpyZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvMFwuMSQiIGZldGNoLm91dCAmJgorCWdyZXAgIl50YWdzLzBcLjI6cmVmcy9yZW1vdGVzL29yaWdpbi90YWdzLzBcLjIkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4zOnJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy8wXC4zJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXjpyZWZzLyR7cmVtb3Rlc19naXRfc3ZufSIgZmV0Y2gub3V0CisJJworCisjIHJlZnMgc2hvdWxkIGFsbCBiZSBkaWZmZXJlbnQsIGJ1dCB0aGUgdHJlZXMgc2hvdWxkIGFsbCBiZSB0aGUgc2FtZToKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ211bHRpLWZldGNoIHdvcmtzIG9uIHBhcnRpYWwgdXJscyArIHBhdGhzJyAiCisJZ2l0IHN2biBtdWx0aS1mZXRjaCAmJgorCWZvciBpIGluIHRydW5rIGEgYiB0YWdzLzAuMSB0YWdzLzAuMiB0YWdzLzAuMzsgZG8KKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvb3JpZ2luL1wkaV4wID4+IHJlZnMub3V0IHx8IGV4aXQgMTsKKwkgICAgZG9uZSAmJgorCXRlc3QgLXogXCJcYHNvcnQgPCByZWZzLm91dCB8IHVuaXEgLWRcYFwiICYmCisJZm9yIGkgaW4gdHJ1bmsgYSBiIHRhZ3MvMC4xIHRhZ3MvMC4yIHRhZ3MvMC4zOyBkbworCSAgZm9yIGogaW4gdHJ1bmsgYSBiIHRhZ3MvMC4xIHRhZ3MvMC4yIHRhZ3MvMC4zOyBkbworCQlpZiB0ZXN0IFwkaiAhPSBcJGk7IHRoZW4gY29udGludWU7IGZpCisJICAgIHRlc3QgLXogXCJcYGdpdCBkaWZmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vXCRpIFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcy9yZW1vdGVzL29yaWdpbi9cJGpcYFwiIHx8ZXhpdCAxOyBkb25lOyBkb25lCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtaWdyYXRlIC0tbWluaW1pemUgb24gb2xkIGluaXRlZCBsYXlvdXQnICcKKwlnaXQgY29uZmlnIC0tdW5zZXQtYWxsIHN2bi1yZW1vdGUuc3ZuLmZldGNoICYmCisJZ2l0IGNvbmZpZyAtLXVuc2V0LWFsbCBzdm4tcmVtb3RlLnN2bi51cmwgJiYKKwlybSAtcmYgIiRHSVRfRElSIi9zdm4gJiYKKwlmb3IgaSBpbiBgY2F0IGZldGNoLm91dGA7IGRvCisJCXBhdGg9YGV4cHIgJGkgOiAiXChbXjpdKlwpOi4qJCJgCisJCXJlZj1gZXhwciAkaSA6ICJbXjpdKjpcKHJlZnMvcmVtb3Rlcy8uKlwpJCJgCisJCWlmIHRlc3QgLXogIiRyZWYiOyB0aGVuIGNvbnRpbnVlOyBmaQorCQlpZiB0ZXN0IC1uICIkcGF0aCI7IHRoZW4gcGF0aD0iLyRwYXRoIjsgZmkKKwkJKCBta2RpciAtcCAiJEdJVF9ESVIiL3N2bi8kcmVmL2luZm8vICYmCisJCWVjaG8gIiRzdm5yZXBvIiRwYXRoID4gIiRHSVRfRElSIi9zdm4vJHJlZi9pbmZvL3VybCApIHx8IGV4aXQgMTsKKwlkb25lICYmCisJZ2l0IHN2biBtaWdyYXRlIC0tbWluaW1pemUgJiYKKwl0ZXN0IC16ICJgZ2l0IGNvbmZpZyAtbCB8IGdyZXAgIl5zdm4tcmVtb3RlXC5naXQtc3ZuXC4iYCIgJiYKKwlnaXQgY29uZmlnIC0tZ2V0LWFsbCBzdm4tcmVtb3RlLnN2bi5mZXRjaCA+IGZldGNoLm91dCAmJgorCWdyZXAgIl50cnVuazpyZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXmJyYW5jaGVzL2E6cmVmcy9yZW1vdGVzL29yaWdpbi9hJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXmJyYW5jaGVzL2I6cmVmcy9yZW1vdGVzL29yaWdpbi9iJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXnRhZ3MvMFwuMTpyZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvMFwuMSQiIGZldGNoLm91dCAmJgorCWdyZXAgIl50YWdzLzBcLjI6cmVmcy9yZW1vdGVzL29yaWdpbi90YWdzLzBcLjIkIiBmZXRjaC5vdXQgJiYKKwlncmVwICJedGFncy8wXC4zOnJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy8wXC4zJCIgZmV0Y2gub3V0ICYmCisJZ3JlcCAiXjpyZWZzLyR7cmVtb3Rlc19naXRfc3ZufSIgZmV0Y2gub3V0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICAiLnJldl9kYiBhdXRvLWNvbnZlcnRlZCB0byAucmV2X21hcC5VVUlEIiAnCisJZ2l0IHN2biBmZXRjaCAtaSB0cnVuayAmJgorCXRlc3QgLXogIiQobHMgIiRHSVRfRElSIi9zdm4vcmVmcy9yZW1vdGVzL29yaWdpbi90cnVuay8ucmV2X2RiLiogMj4vZGV2L251bGwpIiAmJgorCWV4cGVjdD0iJChscyAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rLy5yZXZfbWFwLiopIiAmJgorCXRlc3QgLW4gIiRleHBlY3QiICYmCisJcmV2X2RiPSIkKGVjaG8gJGV4cGVjdCB8IHNlZCAtZSAicyxfbWFwLF9kYiwiKSIgJiYKKwljb252ZXJ0X3RvX3Jldl9kYiAiJGV4cGVjdCIgIiRyZXZfZGIiICYmCisJcm0gLWYgIiRleHBlY3QiICYmCisJdGVzdCAtZiAiJHJldl9kYiIgJiYKKwlnaXQgc3ZuIGZldGNoIC1pIHRydW5rICYmCisJdGVzdCAteiAiJChscyAiJEdJVF9ESVIiL3N2bi9yZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rLy5yZXZfZGIuKiAyPi9kZXYvbnVsbCkiICYmCisJdGVzdCAhIC1lICIkR0lUX0RJUiIvc3ZuL3JlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmsvLnJldl9kYiAmJgorCXRlc3QgLWYgIiRleHBlY3QiCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMDgtZ2l0LXN2bi1nbG9iLnNoIGIvdC90OTEwOC1naXQtc3ZuLWdsb2Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDczMmQzMQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMDgtZ2l0LXN2bi1nbG9iLnNoCkBAIC0wLDAgKzEsMTExIEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBnbG9iYmluZyByZWZzcGVjcycKKy4gLi9saWItZ2l0LXN2bi5zaAorCitjYXQgPiBleHBlY3QuZW5kIDw8RU9GCit0aGUgZW5kCitoaQorc3RhcnQgYSBuZXcgYnJhbmNoCitpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCByZWZzcGVjIGdsb2JiaW5nJyAnCisJbWtkaXIgLXAgdHJ1bmsvc3JjL2EgdHJ1bmsvc3JjL2IgdHJ1bmsvZG9jICYmCisJZWNobyAiaGVsbG8gd29ybGQiID4gdHJ1bmsvc3JjL2EvcmVhZG1lICYmCisJZWNobyAiZ29vZGJ5ZSB3b3JsZCIgPiB0cnVuay9zcmMvYi9yZWFkbWUgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgdHJ1bmsgIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiB0bXAgJiYKKwkoCisJCWNkIHRtcCAmJgorCQlta2RpciBicmFuY2hlcyB0YWdzICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzIHRhZ3MgJiYKKwkJc3ZuX2NtZCBjcCB0cnVuayBicmFuY2hlcy9zdGFydCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAic3RhcnQgYSBuZXcgYnJhbmNoIiAmJgorCQlzdm5fY21kIHVwICYmCisJCWVjaG8gImhpIiA+PiBicmFuY2hlcy9zdGFydC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy9zdGFydC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAiaGV5IiA+PiBicmFuY2hlcy9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImhpIiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvc3RhcnQgdGFncy9lbmQgJiYKKwkJZWNobyAiYnllIiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJZWNobyAiYXllIiA+PiB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRoZSBlbmQiICYmCisJCWVjaG8gImJ5ZWJ5ZSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJub3RoaW5nIHRvIHNlZSBoZXJlIgorCSkgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5mZXRjaCBcCisJICAgICAgICAgICAgICAgICAidHJ1bmsvc3JjL2E6cmVmcy9yZW1vdGVzL3RydW5rIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyovc3JjL2E6cmVmcy9yZW1vdGVzL2JyYW5jaGVzLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi50YWdzXAorCSAgICAgICAgICAgICAgICAgInRhZ3MvKi9zcmMvYTpyZWZzL3JlbW90ZXMvdGFncy8qIiAmJgorCWdpdCBzdm4gbXVsdGktZmV0Y2ggJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcmVmcy9yZW1vdGVzL3RhZ3MvZW5kIHwgXAorCSAgICBzZWQgLWUgInMvXi5cezQxXH0vLyIgPiBvdXRwdXQuZW5kICYmCisJdGVzdF9jbXAgZXhwZWN0LmVuZCBvdXRwdXQuZW5kICYmCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvZW5kfjFgIiA9IFwKKwkJImBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9icmFuY2hlcy9zdGFydGAiICYmCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JyYW5jaGVzL3N0YXJ0fjJgIiA9IFwKKwkJImBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90cnVua2AiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy9lbmRAMworCScKKworZWNobyB0cnkgdG8gdHJ5ID4gZXhwZWN0LnR3bworZWNobyBub3RoaW5nIHRvIHNlZSBoZXJlID4+IGV4cGVjdC50d28KK2NhdCBleHBlY3QuZW5kID4+IGV4cGVjdC50d28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBsZWZ0LWhhbmQtc2lkZSBvbmx5IGdsb2JiaW5nJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uZmV0Y2ggdHJ1bms6cmVmcy9yZW1vdGVzL3R3by90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyo6cmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28udGFncyBcCisJICAgICAgICAgICAgICAgICAidGFncy8qOnJlZnMvcmVtb3Rlcy90d28vdGFncy8qIiAmJgorCSgKKwkJY2QgdG1wICYmCisJCWVjaG8gInRyeSB0cnkiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidHJ5IHRvIHRyeSIKKwkpICYmCisJZ2l0IHN2biBmZXRjaCB0d28gJiYKKwl0ZXN0IGBnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZCB8IHdjIC1sYCAtZXEgNiAmJgorCXRlc3QgYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3N0YXJ0IHwgd2MgLWxgIC1lcSAzICYmCisJdGVzdCBgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3N0YXJ0fjJgID0gXAorCSAgICAgYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by90cnVua2AgJiYKKwl0ZXN0IGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmR+M2AgPSBcCisJICAgICBgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzL3N0YXJ0YCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kIHwgXAorCSAgICBzZWQgLWUgInMvXi5cezQxXH0vLyIgPiBvdXRwdXQudHdvICYmCisJdGVzdF9jbXAgZXhwZWN0LnR3byBvdXRwdXQudHdvCisJJworCitlY2hvICJPbmx5IG9uZSBzZXQgb2Ygd2lsZGNhcmQgZGlyZWN0b3JpZXMiIFwKKyAgICAgIihlLmcuICcqJyBvciAnKi8qLyonKSBpcyBzdXBwb3J0ZWQ6ICdicmFuY2hlcy8qL3QvKiciID4gZXhwZWN0LnRocmVlCitlY2hvICIiID4+IGV4cGVjdC50aHJlZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRpc2FsbG93IG11bHRpLWdsb2JzJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLnVybCAiJHN2bnJlcG8iICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLmZldGNoIFwKKwkgICAgICAgICAgICAgICAgIHRydW5rOnJlZnMvcmVtb3Rlcy90aHJlZS90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50aHJlZS5icmFuY2hlcyBcCisJICAgICAgICAgICAgICAgICAiYnJhbmNoZXMvKi90Lyo6cmVmcy9yZW1vdGVzL3RocmVlL2JyYW5jaGVzLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLnRhZ3MgXAorCSAgICAgICAgICAgICAgICAgInRhZ3MvKi8qOnJlZnMvcmVtb3Rlcy90aHJlZS90YWdzLyoiICYmCisJKAorCQljZCB0bXAgJiYKKwkJZWNobyAidHJ5IHRyeSIgPj4gdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgdGFncy9lbmQvc3JjL2IvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJ0cnkgdG8gdHJ5IgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGZldGNoIHRocmVlIDI+IHN0ZGVyci50aHJlZSAmJgorCXRlc3RfY21wIGV4cGVjdC50aHJlZSBzdGRlcnIudGhyZWUKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEwOS1naXQtc3ZuLW11bHRpLWdsb2Iuc2ggYi90L3Q5MTA5LWdpdC1zdm4tbXVsdGktZ2xvYi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMzE4ZjlmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEwOS1naXQtc3ZuLW11bHRpLWdsb2Iuc2gKQEAgLTAsMCArMSwxNjAgQEAKKyMhL2Jpbi9zaAorIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGdsb2JiaW5nIHJlZnNwZWNzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2NhdCA+IGV4cGVjdC5lbmQgPDxFT0YKK3RoZSBlbmQKK2hpCitzdGFydCBhIG5ldyBicmFuY2gKK2luaXRpYWwKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHJlZnNwZWMgZ2xvYmJpbmcnICcKKwlta2RpciAtcCB0cnVuay9zcmMvYSB0cnVuay9zcmMvYiB0cnVuay9kb2MgJiYKKwllY2hvICJoZWxsbyB3b3JsZCIgPiB0cnVuay9zcmMvYS9yZWFkbWUgJiYKKwllY2hvICJnb29kYnllIHdvcmxkIiA+IHRydW5rL3NyYy9iL3JlYWRtZSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbml0aWFsIiB0cnVuayAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHRtcCAmJgorCSgKKwkJY2QgdG1wICYmCisJCW1rZGlyIGJyYW5jaGVzIGJyYW5jaGVzL3YxIHRhZ3MgJiYKKwkJc3ZuX2NtZCBhZGQgYnJhbmNoZXMgdGFncyAmJgorCQlzdm5fY21kIGNwIHRydW5rIGJyYW5jaGVzL3YxL3N0YXJ0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJzdGFydCBhIG5ldyBicmFuY2giICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyAiaGkiID4+IGJyYW5jaGVzL3YxL3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL3YxL3N0YXJ0L3NyYy9iL3JlYWRtZSAmJgorCQllY2hvICJoZXkiID4+IGJyYW5jaGVzL3YxL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIGJyYW5jaGVzL3YxL3N0YXJ0L3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiaGkiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBjcCBicmFuY2hlcy92MS9zdGFydCB0YWdzL2VuZCAmJgorCQllY2hvICJieWUiID4+IHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9iL3JlYWRtZSAmJgorCQllY2hvICJheWUiID4+IHRhZ3MvZW5kL3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvZW5kL3NyYy9hL3JlYWRtZSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAidGhlIGVuZCIgJiYKKwkJZWNobyAiYnllYnllIiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm5vdGhpbmcgdG8gc2VlIGhlcmUiCisJKSAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5zdm4udXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuc3ZuLmZldGNoIFwKKwkgICAgICAgICAgICAgICAgICJ0cnVuay9zcmMvYTpyZWZzL3JlbW90ZXMvdHJ1bmsiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyBcCisJICAgICAgICAgICAgICAgICAiYnJhbmNoZXMvKi8qL3NyYy9hOnJlZnMvcmVtb3Rlcy9icmFuY2hlcy8qLyoiICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnN2bi50YWdzXAorCSAgICAgICAgICAgICAgICAgInRhZ3MvKi9zcmMvYTpyZWZzL3JlbW90ZXMvdGFncy8qIiAmJgorCWdpdCBzdm4gbXVsdGktZmV0Y2ggJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcmVmcy9yZW1vdGVzL3RhZ3MvZW5kIHwgXAorCSAgICBzZWQgLWUgInMvXi5cezQxXH0vLyIgPiBvdXRwdXQuZW5kICYmCisJdGVzdF9jbXAgZXhwZWN0LmVuZCBvdXRwdXQuZW5kICYmCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3RhZ3MvZW5kfjFgIiA9IFwKKwkJImBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9icmFuY2hlcy92MS9zdGFydGAiICYmCisJdGVzdCAiYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JyYW5jaGVzL3YxL3N0YXJ0fjJgIiA9IFwKKwkJImBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90cnVua2AiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdGFncy9lbmRAMworCScKKworZWNobyB0cnkgdG8gdHJ5ID4gZXhwZWN0LnR3bworZWNobyBub3RoaW5nIHRvIHNlZSBoZXJlID4+IGV4cGVjdC50d28KK2NhdCBleHBlY3QuZW5kID4+IGV4cGVjdC50d28KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBsZWZ0LWhhbmQtc2lkZSBvbmx5IGdsb2JiaW5nJyAnCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnR3by51cmwgIiRzdm5yZXBvIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uZmV0Y2ggdHJ1bms6cmVmcy9yZW1vdGVzL3R3by90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50d28uYnJhbmNoZXMgXAorCSAgICAgICAgICAgICAgICAgImJyYW5jaGVzLyovKjpyZWZzL3JlbW90ZXMvdHdvL2JyYW5jaGVzLyovKiIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudHdvLnRhZ3MgXAorCSAgICAgICAgICAgICAgICAgInRhZ3MvKjpyZWZzL3JlbW90ZXMvdHdvL3RhZ3MvKiIgJiYKKwkoCisJCWNkIHRtcCAmJgorCQllY2hvICJ0cnkgdHJ5IiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCisJKSAmJgorCWdpdCBzdm4gZmV0Y2ggdHdvICYmCisJdGVzdCBgZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy90d28vdGFncy9lbmQgfCB3YyAtbGAgLWVxIDYgJiYKKwl0ZXN0IGBnaXQgcmV2LWxpc3QgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy92MS9zdGFydCB8IHdjIC1sYCAtZXEgMyAmJgorCXRlc3QgYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy92MS9zdGFydH4yYCA9IFwKKwkgICAgIGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy90d28vdHJ1bmtgICYmCisJdGVzdCBgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvdHdvL3RhZ3MvZW5kfjNgID0gXAorCSAgICAgYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3R3by9icmFuY2hlcy92MS9zdGFydGAgJiYKKwlnaXQgbG9nIC0tcHJldHR5PW9uZWxpbmUgcmVmcy9yZW1vdGVzL3R3by90YWdzL2VuZCB8IFwKKwkgICAgc2VkIC1lICJzL14uXHs0MVx9Ly8iID4gb3V0cHV0LnR3byAmJgorCXRlc3RfY21wIGV4cGVjdC50d28gb3V0cHV0LnR3bworCScKK2NhdCA+IGV4cGVjdC5mb3VyIDw8RU9GCithZGlvcworYWRkaW5nIG1vcmUKK0NoYW5nZWQgMiBpbiB2Mi9zdGFydAorQW5vdGhlciB2ZXJzaW9uZWQgYnJhbmNoCitpbml0aWFsCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhbm90aGVyIGJyYW5jaCcgJworCSgKKwkJY2QgdG1wICYmCisJCW1rZGlyIGJyYW5jaGVzL3YyICYmCisJCXN2bl9jbWQgYWRkIGJyYW5jaGVzL3YyICYmCisJCXN2bl9jbWQgY3AgdHJ1bmsgYnJhbmNoZXMvdjIvc3RhcnQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkFub3RoZXIgdmVyc2lvbmVkIGJyYW5jaCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQllY2hvICJoZWxsbyIgPj4gYnJhbmNoZXMvdjIvc3RhcnQvc3JjL2IvcmVhZG1lICYmCisJCXBva2UgYnJhbmNoZXMvdjIvc3RhcnQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gImhvd2R5IiA+PiBicmFuY2hlcy92Mi9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJcG9rZSBicmFuY2hlcy92Mi9zdGFydC9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkNoYW5nZWQgMiBpbiB2Mi9zdGFydCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGNwIGJyYW5jaGVzL3YyL3N0YXJ0IHRhZ3MvbmV4dCAmJgorCQllY2hvICJieWUiID4+IHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL25leHQvc3JjL2IvcmVhZG1lICYmCisJCWVjaG8gImF5ZSIgPj4gdGFncy9uZXh0L3NyYy9hL3JlYWRtZSAmJgorCQlwb2tlIHRhZ3MvbmV4dC9zcmMvYS9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImFkZGluZyBtb3JlIiAmJgorCQllY2hvICJieWVieWUiID4+IHRhZ3MvbmV4dC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL25leHQvc3JjL2IvcmVhZG1lICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJhZGlvcyIKKwkpICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLmZvdXIudXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUuZm91ci5mZXRjaCB0cnVuazpyZWZzL3JlbW90ZXMvZm91ci90cnVuayAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLmJyYW5jaGVzIFwKKwkgICAgICAgICAgICAgICAgICJicmFuY2hlcy8qLyo6cmVmcy9yZW1vdGVzL2ZvdXIvYnJhbmNoZXMvKi8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS5mb3VyLnRhZ3MgXAorCSAgICAgICAgICAgICAgICAgInRhZ3MvKjpyZWZzL3JlbW90ZXMvZm91ci90YWdzLyoiICYmCisJZ2l0IHN2biBmZXRjaCBmb3VyICYmCisJdGVzdCBgZ2l0IHJldi1saXN0IHJlZnMvcmVtb3Rlcy9mb3VyL3RhZ3MvbmV4dCB8IHdjIC1sYCAtZXEgNSAmJgorCXRlc3QgYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZm91ci9icmFuY2hlcy92Mi9zdGFydCB8IHdjIC1sYCAtZXEgMyAmJgorCXRlc3QgYGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2ZvdXIvYnJhbmNoZXMvdjIvc3RhcnR+MmAgPSBcCisJICAgICBgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvZm91ci90cnVua2AgJiYKKwl0ZXN0IGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9mb3VyL3RhZ3MvbmV4dH4yYCA9IFwKKwkgICAgIGBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9mb3VyL2JyYW5jaGVzL3YyL3N0YXJ0YCAmJgorCWdpdCBsb2cgLS1wcmV0dHk9b25lbGluZSByZWZzL3JlbW90ZXMvZm91ci90YWdzL25leHQgfCBcCisJICAgIHNlZCAtZSAicy9eLlx7NDFcfS8vIiA+IG91dHB1dC5mb3VyICYmCisJdGVzdF9jbXAgZXhwZWN0LmZvdXIgb3V0cHV0LmZvdXIKKwknCisKK2VjaG8gIk9ubHkgb25lIHNldCBvZiB3aWxkY2FyZCBkaXJlY3RvcmllcyIgXAorICAgICAiKGUuZy4gJyonIG9yICcqLyovKicpIGlzIHN1cHBvcnRlZDogJ2JyYW5jaGVzLyovdC8qJyIgPiBleHBlY3QudGhyZWUKK2VjaG8gIiIgPj4gZXhwZWN0LnRocmVlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGlzYWxsb3cgbXVsdGlwbGUgZ2xvYnMnICcKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUudXJsICIkc3ZucmVwbyIgJiYKKwlnaXQgY29uZmlnIC0tYWRkIHN2bi1yZW1vdGUudGhyZWUuZmV0Y2ggXAorCSAgICAgICAgICAgICAgICAgdHJ1bms6cmVmcy9yZW1vdGVzL3RocmVlL3RydW5rICYmCisJZ2l0IGNvbmZpZyAtLWFkZCBzdm4tcmVtb3RlLnRocmVlLmJyYW5jaGVzIFwKKwkgICAgICAgICAgICAgICAgICJicmFuY2hlcy8qL3QvKjpyZWZzL3JlbW90ZXMvdGhyZWUvYnJhbmNoZXMvKi8qIiAmJgorCWdpdCBjb25maWcgLS1hZGQgc3ZuLXJlbW90ZS50aHJlZS50YWdzIFwKKwkgICAgICAgICAgICAgICAgICJ0YWdzLyo6cmVmcy9yZW1vdGVzL3RocmVlL3RhZ3MvKiIgJiYKKwkoCisJCWNkIHRtcCAmJgorCQllY2hvICJ0cnkgdHJ5IiA+PiB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJcG9rZSB0YWdzL2VuZC9zcmMvYi9yZWFkbWUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInRyeSB0byB0cnkiCisJKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZmV0Y2ggdGhyZWUgMj4gc3RkZXJyLnRocmVlICYmCisJdGVzdF9jbXAgZXhwZWN0LnRocmVlIHN0ZGVyci50aHJlZQorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTEwLWdpdC1zdm4tdXNlLXN2bS1wcm9wcy5zaCBiL3QvdDkxMTAtZ2l0LXN2bi11c2Utc3ZtLXByb3BzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwNmU0YzUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTEwLWdpdC1zdm4tdXNlLXN2bS1wcm9wcy5zaApAQCAtMCwwICsxLDYxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA3IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHVzZVN2bVByb3BzIHRlc3QnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2bSByZXBvJyAnCisJc3ZuYWRtaW4gbG9hZCAtcSAiJHJhd3N2bnJlcG8iIDwgIiRURVNUX0RJUkVDVE9SWSIvdDkxMTAvc3ZtLmR1bXAgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJyIC1pIGJhciAiJHN2bnJlcG8iL21pcnJvci9hcnIgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBkaXIgIiRzdm5yZXBvIi9taXJyb3IvYXJnaCAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBhcmdoIC1pIGUgXAorCSAgIiRzdm5yZXBvIi9taXJyb3IvYXJnaC9hL2IvYy9kL2UgJiYKKwlnaXQgY29uZmlnIHN2bi51c2VTdm1Qcm9wcyB0cnVlICYmCisJZ2l0IHN2biBmZXRjaCAtLWFsbAorCScKKwordXVpZD0xNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKKworYmFyX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vYmFyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWV0YWRhdGEgZm9yIC9iYXInICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXIgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRiYXJfdXJsQDEyICR1dWlkJCcgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXJ+MSB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGJhcl91cmxAMTEgJHV1aWQkJyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn4yIHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkYmFyX3VybEAxMCAkdXVpZCQnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjMgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRiYXJfdXJsQDkgJHV1aWQkJyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn40IHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkYmFyX3VybEA2ICR1dWlkJCcgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXJ+NSB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGJhcl91cmxAMSAkdXVpZCQnCisJIgorCitlX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vZGlyL2EvYi9jL2QvZQordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1ldGFkYXRhIGZvciAvZGlyL2EvYi9jL2QvZScgIgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2UgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRlX3VybEAxICR1dWlkJCcKKwkiCisKK2Rpcl91cmw9aHR0cDovL21heW9uYWlzZS9zdm5yZXBvL2RpcgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1ldGFkYXRhIGZvciAvZGlyJyAiCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZGlyIHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkZGlyX3VybEAyICR1dWlkJCcgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9kaXJ+MSB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGRpcl91cmxAMSAkdXVpZCQnCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmaW5kIGNvbW1pdCBiYXNlZCBvbiBTVk4gcmV2aXNpb24gbnVtYmVyJyAiCisgICAgICAgIGdpdCBzdm4gZmluZC1yZXYgcjEyIHwKKwkgICAgZ3JlcCBgZ2l0IHJldi1wYXJzZSBIRUFEYAorICAgICAgICAiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHJlYmFzZScgIgorCWdpdCBzdm4gcmViYXNlCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTAvc3ZtLmR1bXAgYi90L3Q5MTEwL3N2bS5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNzk5YzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTEwL3N2bS5kdW1wCkBAIC0wLDAgKzEsNTExIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBkZTU5NzNjNi01NDVkLTQxZGEtYWRlZC1jMjY1ZjkwMzllNzQKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDY6NTQ6NTkuNzkzMTA0WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMjAwCitDb250ZW50LWxlbmd0aDogMjAwCisKK0sgNworc3ZuOmxvZworViA0MAorU1ZNOiBpbml0aWFsaXppbmcgbWlycm9yIGZvciAvbWlycm9yL2FycgorSyAxMAorc3ZuOmF1dGhvcgorViAzCitzdm0KK0sgMTEKK3N2bTpoZWFkcmV2CitWIDM5CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MAorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA2OjU1OjAwLjEyMTY0N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDQ0CitDb250ZW50LWxlbmd0aDogNDQKKworSyAxMAorc3ZtOm1pcnJvcgorViAxMgorL21pcnJvci9hcnIKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FycgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDEwCitzdm06c291cmNlCitWIDI5CitodHRwOi8vbWF5b25haXNlL3N2bnJlcG8hL2JhcgorSyA4Citzdm06dXVpZAorViAzNgorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5CitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDE4MgorQ29udGVudC1sZW5ndGg6IDE4MgorCitLIDcKK3N2bjpsb2cKK1YgMTgKK2ltcG9ydCBmb3IgZ2l0LXN2bgorSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDExCitzdm06aGVhZHJldgorViAzOQorMTYxY2U0MjktYTlkZC00ODI4LWFmNGEtNTIwMjNmOTY4Yzg5OjEKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMDo1Mi4xMDg4NDdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgMTAKK3N2bTpzb3VyY2UKK1YgMjkKK2h0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwbyEvYmFyCitLIDgKK3N2bTp1dWlkCitWIDM2CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2Fyci96enoKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDMzYjAyYmMxNWNlOTU1N2QyZGQ4NDg0ZDU4Zjk1YWM0CitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECit6enoKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDIzMAorQ29udGVudC1sZW5ndGg6IDIzMAorCitLIDcKK3N2bjpsb2cKK1YgNjYKK25ldyBzeW1saW5rIGlzIGFkZGVkIHRvIGEgZmlsZSB0aGF0IHdhcyBhbHNvIGp1c3QgbWFkZSBleGVjdXRhYmxlCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAxMQorc3ZtOmhlYWRyZXYKK1YgMzkKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OTo2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDEuNjg2ODkxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWlycm9yL2Fyci96enoKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMzYKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDMzYjAyYmMxNWNlOTU1N2QyZGQ4NDg0ZDU4Zjk1YWM0CitDb250ZW50LWxlbmd0aDogNDAKKworSyAxNAorc3ZuOmV4ZWN1dGFibGUKK1YgMQorKgorUFJPUFMtRU5ECit6enoKKworCitSZXZpc2lvbi1udW1iZXI6IDQKK1Byb3AtY29udGVudC1sZW5ndGg6IDE5MgorQ29udGVudC1sZW5ndGg6IDE5MgorCitLIDcKK3N2bjpsb2cKK1YgMjgKKy9iYXIvZCBzaG91bGQgYmUgaW4gdGhlIGxvZworCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDM5CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6OQorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjA3LjY4NjU1MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG1pcnJvci9hcnIvZAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogMGJlZTg5YjA3YTI0OGUyN2M4M2ZjM2Q1OTUxMjEzYzEKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK2FiYworCisKK1JldmlzaW9uLW51bWJlcjogNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTg1CitDb250ZW50LWxlbmd0aDogMTg1CisKK0sgNworc3ZuOmxvZworViAyMAorYWRkIGEgbmV3IGRpcmVjdG9yeQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDQwCisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MTAKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowOC40MDU5NTNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyL25ld2RpcgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyL25ld2Rpci9kaXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDQKK1RleHQtY29udGVudC1tZDU6IDljZDU5OWEzNTIzODk4ZTZhMTJlMTNlYzc4N2RhNTBhCitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECituZXcKKworCitSZXZpc2lvbi1udW1iZXI6IDYKK1Byb3AtY29udGVudC1sZW5ndGg6IDE5NgorQ29udGVudC1sZW5ndGg6IDE5NgorCitLIDcKK3N2bjpsb2cKK1YgMzEKK21vZGlmeSBhIGZpbGUgaW4gbmV3IGRpcmVjdG9yeQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDQwCisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MTEKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMTowOS4xMjY2NDVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJyL25ld2Rpci9kaXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogYTk1MGUyMDMzMjM1OGU1MjNhNWU5ZDU3MWU0N2ZhNjQKK0NvbnRlbnQtbGVuZ3RoOiA4CisKK25ldworZm9vCisKKworUmV2aXNpb24tbnVtYmVyOiA3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNzkKK0NvbnRlbnQtbGVuZ3RoOiAxNzkKKworSyA3Citzdm46bG9nCitWIDE0Cit1cGRhdGUgL2Jhci9kCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAxMQorc3ZtOmhlYWRyZXYKK1YgNDAKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OToxMgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjA5Ljg0NjIyMVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG1pcnJvci9hcnIvZAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiA3YWJiNzhkZTdmMjc1NmNhOGI1MTFjYmM4NzlmZDVlNworQ29udGVudC1sZW5ndGg6IDQKKworY2JhCisKKworUmV2aXNpb24tbnVtYmVyOiA4CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAyMDEKK0NvbnRlbnQtbGVuZ3RoOiAyMDEKKworSyA3Citzdm46bG9nCitWIDQxCitTVk06IGluaXRpYWxpemluZyBtaXJyb3IgZm9yIC9taXJyb3IvYXJnaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCitzdm0KK0sgMTEKK3N2bTpoZWFkcmV2CitWIDM5CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MAorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA2OjU2OjAzLjcwMzY3N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDU3CitDb250ZW50LWxlbmd0aDogNTcKKworSyAxMAorc3ZtOm1pcnJvcgorViAyNQorL21pcnJvci9hcmdoCisvbWlycm9yL2FycgorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgMTAKK3N2bTpzb3VyY2UKK1YgMjkKK2h0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwbyEvZGlyCitLIDgKK3N2bTp1dWlkCitWIDM2CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogOQorUHJvcC1jb250ZW50LWxlbmd0aDogMTgyCitDb250ZW50LWxlbmd0aDogMTgyCisKK0sgNworc3ZuOmxvZworViAxOAoraW1wb3J0IGZvciBnaXQtc3ZuCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgMTEKK3N2bTpoZWFkcmV2CitWIDM5CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODk6MQorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjUyLjEwODg0N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG1pcnJvci9hcmdoCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgMTAKK3N2bTpzb3VyY2UKK1YgMjkKK2h0dHA6Ly9tYXlvbmFpc2Uvc3ZucmVwbyEvZGlyCitLIDgKK3N2bTp1dWlkCitWIDM2CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvYQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaC9hL2IKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvYS9iL2MKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvYS9iL2MvZAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaC9hL2IvYy9kL2UKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvYS9iL2MvZC9lL2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDkKK1RleHQtY29udGVudC1tZDU6IDNmZDQ2ZmU0NmZjZGNmMDYyYzgwMmNhNjBkYzgyNmQ1CitDb250ZW50LWxlbmd0aDogMTkKKworUFJPUFMtRU5ECitkZWVwIGRpcgorCisKK1JldmlzaW9uLW51bWJlcjogMTAKK1Byb3AtY29udGVudC1sZW5ndGg6IDE5NworQ29udGVudC1sZW5ndGg6IDE5NworCitLIDcKK3N2bjpsb2cKK1YgMzMKK3RyeSBhIGRlZXAgLS1ybWRpciB3aXRoIGEgY29tbWl0CisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAxMQorc3ZtOmhlYWRyZXYKK1YgMzkKKzE2MWNlNDI5LWE5ZGQtNDgyOC1hZjRhLTUyMDIzZjk2OGM4OToyCisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTA6NTQuODQ3MDE1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbWlycm9yL2FyZ2gvZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogOQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBtaXJyb3IvYXJnaC9hL2IvYy9kL2UvZmlsZQorVGV4dC1jb250ZW50LWxlbmd0aDogOQorVGV4dC1jb250ZW50LW1kNTogM2ZkNDZmZTQ2ZmNkY2YwNjJjODAyY2E2MGRjODI2ZDUKK0NvbnRlbnQtbGVuZ3RoOiA5CisKK2RlZXAgZGlyCisKKworTm9kZS1wYXRoOiBtaXJyb3IvYXJnaC9hCitOb2RlLWFjdGlvbjogZGVsZXRlCisKKwpkaWZmIC0tZ2l0IGEvdC90OTExMS1naXQtc3ZuLXVzZS1zdm5zeW5jLXByb3BzLnNoIGIvdC90OTExMS1naXQtc3ZuLXVzZS1zdm5zeW5jLXByb3BzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJkMDgxYzIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTExLWdpdC1zdm4tdXNlLXN2bnN5bmMtcHJvcHMuc2gKQEAgLTAsMCArMSw1MSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biB1c2VTdm5zeW5jUHJvcHMgdGVzdCcKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3Zuc3luYyByZXBvJyAnCisJc3ZuYWRtaW4gbG9hZCAtcSAiJHJhd3N2bnJlcG8iIDwgIiRURVNUX0RJUkVDVE9SWSIvdDkxMTEvc3Zuc3luYy5kdW1wICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIGFyciAtaSBiYXIgIiRzdm5yZXBvIi9iYXIgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBkaXIgIiRzdm5yZXBvIi9kaXIgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgYXJnaCAtaSBlICIkc3ZucmVwbyIvZGlyL2EvYi9jL2QvZSAmJgorCWdpdCBjb25maWcgc3ZuLnVzZVN2bnN5bmNQcm9wcyB0cnVlICYmCisJZ2l0IHN2biBmZXRjaCAtLWFsbAorCScKKwordXVpZD0xNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKKworYmFyX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vYmFyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWV0YWRhdGEgZm9yIC9iYXInICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXIgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRiYXJfdXJsQDEyICR1dWlkJCcgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXJ+MSB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGJhcl91cmxAMTEgJHV1aWQkJyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn4yIHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkYmFyX3VybEAxMCAkdXVpZCQnICYmCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvYmFyfjMgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRiYXJfdXJsQDkgJHV1aWQkJyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2Jhcn40IHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkYmFyX3VybEA2ICR1dWlkJCcgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9iYXJ+NSB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGJhcl91cmxAMSAkdXVpZCQnCisJIgorCitlX3VybD1odHRwOi8vbWF5b25haXNlL3N2bnJlcG8vZGlyL2EvYi9jL2QvZQordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1ldGFkYXRhIGZvciAvZGlyL2EvYi9jL2QvZScgIgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2UgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06ICRlX3VybEAxICR1dWlkJCcKKwkiCisKK2Rpcl91cmw9aHR0cDovL21heW9uYWlzZS9zdm5yZXBvL2RpcgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IG1ldGFkYXRhIGZvciAvZGlyJyAiCisJZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL3JlbW90ZXMvZGlyIHwgXAorCSAgIGdyZXAgJ14ke2dpdF9zdm5faWR9OiAkZGlyX3VybEAyICR1dWlkJCcgJiYKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9kaXJ+MSB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogJGRpcl91cmxAMSAkdXVpZCQnCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTEvc3Zuc3luYy5kdW1wIGIvdC90OTExMS9zdm5zeW5jLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk5ZmE5NQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTEvc3Zuc3luYy5kdW1wCkBAIC0wLDAgKzEsNTYwIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiBiNGJmZTM1ZS1mMjU2LTQwOTYtODc0Yy0wOGM1NjM5ZWNhZDcKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAyNDAKK0NvbnRlbnQtbGVuZ3RoOiAyNDAKKworSyAxOAorc3ZuOnN5bmMtZnJvbS11dWlkCitWIDM2CisxNjFjZTQyOS1hOWRkLTQ4MjgtYWY0YS01MjAyM2Y5NjhjODkKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyAyNAorc3ZuOnN5bmMtbGFzdC1tZXJnZWQtcmV2CitWIDIKKzEyCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjUyLjAxNzU1MloKK0sgMTcKK3N2bjpzeW5jLWZyb20tdXJsCitWIDI0CitodHRwOi8vbWF5b25haXNlL3N2bnJlcG8KK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMAorQ29udGVudC1sZW5ndGg6IDEyMAorCitLIDcKK3N2bjpsb2cKK1YgMTgKK2ltcG9ydCBmb3IgZ2l0LXN2bgorSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjUyLjEwODg0N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhcgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBiYXIvenp6CitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiAzM2IwMmJjMTVjZTk1NTdkMmRkODQ4NGQ1OGY5NWFjNAorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorenp6CisKKworTm9kZS1wYXRoOiBkaXIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZGlyL2EKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZGlyL2EvYgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBkaXIvYS9iL2MKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZGlyL2EvYi9jL2QKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogZGlyL2EvYi9jL2QvZQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBkaXIvYS9iL2MvZC9lL2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDkKK1RleHQtY29udGVudC1tZDU6IDNmZDQ2ZmU0NmZjZGNmMDYyYzgwMmNhNjBkYzgyNmQ1CitDb250ZW50LWxlbmd0aDogMTkKKworUFJPUFMtRU5ECitkZWVwIGRpcgorCisKK05vZGUtcGF0aDogZXhlYy5zaAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzNQorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDNlMmIzMWM3MjE4MWI4NzE0OWZmOTk1ZTcyMDJjMGUzCitDb250ZW50LWxlbmd0aDogNDUKKworSyAxNAorc3ZuOmV4ZWN1dGFibGUKK1YgMAorCitQUk9QUy1FTkQKKyMhL2Jpbi9zaAorCisKK05vZGUtcGF0aDogZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiBkM2IwNzM4NGQxMTNlZGVjNDllYWE2MjM4YWQ1ZmYwMAorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorZm9vCisKKworTm9kZS1wYXRoOiBmb28ubGluaworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogMTA0MzE0NmU0OWVmMDJjYWIxMmVlZjg2NWNiMzRmZjMKK0NvbnRlbnQtbGVuZ3RoOiA0MQorCitLIDExCitzdm46c3BlY2lhbAorViAxCisqCitQUk9QUy1FTkQKK2xpbmsgZm9vCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTM1CitDb250ZW50LWxlbmd0aDogMTM1CisKK0sgNworc3ZuOmxvZworViAzMwordHJ5IGEgZGVlcCAtLXJtZGlyIHdpdGggYSBjb21taXQKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjEwOjU0Ljg0NzAxNVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGRpci9maWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IGRpci9hL2IvYy9kL2UvZmlsZQorVGV4dC1jb250ZW50LWxlbmd0aDogOQorVGV4dC1jb250ZW50LW1kNTogM2ZkNDZmZTQ2ZmNkY2YwNjJjODAyY2E2MGRjODI2ZDUKK0NvbnRlbnQtbGVuZ3RoOiA5CisKK2RlZXAgZGlyCisKKworTm9kZS1wYXRoOiBkaXIvYQorTm9kZS1hY3Rpb246IGRlbGV0ZQorCisKK05vZGUtcGF0aDogZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiBkaXIvYS9iL2MvZC9lL2ZpbGUKK1RleHQtY29udGVudC1sZW5ndGg6IDkKK1RleHQtY29udGVudC1tZDU6IDNmZDQ2ZmU0NmZjZGNmMDYyYzgwMmNhNjBkYzgyNmQ1CitDb250ZW50LWxlbmd0aDogOQorCitkZWVwIGRpcgorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTM2CitDb250ZW50LWxlbmd0aDogMTM2CisKK0sgNworc3ZuOmxvZworViAzNAorcmVtb3ZlIGV4ZWN1dGFibGUgYml0IGZyb20gYSBmaWxlCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNworc3Zuc3luYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wMi0xN1QwNToxMDo1OC4yMzI2OTFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBleGVjLnNoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LW1kNTogM2UyYjMxYzcyMTgxYjg3MTQ5ZmY5OTVlNzIwMmMwZTMKK0NvbnRlbnQtbGVuZ3RoOiAyMAorCitQUk9QUy1FTkQKKyMhL2Jpbi9zaAorCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTMxCitDb250ZW50LWxlbmd0aDogMTMxCisKK0sgNworc3ZuOmxvZworViAyOQorYWRkIGV4ZWN1dGFibGUgYml0IGJhY2sgZmlsZQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTA6NTkuNjY2NTYwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZXhlYy5zaAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzNgorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDNlMmIzMWM3MjE4MWI4NzE0OWZmOTk1ZTcyMDJjMGUzCitDb250ZW50LWxlbmd0aDogNDYKKworSyAxNAorc3ZuOmV4ZWN1dGFibGUKK1YgMQorKgorUFJPUFMtRU5ECisjIS9iaW4vc2gKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDE1NAorQ29udGVudC1sZW5ndGg6IDE1NAorCitLIDcKK3N2bjpsb2cKK1YgNTIKK2V4ZWN1dGFibGUgZmlsZSBiZWNvbWVzIGEgc3ltbGluayB0byBiYXIvenp6IChmaWxlKQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDAuNjc2NDk1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZXhlYy5zaAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzMworVGV4dC1jb250ZW50LWxlbmd0aDogMTIKK1RleHQtY29udGVudC1tZDU6IGYxMzg2OTMzNzE2NjVjYzExNzc0MjUwODc2MWQ2ODRkCitDb250ZW50LWxlbmd0aDogNDUKKworSyAxMQorc3ZuOnNwZWNpYWwKK1YgMQorKgorUFJPUFMtRU5ECitsaW5rIGJhci96enoKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNjgKK0NvbnRlbnQtbGVuZ3RoOiAxNjgKKworSyA3Citzdm46bG9nCitWIDY2CituZXcgc3ltbGluayBpcyBhZGRlZCB0byBhIGZpbGUgdGhhdCB3YXMgYWxzbyBqdXN0IG1hZGUgZXhlY3V0YWJsZQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDEuNjg2ODkxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyL3p6egorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzNgorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogMzNiMDJiYzE1Y2U5NTU3ZDJkZDg0ODRkNThmOTVhYzQKK0NvbnRlbnQtbGVuZ3RoOiA0MAorCitLIDE0Citzdm46ZXhlY3V0YWJsZQorViAxCisqCitQUk9QUy1FTkQKK3p6egorCisKK05vZGUtcGF0aDogZXhlYy0yLnNoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA1CitOb2RlLWNvcHlmcm9tLXBhdGg6IGV4ZWMuc2gKK1RleHQtY29udGVudC1sZW5ndGg6IDEyCitUZXh0LWNvbnRlbnQtbWQ1OiBmMTM4NjkzMzcxNjY1Y2MxMTc3NDI1MDg3NjFkNjg0ZAorQ29udGVudC1sZW5ndGg6IDEyCisKK2xpbmsgYmFyL3p6egorCitSZXZpc2lvbi1udW1iZXI6IDcKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzNgorQ29udGVudC1sZW5ndGg6IDEzNgorCitLIDcKK3N2bjpsb2cKK1YgMzQKK21vZGlmeSBhIHN5bWxpbmsgdG8gYmVjb21lIGEgZmlsZQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDIuNjc3MDM1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZXhlYy0yLnNoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA5CitUZXh0LWNvbnRlbnQtbWQ1OiA4ZTkyZWZmOWU5MTE4ODZjZWRlMjdkNDIwZjg5YzczNQorQ29udGVudC1sZW5ndGg6IDE5CisKK1BST1BTLUVORAorZ2l0IGhlbHAKKworCitSZXZpc2lvbi1udW1iZXI6IDgKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwOQorQ29udGVudC1sZW5ndGg6IDEwOQorCitLIDcKK3N2bjpsb2cKK1YgOAorw6nDr+KIjworCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDMuNjc2ODYyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZXhlYy0yLnNoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDE3CitUZXh0LWNvbnRlbnQtbWQ1OiA0OTg4MTk1NDA2M2NmMjZjYTQ4YzIxMjM5NmE5NTdjYQorQ29udGVudC1sZW5ndGg6IDE3CisKK2dpdCBoZWxwCisjIGhlbGxvCisKKworUmV2aXNpb24tbnVtYmVyOiA5CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMzAKK0NvbnRlbnQtbGVuZ3RoOiAxMzAKKworSyA3Citzdm46bG9nCitWIDI4CisvYmFyL2Qgc2hvdWxkIGJlIGluIHRoZSBsb2cKKworSyAxMAorc3ZuOmF1dGhvcgorViA3Citzdm5zeW5jCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA3LTAyLTE3VDA1OjExOjA3LjY4NjU1MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJhci9kCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiAwYmVlODliMDdhMjQ4ZTI3YzgzZmMzZDU5NTEyMTNjMQorQ29udGVudC1sZW5ndGg6IDE0CisKK1BST1BTLUVORAorYWJjCisKKworUmV2aXNpb24tbnVtYmVyOiAxMAorUHJvcC1jb250ZW50LWxlbmd0aDogMTIyCitDb250ZW50LWxlbmd0aDogMTIyCisKK0sgNworc3ZuOmxvZworViAyMAorYWRkIGEgbmV3IGRpcmVjdG9yeQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDguNDA1OTUzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyL25ld2RpcgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiBiYXIvbmV3ZGlyL2RpcgorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogOWNkNTk5YTM1MjM4OThlNmExMmUxM2VjNzg3ZGE1MGEKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK25ldworCisKK1JldmlzaW9uLW51bWJlcjogMTEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMworQ29udGVudC1sZW5ndGg6IDEzMworCitLIDcKK3N2bjpsb2cKK1YgMzEKK21vZGlmeSBhIGZpbGUgaW4gbmV3IGRpcmVjdG9yeQorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDkuMTI2NjQ1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyL25ld2Rpci9kaXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogYTk1MGUyMDMzMjM1OGU1MjNhNWU5ZDU3MWU0N2ZhNjQKK0NvbnRlbnQtbGVuZ3RoOiA4CisKK25ldworZm9vCisKKworUmV2aXNpb24tbnVtYmVyOiAxMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgNworc3ZuOmxvZworViAxNAordXBkYXRlIC9iYXIvZAorCitLIDEwCitzdm46YXV0aG9yCitWIDcKK3N2bnN5bmMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDItMTdUMDU6MTE6MDkuODQ2MjIxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyL2QKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogN2FiYjc4ZGU3ZjI3NTZjYThiNTExY2JjODc5ZmQ1ZTcKK0NvbnRlbnQtbGVuZ3RoOiA0CisKK2NiYQpkaWZmIC0tZ2l0IGEvdC90OTExMi1naXQtc3ZuLW1kNWxlc3MtZmlsZS5zaCBiL3QvdDkxMTItZ2l0LXN2bi1tZDVsZXNzLWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTg2MWM3MQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTItZ2l0LXN2bi1tZDVsZXNzLWZpbGUuc2gKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdGhhdCBnaXQgaGFuZGxlcyBhbiBzdm4gcmVwb3NpdG9yeSB3aXRoIG1pc3NpbmcgbWQ1c3VtcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKKyMgTG9hZGluZyBhIG5vZGUgZnJvbSBhIHN2biBkdW1wZmlsZSB3aXRob3V0IGEgVGV4dC1Db250ZW50LUxlbmd0aAorIyBmaWVsZCBjYXVzZXMgc3ZuIHRvIG5lZ2xlY3QgdG8gc3RvcmUgb3IgcmVwb3J0IGFuIG1kNXN1bS4gIChpdCB3aWxsCisjIGNhbGN1bGF0ZSBvbmUgaWYgeW91IGhhZCBwdXQgVGV4dC1Db250ZW50LUxlbmd0aDogMCkuICBUaGlzIHNob3dlZAorIyB1cCBpbiBhIHJlcG9zaXRvcnkgY3JlYXRlZCB3aXRoIGN2czJzdm4uCisKK2NhdCA+IGR1bXBmaWxlLnN2biA8PEVPRgorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDEKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA5OAorQ29udGVudC1sZW5ndGg6IDk4CisKK0sgNworc3ZuOmxvZworViAwCisKK0sgMTAKK3N2bjphdXRob3IKK1YgNAordGVzdAorSyA4Citzdm46ZGF0ZQorViAyNworMjAwNy0wNS0wNlQxMjozNzowMS4xNTMzMzlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBtZDVsZXNzLWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXBmaWxlJyAnc3ZuYWRtaW4gbG9hZCAiJHJhd3N2bnJlcG8iIDwgZHVtcGZpbGUuc3ZuJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIGdpdCBzdm4nICdnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIHJldmlzaW9ucyBmcm9tIHN2bicgJ2dpdCBzdm4gZmV0Y2gnCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoIGIvdC90OTExMy1naXQtc3ZuLWRjb21taXQtbmV3LWZpbGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTg0NzljZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTMtZ2l0LXN2bi1kY29tbWl0LW5ldy1maWxlLnNoCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisjCisKKyMgRG9uJ3QgcnVuIHRoaXMgdGVzdCBieSBkZWZhdWx0IHVubGVzcyB0aGUgdXNlciByZWFsbHkgd2FudHMgaXQKKyMgSSBkb24ndCBsaWtlIHRoZSBpZGVhIG9mIHRha2luZyBhIHBvcnQgYW5kIHBvc3NpYmx5IGxlYXZpbmcgYQorIyBkYWVtb24gcnVubmluZyBvbiBhIHVzZXJzIHN5c3RlbSBpZiB0aGUgdGVzdCBmYWlscy4KKyMgTm90IGFsbCBnaXQgdXNlcnMgd2lsbCBuZWVkIHRvIGludGVyYWN0IHdpdGggU1ZOLgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGRjb21taXQgbmV3IGZpbGVzIG92ZXIgc3ZuOi8vIHRlc3QnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCityZXF1aXJlX3N2bnNlcnZlCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHRyYWNraW5nIGFuIGVtcHR5IHJlcG8nICcKKwlzdm5fY21kIG1rZGlyIC1tICJlbXB0eSBkaXIiICIkc3ZucmVwbyIvZW1wdHktZGlyICYmCisJZWNobyAiW2dlbmVyYWxdIiA+ICIkcmF3c3ZucmVwbyIvY29uZi9zdm5zZXJ2ZS5jb25mICYmCisJZWNobyBhbm9uLWFjY2VzcyA9IHdyaXRlID4+ICIkcmF3c3ZucmVwbyIvY29uZi9zdm5zZXJ2ZS5jb25mICYmCisJc3RhcnRfc3Zuc2VydmUgJiYKKwlnaXQgc3ZuIGluaXQgc3ZuOi8vMTI3LjAuMC4xOiRTVk5TRVJWRV9QT1JUICYmCisJZ2l0IHN2biBmZXRjaAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZpbGVzIGluIG5ldyBkaXJlY3Rvcnkgd2l0aCBkY29tbWl0JyAiCisJbWtkaXIgZ2l0LW5ldy1kaXIgJiYKKwllY2hvIGhlbGxvID4gZ2l0LW5ldy1kaXIvd29ybGQgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIGdpdC1uZXctZGlyL3dvcmxkICYmCisJZ2l0IGNvbW1pdCAtbSBoZWxsbyAmJgorCXN0YXJ0X3N2bnNlcnZlICYmCisJZ2l0IHN2biBkY29tbWl0CisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTQtZ2l0LXN2bi1kY29tbWl0LW1lcmdlLnNoIGIvdC90OTExNC1naXQtc3ZuLWRjb21taXQtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmI0MTg3NgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTQtZ2l0LXN2bi1kY29tbWl0LW1lcmdlLnNoCkBAIC0wLDAgKzEsOTUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisjIEJhc2VkIG9uIGEgc2NyaXB0IGJ5IEpvYWtpbSBUamVybmx1bmQgPGpvYWtpbS50amVybmx1bmRAdHJhbnNtb2RlLnNlPgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGRjb21taXQgaGFuZGxlcyBtZXJnZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCitiaWdfdGV4dF9ibG9jayAoKSB7CitjYXQgPDwgRU9GCisjCisjIChDKSBDb3B5cmlnaHQgMjAwMCAtIDIwMDUKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyMKKyMgU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyMgcHJvamVjdC4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworRU9GCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIG15c3Zud29yayAmJgorCW1rZGlyIC1wIG15c3Zud29yay90cnVuayAmJgorCSgKKwkJY2QgbXlzdm53b3JrICYmCisJCWJpZ190ZXh0X2Jsb2NrID4+dHJ1bmsvUkVBRE1FICYmCisJCXN2bl9jbWQgYWRkIHRydW5rICYmCisJCXN2bl9jbWQgY2kgLW0gImZpcnN0IGNvbW1pdCIgdHJ1bmsKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBnaXQgbWlycm9yIGFuZCBtZXJnZScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIC10IHRhZ3MgLVQgdHJ1bmsgLWIgYnJhbmNoZXMgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IGNoZWNrb3V0IC1iIHN2biByZW1vdGVzL29yaWdpbi90cnVuayAmJgorCWdpdCBjaGVja291dCAtYiBtZXJnZSAmJgorCWVjaG8gbmV3IGZpbGUgPiBuZXdfZmlsZSAmJgorCWdpdCBhZGQgbmV3X2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJOZXcgZmlsZSIgJiYKKwllY2hvIGhlbGxvID4+IFJFQURNRSAmJgorCWdpdCBjb21taXQgLWEgLW0gImhlbGxvIiAmJgorCWVjaG8gYWRkIHNvbWUgc3R1ZmYgPj4gbmV3X2ZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJhZGQgc29tZSBzdHVmZiIgJiYKKwlnaXQgY2hlY2tvdXQgc3ZuICYmCisJbXYgLWYgUkVBRE1FIHRtcCAmJgorCWVjaG8gZnJpZW5kID4gUkVBRE1FICYmCisJY2F0IHRtcCA+PiBSRUFETUUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJmcmllbmQiICYmCisJZ2l0IG1lcmdlIG1lcmdlCisJJworCit0ZXN0X2RlYnVnICdnaXRrIC0tYWxsICYgc2xlZXAgMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHByZS1tZXJnZSBhbmNlc3RyeScgIgorCXRlc3QgeFxgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3N2bl4yXGAgPSBcCisJICAgICB4XGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWVyZ2VcYCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9oZWFkcy9zdm5eIHwgZ3JlcCAnXmZyaWVuZCQnCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGRjb21taXQgbWVyZ2VzJyAiCisJZ2l0IHN2biBkY29tbWl0CisJIgorCit0ZXN0X2RlYnVnICdnaXRrIC0tYWxsICYgc2xlZXAgMScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHBvc3QtbWVyZ2UgYW5jZXN0cnknICIKKwl0ZXN0IHhcYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9zdm5cYCA9IFwKKwkgICAgIHhcYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL29yaWdpbi90cnVuayBcYCAmJgorCXRlc3QgeFxgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3N2bl4yXGAgPSBcCisJICAgICB4XGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWVyZ2VcYCAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9oZWFkcy9zdm5eIHwgZ3JlcCAnXmZyaWVuZCQnCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgY29tbWl0IG1lc3NhZ2UnICIKKwlnaXQgcmV2LWxpc3QgLS1wcmV0dHk9cmF3IC0xIHJlZnMvaGVhZHMvc3ZuIHwgXAorCSAgZ3JlcCBcIiAgICBNZXJnZSBicmFuY2ggJ21lcmdlJyBpbnRvIHN2blwiCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTUtZ2l0LXN2bi1kY29tbWl0LWZ1bmt5LXJlbmFtZXMuc2ggYi90L3Q5MTE1LWdpdC1zdm4tZGNvbW1pdC1mdW5reS1yZW5hbWVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZhNDhlNDAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE1LWdpdC1zdm4tZGNvbW1pdC1mdW5reS1yZW5hbWVzLnNoCkBAIC0wLDAgKzEsODggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCisKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IGNhbiBjb21taXQgcmVuYW1lcyBvZiBmaWxlcyB3aXRoIHVnbHkgbmFtZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHJlcG9zaXRvcnkgd2l0aCBzdHJhbmdlIG5hbWVzJyAnCisJc3ZuYWRtaW4gbG9hZCAtcSAiJHJhd3N2bnJlcG8iIDwgIiRURVNUX0RJUkVDVE9SWSIvdDkxMTUvZnVua3ktbmFtZXMuZHVtcCAmJgorCXN0YXJ0X2h0dHBkIGd0aysKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgYW5kIGZldGNoIHJlcG9zaXRvcnknICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkIGdpdC1zdm4KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBmaWxlIGluIGV4aXN0aW5nIHVnbHkgYW5kIGVtcHR5IGRpcicgJworCW1rZGlyIC1wICIje2JhZF9kaXJlY3RvcnlfbmFtZX0iICYmCisJZWNobyBoaSA+ICIje2JhZF9kaXJlY3RvcnlfbmFtZX0vIGZvbyIgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICIje2JhZF9kaXJlY3RvcnlfbmFtZX0vIGZvbyIgJiYKKwlnaXQgY29tbWl0IC1tICJuZXcgZmlsZSBpbiB1Z2x5IHBhcmVudCIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSB1Z2x5IGZpbGUnICcKKwlnaXQgbXYgIiN7YmFkX2RpcmVjdG9yeV9uYW1lfS8gZm9vIiAiZmlsZSBuYW1lIHdpdGggZmVjZXMiICYmCisJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIHVnbHkgZmlsZSIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbmFtZSBwcmV0dHkgZmlsZScgJworCWVjaG8gOnggPiBwcmV0dHkgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkIHByZXR0eSAmJgorCWdpdCBjb21taXQgLW0gInByZXR0eSA6eCIgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlta2RpciAtcCByZWd1bGFyX2Rpcl9uYW1lICYmCisJZ2l0IG12IHByZXR0eSByZWd1bGFyX2Rpcl9uYW1lL3ByZXR0eSAmJgorCWdpdCBjb21taXQgLW0gIm1vdmVkIHByZXR0eSBmaWxlIiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIHByZXR0eSBmaWxlIGludG8gdWdseSBvbmUnICcKKwlnaXQgbXYgcmVndWxhcl9kaXJfbmFtZS9wcmV0dHkgIiN7YmFkX2RpcmVjdG9yeV9uYW1lfS8gYm9vYm9vIiAmJgorCWdpdCBjb21taXQgLW0gYm9vYm9vICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgYSBmaWxlIHdpdGggcGx1cyBzaWducycgJworCWVjaG8gLi4gPiArXysgJiYKKwlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICtfKyAmJgorCWdpdCBjb21taXQgLW0gcGx1cyAmJgorCW1rZGlyIGd0aysgJiYKKwlnaXQgbXYgK18rIGd0aysvXytfICYmCisJZ2l0IGNvbW1pdCAtbSBwbHVzX2RpciAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdGhlIHJlcG9zaXRvcnkgdG8gdGVzdCByZWJhc2UnICcKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgdGVzdC1yZWJhc2UgJiYKKwkoCisJCWNkIHRlc3QtcmViYXNlICYmCisJCWVjaG8gdGVzdC1yZWJhc2UgPnRlc3QtcmViYXNlICYmCisJCWdpdCBhZGQgdGVzdC1yZWJhc2UgJiYKKwkJZ2l0IGNvbW1pdCAtbSB0ZXN0LXJlYmFzZQorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21ha2UgYSBjb21taXQgdG8gdGVzdCByZWJhc2UnICcKKwkJZWNobyB0ZXN0LXJlYmFzZS1tYWluID4gdGVzdC1yZWJhc2UtbWFpbiAmJgorCQlnaXQgYWRkIHRlc3QtcmViYXNlLW1haW4gJiYKKwkJZ2l0IGNvbW1pdCAtbSB0ZXN0LXJlYmFzZS1tYWluICYmCisJCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biByZWJhc2Ugd29ya3MgaW5zaWRlIGEgZnJlc2gtY2xvbmVkIHJlcG9zaXRvcnknICcKKwljZCB0ZXN0LXJlYmFzZSAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQl0ZXN0IC1lIHRlc3QtcmViYXNlLW1haW4gJiYKKwkJdGVzdCAtZSB0ZXN0LXJlYmFzZQorCScKKworc3RvcF9odHRwZAorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMTUvZnVua3ktbmFtZXMuZHVtcCBiL3QvdDkxMTUvZnVua3ktbmFtZXMuZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjQyMmY3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTExNS9mdW5reS1uYW1lcy5kdW1wCkBAIC0wLDAgKzEsMTAzIEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiA4MTljNDRmZS0yYmNjLTQwNjYtODhlNC05ODVlMmJjMGI0MTgKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDctMTJUMDc6NTQ6MjYuMDYyOTE0WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTUyCitDb250ZW50LWxlbmd0aDogMTUyCisKK0sgNworc3ZuOmxvZworViA0NAord2hhdCB3aWxsIHRob3NlIHdhY2t5IHBlb3BsZSB0aGluayBvZiBuZXh0PworCitLIDEwCitzdm46YXV0aG9yCitWIDEyCitub3JtYWxwZXJzb24KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDctMDctMTJUMDg6MDA6MDUuMDExNTczWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogIGxlYWRpbmcgc3BhY2UKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogIGxlYWRpbmcgc3BhY2UgZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNQorVGV4dC1jb250ZW50LW1kNTogZTRmYTIwYzY3NTQyY2RjMjEyNzFlMDhkMzI5Mzk3YWIKK0NvbnRlbnQtbGVuZ3RoOiAxNQorCitQUk9QUy1FTkQKK3VnbHkKKworCitOb2RlLXBhdGg6ICN7YmFkX2RpcmVjdG9yeV9uYW1lfQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiAje2Nvb2xfbmFtZX0KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDE4CitUZXh0LWNvbnRlbnQtbWQ1OiA4N2RhYzQwY2EzMzdkZmEzZGNjODkxMTM4OGMzZGRkYQorQ29udGVudC1sZW5ndGg6IDI4CisKK1BST1BTLUVORAorc3RyYW5nZSBuYW1lIGhlcmUKKworCitOb2RlLXBhdGg6IGRpciBuYW1lIHdpdGggc3BhY2VzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGZpbGUgbmFtZSB3aXRoIHNwYWNlcworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNworVGV4dC1jb250ZW50LW1kNTogYzFmMTBjZmQ2NDA2MTg0ODRhMmE0NzVjMTE0MTBmZDMKK0NvbnRlbnQtbGVuZ3RoOiAxNworCitQUk9QUy1FTkQKK3NwYWNlcworCisKK05vZGUtcGF0aDogcmVndWxhcl9kaXJfbmFtZQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECmRpZmYgLS1naXQgYS90L3Q5MTE2LWdpdC1zdm4tbG9nLnNoIGIvdC90OTExNi1naXQtc3ZuLWxvZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NTc3M2VlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTExNi1naXQtc3ZuLWxvZy5zaApAQCAtMCwwICsxLDE0NSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBsb2cgdGVzdHMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeSBhbmQgaW1wb3J0JyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJZm9yIGkgaW4gdHJ1bmsgYnJhbmNoZXMvYSBicmFuY2hlcy9iIHRhZ3MvMC4xIHRhZ3MvMC4yIHRhZ3MvMC4zCisJCWRvCisJCQlta2RpciAtcCAkaSAmJgorCQkJZWNobyBoZWxsbyA+PiRpL1JFQURNRSB8fAorCQkJZXhpdCAxCisJCWRvbmUgJiYKKwkJc3ZuX2NtZCBpbXBvcnQgLW0gdGVzdCAuICIkc3ZucmVwbyIKKwkpICYmCisJZ2l0IHN2biBpbml0ICIkc3ZucmVwbyIgLVQgdHJ1bmsgLWIgYnJhbmNoZXMgLXQgdGFncyAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWVjaG8gYnllID4+IFJFQURNRSAmJgorCWdpdCBjb21taXQgLWEgLW0gYnllICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vYSAmJgorCWVjaG8gd2h5ID4+IEZFRURNRSAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgRkVFRE1FICYmCisJZ2l0IGNvbW1pdCAtbSBmZWVkbWUgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWVjaG8gYXllID4+IFJFQURNRSAmJgorCWdpdCBjb21taXQgLWEgLW0gYXllICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vYiAmJgorCWVjaG8gc3B5ID4+IFJFQURNRSAmJgorCWdpdCBjb21taXQgLWEgLW0gc3B5ICYmCisJZWNobyB0cnkgPj4gUkVBRE1FICYmCisJZ2l0IGNvbW1pdCAtYSAtbSB0cnkgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBsb2cnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9hICYmCisJZ2l0IHN2biBsb2cgLXIyIG9yaWdpbi90cnVuayB8IGdyZXAgXnIyICYmCisJZ2l0IHN2biBsb2cgLXI0IG9yaWdpbi90cnVuayB8IGdyZXAgXnI0ICYmCisJZ2l0IHN2biBsb2cgLXIzIHwgZ3JlcCBecjMKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3J1biBsb2cgYWdhaW5zdCBhIGZyb20gdHJ1bmsnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yMyBvcmlnaW4vYSB8IGdyZXAgXnIzCisJIgorCitwcmludGYgJ3IxIFxucjIgXG5yNCBcbicgPiBleHBlY3RlZC1yYW5nZS1yMS1yMi1yNAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFzY2VuZGluZyByZXZpc2lvbiByYW5nZScgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgMTo0IHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjEtcjItcjQgLQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCAtLXNob3ctY29tbWl0JyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtLXNob3ctY29tbWl0IC1yIDE6NCB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXIxLXIyLXI0IC0KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggLS1zaG93LWNvbW1pdCAoc2hhMSknICIKKwlnaXQgc3ZuIGZpbmQtcmV2IHIxID5leHBlY3RlZC1yYW5nZS1yMS1yMi1yNC1zaGExICYmCisJZ2l0IHN2biBmaW5kLXJldiByMiA+PmV4cGVjdGVkLXJhbmdlLXIxLXIyLXI0LXNoYTEgJiYKKwlnaXQgc3ZuIGZpbmQtcmV2IHI0ID4+ZXhwZWN0ZWQtcmFuZ2UtcjEtcjItcjQtc2hhMSAmJgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLS1zaG93LWNvbW1pdCAtciAxOjQgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjIgPm91dCAmJgorCWdpdCByZXYtcGFyc2UgXCQoY2F0IG91dCkgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXIxLXIyLXI0LXNoYTEgYWN0dWFsCisJIgorCitwcmludGYgJ3I0IFxucjIgXG5yMSBcbicgPiBleHBlY3RlZC1yYW5nZS1yNC1yMi1yMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRlc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2UnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDQ6MSB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXI0LXIyLXIxIC0KKwkiCisKK3ByaW50ZiAncjEgXG5yMiBcbicgPiBleHBlY3RlZC1yYW5nZS1yMS1yMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIHJldmlzaW9uJyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciAxOjMgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yMS1yMiAtCisJIgorCitwcmludGYgJ3IyIFxucjEgXG4nID4gZXhwZWN0ZWQtcmFuZ2UtcjItcjEKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkZXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggdW5yZWFjaGFibGUgcmV2aXNpb24nICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDM6MSB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXIyLXIxIC0KKwkiCisKK3ByaW50ZiAncjIgXG4nID4gZXhwZWN0ZWQtcmFuZ2UtcjIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBhc2NlbmRpbmcgcmV2aXNpb24gcmFuZ2Ugd2l0aCB1bnJlYWNoYWJsZSB1cHBlciBib3VuZGFyeSByZXZpc2lvbiBhbmQgMSBjb21taXQnICIKKwlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi90cnVuayAmJgorCWdpdCBzdm4gbG9nIC1yIDI6MyB8IGdyZXAgJ15yWzAtOV0nIHwgY3V0IC1kJ3wnIC1mMSB8IHRlc3RfY21wIGV4cGVjdGVkLXJhbmdlLXIyIC0KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIHVwcGVyIGJvdW5kYXJ5IHJldmlzaW9uIGFuZCAxIGNvbW1pdCcgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgMzoyIHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjIgLQorCSIKKworcHJpbnRmICdyNCBcbicgPiBleHBlY3RlZC1yYW5nZS1yNAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIGxvd2VyIGJvdW5kYXJ5IHJldmlzaW9uIGFuZCAxIGNvbW1pdCcgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgMzo0IHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjQgLQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkZXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggdW5yZWFjaGFibGUgbG93ZXIgYm91bmRhcnkgcmV2aXNpb24gYW5kIDEgY29tbWl0JyAiCisJZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vdHJ1bmsgJiYKKwlnaXQgc3ZuIGxvZyAtciA0OjMgfCBncmVwICdeclswLTldJyB8IGN1dCAtZCd8JyAtZjEgfCB0ZXN0X2NtcCBleHBlY3RlZC1yYW5nZS1yNCAtCisJIgorCitwcmludGYgLS0gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJyA+IGV4cGVjdGVkLXNlcGFyYXRvcgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGFzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIGJvdW5kYXJ5IHJldmlzaW9ucyBhbmQgbm8gY29tbWl0cycgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgNTo2IHwgdGVzdF9jbXAgZXhwZWN0ZWQtc2VwYXJhdG9yIC0KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGVzY2VuZGluZyByZXZpc2lvbiByYW5nZSB3aXRoIHVucmVhY2hhYmxlIGJvdW5kYXJ5IHJldmlzaW9ucyBhbmQgbm8gY29tbWl0cycgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgNjo1IHwgdGVzdF9jbXAgZXhwZWN0ZWQtc2VwYXJhdG9yIC0KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgYXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggdW5yZWFjaGFibGUgYm91bmRhcnkgcmV2aXNpb25zIGFuZCAxIGNvbW1pdCcgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgMzo1IHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjQgLQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkZXNjZW5kaW5nIHJldmlzaW9uIHJhbmdlIHdpdGggdW5yZWFjaGFibGUgYm91bmRhcnkgcmV2aXNpb25zIGFuZCAxIGNvbW1pdCcgIgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBsb2cgLXIgNTozIHwgZ3JlcCAnXnJbMC05XScgfCBjdXQgLWQnfCcgLWYxIHwgdGVzdF9jbXAgZXhwZWN0ZWQtcmFuZ2UtcjQgLQorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaCBiL3QvdDkxMTctZ2l0LXN2bi1pbml0LWNsb25lLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE2NmY0M2MKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTE3LWdpdC1zdm4taW5pdC1jbG9uZS5zaApAQCAtMCwwICsxLDEyMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBpbml0L2Nsb25lIHRlc3RzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworIyBzZXR1cCwgcnVuIGluc2lkZSB0bXAgc28gd2UgZG9uJ3QgaGF2ZSBhbnkgY29uZmxpY3RzIHdpdGggJHN2bnJlcG8KK3NldCAtZQorcm0gLXIgLmdpdAorbWtkaXIgdG1wCitjZCB0bXAKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCW1rZGlyIHByb2plY3QgcHJvamVjdC90cnVuayBwcm9qZWN0L2JyYW5jaGVzIHByb2plY3QvdGFncyAmJgorCWVjaG8gZm9vID4gcHJvamVjdC90cnVuay9mb28gJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvIi9wcm9qZWN0ICYmCisJcm0gLXJmIHByb2plY3QKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIGNsb25lJyAnCisJdGVzdCAhIC1kIHRydW5rICYmCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iL3Byb2plY3QvdHJ1bmsgJiYKKwl0ZXN0IC1kIHRydW5rLy5naXQvc3ZuICYmCisJdGVzdCAtZSB0cnVuay9mb28gJiYKKwlybSAtcmYgdHJ1bmsKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRvIHRhcmdldCBkaXJlY3RvcnknICcKKwl0ZXN0ICEgLWQgdGFyZ2V0ICYmCisJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iL3Byb2plY3QvdHJ1bmsgdGFyZ2V0ICYmCisJdGVzdCAtZCB0YXJnZXQvLmdpdC9zdm4gJiYKKwl0ZXN0IC1lIHRhcmdldC9mb28gJiYKKwlybSAtcmYgdGFyZ2V0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRoIC0tc3RkbGF5b3V0JyAnCisJdGVzdCAhIC1kIHByb2plY3QgJiYKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIvcHJvamVjdCAmJgorCXRlc3QgLWQgcHJvamVjdC8uZ2l0L3N2biAmJgorCXRlc3QgLWUgcHJvamVjdC9mb28gJiYKKwlybSAtcmYgcHJvamVjdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdG8gdGFyZ2V0IGRpcmVjdG9yeSB3aXRoIC0tc3RkbGF5b3V0JyAnCisJdGVzdCAhIC1kIHRhcmdldCAmJgorCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIi9wcm9qZWN0IHRhcmdldCAmJgorCXRlc3QgLWQgdGFyZ2V0Ly5naXQvc3ZuICYmCisJdGVzdCAtZSB0YXJnZXQvZm9vICYmCisJcm0gLXJmIHRhcmdldAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCB3aXRob3V0IC1zLy1ULy1iLy10IGRvZXMgbm90IHdhcm4nICcKKwl0ZXN0ICEgLWQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIi9wcm9qZWN0L3RydW5rIHRydW5rIDI+d2FybmluZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdyZXAgLXEgcHJlZml4IHdhcm5pbmcgJiYKKwlybSAtcmYgdHJ1bmsgJiYKKwlybSAtZiB3YXJuaW5nCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB3aXRob3V0IC1zLy1ULy1iLy10IGRvZXMgbm90IHdhcm4nICcKKwl0ZXN0ICEgLWQgdHJ1bmsgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvcHJvamVjdC90cnVuayAyPndhcm5pbmcgJiYKKwl0ZXN0X211c3RfZmFpbCBncmVwIC1xIHByZWZpeCB3YXJuaW5nICYmCisJcm0gLXJmIHRydW5rICYmCisJcm0gLWYgd2FybmluZworCScKKwordGVzdF9zdm5fY29uZmlndXJlZF9wcmVmaXggKCkgeworCXByZWZpeD0kMSAmJgorCWNhdCA+ZXhwZWN0IDw8RU9GICYmCitwcm9qZWN0L3RydW5rOnJlZnMvcmVtb3Rlcy8ke3ByZWZpeH10cnVuaworcHJvamVjdC9icmFuY2hlcy8qOnJlZnMvcmVtb3Rlcy8ke3ByZWZpeH0qCitwcm9qZWN0L3RhZ3MvKjpyZWZzL3JlbW90ZXMvJHtwcmVmaXh9dGFncy8qCitFT0YKKwl0ZXN0ICEgLWYgYWN0dWFsICYmCisJZ2l0IC0tZ2l0LWRpcj1wcm9qZWN0Ly5naXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmZldGNoID4+YWN0dWFsICYmCisJZ2l0IC0tZ2l0LWRpcj1wcm9qZWN0Ly5naXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzID4+YWN0dWFsICYmCisJZ2l0IC0tZ2l0LWRpcj1wcm9qZWN0Ly5naXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLnRhZ3MgPj5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsICYmCisJcm0gLWYgZXhwZWN0IGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IHdpdGggLXMvLVQvLWIvLXQgYXNzdW1lcyAtLXByZWZpeD1vcmlnaW4vJyAnCisJdGVzdCAhIC1kIHByb2plY3QgJiYKKwlnaXQgc3ZuIGluaXQgLXMgIiRzdm5yZXBvIi9wcm9qZWN0IHByb2plY3QgMj53YXJuaW5nICYmCisJdGVzdF9tdXN0X2ZhaWwgZ3JlcCAtcSBwcmVmaXggd2FybmluZyAmJgorCXRlc3Rfc3ZuX2NvbmZpZ3VyZWRfcHJlZml4ICJvcmlnaW4vIiAmJgorCXJtIC1yZiBwcm9qZWN0ICYmCisJcm0gLWYgd2FybmluZworCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgd2l0aCAtcy8tVC8tYi8tdCBhc3N1bWVzIC0tcHJlZml4PW9yaWdpbi8nICcKKwl0ZXN0ICEgLWQgcHJvamVjdCAmJgorCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIi9wcm9qZWN0IDI+d2FybmluZyAmJgorCXRlc3RfbXVzdF9mYWlsIGdyZXAgLXEgcHJlZml4IHdhcm5pbmcgJiYKKwl0ZXN0X3N2bl9jb25maWd1cmVkX3ByZWZpeCAib3JpZ2luLyIgJiYKKwlybSAtcmYgcHJvamVjdCAmJgorCXJtIC1mIHdhcm5pbmcKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgd2l0aCAtcy8tVC8tYi8tdCBhbmQgLS1wcmVmaXggIiIgc3RpbGwgd29ya3MnICcKKwl0ZXN0ICEgLWQgcHJvamVjdCAmJgorCWdpdCBzdm4gaW5pdCAtcyAiJHN2bnJlcG8iL3Byb2plY3QgcHJvamVjdCAtLXByZWZpeCAiIiAyPndhcm5pbmcgJiYKKwl0ZXN0X211c3RfZmFpbCBncmVwIC1xIHByZWZpeCB3YXJuaW5nICYmCisJdGVzdF9zdm5fY29uZmlndXJlZF9wcmVmaXggIiIgJiYKKwlybSAtcmYgcHJvamVjdCAmJgorCXJtIC1mIHdhcm5pbmcKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggLXMvLVQvLWIvLXQgYW5kIC0tcHJlZml4ICIiIHN0aWxsIHdvcmtzJyAnCisJdGVzdCAhIC1kIHByb2plY3QgJiYKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIvcHJvamVjdCAtLXByZWZpeCAiIiAyPndhcm5pbmcgJiYKKwl0ZXN0X211c3RfZmFpbCBncmVwIC1xIHByZWZpeCB3YXJuaW5nICYmCisJdGVzdF9zdm5fY29uZmlndXJlZF9wcmVmaXggIiIgJiYKKwlybSAtcmYgcHJvamVjdCAmJgorCXJtIC1mIHdhcm5pbmcKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExOC1naXQtc3ZuLWZ1bmt5LWJyYW5jaC1uYW1lcy5zaCBiL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWQ0ZDEzNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMTgtZ2l0LXN2bi1mdW5reS1icmFuY2gtbmFtZXMuc2gKQEAgLTAsMCArMSw4NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBFcmljIFdvbmcKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBmdW5reSBicmFuY2ggbmFtZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKworIyBBYm8tVWViZXJuYWhtZSAoQnVnICM5OTQpCitzY2FyeV91cmk9J0Fiby1VZWJlcm5haG1lJTIwJTI4QnVnJTIwJTIzOTk0JTI5Jworc2NhcnlfcmVmPSdBYm8tVWViZXJuYWhtZSUyMChCdWclMjAjOTk0KScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCW1rZGlyIHByb2plY3QgcHJvamVjdC90cnVuayBwcm9qZWN0L2JyYW5jaGVzIHByb2plY3QvdGFncyAmJgorCWVjaG8gZm9vID4gcHJvamVjdC90cnVuay9mb28gJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvL3ByIGplY3QiICYmCisJcm0gLXJmIHByb2plY3QgJiYKKwlzdm5fY21kIGNwIC1tICJmdW4iICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBcCisJICAgICAgICAgICAgICAgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2Z1biBwbHVnaW4iICYmCisJc3ZuX2NtZCBjcCAtbSAibW9yZSBmdW4hIiAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9mdW4gcGx1Z2luIiBcCisJICAgICAgICAgICAgICAgICAgICAgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL21vcmUgZnVuIHBsdWdpbiEiICYmCisJc3ZuX2NtZCBjcCAtbSAic2NhcnkiICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2Z1biBwbHVnaW4iIFwKKwkgICAgICAgICAgICAgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzLyRzY2FyeV91cmkiICYmCisJc3ZuX2NtZCBjcCAtbSAibGVhZGluZyBkb3QiICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBcCisJCQkiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy8ubGVhZGluZ19kb3QiICYmCisJc3ZuX2NtZCBjcCAtbSAidHJhaWxpbmcgZG90IiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCQkJIiRzdm5yZXBvL3ByIGplY3QvYnJhbmNoZXMvdHJhaWxpbmdfZG90LiIgJiYKKwlzdm5fY21kIGNwIC1tICJ0cmFpbGluZyAubG9jayIgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIFwKKwkJCSIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL3RyYWlsaW5nX2RvdGxvY2subG9jayIgJiYKKwlzdm5fY21kIGNwIC1tICJyZWZsb2ciICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBcCisJCQkiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcy9ub3QtYUB7MH1yZWZsb2dAIiAmJgorCXN0YXJ0X2h0dHBkCisJJworCisjIFNWTiAxLjcgd2lsbCB0cnVuY2F0ZSAibm90LWElNDB7MF0iIHRvIGp1c3QgIm5vdC1hIi4KKyMgTG9vayBhdCB3aGF0IFNWTiB3b3VuZCB1cCBuYW1pbmcgdGhlIGJyYW5jaCBhbmQgdXNlIHRoYXQuCisjIEJlIHN1cmUgdG8gZXNjYXBlIHRoZSBAIGlmIGl0IHNob3dzIHVwLgorbm9uX3JlZmxvZz1gc3ZuX2NtZCBscyAiJHN2bnJlcG8vcHIgamVjdC9icmFuY2hlcyIgfCBncmVwIG5vdC1hIHwgc2VkICdzL1wvLy8nIHwgc2VkICdzL0AvJTQwLydgCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2xvbmUgd2l0aCBmdW5reSBicmFuY2ggbmFtZXMnICcKKwlnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwby9wciBqZWN0IiBwcm9qZWN0ICYmCisJKAorCQljZCBwcm9qZWN0ICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy9vcmlnaW4vZnVuJTIwcGx1Z2luIiAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvb3JpZ2luL21vcmUlMjBmdW4lMjBwbHVnaW4hIiAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvb3JpZ2luLyRzY2FyeV9yZWYiICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy9vcmlnaW4vJTJFbGVhZGluZ19kb3QiICYmCisJCWdpdCByZXYtcGFyc2UgInJlZnMvcmVtb3Rlcy9vcmlnaW4vdHJhaWxpbmdfZG90JTJFIiAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvb3JpZ2luL3RyYWlsaW5nX2RvdGxvY2slMkVsb2NrIiAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvb3JpZ2luLyRub25fcmVmbG9nIgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgZGNvbW1pdCB0byBmdW5reSBicmFuY2gnICIKKwkoCisJCWNkIHByb2plY3QgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCAncmVmcy9yZW1vdGVzL29yaWdpbi9tb3JlJTIwZnVuJTIwcGx1Z2luIScgJiYKKwkJZWNobyBoZWxsbyA+PiBmb28gJiYKKwkJZ2l0IGNvbW1pdCAtbSAnaGVsbG8nIC0tIGZvbyAmJgorCQlnaXQgc3ZuIGRjb21taXQKKwkpCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGRjb21taXQgdG8gc2NhcnkgYnJhbmNoJyAnCisJKAorCQljZCBwcm9qZWN0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgInJlZnMvcmVtb3Rlcy9vcmlnaW4vJHNjYXJ5X3JlZiIgJiYKKwkJZWNobyB1cmxzIGFyZSBzY2FyeSA+PiBmb28gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZWVwIiAtLSBmb28gJiYKKwkJZ2l0IHN2biBkY29tbWl0CisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkY29tbWl0IHRvIHRyYWlsaW5nX2RvdGxvY2sgYnJhbmNoJyAnCisJKAorCQljZCBwcm9qZWN0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgInJlZnMvcmVtb3Rlcy9vcmlnaW4vdHJhaWxpbmdfZG90bG9jayUyRWxvY2siICYmCisJCWVjaG8gd2hvIG5hbWVzIGJyYW5jaGVzIGxpa2UgdGhpcyBhbnl3YXk/ID4+IGZvbyAmJgorCQlnaXQgY29tbWl0IC1tICJiYXIiIC0tIGZvbyAmJgorCQlnaXQgc3ZuIGRjb21taXQKKwkpCisJJworCitzdG9wX2h0dHBkCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTExOS1naXQtc3ZuLWluZm8uc2ggYi90L3Q5MTE5LWdpdC1zdm4taW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMTZmMzIzCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTExOS1naXQtc3ZuLWluZm8uc2gKQEAgLTAsMCArMSwzOTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRGF2aWQgRC4gS2lsemVyCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gaW5mbycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKKyMgVGVzdGVkIHdpdGg6IHN2biwgdmVyc2lvbiAxLjQuNCAocjI1MTg4KQorIyBUZXN0ZWQgd2l0aDogc3ZuLCB2ZXJzaW9uIDEuNi5bMTIzNDU2ODldCit2PWBzdm5fY21kIC0tdmVyc2lvbiB8IHNlZCAtbiAtZSAncy9ec3ZuLCB2ZXJzaW9uIFwoMVwuWzAtOV0qXC5bMC05XSpcKS4qJC9cMS9wJ2AKK2Nhc2UgJHYgaW4KKzEuWzQ1Nl0uKikKKwk7OworKikKKwlza2lwX2FsbD0ic2tpcHBpbmcgc3ZuLWluZm8gdGVzdCAoU1ZOIHZlcnNpb246ICR2IG5vdCBzdXBwb3J0ZWQpIgorCXRlc3RfZG9uZQorCTs7Citlc2FjCisKKyMgT24gdGhlICJUZXh0IExhc3QgVXBkYXRlZCIgbGluZSwgImdpdCBzdm4gaW5mbyIgZG9lcyBub3QgcmV0dXJuIHRoZQorIyBzYW1lIHZhbHVlIGFzICJzdm4gaW5mbyIgKGkuZS4gdGhlIGNvbW1pdCB0aW1lc3RhbXAgdGhhdCB0b3VjaGVkIHRoZQorIyBwYXRoIG1vc3QgcmVjZW50bHkpOyBkbyBub3QgZXhwZWN0IHRoYXQgZmllbGQgdG8gbWF0Y2guCit0ZXN0X2NtcF9pbmZvICgpIHsKKwlzZWQgLWUgJy9eVGV4dCBMYXN0IFVwZGF0ZWQ6L2QnICIkMSIgPnRtcC5leHBlY3QKKwlzZWQgLWUgJy9eVGV4dCBMYXN0IFVwZGF0ZWQ6L2QnICIkMiIgPnRtcC5hY3R1YWwKKwl0ZXN0X2NtcCB0bXAuZXhwZWN0IHRtcC5hY3R1YWwgJiYKKwlybSAtZiB0bXAuZXhwZWN0IHRtcC5hY3R1YWwKK30KKworcXVvdGVkX3N2bnJlcG89IiQoZWNobyAkc3ZucmVwbyB8IHNlZCAncy8gLyUyMC8nKSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgcmVwb3NpdG9yeSBhbmQgaW1wb3J0JyAnCisJbWtkaXIgaW5mbyAmJgorCSgKKwkJY2QgaW5mbyAmJgorCQllY2hvIEZJUlNUID5BICYmCisJCWVjaG8gb25lID5maWxlICYmCisJCWxuIC1zIGZpbGUgc3ltbGluay1maWxlICYmCisJCW1rZGlyIGRpcmVjdG9yeSAmJgorCQl0b3VjaCBkaXJlY3RvcnkvLnBsYWNlaG9sZGVyICYmCisJCWxuIC1zIGRpcmVjdG9yeSBzeW1saW5rLWRpcmVjdG9yeSAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW5pdGlhbCIgLiAiJHN2bnJlcG8iCisJKSAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzdm53YyAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJZWNobyBmb28gPmZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImNoYW5nZSBvdXRzaWRlIGRpcmVjdG9yeSIgJiYKKwkJc3ZuX2NtZCB1cGRhdGUKKwkpICYmCisJbWtkaXIgZ2l0d2MgJiYKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJCWdpdCBzdm4gZmV0Y2gKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvJyAiCisJKGNkIHN2bndjOyBzdm4gaW5mbykgPiBleHBlY3RlZC5pbmZvICYmCisJKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8pID4gYWN0dWFsLmluZm8gJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8gYWN0dWFsLmluZm8KKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwnICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwpIiA9ICIkcXVvdGVkX3N2bnJlcG8iCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC4nICIKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIC4pID4gZXhwZWN0ZWQuaW5mby1kb3QgJiYKKwkoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyAuKSA+IGFjdHVhbC5pbmZvLWRvdCAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1kb3QgYWN0dWFsLmluZm8tZG90CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvICQocHdkKScgJworCShjZCBzdm53Yzsgc3ZuIGluZm8gIiQocHdkKSIpID5leHBlY3RlZC5pbmZvLXB3ZCAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvICIkKHB3ZCkiKSA+YWN0dWFsLmluZm8tcHdkICYmCisJZ3JlcCAtdiBeUGF0aDogPGV4cGVjdGVkLmluZm8tcHdkID5leHBlY3RlZC5pbmZvLW5wICYmCisJZ3JlcCAtdiBeUGF0aDogPGFjdHVhbC5pbmZvLXB3ZCA+YWN0dWFsLmluZm8tbnAgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tbnAgYWN0dWFsLmluZm8tbnAgJiYKKwl0ZXN0ICIkKHNlZCAtbmUgXCIvXlBhdGg6LyBzIS9zdm53YyEhXCIgPGV4cGVjdGVkLmluZm8tcHdkKSIgPSBcCisJICAgICAiJChzZWQgLW5lIFwiL15QYXRoOi8gcyEvZ2l0d2MhIVwiIDxhY3R1YWwuaW5mby1wd2QpIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAkKHB3ZCkvLi4vX19fd2MnICcKKwkoY2Qgc3Zud2M7IHN2biBpbmZvICIkKHB3ZCkvLi4vc3Zud2MiKSA+ZXhwZWN0ZWQuaW5mby1wd2QgJiYKKwkoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyAiJChwd2QpLy4uL2dpdHdjIikgPmFjdHVhbC5pbmZvLXB3ZCAmJgorCWdyZXAgLXYgXlBhdGg6IDxleHBlY3RlZC5pbmZvLXB3ZCA+ZXhwZWN0ZWQuaW5mby1ucCAmJgorCWdyZXAgLXYgXlBhdGg6IDxhY3R1YWwuaW5mby1wd2QgPmFjdHVhbC5pbmZvLW5wICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLW5wIGFjdHVhbC5pbmZvLW5wICYmCisJdGVzdCAiJChzZWQgLW5lIFwiL15QYXRoOi8gcyEvc3Zud2MhIVwiIDxleHBlY3RlZC5pbmZvLXB3ZCkiID0gXAorCSAgICAgIiQoc2VkIC1uZSBcIi9eUGF0aDovIHMhL2dpdHdjISFcIiA8YWN0dWFsLmluZm8tcHdkKSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gJChwd2QpLy4uL19fX3djLy9maWxlJyAnCisJKGNkIHN2bndjOyBzdm4gaW5mbyAiJChwd2QpLy4uL3N2bndjLy9maWxlIikgPmV4cGVjdGVkLmluZm8tcHdkICYmCisJKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gIiQocHdkKS8uLi9naXR3Yy8vZmlsZSIpID5hY3R1YWwuaW5mby1wd2QgJiYKKwlncmVwIC12IF5QYXRoOiA8ZXhwZWN0ZWQuaW5mby1wd2QgPmV4cGVjdGVkLmluZm8tbnAgJiYKKwlncmVwIC12IF5QYXRoOiA8YWN0dWFsLmluZm8tcHdkID5hY3R1YWwuaW5mby1ucCAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1ucCBhY3R1YWwuaW5mby1ucCAmJgorCXRlc3QgIiQoc2VkIC1uZSBcIi9eUGF0aDovIHMhL3N2bndjISFcIiA8ZXhwZWN0ZWQuaW5mby1wd2QpIiA9IFwKKwkgICAgICIkKHNlZCAtbmUgXCIvXlBhdGg6LyBzIS9naXR3YyEhXCIgPGFjdHVhbC5pbmZvLXB3ZCkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIC4nICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgLikiID0gIiRxdW90ZWRfc3ZucmVwbyIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZmlsZScgIgorCShjZCBzdm53Yzsgc3ZuIGluZm8gZmlsZSkgPiBleHBlY3RlZC5pbmZvLWZpbGUgJiYKKwkoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyBmaWxlKSA+IGFjdHVhbC5pbmZvLWZpbGUgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tZmlsZSBhY3R1YWwuaW5mby1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGZpbGUnICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgZmlsZSkiID0gIiRxdW90ZWRfc3ZucmVwby9maWxlIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBkaXJlY3RvcnknICIKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIGRpcmVjdG9yeSkgPiBleHBlY3RlZC5pbmZvLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIGRpcmVjdG9yeSkgPiBhY3R1YWwuaW5mby1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tZGlyZWN0b3J5IGFjdHVhbC5pbmZvLWRpcmVjdG9yeQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBpbnNpZGUgZGlyZWN0b3J5JyAiCisJKGNkIHN2bndjL2RpcmVjdG9yeTsgc3ZuIGluZm8pID4gZXhwZWN0ZWQuaW5mby1pbnNpZGUtZGlyZWN0b3J5ICYmCisJKGNkIGdpdHdjL2RpcmVjdG9yeTsgZ2l0IHN2biBpbmZvKSA+IGFjdHVhbC5pbmZvLWluc2lkZS1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8taW5zaWRlLWRpcmVjdG9yeSBhY3R1YWwuaW5mby1pbnNpZGUtZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGRpcmVjdG9yeScgJworCXRlc3QgIiQoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyAtLXVybCBkaXJlY3RvcnkpIiA9ICIkcXVvdGVkX3N2bnJlcG8vZGlyZWN0b3J5IgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyBzeW1saW5rLWZpbGUnICIKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIHN5bWxpbmstZmlsZSkgPiBleHBlY3RlZC5pbmZvLXN5bWxpbmstZmlsZSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIHN5bWxpbmstZmlsZSkgPiBhY3R1YWwuaW5mby1zeW1saW5rLWZpbGUgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tc3ltbGluay1maWxlIGFjdHVhbC5pbmZvLXN5bWxpbmstZmlsZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCBzeW1saW5rLWZpbGUnICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgc3ltbGluay1maWxlKSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL3N5bWxpbmstZmlsZSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gc3ltbGluay1kaXJlY3RvcnknICIKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIHN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gZXhwZWN0ZWQuaW5mby1zeW1saW5rLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIHN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gYWN0dWFsLmluZm8tc3ltbGluay1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tc3ltbGluay1kaXJlY3RvcnkgYWN0dWFsLmluZm8tc3ltbGluay1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgc3ltbGluay1kaXJlY3RvcnknICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgc3ltbGluay1kaXJlY3RvcnkpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vc3ltbGluay1kaXJlY3RvcnkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGFkZGVkLWZpbGUnICIKKwllY2hvIHR3byA+IGdpdHdjL2FkZGVkLWZpbGUgJiYKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBhZGQgYWRkZWQtZmlsZQorCSkgJiYKKwljcCBnaXR3Yy9hZGRlZC1maWxlIHN2bndjL2FkZGVkLWZpbGUgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCXN2bl9jbWQgYWRkIGFkZGVkLWZpbGUgPiAvZGV2L251bGwKKwkpICYmCisJKGNkIHN2bndjOyBzdm4gaW5mbyBhZGRlZC1maWxlKSA+IGV4cGVjdGVkLmluZm8tYWRkZWQtZmlsZSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIGFkZGVkLWZpbGUpID4gYWN0dWFsLmluZm8tYWRkZWQtZmlsZSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1hZGRlZC1maWxlIGFjdHVhbC5pbmZvLWFkZGVkLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgYWRkZWQtZmlsZScgJworCXRlc3QgIiQoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyAtLXVybCBhZGRlZC1maWxlKSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL2FkZGVkLWZpbGUiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGFkZGVkLWRpcmVjdG9yeScgIgorCW1rZGlyIGdpdHdjL2FkZGVkLWRpcmVjdG9yeSBzdm53Yy9hZGRlZC1kaXJlY3RvcnkgJiYKKwl0b3VjaCBnaXR3Yy9hZGRlZC1kaXJlY3RvcnkvLnBsYWNlaG9sZGVyICYmCisJKAorCQljZCBzdm53YyAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1kaXJlY3RvcnkgPiAvZGV2L251bGwKKwkpICYmCisJKAorCQljZCBnaXR3YyAmJgorCQlnaXQgYWRkIGFkZGVkLWRpcmVjdG9yeQorCSkgJiYKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIGFkZGVkLWRpcmVjdG9yeSkgXAorCQk+IGV4cGVjdGVkLmluZm8tYWRkZWQtZGlyZWN0b3J5ICYmCisJKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gYWRkZWQtZGlyZWN0b3J5KSBcCisJCT4gYWN0dWFsLmluZm8tYWRkZWQtZGlyZWN0b3J5ICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWFkZGVkLWRpcmVjdG9yeSBhY3R1YWwuaW5mby1hZGRlZC1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgYWRkZWQtZGlyZWN0b3J5JyAnCisJdGVzdCAiJChjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIC0tdXJsIGFkZGVkLWRpcmVjdG9yeSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9hZGRlZC1kaXJlY3RvcnkiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGFkZGVkLXN5bWxpbmstZmlsZScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJbG4gLXMgYWRkZWQtZmlsZSBhZGRlZC1zeW1saW5rLWZpbGUgJiYKKwkJZ2l0IGFkZCBhZGRlZC1zeW1saW5rLWZpbGUKKwkpICYmCisJKAorCQljZCBzdm53YyAmJgorCQlsbiAtcyBhZGRlZC1maWxlIGFkZGVkLXN5bWxpbmstZmlsZSAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1zeW1saW5rLWZpbGUgPiAvZGV2L251bGwKKwkpICYmCisJKGNkIHN2bndjOyBzdm4gaW5mbyBhZGRlZC1zeW1saW5rLWZpbGUpIFwKKwkJPiBleHBlY3RlZC5pbmZvLWFkZGVkLXN5bWxpbmstZmlsZSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZmlsZSkgXAorCQk+IGFjdHVhbC5pbmZvLWFkZGVkLXN5bWxpbmstZmlsZSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1hZGRlZC1zeW1saW5rLWZpbGUgXAorCQlhY3R1YWwuaW5mby1hZGRlZC1zeW1saW5rLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgYWRkZWQtc3ltbGluay1maWxlJyAnCisJdGVzdCAiJChjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIC0tdXJsIGFkZGVkLXN5bWxpbmstZmlsZSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9hZGRlZC1zeW1saW5rLWZpbGUiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5JyAiCisJKAorCQljZCBnaXR3YyAmJgorCQlsbiAtcyBhZGRlZC1kaXJlY3RvcnkgYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwkJZ2l0IGFkZCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeQorCSkgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCWxuIC1zIGFkZGVkLWRpcmVjdG9yeSBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSAmJgorCQlzdm5fY21kIGFkZCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoY2Qgc3Zud2M7IHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gZXhwZWN0ZWQuaW5mby1hZGRlZC1zeW1saW5rLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIGFkZGVkLXN5bWxpbmstZGlyZWN0b3J5KSBcCisJCT4gYWN0dWFsLmluZm8tYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tYWRkZWQtc3ltbGluay1kaXJlY3RvcnkgXAorCQlhY3R1YWwuaW5mby1hZGRlZC1zeW1saW5rLWRpcmVjdG9yeQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeScgJworCXRlc3QgIiQoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyAtLXVybCBhZGRlZC1zeW1saW5rLWRpcmVjdG9yeSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9hZGRlZC1zeW1saW5rLWRpcmVjdG9yeSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZGVsZXRlZC1maWxlJyAiCisJKAorCQljZCBnaXR3YyAmJgorCQlnaXQgcm0gLWYgZmlsZSA+IC9kZXYvbnVsbAorCSkgJiYKKwkoCisJCWNkIHN2bndjICYmCisJCXN2bl9jbWQgcm0gLS1mb3JjZSBmaWxlID4gL2Rldi9udWxsCisJKSAmJgorCShjZCBzdm53Yzsgc3ZuIGluZm8gZmlsZSkgPmV4cGVjdGVkLmluZm8tZGVsZXRlZC1maWxlICYmCisJKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gZmlsZSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtZmlsZSAmJgorCXRlc3RfY21wX2luZm8gZXhwZWN0ZWQuaW5mby1kZWxldGVkLWZpbGUgYWN0dWFsLmluZm8tZGVsZXRlZC1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGZpbGUgKGRlbGV0ZWQpJyAnCisJdGVzdCAiJChjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIC0tdXJsIGZpbGUpIiBcCisJICAgICA9ICIkcXVvdGVkX3N2bnJlcG8vZmlsZSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZGVsZXRlZC1kaXJlY3RvcnknICIKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBybSAtciAtZiBkaXJlY3RvcnkgPiAvZGV2L251bGwKKwkpICYmCisJKAorCQljZCBzdm53YyAmJgorCQlzdm5fY21kIHJtIC0tZm9yY2UgZGlyZWN0b3J5ID4gL2Rldi9udWxsCisJKSAmJgorCShjZCBzdm53Yzsgc3ZuIGluZm8gZGlyZWN0b3J5KSA+ZXhwZWN0ZWQuaW5mby1kZWxldGVkLWRpcmVjdG9yeSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIGRpcmVjdG9yeSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtZGlyZWN0b3J5ICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWRlbGV0ZWQtZGlyZWN0b3J5IGFjdHVhbC5pbmZvLWRlbGV0ZWQtZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIGRpcmVjdG9yeSAoZGVsZXRlZCknICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgZGlyZWN0b3J5KSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL2RpcmVjdG9yeSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZGVsZXRlZC1zeW1saW5rLWZpbGUnICIKKwkoCisJCWNkIGdpdHdjICYmCisJCWdpdCBybSAtZiBzeW1saW5rLWZpbGUgPiAvZGV2L251bGwKKwkpICYmCisJKAorCQljZCBzdm53YyAmJgorCQlzdm5fY21kIHJtIC0tZm9yY2Ugc3ltbGluay1maWxlID4gL2Rldi9udWxsCisJKSAmJgorCShjZCBzdm53Yzsgc3ZuIGluZm8gc3ltbGluay1maWxlKSA+ZXhwZWN0ZWQuaW5mby1kZWxldGVkLXN5bWxpbmstZmlsZSAmJgorCShjZCBnaXR3YzsgZ2l0IHN2biBpbmZvIHN5bWxpbmstZmlsZSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtc3ltbGluay1maWxlICYmCisJdGVzdF9jbXBfaW5mbyBleHBlY3RlZC5pbmZvLWRlbGV0ZWQtc3ltbGluay1maWxlIGFjdHVhbC5pbmZvLWRlbGV0ZWQtc3ltbGluay1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHN5bWxpbmstZmlsZSAoZGVsZXRlZCknICcKKwl0ZXN0ICIkKGNkIGdpdHdjOyBnaXQgc3ZuIGluZm8gLS11cmwgc3ltbGluay1maWxlKSIgXAorCSAgICAgPSAiJHF1b3RlZF9zdm5yZXBvL3N5bWxpbmstZmlsZSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gZGVsZXRlZC1zeW1saW5rLWRpcmVjdG9yeScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJZ2l0IHJtIC1mIHN5bWxpbmstZGlyZWN0b3J5ID4gL2Rldi9udWxsCisJKSAmJgorCSgKKwkJY2Qgc3Zud2MgJiYKKwkJc3ZuX2NtZCBybSAtLWZvcmNlIHN5bWxpbmstZGlyZWN0b3J5ID4gL2Rldi9udWxsCisJKSAmJgorCShjZCBzdm53Yzsgc3ZuIGluZm8gc3ltbGluay1kaXJlY3RvcnkpID5leHBlY3RlZC5pbmZvLWRlbGV0ZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwkoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyBzeW1saW5rLWRpcmVjdG9yeSkgPmFjdHVhbC5pbmZvLWRlbGV0ZWQtc3ltbGluay1kaXJlY3RvcnkgJiYKKwl0ZXN0X2NtcF9pbmZvIGV4cGVjdGVkLmluZm8tZGVsZXRlZC1zeW1saW5rLWRpcmVjdG9yeSBhY3R1YWwuaW5mby1kZWxldGVkLXN5bWxpbmstZGlyZWN0b3J5CisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHN5bWxpbmstZGlyZWN0b3J5IChkZWxldGVkKScgJworCXRlc3QgIiQoY2QgZ2l0d2M7IGdpdCBzdm4gaW5mbyAtLXVybCBzeW1saW5rLWRpcmVjdG9yeSkiIFwKKwkgICAgID0gIiRxdW90ZWRfc3ZucmVwby9zeW1saW5rLWRpcmVjdG9yeSIKKwknCisKKyMgTk9URTogZ2l0IGRvZXMgbm90IGhhdmUgdGhlIGNvbmNlcHQgb2YgcmVwbGFjZWQgb2JqZWN0cywKKyMgc28gd2UgY2FuJ3QgdGVzdCBmb3IgZmlsZXMgaW4gdGhhdCBzdGF0ZS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyB1bmtub3duLWZpbGUnICIKKwllY2hvIHR3byA+IGdpdHdjL3Vua25vd24tZmlsZSAmJgorCShjZCBnaXR3YzsgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIHVua25vd24tZmlsZSkgXAorCQkgMj4gYWN0dWFsLmluZm8tdW5rbm93bi1maWxlICYmCisJZ3JlcCB1bmtub3duLWZpbGUgYWN0dWFsLmluZm8tdW5rbm93bi1maWxlCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbmZvIC0tdXJsIHVua25vd24tZmlsZScgJworCWVjaG8gdHdvID4gZ2l0d2MvdW5rbm93bi1maWxlICYmCisJKGNkIGdpdHdjOyB0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGluZm8gLS11cmwgdW5rbm93bi1maWxlKSBcCisJCSAyPiBhY3R1YWwuaW5mby11cmwtdW5rbm93bi1maWxlICYmCisJZ3JlcCB1bmtub3duLWZpbGUgYWN0dWFsLmluZm8tdXJsLXVua25vd24tZmlsZQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyB1bmtub3duLWRpcmVjdG9yeScgIgorCW1rZGlyIGdpdHdjL3Vua25vd24tZGlyZWN0b3J5IHN2bndjL3Vua25vd24tZGlyZWN0b3J5ICYmCisJKGNkIGdpdHdjOyB0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGluZm8gdW5rbm93bi1kaXJlY3RvcnkpIFwKKwkJIDI+IGFjdHVhbC5pbmZvLXVua25vd24tZGlyZWN0b3J5ICYmCisJZ3JlcCB1bmtub3duLWRpcmVjdG9yeSBhY3R1YWwuaW5mby11bmtub3duLWRpcmVjdG9yeQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyAtLXVybCB1bmtub3duLWRpcmVjdG9yeScgJworCShjZCBnaXR3YzsgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIC0tdXJsIHVua25vd24tZGlyZWN0b3J5KSBcCisJCSAyPiBhY3R1YWwuaW5mby11cmwtdW5rbm93bi1kaXJlY3RvcnkgJiYKKwlncmVwIHVua25vd24tZGlyZWN0b3J5IGFjdHVhbC5pbmZvLXVybC11bmtub3duLWRpcmVjdG9yeQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5mbyB1bmtub3duLXN5bWxpbmstZmlsZScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJbG4gLXMgdW5rbm93bi1maWxlIHVua25vd24tc3ltbGluay1maWxlCisJKSAmJgorCShjZCBnaXR3YzsgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIHVua25vd24tc3ltbGluay1maWxlKSBcCisJCSAyPiBhY3R1YWwuaW5mby11bmtub3duLXN5bWxpbmstZmlsZSAmJgorCWdyZXAgdW5rbm93bi1zeW1saW5rLWZpbGUgYWN0dWFsLmluZm8tdW5rbm93bi1zeW1saW5rLWZpbGUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgdW5rbm93bi1zeW1saW5rLWZpbGUnICcKKwkoY2QgZ2l0d2M7IHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gaW5mbyAtLXVybCB1bmtub3duLXN5bWxpbmstZmlsZSkgXAorCQkgMj4gYWN0dWFsLmluZm8tdXJsLXVua25vd24tc3ltbGluay1maWxlICYmCisJZ3JlcCB1bmtub3duLXN5bWxpbmstZmlsZSBhY3R1YWwuaW5mby11cmwtdW5rbm93bi1zeW1saW5rLWZpbGUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gdW5rbm93bi1zeW1saW5rLWRpcmVjdG9yeScgIgorCSgKKwkJY2QgZ2l0d2MgJiYKKwkJbG4gLXMgdW5rbm93bi1kaXJlY3RvcnkgdW5rbm93bi1zeW1saW5rLWRpcmVjdG9yeQorCSkgJiYKKwkoY2QgZ2l0d2M7IHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gaW5mbyB1bmtub3duLXN5bWxpbmstZGlyZWN0b3J5KSBcCisJCSAyPiBhY3R1YWwuaW5mby11bmtub3duLXN5bWxpbmstZGlyZWN0b3J5ICYmCisJZ3JlcCB1bmtub3duLXN5bWxpbmstZGlyZWN0b3J5IGFjdHVhbC5pbmZvLXVua25vd24tc3ltbGluay1kaXJlY3RvcnkKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luZm8gLS11cmwgdW5rbm93bi1zeW1saW5rLWRpcmVjdG9yeScgJworCShjZCBnaXR3YzsgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBpbmZvIC0tdXJsIHVua25vd24tc3ltbGluay1kaXJlY3RvcnkpIFwKKwkJIDI+IGFjdHVhbC5pbmZvLXVybC11bmtub3duLXN5bWxpbmstZGlyZWN0b3J5ICYmCisJZ3JlcCB1bmtub3duLXN5bWxpbmstZGlyZWN0b3J5IGFjdHVhbC5pbmZvLXVybC11bmtub3duLXN5bWxpbmstZGlyZWN0b3J5CisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaCBiL3QvdDkxMjAtZ2l0LXN2bi1jbG9uZS13aXRoLXBlcmNlbnQtZXNjYXBlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYzg0Y2UxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyMC1naXQtc3ZuLWNsb25lLXdpdGgtcGVyY2VudC1lc2NhcGVzLnNoCkBAIC0wLDAgKzEsNzkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDggS2V2aW4gQmFsbGFyZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGNsb25lIHdpdGggcGVyY2VudCBlc2NhcGVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBwcm9qZWN0L3RhZ3MgJiYKKwllY2hvIGZvbyA+IHByb2plY3QvdHJ1bmsvZm9vICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wciBqZWN0IiAmJgorCXN2bl9jbWQgY3AgLW0gImJyYW5jaCIgIiRzdm5yZXBvL3ByIGplY3QvdHJ1bmsiIFwKKwkgICIkc3ZucmVwby9wciBqZWN0L2JyYW5jaGVzL2IiICYmCisJc3ZuX2NtZCBjcCAtbSAidGFnIiAiJHN2bnJlcG8vcHIgamVjdC90cnVuayIgXAorCSAgIiRzdm5yZXBvL3ByIGplY3QvdGFncy92MSIgJiYKKwlybSAtcmYgcHJvamVjdCAmJgorCXN0YXJ0X2h0dHBkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2xvbmUgd2l0aCBwZXJjZW50IGVzY2FwZXMnICcKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwby9wciUyMGplY3QiIGNsb25lICYmCisJKAorCQljZCBjbG9uZSAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvJHtyZW1vdGVzX2dpdF9zdm59CisJKQorJworCisjIFNWTiB3b3JrcyBlaXRoZXIgd2F5LCBzbyBzaG91bGQgd2UuLi4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ZuIGNoZWNrb3V0IHdpdGggcGVyY2VudCBlc2NhcGVzJyAnCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8vcHIlMjBqZWN0IiBzdm4ucGVyY2VudCAmJgorCXN2bl9jbWQgY2hlY2tvdXQgIiRzdm5yZXBvL3ByJTIwamVjdC90cnVuayIgc3ZuLnBlcmNlbnQudHJ1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ZuIGNoZWNrb3V0IHdpdGggc3BhY2UnICcKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwby9wciBqZWN0IiBzdm4uc3BhY2UgJiYKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwby9wciBqZWN0L3RydW5rIiBzdm4uc3BhY2UudHJ1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB0cnVuayB3aXRoIHBlcmNlbnQgZXNjYXBlcyBhbmQgbWluaW1pemUtdXJsJyAnCisJZ2l0IHN2biBjbG9uZSAtLW1pbmltaXplLXVybCAiJHN2bnJlcG8vcHIlMjBqZWN0L3RydW5rIiBtaW5pbWl6ZSAmJgorCSgKKwkJY2QgbWluaW1pemUgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzLyR7cmVtb3Rlc19naXRfc3ZufQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjbG9uZSB0cnVuayB3aXRoIHBlcmNlbnQgZXNjYXBlcycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvL3ByJTIwamVjdC90cnVuayIgdHJ1bmsgJiYKKwkoCisJCWNkIHRydW5rICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy8ke3JlbW90ZXNfZ2l0X3N2bn0KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgY2xvbmUgLS1zdGRsYXlvdXQgd2l0aCBwZXJjZW50IGVzY2FwZXMnICcKKwlnaXQgc3ZuIGNsb25lIC0tc3RkbGF5b3V0ICIkc3ZucmVwby9wciUyMGplY3QiIHBlcmNlbnQgJiYKKwkoCisJCWNkIHBlcmNlbnQgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rXjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL2JeMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy92MV4wCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIC1zIHdpdGggdW5lc2NhcGVkIHNwYWNlJyAnCisJZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8vcHIgamVjdCIgLS1wcmVmaXggb3JpZ2luLyBzcGFjZSAmJgorCSgKKwkJY2Qgc3BhY2UgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RydW5rXjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL2JeMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy92MV4wCisJKQorJworCitzdG9wX2h0dHBkCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyMS1naXQtc3ZuLWZldGNoLXJlbmFtZWQtZGlyLnNoIGIvdC90OTEyMS1naXQtc3ZuLWZldGNoLXJlbmFtZWQtZGlyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwMGNhZDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTIxLWdpdC1zdm4tZmV0Y2gtcmVuYW1lZC1kaXIuc2gKQEAgLTAsMCArMSwyMCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBTYW50aG9zaCBLdW1hciBNYW5pCisKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBjYW4gZmV0Y2ggcmVuYW1lZCBkaXJlY3RvcmllcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgcmVwb3NpdG9yeSB3aXRoIHJlbmFtZWQgZGlyZWN0b3J5JyAnCisJc3ZuYWRtaW4gbG9hZCAtcSAiJHJhd3N2bnJlcG8iIDwgIiRURVNUX0RJUkVDVE9SWSIvdDkxMjEvcmVuYW1lZC1kaXIuZHVtcAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBhbmQgZmV0Y2ggcmVwb3NpdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8vbmV3bmFtZSIgJiYKKwlnaXQgc3ZuIGZldGNoCisJJworCit0ZXN0X2RvbmUKKwpkaWZmIC0tZ2l0IGEvdC90OTEyMS9yZW5hbWVkLWRpci5kdW1wIGIvdC90OTEyMS9yZW5hbWVkLWRpci5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOTEyN2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTIxL3JlbmFtZWQtZGlyLmR1bXAKQEAgLTAsMCArMSw5MCBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogMDZiOWIzYWQtZjU0Ni00ZmJlLTgzMjgtZmNiNGU2ZWY1YzNmCisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA0LTAyVDA5OjExOjU5Ljc3ODU1N1oKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNworQ29udGVudC1sZW5ndGg6IDExNworCitLIDcKK3N2bjpsb2cKK1YgMTQKK2luaXRpYWwgaW1wb3J0CitLIDEwCitzdm46YXV0aG9yCitWIDgKK3NhbnRob3NoCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA0LTAyVDA5OjEzOjAzLjE3MDg2M1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IG5hbWUKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogbmFtZS9hLnR4dAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA3MQorVGV4dC1jb250ZW50LWxlbmd0aDogNgorVGV4dC1jb250ZW50LW1kNTogYjE5NDZhYzkyNDkyZDIzNDdjNjIzNWI0ZDI2MTExODQKK0NvbnRlbnQtbGVuZ3RoOiA3NworCitLIDEzCitzdm46bWltZS10eXBlCitWIDEwCit0ZXh0L3BsYWluCitLIDEzCitzdm46ZW9sLXN0eWxlCitWIDIKK0xGCitQUk9QUy1FTkQKK2hlbGxvCisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDkKK0NvbnRlbnQtbGVuZ3RoOiAxMDkKKworSyA3Citzdm46bG9nCitWIDcKK3JlbmFtZWQKK0sgMTAKK3N2bjphdXRob3IKK1YgOAorc2FudGhvc2gKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDQtMDJUMDk6MTQ6MjIuOTUyMTg2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogbmV3bmFtZQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IG5hbWUKKworCitOb2RlLXBhdGg6IG5hbWUKK05vZGUtYWN0aW9uOiBkZWxldGUKKworCmRpZmYgLS1naXQgYS90L3Q5MTIyLWdpdC1zdm4tYXV0aG9yLnNoIGIvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMDAxM2I3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyMi1naXQtc3ZuLWF1dGhvci5zaApAQCAtMCwwICsxLDg0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBhdXRob3JzaGlwJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2biByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBjaGVja291dCAiJHN2bnJlcG8iIHdvcmsuc3ZuICYmCisJKAorCQljZCB3b3JrLnN2biAmJgorCQllY2hvID5maWxlCisJCXN2bl9jbWQgYWRkIGZpbGUKKwkJc3ZuX2NtZCBjb21taXQgLW0gImZpcnN0IGNvbW1pdCIgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW50ZXJhY3Qgd2l0aCBpdCB2aWEgZ2l0IHN2bicgJworCW1rZGlyIHdvcmsuZ2l0ICYmCisJKAorCQljZCB3b3JrLmdpdCAmJgorCQlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIgorCQlnaXQgc3ZuIGZldGNoICYmCisKKwkJZWNobyBtb2RpZmljYXRpb24gPmZpbGUgJiYKKwkJdGVzdF90aWNrICYmCisJCWdpdCBjb21taXQgLWEgLW0gc2Vjb25kICYmCisKKwkJdGVzdF90aWNrICYmCisJCWdpdCBzdm4gZGNvbW1pdCAmJgorCisJCWVjaG8gImZ1cnRoZXIgbW9kaWZpY2F0aW9uIiA+ZmlsZSAmJgorCQl0ZXN0X3RpY2sgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSB0aGlyZCAmJgorCisJCXRlc3RfdGljayAmJgorCQlnaXQgc3ZuIC0tYWRkLWF1dGhvci1mcm9tIGRjb21taXQgJiYKKworCQllY2hvICJ5ZXQgZnVydGhlciBtb2RpZmljYXRpb24iID5maWxlICYmCisJCXRlc3RfdGljayAmJgorCQlnaXQgY29tbWl0IC1hIC1tIGZvdXJ0aCAmJgorCisJCXRlc3RfdGljayAmJgorCQlnaXQgc3ZuIC0tYWRkLWF1dGhvci1mcm9tIC0tdXNlLWxvZy1hdXRob3IgZGNvbW1pdCAmJgorCisJCWdpdCBsb2cgJiYKKworCQlnaXQgc2hvdyAtcyBIRUFEXl4gPi4uL2FjdHVhbC4yICYmCisJCWdpdCBzaG93IC1zIEhFQUReICA+Li4vYWN0dWFsLjMgJiYKKwkJZ2l0IHNob3cgLXMgSEVBRCAgID4uLi9hY3R1YWwuNAorCisJKSAmJgorCisJIyBNYWtlIHN1cmUgdGhhdCAtLWFkZC1hdXRob3ItZnJvbSB3aXRob3V0IC0tdXNlLWxvZy1hdXRob3IKKwkjIGRpZCBub3QgYWZmZWN0IHRoZSBhdXRob3JzaGlwIGluZm9ybWF0aW9uCisJbXlzZWxmPSQoZ3JlcCAiXkF1dGhvcjogIiBhY3R1YWwuMikgJiYKKwl1bmFmZmVjdGVkPSQoZ3JlcCAiXkF1dGhvcjogIiBhY3R1YWwuMykgJiYKKwl0ZXN0ICJ6JG15c2VsZiIgPSAieiR1bmFmZmVjdGVkIiAmJgorCisJIyBNYWtlIHN1cmUgbGFjayBvZiAtLWFkZC1hdXRob3ItZnJvbSBkaWQgbm90IGFkZCBjcnVmdAorCSEgZ3JlcCAiXiAgICBGcm9tOiBBIFUgVGhvciAiIGFjdHVhbC4yICYmCisKKwkjIE1ha2Ugc3VyZSAtLWFkZC1hdXRob3ItZnJvbSBhZGRlZCBjcnVmdAorCWdyZXAgIl4gICAgRnJvbTogQSBVIFRob3IgIiBhY3R1YWwuMyAmJgorCWdyZXAgIl4gICAgRnJvbTogQSBVIFRob3IgIiBhY3R1YWwuNCAmJgorCisJIyBNYWtlIHN1cmUgLS1hZGQtYXV0aG9yLWZyb20gd2l0aCAtLXVzZS1sb2ctYXV0aG9yIGFmZmVjdGVkCisJIyB0aGUgYXV0aG9yc2hpcCBpbmZvcm1hdGlvbgorCWdyZXAgIl5BdXRob3I6IEEgVSBUaG9yICIgYWN0dWFsLjQgJiYKKworCSMgTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBjb21taXQgbWVzc2FnZXMgd2l0aCBleGNlc3MgYmxhbmsgbGluZXMKKwl0ZXN0ICQoZ3JlcCAiXiAiIGFjdHVhbC4yIHwgd2MgLWwpID0gMyAmJgorCXRlc3QgJChncmVwICJeICIgYWN0dWFsLjMgfCB3YyAtbCkgPSA1ICYmCisJdGVzdCAkKGdyZXAgIl4gIiBhY3R1YWwuNCB8IHdjIC1sKSA9IDUgJiYKKworCSMgTWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzdm4gY29tbWl0IG1lc3NhZ2VzIHdpdGggZXhjZXNzIGJsYW5rIGxpbmVzCisJKAorCQljZCB3b3JrLnN2biAmJgorCQlzdm5fY21kIHVwICYmCisJCQorCQl0ZXN0ICQoc3ZuX2NtZCBsb2cgLXIyOjIgfCB3YyAtbCkgPSA1ICYmCisJCXRlc3QgJChzdm5fY21kIGxvZyAtcjQ6NCB8IHdjIC1sKSA9IDcKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyMy1naXQtc3ZuLXJlYnVpbGQtd2l0aC1yZXdyaXRlcm9vdC5zaCBiL3QvdDkxMjMtZ2l0LXN2bi1yZWJ1aWxkLXdpdGgtcmV3cml0ZXJvb3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQ4MTg0NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjMtZ2l0LXN2bi1yZWJ1aWxkLXdpdGgtcmV3cml0ZXJvb3Quc2gKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBKYW4gS3LDvGdlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHJlc3BlY3RzIHJld3JpdGVSb290IGR1cmluZyByZWJ1aWxkJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworbWtkaXIgaW1wb3J0CisoY2QgaW1wb3J0CisJdG91Y2ggZm9vCisJc3ZuX2NtZCBpbXBvcnQgLW0gJ2ltcG9ydCBmb3IgZ2l0IHN2bicgLiAiJHN2bnJlcG8iID4vZGV2L251bGwKKykKK3JtIC1yZiBpbXBvcnQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCwgZmV0Y2ggYW5kIGNoZWNrb3V0IHJlcG9zaXRvcnknICcKKwlnaXQgc3ZuIGluaXQgLS1yZXdyaXRlLXJvb3Q9aHR0cDovL2ludmFsaWQuaW52YWxpZC8gIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgY2hlY2tvdXQgLWIgbXlicmFuY2ggJHtyZW1vdGVzX2dpdF9zdm59CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgcmV2X21hcCcgJworCXJtICIkR0lUX1NWTl9ESVIiLy5yZXZfbWFwLioKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlYnVpbGQgcmV2X21hcCcgJworCWdpdCBzdm4gcmViYXNlID4vZGV2L251bGwKKwknCisKK3Rlc3RfZG9uZQorCmRpZmYgLS1naXQgYS90L3Q5MTI0LWdpdC1zdm4tZGNvbW1pdC1hdXRvLXByb3BzLnNoIGIvdC90OTEyNC1naXQtc3ZuLWRjb21taXQtYXV0by1wcm9wcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYTg0MWUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyNC1naXQtc3ZuLWRjb21taXQtYXV0by1wcm9wcy5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBCcmFkIEtpbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBkY29tbWl0IGhvbm9ycyBhdXRvLXByb3BzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworZ2VuZXJhdGVfYXV0b19wcm9wcygpIHsKK2NhdCA8PCBFT0YKK1ttaXNjZWxsYW55XQorZW5hYmxlLWF1dG8tcHJvcHM9JDEKK1thdXRvLXByb3BzXQorKi5zaCAgPSBzdm46bWltZS10eXBlPWFwcGxpY2F0aW9uL3gtc2hlbGxzY3JpcHQ7IHN2bjplb2wtc3R5bGU9TEYKKyoudHh0ID0gc3ZuOm1pbWUtdHlwZT10ZXh0L3BsYWluOyBzdm46ZW9sLXN0eWxlID0gbmF0aXZlCitFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBnaXQgc3ZuJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKAorCQljZCBpbXBvcnQgJiYKKwkJZWNobyBmb28gPmZvbyAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiAuICIkc3ZucmVwbyIKKwkpICYmCisJcm0gLXJmIGltcG9ydCAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbmFibGUgYXV0by1wcm9wcyBjb25maWcnICcKKwlta2RpciB1c2VyICYmCisJZ2VuZXJhdGVfYXV0b19wcm9wcyB5ZXMgPnVzZXIvY29uZmlnCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBmaWxlcyBtYXRjaGluZyBhdXRvLXByb3BzJyAnCisJZWNobyAiIyEkU0hFTExfUEFUSCIgPmV4ZWMxLnNoICYmCisJY2htb2QgK3ggZXhlYzEuc2ggJiYKKwllY2hvICJoZWxsbyIgPmhlbGxvLnR4dCAmJgorCWVjaG8gYmFyID5iYXIgJiYKKwlnaXQgYWRkIGV4ZWMxLnNoIGhlbGxvLnR4dCBiYXIgJiYKKwlnaXQgY29tbWl0IC1tICJmaWxlcyBmb3IgZW5hYmxlZCBhdXRvLXByb3BzIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAtLWNvbmZpZy1kaXI9dXNlcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhYmxlIGF1dG8tcHJvcHMgY29uZmlnJyAnCisJZ2VuZXJhdGVfYXV0b19wcm9wcyBubyA+dXNlci9jb25maWcKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGZpbGVzIG1hdGNoaW5nIGRpc2FibGVkIGF1dG8tcHJvcHMnICcKKwllY2hvICIjJFNIRUxMX1BBVEgiID5leGVjMi5zaCAmJgorCWNobW9kICt4IGV4ZWMyLnNoICYmCisJZWNobyAid29ybGQiID53b3JsZC50eHQgJiYKKwllY2hvIHpvdCA+em90ICYmCisJZ2l0IGFkZCBleGVjMi5zaCB3b3JsZC50eHQgem90ICYmCisJZ2l0IGNvbW1pdCAtbSAiZmlsZXMgZm9yIGRpc2FibGVkIGF1dG8tcHJvcHMiICYmCisJZ2l0IHN2biBkY29tbWl0IC0tY29uZmlnLWRpcj11c2VyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHJlc3VsdGluZyBzdm4gcmVwb3NpdG9yeScgJworKAorCW1rZGlyIHdvcmsgJiYKKwljZCB3b3JrICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iICYmCisJY2Qgc3ZucmVwbyAmJgorCisJIyBDaGVjayBwcm9wZXJ0aWVzIGZyb20gZmlyc3QgY29tbWl0LgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46ZXhlY3V0YWJsZSBleGVjMS5zaCkiID0gIngqIiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIGV4ZWMxLnNoKSIgPSBcCisJICAgICAieGFwcGxpY2F0aW9uL3gtc2hlbGxzY3JpcHQiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgaGVsbG8udHh0KSIgPSAieHRleHQvcGxhaW4iICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjplb2wtc3R5bGUgaGVsbG8udHh0KSIgPSAieG5hdGl2ZSIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBiYXIpIiA9ICJ4IiAmJgorCisJIyBDaGVjayBwcm9wZXJ0aWVzIGZyb20gc2Vjb25kIGNvbW1pdC4KKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOmV4ZWN1dGFibGUgZXhlYzIuc2gpIiA9ICJ4KiIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOm1pbWUtdHlwZSBleGVjMi5zaCkiID0gIngiICYmCisJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptaW1lLXR5cGUgd29ybGQudHh0KSIgPSAieCIgJiYKKwl0ZXN0ICJ4JChzdm5fY21kIHByb3BnZXQgc3ZuOmVvbC1zdHlsZSB3b3JsZC50eHQpIiA9ICJ4IiAmJgorCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIHpvdCkiID0gIngiCispCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHJlbmFtZWQgZmlsZScgJworCXRlc3QgLWQgdXNlciAmJgorCWdlbmVyYXRlX2F1dG9fcHJvcHMgeWVzID4gdXNlci9jb25maWcgJiYKKwlnaXQgbXYgZm9vIGZvby5zaCAmJgorCWdpdCBjb21taXQgLW0gImZvbyA9PiBmb28uc2giICYmCisJZ2l0IHN2biBkY29tbWl0IC0tY29uZmlnLWRpcj11c2VyICYmCisJKAorCQljZCB3b3JrL3N2bnJlcG8gJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQl0ZXN0ICEgLWUgZm9vICYmCisJCXRlc3QgLWUgZm9vLnNoICYmCisJCXRlc3QgIngkKHN2bl9jbWQgcHJvcGdldCBzdm46bWltZS10eXBlIGZvby5zaCkiID0gXAorCQkgICAgICJ4YXBwbGljYXRpb24veC1zaGVsbHNjcmlwdCIgJiYKKwkJdGVzdCAieCQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjplb2wtc3R5bGUgZm9vLnNoKSIgPSAieExGIgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTI1LWdpdC1zdm4tbXVsdGktZ2xvYi1icmFuY2gtbmFtZXMuc2ggYi90L3Q5MTI1LWdpdC1zdm4tbXVsdGktZ2xvYi1icmFuY2gtbmFtZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGQ1M2ZjOQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjUtZ2l0LXN2bi1tdWx0aS1nbG9iLWJyYW5jaC1uYW1lcy5zaApAQCAtMCwwICsxLDM3IEBACisjIS9iaW4vc2gKKyMgQ29weXJpZ2h0IChjKSAyMDA4IE1hcmN1cyBHcmllcAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIG11bHRpLWdsb2IgYnJhbmNoIG5hbWVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlta2RpciBwcm9qZWN0IHByb2plY3QvdHJ1bmsgcHJvamVjdC9icmFuY2hlcyBcCisJCQlwcm9qZWN0L2JyYW5jaGVzL3YxNC4xIHByb2plY3QvdGFncyAmJgorCWVjaG8gZm9vID4gcHJvamVjdC90cnVuay9mb28gJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiJHRlc3RfZGVzY3JpcHRpb24iIHByb2plY3QgIiRzdm5yZXBvL3Byb2plY3QiICYmCisJcm0gLXJmIHByb2plY3QgJiYKKwlzdm5fY21kIGNwIC1tICJmdW4iICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJICAgICAgICAgICAgICAgICIkc3ZucmVwby9wcm9qZWN0L2JyYW5jaGVzL3YxNC4xL2JldGEiICYmCisJc3ZuX2NtZCBjcCAtbSAibW9yZSBmdW4hIiAiJHN2bnJlcG8vcHJvamVjdC9icmFuY2hlcy92MTQuMS9iZXRhIiBcCisJICAgICAgICAgICAgICAgICAgICAgICIkc3ZucmVwby9wcm9qZWN0L2JyYW5jaGVzL3YxNC4xL2dvbGQiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IGNsb25lIHdpdGggbXVsdGktZ2xvYiBpbiBicmFuY2ggbmFtZXMnICcKKwlnaXQgc3ZuIGNsb25lIC1UIHRydW5rIC1iIGJyYW5jaGVzLyovKiAtdCB0YWdzIFwKKwkgICAgICAgICAgICAgICIkc3ZucmVwby9wcm9qZWN0IiBwcm9qZWN0ICYmCisJKGNkIHByb2plY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAicmVmcy9yZW1vdGVzL29yaWdpbi92MTQuMS9iZXRhIiAmJgorCQlnaXQgcmV2LXBhcnNlICJyZWZzL3JlbW90ZXMvb3JpZ2luL3YxNC4xL2dvbGQiCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBkY29tbWl0IHRvIG11bHRpLWdsb2JiZWQgYnJhbmNoJyAiCisJKGNkIHByb2plY3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICdyZWZzL3JlbW90ZXMvb3JpZ2luL3YxNC4xL2dvbGQnICYmCisJZWNobyBoZWxsbyA+PiBmb28gJiYKKwlnaXQgY29tbWl0IC1tICdoZWxsbycgLS0gZm9vICYmCisJZ2l0IHN2biBkY29tbWl0CisJKQorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTI2LWdpdC1zdm4tZm9sbG93LWRlbGV0ZWQtcmVhZGRlZC1kaXJlY3Rvcnkuc2ggYi90L3Q5MTI2LWdpdC1zdm4tZm9sbG93LWRlbGV0ZWQtcmVhZGRlZC1kaXJlY3Rvcnkuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWRlYzY0MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjYtZ2l0LXN2bi1mb2xsb3ctZGVsZXRlZC1yZWFkZGVkLWRpcmVjdG9yeS5zaApAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEFsZWMgQmVycnltYW4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBmZXRjaCByZXBvc2l0b3J5IHdpdGggZGVsZXRlZCBhbmQgcmVhZGRlZCBkaXJlY3RvcnknCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCisjIERvbid0IHJ1biB0aGlzIGJ5IGRlZmF1bHQ7IGl0IG9wZW5zIHVwIGEgcG9ydC4KK3JlcXVpcmVfc3Zuc2VydmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCByZXBvc2l0b3J5JyAnCisgICAgc3ZuYWRtaW4gbG9hZCAtcSAiJHJhd3N2bnJlcG8iIDwgIiRURVNUX0RJUkVDVE9SWSIvdDkxMjYvZm9sbG93LWRlbGV0ZWQtcmVhZGRlZC5kdW1wCisgICAgJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCByZXBvc2l0b3J5JyAnCisgICAgc3RhcnRfc3Zuc2VydmUgJiYKKyAgICBnaXQgc3ZuIGluaXQgc3ZuOi8vMTI3LjAuMC4xOiRTVk5TRVJWRV9QT1JUICYmCisgICAgZ2l0IHN2biBmZXRjaAorICAgICcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTI2L2ZvbGxvdy1kZWxldGVkLXJlYWRkZWQuZHVtcCBiL3QvdDkxMjYvZm9sbG93LWRlbGV0ZWQtcmVhZGRlZC5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZGE1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTI2L2ZvbGxvdy1kZWxldGVkLXJlYWRkZWQuZHVtcApAQCAtMCwwICsxLDIwMSBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogMTgwN2RjNmYtYzY5My00Y2RhLTk3MTAtMDBlMWJlOGMxZjIxCisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA5LTE0VDE5OjUzOjEzLjAwNjc0OFoKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgMTIKK0NyZWF0ZSB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViA0CithbGVjCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA5LTE0VDE5OjUzOjEzLjIzOTY4OVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDExOQorQ29udGVudC1sZW5ndGg6IDExOQorCitLIDcKK3N2bjpsb2cKK1YgMjAKK0NyZWF0ZSB0cnVuay9wcm9qZWN0CitLIDEwCitzdm46YXV0aG9yCitWIDQKK2FsZWMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMDktMTRUMTk6NTM6MTMuNTQ4ODYwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvcHJvamVjdAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDEyCithZGQgbmV3IGZpbGUKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorYWxlYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoxNS40MzM2MzBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9wcm9qZWN0L2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogZDNiMDczODRkMTEzZWRlYzQ5ZWFhNjIzOGFkNWZmMDAKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK2ZvbworCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTE2CitDb250ZW50LWxlbmd0aDogMTE2CisKK0sgNworc3ZuOmxvZworViAxNworY2hhbmdlIGZvbyB0byBiYXIKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorYWxlYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoxNy4zMzk4ODRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9wcm9qZWN0L2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiBjMTU3YTc5MDMxZTFjNDBmODU5MzE4MjliYzVmYzU1MgorQ29udGVudC1sZW5ndGg6IDQKKworYmFyCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTQKK0NvbnRlbnQtbGVuZ3RoOiAxMTQKKworSyA3Citzdm46bG9nCitWIDE1Citkb24ndCBsaWtlIHRoYXQKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorYWxlYworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0wOS0xNFQxOTo1MzoxOS4zMzUwMDFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9wcm9qZWN0CitOb2RlLWFjdGlvbjogZGVsZXRlCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDExCityZXNldCB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViA0CithbGVjCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA5LTE0VDE5OjUzOjE5Ljg0NTg5N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL3Byb2plY3QKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogNAorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuay9wcm9qZWN0CisKKworUmV2aXNpb24tbnVtYmVyOiA3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTMKK0NvbnRlbnQtbGVuZ3RoOiAxMTMKKworSyA3Citzdm46bG9nCitWIDE0CitjaGFuZ2UgdG8gcXV1eAorSyAxMAorc3ZuOmF1dGhvcgorViA0CithbGVjCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA4LTA5LTE0VDE5OjUzOjIxLjM2Nzk0N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL3Byb2plY3QvZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDUKK1RleHQtY29udGVudC1tZDU6IGQzYjA3YTM4MmVjMDEwYzAxODg5MjUwZmNlNjZmYjEzCitDb250ZW50LWxlbmd0aDogNQorCitxdXV4CisKKwpkaWZmIC0tZ2l0IGEvdC90OTEyNy1naXQtc3ZuLXBhcnRpYWwtcmVidWlsZC5zaCBiL3QvdDkxMjctZ2l0LXN2bi1wYXJ0aWFsLXJlYnVpbGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmU0Nzg5ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjctZ2l0LXN2bi1wYXJ0aWFsLXJlYnVpbGQuc2gKQEAgLTAsMCArMSw1OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBEZXNraW4gTWlsbGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcGFydGlhbC1yZWJ1aWxkIHRlc3RzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc3ZucmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJKGNkIGltcG9ydCAmJgorCQlta2RpciB0cnVuayBicmFuY2hlcyB0YWdzICYmCisJCShjZCB0cnVuayAmJgorCQllY2hvIGZvbyA+IGZvbworCQkpICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdC1zdm4iIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsICYmCisJCXN2bl9jbWQgY29weSAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYSBcCisJCQktbSAiY3JlYXRlZCBicmFuY2ggYSIKKwkJKSAmJgorCQlybSAtcmYgaW1wb3J0ICYmCisJCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayB0cnVuayAmJgorCQkoY2QgdHJ1bmsgJiYKKwkJZWNobyBiYXIgPj4gZm9vICYmCisJCXN2bl9jbWQgY2kgLW0gInVwZGF0ZWQgdHJ1bmsiCisJCSkgJiYKKwkJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL2JyYW5jaGVzL2EgYSAmJgorCQkoY2QgYSAmJgorCQllY2hvIGJheiA+PiBhICYmCisJCXN2bl9jbWQgYWRkIGEgJiYKKwkJc3ZuX2NtZCBjaSAtbSAidXBkYXRlZCBhIgorCQkpICYmCisJCWdpdCBzdm4gaW5pdCAtLXN0ZGxheW91dCAiJHN2bnJlcG8iCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgYW4gZWFybHkgU1ZOIHJldmlzaW9uIGludG8gZ2l0JyAnCisJZ2l0IHN2biBmZXRjaCAtcjE6MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGZ1bGwgZ2l0IG1pcnJvciBvZiBTVk4nICcKKwlta2RpciBtaXJyb3IgJiYKKwkoCisJCShjZCBtaXJyb3IgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHN2biBpbml0IC0tc3RkbGF5b3V0ICIkc3ZucmVwbyIgJiYKKwkJZ2l0IHN2biBmZXRjaAorCQkpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmcm9tIGdpdCBtaXJyb3IgYW5kIHBhcnRpYWwtcmVidWlsZCcgJworCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi51cmwgImZpbGU6Ly8kUFdEL21pcnJvci8uZ2l0IiAmJgorCWdpdCBjb25maWcgLS1hZGQgcmVtb3RlLm9yaWdpbi5mZXRjaCByZWZzL3JlbW90ZXMvKjpyZWZzL3JlbW90ZXMvKiAmJgorCWdpdCBmZXRjaCBvcmlnaW4gJiYKKwlnaXQgc3ZuIGZldGNoCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEyOC1naXQtc3ZuLWNtZC1icmFuY2guc2ggYi90L3Q5MTI4LWdpdC1zdm4tY21kLWJyYW5jaC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZTk1Zjc5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTEyOC1naXQtc3ZuLWNtZC1icmFuY2guc2gKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBEZXNraW4gTWlsbGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcGFydGlhbC1yZWJ1aWxkIHRlc3RzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc3ZucmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJKGNkIGltcG9ydCAmJgorCQlta2RpciB0cnVuayBicmFuY2hlcyB0YWdzICYmCisJCShjZCB0cnVuayAmJgorCQllY2hvIGZvbyA+IGZvbworCQkpICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdC1zdm4iIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsCisJCSkgJiYKKwkJcm0gLXJmIGltcG9ydCAmJgorCQlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgdHJ1bmsgJiYKKwkJKGNkIHRydW5rICYmCisJCWVjaG8gYmFyID4+IGZvbyAmJgorCQlzdm5fY21kIGNpIC1tICJ1cGRhdGVkIHRydW5rIgorCQkpICYmCisJCXJtIC1yZiB0cnVuaworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGludG8gZ2l0JyAnCisJZ2l0IHN2biBpbml0IC0tc3RkbGF5b3V0ICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJZ2l0IGNoZWNrb3V0IHJlbW90ZXMvb3JpZ2luL3RydW5rCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gYnJhbmNoIHRlc3RzJyAnCisJZ2l0IHN2biBicmFuY2ggYSAmJgorCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUQ6KSAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vYTopICYmCisJZ2l0IHN2biBicmFuY2ggLW0gImNyZWF0ZWQgYnJhbmNoIGIgYmxhaCIgYiAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vYjopICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGJyYW5jaCAtbSAibm8gYnJhbmNobmFtZSIgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtbiBjICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi9jICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBicmFuY2ggYSAmJgorCWdpdCBzdm4gYnJhbmNoIC10IHRhZzEgJiYKKwl0ZXN0ICRiYXNlID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL3RhZ3MvdGFnMTopICYmCisJZ2l0IHN2biBicmFuY2ggLS10YWcgdGFnMiAmJgorCXRlc3QgJGJhc2UgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9vcmlnaW4vdGFncy90YWcyOikgJiYKKwlnaXQgc3ZuIHRhZyB0YWczICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi90YWdzL3RhZzM6KSAmJgorCWdpdCBzdm4gdGFnIC1tICJjcmVhdGVkIHRhZzQgZm9vIiB0YWc0ICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL29yaWdpbi90YWdzL3RhZzQ6KSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gdGFnIC1tICJubyB0YWduYW1lIiAmJgorCWdpdCBzdm4gdGFnIC1uIHRhZzUgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlbW90ZXMvb3JpZ2luL3RhZ3MvdGFnNSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gdGFnIHRhZzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIHVzZXMgY29ycmVjdCBzdm4tcmVtb3RlJyAnCisJKHN2bl9jbWQgY28gIiRzdm5yZXBvIiBzdm4gJiYKKwljZCBzdm4gJiYKKwlta2RpciBtaXJyb3IgJiYKKwlzdm5fY21kIGFkZCBtaXJyb3IgJiYKKwlzdm5fY21kIGNvcHkgdHJ1bmsgbWlycm9yLyAmJgorCXN2bl9jbWQgY29weSB0YWdzIG1pcnJvci8gJiYKKwlzdm5fY21kIGNvcHkgYnJhbmNoZXMgbWlycm9yLyAmJgorCXN2bl9jbWQgY2kgLW0gIm1hZGUgbWlycm9yIiApICYmCisJcm0gLXJmIHN2biAmJgorCWdpdCBzdm4gaW5pdCAtcyAtUiBtaXJyb3IgLS1wcmVmaXg9bWlycm9yLyAiJHN2bnJlcG8iL21pcnJvciAmJgorCWdpdCBzdm4gZmV0Y2ggLVIgbWlycm9yICYmCisJZ2l0IGNoZWNrb3V0IG1pcnJvci90cnVuayAmJgorCWJhc2U9JChnaXQgcmV2LXBhcnNlIEhFQUQ6KSAmJgorCWdpdCBzdm4gYnJhbmNoIC1tICJicmFuY2ggaW4gbWlycm9yIiBkICYmCisJdGVzdCAkYmFzZSA9ICQoZ2l0IHJldi1wYXJzZSByZW1vdGVzL21pcnJvci9kOikgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlbW90ZXMvZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMjktZ2l0LXN2bi1pMThuLWNvbW1pdGVuY29kaW5nLnNoIGIvdC90OTEyOS1naXQtc3ZuLWkxOG4tY29tbWl0ZW5jb2Rpbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGNmZGZlNwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMjktZ2l0LXN2bi1pMThuLWNvbW1pdGVuY29kaW5nLnNoCkBAIC0wLDAgKzEsMTAxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEVyaWMgV29uZworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGhvbm9ycyBpMThuLmNvbW1pdEVuY29kaW5nIGluIGNvbmZpZycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2NvbXBhcmVfZ2l0X2hlYWRfd2l0aCAoKSB7CisJbnI9YHdjIC1sIDwgIiQxImAKKwlhPTcKKwliPSQoKCRhICsgJG5yIC0gMSkpCisJZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSAiJGEsJHtifXAiID5jdXJyZW50ICYmCisJdGVzdF9jbXAgY3VycmVudCAiJDEiCit9CisKK2FfdXRmOF9sb2NhbGU9JChsb2NhbGUgLWEgfCBzZWQgLW4gJy9cLlt1VV1bdFRdW2ZGXS0qOCQveworCXAKKwlxCit9JykKKworaWYgdGVzdCAtbiAiJGFfdXRmOF9sb2NhbGUiCit0aGVuCisJdGVzdF9zZXRfcHJlcmVxIFVURjgKK2Vsc2UKKwlzYXkgIiMgVVRGLTggbG9jYWxlIG5vdCBhdmFpbGFibGUsIHNvbWUgdGVzdHMgYXJlIHNraXBwZWQiCitmaQorCitjb21wYXJlX3N2bl9oZWFkX3dpdGggKCkgeworCSMgZXh0cmFjdCBqdXN0IHRoZSBsb2cgbWVzc2FnZSBhbmQgc3RyaXAgb3V0IGNvbW1pdHRlciBpbmZvLgorCSMgZG9uJ3QgdXNlIC0tbGltaXQgaGVyZSBzaW5jZSBzdm4gMS4xLnggZG9lc24ndCBoYXZlIGl0LAorCUxDX0FMTD0iJGFfdXRmOF9sb2NhbGUiIHN2biBsb2cgYGdpdCBzdm4gaW5mbyAtLXVybGAgfCBwZXJsIC13IC1lICcKKwkJdXNlIGJ5dGVzOworCQkkLyA9ICgiLSJ4NzIpIC4gIlxuIjsKKwkJbXkgQHggPSA8U1RESU4+OworCQlAeCA9IHNwbGl0KC9cbi8sICR4WzFdKTsKKwkJc3BsaWNlKEB4LCAwLCAyKTsKKwkJJHhbLTFdID0gIiI7CisJCXByaW50IGpvaW4oIlxuIiwgQHgpOworCScgPiBjdXJyZW50ICYmCisJdGVzdF9jbXAgY3VycmVudCAiJDEiCit9CisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBzZXR1cCIgJworCQlta2RpciAkSCAmJgorCQlzdm5fY21kIGltcG9ydCAtbSAiJEggdGVzdCIgJEggIiRzdm5yZXBvIi8kSCAmJgorCQlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIvJEggJEgKKwknCitkb25lCisKK2ZvciBIIGluIElTTzg4NTktMSBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzICIkSCBjb21taXQgb24gZ2l0IHNpZGUiICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBjb25maWcgaTE4bi5jb21taXRlbmNvZGluZyAkSCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgdCByZWZzL3JlbW90ZXMvZ2l0LXN2biAmJgorCQllY2hvICRIID5GICYmCisJCWdpdCBhZGQgRiAmJgorCQlnaXQgY29tbWl0IC1hIC1GICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dCAmJgorCQlFPSQoZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgc2VkIC1uZSAicy9eZW5jb2RpbmcgLy9wIikgJiYKKwkJdGVzdCAieiRFIiA9ICJ6JEgiCisJCWNvbXBhcmVfZ2l0X2hlYWRfd2l0aCAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8kSC50eHQKKwkpCisJJworZG9uZQorCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAgSVNPLTIwMjItSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggZGNvbW1pdCB0byBzdm4iICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBzdm4gZGNvbW1pdCAmJgorCQlnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBncmVwIGdpdC1zdm4taWQ6ICYmCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCQl0ZXN0ICJ6JEUiID0gInokSCIgJiYKKwkJY29tcGFyZV9naXRfaGVhZF93aXRoICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLyRILnR4dAorCSkKKwknCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgVVRGOCAnSVNPLTg4NTktMSBzaG91bGQgbWF0Y2ggVVRGLTggaW4gc3ZuJyAnCisJKAorCQljZCBJU084ODU5LTEgJiYKKwkJY29tcGFyZV9zdm5faGVhZF93aXRoICIkVEVTVF9ESVJFQ1RPUlkiL3QzOTAwLzEtVVRGLTgudHh0CisJKQorJworCitmb3IgSCBpbiBldWNKUCBJU08tMjAyMi1KUAorZG8KKwl0ZXN0X2V4cGVjdF9zdWNjZXNzIFVURjggIiRIIHNob3VsZCBtYXRjaCBVVEYtOCBpbiBzdm4iICcKKwkJKAorCQkJY2QgJEggJiYKKwkJCWNvbXBhcmVfc3ZuX2hlYWRfd2l0aCAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC8yLVVURi04LnR4dAorCQkpCisJJworZG9uZQorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzAtZ2l0LXN2bi1hdXRob3JzLWZpbGUuc2ggYi90L3Q5MTMwLWdpdC1zdm4tYXV0aG9ycy1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM0NGRlMjYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTMwLWdpdC1zdm4tYXV0aG9ycy1maWxlLnNoCkBAIC0wLDAgKzEsMTEzIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGF1dGhvcnMgZmlsZSB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK2NhdCA+IHN2bi1hdXRob3JzIDw8RU9GCithYSA9IEFBQUFBQUEgQUFBQUFBQSA8YWFAZXhhbXBsZS5jb20+CitiYiA9IEJCQkJCQkIgQkJCQkJCQiA8YmJAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZucmVwbycgJworCWZvciBpIGluIGFhIGJiIGNjIGRkCisJZG8KKwkJc3ZuX2NtZCBta2RpciAtbSAkaSAtLXVzZXJuYW1lICRpICIkc3ZucmVwbyIvJGkKKwlkb25lCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBpbXBvcnQgd2l0aCBpbmNvbXBsZXRlIGF1dGhvcnMgZmlsZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gY2xvbmUgLS1hdXRob3JzLWZpbGU9c3ZuLWF1dGhvcnMgIiRzdm5yZXBvIiB4CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnRlZCAyIHJldmlzaW9ucyBzdWNjZXNzZnVsbHknICcKKwkoCisJCWNkIHgKKwkJdGVzdCAiYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IHdjIC1sYCIgLWVxIDIgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IFwKKwkJICBncmVwICJeYXV0aG9yIEJCQkJCQkIgQkJCQkJCQiA8YmJAZXhhbXBsZVwuY29tPiAiICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MSB8IFwKKwkJICBncmVwICJeYXV0aG9yIEFBQUFBQUEgQUFBQUFBQSA8YWFAZXhhbXBsZVwuY29tPiAiCisJKQorCScKKworY2F0ID4+IHN2bi1hdXRob3JzIDw8RU9GCitjYyA9IENDQ0NDQ0MgQ0NDQ0NDQyA8Y2NAZXhhbXBsZS5jb20+CitkZCA9IEREREREREQgRERERERERCA8ZGRAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29udGludWVzIHRvIGltcG9ydCBvbmNlIGF1dGhvcnMgaGF2ZSBiZWVuIGFkZGVkJyAnCisJKAorCQljZCB4CisJCWdpdCBzdm4gZmV0Y2ggLS1hdXRob3JzLWZpbGU9Li4vc3ZuLWF1dGhvcnMgJiYKKwkJdGVzdCAiYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IHdjIC1sYCIgLWVxIDQgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IFwKKwkJICBncmVwICJeYXV0aG9yIEREREREREQgRERERERERCA8ZGRAZXhhbXBsZVwuY29tPiAiICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MSB8IFwKKwkJICBncmVwICJeYXV0aG9yIENDQ0NDQ0MgQ0NDQ0NDQyA8Y2NAZXhhbXBsZVwuY29tPiAiCisJKQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1maWxlIGFnYWluc3QgZ2xvYnMnICcKKwlzdm5fY21kIG1rZGlyIC1tIGdsb2JzIC0tdXNlcm5hbWUgYWEgXAorCSAgIiRzdm5yZXBvIi9hYS90cnVuayAiJHN2bnJlcG8iL2FhL2JyYW5jaGVzICIkc3ZucmVwbyIvYWEvdGFncyAmJgorCWdpdCBzdm4gY2xvbmUgLS1hdXRob3JzLWZpbGU9c3ZuLWF1dGhvcnMgLXMgIiRzdm5yZXBvIi9hYSBhYS13b3JrICYmCisJZm9yIGkgaW4gYmIgZWUgY2MKKwlkbworCQlicmFuY2g9ImFhL2JyYW5jaGVzLyRpIgorCQlzdm5fY21kIG1rZGlyIC1tICIkYnJhbmNoIiAtLXVzZXJuYW1lICRpICIkc3ZucmVwby8kYnJhbmNoIgorCWRvbmUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGZhaWxzIG9uIGVlJyAnCisJKCBjZCBhYS13b3JrICYmIHRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZmV0Y2ggLS1hdXRob3JzLWZpbGU9Li4vc3ZuLWF1dGhvcnMgKQorCScKKwordG1wX2NvbmZpZ19nZXQgKCkgeworCWdpdCBjb25maWcgLS1maWxlPS5naXQvc3ZuLy5tZXRhZGF0YSAtLWdldCAiJDEiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZhaWx1cmUgaGFwcGVuZWQgd2l0aG91dCBuZWdhdGl2ZSBzaWRlIGVmZmVjdHMnICcKKwkoCisJCWNkIGFhLXdvcmsgJiYKKwkJdGVzdCA2IC1lcSAiYHRtcF9jb25maWdfZ2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzLW1heFJldmAiICYmCisJCXRlc3QgNiAtZXEgImB0bXBfY29uZmlnX2dldCBzdm4tcmVtb3RlLnN2bi50YWdzLW1heFJldmAiCisJKQorCScKKworY2F0ID4+IHN2bi1hdXRob3JzIDw8RU9GCitlZSA9IEVFRUVFRUUgRUVFRUVFRSA8ZWVAZXhhbXBsZS5jb20+CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggY29udGludWVzIGFmdGVyIGF1dGhvcnMtZmlsZSBpcyBmaXhlZCcgJworCSgKKwkJY2QgYWEtd29yayAmJgorCQlnaXQgc3ZuIGZldGNoIC0tYXV0aG9ycy1maWxlPS4uL3N2bi1hdXRob3JzICYmCisJCXRlc3QgOCAtZXEgImB0bXBfY29uZmlnX2dldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXZgIiAmJgorCQl0ZXN0IDggLWVxICJgdG1wX2NvbmZpZ19nZXQgc3ZuLXJlbW90ZS5zdm4udGFncy1tYXhSZXZgIgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZyZXNoIGNsb25lIHdpdGggc3ZuLmF1dGhvcnMtZmlsZSBpbiBjb25maWcnICcKKwkoCisJCXJtIC1yICIkR0lUX0RJUiIgJiYKKwkJdGVzdCB4ID0geCIkKGdpdCBjb25maWcgc3ZuLmF1dGhvcnNmaWxlKSIgJiYKKwkJdGVzdF9jb25maWc9IiRIT01FIi8uZ2l0Y29uZmlnICYmCisJCXNhbmVfdW5zZXQgR0lUX0RJUiAmJgorCQlnaXQgY29uZmlnIC0tZ2xvYmFsIFwKKwkJICBzdm4uYXV0aG9yc2ZpbGUgIiRIT01FIi9zdm4tYXV0aG9ycyAmJgorCQl0ZXN0IHgiJEhPTUUiL3N2bi1hdXRob3JzID0geCIkKGdpdCBjb25maWcgc3ZuLmF1dGhvcnNmaWxlKSIgJiYKKwkJZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIGdpdGNvbmZpZy5jbG9uZSAmJgorCQljZCBnaXRjb25maWcuY2xvbmUgJiYKKwkJbnJfZXg9JChnaXQgbG9nIHwgZ3JlcCAiXkF1dGhvcjouKmV4YW1wbGUuY29tIiB8IHdjIC1sKSAmJgorCQlucl9yZXY9JChnaXQgcmV2LWxpc3QgSEVBRCB8IHdjIC1sKSAmJgorCQl0ZXN0ICRucl9yZXYgLWVxICRucl9leAorCSkKKycKKwordGVzdF9kZWJ1ZyAnR0lUX0RJUj1naXRjb25maWcuY2xvbmUvLmdpdCBnaXQgbG9nJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzEtZ2l0LXN2bi1lbXB0eS1zeW1saW5rLnNoIGIvdC90OTEzMS1naXQtc3ZuLWVtcHR5LXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjc2MjAzOAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzEtZ2l0LXN2bi1lbXB0eS1zeW1saW5rLnNoCkBAIC0wLDAgKzEsMTEwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCB0aGF0IGdpdCBoYW5kbGVzIGFuIHN2biByZXBvc2l0b3J5IHdpdGggZW1wdHkgc3ltbGlua3MnCisKKy4gLi9saWItZ2l0LXN2bi5zaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcGZpbGUnICcKKwlzdm5hZG1pbiBsb2FkICIkcmF3c3ZucmVwbyIgPDxFT0YKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IDYwNzgwZjlhLTdkZjUtNDNiNC04M2FiLTYwZTJjMDY3M2VmNworCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yNlQwNzoxNzoyNy41OTA1NzdaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDQKK3Rlc3QKK0sgMTAKK3N2bjphdXRob3IKK1YgMTIKK25vcm1hbHBlcnNvbgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yNlQwNzoxODowMy41MTE4MzZaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMzMKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitDb250ZW50LWxlbmd0aDogMzMKKworSyAxMQorc3ZuOnNwZWNpYWwKK1YgMQorKgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAxMworYmFyID0+IGRvaW5rCisKK0sgMTAKK3N2bjphdXRob3IKK1YgMTIKK25vcm1hbHBlcnNvbgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOC0xMS0yN1QwMzo1NTozMS42MDE2NzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBiYXIKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1tZDU6IDkyY2E0ZmU3YTk3MjFmODc3Zjc2NWMyNTJkY2Q2NmM5CitDb250ZW50LWxlbmd0aDogMTAKKworbGluayBkb2luaworCitFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXIxICIkc3ZucmVwbyIgeCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VuYWJsZSBicm9rZW4gc3ltbGluayB3b3JrYXJvdW5kJyBcCisgICcoY2QgeCAmJiBnaXQgY29uZmlnIHN2bi5icm9rZW5TeW1saW5rV29ya2Fyb3VuZCB0cnVlKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJiYXIiIGlzIGFuIGVtcHR5IGZpbGUnICd0ZXN0IC1mIHgvYmFyICYmICEgdGVzdCAtcyB4L2JhcicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAiYmFyIiA9PiBzeW1saW5rIGZpeCBmcm9tIHN2bicgXAorCQknKGNkIHggJiYgZ2l0IHN2biByZWJhc2UpJwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnImJhciIgYmVjb21lcyBhIHN5bWxpbmsnICd0ZXN0IC1oIHgvYmFyJworCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1yMSAiJHN2bnJlcG8iIHknCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXNhYmxlIGJyb2tlbiBzeW1saW5rIHdvcmthcm91bmQnIFwKKyAgJyhjZCB5ICYmIGdpdCBjb25maWcgc3ZuLmJyb2tlblN5bWxpbmtXb3JrYXJvdW5kIGZhbHNlKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJiYXIiIGlzIGFuIGVtcHR5IGZpbGUnICd0ZXN0IC1mIHkvYmFyICYmICEgdGVzdCAtcyB5L2JhcicKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAiYmFyIiA9PiBzeW1saW5rIGZpeCBmcm9tIHN2bicgXAorCQknKGNkIHkgJiYgZ2l0IHN2biByZWJhc2UpJwordGVzdF9leHBlY3Rfc3VjY2VzcyAnImJhciIgZG9lcyBub3QgYmVjb21lIGEgc3ltbGluaycgJyEgdGVzdCAtTCB5L2JhcicKKworIyBzdm4uYnJva2VuU3ltbGlua1dvcmthcm91bmQgaXMgdW5zZXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1yMSAiJHN2bnJlcG8iIHonCit0ZXN0X2V4cGVjdF9zdWNjZXNzICciYmFyIiBpcyBhbiBlbXB0eSBmaWxlJyAndGVzdCAtZiB6L2JhciAmJiAhIHRlc3QgLXMgei9iYXInCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZXQgImJhciIgPT4gc3ltbGluayBmaXggZnJvbSBzdm4nIFwKKwkJJyhjZCB6ICYmIGdpdCBzdm4gcmViYXNlKScKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyJiYXIiIGRvZXMgbm90IGJlY29tZSBhIHN5bWxpbmsnICchIHRlc3QgLUwgei9iYXInCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTMyLWdpdC1zdm4tYnJva2VuLXN5bWxpbmsuc2ggYi90L3Q5MTMyLWdpdC1zdm4tYnJva2VuLXN5bWxpbmsuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmM0YzkwYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzItZ2l0LXN2bi1icm9rZW4tc3ltbGluay5zaApAQCAtMCwwICsxLDEwMiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgdGhhdCBnaXQgaGFuZGxlcyBhbiBzdm4gcmVwb3NpdG9yeSB3aXRoIGVtcHR5IHN5bWxpbmtzJworCisuIC4vbGliLWdpdC1zdm4uc2gKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXBmaWxlJyAnCisJc3ZuYWRtaW4gbG9hZCAiJHJhd3N2bnJlcG8iIDw8RU9GCitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiA2MDc4MGY5YS03ZGY1LTQzYjQtODNhYi02MGUyYzA2NzNlZjcKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMTEtMjZUMDc6MTc6MjcuNTkwNTc3WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTExCitDb250ZW50LWxlbmd0aDogMTExCisKK0sgNworc3ZuOmxvZworViA0Cit0ZXN0CitLIDEwCitzdm46YXV0aG9yCitWIDEyCitub3JtYWxwZXJzb24KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMTEtMjZUMDc6MTg6MDMuNTExODM2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDMzCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiA5MTJlYzgwM2IyY2U0OWU0YTU0MTA2OGQ0OTVhYjU3MAorQ29udGVudC1sZW5ndGg6IDM3CisKK0sgMTEKK3N2bjpzcGVjaWFsCitWIDEKKyoKK1BST1BTLUVORAorYXNkZgorCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTMKK2JhciA9PiBkb2luaworCitLIDEwCitzdm46YXV0aG9yCitWIDEyCitub3JtYWxwZXJzb24KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDgtMTEtMjdUMDM6NTU6MzEuNjAxNjcyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYmFyCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbWQ1OiA5MmNhNGZlN2E5NzIxZjg3N2Y3NjVjMjUyZGNkNjZjOQorQ29udGVudC1sZW5ndGg6IDEwCisKK2xpbmsgZG9pbmsKKworRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1yMSAiJHN2bnJlcG8iIHgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJyJiYXIiIGlzIGEgc3ltbGluayB0aGF0IHBvaW50cyB0byAiYXNkZiInICcKKwl0ZXN0IC1MIHgvYmFyICYmCisJKGNkIHggJiYgdGVzdCB4YXNkZiA9IHgiYGdpdCBjYXQtZmlsZSBibG9iIEhFQUQ6YmFyYCIpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dldCAiYmFyIiA9PiBzeW1saW5rIGZpeCBmcm9tIHN2bicgJworCShjZCB4ICYmIGdpdCBzdm4gcmViYXNlKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICciYmFyIiByZW1haW5zIGEgcHJvcGVyIHN5bWxpbmsnICcKKwl0ZXN0IC1MIHgvYmFyICYmCisJKGNkIHggJiYgdGVzdCB4ZG9pbmsgPSB4ImBnaXQgY2F0LWZpbGUgYmxvYiBIRUFEOmJhcmAiKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzMtZ2l0LXN2bi1uZXN0ZWQtZ2l0LXJlcG8uc2ggYi90L3Q5MTMzLWdpdC1zdm4tbmVzdGVkLWdpdC1yZXBvLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYzYzMwZTYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTMzLWdpdC1zdm4tbmVzdGVkLWdpdC1yZXBvLnNoCkBAIC0wLDAgKzEsMTAxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHByb3BlcnR5IHRlc3RzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHJlcG8gd2l0aCBhIGdpdCByZXBvIGluc2lkZSBpdCcgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCWdpdCBpbml0ICYmCisJCXRlc3QgLWYgLmdpdC9IRUFEICYmCisJCT4gLmdpdC9hICYmCisJCWVjaG8gYSA+IGEgJiYKKwkJc3ZuX2NtZCBhZGQgLmdpdCBhICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgYSBuZXN0ZWQgZ2l0IHJlcG8iICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBoaSA+PiAuZ2l0L2EgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSAuZ2l0L2EiICYmCisJCXN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGFuIFNWTiByZXBvIGNvbnRhaW5pbmcgYSBnaXQgcmVwbycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiBnICYmCisJZWNobyBhID4gZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGcvYQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0JyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gYiA+PiBhICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiAuZ2l0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIC5naXQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbycgJworCSgKKwkJY2QgZyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQllY2hvIGEgPiBleHBlY3QgJiYKKwkJZWNobyBiID4+IGV4cGVjdCAmJgorCQl0ZXN0X2NtcCBhIGV4cGVjdCAmJgorCQlybSBleHBlY3QKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2YgLmdpdCcgJworCSgKKwkJY2QgcyAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgaW5zaWRlIGFuIFNWTiByZXBvIiAmJgorCQlnaXQgbG9nICYmCisJCXN2bl9jbWQgYWRkIC0tZm9yY2UgLmdpdCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluc2lkZSBvZiAuZ2l0IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2YgLmdpdCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCWVjaG8gYSA+IGV4cGVjdCAmJgorCQllY2hvIGIgPj4gZXhwZWN0ICYmCisJCXRlc3RfY21wIGEgZXhwZWN0ICYmCisJCXJtIGV4cGVjdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCcgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIGMgPj4gYSAmJgorCQlnaXQgYWRkIGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGEgaW5zaWRlIGFuIFNWTiByZXBvIiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiU1ZOLXNpZGUgY2hhbmdlIGluIGFuZCBvdXQgb2YgLmdpdCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiAuZ2l0IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gYWdhaW4nICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJZWNobyBhID4gZXhwZWN0ICYmCisJCWVjaG8gYiA+PiBleHBlY3QgJiYKKwkJZWNobyBjID4+IGV4cGVjdCAmJgorCQl0ZXN0X2NtcCBhIGV4cGVjdCAmJgorCQlybSBleHBlY3QKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzNC1naXQtc3ZuLWlnbm9yZS1wYXRocy5zaCBiL3QvdDkxMzQtZ2l0LXN2bi1pZ25vcmUtcGF0aHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDlmZjEwYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzQtZ2l0LXN2bi1pZ25vcmUtcGF0aHMuc2gKQEAgLTAsMCArMSwxNDcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgVml0YWx5IFNodWtlbGEKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHByb3BlcnR5IHRlc3RzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCW1rZGlyIHFxcSB3d3cgJiYKKwkJZWNobyB0ZXN0X3FxcSA+IHFxcS90ZXN0X3FxcS50eHQgJiYKKwkJZWNobyB0ZXN0X3d3dyA+IHd3dy90ZXN0X3d3dy50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgcXFxICYmCisJCXN2bl9jbWQgYWRkIHd3dyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIHNvbWUgZmlsZXMiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBoaSA+PiB3d3cvdGVzdF93d3cudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJtb2RpZnkgd3d3L3Rlc3Rfd3d3LnR4dCIgJiYKKwkJc3ZuX2NtZCB1cAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgYW4gU1ZOIHJlcG9zaXRvcnkgd2l0aCBpZ25vcmVkIHd3dyBkaXJlY3RvcnknICcKKwlnaXQgc3ZuIGNsb25lIC0taWdub3JlLXBhdGhzPSJed3d3IiAiJHN2bnJlcG8iIGcgJiYKKwllY2hvIHRlc3RfcXFxID4gZXhwZWN0ICYmCisJZm9yIGkgaW4gZy8qLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCXRlc3RfY21wIGV4cGVjdCBleHBlY3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQrZmV0Y2ggYW4gU1ZOIHJlcG9zaXRvcnkgd2l0aCBpZ25vcmVkIHd3dyBkaXJlY3RvcnknICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiBjICYmCisJKCBjZCBjICYmIGdpdCBzdm4gZmV0Y2ggLS1pZ25vcmUtcGF0aHM9Il53d3ciICkgJiYKKwlybSBleHBlY3QyICYmCisJZWNobyB0ZXN0X3FxcSA+IGV4cGVjdCAmJgorCWZvciBpIGluIGMvKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwl0ZXN0X2NtcCBleHBlY3QgZXhwZWN0MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgaWdub3JlLXBhdGhzIGNvbmZpZyBzYXZlZCBieSBjbG9uZScgJworCSgKKwkgICAgY2QgZyAmJgorCSAgICBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmlnbm9yZS1wYXRocyB8IGZncmVwICJ3d3ciCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiB3d3cnICcKKwkoCisJCWNkIHMgJiYKKwkJZWNobyBiID4+IHFxcS90ZXN0X3FxcS50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBvdXRzaWRlIG9mIHd3dyIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiB3d3ciCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAoY29uZmlnIGlnbm9yZSknICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKG9wdGlvbiBpZ25vcmUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taWdub3JlLXBhdGhzPSJed3d3IiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIGlnbm9yZWQgd3d3JyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gemFxID4+IHd3dy90ZXN0X3d3dy50eHQKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2Ygd3d3L3Rlc3Rfd3d3LnR4dCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIHd3dy90ZXN0X3d3dy50eHQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAoY29uZmlnIGlnbm9yZSknICcKKwkoCisJCWNkIGcgJiYKKwkJZ2l0IHN2biByZWJhc2UgJiYKKwkJcHJpbnRmICJ0ZXN0X3FxcVxuYlxuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKG9wdGlvbiBpZ25vcmUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taWdub3JlLXBhdGhzPSJed3d3IiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2UgaW4gYW5kIG91dCBvZiBpZ25vcmVkIHd3dycgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIGN2ZiA+PiB3d3cvdGVzdF93d3cudHh0CisJCWVjaG8geWdnID4+IHFxcS90ZXN0X3FxcS50eHQKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGlnbm9yZWQgd3d3IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGlnbm9yZWQgd3d3IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gYWdhaW4gKGNvbmZpZyBpZ25vcmUpJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbnlnZ1xuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gYWdhaW4gKG9wdGlvbiBpZ25vcmUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taWdub3JlLXBhdGhzPSJed3d3IiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG55Z2dcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzNS1naXQtc3ZuLW1vdmVkLWJyYW5jaC1lbXB0eS1maWxlLnNoIGIvdC90OTEzNS1naXQtc3ZuLW1vdmVkLWJyYW5jaC1lbXB0eS1maWxlLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkzZGI0NWQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM1LWdpdC1zdm4tbW92ZWQtYnJhbmNoLWVtcHR5LWZpbGUuc2gKQEAgLTAsMCArMSwyMSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgbW92ZWQgc3ZuIGJyYW5jaCB3aXRoIG1pc3NpbmcgZW1wdHkgZmlsZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdm4gZHVtcGZpbGUnICAnCisJc3ZuYWRtaW4gbG9hZCAiJHJhd3N2bnJlcG8iIDwgIiR7VEVTVF9ESVJFQ1RPUll9L3Q5MTM1L3N2bi5kdW1wIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdXNpbmcgZ2l0IHN2bicgJ2dpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIiB4JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0ZXN0IHRoYXQgYjEgZXhpc3RzIGFuZCBpcyBlbXB0eScgJworCSgKKwkJY2QgeCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9icmFuY2gtYyAmJgorCQl0ZXN0IC1mIGIxICYmCisJCSEgdGVzdCAtcyBiMQorCSkKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzNS9zdm4uZHVtcCBiL3QvdDkxMzUvc3ZuLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUxYzBjYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzUvc3ZuLmR1bXAKQEAgLTAsMCArMSwxOTIgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IDFmODBlOTE5LWU5ZTMtNGQ4MC1hM2FlLWQ5ZjIxMDk1ZTI3YgorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0xMFQxOToyMzoxNi40MjQwMjdaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjMKK0NvbnRlbnQtbGVuZ3RoOiAxMjMKKworSyA3Citzdm46bG9nCitWIDIwCitpbml0IHN0YW5kYXJkIGxheW91dAorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0xMFQxOToyMzoxNy4xOTUwNzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDE4CiticmFuY2gtYiBvZmYgdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMTBUMTk6MjM6MTkuMTYwMDk1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnJhbmNoLWIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworUHJvcC1jb250ZW50LWxlbmd0aDogMzQKK0NvbnRlbnQtbGVuZ3RoOiAzNAorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjAKK0NvbnRlbnQtbGVuZ3RoOiAxMjAKKworSyA3Citzdm46bG9nCitWIDE3CithZGQgZW1wdHkgZmlsZSBiMQorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0xMFQxOToyMzoyMC4xOTQ1NjhaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9icmFuY2gtYi9iMQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDQKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgOAorYnJhbmNoLWMKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMTBUMTk6MjM6MjEuMTY5MTAwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnJhbmNoLWMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMworTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTI2CitDb250ZW50LWxlbmd0aDogMTI2CisKK0sgNworc3ZuOmxvZworViAyMworb29wcywgd3JvbmcgYnJhbmNocG9pbnQKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMTBUMTk6MjM6MjEuMjUzNTU3WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnJhbmNoLWMKK05vZGUtYWN0aW9uOiBkZWxldGUKKworCitSZXZpc2lvbi1udW1iZXI6IDYKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyNworQ29udGVudC1sZW5ndGg6IDEyNworCitLIDcKK3N2bjpsb2cKK1YgMjQKK2JyYW5jaC1jIG9mZiBvZiBicmFuY2gtYgorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0xMFQxOToyMzoyMS4zMTQ2NTlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9icmFuY2gtYworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA1CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2JyYW5jaC1iCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAzNAorQ29udGVudC1sZW5ndGg6IDM0CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMAorCitQUk9QUy1FTkQKKworCmRpZmYgLS1naXQgYS90L3Q5MTM2LWdpdC1zdm4tcmVjcmVhdGVkLWJyYW5jaC1lbXB0eS1maWxlLnNoIGIvdC90OTEzNi1naXQtc3ZuLXJlY3JlYXRlZC1icmFuY2gtZW1wdHktZmlsZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MzNkMTZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzNi1naXQtc3ZuLXJlY3JlYXRlZC1icmFuY2gtZW1wdHktZmlsZS5zaApAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCByZWNyZWF0ZWQgc3ZuIGJyYW5jaCB3aXRoIGVtcHR5IGZpbGVzJworCisuIC4vbGliLWdpdC1zdm4uc2gKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXBmaWxlJyAgJworCXN2bmFkbWluIGxvYWQgIiRyYXdzdm5yZXBvIiA8ICIke1RFU1RfRElSRUNUT1JZfS90OTEzNi9zdm4uZHVtcCIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHVzaW5nIGdpdCBzdm4nICdnaXQgc3ZuIGNsb25lIC1zICIkc3ZucmVwbyIgeCcKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTM2L3N2bi5kdW1wIGIvdC90OTEzNi9zdm4uZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjFjZTBiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTEzNi9zdm4uZHVtcApAQCAtMCwwICsxLDE5MiBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogZWVjYWUwMjEtOGYxNi00OGRhLTk2OWQtNzliZWI4YWU2ZWE1CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU2LjI5Mjg5MFoKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwNgorQ29udGVudC1sZW5ndGg6IDEwNgorCitLIDcKK3N2bjpsb2cKK1YgNAoraW5pdAorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0yMlQwMDo1MDo1Ny4xOTIzODRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0YWdzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDUKK0NvbnRlbnQtbGVuZ3RoOiAxMDUKKworSyA3Citzdm46bG9nCitWIDMKKzEuMAorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0yMlQwMDo1MDo1OC4xMjQ3MjRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0YWdzLzEuMAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDkKKzEuMC4xLWJhZAorSyAxMAorc3ZuOmF1dGhvcgorViA4Citqb2huLmRvZQorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0wMi0yMlQwMDo1MDo1OC4xNTE3MjdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0YWdzLzEuMC4xCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIKK05vZGUtY29weWZyb20tcGF0aDogdGFncy8xLjAKKworCitSZXZpc2lvbi1udW1iZXI6IDQKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMQorQ29udGVudC1sZW5ndGg6IDExMQorCitLIDcKK3N2bjpsb2cKK1YgOQorV3JvbmcgdGFnCitLIDEwCitzdm46YXV0aG9yCitWIDgKK2pvaG4uZG9lCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTAyLTIyVDAwOjUwOjU4LjE2NzQyN1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRhZ3MvMS4wLjEKK05vZGUtYWN0aW9uOiBkZWxldGUKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMworQ29udGVudC1sZW5ndGg6IDExMworCitLIDcKK3N2bjpsb2cKK1YgMTAKKzEuMC1icmFuY2gKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTguMTg0NDk4WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvMS4wCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDQKK05vZGUtY29weWZyb20tcGF0aDogdGFncy8xLjAKKworCitSZXZpc2lvbi1udW1iZXI6IDYKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMworQ29udGVudC1sZW5ndGg6IDExMworCitLIDcKK3N2bjpsb2cKK1YgMTAKKzEuMC4xLWdvb2QKK0sgMTAKK3N2bjphdXRob3IKK1YgOAoram9obi5kb2UKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMDItMjJUMDA6NTA6NTguMjAwNjk1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdGFncy8xLjAuMQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA1CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzLzEuMAorCisKZGlmZiAtLWdpdCBhL3QvdDkxMzctZ2l0LXN2bi1kY29tbWl0LWNsb2JiZXItc2VyaWVzLnNoIGIvdC90OTEzNy1naXQtc3ZuLWRjb21taXQtY2xvYmJlci1zZXJpZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDYwZGE2MwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxMzctZ2l0LXN2bi1kY29tbWl0LWNsb2JiZXItc2VyaWVzLnNoCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgRXJpYyBXb25nCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGRjb21taXQgY2xvYmJlciBzZXJpZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJbWtkaXIgaW1wb3J0ICYmCisJKGNkIGltcG9ydCAmJgorCWF3ayAiQkVHSU4geyBmb3IgKGkgPSAxOyBpIDwgNjQ7IGkrKykgeyBwcmludCBpIH0gfSIgPiBmaWxlCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwiIC4gIiRzdm5yZXBvIgorCSkgJiYKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwl0ZXN0IC1lIGZpbGUKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJyhzdXBwb3NlZGx5KSBub24tY29uZmxpY3RpbmcgY2hhbmdlIGZyb20gU1ZOJyAnCisJdGVzdCB4ImBzZWQgLW4gLWUgNThwIDwgZmlsZWAiID0geDU4ICYmCisJdGVzdCB4ImBzZWQgLW4gLWUgNjFwIDwgZmlsZWAiID0geDYxICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHRtcCAmJgorCShjZCB0bXAgJiYKKwkJcGVybCAtaS5iYWsgLXAgLWUgInMvXjU4JC81NTg4LyIgZmlsZSAmJgorCQlwZXJsIC1pLmJhayAtcCAtZSAicy9eNjEkLzY2MTEvIiBmaWxlICYmCisJCXBva2UgZmlsZSAmJgorCQl0ZXN0IHgiYHNlZCAtbiAtZSA1OHAgPCBmaWxlYCIgPSB4NTU4OCAmJgorCQl0ZXN0IHgiYHNlZCAtbiAtZSA2MXAgPCBmaWxlYCIgPSB4NjYxMSAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiNTggPT4gNTU4OCwgNjEgPT4gNjYxMSIKKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzb21lIHVucmVsYXRlZCBjaGFuZ2VzIHRvIGdpdCcgIgorCWVjaG8gaGkgPiBsaWZlICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBsaWZlICYmCisJZ2l0IGNvbW1pdCAtbSBoaS1saWZlICYmCisJZWNobyBieWUgPj4gbGlmZSAmJgorCWdpdCBjb21taXQgLW0gYnllLWxpZmUgbGlmZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hhbmdlIGZpbGUgYnV0IGluIHVucmVsYXRlZCBhcmVhJyAiCisJdGVzdCB4XCJcYHNlZCAtbiAtZSA0cCA8IGZpbGVcYFwiID0geDQgJiYKKwl0ZXN0IHhcIlxgc2VkIC1uIC1lIDdwIDwgZmlsZVxgXCIgPSB4NyAmJgorCXBlcmwgLWkuYmFrIC1wIC1lICdzL140XCQvNDQ0NC8nIGZpbGUgJiYKKwlwZXJsIC1pLmJhayAtcCAtZSAncy9eN1wkLzc3NzcvJyBmaWxlICYmCisJdGVzdCB4XCJcYHNlZCAtbiAtZSA0cCA8IGZpbGVcYFwiID0geDQ0NDQgJiYKKwl0ZXN0IHhcIlxgc2VkIC1uIC1lIDdwIDwgZmlsZVxgXCIgPSB4Nzc3NyAmJgorCWdpdCBjb21taXQgLW0gJzQgPT4gNDQ0NCwgNyA9PiA3Nzc3JyBmaWxlICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJc3ZuX2NtZCB1cCB0bXAgJiYKKwljZCB0bXAgJiYKKwkJdGVzdCB4XCJcYHNlZCAtbiAtZSA0cCA8IGZpbGVcYFwiID0geDQ0NDQgJiYKKwkJdGVzdCB4XCJcYHNlZCAtbiAtZSA3cCA8IGZpbGVcYFwiID0geDc3NzcgJiYKKwkJdGVzdCB4XCJcYHNlZCAtbiAtZSA1OHAgPCBmaWxlXGBcIiA9IHg1NTg4ICYmCisJCXRlc3QgeFwiXGBzZWQgLW4gLWUgNjFwIDwgZmlsZVxgXCIgPSB4NjYxMQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXR0ZW1wdCB0byBkY29tbWl0IHdpdGggYSBkaXJ0eSBpbmRleCcgJworCWVjaG8gZm9vID4+ZmlsZSAmJgorCWdpdCBhZGQgZmlsZSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxMzgtZ2l0LXN2bi1hdXRob3JzLXByb2cuc2ggYi90L3Q5MTM4LWdpdC1zdm4tYXV0aG9ycy1wcm9nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI5MzdmNGMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM4LWdpdC1zdm4tYXV0aG9ycy1wcm9nLnNoCkBAIC0wLDAgKzEsODIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nLCBNYXJrIExvZGF0bworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGF1dGhvcnMgcHJvZyB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3dyaXRlX3NjcmlwdCBzdm4tYXV0aG9ycy1wcm9nICIkUEVSTF9QQVRIIiA8PC1cRU9GCisJJF8gPSBzaGlmdDsKKwlpZiAocy8tc3ViJC8vKSAgeworCQlwcmludCAiJF8gPCRfXEBzdWIuZXhhbXBsZS5jb20+XG4iOworCX0gZWxzZSB7CisJCXByaW50ICIkXyA8JF9cQGV4YW1wbGUuY29tPlxuIjsKKwl9CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ZuLWF1dGhvcnMgc2V0dXAnICcKKwljYXQgPnN2bi1hdXRob3JzIDw8LVxFT0YKKwlmZiA9IEZGRkZGRkYgRkZGRkZGRiA8ZkZmQG90aGVyLmV4YW1wbGUuY29tPgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBzdm5yZXBvJyAnCisJZm9yIGkgaW4gYWEgYmIgY2Mtc3ViIGRkLXN1YiBlZS1mb28gZmYKKwlkbworCQlzdm4gbWtkaXIgLW0gJGkgLS11c2VybmFtZSAkaSAiJHN2bnJlcG8iLyRpCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgYXV0aG9ycyB3aXRoIHByb2cgYW5kIGZpbGUnICcKKwlnaXQgc3ZuIGNsb25lIC0tYXV0aG9ycy1wcm9nPS4vc3ZuLWF1dGhvcnMtcHJvZyBcCisJICAgIC0tYXV0aG9ycy1maWxlPXN2bi1hdXRob3JzICIkc3ZucmVwbyIgeAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnRlZCA2IHJldmlzaW9ucyBzdWNjZXNzZnVsbHknICcKKwkoCisJCWNkIHgKKwkJdGVzdCAiYGdpdCByZXYtbGlzdCByZWZzL3JlbW90ZXMvZ2l0LXN2biB8IHdjIC1sYCIgLWVxIDYKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F1dGhvcnMtcHJvZyByYW4gY29ycmVjdGx5JyAnCisJKAorCQljZCB4CisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MSB8IFwKKwkJICBncmVwICJeYXV0aG9yIGVlLWZvbyA8ZWUtZm9vQGV4YW1wbGVcLmNvbT4gIiAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjIgfCBcCisJCSAgZ3JlcCAiXmF1dGhvciBkZCA8ZGRAc3ViXC5leGFtcGxlXC5jb20+ICIgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn4zIHwgXAorCQkgIGdyZXAgIl5hdXRob3IgY2MgPGNjQHN1YlwuZXhhbXBsZVwuY29tPiAiICYmCisJCWdpdCByZXYtbGlzdCAtMSAtLXByZXR0eT1yYXcgcmVmcy9yZW1vdGVzL2dpdC1zdm5+NCB8IFwKKwkJICBncmVwICJeYXV0aG9yIGJiIDxiYkBleGFtcGxlXC5jb20+ICIgJiYKKwkJZ2l0IHJldi1saXN0IC0xIC0tcHJldHR5PXJhdyByZWZzL3JlbW90ZXMvZ2l0LXN2bn41IHwgXAorCQkgIGdyZXAgIl5hdXRob3IgYWEgPGFhQGV4YW1wbGVcLmNvbT4gIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1maWxlIG92ZXJyb2RlIGF1dGhvcnMtcHJvZycgJworCSgKKwkJY2QgeAorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZuIHwgXAorCQkgIGdyZXAgIl5hdXRob3IgRkZGRkZGRiBGRkZGRkZGIDxmRmZAb3RoZXJcLmV4YW1wbGVcLmNvbT4gIgorCSkKKycKKworZ2l0IC0tZ2l0LWRpcj14Ly5naXQgY29uZmlnIC0tdW5zZXQgc3ZuLmF1dGhvcnNmaWxlCitnaXQgLS1naXQtZGlyPXgvLmdpdCBjb25maWcgLS11bnNldCBzdm4uYXV0aG9yc3Byb2cKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXV0aG9ycy1wcm9nIGhhbmRsZWQgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHVzZXJuYW1lJyAnCisJc3ZuIG1rZGlyIC1tIGJhZCAtLXVzZXJuYW1lICJ4eXo7IHRvdWNoIGV2aWwiICIkc3ZucmVwbyIvYmFkICYmCisJKAorCQljZCB4ICYmCisJCWdpdCBzdm4gLS1hdXRob3JzLXByb2c9Li4vc3ZuLWF1dGhvcnMtcHJvZyBmZXRjaCAmJgorCQlnaXQgcmV2LWxpc3QgLTEgLS1wcmV0dHk9cmF3IHJlZnMvcmVtb3Rlcy9naXQtc3ZuIHwKKwkJZ3JlcCAiXmF1dGhvciB4eXo7IHRvdWNoIGV2aWwgPHh5ejsgdG91Y2ggZXZpbEBleGFtcGxlXC5jb20+ICIgJiYKKwkJISB0ZXN0IC1mIGV2aWwKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTEzOS1naXQtc3ZuLW5vbi11dGY4LWNvbW1pdGVuY29kaW5nLnNoIGIvdC90OTEzOS1naXQtc3ZuLW5vbi11dGY4LWNvbW1pdGVuY29kaW5nLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjIyZDgwYjAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTM5LWdpdC1zdm4tbm9uLXV0ZjgtY29tbWl0ZW5jb2Rpbmcuc2gKQEAgLTAsMCArMSw0NyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBFcmljIFdvbmcKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biByZWZ1c2VzIHRvIGRjb21taXQgbm9uLVVURjggbWVzc2FnZXMnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCisjIElTTy0yMDIyLUpQIGNhbiBwYXNzIGZvciB2YWxpZCBVVEYtOCwgc28gc2tpcHBpbmcgdGhhdCBpbiB0aGlzIHRlc3QKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIHNldHVwIiAnCisJCW1rZGlyICRIICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICIkSCB0ZXN0IiAkSCAiJHN2bnJlcG8iLyRIICYmCisJCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi8kSCAkSAorCScKK2RvbmUKKworZm9yIEggaW4gSVNPODg1OS0xIGV1Y0pQCitkbworCXRlc3RfZXhwZWN0X3N1Y2Nlc3MgIiRIIGNvbW1pdCBvbiBnaXQgc2lkZSIgJworCSgKKwkJY2QgJEggJiYKKwkJZ2l0IGNvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nICRIICYmCisJCWdpdCBjaGVja291dCAtYiB0IHJlZnMvcmVtb3Rlcy9naXQtc3ZuICYmCisJCWVjaG8gJEggPkYgJiYKKwkJZ2l0IGFkZCBGICYmCisJCWdpdCBjb21taXQgLWEgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvJEgudHh0ICYmCisJCUU9JChnaXQgY2F0LWZpbGUgY29tbWl0IEhFQUQgfCBzZWQgLW5lICJzL15lbmNvZGluZyAvL3AiKSAmJgorCQl0ZXN0ICJ6JEUiID0gInokSCIKKwkpCisJJworZG9uZQorCitmb3IgSCBpbiBJU084ODU5LTEgZXVjSlAKK2RvCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAiJEggZGNvbW1pdCB0byBzdm4iICcKKwkoCisJCWNkICRIICYmCisJCWdpdCBjb25maWcgLS11bnNldCBpMThuLmNvbW1pdGVuY29kaW5nICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gZGNvbW1pdAorCSkKKwknCitkb25lCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0MC1naXQtc3ZuLXJlc2V0LnNoIGIvdC90OTE0MC1naXQtc3ZuLXJlc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU4NTU5MDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQwLWdpdC1zdm4tcmVzZXQuc2gKQEAgLTAsMCArMSw2NiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBCZW4gSmFja3NvbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIHJlc2V0JworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHRlc3QgcmVwb3NpdG9yeScgJworCXN2bl9jbWQgY28gIiRzdm5yZXBvIiBzICYmCisJKAorCQljZCBzICYmCisJCW1rZGlyIHZpcyAmJgorCQllY2hvIGFsd2F5cyB2aXNpYmxlID4gdmlzL3Zpcy50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgdmlzICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjcmVhdGUgdmlzaWJsZSBmaWxlcyIgJiYKKwkJbWtkaXIgaGlkICYmCisJCWVjaG8gaW5pdGlhbGx5IGhpZGRlbiA+IGhpZC9oaWQudHh0ICYmCisJCXN2bl9jbWQgYWRkIGhpZCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiY3JlYXRlIGluaXRpYWxseSBoaWRkZW4gZmlsZXMiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJZWNobyBtb2QgPj4gdmlzL3Zpcy50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSB2aXMiICYmCisJCXN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIFNWTiByZXBvc2l0b3J5IHdpdGggaGlkZGVuIGRpcmVjdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIGcgJiYKKwkoIGNkIGcgJiYgZ2l0IHN2biBmZXRjaCAtLWlnbm9yZS1wYXRocz0iXmhpZCIgKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb2RpZnkgaGlkZGVuIGZpbGUgaW4gU1ZOIHJlcG8nICcKKwkoIGNkIHMgJiYKKwkgIGVjaG8gbW9kIGhpZGRlbiA+PiBoaWQvaGlkLnR4dCAmJgorCSAgc3ZuX2NtZCBjb21taXQgLW0gIm1vZGlmeSBoaWQiICYmCisJICBzdm5fY21kIHVwCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBmYWlscyBvbiBtb2RpZmllZCBoaWRkZW4gZmlsZScgJworCSggY2QgZyAmJgorCSAgZ2l0IHN2biBmaW5kLXJldiByZWZzL3JlbW90ZXMvZ2l0LXN2biA+IC4uL2V4cGVjdCAmJgorCSAgdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBmZXRjaCAyPiAuLi9lcnJvcnMgJiYKKwkgIGdpdCBzdm4gZmluZC1yZXYgcmVmcy9yZW1vdGVzL2dpdC1zdm4gPiAuLi9leHBlY3QyICkgJiYKKwlmZ3JlcCAibm90IGZvdW5kIGluIGNvbW1pdCIgZXJyb3JzICYmCisJdGVzdF9jbXAgZXhwZWN0IGV4cGVjdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzZXQgdW53aW5kcyBiYWNrIHRvIHIxJyAnCisJKCBjZCBnICYmCisJICBnaXQgc3ZuIHJlc2V0IC1yMSAmJgorCSAgZ2l0IHN2biBmaW5kLXJldiByZWZzL3JlbW90ZXMvZ2l0LXN2biA+IC4uL2V4cGVjdDIgKSAmJgorCWVjaG8gMSA+ZXhwZWN0ICYmCisJdGVzdF9jbXAgZXhwZWN0IGV4cGVjdDIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVmZXRjaCBzdWNjZWVkcyBub3QgaWdub3JpbmcgYW55IGZpbGVzJyAnCisJKCBjZCBnICYmCisJICBnaXQgc3ZuIGZldGNoICYmCisJICBnaXQgc3ZuIHJlYmFzZSAmJgorCSAgZmdyZXAgIm1vZCBoaWRkZW4iIGhpZC9oaWQudHh0CisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDEtZ2l0LXN2bi1tdWx0aXBsZS1icmFuY2hlcy5zaCBiL3QvdDkxNDEtZ2l0LXN2bi1tdWx0aXBsZS1icmFuY2hlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZTdmN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0MS1naXQtc3ZuLW11bHRpcGxlLWJyYW5jaGVzLnNoCkBAIC0wLDAgKzEsMTIyIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IE1hcmMgQnJhbmNoYXVkCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbXVsdGlwbGUgYnJhbmNoIGFuZCB0YWcgcGF0aHMgaW4gdGhlIHN2biByZXBvJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHN2bnJlcG8nICcKKwlta2Rpcglwcm9qZWN0IFwKKwkJcHJvamVjdC90cnVuayBcCisJCXByb2plY3QvYl9vbmUgXAorCQlwcm9qZWN0L2JfdHdvIFwKKwkJcHJvamVjdC90YWdzX0EgXAorCQlwcm9qZWN0L3RhZ3NfQiAmJgorCWVjaG8gMSA+IHByb2plY3QvdHJ1bmsvYS5maWxlICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gIiR0ZXN0X2Rlc2NyaXB0aW9uIiBwcm9qZWN0ICIkc3ZucmVwby9wcm9qZWN0IiAmJgorCXJtIC1yZiBwcm9qZWN0ICYmCisJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDEiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJICIkc3ZucmVwby9wcm9qZWN0L2Jfb25lL2ZpcnN0IiAmJgorCXN2bl9jbWQgY3AgLW0gIlRhZyAxIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19BLzEuMCIgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwby9wcm9qZWN0IiBzdm5fcHJvamVjdCAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJZWNobyAyID4gdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSAxIiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDIiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJCSAiJHN2bnJlcG8vcHJvamVjdC9iX29uZS9zZWNvbmQiICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyAyIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQS8yLjAiICYmCisJCWVjaG8gMyA+IHRydW5rL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgMiIgdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIkJyYW5jaCAzIiAiJHN2bnJlcG8vcHJvamVjdC90cnVuayIgXAorCQkJCQkgIiRzdm5yZXBvL3Byb2plY3QvYl90d28vMSIgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDMiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19BLzMuMCIgJiYKKwkJZWNobyA0ID4gdHJ1bmsvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSAzIiB0cnVuay9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiQnJhbmNoIDQiICIkc3ZucmVwby9wcm9qZWN0L3RydW5rIiBcCisJCQkJCSAiJHN2bnJlcG8vcHJvamVjdC9iX3R3by8yIiAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgNCIgIiRzdm5yZXBvL3Byb2plY3QvdHJ1bmsiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0EvNC4wIiAmJgorCQlzdm5fY21kIHVwICYmCisJCWVjaG8gNSA+IGJfb25lL2ZpcnN0L2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgNCIgYl9vbmUvZmlyc3QvYS5maWxlICYmCisJCXN2bl9jbWQgY3AgLW0gIlRhZyA1IiAiJHN2bnJlcG8vcHJvamVjdC9iX29uZS9maXJzdCIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQi92NSIgJiYKKwkJZWNobyA2ID4gYl9vbmUvc2Vjb25kL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgNSIgYl9vbmUvc2Vjb25kL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgNiIgIiRzdm5yZXBvL3Byb2plY3QvYl9vbmUvc2Vjb25kIiBcCisJCQkJICAgICAgIiRzdm5yZXBvL3Byb2plY3QvdGFnc19CL3Y2IiAmJgorCQllY2hvIDcgPiBiX3R3by8xL2EuZmlsZSAmJgorCQlzdm5fY21kIGNpIC1tICJDaGFuZ2UgNiIgYl90d28vMS9hLmZpbGUgJiYKKwkJc3ZuX2NtZCBjcCAtbSAiVGFnIDciICIkc3ZucmVwby9wcm9qZWN0L2JfdHdvLzEiIFwKKwkJCQkgICAgICAiJHN2bnJlcG8vcHJvamVjdC90YWdzX0IvdjciICYmCisJCWVjaG8gOCA+IGJfdHdvLzIvYS5maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gIkNoYW5nZSA3IiBiX3R3by8yL2EuZmlsZSAmJgorCQlzdm5fY21kIGNwIC1tICJUYWcgOCIgIiRzdm5yZXBvL3Byb2plY3QvYl90d28vMiIgXAorCQkJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0L3RhZ3NfQi92OCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIG11bHRpcGxlIGJyYW5jaCBhbmQgdGFnIHBhdGhzJyAnCisJZ2l0IHN2biBjbG9uZSAtVCB0cnVuayBcCisJCSAgICAgIC1iIGJfb25lLyogLS1icmFuY2hlcyBiX3R3by8qIFwKKwkJICAgICAgLXQgdGFnc19BLyogLS10YWdzIHRhZ3NfQiBcCisJCSAgICAgICIkc3ZucmVwby9wcm9qZWN0IiBnaXRfcHJvamVjdCAmJgorCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL2ZpcnN0ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9zZWNvbmQgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luLzEgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luLzIgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvMS4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzLzIuMCAmJgorCQlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9vcmlnaW4vdGFncy8zLjAgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvb3JpZ2luL3RhZ3MvNC4wICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL3Y1ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL3Y2ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL3Y3ICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL3Y4CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdNdWx0aXBsZSBicmFuY2ggb3IgdGFnIHBhdGhzIHJlcXVpcmUgLWQnICcKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gYnJhbmNoIC1tICJObyBuZXcgYnJhbmNoIiBOb3BlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gdGFnIC1tICJObyBuZXcgdGFnIiBUYWdsZXNzICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi9Ob3BlICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL29yaWdpbi90YWdzL1RhZ2xlc3MKKwkpICYmCisJKCBjZCBzdm5fcHJvamVjdCAmJgorCQlzdm5fY21kIHVwICYmCisJCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWQgYl9vbmUvTm9wZSAmJgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0IC1kIGJfdHdvL05vcGUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdCAtZCB0YWdzX0EvVGFnbGVzcyAmJgorCQl0ZXN0X211c3RfZmFpbCB0ZXN0IC1kIHRhZ3NfQi9UYWdsZXNzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgbmV3IGJyYW5jaGVzIGFuZCB0YWdzJyAnCisJKCBjZCBnaXRfcHJvamVjdCAmJgorCQlnaXQgc3ZuIGJyYW5jaCAtbSAiTmV3IGJyYW5jaCAxIiAtZCBiX29uZSBOZXcxICkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYgdGVzdCAtZSBiX29uZS9OZXcxL2EuZmlsZSApICYmCisKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCWdpdCBzdm4gYnJhbmNoIC1tICJOZXcgYnJhbmNoIDIiIC1kIGJfdHdvIE5ldzIgKSAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJc3ZuX2NtZCB1cCAmJiB0ZXN0IC1lIGJfdHdvL05ldzIvYS5maWxlICkgJiYKKworCSggY2QgZ2l0X3Byb2plY3QgJiYKKwkJZ2l0IHN2biBicmFuY2ggLXQgLW0gIk5ldyB0YWcgMSIgLWQgdGFnc19BIFRhZzEgKSAmJgorCSggY2Qgc3ZuX3Byb2plY3QgJiYKKwkJc3ZuX2NtZCB1cCAmJiB0ZXN0IC1lIHRhZ3NfQS9UYWcxL2EuZmlsZSApICYmCisKKwkoIGNkIGdpdF9wcm9qZWN0ICYmCisJCWdpdCBzdm4gdGFnIC1tICJOZXcgdGFnIDIiIC1kIHRhZ3NfQiBUYWcyICkgJiYKKwkoIGNkIHN2bl9wcm9qZWN0ICYmCisJCXN2bl9jbWQgdXAgJiYgdGVzdCAtZSB0YWdzX0IvVGFnMi9hLmZpbGUgKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDItZ2l0LXN2bi1zaGFsbG93LWNsb25lLnNoIGIvdC90OTE0Mi1naXQtc3ZuLXNoYWxsb3ctY2xvbmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTIxZWU1ZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDItZ2l0LXN2bi1zaGFsbG93LWNsb25lLnNoCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gc2hhbGxvdyBjbG9uZScKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IHJlcG9zaXRvcnknICcKKwlzdm5fY21kIG1rZGlyIC1tICJjcmVhdGUgc3RhbmRhcmQgbGF5b3V0IiBcCisJICAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMgIiRzdm5yZXBvIi90YWdzICYmCisJc3ZuX2NtZCBjcCAtbSAiYnJhbmNoIG9mZiB0cnVuayIgXAorCSAgIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2EgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvYnJhbmNoZXMvYSAmJgorCSgKKwkJY2QgYSAmJgorCQk+IGZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImFkZCBmb28iCisJKSAmJgorCXN0YXJ0X2h0dHBkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRydW5rIHdpdGggIi1yIEhFQUQiJyAnCisJZ2l0IHN2biBjbG9uZSAtciBIRUFEICIkc3ZucmVwby90cnVuayIgZyAmJgorCSggY2QgZyAmJiBnaXQgcmV2LXBhcnNlIC0tc3ltYm9saWMgLS12ZXJpZnkgSEVBRCApCisnCisKK3N0b3BfaHR0cGQKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQzLWdpdC1zdm4tZ2Muc2ggYi90L3Q5MTQzLWdpdC1zdm4tZ2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDU5NGUxYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDMtZ2l0LXN2bi1nYy5zaApAQCAtMCwwICsxLDUxIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IFJvYmVydCBBbGxhbiBaZWgKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBnYyBiYXNpYyB0ZXN0cycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGRpcmVjdG9yaWVzIGFuZCB0ZXN0IHJlcG8nICcKKwlta2RpciBpbXBvcnQgJiYKKwlta2RpciB0bXAgJiYKKwllY2hvICJTYW1wbGUgdGV4dCBmb3IgU3VidmVyc2lvbiByZXBvc2l0b3J5LiIgPiBpbXBvcnQvdGVzdC50eHQgJiYKKwlzdm5fY21kIGltcG9ydCAtbSAiaW1wb3J0IGZvciBnaXQgc3ZuIiBpbXBvcnQgIiRzdm5yZXBvIiA+IC9kZXYvbnVsbAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2tvdXQgd29ya2luZyBjb3B5IGZyb20gc3ZuJyBcCisJJ3N2bl9jbWQgY28gIiRzdm5yZXBvIiB0ZXN0X3djJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXQgc29tZSBwcm9wZXJ0aWVzIHRvIGNyZWF0ZSBhbiB1bmhhbmRsZWQubG9nIGZpbGUnICcKKwkoCisJCWNkIHRlc3Rfd2MgJiYKKwkJc3ZuX2NtZCBwcm9wc2V0IGZvbyBiYXIgdGVzdC50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInByb3BlcnR5IHNldCIKKwkpJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTZXR1cCByZXBvJyAnZ2l0IHN2biBpbml0ICIkc3ZucmVwbyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0ZldGNoIHJlcG8nICdnaXQgc3ZuIGZldGNoJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtYWtlIGJhY2t1cCBjb3B5IG9mIHVuaGFuZGxlZC5sb2cnICcKKwkgY3AgLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vdW5oYW5kbGVkLmxvZyB0bXAKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NyZWF0ZSBsZWZ0b3ZlciBpbmRleCcgJz4gLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vaW5kZXgnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gZ2MgcnVucycgJ2dpdCBzdm4gZ2MnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gaW5kZXggcmVtb3ZlZCcgJyEgdGVzdCAtZiAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi9pbmRleCcKKworaWYgdGVzdCAtciAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi91bmhhbmRsZWQubG9nLmd6Cit0aGVuCisJdGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYyBwcm9kdWNlcyBhIHZhbGlkIGd6aXAgZmlsZScgJworCQkgZ3VuemlwIC5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL3VuaGFuZGxlZC5sb2cuZ3oKKwkJJworZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYyBkb2VzIG5vdCBjaGFuZ2UgdW5oYW5kbGVkLmxvZyBmaWxlcycgJworCSB0ZXN0X2NtcCAuZ2l0L3N2bi9yZWZzL3JlbW90ZXMvZ2l0LXN2bi91bmhhbmRsZWQubG9nIHRtcC91bmhhbmRsZWQubG9nCisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDQtZ2l0LXN2bi1vbGQtcmV2X21hcC5zaCBiL3QvdDkxNDQtZ2l0LXN2bi1vbGQtcmV2X21hcC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NjAwYTM1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0NC1naXQtc3ZuLW9sZC1yZXZfbWFwLnNoCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgRXJpYyBXb25nCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gb2xkIHJldl9tYXAgcHJlc2VydmQnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdCByZXBvc2l0b3J5IHdpdGggb2xkIGxheW91dCcgJworCW1rZGlyIGkgJiYKKwkoY2QgaSAmJiA+IGEpICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0tIGkgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCXRlc3QgLWQgLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4vICYmCisJISB0ZXN0IC1lIC5naXQvc3ZuL2dpdC1zdm4vICYmCisJbXYgLmdpdC9zdm4vcmVmcy9yZW1vdGVzL2dpdC1zdm4gLmdpdC9zdm4vICYmCisJcm0gLXIgLmdpdC9zdm4vcmVmcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvbGQgbGF5b3V0IGNvbnRpbnVlcyB0byB3b3JrJyAnCisJc3ZuX2NtZCBpbXBvcnQgLW0tIGkgIiRzdm5yZXBvL2IiICYmCisJZ2l0IHN2biByZWJhc2UgJiYKKwllY2hvIGEgPj4gYi9hICYmCisJZ2l0IGFkZCBiL2EgJiYKKwlnaXQgY29tbWl0IC1tLSAtYSAmJgorCWdpdCBzdm4gZGNvbW1pdCAmJgorCSEgdGVzdCAtZCAuZ2l0L3N2bi9yZWZzLyAmJgorCXRlc3QgLWUgLmdpdC9zdm4vZ2l0LXN2bi8KKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQ1LWdpdC1zdm4tbWFzdGVyLWJyYW5jaC5zaCBiL3QvdDkxNDUtZ2l0LXN2bi1tYXN0ZXItYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY1NTkxMzcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQ1LWdpdC1zdm4tbWFzdGVyLWJyYW5jaC5zaApAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworIwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBpbml0aWFsIG1hc3RlciBicmFuY2ggaXMgInRydW5rIiBpZiBwb3NzaWJsZScKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0ZXN0IHJlcG9zaXRvcnknICcKKwlta2RpciBpICYmCisJPiBpL2EgJiYKKwlzdm5fY21kIGltcG9ydCAtbSB0cnVuayBpICIkc3ZucmVwby90cnVuayIgJiYKKwlzdm5fY21kIGltcG9ydCAtbSBiL2EgaSAiJHN2bnJlcG8vYnJhbmNoZXMvYSIgJiYKKwlzdm5fY21kIGltcG9ydCAtbSBiL2IgaSAiJHN2bnJlcG8vYnJhbmNoZXMvYiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBjbG9uZSAtLXN0ZGxheW91dCBzZXRzIHVwIHRydW5rIGFzIG1hc3RlcicgJworCWdpdCBzdm4gY2xvbmUgLXMgIiRzdm5yZXBvIiBnICYmCisJKAorCQljZCBnICYmCisJCXRlc3QgeGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9vcmlnaW4vdHJ1bmteMGAgPSBcCisJCSAgICAgeGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbWFzdGVyXjBgCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNDYtZ2l0LXN2bi1lbXB0eS1kaXJzLnNoIGIvdC90OTE0Ni1naXQtc3ZuLWVtcHR5LWRpcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmQzMTMwZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNDYtZ2l0LXN2bi1lbXB0eS1kaXJzLnNoCkBAIC0wLDAgKzEsMTU5IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IEVyaWMgV29uZworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGNyZWF0ZXMgZW1wdHkgZGlyZWN0b3JpZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIKKwlkbworCQlzdm5fY21kIG1rZGlyIC1tICJta2RpciAkaSIgIiRzdm5yZXBvIi8iJGkiCisJZG9uZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZScgJ2dpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiBjbG9uZWQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IGRpcmVjdG9yaWVzIGV4aXN0JyAnCisJKAorCQljZCBjbG9uZWQgJiYKKwkJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIKKwkJZG8KKwkJCWlmICEgdGVzdCAtZCAiJGkiCisJCQl0aGVuCisJCQkJZWNobyA+JjIgIiRpIGRvZXMgbm90IGV4aXN0IgorCQkJCWV4aXQgMQorCQkJZmkKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3B0aW9uIGF1dG9ta2RpcnMgc2V0IHRvIGZhbHNlJyAnCisJKAorCQlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIiBjbG9uZWQtbm8tbWtkaXJzICYmCisJCWNkIGNsb25lZC1uby1ta2RpcnMgJiYKKwkJZ2l0IGNvbmZpZyBzdm4tcmVtb3RlLnN2bi5hdXRvbWtkaXJzIGZhbHNlICYmCisJCWdpdCBzdm4gZmV0Y2ggJiYKKwkJZm9yIGkgaW4gYSBiIGMgZCBkL2UgZC9lL2YgIndlaXJkIGZpbGUgbmFtZSIKKwkJZG8KKwkJCWlmIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBleGlzdHMiCisJCQkJZXhpdCAxCisJCQlmaQorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtb3JlIGVtcHRpbmVzcycgJworCXN2bl9jbWQgbWtkaXIgLW0gImJhbmcgYmFuZyIgICIkc3ZucmVwbyIvIiEgISIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biByZWJhc2UgY3JlYXRlcyBlbXB0eSBkaXJlY3RvcnknICcKKwkoIGNkIGNsb25lZCAmJiBnaXQgc3ZuIHJlYmFzZSApICYmCisJdGVzdCAtZCBjbG9uZWQvIiEgISIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBta2RpcnMgcmVjcmVhdGVzIGVtcHR5IGRpcmVjdG9yaWVzJyAnCisJKAorCQljZCBjbG9uZWQgJiYKKwkJcm0gLXIgKiAmJgorCQlnaXQgc3ZuIG1rZGlycyAmJgorCQlmb3IgaSBpbiBhIGIgYyBkIGQvZSBkL2UvZiAid2VpcmQgZmlsZSBuYW1lIiAiISAhIgorCQlkbworCQkJaWYgISB0ZXN0IC1kICIkaSIKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiJGkgZG9lcyBub3QgZXhpc3QiCisJCQkJZXhpdCAxCisJCQlmaQorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIG1rZGlycyAtciB3b3JrcycgJworCSgKKwkJY2QgY2xvbmVkICYmCisJCXJtIC1yICogJiYKKwkJZ2l0IHN2biBta2RpcnMgLXI3ICYmCisJCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJCWRvCisJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIKKwkJCQlleGl0IDEKKwkJCWZpCisJCWRvbmUKKworCQlpZiB0ZXN0IC1kICIhICEiCisJCXRoZW4KKwkJCWVjaG8gPiYyICIkaSBzaG91bGQgbm90IGV4aXN0IgorCQkJZXhpdCAxCisJCWZpCisKKwkJZ2l0IHN2biBta2RpcnMgLXI4ICYmCisJCWlmICEgdGVzdCAtZCAiISAhIgorCQl0aGVuCisJCQllY2hvID4mMiAiJGkgbm90IGV4aXN0IgorCQkJZXhpdCAxCisJCWZpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHRydW5rJyAnCisJZm9yIGkgaW4gdHJ1bmsgdHJ1bmsvYSB0cnVuay8id2VpcmQgZmlsZSBuYW1lIgorCWRvCisJCXN2bl9jbWQgbWtkaXIgLW0gIm1rZGlyICRpIiAiJHN2bnJlcG8iLyIkaSIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHRydW5rJyAnZ2l0IHN2biBjbG9uZSAtcyAiJHN2bnJlcG8iIHRydW5rJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdlbXB0eSBkaXJlY3RvcmllcyBpbiB0cnVuayBleGlzdCcgJworCSgKKwkJY2QgdHJ1bmsgJiYKKwkJZm9yIGkgaW4gYSAid2VpcmQgZmlsZSBuYW1lIgorCQlkbworCQkJaWYgISB0ZXN0IC1kICIkaSIKKwkJCXRoZW4KKwkJCQllY2hvID4mMiAiJGkgZG9lcyBub3QgZXhpc3QiCisJCQkJZXhpdCAxCisJCQlmaQorCQlkb25lCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgYSB0b3AtbGV2ZWwgZGlyZWN0b3J5IGZyb20gc3ZuJyAnCisJc3ZuX2NtZCBybSAtbSAicmVtb3ZlIGQiICIkc3ZucmVwbyIvZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmVkIHRvcC1sZXZlbCBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QnICcKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwbyIgcmVtb3ZlZCAmJgorCXRlc3QgISAtZSByZW1vdmVkL2QKKworJwordW5oYW5kbGVkPS5naXQvc3ZuL3JlZnMvcmVtb3Rlcy9naXQtc3ZuL3VuaGFuZGxlZC5sb2cKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBzdm4gZ2MtZWQgZmlsZXMgd29yaycgJworCSgKKwkJY2QgcmVtb3ZlZCAmJgorCQlnaXQgc3ZuIGdjICYmCisJCTogQ29tcHJlc3M6OlpsaWIgbWF5IG5vdCBiZSBhdmFpbGFibGUgJiYKKwkJaWYgdGVzdCAtZiAiJHVuaGFuZGxlZCIuZ3oKKwkJdGhlbgorCQkJc3ZuX2NtZCBta2RpciAtbSBneiAiJHN2bnJlcG8iL2d6ICYmCisJCQlnaXQgcmVzZXQgLS1oYXJkICQoZ2l0IHJldi1saXN0IEhFQUQgfCB0YWlsIC0xKSAmJgorCQkJZ2l0IHN2biByZWJhc2UgJiYKKwkJCXRlc3QgLWYgIiR1bmhhbmRsZWQiLmd6ICYmCisJCQl0ZXN0IC1mICIkdW5oYW5kbGVkIiAmJgorCQkJZm9yIGkgaW4gYSBiIGMgIndlaXJkIGZpbGUgbmFtZSIgZ3ogIiEgISIKKwkJCWRvCisJCQkJaWYgISB0ZXN0IC1kICIkaSIKKwkJCQl0aGVuCisJCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIKKwkJCQkJZXhpdCAxCisJCQkJZmkKKwkJCWRvbmUKKwkJZmkKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE0Ny1naXQtc3ZuLWluY2x1ZGUtcGF0aHMuc2ggYi90L3Q5MTQ3LWdpdC1zdm4taW5jbHVkZS1wYXRocy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOTBmZjU4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE0Ny1naXQtc3ZuLWluY2x1ZGUtcGF0aHMuc2gKQEAgLTAsMCArMSwxNDkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMgUGF1bCBXYWxtc2xleSAtIGJhc2VkIG9uIHQ5MTM0IGJ5IFZpdGFseSBTaHVrZWxhCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcHJvcGVydHkgdGVzdHMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdGVzdCByZXBvc2l0b3J5JyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHMgJiYKKwkoCisJCWNkIHMgJiYKKwkJbWtkaXIgcXFxIHd3dyB4eHggJiYKKwkJZWNobyB0ZXN0X3FxcSA+IHFxcS90ZXN0X3FxcS50eHQgJiYKKwkJZWNobyB0ZXN0X3d3dyA+IHd3dy90ZXN0X3d3dy50eHQgJiYKKwkJZWNobyB0ZXN0X3h4eCA+IHh4eC90ZXN0X3h4eC50eHQgJiYKKwkJc3ZuX2NtZCBhZGQgcXFxICYmCisJCXN2bl9jbWQgYWRkIHd3dyAmJgorCQlzdm5fY21kIGFkZCB4eHggJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImNyZWF0ZSBzb21lIGZpbGVzIiAmJgorCQlzdm5fY21kIHVwICYmCisJCWVjaG8gaGkgPj4gd3d3L3Rlc3Rfd3d3LnR4dCAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibW9kaWZ5IHd3dy90ZXN0X3d3dy50eHQiICYmCisJCXN2bl9jbWQgdXAKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGFuIFNWTiByZXBvc2l0b3J5IHdpdGggZmlsdGVyIHRvIGluY2x1ZGUgcXFxIGRpcmVjdG9yeScgJworCWdpdCBzdm4gY2xvbmUgLS1pbmNsdWRlLXBhdGhzPSJxcXEiICIkc3ZucmVwbyIgZyAmJgorCWVjaG8gdGVzdF9xcXEgPiBleHBlY3QgJiYKKwlmb3IgaSBpbiBnLyovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJdGVzdF9jbXAgZXhwZWN0IGV4cGVjdDIKKycKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0K2ZldGNoIGFuIFNWTiByZXBvc2l0b3J5IHdpdGggaW5jbHVkZWQgcXFxIGRpcmVjdG9yeScgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iIGMgJiYKKwkoIGNkIGMgJiYgZ2l0IHN2biBmZXRjaCAtLWluY2x1ZGUtcGF0aHM9InFxcSIgKSAmJgorCXJtIGV4cGVjdDIgJiYKKwllY2hvIHRlc3RfcXFxID4gZXhwZWN0ICYmCisJZm9yIGkgaW4gYy8qLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCXRlc3RfY21wIGV4cGVjdCBleHBlY3QyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBpbmNsdWRlLXBhdGhzIGNvbmZpZyBzYXZlZCBieSBjbG9uZScgJworCSgKKwkgICAgY2QgZyAmJgorCSAgICBnaXQgY29uZmlnIC0tZ2V0IHN2bi1yZW1vdGUuc3ZuLmluY2x1ZGUtcGF0aHMgfCBmZ3JlcCAicXFxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2Ygd3d3JyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gYiA+PiBxcXEvdGVzdF9xcXEudHh0ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJTVk4tc2lkZSBjaGFuZ2Ugb3V0c2lkZSBvZiB3d3ciICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJc3ZuX2NtZCBsb2cgLXYgfCBmZ3JlcCAiU1ZOLXNpZGUgY2hhbmdlIG91dHNpZGUgb2Ygd3d3IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gKGNvbmZpZyBpbmNsdWRlKScgJworCSgKKwkJY2QgZyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAob3B0aW9uIGluY2x1ZGUpJyAnCisJKAorCQljZCBjICYmCisJCWdpdCBzdm4gcmViYXNlIC0taW5jbHVkZS1wYXRocz0icXFxIiAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG4iID4gZXhwZWN0ICYmCisJCWZvciBpIGluICovKi50eHQ7IGRvIGNhdCAkaSA+PiBleHBlY3QyOyBkb25lICYmCisJCXRlc3RfY21wIGV4cGVjdDIgZXhwZWN0ICYmCisJCXJtIGV4cGVjdCBleHBlY3QyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIGlnbm9yZWQgd3d3JyAnCisJKAorCQljZCBzICYmCisJCWVjaG8gemFxID4+IHd3dy90ZXN0X3d3dy50eHQKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbnNpZGUgb2Ygd3d3L3Rlc3Rfd3d3LnR4dCIgJiYKKwkJc3ZuX2NtZCB1cCAmJgorCQlzdm5fY21kIGxvZyAtdiB8IGZncmVwICJTVk4tc2lkZSBjaGFuZ2UgaW5zaWRlIG9mIHd3dy90ZXN0X3d3dy50eHQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZ2l0IHN2bi1jbG9uZWQgcmVwbyAoY29uZmlnIGluY2x1ZGUpJyAnCisJKAorCQljZCBnICYmCisJCWdpdCBzdm4gcmViYXNlICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIChvcHRpb24gaW5jbHVkZSknICcKKwkoCisJCWNkIGMgJiYKKwkJZ2l0IHN2biByZWJhc2UgLS1pbmNsdWRlLXBhdGhzPSJxcXEiICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1NWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGluY2x1ZGVkIHFxcScgJworCSgKKwkJY2QgcyAmJgorCQllY2hvIGN2ZiA+PiB3d3cvdGVzdF93d3cudHh0CisJCWVjaG8geWdnID4+IHFxcS90ZXN0X3FxcS50eHQKKwkJc3ZuX2NtZCBjb21taXQgLW0gIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGlnbm9yZWQgd3d3IiAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbG9nIC12IHwgZmdyZXAgIlNWTi1zaWRlIGNoYW5nZSBpbiBhbmQgb3V0IG9mIGlnbm9yZWQgd3d3IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIGdpdCBzdm4tY2xvbmVkIHJlcG8gYWdhaW4gKGNvbmZpZyBpbmNsdWRlKScgJworCSgKKwkJY2QgZyAmJgorCQlnaXQgc3ZuIHJlYmFzZSAmJgorCQlwcmludGYgInRlc3RfcXFxXG5iXG55Z2dcbiIgPiBleHBlY3QgJiYKKwkJZm9yIGkgaW4gKi8qLnR4dDsgZG8gY2F0ICRpID4+IGV4cGVjdDI7IGRvbmUgJiYKKwkJdGVzdF9jbXAgZXhwZWN0MiBleHBlY3QgJiYKKwkJcm0gZXhwZWN0IGV4cGVjdDIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VwZGF0ZSBnaXQgc3ZuLWNsb25lZCByZXBvIGFnYWluIChvcHRpb24gaW5jbHVkZSknICcKKwkoCisJCWNkIGMgJiYKKwkJZ2l0IHN2biByZWJhc2UgLS1pbmNsdWRlLXBhdGhzPSJxcXEiICYmCisJCXByaW50ZiAidGVzdF9xcXFcbmJcbnlnZ1xuIiA+IGV4cGVjdCAmJgorCQlmb3IgaSBpbiAqLyoudHh0OyBkbyBjYXQgJGkgPj4gZXhwZWN0MjsgZG9uZSAmJgorCQl0ZXN0X2NtcCBleHBlY3QyIGV4cGVjdCAmJgorCQlybSBleHBlY3QgZXhwZWN0MgorCSkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTQ4LWdpdC1zdm4tcHJvcHNldC5zaCBiL3QvdDkxNDgtZ2l0LXN2bi1wcm9wc2V0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjEwMjYzOTAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTQ4LWdpdC1zdm4tcHJvcHNldC5zaApAQCAtMCwwICsxLDk1IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFsZnJlZCBQZXJsc3RlaW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBwcm9wc2V0IHRlc3RzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworZm9vX3N1YmRpcjI9InN1YmRpci9zdWJkaXIyL2Zvb19zdWJkaXIyIgorCitzZXQgLWUKK21rZGlyIGltcG9ydCAmJgorKHNldCAtZSA7IGNkIGltcG9ydAorCW1rZGlyIHN1YmRpcgorCW1rZGlyIHN1YmRpci9zdWJkaXIyCisJdG91Y2ggZm9vIAkJIyBmb3IgJ2FkZCBwcm9wcyB0b3AgbGV2ZWwnCisJdG91Y2ggc3ViZGlyL2Zvb19zdWJkaXIgIyBmb3IgJ2FkZCBwcm9wcyByZWxhdGl2ZScKKwl0b3VjaCAiJGZvb19zdWJkaXIyIgkjIGZvciAnYWRkIHByb3BzIHN1YmRpcicKKwlzdm5fY21kIGltcG9ydCAtbSAnaW1wb3J0IGZvciBnaXQgc3ZuJyAuICIkc3ZucmVwbyIgPi9kZXYvbnVsbAorKQorcm0gLXJmIGltcG9ydAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIGdpdCBzdm4nICcKKwlnaXQgc3ZuIGluaXQgIiRzdm5yZXBvIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggcmV2aXNpb25zIGZyb20gc3ZuJyAnCisJZ2l0IHN2biBmZXRjaAorCScKKworc2V0X3Byb3BzICgpIHsKKwlzdWJkaXI9IiQxIgorCWZpbGU9IiQyIgorCXNoaWZ0O3NoaWZ0OworCShjZCAiJHN1YmRpciIgJiYKKwkJd2hpbGUgWyAkIyAtZ3QgMCBdIDsgZG8KKwkJCWdpdCBzdm4gcHJvcHNldCAiJDEiICIkMiIgIiRmaWxlIiB8fCBleGl0IDEKKwkJCXNoaWZ0O3NoaWZ0OworCQlkb25lICYmCisJCWVjaG8gaGVsbG8gPj4gIiRmaWxlIiAmJgorCQlnaXQgY29tbWl0IC1tICJ0ZXN0aW5nIHByb3BzZXQiICIkZmlsZSIpCit9CisKK2NvbmZpcm1fcHJvcHMgKCkgeworCXN1YmRpcj0iJDEiCisJZmlsZT0iJDIiCisJc2hpZnQ7c2hpZnQ7CisJKHNldCAtZSA7IGNkICJzdm5fcHJvamVjdC8kc3ViZGlyIiAmJgorCQl3aGlsZSBbICQjIC1ndCAwIF0gOyBkbworCQkJdGVzdCAiJChzdm5fY21kIHByb3BnZXQgIiQxIiAiJGZpbGUiKSIgPSAiJDIiIHx8IGV4aXQgMQorCQkJc2hpZnQ7c2hpZnQ7CisJCWRvbmUpCit9CisKKworI1RoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGhhcyBhIHJlc3RyaWN0aW9uOgorI3N2biBwcm9wc2V0IHdpbGwgYmUgdGFrZW4gYXMgYSBkZWx0YSBmb3Igc3ZuIGRjb21taXQgb25seQorI2lmIHRoZSBmaWxlIGNvbnRlbnQgaXMgYWxzbyBtb2RpZmllZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHByb3BzIHRvcCBsZXZlbCcgJworCXNldF9wcm9wcyAiLiIgImZvbyIgInN2bjprZXl3b3JkcyIgIkZyZWVCU0Q9JUgiICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHN2bl9wcm9qZWN0ICYmCisJY29uZmlybV9wcm9wcyAiLiIgImZvbyIgInN2bjprZXl3b3JkcyIgIkZyZWVCU0Q9JUgiICYmCisJcm0gLXJmIHN2bl9wcm9qZWN0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbXVsdGlwbGUgcHJvcHMnICcKKwlzZXRfcHJvcHMgIi4iICJmb28iIFwKKwkJInN2bjprZXl3b3JkcyIgIkZyZWVCU0Q9JUgiIGZic2Q6bm9rZXl3b3JkcyB5ZXMgJiYKKwlnaXQgc3ZuIGRjb21taXQgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgc3ZuX3Byb2plY3QgJiYKKwljb25maXJtX3Byb3BzICIuIiAiZm9vIiBcCisJCSJzdm46a2V5d29yZHMiICJGcmVlQlNEPSVIIiBmYnNkOm5va2V5d29yZHMgeWVzICYmCisJcm0gLXJmIHN2bl9wcm9qZWN0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcHJvcHMgc3ViZGlyJyAnCisJc2V0X3Byb3BzICIuIiAiJGZvb19zdWJkaXIyIiBzdm46a2V5d29yZHMgIkZyZWVCU0Q9JUgiICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHN2bl9wcm9qZWN0ICYmCisJY29uZmlybV9wcm9wcyAiLiIgIiRmb29fc3ViZGlyMiIgInN2bjprZXl3b3JkcyIgIkZyZWVCU0Q9JUgiICYmCisJcm0gLXJmIHN2bl9wcm9qZWN0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcHJvcHMgcmVsYXRpdmUnICcKKwlzZXRfcHJvcHMgInN1YmRpci9zdWJkaXIyIiAiLi4vZm9vX3N1YmRpciIgXAorCQlzdm46a2V5d29yZHMgIkZyZWVCU0Q9JUgiICYmCisJZ2l0IHN2biBkY29tbWl0ICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iIHN2bl9wcm9qZWN0ICYmCisJY29uZmlybV9wcm9wcyAic3ViZGlyL3N1YmRpcjIiICIuLi9mb29fc3ViZGlyIiBcCisJCXN2bjprZXl3b3JkcyAiRnJlZUJTRD0lSCIgJiYKKwlybSAtcmYgc3ZuX3Byb2plY3QKKwknCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTAtc3ZrLW1lcmdldGlja2V0cy5zaCBiL3QvdDkxNTAtc3ZrLW1lcmdldGlja2V0cy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNGMyNDIxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MC1zdmstbWVyZ2V0aWNrZXRzLnNoCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcgU2FtIFZpbGFpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3ZuIHN2ayBtZXJnZSB0aWNrZXRzJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbG9hZCBzdmsgZGVwb3QnICIKKwlzdm5hZG1pbiBsb2FkIC1xICckcmF3c3ZucmVwbycgXAorCSAgPCAnJFRFU1RfRElSRUNUT1JZL3Q5MTUwL3N2ay1tZXJnZS5kdW1wJyAmJgorCWdpdCBzdm4gaW5pdCAtLW1pbmltaXplLXVybCAtUiBzdmttZXJnZSBcCisJICAtLXJld3JpdGUtcm9vdD1odHRwOi8vc3ZuLmV4YW1wbGUub3JnIFwKKwkgIC1UIHRydW5rIC1iIGJyYW5jaGVzICckc3ZucmVwbycgJiYKKwlnaXQgc3ZuIGZldGNoIC0tYWxsCisJIgorCit1dWlkPWI0ODI4OWIyLTljMDgtNGQ3Mi1hZjM3LTAzNThhNDBiOWMxNQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdmsgbWVyZ2VzIHdlcmUgcmVwcmVzZW50ZWQgY29taW5nIGluJyAiCisJWyBgZ2l0IGNhdC1maWxlIGNvbW1pdCBIRUFEIHwgZ3JlcCBwYXJlbnQgfCB3YyAtbGAgLWVxIDIgXQorCSIKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTUwL21ha2Utc3ZrLWR1bXAgYi90L3Q5MTUwL21ha2Utc3ZrLWR1bXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjI0MmYxNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTAvbWFrZS1zdmstZHVtcApAQCAtMCwwICsxLDU3IEBACisjIS9iaW4vc2gKKyMKKyMgdGhpcyBzY3JpcHQgc2V0cyB1cCBhIFN1YnZlcnNpb24gcmVwb3NpdG9yeSBmb3IgTWFrZWZpbGUgaW4gdGhlCisjIGZpcnN0IGV2ZXIgZ2l0IG1lcmdlLCBhcyBpZiBpdCB3ZXJlIGRvbmUgd2l0aCBzdmsuCisjCisKK3NldCAtZQorCitzdmsgZGVwb3RtYXAgZm9vIH4vLnN2ay9mb28KK3N2ayBjbyAvZm9vLyBmb28KK2NkIGZvbworbWtkaXIgdHJ1bmsKK21rZGlyIGJyYW5jaGVzCitzdmsgYWRkIHRydW5rIGJyYW5jaGVzCitzdmsgY29tbWl0IC1tICJTZXR1cCB0cnVuayBhbmQgYnJhbmNoZXMiCitjZCB0cnVuaworCitnaXQgY2F0LWZpbGUgYmxvYiA2NjgzNDYzZTpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdmsgYWRkIE1ha2VmaWxlIAorCitzdmsgY29tbWl0IC1tICJhbmNlc3RvciIKK2NkIC4uCitzdmsgY3AgdHJ1bmsgYnJhbmNoZXMvbGVmdAorCitzdmsgY29tbWl0IC1tICJtYWtlIGxlZnQgYnJhbmNoIgorY2QgYnJhbmNoZXMvbGVmdC8KKworZ2l0IGNhdC1maWxlIGJsb2IgNTg3M2I2N2U6TWFrZWZpbGUgPiBNYWtlZmlsZQorc3ZrIGNvbW1pdCAtbSAibGVmdCB1cGRhdGUgMSIKKworY2QgLi4vLi4vdHJ1bmsKK2dpdCBjYXQtZmlsZSBibG9iIDc1MTE4YjEzOk1ha2VmaWxlID4gTWFrZWZpbGUKK3N2ayBjb21taXQgLW0gInRydW5rIHVwZGF0ZSIKKworY2QgLi4vYnJhbmNoZXMvbGVmdAorZ2l0IGNhdC1maWxlIGJsb2IgYjUwMzlkYjY6TWFrZWZpbGUgPiBNYWtlZmlsZQorc3ZrIGNvbW1pdCAtbSAibGVmdCB1cGRhdGUgMiIKKworY2QgLi4vLi4vdHJ1bmsKK3N2ayBzbSAvZm9vL2JyYW5jaGVzL2xlZnQKKyMgaW4gdGhlb3J5IHdlIGNvdWxkIGRlbGV0ZSB0aGUgImxlZnQiIGJyYW5jaCBoZXJlLCBidXQgaXQncyBub3QKKyMgcmVxdWlyZWQgc28gZG9uJ3QgZG8gaXQsIGluIGNhc2UgcGVvcGxlIHN0YXJ0IGdldHRpbmcgaWRlYXMgOykKK3N2ayBjb21taXQgLW0gIm1lcmdlIGJyYW5jaCAnbGVmdCcgaW50byAndHJ1bmsnIgorCitnaXQgY2F0LWZpbGUgYmxvYiBiNTFhZDQzMTpNYWtlZmlsZSA+IE1ha2VmaWxlCisKK3N2ayBkaWZmIE1ha2VmaWxlICYmIGVjaG8gIkhleSEgIE5vIGRpZmZlcmVuY2VzLCBtYWdpYyIKKworY2QgLi4vLi4KKworc3ZuYWRtaW4gZHVtcCB+Ly5zdmsvZm9vID4gc3ZrLW1lcmdlLmR1bXAKKworc3ZrIGNvIC1kIGZvbworcm0gLXJmIGZvbworc3ZrIGRlcG90bWFwIC1kIC9mb28vCitybSAtcmYgfi8uc3ZrL2ZvbworCmRpZmYgLS1naXQgYS90L3Q5MTUwL3N2ay1tZXJnZS5kdW1wIGIvdC90OTE1MC9zdmstbWVyZ2UuZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmY3MGRiCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MC9zdmstbWVyZ2UuZHVtcApAQCAtMCwwICsxLDYxNiBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogYjQ4Mjg5YjItOWMwOC00ZDcyLWFmMzctMDM1OGE0MGI5YzE1CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjAzLjcyMjk2OVoKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMworQ29udGVudC1sZW5ndGg6IDEyMworCitLIDcKK3N2bjpsb2cKK1YgMjQKK1NldHVwIHRydW5rIGFuZCBicmFuY2hlcworSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA0LjkyNzUzM1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwNgorQ29udGVudC1sZW5ndGg6IDEwNgorCitLIDcKK3N2bjpsb2cKK1YgOAorYW5jZXN0b3IKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorc2FtdgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0xMC0xOVQyMzo0NDowNS44MzU1ODVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMjQwMQorVGV4dC1jb250ZW50LW1kNTogYmZkOGZmNzc4ZDE0OTJkYzY3NTg1NjczNzMxNzZhODkKK0NvbnRlbnQtbGVuZ3RoOiAyNDExCisKK1BST1BTLUVORAorIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTE1CitDb250ZW50LWxlbmd0aDogMTE1CisKK0sgNworc3ZuOmxvZworViAxNgorbWFrZSBsZWZ0IGJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA2LjcxOTczN1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTEyCitDb250ZW50LWxlbmd0aDogMTEyCisKK0sgNworc3ZuOmxvZworViAxMworbGVmdCB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA3LjE2NzY2NloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjQ2NQorVGV4dC1jb250ZW50LW1kNTogMTZlMzhkOTc1M2IwNjE3MzE2NTA1NjFjZTAxYjExOTUKK0NvbnRlbnQtbGVuZ3RoOiAyNDY1CisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDEyCit0cnVuayB1cGRhdGUKK0sgMTAKK3N2bjphdXRob3IKK1YgNAorc2FtdgorSyA4Citzdm46ZGF0ZQorViAyNworMjAwOS0xMC0xOVQyMzo0NDowNy42MTk2MzNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTIxCitUZXh0LWNvbnRlbnQtbWQ1OiAwNjY4NDE4YTYyMTMzM2Y0YWE4YjY2MzJjZDYzZTJhMAorQ29udGVudC1sZW5ndGg6IDI1MjEKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZSBtZXJnZS1jYWNoZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWNhY2hlOiBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1jYWNoZSBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTEyCitDb250ZW50LWxlbmd0aDogMTEyCisKK0sgNworc3ZuOmxvZworViAxMworbGVmdCB1cGRhdGUgMgorSyAxMAorc3ZuOmF1dGhvcgorViA0CitzYW12CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDA5LTEwLTE5VDIzOjQ0OjA4LjA2NzU1NFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjU5MworVGV4dC1jb250ZW50LW1kNTogNWNjZmY2ODlmYjI5MGUwMGI4NWZlMThlZTUwYzU0YmEKK0NvbnRlbnQtbGVuZ3RoOiAyNTkzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDcKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMQorQ29udGVudC1sZW5ndGg6IDEzMQorCitLIDcKK3N2bjpsb2cKK1YgMzIKK21lcmdlIGJyYW5jaCAnbGVmdCcgaW50byAndHJ1bmsnCitLIDEwCitzdm46YXV0aG9yCitWIDQKK3NhbXYKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMDktMTAtMTlUMjM6NDQ6MDguOTcxODAxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA4MworQ29udGVudC1sZW5ndGg6IDgzCisKK0sgOQorc3ZrOm1lcmdlCitWIDUzCitiNDgyODliMi05YzA4LTRkNzItYWYzNy0wMzU4YTQwYjljMTU6L2JyYW5jaGVzL2xlZnQ6NgorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNzEzCitUZXh0LWNvbnRlbnQtbWQ1OiAwYWZiZTM0ZjI0NGNkNjYyYjFmOTdkNzA4YzY4N2Y5MAorQ29udGVudC1sZW5ndGg6IDI3MTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZSBtZXJnZS1jYWNoZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK21lcmdlLWNhY2hlOiBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1jYWNoZSBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKZGlmZiAtLWdpdCBhL3QvdDkxNTEtc3ZuLW1lcmdlaW5mby5zaCBiL3QvdDkxNTEtc3ZuLW1lcmdlaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40ZjZjMDZlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MS1zdm4tbWVyZ2VpbmZvLnNoCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgU2FtIFZpbGFpbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtc3ZuIHN2biBtZXJnZWluZm8gcHJvcGVydGllcycKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXAnICIKKwlzdm5hZG1pbiBsb2FkIC1xICckcmF3c3ZucmVwbycgXAorCSAgPCAnJFRFU1RfRElSRUNUT1JZL3Q5MTUxL3N2bi1tZXJnZWluZm8uZHVtcCcgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVIgc3ZubWVyZ2UgXAorCSAgLS1yZXdyaXRlLXJvb3Q9aHR0cDovL3N2bi5leGFtcGxlLm9yZyBcCisJICAtVCB0cnVuayAtYiBicmFuY2hlcyAnJHN2bnJlcG8nICYmCisJZ2l0IHN2biBmZXRjaCAtLWFsbAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWxsIHN2biBtZXJnZXMgYmVjYW1lIGdpdCBtZXJnZSBjb21taXRzJyAnCisJdW5tYXJrZWQ9JChnaXQgcmV2LWxpc3QgLS1wYXJlbnRzIC0tYWxsIC0tZ3JlcD1NZXJnZSB8CisJCWdyZXAgLXYgIiAuKiAiIHwgY3V0IC1mMSAtZCIgIikgJiYKKwlbIC16ICIkdW5tYXJrZWQiIF0KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZXJyeSBwaWNrcyBkaWQgbm90IGJlY29tZSBnaXQgbWVyZ2UgY29tbWl0cycgJworCWJhZF9jaGVycmllcz0kKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1hbGwgLS1ncmVwPUNoZXJyeSB8CisJCWdyZXAgIiAuKiAiIHwgY3V0IC1mMSAtZCIgIikgJiYKKwlbIC16ICIkYmFkX2NoZXJyaWVzIiBdCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdm4gbm9uLW1lcmdlIG1lcmdlIGNvbW1pdHMgZGlkIG5vdCBiZWNvbWUgZ2l0IG1lcmdlIGNvbW1pdHMnICcKKwliYWRfbm9uX21lcmdlcz0kKGdpdCByZXYtbGlzdCAtLXBhcmVudHMgLS1hbGwgLS1ncmVwPW5vbi1tZXJnZSB8CisJCWdyZXAgIiAuKiAiIHwgY3V0IC1mMSAtZCIgIikgJiYKKwlbIC16ICIkYmFkX25vbl9tZXJnZXMiIF0KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdCBtYWRlIHRvIG1lcmdlZCBicmFuY2ggaXMgcmVhY2hhYmxlIGZyb20gdGhlIG1lcmdlJyAnCisJYmVmb3JlX2NvbW1pdD0kKGdpdCByZXYtbGlzdCAtLWFsbCAtLWdyZXA9InRydW5rIGNvbW1pdCBiZWZvcmUgbWVyZ2luZyB0cnVuayB0byBiMiIpICYmCisJbWVyZ2VfY29tbWl0PSQoZ2l0IHJldi1saXN0IC0tYWxsIC0tZ3JlcD0iTWVyZ2UgdHJ1bmsgdG8gYjIiKSAmJgorCW5vdF9yZWFjaGFibGU9JChnaXQgcmV2LWxpc3QgLTEgJGJlZm9yZV9jb21taXQgLS1ub3QgJG1lcmdlX2NvbW1pdCkgJiYKKwlbIC16ICIkbm90X3JlYWNoYWJsZSIgXQorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWVyZ2luZyB0d28gYnJhbmNoZXMgaW4gb25lIGNvbW1pdCBpcyBkZXRlY3RlZCBjb3JyZWN0bHknICcKKwlmMV9jb21taXQ9JChnaXQgcmV2LWxpc3QgLS1hbGwgLS1ncmVwPSJtYWtlIGYxIGJyYW5jaCBmcm9tIHRydW5rIikgJiYKKwlmMl9jb21taXQ9JChnaXQgcmV2LWxpc3QgLS1hbGwgLS1ncmVwPSJtYWtlIGYyIGJyYW5jaCBmcm9tIHRydW5rIikgJiYKKwltZXJnZV9jb21taXQ9JChnaXQgcmV2LWxpc3QgLS1hbGwgLS1ncmVwPSJNZXJnZSBmMSBhbmQgZjIgdG8gdHJ1bmsiKSAmJgorCW5vdF9yZWFjaGFibGU9JChnaXQgcmV2LWxpc3QgLTEgJGYxX2NvbW1pdCAkZjJfY29tbWl0IC0tbm90ICRtZXJnZV9jb21taXQpICYmCisJWyAteiAiJG5vdF9yZWFjaGFibGUiIF0KKwknCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2V2ZXJ5dGhpbmcgZ290IG1lcmdlZCBpbiB0aGUgZW5kJyAnCisJdW5tZXJnZWQ9JChnaXQgcmV2LWxpc3QgLS1hbGwgLS1ub3QgbWFzdGVyKSAmJgorCVsgLXogIiR1bm1lcmdlZCIgXQorCScKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTUxLy5naXRpZ25vcmUgYi90L3Q5MTUxLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3YzM3ZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTEvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK2ZvbworZm9vLnN2bgpkaWZmIC0tZ2l0IGEvdC90OTE1MS9tYWtlLXN2bm1lcmdlLWR1bXAgYi90L3Q5MTUxL21ha2Utc3ZubWVyZ2UtZHVtcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMWUxMzhjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1MS9tYWtlLXN2bm1lcmdlLWR1bXAKQEAgLTAsMCArMSwzMDUgQEAKKyMhL2Jpbi9zaAorIworIyB0aGlzIHNjcmlwdCBzZXRzIHVwIGEgU3VidmVyc2lvbiByZXBvc2l0b3J5IGZvciBNYWtlZmlsZSBpbiB0aGUKKyMgZmlyc3QgZXZlciBnaXQgbWVyZ2UsIGFzIGlmIGl0IHdlcmUgZG9uZSB3aXRoIHN2bm1lcmdlIChTVk4gMS41KykKKyMKKworcm0gLXJmIGZvby5zdm4gZm9vCitzZXQgLWUKKworbWtkaXIgZm9vLnN2bgorc3ZuYWRtaW4gY3JlYXRlIGZvby5zdm4KK3N2biBjbyBmaWxlOi8vYHB3ZGAvZm9vLnN2biBmb28KKworY29tbWl0KCkgeworICAgIGk9JCgoICQxICsgMSApKQorICAgIHNoaWZ0OworICAgIHN2biBjb21taXQgLW0gIihyJGkpICQqIiA+L2Rldi9udWxsIHx8IGV4aXQgMQorICAgIGVjaG8gJGkKK30KKworc2F5KCkgeworICAgIGVjaG8gIhtbMW0gKiAkKhtbMG0iCit9CisKK2k9MAorY2QgZm9vCitta2RpciB0cnVuaworbWtkaXIgYnJhbmNoZXMKK21rZGlyIHRhZ3MKK3N2biBhZGQgdHJ1bmsgYnJhbmNoZXMgdGFncworaT0kKGNvbW1pdCAkaSAiU2V0dXAgdHJ1bmssIGJyYW5jaGVzLCBhbmQgdGFncyIpCisKK2dpdCBjYXQtZmlsZSBibG9iIDY2ODM0NjNlOk1ha2VmaWxlID4gdHJ1bmsvTWFrZWZpbGUKK3N2biBhZGQgdHJ1bmsvTWFrZWZpbGUgCisKK3NheSAiQ29tbWl0dGluZyBBTkNFU1RPUiIKK2k9JChjb21taXQgJGkgImFuY2VzdG9yIikKK3N2biBjcCB0cnVuayBicmFuY2hlcy9sZWZ0CisKK3NheSAiQ29tbWl0dGluZyBCUkFOQ0ggUE9JTlQiCitpPSQoY29tbWl0ICRpICJtYWtlIGxlZnQgYnJhbmNoIikKK3N2biBjcCB0cnVuayBicmFuY2hlcy9yaWdodAorCitzYXkgIkNvbW1pdHRpbmcgb3RoZXIgQlJBTkNIIFBPSU5UIgoraT0kKGNvbW1pdCAkaSAibWFrZSByaWdodCBicmFuY2giKQorCitzYXkgIkNvbW1pdHRpbmcgTEVGVCBVUERBVEUiCitnaXQgY2F0LWZpbGUgYmxvYiA1ODczYjY3ZTpNYWtlZmlsZSA+IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK2k9JChjb21taXQgJGkgImxlZnQgdXBkYXRlIDEiKQorCitnaXQgY2F0LWZpbGUgYmxvYiA3NTExOGIxMzpNYWtlZmlsZSA+IGJyYW5jaGVzL3JpZ2h0L01ha2VmaWxlCitzYXkgIkNvbW1pdHRpbmcgUklHSFQgVVBEQVRFIgorcHJlX3JpZ2h0X3VwZGF0ZV8xPSRpCitpPSQoY29tbWl0ICRpICJyaWdodCB1cGRhdGUgMSIpCisKK3NheSAiTWFraW5nIG1vcmUgY29tbWl0cyBvbiBMRUZUIgorZ2l0IGNhdC1maWxlIGJsb2IgZmY1ZWJlMzk6TWFrZWZpbGUgPiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitpPSQoY29tbWl0ICRpICJsZWZ0IHVwZGF0ZSAyIikKK2dpdCBjYXQtZmlsZSBibG9iIGI1MDM5ZGI2Ok1ha2VmaWxlID4gYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQoraT0kKGNvbW1pdCAkaSAibGVmdCB1cGRhdGUgMyIpCisKK3NheSAiTWFraW5nIGEgTEVGVCBTVUItQlJBTkNIIgorc3ZuIGNwIGJyYW5jaGVzL2xlZnQgYnJhbmNoZXMvbGVmdC1zdWIKK3N1Yl9sZWZ0X21ha2U9JGkKK2k9JChjb21taXQgJGkgIm1ha2UgbGVmdCBzdWItYnJhbmNoIikKKworc2F5ICJNYWtpbmcgYSBjb21taXQgb24gTEVGVCBTVUItQlJBTkNIIgorZWNobyAiY3J1bmNoIiA+IGJyYW5jaGVzL2xlZnQtc3ViL1JFQURNRQorc3ZuIGFkZCBicmFuY2hlcy9sZWZ0LXN1Yi9SRUFETUUKK2k9JChjb21taXQgJGkgImxlZnQgc3ViLWJyYW5jaCB1cGRhdGUgMSIpCisKK3NheSAiTWVyZ2luZyBMRUZUIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9sZWZ0IC0tYWNjZXB0IHBvc3Rwb25lCitnaXQgY2F0LWZpbGUgYmxvYiBiNTAzOWRiNjpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdm4gcmVzb2x2ZWQgTWFrZWZpbGUKK2k9JChjb21taXQgJGkgIk1lcmdlIGxlZnQgdG8gdHJ1bmsgMSIpCitjZCAuLgorCitzYXkgIk1ha2luZyBtb3JlIGNvbW1pdHMgb24gTEVGVCBhbmQgUklHSFQiCitlY2hvICJ0b3VjaGUiID4gYnJhbmNoZXMvbGVmdC96bG9uaworc3ZuIGFkZCBicmFuY2hlcy9sZWZ0L3psb25rCitpPSQoY29tbWl0ICRpICJsZWZ0IHVwZGF0ZSA0IikKK2VjaG8gInRod2Fja2UiID4gYnJhbmNoZXMvcmlnaHQvYmFuZworc3ZuIGFkZCBicmFuY2hlcy9yaWdodC9iYW5nCitpPSQoY29tbWl0ICRpICJyaWdodCB1cGRhdGUgMiIpCisKK3NheSAiU3F1YXNoIG1lcmdlIG9mIFJJR0hUIHRpcCAyIGNvbW1pdHMgb250byBUUlVOSyIKK3N2biB1cGRhdGUKK2NkIHRydW5rCitzdm4gbWVyZ2UgLXIkcHJlX3JpZ2h0X3VwZGF0ZV8xOiRpIC4uL2JyYW5jaGVzL3JpZ2h0CitpPSQoY29tbWl0ICRpICJDaGVycnktcGljayByaWdodCAyIGNvbW1pdHMgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJNZXJnaW5nIFJJR0hUIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9yaWdodCAtLWFjY2VwdCBwb3N0cG9uZQorZ2l0IGNhdC1maWxlIGJsb2IgYjUxYWQ0MzE6TWFrZWZpbGUgPiBNYWtlZmlsZQorc3ZuIHJlc29sdmVkIE1ha2VmaWxlCitpPSQoY29tbWl0ICRpICJNZXJnZSByaWdodCB0byB0cnVuayAxIikKK2NkIC4uCisKK3NheSAiTWFraW5nIG1vcmUgY29tbWl0cyBvbiBSSUdIVCBhbmQgVFJVTksiCitlY2hvICJ3aGFtbSIgPiBicmFuY2hlcy9yaWdodC91cmtraworc3ZuIGFkZCBicmFuY2hlcy9yaWdodC91cmtraworaT0kKGNvbW1pdCAkaSAicmlnaHQgdXBkYXRlIDMiKQorZWNobyAicG93IiA+IHRydW5rL3Zyb25rCitzdm4gYWRkIHRydW5rL3Zyb25rCitpPSQoY29tbWl0ICRpICJ0cnVuayB1cGRhdGUgMSIpCisKK3NheSAiTWVyZ2luZyBSSUdIVCB0byBMRUZUIFNVQi1CUkFOQ0giCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9sZWZ0LXN1Ygorc3ZuIG1lcmdlIC4uL3JpZ2h0IC0tYWNjZXB0IHBvc3Rwb25lCitnaXQgY2F0LWZpbGUgYmxvYiBiNTFhZDQzMTpNYWtlZmlsZSA+IE1ha2VmaWxlCitzdm4gcmVzb2x2ZWQgTWFrZWZpbGUKK2k9JChjb21taXQgJGkgIk1lcmdlIHJpZ2h0IHRvIGxlZnQgc3ViLWJyYW5jaCIpCitjZCAuLi8uLgorCitzYXkgIk1ha2luZyBtb3JlIGNvbW1pdHMgb24gTEVGVCBTVUItQlJBTkNIIGFuZCBMRUZUIgorZWNobyAiem93aWUiID4gYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK3N2biBhZGQgYnJhbmNoZXMvbGVmdC1zdWIvd2hhbV9ldGgKK3ByZV9zdWJfbGVmdF91cGRhdGVfMj0kaQoraT0kKGNvbW1pdCAkaSAibGVmdCBzdWItYnJhbmNoIHVwZGF0ZSAyIikKK3N1Yl9sZWZ0X3VwZGF0ZV8yPSRpCitlY2hvICJlZWVfeW93IiA+IGJyYW5jaGVzL2xlZnQvZ2x1cnBwCitzdm4gYWRkIGJyYW5jaGVzL2xlZnQvZ2x1cnBwCitpPSQoY29tbWl0ICRpICJsZWZ0IHVwZGF0ZSA1IikKKworc2F5ICJDaGVycnkgcGljayBMRUZUIFNVQi1CUkFOQ0ggY29tbWl0IHRvIExFRlQiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9sZWZ0Citzdm4gbWVyZ2UgLXIkcHJlX3N1Yl9sZWZ0X3VwZGF0ZV8yOiRzdWJfbGVmdF91cGRhdGVfMiAuLi9sZWZ0LXN1YgoraT0kKGNvbW1pdCAkaSAiQ2hlcnJ5LXBpY2sgbGVmdCBzdWItYnJhbmNoIGNvbW1pdCB0byBsZWZ0IikKK2NkIC4uLy4uCisKK3NheSAiTWVyZ2luZyBMRUZUIFNVQi1CUkFOQ0ggYmFjayB0byBMRUZUIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvbGVmdAorIyBpdCdzIG9ubHkgYSBtZXJnZSBiZWNhdXNlIHRoZSBwcmV2aW91cyBtZXJnZSBjaGVycnktcGlja2VkIHRoZSB0b3AgY29tbWl0Citzdm4gbWVyZ2UgLXIkc3ViX2xlZnRfbWFrZTokc3ViX2xlZnRfdXBkYXRlXzIgLi4vbGVmdC1zdWIgLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIk1lcmdlIGxlZnQgc3ViLWJyYW5jaCB0byBsZWZ0IikKK2NkIC4uLy4uCisKK3NheSAiTWVyZ2luZyBFVkVSWVRISU5HIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9sZWZ0IC0tYWNjZXB0IHBvc3Rwb25lCitzdm4gcmVzb2x2ZWQgYmFuZworaT0kKGNvbW1pdCAkaSAiTWVyZ2UgbGVmdCB0byB0cnVuayAyIikKKyMgdGhpcyBtZXJnZSwgc3ZuIGhhcHBpbHkgdXBkYXRlcyB0aGUgbWVyZ2VpbmZvLCBidXQgdGhlcmUgaXMgYWN0dWFsbHkKKyMgbm90aGluZyB0byBtZXJnZS4gIGdpdC1zdm4gd2lsbCBub3QgbWFrZSBhIG1lYW5pbmdsZXNzIG1lcmdlIGNvbW1pdC4KK3N2biBtZXJnZSAuLi9icmFuY2hlcy9yaWdodCAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAibm9uLW1lcmdlIHJpZ2h0IHRvIHRydW5rIDIiKQorY2QgLi4KKworc2F5ICJCcmFuY2hpbmcgYjEgZnJvbSB0cnVuayIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuayBicmFuY2hlcy9iMQoraT0kKGNvbW1pdCAkaSAibWFrZSBiMSBicmFuY2ggZnJvbSB0cnVuayIpCisKK3NheSAiQnJhbmNoaW5nIGIyIGZyb20gdHJ1bmsiCitzdm4gdXBkYXRlCitzdm4gY3AgdHJ1bmsgYnJhbmNoZXMvYjIKK2k9JChjb21taXQgJGkgIm1ha2UgYjIgYnJhbmNoIGZyb20gdHJ1bmsiKQorCitzYXkgIk1ha2UgYSBjb21taXQgdG8gYjIiCitzdm4gdXBkYXRlCitjZCBicmFuY2hlcy9iMgorZWNobyAiYjIiID4gYjJmaWxlCitzdm4gYWRkIGIyZmlsZQoraT0kKGNvbW1pdCAkaSAiYjIgdXBkYXRlIDEiKQorY2QgLi4vLi4KKworc2F5ICJNYWtlIGEgY29tbWl0IHRvIGIxIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvYjEKK2VjaG8gImIxIiA+IGIxZmlsZQorc3ZuIGFkZCBiMWZpbGUKK2k9JChjb21taXQgJGkgImIxIHVwZGF0ZSAxIikKK2NkIC4uLy4uCisKK3NheSAiTWVyZ2UgYjEgdG8gdHJ1bmsiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2IxLyAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgYjEgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJNYWtlIGEgY29tbWl0IHRvIHRydW5rIGJlZm9yZSBtZXJnaW5nIHRydW5rIHRvIGIyIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK2VjaG8gInRydW5rIiA+IHRydW5rZmlsZQorc3ZuIGFkZCB0cnVua2ZpbGUKK2k9JChjb21taXQgJGkgInRydW5rIGNvbW1pdCBiZWZvcmUgbWVyZ2luZyB0cnVuayB0byBiMiIpCitjZCAuLgorCitzYXkgIk1lcmdlIHRydW5rIHRvIGIyIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvYjIKK3N2biBtZXJnZSAuLi8uLi90cnVuay8gLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIk1lcmdlIHRydW5rIHRvIGIyIikKK2NkIC4uLy4uCisKK3NheSAiTWVyZ2UgYjIgdG8gdHJ1bmsiCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2IyLyAtLWFjY2VwdCBwb3N0cG9uZQorc3ZuIHJlc29sdmVkIGIxZmlsZQorc3ZuIHJlc29sdmVkIHRydW5rZmlsZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgYjIgdG8gdHJ1bmsiKQorY2QgLi4KKworc2F5ICJDcmVhdGluZyBmMSBmcm9tIHRydW5rIHdpdGggYSBuZXcgZmlsZSIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuayBicmFuY2hlcy9mMQorY2QgYnJhbmNoZXMvZjEKK2VjaG8gImYxIiA+IGYxZmlsZQorc3ZuIGFkZCBmMWZpbGUKK2NkIC4uLy4uCitpPSQoY29tbWl0ICRpICJtYWtlIGYxIGJyYW5jaCBmcm9tIHRydW5rIHdpdGggYSBuZXcgZmlsZSIpCisKK3NheSAiQ3JlYXRpbmcgZjIgZnJvbSB0cnVuayB3aXRoIGEgbmV3IGZpbGUiCitzdm4gdXBkYXRlCitzdm4gY3AgdHJ1bmsgYnJhbmNoZXMvZjIKK2NkIGJyYW5jaGVzL2YyCitlY2hvICJmMiIgPiBmMmZpbGUKK3N2biBhZGQgZjJmaWxlCitjZCAuLi8uLgoraT0kKGNvbW1pdCAkaSAibWFrZSBmMiBicmFuY2ggZnJvbSB0cnVuayB3aXRoIGEgbmV3IGZpbGUiKQorCitzYXkgIk1lcmdlIGYxIGFuZCBmMiB0byB0cnVuayBpbiBvbmUgZ28iCitzdm4gdXBkYXRlCitjZCB0cnVuaworc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2YxLyAtLWFjY2VwdCBwb3N0cG9uZQorc3ZuIG1lcmdlIC4uL2JyYW5jaGVzL2YyLyAtLWFjY2VwdCBwb3N0cG9uZQoraT0kKGNvbW1pdCAkaSAiTWVyZ2UgZjEgYW5kIGYyIHRvIHRydW5rIikKK2NkIC4uCisKK3NheSAiQWRkaW5nIHN1YmRpcmVjdG9yeSB0byBMRUZUIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvbGVmdAorbWtkaXIgc3ViZGlyCitlY2hvICJZZWVoYXciID4gc3ViZGlyL2Nvd2JveQorc3ZuIGFkZCBzdWJkaXIKK2k9JChjb21taXQgJGkgImFkZCBzdWJkaXJlY3RvcnkgdG8gbGVmdCBicmFuY2giKQorY2QgLi4vLi4vCisKK3NheSAiTWVyZ2luZyBMRUZUIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9sZWZ0IC0tYWNjZXB0IHBvc3Rwb25lCitpPSQoY29tbWl0ICRpICJtZXJnZSBsZWZ0IHRvIHRydW5rIikKK2NkIC4uCisKK3NheSAiTWFrZSBQQVJUSUFMIGJyYW5jaCIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuay9zdWJkaXIgYnJhbmNoZXMvcGFydGlhbAoraT0kKGNvbW1pdCAkaSAibWFrZSBwYXJ0aWFsIGJyYW5jaCIpCisKK3NheSAiTWFrZSBhIGNvbW1pdCB0byBQQVJUSUFMIgorc3ZuIHVwZGF0ZQorY2QgYnJhbmNoZXMvcGFydGlhbAorZWNobyAicmFjZWNhciIgPiBwYWxpbmRyb21lcworc3ZuIGFkZCBwYWxpbmRyb21lcworaT0kKGNvbW1pdCAkaSAicGFydGlhbCB1cGRhdGUiKQorY2QgLi4vLi4vCisKK3NheSAiTWVyZ2UgUEFSVElBTCB0byBUUlVOSyIKK3N2biB1cGRhdGUKK2NkIHRydW5rL3N1YmRpcgorc3ZuIG1lcmdlIC4uLy4uL2JyYW5jaGVzL3BhcnRpYWwgLS1hY2NlcHQgcG9zdHBvbmUKK2k9JChjb21taXQgJGkgIm1lcmdlIHBhcnRpYWwgdG8gdHJ1bmsiKQorY2QgLi4vLi4vCisKK3NheSAiVGFnZ2luZyB0cnVuayIKK3N2biB1cGRhdGUKK3N2biBjcCB0cnVuayB0YWdzL3YxLjAKK2k9JChjb21taXQgJGkgInRhZ2dpbmcgdjEuMCIpCisKK3NheSAiQnJhbmNoaW5nIEJVR0ZJWCBmcm9tIHYxLjAiCitzdm4gdXBkYXRlCitzdm4gY3AgdGFncy92MS4wIGJyYW5jaGVzL2J1Z2ZpeAoraT0kKGNvbW1pdCAkaSAibWFrZSBidWdmaXggYnJhbmNoIGZyb20gdGFnIikKKworc2F5ICJNYWtlIGEgY29tbWl0IHRvIEJVR0ZJWCIKK3N2biB1cGRhdGUKK2NkIGJyYW5jaGVzL2J1Z2ZpeC8KK2VjaG8gImtheWFrIiA+PiBzdWJkaXIvcGFsaW5kcm9tZXMKK2k9JChjb21taXQgJGkgImNvbW1pdCB0byBidWdmaXgiKQorY2QgLi4vLi4vCisKK3NheSAiTWVyZ2UgQlVHRklYIHRvIFRSVU5LIgorc3ZuIHVwZGF0ZQorY2QgdHJ1bmsKK3N2biBtZXJnZSAuLi9icmFuY2hlcy9idWdmaXgvIC0tYWNjZXB0IHBvc3Rwb25lCitpPSQoY29tbWl0ICRpICJNZXJnZSBCVUdGSVggdG8gVFJVTksiKQorY2QgLi4KKworY2QgLi4KK3N2bmFkbWluIGR1bXAgZm9vLnN2biA+IHN2bi1tZXJnZWluZm8uZHVtcAorCitybSAtcmYgZm9vIGZvby5zdm4KZGlmZiAtLWdpdCBhL3QvdDkxNTEvc3ZuLW1lcmdlaW5mby5kdW1wIGIvdC90OTE1MS9zdm4tbWVyZ2VpbmZvLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjYWZjZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTEvc3ZuLW1lcmdlaW5mby5kdW1wCkBAIC0wLDAgKzEsMjM4OCBAQAorU1ZOLWZzLWR1bXAtZm9ybWF0LXZlcnNpb246IDIKKworVVVJRDogZDYxOTE1MzAtMjY5My00YThlLTk4ZTctYjE5NGQ0YzNlZGQ4CisKK1JldmlzaW9uLW51bWJlcjogMAorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjAyLjgzMjQwNloKK1BST1BTLUVORAorCitSZXZpc2lvbi1udW1iZXI6IDEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzNAorQ29udGVudC1sZW5ndGg6IDEzNAorCitLIDcKK3N2bjpsb2cKK1YgMzYKKyhyMSkgU2V0dXAgdHJ1bmssIGJyYW5jaGVzLCBhbmQgdGFncworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDMuMDU1MTcyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdGFncworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAyCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTEKK0NvbnRlbnQtbGVuZ3RoOiAxMTEKKworSyA3Citzdm46bG9nCitWIDEzCisocjIpIGFuY2VzdG9yCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDowNC4wNjQ1MDZaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuay9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMjQwMQorVGV4dC1jb250ZW50LW1kNTogYmZkOGZmNzc4ZDE0OTJkYzY3NTg1NjczNzMxNzZhODkKK1RleHQtY29udGVudC1zaGExOiAxMDMyMDVjZTMzMWY3ZDY0MDg2ZGJhNDk3NTc0NzM0Zjc4NDM5NTkwCitDb250ZW50LWxlbmd0aDogMjQxMQorCitQUk9QUy1FTkQKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDExOQorQ29udGVudC1sZW5ndGg6IDExOQorCitLIDcKK3N2bjpsb2cKK1YgMjEKKyhyMykgbWFrZSBsZWZ0IGJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDYuMDQwMzg5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rL01ha2VmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogYmZkOGZmNzc4ZDE0OTJkYzY3NTg1NjczNzMxNzZhODkKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMTAzMjA1Y2UzMzFmN2Q2NDA4NmRiYTQ5NzU3NDczNGY3ODQzOTU5MAorCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTIwCitDb250ZW50LWxlbmd0aDogMTIwCisKK0sgNworc3ZuOmxvZworViAyMgorKHI0KSBtYWtlIHJpZ2h0IGJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MDguMDQwOTA1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmlnaHQKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmlnaHQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsvTWFrZWZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiBiZmQ4ZmY3NzhkMTQ5MmRjNjc1ODU2NzM3MzE3NmE4OQorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAxMDMyMDVjZTMzMWY3ZDY0MDg2ZGJhNDk3NTc0NzM0Zjc4NDM5NTkwCisKKworUmV2aXNpb24tbnVtYmVyOiA1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyA3Citzdm46bG9nCitWIDE4CisocjUpIGxlZnQgdXBkYXRlIDEKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjA5LjA0OTE2OVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjQ2NQorVGV4dC1jb250ZW50LW1kNTogMTZlMzhkOTc1M2IwNjE3MzE2NTA1NjFjZTAxYjExOTUKK1RleHQtY29udGVudC1zaGExOiAzNmRhNGI4NGVhOWI2NDIxOGFiNDgxNzFkZmM1YzQ4YWUwMjVmMzhiCitDb250ZW50LWxlbmd0aDogMjQ2NQorCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK1JldmlzaW9uLW51bWJlcjogNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTE3CitDb250ZW50LWxlbmd0aDogMTE3CisKK0sgNworc3ZuOmxvZworViAxOQorKHI2KSByaWdodCB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTAuMDQ5MzUwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmlnaHQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjUyMQorVGV4dC1jb250ZW50LW1kNTogMDY2ODQxOGE2MjEzMzNmNGFhOGI2NjMyY2Q2M2UyYTAKK1RleHQtY29udGVudC1zaGExOiA0ZjI5YWZkMDM4ZTUyZjQ1YWNiNWVmOGM0MWFjZmM3MDA2MmE3NDFhCitDb250ZW50LWxlbmd0aDogMjUyMQorCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiA3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyA3Citzdm46bG9nCitWIDE4CisocjcpIGxlZnQgdXBkYXRlIDIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjExLjA0OTIwOVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjUyOQorVGV4dC1jb250ZW50LW1kNTogZjZiMTk3Y2MzZjJlODlhODNlNTQ1ZDRiYjAwM2RlNzMKK1RleHQtY29udGVudC1zaGExOiAyZjY1NjY3N2NmZWMwYmNlZWM4NWU1MzAzNmZmYjYzZTI1MTI2ZjhlCitDb250ZW50LWxlbmd0aDogMjUyOQorCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDgKK1Byb3AtY29udGVudC1sZW5ndGg6IDExNgorQ29udGVudC1sZW5ndGg6IDExNgorCitLIDcKK3N2bjpsb2cKK1YgMTgKKyhyOCkgbGVmdCB1cGRhdGUgMworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTIuMDQ5MjM0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNTkzCitUZXh0LWNvbnRlbnQtbWQ1OiA1Y2NmZjY4OWZiMjkwZTAwYjg1ZmUxOGVlNTBjNTRiYQorVGV4dC1jb250ZW50LXNoYTE6IGExM2RlOGUyM2YxNDgzZWZjYTNlNTdiMmI2NGIwYWU2Zjc0MGNlMTAKK0NvbnRlbnQtbGVuZ3RoOiAyNTkzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDkKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMworQ29udGVudC1sZW5ndGg6IDEyMworCitLIDcKK3N2bjpsb2cKK1YgMjUKKyhyOSkgbWFrZSBsZWZ0IHN1Yi1icmFuY2gKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjE0LjA0MDg5NFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDMKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGRlbGV0ZQorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvTWFrZWZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA1Y2NmZjY4OWZiMjkwZTAwYjg1ZmUxOGVlNTBjNTRiYQorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBhMTNkZThlMjNmMTQ4M2VmY2EzZTU3YjJiNjRiMGFlNmY3NDBjZTEwCisKKworCisKK1JldmlzaW9uLW51bWJlcjogMTAKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyOAorQ29udGVudC1sZW5ndGg6IDEyOAorCitLIDcKK3N2bjpsb2cKK1YgMzAKKyhyMTApIGxlZnQgc3ViLWJyYW5jaCB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTUuMDQ5OTM1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvUkVBRE1FCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA3CitUZXh0LWNvbnRlbnQtbWQ1OiBmZGJjZmI2YmU5YWZlMTEyMTg2MjE0M2YyMjZiNTFjZgorVGV4dC1jb250ZW50LXNoYTE6IDFkMWY1ZWE0Y2ViNTg0MzM3ZmZlNTliODk4MGQ5MmUzYjc4ZGZlZjQKK0NvbnRlbnQtbGVuZ3RoOiAxNworCitQUk9QUy1FTkQKK2NydW5jaAorCisKK1JldmlzaW9uLW51bWJlcjogMTEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyNQorQ29udGVudC1sZW5ndGg6IDEyNQorCitLIDcKK3N2bjpsb2cKK1YgMjcKKyhyMTEpIE1lcmdlIGxlZnQgdG8gdHJ1bmsgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTguMDU2NTk0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NAorQ29udGVudC1sZW5ndGg6IDU0CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMTkKKy9icmFuY2hlcy9sZWZ0OjItMTAKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjU5MworVGV4dC1jb250ZW50LW1kNTogNWNjZmY2ODlmYjI5MGUwMGI4NWZlMThlZTUwYzU0YmEKK1RleHQtY29udGVudC1zaGExOiBhMTNkZThlMjNmMTQ4M2VmY2EzZTU3YjJiNjRiMGFlNmY3NDBjZTEwCitDb250ZW50LWxlbmd0aDogMjU5MworCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworUmV2aXNpb24tbnVtYmVyOiAxMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTE3CitDb250ZW50LWxlbmd0aDogMTE3CisKK0sgNworc3ZuOmxvZworViAxOQorKHIxMikgbGVmdCB1cGRhdGUgNAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MTkuMDQ5NjIwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC96bG9uaworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNworVGV4dC1jb250ZW50LW1kNTogOGI5ZDhjN2MyYWFhNjE2N2U3ZDM0MDdhNzczYmJiYmEKK1RleHQtY29udGVudC1zaGExOiA5NzE2NTI3ZWJkNzBhNzVjMjc2MjVjYWNiZWIyZDg5N2M2ZTg2MTc4CitDb250ZW50LWxlbmd0aDogMTcKKworUFJPUFMtRU5ECit0b3VjaGUKKworCitSZXZpc2lvbi1udW1iZXI6IDEzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTgKK0NvbnRlbnQtbGVuZ3RoOiAxMTgKKworSyA3Citzdm46bG9nCitWIDIwCisocjEzKSByaWdodCB1cGRhdGUgMgorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MjAuMDQ5NjU5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmlnaHQvYmFuZworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogMzRjMjhmMWQyZGM2YTlhZGVjY2M0MjY1YmY3NTE2Y2IKK1RleHQtY29udGVudC1zaGExOiAwYmM1YmIzNDVjMGU3MWQyOGY3ODRmMTJlMGJkMmQzODRjMjgzMDYyCitDb250ZW50LWxlbmd0aDogMTgKKworUFJPUFMtRU5ECit0aHdhY2tlCisKKworUmV2aXNpb24tbnVtYmVyOiAxNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTQwCitDb250ZW50LWxlbmd0aDogMTQwCisKK0sgNworc3ZuOmxvZworViA0MgorKHIxNCkgQ2hlcnJ5LXBpY2sgcmlnaHQgMiBjb21taXRzIHRvIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDoyMy4wNDE5OTFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDc1CitDb250ZW50LWxlbmd0aDogNzUKKworSyAxMworc3ZuOm1lcmdlaW5mbworViA0MAorL2JyYW5jaGVzL2xlZnQ6Mi0xMAorL2JyYW5jaGVzL3JpZ2h0OjYtMTMKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvTWFrZWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMjcxMworVGV4dC1jb250ZW50LW1kNTogMGFmYmUzNGYyNDRjZDY2MmIxZjk3ZDcwOGM2ODdmOTAKK1RleHQtY29udGVudC1zaGExOiA0NmQ5Mzc3ZDc4M2U2N2E5YjU4MWRhMTEwMzUyZTc5OTUxN2M4YTE0CitDb250ZW50LWxlbmd0aDogMjcxMworCisjIC1EQ09MTElTSU9OX0NIRUNLIGlmIHlvdSBiZWxpZXZlIHRoYXQgU0hBMSdzCisjIDE0NjE1MDE2MzczMzA5MDI5MTgyMDM2ODQ4MzI3MTYyODMwMTk2NTU5MzI1NDI5NzYgaGFzaGVzIGRvIG5vdCBnaXZlIHlvdQorIyBlbm91Z2ggZ3VhcmFudGVlcyBhYm91dCBubyBjb2xsaXNpb25zIGJldHdlZW4gb2JqZWN0cyBldmVyIGhhcGVubmluZy4KKyMKKyMgLUROU0VDIGlmIHlvdSB3YW50IGdpdCB0byBjYXJlIGFib3V0IHN1Yi1zZWNvbmQgZmlsZSBtdGltZXMgYW5kIGN0aW1lcy4KKyMgTm90ZSB0aGF0IHlvdSBuZWVkIHNvbWUgbmV3IGdsaWJjIChhdCBsZWFzdCA+Mi4yLjQpIGZvciB0aGlzLCBhbmQgaXQgd2lsbAorIyBCUkVBSyBZT1VSIExPQ0FMIERJRkZTISBzaG93LWRpZmYgYW5kIGFueXRoaW5nIHVzaW5nIGl0IHdpbGwgbGlrZWx5IHJhbmRvbWx5CisjIGJyZWFrIHVubGVzcyB5b3VyIHVuZGVybHlpbmcgZmlsZXN5c3RlbSBzdXBwb3J0cyB0aG9zZSBzdWItc2Vjb25kIHRpbWVzCisjIChteSBleHQzIGRvZXNuJ3QpLgorQ0ZMQUdTPS1nIC1PMyAtV2FsbAorCitDQz1nY2MKKworCitQUk9HPSAgIHVwZGF0ZS1jYWNoZSBzaG93LWRpZmYgaW5pdC1kYiB3cml0ZS10cmVlIHJlYWQtdHJlZSBjb21taXQtdHJlZSBcCisJY2F0LWZpbGUgZnNjay1jYWNoZSBjaGVja291dC1jYWNoZSBkaWZmLXRyZWUgcmV2LXRyZWUgc2hvdy1maWxlcyBcCisJY2hlY2stZmlsZXMgbHMtdHJlZSBtZXJnZS1iYXNlIG1lcmdlLWNhY2hlCisKK2FsbDogJChQUk9HKQorCitpbnN0YWxsOiAkKFBST0cpCisJaW5zdGFsbCAkKFBST0cpICQoSE9NRSkvYmluLworCitMSUJTPSAtbHNzbCAtbHoKKworaW5pdC1kYjogaW5pdC1kYi5vCisKK3VwZGF0ZS1jYWNoZTogdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHVwZGF0ZS1jYWNoZSB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitzaG93LWRpZmY6IHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWRpZmYgc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKword3JpdGUtdHJlZTogd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB3cml0ZS10cmVlIHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLXRyZWU6IHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZWFkLXRyZWUgcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY29tbWl0LXRyZWU6IGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNvbW1pdC10cmVlIGNvbW1pdC10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2F0LWZpbGU6IGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNhdC1maWxlIGNhdC1maWxlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZnNjay1jYWNoZTogZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIGZzY2stY2FjaGUgZnNjay1jYWNoZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworY2hlY2tvdXQtY2FjaGU6IGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrb3V0LWNhY2hlIGNoZWNrb3V0LWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworZGlmZi10cmVlOiBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZGlmZi10cmVlIGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Jldi10cmVlOiByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIHJldi10cmVlIHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitzaG93LWZpbGVzOiBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZmlsZXMgc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NoZWNrLWZpbGVzOiBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVjay1maWxlcyBjaGVjay1maWxlcy5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2xzLXRyZWU6IGxzLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbHMtdHJlZSBscy10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbWVyZ2UtYmFzZTogbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWJhc2UgbWVyZ2UtYmFzZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworbWVyZ2UtY2FjaGU6IG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIG1lcmdlLWNhY2hlIG1lcmdlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC1jYWNoZS5vOiBjYWNoZS5oCitzaG93LWRpZmYubzogY2FjaGUuaAorCitjbGVhbjoKKwlybSAtZiAqLm8gJChQUk9HKQorCitiYWNrdXA6IGNsZWFuCisJY2QgLi4gOyB0YXIgY3p2ZiBkaXJjYWNoZS50YXIuZ3ogZGlyLWNhY2hlCisKKworTm9kZS1wYXRoOiB0cnVuay9iYW5nCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxMworTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9yaWdodC9iYW5nCitUZXh0LWNvcHktc291cmNlLW1kNTogMzRjMjhmMWQyZGM2YTlhZGVjY2M0MjY1YmY3NTE2Y2IKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMGJjNWJiMzQ1YzBlNzFkMjhmNzg0ZjEyZTBiZDJkMzg0YzI4MzA2MgorCisKK1JldmlzaW9uLW51bWJlcjogMTUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyNgorQ29udGVudC1sZW5ndGg6IDEyNgorCitLIDcKK3N2bjpsb2cKK1YgMjgKKyhyMTUpIE1lcmdlIHJpZ2h0IHRvIHRydW5rIDEKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjI2LjA1NDQ1NloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNzUKK0NvbnRlbnQtbGVuZ3RoOiA3NQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDQwCisvYnJhbmNoZXMvbGVmdDoyLTEwCisvYnJhbmNoZXMvcmlnaHQ6Mi0xNAorUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAxNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTE4CitDb250ZW50LWxlbmd0aDogMTE4CisKK0sgNworc3ZuOmxvZworViAyMAorKHIxNikgcmlnaHQgdXBkYXRlIDMKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjI3LjA0OTk1NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3JpZ2h0L3Vya2trCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA2CitUZXh0LWNvbnRlbnQtbWQ1OiA1ODg5YzgzOTJlMTYyNTFiMGM4MDkyNzYwN2EwMzAzNgorVGV4dC1jb250ZW50LXNoYTE6IDM5MzQyNjRkMjc3YTBjZjg4NmI2YjFjN2YyYjllNTZkYTI1MjUzMDIKK0NvbnRlbnQtbGVuZ3RoOiAxNgorCitQUk9QUy1FTkQKK3doYW1tCisKKworUmV2aXNpb24tbnVtYmVyOiAxNworUHJvcC1jb250ZW50LWxlbmd0aDogMTE4CitDb250ZW50LWxlbmd0aDogMTE4CisKK0sgNworc3ZuOmxvZworViAyMAorKHIxNykgdHJ1bmsgdXBkYXRlIDEKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjI4LjA0OTYxNVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL3Zyb25rCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiBiMmY4MGZhMDJhN2YxMzY0YjljMjlkM2RhNDRiZjlmOQorVGV4dC1jb250ZW50LXNoYTE6IGU5OTRkOTgwYzBmMmQ3YTNmNzYxMzhiZjk2ZDU3ZjM2Zjk2MzM4MjgKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK3BvdworCisKK1JldmlzaW9uLW51bWJlcjogMTgKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzNAorQ29udGVudC1sZW5ndGg6IDEzNAorCitLIDcKK3N2bjpsb2cKK1YgMzYKKyhyMTgpIE1lcmdlIHJpZ2h0IHRvIGxlZnQgc3ViLWJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MzEuMDYxNDYwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogY2hhbmdlCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NQorQ29udGVudC1sZW5ndGg6IDU1CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMjAKKy9icmFuY2hlcy9yaWdodDoyLTE3CitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL01ha2VmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDI3MTMKK1RleHQtY29udGVudC1tZDU6IDBhZmJlMzRmMjQ0Y2Q2NjJiMWY5N2Q3MDhjNjg3ZjkwCitUZXh0LWNvbnRlbnQtc2hhMTogNDZkOTM3N2Q3ODNlNjdhOWI1ODFkYTExMDM1MmU3OTk1MTdjOGExNAorQ29udGVudC1sZW5ndGg6IDI3MTMKKworIyAtRENPTExJU0lPTl9DSEVDSyBpZiB5b3UgYmVsaWV2ZSB0aGF0IFNIQTEncworIyAxNDYxNTAxNjM3MzMwOTAyOTE4MjAzNjg0ODMyNzE2MjgzMDE5NjU1OTMyNTQyOTc2IGhhc2hlcyBkbyBub3QgZ2l2ZSB5b3UKKyMgZW5vdWdoIGd1YXJhbnRlZXMgYWJvdXQgbm8gY29sbGlzaW9ucyBiZXR3ZWVuIG9iamVjdHMgZXZlciBoYXBlbm5pbmcuCisjCisjIC1ETlNFQyBpZiB5b3Ugd2FudCBnaXQgdG8gY2FyZSBhYm91dCBzdWItc2Vjb25kIGZpbGUgbXRpbWVzIGFuZCBjdGltZXMuCisjIE5vdGUgdGhhdCB5b3UgbmVlZCBzb21lIG5ldyBnbGliYyAoYXQgbGVhc3QgPjIuMi40KSBmb3IgdGhpcywgYW5kIGl0IHdpbGwKKyMgQlJFQUsgWU9VUiBMT0NBTCBESUZGUyEgc2hvdy1kaWZmIGFuZCBhbnl0aGluZyB1c2luZyBpdCB3aWxsIGxpa2VseSByYW5kb21seQorIyBicmVhayB1bmxlc3MgeW91ciB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGhvc2Ugc3ViLXNlY29uZCB0aW1lcworIyAobXkgZXh0MyBkb2Vzbid0KS4KK0NGTEFHUz0tZyAtTzMgLVdhbGwKKworQ0M9Z2NjCisKKworUFJPRz0gICB1cGRhdGUtY2FjaGUgc2hvdy1kaWZmIGluaXQtZGIgd3JpdGUtdHJlZSByZWFkLXRyZWUgY29tbWl0LXRyZWUgXAorCWNhdC1maWxlIGZzY2stY2FjaGUgY2hlY2tvdXQtY2FjaGUgZGlmZi10cmVlIHJldi10cmVlIHNob3ctZmlsZXMgXAorCWNoZWNrLWZpbGVzIGxzLXRyZWUgbWVyZ2UtYmFzZSBtZXJnZS1jYWNoZQorCithbGw6ICQoUFJPRykKKworaW5zdGFsbDogJChQUk9HKQorCWluc3RhbGwgJChQUk9HKSAkKEhPTUUpL2Jpbi8KKworTElCUz0gLWxzc2wgLWx6CisKK2luaXQtZGI6IGluaXQtZGIubworCit1cGRhdGUtY2FjaGU6IHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyB1cGRhdGUtY2FjaGUgdXBkYXRlLWNhY2hlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworc2hvdy1kaWZmOiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1kaWZmIHNob3ctZGlmZi5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3dyaXRlLXRyZWU6IHdyaXRlLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gd3JpdGUtdHJlZSB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmVhZC10cmVlOiByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmVhZC10cmVlIHJlYWQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NvbW1pdC10cmVlOiBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjb21taXQtdHJlZSBjb21taXQtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2NhdC1maWxlOiBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjYXQtZmlsZSBjYXQtZmlsZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2ZzY2stY2FjaGU6IGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBmc2NrLWNhY2hlIGZzY2stY2FjaGUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK2NoZWNrb3V0LWNhY2hlOiBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjaGVja291dC1jYWNoZSBjaGVja291dC1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK2RpZmYtdHJlZTogZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGRpZmYtdHJlZSBkaWZmLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZXYtdHJlZTogcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyByZXYtdHJlZSByZXYtdHJlZS5vIHJlYWQtY2FjaGUubyBvYmplY3QubyBjb21taXQubyB0cmVlLm8gYmxvYi5vICQoTElCUykKKworc2hvdy1maWxlczogc2hvdy1maWxlcy5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBzaG93LWZpbGVzIHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjaGVjay1maWxlczogY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2stZmlsZXMgY2hlY2stZmlsZXMubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitscy10cmVlOiBscy10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGxzLXRyZWUgbHMtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK21lcmdlLWJhc2U6IG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1iYXNlIG1lcmdlLWJhc2UubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK21lcmdlLWNhY2hlOiBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBtZXJnZS1jYWNoZSBtZXJnZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtY2FjaGUubzogY2FjaGUuaAorc2hvdy1kaWZmLm86IGNhY2hlLmgKKworY2xlYW46CisJcm0gLWYgKi5vICQoUFJPRykKKworYmFja3VwOiBjbGVhbgorCWNkIC4uIDsgdGFyIGN6dmYgZGlyY2FjaGUudGFyLmd6IGRpci1jYWNoZQorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC1zdWIvYmFuZworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMTcKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvcmlnaHQvYmFuZworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDM0YzI4ZjFkMmRjNmE5YWRlY2NjNDI2NWJmNzUxNmNiCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDBiYzViYjM0NWMwZTcxZDI4Zjc4NGYxMmUwYmQyZDM4NGMyODMwNjIKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL3Vya2trCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxNworTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9yaWdodC91cmtraworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDU4ODljODM5MmUxNjI1MWIwYzgwOTI3NjA3YTAzMDM2CitUZXh0LWNvcHktc291cmNlLXNoYTE6IDM5MzQyNjRkMjc3YTBjZjg4NmI2YjFjN2YyYjllNTZkYTI1MjUzMDIKKworCitSZXZpc2lvbi1udW1iZXI6IDE5CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjgKK0NvbnRlbnQtbGVuZ3RoOiAxMjgKKworSyA3Citzdm46bG9nCitWIDMwCisocjE5KSBsZWZ0IHN1Yi1icmFuY2ggdXBkYXRlIDIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjMyLjA0OTI0NFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL3doYW1fZXRoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA2CitUZXh0LWNvbnRlbnQtbWQ1OiA3NTdiY2Q1ODE4NTcyZWYzZjk1ODAwNTI2MTdjMWM4YgorVGV4dC1jb250ZW50LXNoYTE6IGIxNjUwMTliMDA1YzE5OTIzN2JhODIyYzQ0MDRlNzcxZTkzYjY1NGEKK0NvbnRlbnQtbGVuZ3RoOiAxNgorCitQUk9QUy1FTkQKK3pvd2llCisKKworUmV2aXNpb24tbnVtYmVyOiAyMAorUHJvcC1jb250ZW50LWxlbmd0aDogMTE3CitDb250ZW50LWxlbmd0aDogMTE3CisKK0sgNworc3ZuOmxvZworViAxOQorKHIyMCkgbGVmdCB1cGRhdGUgNQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MzMuMDQ5MzMyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9nbHVycHAKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDgKK1RleHQtY29udGVudC1tZDU6IDE0YTE2OWY2MjhlMGJiNTlkZjljMjE2MDY0OWQwYTMwCitUZXh0LWNvbnRlbnQtc2hhMTogZWY3ZDkyOWU1MjE3Nzc2N2VjZmNkMjg5NDFmNmI3ZjA0YjQxMzFlMworQ29udGVudC1sZW5ndGg6IDE4CisKK1BST1BTLUVORAorZWVlX3lvdworCisKK1JldmlzaW9uLW51bWJlcjogMjEKK1Byb3AtY29udGVudC1sZW5ndGg6IDE0NgorQ29udGVudC1sZW5ndGg6IDE0NgorCitLIDcKK3N2bjpsb2cKK1YgNDgKKyhyMjEpIENoZXJyeS1waWNrIGxlZnQgc3ViLWJyYW5jaCBjb21taXQgdG8gbGVmdAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMTlUMDQ6MTQ6MzYuMDQxODM5WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyAxMworc3ZuOm1lcmdlaW5mbworViAyMQorL2JyYW5jaGVzL2xlZnQtc3ViOjE5CitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvd2hhbV9ldGgKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE5CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL3doYW1fZXRoCitUZXh0LWNvcHktc291cmNlLW1kNTogNzU3YmNkNTgxODU3MmVmM2Y5NTgwMDUyNjE3YzFjOGIKK1RleHQtY29weS1zb3VyY2Utc2hhMTogYjE2NTAxOWIwMDVjMTk5MjM3YmE4MjJjNDQwNGU3NzFlOTNiNjU0YQorCisKK1JldmlzaW9uLW51bWJlcjogMjIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMworQ29udGVudC1sZW5ndGg6IDEzMworCitLIDcKK3N2bjpsb2cKK1YgMzUKKyhyMjIpIE1lcmdlIGxlZnQgc3ViLWJyYW5jaCB0byBsZWZ0CitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0xOVQwNDoxNDozOS4wNDUwMTRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNzkKK0NvbnRlbnQtbGVuZ3RoOiA3OQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDQ0CisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMTcKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvbGVmdC9NYWtlZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAyNzEzCitUZXh0LWNvbnRlbnQtbWQ1OiAwYWZiZTM0ZjI0NGNkNjYyYjFmOTdkNzA4YzY4N2Y5MAorVGV4dC1jb250ZW50LXNoYTE6IDQ2ZDkzNzdkNzgzZTY3YTliNTgxZGExMTAzNTJlNzk5NTE3YzhhMTQKK0NvbnRlbnQtbGVuZ3RoOiAyNzEzCisKKyMgLURDT0xMSVNJT05fQ0hFQ0sgaWYgeW91IGJlbGlldmUgdGhhdCBTSEExJ3MKKyMgMTQ2MTUwMTYzNzMzMDkwMjkxODIwMzY4NDgzMjcxNjI4MzAxOTY1NTkzMjU0Mjk3NiBoYXNoZXMgZG8gbm90IGdpdmUgeW91CisjIGVub3VnaCBndWFyYW50ZWVzIGFib3V0IG5vIGNvbGxpc2lvbnMgYmV0d2VlbiBvYmplY3RzIGV2ZXIgaGFwZW5uaW5nLgorIworIyAtRE5TRUMgaWYgeW91IHdhbnQgZ2l0IHRvIGNhcmUgYWJvdXQgc3ViLXNlY29uZCBmaWxlIG10aW1lcyBhbmQgY3RpbWVzLgorIyBOb3RlIHRoYXQgeW91IG5lZWQgc29tZSBuZXcgZ2xpYmMgKGF0IGxlYXN0ID4yLjIuNCkgZm9yIHRoaXMsIGFuZCBpdCB3aWxsCisjIEJSRUFLIFlPVVIgTE9DQUwgRElGRlMhIHNob3ctZGlmZiBhbmQgYW55dGhpbmcgdXNpbmcgaXQgd2lsbCBsaWtlbHkgcmFuZG9tbHkKKyMgYnJlYWsgdW5sZXNzIHlvdXIgdW5kZXJseWluZyBmaWxlc3lzdGVtIHN1cHBvcnRzIHRob3NlIHN1Yi1zZWNvbmQgdGltZXMKKyMgKG15IGV4dDMgZG9lc24ndCkuCitDRkxBR1M9LWcgLU8zIC1XYWxsCisKK0NDPWdjYworCisKK1BST0c9ICAgdXBkYXRlLWNhY2hlIHNob3ctZGlmZiBpbml0LWRiIHdyaXRlLXRyZWUgcmVhZC10cmVlIGNvbW1pdC10cmVlIFwKKwljYXQtZmlsZSBmc2NrLWNhY2hlIGNoZWNrb3V0LWNhY2hlIGRpZmYtdHJlZSByZXYtdHJlZSBzaG93LWZpbGVzIFwKKwljaGVjay1maWxlcyBscy10cmVlIG1lcmdlLWJhc2UgbWVyZ2UtY2FjaGUKKworYWxsOiAkKFBST0cpCisKK2luc3RhbGw6ICQoUFJPRykKKwlpbnN0YWxsICQoUFJPRykgJChIT01FKS9iaW4vCisKK0xJQlM9IC1sc3NsIC1segorCitpbml0LWRiOiBpbml0LWRiLm8KKwordXBkYXRlLWNhY2hlOiB1cGRhdGUtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gdXBkYXRlLWNhY2hlIHVwZGF0ZS1jYWNoZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3Nob3ctZGlmZjogc2hvdy1kaWZmLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHNob3ctZGlmZiBzaG93LWRpZmYubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCit3cml0ZS10cmVlOiB3cml0ZS10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHdyaXRlLXRyZWUgd3JpdGUtdHJlZS5vIHJlYWQtY2FjaGUubyAkKExJQlMpCisKK3JlYWQtdHJlZTogcmVhZC10cmVlLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIHJlYWQtdHJlZSByZWFkLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjb21taXQtdHJlZTogY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY29tbWl0LXRyZWUgY29tbWl0LXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitjYXQtZmlsZTogY2F0LWZpbGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2F0LWZpbGUgY2F0LWZpbGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitmc2NrLWNhY2hlOiBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gZnNjay1jYWNoZSBmc2NrLWNhY2hlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCitjaGVja291dC1jYWNoZTogY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gY2hlY2tvdXQtY2FjaGUgY2hlY2tvdXQtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCitkaWZmLXRyZWU6IGRpZmYtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBkaWZmLXRyZWUgZGlmZi10cmVlLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworcmV2LXRyZWU6IHJldi10cmVlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gcmV2LXRyZWUgcmV2LXRyZWUubyByZWFkLWNhY2hlLm8gb2JqZWN0Lm8gY29tbWl0Lm8gdHJlZS5vIGJsb2IubyAkKExJQlMpCisKK3Nob3ctZmlsZXM6IHNob3ctZmlsZXMubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gc2hvdy1maWxlcyBzaG93LWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworY2hlY2stZmlsZXM6IGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vCisJJChDQykgJChDRkxBR1MpIC1vIGNoZWNrLWZpbGVzIGNoZWNrLWZpbGVzLm8gcmVhZC1jYWNoZS5vICQoTElCUykKKworbHMtdHJlZTogbHMtdHJlZS5vIHJlYWQtY2FjaGUubworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBscy10cmVlIGxzLXRyZWUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCittZXJnZS1iYXNlOiBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtYmFzZSBtZXJnZS1iYXNlLm8gcmVhZC1jYWNoZS5vIG9iamVjdC5vIGNvbW1pdC5vIHRyZWUubyBibG9iLm8gJChMSUJTKQorCittZXJnZS1jYWNoZTogbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8KKwkkKENDKSAkKENGTEFHUykgLW8gbWVyZ2UtY2FjaGUgbWVyZ2UtY2FjaGUubyByZWFkLWNhY2hlLm8gJChMSUJTKQorCityZWFkLWNhY2hlLm86IGNhY2hlLmgKK3Nob3ctZGlmZi5vOiBjYWNoZS5oCisKK2NsZWFuOgorCXJtIC1mICoubyAkKFBST0cpCisKK2JhY2t1cDogY2xlYW4KKwljZCAuLiA7IHRhciBjenZmIGRpcmNhY2hlLnRhci5neiBkaXItY2FjaGUKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvUkVBRE1FCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxOAorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi9SRUFETUUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiBmZGJjZmI2YmU5YWZlMTEyMTg2MjE0M2YyMjZiNTFjZgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAxZDFmNWVhNGNlYjU4NDMzN2ZmZTU5Yjg5ODBkOTJlM2I3OGRmZWY0CisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L2JhbmcKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDE4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQtc3ViL2JhbmcKK1RleHQtY29weS1zb3VyY2UtbWQ1OiAzNGMyOGYxZDJkYzZhOWFkZWNjYzQyNjViZjc1MTZjYgorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiAwYmM1YmIzNDVjMGU3MWQyOGY3ODRmMTJlMGJkMmQzODRjMjgzMDYyCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9sZWZ0L3Vya2trCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxOAorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0LXN1Yi91cmtraworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDU4ODljODM5MmUxNjI1MWIwYzgwOTI3NjA3YTAzMDM2CitUZXh0LWNvcHktc291cmNlLXNoYTE6IDM5MzQyNjRkMjc3YTBjZjg4NmI2YjFjN2YyYjllNTZkYTI1MjUzMDIKKworCitSZXZpc2lvbi1udW1iZXI6IDIzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjUKK0NvbnRlbnQtbGVuZ3RoOiAxMjUKKworSyA3Citzdm46bG9nCitWIDI3CisocjIzKSBNZXJnZSBsZWZ0IHRvIHRydW5rIDIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjQyLjA1Mjc5OFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogOTkKK0NvbnRlbnQtbGVuZ3RoOiA5OQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDY0CisvYnJhbmNoZXMvbGVmdDoyLTIyCisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMTcKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvUkVBRE1FCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0L1JFQURNRQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IGZkYmNmYjZiZTlhZmUxMTIxODYyMTQzZjIyNmI1MWNmCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDFkMWY1ZWE0Y2ViNTg0MzM3ZmZlNTliODk4MGQ5MmUzYjc4ZGZlZjQKKworCitOb2RlLXBhdGg6IHRydW5rL2dsdXJwcAorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjIKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC9nbHVycHAKK1RleHQtY29weS1zb3VyY2UtbWQ1OiAxNGExNjlmNjI4ZTBiYjU5ZGY5YzIxNjA2NDlkMGEzMAorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiBlZjdkOTI5ZTUyMTc3NzY3ZWNmY2QyODk0MWY2YjdmMDRiNDEzMWUzCisKKworTm9kZS1wYXRoOiB0cnVuay91cmtraworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjIKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvbGVmdC91cmtraworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDU4ODljODM5MmUxNjI1MWIwYzgwOTI3NjA3YTAzMDM2CitUZXh0LWNvcHktc291cmNlLXNoYTE6IDM5MzQyNjRkMjc3YTBjZjg4NmI2YjFjN2YyYjllNTZkYTI1MjUzMDIKKworCitOb2RlLXBhdGg6IHRydW5rL3doYW1fZXRoCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAyMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiBicmFuY2hlcy9sZWZ0L3doYW1fZXRoCitUZXh0LWNvcHktc291cmNlLW1kNTogNzU3YmNkNTgxODU3MmVmM2Y5NTgwMDUyNjE3YzFjOGIKK1RleHQtY29weS1zb3VyY2Utc2hhMTogYjE2NTAxOWIwMDVjMTk5MjM3YmE4MjJjNDQwNGU3NzFlOTNiNjU0YQorCisKK05vZGUtcGF0aDogdHJ1bmsvemxvbmsKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDIyCitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvemxvbmsKK1RleHQtY29weS1zb3VyY2UtbWQ1OiA4YjlkOGM3YzJhYWE2MTY3ZTdkMzQwN2E3NzNiYmJiYQorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiA5NzE2NTI3ZWJkNzBhNzVjMjc2MjVjYWNiZWIyZDg5N2M2ZTg2MTc4CisKKworUmV2aXNpb24tbnVtYmVyOiAyNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTMwCitDb250ZW50LWxlbmd0aDogMTMwCisKK0sgNworc3ZuOmxvZworViAzMgorKHIyNCkgbm9uLW1lcmdlIHJpZ2h0IHRvIHRydW5rIDIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTE5VDA0OjE0OjQ0LjAzODQzNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogOTkKK0NvbnRlbnQtbGVuZ3RoOiA5OQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDY0CisvYnJhbmNoZXMvbGVmdDoyLTIyCisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMjIKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMjUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyOQorQ29udGVudC1sZW5ndGg6IDEyOQorCitLIDcKK3N2bjpsb2cKK1YgMzEKKyhyMjUpIG1ha2UgYjEgYnJhbmNoIGZyb20gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE4OjU2LjA4NDU4OVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2IxCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDI0CitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiAyNgorUHJvcC1jb250ZW50LWxlbmd0aDogMTI5CitDb250ZW50LWxlbmd0aDogMTI5CisKK0sgNworc3ZuOmxvZworViAzMQorKHIyNikgbWFrZSBiMiBicmFuY2ggZnJvbSB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTg6NTkuMDc2OTQwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMjUKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDI3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTUKK0NvbnRlbnQtbGVuZ3RoOiAxMTUKKworSyA3Citzdm46bG9nCitWIDE3CisocjI3KSBiMiB1cGRhdGUgMQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MDEuMDk1NzYyWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjIvYjJmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAzCitUZXh0LWNvbnRlbnQtbWQ1OiA1ZWRiZGQ1N2NiYTYyMWViM2M2ZTYwMWJmNTYzYjRkYworVGV4dC1jb250ZW50LXNoYTE6IDlkNGIzODA0OTc3NmJkMGEyMDc0ZDY3Y2FkMjNmOGVhZWQzNWEzYjMKK0NvbnRlbnQtbGVuZ3RoOiAxMworCitQUk9QUy1FTkQKK2IyCisKKworUmV2aXNpb24tbnVtYmVyOiAyOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTE1CitDb250ZW50LWxlbmd0aDogMTE1CisKK0sgNworc3ZuOmxvZworViAxNworKHIyOCkgYjEgdXBkYXRlIDEKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjAzLjA5NzQ2NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2IxL2IxZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMworVGV4dC1jb250ZW50LW1kNTogMDg3NzhkZmQ5YWM0ZjYwMzIzMTg5NmFiYTdhYWQ1MjMKK1RleHQtY29udGVudC1zaGExOiBiNTUxNzcxYWE0YWQ1YjE0MTIzZmMzYmQ5OGQ4OWRiMmJjMGVkZDRmCitDb250ZW50LWxlbmd0aDogMTMKKworUFJPUFMtRU5ECitiMQorCisKK1JldmlzaW9uLW51bWJlcjogMjkKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMjMKKyhyMjkpIE1lcmdlIGIxIHRvIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTowNi4wNzMxNzVaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDExOAorQ29udGVudC1sZW5ndGg6IDExOAorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDgzCisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9iMWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDI4CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2IxL2IxZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDA4Nzc4ZGZkOWFjNGY2MDMyMzE4OTZhYmE3YWFkNTIzCitUZXh0LWNvcHktc291cmNlLXNoYTE6IGI1NTE3NzFhYTRhZDViMTQxMjNmYzNiZDk4ZDg5ZGIyYmMwZWRkNGYKKworCitSZXZpc2lvbi1udW1iZXI6IDMwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxNDMKK0NvbnRlbnQtbGVuZ3RoOiAxNDMKKworSyA3Citzdm46bG9nCitWIDQ1CisocjMwKSB0cnVuayBjb21taXQgYmVmb3JlIG1lcmdpbmcgdHJ1bmsgdG8gYjIKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjA4LjA5NjM1M1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL3RydW5rZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNgorVGV4dC1jb250ZW50LW1kNTogZWRmNDVmZTVjOThjNTM2NzczM2IzOWJiYjJiYjIwZDkKK1RleHQtY29udGVudC1zaGExOiA3MzYxZDE2ODVlNWM4NmRmYzUyMzYyMGNmYWY1OThmMTk2Zjg2MjM5CitDb250ZW50LWxlbmd0aDogMTYKKworUFJPUFMtRU5ECit0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogMzEKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMjMKKyhyMzEpIE1lcmdlIHRydW5rIHRvIGIyCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOToxMS4wODE1NDFaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9iMgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMQorQ29udGVudC1sZW5ndGg6IDEzMQorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDk2CisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorL3RydW5rOjI2LTMwCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2IyL2IxZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzAKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsvYjFmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogMDg3NzhkZmQ5YWM0ZjYwMzIzMTg5NmFiYTdhYWQ1MjMKK1RleHQtY29weS1zb3VyY2Utc2hhMTogYjU1MTc3MWFhNGFkNWIxNDEyM2ZjM2JkOThkODlkYjJiYzBlZGQ0ZgorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvYjIvdHJ1bmtmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzMAorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuay90cnVua2ZpbGUKK1RleHQtY29weS1zb3VyY2UtbWQ1OiBlZGY0NWZlNWM5OGM1MzY3NzMzYjM5YmJiMmJiMjBkOQorVGV4dC1jb3B5LXNvdXJjZS1zaGExOiA3MzYxZDE2ODVlNWM4NmRmYzUyMzYyMGNmYWY1OThmMTk2Zjg2MjM5CisKKworUmV2aXNpb24tbnVtYmVyOiAzMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAyMworKHIzMikgTWVyZ2UgYjIgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjE0LjExNzkzOVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTM4CitDb250ZW50LWxlbmd0aDogMTM4CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMTAyCisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9iMjoyNi0zMQorL2JyYW5jaGVzL2xlZnQ6Mi0yMgorL2JyYW5jaGVzL2xlZnQtc3ViOjQtMTkKKy9icmFuY2hlcy9yaWdodDoyLTIyCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL2IyZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzEKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvYjIvYjJmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogNWVkYmRkNTdjYmE2MjFlYjNjNmU2MDFiZjU2M2I0ZGMKK1RleHQtY29weS1zb3VyY2Utc2hhMTogOWQ0YjM4MDQ5Nzc2YmQwYTIwNzRkNjdjYWQyM2Y4ZWFlZDM1YTNiMworCisKK1JldmlzaW9uLW51bWJlcjogMzMKK1Byb3AtY29udGVudC1sZW5ndGg6IDE0NQorQ29udGVudC1sZW5ndGg6IDE0NQorCitLIDcKK3N2bjpsb2cKK1YgNDcKKyhyMzMpIG1ha2UgZjEgYnJhbmNoIGZyb20gdHJ1bmsgd2l0aCBhIG5ldyBmaWxlCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOToxNy4xMDU4MzJaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9mMQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzMgorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK05vZGUtcGF0aDogYnJhbmNoZXMvZjEvZjFmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAzCitUZXh0LWNvbnRlbnQtbWQ1OiAyYjFhYmM2YjZjNWMwMDE4ODUxZjlmOGU2NDc1NTYzYgorVGV4dC1jb250ZW50LXNoYTE6IGFlY2U2ZGZiYTU4ODkwMGUwMGQ5NTYwMWQyMmI0NDA4ZDQ5NTgwYWYKK0NvbnRlbnQtbGVuZ3RoOiAxMworCitQUk9QUy1FTkQKK2YxCisKKworUmV2aXNpb24tbnVtYmVyOiAzNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTQ1CitDb250ZW50LWxlbmd0aDogMTQ1CisKK0sgNworc3ZuOmxvZworViA0NworKHIzNCkgbWFrZSBmMiBicmFuY2ggZnJvbSB0cnVuayB3aXRoIGEgbmV3IGZpbGUKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjIwLjExMDA1N1oKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2YyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDMzCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9mMi9mMmZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDMKK1RleHQtY29udGVudC1tZDU6IDU3NWM1NjM4ZDYwMjcxNDU3ZTU0YWI3ZDA3MzA5NTAyCitUZXh0LWNvbnRlbnQtc2hhMTogMWM0OWE0NDBjMzUyZjM0NzNlZmE5NTEyMjU1MDMzYjk0ZGM3ZGVmMAorQ29udGVudC1sZW5ndGg6IDEzCisKK1BST1BTLUVORAorZjIKKworCitSZXZpc2lvbi1udW1iZXI6IDM1CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjgKK0NvbnRlbnQtbGVuZ3RoOiAxMjgKKworSyA3Citzdm46bG9nCitWIDMwCisocjM1KSBNZXJnZSBmMSBhbmQgZjIgdG8gdHJ1bmsKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjI0LjA4MTQ5MFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMTczCitDb250ZW50LWxlbmd0aDogMTczCisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMTM3CisvYnJhbmNoZXMvYjE6MjUtMjgKKy9icmFuY2hlcy9iMjoyNi0zMQorL2JyYW5jaGVzL2YxOjMzLTM0CisvYnJhbmNoZXMvZjI6MzQKKy9icmFuY2hlcy9sZWZ0OjItMjIKKy9icmFuY2hlcy9sZWZ0LXN1Yjo0LTE5CisvYnJhbmNoZXMvcmlnaHQ6Mi0yMgorUFJPUFMtRU5ECisKKworTm9kZS1wYXRoOiB0cnVuay9mMWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDM0CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2YxL2YxZmlsZQorVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDJiMWFiYzZiNmM1YzAwMTg4NTFmOWY4ZTY0NzU1NjNiCitUZXh0LWNvcHktc291cmNlLXNoYTE6IGFlY2U2ZGZiYTU4ODkwMGUwMGQ5NTYwMWQyMmI0NDA4ZDQ5NTgwYWYKKworCitOb2RlLXBhdGg6IHRydW5rL2YyZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzQKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvZjIvZjJmaWxlCitUZXh0LWNvcHktc291cmNlLW1kNTogNTc1YzU2MzhkNjAyNzE0NTdlNTRhYjdkMDczMDk1MDIKK1RleHQtY29weS1zb3VyY2Utc2hhMTogMWM0OWE0NDBjMzUyZjM0NzNlZmE5NTEyMjU1MDMzYjk0ZGM3ZGVmMAorCisKK1JldmlzaW9uLW51bWJlcjogMzYKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzNQorQ29udGVudC1sZW5ndGg6IDEzNQorCitLIDcKK3N2bjpsb2cKK1YgMzcKKyhyMzYpIGFkZCBzdWJkaXJlY3RvcnkgdG8gbGVmdCBicmFuY2gKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjI2LjExMzUxNloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvc3ViZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL2xlZnQvc3ViZGlyL2Nvd2JveQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNworVGV4dC1jb250ZW50LW1kNTogZjFkNjUzMDI3OGFkNDA5ZTY4Y2M2NzU0NzZhZDk5NWYKK1RleHQtY29udGVudC1zaGExOiA3MzJkOWUzZTVjMzkxZmZkNzY3YTk4YjQ1ZGRjYzg0OGRlNzc4Y2VhCitDb250ZW50LWxlbmd0aDogMTcKKworUFJPUFMtRU5ECitZZWVoYXcKKworCitSZXZpc2lvbi1udW1iZXI6IDM3CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjMKK0NvbnRlbnQtbGVuZ3RoOiAxMjMKKworSyA3Citzdm46bG9nCitWIDI1CisocjM3KSBtZXJnZSBsZWZ0IHRvIHRydW5rCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOToyOS4wNzM2OTlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDE3MworQ29udGVudC1sZW5ndGg6IDE3MworCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDEzNworL2JyYW5jaGVzL2IxOjI1LTI4CisvYnJhbmNoZXMvYjI6MjYtMzEKKy9icmFuY2hlcy9mMTozMy0zNAorL2JyYW5jaGVzL2YyOjM0CisvYnJhbmNoZXMvbGVmdDoyLTM2CisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMjIKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDM2CitOb2RlLWNvcHlmcm9tLXBhdGg6IGJyYW5jaGVzL2xlZnQvc3ViZGlyCisKKworUmV2aXNpb24tbnVtYmVyOiAzOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTIzCitDb250ZW50LWxlbmd0aDogMTIzCisKK0sgNworc3ZuOmxvZworViAyNQorKHIzOCkgbWFrZSBwYXJ0aWFsIGJyYW5jaAorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MzIuMDcyMjQzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcGFydGlhbAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAzNworTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuay9zdWJkaXIKKworCitSZXZpc2lvbi1udW1iZXI6IDM5CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTgKK0NvbnRlbnQtbGVuZ3RoOiAxMTgKKworSyA3Citzdm46bG9nCitWIDIwCisocjM5KSBwYXJ0aWFsIHVwZGF0ZQorSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MzQuMDk3OTYxWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcGFydGlhbC9wYWxpbmRyb21lcworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogNWQxYzIwMjRmYjVlZmM0ZWVmODEyODU2ZGYxYjA4MGMKK1RleHQtY29udGVudC1zaGExOiA1Zjg1MDlkZGQxNGM5MWE1Mjg2NGRkMTQ0NzM0NGU3MDZmOWJiYzY5CitDb250ZW50LWxlbmd0aDogMTgKKworUFJPUFMtRU5ECityYWNlY2FyCisKKworUmV2aXNpb24tbnVtYmVyOiA0MAorUHJvcC1jb250ZW50LWxlbmd0aDogMTI2CitDb250ZW50LWxlbmd0aDogMTI2CisKK0sgNworc3ZuOmxvZworViAyOAorKHI0MCkgbWVyZ2UgcGFydGlhbCB0byB0cnVuaworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6MzcuMDgwMjExWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMjQ2CitDb250ZW50LWxlbmd0aDogMjQ2CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMjEwCisvYnJhbmNoZXMvYjEvc3ViZGlyOjI1LTI4CisvYnJhbmNoZXMvYjIvc3ViZGlyOjI2LTMxCisvYnJhbmNoZXMvZjEvc3ViZGlyOjMzLTM0CisvYnJhbmNoZXMvZjIvc3ViZGlyOjM0CisvYnJhbmNoZXMvbGVmdC9zdWJkaXI6Mi0zNgorL2JyYW5jaGVzL2xlZnQtc3ViL3N1YmRpcjo0LTE5CisvYnJhbmNoZXMvcGFydGlhbDozOC0zOQorL2JyYW5jaGVzL3JpZ2h0L3N1YmRpcjoyLTIyCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL3N1YmRpci9wYWxpbmRyb21lcworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMzkKK05vZGUtY29weWZyb20tcGF0aDogYnJhbmNoZXMvcGFydGlhbC9wYWxpbmRyb21lcworVGV4dC1jb3B5LXNvdXJjZS1tZDU6IDVkMWMyMDI0ZmI1ZWZjNGVlZjgxMjg1NmRmMWIwODBjCitUZXh0LWNvcHktc291cmNlLXNoYTE6IDVmODUwOWRkZDE0YzkxYTUyODY0ZGQxNDQ3MzQ0ZTcwNmY5YmJjNjkKKworCitSZXZpc2lvbi1udW1iZXI6IDQxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTYKK0NvbnRlbnQtbGVuZ3RoOiAxMTYKKworSyA3Citzdm46bG9nCitWIDE4CisocjQxKSB0YWdnaW5nIHYxLjAKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjQwLjA4MzQ2MFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRhZ3MvdjEuMAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiA0MAorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEzMQorQ29udGVudC1sZW5ndGg6IDEzMQorCitLIDcKK3N2bjpsb2cKK1YgMzMKKyhyNDIpIG1ha2UgYnVnZml4IGJyYW5jaCBmcm9tIHRhZworSyAxMAorc3ZuOmF1dGhvcgorViAzCithZG0KK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDItMjJUMDY6MTk6NDMuMTE4MDc1WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvYnVnZml4CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDQxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRhZ3MvdjEuMAorCisKK1JldmlzaW9uLW51bWJlcjogNDMKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMAorQ29udGVudC1sZW5ndGg6IDEyMAorCitLIDcKK3N2bjpsb2cKK1YgMjIKKyhyNDMpIGNvbW1pdCB0byBidWdmaXgKK0sgMTAKK3N2bjphdXRob3IKK1YgMworYWRtCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAyLTIyVDA2OjE5OjQ1LjA3OTUzNloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2J1Z2ZpeC9zdWJkaXIvcGFsaW5kcm9tZXMKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogMTQKK1RleHQtY29udGVudC1tZDU6IDNiMTJkOTg1NzhhM2Y0MzIwYmE5N2U2NmRhNTRmZTVmCitUZXh0LWNvbnRlbnQtc2hhMTogNjcyOTMxYzllOGFjMmM0MDgyMDllZmFiMmYwMTU2MzhiNmQ2NDA0MgorQ29udGVudC1sZW5ndGg6IDE0CisKK3JhY2VjYXIKK2theWFrCisKKworUmV2aXNpb24tbnVtYmVyOiA0NAorUHJvcC1jb250ZW50LWxlbmd0aDogMTI1CitDb250ZW50LWxlbmd0aDogMTI1CisKK0sgNworc3ZuOmxvZworViAyNworKHI0NCkgTWVyZ2UgQlVHRklYIHRvIFRSVU5LCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2FkbQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMi0yMlQwNjoxOTo0OC4wNzg5MTRaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiB0cnVuaworTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1Byb3AtY29udGVudC1sZW5ndGg6IDIxMAorQ29udGVudC1sZW5ndGg6IDIxMAorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDE3NAorL2JyYW5jaGVzL2IxOjI1LTI4CisvYnJhbmNoZXMvYjI6MjYtMzEKKy9icmFuY2hlcy9idWdmaXg6NDItNDMKKy9icmFuY2hlcy9mMTozMy0zNAorL2JyYW5jaGVzL2YyOjM0CisvYnJhbmNoZXMvbGVmdDoyLTM2CisvYnJhbmNoZXMvbGVmdC1zdWI6NC0xOQorL2JyYW5jaGVzL3JpZ2h0OjItMjIKKy90YWdzL3YxLjA6NDEKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogMjk3CitDb250ZW50LWxlbmd0aDogMjk3CisKK0sgMTMKK3N2bjptZXJnZWluZm8KK1YgMjYxCisvYnJhbmNoZXMvYjEvc3ViZGlyOjI1LTI4CisvYnJhbmNoZXMvYjIvc3ViZGlyOjI2LTMxCisvYnJhbmNoZXMvYnVnZml4L3N1YmRpcjo0Mi00MworL2JyYW5jaGVzL2YxL3N1YmRpcjozMy0zNAorL2JyYW5jaGVzL2YyL3N1YmRpcjozNAorL2JyYW5jaGVzL2xlZnQvc3ViZGlyOjItMzYKKy9icmFuY2hlcy9sZWZ0LXN1Yi9zdWJkaXI6NC0xOQorL2JyYW5jaGVzL3BhcnRpYWw6MzgtMzkKKy9icmFuY2hlcy9yaWdodC9zdWJkaXI6Mi0yMgorL3RhZ3MvdjEuMC9zdWJkaXI6NDEKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogdHJ1bmsvc3ViZGlyL3BhbGluZHJvbWVzCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDE0CitUZXh0LWNvbnRlbnQtbWQ1OiAzYjEyZDk4NTc4YTNmNDMyMGJhOTdlNjZkYTU0ZmU1ZgorVGV4dC1jb250ZW50LXNoYTE6IDY3MjkzMWM5ZThhYzJjNDA4MjA5ZWZhYjJmMDE1NjM4YjZkNjQwNDIKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCityYWNlY2FyCitrYXlhaworCisKZGlmZiAtLWdpdCBhL3QvdDkxNTItc3ZuLWVtcHR5LWRpcnMtYWZ0ZXItZ2Muc2ggYi90L3Q5MTUyLXN2bi1lbXB0eS1kaXJzLWFmdGVyLWdjLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMwMWU3NzkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUyLXN2bi1lbXB0eS1kaXJzLWFmdGVyLWdjLnNoCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgUm9iZXJ0IFplaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGNyZWF0ZXMgZW1wdHkgZGlyZWN0b3JpZXMsIGNhbGxzIGdpdCBnYywgbWFrZXMgc3VyZSB0aGV5IGFyZSBzdGlsbCBlbXB0eScKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHJlcG8nICcKKwlmb3IgaSBpbiBhIGIgYyBkIGQvZSBkL2UvZiAid2VpcmQgZmlsZSBuYW1lIgorCWRvCisJCXN2bl9jbWQgbWtkaXIgLW0gIm1rZGlyICRpIiAiJHN2bnJlcG8iLyIkaSIKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lJyAnZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIGNsb25lZCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBnYyBydW5zJyAnCisJKAorCQljZCBjbG9uZWQgJiYKKwkJZ2l0IHN2biBnYworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHN2biBta2RpcnMgcmVjcmVhdGVzIGVtcHR5IGRpcmVjdG9yaWVzIGFmdGVyIGdpdCBzdm4gZ2MnICcKKwkoCisJCWNkIGNsb25lZCAmJgorCQlybSAtciAqICYmCisJCWdpdCBzdm4gbWtkaXJzICYmCisJCWZvciBpIGluIGEgYiBjIGQgZC9lIGQvZS9mICJ3ZWlyZCBmaWxlIG5hbWUiCisJCWRvCisJCQlpZiAhIHRlc3QgLWQgIiRpIgorCQkJdGhlbgorCQkJCWVjaG8gPiYyICIkaSBkb2VzIG5vdCBleGlzdCIKKwkJCQlleGl0IDEKKwkJCWZpCisJCWRvbmUKKwkpCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1My1naXQtc3ZuLXJld3JpdGUtdXVpZC5zaCBiL3QvdDkxNTMtZ2l0LXN2bi1yZXdyaXRlLXV1aWQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODhhMmNmYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTMtZ2l0LXN2bi1yZXdyaXRlLXV1aWQuc2gKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBKYXkgU29mZmlhbgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIC0tcmV3cml0ZS11dWlkIHRlc3QnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit1dWlkPTZjYzhhZGE0LTU5MzItNGI0YS04MjQyLTM1MzRlZDhhMzIzMgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biByZXBvJyAiCisJc3ZuYWRtaW4gbG9hZCAtcSAnJHJhd3N2bnJlcG8nIDwgJyRURVNUX0RJUkVDVE9SWS90OTE1My9zdm4uZHVtcCcgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLS1yZXdyaXRlLXV1aWQ9JyR1dWlkJyAnJHN2bnJlcG8nICYmCisJZ2l0IHN2biBmZXRjaAorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHV1aWQnICIKKwlnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvcmVtb3Rlcy9naXQtc3ZufjAgfCBcCisJICAgZ3JlcCAnXiR7Z2l0X3N2bl9pZH06IC4qQDIgJHV1aWQkJyAmJgorCWdpdCBjYXQtZmlsZSBjb21taXQgcmVmcy9yZW1vdGVzL2dpdC1zdm5+MSB8IFwKKwkgICBncmVwICdeJHtnaXRfc3ZuX2lkfTogLipAMSAkdXVpZCQnCisJIgorCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNTMvc3ZuLmR1bXAgYi90L3Q5MTUzL3N2bi5kdW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZGZlNzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTUzL3N2bi5kdW1wCkBAIC0wLDAgKzEsNzUgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IGI0ODg1NjI2LWM5NGYtNGE2Yy1iMTc5LTAwYzAzMGZjNjhlOAorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNjo0MTowMy45MDg1NzZaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDkKK0NvbnRlbnQtbGVuZ3RoOiAxMDkKKworSyA3Citzdm46bG9nCitWIDExCitpbml0aWFsIGZvbworSyAxMAorc3ZuOmF1dGhvcgorViAzCitqYXkKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDY6NDE6NDguMzUzNzc2WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA0CitUZXh0LWNvbnRlbnQtbWQ1OiBkM2IwNzM4NGQxMTNlZGVjNDllYWE2MjM4YWQ1ZmYwMAorVGV4dC1jb250ZW50LXNoYTE6IGYxZDJkMmY5MjRlOTg2YWM4NmZkZjdiMzZjOTRiY2RmMzJiZWVjMTUKK0NvbnRlbnQtbGVuZ3RoOiAxNAorCitQUk9QUy1FTkQKK2ZvbworCisKK1JldmlzaW9uLW51bWJlcjogMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViAxMgorbm93IHdpdGggYmFyCitLIDEwCitzdm46YXV0aG9yCitWIDMKK2pheQorSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNjo0MjoxNC4yMTQ2NDBaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBmb28KK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGNoYW5nZQorVGV4dC1jb250ZW50LWxlbmd0aDogOAorVGV4dC1jb250ZW50LW1kNTogZjQ3Yzc1NjE0MDg3YThkZDkzOGJhNGFjZmYyNTI0OTQKK1RleHQtY29udGVudC1zaGExOiA0ZTQ4ZTJjOWEzZDJjYThhNzA4Y2IwY2M1NDU3MDA1NDRlZmI1MDIxCitDb250ZW50LWxlbmd0aDogOAorCitmb28KK2JhcgorCisKZGlmZiAtLWdpdCBhL3QvdDkxNTQtZ2l0LXN2bi1mYW5jeS1nbG9iLnNoIGIvdC90OTE1NC1naXQtc3ZuLWZhbmN5LWdsb2Iuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTAxNTBmMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTQtZ2l0LXN2bi1mYW5jeS1nbG9iLnNoCkBAIC0wLDAgKzEsNTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgSmF5IFNvZmZpYW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBmYW5jeSBnbG9iIHRlc3QnCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIHN2biByZXBvJyAiCisJc3ZuYWRtaW4gbG9hZCAtcSAnJHJhd3N2bnJlcG8nIDwgJyRURVNUX0RJUkVDVE9SWS90OTE1NC9zdm4uZHVtcCcgJiYKKwlnaXQgc3ZuIGluaXQgLS1taW5pbWl6ZS11cmwgLVQgdHJ1bmsgJyRzdm5yZXBvJyAmJgorCWdpdCBzdm4gZmV0Y2gKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCByZWQgYnJhbmNoJyAiCisJZ2l0IGNvbmZpZyBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcyAnYnJhbmNoZXMve3JlZH06cmVmcy9yZW1vdGVzLyonICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3JlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2dyZWVuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYmx1ZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGdyZSBicmFuY2gnICIKKwlnaXQgY29uZmlnIC0tZmlsZT0uZ2l0L3N2bi8ubWV0YWRhdGEgLS11bnNldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXYgJiYKKwlnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzICdicmFuY2hlcy97cmVkLGdyZX06cmVmcy9yZW1vdGVzLyonICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL3JlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2dyZWVuICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvYmx1ZQorCSIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGdyZWVuIGJyYW5jaCcgIgorCWdpdCBjb25maWcgLS1maWxlPS5naXQvc3ZuLy5tZXRhZGF0YSAtLXVuc2V0IHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzLW1heFJldiAmJgorCWdpdCBjb25maWcgc3ZuLXJlbW90ZS5zdm4uYnJhbmNoZXMgJ2JyYW5jaGVzL3tyZWQsZ3JlZW59OnJlZnMvcmVtb3Rlcy8qJyAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9yZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ncmVlbiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JsdWUKKwkiCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBhbGwgYnJhbmNoZXMnICIKKwlnaXQgY29uZmlnIC0tZmlsZT0uZ2l0L3N2bi8ubWV0YWRhdGEgLS11bnNldCBzdm4tcmVtb3RlLnN2bi5icmFuY2hlcy1tYXhSZXYgJiYKKwlnaXQgY29uZmlnIHN2bi1yZW1vdGUuc3ZuLmJyYW5jaGVzICdicmFuY2hlcy8qOnJlZnMvcmVtb3Rlcy8qJyAmJgorCWdpdCBzdm4gZmV0Y2ggJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9yZWQgJiYKKwlnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9ncmVlbiAmJgorCWdpdCByZXYtcGFyc2UgcmVmcy9yZW1vdGVzL2JsdWUKKwkiCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1NC9zdm4uZHVtcCBiL3QvdDkxNTQvc3ZuLmR1bXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RmYWJiNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTQvc3ZuLmR1bXAKQEAgLTAsMCArMSwyMjIgQEAKK1NWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uOiAyCisKK1VVSUQ6IGExODA5M2EwLTVmMGItNDRlMC04ZDg4LTg5MTFhYzcwNzhkYgorCitSZXZpc2lvbi1udW1iZXI6IDAKK1Byb3AtY29udGVudC1sZW5ndGg6IDU2CitDb250ZW50LWxlbmd0aDogNTYKKworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMC0wMS0yM1QwNzo0MDoyNS42NjAwNTNaCitQUk9QUy1FTkQKKworUmV2aXNpb24tbnVtYmVyOiAxCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMDQKK0NvbnRlbnQtbGVuZ3RoOiAxMDQKKworSyA3Citzdm46bG9nCitWIDcKK2luaXRpYWwKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQxOjMzLjYzNjM2NVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rL2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogNAorVGV4dC1jb250ZW50LW1kNTogZDNiMDczODRkMTEzZWRlYzQ5ZWFhNjIzOGFkNWZmMDAKK1RleHQtY29udGVudC1zaGExOiBmMWQyZDJmOTI0ZTk4NmFjODZmZGY3YjM2Yzk0YmNkZjMyYmVlYzE1CitDb250ZW50LWxlbmd0aDogMTQKKworUFJPUFMtRU5ECitmb28KKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgMTIKK2FkZCBicmFuY2hlcworSyAxMAorc3ZuOmF1dGhvcgorViAzCitqYXkKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDc6NDI6MzcuMjkwNjk0WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK05vZGUtcGF0aDogYnJhbmNoZXMvYmx1ZQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9ncmVlbgorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworTm9kZS1wYXRoOiBicmFuY2hlcy9yZWQKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogMworUHJvcC1jb250ZW50LWxlbmd0aDogMTA4CitDb250ZW50LWxlbmd0aDogMTA4CisKK0sgNworc3ZuOmxvZworViAxMAorcmVkIGNoYW5nZQorSyAxMAorc3ZuOmF1dGhvcgorViAzCitqYXkKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTAtMDEtMjNUMDc6NDM6MDIuMjA4OTE4WgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvcmVkL2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiA4CitUZXh0LWNvbnRlbnQtbWQ1OiA2NGMzYzhjZjdkMDIzM2FiNzYyNzYyM2E2ODg4OGJkMQorVGV4dC1jb250ZW50LXNoYTE6IDk1YTA0OTIwMjc4NzZhZGZkMzg5MWVjNzFlZTM3Yjc5ZWU0NGQ2NDAKK0NvbnRlbnQtbGVuZ3RoOiA4CisKK2ZvbworcmVkCisKKworUmV2aXNpb24tbnVtYmVyOiA0CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDEyCitncmVlbiBjaGFuZ2UKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQzOjE1Ljc0NjU4NloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2dyZWVuL2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LW1kNTogMDIwOWI2NDUwODkxYWJjMDMzZDVlYWFhOWQzYTgwMjMKK1RleHQtY29udGVudC1zaGExOiA4N2ZjM2JlZjlmYWVlYzQ4YzBjZDYxZGZjOTg1MWRiMzc3ZmRjY2Y3CitDb250ZW50LWxlbmd0aDogMTAKKworZm9vCitncmVlbgorCisKK1JldmlzaW9uLW51bWJlcjogNQorUHJvcC1jb250ZW50LWxlbmd0aDogMTA5CitDb250ZW50LWxlbmd0aDogMTA5CisKK0sgNworc3ZuOmxvZworViAxMQorYmx1ZSBjaGFuZ2UKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQzOjI5LjM2NDgxMVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL2JsdWUvZm9vCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBjaGFuZ2UKK1RleHQtY29udGVudC1sZW5ndGg6IDkKK1RleHQtY29udGVudC1tZDU6IDlmYmU0YzEzZDBiYWU4NjM4NmFlNTIwOWIyZTZiMjc1CitUZXh0LWNvbnRlbnQtc2hhMTogY2M0NTc1MDgzNDU5YTE2ZjlhYWVmNzk2YzRhMjQ1NmQ2NDY5MWJhMAorQ29udGVudC1sZW5ndGg6IDkKKworZm9vCitibHVlCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDEyCit0cnVuayBjaGFuZ2UKK0sgMTAKK3N2bjphdXRob3IKK1YgMworamF5CitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDEwLTAxLTIzVDA3OjQ0OjAxLjMxMzEzMFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IHRydW5rL2ZvbworTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogY2hhbmdlCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LW1kNTogMWM0ZGI5NzdkN2E1N2MzYmFlNTgyYWFiODc5NDg1MTYKK1RleHQtY29udGVudC1zaGExOiA0NjljMDhkZjQ0OWU3MDJjZjJhMWZlNzQ2MjQ0YTllZjNmODM3ZmFkCitDb250ZW50LWxlbmd0aDogMTAKKworZm9vCit0cnVuaworCisKZGlmZiAtLWdpdCBhL3QvdDkxNTUtZ2l0LXN2bi1mZXRjaC1kZWxldGVkLXRhZy5zaCBiL3QvdDkxNTUtZ2l0LXN2bi1mZXRjaC1kZWxldGVkLXRhZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xODQzMzZmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1NS1naXQtc3ZuLWZldGNoLWRlbGV0ZWQtdGFnLnNoCkBAIC0wLDAgKzEsNDIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGZldGNoIGRlbGV0ZWQgdGFnJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZuIHJlcG8nICcKKwlta2RpciAtcCBpbXBvcnQvdHJ1bmsvc3ViZGlyICYmCisJbWtkaXIgLXAgaW1wb3J0L2JyYW5jaGVzICYmCisJbWtkaXIgLXAgaW1wb3J0L3RhZ3MgJiYKKwllY2hvICJiYXNlIiA+aW1wb3J0L3RydW5rL3N1YmRpci9maWxlICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImltcG9ydCBmb3IgZ2l0IHN2biIgaW1wb3J0ICIkc3ZucmVwbyIgJiYKKwlybSAtcmYgaW1wb3J0ICYmCisKKwlzdm5fY21kIG1rZGlyIC1tICJjcmVhdGUgbXlicmFuY2ggZGlyZWN0b3J5IiAiJHN2bnJlcG8vYnJhbmNoZXMvbXlicmFuY2giICYmCisJc3ZuX2NtZCBjcCAtbSAiY3JlYXRlIGJyYW5jaCBteWJyYW5jaCIgIiRzdm5yZXBvL3RydW5rIiAiJHN2bnJlcG8vYnJhbmNoZXMvbXlicmFuY2gvdHJ1bmsiICYmCisKKwlzdm5fY21kIGNvICIkc3ZucmVwby90cnVuayIgc3ZuX3Byb2plY3QgJiYKKwkoY2Qgc3ZuX3Byb2plY3QgJiYKKwkJZWNobyAidHJ1bmsgY2hhbmdlIiA+PnN1YmRpci9maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gInRydW5rIGNoYW5nZSIgc3ViZGlyL2ZpbGUgJiYKKworCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8vYnJhbmNoZXMvbXlicmFuY2gvdHJ1bmsiICYmCisJCWVjaG8gImJyYW5jaCBjaGFuZ2UiID4+c3ViZGlyL2ZpbGUgJiYKKwkJc3ZuX2NtZCBjaSAtbSAiYnJhbmNoIGNoYW5nZSIgc3ViZGlyL2ZpbGUKKwkpICYmCisKKwlzdm5fY21kIGNwIC1tICJjcmVhdGUgbXl0YWcgYXR0ZW1wdCAxIiAtcjUgIiRzdm5yZXBvL3RydW5rL3N1YmRpciIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciICYmCisJc3ZuX2NtZCBybSAtbSAiZGVsZXRlIG15dGFnIGF0dGVtcHQgMSIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciICYmCisJc3ZuX2NtZCBjcCAtbSAiY3JlYXRlIG15dGFnIGF0dGVtcHQgMiIgLXI1ICIkc3ZucmVwby9icmFuY2hlcy9teWJyYW5jaC90cnVuay9zdWJkaXIiICIkc3ZucmVwby90YWdzL215dGFnIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmZXRjaCBkZWxldGVkIHRhZ3MgZnJvbSBzYW1lIHJldmlzaW9uIHdpdGggY2hlY2tzdW0gZXJyb3InICcKKwlnaXQgc3ZuIGluaXQgLS1zdGRsYXlvdXQgIiRzdm5yZXBvIiBnaXRfcHJvamVjdCAmJgorCWNkIGdpdF9wcm9qZWN0ICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgb3JpZ2luL215YnJhbmNoOnRydW5rL3N1YmRpci9maWxlIG9yaWdpbi90YWdzL215dGFnOmZpbGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXI6c3ViZGlyL2ZpbGUgb3JpZ2luL3RhZ3MvbXl0YWdeOmZpbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTU2LWdpdC1zdm4tZmV0Y2gtZGVsZXRlZC10YWctMi5zaCBiL3QvdDkxNTYtZ2l0LXN2bi1mZXRjaC1kZWxldGVkLXRhZy0yLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdhNmUzM2IKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTU2LWdpdC1zdm4tZmV0Y2gtZGVsZXRlZC10YWctMi5zaApAQCAtMCwwICsxLDQ0IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBmZXRjaCBkZWxldGVkIHRhZyAyJworCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZuIHJlcG8nICcKKwlta2RpciAtcCBpbXBvcnQvYnJhbmNoZXMgJiYKKwlta2RpciAtcCBpbXBvcnQvdGFncyAmJgorCW1rZGlyIC1wIGltcG9ydC90cnVuay9zdWJkaXIxICYmCisJbWtkaXIgLXAgaW1wb3J0L3RydW5rL3N1YmRpcjIgJiYKKwlta2RpciAtcCBpbXBvcnQvdHJ1bmsvc3ViZGlyMyAmJgorCWVjaG8gImZpbGUxIiA+aW1wb3J0L3RydW5rL3N1YmRpcjEvZmlsZSAmJgorCWVjaG8gImZpbGUyIiA+aW1wb3J0L3RydW5rL3N1YmRpcjIvZmlsZSAmJgorCWVjaG8gImZpbGUzIiA+aW1wb3J0L3RydW5rL3N1YmRpcjMvZmlsZSAmJgorCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdCBzdm4iIGltcG9ydCAiJHN2bnJlcG8iICYmCisJcm0gLXJmIGltcG9ydCAmJgorCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8vdHJ1bmsiIHN2bl9wcm9qZWN0ICYmCisJKGNkIHN2bl9wcm9qZWN0ICYmCisJCWVjaG8gImNoYW5nZTEiID4+c3ViZGlyMS9maWxlICYmCisJCWVjaG8gImNoYW5nZTIiID4+c3ViZGlyMi9maWxlICYmCisJCWVjaG8gImNoYW5nZTMiID4+c3ViZGlyMy9maWxlICYmCisJCXN2bl9jbWQgY2kgLW0gImNoYW5nZSIgLgorCSkgJiYKKworCXN2bl9jbWQgY3AgLW0gImNyZWF0ZSBteXRhZyAxIiAtcjIgIiRzdm5yZXBvL3RydW5rL3N1YmRpcjEiICIkc3ZucmVwby90YWdzL215dGFnIiAmJgorCXN2bl9jbWQgcm0gLW0gImRlbGV0ZSBteXRhZyAxIiAiJHN2bnJlcG8vdGFncy9teXRhZyIgJiYKKwlzdm5fY21kIGNwIC1tICJjcmVhdGUgbXl0YWcgMiIgLXIyICIkc3ZucmVwby90cnVuay9zdWJkaXIyIiAiJHN2bnJlcG8vdGFncy9teXRhZyIgJiYKKwlzdm5fY21kIHJtIC1tICJkZWxldGUgbXl0YWcgMiIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciICYmCisJc3ZuX2NtZCBjcCAtbSAiY3JlYXRlIG15dGFnIDMiIC1yMiAiJHN2bnJlcG8vdHJ1bmsvc3ViZGlyMyIgIiRzdm5yZXBvL3RhZ3MvbXl0YWciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZldGNoIGRlbGV0ZWQgdGFncyBmcm9tIHNhbWUgcmV2aXNpb24gd2l0aCBubyBjaGVja3N1bSBlcnJvcicgJworCWdpdCBzdm4gaW5pdCAtLXN0ZGxheW91dCAiJHN2bnJlcG8iIGdpdF9wcm9qZWN0ICYmCisJY2QgZ2l0X3Byb2plY3QgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXI6c3ViZGlyMy9maWxlIG9yaWdpbi90YWdzL215dGFnOmZpbGUgJiYKKwlnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXI6c3ViZGlyMi9maWxlIG9yaWdpbi90YWdzL215dGFnXjpmaWxlICYmCisJZ2l0IGRpZmYgLS1leGl0LWNvZGUgbWFzdGVyOnN1YmRpcjEvZmlsZSBvcmlnaW4vdGFncy9teXRhZ15eOmZpbGUKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTU3LWdpdC1zdm4tZmV0Y2gtbWVyZ2Uuc2ggYi90L3Q5MTU3LWdpdC1zdm4tZmV0Y2gtbWVyZ2Uuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTkxZDJhYQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTctZ2l0LXN2bi1mZXRjaC1tZXJnZS5zaApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIFN0ZXZlbiBXYWx0ZXIKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBtZXJnZSBkZXRlY3Rpb24nCisuIC4vbGliLWdpdC1zdm4uc2gKKworc3ZuX3Zlcj0iJChzdm4gLS12ZXJzaW9uIC0tcXVpZXQpIgorY2FzZSAkc3ZuX3ZlciBpbgorMC4qIHwgMS5bMC00XS4qKQorCXNraXBfYWxsPSJza2lwcGluZyBnaXQtc3ZuIHRlc3QgLSBTVk4gdG9vIG9sZCAoJHN2bl92ZXIpIgorCXRlc3RfZG9uZQorCTs7Citlc2FjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc291cmNlIHN2biByZXBvJyAnCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwlzdm5fY21kIG1rZGlyIC1tIHggIiRzdm5yZXBvIi9icmFuY2hlcyAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRTVk5fVFJFRSIgJiYKKwkJdG91Y2ggZm9vICYmCisJCXN2biBhZGQgZm9vICYmCisJCXN2biBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCQlzdm4gY3AgLW0gYnJhbmNoICIkc3ZucmVwbyIvdHJ1bmsgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXRvdWNoIGJhciAmJgorCQlzdm4gYWRkIGJhciAmJgorCQlzdm4gY29tbWl0IC1tIHggJiYKKwkJc3ZuIGNwIC1tIGJyYW5jaCAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQlzdm4gc3dpdGNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQl0b3VjaCBiYXogJiYKKwkJc3ZuIGFkZCBiYXogJiYKKwkJc3ZuIGNvbW1pdCAtbSB4ICYmCisJCXN2biBzd2l0Y2ggIiRzdm5yZXBvIi90cnVuayAmJgorCQlzdm4gbWVyZ2UgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXN2biBjb21taXQgLW0gIm1lcmdlIiAmJgorCQlzdm4gc3dpdGNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQlzdm4gY29tbWl0IC1tIHggJiYKKwkJc3ZuIHN3aXRjaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuIG1lcmdlICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQlzdm4gY29tbWl0IC1tICJtZXJnZSBicmFuY2gxIiAmJgorCQlzdm4gc3dpdGNoICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwkJc3ZuIG1lcmdlICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQlzdm4gcmVzb2x2ZWQgYmF6ICYmCisJCXN2biBjb21taXQgLW0gIm1lcmdlIGJyYW5jaDIiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzdm4gcmVwbycgJworCWdpdCBzdm4gaW5pdCAtcyAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgY29tbWl0JyAnZ2l0IHJldi1wYXJzZSBIRUFEXjInCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1OC1naXQtc3ZuLW1lcmdlaW5mby5zaCBiL3QvdDkxNTgtZ2l0LXN2bi1tZXJnZWluZm8uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTNmNzhmMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNTgtZ2l0LXN2bi1tZXJnZWluZm8uc2gKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMCBTdGV2ZW4gV2FsdGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbWVyZ2VpbmZvIHByb3BhZ2F0aW9uJworCisuIC4vbGliLWdpdC1zdm4uc2gKKworc2F5ICdkZWZpbmUgTk9fU1ZOX1RFU1RTIHRvIHNraXAgZ2l0IHN2biB0ZXN0cycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzb3VyY2Ugc3ZuIHJlcG8nICcKKwlzdm5fY21kIG1rZGlyIC1tIHggIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRTVk5fVFJFRSIgJiYKKwkJdG91Y2ggZm9vICYmCisJCXN2bl9jbWQgYWRkIGZvbyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiaW5pdGlhbCBjb21taXQiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzdm4gcmVwbycgJworCWdpdCBzdm4gaW5pdCAiJHN2bnJlcG8iL3RydW5rICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugc3ZuOm1lcmdlaW5mbycgJworCXRvdWNoIGJhciAmJgorCWdpdCBhZGQgYmFyICYmCisJZ2l0IGNvbW1pdCAtbSAiYmFyIiAmJgorCWdpdCBzdm4gZGNvbW1pdCAtLW1lcmdlaW5mbz0iL2JyYW5jaGVzL2ZvbzoxLTEwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgc3ZuOm1lcmdlaW5mbycgJworCW1lcmdlaW5mbz0kKHN2bl9jbWQgcHJvcGdldCBzdm46bWVyZ2VpbmZvICIkc3ZucmVwbyIvdHJ1bmspICYmCisJdGVzdCAiJG1lcmdlaW5mbyIgPSAiL2JyYW5jaGVzL2ZvbzoxLTEwIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGFuZ2Ugc3ZuOm1lcmdlaW5mbyBtdWx0aWxpbmUnICcKKwl0b3VjaCBiYXogJiYKKwlnaXQgYWRkIGJheiAmJgorCWdpdCBjb21taXQgLW0gImJheiIgJiYKKwlnaXQgc3ZuIGRjb21taXQgLS1tZXJnZWluZm89Ii9icmFuY2hlcy9iYXI6MS0xMCAvYnJhbmNoZXMvb3RoZXI6My01LDgsMTAtMTEiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBzdm46bWVyZ2VpbmZvIG11bHRpbGluZScgJworCW1lcmdlaW5mbz0kKHN2bl9jbWQgcHJvcGdldCBzdm46bWVyZ2VpbmZvICIkc3ZucmVwbyIvdHJ1bmspICYmCisJdGVzdCAiJG1lcmdlaW5mbyIgPSAiL2JyYW5jaGVzL2JhcjoxLTEwCisvYnJhbmNoZXMvb3RoZXI6My01LDgsMTAtMTEiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE1OS1naXQtc3ZuLW5vLXBhcmVudC1tZXJnZWluZm8uc2ggYi90L3Q5MTU5LWdpdC1zdm4tbm8tcGFyZW50LW1lcmdlaW5mby5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OWU0ODE1Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE1OS1naXQtc3ZuLW5vLXBhcmVudC1tZXJnZWluZm8uc2gKQEAgLTAsMCArMSw0MSBAQAorIyEvYmluL3NoCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGhhbmRsaW5nIG9mIHJvb3QgY29tbWl0cyBpbiBtZXJnZSByYW5nZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKworc3ZuX3Zlcj0iJChzdm4gLS12ZXJzaW9uIC0tcXVpZXQpIgorY2FzZSAkc3ZuX3ZlciBpbgorMC4qIHwgMS5bMC00XS4qKQorCXNraXBfYWxsPSJza2lwcGluZyBnaXQtc3ZuIHRlc3QgLSBTVk4gdG9vIG9sZCAoJHN2bl92ZXIpIgorCXRlc3RfZG9uZQorCTs7Citlc2FjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Rlc3QgaGFuZGxpbmcgb2Ygcm9vdCBjb21taXRzIGluIG1lcmdlIHJhbmdlcycgJworCW1rZGlyIC1wIGluaXQvdHJ1bmsgaW5pdC9icmFuY2hlcyBpbml0L3RhZ3MgJiYKKwllY2hvICJyMSIgPiBpbml0L3RydW5rL2ZpbGUudHh0ICYmCisJc3ZuX2NtZCBpbXBvcnQgLW0gImluaXRpYWwgaW1wb3J0IiBpbml0ICIkc3ZucmVwbyIgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIgdG1wICYmCisJKAorCQljZCB0bXAgJiYKKwkJZWNobyAicjIiID4gdHJ1bmsvZmlsZS50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIk1vZGlmeSBmaWxlLnR4dCBvbiB0cnVuayIgJiYKKwkJc3ZuX2NtZCBjcCB0cnVua0AxIGJyYW5jaGVzL2EgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkNyZWF0ZSBicmFuY2ggYSBmcm9tIHRydW5rIHIxIiAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOm1lcmdlaW5mbyAvdHJ1bms6MS0yIGJyYW5jaGVzL2EgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkZha2UgbWVyZ2Ugb2YgdHJ1bmsgcjIgaW50byBicmFuY2ggYSIgJiYKKwkJbWtkaXIgYnJhbmNoZXMvYiAmJgorCQllY2hvICJyNSIgPiBicmFuY2hlcy9iL2ZpbGUyLnR4dCAmJgorCQlzdm5fY21kIGFkZCBicmFuY2hlcy9iICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJDcmVhdGUgYnJhbmNoIGIgZnJvbSB0aGluIGFpciIgJiYKKwkJZWNobyAicjYiID4gYnJhbmNoZXMvYi9maWxlMi50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIk1vZGlmeSBmaWxlMi50eHQgb24gYnJhbmNoIGIiICYmCisJCXN2bl9jbWQgY3AgYnJhbmNoZXMvYkA1IGJyYW5jaGVzL2MgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIkNyZWF0ZSBicmFuY2ggYyBmcm9tIGJyYW5jaCBiIHI1IiAmJgorCQlzdm5fY21kIHByb3BzZXQgc3ZuOm1lcmdlaW5mbyAvYnJhbmNoZXMvYjo1LTYgYnJhbmNoZXMvYyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiRmFrZSBtZXJnZSBvZiBicmFuY2ggYiByNiBpbnRvIGJyYW5jaCBjIgorCSkgJiYKKwlnaXQgc3ZuIGluaXQgLXMgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2gKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2MC1naXQtc3ZuLXByZXNlcnZlLWVtcHR5LWRpcnMuc2ggYi90L3Q5MTYwLWdpdC1zdm4tcHJlc2VydmUtZW1wdHktZGlycy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNGE0NDM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2MC1naXQtc3ZuLXByZXNlcnZlLWVtcHR5LWRpcnMuc2gKQEAgLTAsMCArMSwxNTMgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTEgUmF5IENoZW4KKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biB0ZXN0IChvcHRpb24gLS1wcmVzZXJ2ZS1lbXB0eS1kaXJzKQorCitUaGlzIHRlc3QgdXNlcyBnaXQgdG8gY2xvbmUgYSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgdGhhdCBjb250YWlucyBlbXB0eQorZGlyZWN0b3JpZXMsIGFuZCBjaGVja3MgdGhhdCBjb3JyZXNwb25kaW5nIGRpcmVjdG9yaWVzIGFyZSBjcmVhdGVkIGluIHRoZQorbG9jYWwgR2l0IHJlcG9zaXRvcnkgd2l0aCBwbGFjZWhvbGRlciBmaWxlcy4nCisKKy4gLi9saWItZ2l0LXN2bi5zaAorCitzYXkgJ2RlZmluZSBOT19TVk5fVEVTVFMgdG8gc2tpcCBnaXQgc3ZuIHRlc3RzJworR0lUX1JFUE89Z2l0LXN2bi1yZXBvCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc291cmNlIHN2biByZXBvIGNvbnRhaW5pbmcgZW1wdHkgZGlycycgJworCXN2bl9jbWQgbWtkaXIgLW0geCAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rICIkU1ZOX1RSRUUiICYmCisJKAorCQljZCAiJFNWTl9UUkVFIiAmJgorCQlta2RpciAtcCAxIDIgMy9hIDMvYiA0IDUgNiAmJgorCQllY2hvICJGaXJzdCBub24tZW1wdHkgZmlsZSIgID4gMi9maWxlMS50eHQgJiYKKwkJZWNobyAiU2Vjb25kIG5vbi1lbXB0eSBmaWxlIiA+IDIvZmlsZTIudHh0ICYmCisJCWVjaG8gIlRoaXJkIG5vbi1lbXB0eSBmaWxlIiAgPiAzL2EvZmlsZTEudHh0ICYmCisJCWVjaG8gIkZvdXJ0aCBub24tZW1wdHkgZmlsZSIgPiAzL2IvZmlsZTEudHh0ICYmCisJCXN2bl9jbWQgYWRkIDEgMiAzIDQgNSA2ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKworCQlta2RpciA0L2EgJiYKKwkJc3ZuX2NtZCBhZGQgNC9hICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJuZXN0ZWQgZW1wdHkgZGlyZWN0b3J5IiAmJgorCQlta2RpciA0L2EvYiAmJgorCQlzdm5fY21kIGFkZCA0L2EvYiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiZGVlcGx5IG5lc3RlZCBlbXB0eSBkaXJlY3RvcnkiICYmCisJCW1rZGlyIDQvYS9iL2MgJiYKKwkJc3ZuX2NtZCBhZGQgNC9hL2IvYyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAicmVhbGx5IGRlZXBseSBuZXN0ZWQgZW1wdHkgZGlyZWN0b3J5IiAmJgorCQllY2hvICJLaWxsIHRoZSBwbGFjZWhvbGRlciBmaWxlIiA+IDQvYS9iL2MvZm9vICYmCisJCXN2bl9jbWQgYWRkIDQvYS9iL2MvZm9vICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJSZWd1bGFyIGZpbGUgdG8gcmVtb3ZlIHBsYWNlaG9sZGVyIiAmJgorCisJCXN2bl9jbWQgZGVsIDIvZmlsZTIudHh0ICYmCisJCXN2bl9jbWQgZGVsIDMvYiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiZGVsZXRlIG5vbi1sYXN0IGVudHJ5IGluIGRpcmVjdG9yeSIgJiYKKworCQlzdm5fY21kIGRlbCAyL2ZpbGUxLnR4dCAmJgorCQlzdm5fY21kIGRlbCAzL2EgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImRlbGV0ZSBsYXN0IGVudHJ5IGluIGRpcmVjdG9yeSIgJiYKKworCQllY2hvICJDb25mbGljdCBmaWxlIiA+IDUvLnBsYWNlaG9sZGVyICYmCisJCW1rZGlyIDYvLnBsYWNlaG9sZGVyICYmCisJCXN2bl9jbWQgYWRkIDUvLnBsYWNlaG9sZGVyIDYvLnBsYWNlaG9sZGVyICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJQbGFjZWhvbGRlciBOYW1lc3BhY2UgY29uZmxpY3QiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzdm4gcmVwbyB3aXRoIC0tcHJlc2VydmUtZW1wdHktZGlycycgJworCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi90cnVuayAtLXByZXNlcnZlLWVtcHR5LWRpcnMgIiRHSVRfUkVQTyIKKycKKworIyAiJEdJVF9SRVBPIi8xIHNob3VsZCBvbmx5IGNvbnRhaW4gdGhlIHBsYWNlaG9sZGVyIGZpbGUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3RvcnkgZW1wdHkgZnJvbSBpbmNlcHRpb24nICcKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzEvLmdpdGlnbm9yZSAmJgorCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iLzEgLXR5cGUgZiB8IHdjIC1sKSA9ICIxIgorJworCisjICIkR0lUX1JFUE8iLzIgYW5kICIkR0lUX1JFUE8iLzMgc2hvdWxkIG9ubHkgY29udGFpbiB0aGUgcGxhY2Vob2xkZXIgZmlsZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RpcmVjdG9yeSBlbXB0eSBmcm9tIHN1YnNlcXVlbnQgc3ZuIGNvbW1pdCcgJworCXRlc3QgLWYgIiRHSVRfUkVQTyIvMi8uZ2l0aWdub3JlICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIvMiAtdHlwZSBmIHwgd2MgLWwpID0gIjEiICYmCisJdGVzdCAtZiAiJEdJVF9SRVBPIi8zLy5naXRpZ25vcmUgJiYKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIi8zIC10eXBlIGYgfCB3YyAtbCkgPSAiMSIKKycKKworIyBObyBwbGFjZWhvbGRlciBmaWxlcyBzaG91bGQgZXhpc3QgaW4gIiRHSVRfUkVQTyIvNCwgZXZlbiB0aG91Z2ggb25lIHdhcworIyBnZW5lcmF0ZWQgZm9yIGV2ZXJ5IHN1Yi1kaXJlY3RvcnkgYXQgc29tZSBwb2ludCBpbiB0aGUgcmVwbydzIGhpc3RvcnkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgZW50cnkgdG8gcHJldmlvdXNseSBlbXB0eSBkaXJlY3RvcnknICcKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIi80IC10eXBlIGYgfCB3YyAtbCkgPSAiMSIgJiYKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzQvYS9iL2MvZm9vCisnCisKKyMgVGhlIEhFQUR+MiBjb21taXQgc2hvdWxkIG5vdCBoYXZlIGludHJvZHVjZWQgLmdpdGlnbm9yZSBwbGFjZWhvbGRlciBmaWxlcy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlbW92ZSBub24tbGFzdCBlbnRyeSBmcm9tIGRpcmVjdG9yeScgJworCSgKKwkJY2QgIiRHSVRfUkVQTyIgJiYKKwkJZ2l0IGNoZWNrb3V0IEhFQUR+MgorCSkgJiYKKwl0ZXN0X211c3RfZmFpbCB0ZXN0IC1mICIkR0lUX1JFUE8iLzIvLmdpdGlnbm9yZSAmJgorCXRlc3RfbXVzdF9mYWlsIHRlc3QgLWYgIiRHSVRfUkVQTyIvMy8uZ2l0aWdub3JlCisnCisKKyMgQWZ0ZXIgcmUtY2xvbmluZyB0aGUgcmVwb3NpdG9yeSB3aXRoIC0tcGxhY2Vob2xkZXItZmlsZSBzcGVjaWZpZWQsIHRoZXJlCisjIHNob3VsZCBiZSA1IGZpbGVzIG5hbWVkICIucGxhY2Vob2xkZXIiIGluIHRoZSBsb2NhbCBHaXQgcmVwby4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHN2biByZXBvIHdpdGggLS1wbGFjZWhvbGRlci1maWxlIHNwZWNpZmllZCcgJworCXJtIC1yZiAiJEdJVF9SRVBPIiAmJgorCWdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIi90cnVuayAtLXByZXNlcnZlLWVtcHR5LWRpcnMgXAorCQktLXBsYWNlaG9sZGVyLWZpbGU9LnBsYWNlaG9sZGVyICIkR0lUX1JFUE8iICYmCisJZmluZCAiJEdJVF9SRVBPIiAtdHlwZSBmIC1uYW1lICIucGxhY2Vob2xkZXIiICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIgLXR5cGUgZiAtbmFtZSAiLnBsYWNlaG9sZGVyIiB8IHdjIC1sKSA9ICI1IgorJworCisjICIkR0lUX1JFUE8iLzUvLnBsYWNlaG9sZGVyIHNob3VsZCBiZSBhIGZpbGUsIGFuZCBub24tZW1wdHkuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFjZWhvbGRlciBuYW1lc3BhY2UgY29uZmxpY3Qgd2l0aCBmaWxlJyAnCisJdGVzdCAtcyAiJEdJVF9SRVBPIi81Ly5wbGFjZWhvbGRlcgorJworCisjICIkR0lUX1JFUE8iLzYvLnBsYWNlaG9sZGVyIHNob3VsZCBiZSBhIGRpcmVjdG9yeSwgYW5kIHRoZSAiJEdJVF9SRVBPIi82IHRyZWUKKyMgc2hvdWxkIG9ubHkgY29udGFpbiBvbmUgZmlsZTogdGhlIHBsYWNlaG9sZGVyLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncGxhY2Vob2xkZXIgbmFtZXNwYWNlIGNvbmZsaWN0IHdpdGggZGlyZWN0b3J5JyAnCisJdGVzdCAtZCAiJEdJVF9SRVBPIi82Ly5wbGFjZWhvbGRlciAmJgorCXRlc3QgLWYgIiRHSVRfUkVQTyIvNi8ucGxhY2Vob2xkZXIvLnBsYWNlaG9sZGVyICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIvNiAtdHlwZSBmIHwgd2MgLWwpID0gIjEiCisnCisKKyMgUHJlcGFyZSBhIHNlY29uZCBzZXQgb2Ygc3ZuIGNvbW1pdHMgdG8gdGVzdCBwZXJzaXN0ZW5jZSBkdXJpbmcgcmViYXNlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2Vjb25kIHNldCBvZiBzdm4gY29tbWl0cyBhbmQgcmViYXNlJyAnCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rICIkU1ZOX1RSRUUiICYmCisJKAorCQljZCAiJFNWTl9UUkVFIiAmJgorCQlta2RpciAtcCA3ICYmCisJCWVjaG8gIlRoaXMgc2hvdWxkIHJlbW92ZSBwbGFjZWhvbGRlciIgPiAxL2ZpbGUxLnR4dCAmJgorCQllY2hvICJUaGlzIHNob3VsZCBub3QgcmVtb3ZlIHBsYWNlaG9sZGVyIiA+IDUvZmlsZTEudHh0ICYmCisJCXN2bl9jbWQgYWRkIDcgMS9maWxlMS50eHQgNS9maWxlMS50eHQgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gInN1YnNlcXVlbnQgc3ZuIGNvbW1pdCBmb3IgcGVyc2lzdGVuY2UgdGVzdHMiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRHSVRfUkVQTyIgJiYKKwkJZ2l0IHN2biByZWJhc2UKKwkpCisnCisKKyMgQ2hlY2sgdGhhdCAtLXByZXNlcnZlLWVtcHR5LWRpcnMgYW5kIC0tcGxhY2Vob2xkZXItZmlsZSBmbGFnIHN0YXRlCisjIHN0YXlzIHBlcnNpc3RlbnQgb3ZlciBtdWx0aXBsZSBpbnZvY2F0aW9ucy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZsYWcgcGVyc2lzdGVuY2UgZHVyaW5nIHN1YnNxZXVlbnQgcmViYXNlJyAnCisJdGVzdCAtZiAiJEdJVF9SRVBPIi83Ly5wbGFjZWhvbGRlciAmJgorCXRlc3QgJChmaW5kICIkR0lUX1JFUE8iLzcgLXR5cGUgZiB8IHdjIC1sKSA9ICIxIgorJworCisjIENoZWNrIHRoYXQgcGxhY2Vob2xkZXIgZmlsZXMgYXJlIHByb3Blcmx5IHJlbW92ZWQgd2hlbiB1bm5lY2Vzc2FyeSwKKyMgZXZlbiBhY3Jvc3MgbXVsdGlwbGUgaW52b2NhdGlvbnMuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwbGFjZWhvbGRlciBsaXN0IHBlcnNpc3RlbmNlIGR1cmluZyBzdWJzcWV1ZW50IHJlYmFzZScgJworCXRlc3QgLWYgIiRHSVRfUkVQTyIvMS9maWxlMS50eHQgJiYKKwl0ZXN0ICQoZmluZCAiJEdJVF9SRVBPIi8xIC10eXBlIGYgfCB3YyAtbCkgPSAiMSIgJiYKKworCXRlc3QgLWYgIiRHSVRfUkVQTyIvNS9maWxlMS50eHQgJiYKKwl0ZXN0IC1mICIkR0lUX1JFUE8iLzUvLnBsYWNlaG9sZGVyICYmCisJdGVzdCAkKGZpbmQgIiRHSVRfUkVQTyIvNSAtdHlwZSBmIHwgd2MgLWwpID0gIjIiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2MS1naXQtc3ZuLW1lcmdlaW5mby1wdXNoLnNoIGIvdC90OTE2MS1naXQtc3ZuLW1lcmdlaW5mby1wdXNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxMTNhY2EKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTYxLWdpdC1zdm4tbWVyZ2VpbmZvLXB1c2guc2gKQEAgLTAsMCArMSwxMDMgQEAKKyMhL2Jpbi9zaAorIworIyBQb3J0aW9ucyBjb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDkgU2FtIFZpbGFpbgorIyBQb3J0aW9ucyBjb3B5cmlnaHQgKGMpIDIwMTEgQnJ5YW4gSmFjb2JzCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1zdm4gc3ZuIG1lcmdlaW5mbyBwcm9wYWdhdGlvbicKKworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xvYWQgc3ZuIGR1bXAnICIKKwlzdm5hZG1pbiBsb2FkIC1xICckcmF3c3ZucmVwbycgXAorCSAgPCAnJFRFU1RfRElSRUNUT1JZL3Q5MTYxL2JyYW5jaGVzLmR1bXAnICYmCisJZ2l0IHN2biBpbml0IC0tbWluaW1pemUtdXJsIC1SIHN2bm1lcmdlIFwKKwkgIC1UIHRydW5rIC1iIGJyYW5jaGVzICckc3ZucmVwbycgJiYKKwlnaXQgc3ZuIGZldGNoIC0tYWxsCisJIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9wYWdhdGUgbWVyZ2UgaW5mb3JtYXRpb24nICcKKwlnaXQgY29uZmlnIHN2bi5wdXNobWVyZ2VpbmZvIHllcyAmJgorCWdpdCBjaGVja291dCBvcmlnaW4vc3ZuYjEgJiYKKwlnaXQgbWVyZ2UgLS1uby1mZiBvcmlnaW4vc3ZuYjIgJiYKKwlnaXQgc3ZuIGRjb21taXQKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoZWNrIHN2bjptZXJnZWluZm8nICcKKwltZXJnZWluZm89JChzdm5fY21kIHByb3BnZXQgc3ZuOm1lcmdlaW5mbyAiJHN2bnJlcG8iL2JyYW5jaGVzL3N2bmIxKSAmJgorCXRlc3QgIiRtZXJnZWluZm8iID0gIi9icmFuY2hlcy9zdm5iMjozLDgiCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdtZXJnZSBhbm90aGVyIGJyYW5jaCcgJworCWdpdCBtZXJnZSAtLW5vLWZmIG9yaWdpbi9zdm5iMyAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgcHJpbWFyeSBwYXJlbnQgbWVyZ2VpbmZvIHJlc3BlY3RlZCcgJworCW1lcmdlaW5mbz0kKHN2bl9jbWQgcHJvcGdldCBzdm46bWVyZ2VpbmZvICIkc3ZucmVwbyIvYnJhbmNoZXMvc3ZuYjEpICYmCisJdGVzdCAiJG1lcmdlaW5mbyIgPSAiL2JyYW5jaGVzL3N2bmIyOjMsOAorL2JyYW5jaGVzL3N2bmIzOjQsOSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGV4aXN0aW5nIG1lcmdlJyAnCisJZ2l0IG1lcmdlIC0tbm8tZmYgb3JpZ2luL3N2bmI0ICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICJjaGVjayBib3RoIHBhcmVudHMnIG1lcmdlaW5mbyByZXNwZWN0ZWQiICcKKwltZXJnZWluZm89JChzdm5fY21kIHByb3BnZXQgc3ZuOm1lcmdlaW5mbyAiJHN2bnJlcG8iL2JyYW5jaGVzL3N2bmIxKSAmJgorCXRlc3QgIiRtZXJnZWluZm8iID0gIi9icmFuY2hlcy9zdm5iMjozLDgKKy9icmFuY2hlcy9zdm5iMzo0LDkKKy9icmFuY2hlcy9zdm5iNDo1LTYsMTAtMTIKKy9icmFuY2hlcy9zdm5iNTo2LDExIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnbWFrZSBmdXJ0aGVyIGNvbW1pdHMgdG8gYnJhbmNoJyAnCisJZ2l0IGNoZWNrb3V0IG9yaWdpbi9zdm5iMiAmJgorCXRvdWNoIG5ld2IyZmlsZSAmJgorCWdpdCBhZGQgbmV3YjJmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibGF0ZXIgYjIgY29tbWl0IiAmJgorCXRvdWNoIG5ld2IyZmlsZS0yICYmCisJZ2l0IGFkZCBuZXdiMmZpbGUtMiAmJgorCWdpdCBjb21taXQgLW0gImxhdGVyIGIyIGNvbW1pdCAyIiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2Vjb25kIGZvcndhcmQgbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgb3JpZ2luL3N2bmIxICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgb3JpZ2luL3N2bmIyICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBuZXcgbWVyZ2VpbmZvIGFkZGVkJyAnCisJbWVyZ2VpbmZvPSQoc3ZuX2NtZCBwcm9wZ2V0IHN2bjptZXJnZWluZm8gIiRzdm5yZXBvIi9icmFuY2hlcy9zdm5iMSkgJiYKKwl0ZXN0ICIkbWVyZ2VpbmZvIiA9ICIvYnJhbmNoZXMvc3ZuYjI6Myw4LDE2LTE3CisvYnJhbmNoZXMvc3ZuYjM6NCw5CisvYnJhbmNoZXMvc3ZuYjQ6NS02LDEwLTEyCisvYnJhbmNoZXMvc3ZuYjU6NiwxMSIKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlaW50ZWdyYXRpb24gbWVyZ2UnICcKKwlnaXQgY2hlY2tvdXQgb3JpZ2luL3N2bmI0ICYmCisJZ2l0IG1lcmdlIC0tbm8tZmYgb3JpZ2luL3N2bmIxICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayByZWludGVncmF0aW9uIG1lcmdlaW5mbycgJworCW1lcmdlaW5mbz0kKHN2bl9jbWQgcHJvcGdldCBzdm46bWVyZ2VpbmZvICIkc3ZucmVwbyIvYnJhbmNoZXMvc3ZuYjQpICYmCisJdGVzdCAiJG1lcmdlaW5mbyIgPSAiL2JyYW5jaGVzL3N2bmIxOjItNCw3LTksMTMtMTgKKy9icmFuY2hlcy9zdm5iMjozLDgsMTYtMTcKKy9icmFuY2hlcy9zdm5iMzo0LDkKKy9icmFuY2hlcy9zdm5iNTo2LDExIgorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBhIG1lcmdlIGF0IHRoZSB0b3Agb2YgYSBzdGFjaycgJworCWdpdCBjaGVja291dCBvcmlnaW4vc3ZuYjEgJiYKKwl0b3VjaCBhbm90aGVyZmlsZSAmJgorCWdpdCBhZGQgYW5vdGhlcmZpbGUgJiYKKwlnaXQgY29tbWl0IC1tICJhIGNvbW1pdCIgJiYKKwlnaXQgbWVyZ2Ugb3JpZ2luL3N2bmI0ICYmCisJZ2l0IHN2biBkY29tbWl0CisJJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjEvYnJhbmNoZXMuZHVtcCBiL3QvdDkxNjEvYnJhbmNoZXMuZHVtcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjFjM2U3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2MS9icmFuY2hlcy5kdW1wCkBAIC0wLDAgKzEsMzc0IEBACitTVk4tZnMtZHVtcC1mb3JtYXQtdmVyc2lvbjogMgorCitVVUlEOiAxZWYwODU1My1mMmQxLTQ1ZGYtYjM4Yy0xOWFmNmI3YzkyNmQKKworUmV2aXNpb24tbnVtYmVyOiAwCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiA1NgorQ29udGVudC1sZW5ndGg6IDU2CisKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MDg6MDIuOTQxMzg0WgorUFJPUFMtRU5ECisKK1JldmlzaW9uLW51bWJlcjogMQorUHJvcC1jb250ZW50LWxlbmd0aDogMTE0CitDb250ZW50LWxlbmd0aDogMTE0CisKK0sgNworc3ZuOmxvZworViAxMgorQmFzZSBjb21taXQKKworSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjA4OjI3LjIwNTA2MloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IHRydW5rCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDIKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTkKK0NyZWF0ZSBicmFuY2ggc3ZuYjEKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjowOTo0My42MjgxMzdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMQorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiAzCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDE5CitDcmVhdGUgYnJhbmNoIHN2bmIyCitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MDk6NDYuMzM5OTMwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjIKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNAorUHJvcC1jb250ZW50LWxlbmd0aDogMTIxCitDb250ZW50LWxlbmd0aDogMTIxCisKK0sgNworc3ZuOmxvZworViAxOQorQ3JlYXRlIGJyYW5jaCBzdm5iMworSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjA5OjQ5LjM5NDUxNVoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmIzCitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGFkZAorTm9kZS1jb3B5ZnJvbS1yZXY6IDEKK05vZGUtY29weWZyb20tcGF0aDogdHJ1bmsKKworCitSZXZpc2lvbi1udW1iZXI6IDUKK1Byb3AtY29udGVudC1sZW5ndGg6IDEyMQorQ29udGVudC1sZW5ndGg6IDEyMQorCitLIDcKK3N2bjpsb2cKK1YgMTkKK0NyZWF0ZSBicmFuY2ggc3ZuYjQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjowOTo1NC4xMTQ2MDdaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iNAorTm9kZS1raW5kOiBkaXIKK05vZGUtYWN0aW9uOiBhZGQKK05vZGUtY29weWZyb20tcmV2OiAxCitOb2RlLWNvcHlmcm9tLXBhdGg6IHRydW5rCisKKworUmV2aXNpb24tbnVtYmVyOiA2CitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMjEKK0NvbnRlbnQtbGVuZ3RoOiAxMjEKKworSyA3Citzdm46bG9nCitWIDE5CitDcmVhdGUgYnJhbmNoIHN2bmI1CitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MDk6NTguNjAyNjIzWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjUKK05vZGUta2luZDogZGlyCitOb2RlLWFjdGlvbjogYWRkCitOb2RlLWNvcHlmcm9tLXJldjogMQorTm9kZS1jb3B5ZnJvbS1wYXRoOiB0cnVuaworCisKK1JldmlzaW9uLW51bWJlcjogNworUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA5CitiMSBjb21taXQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjoxMDoyMC4yOTIzNjlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMS9iMWZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitUZXh0LWNvbnRlbnQtc2hhMTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogOAorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA5CitiMiBjb21taXQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjoxMDozOC40MjkxOTlaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMi9iMmZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitUZXh0LWNvbnRlbnQtc2hhMTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogOQorUHJvcC1jb250ZW50LWxlbmd0aDogMTEwCitDb250ZW50LWxlbmd0aDogMTEwCisKK0sgNworc3ZuOmxvZworViA5CitiMyBjb21taXQKK0sgMTAKK3N2bjphdXRob3IKK1YgNworYmphY29icworSyA4Citzdm46ZGF0ZQorViAyNworMjAxMS0wOS0wMlQxNjoxMDo1Mi44NDMwMjNaCitQUk9QUy1FTkQKKworTm9kZS1wYXRoOiBicmFuY2hlcy9zdm5iMy9iM2ZpbGUKK05vZGUta2luZDogZmlsZQorTm9kZS1hY3Rpb246IGFkZAorUHJvcC1jb250ZW50LWxlbmd0aDogMTAKK1RleHQtY29udGVudC1sZW5ndGg6IDAKK1RleHQtY29udGVudC1tZDU6IGQ0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlCitUZXh0LWNvbnRlbnQtc2hhMTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOQorQ29udGVudC1sZW5ndGg6IDEwCisKK1BST1BTLUVORAorCisKK1JldmlzaW9uLW51bWJlcjogMTAKK1Byb3AtY29udGVudC1sZW5ndGg6IDExMAorQ29udGVudC1sZW5ndGg6IDExMAorCitLIDcKK3N2bjpsb2cKK1YgOQorYjQgY29tbWl0CitLIDEwCitzdm46YXV0aG9yCitWIDcKK2JqYWNvYnMKK0sgOAorc3ZuOmRhdGUKK1YgMjcKKzIwMTEtMDktMDJUMTY6MTE6MTcuNDg5ODcwWgorUFJPUFMtRU5ECisKK05vZGUtcGF0aDogYnJhbmNoZXMvc3ZuYjQvYjRmaWxlCitOb2RlLWtpbmQ6IGZpbGUKK05vZGUtYWN0aW9uOiBhZGQKK1Byb3AtY29udGVudC1sZW5ndGg6IDEwCitUZXh0LWNvbnRlbnQtbGVuZ3RoOiAwCitUZXh0LWNvbnRlbnQtbWQ1OiBkNDFkOGNkOThmMDBiMjA0ZTk4MDA5OThlY2Y4NDI3ZQorVGV4dC1jb250ZW50LXNoYTE6IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDkKK0NvbnRlbnQtbGVuZ3RoOiAxMAorCitQUk9QUy1FTkQKKworCitSZXZpc2lvbi1udW1iZXI6IDExCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMTAKK0NvbnRlbnQtbGVuZ3RoOiAxMTAKKworSyA3Citzdm46bG9nCitWIDkKK2I1IGNvbW1pdAorSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjExOjMyLjI3NzQwNFoKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmI1L2I1ZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK1RleHQtY29udGVudC1zaGExOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5CitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKworUmV2aXNpb24tbnVtYmVyOiAxMgorUHJvcC1jb250ZW50LWxlbmd0aDogMTkyCitDb250ZW50LWxlbmd0aDogMTkyCisKK0sgNworc3ZuOmxvZworViA5MAorTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnc3ZuYjUnIGludG8gSEVBRAorCisqIHN2bmI1OgorICBiNSBjb21taXQKKyAgQ3JlYXRlIGJyYW5jaCBzdm5iNQorSyAxMAorc3ZuOmF1dGhvcgorViA3CitiamFjb2JzCitLIDgKK3N2bjpkYXRlCitWIDI3CisyMDExLTA5LTAyVDE2OjExOjU0LjI3NDcyMloKK1BST1BTLUVORAorCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmI0CitOb2RlLWtpbmQ6IGRpcgorTm9kZS1hY3Rpb246IGNoYW5nZQorUHJvcC1jb250ZW50LWxlbmd0aDogNTYKK0NvbnRlbnQtbGVuZ3RoOiA1NgorCitLIDEzCitzdm46bWVyZ2VpbmZvCitWIDIxCisvYnJhbmNoZXMvc3ZuYjU6NiwxMQorCitQUk9QUy1FTkQKKworCitOb2RlLXBhdGg6IGJyYW5jaGVzL3N2bmI0L2I1ZmlsZQorTm9kZS1raW5kOiBmaWxlCitOb2RlLWFjdGlvbjogYWRkCitQcm9wLWNvbnRlbnQtbGVuZ3RoOiAxMAorVGV4dC1jb250ZW50LWxlbmd0aDogMAorVGV4dC1jb250ZW50LW1kNTogZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UKK1RleHQtY29udGVudC1zaGExOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5CitDb250ZW50LWxlbmd0aDogMTAKKworUFJPUFMtRU5ECisKKwpkaWZmIC0tZ2l0IGEvdC90OTE2Mi1naXQtc3ZuLWRjb21taXQtaW50ZXJhY3RpdmUuc2ggYi90L3Q5MTYyLWdpdC1zdm4tZGNvbW1pdC1pbnRlcmFjdGl2ZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzhkOWZhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2Mi1naXQtc3ZuLWRjb21taXQtaW50ZXJhY3RpdmUuc2gKQEAgLTAsMCArMSw2NCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMSBGcsOpZMOpcmljIEhlaXR6bWFubgorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIGRjb21taXQgLS1pbnRlcmFjdGl2ZSBzZXJpZXMnCisuIC4vbGliLWdpdC1zdm4uc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSByZXBvJyAnCisJc3ZuX2NtZCBta2RpciAtbSJta2RpciB0ZXN0LWludGVyYWN0aXZlIiAiJHN2bnJlcG8vdGVzdC1pbnRlcmFjdGl2ZSIgJiYKKwlnaXQgc3ZuIGNsb25lICIkc3ZucmVwby90ZXN0LWludGVyYWN0aXZlIiB0ZXN0LWludGVyYWN0aXZlICYmCisJY2QgdGVzdC1pbnRlcmFjdGl2ZSAmJgorCXRvdWNoIGZvbyAmJiBnaXQgYWRkIGZvbyAmJiBnaXQgY29tbWl0IC1tImZvbzogZmlyc3QgY29tbWl0IiAmJgorCWdpdCBzdm4gZGNvbW1pdAorCScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYW5zd2VyczogeSBbXG5dIHllcycgJworCSgKKwkJZWNobyAiY2hhbmdlICMxIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzEiICYmCisJCWVjaG8gImNoYW5nZSAjMiIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMyIiAmJgorCQllY2hvICJjaGFuZ2UgIzMiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMyIgJiYKKwkJKCBlY2hvICJ5CisKK3kiIHwgR0lUX1NWTl9OT1RUWT0xIGdpdCBzdm4gZGNvbW1pdCAtLWludGVyYWN0aXZlICkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9naXQtc3ZuKQorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fuc3dlcnM6IHllcyB5ZXMgbm8nICcKKwkoCisJCWVjaG8gImNoYW5nZSAjMSIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMxIiAmJgorCQllY2hvICJjaGFuZ2UgIzIiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMiIgJiYKKwkJZWNobyAiY2hhbmdlICMzIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzMiICYmCisJCSggZWNobyAieWVzCit5ZXMKK25vIiB8IEdJVF9TVk5fTk9UVFk9MSBnaXQgc3ZuIGRjb21taXQgLS1pbnRlcmFjdGl2ZSApICYmCisJCXRlc3QgJChnaXQgcmV2LXBhcnNlIEhFQUReXl4pID0gJChnaXQgcmV2LXBhcnNlIHJlbW90ZXMvZ2l0LXN2bikgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCByZW1vdGVzL2dpdC1zdm4KKwkpCisJJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhbnN3ZXJzOiB5ZXMgcXVpdCcgJworCSgKKwkJZWNobyAiY2hhbmdlICMxIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzEiICYmCisJCWVjaG8gImNoYW5nZSAjMiIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMyIiAmJgorCQllY2hvICJjaGFuZ2UgIzMiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMyIgJiYKKwkJKCBlY2hvICJ5ZXMKK3F1aXQiIHwgR0lUX1NWTl9OT1RUWT0xIGdpdCBzdm4gZGNvbW1pdCAtLWludGVyYWN0aXZlICkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRF5eXikgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9naXQtc3ZuKSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHJlbW90ZXMvZ2l0LXN2bgorCSkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Fuc3dlcnM6IGFsbCcgJworCSgKKwkJZWNobyAiY2hhbmdlICMxIiA+PiBmb28gJiYgZ2l0IGNvbW1pdCAtYSAtbSJjaGFuZ2UgIzEiICYmCisJCWVjaG8gImNoYW5nZSAjMiIgPj4gZm9vICYmIGdpdCBjb21taXQgLWEgLW0iY2hhbmdlICMyIiAmJgorCQllY2hvICJjaGFuZ2UgIzMiID4+IGZvbyAmJiBnaXQgY29tbWl0IC1hIC1tImNoYW5nZSAjMyIgJiYKKwkJKCBlY2hvICJhbGwiIHwgR0lUX1NWTl9OT1RUWT0xIGdpdCBzdm4gZGNvbW1pdCAtLWludGVyYWN0aXZlICkgJiYKKwkJdGVzdCAkKGdpdCByZXYtcGFyc2UgSEVBRCkgPSAkKGdpdCByZXYtcGFyc2UgcmVtb3Rlcy9naXQtc3ZuKSAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHJlbW90ZXMvZ2l0LXN2bgorCSkKKwknCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2My1naXQtc3ZuLXJlc2V0LWNsZWFycy1jYWNoZXMuc2ggYi90L3Q5MTYzLWdpdC1zdm4tcmVzZXQtY2xlYXJzLWNhY2hlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNjI0NWNlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2My1naXQtc3ZuLXJlc2V0LWNsZWFycy1jYWNoZXMuc2gKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBQZXRlciBCYXVtYW5uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gcmVzZXQgY2xlYXJzIG1lbW9pemVkIGNhY2hlcycKKy4gLi9saWItZ2l0LXN2bi5zaAorCitzdm5fdmVyPSIkKHN2biAtLXZlcnNpb24gLS1xdWlldCkiCitjYXNlICRzdm5fdmVyIGluCiswLiogfCAxLlswLTRdLiopCisJc2tpcF9hbGw9InNraXBwaW5nIGdpdC1zdm4gdGVzdCAtIFNWTiB0b28gb2xkICgkc3ZuX3ZlcikiCisJdGVzdF9kb25lCisJOzsKK2VzYWMKKworIyAuLi4gYSAgLSAgYiAtIG0gICA8LSB0cnVuaworIyAgICAgIFwgICAgICAgLworIyAgICAgICAuLi4gYyAgICAgICA8LSBicmFuY2gxCisjCisjIFNWTiBDb21taXRzIG5vdCBpbnRlcmVzdGluZyBmb3IgdGhpcyB0ZXN0IGFyZSBhYmJyZXZpYXRlZCB3aXRoICIuLi4iCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHNvdXJjZSBzdm4gcmVwbycgJworCXN2bl9jbWQgbWtkaXIgLW0gImNyZWF0ZSB0cnVuayIgIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgbWtkaXIgLW0gImNyZWF0ZSBicmFuY2hlcyIgIiRzdm5yZXBvL2JyYW5jaGVzIiAmJgorCXN2bl9jbWQgY28gIiRzdm5yZXBvIi90cnVuayAiJFNWTl9UUkVFIiAmJgorCSgKKwkJY2QgIiRTVk5fVFJFRSIgJiYKKwkJdG91Y2ggZm9vICYmCisJCXN2bl9jbWQgYWRkIGZvbyAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAiYSIgJiYKKwkJc3ZuX2NtZCBjcCAtbSBicmFuY2ggIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXRvdWNoIGJhciAmJgorCQlzdm5fY21kIGFkZCBiYXIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYiAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL3RydW5rICYmCisJCXRvdWNoIGJheiAmJgorCQlzdm5fY21kIGFkZCBiYXogJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYyAmJgorCQlzdm5fY21kIHVwICYmCisJCXN2bl9jbWQgbWVyZ2UgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJtIgorCSkgJiYKKwlybSAtcmYgIiRTVk5fVFJFRSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmV0Y2ggdG8gbWVyZ2UtYmFzZSAoYSknICcKKwlnaXQgc3ZuIGluaXQgLXMgIiRzdm5yZXBvIiAmJgorCWdpdCBzdm4gZmV0Y2ggLS1yZXZpc2lvbiBCQVNFOjMKKycKKworIyBnaXQgc3ZuIHJlYmFzZSBsb29zZXMgdGhlIG1lcmdlIGNvbW1pdAorIworIyAuLi4gYSAgLSAgYiAtIG0gIDwtIHRydW5rCisjICAgICAgXAorIyAgICAgICAuLi4gYworIwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmViYXNlIGxvb3NlcyBTVk4gbWVyZ2UgKG0pJyAnCisJZ2l0IHN2biByZWJhc2UgJiYKKwlnaXQgc3ZuIGZldGNoICYmCisJdGVzdCAxID0gJChnaXQgY2F0LWZpbGUgLXAgbWFzdGVyfGdyZXAgcGFyZW50fHdjIC1sKQorJworCisjIGdpdCBzdm4gZmV0Y2ggY3JlYXRlcyBjb3JyZWN0IGhpc3Rvcnkgd2l0aCBtZXJnZSBjb21taXQKKyMKKyMgLi4uIGEgIC0gIGIgLSBtICA8LSB0cnVuaworIyAgICAgIFwgICAgICAgLworIyAgICAgICAuLi4gYyAgICAgIDwtIGJyYW5jaDEKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc2V0IGFuZCBmZXRjaCBnZXRzIHRoZSBTVk4gbWVyZ2UgKG0pIGNvcnJlY3RseScgJworCWdpdCBzdm4gcmVzZXQgLXIgMyAmJgorCWdpdCByZXNldCAtLWhhcmQgb3JpZ2luL3RydW5rICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCXRlc3QgMiA9ICQoZ2l0IGNhdC1maWxlIC1wIG9yaWdpbi90cnVua3xncmVwIHBhcmVudHx3YyAtbCkKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MTY0LWdpdC1zdm4tZGNvbW1pdC1jb25jdXJyZW50LnNoIGIvdC90OTE2NC1naXQtc3ZuLWRjb21taXQtY29uY3VycmVudC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kODQ2NGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTE2NC1naXQtc3ZuLWRjb21taXQtY29uY3VycmVudC5zaApAQCAtMCwwICsxLDIxNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBSb2JlcnQgTHViZXJkYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdjb25jdXJyZW50IGdpdCBzdm4gZGNvbW1pdCcKKy4gLi9saWItZ2l0LXN2bi5zaAorCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3ZuIHJlcG9zaXRvcnknICcKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwbyIgd29yay5zdm4gJiYKKwkoCisJCWNkIHdvcmsuc3ZuICYmCisJCWVjaG8gPmZpbGUgJiYgZWNobyA+IGF1dG9fdXBkYXRlZF9maWxlCisJCXN2bl9jbWQgYWRkIGZpbGUgYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IgorCSkgJiYKKwlzdm5fY21kIGNoZWNrb3V0ICIkc3ZucmVwbyIgd29yay1hdXRvLWNvbW1pdHMuc3ZuCisnCitOPTAKK25leHRfTigpCit7CisJTj0kKCggJE4gKyAxICkpCit9CisKKyMgU2V0dXAgU1ZOIHJlcG9zaXRvcnkgaG9va3MgdG8gZW11bGF0ZSBTVk4gZmFpbHVyZXMgb3IgY29uY3VycmVudCBjb21taXRzCisjIFRoZSBmdW5jdGlvbiBhZGRzCisjIGVpdGhlciBwcmUtY29tbWl0ICBob29rLCB3aGljaCBjYXVzZXMgU1ZOIGNvbW1pdCBnaXZlbiBpbiBzZWNvbmQgYXJndW1lbnQKKyMgICAgICAgICAgICAgICAgICAgIHRvIGZhaWwKKyMgb3IgICAgIHBvc3QtY29tbWl0IGhvb2ssIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29tbWl0IChhIG5ldyBsaW5lIGFkZGVkIHRvCisjICAgICAgICAgICAgICAgICAgICBhdXRvX3VwZGF0ZWRfZmlsZSkgYWZ0ZXIgZ2l2ZW4gU1ZOIGNvbW1pdAorIyBUaGUgZmlyc3QgYXJndW1lbnQgY29udGFpbnMgYSB0eXBlIG9mIHRoZSBob29rCisjIFRoZSBzZWNvbmQgYXJndW1lbnQgY29udGFpbnMgYSBudW1iZXIgKG5vdCBTVk4gcmV2aXNpb24pIG9mIGNvbW1pdAorIyB0aGUgaG9vayBzaG91bGQgYmUgYXBwbGllZCBmb3IgKGVhY2ggdGltZSB0aGUgaG9vayBpcyBydW4sIHRoZSBnaXZlbgorIyBudW1iZXIgaXMgZGVjcmVhc2VkIGJ5IG9uZSB1bnRpbCBpdCBnZXRzIDAsIGluIHdoaWNoIGNhc2UgdGhlIGhvb2sKKyMgd2lsbCBleGVjdXRlIGl0cyByZWFsIGFjdGlvbikKK3NldHVwX2hvb2soKQoreworCWhvb2tfdHlwZT0iJDEiICAjICJwcmUtY29tbWl0IiBvciAicG9zdC1jb21taXQiCisJc2tpcF9yZXZzPSIkMiIKKwlbICIkaG9va190eXBlIiA9ICJwcmUtY29tbWl0IiBdIHx8CisJCVsgIiRob29rX3R5cGUiID0gInBvc3QtY29tbWl0IiBdIHx8CisJCXsgZWNobyAiRVJST1I6IGludmFsaWQgYXJndW1lbnQgKCRob29rX3R5cGUpIiBcCisJCQkicGFzc2VkIHRvIHNldHVwX2hvb2siID4mMiA7IHJldHVybiAxOyB9CisJZWNobyAiY250PSRza2lwX3JldnMiID4gIiRob29rX3R5cGUtY291bnRlciIKKwlybSAtZiAiJHJhd3N2bnJlcG8vaG9va3MvIiotY29tbWl0ICMgZHJvcCBwcmV2aW91cyBob29rcworCWhvb2s9IiRyYXdzdm5yZXBvL2hvb2tzLyRob29rX3R5cGUiCisJY2F0ID4gIiRob29rIiA8PC0gJ0VPRjEnCisJCSMhL2Jpbi9zaAorCQlzZXQgLWUKKwkJY2QgIiQxLy4uIiAgIyAiJDEiIGlzIHJlcG9zaXRvcnkgbG9jYXRpb24KKwkJZXhlYyA+PiBzdm4taG9vay5sb2cgMj4mMQorCQlob29rPSIkKGJhc2VuYW1lICIkMCIpIgorCQllY2hvICIqKiogRXhlY3V0aW5nICRob29rICRAIgorCQlzZXQgLXgKKwkJLiAuLyRob29rLWNvdW50ZXIKKwkJY250PSIkKCgkY250IC0gMSkpIgorCQllY2hvICJjbnQ9JGNudCIgPiAuLyRob29rLWNvdW50ZXIKKwkJWyAiJGNudCIgPSAiMCIgXSB8fCBleGl0IDAKK0VPRjEKKwlpZiBbICIkaG9va190eXBlIiA9ICJwcmUtY29tbWl0IiBdOyB0aGVuCisJCWVjaG8gImVjaG8gJ2NvbW1pdCBkaXNhbGxvd2VkJyA+JjI7IGV4aXQgMSIgPj4iJGhvb2siCisJZWxzZQorCQllY2hvICJQQVRIPVwiJFBBVEhcIjsgZXhwb3J0IFBBVEgiID4+IiRob29rIgorCQllY2hvICJzdm5jb25mPVwiJHN2bmNvbmZcIiIgPj4iJGhvb2siCisJCWNhdCA+PiIkaG9vayIgPDwtICdFT0YyJworCQkJY2Qgd29yay1hdXRvLWNvbW1pdHMuc3ZuCisJCQlzdm4gdXAgLS1jb25maWctZGlyICIkc3ZuY29uZiIKKwkJCWVjaG8gIiQkIiA+PiBhdXRvX3VwZGF0ZWRfZmlsZQorCQkJc3ZuIGNvbW1pdCAtLWNvbmZpZy1kaXIgIiRzdm5jb25mIiBcCisJCQkJLW0gImF1dG8tY29tbWl0dGluZyBjb25jdXJyZW50IGNoYW5nZSIKKwkJCWV4aXQgMAorRU9GMgorCWZpCisJY2htb2QgNzU1ICIkaG9vayIKK30KKworY2hlY2tfY29udGVudHMoKQoreworCWdpdGRpcj0iJDEiCisJKGNkIC4uL3dvcmsuc3ZuICYmIHN2bl9jbWQgdXApICYmCisJdGVzdF9jbXAgZmlsZSAuLi93b3JrLnN2bi9maWxlICYmCisJdGVzdF9jbXAgYXV0b191cGRhdGVkX2ZpbGUgLi4vd29yay5zdm4vYXV0b191cGRhdGVkX2ZpbGUKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgcG9zdC1jb21taXQgaG9vayBjcmVhdGVzIGEgY29uY3VycmVudCBjb21taXQnICcKKwlzZXR1cF9ob29rIHBvc3QtY29tbWl0IDEgJiYKKwkoCisJCWNkIHdvcmsuc3ZuICYmCisJCWNwIGF1dG9fdXBkYXRlZF9maWxlIGF1X2ZpbGVfc2F2ZWQgJiYKKwkJZWNobyAxID4+IGZpbGUgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImNoYW5naW5nIGZpbGUiICYmCisJCXN2bl9jbWQgdXAgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgdGVzdF9jbXAgYXV0b191cGRhdGVkX2ZpbGUgYXVfZmlsZV9zYXZlZAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgaWYgcHJlLWNvbW1pdCBob29rIGZhaWxzJyAnCisJc2V0dXBfaG9vayBwcmUtY29tbWl0IDIgJiYKKwkoCisJCWNkIHdvcmsuc3ZuICYmCisJCWVjaG8gMiA+PiBmaWxlICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJjaGFuZ2luZyBmaWxlIG9uY2UgYWdhaW4iICYmCisJCWVjaG8gMyA+PiBmaWxlICYmCisJCXRlc3RfbXVzdF9mYWlsIHN2bl9jbWQgY29tbWl0IC1tICJ0aGlzIGNvbW1pdCBzaG91bGQgZmFpbCIgJiYKKwkJc3ZuX2NtZCByZXZlcnQgZmlsZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGNvbW1pdCBlcnJvciBoYW5kbGluZycgJworCXNldHVwX2hvb2sgcHJlLWNvbW1pdCAyICYmCisJbmV4dF9OICYmIGdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB3b3JrJE4uZ2l0ICYmCisJKAorCQljZCB3b3JrJE4uZ2l0ICYmCisJCWVjaG8gMSA+PiBmaWxlICYmIGdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjEiICYmCisJCWVjaG8gMiA+PiBmaWxlICYmIGdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjIiICYmCisJCWVjaG8gMyA+PiBmaWxlICYmIGdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjMiICYmCisJCSMgc2hvdWxkIGZhaWwgdG8gZGNvbW1pdCAybmQgYW5kIDNyZCBjaGFuZ2UKKwkJIyBidXQgc3RpbGwgc2hvdWxkIGxlYXZlIHRoZSByZXBvc2l0b3J5IGluIHJlYXNvbmFibGUgc3RhdGUKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBkY29tbWl0ICYmCisJCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJCWdpdCBzaG93IEhFQUR+MiAgIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCSEgZ2l0IHNob3cgSEVBRH4xIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCSEgZ2l0IHNob3cgSEVBRCAgIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IGNvbmN1cnJlbnQgY2hhbmdlIGluIG5vbi1jaGFuZ2VkIGZpbGUnICcKKwlzZXR1cF9ob29rIHBvc3QtY29tbWl0IDIgJiYKKwluZXh0X04gJiYgZ2l0IHN2biBjbG9uZSAiJHN2bnJlcG8iIHdvcmskTi5naXQgJiYKKwkoCisJCWNkIHdvcmskTi5naXQgJiYKKwkJZWNobyAxID4+IGZpbGUgJiYgZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMSIgJiYKKwkJZWNobyAyID4+IGZpbGUgJiYgZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMiIgJiYKKwkJZWNobyAzID4+IGZpbGUgJiYgZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMyIgJiYKKwkJIyBzaG91bGQgcmViYXNlIGFuZCBsZWF2ZSB0aGUgcmVwb3NpdG9yeSBpbiByZWFzb25hYmxlIHN0YXRlCisJCWdpdCBzdm4gZGNvbW1pdCAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tcmVmcmVzaCAmJgorCQljaGVja19jb250ZW50cyAmJgorCQlnaXQgc2hvdyBIRUFEfjMgfCBncmVwIC1xIGdpdC1zdm4taWQgJiYKKwkJZ2l0IHNob3cgSEVBRH4yIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCWdpdCBzaG93IEhFQUR+MSB8IGdyZXAgLXEgYXV0by1jb21taXR0aW5nICYmCisJCWdpdCBzaG93IEhFQUQgICB8IGdyZXAgLXEgZ2l0LXN2bi1pZAorCSkKKycKKworIyBBbiB1dGlsaXR5IGZ1bmN0aW9uIHVzZWQgaW4gdGhlIGZvbGxvd2luZyB0ZXN0CitkZWxldGVfZmlyc3RfbGluZSgpCit7CisJZmlsZT0iJDEiICYmCisJc2VkIDFkIDwgIiRmaWxlIiA+ICIke2ZpbGV9LnRtcCIgJiYKKwlybSAiJGZpbGUiICYmCisJbXYgIiR7ZmlsZX0udG1wIiAiJGZpbGUiCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgY29uY3VycmVudCBub24tY29uZmxpY3RpbmcgY2hhbmdlJyAnCisJc2V0dXBfaG9vayBwb3N0LWNvbW1pdCAyICYmCisJbmV4dF9OICYmIGdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB3b3JrJE4uZ2l0ICYmCisJKAorCQljZCB3b3JrJE4uZ2l0ICYmCisJCWNhdCBmaWxlID4+IGF1dG9fdXBkYXRlZF9maWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4xIiAmJgorCQlkZWxldGVfZmlyc3RfbGluZSBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMiIgJiYKKwkJZGVsZXRlX2ZpcnN0X2xpbmUgYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjMiICYmCisJCSMgc2hvdWxkIHJlYmFzZSBhbmQgbGVhdmUgdGhlIHJlcG9zaXRvcnkgaW4gcmVhc29uYWJsZSBzdGF0ZQorCQlnaXQgc3ZuIGRjb21taXQgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLXJlZnJlc2ggJiYKKwkJY2hlY2tfY29udGVudHMgJiYKKwkJZ2l0IHNob3cgSEVBRH4zIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCWdpdCBzaG93IEhFQUR+MiB8IGdyZXAgLXEgZ2l0LXN2bi1pZCAmJgorCQlnaXQgc2hvdyBIRUFEfjEgfCBncmVwIC1xIGF1dG8tY29tbWl0dGluZyAmJgorCQlnaXQgc2hvdyBIRUFEICAgfCBncmVwIC1xIGdpdC1zdm4taWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rjb21taXQgLS1uby1yZWJhc2UgY29uY3VycmVudCBub24tY29uZmxpY3RpbmcgY2hhbmdlJyAnCisJc2V0dXBfaG9vayBwb3N0LWNvbW1pdCAyICYmCisJbmV4dF9OICYmIGdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB3b3JrJE4uZ2l0ICYmCisJKAorCQljZCB3b3JrJE4uZ2l0ICYmCisJCWNhdCBmaWxlID4+IGF1dG9fdXBkYXRlZF9maWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4xIiAmJgorCQlkZWxldGVfZmlyc3RfbGluZSBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMiIgJiYKKwkJZGVsZXRlX2ZpcnN0X2xpbmUgYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjMiICYmCisJCSMgc2hvdWxkIGZhaWwgYXMgcmViYXNlIGlzIG5lZWRlZAorCQl0ZXN0X211c3RfZmFpbCBnaXQgc3ZuIGRjb21taXQgLS1uby1yZWJhc2UgJiYKKwkJIyBidXQgc2hvdWxkIGxlYXZlIEhFQUQgdW5jaGFuZ2VkCisJCWdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoICYmCisJCSEgZ2l0IHNob3cgSEVBRH4yIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCSEgZ2l0IHNob3cgSEVBRH4xIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkICYmCisJCSEgZ2l0IHNob3cgSEVBRCAgIHwgZ3JlcCAtcSBnaXQtc3ZuLWlkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkY29tbWl0IGZhaWxzIG9uIGNvbmN1cnJlbnQgY29uZmxpY3RpbmcgY2hhbmdlJyAnCisJc2V0dXBfaG9vayBwb3N0LWNvbW1pdCAxICYmCisJbmV4dF9OICYmIGdpdCBzdm4gY2xvbmUgIiRzdm5yZXBvIiB3b3JrJE4uZ2l0ICYmCisJKAorCQljZCB3b3JrJE4uZ2l0ICYmCisJCWVjaG8gYSA+PiBmaWxlICYmCisJCQlnaXQgY29tbWl0IC1hbSAiY29tbWl0IGNoYW5nZSAkTi4xIiAmJgorCQllY2hvIGIgPj4gYXV0b191cGRhdGVkX2ZpbGUgJiYKKwkJCWdpdCBjb21taXQgLWFtICJjb21taXQgY2hhbmdlICROLjIiICYmCisJCWVjaG8gYyA+PiBhdXRvX3VwZGF0ZWRfZmlsZSAmJgorCQkJZ2l0IGNvbW1pdCAtYW0gImNvbW1pdCBjaGFuZ2UgJE4uMyIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHN2biBkY29tbWl0ICYmICMgcmViYXNlIHNob3VsZCBmYWlsCisJCXRlc3RfbXVzdF9mYWlsIGdpdCB1cGRhdGUtaW5kZXggLS1yZWZyZXNoCisJKQorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjUtZ2l0LXN2bi1mZXRjaC1tZXJnZS1icmFuY2gtb2YtYnJhbmNoLnNoIGIvdC90OTE2NS1naXQtc3ZuLWZldGNoLW1lcmdlLWJyYW5jaC1vZi1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmEzZWYzYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkxNjUtZ2l0LXN2bi1mZXRjaC1tZXJnZS1icmFuY2gtb2YtYnJhbmNoLnNoCkBAIC0wLDAgKzEsNjAgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgU3RldmVuIFdhbHRlcgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgc3ZuIG1lcmdlIGRldGVjdGlvbicKKy4gLi9saWItZ2l0LXN2bi5zaAorCitzdm5fdmVyPSIkKHN2biAtLXZlcnNpb24gLS1xdWlldCkiCitjYXNlICRzdm5fdmVyIGluCiswLiogfCAxLlswLTRdLiopCisJc2tpcF9hbGw9InNraXBwaW5nIGdpdC1zdm4gdGVzdCAtIFNWTiB0b28gb2xkICgkc3ZuX3ZlcikiCisJdGVzdF9kb25lCisJOzsKK2VzYWMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbGl6ZSBzb3VyY2Ugc3ZuIHJlcG8nICcKKwlzdm5fY21kIG1rZGlyIC1tIHggIiRzdm5yZXBvIi90cnVuayAmJgorCXN2bl9jbWQgbWtkaXIgLW0geCAiJHN2bnJlcG8iL2JyYW5jaGVzICYmCisJc3ZuX2NtZCBjbyAiJHN2bnJlcG8iL3RydW5rICIkU1ZOX1RSRUUiICYmCisJKAorCQljZCAiJFNWTl9UUkVFIiAmJgorCQl0b3VjaCBmb28gJiYKKwkJc3ZuX2NtZCBhZGQgZm9vICYmCisJCXN2bl9jbWQgY29tbWl0IC1tICJpbml0aWFsIGNvbW1pdCIgJiYKKwkJc3ZuX2NtZCBjcCAtbSBicmFuY2ggIiRzdm5yZXBvIi90cnVuayAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gxICYmCisJCXRvdWNoIGJhciAmJgorCQlzdm5fY21kIGFkZCBiYXIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYnJhbmNoMSAmJgorCQlzdm5fY21kIGNwIC1tIGJyYW5jaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXN2bl9jbWQgc3dpdGNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQl0b3VjaCBiYXogJiYKKwkJc3ZuX2NtZCBhZGQgYmF6ICYmCisJCXN2bl9jbWQgY29tbWl0IC1tIGJyYW5jaDIgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi90cnVuayAmJgorCQl0b3VjaCBiYXIyICYmCisJCXN2bl9jbWQgYWRkIGJhcjIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gdHJ1bmsgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXN2bl9jbWQgbWVyZ2UgIiRzdm5yZXBvIi90cnVuayAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibWVyZ2UgdHJ1bmsiCisJCXN2bl9jbWQgc3dpdGNoICIkc3ZucmVwbyIvdHJ1bmsgJiYKKwkJc3ZuX2NtZCBtZXJnZSAtLXJlaW50ZWdyYXRlICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMiAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSAibWVyZ2UgYnJhbmNoMiIKKwkpICYmCisJcm0gLXJmICIkU1ZOX1RSRUUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHN2biByZXBvJyAnCisJZ2l0IHN2biBpbml0IC1zICIkc3ZucmVwbyIgJiYKKwlnaXQgc3ZuIGZldGNoCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSBtZXJnZSBjb21taXQnICd4PSQoZ2l0IHJldi1wYXJzZSBIRUFEXjIpICYmCisJeT0kKGdpdCByZXYtcGFyc2Ugb3JpZ2luL2JyYW5jaDIpICYmCisJdGVzdCAieCR4IiA9ICJ4JHkiCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTE2Ni1naXQtc3ZuLWZldGNoLW1lcmdlLWJyYW5jaC1vZi1icmFuY2gyLnNoIGIvdC90OTE2Ni1naXQtc3ZuLWZldGNoLW1lcmdlLWJyYW5jaC1vZi1icmFuY2gyLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUyZjJlNDYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTY2LWdpdC1zdm4tZmV0Y2gtbWVyZ2UtYnJhbmNoLW9mLWJyYW5jaDIuc2gKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBTdGV2ZW4gV2FsdGVyCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBzdm4gbWVyZ2UgZGV0ZWN0aW9uJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3N2bl92ZXI9IiQoc3ZuIC0tdmVyc2lvbiAtLXF1aWV0KSIKK2Nhc2UgJHN2bl92ZXIgaW4KKzAuKiB8IDEuWzAtNF0uKikKKwlza2lwX2FsbD0ic2tpcHBpbmcgZ2l0LXN2biB0ZXN0IC0gU1ZOIHRvbyBvbGQgKCRzdm5fdmVyKSIKKwl0ZXN0X2RvbmUKKwk7OworZXNhYworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0aWFsaXplIHNvdXJjZSBzdm4gcmVwbycgJworCXN2bl9jbWQgbWtkaXIgLW0geCAiJHN2bnJlcG8iL3RydW5rICYmCisJc3ZuX2NtZCBta2RpciAtbSB4ICIkc3ZucmVwbyIvYnJhbmNoZXMgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsgIiRTVk5fVFJFRSIgJiYKKwkoCisJCWNkICIkU1ZOX1RSRUUiICYmCisJCXRvdWNoIGZvbyAmJgorCQlzdm5fY21kIGFkZCBmb28gJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gImluaXRpYWwgY29tbWl0IiAmJgorCQlzdm5fY21kIGNwIC1tIGJyYW5jaCAiJHN2bnJlcG8iL3RydW5rICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDEgJiYKKwkJdG91Y2ggYmFyICYmCisJCXN2bl9jbWQgYWRkIGJhciAmJgorCQlzdm5fY21kIGNvbW1pdCAtbSBicmFuY2gxICYmCisJCXN2bl9jbWQgY3AgLW0gYnJhbmNoICIkc3ZucmVwbyIvYnJhbmNoZXMvYnJhbmNoMSAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuX2NtZCBzd2l0Y2ggIiRzdm5yZXBvIi9icmFuY2hlcy9icmFuY2gyICYmCisJCXRvdWNoIGJheiAmJgorCQlzdm5fY21kIGFkZCBiYXogJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gYnJhbmNoMiAmJgorCQlzdm5fY21kIHN3aXRjaCAiJHN2bnJlcG8iL3RydW5rICYmCisJCXN2bl9jbWQgbWVyZ2UgLS1yZWludGVncmF0ZSAiJHN2bnJlcG8iL2JyYW5jaGVzL2JyYW5jaDIgJiYKKwkJc3ZuX2NtZCBjb21taXQgLW0gIm1lcmdlIGJyYW5jaDIiCisJKSAmJgorCXJtIC1yZiAiJFNWTl9UUkVFIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBzdm4gcmVwbycgJworCWdpdCBzdm4gaW5pdCAtcyAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2ZXJpZnkgbWVyZ2UgY29tbWl0JyAneD0kKGdpdCByZXYtcGFyc2UgSEVBRF4yKSAmJgorCXk9JChnaXQgcmV2LXBhcnNlIG9yaWdpbi9icmFuY2gyKSAmJgorCXRlc3QgIngkeCIgPSAieCR5IgorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkxNjctZ2l0LXN2bi1jbWQtYnJhbmNoLXN1YnByb2plY3Quc2ggYi90L3Q5MTY3LWdpdC1zdm4tY21kLWJyYW5jaC1zdWJwcm9qZWN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJhMzVmYzAKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MTY3LWdpdC1zdm4tY21kLWJyYW5jaC1zdWJwcm9qZWN0LnNoCkBAIC0wLDAgKzEsNDggQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTMgVG9iaWFzIFNjaHVsdGUKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHN2biBicmFuY2ggZm9yIHN1YnByb2plY3QgY2xvbmVzJworLiAuL2xpYi1naXQtc3ZuLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXRpYWxpemUgc3ZucmVwbycgJworCW1rZGlyIGltcG9ydCAmJgorCSgKKwkJY2QgaW1wb3J0ICYmCisJCW1rZGlyIC1wIHRydW5rL3Byb2plY3QgYnJhbmNoZXMgdGFncyAmJgorCQkoCisJCQljZCB0cnVuay9wcm9qZWN0ICYmCisJCQllY2hvIGZvbyA+IGZvbworCQkpICYmCisJCXN2bl9jbWQgaW1wb3J0IC1tICJpbXBvcnQgZm9yIGdpdC1zdm4iIC4gIiRzdm5yZXBvIiA+L2Rldi9udWxsCisJKSAmJgorCXJtIC1yZiBpbXBvcnQgJiYKKwlzdm5fY21kIGNvICIkc3ZucmVwbyIvdHJ1bmsvcHJvamVjdCB0cnVuay9wcm9qZWN0ICYmCisJKAorCQljZCB0cnVuay9wcm9qZWN0ICYmCisJCWVjaG8gYmFyID4+IGZvbyAmJgorCQlzdm5fY21kIGNpIC1tICJ1cGRhdGVkIHRydW5rIgorCSkgJiYKKwlybSAtcmYgdHJ1bmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGludG8gZ2l0JyAnCisJZ2l0IHN2biBpbml0IC0tdHJ1bms9dHJ1bmsvcHJvamVjdCAtLWJyYW5jaGVzPWJyYW5jaGVzLyovcHJvamVjdCBcCisJCS0tdGFncz10YWdzLyovcHJvamVjdCAiJHN2bnJlcG8iICYmCisJZ2l0IHN2biBmZXRjaCAmJgorCWdpdCBjaGVja291dCByZW1vdGVzL29yaWdpbi90cnVuaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgc3ZuIGJyYW5jaCB0ZXN0cycgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gYnJhbmNoIGEgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtLXBhcmVudHMgYSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gYnJhbmNoIC10IHRhZzEgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtLXBhcmVudHMgLXQgdGFnMSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gYnJhbmNoIC0tdGFnIHRhZzIgJiYKKwlnaXQgc3ZuIGJyYW5jaCAtLXBhcmVudHMgLS10YWcgdGFnMiAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBzdm4gdGFnIHRhZzMgJiYKKwlnaXQgc3ZuIHRhZyAtLXBhcmVudHMgdGFnMworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaCBiL3QvdDkyMDAtZ2l0LWN2c2V4cG9ydGNvbW1pdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MTJjOWNkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTIwMC1naXQtY3ZzZXhwb3J0Y29tbWl0LnNoCkBAIC0wLDAgKzEsMzM3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSBSb2JpbiBSb3NlbmJlcmcKKyMKK3Rlc3RfZGVzY3JpcHRpb249J1Rlc3QgZXhwb3J0IG9mIGNvbW1pdHMgdG8gQ1ZTJworCisuIC4vdGVzdC1saWIuc2gKKworaWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkw7IHRoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0IGN2c2V4cG9ydGNvbW1pdCB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKKworY3ZzID4vZGV2L251bGwgMj4mMQoraWYgdGVzdCAkPyAtbmUgMQordGhlbgorICAgIHNraXBfYWxsPSdza2lwcGluZyBnaXQgY3ZzZXhwb3J0Y29tbWl0IHRlc3RzLCBjdnMgbm90IGZvdW5kJworICAgIHRlc3RfZG9uZQorZmkKKworQ1ZTUk9PVD0kUFdEL3RtcGN2c3Jvb3QKK0NWU1dPUks9JFBXRC9jdnN3b3JrCitHSVRfRElSPSRQV0QvLmdpdAorZXhwb3J0IENWU1JPT1QgQ1ZTV09SSyBHSVRfRElSCisKK3JtIC1yZiAiJENWU1JPT1QiICIkQ1ZTV09SSyIKKworY3ZzIGluaXQgJiYKK3Rlc3QgLWQgIiRDVlNST09UIiAmJgorY3ZzIC1RIGNvIC1kICIkQ1ZTV09SSyIgLiAmJgorZWNobyA+ZW1wdHkgJiYKK2dpdCBhZGQgZW1wdHkgJiYKK2dpdCBjb21taXQgLXEgLWEgLW0gIkluaXRpYWwiIDI+L2Rldi9udWxsIHx8CitleGl0IDEKKworY2hlY2tfZW50cmllcyAoKSB7CisJIyAkMSA9PSBkaXJlY3RvcnksICQyID09IGV4cGVjdGVkCisJZ3JlcCAnXi8nICIkMS9DVlMvRW50cmllcyIgfCBzb3J0IHwgY3V0IC1kLyAtZjIsMyw1ID5hY3R1YWwKKwlpZiB0ZXN0IC16ICIkMiIKKwl0aGVuCisJCT5leHBlY3RlZAorCWVsc2UKKwkJcHJpbnRmICclc1xuJyAiJDIiIHwgdHIgJ3wnICdcMDEyJyA+ZXhwZWN0ZWQKKwlmaQorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnTmV3IGZpbGUnIFwKKyAgICAnbWtkaXIgQSBCIEMgRCBFIEYgJiYKKyAgICAgZWNobyBoZWxsbzEgPkEvbmV3ZmlsZTEudHh0ICYmCisgICAgIGVjaG8gaGVsbG8yID5CL25ld2ZpbGUyLnR4dCAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyBDL25ld2ZpbGUzLnBuZyAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyBEL25ld2ZpbGU0LnBuZyAmJgorICAgICBnaXQgYWRkIEEvbmV3ZmlsZTEudHh0ICYmCisgICAgIGdpdCBhZGQgQi9uZXdmaWxlMi50eHQgJiYKKyAgICAgZ2l0IGFkZCBDL25ld2ZpbGUzLnBuZyAmJgorICAgICBnaXQgYWRkIEQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gIlRlc3Q6IE5ldyBmaWxlIiAmJgorICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgIChjZCAiJENWU1dPUksiICYmCisgICAgIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkICYmCisgICAgIGNoZWNrX2VudHJpZXMgQSAibmV3ZmlsZTEudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgQiAibmV3ZmlsZTIudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgQyAibmV3ZmlsZTMucG5nLzEuMS8ta2IiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRCAibmV3ZmlsZTQucG5nLzEuMS8ta2IiICYmCisgICAgIHRlc3RfY21wIEEvbmV3ZmlsZTEudHh0IC4uL0EvbmV3ZmlsZTEudHh0ICYmCisgICAgIHRlc3RfY21wIEIvbmV3ZmlsZTIudHh0IC4uL0IvbmV3ZmlsZTIudHh0ICYmCisgICAgIHRlc3RfY21wIEMvbmV3ZmlsZTMucG5nIC4uL0MvbmV3ZmlsZTMucG5nICYmCisgICAgIHRlc3RfY21wIEQvbmV3ZmlsZTQucG5nIC4uL0QvbmV3ZmlsZTQucG5nCisgICAgICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdSZW1vdmUgdHdvIGZpbGVzLCBhZGQgdHdvIGFuZCB1cGRhdGUgdHdvJyBcCisgICAgJ2VjaG8gSGVsbG8xID4+QS9uZXdmaWxlMS50eHQgJiYKKyAgICAgcm0gLWYgQi9uZXdmaWxlMi50eHQgJiYKKyAgICAgcm0gLWYgQy9uZXdmaWxlMy5wbmcgJiYKKyAgICAgZWNobyBIZWxsbzUgID5FL25ld2ZpbGU1LnR4dCAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0yLnBuZyBEL25ld2ZpbGU0LnBuZyAmJgorICAgICBjcCAiJFRFU1RfRElSRUNUT1JZIi90ZXN0LWJpbmFyeS0xLnBuZyBGL25ld2ZpbGU2LnBuZyAmJgorICAgICBnaXQgYWRkIEUvbmV3ZmlsZTUudHh0ICYmCisgICAgIGdpdCBhZGQgRi9uZXdmaWxlNi5wbmcgJiYKKyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiVGVzdDogUmVtb3ZlLCBhZGQgYW5kIHVwZGF0ZSIgJiYKKyAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jICRpZCAmJgorICAgICBjaGVja19lbnRyaWVzIEEgIm5ld2ZpbGUxLnR4dC8xLjIvIiAmJgorICAgICBjaGVja19lbnRyaWVzIEIgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBDICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRCAibmV3ZmlsZTQucG5nLzEuMi8ta2IiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRSAibmV3ZmlsZTUudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgRiAibmV3ZmlsZTYucG5nLzEuMS8ta2IiICYmCisgICAgIHRlc3RfY21wIEEvbmV3ZmlsZTEudHh0IC4uL0EvbmV3ZmlsZTEudHh0ICYmCisgICAgIHRlc3RfY21wIEQvbmV3ZmlsZTQucG5nIC4uL0QvbmV3ZmlsZTQucG5nICYmCisgICAgIHRlc3RfY21wIEUvbmV3ZmlsZTUudHh0IC4uL0UvbmV3ZmlsZTUudHh0ICYmCisgICAgIHRlc3RfY21wIEYvbmV3ZmlsZTYucG5nIC4uL0YvbmV3ZmlsZTYucG5nCisgICAgICknCisKKyMgU2hvdWxkIGZhaWwgKGJ1dCBvbmx5IG9uIHRoZSBnaXQgY3ZzZXhwb3J0Y29tbWl0IHN0YWdlKQordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0ZhaWwgdG8gY2hhbmdlIGJpbmFyeSBtb3JlIHRoYW4gb25lIGdlbmVyYXRpb24gb2xkJyBcCisgICAgJ2NhdCBGL25ld2ZpbGU2LnBuZyA+PkQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gImdlbmVyYXRpaW9uIDEiICYmCisgICAgIGNhdCBGL25ld2ZpbGU2LnBuZyA+PkQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gImdlbmVyYXRpb24gMiIgJiYKKyAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICB0ZXN0X211c3RfZmFpbCBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1jICRpZAorICAgICApJworCisjdGVzdF9leHBlY3Rfc3VjY2VzcyBcCisjICAgICdGYWlsIHRvIHJlbW92ZSBiaW5hcnkgZmlsZSBtb3JlIHRoYW4gb25lIGdlbmVyYXRpb24gb2xkJyBcCisjICAgICdnaXQgcmVzZXQgLS1oYXJkIEhFQUReICYmCisjICAgICBjYXQgRi9uZXdmaWxlNi5wbmcgPj5EL25ld2ZpbGU0LnBuZyAmJgorIyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiZ2VuZXJhdGlvbiAyIChhZ2FpbikiICYmCisjICAgICBybSAtZiBEL25ld2ZpbGU0LnBuZyAmJgorIyAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiZ2VuZXJhdGlvbiAzIiAmJgorIyAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorIyAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyMgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkCisjICAgICApJworCisjIFdlIHJldXNlIHRoZSBzdGF0ZSBmcm9tIHR3byB0ZXN0cyBiYWNrIGhlcmUKKworIyBUaGlzIHRlc3QgaXMgaGVyZSBiZWNhdXNlIGEgcGF0Y2ggZm9yIG9ubHkgYmluYXJ5IGZpbGVzIHdpbGwKKyMgZmFpbCB3aXRoIGdudSBwYXRjaCwgc28gY3ZzZXhwb3J0Y29tbWl0IG11c3QgaGFuZGxlIHRoYXQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUmVtb3ZlIG9ubHkgYmluYXJ5IGZpbGVzJyBcCisgICAgJ2dpdCByZXNldCAtLWhhcmQgSEVBRF5eICYmCisgICAgIHJtIC1mIEQvbmV3ZmlsZTQucG5nICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gInRlc3Q6IHJlbW92ZSBvbmx5IGEgYmluYXJ5IGZpbGUiICYmCisgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKKyAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQgJiYKKyAgICAgY2hlY2tfZW50cmllcyBBICJuZXdmaWxlMS50eHQvMS4yLyIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBCICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgQyAiIiAmJgorICAgICBjaGVja19lbnRyaWVzIEQgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBFICJuZXdmaWxlNS50eHQvMS4xLyIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBGICJuZXdmaWxlNi5wbmcvMS4xLy1rYiIgJiYKKyAgICAgdGVzdF9jbXAgQS9uZXdmaWxlMS50eHQgLi4vQS9uZXdmaWxlMS50eHQgJiYKKyAgICAgdGVzdF9jbXAgRS9uZXdmaWxlNS50eHQgLi4vRS9uZXdmaWxlNS50eHQgJiYKKyAgICAgdGVzdF9jbXAgRi9uZXdmaWxlNi5wbmcgLi4vRi9uZXdmaWxlNi5wbmcKKyAgICAgKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ1JlbW92ZSBvbmx5IGEgdGV4dCBmaWxlJyBcCisgICAgJ3JtIC1mIEEvbmV3ZmlsZTEudHh0ICYmCisgICAgIGdpdCBjb21taXQgLWEgLW0gInRlc3Q6IHJlbW92ZSBvbmx5IGEgYmluYXJ5IGZpbGUiICYmCisgICAgIGlkPSQoZ2l0IHJldi1saXN0IC0tbWF4LWNvdW50PTEgSEVBRCkgJiYKKyAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQgJiYKKyAgICAgY2hlY2tfZW50cmllcyBBICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgQiAiIiAmJgorICAgICBjaGVja19lbnRyaWVzIEMgIiIgJiYKKyAgICAgY2hlY2tfZW50cmllcyBEICIiICYmCisgICAgIGNoZWNrX2VudHJpZXMgRSAibmV3ZmlsZTUudHh0LzEuMS8iICYmCisgICAgIGNoZWNrX2VudHJpZXMgRiAibmV3ZmlsZTYucG5nLzEuMS8ta2IiICYmCisgICAgIHRlc3RfY21wIEUvbmV3ZmlsZTUudHh0IC4uL0UvbmV3ZmlsZTUudHh0ICYmCisgICAgIHRlc3RfY21wIEYvbmV3ZmlsZTYucG5nIC4uL0YvbmV3ZmlsZTYucG5nCisgICAgICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAnTmV3IGZpbGUgd2l0aCBzcGFjZXMgaW4gZmlsZSBuYW1lJyBcCisgICAgICdta2RpciAiRyBnIiAmJgorICAgICAgZWNobyBvayB0aGVuID4iRyBnL3dpdGggc3BhY2VzLnR4dCIgJiYKKyAgICAgIGdpdCBhZGQgIkcgZy93aXRoIHNwYWNlcy50eHQiICYmIFwKKyAgICAgIGNwICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nICJHIGcvd2l0aCBzcGFjZXMucG5nIiAmJiBcCisgICAgICBnaXQgYWRkICJHIGcvd2l0aCBzcGFjZXMucG5nIiAmJgorICAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiV2l0aCBzcGFjZXMiICYmCisgICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQgJiYKKyAgICAgIGNoZWNrX2VudHJpZXMgIkcgZyIgIndpdGggc3BhY2VzLnBuZy8xLjEvLWtifHdpdGggc3BhY2VzLnR4dC8xLjEvIgorICAgICAgKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICdVcGRhdGUgZmlsZSB3aXRoIHNwYWNlcyBpbiBmaWxlIG5hbWUnIFwKKyAgICAgJ2VjaG8gT2sgdGhlbiA+PiJHIGcvd2l0aCBzcGFjZXMudHh0IiAmJgorICAgICAgY2F0ICIkVEVTVF9ESVJFQ1RPUlkiL3Rlc3QtYmluYXJ5LTEucG5nID4+IkcgZy93aXRoIHNwYWNlcy5wbmciICYmIFwKKyAgICAgIGdpdCBhZGQgIkcgZy93aXRoIHNwYWNlcy5wbmciICYmCisgICAgICBnaXQgY29tbWl0IC1hIC1tICJVcGRhdGUgd2l0aCBzcGFjZXMiICYmCisgICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICAgZ2l0IGN2c2V4cG9ydGNvbW1pdCAtYyAkaWQKKyAgICAgIGNoZWNrX2VudHJpZXMgIkcgZyIgIndpdGggc3BhY2VzLnBuZy8xLjIvLWtifHdpdGggc3BhY2VzLnR4dC8xLjIvIgorICAgICAgKScKKworIyBTb21lIGZpbGVzeXN0ZW1zIG1hbmdsZSBwYXRobmFtZXMgd2l0aCBVVEYtOCBjaGFyYWN0ZXJzIC0tCisjIGNoZWNrIGFuZCBza2lwCitpZiBwPSLDhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2IiAmJgorCW1rZGlyIC1wICJ0c3QvJHAiICYmCisJZGF0ZSA+InRzdC8kcC9kYXkiICYmCisJZm91bmQ9JChmaW5kIHRzdCAtdHlwZSBmIC1wcmludCkgJiYKKwl0ZXN0ICJ6JGZvdW5kIiA9ICJ6dHN0LyRwL2RheSIgJiYKKwlybSAtZnIgdHN0Cit0aGVuCisKKyMgVGhpcyB0ZXN0IGNvbnRhaW5zIFVURi04IGNoYXJhY3RlcnMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAnRmlsZSB3aXRoIG5vbi1hc2NpaSBmaWxlIG5hbWUnIFwKKyAgICAgJ21rZGlyIC1wIMOFL2dvby9hL2IvYy9kL2UvZi9nL2gvaS9qL2svbC9tL24vby9wL3Evci9zL3QvdS92L3cveC95L3ovw6Uvw6Qvw7YgJiYKKyAgICAgIGVjaG8gRm9vID7DhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2L2fDpXJkZXRzw6Vnw6VyZGV0LnR4dCAmJgorICAgICAgZ2l0IGFkZCDDhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2L2fDpXJkZXRzw6Vnw6VyZGV0LnR4dCAmJgorICAgICAgY3AgIiRURVNUX0RJUkVDVE9SWSIvdGVzdC1iaW5hcnktMS5wbmcgw4UvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/DpS/DpC/Dti9nw6VyZGV0c8OlZ8OlcmRldC5wbmcgJiYKKyAgICAgIGdpdCBhZGQgw4UvZ29vL2EvYi9jL2QvZS9mL2cvaC9pL2ovay9sL20vbi9vL3AvcS9yL3MvdC91L3Yvdy94L3kvei/DpS/DpC/Dti9nw6VyZGV0c8OlZ8OlcmRldC5wbmcgJiYKKyAgICAgIGdpdCBjb21taXQgLWEgLW0gIkfDpXIgZGV0IHPDpSBnw6VyIGRldCIgJiYgXAorICAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgIGdpdCBjdnNleHBvcnRjb21taXQgLXYgLWMgJGlkICYmCisgICAgICBjaGVja19lbnRyaWVzIFwKKyAgICAgICLDhS9nb28vYS9iL2MvZC9lL2YvZy9oL2kvai9rL2wvbS9uL28vcC9xL3Ivcy90L3Uvdi93L3gveS96L8OlL8OkL8O2IiBcCisgICAgICAiZ8OlcmRldHPDpWfDpXJkZXQucG5nLzEuMS8ta2J8Z8OlcmRldHPDpWfDpXJkZXQudHh0LzEuMS8iCisgICAgICApJworCitmaQorCitybSAtZnIgdHN0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICAnTWlzbWF0Y2hpbmcgcGF0Y2ggc2hvdWxkIGZhaWwnIFwKKyAgICAgJ2RhdGUgPj4iRS9uZXdmaWxlNS50eHQiICYmCisgICAgICBnaXQgYWRkICJFL25ld2ZpbGU1LnR4dCIgJiYKKyAgICAgIGdpdCBjb21taXQgLWEgLW0gIlVwZGF0ZSBvbmUiICYmCisgICAgICBkYXRlID4+IkUvbmV3ZmlsZTUudHh0IiAmJgorICAgICAgZ2l0IGFkZCAiRS9uZXdmaWxlNS50eHQiICYmCisgICAgICBnaXQgY29tbWl0IC1hIC1tICJVcGRhdGUgdHdvIiAmJgorICAgICAgaWQ9JChnaXQgcmV2LWxpc3QgLS1tYXgtY291bnQ9MSBIRUFEKSAmJgorICAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBjdnNleHBvcnRjb21taXQgLWMgJGlkCisgICAgICApJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZJTEVNT0RFIFwKKyAgICAgJ1JldGFpbiBleGVjdXRlIGJpdCcgXAorICAgICAnbWtkaXIgRyAmJgorICAgICAgZWNobyBleGVjdXRlb24gPkcvb24gJiYKKyAgICAgIGNobW9kICt4IEcvb24gJiYKKyAgICAgIGVjaG8gZXhlY3V0ZW9mZiA+Ry9vZmYgJiYKKyAgICAgIGdpdCBhZGQgRy9vbiAmJgorICAgICAgZ2l0IGFkZCBHL29mZiAmJgorICAgICAgZ2l0IGNvbW1pdCAtYSAtbSAiRXhlY3V0ZSB0ZXN0IiAmJgorICAgICAgKGNkICIkQ1ZTV09SSyIgJiYKKyAgICAgIGdpdCBjdnNleHBvcnRjb21taXQgLWMgSEVBRAorICAgICAgdGVzdCAteCBHL29uICYmCisgICAgICAhIHRlc3QgLXggRy9vZmYKKyAgICAgICknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJy13IG9wdGlvbiBzaG91bGQgd29yayB3aXRoIHJlbGF0aXZlIEdJVF9ESVInICcKKyAgICAgIG1rZGlyIFcgJiYKKyAgICAgIGVjaG8gZm9vYmFyID5XL2ZpbGUxLnR4dCAmJgorICAgICAgZWNobyBiYXp6bGUgPlcvZmlsZTIudHh0ICYmCisgICAgICBnaXQgYWRkIFcvZmlsZTEudHh0ICYmCisgICAgICBnaXQgYWRkIFcvZmlsZTIudHh0ICYmCisgICAgICBnaXQgY29tbWl0IC1tICJNb3JlIHVwZGF0ZXMiICYmCisgICAgICBpZD0kKGdpdCByZXYtbGlzdCAtLW1heC1jb3VudD0xIEhFQUQpICYmCisgICAgICAoY2QgIiRHSVRfRElSIiAmJgorICAgICAgR0lUX0RJUj0uIGdpdCBjdnNleHBvcnRjb21taXQgLXcgIiRDVlNXT1JLIiAtYyAkaWQgJiYKKyAgICAgIGNoZWNrX2VudHJpZXMgIiRDVlNXT1JLL1ciICJmaWxlMS50eHQvMS4xL3xmaWxlMi50eHQvMS4xLyIgJiYKKyAgICAgIHRlc3RfY21wICIkQ1ZTV09SSy9XL2ZpbGUxLnR4dCIgLi4vVy9maWxlMS50eHQgJiYKKyAgICAgIHRlc3RfY21wICIkQ1ZTV09SSy9XL2ZpbGUyLnR4dCIgLi4vVy9maWxlMi50eHQKKyAgICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgZmlsZXMgYmVmb3JlIGRpcmVjdG9yaWVzJyAnCisKKwllY2hvIE5vdGVzID4gcmVsZWFzZS1ub3RlcyAmJgorCWdpdCBhZGQgcmVsZWFzZS1ub3RlcyAmJgorCWdpdCBjb21taXQgLW0gIkFkZCByZWxlYXNlIG5vdGVzIiByZWxlYXNlLW5vdGVzICYmCisJaWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdyAiJENWU1dPUksiIC1jICRpZCAmJgorCisJZWNobyBuZXcgPiBEUyAmJgorCWVjaG8gbmV3ID4gRS9EUyAmJgorCWVjaG8gbW9kaWZpZWQgPiByZWxlYXNlLW5vdGVzICYmCisJZ2l0IGFkZCBEUyBFL0RTIHJlbGVhc2Utbm90ZXMgJiYKKwlnaXQgY29tbWl0IC1tICJBZGQgdHdvIGZpbGVzIHdpdGggdGhlIHNhbWUgYmFzZW5hbWUiICYmCisJaWQ9JChnaXQgcmV2LXBhcnNlIEhFQUQpICYmCisJZ2l0IGN2c2V4cG9ydGNvbW1pdCAtdyAiJENWU1dPUksiIC1jICRpZCAmJgorCWNoZWNrX2VudHJpZXMgIiRDVlNXT1JLL0UiICJEUy8xLjEvfG5ld2ZpbGU1LnR4dC8xLjEvIiAmJgorCWNoZWNrX2VudHJpZXMgIiRDVlNXT1JLIiAiRFMvMS4xL3xyZWxlYXNlLW5vdGVzLzEuMi8iICYmCisJdGVzdF9jbXAgIiRDVlNXT1JLL0RTIiBEUyAmJgorCXRlc3RfY21wICIkQ1ZTV09SSy9FL0RTIiBFL0RTICYmCisJdGVzdF9jbXAgIiRDVlNXT1JLL3JlbGVhc2Utbm90ZXMiIHJlbGVhc2Utbm90ZXMKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZS1jb21taXQgYSByZW1vdmVkIGZpbGVuYW1lIHdoaWNoIHJlbWFpbnMgaW4gQ1ZTIGF0dGljJyAnCisKKyAgICAoY2QgIiRDVlNXT1JLIiAmJgorICAgICBlY2hvID5hdHRpY19ncmVtbGluICYmCisgICAgIGN2cyAtUSBhZGQgYXR0aWNfZ3JlbWxpbiAmJgorICAgICBjdnMgLVEgY2kgLW0gImFkZGVkIGF0dGljX2dyZW1saW4iICYmCisgICAgIHJtIGF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIHJtIGF0dGljX2dyZW1saW4gJiYKKyAgICAgY3ZzIC1RIGNpIC1tICJyZW1vdmVkIGF0dGljX2dyZW1saW4iKSAmJgorCisgICAgZWNobyA+IGF0dGljX2dyZW1saW4gJiYKKyAgICBnaXQgYWRkIGF0dGljX2dyZW1saW4gJiYKKyAgICBnaXQgY29tbWl0IC1tICJBZGRlZCBhdHRpY19ncmVtbGluIiAmJgorCWdpdCBjdnNleHBvcnRjb21taXQgLXcgIiRDVlNXT1JLIiAtYyBIRUFEICYmCisgICAgKGNkICIkQ1ZTV09SSyI7IGN2cyAtUSB1cGRhdGUgLWQpICYmCisgICAgdGVzdCAtZiAiJENWU1dPUksvYXR0aWNfZ3JlbWxpbiIKKycKKworIyB0aGUgc3RhdGUgb2YgdGhlIENWUyBzYW5kYm94IG1heSBiZSBpbmRldGVybWluYXRlIGZvciAnIHNwYWNlJworIyBhZnRlciB0aGlzIHRlc3Qgb24gc29tZSBwbGF0Zm9ybXMgLyB3aXRoIHNvbWUgdmVyc2lvbnMgb2YgQ1ZTCisjIGNvbnNpZGVyIGFkZGluZyBuZXcgdGVzdHMgYWJvdmUgdGhpcyBwb2ludAordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tbWl0IGEgZmlsZSB3aXRoIGxlYWRpbmcgc3BhY2VzIGluIHRoZSBuYW1lJyAnCisKKwllY2hvIHNwYWNlID4gIiBzcGFjZSIgJiYKKwlnaXQgYWRkICIgc3BhY2UiICYmCisJZ2l0IGNvbW1pdCAtbSAiQWRkIGEgZmlsZSB3aXRoIGEgbGVhZGluZyBzcGFjZSIgJiYKKwlpZD0kKGdpdCByZXYtcGFyc2UgSEVBRCkgJiYKKwlnaXQgY3ZzZXhwb3J0Y29tbWl0IC13ICIkQ1ZTV09SSyIgLWMgJGlkICYmCisJY2hlY2tfZW50cmllcyAiJENWU1dPUksiICIgc3BhY2UvMS4xL3xEUy8xLjEvfGF0dGljX2dyZW1saW4vMS4zL3xyZWxlYXNlLW5vdGVzLzEuMi8iICYmCisJdGVzdF9jbXAgIiRDVlNXT1JLLyBzcGFjZSIgIiBzcGFjZSIKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgdGhlIHNhbWUgY2hlY2tvdXQgZm9yIEdpdCBhbmQgQ1ZTJyAnCisKKwkobWtkaXIgc2hhcmVkICYmCisJIGNkIHNoYXJlZCAmJgorCSBzYW5lX3Vuc2V0IEdJVF9ESVIgJiYKKwkgY3ZzIGNvIC4gJiYKKwkgZ2l0IGluaXQgJiYKKwkgZ2l0IGFkZCAiIHNwYWNlIiAmJgorCSBnaXQgY29tbWl0IC1tICJmYWtlIGluaXRpYWwgY29tbWl0IiAmJgorCSBlY2hvIEhlbGxvID4+ICIgc3BhY2UiICYmCisJIGdpdCBjb21taXQgLW0gIkFub3RoZXIgY2hhbmdlIiAiIHNwYWNlIiAmJgorCSBnaXQgY3ZzZXhwb3J0Y29tbWl0IC1XIC1wIC11IC1jIEhFQUQgJiYKKwkgZ3JlcCBIZWxsbyAiIHNwYWNlIiAmJgorCSBnaXQgZGlmZi1maWxlcykKKworJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkzMDAtZmFzdC1pbXBvcnQuc2ggYi90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk5ODRjNDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5MzAwLWZhc3QtaW1wb3J0LnNoCkBAIC0wLDAgKzEsMzEwNCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBTaGF3biBQZWFyY2UKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0ndGVzdCBnaXQgZmFzdC1pbXBvcnQgdXRpbGl0eScKKy4gLi90ZXN0LWxpYi5zaAorLiAiJFRFU1RfRElSRUNUT1JZIi9kaWZmLWxpYi5zaCA7IyB0ZXN0LWxpYiBjaGRpcidzIGludG8gdHJhc2gKKworIyBQcmludCAkMSBieXRlcyBmcm9tIHN0ZGluIHRvIHN0ZG91dC4KKyMKKyMgVGhpcyBjb3VsZCBiZSB3cml0dGVuIGFzICJoZWFkIC1jICQxIiwgYnV0IElSSVggImhlYWQiIGRvZXMgbm90CisjIHN1cHBvcnQgdGhlIC1jIG9wdGlvbi4KK2hlYWRfYyAoKSB7CisJcGVybCAtZSAnCisJCW15ICRsZW4gPSAkQVJHVlsxXTsKKwkJd2hpbGUgKCRsZW4gPiAwKSB7CisJCQlteSAkczsKKwkJCW15ICRucmVhZCA9IHN5c3JlYWQoU1RESU4sICRzLCAkbGVuKTsKKwkJCWRpZSAiY2Fubm90IHJlYWQ6ICQhIiB1bmxlc3MgZGVmaW5lZCgkbnJlYWQpOworCQkJcHJpbnQgJHM7CisJCQkkbGVuIC09ICRucmVhZDsKKwkJfQorCScgLSAiJDEiCit9CisKK3ZlcmlmeV9wYWNrcyAoKSB7CisJZm9yIHAgaW4gLmdpdC9vYmplY3RzL3BhY2svKi5wYWNrCisJZG8KKwkJZ2l0IHZlcmlmeS1wYWNrICIkQCIgIiRwIiB8fCByZXR1cm4KKwlkb25lCit9CisKK2ZpbGUyX2RhdGE9J2ZpbGUyCitzZWNvbmQgbGluZSBvZiBFT0YnCisKK2ZpbGUzX2RhdGE9J0VPRgoraW4gM3JkIGZpbGUKKyBFTkQnCisKK2ZpbGU0X2RhdGE9YWJjZAorZmlsZTRfbGVuPTQKKworZmlsZTVfZGF0YT0nYW4gaW5saW5lIGZpbGUuCisgIHdlIHNob3VsZCBzZWUgaXQgbGF0ZXIuJworCitmaWxlNl9kYXRhPScjIS9iaW4vc2gKK2VjaG8gIiRAIicKKworPmVtcHR5CisKKyMjIworIyMjIHNlcmllcyBBCisjIyMKKwordGVzdF90aWNrCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VtcHR5IHN0cmVhbSBzdWNjZWVkcycgJworCWdpdCBmYXN0LWltcG9ydCA8L2Rldi9udWxsCisnCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2Jsb2IKK21hcmsgOjIKK2RhdGEgPDxFT0YKKyRmaWxlMl9kYXRhCitFT0YKKworYmxvYgorbWFyayA6MworZGF0YSA8PEVORAorJGZpbGUzX2RhdGEKK0VORAorCitibG9iCittYXJrIDo0CitkYXRhICRmaWxlNF9sZW4KKyRmaWxlNF9kYXRhCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK21hcmsgOjUKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAoraW5pdGlhbAorQ09NTUlUCisKK00gNjQ0IDoyIGZpbGUyCitNIDY0NCA6MyBmaWxlMworTSA3NTUgOjQgZmlsZTQKKwordGFnIHNlcmllcy1BCitmcm9tIDo1CitkYXRhIDw8RU9GCitBbiBhbm5vdGF0ZWQgdGFnIHdpdGhvdXQgYSB0YWdnZXIKK0VPRgorCit0YWcgc2VyaWVzLUEtYmxvYgorZnJvbSA6MworZGF0YSA8PEVPRgorQW4gYW5ub3RhdGVkIHRhZyB0aGF0IGFubm90YXRlcyBhIGJsb2IuCitFT0YKKworSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnQTogY3JlYXRlIHBhY2sgZnJvbSBzdGRpbicgXAorICAgICdnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9bWFya3Mub3V0IDxpbnB1dCAmJgorCSBnaXQgd2hhdGNoYW5nZWQgbWFzdGVyJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgcGFjaycgJworCXZlcmlmeV9wYWNrcworJworCitjYXQgPmV4cGVjdCA8PEVPRgorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworaW5pdGlhbAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IG1hc3RlciB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QgPDxFT0YKKzEwMDY0NCBibG9iIGZpbGUyCisxMDA2NDQgYmxvYiBmaWxlMworMTAwNzU1IGJsb2IgZmlsZTQKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0E6IHZlcmlmeSB0cmVlJyBcCisJJ2dpdCBjYXQtZmlsZSAtcCBtYXN0ZXJee3RyZWV9IHwgc2VkICJzLyBbMC05YS1mXSoJLyAvIiA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRmaWxlMl9kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IGZpbGUyJyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIG1hc3RlcjpmaWxlMiA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRmaWxlM19kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IGZpbGUzJyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIG1hc3RlcjpmaWxlMyA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK3ByaW50ZiAiJGZpbGU0X2RhdGEiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdBOiB2ZXJpZnkgZmlsZTQnIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgbWFzdGVyOmZpbGU0ID5hY3R1YWwgJiYgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QgPDxFT0YKK29iamVjdCAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIpCit0eXBlIGNvbW1pdAordGFnIHNlcmllcy1BCisKK0FuIGFubm90YXRlZCB0YWcgd2l0aG91dCBhIHRhZ2dlcgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBOiB2ZXJpZnkgdGFnL3Nlcmllcy1BJyAnCisJZ2l0IGNhdC1maWxlIHRhZyB0YWdzL3Nlcmllcy1BID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitvYmplY3QgJChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyOmZpbGUzKQordHlwZSBibG9iCit0YWcgc2VyaWVzLUEtYmxvYgorCitBbiBhbm5vdGF0ZWQgdGFnIHRoYXQgYW5ub3RhdGVzIGEgYmxvYi4KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyAnQTogdmVyaWZ5IHRhZy9zZXJpZXMtQS1ibG9iJyAnCisJZ2l0IGNhdC1maWxlIHRhZyB0YWdzL3Nlcmllcy1BLWJsb2IgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzoyIGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcjpmaWxlMmAKKzozIGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcjpmaWxlM2AKKzo0IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3RlcjpmaWxlNGAKKzo1IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3Rlcl4wYAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IG1hcmtzIG91dHB1dCcgXAorCSd0ZXN0X2NtcCBleHBlY3QgbWFya3Mub3V0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IG1hcmtzIGltcG9ydCcgXAorCSdnaXQgZmFzdC1pbXBvcnQgXAorCQktLWltcG9ydC1tYXJrcz1tYXJrcy5vdXQgXAorCQktLWV4cG9ydC1tYXJrcz1tYXJrcy5uZXcgXAorCQk8L2Rldi9udWxsICYmCisJdGVzdF9jbXAgZXhwZWN0IG1hcmtzLm5ldycKKwordGVzdF90aWNrCituZXdfYmxvYj0kKGVjaG8gdGVzdGluZyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKQorY2F0ID5pbnB1dCA8PElOUFVUX0VORAordGFnIHNlcmllcy1BLWJsb2ItMgorZnJvbSAkKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXI6ZmlsZTMpCitkYXRhIDw8RU9GCitUYWcgYmxvYiBieSBzaGExLgorRU9GCisKK2Jsb2IKK21hcmsgOjYKK2RhdGEgPDxFT0YKK3Rlc3RpbmcKK0VPRgorCitjb21taXQgcmVmcy9oZWFkcy9uZXdfYmxvYgorY29tbWl0dGVyICA8PiAwICswMDAwCitkYXRhIDAKK00gNjQ0IDo2IG5ld19ibG9iCisjcHJldGVuZCB3ZSBnb3Qgc2hhMSBmcm9tIGZhc3QtaW1wb3J0CitscyAibmV3X2Jsb2IiCisKK3RhZyBzZXJpZXMtQS1ibG9iLTMKK2Zyb20gJG5ld19ibG9iCitkYXRhIDw8RU9GCitUYWcgbmV3X2Jsb2IuCitFT0YKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVPRgorb2JqZWN0ICQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL21hc3RlcjpmaWxlMykKK3R5cGUgYmxvYgordGFnIHNlcmllcy1BLWJsb2ItMgorCitUYWcgYmxvYiBieSBzaGExLgorb2JqZWN0ICRuZXdfYmxvYgordHlwZSBibG9iCit0YWcgc2VyaWVzLUEtYmxvYi0zCisKK1RhZyBuZXdfYmxvYi4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdGFnIGJsb2IgYnkgc2hhMScgXAorCSdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJZ2l0IGNhdC1maWxlIHRhZyB0YWdzL3Nlcmllcy1BLWJsb2ItMiA+YWN0dWFsICYmCisJZ2l0IGNhdC1maWxlIHRhZyB0YWdzL3Nlcmllcy1BLWJsb2ItMyA+PmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvdmVyaWZ5LS1pbXBvcnQtbWFya3MKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorcmVjcmVhdGUgZnJvbSA6NQorQ09NTUlUCisKK2Zyb20gOjUKK00gNzU1IDoyIGNvcHktb2YtZmlsZTIKKworSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQTogdmVyaWZ5IG1hcmtzIGltcG9ydCBkb2VzIG5vdCBjcmFzaCcgXAorCSdnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3Mub3V0IDxpbnB1dCAmJgorCSBnaXQgd2hhdGNoYW5nZWQgdmVyaWZ5LS1pbXBvcnQtbWFya3MnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IHZlcmlmeSBwYWNrJyAnCisJdmVyaWZ5X3BhY2tzCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCis6MDAwMDAwIDEwMDc1NSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgQQljb3B5LW9mLWZpbGUyCitFT0YKK2dpdCBkaWZmLXRyZWUgLU0gLXIgbWFzdGVyIHZlcmlmeS0taW1wb3J0LW1hcmtzID5hY3R1YWwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdBOiB2ZXJpZnkgZGlmZicgXAorCSdjb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwgJiYKKwkgdGVzdCBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXI6ZmlsZTJgIFwKKwkgICAgPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB2ZXJpZnktLWltcG9ydC1tYXJrczpjb3B5LW9mLWZpbGUyYCcKKwordGVzdF90aWNrCittdD0kKGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluIDwgL2Rldi9udWxsKQorOiA+aW5wdXQuYmxvYgorOiA+bWFya3MuZXhwCis6ID50cmVlLmV4cAorCitjYXQgPmlucHV0LmNvbW1pdCA8PEVPRgorY29tbWl0IHJlZnMvaGVhZHMvdmVyaWZ5LS1kdW1wLW1hcmtzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3Rlc3QgdGhlIHNwYXJzZSBhcnJheSBkdW1waW5nIHJvdXRpbmVzIHdpdGggZXhwb25lbnRpYWxseSBncm93aW5nIG1hcmtzCitDT01NSVQKK0VPRgorCitpPTAKK2w9NAorbT02CituPTcKK3doaWxlIHRlc3QgIiRpIiAtbHQgMjc7IGRvCisgICAgY2F0ID4+aW5wdXQuYmxvYiA8PEVPRgorYmxvYgorbWFyayA6JGwKK2RhdGEgMAorYmxvYgorbWFyayA6JG0KK2RhdGEgMAorYmxvYgorbWFyayA6JG4KK2RhdGEgMAorRU9GCisgICAgZWNobyAiTSAxMDA2NDQgOiRsIGwkaSIgPj5pbnB1dC5jb21taXQKKyAgICBlY2hvICJNIDEwMDY0NCA6JG0gbSRpIiA+PmlucHV0LmNvbW1pdAorICAgIGVjaG8gIk0gMTAwNjQ0IDokbiBuJGkiID4+aW5wdXQuY29tbWl0CisKKyAgICBlY2hvICI6JGwgJG10IiA+Pm1hcmtzLmV4cAorICAgIGVjaG8gIjokbSAkbXQiID4+bWFya3MuZXhwCisgICAgZWNobyAiOiRuICRtdCIgPj5tYXJrcy5leHAKKworICAgIHByaW50ZiAiMTAwNjQ0IGJsb2IgJG10XHRsJGlcbiIgPj50cmVlLmV4cAorICAgIHByaW50ZiAiMTAwNjQ0IGJsb2IgJG10XHRtJGlcbiIgPj50cmVlLmV4cAorICAgIHByaW50ZiAiMTAwNjQ0IGJsb2IgJG10XHRuJGlcbiIgPj50cmVlLmV4cAorCisgICAgbD0kKCgkbCArICRsKSkKKyAgICBtPSQoKCRtICsgJG0pKQorICAgIG49JCgoJGwgKyAkbikpCisKKyAgICBpPSQoKDEgKyAkaSkpCitkb25lCisKK3NvcnQgdHJlZS5leHAgPiB0cmVlLmV4cF9zCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0E6IGV4cG9ydCBtYXJrcyB3aXRoIGxhcmdlIHZhbHVlcycgJworCWNhdCBpbnB1dC5ibG9iIGlucHV0LmNvbW1pdCB8IGdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1tYXJrcy5sYXJnZSAmJgorCWdpdCBscy10cmVlIHJlZnMvaGVhZHMvdmVyaWZ5LS1kdW1wLW1hcmtzID50cmVlLm91dCAmJgorCXRlc3RfY21wIHRyZWUuZXhwX3MgdHJlZS5vdXQgJiYKKwl0ZXN0X2NtcCBtYXJrcy5leHAgbWFya3MubGFyZ2UnCisKKyMjIworIyMjIHNlcmllcyBCCisjIyMKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9icmFuY2gKK21hcmsgOjEKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29ycnVwdAorQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9tYXN0ZXIKK00gNzU1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgemVybzEKKworSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBmYWlsIG9uIGludmFsaWQgYmxvYiBzaGExJyAnCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworcm0gLWYgLmdpdC9vYmplY3RzL3BhY2tfKiAuZ2l0L29iamVjdHMvaW5kZXhfKgorCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgVEVNUF9UQUcKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAordGFnIGJhc2UKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvbWFzdGVyCisKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0I6IGFjY2VwdCBicmFuY2ggbmFtZSAiVEVNUF9UQUciJyBcCisgICAgJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgdGVzdCAtZiAuZ2l0L1RFTVBfVEFHICYmCisJIHRlc3QgYGdpdCByZXYtcGFyc2UgbWFzdGVyYCA9IGBnaXQgcmV2LXBhcnNlIFRFTVBfVEFHXmAnCitybSAtZiAuZ2l0L1RFTVBfVEFHCisKK2dpdCBnYyAyPi9kZXYvbnVsbCA+L2Rldi9udWxsCitnaXQgcHJ1bmUgMj4vZGV2L251bGwgPi9kZXYvbnVsbAorCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9lbXB0eS1jb21taXR0ZXItMQorY29tbWl0dGVyICA8PiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitlbXB0eSBjb21taXQKK0NPTU1JVAorSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBhY2NlcHQgZW1wdHkgY29tbWl0dGVyJyAnCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCW91dD0kKGdpdCBmc2NrKSAmJgorCWVjaG8gIiRvdXQiICYmCisJdGVzdCAteiAiJG91dCIKKycKK2dpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvZW1wdHktY29tbWl0dGVyLTEgfHwgdHJ1ZQorCitnaXQgZ2MgMj4vZGV2L251bGwgPi9kZXYvbnVsbAorZ2l0IHBydW5lIDI+L2Rldi9udWxsID4vZGV2L251bGwKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvZW1wdHktY29tbWl0dGVyLTIKK2NvbW1pdHRlciA8YUBiLmNvbT4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZW1wdHkgY29tbWl0CitDT01NSVQKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogYWNjZXB0IGFuZCBmaXh1cCBjb21taXR0ZXIgd2l0aCBubyBuYW1lJyAnCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCW91dD0kKGdpdCBmc2NrKSAmJgorCWVjaG8gIiRvdXQiICYmCisJdGVzdCAteiAiJG91dCIKKycKK2dpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvZW1wdHktY29tbWl0dGVyLTIgfHwgdHJ1ZQorCitnaXQgZ2MgMj4vZGV2L251bGwgPi9kZXYvbnVsbAorZ2l0IHBydW5lIDI+L2Rldi9udWxsID4vZGV2L251bGwKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIKK2NvbW1pdHRlciBOYW1lIGVtYWlsPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitlbXB0eSBjb21taXQKK0NPTU1JVAorSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBmYWlsIG9uIGludmFsaWQgY29tbWl0dGVyICgxKScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKK2dpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIgfHwgdHJ1ZQorCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9pbnZhbGlkLWNvbW1pdHRlcgorY29tbWl0dGVyIE5hbWUgPGU8bWFpbD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZW1wdHkgY29tbWl0CitDT01NSVQKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogZmFpbCBvbiBpbnZhbGlkIGNvbW1pdHRlciAoMiknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCitnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyIHx8IHRydWUKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIKK2NvbW1pdHRlciBOYW1lIDxlbWFpbD4+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2VtcHR5IGNvbW1pdAorQ09NTUlUCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0I6IGZhaWwgb24gaW52YWxpZCBjb21taXR0ZXIgKDMpJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworZ2l0IHVwZGF0ZS1yZWYgLWQgcmVmcy9oZWFkcy9pbnZhbGlkLWNvbW1pdHRlciB8fCB0cnVlCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyCitjb21taXR0ZXIgTmFtZSA8ZW1haWwgJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZW1wdHkgY29tbWl0CitDT01NSVQKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyAnQjogZmFpbCBvbiBpbnZhbGlkIGNvbW1pdHRlciAoNCknICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCitnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL2ludmFsaWQtY29tbWl0dGVyIHx8IHRydWUKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIKK2NvbW1pdHRlciBOYW1lPGVtYWlsPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitlbXB0eSBjb21taXQKK0NPTU1JVAorSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzICdCOiBmYWlsIG9uIGludmFsaWQgY29tbWl0dGVyICg1KScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKK2dpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvaW52YWxpZC1jb21taXR0ZXIgfHwgdHJ1ZQorCisjIyMKKyMjIyBzZXJpZXMgQworIyMjCisKK25ld2Y9YGVjaG8gaGkgbmV3ZiB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluYAorb2xkZj1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBtYXN0ZXI6ZmlsZTJgCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL2JyYW5jaAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitzZWNvbmQKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvbWFzdGVyCitNIDY0NCAkb2xkZiBmaWxlMi9vbGRmCitNIDc1NSAkbmV3ZiBmaWxlMi9uZXdmCitEIGZpbGUzCisKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0M6IGluY3JlbWVudGFsIGltcG9ydCBjcmVhdGUgcGFjayBmcm9tIHN0ZGluJyBcCisgICAgJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgZ2l0IHdoYXRjaGFuZ2VkIGJyYW5jaCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQzogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0M6IHZhbGlkYXRlIHJldXNlIGV4aXN0aW5nIGJsb2InIFwKKwkndGVzdCAkbmV3ZiA9IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJyYW5jaDpmaWxlMi9uZXdmYCAmJgorCSB0ZXN0ICRvbGRmID0gYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYnJhbmNoOmZpbGUyL29sZGZgJworCitjYXQgPmV4cGVjdCA8PEVPRgorcGFyZW50IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IG1hc3Rlcl4wYAorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworc2Vjb25kCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdDOiB2ZXJpZnkgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBjb21taXQgYnJhbmNoIHwgc2VkIDFkID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QgPDxFT0YKKzowMDAwMDAgMTAwNzU1IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBBCWZpbGUyL25ld2YKKzoxMDA2NDQgMTAwNjQ0IDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSBSMTAwCWZpbGUyCWZpbGUyL29sZGYKKzoxMDA2NDQgMDAwMDAwIDBkOTJlOWYzMzc0YWUyOTQ3YzIzYWE0NzdjYmM2OGNlNTk4MTM1ZjEgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGUzCitFT0YKK2dpdCBkaWZmLXRyZWUgLU0gLXIgbWFzdGVyIGJyYW5jaCA+YWN0dWFsCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknQzogdmFsaWRhdGUgcmVuYW1lIHJlc3VsdCcgXAorCSdjb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwnCisKKyMjIworIyMjIHNlcmllcyBECisjIyMKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9icmFuY2gKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAordGhpcmQKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKK00gNjQ0IGlubGluZSBuZXdkaXIvaW50ZXJlc3RpbmcKK2RhdGEgPDxFT0YKKyRmaWxlNV9kYXRhCitFT0YKKworTSA3NTUgaW5saW5lIG5ld2Rpci9leGVjLnNoCitkYXRhIDw8RU9GCiskZmlsZTZfZGF0YQorRU9GCisKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0Q6IGlubGluZSBkYXRhIGluIGNvbW1pdCcgXAorICAgICdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCB3aGF0Y2hhbmdlZCBicmFuY2gnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Q6IHZlcmlmeSBwYWNrJyAnCisJdmVyaWZ5X3BhY2tzCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCis6MDAwMDAwIDEwMDc1NSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIGU3NGI3ZDQ2NWU1Mjc0NmJlMmI0YmFlOTgzNjcwNzExZTZlNjY2NTcgQQluZXdkaXIvZXhlYy5zaAorOjAwMDAwMCAxMDA2NDQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIEEJbmV3ZGlyL2ludGVyZXN0aW5nCitFT0YKK2dpdCBkaWZmLXRyZWUgLU0gLXIgYnJhbmNoXiBicmFuY2ggPmFjdHVhbAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0Q6IHZhbGlkYXRlIG5ldyBmaWxlcyBhZGRlZCcgXAorCSdjb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRmaWxlNV9kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknRDogdmVyaWZ5IGZpbGU1JyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIGJyYW5jaDpuZXdkaXIvaW50ZXJlc3RpbmcgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitlY2hvICIkZmlsZTZfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0Q6IHZlcmlmeSBmaWxlNicgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiBicmFuY2g6bmV3ZGlyL2V4ZWMuc2ggPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCisjIyMKKyMjIyBzZXJpZXMgRQorIyMjCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL2JyYW5jaAorYXV0aG9yICRHSVRfQVVUSE9SX05BTUUgPCRHSVRfQVVUSE9SX0VNQUlMPiBUdWUgRmViIDYgMTE6MjI6MTggMjAwNyAtMDUwMAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiBUdWUgRmViIDYgMTI6MzU6MDIgMjAwNyAtMDUwMAorZGF0YSA8PENPTU1JVAorUkZDIDI4MjIgdHlwZSBkYXRlCitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyAnRTogcmZjMjgyMiBkYXRlLCAtLWRhdGUtZm9ybWF0PXJhdycgJworICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWRhdGUtZm9ybWF0PXJhdyA8aW5wdXQKKycKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdFOiByZmMyODIyIGRhdGUsIC0tZGF0ZS1mb3JtYXQ9cmZjMjgyMicgXAorICAgICdnaXQgZmFzdC1pbXBvcnQgLS1kYXRlLWZvcm1hdD1yZmMyODIyIDxpbnB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRTogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKworY2F0ID5leHBlY3QgPDxFT0YKK2F1dGhvciAkR0lUX0FVVEhPUl9OQU1FIDwkR0lUX0FVVEhPUl9FTUFJTD4gMTE3MDc3ODkzOCAtMDUwMAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAxMTcwNzgzMzAyIC0wNTAwCisKK1JGQyAyODIyIHR5cGUgZGF0ZQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknRTogdmVyaWZ5IGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IGJyYW5jaCB8IHNlZCAxLDJkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCisjIyMKKyMjIyBzZXJpZXMgRgorIyMjCisKK29sZF9icmFuY2g9YGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYnJhbmNoXjBgCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL2JyYW5jaAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitsb3NpbmcgdGhpbmdzIGFscmVhZHk/CitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaH4xCisKK3Jlc2V0IHJlZnMvaGVhZHMvb3RoZXIKK2Zyb20gcmVmcy9oZWFkcy9icmFuY2gKKworSU5QVVRfRU5ECit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnRjogbm9uLWZhc3QtZm9yd2FyZCB1cGRhdGUgc2tpcHMnIFwKKyAgICAnaWYgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorCSB0aGVuCisJCWVjaG8gQkFEIGdmaSBkaWQgbm90IGZhaWwKKwkJcmV0dXJuIDEKKwkgZWxzZQorCQlpZiB0ZXN0ICRvbGRfYnJhbmNoID0gYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYnJhbmNoXjBgCisJCXRoZW4KKwkJCTogYnJhbmNoIHVuYWZmZWN0ZWQgYW5kIGZhaWx1cmUgcmV0dXJuZWQKKwkJCXJldHVybiAwCisJCWVsc2UKKwkJCWVjaG8gQkFEIGdmaSBjaGFuZ2VkIGJyYW5jaCAkb2xkX2JyYW5jaAorCQkJcmV0dXJuIDEKKwkJZmkKKwkgZmkKKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Y6IHZlcmlmeSBwYWNrJyAnCisJdmVyaWZ5X3BhY2tzCisnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCit0cmVlIGBnaXQgcmV2LXBhcnNlIGJyYW5jaH4xXnt0cmVlfWAKK3BhcmVudCBgZ2l0IHJldi1wYXJzZSBicmFuY2h+MWAKK2F1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKK2xvc2luZyB0aGluZ3MgYWxyZWFkeT8KK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0Y6IHZlcmlmeSBvdGhlciBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGNvbW1pdCBvdGhlciA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworIyMjCisjIyMgc2VyaWVzIEcKKyMjIworCitvbGRfYnJhbmNoPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJyYW5jaF4wYAordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9icmFuY2gKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbG9zaW5nIHRoaW5ncyBhbHJlYWR5PworQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9icmFuY2h+MQorCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdHOiBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZSBmb3JjZWQnIFwKKyAgICAnZ2l0IGZhc3QtaW1wb3J0IC0tZm9yY2UgPGlucHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdHOiB2ZXJpZnkgcGFjaycgJworCXZlcmlmeV9wYWNrcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknRzogYnJhbmNoIGNoYW5nZWQsIGJ1dCBsb2dnZWQnIFwKKwkndGVzdCAkb2xkX2JyYW5jaCAhPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBicmFuY2heMGAgJiYKKwkgdGVzdCAkb2xkX2JyYW5jaCA9IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGJyYW5jaEB7MX1gJworCisjIyMKKyMjIyBzZXJpZXMgSAorIyMjCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvSAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCit0aGlyZAorQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9icmFuY2heMAorTSA2NDQgaW5saW5lIGktd2lsbC1kaWUKK2RhdGEgPDxFT0YKK3RoaXMgZmlsZSB3aWxsIG5ldmVyIGV4aXN0LgorRU9GCisKK2RlbGV0ZWFsbAorTSA2NDQgaW5saW5lIGgvZS9sL2xvCitkYXRhIDw8RU9GCiskZmlsZTVfZGF0YQorRU9GCisKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0g6IGRlbGV0YWxsLCBhZGQgMScgXAorICAgICdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCB3aGF0Y2hhbmdlZCBIJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdIOiB2ZXJpZnkgcGFjaycgJworCXZlcmlmeV9wYWNrcworJworCitjYXQgPmV4cGVjdCA8PEVPRgorOjEwMDc1NSAwMDAwMDAgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJZmlsZTIvbmV3ZgorOjEwMDY0NCAwMDAwMDAgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJZmlsZTIvb2xkZgorOjEwMDc1NSAwMDAwMDAgODVkZjUwNzg1ZDYyZDNiMDVhYjAzZDljYmY3ZTRhMGI0OTQ0OTczMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJZmlsZTQKKzoxMDA2NDQgMTAwNjQ0IGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgZmNmNzc4Y2RhMTgxZWFhMWNiYzllOWNlM2EyZTE1ZWU5ZjlmZTc5MSBSMTAwCW5ld2Rpci9pbnRlcmVzdGluZwloL2UvbC9sbworOjEwMDc1NSAwMDAwMDAgZTc0YjdkNDY1ZTUyNzQ2YmUyYjRiYWU5ODM2NzA3MTFlNmU2NjY1NyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJbmV3ZGlyL2V4ZWMuc2gKK0VPRgorZ2l0IGRpZmYtdHJlZSAtTSAtciBIXiBIID5hY3R1YWwKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdIOiB2YWxpZGF0ZSBvbGQgZmlsZXMgcmVtb3ZlZCwgbmV3IGZpbGVzIGFkZGVkJyBcCisJJ2NvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbCcKKworZWNobyAiJGZpbGU1X2RhdGEiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdIOiB2ZXJpZnkgZmlsZScgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiBIOmgvZS9sL2xvID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworIyMjCisjIyMgc2VyaWVzIEkKKyMjIworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9leHBvcnQtYm91bmRhcnkKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAord2UgaGF2ZSBhIGJvcmRlci4gIGl0cyBvbmx5IDQwIGNoYXJhY3RlcnMgd2lkZS4KK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvYnJhbmNoCisKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0k6IGV4cG9ydC1wYWNrLWVkZ2VzJyBcCisgICAgJ2dpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1wYWNrLWVkZ2VzPWVkZ2VzLmxpc3QgPGlucHV0JworCitjYXQgPmV4cGVjdCA8PEVPRgorLmdpdC9vYmplY3RzL3BhY2svcGFjay0ucGFjazogYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgZXhwb3J0LWJvdW5kYXJ5YAorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknSTogdmVyaWZ5IGVkZ2UgbGlzdCcgXAorCSdzZWQgLWUgcy9wYWNrLS4qcGFjay9wYWNrLS5wYWNrLyBlZGdlcy5saXN0ID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworIyMjCisjIyMgc2VyaWVzIEoKKyMjIworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9KCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NyZWF0ZSBKCitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaAorCityZXNldCByZWZzL2hlYWRzL0oKKworY29tbWl0IHJlZnMvaGVhZHMvSgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitpbml0aWFsaXplIEoKK0NPTU1JVAorCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdKOiByZXNldCBleGlzdGluZyBicmFuY2ggY3JlYXRlcyBlbXB0eSBjb21taXQnIFwKKyAgICAnZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCcKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdKOiBicmFuY2ggaGFzIDEgY29tbWl0LCBlbXB0eSB0cmVlJyBcCisJJ3Rlc3QgMSA9IGBnaXQgcmV2LWxpc3QgSiB8IHdjIC1sYCAmJgorCSB0ZXN0IDAgPSBgZ2l0IGxzLXRyZWUgSiB8IHdjIC1sYCcKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorcmVzZXQgcmVmcy9oZWFkcy9KMgorCit0YWcgd3JvbmdfdGFnCitmcm9tIHJlZnMvaGVhZHMvSjIKK2RhdGEgPDxFT0YKK1RhZyBicmFuY2ggdGhhdCB3YXMgcmVzZXQuCitFT0YKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ0o6IHRhZyBtdXN0IGZhaWwgb24gZW1wdHkgYnJhbmNoJyBcCisJJ3Rlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQnCisjIyMKKyMjIyBzZXJpZXMgSworIyMjCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL0sKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY3JlYXRlIEsKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvYnJhbmNoCisKK2NvbW1pdCByZWZzL2hlYWRzL0sKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorcmVkbyBLCitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4xCisKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ0s6IHJlaW5pdCBicmFuY2ggd2l0aCBmcm9tJyBcCisgICAgJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQnCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnSzogdmVyaWZ5IEteMSA9IGJyYW5jaF4xJyBcCisgICAgJ3Rlc3QgYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgYnJhbmNoXjFgIFwKKwkJPSBgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBLXjFgJworCisjIyMKKyMjIyBzZXJpZXMgTAorIyMjCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2Jsb2IKK21hcmsgOjEKK2RhdGEgPDxFT0YKK3NvbWUgZGF0YQorRU9GCisKK2Jsb2IKK21hcmsgOjIKK2RhdGEgPDxFT0YKK290aGVyIGRhdGEKK0VPRgorCitjb21taXQgcmVmcy9oZWFkcy9MCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NyZWF0ZSBMCitDT01NSVQKKworTSA2NDQgOjEgYi4KK00gNjQ0IDoxIGIvb3RoZXIKK00gNjQ0IDoxIGJhCisKK2NvbW1pdCByZWZzL2hlYWRzL0wKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAordXBkYXRlIEwKK0NPTU1JVAorCitNIDY0NCA6MiBiLgorTSA2NDQgOjIgYi9vdGhlcgorTSA2NDQgOjIgYmEKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKzoxMDA2NDQgMTAwNjQ0IDQyNjg2MzIuLi4gNTVkM2E1Mi4uLiBNCWIuCis6MDQwMDAwIDA0MDAwMCAwYWU1Y2FjLi4uIDQ0M2M3NjguLi4gTQliCis6MTAwNjQ0IDEwMDY0NCA0MjY4NjMyLi4uIDU1ZDNhNTIuLi4gTQliYQorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnTDogdmVyaWZ5IGludGVybmFsIHRyZWUgc29ydGluZycgXAorCSdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCBkaWZmLXRyZWUgLS1hYmJyZXYgLS1yYXcgTF4gTCA+b3V0cHV0ICYmCisJIHRlc3RfY21wIGV4cGVjdCBvdXRwdXQnCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2Jsb2IKK21hcmsgOjEKK2RhdGEgPDxFT0YKK3RoZSBkYXRhCitFT0YKKworY29tbWl0IHJlZnMvaGVhZHMvTDIKK2NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExMTI5MTI0NzMgLTA3MDAKK2RhdGEgPDxDT01NSVQKK2luaXQgTDIKK0NPTU1JVAorTSA2NDQgOjEgYS9iL2MKK00gNjQ0IDoxIGEvYi9kCitNIDY0NCA6MSBhL2UvZgorCitjb21taXQgcmVmcy9oZWFkcy9MMgorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjQ3MyAtMDcwMAorZGF0YSA8PENPTU1JVAordXBkYXRlIEwyCitDT01NSVQKK0MgYSBnCitDIGEvZSBnL2IKK00gNjQ0IDoxIGcvYi9oCitJTlBVVF9FTkQKKworY2F0IDw8RU9GID5leHBlY3QKK2cvYi9mCitnL2IvaAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdMOiBuZXN0ZWQgdHJlZSBjb3B5IGRvZXMgbm90IGNvcnJ1cHQgZGVsdGFzJyBcCisJJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgbHMtdHJlZSBMMiBnL2IvID50bXAgJiYKKwljYXQgdG1wIHwgY3V0IC1mIDIgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwgJiYKKwlnaXQgZnNjayBgZ2l0IHJldi1wYXJzZSBMMmAnCisKK2dpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvTDIKKworIyMjCisjIyMgc2VyaWVzIE0KKyMjIworCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL00xCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2ZpbGUgcmVuYW1lCitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCitSIGZpbGUyL25ld2YgZmlsZTIvbi5lLncuZgorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFT0YKKzoxMDA3NTUgMTAwNzU1IGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBSMTAwCWZpbGUyL25ld2YJZmlsZTIvbi5lLncuZgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknTTogcmVuYW1lIGZpbGUgaW4gc2FtZSBzdWJkaXJlY3RvcnknIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgZGlmZi10cmVlIC1NIC1yIE0xXiBNMSA+YWN0dWFsICYmCisJIGNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvTTIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZmlsZSByZW5hbWUKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKK1IgZmlsZTIvbmV3ZiBpL2FtL25ldy90by95b3UKKworSU5QVVRfRU5ECisKK2NhdCA+ZXhwZWN0IDw8RU9GCis6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgUjEwMAlmaWxlMi9uZXdmCWkvYW0vbmV3L3RvL3lvdQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknTTogcmVuYW1lIGZpbGUgdG8gbmV3IHN1YmRpcmVjdG9yeScgXAorCSdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCBkaWZmLXRyZWUgLU0gLXIgTTJeIE0yID5hY3R1YWwgJiYKKwkgY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsJworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9NMworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmaWxlIHJlbmFtZQorQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9NMl4wCitSIGkgb3RoZXIvc3ViCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVPRgorOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIFIxMDAJaS9hbS9uZXcvdG8veW91CW90aGVyL3N1Yi9hbS9uZXcvdG8veW91CitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdNOiByZW5hbWUgc3ViZGlyZWN0b3J5IHRvIG5ldyBzdWJkaXJlY3RvcnknIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgZGlmZi10cmVlIC1NIC1yIE0zXiBNMyA+YWN0dWFsICYmCisJIGNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvTTQKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorcmVuYW1lIHJvb3QKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvTTJeMAorUiAiIiBzdWIKKworSU5QVVRfRU5ECisKK2NhdCA+ZXhwZWN0IDw8RU9GCis6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgUjEwMAlmaWxlMi9vbGRmCXN1Yi9maWxlMi9vbGRmCis6MTAwNzU1IDEwMDc1NSA4NWRmNTA3ODVkNjJkM2IwNWFiMDNkOWNiZjdlNGEwYjQ5NDQ5NzMwIDg1ZGY1MDc4NWQ2MmQzYjA1YWIwM2Q5Y2JmN2U0YTBiNDk0NDk3MzAgUjEwMAlmaWxlNAlzdWIvZmlsZTQKKzoxMDA3NTUgMTAwNzU1IGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBSMTAwCWkvYW0vbmV3L3RvL3lvdQlzdWIvaS9hbS9uZXcvdG8veW91Cis6MTAwNzU1IDEwMDc1NSBlNzRiN2Q0NjVlNTI3NDZiZTJiNGJhZTk4MzY3MDcxMWU2ZTY2NjU3IGU3NGI3ZDQ2NWU1Mjc0NmJlMmI0YmFlOTgzNjcwNzExZTZlNjY2NTcgUjEwMAluZXdkaXIvZXhlYy5zaAlzdWIvbmV3ZGlyL2V4ZWMuc2gKKzoxMDA2NDQgMTAwNjQ0IGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgZmNmNzc4Y2RhMTgxZWFhMWNiYzllOWNlM2EyZTE1ZWU5ZjlmZTc5MSBSMTAwCW5ld2Rpci9pbnRlcmVzdGluZwlzdWIvbmV3ZGlyL2ludGVyZXN0aW5nCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdNOiByZW5hbWUgcm9vdCB0byBzdWJkaXJlY3RvcnknIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgZGlmZi10cmVlIC1NIC1yIE00XiBNNCA+YWN0dWFsICYmCisJIGNhdCBhY3R1YWwgJiYKKwkgY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsJworCisjIyMKKyMjIyBzZXJpZXMgTgorIyMjCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvTjEKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZmlsZSBjb3B5CitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCitDIGZpbGUyL25ld2YgZmlsZTIvbi5lLncuZgorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFT0YKKzoxMDA3NTUgMTAwNzU1IGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBDMTAwCWZpbGUyL25ld2YJZmlsZTIvbi5lLncuZgorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknTjogY29weSBmaWxlIGluIHNhbWUgc3ViZGlyZWN0b3J5JyBcCisJJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtciBOMV4gTjEgPmFjdHVhbCAmJgorCSBjb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL04yCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NsZWFuIGRpcmVjdG9yeSBjb3B5CitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCitDIGZpbGUyIGZpbGUzCisKK2NvbW1pdCByZWZzL2hlYWRzL04yCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK21vZGlmeSBkaXJlY3RvcnkgY29weQorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmaWxlMy9maWxlNQorZGF0YSA8PEVPRgorJGZpbGU1X2RhdGEKK0VPRgorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFT0YKKzoxMDA2NDQgMTAwNjQ0IGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgZmNmNzc4Y2RhMTgxZWFhMWNiYzllOWNlM2EyZTE1ZWU5ZjlmZTc5MSBDMTAwCW5ld2Rpci9pbnRlcmVzdGluZwlmaWxlMy9maWxlNQorOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIEMxMDAJZmlsZTIvbmV3ZglmaWxlMy9uZXdmCis6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgQzEwMAlmaWxlMi9vbGRmCWZpbGUzL29sZGYKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IGNvcHkgdGhlbiBtb2RpZnkgc3ViZGlyZWN0b3J5JyBcCisJJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtciBOMl5eIE4yID5hY3R1YWwgJiYKKwkgY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsJworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9OMworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitkaXJ0eSBkaXJlY3RvcnkgY29weQorQ09NTUlUCisKK2Zyb20gcmVmcy9oZWFkcy9icmFuY2heMAorTSA2NDQgaW5saW5lIGZpbGUyL2ZpbGU1CitkYXRhIDw8RU9GCiskZmlsZTVfZGF0YQorRU9GCisKK0MgZmlsZTIgZmlsZTMKK0QgZmlsZTIvZmlsZTUKKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdOOiBjb3B5IGRpcnR5IHN1YmRpcmVjdG9yeScgXAorCSdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIHRlc3QgYGdpdCByZXYtcGFyc2UgTjJee3RyZWV9YCA9IGBnaXQgcmV2LXBhcnNlIE4zXnt0cmVlfWAnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdOOiBjb3B5IGRpcmVjdG9yeSBieSBpZCcgXAorCSdjYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIEMxMDAJZmlsZTIvbmV3ZglmaWxlMy9uZXdmCisJOjEwMDY0NCAxMDA2NDQgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIEMxMDAJZmlsZTIvb2xkZglmaWxlMy9vbGRmCisJRU9GCisJIHN1YmRpcj0kKGdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9icmFuY2heMDpmaWxlMikgJiYKKwkgY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9ONAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb3B5IGJ5IHRyZWUgaGFzaAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJTSAwNDAwMDAgJHN1YmRpciBmaWxlMworCUlOUFVUX0VORAorCSBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgTjReIE40ID5hY3R1YWwgJiYKKwkgY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBJUEUgJ046IHJlYWQgYW5kIGNvcHkgZGlyZWN0b3J5JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCToxMDA3NTUgMTAwNzU1IGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBDMTAwCWZpbGUyL25ld2YJZmlsZTMvbmV3ZgorCToxMDA2NDQgMTAwNjQ0IDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgNzEyM2Y3ZjQ0ZTM5YmUxMjdjNWViNzAxZTU5NjgxNzZlZTlkNzhiMSBDMTAwCWZpbGUyL29sZGYJZmlsZTMvb2xkZgorCUVPRgorCWdpdCB1cGRhdGUtcmVmIC1kIHJlZnMvaGVhZHMvTjQgJiYKKwlybSAtZiBiYWNrZmxvdyAmJgorCW1rZmlmbyBiYWNrZmxvdyAmJgorCSgKKwkJZXhlYyA8YmFja2Zsb3cgJiYKKwkJY2F0IDw8LUVPRiAmJgorCQljb21taXQgcmVmcy9oZWFkcy9ONAorCQljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwkJZGF0YSA8PENPTU1JVAorCQljb3B5IGJ5IHRyZWUgaGFzaCwgcGFydCAyCisJCUNPTU1JVAorCisJCWZyb20gcmVmcy9oZWFkcy9icmFuY2heMAorCQlscyAiZmlsZTIiCisJCUVPRgorCQlyZWFkIG1vZGUgdHlwZSB0cmVlIGZpbGVuYW1lICYmCisJCWVjaG8gIk0gMDQwMDAwICR0cmVlIGZpbGUzIgorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTMgMz5iYWNrZmxvdyAmJgorCWdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgTjReIE40ID5hY3R1YWwgJiYKKwljb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdOOiBlbXB0eSBkaXJlY3RvcnkgcmVhZHMgYXMgbWlzc2luZycgJworCWNhdCA8PC1cRU9GID5leHBlY3QgJiYKKwlPQkpOQU1FCisJOjAwMDAwMCAxMDA2NDQgT0JKTkFNRSBPQkpOQU1FIEEJdW5yZWxhdGVkCisJRU9GCisJZWNobyAibWlzc2luZyBzcmMiID5leHBlY3QucmVzcG9uc2UgJiYKKwlnaXQgdXBkYXRlLXJlZiAtZCByZWZzL2hlYWRzL3JlYWQtZW1wdHkgJiYKKwlybSAtZiBiYWNrZmxvdyAmJgorCW1rZmlmbyBiYWNrZmxvdyAmJgorCSgKKwkJZXhlYyA8YmFja2Zsb3cgJiYKKwkJY2F0IDw8LUVPRiAmJgorCQljb21taXQgcmVmcy9oZWFkcy9yZWFkLWVtcHR5CisJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQlkYXRhIDw8Q09NTUlUCisJCXJlYWQgImVtcHR5IiAobWlzc2luZykgZGlyZWN0b3J5CisJCUNPTU1JVAorCisJCU0gMTAwNjQ0IGlubGluZSBzcmMvZ3JlZXRpbmcKKwkJZGF0YSA8PEJMT0IKKwkJaGVsbG8KKwkJQkxPQgorCQlDIHNyYy9ncmVldGluZyBkc3QxL25vbi1ncmVldGluZworCQlDIHNyYy9ncmVldGluZyB1bnJlbGF0ZWQKKwkJIyBsZWF2ZSBiZWhpbmQgImVtcHR5IiBzcmMgZGlyZWN0b3J5CisJCUQgc3JjL2dyZWV0aW5nCisJCWxzICJzcmMiCisJCUVPRgorCQlyZWFkIC1yIGxpbmUgJiYKKwkJcHJpbnRmICIlc1xuIiAiJGxpbmUiID5yZXNwb25zZSAmJgorCQljYXQgPDwtXEVPRgorCQlEIGRzdDEKKwkJRCBkc3QyCisJCUVPRgorCSkgfAorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTMgMz5iYWNrZmxvdyAmJgorCXRlc3RfY21wIGV4cGVjdC5yZXNwb25zZSByZXNwb25zZSAmJgorCWdpdCByZXYtbGlzdCByZWFkLWVtcHR5IHwKKwlnaXQgZGlmZi10cmVlIC1yIC0tcm9vdCAtLXN0ZGluIHwKKwlzZWQgInMvJF94NDAvT0JKTkFNRS9nIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknTjogY29weSByb290IGRpcmVjdG9yeSBieSB0cmVlIGhhc2gnIFwKKwknY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCToxMDA3NTUgMDAwMDAwIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWZpbGUzL25ld2YKKwk6MTAwNjQ0IDAwMDAwMCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgRAlmaWxlMy9vbGRmCisJRU9GCisJIHJvb3Q9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvYnJhbmNoXjBee3RyZWV9KSAmJgorCSBjYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL042CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgcm9vdCBkaXJlY3RvcnkgYnkgdHJlZSBoYXNoCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDA0MDAwMCAkcm9vdCAiIgorCUlOUFVUX0VORAorCSBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgTjQgTjYgPmFjdHVhbCAmJgorCSBjb21wYXJlX2RpZmZfcmF3IGV4cGVjdCBhY3R1YWwnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdOOiBjb3B5IHJvb3QgYnkgcGF0aCcgXAorCSdjYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJOjEwMDc1NSAxMDA3NTUgZjFmYjVkYTcxODM5MjY5NGQwMDc2ZDY3N2Q2ZDBlMzY0Yzc5YjBiYyBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIEMxMDAJZmlsZTIvbmV3ZglvbGRyb290L2ZpbGUyL25ld2YKKwk6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgQzEwMAlmaWxlMi9vbGRmCW9sZHJvb3QvZmlsZTIvb2xkZgorCToxMDA3NTUgMTAwNzU1IDg1ZGY1MDc4NWQ2MmQzYjA1YWIwM2Q5Y2JmN2U0YTBiNDk0NDk3MzAgODVkZjUwNzg1ZDYyZDNiMDVhYjAzZDljYmY3ZTRhMGI0OTQ0OTczMCBDMTAwCWZpbGU0CW9sZHJvb3QvZmlsZTQKKwk6MTAwNzU1IDEwMDc1NSBlNzRiN2Q0NjVlNTI3NDZiZTJiNGJhZTk4MzY3MDcxMWU2ZTY2NjU3IGU3NGI3ZDQ2NWU1Mjc0NmJlMmI0YmFlOTgzNjcwNzExZTZlNjY2NTcgQzEwMAluZXdkaXIvZXhlYy5zaAlvbGRyb290L25ld2Rpci9leGVjLnNoCisJOjEwMDY0NCAxMDA2NDQgZmNmNzc4Y2RhMTgxZWFhMWNiYzllOWNlM2EyZTE1ZWU5ZjlmZTc5MSBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIEMxMDAJbmV3ZGlyL2ludGVyZXN0aW5nCW9sZHJvb3QvbmV3ZGlyL2ludGVyZXN0aW5nCisJRU9GCisJIGNhdCA+aW5wdXQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTi1jb3B5LXJvb3QtcGF0aAorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb3B5IHJvb3QgZGlyZWN0b3J5IGJ5IChlbXB0eSkgcGF0aAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJQyAiIiBvbGRyb290CisJSU5QVVRfRU5ECisJIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgZ2l0IGRpZmYtdHJlZSAtQyAtLWZpbmQtY29waWVzLWhhcmRlciAtciBicmFuY2ggTi1jb3B5LXJvb3QtcGF0aCA+YWN0dWFsICYmCisJIGNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IGRlbGV0ZSBkaXJlY3RvcnkgYnkgY29weWluZycgXAorCSdjYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJT0JKSUQKKwk6MTAwNjQ0IDAwMDAwMCBPQkpJRCBPQkpJRCBECWZvby9iYXIvcXV4CisJT0JKSUQKKwk6MDAwMDAwIDEwMDY0NCBPQkpJRCBPQkpJRCBBCWZvby9iYXIvYmF6CisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQlmb28vYmFyL3F1eAorCUVPRgorCSBlbXB0eV90cmVlPSQoZ2l0IG1rdHJlZSA8L2Rldi9udWxsKSAmJgorCSBjYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL04tZGVsZXRlCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbGxlY3QgZGF0YSB0byBiZSBkZWxldGVkCisJQ09NTUlUCisKKwlkZWxldGVhbGwKKwlNIDEwMDY0NCBpbmxpbmUgZm9vL2Jhci9iYXoKKwlkYXRhIDw8REFUQV9FTkQKKwloZWxsbworCURBVEFfRU5ECisJQyAiZm9vL2Jhci9iYXoiICJmb28vYmFyL3F1eCIKKwlDICJmb28vYmFyL2JheiIgImZvby9iYXIvcXV1eC8xIgorCUMgImZvby9iYXIvYmF6IiAiZm9vL2Jhci9xdXV1eCIKKwlNIDA0MDAwMCAkZW1wdHlfdHJlZSBmb28vYmFyL3F1dXgKKwlNIDA0MDAwMCAkZW1wdHlfdHJlZSBmb28vYmFyL3F1dXV4CisKKwljb21taXQgcmVmcy9oZWFkcy9OLWRlbGV0ZQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlkZWxldGUgc3ViZGlyZWN0b3J5CisJQ09NTUlUCisKKwlNIDA0MDAwMCAkZW1wdHlfdHJlZSBmb28vYmFyL3F1eAorCUlOUFVUX0VORAorCSBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCByZXYtbGlzdCBOLWRlbGV0ZSB8CisJCWdpdCBkaWZmLXRyZWUgLXIgLS1zdGRpbiAtLXJvb3QgLS1hbHdheXMgfAorCQlzZWQgLWUgInMvJF94NDAvT0JKSUQvZyIgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknTjogbW9kaWZ5IGNvcGllZCB0cmVlJyBcCisJJ2NhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwk6MTAwNjQ0IDEwMDY0NCBmY2Y3NzhjZGExODFlYWExY2JjOWU5Y2UzYTJlMTVlZTlmOWZlNzkxIGZjZjc3OGNkYTE4MWVhYTFjYmM5ZTljZTNhMmUxNWVlOWY5ZmU3OTEgQzEwMAluZXdkaXIvaW50ZXJlc3RpbmcJZmlsZTMvZmlsZTUKKwk6MTAwNzU1IDEwMDc1NSBmMWZiNWRhNzE4MzkyNjk0ZDAwNzZkNjc3ZDZkMGUzNjRjNzliMGJjIGYxZmI1ZGE3MTgzOTI2OTRkMDA3NmQ2NzdkNmQwZTM2NGM3OWIwYmMgQzEwMAlmaWxlMi9uZXdmCWZpbGUzL25ld2YKKwk6MTAwNjQ0IDEwMDY0NCA3MTIzZjdmNDRlMzliZTEyN2M1ZWI3MDFlNTk2ODE3NmVlOWQ3OGIxIDcxMjNmN2Y0NGUzOWJlMTI3YzVlYjcwMWU1OTY4MTc2ZWU5ZDc4YjEgQzEwMAlmaWxlMi9vbGRmCWZpbGUzL29sZGYKKwlFT0YKKwkgc3ViZGlyPSQoZ2l0IHJldi1wYXJzZSByZWZzL2hlYWRzL2JyYW5jaF4wOmZpbGUyKSAmJgorCSBjYXQgPmlucHV0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL041CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgYnkgdHJlZSBoYXNoCisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDA0MDAwMCAkc3ViZGlyIGZpbGUzCisKKwljb21taXQgcmVmcy9oZWFkcy9ONQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwltb2RpZnkgZGlyZWN0b3J5IGNvcHkKKwlDT01NSVQKKworCU0gNjQ0IGlubGluZSBmaWxlMy9maWxlNQorCWRhdGEgPDxFT0YKKwkkZmlsZTVfZGF0YQorCUVPRgorCUlOUFVUX0VORAorCSBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCBkaWZmLXRyZWUgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgLXIgTjVeXiBONSA+YWN0dWFsICYmCisJIGNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IHJlamVjdCBmb28vIHN5bnRheCcgXAorCSdzdWJkaXI9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvYnJhbmNoXjA6ZmlsZTIpICYmCisJIHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8PC1JTlBVVF9FTkQKKwljb21taXQgcmVmcy9oZWFkcy9ONUIKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29weSB3aXRoIGludmFsaWQgc3ludGF4CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlNIDA0MDAwMCAkc3ViZGlyIGZpbGUzLworCUlOUFVUX0VORCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IHJlamVjdCBmb28vIHN5bnRheCBpbiBjb3B5IHNvdXJjZScgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5ECisJY29tbWl0IHJlZnMvaGVhZHMvTjVDCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgd2l0aCBpbnZhbGlkIHN5bnRheAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJQyBmaWxlMi8gZmlsZTMKKwlJTlBVVF9FTkQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdOOiByZWplY3QgZm9vLyBzeW50YXggaW4gcmVuYW1lIHNvdXJjZScgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5ECisJY29tbWl0IHJlZnMvaGVhZHMvTjVECisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCXJlbmFtZSB3aXRoIGludmFsaWQgc3ludGF4CisJQ09NTUlUCisKKwlmcm9tIHJlZnMvaGVhZHMvYnJhbmNoXjAKKwlSIGZpbGUyLyBmaWxlMworCUlOUFVUX0VORCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IHJlamVjdCBmb28vIHN5bnRheCBpbiBscyBhcmd1bWVudCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5ECisJY29tbWl0IHJlZnMvaGVhZHMvTjVFCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgd2l0aCBpbnZhbGlkIHN5bnRheAorCUNPTU1JVAorCisJZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisJbHMgImZpbGUyLyIKKwlJTlBVVF9FTkQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdOOiBjb3B5IHRvIHJvb3QgYnkgaWQgYW5kIG1vZGlmeScgXAorCSdlY2hvICJoZWxsbywgd29ybGQiID5leHBlY3QuZm9vICYmCisJIGVjaG8gaGVsbG8gPmV4cGVjdC5iYXIgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0IDw8LVNFVFVQX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL043CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWhlbGxvLCB0cmVlCisJQ09NTUlUCisKKwlkZWxldGVhbGwKKwlNIDY0NCBpbmxpbmUgZm9vL2JhcgorCWRhdGEgPDxFT0YKKwloZWxsbworCUVPRgorCVNFVFVQX0VORAorCisJIHRyZWU9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IE43OikgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0IDw8LUlOUFVUX0VORCAmJgorCWNvbW1pdCByZWZzL2hlYWRzL044CisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgdG8gcm9vdCBieSBpZCBhbmQgbW9kaWZ5CisJQ09NTUlUCisKKwlNIDA0MDAwMCAkdHJlZSAiIgorCU0gNjQ0IGlubGluZSBmb28vZm9vCisJZGF0YSA8PEVPRgorCWhlbGxvLCB3b3JsZAorCUVPRgorCUlOUFVUX0VORAorCSBnaXQgc2hvdyBOODpmb28vZm9vID5hY3R1YWwuZm9vICYmCisJIGdpdCBzaG93IE44OmZvby9iYXIgPmFjdHVhbC5iYXIgJiYKKwkgdGVzdF9jbXAgZXhwZWN0LmZvbyBhY3R1YWwuZm9vICYmCisJIHRlc3RfY21wIGV4cGVjdC5iYXIgYWN0dWFsLmJhcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ046IGV4dHJhY3Qgc3VidHJlZScgXAorCSdicmFuY2g9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvYnJhbmNoXnt0cmVlfSkgJiYKKwkgY2F0ID5pbnB1dCA8PC1JTlBVVF9FTkQgJiYKKwljb21taXQgcmVmcy9oZWFkcy9OOQorCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwlleHRyYWN0IHN1YnRyZWUgYnJhbmNoOm5ld2RpcgorCUNPTU1JVAorCisJTSAwNDAwMDAgJGJyYW5jaCAiIgorCUMgIm5ld2RpciIgIiIKKwlJTlBVVF9FTkQKKwkgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgZGlmZiAtLWV4aXQtY29kZSBicmFuY2g6bmV3ZGlyIE45JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknTjogbW9kaWZ5IHN1YnRyZWUsIGV4dHJhY3QgaXQsIGFuZCBtb2RpZnkgYWdhaW4nIFwKKwknZWNobyBoZWxsbyA+ZXhwZWN0LmJheiAmJgorCSBlY2hvIGhlbGxvLCB3b3JsZCA+ZXhwZWN0LnF1eCAmJgorCSBnaXQgZmFzdC1pbXBvcnQgPDwtU0VUVVBfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjEwCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWhlbGxvLCB0cmVlCisJQ09NTUlUCisKKwlkZWxldGVhbGwKKwlNIDY0NCBpbmxpbmUgZm9vL2Jhci9iYXoKKwlkYXRhIDw8RU9GCisJaGVsbG8KKwlFT0YKKwlTRVRVUF9FTkQKKworCSB0cmVlPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBOMTA6KSAmJgorCSBnaXQgZmFzdC1pbXBvcnQgPDwtSU5QVVRfRU5EICYmCisJY29tbWl0IHJlZnMvaGVhZHMvTjExCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvcHkgdG8gcm9vdCBieSBpZCBhbmQgbW9kaWZ5CisJQ09NTUlUCisKKwlNIDA0MDAwMCAkdHJlZSAiIgorCU0gMTAwNjQ0IGlubGluZSBmb28vYmFyL3F1eAorCWRhdGEgPDxFT0YKKwloZWxsbywgd29ybGQKKwlFT0YKKwlSICJmb28iICIiCisJQyAiYmFyL3F1eCIgImJhci9xdXV4IgorCUlOUFVUX0VORAorCSBnaXQgc2hvdyBOMTE6YmFyL2JheiA+YWN0dWFsLmJheiAmJgorCSBnaXQgc2hvdyBOMTE6YmFyL3F1eCA+YWN0dWFsLnF1eCAmJgorCSBnaXQgc2hvdyBOMTE6YmFyL3F1dXggPmFjdHVhbC5xdXV4ICYmCisJIHRlc3RfY21wIGV4cGVjdC5iYXogYWN0dWFsLmJheiAmJgorCSB0ZXN0X2NtcCBleHBlY3QucXV4IGFjdHVhbC5xdXggJiYKKwkgdGVzdF9jbXAgZXhwZWN0LnF1eCBhY3R1YWwucXV1eCcKKworIyMjCisjIyMgc2VyaWVzIE8KKyMjIworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECisjd2Ugd2lsbAorY29tbWl0IHJlZnMvaGVhZHMvTzEKKyMgLS0gaWdub3JlIGFsbCBvZiB0aGlzIHRleHQKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorIyAkR0lUX0NPTU1JVFRFUl9OQU1FIGhhcyBpbnNlcnRlZCBoZXJlIGZvciBoaXMgYmVuZWZpdC4KK2RhdGEgPDxDT01NSVQKK2RpcnR5IGRpcmVjdG9yeSBjb3B5CitDT01NSVQKKworIyBkb24ndCBmb3JnZXQgdGhlIGltcG9ydCBibGFuayBsaW5lIQorIworIyB5ZXMsIHdlIHN0YXJ0ZWQgZnJvbSBvdXIgdXN1YWwgYmFzZSBvZiBicmFuY2heMC4KKyMgaSBsaWtlIGJyYW5jaF4wLgorZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCisjIGFuZCB3ZSBuZWVkIHRvIHJldXNlIGZpbGUyL2ZpbGU1IGZyb20gTjMgYWJvdmUuCitNIDY0NCBpbmxpbmUgZmlsZTIvZmlsZTUKKyMgb3RoZXJ3aXNlIHRoZSB0cmVlIHdpbGwgYmUgZGlmZmVyZW50CitkYXRhIDw8RU9GCiskZmlsZTVfZGF0YQorRU9GCisKKyMgZG9uJ3QgZm9yZ2V0IHRvIGNvcHkgZmlsZTIgdG8gZmlsZTMKK0MgZmlsZTIgZmlsZTMKKyMKKyMgb3IgdG8gZGVsZXRlIGZpbGU1IGZyb20gZmlsZTIuCitEIGZpbGUyL2ZpbGU1CisjIGFyZSB3ZSBkb25lIHlldD8KKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdPOiBjb21tZW50cyBhcmUgYWxsIHNraXBwZWQnIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSB0ZXN0IGBnaXQgcmV2LXBhcnNlIE4zYCA9IGBnaXQgcmV2LXBhcnNlIE8xYCcKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvTzIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZGlydHkgZGlyZWN0b3J5IGNvcHkKK0NPTU1JVAorZnJvbSByZWZzL2hlYWRzL2JyYW5jaF4wCitNIDY0NCBpbmxpbmUgZmlsZTIvZmlsZTUKK2RhdGEgPDxFT0YKKyRmaWxlNV9kYXRhCitFT0YKK0MgZmlsZTIgZmlsZTMKK0QgZmlsZTIvZmlsZTUKKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdPOiBibGFuayBsaW5lcyBub3QgbmVjZXNzYXJ5IGFmdGVyIGRhdGEgY29tbWFuZHMnIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSB0ZXN0IGBnaXQgcmV2LXBhcnNlIE4zYCA9IGBnaXQgcmV2LXBhcnNlIE8yYCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ086IHJlcGFjayBiZWZvcmUgbmV4dCB0ZXN0JyBcCisJJ2dpdCByZXBhY2sgLWEgLWQnCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL08zCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3pzdHJpbmcKK0NPTU1JVAorY29tbWl0IHJlZnMvaGVhZHMvTzMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorem9mCitDT01NSVQKK2NoZWNrcG9pbnQKK2NvbW1pdCByZWZzL2hlYWRzL08zCittYXJrIDo1Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3plbXB0eQorQ09NTUlUCitjaGVja3BvaW50Citjb21taXQgcmVmcy9oZWFkcy9PMworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCit6Y29tbWl0cworQ09NTUlUCityZXNldCByZWZzL3RhZ3MvTzMtMm5kCitmcm9tIDo1CityZXNldCByZWZzL3RhZ3MvTzMtM3JkCitmcm9tIDo1CitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxJTlBVVF9FTkQKK3N0cmluZworb2YKK2VtcHR5Citjb21taXRzCitJTlBVVF9FTkQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdPOiBibGFuayBsaW5lcyBub3QgbmVjZXNzYXJ5IGFmdGVyIG90aGVyIGNvbW1hbmRzJyBcCisJJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwkgdGVzdCA4ID0gYGZpbmQgLmdpdC9vYmplY3RzL3BhY2sgLXR5cGUgZiB8IHdjIC1sYCAmJgorCSB0ZXN0IGBnaXQgcmV2LXBhcnNlIHJlZnMvdGFncy9PMy0ybmRgID0gYGdpdCByZXYtcGFyc2UgTzNeYCAmJgorCSBnaXQgbG9nIC0tcmV2ZXJzZSAtLXByZXR0eT1vbmVsaW5lIE8zIHwgc2VkIHMvXi4qei8vID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvTzQKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorenN0cmluZworQ09NTUlUCitjb21taXQgcmVmcy9oZWFkcy9PNAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCit6b2YKK0NPTU1JVAorcHJvZ3Jlc3MgVHdvIGNvbW1pdHMgZG93biwgMiB0byBnbyEKK2NvbW1pdCByZWZzL2hlYWRzL080Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3plbXB0eQorQ09NTUlUCitwcm9ncmVzcyBUaHJlZSBjb21taXRzIGRvd24sIDEgdG8gZ28hCitjb21taXQgcmVmcy9oZWFkcy9PNAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCit6Y29tbWl0cworQ09NTUlUCitwcm9ncmVzcyBJJ20gZG9uZSEKK0lOUFVUX0VORAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ086IHByb2dyZXNzIG91dHB1dHMgYXMgcmVxdWVzdGVkIGJ5IGlucHV0JyBcCisJJ2dpdCBmYXN0LWltcG9ydCA8aW5wdXQgPmFjdHVhbCAmJgorCSBncmVwICJwcm9ncmVzcyAiIDxpbnB1dCA+ZXhwZWN0ICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKKyMjIworIyMjIHNlcmllcyBQIChnaXRsaW5rcykKKyMjIworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitibG9iCittYXJrIDoxCitkYXRhIDEwCit0ZXN0IGZpbGUKKworcmVzZXQgcmVmcy9oZWFkcy9zdWIKK2NvbW1pdCByZWZzL2hlYWRzL3N1YgorbWFyayA6MgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDEyCitzdWJfaW5pdGlhbAorTSAxMDA2NDQgOjEgZmlsZQorCitibG9iCittYXJrIDozCitkYXRhIDw8REFUQUVORAorW3N1Ym1vZHVsZSAic3ViIl0KKwlwYXRoID0gc3ViCisJdXJsID0gImBwd2RgL3N1YiIKK0RBVEFFTkQKKworY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMQorbWFyayA6NAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDgKK2luaXRpYWwKK2Zyb20gcmVmcy9oZWFkcy9tYXN0ZXIKK00gMTAwNjQ0IDozIC5naXRtb2R1bGVzCitNIDE2MDAwMCA6MiBzdWIKKworYmxvYgorbWFyayA6NQorZGF0YSAyMAordGVzdCBmaWxlCittb3JlIGRhdGEKKworY29tbWl0IHJlZnMvaGVhZHMvc3ViCittYXJrIDo2Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgMTEKK3N1Yl9zZWNvbmQKK2Zyb20gOjIKK00gMTAwNjQ0IDo1IGZpbGUKKworY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMQorbWFyayA6NworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDcKK3NlY29uZAorZnJvbSA6NAorTSAxNjAwMDAgOjYgc3ViCisKK0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUDogc3VwZXJwcm9qZWN0ICYgc3VibW9kdWxlIG1peCcgXAorCSdnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJIGdpdCBjaGVja291dCBzdWJ1c2UxICYmCisJIHJtIC1yZiBzdWIgJiYgbWtkaXIgc3ViICYmIChjZCBzdWIgJiYKKwkgZ2l0IGluaXQgJiYKKwkgZ2l0IGZldGNoIC0tdXBkYXRlLWhlYWQtb2sgLi4gcmVmcy9oZWFkcy9zdWI6cmVmcy9oZWFkcy9tYXN0ZXIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlcikgJiYKKwkgZ2l0IHN1Ym1vZHVsZSBpbml0ICYmCisJIGdpdCBzdWJtb2R1bGUgdXBkYXRlJworCitTVUJMQVNUPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWIpCitTVUJQUkVWPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWJeKQorCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitibG9iCittYXJrIDoxCitkYXRhIDw8REFUQUVORAorW3N1Ym1vZHVsZSAic3ViIl0KKwlwYXRoID0gc3ViCisJdXJsID0gImBwd2RgL3N1YiIKK0RBVEFFTkQKKworY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMgorbWFyayA6MgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDgKK2luaXRpYWwKK2Zyb20gcmVmcy9oZWFkcy9tYXN0ZXIKK00gMTAwNjQ0IDoxIC5naXRtb2R1bGVzCitNIDE2MDAwMCAkU1VCUFJFViBzdWIKKworY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMgorbWFyayA6MworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDcKK3NlY29uZAorZnJvbSA6MgorTSAxNjAwMDAgJFNVQkxBU1Qgc3ViCisKK0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUDogdmVyYmF0aW0gU0hBIGdpdGxpbmtzJyBcCisJJ2dpdCBicmFuY2ggLUQgc3ViICYmCisJIGdpdCBnYyAmJiBnaXQgcHJ1bmUgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSB0ZXN0ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWJ1c2UyKSA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBzdWJ1c2UxKScKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9zdWJ1c2UzCittYXJrIDoxCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvcnJ1cHQKK0NPTU1JVAorCitmcm9tIHJlZnMvaGVhZHMvc3VidXNlMgorTSAxNjAwMDAgaW5saW5lIHN1YgorZGF0YSA8PERBVEEKKyRTVUJQUkVWCitEQVRBCisKK0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQOiBmYWlsIG9uIGlubGluZSBnaXRsaW5rJyAnCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCcKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitibG9iCittYXJrIDoxCitkYXRhIDw8REFUQQorJFNVQlBSRVYKK0RBVEEKKworY29tbWl0IHJlZnMvaGVhZHMvc3VidXNlMworbWFyayA6MgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb3JydXB0CitDT01NSVQKKworZnJvbSByZWZzL2hlYWRzL3N1YnVzZTIKK00gMTYwMDAwIDoxIHN1YgorCitJTlBVVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUDogZmFpbCBvbiBibG9iIG1hcmsgaW4gZ2l0bGluaycgJworICAgIHRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQnCisKKyMjIworIyMjIHNlcmllcyBRIChub3RlcykKKyMjIworCitub3RlMV9kYXRhPSJUaGUgZmlyc3Qgbm90ZSBmb3IgdGhlIGZpcnN0IGNvbW1pdCIKK25vdGUyX2RhdGE9IlRoZSBmaXJzdCBub3RlIGZvciB0aGUgc2Vjb25kIGNvbW1pdCIKK25vdGUzX2RhdGE9IlRoZSBmaXJzdCBub3RlIGZvciB0aGUgdGhpcmQgY29tbWl0Igorbm90ZTFiX2RhdGE9IlRoZSBzZWNvbmQgbm90ZSBmb3IgdGhlIGZpcnN0IGNvbW1pdCIKK25vdGUxY19kYXRhPSJUaGUgdGhpcmQgbm90ZSBmb3IgdGhlIGZpcnN0IGNvbW1pdCIKK25vdGUyYl9kYXRhPSJUaGUgc2Vjb25kIG5vdGUgZm9yIHRoZSBzZWNvbmQgY29tbWl0IgorCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2Jsb2IKK21hcmsgOjIKK2RhdGEgPDxFT0YKKyRmaWxlMl9kYXRhCitFT0YKKworY29tbWl0IHJlZnMvaGVhZHMvbm90ZXMtdGVzdAorbWFyayA6MworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmaXJzdCAoOjMpCitDT01NSVQKKworTSA2NDQgOjIgZmlsZTIKKworYmxvYgorbWFyayA6NAorZGF0YSAkZmlsZTRfbGVuCiskZmlsZTRfZGF0YQorY29tbWl0IHJlZnMvaGVhZHMvbm90ZXMtdGVzdAorbWFyayA6NQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitzZWNvbmQgKDo1KQorQ09NTUlUCisKK00gNjQ0IDo0IGZpbGU0CisKK2NvbW1pdCByZWZzL2hlYWRzL25vdGVzLXRlc3QKK21hcmsgOjYKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAordGhpcmQgKDo2KQorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmaWxlNQorZGF0YSA8PEVPRgorJGZpbGU1X2RhdGEKK0VPRgorCitNIDc1NSBpbmxpbmUgZmlsZTYKK2RhdGEgPDxFT0YKKyRmaWxlNl9kYXRhCitFT0YKKworYmxvYgorbWFyayA6NworZGF0YSA8PEVPRgorJG5vdGUxX2RhdGEKK0VPRgorCitibG9iCittYXJrIDo4CitkYXRhIDw8RU9GCiskbm90ZTJfZGF0YQorRU9GCisKK2NvbW1pdCByZWZzL25vdGVzL2Zvb2JhcgorbWFyayA6OQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyAoOjkpCitDT01NSVQKKworTiA6NyA6MworTiA6OCA6NQorTiBpbmxpbmUgOjYKK2RhdGEgPDxFT0YKKyRub3RlM19kYXRhCitFT0YKKworY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyCittYXJrIDoxMAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyAoOjEwKQorQ09NTUlUCisKK04gaW5saW5lIDozCitkYXRhIDw8RU9GCiskbm90ZTFiX2RhdGEKK0VPRgorCitjb21taXQgcmVmcy9ub3Rlcy9mb29iYXIyCittYXJrIDoxMQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitub3RlcyAoOjExKQorQ09NTUlUCisKK04gaW5saW5lIDozCitkYXRhIDw8RU9GCiskbm90ZTFjX2RhdGEKK0VPRgorCitjb21taXQgcmVmcy9ub3Rlcy9mb29iYXIKK21hcmsgOjEyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK25vdGVzICg6MTIpCitDT01NSVQKKworZGVsZXRlYWxsCitOIGlubGluZSA6NQorZGF0YSA8PEVPRgorJG5vdGUyYl9kYXRhCitFT0YKKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiBjb21taXQgbm90ZXMnIFwKKwknZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCSBnaXQgd2hhdGNoYW5nZWQgbm90ZXMtdGVzdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUTogdmVyaWZ5IHBhY2snICcKKwl2ZXJpZnlfcGFja3MKKycKKworY29tbWl0MT0kKGdpdCByZXYtcGFyc2Ugbm90ZXMtdGVzdH4yKQorY29tbWl0Mj0kKGdpdCByZXYtcGFyc2Ugbm90ZXMtdGVzdF4pCitjb21taXQzPSQoZ2l0IHJldi1wYXJzZSBub3Rlcy10ZXN0KQorCitjYXQgPmV4cGVjdCA8PEVPRgorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworZmlyc3QgKDozKQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IGZpcnN0IGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IG5vdGVzLXRlc3R+MiB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QgPDxFT0YKK3BhcmVudCAkY29tbWl0MQorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworc2Vjb25kICg6NSkKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBzZWNvbmQgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBjb21taXQgbm90ZXMtdGVzdF4gfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitwYXJlbnQgJGNvbW1pdDIKK2F1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKK3RoaXJkICg6NikKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSB0aGlyZCBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGNvbW1pdCBub3Rlcy10ZXN0IHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitjYXQgPmV4cGVjdCA8PEVPRgorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworbm90ZXMgKDo5KQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IGZpcnN0IG5vdGVzIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyfjIgfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0LnVuc29ydGVkIDw8RU9GCisxMDA2NDQgYmxvYiAkY29tbWl0MQorMTAwNjQ0IGJsb2IgJGNvbW1pdDIKKzEwMDY0NCBibG9iICRjb21taXQzCitFT0YKK2NhdCBleHBlY3QudW5zb3J0ZWQgfCBzb3J0ID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgZmlyc3Qgbm90ZXMgdHJlZScgXAorCSdnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9mb29iYXJ+Ml57dHJlZX0gfCBzZWQgInMvIFswLTlhLWZdKgkvIC8iID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworZWNobyAiJG5vdGUxX2RhdGEiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgZmlyc3Qgbm90ZSBmb3IgZmlyc3QgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyfjI6JGNvbW1pdDEgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitlY2hvICIkbm90ZTJfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBmaXJzdCBub3RlIGZvciBzZWNvbmQgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyfjI6JGNvbW1pdDIgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitlY2hvICIkbm90ZTNfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBmaXJzdCBub3RlIGZvciB0aGlyZCBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGJsb2IgcmVmcy9ub3Rlcy9mb29iYXJ+MjokY29tbWl0MyA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0IDw8RU9GCitwYXJlbnQgYGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9ub3Rlcy9mb29iYXJ+MmAKK2F1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKK25vdGVzICg6MTApCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgc2Vjb25kIG5vdGVzIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyXiB8IHNlZCAxZCA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworY2F0ID5leHBlY3QudW5zb3J0ZWQgPDxFT0YKKzEwMDY0NCBibG9iICRjb21taXQxCisxMDA2NDQgYmxvYiAkY29tbWl0MgorMTAwNjQ0IGJsb2IgJGNvbW1pdDMKK0VPRgorY2F0IGV4cGVjdC51bnNvcnRlZCB8IHNvcnQgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBzZWNvbmQgbm90ZXMgdHJlZScgXAorCSdnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9mb29iYXJeXnt0cmVlfSB8IHNlZCAicy8gWzAtOWEtZl0qCS8gLyIgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitlY2hvICIkbm90ZTFiX2RhdGEiID5leHBlY3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgc2Vjb25kIG5vdGUgZm9yIGZpcnN0IGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2Jhcl46JGNvbW1pdDEgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitlY2hvICIkbm90ZTJfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBmaXJzdCBub3RlIGZvciBzZWNvbmQgY29tbWl0JyBcCisJJ2dpdCBjYXQtZmlsZSBibG9iIHJlZnMvbm90ZXMvZm9vYmFyXjokY29tbWl0MiA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRub3RlM19kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IGZpcnN0IG5vdGUgZm9yIHRoaXJkIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2Jhcl46JGNvbW1pdDMgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitjYXQgPmV4cGVjdCA8PEVPRgorYXV0aG9yICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKworbm90ZXMgKDoxMSkKK0VPRgordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSB0aGlyZCBub3RlcyBjb21taXQnIFwKKwknZ2l0IGNhdC1maWxlIGNvbW1pdCByZWZzL25vdGVzL2Zvb2JhcjIgfCBzZWQgMWQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+ZXhwZWN0LnVuc29ydGVkIDw8RU9GCisxMDA2NDQgYmxvYiAkY29tbWl0MQorRU9GCitjYXQgZXhwZWN0LnVuc29ydGVkIHwgc29ydCA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IHRoaXJkIG5vdGVzIHRyZWUnIFwKKwknZ2l0IGNhdC1maWxlIC1wIHJlZnMvbm90ZXMvZm9vYmFyMl57dHJlZX0gfCBzZWQgInMvIFswLTlhLWZdKgkvIC8iID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCcKKworZWNobyAiJG5vdGUxY19kYXRhIiA+ZXhwZWN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogdmVyaWZ5IHRoaXJkIG5vdGUgZm9yIGZpcnN0IGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2JhcjI6JGNvbW1pdDEgPmFjdHVhbCAmJiB0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitjYXQgPmV4cGVjdCA8PEVPRgorcGFyZW50IGBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvbm90ZXMvZm9vYmFyXmAKK2F1dGhvciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisKK25vdGVzICg6MTIpCitFT0YKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdROiB2ZXJpZnkgZm91cnRoIG5vdGVzIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgY29tbWl0IHJlZnMvbm90ZXMvZm9vYmFyIHwgc2VkIDFkID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsJworCitjYXQgPmV4cGVjdC51bnNvcnRlZCA8PEVPRgorMTAwNjQ0IGJsb2IgJGNvbW1pdDIKK0VPRgorY2F0IGV4cGVjdC51bnNvcnRlZCB8IHNvcnQgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBmb3VydGggbm90ZXMgdHJlZScgXAorCSdnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9mb29iYXJee3RyZWV9IHwgc2VkICJzLyBbMC05YS1mXSoJLyAvIiA+YWN0dWFsICYmCisJIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2VjaG8gIiRub3RlMmJfZGF0YSIgPmV4cGVjdAordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1E6IHZlcmlmeSBzZWNvbmQgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdCcgXAorCSdnaXQgY2F0LWZpbGUgYmxvYiByZWZzL25vdGVzL2Zvb2JhcjokY29tbWl0MiA+YWN0dWFsICYmIHRlc3RfY21wIGV4cGVjdCBhY3R1YWwnCisKK2NhdCA+aW5wdXQgPDxFT0YKK3Jlc2V0IHJlZnMvaGVhZHMvUTAKKworY29tbWl0IHJlZnMvaGVhZHMvbm90ZS1RMAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitOb3RlIGZvciBhbiBlbXB0eSBicmFuY2guCitDT01NSVQKKworTiBpbmxpbmUgcmVmcy9oZWFkcy9RMAorZGF0YSA8PE5PVEUKK3NvbWUgbm90ZQorTk9URQorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUTogZGVueSBub3RlIG9uIGVtcHR5IGJyYW5jaCcgXAorCSd0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0JworIyMjCisjIyMgc2VyaWVzIFIgKGZlYXR1cmUgYW5kIG9wdGlvbikKKyMjIworCitjYXQgPmlucHV0IDw8RU9GCitmZWF0dXJlIG5vLXN1Y2gtZmVhdHVyZS1leGlzdHMKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBhYm9ydCBvbiB1bnN1cHBvcnRlZCBmZWF0dXJlJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCitjYXQgPmlucHV0IDw8RU9GCitmZWF0dXJlIGRhdGUtZm9ybWF0PW5vdworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHN1cHBvcnRlZCBmZWF0dXJlIGlzIGFjY2VwdGVkJyAnCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCitjYXQgPmlucHV0IDw8IEVPRgorYmxvYgorZGF0YSAzCitoaQorZmVhdHVyZSBkYXRlLWZvcm1hdD1ub3cKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBhYm9ydCBvbiByZWNlaXZpbmcgZmVhdHVyZSBhZnRlciBkYXRhIGNvbW1hbmQnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK2NhdCA+aW5wdXQgPDwgRU9GCitmZWF0dXJlIGltcG9ydC1tYXJrcz1naXQubWFya3MKK2ZlYXR1cmUgaW1wb3J0LW1hcmtzPWdpdDIubWFya3MKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBvbmx5IG9uZSBpbXBvcnQtbWFya3MgZmVhdHVyZSBhbGxvd2VkIHBlciBzdHJlYW0nICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK2NhdCA+aW5wdXQgPDwgRU9GCitmZWF0dXJlIGV4cG9ydC1tYXJrcz1naXQubWFya3MKK2Jsb2IKK21hcmsgOjEKK2RhdGEgMworaGkKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorICAgICdSOiBleHBvcnQtbWFya3MgZmVhdHVyZSByZXN1bHRzIGluIGEgbWFya3MgZmlsZSBiZWluZyBjcmVhdGVkJyBcCisgICAgJ2NhdCBpbnB1dCB8IGdpdCBmYXN0LWltcG9ydCAmJgorICAgIGdyZXAgOjEgZ2l0Lm1hcmtzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUjogZXhwb3J0LW1hcmtzIG9wdGlvbnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgY29tbWFuZGxpbmUgb3B0aW9ucycgXAorICAgICdjYXQgaW5wdXQgfCBnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9b3RoZXIubWFya3MgJiYKKyAgICBncmVwIDoxIG90aGVyLm1hcmtzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBjYXRjaCB0eXBvIGluIG1hcmtzIGZpbGUgbmFtZScgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1ub25leGlzdGVudC5tYXJrcyA8L2Rldi9udWxsICYmCisJZWNobyAiZmVhdHVyZSBpbXBvcnQtbWFya3M9bm9uZXhpc3RlbnQubWFya3MiIHwKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogaW1wb3J0IGFuZCBvdXRwdXQgbWFya3MgY2FuIGJlIHRoZSBzYW1lIGZpbGUnICcKKwlybSAtZiBpby5tYXJrcyAmJgorCWJsb2I9JChlY2hvIGhpIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJOjEgJGJsb2IKKwk6MiAkYmxvYgorCUVPRgorCWdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1pby5tYXJrcyA8PC1cRU9GICYmCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDMKKwloaQorCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPWlvLm1hcmtzIC0tZXhwb3J0LW1hcmtzPWlvLm1hcmtzIDw8LVxFT0YgJiYKKwlibG9iCisJbWFyayA6MgorCWRhdGEgMworCWhpCisKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgaW8ubWFya3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogLS1pbXBvcnQtbWFya3M9Zm9vIC0tb3V0cHV0LW1hcmtzPWZvbyB0byBjcmVhdGUgZm9vIGZhaWxzJyAnCisJcm0gLWYgaW8ubWFya3MgJiYKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9aW8ubWFya3MgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgPDwtXEVPRgorCWJsb2IKKwltYXJrIDoxCisJZGF0YSAzCisJaGkKKworCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiAtLWltcG9ydC1tYXJrcy1pZi1leGlzdHMnICcKKwlybSAtZiBpby5tYXJrcyAmJgorCWJsb2I9JChlY2hvIGhpIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisJZWNobyAiOjEgJGJsb2IiID5leHBlY3QgJiYKKwlnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3MtaWYtZXhpc3RzPWlvLm1hcmtzIC0tZXhwb3J0LW1hcmtzPWlvLm1hcmtzIDw8LVxFT0YgJiYKKwlibG9iCisJbWFyayA6MQorCWRhdGEgMworCWhpCisKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgaW8ubWFya3MKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzJyAnCisJcm0gLWYgaW8ubWFya3MgJiYKKwk+ZXhwZWN0ICYmCisKKwlnaXQgZmFzdC1pbXBvcnQgLS1leHBvcnQtbWFya3M9aW8ubWFya3MgPDwtXEVPRiAmJgorCWZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1ub3RfaW8ubWFya3MKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgaW8ubWFya3MgJiYKKworCWJsb2I9JChlY2hvIGhpIHwgZ2l0IGhhc2gtb2JqZWN0IC0tc3RkaW4pICYmCisKKwllY2hvICI6MSAkYmxvYiIgPmlvLm1hcmtzICYmCisJZWNobyAiOjEgJGJsb2IiID5leHBlY3QgJiYKKwllY2hvICI6MiAkYmxvYiIgPj5leHBlY3QgJiYKKworCWdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1pby5tYXJrcyA8PC1cRU9GICYmCisJZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzPWlvLm1hcmtzCisJYmxvYgorCW1hcmsgOjIKKwlkYXRhIDMKKwloaQorCisJRU9GCisJdGVzdF9jbXAgZXhwZWN0IGlvLm1hcmtzICYmCisKKwllY2hvICI6MyAkYmxvYiIgPj5leHBlY3QgJiYKKworCWdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1pby5tYXJrcyBcCisJCQktLWV4cG9ydC1tYXJrcz1pby5tYXJrcyA8PC1cRU9GICYmCisJZmVhdHVyZSBpbXBvcnQtbWFya3MtaWYtZXhpc3RzPW5vdF9pby5tYXJrcworCWJsb2IKKwltYXJrIDozCisJZGF0YSAzCisJaGkKKworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBpby5tYXJrcyAmJgorCisJPmV4cGVjdCAmJgorCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1ub3RfaW8ubWFya3MgXAorCQkJLS1leHBvcnQtbWFya3M9aW8ubWFya3MgPDwtXEVPRiAmJgorCWZlYXR1cmUgaW1wb3J0LW1hcmtzLWlmLWV4aXN0cz1pby5tYXJrcworCUVPRgorCXRlc3RfY21wIGV4cGVjdCBpby5tYXJrcworJworCitjYXQgPmlucHV0IDw8IEVPRgorZmVhdHVyZSBpbXBvcnQtbWFya3M9bWFya3Mub3V0CitmZWF0dXJlIGV4cG9ydC1tYXJrcz1tYXJrcy5uZXcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUjogaW1wb3J0IHRvIG91dHB1dCBtYXJrcyB3b3JrcyB3aXRob3V0IGFueSBjb250ZW50JyBcCisgICAgJ2NhdCBpbnB1dCB8IGdpdCBmYXN0LWltcG9ydCAmJgorICAgIHRlc3RfY21wIG1hcmtzLm91dCBtYXJrcy5uZXcnCisKK2NhdCA+aW5wdXQgPDxFT0YKK2ZlYXR1cmUgaW1wb3J0LW1hcmtzPW5vbmV4aXN0ZW50Lm1hcmtzCitmZWF0dXJlIGV4cG9ydC1tYXJrcz1tYXJrcy5uZXcKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnUjogaW1wb3J0IG1hcmtzIHByZWZlcnMgY29tbWFuZGxpbmUgbWFya3MgZmlsZSBvdmVyIHRoZSBzdHJlYW0nIFwKKyAgICAnY2F0IGlucHV0IHwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzLm91dCAmJgorICAgIHRlc3RfY21wIG1hcmtzLm91dCBtYXJrcy5uZXcnCisKKworY2F0ID5pbnB1dCA8PEVPRgorZmVhdHVyZSBpbXBvcnQtbWFya3M9bm9uZXhpc3RlbnQubWFya3MKK2ZlYXR1cmUgZXhwb3J0LW1hcmtzPWNvbWJpbmVkLm1hcmtzCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogbXVsdGlwbGUgLS1pbXBvcnQtbWFya3M9IHNob3VsZCBiZSBob25vdXJlZCcgJworICAgIGhlYWQgLW4yIG1hcmtzLm91dCA+IG9uZS5tYXJrcyAmJgorICAgIHRhaWwgLW4gKzMgbWFya3Mub3V0ID4gdHdvLm1hcmtzICYmCisgICAgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW9uZS5tYXJrcyAtLWltcG9ydC1tYXJrcz10d28ubWFya3MgPGlucHV0ICYmCisgICAgdGVzdF9jbXAgbWFya3Mub3V0IGNvbWJpbmVkLm1hcmtzCisnCisKK2NhdCA+aW5wdXQgPDxFT0YKK2ZlYXR1cmUgcmVsYXRpdmUtbWFya3MKK2ZlYXR1cmUgaW1wb3J0LW1hcmtzPXJlbGF0aXZlLmluCitmZWF0dXJlIGV4cG9ydC1tYXJrcz1yZWxhdGl2ZS5vdXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBmZWF0dXJlIHJlbGF0aXZlLW1hcmtzIHNob3VsZCBiZSBob25vdXJlZCcgJworICAgIG1rZGlyIC1wIC5naXQvaW5mby9mYXN0LWltcG9ydC8gJiYKKyAgICBjcCBtYXJrcy5uZXcgLmdpdC9pbmZvL2Zhc3QtaW1wb3J0L3JlbGF0aXZlLmluICYmCisgICAgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorICAgIHRlc3RfY21wIG1hcmtzLm5ldyAuZ2l0L2luZm8vZmFzdC1pbXBvcnQvcmVsYXRpdmUub3V0CisnCisKK2NhdCA+aW5wdXQgPDxFT0YKK2ZlYXR1cmUgcmVsYXRpdmUtbWFya3MKK2ZlYXR1cmUgaW1wb3J0LW1hcmtzPXJlbGF0aXZlLmluCitmZWF0dXJlIG5vLXJlbGF0aXZlLW1hcmtzCitmZWF0dXJlIGV4cG9ydC1tYXJrcz1ub24tcmVsYXRpdmUub3V0CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZmVhdHVyZSBuby1yZWxhdGl2ZS1tYXJrcyBzaG91bGQgYmUgaG9ub3VyZWQnICcKKyAgICBnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisgICAgdGVzdF9jbXAgbWFya3MubmV3IG5vbi1yZWxhdGl2ZS5vdXQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogZmVhdHVyZSBscyBzdXBwb3J0ZWQnICcKKwllY2hvICJmZWF0dXJlIGxzIiB8CisJZ2l0IGZhc3QtaW1wb3J0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IGZlYXR1cmUgY2F0LWJsb2Igc3VwcG9ydGVkJyAnCisJZWNobyAiZmVhdHVyZSBjYXQtYmxvYiIgfAorCWdpdCBmYXN0LWltcG9ydAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBjYXQtYmxvYi1mZCBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlcicgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPS0xIDwvZGV2L251bGwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAhTUlOR1cgJ1I6IHByaW50IG9sZCBibG9iJyAnCisJYmxvYj0kKGVjaG8gInllcyBpdCBjYW4iIHwgZ2l0IGhhc2gtb2JqZWN0IC13IC0tc3RkaW4pICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJHtibG9ifSBibG9iIDExCisJeWVzIGl0IGNhbgorCisJRU9GCisJZWNobyAiY2F0LWJsb2IgJGJsb2IiIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD02IDY+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnUjogaW4tc3RyZWFtIGNhdC1ibG9iLWZkIG5vdCByZXNwZWN0ZWQnICcKKwllY2hvIGhlbGxvID5ncmVldGluZyAmJgorCWJsb2I9JChnaXQgaGFzaC1vYmplY3QgLXcgZ3JlZXRpbmcpICYmCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJJHtibG9ifSBibG9iIDYKKwloZWxsbworCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmFjdHVhbC4zID5hY3R1YWwuMSA8PC1FT0YgJiYKKwljYXQtYmxvYiAkYmxvYgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuMyAmJgorCXRlc3RfY21wIGVtcHR5IGFjdHVhbC4xICYmCisJZ2l0IGZhc3QtaW1wb3J0IDM+YWN0dWFsLjMgPmFjdHVhbC4xIDw8LUVPRiAmJgorCW9wdGlvbiBjYXQtYmxvYi1mZD0zCisJY2F0LWJsb2IgJGJsb2IKKwlFT0YKKwl0ZXN0X2NtcCBlbXB0eSBhY3R1YWwuMyAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwuMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICFNSU5HVyAnUjogcHJpbnQgbWFyayBmb3IgbmV3IGJsb2InICcKKwllY2hvICJlZmZsdWVudGlzaCIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbiA+ZXhwZWN0ICYmCisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9NiA2PmFjdHVhbCA8PC1cRU9GICYmCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDw8QkxPQl9FTkQKKwllZmZsdWVudGlzaAorCUJMT0JfRU5ECisJZ2V0LW1hcmsgOjEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdSOiBwcmludCBuZXcgYmxvYicgJworCWJsb2I9JChlY2hvICJ5ZXAgeWVwIHllcCIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkke2Jsb2J9IGJsb2IgMTIKKwl5ZXAgeWVwIHllcAorCisJRU9GCisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9NiA2PmFjdHVhbCA8PC1cRU9GICYmCisJYmxvYgorCW1hcmsgOjEKKwlkYXRhIDw8QkxPQl9FTkQKKwl5ZXAgeWVwIHllcAorCUJMT0JfRU5ECisJY2F0LWJsb2IgOjEKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgIU1JTkdXICdSOiBwcmludCBuZXcgYmxvYiBieSBzaGExJyAnCisJYmxvYj0kKGVjaG8gImEgbmV3IGJsb2IgbmFtZWQgYnkgc2hhMSIgfCBnaXQgaGFzaC1vYmplY3QgLS1zdGRpbikgJiYKKwljYXQgPmV4cGVjdCA8PC1FT0YgJiYKKwkke2Jsb2J9IGJsb2IgMjUKKwlhIG5ldyBibG9iIG5hbWVkIGJ5IHNoYTEKKworCUVPRgorCWdpdCBmYXN0LWltcG9ydCAtLWNhdC1ibG9iLWZkPTYgNj5hY3R1YWwgPDwtRU9GICYmCisJYmxvYgorCWRhdGEgPDxCTE9CX0VORAorCWEgbmV3IGJsb2IgbmFtZWQgYnkgc2hhMQorCUJMT0JfRU5ECisJY2F0LWJsb2IgJGJsb2IKKwlFT0YKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwOiBiaWcgZmlsZScgJworCSgKKwkJZWNobyAidGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZyIgPmJpZyAmJgorCQlmb3IgaSBpbiAxIDIgMworCQlkbworCQkJY2F0IGJpZyBiaWcgYmlnIGJpZyA+YmlnZ2VyICYmCisJCQljYXQgYmlnZ2VyIGJpZ2dlciBiaWdnZXIgYmlnZ2VyID5iaWcgfHwKKwkJCWV4aXQKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogcHJpbnQgdHdvIGJsb2JzIHRvIHN0ZG91dCcgJworCWJsb2IxPSQoZ2l0IGhhc2gtb2JqZWN0IGJpZykgJiYKKwlibG9iMV9sZW49JCh3YyAtYyA8YmlnKSAmJgorCWJsb2IyPSQoZWNobyBoZWxsbyB8IGdpdCBoYXNoLW9iamVjdCAtLXN0ZGluKSAmJgorCXsKKwkJZWNobyAke2Jsb2IxfSBibG9iICRibG9iMV9sZW4gJiYKKwkJY2F0IGJpZyAmJgorCQljYXQgPDwtRU9GCisKKwkJJHtibG9iMn0gYmxvYiA2CisJCWhlbGxvCisKKwkJRU9GCisJfSA+ZXhwZWN0ICYmCisJeworCQljYXQgPDwtXEVORF9QQVJUMSAmJgorCQkJYmxvYgorCQkJbWFyayA6MQorCQkJZGF0YSA8PGRhdGFfZW5kCisJCUVORF9QQVJUMQorCQljYXQgYmlnICYmCisJCWNhdCA8PC1cRU9GCisJCQlkYXRhX2VuZAorCQkJYmxvYgorCQkJbWFyayA6MgorCQkJZGF0YSA8PGRhdGFfZW5kCisJCQloZWxsbworCQkJZGF0YV9lbmQKKwkJCWNhdC1ibG9iIDoxCisJCQljYXQtYmxvYiA6MgorCQlFT0YKKwl9IHwKKwlnaXQgZmFzdC1pbXBvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQSVBFICdSOiBjb3B5IHVzaW5nIGNhdC1maWxlJyAnCisJZXhwZWN0X2lkPSQoZ2l0IGhhc2gtb2JqZWN0IGJpZykgJiYKKwlleHBlY3RfbGVuPSQod2MgLWMgPGJpZykgJiYKKwllY2hvICRleHBlY3RfaWQgYmxvYiAkZXhwZWN0X2xlbiA+ZXhwZWN0LnJlc3BvbnNlICYmCisKKwlybSAtZiBibG9icyAmJgorCWNhdCA+ZnJvbnRlbmQgPDwtXEZST05URU5EX0VORCAmJgorCSMhL2Jpbi9zaAorCUZST05URU5EX0VORAorCisJbWtmaWZvIGJsb2JzICYmCisJKAorCQlleHBvcnQgR0lUX0NPTU1JVFRFUl9OQU1FIEdJVF9DT01NSVRURVJfRU1BSUwgR0lUX0NPTU1JVFRFUl9EQVRFICYmCisJCWNhdCA8PC1cRU9GICYmCisJCWZlYXR1cmUgY2F0LWJsb2IKKwkJYmxvYgorCQltYXJrIDoxCisJCWRhdGEgPDxCTE9CCisJCUVPRgorCQljYXQgYmlnICYmCisJCWNhdCA8PC1cRU9GICYmCisJCUJMT0IKKwkJY2F0LWJsb2IgOjEKKwkJRU9GCisKKwkJcmVhZCBibG9iX2lkIHR5cGUgc2l6ZSA8JjMgJiYKKwkJZWNobyAiJGJsb2JfaWQgJHR5cGUgJHNpemUiID5yZXNwb25zZSAmJgorCQloZWFkX2MgJHNpemUgPmJsb2IgPCYzICYmCisJCXJlYWQgbmV3bGluZSA8JjMgJiYKKworCQljYXQgPDwtRU9GICYmCisJCWNvbW1pdCByZWZzL2hlYWRzL2NvcGllZAorCQljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwkJZGF0YSA8PENPTU1JVAorCQljb3B5IGJpZyBmaWxlIGFzIGZpbGUzCisJCUNPTU1JVAorCQlNIDY0NCBpbmxpbmUgZmlsZTMKKwkJZGF0YSA8PEJMT0IKKwkJRU9GCisJCWNhdCBibG9iICYmCisJCWVjaG8gQkxPQgorCSkgMzxibG9icyB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmJsb2JzICYmCisJZ2l0IHNob3cgY29waWVkOmZpbGUzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QucmVzcG9uc2UgcmVzcG9uc2UgJiYKKwl0ZXN0X2NtcCBiaWcgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnUjogcHJpbnQgYmxvYiBtaWQtY29tbWl0JyAnCisJcm0gLWYgYmxvYnMgJiYKKwllY2hvICJBIGJsb2IgZnJvbSBfYmVmb3JlXyB0aGUgY29tbWl0LiIgPmV4cGVjdCAmJgorCW1rZmlmbyBibG9icyAmJgorCSgKKwkJZXhlYyAzPGJsb2JzICYmCisJCWNhdCA8PC1FT0YgJiYKKwkJZmVhdHVyZSBjYXQtYmxvYgorCQlibG9iCisJCW1hcmsgOjEKKwkJZGF0YSA8PEJMT0IKKwkJQSBibG9iIGZyb20gX2JlZm9yZV8gdGhlIGNvbW1pdC4KKwkJQkxPQgorCQljb21taXQgcmVmcy9oZWFkcy90ZW1wb3JhcnkKKwkJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJCWRhdGEgPDxDT01NSVQKKwkJRW1wdHkgY29tbWl0CisJCUNPTU1JVAorCQljYXQtYmxvYiA6MQorCQlFT0YKKworCQlyZWFkIGJsb2JfaWQgdHlwZSBzaXplIDwmMyAmJgorCQloZWFkX2MgJHNpemUgPmFjdHVhbCA8JjMgJiYKKwkJcmVhZCBuZXdsaW5lIDwmMyAmJgorCisJCWVjaG8KKwkpIHwKKwlnaXQgZmFzdC1pbXBvcnQgLS1jYXQtYmxvYi1mZD0zIDM+YmxvYnMgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUElQRSAnUjogcHJpbnQgc3RhZ2VkIGJsb2Igd2l0aGluIGNvbW1pdCcgJworCXJtIC1mIGJsb2JzICYmCisJZWNobyAiQSBibG9iIGZyb20gX3dpdGhpbl8gdGhlIGNvbW1pdC4iID5leHBlY3QgJiYKKwlta2ZpZm8gYmxvYnMgJiYKKwkoCisJCWV4ZWMgMzxibG9icyAmJgorCQljYXQgPDwtRU9GICYmCisJCWZlYXR1cmUgY2F0LWJsb2IKKwkJY29tbWl0IHJlZnMvaGVhZHMvd2l0aGluCisJCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCQlkYXRhIDw8Q09NTUlUCisJCUVtcHR5IGNvbW1pdAorCQlDT01NSVQKKwkJTSA2NDQgaW5saW5lIHdpdGhpbgorCQlkYXRhIDw8QkxPQgorCQlBIGJsb2IgZnJvbSBfd2l0aGluXyB0aGUgY29tbWl0LgorCQlCTE9CCisJCUVPRgorCisJCXRvX2dldD0kKAorCQkJZWNobyAiQSBibG9iIGZyb20gX3dpdGhpbl8gdGhlIGNvbW1pdC4iIHwKKwkJCWdpdCBoYXNoLW9iamVjdCAtLXN0ZGluCisJCSkgJiYKKwkJZWNobyAiY2F0LWJsb2IgJHRvX2dldCIgJiYKKworCQlyZWFkIGJsb2JfaWQgdHlwZSBzaXplIDwmMyAmJgorCQloZWFkX2MgJHNpemUgPmFjdHVhbCA8JjMgJiYKKwkJcmVhZCBuZXdsaW5lIDwmMyAmJgorCisJCWVjaG8gZGVsZXRlYWxsCisJKSB8CisJZ2l0IGZhc3QtaW1wb3J0IC0tY2F0LWJsb2ItZmQ9MyAzPmJsb2JzICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmlucHV0IDw8IEVPRgorb3B0aW9uIGdpdCBxdWlldAorYmxvYgorZGF0YSAzCitoaQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUjogcXVpZXQgb3B0aW9uIHJlc3VsdHMgaW4gbm8gc3RhdHMgYmVpbmcgb3V0cHV0JyAnCisgICAgY2F0IGlucHV0IHwgZ2l0IGZhc3QtaW1wb3J0IDI+IG91dHB1dCAmJgorICAgIHRlc3RfY21wIGVtcHR5IG91dHB1dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBmZWF0dXJlIGRvbmUgbWVhbnMgdGVybWluYXRpbmcgImRvbmUiIGlzIG1hbmRhdG9yeScgJworCWVjaG8gZmVhdHVyZSBkb25lIHwgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0tZG9uZSA8L2Rldi9udWxsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHRlcm1pbmF0aW5nICJkb25lIiB3aXRoIHRyYWlsaW5nIGdpYmJlcmlzaCBpcyBvaycgJworCWdpdCBmYXN0LWltcG9ydCA8PC1cRU9GICYmCisJZmVhdHVyZSBkb25lCisJZG9uZQorCXRyYWlsaW5nIGdpYmJlcmlzaAorCUVPRgorCWdpdCBmYXN0LWltcG9ydCA8PC1cRU9GCisJZG9uZQorCW1vcmUgdHJhaWxpbmcgZ2liYmVyaXNoCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHRlcm1pbmF0aW5nICJkb25lIiB3aXRoaW4gY29tbWl0JyAnCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCU9CSklECisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQloZWxsby5jCisJOjAwMDAwMCAxMDA2NDQgT0JKSUQgT0JKSUQgQQloZWxsbzIuYworCUVPRgorCWdpdCBmYXN0LWltcG9ydCA8PC1FT0YgJiYKKwljb21taXQgcmVmcy9oZWFkcy9kb25lLWVuZHMKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8RU9UCisJQ29tbWl0IHRlcm1pbmF0ZWQgYnkgImRvbmUiIGNvbW1hbmQKKwlFT1QKKwlNIDEwMDY0NCBpbmxpbmUgaGVsbG8uYworCWRhdGEgPDxFT1QKKwlIZWxsbywgd29ybGQuCisJRU9UCisJQyBoZWxsby5jIGhlbGxvMi5jCisJZG9uZQorCUVPRgorCWdpdCByZXYtbGlzdCBkb25lLWVuZHMgfAorCWdpdCBkaWZmLXRyZWUgLXIgLS1zdGRpbiAtLXJvb3QgLS1hbHdheXMgfAorCXNlZCAtZSAicy8kX3g0MC9PQkpJRC9nIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmlucHV0IDw8RU9GCitvcHRpb24gZ2l0IG5vbi1leGlzdGluZy1vcHRpb24KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBkaWUgb24gdW5rbm93biBvcHRpb24nICcKKyAgICB0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHVua25vd24gY29tbWFuZGxpbmUgb3B0aW9ucyBhcmUgcmVqZWN0ZWQnICdcCisgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0tbm9uLWV4aXN0aW5nLW9wdGlvbiA8IC9kZXYvbnVsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBkaWUgb24gaW52YWxpZCBvcHRpb24gYXJndW1lbnQnICcKKwllY2hvICJvcHRpb24gZ2l0IGFjdGl2ZS1icmFuY2hlcz0tNSIgfAorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAmJgorCWVjaG8gIm9wdGlvbiBnaXQgZGVwdGg9IiB8CisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0ICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0tZGVwdGg9IjUgZWxlcGhhbnRzIiA8L2Rldi9udWxsCisnCisKK2NhdCA+aW5wdXQgPDxFT0YKK29wdGlvbiBub24tZXhpc3RpbmctdmNzIG5vbi1leGlzdGluZy1vcHRpb24KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSOiBpZ25vcmUgbm9uLWdpdCBvcHRpb25zJyAnCisgICAgZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCisjIworIyMgUjogdmVyeSBsYXJnZSBibG9icworIyMKK2Jsb2JzaXplPSQoKDIqMTAyNCoxMDI0ICsgNTMpKQordGVzdC1nZW5yYW5kb20gYmFyICRibG9ic2l6ZSA+ZXhwZWN0CitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9iaWctZmlsZQorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitSIC0gYmlnIGZpbGUKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgYmlnMQorZGF0YSAkYmxvYnNpemUKK0lOUFVUX0VORAorY2F0IGV4cGVjdCA+PmlucHV0CitjYXQgPj5pbnB1dCA8PElOUFVUX0VORAorTSA2NDQgaW5saW5lIGJpZzIKK2RhdGEgJGJsb2JzaXplCitJTlBVVF9FTkQKK2NhdCBleHBlY3QgPj5pbnB1dAorZWNobyA+PmlucHV0CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdSOiBibG9iIGJpZ2dlciB0aGFuIHRocmVzaG9sZCcgXAorCSd0ZXN0X2NyZWF0ZV9yZXBvIFIgJiYKKwkgZ2l0IC0tZ2l0LWRpcj1SLy5naXQgZmFzdC1pbXBvcnQgLS1iaWctZmlsZS10aHJlc2hvbGQ9MSA8aW5wdXQnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1I6IHZlcmlmeSBjcmVhdGVkIHBhY2snICcKKwkoCisJCWNkIFIgJiYKKwkJdmVyaWZ5X3BhY2tzIC12ID4gLi4vdmVyaWZ5CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknUjogdmVyaWZ5IHdyaXR0ZW4gb2JqZWN0cycgXAorCSdnaXQgLS1naXQtZGlyPVIvLmdpdCBjYXQtZmlsZSBibG9iIGJpZy1maWxlOmJpZzEgPmFjdHVhbCAmJgorCSB0ZXN0X2NtcF9iaW4gZXhwZWN0IGFjdHVhbCAmJgorCSBhPSQoZ2l0IC0tZ2l0LWRpcj1SLy5naXQgcmV2LXBhcnNlIGJpZy1maWxlOmJpZzEpICYmCisJIGI9JChnaXQgLS1naXQtZGlyPVIvLmdpdCByZXYtcGFyc2UgYmlnLWZpbGU6YmlnMikgJiYKKwkgdGVzdCAkYSA9ICRiJwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1I6IGJsb2IgYXBwZWFycyBvbmx5IG9uY2UnIFwKKwknbj0kKGdyZXAgJGEgdmVyaWZ5IHwgd2MgLWwpICYmCisJIHRlc3QgMSA9ICRuJworCisjIyMKKyMjIyBzZXJpZXMgUworIyMjCisjCisjIE1ha2Ugc3VyZSBtaXNzaW5nIHNwYWNlcyBhbmQgRU9McyBhZnRlciBtYXJrIHJlZmVyZW5jZXMKKyMgY2F1c2UgZXJyb3JzLgorIworIyBTZXR1cDoKKyMKKyMgICAxLS0yLS00CisjICAgIFwgICAvCisjICAgICAtMy0KKyMKKyMgICBjb21taXQgbWFya3M6ICAzMDEsIDMwMiwgMzAzLCAzMDQKKyMgICBibG9iIG1hcmtzOiAgICAgICAgICAgICAgNDAzLCA0MDQsIHJlc3AuCisjICAgbm90ZSBtYXJrOiAgICAgICAgICAyMDIKKyMKKyMgVGhlIGVycm9yIG1lc3NhZ2Ugd2hlbiBhIHNwYWNlIGlzIG1pc3Npbmcgbm90IGF0IHRoZQorIyBlbmQgb2YgdGhlIGxpbmUgaXM6CisjCisjICAgTWlzc2luZyBzcGFjZSBhZnRlciAuLgorIworIyBvciB3aGVuIGV4dHJhIGNoYXJhY3RlcnMgY29tZSBhZnRlciB0aGUgbWFyayBhdCB0aGUgZW5kCisjIG9mIHRoZSBsaW5lOgorIworIyAgIEdhcmJhZ2UgYWZ0ZXIgLi4KKyMKKyMgb3Igd2hlbiB0aGUgZGF0YXJlZiBpcyBuZWl0aGVyICJpbmxpbmUgIiBvciBhIGtub3duIFNIQTEsCisjCisjICAgSW52YWxpZCBkYXRhcmVmIC4uCisjCit0ZXN0X3RpY2sKKworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvaGVhZHMvUworbWFyayA6MzAxCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NvbW1pdCAxCitDT01NSVQKK00gMTAwNjQ0IGlubGluZSBoZWxsby5jCitkYXRhIDw8QkxPQgorYmxvYiAxCitCTE9CCisKK2NvbW1pdCByZWZzL2hlYWRzL1MKK21hcmsgOjMwMgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXQgMgorQ09NTUlUCitmcm9tIDozMDEKK00gMTAwNjQ0IGlubGluZSBoZWxsby5jCitkYXRhIDw8QkxPQgorYmxvYiAyCitCTE9CCisKK2Jsb2IKK21hcmsgOjQwMworZGF0YSA8PEJMT0IKK2Jsb2IgMworQkxPQgorCitibG9iCittYXJrIDoyMDIKK2RhdGEgPDxCTE9CCitub3RlIDIKK0JMT0IKK0lOUFVUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBpbml0aWFsaXplIGZvciBTIHRlc3RzJyAnCisJZ2l0IGZhc3QtaW1wb3J0IC0tZXhwb3J0LW1hcmtzPW1hcmtzIDxpbnB1dAorJworCisjCisjIGZpbGVtb2RpZnksIHRocmVlIGRhdGFyZWZzCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBmaWxlbW9kaWZ5IHdpdGggZ2FyYmFnZSBhZnRlciBtYXJrIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwljb21taXQgcmVmcy9oZWFkcy9TCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbW1pdCBOCisJQ09NTUlUCisJTSAxMDA2NDQgOjQwM3ggaGVsbG8uYworCUVPRgorCWNhdCBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciBtYXJrIiBlcnIKKycKKworIyBpbmxpbmUgaXMgbWlzc3BlbGxlZDsgZmFzdC1pbXBvcnQgdGhpbmtzIGl0IGlzIHNvbWUgdW5rbm93biBkYXRhcmVmCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBmaWxlbW9kaWZ5IHdpdGggZ2FyYmFnZSBhZnRlciBpbmxpbmUgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IE4KKwlDT01NSVQKKwlNIDEwMDY0NCBpbmxpbmVYIGhlbGxvLmMKKwlkYXRhIDw8QkxPQgorCWlubGluZQorCUJMT0IKKwlFT0YKKwljYXQgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAibnZhbGlkIGRhdGFyZWYiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBmaWxlbW9kaWZ5IHdpdGggZ2FyYmFnZSBhZnRlciBzaGExIG11c3QgZmFpbCcgJworCXNoYTE9JChncmVwIDo0MDMgbWFya3MgfCBjdXQgLWRcICAtZjIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IE4KKwlDT01NSVQKKwlNIDEwMDY0NCAke3NoYTF9eCBoZWxsby5jCisJRU9GCisJY2F0IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgInNwYWNlIGFmdGVyIFNIQTEiIGVycgorJworCisjCisjIG5vdGVtb2RpZnksIHRocmVlIHdheXMgdG8gc2F5IGRhdGFyZWYKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IG5vdGVtb2RpZnkgd2l0aCBnYXJhYmdlIGFmdGVyIG1hcmsgZGF0YXJlZiBtdXN0IGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GIDI+ZXJyICYmCisJY29tbWl0IHJlZnMvaGVhZHMvUworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgUyBub3RlIGRhdGFyZWYgbWFya3JlZgorCUNPTU1JVAorCU4gOjIwMnggOjMwMgorCUVPRgorCWNhdCBlcnIgJiYKKwl0ZXN0X2kxOG5ncmVwICJzcGFjZSBhZnRlciBtYXJrIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbm90ZW1vZGlmeSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgaW5saW5lIGRhdGFyZWYgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IFMgbm90ZSBkYXRhcmVmIGlubGluZQorCUNPTU1JVAorCU4gaW5saW5lWCA6MzAyCisJZGF0YSA8PEJMT0IKKwlub3RlIGJsb2IKKwlCTE9CCisJRU9GCisJY2F0IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgIm52YWxpZCBkYXRhcmVmIiBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbm90ZW1vZGlmeSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgc2hhMSBkYXRhcmVmIG11c3QgZmFpbCcgJworCXNoYTE9JChncmVwIDoyMDIgbWFya3MgfCBjdXQgLWRcICAtZjIpICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJY29tbWl0IFMgbm90ZSBkYXRhcmVmIHNoYTEKKwlDT01NSVQKKwlOICR7c2hhMX14IDozMDIKKwlFT0YKKwljYXQgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAic3BhY2UgYWZ0ZXIgU0hBMSIgZXJyCisnCisKKyMKKyMgbm90ZW1vZGlmeSwgbWFyayBpbiBjb21taXQtaXNoCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBub3RlbW9kaWZ5IHdpdGggZ2FyYmFnZSBhZnRlciBtYXJrIGNvbW1pdC1pc2ggbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1Nub3RlcworCWNvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorCWRhdGEgPDxDT01NSVQKKwljb21taXQgUyBub3RlIGNvbW1pdC1pc2gKKwlDT01NSVQKKwlOIDoyMDIgOjMwMngKKwlFT0YKKwljYXQgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiYWZ0ZXIgbWFyayIgZXJyCisnCisKKyMKKyMgZnJvbQorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogZnJvbSB3aXRoIGdhcmJhZ2UgYWZ0ZXIgbWFyayBtdXN0IGZhaWwnICcKKwl0ZXN0X211c3RfZmFpbCBcCisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIC0tZXhwb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MyCisJbWFyayA6MzAzCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbW1pdCAzCisJQ09NTUlUCisJZnJvbSA6MzAxeAorCU0gMTAwNjQ0IDo0MDMgaGVsbG8uYworCUVPRgorCisKKwkjIGdvIGNyZWF0ZSB0aGUgY29tbWl0LCBuZWVkIGl0IGZvciBtZXJnZSB0ZXN0CisJZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIC0tZXhwb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MyCisJbWFyayA6MzAzCisJY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCisJZGF0YSA8PENPTU1JVAorCWNvbW1pdCAzCisJQ09NTUlUCisJZnJvbSA6MzAxCisJTSAxMDA2NDQgOjQwMyBoZWxsby5jCisJRU9GCisKKwkjIG5vdyBldmFsdWF0ZSB0aGUgZXJyb3IKKwljYXQgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiYWZ0ZXIgbWFyayIgZXJyCisnCisKKworIworIyBtZXJnZQorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogbWVyZ2Ugd2l0aCBnYXJiYWdlIGFmdGVyIG1hcmsgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNvbW1pdCByZWZzL2hlYWRzL1MKKwltYXJrIDozMDQKKwljb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8Q09NTUlUCisJbWVyZ2UgNAorCUNPTU1JVAorCWZyb20gOjMwMgorCW1lcmdlIDozMDN4CisJTSAxMDA2NDQgOjQwMyBoZWxsby5jCisJRU9GCisJY2F0IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImFmdGVyIG1hcmsiIGVycgorJworCisjCisjIHRhZywgZnJvbSBtYXJrcmVmCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiB0YWcgd2l0aCBnYXJiYWdlIGFmdGVyIG1hcmsgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCXRhZyByZWZzL3RhZ3MvU3RhZworCWZyb20gOjMwMngKKwl0YWdnZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKKwlkYXRhIDw8VEFHCisJdGFnIFMKKwlUQUcKKwlFT0YKKwljYXQgZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiYWZ0ZXIgbWFyayIgZXJyCisnCisKKyMKKyMgY2F0LWJsb2IgbWFya3JlZgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnUzogY2F0LWJsb2Igd2l0aCBnYXJiYWdlIGFmdGVyIG1hcmsgbXVzdCBmYWlsJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IGZhc3QtaW1wb3J0IC0taW1wb3J0LW1hcmtzPW1hcmtzIDw8LUVPRiAyPmVyciAmJgorCWNhdC1ibG9iIDo0MDN4CisJRU9GCisJY2F0IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgImFmdGVyIG1hcmsiIGVycgorJworCisjCisjIGxzIG1hcmtyZWYKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1M6IGxzIHdpdGggZ2FyYmFnZSBhZnRlciBtYXJrIG11c3QgZmFpbCcgJworCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwlscyA6MzAyeCBoZWxsby5jCisJRU9GCisJY2F0IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgInNwYWNlIGFmdGVyIG1hcmsiIGVycgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTOiBscyB3aXRoIGdhcmJhZ2UgYWZ0ZXIgc2hhMSBtdXN0IGZhaWwnICcKKwlzaGExPSQoZ3JlcCA6MzAyIG1hcmtzIHwgY3V0IC1kXCAgLWYyKSAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBmYXN0LWltcG9ydCAtLWltcG9ydC1tYXJrcz1tYXJrcyA8PC1FT0YgMj5lcnIgJiYKKwlscyAke3NoYTF9eCBoZWxsby5jCisJRU9GCisJY2F0IGVyciAmJgorCXRlc3RfaTE4bmdyZXAgInNwYWNlIGFmdGVyIHRyZWUtaXNoIiBlcnIKKycKKworIyMjCisjIyMgc2VyaWVzIFQgKGxzKQorIyMjCisjIFNldHVwIGlzIGNhcnJpZWQgb3ZlciBmcm9tIHNlcmllcyBTLgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUOiBscyByb290IHRyZWUnICcKKwlzZWQgLWUgInMvWlwkLy8iID5leHBlY3QgPDwtRU9GICYmCisJMDQwMDAwIHRyZWUgJChnaXQgcmV2LXBhcnNlIFNee3RyZWV9KQlaCisJRU9GCisJc2hhMT0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgUykgJiYKKwlnaXQgZmFzdC1pbXBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3MgPDwtRU9GID5hY3R1YWwgJiYKKwlscyAkc2hhMSAiIgorCUVPRgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVDogZGVsZXRlIGJyYW5jaCcgJworCWdpdCBicmFuY2ggdG8tZGVsZXRlICYmCisJZ2l0IGZhc3QtaW1wb3J0IDw8LUVPRiAmJgorCXJlc2V0IHJlZnMvaGVhZHMvdG8tZGVsZXRlCisJZnJvbSAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisJRU9GCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL3RvLWRlbGV0ZQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdUOiBlbXB0eSByZXNldCBkb2VzbnQgZGVsZXRlIGJyYW5jaCcgJworCWdpdCBicmFuY2ggbm90LXRvLWRlbGV0ZSAmJgorCWdpdCBmYXN0LWltcG9ydCA8PC1FT0YgJiYKKwlyZXNldCByZWZzL2hlYWRzL25vdC10by1kZWxldGUKKwlFT0YKKwlnaXQgc2hvdy1yZWYgJiYKKwlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvbm90LXRvLWRlbGV0ZQorJworCisjIyMKKyMjIyBzZXJpZXMgVSAoZmlsZWRlbGV0ZSkKKyMjIworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9VCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3Rlc3Qgc2V0dXAKK0NPTU1JVAorTSAxMDA2NDQgaW5saW5lIGhlbGxvLmMKK2RhdGEgPDxCTE9CCitibG9iIDEKK0JMT0IKK00gMTAwNjQ0IGlubGluZSBnb29kL25pZ2h0LnR4dAorZGF0YSA8PEJMT0IKK3NsZWVwIHdlbGwKK0JMT0IKK00gMTAwNjQ0IGlubGluZSBnb29kL2J5ZS50eHQKK2RhdGEgPDxCTE9CCithdSByZXZvaXIKK0JMT0IKKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1U6IGluaXRpYWxpemUgZm9yIFUgdGVzdHMnICcKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0CisnCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL1UKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZGVsZXRlIGdvb2QvbmlnaHQudHh0CitDT01NSVQKK2Zyb20gcmVmcy9oZWFkcy9VXjAKK0QgZ29vZC9uaWdodC50eHQKKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1U6IGZpbGVkZWxldGUgZmlsZSBzdWNjZWVkcycgJworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzoxMDA2NDQgMDAwMDAwIDI5MDdlYmI0YmY4NWQ5MWJmMDcxNmJiM2JkOGE2OGVmNDhkNmRhNzYgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWdvb2QvbmlnaHQudHh0CitFT0YKKworZ2l0IGRpZmYtdHJlZSAtTSAtciBVXjEgVSA+YWN0dWFsCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1U6IHZhbGlkYXRlIGZpbGUgZGVsZXRlIHJlc3VsdCcgJworCWNvbXBhcmVfZGlmZl9yYXcgZXhwZWN0IGFjdHVhbAorJworCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9VCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2RlbGV0ZSBnb29kIGRpcgorQ09NTUlUCitmcm9tIHJlZnMvaGVhZHMvVV4wCitEIGdvb2QKKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1U6IGZpbGVkZWxldGUgZGlyZWN0b3J5IHN1Y2NlZWRzJyAnCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dAorJworCitjYXQgPmV4cGVjdCA8PEVPRgorOjEwMDY0NCAwMDAwMDAgNjljYjc1NzkyZjU1MTIzZDgzODljMTU2YjBiNDFjMmZmMDBlZDUwNyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEQJZ29vZC9ieWUudHh0CitFT0YKKworZ2l0IGRpZmYtdHJlZSAtTSAtciBVXjEgVSA+YWN0dWFsCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1U6IHZhbGlkYXRlIGRpcmVjdG9yeSBkZWxldGUgcmVzdWx0JyAnCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL2hlYWRzL1UKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorbXVzdCBzdWNjZWVkCitDT01NSVQKK2Zyb20gcmVmcy9oZWFkcy9VXjAKK0QgIiIKKworSU5QVVRfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1U6IGZpbGVkZWxldGUgcm9vdCBzdWNjZWVkcycgJworICAgIGdpdCBmYXN0LWltcG9ydCA8aW5wdXQKKycKKworY2F0ID5leHBlY3QgPDxFT0YKKzoxMDA2NDQgMDAwMDAwIGMxODE0N2RjNjQ4NDgxZWViNjVkYzVlNjY2Mjg0MjlhNjQ4NDMzMjcgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBECWhlbGxvLmMKK0VPRgorCitnaXQgZGlmZi10cmVlIC1NIC1yIFVeMSBVID5hY3R1YWwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnVTogdmFsaWRhdGUgcm9vdCBkZWxldGUgcmVzdWx0JyAnCisJY29tcGFyZV9kaWZmX3JhdyBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTMwMS1mYXN0LWltcG9ydC1ub3Rlcy5zaCBiL3QvdDkzMDEtZmFzdC1pbXBvcnQtbm90ZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODNhY2Y2OAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkzMDEtZmFzdC1pbXBvcnQtbm90ZXMuc2gKQEAgLTAsMCArMSw2ODIgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgSm9oYW4gSGVybGFuZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGdpdCBmYXN0LWltcG9ydCBvZiBub3RlcyBvYmplY3RzJworLiAuL3Rlc3QtbGliLnNoCisKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZmlyc3QgY29tbWl0CitDT01NSVQKKworTSA2NDQgaW5saW5lIGZvbworZGF0YSA8PEVPRgorZmlsZSBmb28gaW4gZmlyc3QgY29tbWl0CitFT0YKKworTSA3NTUgaW5saW5lIGJhcgorZGF0YSA8PEVPRgorZmlsZSBiYXIgaW4gZmlyc3QgY29tbWl0CitFT0YKKworTSA2NDQgaW5saW5lIGJhei94eXp6eQorZGF0YSA8PEVPRgorZmlsZSBiYXoveHl6enkgaW4gZmlyc3QgY29tbWl0CitFT0YKKworY29tbWl0IHJlZnMvaGVhZHMvbWFzdGVyCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3NlY29uZCBjb21taXQKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZm9vCitkYXRhIDw8RU9GCitmaWxlIGZvbyBpbiBzZWNvbmQgY29tbWl0CitFT0YKKworTSA3NTUgaW5saW5lIGJhei94eXp6eQorZGF0YSA8PEVPRgorZmlsZSBiYXoveHl6enkgaW4gc2Vjb25kIGNvbW1pdAorRU9GCisKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCit0aGlyZCBjb21taXQKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgZm9vCitkYXRhIDw8RU9GCitmaWxlIGZvbyBpbiB0aGlyZCBjb21taXQKK0VPRgorCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorZm91cnRoIGNvbW1pdAorQ09NTUlUCisKK00gNzU1IGlubGluZSBiYXIKK2RhdGEgPDxFT0YKK2ZpbGUgYmFyIGluIGZvdXJ0aCBjb21taXQKK0VPRgorCitJTlBVVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIG1hc3RlciBicmFuY2gnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlnaXQgd2hhdGNoYW5nZWQgbWFzdGVyCisnCisKK2NvbW1pdDQ9JChnaXQgcmV2LXBhcnNlIHJlZnMvaGVhZHMvbWFzdGVyKQorY29tbWl0Mz0kKGdpdCByZXYtcGFyc2UgIiRjb21taXQ0XiIpCitjb21taXQyPSQoZ2l0IHJldi1wYXJzZSAiJGNvbW1pdDR+MiIpCitjb21taXQxPSQoZ2l0IHJldi1wYXJzZSAiJGNvbW1pdDR+MyIpCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmaXJzdCBub3RlcyBjb21taXQKK0NPTU1JVAorCitNIDY0NCBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK2ZpcnN0IG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRU9GCisKK00gNzU1IGlubGluZSAkY29tbWl0MgorZGF0YSA8PEVPRgorZmlyc3Qgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdAorRU9GCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBjb21taXQKKyAgICBmaXJzdCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIG5vdGVzIHdpdGggc2ltcGxlIE0gY29tbWFuZCcgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy90ZXN0IGdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitmZWF0dXJlIG5vdGVzCitjb21taXQgcmVmcy9ub3Rlcy90ZXN0Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3NlY29uZCBub3RlcyBjb21taXQKK0NPTU1JVAorCitmcm9tIHJlZnMvbm90ZXMvdGVzdF4wCitOIGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgorZmlyc3Qgbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDQKK2RhdGEgPDxFT0YKK2ZpcnN0IG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKK0VPRgorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgZm91cnRoIGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBmaXJzdCBub3RlIGZvciB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgY29tbWl0CisgICAgZmlyc3Qgbm90ZSBmb3Igc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IGNvbW1pdAorICAgIGZpcnN0IG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgbm90ZXMgd2l0aCBzaW1wbGUgTiBjb21tYW5kJyAnCisKKwlnaXQgZmFzdC1pbXBvcnQgPGlucHV0ICYmCisJR0lUX05PVEVTX1JFRj1yZWZzL25vdGVzL3Rlc3QgZ2l0IGxvZyB8IGdyZXAgIl4gICAgIiA+IGFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKworJworCit0ZXN0X3RpY2sKK2NhdCA+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL3Rlc3QKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAordGhpcmQgbm90ZXMgY29tbWl0CitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL3Rlc3ReMAorTiBpbmxpbmUgJGNvbW1pdDEKK2RhdGEgPDxFT0YKK3NlY29uZCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MgorZGF0YSA8PEVPRgorc2Vjb25kIG5vdGUgZm9yIHNlY29uZCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgorc2Vjb25kIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQ0CitkYXRhIDw8RU9GCitzZWNvbmQgbm90ZSBmb3IgZm91cnRoIGNvbW1pdAorRU9GCisKK0lOUFVUX0VORAorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgc2Vjb25kIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBzZWNvbmQgbm90ZSBmb3IgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIGNvbW1pdAorICAgIHNlY29uZCBub3RlIGZvciBzZWNvbmQgY29tbWl0CisgICAgZmlyc3QgY29tbWl0CisgICAgc2Vjb25kIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRVhQRUNUX0VORAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1cGRhdGUgZXhpc3Rpbmcgbm90ZXMgd2l0aCBOIGNvbW1hbmQnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvdGVzdAorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitmb3VydGggbm90ZXMgY29tbWl0CitDT01NSVQKKworZnJvbSByZWZzL25vdGVzL3Rlc3ReMAorTSA2NDQgaW5saW5lICQoZWNobyAiJGNvbW1pdDMiIHwgc2VkICJzfF4uLnwmL3wiKQorZGF0YSA8PEVPRgorcHJlZml4IG9mIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorRU9GCisKK00gNjQ0IGlubGluZSAkKGVjaG8gIiRjb21taXQ0IiB8IHNlZCAic3xeLi58Ji98IikKK2RhdGEgPDxFT0YKK3ByZWZpeCBvZiBub3RlIGZvciBmb3VydGggY29tbWl0CitFT0YKKworTSA2NDQgaW5saW5lICQoZWNobyAiJGNvbW1pdDQiIHwgc2VkICJzfF5cKC4uXClcKC4uXCl8XDEvXDIvfCIpCitkYXRhIDw8RU9GCitwcmUtcHJlZml4IG9mIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDIKK2RhdGEgPDxFT0YKK3RoaXJkIG5vdGUgZm9yIHNlY29uZCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MworZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworTiBpbmxpbmUgJGNvbW1pdDQKK2RhdGEgPDxFT0YKK3RoaXJkIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKK0VPRgorCisKK0lOUFVUX0VORAorCit3aGl0ZXNwYWNlPSIgICAgIgorCitjYXQgPmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBmb3VydGggY29tbWl0CisgICAgcHJlLXByZWZpeCBvZiBub3RlIGZvciBmb3VydGggY29tbWl0Ciskd2hpdGVzcGFjZQorICAgIHByZWZpeCBvZiBub3RlIGZvciBmb3VydGggY29tbWl0Ciskd2hpdGVzcGFjZQorICAgIHRoaXJkIG5vdGUgZm9yIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBwcmVmaXggb2Ygbm90ZSBmb3IgdGhpcmQgY29tbWl0Ciskd2hpdGVzcGFjZQorICAgIHRoaXJkIG5vdGUgZm9yIHRoaXJkIGNvbW1pdAorICAgIHNlY29uZCBjb21taXQKKyAgICB0aGlyZCBub3RlIGZvciBzZWNvbmQgY29tbWl0CisgICAgZmlyc3QgY29tbWl0CisgICAgdGhpcmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFWFBFQ1RfRU5ECisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBjb25jYXRlbnRhdGlvbiBub3RlcyB3aXRoIE0gY29tbWFuZCcgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy90ZXN0IGdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy90ZXN0Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2ZpZnRoIG5vdGVzIGNvbW1pdAorQ09NTUlUCisKK2Zyb20gcmVmcy9ub3Rlcy90ZXN0XjAKK2RlbGV0ZWFsbAorCitJTlBVVF9FTkQKKworY2F0ID5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgZm91cnRoIGNvbW1pdAorICAgIHRoaXJkIGNvbW1pdAorICAgIHNlY29uZCBjb21taXQKKyAgICBmaXJzdCBjb21taXQKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgZGVsZXRlYWxsIGFsc28gcmVtb3ZlcyBub3RlcycgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy90ZXN0IGdpdCBsb2cgfCBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy90ZXN0Citjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK3NpeHRoIG5vdGVzIGNvbW1pdAorQ09NTUlUCisKK2Zyb20gcmVmcy9ub3Rlcy90ZXN0XjAKK00gNjQ0IGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgordGhpcmQgbm90ZSBmb3IgZmlyc3QgY29tbWl0CitFT0YKKworTSA2NDQgaW5saW5lICRjb21taXQzCitkYXRhIDw8RU9GCit0aGlyZCBub3RlIGZvciB0aGlyZCBjb21taXQKK0VPRgorCitOIGlubGluZSAkY29tbWl0MQorZGF0YSA8PEVPRgorZm91cnRoIG5vdGUgZm9yIGZpcnN0IGNvbW1pdAorRU9GCisKK04gaW5saW5lICRjb21taXQzCitkYXRhIDw8RU9GCitmb3VydGggbm90ZSBmb3IgdGhpcmQgY29tbWl0CitFT0YKKworSU5QVVRfRU5ECisKK2NhdCA+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGZvdXJ0aCBjb21taXQKKyAgICB0aGlyZCBjb21taXQKKyAgICBmb3VydGggbm90ZSBmb3IgdGhpcmQgY29tbWl0CisgICAgc2Vjb25kIGNvbW1pdAorICAgIGZpcnN0IGNvbW1pdAorICAgIGZvdXJ0aCBub3RlIGZvciBmaXJzdCBjb21taXQKK0VYUEVDVF9FTkQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbGF0ZXIgTiBjb21tYW5kcyBvdmVycmlkZSBlYXJsaWVyIE0gY29tbWFuZHMnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvdGVzdCBnaXQgbG9nIHwgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKKyMgV3JpdGUgZmFzdC1pbXBvcnQgY29tbWFuZHMgdG8gY3JlYXRlIHRoZSBnaXZlbiBudW1iZXIgb2YgY29tbWl0cworZmFzdF9pbXBvcnRfY29tbWl0cyAoKSB7CisJbXlfcmVmPSQxCisJbXlfbnVtX2NvbW1pdHM9JDIKKwlteV9hcHBlbmRfdG9fZmlsZT0kMworCW15X2k9MAorCXdoaWxlIHRlc3QgJG15X2kgLWx0ICRteV9udW1fY29tbWl0cworCWRvCisJCW15X2k9JCgoJG15X2kgKyAxKSkKKwkJdGVzdF90aWNrCisJCWNhdCA+PiIkbXlfYXBwZW5kX3RvX2ZpbGUiIDw8SU5QVVRfRU5ECitjb21taXQgJG15X3JlZgorbWFyayA6JG15X2kKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0ICMkbXlfaQorQ09NTUlUCisKK00gNjQ0IGlubGluZSBmaWxlCitkYXRhIDw8RU9GCitmaWxlIGNvbnRlbnRzIGluIGNvbW1pdCAjJG15X2kKK0VPRgorCitJTlBVVF9FTkQKKwlkb25lCit9CisKKyMgV3JpdGUgZmFzdC1pbXBvcnQgY29tbWFuZHMgdG8gY3JlYXRlIHRoZSBnaXZlbiBudW1iZXIgb2Ygbm90ZXMgYW5ub3RhdGluZworIyB0aGUgY29tbWl0cyBjcmVhdGVkIGJ5IGZhc3RfaW1wb3J0X2NvbW1pdHMoKQorZmFzdF9pbXBvcnRfbm90ZXMgKCkgeworCW15X25vdGVzX3JlZj0kMQorCW15X251bV9jb21taXRzPSQyCisJbXlfYXBwZW5kX3RvX2ZpbGU9JDMKKwlteV9ub3RlX2FwcGVuZD0kNAorCXRlc3RfdGljaworCWNhdCA+PiIkbXlfYXBwZW5kX3RvX2ZpbGUiIDw8SU5QVVRfRU5ECitjb21taXQgJG15X25vdGVzX3JlZgorY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCitjb21taXR0aW5nICRteV9udW1fY29tbWl0cyBub3RlcworQ09NTUlUCisKK0lOUFVUX0VORAorCisJbXlfaT0wCisJd2hpbGUgdGVzdCAkbXlfaSAtbHQgJG15X251bV9jb21taXRzCisJZG8KKwkJbXlfaT0kKCgkbXlfaSArIDEpKQorCQljYXQgPj4iJG15X2FwcGVuZF90b19maWxlIiA8PElOUFVUX0VORAorTiBpbmxpbmUgOiRteV9pCitkYXRhIDw8RU9GCitub3RlIGZvciBjb21taXQgIyRteV9pJG15X25vdGVfYXBwZW5kCitFT0YKKworSU5QVVRfRU5ECisJZG9uZQorfQorCisKK3JtIGlucHV0IGV4cGVjdAorbnVtX2NvbW1pdHM9NDAwCisjIENyZWF0ZSBsb3RzIG9mIGNvbW1pdHMKK2Zhc3RfaW1wb3J0X2NvbW1pdHMgInJlZnMvaGVhZHMvbWFueV9jb21taXRzIiAkbnVtX2NvbW1pdHMgaW5wdXQKKyMgQ3JlYXRlIG9uZSBub3RlIHBlciBhYm92ZSBjb21taXQKK2Zhc3RfaW1wb3J0X25vdGVzICJyZWZzL25vdGVzL21hbnlfbm90ZXMiICRudW1fY29tbWl0cyBpbnB1dAorIyBBZGQgYSBjb3VwbGUgb2Ygbm9uLW5vdGVzIGFzIHdlbGwKK3Rlc3RfdGljaworY2F0ID4+aW5wdXQgPDxJTlBVVF9FTkQKK2NvbW1pdCByZWZzL25vdGVzL21hbnlfbm90ZXMKK2NvbW1pdHRlciAkR0lUX0NPTU1JVFRFUl9OQU1FIDwkR0lUX0NPTU1JVFRFUl9FTUFJTD4gJEdJVF9DT01NSVRURVJfREFURQorZGF0YSA8PENPTU1JVAorY29tbWl0dGluZyBzb21lIG5vbi1ub3RlcyB0byB0aGUgbm90ZXMgdHJlZQorQ09NTUlUCisKK00gNzU1IGlubGluZSBmb29iYXIvbm9uLW5vdGUudHh0CitkYXRhIDw8RU9GCitUaGlzIGlzIG5vdCBhIG5vdGUsIGJ1dCByYXRoZXIgYSByZWd1bGFyIGZpbGUgcmVzaWRpbmcgaW4gYSBub3RlcyB0cmVlCitFT0YKKworTSA2NDQgaW5saW5lIGRlYWRiZWVmCitkYXRhIDw8RU9GCitOb24tbm90ZSBmaWxlCitFT0YKKworTSA2NDQgaW5saW5lIGRlL2FkYmVlZgorZGF0YSA8PEVPRgorQW5vdGhlciBub24tbm90ZSBmaWxlCitFT0YKKworSU5QVVRfRU5ECisjIEZpbmFsbHkgY3JlYXRlIHRoZSBleHBlY3RlZCBvdXRwdXQgZnJvbSBhbGwgdGhlc2Ugbm90ZXMgYW5kIGNvbW1pdHMKK2k9JG51bV9jb21taXRzCit3aGlsZSB0ZXN0ICRpIC1ndCAwCitkbworCWNhdCA+PmV4cGVjdCA8PEVYUEVDVF9FTkQKKyAgICBjb21taXQgIyRpCisgICAgbm90ZSBmb3IgY29tbWl0ICMkaQorRVhQRUNUX0VORAorCWk9JCgoJGkgLSAxKSkKK2RvbmUKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGxvdHMgb2YgY29tbWl0cyBhbmQgbm90ZXMnICcKKworCWdpdCBmYXN0LWltcG9ydCA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvbWFueV9ub3RlcyBnaXQgbG9nIHJlZnMvaGVhZHMvbWFueV9jb21taXRzIHwKKwkgICAgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IGxvdHMgb2Ygbm90ZXMgdHJpZ2dlciBhIGZhbm91dCBzY2hlbWUnICcKKworCSMgTm9uZSBvZiB0aGUgZW50cmllcyBpbiB0aGUgdG9wLWxldmVsIG5vdGVzIHRyZWUgc2hvdWxkIGJlIGEgZnVsbCBTSEExCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgcmVmcy9ub3Rlcy9tYW55X25vdGVzIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQlpZiB0ZXN0ICQoZXhwciBsZW5ndGggIiRwYXRoIikgLWdlIDQwCisJCXRoZW4KKwkJCXJldHVybiAxCisJCWZpCisJZG9uZQorCisnCisKK2NhdCA+PmV4cGVjdF9ub24tbm90ZTEgPDwgRU9GCitUaGlzIGlzIG5vdCBhIG5vdGUsIGJ1dCByYXRoZXIgYSByZWd1bGFyIGZpbGUgcmVzaWRpbmcgaW4gYSBub3RlcyB0cmVlCitFT0YKKworY2F0ID4+ZXhwZWN0X25vbi1ub3RlMiA8PCBFT0YKK05vbi1ub3RlIGZpbGUKK0VPRgorCitjYXQgPj5leHBlY3Rfbm9uLW5vdGUzIDw8IEVPRgorQW5vdGhlciBub24tbm90ZSBmaWxlCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbm9uLW5vdGVzIGFyZSB1bnRvdWNoZWQgYnkgYSBmYW5vdXQgY2hhbmdlJyAnCisKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9tYW55X25vdGVzOmZvb2Jhci9ub24tbm90ZS50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUxIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6ZGVhZGJlZWYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUyIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6ZGUvYWRiZWVmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbi1ub3RlMyBhY3R1YWwKKworJworCisjIENoYW5nZSB0aGUgbm90ZXMgZm9yIHRoZSB0aHJlZSB0b3AgY29tbWl0cwordGVzdF90aWNrCitjYXQgPmlucHV0IDw8SU5QVVRfRU5ECitjb21taXQgcmVmcy9ub3Rlcy9tYW55X25vdGVzCitjb21taXR0ZXIgJEdJVF9DT01NSVRURVJfTkFNRSA8JEdJVF9DT01NSVRURVJfRU1BSUw+ICRHSVRfQ09NTUlUVEVSX0RBVEUKK2RhdGEgPDxDT01NSVQKK2NoYW5naW5nIG5vdGVzIGZvciB0aGUgdG9wIHRocmVlIGNvbW1pdHMKK0NPTU1JVAorZnJvbSByZWZzL25vdGVzL21hbnlfbm90ZXNeMAorSU5QVVRfRU5ECisKK3JtIGV4cGVjdAoraT0kbnVtX2NvbW1pdHMKK2o9MAord2hpbGUgdGVzdCAkaiAtbHQgMworZG8KKwljYXQgPj5pbnB1dCA8PElOUFVUX0VORAorTiBpbmxpbmUgcmVmcy9oZWFkcy9tYW55X2NvbW1pdHN+JGoKK2RhdGEgPDxFT0YKK2NoYW5nZWQgbm90ZSBmb3IgY29tbWl0ICMkaQorRU9GCitJTlBVVF9FTkQKKwljYXQgPj5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgY29tbWl0ICMkaQorICAgIGNoYW5nZWQgbm90ZSBmb3IgY29tbWl0ICMkaQorRVhQRUNUX0VORAorCWk9JCgoJGkgLSAxKSkKKwlqPSQoKCRqICsgMSkpCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NoYW5nZSBhIGZldyBleGlzdGluZyBub3RlcycgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9tYW55X25vdGVzIGdpdCBsb2cgLW4zIHJlZnMvaGVhZHMvbWFueV9jb21taXRzIHwKKwkgICAgZ3JlcCAiXiAgICAiID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZlcmlmeSB0aGF0IGNoYW5naW5nIG5vdGVzIHJlc3BlY3QgZXhpc3RpbmcgZmFub3V0JyAnCisKKwkjIE5vbmUgb2YgdGhlIGVudHJpZXMgaW4gdGhlIHRvcC1sZXZlbCBub3RlcyB0cmVlIHNob3VsZCBiZSBhIGZ1bGwgU0hBMQorCWdpdCBscy10cmVlIC0tbmFtZS1vbmx5IHJlZnMvbm90ZXMvbWFueV9ub3RlcyB8CisJd2hpbGUgcmVhZCBwYXRoCisJZG8KKwkJaWYgdGVzdCAkKGV4cHIgbGVuZ3RoICIkcGF0aCIpIC1nZSA0MAorCQl0aGVuCisJCQlyZXR1cm4gMQorCQlmaQorCWRvbmUKKworJworCityZW1haW5pbmdfbm90ZXM9MTAKK3Rlc3RfdGljaworY2F0ID5pbnB1dCA8PElOUFVUX0VORAorY29tbWl0IHJlZnMvbm90ZXMvbWFueV9ub3RlcworY29tbWl0dGVyICRHSVRfQ09NTUlUVEVSX05BTUUgPCRHSVRfQ09NTUlUVEVSX0VNQUlMPiAkR0lUX0NPTU1JVFRFUl9EQVRFCitkYXRhIDw8Q09NTUlUCityZW1vdmluZyBhbGwgbm90ZXMgYnV0ICRyZW1haW5pbmdfbm90ZXMKK0NPTU1JVAorZnJvbSByZWZzL25vdGVzL21hbnlfbm90ZXNeMAorSU5QVVRfRU5ECisKK2k9JCgoJG51bV9jb21taXRzIC0gJHJlbWFpbmluZ19ub3RlcykpCitmb3Igc2hhMSBpbiAkKGdpdCByZXYtbGlzdCAtbiAkaSByZWZzL2hlYWRzL21hbnlfY29tbWl0cykKK2RvCisJY2F0ID4+aW5wdXQgPDxJTlBVVF9FTkQKK04gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAkc2hhMQorSU5QVVRfRU5ECitkb25lCisKK2k9JG51bV9jb21taXRzCitybSBleHBlY3QKK3doaWxlIHRlc3QgJGkgLWd0IDAKK2RvCisJY2F0ID4+ZXhwZWN0IDw8RVhQRUNUX0VORAorICAgIGNvbW1pdCAjJGkKK0VYUEVDVF9FTkQKKwlpZiB0ZXN0ICRpIC1sZSAkcmVtYWluaW5nX25vdGVzCisJdGhlbgorCQljYXQgPj5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgbm90ZSBmb3IgY29tbWl0ICMkaQorRVhQRUNUX0VORAorCWZpCisJaT0kKCgkaSAtIDEpKQorZG9uZQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgbG90cyBvZiBub3RlcycgJworCisJZ2l0IGZhc3QtaW1wb3J0IDxpbnB1dCAmJgorCUdJVF9OT1RFU19SRUY9cmVmcy9ub3Rlcy9tYW55X25vdGVzIGdpdCBsb2cgcmVmcy9oZWFkcy9tYW55X2NvbW1pdHMgfAorCSAgICBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgcmVtb3Zpbmcgbm90ZXMgdHJpZ2dlciBmYW5vdXQgY29uc29saWRhdGlvbicgJworCisJIyBBbGwgZW50cmllcyBpbiB0aGUgdG9wLWxldmVsIG5vdGVzIHRyZWUgc2hvdWxkIGJlIGEgZnVsbCBTSEExCisJZ2l0IGxzLXRyZWUgLS1uYW1lLW9ubHkgLXIgcmVmcy9ub3Rlcy9tYW55X25vdGVzIHwKKwl3aGlsZSByZWFkIHBhdGgKKwlkbworCQkjIEV4cGxpY2l0bHkgaWdub3JlIHRoZSBub24tbm90ZSBwYXRocworCQl0ZXN0ICIkcGF0aCIgPSAiZm9vYmFyL25vbi1ub3RlLnR4dCIgJiYgY29udGludWUKKwkJdGVzdCAiJHBhdGgiID0gImRlYWRiZWVmIiAmJiBjb250aW51ZQorCQl0ZXN0ICIkcGF0aCIgPSAiZGUvYWRiZWVmIiAmJiBjb250aW51ZQorCisJCWlmIHRlc3QgJChleHByIGxlbmd0aCAiJHBhdGgiKSAtbmUgNDAKKwkJdGhlbgorCQkJcmV0dXJuIDEKKwkJZmkKKwlkb25lCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmVyaWZ5IHRoYXQgbm9uLW5vdGVzIGFyZSB1bnRvdWNoZWQgYnkgYSBmYW5vdXQgY2hhbmdlJyAnCisKKwlnaXQgY2F0LWZpbGUgLXAgcmVmcy9ub3Rlcy9tYW55X25vdGVzOmZvb2Jhci9ub24tbm90ZS50eHQgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUxIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6ZGVhZGJlZWYgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3Rfbm9uLW5vdGUyIGFjdHVhbCAmJgorCWdpdCBjYXQtZmlsZSAtcCByZWZzL25vdGVzL21hbnlfbm90ZXM6ZGUvYWRiZWVmID4gYWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0X25vbi1ub3RlMyBhY3R1YWwKKworJworCisKK3JtIGlucHV0IGV4cGVjdAorbnVtX25vdGVzX3JlZnM9MTAKK251bV9jb21taXRzPTE2Citzb21lX2NvbW1pdHM9OAorIyBDcmVhdGUgY29tbWl0cworZmFzdF9pbXBvcnRfY29tbWl0cyAicmVmcy9oZWFkcy9tb3JlX2NvbW1pdHMiICRudW1fY29tbWl0cyBpbnB1dAorIyBDcmVhdGUgb25lIG5vdGUgcGVyIGFib3ZlIGNvbW1pdCBwZXIgbm90ZXMgcmVmCitpPTAKK3doaWxlIHRlc3QgJGkgLWx0ICRudW1fbm90ZXNfcmVmcworZG8KKwlpPSQoKCRpICsgMSkpCisJZmFzdF9pbXBvcnRfbm90ZXMgInJlZnMvbm90ZXMvbW9yZV9ub3Rlc18kaSIgJG51bV9jb21taXRzIGlucHV0Citkb25lCisjIFRyaWdnZXIgYnJhbmNoIHJlbG9hZGluZyBpbiBnaXQtZmFzdC1pbXBvcnQgYnkgcmVwZWF0aW5nIHRoZSBub3RlIGNyZWF0aW9uCitpPTAKK3doaWxlIHRlc3QgJGkgLWx0ICRudW1fbm90ZXNfcmVmcworZG8KKwlpPSQoKCRpICsgMSkpCisJZmFzdF9pbXBvcnRfbm90ZXMgInJlZnMvbm90ZXMvbW9yZV9ub3Rlc18kaSIgJHNvbWVfY29tbWl0cyBpbnB1dCAiICgyKSIKK2RvbmUKKyMgRmluYWxseSBjcmVhdGUgdGhlIGV4cGVjdGVkIG91dHB1dCBmcm9tIHRoZSBub3RlcyBpbiByZWZzL25vdGVzL21vcmVfbm90ZXNfMQoraT0kbnVtX2NvbW1pdHMKK3doaWxlIHRlc3QgJGkgLWd0IDAKK2RvCisJbm90ZV9kYXRhPSJub3RlIGZvciBjb21taXQgIyRpIgorCWlmIHRlc3QgJGkgLWxlICRzb21lX2NvbW1pdHMKKwl0aGVuCisJCW5vdGVfZGF0YT0iJG5vdGVfZGF0YSAoMikiCisJZmkKKwljYXQgPj5leHBlY3QgPDxFWFBFQ1RfRU5ECisgICAgY29tbWl0ICMkaQorICAgICRub3RlX2RhdGEKK0VYUEVDVF9FTkQKKwlpPSQoKCRpIC0gMSkpCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImFkZCBub3RlcyB0byAkbnVtX2NvbW1pdHMgY29tbWl0cyBpbiBlYWNoIG9mICRudW1fbm90ZXNfcmVmcyByZWZzIiAnCisKKwlnaXQgZmFzdC1pbXBvcnQgLS1hY3RpdmUtYnJhbmNoZXM9NSA8aW5wdXQgJiYKKwlHSVRfTk9URVNfUkVGPXJlZnMvbm90ZXMvbW9yZV9ub3Rlc18xIGdpdCBsb2cgcmVmcy9oZWFkcy9tb3JlX2NvbW1pdHMgfAorCSAgICBncmVwICJeICAgICIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5MzUwLWZhc3QtZXhwb3J0LnNoIGIvdC90OTM1MC1mYXN0LWV4cG9ydC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NmM4YjBhCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTM1MC1mYXN0LWV4cG9ydC5zaApAQCAtMCwwICsxLDUyNSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBmYXN0LWV4cG9ydCcKKy4gLi90ZXN0LWxpYi5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgJworCisJZWNobyBicmVhayBpdCA+IGZpbGUwICYmCisJZ2l0IGFkZCBmaWxlMCAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gV29obGF1ZiA+IGZpbGUgJiYKKwlnaXQgYWRkIGZpbGUgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwllY2hvIGRpZSBMdWZ0ID4gZmlsZSAmJgorCWVjaG8gZ2VodCBmcmlzY2ggPiBmaWxlMiAmJgorCWdpdCBhZGQgZmlsZSBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gc2Vjb25kICYmCisJZWNobyB1bmQgPiBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW0gdGhpcmQgZmlsZTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwlnaXQgdGFnIHJlaW4gJiYKKwlnaXQgY2hlY2tvdXQgLWIgd2VyIEhFQUReICYmCisJZWNobyBsYW5nZSA+IGZpbGUyICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBzaXR6dCBmaWxlMiAmJgorCXRlc3RfdGljayAmJgorCWdpdCB0YWcgLWEgLW0gdmFsZW50aW4gbXVzcyAmJgorCWdpdCBtZXJnZSAtcyBvdXJzIG1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZXhwb3J0IHwgZmFzdC1pbXBvcnQnICcKKworCU1BU1RFUj0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbWFzdGVyKSAmJgorCVJFSU49JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlaW4pICYmCisJV0VSPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSB3ZXIpICYmCisJTVVTUz0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgbXVzcykgJiYKKwlta2RpciBuZXcgJiYKKwlnaXQgLS1naXQtZGlyPW5ldy8uZ2l0IGluaXQgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1hbGwgfAorCShjZCBuZXcgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJIHRlc3QgJE1BU1RFUiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlcikgJiYKKwkgdGVzdCAkUkVJTiA9ICQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3RhZ3MvcmVpbikgJiYKKwkgdGVzdCAkV0VSID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvd2VyKSAmJgorCSB0ZXN0ICRNVVNTID0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvdGFncy9tdXNzKSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCBtYXN0ZXJ+Mi4ubWFzdGVyJyAnCisKKwlnaXQgZmFzdC1leHBvcnQgbWFzdGVyfjIuLm1hc3RlciB8CisJCXNlZCAicy9tYXN0ZXIvcGFydGlhbC8iIHwKKwkJKGNkIG5ldyAmJgorCQkgZ2l0IGZhc3QtaW1wb3J0ICYmCisJCSB0ZXN0ICRNQVNURVIgIT0gJChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcGFydGlhbCkgJiYKKwkJIGdpdCBkaWZmIC0tZXhpdC1jb2RlIG1hc3RlciBwYXJ0aWFsICYmCisJCSBnaXQgZGlmZiAtLWV4aXQtY29kZSBtYXN0ZXJeIHBhcnRpYWxeICYmCisJCSB0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHBhcnRpYWx+MikKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpc28tODg1OS0xJyAnCisKKwlnaXQgY29uZmlnIGkxOG4uY29tbWl0ZW5jb2RpbmcgSVNPODg1OS0xICYmCisJIyB1c2UgYXV0aG9yIGFuZCBjb21taXR0ZXIgbmFtZSBpbiBJU08tODg1OS0xIHRvIG1hdGNoIGl0LgorCS4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCXRlc3RfdGljayAmJgorCWVjaG8gcm9zdGVuID5maWxlICYmCisJZ2l0IGNvbW1pdCAtcyAtbSBkZW4gZmlsZSAmJgorCWdpdCBmYXN0LWV4cG9ydCB3ZXJeLi53ZXIgfAorCQlzZWQgInMvd2VyL2kxOG4vIiB8CisJCShjZCBuZXcgJiYKKwkJIGdpdCBmYXN0LWltcG9ydCAmJgorCQkgZ2l0IGNhdC1maWxlIGNvbW1pdCBpMThuIHwgZ3JlcCAiw4HDqcOtIMOzw7oiKQorCisnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQvZXhwb3J0LW1hcmtzJyAnCisKKwlnaXQgY2hlY2tvdXQgLWIgbWFya3MgbWFzdGVyICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tZXhwb3J0LW1hcmtzPXRtcC1tYXJrcyBIRUFEICYmCisJdGVzdCAtcyB0bXAtbWFya3MgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAzIHRtcC1tYXJrcyAmJgorCXRlc3QgJCgKKwkJZ2l0IGZhc3QtZXhwb3J0IC0taW1wb3J0LW1hcmtzPXRtcC1tYXJrc1wKKwkJLS1leHBvcnQtbWFya3M9dG1wLW1hcmtzIEhFQUQgfAorCQlncmVwIF5jb21taXQgfAorCQl3YyAtbCkgXAorCS1lcSAwICYmCisJZWNobyBjaGFuZ2UgPiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtbSAibGFzdCBjb21taXQiIGZpbGUgJiYKKwl0ZXN0ICQoCisJCWdpdCBmYXN0LWV4cG9ydCAtLWltcG9ydC1tYXJrcz10bXAtbWFya3MgXAorCQktLWV4cG9ydC1tYXJrcz10bXAtbWFya3MgSEVBRCB8CisJCWdyZXAgXmNvbW1pdFwgIHwKKwkJd2MgLWwpIFwKKwktZXEgMSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDQgdG1wLW1hcmtzCisKKycKKworY2F0ID4gc2lnbmVkLXRhZy1pbXBvcnQgPDwgRU9GCit0YWcgc2lnbi15b3VyLW5hbWUKK2Zyb20gJChnaXQgcmV2LXBhcnNlIEhFQUQpCit0YWdnZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTExOTkzIC0wNzAwCitkYXRhIDIxMAorQSBtZXNzYWdlIGZvciBhIHNpZ24KKy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCitWZXJzaW9uOiBHbnVQRyB2MS40LjUgKEdOVS9MaW51eCkKKworZmFrZWRzaWduYXR1cmVmYWtlZHNpZ25hdHVyZWZha2Vkc2lnbmF0dXJlZmFrZWRzaWduYXR1cmZha2Vkc2lnbgorYXR1cmVmYWtlZHNpZ25hdHVyZWZha2U9Cis9LzU5dgorLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0IHVwIGZha2VkIHNpZ25lZCB0YWcnICcKKworCWNhdCBzaWduZWQtdGFnLWltcG9ydCB8IGdpdCBmYXN0LWltcG9ydAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25lZC10YWdzPWFib3J0JyAnCisKKwl0ZXN0X211c3RfZmFpbCBnaXQgZmFzdC1leHBvcnQgLS1zaWduZWQtdGFncz1hYm9ydCBzaWduLXlvdXItbmFtZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25lZC10YWdzPXZlcmJhdGltJyAnCisKKwlnaXQgZmFzdC1leHBvcnQgLS1zaWduZWQtdGFncz12ZXJiYXRpbSBzaWduLXlvdXItbmFtZSA+IG91dHB1dCAmJgorCWdyZXAgUEdQIG91dHB1dAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZ25lZC10YWdzPXN0cmlwJyAnCisKKwlnaXQgZmFzdC1leHBvcnQgLS1zaWduZWQtdGFncz1zdHJpcCBzaWduLXlvdXItbmFtZSA+IG91dHB1dCAmJgorCSEgZ3JlcCBQR1Agb3V0cHV0CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lnbmVkLXRhZ3M9d2Fybi1zdHJpcCcgJworCWdpdCBmYXN0LWV4cG9ydCAtLXNpZ25lZC10YWdzPXdhcm4tc3RyaXAgc2lnbi15b3VyLW5hbWUgPm91dHB1dCAyPmVyciAmJgorCSEgZ3JlcCBQR1Agb3V0cHV0ICYmCisJdGVzdCAtcyBlcnIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc3VibW9kdWxlJyAnCisKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJbWtkaXIgc3ViICYmCisJKAorCQljZCBzdWIgJiYKKwkJZ2l0IGluaXQgICYmCisJCWVjaG8gdGVzdCBmaWxlID4gZmlsZSAmJgorCQlnaXQgYWRkIGZpbGUgJiYKKwkJZ2l0IGNvbW1pdCAtbSBzdWJfaW5pdGlhbAorCSkgJiYKKwlnaXQgc3VibW9kdWxlIGFkZCAiYHB3ZGAvc3ViIiBzdWIgJiYKKwlnaXQgY29tbWl0IC1tIGluaXRpYWwgJiYKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCWNkIHN1YiAmJgorCQllY2hvIG1vcmUgZGF0YSA+PiBmaWxlICYmCisJCWdpdCBhZGQgZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tIHN1Yl9zZWNvbmQKKwkpICYmCisJZ2l0IGFkZCBzdWIgJiYKKwlnaXQgY29tbWl0IC1tIHNlY29uZAorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1vZHVsZSBmYXN0LWV4cG9ydCB8IGZhc3QtaW1wb3J0JyAnCisKKwlTVUJFTlQxPSQoZ2l0IGxzLXRyZWUgbWFzdGVyXiBzdWIpICYmCisJU1VCRU5UMj0kKGdpdCBscy10cmVlIG1hc3RlciBzdWIpICYmCisJcm0gLXJmIG5ldyAmJgorCW1rZGlyIG5ldyAmJgorCWdpdCAtLWdpdC1kaXI9bmV3Ly5naXQgaW5pdCAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXNpZ25lZC10YWdzPXN0cmlwIC0tYWxsIHwKKwkoY2QgbmV3ICYmCisJIGdpdCBmYXN0LWltcG9ydCAmJgorCSB0ZXN0ICIkU1VCRU5UMSIgPSAiJChnaXQgbHMtdHJlZSByZWZzL2hlYWRzL21hc3Rlcl4gc3ViKSIgJiYKKwkgdGVzdCAiJFNVQkVOVDIiID0gIiQoZ2l0IGxzLXRyZWUgcmVmcy9oZWFkcy9tYXN0ZXIgc3ViKSIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgc3VibW9kdWxlIGluaXQgJiYKKwkgZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgJiYKKwkgY21wIHN1Yi9maWxlIC4uL3N1Yi9maWxlKQorCisnCisKK0dJVF9BVVRIT1JfTkFNRT0nQSBVIFRob3InOyBleHBvcnQgR0lUX0FVVEhPUl9OQU1FCitHSVRfQ09NTUlUVEVSX05BTUU9J0MgTyBNaXR0ZXInOyBleHBvcnQgR0lUX0NPTU1JVFRFUl9OQU1FCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGNvcGllcycgJworCisJZ2l0IGNvbmZpZyAtLXVuc2V0IGkxOG4uY29tbWl0ZW5jb2RpbmcgJiYKKwlnaXQgY2hlY2tvdXQgLWIgY29weSByZWluICYmCisJZ2l0IG12IGZpbGUgZmlsZTMgJiYKKwlnaXQgY29tbWl0IC1tIG1vdmUxICYmCisJdGVzdF90aWNrICYmCisJY3AgZmlsZTIgZmlsZTQgJiYKKwlnaXQgYWRkIGZpbGU0ICYmCisJZ2l0IG12IGZpbGUyIGZpbGU1ICYmCisJZ2l0IGNvbW1pdCAtbSBjb3B5MSAmJgorCXRlc3RfdGljayAmJgorCWNwIGZpbGUzIGZpbGU2ICYmCisJZ2l0IGFkZCBmaWxlNiAmJgorCWdpdCBjb21taXQgLW0gY29weTIgJiYKKwl0ZXN0X3RpY2sgJiYKKwllY2hvIG1vcmUgdGV4dCA+PiBmaWxlNiAmJgorCWVjaG8gZXZlbiBtb3JlIHRleHQgPj4gZmlsZTYgJiYKKwlnaXQgYWRkIGZpbGU2ICYmCisJZ2l0IGNvbW1pdCAtbSBtb2RpZnkgJiYKKwl0ZXN0X3RpY2sgJiYKKwljcCBmaWxlNiBmaWxlNyAmJgorCWVjaG8gdGVzdCA+PiBmaWxlNyAmJgorCWdpdCBhZGQgZmlsZTcgJiYKKwlnaXQgY29tbWl0IC1tIGNvcHlfbW9kaWZ5CisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmFzdC1leHBvcnQgLUMgLUMgfCBmYXN0LWltcG9ydCcgJworCisJRU5UUlk9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IGNvcHkpICYmCisJcm0gLXJmIG5ldyAmJgorCW1rZGlyIG5ldyAmJgorCWdpdCAtLWdpdC1kaXI9bmV3Ly5naXQgaW5pdCAmJgorCWdpdCBmYXN0LWV4cG9ydCAtQyAtQyAtLXNpZ25lZC10YWdzPXN0cmlwIC0tYWxsID4gb3V0cHV0ICYmCisJZ3JlcCAiXkMgZmlsZTYgZmlsZTdcJCIgb3V0cHV0ICYmCisJY2F0IG91dHB1dCB8CisJKGNkIG5ldyAmJgorCSBnaXQgZmFzdC1pbXBvcnQgJiYKKwkgdGVzdCAkRU5UUlkgPSAkKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9oZWFkcy9jb3B5KSkKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmYXN0LWV4cG9ydCB8IGZhc3QtaW1wb3J0IHdoZW4gbWFzdGVyIGlzIHRhZ2dlZCcgJworCisJZ2l0IHRhZyAtbSBtc2cgbGFzdCAmJgorCWdpdCBmYXN0LWV4cG9ydCAtQyAtQyAtLXNpZ25lZC10YWdzPXN0cmlwIC0tYWxsID4gb3V0cHV0ICYmCisJdGVzdCAkKGdyZXAgLWMgIl50YWcgIiBvdXRwdXQpID0gMworCisnCisKK2NhdCA+IHRhZy1jb250ZW50IDw8IEVPRgorb2JqZWN0ICQoZ2l0IHJldi1wYXJzZSBIRUFEKQordHlwZSBjb21taXQKK3RhZyByb3N0ZW4KK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3BlIHdpdGggdGFnZ2VyLWxlc3MgdGFncycgJworCisJVEFHPSQoZ2l0IGhhc2gtb2JqZWN0IC10IHRhZyAtdyB0YWctY29udGVudCkgJiYKKwlnaXQgdXBkYXRlLXJlZiByZWZzL3RhZ3Mvc29ubmVuc2NoZWluICRUQUcgJiYKKwlnaXQgZmFzdC1leHBvcnQgLUMgLUMgLS1zaWduZWQtdGFncz1zdHJpcCAtLWFsbCA+IG91dHB1dCAmJgorCXRlc3QgJChncmVwIC1jICJedGFnICIgb3V0cHV0KSA9IDQgJiYKKwkhIGdyZXAgIlVuc3BlY2lmaWVkIFRhZ2dlciIgb3V0cHV0ICYmCisJZ2l0IGZhc3QtZXhwb3J0IC1DIC1DIC0tc2lnbmVkLXRhZ3M9c3RyaXAgLS1hbGwgXAorCQktLWZha2UtbWlzc2luZy10YWdnZXIgPiBvdXRwdXQgJiYKKwl0ZXN0ICQoZ3JlcCAtYyAiXnRhZyAiIG91dHB1dCkgPSA0ICYmCisJZ3JlcCAiVW5zcGVjaWZpZWQgVGFnZ2VyIiBvdXRwdXQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgbGltaXRpbmcgZXhwb3J0cyBieSBQQVRIJyAnCisJbWtkaXIgbGltaXQtYnktcGF0aHMgJiYKKwkoCisJCWNkIGxpbWl0LWJ5LXBhdGhzICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gaGkgPiB0aGVyZSAmJgorCQlnaXQgYWRkIHRoZXJlICYmCisJCWdpdCBjb21taXQgLW0gIkZpcnN0IGZpbGUiICYmCisJCWVjaG8gZm9vID4gYmFyICYmCisJCWdpdCBhZGQgYmFyICYmCisJCWdpdCBjb21taXQgLW0gIlNlY29uZCBmaWxlIiAmJgorCQlnaXQgdGFnIC1hIC1tIG1zZyBteXRhZyAmJgorCQllY2hvIG1vcmVmb28gPj4gYmFyICYmCisJCWdpdCBhZGQgYmFyICYmCisJCWdpdCBjb21taXQgLW0gIkNoYW5nZSB0byBzZWNvbmQgZmlsZSIKKwkpCisnCisKK2NhdCA+IGxpbWl0LWJ5LXBhdGhzL2V4cGVjdGVkIDw8IEVPRgorYmxvYgorbWFyayA6MQorZGF0YSAzCitoaQorCityZXNldCByZWZzL3RhZ3MvbXl0YWcKK2NvbW1pdCByZWZzL3RhZ3MvbXl0YWcKK21hcmsgOjIKK2F1dGhvciBBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxMTEyOTEyNzEzIC0wNzAwCitjb21taXR0ZXIgQyBPIE1pdHRlciA8Y29tbWl0dGVyQGV4YW1wbGUuY29tPiAxMTEyOTEyNzEzIC0wNzAwCitkYXRhIDExCitGaXJzdCBmaWxlCitNIDEwMDY0NCA6MSB0aGVyZQorCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZHJvcHBpbmcgdGFnIG9mIGZpbHRlcmVkIG91dCBvYmplY3QnICcKKygKKwljZCBsaW1pdC1ieS1wYXRocyAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXRhZy1vZi1maWx0ZXJlZC1vYmplY3Q9ZHJvcCBteXRhZyAtLSB0aGVyZSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dAorKQorJworCitjYXQgPj4gbGltaXQtYnktcGF0aHMvZXhwZWN0ZWQgPDwgRU9GCit0YWcgbXl0YWcKK2Zyb20gOjIKK3RhZ2dlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExMTI5MTI3MTMgLTA3MDAKK2RhdGEgNAorbXNnCisKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXdyaXRpbmcgdGFnIG9mIGZpbHRlcmVkIG91dCBvYmplY3QnICcKKygKKwljZCBsaW1pdC1ieS1wYXRocyAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXRhZy1vZi1maWx0ZXJlZC1vYmplY3Q9cmV3cml0ZSBteXRhZyAtLSB0aGVyZSA+IG91dHB1dCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dAorKQorJworCitjYXQgPiBsaW1pdC1ieS1wYXRocy9leHBlY3RlZCA8PCBFT0YKK2Jsb2IKK21hcmsgOjEKK2RhdGEgNAorZm9vCisKK2Jsb2IKK21hcmsgOjIKK2RhdGEgMworaGkKKworcmVzZXQgcmVmcy9oZWFkcy9tYXN0ZXIKK2NvbW1pdCByZWZzL2hlYWRzL21hc3RlcgorbWFyayA6MworYXV0aG9yIEEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDExMTI5MTI3MTMgLTA3MDAKK2NvbW1pdHRlciBDIE8gTWl0dGVyIDxjb21taXR0ZXJAZXhhbXBsZS5jb20+IDExMTI5MTI3MTMgLTA3MDAKK2RhdGEgMTIKK1NlY29uZCBmaWxlCitNIDEwMDY0NCA6MSBiYXIKK00gMTAwNjQ0IDoyIHRoZXJlCisKK0VPRgorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdubyBleGFjdC1yZWYgcmV2aXNpb25zIGluY2x1ZGVkJyAnCisJKAorCQljZCBsaW1pdC1ieS1wYXRocyAmJgorCQlnaXQgZmFzdC1leHBvcnQgbWFzdGVyfjIuLm1hc3Rlcn4xID4gb3V0cHV0ICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIG91dHB1dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncGF0aCBsaW1pdGluZyB3aXRoIGltcG9ydC1tYXJrcyBkb2VzIG5vdCBsb3NlIHVubW9kaWZpZWQgZmlsZXMnICAgICAgICAnCisJZ2l0IGNoZWNrb3V0IC1iIHNpbXBsZSBtYXJrc34yICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tZXhwb3J0LW1hcmtzPW1hcmtzIHNpbXBsZSAtLSBmaWxlID4gL2Rldi9udWxsICYmCisJZWNobyBtb3JlIGNvbnRlbnQgPj4gZmlsZSAmJgorCXRlc3RfdGljayAmJgorCWdpdCBjb21taXQgLW1uZXh0IGZpbGUgJiYKKwlnaXQgZmFzdC1leHBvcnQgLS1pbXBvcnQtbWFya3M9bWFya3Mgc2ltcGxlIC0tIGZpbGUgZmlsZTAgfCBncmVwIGZpbGUwCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Z1bGwtdHJlZSByZS1zaG93cyB1bm1vZGlmaWVkIGZpbGVzJyAgICAgICAgJworCWdpdCBjaGVja291dCAtZiBzaW1wbGUgJiYKKwl0ZXN0ICQoZ2l0IGZhc3QtZXhwb3J0IC0tZnVsbC10cmVlIHNpbXBsZSB8IGdyZXAgLWMgZmlsZTApIC1lcSAzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldC11cCBhIGZldyBtb3JlIHRhZ3MgZm9yIHRhZyBleHBvcnQgdGVzdHMnICcKKwlnaXQgY2hlY2tvdXQgLWYgbWFzdGVyICYmCisJSEVBRF9UUkVFPWBnaXQgc2hvdyAtcyAtLXByZXR0eT1yYXcgSEVBRCB8IGdyZXAgdHJlZSB8IHNlZCAicy90cmVlIC8vImAgJiYKKwlnaXQgdGFnICAgIHRyZWVfdGFnICAgICAgICAtbSAidGFnZ2luZyBhIHRyZWUiICRIRUFEX1RSRUUgJiYKKwlnaXQgdGFnIC1hIHRyZWVfdGFnLW9iaiAgICAtbSAidGFnZ2luZyBhIHRyZWUiICRIRUFEX1RSRUUgJiYKKwlnaXQgdGFnICAgIHRhZy1vYmpfdGFnICAgICAtbSAidGFnZ2luZyBhIHRhZyIgdHJlZV90YWctb2JqICYmCisJZ2l0IHRhZyAtYSB0YWctb2JqX3RhZy1vYmogLW0gInRhZ2dpbmcgYSB0YWciIHRyZWVfdGFnLW9iagorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0cmVlX3RhZycgICAgICAgICcKKwlta2RpciByZXN1bHQgJiYKKwkoY2QgcmVzdWx0ICYmIGdpdCBpbml0KSAmJgorCWdpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZyA+IGZlLXN0cmVhbSAmJgorCShjZCByZXN1bHQgJiYgZ2l0IGZhc3QtaW1wb3J0IDwgLi4vZmUtc3RyZWFtKQorJworCisjIE5FRURTV09SSzogbm90IGp1c3QgY2hlY2sgcmV0dXJuIHN0YXR1cywgYnV0IHZhbGlkYXRlIHRoZSBvdXRwdXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3RyZWVfdGFnLW9iaicgICAgJ2dpdCBmYXN0LWV4cG9ydCB0cmVlX3RhZy1vYmonCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZycgICAgICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWcnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWctb2JqX3RhZy1vYmonICdnaXQgZmFzdC1leHBvcnQgdGFnLW9ial90YWctb2JqJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkaXJlY3RvcnkgYmVjb21lcyBzeW1saW5rJyAgICAgICAgJworCWdpdCBpbml0IGRpcnRvc3ltbGluayAmJgorCWdpdCBpbml0IHJlc3VsdCAmJgorCSgKKwkJY2QgZGlydG9zeW1saW5rICYmCisJCW1rZGlyIGZvbyAmJgorCQlta2RpciBiYXIgJiYKKwkJZWNobyBoZWxsbyA+IGZvby93b3JsZCAmJgorCQllY2hvIGhlbGxvID4gYmFyL3dvcmxkICYmCisJCWdpdCBhZGQgZm9vL3dvcmxkIGJhci93b3JsZCAmJgorCQlnaXQgY29tbWl0IC1xIC1tb25lICYmCisJCWdpdCBybSAtciBmb28gJiYKKwkJdGVzdF9sbl9zX2FkZCBiYXIgZm9vICYmCisJCWdpdCBjb21taXQgLXEgLW10d28KKwkpICYmCisJKAorCQljZCBkaXJ0b3N5bWxpbmsgJiYKKwkJZ2l0IGZhc3QtZXhwb3J0IG1hc3RlciAtLSBmb28gfAorCQkoY2QgLi4vcmVzdWx0ICYmIGdpdCBmYXN0LWltcG9ydCAtLXF1aWV0KQorCSkgJiYKKwkoY2QgcmVzdWx0ICYmIGdpdCBzaG93IG1hc3Rlcjpmb28pCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Zhc3QtZXhwb3J0IHF1b3RlcyBwYXRobmFtZXMnICcKKwlnaXQgaW5pdCBjcmF6eS1wYXRocyAmJgorCShjZCBjcmF6eS1wYXRocyAmJgorCSBibG9iPWBlY2hvIGZvbyB8IGdpdCBoYXNoLW9iamVjdCAtdyAtLXN0ZGluYCAmJgorCSBnaXQgdXBkYXRlLWluZGV4IC0tYWRkIFwKKwkJLS1jYWNoZWluZm8gMTAwNjQ0ICRibG9iICIkKHByaW50ZiAicGF0aCB3aXRoXFxubmV3bGluZSIpIiBcCisJCS0tY2FjaGVpbmZvIDEwMDY0NCAkYmxvYiAicGF0aCB3aXRoIFwicXVvdGVcIiIgXAorCQktLWNhY2hlaW5mbyAxMDA2NDQgJGJsb2IgInBhdGggd2l0aCBcXGJhY2tzbGFzaCIgXAorCQktLWNhY2hlaW5mbyAxMDA2NDQgJGJsb2IgInBhdGggd2l0aCBzcGFjZSIgJiYKKwkgZ2l0IGNvbW1pdCAtbSBhZGRpdGlvbiAmJgorCSBnaXQgbHMtZmlsZXMgLXogLXMgfCBwZXJsIC0wcGUgInN7XFx0fXskJnN1YmRpci99IiA+aW5kZXggJiYKKwkgZ2l0IHJlYWQtdHJlZSAtLWVtcHR5ICYmCisJIGdpdCB1cGRhdGUtaW5kZXggLXogLS1pbmRleC1pbmZvIDxpbmRleCAmJgorCSBnaXQgY29tbWl0IC1tIHJlbmFtZSAmJgorCSBnaXQgcmVhZC10cmVlIC0tZW1wdHkgJiYKKwkgZ2l0IGNvbW1pdCAtbSBkZWxldGlvbiAmJgorCSBnaXQgZmFzdC1leHBvcnQgLU0gSEVBRCA+ZXhwb3J0Lm91dCAmJgorCSBnaXQgcmV2LWxpc3QgSEVBRCA+ZXhwZWN0ICYmCisJIGdpdCBpbml0IHJlc3VsdCAmJgorCSBjZCByZXN1bHQgJiYKKwkgZ2l0IGZhc3QtaW1wb3J0IDwuLi9leHBvcnQub3V0ICYmCisJIGdpdCByZXYtbGlzdCBIRUFEID5hY3R1YWwgJiYKKwkgdGVzdF9jbXAgLi4vZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBiaWRpcmVjdGlvbmFsaXR5JyAnCisJPm1hcmtzLWN1ciAmJgorCT5tYXJrcy1uZXcgJiYKKwlnaXQgaW5pdCBtYXJrcy10ZXN0ICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0tZXhwb3J0LW1hcmtzPW1hcmtzLWN1ciAtLWltcG9ydC1tYXJrcz1tYXJrcy1jdXIgLS1icmFuY2hlcyB8IFwKKwlnaXQgLS1naXQtZGlyPW1hcmtzLXRlc3QvLmdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1tYXJrcy1uZXcgLS1pbXBvcnQtbWFya3M9bWFya3MtbmV3ICYmCisJKGNkIG1hcmtzLXRlc3QgJiYKKwlnaXQgcmVzZXQgLS1oYXJkICYmCisJZWNobyBXb2hsYXVmID4gZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gImJhY2sgaW4gdGltZSIpICYmCisJZ2l0IC0tZ2l0LWRpcj1tYXJrcy10ZXN0Ly5naXQgZmFzdC1leHBvcnQgLS1leHBvcnQtbWFya3M9bWFya3MtbmV3IC0taW1wb3J0LW1hcmtzPW1hcmtzLW5ldyAtLWJyYW5jaGVzIHwgXAorCWdpdCBmYXN0LWltcG9ydCAtLWV4cG9ydC1tYXJrcz1tYXJrcy1jdXIgLS1pbXBvcnQtbWFya3M9bWFya3MtY3VyCisnCisKK2NhdCA+IGV4cGVjdGVkIDw8IEVPRgorYmxvYgorbWFyayA6MTMKK2RhdGEgNQorYnVtcAorCitjb21taXQgcmVmcy9oZWFkcy9tYXN0ZXIKK21hcmsgOjE0CithdXRob3IgQSBVIFRob3IgPGF1dGhvckBleGFtcGxlLmNvbT4gMTExMjkxMjc3MyAtMDcwMAorY29tbWl0dGVyIEMgTyBNaXR0ZXIgPGNvbW1pdHRlckBleGFtcGxlLmNvbT4gMTExMjkxMjc3MyAtMDcwMAorZGF0YSA1CitidW1wCitmcm9tIDoxMgorTSAxMDA2NDQgOjEzIGZpbGUKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2F2b2lkIHVuaW50ZXJlc3RpbmcgcmVmcycgJworCT4gdG1wLW1hcmtzICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0taW1wb3J0LW1hcmtzPXRtcC1tYXJrcyBcCisJCS0tZXhwb3J0LW1hcmtzPXRtcC1tYXJrcyBtYXN0ZXIgPiAvZGV2L251bGwgJiYKKwlnaXQgdGFnIHYxLjAgJiYKKwlnaXQgYnJhbmNoIHVuaW50ZXJlc3RpbmcgJiYKKwllY2hvIGJ1bXAgPiBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSBidW1wICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0taW1wb3J0LW1hcmtzPXRtcC1tYXJrcyBcCisJCS0tZXhwb3J0LW1hcmtzPXRtcC1tYXJrcyBedW5pbnRlcmVzdGluZyBedjEuMCBtYXN0ZXIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKworY2F0ID4gZXhwZWN0ZWQgPDwgRU9GCityZXNldCByZWZzL2hlYWRzL21hc3RlcgorZnJvbSA6MTQKKworRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlZnMgYXJlIHVwZGF0ZWQgZXZlbiBpZiBubyBjb21taXRzIG5lZWQgdG8gYmUgZXhwb3J0ZWQnICcKKwk+IHRtcC1tYXJrcyAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLWltcG9ydC1tYXJrcz10bXAtbWFya3MgXAorCQktLWV4cG9ydC1tYXJrcz10bXAtbWFya3MgbWFzdGVyID4gL2Rldi9udWxsICYmCisJZ2l0IGZhc3QtZXhwb3J0IC0taW1wb3J0LW1hcmtzPXRtcC1tYXJrcyBcCisJCS0tZXhwb3J0LW1hcmtzPXRtcC1tYXJrcyBtYXN0ZXIgPiBhY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlIHJlZnNwZWMnICcKKwlnaXQgZmFzdC1leHBvcnQgLS1yZWZzcGVjIHJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMvZm9vYmFyIG1hc3RlciB8IFwKKwkJZ3JlcCAiXmNvbW1pdCAiIHwgc29ydCB8IHVuaXEgPiBhY3R1YWwgJiYKKwllY2hvICJjb21taXQgcmVmcy9oZWFkcy9mb29iYXIiID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVsZXRlIHJlZnNwZWMnICcKKwlnaXQgYnJhbmNoIHRvLWRlbGV0ZSAmJgorCWdpdCBmYXN0LWV4cG9ydCAtLXJlZnNwZWMgOnJlZnMvaGVhZHMvdG8tZGVsZXRlIHRvLWRlbGV0ZSBedG8tZGVsZXRlID4gYWN0dWFsICYmCisJY2F0ID4gZXhwZWN0ZWQgPDwtRU9GICYmCisJcmVzZXQgcmVmcy9oZWFkcy90by1kZWxldGUKKwlmcm9tIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKworCUVPRgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDkzNTEtZmFzdC1leHBvcnQtYW5vbnltaXplLnNoIGIvdC90OTM1MS1mYXN0LWV4cG9ydC1hbm9ueW1pemUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODk3ZGM1MAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDkzNTEtZmFzdC1leHBvcnQtYW5vbnltaXplLnNoCkBAIC0wLDAgKzEsMTEyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nYmFzaWMgdGVzdHMgZm9yIGZhc3QtZXhwb3J0IC0tYW5vbnltaXplJworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIHNpbXBsZSByZXBvJyAnCisJdGVzdF9jb21taXQgYmFzZSAmJgorCXRlc3RfY29tbWl0IGZvbyAmJgorCWdpdCBjaGVja291dCAtYiBvdGhlciBIRUFEXiAmJgorCW1rZGlyIHN1YmRpciAmJgorCXRlc3RfY29tbWl0IHN1YmRpci9iYXIgJiYKKwl0ZXN0X2NvbW1pdCBzdWJkaXIveHl6enkgJiYKKwlnaXQgdGFnIC1tICJhbm5vdGF0ZWQgdGFnIiBteXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleHBvcnQgYW5vbnltaXplZCBzdHJlYW0nICcKKwlnaXQgZmFzdC1leHBvcnQgLS1hbm9ueW1pemUgLS1hbGwgPnN0cmVhbQorJworCisjIHRoaXMgYWxzbyBjb3ZlcnMgY29tbWl0IG1lc3NhZ2VzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJlYW0gb21pdHMgcGF0aCBuYW1lcycgJworCSEgZ3JlcCBiYXNlIHN0cmVhbSAmJgorCSEgZ3JlcCBmb28gc3RyZWFtICYmCisJISBncmVwIHN1YmRpciBzdHJlYW0gJiYKKwkhIGdyZXAgYmFyIHN0cmVhbSAmJgorCSEgZ3JlcCB4eXp6eSBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyZWFtIGFsbG93cyBtYXN0ZXIgYXMgcmVmbmFtZScgJworCWdyZXAgbWFzdGVyIHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJlYW0gb21pdHMgb3RoZXIgcmVmbmFtZXMnICcKKwkhIGdyZXAgb3RoZXIgc3RyZWFtICYmCisJISBncmVwIG15dGFnIHN0cmVhbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdHJlYW0gb21pdHMgaWRlbnRpdGllcycgJworCSEgZ3JlcCAiJEdJVF9DT01NSVRURVJfTkFNRSIgc3RyZWFtICYmCisJISBncmVwICIkR0lUX0NPTU1JVFRFUl9FTUFJTCIgc3RyZWFtICYmCisJISBncmVwICIkR0lUX0FVVEhPUl9OQU1FIiBzdHJlYW0gJiYKKwkhIGdyZXAgIiRHSVRfQVVUSE9SX0VNQUlMIiBzdHJlYW0KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RyZWFtIG9taXRzIHRhZyBtZXNzYWdlJyAnCisJISBncmVwICJhbm5vdGF0ZWQgdGFnIiBzdHJlYW0KKycKKworIyBOT1RFOiB3ZSBjaGRpciB0byB0aGUgbmV3LCBhbm9ueW1pemVkIHJlcG9zaXRvcnkKKyMgYWZ0ZXIgdGhpcy4gQWxsIGZ1cnRoZXIgdGVzdHMgc2hvdWxkIGFzc3VtZSB0aGlzLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IHN0cmVhbSB0byBuZXcgcmVwb3NpdG9yeScgJworCWdpdCBpbml0IG5ldyAmJgorCWNkIG5ldyAmJgorCWdpdCBmYXN0LWltcG9ydCA8Li4vc3RyZWFtCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jlc3VsdCBoYXMgdHdvIGJyYW5jaGVzJyAnCisJZ2l0IGZvci1lYWNoLXJlZiAtLWZvcm1hdD0iJShyZWZuYW1lKSIgcmVmcy9oZWFkcyA+YnJhbmNoZXMgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAyIGJyYW5jaGVzICYmCisJb3RoZXJfYnJhbmNoPSQoZ3JlcCAtdiByZWZzL2hlYWRzL21hc3RlciBicmFuY2hlcykKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVwbyBoYXMgb3JpZ2luYWwgc2hhcGUgYW5kIHRpbWVzdGFtcHMnICcKKwlzaGFwZSAoKSB7CisJCWdpdCBsb2cgLS1mb3JtYXQ9IiVtICVjdCIgLS1sZWZ0LXJpZ2h0IC0tYm91bmRhcnkgIiRAIgorCX0gJiYKKwkoY2QgLi4gJiYgc2hhcGUgbWFzdGVyLi4ub3RoZXIpID5leHBlY3QgJiYKKwlzaGFwZSBtYXN0ZXIuLi4kb3RoZXJfYnJhbmNoID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Jvb3QgdHJlZSBoYXMgb3JpZ2luYWwgc2hhcGUnICcKKwkjIHRoZSBvdXRwdXQgZW50cmllcyBhcmUgbm90IG5lY2Vzc2FyaWx5IGluIHRoZSBzYW1lCisJIyBvcmRlciwgYnV0IHdlIGtub3cgYXQgbGVhc3QgdGhhdCB3ZSB3aWxsIGhhdmUgb25lIHRyZWUKKwkjIGFuZCBvbmUgYmxvYiwgc28ganVzdCBjaGVjayB0aGUgc29ydGVkIG9yZGVyCisJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCWJsb2IKKwl0cmVlCisJRU9GCisJZ2l0IGxzLXRyZWUgJG90aGVyX2JyYW5jaCA+cm9vdCAmJgorCWN1dCAtZCIgIiAtZjIgPHJvb3QgfCBzb3J0ID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BhdGhzIGluIHN1YmRpciBlbmRlZCB1cCBpbiBvbmUgdHJlZScgJworCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwlibG9iCisJYmxvYgorCUVPRgorCXRyZWU9JChncmVwIHRyZWUgcm9vdCB8IGN1dCAtZjIpICYmCisJZ2l0IGxzLXRyZWUgJG90aGVyX2JyYW5jaDokdHJlZSA+dHJlZSAmJgorCWN1dCAtZCIgIiAtZjIgPHRyZWUgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndGFnIHBvaW50cyB0byBicmFuY2ggdGlwJyAnCisJZ2l0IHJldi1wYXJzZSAkb3RoZXJfYnJhbmNoID5leHBlY3QgJiYKKwlnaXQgZm9yLWVhY2gtcmVmIC0tZm9ybWF0PSIlKCpvYmplY3RuYW1lKSIgfCBncmVwIC4gPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWRlbnRzIGFyZSBzaGFyZWQnICcKKwlnaXQgbG9nIC0tYWxsIC0tZm9ybWF0PSIlYW4gPCVhZT4iID5hdXRob3JzICYmCisJc29ydCAtdSBhdXRob3JzID51bmlxdWUgJiYKKwl0ZXN0X2xpbmVfY291bnQgPSAxIHVuaXF1ZSAmJgorCWdpdCBsb2cgLS1hbGwgLS1mb3JtYXQ9IiVjbiA8JWNlPiIgPmNvbW1pdHRlcnMgJiYKKwlzb3J0IC11IGNvbW1pdHRlcnMgPnVuaXF1ZSAmJgorCXRlc3RfbGluZV9jb3VudCA9IDEgdW5pcXVlICYmCisJISB0ZXN0X2NtcCBhdXRob3JzIGNvbW1pdHRlcnMKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NDAwLWdpdC1jdnNzZXJ2ZXItc2VydmVyLnNoIGIvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTQ2YzNmCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTQwMC1naXQtY3Zzc2VydmVyLXNlcnZlci5zaApAQCAtMCwwICsxLDU5MCBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBGcmFuayBMaWNodGVuaGVsZAorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtY3Zzc2VydmVyIGFjY2VzcworCit0ZXN0cyByZWFkIGFjY2VzcyB0byBhIGdpdCByZXBvc2l0b3J5IHdpdGggdGhlCitjdnMgQ0xJIGNsaWVudCB2aWEgZ2l0LWN2c3NlcnZlciBzZXJ2ZXInCisKKy4gLi90ZXN0LWxpYi5zaAorCitpZiAhIHRlc3RfaGF2ZV9wcmVyZXEgUEVSTDsgdGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBnaXQgY3Zzc2VydmVyIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorY3ZzID4vZGV2L251bGwgMj4mMQoraWYgdGVzdCAkPyAtbmUgMQordGhlbgorICAgIHNraXBfYWxsPSdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBjdnMgbm90IGZvdW5kJworICAgIHRlc3RfZG9uZQorZmkKK3BlcmwgLWUgJ3VzZSBEQkk7IHVzZSBEQkQ6OlNRTGl0ZScgPi9kZXYvbnVsbCAyPiYxIHx8IHsKKyAgICBza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgUGVybCBTUUxpdGUgaW50ZXJmYWNlIHVuYXZhaWxhYmxlJworICAgIHRlc3RfZG9uZQorfQorCitXT1JLRElSPSQocHdkKQorU0VSVkVSRElSPSQocHdkKS9naXRjdnMuZ2l0CitnaXRfY29uZmlnPSIkU0VSVkVSRElSL2NvbmZpZyIKK0NWU1JPT1Q9Ijpmb3JrOiRTRVJWRVJESVIiCitDVlNXT1JLPSIkKHB3ZCkvY3Zzd29yayIKK0NWU19TRVJWRVI9Z2l0LWN2c3NlcnZlcgorZXhwb3J0IENWU1JPT1QgQ1ZTX1NFUlZFUgorCitybSAtcmYgIiRDVlNXT1JLIiAiJFNFUlZFUkRJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisgIGdpdCBjb25maWcgcHVzaC5kZWZhdWx0IG1hdGNoaW5nICYmCisgIGVjaG8gPmVtcHR5ICYmCisgIGdpdCBhZGQgZW1wdHkgJiYKKyAgZ2l0IGNvbW1pdCAtcSAtbSAiRmlyc3QgQ29tbWl0IiAmJgorICBta2RpciBzZWNvbmRyb290ICYmCisgICggY2Qgc2Vjb25kcm9vdCAmJgorICBnaXQgaW5pdCAmJgorICB0b3VjaCBzZWNvbmRyb290ZmlsZSAmJgorICBnaXQgYWRkIHNlY29uZHJvb3RmaWxlICYmCisgIGdpdCBjb21taXQgLW0gInNlY29uZCByb290IikgJiYKKyAgZ2l0IHB1bGwgc2Vjb25kcm9vdCBtYXN0ZXIgJiYKKyAgZ2l0IGNsb25lIC1xIC0tYmFyZSAiJFdPUktESVIvLmdpdCIgIiRTRVJWRVJESVIiID4vZGV2L251bGwgMj4mMSAmJgorICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlICYmCisgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmxvZ2ZpbGUgIiRTRVJWRVJESVIvZ2l0Y3ZzLmxvZyIgJiYKKyAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMuYXV0aGRiICIkU0VSVkVSRElSL2F1dGguZGIiICYmCisgIGVjaG8gY3ZzdXNlcjpjdkdWRWFyTUxuaGxBID4gIiRTRVJWRVJESVIvYXV0aC5kYiIKKycKKworIyBub3RlIHRoYXQgY3ZzIGRvZXNuJ3QgYWNjZXB0IGFic29sdXRlIHBhdGhuYW1lcworIyBhcyBhcmd1bWVudCB0byBjbyAtZAordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgY2hlY2tvdXQnIFwKKyAgJ0dJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yayBtYXN0ZXIgJiYKKyAgIHRlc3QgIiQoZWNobyAkKGdyZXAgLXYgXkQgY3Zzd29yay9DVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUgfCBoZWFkIC1uIDEpKSIgPSAiZW1wdHkvMS4xLyIgJiYKKyAgIHRlc3QgIiQoZWNobyAkKGdyZXAgLXYgXkQgY3Zzd29yay9DVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUgfCBzZWQgLW5lIFwkcCkpIiA9ICJzZWNvbmRyb290ZmlsZS8xLjEvIicKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQU0VSVkVSIEFVVEhFTlRJQ0FUSU9OCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NhdCA+cmVxdWVzdC1hbm9ueW1vdXMgIDw8RU9GCitCRUdJTiBBVVRIIFJFUVVFU1QKKyRTRVJWRVJESVIKK2Fub255bW91cworCitFTkQgQVVUSCBSRVFVRVNUCitFT0YKKworY2F0ID5yZXF1ZXN0LWdpdCAgPDxFT0YKK0JFR0lOIEFVVEggUkVRVUVTVAorJFNFUlZFUkRJUgorZ2l0CisKK0VORCBBVVRIIFJFUVVFU1QKK0VPRgorCitjYXQgPmxvZ2luLWFub255bW91cyA8PEVPRgorQkVHSU4gVkVSSUZJQ0FUSU9OIFJFUVVFU1QKKyRTRVJWRVJESVIKK2Fub255bW91cworCitFTkQgVkVSSUZJQ0FUSU9OIFJFUVVFU1QKK0VPRgorCitjYXQgPmxvZ2luLWdpdCA8PEVPRgorQkVHSU4gVkVSSUZJQ0FUSU9OIFJFUVVFU1QKKyRTRVJWRVJESVIKK2dpdAorCitFTkQgVkVSSUZJQ0FUSU9OIFJFUVVFU1QKK0VPRgorCitjYXQgPmxvZ2luLWdpdC1vayA8PEVPRgorQkVHSU4gVkVSSUZJQ0FUSU9OIFJFUVVFU1QKKyRTRVJWRVJESVIKK2N2c3VzZXIKK0FoPFo6eVpaMzAgZQorRU5EIFZFUklGSUNBVElPTiBSRVFVRVNUCitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHNlcnZlciBhdXRoZW50aWNhdGlvbicgXAorICAnY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3BzZXJ2ZXIgYXV0aGVudGljYXRpb24gZmFpbHVyZSAobm9uLWFub255bW91cyB1c2VyKScgXAorICAnaWYgY2F0IHJlcXVlc3QtZ2l0IHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMQorICAgdGhlbgorICAgICAgIGZhbHNlCisgICBlbHNlCisgICAgICAgdHJ1ZQorICAgZmkgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIEhBVEUgWU9VXCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwc2VydmVyIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3MgKG5vbi1hbm9ueW1vdXMgdXNlciB3aXRoIHBhc3N3b3JkKScgXAorICAnY2F0IGxvZ2luLWdpdC1vayB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciA+bG9nIDI+JjEgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwc2VydmVyIGF1dGhlbnRpY2F0aW9uIChsb2dpbiknIFwKKyAgJ2NhdCBsb2dpbi1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIHBzZXJ2ZXIgPmxvZyAyPiYxICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHNlcnZlciBhdXRoZW50aWNhdGlvbiBmYWlsdXJlIChsb2dpbi9ub24tYW5vbnltb3VzIHVzZXIpJyBcCisgICdpZiBjYXQgbG9naW4tZ2l0IHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMQorICAgdGhlbgorICAgICAgIGZhbHNlCisgICBlbHNlCisgICAgICAgdHJ1ZQorICAgZmkgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIEhBVEUgWU9VXCQiJworCisKKyMgbWlzdXNlIHBzZXJ2ZXIgYXV0aGVudGljYXRpb24gZm9yIHRlc3Rpbmcgb2YgcmVxX1Jvb3QKKworY2F0ID5yZXF1ZXN0LXJlbGF0aXZlICA8PEVPRgorQkVHSU4gQVVUSCBSRVFVRVNUCitnaXRjdnMuZ2l0Cithbm9ueW1vdXMKKworRU5EIEFVVEggUkVRVUVTVAorRU9GCisKK2NhdCA+cmVxdWVzdC1jb25mbGljdCAgPDxFT0YKK0JFR0lOIEFVVEggUkVRVUVTVAorJFNFUlZFUkRJUgorYW5vbnltb3VzCisKK0VORCBBVVRIIFJFUVVFU1QKK1Jvb3QgJFdPUktESVIKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlIChyZWxhdGl2ZSBwYXRobmFtZSknIFwKKyAgJ2lmIGNhdCByZXF1ZXN0LXJlbGF0aXZlIHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyID5sb2cgMj4mMQorICAgdGhlbgorICAgICAgIGVjaG8gdW5leHBlY3RlZCBzdWNjZXNzCisgICAgICAgZmFsc2UKKyAgIGVsc2UKKyAgICAgICB0cnVlCisgICBmaSAmJgorICAgdGFpbCBsb2cgfCBncmVwICJeZXJyb3IgMSBSb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aG5hbWUkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgZmFpbHVyZSAoY29uZmxpY3Rpbmcgcm9vdHMpJyBcCisgICdjYXQgcmVxdWVzdC1jb25mbGljdCB8IGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciA+bG9nIDI+JjEgJiYKKyAgIHRhaWwgbG9nIHwgZ3JlcCAiXmVycm9yIDEgQ29uZmxpY3Rpbmcgcm9vdHMgc3BlY2lmaWVkJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChzdHJpY3QgcGF0aHMpJyBcCisgICdjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfCBnaXQtY3Zzc2VydmVyIC0tc3RyaWN0LXBhdGhzIHBzZXJ2ZXIgIiRTRVJWRVJESVIiID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKHN0cmljdC1wYXRocyknICcKKyAgICAhIGNhdCByZXF1ZXN0LWFub255bW91cyB8CisgICAgZ2l0LWN2c3NlcnZlciAtLXN0cmljdC1wYXRocyBwc2VydmVyICIkV09SS0RJUiIgPmxvZyAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290ICh3L28gc3RyaWN0LXBhdGhzKScgXAorICAnY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciBwc2VydmVyICIkV09SS0RJUi8iID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKHcvbyBzdHJpY3QtcGF0aHMpJyAnCisgICAgISBjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfAorICAgIGdpdC1jdnNzZXJ2ZXIgcHNlcnZlciAiJFdPUktESVIvZ2l0Y3ZzIiA+bG9nIDI+JjEKKycKKworY2F0ID5yZXF1ZXN0LWJhc2UgIDw8RU9GCitCRUdJTiBBVVRIIFJFUVVFU1QKKy9naXRjdnMuZ2l0Cithbm9ueW1vdXMKKworRU5EIEFVVEggUkVRVUVTVAorUm9vdCAvZ2l0Y3ZzLmdpdAorRU9GCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChiYXNlLXBhdGgpJyBcCisgICdjYXQgcmVxdWVzdC1iYXNlIHwgZ2l0LWN2c3NlcnZlciAtLXN0cmljdC1wYXRocyAtLWJhc2UtcGF0aCAiJFdPUktESVIvIiBwc2VydmVyICIkU0VSVkVSRElSIiA+bG9nIDI+JjEgJiYKKyAgIHNlZCAtbmUgXCRwIGxvZyB8IGdyZXAgIl5JIExPVkUgWU9VXCQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXFfUm9vdCBmYWlsdXJlIChiYXNlLXBhdGgpJyAnCisgICAgISBjYXQgcmVxdWVzdC1hbm9ueW1vdXMgfAorICAgIGdpdC1jdnNzZXJ2ZXIgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggIiRXT1JLRElSIiBwc2VydmVyICIkU0VSVkVSRElSIiA+bG9nIDI+JjEKKycKKworR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgZmFsc2UgfHwgZXhpdCAxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IChleHBvcnQtYWxsKScgXAorICAnY2F0IHJlcXVlc3QtYW5vbnltb3VzIHwgZ2l0LWN2c3NlcnZlciAtLWV4cG9ydC1hbGwgcHNlcnZlciAiJFdPUktESVIiID5sb2cgMj4mMSAmJgorICAgc2VkIC1uZSBcJHAgbG9nIHwgZ3JlcCAiXkkgTE9WRSBZT1VcJCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlcV9Sb290IGZhaWx1cmUgKGV4cG9ydC1hbGwgdy9vIHdoaXRlbGlzdCknIFwKKyAgJyEgKGNhdCByZXF1ZXN0LWFub255bW91cyB8IGdpdC1jdnNzZXJ2ZXIgLS1leHBvcnQtYWxsIHBzZXJ2ZXIgPmxvZyAyPiYxIHx8IGZhbHNlKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVxX1Jvb3QgKGV2ZXJ5dGhpbmcgdG9nZXRoZXIpJyBcCisgICdjYXQgcmVxdWVzdC1iYXNlIHwgZ2l0LWN2c3NlcnZlciAtLWV4cG9ydC1hbGwgLS1zdHJpY3QtcGF0aHMgLS1iYXNlLXBhdGggIiRXT1JLRElSLyIgcHNlcnZlciAiJFNFUlZFUkRJUiIgPmxvZyAyPiYxICYmCisgICBzZWQgLW5lIFwkcCBsb2cgfCBncmVwICJeSSBMT1ZFIFlPVVwkIicKKworR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgdHJ1ZSB8fCBleGl0IDEKKworIy0tLS0tLS0tLS0tLS0tCisjIENPTkZJRyBURVNUUworIy0tLS0tLS0tLS0tLS0tCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGN2cy5lbmFibGVkID0gZmFsc2UnIFwKKyAgJ0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5lbmFibGVkIGZhbHNlICYmCisgICBpZiBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsyIG1hc3RlciA+Y3ZzLmxvZyAyPiYxCisgICB0aGVuCisgICAgIGVjaG8gdW5leHBlY3RlZCBjdnMgc3VjY2VzcworICAgICBmYWxzZQorICAgZWxzZQorICAgICB0cnVlCisgICBmaSAmJgorICAgZ3JlcCAiR0lUQ1ZTIGVtdWxhdGlvbiBkaXNhYmxlZCIgY3ZzLmxvZyAmJgorICAgdGVzdCAhIC1kIGN2c3dvcmsyJworCitybSAtZnIgY3Zzd29yazIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGN2cy5leHQuZW5hYmxlZCA9IHRydWUnIFwKKyAgJ0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5leHQuZW5hYmxlZCB0cnVlICYmCisgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCBmYWxzZSAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrMiBtYXN0ZXIgPmN2cy5sb2cgMj4mMSAmJgorICAgdGVzdF9jbXAgY3Zzd29yayBjdnN3b3JrMicKKworcm0gLWZyIGN2c3dvcmsyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRjdnMuZXh0LmVuYWJsZWQgPSBmYWxzZScgXAorICAnR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmV4dC5lbmFibGVkIGZhbHNlICYmCisgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlICYmCisgICBpZiBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsyIG1hc3RlciA+Y3ZzLmxvZyAyPiYxCisgICB0aGVuCisgICAgIGVjaG8gdW5leHBlY3RlZCBjdnMgc3VjY2VzcworICAgICBmYWxzZQorICAgZWxzZQorICAgICB0cnVlCisgICBmaSAmJgorICAgZ3JlcCAiR0lUQ1ZTIGVtdWxhdGlvbiBkaXNhYmxlZCIgY3ZzLmxvZyAmJgorICAgdGVzdCAhIC1kIGN2c3dvcmsyJworCitybSAtZnIgY3Zzd29yazIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGN2cy5kYm5hbWUnIFwKKyAgJ0dJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5leHQuZW5hYmxlZCB0cnVlICYmCisgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5kYm5hbWUgJUdnaXRjdnMuJWEuJW0uc3FsaXRlICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsyIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICB0ZXN0X2NtcCBjdnN3b3JrIGN2c3dvcmsyICYmCisgICB0ZXN0IC1mICIkU0VSVkVSRElSL2dpdGN2cy5leHQubWFzdGVyLnNxbGl0ZSIgJiYKKyAgIGNtcCAiJFNFUlZFUkRJUi9naXRjdnMubWFzdGVyLnNxbGl0ZSIgIiRTRVJWRVJESVIvZ2l0Y3ZzLmV4dC5tYXN0ZXIuc3FsaXRlIicKKworcm0gLWZyIGN2c3dvcmsyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRjdnMuZXh0LmRibmFtZScgXAorICAnR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmV4dC5lbmFibGVkIHRydWUgJiYKKyAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmV4dC5kYm5hbWUgJUdnaXRjdnMxLiVhLiVtLnNxbGl0ZSAmJgorICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMuZGJuYW1lICVHZ2l0Y3ZzMi4lYS4lbS5zcWxpdGUgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgY28gLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgIHRlc3RfY21wIGN2c3dvcmsgY3Zzd29yazIgJiYKKyAgIHRlc3QgLWYgIiRTRVJWRVJESVIvZ2l0Y3ZzMS5leHQubWFzdGVyLnNxbGl0ZSIgJiYKKyAgIHRlc3QgISAtZiAiJFNFUlZFUkRJUi9naXRjdnMyLmV4dC5tYXN0ZXIuc3FsaXRlIiAmJgorICAgY21wICIkU0VSVkVSRElSL2dpdGN2cy5tYXN0ZXIuc3FsaXRlIiAiJFNFUlZFUkRJUi9naXRjdnMxLmV4dC5tYXN0ZXIuc3FsaXRlIicKKworCisjLS0tLS0tLS0tLS0tCisjIENWUyBVUERBVEUKKyMtLS0tLS0tLS0tLS0KKworcm0gLWZyICIkU0VSVkVSRElSIgorY2QgIiRXT1JLRElSIiAmJgorZ2l0IGNsb25lIC1xIC0tYmFyZSAiJFdPUktESVIvLmdpdCIgIiRTRVJWRVJESVIiID4vZGV2L251bGwgMj4mMSAmJgorR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgdHJ1ZSAmJgorR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMubG9nZmlsZSAiJFNFUlZFUkRJUi9naXRjdnMubG9nIiB8fAorZXhpdCAxCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKGNyZWF0ZSBuZXcgZmlsZSknIFwKKyAgJ2VjaG8gdGVzdGZpbGUxID50ZXN0ZmlsZTEgJiYKKyAgIGdpdCBhZGQgdGVzdGZpbGUxICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJBZGQgdGVzdGZpbGUxIiAmJgorICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICBjZCBjdnN3b3JrICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAmJgorICAgdGVzdCAiJChlY2hvICQoZ3JlcCB0ZXN0ZmlsZTEgQ1ZTL0VudHJpZXN8Y3V0IC1kLyAtZjIsMyw1KSkiID0gInRlc3RmaWxlMS8xLjEvIiAmJgorICAgdGVzdF9jbXAgdGVzdGZpbGUxIC4uL3Rlc3RmaWxlMScKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAodXBkYXRlIGV4aXN0aW5nIGZpbGUpJyBcCisgICdlY2hvIGxpbmUgMiA+PnRlc3RmaWxlMSAmJgorICAgZ2l0IGFkZCB0ZXN0ZmlsZTEgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIkFwcGVuZCB0byB0ZXN0ZmlsZTEiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0ICIkKGVjaG8gJChncmVwIHRlc3RmaWxlMSBDVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUpKSIgPSAidGVzdGZpbGUxLzEuMi8iICYmCisgICB0ZXN0X2NtcCB0ZXN0ZmlsZTEgLi4vdGVzdGZpbGUxJworCitjZCAiJFdPUktESVIiCisjVE9ETzogY3Zzc2VydmVyIGRvZXNuJ3Qgc3VwcG9ydCB1cGRhdGUgdy9vIC1kCit0ZXN0X2V4cGVjdF9mYWlsdXJlICJjdnMgdXBkYXRlIHcvbyAtZCBkb2Vzbid0IGNyZWF0ZSBzdWJkaXIgKFRPRE8pIiAnCisgICBta2RpciB0ZXN0ICYmCisgICBlY2hvID50ZXN0L2VtcHR5ICYmCisgICBnaXQgYWRkIHRlc3QgJiYKKyAgIGdpdCBjb21taXQgLXEgLW0gIlNpbmdsZSBTdWJkaXJlY3RvcnkiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0ICEgLWQgdGVzdAorJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChzdWJkaXJlY3RvcmllcyknIFwKKyAgJyhmb3IgZGlyIGluIEEgQS9CIEEvQi9DIEEvRCBFOyBkbworICAgICAgbWtkaXIgJGRpciAmJgorICAgICAgZWNobyAidGVzdCBmaWxlIGluICRkaXIiID4iJGRpci9maWxlX2luXyQoZWNobyAkZGlyfHNlZCAtZSAicyMvIyAjZyIpIiAgJiYKKyAgICAgIGdpdCBhZGQgJGRpcjsKKyAgIGRvbmUpICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJkZWVwIHN1YiBkaXJlY3Rvcnkgc3RydWN0dXJlIiAmJgorICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICBjZCBjdnN3b3JrICYmCisgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZSAtZCAmJgorICAgKGZvciBkaXIgaW4gQSBBL0IgQS9CL0MgQS9EIEU7IGRvCisgICAgICBmaWxlbmFtZT0iZmlsZV9pbl8kKGVjaG8gJGRpcnxzZWQgLWUgInMjLyMgI2ciKSIgJiYKKyAgICAgIGlmIHRlc3QgIiQoZWNobyAkKGdyZXAgLXYgXkQgJGRpci9DVlMvRW50cmllc3xjdXQgLWQvIC1mMiwzLDUpKSIgPSAiJGZpbGVuYW1lLzEuMS8iICYmCisJdGVzdF9jbXAgIiRkaXIvJGZpbGVuYW1lIiAiLi4vJGRpci8kZmlsZW5hbWUiOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgZWNobyA+ZmFpbHVyZQorICAgICAgZmkKKyAgICBkb25lKSAmJgorICAgdGVzdCAhIC1mIGZhaWx1cmUnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKGRlbGV0ZSBmaWxlKScgXAorICAnZ2l0IHJtIHRlc3RmaWxlMSAmJgorICAgZ2l0IGNvbW1pdCAtcSAtbSAiUmVtb3ZlIHRlc3RmaWxlMSIgJiYKKyAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgIHRlc3QgLXogIiQoZ3JlcCB0ZXN0ZmlsZTEgQ1ZTL0VudHJpZXMpIiAmJgorICAgdGVzdCAhIC1mIHRlc3RmaWxlMScKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAocmUtYWRkIGRlbGV0ZWQgZmlsZSknIFwKKyAgJ2VjaG8gcmVhZGRlZCB0ZXN0ZmlsZSA+dGVzdGZpbGUxICYmCisgICBnaXQgYWRkIHRlc3RmaWxlMSAmJgorICAgZ2l0IGNvbW1pdCAtcSAtbSAiUmUtQWRkIHRlc3RmaWxlMSIgJiYKKyAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgIHRlc3QgIiQoZWNobyAkKGdyZXAgdGVzdGZpbGUxIENWUy9FbnRyaWVzfGN1dCAtZC8gLWYyLDMsNSkpIiA9ICJ0ZXN0ZmlsZTEvMS40LyIgJiYKKyAgIHRlc3RfY21wIHRlc3RmaWxlMSAuLi90ZXN0ZmlsZTEnCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKG1lcmdlKScgXAorICAnZWNobyBMaW5lIDAgPmV4cGVjdGVkICYmCisgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3CisgICBkbworICAgICBlY2hvIExpbmUgJGkgPj5tZXJnZQorICAgICBlY2hvIExpbmUgJGkgPj5leHBlY3RlZAorICAgZG9uZSAmJgorICAgZWNobyBMaW5lIDggPj5leHBlY3RlZCAmJgorICAgZ2l0IGFkZCBtZXJnZSAmJgorICAgZ2l0IGNvbW1pdCAtcSAtbSAiTWVyZ2UgdGVzdCAocHJlLW1lcmdlKSIgJiYKKyAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgY2QgY3Zzd29yayAmJgorICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgIHRlc3QgIiQoZWNobyAkKGdyZXAgbWVyZ2UgQ1ZTL0VudHJpZXN8Y3V0IC1kLyAtZjIsMyw1KSkiID0gIm1lcmdlLzEuMS8iICYmCisgICB0ZXN0X2NtcCBtZXJnZSAuLi9tZXJnZSAmJgorICAgKCBlY2hvIExpbmUgMDsgY2F0IG1lcmdlICkgPm1lcmdlLnRtcCAmJgorICAgbXYgbWVyZ2UudG1wIG1lcmdlICYmCisgICBjZCAiJFdPUktESVIiICYmCisgICBlY2hvIExpbmUgOCA+Pm1lcmdlICYmCisgICBnaXQgYWRkIG1lcmdlICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJNZXJnZSB0ZXN0IChtZXJnZSkiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIHNsZWVwIDEgJiYgdG91Y2ggbWVyZ2UgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0X2NtcCBtZXJnZSAuLi9leHBlY3RlZCcKKworY2QgIiRXT1JLRElSIgorCitjYXQgPmV4cGVjdGVkLkMgPDxFT0YKKzw8PDw8PDwgbWVyZ2UubWluZQorTGluZSAwCis9PT09PT09CitMSU5FIDAKKz4+Pj4+Pj4gbWVyZ2UuMS4zCitFT0YKKworZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4CitkbworICBlY2hvIExpbmUgJGkgPj5leHBlY3RlZC5DCitkb25lCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cGRhdGUgKGNvbmZsaWN0IG1lcmdlKScgXAorICAnKCBlY2hvIExJTkUgMDsgY2F0IG1lcmdlICkgPm1lcmdlLnRtcCAmJgorICAgbXYgbWVyZ2UudG1wIG1lcmdlICYmCisgICBnaXQgYWRkIG1lcmdlICYmCisgICBnaXQgY29tbWl0IC1xIC1tICJNZXJnZSB0ZXN0IChjb25mbGljdCkiICYmCisgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgIGNkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlICYmCisgICB0ZXN0X2NtcCBtZXJnZSAuLi9leHBlY3RlZC5DJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlICgtQyknIFwKKyAgJ2NkIGN2c3dvcmsgJiYKKyAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgdXBkYXRlIC1DICYmCisgICB0ZXN0X2NtcCBtZXJnZSAuLi9tZXJnZScKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAobWVyZ2Ugbm8tb3ApJyBcCisgICAnZWNobyBMaW5lIDkgPj5tZXJnZSAmJgorICAgIGNwIG1lcmdlIGN2c3dvcmsvbWVyZ2UgJiYKKyAgICBnaXQgYWRkIG1lcmdlICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiTWVyZ2UgdGVzdCAobm8tb3ApIiAmJgorICAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbCAmJgorICAgIGNkIGN2c3dvcmsgJiYKKyAgICBzbGVlcCAxICYmIHRvdWNoIG1lcmdlICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUgJiYKKyAgICB0ZXN0X2NtcCBtZXJnZSAuLi9tZXJnZScKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwZGF0ZSAoLXApJyAnCisgICAgdG91Y2ggcmVhbGx5LWVtcHR5ICYmCisgICAgZWNobyBMaW5lIDEgPiBuby1sZiAmJgorICAgIHByaW50ZiAiTGluZSAyIiA+PiBuby1sZiAmJgorICAgIGdpdCBhZGQgcmVhbGx5LWVtcHR5IG5vLWxmICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiVXBkYXRlIC1wIHRlc3QiICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICAgY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgdXBkYXRlICYmCisgICAgcm0gLWYgZmFpbHVyZXMgJiYKKyAgICBmb3IgaSBpbiBtZXJnZSBuby1sZiBlbXB0eSByZWFsbHktZW1wdHk7IGRvCisgICAgICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgdXBkYXRlIC1wICIkaSIgPiRpLm91dAorCXRlc3RfY21wICRpLm91dCAuLi8kaSA+PmZhaWx1cmVzIDI+JjEKKyAgICBkb25lICYmCisgICAgdGVzdCAteiAiJChjYXQgZmFpbHVyZXMpIgorJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXBkYXRlIChtb2R1bGUgbGlzdCBzdXBwb3J0cyBwYWNrZWQgcmVmcyknICcKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgcGFjay1yZWZzIC0tYWxsICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtbiB1cCAtZCAyPiBvdXQgJiYKKyAgICBncmVwICJjdnMgdXBkYXRlOiBOZXcgZGlyZWN0b3J5IFxgbWFzdGVyJ1wnJyIgPCBvdXQKKycKKworIy0tLS0tLS0tLS0tLQorIyBDVlMgU1RBVFVTCisjLS0tLS0tLS0tLS0tCisKK2NkICIkV09SS0RJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBzdGF0dXMnICcKKyAgICBta2RpciBzdGF0dXMuZGlyICYmCisgICAgZWNobyBMaW5lID4gc3RhdHVzLmRpci9zdGF0dXMuZmlsZSAmJgorICAgIGVjaG8gTGluZSA+IHN0YXR1cy5maWxlICYmCisgICAgZ2l0IGFkZCBzdGF0dXMuZGlyIHN0YXR1cy5maWxlICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiU3RhdHVzIHRlc3QiICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICAgY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgdXBkYXRlICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyBzdGF0dXMgfCBncmVwICJeRmlsZTogc3RhdHVzLmZpbGUiID4uLi9vdXQgJiYKKyAgICB0ZXN0X2xpbmVfY291bnQgPSAyIC4uL291dAorJworCitjZCAiJFdPUktESVIiCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgc3RhdHVzIChub25yZWN1cnNpdmUpJyAnCisgICAgY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgc3RhdHVzIC1sIHwgZ3JlcCAiXkZpbGU6IHN0YXR1cy5maWxlIiA+Li4vb3V0ICYmCisgICAgdGVzdF9saW5lX2NvdW50ID0gMSAuLi9vdXQKKycKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHN0YXR1cyAobm8gc3ViZGlycyBpbiBoZWFkZXIpJyAnCisgICAgY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgc3RhdHVzIHwgZ3JlcCBeRmlsZTogPi4uL291dCAmJgorICAgICEgZ3JlcCAvIDwuLi9vdXQKKycKKworIy0tLS0tLS0tLS0tLQorIyBDVlMgQ0hFQ0tPVVQKKyMtLS0tLS0tLS0tLS0KKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIC1jIChzaG93cyBtb2R1bGUgZGF0YWJhc2UpJyAnCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyBjbyAtYyA+IG91dCAmJgorICAgIGdyZXAgIl5tYXN0ZXJbCSBdWyAJXSptYXN0ZXIkIiA8b3V0ICYmCisgICAgISBncmVwIC12ICJebWFzdGVyWwkgXVsgCV0qbWFzdGVyJCIgPG91dAorJworCisjLS0tLS0tLS0tLS0tCisjIENWUyBMT0cKKyMtLS0tLS0tLS0tLS0KKworIyBLbm93biBpc3N1ZXMgd2l0aCBnaXQtY3Zzc2VydmVyIGN1cnJlbnQgbG9nIG91dHB1dDoKKyMgIC0gSGFyZCBjb2RlZCAibGluZXM6ICsyIC0zIiBwbGFjZWhvbGRlciwgaW5zdGVhZCBvZiByZWFsIG51bWJlcnMuCisjICAtIENWUyBub3JtYWxseSBkb2VzIG5vdCBpbnRlcm5hbGx5IGFkZCBhIGJsYW5rIGZpcnN0IGxpbmUKKyMgICAgb3IgYSBsYXN0IGxpbmUgd2l0aCBub3RoaW5nIGJ1dCBhIHNwYWNlIHRvIGxvZyBtZXNzYWdlcy4KKyMgIC0gVGhlIGxhdGVzdCBjdnMgMS4xMi54IHNlcnZlciBzZW5kcyArMDAwMCB0aW1lem9uZSAod2l0aCBzb21lIGhpZGRlbiAiTVQiCisjICAgIHRhZ2dpbmcgaW4gdGhlIHByb3RvY29sKSwgYW5kIGlmIGN2cyAxLjEyLnggY2xpZW50IHNlZXMgdGhlIE1UIHRhZ3MsCisjICAgIGl0IGNvbnZlcnRzIHRvIGxvY2FsIHRpbWUgem9uZS4gIGdpdC1jdnNzZXJ2ZXIgZG9lc24ndCBkbyB0aGUgKzAwMDAKKyMgICAgb3IgdGhlIE1UIHRhZ3MuLi4KKyMgIC0gVGhlIGxhdGVzdCAxLjEyLnggcmVsZWFzZXMgYWRkIGEgImNvbW1pdGlkOiIgZmllbGQgb24gdG8gdGhlIGVuZCBvZiB0aGUKKyMgICAgImRhdGU6IiBsaW5lIChhZnRlciAibGluZXM6IikuICBNYXliZSB3ZSBjb3VsZCBzdGljayBnaXQncyBjb21taXQgaWQKKyMgICAgaW4gaXQ/ICBPciBkb2VzIENWUyBleHBlY3QgYSBjZXJ0YWluIG51bWJlciBvZiBiaXRzICh0b28gZmV3IGZvcgorIyAgICBhIGZ1bGwgc2hhMSk/CisjCisjIEdpdmVuIHRoZSBhYm92ZSwgZXhwZWN0IHRoZSBmb2xsb3dpbmcgdGVzdCB0byBicmVhayBpZiBnaXQtY3Zzc2VydmVyJ3MKKyMgbG9nIG91dHB1dCBpcyBpbXByb3ZlZC4gIFRoZSB0ZXN0IGlzIGp1c3QgdG8gZW5zdXJlIGl0IGRvZXNuJ3QKKyMgYWNjaWRlbnRhbGx5IGdldCB3b3JzZS4KKworc2VkIC1lICdzL154Ly8nIC1lICdzL1NQJC8gLycgPiAiJFdPUktESVIvZXhwZWN0IiA8PEVPRgoreAoreFJDUyBmaWxlOiAkV09SS0RJUi9naXRjdnMuZ2l0L21hc3Rlci9tZXJnZSx2Cit4V29ya2luZyBmaWxlOiBtZXJnZQoreGhlYWQ6IDEuNAoreGJyYW5jaDoKK3hsb2Nrczogc3RyaWN0Cit4YWNjZXNzIGxpc3Q6Cit4c3ltYm9saWMgbmFtZXM6Cit4a2V5d29yZCBzdWJzdGl0dXRpb246IGt2Cit4dG90YWwgcmV2aXNpb25zOiA0OwlzZWxlY3RlZCByZXZpc2lvbnM6IDQKK3hkZXNjcmlwdGlvbjoKK3gtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit4cmV2aXNpb24gMS40Cit4ZGF0ZTogX19EQVRFX187ICBhdXRob3I6IGF1dGhvcjsgIHN0YXRlOiBFeHA7ICBsaW5lczogKzIgLTMKK3gKK3hNZXJnZSB0ZXN0IChuby1vcCkKK3hTUAoreC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3hyZXZpc2lvbiAxLjMKK3hkYXRlOiBfX0RBVEVfXzsgIGF1dGhvcjogYXV0aG9yOyAgc3RhdGU6IEV4cDsgIGxpbmVzOiArMiAtMworeAoreE1lcmdlIHRlc3QgKGNvbmZsaWN0KQoreFNQCit4LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoreHJldmlzaW9uIDEuMgoreGRhdGU6IF9fREFURV9fOyAgYXV0aG9yOiBhdXRob3I7ICBzdGF0ZTogRXhwOyAgbGluZXM6ICsyIC0zCit4Cit4TWVyZ2UgdGVzdCAobWVyZ2UpCit4U1AKK3gtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit4cmV2aXNpb24gMS4xCit4ZGF0ZTogX19EQVRFX187ICBhdXRob3I6IGF1dGhvcjsgIHN0YXRlOiBFeHA7ICBsaW5lczogKzIgLTMKK3gKK3hNZXJnZSB0ZXN0IChwcmUtbWVyZ2UpCit4U1AKK3g9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRU9GCitleHBlY3RTdGF0PSIkPyIKKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGxvZycgJworICAgIGNkIGN2c3dvcmsgJiYKKyAgICB0ZXN0IHgiJGV4cGVjdFN0YXQiID0geCIwIiAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgbG9nIG1lcmdlID4uLi9vdXQgJiYKKyAgICBzZWQgLWUgInMlMlswLTldWzAtOV1bMC05XS9bMDFdWzAtOV0vWzAtM11bMC05XSBbMC0yXVswLTldOlswLTVdWzAtOV06WzAtNV1bMC05XSVfX0RBVEVfXyUiIC4uL291dCA+IC4uL2FjdHVhbCAmJgorICAgIHRlc3RfY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwKKycKKworIy0tLS0tLS0tLS0tLQorIyBDVlMgQU5OT1RBVEUKKyMtLS0tLS0tLS0tLS0KKworY2QgIiRXT1JLRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGFubm90YXRlJyAnCisgICAgY2QgY3Zzd29yayAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgYW5ub3RhdGUgbWVyZ2UgPi4uL291dCAmJgorICAgIHNlZCAtZSAicy8gLiovLyIgLi4vb3V0ID4uLi9hY3R1YWwgJiYKKyAgICBmb3IgaSBpbiAzIDEgMSAxIDEgMSAxIDEgMiA0OyBkbyBlY2hvIDEuJGk7IGRvbmUgPi4uL2V4cGVjdCAmJgorICAgIHRlc3RfY21wIC4uL2V4cGVjdCAuLi9hY3R1YWwKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaCBiL3QvdDk0MDEtZ2l0LWN2c3NlcnZlci1jcmxmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhNGVkMjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NDAxLWdpdC1jdnNzZXJ2ZXItY3JsZi5zaApAQCAtMCwwICsxLDM2OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOCBNYXR0aGV3IE9naWx2aWUKKyMgUGFydHMgYWRhcHRlZCBmcm9tIG90aGVyIHRlc3RzLgorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQtY3Zzc2VydmVyIC1rYiBtb2RlcworCit0ZXN0cyAta2IgbW9kZSBmb3IgYmluYXJ5IGZpbGVzIHdoZW4gYWNjZXNzaW5nIGEgZ2l0CityZXBvc2l0b3J5IHVzaW5nIGN2cyBDTEkgY2xpZW50IHZpYSBnaXQtY3Zzc2VydmVyIHNlcnZlcicKKworLiAuL3Rlc3QtbGliLnNoCisKK21hcmtlZF9hcyAoKSB7CisgICAgZm91bmRFbnRyeT0iJChncmVwICJeLyQyLyIgIiQxL0NWUy9FbnRyaWVzIikiCisgICAgaWYgWyB4IiRmb3VuZEVudHJ5IiA9IHgiIiBdIDsgdGhlbgorICAgICAgIGVjaG8gIk5PVCBGT1VORDogJDEgJDIgMSAkMyIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICAgICByZXR1cm4gMQorICAgIGZpCisgICAgdGVzdCB4IiQoZ3JlcCAiXi8kMi8iICIkMS9DVlMvRW50cmllcyIgfCBjdXQgLWQvIC1mNSkiID0geCIkMyIKKyAgICBzdGF0PSQ/CisgICAgZWNobyAiJDEgJDIgJHN0YXQgJyQzJyIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICByZXR1cm4gJHN0YXQKK30KKworbm90X3ByZXNlbnQoKSB7CisgICAgZm91bmRFbnRyeT0iJChncmVwICJeLyQyLyIgIiQxL0NWUy9FbnRyaWVzIikiCisgICAgaWYgWyAtciAiJDEvJDIiIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIkVycm9yOiBGaWxlIHN0aWxsIGV4aXN0czogJDEgJDIiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCisgICAgICAgIHJldHVybiAxOworICAgIGZpCisgICAgaWYgWyB4IiRmb3VuZEVudHJ5IiAhPSB4IiIgXSA7IHRoZW4KKyAgICAgICAgZWNobyAiRXJyb3I6IHNob3VsZCBub3QgaGF2ZSBmb3VuZDogJDEgJDIiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCisgICAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgICAgZWNobyAiQ29ycmVjdGx5IG5vdCBmb3VuZDogJDEgJDIiID4+ICIke1dPUktESVJ9L21hcmtlZC5sb2ciCisgICAgICAgIHJldHVybiAwOworICAgIGZpCit9CisKK2NoZWNrX3N0YXR1c19vcHRpb25zKCkgeworICAgIChjZCAiJDEiICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBzdGF0dXMgIiQyIiA+ICIke1dPUktESVJ9L3N0YXR1cy5vdXQiIDI+JjEKKyAgICApCisgICAgaWYgWyB4IiQ/IiAhPSB4IjAiIF0gOyB0aGVuCisJZWNobyAiRXJyb3IgZnJvbSBjdnMgc3RhdHVzOiAkMSAkMiIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKwlyZXR1cm4gMTsKKyAgICBmaQorICAgIGdvdD0iJChzZWQgLW4gLWUgJ3MvXlsgCV0qU3RpY2t5IE9wdGlvbnM6WyAJXSovL3AnICIke1dPUktESVJ9L3N0YXR1cy5vdXQiKSIKKyAgICBleHBlY3Q9IiQzIgorICAgIGlmIFsgeCIkZXhwZWN0IiA9IHgiIiBdIDsgdGhlbgorCWV4cGVjdD0iKG5vbmUpIgorICAgIGZpCisgICAgdGVzdCB4IiRnb3QiID0geCIkZXhwZWN0IgorICAgIHN0YXQ9JD8KKyAgICBlY2hvICJjdnMgc3RhdHVzOiAkMSAkMiAkc3RhdCAnJDMnICckZ290JyIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIKKyAgICByZXR1cm4gJHN0YXQKK30KKworY3ZzID4vZGV2L251bGwgMj4mMQoraWYgdGVzdCAkPyAtbmUgMQordGhlbgorICAgIHNraXBfYWxsPSdza2lwcGluZyBnaXQtY3Zzc2VydmVyIHRlc3RzLCBjdnMgbm90IGZvdW5kJworICAgIHRlc3RfZG9uZQorZmkKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMCit0aGVuCisgICAgc2tpcF9hbGw9J3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIHBlcmwgbm90IGF2YWlsYWJsZScKKyAgICB0ZXN0X2RvbmUKK2ZpCitwZXJsIC1lICd1c2UgREJJOyB1c2UgREJEOjpTUUxpdGUnID4vZGV2L251bGwgMj4mMSB8fCB7CisgICAgc2tpcF9hbGw9J3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIFBlcmwgU1FMaXRlIGludGVyZmFjZSB1bmF2YWlsYWJsZScKKyAgICB0ZXN0X2RvbmUKK30KKwordW5zZXQgR0lUX0RJUiBHSVRfQ09ORklHCitXT1JLRElSPSQocHdkKQorU0VSVkVSRElSPSQocHdkKS9naXRjdnMuZ2l0CitnaXRfY29uZmlnPSIkU0VSVkVSRElSL2NvbmZpZyIKK0NWU1JPT1Q9Ijpmb3JrOiRTRVJWRVJESVIiCitDVlNXT1JLPSIkKHB3ZCkvY3Zzd29yayIKK0NWU19TRVJWRVI9Z2l0LWN2c3NlcnZlcgorZXhwb3J0IENWU1JPT1QgQ1ZTX1NFUlZFUgorCitybSAtcmYgIiRDVlNXT1JLIiAiJFNFUlZFUkRJUiIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwJyAnCisgICAgZ2l0IGNvbmZpZyBwdXNoLmRlZmF1bHQgbWF0Y2hpbmcgJiYKKyAgICBlY2hvICJTaW1wbGUgdGV4dCBmaWxlIiA+dGV4dGZpbGUuYyAmJgorICAgIGVjaG8gIkZpbGUgd2l0aCBlbWJlZGRlZCBOVUw6IFEgPC0gdGhlcmUiIHwgcV90b19udWwgPiBiaW5maWxlLmJpbiAmJgorICAgIG1rZGlyIHN1YmRpciAmJgorICAgIGVjaG8gIkFub3RoZXIgdGV4dCBmaWxlIiA+IHN1YmRpci9maWxlLmggJiYKKyAgICBlY2hvICJBbm90aGVyIGJpbmFyeTogUSAodGhpcyB0aW1lIENSKSIgfCBxX3RvX2NyID4gc3ViZGlyL3dpdGhDci5iaW4gJiYKKyAgICBlY2hvICJNaXhlZCB1cCBOVUwsIGJ1dCBtYXJrZWQgdGV4dDogUSA8LSB0aGVyZSIgfCBxX3RvX251bCA+IG1peGVkVXAuYyAmJgorICAgIGVjaG8gIlVuc3BlY2lmaWVkIiA+IHN1YmRpci91bnNwZWNpZmllZC5vdGhlciAmJgorICAgIGVjaG8gIi8qLmJpbiAtY3JsZiIgPiAuZ2l0YXR0cmlidXRlcyAmJgorICAgIGVjaG8gIi8qLmMgY3JsZiIgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKKyAgICBlY2hvICJzdWJkaXIvKi5iaW4gLWNybGYiID4+IC5naXRhdHRyaWJ1dGVzICYmCisgICAgZWNobyAic3ViZGlyLyouYyBjcmxmIiA+PiAuZ2l0YXR0cmlidXRlcyAmJgorICAgIGVjaG8gInN1YmRpci9maWxlLmggY3JsZiIgPj4gLmdpdGF0dHJpYnV0ZXMgJiYKKyAgICBnaXQgYWRkIC5naXRhdHRyaWJ1dGVzIHRleHRmaWxlLmMgYmluZmlsZS5iaW4gbWl4ZWRVcC5jIHN1YmRpci8qICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAiRmlyc3QgQ29tbWl0IiAmJgorICAgIGdpdCBjbG9uZSAtcSAtLWJhcmUgIiRXT1JLRElSLy5naXQiICIkU0VSVkVSRElSIiA+L2Rldi9udWxsIDI+JjEgJiYKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMuZW5hYmxlZCB0cnVlICYmCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyBnaXRjdnMubG9nZmlsZSAiJFNFUlZFUkRJUi9naXRjdnMubG9nIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKGRlZmF1bHQgY3JsZiknICcKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICB0ZXN0IHgiJChncmVwICcvLWsnIGN2c3dvcmsvQ1ZTL0VudHJpZXMgY3Zzd29yay9zdWJkaXIvQ1ZTL0VudHJpZXMpIiA9IHgiIgorJworCitybSAtcmYgY3Zzd29yawordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIChhbGxiaW5hcnkpJyAnCisgICAgR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmFsbGJpbmFyeSB0cnVlICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgdGV4dGZpbGUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgLWtiCisnCisKK3JtIC1yZiBjdnN3b3JrIGN2cy5sb2cKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyAodXNlIGF0dHJpYnV0ZXMvYWxsYmluYXJ5KScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy51c2VjcmxmYXR0ciB0cnVlICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjbyAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgdGV4dGZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIGJpbmZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIC5naXRhdHRyaWJ1dGVzIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBmaWxlLmggIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgLWtiCisnCisKK3JtIC1yZiBjdnN3b3JrCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gKHVzZSBhdHRyaWJ1dGVzKScgJworICAgIEdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgLS1ib29sIGdpdGN2cy5hbGxiaW5hcnkgZmFsc2UgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZGluZyBmaWxlcycgJworICAgIChjZCBjdnN3b3JrICYmCisgICAgKGNkIHN1YmRpciAmJgorICAgIGVjaG8gIm1vcmUgdGV4dCIgPiBzcmMuYyAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgYWRkIHNyYy5jID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgLiBzcmMuYyAiIiAmJgorICAgIGVjaG8gInBzdWVkby1iaW5hcnkiID4gdGVtcC5iaW4KKyAgICApICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc3ViZGlyL3RlbXAuYmluID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgc3ViZGlyIHRlbXAuYmluICIta2IiICYmCisgICAgY2Qgc3ViZGlyICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjaSAtbSAiYWRkaW5nIGZpbGVzIiA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIC4gdGVtcC5iaW4gIi1rYiIgJiYKKyAgICBtYXJrZWRfYXMgLiBzcmMuYyAiIgorICAgICkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRpbmcnICcKKyAgICBnaXQgcHVsbCBnaXRjdnMuZ2l0ICYmCisgICAgZWNobyAnaGknID4gc3ViZGlyL25ld2ZpbGUuYmluICYmCisgICAgZWNobyAnanVuaycgPiBzdWJkaXIvZmlsZS5oICYmCisgICAgZWNobyAnaGknID4gc3ViZGlyL25ld2ZpbGUuYyAmJgorICAgIGVjaG8gJ2hlbGxvJyA+PiBiaW5maWxlLmJpbiAmJgorICAgIGdpdCBhZGQgc3ViZGlyL25ld2ZpbGUuYmluIHN1YmRpci9maWxlLmggc3ViZGlyL25ld2ZpbGUuYyBiaW5maWxlLmJpbiAmJgorICAgIGdpdCBjb21taXQgLXEgLW0gIkFkZCBhbmQgY2hhbmdlIHNvbWUgZmlsZXMiICYmCisgICAgZ2l0IHB1c2ggZ2l0Y3ZzLmdpdCA+L2Rldi9udWxsICYmCisgICAgKGNkIGN2c3dvcmsgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIHVwZGF0ZQorICAgICkgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmMgIiIgJiYKKyAgICBlY2hvICJGaWxlIHdpdGggZW1iZWRkZWQgTlVMOiBRIDwtIHRoZXJlIiB8IHFfdG9fbnVsID4gdG1wRXhwZWN0MSAmJgorICAgIGVjaG8gImhlbGxvIiA+PiB0bXBFeHBlY3QxICYmCisgICAgY21wIGN2c3dvcmsvYmluZmlsZS5iaW4gdG1wRXhwZWN0MQorJworCitybSAtcmYgY3Zzd29yawordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvICh1c2UgYXR0cmlidXRlcy9ndWVzcyknICcKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIGdpdGN2cy5hbGxiaW5hcnkgZ3Vlc3MgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrL3N1YmRpciBuZXdmaWxlLmMgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgbXVsdGktbGluZSBmaWxlcycgJworICAgICggZWNobyAibGluZSAxIiAmJgorICAgICAgZWNobyAibGluZSAyIiAmJgorICAgICAgZWNobyAibGluZSAzIiAmJgorICAgICAgZWNobyAibGluZSA0IHdpdGggTlVMOiBRIDwtIiApIHwgcV90b19udWwgPiBtdWx0aWxpbmUuYyAmJgorICAgIGdpdCBhZGQgbXVsdGlsaW5lLmMgJiYKKyAgICAoIGVjaG8gImxpbmUgMSIgJiYKKyAgICAgIGVjaG8gImxpbmUgMiIgJiYKKyAgICAgIGVjaG8gImxpbmUgMyIgJiYKKyAgICAgIGVjaG8gImxpbmUgNCIgKSB8IHFfdG9fbnVsID4gbXVsdGlsaW5lVHh0LmMgJiYKKyAgICBnaXQgYWRkIG11bHRpbGluZVR4dC5jICYmCisgICAgZ2l0IGNvbW1pdCAtcSAtbSAibXVsdGlsaW5lIGZpbGVzIiAmJgorICAgIGdpdCBwdXNoIGdpdGN2cy5naXQgPi9kZXYvbnVsbAorJworCitybSAtcmYgY3Zzd29yawordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIChndWVzcyknICcKKyAgICBHSVRfRElSPSIkU0VSVkVSRElSIiBnaXQgY29uZmlnIC0tYm9vbCBnaXRjdnMudXNlY3JsZmF0dHIgZmFsc2UgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayB0ZXh0ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtaXhlZFVwLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHVuc3BlY2lmaWVkLm90aGVyICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYmluICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIG5ld2ZpbGUuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY28gYW5vdGhlciBjb3B5IChndWVzcyknICcKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGNvIC1kIGN2c3dvcmsyIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIC5naXRhdHRyaWJ1dGVzICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG11bHRpbGluZVR4dC5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciB3aXRoQ3IuYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5iaW4gIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYyAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgc3RhdHVzIC0gc3RpY2t5IG9wdGlvbnMnICcKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMiB0ZXh0ZmlsZS5jICIiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIgYmluZmlsZS5iaW4gLWtiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIgLmdpdGF0dHJpYnV0ZXMgIiIgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMiBtaXhlZFVwLmMgLWtiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIgbXVsdGlsaW5lVHh0LmMgIiIgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMi9zdWJkaXIgd2l0aENyLmJpbiAta2IgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMiBzdWJkaXIvd2l0aENyLmJpbiAta2IgJiYKKyAgICBjaGVja19zdGF0dXNfb3B0aW9ucyBjdnN3b3JrMi9zdWJkaXIgZmlsZS5oICIiICYmCisgICAgY2hlY2tfc3RhdHVzX29wdGlvbnMgY3Zzd29yazIgc3ViZGlyL2ZpbGUuaCAiIiAmJgorICAgIGNoZWNrX3N0YXR1c19vcHRpb25zIGN2c3dvcmsyL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIGNoZWNrX3N0YXR1c19vcHRpb25zIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmJpbiAiIiAmJgorICAgIGNoZWNrX3N0YXR1c19vcHRpb25zIGN2c3dvcmsyL3N1YmRpciBuZXdmaWxlLmMgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHRleHQgKGd1ZXNzKScgJworICAgIChjZCBjdnN3b3JrICYmCisgICAgZWNobyAic2ltcGxlVGV4dCIgPiBzaW1wbGVUZXh0LmMgJiYKKyAgICBHSVRfQ09ORklHPSIkZ2l0X2NvbmZpZyIgY3ZzIC1RIGFkZCBzaW1wbGVUZXh0LmMKKyAgICApICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgc2ltcGxlVGV4dC5jICIiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBiaW4gKGd1ZXNzKScgJworICAgIChjZCBjdnN3b3JrICYmCisgICAgZWNobyAic2ltcGxlQmluOiBOVUw6IFEgPC0gdGhlcmUiIHwgcV90b19udWwgPiBzaW1wbGVCaW4uYmluICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBhZGQgc2ltcGxlQmluLmJpbgorICAgICkgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBzaW1wbGVCaW4uYmluIC1rYgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZW1vdmUgZmlsZXMgKGd1ZXNzKScgJworICAgIChjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBybSAtZiBzdWJkaXIvZmlsZS5oICYmCisgICAgKGNkIHN1YmRpciAmJgorICAgIEdJVF9DT05GSUc9IiRnaXRfY29uZmlnIiBjdnMgLVEgcm0gLWYgd2l0aENyLmJpbgorICAgICkpICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsvc3ViZGlyIGZpbGUuaCAiIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgY2kgKGd1ZXNzKScgJworICAgIChjZCBjdnN3b3JrICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSBjaSAtbSAiYWRkL3JtIGZpbGVzIiA+Y3ZzLmxvZyAyPiYxCisgICAgKSAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBiaW5maWxlLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayAuZ2l0YXR0cmlidXRlcyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtdWx0aWxpbmUuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBtdWx0aWxpbmVUeHQuYyAiIiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsvc3ViZGlyIHdpdGhDci5iaW4gJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrL3N1YmRpciBmaWxlLmggJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgdW5zcGVjaWZpZWQub3RoZXIgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5iaW4gIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yay9zdWJkaXIgbmV3ZmlsZS5jICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsgc2ltcGxlQmluLmJpbiAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yayBzaW1wbGVUZXh0LmMgIiIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlIHN1YmRpciBvZiBvdGhlciBjb3B5IChndWVzcyknICcKKyAgICAoY2QgY3Zzd29yazIvc3ViZGlyICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyAtUSB1cGRhdGUKKyAgICApICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIC5naXRhdHRyaWJ1dGVzICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG11bHRpbGluZVR4dC5jICIiICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIvc3ViZGlyIHdpdGhDci5iaW4gJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMi9zdWJkaXIgZmlsZS5oICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5iaW4gIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYyAiIiAmJgorICAgIG5vdF9wcmVzZW50IGN2c3dvcmsyIHNpbXBsZUJpbi5iaW4gJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMiBzaW1wbGVUZXh0LmMKKycKKworZWNobyAic3RhcnRpbmcgdXBkYXRlL21lcmdlIiA+PiAiJHtXT1JLRElSfS9tYXJrZWQubG9nIgordGVzdF9leHBlY3Rfc3VjY2VzcyAndXBkYXRlL21lcmdlIGZ1bGwgb3RoZXIgY29weSAoZ3Vlc3MpJyAnCisgICAgZ2l0IHB1bGwgZ2l0Y3ZzLmdpdCBtYXN0ZXIgJiYKKyAgICBzZWQgInMvMy9yZXBsYWNlZF8zLyIgPCBtdWx0aWxpbmVUeHQuYyA+IG1sLnRlbXAgJiYKKyAgICBtdiBtbC50ZW1wIG11bHRpbGluZVR4dC5jICYmCisgICAgZ2l0IGFkZCBtdWx0aWxpbmVUeHQuYyAmJgorICAgIGdpdCBjb21taXQgLXEgLW0gIm1vZGlmeSBtdWx0aWxpbmUgZmlsZSIgPj4gIiR7V09SS0RJUn0vbWFya2VkLmxvZyIgJiYKKyAgICBnaXQgcHVzaCBnaXRjdnMuZ2l0ID4vZGV2L251bGwgJiYKKyAgICAoY2QgY3Zzd29yazIgJiYKKyAgICBzZWQgInMvMS9yZXBsYWNlZF8xLyIgPCBtdWx0aWxpbmVUeHQuYyA+IG1sLnRlbXAgJiYKKyAgICBtdiBtbC50ZW1wIG11bHRpbGluZVR4dC5jICYmCisgICAgR0lUX0NPTkZJRz0iJGdpdF9jb25maWciIGN2cyB1cGRhdGUgPiBjdnMubG9nIDI+JjEKKyAgICApICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIHRleHRmaWxlLmMgIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgYmluZmlsZS5iaW4gLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIC5naXRhdHRyaWJ1dGVzICIiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG1peGVkVXAuYyAta2IgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIgbXVsdGlsaW5lLmMgLWtiICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyIG11bHRpbGluZVR4dC5jICIiICYmCisgICAgbm90X3ByZXNlbnQgY3Zzd29yazIvc3ViZGlyIHdpdGhDci5iaW4gJiYKKyAgICBub3RfcHJlc2VudCBjdnN3b3JrMi9zdWJkaXIgZmlsZS5oICYmCisgICAgbWFya2VkX2FzIGN2c3dvcmsyL3N1YmRpciB1bnNwZWNpZmllZC5vdGhlciAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMi9zdWJkaXIgbmV3ZmlsZS5iaW4gIiIgJiYKKyAgICBtYXJrZWRfYXMgY3Zzd29yazIvc3ViZGlyIG5ld2ZpbGUuYyAiIiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBzaW1wbGVCaW4uYmluIC1rYiAmJgorICAgIG1hcmtlZF9hcyBjdnN3b3JrMiBzaW1wbGVUZXh0LmMgIiIgJiYKKyAgICBlY2hvICJsaW5lIHJlcGxhY2VkXzEiID4gdG1wRXhwZWN0MiAmJgorICAgIGVjaG8gImxpbmUgMiIgPj4gdG1wRXhwZWN0MiAmJgorICAgIGVjaG8gImxpbmUgcmVwbGFjZWRfMyIgPj4gdG1wRXhwZWN0MiAmJgorICAgIGVjaG8gImxpbmUgNCIgfCBxX3RvX251bCA+PiB0bXBFeHBlY3QyICYmCisgICAgY21wIGN2c3dvcmsyL211bHRpbGluZVR4dC5jIHRtcEV4cGVjdDIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NDAyLWdpdC1jdnNzZXJ2ZXItcmVmcy5zaCBiL3QvdDk0MDItZ2l0LWN2c3NlcnZlci1yZWZzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQwMGRmMDgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NDAyLWdpdC1jdnNzZXJ2ZXItcmVmcy5zaApAQCAtMCwwICsxLDU1MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdC1jdnNzZXJ2ZXIgYW5kIGdpdCByZWZzcGVjcworCit0ZXN0cyBhYmlsaXR5IGZvciBnaXQtY3Zzc2VydmVyIHRvIHN3aXRjaCBiZXR3ZWVuIGFuZCBjb21wYXJlCit0YWdzLCBicmFuY2hlcyBhbmQgb3RoZXIgZ2l0IHJlZnNwZWNzJworCisuIC4vdGVzdC1saWIuc2gKKworIyMjIyMjIyMjCisKK2NoZWNrX3N0YXJ0X3RyZWUoKSB7CisJcm0gLWYgIiRXT1JLRElSL2xpc3QuZXhwZWN0ZWQiCisJZWNobyAic3RhcnQgJDEiID4+IiR7V09SS0RJUn0vY2hlY2subG9nIgorfQorCitjaGVja19maWxlKCkgeworCXNhbmRib3g9IiQxIgorCWZpbGU9IiQyIgorCXZlcj0iJDMiCisJR0lUX0RJUj0kU0VSVkVSRElSIGdpdCBzaG93ICIke3Zlcn06JHtmaWxlfSIgXAorCQk+IiRXT1JLRElSL2NoZWNrLmdvdCIgMj4iJFdPUktESVIvY2hlY2suc3RkZXJyIgorCXRlc3RfY21wICIkV09SS0RJUi9jaGVjay5nb3QiICIkc2FuZGJveC8kZmlsZSIKKwlzdGF0PSQ/CisJZWNobyAiY2hlY2tfZmlsZSAkc2FuZGJveCAkZmlsZSAkdmVyIDogJHN0YXQiID4+IiRXT1JLRElSL2NoZWNrLmxvZyIKKwllY2hvICIkZmlsZSIgPj4iJFdPUktESVIvbGlzdC5leHBlY3RlZCIKKwlyZXR1cm4gJHN0YXQKK30KKworY2hlY2tfZW5kX3RyZWUoKSB7CisJc2FuZGJveD0iJDEiICYmCisJZmluZCAiJHNhbmRib3giIC1uYW1lIENWUyAtcHJ1bmUgLW8gLXR5cGUgZiAtcHJpbnQgPiIkV09SS0RJUi9saXN0LmFjdHVhbCIgJiYKKwlzb3J0IDwiJFdPUktESVIvbGlzdC5leHBlY3RlZCIgPmV4cGVjdGVkICYmCisJc29ydCA8IiRXT1JLRElSL2xpc3QuYWN0dWFsIiB8IHNlZCAtZSAicyVjdnN3b3JrLyUlIiA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsICYmCisJcm0gZXhwZWN0ZWQgYWN0dWFsCit9CisKK2NoZWNrX2VuZF9mdWxsX3RyZWUoKSB7CisJc2FuZGJveD0iJDEiICYmCisJc29ydCA8IiRXT1JLRElSL2xpc3QuZXhwZWN0ZWQiID5leHBlY3RlZCAmJgorCWZpbmQgIiRzYW5kYm94IiAtbmFtZSBDVlMgLXBydW5lIC1vIC10eXBlIGYgLXByaW50IHwKKwlzZWQgLWUgInMlJHNhbmRib3gvJSUiIHwgc29ydCA+YWN0MSAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdDEgJiYKKwlnaXQgbHMtdHJlZSAtLW5hbWUtb25seSAtciAiJDIiIHwgc29ydCA+YWN0MiAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdDIgJiYKKwlybSBleHBlY3RlZCBhY3QxIGFjdDIKK30KKworIyMjIyMjIyMjCisKK2NoZWNrX2RpZmYoKSB7CisJZGlmZkZpbGU9IiQxIgorCXZPbGQ9IiQyIgorCXZOZXc9IiQzIgorCXJtIC1yZiBkaWZmU2FuZGJveAorCWdpdCBjbG9uZSAtcSAtbiAuIGRpZmZTYW5kYm94ICYmCisJKAorCQljZCBkaWZmU2FuZGJveCAmJgorCQlnaXQgY2hlY2tvdXQgIiR2T2xkIiAmJgorCQlnaXQgYXBwbHkgLXAwIC0taW5kZXggPCIuLi8kZGlmZkZpbGUiICYmCisJCWdpdCBkaWZmIC0tZXhpdC1jb2RlICIkdk5ldyIKKwkpID5jaGVja19kaWZmX2FwcGx5Lm91dCAyPiYxCit9CisKKyMjIyMjIyMjIworCitjdnMgPi9kZXYvbnVsbCAyPiYxCitpZiB0ZXN0ICQ/IC1uZSAxCit0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIGdpdC1jdnNzZXJ2ZXIgdGVzdHMsIGN2cyBub3QgZm91bmQnCisJdGVzdF9kb25lCitmaQoraWYgISB0ZXN0X2hhdmVfcHJlcmVxIFBFUkwKK3RoZW4KKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgcGVybCBub3QgYXZhaWxhYmxlJworCXRlc3RfZG9uZQorZmkKK3BlcmwgLWUgJ3VzZSBEQkk7IHVzZSBEQkQ6OlNRTGl0ZScgPi9kZXYvbnVsbCAyPiYxIHx8IHsKKwlza2lwX2FsbD0nc2tpcHBpbmcgZ2l0LWN2c3NlcnZlciB0ZXN0cywgUGVybCBTUUxpdGUgaW50ZXJmYWNlIHVuYXZhaWxhYmxlJworCXRlc3RfZG9uZQorfQorCit1bnNldCBHSVRfRElSIEdJVF9DT05GSUcKK1dPUktESVI9JChwd2QpCitTRVJWRVJESVI9JChwd2QpL2dpdGN2cy5naXQKK2dpdF9jb25maWc9IiRTRVJWRVJESVIvY29uZmlnIgorQ1ZTUk9PVD0iOmZvcms6JFNFUlZFUkRJUiIKK0NWU1dPUks9IiQocHdkKS9jdnN3b3JrIgorQ1ZTX1NFUlZFUj1naXQtY3Zzc2VydmVyCitleHBvcnQgQ1ZTUk9PVCBDVlNfU0VSVkVSCisKK3JtIC1yZiAiJENWU1dPUksiICIkU0VSVkVSRElSIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdjEsIGIxJyAnCisJZWNobyAiU2ltcGxlIHRleHQgZmlsZSIgPnRleHRmaWxlLmMgJiYKKwllY2hvICJ0MiIgPnQyICYmCisJbWtkaXIgYWRpciAmJgorCWVjaG8gImFkaXIvYWZpbGUgbGluZTEiID5hZGlyL2FmaWxlICYmCisJZWNobyAiYWRpci9hZmlsZSBsaW5lMiIgPj5hZGlyL2FmaWxlICYmCisJZWNobyAiYWRpci9hZmlsZSBsaW5lMyIgPj5hZGlyL2FmaWxlICYmCisJZWNobyAiYWRpci9hZmlsZSBsaW5lNCIgPj5hZGlyL2FmaWxlICYmCisJZWNobyAiYWRpci9hMmZpbGUiID4+YWRpci9hMmZpbGUgJiYKKwlta2RpciBhZGlyL2JkaXIgJiYKKwllY2hvICJhZGlyL2JkaXIvYmZpbGUgbGluZSAxIiA+YWRpci9iZGlyL2JmaWxlICYmCisJZWNobyAiYWRpci9iZGlyL2JmaWxlIGxpbmUgMiIgPj5hZGlyL2JkaXIvYmZpbGUgJiYKKwllY2hvICJhZGlyL2JkaXIvYjJmaWxlIiA+YWRpci9iZGlyL2IyZmlsZSAmJgorCWdpdCBhZGQgdGV4dGZpbGUuYyB0MiBhZGlyICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAiRmlyc3QgQ29tbWl0ICh2MSkiICYmCisJZ2l0IHRhZyB2MSAmJgorCWdpdCBicmFuY2ggYjEgJiYKKwlnaXQgY2xvbmUgLXEgLS1iYXJlICIkV09SS0RJUi8uZ2l0IiAiJFNFUlZFUkRJUiIgPi9kZXYvbnVsbCAyPiYxICYmCisJR0lUX0RJUj0iJFNFUlZFUkRJUiIgZ2l0IGNvbmZpZyAtLWJvb2wgZ2l0Y3ZzLmVuYWJsZWQgdHJ1ZSAmJgorCUdJVF9ESVI9IiRTRVJWRVJESVIiIGdpdCBjb25maWcgZ2l0Y3ZzLmxvZ2ZpbGUgIiRTRVJWRVJESVIvZ2l0Y3ZzLmxvZyIKKycKKworcm0gLXJmIGN2c3dvcmsKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyB2MScgJworCWN2cyAtZiAtUSBjbyAtciB2MSAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDIgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IyZmlsZSB2MSAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKworcm0gLXJmIGN2c3dvcmsKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyBiMScgJworCWN2cyAtZiBjbyAtciBiMSAtZCBjdnN3b3JrIG1hc3RlciA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDIgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IyZmlsZSB2MSAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIGNvIGIxIFtjdnN3b3JrM10nICcKKwljdnMgLWYgY28gLXIgYjEgLWQgY3Zzd29yazMgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmszICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyB0ZXh0ZmlsZS5jIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9hZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9hMmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9iZGlyL2IyZmlsZSB2MSAmJgorCWNoZWNrX2VuZF9mdWxsX3RyZWUgY3Zzd29yazMgdjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCBjdnN3b3JrMyBhbmQgc2F2ZSBkaWZmJyAnCisJKAorCQljZCBjdnN3b3JrMyAmJgorCQlzZWQgLWUgInMvbGluZTEvbGluZTEgLSBkYXRhLyIgYWRpci9hZmlsZSA+YWRpci9hZmlsZU5FVyAmJgorCQltdiAtZiBhZGlyL2FmaWxlTkVXIGFkaXIvYWZpbGUgJiYKKwkJZWNobyAiYWZpbGU1IiA+YWRpci9hZmlsZTUgJiYKKwkJcm0gdDIgJiYKKwkJY3ZzIC1mIGFkZCBhZGlyL2FmaWxlNSAmJgorCQljdnMgLWYgcm0gdDIgJiYKKwkJISBjdnMgLWYgZGlmZiAtTiAtdSA+IiRXT1JLRElSL2N2c3dvcmszZWRpdC5kaWZmIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgdjEuMiBvbiBiMScgJworCWdpdCBjaGVja291dCBiMSAmJgorCWVjaG8gIm5ldyB2MS4yIiA+dDMgJiYKKwlybSB0MiAmJgorCXNlZCAtZSAicy9saW5lMy9saW5lMyAtIG1vcmUgZGF0YS8iIGFkaXIvYWZpbGUgPmFkaXIvYWZpbGVORVcgJiYKKwltdiAtZiBhZGlyL2FmaWxlTkVXIGFkaXIvYWZpbGUgJiYKKwlybSBhZGlyL2EyZmlsZSAmJgorCWVjaG8gImEzZmlsZSIgPj5hZGlyL2EzZmlsZSAmJgorCWVjaG8gImJmaWxlIGxpbmUgMyIgPj5hZGlyL2JkaXIvYmZpbGUgJiYKKwlybSBhZGlyL2JkaXIvYjJmaWxlICYmCisJZWNobyAiYjNmaWxlIiA+YWRpci9iZGlyL2IzZmlsZSAmJgorCW1rZGlyIGNkaXIgJiYKKwllY2hvICJjZGlyL2NmaWxlIiA+Y2Rpci9jZmlsZSAmJgorCWdpdCBhZGQgLUEgY2RpciBhZGlyIHQzIHQyICYmCisJZ2l0IGNvbW1pdCAtcSAtbSAndjEuMicgJiYKKwlnaXQgdGFnIHYxLjIgJiYKKwlnaXQgcHVzaCAtLXRhZ3MgZ2l0Y3ZzLmdpdCBiMTpiMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgLWYgdXAgKG9uIGIxIGFkaXIpJyAnCisJKCBjZCBjdnN3b3JrL2FkaXIgJiYgY3ZzIC1mIHVwIC1kICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHQyIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EzZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIChvbiBiMSAvKScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLWQgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MyB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EzZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBjZGlyL2NmaWxlIHYxLjIgJiYKKwljaGVja19lbmRfdHJlZSBjdnN3b3JrCisnCisKKyMgTWFrZSBzdXJlICJDVlMvVGFnIiBmaWxlcyBkaWRuJ3QgZ2V0IG1lc3NlZCB1cDoKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAob24gYjEgLykgKGFnYWluOyBjaGVjayBDVlMvVGFnIGZpbGVzKScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLWQgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MyB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EzZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MS4yICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBjZGlyL2NmaWxlIHYxLjIgJiYKKwljaGVja19lbmRfdHJlZSBjdnN3b3JrCisnCisKKyMgdXBkYXRlIHRvIGFub3RoZXIgdmVyc2lvbjoKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAtciB2MScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLXIgdjEgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDIgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IyZmlsZSB2MSAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwJyAnCisJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiB1cCApID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX3RyZWUgY3Zzd29yaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgKGFnYWluOyBjaGVjayBDVlMvVGFnIGZpbGVzKScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLWQgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDIgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2IyZmlsZSB2MSAmJgorCWNoZWNrX2VuZF90cmVlIGN2c3dvcmsKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2V0dXAgc2ltcGxlIGIyJyAnCisJZ2l0IGJyYW5jaCBiMiB2MSAmJgorCWdpdCBwdXNoIC0tdGFncyBnaXRjdnMuZ2l0IGIyOmIyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjbyBiMiBbaW50byBjdnN3b3JrMl0nICcKKwljdnMgLWYgY28gLXIgYjIgLWQgY3Zzd29yazIgbWFzdGVyID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX3RyZWUgY3Zzd29yaworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyb290IGRpciBlZGl0IFtjdnN3b3JrMl0nICcKKwkoCisJCWNkIGN2c3dvcmsyICYmIGVjaG8gIkxpbmUgMiIgPj50ZXh0ZmlsZS5jICYmCisJCSEgY3ZzIC1mIGRpZmYgLXUgPiIkV09SS0RJUi9jdnNFZGl0MS5kaWZmIiAmJgorCQljdnMgLWYgY29tbWl0IC1tICJlZGl0IHRleHRmaWxlLmMiIHRleHRmaWxlLmMKKwkpID5jdnNFZGl0MS5sb2cgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyb290IGRpciBybSBmaWxlIFtjdnN3b3JrMl0nICcKKwkoCisJCWNkIGN2c3dvcmsyICYmCisJCWN2cyAtZiBybSAtZiB0MiAmJgorCQljdnMgLWYgZGlmZiAtdSA+Li4vY3ZzRWRpdDItZW1wdHkuZGlmZiAmJgorCQkhIGN2cyAtZiBkaWZmIC1OIC11ID4iJFdPUktESVIvY3ZzRWRpdDItTi5kaWZmIiAmJgorCQljdnMgLWYgY29tbWl0IC1tICJybSB0MiIKKwkpID5jdnNFZGl0Mi5sb2cgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgZWRpdC9hZGQvcm0gZmlsZXMgW2N2c3dvcmsyXScgJworCSgKKwkJY2QgY3Zzd29yazIgJiYKKwkJc2VkIC1lICJzL2xpbmUgMS9saW5lIDEgKHYyKS8iIGFkaXIvYmRpci9iZmlsZSA+YWRpci9iZGlyL2JmaWxlTkVXICYmCisJCW12IC1mIGFkaXIvYmRpci9iZmlsZU5FVyBhZGlyL2JkaXIvYmZpbGUgJiYKKwkJcm0gYWRpci9iZGlyL2IyZmlsZSAmJgorCQljZCBhZGlyICYmCisJCWN2cyAtZiBybSBiZGlyL2IyZmlsZSAmJgorCQllY2hvICI0dGggZmlsZSIgPmJkaXIvYjRmaWxlICYmCisJCWN2cyAtZiBhZGQgYmRpci9iNGZpbGUgJiYKKwkJISBjdnMgLWYgZGlmZiAtTiAtdSA+IiRXT1JLRElSL2N2c0VkaXQzLmRpZmYiICYmCisJCWdpdCBmZXRjaCBnaXRjdnMuZ2l0IGIyOmIyICYmCisJCSgKKwkJICBjZCAuLiAmJgorCQkgICEgY3ZzIC1mIGRpZmYgLXUgLU4gLXIgdjEuMiA+IiRXT1JLRElSL2N2c0VkaXQzLXYxLjIuZGlmZiIgJiYKKwkJICAhIGN2cyAtZiBkaWZmIC11IC1OIC1yIHYxLjIgLXIgdjEgPiIkV09SS0RJUi9jdnNFZGl0My12MS4yLXYxLmRpZmYiCisJCSkgJiYKKwkJY3ZzIC1mIGNvbW1pdCAtbSAidmFyaW91cyBhZGQvcm0vZWRpdCIKKwkpID5jdnMubG9nIDI+JjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndmFsaWRhdGUgcmVzdWx0IG9mIGVkaXRzIFtjdnN3b3JrMl0nICcKKwlnaXQgZmV0Y2ggZ2l0Y3ZzLmdpdCBiMjpiMiAmJgorCWdpdCB0YWcgdjIgYjIgJiYKKwlnaXQgcHVzaCAtLXRhZ3MgZ2l0Y3ZzLmdpdCBiMjpiMiAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yazIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIHRleHRmaWxlLmMgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYWZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYTJmaWxlIHYyICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMiBhZGlyL2JkaXIvYmZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYmRpci9iNGZpbGUgdjIgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsyIHYyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3ZhbGlkYXRlIGJhc2ljIGRpZmZzIHNhdmVkIGR1cmluZyBhYm92ZSBjdnN3b3JrMiBlZGl0cycgJworCXRlc3QgJChncmVwIEluZGV4OiBjdnNFZGl0MS5kaWZmIHwgd2MgLWwpID0gMSAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdnNFZGl0Mi1lbXB0eS5kaWZmICYmCisJdGVzdCAkKGdyZXAgSW5kZXg6IGN2c0VkaXQyLU4uZGlmZiB8IHdjIC1sKSA9IDEgJiYKKwl0ZXN0ICQoZ3JlcCBJbmRleDogY3ZzRWRpdDMuZGlmZiB8IHdjIC1sKSA9IDMgJiYKKwlybSAtcmYgZGlmZlNhbmRib3ggJiYKKwlnaXQgY2xvbmUgLXEgLW4gLiBkaWZmU2FuZGJveCAmJgorCSgKKwkJY2QgZGlmZlNhbmRib3ggJiYKKwkJZ2l0IGNoZWNrb3V0IHYxICYmCisJCWdpdCBhcHBseSAtcDAgLS1pbmRleCA8IiRXT1JLRElSL2N2c0VkaXQxLmRpZmYiICYmCisJCWdpdCBhcHBseSAtcDAgLS1pbmRleCA8IiRXT1JLRElSL2N2c0VkaXQyLU4uZGlmZiIgJiYKKwkJZ2l0IGFwcGx5IC1wMCAtLWRpcmVjdG9yeT1hZGlyIC0taW5kZXggPCIkV09SS0RJUi9jdnNFZGl0My5kaWZmIiAmJgorCQlnaXQgZGlmZiAtLWV4aXQtY29kZSB2MgorCSkgPiJjaGVja19kaWZmX2FwcGx5Lm91dCIgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSB2MS4yIGRpZmYgc2F2ZWQgZHVyaW5nIGxhc3QgY3Zzd29yazIgZWRpdCcgJworCXRlc3QgJChncmVwIEluZGV4OiBjdnNFZGl0My12MS4yLmRpZmYgfCB3YyAtbCkgPSA5ICYmCisJY2hlY2tfZGlmZiBjdnNFZGl0My12MS4yLmRpZmYgdjEuMiB2MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2YWxpZGF0ZSB2MS4yIHYxIGRpZmYgc2F2ZWQgZHVyaW5nIGxhc3QgY3Zzd29yazIgZWRpdCcgJworCXRlc3QgJChncmVwIEluZGV4OiBjdnNFZGl0My12MS4yLXYxLmRpZmYgfCB3YyAtbCkgPSA5ICYmCisJY2hlY2tfZGlmZiBjdnNFZGl0My12MS4yLXYxLmRpZmYgdjEuMiB2MQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgW2N2c3dvcmsyXScgJworCSggY2QgY3Zzd29yazIgJiYgY3ZzIC1mIHVwICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yazIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIHRleHRmaWxlLmMgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYWZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYTJmaWxlIHYyICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMiBhZGlyL2JkaXIvYmZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsyIGFkaXIvYmRpci9iNGZpbGUgdjIgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsyIHYyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAtciBiMiBbYmFjayB0byBjdnN3b3JrXScgJworCSggY2QgY3Zzd29yayAmJiBjdnMgLWYgdXAgLXIgYjIgKSA+Y3ZzLmxvZyAyPiYxICYmCisJY2hlY2tfc3RhcnRfdHJlZSBjdnN3b3JrICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHRleHRmaWxlLmMgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hZmlsZSB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2EyZmlsZSB2MiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2I0ZmlsZSB2MiAmJgorCWNoZWNrX2VuZF9mdWxsX3RyZWUgY3Zzd29yayB2MgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgLXIgYjEnICcKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwIC1yIGIxICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDMgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjNmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgY2Rpci9jZmlsZSB2MS4yICYmCisJY2hlY2tfZW5kX2Z1bGxfdHJlZSBjdnN3b3JrIHYxLjIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIC1BJyAnCisJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiB1cCAtQSApID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX2Z1bGxfdHJlZSBjdnN3b3JrIHYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAoY2hlY2sgQ1ZTL1RhZyBmaWxlcyknICcKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIHQyIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hMmZpbGUgdjEgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2JmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iMmZpbGUgdjEgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsgdjEKKycKKworIyBUaGlzIGlzIG5vdCByZWFsbHkgbGVnYWwgQ1ZTLCBidXQgaXQgc2VlbXMgdG8gd29yayBhbnl3YXk6Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgdXAgLXIgaGVhZHMvYjEnICcKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwIC1yIGhlYWRzL2IxICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdDMgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hM2ZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYmZpbGUgdjEuMiAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjNmaWxlIHYxLjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgY2Rpci9jZmlsZSB2MS4yICYmCisJY2hlY2tfZW5kX2Z1bGxfdHJlZSBjdnN3b3JrIHYxLjIKKycKKworIyBCdXQgdGhpcyBzaG91bGQgd29yayBldmVuIGlmIENWUyBjbGllbnQgY2hlY2tzIC1yIG1vcmUgY2FyZWZ1bGx5OgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIC1yIGhlYWRzXy1zLWIyIChjdnNzZXJ2ZXIgZXNjYXBlIG1lY2hhbmlzbSknICcKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwIC1yIGhlYWRzXy1zLWIyICkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yayAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0ZXh0ZmlsZS5jIHYyICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYWZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9hMmZpbGUgdjIgJiYKKwljaGVja19maWxlIGN2c3dvcmsgYWRpci9iZGlyL2JmaWxlIHYyICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iNGZpbGUgdjIgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmsgdjIKKycKKwordjFoYXNoPSQoZ2l0IHJldi1wYXJzZSB2MSkKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyB1cCAtciAkKGdpdCByZXYtcGFyc2UgdjEpJyAnCisJdGVzdCAtbiAiJHYxaGFzaCIgJiYKKwkoIGNkIGN2c3dvcmsgJiYgY3ZzIC1mIHVwIC1yICIkdjFoYXNoIiApID5jdnMubG9nIDI+JjEgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmsgJiYKKwljaGVja19maWxlIGN2c3dvcmsgdGV4dGZpbGUuYyB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayB0MiB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2FmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYTJmaWxlIHYxICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrIGFkaXIvYmRpci9iZmlsZSB2MSAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yayBhZGlyL2JkaXIvYjJmaWxlIHYxICYmCisJY2hlY2tfZW5kX2Z1bGxfdHJlZSBjdnN3b3JrIHYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBkaWZmIC1yIHYxIC11JyAnCisJKCBjZCBjdnN3b3JrICYmIGN2cyAtZiBkaWZmIC1yIHYxIC11ICkgPmN2c0RpZmYub3V0IDI+Y3ZzLmxvZyAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdnNEaWZmLm91dCAmJgorCXRlc3RfbXVzdF9iZV9lbXB0eSBjdnMubG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBkaWZmIC1OIC1yIHYyIC11JyAnCisJKCBjZCBjdnN3b3JrICYmICEgY3ZzIC1mIGRpZmYgLU4gLXIgdjIgLXUgKSA+Y3ZzRGlmZi5vdXQgMj5jdnMubG9nICYmCisJdGVzdF9tdXN0X2JlX2VtcHR5IGN2cy5sb2cgJiYKKwl0ZXN0IC1zIGN2c0RpZmYub3V0ICYmCisJY2hlY2tfZGlmZiBjdnNEaWZmLm91dCB2MiB2MSA+Y2hlY2tfZGlmZi5vdXQgMj4mMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjdnMgZGlmZiAtTiAtciB2MiAtciB2MS4yJyAnCisJKCBjZCBjdnN3b3JrICYmICEgY3ZzIC1mIGRpZmYgLU4gLXIgdjIgLXIgdjEuMiAtdSApID5jdnNEaWZmLm91dCAyPmN2cy5sb2cgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgY3ZzLmxvZyAmJgorCXRlc3QgLXMgY3ZzRGlmZi5vdXQgJiYKKwljaGVja19kaWZmIGN2c0RpZmYub3V0IHYyIHYxLjIgPmNoZWNrX2RpZmYub3V0IDI+JjEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYXBwbHkgZWFybHkgW2N2c3dvcmszXSBkaWZmIHRvIGIzJyAnCisJZ2l0IGNsb25lIC1xIC4gZ2l0d29yazMgJiYKKwkoCisJCWNkIGdpdHdvcmszICYmCisJCWdpdCBjaGVja291dCAtYiBiMyB2MSAmJgorCQlnaXQgYXBwbHkgLXAwIC0taW5kZXggPCIkV09SS0RJUi9jdnN3b3JrM2VkaXQuZGlmZiIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY3Zzd29yazMgZWRpdHMgYXBwbGllZCIKKwkpICYmCisJZ2l0IGZldGNoIGdpdHdvcmszIGIzOmIzICYmCisJZ2l0IHRhZyB2MyBiMworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVjayBbY3Zzd29yazNdIGRpZmYnICcKKwkoIGNkIGN2c3dvcmszICYmICEgY3ZzIC1mIGRpZmYgLU4gLXUgKSA+IiRXT1JLRElSL2N2c0RpZmYub3V0IiAyPmN2cy5sb2cgJiYKKwl0ZXN0X211c3RfYmVfZW1wdHkgY3ZzLmxvZyAmJgorCXRlc3QgLXMgY3ZzRGlmZi5vdXQgJiYKKwl0ZXN0ICQoZ3JlcCBJbmRleDogY3ZzRGlmZi5vdXQgfCB3YyAtbCkgPSAzICYmCisJdGVzdF9jbXAgY3ZzRGlmZi5vdXQgY3Zzd29yazNlZGl0LmRpZmYgJiYKKwljaGVja19kaWZmIGN2c0RpZmYub3V0IHYxIHYzID5jaGVja19kaWZmLm91dCAyPiYxCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ21lcmdlIGVhcmx5IFtjdnN3b3JrM10gYjMgd2l0aCBiMScgJworCSggY2QgZ2l0d29yazMgJiYgZ2l0IG1lcmdlIC1tICJtZXNzYWdlIiBiMSApICYmCisJZ2l0IGZldGNoIGdpdHdvcmszIGIzOmIzICYmCisJZ2l0IHRhZyB2M21lcmdlZCBiMyAmJgorCWdpdCBwdXNoIC0tdGFncyBnaXRjdnMuZ2l0IGIzOmIzCisnCisKKyMgVGhpcyB0ZXN0IHdvdWxkIGZhaWwgaWYgY3Zzc2VydmVyIHByb3Blcmx5IGNyZWF0ZWQgYSAiLiNhZmlsZSIqIGZpbGUKKyMgZm9yIHRoZSBtZXJnZS4KKyMgVE9ETzogVmFsaWRhdGUgdGhhdCB0aGUgLiMgZmlsZSB3YXMgc2F2ZWQgcHJvcGVybHksIGFuZCB0aGVuCisjICAgZGVsZXRlL2lnbm9yZSBpdCB3aGVuIGNoZWNraW5nIHRoZSB0cmVlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3ZzIHVwIGRpcnR5IFtjdnN3b3JrM10nICcKKwkoCisJCWNkIGN2c3dvcmszICYmCisJCWN2cyAtZiB1cCAmJgorCQkhIGN2cyAtZiBkaWZmIC1OIC11ID4iJFdPUktESVIvY3ZzRGlmZi5vdXQiCisJKSA+Y3ZzLmxvZyAyPiYxICYmCisJdGVzdCAtcyBjdnNEaWZmLm91dCAmJgorCXRlc3QgJChncmVwIEluZGV4OiBjdnNEaWZmLm91dCB8IHdjIC1sKSA9IDIgJiYKKwljaGVja19zdGFydF90cmVlIGN2c3dvcmszICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyB0ZXh0ZmlsZS5jIHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyB0MyB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9hZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9hM2ZpbGUgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGFkaXIvYWZpbGU1IHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2JkaXIvYmZpbGUgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGFkaXIvYmRpci9iM2ZpbGUgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGNkaXIvY2ZpbGUgdjNtZXJnZWQgJiYKKwljaGVja19lbmRfZnVsbF90cmVlIGN2c3dvcmszIHYzbWVyZ2VkCisnCisKKyMgVE9ETzogdGVzdCBjdnMgc3RhdHVzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2N2cyBjb21taXQgW2N2c3dvcmszXScgJworCSgKKwkJY2QgY3Zzd29yazMgJiYKKwkJY3ZzIC1mIGNvbW1pdCAtbSAiZGlydHkgc2FuZGJveCBhZnRlciBhdXRvLW1lcmdlIgorCSkgPmN2cy5sb2cgMj4mMSAmJgorCWNoZWNrX3N0YXJ0X3RyZWUgY3Zzd29yazMgJiYKKwljaGVja19maWxlIGN2c3dvcmszIHRleHRmaWxlLmMgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIHQzIHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2FmaWxlIHYzbWVyZ2VkICYmCisJY2hlY2tfZmlsZSBjdnN3b3JrMyBhZGlyL2EzZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9hZmlsZTUgdjNtZXJnZWQgJiYKKwljaGVja19maWxlIGN2c3dvcmszIGFkaXIvYmRpci9iZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgYWRpci9iZGlyL2IzZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2ZpbGUgY3Zzd29yazMgY2Rpci9jZmlsZSB2M21lcmdlZCAmJgorCWNoZWNrX2VuZF9mdWxsX3RyZWUgY3Zzd29yazMgdjNtZXJnZWQgJiYKKwlnaXQgZmV0Y2ggZ2l0Y3ZzLmdpdCBiMzpiNCAmJgorCWdpdCB0YWcgdjQuMSBiNCAmJgorCWdpdCBkaWZmIC0tZXhpdC1jb2RlIHY0LjEgdjNtZXJnZWQgPmNoZWNrX2RpZmZfYXBwbHkub3V0IDI+JjEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaCBiL3QvdDk1MDAtZ2l0d2ViLXN0YW5kYWxvbmUtbm8tZXJyb3JzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU5NGIyZjEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NTAwLWdpdHdlYi1zdGFuZGFsb25lLW5vLWVycm9ycy5zaApAQCAtMCwwICsxLDc4OSBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwNyBKYWt1YiBOYXJlYnNraQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXR3ZWIgYXMgc3RhbmRhbG9uZSBzY3JpcHQgKGJhc2ljIHRlc3RzKS4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0d2ViIChnaXQgd2ViIGludGVyZmFjZSkgYXMgQ0dJIHNjcmlwdCBmcm9tCitjb21tYW5kbGluZSwgYW5kIGNoZWNrcyB0aGF0IGl0IHdvdWxkIG5vdCB3cml0ZSBhbnkgZXJyb3JzCitvciB3YXJuaW5ncyB0byBsb2cuJworCisKKy4gLi9naXR3ZWItbGliLnNoCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBubyBjb21taXRzIChlbXB0eSwganVzdCBpbml0aWFsaXplZCByZXBvc2l0b3J5KQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbm8gY29tbWl0czogcHJvamVjdHNfbGlzdCAoaW1wbGljaXQpJyBcCisJJ2dpdHdlYl9ydW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdubyBjb21taXRzOiBwcm9qZWN0c19pbmRleCcgXAorCSdnaXR3ZWJfcnVuICJhPXByb2plY3RfaW5kZXgiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbm8gY29tbWl0czogLmdpdCBzdW1tYXJ5IChpbXBsaWNpdCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ25vIGNvbW1pdHM6IC5naXQgY29tbWl0IChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbm8gY29tbWl0czogLmdpdCBjb21taXRkaWZmIChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ25vIGNvbW1pdHM6IC5naXQgdHJlZSAoaW1wbGljaXQgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdubyBjb21taXRzOiAuZ2l0IGhlYWRzJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWhlYWRzIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ25vIGNvbW1pdHM6IC5naXQgdGFncycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10YWdzIicKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW5pdGlhbCBjb21taXQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ01ha2UgaW5pdGlhbCBjb21taXQnIFwKKwknZWNobyAiTm90IGFuIGVtcHR5IGZpbGUuIiA+IGZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkluaXRpYWwgY29tbWl0LiIgJiYKKwkgZ2l0IGJyYW5jaCBiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncHJvamVjdHNfbGlzdCAoaW1wbGljaXQpJyBcCisJJ2dpdHdlYl9ydW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwcm9qZWN0c19pbmRleCcgXAorCSdnaXR3ZWJfcnVuICJhPXByb2plY3RfaW5kZXgiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBzdW1tYXJ5IChpbXBsaWNpdCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgY29tbWl0IChpbXBsaWNpdCBIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBjb21taXRkaWZmIChpbXBsaWNpdCBIRUFELCByb290IGNvbW1pdCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGNvbW1pdGRpZmZfcGxhaW4gKGltcGxpY2l0IEhFQUQsIHJvb3QgY29tbWl0KScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmX3BsYWluIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgY29tbWl0IChIRUFEKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXQ7aD1IRUFEIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgdHJlZSAoaW1wbGljaXQgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IGJsb2IgKGZpbGUpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWJsb2I7Zj1maWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgYmxvYl9wbGFpbiAoZmlsZSknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9YmxvYl9wbGFpbjtmPWZpbGUiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgbm9uZXhpc3RlbnQgb2JqZWN0cworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknLmdpdCBjb21taXQgKG5vbi1leGlzdGVudCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0O2g9bm9uLWV4aXN0ZW50IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgY29tbWl0ZGlmZiAobm9uLWV4aXN0ZW50KScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9bm9uLWV4aXN0ZW50IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgY29tbWl0ZGlmZiAobm9uLWV4aXN0ZW50IHZzIEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9bm9uLWV4aXN0ZW50O2g9SEVBRCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCScuZ2l0IHRyZWUgKDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDApJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRyZWU7aD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgdGFnICgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT10YWc7aD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgYmxvYiAobm9uLWV4aXN0ZW50KScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1ibG9iO2Y9bm9uLWV4aXN0ZW50IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJy5naXQgYmxvYl9wbGFpbiAobm9uLWV4aXN0ZW50KScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1ibG9iX3BsYWluO2Y9bm9uLWV4aXN0ZW50IicKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29tbWl0ZGlmZiB0ZXN0aW5nIChpbXBsaWNpdCwgb25lIGltcGxpY2l0IHRyZWUtaXNoKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogcm9vdCcgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IGZpbGUgYWRkZWQnIFwKKwknZWNobyAiTmV3IGZpbGUiID4gbmV3X2ZpbGUgJiYKKwkgZ2l0IGFkZCBuZXdfZmlsZSAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIGFkZGVkLiIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiBtb2RlIGNoYW5nZScgXAorCSd0ZXN0X2NobW9kICt4IG5ld19maWxlICYmCisJIGdpdCBjb21taXQgLWEgLW0gIk1vZGUgY2hhbmdlZC4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogZmlsZSByZW5hbWVkJyBcCisJJ2dpdCBtdiBuZXdfZmlsZSByZW5hbWVkX2ZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiRmlsZSByZW5hbWVkLiIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiBmaWxlIHRvIHN5bWxpbmsnIFwKKwkncm0gcmVuYW1lZF9maWxlICYmCisJIHRlc3RfbG5fc19hZGQgZmlsZSByZW5hbWVkX2ZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiRmlsZSB0byBzeW1saW5rLiIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiBmaWxlIGRlbGV0ZWQnIFwKKwknZ2l0IHJtIHJlbmFtZWRfZmlsZSAmJgorCSBybSAtZiByZW5hbWVkX2ZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiRmlsZSByZW1vdmVkLiIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiBmaWxlIGNvcGllZCAvIG5ldyBmaWxlJyBcCisJJ2NwIGZpbGUgZmlsZTIgJiYKKwkgZ2l0IGFkZCBmaWxlMiAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIGNvcGllZC4iICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmYiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigwKTogbW9kZSBjaGFuZ2UgYW5kIG1vZGlmaWVkJyBcCisJJ2VjaG8gIk5ldyBsaW5lIiA+PiBmaWxlMiAmJgorCSB0ZXN0X2NobW9kICt4IGZpbGUyICYmCisJIGdpdCBjb21taXQgLWEgLW0gIk1vZGUgY2hhbmdlIGFuZCBtb2RpZmljYXRpb24uIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMCk6IHJlbmFtZWQgYW5kIG1vZGlmaWVkJyBcCisJJ2NhdCA+ZmlsZTI8PEVPRiAmJgorRG9taW51cyByZWdpdCBtZSwKK2V0IG5paGlsIG1paGkgZGVlcml0LgorSW4gbG9jbyBwYXNjdWFlIGliaSBtZSBjb2xsb2Nhdml0LAorc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CithbmltYW0gbWVhbSBjb252ZXJ0aXQsCitkZWR1eGl0IG1lIHN1cGVyIHNlbWl0YXMganVzaXRpYWUsCitwcm9wdGVyIG5vbWVuIHN1dW0uCitFT0YKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiRmlsZSBhZGRlZC4iICYmCisJIGdpdCBtdiBmaWxlMiBmaWxlMyAmJgorCSBlY2hvICJQcm9wdGVyIG5vbWVuIHN1dW0uIiA+PiBmaWxlMyAmJgorCSBnaXQgY29tbWl0IC1hIC1tICJGaWxlIHJlbmFtZSBhbmQgbW9kaWZpY2F0aW9uLiIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiByZW5hbWVkLCBtb2RlIGNoYW5nZSBhbmQgbW9kaWZpZWQnIFwKKwknZ2l0IG12IGZpbGUzIGZpbGUyICYmCisJIGVjaG8gIlByb3B0ZXIgbm9tZW4gc3V1bS4iID4+IGZpbGUyICYmCisJIHRlc3RfY2htb2QgK3ggZmlsZTIgJiYKKwkgZ2l0IGNvbW1pdCAtYSAtbSAiRmlsZSByZW5hbWUsIG1vZGUgY2hhbmdlIGFuZCBtb2RpZmljYXRpb24uIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbW1pdGRpZmYgdGVzdGluZyAodGFrZW4gZnJvbSB0NDExNC1hcHBseS10eXBlY2hhbmdlLnNoKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCB0eXBlY2hhbmdlIGNvbW1pdHMnICcKKwllY2hvICJoZWxsbyB3b3JsZCIgPiBmb28gJiYKKwllY2hvICJoaSBwbGFuZXQiID4gYmFyICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCBmb28gYmFyICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IGJyYW5jaCBpbml0aWFsICYmCisJcm0gLWYgZm9vICYmCisJdGVzdF9sbl9zX2FkZCBiYXIgZm9vICYmCisJZ2l0IGNvbW1pdCAtbSAiZm9vIHN5bWxpbmtlZCB0byBiYXIiICYmCisJZ2l0IGJyYW5jaCBmb28tc3ltbGlua2VkLXRvLWJhciAmJgorCXJtIC1mIGZvbyAmJgorCWVjaG8gImhvdyBmYXIgaXMgdGhlIHN1bj8iID4gZm9vICYmCisJZ2l0IHVwZGF0ZS1pbmRleCBmb28gJiYKKwlnaXQgY29tbWl0IC1tICJmb28gYmFjayB0byBmaWxlIiAmJgorCWdpdCBicmFuY2ggZm9vLWJhY2stdG8tZmlsZSAmJgorCXJtIC1mIGZvbyAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1yZW1vdmUgZm9vICYmCisJbWtkaXIgZm9vICYmCisJZWNobyAiaWYgb25seSBJIGtuZXciID4gZm9vL2JheiAmJgorCWdpdCB1cGRhdGUtaW5kZXggLS1hZGQgZm9vL2JheiAmJgorCWdpdCBjb21taXQgLW0gImZvbyBiZWNvbWVzIGEgZGlyZWN0b3J5IiAmJgorCWdpdCBicmFuY2ggImZvby1iZWNvbWVzLWEtZGlyZWN0b3J5IiAmJgorCWVjaG8gImhlbGxvIHdvcmxkIiA+IGZvby9iYXogJiYKKwlnaXQgdXBkYXRlLWluZGV4IGZvby9iYXogJiYKKwlnaXQgY29tbWl0IC1tICJmb28vYmF6IGlzIHRoZSBvcmlnaW5hbCBmb28iICYmCisJZ2l0IGJyYW5jaCBmb28tYmF6LXJlbmFtZWQtZnJvbS1mb28KKwknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDIpOiBmaWxlIHJlbmFtZWQgZnJvbSBmb28gdG8gZm9vL2JheicgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2hwPWluaXRpYWw7aD1mb28tYmF6LXJlbmFtZWQtZnJvbS1mb28iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigyKTogZmlsZSByZW5hbWVkIGZyb20gZm9vL2JheiB0byBmb28nIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtocD1mb28tYmF6LXJlbmFtZWQtZnJvbS1mb287aD1pbml0aWFsIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdGRpZmYoMik6IGRpcmVjdG9yeSBiZWNvbWVzIGZpbGUnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtocD1mb28tYmVjb21lcy1hLWRpcmVjdG9yeTtoPWluaXRpYWwiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigyKTogZmlsZSBiZWNvbWVzIGRpcmVjdG9yeScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2hwPWluaXRpYWw7aD1mb28tYmVjb21lcy1hLWRpcmVjdG9yeSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDIpOiBmaWxlIGJlY29tZXMgc3ltbGluaycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2hwPWluaXRpYWw7aD1mb28tc3ltbGlua2VkLXRvLWJhciInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDIpOiBzeW1saW5rIGJlY29tZXMgZmlsZScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2hwPWZvby1zeW1saW5rZWQtdG8tYmFyO2g9Zm9vLWJhY2stdG8tZmlsZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDIpOiBzeW1saW5rIGJlY29tZXMgZGlyZWN0b3J5JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9Zm9vLXN5bWxpbmtlZC10by1iYXI7aD1mb28tYmVjb21lcy1hLWRpcmVjdG9yeSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDIpOiBkaXJlY3RvcnkgYmVjb21lcyBzeW1saW5rJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aHA9Zm9vLWJlY29tZXMtYS1kaXJlY3Rvcnk7aD1mb28tc3ltbGlua2VkLXRvLWJhciInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb21taXRkaWZmIHRlc3RpbmcgKGluY29tcGxldGUgbGluZXMpCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGluY29tcGxldGUgbGluZXMnICcKKwljYXQgPmZpbGU8PC1cRU9GICYmCisJRG9taW51cyByZWdpdCBtZSwKKwlldCBuaWhpbCBtaWhpIGRlZXJpdC4KKwlJbiBsb2NvIHBhc2N1YWUgaWJpIG1lIGNvbGxvY2F2aXQsCisJc3VwZXIgYXF1YW0gcmVmZWN0aW9uaXMgZWR1Y2F2aXQgbWU7CisJYW5pbWFtIG1lYW0gY29udmVydGl0LAorCWRlZHV4aXQgbWUgc3VwZXIgc2VtaXRhcyBqdXNpdGlhZSwKKwlwcm9wdGVyIG5vbWVuIHN1dW0uCisJQ0hBTkdFX01FCisJRU9GCisJZ2l0IGNvbW1pdCAtYSAtbSAiUHJlcGFyaW5nIGZvciBpbmNvbXBsZXRlIGxpbmVzIiAmJgorCWVjaG8gImluY29tcGxldGUiIHwgdHIgLWQgIlxcMDEyIiA+PmZpbGUgJiYKKwlnaXQgY29tbWl0IC1hIC1tICJBZGQgaW5jb21wbGV0ZSBsaW5lIiAmJgorCWdpdCB0YWcgaW5jb21wbGV0ZV9saW5lc19hZGQgJiYKKwlzZWQgLWUgcy9DSEFOR0VfTUUvY2hhbmdlX21lLyA8ZmlsZSA+ZmlsZSsgJiYKKwltdiAtZiBmaWxlKyBmaWxlICYmCisJZ2l0IGNvbW1pdCAtYSAtbSAiSW5jb21wbGV0ZSBjb250ZXh0IGxpbmUiICYmCisJZ2l0IHRhZyBpbmNvbXBsZXRlX2xpbmVzX2N0eCAmJgorCWVjaG8gIkRvbWludXMgcmVnaXQgbWUsIiA+ZmlsZSAmJgorCWVjaG8gImluY29tcGxldGUgbGluZSIgfCB0ciAtZCAiXFwwMTIiID4+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gIkNoYW5nZSBpbmNvbXBsZXRlIGxpbmUiICYmCisJZ2l0IHRhZyBpbmNvbXBsZXRlX2xpbmVzX2NoZyAmJgorCWVjaG8gIkRvbWludXMgcmVnaXQgbWUsIiA+ZmlsZSAmJgorCWdpdCBjb21taXQgLWEgLW0gIlJlbW92ZSBpbmNvbXBsZXRlIGxpbmUiICYmCisJZ2l0IHRhZyBpbmNvbXBsZXRlX2xpbmVzX3JlbQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21taXRkaWZmKDEpOiBhZGRpdGlvbiBvZiBpbmNvbXBsZXRlIGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19hZGQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdGRpZmYoMSk6IGluY29tcGxldGUgbGluZSBhcyBjb250ZXh0IGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19jdHgiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdGRpZmYoMSk6IGNoYW5nZSBpbmNvbXBsZXRlIGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19jaGciCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbW1pdGRpZmYoMSk6IHJlbW92YWwgb2YgaW5jb21wbGV0ZSBsaW5lJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtoPWluY29tcGxldGVfbGluZXNfcmVtIgorJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29tbWl0LCBjb21taXRkaWZmOiBtZXJnZSwgbGFyZ2UKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdDcmVhdGUgYSBtZXJnZScgXAorCSdnaXQgY2hlY2tvdXQgYiAmJgorCSBlY2hvICJCcmFuY2giID4+IGIgJiYKKwkgZ2l0IGFkZCBiICYmCisJIGdpdCBjb21taXQgLWEgLW0gIk9uIGJyYW5jaCIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgbWVyZ2UgYiAmJgorCSBnaXQgdGFnIG1lcmdlX2NvbW1pdCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdCgwKTogbWVyZ2UgY29tbWl0JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb21taXRkaWZmKDApOiBtZXJnZSBjb21taXQnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdQcmVwYXJlIGxhcmdlIGNvbW1pdCcgXAorCSdnaXQgY2hlY2tvdXQgYiAmJgorCSBlY2hvICJUbyBiZSBjaGFuZ2VkIiA+IDAxLWNoYW5nZSAmJgorCSBlY2hvICJUbyBiZSByZW5hbWVkIiA+IDAyLXB1cmUtcmVuYW1lLWZyb20gJiYKKwkgZWNobyAiVG8gYmUgZGVsZXRlZCIgPiAwMy1kZWxldGUgJiYKKwkgZWNobyAiVG8gYmUgcmVuYW1lZCBhbmQgY2hhbmdlZCIgPiAwNC1yZW5hbWUtZnJvbSAmJgorCSBlY2hvICJUbyBoYXZlIG1vZGUgY2hhbmdlZCIgPiAwNS1tb2RlLWNoYW5nZSAmJgorCSBlY2hvICJGaWxlIHRvIHN5bWxpbmsiID4gMDYtZmlsZS1vci1zeW1saW5rICYmCisJIGVjaG8gIlRvIGJlIGNoYW5nZWQgYW5kIGhhdmUgbW9kZSBjaGFuZ2VkIiA+IDA3LWNoYW5nZS1tb2RlLWNoYW5nZQkmJgorCSBnaXQgYWRkIDAqICYmCisJIGdpdCBjb21taXQgLWEgLW0gIlByZXBhcmUgbGFyZ2UgY29tbWl0IiAmJgorCSBlY2hvICJDaGFuZ2VkIiA+IDAxLWNoYW5nZSAmJgorCSBnaXQgbXYgMDItcHVyZS1yZW5hbWUtZnJvbSAwMi1wdXJlLXJlbmFtZS10byAmJgorCSBnaXQgcm0gMDMtZGVsZXRlICYmIHJtIC1mIDAzLWRlbGV0ZSAmJgorCSBlY2hvICJBIG5ldyBmaWxlIiA+IDAzLW5ldyAmJgorCSBnaXQgYWRkIDAzLW5ldyAmJgorCSBnaXQgbXYgMDQtcmVuYW1lLWZyb20gMDQtcmVuYW1lLXRvICYmCisJIGVjaG8gIkNoYW5nZWQiID4+IDA0LXJlbmFtZS10byAmJgorCSB0ZXN0X2NobW9kICt4IDA1LW1vZGUtY2hhbmdlICYmCisJIHJtIC1mIDA2LWZpbGUtb3Itc3ltbGluayAmJgorCSB0ZXN0X2xuX3NfYWRkIDAxLWNoYW5nZSAwNi1maWxlLW9yLXN5bWxpbmsgJiYKKwkgZWNobyAiQ2hhbmdlZCBhbmQgaGF2ZSBtb2RlIGNoYW5nZWQiID4gMDctY2hhbmdlLW1vZGUtY2hhbmdlCSYmCisJIHRlc3RfY2htb2QgK3ggMDctY2hhbmdlLW1vZGUtY2hhbmdlICYmCisJIGdpdCBjb21taXQgLWEgLW0gIkxhcmdlIGNvbW1pdCIgJiYKKwkgZ2l0IGNoZWNrb3V0IG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbW1pdCgxKTogbGFyZ2UgY29tbWl0JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdDtoPWIiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29tbWl0ZGlmZigxKTogbGFyZ2UgY29tbWl0JyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1iIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHNpZGUtYnktc2lkZSBkaWZmCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZGUtYnktc2lkZTogYWRkaXRpb24gb2YgaW5jb21wbGV0ZSBsaW5lJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtoPWluY29tcGxldGVfbGluZXNfYWRkO2RzPXNpZGVieXNpZGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZGUtYnktc2lkZTogaW5jb21wbGV0ZSBsaW5lIGFzIGNvbnRleHQgbGluZScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdGRpZmY7aD1pbmNvbXBsZXRlX2xpbmVzX2N0eDtkcz1zaWRlYnlzaWRlIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaWRlLWJ5LXNpZGU6IGNoYW5nZWQgaW5jb21wbGV0ZSBsaW5lJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0ZGlmZjtoPWluY29tcGxldGVfbGluZXNfY2hnO2RzPXNpZGVieXNpZGUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpZGUtYnktc2lkZTogcmVtb3ZhbCBvZiBpbmNvbXBsZXRlIGxpbmUnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9aW5jb21wbGV0ZV9saW5lc19yZW07ZHM9c2lkZWJ5c2lkZSIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2lkZS1ieS1zaWRlOiBtZXJnZSBjb21taXQnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1jb21taXRkaWZmO2g9bWVyZ2VfY29tbWl0O2RzPXNpZGVieXNpZGUiCisnCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB0YWdzIHRlc3RpbmcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RhZ3M6IGxpc3Qgb2YgZGlmZmVyZW50IHR5cGVzIG9mIHRhZ3MnIFwKKwknZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCSBnaXQgdGFnIC1hIC1tICJUYWcgY29tbWl0IG9iamVjdCIgdGFnLWNvbW1pdCBIRUFEICYmCisJIGdpdCB0YWcgLWEgLW0gIiIgdGFnLWNvbW1pdC1ub21lc3NhZ2UgSEVBRCAmJgorCSBnaXQgdGFnIC1hIC1tICJUYWcgdGFnIG9iamVjdCIgdGFnLXRhZyB0YWctY29tbWl0ICYmCisJIGdpdCB0YWcgLWEgLW0gIlRhZyB0cmVlIG9iamVjdCIgdGFnLXRyZWUgSEVBRF57dHJlZX0gJiYKKwkgZ2l0IHRhZyAtYSAtbSAiVGFnIGJsb2Igb2JqZWN0IiB0YWctYmxvYiBIRUFEOmZpbGUgJiYKKwkgZ2l0IHRhZyBsaWdodHdlaWdodC90YWctY29tbWl0IEhFQUQgJiYKKwkgZ2l0IHRhZyBsaWdodHdlaWdodC90YWctdGFnIHRhZy1jb21taXQgJiYKKwkgZ2l0IHRhZyBsaWdodHdlaWdodC90YWctdHJlZSBIRUFEXnt0cmVlfSAmJgorCSBnaXQgdGFnIGxpZ2h0d2VpZ2h0L3RhZy1ibG9iIEhFQUQ6ZmlsZSAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT10YWdzIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3RhZzogVGFnIHRvIGNvbW1pdCBvYmplY3QnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dGFnO2g9dGFnLWNvbW1pdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSd0YWc6IG9uIGxpZ2h0d2VpZ2h0IHRhZyAoaW52YWxpZCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dGFnO2g9bGlnaHR3ZWlnaHQvdGFnLWNvbW1pdCInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsb2dzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsb2dzOiBsb2cgKGltcGxpY2l0IEhFQUQpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWxvZyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdsb2dzOiBzaG9ydGxvZyAoaW1wbGljaXQgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9c2hvcnRsb2ciJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbG9nczogaGlzdG9yeSAoaW1wbGljaXQgSEVBRCwgZmlsZSknIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9aGlzdG9yeTtmPWZpbGUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbG9nczogaGlzdG9yeSAoaW1wbGljaXQgSEVBRCwgbm9uLWV4aXN0ZW50IGZpbGUpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWhpc3Rvcnk7Zj1ub24tZXhpc3RlbnQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknbG9nczogaGlzdG9yeSAoaW1wbGljaXQgSEVBRCwgZGVsZXRlZCBmaWxlKScgXAorCSdnaXQgY2hlY2tvdXQgbWFzdGVyICYmCisJIGVjaG8gInRvIGJlIGRlbGV0ZWQiID4gZGVsZXRlZF9maWxlICYmCisJIGdpdCBhZGQgZGVsZXRlZF9maWxlICYmCisJIGdpdCBjb21taXQgLW0gIkFkZCBmaWxlIHRvIGJlIGRlbGV0ZWQiICYmCisJIGdpdCBybSBkZWxldGVkX2ZpbGUgJiYKKwkgZ2l0IGNvbW1pdCAtbSAiRGVsZXRlIGZpbGUiICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWhpc3Rvcnk7Zj1kZWxldGVkX2ZpbGUiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcGF0aF9pbmZvIGxpbmtzCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0JyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2gnIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQvYiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdwYXRoX2luZm86IHByb2plY3QvYnJhbmNoOmZpbGUnIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQvbWFzdGVyOmZpbGUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0L2JyYW5jaDpkaXIvJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0L21hc3Rlcjpmb28vIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2ggKG5vbi1leGlzdGVudCknIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQvbm9uLWV4aXN0ZW50IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC9icmFuY2g6ZmlsZW5hbWUgKG5vbi1leGlzdGVudCBicmFuY2gpJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0L25vbi1leGlzdGVudDpub24tZXhpc3RlbnQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0L2JyYW5jaDpmaWxlIChub24tZXhpc3RlbnQpJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0L21hc3Rlcjpub24tZXhpc3RlbnQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0L2JyYW5jaDpkaXIvIChub24tZXhpc3RlbnQpJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0L21hc3Rlcjpub24tZXhpc3RlbnQvIicKKworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0L2JyYW5jaDovZmlsZScgXAorCSdnaXR3ZWJfcnVuICIiICIvLmdpdC9tYXN0ZXI6L2ZpbGUiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwkncGF0aF9pbmZvOiBwcm9qZWN0LzovZmlsZSAoaW1wbGljaXQgSEVBRCknIFwKKwknZ2l0d2ViX3J1biAiIiAiLy5naXQvOi9maWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3BhdGhfaW5mbzogcHJvamVjdC86LyAoaW1wbGljaXQgSEVBRCwgdG9wIHRyZWUpJyBcCisJJ2dpdHdlYl9ydW4gIiIgIi8uZ2l0LzovIicKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZmVlZCBnZW5lcmF0aW9uCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdmZWVkczogT1BNTCcgXAorCSdnaXR3ZWJfcnVuICJhPW9wbWwiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknZmVlZDogUlNTJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXJzcyInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdmZWVkOiBBdG9tJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWF0b20iJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZW5jb2RpbmcvZGVjb2RpbmcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2VuY29kZShjb21taXQpOiB1dGY4JyBcCisJJy4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtdXRmOC50eHQgJiYKKwkgdGVzdF93aGVuX2ZpbmlzaGVkICJHSVRfQVVUSE9SX05BTUU9XCJBIFUgVGhvclwiIiAmJgorCSB0ZXN0X3doZW5fZmluaXNoZWQgIkdJVF9DT01NSVRURVJfTkFNRT1cIkMgTyBNaXR0ZXJcIiIgJiYKKwkgZWNobyAiVVRGLTgiID4+IGZpbGUgJiYKKwkgZ2l0IGFkZCBmaWxlICYmCisJIGdpdCBjb21taXQgLUYgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9Y29tbWl0IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2VuY29kZShjb21taXQpOiBpc28tODg1OS0xJyBcCisJJy4gIiRURVNUX0RJUkVDVE9SWSIvdDM5MDEtODg1OS0xLnR4dCAmJgorCSB0ZXN0X3doZW5fZmluaXNoZWQgIkdJVF9BVVRIT1JfTkFNRT1cIkEgVSBUaG9yXCIiICYmCisJIHRlc3Rfd2hlbl9maW5pc2hlZCAiR0lUX0NPTU1JVFRFUl9OQU1FPVwiQyBPIE1pdHRlclwiIiAmJgorCSBlY2hvICJJU08tODg1OS0xIiA+PiBmaWxlICYmCisJIGdpdCBhZGQgZmlsZSAmJgorCSB0ZXN0X2NvbmZpZyBpMThuLmNvbW1pdGVuY29kaW5nIElTTy04ODU5LTEgJiYKKwkgZ2l0IGNvbW1pdCAtRiAiJFRFU1RfRElSRUNUT1JZIi90MzkwMC9JU084ODU5LTEudHh0ICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWNvbW1pdCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdlbmNvZGUobG9nKTogdXRmLTggYW5kIGlzby04ODU5LTEnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9bG9nIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGV4dHJhIG9wdGlvbnMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ29wdDogbG9nIC0tbm8tbWVyZ2VzJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWxvZztvcHQ9LS1uby1tZXJnZXMiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknb3B0OiBhdG9tIC0tbm8tbWVyZ2VzJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWxvZztvcHQ9LS1uby1tZXJnZXMiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknb3B0OiAiZmlsZSIgaGlzdG9yeSAtLW5vLW1lcmdlcycgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1oaXN0b3J5O2Y9ZmlsZTtvcHQ9LS1uby1tZXJnZXMiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknb3B0OiBsb2cgLS1uby1zdWNoLW9wdGlvbiAoaW52YWxpZCBvcHRpb24pJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPWxvZztvcHQ9LS1uby1zdWNoLW9wdGlvbiInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdvcHQ6IHRyZWUgLS1uby1tZXJnZXMgKGludmFsaWQgb3B0aW9uIGZvciBhY3Rpb24pJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRyZWU7b3B0PS0tbm8tbWVyZ2VzIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHRlc3RpbmcgY29uZmlnX3RvX211bHRpIC8gY2xvbmV1cmwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICAgJ1VSTDogbm8gcHJvamVjdCBVUkxzLCBubyBiYXNlIFVSTCcgXAorICAgICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zdW1tYXJ5IicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgICAgJ1VSTDogcHJvamVjdCBVUkxzIHZpYSBnaXR3ZWIudXJsJyBcCisgICAgICAgJ2dpdCBjb25maWcgLS1hZGQgZ2l0d2ViLnVybCBnaXQ6Ly9leGFtcGxlLmNvbS9naXQvdHJhc2guZ2l0ICYmCisgICAgICAgIGdpdCBjb25maWcgLS1hZGQgZ2l0d2ViLnVybCBodHRwOi8vZXhhbXBsZS5jb20vZ2l0L3RyYXNoLmdpdCAmJgorICAgICAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zdW1tYXJ5IicKKworY2F0ID4uZ2l0L2Nsb25ldXJsIDw8XEVPRgorZ2l0Oi8vZXhhbXBsZS5jb20vZ2l0L3RyYXNoLmdpdAoraHR0cDovL2V4YW1wbGUuY29tL2dpdC90cmFzaC5naXQKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAgICAnVVJMOiBwcm9qZWN0IFVSTHMgdmlhIGNsb25ldXJsIGZpbGUnIFwKKyAgICAgICAnZ2l0d2ViX3J1biAicD0uZ2l0O2E9c3VtbWFyeSInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBnaXR3ZWIgY29uZmlnIGFuZCByZXBvIGNvbmZpZworCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCisKKyMgdHVybiBvbiBvdmVycmlkZSBmb3IgZWFjaCBvdmVycmlkYWJsZSBmZWF0dXJlCitmb3JlYWNoIG15ICRrZXkgKGtleXMgJWZlYXR1cmUpIHsKKwlpZiAoJGZlYXR1cmV7JGtleX17J3N1Yid9KSB7CisJCSRmZWF0dXJleyRrZXl9eydvdmVycmlkZSd9ID0gMTsKKwl9Cit9CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2NvbmZpZyBvdmVycmlkZTogcHJvamVjdHMgbGlzdCAoaW1wbGljaXQpJyBcCisJJ2dpdHdlYl9ydW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgbm90IG92ZXJyaWRkZW4gaW4gcmVwbyBjb25maWcnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgZGlzYWJsZWQgaW4gcmVwbyBjb25maWcnIFwKKwknZ2l0IGNvbmZpZyBnaXR3ZWIuYmxhbWUgbm8gJiYKKwkgZ2l0IGNvbmZpZyBnaXR3ZWIuc25hcHNob3Qgbm9uZSAmJgorCSBnaXQgY29uZmlnIGdpdHdlYi5hdmF0YXIgZ3JhdmF0YXIgJiYKKwkgZ2l0d2ViX3J1biAicD0uZ2l0O2E9dHJlZSInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdjb25maWcgb3ZlcnJpZGU6IHRyZWUgdmlldywgZmVhdHVyZXMgZW5hYmxlZCBpbiByZXBvIGNvbmZpZyAoMSknIFwKKwknZ2l0IGNvbmZpZyBnaXR3ZWIuYmxhbWUgeWVzICYmCisJIGdpdCBjb25maWcgZ2l0d2ViLnNuYXBzaG90ICJ6aXAsdGd6LCB0YnoyIiAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT10cmVlIicKKworY2F0ID4uZ2l0L2NvbmZpZyA8PFxFT0YKKyMgdGVzdGluZyBub3ZhbCBhbmQgYWx0ZXJuYXRlIHNlcGFyYXRvcgorW2dpdHdlYl0KKwlibGFtZQorCXNuYXBzaG90ID0gemlwIHRnegorRU9GCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY29uZmlnIG92ZXJyaWRlOiB0cmVlIHZpZXcsIGZlYXR1cmVzIGVuYWJsZWQgaW4gcmVwbyBjb25maWcgKDIpJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXRyZWUiJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc2VhcmNoaW5nCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKworIyBlbmFibGUgc2VhcmNoCiskZmVhdHVyZXsnc2VhcmNoJ317J2RlZmF1bHQnfSA9IFsxXTsKKyRmZWF0dXJleydncmVwJ317J2RlZmF1bHQnfSA9IFsxXTsKKyRmZWF0dXJleydwaWNrYXhlJ317J2RlZmF1bHQnfSA9IFsxXTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VhcmNoOiBwcmVwYXJhdGlvbicgXAorCSdlY2hvICIxc3QgTUFUQ0giID4+ZmlsZSAmJgorCSBlY2hvICIybmQgTUFUQ0giID4+ZmlsZSAmJgorCSBlY2hvICJNQVRDSCIgPj5iYXIgJiYKKwkgZ2l0IGFkZCBmaWxlIGJhciAmJgorCSBnaXQgY29tbWl0IC1tICJBZGRlZCBNQVRDSCB3b3JkIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3NlYXJjaDogY29tbWl0IGF1dGhvcicgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zZWFyY2g7aD1IRUFEO3N0PWF1dGhvcjtzPUErVStUaG9yIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3NlYXJjaDogY29tbWl0IG1lc3NhZ2UnIFwKKwknZ2l0d2ViX3J1biAicD0uZ2l0O2E9c2VhcmNoO2g9SEVBRDtzdD1jb21taXRyO3M9TUFUQ0giJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknc2VhcmNoOiBncmVwJyBcCisJJ2dpdHdlYl9ydW4gInA9LmdpdDthPXNlYXJjaDtoPUhFQUQ7c3Q9Z3JlcDtzPU1BVENIIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3NlYXJjaDogcGlja2F4ZScgXAorCSdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zZWFyY2g7aD1IRUFEO3N0PXBpY2theGU7cz1NQVRDSCInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdzZWFyY2g6IHByb2plY3RzJyBcCisJJ2dpdHdlYl9ydW4gImE9cHJvamVjdF9saXN0O3M9LmdpdCInCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBub24tQVNDSUkgaW4gUkVBRE1FLmh0bWwKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ1JFQURNRS5odG1sIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgKHV0Zi04KScgXAorCSdlY2hvICI8Yj5VVEYtOCBleGFtcGxlOjwvYj48YnIgLz4iID4gLmdpdC9SRUFETUUuaHRtbCAmJgorCSBjYXQgIiRURVNUX0RJUkVDVE9SWSIvdDM5MDAvMS1VVEYtOC50eHQgPj4gLmdpdC9SRUFETUUuaHRtbCAmJgorCSBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zdW1tYXJ5IicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHN5bnRheCBoaWdobGlnaHRpbmcKKworCitoaWdobGlnaHRfdmVyc2lvbj0kKGhpZ2hsaWdodCAtLXZlcnNpb24gPC9kZXYvbnVsbCAyPi9kZXYvbnVsbCkKK2lmIFsgJD8gLWVxIDEyNyBdOyB0aGVuCisJc2F5ICJTa2lwcGluZyBzeW50YXggaGlnaGxpZ2h0aW5nIHRlc3RzOiAnaGlnaGxpZ2h0JyBub3QgZm91bmQiCitlbGlmIHRlc3QgLXogIiRoaWdobGlnaHRfdmVyc2lvbiI7IHRoZW4KKwlzYXkgIlNraXBwaW5nIHN5bnRheCBoaWdobGlnaHRpbmcgdGVzdHM6IGluY29ycmVjdCAnaGlnaGxpZ2h0JyBmb3VuZCIKK2Vsc2UKKwl0ZXN0X3NldF9wcmVyZXEgSElHSExJR0hUCisJY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8LVxFT0YKKwlvdXIgJGhpZ2hsaWdodF9iaW4gPSAiaGlnaGxpZ2h0IjsKKwkkZmVhdHVyZXsnaGlnaGxpZ2h0J317J292ZXJyaWRlJ30gPSAxOworCUVPRgorZmkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBISUdITElHSFQgXAorCSdzeW50YXggaGlnaGxpZ2h0aW5nIChubyBoaWdobGlnaHQsIHVua25vd24gc3ludGF4KScgXAorCSdnaXQgY29uZmlnIGdpdHdlYi5oaWdobGlnaHQgeWVzICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWJsb2I7Zj1maWxlIicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBISUdITElHSFQgXAorCSdzeW50YXggaGlnaGxpZ2h0aW5nIChoaWdobGlnaHRlZCwgc2hlbGwgc2NyaXB0KScgXAorCSdnaXQgY29uZmlnIGdpdHdlYi5oaWdobGlnaHQgeWVzICYmCisJIGVjaG8gIiMhL3Vzci9iaW4vc2giID4gdGVzdC5zaCAmJgorCSBnaXQgYWRkIHRlc3Quc2ggJiYKKwkgZ2l0IGNvbW1pdCAtbSAiQWRkIHRlc3Quc2giICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPWJsb2I7Zj10ZXN0LnNoIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZvcmtzIG9mIHByb2plY3RzCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YgJiYKKyRmZWF0dXJleydmb3Jrcyd9eydkZWZhdWx0J30gPSBbMV07CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2ZvcmtzOiBwcmVwYXJlJyBcCisJJ2dpdCBpbml0IC0tYmFyZSBmb28uZ2l0ICYmCisJIGdpdCAtLWdpdC1kaXI9Zm9vLmdpdCAtLXdvcmstdHJlZT0uIGFkZCBmaWxlICYmCisJIGdpdCAtLWdpdC1kaXI9Zm9vLmdpdCAtLXdvcmstdHJlZT0uIGNvbW1pdCAtbSAiSW5pdGlhbCBjb21taXQiICYmCisJIGVjaG8gImZvbyIgPiBmb28uZ2l0L2Rlc2NyaXB0aW9uICYmCisJIG1rZGlyIC1wIGZvbyAmJgorCSAoY2QgZm9vICYmCisJICBnaXQgY2xvbmUgLS1zaGFyZWQgLS1iYXJlIC4uL2Zvby5naXQgZm9vLWZvcmtlZC5naXQgJiYKKwkgIGVjaG8gImZvcmsgb2YgZm9vIiA+IGZvby1mb3JrZWQuZ2l0L2Rlc2NyaXB0aW9uKScKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2ZvcmtzOiBwcm9qZWN0cyBsaXN0JyBcCisJJ2dpdHdlYl9ydW4nCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdmb3JrczogZm9ya3MgYWN0aW9uJyBcCisJJ2dpdHdlYl9ydW4gInA9Zm9vLmdpdDthPWZvcmtzIicKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbnRlbnQgdGFncyAodGFnIGNsb3VkKQorCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDwtXEVPRiAmJgorIyB3ZSBkb24ndCB0ZXN0IF9zZXR0aW5nXyBjb250ZW50IHRhZ3MsIHNvIGFueSB0cnVlIHZhbHVlIGlzIGdvb2QKKyRmZWF0dXJleydjdGFncyd9eydkZWZhdWx0J30gPSBbJ2N0YWdzX3NjcmlwdC5jZ2knXTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3RhZ3M6IHRhZyBjbG91ZCBpbiBwcm9qZWN0cyBsaXN0JyBcCisJJ21rZGlyIC5naXQvY3RhZ3MgJiYKKwkgZWNobyAiMiIgPiAuZ2l0L2N0YWdzL2ZvbyAmJgorCSBlY2hvICIxIiA+IC5naXQvY3RhZ3MvYmFyICYmCisJZ2l0d2ViX3J1bicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ2N0YWdzOiBzZWFyY2ggcHJvamVjdHMgYnkgZXhpc3RpbmcgdGFnJyBcCisJJ2dpdHdlYl9ydW4gImJ5X3RhZz1mb28iJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3RhZ3M6IHNlYXJjaCBwcm9qZWN0cyBieSBub24gZXhpc3RlbnQgdGFnJyBcCisJJ2dpdHdlYl9ydW4gImJ5X3RhZz1ub24tZXhpc3RlbnQiJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY3RhZ3M6IG1hbGZvcm1lZCB0YWcgd2VpZ2h0cycgXAorCSdta2RpciAtcCAuZ2l0L2N0YWdzICYmCisJIGVjaG8gIm5vdC1hLW51bWJlciIgPiAuZ2l0L2N0YWdzL25hbiAmJgorCSBlY2hvICJub3QtYS1udW1iZXItMiIgPiAuZ2l0L2N0YWdzL25hbjIgJiYKKwkgZWNobyAiMC4xIiA+LmdpdC9jdGFncy9mbG9hdGluZy1wb2ludCAmJgorCSBnaXR3ZWJfcnVuJworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY2F0ZWdvcmllcworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknY2F0ZWdvcmllczogcHJvamVjdHMgbGlzdCwgb25seSBkZWZhdWx0IGNhdGVnb3J5JyBcCisJJ2VjaG8gIlwkcHJvamVjdHNfbGlzdF9ncm91cF9jYXRlZ29yaWVzID0gMTsiID4+Z2l0d2ViX2NvbmZpZy5wZXJsICYmCisJIGdpdHdlYl9ydW4nCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB1bmJvcm4gYnJhbmNoZXMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisJJ3VuYm9ybiBIRUFEOiAic3VtbWFyeSIgcGFnZSAod2l0aCAiaGVhZHMiIHN1YnZpZXcpJyBcCisJJ3sKKwkJZ2l0IGNoZWNrb3V0IG9ycGhhbl9icmFuY2ggfHwKKwkJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIG9ycGhhbl9icmFuY2gKKwkgfSAmJgorCSB0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJIGdpdHdlYl9ydW4gInA9LmdpdDthPXN1bW1hcnkiJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk1MDEtZ2l0d2ViLXN0YW5kYWxvbmUtaHR0cC1zdGF0dXMuc2ggYi90L3Q5NTAxLWdpdHdlYi1zdGFuZGFsb25lLWh0dHAtc3RhdHVzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQzYTViYWMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NTAxLWdpdHdlYi1zdGFuZGFsb25lLWh0dHAtc3RhdHVzLnNoCkBAIC0wLDAgKzEsMjE3IEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IE1hcmsgUmFkYQorIworCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXR3ZWIgYXMgc3RhbmRhbG9uZSBzY3JpcHQgKGh0dHAgc3RhdHVzIHRlc3RzKS4KKworVGhpcyB0ZXN0IHJ1bnMgZ2l0d2ViIChnaXQgd2ViIGludGVyZmFjZSkgYXMgYSBDR0kgc2NyaXB0IGZyb20gdGhlCitjb21tYW5kbGluZSwgYW5kIGNoZWNrcyB0aGF0IGl0IHJldHVybnMgdGhlIGV4cGVjdGVkIEhUVFAgc3RhdHVzCitjb2RlIGFuZCBtZXNzYWdlLicKKworCisuIC4vZ2l0d2ViLWxpYi5zaAorCisjCisjIEdpdHdlYiBvbmx5IHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5IHRlc3RlZCBieSB0aGUgJ21vZGlmaWNhdGlvbiB0aW1lcycKKyMgdGVzdHMgaWYgaXQgY2FuIGFjY2VzcyBhIGRhdGUgcGFyc2VyIGZyb20gb25lIG9mIHRoZXNlIG1vZHVsZXM6CisjCitwZXJsIC1NSFRUUDo6RGF0ZSAtZSAwID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0X3NldF9wcmVyZXEgREFURV9QQVJTRVIKK3BlcmwgLU1UaW1lOjpQYXJzZURhdGUgLWUgMCA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdF9zZXRfcHJlcmVxIERBVEVfUEFSU0VSCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzbmFwc2hvdCBzZXR0aW5ncworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCcgIgorCXRlc3RfY29tbWl0ICdTbmFwc2hvdFRlc3RzJyAnaSBjYW4gaGFzIHNuYXBzaG90JworIgorCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKyRmZWF0dXJleydzbmFwc2hvdCd9eydvdmVycmlkZSd9ID0gMDsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc25hcHNob3RzOiB0Z3ogb25seSBkZWZhdWx0IGZvcm1hdCBlbmFibGVkJyBcCisgICAgJ2dpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9SEVBRDtzZj10Z3oiICYmCisgICAgZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dGJ6MiIgJiYKKyAgICBncmVwICI0MDMgLSBVbnN1cHBvcnRlZCBzbmFwc2hvdCBmb3JtYXQiIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dHh6IiAmJgorICAgIGdyZXAgIjQwMyAtIFNuYXBzaG90IGZvcm1hdCBub3QgYWxsb3dlZCIgZ2l0d2ViLm91dHB1dCAmJgorICAgIGdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9SEVBRDtzZj16aXAiICYmCisgICAgZ3JlcCAiNDAzIC0gVW5zdXBwb3J0ZWQgc25hcHNob3QgZm9ybWF0IiBnaXR3ZWIub3V0cHV0JworCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKyRmZWF0dXJleydzbmFwc2hvdCd9eydkZWZhdWx0J30gPSBbJ3RneicsJ3RiejInLCd0eHonLCd6aXAnXTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc25hcHNob3RzOiBhbGwgZW5hYmxlZCBpbiBkZWZhdWx0LCB1c2UgZGVmYXVsdCBkaXNhYmxlZCB2YWx1ZScgXAorICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dGd6IiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0ICYmCisgICAgZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRiejIiICYmCisgICAgZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5vdXRwdXQgJiYKKyAgICBnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dHh6IiAmJgorICAgIGdyZXAgIjQwMyAtIFNuYXBzaG90IGZvcm1hdCBub3QgYWxsb3dlZCIgZ2l0d2ViLm91dHB1dCAmJgorICAgIGdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9SEVBRDtzZj16aXAiICYmCisgICAgZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5vdXRwdXQnCisKKworY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8XEVPRgorJGtub3duX3NuYXBzaG90X2Zvcm1hdHN7J3ppcCd9eydkaXNhYmxlZCd9ID0gMTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKyAgICAnc25hcHNob3RzOiB6aXAgZXhwbGljaXRseSBkaXNhYmxlZCcgXAorICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9emlwIiAmJgorICAgIGdyZXAgIjQwMyAtIFNuYXBzaG90IGZvcm1hdCBub3QgYWxsb3dlZCIgZ2l0d2ViLm91dHB1dCcKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIub3V0cHV0JworCisKK2NhdCA+PmdpdHdlYl9jb25maWcucGVybCA8PFxFT0YKKyRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd0Z3onfXsnZGlzYWJsZWQnfSA9IDA7CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NuYXBzaG90czogdGd6IGV4cGxpY2l0bHkgZW5hYmxlZCcgXAorICAgICdnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPUhFQUQ7c2Y9dGd6IiAmJgorICAgIGdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0JwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzbmFwc2hvdCBoYXNoIGlkcworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdHM6IGdvb2QgdHJlZS1pc2ggaWQnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj10Z3oiICYmCisJZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5vdXRwdXQKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3RzOiBiYWQgdHJlZS1pc2ggaWQnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPWZyaXp6dW1GcmF6enVtO3NmPXRneiIgJiYKKwlncmVwICI0MDQgLSBPYmplY3QgZG9lcyBub3QgZXhpc3QiIGdpdHdlYi5vdXRwdXQKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIub3V0cHV0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdHM6IGJhZCB0cmVlLWlzaCBpZCAodGFnZ2VkIG9iamVjdCknICcKKwllY2hvIG9iamVjdCA+IHRhZy1vYmplY3QgJiYKKwlnaXQgYWRkIHRhZy1vYmplY3QgJiYKKwl0ZXN0X3RpY2sgJiYgZ2l0IGNvbW1pdCAtbSAiT2JqZWN0IHRvIGJlIHRhZ2dlZCIgJiYKKwlnaXQgdGFnIHRhZ2dlZC1vYmplY3QgYGdpdCBoYXNoLW9iamVjdCB0YWctb2JqZWN0YCAmJgorCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9dGFnZ2VkLW9iamVjdDtzZj10Z3oiICYmCisJZ3JlcCAiNDAwIC0gT2JqZWN0IGlzIG5vdCBhIHRyZWUtaXNoIiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLm91dHB1dCcKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3RzOiBnb29kIG9iamVjdCBpZCcgJworCUlEPWBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQURgICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD0kSUQ7c2Y9dGd6IiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIub3V0cHV0CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90czogYmFkIG9iamVjdCBpZCcgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9YWJjZGVmMDEyMzQ7c2Y9dGd6IiAmJgorCWdyZXAgIjQwNCAtIE9iamVjdCBkb2VzIG5vdCBleGlzdCIgZ2l0d2ViLm91dHB1dAorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5vdXRwdXQnCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBtb2RpZmljYXRpb24gdGltZXMgKExhc3QtTW9kaWZpZWQgYW5kIElmLU1vZGlmaWVkLVNpbmNlKQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IGZlZWQgbGFzdC1tb2RpZmllZCcgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPWF0b207aD1tYXN0ZXIiICYmCisJZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5oZWFkZXJzICYmCisJZ3JlcCAiTGFzdC1tb2RpZmllZDogVGh1LCA3IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IGZlZWQgaWYtbW9kaWZpZWQtc2luY2UgKG1vZGlmaWVkKScgJworCUhUVFBfSUZfTU9ESUZJRURfU0lOQ0U9IldlZCwgNiBBcHIgMjAwNSAyMjoxNDoxMyArMDAwMCIgJiYKKwlleHBvcnQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAidW5zZXQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSIgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1hdG9tO2g9bWFzdGVyIiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IGZlZWQgaWYtbW9kaWZpZWQtc2luY2UgKHVubW9kaWZpZWQpJyAnCisJSFRUUF9JRl9NT0RJRklFRF9TSU5DRT0iVGh1LCA3IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiAmJgorCWV4cG9ydCBIVFRQX0lGX01PRElGSUVEX1NJTkNFICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJ1bnNldCBIVFRQX0lGX01PRElGSUVEX1NJTkNFIiAmJgorCWdpdHdlYl9ydW4gInA9LmdpdDthPWF0b207aD1tYXN0ZXIiICYmCisJZ3JlcCAiU3RhdHVzOiAzMDQgTm90IE1vZGlmaWVkIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IHNuYXBzaG90IGxhc3QtbW9kaWZpZWQnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj10Z3oiICYmCisJZ3JlcCAiU3RhdHVzOiAyMDAgT0siIGdpdHdlYi5oZWFkZXJzICYmCisJZ3JlcCAiTGFzdC1tb2RpZmllZDogVGh1LCA3IEFwciAyMDA1IDIyOjE0OjEzICswMDAwIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IHNuYXBzaG90IGlmLW1vZGlmaWVkLXNpbmNlIChtb2RpZmllZCknICcKKwlIVFRQX0lGX01PRElGSUVEX1NJTkNFPSJXZWQsIDYgQXByIDIwMDUgMjI6MTQ6MTMgKzAwMDAiICYmCisJZXhwb3J0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInVuc2V0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UiICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1tYXN0ZXI7c2Y9dGd6IiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IHNuYXBzaG90IGlmLW1vZGlmaWVkLXNpbmNlICh1bm1vZGlmaWVkKScgJworCUhUVFBfSUZfTU9ESUZJRURfU0lOQ0U9IlRodSwgNyBBcHIgMjAwNSAyMjoxNDoxMyArMDAwMCIgJiYKKwlleHBvcnQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAidW5zZXQgSFRUUF9JRl9NT0RJRklFRF9TSU5DRSIgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj10Z3oiICYmCisJZ3JlcCAiU3RhdHVzOiAzMDQgTm90IE1vZGlmaWVkIiBnaXR3ZWIuaGVhZGVycworJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIERBVEVfUEFSU0VSICdtb2RpZmljYXRpb246IHRyZWUgc25hcHNob3QnICcKKwlJRD1gZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEXnt0cmVlfWAgJiYKKwlIVFRQX0lGX01PRElGSUVEX1NJTkNFPSJXZWQsIDYgQXByIDIwMDUgMjI6MTQ6MTMgKzAwMDAiICYmCisJZXhwb3J0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInVuc2V0IEhUVFBfSUZfTU9ESUZJRURfU0lOQ0UiICYmCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD0kSUQ7c2Y9dGd6IiAmJgorCWdyZXAgIlN0YXR1czogMjAwIE9LIiBnaXR3ZWIuaGVhZGVycyAmJgorCSEgZ3JlcCAtaSAibGFzdC1tb2RpZmllZCIgZ2l0d2ViLmhlYWRlcnMKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvYWQgY2hlY2tpbmcKKworIyBhbHdheXMgaGl0IHRoZSBsb2FkIGxpbWl0CitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCitvdXIgJG1heGxvYWQgPSAtMTsKK0VPRgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsb2FkIGNoZWNraW5nOiBsb2FkIHRvbyBoaWdoIChkZWZhdWx0IGFjdGlvbiknICcKKwlnaXR3ZWJfcnVuICJwPS5naXQiICYmCisJZ3JlcCAiU3RhdHVzOiA1MDMgU2VydmljZSBVbmF2YWlsYWJsZSIgZ2l0d2ViLmhlYWRlcnMgJiYKKwlncmVwICI1MDMgLSBUaGUgbG9hZCBhdmVyYWdlIG9uIHRoZSBzZXJ2ZXIgaXMgdG9vIGhpZ2giIGdpdHdlYi5ib2R5CisnCit0ZXN0X2RlYnVnICdjYXQgZ2l0d2ViLmhlYWRlcnMnCisKKyMgdHVybiBvZmYgbG9hZCBjaGVja2luZworY2F0ID4+Z2l0d2ViX2NvbmZpZy5wZXJsIDw8XEVPRgorb3VyICRtYXhsb2FkID0gdW5kZWY7CitFT0YKKworCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW52YWxpZCBhcmd1bWVudHMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW52YWxpZCBhcmd1bWVudHM6IGludmFsaWQgcmVnZXhwIChpbiBwcm9qZWN0IHNlYXJjaCknICcKKwlnaXR3ZWJfcnVuICJhPXByb2plY3RfbGlzdDtzPSpcLmdpdDtzcj0xIiAmJgorCWdyZXAgIlN0YXR1czogNDAwIiBnaXR3ZWIuaGVhZGVycyAmJgorCWdyZXAgIjQwMCAtIEludmFsaWQuKnJlZ2V4cCIgZ2l0d2ViLmJvZHkKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NTAyLWdpdHdlYi1zdGFuZGFsb25lLXBhcnNlLW91dHB1dC5zaCBiL3QvdDk1MDItZ2l0d2ViLXN0YW5kYWxvbmUtcGFyc2Utb3V0cHV0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA3OTZhNDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NTAyLWdpdHdlYi1zdGFuZGFsb25lLXBhcnNlLW91dHB1dC5zaApAQCAtMCwwICsxLDIwNiBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBNYXJrIFJhZGEKKyMKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0d2ViIGFzIHN0YW5kYWxvbmUgc2NyaXB0IChwYXJzaW5nIHNjcmlwdCBvdXRwdXQpLgorCitUaGlzIHRlc3QgcnVucyBnaXR3ZWIgKGdpdCB3ZWIgaW50ZXJmYWNlKSBhcyBhIENHSSBzY3JpcHQgZnJvbSB0aGUKK2NvbW1hbmRsaW5lLCBhbmQgY2hlY2tzIHRoYXQgaXQgcHJvZHVjZXMgdGhlIGNvcnJlY3Qgb3V0cHV0LCBlaXRoZXIKK2luIHRoZSBIVFRQIGhlYWRlciBvciB0aGUgYWN0dWFsIHNjcmlwdCBvdXRwdXQuJworCisKKy4gLi9naXR3ZWItbGliLnNoCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzbmFwc2hvdCBmaWxlIG5hbWUgYW5kIHByZWZpeAorCitjYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDxcRU9GCisKKyRrbm93bl9zbmFwc2hvdF9mb3JtYXRzeyd0YXInfSA9IHsKKwknZGlzcGxheScgPT4gJ3RhcicsCisJJ3R5cGUnID0+ICdhcHBsaWNhdGlvbi94LXRhcicsCisJJ3N1ZmZpeCcgPT4gJy50YXInLAorCSdmb3JtYXQnID0+ICd0YXInLAorfTsKKworJGZlYXR1cmV7J3NuYXBzaG90J317J2RlZmF1bHQnfSA9IFsndGFyJ107CitFT0YKKworIyBDYWxsIGNoZWNrX3NuYXBzaG90IHdpdGggdGhlIGFyZ3VtZW50cyAiPGJhc2VuYW1lPiBbPHByZWZpeD5dIgorIworIyBUaGlzIHdpbGwgY2hlY2sgdGhhdCBnaXR3ZWIgSFRUUCBoZWFkZXIgY29udGFpbnMgcHJvcG9zZWQgZmlsZW5hbWUKKyMgYXMgPGJhc2VuYW1lPiB3aXRoICcudGFyJyBzdWZmaXggYWRkZWQsIGFuZCB0aGF0IGdlbmVyYXRlZCB0YXJmaWxlCisjIChnaXR3ZWIgbWVzc2FnZSBib2R5KSBoYXMgPHByZWZpeD4gYXMgcHJlZml4IGZvciBhbCBmaWxlcyBpbiB0YXJmaWxlCisjCisjIDxwcmVmaXg+IGRlZmF1bHQgdG8gPGJhc2VuYW1lPgorY2hlY2tfc25hcHNob3QgKCkgeworCWJhc2VuYW1lPSQxCisJcHJlZml4PSR7MjotIiQxIn0KKwllY2hvICJiYXNlbmFtZT0kYmFzZW5hbWUiCisJZ3JlcCAiZmlsZW5hbWU9LiokYmFzZW5hbWUudGFyIiBnaXR3ZWIuaGVhZGVycyA+L2Rldi9udWxsIDI+JjEgJiYKKwkiJFRBUiIgdGYgZ2l0d2ViLmJvZHkgPmZpbGVfbGlzdCAmJgorCSEgZ3JlcCAtdiAtZSAiXiRwcmVmaXgkIiAtZSAiXiRwcmVmaXgvIiAtZSAiXnBheF9nbG9iYWxfaGVhZGVyJCIgZmlsZV9saXN0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3Mgc2V0dXAgJworCXRlc3RfY29tbWl0IGZpcnN0IGZvbyAmJgorCWdpdCBicmFuY2ggeHgvdGVzdCAmJgorCUZVTExfSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQpICYmCisJU0hPUlRfSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQ9NyBIRUFEKQorJwordGVzdF9kZWJ1ZyAnCisJZWNobyAiRlVMTF9JRCAgPSAkRlVMTF9JRCIKKwllY2hvICJTSE9SVF9JRCA9ICRTSE9SVF9JRCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc25hcHNob3Q6IGZ1bGwgc2hhMScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9JEZVTExfSUQ7c2Y9dGFyIiAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LSRTSE9SVF9JRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogc2hvcnRlbmVkIHNoYTEnICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPSRTSE9SVF9JRDtzZj10YXIiICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtJFNIT1JUX0lEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBhbG1vc3QgZnVsbCBzaGExJyAnCisJSUQ9JChnaXQgcmV2LXBhcnNlIC0tc2hvcnQ9MzAgSEVBRCkgJiYKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPSRJRDtzZj10YXIiICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtJFNIT1JUX0lEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBIRUFEJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1IRUFEO3NmPXRhciIgJiYKKwljaGVja19zbmFwc2hvdCAiLmdpdC1IRUFELSRTSE9SVF9JRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogc2hvcnQgYnJhbmNoIG5hbWUgKG1hc3RlciknICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPW1hc3RlcjtzZj10YXIiICYmCisJSUQ9JChnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tc2hvcnQ9NyBtYXN0ZXIpICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtbWFzdGVyLSRJRCIKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycyAmJiBjYXQgZmlsZV9saXN0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzbmFwc2hvdDogc2hvcnQgdGFnIG5hbWUgKGZpcnN0KScgJworCWdpdHdlYl9ydW4gInA9LmdpdDthPXNuYXBzaG90O2g9Zmlyc3Q7c2Y9dGFyIiAmJgorCUlEPSQoZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXNob3J0PTcgZmlyc3QpICYmCisJY2hlY2tfc25hcHNob3QgIi5naXQtZmlyc3QtJElEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBmdWxsIGJyYW5jaCBuYW1lIChyZWZzL2hlYWRzL21hc3RlciknICcKKwlnaXR3ZWJfcnVuICJwPS5naXQ7YT1zbmFwc2hvdDtoPXJlZnMvaGVhZHMvbWFzdGVyO3NmPXRhciIgJiYKKwlJRD0kKGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgLS1zaG9ydD03IG1hc3RlcikgJiYKKwljaGVja19zbmFwc2hvdCAiLmdpdC1tYXN0ZXItJElEIgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBmdWxsIHRhZyBuYW1lIChyZWZzL3RhZ3MvZmlyc3QpJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD1yZWZzL3RhZ3MvZmlyc3Q7c2Y9dGFyIiAmJgorCWNoZWNrX3NuYXBzaG90ICIuZ2l0LWZpcnN0IgorJwordGVzdF9kZWJ1ZyAnY2F0IGdpdHdlYi5oZWFkZXJzICYmIGNhdCBmaWxlX2xpc3QnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NuYXBzaG90OiBoaWVyYXJjaGljYWwgYnJhbmNoIG5hbWUgKHh4L3Rlc3QpJyAnCisJZ2l0d2ViX3J1biAicD0uZ2l0O2E9c25hcHNob3Q7aD14eC90ZXN0O3NmPXRhciIgJiYKKwkhIGdyZXAgImZpbGVuYW1lPS4qLyIgZ2l0d2ViLmhlYWRlcnMKKycKK3Rlc3RfZGVidWcgJ2NhdCBnaXR3ZWIuaGVhZGVycycKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZvcmtzIG9mIHByb2plY3RzCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmtzOiBzZXR1cCcgJworCWdpdCBpbml0IC0tYmFyZSBmb28uZ2l0ICYmCisJZWNobyBmaWxlID4gZmlsZSAmJgorCWdpdCAtLWdpdC1kaXI9Zm9vLmdpdCAtLXdvcmstdHJlZT0uIGFkZCBmaWxlICYmCisJZ2l0IC0tZ2l0LWRpcj1mb28uZ2l0IC0td29yay10cmVlPS4gY29tbWl0IC1tICJJbml0aWFsIGNvbW1pdCIgJiYKKwllY2hvICJmb28iID4gZm9vLmdpdC9kZXNjcmlwdGlvbiAmJgorCWdpdCBjbG9uZSAtLWJhcmUgZm9vLmdpdCBmb28uYmFyLmdpdCAmJgorCWVjaG8gImZvby5iYXIiID4gZm9vLmJhci5naXQvZGVzY3JpcHRpb24gJiYKKwlnaXQgY2xvbmUgLS1iYXJlIGZvby5naXQgZm9vX2Jhei5naXQgJiYKKwllY2hvICJmb29fYmF6IiA+IGZvb19iYXouZ2l0L2Rlc2NyaXB0aW9uICYmCisJcm0gLWZyICAgZm9vICYmCisJbWtkaXIgLXAgZm9vICYmCisJKAorCQljZCBmb28gJiYKKwkJZ2l0IGNsb25lIC0tc2hhcmVkIC0tYmFyZSAuLi9mb28uZ2l0IGZvby1mb3JrZWQuZ2l0ICYmCisJCWVjaG8gImZvcmsgb2YgZm9vIiA+IGZvby1mb3JrZWQuZ2l0L2Rlc2NyaXB0aW9uCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3Jrczogbm90IHNraXBwZWQgdW5sZXNzICJmb3JrcyIgZmVhdHVyZSBlbmFibGVkJyAnCisJZ2l0d2ViX3J1biAiYT1wcm9qZWN0X2xpc3QiICYmCisJZ3JlcCAtcSAiPlxcLmdpdDwiICAgICAgICAgICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vXFwuZ2l0PCIgICAgICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb29fYmF6XFwuZ2l0PCIgICAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvb1xcLmJhclxcLmdpdDwiICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vX2JhelxcLmdpdDwiICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb28vZm9vLWZvcmtlZFxcLmdpdDwiIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvcmsgb2YgLio8IiAgICAgICAgICAgZ2l0d2ViLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZW5hYmxlIGZvcmtzIGZlYXR1cmUnICcKKwljYXQgPj5naXR3ZWJfY29uZmlnLnBlcmwgPDwtXEVPRgorCSRmZWF0dXJleyJmb3JrcyJ9eyJkZWZhdWx0In0gPSBbMV07CisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ZvcmtzOiBmb3JrcyBza2lwcGVkIGlmICJmb3JrcyIgZmVhdHVyZSBlbmFibGVkJyAnCisJZ2l0d2ViX3J1biAiYT1wcm9qZWN0X2xpc3QiICYmCisJZ3JlcCAtcSAiPlxcLmdpdDwiICAgICAgICAgICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vXFwuZ2l0PCIgICAgICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXEgIj5mb29fYmF6XFwuZ2l0PCIgICAgICAgIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvb1xcLmJhclxcLmdpdDwiICAgICAgZ2l0d2ViLmJvZHkgJiYKKwlncmVwIC1xICI+Zm9vX2JhelxcLmdpdDwiICAgICAgICBnaXR3ZWIuYm9keSAmJgorCWdyZXAgLXYgIj5mb28vZm9vLWZvcmtlZFxcLmdpdDwiIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtdiAiPmZvcmsgb2YgLio8IiAgICAgICAgICAgZ2l0d2ViLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ya3M6ICJmb3JrcyIgYWN0aW9uIGZvciBmb3JrZWQgcmVwb3NpdG9yeScgJworCWdpdHdlYl9ydW4gInA9Zm9vLmdpdDthPWZvcmtzIiAmJgorCWdyZXAgLXEgIj5mb28vZm9vLWZvcmtlZFxcLmdpdDwiIGdpdHdlYi5ib2R5ICYmCisJZ3JlcCAtcSAiPmZvcmsgb2YgZm9vPCIgICAgICAgICAgZ2l0d2ViLmJvZHkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZm9ya3M6IGNhbiBhY2Nlc3MgZm9ya2VkIHJlcG9zaXRvcnknICcKKwlnaXR3ZWJfcnVuICJwPWZvby9mb28tZm9ya2VkLmdpdDthPXN1bW1hcnkiICYmCisJZ3JlcCAtcSAiMjAwIE9LIiAgICAgICAgZ2l0d2ViLmhlYWRlcnMgJiYKKwlncmVwIC1xICI+Zm9yayBvZiBmb288IiBnaXR3ZWIuYm9keQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb3JrczogcHJvamVjdF9pbmRleCBsaXN0cyBhbGwgcHJvamVjdHMgKGluY2wuIGZvcmtzKScgJworCWNhdCA+ZXhwZWN0ZWQgPDwtXEVPRiAmJgorCS5naXQKKwlmb28uYmFyLmdpdAorCWZvby5naXQKKwlmb28vZm9vLWZvcmtlZC5naXQKKwlmb29fYmF6LmdpdAorCUVPRgorCWdpdHdlYl9ydW4gImE9cHJvamVjdF9pbmRleCIgJiYKKwlzZWQgLWUgInMvIC4qLy8iIDxnaXR3ZWIuYm9keSB8IHNvcnQgPmFjdHVhbCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGFjdHVhbAorJworCit4c3MoKSB7CisJZWNobyA+JjIgIkNoZWNraW5nICQxLi4uIiAmJgorCWdpdHdlYl9ydW4gIiQxIiAmJgorCWlmIGdyZXAgIiRUQUciIGdpdHdlYi5ib2R5OyB0aGVuCisJCWVjaG8gPiYyICJ4c3M6ICRUQUcgc2hvdWxkIGhhdmUgYmVlbiBxdW90ZWQgaW4gb3V0cHV0IgorCQlyZXR1cm4gMQorCWZpCisJcmV0dXJuIDAKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAneHNzIGNoZWNrcycgJworCVRBRz0iPG1hZ2ljLXhzcy10YWc+IiAmJgorCXhzcyAiYT1yc3MmcD0kVEFHIiAmJgorCXhzcyAiYT1yc3MmcD1mb28uZ2l0JmY9JFRBRyIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjAwLWN2c2ltcG9ydC5zaCBiL3QvdDk2MDAtY3ZzaW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjMzg0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAwLWN2c2ltcG9ydC5zaApAQCAtMCwwICsxLDE1OSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjdnNpbXBvcnQgYmFzaWMgdGVzdHMnCisuIC4vbGliLWN2cy5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwIGN2c3Jvb3QgZW52aXJvbm1lbnQnICcKKwlDVlNST09UPSQocHdkKS9jdnNyb290ICYmCisJZXhwb3J0IENWU1JPT1QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdzZXR1cCBjdnNyb290JyAnJENWUyBpbml0JworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NldHVwIGEgY3ZzIG1vZHVsZScgJworCisJbWtkaXIgIiRDVlNST09UL21vZHVsZSIgJiYKKwkkQ1ZTIGNvIC1kIG1vZHVsZS1jdnMgbW9kdWxlICYmCisJKGNkIG1vZHVsZS1jdnMgJiYKKwljYXQgPDxFT0YgPm9fZm9ydHVuYSAmJgorTyBGb3J0dW5hCit2ZWx1dCBsdW5hCitzdGF0dSB2YXJpYWJpbGlzLAorCitzZW1wZXIgY3Jlc2NpcworYXV0IGRlY3Jlc2NpczsKK3ZpdGEgZGV0ZXN0YWJpbGlzCisKK251bmMgb2JkdXJhdAorZXQgdHVuYyBjdXJhdAorbHVkbyBtZW50aXMgYWNpZW0sCisKK2VnZXN0YXRlbSwKK3BvdGVzdGF0ZW0KK2Rpc3NvbHZpdCB1dCBnbGFjaWVtLgorRU9GCisJJENWUyBhZGQgb19mb3J0dW5hICYmCisJY2F0IDw8RU9GID5tZXNzYWdlICYmCithZGQgIk8gRm9ydHVuYSIgbHlyaWNzCisKK1RoZXNlIHB1YmxpYyBkb21haW4gbHlyaWNzIG1ha2UgYW4gZXhjZWxsZW50IHNhbXBsZSB0ZXh0LgorRU9GCisJJENWUyBjb21taXQgLUYgbWVzc2FnZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdpbXBvcnQgYSB0cml2aWFsIG1vZHVsZScgJworCisJZ2l0IGN2c2ltcG9ydCAtYSAtUiAteiAwIC1DIG1vZHVsZS1naXQgbW9kdWxlICYmCisJdGVzdF9jbXAgbW9kdWxlLWN2cy9vX2ZvcnR1bmEgbW9kdWxlLWdpdC9vX2ZvcnR1bmEKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3BhY2sgcmVmcycgJyhjZCBtb2R1bGUtZ2l0ICYmIGdpdCBnYyknCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnaW5pdGlhbCBpbXBvcnQgaGFzIGNvcnJlY3QgLmdpdC9jdnMtcmV2aXNpb25zJyAnCisKKwkoY2QgbW9kdWxlLWdpdCAmJgorCSBnaXQgbG9nIC0tZm9ybWF0PSJvX2ZvcnR1bmEgMS4xICVIIiAtMSkgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG1vZHVsZS1naXQvLmdpdC9jdnMtcmV2aXNpb25zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndXBkYXRlIGN2cyBtb2R1bGUnICcKKwkoY2QgbW9kdWxlLWN2cyAmJgorCWNhdCA8PEVPRiA+b19mb3J0dW5hICYmCitPIEZvcnR1bmUsCitsaWtlIHRoZSBtb29uCit5b3UgYXJlIGNoYW5nZWFibGUsCisKK2V2ZXIgd2F4aW5nCithbmQgd2FuaW5nOworaGF0ZWZ1bCBsaWZlCisKK2ZpcnN0IG9wcHJlc3NlcworYW5kIHRoZW4gc29vdGhlcworYXMgZmFuY3kgdGFrZXMgaXQ7CisKK3BvdmVydHkKK2FuZCBwb3dlcgoraXQgbWVsdHMgdGhlbSBsaWtlIGljZS4KK0VPRgorCWNhdCA8PEVPRiA+bWVzc2FnZSAmJgordHJhbnNsYXRlIHRvIEVuZ2xpc2gKKworTXkgTGF0aW4gaXMgdGVycmlibGUuCitFT0YKKwkkQ1ZTIGNvbW1pdCAtRiBtZXNzYWdlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3VwZGF0ZSBnaXQgbW9kdWxlJyAnCisKKwkoY2QgbW9kdWxlLWdpdCAmJgorCWdpdCBjb25maWcgY3ZzaW1wb3J0LnRyYWNrUmV2aXNpb25zIHRydWUgJiYKKwlnaXQgY3ZzaW1wb3J0IC1hIC16IDAgbW9kdWxlICYmCisJZ2l0IG1lcmdlIG9yaWdpbgorCSkgJiYKKwl0ZXN0X2NtcCBtb2R1bGUtY3ZzL29fZm9ydHVuYSBtb2R1bGUtZ2l0L29fZm9ydHVuYQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndXBkYXRlIGhhcyBjb3JyZWN0IC5naXQvY3ZzLXJldmlzaW9ucycgJworCisJKGNkIG1vZHVsZS1naXQgJiYKKwkgZ2l0IGxvZyAtLWZvcm1hdD0ib19mb3J0dW5hIDEuMSAlSCIgLTEgSEVBRF4gJiYKKwkgZ2l0IGxvZyAtLWZvcm1hdD0ib19mb3J0dW5hIDEuMiAlSCIgLTEgSEVBRCkgPiBleHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG1vZHVsZS1naXQvLmdpdC9jdnMtcmV2aXNpb25zCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndXBkYXRlIGN2cyBtb2R1bGUnICcKKworCShjZCBtb2R1bGUtY3ZzICYmCisJCWVjaG8gMSA+dGljayAmJgorCQkkQ1ZTIGFkZCB0aWNrICYmCisJCSRDVlMgY29tbWl0IC1tIDEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY3ZzaW1wb3J0Lm1vZHVsZSBjb25maWcgd29ya3MnICcKKworCShjZCBtb2R1bGUtZ2l0ICYmCisJCWdpdCBjb25maWcgY3ZzaW1wb3J0Lm1vZHVsZSBtb2R1bGUgJiYKKwkJZ2l0IGNvbmZpZyBjdnNpbXBvcnQudHJhY2tSZXZpc2lvbnMgdHJ1ZSAmJgorCQlnaXQgY3ZzaW1wb3J0IC1hIC16MCAmJgorCQlnaXQgbWVyZ2Ugb3JpZ2luCisJKSAmJgorCXRlc3RfY21wIG1vZHVsZS1jdnMvdGljayBtb2R1bGUtZ2l0L3RpY2sKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3NlY29uZCB1cGRhdGUgaGFzIGNvcnJlY3QgLmdpdC9jdnMtcmV2aXNpb25zJyAnCisKKwkoY2QgbW9kdWxlLWdpdCAmJgorCSBnaXQgbG9nIC0tZm9ybWF0PSJvX2ZvcnR1bmEgMS4xICVIIiAtMSBIRUFEXl4gJiYKKwkgZ2l0IGxvZyAtLWZvcm1hdD0ib19mb3J0dW5hIDEuMiAlSCIgLTEgSEVBRF4KKwkgZ2l0IGxvZyAtLWZvcm1hdD0idGljayAxLjEgJUgiIC0xIEhFQUQpID4gZXhwZWN0ZWQgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBtb2R1bGUtZ2l0Ly5naXQvY3ZzLXJldmlzaW9ucworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2ltcG9ydCBmcm9tIGEgQ1ZTIHdvcmtpbmcgdHJlZScgJworCisJJENWUyBjbyAtZCBpbXBvcnQtZnJvbS13dCBtb2R1bGUgJiYKKwkoY2QgaW1wb3J0LWZyb20td3QgJiYKKwkJZ2l0IGNvbmZpZyBjdnNpbXBvcnQudHJhY2tSZXZpc2lvbnMgZmFsc2UgJiYKKwkJZ2l0IGN2c2ltcG9ydCAtYSAtejAgJiYKKwkJZWNobyAxID5leHBlY3QgJiYKKwkJZ2l0IGxvZyAtMSAtLXByZXR0eT1mb3JtYXQ6JXMlbiA+YWN0dWFsICYmCisJCXRlc3RfY21wIGFjdHVhbCBleHBlY3QKKwkpCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdubyAuZ2l0L2N2cy1yZXZpc2lvbnMgY3JlYXRlZCBieSBkZWZhdWx0JyAnCisKKwkhIHRlc3QgLWUgaW1wb3J0LWZyb20td3QvLmdpdC9jdnMtcmV2aXNpb25zCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd0ZXN0IGVudGlyZSBIRUFEJyAndGVzdF9jbXBfYnJhbmNoX3RyZWUgbWFzdGVyJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk2MDEtY3ZzaW1wb3J0LXZlbmRvci1icmFuY2guc2ggYi90L3Q5NjAxLWN2c2ltcG9ydC12ZW5kb3ItYnJhbmNoLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyN2QzOWYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxLWN2c2ltcG9ydC12ZW5kb3ItYnJhbmNoLnNoCkBAIC0wLDAgKzEsODUgQEAKKyMhL2Jpbi9zaAorCisjIERlc2NyaXB0aW9uIG9mIHRoZSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeToKKyMKKyMgICAgaW1wb3J0ZWQtb25jZS50eHQ6CisjCisjICAgICAgIEltcG9ydGVkIG9uY2UuICAxLjEgYW5kIDEuMS4xLjEgc2hvdWxkIGJlIGlkZW50aWNhbC4KKyMKKyMgICAgaW1wb3J0ZWQtdHdpY2UudHh0OgorIworIyAgICAgICBJbXBvcnRlZCB0d2ljZS4gIEhFQUQgc2hvdWxkIHJlZmxlY3QgdGhlIGNvbnRlbnRzIG9mIHRoZQorIyAgICAgICBzZWNvbmQgaW1wb3J0IChpLmUuLCBoYXZlIHRoZSBzYW1lIGNvbnRlbnRzIGFzIDEuMS4xLjIpLgorIworIyAgICBpbXBvcnRlZC1tb2RpZmllZC50eHQ6CisjCisjICAgICAgIEltcG9ydGVkLCB0aGVuIG1vZGlmaWVkIG9uIEhFQUQuICBIRUFEIHNob3VsZCByZWZsZWN0IHRoZQorIyAgICAgICBtb2RpZmljYXRpb24uCisjCisjICAgIGltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dDoKKyMKKyMgICAgICAgSW1wb3J0ZWQsIHRoZW4gbW9kaWZpZWQgb24gSEVBRCwgdGhlbiBpbXBvcnRlZCBhZ2Fpbi4KKyMKKyMgICAgYWRkZWQtaW1wb3J0ZWQudHh0LHY6CisjCisjICAgICAgIEFkZGVkIHdpdGggJ2N2cyBhZGQnIHRvIGNyZWF0ZSAxLjEsIHRoZW4gaW1wb3J0ZWQgd2l0aAorIyAgICAgICBjb21wbGV0ZWx5IGRpZmZlcmVudCBjb250ZW50cyB0byBjcmVhdGUgMS4xLjEuMSwgdGhlcmVmb3JlIHRoZQorIyAgICAgICB2ZW5kb3IgYnJhbmNoIHdhcyBuZXZlciB0aGUgZGVmYXVsdCBicmFuY2guCisjCisjICAgIGltcG9ydGVkLWFub255bW91c2x5LnR4dDoKKyMKKyMgICAgICAgTGlrZSBpbXBvcnRlZC10d2ljZS50eHQsIGJ1dCB3aXRoIGEgdmVuZG9yIGJyYW5jaCB3aG9zZSBicmFuY2gKKyMgICAgICAgdGFnIGhhcyBiZWVuIHJlbW92ZWQuCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjdnNpbXBvcnQgaGFuZGxpbmcgb2YgdmVuZG9yIGJyYW5jaGVzJworLiAuL2xpYi1jdnMuc2gKKworc2V0dXBfY3ZzX3Rlc3RfcmVwb3NpdG9yeSB0OTYwMQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2ltcG9ydCBhIG1vZHVsZSB3aXRoIGEgdmVuZG9yIGJyYW5jaCcgJworCisJZ2l0IGN2c2ltcG9ydCAtQyBtb2R1bGUtZ2l0IG1vZHVsZQorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY2hlY2sgSEVBRCBvdXQgb2YgY3ZzIHJlcG9zaXRvcnknICd0ZXN0X2N2c19jbyBtYXN0ZXInCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY2hlY2sgbWFzdGVyIG91dCBvZiBnaXQgcmVwb3NpdG9yeScgJ3Rlc3RfZ2l0X2NvIG1hc3RlcicKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjaGVjayBhIGZpbGUgdGhhdCB3YXMgaW1wb3J0ZWQgb25jZScgJworCisJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgbWFzdGVyIGltcG9ydGVkLW9uY2UudHh0CisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQRVJMICdjaGVjayBhIGZpbGUgdGhhdCB3YXMgaW1wb3J0ZWQgdHdpY2UnICcKKworCXRlc3RfY21wX2JyYW5jaF9maWxlIG1hc3RlciBpbXBvcnRlZC10d2ljZS50eHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrIGEgZmlsZSB0aGF0IHdhcyBpbXBvcnRlZCB0aGVuIG1vZGlmaWVkIG9uIEhFQUQnICcKKworCXRlc3RfY21wX2JyYW5jaF9maWxlIG1hc3RlciBpbXBvcnRlZC1tb2RpZmllZC50eHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrIGEgZmlsZSB0aGF0IHdhcyBpbXBvcnRlZCwgbW9kaWZpZWQsIHRoZW4gaW1wb3J0ZWQgYWdhaW4nICcKKworCXRlc3RfY21wX2JyYW5jaF9maWxlIG1hc3RlciBpbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2NoZWNrIGEgZmlsZSB0aGF0IHdhcyBhZGRlZCB0byBIRUFEIHRoZW4gaW1wb3J0ZWQnICcKKworCXRlc3RfY21wX2JyYW5jaF9maWxlIG1hc3RlciBhZGRlZC1pbXBvcnRlZC50eHQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ2EgdmVuZG9yIGJyYW5jaCB3aG9zZSB0YWcgaGFzIGJlZW4gcmVtb3ZlZCcgJworCisJdGVzdF9jbXBfYnJhbmNoX2ZpbGUgbWFzdGVyIGltcG9ydGVkLWFub255bW91c2x5LnR4dAorCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290Ly5naXRhdHRyaWJ1dGVzIGIvdC90OTYwMS9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmIxMmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKiAtd2hpdGVzcGFjZQpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZSBiL3QvdDk2MDEvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiOWIzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitoaXN0b3J5Cit2YWwtdGFncwpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L21vZHVsZS9hZGRlZC1pbXBvcnRlZC50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvYWRkZWQtaW1wb3J0ZWQudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4MzA3MgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvYWRkZWQtaW1wb3J0ZWQudHh0LHYKQEAgLTAsMCArMSw0NCBAQAoraGVhZAkxLjE7CithY2Nlc3M7CitzeW1ib2xzCisJdnRhZy00OjEuMS4xLjEKKwl2YnJhbmNoQToxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTU7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTY7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjEKK2xvZworQEFkZCBhIGZpbGUgdG8gdGhlIHdvcmtpbmcgY29weS4KK0AKK3RleHQKK0BBZGRpbmcgdGhpcyBmaWxlLCBiZWZvcmUgaW1wb3J0aW5nIGl0IHdpdGggZGlmZmVyZW50IGNvbnRlbnRzLgorQAorCisKKzEuMS4xLjEKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctNCkuCitACit0ZXh0CitAZDEgMQorYTEgMQorVGhpcyBpcyB2dGFnLTQgKG9uIHZicmFuY2hBKSBvZiBhZGRlZC10aGVuLWltcG9ydGVkLnR4dC4KK0AKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1hbm9ueW1vdXNseS50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtYW5vbnltb3VzbHkudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVlMWIwYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtYW5vbnltb3VzbHkudHh0LHYKQEAgLTAsMCArMSw0MiBAQAoraGVhZAkxLjE7CiticmFuY2gJMS4xLjE7CithY2Nlc3M7CitzeW1ib2xzCisJdnRhZy0xOjEuMS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjEzOwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAVGhpcyBpcyB2dGFnLTEgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC1hbm9ueW1vdXNseS50eHQuCitACisKKworMS4xLjEuMQorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy0xKS4KK0AKK3RleHQKK0BACisKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU4MzBhZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0LHYKQEAgLTAsMCArMSw3NiBAQAoraGVhZAkxLjI7CithY2Nlc3M7CitzeW1ib2xzCisJdnRhZy0yOjEuMS4xLjIKKwl2dGFnLTE6MS4xLjEuMQorCXZicmFuY2hBOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjIKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xNDsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjEuMS4yOworCisxLjEuMS4yCitkYXRlCTIwMDQuMDIuMDkuMTUuNDMuMTM7CWF1dGhvciBrZm9nZWw7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjIKK2xvZworQEZpcnN0IHJlZ3VsYXIgY29tbWl0LCB0byBpbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQsIG9uIEhFQUQuCitACit0ZXh0CitAVGhpcyBpcyBhIG1vZGlmaWNhdGlvbiBvZiBpbXBvcnRlZC1tb2RpZmllZC1pbXBvcnRlZC50eHQgb24gSEVBRC4KK0l0IHNob3VsZCBzdXBlcnNlZGUgdGhlIHZlcnNpb24gZnJvbSB0aGUgdmVuZG9yIGJyYW5jaC4KK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkMSAyCithMiAxCitUaGlzIGlzIHZ0YWctMSAob24gdmJyYW5jaEEpIG9mIGltcG9ydGVkLW1vZGlmaWVkLWltcG9ydGVkLnR4dC4KK0AKKworCisxLjEuMS4xCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTEpLgorQAordGV4dAorQEAKKworCisxLjEuMS4yCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTIpLgorQAordGV4dAorQGQxIDEKK2ExIDEKK1RoaXMgaXMgdnRhZy0yIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtbW9kaWZpZWQtaW1wb3J0ZWQudHh0LgorQAorCisKZGlmZiAtLWdpdCBhL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtbW9kaWZpZWQudHh0LHYgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW1vZGlmaWVkLnR4dCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiY2ZlNDQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW1vZGlmaWVkLnR4dCx2CkBAIC0wLDAgKzEsNTkgQEAKK2hlYWQJMS4yOworYWNjZXNzOworc3ltYm9scworCXZ0YWctMToxLjEuMS4xCisJdmJyYW5jaEE6MS4xLjE7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMgorZGF0ZQkyMDA0LjAyLjA5LjE1LjQzLjE0OwlhdXRob3Iga2ZvZ2VsOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitAQ29tbWl0IG9uIEhFQUQuCitACit0ZXh0CitAVGhpcyBpcyBhIG1vZGlmaWNhdGlvbiBvZiBpbXBvcnRlZC1tb2RpZmllZC50eHQgb24gSEVBRC4KK0l0IHNob3VsZCBzdXBlcnNlZGUgdGhlIHZlcnNpb24gZnJvbSB0aGUgdmVuZG9yIGJyYW5jaC4KK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkMSAyCithMiAxCitUaGlzIGlzIHZ0YWctMSAob24gdmJyYW5jaEEpIG9mIGltcG9ydGVkLW1vZGlmaWVkLnR4dC4KK0AKKworCisxLjEuMS4xCitsb2cKK0BJbXBvcnQgKHZicmFuY2hBLCB2dGFnLTEpLgorQAordGV4dAorQEAKKworCmRpZmYgLS1naXQgYS90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW9uY2UudHh0LHYgYi90L3Q5NjAxL2N2c3Jvb3QvbW9kdWxlL2ltcG9ydGVkLW9uY2UudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkZDgyYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtb25jZS50eHQsdgpAQCAtMCwwICsxLDQzIEBACitoZWFkCTEuMTsKK2JyYW5jaAkxLjEuMTsKK2FjY2VzczsKK3N5bWJvbHMKKwl2dGFnLTE6MS4xLjEuMQorCXZicmFuY2hBOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQFRoaXMgaXMgdnRhZy0xIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtb25jZS50eHQuCitACisKKworMS4xLjEuMQorbG9nCitASW1wb3J0ICh2YnJhbmNoQSwgdnRhZy0xKS4KK0AKK3RleHQKK0BACisKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMS9jdnNyb290L21vZHVsZS9pbXBvcnRlZC10d2ljZS50eHQsdiBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtdHdpY2UudHh0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFmM2YxYgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDEvY3Zzcm9vdC9tb2R1bGUvaW1wb3J0ZWQtdHdpY2UudHh0LHYKQEAgLTAsMCArMSw2MCBAQAoraGVhZAkxLjE7CiticmFuY2gJMS4xLjE7CithY2Nlc3M7CitzeW1ib2xzCisJdnRhZy0yOjEuMS4xLjIKKwl2dGFnLTE6MS4xLjEuMQorCXZicmFuY2hBOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMS4xLjI7CisKKzEuMS4xLjIKK2RhdGUJMjAwNC4wMi4wOS4xNS40My4xMzsJYXV0aG9yIGtmb2dlbDsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQFRoaXMgaXMgdnRhZy0xIChvbiB2YnJhbmNoQSkgb2YgaW1wb3J0ZWQtdHdpY2UudHh0LgorQAorCisKKzEuMS4xLjEKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMSkuCitACit0ZXh0CitAQAorCisKKzEuMS4xLjIKK2xvZworQEltcG9ydCAodmJyYW5jaEEsIHZ0YWctMikuCitACit0ZXh0CitAZDEgMQorYTEgMQorVGhpcyBpcyB2dGFnLTIgKG9uIHZicmFuY2hBKSBvZiBpbXBvcnRlZC10d2ljZS50eHQuCitACisKKwpkaWZmIC0tZ2l0IGEvdC90OTYwMi1jdnNpbXBvcnQtYnJhbmNoZXMtdGFncy5zaCBiL3QvdDk2MDItY3ZzaW1wb3J0LWJyYW5jaGVzLXRhZ3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTFkYjMyMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDItY3ZzaW1wb3J0LWJyYW5jaGVzLXRhZ3Muc2gKQEAgLTAsMCArMSw3OCBAQAorIyEvYmluL3NoCisKKyMgQSBkZXNjcmlwdGlvbiBvZiB0aGUgcmVwb3NpdG9yeSB1c2VkIGZvciB0aGlzIHRlc3QgY2FuIGJlIGZvdW5kIGluCisjIHQ5NjAyL1JFQURNRS4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGN2c2ltcG9ydCBoYW5kbGluZyBvZiBicmFuY2hlcyBhbmQgdGFncycKKy4gLi9saWItY3ZzLnNoCisKK3NldHVwX2N2c190ZXN0X3JlcG9zaXRvcnkgdDk2MDIKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdpbXBvcnQgbW9kdWxlJyAnCisKKwlnaXQgY3ZzaW1wb3J0IC1DIG1vZHVsZS1naXQgbW9kdWxlCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd0ZXN0IGJyYW5jaCBtYXN0ZXInICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIG1hc3RlcgorCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAndGVzdCBicmFuY2ggdmVuZG9yYnJhbmNoJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSB2ZW5kb3JicmFuY2gKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFBFUkwgJ3Rlc3QgYnJhbmNoIEJfRlJPTV9JTklUSUFMUycgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgQl9GUk9NX0lOSVRJQUxTCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQRVJMICd0ZXN0IGJyYW5jaCBCX0ZST01fSU5JVElBTFNfQlVUX09ORScgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkUKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFBFUkwgJ3Rlc3QgYnJhbmNoIEJfTUlYRUQnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIEJfTUlYRUQKKworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFBFUkwgJ3Rlc3QgYnJhbmNoIEJfU1BMSVQnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIEJfU1BMSVQKKworJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlIFBFUkwgJ3Rlc3QgdGFnIHZlbmRvcnRhZycgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgdmVuZG9ydGFnCisKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICd0ZXN0IHRhZyBUX0FMTF9JTklUSUFMX0ZJTEVTJyAnCisKKwl0ZXN0X2NtcF9icmFuY2hfdHJlZSBUX0FMTF9JTklUSUFMX0ZJTEVTCisKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSBQRVJMICd0ZXN0IHRhZyBUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkUnICcKKworCXRlc3RfY21wX2JyYW5jaF90cmVlIFRfQUxMX0lOSVRJQUxfRklMRVNfQlVUX09ORQorCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUEVSTCAndGVzdCB0YWcgVF9NSVhFRCcgJworCisJdGVzdF9jbXBfYnJhbmNoX3RyZWUgVF9NSVhFRAorCisnCisKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjAyL1JFQURNRSBiL3QvdDk2MDIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMzFlMGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL1JFQURNRQpAQCAtMCwwICsxLDYyIEBACitUaGlzIHJlcG9zaXRvcnkgaXMgZm9yIHRlc3RpbmcgdGhlIGFiaWxpdHkgdG8gZ3JvdXAgcmV2aXNpb25zCitjb3JyZWN0bHkgYWxvbmcgdGFncyBhbmQgYnJhbmNoZXMuICBIZXJlIGlzIGl0cyBoaXN0b3J5OgorCisgIDEuICBUaGUgaW5pdGlhbCBpbXBvcnQgKHJldmlzaW9uIDEuMSBvZiBldmVyeWJvZHkpIGNyZWF0ZWQgYQorICAgICAgZGlyZWN0b3J5IHN0cnVjdHVyZSB3aXRoIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcgaW4gZWFjaCBkaXI6CisKKyAgICAgICAgICAgIC4vCisgICAgICAgICAgICAgIGRlZmF1bHQKKyAgICAgICAgICAgICAgc3ViMS9kZWZhdWx0CisgICAgICAgICAgICAgICAgICAgc3Vic3ViQS9kZWZhdWx0CisgICAgICAgICAgICAgICAgICAgc3Vic3ViQi9kZWZhdWx0CisgICAgICAgICAgICAgIHN1YjIvZGVmYXVsdAorICAgICAgICAgICAgICAgICAgIHN1YnN1YkEvZGVmYXVsdAorICAgICAgICAgICAgICBzdWIzL2RlZmF1bHQKKworICAyLiAgVGhlbiB0YWdnZWQgZXZlcnlvbmUgd2l0aCBUX0FMTF9JTklUSUFMX0ZJTEVTLgorCisgIDMuICBUaGVuIHRhZ2dlZCBldmVyeW9uZSBleGNlcHQgc3ViMS9zdWJzdWJCL2RlZmF1bHQgd2l0aAorICAgICAgVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FLgorCisgIDQuICBUaGVuIGNyZWF0ZWQgYnJhbmNoIEJfRlJPTV9JTklUSUFMUyBvbiBldmVyeW9uZS4KKworICA1LiAgVGhlbiBjcmVhdGVkIGJyYW5jaCBCX0ZST01fSU5JVElBTFNfQlVUX09ORSBvbiBldmVyeW9uZSBleGNlcHQKKyAgICAgIC9zdWIxL3N1YnN1YkIvZGVmYXVsdC4KKworICA2LiAgVGhlbiBjb21taXR0ZWQgbW9kaWZpY2F0aW9ucyB0byB0d28gZmlsZXM6IHN1YjMvZGVmYXVsdCwgYW5kCisgICAgICBzdWIxL3N1YnN1YkEvZGVmYXVsdC4KKworICA3LiAgVGhlbiBjb21taXR0ZWQgYSBtb2RpZmljYXRpb24gdG8gYWxsIDcgZmlsZXMuCisKKyAgOC4gIFRoZW4gYmFja2RhdGVkIHN1YjMvZGVmYXVsdCB0byByZXZpc2lvbiAxLjIsIGFuZAorICAgICAgc3ViMi9zdWJzdWJBL2RlZmF1bHQgdG8gcmV2aXNpb24gMS4xLCBhbmQgdGFnZ2VkIHdpdGggVF9NSVhFRC4KKworICA5LiAgU2FtZSBhcyA4LCBidXQgdGFnZ2VkIHdpdGggLWIgdG8gY3JlYXRlIGJyYW5jaCBCX01JWEVELgorCisgIDEwLiBTd2l0Y2hlZCB0aGUgd29ya2luZyBjb3B5IHRvIEJfTUlYRUQsIGFuZCBhZGRlZAorICAgICAgc3ViMi9icmFuY2hfQl9NSVhFRF9vbmx5LiAgKFRoYXQncyB3aHkgdGhlIFJDUyBmaWxlIGlzIGluCisgICAgICBzdWIyL0F0dGljLyAtLSBpdCBuZXZlciBleGlzdGVkIG9uIHRydW5rLikKKworICAxMS4gSW4gb25lIGNvbW1pdCwgbW9kaWZpZWQgZGVmYXVsdCwgc3ViMS9kZWZhdWx0LCBhbmQKKyAgICAgIHN1YjIvc3Vic3ViQS9kZWZhdWx0LCBvbiBicmFuY2ggQl9NSVhFRC4KKworICAxMi4gRGlkICJjdnMgdXAgLUEiIG9uIHN1YjIvZGVmYXVsdCwgdGhlbiBpbiBvbmUgY29tbWl0LCBtYWRlIGEKKyAgICAgIGNoYW5nZSB0byBzdWIyL2RlZmF1bHQgYW5kIHN1YjIvYnJhbmNoX0JfTUlYRURfb25seS4gIFNvIHRoaXMKKyAgICAgIGNvbW1pdCBzaG91bGQgYmUgc3ByZWFkIGJldHdlZW4gdGhlIGJyYW5jaCBhbmQgdGhlIHRydW5rLgorCisgIDEzLiBEbyAiY3ZzIHVwIC1BIiB0byBnZXQgZXZlcnlvbmUgYmFjayB0byB0cnVuaywgdGhlbiBtYWtlIGEgbmV3CisgICAgICBicmFuY2ggQl9TUExJVCBvbiBldmVyeW9uZSBleGNlcHQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsdi4KKworICAxNC4gU3dpdGNoIHRvIGJyYW5jaCBCX1NQTElUIChzZWUgc3ViMS9zdWJzdWJCL2RlZmF1bHQgZGlzYXBwZWFyKQorICAgICAgYW5kIGNvbW1pdCBhIGNoYW5nZSB0aGF0IGFmZmVjdHMgZXZlcnlvbmUgZXhjZXB0IHN1YjMvZGVmYXVsdC4KKworICAxNS4gQW4gaG91ciBvciBzbyBsYXRlciwgImN2cyB1cCAtQSIgdG8gZ2V0IHN1YjEvc3Vic3ViQi9kZWZhdWx0CisgICAgICBiYWNrLCB0aGVuIGNvbW1pdCBhIGNoYW5nZSBvbiB0aGF0IGZpbGUsIG9uIHRydW5rLiAgKEl0J3MKKyAgICAgIGltcG9ydGFudCB0aGF0IHRoaXMgY2hhbmdlIGhhcHBlbmVkIGFmdGVyIHRoZSBwcmV2aW91cyBjb21taXRzCisgICAgICBvbiBCX1NQTElULikKKworICAxNi4gQnJhbmNoIHN1YjEvc3Vic3ViQi9kZWZhdWx0IHRvIEJfU1BMSVQsIHRoZW4gImN2cyB1cCAtciBCX1NQTElUIgorICAgICAgdG8gc3dpdGNoIHRoZSB3aG9sZSB3b3JraW5nIGNvcHkgdG8gdGhlIGJyYW5jaC4KKworICAxNy4gQ29tbWl0IGEgY2hhbmdlIG9uIEJfU1BMSVQsIHRvIHN1YjEvc3Vic3ViQi9kZWZhdWx0IGFuZAorICAgICAgc3ViMy9kZWZhdWx0LgpkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290Ly5naXRhdHRyaWJ1dGVzIGIvdC90OTYwMi9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmIxMmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKiAtd2hpdGVzcGFjZQpkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZSBiL3QvdDk2MDIvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiOWIzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitoaXN0b3J5Cit2YWwtdGFncwpkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjY4MzgyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9kZWZhdWx0LHYKQEAgLTAsMCArMSwxMDIgQEAKK2hlYWQJMS4yOworYWNjZXNzOworc3ltYm9scworCUJfU1BMSVQ6MS4yLjAuNAorCUJfTUlYRUQ6MS4yLjAuMgorCVRfTUlYRUQ6MS4yCisJQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkU6MS4xLjEuMS4wLjQKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkU6MS4xLjEuMQorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4yLjIuMQorCTEuMi40LjE7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjIuMQorZGF0ZQkyMDAzLjA1LjIzLjAwLjMxLjM2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjQuMQorZGF0ZQkyMDAzLjA2LjAzLjAzLjIwLjMxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAVGhpcyBpcyB0aGUgZmlsZSBgZGVmYXVsdCcgaW4gdGhlIHRvcCBsZXZlbCBvZiB0aGUgcHJvamVjdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KK0AKKworCisxLjIuNC4xCitsb2cKK0BGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCisKK1RoaXMgY2hhbmdlIGV4Y2x1ZGVzIHN1YjMvZGVmYXVsdCwgYmVjYXVzZSBpdCB3YXMgbm90IHBhcnQgb2YgdGhpcworY29tbWl0LCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIHdoaWNoIGlzIG5vdCBldmVuIG9uIHRoZSBicmFuY2ggeWV0LgorQAordGV4dAorQGE1IDIKKworRmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorQAorCisKKzEuMi4yLjEKK2xvZworQE1vZGlmeSB0aHJlZSBmaWxlcywgb24gYnJhbmNoIEJfTUlYRUQuCitACit0ZXh0CitAYTUgMgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIG9uIGJyYW5jaCBCX01JWEVEIG9ubHkgKGFmZmVjdGluZyAzIGZpbGVzKS4KK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkNCAyCitACisKKworMS4xLjEuMQorbG9nCitASW5pdGlhbCBpbXBvcnQuCitACit0ZXh0CitAQApkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmZGNjZAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9kZWZhdWx0LHYKQEAgLTAsMCArMSwxMDIgQEAKK2hlYWQJMS4yOworYWNjZXNzOworc3ltYm9scworCUJfU1BMSVQ6MS4yLjAuNAorCUJfTUlYRUQ6MS4yLjAuMgorCVRfTUlYRUQ6MS4yCisJQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkU6MS4xLjEuMS4wLjQKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkU6MS4xLjEuMQorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4yLjIuMQorCTEuMi40LjE7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMS4xLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjIuMQorZGF0ZQkyMDAzLjA1LjIzLjAwLjMxLjM2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjQuMQorZGF0ZQkyMDAzLjA2LjAzLjAzLjIwLjMxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAVGhpcyBpcyBzdWIxL2RlZmF1bHQuCisKK0V2ZXJ5IGRpcmVjdG9yeSBpbiB0aGUgYHByb2onIHByb2plY3QgaGFzIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgaW4gdGhlIHNlY29uZCBjb21taXQgKGFmZmVjdGluZyBhbGwgNyBmaWxlcykuCitACisKKworMS4yLjQuMQorbG9nCitARmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorCitUaGlzIGNoYW5nZSBleGNsdWRlcyBzdWIzL2RlZmF1bHQsIGJlY2F1c2UgaXQgd2FzIG5vdCBwYXJ0IG9mIHRoaXMKK2NvbW1pdCwgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCB3aGljaCBpcyBub3QgZXZlbiBvbiB0aGUgYnJhbmNoIHlldC4KK0AKK3RleHQKK0BhNSAyCisKK0ZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KK0AKKworCisxLjIuMi4xCitsb2cKK0BNb2RpZnkgdGhyZWUgZmlsZXMsIG9uIGJyYW5jaCBCX01JWEVELgorQAordGV4dAorQGE1IDIKKworVGhpcyBsaW5lIHdhcyBhZGRlZCBvbiBicmFuY2ggQl9NSVhFRCBvbmx5IChhZmZlY3RpbmcgMyBmaWxlcykuCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJBL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJBL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzJiN2IyCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL3N1YnN1YkEvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAxIEBACitoZWFkCTEuMzsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMy4wLjQKKwlCX01JWEVEOjEuMy4wLjIKKwlUX01JWEVEOjEuMworCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4zCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMy40LjE7CituZXh0CTEuMjsKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTUuMjY7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjMuNC4xCitkYXRlCTIwMDMuMDYuMDMuMDMuMjAuMzE7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4zCitsb2cKK0BTZWNvbmQgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyBhbGwgNyBmaWxlcy4KK0AKK3RleHQKK0BUaGlzIGlzIHN1YjEvc3Vic3ViQS9kZWZhdWx0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGJ5IHRoZSBmaXJzdCBjb21taXQgKGFmZmVjdGluZyB0d28gZmlsZXMpLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorQAorCisKKzEuMy40LjEKK2xvZworQEZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KKworVGhpcyBjaGFuZ2UgZXhjbHVkZXMgc3ViMy9kZWZhdWx0LCBiZWNhdXNlIGl0IHdhcyBub3QgcGFydCBvZiB0aGlzCitjb21taXQsIGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgd2hpY2ggaXMgbm90IGV2ZW4gb24gdGhlIGJyYW5jaCB5ZXQuCitACit0ZXh0CitAYTcgMgorCitGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCitACisKKworMS4yCitsb2cKK0BGaXJzdCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIHR3byBmaWxlcy4KK0AKK3RleHQKK0BkNiAyCitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJCL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMS9zdWJzdWJCL2RlZmF1bHQsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTZlZmE0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIxL3N1YnN1YkIvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTA3IEBACitoZWFkCTEuMzsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMy4wLjIKKwlCX01JWEVEOjEuMi4wLjIKKwlUX01JWEVEOjEuMgorCUJfRlJPTV9JTklUSUFMUzoxLjEuMS4xLjAuMgorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjMKK2RhdGUJMjAwMy4wNi4wMy4wNC4yOS4xNDsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4zLjIuMTsKK25leHQJMS4yOworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMy4yLjEKK2RhdGUJMjAwMy4wNi4wMy4wNC4zMy4xMzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjMKK2xvZworQEEgdHJ1bmsgY2hhbmdlIHRvIHN1YjEvc3Vic3ViQi9kZWZhdWx0LiAgVGhpcyB3YXMgY29tbWl0dGVkIGFib3V0IGFuCitob3VyIGFmdGVyIGFuIGVhcmxpZXIgY2hhbmdlIHRoYXQgYWZmZWN0ZWQgbW9zdCBmaWxlcyBvbiBicmFuY2gKK0JfU1BMSVQuICBUaGlzIGZpbGUgaXMgbm90IG9uIHRoYXQgYnJhbmNoIHlldCwgYnV0IGFmdGVyIHRoaXMgY29tbWl0LAord2UnbGwgYnJhbmNoIHRvIEJfU1BMSVQsIGFsYmVpdCByb290ZWQgaW4gYSByZXZpc2lvbiB0aGF0IGRpZG4ndCBleGlzdAorYXQgdGhlIHRpbWUgdGhlIHJlc3Qgb2YgQl9TUExJVCB3YXMgY3JlYXRlZC4KK0AKK3RleHQKK0BUaGlzIGlzIHN1YjEvc3Vic3ViQi9kZWZhdWx0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorCitUaGlzIGJpdCB3YXMgY29tbWl0dGVkIG9uIHRydW5rIGFib3V0IGFuIGhvdXIgYWZ0ZXIgYW4gZWFybGllciBjaGFuZ2UKK3RvIGV2ZXJ5b25lIGVsc2Ugb24gYnJhbmNoIEJfU1BMSVQuICBBZnRlcndhcmRzLCB3ZSdsbCBmaW5hbGx5IGJyYW5jaAordGhpcyBmaWxlIHRvIEJfU1BMSVQsIGJ1dCByb290ZWQgaW4gYSByZXZpc2lvbiB0aGF0IGRpZG4ndCBleGlzdCBhdAordGhlIHRpbWUgdGhlIHJlc3Qgb2YgQl9TUExJVCB3YXMgY3JlYXRlZC4KK0AKKworCisxLjMuMi4xCitsb2cKK0BUaGlzIGNoYW5nZSBhZmZlY3RzIHN1YjMvZGVmYXVsdCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIG9uIGJyYW5jaAorQl9TUExJVC4gIE5vdGUgdGhhdCB0aGUgbGF0dGVyIGZpbGUgZGlkIG5vdCBldmVuIGV4aXN0IG9uIHRoaXMgYnJhbmNoCit1bnRpbCBhZnRlciBzb21lIG90aGVyIGZpbGVzIGhhZCBoYWQgcmV2aXNpb25zIGNvbW1pdHRlZCBvbiBCX1NQTElULgorQAordGV4dAorQGExMCA0CisKK1RoaXMgY2hhbmdlIGFmZmVjdHMgc3ViMy9kZWZhdWx0IGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgb24gYnJhbmNoCitCX1NQTElULiAgTm90ZSB0aGF0IHRoZSBsYXR0ZXIgZmlsZSBkaWQgbm90IGV2ZW4gZXhpc3Qgb24gdGhpcyBicmFuY2gKK3VudGlsIGFmdGVyIHNvbWUgb3RoZXIgZmlsZXMgaGFkIGhhZCByZXZpc2lvbnMgY29tbWl0dGVkIG9uIEJfU1BMSVQuCitACisKKworMS4yCitsb2cKK0BTZWNvbmQgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyBhbGwgNyBmaWxlcy4KK0AKK3RleHQKK0BkNiA1CitACisKKworMS4xCitsb2cKK0BJbml0aWFsIHJldmlzaW9uCitACit0ZXh0CitAZDQgMgorQAorCisKKzEuMS4xLjEKK2xvZworQEluaXRpYWwgaW1wb3J0LgorQAordGV4dAorQEAKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9BdHRpYy9icmFuY2hfQl9NSVhFRF9vbmx5LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvQXR0aWMvYnJhbmNoX0JfTUlYRURfb25seSx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0Yzk3ODkKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvQXR0aWMvYnJhbmNoX0JfTUlYRURfb25seSx2CkBAIC0wLDAgKzEsNTkgQEAKK2hlYWQJMS4xOworYWNjZXNzOworc3ltYm9scworCUJfTUlYRUQ6MS4xLjAuMjsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4xCitkYXRlCTIwMDMuMDUuMjMuMDAuMjUuMjY7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBkZWFkOworYnJhbmNoZXMKKwkxLjEuMi4xOworbmV4dAk7CisKKzEuMS4yLjEKK2RhdGUJMjAwMy4wNS4yMy4wMC4yNS4yNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjEuMi4yOworCisxLjEuMi4yCitkYXRlCTIwMDMuMDUuMjMuMDAuNDguNTE7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4xCitsb2cKK0BmaWxlIGJyYW5jaF9CX01JWEVEX29ubHkgd2FzIGluaXRpYWxseSBhZGRlZCBvbiBicmFuY2ggQl9NSVhFRC4KK0AKK3RleHQKK0BACisKKworMS4xLjIuMQorbG9nCitAQWRkIGEgZmlsZSBvbiBicmFuY2ggQl9NSVhFRC4KK0AKK3RleHQKK0BhMCAxCitUaGlzIGZpbGUgd2FzIGFkZGVkIG9uIGJyYW5jaCBCX01JWEVELiAgSXQgbmV2ZXIgZXhpc3RlZCBvbiB0cnVuay4KK0AKKworCisxLjEuMi4yCitsb2cKK0BBIHNpbmdsZSBjb21taXQgYWZmZWN0aW5nIG9uZSBmaWxlIG9uIGJyYW5jaCBCX01JWEVEIGFuZCBvbmUgb24gdHJ1bmsuCitACit0ZXh0CitAYTEgMworCitUaGUgc2FtZSBjb21taXQgYWRkZWQgdGhlc2UgdHdvIGxpbmVzIGhlcmUgb24gYnJhbmNoIEJfTUlYRUQsIGFuZCB0d28KK3NpbWlsYXIgbGluZXMgdG8gLi9kZWZhdWx0IG9uIHRydW5rLgorQAorCisKZGlmZiAtLWdpdCBhL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMi9kZWZhdWx0LHYgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvZGVmYXVsdCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxOGY3ZjgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvZGVmYXVsdCx2CkBAIC0wLDAgKzEsMTAyIEBACitoZWFkCTEuMzsKK2FjY2VzczsKK3N5bWJvbHMKKwlCX1NQTElUOjEuMy4wLjIKKwlCX01JWEVEOjEuMi4wLjIKKwlUX01JWEVEOjEuMgorCUJfRlJPTV9JTklUSUFMU19CVVRfT05FOjEuMS4xLjEuMC40CisJQl9GUk9NX0lOSVRJQUxTOjEuMS4xLjEuMC4yCisJVF9BTExfSU5JVElBTF9GSUxFU19CVVRfT05FOjEuMS4xLjEKKwlUX0FMTF9JTklUSUFMX0ZJTEVTOjEuMS4xLjEKKwl2ZW5kb3J0YWc6MS4xLjEuMQorCXZlbmRvcmJyYW5jaDoxLjEuMTsKK2xvY2tzOyBzdHJpY3Q7Citjb21tZW50CUAjIEA7CisKKworMS4zCitkYXRlCTIwMDMuMDUuMjMuMDAuNDguNTE7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMy4yLjE7CituZXh0CTEuMjsKKworMS4yCitkYXRlCTIwMDMuMDUuMjMuMDAuMTcuNTM7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMTsKK25leHQJOworCisxLjEuMS4xCitkYXRlCTIwMDMuMDUuMjIuMjMuMjAuMTk7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjMuMi4xCitkYXRlCTIwMDMuMDYuMDMuMDMuMjAuMzE7CWF1dGhvciBqcmFuZG9tOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4zCitsb2cKK0BBIHNpbmdsZSBjb21taXQgYWZmZWN0aW5nIG9uZSBmaWxlIG9uIGJyYW5jaCBCX01JWEVEIGFuZCBvbmUgb24gdHJ1bmsuCitACit0ZXh0CitAVGhpcyBpcyBzdWIyL2RlZmF1bHQuCisKK0V2ZXJ5IGRpcmVjdG9yeSBpbiB0aGUgYHByb2onIHByb2plY3QgaGFzIGEgZmlsZSBuYW1lZCBgZGVmYXVsdCcuCisKK1RoaXMgbGluZSB3YXMgYWRkZWQgaW4gdGhlIHNlY29uZCBjb21taXQgKGFmZmVjdGluZyBhbGwgNyBmaWxlcykuCisKK1RoZSBzYW1lIGNvbW1pdCBhZGRlZCB0aGVzZSB0d28gbGluZXMgaGVyZSBvbiB0cnVuaywgYW5kIHR3byBzaW1pbGFyCitsaW5lcyB0byAuL2JyYW5jaF9CX01JWEVEX29ubHkgb24gYnJhbmNoIEJfTUlYRUQuCitACisKKworMS4zLjIuMQorbG9nCitARmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorCitUaGlzIGNoYW5nZSBleGNsdWRlcyBzdWIzL2RlZmF1bHQsIGJlY2F1c2UgaXQgd2FzIG5vdCBwYXJ0IG9mIHRoaXMKK2NvbW1pdCwgYW5kIHN1YjEvc3Vic3ViQi9kZWZhdWx0LCB3aGljaCBpcyBub3QgZXZlbiBvbiB0aGUgYnJhbmNoIHlldC4KK0AKK3RleHQKK0BhOCAyCisKK0ZpcnN0IGNoYW5nZSBvbiBicmFuY2ggQl9TUExJVC4KK0AKKworCisxLjIKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQGQ2IDMKK0AKKworCisxLjEKK2xvZworQEluaXRpYWwgcmV2aXNpb24KK0AKK3RleHQKK0BkNCAyCitACisKKworMS4xLjEuMQorbG9nCitASW5pdGlhbCBpbXBvcnQuCitACit0ZXh0CitAQApkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL3N1YnN1YkEvZGVmYXVsdCx2IGIvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIyL3N1YnN1YkEvZGVmYXVsdCx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzI0MmMKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAyL2N2c3Jvb3QvbW9kdWxlL3N1YjIvc3Vic3ViQS9kZWZhdWx0LHYKQEAgLTAsMCArMSwxMDIgQEAKK2hlYWQJMS4yOworYWNjZXNzOworc3ltYm9scworCUJfU1BMSVQ6MS4yLjAuMgorCUJfTUlYRUQ6MS4xLjAuMgorCVRfTUlYRUQ6MS4xCisJQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkU6MS4xLjEuMS4wLjQKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkU6MS4xLjEuMQorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4yLjIuMTsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4xLjEuMQorCTEuMS4yLjE7CituZXh0CTsKKworMS4xLjEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4xLjIuMQorZGF0ZQkyMDAzLjA1LjIzLjAwLjMxLjM2OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworMS4yLjIuMQorZGF0ZQkyMDAzLjA2LjAzLjAzLjIwLjMxOwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitAU2Vjb25kIGNvbW1pdCB0byBwcm9qLCBhZmZlY3RpbmcgYWxsIDcgZmlsZXMuCitACit0ZXh0CitAVGhpcyBpcyBzdWIyL3N1YnN1YjIvZGVmYXVsdC4KKworRXZlcnkgZGlyZWN0b3J5IGluIHRoZSBgcHJvaicgcHJvamVjdCBoYXMgYSBmaWxlIG5hbWVkIGBkZWZhdWx0Jy4KKworVGhpcyBsaW5lIHdhcyBhZGRlZCBpbiB0aGUgc2Vjb25kIGNvbW1pdCAoYWZmZWN0aW5nIGFsbCA3IGZpbGVzKS4KK0AKKworCisxLjIuMi4xCitsb2cKK0BGaXJzdCBjaGFuZ2Ugb24gYnJhbmNoIEJfU1BMSVQuCisKK1RoaXMgY2hhbmdlIGV4Y2x1ZGVzIHN1YjMvZGVmYXVsdCwgYmVjYXVzZSBpdCB3YXMgbm90IHBhcnQgb2YgdGhpcworY29tbWl0LCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIHdoaWNoIGlzIG5vdCBldmVuIG9uIHRoZSBicmFuY2ggeWV0LgorQAordGV4dAorQGE1IDIKKworRmlyc3QgY2hhbmdlIG9uIGJyYW5jaCBCX1NQTElULgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMi4xCitsb2cKK0BNb2RpZnkgdGhyZWUgZmlsZXMsIG9uIGJyYW5jaCBCX01JWEVELgorQAordGV4dAorQGEzIDIKKworVGhpcyBsaW5lIHdhcyBhZGRlZCBvbiBicmFuY2ggQl9NSVhFRCBvbmx5IChhZmZlY3RpbmcgMyBmaWxlcykuCitACisKKworMS4xLjEuMQorbG9nCitASW5pdGlhbCBpbXBvcnQuCitACit0ZXh0CitAQApkaWZmIC0tZ2l0IGEvdC90OTYwMi9jdnNyb290L21vZHVsZS9zdWIzL2RlZmF1bHQsdiBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMy9kZWZhdWx0LHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlNDU2NwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDIvY3Zzcm9vdC9tb2R1bGUvc3ViMy9kZWZhdWx0LHYKQEAgLTAsMCArMSwxMDIgQEAKK2hlYWQJMS4zOworYWNjZXNzOworc3ltYm9scworCUJfU1BMSVQ6MS4zLjAuMgorCUJfTUlYRUQ6MS4yLjAuMgorCVRfTUlYRUQ6MS4yCisJQl9GUk9NX0lOSVRJQUxTX0JVVF9PTkU6MS4xLjEuMS4wLjQKKwlCX0ZST01fSU5JVElBTFM6MS4xLjEuMS4wLjIKKwlUX0FMTF9JTklUSUFMX0ZJTEVTX0JVVF9PTkU6MS4xLjEuMQorCVRfQUxMX0lOSVRJQUxfRklMRVM6MS4xLjEuMQorCXZlbmRvcnRhZzoxLjEuMS4xCisJdmVuZG9yYnJhbmNoOjEuMS4xOworbG9ja3M7IHN0cmljdDsKK2NvbW1lbnQJQCMgQDsKKworCisxLjMKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNy41MzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzCisJMS4zLjIuMTsKK25leHQJMS4yOworCisxLjIKK2RhdGUJMjAwMy4wNS4yMy4wMC4xNS4yNjsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDAzLjA1LjIyLjIzLjIwLjE5OwlhdXRob3IganJhbmRvbTsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjEuMS4xOworbmV4dAk7CisKKzEuMS4xLjEKK2RhdGUJMjAwMy4wNS4yMi4yMy4yMC4xOTsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMy4yLjEKK2RhdGUJMjAwMy4wNi4wMy4wNC4zMy4xMzsJYXV0aG9yIGpyYW5kb207CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjMKK2xvZworQFNlY29uZCBjb21taXQgdG8gcHJvaiwgYWZmZWN0aW5nIGFsbCA3IGZpbGVzLgorQAordGV4dAorQFRoaXMgaXMgc3ViMy9kZWZhdWx0LgorCitFdmVyeSBkaXJlY3RvcnkgaW4gdGhlIGBwcm9qJyBwcm9qZWN0IGhhcyBhIGZpbGUgbmFtZWQgYGRlZmF1bHQnLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGJ5IHRoZSBmaXJzdCBjb21taXQgKGFmZmVjdGluZyB0d28gZmlsZXMpLgorCitUaGlzIGxpbmUgd2FzIGFkZGVkIGluIHRoZSBzZWNvbmQgY29tbWl0IChhZmZlY3RpbmcgYWxsIDcgZmlsZXMpLgorQAorCisKKzEuMy4yLjEKK2xvZworQFRoaXMgY2hhbmdlIGFmZmVjdHMgc3ViMy9kZWZhdWx0IGFuZCBzdWIxL3N1YnN1YkIvZGVmYXVsdCwgb24gYnJhbmNoCitCX1NQTElULiAgTm90ZSB0aGF0IHRoZSBsYXR0ZXIgZmlsZSBkaWQgbm90IGV2ZW4gZXhpc3Qgb24gdGhpcyBicmFuY2gKK3VudGlsIGFmdGVyIHNvbWUgb3RoZXIgZmlsZXMgaGFkIGhhZCByZXZpc2lvbnMgY29tbWl0dGVkIG9uIEJfU1BMSVQuCitACit0ZXh0CitAYTcgNAorCitUaGlzIGNoYW5nZSBhZmZlY3RzIHN1YjMvZGVmYXVsdCBhbmQgc3ViMS9zdWJzdWJCL2RlZmF1bHQsIG9uIGJyYW5jaAorQl9TUExJVC4gIE5vdGUgdGhhdCB0aGUgbGF0dGVyIGZpbGUgZGlkIG5vdCBldmVuIGV4aXN0IG9uIHRoaXMgYnJhbmNoCit1bnRpbCBhZnRlciBzb21lIG90aGVyIGZpbGVzIGhhZCBoYWQgcmV2aXNpb25zIGNvbW1pdHRlZCBvbiBCX1NQTElULgorQAorCisKKzEuMgorbG9nCitARmlyc3QgY29tbWl0IHRvIHByb2osIGFmZmVjdGluZyB0d28gZmlsZXMuCitACit0ZXh0CitAZDYgMgorQAorCisKKzEuMQorbG9nCitASW5pdGlhbCByZXZpc2lvbgorQAordGV4dAorQGQ0IDIKK0AKKworCisxLjEuMS4xCitsb2cKK0BJbml0aWFsIGltcG9ydC4KK0AKK3RleHQKK0BACmRpZmYgLS1naXQgYS90L3Q5NjAzLWN2c2ltcG9ydC1wYXRjaHNldHMuc2ggYi90L3Q5NjAzLWN2c2ltcG9ydC1wYXRjaHNldHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzRjM2M0OQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDMtY3ZzaW1wb3J0LXBhdGNoc2V0cy5zaApAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKworIyBTdHJ1Y3R1cmUgb2YgdGhlIHRlc3QgY3ZzIHJlcG9zaXRvcnkKKyMKKyMgTWVzc2FnZSAgIEZpbGU6Q29udGVudCAgICAgICAgIENvbW1pdCBUaW1lCisjIFJldiAxICAgICBhOiAxLjEgICAgICAgICAgICAgICAyMDA5LTAyLTIxIDE5OjExOjQzICswMTAwCisjIFJldiAyICAgICBhOiAxLjIgICAgYjogMS4xICAgICAyMDA5LTAyLTIxIDE5OjExOjE0ICswMTAwCisjIFJldiAzICAgICAgICAgICAgICAgYjogMS4yICAgICAyMDA5LTAyLTIxIDE5OjExOjQzICswMTAwCisjCisjIEFzIHlvdSBjYW4gc2VlIHRoZSBjb21taXQgb2YgUmV2IDMgaGFzIHRoZSBzYW1lIHRpbWUgYXMKKyMgUmV2IDEgdGhpcyBsZWFkcyB0byBhIGJyb2tlbiBpbXBvcnQgYmVjYXVzZSBvZiBhIGN2c3BzCisjIGJ1Zy4KKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IGN2c2ltcG9ydCB0ZXN0aW5nIGZvciBjb3JyZWN0IHBhdGNoc2V0IGVzdGltYXRpb24nCisuIC4vbGliLWN2cy5zaAorCitzZXR1cF9jdnNfdGVzdF9yZXBvc2l0b3J5IHQ5NjAzCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgUEVSTCAnaW1wb3J0IHdpdGggY3Jpc3MgY3Jvc3MgdGltZXMgb24gcmV2aXNpb25zJyAnCisKKyAgICBnaXQgY3ZzaW1wb3J0IC1wIi14IiAtQyBtb2R1bGUtZ2l0IG1vZHVsZSAmJgorICAgIChjZCBtb2R1bGUtZ2l0ICYmCisgICAgICAgIGdpdCBsb2cgLS1wcmV0dHk9Zm9ybWF0OiVzID4gLi4vYWN0dWFsLW1hc3RlciAmJgorICAgICAgICBnaXQgbG9nIEF+Mi4uQSAtLXByZXR0eT0iZm9ybWF0OiVzICVhZCIgLS0gPiAuLi9hY3R1YWwtQSAmJgorICAgICAgICBlY2hvICIiID4+IC4uL2FjdHVhbC1tYXN0ZXIgJiYKKwllY2hvICIiID4+IC4uL2FjdHVhbC1BCisgICAgKSAmJgorICAgIGVjaG8gIlJldiA0CitSZXYgMworUmV2IDIKK1JldiAxIiA+IGV4cGVjdC1tYXN0ZXIgJiYKKyAgICB0ZXN0X2NtcCBhY3R1YWwtbWFzdGVyIGV4cGVjdC1tYXN0ZXIgJiYKKworICAgIGVjaG8gIlJldiA1IEJyYW5jaCBBIFdlZCBNYXIgMTEgMTk6MDk6MTAgMjAwOSArMDAwMAorUmV2IDQgQnJhbmNoIEEgV2VkIE1hciAxMSAxOTowMzo1MiAyMDA5ICswMDAwIiA+IGV4cGVjdC1BICYmCisgICAgdGVzdF9jbXAgYWN0dWFsLUEgZXhwZWN0LUEKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5NjAzL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMgYi90L3Q5NjAzL2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYyYjEyZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDMvY3Zzcm9vdC8uZ2l0YXR0cmlidXRlcwpAQCAtMCwwICsxIEBACisqIC13aGl0ZXNwYWNlCmRpZmYgLS1naXQgYS90L3Q5NjAzL2N2c3Jvb3QvQ1ZTUk9PVC8uZ2l0aWdub3JlIGIvdC90OTYwMy9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmI5YjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwMy9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKK2hpc3RvcnkKK3ZhbC10YWdzCmRpZmYgLS1naXQgYS90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2EsdiBiL3QvdDk2MDMvY3Zzcm9vdC9tb2R1bGUvYSx2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhOGZkNWEKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2EsdgpAQCAtMCwwICsxLDc0IEBACitoZWFkCTEuMjsKK2FjY2VzczsKK3N5bWJvbHMKKwlBOjEuMi4wLjI7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMgorZGF0ZQkyMDA5LjAyLjIxLjE4LjExLjE0OwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlcworCTEuMi4yLjE7CituZXh0CTEuMTsKKworMS4xCitkYXRlCTIwMDkuMDIuMjEuMTguMTEuNDM7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKzEuMi4yLjEKK2RhdGUJMjAwOS4wMy4xMS4xOS4wMy41MjsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMi4yLjI7CisKKzEuMi4yLjIKK2RhdGUJMjAwOS4wMy4xMS4xOS4wOS4xMDsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTsKKworCitkZXNjCitAQAorCisKKzEuMgorbG9nCitAUmV2IDIKK0AKK3RleHQKK0AxLjIKK0AKKworCisxLjIuMi4xCitsb2cKK0BSZXYgNCBCcmFuY2ggQQorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMi4yLjEKK0AKKworCisxLjIuMi4yCitsb2cKK0BSZXYgNSBCcmFuY2ggQQorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMi4yLjIKK0AKKworCisxLjEKK2xvZworQFJldiAxCitACit0ZXh0CitAZDEgMQorYTEgMQorMS4xCitACmRpZmYgLS1naXQgYS90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2IsdiBiL3QvdDk2MDMvY3Zzcm9vdC9tb2R1bGUvYix2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNjg4NTUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjAzL2N2c3Jvb3QvbW9kdWxlL2IsdgpAQCAtMCwwICsxLDkwIEBACitoZWFkCTEuMzsKK2FjY2VzczsKK3N5bWJvbHMKKwlBOjEuMi4wLjI7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMworZGF0ZQkyMDA5LjAzLjExLjE5LjA1LjA4OwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4yOworCisxLjIKK2RhdGUJMjAwOS4wMi4yMS4xOC4xMS40MzsJYXV0aG9yIHRlc3RlcjsJc3RhdGUgRXhwOworYnJhbmNoZXMKKwkxLjIuMi4xOworbmV4dAkxLjE7CisKKzEuMQorZGF0ZQkyMDA5LjAyLjIxLjE4LjExLjE0OwlhdXRob3IgdGVzdGVyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisxLjIuMi4xCitkYXRlCTIwMDkuMDMuMTEuMTkuMDMuNTI7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjIuMi4yOworCisxLjIuMi4yCitkYXRlCTIwMDkuMDMuMTEuMTkuMDkuMTA7CWF1dGhvciB0ZXN0ZXI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAk7CisKKworZGVzYworQEAKKworCisxLjMKK2xvZworQFJldiA0CitACit0ZXh0CitAMS4zCitACisKKworMS4yCitsb2cKK0BSZXYgMworQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMgorQAorCisKKzEuMi4yLjEKK2xvZworQFJldiA0IEJyYW5jaCBBCitACit0ZXh0CitAZDEgMQorYTEgMQorMS4yLjIuMQorQAorCisKKzEuMi4yLjIKK2xvZworQFJldiA1IEJyYW5jaCBBCitACit0ZXh0CitAZDEgMQorYTEgMQorMS4yCitACisKKworMS4xCitsb2cKK0BSZXYgMgorQAordGV4dAorQGQxIDEKK2ExIDEKKzEuMQorQApkaWZmIC0tZ2l0IGEvdC90OTYwNC1jdnNpbXBvcnQtdGltZXN0YW1wcy5zaCBiL3QvdDk2MDQtY3ZzaW1wb3J0LXRpbWVzdGFtcHMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTRiM2RiMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDQtY3ZzaW1wb3J0LXRpbWVzdGFtcHMuc2gKQEAgLTAsMCArMSw3MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBjdnNpbXBvcnQgdGltZXN0YW1wcycKKy4gLi9saWItY3ZzLnNoCisKK3NldHVwX2N2c190ZXN0X3JlcG9zaXRvcnkgdDk2MDQKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBQRVJMICdjaGVjayB0aW1lc3RhbXBzIGFyZSBVVEMgKFRaPUNTVDZDRFQpJyAnCisKKwlUWj1DU1Q2Q0RUIGdpdCBjdnNpbXBvcnQgLXAiLXgiIC1DIG1vZHVsZS0xIG1vZHVsZSAmJgorCWdpdCBjdnNpbXBvcnQgLXAiLXgiIC1DIG1vZHVsZS0xIG1vZHVsZSAmJgorCSgKKwkJY2QgbW9kdWxlLTEgJiYKKwkJZ2l0IGxvZyAtLWZvcm1hdD0iJXMgJWFpIgorCSkgPmFjdHVhbC0xICYmCisJY2F0ID5leHBlY3QtMSA8PC1FT0YgJiYKKwlSZXYgMTYgMjAwNi0xMC0yOSAwNzowMDowMSArMDAwMAorCVJldiAxNSAyMDA2LTEwLTI5IDA2OjU5OjU5ICswMDAwCisJUmV2IDE0IDIwMDYtMDQtMDIgMDg6MDA6MDEgKzAwMDAKKwlSZXYgMTMgMjAwNi0wNC0wMiAwNzo1OTo1OSArMDAwMAorCVJldiAxMiAyMDA1LTEyLTAxIDAwOjAwOjAwICswMDAwCisJUmV2IDExIDIwMDUtMTEtMDEgMDA6MDA6MDAgKzAwMDAKKwlSZXYgMTAgMjAwNS0xMC0wMSAwMDowMDowMCArMDAwMAorCVJldiAgOSAyMDA1LTA5LTAxIDAwOjAwOjAwICswMDAwCisJUmV2ICA4IDIwMDUtMDgtMDEgMDA6MDA6MDAgKzAwMDAKKwlSZXYgIDcgMjAwNS0wNy0wMSAwMDowMDowMCArMDAwMAorCVJldiAgNiAyMDA1LTA2LTAxIDAwOjAwOjAwICswMDAwCisJUmV2ICA1IDIwMDUtMDUtMDEgMDA6MDA6MDAgKzAwMDAKKwlSZXYgIDQgMjAwNS0wNC0wMSAwMDowMDowMCArMDAwMAorCVJldiAgMyAyMDA1LTAzLTAxIDAwOjAwOjAwICswMDAwCisJUmV2ICAyIDIwMDUtMDItMDEgMDA6MDA6MDAgKzAwMDAKKwlSZXYgIDEgMjAwNS0wMS0wMSAwMDowMDowMCArMDAwMAorCUVPRgorCXRlc3RfY21wIGFjdHVhbC0xIGV4cGVjdC0xCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgUEVSTCAnY2hlY2sgdGltZXN0YW1wcyB3aXRoIGF1dGhvci1zcGVjaWZpYyB0aW1lem9uZXMnICcKKworCWNhdCA+Y3ZzLWF1dGhvcnMgPDwtRU9GICYmCisJdXNlcjE9VXNlciBPbmUgPHVzZXIxQGRvbWFpbi5vcmc+CisJdXNlcjI9VXNlciBUd28gPHVzZXIyQGRvbWFpbi5vcmc+IENTVDZDRFQKKwl1c2VyMz1Vc2VyIFRocmVlIDx1c2VyM0Bkb21haW4ub3JnPiBFU1Q1RURUCisJdXNlcjQ9VXNlciBGb3VyIDx1c2VyNEBkb21haW4ub3JnPiBNU1Q3TURUCisJRU9GCisJZ2l0IGN2c2ltcG9ydCAtcCIteCIgLUEgY3ZzLWF1dGhvcnMgLUMgbW9kdWxlLTIgbW9kdWxlICYmCisJKAorCQljZCBtb2R1bGUtMiAmJgorCQlnaXQgbG9nIC0tZm9ybWF0PSIlcyAlYWkgJWFuIgorCSkgPmFjdHVhbC0yICYmCisJY2F0ID5leHBlY3QtMiA8PC1FT0YgJiYKKwlSZXYgMTYgMjAwNi0xMC0yOSAwMTowMDowMSAtMDYwMCBVc2VyIFR3bworCVJldiAxNSAyMDA2LTEwLTI5IDAxOjU5OjU5IC0wNTAwIFVzZXIgVHdvCisJUmV2IDE0IDIwMDYtMDQtMDIgMDM6MDA6MDEgLTA1MDAgVXNlciBUd28KKwlSZXYgMTMgMjAwNi0wNC0wMiAwMTo1OTo1OSAtMDYwMCBVc2VyIFR3bworCVJldiAxMiAyMDA1LTExLTMwIDE3OjAwOjAwIC0wNzAwIFVzZXIgRm91cgorCVJldiAxMSAyMDA1LTEwLTMxIDE5OjAwOjAwIC0wNTAwIFVzZXIgVGhyZWUKKwlSZXYgMTAgMjAwNS0wOS0zMCAxOTowMDowMCAtMDUwMCBVc2VyIFR3bworCVJldiAgOSAyMDA1LTA5LTAxIDAwOjAwOjAwICswMDAwIFVzZXIgT25lCisJUmV2ICA4IDIwMDUtMDctMzEgMTg6MDA6MDAgLTA2MDAgVXNlciBGb3VyCisJUmV2ICA3IDIwMDUtMDYtMzAgMjA6MDA6MDAgLTA0MDAgVXNlciBUaHJlZQorCVJldiAgNiAyMDA1LTA1LTMxIDE5OjAwOjAwIC0wNTAwIFVzZXIgVHdvCisJUmV2ICA1IDIwMDUtMDUtMDEgMDA6MDA6MDAgKzAwMDAgVXNlciBPbmUKKwlSZXYgIDQgMjAwNS0wMy0zMSAxNzowMDowMCAtMDcwMCBVc2VyIEZvdXIKKwlSZXYgIDMgMjAwNS0wMi0yOCAxOTowMDowMCAtMDUwMCBVc2VyIFRocmVlCisJUmV2ICAyIDIwMDUtMDEtMzEgMTg6MDA6MDAgLTA2MDAgVXNlciBUd28KKwlSZXYgIDEgMjAwNS0wMS0wMSAwMDowMDowMCArMDAwMCBVc2VyIE9uZQorCUVPRgorCXRlc3RfY21wIGFjdHVhbC0yIGV4cGVjdC0yCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTYwNC9jdnNyb290Ly5naXRhdHRyaWJ1dGVzIGIvdC90OTYwNC9jdnNyb290Ly5naXRhdHRyaWJ1dGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmIxMmUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NjA0L2N2c3Jvb3QvLmdpdGF0dHJpYnV0ZXMKQEAgLTAsMCArMSBAQAorKiAtd2hpdGVzcGFjZQpkaWZmIC0tZ2l0IGEvdC90OTYwNC9jdnNyb290L0NWU1JPT1QvLmdpdGlnbm9yZSBiL3QvdDk2MDQvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiOWIzNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk2MDQvY3Zzcm9vdC9DVlNST09ULy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitoaXN0b3J5Cit2YWwtdGFncwpkaWZmIC0tZ2l0IGEvdC90OTYwNC9jdnNyb290L21vZHVsZS9hLHYgYi90L3Q5NjA0L2N2c3Jvb3QvbW9kdWxlL2EsdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDY1OGMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTYwNC9jdnNyb290L21vZHVsZS9hLHYKQEAgLTAsMCArMSwyNjQgQEAKK2hlYWQJMS4xNjsKK2FjY2VzczsKK3N5bWJvbHM7Citsb2Nrczsgc3RyaWN0OworY29tbWVudAlAIyBAOworCisKKzEuMTYKK2RhdGUJMjAwNi4xMC4yOS4wNy4wMC4wMTsJYXV0aG9yIHVzZXIyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xNTsKKworMS4xNQorZGF0ZQkyMDA2LjEwLjI5LjA2LjU5LjU5OwlhdXRob3IgdXNlcjI7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjE0OworCisxLjE0CitkYXRlCTIwMDYuMDQuMDIuMDguMDAuMDE7CWF1dGhvciB1c2VyMjsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTM7CisKKzEuMTMKK2RhdGUJMjAwNi4wNC4wMi4wNy41OS41OTsJYXV0aG9yIHVzZXIyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xMjsKKworMS4xMgorZGF0ZQkyMDA1LjEyLjAxLjAwLjAwLjAwOwlhdXRob3IgdXNlcjQ7CXN0YXRlIEV4cDsKK2JyYW5jaGVzOworbmV4dAkxLjExOworCisxLjExCitkYXRlCTIwMDUuMTEuMDEuMDAuMDAuMDA7CWF1dGhvciB1c2VyMzsJc3RhdGUgRXhwOworYnJhbmNoZXM7CituZXh0CTEuMTA7CisKKzEuMTAKK2RhdGUJMjAwNS4xMC4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXIyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS45OworCisxLjkKK2RhdGUJMjAwNS4wOS4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXIxOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS44OworCisxLjgKK2RhdGUJMjAwNS4wOC4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXI0OwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS43OworCisxLjcKK2RhdGUJMjAwNS4wNy4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXIzOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS42OworCisxLjYKK2RhdGUJMjAwNS4wNi4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXIyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS41OworCisxLjUKK2RhdGUJMjAwNS4wNS4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXIxOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS40OworCisxLjQKK2RhdGUJMjAwNS4wNC4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXI0OwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4zOworCisxLjMKK2RhdGUJMjAwNS4wMy4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXIzOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4yOworCisxLjIKK2RhdGUJMjAwNS4wMi4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXIyOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJMS4xOworCisxLjEKK2RhdGUJMjAwNS4wMS4wMS4wMC4wMC4wMDsJYXV0aG9yIHVzZXIxOwlzdGF0ZSBFeHA7CiticmFuY2hlczsKK25leHQJOworCisKK2Rlc2MKK0BACisKKworMS4xNgorbG9nCitAUmV2IDE2CitACit0ZXh0CitAUmV2IDE2CitACisKKworMS4xNQorbG9nCitAUmV2IDE1CitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDE1CitACisKKworMS4xNAorbG9nCitAUmV2IDE0CitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDE0CitACisKKworMS4xMworbG9nCitAUmV2IDEzCitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDEzCitACisKKworMS4xMgorbG9nCitAUmV2IDEyCitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDEyCitACisKKworMS4xMQorbG9nCitAUmV2IDExCitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDExCitACisKKworMS4xMAorbG9nCitAUmV2IDEwCitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDEwCitACisKKworMS45Citsb2cKK0BSZXYgIDkKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgOQorQAorCisKKzEuOAorbG9nCitAUmV2ICA4CitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDgKK0AKKworCisxLjcKK2xvZworQFJldiAgNworQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiA3CitACisKKworMS42Citsb2cKK0BSZXYgIDYKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgNgorQAorCisKKzEuNQorbG9nCitAUmV2ICA1CitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDUKK0AKKworCisxLjQKK2xvZworQFJldiAgNAorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiA0CitACisKKworMS4zCitsb2cKK0BSZXYgIDMKK0AKK3RleHQKK0BkMSAxCithMSAxCitSZXYgMworQAorCisKKzEuMgorbG9nCitAUmV2ICAyCitACit0ZXh0CitAZDEgMQorYTEgMQorUmV2IDIKK0AKKworCisxLjEKK2xvZworQFJldiAgMQorQAordGV4dAorQGQxIDEKK2ExIDEKK1JldiAxCitACmRpZmYgLS1naXQgYS90L3Q5NzAwLXBlcmwtZ2l0LnNoIGIvdC90OTcwMC1wZXJsLWdpdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMDJjMTMzCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTcwMC1wZXJsLWdpdC5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA4IExlYSBXaWVtYW5uCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3BlcmwgaW50ZXJmYWNlIChHaXQucG0pJworLiAuL3Rlc3QtbGliLnNoCisKK2lmICEgdGVzdF9oYXZlX3ByZXJlcSBQRVJMOyB0aGVuCisJc2tpcF9hbGw9J3NraXBwaW5nIHBlcmwgaW50ZXJmYWNlIHRlc3RzLCBwZXJsIG5vdCBhdmFpbGFibGUnCisJdGVzdF9kb25lCitmaQorCitwZXJsIC1NVGVzdDo6TW9yZSAtZSAwIDI+L2Rldi9udWxsIHx8IHsKKwlza2lwX2FsbD0iUGVybCBUZXN0OjpNb3JlIHVuYXZhaWxhYmxlLCBza2lwcGluZyB0ZXN0IgorCXRlc3RfZG9uZQorfQorCisjIHNldCB1cCB0ZXN0IHJlcG9zaXRvcnkKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBcCisgICAgJ3NldCB1cCB0ZXN0IHJlcG9zaXRvcnknIFwKKyAgICAnZWNobyAidGVzdCBmaWxlIDEiID4gZmlsZTEgJiYKKyAgICAgZWNobyAidGVzdCBmaWxlIDIiID4gZmlsZTIgJiYKKyAgICAgbWtkaXIgZGlyZWN0b3J5MSAmJgorICAgICBlY2hvICJpbiBkaXJlY3RvcnkxIiA+PiBkaXJlY3RvcnkxL2ZpbGUgJiYKKyAgICAgbWtkaXIgZGlyZWN0b3J5MiAmJgorICAgICBlY2hvICJpbiBkaXJlY3RvcnkyIiA+PiBkaXJlY3RvcnkyL2ZpbGUgJiYKKyAgICAgZ2l0IGFkZCAuICYmCisgICAgIGdpdCBjb21taXQgLW0gImZpcnN0IGNvbW1pdCIgJiYKKworICAgICBlY2hvICJuZXcgZmlsZSBpbiBzdWJkaXIgMiIgPiBkaXJlY3RvcnkyL2ZpbGUyICYmCisgICAgIGdpdCBhZGQgLiAmJgorICAgICBnaXQgY29tbWl0IC1tICJjb21taXQgaW4gZGlyZWN0b3J5MiIgJiYKKworICAgICBlY2hvICJjaGFuZ2VkIGZpbGUgMSIgPiBmaWxlMSAmJgorICAgICBnaXQgY29tbWl0IC1hIC1tICJzZWNvbmQgY29tbWl0IiAmJgorCisgICAgIGdpdCBjb25maWcgLS1hZGQgY29sb3IudGVzdC5zbG90MSBncmVlbiAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3Quc3RyaW5nIHZhbHVlICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5kdXBzdHJpbmcgdmFsdWUxICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5kdXBzdHJpbmcgdmFsdWUyICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5ib29sdHJ1ZSB0cnVlICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5ib29sZmFsc2Ugbm8gJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LmJvb2xvdGhlciBvdGhlciAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QuaW50IDJrICYmCisgICAgIGdpdCBjb25maWcgLS1hZGQgdGVzdC5wYXRoICJ+L2ZvbyIgJiYKKyAgICAgZ2l0IGNvbmZpZyAtLWFkZCB0ZXN0LnBhdGhleHBhbmRlZCAiJEhPTUUvZm9vIiAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QucGF0aG11bHRpIGZvbyAmJgorICAgICBnaXQgY29uZmlnIC0tYWRkIHRlc3QucGF0aG11bHRpIGJhcgorICAgICAnCisKKyMgVGhlIGV4dGVybmFsIHRlc3Qgd2lsbCBvdXRwdXRzIGl0cyBvd24gcGxhbgordGVzdF9leHRlcm5hbF9oYXNfdGFwPTEKKwordGVzdF9leHRlcm5hbF93aXRob3V0X3N0ZGVyciBcCisgICAgJ1BlcmwgQVBJJyBcCisgICAgcGVybCAiJFRFU1RfRElSRUNUT1JZIi90OTcwMC90ZXN0LnBsCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTcwMC90ZXN0LnBsIGIvdC90OTcwMC90ZXN0LnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjExNDA3NjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5NzAwL3Rlc3QucGwKQEAgLTAsMCArMSwxMzMgQEAKKyMhL3Vzci9iaW4vcGVybAordXNlIGxpYiAoc3BsaXQoLzovLCAkRU5We0dJVFBFUkxMSUJ9KSk7CisKK3VzZSA1LjAwODsKK3VzZSB3YXJuaW5nczsKK3VzZSBzdHJpY3Q7CisKK3VzZSBUZXN0OjpNb3JlIHF3KG5vX3BsYW4pOworCitCRUdJTiB7CisJIyB0OTcwMC1wZXJsLWdpdC5zaCBraWNrcyBvZmYgb3VyIHRlc3RpbmcsIHNvIHdlIGhhdmUgdG8gZ28gZnJvbQorCSMgdGhlcmUuCisJVGVzdDo6TW9yZS0+YnVpbGRlci0+Y3VycmVudF90ZXN0KDEpOworCVRlc3Q6Ok1vcmUtPmJ1aWxkZXItPm5vX2VuZGluZygxKTsKK30KKwordXNlIEN3ZDsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKworQkVHSU4geyB1c2Vfb2soJ0dpdCcpIH0KKworIyBzZXQgdXAKK291ciAkYWJzX3JlcG9fZGlyID0gY3dkKCk7CitvayhvdXIgJHIgPSBHaXQtPnJlcG9zaXRvcnkoRGlyZWN0b3J5ID0+ICIuIiksICJvcGVuIHJlcG9zaXRvcnkiKTsKKworIyBjb25maWcKK2lzKCRyLT5jb25maWcoInRlc3Quc3RyaW5nIiksICJ2YWx1ZSIsICJjb25maWcgc2NhbGFyOiBzdHJpbmciKTsKK2lzX2RlZXBseShbJHItPmNvbmZpZygidGVzdC5kdXBzdHJpbmciKV0sIFsidmFsdWUxIiwgInZhbHVlMiJdLAorCSAgImNvbmZpZyBhcnJheTogc3RyaW5nIik7Citpcygkci0+Y29uZmlnKCJ0ZXN0Lm5vbmV4aXN0ZW50IiksIHVuZGVmLCAiY29uZmlnIHNjYWxhcjogbm9uZXhpc3RlbnQiKTsKK2lzX2RlZXBseShbJHItPmNvbmZpZygidGVzdC5ub25leGlzdGVudCIpXSwgW10sICJjb25maWcgYXJyYXk6IG5vbmV4aXN0ZW50Iik7Citpcygkci0+Y29uZmlnX2ludCgidGVzdC5pbnQiKSwgMjA0OCwgImNvbmZpZ19pbnQ6IGludGVnZXIiKTsKK2lzKCRyLT5jb25maWdfaW50KCJ0ZXN0Lm5vbmV4aXN0ZW50IiksIHVuZGVmLCAiY29uZmlnX2ludDogbm9uZXhpc3RlbnQiKTsKK29rKCRyLT5jb25maWdfYm9vbCgidGVzdC5ib29sdHJ1ZSIpLCAiY29uZmlnX2Jvb2w6IHRydWUiKTsKK29rKCEkci0+Y29uZmlnX2Jvb2woInRlc3QuYm9vbGZhbHNlIiksICJjb25maWdfYm9vbDogZmFsc2UiKTsKK2lzKCRyLT5jb25maWdfcGF0aCgidGVzdC5wYXRoIiksICRyLT5jb25maWcoInRlc3QucGF0aGV4cGFuZGVkIiksCisgICAiY29uZmlnX3BhdGg6IH4vZm9vIGV4cGFuc2lvbiIpOworaXNfZGVlcGx5KFskci0+Y29uZmlnX3BhdGgoInRlc3QucGF0aG11bHRpIildLCBbImZvbyIsICJiYXIiXSwKKyAgICJjb25maWdfcGF0aDogbXVsdGlwbGUgdmFsdWVzIik7CitvdXIgJGFuc2lfZ3JlZW4gPSAiXHgxYlszMm0iOworaXMoJHItPmdldF9jb2xvcigiY29sb3IudGVzdC5zbG90MSIsICJyZWQiKSwgJGFuc2lfZ3JlZW4sICJnZXRfY29sb3IiKTsKKyMgQ2Fubm90IHRlc3QgJHItPmdldF9jb2xvcmJvb2woImNvbG9yLmZvbyIpKSBiZWNhdXNlIHdlIGRvIG5vdAorIyBjb250cm9sIHdoZXRoZXIgb3VyIFNURE9VVCBpcyBhIHRlcm1pbmFsLgorCisjIEZhaWx1cmUgY2FzZXMgZm9yIGNvbmZpZzoKKyMgU2F2ZSBhbmQgcmVzdG9yZSBTVERFUlI7IHdlIHdpbGwgcHJvYmFibHkgZXh0cmFjdCB0aGlzIGludG8gYQorIyAiZGllc19vayIgbWV0aG9kIGFuZCBwb3NzaWJseSBtb3ZlIHRoZSBTVERFUlIgaGFuZGxpbmcgdG8gR2l0LnBtLgorb3BlbiBvdXIgJHRtcHN0ZGVyciwgIj4mU1RERVJSIiBvciBkaWUgImNhbm5vdCBzYXZlIFNUREVSUiI7CitvcGVuIFNUREVSUiwgIj4iLCAiL2Rldi9udWxsIiBvciBkaWUgImNhbm5vdCByZWRpcmVjdCBTVERFUlIgdG8gL2Rldi9udWxsIjsKK2lzKCRyLT5jb25maWcoInRlc3QuZHVwc3RyaW5nIiksICJ2YWx1ZTIiLCAiY29uZmlnOiBtdWx0aXZhciIpOworZXZhbCB7ICRyLT5jb25maWdfYm9vbCgidGVzdC5ib29sb3RoZXIiKSB9Oworb2soJEAsICJjb25maWdfYm9vbDogbm9uLWJvb2xlYW4gdmFsdWVzIGZhaWwiKTsKK29wZW4gU1RERVJSLCAiPiYiLCAkdG1wc3RkZXJyIG9yIGRpZSAiY2Fubm90IHJlc3RvcmUgU1RERVJSIjsKKworIyBpZGVudAorbGlrZSgkci0+aWRlbnQoImFVdGhvciIpLCBxci9eQSBVIFRob3IgPGF1dGhvclxAZXhhbXBsZS5jb20+IFswLTldKyBcKzAwMDAkLywKKyAgICAgImlkZW50IHNjYWxhcjogYXV0aG9yICh0eXBlKSIpOworbGlrZSgkci0+aWRlbnQoImNPbW1pdHRlciIpLCBxci9eQyBPIE1pdHRlciA8Y29tbWl0dGVyXEBleGFtcGxlLmNvbT4gWzAtOV0rIFwrMDAwMCQvLAorICAgICAiaWRlbnQgc2NhbGFyOiBjb21taXR0ZXIgKHR5cGUpIik7Citpcygkci0+aWRlbnQoImludmFsaWQiKSwgImludmFsaWQiLCAiaWRlbnQgc2NhbGFyOiBpbnZhbGlkIGlkZW50IHN0cmluZyAobm8gcGFyc2luZykiKTsKK215ICgkbmFtZSwgJGVtYWlsLCAkdGltZV90eikgPSAkci0+aWRlbnQoJ2F1dGhvcicpOworaXNfZGVlcGx5KFskbmFtZSwgJGVtYWlsXSwgWyJBIFUgVGhvciIsICJhdXRob3JcQGV4YW1wbGUuY29tIl0sCisJICJpZGVudCBhcnJheTogYXV0aG9yIik7CitsaWtlKCR0aW1lX3R6LCBxci9bMC05XSsgXCswMDAwLywgImlkZW50IGFycmF5OiBhdXRob3IiKTsKK2lzX2RlZXBseShbJHItPmlkZW50KCJOYW1lIDxlbWFpbD4gMTIzICswMDAwIildLCBbIk5hbWUiLCAiZW1haWwiLCAiMTIzICswMDAwIl0sCisJICAiaWRlbnQgYXJyYXk6IGlkZW50IHN0cmluZyIpOworaXNfZGVlcGx5KFskci0+aWRlbnQoImludmFsaWQiKV0sIFtdLCAiaWRlbnQgYXJyYXk6IGludmFsaWQgaWRlbnQgc3RyaW5nIik7CisKKyMgaWRlbnRfcGVyc29uCitpcygkci0+aWRlbnRfcGVyc29uKCJhVXRob3IiKSwgIkEgVSBUaG9yIDxhdXRob3JcQGV4YW1wbGUuY29tPiIsCisgICAiaWRlbnRfcGVyc29uOiBhdXRob3IgKHR5cGUpIik7Citpcygkci0+aWRlbnRfcGVyc29uKCJOYW1lIDxlbWFpbD4gMTIzICswMDAwIiksICJOYW1lIDxlbWFpbD4iLAorICAgImlkZW50X3BlcnNvbjogaWRlbnQgc3RyaW5nIik7Citpcygkci0+aWRlbnRfcGVyc29uKCJOYW1lIiwgImVtYWlsIiwgIjEyMyArMDAwMCIpLCAiTmFtZSA8ZW1haWw+IiwKKyAgICJpZGVudF9wZXJzb246IGFycmF5Iik7CisKKyMgb2JqZWN0cyBhbmQgaGFzaGVzCitvayhvdXIgJGZpbGUxaGFzaCA9ICRyLT5jb21tYW5kX29uZWxpbmUoJ3Jldi1wYXJzZScsICJIRUFEOmZpbGUxIiksICIoZ2V0IGZpbGUgaGFzaCkiKTsKK215ICR0bXBmaWxlID0gImZpbGUudG1wIjsKK29wZW4gVEVNUEZJTEUsICIrPiR0bXBmaWxlIiBvciBkaWUgIkNhbid0IG9wZW4gJHRtcGZpbGU6ICQhIjsKK2lzKCRyLT5jYXRfYmxvYigkZmlsZTFoYXNoLCBcKlRFTVBGSUxFKSwgMTUsICJjYXRfYmxvYjogc2l6ZSIpOworb3VyICRibG9iY29udGVudHM7Cit7IGxvY2FsICQvOyBzZWVrIFRFTVBGSUxFLCAwLCAwOyAkYmxvYmNvbnRlbnRzID0gPFRFTVBGSUxFPjsgfQoraXMoJGJsb2Jjb250ZW50cywgImNoYW5nZWQgZmlsZSAxXG4iLCAiY2F0X2Jsb2I6IGRhdGEiKTsKK2Nsb3NlIFRFTVBGSUxFIG9yIGRpZSAiRmFpbGVkIHdyaXRpbmcgdG8gJHRtcGZpbGU6ICQhIjsKK2lzKEdpdDo6aGFzaF9vYmplY3QoImJsb2IiLCAkdG1wZmlsZSksICRmaWxlMWhhc2gsICJoYXNoX29iamVjdDogcm91bmR0cmlwIik7CitvcGVuIFRFTVBGSUxFLCAiPiR0bXBmaWxlIiBvciBkaWUgIkNhbid0IG9wZW4gJHRtcGZpbGU6ICQhIjsKK3ByaW50IFRFTVBGSUxFIG15ICR0ZXN0X3RleHQgPSAidGVzdCBibG9iLCB0byBiZSBpbnNlcnRlZFxuIjsKK2Nsb3NlIFRFTVBGSUxFIG9yIGRpZSAiRmFpbGVkIHdyaXRpbmcgdG8gJHRtcGZpbGU6ICQhIjsKK2xpa2Uob3VyICRuZXdoYXNoID0gJHItPmhhc2hfYW5kX2luc2VydF9vYmplY3QoJHRtcGZpbGUpLCBxci9bMC05YS1mQS1GXXs0MH0vLAorICAgICAiaGFzaF9hbmRfaW5zZXJ0X29iamVjdDogcmV0dXJucyBoYXNoIik7CitvcGVuIFRFTVBGSUxFLCAiKz4kdG1wZmlsZSIgb3IgZGllICJDYW4ndCBvcGVuICR0bXBmaWxlOiAkISI7Citpcygkci0+Y2F0X2Jsb2IoJG5ld2hhc2gsIFwqVEVNUEZJTEUpLCBsZW5ndGggJHRlc3RfdGV4dCwgImNhdF9ibG9iOiByb3VuZHRyaXAgc2l6ZSIpOworeyBsb2NhbCAkLzsgc2VlayBURU1QRklMRSwgMCwgMDsgJGJsb2Jjb250ZW50cyA9IDxURU1QRklMRT47IH0KK2lzKCRibG9iY29udGVudHMsICR0ZXN0X3RleHQsICJjYXRfYmxvYjogcm91bmR0cmlwIGRhdGEiKTsKK2Nsb3NlIFRFTVBGSUxFOwordW5saW5rICR0bXBmaWxlOworCisjIHBhdGhzCitpcygkci0+cmVwb19wYXRoLCAkYWJzX3JlcG9fZGlyIC4gIi8uZ2l0IiwgInJlcG9fcGF0aCIpOworaXMoJHItPndjX3BhdGgsICRhYnNfcmVwb19kaXIgLiAiLyIsICJ3Y19wYXRoIik7Citpcygkci0+d2Nfc3ViZGlyLCAiIiwgIndjX3N1YmRpciBpbml0aWFsIik7Ciskci0+d2NfY2hkaXIoImRpcmVjdG9yeTEiKTsKK2lzKCRyLT53Y19zdWJkaXIsICJkaXJlY3RvcnkxIiwgIndjX3N1YmRpciBhZnRlciB3Y19jaGRpciIpOworaXMoJHItPmNvbmZpZygidGVzdC5zdHJpbmciKSwgInZhbHVlIiwgImNvbmZpZyBhZnRlciB3Y19jaGRpciIpOworCisjIE9iamVjdCBnZW5lcmF0aW9uIGluIHN1YiBkaXJlY3RvcnkKK2NoZGlyKCJkaXJlY3RvcnkyIik7CitteSAkcjIgPSBHaXQtPnJlcG9zaXRvcnkoKTsKK2lzKCRyMi0+cmVwb19wYXRoLCAkYWJzX3JlcG9fZGlyIC4gIi8uZ2l0IiwgInJlcG9fcGF0aCAoMikiKTsKK2lzKCRyMi0+d2NfcGF0aCwgJGFic19yZXBvX2RpciAuICIvIiwgIndjX3BhdGggKDIpIik7CitpcygkcjItPndjX3N1YmRpciwgImRpcmVjdG9yeTIvIiwgIndjX3N1YmRpciBpbml0aWFsICgyKSIpOworCisjIGNvbW1hbmRzIGluIHN1YiBkaXJlY3RvcnkKK215ICRsYXN0X2NvbW1pdCA9ICRyMi0+Y29tbWFuZF9vbmVsaW5lKHF3KHJldi1wYXJzZSAtLXZlcmlmeSBIRUFEKSk7CitsaWtlKCRsYXN0X2NvbW1pdCwgcXIvXlswLTlhLWZBLUZdezQwfSQvLCAncmV2LXBhcnNlIHJldHVybmVkIGhhc2gnKTsKK215ICRkaXJfY29tbWl0ID0gJHIyLT5jb21tYW5kX29uZWxpbmUoJ2xvZycsICctbjEnLCAnLS1wcmV0dHk9Zm9ybWF0OiVIJywgJy4nKTsKK2lzbnQoJGxhc3RfY29tbWl0LCAkZGlyX2NvbW1pdCwgJ2xvZyAuIGRvZXMgbm90IHNob3cgbGFzdCBjb21taXQnKTsKKworIyBjb21tYW5kcyBvdXRzaWRlIHdvcmtpbmcgdHJlZQorY2hkaXIoJGFic19yZXBvX2RpciAuICcvLi4nKTsKK215ICRyMyA9IEdpdC0+cmVwb3NpdG9yeShEaXJlY3RvcnkgPT4gJGFic19yZXBvX2Rpcik7CitteSAkdG1wZmlsZTMgPSAiJGFic19yZXBvX2Rpci9maWxlMy50bXAiOworb3BlbiBURU1QRklMRTMsICIrPiR0bXBmaWxlMyIgb3IgZGllICJDYW4ndCBvcGVuICR0bXBmaWxlMzogJCEiOworaXMoJHIzLT5jYXRfYmxvYigkZmlsZTFoYXNoLCBcKlRFTVBGSUxFMyksIDE1LCAiY2F0X2Jsb2Iob3V0c2lkZSk6IHNpemUiKTsKK2Nsb3NlIFRFTVBGSUxFMzsKK3VubGluayAkdG1wZmlsZTM7CitjaGRpcigkYWJzX3JlcG9fZGlyKTsKKworcHJpbnRmICIxLi4lZFxuIiwgVGVzdDo6TW9yZS0+YnVpbGRlci0+Y3VycmVudF90ZXN0OworCitteSAkaXNfcGFzc2luZyA9IGV2YWwgeyBUZXN0OjpNb3JlLT5pc19wYXNzaW5nIH07CitleGl0KCRpc19wYXNzaW5nID8gMCA6IDEpIHVubGVzcyAkQCA9fiAvQ2FuJ3QgbG9jYXRlIG9iamVjdCBtZXRob2QvOwpkaWZmIC0tZ2l0IGEvdC90OTgwMC1naXQtcDQtYmFzaWMuc2ggYi90L3Q5ODAwLWdpdC1wNC1iYXNpYy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MGQ0MWVkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwMC1naXQtcDQtYmFzaWMuc2gKQEAgLTAsMCArMSwyNDggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgdGVzdHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdhZGQgcDQgZmlsZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlMSIgJiYKKwkJZWNobyBmaWxlMiA+ZmlsZTIgJiYKKwkJcDQgYWRkIGZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZTIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBnaXQgcDQgY2xvbmUnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgbGluZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RlcG90IHR5cG8gZXJyb3InICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvZGVwb3QgMj5lcnJzICYmCisJZ3JlcCAiRGVwb3QgcGF0aHMgbXVzdCBzdGFydCB3aXRoIiBlcnJzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBjbG9uZSBAYWxsJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2l0IHA0IHN5bmMgdW5pbml0aWFsaXplZCByZXBvJyAnCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3luYyAyPmVycnMgJiYKKwkJdGVzdF9pMThuZ3JlcCAiUGVyaGFwcyB5b3UgbmV2ZXIgZGlkIiBlcnJzCisJKQorJworCisjCisjIENyZWF0ZSBhIGdpdCByZXBvIGJ5IGhhbmQuICBBZGQgYSBjb21taXQgc28gdGhhdCBIRUFEIGlzIHZhbGlkLgorIyBUZXN0IGltcG9ydHMgYSBuZXcgcDQgcmVwb3NpdG9yeSBpbnRvIGEgbmV3IGdpdCBicmFuY2guCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgc3luYyBuZXcgYnJhbmNoJyAnCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCBoZWFkICYmCisJCWdpdCBwNCBzeW5jIC0tYnJhbmNoPXJlZnMvcmVtb3Rlcy9wNC9kZXBvdCAvL2RlcG90QGFsbCAmJgorCQlnaXQgbG9nIC0tb25lbGluZSBwNC9kZXBvdCA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdHdvIGRpcnMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciBzdWIxIHN1YjIgJiYKKwkJZWNobyBzdWIxL2YxID5zdWIxL2YxICYmCisJCWVjaG8gc3ViMi9mMiA+c3ViMi9mMiAmJgorCQlwNCBhZGQgc3ViMS9mMSAmJgorCQlwNCBzdWJtaXQgLWQgInN1YjEvZjEiICYmCisJCXA0IGFkZCBzdWIyL2YyICYmCisJCXA0IHN1Ym1pdCAtZCAic3ViMi9mMiIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9zdWIxIC8vZGVwb3Qvc3ViMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBscy1maWxlcyA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcyAmJgorCQlnaXQgbG9nIC0tb25lbGluZSBwNC9tYXN0ZXIgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDEgbGluZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHR3byBkaXJzLCBAYWxsJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBzdWIxL2YzID5zdWIxL2YzICYmCisJCXA0IGFkZCBzdWIxL2YzICYmCisJCXA0IHN1Ym1pdCAtZCAic3ViMS9mMyIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9zdWIxQGFsbCAvL2RlcG90L3N1YjJAYWxsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxzLWZpbGVzID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHA0L21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyBsaW5lcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgdHdvIGRpcnMsIEBhbGwsIGNvbmZsaWN0aW5nIGZpbGVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBzdWIyL2YzID5zdWIyL2YzICYmCisJCXA0IGFkZCBzdWIyL2YzICYmCisJCXA0IHN1Ym1pdCAtZCAic3ViMi9mMyIKKwkpICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9zdWIxQGFsbCAvL2RlcG90L3N1YjJAYWxsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxzLWZpbGVzID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHA0L21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCBsaW5lcyAmJgorCQllY2hvIHN1YjIvZjMgPmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGYzCisJKQorJworCityZXZpc2lvbl9yYW5nZXM9IjIwMDAvMDEvMDEsI2hlYWQgXAorCQkgMSwyMDgwLzAxLzAxIFwKKwkJIDIwMDAvMDEvMDEsMjA4MC8wMS8wMSBcCisJCSAyMDAwLzAxLzAxLDEwMDAgXAorCQkgMSwxMDAwIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSB1c2luZyBub24tbnVtZXJpYyByZXZpc2lvbiByYW5nZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlmb3IgciBpbiAkcmV2aXNpb25fcmFuZ2VzCisJZG8KKwkJcm0gLWZyICIkZ2l0IiAmJgorCQl0ZXN0ICEgLWQgIiRnaXQiICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAJHIgJiYKKwkJKAorCQkJY2QgIiRnaXQiICYmCisJCQlnaXQgbHMtZmlsZXMgPmxpbmVzICYmCisJCQl0ZXN0X2xpbmVfY291bnQgPSA2IGxpbmVzCisJCSkKKwlkb25lCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIHdpdGggZGF0ZSByYW5nZSwgZXhjbHVkaW5nIHNvbWUgY2hhbmdlcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWJlZm9yZT0kKGRhdGUgKyVZLyVtLyVkOiVIOiVNOiVTKSAmJgorCXNsZWVwIDIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQk6PmRhdGVfcmFuZ2VfdGVzdCAmJgorCQlwNCBhZGQgZGF0ZV9yYW5nZV90ZXN0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkaW5nIGZpbGUiCisJKSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAMSwkYmVmb3JlICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGF0ZV9yYW5nZV90ZXN0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGl0IHdoZW4gcDQgZmFpbHMgdG8gcHJvZHVjZSBtYXJzaGFsZWQgb3V0cHV0JyAnCisJbWtkaXIgYmFkcDRkaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIGJhZHA0ZGlyL3A0ICYmIHJtZGlyIGJhZHA0ZGlyIiAmJgorCWNhdCA+YmFkcDRkaXIvcDQgPDwtRU9GICYmCisJIyEkU0hFTExfUEFUSAorCWV4aXQgMQorCUVPRgorCWNobW9kIDc1NSBiYWRwNGRpci9wNCAmJgorCSgKKwkJUEFUSD0iJFRSQVNIX0RJUkVDVE9SWS9iYWRwNGRpcjokUEFUSCIgJiYKKwkJZXhwb3J0IFBBVEggJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgPmVycnMgMj4mMQorCSkgJiYKKwljYXQgZXJycyAmJgorCXRlc3RfaTE4bmdyZXAgISBUcmFjZWJhY2sgZXJycworJworCisjIEhpZGUgYSBmaWxlIGZyb20gcDRkLCBtYWtlIHN1cmUgd2UgY2F0Y2ggaXRzIGNvbXBsYWludC4gIFRoaXMgd29uJ3QgZmFpbCBpbgorIyBwNCBjaGFuZ2VzLCBmaWxlcywgb3IgZGVzY3JpYmU7IGp1c3QgaW4gcDQgcHJpbnQuICBJZiBQNENMSUVOVCBpcyB1bnNldCwgdGhlCisjIG1lc3NhZ2Ugd2lsbCBpbmNsdWRlICJMaWJyYXJpYW4gY2hlY2tvdXQiLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZXhpdCBncmFjZWZ1bGx5IGZvciBwNCBzZXJ2ZXIgZXJyb3JzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJtdiBcIiRkYlwiL2RlcG90L2ZpbGUxLHYsaGlkZGVuIFwiJGRiXCIvZGVwb3QvZmlsZTEsdiIgJiYKKwltdiAiJGRiIi9kZXBvdC9maWxlMSx2ICIkZGIiL2RlcG90L2ZpbGUxLHYsaGlkZGVuICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAMSA+b3V0IDI+ZXJyICYmCisJdGVzdF9pMThuZ3JlcCAiRXJyb3IgZnJvbSBwNCBwcmludCIgZXJyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tYmFyZSBzaG91bGQgbWFrZSBhIGJhcmUgcmVwb3NpdG9yeScgJworCXJtIC1yZiAiJGdpdCIgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLWJhcmUgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIC5naXQgJiYKKwkJZ2l0IGNvbmZpZyAtLWdldCAtLWJvb2wgY29yZS5iYXJlIHRydWUgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvcDQvbWFzdGVyICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3A0L0hFQUQgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL2hlYWRzL21hc3RlciAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQKKwkpCisnCisKKyMgU2xlZXAgYSBiaXQgc28gdGhhdCB0aGUgdG9wLW1vc3QgcDQgY2hhbmdlIGRpZCBub3QgaGFwcGVuICJub3ciLiAgVGhlbgorIyBpbXBvcnQgdGhlIHJlcG8gYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbml0aWFsIGltcG9ydCBoYXMgdGhlIHNhbWUgdGltZQorIyBhcyB0aGUgdG9wLW1vc3QgY2hhbmdlLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdGlhbCBpbXBvcnQgdGltZSBmcm9tIHRvcCBjaGFuZ2UgdGltZScgJworCXA0Y2hhbmdlPSQocDQgLUcgY2hhbmdlcyAtbSAxIC8vZGVwb3QvLi4uIHwgbWFyc2hhbF9kdW1wIGNoYW5nZSkgJiYKKwlwNHRpbWU9JChwNCAtRyBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4gfCBtYXJzaGFsX2R1bXAgdGltZSkgJiYKKwlzbGVlcCAzICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdHRpbWU9JChnaXQgc2hvdyAtcyAtLXJhdyAtLXByZXR0eT1mb3JtYXQ6JWF0IEhFQUQpICYmCisJCWVjaG8gJHA0dGltZSAkZ2l0dGltZSAmJgorCQl0ZXN0ICRwNHRpbWUgPSAkZ2l0dGltZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndW5yZXNvbHZhYmxlIGhvc3QgaW4gUDRQT1JUIHNob3VsZCBkaXNwbGF5IGVycm9yJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCVA0UE9SVD1ub3N1Y2hob3N0OjY1NTM3ICYmCisJCWV4cG9ydCBQNFBPUlQgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzeW5jID5vdXQgMj5lcnIgJiYKKwkJZ3JlcCAiY29ubmVjdCB0byBub3N1Y2hob3N0IiBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODAxLWdpdC1wNC1icmFuY2guc2ggYi90L3Q5ODAxLWdpdC1wNC1icmFuY2guc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGFhZmQwMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MDEtZ2l0LXA0LWJyYW5jaC5zaApAQCAtMCwwICsxLDYxNyBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCB0ZXN0cyBmb3IgcDQgYnJhbmNoZXMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjCisjIDE6IC8vZGVwb3QvbWFpbi9mMQorIyAyOiAvL2RlcG90L21haW4vZjIKKyMgMzogaW50ZWdyYXRlIC8vZGVwb3QvbWFpbi8uLi4gLT4gLy9kZXBvdC9icmFuY2gxLy4uLgorIyA0OiAvL2RlcG90L21haW4vZjQKKyMgNTogLy9kZXBvdC9icmFuY2gxL2Y1CisjIC46IG5hbWVkIGJyYW5jaCBicmFuY2gyCisjIDY6IGludGVncmF0ZSAtYiBicmFuY2gyCisjIDc6IC8vZGVwb3QvYnJhbmNoMi9mNworIyA4OiAvL2RlcG90L21haW4vZjgKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIHA0IGJyYW5jaGVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgbWFpbiAmJgorCisJCWVjaG8gZjEgPm1haW4vZjEgJiYKKwkJcDQgYWRkIG1haW4vZjEgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2YxIiAmJgorCisJCWVjaG8gZjIgPm1haW4vZjIgJiYKKwkJcDQgYWRkIG1haW4vZjIgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2YyIiAmJgorCisJCXA0IGludGVncmF0ZSAvL2RlcG90L21haW4vLi4uIC8vZGVwb3QvYnJhbmNoMS8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJpbnRlZ3JhdGUgbWFpbiB0byBicmFuY2gxIiAmJgorCisJCWVjaG8gZjQgPm1haW4vZjQgJiYKKwkJcDQgYWRkIG1haW4vZjQgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2Y0IiAmJgorCisJCWVjaG8gZjUgPmJyYW5jaDEvZjUgJiYKKwkJcDQgYWRkIGJyYW5jaDEvZjUgJiYKKwkJcDQgc3VibWl0IC1kICJicmFuY2gxL2Y1IiAmJgorCisJCXA0IGJyYW5jaCAtaSA8PC1FT0YgJiYKKwkJQnJhbmNoOiBicmFuY2gyCisJCVZpZXc6IC8vZGVwb3QvbWFpbi8uLi4gLy9kZXBvdC9icmFuY2gyLy4uLgorCQlFT0YKKworCQlwNCBpbnRlZ3JhdGUgLWIgYnJhbmNoMiAmJgorCQlwNCBzdWJtaXQgLWQgImludGVncmF0ZSBtYWluIHRvIGJyYW5jaDIiICYmCisKKwkJZWNobyBmNyA+YnJhbmNoMi9mNyAmJgorCQlwNCBhZGQgYnJhbmNoMi9mNyAmJgorCQlwNCBzdWJtaXQgLWQgImJyYW5jaDIvZjciICYmCisKKwkJZWNobyBmOCA+bWFpbi9mOCAmJgorCQlwNCBhZGQgbWFpbi9mOCAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZjgiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgbWFpbiwgbm8gYnJhbmNoIGRldGVjdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvbWFpbkBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSAtLWdyYXBoIC0tZGVjb3JhdGUgLS1hbGwgJiYKKwkJZ2l0IHJldi1saXN0IG1hc3RlciA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNCB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGJyYW5jaDEsIG5vIGJyYW5jaCBkZXRlY3Rpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2JyYW5jaDFAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgLS1ncmFwaCAtLWRlY29yYXRlIC0tYWxsICYmCisJCWdpdCByZXYtbGlzdCBtYXN0ZXIgPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydCBicmFuY2gyLCBubyBicmFuY2ggZGV0ZWN0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9icmFuY2gyQGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLWFsbCAmJgorCQlnaXQgcmV2LWxpc3QgbWFzdGVyID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIHdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgZGVwb3QsIG5vIGJyYW5jaCBkZXRlY3Rpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLWFsbCAmJgorCQlnaXQgcmV2LWxpc3QgbWFzdGVyID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA4IHdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbXBvcnQgZGVwb3QsIGJyYW5jaCBkZXRlY3Rpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgLS1ncmFwaCAtLWRlY29yYXRlIC0tYWxsICYmCisKKwkJIyA0IG1haW4gY29tbWl0cworCQlnaXQgcmV2LWxpc3QgbWFzdGVyID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IHdjICYmCisKKwkJIyAzIG1haW4sIDEgaW50ZWdyYXRlLCAxIG9uIGJyYW5jaDIKKwkJZ2l0IHJldi1saXN0IHA0L2RlcG90L2JyYW5jaDIgPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgd2MgJiYKKworCQkjIG5vIGJyYW5jaDEsIHNpbmNlIG5vIHA0IGJyYW5jaCBjcmVhdGVkIGZvciBpdAorCQl0ZXN0X211c3RfZmFpbCBnaXQgc2hvdy1yZWYgcDQvZGVwb3QvYnJhbmNoMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW1wb3J0IGRlcG90LCBicmFuY2ggZGV0ZWN0aW9uLCBicmFuY2hMaXN0IGJyYW5jaCBkZWZpbml0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IG1haW46YnJhbmNoMSAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKworCQlnaXQgbG9nIC0tb25lbGluZSAtLWdyYXBoIC0tZGVjb3JhdGUgLS1hbGwgJiYKKworCQkjIDQgbWFpbiBjb21taXRzCisJCWdpdCByZXYtbGlzdCBtYXN0ZXIgPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDQgd2MgJiYKKworCQkjIDMgbWFpbiwgMSBpbnRlZ3JhdGUsIDEgb24gYnJhbmNoMgorCQlnaXQgcmV2LWxpc3QgcDQvZGVwb3QvYnJhbmNoMiA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gNSB3YyAmJgorCisJCSMgMiBtYWluLCAxIGludGVncmF0ZSwgMSBvbiBicmFuY2gxCisJCWdpdCByZXYtbGlzdCBwNC9kZXBvdC9icmFuY2gxID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IHdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZXN0YXJ0IHA0ZCcgJworCWtpbGxfcDRkICYmCisJc3RhcnRfcDRkCisnCisKKyMKKyMgMTogLy9kZXBvdC9icmFuY2gxL2ZpbGUxCisjICAgIC8vZGVwb3QvYnJhbmNoMS9maWxlMgorIyAyOiBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxLy4uLiAtPiAvL2RlcG90L2JyYW5jaDIvLi4uCisjIDM6IC8vZGVwb3QvYnJhbmNoMS9maWxlMworIyA0OiAvL2RlcG90L2JyYW5jaDEvZmlsZTIgKGVkaXQpCisjIDU6IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDEvLi4uIC0+IC8vZGVwb3QvYnJhbmNoMy8uLi4KKyMKKyMjIENyZWF0ZSBhIHNpbXBsZSBicmFuY2ggc3RydWN0dXJlIGluIFA0IGRlcG90LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIHNpbXBsZSBwNCBicmFuY2hlcycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIGJyYW5jaDEgJiYKKwkJY2QgYnJhbmNoMSAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQllY2hvIGZpbGUyID5maWxlMiAmJgorCQlwNCBhZGQgZmlsZTEgZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJDcmVhdGUgYnJhbmNoMSIgJiYKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS8uLi4gLy9kZXBvdC9icmFuY2gyLy4uLiAmJgorCQlwNCBzdWJtaXQgLWQgIkludGVncmF0ZSBicmFuY2gyIGZyb20gYnJhbmNoMSIgJiYKKwkJZWNobyBmaWxlMyA+ZmlsZTMgJiYKKwkJcDQgYWRkIGZpbGUzICYmCisJCXA0IHN1Ym1pdCAtZCAiYWRkIGZpbGUzIGluIGJyYW5jaDEiICYmCisJCXA0IG9wZW4gZmlsZTIgJiYKKwkJZWNobyB1cGRhdGUgPj5maWxlMiAmJgorCQlwNCBzdWJtaXQgLWQgInVwZGF0ZSBmaWxlMiBpbiBicmFuY2gxIiAmJgorCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxLy4uLiAvL2RlcG90L2JyYW5jaDMvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiSW50ZWdyYXRlIGJyYW5jaDMgZnJvbSBicmFuY2gxIgorCSkKKycKKworIyBDb25maWd1cmUgYnJhbmNoZXMgdGhyb3VnaCBnaXQtY29uZmlnIGFuZCBjbG9uZSB0aGVtLgorIyBBbGwgZmlsZXMgYXJlIHRlc3RlZCB0byBtYWtlIHN1cmUgYnJhbmNoZXMgd2VyZSBjbG9uZWQgY29ycmVjdGx5LgorIyBGaW5hbGx5LCBtYWtlIGFuIHVwZGF0ZSB0byBicmFuY2gxIG9uIFA0IHNpZGUgdG8gY2hlY2sgaWYgaXQgaXMgaW1wb3J0ZWQKKyMgY29ycmVjdGx5IGJ5IGdpdCBwNC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBjbG9uZSBzaW1wbGUgYnJhbmNoZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gyICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gzICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9LiAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAmJgorCQlnaXQgbG9nIC0tYWxsIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLXN0YXQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gxICYmCisJCXRlc3QgLWYgZmlsZTEgJiYKKwkJdGVzdCAtZiBmaWxlMiAmJgorCQl0ZXN0IC1mIGZpbGUzICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMiAmJgorCQl0ZXN0IC1mIGZpbGUxICYmCisJCXRlc3QgLWYgZmlsZTIgJiYKKwkJdGVzdCAhIC1mIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gzICYmCisJCXRlc3QgLWYgZmlsZTEgJiYKKwkJdGVzdCAtZiBmaWxlMiAmJgorCQl0ZXN0IC1mIGZpbGUzICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWNkICIkY2xpIiAmJgorCQljZCBicmFuY2gxICYmCisJCXA0IGVkaXQgZmlsZTIgJiYKKwkJZWNobyBmaWxlMl8gPj5maWxlMiAmJgorCQlwNCBzdWJtaXQgLWQgInVwZGF0ZSBmaWxlMiBpbiBicmFuY2gxIiAmJgorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gxICYmCisJCWdpdCBwNCByZWJhc2UgJiYKKwkJZ3JlcCBmaWxlMl8gZmlsZTIKKwkpCisnCisKKyMgQ3JlYXRlIGEgY29tcGxleCBicmFuY2ggc3RydWN0dXJlIGluIFA0IGRlcG90IHRvIGNoZWNrIGlmIHRoZXkgYXJlIGNvcnJlY3RseQorIyBjbG9uZWQuIFRoZSBicmFuY2hlcyBhcmUgY3JlYXRlZCBmcm9tIG9sZGVyIGNoYW5nZWxpc3RzIHRvIGNoZWNrIGlmIGdpdCBwNCBpcworIyBhYmxlIHRvIGNvcnJlY3RseSBkZXRlY3QgdGhlbS4KKyMgVGhlIGZpbmFsIGV4cGVjdGVkIHN0cnVjdHVyZSBpczoKKyMgYGJyYW5jaDEKKyMgfCBgLSBmaWxlMQorIyB8IGAtIGZpbGUyICh1cGRhdGVkKQorIyB8IGAtIGZpbGUzCisjIGBicmFuY2gyCisjIHwgYC0gZmlsZTEKKyMgfCBgLSBmaWxlMgorIyBgYnJhbmNoMworIyB8IGAtIGZpbGUxCisjIHwgYC0gZmlsZTIgKHVwZGF0ZWQpCisjIHwgYC0gZmlsZTMKKyMgYGJyYW5jaDQKKyMgfCBgLSBmaWxlMQorIyB8IGAtIGZpbGUyCisjIGBicmFuY2g1CisjICAgYC0gZmlsZTEKKyMgICBgLSBmaWxlMgorIyAgIGAtIGZpbGUzCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgcDQgYWRkIGNvbXBsZXggYnJhbmNoZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQljaGFuZ2VsaXN0PSQocDQgY2hhbmdlcyAtbTEgLy9kZXBvdC8uLi4gfCBjdXQgLWQiICIgLWYyKSAmJgorCQljaGFuZ2VsaXN0PSQoKCRjaGFuZ2VsaXN0IC0gNSkpICYmCisJCXA0IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDEvLi4uQCRjaGFuZ2VsaXN0IC8vZGVwb3QvYnJhbmNoNC8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJJbnRlZ3JhdGUgYnJhbmNoNCBmcm9tIGJyYW5jaDFAJHtjaGFuZ2VsaXN0fSIgJiYKKwkJY2hhbmdlbGlzdD0kKCgkY2hhbmdlbGlzdCArIDIpKSAmJgorCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxLy4uLkAkY2hhbmdlbGlzdCAvL2RlcG90L2JyYW5jaDUvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiSW50ZWdyYXRlIGJyYW5jaDUgZnJvbSBicmFuY2gxQCR7Y2hhbmdlbGlzdH0iCisJKQorJworCisjIENvbmZpZ3VyZSBicmFuY2hlcyB0aHJvdWdoIGdpdC1jb25maWcgYW5kIGNsb25lIHRoZW0uIGdpdCBwNCB3aWxsIG9ubHkgYmUgYWJsZQorIyB0byBjbG9uZSB0aGUgb3JpZ2luYWwgc3RydWN0dXJlIGlmIGl0IGlzIGFibGUgdG8gZGV0ZWN0IHRoZSBvcmlnaW4gY2hhbmdlbGlzdAorIyBvZiBlYWNoIGJyYW5jaC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBjbG9uZSBjb21wbGV4IGJyYW5jaGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMiAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMyAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoNCAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoNSAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKwkJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoIC0tZGVjb3JhdGUgLS1zdGF0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTMgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g1ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgLmdpdC9naXQtcDQtdG1wCisJKQorJworCisjIE1vdmUgYnJhbmNoMy9maWxlMyB0byBicmFuY2g0L2ZpbGUzIGluIGEgc2luZ2xlIGNoYW5nZWxpc3QKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBzdWJtaXQgdG8gdHdvIGJyYW5jaGVzIGluIGEgc2luZ2xlIGNoYW5nZWxpc3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gzL2ZpbGUzIC8vZGVwb3QvYnJhbmNoNC9maWxlMyAmJgorCQlwNCBkZWxldGUgLy9kZXBvdC9icmFuY2gzL2ZpbGUzICYmCisJCXA0IHN1Ym1pdCAtZCAiTW92ZSBicmFuY2gzL2ZpbGUzIHRvIGJyYW5jaDQvZmlsZTMiCisJKQorJworCisjIENvbmZpcm0gdGhhdCBjaGFuZ2VzIHRvIHR3byBicmFuY2hlcyBkb25lIGluIGEgc2luZ2xlIGNoYW5nZWxpc3QKKyMgYXJlIGNvcnJlY3RseSBpbXBvcnRlZCBieSBnaXQgcDQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBzeW5jIGNoYW5nZXMgdG8gdHdvIGJyYW5jaGVzIGluIHRoZSBzYW1lIGNoYW5nZWxpc3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X2NyZWF0ZV9yZXBvICIkZ2l0IiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gyICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2gzICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2g0ICYmCisJCWdpdCBjb25maWcgLS1hZGQgZ2l0LXA0LmJyYW5jaExpc3QgYnJhbmNoMTpicmFuY2g1ICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9LiAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAmJgorCQlnaXQgbG9nIC0tYWxsIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLXN0YXQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQkhIGdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlMyAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDUgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTMgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAuZ2l0L2dpdC1wNC10bXAKKwkpCisnCisKKyMgQ3JlYXRlIGEgYnJhbmNoIGJ5IGludGVncmF0aW5nIGEgc2luZ2xlIGZpbGUKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBmaWxlIHN1YnNldCBicmFuY2gnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC9icmFuY2gxL2ZpbGUxIC8vZGVwb3QvYnJhbmNoNi9maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgIkludGVncmF0ZSBmaWxlMSBhbG9uZSBmcm9tIGJyYW5jaDEgdG8gYnJhbmNoNiIKKwkpCisnCisKKyMgQ2hlY2sgaWYgZ2l0IHA0IGNyZWF0ZXMgYSBuZXcgYnJhbmNoIGNvbnRhaW5pbmcgYSBzaW5nbGUgZmlsZSwKKyMgaW5zdGVhZCBvZiBrZWVwaW5nIHRoZSBvbGQgZmlsZXMgZnJvbSB0aGUgb3JpZ2luYWwgYnJhbmNoCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdnaXQgcDQgY2xvbmUgZmlsZSBzdWJzZXQgYnJhbmNoJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMiAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoMyAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoNCAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoNSAmJgorCQlnaXQgY29uZmlnIC0tYWRkIGdpdC1wNC5icmFuY2hMaXN0IGJyYW5jaDE6YnJhbmNoNiAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKwkJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoIC0tZGVjb3JhdGUgLS1zdGF0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMyAmJgorCQlncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTMgJiYKKwkJISBncmVwIHVwZGF0ZSBmaWxlMiAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIHA0L2RlcG90L2JyYW5jaDMgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTEgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTMgJiYKKwkJZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g1ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2g2ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUzCisJKQorJworCisjIEZyb20gYSByZXBvcnQgaW4gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMTg5MzY4OAorIyB3aGVyZSAtLXVzZS1jbGllbnQtc3BlYyBjYXVzZWQgYnJhbmNoIHByZWZpeGVzIG5vdCB0byBiZSByZW1vdmVkOworIyBldmVyeSBmaWxlIGluIGdpdCBhcHBlYXJlZCBpbnRvIGEgc3ViZGlyZWN0b3J5IG9mIHRoZSBicmFuY2ggbmFtZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZS1jbGllbnQtc3BlYyBkZXRlY3QtYnJhbmNoZXMgc2V0dXAnICcKKwlybSAtcmYgIiRjbGkiICYmCisJbWtkaXIgIiRjbGkiICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJY2xpZW50X3ZpZXcgIi8vZGVwb3QvdXNlY3MvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkJbWtkaXIgYjEgJiYKKwkJZWNobyBiMS9iMS1maWxlMSA+YjEvYjEtZmlsZTEgJiYKKwkJcDQgYWRkIGIxL2IxLWZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiYjEvYjEtZmlsZTEiICYmCisKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvdXNlY3MvYjEvLi4uIC8vZGVwb3QvdXNlY3MvYjIvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiYjEgLT4gYjIiICYmCisJCXA0IGJyYW5jaCAtaSA8PC1FT0YgJiYKKwkJQnJhbmNoOiBiMgorCQlWaWV3OiAvL2RlcG90L3VzZWNzL2IxLy4uLiAvL2RlcG90L3VzZWNzL2IyLy4uLgorCQlFT0YKKworCQllY2hvIGIyL2IyLWZpbGUyID5iMi9iMi1maWxlMiAmJgorCQlwNCBhZGQgYjIvYjItZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJiMi9iMi1maWxlMiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3VzZS1jbGllbnQtc3BlYyBkZXRlY3QtYnJhbmNoZXMgZmlsZXMgaW4gdG9wLWxldmVsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLWRldGVjdC1icmFuY2hlcyAtLXVzZS1jbGllbnQtc3BlYyAvL2RlcG90L3VzZWNzQGFsbCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyIHA0L3VzZWNzL2IxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGIxLWZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIyLWZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIyICYmCisKKwkJZ2l0IGNoZWNrb3V0IC1iIGIyIHA0L3VzZWNzL2IyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGIxLWZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGIyLWZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGIyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UtY2xpZW50LXNwZWMgZGV0ZWN0LWJyYW5jaGVzIHNraXBzIGJyYW5jaGVzIHNldHVwJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKworCQlwNCBpbnRlZ3JhdGUgLy9kZXBvdC91c2Vjcy9iMS8uLi4gLy9kZXBvdC91c2Vjcy9iMy8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJiMSAtPiBiMyIgJiYKKwkJcDQgYnJhbmNoIC1pIDw8LUVPRiAmJgorCQlCcmFuY2g6IGIzCisJCVZpZXc6IC8vZGVwb3QvdXNlY3MvYjEvLi4uIC8vZGVwb3QvdXNlY3MvYjMvLi4uCisJCUVPRgorCisJCWVjaG8gYjMvYjMtZmlsZTNfMSA+YjMvYjMtZmlsZTNfMSAmJgorCQllY2hvIGIzL2IzLWZpbGUzXzIgPmIzL2IzLWZpbGUzXzIgJiYKKwkJcDQgYWRkIGIzL2IzLWZpbGUzXzEgJiYKKwkJcDQgYWRkIGIzL2IzLWZpbGUzXzIgJiYKKwkJcDQgc3VibWl0IC1kICJiMy9iMy1maWxlM18xIGIzL2IzLWZpbGUzXzIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UtY2xpZW50LXNwZWMgZGV0ZWN0LWJyYW5jaGVzIHNraXBzIGJyYW5jaGVzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvdXNlY3MvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIi0vL2RlcG90L3VzZWNzL2IzLy4uLiAvL2NsaWVudC9iMy8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLWRldGVjdC1icmFuY2hlcyAtLXVzZS1jbGllbnQtc3BlYyAvL2RlcG90L3VzZWNzQGFsbCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcmV2LXBhcnNlIHJlZnMvcmVtb3Rlcy9wNC91c2Vjcy9iMworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndXNlLWNsaWVudC1zcGVjIGRldGVjdC1icmFuY2hlcyBza2lwcyBmaWxlcyBpbiBicmFuY2hlcycgJworCWNsaWVudF92aWV3ICIvL2RlcG90L3VzZWNzLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICItLy9kZXBvdC91c2Vjcy9iMy9iMy1maWxlM18xIC8vY2xpZW50L2IzL2IzLWZpbGUzXzEiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF9jcmVhdGVfcmVwbyAiJGdpdCIgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLWRldGVjdC1icmFuY2hlcyAtLXVzZS1jbGllbnQtc3BlYyAvL2RlcG90L3VzZWNzQGFsbCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyIHA0L3VzZWNzL2IzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGIxLWZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGIzLWZpbGUzXzIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgYjMtZmlsZTNfMQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVzdGFydCBwNGQnICcKKwlraWxsX3A0ZCAmJgorCXN0YXJ0X3A0ZAorJworCisjCisjIDE6IC8vZGVwb3QvYnJhbmNoMS9iYXNlL2ZpbGUxCisjICAgIC8vZGVwb3QvYnJhbmNoMS9iYXNlL2ZpbGUyCisjICAgIC8vZGVwb3QvYnJhbmNoMS9iYXNlL2Rpci9zdWJfZmlsZTEKKyMgMjogaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS9iYXNlLy4uLiAtPiAvL2RlcG90L2JyYW5jaDIvYmFzZS8uLi4KKyMgMzogLy9kZXBvdC9icmFuY2gxL2Jhc2UvZmlsZTMKKyMgNDogLy9kZXBvdC9icmFuY2gxL2Jhc2UvZmlsZTIgKGVkaXQpCisjIDU6IGludGVncmF0ZSAvL2RlcG90L2JyYW5jaDEvYmFzZS8uLi4gLT4gLy9kZXBvdC9icmFuY2gzL2Jhc2UvLi4uCisjCisjIE5vdGU6IHRoZSBjbGllbnQgdmlldyByZW1vdmVzIHRoZSAiYmFzZSIgZm9sZGVyIGZyb20gdGhlIHdvcmtzcGFjZQorIyAgICAgICBhbmQgbW92ZXMgc3ViX2ZpbGUxIG9uZSBsZXZlbCB1cC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBzaW1wbGUgcDQgYnJhbmNoZXMgd2l0aCBjb21tb24gYmFzZSBmb2xkZXIgb24gZWFjaCBicmFuY2gnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQljbGllbnRfdmlldyAiLy9kZXBvdC9icmFuY2gxL2Jhc2UvLi4uIC8vY2xpZW50L2JyYW5jaDEvLi4uIiBcCisJCQkgICAgIi8vZGVwb3QvYnJhbmNoMS9iYXNlL2Rpci9zdWJfZmlsZTEgLy9jbGllbnQvYnJhbmNoMS9zdWJfZmlsZTEiIFwKKwkJCSAgICAiLy9kZXBvdC9icmFuY2gyL2Jhc2UvLi4uIC8vY2xpZW50L2JyYW5jaDIvLi4uIiBcCisJCQkgICAgIi8vZGVwb3QvYnJhbmNoMy9iYXNlLy4uLiAvL2NsaWVudC9icmFuY2gzLy4uLiIgJiYKKwkJbWtkaXIgLXAgYnJhbmNoMSAmJgorCQljZCBicmFuY2gxICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCWVjaG8gZmlsZTIgPmZpbGUyICYmCisJCW1rZGlyIGRpciAmJgorCQllY2hvIHN1Yl9maWxlMSA+c3ViX2ZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSBmaWxlMiBzdWJfZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJDcmVhdGUgYnJhbmNoMSIgJiYKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS9iYXNlLy4uLiAvL2RlcG90L2JyYW5jaDIvYmFzZS8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJJbnRlZ3JhdGUgYnJhbmNoMiBmcm9tIGJyYW5jaDEiICYmCisJCWVjaG8gZmlsZTMgPmZpbGUzICYmCisJCXA0IGFkZCBmaWxlMyAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBmaWxlMyBpbiBicmFuY2gxIiAmJgorCQlwNCBvcGVuIGZpbGUyICYmCisJCWVjaG8gdXBkYXRlID4+ZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGUgZmlsZTIgaW4gYnJhbmNoMSIgJiYKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvYnJhbmNoMS9iYXNlLy4uLiAvL2RlcG90L2JyYW5jaDMvYmFzZS8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJJbnRlZ3JhdGUgYnJhbmNoMyBmcm9tIGJyYW5jaDEiCisJKQorJworCisjIENvbmZpZ3VyZSBicmFuY2hlcyB0aHJvdWdoIGdpdC1jb25maWcgYW5kIGNsb25lIHRoZW0uCisjIEFsbCBmaWxlcyBhcmUgdGVzdGVkIHRvIG1ha2Ugc3VyZSBicmFuY2hlcyB3ZXJlIGNsb25lZCBjb3JyZWN0bHkuCisjIEZpbmFsbHksIG1ha2UgYW4gdXBkYXRlIHRvIGJyYW5jaDEgb24gUDQgc2lkZSB0byBjaGVjayBpZiBpdCBpcyBpbXBvcnRlZAorIyBjb3JyZWN0bHkgYnkgZ2l0IHA0LgorIyBnaXQgcDQgaXMgZXhwZWN0ZWQgdG8gdXNlIHRoZSBjbGllbnQgdmlldyB0byBhbHNvIG5vdCBpbmNsdWRlIHRoZSBjb21tb24KKyMgImJhc2UiIGZvbGRlciBpbiB0aGUgaW1wb3J0ZWQgZGlyZWN0b3J5IHN0cnVjdHVyZS4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdCBwNCBjbG9uZSBzaW1wbGUgYnJhbmNoZXMgd2l0aCBiYXNlIGZvbGRlciBvbiBzZXJ2ZXIgc2lkZScgJworCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDIgJiYKKwkJZ2l0IGNvbmZpZyAtLWFkZCBnaXQtcDQuYnJhbmNoTGlzdCBicmFuY2gxOmJyYW5jaDMgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdD0uIC0tdXNlLWNsaWVudC1zcGVjICAtLWRldGVjdC1icmFuY2hlcyAvL2RlcG90QGFsbCAmJgorCQlnaXQgbG9nIC0tYWxsIC0tZ3JhcGggLS1kZWNvcmF0ZSAtLXN0YXQgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gxICYmCisJCXRlc3QgLWYgZmlsZTEgJiYKKwkJdGVzdCAtZiBmaWxlMiAmJgorCQl0ZXN0IC1mIGZpbGUzICYmCisJCXRlc3QgLWYgc3ViX2ZpbGUxICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoMiAmJgorCQl0ZXN0IC1mIGZpbGUxICYmCisJCXRlc3QgLWYgZmlsZTIgJiYKKwkJdGVzdCAhIC1mIGZpbGUzICYmCisJCXRlc3QgLWYgc3ViX2ZpbGUxICYmCisJCSEgZ3JlcCB1cGRhdGUgZmlsZTIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gzICYmCisJCXRlc3QgLWYgZmlsZTEgJiYKKwkJdGVzdCAtZiBmaWxlMiAmJgorCQl0ZXN0IC1mIGZpbGUzICYmCisJCXRlc3QgLWYgc3ViX2ZpbGUxICYmCisJCWdyZXAgdXBkYXRlIGZpbGUyICYmCisJCWNkICIkY2xpIiAmJgorCQljZCBicmFuY2gxICYmCisJCXA0IGVkaXQgZmlsZTIgJiYKKwkJZWNobyBmaWxlMl8gPj5maWxlMiAmJgorCQlwNCBzdWJtaXQgLWQgInVwZGF0ZSBmaWxlMiBpbiBicmFuY2gxIiAmJgorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gxICYmCisJCWdpdCBwNCByZWJhc2UgJiYKKwkJZ3JlcCBmaWxlMl8gZmlsZTIKKwkpCisnCisKKyMgTm93IHVwZGF0ZSBhIGZpbGUgaW4gb25lIG9mIHRoZSBicmFuY2hlcyBpbiBnaXQgYW5kIHN1Ym1pdCB0byBQNAordGVzdF9leHBlY3Rfc3VjY2VzcyAnVXBkYXRlIGEgZmlsZSBpbiBnaXQgc2lkZSBhbmQgc3VibWl0IHRvIFA0IHVzaW5nIGNsaWVudCB2aWV3JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJlc2V0IC0taGFyZCBwNC9kZXBvdC9icmFuY2gxICYmCisJCWVjaG8gImNsaWVudCBzcGVjIiA+PiBmaWxlMSAmJgorCQlnaXQgYWRkIC11IC4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAidXBkYXRlIGZpbGUxIGluIGJyYW5jaDEiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLXZlcmJvc2UgJiYKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgLi4uICYmCisJCWNkIGJyYW5jaDEgJiYKKwkJZ3JlcCAiY2xpZW50IHNwZWMiIGZpbGUxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwMi1naXQtcDQtZmlsZXR5cGUuc2ggYi90L3Q5ODAyLWdpdC1wNC1maWxldHlwZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42NmQzZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwMi1naXQtcDQtZmlsZXR5cGUuc2gKQEAgLTAsMCArMSwzNDAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgZmlsZXR5cGUgdGVzdHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjCisjIFRoaXMgc2VyaWVzIG9mIHRlc3RzIGNoZWNrcyBuZXdsaW5lIGhhbmRsaW5nICBCb3RoIHA0IGFuZAorIyBnaXQgc3RvcmUgbmV3bGluZXMgYXMgXG4sIGFuZCBoYXZlIG9wdGlvbnMgdG8gY2hvb3NlIGhvdworIyBuZXdsaW5lcyBhcHBlYXIgaW4gY2hlY2tlZC1vdXQgZmlsZXMuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwNCBjbGllbnQgbmV3bGluZXMsIHVuaXgnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp1bml4LyIgfCBwNCBjbGllbnQgLWkgJiYKKwkJcHJpbnRmICJ1bml4XG5jcmxmXG4iID5mLXVuaXggJiYKKwkJcHJpbnRmICJ1bml4XHJcbmNybGZcclxuIiA+Zi11bml4LWFzLWNybGYgJiYKKwkJcDQgYWRkIC10IHRleHQgZi11bml4ICYmCisJCXA0IHN1Ym1pdCAtZCBmLXVuaXggJiYKKworCQkjIExpbmVFbmQ6IHVuaXg7IHNob3VsZCBiZSBubyBjaGFuZ2UgYWZ0ZXIgc3luYworCQljcCBmLXVuaXggZi11bml4LW9yaWcgJiYKKwkJcDQgc3luYyAtZiAmJgorCQl0ZXN0X2NtcCBmLXVuaXgtb3JpZyBmLXVuaXggJiYKKworCQkjIG1ha2Ugc3VyZSBzdG9yZWQgaW4gcmVwbyBhcyB1bml4IG5ld2xpbmVzCisJCSMgdXNlIHNlZCB0byBlYXQgcHl0aG9uLWFwcGVuZGVkIG5ld2xpbmUKKwkJcDQgLUcgcHJpbnQgLy9kZXBvdC9mLXVuaXggfCBtYXJzaGFsX2R1bXAgZGF0YSAyIHxcCisJCSAgICBzZWQgXCRkID5mLXVuaXgtcDQtcHJpbnQgJiYKKwkJdGVzdF9jbXAgZi11bml4LW9yaWcgZi11bml4LXA0LXByaW50ICYmCisKKwkJIyBzd2l0Y2ggdG8gd2luLCBtYWtlIHN1cmUgbGYgLT4gY3JsZgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp3aW4vIiB8IHA0IGNsaWVudCAtaSAmJgorCQlwNCBzeW5jIC1mICYmCisJCXRlc3RfY21wIGYtdW5peC1hcy1jcmxmIGYtdW5peAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncDQgY2xpZW50IG5ld2xpbmVzLCB3aW4nICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp3aW4vIiB8IHA0IGNsaWVudCAtaSAmJgorCQlwcmludGYgIndpblxyXG5jcmxmXHJcbiIgPmYtd2luICYmCisJCXByaW50ZiAid2luXG5jcmxmXG4iID5mLXdpbi1hcy1sZiAmJgorCQlwNCBhZGQgLXQgdGV4dCBmLXdpbiAmJgorCQlwNCBzdWJtaXQgLWQgZi13aW4gJiYKKworCQkjIExpbmVFbmQ6IHdpbjsgc2hvdWxkIGJlIG5vIGNoYW5nZSBhZnRlciBzeW5jCisJCWNwIGYtd2luIGYtd2luLW9yaWcgJiYKKwkJcDQgc3luYyAtZiAmJgorCQl0ZXN0X2NtcCBmLXdpbi1vcmlnIGYtd2luICYmCisKKwkJIyBtYWtlIHN1cmUgc3RvcmVkIGluIHJlcG8gYXMgdW5peCBuZXdsaW5lcworCQkjIHVzZSBzZWQgdG8gZWF0IHB5dGhvbi1hcHBlbmVkIG5ld2xpbmUKKwkJcDQgLUcgcHJpbnQgLy9kZXBvdC9mLXdpbiB8IG1hcnNoYWxfZHVtcCBkYXRhIDIgfFwKKwkJICAgIHNlZCBcJGQgPmYtd2luLXA0LXByaW50ICYmCisJCXRlc3RfY21wIGYtd2luLWFzLWxmIGYtd2luLXA0LXByaW50ICYmCisKKwkJIyBzd2l0Y2ggdG8gdW5peCwgbWFrZSBzdXJlIGxmIC0+IGNybGYKKwkJcDQgY2xpZW50IC1vIHwgc2VkICIvTGluZUVuZC9zLzouKi86dW5peC8iIHwgcDQgY2xpZW50IC1pICYmCisJCXA0IHN5bmMgLWYgJiYKKwkJdGVzdF9jbXAgZi13aW4tYXMtbGYgZi13aW4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Vuc3VyZSBibG9icyBzdG9yZSBvbmx5IGxmIG5ld2xpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgJiYKKwkJZ2l0IHA0IHN5bmMgLy9kZXBvdEBhbGwgJiYKKworCQkjIHZlcmlmeSB0aGUgZmlsZXMgaW4gLmdpdCBhcmUgc3RvcmVkIG9ubHkgd2l0aCBuZXdsaW5lcworCQlvPSQoZ2l0IGxzLXRyZWUgcDQvbWFzdGVyIC0tIGYtdW5peCB8IGN1dCAtZjEgfCBjdXQgLWRcICAtZjMpICYmCisJCWdpdCBjYXQtZmlsZSBibG9iICRvID5mLXVuaXgtYmxvYiAmJgorCQl0ZXN0X2NtcCAiJGNsaSIvZi11bml4LW9yaWcgZi11bml4LWJsb2IgJiYKKworCQlvPSQoZ2l0IGxzLXRyZWUgcDQvbWFzdGVyIC0tIGYtd2luIHwgY3V0IC1mMSB8IGN1dCAtZFwgIC1mMykgJiYKKwkJZ2l0IGNhdC1maWxlIGJsb2IgJG8gPmYtd2luLWJsb2IgJiYKKwkJdGVzdF9jbXAgIiRjbGkiL2Ytd2luLWFzLWxmIGYtd2luLWJsb2IgJiYKKworCQlybSBmLXVuaXgtYmxvYiBmLXdpbi1ibG9iCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXRhdHRyaWJ1dGVzIHNldHRpbmcgZW9sPWxmIHByb2R1Y2VzIGxmIG5ld2xpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQkjIGNoZWNrb3V0IHRoZSBmaWxlcyBhbmQgbWFrZSBzdXJlIGNvcmUuZW9sIHdvcmtzIGFzIHBsYW5uZWQKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gIiogZW9sPWxmIiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJZ2l0IHA0IHN5bmMgLy9kZXBvdEBhbGwgJiYKKwkJZ2l0IGNoZWNrb3V0IC1iIG1hc3RlciBwNC9tYXN0ZXIgJiYKKwkJdGVzdF9jbXAgIiRjbGkiL2YtdW5peC1vcmlnIGYtdW5peCAmJgorCQl0ZXN0X2NtcCAiJGNsaSIvZi13aW4tYXMtbGYgZi13aW4KKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2dpdGF0dHJpYnV0ZXMgc2V0dGluZyBlb2w9Y3JsZiBwcm9kdWNlcyBjcmxmIG5ld2xpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQkjIGNoZWNrb3V0IHRoZSBmaWxlcyBhbmQgbWFrZSBzdXJlIGNvcmUuZW9sIHdvcmtzIGFzIHBsYW5uZWQKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0ICYmCisJCWVjaG8gIiogZW9sPWNybGYiID4uZ2l0YXR0cmlidXRlcyAmJgorCQlnaXQgcDQgc3luYyAvL2RlcG90QGFsbCAmJgorCQlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyIHA0L21hc3RlciAmJgorCQl0ZXN0X2NtcCAiJGNsaSIvZi11bml4LWFzLWNybGYgZi11bml4ICYmCisJCXRlc3RfY21wICIkY2xpIi9mLXdpbi1vcmlnIGYtd2luCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmxmIGNsZWFudXAnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlybSBmLXVuaXgtb3JpZyBmLXVuaXgtYXMtY3JsZiAmJgorCQlybSBmLXdpbi1vcmlnIGYtd2luLWFzLWxmICYmCisJCXA0IGNsaWVudCAtbyB8IHNlZCAiL0xpbmVFbmQvcy86LiovOnVuaXgvIiB8IHA0IGNsaWVudCAtaSAmJgorCQlwNCBzeW5jIC1mCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1dGYtMTYgZmlsZSBjcmVhdGUnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCSMgcDQgc2F2ZXMgdGhpcyB2ZXJiYXRpbQorCQlwcmludGYgInRocmVlXG5saW5lXG50ZXh0XG4iID5mLWFzY2lpICYmCisJCXA0IGFkZCAtdCB0ZXh0IGYtYXNjaWkgJiYKKworCQkjIHA0IGFkZHMgXDM3N1wzNzYgaGVhZGVyCisJCWNwIGYtYXNjaWkgZi1hc2NpaS1hcy11dGYxNiAmJgorCQlwNCBhZGQgLXQgdXRmMTYgZi1hc2NpaS1hcy11dGYxNiAmJgorCisJCSMgcDQgc2F2ZXMgdGhpcyBleGFjdGx5IGFzIGljb252IHByb2R1Y2VkIGl0CisJCXByaW50ZiAidGhyZWVcbmxpbmVcbnRleHRcbiIgfCBpY29udiAtZiBhc2NpaSAtdCB1dGYtMTYgPmYtdXRmMTYgJiYKKwkJcDQgYWRkIC10IHV0ZjE2IGYtdXRmMTYgJiYKKworCQkjIHRoaXMgYWxzbyBpcyB1bmNoYW5nZWQKKwkJY3AgZi11dGYxNiBmLXV0ZjE2LWFzLXRleHQgJiYKKwkJcDQgYWRkIC10IHRleHQgZi11dGYxNi1hcy10ZXh0ICYmCisKKwkJcDQgc3VibWl0IC1kICJmIGZpbGVzIiAmJgorCisJCSMgZm9yY2UgdXBkYXRlIG9mIGNsaWVudCBmaWxlcworCQlwNCBzeW5jIC1mCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1dGYtMTYgZmlsZSB0ZXN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCisJCXRlc3RfY21wICIkY2xpL2YtYXNjaWkiIGYtYXNjaWkgJiYKKwkJdGVzdF9jbXAgIiRjbGkvZi1hc2NpaS1hcy11dGYxNiIgZi1hc2NpaS1hcy11dGYxNiAmJgorCQl0ZXN0X2NtcCAiJGNsaS9mLXV0ZjE2IiBmLXV0ZjE2ICYmCisJCXRlc3RfY21wICIkY2xpL2YtdXRmMTYtYXMtdGV4dCIgZi11dGYxNi1hcy10ZXh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXl3b3JkIGZpbGUgY3JlYXRlJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKworCQlwcmludGYgImlkXG5cJElkXCRcblwkQXV0aG9yXCRcbnRleHRcbiIgPmstdGV4dC1rICYmCisJCXA0IGFkZCAtdCB0ZXh0K2sgay10ZXh0LWsgJiYKKworCQljcCBrLXRleHQtayBrLXRleHQta28gJiYKKwkJcDQgYWRkIC10IHRleHQra28gay10ZXh0LWtvICYmCisKKwkJY2F0IGstdGV4dC1rIHwgaWNvbnYgLWYgYXNjaWkgLXQgdXRmLTE2ID5rLXV0ZjE2LWsgJiYKKwkJcDQgYWRkIC10IHV0ZjE2K2sgay11dGYxNi1rICYmCisKKwkJY3Agay11dGYxNi1rIGstdXRmMTYta28gJiYKKwkJcDQgYWRkIC10IHV0ZjE2K2tvIGstdXRmMTYta28gJiYKKworCQlwNCBzdWJtaXQgLWQgImsgZmlsZXMiICYmCisJCXA0IHN5bmMgLWYKKwkpCisnCisKK2J1aWxkX3NtdXNoKCkgeworCWNhdCA+a19zbXVzaC5weSA8PC1cRU9GICYmCisJaW1wb3J0IHJlLCBzeXMKKwlzeXMuc3Rkb3V0LndyaXRlKHJlLnN1YihyJyg/aSlcJChJZHxIZWFkZXJ8QXV0aG9yfERhdGV8RGF0ZVRpbWV8Q2hhbmdlfEZpbGV8UmV2aXNpb24pOlteJF0qXCQnLCByJyRcMSQnLCBzeXMuc3RkaW4ucmVhZCgpKSkKKwlFT0YKKwljYXQgPmtvX3NtdXNoLnB5IDw8LVxFT0YKKwlpbXBvcnQgcmUsIHN5cworCXN5cy5zdGRvdXQud3JpdGUocmUuc3ViKHInKD9pKVwkKElkfEhlYWRlcik6W14kXSpcJCcsIHInJFwxJCcsIHN5cy5zdGRpbi5yZWFkKCkpKQorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdrZXl3b3JkIGZpbGUgdGVzdCcgJworCWJ1aWxkX3NtdXNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mIGtfc211c2gucHkga29fc211c2gucHkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisKKwkJIyB0ZXh0LCBlbnN1cmUgdW5leHBhbmRlZAorCQkiJFBZVEhPTl9QQVRIIiAiJFRSQVNIX0RJUkVDVE9SWS9rX3NtdXNoLnB5IiA8IiRjbGkvay10ZXh0LWsiID5jbGktay10ZXh0LWstc211c2ggJiYKKwkJdGVzdF9jbXAgY2xpLWstdGV4dC1rLXNtdXNoIGstdGV4dC1rICYmCisJCSIkUFlUSE9OX1BBVEgiICIkVFJBU0hfRElSRUNUT1JZL2tvX3NtdXNoLnB5IiA8IiRjbGkvay10ZXh0LWtvIiA+Y2xpLWstdGV4dC1rby1zbXVzaCAmJgorCQl0ZXN0X2NtcCBjbGktay10ZXh0LWtvLXNtdXNoIGstdGV4dC1rbyAmJgorCisJCSMgdXRmMTYsIGV2ZW4gdGhvdWdoIHA0IGV4cGFuZHMga2V5d29yZHMsIGdpdCBwNCBkb2VzIG5vdAorCQkjIHRyeSB0byB1bmRvIHRoYXQKKwkJdGVzdF9jbXAgIiRjbGkvay11dGYxNi1rIiBrLXV0ZjE2LWsgJiYKKwkJdGVzdF9jbXAgIiRjbGkvay11dGYxNi1rbyIgay11dGYxNi1rbworCSkKKycKKworYnVpbGRfZ2VuZG91YmxlKCkgeworCWNhdCA+Z2VuZG91YmxlLnB5IDw8LVxFT0YKKwlpbXBvcnQgc3lzCisJaW1wb3J0IHN0cnVjdAorCisJcyA9IHN0cnVjdC5wYWNrKCI+TEwxOHMiLAorCQkJMHgwMDA1MTYwNywgICMgQXBwbGVEb3VibGUKKwkJCTB4MDAwMjAwMDAsICAjIHZlcnNpb24gMgorCQkJIiIgICAgICAgICAgICMgcGFkIHRvIDI2IGJ5dGVzCisJKQorCXN5cy5zdGRvdXQud3JpdGUocykKKwlFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaWdub3JlIGFwcGxlJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIHJtIC1mIGdlbmRvdWJsZS5weSAmJgorCWJ1aWxkX2dlbmRvdWJsZSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3QtZ2VucmFuZG9tIGFwcGxlIDEwMjQgPmRvdWJsZS5wbmcgJiYKKwkJIiRQWVRIT05fUEFUSCIgIiRUUkFTSF9ESVJFQ1RPUlkvZ2VuZG91YmxlLnB5IiA+JWRvdWJsZS5wbmcgJiYKKwkJcDQgYWRkIC10IGFwcGxlIGRvdWJsZS5wbmcgJiYKKwkJcDQgc3VibWl0IC1kIGFwcGxlZG91YmxlCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdCAhIC1mIGRvdWJsZS5wbmcKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ2NyZWF0ZSBwNCBzeW1saW5rJyAnCisJY2QgIiRjbGkiICYmCisJbG4gLXMgc3ltbGluay10YXJnZXQgc3ltbGluayAmJgorCXA0IGFkZCBzeW1saW5rICYmCisJcDQgc3VibWl0IC1kICJhZGQgc3ltbGluayIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnZW5zdXJlIHA0IHN5bWxpbmsgcGFyc2VkIGNvcnJlY3RseScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdCAtTCBzeW1saW5rICYmCisJCXRlc3QgJChyZWFkbGluayBzeW1saW5rKSA9IHN5bWxpbmstdGFyZ2V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFNZTUxJTktTICdlbXB0eSBzeW1saW5rIHRhcmdldCcgJworCSgKKwkJIyBmaXJzdCBjcmVhdGUgdGhlIGZpbGUgYXMgYSBmaWxlCisJCWNkICIkY2xpIiAmJgorCQk+ZW1wdHktc3ltbGluayAmJgorCQlwNCBhZGQgZW1wdHktc3ltbGluayAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBlbXB0eS1zeW1saW5rIGFzIGEgZmlsZSIKKwkpICYmCisJKAorCQkjIG5vdyBjaGFuZ2UgaXQgdG8gYmUgYSBzeW1saW5rIHRvICJ0YXJnZXQxIgorCQljZCAiJGNsaSIgJiYKKwkJcDQgZWRpdCBlbXB0eS1zeW1saW5rICYmCisJCXA0IHJlb3BlbiAtdCBzeW1saW5rIGVtcHR5LXN5bWxpbmsgJiYKKwkJcm0gZW1wdHktc3ltbGluayAmJgorCQlsbiAtcyB0YXJnZXQxIGVtcHR5LXN5bWxpbmsgJiYKKwkJcDQgYWRkIGVtcHR5LXN5bWxpbmsgJiYKKwkJcDQgc3VibWl0IC1kICJtYWtlIGVtcHR5LXN5bWxpbmsgcG9pbnQgdG8gdGFyZ2V0MSIKKwkpICYmCisJKAorCQkjIEhhY2sgdGhlIHA0IGRlcG90IHRvIG1ha2UgdGhlIHN5bWxpbmsgcG9pbnQgdG8gbm90aGluZzsKKwkJIyB0aGlzIHNob3VsZCBub3QgaGFwcGVuIGluIHJlYWxpdHksIGJ1dCBzaG93cyB1cAorCQkjIGluIHA0IHJlcG9zIGluIHRoZSB3aWxkLgorCQkjCisJCSMgVGhlIHNlZCBleHByZXNzaW9uIGNoYW5nZXMgdGhpczoKKwkJIyAgICAgQEAKKwkJIyAgICAgdGV4dAorCQkjICAgICBAdGFyZ2V0MQorCQkjICAgICBACisJCSMgdG8gdGhpczoKKwkJIyAgICAgQEAKKwkJIyAgICAgdGV4dAorCQkjICAgICBAQAorCQkjCisJCWNkICIkZGIvZGVwb3QiICYmCisJCXNlZCAiL0B0YXJnZXQxL3s7IHMvdGFyZ2V0MS9ALzsgbjsgZDsgfSIgXAorCQkgICAgZW1wdHktc3ltbGluayx2ID5lbXB0eS1zeW1saW5rLHYudG1wICYmCisJCW12IGVtcHR5LXN5bWxpbmssdi50bXAgZW1wdHktc3ltbGluayx2CisJKSAmJgorCSgKKwkJIyBNYWtlIHN1cmUgc3ltbGluayByZWFsbHkgaXMgZW1wdHkuICBBc2tpbmcKKwkJIyBwNCB0byBzeW5jIGhlcmUgd2lsbCBtYWtlIGl0IGdlbmVyYXRlIGVycm9ycy4KKwkJY2QgIiRjbGkiICYmCisJCXA0IHByaW50IC1xIC8vZGVwb3QvZW1wdHktc3ltbGluayMyID5vdXQgJiYKKwkJdGVzdCAhIC1zIG91dAorCSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKworCSMgbWFrZSBzdXJlIGdpdCBwNCBoYW5kbGVzIGl0IHdpdGhvdXQgZXJyb3IKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJIyBmaXggdGhlIHN5bWxpbmssIG1ha2UgaXQgcG9pbnQgdG8gInRhcmdldDIiCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBlbXB0eS1zeW1saW5rICYmCisJCXJtIGVtcHR5LXN5bWxpbmsgJiYKKwkJbG4gLXMgdGFyZ2V0MiBlbXB0eS1zeW1saW5rICYmCisJCXA0IHN1Ym1pdCAtZCAibWFrZSBlbXB0eS1zeW1saW5rIHBvaW50IHRvIHRhcmdldDIiCisJKSAmJgorCWNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0ICQocmVhZGxpbmsgZW1wdHktc3ltbGluaykgPSB0YXJnZXQyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwMy1naXQtcDQtc2hlbGwtbWV0YWNoYXJzLnNoIGIvdC90OTgwMy1naXQtcDQtc2hlbGwtbWV0YWNoYXJzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ5NTBjN2QKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODAzLWdpdC1wNC1zaGVsbC1tZXRhY2hhcnMuc2gKQEAgLTAsMCArMSwxMTIgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgdHJhbnNwYXJlbmN5IHRvIHNoZWxsIG1ldGFjaGFycyBpbiBmaWxlbmFtZXMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZTEiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzaGVsbCBtZXRhY2hhcnMgaW4gZmlsZW5hbWVzJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2sgdHJ1ZSAmJgorCQllY2hvIGYxID5mb29cJGJhciAmJgorCQlnaXQgYWRkIGZvb1wkYmFyICYmCisJCWVjaG8gZjIgPiJmaWxlIHdpdGggc3BhY2VzIiAmJgorCQlnaXQgYWRkICJmaWxlIHdpdGggc3BhY2VzIiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgZmlsZXMiICYmCisJCVA0RURJVE9SPSJ0ZXN0LWNobXRpbWUgKzUiIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAuLi4gJiYKKwkJdGVzdCAtZSAiZmlsZSB3aXRoIHNwYWNlcyIgJiYKKwkJdGVzdCAtZSAiZm9vXCRiYXIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZWxldGluZyB3aXRoIHNoZWxsIG1ldGFjaGFycycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZ2l0IHJtIGZvb1wkYmFyICYmCisJCWdpdCBybSBmaWxlXCB3aXRoXCBzcGFjZXMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVtb3ZlIGZpbGVzIiAmJgorCQlQNEVESVRPUj0idGVzdC1jaG10aW1lICs1IiBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgLi4uICYmCisJCXRlc3QgISAtZSAiZmlsZSB3aXRoIHNwYWNlcyIgJiYKKwkJdGVzdCAhIC1lIGZvb1wkYmFyCisJKQorJworCisjIENyZWF0ZSBhIGJyYW5jaCB3aXRoIGEgc2hlbGwgbWV0YWNoYXIgaW4gaXRzIG5hbWUKKyMKKyMgMS4gLy9kZXBvdC9tYWluCisjIDIuIC8vZGVwb3QvYnJhbmNoJDMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYnJhbmNoIHdpdGggc2hlbGwgY2hhcicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3RfY3JlYXRlX3JlcG8gIiRnaXQiICYmCisJKAorCQljZCAiJGNsaSIgJiYKKworCQlta2RpciAtcCBtYWluICYmCisKKwkJZWNobyBmMSA+bWFpbi9mMSAmJgorCQlwNCBhZGQgbWFpbi9mMSAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZjEiICYmCisKKwkJcDQgaW50ZWdyYXRlIC8vZGVwb3QvbWFpbi8uLi4gLy9kZXBvdC9icmFuY2hcJDMvLi4uICYmCisJCXA0IHN1Ym1pdCAtZCAiaW50ZWdyYXRlIG1haW4gdG8gYnJhbmNoXCQzIiAmJgorCisJCWVjaG8gZjEgPmJyYW5jaFwkMy9zaGVsbF9jaGFyX2JyYW5jaF9maWxlICYmCisJCXA0IGFkZCBicmFuY2hcJDMvc2hlbGxfY2hhcl9icmFuY2hfZmlsZSAmJgorCQlwNCBzdWJtaXQgLWQgImJyYW5jaFwkMy9zaGVsbF9jaGFyX2JyYW5jaF9maWxlIiAmJgorCisJCXA0IGJyYW5jaCAtaSA8PC1FT0YgJiYKKwkJQnJhbmNoOiBicmFuY2hcJDMKKwkJVmlldzogLy9kZXBvdC9tYWluLy4uLiAvL2RlcG90L2JyYW5jaFwkMy8uLi4KKwkJRU9GCisKKwkJcDQgZWRpdCBtYWluL2YxICYmCisJCWVjaG8gImEgY2hhbmdlIiA+PiBtYWluL2YxICYmCisJCXA0IHN1Ym1pdCAtZCAiYSBjaGFuZ2UiIG1haW4vZjEgJiYKKworCQlwNCBpbnRlZ3JhdGUgLWIgYnJhbmNoXCQzICYmCisJCXA0IHJlc29sdmUgLWFtIGJyYW5jaFwkMy8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJpbnRlZ3JhdGUgbWFpbiB0byBicmFuY2hcJDMiICYmCisKKwkJY2QgIiRnaXQiICYmCisKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYnJhbmNoTGlzdCBtYWluOmJyYW5jaFwkMyAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PS4gLS1kZXRlY3QtYnJhbmNoZXMgLy9kZXBvdEBhbGwgJiYKKwkJZ2l0IGxvZyAtLWFsbCAtLWdyYXBoIC0tZGVjb3JhdGUgLS1zdGF0ICYmCisJCWdpdCByZXNldCAtLWhhcmQgcDQvZGVwb3QvYnJhbmNoXCQzICYmCisJCXRlc3QgLWYgc2hlbGxfY2hhcl9icmFuY2hfZmlsZSAmJgorCQl0ZXN0IC1mIGYxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwNC1naXQtcDQtbGFiZWwuc2ggYi90L3Q5ODA0LWdpdC1wNC1sYWJlbC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzBmODBlCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwNC1naXQtcDQtbGFiZWwuc2gKQEAgLTAsMCArMSwxMTUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgbGFiZWwgdGVzdHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjIEJhc2ljIHA0IGxhYmVsIHRlc3RzLgorIworIyBOb3RlOiBjYW4ndCBoYXZlIG1vcmUgdGhhbiBvbmUgbGFiZWwgcGVyIGNvbW1pdCAtIG90aGVycworIyBhcmUgc2lsZW50bHkgZGlzY2FyZGVkLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYmFzaWMgcDQgbGFiZWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgbWFpbiAmJgorCisJCWVjaG8gZjEgPm1haW4vZjEgJiYKKwkJcDQgYWRkIG1haW4vZjEgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2YxIiAmJgorCisJCWVjaG8gZjIgPm1haW4vZjIgJiYKKwkJcDQgYWRkIG1haW4vZjIgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2YyIiAmJgorCisJCWVjaG8gZjMgPm1haW4vZmlsZV93aXRoX1wkbWV0YWNoYXIgJiYKKwkJcDQgYWRkIG1haW4vZmlsZV93aXRoX1wkbWV0YWNoYXIgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlIHdpdGggbWV0YWNoYXIiICYmCisKKwkJcDQgdGFnIC1sIHRhZ19mMV9vbmx5IG1haW4vZjEgJiYKKwkJcDQgdGFnIC1sIHRhZ193aXRoXCRfc2hlbGxfY2hhciBtYWluLy4uLiAmJgorCisJCWVjaG8gZjQgPm1haW4vZjQgJiYKKwkJcDQgYWRkIG1haW4vZjQgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2Y0IiAmJgorCisJCXA0IGxhYmVsIC1pIDw8LUVPRiAmJgorCQlMYWJlbDogbG9uZ19sYWJlbAorCQlEZXNjcmlwdGlvbjoKKwkJICAgQSBMYWJlbCBmaXJzdCBsaW5lCisJCSAgIEEgTGFiZWwgc2Vjb25kIGxpbmUKKwkJVmlldzoJLy9kZXBvdC8uLi4KKwkJRU9GCisKKwkJcDQgdGFnIC1sIGxvbmdfbGFiZWwgLi4uICYmCisKKwkJcDQgbGFiZWxzIC4uLiAmJgorCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC0tZGV0ZWN0LWxhYmVscyAvL2RlcG90QGFsbCAmJgorCQljZCAiJGdpdCIgJiYKKworCQlnaXQgdGFnICYmCisJCWdpdCB0YWcgPnRhZ2xpc3QgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMyB0YWdsaXN0ICYmCisKKwkJY2QgbWFpbiAmJgorCQlnaXQgY2hlY2tvdXQgdGFnX3RhZ19mMV9vbmx5ICYmCisJCSEgdGVzdCAtZiBmMiAmJgorCQlnaXQgY2hlY2tvdXQgdGFnX3RhZ193aXRoXCRfc2hlbGxfY2hhciAmJgorCQl0ZXN0IC1mIGYxICYmIHRlc3QgLWYgZjIgJiYgdGVzdCAtZiBmaWxlX3dpdGhfXCRtZXRhY2hhciAmJgorCisJCWdpdCBzaG93IHRhZ19sb25nX2xhYmVsIHwgZ3JlcCAtcSAiQSBMYWJlbCBzZWNvbmQgbGluZSIKKwkpCisnCisKKyMgVGVzdCBzb21lIGxhYmVsIGNvcm5lciBjYXNlczoKKyMKKyMgLSB0d28gdGFncyBvbiB0aGUgc2FtZSBmaWxlOyBib3RoIHNob3VsZCBiZSBhdmFpbGFibGUKKyMgLSBhIHRhZyB0aGF0IGlzIG9ubHkgb24gb25lIGZpbGU7IHRoaXMga2luZCBvZiB0YWcKKyMgICBjYW5ub3QgYmUgaW1wb3J0ZWQgKGF0IGxlYXN0IG5vdCBlYXNpbHkpLgorCit0ZXN0X2V4cGVjdF9mYWlsdXJlICd0d28gbGFiZWxzIG9uIHRoZSBzYW1lIGNoYW5nZWxpc3QnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBtYWluICYmCisKKwkJcDQgZWRpdCBtYWluL2YxIG1haW4vZjIgJiYKKwkJZWNobyAiaGVsbG8gd29ybGQiID5tYWluL2YxICYmCisJCWVjaG8gIm5vdCBpbiB0aGUgdGFnIiA+bWFpbi9mMiAmJgorCQlwNCBzdWJtaXQgLWQgIm1haW4vZlsxMl06IHRlc3RpbmcgdHdvIGxhYmVscyIgJiYKKworCQlwNCB0YWcgLWwgdGFnX2YxXzEgbWFpbi8uLi4gJiYKKwkJcDQgdGFnIC1sIHRhZ19mMV8yIG1haW4vLi4uICYmCisKKwkJcDQgbGFiZWxzIC4uLiAmJgorCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC0tZGV0ZWN0LWxhYmVscyAvL2RlcG90QGFsbCAmJgorCQljZCAiJGdpdCIgJiYKKworCQlnaXQgdGFnIHwgZ3JlcCB0YWdfZjEgJiYKKwkJZ2l0IHRhZyB8IGdyZXAgLXEgdGFnX2YxXzEgJiYKKwkJZ2l0IHRhZyB8IGdyZXAgLXEgdGFnX2YxXzIgJiYKKworCQljZCBtYWluICYmCisKKwkJZ2l0IGNoZWNrb3V0IHRhZ190YWdfZjFfMSAmJgorCQlscyAmJgorCQl0ZXN0IC1mIGYxICYmCisKKwkJZ2l0IGNoZWNrb3V0IHRhZ190YWdfZjFfMiAmJgorCQlscyAmJgorCQl0ZXN0IC1mIGYxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwNS1naXQtcDQtc2tpcC1zdWJtaXQtZWRpdC5zaCBiL3QvdDk4MDUtZ2l0LXA0LXNraXAtc3VibWl0LWVkaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWZiZjkwNAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MDUtZ2l0LXA0LXNraXAtc3VibWl0LWVkaXQuc2gKQEAgLTAsMCArMSwxMDUgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgc2tpcFN1Ym1pdEVkaXQgY29uZmlnIHZhcmlhYmxlcycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgMSIKKwkpCisnCisKKyMgdGhpcyB3b3JrcyBiZWNhdXNlIFA0RURJVE9SIGlzIHNldCB0byB0cnVlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdubyBjb25maWcsIHVuZWRpdGVkLCBzYXkgeWVzJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbGluZSA+PmZpbGUxICYmCisJCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSAyIiAmJgorCQllY2hvIHkgfCBnaXQgcDQgc3VibWl0ICYmCisJCXA0IGNoYW5nZXMgLy9kZXBvdC8uLi4gPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNvbmZpZywgdW5lZGl0ZWQsIHNheSBubycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGxpbmUgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgMyAobm90IHJlYWxseSkiICYmCisJCXByaW50ZiAiYmFkIHJlc3BvbnNlXG5uXG4iIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgJiYKKwkJcDQgY2hhbmdlcyAvL2RlcG90Ly4uLiA+d2MgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiB3YworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2tpcFN1Ym1pdEVkaXQnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQkjIHdpbGwgZmFpbCBpZiBlZGl0b3IgaXMgZXZlbiBpbnZva2VkCisJCWdpdCBjb25maWcgY29yZS5lZGl0b3IgL2Jpbi9mYWxzZSAmJgorCQllY2hvIGxpbmUgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgMyIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBjaGFuZ2VzIC8vZGVwb3QvLi4uID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIHdjCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdza2lwU3VibWl0RWRpdENoZWNrJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2sgdHJ1ZSAmJgorCQllY2hvIGxpbmUgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJjaGFuZ2UgNCIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBjaGFuZ2VzIC8vZGVwb3QvLi4uID53YyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSA0IHdjCisJKQorJworCisjIGNoZWNrIHRoZSBub3JtYWwgY2FzZSwgd2hlcmUgdGhlIHRlbXBsYXRlIHJlYWxseSBpcyBlZGl0ZWQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ25vIGNvbmZpZywgZWRpdGVkJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gZWQuc2giICYmCisJY2F0ID5lZC5zaCA8PC1FT0YgJiYKKwkJIyEkU0hFTExfUEFUSAorCQlzbGVlcCAxCisJCXRvdWNoICJcJDEiCisJCWV4aXQgMAorCUVPRgorCWNobW9kIDc1NSBlZC5zaCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbGluZSA+PmZpbGUxICYmCisJCWdpdCBjb21taXQgLWEgLW0gImNoYW5nZSA1IiAmJgorCQlQNEVESVRPUj0iXCIkVFJBU0hfRElSRUNUT1JZL2VkLnNoXCIiICYmCisJCWV4cG9ydCBQNEVESVRPUiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGNoYW5nZXMgLy9kZXBvdC8uLi4gPndjICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDUgd2MKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODA2LWdpdC1wNC1vcHRpb25zLnNoIGIvdC90OTgwNi1naXQtcDQtb3B0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yNTRkNDI4Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwNi1naXQtcDQtb3B0aW9ucy5zaApAQCAtMCwwICsxLDI3NiBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBvcHRpb25zJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAxIiAmJgorCQllY2hvIGZpbGUyID5maWxlMiAmJgorCQlwNCBhZGQgZmlsZTIgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgMiIgJiYKKwkJZWNobyBmaWxlMyA+ZmlsZTMgJiYKKwkJcDQgYWRkIGZpbGUzICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlIDMiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSBubyAtLWdpdC1kaXInICcKKwl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY2xvbmUgLS1naXQtZGlyPXh4IC8vZGVwb3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUgLS1icmFuY2ggc2hvdWxkIGNoZWNrb3V0IG1hc3RlcicgJworCWdpdCBwNCBjbG9uZSAtLWJyYW5jaD1yZWZzL3JlbW90ZXMvcDQvc2IgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJldi1wYXJzZSByZWZzL3JlbW90ZXMvcDQvc2IgPnNiICYmCisJCWdpdCByZXYtcGFyc2UgcmVmcy9oZWFkcy9tYXN0ZXIgPm1hc3RlciAmJgorCQl0ZXN0X2NtcCBzYiBtYXN0ZXIgJiYKKwkJZ2l0IHJldi1wYXJzZSBIRUFEID5oZWFkICYmCisJCXRlc3RfY21wIHNiIGhlYWQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bmMgd2hlbiBubyBtYXN0ZXIgYnJhbmNoIHByaW50cyBhIG5pY2UgZXJyb3InICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1icmFuY2g9cmVmcy9yZW1vdGVzL3A0L3NiIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEAyICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN5bmMgMj5lcnIgJiYKKwkJZ3JlcCAiRXJyb3I6IG5vIGJyYW5jaCByZWZzL3JlbW90ZXMvcDQvbWFzdGVyIiBlcnIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bmMgLS1icmFuY2ggYnVpbGRzIHRoZSBmdWxsIHJlZiBuYW1lIGNvcnJlY3RseScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0ICYmCisKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9YjEgLy9kZXBvdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9wNC9iMSAmJgorCQlnaXQgcDQgc3luYyAtLWJyYW5jaD1wNC9iMiAvL2RlcG90ICYmCisJCWdpdCByZXYtcGFyc2UgLS12ZXJpZnkgcmVmcy9yZW1vdGVzL3A0L2IyICYmCisKKwkJZ2l0IHA0IHN5bmMgLS1pbXBvcnQtbG9jYWwgLS1icmFuY2g9aDEgLy9kZXBvdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcDQvaDEgJiYKKwkJZ2l0IHA0IHN5bmMgLS1pbXBvcnQtbG9jYWwgLS1icmFuY2g9cDQvaDIgLy9kZXBvdCAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvaGVhZHMvcDQvaDIgJiYKKworCQlnaXQgcDQgc3luYyAtLWJyYW5jaD1yZWZzL3N0dWZmIC8vZGVwb3QgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3N0dWZmCisJKQorJworCisjIGVuZ2FnZXMgLS1kZXRlY3QtYnJhbmNoZXMgY29kZSwgd2hpY2ggd2lsbCBkbyBmaWxlbmFtZSBmaWx0ZXJpbmcgc28KKyMgbm8gc3luYyB0byBlaXRoZXIgYjEgb3IgYjIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N5bmMgd2hlbiB0d28gYnJhbmNoZXMgYnV0IG5vIG1hc3RlciBzaG91bGQgbm9vcCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0ICYmCisJCWdpdCBwNCBzeW5jIC0tYnJhbmNoPXJlZnMvcmVtb3Rlcy9wNC9iMSAvL2RlcG90QDIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9cmVmcy9yZW1vdGVzL3A0L2IyIC8vZGVwb3RAMiAmJgorCQlnaXQgcDQgc3luYyAmJgorCQlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyByZWZzL3JlbW90ZXMvcDQvYjEgPnNob3cgJiYKKwkJZ3JlcCAiSW5pdGlhbCBpbXBvcnQiIHNob3cgJiYKKwkJZ2l0IHNob3cgLXMgLS1mb3JtYXQ9JXMgcmVmcy9yZW1vdGVzL3A0L2IyID5zaG93ICYmCisJCWdyZXAgIkluaXRpYWwgaW1wb3J0IiBzaG93CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzeW5jIC0tYnJhbmNoIHVwZGF0ZXMgc3BlY2lmaWMgYnJhbmNoLCBubyBkZXRlY3Rpb24nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgcDQgc3luYyAtLWJyYW5jaD1iMSAvL2RlcG90QDIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9YjIgLy9kZXBvdEAyICYmCisJCWdpdCBwNCBzeW5jIC0tYnJhbmNoPWIyICYmCisJCWdpdCBzaG93IC1zIC0tZm9ybWF0PSVzIHJlZnMvcmVtb3Rlcy9wNC9iMSA+c2hvdyAmJgorCQlncmVwICJJbml0aWFsIGltcG9ydCIgc2hvdyAmJgorCQlnaXQgc2hvdyAtcyAtLWZvcm1hdD0lcyByZWZzL3JlbW90ZXMvcDQvYjIgPnNob3cgJiYKKwkJZ3JlcCAiY2hhbmdlIDMiIHNob3cKKwkpCisnCisKKyMgYWxsb3dzIHVzaW5nIHRoZSByZWZuYW1lICJwNCIgYXMgYSBzaG9ydCBuYW1lIGZvciBwNC9tYXN0ZXIKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGNyZWF0ZXMgSEVBRCBzeW1ib2xpYyByZWZlcmVuY2UnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSByZWZzL3JlbW90ZXMvcDQvbWFzdGVyID5tYXN0ZXIgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBwNCA+cDQgJiYKKwkJdGVzdF9jbXAgbWFzdGVyIHA0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWJyYW5jaCBjcmVhdGVzIEhFQUQgc3ltYm9saWMgcmVmZXJlbmNlJyAnCisJZ2l0IHA0IGNsb25lIC0tYnJhbmNoPXJlZnMvcmVtb3Rlcy9wNC9zYiAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IHJlZnMvcmVtb3Rlcy9wNC9zYiA+c2IgJiYKKwkJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSBwNCA+cDQgJiYKKwkJdGVzdF9jbXAgc2IgcDQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0tY2hhbmdlc2ZpbGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIGNmIiAmJgorCXByaW50ZiAiMVxuM1xuIiA+Y2YgJiYKKwlnaXQgcDQgY2xvbmUgLS1jaGFuZ2VzZmlsZT0iJFRSQVNIX0RJUkVDVE9SWS9jZiIgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcDQvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUyICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLWNoYW5nZXNmaWxlLCBAYWxsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBjZiIgJiYKKwlwcmludGYgIjFcbjNcbiIgPmNmICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IGNsb25lIC0tY2hhbmdlc2ZpbGU9IiRUUkFTSF9ESVJFQ1RPUlkvY2YiIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwKKycKKworIyBpbXBvcnRzIGJvdGggbWFzdGVyIGFuZCBwNC9tYXN0ZXIgaW4gcmVmcy9oZWFkcworIyByZXF1aXJlcyAtLWltcG9ydC1sb2NhbCBvbiBzeW5jIHRvIGZpbmQgcDQgcmVmcy9oZWFkcworIyBkb2VzIG5vdCB1cGRhdGUgbWFzdGVyIG9uIHN5bmMsIGp1c3QgcDQvbWFzdGVyCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZS9zeW5jIC0taW1wb3J0LWxvY2FsJyAnCisJZ2l0IHA0IGNsb25lIC0taW1wb3J0LWxvY2FsIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEAxLDIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbG9nIC0tb25lbGluZSByZWZzL2hlYWRzL21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcyAmJgorCQlnaXQgbG9nIC0tb25lbGluZSByZWZzL2hlYWRzL3A0L21hc3RlciA+bGluZXMgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBsaW5lcyAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3luYyAmJgorCisJCWdpdCBwNCBzeW5jIC0taW1wb3J0LWxvY2FsICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHJlZnMvaGVhZHMvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGxpbmVzICYmCisJCWdpdCBsb2cgLS1vbmVsaW5lIHJlZnMvaGVhZHMvcDQvbWFzdGVyID5saW5lcyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIGxpbmVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLW1heC1jaGFuZ2VzJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS1tYXgtY2hhbmdlcyAyIC8vZGVwb3RAYWxsICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGxvZyAtLW9uZWxpbmUgcmVmcy9oZWFkcy9tYXN0ZXIgPmxpbmVzICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgbGluZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIC0ta2VlcC1wYXRoJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgc3ViL2RpciAmJgorCQllY2hvIGY0ID5zdWIvZGlyL2Y0ICYmCisJCXA0IGFkZCBzdWIvZGlyL2Y0ICYmCisJCXA0IHN1Ym1pdCAtZCAiY2hhbmdlIDQiCisJKSAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC0ta2VlcC1wYXRoIC8vZGVwb3Qvc3ViL2RpckBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmNCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBzdWIvZGlyL2Y0CisJKSAmJgorCWNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9zdWIvZGlyQGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGY0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHN1Yi9kaXIvZjQKKwkpCisnCisKKyMgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgbXVzdCBzdGlsbCBzcGVjaWZ5IGEgZGVwb3QgcGF0aAorIyBpZiBnaXZlbiwgaXQgc2hvdWxkIHJlYXJyYW5nZSBmaWxlcyBhY2NvcmRpbmcgdG8gY2xpZW50IHNwZWMKKyMgd2hlbiBpdCBoYXMgdmlldyBsaW5lcyB0aGF0IG1hdGNoIHRoZSBkZXBvdCBwYXRoCisjIFhYWDogc2hvdWxkIGNsb25lL3N5bmMganVzdCB1c2UgdGhlIGNsaWVudCBzcGVjIGV4YWN0bHksIHJhdGhlcgorIyB0aGFuIG5lZWRpbmcgZGVwb3QgcGF0aHM/Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLXVzZS1jbGllbnQtc3BlYycgJworCSgKKwkJIyBiaWcgdXNhZ2UgbWVzc2FnZQorCQlleGVjID4vZGV2L251bGwgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLS11c2UtY2xpZW50LXNwZWMKKwkpICYmCisJIyBidWlsZCBhIGRpZmZlcmVudCBjbGllbnQKKwljbGkyPSIkVFJBU0hfRElSRUNUT1JZL2NsaTIiICYmCisJbWtkaXIgLXAgIiRjbGkyIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm1kaXIgXCIkY2xpMlwiIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJIyBncm91cCBQNENMSUVOVCBhbmQgY2xpIGNoYW5nZXMgaW4gYSBzdWItc2hlbGwKKwkJUDRDTElFTlQ9Y2xpZW50MiAmJgorCQljbGk9IiRjbGkyIiAmJgorCQljbGllbnRfdmlldyAiLy9kZXBvdC9zdWIvLi4uIC8vY2xpZW50Mi9idXMvLi4uIiAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLXVzZS1jbGllbnQtc3BlYyAvL2RlcG90Ly4uLiAmJgorCQkoCisJCQljZCAiJGdpdCIgJiYKKwkJCXRlc3RfcGF0aF9pc19maWxlIGJ1cy9kaXIvZjQgJiYKKwkJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGUxCisJCSkgJiYKKwkJY2xlYW51cF9naXQgJiYKKwkJIyBzYW1lIHRoaW5nIGFnYWluLCB0aGlzIHRpbWUgd2l0aCB2YXJpYWJsZSBpbnN0ZWFkIG9mIG9wdGlvbgorCQkoCisJCQljZCAiJGdpdCIgJiYKKwkJCWdpdCBpbml0ICYmCisJCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJCWdpdCBwNCBzeW5jIC8vZGVwb3QvLi4uICYmCisJCQlnaXQgY2hlY2tvdXQgLWIgbWFzdGVyIHA0L21hc3RlciAmJgorCQkJdGVzdF9wYXRoX2lzX2ZpbGUgYnVzL2Rpci9mNCAmJgorCQkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTEKKwkJKQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IHdvcmtzIHdpdGggbm8gcDQvbWFzdGVyJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tYnJhbmNoPWIxIC8vZGVwb3RAMSwyIC0tZGVzdGluYXRpb249IiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jb21taXQgc3VibWl0LTEtYnJhbmNoICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWJyYW5jaD1iMQorCSkKKycKKworIyBUaGUgc3luYy9yZWJhc2UgcGFydCBwb3N0LXN1Ym1pdCB3aWxsIGVuZ2FnZSBkZXRlY3QtYnJhbmNoZXMKKyMgbWFjaGluZXJ5IHdoaWNoIHdpbGwgbm90IGRvIGFueXRoaW5nIGluIHRoaXMgcGFydGljdWxhciB0ZXN0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IHdvcmtzIHdpdGggdHdvIGJyYW5jaGVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tYnJhbmNoPWIxIC8vZGVwb3RAMSwyIC0tZGVzdGluYXRpb249IiRnaXQiICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1icmFuY2g9YjIgLy9kZXBvdEAxLDMgJiYKKwkJdGVzdF9jb21taXQgc3VibWl0LTItYnJhbmNoZXMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwNy1naXQtcDQtc3VibWl0LnNoIGIvdC90OTgwNy1naXQtcDQtc3VibWl0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFmNzRhODgKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODA3LWdpdC1wNC1zdWJtaXQuc2gKQEAgLTAsMCArMSw0MjAgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgc3VibWl0JworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImNoYW5nZSAxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaXNfY2xpX2ZpbGVfd3JpdGVhYmxlIGZ1bmN0aW9uJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyBhID5hICYmCisJCWlzX2NsaV9maWxlX3dyaXRlYWJsZSBhICYmCisJCSEgaXNfY2xpX2ZpbGVfd3JpdGVhYmxlIGZpbGUxICYmCisJCXJtIGEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCB3aXRoIG5vIGNsaWVudCBkaXInICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBmaWxlMiA+ZmlsZTIgJiYKKwkJZ2l0IGFkZCBmaWxlMiAmJgorCQlnaXQgY29tbWl0IC1tICJnaXQgY29tbWl0IDIiICYmCisJCXJtIC1yZiAiJGNsaSIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUyCisJKQorJworCisjIG1ha2UgdHdvIGNvbW1pdHMsIGJ1dCB0ZWxsIGl0IHRvIGFwcGx5IG9ubHkgZnJvbSBIRUFEXgordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IC0tb3JpZ2luJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0ICJmaWxlMyIgJiYKKwkJdGVzdF9jb21taXQgImZpbGU0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS1vcmlnaW49SEVBRF4KKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgImZpbGUzLnQiICYmCisJCXRlc3RfcGF0aF9pc19maWxlICJmaWxlNC50IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IC0tZHJ5LXJ1bicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCAiZHJ5LXJ1bjEiICYmCisJCXRlc3RfY29tbWl0ICJkcnktcnVuMiIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWRyeS1ydW4gPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJXb3VsZCBhcHBseSIgb3V0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICJkcnktcnVuMS50IiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiZHJ5LXJ1bjIudCIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCAtLWRyeS1ydW4gLS1leHBvcnQtbGFiZWxzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gZHJ5LXJ1bjEgPmRyeS1ydW4xICYmCisJCWdpdCBhZGQgZHJ5LXJ1bjEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZHJ5LXJ1bjEiIGRyeS1ydW4xICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQllY2hvIGRyeS1ydW4yID5kcnktcnVuMiAmJgorCQlnaXQgYWRkIGRyeS1ydW4yICYmCisJCWdpdCBjb21taXQgLW0gImRyeS1ydW4yIiBkcnktcnVuMiAmJgorCQlnaXQgdGFnIC1tICJkcnktcnVuLXRhZzEiIGRyeS1ydW4tdGFnMSBIRUFEXiAmJgorCQlnaXQgcDQgc3VibWl0IC0tZHJ5LXJ1biAtLWV4cG9ydC1sYWJlbHMgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJXb3VsZCBjcmVhdGUgcDQgbGFiZWwiIG91dAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAiZHJ5LXJ1bjEiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nICJkcnktcnVuMiIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCB3aXRoIGFsbG93U3VibWl0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0ICJmaWxlNSIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hbGxvd1N1Ym1pdCAibm9icmFuY2giICYmCisJCXRlc3RfbXVzdF9mYWlsIGdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYWxsb3dTdWJtaXQgIm5vYnJhbmNoLG1hc3RlciIgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IHdpdGggbWFzdGVyIGJyYW5jaCBuYW1lIGZyb20gYXJndicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X2NvbW1pdCAiZmlsZTYiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IHN1Ym1pdCBub2JyYW5jaCAmJgorCQlnaXQgYnJhbmNoIG90aGVyYnJhbmNoICYmCisJCWdpdCByZXNldCAtLWhhcmQgSEVBRF4gJiYKKwkJdGVzdF9jb21taXQgImZpbGU3IiAmJgorCQlnaXQgcDQgc3VibWl0IG90aGVyYnJhbmNoCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlICJmaWxlNi50IiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyAiZmlsZTcudCIKKwkpCisnCisKKyMKKyMgQmFzaWMgc3VibWl0IHRlc3RzLCB0aGUgZml2ZSBoYW5kbGVkIGNhc2VzCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCBtb2RpZnknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQllY2hvIGxpbmUgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gZmlsZTEgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlMSAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGZpbGUxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJtaXQgYWRkJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZWNobyBmaWxlMTMgPmZpbGUxMyAmJgorCQlnaXQgYWRkIGZpbGUxMyAmJgorCQlnaXQgY29tbWl0IC1tIGZpbGUxMyAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUxMworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IGRlbGV0ZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBybSBmaWxlNC50ICYmCisJCWdpdCBjb21taXQgLW0gImRlbGV0ZSBmaWxlNC50IiAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGU0LnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCBjb3B5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzSGFyZGVyIHRydWUgJiYKKwkJY3AgZmlsZTUudCBmaWxlNS50YSAmJgorCQlnaXQgYWRkIGZpbGU1LnRhICYmCisJCWdpdCBjb21taXQgLW0gImNvcHkgdG8gZmlsZTUudGEiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZmlsZTUudGEgJiYKKwkJISBpc19jbGlfZmlsZV93cml0ZWFibGUgZmlsZTUudGEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1Ym1pdCByZW5hbWUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IG12IGZpbGU2LnQgZmlsZTYudGEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicmVuYW1lIGZpbGU2LnQgdG8gZmlsZTYudGEiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZmlsZTYudCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBmaWxlNi50YSAmJgorCQkhIGlzX2NsaV9maWxlX3dyaXRlYWJsZSBmaWxlNi50YQorCSkKKycKKworIworIyBDb252ZXJ0aW5nIGdpdCBjb21taXQgbWVzc2FnZSB0byBwNCBjaGFuZ2UgZGVzY3JpcHRpb24sIGluY2x1ZGluZworIyBwYXJzaW5nIG91dCB0aGUgb3B0aW9uYWwgSm9iczogbGluZS4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbXBsZSBvbmUtbGluZSBkZXNjcmlwdGlvbicgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGRlc2MyID5kZXNjMiAmJgorCQlnaXQgYWRkIGRlc2MyICYmCisJCWNhdCA+bXNnIDw8LUVPRiAmJgorCQlPbmUtbGluZSBkZXNjcmlwdGlvbiBsaW5lIGZvciBkZXNjMi4KKwkJRU9GCisJCWdpdCBjb21taXQgLUYgLSA8bXNnICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQljaGFuZ2U9JChwNCAtRyBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4gfCBcCisJCQkgbWFyc2hhbF9kdW1wIGNoYW5nZSkgJiYKKwkJIyBtYXJzaGFsX2R1bXAgYWx3YXlzIGFkZHMgYSBuZXdsaW5lCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgfCBtYXJzaGFsX2R1bXAgZGVzYyB8IHNlZCBcJGQgPnBtc2cgJiYKKwkJdGVzdF9jbXAgbXNnIHBtc2cKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaXB0aW9uIHdpdGggb2RkIGZvcm1hdHRpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBkZXNjMyA+ZGVzYzMgJiYKKwkJZ2l0IGFkZCBkZXNjMyAmJgorCQkoCisJCQlwcmludGYgInN1YmplY3QgbGluZVxuXG5cdEV4dHJhIHRhYlxubGluZS5cblxuIiAmJgorCQkJcHJpbnRmICJEZXNjcmlwdGlvbjpcblx0Qm9ndXMgZGVzY3JpcHRpb24gbWFya2VyXG5cbiIgJiYKKwkJCSMgZ2l0IGNvbW1pdCBlYXRzIHRyYWlsaW5nIG5ld2xpbmVzOyBvbmx5IHVzZSBvbmUKKwkJCXByaW50ZiAiRmlsZXM6XG5cdEJvZ3VzIGRlc2NzIG1hcmtlclxuIgorCQkpID5tc2cgJiYKKwkJZ2l0IGNvbW1pdCAtRiAtIDxtc2cgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCWNoYW5nZT0kKHA0IC1HIGNoYW5nZXMgLW0gMSAvL2RlcG90Ly4uLiB8IFwKKwkJCSBtYXJzaGFsX2R1bXAgY2hhbmdlKSAmJgorCQkjIG1hcnNoYWxfZHVtcCBhbHdheXMgYWRkcyBhIG5ld2xpbmUKKwkJcDQgLUcgZGVzY3JpYmUgJGNoYW5nZSB8IG1hcnNoYWxfZHVtcCBkZXNjIHwgc2VkIFwkZCA+cG1zZyAmJgorCQl0ZXN0X2NtcCBtc2cgcG1zZworCSkKKycKKworbWFrZV9qb2IoKSB7CisJbmFtZT0iJDEiICYmCisJdGFiPSIkKHByaW50ZiBcXHQpIiAmJgorCXA0IGpvYiAtbyB8IFwKKwlzZWQgLWUgIi9eSm9iOi9zLy4qL0pvYjogJG5hbWUvIiBcCisJICAgIC1lICIvXkRlc2NyaXB0aW9uL3sgbjsgcy8uKi8kdGFiIGpvYiB0ZXh0LzsgfSIgfCBcCisJcDQgam9iIC1pCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaXB0aW9uIHdpdGggSm9icyBzZWN0aW9uIGF0IGVuZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGRlc2M0ID5kZXNjNCAmJgorCQlnaXQgYWRkIGRlc2M0ICYmCisJCWVjaG8gNjA2MDg0MiA+am9ibmFtZSAmJgorCQkoCisJCQlwcmludGYgInN1YmplY3QgbGluZVxuXG5cdEV4dHJhIHRhYlxubGluZS5cblxuIiAmJgorCQkJcHJpbnRmICJGaWxlczpcblx0Qm9ndXMgZmlsZXMgbWFya2VyXG4iICYmCisJCQlwcmludGYgIkp1bms6IDMxNjQxNzVcbiIgJiYKKwkJCXByaW50ZiAiSm9iczogJChjYXQgam9ibmFtZSlcbiIKKwkJKSA+bXNnICYmCisJCWdpdCBjb21taXQgLUYgLSA8bXNnICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyBidWlsZCBhIGpvYgorCQltYWtlX2pvYiAkKGNhdCBqb2JuYW1lKSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCWNoYW5nZT0kKHA0IC1HIGNoYW5nZXMgLW0gMSAvL2RlcG90Ly4uLiB8IFwKKwkJCSBtYXJzaGFsX2R1bXAgY2hhbmdlKSAmJgorCQkjIG1hcnNoYWxfZHVtcCBhbHdheXMgYWRkcyBhIG5ld2xpbmUKKwkJcDQgLUcgZGVzY3JpYmUgJGNoYW5nZSB8IG1hcnNoYWxfZHVtcCBkZXNjIHwgc2VkIFwkZCA+cG1zZyAmJgorCQkjIG1ha2Ugc3VyZSBKb2JzIGxpbmUgYW5kIGFsbCBmb2xsb3dpbmcgaXMgZ29uZQorCQlzZWQgIi9eSm9iczovLFwkZCIgbXNnID5qbXNnICYmCisJCXRlc3RfY21wIGptc2cgcG1zZyAmJgorCQkjIG1ha2Ugc3VyZSBwNCBrbm93cyBhYm91dCBqb2IKKwkJcDQgLUcgZGVzY3JpYmUgJGNoYW5nZSB8IG1hcnNoYWxfZHVtcCBqb2IwID5qb2IwICYmCisJCXRlc3RfY21wIGpvYm5hbWUgam9iMAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGVzY3JpcHRpb24gd2l0aCBKb2JzIGFuZCB2YWx1ZXMgb24gc2VwYXJhdGUgbGluZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBkZXNjNSA+ZGVzYzUgJiYKKwkJZ2l0IGFkZCBkZXNjNSAmJgorCQllY2hvIFBST0otNjA2MDg0MiA+am9ibmFtZTEgJiYKKwkJZWNobyBQUk9KLTYwNjA4NDcgPmpvYm5hbWUyICYmCisJCSgKKwkJCXByaW50ZiAic3ViamVjdCBsaW5lXG5cblx0RXh0cmEgdGFiXG5saW5lLlxuXG4iICYmCisJCQlwcmludGYgIkZpbGVzOlxuXHRCb2d1cyBmaWxlcyBtYXJrZXJcbiIgJiYKKwkJCXByaW50ZiAiSnVuazogMzE2NDE3NVxuIiAmJgorCQkJcHJpbnRmICJKb2JzOlxuIiAmJgorCQkJcHJpbnRmICJcdCQoY2F0IGpvYm5hbWUxKVxuIiAmJgorCQkJcHJpbnRmICJcdCQoY2F0IGpvYm5hbWUyKVxuIgorCQkpID5tc2cgJiYKKwkJZ2l0IGNvbW1pdCAtRiAtIDxtc2cgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQkjIGJ1aWxkIHR3byBqb2JzCisJCW1ha2Vfam9iICQoY2F0IGpvYm5hbWUxKSAmJgorCQltYWtlX2pvYiAkKGNhdCBqb2JuYW1lMikgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQljaGFuZ2U9JChwNCAtRyBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4gfCBcCisJCQkgbWFyc2hhbF9kdW1wIGNoYW5nZSkgJiYKKwkJIyBtYXJzaGFsX2R1bXAgYWx3YXlzIGFkZHMgYSBuZXdsaW5lCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgfCBtYXJzaGFsX2R1bXAgZGVzYyB8IHNlZCBcJGQgPnBtc2cgJiYKKwkJIyBtYWtlIHN1cmUgSm9icyBsaW5lIGFuZCBhbGwgZm9sbG93aW5nIGlzIGdvbmUKKwkJc2VkICIvXkpvYnM6LyxcJGQiIG1zZyA+am1zZyAmJgorCQl0ZXN0X2NtcCBqbXNnIHBtc2cgJiYKKwkJIyBtYWtlIHN1cmUgcDQga25vd3MgYWJvdXQgdGhlIHR3byBqb2JzCisJCXA0IC1HIGRlc2NyaWJlICRjaGFuZ2UgPmNoYW5nZSAmJgorCQkoCisJCQltYXJzaGFsX2R1bXAgam9iMCA8Y2hhbmdlICYmCisJCQltYXJzaGFsX2R1bXAgam9iMSA8Y2hhbmdlCisJCSkgfCBzb3J0ID5qb2JzICYmCisJCWNhdCBqb2JuYW1lMSBqb2JuYW1lMiB8IHNvcnQgPmV4cGVjdGVkICYmCisJCXRlc3RfY21wIGV4cGVjdGVkIGpvYnMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Rlc2NyaXB0aW9uIHdpdGggSm9icyBzZWN0aW9uIGFuZCBib2d1cyBmb2xsb3dpbmcgdGV4dCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGRlc2M2ID5kZXNjNiAmJgorCQlnaXQgYWRkIGRlc2M2ICYmCisJCWVjaG8gNjA2MDg0MyA+am9ibmFtZSAmJgorCQkoCisJCQlwcmludGYgInN1YmplY3QgbGluZVxuXG5cdEV4dHJhIHRhYlxubGluZS5cblxuIiAmJgorCQkJcHJpbnRmICJGaWxlczpcblx0Qm9ndXMgZmlsZXMgbWFya2VyXG4iICYmCisJCQlwcmludGYgIkp1bms6IDMxNjQxNzVcbiIgJiYKKwkJCXByaW50ZiAiSm9iczogJChjYXQgam9ibmFtZSlcbiIgJiYKKwkJCXByaW50ZiAiTW9yZUp1bms6IDM3MTFcbiIKKwkJKSA+bXNnICYmCisJCWdpdCBjb21taXQgLUYgLSA8bXNnICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyBidWlsZCBhIGpvYgorCQltYWtlX2pvYiAkKGNhdCBqb2JuYW1lKSAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3VibWl0IDI+ZXJyICYmCisJCXRlc3RfaTE4bmdyZXAgIlVua25vd24gZmllbGQgbmFtZSIgZXJyCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHJldmVydCBkZXNjNiAmJgorCQlybSBkZXNjNgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3VibWl0IC0tcHJlcGFyZS1wNC1vbmx5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gcHJlcC1vbmx5LWFkZCA+cHJlcC1vbmx5LWFkZCAmJgorCQlnaXQgYWRkIHByZXAtb25seS1hZGQgJiYKKwkJZ2l0IGNvbW1pdCAtbSAicHJlcCBvbmx5IGFkZCIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLXByZXBhcmUtcDQtb25seSA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgInByZXBhcmVkIGZvciBzdWJtaXNzaW9uIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAibXVzdCBiZSBkZWxldGVkIiBvdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAhICJldmVyeXRoaW5nIGJlbG93IHRoaXMgbGluZSBpcyBqdXN0IHRoZSBkaWZmIiBvdXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgcHJlcC1vbmx5LWFkZCAmJgorCQlwNCBmc3RhdCAtVCBhY3Rpb24gcHJlcC1vbmx5LWFkZCB8IGdyZXAgLXcgYWRkCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgwOC1naXQtcDQtY2hkaXIuc2ggYi90L3Q5ODA4LWdpdC1wNC1jaGRpci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMWQyYjUxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgwOC1naXQtcDQtY2hkaXIuc2gKQEAgLTAsMCArMSw5MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCByZWxhdGl2ZSBjaGRpcicKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJjaGFuZ2UgMSIKKwkpCisnCisKKyMgUDQgcmVhZHMgZnJvbSBQNENPTkZJRyBmaWxlIHRvIGZpbmQgaXRzIHNlcnZlciBwYXJhbXMsIGlmIHRoZQorIyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1A0Q09ORklHIGFuZCBhYnNvbHV0ZSBkaXIgY2xvbmUnICcKKwlwcmludGYgIlA0UE9SVD0kUDRQT1JUXG5QNENMSUVOVD0kUDRDTElFTlRcbiIgPnA0Y29uZmlnICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSBwNGNvbmZpZyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCVA0Q09ORklHPXA0Y29uZmlnICYmIGV4cG9ydCBQNENPTkZJRyAmJgorCQlzYW5lX3Vuc2V0IFA0UE9SVCBQNENMSUVOVCAmJgorCQlnaXQgcDQgY2xvbmUgLS12ZXJib3NlIC0tZGVzdD0iJGdpdCIgLy9kZXBvdAorCSkKKycKKworIyBzYW1lIHRoaW5nLCBidXQgd2l0aCByZWxhdGl2ZSBkaXJlY3RvcnkgbmFtZSwgbm90ZSBtaXNzaW5nICQgb24gLS1kZXN0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdQNENPTkZJRyBhbmQgcmVsYXRpdmUgZGlyIGNsb25lJyAnCisJcHJpbnRmICJQNFBPUlQ9JFA0UE9SVFxuUDRDTElFTlQ9JFA0Q0xJRU5UXG4iID5wNGNvbmZpZyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gcDRjb25maWciICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQlQNENPTkZJRz1wNGNvbmZpZyAmJiBleHBvcnQgUDRDT05GSUcgJiYKKwkJc2FuZV91bnNldCBQNFBPUlQgUDRDTElFTlQgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdmVyYm9zZSAtLWRlc3Q9ImdpdCIgLy9kZXBvdAorCSkKKycKKworIyBDb21tb24gc2V0dXAgdXNpbmcgLnA0Y29uZmlnIHRvIHNldCBQNENMSUVOVCBhbmQgUDRQT1JUIGJyZWFrcworIyBpZiBjbG9uZSBkZXN0aW5hdGlvbiBpcyByZWxhdGl2ZS4gIE1ha2Ugc3VyZSB0aGF0IGNoZGlyKCkgZXhwYW5kcworIyB0aGUgcmVsYXRpdmUgcGF0aCBpbiAtLWRlc3QgdG8gYWJzb2x1dGUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwNCBjbGllbnQgcm9vdCB3b3VsZCBiZSByZWxhdGl2ZSBkdWUgdG8gY2xvbmUgLS1kZXN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQllY2hvIFA0UE9SVD0kUDRQT1JUID5naXQvLnA0Y29uZmlnICYmCisJCVA0Q09ORklHPS5wNGNvbmZpZyAmJgorCQlleHBvcnQgUDRDT05GSUcgJiYKKwkJdW5zZXQgUDRQT1JUICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9ImdpdCIgLy9kZXBvdAorCSkKKycKKworIyBXaGVuIHRoZSBwNCBjbGllbnQgUm9vdCBpcyBhIHN5bWxpbmssIG1ha2Ugc3VyZSBjaGRpcigpIGRvZXMgbm90IHVzZQorIyBnZXRjd2QoKSB0byBjb252ZXJ0IGl0IHRvIGEgcGh5c2ljYWwgcGF0aC4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgU1lNTElOS1MgJ3A0IGNsaWVudCByb290IHN5bWxpbmsgc2hvdWxkIHN0YXkgc3ltYm9saWMnICcKKwlwaHlzaWNhbD0iJFRSQVNIX0RJUkVDVE9SWS9waHlzaWNhbCIgJiYKKwlzeW1ib2xpYz0iJFRSQVNIX0RJUkVDVE9SWS9zeW1ib2xpYyIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBcIiRwaHlzaWNhbFwiIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gXCIkc3ltYm9saWNcIiIgJiYKKwlta2RpciAtcCAiJHBoeXNpY2FsIiAmJgorCWxuIC1zICIkcGh5c2ljYWwiICIkc3ltYm9saWMiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQlQNENMSUVOVD1jbGllbnQtc3ltICYmCisJCXA0IGNsaWVudCAtaSA8PC1FT0YgJiYKKwkJQ2xpZW50OiAkUDRDTElFTlQKKwkJRGVzY3JpcHRpb246ICRQNENMSUVOVAorCQlSb290OiAkc3ltYm9saWMKKwkJTGluZUVuZDogdW5peAorCQlWaWV3OiAvL2RlcG90Ly4uLiAvLyRQNENMSUVOVC8uLi4KKwkJRU9GCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfY29tbWl0IGZpbGUyICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MDktZ2l0LXA0LWNsaWVudC12aWV3LnNoIGIvdC90OTgwOS1naXQtcDQtY2xpZW50LXZpZXcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODk3YjNjMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MDktZ2l0LXA0LWNsaWVudC12aWV3LnNoCkBAIC0wLDAgKzEsODQzIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IGNsaWVudCB2aWV3JworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworIworIyBWZXJpZnkgdGhlc2UgZmlsZXMgZXhpc3QsIGV4YWN0bHkuICBDYWxsZXIgY3JlYXRlcworIyBhIGxpc3Qgb2YgZmlsZXMgaW4gZmlsZSAiZmlsZXMiLgorIworY2hlY2tfZmlsZXNfZXhpc3QoKSB7CisJb2s9MCAmJgorCW51bT0kIyAmJgorCWZvciBhcmcgOyBkbworCQl0ZXN0X3BhdGhfaXNfZmlsZSAiJGFyZyIgJiYKKwkJb2s9JCgoJG9rICsgMSkpCisJZG9uZSAmJgorCXRlc3QgJG9rIC1lcSAkbnVtICYmCisJdGVzdF9saW5lX2NvdW50ID0gJG51bSBmaWxlcworfQorCisjCisjIFN5bmMgdXAgdGhlIHA0IGNsaWVudCwgbWFrZSBzdXJlIHRoZSBnaXZlbiBmaWxlcyAoYW5kIG9ubHkKKyMgdGhvc2UpIGV4aXN0LgorIworY2xpZW50X3ZlcmlmeSgpIHsKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWZpbmQgLiAtdHlwZSBmICEgLW5hbWUgZmlsZXMgPmZpbGVzICYmCisJCWNoZWNrX2ZpbGVzX2V4aXN0ICIkQCIKKwkpCit9CisKKyMKKyMgTWFrZSBzdXJlIHRoZSBuYW1lZCBmaWxlcywgZXhhY3RseSwgZXhpc3QuCisjCitnaXRfdmVyaWZ5KCkgeworCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBscy1maWxlcyA+ZmlsZXMgJiYKKwkJY2hlY2tfZmlsZXNfZXhpc3QgIiRAIgorCSkKK30KKworIyAvL2RlcG90CisjICAgLSBkaXIxCisjICAgICAtIGZpbGUxMQorIyAgICAgLSBmaWxlMTIKKyMgICAtIGRpcjIKKyMgICAgIC0gZmlsZTIxCisjICAgICAtIGZpbGUyMgoraW5pdF9kZXBvdCgpIHsKKwlmb3IgZCBpbiAxIDIgOyBkbworCQlta2RpciAtcCBkaXIkZCAmJgorCQlmb3IgZiBpbiAxIDIgOyBkbworCQkJZWNobyBkaXIkZC9maWxlJGQkZiA+ZGlyJGQvZmlsZSRkJGYgJiYKKwkJCXA0IGFkZCBkaXIkZC9maWxlJGQkZiAmJgorCQkJcDQgc3VibWl0IC1kICJkaXIkZC9maWxlJGQkZiIKKwkJZG9uZQorCWRvbmUgJiYKKwlmaW5kIC4gLXR5cGUgZiAhIC1uYW1lIGZpbGVzID5maWxlcyAmJgorCWNoZWNrX2ZpbGVzX2V4aXN0IGRpcjEvZmlsZTExIGRpcjEvZmlsZTEyIFwKKwkJCSAgZGlyMi9maWxlMjEgZGlyMi9maWxlMjIKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWluaXRfZGVwb3QKKwkpCisnCisKKyMgZG91YmxlICUgZm9yIHByaW50ZgordGVzdF9leHBlY3Rfc3VjY2VzcyAndmlldyB3aWxkY2FyZCAlJW4nICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8lJSUlMS9zdWIvLi4uIC8vY2xpZW50L3N1Yi8lJSUlMS8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd2aWV3IHdpbGRjYXJkIConICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8qL2Jhci8uLi4gLy9jbGllbnQvKi9iYXIvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgLi4uIGluIHRoZSBtaWRkbGUnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4vZmlsZTExIC8vY2xpZW50Ly4uLi9maWxlMTEiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxkY2FyZCAuLi4gaW4gdGhlIG1pZGRsZSBhbmQgYXQgdGhlIGVuZCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLi9hLy4uLiAvL2NsaWVudC8uLi4vYS8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYyBtYXAnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9jbGkxLy4uLiIgJiYKKwlmaWxlcz0iY2xpMS9maWxlMTEgY2xpMS9maWxlMTIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xpZW50IHZpZXcgd2l0aCBubyBtYXBwaW5ncycgJworCWNsaWVudF92aWV3ICYmCisJY2xpZW50X3ZlcmlmeSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NpbmdsZSBmaWxlIG1hcCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvZmlsZTExIC8vY2xpZW50L2ZpbGUxMSIgJiYKKwlmaWxlcz0iZmlsZTExIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2xhdGVyIG1hcHBpbmcgdGFrZXMgcHJlY2VkZW5jZSAoZW50aXJlIHJlcG8pJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvY2xpMS8uLi4iIFwKKwkJICAgICIvL2RlcG90Ly4uLiAvL2NsaWVudC9jbGkyLy4uLiIgJiYKKwlmaWxlcz0iY2xpMi9kaXIxL2ZpbGUxMSBjbGkyL2RpcjEvZmlsZTEyCisJICAgICAgIGNsaTIvZGlyMi9maWxlMjEgY2xpMi9kaXIyL2ZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdsYXRlciBtYXBwaW5nIHRha2VzIHByZWNlZGVuY2UgKHBhcnRpYWwgcmVwbyknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTIxIGZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCisjIFJlYWRpbmcgdGhlIHZpZXcgYmFja3dhcmRzLAorIyAgIGRpcjIgZ29lcyB0byBjbGkxMgorIyAgIGRpcjEgY2Fubm90IGdvIHRvIGNsaTEyIHNpbmNlIGl0IHdhcyBmaWxsZWQgYnkgZGlyMgorIyAgIGRpcjEgYWxzbyBkb2VzIG5vdCBnbyB0byBjbGkzLCBzaW5jZSB0aGUgc2Vjb25kIHJ1bGUKKyMgICAgIG5vdGljZWQgdGhhdCBpdCBtYXRjaGVkLCBidXQgd2FzIGFscmVhZHkgZmlsbGVkCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXBvdCBwYXRoIG1hdGNoaW5nIHJlamVjdGVkIGNsaWVudCBwYXRoJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvY2xpMy8uLi4iIFwKKwkJICAgICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50L2NsaTEyLy4uLiIgXAorCQkgICAgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvY2xpMTIvLi4uIiAmJgorCWZpbGVzPSJjbGkxMi9maWxlMjEgY2xpMTIvZmlsZTIyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKKyMgc2luY2UgYm90aCBoYXZlIHRoZSBzYW1lIC8vY2xpZW50Ly4uLiwgdGhlIGV4Y2x1c2lvbgorIyBydWxlIGtlZXBzIGV2ZXJ5dGhpbmcgb3V0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdleGNsdXNpb24gd2lsZGNhcmQsIGNsaWVudCByaHMgc2FtZSAob2RkKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICItLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJY2xpZW50X3ZlcmlmeSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5CisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4Y2x1c2lvbiB3aWxkY2FyZCwgY2xpZW50IHJocyBkaWZmZXJlbnQgKG5vcm1hbCknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiLS8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvZGlyMi8uLi4iICYmCisJZmlsZXM9ImRpcjEvZmlsZTExIGRpcjEvZmlsZTEyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4Y2x1c2lvbiBzaW5nbGUgZmlsZScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICItLy9kZXBvdC9kaXIyL2ZpbGUyMiAvL2NsaWVudC9maWxlMjIiICYmCisJZmlsZXM9ImRpcjEvZmlsZTExIGRpcjEvZmlsZTEyIGRpcjIvZmlsZTIxIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgd2lsZGNhcmQnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9jbGkvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvY2xpLy4uLiIgJiYKKwlmaWxlcz0iY2xpL2ZpbGUxMSBjbGkvZmlsZTEyIGNsaS9maWxlMjEgY2xpL2ZpbGUyMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHNpbmdsZSBmaWxlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvY2xpLy4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjIvZmlsZTIxIC8vY2xpZW50L2NsaS9maWxlMjEiICYmCisJZmlsZXM9ImNsaS9maWxlMTEgY2xpL2ZpbGUxMiBjbGkvZmlsZTIxIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4Y2x1c2lvbiB3aXRoIGxhdGVyIGluY2x1c2lvbicgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICItLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyLy4uLiIgXAorCQkgICAgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvZGlyMmluY2wvLi4uIiAmJgorCWZpbGVzPSJkaXIxL2ZpbGUxMSBkaXIxL2ZpbGUxMiBkaXIyaW5jbC9maWxlMjEgZGlyMmluY2wvZmlsZTIyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3F1b3RlcyBvbiByaHMgb25seScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIFwiLy9jbGllbnQvY2RpciAxLy4uLlwiIiAmJgorCWNsaWVudF92ZXJpZnkgImNkaXIgMS9maWxlMTEiICJjZGlyIDEvZmlsZTEyIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICJjZGlyIDEvZmlsZTExIiAiY2RpciAxL2ZpbGUxMiIKKycKKworIworIyBTdWJtaXQgdGVzdHMKKyMKKworIyBjbG9uZSBzZXRzIHZhcmlhYmxlCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyBzZXRzIHVzZUNsaWVudFNwZWMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIC0tYm9vbCBnaXQtcDQudXNlQ2xpZW50U3BlYyA+YWN0dWFsICYmCisJCWVjaG8gdHJ1ZSA+dHJ1ZSAmJgorCQl0ZXN0X2NtcCBhY3R1YWwgdHJ1ZQorCSkKKycKKworIyBjbG9uZSBqdXN0IGEgc3ViZGlyIG9mIHRoZSBjbGllbnQgc3BlYwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIGNsb25lJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZGlyMS9maWxlMTEgZGlyMS9maWxlMTIgZGlyMi9maWxlMjEgZGlyMi9maWxlMjIiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwlnaXRfdmVyaWZ5IGRpcjEvZmlsZTExIGRpcjEvZmlsZTEyCisnCisKKyMKKyMgc3VibWl0IGJhY2ssIHNlZSB3aGF0IGhhcHBlbnM6ICBmaXZlIGNhc2VzCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdWJkaXIgY2xvbmUsIHN1Ym1pdCBtb2RpZnknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZWNobyBsaW5lID4+ZGlyMS9maWxlMTIgJiYKKwkJZ2l0IGFkZCBkaXIxL2ZpbGUxMiAmJgorCQlnaXQgY29tbWl0IC1tIGRpcjEvZmlsZTEyICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyMS9maWxlMTIgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBkaXIxL2ZpbGUxMgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIGNsb25lLCBzdWJtaXQgYWRkJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWVjaG8gZmlsZTEzID5kaXIxL2ZpbGUxMyAmJgorCQlnaXQgYWRkIGRpcjEvZmlsZTEzICYmCisJCWdpdCBjb21taXQgLW0gZGlyMS9maWxlMTMgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2ZpbGUxMworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3ViZGlyIGNsb25lLCBzdWJtaXQgZGVsZXRlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBybSBkaXIxL2ZpbGUxMiAmJgorCQlnaXQgY29tbWl0IC1tICJkZWxldGUgZGlyMS9maWxlMTIiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZGlyMS9maWxlMTIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBjbG9uZSwgc3VibWl0IGNvcHknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvZGlyMSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzIHRydWUgJiYKKwkJY3AgZGlyMS9maWxlMTEgZGlyMS9maWxlMTFhICYmCisJCWdpdCBhZGQgZGlyMS9maWxlMTFhICYmCisJCWdpdCBjb21taXQgLW0gImNvcHkgdG8gZGlyMS9maWxlMTFhIiAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpcjEvZmlsZTExYSAmJgorCQkhIGlzX2NsaV9maWxlX3dyaXRlYWJsZSBkaXIxL2ZpbGUxMWEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N1YmRpciBjbG9uZSwgc3VibWl0IHJlbmFtZScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC9kaXIxICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IG12IGRpcjEvZmlsZTEzIGRpcjEvZmlsZTEzYSAmJgorCQlnaXQgY29tbWl0IC1tICJyZW5hbWUgZGlyMS9maWxlMTMgdG8gZGlyMS9maWxlMTNhIiAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGRpcjEvZmlsZTEzICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpcjEvZmlsZTEzYSAmJgorCQkhIGlzX2NsaV9maWxlX3dyaXRlYWJsZSBkaXIxL2ZpbGUxM2EKKwkpCisnCisKKyMgc2VlIHQ5ODAwIGZvciB0aGUgbm9uLWNsaWVudC1zcGVjIGNhc2UsIGFuZCB0aGUgcmVzdCBvZiB0aGUgd2lsZGNhcmQgdGVzdHMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIHN1Ym1pdCBiYWNrIHRvIHA0LCBjbGllbnQtc3BlYyBjYXNlJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90L2RpcjEgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGdpdC13aWxkLWhhc2ggPmRpcjEvZ2l0LXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCWVjaG8gZ2l0LXdpbGQtc3RhciA+ZGlyMS9naXQtd2lsZFwqc3RhcgorCQlmaSAmJgorCQllY2hvIGdpdC13aWxkLWF0ID5kaXIxL2dpdC13aWxkQGF0ICYmCisJCWVjaG8gZ2l0LXdpbGQtcGVyY2VudCA+ZGlyMS9naXQtd2lsZCVwZXJjZW50ICYmCisJCWdpdCBhZGQgZGlyMS9naXQtd2lsZCogJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIHNvbWUgd2lsZGNhcmQgZmlsZW5hbWVzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2dpdC13aWxkI2hhc2ggJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTgorCQl0aGVuCisJCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXIxL2dpdC13aWxkXCpzdGFyCisJCWZpICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGRpcjEvZ2l0LXdpbGRAYXQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZGlyMS9naXQtd2lsZCVwZXJjZW50CisJKSAmJgorCSgKKwkJIyBkZWxldGUgdGhlc2UgY2FyZWZ1bGx5LCBjYW5ub3QganVzdCBkbyAicDQgZGVsZXRlIgorCQkjIG9uIGZpbGVzIHdpdGggd2lsZGNhcmRzOyBidXQgZ2l0LXA0IGtub3dzIGhvdworCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJtIGRpcjEvZ2l0LXdpbGQqICYmCisJCWdpdCBjb21taXQgLW0gImNsZWFuIHVwIHRoZSB3aWxkY2FyZHMiICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3JlaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXJtIGZpbGVzICYmCisJCXA0IGRlbGV0ZSAqLyogJiYKKwkJcDQgc3VibWl0IC1kICJkZWxldGUgYWxsIGZpbGVzIiAmJgorCQlpbml0X2RlcG90CisJKQorJworCisjCisjIFdoYXQgaGFwcGVucyB3aGVuIHR3byBmaWxlcyBvZiB0aGUgc2FtZSBuYW1lIGFyZSBvdmVybGF5ZWQgdG9nZXRoZXI/CisjIFRoZSBsYXN0LWxpc3RlZCBmaWxlIHNob3VsZCB0YWtlIHByZWZlcmVuY2UuCisjCisjIC8vZGVwb3QKKyMgICAtIGRpcjEKKyMgICAgIC0gZmlsZTExCisjICAgICAtIGZpbGUxMgorIyAgICAgLSBmaWxlY29sbGlkZQorIyAgIC0gZGlyMgorIyAgICAgLSBmaWxlMjEKKyMgICAgIC0gZmlsZTIyCisjICAgICAtIGZpbGVjb2xsaWRlCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IGNvbGxpc2lvbiBzZXR1cCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQllY2hvIGRpcjEvZmlsZWNvbGxpZGUgPmRpcjEvZmlsZWNvbGxpZGUgJiYKKwkJcDQgYWRkIGRpcjEvZmlsZWNvbGxpZGUgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjEvZmlsZWNvbGxpZGUgJiYKKwkJZWNobyBkaXIyL2ZpbGVjb2xsaWRlID5kaXIyL2ZpbGVjb2xsaWRlICYmCisJCXA0IGFkZCBkaXIyL2ZpbGVjb2xsaWRlICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIyL2ZpbGVjb2xsaWRlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IGNvbGxpc2lvbiAxIHRvIDInICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBmaWxlY29sbGlkZSIgJiYKKwllY2hvIGRpcjIvZmlsZWNvbGxpZGUgPmFjdHVhbCAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9maWxlY29sbGlkZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGdpdCIvZmlsZWNvbGxpZGUKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnb3ZlcmxheSBjb2xsaXNpb24gMiB0byAxJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgZmlsZWNvbGxpZGUiICYmCisJZWNobyBkaXIxL2ZpbGVjb2xsaWRlID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvZmlsZWNvbGxpZGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRnaXQiL2ZpbGVjb2xsaWRlCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgY29sbGlzaW9uIGRlbGV0ZSAyJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCXA0IGRlbGV0ZSBkaXIyL2ZpbGVjb2xsaWRlICYmCisJCXA0IHN1Ym1pdCAtZCAicmVtb3ZlIGRpcjIvZmlsZWNvbGxpZGUiCisJKQorJworCisjIG5vIGZpbGVjb2xsaWRlLCBnb3QgZGVsZXRlZCB3aXRoIGRpcjIKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ292ZXJsYXkgY29sbGlzaW9uIDEgdG8gMiwgYnV0IDIgZGVsZXRlZCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgY29sbGlzaW9uIHVwZGF0ZSAxJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvZGlyMS8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQlwNCBvcGVuIGRpcjEvZmlsZWNvbGxpZGUgJiYKKwkJZWNobyBkaXIxL2ZpbGVjb2xsaWRlIHVwZGF0ZSA+ZGlyMS9maWxlY29sbGlkZSAmJgorCQlwNCBzdWJtaXQgLWQgInVwZGF0ZSBkaXIxL2ZpbGVjb2xsaWRlIgorCSkKKycKKworIyBzdGlsbCBubyBmaWxlY29sbGlkZSwgZGlyMiBzdGlsbCB3aW5zIHdpdGggdGhlIGRlbGV0aW9uIGV2ZW4gdGhvdWdoIHRoZQorIyBjaGFuZ2UgdG8gZGlyMSBpcyBtb3JlIHJlY2VudAordGVzdF9leHBlY3RfZmFpbHVyZSAnb3ZlcmxheSBjb2xsaXNpb24gMSB0byAyLCBidXQgMiBkZWxldGVkLCB0aGVuIDEgdXBkYXRlZCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIiAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgY29sbGlzaW9uIGRlbGV0ZSBmaWxlY29sbGlkZXMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJcDQgZGVsZXRlIGRpcjEvZmlsZWNvbGxpZGUgZGlyMi9maWxlY29sbGlkZSAmJgorCQlwNCBzdWJtaXQgLWQgInJlbW92ZSBmaWxlY29sbGlkZXMiCisJKQorJworCisjCisjIE92ZXJsYXlzIGFzIHBhcnQgb2Ygc3luYywgcmF0aGVyIHRoYW4gaW5pdGlhbCBjaGVja291dDoKKyMgICAxLiAgYWRkIGEgZmlsZSBpbiBkaXIxCisjICAgMi4gIHN5bmMgdG8gaW5jbHVkZSBpdAorIyAgIDMuICBhZGQgc2FtZSBmaWxlIGluIGRpcjIKKyMgICA0LiAgc3luYywgbWFrZSBzdXJlIGNvbnRlbnQgc3dpdGNoZXMgYXMgZGlyMiBoYXMgcHJpb3JpdHkKKyMgICA1LiAgYWRkIGFub3RoZXIgZmlsZSBpbiBkaXIxCisjICAgNi4gIHN5bmMKKyMgICA3LiAgYWRkL2RlbGV0ZSBzYW1lIGZpbGUgaW4gZGlyMgorIyAgIDguICBzeW5jLCBtYWtlIHN1cmUgaXQgZGlzYXBwZWFycywgYWdhaW4gZGlyMiB3aW5zCisjICAgOS4gIGNsZWFudXAKKyMKKyMgLy9kZXBvdAorIyAgIC0gZGlyMQorIyAgICAgLSBmaWxlMTEKKyMgICAgIC0gZmlsZTEyCisjICAgICAtIGNvbEEKKyMgICAgIC0gY29sQgorIyAgIC0gZGlyMgorIyAgICAgLSBmaWxlMjEKKyMgICAgIC0gZmlsZTIyCisjICAgICAtIGNvbEEKKyMgICAgIC0gY29sQgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jOiBhZGQgY29sQSBpbiBkaXIxJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvZGlyMS8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQllY2hvIGRpcjEvY29sQSA+ZGlyMS9jb2xBICYmCisJCXA0IGFkZCBkaXIxL2NvbEEgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjEvY29sQQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jOiBpbml0aWFsIGdpdCBjaGVja291dCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGNvbEEiICYmCisJZWNobyBkaXIxL2NvbEEgPmFjdHVhbCAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9jb2xBICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9jb2xBCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogYWRkIGNvbEEgaW4gZGlyMicgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50L2RpcjIvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIyL2NvbEEgPmRpcjIvY29sQSAmJgorCQlwNCBhZGQgZGlyMi9jb2xBICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIyL2NvbEEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYzogY29sQSBjb250ZW50IHN3aXRjaCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGNvbEEiICYmCisJZWNobyBkaXIyL2NvbEEgPmFjdHVhbCAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9jb2xBICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS11c2UtY2xpZW50LXNwZWMgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBwNC9tYXN0ZXIKKwkpICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRnaXQiL2NvbEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jOiBhZGQgY29sQiBpbiBkaXIxJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvZGlyMS8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQllY2hvIGRpcjEvY29sQiA+ZGlyMS9jb2xCICYmCisJCXA0IGFkZCBkaXIxL2NvbEIgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjEvY29sQgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jOiBjb2xCIGFwcGVhcnMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIGNvbEIiICYmCisJZWNobyBkaXIxL2NvbEIgPmFjdHVhbCAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9jb2xCICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS11c2UtY2xpZW50LXNwZWMgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBwNC9tYXN0ZXIKKwkpICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRnaXQiL2NvbEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jOiBhZGQvZGVsZXRlIGNvbEIgaW4gZGlyMicgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50L2RpcjIvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIyL2NvbEIgPmRpcjIvY29sQiAmJgorCQlwNCBhZGQgZGlyMi9jb2xCICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIyL2NvbEIgJiYKKwkJcDQgZGVsZXRlIGRpcjIvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgImRlbGV0ZSBkaXIyL2NvbEIiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmM6IGNvbEIgZGlzYXBwZWFycycgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGNvbEEiICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLXVzZS1jbGllbnQtc3BlYyAmJgorCQlnaXQgbWVyZ2UgLS1mZi1vbmx5IHA0L21hc3RlcgorCSkgJiYKKwlnaXRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmM6IGNsZWFudXAnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJcDQgZGVsZXRlIGRpcjEvY29sQSBkaXIyL2NvbEEgZGlyMS9jb2xCICYmCisJCXA0IHN1Ym1pdCAtZCAicmVtb3ZlIG92ZXJsYXkgc3luYyBmaWxlcyIKKwkpCisnCisKKyMKKyMgT3ZlcmxheSB0ZXN0cyBhZ2FpbiwgYnV0IHN3YXBwZWQgc28gZGlyMSBoYXMgcHJpb3JpdHkuCisjICAgMS4gIGFkZCBhIGZpbGUgaW4gZGlyMQorIyAgIDIuICBzeW5jIHRvIGluY2x1ZGUgaXQKKyMgICAzLiAgYWRkIHNhbWUgZmlsZSBpbiBkaXIyCisjICAgNC4gIHN5bmMsIG1ha2Ugc3VyZSBjb250ZW50IGRvZXMgbm90IHN3aXRjaAorIyAgIDUuICBhZGQgYW5vdGhlciBmaWxlIGluIGRpcjEKKyMgICA2LiAgc3luYworIyAgIDcuICBhZGQvZGVsZXRlIHNhbWUgZmlsZSBpbiBkaXIyCisjICAgOC4gIHN5bmMsIG1ha2Ugc3VyZSBpdCBpcyBzdGlsbCB0aGVyZQorIyAgIDkuICBjbGVhbnVwCisjCisjIC8vZGVwb3QKKyMgICAtIGRpcjEKKyMgICAgIC0gZmlsZTExCisjICAgICAtIGZpbGUxMgorIyAgICAgLSBjb2xBCisjICAgICAtIGNvbEIKKyMgICAtIGRpcjIKKyMgICAgIC0gZmlsZTIxCisjICAgICAtIGZpbGUyMgorIyAgICAgLSBjb2xBCisjICAgICAtIGNvbEIKKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYyBzd2FwOiBhZGQgY29sQSBpbiBkaXIxJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvZGlyMS8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQllY2hvIGRpcjEvY29sQSA+ZGlyMS9jb2xBICYmCisJCXA0IGFkZCBkaXIxL2NvbEEgJiYKKwkJcDQgc3VibWl0IC1kIGRpcjEvY29sQQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jIHN3YXA6IGluaXRpYWwgZ2l0IGNoZWNrb3V0JyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgY29sQSIgJiYKKwllY2hvIGRpcjEvY29sQSA+YWN0dWFsICYmCisJY2xpZW50X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2NvbEEgJiYKKwlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRnaXQiL2NvbEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jIHN3YXA6IGFkZCBjb2xBIGluIGRpcjInICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC9kaXIyLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMi9jb2xBID5kaXIyL2NvbEEgJiYKKwkJcDQgYWRkIGRpcjIvY29sQSAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMi9jb2xBCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdvdmVybGF5IHN5bmMgc3dhcDogY29sQSBubyBjb250ZW50IHN3aXRjaCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50Ly4uLiIgXAorCQkgICAgIisvL2RlcG90L2RpcjEvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwlmaWxlcz0iZmlsZTExIGZpbGUxMiBmaWxlMjEgZmlsZTIyIGNvbEEiICYmCisJZWNobyBkaXIxL2NvbEEgPmFjdHVhbCAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9jb2xBICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS11c2UtY2xpZW50LXNwZWMgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBwNC9tYXN0ZXIKKwkpICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRnaXQiL2NvbEEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jIHN3YXA6IGFkZCBjb2xCIGluIGRpcjEnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC9kaXIxLy4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCWVjaG8gZGlyMS9jb2xCID5kaXIxL2NvbEIgJiYKKwkJcDQgYWRkIGRpcjEvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgZGlyMS9jb2xCCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdvdmVybGF5IHN5bmMgc3dhcDogY29sQiBhcHBlYXJzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvZGlyMi8uLi4gLy9jbGllbnQvLi4uIiBcCisJCSAgICAiKy8vZGVwb3QvZGlyMS8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWZpbGVzPSJmaWxlMTEgZmlsZTEyIGZpbGUyMSBmaWxlMjIgY29sQSBjb2xCIiAmJgorCWVjaG8gZGlyMS9jb2xCID5hY3R1YWwgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3RfY21wIGFjdHVhbCAiJGNsaSIvY29sQiAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tdXNlLWNsaWVudC1zcGVjICYmCisJCWdpdCBtZXJnZSAtLWZmLW9ubHkgcDQvbWFzdGVyCisJKSAmJgorCWdpdF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkZ2l0Ii9jb2xCCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ292ZXJsYXkgc3luYyBzd2FwOiBhZGQvZGVsZXRlIGNvbEIgaW4gZGlyMicgJworCWNsaWVudF92aWV3ICIvL2RlcG90L2RpcjIvLi4uIC8vY2xpZW50L2RpcjIvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZWNobyBkaXIyL2NvbEIgPmRpcjIvY29sQiAmJgorCQlwNCBhZGQgZGlyMi9jb2xCICYmCisJCXA0IHN1Ym1pdCAtZCBkaXIyL2NvbEIgJiYKKwkJcDQgZGVsZXRlIGRpcjIvY29sQiAmJgorCQlwNCBzdWJtaXQgLWQgImRlbGV0ZSBkaXIyL2NvbEIiCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdvdmVybGF5IHN5bmMgc3dhcDogY29sQiBubyBjaGFuZ2UnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC9kaXIyLy4uLiAvL2NsaWVudC8uLi4iIFwKKwkJICAgICIrLy9kZXBvdC9kaXIxLy4uLiAvL2NsaWVudC8uLi4iICYmCisJZmlsZXM9ImZpbGUxMSBmaWxlMTIgZmlsZTIxIGZpbGUyMiBjb2xBIGNvbEIiICYmCisJZWNobyBkaXIxL2NvbEIgPmFjdHVhbCAmJgorCWNsaWVudF92ZXJpZnkgJGZpbGVzICYmCisJdGVzdF9jbXAgYWN0dWFsICIkY2xpIi9jb2xCICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS11c2UtY2xpZW50LXNwZWMgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBwNC9tYXN0ZXIKKwkpICYmCisJZ2l0X3ZlcmlmeSAkZmlsZXMgJiYKKwl0ZXN0X2NtcCBhY3R1YWwgIiRjbGkiL2NvbEIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnb3ZlcmxheSBzeW5jIHN3YXA6IGNsZWFudXAnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJcDQgZGVsZXRlIGRpcjEvY29sQSBkaXIyL2NvbEEgZGlyMS9jb2xCICYmCisJCXA0IHN1Ym1pdCAtZCAicmVtb3ZlIG92ZXJsYXkgc3luYyBmaWxlcyIKKwkpCisnCisKKyMKKyMgUmVuYW1lIGRpcmVjdG9yaWVzIHRvIHRlc3QgcXVvdGluZyBpbiBkZXBvdC1zaWRlIG1hcHBpbmdzCisjIC8vZGVwb3QKKyMgICAgLSAiZGlyIDEiCisjICAgICAgIC0gZmlsZTExCisjICAgICAgIC0gZmlsZTEyCisjICAgIC0gImRpciAyIgorIyAgICAgICAtIGZpbGUyMQorIyAgICAgICAtIGZpbGUyMgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAncmVuYW1lIGZpbGVzIHRvIGludHJvZHVjZSBzcGFjZXMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCWNsaWVudF92ZXJpZnkgZGlyMS9maWxlMTEgZGlyMS9maWxlMTIgXAorCQkgICAgICBkaXIyL2ZpbGUyMSBkaXIyL2ZpbGUyMiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IG9wZW4gZGlyMS8uLi4gJiYKKwkJcDQgbW92ZSBkaXIxLy4uLiAiZGlyIDEiLy4uLiAmJgorCQlwNCBvcGVuIGRpcjIvLi4uICYmCisJCXA0IG1vdmUgZGlyMi8uLi4gImRpciAyIi8uLi4gJiYKKwkJcDQgc3VibWl0IC1kICJyZW5hbWUgd2l0aCBzcGFjZXMiCisJKSAmJgorCWNsaWVudF92ZXJpZnkgImRpciAxL2ZpbGUxMSIgImRpciAxL2ZpbGUxMiIgXAorCQkgICAgICAiZGlyIDIvZmlsZTIxIiAiZGlyIDIvZmlsZTIyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMgb24gbGhzIG9ubHknICcKKwljbGllbnRfdmlldyAiXCIvL2RlcG90L2RpciAxLy4uLlwiIC8vY2xpZW50L2NkaXIxLy4uLiIgJiYKKwlmaWxlcz0iY2RpcjEvZmlsZTExIGNkaXIxL2ZpbGUxMiIgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcyAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwljbGllbnRfdmVyaWZ5ICRmaWxlcworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdxdW90ZXMgb24gYm90aCBzaWRlcycgJworCWNsaWVudF92aWV3ICJcIi8vZGVwb3QvZGlyIDEvLi4uXCIgXCIvL2NsaWVudC9jZGlyIDEvLi4uXCIiICYmCisJY2xpZW50X3ZlcmlmeSAiY2RpciAxL2ZpbGUxMSIgImNkaXIgMS9maWxlMTIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCWdpdF92ZXJpZnkgImNkaXIgMS9maWxlMTEiICJjZGlyIDEvZmlsZTEyIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxMC1naXQtcDQtcmNzLnNoIGIvdC90OTgxMC1naXQtcDQtcmNzLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgxMzRhYjQKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODEwLWdpdC1wNC1yY3Muc2gKQEAgLTAsMCArMSwzNjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgcmNzIGtleXdvcmRzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworIworIyBNYWtlIG9uZSBmaWxlIHdpdGgga2V5d29yZCBsaW5lcyBhdCB0aGUgdG9wLCBhbmQKKyMgZW5vdWdoIHBsYWluIHRleHQgdG8gYmUgYWJsZSB0byB0ZXN0IG1vZGlmaWNhdGlvbnMKKyMgZmFyIGF3YXkgZnJvbSB0aGUga2V5d29yZHMuCisjCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdpbml0IGRlcG90JyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJY2F0IDw8LVxFT0YgPmZpbGVrICYmCisJCSRJZCQKKwkJLyogJFJldmlzaW9uJCAqLworCQkjICRDaGFuZ2UkCisJCWxpbmU0CisJCWxpbmU1CisJCWxpbmU2CisJCWxpbmU3CisJCWxpbmU4CisJCUVPRgorCQlzZWQgInMvUmV2aXNpb24vUmV2aXNpb246IGRvIG5vdCBzY3J1YiBtZS8iIDxmaWxlayA+ZmlsZWtvICYmCisJCXNlZCAicy9JZC9JZDogZG8gbm90IHNjcnViIG1lLyIgPGZpbGVrbyA+ZmlsZV90ZXh0ICYmCisJCXA0IGFkZCAtdCB0ZXh0K2sgZmlsZWsgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlayIgJiYKKwkJcDQgYWRkIC10IHRleHQra28gZmlsZWtvICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZWtvIiAmJgorCQlwNCBhZGQgLXQgdGV4dCBmaWxlX3RleHQgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlX3RleHQiCisJKQorJworCisjCisjIEdlbmVyYXRlIHRoZXNlIGluIGEgZnVuY3Rpb24gdG8gbWFrZSBpdCBlYXN5IHRvIHVzZSBzaW5nbGUgcXVvdGUgbWFya3MuCisjCit3cml0ZV9zY3J1Yl9zY3JpcHRzICgpIHsKKwljYXQgPiIkVFJBU0hfRElSRUNUT1JZL3NjcnViX2sucHkiIDw8LVxFT0YgJiYKKwlpbXBvcnQgcmUsIHN5cworCXN5cy5zdGRvdXQud3JpdGUocmUuc3ViKHInKD9pKVwkKElkfEhlYWRlcnxBdXRob3J8RGF0ZXxEYXRlVGltZXxDaGFuZ2V8RmlsZXxSZXZpc2lvbik6W14kXSpcJCcsIHInJFwxJCcsIHN5cy5zdGRpbi5yZWFkKCkpKQorCUVPRgorCWNhdCA+IiRUUkFTSF9ESVJFQ1RPUlkvc2NydWJfa28ucHkiIDw8LVxFT0YKKwlpbXBvcnQgcmUsIHN5cworCXN5cy5zdGRvdXQud3JpdGUocmUuc3ViKHInKD9pKVwkKElkfEhlYWRlcik6W14kXSpcJCcsIHInJFwxJCcsIHN5cy5zdGRpbi5yZWFkKCkpKQorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzY3J1YiBzY3JpcHRzJyAnCisJd3JpdGVfc2NydWJfc2NyaXB0cworJworCisjCisjIENvbXBhcmUgJGNsaS9maWxlIHRvIGl0cyBzY3J1YmJlZCB2ZXJzaW9uLCBzaG91bGQgYmUgZGlmZmVyZW50LgorIyBDb21wYXJlIHNjcnViYmVkICRjbGkvZmlsZSB0byAkZ2l0L2ZpbGUsIHNob3VsZCBiZSBzYW1lLgorIworc2NydWJfa19jaGVjayAoKSB7CisJZmlsZT0iJDEiICYmCisJc2NydWI9IiRUUkFTSF9ESVJFQ1RPUlkvJGZpbGUiICYmCisJIiRQWVRIT05fUEFUSCIgIiRUUkFTSF9ESVJFQ1RPUlkvc2NydWJfay5weSIgPCIkZ2l0LyRmaWxlIiA+IiRzY3J1YiIgJiYKKwkhIHRlc3RfY21wICIkY2xpLyRmaWxlIiAiJHNjcnViIiAmJgorCXRlc3RfY21wICIkZ2l0LyRmaWxlIiAiJHNjcnViIiAmJgorCXJtICIkc2NydWIiCit9CitzY3J1Yl9rb19jaGVjayAoKSB7CisJZmlsZT0iJDEiICYmCisJc2NydWI9IiRUUkFTSF9ESVJFQ1RPUlkvJGZpbGUiICYmCisJIiRQWVRIT05fUEFUSCIgIiRUUkFTSF9ESVJFQ1RPUlkvc2NydWJfa28ucHkiIDwiJGdpdC8kZmlsZSIgPiIkc2NydWIiICYmCisJISB0ZXN0X2NtcCAiJGNsaS8kZmlsZSIgIiRzY3J1YiIgJiYKKwl0ZXN0X2NtcCAiJGdpdC8kZmlsZSIgIiRzY3J1YiIgJiYKKwlybSAiJHNjcnViIgorfQorCisjCisjIE1vZGlmeSBmYXIgYXdheSBmcm9tIGtleXdvcmRzLiAgSWYgbm8gUkNTIGxpbmVzIHNob3cgdXAKKyMgaW4gdGhlIGRpZmYsIHRoZXJlIGlzIG5vIGNvbmZsaWN0LgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCBmYXIgYXdheSBmcm9tIFJDUyBsaW5lcycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCXNlZCAicy9ebGluZTcvbGluZTcgZWRpdC8iIDxmaWxlayA+ZmlsZWsudG1wICYmCisJCW12IC1mIGZpbGVrLnRtcCBmaWxlayAmJgorCQlnaXQgY29tbWl0IC1tICJmaWxlayBsaW5lNyBlZGl0IiBmaWxlayAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXNjcnViX2tfY2hlY2sgZmlsZWsKKwkpCisnCisKKyMKKyMgTW9kaWZ5IG5lYXIgdGhlIGtleXdvcmRzLiAgVGhpcyB3aWxsIHJlcXVpcmUgUkNTIHNjcnViYmluZy4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2VkaXQgbmVhciBSQ1MgbGluZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCXNlZCAicy9ebGluZTQvbGluZTQgZWRpdC8iIDxmaWxlayA+ZmlsZWsudG1wICYmCisJCW12IC1mIGZpbGVrLnRtcCBmaWxlayAmJgorCQlnaXQgY29tbWl0IC1tICJmaWxlayBsaW5lNCBlZGl0IiBmaWxlayAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXNjcnViX2tfY2hlY2sgZmlsZWsKKwkpCisnCisKKyMKKyMgTW9kaWZ5IHRoZSBrZXl3b3JkcyB0aGVtc2VsdmVzLiAgVGhpcyBhbHNvIHdpbGwgcmVxdWlyZSBSQ1Mgc2NydWJiaW5nLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCBrZXl3b3JkIGxpbmVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlzZWQgIi9SZXZpc2lvbi9kIiA8ZmlsZWsgPmZpbGVrLnRtcCAmJgorCQltdiAtZiBmaWxlay50bXAgZmlsZWsgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZmlsZWsgcmVtb3ZlIFJldmlzaW9uIGxpbmUiIGZpbGVrICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJc2NydWJfa19jaGVjayBmaWxlaworCSkKKycKKworIworIyBTY3J1YmJpbmcgdGV4dCtrbyBmaWxlcyBzaG91bGQgbm90IGFsdGVyIGFsbCBrZXl3b3JkcywganVzdCBJZCwgSGVhZGVyLgorIwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2NydWIga28gZmlsZXMgZGlmZmVyZW50bHknICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCXNlZCAicy9ebGluZTQvbGluZTQgZWRpdC8iIDxmaWxla28gPmZpbGVrby50bXAgJiYKKwkJbXYgLWYgZmlsZWtvLnRtcCBmaWxla28gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZmlsZWtvIGxpbmU0IGVkaXQiIGZpbGVrbyAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXNjcnViX2tvX2NoZWNrIGZpbGVrbyAmJgorCQkhIHNjcnViX2tfY2hlY2sgZmlsZWtvCisJKQorJworCisjIGhhY2s7IGdpdCBwNCBzdWJtaXQgc2hvdWxkIGRvIGl0IG9uIGl0cyBvd24KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgYWZ0ZXIgZmFpbHVyZScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHJldmVydCAuLi4KKwkpCisnCisKKyMgcGVybCAkRmlsZTo6IGJ1ZyBjaGVjawordGVzdF9leHBlY3Rfc3VjY2VzcyAna3RleHQgZXhwYW5zaW9uIHNob3VsZCBub3QgZXhwYW5kIG11bHRpLWxpbmUgJEZpbGU6OicgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWNhdCA+bHYucG0gPDwtXEVPRgorCQlteSAkd2FudGVkID0gc3ViIHsgbXkgJGYgPSAkRmlsZTo6RmluZDo6bmFtZTsKKwkJCQkgICAgaWYgKCAtZiAmJiAkZiA9fiAvZm9vLyApIHsKKwkJRU9GCisJCXA0IGFkZCAtdCBrdGV4dCBsdi5wbSAmJgorCQlwNCBzdWJtaXQgLWQgImx2LnBtIgorCSkgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jbXAgIiRjbGkvbHYucG0iIGx2LnBtCisJKQorJworCisjCisjIERvIG5vdCBzY3J1YiBhbnl0aGluZyBidXQgK2sgb3IgK2tvIGZpbGVzLiAgU25lYWsgYSBjaGFuZ2UgaW50bworIyB0aGUgY2xpIGZpbGUgc28gdGhhdCBzdWJtaXQgd2lsbCBnZXQgYSBjb25mbGljdC4gIE1ha2Ugc3VyZSB0aGF0CisjIHNjcnViYmluZyBkb2Vzbid0IG1ha2UgYSBtZXNzIG9mIHRoaW5ncy4KKyMKKyMgVGhpcyBtaWdodCBoYXBwZW4gb25seSBpZiB0aGUgZ2l0IHJlcG8gaXMgYmVoaW5kIHRoZSBwNCByZXBvIGF0CisjIHN1Ym1pdCB0aW1lLCBhbmQgdGhlcmUgaXMgYSBjb25mbGljdC4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvIG5vdCBzY3J1YiBwbGFpbiB0ZXh0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlzZWQgInMvXmxpbmU0L2xpbmU0IGVkaXQvIiA8ZmlsZV90ZXh0ID5maWxlX3RleHQudG1wICYmCisJCW12IC1mIGZpbGVfdGV4dC50bXAgZmlsZV90ZXh0ICYmCisJCWdpdCBjb21taXQgLW0gImZpbGVfdGV4dCBsaW5lNCBlZGl0IiBmaWxlX3RleHQgJiYKKwkJKAorCQkJY2QgIiRjbGkiICYmCisJCQlwNCBvcGVuIGZpbGVfdGV4dCAmJgorCQkJc2VkICJzL15saW5lNS9saW5lNSBwNCBlZGl0LyIgPGZpbGVfdGV4dCA+ZmlsZV90ZXh0LnRtcCAmJgorCQkJbXYgLWYgZmlsZV90ZXh0LnRtcCBmaWxlX3RleHQgJiYKKwkJCXA0IHN1Ym1pdCAtZCAiZmlsZTUgcDQgZWRpdCIKKwkJKSAmJgorCQllY2hvIHMgfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCAmJgorCQkoCisJCQkjIG1ha2Ugc3VyZSB0aGUgZmlsZSBpcyBub3QgbGVmdCBvcGVuCisJCQljZCAiJGNsaSIgJiYKKwkJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIGZpbGVfdGV4dAorCQkpCisJKQorJworCisjIGhhY2s7IGdpdCBwNCBzdWJtaXQgc2hvdWxkIGRvIGl0IG9uIGl0cyBvd24KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgYWZ0ZXIgZmFpbHVyZSAyJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgcmV2ZXJ0IC4uLgorCSkKKycKKworY3JlYXRlX2t3X2ZpbGUgKCkgeworCWNhdCA8PFxFT0YgPiIkMSIKKy8qIEEgZmlsZQorCUlkOiAkSWQkCisJUmV2aXNpb246ICRSZXZpc2lvbiQKKwlGaWxlOiAkRmlsZSQKKyAqLworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KSB7CisJcmV0dXJuIDA7Cit9CitFT0YKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnYWRkIGt3ZmlsZScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCXA0IGFkZCBmaWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImZpbGUgMSIgJiYKKwkJY3JlYXRlX2t3X2ZpbGUga3dmaWxlMS5jICYmCisJCXA0IGFkZCBrd2ZpbGUxLmMgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgcmN3IGt3IGZpbGUiIGt3ZmlsZTEuYworCSkKKycKKworcDRfYXBwZW5kX3RvX2ZpbGUgKCkgeworCWY9IiQxIiAmJgorCXA0IGVkaXQgLXQga3RleHQgIiRmIiAmJgorCWVjaG8gIi8qICQoZGF0ZSkgKi8iID4+IiRmIiAmJgorCXA0IHN1Ym1pdCAtZCAiYXBwZW5kaW5nIGEgbGluZSBpbiBwNCIKK30KKworIyBDcmVhdGUgc29tZSBmaWxlcyB3aXRoIFJDUyBrZXl3b3Jkcy4gSWYgdGhleSBnZXQgbW9kaWZpZWQKKyMgZWxzZXdoZXJlIHRoZW4gdGhlIHZlcnNpb24gbnVtYmVyIGdldHMgYnVtcGVkIHdoaWNoIHRoZW4KKyMgcmVzdWx0cyBpbiBhIG1lcmdlIGNvbmZsaWN0IGlmIHdlIHRvdWNoIHRoZSBSQ1Mga3cgbGluZXMsCisjIGV2ZW4gdGhvdWdoIHRoZSBjaGFuZ2UgaXRzZWxmIHdvdWxkIG90aGVyd2lzZSBhcHBseSBjbGVhbmx5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29wZSB3aXRoIHJjcyBrZXl3b3JkIGV4cGFuc2lvbiBkYW1hZ2UnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCShjZCAiJGNsaSIgJiYgcDRfYXBwZW5kX3RvX2ZpbGUga3dmaWxlMS5jKSAmJgorCQlvbGRfbGluZXM9JCh3YyAtbCA8a3dmaWxlMS5jKSAmJgorCQlwZXJsIC1uIC1pIC1lICJwcmludCB1bmxlc3MgbS9SZXZpc2lvbjovIiBrd2ZpbGUxLmMgJiYKKwkJbmV3X2xpbmVzPSQod2MgLWwgPGt3ZmlsZTEuYykgJiYKKwkJdGVzdCAkbmV3X2xpbmVzID0gJCgoJG9sZF9saW5lcyAtIDEpKSAmJgorCisJCWdpdCBhZGQga3dmaWxlMS5jICYmCisJCWdpdCBjb21taXQgLW0gIlphcCBhbiBSQ1Mga3cgbGluZSIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlnaXQgcDQgcmViYXNlICYmCisJCWdpdCBkaWZmIHA0L21hc3RlciAmJgorCQlnaXQgcDQgY29tbWl0ICYmCisJCWVjaG8gInRyeSBtb2RpZnlpbmcgaW4gYm90aCIgJiYKKwkJY2QgIiRjbGkiICYmCisJCXA0IGVkaXQga3dmaWxlMS5jICYmCisJCWVjaG8gImxpbmUgZnJvbSBwNCIgPj5rd2ZpbGUxLmMgJiYKKwkJcDQgc3VibWl0IC1kICJhZGQgYSBsaW5lIGluIHA0IiBrd2ZpbGUxLmMgJiYKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gImxpbmUgZnJvbSBnaXQgYXQgdGhlIHRvcCIgfCBjYXQgLSBrd2ZpbGUxLmMgPmt3ZmlsZTEuYy5uZXcgJiYKKwkJbXYga3dmaWxlMS5jLm5ldyBrd2ZpbGUxLmMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkIGxpbmUgaW4gZ2l0IGF0IHRoZSB0b3AiIGt3ZmlsZTEuYyAmJgorCQlnaXQgcDQgcmViYXNlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvcGUgd2l0aCByY3Mga2V5d29yZCBmaWxlIGRlbGV0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyAiXCRSZXZpc2lvblwkIiA+a3dkZWxmaWxlLmMgJiYKKwkJcDQgYWRkIC10IGt0ZXh0IGt3ZGVsZmlsZS5jICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUgdG8gYmUgZGVsZXRlZCIgJiYKKwkJY2F0IGt3ZGVsZmlsZS5jICYmCisJCWdyZXAgMSBrd2RlbGZpbGUuYworCSkgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ3JlcCBSZXZpc2lvbiBrd2RlbGZpbGUuYyAmJgorCQlnaXQgcm0gLWYga3dkZWxmaWxlLmMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiRGVsZXRlIGEgZmlsZSBjb250YWluaW5nIFJDUyBrZXl3b3JkcyIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hdHRlbXB0UkNTQ2xlYW51cCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAmJgorCQkhIHRlc3QgLWYga3dkZWxmaWxlLmMKKwkpCisnCisKKyMgSWYgeW91IGFkZCBrZXl3b3JkcyBpbiBnaXQgb2YgdGhlIGZvcm0gJEhlYWRlciQgdGhlbiBldmVyeXRoaW5nIHNob3VsZAorIyB3b3JrIGZpbmUgd2l0aG91dCBhbnkgc3BlY2lhbCBoYW5kbGluZy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0FkZCBrZXl3b3JkcyBpbiBnaXQgd2hpY2ggbWF0Y2ggdGhlIGRlZmF1bHQgcDQgdmFsdWVzJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gIk5ld0tXOiBcJFJldmlzaW9uXCQiID4+a3dmaWxlMS5jICYmCisJCWdpdCBhZGQga3dmaWxlMS5jICYmCisJCWdpdCBjb21taXQgLW0gIkFkZGluZyBSQ1Mga2V5d29yZHMgaW4gZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmF0dGVtcHRSQ1NDbGVhbnVwIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jICYmCisJCXRlc3QgLWYga3dmaWxlMS5jICYmCisJCWdyZXAgIk5ld0tXLipSZXZpc2lvbi4qWzAtOV0iIGt3ZmlsZTEuYworCisJKQorJworCisjIElmIHlvdSBhZGQga2V5d29yZHMgaW4gZ2l0IG9mIHRoZSBmb3JtICRIZWFkZXI6IzEkIHRoZW4gdGhpbmdzIHdpbGwgZmFpbAorIyB1bmxlc3MgZ2l0LXA0IHRha2VzIHN0ZXBzIHRvIHNjcnViIHRoZSAqZ2l0KiBjb21taXQuCisjCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdBZGQga2V5d29yZHMgaW4gZ2l0IHdoaWNoIGRvIG5vdCBtYXRjaCB0aGUgZGVmYXVsdCBwNCB2YWx1ZXMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyAiTmV3S1cyOiBcJFJldmlzaW9uOjFcJCIgPj5rd2ZpbGUxLmMgJiYKKwkJZ2l0IGFkZCBrd2ZpbGUxLmMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkaW5nIFJDUyBrZXl3b3JkcyBpbiBnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgJiYKKwkJZ3JlcCAiTmV3S1cyLipSZXZpc2lvbi4qWzAtOV0iIGt3ZmlsZTEuYworCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxMS1naXQtcDQtbGFiZWwtaW1wb3J0LnNoIGIvdC90OTgxMS1naXQtcDQtbGFiZWwtaW1wb3J0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmRlY2I2NmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODExLWdpdC1wNC1sYWJlbC1pbXBvcnQuc2gKQEAgLTAsMCArMSwyNjcgQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdnaXQgcDQgbGFiZWwgdGVzdHMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjIEJhc2ljIHA0IGxhYmVsIGltcG9ydCB0ZXN0cy4KKyMKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Jhc2ljIHA0IGxhYmVscycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIC1wIG1haW4gJiYKKworCQllY2hvIGYxID5tYWluL2YxICYmCisJCXA0IGFkZCBtYWluL2YxICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMSIgJiYKKworCQllY2hvIGYyID5tYWluL2YyICYmCisJCXA0IGFkZCBtYWluL2YyICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mMiIgJiYKKworCQllY2hvIGYzID5tYWluL2ZpbGVfd2l0aF9cJG1ldGFjaGFyICYmCisJCXA0IGFkZCBtYWluL2ZpbGVfd2l0aF9cJG1ldGFjaGFyICYmCisJCXA0IHN1Ym1pdCAtZCAiZmlsZSB3aXRoIG1ldGFjaGFyIiAmJgorCisJCXA0IHRhZyAtbCBUQUdfRjFfT05MWSBtYWluL2YxICYmCisJCXA0IHRhZyAtbCBUQUdfV0lUSFwkX1NIRUxMX0NIQVIgbWFpbi8uLi4gJiYKKwkJcDQgdGFnIC1sIHRoaXNfdGFnX3dpbGxfYmVcIHNraXBwZWQgbWFpbi8uLi4gJiYKKworCQllY2hvIGY0ID5tYWluL2Y0ICYmCisJCXA0IGFkZCBtYWluL2Y0ICYmCisJCXA0IHN1Ym1pdCAtZCAibWFpbi9mNCIgJiYKKworCQlwNCBsYWJlbCAtaSA8PC1FT0YgJiYKKwkJTGFiZWw6IFRBR19MT05HX0xBQkVMCisJCURlc2NyaXB0aW9uOgorCQkgICBBIExhYmVsIGZpcnN0IGxpbmUKKwkJICAgQSBMYWJlbCBzZWNvbmQgbGluZQorCQlWaWV3OgkvL2RlcG90Ly4uLgorCQlFT0YKKworCQlwNCB0YWcgLWwgVEFHX0xPTkdfTEFCRUwgLi4uICYmCisKKwkJcDQgbGFiZWxzIC4uLiAmJgorCisJCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYWJlbEltcG9ydFJlZ2V4cCAiLipUQUcuKiIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1pbXBvcnQtbGFiZWxzIC0tdmVyYm9zZSAmJgorCisJCWdpdCB0YWcgJiYKKwkJZ2l0IHRhZyA+dGFnbGlzdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAzIHRhZ2xpc3QgJiYKKworCQljZCBtYWluICYmCisJCWdpdCBjaGVja291dCBUQUdfRjFfT05MWSAmJgorCQkhIHRlc3QgLWYgZjIgJiYKKwkJZ2l0IGNoZWNrb3V0IFRBR19XSVRIXCRfU0hFTExfQ0hBUiAmJgorCQl0ZXN0IC1mIGYxICYmIHRlc3QgLWYgZjIgJiYgdGVzdCAtZiBmaWxlX3dpdGhfXCRtZXRhY2hhciAmJgorCisJCWdpdCBzaG93IFRBR19MT05HX0xBQkVMIHwgZ3JlcCAtcSAiQSBMYWJlbCBzZWNvbmQgbGluZSIKKwkpCisnCisjIFRlc3Qgc29tZSBsYWJlbCBjb3JuZXIgY2FzZXM6CisjCisjIC0gdHdvIHRhZ3Mgb24gdGhlIHNhbWUgZmlsZTsgYm90aCBzaG91bGQgYmUgYXZhaWxhYmxlCisjIC0gYSB0YWcgdGhhdCBpcyBvbmx5IG9uIG9uZSBmaWxlOyB0aGlzIGtpbmQgb2YgdGFnCisjICAgY2Fubm90IGJlIGltcG9ydGVkIChhdCBsZWFzdCBub3QgZWFzaWx5KS4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAndHdvIGxhYmVscyBvbiB0aGUgc2FtZSBjaGFuZ2VsaXN0JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJbWtkaXIgLXAgbWFpbiAmJgorCisJCXA0IGVkaXQgbWFpbi9mMSBtYWluL2YyICYmCisJCWVjaG8gImhlbGxvIHdvcmxkIiA+bWFpbi9mMSAmJgorCQllY2hvICJub3QgaW4gdGhlIHRhZyIgPm1haW4vZjIgJiYKKwkJcDQgc3VibWl0IC1kICJtYWluL2ZbMTJdOiB0ZXN0aW5nIHR3byBsYWJlbHMiICYmCisKKwkJcDQgdGFnIC1sIFRBR19GMV8xIG1haW4vLi4uICYmCisJCXA0IHRhZyAtbCBUQUdfRjFfMiBtYWluLy4uLiAmJgorCisJCXA0IGxhYmVscyAuLi4gJiYKKworCQlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS1pbXBvcnQtbGFiZWxzICYmCisKKwkJZ2l0IHRhZyB8IGdyZXAgVEFHX0YxICYmCisJCWdpdCB0YWcgfCBncmVwIC1xIFRBR19GMV8xICYmCisJCWdpdCB0YWcgfCBncmVwIC1xIFRBR19GMV8yICYmCisKKwkJY2QgbWFpbiAmJgorCisJCWdpdCBjaGVja291dCBUQUdfRjFfMSAmJgorCQlscyAmJgorCQl0ZXN0IC1mIGYxICYmCisKKwkJZ2l0IGNoZWNrb3V0IFRBR19GMV8yICYmCisJCWxzICYmCisJCXRlc3QgLWYgZjEKKwkpCisnCisKKyMgRXhwb3J0IHNvbWUgZ2l0IHRhZ3MgdG8gcDQKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cG9ydCBnaXQgdGFncyB0byBwNCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHRhZyAtbSAiQSB0YWcgY3JlYXRlZCBpbiBnaXQ6eHl6enkiIEdJVF9UQUdfMSAmJgorCQllY2hvICJoZWxsbyB3b3JsZCIgPm1haW4vZjEwICYmCisJCWdpdCBhZGQgbWFpbi9mMTAgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiQWRkaW5nIGZpbGUgZm9yIGV4cG9ydCB0ZXN0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IHRhZyAtbSAiQW5vdGhlciBnaXQgdGFnIiBHSVRfVEFHXzIgJiYKKwkJZ2l0IHRhZyBMSUdIVFdFSUdIVF9UQUcgJiYKKwkJZ2l0IHA0IHJlYmFzZSAtLWltcG9ydC1sYWJlbHMgLS12ZXJib3NlICYmCisJCWdpdCBwNCBzdWJtaXQgLS1leHBvcnQtbGFiZWxzIC0tdmVyYm9zZQorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBzeW5jIC4uLiAmJgorCQlwNCBsYWJlbHMgLi4uIHwgZ3JlcCBHSVRfVEFHXzEgJiYKKwkJcDQgbGFiZWxzIC4uLiB8IGdyZXAgR0lUX1RBR18yICYmCisJCXA0IGxhYmVscyAuLi4gfCBncmVwIExJR0hUV0VJR0hUX1RBRyAmJgorCQlwNCBsYWJlbCAtbyBHSVRfVEFHXzEgfCBncmVwICJ0YWcgY3JlYXRlZCBpbiBnaXQ6eHl6enkiICYmCisJCXA0IHN5bmMgLi4uQEdJVF9UQUdfMSAmJgorCQkhIHRlc3QgLWYgbWFpbi9mMTAKKwkJcDQgc3luYyAuLi5AR0lUX1RBR18yICYmCisJCXRlc3QgLWYgbWFpbi9mMTAKKwkpCisnCisKKyMgRXhwb3J0IGEgdGFnIGZyb20gZ2l0IHdoZXJlIGFuIGFmZmVjdGVkIGZpbGUgaXMgZGVsZXRlZCBsYXRlciBvbgorIyBOZWVkIHRvIGNyZWF0ZSBnaXQgdGFncyBhZnRlciByZWJhc2UsIHNpbmNlIG9ubHkgdGhlbiBjYW4gdGhlCisjIGdpdCBjb21taXRzIGJlIG1hcHBlZCB0byBwNCBjaGFuZ2VsaXN0cy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2V4cG9ydCBnaXQgdGFncyB0byBwNCB3aXRoIGRlbGV0aW9uJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcDQgc3luYyAtLWltcG9ydC1sYWJlbHMgJiYKKwkJZWNobyAiZGVsZXRlZCBmaWxlIiA+bWFpbi9kZWxldGVkX2ZpbGUgJiYKKwkJZ2l0IGFkZCBtYWluL2RlbGV0ZWRfZmlsZSAmJgorCQlnaXQgY29tbWl0IC1tICJjcmVhdGUgZGVsZXRlZCBmaWxlIiAmJgorCQlnaXQgcm0gbWFpbi9kZWxldGVkX2ZpbGUgJiYKKwkJZWNobyAibmV3IGZpbGUiID5tYWluL2YxMSAmJgorCQlnaXQgYWRkIG1haW4vZjExICYmCisJCWdpdCBjb21taXQgLW0gImRlbGV0ZSB0aGUgZGVsZXRlZCBmaWxlIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKwkJZ2l0IHA0IHJlYmFzZSAtLWltcG9ydC1sYWJlbHMgLS12ZXJib3NlICYmCisJCWdpdCB0YWcgLW0gInRhZyBvbiBkZWxldGVkIGZpbGUiIEdJVF9UQUdfT05fREVMRVRFRCBIRUFEfjEgJiYKKwkJZ2l0IHRhZyAtbSAidGFnIGFmdGVyIGRlbGV0aW9uIiBHSVRfVEFHX0FGVEVSX0RFTEVUSU9OIEhFQUQgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWV4cG9ydC1sYWJlbHMgLS12ZXJib3NlCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IHN5bmMgLi4uICYmCisJCXA0IHN5bmMgLi4uQEdJVF9UQUdfT05fREVMRVRFRCAmJgorCQl0ZXN0IC1mIG1haW4vZGVsZXRlZF9maWxlICYmCisJCXA0IHN5bmMgLi4uQEdJVF9UQUdfQUZURVJfREVMRVRJT04gJiYKKwkJISB0ZXN0IC1mIG1haW4vZGVsZXRlZF9maWxlICYmCisJCWVjaG8gImNoZWNraW5nIGxhYmVsIGNvbnRlbnRzIiAmJgorCQlwNCBsYWJlbCAtbyBHSVRfVEFHX09OX0RFTEVURUQgfCBncmVwICJ0YWcgb24gZGVsZXRlZCBmaWxlIgorCSkKKycKKworIyBDcmVhdGUgYSB0YWcgaW4gZ2l0IHRoYXQgY2Fubm90IGJlIGV4cG9ydGVkIHRvIHA0Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICd0YWcgdGhhdCBjYW5ub3QgYmUgZXhwb3J0ZWQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjaGVja291dCAtYiBhX2JyYW5jaCAmJgorCQllY2hvICJoZWxsbyIgPm1haW4vZjEyICYmCisJCWdpdCBhZGQgbWFpbi9mMTIgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkaW5nIGYxMiIgJiYKKwkJZ2l0IHRhZyAtbSAidGFnIG9uIGFfYnJhbmNoIiBHSVRfVEFHX09OX0FfQlJBTkNIICYmCisJCWdpdCBjaGVja291dCBtYXN0ZXIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWV4cG9ydC1sYWJlbHMKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgc3luYyAuLi4gJiYKKwkJIShwNCBsYWJlbHMgfCBncmVwIEdJVF9UQUdfT05fQV9CUkFOQ0gpCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd1c2UgZ2l0IGNvbmZpZyB0byBlbmFibGUgaW1wb3J0L2V4cG9ydCBvZiB0YWdzJyAnCisJZ2l0IHA0IGNsb25lIC0tdmVyYm9zZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3RAYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZXhwb3J0TGFiZWxzIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuaW1wb3J0TGFiZWxzIHRydWUgJiYKKwkJZ2l0IHRhZyBDRkdfQV9HSVRfVEFHICYmCisJCWdpdCBwNCByZWJhc2UgLS12ZXJib3NlICYmCisJCWdpdCBwNCBzdWJtaXQgLS12ZXJib3NlICYmCisJCWdpdCB0YWcgJiYKKwkJZ2l0IHRhZyB8IGdyZXAgVEFHX0YxXzEKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgbGFiZWxzICYmCisJCXA0IGxhYmVscyB8IGdyZXAgQ0ZHX0FfR0lUX1RBRworCSkKKycKKworcDRfaGVhZF9yZXZpc2lvbigpIHsKKwlwNCBjaGFuZ2VzIC1tIDEgIiRAIiB8IGF3ayAne3ByaW50ICQyfScKK30KKworIyBJbXBvcnRpbmcgYSBsYWJlbCB0aGF0IHJlZmVyZW5jZXMgYSBQNCBjb21taXQgdGhhdAorIyBoYXMgbm90IGJlZW4gc2Vlbi4gVGhlIHByZXNlbmNlIG9mIGEgbGFiZWwgb24gYSBjb21taXQKKyMgd2UgaGF2ZW4ndCBzZWVuIHNob3VsZCBub3QgY2F1c2UgZ2l0LXA0IHRvIGZhaWwuIEl0IHNob3VsZAorIyBtZXJlbHkgc2tpcCB0aGF0IGxhYmVsLCBhbmQgc3RpbGwgaW1wb3J0IG90aGVyIGxhYmVscy4KK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2ltcG9ydGluZyBsYWJlbHMgd2l0aCBtaXNzaW5nIHJldmlzaW9ucycgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJcm0gLWZyICIkY2xpIiAiJGdpdCIgJiYKKwkJbWtkaXIgIiRjbGkiICYmCisJCVA0Q0xJRU5UPW1pc3NpbmctcmV2aXNpb24gJiYKKwkJY2xpZW50X3ZpZXcgIi8vZGVwb3QvbWlzc2luZy1yZXZpc2lvbi8uLi4gLy9taXNzaW5nLXJldmlzaW9uLy4uLiIgJiYKKwkJY2QgIiRjbGkiICYmCisJCT5mMSAmJiBwNCBhZGQgZjEgJiYgcDQgc3VibWl0IC1kICJzdGFydCIgJiYKKworCQlwNCB0YWcgLWwgVEFHX1MwIC4uLiAmJgorCisJCT5mMiAmJiBwNCBhZGQgZjIgJiYgcDQgc3VibWl0IC1kICJzZWNvbmQiICYmCisKKwkJc3RhcnRyZXY9JChwNF9oZWFkX3JldmlzaW9uIC8vZGVwb3QvbWlzc2luZy1yZXZpc2lvbi8uLi4pICYmCisKKwkJPmYzICYmIHA0IGFkZCBmMyAmJiBwNCBzdWJtaXQgLWQgInRoaXJkIiAmJgorCisJCXA0IGVkaXQgZjIgJiYgZGF0ZSA+ZjIgJiYgcDQgc3VibWl0IC1kICJjaGFuZ2UiIGYyICYmCisKKwkJZW5kcmV2PSQocDRfaGVhZF9yZXZpc2lvbiAvL2RlcG90L21pc3NpbmctcmV2aXNpb24vLi4uKSAmJgorCisJCXA0IHRhZyAtbCBUQUdfUzEgLi4uICYmCisKKwkJIyB3ZSBzaG91bGQgc2tpcCBUQUdfUzAgc2luY2UgaXQgaXMgYmVmb3JlIG91ciBzdGFydHBvaW50LAorCQkjIGJ1dCBwaWNrIHVwIFRBR19TMS4KKworCQlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLWltcG9ydC1sYWJlbHMgLXYgXAorCQkJLy9kZXBvdC9taXNzaW5nLXJldmlzaW9uLy4uLkAkc3RhcnRyZXYsJGVuZHJldiAmJgorCQkoCisJCQljZCAiJGdpdCIgJiYKKwkJCWdpdCByZXYtcGFyc2UgVEFHX1MxICYmCisJCQkhIGdpdCByZXYtcGFyc2UgVEFHX1MwCisJCSkKKwkpCisnCisKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTItZ2l0LXA0LXdpbGRjYXJkcy5zaCBiL3QvdDk4MTItZ2l0LXA0LXdpbGRjYXJkcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMjA2NzcxCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgxMi1naXQtcDQtd2lsZGNhcmRzLnNoCkBAIC0wLDAgKzEsMjE4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHdpbGRjYXJkcycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCBwNCBmaWxlcyB3aXRoIHdpbGRjYXJkcyBpbiB0aGUgbmFtZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwcmludGYgImZpbGUyXG5oYXNcbnNvbWVcbnJhbmRvbVxudGV4dFxuIiA+ZmlsZTIgJiYKKwkJcDQgYWRkIGZpbGUyICYmCisJCWVjaG8gZmlsZS13aWxkLWhhc2ggPmZpbGUtd2lsZCNoYXNoICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXLCFDWUdXSU4KKwkJdGhlbgorCQkJZWNobyBmaWxlLXdpbGQtc3RhciA+ZmlsZS13aWxkXCpzdGFyCisJCWZpICYmCisJCWVjaG8gZmlsZS13aWxkLWF0ID5maWxlLXdpbGRAYXQgJiYKKwkJZWNobyBmaWxlLXdpbGQtcGVyY2VudCA+ZmlsZS13aWxkJXBlcmNlbnQgJiYKKwkJcDQgYWRkIC1mIGZpbGUtd2lsZCogJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlIHdpbGRjYXJkcyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIGdpdCBwNCBjbG9uZScgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0IC1mIGZpbGUtd2lsZCNoYXNoICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXLCFDWUdXSU4KKwkJdGhlbgorCQkJdGVzdCAtZiBmaWxlLXdpbGRcKnN0YXIKKwkJZmkgJiYKKwkJdGVzdCAtZiBmaWxlLXdpbGRAYXQgJiYKKwkJdGVzdCAtZiBmaWxlLXdpbGQlcGVyY2VudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgZmlsZXMgc3VibWl0IGJhY2sgdG8gcDQsIGFkZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGdpdC13aWxkLWhhc2ggPmdpdC13aWxkI2hhc2ggJiYKKwkJaWYgdGVzdF9oYXZlX3ByZXJlcSAhTUlOR1csIUNZR1dJTgorCQl0aGVuCisJCQllY2hvIGdpdC13aWxkLXN0YXIgPmdpdC13aWxkXCpzdGFyCisJCWZpICYmCisJCWVjaG8gZ2l0LXdpbGQtYXQgPmdpdC13aWxkQGF0ICYmCisJCWVjaG8gZ2l0LXdpbGQtcGVyY2VudCA+Z2l0LXdpbGQlcGVyY2VudCAmJgorCQlnaXQgYWRkIGdpdC13aWxkKiAmJgorCQlnaXQgY29tbWl0IC1tICJhZGQgc29tZSB3aWxkY2FyZCBmaWxlbmFtZXMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBnaXQtd2lsZCNoYXNoICYmCisJCWlmIHRlc3RfaGF2ZV9wcmVyZXEgIU1JTkdXLCFDWUdXSU4KKwkJdGhlbgorCQkJdGVzdF9wYXRoX2lzX2ZpbGUgZ2l0LXdpbGRcKnN0YXIKKwkJZmkgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZ2l0LXdpbGRAYXQgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgZ2l0LXdpbGQlcGVyY2VudAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnd2lsZGNhcmQgZmlsZXMgc3VibWl0IGJhY2sgdG8gcDQsIG1vZGlmeScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIG5ldy1saW5lID4+Z2l0LXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCWVjaG8gbmV3LWxpbmUgPj5naXQtd2lsZFwqc3RhcgorCQlmaSAmJgorCQllY2hvIG5ldy1saW5lID4+Z2l0LXdpbGRAYXQgJiYKKwkJZWNobyBuZXctbGluZSA+PmdpdC13aWxkJXBlcmNlbnQgJiYKKwkJZ2l0IGFkZCBnaXQtd2lsZCogJiYKKwkJZ2l0IGNvbW1pdCAtbSAibW9kaWZ5IHRoZSB3aWxkY2FyZCBmaWxlcyIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfbGluZV9jb3VudCA9IDIgZ2l0LXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCXRlc3RfbGluZV9jb3VudCA9IDIgZ2l0LXdpbGRcKnN0YXIKKwkJZmkgJiYKKwkJdGVzdF9saW5lX2NvdW50ID0gMiBnaXQtd2lsZEBhdCAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAyIGdpdC13aWxkJXBlcmNlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIHN1Ym1pdCBiYWNrIHRvIHA0LCBjb3B5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWNwIGZpbGUyIGdpdC13aWxkLWNwI2hhc2ggJiYKKwkJZ2l0IGFkZCBnaXQtd2lsZC1jcCNoYXNoICYmCisJCWNwIGdpdC13aWxkI2hhc2ggZmlsZS13aWxkLTMgJiYKKwkJZ2l0IGFkZCBmaWxlLXdpbGQtMyAmJgorCQlnaXQgY29tbWl0IC1tICJ3aWxkY2FyZCBjb3BpZXMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllc0hhcmRlciB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBnaXQtd2lsZC1jcCNoYXNoICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGZpbGUtd2lsZC0zCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICd3aWxkY2FyZCBmaWxlcyBzdWJtaXQgYmFjayB0byBwNCwgcmVuYW1lJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBtdiBnaXQtd2lsZEBhdCBmaWxlLXdpbGQtNCAmJgorCQlnaXQgbXYgZmlsZS13aWxkLTMgZ2l0LXdpbGQtY3AlcGVyY2VudCAmJgorCQlnaXQgY29tbWl0IC1tICJ3aWxkY2FyZCByZW5hbWVzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkQGF0ICYmCisJCXRlc3RfcGF0aF9pc19maWxlIGdpdC13aWxkLWNwJXBlcmNlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIHN1Ym1pdCBiYWNrIHRvIHA0LCBkZWxldGUnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHJtIGdpdC13aWxkKiAmJgorCQlnaXQgY29tbWl0IC1tICJkZWxldGUgdGhlIHdpbGRjYXJkIGZpbGVzIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3NpbmcgZ2l0LXdpbGQjaGFzaCAmJgorCQlpZiB0ZXN0X2hhdmVfcHJlcmVxICFNSU5HVywhQ1lHV0lOCisJCXRoZW4KKwkJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkXCpzdGFyCisJCWZpICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkQGF0ICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGdpdC13aWxkJXBlcmNlbnQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3A0IGRlbGV0ZWQgYSB3aWxkY2FyZCBmaWxlJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyAid2lsZCBkZWxldGUgdGVzdCIgPndpbGRAZGVsZXRlICYmCisJCXA0IGFkZCAtZiB3aWxkQGRlbGV0ZSAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCB3aWxkQGRlbGV0ZSIKKwkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHdpbGRAZGVsZXRlCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCSMgbXVzdCB1c2UgaXRzIGVuY29kZWQgbmFtZQorCQlwNCBkZWxldGUgd2lsZCU0MGRlbGV0ZSAmJgorCQlwNCBzdWJtaXQgLWQgImRlbGV0ZSB3aWxkQGRlbGV0ZSIKKwkpICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgJiYKKwkJZ2l0IG1lcmdlIC0tZmYtb25seSBwNC9tYXN0ZXIgJiYKKwkJdGVzdF9wYXRoX2lzX21pc3Npbmcgd2lsZEBkZWxldGUKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3dpbGRjYXJkIGZpbGVzIHJlcXVpcmluZyBrZXl3b3JkIHNjcnViJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJY2F0IDw8LVxFT0YgPnNjcnViQHdpbGQgJiYKKwkJJElkJAorCQlsaW5lMgorCQlFT0YKKwkJcDQgYWRkIC10IHRleHQrayAtZiBzY3J1YkB3aWxkICYmCisJCXA0IHN1Ym1pdCAtZCAic2NydWIgYXQgd2lsZCIKKwkpICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuYXR0ZW1wdFJDU0NsZWFudXAgdHJ1ZSAmJgorCQlzZWQgInMvXmxpbmUyL2xpbmUyIGVkaXQvIiA8c2NydWJAd2lsZCA+c2NydWJAd2lsZC50bXAgJiYKKwkJbXYgLWYgc2NydWJAd2lsZC50bXAgc2NydWJAd2lsZCAmJgorCQlnaXQgY29tbWl0IC1tICJzY3J1YiBhdCB3aWxkIGxpbmUyIGVkaXQiIHNjcnViQHdpbGQgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTMtZ2l0LXA0LXByZXNlcnZlLXVzZXJzLnNoIGIvdC90OTgxMy1naXQtcDQtcHJlc2VydmUtdXNlcnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGZlMjMxMgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTMtZ2l0LXA0LXByZXNlcnZlLXVzZXJzLnNoCkBAIC0wLDAgKzEsMTQ1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHByZXNlcnZlIHVzZXJzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGZpbGVzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgY2xpZW50IC1vIHwgc2VkICIvTGluZUVuZC9zLzouKi86dW5peC8iIHwgcDQgY2xpZW50IC1pICYmCisJCWVjaG8gZmlsZTEgPmZpbGUxICYmCisJCWVjaG8gZmlsZTIgPmZpbGUyICYmCisJCXA0IGFkZCBmaWxlMSBmaWxlMiAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBmaWxlcyIKKwkpCisnCisKK3A0X2dyYW50X2FkbWluKCkgeworCW5hbWU9JDEgJiYKKwl7CisJCXA0IHByb3RlY3QgLW8gJiYKKwkJZWNobyAiICAgIGFkbWluIHVzZXIgJG5hbWUgKiAvL2RlcG90Ly4uLiIKKwl9IHwgcDQgcHJvdGVjdCAtaQorfQorCitwNF9jaGVja19jb21taXRfYXV0aG9yKCkgeworCWZpbGU9JDEgdXNlcj0kMiAmJgorCXA0IGNoYW5nZXMgLW0gMSAvL2RlcG90LyRmaWxlIHwgZ3JlcCAtcSAkdXNlcgorfQorCittYWtlX2NoYW5nZV9ieV91c2VyKCkgeworCWZpbGU9JDEgbmFtZT0kMiBlbWFpbD0kMyAmJgorCWVjaG8gInVzZXJuYW1lOiBhIGNoYW5nZSBieSAkbmFtZSIgPj4iJGZpbGUiICYmCisJZ2l0IGFkZCAiJGZpbGUiICYmCisJZ2l0IGNvbW1pdCAtLWF1dGhvciAiJG5hbWUgPCRlbWFpbD4iIC1tICJhIGNoYW5nZSBieSAkbmFtZSIKK30KKworIyBUZXN0IHVzZXJuYW1lIHN1cHBvcnQsIHN1Ym1pdHRpbmcgYXMgdXNlciAnYWxpY2UnCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcmVzZXJ2ZSB1c2VycycgJworCXA0X2FkZF91c2VyIGFsaWNlICYmCisJcDRfYWRkX3VzZXIgYm9iICYmCisJcDRfZ3JhbnRfYWRtaW4gYWxpY2UgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyAidXNlcm5hbWU6IGEgY2hhbmdlIGJ5IGFsaWNlIiA+PmZpbGUxICYmCisJCWVjaG8gInVzZXJuYW1lOiBhIGNoYW5nZSBieSBib2IiID4+ZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtLWF1dGhvciAiQWxpY2UgPGFsaWNlQGV4YW1wbGUuY29tPiIgLW0gImEgY2hhbmdlIGJ5IGFsaWNlIiBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC0tYXV0aG9yICJCb2IgPGJvYkBleGFtcGxlLmNvbT4iIC1tICJhIGNoYW5nZSBieSBib2IiIGZpbGUyICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0Q2hlY2sgdHJ1ZSAmJgorCQlQNEVESVRPUj0idGVzdC1jaG10aW1lICs1IiBQNFVTRVI9YWxpY2UgUDRQQVNTV0Q9c2VjcmV0ICYmCisJCWV4cG9ydCBQNEVESVRPUiBQNFVTRVIgUDRQQVNTV0QgJiYKKwkJZ2l0IHA0IGNvbW1pdCAtLXByZXNlcnZlLXVzZXIgJiYKKwkJcDRfY2hlY2tfY29tbWl0X2F1dGhvciBmaWxlMSBhbGljZSAmJgorCQlwNF9jaGVja19jb21taXRfYXV0aG9yIGZpbGUyIGJvYgorCSkKKycKKworIyBUZXN0IHVzZXJuYW1lIHN1cHBvcnQsIHN1Ym1pdHRpbmcgYXMgYm9iLCB3aG8gbGFja3MgYWRtaW4gcmlnaHRzLiBTaG91bGQKKyMgbm90IHN1Ym1pdCBjaGFuZ2UgdG8gcDQgKGdpdCBkaWZmIHNob3VsZCBzaG93IGRlbHRhcykuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdyZWZ1c2UgdG8gcHJlc2VydmUgdXNlcnMgd2l0aG91dCBwZXJtcycgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZWNobyAidXNlcm5hbWUtbm9wZXJtczogYSBjaGFuZ2UgYnkgYWxpY2UiID4+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtLWF1dGhvciAiQWxpY2UgPGFsaWNlQGV4YW1wbGUuY29tPiIgLW0gInBlcm1zOiBhIGNoYW5nZSBieSBhbGljZSIgZmlsZTEgJiYKKwkJUDRFRElUT1I9InRlc3QtY2htdGltZSArNSIgUDRVU0VSPWJvYiBQNFBBU1NXRD1zZWNyZXQgJiYKKwkJZXhwb3J0IFA0RURJVE9SIFA0VVNFUiBQNFBBU1NXRCAmJgorCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgY29tbWl0IC0tcHJlc2VydmUtdXNlciAmJgorCQkhIGdpdCBkaWZmIC0tZXhpdC1jb2RlIEhFQUQuLnA0L21hc3RlcgorCSkKKycKKworIyBXaGF0IGhhcHBlbnMgd2l0aCB1bmtub3duIGF1dGhvcj8gV2l0aG91dCBhbGxvd01pc3NpbmdQNFVzZXJzIGl0IHNob3VsZCBmYWlsLgordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJlc2VydmUgdXNlciB3aGVyZSBhdXRob3IgaXMgdW5rbm93biB0byBwNCcgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJZWNobyAidXNlcm5hbWUtYm9iOiBhIGNoYW5nZSBieSBib2IiID4+ZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtLWF1dGhvciAiQm9iIDxib2JAZXhhbXBsZS5jb20+IiAtbSAicHJlc2VydmU6IGEgY2hhbmdlIGJ5IGJvYiIgZmlsZTEgJiYKKwkJZWNobyAidXNlcm5hbWUtdW5rbm93bjogYSBjaGFuZ2UgYnkgY2hhcmxpZSIgPj5maWxlMSAmJgorCQlnaXQgY29tbWl0IC0tYXV0aG9yICJDaGFybGllIDxjaGFybGllQGV4YW1wbGUuY29tPiIgLW0gInByZXNlcnZlOiBhIGNoYW5nZSBieSBjaGFybGllIiBmaWxlMSAmJgorCQlQNEVESVRPUj0idGVzdC1jaG10aW1lICs1IiBQNFVTRVI9YWxpY2UgUDRQQVNTV0Q9c2VjcmV0ICYmCisJCWV4cG9ydCBQNEVESVRPUiBQNFVTRVIgUDRQQVNTV0QgJiYKKwkJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IGNvbW1pdCAtLXByZXNlcnZlLXVzZXIgJiYKKwkJISBnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFELi5wNC9tYXN0ZXIgJiYKKworCQllY2hvICIkMDogcmVwZWF0IHdpdGggYWxsb3dNaXNzaW5nUDRVc2VycyBlbmFibGVkIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5hbGxvd01pc3NpbmdQNFVzZXJzIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQucHJlc2VydmVVc2VyIHRydWUgJiYKKwkJZ2l0IHA0IGNvbW1pdCAmJgorCQlnaXQgZGlmZiAtLWV4aXQtY29kZSBIRUFELi5wNC9tYXN0ZXIgJiYKKwkJcDRfY2hlY2tfY29tbWl0X2F1dGhvciBmaWxlMSBhbGljZQorCSkKKycKKworIyBJZiB3ZSdyZSAqbm90KiB1c2luZyAtLXByZXNlcnZlLXVzZXIsIGdpdC1wNCBzaG91bGQgd2FybiBpZiB3ZSdyZSBzdWJtaXR0aW5nCisjIGNoYW5nZXMgdGhhdCBhcmUgbm90IGFsbCBvdXJzLgorIyBUZXN0OiB1c2VyIGluIHA0IGFuZCB1c2VyIHVua25vd24gdG8gcDQuCisjIFRlc3Q6IHdhcm5pbmcgZGlzYWJsZWQgYW5kIHVzZXIgaXMgdGhlIHNhbWUuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdub3QgcHJlc2VydmluZyB1c2VyIHdpdGggbWl4ZWQgYXV0aG9yc2hpcCcgJworCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdENoZWNrIHRydWUgJiYKKwkJcDRfYWRkX3VzZXIgZGVyZWsgJiYKKworCQltYWtlX2NoYW5nZV9ieV91c2VyIHVzZXJuYW1lZmlsZTMgRGVyZWsgZGVyZWtAZXhhbXBsZS5jb20gJiYKKwkJUDRFRElUT1I9Y2F0IFA0VVNFUj1hbGljZSBQNFBBU1NXRD1zZWNyZXQgJiYKKwkJZXhwb3J0IFA0RURJVE9SIFA0VVNFUiBQNFBBU1NXRCAmJgorCQlnaXQgcDQgY29tbWl0IHxcCisJCWdyZXAgImdpdCBhdXRob3IgZGVyZWtAZXhhbXBsZS5jb20gZG9lcyBub3QgbWF0Y2giICYmCisKKwkJbWFrZV9jaGFuZ2VfYnlfdXNlciB1c2VybmFtZWZpbGUzIENoYXJsaWUgY2hhcmxpZUBleGFtcGxlLmNvbSAmJgorCQlnaXQgcDQgY29tbWl0IHxcCisJCWdyZXAgImdpdCBhdXRob3IgY2hhcmxpZUBleGFtcGxlLmNvbSBkb2VzIG5vdCBtYXRjaCIgJiYKKworCQltYWtlX2NoYW5nZV9ieV91c2VyIHVzZXJuYW1lZmlsZTMgYWxpY2UgYWxpY2VAZXhhbXBsZS5jb20gJiYKKwkJZ2l0IHA0IGNvbW1pdCB8XAorCQl0ZXN0X211c3RfZmFpbCBncmVwICJnaXQgYXV0aG9yLipkb2VzIG5vdCBtYXRjaCIgJiYKKworCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwVXNlck5hbWVDaGVjayB0cnVlICYmCisJCW1ha2VfY2hhbmdlX2J5X3VzZXIgdXNlcm5hbWVmaWxlMyBDaGFybGllIGNoYXJsaWVAZXhhbXBsZS5jb20gJiYKKwkJZ2l0IHA0IGNvbW1pdCB8XAorCQl0ZXN0X211c3RfZmFpbCBncmVwICJnaXQgYXV0aG9yLipkb2VzIG5vdCBtYXRjaCIgJiYKKworCQlwNF9jaGVja19jb21taXRfYXV0aG9yIHVzZXJuYW1lZmlsZTMgYWxpY2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODE0LWdpdC1wNC1yZW5hbWUuc2ggYi90L3Q5ODE0LWdpdC1wNC1yZW5hbWUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzg5OTkyYwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTQtZ2l0LXA0LXJlbmFtZS5zaApAQCAtMCwwICsxLDI2MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCByZW5hbWUnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCcgJworCXN0YXJ0X3A0ZAorJworCisjIFdlIHJlbHkgb24gdGhpcyBiZWhhdmlvciB0byBkZXRlY3QgZm9yIHA0IG1vdmUgYXZhaWxhYmlsaXR5LgordGVzdF9leHBlY3Rfc3VjY2VzcyAncDQgaGVscCB1bmtub3duIHJldHVybnMgMScgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCSgKKwkJCXA0IGhlbHAgY2xpZW50ID5lcnJzIDI+JjEKKwkJCWVjaG8gJD8gPnJldHZhbAorCQkpCisJCWVjaG8gMCA+ZXhwZWN0ZWQgJiYKKwkJdGVzdF9jbXAgZXhwZWN0ZWQgcmV0dmFsICYmCisJCXJtIHJldHZhbCAmJgorCQkoCisJCQlwNCBoZWxwIG5vc3VjaGNvbW1hbmQgPmVycnMgMj4mMQorCQkJZWNobyAkPyA+cmV0dmFsCisJCSkKKwkJZWNobyAxID5leHBlY3RlZCAmJgorCQl0ZXN0X2NtcCBleHBlY3RlZCByZXR2YWwgJiYKKwkJcm0gcmV0dmFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjcmVhdGUgZmlsZXMnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBjbGllbnQgLW8gfCBzZWQgIi9MaW5lRW5kL3MvOi4qLzp1bml4LyIgfCBwNCBjbGllbnQgLWkgJiYKKwkJY2F0ID5maWxlMSA8PC1FT0YgJiYKKwkJQSBsYXJnZSBibG9jayBvZiB0ZXh0CisJCWluIGZpbGUxIHRoYXQgd2lsbCBnZW5lcmF0ZQorCQllbm91Z2ggY29udGV4dCBzbyB0aGF0IHJlbmFtZQorCQlhbmQgY29weSBkZXRlY3Rpb24gd2lsbCBmaW5kCisJCXNvbWV0aGluZyBpbnRlcmVzdGluZyB0byBkby4KKwkJRU9GCisJCWNhdCA+ZmlsZTIgPDwtRU9GICYmCisJCS8qCisJCSAqIFRoaXMgYmxvYiBsb29rcyBhIGJpdAorCQkgKiBkaWZmZXJlbnQuCisJCSAqLworCQlpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisJCXsKKwkJCWNoYXIgdGV4dFsyMDBdOworCisJCQlzdHJjcHkodGV4dCwgImNvcHkvcmVuYW1lIHRoaXMiKTsKKwkJCXByaW50ZigidGV4dCBpcyAlc1xuIiwgdGV4dCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlFT0YKKwkJcDQgYWRkIGZpbGUxIGZpbGUyICYmCisJCXA0IHN1Ym1pdCAtZCAiYWRkIGZpbGVzIgorCSkKKycKKworIyBSZW5hbWUgYSBmaWxlIGFuZCBjb25maXJtIHRoYXQgcmVuYW1lIGlzIG5vdCBkZXRlY3RlZCBpbiBQNC4KKyMgUmVuYW1lIHRoZSBuZXcgZmlsZSBhZ2FpbiB3aXRoIGRldGVjdFJlbmFtZXMgb3B0aW9uIGVuYWJsZWQgYW5kIGNvbmZpcm0gdGhhdAorIyB0aGlzIGlzIGRldGVjdGVkIGluIFA0LgorIyBSZW5hbWUgdGhlIG5ldyBmaWxlIGFnYWluIGFkZGluZyBhbiBleHRyYSBsaW5lLCBjb25maWd1cmUgYSBiaWcgdGhyZXNob2xkIGluCisjIGRldGVjdFJlbmFtZXMgYW5kIGNvbmZpcm0gdGhhdCByZW5hbWUgaXMgbm90IGRldGVjdGVkIGluIFA0LgorIyBSZXBlYXQsIHRoaXMgdGltZSB3aXRoIGEgc21hbGxlciB0aHJlc2hvbGQgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcmVuYW1lIGlzCisjIGRldGVjdGVkIGluIFA0LgordGVzdF9leHBlY3Rfc3VjY2VzcyAnZGV0ZWN0IHJlbmFtZXMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKworCQlnaXQgbXYgZmlsZTEgZmlsZTQgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiUmVuYW1lIGZpbGUxIHRvIGZpbGU0IiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1NIEhFQUQgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTQgPmZpbGVsb2cgJiYKKwkJISBncmVwICIgZnJvbSAvL2RlcG90IiBmaWxlbG9nICYmCisKKwkJZ2l0IG12IGZpbGU0IGZpbGU1ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIlJlbmFtZSBmaWxlNCB0byBmaWxlNSIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtTSBIRUFEICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdFJlbmFtZXMgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlNSA+ZmlsZWxvZyAmJgorCQlncmVwICIgZnJvbSAvL2RlcG90L2ZpbGU0IiBmaWxlbG9nICYmCisKKwkJZ2l0IG12IGZpbGU1IGZpbGU2ICYmCisJCWVjaG8gdXBkYXRlID4+ZmlsZTYgJiYKKwkJZ2l0IGFkZCBmaWxlNiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJSZW5hbWUgZmlsZTUgdG8gZmlsZTYgd2l0aCBjaGFuZ2VzIiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1NIEhFQUQgJiYKKwkJbGV2ZWw9JChnaXQgZGlmZi10cmVlIC1yIC1NIEhFQUQgfCBzZWQgMWQgfCBjdXQgLWYxIHwgY3V0IC1kIiAiIC1mNSB8IHNlZCAicy9SMCovLyIpICYmCisJCXRlc3QgLW4gIiRsZXZlbCIgJiYgdGVzdCAiJGxldmVsIiAtZ3QgMCAmJiB0ZXN0ICIkbGV2ZWwiIC1sdCA5OCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzICQoKCRsZXZlbCArIDIpKSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlNiA+ZmlsZWxvZyAmJgorCQkhIGdyZXAgIiBmcm9tIC8vZGVwb3QiIGZpbGVsb2cgJiYKKworCQlnaXQgbXYgZmlsZTYgZmlsZTcgJiYKKwkJZWNobyB1cGRhdGUgPj5maWxlNyAmJgorCQlnaXQgYWRkIGZpbGU3ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIlJlbmFtZSBmaWxlNiB0byBmaWxlNyB3aXRoIGNoYW5nZXMiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLU0gSEVBRCAmJgorCQlsZXZlbD0kKGdpdCBkaWZmLXRyZWUgLXIgLU0gSEVBRCB8IHNlZCAxZCB8IGN1dCAtZjEgfCBjdXQgLWQiICIgLWY1IHwgc2VkICJzL1IwKi8vIikgJiYKKwkJdGVzdCAtbiAiJGxldmVsIiAmJiB0ZXN0ICIkbGV2ZWwiIC1ndCAyICYmIHRlc3QgIiRsZXZlbCIgLWx0IDEwMCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzICQoKCRsZXZlbCAtIDIpKSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlNyA+ZmlsZWxvZyAmJgorCQlncmVwICIgZnJvbSAvL2RlcG90L2ZpbGU2IiBmaWxlbG9nCisJKQorJworCisjIENvcHkgYSBmaWxlIGFuZCBjb25maXJtIHRoYXQgY29weSBpcyBub3QgZGV0ZWN0ZWQgaW4gUDQuCisjIENvcHkgYSBmaWxlIHdpdGggZGV0ZWN0Q29waWVzIG9wdGlvbiBlbmFibGVkIGFuZCBjb25maXJtIHRoYXQgY29weSBpcyBub3QKKyMgZGV0ZWN0ZWQgaW4gUDQuCisjIE1vZGlmeSBhbmQgY29weSBhIGZpbGUgd2l0aCBkZXRlY3RDb3BpZXMgb3B0aW9uIGVuYWJsZWQgYW5kIGNvbmZpcm0gdGhhdCBjb3B5CisjIGlzIGRldGVjdGVkIGluIFA0LgorIyBDb3B5IGEgZmlsZSB3aXRoIGRldGVjdENvcGllcyBhbmQgZGV0ZWN0Q29waWVzSGFyZGVyIG9wdGlvbnMgZW5hYmxlZCBhbmQKKyMgY29uZmlybSB0aGF0IGNvcHkgaXMgZGV0ZWN0ZWQgaW4gUDQuCisjIE1vZGlmeSBhbmQgY29weSBhIGZpbGUsIGNvbmZpZ3VyZSBhIGJpZ2dlciB0aHJlc2hvbGQgaW4gZGV0ZWN0Q29waWVzIGFuZAorIyBjb25maXJtIHRoYXQgY29weSBpcyBub3QgZGV0ZWN0ZWQgaW4gUDQuCisjIE1vZGlmeSBhbmQgY29weSBhIGZpbGUsIGNvbmZpZ3VyZSBhIHNtYWxsZXIgdGhyZXNob2xkIGluIGRldGVjdENvcGllcyBhbmQKKyMgY29uZmlybSB0aGF0IGNvcHkgaXMgZGV0ZWN0ZWQgaW4gUDQuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkZXRlY3QgY29waWVzJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisKKwkJZWNobyAiZmlsZTgiID4+ZmlsZTIgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiRGlmZmVyZW50aWF0ZSBmaWxlMiIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQljcCBmaWxlMiBmaWxlOCAmJgorCQlnaXQgYWRkIGZpbGU4ICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNvcHkgZmlsZTIgdG8gZmlsZTgiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgSEVBRCAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlOCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTggfCB0ZXN0X211c3RfZmFpbCBncmVwIC1xICJicmFuY2ggZnJvbSIgJiYKKworCQllY2hvICJmaWxlOSIgPj5maWxlMiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJEaWZmZXJlbnRpYXRlIGZpbGUyIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisKKwkJY3AgZmlsZTIgZmlsZTkgJiYKKwkJZ2l0IGFkZCBmaWxlOSAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDb3B5IGZpbGUyIHRvIGZpbGU5IiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1DIEhFQUQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzIHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTkgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGU5IHwgdGVzdF9tdXN0X2ZhaWwgZ3JlcCAtcSAiYnJhbmNoIGZyb20iICYmCisKKwkJZWNobyAiZmlsZTEwIiA+PmZpbGUyICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkRpZmZlcmVudGlhdGUgZmlsZTIiICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKworCQllY2hvICJmaWxlMiIgPj5maWxlMiAmJgorCQljcCBmaWxlMiBmaWxlMTAgJiYKKwkJZ2l0IGFkZCBmaWxlMiBmaWxlMTAgJiYKKwkJZ2l0IGNvbW1pdCAtYSAtbSAiTW9kaWZ5IGFuZCBjb3B5IGZpbGUyIHRvIGZpbGUxMCIgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtQyBIRUFEICYmCisJCXNyYz0kKGdpdCBkaWZmLXRyZWUgLXIgLUMgSEVBRCB8IHNlZCAxZCB8IHNlZCAyZCB8IGN1dCAtZjIpICYmCisJCXRlc3QgIiRzcmMiID0gZmlsZTIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTEwICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlMTAgfCBncmVwIC1xICJicmFuY2ggZnJvbSAvL2RlcG90L2ZpbGUyIiAmJgorCisJCWVjaG8gImZpbGUxMSIgPj5maWxlMiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJEaWZmZXJlbnRpYXRlIGZpbGUyIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisKKwkJY3AgZmlsZTIgZmlsZTExICYmCisJCWdpdCBhZGQgZmlsZTExICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkNvcHkgZmlsZTIgdG8gZmlsZTExIiAmJgorCQlnaXQgZGlmZi10cmVlIC1yIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIEhFQUQgJiYKKwkJc3JjPSQoZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEIHwgc2VkIDFkIHwgY3V0IC1mMikgJiYKKwkJdGVzdCAiJHNyYyIgPSBmaWxlMiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXNIYXJkZXIgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlMTEgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGUxMSB8IGdyZXAgLXEgImJyYW5jaCBmcm9tIC8vZGVwb3QvZmlsZTIiICYmCisKKwkJZWNobyAiZmlsZTEyIiA+PmZpbGUyICYmCisJCWdpdCBjb21taXQgLWEgLW0gIkRpZmZlcmVudGlhdGUgZmlsZTIiICYmCisJCWdpdCBwNCBzdWJtaXQgJiYKKworCQljcCBmaWxlMiBmaWxlMTIgJiYKKwkJZWNobyAic29tZSB0ZXh0IiA+PmZpbGUxMiAmJgorCQlnaXQgYWRkIGZpbGUxMiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDb3B5IGZpbGUyIHRvIGZpbGUxMiB3aXRoIGNoYW5nZXMiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCAmJgorCQlsZXZlbD0kKGdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCB8IHNlZCAxZCB8IGN1dCAtZjEgfCBjdXQgLWQiICIgLWY1IHwgc2VkICJzL0MwKi8vIikgJiYKKwkJdGVzdCAtbiAiJGxldmVsIiAmJiB0ZXN0ICIkbGV2ZWwiIC1ndCAwICYmIHRlc3QgIiRsZXZlbCIgLWx0IDk4ICYmCisJCXNyYz0kKGdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCB8IHNlZCAxZCB8IGN1dCAtZjIpICYmCisJCXRlc3QgIiRzcmMiID0gZmlsZTIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzICQoKCRsZXZlbCArIDIpKSAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlMTIgJiYKKwkJcDQgZmlsZWxvZyAvL2RlcG90L2ZpbGUxMiB8IHRlc3RfbXVzdF9mYWlsIGdyZXAgLXEgImJyYW5jaCBmcm9tIiAmJgorCisJCWVjaG8gImZpbGUxMyIgPj5maWxlMiAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJEaWZmZXJlbnRpYXRlIGZpbGUyIiAmJgorCQlnaXQgcDQgc3VibWl0ICYmCisKKwkJY3AgZmlsZTIgZmlsZTEzICYmCisJCWVjaG8gImRpZmZlcmVudCB0ZXh0IiA+PmZpbGUxMyAmJgorCQlnaXQgYWRkIGZpbGUxMyAmJgorCQlnaXQgY29tbWl0IC1hIC1tICJDb3B5IGZpbGUyIHRvIGZpbGUxMyB3aXRoIGNoYW5nZXMiICYmCisJCWdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCAmJgorCQlsZXZlbD0kKGdpdCBkaWZmLXRyZWUgLXIgLUMgLS1maW5kLWNvcGllcy1oYXJkZXIgSEVBRCB8IHNlZCAxZCB8IGN1dCAtZjEgfCBjdXQgLWQiICIgLWY1IHwgc2VkICJzL0MwKi8vIikgJiYKKwkJdGVzdCAtbiAiJGxldmVsIiAmJiB0ZXN0ICIkbGV2ZWwiIC1ndCAyICYmIHRlc3QgIiRsZXZlbCIgLWx0IDEwMCAmJgorCQlzcmM9JChnaXQgZGlmZi10cmVlIC1yIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIEhFQUQgfCBzZWQgMWQgfCBjdXQgLWYyKSAmJgorCQl0ZXN0ICIkc3JjIiA9IGZpbGUyICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdENvcGllcyAkKCgkbGV2ZWwgLSAyKSkgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAmJgorCQlwNCBmaWxlbG9nIC8vZGVwb3QvZmlsZTEzICYmCisJCXA0IGZpbGVsb2cgLy9kZXBvdC9maWxlMTMgfCBncmVwIC1xICJicmFuY2ggZnJvbSAvL2RlcG90L2ZpbGUyIgorCSkKKycKKworIyBTZWUgaWYgY29uZmlndXJhYmxlcyBjYW4gYmUgc2V0LCBhbmQgaW4gcGFydGljdWxhciBpZiB0aGUgcnVuLm1vdmUuYWxsb3cKKyMgdmFyaWFibGUgZXhpc3RzLCB3aGljaCBhbGxvd3MgYWRtaW5zIHRvIGRpc2FibGUgdGhlICJwNCBtb3ZlIiBjb21tYW5kLgordGVzdF9sYXp5X3ByZXJlcSBQNERfSEFWRV9DT05GSUdVUkFCTEVfUlVOX01PVkVfQUxMT1cgJworCXA0IGNvbmZpZ3VyZSBzaG93IHJ1bi5tb3ZlLmFsbG93ID5vdXQgJiYKKwllZ3JlcCBecnVuLm1vdmUuYWxsb3c6IG91dAorJworCisjIElmIG1vdmUgY2FuIGJlIGRpc2FibGVkLCB0dXJuIGl0IG9mZiBhbmQgdGVzdCBwNCBtb3ZlIGhhbmRsaW5nCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFA0RF9IQVZFX0NPTkZJR1VSQUJMRV9SVU5fTU9WRV9BTExPVyBcCisJCSAgICAnZG8gbm90IHVzZSBwNCBtb3ZlIHdoZW4gYWRtaW5pc3RyYXRpdmVseSBkaXNhYmxlZCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCAicDQgY29uZmlndXJlIHNldCBydW4ubW92ZS5hbGxvdz0xIiAmJgorCXA0IGNvbmZpZ3VyZSBzZXQgcnVuLm1vdmUuYWxsb3c9MCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gbW92ZS1kaXNhbGxvdy1maWxlID5tb3ZlLWRpc2FsbG93LWZpbGUgJiYKKwkJcDQgYWRkIG1vdmUtZGlzYWxsb3ctZmlsZSAmJgorCQlwNCBzdWJtaXQgLWQgImFkZCBtb3ZlLWRpc2FsbG93LWZpbGUiCisJKSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmRldGVjdFJlbmFtZXMgdHJ1ZSAmJgorCQlnaXQgbXYgbW92ZS1kaXNhbGxvdy1maWxlIG1vdmUtZGlzYWxsb3ctZmlsZS1tb3ZlZCAmJgorCQlnaXQgY29tbWl0IC1tICJtb3ZlIG1vdmUtZGlzYWxsb3ctZmlsZSIgJiYKKwkJZ2l0IHA0IHN1Ym1pdAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTUtZ2l0LXA0LXN1Ym1pdC1mYWlsLnNoIGIvdC90OTgxNS1naXQtcDQtc3VibWl0LWZhaWwuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzdiNDJkMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTUtZ2l0LXA0LXN1Ym1pdC1mYWlsLnNoCkBAIC0wLDAgKzEsNDI5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IHN1Ym1pdCBmYWlsdXJlIGhhbmRsaW5nJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGNsaWVudCAtbyB8IHNlZCAiL0xpbmVFbmQvcy86LiovOnVuaXgvIiB8IHA0IGNsaWVudCAtaSAmJgorCQllY2hvIGxpbmUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJsaW5lMSBpbiBmaWxlMSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0IG9uIG9uZSBjb21taXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBmaWxlMSAmJgorCQllY2hvIGxpbmUyID4+ZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJsaW5lMiBpbiBmaWxlMSIKKwkpICYmCisJKAorCQkjIG5vdyB0aGlzIGNvbW1pdCBzaG91bGQgY2F1c2UgYSBjb25mbGljdAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQllY2hvIGxpbmUzID4+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJsaW5lMyBpbiBmaWxlMSB3aWxsIGNvbmZsaWN0IiAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIk5vIGNvbW1pdHMgYXBwbGllZCIgb3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBvbiBzZWNvbmQgb2YgdHdvIGNvbW1pdHMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBmaWxlMSAmJgorCQllY2hvIGxpbmUzID4+ZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJsaW5lMyBpbiBmaWxlMSIKKwkpICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQkjIHRoaXMgY29tbWl0IGlzIG9rYXkKKwkJdGVzdF9jb21taXQgImZpcnN0X2NvbW1pdF9va2F5IiAmJgorCQkjIG5vdyB0aGlzIHN1Ym1pdCBzaG91bGQgY2F1c2UgYSBjb25mbGljdAorCQllY2hvIGxpbmU0ID4+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJsaW5lNCBpbiBmaWxlMSB3aWxsIGNvbmZsaWN0IiAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCA+b3V0ICYmCisJCXRlc3RfaTE4bmdyZXAgIkFwcGxpZWQgb25seSB0aGUgY29tbWl0cyIgb3V0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb25mbGljdCBvbiBmaXJzdCBvZiB0d28gY29tbWl0cywgc2tpcCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBvcGVuIGZpbGUxICYmCisJCWVjaG8gbGluZTQgPj5maWxlMSAmJgorCQlwNCBzdWJtaXQgLWQgImxpbmU0IGluIGZpbGUxIgorCSkgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCSMgdGhpcyBzdWJtaXQgc2hvdWxkIGNhdXNlIGEgY29uZmxpY3QKKwkJZWNobyBsaW5lNSA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTUgaW4gZmlsZTEgd2lsbCBjb25mbGljdCIgJiYKKwkJIyBidXQgdGhpcyBjb21taXQgaXMgb2theQorCQl0ZXN0X2NvbW1pdCAib2theV9jb21taXRfYWZ0ZXJfc2tpcCIgJiYKKwkJZWNobyBzIHwgdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJBcHBsaWVkIG9ubHkgdGhlIGNvbW1pdHMiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3Qgb24gZmlyc3Qgb2YgdHdvIGNvbW1pdHMsIHF1aXQnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBmaWxlMSAmJgorCQllY2hvIGxpbmU3ID4+ZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJsaW5lNyBpbiBmaWxlMSIKKwkpICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQkjIHRoaXMgc3VibWl0IHNob3VsZCBjYXVzZSBhIGNvbmZsaWN0CisJCWVjaG8gbGluZTggPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImxpbmU4IGluIGZpbGUxIHdpbGwgY29uZmxpY3QiICYmCisJCSMgYnV0IHRoaXMgY29tbWl0IGlzIG9rYXkKKwkJdGVzdF9jb21taXQgIm9rYXlfY29tbWl0X2FmdGVyX3F1aXQiICYmCisJCWVjaG8gcSB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0ID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiTm8gY29tbWl0cyBhcHBsaWVkIiBvdXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0IGNsaSBhbmQgY29uZmlnIG9wdGlvbnMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLWNvbmZsaWN0PWFzayAmJgorCQlnaXQgcDQgc3VibWl0IC0tY29uZmxpY3Q9c2tpcCAmJgorCQlnaXQgcDQgc3VibWl0IC0tY29uZmxpY3Q9cXVpdCAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDIgZ2l0IHA0IHN1Ym1pdCAtLWNvbmZsaWN0PWZvbyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDIgZ2l0IHA0IHN1Ym1pdCAtLWNvbmZsaWN0ICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmNvbmZsaWN0IGZvbyAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCAmJgorCQlnaXQgY29uZmlnIC0tdW5zZXQgZ2l0LXA0LmNvbmZsaWN0ICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbmZsaWN0IG9uIGZpcnN0IG9mIHR3byBjb21taXRzLCAtLWNvbmZsaWN0PXNraXAnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgb3BlbiBmaWxlMSAmJgorCQllY2hvIGxpbmU5ID4+ZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJsaW5lOSBpbiBmaWxlMSIKKwkpICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQkjIHRoaXMgc3VibWl0IHNob3VsZCBjYXVzZSBhIGNvbmZsaWN0CisJCWVjaG8gbGluZTEwID4+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJsaW5lMTAgaW4gZmlsZTEgd2lsbCBjb25mbGljdCIgJiYKKwkJIyBidXQgdGhpcyBjb21taXQgaXMgb2theQorCQl0ZXN0X2NvbW1pdCAib2theV9jb21taXRfYWZ0ZXJfYXV0b19za2lwIiAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCAtLWNvbmZsaWN0PXNraXAgPm91dCAmJgorCQl0ZXN0X2kxOG5ncmVwICJBcHBsaWVkIG9ubHkgdGhlIGNvbW1pdHMiIG91dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29uZmxpY3Qgb24gZmlyc3Qgb2YgdHdvIGNvbW1pdHMsIC0tY29uZmxpY3Q9cXVpdCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBvcGVuIGZpbGUxICYmCisJCWVjaG8gbGluZTExID4+ZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJsaW5lMTEgaW4gZmlsZTEiCisJKSAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJIyB0aGlzIHN1Ym1pdCBzaG91bGQgY2F1c2UgYSBjb25mbGljdAorCQllY2hvIGxpbmUxMiA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTEyIGluIGZpbGUxIHdpbGwgY29uZmxpY3QiICYmCisJCSMgYnV0IHRoaXMgY29tbWl0IGlzIG9rYXkKKwkJdGVzdF9jb21taXQgIm9rYXlfY29tbWl0X2FmdGVyX2F1dG9fcXVpdCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQgLS1jb25mbGljdD1xdWl0ID5vdXQgJiYKKwkJdGVzdF9pMThuZ3JlcCAiTm8gY29tbWl0cyBhcHBsaWVkIiBvdXQKKwkpCisnCisKKyMKKyMgQ2xlYW51cCBhZnRlciBzdWJtaXQgZmFpbCwgYWxsIGNhc2VzLiAgU29tZSBtb2RpZmljYXRpb25zIGhhcHBlbgorIyBiZWZvcmUgdHJ5aW5nIHRvIGFwcGx5IHRoZSBwYXRjaC4gIE1ha2Ugc3VyZSB0aGVzZSBhcmUgdW53b3VuZAorIyBwcm9wZXJseS4gIFB1dCBlYWNoIG9uZSBpbiBhIGRpZmYgYWxvbmcgd2l0aCBzb21ldGhpbmcgdGhhdCB3aWxsCisjIG9idmlvdXNseSBjb25mbGljdC4gIE1ha2Ugc3VyZSBpdCBpcyBiYWNrIHRvIG5vcm1hbCBhZnRlci4KKyMKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBlZGl0IHA0IHBvcHVsYXRlJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJZWNobyB0ZXh0IGZpbGUgPnRleHQgJiYKKwkJcDQgYWRkIHRleHQgJiYKKwkJZWNobyB0ZXh0K3ggZmlsZSA+dGV4dCt4ICYmCisJCWNobW9kIDc1NSB0ZXh0K3ggJiYKKwkJcDQgYWRkIHRleHQreCAmJgorCQlwNCBzdWJtaXQgLWQgInBvcHVsYXRlIHA0IgorCSkKKycKKworc2V0dXBfY29uZmxpY3QoKSB7CisJIyBjbG9uZSBiZWZvcmUgbW9kaWZ5aW5nIGZpbGUxIHRvIGZvcmNlIGl0IHRvIGNvbmZsaWN0CisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSMgdGlja3Mgb3V0c2lkZSBzdWJzaGVsbHMKKwl0ZXN0X3RpY2sgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQlwNCBvcGVuIGZpbGUxICYmCisJCWVjaG8gJHRlc3RfdGljayA+PmZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiJHRlc3RfdGljayBpbiBmaWxlMSIKKwkpICYmCisJdGVzdF90aWNrICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQkjIGVhc3kgY29uZmxpY3QKKwkJZWNobyAkdGVzdF90aWNrID4+ZmlsZTEgJiYKKwkJZ2l0IGFkZCBmaWxlMQorCQkjIGNhbGxlciB3aWxsIGFkZCBtb3JlIGFuZCBzdWJtaXQKKwkpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgZWRpdCBhZnRlciBzdWJtaXQgZmFpbCcgJworCXNldHVwX2NvbmZsaWN0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBhbm90aGVyIGxpbmUgPj50ZXh0ICYmCisJCWdpdCBhZGQgdGV4dCAmJgorCQlnaXQgY29tbWl0IC1tICJjb25mbGljdCIgJiYKKwkJdGVzdF9leHBlY3RfY29kZSAxIGdpdCBwNCBzdWJtaXQKKwkpICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJIyBtYWtlIHN1cmUgaXQgaXMgbm90IG9wZW4KKwkJISBwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBhZGQgYWZ0ZXIgc3VibWl0IGZhaWwnICcKKwlzZXR1cF9jb25mbGljdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbmV3IGZpbGUgPnRleHRuZXcgJiYKKwkJZ2l0IGFkZCB0ZXh0bmV3ICYmCisJCWdpdCBjb21taXQgLW0gImNvbmZsaWN0IiAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQkjIG1ha2Ugc3VyZSBpdCBpcyBub3QgdGhlcmUKKwkJIyBhbmQgdGhhdCBwNCB0aGlua3MgaXQgaXMgbm90IGFkZGVkCisJCSMgICBQNCByZXR1cm5zIDAgYm90aCBmb3IgIm5vdCB0aGVyZSBidXQgYWRkZWQiIGFuZAorCQkjICAgIm5vdCB0aGVyZSIsIHNvIGdyZXAuCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHRleHRuZXcgJiYKKwkJcDQgZnN0YXQgLVQgYWN0aW9uIHRleHRuZXcgMj4mMSB8IGdyZXAgIm5vIHN1Y2ggZmlsZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgZGVsZXRlIGFmdGVyIHN1Ym1pdCBmYWlsJyAnCisJc2V0dXBfY29uZmxpY3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcm0gdGV4dCt4ICYmCisJCWdpdCBjb21taXQgLW0gImNvbmZsaWN0IiAmJgorCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQkjIG1ha2Ugc3VyZSBpdCBpcyB0aGVyZQorCQl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXh0K3ggJiYKKwkJISBwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dCt4CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNvcHkgYWZ0ZXIgc3VibWl0IGZhaWwnICcKKwlzZXR1cF9jb25mbGljdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWNwIHRleHQgdGV4dDIgJiYKKwkJZ2l0IGFkZCB0ZXh0MiAmJgorCQlnaXQgY29tbWl0IC1tICJjb25mbGljdCIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzSGFyZGVyIHRydWUgJiYKKwkJIyBtYWtlIHN1cmUgc2V0dXAgaXMgb2theQorCQlnaXQgZGlmZi10cmVlIC1yIC1DIC0tZmluZC1jb3BpZXMtaGFyZGVyIEhFQUQgfCBncmVwIHRleHQyIHwgZ3JlcCBDMTAwICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHRleHQyICYmCisJCXA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0MiAyPiYxIHwgZ3JlcCAibm8gc3VjaCBmaWxlIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCByZW5hbWUgYWZ0ZXIgc3VibWl0IGZhaWwnICcKKwlzZXR1cF9jb25mbGljdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBtdiB0ZXh0IHRleHQyICYmCisJCWdpdCBjb21taXQgLW0gImNvbmZsaWN0IiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJIyBtYWtlIHN1cmUgc2V0dXAgaXMgb2theQorCQlnaXQgZGlmZi10cmVlIC1yIC1NIEhFQUQgfCBncmVwIHRleHQyIHwgZ3JlcCBSMTAwICYmCisJCXRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIHRleHQyICYmCisJCXA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0MiAyPiYxIHwgZ3JlcCAibm8gc3VjaCBmaWxlIgorCSkKKycKKworIworIyBDbGVhbnVwIGFmdGVyIGRlY2lkaW5nIG5vdCB0byBzdWJtaXQgZHVyaW5nIGVkaXRUZW1wbGF0ZS4gIFRoaXMKKyMgaW52b2x2ZXMgdW53aW5kaW5nIG1vcmUgd29yaywgYmVjYXVzZSBmaWxlcyBoYXZlIGJlZW4gYWRkZWQsIGRlbGV0ZWQKKyMgYW5kIGNobW9kLWVkIG5vdy4gIFNhbWUgYXBwcm9hY2ggYXMgYWJvdmUuCisjCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgZWRpdCBhZnRlciBzdWJtaXQgY2FuY2VsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbGluZSA+PnRleHQgJiYKKwkJZ2l0IGFkZCB0ZXh0ICYmCisJCWdpdCBjb21taXQgLW0gdGV4dCAmJgorCQllY2hvIG4gfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdCAmJgorCQlnaXQgcmVzZXQgLS1oYXJkIEhFQUReCisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCSEgcDQgZnN0YXQgLVQgYWN0aW9uIHRleHQgJiYKKwkJdGVzdF9jbXAgIiRnaXQiL3RleHQgdGV4dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBhZGQgYWZ0ZXIgc3VibWl0IGNhbmNlbCcgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQllY2hvIGxpbmUgPnRleHRuZXcgJiYKKwkJZ2l0IGFkZCB0ZXh0bmV3ICYmCisJCWdpdCBjb21taXQgLW0gdGV4dG5ldyAmJgorCQllY2hvIG4gfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXh0bmV3ICYmCisJCXA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0bmV3IDI+JjEgfCBncmVwICJubyBzdWNoIGZpbGUiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGRlbGV0ZSBhZnRlciBzdWJtaXQgY2FuY2VsJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBybSB0ZXh0ICYmCisJCWdpdCBjb21taXQgLW0gInJtIHRleHQiICYmCisJCWVjaG8gbiB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHRleHQgJiYKKwkJISBwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xlYW51cCBjb3B5IGFmdGVyIHN1Ym1pdCBjYW5jZWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJY3AgdGV4dCB0ZXh0MiAmJgorCQlnaXQgYWRkIHRleHQyICYmCisJCWdpdCBjb21taXQgLW0gdGV4dDIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0Q29waWVzSGFyZGVyIHRydWUgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtQyAtLWZpbmQtY29waWVzLWhhcmRlciBIRUFEIHwgZ3JlcCB0ZXh0MiB8IGdyZXAgQzEwMCAmJgorCQllY2hvIG4gfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXh0MiAmJgorCQlwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dDIgMj4mMSB8IGdyZXAgIm5vIHN1Y2ggZmlsZSIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NsZWFudXAgcmVuYW1lIGFmdGVyIHN1Ym1pdCBjYW5jZWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IG12IHRleHQgdGV4dDIgJiYKKwkJZ2l0IGNvbW1pdCAtbSB0ZXh0MiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RSZW5hbWVzIHRydWUgJiYKKwkJZ2l0IGRpZmYtdHJlZSAtciAtTSBIRUFEIHwgZ3JlcCB0ZXh0MiB8IGdyZXAgUjEwMCAmJgorCQllY2hvIG4gfCB0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IHA0IHN1Ym1pdAorCSkgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyB0ZXh0MiAmJgorCQlwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dDIgMj4mMSB8IGdyZXAgIm5vIHN1Y2ggZmlsZSIKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgdGV4dCAmJgorCQkhIHA0IGZzdGF0IC1UIGFjdGlvbiB0ZXh0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbGVhbnVwIGNobW9kIGFmdGVyIHN1Ym1pdCBjYW5jZWwnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9jaG1vZCAreCB0ZXh0ICYmCisJCXRlc3RfY2htb2QgLXggdGV4dCt4ICYmCisJCWdpdCBhZGQgdGV4dCB0ZXh0K3ggJiYKKwkJZ2l0IGNvbW1pdCAtbSAiY2htb2QgdGV4dHMiICYmCisJCWVjaG8gbiB8IHRlc3RfZXhwZWN0X2NvZGUgMSBnaXQgcDQgc3VibWl0CisJKSAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXRlc3RfcGF0aF9pc19maWxlIHRleHQgJiYKKwkJISBwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB0ZXh0K3ggJiYKKwkJISBwNCBmc3RhdCAtVCBhY3Rpb24gdGV4dCt4ICYmCisJCWxzIC1sIHRleHQgfCBlZ3JlcCBeLXItLSAmJgorCQlscyAtbCB0ZXh0K3ggfCBlZ3JlcCBeLXIteAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTYtZ2l0LXA0LWxvY2tlZC5zaCBiL3QvdDk4MTYtZ2l0LXA0LWxvY2tlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMDQ4YmQzCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgxNi1naXQtcDQtbG9ja2VkLnNoCkBAIC0wLDAgKzEsMTQ1IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IGxvY2tlZCBmaWxlIGJlaGF2aW9yJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworIyBTZWUKKyMgaHR0cDovL3d3dy5wZXJmb3JjZS5jb20vcGVyZm9yY2UvZG9jLmN1cnJlbnQvbWFudWFscy9wNHNhZy8wM19zdXBlcnVzZXIuaHRtbCMxMDg4NTYzCisjIGZvciBzdWdnZXN0aW9ucyBvbiBob3cgdG8gY29uZmlndXJlICJzaXRld2lkZSBwZXNzaW1pc3RpYyBsb2NraW5nIgorIyB3aGVyZSBvbmx5IG9uZSBwZXJzb24gY2FuIGhhdmUgYSBmaWxlIG9wZW4gZm9yIGVkaXQgYXQgYSB0aW1lLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCcgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCWVjaG8gIlR5cGVNYXA6ICtsIC8vZGVwb3QvLi4uIiB8IHA0IHR5cGVtYXAgLWkgJiYKKwkJZWNobyBmaWxlMSA+ZmlsZTEgJiYKKwkJcDQgYWRkIGZpbGUxICYmCisJCXA0IHN1Ym1pdCAtZCAiYWRkIGZpbGUxIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZWRpdCB3aXRoIGxvY2sgbm90IHRha2VuJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbGluZTIgPj5maWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImxpbmUyIGluIGZpbGUxIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2FkZCB3aXRoIGxvY2sgbm90IHRha2VuJyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gbGluZTEgPj5hZGQtbG9jay1ub3QtdGFrZW4gJiYKKwkJZ2l0IGFkZCBhZGQtbG9jay1ub3QtdGFrZW4gJiYKKwkJZ2l0IGNvbW1pdCAtbSAiYWRkIGFkZC1sb2NrLW5vdC10YWtlbiIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tdmVyYm9zZQorCSkKKycKKworbG9ja19pbl9hbm90aGVyX2NsaWVudCgpIHsKKwkjIGJ1aWxkIGEgZGlmZmVyZW50IGNsaWVudAorCWNsaTI9IiRUUkFTSF9ESVJFQ1RPUlkvY2xpMiIgJiYKKwlta2RpciAtcCAiJGNsaTIiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJwNCBjbGllbnQgLWYgLWQgY2xpZW50MiAmJiBybSAtcmYgXCIkY2xpMlwiIiAmJgorCSgKKwkJY2QgIiRjbGkyIiAmJgorCQlQNENMSUVOVD1jbGllbnQyICYmCisJCWNsaT0iJGNsaTIiICYmCisJCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudDIvLi4uIiAmJgorCQlwNCBzeW5jICYmCisJCXA0IG9wZW4gZmlsZTEKKwkpCit9CisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2VkaXQgd2l0aCBsb2NrIHRha2VuJyAnCisJbG9ja19pbl9hbm90aGVyX2NsaWVudCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiY2QgXCIkY2xpXCIgJiYgcDQgc3luYyAtZiBmaWxlMSIgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZWNobyBsaW5lMyA+PmZpbGUxICYmCisJCWdpdCBhZGQgZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibGluZTMgaW4gZmlsZTEiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IHA0IHN1Ym1pdCAtLXZlcmJvc2UKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2RlbGV0ZSB3aXRoIGxvY2sgdGFrZW4nICcKKwlsb2NrX2luX2Fub3RoZXJfY2xpZW50ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjZCBcIiRjbGlcIiAmJiBwNCBzeW5jIC1mIGZpbGUxIiAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgcm0gZmlsZTEgJiYKKwkJZ2l0IGNvbW1pdCAtbSAiZGVsZXRlIGZpbGUxIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS12ZXJib3NlCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjaG1vZCB3aXRoIGxvY2sgdGFrZW4nICcKKwlsb2NrX2luX2Fub3RoZXJfY2xpZW50ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjZCBcIiRjbGlcIiAmJiBwNCBzeW5jIC1mIGZpbGUxIiAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQljaG1vZCAreCBmaWxlMSAmJgorCQlnaXQgYWRkIGZpbGUxICYmCisJCWdpdCBjb21taXQgLW0gImNobW9kICt4IGZpbGUxIiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5za2lwU3VibWl0RWRpdCB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS12ZXJib3NlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb3B5IHdpdGggbG9jayB0YWtlbicgJworCWxvY2tfaW5fYW5vdGhlcl9jbGllbnQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNkIFwiJGNsaVwiICYmIHA0IHJldmVydCBmaWxlMiAmJiBybSAtZiBmaWxlMiIgJiYKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAvL2RlcG90ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJY3AgZmlsZTEgZmlsZTIgJiYKKwkJZ2l0IGFkZCBmaWxlMiAmJgorCQlnaXQgY29tbWl0IC1tICJjcCBmaWxlMSB0byBmaWxlMiIgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuc2tpcFN1Ym1pdEVkaXQgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5kZXRlY3RDb3BpZXMgdHJ1ZSAmJgorCQlnaXQgcDQgc3VibWl0IC0tdmVyYm9zZQorCSkKKycKKwordGVzdF9leHBlY3RfZmFpbHVyZSAnbW92ZSB3aXRoIGxvY2sgdGFrZW4nICcKKwlsb2NrX2luX2Fub3RoZXJfY2xpZW50ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJjZCBcIiRjbGlcIiAmJiBwNCBzeW5jIGZpbGUxICYmIHJtIC1mIGZpbGUyIiAmJgorCWdpdCBwNCBjbG9uZSAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgbXYgZmlsZTEgZmlsZTMgJiYKKwkJZ2l0IGNvbW1pdCAtbSAibXYgZmlsZTEgdG8gZmlsZTMiICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnNraXBTdWJtaXRFZGl0IHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQuZGV0ZWN0UmVuYW1lcyB0cnVlICYmCisJCWdpdCBwNCBzdWJtaXQgLS12ZXJib3NlCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgxNy1naXQtcDQtZXhjbHVkZS5zaCBiL3QvdDk4MTctZ2l0LXA0LWV4Y2x1ZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWFjNTY4ZQotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTctZ2l0LXA0LWV4Y2x1ZGUuc2gKQEAgLTAsMCArMSw3MSBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCB0ZXN0cyBmb3IgZXhjbHVkZWQgcGF0aHMgZHVyaW5nIGNsb25lIGFuZCBzeW5jJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworIyBDcmVhdGUgYSByZXBvIHdpdGggdGhlIHN0cnVjdHVyZToKKyMKKyMgICAgLy9kZXBvdC93YW50ZWQvZm9vCisjICAgIC8vZGVwb3QvZGlzY2FyZC9mb28KKyMKKyMgQ2hlY2sgdGhhdCB3ZSBjYW4gZXhjbHVkZSBhIHN1YmRpcmVjdG9yeSB3aXRoIGJvdGgKKyMgY2xvbmUgYW5kIHN5bmMgb3BlcmF0aW9ucy4KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY3JlYXRlIGV4Y2x1ZGUgcmVwbycgJworCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIC1wIHdhbnRlZCBkaXNjYXJkICYmCisJCWVjaG8gd2FudGVkID53YW50ZWQvZm9vICYmCisJCWVjaG8gZGlzY2FyZCA+ZGlzY2FyZC9mb28gJiYKKwkJcDQgYWRkIHdhbnRlZC9mb28gZGlzY2FyZC9mb28gJiYKKwkJcDQgc3VibWl0IC1kICJpbml0aWFsIHJldmlzaW9uIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2hlY2sgdGhlIHJlcG8gd2FzIGNyZWF0ZWQgY29ycmVjdGx5JyAnCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdC8uLi5AYWxsICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgd2FudGVkL2ZvbyAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSBkaXNjYXJkL2ZvbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY2xvbmUsIGV4Y2x1ZGluZyBwYXJ0IG9mIHJlcG8nICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwlnaXQgcDQgY2xvbmUgLS8vZGVwb3QvZGlzY2FyZC8uLi4gLS1kZXN0PSIkZ2l0IiAvL2RlcG90Ly4uLkBhbGwgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSB3YW50ZWQvZm9vICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGRpc2NhcmQvZm9vCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjbG9uZSwgdGhlbiBzeW5jIHdpdGggZXhjbHVkZScgJworCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCWdpdCBwNCBjbG9uZSAtLy9kZXBvdC9kaXNjYXJkLy4uLiAtLWRlc3Q9IiRnaXQiIC8vZGVwb3QvLi4uQGFsbCAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGVkaXQgd2FudGVkL2ZvbyBkaXNjYXJkL2ZvbyAmJgorCQlkYXRlID4+d2FudGVkL2ZvbyAmJgorCQlkYXRlID4+ZGlzY2FyZC9mb28gJiYKKwkJcDQgc3VibWl0IC1kICJ1cGRhdGluZyIgJiYKKworCQljZCAiJGdpdCIgJiYKKwkJZ2l0IHA0IHN5bmMgLS8vZGVwb3QvZGlzY2FyZC8uLi4gJiYKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgd2FudGVkL2ZvbyAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBkaXNjYXJkL2ZvbworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MTgtZ2l0LXA0LWJsb2NrLnNoIGIvdC90OTgxOC1naXQtcDQtYmxvY2suc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2IzYWUxZgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTgtZ2l0LXA0LWJsb2NrLnNoCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IGZldGNoaW5nIGNoYW5nZXMgaW4gbXVsdGlwbGUgYmxvY2tzJworCisuIC4vbGliLWdpdC1wNC5zaAorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKworY3JlYXRlX3Jlc3RyaWN0ZWRfZ3JvdXAoKSB7CisJcDQgZ3JvdXAgLWkgPDwtRU9GCisJR3JvdXA6IHJlc3RyaWN0ZWQKKwlNYXhSZXN1bHRzOiA3CisJTWF4U2NhblJvd3M6IDQwCisJVXNlcnM6IGF1dGhvcgorCUVPRgorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgZ3JvdXAgd2l0aCBsaW1pdGVkIG1heHJvd3MnICcKKwljcmVhdGVfcmVzdHJpY3RlZF9ncm91cAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgYSByZXBvIHdpdGggbWFueSBjaGFuZ2VzJyAnCisJKAorCQljbGllbnRfdmlldyAiLy9kZXBvdC9pbmNsdWRlZC8uLi4gLy9jbGllbnQvaW5jbHVkZWQvLi4uIiBcCisJCQkgICAgIi8vZGVwb3QvZXhjbHVkZWQvLi4uIC8vY2xpZW50L2V4Y2x1ZGVkLy4uLiIgJiYKKwkJbWtkaXIgLXAgIiRjbGkvaW5jbHVkZWQiICIkY2xpL2V4Y2x1ZGVkIiAmJgorCQljZCAiJGNsaS9pbmNsdWRlZCIgJiYKKwkJPmZpbGUudHh0ICYmCisJCXA0IGFkZCBmaWxlLnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlLnR4dCIgJiYKKwkJZm9yIGkgaW4gJCh0ZXN0X3NlcSAwIDUpCisJCWRvCisJCQk+b3V0ZXIkaS50eHQgJiYKKwkJCXA0IGFkZCBvdXRlciRpLnR4dCAmJgorCQkJcDQgc3VibWl0IC1kICJBZGRpbmcgb3V0ZXIkaS50eHQiICYmCisJCQlmb3IgaiBpbiAkKHRlc3Rfc2VxIDAgNSkKKwkJCWRvCisJCQkJcDQgZWRpdCBmaWxlLnR4dCAmJgorCQkJCWVjaG8gJGkkaiA+ZmlsZS50eHQgJiYKKwkJCQlwNCBzdWJtaXQgLWQgIkNvbW1pdCAkaSRqIiB8fCBleGl0CisJCQlkb25lIHx8IGV4aXQKKwkJZG9uZQorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnRGVmYXVsdCB1c2VyIGNhbm5vdCBmZXRjaCBjaGFuZ2VzJyAnCisJISBwNCBjaGFuZ2VzIC1tIDEgLy9kZXBvdC8uLi4KKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgdGhlIHJlcG8nICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLWNoYW5nZXMtYmxvY2stc2l6ZT03IC0tdmVyYm9zZSAvL2RlcG90L2luY2x1ZGVkQGFsbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBbGwgZmlsZXMgYXJlIHByZXNlbnQnICcKKwllY2hvIGZpbGUudHh0ID5leHBlY3RlZCAmJgorCXRlc3Rfd3JpdGVfbGluZXMgb3V0ZXIwLnR4dCBvdXRlcjEudHh0IG91dGVyMi50eHQgb3V0ZXIzLnR4dCBvdXRlcjQudHh0ID4+ZXhwZWN0ZWQgJiYKKwl0ZXN0X3dyaXRlX2xpbmVzIG91dGVyNS50eHQgPj5leHBlY3RlZCAmJgorCWxzICIkZ2l0IiA+Y3VycmVudCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIGN1cnJlbnQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZmlsZS50eHQgaXMgY29ycmVjdCcgJworCWVjaG8gNTUgPmV4cGVjdGVkICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRnaXQvZmlsZS50eHQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NvcnJlY3QgbnVtYmVyIG9mIGNvbW1pdHMnICcKKwkoY2QgIiRnaXQiICYmIGdpdCBsb2cgLS1vbmVsaW5lKSA+bG9nICYmCisJd2MgLWwgbG9nICYmCisJdGVzdF9saW5lX2NvdW50ID0gNDMgbG9nCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1ByZXZpb3VzIHZlcnNpb24gb2YgZmlsZS50eHQgaXMgY29ycmVjdCcgJworCShjZCAiJGdpdCIgJiYgZ2l0IGNoZWNrb3V0IEhFQUReXikgJiYKKwllY2hvIDUzID5leHBlY3RlZCAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkZ2l0L2ZpbGUudHh0IgorJworCisjIFRlc3QgZ2l0LXA0IHN5bmMsIHdpdGggc29tZSBmaWxlcyBvdXRzaWRlIHRoZSBjbGllbnQgc3BlY2lmaWNhdGlvbi4KKworcDRfYWRkX2ZpbGUoKSB7CisJKGNkICIkY2xpIiAmJgorCQk+JDEgJiYKKwkJcDQgYWRkICQxICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkZWQgYSBmaWxlIiAkMQorCSkKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWRkIHNvbWUgbW9yZSBmaWxlcycgJworCWZvciBpIGluICQodGVzdF9zZXEgMCAxMCkKKwlkbworCQlwNF9hZGRfZmlsZSAiaW5jbHVkZWQveCRpIiAmJgorCQlwNF9hZGRfZmlsZSAiZXhjbHVkZWQveCRpIgorCWRvbmUgJiYKKwlmb3IgaSBpbiAkKHRlc3Rfc2VxIDAgMTApCisJZG8KKwkJcDRfYWRkX2ZpbGUgImV4Y2x1ZGVkL3kkaSIKKwlkb25lCisnCisKKyMgVGhpcyBzaG91bGQgcGljayB1cCB0aGUgMTAgbmV3IGZpbGVzIGluICJpbmNsdWRlZCIsIGJ1dCBub3QgYmUgY29uZnVzZWQKKyMgYnkgdGhlIGFkZGl0aW9uYWwgZmlsZXMgaW4gImV4Y2x1ZGVkIgordGVzdF9leHBlY3Rfc3VjY2VzcyAnU3luY2luZyBmaWxlcycgJworCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBwNCBzeW5jIC0tY2hhbmdlcy1ibG9jay1zaXplPTcgJiYKKwkJZ2l0IGNoZWNrb3V0IHA0L21hc3RlciAmJgorCQlscyAtbCB4KiA+IGxvZyAmJgorCQl0ZXN0X2xpbmVfY291bnQgPSAxMSBsb2cKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODE5LWdpdC1wNC1jYXNlLWZvbGRpbmcuc2ggYi90L3Q5ODE5LWdpdC1wNC1jYXNlLWZvbGRpbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDgwOGMwMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MTktZ2l0LXA0LWNhc2UtZm9sZGluZy5zaApAQCAtMCwwICsxLDYwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0naW50ZXJhY3Rpb24gd2l0aCBQNCBjYXNlLWZvbGRpbmcnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK2lmIHRlc3RfaGF2ZV9wcmVyZXEgQ0FTRV9JTlNFTlNJVElWRV9GUwordGhlbgorCXNraXBfYWxsPSdza2lwcGluZyBQNCBjYXNlLWZvbGRpbmcgdGVzdHM7IGNhc2UgaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0gZGV0ZWN0ZWQnCisJdGVzdF9kb25lCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQgd2l0aCBjYXNlIGZvbGRpbmcgZW5hYmxlZCcgJworCXN0YXJ0X3A0ZCAtQzEKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3JlYXRlIGEgcmVwbywgbmFtZSBpcyBsb3dlcmNhc2UnICcKKwkoCisJCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJCWNkICIkY2xpIiAmJgorCQlta2RpciAtcCBsYyBVQyAmJgorCQk+bGMvZmlsZS50eHQgJiYgPlVDL2ZpbGUudHh0ICYmCisJCXA0IGFkZCBsYy9maWxlLnR4dCBVQy9maWxlLnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBpbml0aWFsIGxjIGFuZCBVQyByZXBvcyIKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NoZWNrIHA0IGlzIGluIGNhc2UtZm9sZGluZyBtb2RlJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJPmxjL0ZJTEUuVFhUICYmCisJCXA0IGFkZCBsYy9GSUxFLlRYVCAmJgorCQl0ZXN0X211c3RfZmFpbCBwNCBzdWJtaXQgLWQgIkNhbm5vdCBhZGQgZmlsZSBkaWZmZXJpbmcgb25seSBpbiBjYXNlIiBsYy9GSUxFLlRYVAorCSkKKycKKworIyBDaGVjayB3ZSBjcmVhdGVkIHRoZSByZXBvIHByb3Blcmx5Cit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSBsYyByZXBvIHVzaW5nIGxjIG5hbWUnICcKKwlnaXQgcDQgY2xvbmUgLy9kZXBvdC9sYy8uLi4gJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSBsYy9maWxlLnR4dCAmJgorCWdpdCBwNCBjbG9uZSAvL2RlcG90L1VDLy4uLiAmJgorCXRlc3RfcGF0aF9pc19maWxlIFVDL2ZpbGUudHh0CisnCisKKyMgVGhlIGNsb25lIHNob3VsZCBmYWlsLCBzaW5jZSB0aGVyZSBpcyBubyByZXBvIGNhbGxlZCBMQywgYnV0IGJlY2F1c2UKKyMgd2UgaGF2ZSBjYXNlLWluc2Vuc2l0aXZlIHA0ZCBlbmFibGVkLCBpdCBhcHBlYXJzIHRvIGdvIGFoZWFkIGFuZCB3b3JrLAorIyBidXQgbGVhdmVzIGFuIGVtcHR5IGdpdCByZXBvIGluIHBsYWNlLgordGVzdF9leHBlY3RfZmFpbHVyZSAnQ2xvbmUgbGMgcmVwbyB1c2luZyB1YyBuYW1lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IGNsb25lIC8vZGVwb3QvTEMvLi4uCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ0Nsb25lIFVDIHJlcG8gd2l0aCBsYyBuYW1lJyAnCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHA0IGNsb25lIC8vZGVwb3QvdWMvLi4uCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODIwLWdpdC1wNC1lZGl0b3ItaGFuZGxpbmcuc2ggYi90L3Q5ODIwLWdpdC1wNC1lZGl0b3ItaGFuZGxpbmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmRjNmRmMAotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MjAtZ2l0LXA0LWVkaXRvci1oYW5kbGluZy5zaApAQCAtMCwwICsxLDM4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nZ2l0IHA0IGhhbmRsaW5nIG9mIEVESVRPUicKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2luaXQgZGVwb3QnICcKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvIGZpbGUxID5maWxlMSAmJgorCQlwNCBhZGQgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlMSIKKwkpCisnCisKKyMgQ2hlY2sgdGhhdCB0aGUgUDRFRElUT1IgYXJndW1lbnQgY2FuIGJlIGdpdmVuIGNvbW1hbmQtbGluZQorIyBvcHRpb25zLCB3aGljaCBnaXQtcDQgd2lsbCB0aGVuIHBhc3MgdGhyb3VnaCB0byB0aGUgc2hlbGwuCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdFRElUT1Igd2l0aCBvcHRpb25zJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWVjaG8gY2hhbmdlID5maWxlMSAmJgorCQlnaXQgY29tbWl0IC1tICJjaGFuZ2UiIGZpbGUxICYmCisJCVA0RURJVE9SPSI6ID5cIiRnaXQvdG91Y2hlZFwiICYmIHRlc3QtY2htdGltZSArNSIgZ2l0IHA0IHN1Ym1pdCAmJgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAiJGdpdC90b3VjaGVkIgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MjEtZ2l0LXA0LXBhdGgtdmFyaWF0aW9ucy5zaCBiL3QvdDk4MjEtZ2l0LXA0LXBhdGgtdmFyaWF0aW9ucy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MWU0NmFjCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTgyMS1naXQtcDQtcGF0aC12YXJpYXRpb25zLnNoCkBAIC0wLDAgKzEsMjAwIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ2xvbmUgcmVwb3NpdG9yaWVzIHdpdGggcGF0aCBjYXNlIHZhcmlhdGlvbnMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3N0YXJ0IHA0ZCB3aXRoIGNhc2UgZm9sZGluZyBlbmFibGVkJyAnCisJc3RhcnRfcDRkIC1DMQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDcmVhdGUgYSByZXBvIHdpdGggcGF0aCBjYXNlIHZhcmlhdGlvbnMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisKKwkJbWtkaXIgLXAgUGF0aC90byAmJgorCQk+UGF0aC90by9GaWxlMi50eHQgJiYKKwkJcDQgYWRkIFBhdGgvdG8vRmlsZTIudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGUyIiAmJgorCQlybSAtcmYgUGF0aCAmJgorCisJCW1rZGlyIC1wIHBhdGgvVE8gJiYKKwkJPnBhdGgvVE8vZmlsZTEudHh0ICYmCisJCXA0IGFkZCBwYXRoL1RPL2ZpbGUxLnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlMSIgJiYKKwkJcm0gLXJmIHBhdGggJiYKKworCQlta2RpciAtcCBwYXRoL3RvICYmCisJCT5wYXRoL3RvL2ZpbGUzLnR4dCAmJgorCQlwNCBhZGQgcGF0aC90by9maWxlMy50eHQgJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZTMiICYmCisJCXJtIC1yZiBwYXRoICYmCisKKwkJbWtkaXIgLXAgeC1vdXRzaWRlLXNwZWMgJiYKKwkJPngtb3V0c2lkZS1zcGVjL2ZpbGU0LnR4dCAmJgorCQlwNCBhZGQgeC1vdXRzaWRlLXNwZWMvZmlsZTQudHh0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGZpbGU0IiAmJgorCQlybSAtcmYgeC1vdXRzaWRlLXNwZWMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25lIHJvb3QnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgZmFsc2UgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3QgJiYKKwkJIyBUaGlzIG1ldGhvZCBpcyB1c2VkIGluc3RlYWQgb2YgInRlc3QgLWYiIHRvIGVuc3VyZSB0aGUgY2FzZSBpcworCQkjIGNoZWNrZWQgZXZlbiBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBvbiBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtcy4KKwkJIyBBbGwgZmlsZXMgYXJlIHRoZXJlIGFzIGV4cGVjdGVkIGFsdGhvdWdoIHRoZSBwYXRoIGNhc2VzIGxvb2sgcmFuZG9tLgorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCVBhdGgvdG8vRmlsZTIudHh0CisJCXBhdGgvVE8vZmlsZTEudHh0CisJCXBhdGgvdG8vZmlsZTMudHh0CisJCXgtb3V0c2lkZS1zcGVjL2ZpbGU0LnR4dAorCQlFT0YKKwkJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcm9vdCAoaWdub3JlY2FzZSknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgdHJ1ZSAmJgorCQlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdCAmJgorCQkjIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW5zdGVhZCBvZiAidGVzdCAtZiIgdG8gZW5zdXJlIHRoZSBjYXNlIGlzCisJCSMgY2hlY2tlZCBldmVuIGlmIHRoZSB0ZXN0IGlzIGV4ZWN1dGVkIG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW1zLgorCQkjIEFsbCBmaWxlcyBhcmUgdGhlcmUgYXMgZXhwZWN0ZWQgYWx0aG91Z2ggdGhlIHBhdGggY2FzZXMgbG9vayByYW5kb20uCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJcGF0aC9UTy9GaWxlMi50eHQKKwkJcGF0aC9UTy9maWxlMS50eHQKKwkJcGF0aC9UTy9maWxlMy50eHQKKwkJeC1vdXRzaWRlLXNwZWMvZmlsZTQudHh0CisJCUVPRgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSByb290IGFuZCBpZ25vcmUgb25lIGZpbGUnICcKKwljbGllbnRfdmlldyBcCisJCSIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iIFwKKwkJIi0vL2RlcG90L3BhdGgvVE8vZmlsZTEudHh0IC8vY2xpZW50L3BhdGgvVE8vZmlsZTEudHh0IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgZmFsc2UgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3QgJiYKKwkJIyBXZSBpZ25vcmUgb25lIGZpbGUgaW4gdGhlIGNsaWVudCBzcGVjIGFuZCBhbGwgcGF0aCBjYXNlcyBjaGFuZ2UgZnJvbQorCQkjICJUTyIgdG8gInRvIiEKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlQYXRoL3RvL0ZpbGUyLnR4dAorCQlwYXRoL3RvL2ZpbGUzLnR4dAorCQl4LW91dHNpZGUtc3BlYy9maWxlNC50eHQKKwkJRU9GCisJCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25lIHJvb3QgYW5kIGlnbm9yZSBvbmUgZmlsZSAoaWdub3JlY2FzZSknICcKKwljbGllbnRfdmlldyBcCisJCSIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iIFwKKwkJIi0vL2RlcG90L3BhdGgvVE8vZmlsZTEudHh0IC8vY2xpZW50L3BhdGgvVE8vZmlsZTEudHh0IiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBjb3JlLmlnbm9yZWNhc2UgdHJ1ZSAmJgorCQlnaXQgcDQgY2xvbmUgLS11c2UtY2xpZW50LXNwZWMgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdCAmJgorCQkjIFdlIGlnbm9yZSBvbmUgZmlsZSBpbiB0aGUgY2xpZW50IHNwZWMgYW5kIGFsbCBwYXRoIGNhc2VzIGNoYW5nZSBmcm9tCisJCSMgIlRPIiB0byAidG8iIQorCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisJCVBhdGgvdG8vRmlsZTIudHh0CisJCVBhdGgvdG8vZmlsZTMudHh0CisJCXgtb3V0c2lkZS1zcGVjL2ZpbGU0LnR4dAorCQlFT0YKKwkJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ2xvbmUgcGF0aCcgJworCWNsaWVudF92aWV3ICIvL2RlcG90L1BhdGgvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgY29yZS5pZ25vcmVjYXNlIGZhbHNlICYmCisJCWdpdCBwNCBjbG9uZSAtLXVzZS1jbGllbnQtc3BlYyAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90ICYmCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJdG8vRmlsZTIudHh0CisJCUVPRgorCQlnaXQgbHMtZmlsZXMgPmFjdHVhbCAmJgorCQl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdDbG9uZSBwYXRoIChpZ25vcmVjYXNlKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90L1BhdGgvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgY29yZS5pZ25vcmVjYXNlIHRydWUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3QgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQlUTy9GaWxlMi50eHQKKwkJVE8vZmlsZTEudHh0CisJCVRPL2ZpbGUzLnR4dAorCQlFT0YKKwkJZ2l0IGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKworIyBJdCBsb29rcyBsaWtlIFA0IGRldGVybWluZXMgdGhlIHBhdGggY2FzZSBiYXNlZCBvbiB0aGUgZmlyc3QgZmlsZSBpbgorIyBsZXhpY29ncmFwaGljYWwgb3JkZXIuIFBsZWFzZSBub3RlIHRoZSBsb3dlciBjYXNlICJ0byIgZGlyZWN0b3J5IGZvciBhbGwKKyMgZmlsZXMgdHJpZ2dlcmVkIHRocm91Z2ggdGhlIGFkZGl0aW9uIG9mICJGaWxlMC50eHQiLgordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWRkIGEgbmV3IGZpbGUgYW5kIGNsb25lIHBhdGggd2l0aCBuZXcgZmlsZSAoaWdub3JlY2FzZSknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCW1rZGlyIC1wIFBhdGgvdG8gJiYKKwkJPlBhdGgvdG8vRmlsZTAudHh0ICYmCisJCXA0IGFkZCBQYXRoL3RvL0ZpbGUwLnR4dCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlIiAmJgorCQlybSAtcmYgUGF0aAorCSkgJiYKKworCWNsaWVudF92aWV3ICIvL2RlcG90L1BhdGgvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgY29yZS5pZ25vcmVjYXNlIHRydWUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3QgJiYKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQl0by9GaWxlMC50eHQKKwkJdG8vRmlsZTIudHh0CisJCXRvL2ZpbGUxLnR4dAorCQl0by9maWxlMy50eHQKKwkJRU9GCisJCWdpdCBscy1maWxlcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2tpbGwgcDRkJyAnCisJa2lsbF9wNGQKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5ODIyLWdpdC1wNC1wYXRoLWVuY29kaW5nLnNoIGIvdC90OTgyMi1naXQtcDQtcGF0aC1lbmNvZGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YjgzZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTgyMi1naXQtcDQtcGF0aC1lbmNvZGluZy5zaApAQCAtMCwwICsxLDU4IEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ2xvbmUgcmVwb3NpdG9yaWVzIHdpdGggbm9uIEFTQ0lJIHBhdGhzJworCisuIC4vbGliLWdpdC1wNC5zaAorCitVVEY4X0VTQ0FQRUQ9ImEtXDMwM1wyNDRfby1cMzAzXDI2Nl91LVwzMDNcMjc0LnR4dCIKK0lTTzg4NTlfRVNDQVBFRD0iYS1cMzQ0X28tXDM2Nl91LVwzNzQudHh0IgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3JlYXRlIGEgcmVwbyBjb250YWluaW5nIGlzbzg4NTktMSBlbmNvZGVkIHBhdGhzJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJSVNPODg1OT0iJChwcmludGYgIiRJU084ODU5X0VTQ0FQRUQiKSIgJiYKKwkJZWNobyBjb250ZW50MTIzID4iJElTTzg4NTkiICYmCisJCXA0IGFkZCAiJElTTzg4NTkiICYmCisJCXA0IHN1Ym1pdCAtZCAidGVzdCBjb21taXQiCisJKQorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdDbG9uZSBhdXRvLWRldGVjdHMgZGVwb3Qgd2l0aCBpc284ODU5LTEgcGF0aHMnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCVVURjg9IiQocHJpbnRmICIkVVRGOF9FU0NBUEVEIikiICYmCisJCWVjaG8gIiRVVEY4IiA+ZXhwZWN0ICYmCisJCWdpdCAtYyBjb3JlLnF1b3RlcGF0aD1mYWxzZSBscy1maWxlcyA+YWN0dWFsICYmCisJCXRlc3RfY21wIGV4cGVjdCBhY3R1YWwKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0Nsb25lIHJlcG8gY29udGFpbmluZyBpc284ODU5LTEgZW5jb2RlZCBwYXRocyB3aXRoIGdpdC1wNC5wYXRoRW5jb2RpbmcnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnBhdGhFbmNvZGluZyBpc284ODU5LTEgJiYKKwkJZ2l0IHA0IGNsb25lIC0tdXNlLWNsaWVudC1zcGVjIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3QgJiYKKwkJVVRGOD0iJChwcmludGYgIiRVVEY4X0VTQ0FQRUQiKSIgJiYKKwkJZWNobyAiJFVURjgiID5leHBlY3QgJiYKKwkJZ2l0IC1jIGNvcmUucXVvdGVwYXRoPWZhbHNlIGxzLWZpbGVzID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbCAmJgorCisJCWVjaG8gY29udGVudDEyMyA+ZXhwZWN0ICYmCisJCWNhdCAiJFVURjgiID5hY3R1YWwgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAna2lsbCBwNGQnICcKKwlraWxsX3A0ZAorJworCit0ZXN0X2RvbmUKZGlmZiAtLWdpdCBhL3QvdDk4MjMtZ2l0LXA0LW1vY2stbGZzLnNoIGIvdC90OTgyMy1naXQtcDQtbW9jay1sZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWYyZGMzNgotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MjMtZ2l0LXA0LW1vY2stbGZzLnNoCkBAIC0wLDAgKzEsMTkyIEBACisjIS9iaW4vc2gKKwordGVzdF9kZXNjcmlwdGlvbj0nQ2xvbmUgcmVwb3NpdG9yaWVzIGFuZCBzdG9yZSBmaWxlcyBpbiBNb2NrIExGUycKKworLiAuL2xpYi1naXQtcDQuc2gKKwordGVzdF9maWxlX2lzX25vdF9pbl9tb2NrX2xmcyAoKSB7CisJRklMRT0iJDEiICYmCisJQ09OVEVOVD0iJDIiICYmCisJZWNobyAiJENPTlRFTlQiID5leHBlY3RfY29udGVudCAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkRklMRSIgJiYKKwl0ZXN0X2NtcCBleHBlY3RfY29udGVudCAiJEZJTEUiCit9CisKK3Rlc3RfZmlsZV9pc19pbl9tb2NrX2xmcyAoKSB7CisJRklMRT0iJDEiICYmCisJQ09OVEVOVD0iJDIiICYmCisJTE9DQUxfU1RPUkFHRT0iLmdpdC9tb2NrLXN0b3JhZ2UvbG9jYWwvJENPTlRFTlQiICYmCisJU0VSVkVSX1NUT1JBR0U9Ii5naXQvbW9jay1zdG9yYWdlL3JlbW90ZS8kQ09OVEVOVCIgJiYKKwllY2hvICJwb2ludGVyLSRDT05URU5UIiA+ZXhwZWN0X3BvaW50ZXIgJiYKKwllY2hvICIkQ09OVEVOVCIgPmV4cGVjdF9jb250ZW50ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRGSUxFIiAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkTE9DQUxfU1RPUkFHRSIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJFNFUlZFUl9TVE9SQUdFIiAmJgorCXRlc3RfY21wIGV4cGVjdF9wb2ludGVyICIkRklMRSIgJiYKKwl0ZXN0X2NtcCBleHBlY3RfY29udGVudCAiJExPQ0FMX1NUT1JBR0UiICYmCisJdGVzdF9jbXAgZXhwZWN0X2NvbnRlbnQgIiRTRVJWRVJfU1RPUkFHRSIKK30KKwordGVzdF9maWxlX2lzX2RlbGV0ZWRfaW5fbW9ja19sZnMgKCkgeworCUZJTEU9IiQxIiAmJgorCUNPTlRFTlQ9IiQyIiAmJgorCUxPQ0FMX1NUT1JBR0U9Ii5naXQvbW9jay1zdG9yYWdlL2xvY2FsLyRDT05URU5UIiAmJgorCVNFUlZFUl9TVE9SQUdFPSIuZ2l0L21vY2stc3RvcmFnZS9yZW1vdGUvJENPTlRFTlQiICYmCisJZWNobyAicG9pbnRlci0kQ09OVEVOVCIgPmV4cGVjdF9wb2ludGVyICYmCisJZWNobyAiJENPTlRFTlQiID5leHBlY3RfY29udGVudCAmJgorCXRlc3RfcGF0aF9pc19taXNzaW5nICIkRklMRSIgJiYKKwl0ZXN0X3BhdGhfaXNfZmlsZSAiJExPQ0FMX1NUT1JBR0UiICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRTRVJWRVJfU1RPUkFHRSIgJiYKKwl0ZXN0X2NtcCBleHBlY3RfY29udGVudCAiJExPQ0FMX1NUT1JBR0UiICYmCisJdGVzdF9jbXAgZXhwZWN0X2NvbnRlbnQgIiRTRVJWRVJfU1RPUkFHRSIKK30KKwordGVzdF9maWxlX2NvdW50X2luX2RpciAoKSB7CisJRElSPSIkMSIgJiYKKwlFWFBFQ1RFRF9DT1VOVD0iJDIiICYmCisJZmluZCAiJERJUiIgLXR5cGUgZiA+YWN0dWFsICYmCisJdGVzdF9saW5lX2NvdW50ID0gJEVYUEVDVEVEX0NPVU5UIGFjdHVhbAorfQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQ3JlYXRlIHJlcG8gd2l0aCBiaW5hcnkgZmlsZXMnICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisKKwkJZWNobyAiY29udGVudCAxIHR4dCAyMyBieXRlcyIgPmZpbGUxLnR4dCAmJgorCQlwNCBhZGQgZmlsZTEudHh0ICYmCisJCWVjaG8gImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgPmZpbGUyLmRhdCAmJgorCQlwNCBhZGQgZmlsZTIuZGF0ICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIHRleHQgYW5kIGJpbmFyeSBmaWxlIiAmJgorCisJCW1rZGlyICJwYXRoIHdpdGggc3BhY2VzIiAmJgorCQllY2hvICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiID4icGF0aCB3aXRoIHNwYWNlcy9maWxlMy5iaW4iICYmCisJCXA0IGFkZCAicGF0aCB3aXRoIHNwYWNlcy9maWxlMy5iaW4iICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIGFub3RoZXIgYmluYXJ5IGZpbGUgd2l0aCBzYW1lIGNvbnRlbnQgYW5kIHNwYWNlcyBpbiBwYXRoIiAmJgorCisJCWVjaG8gImNvbnRlbnQgNCBiaW4gMjYgYnl0ZXMgWFgiID5maWxlNC5iaW4gJiYKKwkJcDQgYWRkIGZpbGU0LmJpbiAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBhbm90aGVyIGJpbmFyeSBmaWxlIHdpdGggZGlmZmVyZW50IGNvbnRlbnQiCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTdG9yZSBmaWxlcyBpbiBNb2NrIExGUyBiYXNlZCBvbiBzaXplICg+MjQgYnl0ZXMpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAuICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LnVzZUNsaWVudFNwZWMgdHJ1ZSAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVTeXN0ZW0gTW9ja0xGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQgMjQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlUHVzaCBUcnVlICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJCXRlc3RfZmlsZV9pc19ub3RfaW5fbW9ja19sZnMgZmlsZTEudHh0ICJjb250ZW50IDEgdHh0IDIzIGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfaW5fbW9ja19sZnMgZmlsZTIuZGF0ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19pbl9tb2NrX2xmcyAicGF0aCB3aXRoIHNwYWNlcy9maWxlMy5iaW4iICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19pbl9tb2NrX2xmcyBmaWxlNC5iaW4gImNvbnRlbnQgNCBiaW4gMjYgYnl0ZXMgWFgiICYmCisKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9tb2NrLXN0b3JhZ2UvbG9jYWwiIDIgJiYKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9tb2NrLXN0b3JhZ2UvcmVtb3RlIiAyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTdG9yZSBmaWxlcyBpbiBNb2NrIExGUyBiYXNlZCBvbiBleHRlbnNpb24gKGRhdCknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBNb2NrTEZTICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZUV4dGVuc2lvbnMgZGF0ICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVB1c2ggVHJ1ZSAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKworCQl0ZXN0X2ZpbGVfaXNfbm90X2luX21vY2tfbGZzIGZpbGUxLnR4dCAiY29udGVudCAxIHR4dCAyMyBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX2luX21vY2tfbGZzIGZpbGUyLmRhdCAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfbm90X2luX21vY2tfbGZzICJwYXRoIHdpdGggc3BhY2VzL2ZpbGUzLmJpbiIgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX25vdF9pbl9tb2NrX2xmcyBmaWxlNC5iaW4gImNvbnRlbnQgNCBiaW4gMjYgYnl0ZXMgWFgiICYmCisKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9tb2NrLXN0b3JhZ2UvbG9jYWwiIDEgJiYKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9tb2NrLXN0b3JhZ2UvcmVtb3RlIiAxCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTdG9yZSBmaWxlcyBpbiBNb2NrIExGUyBiYXNlZCBvbiBleHRlbnNpb24gKGRhdCkgYW5kIHVzZSBnaXQgcDQgc3luYyBhbmQgbm8gY2xpZW50IHNwZWMnICcKKwl0ZXN0X3doZW5fZmluaXNoZWQgY2xlYW51cF9naXQgJiYKKwkoCisJCWNkICIkZ2l0IiAmJgorCQlnaXQgaW5pdCAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIE1vY2tMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlRXh0ZW5zaW9ucyBkYXQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlUHVzaCBUcnVlICYmCisJCWdpdCBwNCBzeW5jIC8vZGVwb3QgJiYKKwkJZ2l0IGNoZWNrb3V0IHA0L21hc3RlciAmJgorCisJCXRlc3RfZmlsZV9pc19ub3RfaW5fbW9ja19sZnMgZmlsZTEudHh0ICJjb250ZW50IDEgdHh0IDIzIGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfaW5fbW9ja19sZnMgZmlsZTIuZGF0ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pc19ub3RfaW5fbW9ja19sZnMgInBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfbm90X2luX21vY2tfbGZzIGZpbGU0LmJpbiAiY29udGVudCA0IGJpbiAyNiBieXRlcyBYWCIgJiYKKworCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L21vY2stc3RvcmFnZS9sb2NhbCIgMSAmJgorCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L21vY2stc3RvcmFnZS9yZW1vdGUiIDEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlbW92ZSBmaWxlIGZyb20gcmVwbyBhbmQgc3RvcmUgZmlsZXMgaW4gTW9jayBMRlMgYmFzZWQgb24gc2l6ZSAoPjI0IGJ5dGVzKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcDQgZGVsZXRlIGZpbGU0LmJpbiAmJgorCQlwNCBzdWJtaXQgLWQgIlJlbW92ZSBmaWxlIgorCSkgJiYKKworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIE1vY2tMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlVGhyZXNob2xkIDI0ICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVB1c2ggVHJ1ZSAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKworCQl0ZXN0X2ZpbGVfaXNfbm90X2luX21vY2tfbGZzIGZpbGUxLnR4dCAiY29udGVudCAxIHR4dCAyMyBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2lzX2luX21vY2tfbGZzIGZpbGUyLmRhdCAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfaW5fbW9ja19sZnMgInBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaXNfZGVsZXRlZF9pbl9tb2NrX2xmcyBmaWxlNC5iaW4gImNvbnRlbnQgNCBiaW4gMjYgYnl0ZXMgWFgiICYmCisKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9tb2NrLXN0b3JhZ2UvbG9jYWwiIDIgJiYKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9tb2NrLXN0b3JhZ2UvcmVtb3RlIiAyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdSdW4gZ2l0IHA0IHN1Ym1pdCBpbiByZXBvIGNvbmZpZ3VyZWQgd2l0aCBsYXJnZSBmaWxlIHN5c3RlbScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIE1vY2tMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlVGhyZXNob2xkIDI0ICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVB1c2ggVHJ1ZSAmJgorCQlnaXQgcDQgY2xvbmUgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdEBhbGwgJiYKKworCQl0ZXN0X211c3RfZmFpbCBnaXQgcDQgc3VibWl0CisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgyNC1naXQtcDQtZ2l0LWxmcy5zaCBiL3QvdDk4MjQtZ2l0LXA0LWdpdC1sZnMuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGI2NjRhMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdDk4MjQtZ2l0LXA0LWdpdC1sZnMuc2gKQEAgLTAsMCArMSwyODggQEAKKyMhL2Jpbi9zaAorCit0ZXN0X2Rlc2NyaXB0aW9uPSdDbG9uZSByZXBvc2l0b3JpZXMgYW5kIHN0b3JlIGZpbGVzIGluIEdpdCBMRlMnCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK2dpdCBsZnMgaGVscCA+L2Rldi9udWxsIDI+JjEgfHwgeworCXNraXBfYWxsPSdza2lwcGluZyBnaXQgcDQgR2l0IExGUyB0ZXN0czsgR2l0IExGUyBub3QgZm91bmQnCisJdGVzdF9kb25lCit9CisKK3Rlc3RfZmlsZV9pbl9sZnMgKCkgeworCUZJTEU9IiQxIiAmJgorCVNJWkU9IiQyIiAmJgorCUVYUEVDVEVEX0NPTlRFTlQ9IiQzIiAmJgorCWNhdCAiJEZJTEUiIHwgZ3JlcCAic2l6ZSAkU0laRSIgJiYKKwlIQVNIPSQoY2F0ICIkRklMRSIgfCBncmVwICJvaWQgc2hhMjU2OiIgfCBzZWQgLWUgInMvb2lkIHNoYTI1NjovL2ciKSAmJgorCUxGU19GSUxFPSIuZ2l0L2xmcy9vYmplY3RzLyQoZWNobyAiJEhBU0giIHwgY3V0IC1jMS0yKS8kKGVjaG8gIiRIQVNIIiB8IGN1dCAtYzMtNCkvJEhBU0giICYmCisJZWNobyAkRVhQRUNURURfQ09OVEVOVCA+ZXhwZWN0ICYmCisJdGVzdF9wYXRoX2lzX2ZpbGUgIiRGSUxFIiAmJgorCXRlc3RfcGF0aF9pc19maWxlICIkTEZTX0ZJTEUiICYmCisJdGVzdF9jbXAgZXhwZWN0ICIkTEZTX0ZJTEUiCit9CisKK3Rlc3RfZmlsZV9jb3VudF9pbl9kaXIgKCkgeworCURJUj0iJDEiICYmCisJRVhQRUNURURfQ09VTlQ9IiQyIiAmJgorCWZpbmQgIiRESVIiIC10eXBlIGYgPmFjdHVhbCAmJgorCXRlc3RfbGluZV9jb3VudCA9ICRFWFBFQ1RFRF9DT1VOVCBhY3R1YWwKK30KKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc3RhcnQgcDRkJyAnCisJc3RhcnRfcDRkCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ0NyZWF0ZSByZXBvIHdpdGggYmluYXJ5IGZpbGVzJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCisJCWVjaG8gImNvbnRlbnQgMSB0eHQgMjMgYnl0ZXMiID5maWxlMS50eHQgJiYKKwkJcDQgYWRkIGZpbGUxLnR4dCAmJgorCQllY2hvICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiID5maWxlMi5kYXQgJiYKKwkJcDQgYWRkIGZpbGUyLmRhdCAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCB0ZXh0IGFuZCBiaW5hcnkgZmlsZSIgJiYKKworCQlta2RpciAicGF0aCB3aXRoIHNwYWNlcyIgJiYKKwkJZWNobyAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiA+InBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAmJgorCQlwNCBhZGQgInBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBhbm90aGVyIGJpbmFyeSBmaWxlIHdpdGggc2FtZSBjb250ZW50IGFuZCBzcGFjZXMgaW4gcGF0aCIgJiYKKworCQllY2hvICJjb250ZW50IDQgYmluIDI2IGJ5dGVzIFhYIiA+ZmlsZTQuYmluICYmCisJCXA0IGFkZCBmaWxlNC5iaW4gJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgYW5vdGhlciBiaW5hcnkgZmlsZSB3aXRoIGRpZmZlcmVudCBjb250ZW50IgorCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnU3RvcmUgZmlsZXMgaW4gTEZTIGJhc2VkIG9uIHNpemUgKD4yNCBieXRlcyknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBHaXRMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlVGhyZXNob2xkIDI0ICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJCXRlc3RfZmlsZV9pbl9sZnMgZmlsZTIuZGF0IDI1ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pbl9sZnMgInBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAyNSAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X2ZpbGVfaW5fbGZzIGZpbGU0LmJpbiAyNiAiY29udGVudCA0IGJpbiAyNiBieXRlcyBYWCIgJiYKKworCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L2xmcy9vYmplY3RzIiAyICYmCisKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCisJCSMKKwkJIyBHaXQgTEZTIChzZWUgaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vKQorCQkjCisJCS9maWxlMi5kYXQgZmlsdGVyPWxmcyAtdGV4dAorCQkvZmlsZTQuYmluIGZpbHRlcj1sZnMgLXRleHQKKwkJL3BhdGhbWzpzcGFjZTpdXXdpdGhbWzpzcGFjZTpdXXNwYWNlcy9maWxlMy5iaW4gZmlsdGVyPWxmcyAtdGV4dAorCQlFT0YKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC5naXRhdHRyaWJ1dGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdTdG9yZSBmaWxlcyBpbiBMRlMgYmFzZWQgb24gc2l6ZSAoPjI1IGJ5dGVzKScgJworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIEdpdExGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQgMjUgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9maWxlX2luX2xmcyBmaWxlNC5iaW4gMjYgImNvbnRlbnQgNCBiaW4gMjYgYnl0ZXMgWFgiICYmCisJCXRlc3RfZmlsZV9jb3VudF9pbl9kaXIgIi5naXQvbGZzL29iamVjdHMiIDEgJiYKKworCQljYXQgPmV4cGVjdCA8PC1cRU9GICYmCisKKwkJIworCQkjIEdpdCBMRlMgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8pCisJCSMKKwkJL2ZpbGU0LmJpbiBmaWx0ZXI9bGZzIC10ZXh0CisJCUVPRgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLmdpdGF0dHJpYnV0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1N0b3JlIGZpbGVzIGluIExGUyBiYXNlZCBvbiBleHRlbnNpb24gKGRhdCknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBHaXRMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlRXh0ZW5zaW9ucyBkYXQgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9maWxlX2luX2xmcyBmaWxlMi5kYXQgMjUgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9sZnMvb2JqZWN0cyIgMSAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKworCQkjCisJCSMgR2l0IExGUyAoc2VlIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tLykKKwkJIworCQkqLmRhdCBmaWx0ZXI9bGZzIC10ZXh0CisJCUVPRgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLmdpdGF0dHJpYnV0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1N0b3JlIGZpbGVzIGluIExGUyBiYXNlZCBvbiBzaXplICg+MjUgYnl0ZXMpIGFuZCBleHRlbnNpb24gKGRhdCknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBHaXRMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlRXh0ZW5zaW9ucyBkYXQgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlVGhyZXNob2xkIDI1ICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJCXRlc3RfZmlsZV9pbl9sZnMgZmlsZTIuZGF0IDI1ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pbl9sZnMgZmlsZTQuYmluIDI2ICJjb250ZW50IDQgYmluIDI2IGJ5dGVzIFhYIiAmJgorCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L2xmcy9vYmplY3RzIiAyICYmCisKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCisJCSMKKwkJIyBHaXQgTEZTIChzZWUgaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vKQorCQkjCisJCSouZGF0IGZpbHRlcj1sZnMgLXRleHQKKwkJL2ZpbGU0LmJpbiBmaWx0ZXI9bGZzIC10ZXh0CisJCUVPRgorCQl0ZXN0X3BhdGhfaXNfZmlsZSAuZ2l0YXR0cmlidXRlcyAmJgorCQl0ZXN0X2NtcCBleHBlY3QgLmdpdGF0dHJpYnV0ZXMKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ1JlbW92ZSBmaWxlIGZyb20gcmVwbyBhbmQgc3RvcmUgZmlsZXMgaW4gTEZTIGJhc2VkIG9uIHNpemUgKD4yNCBieXRlcyknICcKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCSgKKwkJY2QgIiRjbGkiICYmCisJCXA0IGRlbGV0ZSBmaWxlNC5iaW4gJiYKKwkJcDQgc3VibWl0IC1kICJSZW1vdmUgZmlsZSIKKwkpICYmCisKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBHaXRMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlVGhyZXNob2xkIDI0ICYmCisJCWdpdCBwNCBjbG9uZSAtLWRlc3RpbmF0aW9uPSIkZ2l0IiAvL2RlcG90QGFsbCAmJgorCisJCXRlc3RfZmlsZV9pbl9sZnMgZmlsZTIuZGF0IDI1ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfZmlsZV9pbl9sZnMgInBhdGggd2l0aCBzcGFjZXMvZmlsZTMuYmluIiAyNSAiY29udGVudCAyLTMgYmluIDI1IGJ5dGVzIiAmJgorCQl0ZXN0X3BhdGhfaXNfbWlzc2luZyBmaWxlNC5iaW4gJiYKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9sZnMvb2JqZWN0cyIgMiAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKworCQkjCisJCSMgR2l0IExGUyAoc2VlIGh0dHBzOi8vZ2l0LWxmcy5naXRodWIuY29tLykKKwkJIworCQkvZmlsZTIuZGF0IGZpbHRlcj1sZnMgLXRleHQKKwkJL3BhdGhbWzpzcGFjZTpdXXdpdGhbWzpzcGFjZTpdXXNwYWNlcy9maWxlMy5iaW4gZmlsdGVyPWxmcyAtdGV4dAorCQlFT0YKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC5naXRhdHRyaWJ1dGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdBZGQgLmdpdGF0dHJpYnV0ZXMgYW5kIHN0b3JlIGZpbGVzIGluIExGUyBiYXNlZCBvbiBzaXplICg+MjQgYnl0ZXMpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvICIqLnR4dCB0ZXh0IiA+LmdpdGF0dHJpYnV0ZXMgJiYKKwkJcDQgYWRkIC5naXRhdHRyaWJ1dGVzICYmCisJCXA0IHN1Ym1pdCAtZCAiQWRkIC5naXRhdHRyaWJ1dGVzIgorCSkgJiYKKworCWNsaWVudF92aWV3ICIvL2RlcG90Ly4uLiAvL2NsaWVudC8uLi4iICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkIGNsZWFudXBfZ2l0ICYmCisJKAorCQljZCAiJGdpdCIgJiYKKwkJZ2l0IGluaXQgLiAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC51c2VDbGllbnRTcGVjIHRydWUgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlU3lzdGVtIEdpdExGUyAmJgorCQlnaXQgY29uZmlnIGdpdC1wNC5sYXJnZUZpbGVUaHJlc2hvbGQgMjQgJiYKKwkJZ2l0IHA0IGNsb25lIC0tZGVzdGluYXRpb249IiRnaXQiIC8vZGVwb3RAYWxsICYmCisKKwkJdGVzdF9maWxlX2luX2xmcyBmaWxlMi5kYXQgMjUgImNvbnRlbnQgMi0zIGJpbiAyNSBieXRlcyIgJiYKKwkJdGVzdF9maWxlX2luX2xmcyAicGF0aCB3aXRoIHNwYWNlcy9maWxlMy5iaW4iIDI1ICJjb250ZW50IDItMyBiaW4gMjUgYnl0ZXMiICYmCisJCXRlc3RfcGF0aF9pc19taXNzaW5nIGZpbGU0LmJpbiAmJgorCQl0ZXN0X2ZpbGVfY291bnRfaW5fZGlyICIuZ2l0L2xmcy9vYmplY3RzIiAyICYmCisKKwkJY2F0ID5leHBlY3QgPDwtXEVPRiAmJgorCQkqLnR4dCB0ZXh0CisKKwkJIworCQkjIEdpdCBMRlMgKHNlZSBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS8pCisJCSMKKwkJL2ZpbGUyLmRhdCBmaWx0ZXI9bGZzIC10ZXh0CisJCS9wYXRoW1s6c3BhY2U6XV13aXRoW1s6c3BhY2U6XV1zcGFjZXMvZmlsZTMuYmluIGZpbHRlcj1sZnMgLXRleHQKKwkJRU9GCisJCXRlc3RfcGF0aF9pc19maWxlIC5naXRhdHRyaWJ1dGVzICYmCisJCXRlc3RfY21wIGV4cGVjdCAuZ2l0YXR0cmlidXRlcworCSkKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnQWRkIGJpZyBmaWxlcyB0byByZXBvIGFuZCBzdG9yZSBmaWxlcyBpbiBMRlMgYmFzZWQgb24gY29tcHJlc3NlZCBzaXplICg+MjggYnl0ZXMpJyAnCisJY2xpZW50X3ZpZXcgIi8vZGVwb3QvLi4uIC8vY2xpZW50Ly4uLiIgJiYKKwkoCisJCWNkICIkY2xpIiAmJgorCQllY2hvICJjb250ZW50IDUgYmluIDQwIGJ5dGVzIFhYWFhYWFhYWFhYWFhYWFgiID5maWxlNS5iaW4gJiYKKwkJcDQgYWRkIGZpbGU1LmJpbiAmJgorCQlwNCBzdWJtaXQgLWQgIkFkZCBmaWxlIHdpdGggc21hbGwgZm9vdHByaW50IGFmdGVyIGNvbXByZXNzaW9uIiAmJgorCisJCWVjaG8gImNvbnRlbnQgNiBiaW4gMzkgYnl0ZXMgWFhYWFhZWVlZWVpaWlpaIiA+ZmlsZTYuYmluICYmCisJCXA0IGFkZCBmaWxlNi5iaW4gJiYKKwkJcDQgc3VibWl0IC1kICJBZGQgZmlsZSB3aXRoIGxhcmdlIGZvb3RwcmludCBhZnRlciBjb21wcmVzc2lvbiIKKwkpICYmCisKKwljbGllbnRfdmlldyAiLy9kZXBvdC8uLi4gLy9jbGllbnQvLi4uIiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCWdpdCBpbml0IC4gJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQudXNlQ2xpZW50U3BlYyB0cnVlICYmCisJCWdpdCBjb25maWcgZ2l0LXA0LmxhcmdlRmlsZVN5c3RlbSBHaXRMRlMgJiYKKwkJZ2l0IGNvbmZpZyBnaXQtcDQubGFyZ2VGaWxlQ29tcHJlc3NlZFRocmVzaG9sZCAyOCAmJgorCQkjIFdlIG9ubHkgaW1wb3J0IEhFQUQgaGVyZSAoIkBhbGwiIGlzIG1pc3NpbmchKQorCQlnaXQgcDQgY2xvbmUgLS1kZXN0aW5hdGlvbj0iJGdpdCIgLy9kZXBvdCAmJgorCisJCXRlc3RfZmlsZV9pbl9sZnMgZmlsZTYuYmluIDEzICJjb250ZW50IDYgYmluIDM5IGJ5dGVzIFhYWFhYWVlZWVlaWlpaWiIKKwkJdGVzdF9maWxlX2NvdW50X2luX2RpciAiLmdpdC9sZnMvb2JqZWN0cyIgMSAmJgorCisJCWNhdCA+ZXhwZWN0IDw8LVxFT0YgJiYKKwkJKi50eHQgdGV4dAorCisJCSMKKwkJIyBHaXQgTEZTIChzZWUgaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vKQorCQkjCisJCS9maWxlNi5iaW4gZmlsdGVyPWxmcyAtdGV4dAorCQlFT0YKKwkJdGVzdF9wYXRoX2lzX2ZpbGUgLmdpdGF0dHJpYnV0ZXMgJiYKKwkJdGVzdF9jbXAgZXhwZWN0IC5naXRhdHRyaWJ1dGVzCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTgyNS1naXQtcDQtaGFuZGxlLXV0ZjE2LXdpdGhvdXQtYm9tLnNoIGIvdC90OTgyNS1naXQtcDQtaGFuZGxlLXV0ZjE2LXdpdGhvdXQtYm9tLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1NTE4NDUKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5ODI1LWdpdC1wNC1oYW5kbGUtdXRmMTYtd2l0aG91dC1ib20uc2gKQEAgLTAsMCArMSw1MCBAQAorIyEvYmluL3NoCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCBwNCBoYW5kbGluZyBvZiBVVEYtMTYgZmlsZXMgd2l0aG91dCBCT00nCisKKy4gLi9saWItZ2l0LXA0LnNoCisKK1VURjE2PSJcMjI3XDAwMFwyMjdcMDAwIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzdGFydCBwNGQnICcKKwlzdGFydF9wNGQKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnaW5pdCBkZXBvdCB3aXRoIFVURi0xNiBlbmNvZGVkIGZpbGUgYW5kIGFydGlmaWNpYWxseSByZW1vdmUgQk9NJyAnCisJKAorCQljZCAiJGNsaSIgJiYKKwkJcHJpbnRmICIkVVRGMTYiID5maWxlMSAmJgorCQlwNCBhZGQgLXQgdXRmMTYgZmlsZTEgJiYKKwkJcDQgc3VibWl0IC1kICJmaWxlMSIKKwkpICYmCisKKwkoCisJCWNkIGRiICYmCisJCXA0ZCAtamMgJiYKKwkJIyBQNEQgYXV0b21hdGljYWxseSBhZGRzIGEgQk9NLiBSZW1vdmUgaXQgaGVyZSB0byBtYWtlIHRoZSBmaWxlIGludmFsaWQuCisJCXNlZCAtZSAiXCRkIiBkZXBvdC9maWxlMSx2ID5kZXBvdC9maWxlMSx2Lm5ldyAmJgorCQltdiBkZXBvdC9maWxlMSx2Lm5ldyBkZXBvdC9maWxlMSx2ICYmCisJCXByaW50ZiAiQCRVVEYxNkAiID4+ZGVwb3QvZmlsZTEsdiAmJgorCQlwNGQgLWpyRiBjaGVja3BvaW50LjEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2Nsb25lIGRlcG90IHdpdGggaW52YWxpZCBVVEYtMTYgZmlsZSBpbiB2ZXJib3NlIG1vZGUnICcKKwlnaXQgcDQgY2xvbmUgLS1kZXN0PSIkZ2l0IiAtLXZlcmJvc2UgLy9kZXBvdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCBjbGVhbnVwX2dpdCAmJgorCSgKKwkJY2QgIiRnaXQiICYmCisJCXByaW50ZiAiJFVURjE2IiA+ZXhwZWN0ICYmCisJCXRlc3RfY21wX2JpbiBleHBlY3QgZmlsZTEKKwkpCisnCisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgJ2Nsb25lIGRlcG90IHdpdGggaW52YWxpZCBVVEYtMTYgZmlsZSBpbiBub24tdmVyYm9zZSBtb2RlJyAnCisJZ2l0IHA0IGNsb25lIC0tZGVzdD0iJGdpdCIgLy9kZXBvdAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdraWxsIHA0ZCcgJworCWtpbGxfcDRkCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTkwMS1naXQtd2ViLS1icm93c2Uuc2ggYi90L3Q5OTAxLWdpdC13ZWItLWJyb3dzZS5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMGE2YmFkCi0tLSAvZGV2L251bGwKKysrIGIvdC90OTkwMS1naXQtd2ViLS1icm93c2Uuc2gKQEAgLTAsMCArMSw2MyBAQAorIyEvYmluL3NoCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J2dpdCB3ZWItLWJyb3dzZSBiYXNpYyB0ZXN0cworCitUaGlzIHRlc3QgY2hlY2tzIHRoYXQgZ2l0IHdlYi0tYnJvd3NlIGNhbiBoYW5kbGUgdmFyaW91cyB2YWxpZCBVUkxzLicKKworLiAuL3Rlc3QtbGliLnNoCisKK3Rlc3Rfd2ViX2Jyb3dzZSAoKSB7CisJIyBicm93c2VyPSQxIHVybD0kMgorCWdpdCB3ZWItLWJyb3dzZSAtLWJyb3dzZXI9IiQxIiAiJDIiID5hY3R1YWwgJiYKKwl0ciAtZCAnXDAxNScgPGFjdHVhbCA+dGV4dCAmJgorCXRlc3RfY21wIGV4cGVjdCB0ZXh0Cit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdVUkwgd2l0aCBhbiBhbXBlcnNhbmQgaW4gaXQnICcKKwllY2hvIGh0dHA6Ly9leGFtcGxlLmNvbS9mb29cJmJhciA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBicm93c2VyLmN1c3RvbS5jbWQgZWNobyAmJgorCXRlc3Rfd2ViX2Jyb3dzZSBjdXN0b20gaHR0cDovL2V4YW1wbGUuY29tL2Zvb1wmYmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdVUkwgd2l0aCBhIHNlbWktY29sb24gaW4gaXQnICcKKwllY2hvIGh0dHA6Ly9leGFtcGxlLmNvbS9mb29cO2JhciA+ZXhwZWN0ICYmCisJZ2l0IGNvbmZpZyBicm93c2VyLmN1c3RvbS5jbWQgZWNobyAmJgorCXRlc3Rfd2ViX2Jyb3dzZSBjdXN0b20gaHR0cDovL2V4YW1wbGUuY29tL2Zvb1w7YmFyCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgXAorCSdVUkwgd2l0aCBhIGhhc2ggaW4gaXQnICcKKwllY2hvIGh0dHA6Ly9leGFtcGxlLmNvbS9mb28jYmFyID5leHBlY3QgJiYKKwlnaXQgY29uZmlnIGJyb3dzZXIuY3VzdG9tLmNtZCBlY2hvICYmCisJdGVzdF93ZWJfYnJvd3NlIGN1c3RvbSBodHRwOi8vZXhhbXBsZS5jb20vZm9vI2JhcgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknYnJvd3NlciBwYXRocyBhcmUgcHJvcGVybHkgcXVvdGVkJyAnCisJZWNobyBmYWtlOiBodHRwOi8vZXhhbXBsZS5jb20vZm9vID5leHBlY3QgJiYKKwljYXQgPiJmYWtlIGJyb3dzZXIiIDw8LVxFT0YgJiYKKwkjIS9iaW4vc2gKKwllY2hvIGZha2U6ICIkQCIKKwlFT0YKKwljaG1vZCAreCAiZmFrZSBicm93c2VyIiAmJgorCWdpdCBjb25maWcgYnJvd3Nlci53M20ucGF0aCAiYHB3ZGAvZmFrZSBicm93c2VyIiAmJgorCXRlc3Rfd2ViX2Jyb3dzZSB3M20gaHR0cDovL2V4YW1wbGUuY29tL2ZvbworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzIFwKKwknYnJvd3NlciBjb21tYW5kIGFsbG93cyBhcmJpdHJhcnkgc2hlbGwgY29kZScgJworCWVjaG8gImFyZzogaHR0cDovL2V4YW1wbGUuY29tL2ZvbyIgPmV4cGVjdCAmJgorCWdpdCBjb25maWcgYnJvd3Nlci5jdXN0b20uY21kICIKKwkJZigpIHsKKwkJCWZvciBpIGluIFwiXCRAXCI7IGRvCisJCQkJZWNobyBhcmc6IFwkaQorCQkJZG9uZQorCQl9CisJCWYiICYmCisJdGVzdF93ZWJfYnJvd3NlIGN1c3RvbSBodHRwOi8vZXhhbXBsZS5jb20vZm9vCisnCisKK3Rlc3RfZG9uZQpkaWZmIC0tZ2l0IGEvdC90OTkwMi1jb21wbGV0aW9uLnNoIGIvdC90OTkwMi1jb21wbGV0aW9uLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJiYTYyZmIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Q5OTAyLWNvbXBsZXRpb24uc2gKQEAgLTAsMCArMSw2NTEgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMTIgRmVsaXBlIENvbnRyZXJhcworIworCit0ZXN0X2Rlc2NyaXB0aW9uPSd0ZXN0IGJhc2ggY29tcGxldGlvbicKKworLiAuL2xpYi1iYXNoLnNoCisKK2NvbXBsZXRlICgpCit7CisJIyBkbyBub3RoaW5nCisJcmV0dXJuIDAKK30KKworIyBCZSBjYXJlZnVsIHdoZW4gdXBkYXRpbmcgdGhpcyBsaXN0OgorIworIyAoMSkgVGhlIGJ1aWxkIHRyZWUgbWF5IGhhdmUgYnVpbGQgYXJ0aWZhY3QgZnJvbSBkaWZmZXJlbnQgYnJhbmNoLCBvcgorIyAgICAgdGhlIHVzZXIncyAkUEFUSCBtYXkgaGF2ZSBhIHJhbmRvbSBleGVjdXRhYmxlIHRoYXQgbWF5IGJlZ2luCisjICAgICB3aXRoICJnaXQtY2hlY2siIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBzdWJjb21tYW5kcyB0aGlzIGJ1aWxkCisjICAgICB3aWxsIHNoaXAsIGUuZy4gICJjaGVjay1pZ25vcmUiLiAgVGhlIHRlc3RzIGZvciBjb21wbGV0aW9uIGZvcgorIyAgICAgc3ViY29tbWFuZCBuYW1lcyB0ZXN0cyBob3cgImNoZWNrIiBpcyBleHBhbmRlZDsgd2UgbGltaXQgdGhlCisjICAgICBwb3NzaWJsZSBjYW5kaWRhdGVzIHRvICJjaGVja291dCIgYW5kICJjaGVjay1hdHRyIiB0byBtYWtlIHN1cmUKKyMgICAgICJjaGVjay1hdHRyIiwgd2hpY2ggaXMga25vd24gYnkgdGhlIGZpbHRlciBmdW5jdGlvbiBhcyBhCisjICAgICBzdWJjb21tYW5kIHRvIGJlIHRocm93biBvdXQsIHdoaWxlIGV4Y2x1ZGluZyBvdGhlciByYW5kb20gZmlsZXMKKyMgICAgIHRoYXQgaGFwcGVuIHRvIGJlZ2luIHdpdGggImNoZWNrIiB0byBhdm9pZCBsZXR0aW5nIHRoZW0gZ2V0IGluCisjICAgICB0aGUgd2F5LgorIworIyAoMikgQSB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBjb21tb24gc3ViY29tbWFuZHMgYXJlIGluY2x1ZGVkIGluIHRoZQorIyAgICAgY29tcGxldGlvbiBmb3IgImdpdCA8VEFCPiIsIGFuZCBhIHBsdW1iaW5nIGlzIGV4Y2x1ZGVkLiAgImFkZCIsCisjICAgICAiZmlsdGVyLWJyYW5jaCIgYW5kICJscy1maWxlcyIgYXJlIGxpc3RlZCBmb3IgdGhpcy4KKworR0lUX1RFU1RJTkdfQ09NTUFORF9DT01QTEVUSU9OPSdhZGQgY2hlY2tvdXQgY2hlY2stYXR0ciBmaWx0ZXItYnJhbmNoIGxzLWZpbGVzJworCisuICIkR0lUX0JVSUxEX0RJUi9jb250cmliL2NvbXBsZXRpb24vZ2l0LWNvbXBsZXRpb24uYmFzaCIKKworIyBXZSBkb24ndCBuZWVkIHRoaXMgZnVuY3Rpb24gdG8gYWN0dWFsbHkgam9pbiB3b3JkcyBvciBkbyBhbnl0aGluZyBzcGVjaWFsLgorIyBBbHNvLCBpdCdzIGNsZWFuZXIgdG8gYXZvaWQgdG91Y2hpbmcgYmFzaCdzIGludGVybmFsIGNvbXBsZXRpb24gdmFyaWFibGVzLgorIyBTbyBsZXQncyBvdmVycmlkZSBpdCB3aXRoIGEgbWluaW1hbCB2ZXJzaW9uIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorX2dldF9jb21wX3dvcmRzX2J5X3JlZiAoKQoreworCXdoaWxlIFsgJCMgLWd0IDAgXTsgZG8KKwkJY2FzZSAiJDEiIGluCisJCWN1cikKKwkJCWN1cj0ke193b3Jkc1tfY3dvcmRdfQorCQkJOzsKKwkJcHJldikKKwkJCXByZXY9JHtfd29yZHNbX2N3b3JkLTFdfQorCQkJOzsKKwkJd29yZHMpCisJCQl3b3Jkcz0oIiR7X3dvcmRzW0BdfSIpCisJCQk7OworCQljd29yZCkKKwkJCWN3b3JkPSRfY3dvcmQKKwkJCTs7CisJCWVzYWMKKwkJc2hpZnQKKwlkb25lCit9CisKK3ByaW50X2NvbXAgKCkKK3sKKwlsb2NhbCBJRlM9JCdcbicKKwllY2hvICIke0NPTVBSRVBMWVsqXX0iID4gb3V0Cit9CisKK3J1bl9jb21wbGV0aW9uICgpCit7CisJbG9jYWwgLWEgQ09NUFJFUExZIF93b3JkcworCWxvY2FsIF9jd29yZAorCV93b3Jkcz0oICQxICkKKwl0ZXN0ICIkezE6IC0xfSIgPSAnICcgJiYgX3dvcmRzWyR7I193b3Jkc1tAXX0rMV09JycKKwkoKCBfY3dvcmQgPSAkeyNfd29yZHNbQF19IC0gMSApKQorCV9fZ2l0X3dyYXBfX2dpdF9tYWluICYmIHByaW50X2NvbXAKK30KKworIyBUZXN0IGhpZ2gtbGV2ZWwgY29tcGxldGlvbgorIyBBcmd1bWVudHMgYXJlOgorIyAxOiB0eXBlZCB0ZXh0IHNvIGZhciAoY3VyKQorIyAyOiBleHBlY3RlZCBjb21wbGV0aW9uCit0ZXN0X2NvbXBsZXRpb24gKCkKK3sKKwlpZiB0ZXN0ICQjIC1ndCAxCisJdGhlbgorCQlwcmludGYgJyVzXG4nICIkMiIgPmV4cGVjdGVkCisJZWxzZQorCQlzZWQgLWUgJ3MvWiQvLycgPmV4cGVjdGVkCisJZmkgJiYKKwlydW5fY29tcGxldGlvbiAiJDEiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgb3V0Cit9CisKKyMgVGVzdCBfX2dpdGNvbXAuCisjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgdHlwZWQgdGV4dCBzbyBmYXIgKGN1cik7IHRoZSByZXN0IGFyZQorIyBwYXNzZWQgdG8gX19naXRjb21wLiAgRXhwZWN0ZWQgb3V0cHV0IGNvbWVzIGlzIHJlYWQgZnJvbSB0aGUKKyMgc3RhbmRhcmQgaW5wdXQsIGxpa2UgdGVzdF9jb21wbGV0aW9uKCkuCit0ZXN0X2dpdGNvbXAgKCkKK3sKKwlsb2NhbCAtYSBDT01QUkVQTFkgJiYKKwlzZWQgLWUgJ3MvWiQvLycgPmV4cGVjdGVkICYmCisJY3VyPSIkMSIgJiYKKwlzaGlmdCAmJgorCV9fZ2l0Y29tcCAiJEAiICYmCisJcHJpbnRfY29tcCAmJgorCXRlc3RfY21wIGV4cGVjdGVkIG91dAorfQorCisjIFRlc3QgX19naXRjb21wX25sCisjIEFyZ3VtZW50cyBhcmU6CisjIDE6IGN1cnJlbnQgd29yZCAoY3VyKQorIyAtOiB0aGUgcmVzdCBhcmUgcGFzc2VkIHRvIF9fZ2l0Y29tcF9ubAordGVzdF9naXRjb21wX25sICgpCit7CisJbG9jYWwgLWEgQ09NUFJFUExZICYmCisJc2VkIC1lICdzL1okLy8nID5leHBlY3RlZCAmJgorCWN1cj0iJDEiICYmCisJc2hpZnQgJiYKKwlfX2dpdGNvbXBfbmwgIiRAIiAmJgorCXByaW50X2NvbXAgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCBvdXQKK30KKworaW52YWxpZF92YXJpYWJsZV9uYW1lPScke2Zvby5iYXJ9JworCithY3R1YWw9IiRUUkFTSF9ESVJFQ1RPUlkvYWN0dWFsIgorCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgX19naXRkaXIgdGVzdHMnICcKKwlta2RpciAtcCBzdWJkaXIvc3Vic3ViZGlyICYmCisJZ2l0IGluaXQgb3RoZXJyZXBvCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gZnJvbSBjb21tYW5kIGxpbmUgKHRocm91Z2ggJF9fZ2l0X2RpciknICcKKwllY2hvICIkVFJBU0hfRElSRUNUT1JZL290aGVycmVwby8uZ2l0IiA+ZXhwZWN0ZWQgJiYKKwkoCisJCV9fZ2l0X2Rpcj0iJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgJiYKKwkJX19naXRkaXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSByZXBvIGFzIGFyZ3VtZW50JyAnCisJZWNobyAib3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCV9fZ2l0ZGlyICJvdGhlcnJlcG8iID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSByZW1vdGUgYXMgYXJndW1lbnQnICcKKwllY2hvICJyZW1vdGUiID5leHBlY3RlZCAmJgorCV9fZ2l0ZGlyICJyZW1vdGUiID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSAuZ2l0IGRpcmVjdG9yeSBpbiBjd2QnICcKKwllY2hvICIuZ2l0IiA+ZXhwZWN0ZWQgJiYKKwlfX2dpdGRpciA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gLmdpdCBkaXJlY3RvcnkgaW4gcGFyZW50JyAnCisJZWNobyAiJChwd2QgLVApLy5naXQiID5leHBlY3RlZCAmJgorCSgKKwkJY2Qgc3ViZGlyL3N1YnN1YmRpciAmJgorCQlfX2dpdGRpciA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGRpciAtIGN3ZCBpcyBhIC5naXQgZGlyZWN0b3J5JyAnCisJZWNobyAiLiIgPmV4cGVjdGVkICYmCisJKAorCQljZCAuZ2l0ICYmCisJCV9fZ2l0ZGlyID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gcGFyZW50IGlzIGEgLmdpdCBkaXJlY3RvcnknICcKKwllY2hvICIkKHB3ZCAtUCkvLmdpdCIgPmV4cGVjdGVkICYmCisJKAorCQljZCAuZ2l0L3JlZnMvaGVhZHMgJiYKKwkJX19naXRkaXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSAkR0lUX0RJUiBzZXQgd2hpbGUgLmdpdCBkaXJlY3RvcnkgaW4gY3dkJyAnCisJZWNobyAiJFRSQVNIX0RJUkVDVE9SWS9vdGhlcnJlcG8vLmdpdCIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfRElSPSIkVFJBU0hfRElSRUNUT1JZL290aGVycmVwby8uZ2l0IiAmJgorCQlleHBvcnQgR0lUX0RJUiAmJgorCQlfX2dpdGRpciA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGRpciAtICRHSVRfRElSIHNldCB3aGlsZSAuZ2l0IGRpcmVjdG9yeSBpbiBwYXJlbnQnICcKKwllY2hvICIkVFJBU0hfRElSRUNUT1JZL290aGVycmVwby8uZ2l0IiA+ZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9ESVI9IiRUUkFTSF9ESVJFQ1RPUlkvb3RoZXJyZXBvLy5naXQiICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCWNkIHN1YmRpciAmJgorCQlfX2dpdGRpciA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGRpciAtIG5vbi1leGlzdGluZyAkR0lUX0RJUicgJworCSgKKwkJR0lUX0RJUj0iJFRSQVNIX0RJUkVDVE9SWS9ub24tZXhpc3RpbmciICYmCisJCWV4cG9ydCBHSVRfRElSICYmCisJCXRlc3RfbXVzdF9mYWlsIF9fZ2l0ZGlyCisJKQorJworCitmdW5jdGlvbiBwd2RfUF9XICgpIHsKKwlpZiB0ZXN0X2hhdmVfcHJlcmVxIE1JTkdXCisJdGhlbgorCQlwd2QgLVcKKwllbHNlCisJCXB3ZCAtUAorCWZpCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0ZGlyIC0gZ2l0ZmlsZSBpbiBjd2QnICcKKwllY2hvICIkKHB3ZF9QX1cpL290aGVycmVwby8uZ2l0IiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJnaXRkaXI6ICQocHdkX1BfVykvb3RoZXJyZXBvLy5naXQiID5zdWJkaXIvLmdpdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgc3ViZGlyLy5naXQiICYmCisJKAorCQljZCBzdWJkaXIgJiYKKwkJX19naXRkaXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSBnaXRmaWxlIGluIHBhcmVudCcgJworCWVjaG8gIiQocHdkX1BfVykvb3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCWVjaG8gImdpdGRpcjogJChwd2RfUF9XKS9vdGhlcnJlcG8vLmdpdCIgPnN1YmRpci8uZ2l0ICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtZiBzdWJkaXIvLmdpdCIgJiYKKwkoCisJCWNkIHN1YmRpci9zdWJzdWJkaXIgJiYKKwkJX19naXRkaXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAnX19naXRkaXIgLSByZXN1bHRpbmcgcGF0aCBhdm9pZHMgc3ltbGlua3MnICcKKwllY2hvICIkKHB3ZCAtUCkvb3RoZXJyZXBvLy5naXQiID5leHBlY3RlZCAmJgorCW1rZGlyIG90aGVycmVwby9kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBvdGhlcnJlcG8vZGlyIiAmJgorCWxuIC1zIG90aGVycmVwby9kaXIgbGluayAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLWYgbGluayIgJiYKKwkoCisJCWNkIGxpbmsgJiYKKwkJX19naXRkaXIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRkaXIgLSBub3QgYSBnaXQgcmVwb3NpdG9yeScgJworCSgKKwkJY2Qgc3ViZGlyL3N1YnN1YmRpciAmJgorCQlHSVRfQ0VJTElOR19ESVJFQ1RPUklFUz0iJFRSQVNIX0RJUkVDVE9SWSIgJiYKKwkJZXhwb3J0IEdJVF9DRUlMSU5HX0RJUkVDVE9SSUVTICYmCisJCXRlc3RfbXVzdF9mYWlsIF9fZ2l0ZGlyCisJKQorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXAgLSB0cmFpbGluZyBzcGFjZSAtIG9wdGlvbnMnICcKKwl0ZXN0X2dpdGNvbXAgIi0tcmUiICItLWRyeS1ydW4gLS1yZXVzZS1tZXNzYWdlPSAtLXJlZWRpdC1tZXNzYWdlPQorCQktLXJlc2V0LWF1dGhvciIgPDwtRU9GCisJLS1yZXVzZS1tZXNzYWdlPVoKKwktLXJlZWRpdC1tZXNzYWdlPVoKKwktLXJlc2V0LWF1dGhvciBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcCAtIHRyYWlsaW5nIHNwYWNlIC0gY29uZmlnIGtleXMnICcKKwl0ZXN0X2dpdGNvbXAgImJyIiAiYnJhbmNoLiBicmFuY2guYXV0b3NldHVwbWVyZ2UKKwkJYnJhbmNoLmF1dG9zZXR1cHJlYmFzZSBicm93c2VyLiIgPDwtXEVPRgorCWJyYW5jaC5aCisJYnJhbmNoLmF1dG9zZXR1cG1lcmdlIFoKKwlicmFuY2guYXV0b3NldHVwcmViYXNlIFoKKwlicm93c2VyLloKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRjb21wIC0gb3B0aW9uIHBhcmFtZXRlcicgJworCXRlc3RfZ2l0Y29tcCAiLS1zdHJhdGVneT1yZSIgIm9jdG9wdXMgb3VycyByZWN1cnNpdmUgcmVzb2x2ZSBzdWJ0cmVlIiBcCisJCSIiICJyZSIgPDwtXEVPRgorCXJlY3Vyc2l2ZSBaCisJcmVzb2x2ZSBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcCAtIHByZWZpeCcgJworCXRlc3RfZ2l0Y29tcCAiYnJhbmNoLm1lIiAicmVtb3RlIG1lcmdlIG1lcmdlb3B0aW9ucyByZWJhc2UiIFwKKwkJImJyYW5jaC5tYWludC4iICJtZSIgPDwtXEVPRgorCWJyYW5jaC5tYWludC5tZXJnZSBaCisJYnJhbmNoLm1haW50Lm1lcmdlb3B0aW9ucyBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcCAtIHN1ZmZpeCcgJworCXRlc3RfZ2l0Y29tcCAiYnJhbmNoLm1lIiAibWFzdGVyIG1haW50IG5leHQgcHUiICJicmFuY2guIiBcCisJCSJtYSIgIi4iIDw8LVxFT0YKKwlicmFuY2gubWFzdGVyLloKKwlicmFuY2gubWFpbnQuWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXAgLSBkb2VzbnQgZmFpbCBiZWNhdXNlIG9mIGludmFsaWQgdmFyaWFibGUgbmFtZScgJworCV9fZ2l0Y29tcCAiJGludmFsaWRfdmFyaWFibGVfbmFtZSIKKycKKworcmVhZCAtciAtZCAiIiByZWZzIDw8LVxFT0YKK21haW50CittYXN0ZXIKK25leHQKK3B1CitFT0YKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRjb21wX25sIC0gdHJhaWxpbmcgc3BhY2UnICcKKwl0ZXN0X2dpdGNvbXBfbmwgIm0iICIkcmVmcyIgPDwtRU9GCisJbWFpbnQgWgorCW1hc3RlciBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0Y29tcF9ubCAtIHByZWZpeCcgJworCXRlc3RfZ2l0Y29tcF9ubCAiLS1maXh1cD1tIiAiJHJlZnMiICItLWZpeHVwPSIgIm0iIDw8LUVPRgorCS0tZml4dXA9bWFpbnQgWgorCS0tZml4dXA9bWFzdGVyIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRjb21wX25sIC0gc3VmZml4JyAnCisJdGVzdF9naXRjb21wX25sICJicmFuY2gubWEiICIkcmVmcyIgImJyYW5jaC4iICJtYSIgIi4iIDw8LVxFT0YKKwlicmFuY2gubWFpbnQuWgorCWJyYW5jaC5tYXN0ZXIuWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdGNvbXBfbmwgLSBubyBzdWZmaXgnICcKKwl0ZXN0X2dpdGNvbXBfbmwgIm1hIiAiJHJlZnMiICIiICJtYSIgIiIgPDwtXEVPRgorCW1haW50WgorCW1hc3RlcloKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnX19naXRjb21wX25sIC0gZG9lc250IGZhaWwgYmVjYXVzZSBvZiBpbnZhbGlkIHZhcmlhYmxlIG5hbWUnICcKKwlfX2dpdGNvbXBfbmwgIiRpbnZhbGlkX3ZhcmlhYmxlX25hbWUiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X3JlbW90ZXMgLSBsaXN0IHJlbW90ZXMgZnJvbSAkR0lUX0RJUi9yZW1vdGVzIGFuZCBmcm9tIGNvbmZpZyBmaWxlJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJcmVtb3RlX2Zyb21fZmlsZV8xCisJcmVtb3RlX2Zyb21fZmlsZV8yCisJcmVtb3RlX2luX2NvbmZpZ18xCisJcmVtb3RlX2luX2NvbmZpZ18yCisJRU9GCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgLmdpdC9yZW1vdGVzIiAmJgorCW1rZGlyIC1wIC5naXQvcmVtb3RlcyAmJgorCT4uZ2l0L3JlbW90ZXMvcmVtb3RlX2Zyb21fZmlsZV8xICYmCisJPi5naXQvcmVtb3Rlcy9yZW1vdGVfZnJvbV9maWxlXzIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZW1vdGUgcmVtb3ZlIHJlbW90ZV9pbl9jb25maWdfMSIgJiYKKwlnaXQgcmVtb3RlIGFkZCByZW1vdGVfaW5fY29uZmlnXzEgZ2l0Oi8vcmVtb3RlXzEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZW1vdGUgcmVtb3ZlIHJlbW90ZV9pbl9jb25maWdfMiIgJiYKKwlnaXQgcmVtb3RlIGFkZCByZW1vdGVfaW5fY29uZmlnXzIgZ2l0Oi8vcmVtb3RlXzIgJiYKKwlfX2dpdF9yZW1vdGVzID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X2dldF9jb25maWdfdmFyaWFibGVzJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJbmFtZS0xCisJbmFtZS0yCisJRU9GCisJdGVzdF9jb25maWcgaW50ZXJlc3RpbmcubmFtZS0xIGdvb2QgJiYKKwl0ZXN0X2NvbmZpZyBpbnRlcmVzdGluZy5uYW1lLTIgZ29vZCAmJgorCXRlc3RfY29uZmlnIHN1YnNlY3Rpb24uaW50ZXJlc3RpbmcubmFtZS0zIGJhZCAmJgorCV9fZ2l0X2dldF9jb25maWdfdmFyaWFibGVzIGludGVyZXN0aW5nID5hY3R1YWwgJiYKKwl0ZXN0X2NtcCBleHBlY3QgYWN0dWFsCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ19fZ2l0X3ByZXR0eV9hbGlhc2VzJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJYXV0aG9yCisJaGFzaAorCUVPRgorCXRlc3RfY29uZmlnIHByZXR0eS5hdXRob3IgIiVhbiAlYWUiICYmCisJdGVzdF9jb25maWcgcHJldHR5Lmhhc2ggJUggJiYKKwlfX2dpdF9wcmV0dHlfYWxpYXNlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdfX2dpdF9hbGlhc2VzJyAnCisJY2F0ID5leHBlY3QgPDwtRU9GICYmCisJY2kKKwljbworCUVPRgorCXRlc3RfY29uZmlnIGFsaWFzLmNpIGNvbW1pdCAmJgorCXRlc3RfY29uZmlnIGFsaWFzLmNvIGNoZWNrb3V0ICYmCisJX19naXRfYWxpYXNlcyA+YWN0dWFsICYmCisJdGVzdF9jbXAgZXhwZWN0IGFjdHVhbAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdiYXNpYycgJworCXJ1bl9jb21wbGV0aW9uICJnaXQgIiAmJgorCSMgYnVpbHQtaW4KKwlncmVwIC1xICJeYWRkIFwkIiBvdXQgJiYKKwkjIHNjcmlwdAorCWdyZXAgLXEgIl5maWx0ZXItYnJhbmNoIFwkIiBvdXQgJiYKKwkjIHBsdW1iaW5nCisJISBncmVwIC1xICJebHMtZmlsZXMgXCQiIG91dCAmJgorCisJcnVuX2NvbXBsZXRpb24gImdpdCBmIiAmJgorCSEgZ3JlcCAtcSAtdiAiXmYiIG91dAorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdkb3VibGUgZGFzaCAiZ2l0IiBpdHNlbGYnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLSIgPDwtXEVPRgorCS0tcGFnaW5hdGUgWgorCS0tbm8tcGFnZXIgWgorCS0tZ2l0LWRpcj0KKwktLWJhcmUgWgorCS0tdmVyc2lvbiBaCisJLS1leGVjLXBhdGggWgorCS0tZXhlYy1wYXRoPQorCS0taHRtbC1wYXRoIFoKKwktLW1hbi1wYXRoIFoKKwktLWluZm8tcGF0aCBaCisJLS13b3JrLXRyZWU9CisJLS1uYW1lc3BhY2U9CisJLS1uby1yZXBsYWNlLW9iamVjdHMgWgorCS0taGVscCBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2RvdWJsZSBkYXNoICJnaXQgY2hlY2tvdXQiJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY2hlY2tvdXQgLS0iIDw8LVxFT0YKKwktLXF1aWV0IFoKKwktLW91cnMgWgorCS0tdGhlaXJzIFoKKwktLXRyYWNrIFoKKwktLW5vLXRyYWNrIFoKKwktLW1lcmdlIFoKKwktLWNvbmZsaWN0PQorCS0tb3JwaGFuIFoKKwktLXBhdGNoIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnZ2VuZXJhbCBvcHRpb25zJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS12ZXIiICItLXZlcnNpb24gIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0taGVsIiAiLS1oZWxwICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWV4ZSIgPDwtXEVPRiAmJgorCS0tZXhlYy1wYXRoIFoKKwktLWV4ZWMtcGF0aD0KKwlFT0YKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWh0bSIgIi0taHRtbC1wYXRoICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLXBhZyIgIi0tcGFnaW5hdGUgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tbm8tcCIgIi0tbm8tcGFnZXIgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tZ2l0IiAiLS1naXQtZGlyPSIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLXdvciIgIi0td29yay10cmVlPSIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLW5hbSIgIi0tbmFtZXNwYWNlPSIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWJhciIgIi0tYmFyZSAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1pbmYiICItLWluZm8tcGF0aCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1uby1yIiAiLS1uby1yZXBsYWNlLW9iamVjdHMgIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnZW5lcmFsIG9wdGlvbnMgcGx1cyBjb21tYW5kJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS12ZXJzaW9uIGNoZWNrIiAiY2hlY2tvdXQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tcGFnaW5hdGUgY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1naXQtZGlyPWZvbyBjaGVjayIgImNoZWNrb3V0ICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWJhcmUgY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS1leGVjLXBhdGg9Zm9vIGNoZWNrIiAiY2hlY2tvdXQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0taHRtbC1wYXRoIGNoZWNrIiAiY2hlY2tvdXQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tbm8tcGFnZXIgY2hlY2siICJjaGVja291dCAiICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgLS13b3JrLXRyZWU9Zm9vIGNoZWNrIiAiY2hlY2tvdXQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tbmFtZXNwYWNlPWZvbyBjaGVjayIgImNoZWNrb3V0ICIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLXBhZ2luYXRlIGNoZWNrIiAiY2hlY2tvdXQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0taW5mby1wYXRoIGNoZWNrIiAiY2hlY2tvdXQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0tbm8tcmVwbGFjZS1vYmplY3RzIGNoZWNrIiAiY2hlY2tvdXQgIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdnaXQgLS1oZWxwIGNvbXBsZXRpb24nICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCAtLWhlbHAgYWQiICJhZGQgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IC0taGVscCBjb3JlIiAiY29yZS10dXRvcmlhbCAiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NldHVwIGZvciByZWYgY29tcGxldGlvbicgJworCWVjaG8gY29udGVudCA+ZmlsZTEgJiYKKwllY2hvIG1vcmUgPmZpbGUyICYmCisJZ2l0IGFkZCAuICYmCisJZ2l0IGNvbW1pdCAtbSBvbmUgJiYKKwlnaXQgYnJhbmNoIG15YnJhbmNoICYmCisJZ2l0IHRhZyBteXRhZworJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjaGVja291dCBjb21wbGV0ZXMgcmVmIG5hbWVzJyAnCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY2hlY2tvdXQgbSIgPDwtXEVPRgorCW1hc3RlciBaCisJbXlicmFuY2ggWgorCW15dGFnIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnc2hvdyBjb21wbGV0ZXMgYWxsIHJlZnMnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBzaG93IG0iIDw8LVxFT0YKKwltYXN0ZXIgWgorCW15YnJhbmNoIFoKKwlteXRhZyBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJzxyZWY+OiBjb21wbGV0ZXMgcGF0aHMnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBzaG93IG15dGFnOmYiIDw8LVxFT0YKKwlmaWxlMSBaCisJZmlsZTIgWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wbGV0ZSB0cmVlIGZpbGVuYW1lIHdpdGggc3BhY2VzJyAnCisJZWNobyBjb250ZW50ID4ibmFtZSB3aXRoIHNwYWNlcyIgJiYKKwlnaXQgYWRkIC4gJiYKKwlnaXQgY29tbWl0IC1tIHNwYWNlcyAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IHNob3cgSEVBRDpuYW0iIDw8LVxFT0YKKwluYW1lIHdpdGggc3BhY2VzIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxldGUgdHJlZSBmaWxlbmFtZSB3aXRoIG1ldGFjaGFyYWN0ZXJzJyAnCisJZWNobyBjb250ZW50ID4ibmFtZSB3aXRoIFwke21ldGF9IiAmJgorCWdpdCBhZGQgLiAmJgorCWdpdCBjb21taXQgLW0gbWV0YSAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IHNob3cgSEVBRDpuYW0iIDw8LVxFT0YKKwluYW1lIHdpdGggJHttZXRhfSBaCisJbmFtZSB3aXRoIHNwYWNlcyBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3NlbmQtZW1haWwnICcKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBzZW5kLWVtYWlsIC0tY292IiAiLS1jb3Zlci1sZXR0ZXIgIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IHNlbmQtZW1haWwgbWEiICJtYXN0ZXIgIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdjb21wbGV0ZSBmaWxlcycgJworCWdpdCBpbml0IHRtcCAmJiBjZCB0bXAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisKKwllY2hvICJleHBlY3RlZCIgPiAuZ2l0aWdub3JlICYmCisJZWNobyAib3V0IiA+PiAuZ2l0aWdub3JlICYmCisKKwlnaXQgYWRkIC5naXRpZ25vcmUgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjb21taXQgIiAiLmdpdGlnbm9yZSIgJiYKKworCWdpdCBjb21taXQgLW0gaWdub3JlICYmCisKKwl0b3VjaCBuZXcgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBhZGQgIiAibmV3IiAmJgorCisJZ2l0IGFkZCBuZXcgJiYKKwlnaXQgY29tbWl0IC1hIC1tIG5ldyAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGFkZCAiICIiICYmCisKKwlnaXQgbXYgbmV3IG1vZGlmaWVkICYmCisJZWNobyBtb2RpZnkgPiBtb2RpZmllZCAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGFkZCAiICJtb2RpZmllZCIgJiYKKworCXRvdWNoIHVudHJhY2tlZCAmJgorCisJOiBUT0RPIC5naXRpZ25vcmUgc2hvdWxkIG5vdCBiZSBoZXJlICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgcm0gIiA8PC1cRU9GICYmCisJLmdpdGlnbm9yZQorCW1vZGlmaWVkCisJRU9GCisKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjbGVhbiAiICJ1bnRyYWNrZWQiICYmCisKKwk6IFRPRE8gLmdpdGlnbm9yZSBzaG91bGQgbm90IGJlIGhlcmUgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBtdiAiIDw8LVxFT0YgJiYKKwkuZ2l0aWdub3JlCisJbW9kaWZpZWQKKwlFT0YKKworCW1rZGlyIGRpciAmJgorCXRvdWNoIGRpci9maWxlLWluLWRpciAmJgorCWdpdCBhZGQgZGlyL2ZpbGUtaW4tZGlyICYmCisJZ2l0IGNvbW1pdCAtbSBkaXIgJiYKKworCW1rZGlyIHVudHJhY2tlZC1kaXIgJiYKKworCTogVE9ETyAuZ2l0aWdub3JlIHNob3VsZCBub3QgYmUgaGVyZSAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IG12IG1vZGlmaWVkICIgPDwtXEVPRiAmJgorCS5naXRpZ25vcmUKKwlkaXIKKwltb2RpZmllZAorCXVudHJhY2tlZAorCXVudHJhY2tlZC1kaXIKKwlFT0YKKworCXRlc3RfY29tcGxldGlvbiAiZ2l0IGNvbW1pdCAiICJtb2RpZmllZCIgJiYKKworCTogVE9ETyAuZ2l0aWdub3JlIHNob3VsZCBub3QgYmUgaGVyZSAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGxzLWZpbGVzICIgPDwtXEVPRiAmJgorCS5naXRpZ25vcmUKKwlkaXIKKwltb2RpZmllZAorCUVPRgorCisJdG91Y2ggbW9taWZpZWQgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBhZGQgbW9tIiAibW9taWZpZWQiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgImNvbXBsZXRpb24gdXNlcyA8Y21kPiBjb21wbGV0aW9uIGZvciBhbGlhczogIXNoIC1jICdnaXQgPGNtZD4gLi4uJyIgJworCXRlc3RfY29uZmlnIGFsaWFzLmNvICIhc2ggLWMgJyInIidnaXQgY2hlY2tvdXQgLi4uJyInIiciICYmCisJdGVzdF9jb21wbGV0aW9uICJnaXQgY28gbSIgPDwtXEVPRgorCW1hc3RlciBaCisJbXlicmFuY2ggWgorCW15dGFnIFoKKwlFT0YKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxldGlvbiB1c2VzIDxjbWQ+IGNvbXBsZXRpb24gZm9yIGFsaWFzOiAhZiAoKSB7IFZBUj12YWwgZ2l0IDxjbWQ+IC4uLiB9JyAnCisJdGVzdF9jb25maWcgYWxpYXMuY28gIiFmICgpIHsgVkFSPXZhbCBnaXQgY2hlY2tvdXQgLi4uIDsgfSBmIiAmJgorCXRlc3RfY29tcGxldGlvbiAiZ2l0IGNvIG0iIDw8LVxFT0YKKwltYXN0ZXIgWgorCW15YnJhbmNoIFoKKwlteXRhZyBaCisJRU9GCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ2NvbXBsZXRpb24gdXNlZCA8Y21kPiBjb21wbGV0aW9uIGZvciBhbGlhczogIWYoKSB7IDogZ2l0IDxjbWQ+IDsgLi4uIH0nICcKKwl0ZXN0X2NvbmZpZyBhbGlhcy5jbyAiIWYoKSB7IDogZ2l0IGNoZWNrb3V0IDsgaWYgLi4uIH0gZiIgJiYKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBjbyBtIiA8PC1cRU9GCisJbWFzdGVyIFoKKwlteWJyYW5jaCBaCisJbXl0YWcgWgorCUVPRgorJworCit0ZXN0X2V4cGVjdF9mYWlsdXJlICdjb21wbGV0ZSB3aXRoIHRpbGRlIGV4cGFuc2lvbicgJworCWdpdCBpbml0IHRtcCAmJiBjZCB0bXAgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImNkIC4uICYmIHJtIC1yZiB0bXAiICYmCisKKwl0b3VjaCB+L3RtcC9maWxlICYmCisKKwl0ZXN0X2NvbXBsZXRpb24gImdpdCBhZGQgfi90bXAvIiAifi90bXAvZmlsZSIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Q5OTAzLWJhc2gtcHJvbXB0LnNoIGIvdC90OTkwMy1iYXNoLXByb21wdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YjY4Nzc3Ci0tLSAvZGV2L251bGwKKysrIGIvdC90OTkwMy1iYXNoLXByb21wdC5zaApAQCAtMCwwICsxLDczMyBAQAorIyEvYmluL3NoCisjCisjIENvcHlyaWdodCAoYykgMjAxMiBTWkVERVIgR8OhYm9yCisjCisKK3Rlc3RfZGVzY3JpcHRpb249J3Rlc3QgZ2l0LXNwZWNpZmljIGJhc2ggcHJvbXB0IGZ1bmN0aW9ucycKKworLiAuL2xpYi1iYXNoLnNoCisKKy4gIiRHSVRfQlVJTERfRElSL2NvbnRyaWIvY29tcGxldGlvbi9naXQtcHJvbXB0LnNoIgorCithY3R1YWw9IiRUUkFTSF9ESVJFQ1RPUlkvYWN0dWFsIgorY19yZWQ9J1xcW1xcZVszMW1cXF0nCitjX2dyZWVuPSdcXFtcXGVbMzJtXFxdJworY19sYmx1ZT0nXFxbXFxlWzE7MzRtXFxdJworY19jbGVhcj0nXFxbXFxlWzBtXFxdJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdzZXR1cCBmb3IgcHJvbXB0IHRlc3RzJyAnCisJZ2l0IGluaXQgb3RoZXJyZXBvICYmCisJZWNobyAxID5maWxlICYmCisJZ2l0IGFkZCBmaWxlICYmCisJdGVzdF90aWNrICYmCisJZ2l0IGNvbW1pdCAtbSBpbml0aWFsICYmCisJZ2l0IHRhZyAtYSAtbSBtc2cxIHQxICYmCisJZ2l0IGNoZWNrb3V0IC1iIGIxICYmCisJZWNobyAyID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIGIxIiBmaWxlICYmCisJZWNobyAzID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAidGhpcmQgYjEiIGZpbGUgJiYKKwlnaXQgdGFnIC1hIC1tIG1zZzIgdDIgJiYKKwlnaXQgY2hlY2tvdXQgLWIgYjIgbWFzdGVyICYmCisJZWNobyAwID5maWxlICYmCisJZ2l0IGNvbW1pdCAtbSAic2Vjb25kIGIyIiBmaWxlICYmCisJZWNobyAwMCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gImFub3RoZXIgYjIiIGZpbGUgJiYKKwllY2hvIDAwMCA+ZmlsZSAmJgorCWdpdCBjb21taXQgLW0gInlldCBhbm90aGVyIGIyIiBmaWxlICYmCisJbWtkaXIgaWdub3JlZF9kaXIgJiYKKwllY2hvICJpZ25vcmVkX2Rpci8iID4+LmdpdGlnbm9yZSAmJgorCWdpdCBjaGVja291dCBtYXN0ZXIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYnJhbmNoIG5hbWUnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyBTWU1MSU5LUyAncHJvbXB0IC0gYnJhbmNoIG5hbWUgLSBzeW1saW5rIHN5bXJlZicgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJdGVzdF9jb25maWcgY29yZS5wcmVmZXJTeW1saW5rUmVmcyB0cnVlICYmCisJZ2l0IGNoZWNrb3V0IG1hc3RlciAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVuYm9ybiBicmFuY2gnICcKKwlwcmludGYgIiAodW5ib3JuKSIgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IC0tb3JwaGFuIHVuYm9ybiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCityZXBvX3dpdGhfbmV3bGluZT0ncmVwbword2l0aAorbmV3bGluZScKKworaWYgbWtkaXIgIiRyZXBvX3dpdGhfbmV3bGluZSIgMj4vZGV2L251bGwKK3RoZW4KKwl0ZXN0X3NldF9wcmVyZXEgRlVOTllOQU1FUworZWxzZQorCXNheSAnWW91ciBmaWxlc3lzdGVtIGRvZXMgbm90IGFsbG93IG5ld2xpbmVzIGluIGZpbGVuYW1lcy4nCitmaQorCit0ZXN0X2V4cGVjdF9zdWNjZXNzIEZVTk5ZTkFNRVMgJ3Byb21wdCAtIHdpdGggbmV3bGluZSBpbiBwYXRoJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCWdpdCBpbml0ICIkcmVwb193aXRoX25ld2xpbmUiICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJybSAtcmYgXCIkcmVwb193aXRoX25ld2xpbmVcIiIgJiYKKwlta2RpciAiJHJlcG9fd2l0aF9uZXdsaW5lIi9zdWJkaXIgJiYKKwkoCisJCWNkICIkcmVwb193aXRoX25ld2xpbmUvc3ViZGlyIiAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGV0YWNoZWQgaGVhZCcgJworCXByaW50ZiAiICgoJXMuLi4pKSIgJChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIgLS1hYmJyZXY9MTMgYjFeKSA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NvbmZpZyBjb3JlLmFiYnJldiAxMyAmJgorCWdpdCBjaGVja291dCBiMV4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGVzY3JpYmUgZGV0YWNoZWQgaGVhZCAtIGNvbnRhaW5zJyAnCisJcHJpbnRmICIgKCh0Mn4xKSkiID5leHBlY3RlZCAmJgorCWdpdCBjaGVja291dCBiMV4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJKAorCQlHSVRfUFMxX0RFU0NSSUJFX1NUWUxFPWNvbnRhaW5zICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkZXNjcmliZSBkZXRhY2hlZCBoZWFkIC0gYnJhbmNoJyAnCisJcHJpbnRmICIgKChiMX4xKSkiID5leHBlY3RlZCAmJgorCWdpdCBjaGVja291dCBiMV4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJKAorCQlHSVRfUFMxX0RFU0NSSUJFX1NUWUxFPWJyYW5jaCAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGVzY3JpYmUgZGV0YWNoZWQgaGVhZCAtIGRlc2NyaWJlJyAnCisJcHJpbnRmICIgKCh0MS0xLWclcykpIiAkKGdpdCBsb2cgLTEgLS1mb3JtYXQ9IiVoIiBiMV4pID5leHBlY3RlZCAmJgorCWdpdCBjaGVja291dCBiMV4gJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJKAorCQlHSVRfUFMxX0RFU0NSSUJFX1NUWUxFPWRlc2NyaWJlICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkZXNjcmliZSBkZXRhY2hlZCBoZWFkIC0gZGVmYXVsdCcgJworCXByaW50ZiAiICgodDIpKSIgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IC0tZGV0YWNoIGIxICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY2hlY2tvdXQgbWFzdGVyIiAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGluc2lkZSAuZ2l0IGRpcmVjdG9yeScgJworCXByaW50ZiAiIChHSVRfRElSISkiID5leHBlY3RlZCAmJgorCSgKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGVlcCBpbnNpZGUgLmdpdCBkaXJlY3RvcnknICcKKwlwcmludGYgIiAoR0lUX0RJUiEpIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIC5naXQvcmVmcy9oZWFkcyAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaW5zaWRlIGJhcmUgcmVwb3NpdG9yeScgJworCXByaW50ZiAiIChCQVJFOm1hc3RlcikiID5leHBlY3RlZCAmJgorCWdpdCBpbml0IC0tYmFyZSBiYXJlLmdpdCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIGJhcmUuZ2l0IiAmJgorCSgKKwkJY2QgYmFyZS5naXQgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGludGVyYWN0aXZlIHJlYmFzZScgJworCXByaW50ZiAiIChiMXxSRUJBU0UtaSAyLzMpIiA+ZXhwZWN0ZWQgJiYKKwl3cml0ZV9zY3JpcHQgZmFrZV9lZGl0b3Iuc2ggPDwtXEVPRiAmJgorCQllY2hvICJleGVjIGVjaG8iID4iJDEiCisJCWVjaG8gImVkaXQgJChnaXQgbG9nIC0xIC0tZm9ybWF0PSIlaCIpIiA+PiIkMSIKKwkJZWNobyAiZXhlYyBlY2hvIiA+PiIkMSIKKwlFT0YKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1mIGZha2VfZWRpdG9yLnNoIiAmJgorCXRlc3Rfc2V0X2VkaXRvciAiJFRSQVNIX0RJUkVDVE9SWS9mYWtlX2VkaXRvci5zaCIgJiYKKwlnaXQgY2hlY2tvdXQgYjEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJZ2l0IHJlYmFzZSAtaSBIRUFEXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHJlYmFzZSBtZXJnZScgJworCXByaW50ZiAiIChiMnxSRUJBU0UtbSAxLzMpIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgYjIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSAtLW1lcmdlIGIxIGIyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmViYXNlIC0tYWJvcnQiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gcmViYXNlJyAnCisJcHJpbnRmICIgKGIyfFJFQkFTRSAxLzMpIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgYjIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IHJlYmFzZSBiMSBiMiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlYmFzZSAtLWFib3J0IiAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIG1lcmdlJyAnCisJcHJpbnRmICIgKGIxfE1FUkdJTkcpIiA+ZXhwZWN0ZWQgJiYKKwlnaXQgY2hlY2tvdXQgYjEgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBjaGVja291dCBtYXN0ZXIiICYmCisJdGVzdF9tdXN0X2ZhaWwgZ2l0IG1lcmdlIGIyICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCV9fZ2l0X3BzMSA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGNoZXJyeS1waWNrJyAnCisJcHJpbnRmICIgKG1hc3RlcnxDSEVSUlktUElDS0lORykiID5leHBlY3RlZCAmJgorCXRlc3RfbXVzdF9mYWlsIGdpdCBjaGVycnktcGljayBiMSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlfX2dpdF9wczEgPiIkYWN0dWFsIiAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiaXNlY3QnICcKKwlwcmludGYgIiAobWFzdGVyfEJJU0VDVElORykiID5leHBlY3RlZCAmJgorCWdpdCBiaXNlY3Qgc3RhcnQgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCBiaXNlY3QgcmVzZXQiICYmCisJX19naXRfcHMxID4iJGFjdHVhbCIgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGNsZWFuJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gZGlydHkgd29ya3RyZWUnICcKKwlwcmludGYgIiAobWFzdGVyICopIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBkaXJ0eSBpbmRleCcgJworCXByaW50ZiAiIChtYXN0ZXIgKykiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwlnaXQgYWRkIC11ICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBkaXJ0eSBpbmRleCBhbmQgd29ya3RyZWUnICcKKwlwcmludGYgIiAobWFzdGVyICorKSIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkgaW5kZXgiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBhZGQgLXUgJiYKKwllY2hvICJkaXJ0eSB3b3JrdHJlZSIgPmZpbGUgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGJlZm9yZSByb290IGNvbW1pdCcgJworCXByaW50ZiAiIChtYXN0ZXIgIykiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCWNkIG90aGVycmVwbyAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIHNoZWxsIHZhcmlhYmxlIHVuc2V0IHdpdGggY29uZmlnIGRpc2FibGVkJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X2NvbmZpZyBiYXNoLnNob3dEaXJ0eVN0YXRlIGZhbHNlICYmCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9QUzFfU0hPV0RJUlRZU1RBVEUgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSB1bnNldCB3aXRoIGNvbmZpZyBlbmFibGVkJyAnCisJcHJpbnRmICIgKG1hc3RlcikiID5leHBlY3RlZCAmJgorCWVjaG8gImRpcnR5IiA+ZmlsZSAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHJlc2V0IC0taGFyZCIgJiYKKwl0ZXN0X2NvbmZpZyBiYXNoLnNob3dEaXJ0eVN0YXRlIHRydWUgJiYKKwkoCisJCXNhbmVfdW5zZXQgR0lUX1BTMV9TSE9XRElSVFlTVEFURSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIHNoZWxsIHZhcmlhYmxlIHNldCB3aXRoIGNvbmZpZyBkaXNhYmxlZCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJdGVzdF9jb25maWcgYmFzaC5zaG93RGlydHlTdGF0ZSBmYWxzZSAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gc2hlbGwgdmFyaWFibGUgc2V0IHdpdGggY29uZmlnIGVuYWJsZWQnICcKKwlwcmludGYgIiAobWFzdGVyICopIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJdGVzdF9jb25maWcgYmFzaC5zaG93RGlydHlTdGF0ZSB0cnVlICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBub3Qgc2hvd24gaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCisJcHJpbnRmICIgKEdJVF9ESVIhKSIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCSgKKwkJR0lUX1BTMV9TSE9XRElSVFlTVEFURT15ICYmCisJCWNkIC5naXQgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHN0YXNoIHN0YXR1cyBpbmRpY2F0b3IgLSBubyBzdGFzaCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1NUQVNIU1RBVEU9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gc3Rhc2ggc3RhdHVzIGluZGljYXRvciAtIHN0YXNoJyAnCisJcHJpbnRmICIgKG1hc3RlciAkKSIgPmV4cGVjdGVkICYmCisJZWNobyAyID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgc3Rhc2ggZHJvcCIgJiYKKwlnaXQgcGFjay1yZWZzIC0tYWxsICYmCisJKAorCQlHSVRfUFMxX1NIT1dTVEFTSFNUQVRFPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHN0YXNoIHN0YXR1cyBpbmRpY2F0b3IgLSBub3Qgc2hvd24gaW5zaWRlIC5naXQgZGlyZWN0b3J5JyAnCisJcHJpbnRmICIgKEdJVF9ESVIhKSIgPmV4cGVjdGVkICYmCisJZWNobyAyID5maWxlICYmCisJZ2l0IHN0YXNoICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgc3Rhc2ggZHJvcCIgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1NUQVNIU1RBVEU9eSAmJgorCQljZCAuZ2l0ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIG5vIHVudHJhY2tlZCBmaWxlcycgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKKwkJY2Qgb3RoZXJyZXBvICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIHVudHJhY2tlZCBmaWxlcycgJworCXByaW50ZiAiIChtYXN0ZXIgJSUpIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gZW1wdHkgdW50cmFja2VkIGRpcicgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwlta2RpciBvdGhlcnJlcG8vdW50cmFja2VkLWRpciAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAicm0gLXJmIG90aGVycmVwby91bnRyYWNrZWQtZGlyIiAmJgorCSgKKwkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgorCQljZCBvdGhlcnJlcG8gJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gbm9uLWVtcHR5IHVudHJhY2tlZCBkaXInICcKKwlwcmludGYgIiAobWFzdGVyICUlKSIgPmV4cGVjdGVkICYmCisJbWtkaXIgb3RoZXJyZXBvL3VudHJhY2tlZC1kaXIgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgInJtIC1yZiBvdGhlcnJlcG8vdW50cmFja2VkLWRpciIgJiYKKwk+b3RoZXJyZXBvL3VudHJhY2tlZC1kaXIvdW50cmFja2VkLWZpbGUgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKKwkJY2Qgb3RoZXJyZXBvICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIHVudHJhY2tlZCBmaWxlcyBvdXRzaWRlIGN3ZCcgJworCXByaW50ZiAiIChtYXN0ZXIgJSUpIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCW1rZGlyIC1wIGlnbm9yZWRfZGlyICYmCisJCWNkIGlnbm9yZWRfZGlyICYmCisJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gc2hlbGwgdmFyaWFibGUgdW5zZXQgd2l0aCBjb25maWcgZGlzYWJsZWQnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJdGVzdF9jb25maWcgYmFzaC5zaG93VW50cmFja2VkRmlsZXMgZmFsc2UgJiYKKwkoCisJCXNhbmVfdW5zZXQgR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVMgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHVudHJhY2tlZCBmaWxlcyBzdGF0dXMgaW5kaWNhdG9yIC0gc2hlbGwgdmFyaWFibGUgdW5zZXQgd2l0aCBjb25maWcgZW5hYmxlZCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NvbmZpZyBiYXNoLnNob3dVbnRyYWNrZWRGaWxlcyB0cnVlICYmCisJKAorCQlzYW5lX3Vuc2V0IEdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIHNoZWxsIHZhcmlhYmxlIHNldCB3aXRoIGNvbmZpZyBkaXNhYmxlZCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NvbmZpZyBiYXNoLnNob3dVbnRyYWNrZWRGaWxlcyBmYWxzZSAmJgorCSgKKwkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3IgLSBzaGVsbCB2YXJpYWJsZSBzZXQgd2l0aCBjb25maWcgZW5hYmxlZCcgJworCXByaW50ZiAiIChtYXN0ZXIgJSUpIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NvbmZpZyBiYXNoLnNob3dVbnRyYWNrZWRGaWxlcyB0cnVlICYmCisJKAorCQlHSVRfUFMxX1NIT1dVTlRSQUNLRURGSUxFUz15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB1bnRyYWNrZWQgZmlsZXMgc3RhdHVzIGluZGljYXRvciAtIG5vdCBzaG93biBpbnNpZGUgLmdpdCBkaXJlY3RvcnknICcKKwlwcmludGYgIiAoR0lUX0RJUiEpIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfU0hPV1VOVFJBQ0tFREZJTEVTPXkgJiYKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gZm9ybWF0IHN0cmluZyBzdGFydGluZyB3aXRoIGRhc2gnICcKKwlwcmludGYgLS0gIi1tYXN0ZXIiID5leHBlY3RlZCAmJgorCV9fZ2l0X3BzMSAiLSVzIiA+IiRhY3R1YWwiICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIHBjIG1vZGUnICcKKwlwcmludGYgIkJFRk9SRTogKFwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0pOkFGVEVSXFxubWFzdGVyIiA+ZXhwZWN0ZWQgJiYKKwlwcmludGYgIiIgPmV4cGVjdGVkX291dHB1dCAmJgorCSgKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiA+IiRhY3R1YWwiICYmCisJCXRlc3RfY21wIGV4cGVjdGVkX291dHB1dCAiJGFjdHVhbCIgJiYKKwkJcHJpbnRmICIlc1xcbiVzIiAiJFBTMSIgIiR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmFzaCBjb2xvciBwYyBtb2RlIC0gYnJhbmNoIG5hbWUnICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1cJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9JHtjX2NsZWFyfSk6QUZURVJcXG5tYXN0ZXIiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgPiIkYWN0dWFsIgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBkZXRhY2hlZCBoZWFkJyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfcmVkfVwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0ke2NfY2xlYXJ9KTpBRlRFUlxcbiglcy4uLikiICQoZ2l0IGxvZyAtMSAtLWZvcm1hdD0iJWgiIGIxXikgPmV4cGVjdGVkICYmCisJZ2l0IGNoZWNrb3V0IGIxXiAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IGNoZWNrb3V0IG1hc3RlciIgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0NPTE9SSElOVFM9eSAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXNcXG4lcyIgIiRQUzEiICIke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0iID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIGRpcnR5IHN0YXR1cyBpbmRpY2F0b3IgLSBkaXJ0eSB3b3JrdHJlZScgJworCXByaW50ZiAiQkVGT1JFOiAoJHtjX2dyZWVufVwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0ke2NfY2xlYXJ9ICR7Y19yZWR9KiR7Y19jbGVhcn0pOkFGVEVSXFxubWFzdGVyIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlc1xcbiVzIiAiJFBTMSIgIiR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmFzaCBjb2xvciBwYyBtb2RlIC0gZGlydHkgc3RhdHVzIGluZGljYXRvciAtIGRpcnR5IGluZGV4JyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59XCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSR7Y19jbGVhcn0gJHtjX2dyZWVufSske2NfY2xlYXJ9KTpBRlRFUlxcbm1hc3RlciIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBhZGQgLXUgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0RJUlRZU1RBVEU9eSAmJgorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gZGlydHkgaW5kZXggYW5kIHdvcmt0cmVlJyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59XCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSR7Y19jbGVhcn0gJHtjX3JlZH0qJHtjX2dyZWVufSske2NfY2xlYXJ9KTpBRlRFUlxcbm1hc3RlciIgPmV4cGVjdGVkICYmCisJZWNobyAiZGlydHkgaW5kZXgiID5maWxlICYmCisJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgcmVzZXQgLS1oYXJkIiAmJgorCWdpdCBhZGQgLXUgJiYKKwllY2hvICJkaXJ0eSB3b3JrdHJlZSIgPmZpbGUgJiYKKwkoCisJCUdJVF9QUzFfU0hPV0NPTE9SSElOVFM9eSAmJgorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBkaXJ0eSBzdGF0dXMgaW5kaWNhdG9yIC0gYmVmb3JlIHJvb3QgY29tbWl0JyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59XCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSR7Y19jbGVhcn0gJHtjX2dyZWVufSMke2NfY2xlYXJ9KTpBRlRFUlxcbm1hc3RlciIgPmV4cGVjdGVkICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCWNkIG90aGVycmVwbyAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXNcXG4lcyIgIiRQUzEiICIke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0iID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGJhc2ggY29sb3IgcGMgbW9kZSAtIGluc2lkZSAuZ2l0IGRpcmVjdG9yeScgJworCXByaW50ZiAiQkVGT1JFOiAoJHtjX2dyZWVufVwke19fZ2l0X3BzMV9icmFuY2hfbmFtZX0ke2NfY2xlYXJ9KTpBRlRFUlxcbkdJVF9ESVIhIiA+ZXhwZWN0ZWQgJiYKKwllY2hvICJkaXJ0eSIgPmZpbGUgJiYKKwl0ZXN0X3doZW5fZmluaXNoZWQgImdpdCByZXNldCAtLWhhcmQiICYmCisJKAorCQlHSVRfUFMxX1NIT1dESVJUWVNUQVRFPXkgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCWNkIC5naXQgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBiYXNoIGNvbG9yIHBjIG1vZGUgLSBzdGFzaCBzdGF0dXMgaW5kaWNhdG9yJyAnCisJcHJpbnRmICJCRUZPUkU6ICgke2NfZ3JlZW59XCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSR7Y19jbGVhcn0gJHtjX2xibHVlfVwkJHtjX2NsZWFyfSk6QUZURVJcXG5tYXN0ZXIiID5leHBlY3RlZCAmJgorCWVjaG8gMiA+ZmlsZSAmJgorCWdpdCBzdGFzaCAmJgorCXRlc3Rfd2hlbl9maW5pc2hlZCAiZ2l0IHN0YXNoIGRyb3AiICYmCisJKAorCQlHSVRfUFMxX1NIT1dTVEFTSFNUQVRFPXkgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlc1xcbiVzIiAiJFBTMSIgIiR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gYmFzaCBjb2xvciBwYyBtb2RlIC0gdW50cmFja2VkIGZpbGVzIHN0YXR1cyBpbmRpY2F0b3InICcKKwlwcmludGYgIkJFRk9SRTogKCR7Y19ncmVlbn1cJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9JHtjX2NsZWFyfSAke2NfcmVkfSUlJHtjX2NsZWFyfSk6QUZURVJcXG5tYXN0ZXIiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9TSE9XVU5UUkFDS0VERklMRVM9eSAmJgorCQlHSVRfUFMxX1NIT1dDT0xPUkhJTlRTPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzXFxuJXMiICIkUFMxIiAiJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9IiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSB6c2ggY29sb3IgcGMgbW9kZScgJworCXByaW50ZiAiQkVGT1JFOiAoJSVGe2dyZWVufW1hc3RlciUlZik6QUZURVIiID5leHBlY3RlZCAmJgorCSgKKwkJWlNIX1ZFUlNJT049NS4wLjAgJiYKKwkJR0lUX1BTMV9TSE9XQ09MT1JISU5UUz15ICYmCisJCV9fZ2l0X3BzMSAiQkVGT1JFOiIgIjpBRlRFUiIgJiYKKwkJcHJpbnRmICIlcyIgIiRQUzEiID4iJGFjdHVhbCIKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGhpZGUgaWYgcHdkIGlnbm9yZWQgLSBlbnYgdmFyIHVuc2V0LCBjb25maWcgZGlzYWJsZWQnICcKKwlwcmludGYgIiAobWFzdGVyKSIgPmV4cGVjdGVkICYmCisJdGVzdF9jb25maWcgYmFzaC5oaWRlSWZQd2RJZ25vcmVkIGZhbHNlICYmCisJKAorCQljZCBpZ25vcmVkX2RpciAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaGlkZSBpZiBwd2QgaWdub3JlZCAtIGVudiB2YXIgdW5zZXQsIGNvbmZpZyBkaXNhYmxlZCwgcGMgbW9kZScgJworCXByaW50ZiAiQkVGT1JFOiAoXCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSk6QUZURVIiID5leHBlY3RlZCAmJgorCXRlc3RfY29uZmlnIGJhc2guaGlkZUlmUHdkSWdub3JlZCBmYWxzZSAmJgorCSgKKwkJY2QgaWdub3JlZF9kaXIgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzIiAiJFBTMSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaGlkZSBpZiBwd2QgaWdub3JlZCAtIGVudiB2YXIgdW5zZXQsIGNvbmZpZyB1bnNldCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCWNkIGlnbm9yZWRfZGlyICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBoaWRlIGlmIHB3ZCBpZ25vcmVkIC0gZW52IHZhciB1bnNldCwgY29uZmlnIHVuc2V0LCBwYyBtb2RlJyAnCisJcHJpbnRmICJCRUZPUkU6IChcJHtfX2dpdF9wczFfYnJhbmNoX25hbWV9KTpBRlRFUiIgPmV4cGVjdGVkICYmCisJKAorCQljZCBpZ25vcmVkX2RpciAmJgorCQlfX2dpdF9wczEgIkJFRk9SRToiICI6QUZURVIiICYmCisJCXByaW50ZiAiJXMiICIkUFMxIiA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBoaWRlIGlmIHB3ZCBpZ25vcmVkIC0gZW52IHZhciBzZXQsIGNvbmZpZyBkaXNhYmxlZCcgJworCXByaW50ZiAiIChtYXN0ZXIpIiA+ZXhwZWN0ZWQgJiYKKwl0ZXN0X2NvbmZpZyBiYXNoLmhpZGVJZlB3ZElnbm9yZWQgZmFsc2UgJiYKKwkoCisJCWNkIGlnbm9yZWRfZGlyICYmCisJCUdJVF9QUzFfSElERV9JRl9QV0RfSUdOT1JFRD15ICYmCisJCV9fZ2l0X3BzMSA+IiRhY3R1YWwiCisJKSAmJgorCXRlc3RfY21wIGV4cGVjdGVkICIkYWN0dWFsIgorJworCit0ZXN0X2V4cGVjdF9zdWNjZXNzICdwcm9tcHQgLSBoaWRlIGlmIHB3ZCBpZ25vcmVkIC0gZW52IHZhciBzZXQsIGNvbmZpZyBkaXNhYmxlZCwgcGMgbW9kZScgJworCXByaW50ZiAiQkVGT1JFOiAoXCR7X19naXRfcHMxX2JyYW5jaF9uYW1lfSk6QUZURVIiID5leHBlY3RlZCAmJgorCXRlc3RfY29uZmlnIGJhc2guaGlkZUlmUHdkSWdub3JlZCBmYWxzZSAmJgorCSgKKwkJY2QgaWdub3JlZF9kaXIgJiYKKwkJR0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVEPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzIiAiJFBTMSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaGlkZSBpZiBwd2QgaWdub3JlZCAtIGVudiB2YXIgc2V0LCBjb25maWcgdW5zZXQnICcKKwlwcmludGYgIiIgPmV4cGVjdGVkICYmCisJKAorCQljZCBpZ25vcmVkX2RpciAmJgorCQlHSVRfUFMxX0hJREVfSUZfUFdEX0lHTk9SRUQ9eSAmJgorCQlfX2dpdF9wczEgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaGlkZSBpZiBwd2QgaWdub3JlZCAtIGVudiB2YXIgc2V0LCBjb25maWcgdW5zZXQsIHBjIG1vZGUnICcKKwlwcmludGYgIkJFRk9SRTo6QUZURVIiID5leHBlY3RlZCAmJgorCSgKKwkJY2QgaWdub3JlZF9kaXIgJiYKKwkJR0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVEPXkgJiYKKwkJX19naXRfcHMxICJCRUZPUkU6IiAiOkFGVEVSIiAmJgorCQlwcmludGYgIiVzIiAiJFBTMSIgPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvbXB0IC0gaGlkZSBpZiBwd2QgaWdub3JlZCAtIGluc2lkZSBnaXRkaXIgKHN0ZG91dCknICcKKwlwcmludGYgIiAoR0lUX0RJUiEpIiA+ZXhwZWN0ZWQgJiYKKwkoCisJCUdJVF9QUzFfSElERV9JRl9QV0RfSUdOT1JFRD15ICYmCisJCWNkIC5naXQgJiYKKwkJX19naXRfcHMxID4iJGFjdHVhbCIgMj4vZGV2L251bGwKKwkpICYmCisJdGVzdF9jbXAgZXhwZWN0ZWQgIiRhY3R1YWwiCisnCisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgJ3Byb21wdCAtIGhpZGUgaWYgcHdkIGlnbm9yZWQgLSBpbnNpZGUgZ2l0ZGlyIChzdGRlcnIpJyAnCisJcHJpbnRmICIiID5leHBlY3RlZCAmJgorCSgKKwkJR0lUX1BTMV9ISURFX0lGX1BXRF9JR05PUkVEPXkgJiYKKwkJY2QgLmdpdCAmJgorCQlfX2dpdF9wczEgPi9kZXYvbnVsbCAyPiIkYWN0dWFsIgorCSkgJiYKKwl0ZXN0X2NtcCBleHBlY3RlZCAiJGFjdHVhbCIKKycKKwordGVzdF9kb25lCmRpZmYgLS1naXQgYS90L3Rlc3QtYmluYXJ5LTEucG5nIGIvdC90ZXN0LWJpbmFyeS0xLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE4MWQxCi0tLSAvZGV2L251bGwKKysrIGIvdC90ZXN0LWJpbmFyeS0xLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Rlc3QtYmluYXJ5LTIucG5nIGIvdC90ZXN0LWJpbmFyeS0yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzIyY2NiCi0tLSAvZGV2L251bGwKKysrIGIvdC90ZXN0LWJpbmFyeS0yLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaCBiL3QvdGVzdC1saWItZnVuY3Rpb25zLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZmZiOGIKLS0tIC9kZXYvbnVsbAorKysgYi90L3Rlc3QtbGliLWZ1bmN0aW9ucy5zaApAQCAtMCwwICsxLDkxMyBAQAorIyBMaWJyYXJ5IG9mIGZ1bmN0aW9ucyBzaGFyZWQgYnkgYWxsIHRlc3RzIHNjcmlwdHMsIGluY2x1ZGVkIGJ5CisjIHRlc3QtbGliLnNoLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvIC4KKworIyBUaGUgc2VtYW50aWNzIG9mIHRoZSBlZGl0b3IgdmFyaWFibGVzIGFyZSB0aGF0IG9mIGludm9raW5nCisjIHNoIC1jICIkRURJVE9SIFwiJEBcIiIgZmlsZXMgLi4uCisjCisjIElmIG91ciB0cmFzaCBkaXJlY3RvcnkgY29udGFpbnMgc2hlbGwgbWV0YWNoYXJhY3RlcnMsIHRoZXkgd2lsbCBiZQorIyBpbnRlcnByZXRlZCBpZiB3ZSBqdXN0IHNldCAkRURJVE9SIGRpcmVjdGx5LCBzbyBkbyBhIGxpdHRsZSBkYW5jZSB3aXRoCisjIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byB3b3JrIGFyb3VuZCB0aGlzLgorIworIyBJbiBwYXJ0aWN1bGFyLCBxdW90aW5nIGlzbid0IGVub3VnaCwgYXMgdGhlIHBhdGggbWF5IGNvbnRhaW4gdGhlIHNhbWUgcXVvdGUKKyMgdGhhdCB3ZSdyZSB1c2luZy4KK3Rlc3Rfc2V0X2VkaXRvciAoKSB7CisJRkFLRV9FRElUT1I9IiQxIgorCWV4cG9ydCBGQUtFX0VESVRPUgorCUVESVRPUj0nIiRGQUtFX0VESVRPUiInCisJZXhwb3J0IEVESVRPUgorfQorCit0ZXN0X3NldF9pbmRleF92ZXJzaW9uICgpIHsKKyAgICBHSVRfSU5ERVhfVkVSU0lPTj0iJDEiCisgICAgZXhwb3J0IEdJVF9JTkRFWF9WRVJTSU9OCit9CisKK3Rlc3RfZGVjb2RlX2NvbG9yICgpIHsKKwlhd2sgJworCQlmdW5jdGlvbiBuYW1lKG4pIHsKKwkJCWlmIChuID09IDApIHJldHVybiAiUkVTRVQiOworCQkJaWYgKG4gPT0gMSkgcmV0dXJuICJCT0xEIjsKKwkJCWlmIChuID09IDMwKSByZXR1cm4gIkJMQUNLIjsKKwkJCWlmIChuID09IDMxKSByZXR1cm4gIlJFRCI7CisJCQlpZiAobiA9PSAzMikgcmV0dXJuICJHUkVFTiI7CisJCQlpZiAobiA9PSAzMykgcmV0dXJuICJZRUxMT1ciOworCQkJaWYgKG4gPT0gMzQpIHJldHVybiAiQkxVRSI7CisJCQlpZiAobiA9PSAzNSkgcmV0dXJuICJNQUdFTlRBIjsKKwkJCWlmIChuID09IDM2KSByZXR1cm4gIkNZQU4iOworCQkJaWYgKG4gPT0gMzcpIHJldHVybiAiV0hJVEUiOworCQkJaWYgKG4gPT0gNDApIHJldHVybiAiQkxBQ0siOworCQkJaWYgKG4gPT0gNDEpIHJldHVybiAiQlJFRCI7CisJCQlpZiAobiA9PSA0MikgcmV0dXJuICJCR1JFRU4iOworCQkJaWYgKG4gPT0gNDMpIHJldHVybiAiQllFTExPVyI7CisJCQlpZiAobiA9PSA0NCkgcmV0dXJuICJCQkxVRSI7CisJCQlpZiAobiA9PSA0NSkgcmV0dXJuICJCTUFHRU5UQSI7CisJCQlpZiAobiA9PSA0NikgcmV0dXJuICJCQ1lBTiI7CisJCQlpZiAobiA9PSA0NykgcmV0dXJuICJCV0hJVEUiOworCQl9CisJCXsKKwkJCXdoaWxlIChtYXRjaCgkMCwgL1wwMzNcW1swLTk7XSptLykgIT0gMCkgeworCQkJCXByaW50ZiAiJXM8Iiwgc3Vic3RyKCQwLCAxLCBSU1RBUlQtMSk7CisJCQkJY29kZXMgPSBzdWJzdHIoJDAsIFJTVEFSVCsyLCBSTEVOR1RILTMpOworCQkJCWlmIChsZW5ndGgoY29kZXMpID09IDApCisJCQkJCXByaW50ZiAiJXMiLCBuYW1lKDApCisJCQkJZWxzZSB7CisJCQkJCW4gPSBzcGxpdChjb2RlcywgYXJ5LCAiOyIpOworCQkJCQlzZXAgPSAiIjsKKwkJCQkJZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKKwkJCQkJCXByaW50ZiAiJXMlcyIsIHNlcCwgbmFtZShhcnlbaV0pOworCQkJCQkJc2VwID0gIjsiCisJCQkJCX0KKwkJCQl9CisJCQkJcHJpbnRmICI+IjsKKwkJCQkkMCA9IHN1YnN0cigkMCwgUlNUQVJUICsgUkxFTkdUSCwgbGVuZ3RoKCQwKSAtIFJTVEFSVCAtIFJMRU5HVEggKyAxKTsKKwkJCX0KKwkJCXByaW50CisJCX0KKwknCit9CisKK251bF90b19xICgpIHsKKwlwZXJsIC1wZSAneS9cMDAwL1EvJworfQorCitxX3RvX251bCAoKSB7CisJcGVybCAtcGUgJ3kvUS9cMDAwLycKK30KKworcV90b19jciAoKSB7CisJdHIgUSAnXDAxNScKK30KKworcV90b190YWIgKCkgeworCXRyIFEgJ1wwMTEnCit9CisKK3F6X3RvX3RhYl9zcGFjZSAoKSB7CisJdHIgUVogJ1wwMTFcMDQwJworfQorCithcHBlbmRfY3IgKCkgeworCXNlZCAtZSAncy8kL1EvJyB8IHRyIFEgJ1wwMTUnCit9CisKK3JlbW92ZV9jciAoKSB7CisJdHIgJ1wwMTUnIFEgfCBzZWQgLWUgJ3MvUSQvLycKK30KKworIyBJbiBzb21lIGJvdXJuZSBzaGVsbCBpbXBsZW1lbnRhdGlvbnMsIHRoZSAidW5zZXQiIGJ1aWx0aW4gcmV0dXJucworIyBub256ZXJvIHN0YXR1cyB3aGVuIGEgdmFyaWFibGUgdG8gYmUgdW5zZXQgd2FzIG5vdCBzZXQgaW4gdGhlIGZpcnN0CisjIHBsYWNlLgorIworIyBVc2Ugc2FuZV91bnNldCB3aGVuIHRoYXQgc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGFuIGVycm9yLgorCitzYW5lX3Vuc2V0ICgpIHsKKwl1bnNldCAiJEAiCisJcmV0dXJuIDAKK30KKwordGVzdF90aWNrICgpIHsKKwlpZiB0ZXN0IC16ICIke3Rlc3RfdGljaytzZXR9IgorCXRoZW4KKwkJdGVzdF90aWNrPTExMTI5MTE5OTMKKwllbHNlCisJCXRlc3RfdGljaz0kKCgkdGVzdF90aWNrICsgNjApKQorCWZpCisJR0lUX0NPTU1JVFRFUl9EQVRFPSIkdGVzdF90aWNrIC0wNzAwIgorCUdJVF9BVVRIT1JfREFURT0iJHRlc3RfdGljayAtMDcwMCIKKwlleHBvcnQgR0lUX0NPTU1JVFRFUl9EQVRFIEdJVF9BVVRIT1JfREFURQorfQorCisjIFN0b3AgZXhlY3V0aW9uIGFuZCBzdGFydCBhIHNoZWxsLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGVidWdnaW5nIHRlc3RzIGFuZAorIyBvbmx5IG1ha2VzIHNlbnNlIHRvZ2V0aGVyIHdpdGggIi12Ii4KKyMKKyMgQmUgc3VyZSB0byByZW1vdmUgYWxsIGludm9jYXRpb25zIG9mIHRoaXMgY29tbWFuZCBiZWZvcmUgc3VibWl0dGluZy4KKwordGVzdF9wYXVzZSAoKSB7CisJaWYgdGVzdCAiJHZlcmJvc2UiID0gdDsgdGhlbgorCQkiJFNIRUxMX1BBVEgiIDwmNiA+JjMgMj4mNAorCWVsc2UKKwkJZXJyb3IgPiY1ICJ0ZXN0X3BhdXNlIHJlcXVpcmVzIC0tdmVyYm9zZSIKKwlmaQorfQorCisjIENhbGwgdGVzdF9jb21taXQgd2l0aCB0aGUgYXJndW1lbnRzICI8bWVzc2FnZT4gWzxmaWxlPiBbPGNvbnRlbnRzPiBbPHRhZz5dXV0iCisjCisjIFRoaXMgd2lsbCBjb21taXQgYSBmaWxlIHdpdGggdGhlIGdpdmVuIGNvbnRlbnRzIGFuZCB0aGUgZ2l2ZW4gY29tbWl0CisjIG1lc3NhZ2UsIGFuZCB0YWcgdGhlIHJlc3VsdGluZyBjb21taXQgd2l0aCB0aGUgZ2l2ZW4gdGFnIG5hbWUuCisjCisjIDxmaWxlPiwgPGNvbnRlbnRzPiwgYW5kIDx0YWc+IGFsbCBkZWZhdWx0IHRvIDxtZXNzYWdlPi4KKwordGVzdF9jb21taXQgKCkgeworCW5vdGljaz0gJiYKKwlzaWdub2ZmPSAmJgorCXdoaWxlIHRlc3QgJCMgIT0gMAorCWRvCisJCWNhc2UgIiQxIiBpbgorCQktLW5vdGljaykKKwkJCW5vdGljaz15ZXMKKwkJCTs7CisJCS0tc2lnbm9mZikKKwkJCXNpZ25vZmY9IiQxIgorCQkJOzsKKwkJKikKKwkJCWJyZWFrCisJCQk7OworCQllc2FjCisJCXNoaWZ0CisJZG9uZSAmJgorCWZpbGU9JHsyOi0iJDEudCJ9ICYmCisJZWNobyAiJHszLSQxfSIgPiAiJGZpbGUiICYmCisJZ2l0IGFkZCAiJGZpbGUiICYmCisJaWYgdGVzdCAteiAiJG5vdGljayIKKwl0aGVuCisJCXRlc3RfdGljaworCWZpICYmCisJZ2l0IGNvbW1pdCAkc2lnbm9mZiAtbSAiJDEiICYmCisJZ2l0IHRhZyAiJHs0Oi0kMX0iCit9CisKKyMgQ2FsbCB0ZXN0X21lcmdlIHdpdGggdGhlIGFyZ3VtZW50cyAiPG1lc3NhZ2U+IDxjb21taXQ+Iiwgd2hlcmUgPGNvbW1pdD4KKyMgY2FuIGJlIGEgdGFnIHBvaW50aW5nIHRvIHRoZSBjb21taXQtdG8tbWVyZ2UuCisKK3Rlc3RfbWVyZ2UgKCkgeworCXRlc3RfdGljayAmJgorCWdpdCBtZXJnZSAtbSAiJDEiICIkMiIgJiYKKwlnaXQgdGFnICIkMSIKK30KKworIyBUaGlzIGZ1bmN0aW9uIGhlbHBzIHN5c3RlbXMgd2hlcmUgY29yZS5maWxlbW9kZT1mYWxzZSBpcyBzZXQuCisjIFVzZSBpdCBpbnN0ZWFkIG9mIHBsYWluICdjaG1vZCAreCcgdG8gc2V0IG9yIHVuc2V0IHRoZSBleGVjdXRhYmxlIGJpdAorIyBvZiBhIGZpbGUgaW4gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBhZGQgaXQgdG8gdGhlIGluZGV4LgorCit0ZXN0X2NobW9kICgpIHsKKwljaG1vZCAiJEAiICYmCisJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAiLS1jaG1vZD0kQCIKK30KKworIyBVbnNldCBhIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUsIGJ1dCBkb24ndCBmYWlsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCit0ZXN0X3VuY29uZmlnICgpIHsKKwljb25maWdfZGlyPQorCWlmIHRlc3QgIiQxIiA9IC1DCisJdGhlbgorCQlzaGlmdAorCQljb25maWdfZGlyPSQxCisJCXNoaWZ0CisJZmkKKwlnaXQgJHtjb25maWdfZGlyOistQyAiJGNvbmZpZ19kaXIifSBjb25maWcgLS11bnNldC1hbGwgIiRAIgorCWNvbmZpZ19zdGF0dXM9JD8KKwljYXNlICIkY29uZmlnX3N0YXR1cyIgaW4KKwk1KSAjIG9rLCBub3RoaW5nIHRvIHVuc2V0CisJCWNvbmZpZ19zdGF0dXM9MAorCQk7OworCWVzYWMKKwlyZXR1cm4gJGNvbmZpZ19zdGF0dXMKK30KKworIyBTZXQgZ2l0IGNvbmZpZywgYXV0b21hdGljYWxseSB1bnNldHRpbmcgaXQgYWZ0ZXIgdGhlIHRlc3QgaXMgb3Zlci4KK3Rlc3RfY29uZmlnICgpIHsKKwljb25maWdfZGlyPQorCWlmIHRlc3QgIiQxIiA9IC1DCisJdGhlbgorCQlzaGlmdAorCQljb25maWdfZGlyPSQxCisJCXNoaWZ0CisJZmkKKwl0ZXN0X3doZW5fZmluaXNoZWQgInRlc3RfdW5jb25maWcgJHtjb25maWdfZGlyOistQyAnJGNvbmZpZ19kaXInfSAnJDEnIiAmJgorCWdpdCAke2NvbmZpZ19kaXI6Ky1DICIkY29uZmlnX2RpciJ9IGNvbmZpZyAiJEAiCit9CisKK3Rlc3RfY29uZmlnX2dsb2JhbCAoKSB7CisJdGVzdF93aGVuX2ZpbmlzaGVkICJ0ZXN0X3VuY29uZmlnIC0tZ2xvYmFsICckMSciICYmCisJZ2l0IGNvbmZpZyAtLWdsb2JhbCAiJEAiCit9CisKK3dyaXRlX3NjcmlwdCAoKSB7CisJeworCQllY2hvICIjISR7Mi0iJFNIRUxMX1BBVEgifSIgJiYKKwkJY2F0CisJfSA+IiQxIiAmJgorCWNobW9kICt4ICIkMSIKK30KKworIyBVc2UgdGVzdF9zZXRfcHJlcmVxIHRvIHRlbGwgdGhhdCBhIHBhcnRpY3VsYXIgcHJlcmVxdWlzaXRlIGlzIGF2YWlsYWJsZS4KKyMgVGhlIHByZXJlcXVpc2l0ZSBjYW4gbGF0ZXIgYmUgY2hlY2tlZCBmb3IgaW4gdHdvIHdheXM6CisjCisjIC0gRXhwbGljaXRseSB1c2luZyB0ZXN0X2hhdmVfcHJlcmVxLgorIworIyAtIEltcGxpY2l0bHkgYnkgc3BlY2lmeWluZyB0aGUgcHJlcmVxdWlzaXRlIHRhZyBpbiB0aGUgY2FsbHMgdG8KKyMgICB0ZXN0X2V4cGVjdF97c3VjY2VzcyxmYWlsdXJlLGNvZGV9LgorIworIyBUaGUgc2luZ2xlIHBhcmFtZXRlciBpcyB0aGUgcHJlcmVxdWlzaXRlIHRhZyAoYSBzaW1wbGUgd29yZCwgaW4gYWxsCisjIGNhcGl0YWwgbGV0dGVycyBieSBjb252ZW50aW9uKS4KKwordGVzdF9zZXRfcHJlcmVxICgpIHsKKwlzYXRpc2ZpZWRfcHJlcmVxPSIkc2F0aXNmaWVkX3ByZXJlcSQxICIKK30KK3NhdGlzZmllZF9wcmVyZXE9IiAiCitsYXppbHlfdGVzdGFibGVfcHJlcmVxPSBsYXppbHlfdGVzdGVkX3ByZXJlcT0KKworIyBVc2FnZTogdGVzdF9sYXp5X3ByZXJlcSBQUkVSRVEgJ3NjcmlwdCcKK3Rlc3RfbGF6eV9wcmVyZXEgKCkgeworCWxhemlseV90ZXN0YWJsZV9wcmVyZXE9IiRsYXppbHlfdGVzdGFibGVfcHJlcmVxJDEgIgorCWV2YWwgdGVzdF9wcmVyZXFfbGF6aWx5XyQxPVwkMgorfQorCit0ZXN0X3J1bl9sYXp5X3ByZXJlcV8gKCkgeworCXNjcmlwdD0nCitta2RpciAtcCAiJFRSQVNIX0RJUkVDVE9SWS9wcmVyZXEtdGVzdC1kaXIiICYmCisoCisJY2QgIiRUUkFTSF9ESVJFQ1RPUlkvcHJlcmVxLXRlc3QtZGlyIiAmJiciJDIiJworKScKKwlzYXkgPiYzICJjaGVja2luZyBwcmVyZXF1aXNpdGU6ICQxIgorCXNheSA+JjMgIiRzY3JpcHQiCisJdGVzdF9ldmFsXyAiJHNjcmlwdCIKKwlldmFsX3JldD0kPworCXJtIC1yZiAiJFRSQVNIX0RJUkVDVE9SWS9wcmVyZXEtdGVzdC1kaXIiCisJaWYgdGVzdCAiJGV2YWxfcmV0IiA9IDA7IHRoZW4KKwkJc2F5ID4mMyAicHJlcmVxdWlzaXRlICQxIG9rIgorCWVsc2UKKwkJc2F5ID4mMyAicHJlcmVxdWlzaXRlICQxIG5vdCBzYXRpc2ZpZWQiCisJZmkKKwlyZXR1cm4gJGV2YWxfcmV0Cit9CisKK3Rlc3RfaGF2ZV9wcmVyZXEgKCkgeworCSMgcHJlcmVxdWlzaXRlcyBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggJywnCisJc2F2ZV9JRlM9JElGUworCUlGUz0sCisJc2V0IC0tICQqCisJSUZTPSRzYXZlX0lGUworCisJdG90YWxfcHJlcmVxPTAKKwlva19wcmVyZXE9MAorCW1pc3NpbmdfcHJlcmVxPQorCisJZm9yIHByZXJlcXVpc2l0ZQorCWRvCisJCWNhc2UgIiRwcmVyZXF1aXNpdGUiIGluCisJCSEqKQorCQkJbmVnYXRpdmVfcHJlcmVxPXQKKwkJCXByZXJlcXVpc2l0ZT0ke3ByZXJlcXVpc2l0ZSMhfQorCQkJOzsKKwkJKikKKwkJCW5lZ2F0aXZlX3ByZXJlcT0KKwkJZXNhYworCisJCWNhc2UgIiAkbGF6aWx5X3Rlc3RlZF9wcmVyZXEgIiBpbgorCQkqIiAkcHJlcmVxdWlzaXRlICIqKQorCQkJOzsKKwkJKikKKwkJCWNhc2UgIiAkbGF6aWx5X3Rlc3RhYmxlX3ByZXJlcSAiIGluCisJCQkqIiAkcHJlcmVxdWlzaXRlICIqKQorCQkJCWV2YWwgInNjcmlwdD1cJHRlc3RfcHJlcmVxX2xhemlseV8kcHJlcmVxdWlzaXRlIiAmJgorCQkJCWlmIHRlc3RfcnVuX2xhenlfcHJlcmVxXyAiJHByZXJlcXVpc2l0ZSIgIiRzY3JpcHQiCisJCQkJdGhlbgorCQkJCQl0ZXN0X3NldF9wcmVyZXEgJHByZXJlcXVpc2l0ZQorCQkJCWZpCisJCQkJbGF6aWx5X3Rlc3RlZF9wcmVyZXE9IiRsYXppbHlfdGVzdGVkX3ByZXJlcSRwcmVyZXF1aXNpdGUgIgorCQkJZXNhYworCQkJOzsKKwkJZXNhYworCisJCXRvdGFsX3ByZXJlcT0kKCgkdG90YWxfcHJlcmVxICsgMSkpCisJCWNhc2UgIiRzYXRpc2ZpZWRfcHJlcmVxIiBpbgorCQkqIiAkcHJlcmVxdWlzaXRlICIqKQorCQkJc2F0aXNmaWVkX3RoaXNfcHJlcmVxPXQKKwkJCTs7CisJCSopCisJCQlzYXRpc2ZpZWRfdGhpc19wcmVyZXE9CisJCWVzYWMKKworCQljYXNlICIkc2F0aXNmaWVkX3RoaXNfcHJlcmVxLCRuZWdhdGl2ZV9wcmVyZXEiIGluCisJCXQsfCx0KQorCQkJb2tfcHJlcmVxPSQoKCRva19wcmVyZXEgKyAxKSkKKwkJCTs7CisJCSopCisJCQkjIEtlZXAgYSBsaXN0IG9mIG1pc3NpbmcgcHJlcmVxdWlzaXRlczsgcmVzdG9yZQorCQkJIyB0aGUgbmVnYXRpdmUgbWFya2VyIGlmIG5lY2Vzc2FyeS4KKwkJCXByZXJlcXVpc2l0ZT0ke25lZ2F0aXZlX3ByZXJlcTorIX0kcHJlcmVxdWlzaXRlCisJCQlpZiB0ZXN0IC16ICIkbWlzc2luZ19wcmVyZXEiCisJCQl0aGVuCisJCQkJbWlzc2luZ19wcmVyZXE9JHByZXJlcXVpc2l0ZQorCQkJZWxzZQorCQkJCW1pc3NpbmdfcHJlcmVxPSIkcHJlcmVxdWlzaXRlLCRtaXNzaW5nX3ByZXJlcSIKKwkJCWZpCisJCWVzYWMKKwlkb25lCisKKwl0ZXN0ICR0b3RhbF9wcmVyZXEgPSAkb2tfcHJlcmVxCit9CisKK3Rlc3RfZGVjbGFyZWRfcHJlcmVxICgpIHsKKwljYXNlICIsJHRlc3RfcHJlcmVxLCIgaW4KKwkqLCQxLCopCisJCXJldHVybiAwCisJCTs7CisJZXNhYworCXJldHVybiAxCit9CisKK3Rlc3RfdmVyaWZ5X3ByZXJlcSAoKSB7CisJdGVzdCAteiAiJHRlc3RfcHJlcmVxIiB8fAorCWV4cHIgPi9kZXYvbnVsbCAiJHRlc3RfcHJlcmVxIiA6ICdbQS1aMC05XywhXSokJyB8fAorCWVycm9yICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiAnJHRlc3RfcHJlcmVxJyBkb2VzIG5vdCBsb29rIGxpa2UgYSBwcmVyZXEiCit9CisKK3Rlc3RfZXhwZWN0X2ZhaWx1cmUgKCkgeworCXRlc3Rfc3RhcnRfCisJdGVzdCAiJCMiID0gMyAmJiB7IHRlc3RfcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCB0ZXN0X3ByZXJlcT0KKwl0ZXN0ICIkIyIgPSAyIHx8CisJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAyIG9yIDMgcGFyYW1ldGVycyB0byB0ZXN0LWV4cGVjdC1mYWlsdXJlIgorCXRlc3RfdmVyaWZ5X3ByZXJlcQorCWV4cG9ydCB0ZXN0X3ByZXJlcQorCWlmICEgdGVzdF9za2lwICIkQCIKKwl0aGVuCisJCXNheSA+JjMgImNoZWNraW5nIGtub3duIGJyZWFrYWdlOiAkMiIKKwkJaWYgdGVzdF9ydW5fICIkMiIgZXhwZWN0aW5nX2ZhaWx1cmUKKwkJdGhlbgorCQkJdGVzdF9rbm93bl9icm9rZW5fb2tfICIkMSIKKwkJZWxzZQorCQkJdGVzdF9rbm93bl9icm9rZW5fZmFpbHVyZV8gIiQxIgorCQlmaQorCWZpCisJdGVzdF9maW5pc2hfCit9CisKK3Rlc3RfZXhwZWN0X3N1Y2Nlc3MgKCkgeworCXRlc3Rfc3RhcnRfCisJdGVzdCAiJCMiID0gMyAmJiB7IHRlc3RfcHJlcmVxPSQxOyBzaGlmdDsgfSB8fCB0ZXN0X3ByZXJlcT0KKwl0ZXN0ICIkIyIgPSAyIHx8CisJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAyIG9yIDMgcGFyYW1ldGVycyB0byB0ZXN0LWV4cGVjdC1zdWNjZXNzIgorCXRlc3RfdmVyaWZ5X3ByZXJlcQorCWV4cG9ydCB0ZXN0X3ByZXJlcQorCWlmICEgdGVzdF9za2lwICIkQCIKKwl0aGVuCisJCXNheSA+JjMgImV4cGVjdGluZyBzdWNjZXNzOiAkMiIKKwkJaWYgdGVzdF9ydW5fICIkMiIKKwkJdGhlbgorCQkJdGVzdF9va18gIiQxIgorCQllbHNlCisJCQl0ZXN0X2ZhaWx1cmVfICIkQCIKKwkJZmkKKwlmaQorCXRlc3RfZmluaXNoXworfQorCisjIHRlc3RfZXh0ZXJuYWwgcnVucyBleHRlcm5hbCB0ZXN0IHNjcmlwdHMgdGhhdCBwcm92aWRlIGNvbnRpbnVvdXMKKyMgdGVzdCBvdXRwdXQgYWJvdXQgdGhlaXIgcHJvZ3Jlc3MsIGFuZCBzdWNjZWVkcy9mYWlscyBvbgorIyB6ZXJvL25vbi16ZXJvIGV4aXQgY29kZS4gIEl0IG91dHB1dHMgdGhlIHRlc3Qgb3V0cHV0IG9uIHN0ZG91dCBldmVuCisjIGluIG5vbi12ZXJib3NlIG1vZGUsIGFuZCBhbm5vdW5jZXMgdGhlIGV4dGVybmFsIHNjcmlwdCB3aXRoICIjIHJ1bgorIyA8bj46IC4uLiIgYmVmb3JlIHJ1bm5pbmcgaXQuICBXaGVuIHByb3ZpZGluZyByZWxhdGl2ZSBwYXRocywga2VlcCBpbgorIyBtaW5kIHRoYXQgYWxsIHNjcmlwdHMgcnVuIGluICJ0cmFzaCBkaXJlY3RvcnkiLgorIyBVc2FnZTogdGVzdF9leHRlcm5hbCBkZXNjcmlwdGlvbiBjb21tYW5kIGFyZ3VtZW50cy4uLgorIyBFeGFtcGxlOiB0ZXN0X2V4dGVybmFsICdQZXJsIEFQSScgcGVybCAuLi9wYXRoL3RvL3Rlc3QucGwKK3Rlc3RfZXh0ZXJuYWwgKCkgeworCXRlc3QgIiQjIiA9IDQgJiYgeyB0ZXN0X3ByZXJlcT0kMTsgc2hpZnQ7IH0gfHwgdGVzdF9wcmVyZXE9CisJdGVzdCAiJCMiID0gMyB8fAorCWVycm9yID4mNSAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogbm90IDMgb3IgNCBwYXJhbWV0ZXJzIHRvIHRlc3RfZXh0ZXJuYWwiCisJZGVzY3I9IiQxIgorCXNoaWZ0CisJdGVzdF92ZXJpZnlfcHJlcmVxCisJZXhwb3J0IHRlc3RfcHJlcmVxCisJaWYgISB0ZXN0X3NraXAgIiRkZXNjciIgIiRAIgorCXRoZW4KKwkJIyBBbm5vdW5jZSB0aGUgc2NyaXB0IHRvIHJlZHVjZSBjb25mdXNpb24gYWJvdXQgdGhlCisJCSMgdGVzdCBvdXRwdXQgdGhhdCBmb2xsb3dzLgorCQlzYXlfY29sb3IgIiIgIiMgcnVuICR0ZXN0X2NvdW50OiAkZGVzY3IgKCQqKSIKKwkJIyBFeHBvcnQgVEVTVF9ESVJFQ1RPUlksIFRSQVNIX0RJUkVDVE9SWSBhbmQgR0lUX1RFU1RfTE9ORworCQkjIHRvIGJlIGFibGUgdG8gdXNlIHRoZW0gaW4gc2NyaXB0CisJCWV4cG9ydCBURVNUX0RJUkVDVE9SWSBUUkFTSF9ESVJFQ1RPUlkgR0lUX1RFU1RfTE9ORworCQkjIFJ1biBjb21tYW5kOyByZWRpcmVjdCBpdHMgc3RkZXJyIHRvICY0IGFzIGluCisJCSMgdGVzdF9ydW5fLCBidXQga2VlcCBpdHMgc3Rkb3V0IG9uIG91ciBzdGRvdXQgZXZlbiBpbgorCQkjIG5vbi12ZXJib3NlIG1vZGUuCisJCSIkQCIgMj4mNAorCQlpZiB0ZXN0ICIkPyIgPSAwCisJCXRoZW4KKwkJCWlmIHRlc3QgJHRlc3RfZXh0ZXJuYWxfaGFzX3RhcCAtZXEgMDsgdGhlbgorCQkJCXRlc3Rfb2tfICIkZGVzY3IiCisJCQllbHNlCisJCQkJc2F5X2NvbG9yICIiICIjIHRlc3RfZXh0ZXJuYWwgdGVzdCAkZGVzY3Igd2FzIG9rIgorCQkJCXRlc3Rfc3VjY2Vzcz0kKCgkdGVzdF9zdWNjZXNzICsgMSkpCisJCQlmaQorCQllbHNlCisJCQlpZiB0ZXN0ICR0ZXN0X2V4dGVybmFsX2hhc190YXAgLWVxIDA7IHRoZW4KKwkJCQl0ZXN0X2ZhaWx1cmVfICIkZGVzY3IiICIkQCIKKwkJCWVsc2UKKwkJCQlzYXlfY29sb3IgZXJyb3IgIiMgdGVzdF9leHRlcm5hbCB0ZXN0ICRkZXNjciBmYWlsZWQ6ICRAIgorCQkJCXRlc3RfZmFpbHVyZT0kKCgkdGVzdF9mYWlsdXJlICsgMSkpCisJCQlmaQorCQlmaQorCWZpCit9CisKKyMgTGlrZSB0ZXN0X2V4dGVybmFsLCBidXQgaW4gYWRkaXRpb24gdGVzdHMgdGhhdCB0aGUgY29tbWFuZCBnZW5lcmF0ZWQKKyMgbm8gb3V0cHV0IG9uIHN0ZGVyci4KK3Rlc3RfZXh0ZXJuYWxfd2l0aG91dF9zdGRlcnIgKCkgeworCSMgVGhlIHRlbXBvcmFyeSBmaWxlIGhhcyBubyAoYW5kIG11c3QgaGF2ZSBubykgc2VjdXJpdHkKKwkjIGltcGxpY2F0aW9ucy4KKwl0bXA9JHtUTVBESVI6LS90bXB9CisJc3RkZXJyPSIkdG1wL2dpdC1leHRlcm5hbC1zdGRlcnIuJCQudG1wIgorCXRlc3RfZXh0ZXJuYWwgIiRAIiA0PiAiJHN0ZGVyciIKKwl0ZXN0IC1mICIkc3RkZXJyIiB8fCBlcnJvciAiSW50ZXJuYWwgZXJyb3I6ICRzdGRlcnIgZGlzYXBwZWFyZWQuIgorCWRlc2NyPSJubyBzdGRlcnI6ICQxIgorCXNoaWZ0CisJc2F5ID4mMyAiIyBleHBlY3Rpbmcgbm8gc3RkZXJyIGZyb20gcHJldmlvdXMgY29tbWFuZCIKKwlpZiB0ZXN0ICEgLXMgIiRzdGRlcnIiCisJdGhlbgorCQlybSAiJHN0ZGVyciIKKworCQlpZiB0ZXN0ICR0ZXN0X2V4dGVybmFsX2hhc190YXAgLWVxIDA7IHRoZW4KKwkJCXRlc3Rfb2tfICIkZGVzY3IiCisJCWVsc2UKKwkJCXNheV9jb2xvciAiIiAiIyB0ZXN0X2V4dGVybmFsX3dpdGhvdXRfc3RkZXJyIHRlc3QgJGRlc2NyIHdhcyBvayIKKwkJCXRlc3Rfc3VjY2Vzcz0kKCgkdGVzdF9zdWNjZXNzICsgMSkpCisJCWZpCisJZWxzZQorCQlpZiB0ZXN0ICIkdmVyYm9zZSIgPSB0CisJCXRoZW4KKwkJCW91dHB1dD0kKGVjaG87IGVjaG8gIiMgU3RkZXJyIGlzOiI7IGNhdCAiJHN0ZGVyciIpCisJCWVsc2UKKwkJCW91dHB1dD0KKwkJZmkKKwkJIyBybSBmaXJzdCBpbiBjYXNlIHRlc3RfZmFpbHVyZSBleGl0cy4KKwkJcm0gIiRzdGRlcnIiCisJCWlmIHRlc3QgJHRlc3RfZXh0ZXJuYWxfaGFzX3RhcCAtZXEgMDsgdGhlbgorCQkJdGVzdF9mYWlsdXJlXyAiJGRlc2NyIiAiJEAiICIkb3V0cHV0IgorCQllbHNlCisJCQlzYXlfY29sb3IgZXJyb3IgIiMgdGVzdF9leHRlcm5hbF93aXRob3V0X3N0ZGVyciB0ZXN0ICRkZXNjciBmYWlsZWQ6ICRAOiAkb3V0cHV0IgorCQkJdGVzdF9mYWlsdXJlPSQoKCR0ZXN0X2ZhaWx1cmUgKyAxKSkKKwkJZmkKKwlmaQorfQorCisjIGRlYnVnZ2luZy1mcmllbmRseSBhbHRlcm5hdGl2ZXMgdG8gInRlc3QgWy1mfC1kfC1lXSIKKyMgVGhlIGNvbW1hbmRzIHRlc3QgdGhlIGV4aXN0ZW5jZSBvciBub24tZXhpc3RlbmNlIG9mICQxLiAkMiBjYW4gYmUKKyMgZ2l2ZW4gdG8gcHJvdmlkZSBhIG1vcmUgcHJlY2lzZSBkaWFnbm9zaXMuCit0ZXN0X3BhdGhfaXNfZmlsZSAoKSB7CisJaWYgISB0ZXN0IC1mICIkMSIKKwl0aGVuCisJCWVjaG8gIkZpbGUgJDEgZG9lc24ndCBleGlzdC4gJDIiCisJCWZhbHNlCisJZmkKK30KKwordGVzdF9wYXRoX2lzX2RpciAoKSB7CisJaWYgISB0ZXN0IC1kICIkMSIKKwl0aGVuCisJCWVjaG8gIkRpcmVjdG9yeSAkMSBkb2Vzbid0IGV4aXN0LiAkMiIKKwkJZmFsc2UKKwlmaQorfQorCisjIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgZXhpc3RzIGFuZCBpcyBlbXB0eSBhcyBleHBlY3RlZCwgYmFyZiBvdGhlcndpc2UuCit0ZXN0X2Rpcl9pc19lbXB0eSAoKSB7CisJdGVzdF9wYXRoX2lzX2RpciAiJDEiICYmCisJaWYgdGVzdCAtbiAiJChscyAtYTEgIiQxIiB8IGVncmVwIC12ICdeXC5cLj8kJykiCisJdGhlbgorCQllY2hvICJEaXJlY3RvcnkgJyQxJyBpcyBub3QgZW1wdHksIGl0IGNvbnRhaW5zOiIKKwkJbHMgLWxhICIkMSIKKwkJcmV0dXJuIDEKKwlmaQorfQorCit0ZXN0X3BhdGhfaXNfbWlzc2luZyAoKSB7CisJaWYgdGVzdCAtZSAiJDEiCisJdGhlbgorCQllY2hvICJQYXRoIGV4aXN0czoiCisJCWxzIC1sZCAiJDEiCisJCWlmIHRlc3QgJCMgLWdlIDEKKwkJdGhlbgorCQkJZWNobyAiJCoiCisJCWZpCisJCWZhbHNlCisJZmkKK30KKworIyB0ZXN0X2xpbmVfY291bnQgY2hlY2tzIHRoYXQgYSBmaWxlIGhhcyB0aGUgbnVtYmVyIG9mIGxpbmVzIGl0CisjIG91Z2h0IHRvLiBGb3IgZXhhbXBsZToKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAncHJvZHVjZSBleGFjdGx5IG9uZSBsaW5lIG9mIG91dHB1dCcgJworIwkJZG8gc29tZXRoaW5nID5vdXRwdXQgJiYKKyMJCXRlc3RfbGluZV9jb3VudCA9IDEgb3V0cHV0CisjCScKKyMKKyMgaXMgbGlrZSAidGVzdCAkKHdjIC1sIDxvdXRwdXQpID0gMSIgZXhjZXB0IHRoYXQgaXQgcGFzc2VzIHRoZQorIyBvdXRwdXQgdGhyb3VnaCB3aGVuIHRoZSBudW1iZXIgb2YgbGluZXMgaXMgd3JvbmcuCisKK3Rlc3RfbGluZV9jb3VudCAoKSB7CisJaWYgdGVzdCAkIyAhPSAzCisJdGhlbgorCQllcnJvciAiYnVnIGluIHRoZSB0ZXN0IHNjcmlwdDogbm90IDMgcGFyYW1ldGVycyB0byB0ZXN0X2xpbmVfY291bnQiCisJZWxpZiAhIHRlc3QgJCh3YyAtbCA8IiQzIikgIiQxIiAiJDIiCisJdGhlbgorCQllY2hvICJ0ZXN0X2xpbmVfY291bnQ6IGxpbmUgY291bnQgZm9yICQzICEkMSAkMiIKKwkJY2F0ICIkMyIKKwkJcmV0dXJuIDEKKwlmaQorfQorCisjIFRoaXMgaXMgbm90IGFtb25nIHRvcC1sZXZlbCAodGVzdF9leHBlY3Rfc3VjY2VzcyB8IHRlc3RfZXhwZWN0X2ZhaWx1cmUpCisjIGJ1dCBpcyBhIHByZWZpeCB0aGF0IGNhbiBiZSB1c2VkIGluIHRoZSB0ZXN0IHNjcmlwdCwgbGlrZToKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAnY29tcGxhaW4gYW5kIGRpZScgJworIyAgICAgICAgICAgZG8gc29tZXRoaW5nICYmCisjICAgICAgICAgICBkbyBzb21ldGhpbmcgZWxzZSAmJgorIwkgICAgdGVzdF9tdXN0X2ZhaWwgZ2l0IGNoZWNrb3V0IC4uL291dGVyc3BhY2UKKyMJJworIworIyBXcml0aW5nIHRoaXMgYXMgIiEgZ2l0IGNoZWNrb3V0IC4uL291dGVyc3BhY2UiIGlzIHdyb25nLCBiZWNhdXNlCisjIHRoZSBmYWlsdXJlIGNvdWxkIGJlIGR1ZSB0byBhIHNlZ3YuICBXZSB3YW50IGEgY29udHJvbGxlZCBmYWlsdXJlLgorCit0ZXN0X211c3RfZmFpbCAoKSB7CisJIiRAIgorCWV4aXRfY29kZT0kPworCWlmIHRlc3QgJGV4aXRfY29kZSA9IDA7IHRoZW4KKwkJZWNobyA+JjIgInRlc3RfbXVzdF9mYWlsOiBjb21tYW5kIHN1Y2NlZWRlZDogJCoiCisJCXJldHVybiAxCisJZWxpZiB0ZXN0ICRleGl0X2NvZGUgLWd0IDEyOSAmJiB0ZXN0ICRleGl0X2NvZGUgLWxlIDE5MjsgdGhlbgorCQllY2hvID4mMiAidGVzdF9tdXN0X2ZhaWw6IGRpZWQgYnkgc2lnbmFsOiAkKiIKKwkJcmV0dXJuIDEKKwllbGlmIHRlc3QgJGV4aXRfY29kZSA9IDEyNzsgdGhlbgorCQllY2hvID4mMiAidGVzdF9tdXN0X2ZhaWw6IGNvbW1hbmQgbm90IGZvdW5kOiAkKiIKKwkJcmV0dXJuIDEKKwllbGlmIHRlc3QgJGV4aXRfY29kZSA9IDEyNjsgdGhlbgorCQllY2hvID4mMiAidGVzdF9tdXN0X2ZhaWw6IHZhbGdyaW5kIGVycm9yOiAkKiIKKwkJcmV0dXJuIDEKKwlmaQorCXJldHVybiAwCit9CisKKyMgU2ltaWxhciB0byB0ZXN0X211c3RfZmFpbCwgYnV0IHRvbGVyYXRlcyBzdWNjZXNzLCB0b28uICBUaGlzIGlzCisjIG1lYW50IHRvIGJlIHVzZWQgaW4gY29udGV4dHMgbGlrZToKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAnc29tZSBjb21tYW5kIHdvcmtzIHdpdGhvdXQgY29uZmlndXJhdGlvbicgJworIwkJdGVzdF9taWdodF9mYWlsIGdpdCBjb25maWcgLS11bnNldCBhbGwuY29uZmlndXJhdGlvbiAmJgorIwkJZG8gc29tZXRoaW5nCisjCScKKyMKKyMgV3JpdGluZyAiZ2l0IGNvbmZpZyAtLXVuc2V0IGFsbC5jb25maWd1cmF0aW9uIHx8IDoiIHdvdWxkIGJlIHdyb25nLAorIyBiZWNhdXNlIHdlIHdhbnQgdG8gbm90aWNlIGlmIGl0IGZhaWxzIGR1ZSB0byBzZWd2LgorCit0ZXN0X21pZ2h0X2ZhaWwgKCkgeworCSIkQCIKKwlleGl0X2NvZGU9JD8KKwlpZiB0ZXN0ICRleGl0X2NvZGUgLWd0IDEyOSAmJiB0ZXN0ICRleGl0X2NvZGUgLWxlIDE5MjsgdGhlbgorCQllY2hvID4mMiAidGVzdF9taWdodF9mYWlsOiBkaWVkIGJ5IHNpZ25hbDogJCoiCisJCXJldHVybiAxCisJZWxpZiB0ZXN0ICRleGl0X2NvZGUgPSAxMjc7IHRoZW4KKwkJZWNobyA+JjIgInRlc3RfbWlnaHRfZmFpbDogY29tbWFuZCBub3QgZm91bmQ6ICQqIgorCQlyZXR1cm4gMQorCWZpCisJcmV0dXJuIDAKK30KKworIyBTaW1pbGFyIHRvIHRlc3RfbXVzdF9mYWlsIGFuZCB0ZXN0X21pZ2h0X2ZhaWwsIGJ1dCBjaGVjayB0aGF0IGEKKyMgZ2l2ZW4gY29tbWFuZCBleGl0ZWQgd2l0aCBhIGdpdmVuIGV4aXQgY29kZS4gTWVhbnQgdG8gYmUgdXNlZCBhczoKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAnTWVyZ2Ugd2l0aCBkL2YgY29uZmxpY3RzJyAnCisjCQl0ZXN0X2V4cGVjdF9jb2RlIDEgZ2l0IG1lcmdlICJtZXJnZSBtc2ciIEIgbWFzdGVyCisjCScKKwordGVzdF9leHBlY3RfY29kZSAoKSB7CisJd2FudF9jb2RlPSQxCisJc2hpZnQKKwkiJEAiCisJZXhpdF9jb2RlPSQ/CisJaWYgdGVzdCAkZXhpdF9jb2RlID0gJHdhbnRfY29kZQorCXRoZW4KKwkJcmV0dXJuIDAKKwlmaQorCisJZWNobyA+JjIgInRlc3RfZXhwZWN0X2NvZGU6IGNvbW1hbmQgZXhpdGVkIHdpdGggJGV4aXRfY29kZSwgd2Ugd2FudGVkICR3YW50X2NvZGUgJCoiCisJcmV0dXJuIDEKK30KKworIyB0ZXN0X2NtcCBpcyBhIGhlbHBlciBmdW5jdGlvbiB0byBjb21wYXJlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgb3V0cHV0LgorIyBZb3UgY2FuIHVzZSBpdCBsaWtlOgorIworIwl0ZXN0X2V4cGVjdF9zdWNjZXNzICdmb28gd29ya3MnICcKKyMJCWVjaG8gZXhwZWN0ZWQgPmV4cGVjdGVkICYmCisjCQlmb28gPmFjdHVhbCAmJgorIwkJdGVzdF9jbXAgZXhwZWN0ZWQgYWN0dWFsCisjCScKKyMKKyMgVGhpcyBjb3VsZCBiZSB3cml0dGVuIGFzIGVpdGhlciAiY21wIiBvciAiZGlmZiAtdSIsIGJ1dDoKKyMgLSBjbXAncyBvdXRwdXQgaXMgbm90IG5lYXJseSBhcyBlYXN5IHRvIHJlYWQgYXMgZGlmZiAtdQorIyAtIG5vdCBhbGwgZGlmZiB2ZXJzaW9ucyB1bmRlcnN0YW5kICItdSIKKwordGVzdF9jbXAoKSB7CisJJEdJVF9URVNUX0NNUCAiJEAiCit9CisKKyMgdGVzdF9jbXBfYmluIC0gaGVscGVyIHRvIGNvbXBhcmUgYmluYXJ5IGZpbGVzCisKK3Rlc3RfY21wX2JpbigpIHsKKwljbXAgIiRAIgorfQorCisjIENhbGwgYW55IGNvbW1hbmQgIiRAIiBidXQgYmUgbW9yZSB2ZXJib3NlIGFib3V0IGl0cworIyBmYWlsdXJlLiBUaGlzIGlzIGhhbmR5IGZvciBjb21tYW5kcyBsaWtlICJ0ZXN0IiB3aGljaCBkbworIyBub3Qgb3V0cHV0IGFueXRoaW5nIHdoZW4gdGhleSBmYWlsLgordmVyYm9zZSAoKSB7CisJIiRAIiAmJiByZXR1cm4gMAorCWVjaG8gPiYyICJjb21tYW5kIGZhaWxlZDogJChnaXQgcmV2LXBhcnNlIC0tc3EtcXVvdGUgIiRAIikiCisJcmV0dXJuIDEKK30KKworIyBDaGVjayBpZiB0aGUgZmlsZSBleHBlY3RlZCB0byBiZSBlbXB0eSBpcyBpbmRlZWQgZW1wdHksIGFuZCBiYXJmcworIyBvdGhlcndpc2UuCisKK3Rlc3RfbXVzdF9iZV9lbXB0eSAoKSB7CisJaWYgdGVzdCAtcyAiJDEiCisJdGhlbgorCQllY2hvICInJDEnIGlzIG5vdCBlbXB0eSwgaXQgY29udGFpbnM6IgorCQljYXQgIiQxIgorCQlyZXR1cm4gMQorCWZpCit9CisKKyMgVGVzdHMgdGhhdCBpdHMgdHdvIHBhcmFtZXRlcnMgcmVmZXIgdG8gdGhlIHNhbWUgcmV2aXNpb24KK3Rlc3RfY21wX3JldiAoKSB7CisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDEiID5leHBlY3QucmV2ICYmCisJZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAiJDIiID5hY3R1YWwucmV2ICYmCisJdGVzdF9jbXAgZXhwZWN0LnJldiBhY3R1YWwucmV2Cit9CisKKyMgUHJpbnQgYSBzZXF1ZW5jZSBvZiBudW1iZXJzIG9yIGxldHRlcnMgaW4gaW5jcmVhc2luZyBvcmRlci4gIFRoaXMgaXMKKyMgc2ltaWxhciB0byBHTlUgc2VxKDEpLCBidXQgdGhlIGxhdHRlciBtaWdodCBub3QgYmUgYXZhaWxhYmxlCisjIGV2ZXJ5d2hlcmUgKGFuZCBkb2VzIG5vdCBkbyBsZXR0ZXJzKS4gIEl0IG1heSBiZSB1c2VkIGxpa2U6CisjCisjCWZvciBpIGluICQodGVzdF9zZXEgMTAwKQorIwlkbworIwkJZm9yIGogaW4gJCh0ZXN0X3NlcSAxMCAyMCkKKyMJCWRvCisjCQkJZm9yIGsgaW4gJCh0ZXN0X3NlcSBhIHopCisjCQkJZG8KKyMJCQkJZWNobyAkaS0kai0kaworIwkJCWRvbmUKKyMJCWRvbmUKKyMJZG9uZQorCit0ZXN0X3NlcSAoKSB7CisJY2FzZSAkIyBpbgorCTEpCXNldCAxICIkQCIgOzsKKwkyKQk7OworCSopCWVycm9yICJidWcgaW4gdGhlIHRlc3Qgc2NyaXB0OiBub3QgMSBvciAyIHBhcmFtZXRlcnMgdG8gdGVzdF9zZXEiIDs7CisJZXNhYworCXBlcmwgLWxlICdwcmludCBmb3IgJEFSR1ZbMF0uLiRBUkdWWzFdJyAtLSAiJEAiCit9CisKKyMgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBzY2hlZHVsZSBzb21lIGNvbW1hbmRzIHRvIGJlIHJ1bgorIyB1bmNvbmRpdGlvbmFsbHkgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCB0byByZXN0b3JlIHNhbml0eToKKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjb3JlLmNhcHNsb2NrJyAnCisjCQlnaXQgY29uZmlnIGNvcmUuY2Fwc2xvY2sgdHJ1ZSAmJgorIwkJdGVzdF93aGVuX2ZpbmlzaGVkICJnaXQgY29uZmlnIC0tdW5zZXQgY29yZS5jYXBzbG9jayIgJiYKKyMJCWhlbGxvIHdvcmxkCisjCScKKyMKKyMgVGhhdCB3b3VsZCBiZSByb3VnaGx5IGVxdWl2YWxlbnQgdG8KKyMKKyMJdGVzdF9leHBlY3Rfc3VjY2VzcyAndGVzdCBjb3JlLmNhcHNsb2NrJyAnCisjCQlnaXQgY29uZmlnIGNvcmUuY2Fwc2xvY2sgdHJ1ZSAmJgorIwkJaGVsbG8gd29ybGQKKyMJCWdpdCBjb25maWcgLS11bnNldCBjb3JlLmNhcHNsb2NrCisjCScKKyMKKyMgZXhjZXB0IHRoYXQgdGhlIGdyZWV0aW5nIGFuZCBjb25maWcgLS11bnNldCBtdXN0IGJvdGggc3VjY2VlZCBmb3IKKyMgdGhlIHRlc3QgdG8gcGFzcy4KKyMKKyMgTm90ZSB0aGF0IHVuZGVyIC0taW1tZWRpYXRlIG1vZGUsIG5vIGNsZWFuLXVwIGlzIGRvbmUgdG8gaGVscCBkaWFnbm9zZQorIyB3aGF0IHdlbnQgd3JvbmcuCisKK3Rlc3Rfd2hlbl9maW5pc2hlZCAoKSB7CisJIyBXZSBjYW5ub3QgZGV0ZWN0IHdoZW4gd2UgYXJlIGluIGEgc3Vic2hlbGwgaW4gZ2VuZXJhbCwgYnV0IGJ5CisJIyBkb2luZyBzbyBvbiBCYXNoIGlzIGJldHRlciB0aGFuIG5vdGhpbmcgKHRoZSB0ZXN0IHdpbGwKKwkjIHNpbGVudGx5IHBhc3Mgb24gb3RoZXIgc2hlbGxzKS4KKwl0ZXN0ICIke0JBU0hfU1VCU0hFTEwtMH0iID0gMCB8fAorCWVycm9yICJidWcgaW4gdGVzdCBzY3JpcHQ6IHRlc3Rfd2hlbl9maW5pc2hlZCBkb2VzIG5vdGhpbmcgaW4gYSBzdWJzaGVsbCIKKwl0ZXN0X2NsZWFudXA9InsgJCoKKwkJfSAmJiAoZXhpdCBcIlwkZXZhbF9yZXRcIik7IGV2YWxfcmV0PVwkPzsgJHRlc3RfY2xlYW51cCIKK30KKworIyBNb3N0IHRlc3RzIGNhbiB1c2UgdGhlIGNyZWF0ZWQgcmVwb3NpdG9yeSwgYnV0IHNvbWUgbWF5IG5lZWQgdG8gY3JlYXRlIG1vcmUuCisjIFVzYWdlOiB0ZXN0X2NyZWF0ZV9yZXBvIDxkaXJlY3Rvcnk+Cit0ZXN0X2NyZWF0ZV9yZXBvICgpIHsKKwl0ZXN0ICIkIyIgPSAxIHx8CisJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IG5vdCAxIHBhcmFtZXRlciB0byB0ZXN0LWNyZWF0ZS1yZXBvIgorCXJlcG89IiQxIgorCW1rZGlyIC1wICIkcmVwbyIKKwkoCisJCWNkICIkcmVwbyIgfHwgZXJyb3IgIkNhbm5vdCBzZXR1cCB0ZXN0IGVudmlyb25tZW50IgorCQkiJEdJVF9FWEVDX1BBVEgvZ2l0LWluaXQiICItLXRlbXBsYXRlPSRHSVRfQlVJTERfRElSL3RlbXBsYXRlcy9ibHQvIiA+JjMgMj4mNCB8fAorCQllcnJvciAiY2Fubm90IHJ1biBnaXQgaW5pdCAtLSBoYXZlIHlvdSBidWlsdCB0aGluZ3MgeWV0PyIKKwkJbXYgLmdpdC9ob29rcyAuZ2l0L2hvb2tzLWRpc2FibGVkCisJKSB8fCBleGl0Cit9CisKKyMgVGhpcyBmdW5jdGlvbiBoZWxwcyBvbiBzeW1saW5rIGNoYWxsZW5nZWQgZmlsZSBzeXN0ZW1zIHdoZW4gaXQgaXMgbm90CisjIGltcG9ydGFudCB0aGF0IHRoZSBmaWxlIHN5c3RlbSBlbnRyeSBpcyBhIHN5bWJvbGljIGxpbmsuCisjIFVzZSB0ZXN0X2xuX3NfYWRkIGluc3RlYWQgb2YgImxuIC1zIHggeSAmJiBnaXQgYWRkIHkiIHRvIGFkZCBhCisjIHN5bWJvbGljIGxpbmsgZW50cnkgeSB0byB0aGUgaW5kZXguCisKK3Rlc3RfbG5fc19hZGQgKCkgeworCWlmIHRlc3RfaGF2ZV9wcmVyZXEgU1lNTElOS1MKKwl0aGVuCisJCWxuIC1zICIkMSIgIiQyIiAmJgorCQlnaXQgdXBkYXRlLWluZGV4IC0tYWRkICIkMiIKKwllbHNlCisJCXByaW50ZiAnJXMnICIkMSIgPiIkMiIgJiYKKwkJbG5fc19vYmo9JChnaXQgaGFzaC1vYmplY3QgLXcgIiQyIikgJiYKKwkJZ2l0IHVwZGF0ZS1pbmRleCAtLWFkZCAtLWNhY2hlaW5mbyAxMjAwMDAgJGxuX3Nfb2JqICIkMiIgJiYKKwkJIyBwaWNrIHVwIHN0YXQgaW5mbyBmcm9tIHRoZSBmaWxlCisJCWdpdCB1cGRhdGUtaW5kZXggIiQyIgorCWZpCit9CisKKyMgVGhpcyBmdW5jdGlvbiB3cml0ZXMgb3V0IGl0cyBwYXJhbWV0ZXJzLCBvbmUgcGVyIGxpbmUKK3Rlc3Rfd3JpdGVfbGluZXMgKCkgeworCXByaW50ZiAiJXNcbiIgIiRAIgorfQorCitwZXJsICgpIHsKKwljb21tYW5kICIkUEVSTF9QQVRIIiAiJEAiCit9CisKKyMgSXMgdGhlIHZhbHVlIG9uZSBvZiB0aGUgdmFyaW91cyB3YXlzIHRvIHNwZWxsIGEgYm9vbGVhbiB0cnVlL2ZhbHNlPwordGVzdF9ub3JtYWxpemVfYm9vbCAoKSB7CisJZ2l0IC1jIG1hZ2ljLnZhcmlhYmxlPSIkMSIgY29uZmlnIC0tYm9vbCBtYWdpYy52YXJpYWJsZSAyPi9kZXYvbnVsbAorfQorCisjIEdpdmVuIGEgdmFyaWFibGUgJDEsIG5vcm1hbGl6ZSB0aGUgdmFsdWUgb2YgaXQgdG8gb25lIG9mICJ0cnVlIiwKKyMgImZhbHNlIiwgb3IgImF1dG8iIGFuZCBzdG9yZSB0aGUgcmVzdWx0IHRvIGl0LgorIworIyAgICAgdGVzdF90cmlzdGF0ZSBHSVRfVEVTVF9IVFRQRAorIworIyBBIHZhcmlhYmxlIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgaXMgc2V0IHRvICdmYWxzZScuCisjIEEgdmFyaWFibGUgc2V0IHRvICdmYWxzZScgb3IgJ2F1dG8nIGtlZXBzIGl0cyB2YWx1ZS4KKyMgQW55dGhpbmcgZWxzZSBpcyBzZXQgdG8gJ3RydWUnLgorIyBBbiB1bnNldCB2YXJpYWJsZSBkZWZhdWx0cyB0byAnYXV0bycuCisjCisjIFRoZSBsYXN0IHJ1bGUgaXMgdG8gYWxsb3cgcGVvcGxlIHRvIHNldCB0aGUgdmFyaWFibGUgdG8gYW4gZW1wdHkKKyMgc3RyaW5nIGFuZCBleHBvcnQgaXQgdG8gZGVjbGluZSB0ZXN0aW5nIHRoZSBwYXJ0aWN1bGFyIGZlYXR1cmUKKyMgZm9yIHZlcnNpb25zIGJvdGggYmVmb3JlIGFuZCBhZnRlciB0aGlzIGNoYW5nZS4gIFdlIHVzZWQgdG8gdHJlYXQKKyMgYm90aCB1bnNldCBhbmQgZW1wdHkgdmFyaWFibGUgYXMgYSBzaWduYWwgZm9yICJkbyBub3QgdGVzdCIgYW5kCisjIHRvb2sgYW55IG5vbi1lbXB0eSBzdHJpbmcgYXMgInBsZWFzZSB0ZXN0Ii4KKwordGVzdF90cmlzdGF0ZSAoKSB7CisJaWYgZXZhbCAidGVzdCB4XCJcJHskMStpc3NldH1cIiA9IHhpc3NldCIKKwl0aGVuCisJCSMgZXhwbGljaXRseSBzZXQKKwkJZXZhbCAiCisJCQljYXNlIFwiXCQkMVwiIGluCisJCQknJykJJDE9ZmFsc2UgOzsKKwkJCWF1dG8pCTs7CisJCQkqKQkkMT1cJCh0ZXN0X25vcm1hbGl6ZV9ib29sIFwkJDEgfHwgZWNobyB0cnVlKSA7OworCQkJZXNhYworCQkiCisJZWxzZQorCQlldmFsICIkMT1hdXRvIgorCWZpCit9CisKKyMgRXhpdCB0aGUgdGVzdCBzdWl0ZSwgZWl0aGVyIGJ5IHNraXBwaW5nIGFsbCByZW1haW5pbmcgdGVzdHMgb3IgYnkKKyMgZXhpdGluZyB3aXRoIGFuIGVycm9yLiBJZiAiJDEiIGlzICJhdXRvIiwgd2UgdGhlbiB3ZSBhc3N1bWUgd2Ugd2VyZQorIyBvcHBvcnR1bmlzdGljYWxseSB0cnlpbmcgdG8gc2V0IHVwIHNvbWUgdGVzdHMgYW5kIHdlIHNraXAuIElmIGl0IGlzCisjICJ0cnVlIiwgdGhlbiB3ZSByZXBvcnQgYSBmYWlsdXJlLgorIworIyBUaGUgZXJyb3Ivc2tpcCBtZXNzYWdlIHNob3VsZCBiZSBnaXZlbiBieSAkMi4KKyMKK3Rlc3Rfc2tpcF9vcl9kaWUgKCkgeworCWNhc2UgIiQxIiBpbgorCWF1dG8pCisJCXNraXBfYWxsPSQyCisJCXRlc3RfZG9uZQorCQk7OworCXRydWUpCisJCWVycm9yICIkMiIKKwkJOzsKKwkqKQorCQllcnJvciAiQlVHOiB0ZXN0IHRyaXN0YXRlIGlzICckMScgKHJlYWwgZXJyb3I6ICQyKSIKKwllc2FjCit9CisKKyMgVGhlIGZvbGxvd2luZyBtaW5nd18qIGZ1bmN0aW9ucyBvYmV5IFBPU0lYIHNoZWxsIHN5bnRheCwgYnV0IGFyZSBhY3R1YWxseQorIyBiYXNoIHNjcmlwdHMsIGFuZCBhcmUgbWVhbnQgdG8gYmUgdXNlZCBvbmx5IHdpdGggYmFzaCBvbiBXaW5kb3dzLgorCisjIEEgdGVzdF9jbXAgZnVuY3Rpb24gdGhhdCB0cmVhdHMgTEYgYW5kIENSTEYgZXF1YWwgYW5kIGF2b2lkcyB0byBmb3JrCisjIGRpZmYgd2hlbiBwb3NzaWJsZS4KK21pbmd3X3Rlc3RfY21wICgpIHsKKwkjIFJlYWQgdGV4dCBpbnRvIHNoZWxsIHZhcmlhYmxlcyBhbmQgY29tcGFyZSB0aGVtLiBJZiB0aGUgcmVzdWx0cworCSMgYXJlIGRpZmZlcmVudCwgdXNlIHJlZ3VsYXIgZGlmZiB0byByZXBvcnQgdGhlIGRpZmZlcmVuY2UuCisJbG9jYWwgdGVzdF9jbXBfYT0gdGVzdF9jbXBfYj0KKworCSMgV2hlbiB0ZXh0IGNhbWUgZnJvbSBzdGRpbiAob25lIGFyZ3VtZW50IGlzICctJykgd2UgbXVzdCBmZWVkIGl0CisJIyB0byBkaWZmLgorCWxvY2FsIHN0ZGluX2Zvcl9kaWZmPQorCisJIyBTaW5jZSBpdCBpcyBkaWZmaWN1bHQgdG8gZGV0ZWN0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYW4KKwkjIGVtcHR5IGlucHV0IGZpbGUgYW5kIGEgZmFpbHVyZSB0byByZWFkIHRoZSBmaWxlcywgd2UgZ28gc3RyYWlnaHQKKwkjIHRvIGRpZmYgaWYgb25lIG9mIHRoZSBpbnB1dHMgaXMgZW1wdHkuCisJaWYgdGVzdCAtcyAiJDEiICYmIHRlc3QgLXMgIiQyIgorCXRoZW4KKwkJIyByZWd1bGFyIGNhc2U6IGJvdGggZmlsZXMgbm9uLWVtcHR5CisJCW1pbmd3X3JlYWRfZmlsZV9zdHJpcF9jcl8gdGVzdF9jbXBfYSA8IiQxIgorCQltaW5nd19yZWFkX2ZpbGVfc3RyaXBfY3JfIHRlc3RfY21wX2IgPCIkMiIKKwllbGlmIHRlc3QgLXMgIiQxIiAmJiB0ZXN0ICIkMiIgPSAtCisJdGhlbgorCQkjIHJlYWQgMm5kIGZpbGUgZnJvbSBzdGRpbgorCQltaW5nd19yZWFkX2ZpbGVfc3RyaXBfY3JfIHRlc3RfY21wX2EgPCIkMSIKKwkJbWluZ3dfcmVhZF9maWxlX3N0cmlwX2NyXyB0ZXN0X2NtcF9iCisJCXN0ZGluX2Zvcl9kaWZmPSc8PDwiJHRlc3RfY21wX2IiJworCWVsaWYgdGVzdCAiJDEiID0gLSAmJiB0ZXN0IC1zICIkMiIKKwl0aGVuCisJCSMgcmVhZCAxc3QgZmlsZSBmcm9tIHN0ZGluCisJCW1pbmd3X3JlYWRfZmlsZV9zdHJpcF9jcl8gdGVzdF9jbXBfYQorCQltaW5nd19yZWFkX2ZpbGVfc3RyaXBfY3JfIHRlc3RfY21wX2IgPCIkMiIKKwkJc3RkaW5fZm9yX2RpZmY9Jzw8PCIkdGVzdF9jbXBfYSInCisJZmkKKwl0ZXN0IC1uICIkdGVzdF9jbXBfYSIgJiYKKwl0ZXN0IC1uICIkdGVzdF9jbXBfYiIgJiYKKwl0ZXN0ICIkdGVzdF9jbXBfYSIgPSAiJHRlc3RfY21wX2IiIHx8CisJZXZhbCAiZGlmZiAtdSBcIlwkQFwiICRzdGRpbl9mb3JfZGlmZiIKK30KKworIyAkMSBpcyB0aGUgbmFtZSBvZiB0aGUgc2hlbGwgdmFyaWFibGUgdG8gZmlsbCBpbgorbWluZ3dfcmVhZF9maWxlX3N0cmlwX2NyXyAoKSB7CisJIyBSZWFkIGxpbmUtd2lzZSB1c2luZyBMRiBhcyB0aGUgbGluZSBzZXBhcmF0b3IKKwkjIGFuZCB1c2UgSUZTIHRvIHN0cmlwIENSLgorCWxvY2FsIGxpbmUKKwl3aGlsZSA6CisJZG8KKwkJaWYgSUZTPSQnXHInIHJlYWQgLXIgLWQgJCdcbicgbGluZQorCQl0aGVuCisJCQkjIGdvb2QKKwkJCWxpbmU9JGxpbmUkJ1xuJworCQllbHNlCisJCQkjIHdlIGdldCBoZXJlIGF0IEVPRiwgYnV0IGFsc28gaWYgdGhlIGxhc3QgbGluZQorCQkJIyB3YXMgbm90IHRlcm1pbmF0ZWQgYnkgTEY7IGluIHRoZSBsYXR0ZXIgY2FzZSwKKwkJCSMgc29tZSB0ZXh0IHdhcyByZWFkCisJCQlpZiB0ZXN0IC16ICIkbGluZSIKKwkJCXRoZW4KKwkJCQkjIEVPRiwgcmVhbGx5CisJCQkJYnJlYWsKKwkJCWZpCisJCWZpCisJCWV2YWwgIiQxPVwkJDFcJGxpbmUiCisJZG9uZQorfQpkaWZmIC0tZ2l0IGEvdC90ZXN0LWxpYi5zaCBiL3QvdGVzdC1saWIuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZjNGQ3YgotLS0gL2Rldi9udWxsCisrKyBiL3QvdGVzdC1saWIuc2gKQEAgLTAsMCArMSwxMDkwIEBACisjIFRlc3QgZnJhbWV3b3JrIGZvciBnaXQuICBTZWUgdC9SRUFETUUgZm9yIHVzYWdlLgorIworIyBDb3B5cmlnaHQgKGMpIDIwMDUgSnVuaW8gQyBIYW1hbm8KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvIC4KKworIyBUZXN0IHRoZSBiaW5hcmllcyB3ZSBoYXZlIGp1c3QgYnVpbHQuICBUaGUgdGVzdHMgYXJlIGtlcHQgaW4KKyMgdC8gc3ViZGlyZWN0b3J5IGFuZCBhcmUgcnVuIGluICd0cmFzaCBkaXJlY3RvcnknIHN1YmRpcmVjdG9yeS4KK2lmIHRlc3QgLXogIiRURVNUX0RJUkVDVE9SWSIKK3RoZW4KKwkjIFdlIGFsbG93IHRlc3RzIHRvIG92ZXJyaWRlIHRoaXMsIGluIGNhc2UgdGhleSB3YW50IHRvIHJ1biB0ZXN0cworCSMgb3V0c2lkZSBvZiB0LywgZS5nLiBmb3IgcnVubmluZyB0ZXN0cyBvbiB0aGUgdGVzdCBsaWJyYXJ5CisJIyBpdHNlbGYuCisJVEVTVF9ESVJFQ1RPUlk9JChwd2QpCitlbHNlCisJIyBlbnN1cmUgdGhhdCBURVNUX0RJUkVDVE9SWSBpcyBhbiBhYnNvbHV0ZSBwYXRoIHNvIHRoYXQgaXQKKwkjIGlzIHZhbGlkIGV2ZW4gaWYgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgaXMgY2hhbmdlZAorCVRFU1RfRElSRUNUT1JZPSQoY2QgIiRURVNUX0RJUkVDVE9SWSIgJiYgcHdkKSB8fCBleGl0IDEKK2ZpCitpZiB0ZXN0IC16ICIkVEVTVF9PVVRQVVRfRElSRUNUT1JZIgordGhlbgorCSMgU2ltaWxhcmx5LCBvdmVycmlkZSB0aGlzIHRvIHN0b3JlIHRoZSB0ZXN0LXJlc3VsdHMgc3ViZGlyCisJIyBlbHNld2hlcmUKKwlURVNUX09VVFBVVF9ESVJFQ1RPUlk9JFRFU1RfRElSRUNUT1JZCitmaQorR0lUX0JVSUxEX0RJUj0iJFRFU1RfRElSRUNUT1JZIi8uLgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEl0IGFwcGVhcnMgdGhhdCBwZW9wbGUgdHJ5IHRvIHJ1biB0ZXN0cyB3aXRob3V0IGJ1aWxkaW5nLi4uCisiJEdJVF9CVUlMRF9ESVIvZ2l0IiA+L2Rldi9udWxsCitpZiB0ZXN0ICQ/ICE9IDEKK3RoZW4KKwllY2hvID4mMiAnZXJyb3I6IHlvdSBkbyBub3Qgc2VlbSB0byBoYXZlIGJ1aWx0IGdpdCB5ZXQuJworCWV4aXQgMQorZmkKKworLiAiJEdJVF9CVUlMRF9ESVIiL0dJVC1CVUlMRC1PUFRJT05TCitleHBvcnQgUEVSTF9QQVRIIFNIRUxMX1BBVEgKKworIyBpZiAtLXRlZSB3YXMgcGFzc2VkLCB3cml0ZSB0aGUgb3V0cHV0IG5vdCBvbmx5IHRvIHRoZSB0ZXJtaW5hbCwgYnV0CisjIGFkZGl0aW9uYWxseSB0byB0aGUgZmlsZSB0ZXN0LXJlc3VsdHMvJEJBU0VOQU1FLm91dCwgdG9vLgorY2FzZSAiJEdJVF9URVNUX1RFRV9TVEFSVEVELCAkKiAiIGluCitkb25lLCopCisJIyBkbyBub3QgcmVkaXJlY3QgYWdhaW4KKwk7OworKicgLS10ZWUgJyp8KicgLS12YScqKQorCW1rZGlyIC1wICIkVEVTVF9PVVRQVVRfRElSRUNUT1JZL3Rlc3QtcmVzdWx0cyIKKwlCQVNFPSIkVEVTVF9PVVRQVVRfRElSRUNUT1JZL3Rlc3QtcmVzdWx0cy8kKGJhc2VuYW1lICIkMCIgLnNoKSIKKwkoR0lUX1RFU1RfVEVFX1NUQVJURUQ9ZG9uZSAke1NIRUxMX1BBVEh9ICIkMCIgIiRAIiAyPiYxOworCSBlY2hvICQ/ID4gJEJBU0UuZXhpdCkgfCB0ZWUgJEJBU0Uub3V0CisJdGVzdCAiJChjYXQgJEJBU0UuZXhpdCkiID0gMAorCWV4aXQKKwk7OworZXNhYworCisjIEZvciByZXBlYXRhYmlsaXR5LCByZXNldCB0aGUgZW52aXJvbm1lbnQgdG8ga25vd24gdmFsdWUuCisjIFRFUk0gaXMgc2FuaXRpemVkIGJlbG93LCBhZnRlciBzYXZpbmcgY29sb3IgY29udHJvbCBzZXF1ZW5jZXMuCitMQU5HPUMKK0xDX0FMTD1DCitQQUdFUj1jYXQKK1RaPVVUQworZXhwb3J0IExBTkcgTENfQUxMIFBBR0VSIFRaCitFRElUT1I9OgorIyBBIGNhbGwgdG8gInVuc2V0IiB3aXRoIG5vIGFyZ3VtZW50cyBjYXVzZXMgYXQgbGVhc3QgU29sYXJpcyAxMAorIyAvdXNyL3hwZzQvYmluL3NoIGFuZCAvYmluL2tzaCB0byBiYWlsIG91dC4gIFNvIGtlZXAgdGhlIHVuc2V0cworIyBkZXJpdmluZyBmcm9tIHRoZSBjb21tYW5kIHN1YnN0aXR1dGlvbiBjbHVzdGVyZWQgd2l0aCB0aGUgb3RoZXIKKyMgb25lcy4KK3Vuc2V0IFZJU1VBTCBFTUFJTCBMQU5HVUFHRSBDT0xVTU5TICQoIiRQRVJMX1BBVEgiIC1lICcKKwlteSBAZW52ID0ga2V5cyAlRU5WOworCW15ICRvayA9IGpvaW4oInwiLCBxdygKKwkJVFJBQ0UKKwkJREVCVUcKKwkJVVNFX0xPT0tVUAorCQlURVNUCisJCS4qX1RFU1QKKwkJUFJPVkUKKwkJVkFMR1JJTkQKKwkJVU5aSVAKKwkJUEVSRl8KKwkJQ1VSTF9WRVJCT1NFCisJKSk7CisJbXkgQHZhcnMgPSBncmVwKC9eR0lUXy8gJiYgIS9eR0lUXygkb2spL28sIEBlbnYpOworCXByaW50IGpvaW4oIlxuIiwgQHZhcnMpOworJykKK3Vuc2V0IFhER19DT05GSUdfSE9NRQordW5zZXQgR0lUUEVSTExJQgorR0lUX0FVVEhPUl9FTUFJTD1hdXRob3JAZXhhbXBsZS5jb20KK0dJVF9BVVRIT1JfTkFNRT0nQSBVIFRob3InCitHSVRfQ09NTUlUVEVSX0VNQUlMPWNvbW1pdHRlckBleGFtcGxlLmNvbQorR0lUX0NPTU1JVFRFUl9OQU1FPSdDIE8gTWl0dGVyJworR0lUX01FUkdFX1ZFUkJPU0lUWT01CitHSVRfTUVSR0VfQVVUT0VESVQ9bm8KK2V4cG9ydCBHSVRfTUVSR0VfVkVSQk9TSVRZIEdJVF9NRVJHRV9BVVRPRURJVAorZXhwb3J0IEdJVF9BVVRIT1JfRU1BSUwgR0lUX0FVVEhPUl9OQU1FCitleHBvcnQgR0lUX0NPTU1JVFRFUl9FTUFJTCBHSVRfQ09NTUlUVEVSX05BTUUKK2V4cG9ydCBFRElUT1IKKworIyBUZXN0cyB1c2luZyBHSVRfVFJBQ0UgdHlwaWNhbGx5IGRvbid0IHdhbnQgPHRpbWVzdGFtcD4gPGZpbGU+OjxsaW5lPiBvdXRwdXQKK0dJVF9UUkFDRV9CQVJFPTEKK2V4cG9ydCBHSVRfVFJBQ0VfQkFSRQorCitpZiB0ZXN0IC1uICIke1RFU1RfR0lUX0lOREVYX1ZFUlNJT046K2lzc2V0fSIKK3RoZW4KKwlHSVRfSU5ERVhfVkVSU0lPTj0iJFRFU1RfR0lUX0lOREVYX1ZFUlNJT04iCisJZXhwb3J0IEdJVF9JTkRFWF9WRVJTSU9OCitmaQorCisjIEFkZCBsaWJjIE1BTExPQyBhbmQgTUFMTE9DX1BFUlRVUkIgdGVzdAorIyBvbmx5IGlmIHdlIGFyZSBub3QgZXhlY3V0aW5nIHRoZSB0ZXN0IHdpdGggdmFsZ3JpbmQKK2lmIGV4cHIgIiAkR0lUX1RFU1RfT1BUUyAiIDogIi4qIC0tdmFsZ3JpbmQgIiA+L2Rldi9udWxsIHx8CisgICB0ZXN0IC1uICIkVEVTVF9OT19NQUxMT0NfQ0hFQ0siCit0aGVuCisJc2V0dXBfbWFsbG9jX2NoZWNrICgpIHsKKwkJOiBub3RoaW5nCisJfQorCXRlYXJkb3duX21hbGxvY19jaGVjayAoKSB7CisJCTogbm90aGluZworCX0KK2Vsc2UKKwlzZXR1cF9tYWxsb2NfY2hlY2sgKCkgeworCQlNQUxMT0NfQ0hFQ0tfPTMJTUFMTE9DX1BFUlRVUkJfPTE2NQorCQlleHBvcnQgTUFMTE9DX0NIRUNLXyBNQUxMT0NfUEVSVFVSQl8KKwl9CisJdGVhcmRvd25fbWFsbG9jX2NoZWNrICgpIHsKKwkJdW5zZXQgTUFMTE9DX0NIRUNLXyBNQUxMT0NfUEVSVFVSQl8KKwl9CitmaQorCis6ICR7QVNBTl9PUFRJT05TPWRldGVjdF9sZWFrcz0wfQorZXhwb3J0IEFTQU5fT1BUSU9OUworCisjIFByb3RlY3Qgb3Vyc2VsdmVzIGZyb20gY29tbW9uIG1pc2NvbmZpZ3VyYXRpb24gdG8gZXhwb3J0CisjIENEUEFUSCBpbnRvIHRoZSBlbnZpcm9ubWVudAordW5zZXQgQ0RQQVRICisKK3Vuc2V0IEdSRVBfT1BUSU9OUwordW5zZXQgVU5aSVAKKworY2FzZSAkKGVjaG8gJEdJVF9UUkFDRSB8dHIgIltBLVpdIiAiW2Etel0iKSBpbgorMXwyfHRydWUpCisJR0lUX1RSQUNFPTQKKwk7OworZXNhYworCisjIENvbnZlbmllbmNlCisjCisjIEEgcmVnZXhwIHRvIG1hdGNoIDUgYW5kIDQwIGhleGRpZ2l0cworX3gwNT0nWzAtOWEtZl1bMC05YS1mXVswLTlhLWZdWzAtOWEtZl1bMC05YS1mXScKK194NDA9IiRfeDA1JF94MDUkX3gwNSRfeDA1JF94MDUkX3gwNSRfeDA1JF94MDUiCisKKyMgWmVybyBTSEEtMQorX3o0MD0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCisKKyMgTGluZSBmZWVkCitMRj0nCisnCisKKyMgVVRGLTggWkVSTyBXSURUSCBOT04tSk9JTkVSLCB3aGljaCBIRlMrIGlnbm9yZXMKKyMgd2hlbiBjYXNlLWZvbGRpbmcgZmlsZW5hbWVzCit1MjAwYz0kKHByaW50ZiAnXDM0MlwyMDBcMjE0JykKKworZXhwb3J0IF94MDUgX3g0MCBfejQwIExGIHUyMDBjCisKKyMgRWFjaCB0ZXN0IHNob3VsZCBzdGFydCB3aXRoIHNvbWV0aGluZyBsaWtlIHRoaXMsIGFmdGVyIGNvcHlyaWdodCBub3RpY2VzOgorIworIyB0ZXN0X2Rlc2NyaXB0aW9uPSdEZXNjcmlwdGlvbiBvZiB0aGlzIHRlc3QuLi4KKyMgVGhpcyB0ZXN0IGNoZWNrcyBpZiBjb21tYW5kIHh5enp5IGRvZXMgdGhlIHJpZ2h0IHRoaW5nLi4uCisjICcKKyMgLiAuL3Rlc3QtbGliLnNoCit0ZXN0ICJ4JFRFUk0iICE9ICJ4ZHVtYiIgJiYgKAorCQl0ZXN0IC10IDEgJiYKKwkJdHB1dCBib2xkID4vZGV2L251bGwgMj4mMSAmJgorCQl0cHV0IHNldGFmIDEgPi9kZXYvbnVsbCAyPiYxICYmCisJCXRwdXQgc2dyMCA+L2Rldi9udWxsIDI+JjEKKwkpICYmCisJY29sb3I9dAorCit3aGlsZSB0ZXN0ICIkIyIgLW5lIDAKK2RvCisJY2FzZSAiJDEiIGluCisJLWR8LS1kfC0tZGV8LS1kZWJ8LS1kZWJ1fC0tZGVidWcpCisJCWRlYnVnPXQ7IHNoaWZ0IDs7CisJLWl8LS1pfC0taW18LS1pbW18LS1pbW1lfC0taW1tZWR8LS1pbW1lZGl8LS1pbW1lZGlhfC0taW1tZWRpYXR8LS1pbW1lZGlhdGUpCisJCWltbWVkaWF0ZT10OyBzaGlmdCA7OworCS1sfC0tbHwtLWxvfC0tbG9ufC0tbG9uZ3wtLWxvbmctfC0tbG9uZy10fC0tbG9uZy10ZXwtLWxvbmctdGVzfC0tbG9uZy10ZXN0fC0tbG9uZy10ZXN0cykKKwkJR0lUX1RFU1RfTE9ORz10OyBleHBvcnQgR0lUX1RFU1RfTE9ORzsgc2hpZnQgOzsKKwktcikKKwkJc2hpZnQ7IHRlc3QgIiQjIiAtbmUgMCB8fCB7CisJCQllY2hvICdlcnJvcjogLXIgcmVxdWlyZXMgYW4gYXJndW1lbnQnID4mMjsKKwkJCWV4aXQgMTsKKwkJfQorCQlydW5fbGlzdD0kMTsgc2hpZnQgOzsKKwktLXJ1bj0qKQorCQlydW5fbGlzdD0kKGV4cHIgInokMSIgOiAneltePV0qPVwoLipcKScpOyBzaGlmdCA7OworCS1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKwkJaGVscD10OyBzaGlmdCA7OworCS12fC0tdnwtLXZlfC0tdmVyfC0tdmVyYnwtLXZlcmJvfC0tdmVyYm9zfC0tdmVyYm9zZSkKKwkJdmVyYm9zZT10OyBzaGlmdCA7OworCS0tdmVyYm9zZS1vbmx5PSopCisJCXZlcmJvc2Vfb25seT0kKGV4cHIgInokMSIgOiAneltePV0qPVwoLipcKScpCisJCXNoaWZ0IDs7CisJLXF8LS1xfC0tcXV8LS1xdWl8LS1xdWllfC0tcXVpZXQpCisJCSMgSWdub3JlIC0tcXVpZXQgdW5kZXIgYSBUQVA6Okhhcm5lc3MuIFNheWluZyBob3cgbWFueSB0ZXN0cworCQkjIHBhc3NlZCB3aXRob3V0IHRoZSBvay9ub3Qgb2sgZGV0YWlscyBpcyBhbHdheXMgYW4gZXJyb3IuCisJCXRlc3QgLXogIiRIQVJORVNTX0FDVElWRSIgJiYgcXVpZXQ9dDsgc2hpZnQgOzsKKwktLXdpdGgtZGFzaGVzKQorCQl3aXRoX2Rhc2hlcz10OyBzaGlmdCA7OworCS0tbm8tY29sb3IpCisJCWNvbG9yPTsgc2hpZnQgOzsKKwktLXZhfC0tdmFsfC0tdmFsZ3wtLXZhbGdyfC0tdmFsZ3JpfC0tdmFsZ3JpbnwtLXZhbGdyaW5kKQorCQl2YWxncmluZD1tZW1jaGVjaworCQlzaGlmdCA7OworCS0tdmFsZ3JpbmQ9KikKKwkJdmFsZ3JpbmQ9JChleHByICJ6JDEiIDogJ3pbXj1dKj1cKC4qXCknKQorCQlzaGlmdCA7OworCS0tdmFsZ3JpbmQtb25seT0qKQorCQl2YWxncmluZF9vbmx5PSQoZXhwciAieiQxIiA6ICd6W149XSo9XCguKlwpJykKKwkJc2hpZnQgOzsKKwktLXRlZSkKKwkJc2hpZnQgOzsgIyB3YXMgaGFuZGxlZCBhbHJlYWR5CisJLS1yb290PSopCisJCXJvb3Q9JChleHByICJ6JDEiIDogJ3pbXj1dKj1cKC4qXCknKQorCQlzaGlmdCA7OworCS0tY2hhaW4tbGludCkKKwkJR0lUX1RFU1RfQ0hBSU5fTElOVD0xCisJCXNoaWZ0IDs7CisJLS1uby1jaGFpbi1saW50KQorCQlHSVRfVEVTVF9DSEFJTl9MSU5UPTAKKwkJc2hpZnQgOzsKKwkteCkKKwkJdHJhY2U9dAorCQl2ZXJib3NlPXQKKwkJc2hpZnQgOzsKKwkqKQorCQllY2hvICJlcnJvcjogdW5rbm93biB0ZXN0IG9wdGlvbiAnJDEnIiA+JjI7IGV4aXQgMSA7OworCWVzYWMKK2RvbmUKKworaWYgdGVzdCAtbiAiJHZhbGdyaW5kX29ubHkiCit0aGVuCisJdGVzdCAteiAiJHZhbGdyaW5kIiAmJiB2YWxncmluZD1tZW1jaGVjaworCXRlc3QgLXogIiR2ZXJib3NlIiAmJiB2ZXJib3NlX29ubHk9IiR2YWxncmluZF9vbmx5IgorZWxpZiB0ZXN0IC1uICIkdmFsZ3JpbmQiCit0aGVuCisJdmVyYm9zZT10CitmaQorCitpZiB0ZXN0IC1uICIkY29sb3IiCit0aGVuCisJIyBTYXZlIHRoZSBjb2xvciBjb250cm9sIHNlcXVlbmNlcyBub3cgcmF0aGVyIHRoYW4gcnVuIHRwdXQKKwkjIGVhY2ggdGltZSBzYXlfY29sb3IoKSBpcyBjYWxsZWQuICBUaGlzIGlzIGRvbmUgZm9yIHR3bworCSMgcmVhc29uczoKKwkjICAgKiBURVJNIHdpbGwgYmUgY2hhbmdlZCB0byBkdW1iCisJIyAgICogSE9NRSB3aWxsIGJlIGNoYW5nZWQgdG8gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCB0cHV0CisJIyAgICAgbWlnaHQgbmVlZCB0byByZWFkIH4vLnRlcm1pbmZvIGZyb20gdGhlIG9yaWdpbmFsIEhPTUUKKwkjICAgICBkaXJlY3RvcnkgdG8gZ2V0IHRoZSBjb250cm9sIHNlcXVlbmNlcworCSMgTm90ZTogIFRoaXMgYXBwcm9hY2ggYXNzdW1lcyB0aGUgY29udHJvbCBzZXF1ZW5jZXMgZG9uJ3QgZW5kCisJIyBpbiBhIG5ld2xpbmUgZm9yIGFueSB0ZXJtaW5hbCBvZiBpbnRlcmVzdCAoY29tbWFuZAorCSMgc3Vic3RpdHV0aW9ucyBzdHJpcCB0cmFpbGluZyBuZXdsaW5lcykuICBHaXZlbiB0aGF0IG1vc3QKKwkjIChhbGw/KSB0ZXJtaW5hbHMgaW4gY29tbW9uIHVzZSBhcmUgcmVsYXRlZCB0byBFQ01BLTQ4LCB0aGlzCisJIyBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLgorCXNheV9jb2xvcl9lcnJvcj0kKHRwdXQgYm9sZDsgdHB1dCBzZXRhZiAxKSAjIGJvbGQgcmVkCisJc2F5X2NvbG9yX3NraXA9JCh0cHV0IHNldGFmIDQpICMgYmx1ZQorCXNheV9jb2xvcl93YXJuPSQodHB1dCBzZXRhZiAzKSAjIGJyb3duL3llbGxvdworCXNheV9jb2xvcl9wYXNzPSQodHB1dCBzZXRhZiAyKSAjIGdyZWVuCisJc2F5X2NvbG9yX2luZm89JCh0cHV0IHNldGFmIDYpICMgY3lhbgorCXNheV9jb2xvcl9yZXNldD0kKHRwdXQgc2dyMCkKKwlzYXlfY29sb3JfPSIiICMgbm8gZm9ybWF0dGluZyBmb3Igbm9ybWFsIHRleHQKKwlzYXlfY29sb3IgKCkgeworCQl0ZXN0IC16ICIkMSIgJiYgdGVzdCAtbiAiJHF1aWV0IiAmJiByZXR1cm4KKwkJZXZhbCAic2F5X2NvbG9yX2NvbG9yPVwkc2F5X2NvbG9yXyQxIgorCQlzaGlmdAorCQlwcmludGYgIiVzXFxuIiAiJHNheV9jb2xvcl9jb2xvciQqJHNheV9jb2xvcl9yZXNldCIKKwl9CitlbHNlCisJc2F5X2NvbG9yKCkgeworCQl0ZXN0IC16ICIkMSIgJiYgdGVzdCAtbiAiJHF1aWV0IiAmJiByZXR1cm4KKwkJc2hpZnQKKwkJcHJpbnRmICIlc1xuIiAiJCoiCisJfQorZmkKKworVEVSTT1kdW1iCitleHBvcnQgVEVSTQorCitlcnJvciAoKSB7CisJc2F5X2NvbG9yIGVycm9yICJlcnJvcjogJCoiCisJR0lUX0VYSVRfT0s9dAorCWV4aXQgMQorfQorCitzYXkgKCkgeworCXNheV9jb2xvciBpbmZvICIkKiIKK30KKwordGVzdCAiJHt0ZXN0X2Rlc2NyaXB0aW9ufSIgIT0gIiIgfHwKK2Vycm9yICJUZXN0IHNjcmlwdCBkaWQgbm90IHNldCB0ZXN0X2Rlc2NyaXB0aW9uLiIKKworaWYgdGVzdCAiJGhlbHAiID0gInQiCit0aGVuCisJcHJpbnRmICclc1xuJyAiJHRlc3RfZGVzY3JpcHRpb24iCisJZXhpdCAwCitmaQorCitleGVjIDU+JjEKK2V4ZWMgNjwmMAoraWYgdGVzdCAiJHZlcmJvc2UiID0gInQiCit0aGVuCisJZXhlYyA0PiYyIDM+JjEKK2Vsc2UKKwlleGVjIDQ+L2Rldi9udWxsIDM+L2Rldi9udWxsCitmaQorCit0ZXN0X2ZhaWx1cmU9MAordGVzdF9jb3VudD0wCit0ZXN0X2ZpeGVkPTAKK3Rlc3RfYnJva2VuPTAKK3Rlc3Rfc3VjY2Vzcz0wCisKK3Rlc3RfZXh0ZXJuYWxfaGFzX3RhcD0wCisKK2RpZSAoKSB7CisJY29kZT0kPworCWlmIHRlc3QgLW4gIiRHSVRfRVhJVF9PSyIKKwl0aGVuCisJCWV4aXQgJGNvZGUKKwllbHNlCisJCWVjaG8gPiY1ICJGQVRBTDogVW5leHBlY3RlZCBleGl0IHdpdGggY29kZSAkY29kZSIKKwkJZXhpdCAxCisJZmkKK30KKworR0lUX0VYSVRfT0s9Cit0cmFwICdkaWUnIEVYSVQKK3RyYXAgJ2V4aXQgJD8nIElOVAorCisjIFRoZSB1c2VyLWZhY2luZyBmdW5jdGlvbnMgYXJlIGxvYWRlZCBmcm9tIGEgc2VwYXJhdGUgZmlsZSBzbyB0aGF0CisjIHRlc3RfcGVyZiBzdWJzaGVsbHMgY2FuIGhhdmUgdGhlbSB0b28KKy4gIiRURVNUX0RJUkVDVE9SWS90ZXN0LWxpYi1mdW5jdGlvbnMuc2giCisKKyMgWW91IGFyZSBub3QgZXhwZWN0ZWQgdG8gY2FsbCB0ZXN0X29rXyBhbmQgdGVzdF9mYWlsdXJlXyBkaXJlY3RseSwgdXNlCisjIHRoZSB0ZXN0X2V4cGVjdF8qIGZ1bmN0aW9ucyBpbnN0ZWFkLgorCit0ZXN0X29rXyAoKSB7CisJdGVzdF9zdWNjZXNzPSQoKCR0ZXN0X3N1Y2Nlc3MgKyAxKSkKKwlzYXlfY29sb3IgIiIgIm9rICR0ZXN0X2NvdW50IC0gJEAiCit9CisKK3Rlc3RfZmFpbHVyZV8gKCkgeworCXRlc3RfZmFpbHVyZT0kKCgkdGVzdF9mYWlsdXJlICsgMSkpCisJc2F5X2NvbG9yIGVycm9yICJub3Qgb2sgJHRlc3RfY291bnQgLSAkMSIKKwlzaGlmdAorCXByaW50ZiAnJXNcbicgIiQqIiB8IHNlZCAtZSAncy9eLyMJLycKKwl0ZXN0ICIkaW1tZWRpYXRlIiA9ICIiIHx8IHsgR0lUX0VYSVRfT0s9dDsgZXhpdCAxOyB9Cit9CisKK3Rlc3Rfa25vd25fYnJva2VuX29rXyAoKSB7CisJdGVzdF9maXhlZD0kKCgkdGVzdF9maXhlZCsxKSkKKwlzYXlfY29sb3IgZXJyb3IgIm9rICR0ZXN0X2NvdW50IC0gJEAgIyBUT0RPIGtub3duIGJyZWFrYWdlIHZhbmlzaGVkIgorfQorCit0ZXN0X2tub3duX2Jyb2tlbl9mYWlsdXJlXyAoKSB7CisJdGVzdF9icm9rZW49JCgoJHRlc3RfYnJva2VuKzEpKQorCXNheV9jb2xvciB3YXJuICJub3Qgb2sgJHRlc3RfY291bnQgLSAkQCAjIFRPRE8ga25vd24gYnJlYWthZ2UiCit9CisKK3Rlc3RfZGVidWcgKCkgeworCXRlc3QgIiRkZWJ1ZyIgPSAiIiB8fCBldmFsICIkMSIKK30KKworbWF0Y2hfcGF0dGVybl9saXN0ICgpIHsKKwlhcmc9IiQxIgorCXNoaWZ0CisJdGVzdCAteiAiJCoiICYmIHJldHVybiAxCisJZm9yIHBhdHRlcm5fCisJZG8KKwkJY2FzZSAiJGFyZyIgaW4KKwkJJHBhdHRlcm5fKQorCQkJcmV0dXJuIDAKKwkJZXNhYworCWRvbmUKKwlyZXR1cm4gMQorfQorCittYXRjaF90ZXN0X3NlbGVjdG9yX2xpc3QgKCkgeworCXRpdGxlPSIkMSIKKwlzaGlmdAorCWFyZz0iJDEiCisJc2hpZnQKKwl0ZXN0IC16ICIkMSIgJiYgcmV0dXJuIDAKKworCSMgQm90aCBjb21tYXMgYW5kIHdoaXRlc3BhY2UgYXJlIGFjY2VwdGVkIGFzIHNlcGFyYXRvcnMuCisJT0xESUZTPSRJRlMKKwlJRlM9JyAJLCcKKwlzZXQgLS0gJDEKKwlJRlM9JE9MRElGUworCisJIyBJZiB0aGUgZmlyc3Qgc2VsZWN0b3IgaXMgbmVnYXRpdmUgd2UgaW5jbHVkZSBieSBkZWZhdWx0LgorCWluY2x1ZGU9CisJY2FzZSAiJDEiIGluCisJCSEqKSBpbmNsdWRlPXQgOzsKKwllc2FjCisKKwlmb3Igc2VsZWN0b3IKKwlkbworCQlvcmlnX3NlbGVjdG9yPSRzZWxlY3RvcgorCisJCXBvc2l0aXZlPXQKKwkJY2FzZSAiJHNlbGVjdG9yIiBpbgorCQkJISopCisJCQkJcG9zaXRpdmU9CisJCQkJc2VsZWN0b3I9JHtzZWxlY3RvciMjP30KKwkJCQk7OworCQllc2FjCisKKwkJdGVzdCAteiAiJHNlbGVjdG9yIiAmJiBjb250aW51ZQorCisJCWNhc2UgIiRzZWxlY3RvciIgaW4KKwkJCSotKikKKwkJCQlpZiBleHByICJ6JHtzZWxlY3RvciUlLSp9IiA6ICJ6WzAtOV0qW14wLTldIiA+L2Rldi9udWxsCisJCQkJdGhlbgorCQkJCQllY2hvICJlcnJvcjogJHRpdGxlOiBpbnZhbGlkIG5vbi1udW1lcmljIGluIHJhbmdlIiBcCisJCQkJCQkic3RhcnQ6ICckb3JpZ19zZWxlY3RvciciID4mMgorCQkJCQlleGl0IDEKKwkJCQlmaQorCQkJCWlmIGV4cHIgInoke3NlbGVjdG9yIyotfSIgOiAielswLTldKlteMC05XSIgPi9kZXYvbnVsbAorCQkJCXRoZW4KKwkJCQkJZWNobyAiZXJyb3I6ICR0aXRsZTogaW52YWxpZCBub24tbnVtZXJpYyBpbiByYW5nZSIgXAorCQkJCQkJImVuZDogJyRvcmlnX3NlbGVjdG9yJyIgPiYyCisJCQkJCWV4aXQgMQorCQkJCWZpCisJCQkJOzsKKwkJCSopCisJCQkJaWYgZXhwciAieiRzZWxlY3RvciIgOiAielswLTldKlteMC05XSIgPi9kZXYvbnVsbAorCQkJCXRoZW4KKwkJCQkJZWNobyAiZXJyb3I6ICR0aXRsZTogaW52YWxpZCBub24tbnVtZXJpYyBpbiB0ZXN0IiBcCisJCQkJCQkic2VsZWN0b3I6ICckb3JpZ19zZWxlY3RvciciID4mMgorCQkJCQlleGl0IDEKKwkJCQlmaQorCQllc2FjCisKKwkJIyBTaG9ydCBjdXQgZm9yICJvYnZpb3VzIiBjYXNlcworCQl0ZXN0IC16ICIkaW5jbHVkZSIgJiYgdGVzdCAteiAiJHBvc2l0aXZlIiAmJiBjb250aW51ZQorCQl0ZXN0IC1uICIkaW5jbHVkZSIgJiYgdGVzdCAtbiAiJHBvc2l0aXZlIiAmJiBjb250aW51ZQorCisJCWNhc2UgIiRzZWxlY3RvciIgaW4KKwkJCS0qKQorCQkJCWlmIHRlc3QgJGFyZyAtbGUgJHtzZWxlY3RvciMtfQorCQkJCXRoZW4KKwkJCQkJaW5jbHVkZT0kcG9zaXRpdmUKKwkJCQlmaQorCQkJCTs7CisJCQkqLSkKKwkJCQlpZiB0ZXN0ICRhcmcgLWdlICR7c2VsZWN0b3IlLX0KKwkJCQl0aGVuCisJCQkJCWluY2x1ZGU9JHBvc2l0aXZlCisJCQkJZmkKKwkJCQk7OworCQkJKi0qKQorCQkJCWlmIHRlc3QgJHtzZWxlY3RvciUlLSp9IC1sZSAkYXJnIFwKKwkJCQkJJiYgdGVzdCAkYXJnIC1sZSAke3NlbGVjdG9yIyotfQorCQkJCXRoZW4KKwkJCQkJaW5jbHVkZT0kcG9zaXRpdmUKKwkJCQlmaQorCQkJCTs7CisJCQkqKQorCQkJCWlmIHRlc3QgJGFyZyAtZXEgJHNlbGVjdG9yCisJCQkJdGhlbgorCQkJCQlpbmNsdWRlPSRwb3NpdGl2ZQorCQkJCWZpCisJCQkJOzsKKwkJZXNhYworCWRvbmUKKworCXRlc3QgLW4gIiRpbmNsdWRlIgorfQorCittYXliZV90ZWFyZG93bl92ZXJib3NlICgpIHsKKwl0ZXN0IC16ICIkdmVyYm9zZV9vbmx5IiAmJiByZXR1cm4KKwlleGVjIDQ+L2Rldi9udWxsIDM+L2Rldi9udWxsCisJdmVyYm9zZT0KK30KKworbGFzdF92ZXJib3NlPXQKK21heWJlX3NldHVwX3ZlcmJvc2UgKCkgeworCXRlc3QgLXogIiR2ZXJib3NlX29ubHkiICYmIHJldHVybgorCWlmIG1hdGNoX3BhdHRlcm5fbGlzdCAkdGVzdF9jb3VudCAkdmVyYm9zZV9vbmx5CisJdGhlbgorCQlleGVjIDQ+JjIgMz4mMQorCQkjIEVtaXQgYSBkZWxpbWl0aW5nIGJsYW5rIGxpbmUgd2hlbiBnb2luZyBmcm9tCisJCSMgbm9uLXZlcmJvc2UgdG8gdmVyYm9zZS4gIFdpdGhpbiB2ZXJib3NlIG1vZGUgdGhlCisJCSMgZGVsaW1pdGVyIGlzIHByaW50ZWQgYnkgdGVzdF9leHBlY3RfKi4gIFRoZSBjaG9pY2UKKwkJIyBvZiB0aGUgaW5pdGlhbCAkbGFzdF92ZXJib3NlIGlzIHN1Y2ggdGhhdCBiZWZvcmUKKwkJIyB0ZXN0IDEsIHdlIGRvIG5vdCBwcmludCBpdC4KKwkJdGVzdCAteiAiJGxhc3RfdmVyYm9zZSIgJiYgZWNobyA+JjMgIiIKKwkJdmVyYm9zZT10CisJZWxzZQorCQlleGVjIDQ+L2Rldi9udWxsIDM+L2Rldi9udWxsCisJCXZlcmJvc2U9CisJZmkKKwlsYXN0X3ZlcmJvc2U9JHZlcmJvc2UKK30KKworbWF5YmVfdGVhcmRvd25fdmFsZ3JpbmQgKCkgeworCXRlc3QgLXogIiRHSVRfVkFMR1JJTkQiICYmIHJldHVybgorCUdJVF9WQUxHUklORF9FTkFCTEVEPQorfQorCittYXliZV9zZXR1cF92YWxncmluZCAoKSB7CisJdGVzdCAteiAiJEdJVF9WQUxHUklORCIgJiYgcmV0dXJuCisJaWYgdGVzdCAteiAiJHZhbGdyaW5kX29ubHkiCisJdGhlbgorCQlHSVRfVkFMR1JJTkRfRU5BQkxFRD10CisJCXJldHVybgorCWZpCisJR0lUX1ZBTEdSSU5EX0VOQUJMRUQ9CisJaWYgbWF0Y2hfcGF0dGVybl9saXN0ICR0ZXN0X2NvdW50ICR2YWxncmluZF9vbmx5CisJdGhlbgorCQlHSVRfVkFMR1JJTkRfRU5BQkxFRD10CisJZmkKK30KKword2FudF90cmFjZSAoKSB7CisJdGVzdCAiJHRyYWNlIiA9IHQgJiYgdGVzdCAiJHZlcmJvc2UiID0gdAorfQorCisjIFRoaXMgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBiZWNhdXNlIHNvbWUgdGVzdHMgdXNlCisjICJyZXR1cm4iIHRvIGVuZCBhIHRlc3RfZXhwZWN0X3N1Y2Nlc3MgYmxvY2sgZWFybHkKKyMgKGFuZCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBydW4gYW55IGNsZWFudXAgbGlrZQorIyAic2V0ICt4IikuCit0ZXN0X2V2YWxfaW5uZXJfICgpIHsKKwkjIERvIG5vdCBhZGQgYW55dGhpbmcgZXh0cmEgKGluY2x1ZGluZyBMRikgYWZ0ZXIgJyQqJworCWV2YWwgIgorCQl3YW50X3RyYWNlICYmIHNldCAteAorCQkkKiIKK30KKwordGVzdF9ldmFsXyAoKSB7CisJIyBXZSBydW4gdGhpcyBibG9jayB3aXRoIHN0ZGVyciByZWRpcmVjdGVkIHRvIGF2b2lkIGV4dHJhIGNydWZ0CisJIyBkdXJpbmcgYSAiLXgiIHRyYWNlLiBPbmNlIGluICJzZXQgLXgiIG1vZGUsIHdlIGNhbm5vdCBwcmV2ZW50CisJIyB0aGUgc2hlbGwgZnJvbSBwcmludGluZyB0aGUgInNldCAreCIgdG8gdHVybiBpdCBvZmYgKG5vciB0aGUgc2F2aW5nCisJIyBvZiAkPyBiZWZvcmUgdGhhdCkuIEJ1dCB3ZSBjYW4gbWFrZSBzdXJlIHRoYXQgdGhlIG91dHB1dCBnb2VzIHRvCisJIyAvZGV2L251bGwuCisJIworCSMgVGhlIHRlc3QgaXRzZWxmIGlzIHJ1biB3aXRoIHN0ZGVyciBwdXQgYmFjayB0byAmNCAoc28gZWl0aGVyIHRvCisJIyAvZGV2L251bGwsIG9yIHRvIHRoZSBvcmlnaW5hbCBzdGRlcnIgaWYgLS12ZXJib3NlIHdhcyB1c2VkKS4KKwl7CisJCXRlc3RfZXZhbF9pbm5lcl8gIiRAIiA8L2Rldi9udWxsID4mMyAyPiY0CisJCXRlc3RfZXZhbF9yZXRfPSQ/CisJCWlmIHdhbnRfdHJhY2UKKwkJdGhlbgorCQkJc2V0ICt4CisJCQlpZiB0ZXN0ICIkdGVzdF9ldmFsX3JldF8iICE9IDAKKwkJCXRoZW4KKwkJCQlzYXlfY29sb3IgZXJyb3IgPiY0ICJlcnJvcjogbGFzdCBjb21tYW5kIGV4aXRlZCB3aXRoIFwkPz0kdGVzdF9ldmFsX3JldF8iCisJCQlmaQorCQlmaQorCX0gMj4vZGV2L251bGwKKwlyZXR1cm4gJHRlc3RfZXZhbF9yZXRfCit9CisKK3Rlc3RfcnVuXyAoKSB7CisJdGVzdF9jbGVhbnVwPToKKwlleHBlY3RpbmdfZmFpbHVyZT0kMgorCisJaWYgdGVzdCAiJHtHSVRfVEVTVF9DSEFJTl9MSU5UOi0xfSIgIT0gMDsgdGhlbgorCQkjIHR1cm4gb2ZmIHRyYWNpbmcgZm9yIHRoaXMgdGVzdC1ldmFsLCBhcyBpdCBzaW1wbHkgY3JlYXRlcworCQkjIGNvbmZ1c2luZyBub2lzZSBpbiB0aGUgIi14IiBvdXRwdXQKKwkJdHJhY2VfdG1wPSR0cmFjZQorCQl0cmFjZT0KKwkJIyAxMTcgaXMgbWFnaWMgYmVjYXVzZSBpdCBpcyB1bmxpa2VseSB0byBtYXRjaCB0aGUgZXhpdAorCQkjIGNvZGUgb2Ygb3RoZXIgcHJvZ3JhbXMKKwkJdGVzdF9ldmFsXyAiKGV4aXQgMTE3KSAmJiAkMSIKKwkJaWYgdGVzdCAiJD8iICE9IDExNzsgdGhlbgorCQkJZXJyb3IgImJ1ZyBpbiB0aGUgdGVzdCBzY3JpcHQ6IGJyb2tlbiAmJi1jaGFpbjogJDEiCisJCWZpCisJCXRyYWNlPSR0cmFjZV90bXAKKwlmaQorCisJc2V0dXBfbWFsbG9jX2NoZWNrCisJdGVzdF9ldmFsXyAiJDEiCisJZXZhbF9yZXQ9JD8KKwl0ZWFyZG93bl9tYWxsb2NfY2hlY2sKKworCWlmIHRlc3QgLXogIiRpbW1lZGlhdGUiIHx8IHRlc3QgJGV2YWxfcmV0ID0gMCB8fAorCSAgIHRlc3QgLW4gIiRleHBlY3RpbmdfZmFpbHVyZSIgJiYgdGVzdCAiJHRlc3RfY2xlYW51cCIgIT0gIjoiCisJdGhlbgorCQlzZXR1cF9tYWxsb2NfY2hlY2sKKwkJdGVzdF9ldmFsXyAiJHRlc3RfY2xlYW51cCIKKwkJdGVhcmRvd25fbWFsbG9jX2NoZWNrCisJZmkKKwlpZiB0ZXN0ICIkdmVyYm9zZSIgPSAidCIgJiYgdGVzdCAtbiAiJEhBUk5FU1NfQUNUSVZFIgorCXRoZW4KKwkJZWNobyAiIgorCWZpCisJcmV0dXJuICIkZXZhbF9yZXQiCit9CisKK3Rlc3Rfc3RhcnRfICgpIHsKKwl0ZXN0X2NvdW50PSQoKCR0ZXN0X2NvdW50KzEpKQorCW1heWJlX3NldHVwX3ZlcmJvc2UKKwltYXliZV9zZXR1cF92YWxncmluZAorfQorCit0ZXN0X2ZpbmlzaF8gKCkgeworCWVjaG8gPiYzICIiCisJbWF5YmVfdGVhcmRvd25fdmFsZ3JpbmQKKwltYXliZV90ZWFyZG93bl92ZXJib3NlCit9CisKK3Rlc3Rfc2tpcCAoKSB7CisJdG9fc2tpcD0KKwlza2lwcGVkX3JlYXNvbj0KKwlpZiBtYXRjaF9wYXR0ZXJuX2xpc3QgJHRoaXNfdGVzdC4kdGVzdF9jb3VudCAkR0lUX1NLSVBfVEVTVFMKKwl0aGVuCisJCXRvX3NraXA9dAorCQlza2lwcGVkX3JlYXNvbj0iR0lUX1NLSVBfVEVTVFMiCisJZmkKKwlpZiB0ZXN0IC16ICIkdG9fc2tpcCIgJiYgdGVzdCAtbiAiJHRlc3RfcHJlcmVxIiAmJgorCSAgICEgdGVzdF9oYXZlX3ByZXJlcSAiJHRlc3RfcHJlcmVxIgorCXRoZW4KKwkJdG9fc2tpcD10CisKKwkJb2ZfcHJlcmVxPQorCQlpZiB0ZXN0ICIkbWlzc2luZ19wcmVyZXEiICE9ICIkdGVzdF9wcmVyZXEiCisJCXRoZW4KKwkJCW9mX3ByZXJlcT0iIG9mICR0ZXN0X3ByZXJlcSIKKwkJZmkKKwkJc2tpcHBlZF9yZWFzb249Im1pc3NpbmcgJG1pc3NpbmdfcHJlcmVxJHtvZl9wcmVyZXF9IgorCWZpCisJaWYgdGVzdCAteiAiJHRvX3NraXAiICYmIHRlc3QgLW4gIiRydW5fbGlzdCIgJiYKKwkJISBtYXRjaF90ZXN0X3NlbGVjdG9yX2xpc3QgJy0tcnVuJyAkdGVzdF9jb3VudCAiJHJ1bl9saXN0IgorCXRoZW4KKwkJdG9fc2tpcD10CisJCXNraXBwZWRfcmVhc29uPSItLXJ1biIKKwlmaQorCisJY2FzZSAiJHRvX3NraXAiIGluCisJdCkKKwkJc2F5X2NvbG9yIHNraXAgPiYzICJza2lwcGluZyB0ZXN0OiAkQCIKKwkJc2F5X2NvbG9yIHNraXAgIm9rICR0ZXN0X2NvdW50ICMgc2tpcCAkMSAoJHNraXBwZWRfcmVhc29uKSIKKwkJOiB0cnVlCisJCTs7CisJKikKKwkJZmFsc2UKKwkJOzsKKwllc2FjCit9CisKKyMgc3R1YjsgcGVyZi1saWIgb3ZlcnJpZGVzIGl0Cit0ZXN0X2F0X2VuZF9ob29rXyAoKSB7CisJOgorfQorCit0ZXN0X2RvbmUgKCkgeworCUdJVF9FWElUX09LPXQKKworCWlmIHRlc3QgLXogIiRIQVJORVNTX0FDVElWRSIKKwl0aGVuCisJCXRlc3RfcmVzdWx0c19kaXI9IiRURVNUX09VVFBVVF9ESVJFQ1RPUlkvdGVzdC1yZXN1bHRzIgorCQlta2RpciAtcCAiJHRlc3RfcmVzdWx0c19kaXIiCisJCWJhc2U9JHswIyMqL30KKwkJdGVzdF9yZXN1bHRzX3BhdGg9IiR0ZXN0X3Jlc3VsdHNfZGlyLyR7YmFzZSUuc2h9LSQkLmNvdW50cyIKKworCQljYXQgPj4iJHRlc3RfcmVzdWx0c19wYXRoIiA8PC1FT0YKKwkJdG90YWwgJHRlc3RfY291bnQKKwkJc3VjY2VzcyAkdGVzdF9zdWNjZXNzCisJCWZpeGVkICR0ZXN0X2ZpeGVkCisJCWJyb2tlbiAkdGVzdF9icm9rZW4KKwkJZmFpbGVkICR0ZXN0X2ZhaWx1cmUKKworCQlFT0YKKwlmaQorCisJaWYgdGVzdCAiJHRlc3RfZml4ZWQiICE9IDAKKwl0aGVuCisJCXNheV9jb2xvciBlcnJvciAiIyAkdGVzdF9maXhlZCBrbm93biBicmVha2FnZShzKSB2YW5pc2hlZDsgcGxlYXNlIHVwZGF0ZSB0ZXN0KHMpIgorCWZpCisJaWYgdGVzdCAiJHRlc3RfYnJva2VuIiAhPSAwCisJdGhlbgorCQlzYXlfY29sb3Igd2FybiAiIyBzdGlsbCBoYXZlICR0ZXN0X2Jyb2tlbiBrbm93biBicmVha2FnZShzKSIKKwlmaQorCWlmIHRlc3QgIiR0ZXN0X2Jyb2tlbiIgIT0gMCB8fCB0ZXN0ICIkdGVzdF9maXhlZCIgIT0gMAorCXRoZW4KKwkJdGVzdF9yZW1haW5pbmc9JCgoICR0ZXN0X2NvdW50IC0gJHRlc3RfYnJva2VuIC0gJHRlc3RfZml4ZWQgKSkKKwkJbXNnPSJyZW1haW5pbmcgJHRlc3RfcmVtYWluaW5nIHRlc3QocykiCisJZWxzZQorCQl0ZXN0X3JlbWFpbmluZz0kdGVzdF9jb3VudAorCQltc2c9IiR0ZXN0X2NvdW50IHRlc3QocykiCisJZmkKKwljYXNlICIkdGVzdF9mYWlsdXJlIiBpbgorCTApCisJCSMgTWF5YmUgcHJpbnQgU0tJUCBtZXNzYWdlCisJCWlmIHRlc3QgLW4gIiRza2lwX2FsbCIgJiYgdGVzdCAkdGVzdF9jb3VudCAtZ3QgMAorCQl0aGVuCisJCQllcnJvciAiQ2FuJ3QgdXNlIHNraXBfYWxsIGFmdGVyIHJ1bm5pbmcgc29tZSB0ZXN0cyIKKwkJZmkKKwkJdGVzdCAteiAiJHNraXBfYWxsIiB8fCBza2lwX2FsbD0iICMgU0tJUCAkc2tpcF9hbGwiCisKKwkJaWYgdGVzdCAkdGVzdF9leHRlcm5hbF9oYXNfdGFwIC1lcSAwCisJCXRoZW4KKwkJCWlmIHRlc3QgJHRlc3RfcmVtYWluaW5nIC1ndCAwCisJCQl0aGVuCisJCQkJc2F5X2NvbG9yIHBhc3MgIiMgcGFzc2VkIGFsbCAkbXNnIgorCQkJZmkKKwkJCXNheSAiMS4uJHRlc3RfY291bnQkc2tpcF9hbGwiCisJCWZpCisKKwkJdGVzdCAtZCAiJHJlbW92ZV90cmFzaCIgJiYKKwkJY2QgIiQoZGlybmFtZSAiJHJlbW92ZV90cmFzaCIpIiAmJgorCQlybSAtcmYgIiQoYmFzZW5hbWUgIiRyZW1vdmVfdHJhc2giKSIKKworCQl0ZXN0X2F0X2VuZF9ob29rXworCisJCWV4aXQgMCA7OworCisJKikKKwkJaWYgdGVzdCAkdGVzdF9leHRlcm5hbF9oYXNfdGFwIC1lcSAwCisJCXRoZW4KKwkJCXNheV9jb2xvciBlcnJvciAiIyBmYWlsZWQgJHRlc3RfZmFpbHVyZSBhbW9uZyAkbXNnIgorCQkJc2F5ICIxLi4kdGVzdF9jb3VudCIKKwkJZmkKKworCQlleGl0IDEgOzsKKworCWVzYWMKK30KKworaWYgdGVzdCAtbiAiJHZhbGdyaW5kIgordGhlbgorCW1ha2Vfc3ltbGluayAoKSB7CisJCXRlc3QgLWggIiQyIiAmJgorCQl0ZXN0ICIkMSIgPSAiJChyZWFkbGluayAiJDIiKSIgfHwgeworCQkJIyBiZSBzdXBlciBwYXJhbm9pZAorCQkJaWYgbWtkaXIgIiQyIi5sb2NrCisJCQl0aGVuCisJCQkJcm0gLWYgIiQyIiAmJgorCQkJCWxuIC1zICIkMSIgIiQyIiAmJgorCQkJCXJtIC1yICIkMiIubG9jaworCQkJZWxzZQorCQkJCXdoaWxlIHRlc3QgLWQgIiQyIi5sb2NrCisJCQkJZG8KKwkJCQkJc2F5ICJXYWl0aW5nIGZvciBsb2NrIG9uICQyLiIKKwkJCQkJc2xlZXAgMQorCQkJCWRvbmUKKwkJCWZpCisJCX0KKwl9CisKKwltYWtlX3ZhbGdyaW5kX3N5bWxpbmsgKCkgeworCQkjIGhhbmRsZSBvbmx5IGV4ZWN1dGFibGVzLCB1bmxlc3MgdGhleSBhcmUgc2hlbGwgbGlicmFyaWVzIHRoYXQKKwkJIyBuZWVkIHRvIGJlIGluIHRoZSBleGVjLXBhdGguCisJCXRlc3QgLXggIiQxIiB8fAorCQl0ZXN0ICIjICIgPSAiJChoZWFkIC1jIDIgPCIkMSIpIiB8fAorCQlyZXR1cm47CisKKwkJYmFzZT0kKGJhc2VuYW1lICIkMSIpCisJCXN5bWxpbmtfdGFyZ2V0PSRHSVRfQlVJTERfRElSLyRiYXNlCisJCSMgZG8gbm90IG92ZXJyaWRlIHNjcmlwdHMKKwkJaWYgdGVzdCAteCAiJHN5bWxpbmtfdGFyZ2V0IiAmJgorCQkgICAgdGVzdCAhIC1kICIkc3ltbGlua190YXJnZXQiICYmCisJCSAgICB0ZXN0ICIjISIgIT0gIiQoaGVhZCAtYyAyIDwgIiRzeW1saW5rX3RhcmdldCIpIgorCQl0aGVuCisJCQlzeW1saW5rX3RhcmdldD0uLi92YWxncmluZC5zaAorCQlmaQorCQljYXNlICIkYmFzZSIgaW4KKwkJKi5zaHwqLnBlcmwpCisJCQlzeW1saW5rX3RhcmdldD0uLi91bnByb2Nlc3NlZC1zY3JpcHQKKwkJZXNhYworCQkjIGNyZWF0ZSB0aGUgbGluaywgb3IgcmVwbGFjZSBpdCBpZiBpdCBpcyBvdXQgb2YgZGF0ZQorCQltYWtlX3N5bWxpbmsgIiRzeW1saW5rX3RhcmdldCIgIiRHSVRfVkFMR1JJTkQvYmluLyRiYXNlIiB8fCBleGl0CisJfQorCisJIyBvdmVycmlkZSBhbGwgZ2l0IGV4ZWN1dGFibGVzIGluIFRFU1RfRElSRUNUT1JZLy4uCisJR0lUX1ZBTEdSSU5EPSRURVNUX0RJUkVDVE9SWS92YWxncmluZAorCW1rZGlyIC1wICIkR0lUX1ZBTEdSSU5EIi9iaW4KKwlmb3IgZmlsZSBpbiAkR0lUX0JVSUxEX0RJUi9naXQqICRHSVRfQlVJTERfRElSL3Rlc3QtKgorCWRvCisJCW1ha2VfdmFsZ3JpbmRfc3ltbGluayAkZmlsZQorCWRvbmUKKwkjIHNwZWNpYWwtY2FzZSB0aGUgbWVyZ2V0b29scyBsb2FkYWJsZXMKKwltYWtlX3N5bWxpbmsgIiRHSVRfQlVJTERfRElSIi9tZXJnZXRvb2xzICIkR0lUX1ZBTEdSSU5EL2Jpbi9tZXJnZXRvb2xzIgorCU9MRElGUz0kSUZTCisJSUZTPToKKwlmb3IgcGF0aCBpbiAkUEFUSAorCWRvCisJCWxzICIkcGF0aCIvZ2l0LSogMj4gL2Rldi9udWxsIHwKKwkJd2hpbGUgcmVhZCBmaWxlCisJCWRvCisJCQltYWtlX3ZhbGdyaW5kX3N5bWxpbmsgIiRmaWxlIgorCQlkb25lCisJZG9uZQorCUlGUz0kT0xESUZTCisJUEFUSD0kR0lUX1ZBTEdSSU5EL2JpbjokUEFUSAorCUdJVF9FWEVDX1BBVEg9JEdJVF9WQUxHUklORC9iaW4KKwlleHBvcnQgR0lUX1ZBTEdSSU5ECisJR0lUX1ZBTEdSSU5EX01PREU9IiR2YWxncmluZCIKKwlleHBvcnQgR0lUX1ZBTEdSSU5EX01PREUKKwlHSVRfVkFMR1JJTkRfRU5BQkxFRD10CisJdGVzdCAtbiAiJHZhbGdyaW5kX29ubHkiICYmIEdJVF9WQUxHUklORF9FTkFCTEVEPQorCWV4cG9ydCBHSVRfVkFMR1JJTkRfRU5BQkxFRAorZWxpZiB0ZXN0IC1uICIkR0lUX1RFU1RfSU5TVEFMTEVEIgordGhlbgorCUdJVF9FWEVDX1BBVEg9JCgkR0lUX1RFU1RfSU5TVEFMTEVEL2dpdCAtLWV4ZWMtcGF0aCkgIHx8CisJZXJyb3IgIkNhbm5vdCBydW4gZ2l0IGZyb20gJEdJVF9URVNUX0lOU1RBTExFRC4iCisJUEFUSD0kR0lUX1RFU1RfSU5TVEFMTEVEOiRHSVRfQlVJTERfRElSOiRQQVRICisJR0lUX0VYRUNfUEFUSD0ke0dJVF9URVNUX0VYRUNfUEFUSDotJEdJVF9FWEVDX1BBVEh9CitlbHNlICMgbm9ybWFsIGNhc2UsIHVzZSAuLi9iaW4td3JhcHBlcnMgb25seSB1bmxlc3MgJHdpdGhfZGFzaGVzOgorCWdpdF9iaW5fZGlyPSIkR0lUX0JVSUxEX0RJUi9iaW4td3JhcHBlcnMiCisJaWYgISB0ZXN0IC14ICIkZ2l0X2Jpbl9kaXIvZ2l0IgorCXRoZW4KKwkJaWYgdGVzdCAteiAiJHdpdGhfZGFzaGVzIgorCQl0aGVuCisJCQlzYXkgIiRnaXRfYmluX2Rpci9naXQgaXMgbm90IGV4ZWN1dGFibGU7IHVzaW5nIEdJVF9FWEVDX1BBVEgiCisJCWZpCisJCXdpdGhfZGFzaGVzPXQKKwlmaQorCVBBVEg9IiRnaXRfYmluX2RpcjokUEFUSCIKKwlHSVRfRVhFQ19QQVRIPSRHSVRfQlVJTERfRElSCisJaWYgdGVzdCAtbiAiJHdpdGhfZGFzaGVzIgorCXRoZW4KKwkJUEFUSD0iJEdJVF9CVUlMRF9ESVI6JFBBVEgiCisJZmkKK2ZpCitHSVRfVEVNUExBVEVfRElSPSIkR0lUX0JVSUxEX0RJUiIvdGVtcGxhdGVzL2JsdAorR0lUX0NPTkZJR19OT1NZU1RFTT0xCitHSVRfQVRUUl9OT1NZU1RFTT0xCitleHBvcnQgUEFUSCBHSVRfRVhFQ19QQVRIIEdJVF9URU1QTEFURV9ESVIgR0lUX0NPTkZJR19OT1NZU1RFTSBHSVRfQVRUUl9OT1NZU1RFTQorCitpZiB0ZXN0IC16ICIkR0lUX1RFU1RfQ01QIgordGhlbgorCWlmIHRlc3QgLW4gIiRHSVRfVEVTVF9DTVBfVVNFX0NPUElFRF9DT05URVhUIgorCXRoZW4KKwkJR0lUX1RFU1RfQ01QPSIkRElGRiAtYyIKKwllbHNlCisJCUdJVF9URVNUX0NNUD0iJERJRkYgLXUiCisJZmkKK2ZpCisKK0dJVFBFUkxMSUI9IiRHSVRfQlVJTERfRElSIi9wZXJsL2JsaWIvbGliOiIkR0lUX0JVSUxEX0RJUiIvcGVybC9ibGliL2FyY2gvYXV0by9HaXQKK2V4cG9ydCBHSVRQRVJMTElCCit0ZXN0IC1kICIkR0lUX0JVSUxEX0RJUiIvdGVtcGxhdGVzL2JsdCB8fCB7CisJZXJyb3IgIllvdSBoYXZlbid0IGJ1aWx0IHRoaW5ncyB5ZXQsIGhhdmUgeW91PyIKK30KKworaWYgISB0ZXN0IC14ICIkR0lUX0JVSUxEX0RJUiIvdGVzdC1jaG10aW1lCit0aGVuCisJZWNobyA+JjIgJ1lvdSBuZWVkIHRvIGJ1aWxkIHRlc3QtY2htdGltZTonCisJZWNobyA+JjIgJ1J1biAibWFrZSB0ZXN0LWNobXRpbWUiIGluIHRoZSBzb3VyY2UgKHRvcGxldmVsKSBkaXJlY3RvcnknCisJZXhpdCAxCitmaQorCisjIFRlc3QgcmVwb3NpdG9yeQorVFJBU0hfRElSRUNUT1JZPSJ0cmFzaCBkaXJlY3RvcnkuJChiYXNlbmFtZSAiJDAiIC5zaCkiCit0ZXN0IC1uICIkcm9vdCIgJiYgVFJBU0hfRElSRUNUT1JZPSIkcm9vdC8kVFJBU0hfRElSRUNUT1JZIgorY2FzZSAiJFRSQVNIX0RJUkVDVE9SWSIgaW4KKy8qKSA7OyAjIGFic29sdXRlIHBhdGggaXMgZ29vZAorICopIFRSQVNIX0RJUkVDVE9SWT0iJFRFU1RfT1VUUFVUX0RJUkVDVE9SWS8kVFJBU0hfRElSRUNUT1JZIiA7OworZXNhYwordGVzdCAhIC16ICIkZGVidWciIHx8IHJlbW92ZV90cmFzaD0kVFJBU0hfRElSRUNUT1JZCitybSAtZnIgIiRUUkFTSF9ESVJFQ1RPUlkiIHx8IHsKKwlHSVRfRVhJVF9PSz10CisJZWNobyA+JjUgIkZBVEFMOiBDYW5ub3QgcHJlcGFyZSB0ZXN0IGFyZWEiCisJZXhpdCAxCit9CisKK0hPTUU9IiRUUkFTSF9ESVJFQ1RPUlkiCitHTlVQR0hPTUU9IiRIT01FL2dudXBnLWhvbWUtbm90LXVzZWQiCitleHBvcnQgSE9NRSBHTlVQR0hPTUUKKworaWYgdGVzdCAteiAiJFRFU1RfTk9fQ1JFQVRFX1JFUE8iCit0aGVuCisJdGVzdF9jcmVhdGVfcmVwbyAiJFRSQVNIX0RJUkVDVE9SWSIKK2Vsc2UKKwlta2RpciAtcCAiJFRSQVNIX0RJUkVDVE9SWSIKK2ZpCisjIFVzZSAtUCB0byByZXNvbHZlIHN5bWxpbmtzIGluIG91ciB3b3JraW5nIGRpcmVjdG9yeSBzbyB0aGF0IHRoZSBjd2QKKyMgaW4gc3VicHJvY2Vzc2VzIGxpa2UgZ2l0IGVxdWFscyBvdXIgJFBXRCAoZm9yIHBhdGhuYW1lIGNvbXBhcmlzb25zKS4KK2NkIC1QICIkVFJBU0hfRElSRUNUT1JZIiB8fCBleGl0IDEKKwordGhpc190ZXN0PSR7MCMjKi99Cit0aGlzX3Rlc3Q9JHt0aGlzX3Rlc3QlJS0qfQoraWYgbWF0Y2hfcGF0dGVybl9saXN0ICIkdGhpc190ZXN0IiAkR0lUX1NLSVBfVEVTVFMKK3RoZW4KKwlzYXlfY29sb3IgaW5mbyA+JjMgInNraXBwaW5nIHRlc3QgJHRoaXNfdGVzdCBhbHRvZ2V0aGVyIgorCXNraXBfYWxsPSJza2lwIGFsbCB0ZXN0cyBpbiAkdGhpc190ZXN0IgorCXRlc3RfZG9uZQorZmkKKworIyBQcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSAneWVzJyB1dGlsaXR5Cit5ZXMgKCkgeworCWlmIHRlc3QgJCMgPSAwCisJdGhlbgorCQl5PXkKKwllbHNlCisJCXk9IiQqIgorCWZpCisKKwl3aGlsZSBlY2hvICIkeSIKKwlkbworCQk6CisJZG9uZQorfQorCisjIEZpeCBzb21lIGNvbW1hbmRzIG9uIFdpbmRvd3MKK2Nhc2UgJCh1bmFtZSAtcykgaW4KKypNSU5HVyopCisJIyBXaW5kb3dzIGhhcyBpdHMgb3duIChpbmNvbXBhdGlibGUpIHNvcnQgYW5kIGZpbmQKKwlzb3J0ICgpIHsKKwkJL3Vzci9iaW4vc29ydCAiJEAiCisJfQorCWZpbmQgKCkgeworCQkvdXNyL2Jpbi9maW5kICIkQCIKKwl9CisJc3VtICgpIHsKKwkJbWQ1c3VtICIkQCIKKwl9CisJIyBnaXQgc2VlcyBXaW5kb3dzLXN0eWxlIHB3ZAorCXB3ZCAoKSB7CisJCWJ1aWx0aW4gcHdkIC1XCisJfQorCSMgbm8gUE9TSVggcGVybWlzc2lvbnMKKwkjIGJhY2tzbGFzaGVzIGluIHBhdGhzcGVjIGFyZSBjb252ZXJ0ZWQgdG8gJy8nCisJIyBleGVjIGRvZXMgbm90IGluaGVyaXQgdGhlIFBJRAorCXRlc3Rfc2V0X3ByZXJlcSBNSU5HVworCXRlc3Rfc2V0X3ByZXJlcSBOQVRJVkVfQ1JMRgorCXRlc3Rfc2V0X3ByZXJlcSBTRURfU1RSSVBTX0NSCisJdGVzdF9zZXRfcHJlcmVxIEdSRVBfU1RSSVBTX0NSCisJR0lUX1RFU1RfQ01QPW1pbmd3X3Rlc3RfY21wCisJOzsKKypDWUdXSU4qKQorCXRlc3Rfc2V0X3ByZXJlcSBQT1NJWFBFUk0KKwl0ZXN0X3NldF9wcmVyZXEgRVhFQ0tFRVBTUElECisJdGVzdF9zZXRfcHJlcmVxIENZR1dJTgorCXRlc3Rfc2V0X3ByZXJlcSBTRURfU1RSSVBTX0NSCisJdGVzdF9zZXRfcHJlcmVxIEdSRVBfU1RSSVBTX0NSCisJOzsKKyopCisJdGVzdF9zZXRfcHJlcmVxIFBPU0lYUEVSTQorCXRlc3Rfc2V0X3ByZXJlcSBCU0xBU0hQU1BFQworCXRlc3Rfc2V0X3ByZXJlcSBFWEVDS0VFUFNQSUQKKwk7OworZXNhYworCisoIENPTFVNTlM9MSAmJiB0ZXN0ICRDT0xVTU5TID0gMSApICYmIHRlc3Rfc2V0X3ByZXJlcSBDT0xVTU5TX0NBTl9CRV8xCit0ZXN0IC16ICIkTk9fUEVSTCIgJiYgdGVzdF9zZXRfcHJlcmVxIFBFUkwKK3Rlc3QgLXogIiROT19QWVRIT04iICYmIHRlc3Rfc2V0X3ByZXJlcSBQWVRIT04KK3Rlc3QgLW4gIiRVU0VfTElCUENSRSIgJiYgdGVzdF9zZXRfcHJlcmVxIExJQlBDUkUKK3Rlc3QgLXogIiROT19HRVRURVhUIiAmJiB0ZXN0X3NldF9wcmVyZXEgR0VUVEVYVAorCisjIENhbiB3ZSByZWx5IG9uIGdpdCdzIG91dHB1dCBpbiB0aGUgQyBsb2NhbGU/CitpZiB0ZXN0IC1uICIkR0VUVEVYVF9QT0lTT04iCit0aGVuCisJR0lUX0dFVFRFWFRfUE9JU09OPVllc1BsZWFzZQorCWV4cG9ydCBHSVRfR0VUVEVYVF9QT0lTT04KKwl0ZXN0X3NldF9wcmVyZXEgR0VUVEVYVF9QT0lTT04KK2Vsc2UKKwl0ZXN0X3NldF9wcmVyZXEgQ19MT0NBTEVfT1VUUFVUCitmaQorCisjIFVzZSB0aGlzIGluc3RlYWQgb2YgdGVzdF9jbXAgdG8gY29tcGFyZSBmaWxlcyB0aGF0IGNvbnRhaW4gZXhwZWN0ZWQgYW5kCisjIGFjdHVhbCBvdXRwdXQgZnJvbSBnaXQgY29tbWFuZHMgdGhhdCBjYW4gYmUgdHJhbnNsYXRlZC4gIFdoZW4gcnVubmluZworIyB1bmRlciBHRVRURVhUX1BPSVNPTiB0aGlzIHByZXRlbmRzIHRoYXQgdGhlIGNvbW1hbmQgcHJvZHVjZWQgZXhwZWN0ZWQKKyMgcmVzdWx0cy4KK3Rlc3RfaTE4bmNtcCAoKSB7CisJdGVzdCAtbiAiJEdFVFRFWFRfUE9JU09OIiB8fCB0ZXN0X2NtcCAiJEAiCit9CisKKyMgVXNlIHRoaXMgaW5zdGVhZCBvZiAiZ3JlcCBleHBlY3RlZC1zdHJpbmcgYWN0dWFsIiB0byBzZWUgaWYgdGhlCisjIG91dHB1dCBmcm9tIGEgZ2l0IGNvbW1hbmQgdGhhdCBjYW4gYmUgdHJhbnNsYXRlZCBlaXRoZXIgY29udGFpbnMgYW4KKyMgZXhwZWN0ZWQgc3RyaW5nLCBvciBkb2VzIG5vdCBjb250YWluIGFuIHVud2FudGVkIG9uZS4gIFdoZW4gcnVubmluZworIyB1bmRlciBHRVRURVhUX1BPSVNPTiB0aGlzIHByZXRlbmRzIHRoYXQgdGhlIGNvbW1hbmQgcHJvZHVjZWQgZXhwZWN0ZWQKKyMgcmVzdWx0cy4KK3Rlc3RfaTE4bmdyZXAgKCkgeworCWlmIHRlc3QgLW4gIiRHRVRURVhUX1BPSVNPTiIKKwl0aGVuCisJICAgIDogIyBwcmV0ZW5kIHN1Y2Nlc3MKKwllbGlmIHRlc3QgInghIiA9ICJ4JDEiCisJdGhlbgorCQlzaGlmdAorCQkhIGdyZXAgIiRAIgorCWVsc2UKKwkJZ3JlcCAiJEAiCisJZmkKK30KKwordGVzdF9sYXp5X3ByZXJlcSBQSVBFICcKKwkjIHRlc3Qgd2hldGhlciB0aGUgZmlsZXN5c3RlbSBzdXBwb3J0cyBGSUZPcworCWNhc2UgJCh1bmFtZSAtcykgaW4KKwlDWUdXSU4qKQorCQlmYWxzZQorCQk7OworCSopCisJCXJtIC1mIHRlc3RmaWZvICYmIG1rZmlmbyB0ZXN0ZmlmbworCQk7OworCWVzYWMKKycKKwordGVzdF9sYXp5X3ByZXJlcSBTWU1MSU5LUyAnCisJIyB0ZXN0IHdoZXRoZXIgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgc3ltYm9saWMgbGlua3MKKwlsbiAtcyB4IHkgJiYgdGVzdCAtaCB5CisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgRklMRU1PREUgJworCXRlc3QgIiQoZ2l0IGNvbmZpZyAtLWJvb2wgY29yZS5maWxlbW9kZSkiID0gdHJ1ZQorJworCit0ZXN0X2xhenlfcHJlcmVxIENBU0VfSU5TRU5TSVRJVkVfRlMgJworCWVjaG8gZ29vZCA+Q2FtZWxDYXNlICYmCisJZWNobyBiYWQgPmNhbWVsY2FzZSAmJgorCXRlc3QgIiQoY2F0IENhbWVsQ2FzZSkiICE9IGdvb2QKKycKKwordGVzdF9sYXp5X3ByZXJlcSBVVEY4X05GRF9UT19ORkMgJworCSMgY2hlY2sgd2hldGhlciBGUyBjb252ZXJ0cyBuZmQgdW5pY29kZSB0byBuZmMKKwlhdW1sPSQocHJpbnRmICJcMzAzXDI0NCIpCisJYXVtbGNkaWFyPSQocHJpbnRmICJcMTQxXDMxNFwyMTAiKQorCT4iJGF1bWwiICYmCisJY2FzZSAiJChlY2hvICopIiBpbgorCSIkYXVtbGNkaWFyIikKKwkJdHJ1ZSA7OworCSopCisJCWZhbHNlIDs7CisJZXNhYworJworCit0ZXN0X2xhenlfcHJlcmVxIEFVVE9JREVOVCAnCisJc2FuZV91bnNldCBHSVRfQVVUSE9SX05BTUUgJiYKKwlzYW5lX3Vuc2V0IEdJVF9BVVRIT1JfRU1BSUwgJiYKKwlnaXQgdmFyIEdJVF9BVVRIT1JfSURFTlQKKycKKwordGVzdF9sYXp5X3ByZXJlcSBFWFBFTlNJVkUgJworCXRlc3QgLW4gIiRHSVRfVEVTVF9MT05HIgorJworCit0ZXN0X2xhenlfcHJlcmVxIFVTUl9CSU5fVElNRSAnCisJdGVzdCAteCAvdXNyL2Jpbi90aW1lCisnCisKK3Rlc3RfbGF6eV9wcmVyZXEgTk9UX1JPT1QgJworCXVpZD0kKGlkIC11KSAmJgorCXRlc3QgIiR1aWQiICE9IDAKKycKKworIyBPbiBhIGZpbGVzeXN0ZW0gdGhhdCBsYWNrcyBTQU5JVFksIGEgZmlsZSBjYW4gYmUgZGVsZXRlZCBldmVuIGlmCisjIHRoZSBjb250YWluaW5nIGRpcmVjdG9yeSBkb2Vzbid0IGhhdmUgd3JpdGUgcGVybWlzc2lvbnMsIG9yIGEgZmlsZQorIyBjYW4gYmUgYWNjZXNzZWQgZXZlbiBpZiB0aGUgY29udGFpbmluZyBkaXJlY3RvcnkgZG9lc24ndCBoYXZlIHJlYWQKKyMgb3IgZXhlY3V0ZSBwZXJtaXNzaW9ucywgY2F1c2luZyBvdXIgdGVzdHMgdGhhdCB2YWxpZGF0ZSB0aGF0IEdpdAorIyB3b3JrcyBzZW5zaWJseSBpbiBzdWNoIHNpdHVhdGlvbnMuCit0ZXN0X2xhenlfcHJlcmVxIFNBTklUWSAnCisJbWtkaXIgU0FORVRFU1RELjEgU0FORVRFU1RELjIgJiYKKworCWNobW9kICt3IFNBTkVURVNURC4xIFNBTkVURVNURC4yICYmCisJPlNBTkVURVNURC4xL3ggMj5TQU5FVEVTVEQuMi94ICYmCisJY2htb2QgLXcgU0FORVRFU1RELjEgJiYKKwljaG1vZCAtcnggU0FORVRFU1RELjIgfHwKKwllcnJvciAiYnVnIGluIHRlc3Qgc3JpcHQ6IGNhbm5vdCBwcmVwYXJlIFNBTkVURVNURCIKKworCSEgcm0gU0FORVRFU1RELjEveCAmJiAhIHRlc3QgLWYgU0FORVRFU1RELjIveAorCXN0YXR1cz0kPworCisJY2htb2QgK3J3eCBTQU5FVEVTVEQuMSBTQU5FVEVTVEQuMiAmJgorCXJtIC1yZiBTQU5FVEVTVEQuMSBTQU5FVEVTVEQuMiB8fAorCWVycm9yICJidWcgaW4gdGVzdCBzcmlwdDogY2Fubm90IGNsZWFuIFNBTkVURVNURCIKKwlyZXR1cm4gJHN0YXR1cworJworCitHSVRfVU5aSVA9JHtHSVRfVU5aSVA6LXVuemlwfQordGVzdF9sYXp5X3ByZXJlcSBVTlpJUCAnCisJIiRHSVRfVU5aSVAiIC12CisJdGVzdCAkPyAtbmUgMTI3CisnCisKK3J1bl93aXRoX2xpbWl0ZWRfY21kbGluZSAoKSB7CisJKHVsaW1pdCAtcyAxMjggJiYgIiRAIikKK30KKwordGVzdF9sYXp5X3ByZXJlcSBDTURMSU5FX0xJTUlUICdydW5fd2l0aF9saW1pdGVkX2NtZGxpbmUgdHJ1ZScKZGlmZiAtLWdpdCBhL3QvdGVzdC10ZXJtaW5hbC5wZXJsIGIvdC90ZXN0LXRlcm1pbmFsLnBlcmwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTZiNmEwMwotLS0gL2Rldi9udWxsCisrKyBiL3QvdGVzdC10ZXJtaW5hbC5wZXJsCkBAIC0wLDAgKzEsMTA0IEBACisjIS91c3IvYmluL3BlcmwKK3VzZSA1LjAwODsKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7Cit1c2UgSU86OlB0eTsKK3VzZSBGaWxlOjpDb3B5OworCisjIFJ1biBAJGFyZ3YgaW4gdGhlIGJhY2tncm91bmQgd2l0aCBzdGRpbyByZWRpcmVjdGVkIHRvICRpbiwgJG91dCBhbmQgJGVyci4KK3N1YiBzdGFydF9jaGlsZCB7CisJbXkgKCRhcmd2LCAkaW4sICRvdXQsICRlcnIpID0gQF87CisJbXkgJHBpZCA9IGZvcms7CisJaWYgKG5vdCBkZWZpbmVkICRwaWQpIHsKKwkJZGllICJmb3JrIGZhaWxlZDogJCEiCisJfSBlbHNpZiAoJHBpZCA9PSAwKSB7CisJCW9wZW4gU1RESU4sICI8JiIsICRpbjsKKwkJb3BlbiBTVERPVVQsICI+JiIsICRvdXQ7CisJCW9wZW4gU1RERVJSLCAiPiYiLCAkZXJyOworCQljbG9zZSAkaW47CisJCWNsb3NlICRvdXQ7CisJCWV4ZWMoQCRhcmd2KSBvciBkaWUgImNhbm5vdCBleGVjICckYXJndi0+WzBdJzogJCEiCisJfQorCXJldHVybiAkcGlkOworfQorCisjIFdhaXQgZm9yICRwaWQgdG8gZmluaXNoLgorc3ViIGZpbmlzaF9jaGlsZCB7CisJIyBTaW1wbGlmaWVkIGZyb20gd2FpdF9vcl93aGluZSgpIGluIHJ1bi1jb21tYW5kLmMuCisJbXkgKCRwaWQpID0gQF87CisKKwlteSAkd2FpdGluZyA9IHdhaXRwaWQoJHBpZCwgMCk7CisJaWYgKCR3YWl0aW5nIDwgMCkgeworCQlkaWUgIndhaXRwaWQgZmFpbGVkOiAkISI7CisJfSBlbHNpZiAoJD8gJiAxMjcpIHsKKwkJbXkgJGNvZGUgPSAkPyAmIDEyNzsKKwkJd2FybiAiZGllZCBvZiBzaWduYWwgJGNvZGUiOworCQlyZXR1cm4gJGNvZGUgKyAxMjg7CisJfSBlbHNlIHsKKwkJcmV0dXJuICQ/ID4+IDg7CisJfQorfQorCitzdWIgeHNlbmRmaWxlIHsKKwlteSAoJG91dCwgJGluKSA9IEBfOworCisJIyBOb3RlOiB0aGUgcmVhbCBzZW5kZmlsZSgpIGNhbm5vdCByZWFkIGZyb20gYSB0ZXJtaW5hbC4KKworCSMgSXQgaXMgdW5zcGVjaWZpZWQgYnkgUE9TSVggd2hldGhlciByZWFkcworCSMgZnJvbSBhIGRpc2Nvbm5lY3RlZCB0ZXJtaW5hbCB3aWxsIHJldHVybgorCSMgRUlPIChhcyBpbiBBSVggNC54LCBJUklYLCBhbmQgTGludXgpIG9yCisJIyBlbmQtb2YtZmlsZS4gIEVpdGhlciBpcyBmaW5lLgorCWNvcHkoJGluLCAkb3V0LCA0MDk2KSBvciAkIXtFSU99IG9yIGRpZSAiY2Fubm90IGNvcHkgZnJvbSBjaGlsZDogJCEiOworfQorCitzdWIgY29weV9zdGRpbiB7CisJbXkgKCRpbikgPSBAXzsKKwlteSAkcGlkID0gZm9yazsKKwlpZiAoISRwaWQpIHsKKwkJeHNlbmRmaWxlKCRpbiwgXCpTVERJTik7CisJCWV4aXQgMDsKKwl9CisJY2xvc2UoJGluKTsKKwlyZXR1cm4gJHBpZDsKK30KKworc3ViIGNvcHlfc3RkaW8geworCW15ICgkb3V0LCAkZXJyKSA9IEBfOworCW15ICRwaWQgPSBmb3JrOworCWRlZmluZWQgJHBpZCBvciBkaWUgImZvcmsgZmFpbGVkOiAkISI7CisJaWYgKCEkcGlkKSB7CisJCWNsb3NlKCRvdXQpOworCQl4c2VuZGZpbGUoXCpTVERFUlIsICRlcnIpOworCQlleGl0IDA7CisJfQorCWNsb3NlKCRlcnIpOworCXhzZW5kZmlsZShcKlNURE9VVCwgJG91dCk7CisJZmluaXNoX2NoaWxkKCRwaWQpID09IDAKKwkJb3IgZXhpdCAxOworfQorCitpZiAoJCNBUkdWIDwgMSkgeworCWRpZSAidXNhZ2U6IHRlc3QtdGVybWluYWwgcHJvZ3JhbSBhcmdzIjsKK30KK215ICRtYXN0ZXJfaW4gPSBuZXcgSU86OlB0eTsKK215ICRtYXN0ZXJfb3V0ID0gbmV3IElPOjpQdHk7CitteSAkbWFzdGVyX2VyciA9IG5ldyBJTzo6UHR5OworJG1hc3Rlcl9pbi0+c2V0X3JhdygpOworJG1hc3Rlcl9vdXQtPnNldF9yYXcoKTsKKyRtYXN0ZXJfZXJyLT5zZXRfcmF3KCk7CiskbWFzdGVyX2luLT5zbGF2ZS0+c2V0X3JhdygpOworJG1hc3Rlcl9vdXQtPnNsYXZlLT5zZXRfcmF3KCk7CiskbWFzdGVyX2Vyci0+c2xhdmUtPnNldF9yYXcoKTsKK215ICRwaWQgPSBzdGFydF9jaGlsZChcQEFSR1YsICRtYXN0ZXJfaW4tPnNsYXZlLCAkbWFzdGVyX291dC0+c2xhdmUsICRtYXN0ZXJfZXJyLT5zbGF2ZSk7CitjbG9zZSAkbWFzdGVyX2luLT5zbGF2ZTsKK2Nsb3NlICRtYXN0ZXJfb3V0LT5zbGF2ZTsKK2Nsb3NlICRtYXN0ZXJfZXJyLT5zbGF2ZTsKK215ICRpbl9waWQgPSBjb3B5X3N0ZGluKCRtYXN0ZXJfaW4pOworY29weV9zdGRpbygkbWFzdGVyX291dCwgJG1hc3Rlcl9lcnIpOworbXkgJHJldCA9IGZpbmlzaF9jaGlsZCgkcGlkKTsKKyMgSWYgdGhlIGNoaWxkIHByb2Nlc3MgdGVybWluYXRlcyBiZWZvcmUgb3VyIGNvcHlfc3RkaW4oKSBwcm9jZXNzIGlzIGFibGUgdG8KKyMgd3JpdGUgYWxsIG9mIGl0cyBkYXRhIHRvICRtYXN0ZXJfaW4sIHRoZSBjb3B5X3N0ZGluKCkgcHJvY2VzcyBjb3VsZCBzdGFsbC4KKyMgU2VuZCBTSUdURVJNIHRvIGl0IHRvIGVuc3VyZSBpdCB0ZXJtaW5hdGVzLgora2lsbCAnVEVSTScsICRpbl9waWQ7CitmaW5pc2hfY2hpbGQoJGluX3BpZCk7CitleGl0KCRyZXQpOwpkaWZmIC0tZ2l0IGEvdC92YWxncmluZC8uZ2l0aWdub3JlIGIvdC92YWxncmluZC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YWU2NjcKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisvYmluLworL3RlbXBsYXRlcwpkaWZmIC0tZ2l0IGEvdC92YWxncmluZC9hbmFseXplLnNoIGIvdC92YWxncmluZC9hbmFseXplLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmZmM4MGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kL2FuYWx5emUuc2gKQEAgLTAsMCArMSwxMjcgQEAKKyMhL2Jpbi9zaAorCisjIEdldCBURVNUX09VVFBVVF9ESVJFQ1RPUlkgZnJvbSBHSVQtQlVJTEQtT1BUSU9OUyBpZiBpdCdzIHRoZXJlLi4uCisuICIkKGRpcm5hbWUgIiQwIikvLi4vLi4vR0lULUJVSUxELU9QVElPTlMiCisjIC4uLiBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0IHZhbHVlLgorOiAke1RFU1RfT1VUUFVUX0RJUkVDVE9SWT0kKGRpcm5hbWUgIiQwIikvLi59CisKK291dHB1dD0KK2NvdW50PTAKK3RvdGFsX2NvdW50PTAKK21pc3NpbmdfbWVzc2FnZT0KK25ld19saW5lPScKKycKKworIyBzdGFydCBvdXRwdXR0aW5nIHRoZSBjdXJyZW50IHZhbGdyaW5kIGVycm9yIGluICRvdXRfcHJlZml4LisrJGNvdW50LAorIyBhbmQgdGhlIHRlc3QgY2FzZSB3aGljaCBmYWlsZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgLm1lc3NhZ2UgZmlsZQorc3RhcnRfb3V0cHV0ICgpIHsKKwl0ZXN0IC16ICIkb3V0cHV0IiB8fCByZXR1cm4KKworCSMgcHJvZ3Jlc3MKKwl0b3RhbF9jb3VudD0kKCgkdG90YWxfY291bnQrMSkpCisJdGVzdCAtdCAyICYmIHByaW50ZiAiXHJGb3VuZCAlZCBlcnJvcnMiICR0b3RhbF9jb3VudCA+JjIKKworCWNvdW50PSQoKCRjb3VudCsxKSkKKwlvdXRwdXQ9JG91dF9wcmVmaXguJGNvdW50CisJOiA+ICRvdXRwdXQKKworCWVjaG8gIioqKiAkMSAqKioiID4gJG91dHB1dC5tZXNzYWdlCit9CisKK2ZpbmlzaF9vdXRwdXQgKCkgeworCXRlc3QgISAteiAiJG91dHB1dCIgfHwgcmV0dXJuCisJb3V0cHV0PQorCisJIyBpZiBhIHRlc3QgY2FzZSBoYXMgbW9yZSB0aGFuIG9uZSB2YWxncmluZCBlcnJvciwgd2UgbmVlZCB0bworCSMgY29weSB0aGUgbGFzdCAubWVzc2FnZSBmaWxlIHRvIHRoZSBwcmV2aW91cyBlcnJvcnMKKwl0ZXN0IC16ICIkbWlzc2luZ19tZXNzYWdlIiB8fCB7CisJCXdoaWxlIHRlc3QgJG1pc3NpbmdfbWVzc2FnZSAtbHQgJGNvdW50CisJCWRvCisJCQljcCAkb3V0X3ByZWZpeC4kY291bnQubWVzc2FnZSBcCisJCQkJJG91dF9wcmVmaXguJG1pc3NpbmdfbWVzc2FnZS5tZXNzYWdlCisJCQltaXNzaW5nX21lc3NhZ2U9JCgoJG1pc3NpbmdfbWVzc2FnZSsxKSkKKwkJZG9uZQorCQltaXNzaW5nX21lc3NhZ2U9CisJfQorfQorCisjIGdyb3VwIHRoZSB2YWxncmluZCBlcnJvcnMgYnkgYmFja3RyYWNlCitvdXRwdXRfYWxsICgpIHsKKwlsYXN0X2xpbmU9CisJaj0wCisJaT0xCisJd2hpbGUgdGVzdCAkaSAtbGUgJGNvdW50CisJZG8KKwkJIyBvdXRwdXQgPG51bWJlcj4gPGJhY2t0cmFjZS1pbi1vbmUtbGluZT4KKwkJZWNobyAiJGkgJCh0ciAnXG4nICcgJyA8ICRvdXRfcHJlZml4LiRpKSIKKwkJaT0kKCgkaSsxKSkKKwlkb25lIHwKKwlzb3J0IC10ICcgJyAtayAyIHwgIyBvcmRlciBieSA8YmFja3RyYWNlLWluLW9uZS1saW5lPgorCXdoaWxlIHJlYWQgbnVtYmVyIGxpbmUKKwlkbworCQkjIGZpbmQgZHVwbGljYXRlcywgZG8gbm90IG91dHB1dCBiYWNrdHJhY2UgdHdpY2UKKwkJaWYgdGVzdCAiJGxpbmUiICE9ICIkbGFzdF9saW5lIgorCQl0aGVuCisJCQlsYXN0X2xpbmU9JGxpbmUKKwkJCWo9JCgoJGorMSkpCisJCQlwcmludGYgIlxuVmFsZ3JpbmQgZXJyb3IgJGo6XG5cbiIKKwkJCWNhdCAkb3V0X3ByZWZpeC4kbnVtYmVyCisJCQlwcmludGYgIlxuZm91bmQgaW46XG4iCisJCWZpCisJCSMgcHJpbnQgdGhlIHRlc3QgY2FzZSB3aGVyZSB0aGlzIGNhbWUgZnJvbQorCQlwcmludGYgIlxuIgorCQljYXQgJG91dF9wcmVmaXguJG51bWJlci5tZXNzYWdlCisJZG9uZQorfQorCitoYW5kbGVfb25lICgpIHsKKwlPTERJRlM9JElGUworCUlGUz0iJG5ld19saW5lIgorCXdoaWxlIHJlYWQgbGluZQorCWRvCisJCWNhc2UgIiRsaW5lIiBpbgorCQkjIGJhY2t0cmFjZSwgcG9zc2libHkgYSBuZXcgb25lCisJCT09WzAtOV0qKQorCisJCQkjIERvZXMgdGhlIGN1cnJlbnQgdmFsZ3JpbmQgZXJyb3IgaGF2ZSBhIG1lc3NhZ2UgeWV0PworCQkJY2FzZSAiJG91dHB1dCIgaW4KKwkJCSoubWVzc2FnZSkKKwkJCQl0ZXN0IC16ICIkbWlzc2luZ19tZXNzYWdlIiAmJgorCQkJCW1pc3NpbmdfbWVzc2FnZT0kY291bnQKKwkJCQlvdXRwdXQ9CisJCQllc2FjCisKKwkJCXN0YXJ0X291dHB1dCAkKGJhc2VuYW1lICQxKQorCQkJZWNobyAiJGxpbmUiIHwKKwkJCXNlZCAncy89PVswLTldKj09Lz09dmFsZ3JpbmQ9PS8nID4+ICRvdXRwdXQKKwkJCTs7CisJCSMgZW5kIG9mIGJhY2t0cmFjZQorCQknfScpCisJCQl0ZXN0IC16ICIkb3V0cHV0IiB8fCB7CisJCQkJZWNobyAiJGxpbmUiID4+ICRvdXRwdXQKKwkJCQl0ZXN0ICRvdXRwdXQgPSAke291dHB1dCUubWVzc2FnZX0gJiYKKwkJCQlvdXRwdXQ9JG91dHB1dC5tZXNzYWdlCisJCQl9CisJCQk7OworCQkjIGVuZCBvZiB0ZXN0IGNhc2UKKwkJJycpCisJCQlmaW5pc2hfb3V0cHV0CisJCQk7OworCQkjIG5vcm1hbCBsaW5lOyBpZiAkb3V0cHV0IGlzIHNldCwgcHJpbnQgdGhlIGxpbmUKKwkJKikKKwkJCXRlc3QgLXogIiRvdXRwdXQiIHx8IGVjaG8gIiRsaW5lIiA+PiAkb3V0cHV0CisJCQk7OworCQllc2FjCisJZG9uZSA8ICQxCisJSUZTPSRPTERJRlMKKworCSMganVzdCB0byBiZSBzYWZlCisJZmluaXNoX291dHB1dAorfQorCitmb3IgdGVzdF9zY3JpcHQgaW4gIiRURVNUX09VVFBVVF9ESVJFQ1RPUlkiL3Rlc3QtcmVzdWx0cy8qLm91dAorZG8KKwloYW5kbGVfb25lICR0ZXN0X3NjcmlwdAorZG9uZQorCitvdXRwdXRfYWxsCmRpZmYgLS1naXQgYS90L3ZhbGdyaW5kL2RlZmF1bHQuc3VwcCBiL3QvdmFsZ3JpbmQvZGVmYXVsdC5zdXBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjcyNGYKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kL2RlZmF1bHQuc3VwcApAQCAtMCwwICsxLDUxIEBACit7CisJaWdub3JlLXpsaWItZXJyb3JzLWNvbmQKKwlNZW1jaGVjazpDb25kCisJb2JqOipsaWJ6LnNvKgorfQorCit7CisJaWdub3JlLXpsaWItZXJyb3JzLXZhbHVlOAorCU1lbWNoZWNrOlZhbHVlOAorCW9iajoqbGliei5zbyoKK30KKworeworCWlnbm9yZS16bGliLWVycm9ycy12YWx1ZTQKKwlNZW1jaGVjazpWYWx1ZTQKKwlvYmo6KmxpYnouc28qCit9CisKK3sKKwlpZ25vcmUtbGRzby1jb25kCisJTWVtY2hlY2s6Q29uZAorCW9iajoqbGQtKi5zbworfQorCit7CisJaWdub3JlLWxkc28tYWRkcjgKKwlNZW1jaGVjazpBZGRyOAorCW9iajoqbGQtKi5zbworfQorCit7CisJaWdub3JlLWxkc28tYWRkcjQKKwlNZW1jaGVjazpBZGRyNAorCW9iajoqbGQtKi5zbworfQorCit7CisJd3JpdGluZy1kYXRhLWZyb20temxpYi10cmlnZ2Vycy1ldmVuLW1vcmUtZXJyb3JzCisJTWVtY2hlY2s6UGFyYW0KKwl3cml0ZShidWYpCisJb2JqOi9saWIvbGQtKi5zbworCWZ1bjp3cml0ZV9pbl9mdWxsCisJZnVuOndyaXRlX2J1ZmZlcgorCWZ1bjp3cml0ZV9sb29zZV9vYmplY3QKK30KKworeworCWlnbm9yZS1zc2Utc3RybGVuLWludmFsaWQtcmVhZC1zaXplCisJTWVtY2hlY2s6QWRkcjQKKwlmdW46Y29weV9yZWYKK30KZGlmZiAtLWdpdCBhL3QvdmFsZ3JpbmQvdmFsZ3JpbmQuc2ggYi90L3ZhbGdyaW5kL3ZhbGdyaW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQyMTUzMDMKLS0tIC9kZXYvbnVsbAorKysgYi90L3ZhbGdyaW5kL3ZhbGdyaW5kLnNoCkBAIC0wLDAgKzEsMzIgQEAKKyMhL2Jpbi9zaAorCitiYXNlPSQoYmFzZW5hbWUgIiQwIikKKworVE9PTF9PUFRJT05TPSctLWxlYWstY2hlY2s9bm8nCisKK3Rlc3QgLXogIiRHSVRfVkFMR1JJTkRfRU5BQkxFRCIgJiYKK2V4ZWMgIiRHSVRfVkFMR1JJTkQiLy4uLy4uLyIkYmFzZSIgIiRAIgorCitjYXNlICIkR0lUX1ZBTEdSSU5EX01PREUiIGluCittZW1jaGVjay1mYXN0KQorCTs7CittZW1jaGVjaykKKwlWQUxHUklORF9WRVJTSU9OPSQodmFsZ3JpbmQgLS12ZXJzaW9uKQorCVZBTEdSSU5EX01BSk9SPSQoZXhwciAiJFZBTEdSSU5EX1ZFUlNJT04iIDogJ1teMC05XSpcKFswLTldKlwpJykKKwlWQUxHUklORF9NSU5PUj0kKGV4cHIgIiRWQUxHUklORF9WRVJTSU9OIiA6ICdbXjAtOV0qWzAtOV0qXC5cKFswLTldKlwpJykKKwl0ZXN0IDMgLWd0ICIkVkFMR1JJTkRfTUFKT1IiIHx8CisJdGVzdCAzIC1lcSAiJFZBTEdSSU5EX01BSk9SIiAtYSA0IC1ndCAiJFZBTEdSSU5EX01JTk9SIiB8fAorCVRPT0xfT1BUSU9OUz0iJFRPT0xfT1BUSU9OUyAtLXRyYWNrLW9yaWdpbnM9eWVzIgorCTs7CisqKQorCVRPT0xfT1BUSU9OUz0iLS10b29sPSRHSVRfVkFMR1JJTkRfTU9ERSIKK2VzYWMKKworZXhlYyB2YWxncmluZCAtcSAtLWVycm9yLWV4aXRjb2RlPTEyNiBcCisJLS1nZW4tc3VwcHJlc3Npb25zPWFsbCBcCisJLS1zdXBwcmVzc2lvbnM9IiRHSVRfVkFMR1JJTkQvZGVmYXVsdC5zdXBwIiBcCisJJFRPT0xfT1BUSU9OUyBcCisJLS1sb2ctZmQ9NCBcCisJLS1pbnB1dC1mZD00IFwKKwkkR0lUX1ZBTEdSSU5EX09QVElPTlMgXAorCSIkR0lUX1ZBTEdSSU5EIi8uLi8uLi8iJGJhc2UiICIkQCIKZGlmZiAtLWdpdCBhL3RhZy5jIGIvdGFnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyYTA2ZAotLS0gL2Rldi9udWxsCisrKyBiL3RhZy5jCkBAIC0wLDAgKzEsMTQyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorCitjb25zdCBjaGFyICp0YWdfdHlwZSA9ICJ0YWciOworCitzdHJ1Y3Qgb2JqZWN0ICpkZXJlZl90YWcoc3RydWN0IG9iamVjdCAqbywgY29uc3QgY2hhciAqd2FybiwgaW50IHdhcm5sZW4pCit7CisJd2hpbGUgKG8gJiYgby0+dHlwZSA9PSBPQkpfVEFHKQorCQlpZiAoKChzdHJ1Y3QgdGFnICopbyktPnRhZ2dlZCkKKwkJCW8gPSBwYXJzZV9vYmplY3QoKChzdHJ1Y3QgdGFnICopbyktPnRhZ2dlZC0+c2hhMSk7CisJCWVsc2UKKwkJCW8gPSBOVUxMOworCWlmICghbyAmJiB3YXJuKSB7CisJCWlmICghd2FybmxlbikKKwkJCXdhcm5sZW4gPSBzdHJsZW4od2Fybik7CisJCWVycm9yKCJtaXNzaW5nIG9iamVjdCByZWZlcmVuY2VkIGJ5ICclLipzJyIsIHdhcm5sZW4sIHdhcm4pOworCX0KKwlyZXR1cm4gbzsKK30KKworc3RydWN0IG9iamVjdCAqZGVyZWZfdGFnX25vdmVyaWZ5KHN0cnVjdCBvYmplY3QgKm8pCit7CisJd2hpbGUgKG8gJiYgby0+dHlwZSA9PSBPQkpfVEFHKSB7CisJCW8gPSBwYXJzZV9vYmplY3Qoby0+c2hhMSk7CisJCWlmIChvICYmIG8tPnR5cGUgPT0gT0JKX1RBRyAmJiAoKHN0cnVjdCB0YWcgKilvKS0+dGFnZ2VkKQorCQkJbyA9ICgoc3RydWN0IHRhZyAqKW8pLT50YWdnZWQ7CisJCWVsc2UKKwkJCW8gPSBOVUxMOworCX0KKwlyZXR1cm4gbzsKK30KKworc3RydWN0IHRhZyAqbG9va3VwX3RhZyhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IGxvb2t1cF9vYmplY3Qoc2hhMSk7CisJaWYgKCFvYmopCisJCXJldHVybiBjcmVhdGVfb2JqZWN0KHNoYTEsIGFsbG9jX3RhZ19ub2RlKCkpOworCXJldHVybiBvYmplY3RfYXNfdHlwZShvYmosIE9CSl9UQUcsIDApOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwYXJzZV90YWdfZGF0ZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKnRhaWwpCit7CisJY29uc3QgY2hhciAqZGF0ZXB0cjsKKworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnPicpCisJCS8qIG5hZGEgKi87CisJaWYgKGJ1ZiA+PSB0YWlsKQorCQlyZXR1cm4gMDsKKwlkYXRlcHRyID0gYnVmOworCXdoaWxlIChidWYgPCB0YWlsICYmICpidWYrKyAhPSAnXG4nKQorCQkvKiBuYWRhICovOworCWlmIChidWYgPj0gdGFpbCkKKwkJcmV0dXJuIDA7CisJLyogZGF0ZXB0ciA8IGJ1ZiAmJiBidWZbLTFdID09ICdcbicsIHNvIHN0cnRvdWwgd2lsbCBzdG9wIGF0IGJ1Zi0xICovCisJcmV0dXJuIHN0cnRvdWwoZGF0ZXB0ciwgTlVMTCwgMTApOworfQorCitpbnQgcGFyc2VfdGFnX2J1ZmZlcihzdHJ1Y3QgdGFnICppdGVtLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyIHR5cGVbMjBdOworCWNvbnN0IGNoYXIgKmJ1ZnB0ciA9IGRhdGE7CisJY29uc3QgY2hhciAqdGFpbCA9IGJ1ZnB0ciArIHNpemU7CisJY29uc3QgY2hhciAqbmw7CisKKwlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKKwkJcmV0dXJuIDA7CisJaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CisKKwlpZiAoc2l6ZSA8IDY0KQorCQlyZXR1cm4gLTE7CisJaWYgKG1lbWNtcCgib2JqZWN0ICIsIGJ1ZnB0ciwgNykgfHwgZ2V0X3NoYTFfaGV4KGJ1ZnB0ciArIDcsIHNoYTEpIHx8IGJ1ZnB0cls0N10gIT0gJ1xuJykKKwkJcmV0dXJuIC0xOworCWJ1ZnB0ciArPSA0ODsgLyogIm9iamVjdCAiICsgc2hhMSArICJcbiIgKi8KKworCWlmICghc3RhcnRzX3dpdGgoYnVmcHRyLCAidHlwZSAiKSkKKwkJcmV0dXJuIC0xOworCWJ1ZnB0ciArPSA1OworCW5sID0gbWVtY2hyKGJ1ZnB0ciwgJ1xuJywgdGFpbCAtIGJ1ZnB0cik7CisJaWYgKCFubCB8fCBzaXplb2YodHlwZSkgPD0gKG5sIC0gYnVmcHRyKSkKKwkJcmV0dXJuIC0xOworCW1lbWNweSh0eXBlLCBidWZwdHIsIG5sIC0gYnVmcHRyKTsKKwl0eXBlW25sIC0gYnVmcHRyXSA9ICdcMCc7CisJYnVmcHRyID0gbmwgKyAxOworCisJaWYgKCFzdHJjbXAodHlwZSwgYmxvYl90eXBlKSkgeworCQlpdGVtLT50YWdnZWQgPSAmbG9va3VwX2Jsb2Ioc2hhMSktPm9iamVjdDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgdHJlZV90eXBlKSkgeworCQlpdGVtLT50YWdnZWQgPSAmbG9va3VwX3RyZWUoc2hhMSktPm9iamVjdDsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodHlwZSwgY29tbWl0X3R5cGUpKSB7CisJCWl0ZW0tPnRhZ2dlZCA9ICZsb29rdXBfY29tbWl0KHNoYTEpLT5vYmplY3Q7CisJfSBlbHNlIGlmICghc3RyY21wKHR5cGUsIHRhZ190eXBlKSkgeworCQlpdGVtLT50YWdnZWQgPSAmbG9va3VwX3RhZyhzaGExKS0+b2JqZWN0OworCX0gZWxzZSB7CisJCWVycm9yKCJVbmtub3duIHR5cGUgJXMiLCB0eXBlKTsKKwkJaXRlbS0+dGFnZ2VkID0gTlVMTDsKKwl9CisKKwlpZiAoYnVmcHRyICsgNCA8IHRhaWwgJiYgc3RhcnRzX3dpdGgoYnVmcHRyLCAidGFnICIpKQorCQk7IAkJLyogZ29vZCAqLworCWVsc2UKKwkJcmV0dXJuIC0xOworCWJ1ZnB0ciArPSA0OworCW5sID0gbWVtY2hyKGJ1ZnB0ciwgJ1xuJywgdGFpbCAtIGJ1ZnB0cik7CisJaWYgKCFubCkKKwkJcmV0dXJuIC0xOworCWl0ZW0tPnRhZyA9IHhtZW1kdXB6KGJ1ZnB0ciwgbmwgLSBidWZwdHIpOworCWJ1ZnB0ciA9IG5sICsgMTsKKworCWlmIChidWZwdHIgKyA3IDwgdGFpbCAmJiBzdGFydHNfd2l0aChidWZwdHIsICJ0YWdnZXIgIikpCisJCWl0ZW0tPmRhdGUgPSBwYXJzZV90YWdfZGF0ZShidWZwdHIsIHRhaWwpOworCWVsc2UKKwkJaXRlbS0+ZGF0ZSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX3RhZyhzdHJ1Y3QgdGFnICppdGVtKQoreworCWVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwl2b2lkICpkYXRhOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgcmV0OworCisJaWYgKGl0ZW0tPm9iamVjdC5wYXJzZWQpCisJCXJldHVybiAwOworCWRhdGEgPSByZWFkX3NoYTFfZmlsZShpdGVtLT5vYmplY3Quc2hhMSwgJnR5cGUsICZzaXplKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHJlYWQgJXMiLAorCQkJICAgICBzaGExX3RvX2hleChpdGVtLT5vYmplY3Quc2hhMSkpOworCWlmICh0eXBlICE9IE9CSl9UQUcpIHsKKwkJZnJlZShkYXRhKTsKKwkJcmV0dXJuIGVycm9yKCJPYmplY3QgJXMgbm90IGEgdGFnIiwKKwkJCSAgICAgc2hhMV90b19oZXgoaXRlbS0+b2JqZWN0LnNoYTEpKTsKKwl9CisJcmV0ID0gcGFyc2VfdGFnX2J1ZmZlcihpdGVtLCBkYXRhLCBzaXplKTsKKwlmcmVlKGRhdGEpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90YWcuaCBiL3RhZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NTgwYWUKLS0tIC9kZXYvbnVsbAorKysgYi90YWcuaApAQCAtMCwwICsxLDIxIEBACisjaWZuZGVmIFRBR19ICisjZGVmaW5lIFRBR19ICisKKyNpbmNsdWRlICJvYmplY3QuaCIKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnRhZ190eXBlOworCitzdHJ1Y3QgdGFnIHsKKwlzdHJ1Y3Qgb2JqZWN0IG9iamVjdDsKKwlzdHJ1Y3Qgb2JqZWN0ICp0YWdnZWQ7CisJY2hhciAqdGFnOworCXVuc2lnbmVkIGxvbmcgZGF0ZTsKK307CisKK2V4dGVybiBzdHJ1Y3QgdGFnICpsb29rdXBfdGFnKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworZXh0ZXJuIGludCBwYXJzZV90YWdfYnVmZmVyKHN0cnVjdCB0YWcgKml0ZW0sIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gaW50IHBhcnNlX3RhZyhzdHJ1Y3QgdGFnICppdGVtKTsKK2V4dGVybiBzdHJ1Y3Qgb2JqZWN0ICpkZXJlZl90YWcoc3RydWN0IG9iamVjdCAqLCBjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gc3RydWN0IG9iamVjdCAqZGVyZWZfdGFnX25vdmVyaWZ5KHN0cnVjdCBvYmplY3QgKik7CisKKyNlbmRpZiAvKiBUQUdfSCAqLwpkaWZmIC0tZ2l0IGEvdGFyLmggYi90YXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDY3NzA1Ci0tLSAvZGV2L251bGwKKysrIGIvdGFyLmgKQEAgLTAsMCArMSwyNSBAQAorI2RlZmluZSBUWVBFRkxBR19BVVRPCQknXDAnCisjZGVmaW5lIFRZUEVGTEFHX1JFRwkJJzAnCisjZGVmaW5lIFRZUEVGTEFHX0xOSwkJJzInCisjZGVmaW5lIFRZUEVGTEFHX0RJUgkJJzUnCisjZGVmaW5lIFRZUEVGTEFHX0dMT0JBTF9IRUFERVIJJ2cnCisjZGVmaW5lIFRZUEVGTEFHX0VYVF9IRUFERVIJJ3gnCisKK3N0cnVjdCB1c3Rhcl9oZWFkZXIgeworCWNoYXIgbmFtZVsxMDBdOwkJLyogICAwICovCisJY2hhciBtb2RlWzhdOwkJLyogMTAwICovCisJY2hhciB1aWRbOF07CQkvKiAxMDggKi8KKwljaGFyIGdpZFs4XTsJCS8qIDExNiAqLworCWNoYXIgc2l6ZVsxMl07CQkvKiAxMjQgKi8KKwljaGFyIG10aW1lWzEyXTsJCS8qIDEzNiAqLworCWNoYXIgY2hrc3VtWzhdOwkJLyogMTQ4ICovCisJY2hhciB0eXBlZmxhZ1sxXTsJLyogMTU2ICovCisJY2hhciBsaW5rbmFtZVsxMDBdOwkvKiAxNTcgKi8KKwljaGFyIG1hZ2ljWzZdOwkJLyogMjU3ICovCisJY2hhciB2ZXJzaW9uWzJdOwkvKiAyNjMgKi8KKwljaGFyIHVuYW1lWzMyXTsJCS8qIDI2NSAqLworCWNoYXIgZ25hbWVbMzJdOwkJLyogMjk3ICovCisJY2hhciBkZXZtYWpvcls4XTsJLyogMzI5ICovCisJY2hhciBkZXZtaW5vcls4XTsJLyogMzM3ICovCisJY2hhciBwcmVmaXhbMTU1XTsJLyogMzQ1ICovCit9OwpkaWZmIC0tZ2l0IGEvdGVtcGZpbGUuYyBiL3RlbXBmaWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFmN2ViZgotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBmaWxlLmMKQEAgLTAsMCArMSwzMDUgQEAKKy8qCisgKiBTdGF0ZSBkaWFncmFtIGFuZCBjbGVhbnVwCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogSWYgdGhlIHByb2dyYW0gZXhpdHMgd2hpbGUgYSB0ZW1wb3JhcnkgZmlsZSBpcyBhY3RpdmUsIHdlIHdhbnQgdG8KKyAqIG1ha2Ugc3VyZSB0aGF0IHdlIHJlbW92ZSBpdC4gVGhpcyBpcyBkb25lIGJ5IHJlbWVtYmVyaW5nIHRoZSBhY3RpdmUKKyAqIHRlbXBvcmFyeSBmaWxlcyBpbiBhIGxpbmtlZCBsaXN0LCBgdGVtcGZpbGVfbGlzdGAuIEFuIGBhdGV4aXQoMylgCisgKiBoYW5kbGVyIGFuZCBhIHNpZ25hbCBoYW5kbGVyIGFyZSByZWdpc3RlcmVkLCB0byBjbGVhbiB1cCBhbnkgYWN0aXZlCisgKiB0ZW1wb3JhcnkgZmlsZXMuCisgKgorICogQmVjYXVzZSB0aGUgc2lnbmFsIGhhbmRsZXIgY2FuIHJ1biBhdCBhbnkgdGltZSwgYHRlbXBmaWxlX2xpc3RgIGFuZAorICogdGhlIGB0ZW1wZmlsZWAgb2JqZWN0cyB0aGF0IGNvbXByaXNlIGl0IG11c3QgYmUga2VwdCBpbgorICogc2VsZi1jb25zaXN0ZW50IHN0YXRlcyBhdCBhbGwgdGltZXMuCisgKgorICogVGhlIHBvc3NpYmxlIHN0YXRlcyBvZiBhIGB0ZW1wZmlsZWAgb2JqZWN0IGFyZSBhcyBmb2xsb3dzOgorICoKKyAqIC0gVW5pbml0aWFsaXplZC4gSW4gdGhpcyBzdGF0ZSB0aGUgb2JqZWN0J3MgYG9uX2xpc3RgIGZpZWxkIG11c3QgYmUKKyAqICAgemVybyBidXQgdGhlIHJlc3Qgb2YgaXRzIGNvbnRlbnRzIG5lZWQgbm90IGJlIGluaXRpYWxpemVkLiBBcworICogICBzb29uIGFzIHRoZSBvYmplY3QgaXMgdXNlZCBpbiBhbnkgd2F5LCBpdCBpcyBpcnJldm9jYWJseQorICogICByZWdpc3RlcmVkIGluIGB0ZW1wZmlsZV9saXN0YCwgYW5kIGBvbl9saXN0YCBpcyBzZXQuCisgKgorICogLSBBY3RpdmUsIGZpbGUgb3BlbiAoYWZ0ZXIgYGNyZWF0ZV90ZW1wZmlsZSgpYCBvcgorICogICBgcmVvcGVuX3RlbXBmaWxlKClgKS4gSW4gdGhpcyBzdGF0ZToKKyAqCisgKiAgIC0gdGhlIHRlbXBvcmFyeSBmaWxlIGV4aXN0cworICogICAtIGBhY3RpdmVgIGlzIHNldAorICogICAtIGBmaWxlbmFtZWAgaG9sZHMgdGhlIGZpbGVuYW1lIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZQorICogICAtIGBmZGAgaG9sZHMgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiBmb3Igd3JpdGluZyB0byBpdAorICogICAtIGBmcGAgaG9sZHMgYSBwb2ludGVyIHRvIGFuIG9wZW4gYEZJTEVgIG9iamVjdCBpZiBhbmQgb25seSBpZgorICogICAgIGBmZG9wZW5fdGVtcGZpbGUoKWAgaGFzIGJlZW4gY2FsbGVkIG9uIHRoZSBvYmplY3QKKyAqICAgLSBgb3duZXJgIGhvbGRzIHRoZSBQSUQgb2YgdGhlIHByb2Nlc3MgdGhhdCBjcmVhdGVkIHRoZSBmaWxlCisgKgorICogLSBBY3RpdmUsIGZpbGUgY2xvc2VkIChhZnRlciBzdWNjZXNzZnVsIGBjbG9zZV90ZW1wZmlsZSgpYCkuIFNhbWUKKyAqICAgYXMgdGhlIHByZXZpb3VzIHN0YXRlLCBleGNlcHQgdGhhdCB0aGUgdGVtcG9yYXJ5IGZpbGUgaXMgY2xvc2VkLAorICogICBgZmRgIGlzIC0xLCBhbmQgYGZwYCBpcyBgTlVMTGAuCisgKgorICogLSBJbmFjdGl2ZSAoYWZ0ZXIgYGRlbGV0ZV90ZW1wZmlsZSgpYCwgYHJlbmFtZV90ZW1wZmlsZSgpYCwgYQorICogICBmYWlsZWQgYXR0ZW1wdCB0byBjcmVhdGUgYSB0ZW1wb3JhcnkgZmlsZSwgb3IgYSBmYWlsZWQKKyAqICAgYGNsb3NlX3RlbXBmaWxlKClgKS4gSW4gdGhpcyBzdGF0ZToKKyAqCisgKiAgIC0gYGFjdGl2ZWAgaXMgdW5zZXQKKyAqICAgLSBgZmlsZW5hbWVgIGlzIGVtcHR5ICh1c3VhbGx5LCB0aG91Z2ggdGhlcmUgYXJlIHRyYW5zaXRvcnkKKyAqICAgICBzdGF0ZXMgaW4gd2hpY2ggdGhpcyBjb25kaXRpb24gZG9lc24ndCBob2xkKS4gQ2xpZW50IGNvZGUgc2hvdWxkCisgKiAgICAgKm5vdCogcmVseSBvbiB0aGUgZmlsZW5hbWUgYmVpbmcgZW1wdHkgaW4gdGhpcyBzdGF0ZS4KKyAqICAgLSBgZmRgIGlzIC0xIGFuZCBgZnBgIGlzIGBOVUxMYAorICogICAtIHRoZSBvYmplY3QgaXMgbGVmdCByZWdpc3RlcmVkIGluIHRoZSBgdGVtcGZpbGVfbGlzdGAsIGFuZAorICogICAgIGBvbl9saXN0YCBpcyBzZXQuCisgKgorICogQSB0ZW1wb3JhcnkgZmlsZSBpcyBvd25lZCBieSB0aGUgcHJvY2VzcyB0aGF0IGNyZWF0ZWQgaXQuIFRoZQorICogYHRlbXBmaWxlYCBoYXMgYW4gYG93bmVyYCBmaWVsZCB0aGF0IHJlY29yZHMgdGhlIG93bmVyJ3MgUElELiBUaGlzCisgKiBmaWVsZCBpcyB1c2VkIHRvIHByZXZlbnQgYSBmb3JrZWQgcHJvY2VzcyBmcm9tIGRlbGV0aW5nIGEgdGVtcG9yYXJ5CisgKiBmaWxlIGNyZWF0ZWQgYnkgaXRzIHBhcmVudC4KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0ZW1wZmlsZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisKK3N0YXRpYyBzdHJ1Y3QgdGVtcGZpbGUgKnZvbGF0aWxlIHRlbXBmaWxlX2xpc3Q7CisKK3N0YXRpYyB2b2lkIHJlbW92ZV90ZW1wZmlsZXMoaW50IHNraXBfZmNsb3NlKQoreworCXBpZF90IG1lID0gZ2V0cGlkKCk7CisKKwl3aGlsZSAodGVtcGZpbGVfbGlzdCkgeworCQlpZiAodGVtcGZpbGVfbGlzdC0+b3duZXIgPT0gbWUpIHsKKwkJCS8qIGZjbG9zZSgpIGlzIG5vdCBzYWZlIHRvIGNhbGwgaW4gYSBzaWduYWwgaGFuZGxlciAqLworCQkJaWYgKHNraXBfZmNsb3NlKQorCQkJCXRlbXBmaWxlX2xpc3QtPmZwID0gTlVMTDsKKwkJCWRlbGV0ZV90ZW1wZmlsZSh0ZW1wZmlsZV9saXN0KTsKKwkJfQorCQl0ZW1wZmlsZV9saXN0ID0gdGVtcGZpbGVfbGlzdC0+bmV4dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV90ZW1wZmlsZXNfb25fZXhpdCh2b2lkKQoreworCXJlbW92ZV90ZW1wZmlsZXMoMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV90ZW1wZmlsZXNfb25fc2lnbmFsKGludCBzaWdubykKK3sKKwlyZW1vdmVfdGVtcGZpbGVzKDEpOworCXNpZ2NoYWluX3BvcChzaWdubyk7CisJcmFpc2Uoc2lnbm8pOworfQorCisvKgorICogSW5pdGlhbGl6ZSAqdGVtcGZpbGUgaWYgbmVjZXNzYXJ5IGFuZCBhZGQgaXQgdG8gdGVtcGZpbGVfbGlzdC4KKyAqLworc3RhdGljIHZvaWQgcHJlcGFyZV90ZW1wZmlsZV9vYmplY3Qoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSkKK3sKKwlpZiAoIXRlbXBmaWxlX2xpc3QpIHsKKwkJLyogT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gKi8KKwkJc2lnY2hhaW5fcHVzaF9jb21tb24ocmVtb3ZlX3RlbXBmaWxlc19vbl9zaWduYWwpOworCQlhdGV4aXQocmVtb3ZlX3RlbXBmaWxlc19vbl9leGl0KTsKKwl9CisKKwlpZiAodGVtcGZpbGUtPmFjdGl2ZSkKKwkJZGllKCJCVUc6IHByZXBhcmVfdGVtcGZpbGVfb2JqZWN0IGNhbGxlZCBmb3IgYWN0aXZlIG9iamVjdCIpOworCWlmICghdGVtcGZpbGUtPm9uX2xpc3QpIHsKKwkJLyogSW5pdGlhbGl6ZSAqdGVtcGZpbGUgYW5kIGFkZCBpdCB0byB0ZW1wZmlsZV9saXN0OiAqLworCQl0ZW1wZmlsZS0+ZmQgPSAtMTsKKwkJdGVtcGZpbGUtPmZwID0gTlVMTDsKKwkJdGVtcGZpbGUtPmFjdGl2ZSA9IDA7CisJCXRlbXBmaWxlLT5vd25lciA9IDA7CisJCXN0cmJ1Zl9pbml0KCZ0ZW1wZmlsZS0+ZmlsZW5hbWUsIDApOworCQl0ZW1wZmlsZS0+bmV4dCA9IHRlbXBmaWxlX2xpc3Q7CisJCXRlbXBmaWxlX2xpc3QgPSB0ZW1wZmlsZTsKKwkJdGVtcGZpbGUtPm9uX2xpc3QgPSAxOworCX0gZWxzZSBpZiAodGVtcGZpbGUtPmZpbGVuYW1lLmxlbikgeworCQkvKiBUaGlzIHNob3VsZG4ndCBoYXBwZW4sIGJ1dCBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5LiAqLworCQlkaWUoIkJVRzogcHJlcGFyZV90ZW1wZmlsZV9vYmplY3QgY2FsbGVkIGZvciBpbXByb3Blcmx5LXJlc2V0IG9iamVjdCIpOworCX0KK30KKworLyogTWFrZSBzdXJlIGVycm5vIGNvbnRhaW5zIGEgbWVhbmluZ2Z1bCB2YWx1ZSBvbiBlcnJvciAqLworaW50IGNyZWF0ZV90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlLCBjb25zdCBjaGFyICpwYXRoKQoreworCXByZXBhcmVfdGVtcGZpbGVfb2JqZWN0KHRlbXBmaWxlKTsKKworCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmdGVtcGZpbGUtPmZpbGVuYW1lLCBwYXRoKTsKKwl0ZW1wZmlsZS0+ZmQgPSBvcGVuKHRlbXBmaWxlLT5maWxlbmFtZS5idWYsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX0VYQ0wsIDA2NjYpOworCWlmICh0ZW1wZmlsZS0+ZmQgPCAwKSB7CisJCXN0cmJ1Zl9yZXNldCgmdGVtcGZpbGUtPmZpbGVuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKwl0ZW1wZmlsZS0+b3duZXIgPSBnZXRwaWQoKTsKKwl0ZW1wZmlsZS0+YWN0aXZlID0gMTsKKwlpZiAoYWRqdXN0X3NoYXJlZF9wZXJtKHRlbXBmaWxlLT5maWxlbmFtZS5idWYpKSB7CisJCWludCBzYXZlX2Vycm5vID0gZXJybm87CisJCWVycm9yKCJjYW5ub3QgZml4IHBlcm1pc3Npb24gYml0cyBvbiAlcyIsIHRlbXBmaWxlLT5maWxlbmFtZS5idWYpOworCQlkZWxldGVfdGVtcGZpbGUodGVtcGZpbGUpOworCQllcnJubyA9IHNhdmVfZXJybm87CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIHRlbXBmaWxlLT5mZDsKK30KKwordm9pZCByZWdpc3Rlcl90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlLCBjb25zdCBjaGFyICpwYXRoKQoreworCXByZXBhcmVfdGVtcGZpbGVfb2JqZWN0KHRlbXBmaWxlKTsKKwlzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoJnRlbXBmaWxlLT5maWxlbmFtZSwgcGF0aCk7CisJdGVtcGZpbGUtPm93bmVyID0gZ2V0cGlkKCk7CisJdGVtcGZpbGUtPmFjdGl2ZSA9IDE7Cit9CisKK2ludCBta3NfdGVtcGZpbGVfc20oc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSwKKwkJICAgIGNvbnN0IGNoYXIgKnRlbXBsYXRlLCBpbnQgc3VmZml4bGVuLCBpbnQgbW9kZSkKK3sKKwlwcmVwYXJlX3RlbXBmaWxlX29iamVjdCh0ZW1wZmlsZSk7CisKKwlzdHJidWZfYWRkX2Fic29sdXRlX3BhdGgoJnRlbXBmaWxlLT5maWxlbmFtZSwgdGVtcGxhdGUpOworCXRlbXBmaWxlLT5mZCA9IGdpdF9ta3N0ZW1wc19tb2RlKHRlbXBmaWxlLT5maWxlbmFtZS5idWYsIHN1ZmZpeGxlbiwgbW9kZSk7CisJaWYgKHRlbXBmaWxlLT5mZCA8IDApIHsKKwkJc3RyYnVmX3Jlc2V0KCZ0ZW1wZmlsZS0+ZmlsZW5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCXRlbXBmaWxlLT5vd25lciA9IGdldHBpZCgpOworCXRlbXBmaWxlLT5hY3RpdmUgPSAxOworCXJldHVybiB0ZW1wZmlsZS0+ZmQ7Cit9CisKK2ludCBta3NfdGVtcGZpbGVfdHNtKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUsCisJCSAgICAgY29uc3QgY2hhciAqdGVtcGxhdGUsIGludCBzdWZmaXhsZW4sIGludCBtb2RlKQoreworCWNvbnN0IGNoYXIgKnRtcGRpcjsKKworCXByZXBhcmVfdGVtcGZpbGVfb2JqZWN0KHRlbXBmaWxlKTsKKworCXRtcGRpciA9IGdldGVudigiVE1QRElSIik7CisJaWYgKCF0bXBkaXIpCisJCXRtcGRpciA9ICIvdG1wIjsKKworCXN0cmJ1Zl9hZGRmKCZ0ZW1wZmlsZS0+ZmlsZW5hbWUsICIlcy8lcyIsIHRtcGRpciwgdGVtcGxhdGUpOworCXRlbXBmaWxlLT5mZCA9IGdpdF9ta3N0ZW1wc19tb2RlKHRlbXBmaWxlLT5maWxlbmFtZS5idWYsIHN1ZmZpeGxlbiwgbW9kZSk7CisJaWYgKHRlbXBmaWxlLT5mZCA8IDApIHsKKwkJc3RyYnVmX3Jlc2V0KCZ0ZW1wZmlsZS0+ZmlsZW5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCXRlbXBmaWxlLT5vd25lciA9IGdldHBpZCgpOworCXRlbXBmaWxlLT5hY3RpdmUgPSAxOworCXJldHVybiB0ZW1wZmlsZS0+ZmQ7Cit9CisKK2ludCB4bWtzX3RlbXBmaWxlX20oc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSwgY29uc3QgY2hhciAqdGVtcGxhdGUsIGludCBtb2RlKQoreworCWludCBmZDsKKwlzdHJ1Y3Qgc3RyYnVmIGZ1bGxfdGVtcGxhdGUgPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRfYWJzb2x1dGVfcGF0aCgmZnVsbF90ZW1wbGF0ZSwgdGVtcGxhdGUpOworCWZkID0gbWtzX3RlbXBmaWxlX20odGVtcGZpbGUsIGZ1bGxfdGVtcGxhdGUuYnVmLCBtb2RlKTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oIlVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJyVzJyIsCisJCQkgIGZ1bGxfdGVtcGxhdGUuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZmdWxsX3RlbXBsYXRlKTsKKwlyZXR1cm4gZmQ7Cit9CisKK0ZJTEUgKmZkb3Blbl90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlLCBjb25zdCBjaGFyICptb2RlKQoreworCWlmICghdGVtcGZpbGUtPmFjdGl2ZSkKKwkJZGllKCJCVUc6IGZkb3Blbl90ZW1wZmlsZSgpIGNhbGxlZCBmb3IgaW5hY3RpdmUgb2JqZWN0Iik7CisJaWYgKHRlbXBmaWxlLT5mcCkKKwkJZGllKCJCVUc6IGZkb3Blbl90ZW1wZmlsZSgpIGNhbGxlZCBmb3Igb3BlbiBvYmplY3QiKTsKKworCXRlbXBmaWxlLT5mcCA9IGZkb3Blbih0ZW1wZmlsZS0+ZmQsIG1vZGUpOworCXJldHVybiB0ZW1wZmlsZS0+ZnA7Cit9CisKK2NvbnN0IGNoYXIgKmdldF90ZW1wZmlsZV9wYXRoKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUpCit7CisJaWYgKCF0ZW1wZmlsZS0+YWN0aXZlKQorCQlkaWUoIkJVRzogZ2V0X3RlbXBmaWxlX3BhdGgoKSBjYWxsZWQgZm9yIGluYWN0aXZlIG9iamVjdCIpOworCXJldHVybiB0ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmOworfQorCitpbnQgZ2V0X3RlbXBmaWxlX2ZkKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUpCit7CisJaWYgKCF0ZW1wZmlsZS0+YWN0aXZlKQorCQlkaWUoIkJVRzogZ2V0X3RlbXBmaWxlX2ZkKCkgY2FsbGVkIGZvciBpbmFjdGl2ZSBvYmplY3QiKTsKKwlyZXR1cm4gdGVtcGZpbGUtPmZkOworfQorCitGSUxFICpnZXRfdGVtcGZpbGVfZnAoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSkKK3sKKwlpZiAoIXRlbXBmaWxlLT5hY3RpdmUpCisJCWRpZSgiQlVHOiBnZXRfdGVtcGZpbGVfZnAoKSBjYWxsZWQgZm9yIGluYWN0aXZlIG9iamVjdCIpOworCXJldHVybiB0ZW1wZmlsZS0+ZnA7Cit9CisKK2ludCBjbG9zZV90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlKQoreworCWludCBmZCA9IHRlbXBmaWxlLT5mZDsKKwlGSUxFICpmcCA9IHRlbXBmaWxlLT5mcDsKKwlpbnQgZXJyOworCisJaWYgKGZkIDwgMCkKKwkJcmV0dXJuIDA7CisKKwl0ZW1wZmlsZS0+ZmQgPSAtMTsKKwlpZiAoZnApIHsKKwkJdGVtcGZpbGUtPmZwID0gTlVMTDsKKworCQkvKgorCQkgKiBOb3RlOiBubyBzaG9ydC1jaXJjdWl0aW5nIGhlcmU7IHdlIHdhbnQgdG8gZmNsb3NlKCkKKwkJICogaW4gYW55IGNhc2UhCisJCSAqLworCQllcnIgPSBmZXJyb3IoZnApIHwgZmNsb3NlKGZwKTsKKwl9IGVsc2UgeworCQllcnIgPSBjbG9zZShmZCk7CisJfQorCisJaWYgKGVycikgeworCQlpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworCQlkZWxldGVfdGVtcGZpbGUodGVtcGZpbGUpOworCQllcnJubyA9IHNhdmVfZXJybm87CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJlb3Blbl90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlKQoreworCWlmICgwIDw9IHRlbXBmaWxlLT5mZCkKKwkJZGllKCJCVUc6IHJlb3Blbl90ZW1wZmlsZSBjYWxsZWQgZm9yIGFuIG9wZW4gb2JqZWN0Iik7CisJaWYgKCF0ZW1wZmlsZS0+YWN0aXZlKQorCQlkaWUoIkJVRzogcmVvcGVuX3RlbXBmaWxlIGNhbGxlZCBmb3IgYW4gaW5hY3RpdmUgb2JqZWN0Iik7CisJdGVtcGZpbGUtPmZkID0gb3Blbih0ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmLCBPX1dST05MWSk7CisJcmV0dXJuIHRlbXBmaWxlLT5mZDsKK30KKworaW50IHJlbmFtZV90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlLCBjb25zdCBjaGFyICpwYXRoKQoreworCWlmICghdGVtcGZpbGUtPmFjdGl2ZSkKKwkJZGllKCJCVUc6IHJlbmFtZV90ZW1wZmlsZSBjYWxsZWQgZm9yIGluYWN0aXZlIG9iamVjdCIpOworCisJaWYgKGNsb3NlX3RlbXBmaWxlKHRlbXBmaWxlKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJlbmFtZSh0ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmLCBwYXRoKSkgeworCQlpbnQgc2F2ZV9lcnJubyA9IGVycm5vOworCQlkZWxldGVfdGVtcGZpbGUodGVtcGZpbGUpOworCQllcnJubyA9IHNhdmVfZXJybm87CisJCXJldHVybiAtMTsKKwl9CisKKwl0ZW1wZmlsZS0+YWN0aXZlID0gMDsKKwlzdHJidWZfcmVzZXQoJnRlbXBmaWxlLT5maWxlbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGVsZXRlX3RlbXBmaWxlKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUpCit7CisJaWYgKCF0ZW1wZmlsZS0+YWN0aXZlKQorCQlyZXR1cm47CisKKwlpZiAoIWNsb3NlX3RlbXBmaWxlKHRlbXBmaWxlKSkgeworCQl1bmxpbmtfb3Jfd2Fybih0ZW1wZmlsZS0+ZmlsZW5hbWUuYnVmKTsKKwkJdGVtcGZpbGUtPmFjdGl2ZSA9IDA7CisJCXN0cmJ1Zl9yZXNldCgmdGVtcGZpbGUtPmZpbGVuYW1lKTsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZW1wZmlsZS5oIGIvdGVtcGZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjE5ZmU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVtcGZpbGUuaApAQCAtMCwwICsxLDI3MSBAQAorI2lmbmRlZiBURU1QRklMRV9ICisjZGVmaW5lIFRFTVBGSUxFX0gKKworLyoKKyAqIEhhbmRsZSB0ZW1wb3JhcnkgZmlsZXMuCisgKgorICogVGhlIHRlbXBmaWxlIEFQSSBhbGxvd3MgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQsIGRlbGV0ZWQsIGFuZAorICogYXRvbWljYWxseSByZW5hbWVkLiBUZW1wb3JhcnkgZmlsZXMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdoZW4gdGhlCisgKiBwcm9ncmFtIGVuZHMgYXJlIGNsZWFuZWQgdXAgYXV0b21hdGljYWxseS4gTG9ja2ZpbGVzIChzZWUKKyAqICJsb2NrZmlsZS5oIikgYXJlIGJ1aWx0IG9uIHRvcCBvZiB0aGlzIEFQSS4KKyAqCisgKgorICogQ2FsbGluZyBzZXF1ZW5jZQorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFRoZSBjYWxsZXI6CisgKgorICogKiBBbGxvY2F0ZXMgYSBgc3RydWN0IHRlbXBmaWxlYCBlaXRoZXIgYXMgYSBzdGF0aWMgdmFyaWFibGUgb3Igb24KKyAqICAgdGhlIGhlYXAsIGluaXRpYWxpemVkIHRvIHplcm9zLiBPbmNlIHlvdSB1c2UgdGhlIHN0cnVjdHVyZSB0bworICogICBjYWxsIGBjcmVhdGVfdGVtcGZpbGUoKWAsIGl0IGJlbG9uZ3MgdG8gdGhlIHRlbXBmaWxlIHN1YnN5c3RlbQorICogICBhbmQgaXRzIHN0b3JhZ2UgbXVzdCByZW1haW4gdmFsaWQgdGhyb3VnaG91dCB0aGUgbGlmZSBvZiB0aGUKKyAqICAgcHJvZ3JhbSAoaS5lLiB5b3UgY2Fubm90IHVzZSBhbiBvbi1zdGFjayB2YXJpYWJsZSB0byBob2xkIHRoaXMKKyAqICAgc3RydWN0dXJlKS4KKyAqCisgKiAqIEF0dGVtcHRzIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIGJ5IGNhbGxpbmcKKyAqICAgYGNyZWF0ZV90ZW1wZmlsZSgpYC4KKyAqCisgKiAqIFdyaXRlcyBuZXcgY29udGVudCB0byB0aGUgZmlsZSBieSBlaXRoZXI6CisgKgorICogICAqIHdyaXRpbmcgdG8gdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBgY3JlYXRlX3RlbXBmaWxlKClgCisgKiAgICAgKGFsc28gYXZhaWxhYmxlIHZpYSBgdGVtcGZpbGUtPmZkYCkuCisgKgorICogICAqIGNhbGxpbmcgYGZkb3Blbl90ZW1wZmlsZSgpYCB0byBnZXQgYSBgRklMRWAgcG9pbnRlciBmb3IgdGhlCisgKiAgICAgb3BlbiBmaWxlIGFuZCB3cml0aW5nIHRvIHRoZSBmaWxlIHVzaW5nIHN0ZGlvLgorICoKKyAqIFdoZW4gZmluaXNoZWQgd3JpdGluZywgdGhlIGNhbGxlciBjYW46CisgKgorICogKiBDbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGFuZCByZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlIGJ5CisgKiAgIGNhbGxpbmcgYGRlbGV0ZV90ZW1wZmlsZSgpYC4KKyAqCisgKiAqIENsb3NlIHRoZSB0ZW1wb3JhcnkgZmlsZSBhbmQgcmVuYW1lIGl0IGF0b21pY2FsbHkgdG8gYSBzcGVjaWZpZWQKKyAqICAgZmlsZW5hbWUgYnkgY2FsbGluZyBgcmVuYW1lX3RlbXBmaWxlKClgLiBUaGlzIHJlbGlucXVpc2hlcworICogICBjb250cm9sIG9mIHRoZSBmaWxlLgorICoKKyAqICogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciB3aXRob3V0IHJlbW92aW5nIG9yIHJlbmFtaW5nIHRoZQorICogICB0ZW1wb3JhcnkgZmlsZSBieSBjYWxsaW5nIGBjbG9zZV90ZW1wZmlsZSgpYCwgYW5kIGxhdGVyIGNhbGwKKyAqICAgYGRlbGV0ZV90ZW1wZmlsZSgpYCBvciBgcmVuYW1lX3RlbXBmaWxlKClgLgorICoKKyAqIEV2ZW4gYWZ0ZXIgdGhlIHRlbXBvcmFyeSBmaWxlIGlzIHJlbmFtZWQgb3IgZGVsZXRlZCwgdGhlIGB0ZW1wZmlsZWAKKyAqIG9iamVjdCBtdXN0IG5vdCBiZSBmcmVlZCBvciBhbHRlcmVkIGJ5IHRoZSBjYWxsZXIuIEhvd2V2ZXIsIGl0IG1heQorICogYmUgcmV1c2VkOyBqdXN0IHBhc3MgaXQgdG8gYW5vdGhlciBjYWxsIG9mIGBjcmVhdGVfdGVtcGZpbGUoKWAuCisgKgorICogSWYgdGhlIHByb2dyYW0gZXhpdHMgYmVmb3JlIGByZW5hbWVfdGVtcGZpbGUoKWAgb3IKKyAqIGBkZWxldGVfdGVtcGZpbGUoKWAgaXMgY2FsbGVkLCBhbiBgYXRleGl0KDMpYCBoYW5kbGVyIHdpbGwgY2xvc2UKKyAqIGFuZCByZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlLgorICoKKyAqIElmIHlvdSBuZWVkIHRvIGNsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgeW91cnNlbGYsIGRvIHNvIGJ5IGNhbGxpbmcKKyAqIGBjbG9zZV90ZW1wZmlsZSgpYC4gWW91IHNob3VsZCBuZXZlciBjYWxsIGBjbG9zZSgyKWAgb3IgYGZjbG9zZSgzKWAKKyAqIHlvdXJzZWxmLCBvdGhlcndpc2UgdGhlIGBzdHJ1Y3QgdGVtcGZpbGVgIHN0cnVjdHVyZSB3b3VsZCBzdGlsbAorICogdGhpbmsgdGhhdCB0aGUgZmlsZSBkZXNjcmlwdG9yIG5lZWRzIHRvIGJlIGNsb3NlZCwgYW5kIGEgbGF0ZXIKKyAqIGNsZWFudXAgd291bGQgcmVzdWx0IGluIGR1cGxpY2F0ZSBjYWxscyB0byBgY2xvc2UoMilgLiBXb3JzZSB5ZXQsCisgKiBpZiB5b3UgY2xvc2UgYW5kIHRoZW4gbGF0ZXIgb3BlbiBhbm90aGVyIGZpbGUgZGVzY3JpcHRvciBmb3IgYQorICogY29tcGxldGVseSBkaWZmZXJlbnQgcHVycG9zZSwgdGhlbiB0aGUgdW5yZWxhdGVkIGZpbGUgZGVzY3JpcHRvcgorICogbWlnaHQgZ2V0IGNsb3NlZC4KKyAqCisgKgorICogRXJyb3IgaGFuZGxpbmcKKyAqIC0tLS0tLS0tLS0tLS0tCisgKgorICogYGNyZWF0ZV90ZW1wZmlsZSgpYCByZXR1cm5zIGEgZmlsZSBkZXNjcmlwdG9yIG9uIHN1Y2Nlc3Mgb3IgLTEgb24KKyAqIGZhaWx1cmUuIE9uIGVycm9ycywgYGVycm5vYCBkZXNjcmliZXMgdGhlIHJlYXNvbiBmb3IgZmFpbHVyZS4KKyAqCisgKiBgZGVsZXRlX3RlbXBmaWxlKClgLCBgcmVuYW1lX3RlbXBmaWxlKClgLCBhbmQgYGNsb3NlX3RlbXBmaWxlKClgCisgKiByZXR1cm4gMCBvbiBzdWNjZXNzLiBPbiBmYWlsdXJlIHRoZXkgc2V0IGBlcnJub2AgYXBwcm9wcmlhdGVseSwgZG8KKyAqIHRoZWlyIGJlc3QgdG8gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSwgYW5kIHJldHVybiAtMS4KKyAqLworCitzdHJ1Y3QgdGVtcGZpbGUgeworCXN0cnVjdCB0ZW1wZmlsZSAqdm9sYXRpbGUgbmV4dDsKKwl2b2xhdGlsZSBzaWdfYXRvbWljX3QgYWN0aXZlOworCXZvbGF0aWxlIGludCBmZDsKKwlGSUxFICp2b2xhdGlsZSBmcDsKKwl2b2xhdGlsZSBwaWRfdCBvd25lcjsKKwljaGFyIG9uX2xpc3Q7CisJc3RydWN0IHN0cmJ1ZiBmaWxlbmFtZTsKK307CisKKy8qCisgKiBBdHRlbXB0IHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgYHBhdGhgLiBSZXR1cm4KKyAqIGEgZmlsZSBkZXNjcmlwdG9yIGZvciB3cml0aW5nIHRvIGl0LCBvciAtMSBvbiBlcnJvci4gSXQgaXMgYW4gZXJyb3IKKyAqIGlmIGEgZmlsZSBhbHJlYWR5IGV4aXN0cyBhdCB0aGF0IHBhdGguCisgKi8KK2V4dGVybiBpbnQgY3JlYXRlX3RlbXBmaWxlKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUsIGNvbnN0IGNoYXIgKnBhdGgpOworCisvKgorICogUmVnaXN0ZXIgYW4gZXhpc3RpbmcgZmlsZSBhcyBhIHRlbXBmaWxlLCBtZWFuaW5nIHRoYXQgaXQgd2lsbCBiZQorICogZGVsZXRlZCB3aGVuIHRoZSBwcm9ncmFtIGV4aXRzLiBUaGUgdGVtcGZpbGUgaXMgY29uc2lkZXJlZCBjbG9zZWQsCisgKiBidXQgaXQgY2FuIGJlIHdvcmtlZCB3aXRoIGxpa2UgYW55IG90aGVyIGNsb3NlZCB0ZW1wZmlsZSAoZm9yCisgKiBleGFtcGxlLCBpdCBjYW4gYmUgb3BlbmVkIHVzaW5nIHJlb3Blbl90ZW1wZmlsZSgpKS4KKyAqLworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfdGVtcGZpbGUoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSwgY29uc3QgY2hhciAqcGF0aCk7CisKKworLyoKKyAqIG1rc190ZW1wZmlsZSBmdW5jdGlvbnMKKyAqCisgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhdHRlbXB0IHRvIGNyZWF0ZSBhbmQgb3BlbiB0ZW1wb3JhcnkgZmlsZXMKKyAqIHdpdGggbmFtZXMgZGVyaXZlZCBhdXRvbWF0aWNhbGx5IGZyb20gYSB0ZW1wbGF0ZSwgaW4gdGhlIG1hbm5lciBvZgorICogbWtzdGVtcHMoKSwgYW5kIGFycmFuZ2UgZm9yIHRoZW0gdG8gYmUgZGVsZXRlZCBpZiB0aGUgcHJvZ3JhbSBlbmRzCisgKiBiZWZvcmUgdGhleSBhcmUgZGVsZXRlZCBleHBsaWNpdGx5LiBUaGVyZSBpcyBhIHdob2xlIGZhbWlseSBvZiBzdWNoCisgKiBmdW5jdGlvbnMsIG5hbWVkIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHBhdHRlcm46CisgKgorICogICAgIHg/bWtzX3RlbXBmaWxlX3Q/cz9tPygpCisgKgorICogVGhlIG9wdGlvbmFsIGxldHRlcnMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorICoKKyAqICAgeCAtIGRpZSBpZiB0aGUgdGVtcG9yYXJ5IGZpbGUgY2Fubm90IGJlIGNyZWF0ZWQuCisgKgorICogICB0IC0gY3JlYXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSB1bmRlciAkVE1QRElSIChhcyBvcHBvc2VkIHRvCisgKiAgICAgICByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkpLiBXaGVuIHRoZXNlIHZhcmlhbnRzIGFyZQorICogICAgICAgdXNlZCwgdGVtcGxhdGUgc2hvdWxkIGJlIHRoZSBwYXR0ZXJuIGZvciB0aGUgZmlsZW5hbWUgYWxvbmUsCisgKiAgICAgICB3aXRob3V0IGEgcGF0aC4KKyAqCisgKiAgIHMgLSB0ZW1wbGF0ZSBpbmNsdWRlcyBhIHN1ZmZpeCB0aGF0IGlzIHN1ZmZpeGxlbiBjaGFyYWN0ZXJzIGxvbmcuCisgKgorICogICBtIC0gdGhlIHRlbXBvcmFyeSBmaWxlIHNob3VsZCBiZSBjcmVhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBtb2RlCisgKiAgICAgICAob3RoZXJ3aXNlLCB0aGUgbW9kZSBpcyBzZXQgdG8gMDYwMCkuCisgKgorICogTm9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgbW9kaWZ5IHRlbXBsYXRlLiBJZiB0aGUgY2FsbGVyIHdhbnRzIHRvCisgKiBrbm93IHRoZSAoYWJzb2x1dGUpIHBhdGggb2YgdGhlIGZpbGUgdGhhdCB3YXMgY3JlYXRlZCwgaXQgY2FuIGJlCisgKiByZWFkIGZyb20gdGVtcGZpbGUtPmZpbGVuYW1lLgorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBmdW5jdGlvbnMgcmV0dXJuIGEgZmlsZSBkZXNjcmlwdG9yIHRoYXQgaXMgb3BlbiBmb3IKKyAqIHdyaXRpbmcgdGhlIHRlbXBvcmFyeSBmaWxlLiBPbiBlcnJvcnMsIHRoZXkgcmV0dXJuIC0xIGFuZCBzZXQgZXJybm8KKyAqIGFwcHJvcHJpYXRlbHkgKGV4Y2VwdCBmb3IgdGhlICJ4IiB2YXJpYW50cywgd2hpY2ggZGllKCkgb24gZXJyb3JzKS4KKyAqLworCisvKiBTZWUgIm1rc190ZW1wZmlsZSBmdW5jdGlvbnMiIGFib3ZlLiAqLworZXh0ZXJuIGludCBta3NfdGVtcGZpbGVfc20oc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSwKKwkJCSAgIGNvbnN0IGNoYXIgKnRlbXBsYXRlLCBpbnQgc3VmZml4bGVuLCBpbnQgbW9kZSk7CisKKy8qIFNlZSAibWtzX3RlbXBmaWxlIGZ1bmN0aW9ucyIgYWJvdmUuICovCitzdGF0aWMgaW5saW5lIGludCBta3NfdGVtcGZpbGVfcyhzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlLAorCQkJCSBjb25zdCBjaGFyICp0ZW1wbGF0ZSwgaW50IHN1ZmZpeGxlbikKK3sKKwlyZXR1cm4gbWtzX3RlbXBmaWxlX3NtKHRlbXBmaWxlLCB0ZW1wbGF0ZSwgc3VmZml4bGVuLCAwNjAwKTsKK30KKworLyogU2VlICJta3NfdGVtcGZpbGUgZnVuY3Rpb25zIiBhYm92ZS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IG1rc190ZW1wZmlsZV9tKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUsCisJCQkJIGNvbnN0IGNoYXIgKnRlbXBsYXRlLCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gbWtzX3RlbXBmaWxlX3NtKHRlbXBmaWxlLCB0ZW1wbGF0ZSwgMCwgbW9kZSk7Cit9CisKKy8qIFNlZSAibWtzX3RlbXBmaWxlIGZ1bmN0aW9ucyIgYWJvdmUuICovCitzdGF0aWMgaW5saW5lIGludCBta3NfdGVtcGZpbGUoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICp0ZW1wbGF0ZSkKK3sKKwlyZXR1cm4gbWtzX3RlbXBmaWxlX3NtKHRlbXBmaWxlLCB0ZW1wbGF0ZSwgMCwgMDYwMCk7Cit9CisKKy8qIFNlZSAibWtzX3RlbXBmaWxlIGZ1bmN0aW9ucyIgYWJvdmUuICovCitleHRlcm4gaW50IG1rc190ZW1wZmlsZV90c20oc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSwKKwkJCSAgICBjb25zdCBjaGFyICp0ZW1wbGF0ZSwgaW50IHN1ZmZpeGxlbiwgaW50IG1vZGUpOworCisvKiBTZWUgIm1rc190ZW1wZmlsZSBmdW5jdGlvbnMiIGFib3ZlLiAqLworc3RhdGljIGlubGluZSBpbnQgbWtzX3RlbXBmaWxlX3RzKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUsCisJCQkJICBjb25zdCBjaGFyICp0ZW1wbGF0ZSwgaW50IHN1ZmZpeGxlbikKK3sKKwlyZXR1cm4gbWtzX3RlbXBmaWxlX3RzbSh0ZW1wZmlsZSwgdGVtcGxhdGUsIHN1ZmZpeGxlbiwgMDYwMCk7Cit9CisKKy8qIFNlZSAibWtzX3RlbXBmaWxlIGZ1bmN0aW9ucyIgYWJvdmUuICovCitzdGF0aWMgaW5saW5lIGludCBta3NfdGVtcGZpbGVfdG0oc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSwKKwkJCQkgIGNvbnN0IGNoYXIgKnRlbXBsYXRlLCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gbWtzX3RlbXBmaWxlX3RzbSh0ZW1wZmlsZSwgdGVtcGxhdGUsIDAsIG1vZGUpOworfQorCisvKiBTZWUgIm1rc190ZW1wZmlsZSBmdW5jdGlvbnMiIGFib3ZlLiAqLworc3RhdGljIGlubGluZSBpbnQgbWtzX3RlbXBmaWxlX3Qoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSwKKwkJCQkgY29uc3QgY2hhciAqdGVtcGxhdGUpCit7CisJcmV0dXJuIG1rc190ZW1wZmlsZV90c20odGVtcGZpbGUsIHRlbXBsYXRlLCAwLCAwNjAwKTsKK30KKworLyogU2VlICJta3NfdGVtcGZpbGUgZnVuY3Rpb25zIiBhYm92ZS4gKi8KK2V4dGVybiBpbnQgeG1rc190ZW1wZmlsZV9tKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUsCisJCQkgICBjb25zdCBjaGFyICp0ZW1wbGF0ZSwgaW50IG1vZGUpOworCisvKiBTZWUgIm1rc190ZW1wZmlsZSBmdW5jdGlvbnMiIGFib3ZlLiAqLworc3RhdGljIGlubGluZSBpbnQgeG1rc190ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlLAorCQkJCWNvbnN0IGNoYXIgKnRlbXBsYXRlKQoreworCXJldHVybiB4bWtzX3RlbXBmaWxlX20odGVtcGZpbGUsIHRlbXBsYXRlLCAwNjAwKTsKK30KKworLyoKKyAqIEFzc29jaWF0ZSBhIHN0ZGlvIHN0cmVhbSB3aXRoIHRoZSB0ZW1wb3JhcnkgZmlsZSAod2hpY2ggbXVzdCBzdGlsbAorICogYmUgb3BlbikuIFJldHVybiBgTlVMTGAgKCp3aXRob3V0KiBkZWxldGluZyB0aGUgZmlsZSkgb24gZXJyb3IuIFRoZQorICogc3RyZWFtIGlzIGNsb3NlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYGNsb3NlX3RlbXBmaWxlKClgIGlzIGNhbGxlZCBvcgorICogd2hlbiB0aGUgZmlsZSBpcyBkZWxldGVkIG9yIHJlbmFtZWQuCisgKi8KK2V4dGVybiBGSUxFICpmZG9wZW5fdGVtcGZpbGUoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSwgY29uc3QgY2hhciAqbW9kZSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3RlbXBmaWxlX2FjdGl2ZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlKQoreworCXJldHVybiB0ZW1wZmlsZS0+YWN0aXZlOworfQorCisvKgorICogUmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBsb2NrZmlsZS4gVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gYQorICogZmllbGQgd2l0aGluIHRoZSBsb2NrX2ZpbGUgb2JqZWN0IGFuZCBzaG91bGQgbm90IGJlIGZyZWVkLgorICovCitleHRlcm4gY29uc3QgY2hhciAqZ2V0X3RlbXBmaWxlX3BhdGgoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSk7CisKK2V4dGVybiBpbnQgZ2V0X3RlbXBmaWxlX2ZkKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUpOworZXh0ZXJuIEZJTEUgKmdldF90ZW1wZmlsZV9mcChzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlKTsKKworLyoKKyAqIElmIHRoZSB0ZW1wb3JhcnkgZmlsZSBpcyBzdGlsbCBvcGVuLCBjbG9zZSBpdCAoYW5kIHRoZSBmaWxlIHBvaW50ZXIKKyAqIHRvbywgaWYgaXQgaGFzIGJlZW4gb3BlbmVkIHVzaW5nIGBmZG9wZW5fdGVtcGZpbGUoKWApIHdpdGhvdXQKKyAqIGRlbGV0aW5nIHRoZSBmaWxlLiBSZXR1cm4gMCB1cG9uIHN1Y2Nlc3MuIE9uIGZhaWx1cmUgdG8gYGNsb3NlKDIpYCwKKyAqIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIGFuZCBkZWxldGUgdGhlIGZpbGUuIFVzdWFsbHkKKyAqIGBkZWxldGVfdGVtcGZpbGUoKWAgb3IgYHJlbmFtZV90ZW1wZmlsZSgpYCBzaG91bGQgZXZlbnR1YWxseSBiZQorICogY2FsbGVkIGlmIGBjbG9zZV90ZW1wZmlsZSgpYCBzdWNjZWVkcy4KKyAqLworZXh0ZXJuIGludCBjbG9zZV90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlKTsKKworLyoKKyAqIFJlLW9wZW4gYSB0ZW1wb3JhcnkgZmlsZSB0aGF0IGhhcyBiZWVuIGNsb3NlZCB1c2luZworICogYGNsb3NlX3RlbXBmaWxlKClgIGJ1dCBub3QgeWV0IGRlbGV0ZWQgb3IgcmVuYW1lZC4gVGhpcyBjYW4gYmUgdXNlZAorICogdG8gaW1wbGVtZW50IGEgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBsaWtlIHRoZSBmb2xsb3dpbmc6CisgKgorICogKiBDcmVhdGUgdGVtcG9yYXJ5IGZpbGUuCisgKgorICogKiBXcml0ZSBuZXcgY29udGVudHMgdG8gZmlsZSwgdGhlbiBgY2xvc2VfdGVtcGZpbGUoKWAgdG8gY2F1c2UgdGhlCisgKiAgIGNvbnRlbnRzIHRvIGJlIHdyaXR0ZW4gdG8gZGlzay4KKyAqCisgKiAqIFBhc3MgdGhlIG5hbWUgb2YgdGhlIHRlbXBvcmFyeSBmaWxlIHRvIGFub3RoZXIgcHJvZ3JhbSB0byBhbGxvdworICogICBpdCAoYW5kIG5vYm9keSBlbHNlKSB0byBpbnNwZWN0IG9yIGV2ZW4gbW9kaWZ5IHRoZSBmaWxlJ3MKKyAqICAgY29udGVudHMuCisgKgorICogKiBgcmVvcGVuX3RlbXBmaWxlKClgIHRvIHJlb3BlbiB0aGUgdGVtcG9yYXJ5IGZpbGUuIE1ha2UgZnVydGhlcgorICogICB1cGRhdGVzIHRvIHRoZSBjb250ZW50cy4KKyAqCisgKiAqIGByZW5hbWVfdGVtcGZpbGUoKWAgdG8gbW92ZSB0aGUgZmlsZSB0byBpdHMgcGVybWFuZW50IGxvY2F0aW9uLgorICovCitleHRlcm4gaW50IHJlb3Blbl90ZW1wZmlsZShzdHJ1Y3QgdGVtcGZpbGUgKnRlbXBmaWxlKTsKKworLyoKKyAqIENsb3NlIHRoZSBmaWxlIGRlc2NyaXB0b3IgYW5kL29yIGZpbGUgcG9pbnRlciBhbmQgcmVtb3ZlIHRoZQorICogdGVtcG9yYXJ5IGZpbGUgYXNzb2NpYXRlZCB3aXRoIGB0ZW1wZmlsZWAuIEl0IGlzIGEgTk9PUCB0byBjYWxsCisgKiBgZGVsZXRlX3RlbXBmaWxlKClgIGZvciBhIGB0ZW1wZmlsZWAgb2JqZWN0IHRoYXQgaGFzIGFscmVhZHkgYmVlbgorICogZGVsZXRlZCBvciByZW5hbWVkLgorICovCitleHRlcm4gdm9pZCBkZWxldGVfdGVtcGZpbGUoc3RydWN0IHRlbXBmaWxlICp0ZW1wZmlsZSk7CisKKy8qCisgKiBDbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGFuZC9vciBmaWxlIHBvaW50ZXIgaWYgdGhleSBhcmUgc3RpbGwKKyAqIG9wZW4sIGFuZCBhdG9taWNhbGx5IHJlbmFtZSB0aGUgdGVtcG9yYXJ5IGZpbGUgdG8gYHBhdGhgLiBgcGF0aGAKKyAqIG11c3QgYmUgb24gdGhlIHNhbWUgZmlsZXN5c3RlbSBhcyB0aGUgbG9jayBmaWxlLiBSZXR1cm4gMCBvbgorICogc3VjY2Vzcy4gT24gZmFpbHVyZSwgZGVsZXRlIHRoZSB0ZW1wb3JhcnkgZmlsZSBhbmQgcmV0dXJuIC0xLCB3aXRoCisgKiBgZXJybm9gIHNldCB0byB0aGUgdmFsdWUgZnJvbSB0aGUgZmFpbGluZyBjYWxsIHRvIGBjbG9zZSgyKWAgb3IKKyAqIGByZW5hbWUoMilgLiBJdCBpcyBhIGJ1ZyB0byBjYWxsIGByZW5hbWVfdGVtcGZpbGUoKWAgZm9yIGEKKyAqIGB0ZW1wZmlsZWAgb2JqZWN0IHRoYXQgaXMgbm90IGN1cnJlbnRseSBhY3RpdmUuCisgKi8KK2V4dGVybiBpbnQgcmVuYW1lX3RlbXBmaWxlKHN0cnVjdCB0ZW1wZmlsZSAqdGVtcGZpbGUsIGNvbnN0IGNoYXIgKnBhdGgpOworCisjZW5kaWYgLyogVEVNUEZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzLy5naXRpZ25vcmUgYi90ZW1wbGF0ZXMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU5ZWNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitibHQKK2JvaWxlcnBsYXRlcy5tYWRlCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvTWFrZWZpbGUgYi90ZW1wbGF0ZXMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIyYTcxYQotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDY2IEBACisjIG1ha2UgYW5kIGluc3RhbGwgc2FtcGxlIHRlbXBsYXRlcworCitpZm5kZWYgVgorCVFVSUVUID0gQAorZW5kaWYKKworSU5TVEFMTCA/PSBpbnN0YWxsCitUQVIgPz0gdGFyCitSTSA/PSBybSAtZgorcHJlZml4ID89ICQoSE9NRSkKK3RlbXBsYXRlX2luc3RkaXIgPz0gJChwcmVmaXgpL3NoYXJlL2dpdC1jb3JlL3RlbXBsYXRlcworIyBERVNURElSPQorCitpZm5kZWYgU0hFTExfUEFUSAorCVNIRUxMX1BBVEggPSAvYmluL3NoCitlbmRpZgoraWZuZGVmIFBFUkxfUEFUSAorCVBFUkxfUEFUSCA9IHBlcmwKK2VuZGlmCisKK1NIRUxMX1BBVEhfU1EgPSAkKHN1YnN0ICcsJ1wnJywkKFNIRUxMX1BBVEgpKQorUEVSTF9QQVRIX1NRID0gJChzdWJzdCAnLCdcJycsJChQRVJMX1BBVEgpKQorCisjIFNoZWxsIHF1b3RlIChkbyBub3QgdXNlICQoY2FsbCkgdG8gYWNjb21tb2RhdGUgYW5jaWVudCBzZXR1cHMpOworREVTVERJUl9TUSA9ICQoc3Vic3QgJywnXCcnLCQoREVTVERJUikpCit0ZW1wbGF0ZV9pbnN0ZGlyX1NRID0gJChzdWJzdCAnLCdcJycsJCh0ZW1wbGF0ZV9pbnN0ZGlyKSkKKworYWxsOiBib2lsZXJwbGF0ZXMubWFkZSBjdXN0b20KKworIyBQdXQgdGVtcGxhdGVzIHRoYXQgY2FuIGJlIGNvcGllZCBzdHJhaWdodCBmcm9tIHRoZSBzb3VyY2UKKyMgaW4gYSBmaWxlIGRpcmVjLS10b3J5LS1maWxlIGluIHRoZSBzb3VyY2UuICBUaGV5IHdpbGwgYmUKKyMganVzdCBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uLgorCiticHNyYyA9ICQoZmlsdGVyLW91dCAlfiwkKHdpbGRjYXJkICotLSopKQorYm9pbGVycGxhdGVzLm1hZGUgOiAkKGJwc3JjKQorCSQoUVVJRVQpdW1hc2sgMDIyICYmIGxzICotLSogMj4vZGV2L251bGwgfCBcCisJd2hpbGUgcmVhZCBib2lsZXJwbGF0ZTsgXAorCWRvIFwKKwkJY2FzZSAiJCRib2lsZXJwbGF0ZSIgaW4gKn4pIGNvbnRpbnVlIDs7IGVzYWMgJiYgXAorCQlkc3Q9YGVjaG8gIiQkYm9pbGVycGxhdGUiIHwgc2VkIC1lICdzfF50aGlzfC58O3N8LS18L3xnJ2AgJiYgXAorCQlkaXI9YGV4cHIgIiQkZHN0IiA6ICdcKC4qXCkvJ2AgJiYgXAorCQlta2RpciAtcCBibHQvJCRkaXIgJiYgXAorCQljYXNlICIkJGJvaWxlcnBsYXRlIiBpbiBcCisJCSotLSkgY29udGludWU7OyBcCisJCWVzYWMgJiYgXAorCQlzZWQgLWUgJzFzfCMhLiovc2h8IyEkKFNIRUxMX1BBVEhfU1EpfCcgXAorCQkgICAgLWUgJ3N8QFNIRUxMX1BBVEhAfCQoU0hFTExfUEFUSF9TUSl8JyBcCisJCSAgICAtZSAnc3xAUEVSTF9QQVRIQHwkKFBFUkxfUEFUSF9TUSl8ZycgJCRib2lsZXJwbGF0ZSA+IFwKKwkJCWJsdC8kJGRzdCAmJiBcCisJCWlmIHRlc3QgLXggIiQkYm9pbGVycGxhdGUiOyB0aGVuIHJ4PXJ4OyBlbHNlIHJ4PXI7IGZpICYmIFwKKwkJY2htb2QgYSskJHJ4ICJibHQvJCRkc3QiIHx8IGV4aXQ7IFwKKwlkb25lICYmIFwKKwlkYXRlID4kQAorCisjIElmIHlvdSBuZWVkIGJ1aWxkLXRhaWxvcmVkIHRlbXBsYXRlcywgYnVpbGQgdGhlbSBpbnRvIGJsdC8KKyMgZGlyZWN0b3J5IHlvdXJzZWxmIGhlcmUuCitjdXN0b206CisJJChRVUlFVCk6IG5vIGN1c3RvbSB0ZW1wbGF0ZXMgeWV0CisKK2NsZWFuOgorCSQoUk0pIC1yIGJsdCBib2lsZXJwbGF0ZXMubWFkZQorCitpbnN0YWxsOiBhbGwKKwkkKElOU1RBTEwpIC1kIC1tIDc1NSAnJChERVNURElSX1NRKSQodGVtcGxhdGVfaW5zdGRpcl9TUSknCisJKGNkIGJsdCAmJiAkKFRBUikgY2YgLSAuKSB8IFwKKwkoY2QgJyQoREVTVERJUl9TUSkkKHRlbXBsYXRlX2luc3RkaXJfU1EpJyAmJiB1bWFzayAwMjIgJiYgJChUQVIpIHhvZiAtKQpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2JyYW5jaGVzLS0gYi90ZW1wbGF0ZXMvYnJhbmNoZXMtLQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWU4ODcwCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2JyYW5jaGVzLS0KQEAgLTAsMCArMSBAQAorOiB0aGlzIGlzIGp1c3QgdG8gZW5zdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1hcHBseXBhdGNoLW1zZy5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLWFwcGx5cGF0Y2gtbXNnLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNWQ3Yjg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1hcHBseXBhdGNoLW1zZy5zYW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisjCisjIEFuIGV4YW1wbGUgaG9vayBzY3JpcHQgdG8gY2hlY2sgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZSB0YWtlbiBieQorIyBhcHBseXBhdGNoIGZyb20gYW4gZS1tYWlsIG1lc3NhZ2UuCisjCisjIFRoZSBob29rIHNob3VsZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIGFmdGVyIGlzc3VpbmcgYW4KKyMgYXBwcm9wcmlhdGUgbWVzc2FnZSBpZiBpdCB3YW50cyB0byBzdG9wIHRoZSBjb21taXQuICBUaGUgaG9vayBpcworIyBhbGxvd2VkIHRvIGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIGZpbGUuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gImFwcGx5cGF0Y2gtbXNnIi4KKworLiBnaXQtc2gtc2V0dXAKK2NvbW1pdG1zZz0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggaG9va3MvY29tbWl0LW1zZykiCit0ZXN0IC14ICIkY29tbWl0bXNnIiAmJiBleGVjICIkY29tbWl0bXNnIiAkezErIiRAIn0KKzoKZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tY29tbWl0LW1zZy5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLWNvbW1pdC1tc2cuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1OGQxMTgKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaG9va3MtLWNvbW1pdC1tc2cuc2FtcGxlCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIGNoZWNrIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuCisjIENhbGxlZCBieSAiZ2l0IGNvbW1pdCIgd2l0aCBvbmUgYXJndW1lbnQsIHRoZSBuYW1lIG9mIHRoZSBmaWxlCisjIHRoYXQgaGFzIHRoZSBjb21taXQgbWVzc2FnZS4gIFRoZSBob29rIHNob3VsZCBleGl0IHdpdGggbm9uLXplcm8KKyMgc3RhdHVzIGFmdGVyIGlzc3VpbmcgYW4gYXBwcm9wcmlhdGUgbWVzc2FnZSBpZiBpdCB3YW50cyB0byBzdG9wIHRoZQorIyBjb21taXQuICBUaGUgaG9vayBpcyBhbGxvd2VkIHRvIGVkaXQgdGhlIGNvbW1pdCBtZXNzYWdlIGZpbGUuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gImNvbW1pdC1tc2ciLgorCisjIFVuY29tbWVudCB0aGUgYmVsb3cgdG8gYWRkIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBtZXNzYWdlLgorIyBEb2luZyB0aGlzIGluIGEgaG9vayBpcyBhIGJhZCBpZGVhIGluIGdlbmVyYWwsIGJ1dCB0aGUgcHJlcGFyZS1jb21taXQtbXNnCisjIGhvb2sgaXMgbW9yZSBzdWl0ZWQgdG8gaXQuCisjCisjIFNPQj0kKGdpdCB2YXIgR0lUX0FVVEhPUl9JREVOVCB8IHNlZCAtbiAncy9eXCguKj5cKS4qJC9TaWduZWQtb2ZmLWJ5OiBcMS9wJykKKyMgZ3JlcCAtcXMgIl4kU09CIiAiJDEiIHx8IGVjaG8gIiRTT0IiID4+ICIkMSIKKworIyBUaGlzIGV4YW1wbGUgY2F0Y2hlcyBkdXBsaWNhdGUgU2lnbmVkLW9mZi1ieSBsaW5lcy4KKwordGVzdCAiIiA9ICIkKGdyZXAgJ15TaWduZWQtb2ZmLWJ5OiAnICIkMSIgfAorCSBzb3J0IHwgdW5pcSAtYyB8IHNlZCAtZSAnL15bIAldKjFbIAldL2QnKSIgfHwgeworCWVjaG8gPiYyIER1cGxpY2F0ZSBTaWduZWQtb2ZmLWJ5IGxpbmVzLgorCWV4aXQgMQorfQpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wb3N0LXVwZGF0ZS5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLXBvc3QtdXBkYXRlLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lYzE3ZWMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1wb3N0LXVwZGF0ZS5zYW1wbGUKQEAgLTAsMCArMSw4IEBACisjIS9iaW4vc2gKKyMKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byBwcmVwYXJlIGEgcGFja2VkIHJlcG9zaXRvcnkgZm9yIHVzZSBvdmVyCisjIGR1bWIgdHJhbnNwb3J0cy4KKyMKKyMgVG8gZW5hYmxlIHRoaXMgaG9vaywgcmVuYW1lIHRoaXMgZmlsZSB0byAicG9zdC11cGRhdGUiLgorCitleGVjIGdpdCB1cGRhdGUtc2VydmVyLWluZm8KZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tcHJlLWFwcGx5cGF0Y2guc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmUtYXBwbHlwYXRjaC5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDE0MjA4MgotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLWFwcGx5cGF0Y2guc2FtcGxlCkBAIC0wLDAgKzEsMTQgQEAKKyMhL2Jpbi9zaAorIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHZlcmlmeSB3aGF0IGlzIGFib3V0IHRvIGJlIGNvbW1pdHRlZAorIyBieSBhcHBseXBhdGNoIGZyb20gYW4gZS1tYWlsIG1lc3NhZ2UuCisjCisjIFRoZSBob29rIHNob3VsZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIGFmdGVyIGlzc3VpbmcgYW4KKyMgYXBwcm9wcmlhdGUgbWVzc2FnZSBpZiBpdCB3YW50cyB0byBzdG9wIHRoZSBjb21taXQuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gInByZS1hcHBseXBhdGNoIi4KKworLiBnaXQtc2gtc2V0dXAKK3ByZWNvbW1pdD0iJChnaXQgcmV2LXBhcnNlIC0tZ2l0LXBhdGggaG9va3MvcHJlLWNvbW1pdCkiCit0ZXN0IC14ICIkcHJlY29tbWl0IiAmJiBleGVjICIkcHJlY29tbWl0IiAkezErIiRAIn0KKzoKZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tcHJlLWNvbW1pdC5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLXByZS1jb21taXQuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4ZDYyZDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaG9va3MtLXByZS1jb21taXQuc2FtcGxlCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHZlcmlmeSB3aGF0IGlzIGFib3V0IHRvIGJlIGNvbW1pdHRlZC4KKyMgQ2FsbGVkIGJ5ICJnaXQgY29tbWl0IiB3aXRoIG5vIGFyZ3VtZW50cy4gIFRoZSBob29rIHNob3VsZAorIyBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIGFmdGVyIGlzc3VpbmcgYW4gYXBwcm9wcmlhdGUgbWVzc2FnZSBpZgorIyBpdCB3YW50cyB0byBzdG9wIHRoZSBjb21taXQuCisjCisjIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gInByZS1jb21taXQiLgorCitpZiBnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IEhFQUQgPi9kZXYvbnVsbCAyPiYxCit0aGVuCisJYWdhaW5zdD1IRUFECitlbHNlCisJIyBJbml0aWFsIGNvbW1pdDogZGlmZiBhZ2FpbnN0IGFuIGVtcHR5IHRyZWUgb2JqZWN0CisJYWdhaW5zdD00YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CitmaQorCisjIElmIHlvdSB3YW50IHRvIGFsbG93IG5vbi1BU0NJSSBmaWxlbmFtZXMgc2V0IHRoaXMgdmFyaWFibGUgdG8gdHJ1ZS4KK2FsbG93bm9uYXNjaWk9JChnaXQgY29uZmlnIC0tYm9vbCBob29rcy5hbGxvd25vbmFzY2lpKQorCisjIFJlZGlyZWN0IG91dHB1dCB0byBzdGRlcnIuCitleGVjIDE+JjIKKworIyBDcm9zcyBwbGF0Zm9ybSBwcm9qZWN0cyB0ZW5kIHRvIGF2b2lkIG5vbi1BU0NJSSBmaWxlbmFtZXM7IHByZXZlbnQKKyMgdGhlbSBmcm9tIGJlaW5nIGFkZGVkIHRvIHRoZSByZXBvc2l0b3J5LiBXZSBleHBsb2l0IHRoZSBmYWN0IHRoYXQgdGhlCisjIHByaW50YWJsZSByYW5nZSBzdGFydHMgYXQgdGhlIHNwYWNlIGNoYXJhY3RlciBhbmQgZW5kcyB3aXRoIHRpbGRlLgoraWYgWyAiJGFsbG93bm9uYXNjaWkiICE9ICJ0cnVlIiBdICYmCisJIyBOb3RlIHRoYXQgdGhlIHVzZSBvZiBicmFja2V0cyBhcm91bmQgYSB0ciByYW5nZSBpcyBvayBoZXJlLCAoaXQncworCSMgZXZlbiByZXF1aXJlZCwgZm9yIHBvcnRhYmlsaXR5IHRvIFNvbGFyaXMgMTAncyAvdXNyL2Jpbi90ciksIHNpbmNlCisJIyB0aGUgc3F1YXJlIGJyYWNrZXQgYnl0ZXMgaGFwcGVuIHRvIGZhbGwgaW4gdGhlIGRlc2lnbmF0ZWQgcmFuZ2UuCisJdGVzdCAkKGdpdCBkaWZmIC0tY2FjaGVkIC0tbmFtZS1vbmx5IC0tZGlmZi1maWx0ZXI9QSAteiAkYWdhaW5zdCB8CisJICBMQ19BTEw9QyB0ciAtZCAnWyAtfl1cMCcgfCB3YyAtYykgIT0gMAordGhlbgorCWNhdCA8PFxFT0YKK0Vycm9yOiBBdHRlbXB0IHRvIGFkZCBhIG5vbi1BU0NJSSBmaWxlIG5hbWUuCisKK1RoaXMgY2FuIGNhdXNlIHByb2JsZW1zIGlmIHlvdSB3YW50IHRvIHdvcmsgd2l0aCBwZW9wbGUgb24gb3RoZXIgcGxhdGZvcm1zLgorCitUbyBiZSBwb3J0YWJsZSBpdCBpcyBhZHZpc2FibGUgdG8gcmVuYW1lIHRoZSBmaWxlLgorCitJZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgeW91IGNhbiBkaXNhYmxlIHRoaXMgY2hlY2sgdXNpbmc6CisKKyAgZ2l0IGNvbmZpZyBob29rcy5hbGxvd25vbmFzY2lpIHRydWUKK0VPRgorCWV4aXQgMQorZmkKKworIyBJZiB0aGVyZSBhcmUgd2hpdGVzcGFjZSBlcnJvcnMsIHByaW50IHRoZSBvZmZlbmRpbmcgZmlsZSBuYW1lcyBhbmQgZmFpbC4KK2V4ZWMgZ2l0IGRpZmYtaW5kZXggLS1jaGVjayAtLWNhY2hlZCAkYWdhaW5zdCAtLQpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtcHVzaC5zYW1wbGUgYi90ZW1wbGF0ZXMvaG9va3MtLXByZS1wdXNoLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTg3ZGJmCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmUtcHVzaC5zYW1wbGUKQEAgLTAsMCArMSw1MyBAQAorIyEvYmluL3NoCisKKyMgQW4gZXhhbXBsZSBob29rIHNjcmlwdCB0byB2ZXJpZnkgd2hhdCBpcyBhYm91dCB0byBiZSBwdXNoZWQuICBDYWxsZWQgYnkgImdpdAorIyBwdXNoIiBhZnRlciBpdCBoYXMgY2hlY2tlZCB0aGUgcmVtb3RlIHN0YXR1cywgYnV0IGJlZm9yZSBhbnl0aGluZyBoYXMgYmVlbgorIyBwdXNoZWQuICBJZiB0aGlzIHNjcmlwdCBleGl0cyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIG5vdGhpbmcgd2lsbCBiZSBwdXNoZWQuCisjCisjIFRoaXMgaG9vayBpcyBjYWxsZWQgd2l0aCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisjCisjICQxIC0tIE5hbWUgb2YgdGhlIHJlbW90ZSB0byB3aGljaCB0aGUgcHVzaCBpcyBiZWluZyBkb25lCisjICQyIC0tIFVSTCB0byB3aGljaCB0aGUgcHVzaCBpcyBiZWluZyBkb25lCisjCisjIElmIHB1c2hpbmcgd2l0aG91dCB1c2luZyBhIG5hbWVkIHJlbW90ZSB0aG9zZSBhcmd1bWVudHMgd2lsbCBiZSBlcXVhbC4KKyMKKyMgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbW1pdHMgd2hpY2ggYXJlIGJlaW5nIHB1c2hlZCBpcyBzdXBwbGllZCBhcyBsaW5lcyB0bworIyB0aGUgc3RhbmRhcmQgaW5wdXQgaW4gdGhlIGZvcm06CisjCisjICAgPGxvY2FsIHJlZj4gPGxvY2FsIHNoYTE+IDxyZW1vdGUgcmVmPiA8cmVtb3RlIHNoYTE+CisjCisjIFRoaXMgc2FtcGxlIHNob3dzIGhvdyB0byBwcmV2ZW50IHB1c2ggb2YgY29tbWl0cyB3aGVyZSB0aGUgbG9nIG1lc3NhZ2Ugc3RhcnRzCisjIHdpdGggIldJUCIgKHdvcmsgaW4gcHJvZ3Jlc3MpLgorCityZW1vdGU9IiQxIgordXJsPSIkMiIKKworejQwPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKword2hpbGUgcmVhZCBsb2NhbF9yZWYgbG9jYWxfc2hhIHJlbW90ZV9yZWYgcmVtb3RlX3NoYQorZG8KKwlpZiBbICIkbG9jYWxfc2hhIiA9ICR6NDAgXQorCXRoZW4KKwkJIyBIYW5kbGUgZGVsZXRlCisJCToKKwllbHNlCisJCWlmIFsgIiRyZW1vdGVfc2hhIiA9ICR6NDAgXQorCQl0aGVuCisJCQkjIE5ldyBicmFuY2gsIGV4YW1pbmUgYWxsIGNvbW1pdHMKKwkJCXJhbmdlPSIkbG9jYWxfc2hhIgorCQllbHNlCisJCQkjIFVwZGF0ZSB0byBleGlzdGluZyBicmFuY2gsIGV4YW1pbmUgbmV3IGNvbW1pdHMKKwkJCXJhbmdlPSIkcmVtb3RlX3NoYS4uJGxvY2FsX3NoYSIKKwkJZmkKKworCQkjIENoZWNrIGZvciBXSVAgY29tbWl0CisJCWNvbW1pdD1gZ2l0IHJldi1saXN0IC1uIDEgLS1ncmVwICdeV0lQJyAiJHJhbmdlImAKKwkJaWYgWyAtbiAiJGNvbW1pdCIgXQorCQl0aGVuCisJCQllY2hvID4mMiAiRm91bmQgV0lQIGNvbW1pdCBpbiAkbG9jYWxfcmVmLCBub3QgcHVzaGluZyIKKwkJCWV4aXQgMQorCQlmaQorCWZpCitkb25lCisKK2V4aXQgMApkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS1wcmUtcmViYXNlLnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLXJlYmFzZS5zYW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDUzZjExMQotLS0gL2Rldi9udWxsCisrKyBiL3RlbXBsYXRlcy9ob29rcy0tcHJlLXJlYmFzZS5zYW1wbGUKQEAgLTAsMCArMSwxNjkgQEAKKyMhL2Jpbi9zaAorIworIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSnVuaW8gQyBIYW1hbm8KKyMKKyMgVGhlICJwcmUtcmViYXNlIiBob29rIGlzIHJ1biBqdXN0IGJlZm9yZSAiZ2l0IHJlYmFzZSIgc3RhcnRzIGRvaW5nCisjIGl0cyBqb2IsIGFuZCBjYW4gcHJldmVudCB0aGUgY29tbWFuZCBmcm9tIHJ1bm5pbmcgYnkgZXhpdGluZyB3aXRoCisjIG5vbi16ZXJvIHN0YXR1cy4KKyMKKyMgVGhlIGhvb2sgaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorIworIyAkMSAtLSB0aGUgdXBzdHJlYW0gdGhlIHNlcmllcyB3YXMgZm9ya2VkIGZyb20uCisjICQyIC0tIHRoZSBicmFuY2ggYmVpbmcgcmViYXNlZCAob3IgZW1wdHkgd2hlbiByZWJhc2luZyB0aGUgY3VycmVudCBicmFuY2gpLgorIworIyBUaGlzIHNhbXBsZSBzaG93cyBob3cgdG8gcHJldmVudCB0b3BpYyBicmFuY2hlcyB0aGF0IGFyZSBhbHJlYWR5CisjIG1lcmdlZCB0byAnbmV4dCcgYnJhbmNoIGZyb20gZ2V0dGluZyByZWJhc2VkLCBiZWNhdXNlIGFsbG93aW5nIGl0CisjIHdvdWxkIHJlc3VsdCBpbiByZWJhc2luZyBhbHJlYWR5IHB1Ymxpc2hlZCBoaXN0b3J5LgorCitwdWJsaXNoPW5leHQKK2Jhc2VicmFuY2g9IiQxIgoraWYgdGVzdCAiJCMiID0gMgordGhlbgorCXRvcGljPSJyZWZzL2hlYWRzLyQyIgorZWxzZQorCXRvcGljPWBnaXQgc3ltYm9saWMtcmVmIEhFQURgIHx8CisJZXhpdCAwIDsjIHdlIGRvIG5vdCBpbnRlcnJ1cHQgcmViYXNpbmcgZGV0YWNoZWQgSEVBRAorZmkKKworY2FzZSAiJHRvcGljIiBpbgorcmVmcy9oZWFkcy8/Py8qKQorCTs7CisqKQorCWV4aXQgMCA7IyB3ZSBkbyBub3QgaW50ZXJydXB0IG90aGVycy4KKwk7OworZXNhYworCisjIE5vdyB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgdG9waWMgYnJhbmNoIGJlaW5nIHJlYmFzZWQKKyMgb24gdG9wIG9mIG1hc3Rlci4gIElzIGl0IE9LIHRvIHJlYmFzZSBpdD8KKworIyBEb2VzIHRoZSB0b3BpYyByZWFsbHkgZXhpc3Q/CitnaXQgc2hvdy1yZWYgLXEgIiR0b3BpYyIgfHwgeworCWVjaG8gPiYyICJObyBzdWNoIGJyYW5jaCAkdG9waWMiCisJZXhpdCAxCit9CisKKyMgSXMgdG9waWMgZnVsbHkgbWVyZ2VkIHRvIG1hc3Rlcj8KK25vdF9pbl9tYXN0ZXI9YGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIF5tYXN0ZXIgIiR0b3BpYyJgCitpZiB0ZXN0IC16ICIkbm90X2luX21hc3RlciIKK3RoZW4KKwllY2hvID4mMiAiJHRvcGljIGlzIGZ1bGx5IG1lcmdlZCB0byBtYXN0ZXI7IGJldHRlciByZW1vdmUgaXQuIgorCWV4aXQgMSA7IyB3ZSBjb3VsZCBhbGxvdyBpdCwgYnV0IHRoZXJlIGlzIG5vIHBvaW50LgorZmkKKworIyBJcyB0b3BpYyBldmVyIG1lcmdlZCB0byBuZXh0PyAgSWYgc28geW91IHNob3VsZCBub3QgYmUgcmViYXNpbmcgaXQuCitvbmx5X25leHRfMT1gZ2l0IHJldi1saXN0IF5tYXN0ZXIgIl4kdG9waWMiICR7cHVibGlzaH0gfCBzb3J0YAorb25seV9uZXh0XzI9YGdpdCByZXYtbGlzdCBebWFzdGVyICAgICAgICAgICAke3B1Ymxpc2h9IHwgc29ydGAKK2lmIHRlc3QgIiRvbmx5X25leHRfMSIgPSAiJG9ubHlfbmV4dF8yIgordGhlbgorCW5vdF9pbl90b3BpYz1gZ2l0IHJldi1saXN0ICJeJHRvcGljIiBtYXN0ZXJgCisJaWYgdGVzdCAteiAiJG5vdF9pbl90b3BpYyIKKwl0aGVuCisJCWVjaG8gPiYyICIkdG9waWMgaXMgYWxyZWFkeSB1cC10by1kYXRlIHdpdGggbWFzdGVyIgorCQlleGl0IDEgOyMgd2UgY291bGQgYWxsb3cgaXQsIGJ1dCB0aGVyZSBpcyBubyBwb2ludC4KKwllbHNlCisJCWV4aXQgMAorCWZpCitlbHNlCisJbm90X2luX25leHQ9YGdpdCByZXYtbGlzdCAtLXByZXR0eT1vbmVsaW5lIF4ke3B1Ymxpc2h9ICIkdG9waWMiYAorCUBQRVJMX1BBVEhAIC1lICcKKwkJbXkgJHRvcGljID0gJEFSR1ZbMF07CisJCW15ICRtc2cgPSAiKiAkdG9waWMgaGFzIGNvbW1pdHMgYWxyZWFkeSBtZXJnZWQgdG8gcHVibGljIGJyYW5jaDpcbiI7CisJCW15ICglbm90X2luX25leHQpID0gbWFwIHsKKwkJCS9eKFswLTlhLWZdKykgLzsKKwkJCSgkMSA9PiAxKTsKKwkJfSBzcGxpdCgvXG4vLCAkQVJHVlsxXSk7CisJCWZvciBteSAkZWxlbSAobWFwIHsKKwkJCQkvXihbMC05YS1mXSspICguKikkLzsKKwkJCQlbJDEgPT4gJDJdOworCQkJfSBzcGxpdCgvXG4vLCAkQVJHVlsyXSkpIHsKKwkJCWlmICghZXhpc3RzICRub3RfaW5fbmV4dHskZWxlbS0+WzBdfSkgeworCQkJCWlmICgkbXNnKSB7CisJCQkJCXByaW50IFNUREVSUiAkbXNnOworCQkJCQl1bmRlZiAkbXNnOworCQkJCX0KKwkJCQlwcmludCBTVERFUlIgIiAkZWxlbS0+WzFdXG4iOworCQkJfQorCQl9CisJJyAiJHRvcGljIiAiJG5vdF9pbl9uZXh0IiAiJG5vdF9pbl9tYXN0ZXIiCisJZXhpdCAxCitmaQorCitleGl0IDAKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitUaGlzIHNhbXBsZSBob29rIHNhZmVndWFyZHMgdG9waWMgYnJhbmNoZXMgdGhhdCBoYXZlIGJlZW4KK3B1Ymxpc2hlZCBmcm9tIGJlaW5nIHJld291bmQuCisKK1RoZSB3b3JrZmxvdyBhc3N1bWVkIGhlcmUgaXM6CisKKyAqIE9uY2UgYSB0b3BpYyBicmFuY2ggZm9ya3MgZnJvbSAibWFzdGVyIiwgIm1hc3RlciIgaXMgbmV2ZXIKKyAgIG1lcmdlZCBpbnRvIGl0IGFnYWluIChlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuCisKKyAqIE9uY2UgYSB0b3BpYyBicmFuY2ggaXMgZnVsbHkgY29va2VkIGFuZCBtZXJnZWQgaW50byAibWFzdGVyIiwKKyAgIGl0IGlzIGRlbGV0ZWQuICBJZiB5b3UgbmVlZCB0byBidWlsZCBvbiB0b3Agb2YgaXQgdG8gY29ycmVjdAorICAgZWFybGllciBtaXN0YWtlcywgYSBuZXcgdG9waWMgYnJhbmNoIGlzIGNyZWF0ZWQgYnkgZm9ya2luZyBhdAorICAgdGhlIHRpcCBvZiB0aGUgIm1hc3RlciIuICBUaGlzIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dAorICAgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIGtlZXAgeW91ciBoaXN0b3J5IHNpbXBsZS4KKworICogV2hlbmV2ZXIgeW91IG5lZWQgdG8gdGVzdCBvciBwdWJsaXNoIHlvdXIgY2hhbmdlcyB0byB0b3BpYworICAgYnJhbmNoZXMsIG1lcmdlIHRoZW0gaW50byAibmV4dCIgYnJhbmNoLgorCitUaGUgc2NyaXB0LCBiZWluZyBhbiBleGFtcGxlLCBoYXJkY29kZXMgdGhlIHB1Ymxpc2ggYnJhbmNoIG5hbWUKK3RvIGJlICJuZXh0IiwgYnV0IGl0IGlzIHRyaXZpYWwgdG8gbWFrZSBpdCBjb25maWd1cmFibGUgdmlhCiskR0lUX0RJUi9jb25maWcgbWVjaGFuaXNtLgorCitXaXRoIHRoaXMgd29ya2Zsb3csIHlvdSB3b3VsZCB3YW50IHRvIGtub3c6CisKKygxKSAuLi4gaWYgYSB0b3BpYyBicmFuY2ggaGFzIGV2ZXIgYmVlbiBtZXJnZWQgdG8gIm5leHQiLiAgWW91bmcKKyAgICB0b3BpYyBicmFuY2hlcyBjYW4gaGF2ZSBzdHVwaWQgbWlzdGFrZXMgeW91IHdvdWxkIHJhdGhlcgorICAgIGNsZWFuIHVwIGJlZm9yZSBwdWJsaXNoaW5nLCBhbmQgdGhpbmdzIHRoYXQgaGF2ZSBub3QgYmVlbgorICAgIG1lcmdlZCBpbnRvIG90aGVyIGJyYW5jaGVzIGNhbiBiZSBlYXNpbHkgcmViYXNlZCB3aXRob3V0CisgICAgYWZmZWN0aW5nIG90aGVyIHBlb3BsZS4gIEJ1dCBvbmNlIGl0IGlzIHB1Ymxpc2hlZCwgeW91IHdvdWxkCisgICAgbm90IHdhbnQgdG8gcmV3aW5kIGl0LgorCisoMikgLi4uIGlmIGEgdG9waWMgYnJhbmNoIGhhcyBiZWVuIGZ1bGx5IG1lcmdlZCB0byAibWFzdGVyIi4KKyAgICBUaGVuIHlvdSBjYW4gZGVsZXRlIGl0LiAgTW9yZSBpbXBvcnRhbnRseSwgeW91IHNob3VsZCBub3QKKyAgICBidWlsZCBvbiB0b3Agb2YgaXQgLS0gb3RoZXIgcGVvcGxlIG1heSBhbHJlYWR5IHdhbnQgdG8KKyAgICBjaGFuZ2UgdGhpbmdzIHJlbGF0ZWQgdG8gdGhlIHRvcGljIGFzIHBhdGNoZXMgYWdhaW5zdCB5b3VyCisgICAgIm1hc3RlciIsIHNvIGlmIHlvdSBuZWVkIGZ1cnRoZXIgY2hhbmdlcywgaXQgaXMgYmV0dGVyIHRvCisgICAgZm9yayB0aGUgdG9waWMgKHBlcmhhcHMgd2l0aCB0aGUgc2FtZSBuYW1lKSBhZnJlc2ggZnJvbSB0aGUKKyAgICB0aXAgb2YgIm1hc3RlciIuCisKK0xldCdzIGxvb2sgYXQgdGhpcyBleGFtcGxlOgorCisJCSAgIG8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8gIm5leHQiCisJCSAgLyAgICAgICAvICAgICAgICAgICAvICAgICAgICAgICAvCisJCSAvICAgYS0tLWEtLS1iIEEgICAgIC8gICAgICAgICAgIC8KKwkJLyAgIC8gICAgICAgICAgICAgICAvICAgICAgICAgICAvCisJICAgICAgIC8gICAvICAgYy0tLWMtLS1jLS0tYyBCICAgICAgICAgLworCSAgICAgIC8gICAvICAgLyAgICAgICAgICAgICBcICAgICAgICAgLworCSAgICAgLyAgIC8gICAvICAgYi0tLWIgQyAgICAgXCAgICAgICAvCisJICAgIC8gICAvICAgLyAgIC8gICAgICAgICAgICAgXCAgICAgLworICAgIC0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vICJtYXN0ZXIiCisKKworQSwgQiBhbmQgQyBhcmUgdG9waWMgYnJhbmNoZXMuCisKKyAqIEEgaGFzIG9uZSBmaXggc2luY2UgaXQgd2FzIG1lcmdlZCB1cCB0byAibmV4dCIuCisKKyAqIEIgaGFzIGZpbmlzaGVkLiAgSXQgaGFzIGJlZW4gZnVsbHkgbWVyZ2VkIHVwIHRvICJtYXN0ZXIiIGFuZCAibmV4dCIsCisgICBhbmQgaXMgcmVhZHkgdG8gYmUgZGVsZXRlZC4KKworICogQyBoYXMgbm90IG1lcmdlZCB0byAibmV4dCIgYXQgYWxsLgorCitXZSB3b3VsZCB3YW50IHRvIGFsbG93IEMgdG8gYmUgcmViYXNlZCwgcmVmdXNlIEEsIGFuZCBlbmNvdXJhZ2UKK0IgdG8gYmUgZGVsZXRlZC4KKworVG8gY29tcHV0ZSAoMSk6CisKKwlnaXQgcmV2LWxpc3QgXm1hc3RlciBedG9waWMgbmV4dAorCWdpdCByZXYtbGlzdCBebWFzdGVyICAgICAgICBuZXh0CisKKwlpZiB0aGVzZSBtYXRjaCwgdG9waWMgaGFzIG5vdCBtZXJnZWQgaW4gbmV4dCBhdCBhbGwuCisKK1RvIGNvbXB1dGUgKDIpOgorCisJZ2l0IHJldi1saXN0IG1hc3Rlci4udG9waWMKKworCWlmIHRoaXMgaXMgZW1wdHksIGl0IGlzIGZ1bGx5IG1lcmdlZCB0byAibWFzdGVyIi4KZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy9ob29rcy0tcHJlcGFyZS1jb21taXQtbXNnLnNhbXBsZSBiL3RlbXBsYXRlcy9ob29rcy0tcHJlcGFyZS1jb21taXQtbXNnLnNhbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NmI4ZjIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL2hvb2tzLS1wcmVwYXJlLWNvbW1pdC1tc2cuc2FtcGxlCkBAIC0wLDAgKzEsMzYgQEAKKyMhL2Jpbi9zaAorIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHByZXBhcmUgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZS4KKyMgQ2FsbGVkIGJ5ICJnaXQgY29tbWl0IiB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRoYXQgaGFzIHRoZQorIyBjb21taXQgbWVzc2FnZSwgZm9sbG93ZWQgYnkgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBjb21taXQKKyMgbWVzc2FnZSdzIHNvdXJjZS4gIFRoZSBob29rJ3MgcHVycG9zZSBpcyB0byBlZGl0IHRoZSBjb21taXQKKyMgbWVzc2FnZSBmaWxlLiAgSWYgdGhlIGhvb2sgZmFpbHMgd2l0aCBhIG5vbi16ZXJvIHN0YXR1cywKKyMgdGhlIGNvbW1pdCBpcyBhYm9ydGVkLgorIworIyBUbyBlbmFibGUgdGhpcyBob29rLCByZW5hbWUgdGhpcyBmaWxlIHRvICJwcmVwYXJlLWNvbW1pdC1tc2ciLgorCisjIFRoaXMgaG9vayBpbmNsdWRlcyB0aHJlZSBleGFtcGxlcy4gIFRoZSBmaXJzdCBjb21tZW50cyBvdXQgdGhlCisjICJDb25mbGljdHM6IiBwYXJ0IG9mIGEgbWVyZ2UgY29tbWl0LgorIworIyBUaGUgc2Vjb25kIGluY2x1ZGVzIHRoZSBvdXRwdXQgb2YgImdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgLXIiCisjIGludG8gdGhlIG1lc3NhZ2UsIGp1c3QgYmVmb3JlIHRoZSAiZ2l0IHN0YXR1cyIgb3V0cHV0LiAgSXQgaXMKKyMgY29tbWVudGVkIGJlY2F1c2UgaXQgZG9lc24ndCBjb3BlIHdpdGggLS1hbWVuZCBvciB3aXRoIHNxdWFzaGVkCisjIGNvbW1pdHMuCisjCisjIFRoZSB0aGlyZCBleGFtcGxlIGFkZHMgYSBTaWduZWQtb2ZmLWJ5IGxpbmUgdG8gdGhlIG1lc3NhZ2UsIHRoYXQgY2FuCisjIHN0aWxsIGJlIGVkaXRlZC4gIFRoaXMgaXMgcmFyZWx5IGEgZ29vZCBpZGVhLgorCitjYXNlICIkMiwkMyIgaW4KKyAgbWVyZ2UsKQorICAgIEBQRVJMX1BBVEhAIC1pLmJhayAtbmUgJ3MvXi8jIC8sIHMvXiMgIy8jLyBpZiAvXkNvbmZsaWN0cy8gLi4gLyMvOyBwcmludCcgIiQxIiA7OworCisjICx8dGVtcGxhdGUsKQorIyAgIEBQRVJMX1BBVEhAIC1pLmJhayAtcGUgJworIyAgICAgIHByaW50ICJcbiIgLiBgZ2l0IGRpZmYgLS1jYWNoZWQgLS1uYW1lLXN0YXR1cyAtcmAKKyMJIGlmIC9eIy8gJiYgJGZpcnN0KysgPT0gMCcgIiQxIiA7OworCisgICopIDs7Citlc2FjCisKKyMgU09CPSQoZ2l0IHZhciBHSVRfQVVUSE9SX0lERU5UIHwgc2VkIC1uICdzL15cKC4qPlwpLiokL1NpZ25lZC1vZmYtYnk6IFwxL3AnKQorIyBncmVwIC1xcyAiXiRTT0IiICIkMSIgfHwgZWNobyAiJFNPQiIgPj4gIiQxIgpkaWZmIC0tZ2l0IGEvdGVtcGxhdGVzL2hvb2tzLS11cGRhdGUuc2FtcGxlIGIvdGVtcGxhdGVzL2hvb2tzLS11cGRhdGUuc2FtcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ4NDc1ODMKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaG9va3MtLXVwZGF0ZS5zYW1wbGUKQEAgLTAsMCArMSwxMjggQEAKKyMhL2Jpbi9zaAorIworIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIGJsb2NrcyB1bmFubm90YXRlZCB0YWdzIGZyb20gZW50ZXJpbmcuCisjIENhbGxlZCBieSAiZ2l0IHJlY2VpdmUtcGFjayIgd2l0aCBhcmd1bWVudHM6IHJlZm5hbWUgc2hhMS1vbGQgc2hhMS1uZXcKKyMKKyMgVG8gZW5hYmxlIHRoaXMgaG9vaywgcmVuYW1lIHRoaXMgZmlsZSB0byAidXBkYXRlIi4KKyMKKyMgQ29uZmlnCisjIC0tLS0tLQorIyBob29rcy5hbGxvd3VuYW5ub3RhdGVkCisjICAgVGhpcyBib29sZWFuIHNldHMgd2hldGhlciB1bmFubm90YXRlZCB0YWdzIHdpbGwgYmUgYWxsb3dlZCBpbnRvIHRoZQorIyAgIHJlcG9zaXRvcnkuICBCeSBkZWZhdWx0IHRoZXkgd29uJ3QgYmUuCisjIGhvb2tzLmFsbG93ZGVsZXRldGFnCisjICAgVGhpcyBib29sZWFuIHNldHMgd2hldGhlciBkZWxldGluZyB0YWdzIHdpbGwgYmUgYWxsb3dlZCBpbiB0aGUKKyMgICByZXBvc2l0b3J5LiAgQnkgZGVmYXVsdCB0aGV5IHdvbid0IGJlLgorIyBob29rcy5hbGxvd21vZGlmeXRhZworIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgYSB0YWcgbWF5IGJlIG1vZGlmaWVkIGFmdGVyIGNyZWF0aW9uLiBCeSBkZWZhdWx0CisjICAgaXQgd29uJ3QgYmUuCisjIGhvb2tzLmFsbG93ZGVsZXRlYnJhbmNoCisjICAgVGhpcyBib29sZWFuIHNldHMgd2hldGhlciBkZWxldGluZyBicmFuY2hlcyB3aWxsIGJlIGFsbG93ZWQgaW4gdGhlCisjICAgcmVwb3NpdG9yeS4gIEJ5IGRlZmF1bHQgdGhleSB3b24ndCBiZS4KKyMgaG9va3MuZGVueWNyZWF0ZWJyYW5jaAorIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgcmVtb3RlbHkgY3JlYXRpbmcgYnJhbmNoZXMgd2lsbCBiZSBkZW5pZWQKKyMgICBpbiB0aGUgcmVwb3NpdG9yeS4gIEJ5IGRlZmF1bHQgdGhpcyBpcyBhbGxvd2VkLgorIworCisjIC0tLSBDb21tYW5kIGxpbmUKK3JlZm5hbWU9IiQxIgorb2xkcmV2PSIkMiIKK25ld3Jldj0iJDMiCisKKyMgLS0tIFNhZmV0eSBjaGVjaworaWYgWyAteiAiJEdJVF9ESVIiIF07IHRoZW4KKwllY2hvICJEb24ndCBydW4gdGhpcyBzY3JpcHQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLiIgPiYyCisJZWNobyAiIChpZiB5b3Ugd2FudCwgeW91IGNvdWxkIHN1cHBseSBHSVRfRElSIHRoZW4gcnVuIiA+JjIKKwllY2hvICIgICQwIDxyZWY+IDxvbGRyZXY+IDxuZXdyZXY+KSIgPiYyCisJZXhpdCAxCitmaQorCitpZiBbIC16ICIkcmVmbmFtZSIgLW8gLXogIiRvbGRyZXYiIC1vIC16ICIkbmV3cmV2IiBdOyB0aGVuCisJZWNobyAidXNhZ2U6ICQwIDxyZWY+IDxvbGRyZXY+IDxuZXdyZXY+IiA+JjIKKwlleGl0IDEKK2ZpCisKKyMgLS0tIENvbmZpZworYWxsb3d1bmFubm90YXRlZD0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmFsbG93dW5hbm5vdGF0ZWQpCithbGxvd2RlbGV0ZWJyYW5jaD0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmFsbG93ZGVsZXRlYnJhbmNoKQorZGVueWNyZWF0ZWJyYW5jaD0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmRlbnljcmVhdGVicmFuY2gpCithbGxvd2RlbGV0ZXRhZz0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmFsbG93ZGVsZXRldGFnKQorYWxsb3dtb2RpZnl0YWc9JChnaXQgY29uZmlnIC0tYm9vbCBob29rcy5hbGxvd21vZGlmeXRhZykKKworIyBjaGVjayBmb3Igbm8gZGVzY3JpcHRpb24KK3Byb2plY3RkZXNjPSQoc2VkIC1lICcxcScgIiRHSVRfRElSL2Rlc2NyaXB0aW9uIikKK2Nhc2UgIiRwcm9qZWN0ZGVzYyIgaW4KKyJVbm5hbWVkIHJlcG9zaXRvcnkiKiB8ICIiKQorCWVjaG8gIioqKiBQcm9qZWN0IGRlc2NyaXB0aW9uIGZpbGUgaGFzbid0IGJlZW4gc2V0IiA+JjIKKwlleGl0IDEKKwk7OworZXNhYworCisjIC0tLSBDaGVjayB0eXBlcworIyBpZiAkbmV3cmV2IGlzIDAwMDAuLi4wMDAwLCBpdCdzIGEgY29tbWl0IHRvIGRlbGV0ZSBhIHJlZi4KK3plcm89IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCitpZiBbICIkbmV3cmV2IiA9ICIkemVybyIgXTsgdGhlbgorCW5ld3Jldl90eXBlPWRlbGV0ZQorZWxzZQorCW5ld3Jldl90eXBlPSQoZ2l0IGNhdC1maWxlIC10ICRuZXdyZXYpCitmaQorCitjYXNlICIkcmVmbmFtZSIsIiRuZXdyZXZfdHlwZSIgaW4KKwlyZWZzL3RhZ3MvKixjb21taXQpCisJCSMgdW4tYW5ub3RhdGVkIHRhZworCQlzaG9ydF9yZWZuYW1lPSR7cmVmbmFtZSMjcmVmcy90YWdzL30KKwkJaWYgWyAiJGFsbG93dW5hbm5vdGF0ZWQiICE9ICJ0cnVlIiBdOyB0aGVuCisJCQllY2hvICIqKiogVGhlIHVuLWFubm90YXRlZCB0YWcsICRzaG9ydF9yZWZuYW1lLCBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHJlcG9zaXRvcnkiID4mMgorCQkJZWNobyAiKioqIFVzZSAnZ2l0IHRhZyBbIC1hIHwgLXMgXScgZm9yIHRhZ3MgeW91IHdhbnQgdG8gcHJvcGFnYXRlLiIgPiYyCisJCQlleGl0IDEKKwkJZmkKKwkJOzsKKwlyZWZzL3RhZ3MvKixkZWxldGUpCisJCSMgZGVsZXRlIHRhZworCQlpZiBbICIkYWxsb3dkZWxldGV0YWciICE9ICJ0cnVlIiBdOyB0aGVuCisJCQllY2hvICIqKiogRGVsZXRpbmcgYSB0YWcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByZXBvc2l0b3J5IiA+JjIKKwkJCWV4aXQgMQorCQlmaQorCQk7OworCXJlZnMvdGFncy8qLHRhZykKKwkJIyBhbm5vdGF0ZWQgdGFnCisJCWlmIFsgIiRhbGxvd21vZGlmeXRhZyIgIT0gInRydWUiIF0gJiYgZ2l0IHJldi1wYXJzZSAkcmVmbmFtZSA+IC9kZXYvbnVsbCAyPiYxCisJCXRoZW4KKwkJCWVjaG8gIioqKiBUYWcgJyRyZWZuYW1lJyBhbHJlYWR5IGV4aXN0cy4iID4mMgorCQkJZWNobyAiKioqIE1vZGlmeWluZyBhIHRhZyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHJlcG9zaXRvcnkuIiA+JjIKKwkJCWV4aXQgMQorCQlmaQorCQk7OworCXJlZnMvaGVhZHMvKixjb21taXQpCisJCSMgYnJhbmNoCisJCWlmIFsgIiRvbGRyZXYiID0gIiR6ZXJvIiAtYSAiJGRlbnljcmVhdGVicmFuY2giID0gInRydWUiIF07IHRoZW4KKwkJCWVjaG8gIioqKiBDcmVhdGluZyBhIGJyYW5jaCBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHJlcG9zaXRvcnkiID4mMgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJcmVmcy9oZWFkcy8qLGRlbGV0ZSkKKwkJIyBkZWxldGUgYnJhbmNoCisJCWlmIFsgIiRhbGxvd2RlbGV0ZWJyYW5jaCIgIT0gInRydWUiIF07IHRoZW4KKwkJCWVjaG8gIioqKiBEZWxldGluZyBhIGJyYW5jaCBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHJlcG9zaXRvcnkiID4mMgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJcmVmcy9yZW1vdGVzLyosY29tbWl0KQorCQkjIHRyYWNraW5nIGJyYW5jaAorCQk7OworCXJlZnMvcmVtb3Rlcy8qLGRlbGV0ZSkKKwkJIyBkZWxldGUgdHJhY2tpbmcgYnJhbmNoCisJCWlmIFsgIiRhbGxvd2RlbGV0ZWJyYW5jaCIgIT0gInRydWUiIF07IHRoZW4KKwkJCWVjaG8gIioqKiBEZWxldGluZyBhIHRyYWNraW5nIGJyYW5jaCBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHJlcG9zaXRvcnkiID4mMgorCQkJZXhpdCAxCisJCWZpCisJCTs7CisJKikKKwkJIyBBbnl0aGluZyBlbHNlIChpcyB0aGVyZSBhbnl0aGluZyBlbHNlPykKKwkJZWNobyAiKioqIFVwZGF0ZSBob29rOiB1bmtub3duIHR5cGUgb2YgdXBkYXRlIHRvIHJlZiAkcmVmbmFtZSBvZiB0eXBlICRuZXdyZXZfdHlwZSIgPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIC0tLSBGaW5pc2hlZAorZXhpdCAwCmRpZmYgLS1naXQgYS90ZW1wbGF0ZXMvaW5mby0tZXhjbHVkZSBiL3RlbXBsYXRlcy9pbmZvLS1leGNsdWRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MTk2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZW1wbGF0ZXMvaW5mby0tZXhjbHVkZQpAQCAtMCwwICsxLDYgQEAKKyMgZ2l0IGxzLWZpbGVzIC0tb3RoZXJzIC0tZXhjbHVkZS1mcm9tPS5naXQvaW5mby9leGNsdWRlCisjIExpbmVzIHRoYXQgc3RhcnQgd2l0aCAnIycgYXJlIGNvbW1lbnRzLgorIyBGb3IgYSBwcm9qZWN0IG1vc3RseSBpbiBDLCB0aGUgZm9sbG93aW5nIHdvdWxkIGJlIGEgZ29vZCBzZXQgb2YKKyMgZXhjbHVkZSBwYXR0ZXJucyAodW5jb21tZW50IHRoZW0gaWYgeW91IHdhbnQgdG8gdXNlIHRoZW0pOgorIyAqLltvYV0KKyMgKn4KZGlmZiAtLWdpdCBhL3RlbXBsYXRlcy90aGlzLS1kZXNjcmlwdGlvbiBiL3RlbXBsYXRlcy90aGlzLS1kZXNjcmlwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OThiMjY3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVtcGxhdGVzL3RoaXMtLWRlc2NyaXB0aW9uCkBAIC0wLDAgKzEgQEAKK1VubmFtZWQgcmVwb3NpdG9yeTsgZWRpdCB0aGlzIGZpbGUgJ2Rlc2NyaXB0aW9uJyB0byBuYW1lIHRoZSByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvdGVzdC1jaG10aW1lLmMgYi90ZXN0LWNobXRpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmU4YTgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1jaG10aW1lLmMKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gY2FuIGVpdGhlciBjaGFuZ2UgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIGdpdmVuCisgKiBmaWxlKHMpIG9yIGp1c3QgcHJpbnQgaXQuIFRoZSBwcm9ncmFtIGRvZXMgbm90IGNoYW5nZSBhdGltZSBvcgorICogY3RpbWUgKHRoZWlyIHZhbHVlcyBhcmUgZXhwbGljaXRseSBwcmVzZXJ2ZWQpLgorICoKKyAqIFRoZSBtdGltZSBjYW4gYmUgY2hhbmdlZCB0byBhbiBhYnNvbHV0ZSB2YWx1ZToKKyAqCisgKgl0ZXN0LWNobXRpbWUgPTxzZWNvbmRzPiBmaWxlLi4uCisgKgorICogUmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgdGltZSBhcyByZXR1cm5lZCBieSB0aW1lKDMpOgorICoKKyAqCXRlc3QtY2htdGltZSA9KzxzZWNvbmRzPiAob3IgPS08c2Vjb25kcz4pIGZpbGUuLi4KKyAqCisgKiBPciByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBtdGltZSBvZiB0aGUgZmlsZToKKyAqCisgKgl0ZXN0LWNobXRpbWUgPHNlY29uZHM+IGZpbGUuLi4KKyAqCXRlc3QtY2htdGltZSArPHNlY29uZHM+IChvciAtPHNlY29uZHM+KSBmaWxlLi4uCisgKgorICogRXhhbXBsZXM6CisgKgorICogVG8ganVzdCBwcmludCB0aGUgbXRpbWUgdXNlIC0tdmVyYm9zZSBhbmQgc2V0IHRoZSBmaWxlIG10aW1lIG9mZnNldCB0byAwOgorICoKKyAqCXRlc3QtY2htdGltZSAtdiArMCBmaWxlCisgKgorICogVG8gc2V0IHRoZSBtdGltZSB0byBjdXJyZW50IHRpbWU6CisgKgorICoJdGVzdC1jaG10aW1lID0rMCBmaWxlCisgKgorICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSA8dXRpbWUuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgdXNhZ2Vfc3RyW10gPSAiLXZ8LS12ZXJib3NlICgrfD18PSt8PS18LSk8c2Vjb25kcz4gPGZpbGU+Li4uIjsKKworc3RhdGljIGludCB0aW1lc3BlY19hcmcoY29uc3QgY2hhciAqYXJnLCBsb25nIGludCAqc2V0X3RpbWUsIGludCAqc2V0X2VxKQoreworCWNoYXIgKnRlc3Q7CisJY29uc3QgY2hhciAqdGltZXNwZWMgPSBhcmc7CisJKnNldF9lcSA9ICgqdGltZXNwZWMgPT0gJz0nKSA/IDEgOiAwOworCWlmICgqc2V0X2VxKSB7CisJCXRpbWVzcGVjKys7CisJCWlmICgqdGltZXNwZWMgPT0gJysnKSB7CisJCQkqc2V0X2VxID0gMjsgLyogcmVsYXRpdmUgImluIHRoZSBmdXR1cmUiICovCisJCQl0aW1lc3BlYysrOworCQl9CisJfQorCSpzZXRfdGltZSA9IHN0cnRvbCh0aW1lc3BlYywgJnRlc3QsIDEwKTsKKwlpZiAoKnRlc3QpIHsKKwkJZnByaW50ZihzdGRlcnIsICJOb3QgYSBiYXNlLTEwIGludGVnZXI6ICVzXG4iLCBhcmcgKyAxKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICgoKnNldF9lcSAmJiAqc2V0X3RpbWUgPCAwKSB8fCAqc2V0X2VxID09IDIpIHsKKwkJdGltZV90IG5vdyA9IHRpbWUoTlVMTCk7CisJCSpzZXRfdGltZSArPSBub3c7CisJfQorCXJldHVybiAxOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0YXRpYyBpbnQgdmVyYm9zZTsKKworCWludCBpID0gMTsKKwkvKiBubyBtdGltZSBjaGFuZ2UgYnkgZGVmYXVsdCAqLworCWludCBzZXRfZXEgPSAwOworCWxvbmcgaW50IHNldF90aW1lID0gMDsKKworCWlmIChhcmdjIDwgMykKKwkJZ290byB1c2FnZTsKKworCWlmIChzdHJjbXAoYXJndltpXSwgIi0tdmVyYm9zZSIpID09IDAgfHwgc3RyY21wKGFyZ3ZbaV0sICItdiIpID09IDApIHsKKwkJdmVyYm9zZSA9IDE7CisJCSsraTsKKwl9CisJaWYgKHRpbWVzcGVjX2FyZyhhcmd2W2ldLCAmc2V0X3RpbWUsICZzZXRfZXEpKQorCQkrK2k7CisJZWxzZQorCQlnb3RvIHVzYWdlOworCisJZm9yICg7IGkgPCBhcmdjOyBpKyspIHsKKwkJc3RydWN0IHN0YXQgc2I7CisJCXN0cnVjdCB1dGltYnVmIHV0YjsKKworCQlpZiAoc3RhdChhcmd2W2ldLCAmc2IpIDwgMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gc3RhdCAlczogJXNcbiIsCisJCQkgICAgICAgIGFyZ3ZbaV0sIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCisjaWZkZWYgR0lUX1dJTkRPV1NfTkFUSVZFCisJCWlmICghKHNiLnN0X21vZGUgJiBTX0lXVVNSKSAmJgorCQkJCWNobW9kKGFyZ3ZbaV0sIHNiLnN0X21vZGUgfCBTX0lXVVNSKSkgeworCQkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgbWFrZSB1c2VyLXdyaXRhYmxlICVzOiAlcyIsCisJCQkJYXJndltpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiAxOworCQl9CisjZW5kaWYKKworCQl1dGIuYWN0aW1lID0gc2Iuc3RfYXRpbWU7CisJCXV0Yi5tb2R0aW1lID0gc2V0X2VxID8gc2V0X3RpbWUgOiBzYi5zdF9tdGltZSArIHNldF90aW1lOworCisJCWlmICh2ZXJib3NlKSB7CisJCQl1aW50bWF4X3QgbXRpbWUgPSB1dGIubW9kdGltZSA8IDAgPyAwOiB1dGIubW9kdGltZTsKKwkJCXByaW50ZigiJSJQUkl1TUFYIlx0JXNcbiIsIG10aW1lLCBhcmd2W2ldKTsKKwkJfQorCisJCWlmICh1dGIubW9kdGltZSAhPSBzYi5zdF9tdGltZSAmJiB1dGltZShhcmd2W2ldLCAmdXRiKSA8IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG1vZGlmeSB0aW1lIG9uICVzOiAlc1xuIiwKKwkJCSAgICAgICAgYXJndltpXSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK3VzYWdlOgorCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzICVzXG4iLCBhcmd2WzBdLCB1c2FnZV9zdHIpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1jb25maWcuYyBiL3Rlc3QtY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE3NzU1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtY29uZmlnLmMKQEAgLTAsMCArMSwxNTIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisKKy8qCisgKiBUaGlzIHByb2dyYW0gZXhwb3NlcyB0aGUgQyBBUEkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtCisgKiBhcyBhIHNldCBvZiBzaW1wbGUgY29tbWFuZHMgaW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSB0ZXN0aW5nLgorICoKKyAqIFJlYWRzIHN0ZGluIGFuZCBwcmludHMgcmVzdWx0IG9mIGNvbW1hbmQgdG8gc3Rkb3V0OgorICoKKyAqIGdldF92YWx1ZSAtPiBwcmludHMgdGhlIHZhbHVlIHdpdGggaGlnaGVzdCBwcmlvcml0eSBmb3IgdGhlIGVudGVyZWQga2V5CisgKgorICogZ2V0X3ZhbHVlX211bHRpIC0+IHByaW50cyBhbGwgdmFsdWVzIGZvciB0aGUgZW50ZXJlZCBrZXkgaW4gaW5jcmVhc2luZyBvcmRlcgorICoJCSAgICAgb2YgcHJpb3JpdHkKKyAqCisgKiBnZXRfaW50IC0+IHByaW50IGludGVnZXIgdmFsdWUgZm9yIHRoZSBlbnRlcmVkIGtleSBvciBkaWUKKyAqCisgKiBnZXRfYm9vbCAtPiBwcmludCBib29sIHZhbHVlIGZvciB0aGUgZW50ZXJlZCBrZXkgb3IgZGllCisgKgorICogZ2V0X3N0cmluZyAtPiBwcmludCBzdHJpbmcgdmFsdWUgZm9yIHRoZSBlbnRlcmVkIGtleSBvciBkaWUKKyAqCisgKiBjb25maWdzZXRfZ2V0X3ZhbHVlIC0+IHJldHVybnMgdmFsdWUgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSBmb3IgdGhlIGVudGVyZWQga2V5CisgKiAJCQlmcm9tIGEgY29uZmlnX3NldCBjb25zdHJ1Y3RlZCBmcm9tIGZpbGVzIGVudGVyZWQgYXMgYXJndW1lbnRzLgorICoKKyAqIGNvbmZpZ3NldF9nZXRfdmFsdWVfbXVsdGkgLT4gcmV0dXJucyB2YWx1ZV9saXN0IGZvciB0aGUgZW50ZXJlZCBrZXkgc29ydGVkIGluCisgKiAJCQkJYXNjZW5kaW5nIG9yZGVyIG9mIHByaW9yaXR5IGZyb20gYSBjb25maWdfc2V0CisgKiAJCQkJY29uc3RydWN0ZWQgZnJvbSBmaWxlcyBlbnRlcmVkIGFzIGFyZ3VtZW50cy4KKyAqCisgKiBFeGFtcGxlczoKKyAqCisgKiBUbyBwcmludCB0aGUgdmFsdWUgd2l0aCBoaWdoZXN0IHByaW9yaXR5IGZvciBrZXkgImZvby5iQXIgQmF6LnJvY2siOgorICogCXRlc3QtY29uZmlnIGdldF92YWx1ZSAiZm9vLmJBciBCYXoucm9jayIKKyAqCisgKi8KKworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGksIHZhbDsKKwljb25zdCBjaGFyICp2OworCWNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqc3RycHRyOworCXN0cnVjdCBjb25maWdfc2V0IGNzOworCWdpdF9jb25maWdzZXRfaW5pdCgmY3MpOworCisJaWYgKGFyZ2MgPCAyKSB7CisJCWZwcmludGYoc3RkZXJyLCAiUGxlYXNlLCBwcm92aWRlIGEgY29tbWFuZCBuYW1lIG9uIHRoZSBjb21tYW5kLWxpbmVcbiIpOworCQlnb3RvIGV4aXQxOworCX0gZWxzZSBpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgImdldF92YWx1ZSIpKSB7CisJCWlmICghZ2l0X2NvbmZpZ19nZXRfdmFsdWUoYXJndlsyXSwgJnYpKSB7CisJCQlpZiAoIXYpCisJCQkJcHJpbnRmKCIoTlVMTClcbiIpOworCQkJZWxzZQorCQkJCXByaW50ZigiJXNcbiIsIHYpOworCQkJZ290byBleGl0MDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVmFsdWUgbm90IGZvdW5kIGZvciBcIiVzXCJcbiIsIGFyZ3ZbMl0pOworCQkJZ290byBleGl0MTsKKwkJfQorCX0gZWxzZSBpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgImdldF92YWx1ZV9tdWx0aSIpKSB7CisJCXN0cnB0ciA9IGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpKGFyZ3ZbMl0pOworCQlpZiAoc3RycHRyKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc3RycHRyLT5ucjsgaSsrKSB7CisJCQkJdiA9IHN0cnB0ci0+aXRlbXNbaV0uc3RyaW5nOworCQkJCWlmICghdikKKwkJCQkJcHJpbnRmKCIoTlVMTClcbiIpOworCQkJCWVsc2UKKwkJCQkJcHJpbnRmKCIlc1xuIiwgdik7CisJCQl9CisJCQlnb3RvIGV4aXQwOworCQl9IGVsc2UgeworCQkJcHJpbnRmKCJWYWx1ZSBub3QgZm91bmQgZm9yIFwiJXNcIlxuIiwgYXJndlsyXSk7CisJCQlnb3RvIGV4aXQxOworCQl9CisJfSBlbHNlIGlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAiZ2V0X2ludCIpKSB7CisJCWlmICghZ2l0X2NvbmZpZ19nZXRfaW50KGFyZ3ZbMl0sICZ2YWwpKSB7CisJCQlwcmludGYoIiVkXG4iLCB2YWwpOworCQkJZ290byBleGl0MDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVmFsdWUgbm90IGZvdW5kIGZvciBcIiVzXCJcbiIsIGFyZ3ZbMl0pOworCQkJZ290byBleGl0MTsKKwkJfQorCX0gZWxzZSBpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgImdldF9ib29sIikpIHsKKwkJaWYgKCFnaXRfY29uZmlnX2dldF9ib29sKGFyZ3ZbMl0sICZ2YWwpKSB7CisJCQlwcmludGYoIiVkXG4iLCB2YWwpOworCQkJZ290byBleGl0MDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVmFsdWUgbm90IGZvdW5kIGZvciBcIiVzXCJcbiIsIGFyZ3ZbMl0pOworCQkJZ290byBleGl0MTsKKwkJfQorCX0gZWxzZSBpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgImdldF9zdHJpbmciKSkgeworCQlpZiAoIWdpdF9jb25maWdfZ2V0X3N0cmluZ19jb25zdChhcmd2WzJdLCAmdikpIHsKKwkJCXByaW50ZigiJXNcbiIsIHYpOworCQkJZ290byBleGl0MDsKKwkJfSBlbHNlIHsKKwkJCXByaW50ZigiVmFsdWUgbm90IGZvdW5kIGZvciBcIiVzXCJcbiIsIGFyZ3ZbMl0pOworCQkJZ290byBleGl0MTsKKwkJfQorCX0gZWxzZSBpZiAoIXN0cmNtcChhcmd2WzFdLCAiY29uZmlnc2V0X2dldF92YWx1ZSIpKSB7CisJCWZvciAoaSA9IDM7IGkgPCBhcmdjOyBpKyspIHsKKwkJCWludCBlcnI7CisJCQlpZiAoKGVyciA9IGdpdF9jb25maWdzZXRfYWRkX2ZpbGUoJmNzLCBhcmd2W2ldKSkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yICglZCkgcmVhZGluZyBjb25maWd1cmF0aW9uIGZpbGUgJXMuXG4iLCBlcnIsIGFyZ3ZbaV0pOworCQkJCWdvdG8gZXhpdDI7CisJCQl9CisJCX0KKwkJaWYgKCFnaXRfY29uZmlnc2V0X2dldF92YWx1ZSgmY3MsIGFyZ3ZbMl0sICZ2KSkgeworCQkJaWYgKCF2KQorCQkJCXByaW50ZigiKE5VTEwpXG4iKTsKKwkJCWVsc2UKKwkJCQlwcmludGYoIiVzXG4iLCB2KTsKKwkJCWdvdG8gZXhpdDA7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIlZhbHVlIG5vdCBmb3VuZCBmb3IgXCIlc1wiXG4iLCBhcmd2WzJdKTsKKwkJCWdvdG8gZXhpdDE7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgImNvbmZpZ3NldF9nZXRfdmFsdWVfbXVsdGkiKSkgeworCQlmb3IgKGkgPSAzOyBpIDwgYXJnYzsgaSsrKSB7CisJCQlpbnQgZXJyOworCQkJaWYgKChlcnIgPSBnaXRfY29uZmlnc2V0X2FkZF9maWxlKCZjcywgYXJndltpXSkpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciAoJWQpIHJlYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlICVzLlxuIiwgZXJyLCBhcmd2W2ldKTsKKwkJCQlnb3RvIGV4aXQyOworCQkJfQorCQl9CisJCXN0cnB0ciA9IGdpdF9jb25maWdzZXRfZ2V0X3ZhbHVlX211bHRpKCZjcywgYXJndlsyXSk7CisJCWlmIChzdHJwdHIpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBzdHJwdHItPm5yOyBpKyspIHsKKwkJCQl2ID0gc3RycHRyLT5pdGVtc1tpXS5zdHJpbmc7CisJCQkJaWYgKCF2KQorCQkJCQlwcmludGYoIihOVUxMKVxuIik7CisJCQkJZWxzZQorCQkJCQlwcmludGYoIiVzXG4iLCB2KTsKKwkJCX0KKwkJCWdvdG8gZXhpdDA7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIlZhbHVlIG5vdCBmb3VuZCBmb3IgXCIlc1wiXG4iLCBhcmd2WzJdKTsKKwkJCWdvdG8gZXhpdDE7CisJCX0KKwl9CisKKwlkaWUoIiVzOiBQbGVhc2UgY2hlY2sgdGhlIHN5bnRheCBhbmQgdGhlIGZ1bmN0aW9uIG5hbWUiLCBhcmd2WzBdKTsKKworZXhpdDA6CisJZ2l0X2NvbmZpZ3NldF9jbGVhcigmY3MpOworCXJldHVybiAwOworCitleGl0MToKKwlnaXRfY29uZmlnc2V0X2NsZWFyKCZjcyk7CisJcmV0dXJuIDE7CisKK2V4aXQyOgorCWdpdF9jb25maWdzZXRfY2xlYXIoJmNzKTsKKwlyZXR1cm4gMjsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtY3R5cGUuYyBiL3Rlc3QtY3R5cGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDdhODIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1jdHlwZS5jCkBAIC0wLDAgKzEsNDIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdGF0aWMgaW50IHJjOworCitzdGF0aWMgdm9pZCByZXBvcnRfZXJyb3IoY29uc3QgY2hhciAqY2xhc3MsIGludCBjaCkKK3sKKwlwcmludGYoIiVzIGNsYXNzaWZpZXMgY2hhciAlZCAoMHglMDJ4KSB3cm9uZ2x5XG4iLCBjbGFzcywgY2gsIGNoKTsKKwlyYyA9IDE7Cit9CisKK3N0YXRpYyBpbnQgaXNfaW4oY29uc3QgY2hhciAqcywgaW50IGNoKQoreworCS8qIFdlIGNhbid0IGZpbmQgTlVMIHVzaW5nIHN0cmNoci4gIEl0J3MgY2xhc3NsZXNzIGFueXdheS4gKi8KKwlpZiAoY2ggPT0gJ1wwJykKKwkJcmV0dXJuIDA7CisJcmV0dXJuICEhc3RyY2hyKHMsIGNoKTsKK30KKworI2RlZmluZSBURVNUX0NMQVNTKHQscykgewkJCVwKKwlpbnQgaTsJCQkJCVwKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsJCVwKKwkJaWYgKGlzX2luKHMsIGkpICE9IHQoaSkpCVwKKwkJCXJlcG9ydF9lcnJvcigjdCwgaSk7CVwKKwl9CQkJCQlcCit9CisKKyNkZWZpbmUgRElHSVQgIjAxMjM0NTY3ODkiCisjZGVmaW5lIExPV0VSICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKyNkZWZpbmUgVVBQRVIgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJVEVTVF9DTEFTUyhpc2RpZ2l0LCBESUdJVCk7CisJVEVTVF9DTEFTUyhpc3NwYWNlLCAiIFxuXHJcdCIpOworCVRFU1RfQ0xBU1MoaXNhbHBoYSwgTE9XRVIgVVBQRVIpOworCVRFU1RfQ0xBU1MoaXNhbG51bSwgTE9XRVIgVVBQRVIgRElHSVQpOworCVRFU1RfQ0xBU1MoaXNfZ2xvYl9zcGVjaWFsLCAiKj9bXFwiKTsKKwlURVNUX0NMQVNTKGlzX3JlZ2V4X3NwZWNpYWwsICIkKCkqKy4/W1xcXnt8Iik7CisJVEVTVF9DTEFTUyhpc19wYXRoc3BlY19tYWdpYywgIiFcIiMlJicsLS86Ozw9PkBfYH4iKTsKKworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtZGF0ZS5jIGIvdGVzdC1kYXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNmMzczNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtZGF0ZS5jCkBAIC0wLDAgKzEsNzMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqdXNhZ2VfbXNnID0gIlxuIgorIiAgdGVzdC1kYXRlIHNob3cgW3RpbWVfdF0uLi5cbiIKKyIgIHRlc3QtZGF0ZSBwYXJzZSBbZGF0ZV0uLi5cbiIKKyIgIHRlc3QtZGF0ZSBhcHByb3hpZGF0ZSBbZGF0ZV0uLi5cbiI7CisKK3N0YXRpYyB2b2lkIHNob3dfZGF0ZXMoY2hhciAqKmFyZ3YsIHN0cnVjdCB0aW1ldmFsICpub3cpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWZvciAoOyAqYXJndjsgYXJndisrKSB7CisJCXRpbWVfdCB0ID0gYXRvaSgqYXJndik7CisJCXNob3dfZGF0ZV9yZWxhdGl2ZSh0LCAwLCBub3csICZidWYpOworCQlwcmludGYoIiVzIC0+ICVzXG4iLCAqYXJndiwgYnVmLmJ1Zik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9kYXRlcyhjaGFyICoqYXJndiwgc3RydWN0IHRpbWV2YWwgKm5vdykKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHJlc3VsdCA9IFNUUkJVRl9JTklUOworCisJZm9yICg7ICphcmd2OyBhcmd2KyspIHsKKwkJdW5zaWduZWQgbG9uZyB0OworCQlpbnQgdHo7CisKKwkJc3RyYnVmX3Jlc2V0KCZyZXN1bHQpOworCQlwYXJzZV9kYXRlKCphcmd2LCAmcmVzdWx0KTsKKwkJaWYgKHNzY2FuZihyZXN1bHQuYnVmLCAiJWx1ICVkIiwgJnQsICZ0eikgPT0gMikKKwkJCXByaW50ZigiJXMgLT4gJXNcbiIsCisJCQkgICAgICAgKmFyZ3YsIHNob3dfZGF0ZSh0LCB0eiwgREFURV9NT0RFKElTTzg2MDEpKSk7CisJCWVsc2UKKwkJCXByaW50ZigiJXMgLT4gYmFkXG4iLCAqYXJndik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZyZXN1bHQpOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9hcHByb3hpZGF0ZShjaGFyICoqYXJndiwgc3RydWN0IHRpbWV2YWwgKm5vdykKK3sKKwlmb3IgKDsgKmFyZ3Y7IGFyZ3YrKykgeworCQl0aW1lX3QgdDsKKwkJdCA9IGFwcHJveGlkYXRlX3JlbGF0aXZlKCphcmd2LCBub3cpOworCQlwcmludGYoIiVzIC0+ICVzXG4iLCAqYXJndiwgc2hvd19kYXRlKHQsIDAsIERBVEVfTU9ERShJU084NjAxKSkpOworCX0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwljb25zdCBjaGFyICp4OworCisJeCA9IGdldGVudigiVEVTVF9EQVRFX05PVyIpOworCWlmICh4KSB7CisJCW5vdy50dl9zZWMgPSBhdG9pKHgpOworCQlub3cudHZfdXNlYyA9IDA7CisJfQorCWVsc2UKKwkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCisJYXJndisrOworCWlmICghKmFyZ3YpCisJCXVzYWdlKHVzYWdlX21zZyk7CisJaWYgKCFzdHJjbXAoKmFyZ3YsICJzaG93IikpCisJCXNob3dfZGF0ZXMoYXJndisxLCAmbm93KTsKKwllbHNlIGlmICghc3RyY21wKCphcmd2LCAicGFyc2UiKSkKKwkJcGFyc2VfZGF0ZXMoYXJndisxLCAmbm93KTsKKwllbHNlIGlmICghc3RyY21wKCphcmd2LCAiYXBwcm94aWRhdGUiKSkKKwkJcGFyc2VfYXBwcm94aWRhdGUoYXJndisxLCAmbm93KTsKKwllbHNlCisJCXVzYWdlKHVzYWdlX21zZyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0LWRlbHRhLmMgYi90ZXN0LWRlbHRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5NWNkNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtZGVsdGEuYwpAQCAtMCwwICsxLDc4IEBACisvKgorICogdGVzdC1kZWx0YS5jOiB0ZXN0IGNvZGUgdG8gZXhlcmNpc2UgZGlmZi1kZWx0YS5jIGFuZCBwYXRjaC1kZWx0YS5jCisgKgorICogKEMpIDIwMDUgTmljb2xhcyBQaXRyZSA8bmljb0BmbHV4bmljLm5ldD4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJkZWx0YS5oIgorI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHVzYWdlX3N0cltdID0KKwkidGVzdC1kZWx0YSAoLWR8LXApIDxmcm9tX2ZpbGU+IDxkYXRhX2ZpbGU+IDxvdXRfZmlsZT4iOworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBmZDsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl2b2lkICpmcm9tX2J1ZiwgKmRhdGFfYnVmLCAqb3V0X2J1ZjsKKwl1bnNpZ25lZCBsb25nIGZyb21fc2l6ZSwgZGF0YV9zaXplLCBvdXRfc2l6ZTsKKworCWlmIChhcmdjICE9IDUgfHwgKHN0cmNtcChhcmd2WzFdLCAiLWQiKSAmJiBzdHJjbXAoYXJndlsxXSwgIi1wIikpKSB7CisJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzXG4iLCB1c2FnZV9zdHIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmZCA9IG9wZW4oYXJndlsyXSwgT19SRE9OTFkpOworCWlmIChmZCA8IDAgfHwgZnN0YXQoZmQsICZzdCkpIHsKKwkJcGVycm9yKGFyZ3ZbMl0pOworCQlyZXR1cm4gMTsKKwl9CisJZnJvbV9zaXplID0gc3Quc3Rfc2l6ZTsKKwlmcm9tX2J1ZiA9IG1tYXAoTlVMTCwgZnJvbV9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJaWYgKGZyb21fYnVmID09IE1BUF9GQUlMRUQpIHsKKwkJcGVycm9yKGFyZ3ZbMl0pOworCQljbG9zZShmZCk7CisJCXJldHVybiAxOworCX0KKwljbG9zZShmZCk7CisKKwlmZCA9IG9wZW4oYXJndlszXSwgT19SRE9OTFkpOworCWlmIChmZCA8IDAgfHwgZnN0YXQoZmQsICZzdCkpIHsKKwkJcGVycm9yKGFyZ3ZbM10pOworCQlyZXR1cm4gMTsKKwl9CisJZGF0YV9zaXplID0gc3Quc3Rfc2l6ZTsKKwlkYXRhX2J1ZiA9IG1tYXAoTlVMTCwgZGF0YV9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCk7CisJaWYgKGRhdGFfYnVmID09IE1BUF9GQUlMRUQpIHsKKwkJcGVycm9yKGFyZ3ZbM10pOworCQljbG9zZShmZCk7CisJCXJldHVybiAxOworCX0KKwljbG9zZShmZCk7CisKKwlpZiAoYXJndlsxXVsxXSA9PSAnZCcpCisJCW91dF9idWYgPSBkaWZmX2RlbHRhKGZyb21fYnVmLCBmcm9tX3NpemUsCisJCQkJICAgICBkYXRhX2J1ZiwgZGF0YV9zaXplLAorCQkJCSAgICAgJm91dF9zaXplLCAwKTsKKwllbHNlCisJCW91dF9idWYgPSBwYXRjaF9kZWx0YShmcm9tX2J1ZiwgZnJvbV9zaXplLAorCQkJCSAgICAgIGRhdGFfYnVmLCBkYXRhX3NpemUsCisJCQkJICAgICAgJm91dF9zaXplKTsKKwlpZiAoIW91dF9idWYpIHsKKwkJZnByaW50ZihzdGRlcnIsICJkZWx0YSBvcGVyYXRpb24gZmFpbGVkIChyZXR1cm5lZCBOVUxMKVxuIik7CisJCXJldHVybiAxOworCX0KKworCWZkID0gb3BlbiAoYXJndls0XSwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCAwNjY2KTsKKwlpZiAoZmQgPCAwIHx8IHdyaXRlX2luX2Z1bGwoZmQsIG91dF9idWYsIG91dF9zaXplKSAhPSBvdXRfc2l6ZSkgeworCQlwZXJyb3IoYXJndls0XSk7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1kdW1wLWNhY2hlLXRyZWUuYyBiL3Rlc3QtZHVtcC1jYWNoZS10cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1M2MwYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtZHVtcC1jYWNoZS10cmVlLmMKQEAgLTAsMCArMSw2NyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKworCitzdGF0aWMgdm9pZCBkdW1wX29uZShzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsIGNvbnN0IGNoYXIgKnBmeCwgY29uc3QgY2hhciAqeCkKK3sKKwlpZiAoaXQtPmVudHJ5X2NvdW50IDwgMCkKKwkJcHJpbnRmKCIlLTQwcyAlcyVzICglZCBzdWJ0cmVlcylcbiIsCisJCSAgICAgICAiaW52YWxpZCIsIHgsIHBmeCwgaXQtPnN1YnRyZWVfbnIpOworCWVsc2UKKwkJcHJpbnRmKCIlcyAlcyVzICglZCBlbnRyaWVzLCAlZCBzdWJ0cmVlcylcbiIsCisJCSAgICAgICBzaGExX3RvX2hleChpdC0+c2hhMSksIHgsIHBmeCwKKwkJICAgICAgIGl0LT5lbnRyeV9jb3VudCwgaXQtPnN1YnRyZWVfbnIpOworfQorCitzdGF0aWMgaW50IGR1bXBfY2FjaGVfdHJlZShzdHJ1Y3QgY2FjaGVfdHJlZSAqaXQsCisJCQkgICBzdHJ1Y3QgY2FjaGVfdHJlZSAqcmVmLAorCQkJICAgY29uc3QgY2hhciAqcGZ4KQoreworCWludCBpOworCWludCBlcnJzID0gMDsKKworCWlmICghaXQgfHwgIXJlZikKKwkJLyogbWlzc2luZyBpbiBlaXRoZXIgKi8KKwkJcmV0dXJuIDA7CisKKwlpZiAoaXQtPmVudHJ5X2NvdW50IDwgMCkgeworCQkvKiBpbnZhbGlkICovCisJCWR1bXBfb25lKGl0LCBwZngsICIiKTsKKwkJZHVtcF9vbmUocmVmLCBwZngsICIjKHJlZikgIik7CisJfQorCWVsc2UgeworCQlkdW1wX29uZShpdCwgcGZ4LCAiIik7CisJCWlmIChoYXNoY21wKGl0LT5zaGExLCByZWYtPnNoYTEpIHx8CisJCSAgICByZWYtPmVudHJ5X2NvdW50ICE9IGl0LT5lbnRyeV9jb3VudCB8fAorCQkgICAgcmVmLT5zdWJ0cmVlX25yICE9IGl0LT5zdWJ0cmVlX25yKSB7CisJCQkvKiBjbGFpbXMgdG8gYmUgdmFsaWQgYnV0IGlzIGx5aW5nICovCisJCQlkdW1wX29uZShyZWYsIHBmeCwgIiMocmVmKSAiKTsKKwkJCWVycnMgPSAxOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGl0LT5zdWJ0cmVlX25yOyBpKyspIHsKKwkJY2hhciBwYXRoW1BBVEhfTUFYXTsKKwkJc3RydWN0IGNhY2hlX3RyZWVfc3ViICpkb3duID0gaXQtPmRvd25baV07CisJCXN0cnVjdCBjYWNoZV90cmVlX3N1YiAqcmR3bjsKKworCQlyZHduID0gY2FjaGVfdHJlZV9zdWIocmVmLCBkb3duLT5uYW1lKTsKKwkJeHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIiVzJS4qcy8iLCBwZngsIGRvd24tPm5hbWVsZW4sIGRvd24tPm5hbWUpOworCQlpZiAoZHVtcF9jYWNoZV90cmVlKGRvd24tPmNhY2hlX3RyZWUsIHJkd24tPmNhY2hlX3RyZWUsIHBhdGgpKQorCQkJZXJycyA9IDE7CisJfQorCXJldHVybiBlcnJzOworfQorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgaXN0YXRlOworCXN0cnVjdCBjYWNoZV90cmVlICphbm90aGVyID0gY2FjaGVfdHJlZSgpOworCWlmIChyZWFkX2NhY2hlKCkgPCAwKQorCQlkaWUoInVuYWJsZSB0byByZWFkIGluZGV4IGZpbGUiKTsKKwlpc3RhdGUgPSB0aGVfaW5kZXg7CisJaXN0YXRlLmNhY2hlX3RyZWUgPSBhbm90aGVyOworCWNhY2hlX3RyZWVfdXBkYXRlKCZpc3RhdGUsIFdSSVRFX1RSRUVfRFJZX1JVTik7CisJcmV0dXJuIGR1bXBfY2FjaGVfdHJlZShhY3RpdmVfY2FjaGVfdHJlZSwgYW5vdGhlciwgIiIpOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1kdW1wLXNwbGl0LWluZGV4LmMgYi90ZXN0LWR1bXAtc3BsaXQtaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjFkMjhjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1kdW1wLXNwbGl0LWluZGV4LmMKQEAgLTAsMCArMSwzNiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3BsaXQtaW5kZXguaCIKKyNpbmNsdWRlICJld2FoL2V3b2suaCIKKworc3RhdGljIHZvaWQgc2hvd19iaXQoc2l6ZV90IHBvcywgdm9pZCAqZGF0YSkKK3sKKwlwcmludGYoIiAlZCIsIChpbnQpcG9zKTsKK30KKworaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpCit7CisJc3RydWN0IHNwbGl0X2luZGV4ICpzaTsKKwlpbnQgaTsKKworCWRvX3JlYWRfaW5kZXgoJnRoZV9pbmRleCwgYXZbMV0sIDEpOworCXByaW50Zigib3duICVzXG4iLCBzaGExX3RvX2hleCh0aGVfaW5kZXguc2hhMSkpOworCXNpID0gdGhlX2luZGV4LnNwbGl0X2luZGV4OworCWlmICghc2kpIHsKKwkJcHJpbnRmKCJub3QgYSBzcGxpdCBpbmRleFxuIik7CisJCXJldHVybiAwOworCX0KKwlwcmludGYoImJhc2UgJXNcbiIsIHNoYTFfdG9faGV4KHNpLT5iYXNlX3NoYTEpKTsKKwlmb3IgKGkgPSAwOyBpIDwgdGhlX2luZGV4LmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IHRoZV9pbmRleC5jYWNoZVtpXTsKKwkJcHJpbnRmKCIlMDZvICVzICVkXHQlc1xuIiwgY2UtPmNlX21vZGUsCisJCSAgICAgICBzaGExX3RvX2hleChjZS0+c2hhMSksIGNlX3N0YWdlKGNlKSwgY2UtPm5hbWUpOworCX0KKwlwcmludGYoInJlcGxhY2VtZW50czoiKTsKKwlpZiAoc2ktPnJlcGxhY2VfYml0bWFwKQorCQlld2FoX2VhY2hfYml0KHNpLT5yZXBsYWNlX2JpdG1hcCwgc2hvd19iaXQsIE5VTEwpOworCXByaW50ZigiXG5kZWxldGlvbnM6Iik7CisJaWYgKHNpLT5kZWxldGVfYml0bWFwKQorCQlld2FoX2VhY2hfYml0KHNpLT5kZWxldGVfYml0bWFwLCBzaG93X2JpdCwgTlVMTCk7CisJcHJpbnRmKCJcbiIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZS5jIGIvdGVzdC1kdW1wLXVudHJhY2tlZC1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZDg1NWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LWR1bXAtdW50cmFja2VkLWNhY2hlLmMKQEAgLTAsMCArMSw2MiBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisKK3N0YXRpYyBpbnQgY29tcGFyZV91bnRyYWNrZWQoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IGNoYXIgKmNvbnN0ICphID0gYV87CisJY29uc3QgY2hhciAqY29uc3QgKmIgPSBiXzsKKwlyZXR1cm4gc3RyY21wKCphLCAqYik7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9kaXIoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpjb25zdCAqYSA9IGFfOworCWNvbnN0IHN0cnVjdCB1bnRyYWNrZWRfY2FjaGVfZGlyICpjb25zdCAqYiA9IGJfOworCXJldHVybiBzdHJjbXAoKCphKS0+bmFtZSwgKCpiKS0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXAoc3RydWN0IHVudHJhY2tlZF9jYWNoZV9kaXIgKnVjZCwgc3RydWN0IHN0cmJ1ZiAqYmFzZSkKK3sKKwlpbnQgaSwgbGVuOworCXFzb3J0KHVjZC0+dW50cmFja2VkLCB1Y2QtPnVudHJhY2tlZF9uciwgc2l6ZW9mKCp1Y2QtPnVudHJhY2tlZCksCisJICAgICAgY29tcGFyZV91bnRyYWNrZWQpOworCXFzb3J0KHVjZC0+ZGlycywgdWNkLT5kaXJzX25yLCBzaXplb2YoKnVjZC0+ZGlycyksCisJICAgICAgY29tcGFyZV9kaXIpOworCWxlbiA9IGJhc2UtPmxlbjsKKwlzdHJidWZfYWRkZihiYXNlLCAiJXMvIiwgdWNkLT5uYW1lKTsKKwlwcmludGYoIiVzICVzIiwgYmFzZS0+YnVmLAorCSAgICAgICBzaGExX3RvX2hleCh1Y2QtPmV4Y2x1ZGVfc2hhMSkpOworCWlmICh1Y2QtPnJlY3Vyc2UpCisJCWZwdXRzKCIgcmVjdXJzZSIsIHN0ZG91dCk7CisJaWYgKHVjZC0+Y2hlY2tfb25seSkKKwkJZnB1dHMoIiBjaGVja19vbmx5Iiwgc3Rkb3V0KTsKKwlpZiAodWNkLT52YWxpZCkKKwkJZnB1dHMoIiB2YWxpZCIsIHN0ZG91dCk7CisJcHJpbnRmKCJcbiIpOworCWZvciAoaSA9IDA7IGkgPCB1Y2QtPnVudHJhY2tlZF9ucjsgaSsrKQorCQlwcmludGYoIiVzXG4iLCB1Y2QtPnVudHJhY2tlZFtpXSk7CisJZm9yIChpID0gMDsgaSA8IHVjZC0+ZGlyc19ucjsgaSsrKQorCQlkdW1wKHVjZC0+ZGlyc1tpXSwgYmFzZSk7CisJc3RyYnVmX3NldGxlbihiYXNlLCBsZW4pOworfQorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwlzdHJ1Y3QgdW50cmFja2VkX2NhY2hlICp1YzsKKwlzdHJ1Y3Qgc3RyYnVmIGJhc2UgPSBTVFJCVUZfSU5JVDsKKwlzZXR1cF9naXRfZGlyZWN0b3J5KCk7CisJaWYgKHJlYWRfY2FjaGUoKSA8IDApCisJCWRpZSgidW5hYmxlIHRvIHJlYWQgaW5kZXggZmlsZSIpOworCXVjID0gdGhlX2luZGV4LnVudHJhY2tlZDsKKwlpZiAoIXVjKSB7CisJCXByaW50Zigibm8gdW50cmFja2VkIGNhY2hlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXByaW50ZigiaW5mby9leGNsdWRlICVzXG4iLCBzaGExX3RvX2hleCh1Yy0+c3NfaW5mb19leGNsdWRlLnNoYTEpKTsKKwlwcmludGYoImNvcmUuZXhjbHVkZXNmaWxlICVzXG4iLCBzaGExX3RvX2hleCh1Yy0+c3NfZXhjbHVkZXNfZmlsZS5zaGExKSk7CisJcHJpbnRmKCJleGNsdWRlX3Blcl9kaXIgJXNcbiIsIHVjLT5leGNsdWRlX3Blcl9kaXIpOworCXByaW50ZigiZmxhZ3MgJTA4eFxuIiwgdWMtPmRpcl9mbGFncyk7CisJaWYgKHVjLT5yb290KQorCQlkdW1wKHVjLT5yb290LCAmYmFzZSk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0LWdlbnJhbmRvbS5jIGIvdGVzdC1nZW5yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDgyNGQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1nZW5yYW5kb20uYwpAQCAtMCwwICsxLDMzIEBACisvKgorICogU2ltcGxlIHJhbmRvbSBkYXRhIGdlbmVyYXRvciB1c2VkIHRvIGNyZWF0ZSByZXByb2R1Y2libGUgdGVzdCBmaWxlcy4KKyAqIFRoaXMgaXMgaW5zcGlyZWQgZnJvbSBQT1NJWC4xLTIwMDEgaW1wbGVtZW50YXRpb24gZXhhbXBsZSBmb3IgcmFuZCgpLgorICogQ29weXJpZ2h0IChDKSAyMDA3IGJ5IE5pY29sYXMgUGl0cmUsIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBsb25nIGNvdW50LCBuZXh0ID0gMDsKKwl1bnNpZ25lZCBjaGFyICpjOworCisJaWYgKGFyZ2MgPCAyIHx8IGFyZ2MgPiAzKSB7CisJCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIDxzZWVkX3N0cmluZz4gWzxzaXplPl1cbiIsIGFyZ3ZbMF0pOworCQlyZXR1cm4gMTsKKwl9CisKKwljID0gKHVuc2lnbmVkIGNoYXIgKikgYXJndlsxXTsKKwlkbyB7CisJCW5leHQgPSBuZXh0ICogMTEgKyAqYzsKKwl9IHdoaWxlICgqYysrKTsKKworCWNvdW50ID0gKGFyZ2MgPT0gMykgPyBzdHJ0b3VsKGFyZ3ZbMl0sIE5VTEwsIDApIDogLTFMOworCisJd2hpbGUgKGNvdW50LS0pIHsKKwkJbmV4dCA9IG5leHQgKiAxMTAzNTE1MjQ1ICsgMTIzNDU7CisJCWlmIChwdXRjaGFyKChuZXh0ID4+IDE2KSAmIDB4ZmYpID09IEVPRikKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtaGFzaG1hcC5jIGIvdGVzdC1oYXNobWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MyODkxZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtaGFzaG1hcC5jCkBAIC0wLDAgKzEsMjY0IEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiaGFzaG1hcC5oIgorCitzdHJ1Y3QgdGVzdF9lbnRyeQoreworCXN0cnVjdCBoYXNobWFwX2VudHJ5IGVudDsKKwkvKiBrZXkgYW5kIHZhbHVlIGFzIHR3byBcMC10ZXJtaW5hdGVkIHN0cmluZ3MgKi8KKwljaGFyIGtleVtGTEVYX0FSUkFZXTsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfdmFsdWUoY29uc3Qgc3RydWN0IHRlc3RfZW50cnkgKmUpCit7CisJcmV0dXJuIGUtPmtleSArIHN0cmxlbihlLT5rZXkpICsgMTsKK30KKworc3RhdGljIGludCB0ZXN0X2VudHJ5X2NtcChjb25zdCBzdHJ1Y3QgdGVzdF9lbnRyeSAqZTEsCisJCWNvbnN0IHN0cnVjdCB0ZXN0X2VudHJ5ICplMiwgY29uc3QgY2hhcioga2V5KQoreworCXJldHVybiBzdHJjbXAoZTEtPmtleSwga2V5ID8ga2V5IDogZTItPmtleSk7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9lbnRyeV9jbXBfaWNhc2UoY29uc3Qgc3RydWN0IHRlc3RfZW50cnkgKmUxLAorCQljb25zdCBzdHJ1Y3QgdGVzdF9lbnRyeSAqZTIsIGNvbnN0IGNoYXIqIGtleSkKK3sKKwlyZXR1cm4gc3RyY2FzZWNtcChlMS0+a2V5LCBrZXkgPyBrZXkgOiBlMi0+a2V5KTsKK30KKworc3RhdGljIHN0cnVjdCB0ZXN0X2VudHJ5ICphbGxvY190ZXN0X2VudHJ5KGludCBoYXNoLCBjaGFyICprZXksIGludCBrbGVuLAorCQljaGFyICp2YWx1ZSwgaW50IHZsZW4pCit7CisJc3RydWN0IHRlc3RfZW50cnkgKmVudHJ5ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGVzdF9lbnRyeSkgKyBrbGVuCisJCQkrIHZsZW4gKyAyKTsKKwloYXNobWFwX2VudHJ5X2luaXQoZW50cnksIGhhc2gpOworCW1lbWNweShlbnRyeS0+a2V5LCBrZXksIGtsZW4gKyAxKTsKKwltZW1jcHkoZW50cnktPmtleSArIGtsZW4gKyAxLCB2YWx1ZSwgdmxlbiArIDEpOworCXJldHVybiBlbnRyeTsKK30KKworI2RlZmluZSBIQVNIX01FVEhPRF9GTlYgMAorI2RlZmluZSBIQVNIX01FVEhPRF9JIDEKKyNkZWZpbmUgSEFTSF9NRVRIT0RfSURJVjEwIDIKKyNkZWZpbmUgSEFTSF9NRVRIT0RfMCAzCisjZGVmaW5lIEhBU0hfTUVUSE9EX1gyIDQKKyNkZWZpbmUgVEVTVF9TUEFSU0UgOAorI2RlZmluZSBURVNUX0FERCAxNgorI2RlZmluZSBURVNUX1NJWkUgMTAwMDAwCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGFzaCh1bnNpZ25lZCBpbnQgbWV0aG9kLCB1bnNpZ25lZCBpbnQgaSwgY29uc3QgY2hhciAqa2V5KQoreworCXVuc2lnbmVkIGludCBoYXNoID0gMDsKKwlzd2l0Y2ggKG1ldGhvZCAmIDMpCisJeworCWNhc2UgSEFTSF9NRVRIT0RfRk5WOgorCQloYXNoID0gc3RyaGFzaChrZXkpOworCQlicmVhazsKKwljYXNlIEhBU0hfTUVUSE9EX0k6CisJCWhhc2ggPSBpOworCQlicmVhazsKKwljYXNlIEhBU0hfTUVUSE9EX0lESVYxMDoKKwkJaGFzaCA9IGkgLyAxMDsKKwkJYnJlYWs7CisJY2FzZSBIQVNIX01FVEhPRF8wOgorCQloYXNoID0gMDsKKwkJYnJlYWs7CisJfQorCisJaWYgKG1ldGhvZCAmIEhBU0hfTUVUSE9EX1gyKQorCQloYXNoID0gMiAqIGhhc2g7CisJcmV0dXJuIGhhc2g7Cit9CisKKy8qCisgKiBUZXN0IHBlcmZvcm1hbmNlIG9mIGhhc2htYXAuW2NoXQorICogVXNhZ2U6IHRpbWUgZWNobyAicGVyZmhhc2htYXAgbWV0aG9kIHJvdW5kcyIgfCB0ZXN0LWhhc2htYXAKKyAqLworc3RhdGljIHZvaWQgcGVyZl9oYXNobWFwKHVuc2lnbmVkIGludCBtZXRob2QsIHVuc2lnbmVkIGludCByb3VuZHMpCit7CisJc3RydWN0IGhhc2htYXAgbWFwOworCWNoYXIgYnVmWzE2XTsKKwlzdHJ1Y3QgdGVzdF9lbnRyeSAqKmVudHJpZXM7CisJdW5zaWduZWQgaW50ICpoYXNoZXM7CisJdW5zaWduZWQgaW50IGksIGo7CisKKwllbnRyaWVzID0gbWFsbG9jKFRFU1RfU0laRSAqIHNpemVvZihzdHJ1Y3QgdGVzdF9lbnRyeSAqKSk7CisJaGFzaGVzID0gbWFsbG9jKFRFU1RfU0laRSAqIHNpemVvZihpbnQpKTsKKwlmb3IgKGkgPSAwOyBpIDwgVEVTVF9TSVpFOyBpKyspIHsKKwkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVpIiwgaSk7CisJCWVudHJpZXNbaV0gPSBhbGxvY190ZXN0X2VudHJ5KDAsIGJ1Ziwgc3RybGVuKGJ1ZiksICIiLCAwKTsKKwkJaGFzaGVzW2ldID0gaGFzaChtZXRob2QsIGksIGVudHJpZXNbaV0tPmtleSk7CisJfQorCisJaWYgKG1ldGhvZCAmIFRFU1RfQUREKSB7CisJCS8qIHRlc3QgYWRkaW5nIHRvIHRoZSBtYXAgKi8KKwkJZm9yIChqID0gMDsgaiA8IHJvdW5kczsgaisrKSB7CisJCQloYXNobWFwX2luaXQoJm1hcCwgKGhhc2htYXBfY21wX2ZuKSB0ZXN0X2VudHJ5X2NtcCwgMCk7CisKKwkJCS8qIGFkZCBlbnRyaWVzICovCisJCQlmb3IgKGkgPSAwOyBpIDwgVEVTVF9TSVpFOyBpKyspIHsKKwkJCQloYXNobWFwX2VudHJ5X2luaXQoZW50cmllc1tpXSwgaGFzaGVzW2ldKTsKKwkJCQloYXNobWFwX2FkZCgmbWFwLCBlbnRyaWVzW2ldKTsKKwkJCX0KKworCQkJaGFzaG1hcF9mcmVlKCZtYXAsIDApOworCQl9CisJfSBlbHNlIHsKKwkJLyogdGVzdCBtYXAgbG9va3VwcyAqLworCQloYXNobWFwX2luaXQoJm1hcCwgKGhhc2htYXBfY21wX2ZuKSB0ZXN0X2VudHJ5X2NtcCwgMCk7CisKKwkJLyogZmlsbCB0aGUgbWFwIChzcGFyc2VseSBpZiBzcGVjaWZpZWQpICovCisJCWogPSAobWV0aG9kICYgVEVTVF9TUEFSU0UpID8gVEVTVF9TSVpFIC8gMTAgOiBURVNUX1NJWkU7CisJCWZvciAoaSA9IDA7IGkgPCBqOyBpKyspIHsKKwkJCWhhc2htYXBfZW50cnlfaW5pdChlbnRyaWVzW2ldLCBoYXNoZXNbaV0pOworCQkJaGFzaG1hcF9hZGQoJm1hcCwgZW50cmllc1tpXSk7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgcm91bmRzOyBqKyspIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBURVNUX1NJWkU7IGkrKykgeworCQkJCWhhc2htYXBfZ2V0X2Zyb21faGFzaCgmbWFwLCBoYXNoZXNbaV0sCisJCQkJCQkgICAgICBlbnRyaWVzW2ldLT5rZXkpOworCQkJfQorCQl9CisKKwkJaGFzaG1hcF9mcmVlKCZtYXAsIDApOworCX0KK30KKworI2RlZmluZSBERUxJTSAiIFx0XHJcbiIKKworLyoKKyAqIFJlYWQgc3RkaW4gbGluZSBieSBsaW5lIGFuZCBwcmludCByZXN1bHQgb2YgY29tbWFuZHMgdG8gc3Rkb3V0OgorICoKKyAqIGhhc2gga2V5IC0+IHN0cmhhc2goa2V5KSBtZW1oYXNoKGtleSkgc3RyaWhhc2goa2V5KSBtZW1paGFzaChrZXkpCisgKiBwdXQga2V5IHZhbHVlIC0+IE5VTEwgLyBvbGQgdmFsdWUKKyAqIGdldCBrZXkgLT4gTlVMTCAvIHZhbHVlCisgKiByZW1vdmUga2V5IC0+IE5VTEwgLyBvbGQgdmFsdWUKKyAqIGl0ZXJhdGUgLT4ga2V5MSB2YWx1ZTFcbmtleTIgdmFsdWUyXG4uLi4KKyAqIHNpemUgLT4gdGFibGVzaXplIG51bWVudHJpZXMKKyAqCisgKiBwZXJmaGFzaG1hcCBtZXRob2Qgcm91bmRzIC0+IHRlc3QgaGFzaG1hcC5bY2hdIHBlcmZvcm1hbmNlCisgKi8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY2hhciBsaW5lWzEwMjRdOworCXN0cnVjdCBoYXNobWFwIG1hcDsKKwlpbnQgaWNhc2U7CisKKwkvKiBpbml0IGhhc2ggbWFwICovCisJaWNhc2UgPSBhcmdjID4gMSAmJiAhc3RyY21wKCJpZ25vcmVjYXNlIiwgYXJndlsxXSk7CisJaGFzaG1hcF9pbml0KCZtYXAsIChoYXNobWFwX2NtcF9mbikgKGljYXNlID8gdGVzdF9lbnRyeV9jbXBfaWNhc2UKKwkJCTogdGVzdF9lbnRyeV9jbXApLCAwKTsKKworCS8qIHByb2Nlc3MgY29tbWFuZHMgZnJvbSBzdGRpbiAqLworCXdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKSkgeworCQljaGFyICpjbWQsICpwMSA9IE5VTEwsICpwMiA9IE5VTEw7CisJCWludCBsMSA9IDAsIGwyID0gMCwgaGFzaCA9IDA7CisJCXN0cnVjdCB0ZXN0X2VudHJ5ICplbnRyeTsKKworCQkvKiBicmVhayBsaW5lIGludG8gY29tbWFuZCBhbmQgdXAgdG8gdHdvIHBhcmFtZXRlcnMgKi8KKwkJY21kID0gc3RydG9rKGxpbmUsIERFTElNKTsKKwkJLyogaWdub3JlIGVtcHR5IGxpbmVzICovCisJCWlmICghY21kIHx8ICpjbWQgPT0gJyMnKQorCQkJY29udGludWU7CisKKwkJcDEgPSBzdHJ0b2soTlVMTCwgREVMSU0pOworCQlpZiAocDEpIHsKKwkJCWwxID0gc3RybGVuKHAxKTsKKwkJCWhhc2ggPSBpY2FzZSA/IHN0cmloYXNoKHAxKSA6IHN0cmhhc2gocDEpOworCQkJcDIgPSBzdHJ0b2soTlVMTCwgREVMSU0pOworCQkJaWYgKHAyKQorCQkJCWwyID0gc3RybGVuKHAyKTsKKwkJfQorCisJCWlmICghc3RyY21wKCJoYXNoIiwgY21kKSAmJiBsMSkgeworCisJCQkvKiBwcmludCByZXN1bHRzIG9mIGRpZmZlcmVudCBoYXNoIGZ1bmN0aW9ucyAqLworCQkJcHJpbnRmKCIldSAldSAldSAldVxuIiwgc3RyaGFzaChwMSksIG1lbWhhc2gocDEsIGwxKSwKKwkJCQkJc3RyaWhhc2gocDEpLCBtZW1paGFzaChwMSwgbDEpKTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoImFkZCIsIGNtZCkgJiYgbDEgJiYgbDIpIHsKKworCQkJLyogY3JlYXRlIGVudHJ5IHdpdGgga2V5ID0gcDEsIHZhbHVlID0gcDIgKi8KKwkJCWVudHJ5ID0gYWxsb2NfdGVzdF9lbnRyeShoYXNoLCBwMSwgbDEsIHAyLCBsMik7CisKKwkJCS8qIGFkZCB0byBoYXNobWFwICovCisJCQloYXNobWFwX2FkZCgmbWFwLCBlbnRyeSk7CisKKwkJfSBlbHNlIGlmICghc3RyY21wKCJwdXQiLCBjbWQpICYmIGwxICYmIGwyKSB7CisKKwkJCS8qIGNyZWF0ZSBlbnRyeSB3aXRoIGtleSA9IHAxLCB2YWx1ZSA9IHAyICovCisJCQllbnRyeSA9IGFsbG9jX3Rlc3RfZW50cnkoaGFzaCwgcDEsIGwxLCBwMiwgbDIpOworCisJCQkvKiBhZGQgLyByZXBsYWNlIGVudHJ5ICovCisJCQllbnRyeSA9IGhhc2htYXBfcHV0KCZtYXAsIGVudHJ5KTsKKworCQkJLyogcHJpbnQgYW5kIGZyZWUgcmVwbGFjZWQgZW50cnksIGlmIGFueSAqLworCQkJcHV0cyhlbnRyeSA/IGdldF92YWx1ZShlbnRyeSkgOiAiTlVMTCIpOworCQkJZnJlZShlbnRyeSk7CisKKwkJfSBlbHNlIGlmICghc3RyY21wKCJnZXQiLCBjbWQpICYmIGwxKSB7CisKKwkJCS8qIGxvb2t1cCBlbnRyeSBpbiBoYXNobWFwICovCisJCQllbnRyeSA9IGhhc2htYXBfZ2V0X2Zyb21faGFzaCgmbWFwLCBoYXNoLCBwMSk7CisKKwkJCS8qIHByaW50IHJlc3VsdCAqLworCQkJaWYgKCFlbnRyeSkKKwkJCQlwdXRzKCJOVUxMIik7CisJCQl3aGlsZSAoZW50cnkpIHsKKwkJCQlwdXRzKGdldF92YWx1ZShlbnRyeSkpOworCQkJCWVudHJ5ID0gaGFzaG1hcF9nZXRfbmV4dCgmbWFwLCBlbnRyeSk7CisJCQl9CisKKwkJfSBlbHNlIGlmICghc3RyY21wKCJyZW1vdmUiLCBjbWQpICYmIGwxKSB7CisKKwkJCS8qIHNldHVwIHN0YXRpYyBrZXkgKi8KKwkJCXN0cnVjdCBoYXNobWFwX2VudHJ5IGtleTsKKwkJCWhhc2htYXBfZW50cnlfaW5pdCgma2V5LCBoYXNoKTsKKworCQkJLyogcmVtb3ZlIGVudHJ5IGZyb20gaGFzaG1hcCAqLworCQkJZW50cnkgPSBoYXNobWFwX3JlbW92ZSgmbWFwLCAma2V5LCBwMSk7CisKKwkJCS8qIHByaW50IHJlc3VsdCBhbmQgZnJlZSBlbnRyeSovCisJCQlwdXRzKGVudHJ5ID8gZ2V0X3ZhbHVlKGVudHJ5KSA6ICJOVUxMIik7CisJCQlmcmVlKGVudHJ5KTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoIml0ZXJhdGUiLCBjbWQpKSB7CisKKwkJCXN0cnVjdCBoYXNobWFwX2l0ZXIgaXRlcjsKKwkJCWhhc2htYXBfaXRlcl9pbml0KCZtYXAsICZpdGVyKTsKKwkJCXdoaWxlICgoZW50cnkgPSBoYXNobWFwX2l0ZXJfbmV4dCgmaXRlcikpKQorCQkJCXByaW50ZigiJXMgJXNcbiIsIGVudHJ5LT5rZXksIGdldF92YWx1ZShlbnRyeSkpOworCisJCX0gZWxzZSBpZiAoIXN0cmNtcCgic2l6ZSIsIGNtZCkpIHsKKworCQkJLyogcHJpbnQgdGFibGUgc2l6ZXMgKi8KKwkJCXByaW50ZigiJXUgJXVcbiIsIG1hcC50YWJsZXNpemUsIG1hcC5zaXplKTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoImludGVybiIsIGNtZCkgJiYgbDEpIHsKKworCQkJLyogdGVzdCB0aGF0IHN0cmludGVybiB3b3JrcyAqLworCQkJY29uc3QgY2hhciAqaTEgPSBzdHJpbnRlcm4ocDEpOworCQkJY29uc3QgY2hhciAqaTIgPSBzdHJpbnRlcm4ocDEpOworCQkJaWYgKHN0cmNtcChpMSwgcDEpKQorCQkJCXByaW50Zigic3RyaW50ZXJuKCVzKSByZXR1cm5zICVzXG4iLCBwMSwgaTEpOworCQkJZWxzZSBpZiAoaTEgPT0gcDEpCisJCQkJcHJpbnRmKCJzdHJpbnRlcm4oJXMpIHJldHVybnMgaW5wdXQgcG9pbnRlclxuIiwgcDEpOworCQkJZWxzZSBpZiAoaTEgIT0gaTIpCisJCQkJcHJpbnRmKCJzdHJpbnRlcm4oJXMpICE9IHN0cmludGVybiglcykiLCBpMSwgaTIpOworCQkJZWxzZQorCQkJCXByaW50ZigiJXNcbiIsIGkxKTsKKworCQl9IGVsc2UgaWYgKCFzdHJjbXAoInBlcmZoYXNobWFwIiwgY21kKSAmJiBsMSAmJiBsMikgeworCisJCQlwZXJmX2hhc2htYXAoYXRvaShwMSksIGF0b2kocDIpKTsKKworCQl9IGVsc2UgeworCisJCQlwcmludGYoIlVua25vd24gY29tbWFuZCAlc1xuIiwgY21kKTsKKworCQl9CisJfQorCisJaGFzaG1hcF9mcmVlKCZtYXAsIDEpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1pbmRleC12ZXJzaW9uLmMgYi90ZXN0LWluZGV4LXZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWQ0Njk5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1pbmRleC12ZXJzaW9uLmMKQEAgLTAsMCArMSwxNCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgY2FjaGVfaGVhZGVyIGhkcjsKKwlpbnQgdmVyc2lvbjsKKworCW1lbXNldCgmaGRyLDAsc2l6ZW9mKGhkcikpOworCWlmIChyZWFkKDAsICZoZHIsIHNpemVvZihoZHIpKSAhPSBzaXplb2YoaGRyKSkKKwkJcmV0dXJuIDA7CisJdmVyc2lvbiA9IG50b2hsKGhkci5oZHJfdmVyc2lvbik7CisJcHJpbnRmKCIlZFxuIiwgdmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0LWxpbmUtYnVmZmVyLmMgYi90ZXN0LWxpbmUtYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1OGYwNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtbGluZS1idWZmZXIuYwpAQCAtMCwwICsxLDkxIEBACisvKgorICogdGVzdC1saW5lLWJ1ZmZlci5jOiBjb2RlIHRvIGV4ZXJjaXNlIHRoZSBzdm4gaW1wb3J0ZXIncyBpbnB1dCBoZWxwZXIKKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAidmNzLXN2bi9saW5lX2J1ZmZlci5oIgorCitzdGF0aWMgdWludDMyX3Qgc3RydG91aW50MzIoY29uc3QgY2hhciAqcykKK3sKKwljaGFyICplbmQ7CisJdWludG1heF90IG4gPSBzdHJ0b3VtYXgocywgJmVuZCwgMTApOworCWlmICgqcyA9PSAnXDAnIHx8ICplbmQgIT0gJ1wwJykKKwkJZGllKCJpbnZhbGlkIGNvdW50OiAlcyIsIHMpOworCXJldHVybiAodWludDMyX3QpIG47Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV9jb21tYW5kKGNvbnN0IGNoYXIgKmNvbW1hbmQsIGNvbnN0IGNoYXIgKmFyZywgc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJc3dpdGNoICgqY29tbWFuZCkgeworCWNhc2UgJ2InOgorCQlpZiAoc3RhcnRzX3dpdGgoY29tbWFuZCwgImJpbmFyeSAiKSkgeworCQkJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCQkJc3RyYnVmX2FkZGNoKCZzYiwgJz4nKTsKKwkJCWJ1ZmZlcl9yZWFkX2JpbmFyeShidWYsICZzYiwgc3RydG91aW50MzIoYXJnKSk7CisJCQlmd3JpdGUoc2IuYnVmLCAxLCBzYi5sZW4sIHN0ZG91dCk7CisJCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQkJcmV0dXJuOworCQl9CisJY2FzZSAnYyc6CisJCWlmIChzdGFydHNfd2l0aChjb21tYW5kLCAiY29weSAiKSkgeworCQkJYnVmZmVyX2NvcHlfYnl0ZXMoYnVmLCBzdHJ0b3VpbnQzMihhcmcpKTsKKwkJCXJldHVybjsKKwkJfQorCWNhc2UgJ3MnOgorCQlpZiAoc3RhcnRzX3dpdGgoY29tbWFuZCwgInNraXAgIikpIHsKKwkJCWJ1ZmZlcl9za2lwX2J5dGVzKGJ1Ziwgc3RydG91aW50MzIoYXJnKSk7CisJCQlyZXR1cm47CisJCX0KKwlkZWZhdWx0OgorCQlkaWUoInVucmVjb2duaXplZCBjb21tYW5kOiAlcyIsIGNvbW1hbmQpOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2xpbmUoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IGxpbmVfYnVmZmVyICpzdGRpbl9idWYpCit7CisJY29uc3QgY2hhciAqYXJnID0gc3RyY2hyKGxpbmUsICcgJyk7CisJaWYgKCFhcmcpCisJCWRpZSgibm8gYXJndW1lbnQgaW4gbGluZTogJXMiLCBsaW5lKTsKKwloYW5kbGVfY29tbWFuZChsaW5lLCBhcmcgKyAxLCBzdGRpbl9idWYpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBsaW5lX2J1ZmZlciBzdGRpbl9idWYgPSBMSU5FX0JVRkZFUl9JTklUOworCXN0cnVjdCBsaW5lX2J1ZmZlciBmaWxlX2J1ZiA9IExJTkVfQlVGRkVSX0lOSVQ7CisJc3RydWN0IGxpbmVfYnVmZmVyICppbnB1dCA9ICZzdGRpbl9idWY7CisJY29uc3QgY2hhciAqZmlsZW5hbWU7CisJY2hhciAqczsKKworCWlmIChhcmdjID09IDEpCisJCWZpbGVuYW1lID0gTlVMTDsKKwllbHNlIGlmIChhcmdjID09IDIpCisJCWZpbGVuYW1lID0gYXJndlsxXTsKKwllbHNlCisJCXVzYWdlKCJ0ZXN0LWxpbmUtYnVmZmVyIFtmaWxlIHwgJmZkXSA8IHNjcmlwdCIpOworCisJaWYgKGJ1ZmZlcl9pbml0KCZzdGRpbl9idWYsIE5VTEwpKQorCQlkaWVfZXJybm8oIm9wZW4gZXJyb3IiKTsKKwlpZiAoZmlsZW5hbWUpIHsKKwkJaWYgKCpmaWxlbmFtZSA9PSAnJicpIHsKKwkJCWlmIChidWZmZXJfZmRpbml0KCZmaWxlX2J1Ziwgc3RydG91aW50MzIoZmlsZW5hbWUgKyAxKSkpCisJCQkJZGllX2Vycm5vKCJlcnJvciBvcGVuaW5nIGZkICVzIiwgZmlsZW5hbWUgKyAxKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChidWZmZXJfaW5pdCgmZmlsZV9idWYsIGZpbGVuYW1lKSkKKwkJCQlkaWVfZXJybm8oImVycm9yIG9wZW5pbmcgJXMiLCBmaWxlbmFtZSk7CisJCX0KKwkJaW5wdXQgPSAmZmlsZV9idWY7CisJfQorCisJd2hpbGUgKChzID0gYnVmZmVyX3JlYWRfbGluZSgmc3RkaW5fYnVmKSkpCisJCWhhbmRsZV9saW5lKHMsIGlucHV0KTsKKworCWlmIChmaWxlbmFtZSAmJiBidWZmZXJfZGVpbml0KCZmaWxlX2J1ZikpCisJCWRpZSgiZXJyb3IgcmVhZGluZyBmcm9tICVzIiwgZmlsZW5hbWUpOworCWlmIChidWZmZXJfZGVpbml0KCZzdGRpbl9idWYpKQorCQlkaWUoImlucHV0IGVycm9yIik7CisJaWYgKGZlcnJvcihzdGRvdXQpKQorCQlkaWUoIm91dHB1dCBlcnJvciIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1tYXRjaC10cmVlcy5jIGIvdGVzdC1tYXRjaC10cmVlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZjcyNWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LW1hdGNoLXRyZWVzLmMKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwl1bnNpZ25lZCBjaGFyIGhhc2gxWzIwXSwgaGFzaDJbMjBdLCBzaGlmdGVkWzIwXTsKKwlzdHJ1Y3QgdHJlZSAqb25lLCAqdHdvOworCisJaWYgKGdldF9zaGExKGF2WzFdLCBoYXNoMSkpCisJCWRpZSgiY2Fubm90IHBhcnNlICVzIGFzIGFuIG9iamVjdCBuYW1lIiwgYXZbMV0pOworCWlmIChnZXRfc2hhMShhdlsyXSwgaGFzaDIpKQorCQlkaWUoImNhbm5vdCBwYXJzZSAlcyBhcyBhbiBvYmplY3QgbmFtZSIsIGF2WzJdKTsKKwlvbmUgPSBwYXJzZV90cmVlX2luZGlyZWN0KGhhc2gxKTsKKwlpZiAoIW9uZSkKKwkJZGllKCJub3QgYSB0cmVlLWlzaCAlcyIsIGF2WzFdKTsKKwl0d28gPSBwYXJzZV90cmVlX2luZGlyZWN0KGhhc2gyKTsKKwlpZiAoIXR3bykKKwkJZGllKCJub3QgYSB0cmVlLWlzaCAlcyIsIGF2WzJdKTsKKworCXNoaWZ0X3RyZWUob25lLT5vYmplY3Quc2hhMSwgdHdvLT5vYmplY3Quc2hhMSwgc2hpZnRlZCwgLTEpOworCXByaW50Zigic2hpZnRlZDogJXNcbiIsIHNoYTFfdG9faGV4KHNoaWZ0ZWQpKTsKKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0LW1lcmdlc29ydC5jIGIvdGVzdC1tZXJnZXNvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTNiOTU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1tZXJnZXNvcnQuYwpAQCAtMCwwICsxLDUyIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJtZXJnZXNvcnQuaCIKKworc3RydWN0IGxpbmUgeworCWNoYXIgKnRleHQ7CisJc3RydWN0IGxpbmUgKm5leHQ7Cit9OworCitzdGF0aWMgdm9pZCAqZ2V0X25leHQoY29uc3Qgdm9pZCAqYSkKK3sKKwlyZXR1cm4gKChjb25zdCBzdHJ1Y3QgbGluZSAqKWEpLT5uZXh0OworfQorCitzdGF0aWMgdm9pZCBzZXRfbmV4dCh2b2lkICphLCB2b2lkICpiKQoreworCSgoc3RydWN0IGxpbmUgKilhKS0+bmV4dCA9IGI7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9zdHJpbmdzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJY29uc3Qgc3RydWN0IGxpbmUgKnggPSBhLCAqeSA9IGI7CisJcmV0dXJuIHN0cmNtcCh4LT50ZXh0LCB5LT50ZXh0KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBsaW5lICpsaW5lLCAqcCA9IE5VTEwsICpsaW5lcyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCisJZm9yICg7OykgeworCQlpZiAoc3RyYnVmX2dldHdob2xlbGluZSgmc2IsIHN0ZGluLCAnXG4nKSkKKwkJCWJyZWFrOworCQlsaW5lID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGxpbmUpKTsKKwkJbGluZS0+dGV4dCA9IHN0cmJ1Zl9kZXRhY2goJnNiLCBOVUxMKTsKKwkJaWYgKHApIHsKKwkJCWxpbmUtPm5leHQgPSBwLT5uZXh0OworCQkJcC0+bmV4dCA9IGxpbmU7CisJCX0gZWxzZSB7CisJCQlsaW5lLT5uZXh0ID0gTlVMTDsKKwkJCWxpbmVzID0gbGluZTsKKwkJfQorCQlwID0gbGluZTsKKwl9CisKKwlsaW5lcyA9IGxsaXN0X21lcmdlc29ydChsaW5lcywgZ2V0X25leHQsIHNldF9uZXh0LCBjb21wYXJlX3N0cmluZ3MpOworCisJd2hpbGUgKGxpbmVzKSB7CisJCXByaW50ZigiJXMiLCBsaW5lcy0+dGV4dCk7CisJCWxpbmVzID0gbGluZXMtPm5leHQ7CisJfQorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1ta3RlbXAuYyBiL3Rlc3QtbWt0ZW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjNTQyMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtbWt0ZW1wLmMKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIHRlc3QtbWt0ZW1wLmM6IGNvZGUgdG8gZXhlcmNpc2UgdGhlIGNyZWF0aW9uIG9mIHRlbXBvcmFyeSBmaWxlcworICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaWYgKGFyZ2MgIT0gMikKKwkJdXNhZ2UoIkV4cGVjdGVkIDEgcGFyYW1ldGVyIGRlZmluaW5nIHRoZSB0ZW1wb3JhcnkgZmlsZSB0ZW1wbGF0ZSIpOworCisJeG1rc3RlbXAoeHN0cmR1cChhcmd2WzFdKSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtcGFyc2Utb3B0aW9ucy5jIGIvdGVzdC1wYXJzZS1vcHRpb25zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4YzhmMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtcGFyc2Utb3B0aW9ucy5jCkBAIC0wLDAgKzEsMTA0IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJwYXJzZS1vcHRpb25zLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RhdGljIGludCBib29sZWFuID0gMDsKK3N0YXRpYyBpbnQgaW50ZWdlciA9IDA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWduaXR1ZGUgPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOworc3RhdGljIGludCBhYmJyZXYgPSA3Oworc3RhdGljIGludCB2ZXJib3NlID0gMCwgZHJ5X3J1biA9IDAsIHF1aWV0ID0gMDsKK3N0YXRpYyBjaGFyICpzdHJpbmcgPSBOVUxMOworc3RhdGljIGNoYXIgKmZpbGUgPSBOVUxMOworc3RhdGljIGludCBhbWJpZ3VvdXM7CitzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGxpc3Q7CisKK3N0YXRpYyBpbnQgbGVuZ3RoX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJcHJpbnRmKCJDYWxsYmFjazogXCIlc1wiLCAlZFxuIiwKKwkJKGFyZyA/IGFyZyA6ICJub3Qgc2V0IiksIHVuc2V0KTsKKwlpZiAodW5zZXQpCisJCXJldHVybiAxOyAvKiBkbyBub3Qgc3VwcG9ydCB1bnNldCAqLworCisJKihpbnQgKilvcHQtPnZhbHVlID0gc3RybGVuKGFyZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnVtYmVyX2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqYXJnLCBpbnQgdW5zZXQpCit7CisJKihpbnQgKilvcHQtPnZhbHVlID0gc3RydG9sKGFyZywgTlVMTCwgMTApOworCXJldHVybiAwOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY29uc3QgY2hhciAqcHJlZml4ID0gInByZWZpeC8iOworCWNvbnN0IGNoYXIgKnVzYWdlW10gPSB7CisJCSJ0ZXN0LXBhcnNlLW9wdGlvbnMgPG9wdGlvbnM+IiwKKwkJTlVMTAorCX07CisJc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCU9QVF9CT09MKDAsICJ5ZXMiLCAmYm9vbGVhbiwgImdldCBhIGJvb2xlYW4iKSwKKwkJT1BUX0JPT0woJ0QnLCAibm8tZG91YnQiLCAmYm9vbGVhbiwgImJlZ2lucyB3aXRoICduby0nIiksCisJCXsgT1BUSU9OX1NFVF9JTlQsICdCJywgIm5vLWZlYXIiLCAmYm9vbGVhbiwgTlVMTCwKKwkJICAiYmUgYnJhdmUiLCBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcsIE5VTEwsIDEgfSwKKwkJT1BUX0NPVU5UVVAoJ2InLCAiYm9vbGVhbiIsICZib29sZWFuLCAiaW5jcmVtZW50IGJ5IG9uZSIpLAorCQlPUFRfQklUKCc0JywgIm9yNCIsICZib29sZWFuLAorCQkJImJpdHdpc2Utb3IgYm9vbGVhbiB3aXRoIC4uLjAxMDAiLCA0KSwKKwkJT1BUX05FR0JJVCgwLCAibmVnLW9yNCIsICZib29sZWFuLCAic2FtZSBhcyAtLW5vLW9yNCIsIDQpLAorCQlPUFRfR1JPVVAoIiIpLAorCQlPUFRfSU5URUdFUignaScsICJpbnRlZ2VyIiwgJmludGVnZXIsICJnZXQgYSBpbnRlZ2VyIiksCisJCU9QVF9JTlRFR0VSKCdqJywgTlVMTCwgJmludGVnZXIsICJnZXQgYSBpbnRlZ2VyLCB0b28iKSwKKwkJT1BUX01BR05JVFVERSgnbScsICJtYWduaXR1ZGUiLCAmbWFnbml0dWRlLCAiZ2V0IGEgbWFnbml0dWRlIiksCisJCU9QVF9TRVRfSU5UKDAsICJzZXQyMyIsICZpbnRlZ2VyLCAic2V0IGludGVnZXIgdG8gMjMiLCAyMyksCisJCU9QVF9EQVRFKCd0JywgTlVMTCwgJnRpbWVzdGFtcCwgImdldCB0aW1lc3RhbXAgb2YgPHRpbWU+IiksCisJCU9QVF9DQUxMQkFDSygnTCcsICJsZW5ndGgiLCAmaW50ZWdlciwgInN0ciIsCisJCQkiZ2V0IGxlbmd0aCBvZiA8c3RyPiIsIGxlbmd0aF9jYWxsYmFjayksCisJCU9QVF9GSUxFTkFNRSgnRicsICJmaWxlIiwgJmZpbGUsICJzZXQgZmlsZSB0byA8ZmlsZT4iKSwKKwkJT1BUX0dST1VQKCJTdHJpbmcgb3B0aW9ucyIpLAorCQlPUFRfU1RSSU5HKCdzJywgInN0cmluZyIsICZzdHJpbmcsICJzdHJpbmciLCAiZ2V0IGEgc3RyaW5nIiksCisJCU9QVF9TVFJJTkcoMCwgInN0cmluZzIiLCAmc3RyaW5nLCAic3RyIiwgImdldCBhbm90aGVyIHN0cmluZyIpLAorCQlPUFRfU1RSSU5HKDAsICJzdCIsICZzdHJpbmcsICJzdCIsICJnZXQgYW5vdGhlciBzdHJpbmcgKHBlcnZlcnQgb3JkZXJpbmcpIiksCisJCU9QVF9TVFJJTkcoJ28nLCBOVUxMLCAmc3RyaW5nLCAic3RyIiwgImdldCBhbm90aGVyIHN0cmluZyIpLAorCQlPUFRfTk9PUF9OT0FSRygwLCAib2Jzb2xldGUiKSwKKwkJT1BUX1NUUklOR19MSVNUKDAsICJsaXN0IiwgJmxpc3QsICJzdHIiLCAiYWRkIHN0ciB0byBsaXN0IiksCisJCU9QVF9HUk9VUCgiTWFnaWMgYXJndW1lbnRzIiksCisJCU9QVF9BUkdVTUVOVCgicXV1eCIsICJtZWFucyAtLXF1dXgiKSwKKwkJT1BUX05VTUJFUl9DQUxMQkFDSygmaW50ZWdlciwgInNldCBpbnRlZ2VyIHRvIE5VTSIsCisJCQludW1iZXJfY2FsbGJhY2spLAorCQl7IE9QVElPTl9DT1VOVFVQLCAnKycsIE5VTEwsICZib29sZWFuLCBOVUxMLCAic2FtZSBhcyAtYiIsCisJCSAgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIHwgUEFSU0VfT1BUX05PREFTSCB9LAorCQl7IE9QVElPTl9DT1VOVFVQLCAwLCAiYW1iaWd1b3VzIiwgJmFtYmlndW91cywgTlVMTCwKKwkJICAicG9zaXRpdmUgYW1iaWd1aXR5IiwgUEFSU0VfT1BUX05PQVJHIHwgUEFSU0VfT1BUX05PTkVHIH0sCisJCXsgT1BUSU9OX0NPVU5UVVAsIDAsICJuby1hbWJpZ3VvdXMiLCAmYW1iaWd1b3VzLCBOVUxMLAorCQkgICJuZWdhdGl2ZSBhbWJpZ3VpdHkiLCBQQVJTRV9PUFRfTk9BUkcgfCBQQVJTRV9PUFRfTk9ORUcgfSwKKwkJT1BUX0dST1VQKCJTdGFuZGFyZCBvcHRpb25zIiksCisJCU9QVF9fQUJCUkVWKCZhYmJyZXYpLAorCQlPUFRfX1ZFUkJPU0UoJnZlcmJvc2UsICJiZSB2ZXJib3NlIiksCisJCU9QVF9fRFJZX1JVTigmZHJ5X3J1biwgImRyeSBydW4iKSwKKwkJT1BUX19RVUlFVCgmcXVpZXQsICJiZSBxdWlldCIpLAorCQlPUFRfRU5EKCksCisJfTsKKwlpbnQgaTsKKworCWFyZ2MgPSBwYXJzZV9vcHRpb25zKGFyZ2MsIChjb25zdCBjaGFyICoqKWFyZ3YsIHByZWZpeCwgb3B0aW9ucywgdXNhZ2UsIDApOworCisJcHJpbnRmKCJib29sZWFuOiAlZFxuIiwgYm9vbGVhbik7CisJcHJpbnRmKCJpbnRlZ2VyOiAlZFxuIiwgaW50ZWdlcik7CisJcHJpbnRmKCJtYWduaXR1ZGU6ICVsdVxuIiwgbWFnbml0dWRlKTsKKwlwcmludGYoInRpbWVzdGFtcDogJWx1XG4iLCB0aW1lc3RhbXApOworCXByaW50Zigic3RyaW5nOiAlc1xuIiwgc3RyaW5nID8gc3RyaW5nIDogIihub3Qgc2V0KSIpOworCXByaW50ZigiYWJicmV2OiAlZFxuIiwgYWJicmV2KTsKKwlwcmludGYoInZlcmJvc2U6ICVkXG4iLCB2ZXJib3NlKTsKKwlwcmludGYoInF1aWV0OiAlc1xuIiwgcXVpZXQgPyAieWVzIiA6ICJubyIpOworCXByaW50ZigiZHJ5IHJ1bjogJXNcbiIsIGRyeV9ydW4gPyAieWVzIiA6ICJubyIpOworCXByaW50ZigiZmlsZTogJXNcbiIsIGZpbGUgPyBmaWxlIDogIihub3Qgc2V0KSIpOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykKKwkJcHJpbnRmKCJsaXN0OiAlc1xuIiwgbGlzdC5pdGVtc1tpXS5zdHJpbmcpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKKwkJcHJpbnRmKCJhcmcgJTAyZDogJXNcbiIsIGksIGFyZ3ZbaV0pOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXBhdGgtdXRpbHMuYyBiL3Rlc3QtcGF0aC11dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2N2JmNjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LXBhdGgtdXRpbHMuYwpAQCAtMCwwICsxLDEzOSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyoKKyAqIEEgInN0cmluZ19saXN0X2VhY2hfZnVuY190IiBmdW5jdGlvbiB0aGF0IG5vcm1hbGl6ZXMgYW4gZW50cnkgZnJvbQorICogR0lUX0NFSUxJTkdfRElSRUNUT1JJRVMuICBJZiB0aGUgcGF0aCBpcyB1bnVzYWJsZSBmb3Igc29tZSByZWFzb24sCisgKiBkaWUgd2l0aCBhbiBleHBsYW5hdGlvbi4KKyAqLworc3RhdGljIGludCBub3JtYWxpemVfY2VpbGluZ19lbnRyeShzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqdW51c2VkKQoreworCWNvbnN0IGNoYXIgKmNlaWwgPSBpdGVtLT5zdHJpbmc7CisJaW50IGxlbiA9IHN0cmxlbihjZWlsKTsKKwljaGFyIGJ1ZltQQVRIX01BWCsxXTsKKworCWlmIChsZW4gPT0gMCkKKwkJZGllKCJFbXB0eSBwYXRoIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKwlpZiAobGVuID4gUEFUSF9NQVgpCisJCWRpZSgiUGF0aCBcIiVzXCIgaXMgdG9vIGxvbmciLCBjZWlsKTsKKwlpZiAoIWlzX2Fic29sdXRlX3BhdGgoY2VpbCkpCisJCWRpZSgiUGF0aCBcIiVzXCIgaXMgbm90IGFic29sdXRlIiwgY2VpbCk7CisJaWYgKG5vcm1hbGl6ZV9wYXRoX2NvcHkoYnVmLCBjZWlsKSA8IDApCisJCWRpZSgiUGF0aCBcIiVzXCIgY291bGQgbm90IGJlIG5vcm1hbGl6ZWQiLCBjZWlsKTsKKwlsZW4gPSBzdHJsZW4oYnVmKTsKKwlmcmVlKGl0ZW0tPnN0cmluZyk7CisJaXRlbS0+c3RyaW5nID0geHN0cmR1cChidWYpOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBub3JtYWxpemVfYXJndl9zdHJpbmcoY29uc3QgY2hhciAqKnZhciwgY29uc3QgY2hhciAqaW5wdXQpCit7CisJaWYgKCFzdHJjbXAoaW5wdXQsICI8bnVsbD4iKSkKKwkJKnZhciA9IE5VTEw7CisJZWxzZSBpZiAoIXN0cmNtcChpbnB1dCwgIjxlbXB0eT4iKSkKKwkJKnZhciA9ICIiOworCWVsc2UKKwkJKnZhciA9IGlucHV0OworCisJaWYgKCp2YXIgJiYgKCoqdmFyID09ICc8JyB8fCAqKnZhciA9PSAnKCcpKQorCQlkaWUoIkJhZCB2YWx1ZTogJXNcbiIsIGlucHV0KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAibm9ybWFsaXplX3BhdGhfY29weSIpKSB7CisJCWNoYXIgKmJ1ZiA9IHhtYWxsb2MoUEFUSF9NQVggKyAxKTsKKwkJaW50IHJ2ID0gbm9ybWFsaXplX3BhdGhfY29weShidWYsIGFyZ3ZbMl0pOworCQlpZiAocnYpCisJCQlidWYgPSAiKytmYWlsZWQrKyI7CisJCXB1dHMoYnVmKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPj0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICJyZWFsX3BhdGgiKSkgeworCQl3aGlsZSAoYXJnYyA+IDIpIHsKKwkJCXB1dHMocmVhbF9wYXRoKGFyZ3ZbMl0pKTsKKwkJCWFyZ2MtLTsKKwkJCWFyZ3YrKzsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA+PSAyICYmICFzdHJjbXAoYXJndlsxXSwgImFic29sdXRlX3BhdGgiKSkgeworCQl3aGlsZSAoYXJnYyA+IDIpIHsKKwkJCXB1dHMoYWJzb2x1dGVfcGF0aChhcmd2WzJdKSk7CisJCQlhcmdjLS07CisJCQlhcmd2Kys7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPT0gNCAmJiAhc3RyY21wKGFyZ3ZbMV0sICJsb25nZXN0X2FuY2VzdG9yX2xlbmd0aCIpKSB7CisJCWludCBsZW47CisJCXN0cnVjdCBzdHJpbmdfbGlzdCBjZWlsaW5nX2RpcnMgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwkJY2hhciAqcGF0aCA9IHhzdHJkdXAoYXJndlsyXSk7CisKKwkJLyoKKwkJICogV2UgaGF2ZSB0byBub3JtYWxpemUgdGhlIGFyZ3VtZW50cyBiZWNhdXNlIHVuZGVyCisJCSAqIFdpbmRvd3MsIGJhc2ggbWFuZ2xlcyBhcmd1bWVudHMgdGhhdCBsb29rIGxpa2UKKwkJICogYWJzb2x1dGUgUE9TSVggcGF0aHMgb3IgY29sb24tc2VwYXJhdGUgbGlzdHMgb2YKKwkJICogYWJzb2x1dGUgUE9TSVggcGF0aHMgaW50byBET1MgcGF0aHMgKGUuZy4sCisJCSAqICIvZm9vOi9mb28vYmFyIiBtaWdodCBiZSBjb252ZXJ0ZWQgdG8KKwkJICogIkQ6XFNyY1xtc3lzZ2l0XGZvbztEOlxTcmNcbXN5c2dpdFxmb29cYmFyIiksCisJCSAqIHdoZXJlYXMgbG9uZ2VzdF9hbmNlc3Rvcl9sZW5ndGgoKSByZXF1aXJlcyBwYXRocworCQkgKiB0aGF0IHVzZSBmb3J3YXJkIHNsYXNoZXMuCisJCSAqLworCQlpZiAobm9ybWFsaXplX3BhdGhfY29weShwYXRoLCBwYXRoKSkKKwkJCWRpZSgiUGF0aCBcIiVzXCIgY291bGQgbm90IGJlIG5vcm1hbGl6ZWQiLCBhcmd2WzJdKTsKKwkJc3RyaW5nX2xpc3Rfc3BsaXQoJmNlaWxpbmdfZGlycywgYXJndlszXSwgUEFUSF9TRVAsIC0xKTsKKwkJZmlsdGVyX3N0cmluZ19saXN0KCZjZWlsaW5nX2RpcnMsIDAsCisJCQkJICAgbm9ybWFsaXplX2NlaWxpbmdfZW50cnksIE5VTEwpOworCQlsZW4gPSBsb25nZXN0X2FuY2VzdG9yX2xlbmd0aChwYXRoLCAmY2VpbGluZ19kaXJzKTsKKwkJc3RyaW5nX2xpc3RfY2xlYXIoJmNlaWxpbmdfZGlycywgMCk7CisJCWZyZWUocGF0aCk7CisJCXByaW50ZigiJWRcbiIsIGxlbik7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID49IDQgJiYgIXN0cmNtcChhcmd2WzFdLCAicHJlZml4X3BhdGgiKSkgeworCQljaGFyICpwcmVmaXggPSBhcmd2WzJdOworCQlpbnQgcHJlZml4X2xlbiA9IHN0cmxlbihwcmVmaXgpOworCQlpbnQgbm9uZ2l0X29rOworCQlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9uZ2l0X29rKTsKKwkJd2hpbGUgKGFyZ2MgPiAzKSB7CisJCQlwdXRzKHByZWZpeF9wYXRoKHByZWZpeCwgcHJlZml4X2xlbiwgYXJndlszXSkpOworCQkJYXJnYy0tOworCQkJYXJndisrOworCQl9CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDQgJiYgIXN0cmNtcChhcmd2WzFdLCAic3RyaXBfcGF0aF9zdWZmaXgiKSkgeworCQljaGFyICpwcmVmaXggPSBzdHJpcF9wYXRoX3N1ZmZpeChhcmd2WzJdLCBhcmd2WzNdKTsKKwkJcHJpbnRmKCIlc1xuIiwgcHJlZml4ID8gcHJlZml4IDogIihudWxsKSIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA9PSAzICYmICFzdHJjbXAoYXJndlsxXSwgInByaW50X3BhdGgiKSkgeworCQlwdXRzKGFyZ3ZbMl0pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnYyA9PSA0ICYmICFzdHJjbXAoYXJndlsxXSwgInJlbGF0aXZlX3BhdGgiKSkgeworCQlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJCWNvbnN0IGNoYXIgKmluLCAqcHJlZml4LCAqcmVsOworCQlub3JtYWxpemVfYXJndl9zdHJpbmcoJmluLCBhcmd2WzJdKTsKKwkJbm9ybWFsaXplX2FyZ3Zfc3RyaW5nKCZwcmVmaXgsIGFyZ3ZbM10pOworCQlyZWwgPSByZWxhdGl2ZV9wYXRoKGluLCBwcmVmaXgsICZzYik7CisJCWlmICghcmVsKQorCQkJcHV0cygiKG51bGwpIik7CisJCWVsc2UKKwkJCXB1dHMoc3RybGVuKHJlbCkgPiAwID8gcmVsIDogIihlbXB0eSkiKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZnByaW50ZihzdGRlcnIsICIlczogdW5rbm93biBmdW5jdGlvbiBuYW1lOiAlc1xuIiwgYXJndlswXSwKKwkJYXJndlsxXSA/IGFyZ3ZbMV0gOiAiKHRoZXJlIHdhcyBub25lKSIpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1wcmlvLXF1ZXVlLmMgYi90ZXN0LXByaW8tcXVldWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmU3MmYwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1wcmlvLXF1ZXVlLmMKQEAgLTAsMCArMSwzOSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicHJpby1xdWV1ZS5oIgorCitzdGF0aWMgaW50IGludGNtcChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIsIHZvaWQgKmRhdGEpCit7CisJY29uc3QgaW50ICphID0gdmEsICpiID0gdmI7CisJcmV0dXJuICphIC0gKmI7Cit9CisKK3N0YXRpYyB2b2lkIHNob3coaW50ICp2KQoreworCWlmICghdikKKwkJcHJpbnRmKCJOVUxMXG4iKTsKKwllbHNlCisJCXByaW50ZigiJWRcbiIsICp2KTsKKwlmcmVlKHYpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0IHByaW9fcXVldWUgcHEgPSB7IGludGNtcCB9OworCisJd2hpbGUgKCorK2FyZ3YpIHsKKwkJaWYgKCFzdHJjbXAoKmFyZ3YsICJnZXQiKSkKKwkJCXNob3cocHJpb19xdWV1ZV9nZXQoJnBxKSk7CisJCWVsc2UgaWYgKCFzdHJjbXAoKmFyZ3YsICJkdW1wIikpIHsKKwkJCWludCAqdjsKKwkJCXdoaWxlICgodiA9IHByaW9fcXVldWVfZ2V0KCZwcSkpKQorCQkJICAgICAgIHNob3codik7CisJCX0KKwkJZWxzZSB7CisJCQlpbnQgKnYgPSBtYWxsb2Moc2l6ZW9mKCp2KSk7CisJCQkqdiA9IGF0b2koKmFyZ3YpOworCQkJcHJpb19xdWV1ZV9wdXQoJnBxLCB2KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1yZWFkLWNhY2hlLmMgYi90ZXN0LXJlYWQtY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjViY2YxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1yZWFkLWNhY2hlLmMKQEAgLTAsMCArMSwxMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGksIGNudCA9IDE7CisJaWYgKGFyZ2MgPT0gMikKKwkJY250ID0gc3RydG9sKGFyZ3ZbMV0sIE5VTEwsIDApOworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQlyZWFkX2NhY2hlKCk7CisJCWRpc2NhcmRfY2FjaGUoKTsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXJlZ2V4LmMgYi90ZXN0LXJlZ2V4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjNTk4ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtcmVnZXguYwpAQCAtMCwwICsxLDIwIEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyICpwYXQgPSAiW149e30gXHRdKyI7CisJY2hhciAqc3RyID0gIj17fVxuZnJlZCI7CisJcmVnZXhfdCByOworCXJlZ21hdGNoX3QgbVsxXTsKKworCWlmIChyZWdjb21wKCZyLCBwYXQsIFJFR19FWFRFTkRFRCB8IFJFR19ORVdMSU5FKSkKKwkJZGllKCJmYWlsZWQgcmVnY29tcCgpIGZvciBwYXR0ZXJuICclcyciLCBwYXQpOworCWlmIChyZWdleGVjKCZyLCBzdHIsIDEsIG0sIDApKQorCQlkaWUoIm5vIG1hdGNoIG9mIHBhdHRlcm4gJyVzJyB0byBzdHJpbmcgJyVzJyIsIHBhdCwgc3RyKTsKKworCS8qIGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9idWd6aWxsYS9zaG93X2J1Zy5jZ2k/aWQ9Mzk1NyAgKi8KKwlpZiAobVswXS5ybV9zbyA9PSAzKSAvKiBtYXRjaGVzICdcbicgd2hlbiBpdCBzaG91bGQgbm90ICovCisJCWRpZSgicmVnZXggYnVnIGNvbmZpcm1lZDogcmUtYnVpbGQgZ2l0IHdpdGggTk9fUkVHRVg9MSIpOworCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtcmV2aXNpb24td2Fsa2luZy5jIGIvdGVzdC1yZXZpc2lvbi13YWxraW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1ZjA2YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QtcmV2aXNpb24td2Fsa2luZy5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiB0ZXN0LXJldmlzaW9uLXdhbGtpbmcuYzogdGVzdCByZXZpc2lvbiB3YWxraW5nIEFQSS4KKyAqCisgKiAoQykgMjAxMiBIZWlrbyBWb2lndCA8aHZvaWd0QGh2b2lndC5uZXQ+CisgKgorICogVGhpcyBjb2RlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKworc3RhdGljIHZvaWQgcHJpbnRfY29tbWl0KHN0cnVjdCBjb21taXQgKmNvbW1pdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHByZXR0eV9wcmludF9jb250ZXh0IGN0eCA9IHswfTsKKwljdHguZGF0ZV9tb2RlLnR5cGUgPSBEQVRFX05PUk1BTDsKKwlmb3JtYXRfY29tbWl0X21lc3NhZ2UoY29tbWl0LCAiICVtICVzIiwgJnNiLCAmY3R4KTsKKwlwcmludGYoIiVzXG4iLCBzYi5idWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3JldmlzaW9uX3dhbGsodm9pZCkKK3sKKwlzdHJ1Y3QgcmV2X2luZm8gcmV2OworCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7TlVMTCwgIi0tYWxsIiwgTlVMTH07CisJaW50IGFyZ2MgPSBBUlJBWV9TSVpFKGFyZ3YpIC0gMTsKKwlpbnQgZ290X3JldmlzaW9uID0gMDsKKworCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOworCXNldHVwX3JldmlzaW9ucyhhcmdjLCBhcmd2LCAmcmV2LCBOVUxMKTsKKwlpZiAocHJlcGFyZV9yZXZpc2lvbl93YWxrKCZyZXYpKQorCQlkaWUoInJldmlzaW9uIHdhbGsgc2V0dXAgZmFpbGVkIik7CisKKwl3aGlsZSAoKGNvbW1pdCA9IGdldF9yZXZpc2lvbigmcmV2KSkgIT0gTlVMTCkgeworCQlwcmludF9jb21taXQoY29tbWl0KTsKKwkJZ290X3JldmlzaW9uID0gMTsKKwl9CisKKwlyZXNldF9yZXZpc2lvbl93YWxrKCk7CisJcmV0dXJuIGdvdF9yZXZpc2lvbjsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjIDwgMikKKwkJcmV0dXJuIDE7CisKKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAicnVuLXR3aWNlIikpIHsKKwkJcHJpbnRmKCIxc3RcbiIpOworCQlpZiAoIXJ1bl9yZXZpc2lvbl93YWxrKCkpCisJCQlyZXR1cm4gMTsKKwkJcHJpbnRmKCIybmRcbiIpOworCQlpZiAoIXJ1bl9yZXZpc2lvbl93YWxrKCkpCisJCQlyZXR1cm4gMTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgImNoZWNrIHVzYWdlXG4iKTsKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3Rlc3QtcnVuLWNvbW1hbmQuYyBiL3Rlc3QtcnVuLWNvbW1hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWM3ZGUyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1ydW4tY29tbWFuZC5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiB0ZXN0LXJ1bi1jb21tYW5kLmM6IHRlc3QgcnVuIGNvbW1hbmQgQVBJLgorICoKKyAqIChDKSAyMDA5IElsYXJpIExpdXN2YWFyYSA8aWxhcmkubGl1c3ZhYXJhQGVsaXNhbmV0LmZpPgorICoKKyAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwlpZiAoYXJnYyA8IDMpCisJCXJldHVybiAxOworCXByb2MuYXJndiA9IChjb25zdCBjaGFyICoqKWFyZ3YrMjsKKworCWlmICghc3RyY21wKGFyZ3ZbMV0sICJzdGFydC1jb21tYW5kLUVOT0VOVCIpKSB7CisJCWlmIChzdGFydF9jb21tYW5kKCZwcm9jKSA8IDAgJiYgZXJybm8gPT0gRU5PRU5UKQorCQkJcmV0dXJuIDA7CisJCWZwcmludGYoc3RkZXJyLCAiRkFJTCAlc1xuIiwgYXJndlsxXSk7CisJCXJldHVybiAxOworCX0KKwlpZiAoIXN0cmNtcChhcmd2WzFdLCAicnVuLWNvbW1hbmQiKSkKKwkJZXhpdChydW5fY29tbWFuZCgmcHJvYykpOworCisJZnByaW50ZihzdGRlcnIsICJjaGVjayB1c2FnZVxuIik7CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXNjcmFwLWNhY2hlLXRyZWUuYyBiL3Rlc3Qtc2NyYXAtY2FjaGUtdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZmVlMzEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LXNjcmFwLWNhY2hlLXRyZWUuYwpAQCAtMCwwICsxLDE3IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJsb2NrZmlsZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbG9ja19maWxlIGluZGV4X2xvY2s7CisKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQoreworCWhvbGRfbG9ja2VkX2luZGV4KCZpbmRleF9sb2NrLCAxKTsKKwlpZiAocmVhZF9jYWNoZSgpIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBpbmRleCBmaWxlIik7CisJYWN0aXZlX2NhY2hlX3RyZWUgPSBOVUxMOworCWlmICh3cml0ZV9sb2NrZWRfaW5kZXgoJnRoZV9pbmRleCwgJmluZGV4X2xvY2ssIENPTU1JVF9MT0NLKSkKKwkJZGllKCJ1bmFibGUgdG8gd3JpdGUgaW5kZXggZmlsZSIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1zaGExLWFycmF5LmMgYi90ZXN0LXNoYTEtYXJyYXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGM0OTFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1zaGExLWFycmF5LmMKQEAgLTAsMCArMSwzNCBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic2hhMS1hcnJheS5oIgorCitzdGF0aWMgdm9pZCBwcmludF9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0sIHZvaWQgKmRhdGEpCit7CisJcHV0cyhzaGExX3RvX2hleChzaGExKSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc2hhMV9hcnJheSBhcnJheSA9IFNIQTFfQVJSQVlfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmUgPSBTVFJCVUZfSU5JVDsKKworCXdoaWxlIChzdHJidWZfZ2V0bGluZSgmbGluZSwgc3RkaW4sICdcbicpICE9IEVPRikgeworCQljb25zdCBjaGFyICphcmc7CisJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwkJaWYgKHNraXBfcHJlZml4KGxpbmUuYnVmLCAiYXBwZW5kICIsICZhcmcpKSB7CisJCQlpZiAoZ2V0X3NoYTFfaGV4KGFyZywgc2hhMSkpCisJCQkJZGllKCJub3QgYSBoZXhhZGVjaW1hbCBTSEExOiAlcyIsIGFyZyk7CisJCQlzaGExX2FycmF5X2FwcGVuZCgmYXJyYXksIHNoYTEpOworCQl9IGVsc2UgaWYgKHNraXBfcHJlZml4KGxpbmUuYnVmLCAibG9va3VwICIsICZhcmcpKSB7CisJCQlpZiAoZ2V0X3NoYTFfaGV4KGFyZywgc2hhMSkpCisJCQkJZGllKCJub3QgYSBoZXhhZGVjaW1hbCBTSEExOiAlcyIsIGFyZyk7CisJCQlwcmludGYoIiVkXG4iLCBzaGExX2FycmF5X2xvb2t1cCgmYXJyYXksIHNoYTEpKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGxpbmUuYnVmLCAiY2xlYXIiKSkKKwkJCXNoYTFfYXJyYXlfY2xlYXIoJmFycmF5KTsKKwkJZWxzZSBpZiAoIXN0cmNtcChsaW5lLmJ1ZiwgImZvcl9lYWNoX3VuaXF1ZSIpKQorCQkJc2hhMV9hcnJheV9mb3JfZWFjaF91bmlxdWUoJmFycmF5LCBwcmludF9zaGExLCBOVUxMKTsKKwkJZWxzZQorCQkJZGllKCJ1bmtub3duIGNvbW1hbmQ6ICVzIiwgbGluZS5idWYpOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3Qtc2hhMS5jIGIvdGVzdC1zaGExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU3ZWFlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qtc2hhMS5jCkBAIC0wLDAgKzEsNTYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwlnaXRfU0hBX0NUWCBjdHg7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwl1bnNpZ25lZCBidWZzeiA9IDgxOTI7CisJaW50IGJpbmFyeSA9IDA7CisJY2hhciAqYnVmZmVyOworCisJaWYgKGFjID09IDIpIHsKKwkJaWYgKCFzdHJjbXAoYXZbMV0sICItYiIpKQorCQkJYmluYXJ5ID0gMTsKKwkJZWxzZQorCQkJYnVmc3ogPSBzdHJ0b3VsKGF2WzFdLCBOVUxMLCAxMCkgKiAxMDI0ICogMTAyNDsKKwl9CisKKwlpZiAoIWJ1ZnN6KQorCQlidWZzeiA9IDgxOTI7CisKKwl3aGlsZSAoKGJ1ZmZlciA9IG1hbGxvYyhidWZzeikpID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJidWZzeiAldSBpcyB0b28gYmlnLCBoYWx2aW5nLi4uXG4iLCBidWZzeik7CisJCWJ1ZnN6IC89IDI7CisJCWlmIChidWZzeiA8IDEwMjQpCisJCQlkaWUoIk9PUFMiKTsKKwl9CisKKwlnaXRfU0hBMV9Jbml0KCZjdHgpOworCisJd2hpbGUgKDEpIHsKKwkJc3NpemVfdCBzeiwgdGhpc19zejsKKwkJY2hhciAqY3AgPSBidWZmZXI7CisJCXVuc2lnbmVkIHJvb20gPSBidWZzejsKKwkJdGhpc19zeiA9IDA7CisJCXdoaWxlIChyb29tKSB7CisJCQlzeiA9IHhyZWFkKDAsIGNwLCByb29tKTsKKwkJCWlmIChzeiA9PSAwKQorCQkJCWJyZWFrOworCQkJaWYgKHN6IDwgMCkKKwkJCQlkaWVfZXJybm8oInRlc3Qtc2hhMSIpOworCQkJdGhpc19zeiArPSBzejsKKwkJCWNwICs9IHN6OworCQkJcm9vbSAtPSBzejsKKwkJfQorCQlpZiAodGhpc19zeiA9PSAwKQorCQkJYnJlYWs7CisJCWdpdF9TSEExX1VwZGF0ZSgmY3R4LCBidWZmZXIsIHRoaXNfc3opOworCX0KKwlnaXRfU0hBMV9GaW5hbChzaGExLCAmY3R4KTsKKworCWlmIChiaW5hcnkpCisJCWZ3cml0ZShzaGExLCAxLCAyMCwgc3Rkb3V0KTsKKwllbHNlCisJCXB1dHMoc2hhMV90b19oZXgoc2hhMSkpOworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXNoYTEuc2ggYi90ZXN0LXNoYTEuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGYwYmM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qtc2hhMS5zaApAQCAtMCwwICsxLDgzIEBACisjIS9iaW4vc2gKKworZGQgaWY9L2Rldi96ZXJvIGJzPTEwNDg1NzYgY291bnQ9MTAwIDI+L2Rldi9udWxsIHwKKy91c3IvYmluL3RpbWUgLi90ZXN0LXNoYTEgPi9kZXYvbnVsbAorCit3aGlsZSByZWFkIGV4cGVjdCBjbnQgcGZ4CitkbworCWNhc2UgIiRleHBlY3QiIGluICcjJyopIGNvbnRpbnVlIDs7IGVzYWMKKwlhY3R1YWw9YAorCQl7CisJCQl0ZXN0IC16ICIkcGZ4IiB8fCBlY2hvICIkcGZ4IgorCQkJZGQgaWY9L2Rldi96ZXJvIGJzPTEwNDg1NzYgY291bnQ9JGNudCAyPi9kZXYvbnVsbCB8CisJCQlwZXJsIC1wZSAneS9cMDAwL2cvJworCQl9IHwgLi90ZXN0LXNoYTEgJGNudAorCWAKKwlpZiB0ZXN0ICIkZXhwZWN0IiA9ICIkYWN0dWFsIgorCXRoZW4KKwkJZWNobyAiT0s6ICRleHBlY3QgJGNudCAkcGZ4IgorCWVsc2UKKwkJZWNobyA+JjIgIk9PUFM6ICRjbnQiCisJCWVjaG8gPiYyICJleHBlY3Q6ICRleHBlY3QiCisJCWVjaG8gPiYyICJhY3R1YWw6ICRhY3R1YWwiCisJCWV4aXQgMQorCWZpCitkb25lIDw8RU9GCitkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5IDAKKzNmNzg2ODUwZTM4NzU1MGZkYWI4MzZlZDdlNmRjODgxZGUyMzAwMWIgMCBhCis1Mjc3Y2JiNDVhMTU5MDIxMzdkMzMyZDk3ZTg5Y2Y4MTM2NTQ1NDg1IDAgYWIKKzAzY2ZkNzQzNjYxZjA3OTc1ZmEyZjEyMjBjNTE5NGNiYWZmNDg0NTEgMCBhYmMKKzMzMzBiNDM3MzY0MGY5ZTQ2MDQ5OTFlNzNjN2U4NmJmZDhkYTJkYzMgMCBhYmNkCitlYzExMzEyMzg2YWQ1NjE2NzRmNzI0YjhjY2E3Y2YxNzk2ZTI2ZDFkIDAgYWJjZGUKK2JkYzM3YzA3NGVjNGVlNjA1MGQ2OGJjMTMzYzZiOTEyZjM2NDc0ZGYgMCBhYmNkZWYKKzY5YmNhOTliOTIzODU5ZjJkYzQ4NmI1NWI4N2Y0OTY4OWI3MzU4YzcgMCBhYmNkZWZnCitlNDE0YWY3MTYxYzk1NTQwODlmNDEwNmQ2ZjE3OTdlZjE0YTczNjY2IDAgYWJjZGVmZ2gKKzA3MDdmMjk3MDA0M2Y5ZjdjMjIwMjk0ODJkYjI3NzMzZGVhZWMwMjkgMCBhYmNkZWZnaGkKK2E0ZGQ4YWE3NGE1NjM2NzI4ZmU1MjQ1MTYzNmUyZTE3NzI2MDMzYWEgMQorOTk4NmI0NWUyZjRkNzA4NjM3MjUzM2JiNjk1M2E4NjUyZmEzNjQ0YSAxIGZyb3R6CisyM2Q4ZDRmNzg4ZTg1MjZiNDg3NzU0OGEzMjU3NzU0M2NiYWFmNTFmIDEwCis4Y2QyM2Y4MjJhYjQ0YzdmNDgxYjhjOTJkNTkxZjZkMWZjYWQ0MzFjIDEwIGZyb3R6CitmM2I1NjA0YTRlNjA0ODk5YzEyMzNlZGIzYmYxY2MwZWRlNGQ4YzMyIDUxMgorYjA5NWJkODM3YTM3MTU5MzA0ODEzNmU0MjllOWFjNGI0NzZlMWJiMyA1MTIgZnJvdHoKKzA4ZmE4MWQ2MTkwOTQ4ZGU1Y2NjYTM5NjYzNDBjYzQ4YzEwY2NlYWMgMTIwMCB4eXp6eQorZTMzYTI5MWY0MmMzMGExNTk3MzNkZDk4YjhiM2U0ZmYzNDE1OGNhMCA0MDkwIDRHCisjYTNiZjc4M2JjMjBjYWE5NThmNmNiMjRkZDE0MGE3YjIxOTg0ODM4ZCA5OTk5IG5pdGZvbAorRU9GCisKK2V4aXQKKworIyBnZW5lcmF0aW5nIHRlc3QgdmVjdG9ycworIyBpbnB1dHMgYXJlIG51bWJlciBvZiBtZWdhYnl0ZXMgZm9sbG93ZWQgYnkgc29tZSByYW5kb20gc3RyaW5nIHRvIHByZWZpeC4KKword2hpbGUgcmVhZCBjbnQgcGZ4CitkbworCWFjdHVhbD1gCisJCXsKKwkJCXRlc3QgLXogIiRwZngiIHx8IGVjaG8gIiRwZngiCisJCQlkZCBpZj0vZGV2L3plcm8gYnM9MTA0ODU3NiBjb3VudD0kY250IDI+L2Rldi9udWxsIHwKKwkJCXBlcmwgLXBlICd5L1wwMDAvZy8nCisJCX0gfCBzaGExc3VtIHwKKwkJc2VkIC1lICdzLyAuKi8vJworCWAKKwllY2hvICIkYWN0dWFsICRjbnQgJHBmeCIKK2RvbmUgPDxFT0YKKzAKKzAgYQorMCBhYgorMCBhYmMKKzAgYWJjZAorMCBhYmNkZQorMCBhYmNkZWYKKzAgYWJjZGVmZworMCBhYmNkZWZnaAorMCBhYmNkZWZnaGkKKzEKKzEgZnJvdHoKKzEwCisxMCBmcm90egorNTEyCis1MTIgZnJvdHoKKzEyMDAgeHl6enkKKzQwOTAgNEcKKzk5OTkgbml0Zm9sCitFT0YKZGlmZiAtLWdpdCBhL3Rlc3Qtc2lnY2hhaW4uYyBiL3Rlc3Qtc2lnY2hhaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDk5ZmNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1zaWdjaGFpbi5jCkBAIC0wLDAgKzEsMjIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisKKyNkZWZpbmUgWChmKSBcCitzdGF0aWMgdm9pZCBmKGludCBzaWcpIHsgXAorCXB1dHMoI2YpOyBcCisJZmZsdXNoKHN0ZG91dCk7IFwKKwlzaWdjaGFpbl9wb3Aoc2lnKTsgXAorCXJhaXNlKHNpZyk7IFwKK30KK1gob25lKQorWCh0d28pCitYKHRocmVlKQorI3VuZGVmIFgKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisJc2lnY2hhaW5fcHVzaChTSUdURVJNLCBvbmUpOworCXNpZ2NoYWluX3B1c2goU0lHVEVSTSwgdHdvKTsKKwlzaWdjaGFpbl9wdXNoKFNJR1RFUk0sIHRocmVlKTsKKwlyYWlzZShTSUdURVJNKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rlc3Qtc3RyaW5nLWxpc3QuYyBiL3Rlc3Qtc3RyaW5nLWxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGJkZjlkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1zdHJpbmctbGlzdC5jCkBAIC0wLDAgKzEsMTAzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCisvKgorICogUGFyc2UgYW4gYXJndW1lbnQgaW50byBhIHN0cmluZyBsaXN0LiAgYXJnIHNob3VsZCBlaXRoZXIgYmUgYQorICogJzonLXNlcGFyYXRlZCBsaXN0IG9mIHN0cmluZ3MsIG9yICItIiB0byBpbmRpY2F0ZSBhbiBlbXB0eSBzdHJpbmcKKyAqIGxpc3QgKGFzIG9wcG9zZWQgdG8gIiIsIHdoaWNoIGluZGljYXRlcyBhIHN0cmluZyBsaXN0IGNvbnRhaW5pbmcgYQorICogc2luZ2xlIGVtcHR5IHN0cmluZykuICBsaXN0LT5zdHJkdXBfc3RyaW5ncyBtdXN0IGJlIHNldC4KKyAqLworc3RhdGljIHZvaWQgcGFyc2Vfc3RyaW5nX2xpc3Qoc3RydWN0IHN0cmluZ19saXN0ICpsaXN0LCBjb25zdCBjaGFyICphcmcpCit7CisJaWYgKCFzdHJjbXAoYXJnLCAiLSIpKQorCQlyZXR1cm47CisKKwkodm9pZClzdHJpbmdfbGlzdF9zcGxpdChsaXN0LCBhcmcsICc6JywgLTEpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9saXN0KGNvbnN0IHN0cnVjdCBzdHJpbmdfbGlzdCAqbGlzdCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+bnI7IGkrKykKKwkJcHJpbnRmKCJbJWRdOiBcIiVzXCJcbiIsIGksIGxpc3QtPml0ZW1zW2ldLnN0cmluZyk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2xpc3RfY29tcGFjdChjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmxpc3QpCit7CisJaW50IGk7CisJaWYgKCFsaXN0LT5ucikKKwkJcHJpbnRmKCItXG4iKTsKKwllbHNlIHsKKwkJcHJpbnRmKCIlcyIsIGxpc3QtPml0ZW1zWzBdLnN0cmluZyk7CisJCWZvciAoaSA9IDE7IGkgPCBsaXN0LT5ucjsgaSsrKQorCQkJcHJpbnRmKCI6JXMiLCBsaXN0LT5pdGVtc1tpXS5zdHJpbmcpOworCQlwcmludGYoIlxuIik7CisJfQorfQorCitzdGF0aWMgaW50IHByZWZpeF9jYihzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXRlbSwgdm9pZCAqY2JfZGF0YSkKK3sKKwljb25zdCBjaGFyICpwcmVmaXggPSAoY29uc3QgY2hhciAqKWNiX2RhdGE7CisJcmV0dXJuIHN0YXJ0c193aXRoKGl0ZW0tPnN0cmluZywgcHJlZml4KTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWlmIChhcmdjID09IDUgJiYgIXN0cmNtcChhcmd2WzFdLCAic3BsaXQiKSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCQlpbnQgaTsKKwkJY29uc3QgY2hhciAqcyA9IGFyZ3ZbMl07CisJCWludCBkZWxpbSA9ICphcmd2WzNdOworCQlpbnQgbWF4c3BsaXQgPSBhdG9pKGFyZ3ZbNF0pOworCisJCWkgPSBzdHJpbmdfbGlzdF9zcGxpdCgmbGlzdCwgcywgZGVsaW0sIG1heHNwbGl0KTsKKwkJcHJpbnRmKCIlZFxuIiwgaSk7CisJCXdyaXRlX2xpc3QoJmxpc3QpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDUgJiYgIXN0cmNtcChhcmd2WzFdLCAic3BsaXRfaW5fcGxhY2UiKSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfTk9EVVA7CisJCWludCBpOworCQljaGFyICpzID0geHN0cmR1cChhcmd2WzJdKTsKKwkJaW50IGRlbGltID0gKmFyZ3ZbM107CisJCWludCBtYXhzcGxpdCA9IGF0b2koYXJndls0XSk7CisKKwkJaSA9IHN0cmluZ19saXN0X3NwbGl0X2luX3BsYWNlKCZsaXN0LCBzLCBkZWxpbSwgbWF4c3BsaXQpOworCQlwcmludGYoIiVkXG4iLCBpKTsKKwkJd3JpdGVfbGlzdCgmbGlzdCk7CisJCXN0cmluZ19saXN0X2NsZWFyKCZsaXN0LCAwKTsKKwkJZnJlZShzKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPT0gNCAmJiAhc3RyY21wKGFyZ3ZbMV0sICJmaWx0ZXIiKSkgeworCQkvKgorCQkgKiBSZXRhaW4gb25seSB0aGUgaXRlbXMgdGhhdCBoYXZlIHRoZSBzcGVjaWZpZWQgcHJlZml4LgorCQkgKiBBcmd1bWVudHM6IGxpc3R8LSBwcmVmaXgKKwkJICovCisJCXN0cnVjdCBzdHJpbmdfbGlzdCBsaXN0ID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisJCWNvbnN0IGNoYXIgKnByZWZpeCA9IGFyZ3ZbM107CisKKwkJcGFyc2Vfc3RyaW5nX2xpc3QoJmxpc3QsIGFyZ3ZbMl0pOworCQlmaWx0ZXJfc3RyaW5nX2xpc3QoJmxpc3QsIDAsIHByZWZpeF9jYiwgKHZvaWQgKilwcmVmaXgpOworCQl3cml0ZV9saXN0X2NvbXBhY3QoJmxpc3QpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmdjID09IDMgJiYgIXN0cmNtcChhcmd2WzFdLCAicmVtb3ZlX2R1cGxpY2F0ZXMiKSkgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgbGlzdCA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJCXBhcnNlX3N0cmluZ19saXN0KCZsaXN0LCBhcmd2WzJdKTsKKwkJc3RyaW5nX2xpc3RfcmVtb3ZlX2R1cGxpY2F0ZXMoJmxpc3QsIDApOworCQl3cml0ZV9saXN0X2NvbXBhY3QoJmxpc3QpOworCQlzdHJpbmdfbGlzdF9jbGVhcigmbGlzdCwgMCk7CisJCXJldHVybiAwOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiJXM6IHVua25vd24gZnVuY3Rpb24gbmFtZTogJXNcbiIsIGFyZ3ZbMF0sCisJCWFyZ3ZbMV0gPyBhcmd2WzFdIDogIih0aGVyZSB3YXMgbm9uZSkiKTsKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3Rlc3Qtc3VibW9kdWxlLWNvbmZpZy5jIGIvdGVzdC1zdWJtb2R1bGUtY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFiOGMyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3Qtc3VibW9kdWxlLWNvbmZpZy5jCkBAIC0wLDAgKzEsNzYgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS1jb25maWcuaCIKKyNpbmNsdWRlICJzdWJtb2R1bGUuaCIKKworc3RhdGljIHZvaWQgZGllX3VzYWdlKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqbXNnKQoreworCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIG1zZyk7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgWzxjb21taXQ+IDxzdWJtb2R1bGVwYXRoPl0gLi4uXG4iLCBhcmd2WzBdKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgaW50IGdpdF90ZXN0X2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYikKK3sKKwlyZXR1cm4gcGFyc2Vfc3VibW9kdWxlX2NvbmZpZ19vcHRpb24odmFyLCB2YWx1ZSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyICoqYXJnID0gYXJndjsKKwlpbnQgbXlfYXJnYyA9IGFyZ2M7CisJaW50IG91dHB1dF91cmwgPSAwOworCWludCBsb29rdXBfbmFtZSA9IDA7CisKKwlhcmcrKzsKKwlteV9hcmdjLS07CisJd2hpbGUgKHN0YXJ0c193aXRoKGFyZ1swXSwgIi0tIikpIHsKKwkJaWYgKCFzdHJjbXAoYXJnWzBdLCAiLS11cmwiKSkKKwkJCW91dHB1dF91cmwgPSAxOworCQlpZiAoIXN0cmNtcChhcmdbMF0sICItLW5hbWUiKSkKKwkJCWxvb2t1cF9uYW1lID0gMTsKKwkJYXJnKys7CisJCW15X2FyZ2MtLTsKKwl9CisKKwlpZiAobXlfYXJnYyAlIDIgIT0gMCkKKwkJZGllX3VzYWdlKGFyZ2MsIGFyZ3YsICJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiIpOworCisJc2V0dXBfZ2l0X2RpcmVjdG9yeSgpOworCWdpdG1vZHVsZXNfY29uZmlnKCk7CisJZ2l0X2NvbmZpZyhnaXRfdGVzdF9jb25maWcsIE5VTEwpOworCisJd2hpbGUgKCphcmcpIHsKKwkJdW5zaWduZWQgY2hhciBjb21taXRfc2hhMVsyMF07CisJCWNvbnN0IHN0cnVjdCBzdWJtb2R1bGUgKnN1Ym1vZHVsZTsKKwkJY29uc3QgY2hhciAqY29tbWl0OworCQljb25zdCBjaGFyICpwYXRoX29yX25hbWU7CisKKwkJY29tbWl0ID0gYXJnWzBdOworCQlwYXRoX29yX25hbWUgPSBhcmdbMV07CisKKwkJaWYgKGNvbW1pdFswXSA9PSAnXDAnKQorCQkJaGFzaGNweShjb21taXRfc2hhMSwgbnVsbF9zaGExKTsKKwkJZWxzZSBpZiAoZ2V0X3NoYTEoY29tbWl0LCBjb21taXRfc2hhMSkgPCAwKQorCQkJZGllX3VzYWdlKGFyZ2MsIGFyZ3YsICJDb21taXQgbm90IGZvdW5kLiIpOworCisJCWlmIChsb29rdXBfbmFtZSkgeworCQkJc3VibW9kdWxlID0gc3VibW9kdWxlX2Zyb21fbmFtZShjb21taXRfc2hhMSwgcGF0aF9vcl9uYW1lKTsKKwkJfSBlbHNlCisJCQlzdWJtb2R1bGUgPSBzdWJtb2R1bGVfZnJvbV9wYXRoKGNvbW1pdF9zaGExLCBwYXRoX29yX25hbWUpOworCQlpZiAoIXN1Ym1vZHVsZSkKKwkJCWRpZV91c2FnZShhcmdjLCBhcmd2LCAiU3VibW9kdWxlIG5vdCBmb3VuZC4iKTsKKworCQlpZiAob3V0cHV0X3VybCkKKwkJCXByaW50ZigiU3VibW9kdWxlIHVybDogJyVzJyBmb3IgcGF0aCAnJXMnXG4iLAorCQkJCQlzdWJtb2R1bGUtPnVybCwgc3VibW9kdWxlLT5wYXRoKTsKKwkJZWxzZQorCQkJcHJpbnRmKCJTdWJtb2R1bGUgbmFtZTogJyVzJyBmb3IgcGF0aCAnJXMnXG4iLAorCQkJCQlzdWJtb2R1bGUtPm5hbWUsIHN1Ym1vZHVsZS0+cGF0aCk7CisKKwkJYXJnICs9IDI7CisJfQorCisJc3VibW9kdWxlX2ZyZWUoKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdC1zdWJwcm9jZXNzLmMgYi90ZXN0LXN1YnByb2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njg4MWEwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC1zdWJwcm9jZXNzLmMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIGNwID0gQ0hJTERfUFJPQ0VTU19JTklUOworCWludCBub2dpdCA9IDA7CisKKwlzZXR1cF9naXRfZGlyZWN0b3J5X2dlbnRseSgmbm9naXQpOworCWlmIChub2dpdCkKKwkJZGllKCJObyBnaXQgcmVwbyBmb3VuZCIpOworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLXNldHVwLXdvcmstdHJlZSIpKSB7CisJCXNldHVwX3dvcmtfdHJlZSgpOworCQlhcmd2Kys7CisJfQorCWNwLmdpdF9jbWQgPSAxOworCWNwLmFyZ3YgPSAoY29uc3QgY2hhciAqKilhcmd2ICsgMTsKKwlyZXR1cm4gcnVuX2NvbW1hbmQoJmNwKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3Qtc3ZuLWZlLmMgYi90ZXN0LXN2bi1mZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMGVjOTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LXN2bi1mZS5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiB0ZXN0LXN2bi1mZTogQ29kZSB0byBleGVyY2lzZSB0aGUgc3ZuIGltcG9ydCBsaWIKKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAidmNzLXN2bi9zdm5kdW1wLmgiCisjaW5jbHVkZSAidmNzLXN2bi9zdm5kaWZmLmgiCisjaW5jbHVkZSAidmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5oIgorI2luY2x1ZGUgInZjcy1zdm4vbGluZV9idWZmZXIuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdGVzdF9zdm5mZV91c2FnZVtdID0KKwkidGVzdC1zdm4tZmUgKDxkdW1wZmlsZT4gfCBbLWRdIDxwcmVpbWFnZT4gPGRlbHRhPiA8bGVuPikiOworCitzdGF0aWMgaW50IGFwcGx5X2RlbHRhKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IGxpbmVfYnVmZmVyIHByZWltYWdlID0gTElORV9CVUZGRVJfSU5JVDsKKwlzdHJ1Y3QgbGluZV9idWZmZXIgZGVsdGEgPSBMSU5FX0JVRkZFUl9JTklUOworCXN0cnVjdCBzbGlkaW5nX3ZpZXcgcHJlaW1hZ2VfdmlldyA9IFNMSURJTkdfVklFV19JTklUKCZwcmVpbWFnZSwgLTEpOworCisJaWYgKGFyZ2MgIT0gNSkKKwkJdXNhZ2UodGVzdF9zdm5mZV91c2FnZSk7CisKKwlpZiAoYnVmZmVyX2luaXQoJnByZWltYWdlLCBhcmd2WzJdKSkKKwkJZGllX2Vycm5vKCJjYW5ub3Qgb3BlbiBwcmVpbWFnZSIpOworCWlmIChidWZmZXJfaW5pdCgmZGVsdGEsIGFyZ3ZbM10pKQorCQlkaWVfZXJybm8oImNhbm5vdCBvcGVuIGRlbHRhIik7CisJaWYgKHN2bmRpZmYwX2FwcGx5KCZkZWx0YSwgKG9mZl90KSBzdHJ0b3VtYXgoYXJndls0XSwgTlVMTCwgMCksCisJCQkJCSZwcmVpbWFnZV92aWV3LCBzdGRvdXQpKQorCQlyZXR1cm4gMTsKKwlpZiAoYnVmZmVyX2RlaW5pdCgmcHJlaW1hZ2UpKQorCQlkaWVfZXJybm8oImNhbm5vdCBjbG9zZSBwcmVpbWFnZSIpOworCWlmIChidWZmZXJfZGVpbml0KCZkZWx0YSkpCisJCWRpZV9lcnJubygiY2Fubm90IGNsb3NlIGRlbHRhIik7CisJc3RyYnVmX3JlbGVhc2UoJnByZWltYWdlX3ZpZXcuYnVmKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpZiAoYXJnYyA9PSAyKSB7CisJCWlmIChzdm5kdW1wX2luaXQoYXJndlsxXSkpCisJCQlyZXR1cm4gMTsKKwkJc3ZuZHVtcF9yZWFkKE5VTEwsICJyZWZzL2hlYWRzL21hc3RlciIsICJyZWZzL25vdGVzL3N2bi9yZXZzIik7CisJCXN2bmR1bXBfZGVpbml0KCk7CisJCXN2bmR1bXBfcmVzZXQoKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZ2MgPj0gMiAmJiAhc3RyY21wKGFyZ3ZbMV0sICItZCIpKQorCQlyZXR1cm4gYXBwbHlfZGVsdGEoYXJnYywgYXJndik7CisJdXNhZ2UodGVzdF9zdm5mZV91c2FnZSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24uYyBiL3Rlc3QtdXJsbWF0Y2gtbm9ybWFsaXphdGlvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MGJmMjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24uYwpAQCAtMCwwICsxLDUwIEBACisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAidXJsbWF0Y2guaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWNvbnN0IGNoYXIgdXNhZ2VbXSA9ICJ0ZXN0LXVybG1hdGNoLW5vcm1hbGl6YXRpb24gWy1wIHwgLWxdIDx1cmwxPiB8IDx1cmwxPiA8dXJsMj4iOworCWNoYXIgKnVybDEsICp1cmwyOworCWludCBvcHRfcCA9IDAsIG9wdF9sID0gMDsKKworCS8qCisJICogRm9yIG9uZSB1cmwsIHN1Y2NlZWQgaWYgdXJsX25vcm1hbGl6ZSBzdWNjZWVkcyBvbiBpdCwgZmFpbCBvdGhlcndpc2UuCisJICogRm9yIHR3byB1cmxzLCBzdWNjZWVkIG9ubHkgaWYgdXJsX25vcm1hbGl6ZSBzdWNjZWVkcyBvbiBib3RoIGFuZAorCSAqIHRoZSByZXN1bHRzIGNvbXBhcmUgZXF1YWwgd2l0aCBzdHJjbXAuICBJZiAtcCBpcyBnaXZlbiAob25lIHVybCBvbmx5KQorCSAqIGFuZCB1cmxfbm9ybWFsaXplIHN1Y2NlZWRzLCBwcmludCB0aGUgcmVzdWx0IGZvbGxvd2VkIGJ5ICJcbiIuICBJZgorCSAqIC1sIGlzIGdpdmVuIChvbmUgdXJsIG9ubHkpIGFuZCB1cmxfbm9ybWFsaXplIHN1Y2NlZWRzLCBwcmludCB0aGUKKwkgKiByZXR1cm5lZCBsZW5ndGggaW4gZGVjaW1hbCBmb2xsb3dlZCBieSAiXG4iLgorCSAqLworCisJaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgIi1wIikpIHsKKwkJb3B0X3AgPSAxOworCQlhcmdjLS07CisJCWFyZ3YrKzsKKwl9IGVsc2UgaWYgKGFyZ2MgPiAxICYmICFzdHJjbXAoYXJndlsxXSwgIi1sIikpIHsKKwkJb3B0X2wgPSAxOworCQlhcmdjLS07CisJCWFyZ3YrKzsKKwl9CisKKwlpZiAoYXJnYyA8IDIgfHwgYXJnYyA+IDMpCisJCWRpZSgiJXMiLCB1c2FnZSk7CisKKwlpZiAoYXJnYyA9PSAyKSB7CisJCXN0cnVjdCB1cmxfaW5mbyBpbmZvOworCQl1cmwxID0gdXJsX25vcm1hbGl6ZShhcmd2WzFdLCAmaW5mbyk7CisJCWlmICghdXJsMSkKKwkJCXJldHVybiAxOworCQlpZiAob3B0X3ApCisJCQlwcmludGYoIiVzXG4iLCB1cmwxKTsKKwkJaWYgKG9wdF9sKQorCQkJcHJpbnRmKCIldVxuIiwgKHVuc2lnbmVkKWluZm8udXJsX2xlbik7CisJCXJldHVybiAwOworCX0KKworCWlmIChvcHRfcCB8fCBvcHRfbCkKKwkJZGllKCIlcyIsIHVzYWdlKTsKKworCXVybDEgPSB1cmxfbm9ybWFsaXplKGFyZ3ZbMV0sIE5VTEwpOworCXVybDIgPSB1cmxfbm9ybWFsaXplKGFyZ3ZbMl0sIE5VTEwpOworCXJldHVybiAodXJsMSAmJiB1cmwyICYmICFzdHJjbXAodXJsMSwgdXJsMikpID8gMCA6IDE7Cit9CmRpZmYgLS1naXQgYS90ZXN0LXdpbGRtYXRjaC5jIGIvdGVzdC13aWxkbWF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzhiMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdC13aWxkbWF0Y2guYwpAQCAtMCwwICsxLDIxIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBpOworCWZvciAoaSA9IDI7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKGFyZ3ZbaV1bMF0gPT0gJy8nKQorCQkJZGllKCJGb3J3YXJkIHNsYXNoIGlzIG5vdCBhbGxvd2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4iCisJCQkgICAgInBhdHRlcm4gYmVjYXVzZSBXaW5kb3dzIGRvZXMgbm90IGxpa2UgaXQuIFVzZSBgWFhYLycgaW5zdGVhZC4iKTsKKwkJZWxzZSBpZiAoIXN0cm5jbXAoYXJndltpXSwgIlhYWC8iLCA0KSkKKwkJCWFyZ3ZbaV0gKz0gMzsKKwl9CisJaWYgKCFzdHJjbXAoYXJndlsxXSwgIndpbGRtYXRjaCIpKQorCQlyZXR1cm4gISF3aWxkbWF0Y2goYXJndlszXSwgYXJndlsyXSwgV01fUEFUSE5BTUUsIE5VTEwpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgIml3aWxkbWF0Y2giKSkKKwkJcmV0dXJuICEhd2lsZG1hdGNoKGFyZ3ZbM10sIGFyZ3ZbMl0sIFdNX1BBVEhOQU1FIHwgV01fQ0FTRUZPTEQsIE5VTEwpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJndlsxXSwgInBhdGhtYXRjaCIpKQorCQlyZXR1cm4gISF3aWxkbWF0Y2goYXJndlszXSwgYXJndlsyXSwgMCwgTlVMTCk7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3RocmVhZC11dGlscy5jIGIvdGhyZWFkLXV0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxMzVlMAotLS0gL2Rldi9udWxsCisrKyBiL3RocmVhZC11dGlscy5jCkBAIC0wLDAgKzEsNzcgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgorCisjaWYgZGVmaW5lZChocHV4KSB8fCBkZWZpbmVkKF9faHB1eCkgfHwgZGVmaW5lZChfaHB1eCkKKyMgIGluY2x1ZGUgPHN5cy9wc3RhdC5oPgorI2VuZGlmCisKKy8qCisgKiBCeSBkb2luZyB0aGlzIGluIHR3byBzdGVwcyB3ZSBjYW4gYXQgbGVhc3QgZ2V0CisgKiB0aGUgZnVuY3Rpb24gdG8gYmUgc29tZXdoYXQgY29oZXJlbnQsIGV2ZW4KKyAqIHdpdGggdGhpcyBkaXNndXN0aW5nIG5lc3Qgb2YgI2lmZGVmcy4KKyAqLworI2lmbmRlZiBfU0NfTlBST0NFU1NPUlNfT05MTgorIyAgaWZkZWYgX1NDX05QUk9DX09OTE4KKyMgICAgZGVmaW5lIF9TQ19OUFJPQ0VTU09SU19PTkxOIF9TQ19OUFJPQ19PTkxOCisjICBlbGlmIGRlZmluZWQgX1NDX0NSQVlfTkNQVQorIyAgICBkZWZpbmUgX1NDX05QUk9DRVNTT1JTX09OTE4gX1NDX0NSQVlfTkNQVQorIyAgZW5kaWYKKyNlbmRpZgorCitpbnQgb25saW5lX2NwdXModm9pZCkKK3sKKyNpZmRlZiBfU0NfTlBST0NFU1NPUlNfT05MTgorCWxvbmcgbmNwdXM7CisjZW5kaWYKKworI2lmZGVmIEdJVF9XSU5ET1dTX05BVElWRQorCVNZU1RFTV9JTkZPIGluZm87CisJR2V0U3lzdGVtSW5mbygmaW5mbyk7CisKKwlpZiAoKGludClpbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzID4gMCkKKwkJcmV0dXJuIChpbnQpaW5mby5kd051bWJlck9mUHJvY2Vzc29yczsKKyNlbGlmIGRlZmluZWQoaHB1eCkgfHwgZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoX2hwdXgpCisJc3RydWN0IHBzdF9keW5hbWljIHBzZDsKKworCWlmICghcHN0YXRfZ2V0ZHluYW1pYygmcHNkLCBzaXplb2YocHNkKSwgKHNpemVfdCkxLCAwKSkKKwkJcmV0dXJuIChpbnQpcHNkLnBzZF9wcm9jX2NudDsKKyNlbGlmIGRlZmluZWQoSEFWRV9CU0RfU1lTQ1RMKSAmJiBkZWZpbmVkKEhXX05DUFUpCisJaW50IG1pYlsyXTsKKwlzaXplX3QgbGVuOworCWludCBjcHVjb3VudDsKKworCW1pYlswXSA9IENUTF9IVzsKKyMgIGlmZGVmIEhXX0FWQUlMQ1BVCisJbWliWzFdID0gSFdfQVZBSUxDUFU7CisJbGVuID0gc2l6ZW9mKGNwdWNvdW50KTsKKwlpZiAoIXN5c2N0bChtaWIsIDIsICZjcHVjb3VudCwgJmxlbiwgTlVMTCwgMCkpCisJCXJldHVybiBjcHVjb3VudDsKKyMgIGVuZGlmIC8qIEhXX0FWQUlMQ1BVICovCisJbWliWzFdID0gSFdfTkNQVTsKKwlsZW4gPSBzaXplb2YoY3B1Y291bnQpOworCWlmICghc3lzY3RsKG1pYiwgMiwgJmNwdWNvdW50LCAmbGVuLCBOVUxMLCAwKSkKKwkJcmV0dXJuIGNwdWNvdW50OworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9CU0RfU1lTQ1RMKSAmJiBkZWZpbmVkKEhXX05DUFUpICovCisKKyNpZmRlZiBfU0NfTlBST0NFU1NPUlNfT05MTgorCWlmICgobmNwdXMgPSAobG9uZylzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKSkgPiAwKQorCQlyZXR1cm4gKGludCluY3B1czsKKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CisKK2ludCBpbml0X3JlY3Vyc2l2ZV9tdXRleChwdGhyZWFkX211dGV4X3QgKm0pCit7CisJcHRocmVhZF9tdXRleGF0dHJfdCBhOworCWludCByZXQ7CisKKwlyZXQgPSBwdGhyZWFkX211dGV4YXR0cl9pbml0KCZhKTsKKwlpZiAoIXJldCkgeworCQlyZXQgPSBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZhLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcHRocmVhZF9tdXRleF9pbml0KG0sICZhKTsKKwkJcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmYSk7CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90aHJlYWQtdXRpbHMuaCBiL3RocmVhZC11dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YTc2OWQKLS0tIC9kZXYvbnVsbAorKysgYi90aHJlYWQtdXRpbHMuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIFRIUkVBRF9DT01QQVRfSAorI2RlZmluZSBUSFJFQURfQ09NUEFUX0gKKworI2lmbmRlZiBOT19QVEhSRUFEUworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworZXh0ZXJuIGludCBvbmxpbmVfY3B1cyh2b2lkKTsKK2V4dGVybiBpbnQgaW5pdF9yZWN1cnNpdmVfbXV0ZXgocHRocmVhZF9tdXRleF90Kik7CisKKyNlbHNlCisKKyNkZWZpbmUgb25saW5lX2NwdXMoKSAxCisKKyNlbmRpZgorI2VuZGlmIC8qIFRIUkVBRF9DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvdHJhY2UuYyBiL3RyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFlZWE2MAotLS0gL2Rldi9udWxsCisrKyBiL3RyYWNlLmMKQEAgLTAsMCArMSw0MzQgQEAKKy8qCisgKiBHSVQgLSBUaGUgaW5mb3JtYXRpb24gbWFuYWdlciBmcm9tIGhlbGwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBNaWNoYWVsIFIuIEVsa2lucyA8bWVAbXV0dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCBPc3dhbGQgQnVkZGVuaGFnZW4gPG9zc2lAdXNlcnMuc2YubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRoZW9kb3JlIFkuIFRzJ28gPHR5dHNvQG1pdC5lZHU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlrZSBNY0Nvcm1hY2sKKyAqIENvcHlyaWdodCAoQykgMjAwNiBDaHJpc3RpYW4gQ291ZGVyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAicXVvdGUuaCIKKworLyogR2V0IGEgdHJhY2UgZmlsZSBkZXNjcmlwdG9yIGZyb20gImtleSIgZW52IHZhcmlhYmxlLiAqLworc3RhdGljIGludCBnZXRfdHJhY2VfZmQoc3RydWN0IHRyYWNlX2tleSAqa2V5KQoreworCXN0YXRpYyBzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX2RlZmF1bHQgPSB7ICJHSVRfVFJBQ0UiIH07CisJY29uc3QgY2hhciAqdHJhY2U7CisKKwkvKiB1c2UgZGVmYXVsdCAiR0lUX1RSQUNFIiBpZiBOVUxMICovCisJaWYgKCFrZXkpCisJCWtleSA9ICZ0cmFjZV9kZWZhdWx0OworCisJLyogZG9uJ3Qgb3BlbiB0d2ljZSAqLworCWlmIChrZXktPmluaXRpYWxpemVkKQorCQlyZXR1cm4ga2V5LT5mZDsKKworCXRyYWNlID0gZ2V0ZW52KGtleS0+a2V5KTsKKworCWlmICghdHJhY2UgfHwgIXN0cmNtcCh0cmFjZSwgIiIpIHx8CisJICAgICFzdHJjbXAodHJhY2UsICIwIikgfHwgIXN0cmNhc2VjbXAodHJhY2UsICJmYWxzZSIpKQorCQlrZXktPmZkID0gMDsKKwllbHNlIGlmICghc3RyY21wKHRyYWNlLCAiMSIpIHx8ICFzdHJjYXNlY21wKHRyYWNlLCAidHJ1ZSIpKQorCQlrZXktPmZkID0gU1RERVJSX0ZJTEVOTzsKKwllbHNlIGlmIChzdHJsZW4odHJhY2UpID09IDEgJiYgaXNkaWdpdCgqdHJhY2UpKQorCQlrZXktPmZkID0gYXRvaSh0cmFjZSk7CisJZWxzZSBpZiAoaXNfYWJzb2x1dGVfcGF0aCh0cmFjZSkpIHsKKwkJaW50IGZkID0gb3Blbih0cmFjZSwgT19XUk9OTFkgfCBPX0FQUEVORCB8IE9fQ1JFQVQsIDA2NjYpOworCQlpZiAoZmQgPT0gLTEpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJDb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB0cmFjaW5nOiAlc1xuIgorCQkJCSJEZWZhdWx0aW5nIHRvIHRyYWNpbmcgb24gc3RkZXJyLi4uXG4iLAorCQkJCXRyYWNlLCBzdHJlcnJvcihlcnJubykpOworCQkJa2V5LT5mZCA9IFNUREVSUl9GSUxFTk87CisJCX0gZWxzZSB7CisJCQlrZXktPmZkID0gZmQ7CisJCQlrZXktPm5lZWRfY2xvc2UgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJXaGF0IGRvZXMgJyVzJyBmb3IgJXMgbWVhbj9cbiIKKwkJCSJJZiB5b3Ugd2FudCB0byB0cmFjZSBpbnRvIGEgZmlsZSwgdGhlbiBwbGVhc2Ugc2V0ICIKKwkJCSIlcyB0byBhbiBhYnNvbHV0ZSBwYXRobmFtZSAoc3RhcnRpbmcgd2l0aCAvKS5cbiIKKwkJCSJEZWZhdWx0aW5nIHRvIHRyYWNpbmcgb24gc3RkZXJyLi4uXG4iLAorCQkJdHJhY2UsIGtleS0+a2V5LCBrZXktPmtleSk7CisJCWtleS0+ZmQgPSBTVERFUlJfRklMRU5POworCX0KKworCWtleS0+aW5pdGlhbGl6ZWQgPSAxOworCXJldHVybiBrZXktPmZkOworfQorCit2b2lkIHRyYWNlX2Rpc2FibGUoc3RydWN0IHRyYWNlX2tleSAqa2V5KQoreworCWlmIChrZXktPm5lZWRfY2xvc2UpCisJCWNsb3NlKGtleS0+ZmQpOworCWtleS0+ZmQgPSAwOworCWtleS0+aW5pdGlhbGl6ZWQgPSAxOworCWtleS0+bmVlZF9jbG9zZSA9IDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGVycl9tc2dbXSA9ICJDb3VsZCBub3QgdHJhY2UgaW50byBmZCBnaXZlbiBieSAiCisJIkdJVF9UUkFDRSBlbnZpcm9ubWVudCB2YXJpYWJsZSI7CisKK3N0YXRpYyBpbnQgcHJlcGFyZV90cmFjZV9saW5lKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJICAgICAgc3RydWN0IHRyYWNlX2tleSAqa2V5LCBzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJc3RhdGljIHN0cnVjdCB0cmFjZV9rZXkgdHJhY2VfYmFyZSA9IFRSQUNFX0tFWV9JTklUKEJBUkUpOworCXN0cnVjdCB0aW1ldmFsIHR2OworCXN0cnVjdCB0bSB0bTsKKwl0aW1lX3Qgc2VjczsKKworCWlmICghdHJhY2Vfd2FudChrZXkpKQorCQlyZXR1cm4gMDsKKworCXNldF90cnlfdG9fZnJlZV9yb3V0aW5lKE5VTEwpOwkvKiBpcyBuZXZlciByZXNldCAqLworCisJLyogdW5pdCB0ZXN0cyBtYXkgd2FudCB0byBkaXNhYmxlIGFkZGl0aW9uYWwgdHJhY2Ugb3V0cHV0ICovCisJaWYgKHRyYWNlX3dhbnQoJnRyYWNlX2JhcmUpKQorCQlyZXR1cm4gMTsKKworCS8qIHByaW50IGN1cnJlbnQgdGltZXN0YW1wICovCisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisJc2VjcyA9IHR2LnR2X3NlYzsKKwlsb2NhbHRpbWVfcigmc2VjcywgJnRtKTsKKwlzdHJidWZfYWRkZihidWYsICIlMDJkOiUwMmQ6JTAyZC4lMDZsZCAiLCB0bS50bV9ob3VyLCB0bS50bV9taW4sCisJCSAgICB0bS50bV9zZWMsIChsb25nKSB0di50dl91c2VjKTsKKworI2lmZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TCisJLyogcHJpbnQgZmlsZTpsaW5lICovCisJc3RyYnVmX2FkZGYoYnVmLCAiJXM6JWQgIiwgZmlsZSwgbGluZSk7CisJLyogYWxpZ24gdHJhY2Ugb3V0cHV0IChjb2x1bW4gNDAgY2F0Y2hlcyBtb3N0IGZpbGVzIG5hbWVzIGluIGdpdCkgKi8KKwl3aGlsZSAoYnVmLT5sZW4gPCA0MCkKKwkJc3RyYnVmX2FkZGNoKGJ1ZiwgJyAnKTsKKyNlbmRpZgorCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgdHJhY2VfdmVyYmF0aW0oc3RydWN0IHRyYWNlX2tleSAqa2V5LCBjb25zdCB2b2lkICpidWYsIHVuc2lnbmVkIGxlbikKK3sKKwlpZiAoIXRyYWNlX3dhbnQoa2V5KSkKKwkJcmV0dXJuOworCXdyaXRlX29yX3doaW5lX3BpcGUoZ2V0X3RyYWNlX2ZkKGtleSksIGJ1ZiwgbGVuLCBlcnJfbXNnKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdHJhY2VfbGluZShzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIHN0cnVjdCBzdHJidWYgKmJ1ZikKK3sKKwlzdHJidWZfY29tcGxldGVfbGluZShidWYpOworCisJd3JpdGVfb3Jfd2hpbmVfcGlwZShnZXRfdHJhY2VfZmQoa2V5KSwgYnVmLT5idWYsIGJ1Zi0+bGVuLCBlcnJfbXNnKTsKKwlzdHJidWZfcmVsZWFzZShidWYpOworfQorCitzdGF0aWMgdm9pZCB0cmFjZV92cHJpbnRmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksCisJCQkgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFwcmVwYXJlX3RyYWNlX2xpbmUoZmlsZSwgbGluZSwga2V5LCAmYnVmKSkKKwkJcmV0dXJuOworCisJc3RyYnVmX3ZhZGRmKCZidWYsIGZvcm1hdCwgYXApOworCXByaW50X3RyYWNlX2xpbmUoa2V5LCAmYnVmKTsKK30KKworc3RhdGljIHZvaWQgdHJhY2VfYXJndl92cHJpbnRmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCSAgY29uc3QgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmZvcm1hdCwKKwkJCQkgIHZhX2xpc3QgYXApCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghcHJlcGFyZV90cmFjZV9saW5lKGZpbGUsIGxpbmUsIE5VTEwsICZidWYpKQorCQlyZXR1cm47CisKKwlzdHJidWZfdmFkZGYoJmJ1ZiwgZm9ybWF0LCBhcCk7CisKKwlzcV9xdW90ZV9hcmd2KCZidWYsIGFyZ3YsIDApOworCXByaW50X3RyYWNlX2xpbmUoTlVMTCwgJmJ1Zik7Cit9CisKK3ZvaWQgdHJhY2Vfc3RyYnVmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksCisJCSAgICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZGF0YSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFwcmVwYXJlX3RyYWNlX2xpbmUoZmlsZSwgbGluZSwga2V5LCAmYnVmKSkKKwkJcmV0dXJuOworCisJc3RyYnVmX2FkZGJ1ZigmYnVmLCBkYXRhKTsKKwlwcmludF90cmFjZV9saW5lKGtleSwgJmJ1Zik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhY2Vfa2V5IHRyYWNlX3BlcmZfa2V5ID0gVFJBQ0VfS0VZX0lOSVQoUEVSRk9STUFOQ0UpOworCitzdGF0aWMgdm9pZCB0cmFjZV9wZXJmb3JtYW5jZV92cHJpbnRmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorCQkJCQkgdWludDY0X3QgbmFub3MsIGNvbnN0IGNoYXIgKmZvcm1hdCwKKwkJCQkJIHZhX2xpc3QgYXApCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKworCWlmICghcHJlcGFyZV90cmFjZV9saW5lKGZpbGUsIGxpbmUsICZ0cmFjZV9wZXJmX2tleSwgJmJ1ZikpCisJCXJldHVybjsKKworCXN0cmJ1Zl9hZGRmKCZidWYsICJwZXJmb3JtYW5jZTogJS45ZiBzIiwgKGRvdWJsZSkgbmFub3MgLyAxMDAwMDAwMDAwKTsKKworCWlmIChmb3JtYXQgJiYgKmZvcm1hdCkgeworCQlzdHJidWZfYWRkc3RyKCZidWYsICI6ICIpOworCQlzdHJidWZfdmFkZGYoJmJ1ZiwgZm9ybWF0LCBhcCk7CisJfQorCisJcHJpbnRfdHJhY2VfbGluZSgmdHJhY2VfcGVyZl9rZXksICZidWYpOworfQorCisjaWZuZGVmIEhBVkVfVkFSSUFESUNfTUFDUk9TCisKK3ZvaWQgdHJhY2VfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJdHJhY2VfdnByaW50Zl9mbChOVUxMLCAwLCBOVUxMLCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHRyYWNlX3ByaW50Zl9rZXkoc3RydWN0IHRyYWNlX2tleSAqa2V5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXRyYWNlX3ZwcmludGZfZmwoTlVMTCwgMCwga2V5LCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHRyYWNlX2FyZ3ZfcHJpbnRmKGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXRyYWNlX2FyZ3ZfdnByaW50Zl9mbChOVUxMLCAwLCBhcmd2LCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHRyYWNlX3N0cmJ1ZihzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIGNvbnN0IHN0cnVjdCBzdHJidWYgKmRhdGEpCit7CisJdHJhY2Vfc3RyYnVmX2ZsKE5VTEwsIDAsIGtleSwgZGF0YSk7Cit9CisKK3ZvaWQgdHJhY2VfcGVyZm9ybWFuY2UodWludDY0X3QgbmFub3MsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJdHJhY2VfcGVyZm9ybWFuY2VfdnByaW50Zl9mbChOVUxMLCAwLCBuYW5vcywgZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKwordm9pZCB0cmFjZV9wZXJmb3JtYW5jZV9zaW5jZSh1aW50NjRfdCBzdGFydCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwl0cmFjZV9wZXJmb3JtYW5jZV92cHJpbnRmX2ZsKE5VTEwsIDAsIGdldG5hbm90aW1lKCkgLSBzdGFydCwKKwkJCQkgICAgIGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKKyNlbHNlCisKK3ZvaWQgdHJhY2VfcHJpbnRmX2tleV9mbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgc3RydWN0IHRyYWNlX2tleSAqa2V5LAorCQkJIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJdHJhY2VfdnByaW50Zl9mbChmaWxlLCBsaW5lLCBrZXksIGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQgdHJhY2VfYXJndl9wcmludGZfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKiphcmd2LAorCQkJICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXRyYWNlX2FyZ3ZfdnByaW50Zl9mbChmaWxlLCBsaW5lLCBhcmd2LCBmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIHRyYWNlX3BlcmZvcm1hbmNlX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCB1aW50NjRfdCBuYW5vcywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJdHJhY2VfcGVyZm9ybWFuY2VfdnByaW50Zl9mbChmaWxlLCBsaW5lLCBuYW5vcywgZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKworI2VuZGlmIC8qIEhBVkVfVkFSSUFESUNfTUFDUk9TICovCisKKworc3RhdGljIGNvbnN0IGNoYXIgKnF1b3RlX2NybmwoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBuZXdfcGF0aCA9IFNUUkJVRl9JTklUOworCisJaWYgKCFwYXRoKQorCQlyZXR1cm4gTlVMTDsKKworCXN0cmJ1Zl9yZXNldCgmbmV3X3BhdGgpOworCisJd2hpbGUgKCpwYXRoKSB7CisJCXN3aXRjaCAoKnBhdGgpIHsKKwkJY2FzZSAnXFwnOiBzdHJidWZfYWRkc3RyKCZuZXdfcGF0aCwgIlxcXFwiKTsgYnJlYWs7CisJCWNhc2UgJ1xuJzogc3RyYnVmX2FkZHN0cigmbmV3X3BhdGgsICJcXG4iKTsgYnJlYWs7CisJCWNhc2UgJ1xyJzogc3RyYnVmX2FkZHN0cigmbmV3X3BhdGgsICJcXHIiKTsgYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzdHJidWZfYWRkY2goJm5ld19wYXRoLCAqcGF0aCk7CisJCX0KKwkJcGF0aCsrOworCX0KKwlyZXR1cm4gbmV3X3BhdGguYnVmOworfQorCisvKiBGSVhNRTogbW92ZSBwcmVmaXggdG8gc3RhcnR1cF9pbmZvIHN0cnVjdCBhbmQgZ2V0IHJpZCBvZiB0aGlzIGFyZyAqLwordm9pZCB0cmFjZV9yZXBvX3NldHVwKGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlzdGF0aWMgc3RydWN0IHRyYWNlX2tleSBrZXkgPSBUUkFDRV9LRVlfSU5JVChTRVRVUCk7CisJY29uc3QgY2hhciAqZ2l0X3dvcmtfdHJlZTsKKwljaGFyICpjd2Q7CisKKwlpZiAoIXRyYWNlX3dhbnQoJmtleSkpCisJCXJldHVybjsKKworCWN3ZCA9IHhnZXRjd2QoKTsKKworCWlmICghKGdpdF93b3JrX3RyZWUgPSBnZXRfZ2l0X3dvcmtfdHJlZSgpKSkKKwkJZ2l0X3dvcmtfdHJlZSA9ICIobnVsbCkiOworCisJaWYgKCFwcmVmaXgpCisJCXByZWZpeCA9ICIobnVsbCkiOworCisJdHJhY2VfcHJpbnRmX2tleSgma2V5LCAic2V0dXA6IGdpdF9kaXI6ICVzXG4iLCBxdW90ZV9jcm5sKGdldF9naXRfZGlyKCkpKTsKKwl0cmFjZV9wcmludGZfa2V5KCZrZXksICJzZXR1cDogZ2l0X2NvbW1vbl9kaXI6ICVzXG4iLCBxdW90ZV9jcm5sKGdldF9naXRfY29tbW9uX2RpcigpKSk7CisJdHJhY2VfcHJpbnRmX2tleSgma2V5LCAic2V0dXA6IHdvcmt0cmVlOiAlc1xuIiwgcXVvdGVfY3JubChnaXRfd29ya190cmVlKSk7CisJdHJhY2VfcHJpbnRmX2tleSgma2V5LCAic2V0dXA6IGN3ZDogJXNcbiIsIHF1b3RlX2NybmwoY3dkKSk7CisJdHJhY2VfcHJpbnRmX2tleSgma2V5LCAic2V0dXA6IHByZWZpeDogJXNcbiIsIHF1b3RlX2NybmwocHJlZml4KSk7CisKKwlmcmVlKGN3ZCk7Cit9CisKK2ludCB0cmFjZV93YW50KHN0cnVjdCB0cmFjZV9rZXkgKmtleSkKK3sKKwlyZXR1cm4gISFnZXRfdHJhY2VfZmQoa2V5KTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9DTE9DS19HRVRUSU1FKSAmJiBkZWZpbmVkKEhBVkVfQ0xPQ0tfTU9OT1RPTklDKQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGhpZ2hyZXNfbmFub3Modm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJaWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gKHVpbnQ2NF90KSB0cy50dl9zZWMgKiAxMDAwMDAwMDAwICsgdHMudHZfbnNlYzsKK30KKworI2VsaWYgZGVmaW5lZCAoR0lUX1dJTkRPV1NfTkFUSVZFKQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IGhpZ2hyZXNfbmFub3Modm9pZCkKK3sKKwlzdGF0aWMgdWludDY0X3QgaGlnaF9ucywgc2NhbGVkX2xvd19uczsKKwlzdGF0aWMgaW50IHNjYWxlOworCUxBUkdFX0lOVEVHRVIgY250OworCisJaWYgKCFzY2FsZSkgeworCQlpZiAoIVF1ZXJ5UGVyZm9ybWFuY2VGcmVxdWVuY3koJmNudCkpCisJCQlyZXR1cm4gMDsKKworCQkvKiBoaWdoX25zID0gbnVtYmVyIG9mIG5zIHBlciBjbnQuSGlnaFBhcnQgKi8KKwkJaGlnaF9ucyA9ICgxMDAwMDAwMDAwTEwgPDwgMzIpIC8gKHVpbnQ2NF90KSBjbnQuUXVhZFBhcnQ7CisKKwkJLyoKKwkJICogTnVtYmVyIG9mIG5zIHBlciBjbnQuTG93UGFydCBpcyAxMF45IC8gZnJlcXVlbmN5IChvcgorCQkgKiBoaWdoX25zID4+IDMyKS4gRm9yIG1heGltdW0gcHJlY2lzaW9uLCB3ZSBzY2FsZSB0aGlzIGZhY3RvcgorCQkgKiBzbyB0aGF0IGl0IGp1c3QgZml0cyB3aXRoaW4gMzIgYml0IChpLmUuIHdvbid0IG92ZXJmbG93IGlmCisJCSAqIG11bHRpcGxpZWQgd2l0aCBjbnQuTG93UGFydCkuCisJCSAqLworCQlzY2FsZWRfbG93X25zID0gaGlnaF9uczsKKwkJc2NhbGUgPSAzMjsKKwkJd2hpbGUgKHNjYWxlZF9sb3dfbnMgPj0gMHgxMDAwMDAwMDBMTCkgeworCQkJc2NhbGVkX2xvd19ucyA+Pj0gMTsKKwkJCXNjYWxlLS07CisJCX0KKwl9CisKKwkvKiBpZiBRUEYgd29ya2VkIG9uIGluaXRpYWxpemF0aW9uLCB3ZSBleHBlY3QgUVBDIHRvIHdvcmsgYXMgd2VsbCAqLworCVF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZjbnQpOworCisJcmV0dXJuIChoaWdoX25zICogY250LkhpZ2hQYXJ0KSArCisJICAgICAgICgoc2NhbGVkX2xvd19ucyAqIGNudC5Mb3dQYXJ0KSA+PiBzY2FsZSk7Cit9CisKKyNlbHNlCisjIGRlZmluZSBoaWdocmVzX25hbm9zKCkgMAorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgZ2V0dGltZW9mZGF5X25hbm9zKHZvaWQpCit7CisJc3RydWN0IHRpbWV2YWwgdHY7CisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisJcmV0dXJuICh1aW50NjRfdCkgdHYudHZfc2VjICogMTAwMDAwMDAwMCArIHR2LnR2X3VzZWMgKiAxMDAwOworfQorCisvKgorICogUmV0dXJucyBuYW5vc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKDAxLzAxLzE5NzApLCBmb3IgcGVyZm9ybWFuY2UgdHJhY2luZworICogKGkuZS4gZmF2b3JpbmcgaGlnaCBwcmVjaXNpb24gb3ZlciB3YWxsIGNsb2NrIHRpbWUgYWNjdXJhY3kpLgorICovCit1aW50NjRfdCBnZXRuYW5vdGltZSh2b2lkKQoreworCXN0YXRpYyB1aW50NjRfdCBvZmZzZXQ7CisJaWYgKG9mZnNldCA+IDEpIHsKKwkJLyogaW5pdGlhbGl6YXRpb24gc3VjY2VlZGVkLCByZXR1cm4gb2Zmc2V0ICsgaGlnaCByZXMgdGltZSAqLworCQlyZXR1cm4gb2Zmc2V0ICsgaGlnaHJlc19uYW5vcygpOworCX0gZWxzZSBpZiAob2Zmc2V0ID09IDEpIHsKKwkJLyogaW5pdGlhbGl6YXRpb24gZmFpbGVkLCBmYWxsIGJhY2sgdG8gZ2V0dGltZW9mZGF5ICovCisJCXJldHVybiBnZXR0aW1lb2ZkYXlfbmFub3MoKTsKKwl9IGVsc2UgeworCQkvKiBpbml0aWFsaXplIG9mZnNldCBpZiBoaWdoIHJlc29sdXRpb24gdGltZXIgd29ya3MgKi8KKwkJdWludDY0X3Qgbm93ID0gZ2V0dGltZW9mZGF5X25hbm9zKCk7CisJCXVpbnQ2NF90IGhpZ2hyZXMgPSBoaWdocmVzX25hbm9zKCk7CisJCWlmIChoaWdocmVzKQorCQkJb2Zmc2V0ID0gbm93IC0gaGlnaHJlczsKKwkJZWxzZQorCQkJb2Zmc2V0ID0gMTsKKwkJcmV0dXJuIG5vdzsKKwl9Cit9CisKK3N0YXRpYyB1aW50NjRfdCBjb21tYW5kX3N0YXJ0X3RpbWU7CitzdGF0aWMgc3RydWN0IHN0cmJ1ZiBjb21tYW5kX2xpbmUgPSBTVFJCVUZfSU5JVDsKKworc3RhdGljIHZvaWQgcHJpbnRfY29tbWFuZF9wZXJmb3JtYW5jZV9hdGV4aXQodm9pZCkKK3sKKwl0cmFjZV9wZXJmb3JtYW5jZV9zaW5jZShjb21tYW5kX3N0YXJ0X3RpbWUsICJnaXQgY29tbWFuZDolcyIsCisJCQkJY29tbWFuZF9saW5lLmJ1Zik7Cit9CisKK3ZvaWQgdHJhY2VfY29tbWFuZF9wZXJmb3JtYW5jZShjb25zdCBjaGFyICoqYXJndikKK3sKKwlpZiAoIXRyYWNlX3dhbnQoJnRyYWNlX3BlcmZfa2V5KSkKKwkJcmV0dXJuOworCisJaWYgKCFjb21tYW5kX3N0YXJ0X3RpbWUpCisJCWF0ZXhpdChwcmludF9jb21tYW5kX3BlcmZvcm1hbmNlX2F0ZXhpdCk7CisKKwlzdHJidWZfcmVzZXQoJmNvbW1hbmRfbGluZSk7CisJc3FfcXVvdGVfYXJndigmY29tbWFuZF9saW5lLCBhcmd2LCAwKTsKKwljb21tYW5kX3N0YXJ0X3RpbWUgPSBnZXRuYW5vdGltZSgpOworfQpkaWZmIC0tZ2l0IGEvdHJhY2UuaCBiL3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5YjI0OQotLS0gL2Rldi9udWxsCisrKyBiL3RyYWNlLmgKQEAgLTAsMCArMSwxMTQgQEAKKyNpZm5kZWYgVFJBQ0VfSAorI2RlZmluZSBUUkFDRV9ICisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IHRyYWNlX2tleSB7CisJY29uc3QgY2hhciAqIGNvbnN0IGtleTsKKwlpbnQgZmQ7CisJdW5zaWduZWQgaW50IGluaXRpYWxpemVkIDogMTsKKwl1bnNpZ25lZCBpbnQgIG5lZWRfY2xvc2UgOiAxOworfTsKKworI2RlZmluZSBUUkFDRV9LRVlfSU5JVChuYW1lKSB7ICJHSVRfVFJBQ0VfIiAjbmFtZSwgMCwgMCwgMCB9CisKK2V4dGVybiB2b2lkIHRyYWNlX3JlcG9fc2V0dXAoY29uc3QgY2hhciAqcHJlZml4KTsKK2V4dGVybiBpbnQgdHJhY2Vfd2FudChzdHJ1Y3QgdHJhY2Vfa2V5ICprZXkpOworZXh0ZXJuIHZvaWQgdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdHJhY2Vfa2V5ICprZXkpOworZXh0ZXJuIHVpbnQ2NF90IGdldG5hbm90aW1lKHZvaWQpOworZXh0ZXJuIHZvaWQgdHJhY2VfY29tbWFuZF9wZXJmb3JtYW5jZShjb25zdCBjaGFyICoqYXJndik7CitleHRlcm4gdm9pZCB0cmFjZV92ZXJiYXRpbShzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksIGNvbnN0IHZvaWQgKmJ1ZiwgdW5zaWduZWQgbGVuKTsKKworI2lmbmRlZiBIQVZFX1ZBUklBRElDX01BQ1JPUworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorZXh0ZXJuIHZvaWQgdHJhY2VfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK2V4dGVybiB2b2lkIHRyYWNlX3ByaW50Zl9rZXkoc3RydWN0IHRyYWNlX2tleSAqa2V5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitleHRlcm4gdm9pZCB0cmFjZV9hcmd2X3ByaW50Zihjb25zdCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworCitleHRlcm4gdm9pZCB0cmFjZV9zdHJidWYoc3RydWN0IHRyYWNlX2tleSAqa2V5LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpkYXRhKTsKKworLyogUHJpbnRzIGVsYXBzZWQgdGltZSAoaW4gbmFub3NlY29uZHMpIGlmIEdJVF9UUkFDRV9QRVJGT1JNQU5DRSBpcyBlbmFibGVkLiAqLworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKK2V4dGVybiB2b2lkIHRyYWNlX3BlcmZvcm1hbmNlKHVpbnQ2NF90IG5hbm9zLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CisKKy8qIFByaW50cyBlbGFwc2VkIHRpbWUgc2luY2UgJ3N0YXJ0JyBpZiBHSVRfVFJBQ0VfUEVSRk9STUFOQ0UgaXMgZW5hYmxlZC4gKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCitleHRlcm4gdm9pZCB0cmFjZV9wZXJmb3JtYW5jZV9zaW5jZSh1aW50NjRfdCBzdGFydCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworCisjZWxzZQorCisvKgorICogTWFjcm9zIHRvIGFkZCBmaWxlOmxpbmUgLSBzZWUgYWJvdmUgZm9yIEMtc3R5bGUgZGVjbGFyYXRpb25zIG9mIGhvdyB0aGVzZQorICogc2hvdWxkIGJlIHVzZWQuCisgKi8KKworLyoKKyAqIFRSQUNFX0NPTlRFWFQgbWF5IGJlIHNldCB0byBfX0ZVTkNUSU9OX18gaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIGl0LiBUaGUKKyAqIGRlZmF1bHQgaXMgX19GSUxFX18sIGFzIGl0IGlzIGNvbnNpc3RlbnQgd2l0aCBhc3NlcnQoKSwgYW5kIHN0YXRpYyBmdW5jdGlvbgorICogbmFtZXMgYXJlIG5vdCBuZWNlc3NhcmlseSB1bmlxdWUuCisgKgorICogX19GSUxFX18gIjoiIF9fRlVOQ1RJT05fXyBkb2Vzbid0IHdvcmsgd2l0aCBHTlVDLCBhcyBfX0ZJTEVfXyBpcyBzdXBwbGllZAorICogYnkgdGhlIHByZXByb2Nlc3NvciBhcyBhIHN0cmluZyBsaXRlcmFsLCBhbmQgX19GVU5DVElPTl9fIGlzIGZpbGxlZCBpbiBieQorICogdGhlIGNvbXBpbGVyIGFzIGEgc3RyaW5nIGNvbnN0YW50LgorICovCisjaWZuZGVmIFRSQUNFX0NPTlRFWFQKKyMgZGVmaW5lIFRSQUNFX0NPTlRFWFQgX19GSUxFX18KKyNlbmRpZgorCisvKgorICogTm90ZTogd2l0aCBDOTkgdmFyaWFkaWMgbWFjcm9zLCBfX1ZBX0FSR1NfXyBtdXN0IGluY2x1ZGUgdGhlIGxhc3QgZml4ZWQKKyAqIHBhcmFtZXRlciAoJ2Zvcm1hdCcgaW4gdGhpcyBjYXNlKS4gT3RoZXJ3aXNlLCBhIGNhbGwgd2l0aG91dCB2YXJpYWJsZQorICogYXJndW1lbnRzIHdpbGwgaGF2ZSBhIHN1cnBsdXMgJywnLiBFLmcuOgorICoKKyAqICAjZGVmaW5lIGZvbyhmb3JtYXQsIC4uLikgYmFyKGZvcm1hdCwgX19WQV9BUkdTX18pCisgKiAgZm9vKCJ0ZXN0Iik7CisgKgorICogd2lsbCBleHBhbmQgdG8KKyAqCisgKiAgYmFyKCJ0ZXN0IiwpOworICoKKyAqIHdoaWNoIGlzIGludmFsaWQgKG5vdGUgdGhlICcsKScpLiBXaXRoIEdOVUMsICcjI19fVkFfQVJHU19fJyBkcm9wcyB0aGUKKyAqIGNvbW1hLCBidXQgdGhpcyBpcyBub24tc3RhbmRhcmQuCisgKi8KKworI2RlZmluZSB0cmFjZV9wcmludGYoLi4uKSBcCisJdHJhY2VfcHJpbnRmX2tleV9mbChUUkFDRV9DT05URVhULCBfX0xJTkVfXywgTlVMTCwgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgdHJhY2VfcHJpbnRmX2tleShrZXksIC4uLikgXAorCXRyYWNlX3ByaW50Zl9rZXlfZmwoVFJBQ0VfQ09OVEVYVCwgX19MSU5FX18sIGtleSwgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgdHJhY2VfYXJndl9wcmludGYoYXJndiwgLi4uKSBcCisJdHJhY2VfYXJndl9wcmludGZfZmwoVFJBQ0VfQ09OVEVYVCwgX19MSU5FX18sIGFyZ3YsIF9fVkFfQVJHU19fKQorCisjZGVmaW5lIHRyYWNlX3N0cmJ1ZihrZXksIGRhdGEpIFwKKwl0cmFjZV9zdHJidWZfZmwoVFJBQ0VfQ09OVEVYVCwgX19MSU5FX18sIGtleSwgZGF0YSkKKworI2RlZmluZSB0cmFjZV9wZXJmb3JtYW5jZShuYW5vcywgLi4uKSBcCisJdHJhY2VfcGVyZm9ybWFuY2VfZmwoVFJBQ0VfQ09OVEVYVCwgX19MSU5FX18sIG5hbm9zLCBfX1ZBX0FSR1NfXykKKworI2RlZmluZSB0cmFjZV9wZXJmb3JtYW5jZV9zaW5jZShzdGFydCwgLi4uKSBcCisJdHJhY2VfcGVyZm9ybWFuY2VfZmwoVFJBQ0VfQ09OVEVYVCwgX19MSU5FX18sIGdldG5hbm90aW1lKCkgLSAoc3RhcnQpLCBcCisJCQkgICAgIF9fVkFfQVJHU19fKQorCisvKiBiYWNrZW5kIGZ1bmN0aW9ucywgdXNlIG5vbi0qZmwgbWFjcm9zIGluc3RlYWQgKi8KK19fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCA0LCA1KSkpCitleHRlcm4gdm9pZCB0cmFjZV9wcmludGZfa2V5X2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksCisJCQkJY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDQsIDUpKSkKK2V4dGVybiB2b2lkIHRyYWNlX2FyZ3ZfcHJpbnRmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICoqYXJndiwKKwkJCQkgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworZXh0ZXJuIHZvaWQgdHJhY2Vfc3RyYnVmX2ZsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBzdHJ1Y3QgdHJhY2Vfa2V5ICprZXksCisJCQkgICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqZGF0YSk7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgNCwgNSkpKQorZXh0ZXJuIHZvaWQgdHJhY2VfcGVyZm9ybWFuY2VfZmwoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisJCQkJIHVpbnQ2NF90IG5hbm9zLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNlbmRpZiAvKiBIQVZFX1ZBUklBRElDX01BQ1JPUyAqLworCisjZW5kaWYgLyogVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvdHJhaWxlci5jIGIvdHJhaWxlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMzQxNmYKLS0tIC9kZXYvbnVsbAorKysgYi90cmFpbGVyLmMKQEAgLTAsMCArMSw4NzQgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInN0cmluZy1saXN0LmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0cmFpbGVyLmgiCisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLCAyMDE0IENocmlzdGlhbiBDb3VkZXIgPGNocmlzY29vbEB0dXhmYW1pbHkub3JnPgorICovCisKK2VudW0gYWN0aW9uX3doZXJlIHsgV0hFUkVfRU5ELCBXSEVSRV9BRlRFUiwgV0hFUkVfQkVGT1JFLCBXSEVSRV9TVEFSVCB9OworZW51bSBhY3Rpb25faWZfZXhpc3RzIHsgRVhJU1RTX0FERF9JRl9ESUZGRVJFTlRfTkVJR0hCT1IsIEVYSVNUU19BRERfSUZfRElGRkVSRU5ULAorCQkJRVhJU1RTX0FERCwgRVhJU1RTX1JFUExBQ0UsIEVYSVNUU19ET19OT1RISU5HIH07CitlbnVtIGFjdGlvbl9pZl9taXNzaW5nIHsgTUlTU0lOR19BREQsIE1JU1NJTkdfRE9fTk9USElORyB9OworCitzdHJ1Y3QgY29uZl9pbmZvIHsKKwljaGFyICpuYW1lOworCWNoYXIgKmtleTsKKwljaGFyICpjb21tYW5kOworCWVudW0gYWN0aW9uX3doZXJlIHdoZXJlOworCWVudW0gYWN0aW9uX2lmX2V4aXN0cyBpZl9leGlzdHM7CisJZW51bSBhY3Rpb25faWZfbWlzc2luZyBpZl9taXNzaW5nOworfTsKKworc3RhdGljIHN0cnVjdCBjb25mX2luZm8gZGVmYXVsdF9jb25mX2luZm87CisKK3N0cnVjdCB0cmFpbGVyX2l0ZW0geworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKnByZXZpb3VzOworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKm5leHQ7CisJY29uc3QgY2hhciAqdG9rZW47CisJY29uc3QgY2hhciAqdmFsdWU7CisJc3RydWN0IGNvbmZfaW5mbyBjb25mOworfTsKKworc3RhdGljIHN0cnVjdCB0cmFpbGVyX2l0ZW0gKmZpcnN0X2NvbmZfaXRlbTsKKworc3RhdGljIGNoYXIgKnNlcGFyYXRvcnMgPSAiOiI7CisKKyNkZWZpbmUgVFJBSUxFUl9BUkdfU1RSSU5HICIkQVJHIgorCitzdGF0aWMgaW50IGFmdGVyX29yX2VuZChlbnVtIGFjdGlvbl93aGVyZSB3aGVyZSkKK3sKKwlyZXR1cm4gKHdoZXJlID09IFdIRVJFX0FGVEVSKSB8fCAod2hlcmUgPT0gV0hFUkVfRU5EKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgbm90IGluY2x1ZGluZyBhbnkgZmluYWwKKyAqIHB1bmN0dWF0aW9uLiBFLmcuLCB0aGUgaW5wdXQgIlNpZ25lZC1vZmYtYnk6IiB3b3VsZCByZXR1cm4KKyAqIDEzLCBzdHJpcHBpbmcgdGhlIHRyYWlsaW5nIHB1bmN0dWF0aW9uIGJ1dCByZXRhaW5pbmcKKyAqIGludGVybmFsIHB1bmN0dWF0aW9uLgorICovCitzdGF0aWMgc2l6ZV90IHRva2VuX2xlbl93aXRob3V0X3NlcGFyYXRvcihjb25zdCBjaGFyICp0b2tlbiwgc2l6ZV90IGxlbikKK3sKKwl3aGlsZSAobGVuID4gMCAmJiAhaXNhbG51bSh0b2tlbltsZW4gLSAxXSkpCisJCWxlbi0tOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgc2FtZV90b2tlbihzdHJ1Y3QgdHJhaWxlcl9pdGVtICphLCBzdHJ1Y3QgdHJhaWxlcl9pdGVtICpiKQoreworCXNpemVfdCBhX2xlbiA9IHRva2VuX2xlbl93aXRob3V0X3NlcGFyYXRvcihhLT50b2tlbiwgc3RybGVuKGEtPnRva2VuKSk7CisJc2l6ZV90IGJfbGVuID0gdG9rZW5fbGVuX3dpdGhvdXRfc2VwYXJhdG9yKGItPnRva2VuLCBzdHJsZW4oYi0+dG9rZW4pKTsKKwlzaXplX3QgbWluX2xlbiA9IChhX2xlbiA+IGJfbGVuKSA/IGJfbGVuIDogYV9sZW47CisKKwlyZXR1cm4gIXN0cm5jYXNlY21wKGEtPnRva2VuLCBiLT50b2tlbiwgbWluX2xlbik7Cit9CisKK3N0YXRpYyBpbnQgc2FtZV92YWx1ZShzdHJ1Y3QgdHJhaWxlcl9pdGVtICphLCBzdHJ1Y3QgdHJhaWxlcl9pdGVtICpiKQoreworCXJldHVybiAhc3RyY2FzZWNtcChhLT52YWx1ZSwgYi0+dmFsdWUpOworfQorCitzdGF0aWMgaW50IHNhbWVfdHJhaWxlcihzdHJ1Y3QgdHJhaWxlcl9pdGVtICphLCBzdHJ1Y3QgdHJhaWxlcl9pdGVtICpiKQoreworCXJldHVybiBzYW1lX3Rva2VuKGEsIGIpICYmIHNhbWVfdmFsdWUoYSwgYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNvbnRhaW5zX29ubHlfc3BhY2VzKGNvbnN0IGNoYXIgKnN0cikKK3sKKwljb25zdCBjaGFyICpzID0gc3RyOworCXdoaWxlICgqcyAmJiBpc3NwYWNlKCpzKSkKKwkJcysrOworCXJldHVybiAhKnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJidWZfcmVwbGFjZShzdHJ1Y3Qgc3RyYnVmICpzYiwgY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKwljb25zdCBjaGFyICpwdHIgPSBzdHJzdHIoc2ItPmJ1ZiwgYSk7CisJaWYgKHB0cikKKwkJc3RyYnVmX3NwbGljZShzYiwgcHRyIC0gc2ItPmJ1Ziwgc3RybGVuKGEpLCBiLCBzdHJsZW4oYikpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3RyYWlsZXJfaXRlbShzdHJ1Y3QgdHJhaWxlcl9pdGVtICppdGVtKQoreworCWZyZWUoaXRlbS0+Y29uZi5uYW1lKTsKKwlmcmVlKGl0ZW0tPmNvbmYua2V5KTsKKwlmcmVlKGl0ZW0tPmNvbmYuY29tbWFuZCk7CisJZnJlZSgoY2hhciAqKWl0ZW0tPnRva2VuKTsKKwlmcmVlKChjaGFyICopaXRlbS0+dmFsdWUpOworCWZyZWUoaXRlbSk7Cit9CisKK3N0YXRpYyBjaGFyIGxhc3Rfbm9uX3NwYWNlX2NoYXIoY29uc3QgY2hhciAqcykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSBzdHJsZW4ocykgLSAxOyBpID49IDA7IGktLSkKKwkJaWYgKCFpc3NwYWNlKHNbaV0pKQorCQkJcmV0dXJuIHNbaV07CisJcmV0dXJuICdcMCc7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3Rva192YWwoY29uc3QgY2hhciAqdG9rLCBjb25zdCBjaGFyICp2YWwpCit7CisJY2hhciBjID0gbGFzdF9ub25fc3BhY2VfY2hhcih0b2spOworCWlmICghYykKKwkJcmV0dXJuOworCWlmIChzdHJjaHIoc2VwYXJhdG9ycywgYykpCisJCXByaW50ZigiJXMlc1xuIiwgdG9rLCB2YWwpOworCWVsc2UKKwkJcHJpbnRmKCIlcyVjICVzXG4iLCB0b2ssIHNlcGFyYXRvcnNbMF0sIHZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2FsbChzdHJ1Y3QgdHJhaWxlcl9pdGVtICpmaXJzdCwgaW50IHRyaW1fZW1wdHkpCit7CisJc3RydWN0IHRyYWlsZXJfaXRlbSAqaXRlbTsKKwlmb3IgKGl0ZW0gPSBmaXJzdDsgaXRlbTsgaXRlbSA9IGl0ZW0tPm5leHQpIHsKKwkJaWYgKCF0cmltX2VtcHR5IHx8IHN0cmxlbihpdGVtLT52YWx1ZSkgPiAwKQorCQkJcHJpbnRfdG9rX3ZhbChpdGVtLT50b2tlbiwgaXRlbS0+dmFsdWUpOworCX0KK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2xhc3Qoc3RydWN0IHRyYWlsZXJfaXRlbSAqKmxhc3QpCit7CisJaWYgKCpsYXN0KQorCQl3aGlsZSAoKCpsYXN0KS0+bmV4dCAhPSBOVUxMKQorCQkJKmxhc3QgPSAoKmxhc3QpLT5uZXh0OworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfZmlyc3Qoc3RydWN0IHRyYWlsZXJfaXRlbSAqKmZpcnN0KQoreworCWlmICgqZmlyc3QpCisJCXdoaWxlICgoKmZpcnN0KS0+cHJldmlvdXMgIT0gTlVMTCkKKwkJCSpmaXJzdCA9ICgqZmlyc3QpLT5wcmV2aW91czsKK30KKworc3RhdGljIHZvaWQgYWRkX2FyZ190b19pbnB1dF9saXN0KHN0cnVjdCB0cmFpbGVyX2l0ZW0gKm9uX3RvaywKKwkJCQkgIHN0cnVjdCB0cmFpbGVyX2l0ZW0gKmFyZ190b2ssCisJCQkJICBzdHJ1Y3QgdHJhaWxlcl9pdGVtICoqZmlyc3QsCisJCQkJICBzdHJ1Y3QgdHJhaWxlcl9pdGVtICoqbGFzdCkKK3sKKwlpZiAoYWZ0ZXJfb3JfZW5kKGFyZ190b2stPmNvbmYud2hlcmUpKSB7CisJCWFyZ190b2stPm5leHQgPSBvbl90b2stPm5leHQ7CisJCW9uX3Rvay0+bmV4dCA9IGFyZ190b2s7CisJCWFyZ190b2stPnByZXZpb3VzID0gb25fdG9rOworCQlpZiAoYXJnX3Rvay0+bmV4dCkKKwkJCWFyZ190b2stPm5leHQtPnByZXZpb3VzID0gYXJnX3RvazsKKwkJdXBkYXRlX2xhc3QobGFzdCk7CisJfSBlbHNlIHsKKwkJYXJnX3Rvay0+cHJldmlvdXMgPSBvbl90b2stPnByZXZpb3VzOworCQlvbl90b2stPnByZXZpb3VzID0gYXJnX3RvazsKKwkJYXJnX3Rvay0+bmV4dCA9IG9uX3RvazsKKwkJaWYgKGFyZ190b2stPnByZXZpb3VzKQorCQkJYXJnX3Rvay0+cHJldmlvdXMtPm5leHQgPSBhcmdfdG9rOworCQl1cGRhdGVfZmlyc3QoZmlyc3QpOworCX0KK30KKworc3RhdGljIGludCBjaGVja19pZl9kaWZmZXJlbnQoc3RydWN0IHRyYWlsZXJfaXRlbSAqaW5fdG9rLAorCQkJICAgICAgc3RydWN0IHRyYWlsZXJfaXRlbSAqYXJnX3RvaywKKwkJCSAgICAgIGludCBjaGVja19hbGwpCit7CisJZW51bSBhY3Rpb25fd2hlcmUgd2hlcmUgPSBhcmdfdG9rLT5jb25mLndoZXJlOworCWRvIHsKKwkJaWYgKCFpbl90b2spCisJCQlyZXR1cm4gMTsKKwkJaWYgKHNhbWVfdHJhaWxlcihpbl90b2ssIGFyZ190b2spKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIGlmIHdlIHdhbnQgdG8gYWRkIGEgdHJhaWxlciBhZnRlciBhbm90aGVyIG9uZSwKKwkJICogd2UgaGF2ZSB0byBjaGVjayB0aG9zZSBiZWZvcmUgdGhpcyBvbmUKKwkJICovCisJCWluX3RvayA9IGFmdGVyX29yX2VuZCh3aGVyZSkgPyBpbl90b2stPnByZXZpb3VzIDogaW5fdG9rLT5uZXh0OworCX0gd2hpbGUgKGNoZWNrX2FsbCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9mcm9tX2xpc3Qoc3RydWN0IHRyYWlsZXJfaXRlbSAqaXRlbSwKKwkJCSAgICAgc3RydWN0IHRyYWlsZXJfaXRlbSAqKmZpcnN0LAorCQkJICAgICBzdHJ1Y3QgdHJhaWxlcl9pdGVtICoqbGFzdCkKK3sKKwlzdHJ1Y3QgdHJhaWxlcl9pdGVtICpuZXh0ID0gaXRlbS0+bmV4dDsKKwlzdHJ1Y3QgdHJhaWxlcl9pdGVtICpwcmV2aW91cyA9IGl0ZW0tPnByZXZpb3VzOworCisJaWYgKG5leHQpIHsKKwkJaXRlbS0+bmV4dC0+cHJldmlvdXMgPSBwcmV2aW91czsKKwkJaXRlbS0+bmV4dCA9IE5VTEw7CisJfSBlbHNlIGlmIChsYXN0KQorCQkqbGFzdCA9IHByZXZpb3VzOworCisJaWYgKHByZXZpb3VzKSB7CisJCWl0ZW0tPnByZXZpb3VzLT5uZXh0ID0gbmV4dDsKKwkJaXRlbS0+cHJldmlvdXMgPSBOVUxMOworCX0gZWxzZSBpZiAoZmlyc3QpCisJCSpmaXJzdCA9IG5leHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhaWxlcl9pdGVtICpyZW1vdmVfZmlyc3Qoc3RydWN0IHRyYWlsZXJfaXRlbSAqKmZpcnN0KQoreworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKml0ZW0gPSAqZmlyc3Q7CisJKmZpcnN0ID0gaXRlbS0+bmV4dDsKKwlpZiAoaXRlbS0+bmV4dCkgeworCQlpdGVtLT5uZXh0LT5wcmV2aW91cyA9IE5VTEw7CisJCWl0ZW0tPm5leHQgPSBOVUxMOworCX0KKwlyZXR1cm4gaXRlbTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmFwcGx5X2NvbW1hbmQoY29uc3QgY2hhciAqY29tbWFuZCwgY29uc3QgY2hhciAqYXJnKQoreworCXN0cnVjdCBzdHJidWYgY21kID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjcCA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmd2W10gPSB7TlVMTCwgTlVMTH07CisJY29uc3QgY2hhciAqcmVzdWx0OworCisJc3RyYnVmX2FkZHN0cigmY21kLCBjb21tYW5kKTsKKwlpZiAoYXJnKQorCQlzdHJidWZfcmVwbGFjZSgmY21kLCBUUkFJTEVSX0FSR19TVFJJTkcsIGFyZyk7CisKKwlhcmd2WzBdID0gY21kLmJ1ZjsKKwljcC5hcmd2ID0gYXJndjsKKwljcC5lbnYgPSBsb2NhbF9yZXBvX2VudjsKKwljcC5ub19zdGRpbiA9IDE7CisJY3AudXNlX3NoZWxsID0gMTsKKworCWlmIChjYXB0dXJlX2NvbW1hbmQoJmNwLCAmYnVmLCAxMDI0KSkgeworCQllcnJvcigicnVubmluZyB0cmFpbGVyIGNvbW1hbmQgJyVzJyBmYWlsZWQiLCBjbWQuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJlc3VsdCA9IHhzdHJkdXAoIiIpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl90cmltKCZidWYpOworCQlyZXN1bHQgPSBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZjbWQpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5X2l0ZW1fY29tbWFuZChzdHJ1Y3QgdHJhaWxlcl9pdGVtICppbl90b2ssIHN0cnVjdCB0cmFpbGVyX2l0ZW0gKmFyZ190b2spCit7CisJaWYgKGFyZ190b2stPmNvbmYuY29tbWFuZCkgeworCQljb25zdCBjaGFyICphcmc7CisJCWlmIChhcmdfdG9rLT52YWx1ZSAmJiBhcmdfdG9rLT52YWx1ZVswXSkgeworCQkJYXJnID0gYXJnX3Rvay0+dmFsdWU7CisJCX0gZWxzZSB7CisJCQlpZiAoaW5fdG9rICYmIGluX3Rvay0+dmFsdWUpCisJCQkJYXJnID0geHN0cmR1cChpbl90b2stPnZhbHVlKTsKKwkJCWVsc2UKKwkJCQlhcmcgPSB4c3RyZHVwKCIiKTsKKwkJfQorCQlhcmdfdG9rLT52YWx1ZSA9IGFwcGx5X2NvbW1hbmQoYXJnX3Rvay0+Y29uZi5jb21tYW5kLCBhcmcpOworCQlmcmVlKChjaGFyICopYXJnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5X2FyZ19pZl9leGlzdHMoc3RydWN0IHRyYWlsZXJfaXRlbSAqaW5fdG9rLAorCQkJCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKmFyZ190b2ssCisJCQkJc3RydWN0IHRyYWlsZXJfaXRlbSAqb25fdG9rLAorCQkJCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKippbl90b2tfZmlyc3QsCisJCQkJc3RydWN0IHRyYWlsZXJfaXRlbSAqKmluX3Rva19sYXN0KQoreworCXN3aXRjaCAoYXJnX3Rvay0+Y29uZi5pZl9leGlzdHMpIHsKKwljYXNlIEVYSVNUU19ET19OT1RISU5HOgorCQlmcmVlX3RyYWlsZXJfaXRlbShhcmdfdG9rKTsKKwkJYnJlYWs7CisJY2FzZSBFWElTVFNfUkVQTEFDRToKKwkJYXBwbHlfaXRlbV9jb21tYW5kKGluX3RvaywgYXJnX3Rvayk7CisJCWFkZF9hcmdfdG9faW5wdXRfbGlzdChvbl90b2ssIGFyZ190b2ssCisJCQkJICAgICAgaW5fdG9rX2ZpcnN0LCBpbl90b2tfbGFzdCk7CisJCXJlbW92ZV9mcm9tX2xpc3QoaW5fdG9rLCBpbl90b2tfZmlyc3QsIGluX3Rva19sYXN0KTsKKwkJZnJlZV90cmFpbGVyX2l0ZW0oaW5fdG9rKTsKKwkJYnJlYWs7CisJY2FzZSBFWElTVFNfQUREOgorCQlhcHBseV9pdGVtX2NvbW1hbmQoaW5fdG9rLCBhcmdfdG9rKTsKKwkJYWRkX2FyZ190b19pbnB1dF9saXN0KG9uX3RvaywgYXJnX3RvaywKKwkJCQkgICAgICBpbl90b2tfZmlyc3QsIGluX3Rva19sYXN0KTsKKwkJYnJlYWs7CisJY2FzZSBFWElTVFNfQUREX0lGX0RJRkZFUkVOVDoKKwkJYXBwbHlfaXRlbV9jb21tYW5kKGluX3RvaywgYXJnX3Rvayk7CisJCWlmIChjaGVja19pZl9kaWZmZXJlbnQoaW5fdG9rLCBhcmdfdG9rLCAxKSkKKwkJCWFkZF9hcmdfdG9faW5wdXRfbGlzdChvbl90b2ssIGFyZ190b2ssCisJCQkJCSAgICAgIGluX3Rva19maXJzdCwgaW5fdG9rX2xhc3QpOworCQllbHNlCisJCQlmcmVlX3RyYWlsZXJfaXRlbShhcmdfdG9rKTsKKwkJYnJlYWs7CisJY2FzZSBFWElTVFNfQUREX0lGX0RJRkZFUkVOVF9ORUlHSEJPUjoKKwkJYXBwbHlfaXRlbV9jb21tYW5kKGluX3RvaywgYXJnX3Rvayk7CisJCWlmIChjaGVja19pZl9kaWZmZXJlbnQob25fdG9rLCBhcmdfdG9rLCAwKSkKKwkJCWFkZF9hcmdfdG9faW5wdXRfbGlzdChvbl90b2ssIGFyZ190b2ssCisJCQkJCSAgICAgIGluX3Rva19maXJzdCwgaW5fdG9rX2xhc3QpOworCQllbHNlCisJCQlmcmVlX3RyYWlsZXJfaXRlbShhcmdfdG9rKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBhcHBseV9hcmdfaWZfbWlzc2luZyhzdHJ1Y3QgdHJhaWxlcl9pdGVtICoqaW5fdG9rX2ZpcnN0LAorCQkJCSBzdHJ1Y3QgdHJhaWxlcl9pdGVtICoqaW5fdG9rX2xhc3QsCisJCQkJIHN0cnVjdCB0cmFpbGVyX2l0ZW0gKmFyZ190b2spCit7CisJc3RydWN0IHRyYWlsZXJfaXRlbSAqKmluX3RvazsKKwllbnVtIGFjdGlvbl93aGVyZSB3aGVyZTsKKworCXN3aXRjaCAoYXJnX3Rvay0+Y29uZi5pZl9taXNzaW5nKSB7CisJY2FzZSBNSVNTSU5HX0RPX05PVEhJTkc6CisJCWZyZWVfdHJhaWxlcl9pdGVtKGFyZ190b2spOworCQlicmVhazsKKwljYXNlIE1JU1NJTkdfQUREOgorCQl3aGVyZSA9IGFyZ190b2stPmNvbmYud2hlcmU7CisJCWluX3RvayA9IGFmdGVyX29yX2VuZCh3aGVyZSkgPyBpbl90b2tfbGFzdCA6IGluX3Rva19maXJzdDsKKwkJYXBwbHlfaXRlbV9jb21tYW5kKE5VTEwsIGFyZ190b2spOworCQlpZiAoKmluX3RvaykgeworCQkJYWRkX2FyZ190b19pbnB1dF9saXN0KCppbl90b2ssIGFyZ190b2ssCisJCQkJCSAgICAgIGluX3Rva19maXJzdCwgaW5fdG9rX2xhc3QpOworCQl9IGVsc2UgeworCQkJKmluX3Rva19maXJzdCA9IGFyZ190b2s7CisJCQkqaW5fdG9rX2xhc3QgPSBhcmdfdG9rOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBmaW5kX3NhbWVfYW5kX2FwcGx5X2FyZyhzdHJ1Y3QgdHJhaWxlcl9pdGVtICoqaW5fdG9rX2ZpcnN0LAorCQkJCSAgIHN0cnVjdCB0cmFpbGVyX2l0ZW0gKippbl90b2tfbGFzdCwKKwkJCQkgICBzdHJ1Y3QgdHJhaWxlcl9pdGVtICphcmdfdG9rKQoreworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKmluX3RvazsKKwlzdHJ1Y3QgdHJhaWxlcl9pdGVtICpvbl90b2s7CisJc3RydWN0IHRyYWlsZXJfaXRlbSAqZm9sbG93aW5nX3RvazsKKworCWVudW0gYWN0aW9uX3doZXJlIHdoZXJlID0gYXJnX3Rvay0+Y29uZi53aGVyZTsKKwlpbnQgbWlkZGxlID0gKHdoZXJlID09IFdIRVJFX0FGVEVSKSB8fCAod2hlcmUgPT0gV0hFUkVfQkVGT1JFKTsKKwlpbnQgYmFja3dhcmRzID0gYWZ0ZXJfb3JfZW5kKHdoZXJlKTsKKwlzdHJ1Y3QgdHJhaWxlcl9pdGVtICpzdGFydF90b2sgPSBiYWNrd2FyZHMgPyAqaW5fdG9rX2xhc3QgOiAqaW5fdG9rX2ZpcnN0OworCisJZm9yIChpbl90b2sgPSBzdGFydF90b2s7IGluX3RvazsgaW5fdG9rID0gZm9sbG93aW5nX3RvaykgeworCQlmb2xsb3dpbmdfdG9rID0gYmFja3dhcmRzID8gaW5fdG9rLT5wcmV2aW91cyA6IGluX3Rvay0+bmV4dDsKKwkJaWYgKCFzYW1lX3Rva2VuKGluX3RvaywgYXJnX3RvaykpCisJCQljb250aW51ZTsKKwkJb25fdG9rID0gbWlkZGxlID8gaW5fdG9rIDogc3RhcnRfdG9rOworCQlhcHBseV9hcmdfaWZfZXhpc3RzKGluX3RvaywgYXJnX3Rvaywgb25fdG9rLAorCQkJCSAgICBpbl90b2tfZmlyc3QsIGluX3Rva19sYXN0KTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwcm9jZXNzX3RyYWlsZXJzX2xpc3RzKHN0cnVjdCB0cmFpbGVyX2l0ZW0gKippbl90b2tfZmlyc3QsCisJCQkJICAgc3RydWN0IHRyYWlsZXJfaXRlbSAqKmluX3Rva19sYXN0LAorCQkJCSAgIHN0cnVjdCB0cmFpbGVyX2l0ZW0gKiphcmdfdG9rX2ZpcnN0KQoreworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKmFyZ190b2s7CisJc3RydWN0IHRyYWlsZXJfaXRlbSAqbmV4dF9hcmc7CisKKwlpZiAoISphcmdfdG9rX2ZpcnN0KQorCQlyZXR1cm47CisKKwlmb3IgKGFyZ190b2sgPSAqYXJnX3Rva19maXJzdDsgYXJnX3RvazsgYXJnX3RvayA9IG5leHRfYXJnKSB7CisJCWludCBhcHBsaWVkID0gMDsKKworCQluZXh0X2FyZyA9IGFyZ190b2stPm5leHQ7CisJCXJlbW92ZV9mcm9tX2xpc3QoYXJnX3RvaywgYXJnX3Rva19maXJzdCwgTlVMTCk7CisKKwkJYXBwbGllZCA9IGZpbmRfc2FtZV9hbmRfYXBwbHlfYXJnKGluX3Rva19maXJzdCwKKwkJCQkJCSAgaW5fdG9rX2xhc3QsCisJCQkJCQkgIGFyZ190b2spOworCisJCWlmICghYXBwbGllZCkKKwkJCWFwcGx5X2FyZ19pZl9taXNzaW5nKGluX3Rva19maXJzdCwKKwkJCQkJICAgICBpbl90b2tfbGFzdCwKKwkJCQkJICAgICBhcmdfdG9rKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2V0X3doZXJlKHN0cnVjdCBjb25mX2luZm8gKml0ZW0sIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY2FzZWNtcCgiYWZ0ZXIiLCB2YWx1ZSkpCisJCWl0ZW0tPndoZXJlID0gV0hFUkVfQUZURVI7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoImJlZm9yZSIsIHZhbHVlKSkKKwkJaXRlbS0+d2hlcmUgPSBXSEVSRV9CRUZPUkU7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoImVuZCIsIHZhbHVlKSkKKwkJaXRlbS0+d2hlcmUgPSBXSEVSRV9FTkQ7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoInN0YXJ0IiwgdmFsdWUpKQorCQlpdGVtLT53aGVyZSA9IFdIRVJFX1NUQVJUOworCWVsc2UKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9pZl9leGlzdHMoc3RydWN0IGNvbmZfaW5mbyAqaXRlbSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJaWYgKCFzdHJjYXNlY21wKCJhZGRJZkRpZmZlcmVudCIsIHZhbHVlKSkKKwkJaXRlbS0+aWZfZXhpc3RzID0gRVhJU1RTX0FERF9JRl9ESUZGRVJFTlQ7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoImFkZElmRGlmZmVyZW50TmVpZ2hib3IiLCB2YWx1ZSkpCisJCWl0ZW0tPmlmX2V4aXN0cyA9IEVYSVNUU19BRERfSUZfRElGRkVSRU5UX05FSUdIQk9SOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKCJhZGQiLCB2YWx1ZSkpCisJCWl0ZW0tPmlmX2V4aXN0cyA9IEVYSVNUU19BREQ7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoInJlcGxhY2UiLCB2YWx1ZSkpCisJCWl0ZW0tPmlmX2V4aXN0cyA9IEVYSVNUU19SRVBMQUNFOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKCJkb05vdGhpbmciLCB2YWx1ZSkpCisJCWl0ZW0tPmlmX2V4aXN0cyA9IEVYSVNUU19ET19OT1RISU5HOworCWVsc2UKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9pZl9taXNzaW5nKHN0cnVjdCBjb25mX2luZm8gKml0ZW0sIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY2FzZWNtcCgiZG9Ob3RoaW5nIiwgdmFsdWUpKQorCQlpdGVtLT5pZl9taXNzaW5nID0gTUlTU0lOR19ET19OT1RISU5HOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKCJhZGQiLCB2YWx1ZSkpCisJCWl0ZW0tPmlmX21pc3NpbmcgPSBNSVNTSU5HX0FERDsKKwllbHNlCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZHVwbGljYXRlX2NvbmYoc3RydWN0IGNvbmZfaW5mbyAqZHN0LCBzdHJ1Y3QgY29uZl9pbmZvICpzcmMpCit7CisJKmRzdCA9ICpzcmM7CisJaWYgKHNyYy0+bmFtZSkKKwkJZHN0LT5uYW1lID0geHN0cmR1cChzcmMtPm5hbWUpOworCWlmIChzcmMtPmtleSkKKwkJZHN0LT5rZXkgPSB4c3RyZHVwKHNyYy0+a2V5KTsKKwlpZiAoc3JjLT5jb21tYW5kKQorCQlkc3QtPmNvbW1hbmQgPSB4c3RyZHVwKHNyYy0+Y29tbWFuZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHJhaWxlcl9pdGVtICpnZXRfY29uZl9pdGVtKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHRyYWlsZXJfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgdHJhaWxlcl9pdGVtICpwcmV2aW91czsKKworCS8qIExvb2sgdXAgaXRlbSB3aXRoIHNhbWUgbmFtZSAqLworCWZvciAocHJldmlvdXMgPSBOVUxMLCBpdGVtID0gZmlyc3RfY29uZl9pdGVtOworCSAgICAgaXRlbTsKKwkgICAgIHByZXZpb3VzID0gaXRlbSwgaXRlbSA9IGl0ZW0tPm5leHQpIHsKKwkJaWYgKCFzdHJjYXNlY21wKGl0ZW0tPmNvbmYubmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gaXRlbTsKKwl9CisKKwkvKiBJdGVtIGRvZXMgbm90IGFscmVhZHkgZXhpc3RzLCBjcmVhdGUgaXQgKi8KKwlpdGVtID0geGNhbGxvYyhzaXplb2Yoc3RydWN0IHRyYWlsZXJfaXRlbSksIDEpOworCWR1cGxpY2F0ZV9jb25mKCZpdGVtLT5jb25mLCAmZGVmYXVsdF9jb25mX2luZm8pOworCWl0ZW0tPmNvbmYubmFtZSA9IHhzdHJkdXAobmFtZSk7CisKKwlpZiAoIXByZXZpb3VzKQorCQlmaXJzdF9jb25mX2l0ZW0gPSBpdGVtOworCWVsc2UgeworCQlwcmV2aW91cy0+bmV4dCA9IGl0ZW07CisJCWl0ZW0tPnByZXZpb3VzID0gcHJldmlvdXM7CisJfQorCisJcmV0dXJuIGl0ZW07Cit9CisKK2VudW0gdHJhaWxlcl9pbmZvX3R5cGUgeyBUUkFJTEVSX0tFWSwgVFJBSUxFUl9DT01NQU5ELCBUUkFJTEVSX1dIRVJFLAorCQkJIFRSQUlMRVJfSUZfRVhJU1RTLCBUUkFJTEVSX0lGX01JU1NJTkcgfTsKKworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwllbnVtIHRyYWlsZXJfaW5mb190eXBlIHR5cGU7Cit9IHRyYWlsZXJfY29uZmlnX2l0ZW1zW10gPSB7CisJeyAia2V5IiwgVFJBSUxFUl9LRVkgfSwKKwl7ICJjb21tYW5kIiwgVFJBSUxFUl9DT01NQU5EIH0sCisJeyAid2hlcmUiLCBUUkFJTEVSX1dIRVJFIH0sCisJeyAiaWZleGlzdHMiLCBUUkFJTEVSX0lGX0VYSVNUUyB9LAorCXsgImlmbWlzc2luZyIsIFRSQUlMRVJfSUZfTUlTU0lORyB9Cit9OworCitzdGF0aWMgaW50IGdpdF90cmFpbGVyX2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKmNvbmZfa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpCit7CisJY29uc3QgY2hhciAqdHJhaWxlcl9pdGVtLCAqdmFyaWFibGVfbmFtZTsKKworCWlmICghc2tpcF9wcmVmaXgoY29uZl9rZXksICJ0cmFpbGVyLiIsICZ0cmFpbGVyX2l0ZW0pKQorCQlyZXR1cm4gMDsKKworCXZhcmlhYmxlX25hbWUgPSBzdHJyY2hyKHRyYWlsZXJfaXRlbSwgJy4nKTsKKwlpZiAoIXZhcmlhYmxlX25hbWUpIHsKKwkJaWYgKCFzdHJjbXAodHJhaWxlcl9pdGVtLCAid2hlcmUiKSkgeworCQkJaWYgKHNldF93aGVyZSgmZGVmYXVsdF9jb25mX2luZm8sIHZhbHVlKSA8IDApCisJCQkJd2FybmluZyhfKCJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIiksCisJCQkJCXZhbHVlLCBjb25mX2tleSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0cmFpbGVyX2l0ZW0sICJpZmV4aXN0cyIpKSB7CisJCQlpZiAoc2V0X2lmX2V4aXN0cygmZGVmYXVsdF9jb25mX2luZm8sIHZhbHVlKSA8IDApCisJCQkJd2FybmluZyhfKCJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIiksCisJCQkJCXZhbHVlLCBjb25mX2tleSk7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0cmFpbGVyX2l0ZW0sICJpZm1pc3NpbmciKSkgeworCQkJaWYgKHNldF9pZl9taXNzaW5nKCZkZWZhdWx0X2NvbmZfaW5mbywgdmFsdWUpIDwgMCkKKwkJCQl3YXJuaW5nKF8oInVua25vd24gdmFsdWUgJyVzJyBmb3Iga2V5ICclcyciKSwKKwkJCQkJdmFsdWUsIGNvbmZfa2V5KTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHRyYWlsZXJfaXRlbSwgInNlcGFyYXRvcnMiKSkgeworCQkJc2VwYXJhdG9ycyA9IHhzdHJkdXAodmFsdWUpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdpdF90cmFpbGVyX2NvbmZpZyhjb25zdCBjaGFyICpjb25mX2tleSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWNvbnN0IGNoYXIgKnRyYWlsZXJfaXRlbSwgKnZhcmlhYmxlX25hbWU7CisJc3RydWN0IHRyYWlsZXJfaXRlbSAqaXRlbTsKKwlzdHJ1Y3QgY29uZl9pbmZvICpjb25mOworCWNoYXIgKm5hbWUgPSBOVUxMOworCWVudW0gdHJhaWxlcl9pbmZvX3R5cGUgdHlwZTsKKwlpbnQgaTsKKworCWlmICghc2tpcF9wcmVmaXgoY29uZl9rZXksICJ0cmFpbGVyLiIsICZ0cmFpbGVyX2l0ZW0pKQorCQlyZXR1cm4gMDsKKworCXZhcmlhYmxlX25hbWUgPSBzdHJyY2hyKHRyYWlsZXJfaXRlbSwgJy4nKTsKKwlpZiAoIXZhcmlhYmxlX25hbWUpCisJCXJldHVybiAwOworCisJdmFyaWFibGVfbmFtZSsrOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRyYWlsZXJfY29uZmlnX2l0ZW1zKTsgaSsrKSB7CisJCWlmIChzdHJjbXAodHJhaWxlcl9jb25maWdfaXRlbXNbaV0ubmFtZSwgdmFyaWFibGVfbmFtZSkpCisJCQljb250aW51ZTsKKwkJbmFtZSA9IHhzdHJuZHVwKHRyYWlsZXJfaXRlbSwgIHZhcmlhYmxlX25hbWUgLSB0cmFpbGVyX2l0ZW0gLSAxKTsKKwkJdHlwZSA9IHRyYWlsZXJfY29uZmlnX2l0ZW1zW2ldLnR5cGU7CisJCWJyZWFrOworCX0KKworCWlmICghbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlpdGVtID0gZ2V0X2NvbmZfaXRlbShuYW1lKTsKKwljb25mID0gJml0ZW0tPmNvbmY7CisJZnJlZShuYW1lKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgVFJBSUxFUl9LRVk6CisJCWlmIChjb25mLT5rZXkpCisJCQl3YXJuaW5nKF8oIm1vcmUgdGhhbiBvbmUgJXMiKSwgY29uZl9rZXkpOworCQljb25mLT5rZXkgPSB4c3RyZHVwKHZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBUUkFJTEVSX0NPTU1BTkQ6CisJCWlmIChjb25mLT5jb21tYW5kKQorCQkJd2FybmluZyhfKCJtb3JlIHRoYW4gb25lICVzIiksIGNvbmZfa2V5KTsKKwkJY29uZi0+Y29tbWFuZCA9IHhzdHJkdXAodmFsdWUpOworCQlicmVhazsKKwljYXNlIFRSQUlMRVJfV0hFUkU6CisJCWlmIChzZXRfd2hlcmUoY29uZiwgdmFsdWUpKQorCQkJd2FybmluZyhfKCJ1bmtub3duIHZhbHVlICclcycgZm9yIGtleSAnJXMnIiksIHZhbHVlLCBjb25mX2tleSk7CisJCWJyZWFrOworCWNhc2UgVFJBSUxFUl9JRl9FWElTVFM6CisJCWlmIChzZXRfaWZfZXhpc3RzKGNvbmYsIHZhbHVlKSkKKwkJCXdhcm5pbmcoXygidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIpLCB2YWx1ZSwgY29uZl9rZXkpOworCQlicmVhazsKKwljYXNlIFRSQUlMRVJfSUZfTUlTU0lORzoKKwkJaWYgKHNldF9pZl9taXNzaW5nKGNvbmYsIHZhbHVlKSkKKwkJCXdhcm5pbmcoXygidW5rbm93biB2YWx1ZSAnJXMnIGZvciBrZXkgJyVzJyIpLCB2YWx1ZSwgY29uZl9rZXkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoImludGVybmFsIGJ1ZyBpbiB0cmFpbGVyLmMiKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfdHJhaWxlcihzdHJ1Y3Qgc3RyYnVmICp0b2ssIHN0cnVjdCBzdHJidWYgKnZhbCwgY29uc3QgY2hhciAqdHJhaWxlcikKK3sKKwlzaXplX3QgbGVuOworCXN0cnVjdCBzdHJidWYgc2VwcyA9IFNUUkJVRl9JTklUOworCXN0cmJ1Zl9hZGRzdHIoJnNlcHMsIHNlcGFyYXRvcnMpOworCXN0cmJ1Zl9hZGRjaCgmc2VwcywgJz0nKTsKKwlsZW4gPSBzdHJjc3BuKHRyYWlsZXIsIHNlcHMuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2Vwcyk7CisJaWYgKGxlbiA9PSAwKSB7CisJCWludCBsID0gc3RybGVuKHRyYWlsZXIpOworCQl3aGlsZSAobCA+IDAgJiYgaXNzcGFjZSh0cmFpbGVyW2wgLSAxXSkpCisJCQlsLS07CisJCXJldHVybiBlcnJvcihfKCJlbXB0eSB0cmFpbGVyIHRva2VuIGluIHRyYWlsZXIgJyUuKnMnIiksIGwsIHRyYWlsZXIpOworCX0KKwlpZiAobGVuIDwgc3RybGVuKHRyYWlsZXIpKSB7CisJCXN0cmJ1Zl9hZGQodG9rLCB0cmFpbGVyLCBsZW4pOworCQlzdHJidWZfdHJpbSh0b2spOworCQlzdHJidWZfYWRkc3RyKHZhbCwgdHJhaWxlciArIGxlbiArIDEpOworCQlzdHJidWZfdHJpbSh2YWwpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9hZGRzdHIodG9rLCB0cmFpbGVyKTsKKwkJc3RyYnVmX3RyaW0odG9rKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp0b2tlbl9mcm9tX2l0ZW0oc3RydWN0IHRyYWlsZXJfaXRlbSAqaXRlbSwgY2hhciAqdG9rKQoreworCWlmIChpdGVtLT5jb25mLmtleSkKKwkJcmV0dXJuIGl0ZW0tPmNvbmYua2V5OworCWlmICh0b2spCisJCXJldHVybiB0b2s7CisJcmV0dXJuIGl0ZW0tPmNvbmYubmFtZTsKK30KKworc3RhdGljIHN0cnVjdCB0cmFpbGVyX2l0ZW0gKm5ld190cmFpbGVyX2l0ZW0oc3RydWN0IHRyYWlsZXJfaXRlbSAqY29uZl9pdGVtLAorCQkJCQkgICAgIGNoYXIgKnRvaywgY2hhciAqdmFsKQoreworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKm5ldyA9IHhjYWxsb2Moc2l6ZW9mKCpuZXcpLCAxKTsKKwluZXctPnZhbHVlID0gdmFsID8gdmFsIDogeHN0cmR1cCgiIik7CisKKwlpZiAoY29uZl9pdGVtKSB7CisJCWR1cGxpY2F0ZV9jb25mKCZuZXctPmNvbmYsICZjb25mX2l0ZW0tPmNvbmYpOworCQluZXctPnRva2VuID0geHN0cmR1cCh0b2tlbl9mcm9tX2l0ZW0oY29uZl9pdGVtLCB0b2spKTsKKwkJZnJlZSh0b2spOworCX0gZWxzZSB7CisJCWR1cGxpY2F0ZV9jb25mKCZuZXctPmNvbmYsICZkZWZhdWx0X2NvbmZfaW5mbyk7CisJCW5ldy0+dG9rZW4gPSB0b2s7CisJfQorCisJcmV0dXJuIG5ldzsKK30KKworc3RhdGljIGludCB0b2tlbl9tYXRjaGVzX2l0ZW0oY29uc3QgY2hhciAqdG9rLCBzdHJ1Y3QgdHJhaWxlcl9pdGVtICppdGVtLCBpbnQgdG9rX2xlbikKK3sKKwlpZiAoIXN0cm5jYXNlY21wKHRvaywgaXRlbS0+Y29uZi5uYW1lLCB0b2tfbGVuKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIGl0ZW0tPmNvbmYua2V5ID8gIXN0cm5jYXNlY21wKHRvaywgaXRlbS0+Y29uZi5rZXksIHRva19sZW4pIDogMDsKK30KKworc3RhdGljIHN0cnVjdCB0cmFpbGVyX2l0ZW0gKmNyZWF0ZV90cmFpbGVyX2l0ZW0oY29uc3QgY2hhciAqc3RyaW5nKQoreworCXN0cnVjdCBzdHJidWYgdG9rID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiB2YWwgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgdHJhaWxlcl9pdGVtICppdGVtOworCWludCB0b2tfbGVuOworCisJaWYgKHBhcnNlX3RyYWlsZXIoJnRvaywgJnZhbCwgc3RyaW5nKSkKKwkJcmV0dXJuIE5VTEw7CisKKwl0b2tfbGVuID0gdG9rZW5fbGVuX3dpdGhvdXRfc2VwYXJhdG9yKHRvay5idWYsIHRvay5sZW4pOworCisJLyogTG9va3VwIGlmIHRoZSB0b2tlbiBtYXRjaGVzIHNvbWV0aGluZyBpbiB0aGUgY29uZmlnICovCisJZm9yIChpdGVtID0gZmlyc3RfY29uZl9pdGVtOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dCkgeworCQlpZiAodG9rZW5fbWF0Y2hlc19pdGVtKHRvay5idWYsIGl0ZW0sIHRva19sZW4pKQorCQkJcmV0dXJuIG5ld190cmFpbGVyX2l0ZW0oaXRlbSwKKwkJCQkJCXN0cmJ1Zl9kZXRhY2goJnRvaywgTlVMTCksCisJCQkJCQlzdHJidWZfZGV0YWNoKCZ2YWwsIE5VTEwpKTsKKwl9CisKKwlyZXR1cm4gbmV3X3RyYWlsZXJfaXRlbShOVUxMLAorCQkJCXN0cmJ1Zl9kZXRhY2goJnRvaywgTlVMTCksCisJCQkJc3RyYnVmX2RldGFjaCgmdmFsLCBOVUxMKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF90cmFpbGVyX2l0ZW0oc3RydWN0IHRyYWlsZXJfaXRlbSAqKmZpcnN0LAorCQkJICAgICBzdHJ1Y3QgdHJhaWxlcl9pdGVtICoqbGFzdCwKKwkJCSAgICAgc3RydWN0IHRyYWlsZXJfaXRlbSAqbmV3KQoreworCWlmICghbmV3KQorCQlyZXR1cm47CisJaWYgKCEqbGFzdCkgeworCQkqZmlyc3QgPSBuZXc7CisJCSpsYXN0ID0gbmV3OworCX0gZWxzZSB7CisJCSgqbGFzdCktPm5leHQgPSBuZXc7CisJCW5ldy0+cHJldmlvdXMgPSAqbGFzdDsKKwkJKmxhc3QgPSBuZXc7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHRyYWlsZXJfaXRlbSAqcHJvY2Vzc19jb21tYW5kX2xpbmVfYXJncyhzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnRyYWlsZXJzKQoreworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKmFyZ190b2tfZmlyc3QgPSBOVUxMOworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKmFyZ190b2tfbGFzdCA9IE5VTEw7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKnRyOworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKml0ZW07CisKKwkvKiBBZGQgYSB0cmFpbGVyIGl0ZW0gZm9yIGVhY2ggY29uZmlndXJlZCB0cmFpbGVyIHdpdGggYSBjb21tYW5kICovCisJZm9yIChpdGVtID0gZmlyc3RfY29uZl9pdGVtOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dCkgeworCQlpZiAoaXRlbS0+Y29uZi5jb21tYW5kKSB7CisJCQlzdHJ1Y3QgdHJhaWxlcl9pdGVtICpuZXcgPSBuZXdfdHJhaWxlcl9pdGVtKGl0ZW0sIE5VTEwsIE5VTEwpOworCQkJYWRkX3RyYWlsZXJfaXRlbSgmYXJnX3Rva19maXJzdCwgJmFyZ190b2tfbGFzdCwgbmV3KTsKKwkJfQorCX0KKworCS8qIEFkZCBhIHRyYWlsZXIgaXRlbSBmb3IgZWFjaCB0cmFpbGVyIG9uIHRoZSBjb21tYW5kIGxpbmUgKi8KKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKHRyLCB0cmFpbGVycykgeworCQlzdHJ1Y3QgdHJhaWxlcl9pdGVtICpuZXcgPSBjcmVhdGVfdHJhaWxlcl9pdGVtKHRyLT5zdHJpbmcpOworCQlhZGRfdHJhaWxlcl9pdGVtKCZhcmdfdG9rX2ZpcnN0LCAmYXJnX3Rva19sYXN0LCBuZXcpOworCX0KKworCXJldHVybiBhcmdfdG9rX2ZpcnN0OworfQorCitzdGF0aWMgc3RydWN0IHN0cmJ1ZiAqKnJlYWRfaW5wdXRfZmlsZShjb25zdCBjaGFyICpmaWxlKQoreworCXN0cnVjdCBzdHJidWYgKipsaW5lczsKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisKKwlpZiAoZmlsZSkgeworCQlpZiAoc3RyYnVmX3JlYWRfZmlsZSgmc2IsIGZpbGUsIDApIDwgMCkKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3QgcmVhZCBpbnB1dCBmaWxlICclcyciKSwgZmlsZSk7CisJfSBlbHNlIHsKKwkJaWYgKHN0cmJ1Zl9yZWFkKCZzYiwgZmlsZW5vKHN0ZGluKSwgMCkgPCAwKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCByZWFkIGZyb20gc3RkaW4iKSk7CisJfQorCisJbGluZXMgPSBzdHJidWZfc3BsaXQoJnNiLCAnXG4nKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisKKwlyZXR1cm4gbGluZXM7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlICgwIGJhc2VkKSBpbmRleCBvZiB0aGUgc3RhcnQgb2YgdGhlIHBhdGNoIG9yIHRoZSBsaW5lCisgKiBjb3VudCBpZiB0aGVyZSBpcyBubyBwYXRjaCBpbiB0aGUgbWVzc2FnZS4KKyAqLworc3RhdGljIGludCBmaW5kX3BhdGNoX3N0YXJ0KHN0cnVjdCBzdHJidWYgKipsaW5lcywgaW50IGNvdW50KQoreworCWludCBpOworCisJLyogR2V0IHRoZSBzdGFydCBvZiB0aGUgcGF0Y2ggcGFydCBpZiBhbnkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoc3RhcnRzX3dpdGgobGluZXNbaV0tPmJ1ZiwgIi0tLSIpKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogUmV0dXJuIHRoZSAoMCBiYXNlZCkgaW5kZXggb2YgdGhlIGZpcnN0IHRyYWlsZXIgbGluZSBvciBjb3VudCBpZgorICogdGhlcmUgYXJlIG5vIHRyYWlsZXJzLiBUcmFpbGVycyBhcmUgc2VhcmNoZWQgb25seSBpbiB0aGUgbGluZXMgZnJvbQorICogaW5kZXggKGNvdW50IC0gMSkgZG93biB0byBpbmRleCAwLgorICovCitzdGF0aWMgaW50IGZpbmRfdHJhaWxlcl9zdGFydChzdHJ1Y3Qgc3RyYnVmICoqbGluZXMsIGludCBjb3VudCkKK3sKKwlpbnQgc3RhcnQsIGVuZF9vZl90aXRsZSwgb25seV9zcGFjZXMgPSAxOworCisJLyogVGhlIGZpcnN0IHBhcmFncmFwaCBpcyB0aGUgdGl0bGUgYW5kIGNhbm5vdCBiZSB0cmFpbGVycyAqLworCWZvciAoc3RhcnQgPSAwOyBzdGFydCA8IGNvdW50OyBzdGFydCsrKSB7CisJCWlmIChsaW5lc1tzdGFydF0tPmJ1ZlswXSA9PSBjb21tZW50X2xpbmVfY2hhcikKKwkJCWNvbnRpbnVlOworCQlpZiAoY29udGFpbnNfb25seV9zcGFjZXMobGluZXNbc3RhcnRdLT5idWYpKQorCQkJYnJlYWs7CisJfQorCWVuZF9vZl90aXRsZSA9IHN0YXJ0OworCisJLyoKKwkgKiBHZXQgdGhlIHN0YXJ0IG9mIHRoZSB0cmFpbGVycyBieSBsb29raW5nIHN0YXJ0aW5nIGZyb20gdGhlIGVuZAorCSAqIGZvciBhIGxpbmUgd2l0aCBvbmx5IHNwYWNlcyBiZWZvcmUgbGluZXMgd2l0aCBvbmUgc2VwYXJhdG9yLgorCSAqLworCWZvciAoc3RhcnQgPSBjb3VudCAtIDE7IHN0YXJ0ID49IGVuZF9vZl90aXRsZTsgc3RhcnQtLSkgeworCQlpZiAobGluZXNbc3RhcnRdLT5idWZbMF0gPT0gY29tbWVudF9saW5lX2NoYXIpCisJCQljb250aW51ZTsKKwkJaWYgKGNvbnRhaW5zX29ubHlfc3BhY2VzKGxpbmVzW3N0YXJ0XS0+YnVmKSkgeworCQkJaWYgKG9ubHlfc3BhY2VzKQorCQkJCWNvbnRpbnVlOworCQkJcmV0dXJuIHN0YXJ0ICsgMTsKKwkJfQorCQlpZiAoc3RyY3NwbihsaW5lc1tzdGFydF0tPmJ1Ziwgc2VwYXJhdG9ycykgPCBsaW5lc1tzdGFydF0tPmxlbikgeworCQkJaWYgKG9ubHlfc3BhY2VzKQorCQkJCW9ubHlfc3BhY2VzID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXJldHVybiBjb3VudDsKKwl9CisKKwlyZXR1cm4gb25seV9zcGFjZXMgPyBjb3VudCA6IDA7Cit9CisKKy8qIEdldCB0aGUgaW5kZXggb2YgdGhlIGVuZCBvZiB0aGUgdHJhaWxlcnMgKi8KK3N0YXRpYyBpbnQgZmluZF90cmFpbGVyX2VuZChzdHJ1Y3Qgc3RyYnVmICoqbGluZXMsIGludCBwYXRjaF9zdGFydCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJaW50IGksIGlnbm9yZV9ieXRlczsKKworCWZvciAoaSA9IDA7IGkgPCBwYXRjaF9zdGFydDsgaSsrKQorCQlzdHJidWZfYWRkYnVmKCZzYiwgbGluZXNbaV0pOworCWlnbm9yZV9ieXRlcyA9IGlnbm9yZV9ub25fdHJhaWxlcigmc2IpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJZm9yIChpID0gcGF0Y2hfc3RhcnQgLSAxOyBpID49IDAgJiYgaWdub3JlX2J5dGVzID4gMDsgaS0tKQorCQlpZ25vcmVfYnl0ZXMgLT0gbGluZXNbaV0tPmxlbjsKKworCXJldHVybiBpICsgMTsKK30KKworc3RhdGljIGludCBoYXNfYmxhbmtfbGluZV9iZWZvcmUoc3RydWN0IHN0cmJ1ZiAqKmxpbmVzLCBpbnQgc3RhcnQpCit7CisJZm9yICg7c3RhcnQgPj0gMDsgc3RhcnQtLSkgeworCQlpZiAobGluZXNbc3RhcnRdLT5idWZbMF0gPT0gY29tbWVudF9saW5lX2NoYXIpCisJCQljb250aW51ZTsKKwkJcmV0dXJuIGNvbnRhaW5zX29ubHlfc3BhY2VzKGxpbmVzW3N0YXJ0XS0+YnVmKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2xpbmVzKHN0cnVjdCBzdHJidWYgKipsaW5lcywgaW50IHN0YXJ0LCBpbnQgZW5kKQoreworCWludCBpOworCWZvciAoaSA9IHN0YXJ0OyBsaW5lc1tpXSAmJiBpIDwgZW5kOyBpKyspCisJCXByaW50ZigiJXMiLCBsaW5lc1tpXS0+YnVmKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2lucHV0X2ZpbGUoc3RydWN0IHN0cmJ1ZiAqKmxpbmVzLAorCQkJICAgICAgc3RydWN0IHRyYWlsZXJfaXRlbSAqKmluX3Rva19maXJzdCwKKwkJCSAgICAgIHN0cnVjdCB0cmFpbGVyX2l0ZW0gKippbl90b2tfbGFzdCkKK3sKKwlpbnQgY291bnQgPSAwOworCWludCBwYXRjaF9zdGFydCwgdHJhaWxlcl9zdGFydCwgdHJhaWxlcl9lbmQsIGk7CisKKwkvKiBHZXQgdGhlIGxpbmUgY291bnQgKi8KKwl3aGlsZSAobGluZXNbY291bnRdKQorCQljb3VudCsrOworCisJcGF0Y2hfc3RhcnQgPSBmaW5kX3BhdGNoX3N0YXJ0KGxpbmVzLCBjb3VudCk7CisJdHJhaWxlcl9lbmQgPSBmaW5kX3RyYWlsZXJfZW5kKGxpbmVzLCBwYXRjaF9zdGFydCk7CisJdHJhaWxlcl9zdGFydCA9IGZpbmRfdHJhaWxlcl9zdGFydChsaW5lcywgdHJhaWxlcl9lbmQpOworCisJLyogUHJpbnQgbGluZXMgYmVmb3JlIHRoZSB0cmFpbGVycyBhcyBpcyAqLworCXByaW50X2xpbmVzKGxpbmVzLCAwLCB0cmFpbGVyX3N0YXJ0KTsKKworCWlmICghaGFzX2JsYW5rX2xpbmVfYmVmb3JlKGxpbmVzLCB0cmFpbGVyX3N0YXJ0IC0gMSkpCisJCXByaW50ZigiXG4iKTsKKworCS8qIFBhcnNlIHRyYWlsZXIgbGluZXMgKi8KKwlmb3IgKGkgPSB0cmFpbGVyX3N0YXJ0OyBpIDwgdHJhaWxlcl9lbmQ7IGkrKykgeworCQlpZiAobGluZXNbaV0tPmJ1ZlswXSAhPSBjb21tZW50X2xpbmVfY2hhcikgeworCQkJc3RydWN0IHRyYWlsZXJfaXRlbSAqbmV3ID0gY3JlYXRlX3RyYWlsZXJfaXRlbShsaW5lc1tpXS0+YnVmKTsKKwkJCWFkZF90cmFpbGVyX2l0ZW0oaW5fdG9rX2ZpcnN0LCBpbl90b2tfbGFzdCwgbmV3KTsKKwkJfQorCX0KKworCXJldHVybiB0cmFpbGVyX2VuZDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9hbGwoc3RydWN0IHRyYWlsZXJfaXRlbSAqKmZpcnN0KQoreworCXdoaWxlICgqZmlyc3QpIHsKKwkJc3RydWN0IHRyYWlsZXJfaXRlbSAqaXRlbSA9IHJlbW92ZV9maXJzdChmaXJzdCk7CisJCWZyZWVfdHJhaWxlcl9pdGVtKGl0ZW0pOworCX0KK30KKwordm9pZCBwcm9jZXNzX3RyYWlsZXJzKGNvbnN0IGNoYXIgKmZpbGUsIGludCB0cmltX2VtcHR5LCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnRyYWlsZXJzKQoreworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKmluX3Rva19maXJzdCA9IE5VTEw7CisJc3RydWN0IHRyYWlsZXJfaXRlbSAqaW5fdG9rX2xhc3QgPSBOVUxMOworCXN0cnVjdCB0cmFpbGVyX2l0ZW0gKmFyZ190b2tfZmlyc3Q7CisJc3RydWN0IHN0cmJ1ZiAqKmxpbmVzOworCWludCB0cmFpbGVyX2VuZDsKKworCS8qIERlZmF1bHQgY29uZmlnIG11c3QgYmUgc2V0dXAgZmlyc3QgKi8KKwlnaXRfY29uZmlnKGdpdF90cmFpbGVyX2RlZmF1bHRfY29uZmlnLCBOVUxMKTsKKwlnaXRfY29uZmlnKGdpdF90cmFpbGVyX2NvbmZpZywgTlVMTCk7CisKKwlsaW5lcyA9IHJlYWRfaW5wdXRfZmlsZShmaWxlKTsKKworCS8qIFByaW50IHRoZSBsaW5lcyBiZWZvcmUgdGhlIHRyYWlsZXJzICovCisJdHJhaWxlcl9lbmQgPSBwcm9jZXNzX2lucHV0X2ZpbGUobGluZXMsICZpbl90b2tfZmlyc3QsICZpbl90b2tfbGFzdCk7CisKKwlhcmdfdG9rX2ZpcnN0ID0gcHJvY2Vzc19jb21tYW5kX2xpbmVfYXJncyh0cmFpbGVycyk7CisKKwlwcm9jZXNzX3RyYWlsZXJzX2xpc3RzKCZpbl90b2tfZmlyc3QsICZpbl90b2tfbGFzdCwgJmFyZ190b2tfZmlyc3QpOworCisJcHJpbnRfYWxsKGluX3Rva19maXJzdCwgdHJpbV9lbXB0eSk7CisKKwlmcmVlX2FsbCgmaW5fdG9rX2ZpcnN0KTsKKworCS8qIFByaW50IHRoZSBsaW5lcyBhZnRlciB0aGUgdHJhaWxlcnMgYXMgaXMgKi8KKwlwcmludF9saW5lcyhsaW5lcywgdHJhaWxlcl9lbmQsIElOVF9NQVgpOworCisJc3RyYnVmX2xpc3RfZnJlZShsaW5lcyk7Cit9CmRpZmYgLS1naXQgYS90cmFpbGVyLmggYi90cmFpbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViMjVkNQotLS0gL2Rldi9udWxsCisrKyBiL3RyYWlsZXIuaApAQCAtMCwwICsxLDYgQEAKKyNpZm5kZWYgVFJBSUxFUl9ICisjZGVmaW5lIFRSQUlMRVJfSAorCit2b2lkIHByb2Nlc3NfdHJhaWxlcnMoY29uc3QgY2hhciAqZmlsZSwgaW50IHRyaW1fZW1wdHksIHN0cnVjdCBzdHJpbmdfbGlzdCAqdHJhaWxlcnMpOworCisjZW5kaWYgLyogVFJBSUxFUl9IICovCmRpZmYgLS1naXQgYS90cmFuc3BvcnQtaGVscGVyLmMgYi90cmFuc3BvcnQtaGVscGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNkNTQyNwotLS0gL2Rldi9udWxsCisrKyBiL3RyYW5zcG9ydC1oZWxwZXIuYwpAQCAtMCwwICsxLDEzNzEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJyZW1vdGUuaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorI2luY2x1ZGUgInRocmVhZC11dGlscy5oIgorI2luY2x1ZGUgInNpZ2NoYWluLmgiCisjaW5jbHVkZSAiYXJndi1hcnJheS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RydWN0IGhlbHBlcl9kYXRhIHsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpoZWxwZXI7CisJRklMRSAqb3V0OworCXVuc2lnbmVkIGZldGNoIDogMSwKKwkJaW1wb3J0IDogMSwKKwkJYmlkaV9pbXBvcnQgOiAxLAorCQlleHBvcnQgOiAxLAorCQlvcHRpb24gOiAxLAorCQlwdXNoIDogMSwKKwkJY29ubmVjdCA6IDEsCisJCXNpZ25lZF90YWdzIDogMSwKKwkJY2hlY2tfY29ubmVjdGl2aXR5IDogMSwKKwkJbm9fZGlzY29ubmVjdF9yZXEgOiAxLAorCQlub19wcml2YXRlX3VwZGF0ZSA6IDE7CisJY2hhciAqZXhwb3J0X21hcmtzOworCWNoYXIgKmltcG9ydF9tYXJrczsKKwkvKiBUaGVzZSBnbyBmcm9tIHJlbW90ZSBuYW1lIChhcyBpbiAibGlzdCIpIHRvIHByaXZhdGUgbmFtZSAqLworCXN0cnVjdCByZWZzcGVjICpyZWZzcGVjczsKKwlpbnQgcmVmc3BlY19ucjsKKwkvKiBUcmFuc3BvcnQgb3B0aW9ucyBmb3IgZmV0Y2gtcGFjay9zZW5kLXBhY2sgKHNob3VsZCBvbmUgb2YKKwkgKiB0aG9zZSBiZSBpbnZva2VkKS4KKwkgKi8KKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9vcHRpb25zIHRyYW5zcG9ydF9vcHRpb25zOworfTsKKworc3RhdGljIHZvaWQgc2VuZGxpbmUoc3RydWN0IGhlbHBlcl9kYXRhICpoZWxwZXIsIHN0cnVjdCBzdHJidWYgKmJ1ZmZlcikKK3sKKwlpZiAoZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IFJlbW90ZSBoZWxwZXI6IC0+ICVzIiwgYnVmZmVyLT5idWYpOworCWlmICh3cml0ZV9pbl9mdWxsKGhlbHBlci0+aGVscGVyLT5pbiwgYnVmZmVyLT5idWYsIGJ1ZmZlci0+bGVuKQorCQkhPSBidWZmZXItPmxlbikKKwkJZGllX2Vycm5vKCJGdWxsIHdyaXRlIHRvIHJlbW90ZSBoZWxwZXIgZmFpbGVkIik7Cit9CisKK3N0YXRpYyBpbnQgcmVjdmxpbmVfZmgoRklMRSAqaGVscGVyLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RyYnVmX3Jlc2V0KGJ1ZmZlcik7CisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBSZW1vdGUgaGVscGVyOiBXYWl0aW5nLi4uXG4iKTsKKwlpZiAoc3RyYnVmX2dldGxpbmUoYnVmZmVyLCBoZWxwZXIsICdcbicpID09IEVPRikgeworCQlpZiAoZGVidWcpCisJCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBSZW1vdGUgaGVscGVyIHF1aXQuXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKGRlYnVnKQorCQlmcHJpbnRmKHN0ZGVyciwgIkRlYnVnOiBSZW1vdGUgaGVscGVyOiA8LSAlc1xuIiwgYnVmZmVyLT5idWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlY3ZsaW5lKHN0cnVjdCBoZWxwZXJfZGF0YSAqaGVscGVyLCBzdHJ1Y3Qgc3RyYnVmICpidWZmZXIpCit7CisJcmV0dXJuIHJlY3ZsaW5lX2ZoKGhlbHBlci0+b3V0LCBidWZmZXIsIGhlbHBlci0+bmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX2NvbnN0YW50KGludCBmZCwgY29uc3QgY2hhciAqc3RyKQoreworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogUmVtb3RlIGhlbHBlcjogLT4gJXMiLCBzdHIpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzdHIsIHN0cmxlbihzdHIpKSAhPSBzdHJsZW4oc3RyKSkKKwkJZGllX2Vycm5vKCJGdWxsIHdyaXRlIHRvIHJlbW90ZSBoZWxwZXIgZmFpbGVkIik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpyZW1vdmVfZXh0X2ZvcmNlKGNvbnN0IGNoYXIgKnVybCkKK3sKKwlpZiAodXJsKSB7CisJCWNvbnN0IGNoYXIgKmNvbG9uID0gc3RyY2hyKHVybCwgJzonKTsKKwkJaWYgKGNvbG9uICYmIGNvbG9uWzFdID09ICc6JykKKwkJCXJldHVybiBjb2xvbiArIDI7CisJfQorCXJldHVybiB1cmw7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3Rha2Vfb3ZlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhOworCWRhdGEgPSAoc3RydWN0IGhlbHBlcl9kYXRhICopdHJhbnNwb3J0LT5kYXRhOworCXRyYW5zcG9ydF90YWtlX292ZXIodHJhbnNwb3J0LCBkYXRhLT5oZWxwZXIpOworCWZjbG9zZShkYXRhLT5vdXQpOworCWZyZWUoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YW5kYXJkX29wdGlvbnMoc3RydWN0IHRyYW5zcG9ydCAqdCk7CisKK3N0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqZ2V0X2hlbHBlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlcjsKKwljb25zdCBjaGFyICoqcmVmc3BlY3MgPSBOVUxMOworCWludCByZWZzcGVjX25yID0gMDsKKwlpbnQgcmVmc3BlY19hbGxvYyA9IDA7CisJaW50IGR1cGVkOworCWludCBjb2RlOworCisJaWYgKGRhdGEtPmhlbHBlcikKKwkJcmV0dXJuIGRhdGEtPmhlbHBlcjsKKworCWhlbHBlciA9IHhtYWxsb2Moc2l6ZW9mKCpoZWxwZXIpKTsKKwljaGlsZF9wcm9jZXNzX2luaXQoaGVscGVyKTsKKwloZWxwZXItPmluID0gLTE7CisJaGVscGVyLT5vdXQgPSAtMTsKKwloZWxwZXItPmVyciA9IDA7CisJYXJndl9hcnJheV9wdXNoZigmaGVscGVyLT5hcmdzLCAiZ2l0LXJlbW90ZS0lcyIsIGRhdGEtPm5hbWUpOworCWFyZ3ZfYXJyYXlfcHVzaCgmaGVscGVyLT5hcmdzLCB0cmFuc3BvcnQtPnJlbW90ZS0+bmFtZSk7CisJYXJndl9hcnJheV9wdXNoKCZoZWxwZXItPmFyZ3MsIHJlbW92ZV9leHRfZm9yY2UodHJhbnNwb3J0LT51cmwpKTsKKwloZWxwZXItPmdpdF9jbWQgPSAwOworCWhlbHBlci0+c2lsZW50X2V4ZWNfZmFpbHVyZSA9IDE7CisKKwlhcmd2X2FycmF5X3B1c2hmKCZoZWxwZXItPmVudl9hcnJheSwgIiVzPSVzIiwgR0lUX0RJUl9FTlZJUk9OTUVOVCwKKwkJCSBnZXRfZ2l0X2RpcigpKTsKKworCWNvZGUgPSBzdGFydF9jb21tYW5kKGhlbHBlcik7CisJaWYgKGNvZGUgPCAwICYmIGVycm5vID09IEVOT0VOVCkKKwkJZGllKCJVbmFibGUgdG8gZmluZCByZW1vdGUgaGVscGVyIGZvciAnJXMnIiwgZGF0YS0+bmFtZSk7CisJZWxzZSBpZiAoY29kZSAhPSAwKQorCQlleGl0KGNvZGUpOworCisJZGF0YS0+aGVscGVyID0gaGVscGVyOworCWRhdGEtPm5vX2Rpc2Nvbm5lY3RfcmVxID0gMDsKKworCS8qCisJICogT3BlbiB0aGUgb3V0cHV0IGFzIEZJTEUqIHNvIHN0cmJ1Zl9nZXRsaW5lKCkgY2FuIGJlIHVzZWQuCisJICogRG8gdGhpcyB3aXRoIGR1cGVkIGZkIGJlY2F1c2UgZmNsb3NlKCkgd2lsbCBjbG9zZSB0aGUgZmQsCisJICogYW5kIHN0dWZmIGxpa2UgdGFraW5nIG92ZXIgd2lsbCByZXF1aXJlIHRoZSBmZCB0byByZW1haW4uCisJICovCisJZHVwZWQgPSBkdXAoaGVscGVyLT5vdXQpOworCWlmIChkdXBlZCA8IDApCisJCWRpZV9lcnJubygiQ2FuJ3QgZHVwIGhlbHBlciBvdXRwdXQgZmQiKTsKKwlkYXRhLT5vdXQgPSB4ZmRvcGVuKGR1cGVkLCAiciIpOworCisJd3JpdGVfY29uc3RhbnQoaGVscGVyLT5pbiwgImNhcGFiaWxpdGllc1xuIik7CisKKwl3aGlsZSAoMSkgeworCQljb25zdCBjaGFyICpjYXBuYW1lLCAqYXJnOworCQlpbnQgbWFuZGF0b3J5ID0gMDsKKwkJaWYgKHJlY3ZsaW5lKGRhdGEsICZidWYpKQorCQkJZXhpdCgxMjgpOworCisJCWlmICghKmJ1Zi5idWYpCisJCQlicmVhazsKKworCQlpZiAoKmJ1Zi5idWYgPT0gJyonKSB7CisJCQljYXBuYW1lID0gYnVmLmJ1ZiArIDE7CisJCQltYW5kYXRvcnkgPSAxOworCQl9IGVsc2UKKwkJCWNhcG5hbWUgPSBidWYuYnVmOworCisJCWlmIChkZWJ1ZykKKwkJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IEdvdCBjYXAgJXNcbiIsIGNhcG5hbWUpOworCQlpZiAoIXN0cmNtcChjYXBuYW1lLCAiZmV0Y2giKSkKKwkJCWRhdGEtPmZldGNoID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAib3B0aW9uIikpCisJCQlkYXRhLT5vcHRpb24gPSAxOworCQllbHNlIGlmICghc3RyY21wKGNhcG5hbWUsICJwdXNoIikpCisJCQlkYXRhLT5wdXNoID0gMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChjYXBuYW1lLCAiaW1wb3J0IikpCisJCQlkYXRhLT5pbXBvcnQgPSAxOworCQllbHNlIGlmICghc3RyY21wKGNhcG5hbWUsICJiaWRpLWltcG9ydCIpKQorCQkJZGF0YS0+YmlkaV9pbXBvcnQgPSAxOworCQllbHNlIGlmICghc3RyY21wKGNhcG5hbWUsICJleHBvcnQiKSkKKwkJCWRhdGEtPmV4cG9ydCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjbXAoY2FwbmFtZSwgImNoZWNrLWNvbm5lY3Rpdml0eSIpKQorCQkJZGF0YS0+Y2hlY2tfY29ubmVjdGl2aXR5ID0gMTsKKwkJZWxzZSBpZiAoIWRhdGEtPnJlZnNwZWNzICYmIHNraXBfcHJlZml4KGNhcG5hbWUsICJyZWZzcGVjICIsICZhcmcpKSB7CisJCQlBTExPQ19HUk9XKHJlZnNwZWNzLAorCQkJCSAgIHJlZnNwZWNfbnIgKyAxLAorCQkJCSAgIHJlZnNwZWNfYWxsb2MpOworCQkJcmVmc3BlY3NbcmVmc3BlY19ucisrXSA9IHhzdHJkdXAoYXJnKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGNhcG5hbWUsICJjb25uZWN0IikpIHsKKwkJCWRhdGEtPmNvbm5lY3QgPSAxOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY2FwbmFtZSwgInNpZ25lZC10YWdzIikpIHsKKwkJCWRhdGEtPnNpZ25lZF90YWdzID0gMTsKKwkJfSBlbHNlIGlmIChza2lwX3ByZWZpeChjYXBuYW1lLCAiZXhwb3J0LW1hcmtzICIsICZhcmcpKSB7CisJCQlkYXRhLT5leHBvcnRfbWFya3MgPSB4c3RyZHVwKGFyZyk7CisJCX0gZWxzZSBpZiAoc2tpcF9wcmVmaXgoY2FwbmFtZSwgImltcG9ydC1tYXJrcyAiLCAmYXJnKSkgeworCQkJZGF0YS0+aW1wb3J0X21hcmtzID0geHN0cmR1cChhcmcpOworCQl9IGVsc2UgaWYgKHN0YXJ0c193aXRoKGNhcG5hbWUsICJuby1wcml2YXRlLXVwZGF0ZSIpKSB7CisJCQlkYXRhLT5ub19wcml2YXRlX3VwZGF0ZSA9IDE7CisJCX0gZWxzZSBpZiAobWFuZGF0b3J5KSB7CisJCQlkaWUoIlVua25vd24gbWFuZGF0b3J5IGNhcGFiaWxpdHkgJXMuIFRoaXMgcmVtb3RlICIKKwkJCSAgICAiaGVscGVyIHByb2JhYmx5IG5lZWRzIG5ld2VyIHZlcnNpb24gb2YgR2l0LiIsCisJCQkgICAgY2FwbmFtZSk7CisJCX0KKwl9CisJaWYgKHJlZnNwZWNzKSB7CisJCWludCBpOworCQlkYXRhLT5yZWZzcGVjX25yID0gcmVmc3BlY19ucjsKKwkJZGF0YS0+cmVmc3BlY3MgPSBwYXJzZV9mZXRjaF9yZWZzcGVjKHJlZnNwZWNfbnIsIHJlZnNwZWNzKTsKKwkJZm9yIChpID0gMDsgaSA8IHJlZnNwZWNfbnI7IGkrKykKKwkJCWZyZWUoKGNoYXIgKilyZWZzcGVjc1tpXSk7CisJCWZyZWUocmVmc3BlY3MpOworCX0gZWxzZSBpZiAoZGF0YS0+aW1wb3J0IHx8IGRhdGEtPmJpZGlfaW1wb3J0IHx8IGRhdGEtPmV4cG9ydCkgeworCQl3YXJuaW5nKCJUaGlzIHJlbW90ZSBoZWxwZXIgc2hvdWxkIGltcGxlbWVudCByZWZzcGVjIGNhcGFiaWxpdHkuIik7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCWlmIChkZWJ1ZykKKwkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogQ2FwYWJpbGl0aWVzIGNvbXBsZXRlLlxuIik7CisJc3RhbmRhcmRfb3B0aW9ucyh0cmFuc3BvcnQpOworCXJldHVybiBkYXRhLT5oZWxwZXI7Cit9CisKK3N0YXRpYyBpbnQgZGlzY29ubmVjdF9oZWxwZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpbnQgcmVzID0gMDsKKworCWlmIChkYXRhLT5oZWxwZXIpIHsKKwkJaWYgKGRlYnVnKQorCQkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogRGlzY29ubmVjdGluZy5cbiIpOworCQlpZiAoIWRhdGEtPm5vX2Rpc2Nvbm5lY3RfcmVxKSB7CisJCQkvKgorCQkJICogSWdub3JlIHdyaXRlIGVycm9yczsgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbywKKwkJCSAqIHNpbmNlIHdlJ3JlIGFib3V0IHRvIGNsb3NlIHRoZSBwaXBlIGFueXdheS4gQW5kIHRoZQorCQkJICogbW9zdCBsaWtlbHkgZXJyb3IgaXMgRVBJUEUgZHVlIHRvIHRoZSBoZWxwZXIgZHlpbmcKKwkJCSAqIHRvIHJlcG9ydCBhbiBlcnJvciBpdHNlbGYuCisJCQkgKi8KKwkJCXNpZ2NoYWluX3B1c2goU0lHUElQRSwgU0lHX0lHTik7CisJCQl4d3JpdGUoZGF0YS0+aGVscGVyLT5pbiwgIlxuIiwgMSk7CisJCQlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisJCX0KKwkJY2xvc2UoZGF0YS0+aGVscGVyLT5pbik7CisJCWNsb3NlKGRhdGEtPmhlbHBlci0+b3V0KTsKKwkJZmNsb3NlKGRhdGEtPm91dCk7CisJCXJlcyA9IGZpbmlzaF9jb21tYW5kKGRhdGEtPmhlbHBlcik7CisJCWZyZWUoZGF0YS0+aGVscGVyKTsKKwkJZGF0YS0+aGVscGVyID0gTlVMTDsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnVuc3VwcG9ydGVkX29wdGlvbnNbXSA9IHsKKwlUUkFOU19PUFRfVVBMT0FEUEFDSywKKwlUUkFOU19PUFRfUkVDRUlWRVBBQ0ssCisJVFJBTlNfT1BUX1RISU4sCisJVFJBTlNfT1BUX0tFRVAKKwl9OworCitzdGF0aWMgY29uc3QgY2hhciAqYm9vbGVhbl9vcHRpb25zW10gPSB7CisJVFJBTlNfT1BUX1RISU4sCisJVFJBTlNfT1BUX0tFRVAsCisJVFJBTlNfT1BUX0ZPTExPV1RBR1MsCisJfTsKKworc3RhdGljIGludCBzZXRfaGVscGVyX29wdGlvbihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWludCBpLCByZXQsIGlzX2Jvb2wgPSAwOworCisJZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCisJaWYgKCFkYXRhLT5vcHRpb24pCisJCXJldHVybiAxOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodW5zdXBwb3J0ZWRfb3B0aW9ucyk7IGkrKykgeworCQlpZiAoIXN0cmNtcChuYW1lLCB1bnN1cHBvcnRlZF9vcHRpb25zW2ldKSkKKwkJCXJldHVybiAxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJvb2xlYW5fb3B0aW9ucyk7IGkrKykgeworCQlpZiAoIXN0cmNtcChuYW1lLCBib29sZWFuX29wdGlvbnNbaV0pKSB7CisJCQlpc19ib29sID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIm9wdGlvbiAlcyAiLCBuYW1lKTsKKwlpZiAoaXNfYm9vbCkKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCB2YWx1ZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCWVsc2UKKwkJcXVvdGVfY19zdHlsZSh2YWx1ZSwgJmJ1ZiwgTlVMTCwgMCk7CisJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCisJc2VuZGxpbmUoZGF0YSwgJmJ1Zik7CisJaWYgKHJlY3ZsaW5lKGRhdGEsICZidWYpKQorCQlleGl0KDEyOCk7CisKKwlpZiAoIXN0cmNtcChidWYuYnVmLCAib2siKSkKKwkJcmV0ID0gMDsKKwllbHNlIGlmIChzdGFydHNfd2l0aChidWYuYnVmLCAiZXJyb3IiKSkgeworCQlyZXQgPSAtMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLmJ1ZiwgInVuc3VwcG9ydGVkIikpCisJCXJldCA9IDE7CisJZWxzZSB7CisJCXdhcm5pbmcoIiVzIHVuZXhwZWN0ZWRseSBzYWlkOiAnJXMnIiwgZGF0YS0+bmFtZSwgYnVmLmJ1Zik7CisJCXJldCA9IDE7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0YW5kYXJkX29wdGlvbnMoc3RydWN0IHRyYW5zcG9ydCAqdCkKK3sKKwljaGFyIGJ1ZlsxNl07CisJaW50IG47CisJaW50IHYgPSB0LT52ZXJib3NlOworCisJc2V0X2hlbHBlcl9vcHRpb24odCwgInByb2dyZXNzIiwgdC0+cHJvZ3Jlc3MgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKworCW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCB2ICsgMSk7CisJaWYgKG4gPj0gc2l6ZW9mKGJ1ZikpCisJCWRpZSgiaW1wb3NzaWJseSBsYXJnZSB2ZXJib3NpdHkgdmFsdWUiKTsKKwlzZXRfaGVscGVyX29wdGlvbih0LCAidmVyYm9zaXR5IiwgYnVmKTsKK30KKworc3RhdGljIGludCByZWxlYXNlX2hlbHBlcihzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJaW50IHJlcyA9IDA7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWZyZWVfcmVmc3BlYyhkYXRhLT5yZWZzcGVjX25yLCBkYXRhLT5yZWZzcGVjcyk7CisJZGF0YS0+cmVmc3BlY3MgPSBOVUxMOworCXJlcyA9IGRpc2Nvbm5lY3RfaGVscGVyKHRyYW5zcG9ydCk7CisJZnJlZSh0cmFuc3BvcnQtPmRhdGEpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfd2l0aF9mZXRjaChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgICAgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCWludCBpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaGVhZHM7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgcmVmICpwb3NuID0gdG9fZmV0Y2hbaV07CisJCWlmIChwb3NuLT5zdGF0dXMgJiBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJY29udGludWU7CisKKwkJc3RyYnVmX2FkZGYoJmJ1ZiwgImZldGNoICVzICVzXG4iLAorCQkJICAgIHNoYTFfdG9faGV4KHBvc24tPm9sZF9zaGExKSwKKwkJCSAgICBwb3NuLT5zeW1yZWYgPyBwb3NuLT5zeW1yZWYgOiBwb3NuLT5uYW1lKTsKKwl9CisKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJ1xuJyk7CisJc2VuZGxpbmUoZGF0YSwgJmJ1Zik7CisKKwl3aGlsZSAoMSkgeworCQlpZiAocmVjdmxpbmUoZGF0YSwgJmJ1ZikpCisJCQlleGl0KDEyOCk7CisKKwkJaWYgKHN0YXJ0c193aXRoKGJ1Zi5idWYsICJsb2NrICIpKSB7CisJCQljb25zdCBjaGFyICpuYW1lID0gYnVmLmJ1ZiArIDU7CisJCQlpZiAodHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlKQorCQkJCXdhcm5pbmcoIiVzIGFsc28gbG9ja2VkICVzIiwgZGF0YS0+bmFtZSwgbmFtZSk7CisJCQllbHNlCisJCQkJdHJhbnNwb3J0LT5wYWNrX2xvY2tmaWxlID0geHN0cmR1cChuYW1lKTsKKwkJfQorCQllbHNlIGlmIChkYXRhLT5jaGVja19jb25uZWN0aXZpdHkgJiYKKwkJCSBkYXRhLT50cmFuc3BvcnRfb3B0aW9ucy5jaGVja19zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkICYmCisJCQkgIXN0cmNtcChidWYuYnVmLCAiY29ubmVjdGl2aXR5LW9rIikpCisJCQlkYXRhLT50cmFuc3BvcnRfb3B0aW9ucy5zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0gMTsKKwkJZWxzZSBpZiAoIWJ1Zi5sZW4pCisJCQlicmVhazsKKwkJZWxzZQorCQkJd2FybmluZygiJXMgdW5leHBlY3RlZGx5IHNhaWQ6ICclcyciLCBkYXRhLT5uYW1lLCBidWYuYnVmKTsKKwl9CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2ltcG9ydGVyKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmZhc3RpbXBvcnQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlciA9IGdldF9oZWxwZXIodHJhbnNwb3J0KTsKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJaW50IGNhdF9ibG9iX2ZkLCBjb2RlOworCWNoaWxkX3Byb2Nlc3NfaW5pdChmYXN0aW1wb3J0KTsKKwlmYXN0aW1wb3J0LT5pbiA9IGhlbHBlci0+b3V0OworCWFyZ3ZfYXJyYXlfcHVzaCgmZmFzdGltcG9ydC0+YXJncywgImZhc3QtaW1wb3J0Iik7CisJYXJndl9hcnJheV9wdXNoKCZmYXN0aW1wb3J0LT5hcmdzLCBkZWJ1ZyA/ICItLXN0YXRzIiA6ICItLXF1aWV0Iik7CisKKwlpZiAoZGF0YS0+YmlkaV9pbXBvcnQpIHsKKwkJY2F0X2Jsb2JfZmQgPSB4ZHVwKGhlbHBlci0+aW4pOworCQlhcmd2X2FycmF5X3B1c2hmKCZmYXN0aW1wb3J0LT5hcmdzLCAiLS1jYXQtYmxvYi1mZD0lZCIsIGNhdF9ibG9iX2ZkKTsKKwl9CisJZmFzdGltcG9ydC0+Z2l0X2NtZCA9IDE7CisKKwljb2RlID0gc3RhcnRfY29tbWFuZChmYXN0aW1wb3J0KTsKKwlyZXR1cm4gY29kZTsKK30KKworc3RhdGljIGludCBnZXRfZXhwb3J0ZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmZhc3RleHBvcnQsCisJCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJldmxpc3RfYXJncykKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlciA9IGdldF9oZWxwZXIodHJhbnNwb3J0KTsKKwlpbnQgaTsKKworCWNoaWxkX3Byb2Nlc3NfaW5pdChmYXN0ZXhwb3J0KTsKKworCS8qIHdlIG5lZWQgdG8gZHVwbGljYXRlIGhlbHBlci0+aW4gYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSBpdCBhZnRlcgorCSAqIGZhc3RleHBvcnQgaXMgZG9uZSB3aXRoIGl0LiAqLworCWZhc3RleHBvcnQtPm91dCA9IGR1cChoZWxwZXItPmluKTsKKwlhcmd2X2FycmF5X3B1c2goJmZhc3RleHBvcnQtPmFyZ3MsICJmYXN0LWV4cG9ydCIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmZmFzdGV4cG9ydC0+YXJncywgIi0tdXNlLWRvbmUtZmVhdHVyZSIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmZmFzdGV4cG9ydC0+YXJncywgZGF0YS0+c2lnbmVkX3RhZ3MgPworCQkiLS1zaWduZWQtdGFncz12ZXJiYXRpbSIgOiAiLS1zaWduZWQtdGFncz13YXJuLXN0cmlwIik7CisJaWYgKGRhdGEtPmV4cG9ydF9tYXJrcykKKwkJYXJndl9hcnJheV9wdXNoZigmZmFzdGV4cG9ydC0+YXJncywgIi0tZXhwb3J0LW1hcmtzPSVzLnRtcCIsIGRhdGEtPmV4cG9ydF9tYXJrcyk7CisJaWYgKGRhdGEtPmltcG9ydF9tYXJrcykKKwkJYXJndl9hcnJheV9wdXNoZigmZmFzdGV4cG9ydC0+YXJncywgIi0taW1wb3J0LW1hcmtzPSVzIiwgZGF0YS0+aW1wb3J0X21hcmtzKTsKKworCWZvciAoaSA9IDA7IGkgPCByZXZsaXN0X2FyZ3MtPm5yOyBpKyspCisJCWFyZ3ZfYXJyYXlfcHVzaCgmZmFzdGV4cG9ydC0+YXJncywgcmV2bGlzdF9hcmdzLT5pdGVtc1tpXS5zdHJpbmcpOworCisJZmFzdGV4cG9ydC0+Z2l0X2NtZCA9IDE7CisJcmV0dXJuIHN0YXJ0X2NvbW1hbmQoZmFzdGV4cG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfd2l0aF9pbXBvcnQoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJICAgICBpbnQgbnJfaGVhZHMsIHN0cnVjdCByZWYgKip0b19mZXRjaCkKK3sKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBmYXN0aW1wb3J0OworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpbnQgaTsKKwlzdHJ1Y3QgcmVmICpwb3NuOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisKKwlpZiAoZ2V0X2ltcG9ydGVyKHRyYW5zcG9ydCwgJmZhc3RpbXBvcnQpKQorCQlkaWUoIkNvdWxkbid0IHJ1biBmYXN0LWltcG9ydCIpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspIHsKKwkJcG9zbiA9IHRvX2ZldGNoW2ldOworCQlpZiAocG9zbi0+c3RhdHVzICYgUkVGX1NUQVRVU19VUFRPREFURSkKKwkJCWNvbnRpbnVlOworCisJCXN0cmJ1Zl9hZGRmKCZidWYsICJpbXBvcnQgJXNcbiIsCisJCQkgICAgcG9zbi0+c3ltcmVmID8gcG9zbi0+c3ltcmVmIDogcG9zbi0+bmFtZSk7CisJCXNlbmRsaW5lKGRhdGEsICZidWYpOworCQlzdHJidWZfcmVzZXQoJmJ1Zik7CisJfQorCisJd3JpdGVfY29uc3RhbnQoZGF0YS0+aGVscGVyLT5pbiwgIlxuIik7CisJLyoKKwkgKiByZW1vdGUtaGVscGVycyB0aGF0IGFkdmVydGlzZSB0aGUgYmlkaS1pbXBvcnQgY2FwYWJpbGl0eSBhcmUgcmVxdWlyZWQgdG8KKwkgKiBidWZmZXIgdGhlIGNvbXBsZXRlIGJhdGNoIG9mIGltcG9ydCBjb21tYW5kcyB1bnRpbCB0aGlzIG5ld2xpbmUgYmVmb3JlCisJICogc2VuZGluZyBkYXRhIHRvIGZhc3QtaW1wb3J0LgorCSAqIFRoZXNlIGhlbHBlcnMgcmVhZCBiYWNrIGRhdGEgZnJvbSBmYXN0LWltcG9ydCBvbiB0aGVpciBzdGRpbiwgd2hpY2ggY291bGQKKwkgKiBiZSBtaXhlZCB3aXRoIGltcG9ydCBjb21tYW5kcywgb3RoZXJ3aXNlLgorCSAqLworCisJaWYgKGZpbmlzaF9jb21tYW5kKCZmYXN0aW1wb3J0KSkKKwkJZGllKCJFcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtaW1wb3J0Iik7CisKKwkvKgorCSAqIFRoZSBmYXN0LWltcG9ydCBzdHJlYW0gb2YgYSByZW1vdGUgaGVscGVyIHRoYXQgYWR2ZXJ0aXNlcworCSAqIHRoZSAicmVmc3BlYyIgY2FwYWJpbGl0eSB3cml0ZXMgdG8gdGhlIHJlZnMgbmFtZWQgYWZ0ZXIgdGhlCisJICogcmlnaHQgaGFuZCBzaWRlIG9mIHRoZSBmaXJzdCByZWZzcGVjIG1hdGNoaW5nIGVhY2ggcmVmIHdlCisJICogd2VyZSBmZXRjaGluZy4KKwkgKgorCSAqIChJZiBubyAicmVmc3BlYyIgY2FwYWJpbGl0eSB3YXMgc3BlY2lmaWVkLCBmb3IgaGlzdG9yaWNhbAorCSAqIHJlYXNvbnMgd2UgZGVmYXVsdCB0byB0aGUgZXF1aXZhbGVudCBvZiAqOiouKQorCSAqCisJICogU3RvcmUgdGhlIHJlc3VsdCBpbiB0b19mZXRjaFtpXS5vbGRfc2hhMS4gIENhbGxlcnMgc3VjaAorCSAqIGFzICJnaXQgZmV0Y2giIGNhbiB1c2UgdGhlIHZhbHVlIHRvIHdyaXRlIGZlZWRiYWNrIHRvIHRoZQorCSAqIHRlcm1pbmFsLCBwb3B1bGF0ZSBGRVRDSF9IRUFELCBhbmQgZGV0ZXJtaW5lIHdoYXQgbmV3IHZhbHVlCisJICogc2hvdWxkIGJlIHdyaXR0ZW4gdG8gcGVlcl9yZWYgaWYgdGhlIHVwZGF0ZSBpcyBhCisJICogZmFzdC1mb3J3YXJkIG9yIHRoaXMgaXMgYSBmb3JjZWQgdXBkYXRlLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBucl9oZWFkczsgaSsrKSB7CisJCWNoYXIgKnByaXZhdGUsICpuYW1lOworCQlwb3NuID0gdG9fZmV0Y2hbaV07CisJCWlmIChwb3NuLT5zdGF0dXMgJiBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJY29udGludWU7CisJCW5hbWUgPSBwb3NuLT5zeW1yZWYgPyBwb3NuLT5zeW1yZWYgOiBwb3NuLT5uYW1lOworCQlpZiAoZGF0YS0+cmVmc3BlY3MpCisJCQlwcml2YXRlID0gYXBwbHlfcmVmc3BlY3MoZGF0YS0+cmVmc3BlY3MsIGRhdGEtPnJlZnNwZWNfbnIsIG5hbWUpOworCQllbHNlCisJCQlwcml2YXRlID0geHN0cmR1cChuYW1lKTsKKwkJaWYgKHByaXZhdGUpIHsKKwkJCWlmIChyZWFkX3JlZihwcml2YXRlLCBwb3NuLT5vbGRfc2hhMSkgPCAwKQorCQkJCWRpZSgiQ291bGQgbm90IHJlYWQgcmVmICVzIiwgcHJpdmF0ZSk7CisJCQlmcmVlKHByaXZhdGUpOworCQl9CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfY29ubmVjdF9zZXJ2aWNlKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpleGVjKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3Qgc3RyYnVmIGNtZGJ1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpoZWxwZXI7CisJaW50IHIsIGR1cGVkLCByZXQgPSAwOworCUZJTEUgKmlucHV0OworCisJaGVscGVyID0gZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCisJLyoKKwkgKiBZZXMsIGR1cCB0aGUgcGlwZSBhbm90aGVyIHRpbWUsIGFzIHdlIG5lZWQgdW5idWZmZXJlZCB2ZXJzaW9uCisJICogb2YgaW5wdXQgcGlwZSBhcyBGSUxFKi4gZmNsb3NlKCkgY2xvc2VzIHRoZSB1bmRlcmx5aW5nIGZkIGFuZAorCSAqIHN0cmVhbSBidWZmZXJpbmcgb25seSBjYW4gYmUgY2hhbmdlZCBiZWZvcmUgZmlyc3QgSS9PIG9wZXJhdGlvbgorCSAqIG9uIGl0LgorCSAqLworCWR1cGVkID0gZHVwKGhlbHBlci0+b3V0KTsKKwlpZiAoZHVwZWQgPCAwKQorCQlkaWVfZXJybm8oIkNhbid0IGR1cCBoZWxwZXIgb3V0cHV0IGZkIik7CisJaW5wdXQgPSB4ZmRvcGVuKGR1cGVkLCAiciIpOworCXNldHZidWYoaW5wdXQsIE5VTEwsIF9JT05CRiwgMCk7CisKKwkvKgorCSAqIEhhbmRsZSAtLXVwbG9hZC1wYWNrIGFuZCBmcmllbmRzLiBUaGlzIGlzIGZpcmUgYW5kIGZvcmdldC4uLgorCSAqIGp1c3Qgd2FybiBpZiBpdCBmYWlscy4KKwkgKi8KKwlpZiAoc3RyY21wKG5hbWUsIGV4ZWMpKSB7CisJCXIgPSBzZXRfaGVscGVyX29wdGlvbih0cmFuc3BvcnQsICJzZXJ2cGF0aCIsIGV4ZWMpOworCQlpZiAociA+IDApCisJCQl3YXJuaW5nKCJTZXR0aW5nIHJlbW90ZSBzZXJ2aWNlIHBhdGggbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbC4iKTsKKwkJZWxzZSBpZiAociA8IDApCisJCQl3YXJuaW5nKCJJbnZhbGlkIHJlbW90ZSBzZXJ2aWNlIHBhdGguIik7CisJfQorCisJaWYgKGRhdGEtPmNvbm5lY3QpCisJCXN0cmJ1Zl9hZGRmKCZjbWRidWYsICJjb25uZWN0ICVzXG4iLCBuYW1lKTsKKwllbHNlCisJCWdvdG8gZXhpdDsKKworCXNlbmRsaW5lKGRhdGEsICZjbWRidWYpOworCWlmIChyZWN2bGluZV9maChpbnB1dCwgJmNtZGJ1ZiwgbmFtZSkpCisJCWV4aXQoMTI4KTsKKworCWlmICghc3RyY21wKGNtZGJ1Zi5idWYsICIiKSkgeworCQlkYXRhLT5ub19kaXNjb25uZWN0X3JlcSA9IDE7CisJCWlmIChkZWJ1ZykKKwkJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IFNtYXJ0IHRyYW5zcG9ydCBjb25uZWN0aW9uICIKKwkJCQkicmVhZHkuXG4iKTsKKwkJcmV0ID0gMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoY21kYnVmLmJ1ZiwgImZhbGxiYWNrIikpIHsKKwkJaWYgKGRlYnVnKQorCQkJZnByaW50ZihzdGRlcnIsICJEZWJ1ZzogRmFsbGluZyBiYWNrIHRvIGR1bWIgIgorCQkJCSJ0cmFuc3BvcnQuXG4iKTsKKwl9IGVsc2UKKwkJZGllKCJVbmtub3duIHJlc3BvbnNlIHRvIGNvbm5lY3Q6ICVzIiwKKwkJCWNtZGJ1Zi5idWYpOworCitleGl0OgorCWZjbG9zZShpbnB1dCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJCSAgICAgaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmV4ZWM7CisKKwluYW1lID0gZm9yX3B1c2ggPyAiZ2l0LXJlY2VpdmUtcGFjayIgOiAiZ2l0LXVwbG9hZC1wYWNrIjsKKwlpZiAoZm9yX3B1c2gpCisJCWV4ZWMgPSBkYXRhLT50cmFuc3BvcnRfb3B0aW9ucy5yZWNlaXZlcGFjazsKKwllbHNlCisJCWV4ZWMgPSBkYXRhLT50cmFuc3BvcnRfb3B0aW9ucy51cGxvYWRwYWNrOworCisJcmV0dXJuIHByb2Nlc3NfY29ubmVjdF9zZXJ2aWNlKHRyYW5zcG9ydCwgbmFtZSwgZXhlYyk7Cit9CisKK3N0YXRpYyBpbnQgY29ubmVjdF9oZWxwZXIoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICBjb25zdCBjaGFyICpleGVjLCBpbnQgZmRbMl0pCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCisJLyogR2V0X2hlbHBlciBzbyBjb25uZWN0IGlzIGluaXRlZC4gKi8KKwlnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisJaWYgKCFkYXRhLT5jb25uZWN0KQorCQlkaWUoIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHByb3RvY29sLiIpOworCisJaWYgKCFwcm9jZXNzX2Nvbm5lY3Rfc2VydmljZSh0cmFuc3BvcnQsIG5hbWUsIGV4ZWMpKQorCQlkaWUoIkNhbid0IGNvbm5lY3QgdG8gc3Vic2VydmljZSAlcy4iLCBuYW1lKTsKKworCWZkWzBdID0gZGF0YS0+aGVscGVyLT5vdXQ7CisJZmRbMV0gPSBkYXRhLT5oZWxwZXItPmluOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZldGNoKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJIGludCBucl9oZWFkcywgc3RydWN0IHJlZiAqKnRvX2ZldGNoKQoreworCXN0cnVjdCBoZWxwZXJfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpbnQgaSwgY291bnQ7CisKKwlpZiAocHJvY2Vzc19jb25uZWN0KHRyYW5zcG9ydCwgMCkpIHsKKwkJZG9fdGFrZV9vdmVyKHRyYW5zcG9ydCk7CisJCXJldHVybiB0cmFuc3BvcnQtPmZldGNoKHRyYW5zcG9ydCwgbnJfaGVhZHMsIHRvX2ZldGNoKTsKKwl9CisKKwljb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IG5yX2hlYWRzOyBpKyspCisJCWlmICghKHRvX2ZldGNoW2ldLT5zdGF0dXMgJiBSRUZfU1RBVFVTX1VQVE9EQVRFKSkKKwkJCWNvdW50Kys7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCWlmIChkYXRhLT5jaGVja19jb25uZWN0aXZpdHkgJiYKKwkgICAgZGF0YS0+dHJhbnNwb3J0X29wdGlvbnMuY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCkKKwkJc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCAiY2hlY2stY29ubmVjdGl2aXR5IiwgInRydWUiKTsKKworCWlmICh0cmFuc3BvcnQtPmNsb25pbmcpCisJCXNldF9oZWxwZXJfb3B0aW9uKHRyYW5zcG9ydCwgImNsb25pbmciLCAidHJ1ZSIpOworCisJaWYgKGRhdGEtPnRyYW5zcG9ydF9vcHRpb25zLnVwZGF0ZV9zaGFsbG93KQorCQlzZXRfaGVscGVyX29wdGlvbih0cmFuc3BvcnQsICJ1cGRhdGUtc2hhbGxvdyIsICJ0cnVlIik7CisKKwlpZiAoZGF0YS0+ZmV0Y2gpCisJCXJldHVybiBmZXRjaF93aXRoX2ZldGNoKHRyYW5zcG9ydCwgbnJfaGVhZHMsIHRvX2ZldGNoKTsKKworCWlmIChkYXRhLT5pbXBvcnQpCisJCXJldHVybiBmZXRjaF93aXRoX2ltcG9ydCh0cmFuc3BvcnQsIG5yX2hlYWRzLCB0b19mZXRjaCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF91cGRhdGVfcmVmX3N0YXR1cyhzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCQkJICAgc3RydWN0IHJlZiAqKnJlZiwKKwkJCQkgICBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcykKK3sKKwljaGFyICpyZWZuYW1lLCAqbXNnOworCWludCBzdGF0dXMsIGZvcmNlZCA9IDA7CisKKwlpZiAoc3RhcnRzX3dpdGgoYnVmLT5idWYsICJvayAiKSkgeworCQlzdGF0dXMgPSBSRUZfU1RBVFVTX09LOworCQlyZWZuYW1lID0gYnVmLT5idWYgKyAzOworCX0gZWxzZSBpZiAoc3RhcnRzX3dpdGgoYnVmLT5idWYsICJlcnJvciAiKSkgeworCQlzdGF0dXMgPSBSRUZfU1RBVFVTX1JFTU9URV9SRUpFQ1Q7CisJCXJlZm5hbWUgPSBidWYtPmJ1ZiArIDY7CisJfSBlbHNlCisJCWRpZSgiZXhwZWN0ZWQgb2svZXJyb3IsIGhlbHBlciBzYWlkICclcyciLCBidWYtPmJ1Zik7CisKKwltc2cgPSBzdHJjaHIocmVmbmFtZSwgJyAnKTsKKwlpZiAobXNnKSB7CisJCXN0cnVjdCBzdHJidWYgbXNnX2J1ZiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICplbmQ7CisKKwkJKm1zZysrID0gJ1wwJzsKKwkJaWYgKCF1bnF1b3RlX2Nfc3R5bGUoJm1zZ19idWYsIG1zZywgJmVuZCkpCisJCQltc2cgPSBzdHJidWZfZGV0YWNoKCZtc2dfYnVmLCBOVUxMKTsKKwkJZWxzZQorCQkJbXNnID0geHN0cmR1cChtc2cpOworCQlzdHJidWZfcmVsZWFzZSgmbXNnX2J1Zik7CisKKwkJaWYgKCFzdHJjbXAobXNnLCAibm8gbWF0Y2giKSkgeworCQkJc3RhdHVzID0gUkVGX1NUQVRVU19OT05FOworCQkJZnJlZShtc2cpOworCQkJbXNnID0gTlVMTDsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG1zZywgInVwIHRvIGRhdGUiKSkgeworCQkJc3RhdHVzID0gUkVGX1NUQVRVU19VUFRPREFURTsKKwkJCWZyZWUobXNnKTsKKwkJCW1zZyA9IE5VTEw7CisJCX0KKwkJZWxzZSBpZiAoIXN0cmNtcChtc2csICJub24tZmFzdCBmb3J3YXJkIikpIHsKKwkJCXN0YXR1cyA9IFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOworCQkJZnJlZShtc2cpOworCQkJbXNnID0gTlVMTDsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG1zZywgImFscmVhZHkgZXhpc3RzIikpIHsKKwkJCXN0YXR1cyA9IFJFRl9TVEFUVVNfUkVKRUNUX0FMUkVBRFlfRVhJU1RTOworCQkJZnJlZShtc2cpOworCQkJbXNnID0gTlVMTDsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG1zZywgImZldGNoIGZpcnN0IikpIHsKKwkJCXN0YXR1cyA9IFJFRl9TVEFUVVNfUkVKRUNUX0ZFVENIX0ZJUlNUOworCQkJZnJlZShtc2cpOworCQkJbXNnID0gTlVMTDsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG1zZywgIm5lZWRzIGZvcmNlIikpIHsKKwkJCXN0YXR1cyA9IFJFRl9TVEFUVVNfUkVKRUNUX05FRURTX0ZPUkNFOworCQkJZnJlZShtc2cpOworCQkJbXNnID0gTlVMTDsKKwkJfQorCQllbHNlIGlmICghc3RyY21wKG1zZywgInN0YWxlIGluZm8iKSkgeworCQkJc3RhdHVzID0gUkVGX1NUQVRVU19SRUpFQ1RfU1RBTEU7CisJCQlmcmVlKG1zZyk7CisJCQltc2cgPSBOVUxMOworCQl9CisJCWVsc2UgaWYgKCFzdHJjbXAobXNnLCAiZm9yY2VkIHVwZGF0ZSIpKSB7CisJCQlmb3JjZWQgPSAxOworCQkJZnJlZShtc2cpOworCQkJbXNnID0gTlVMTDsKKwkJfQorCX0KKworCWlmICgqcmVmKQorCQkqcmVmID0gZmluZF9yZWZfYnlfbmFtZSgqcmVmLCByZWZuYW1lKTsKKwlpZiAoISpyZWYpCisJCSpyZWYgPSBmaW5kX3JlZl9ieV9uYW1lKHJlbW90ZV9yZWZzLCByZWZuYW1lKTsKKwlpZiAoISpyZWYpIHsKKwkJd2FybmluZygiaGVscGVyIHJlcG9ydGVkIHVuZXhwZWN0ZWQgc3RhdHVzIG9mICVzIiwgcmVmbmFtZSk7CisJCXJldHVybiAxOworCX0KKworCWlmICgoKnJlZiktPnN0YXR1cyAhPSBSRUZfU1RBVFVTX05PTkUpIHsKKwkJLyoKKwkJICogRWFybGllciwgdGhlIHJlZiB3YXMgbWFya2VkIG5vdCB0byBiZSBwdXNoZWQsIHNvIGlnbm9yZSB0aGUgcmVmCisJCSAqIHN0YXR1cyByZXBvcnRlZCBieSB0aGUgcmVtb3RlIGhlbHBlciBpZiB0aGUgbGF0dGVyIGlzICdubyBtYXRjaCcuCisJCSAqLworCQlpZiAoc3RhdHVzID09IFJFRl9TVEFUVVNfTk9ORSkKKwkJCXJldHVybiAxOworCX0KKworCSgqcmVmKS0+c3RhdHVzID0gc3RhdHVzOworCSgqcmVmKS0+Zm9yY2VkX3VwZGF0ZSB8PSBmb3JjZWQ7CisJKCpyZWYpLT5yZW1vdGVfc3RhdHVzID0gbXNnOworCXJldHVybiAhKHN0YXR1cyA9PSBSRUZfU1RBVFVTX09LKTsKK30KKworc3RhdGljIGludCBwdXNoX3VwZGF0ZV9yZWZzX3N0YXR1cyhzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEsCisJCQkJICAgIHN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLAorCQkJCSAgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmICpyZWYgPSByZW1vdGVfcmVmczsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoOzspIHsKKwkJY2hhciAqcHJpdmF0ZTsKKworCQlpZiAocmVjdmxpbmUoZGF0YSwgJmJ1ZikpIHsKKwkJCXJldCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCWlmICghYnVmLmxlbikKKwkJCWJyZWFrOworCisJCWlmIChwdXNoX3VwZGF0ZV9yZWZfc3RhdHVzKCZidWYsICZyZWYsIHJlbW90ZV9yZWZzKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU4gfHwgIWRhdGEtPnJlZnNwZWNzIHx8IGRhdGEtPm5vX3ByaXZhdGVfdXBkYXRlKQorCQkJY29udGludWU7CisKKwkJLyogcHJvcGFnYXRlIGJhY2sgdGhlIHVwZGF0ZSB0byB0aGUgcmVtb3RlIG5hbWVzcGFjZSAqLworCQlwcml2YXRlID0gYXBwbHlfcmVmc3BlY3MoZGF0YS0+cmVmc3BlY3MsIGRhdGEtPnJlZnNwZWNfbnIsIHJlZi0+bmFtZSk7CisJCWlmICghcHJpdmF0ZSkKKwkJCWNvbnRpbnVlOworCQl1cGRhdGVfcmVmKCJ1cGRhdGUgYnkgaGVscGVyIiwgcHJpdmF0ZSwgcmVmLT5uZXdfc2hhMSwgTlVMTCwgMCwgMCk7CisJCWZyZWUocHJpdmF0ZSk7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9jb21tb25fcHVzaF9vcHRpb25zKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCit7CisJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRFJZX1JVTikgeworCQlpZiAoc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCAiZHJ5LXJ1biIsICJ0cnVlIikgIT0gMCkKKwkJCWRpZSgiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgZHJ5LXJ1biIsIG5hbWUpOworCX0gZWxzZSBpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9DRVJUX0FMV0FZUykgeworCQlpZiAoc2V0X2hlbHBlcl9vcHRpb24odHJhbnNwb3J0LCBUUkFOU19PUFRfUFVTSF9DRVJULCAidHJ1ZSIpICE9IDApCisJCQlkaWUoImhlbHBlciAlcyBkb2VzIG5vdCBzdXBwb3J0IC0tc2lnbmVkIiwgbmFtZSk7CisJfSBlbHNlIGlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0NFUlRfSUZfQVNLRUQpIHsKKwkJaWYgKHNldF9oZWxwZXJfb3B0aW9uKHRyYW5zcG9ydCwgVFJBTlNfT1BUX1BVU0hfQ0VSVCwgImlmLWFza2VkIikgIT0gMCkKKwkJCWRpZSgiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgLS1zaWduZWQ9aWYtYXNrZWQiLCBuYW1lKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHVzaF9yZWZzX3dpdGhfcHVzaChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgICAgICAgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIGludCBmbGFncykKK3sKKwlpbnQgZm9yY2VfYWxsID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9GT1JDRTsKKwlpbnQgbWlycm9yID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9NSVJST1I7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlZiAqcmVmOworCXN0cnVjdCBzdHJpbmdfbGlzdCBjYXNfb3B0aW9ucyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICpjYXNfb3B0aW9uOworCisJZ2V0X2hlbHBlcih0cmFuc3BvcnQpOworCWlmICghZGF0YS0+cHVzaCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAoIXJlZi0+cGVlcl9yZWYgJiYgIW1pcnJvcikKKwkJCWNvbnRpbnVlOworCisJCS8qIENoZWNrIGZvciBzdGF0dXNlcyBzZXQgYnkgc2V0X3JlZl9zdGF0dXNfZm9yX3B1c2goKSAqLworCQlzd2l0Y2ggKHJlZi0+c3RhdHVzKSB7CisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQ6CisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfU1RBTEU6CisJCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfQUxSRUFEWV9FWElTVFM6CisJCWNhc2UgUkVGX1NUQVRVU19VUFRPREFURToKKwkJCWNvbnRpbnVlOworCQlkZWZhdWx0OgorCQkJOyAvKiBkbyBub3RoaW5nICovCisJCX0KKworCQlpZiAoZm9yY2VfYWxsKQorCQkJcmVmLT5mb3JjZSA9IDE7CisKKwkJc3RyYnVmX2FkZHN0cigmYnVmLCAicHVzaCAiKTsKKwkJaWYgKCFyZWYtPmRlbGV0aW9uKSB7CisJCQlpZiAocmVmLT5mb3JjZSkKKwkJCQlzdHJidWZfYWRkY2goJmJ1ZiwgJysnKTsKKwkJCWlmIChyZWYtPnBlZXJfcmVmKQorCQkJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcmVmLT5wZWVyX3JlZi0+bmFtZSk7CisJCQllbHNlCisJCQkJc3RyYnVmX2FkZHN0cigmYnVmLCBzaGExX3RvX2hleChyZWYtPm5ld19zaGExKSk7CisJCX0KKwkJc3RyYnVmX2FkZGNoKCZidWYsICc6Jyk7CisJCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcmVmLT5uYW1lKTsKKwkJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCisJCS8qCisJCSAqIFRoZSAiLS1mb3JjZS13aXRoLWxlYXNlIiBvcHRpb25zIHdpdGhvdXQgZXhwbGljaXQKKwkJICogdmFsdWVzIHRvIGV4cGVjdCBoYXZlIGFscmVhZHkgYmVlbiBleHBhbmRlZCBpbnRvCisJCSAqIHRoZSByZWYtPm9sZF9zaGExX2V4cGVjdFtdIGZpZWxkOyB3ZSBjYW4gaWdub3JlCisJCSAqIHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucy0+Y2FzIGFsdG9nZXRoZXIgYW5kIGluc3RlYWQKKwkJICogY2FuIGVudW1lcmF0ZSB0aGVtIGZyb20gdGhlIHJlZnMuCisJCSAqLworCQlpZiAocmVmLT5leHBlY3Rfb2xkX3NoYTEpIHsKKwkJCXN0cnVjdCBzdHJidWYgY2FzID0gU1RSQlVGX0lOSVQ7CisJCQlzdHJidWZfYWRkZigmY2FzLCAiJXM6JXMiLAorCQkJCSAgICByZWYtPm5hbWUsIHNoYTFfdG9faGV4KHJlZi0+b2xkX3NoYTFfZXhwZWN0KSk7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJmNhc19vcHRpb25zLCBzdHJidWZfZGV0YWNoKCZjYXMsIE5VTEwpKTsKKwkJfQorCX0KKwlpZiAoYnVmLmxlbiA9PSAwKSB7CisJCXN0cmluZ19saXN0X2NsZWFyKCZjYXNfb3B0aW9ucywgMCk7CisJCXJldHVybiAwOworCX0KKworCWZvcl9lYWNoX3N0cmluZ19saXN0X2l0ZW0oY2FzX29wdGlvbiwgJmNhc19vcHRpb25zKQorCQlzZXRfaGVscGVyX29wdGlvbih0cmFuc3BvcnQsICJjYXMiLCBjYXNfb3B0aW9uLT5zdHJpbmcpOworCXNldF9jb21tb25fcHVzaF9vcHRpb25zKHRyYW5zcG9ydCwgZGF0YS0+bmFtZSwgZmxhZ3MpOworCisJc3RyYnVmX2FkZGNoKCZidWYsICdcbicpOworCXNlbmRsaW5lKGRhdGEsICZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCisJcmV0dXJuIHB1c2hfdXBkYXRlX3JlZnNfc3RhdHVzKGRhdGEsIHJlbW90ZV9yZWZzLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcHVzaF9yZWZzX3dpdGhfZXhwb3J0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlciwgZXhwb3J0ZXI7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCBzdHJpbmdfbGlzdCByZXZsaXN0X2FyZ3MgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCisJaWYgKCFkYXRhLT5yZWZzcGVjcykKKwkJZGllKCJyZW1vdGUtaGVscGVyIGRvZXNuJ3Qgc3VwcG9ydCBwdXNoOyByZWZzcGVjIG5lZWRlZCIpOworCisJc2V0X2NvbW1vbl9wdXNoX29wdGlvbnModHJhbnNwb3J0LCBkYXRhLT5uYW1lLCBmbGFncyk7CisJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRk9SQ0UpIHsKKwkJaWYgKHNldF9oZWxwZXJfb3B0aW9uKHRyYW5zcG9ydCwgImZvcmNlIiwgInRydWUiKSAhPSAwKQorCQkJd2FybmluZygiaGVscGVyICVzIGRvZXMgbm90IHN1cHBvcnQgJ2ZvcmNlJyIsIGRhdGEtPm5hbWUpOworCX0KKworCWhlbHBlciA9IGdldF9oZWxwZXIodHJhbnNwb3J0KTsKKworCXdyaXRlX2NvbnN0YW50KGhlbHBlci0+aW4sICJleHBvcnRcbiIpOworCisJZm9yIChyZWYgPSByZW1vdGVfcmVmczsgcmVmOyByZWYgPSByZWYtPm5leHQpIHsKKwkJY2hhciAqcHJpdmF0ZTsKKwkJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCQlwcml2YXRlID0gYXBwbHlfcmVmc3BlY3MoZGF0YS0+cmVmc3BlY3MsIGRhdGEtPnJlZnNwZWNfbnIsIHJlZi0+bmFtZSk7CisJCWlmIChwcml2YXRlICYmICFnZXRfc2hhMShwcml2YXRlLCBzaGExKSkgeworCQkJc3RyYnVmX2FkZGYoJmJ1ZiwgIl4lcyIsIHByaXZhdGUpOworCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZXZsaXN0X2FyZ3MsIHN0cmJ1Zl9kZXRhY2goJmJ1ZiwgTlVMTCkpOworCQkJaGFzaGNweShyZWYtPm9sZF9zaGExLCBzaGExKTsKKwkJfQorCQlmcmVlKHByaXZhdGUpOworCisJCWlmIChyZWYtPnBlZXJfcmVmKSB7CisJCQlpZiAoc3RyY21wKHJlZi0+bmFtZSwgcmVmLT5wZWVyX3JlZi0+bmFtZSkpIHsKKwkJCQlpZiAoIXJlZi0+ZGVsZXRpb24pIHsKKwkJCQkJY29uc3QgY2hhciAqbmFtZTsKKwkJCQkJaW50IGZsYWc7CisKKwkJCQkJLyogRm9sbG93IHN5bWJvbGljIHJlZnMgKG1haW5seSBmb3IgSEVBRCkuICovCisJCQkJCW5hbWUgPSByZXNvbHZlX3JlZl91bnNhZmUoCisJCQkJCQkgcmVmLT5wZWVyX3JlZi0+bmFtZSwKKwkJCQkJCSBSRVNPTFZFX1JFRl9SRUFESU5HLAorCQkJCQkJIHNoYTEsICZmbGFnKTsKKwkJCQkJaWYgKCFuYW1lIHx8ICEoZmxhZyAmIFJFRl9JU1NZTVJFRikpCisJCQkJCQluYW1lID0gcmVmLT5wZWVyX3JlZi0+bmFtZTsKKworCQkJCQlzdHJidWZfYWRkZigmYnVmLCAiJXM6JXMiLCBuYW1lLCByZWYtPm5hbWUpOworCQkJCX0gZWxzZQorCQkJCQlzdHJidWZfYWRkZigmYnVmLCAiOiVzIiwgcmVmLT5uYW1lKTsKKworCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmV2bGlzdF9hcmdzLCAiLS1yZWZzcGVjIik7CisJCQkJc3RyaW5nX2xpc3RfYXBwZW5kKCZyZXZsaXN0X2FyZ3MsIGJ1Zi5idWYpOworCQkJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQkJfQorCQkJaWYgKCFyZWYtPmRlbGV0aW9uKQorCQkJCXN0cmluZ19saXN0X2FwcGVuZCgmcmV2bGlzdF9hcmdzLCByZWYtPnBlZXJfcmVmLT5uYW1lKTsKKwkJfQorCX0KKworCWlmIChnZXRfZXhwb3J0ZXIodHJhbnNwb3J0LCAmZXhwb3J0ZXIsICZyZXZsaXN0X2FyZ3MpKQorCQlkaWUoIkNvdWxkbid0IHJ1biBmYXN0LWV4cG9ydCIpOworCisJc3RyaW5nX2xpc3RfY2xlYXIoJnJldmxpc3RfYXJncywgMSk7CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJmV4cG9ydGVyKSkKKwkJZGllKCJFcnJvciB3aGlsZSBydW5uaW5nIGZhc3QtZXhwb3J0Iik7CisJaWYgKHB1c2hfdXBkYXRlX3JlZnNfc3RhdHVzKGRhdGEsIHJlbW90ZV9yZWZzLCBmbGFncykpCisJCXJldHVybiAxOworCisJaWYgKGRhdGEtPmV4cG9ydF9tYXJrcykgeworCQlzdHJidWZfYWRkZigmYnVmLCAiJXMudG1wIiwgZGF0YS0+ZXhwb3J0X21hcmtzKTsKKwkJcmVuYW1lKGJ1Zi5idWYsIGRhdGEtPmV4cG9ydF9tYXJrcyk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB1c2hfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCXN0cnVjdCByZWYgKnJlbW90ZV9yZWZzLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCisJaWYgKHByb2Nlc3NfY29ubmVjdCh0cmFuc3BvcnQsIDEpKSB7CisJCWRvX3Rha2Vfb3Zlcih0cmFuc3BvcnQpOworCQlyZXR1cm4gdHJhbnNwb3J0LT5wdXNoX3JlZnModHJhbnNwb3J0LCByZW1vdGVfcmVmcywgZmxhZ3MpOworCX0KKworCWlmICghcmVtb3RlX3JlZnMpIHsKKwkJZnByaW50ZihzdGRlcnIsICJObyByZWZzIGluIGNvbW1vbiBhbmQgbm9uZSBzcGVjaWZpZWQ7IGRvaW5nIG5vdGhpbmcuXG4iCisJCQkiUGVyaGFwcyB5b3Ugc2hvdWxkIHNwZWNpZnkgYSBicmFuY2ggc3VjaCBhcyAnbWFzdGVyJy5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGF0YS0+cHVzaCkKKwkJcmV0dXJuIHB1c2hfcmVmc193aXRoX3B1c2godHJhbnNwb3J0LCByZW1vdGVfcmVmcywgZmxhZ3MpOworCisJaWYgKGRhdGEtPmV4cG9ydCkKKwkJcmV0dXJuIHB1c2hfcmVmc193aXRoX2V4cG9ydCh0cmFuc3BvcnQsIHJlbW90ZV9yZWZzLCBmbGFncyk7CisKKwlyZXR1cm4gLTE7Cit9CisKKworc3RhdGljIGludCBoYXNfYXR0cmlidXRlKGNvbnN0IGNoYXIgKmF0dHJzLCBjb25zdCBjaGFyICphdHRyKSB7CisJaW50IGxlbjsKKwlpZiAoIWF0dHJzKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHN0cmxlbihhdHRyKTsKKwlmb3IgKDs7KSB7CisJCWNvbnN0IGNoYXIgKnNwYWNlID0gc3RyY2hybnVsKGF0dHJzLCAnICcpOworCQlpZiAobGVuID09IHNwYWNlIC0gYXR0cnMgJiYgIXN0cm5jbXAoYXR0cnMsIGF0dHIsIGxlbikpCisJCQlyZXR1cm4gMTsKKwkJaWYgKCEqc3BhY2UpCisJCQlyZXR1cm4gMDsKKwkJYXR0cnMgPSBzcGFjZSArIDE7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfbGlzdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCBmb3JfcHVzaCkKK3sKKwlzdHJ1Y3QgaGVscGVyX2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgKmhlbHBlcjsKKwlzdHJ1Y3QgcmVmICpyZXQgPSBOVUxMOworCXN0cnVjdCByZWYgKip0YWlsID0gJnJldDsKKwlzdHJ1Y3QgcmVmICpwb3NuOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwloZWxwZXIgPSBnZXRfaGVscGVyKHRyYW5zcG9ydCk7CisKKwlpZiAocHJvY2Vzc19jb25uZWN0KHRyYW5zcG9ydCwgZm9yX3B1c2gpKSB7CisJCWRvX3Rha2Vfb3Zlcih0cmFuc3BvcnQpOworCQlyZXR1cm4gdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCwgZm9yX3B1c2gpOworCX0KKworCWlmIChkYXRhLT5wdXNoICYmIGZvcl9wdXNoKQorCQl3cml0ZV9zdHJfaW5fZnVsbChoZWxwZXItPmluLCAibGlzdCBmb3ItcHVzaFxuIik7CisJZWxzZQorCQl3cml0ZV9zdHJfaW5fZnVsbChoZWxwZXItPmluLCAibGlzdFxuIik7CisKKwl3aGlsZSAoMSkgeworCQljaGFyICplb3YsICplb247CisJCWlmIChyZWN2bGluZShkYXRhLCAmYnVmKSkKKwkJCWV4aXQoMTI4KTsKKworCQlpZiAoISpidWYuYnVmKQorCQkJYnJlYWs7CisKKwkJZW92ID0gc3RyY2hyKGJ1Zi5idWYsICcgJyk7CisJCWlmICghZW92KQorCQkJZGllKCJNYWxmb3JtZWQgcmVzcG9uc2UgaW4gcmVmIGxpc3Q6ICVzIiwgYnVmLmJ1Zik7CisJCWVvbiA9IHN0cmNocihlb3YgKyAxLCAnICcpOworCQkqZW92ID0gJ1wwJzsKKwkJaWYgKGVvbikKKwkJCSplb24gPSAnXDAnOworCQkqdGFpbCA9IGFsbG9jX3JlZihlb3YgKyAxKTsKKwkJaWYgKGJ1Zi5idWZbMF0gPT0gJ0AnKQorCQkJKCp0YWlsKS0+c3ltcmVmID0geHN0cmR1cChidWYuYnVmICsgMSk7CisJCWVsc2UgaWYgKGJ1Zi5idWZbMF0gIT0gJz8nKQorCQkJZ2V0X3NoYTFfaGV4KGJ1Zi5idWYsICgqdGFpbCktPm9sZF9zaGExKTsKKwkJaWYgKGVvbikgeworCQkJaWYgKGhhc19hdHRyaWJ1dGUoZW9uICsgMSwgInVuY2hhbmdlZCIpKSB7CisJCQkJKCp0YWlsKS0+c3RhdHVzIHw9IFJFRl9TVEFUVVNfVVBUT0RBVEU7CisJCQkJaWYgKHJlYWRfcmVmKCgqdGFpbCktPm5hbWUsCisJCQkJCSAgICAgKCp0YWlsKS0+b2xkX3NoYTEpIDwgMCkKKwkJCQkJZGllKE5fKCJDb3VsZCBub3QgcmVhZCByZWYgJXMiKSwKKwkJCQkJICAgICgqdGFpbCktPm5hbWUpOworCQkJfQorCQl9CisJCXRhaWwgPSAmKCgqdGFpbCktPm5leHQpOworCX0KKwlpZiAoZGVidWcpCisJCWZwcmludGYoc3RkZXJyLCAiRGVidWc6IFJlYWQgcmVmIGxpc3RpbmcuXG4iKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKworCWZvciAocG9zbiA9IHJldDsgcG9zbjsgcG9zbiA9IHBvc24tPm5leHQpCisJCXJlc29sdmVfcmVtb3RlX3N5bXJlZihwb3NuLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHRyYW5zcG9ydF9oZWxwZXJfaW5pdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGhlbHBlcl9kYXRhICpkYXRhID0geGNhbGxvYygxLCBzaXplb2YoKmRhdGEpKTsKKwlkYXRhLT5uYW1lID0gbmFtZTsKKworCXRyYW5zcG9ydF9jaGVja19hbGxvd2VkKG5hbWUpOworCisJaWYgKGdldGVudigiR0lUX1RSQU5TUE9SVF9IRUxQRVJfREVCVUciKSkKKwkJZGVidWcgPSAxOworCisJdHJhbnNwb3J0LT5kYXRhID0gZGF0YTsKKwl0cmFuc3BvcnQtPnNldF9vcHRpb24gPSBzZXRfaGVscGVyX29wdGlvbjsKKwl0cmFuc3BvcnQtPmdldF9yZWZzX2xpc3QgPSBnZXRfcmVmc19saXN0OworCXRyYW5zcG9ydC0+ZmV0Y2ggPSBmZXRjaDsKKwl0cmFuc3BvcnQtPnB1c2hfcmVmcyA9IHB1c2hfcmVmczsKKwl0cmFuc3BvcnQtPmRpc2Nvbm5lY3QgPSByZWxlYXNlX2hlbHBlcjsKKwl0cmFuc3BvcnQtPmNvbm5lY3QgPSBjb25uZWN0X2hlbHBlcjsKKwl0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMgPSAmKGRhdGEtPnRyYW5zcG9ydF9vcHRpb25zKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIExpbnV4IHBpcGVzIGNhbiBidWZmZXIgNjU1MzYgYnl0ZXMgYXQgb25jZSAoYW5kIG1vc3QgcGxhdGZvcm1zIGNhbgorICogYnVmZmVyIGxlc3MpLCBzbyBhdHRlbXB0IHJlYWRzIGFuZCB3cml0ZXMgd2l0aCB1cCB0byB0aGF0IHNpemUuCisgKi8KKyNkZWZpbmUgQlVGRkVSU0laRSA2NTUzNgorLyogVGhpcyBzaG91bGQgYmUgZW5vdWdoIHRvIGhvbGQgZGVidWdnaW5nIG1lc3NhZ2UuICovCisjZGVmaW5lIFBCVUZGRVJTSVpFIDgxOTIKKworLyogUHJpbnQgYmlkaXJlY3Rpb25hbCB0cmFuc2ZlciBsb29wIGRlYnVnIG1lc3NhZ2UuICovCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorc3RhdGljIHZvaWQgdHJhbnNmZXJfZGVidWcoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWNoYXIgbXNnYnVmW1BCVUZGRVJTSVpFXTsKKwlzdGF0aWMgaW50IGRlYnVnX2VuYWJsZWQgPSAtMTsKKworCWlmIChkZWJ1Z19lbmFibGVkIDwgMCkKKwkJZGVidWdfZW5hYmxlZCA9IGdldGVudigiR0lUX1RSQU5TTE9PUF9ERUJVRyIpID8gMSA6IDA7CisJaWYgKCFkZWJ1Z19lbmFibGVkKQorCQlyZXR1cm47CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXZzbnByaW50Zihtc2didWYsIFBCVUZGRVJTSVpFLCBmbXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlRyYW5zZmVyIGxvb3AgZGVidWdnaW5nOiAlc1xuIiwgbXNnYnVmKTsKK30KKworLyogU3RyZWFtIHN0YXRlOiBNb3JlIGRhdGEgbWF5IGJlIGNvbWluZyBpbiB0aGlzIGRpcmVjdGlvbi4gKi8KKyNkZWZpbmUgU1NUQVRFX1RSQU5TRkVSSU5HIDAKKy8qCisgKiBTdHJlYW0gc3RhdGU6IE5vIG1vcmUgZGF0YSBjb21pbmcgaW4gdGhpcyBkaXJlY3Rpb24sIGZsdXNoaW5nIHJlc3Qgb2YKKyAqIGRhdGEuCisgKi8KKyNkZWZpbmUgU1NUQVRFX0ZMVVNISU5HIDEKKy8qIFN0cmVhbSBzdGF0ZTogVHJhbnNmZXIgaW4gdGhpcyBkaXJlY3Rpb24gZmluaXNoZWQuICovCisjZGVmaW5lIFNTVEFURV9GSU5JU0hFRCAyCisKKyNkZWZpbmUgU1RBVEVfTkVFRFNfUkVBRElORyhzdGF0ZSkgKChzdGF0ZSkgPD0gU1NUQVRFX1RSQU5TRkVSSU5HKQorI2RlZmluZSBTVEFURV9ORUVEU19XUklUSU5HKHN0YXRlKSAoKHN0YXRlKSA8PSBTU1RBVEVfRkxVU0hJTkcpCisjZGVmaW5lIFNUQVRFX05FRURTX0NMT1NJTkcoc3RhdGUpICgoc3RhdGUpID09IFNTVEFURV9GTFVTSElORykKKworLyogVW5pZGlyZWN0aW9uYWwgdHJhbnNmZXIuICovCitzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgeworCS8qIFNvdXJjZSAqLworCWludCBzcmM7CisJLyogRGVzdGluYXRpb24gKi8KKwlpbnQgZGVzdDsKKwkvKiBJcyBzb3VyY2Ugc29ja2V0PyAqLworCWludCBzcmNfaXNfc29jazsKKwkvKiBJcyBkZXN0aW5hdGlvbiBzb2NrZXQ/ICovCisJaW50IGRlc3RfaXNfc29jazsKKwkvKiBUcmFuc2ZlciBzdGF0ZSAoVFJBTlNGRVJSSU5HL0ZMVVNISU5HL0ZJTklTSEVEKSAqLworCWludCBzdGF0ZTsKKwkvKiBCdWZmZXIuICovCisJY2hhciBidWZbQlVGRkVSU0laRV07CisJLyogQnVmZmVyIHVzZWQuICovCisJc2l6ZV90IGJ1ZnVzZTsKKwkvKiBOYW1lIG9mIHNvdXJjZS4gKi8KKwljb25zdCBjaGFyICpzcmNfbmFtZTsKKwkvKiBOYW1lIG9mIGRlc3RpbmF0aW9uLiAqLworCWNvbnN0IGNoYXIgKmRlc3RfbmFtZTsKK307CisKKy8qIENsb3NlcyB0aGUgdGFyZ2V0IChmb3Igd3JpdGluZykgaWYgdHJhbnNmZXIgaGFzIGZpbmlzaGVkLiAqLworc3RhdGljIHZvaWQgdWR0X2Nsb3NlX2lmX2ZpbmlzaGVkKHN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciAqdCkKK3sKKwlpZiAoU1RBVEVfTkVFRFNfQ0xPU0lORyh0LT5zdGF0ZSkgJiYgIXQtPmJ1ZnVzZSkgeworCQl0LT5zdGF0ZSA9IFNTVEFURV9GSU5JU0hFRDsKKwkJaWYgKHQtPmRlc3RfaXNfc29jaykKKwkJCXNodXRkb3duKHQtPmRlc3QsIFNIVVRfV1IpOworCQllbHNlCisJCQljbG9zZSh0LT5kZXN0KTsKKwkJdHJhbnNmZXJfZGVidWcoIkNsb3NlZCAlcy4iLCB0LT5kZXN0X25hbWUpOworCX0KK30KKworLyoKKyAqIFRyaWVzIHRvIHJlYWQgcmVhZCBkYXRhIGZyb20gc291cmNlIGludG8gYnVmZmVyLiBJZiBidWZmZXIgaXMgZnVsbCwKKyAqIG5vIGRhdGEgaXMgcmVhZC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IHVkdF9kb19yZWFkKHN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciAqdCkKK3sKKwlzc2l6ZV90IGJ5dGVzOworCisJaWYgKHQtPmJ1ZnVzZSA9PSBCVUZGRVJTSVpFKQorCQlyZXR1cm4gMDsJLyogTm8gc3BhY2UgZm9yIG1vcmUuICovCisKKwl0cmFuc2Zlcl9kZWJ1ZygiJXMgaXMgcmVhZGFibGUiLCB0LT5zcmNfbmFtZSk7CisJYnl0ZXMgPSByZWFkKHQtPnNyYywgdC0+YnVmICsgdC0+YnVmdXNlLCBCVUZGRVJTSVpFIC0gdC0+YnVmdXNlKTsKKwlpZiAoYnl0ZXMgPCAwICYmIGVycm5vICE9IEVXT1VMREJMT0NLICYmIGVycm5vICE9IEVBR0FJTiAmJgorCQllcnJubyAhPSBFSU5UUikgeworCQllcnJvcigicmVhZCglcykgZmFpbGVkOiAlcyIsIHQtPnNyY19uYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmIChieXRlcyA9PSAwKSB7CisJCXRyYW5zZmVyX2RlYnVnKCIlcyBFT0YgKHdpdGggJWkgYnl0ZXMgaW4gYnVmZmVyKSIsCisJCQl0LT5zcmNfbmFtZSwgKGludCl0LT5idWZ1c2UpOworCQl0LT5zdGF0ZSA9IFNTVEFURV9GTFVTSElORzsKKwl9IGVsc2UgaWYgKGJ5dGVzID4gMCkgeworCQl0LT5idWZ1c2UgKz0gYnl0ZXM7CisJCXRyYW5zZmVyX2RlYnVnKCJSZWFkICVpIGJ5dGVzIGZyb20gJXMgKGJ1ZmZlciBub3cgYXQgJWkpIiwKKwkJCShpbnQpYnl0ZXMsIHQtPnNyY19uYW1lLCAoaW50KXQtPmJ1ZnVzZSk7CisJfQorCXJldHVybiAwOworfQorCisvKiBUcmllcyB0byB3cml0ZSBkYXRhIGZyb20gYnVmZmVyIGludG8gZGVzdGluYXRpb24uIElmIGJ1ZmZlciBpcyBlbXB0eSwKKyAqIG5vIGRhdGEgaXMgd3JpdHRlbi4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICovCitzdGF0aWMgaW50IHVkdF9kb193cml0ZShzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgKnQpCit7CisJc3NpemVfdCBieXRlczsKKworCWlmICh0LT5idWZ1c2UgPT0gMCkKKwkJcmV0dXJuIDA7CS8qIE5vdGhpbmcgdG8gd3JpdGUuICovCisKKwl0cmFuc2Zlcl9kZWJ1ZygiJXMgaXMgd3JpdGFibGUiLCB0LT5kZXN0X25hbWUpOworCWJ5dGVzID0geHdyaXRlKHQtPmRlc3QsIHQtPmJ1ZiwgdC0+YnVmdXNlKTsKKwlpZiAoYnl0ZXMgPCAwICYmIGVycm5vICE9IEVXT1VMREJMT0NLKSB7CisJCWVycm9yKCJ3cml0ZSglcykgZmFpbGVkOiAlcyIsIHQtPmRlc3RfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIC0xOworCX0gZWxzZSBpZiAoYnl0ZXMgPiAwKSB7CisJCXQtPmJ1ZnVzZSAtPSBieXRlczsKKwkJaWYgKHQtPmJ1ZnVzZSkKKwkJCW1lbW1vdmUodC0+YnVmLCB0LT5idWYgKyBieXRlcywgdC0+YnVmdXNlKTsKKwkJdHJhbnNmZXJfZGVidWcoIldyb3RlICVpIGJ5dGVzIHRvICVzIChidWZmZXIgbm93IGF0ICVpKSIsCisJCQkoaW50KWJ5dGVzLCB0LT5kZXN0X25hbWUsIChpbnQpdC0+YnVmdXNlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyogU3RhdGUgb2YgYmlkaXJlY3Rpb25hbCB0cmFuc2ZlciBsb29wLiAqLworc3RydWN0IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfc3RhdGUgeworCS8qIERpcmVjdGlvbiBmcm9tIHByb2dyYW0gdG8gZ2l0LiAqLworCXN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciBwdGc7CisJLyogRGlyZWN0aW9uIGZyb20gZ2l0IHRvIHByb2dyYW0uICovCisJc3RydWN0IHVuaWRpcmVjdGlvbmFsX3RyYW5zZmVyIGd0cDsKK307CisKK3N0YXRpYyB2b2lkICp1ZHRfY29weV90YXNrX3JvdXRpbmUodm9pZCAqdWR0KQoreworCXN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciAqdCA9IChzdHJ1Y3QgdW5pZGlyZWN0aW9uYWxfdHJhbnNmZXIgKil1ZHQ7CisJd2hpbGUgKHQtPnN0YXRlICE9IFNTVEFURV9GSU5JU0hFRCkgeworCQlpZiAoU1RBVEVfTkVFRFNfUkVBRElORyh0LT5zdGF0ZSkpCisJCQlpZiAodWR0X2RvX3JlYWQodCkpCisJCQkJcmV0dXJuIE5VTEw7CisJCWlmIChTVEFURV9ORUVEU19XUklUSU5HKHQtPnN0YXRlKSkKKwkJCWlmICh1ZHRfZG9fd3JpdGUodCkpCisJCQkJcmV0dXJuIE5VTEw7CisJCWlmIChTVEFURV9ORUVEU19DTE9TSU5HKHQtPnN0YXRlKSkKKwkJCXVkdF9jbG9zZV9pZl9maW5pc2hlZCh0KTsKKwl9CisJcmV0dXJuIHVkdDsJLyogSnVzdCBzb21lIG5vbi1OVUxMIHZhbHVlLiAqLworfQorCisjaWZuZGVmIE5PX1BUSFJFQURTCisKKy8qCisgKiBKb2luIHRocmVhZCwgd2l0aCBhcHByb3ByaWF0ZSBlcnJvcnMgb24gZmFpbHVyZS4gTmFtZSBpcyBuYW1lIGZvciB0aGUKKyAqIHRocmVhZCAoZm9yIGVycm9yIG1lc3NhZ2VzKS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB0bG9vcF9qb2luKHB0aHJlYWRfdCB0aHJlYWQsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGVycjsKKwl2b2lkICp0cmV0OworCWVyciA9IHB0aHJlYWRfam9pbih0aHJlYWQsICZ0cmV0KTsKKwlpZiAoIXRyZXQpIHsKKwkJZXJyb3IoIiVzIHRocmVhZCBmYWlsZWQiLCBuYW1lKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmIChlcnIpIHsKKwkJZXJyb3IoIiVzIHRocmVhZCBmYWlsZWQgdG8gam9pbjogJXMiLCBuYW1lLCBzdHJlcnJvcihlcnIpKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogU3Bhd24gdGhlIHRyYW5zZmVyIHRhc2tzIGFuZCB0aGVuIHdhaXQgZm9yIHRoZW0uIFJldHVybnMgMCBvbiBzdWNjZXNzLAorICogLTEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB0bG9vcF9zcGF3bndhaXRfdGFza3Moc3RydWN0IGJpZGlyZWN0aW9uYWxfdHJhbnNmZXJfc3RhdGUgKnMpCit7CisJcHRocmVhZF90IGd0cF90aHJlYWQ7CisJcHRocmVhZF90IHB0Z190aHJlYWQ7CisJaW50IGVycjsKKwlpbnQgcmV0ID0gMDsKKwllcnIgPSBwdGhyZWFkX2NyZWF0ZSgmZ3RwX3RocmVhZCwgTlVMTCwgdWR0X2NvcHlfdGFza19yb3V0aW5lLAorCQkmcy0+Z3RwKTsKKwlpZiAoZXJyKQorCQlkaWUoIkNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhOiAlcyIsIHN0cmVycm9yKGVycikpOworCWVyciA9IHB0aHJlYWRfY3JlYXRlKCZwdGdfdGhyZWFkLCBOVUxMLCB1ZHRfY29weV90YXNrX3JvdXRpbmUsCisJCSZzLT5wdGcpOworCWlmIChlcnIpCisJCWRpZSgiQ2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGE6ICVzIiwgc3RyZXJyb3IoZXJyKSk7CisKKwlyZXQgfD0gdGxvb3Bfam9pbihndHBfdGhyZWFkLCAiR2l0IHRvIHByb2dyYW0gY29weSIpOworCXJldCB8PSB0bG9vcF9qb2luKHB0Z190aHJlYWQsICJQcm9ncmFtIHRvIGdpdCBjb3B5Iik7CisJcmV0dXJuIHJldDsKK30KKyNlbHNlCisKKy8qIENsb3NlIHRoZSBzb3VyY2UgYW5kIHRhcmdldCAoZm9yIHdyaXRpbmcpIGZvciB0cmFuc2Zlci4gKi8KK3N0YXRpYyB2b2lkIHVkdF9raWxsX3RyYW5zZmVyKHN0cnVjdCB1bmlkaXJlY3Rpb25hbF90cmFuc2ZlciAqdCkKK3sKKwl0LT5zdGF0ZSA9IFNTVEFURV9GSU5JU0hFRDsKKwkvKgorCSAqIFNvY2tldCByZWFkIGVuZCBsZWZ0IG9wZW4gaXNuJ3QgYSBkaXNhc3RlciBpZiBub2JvZHkKKwkgKiBhdHRlbXB0cyB0byByZWFkIGZyb20gaXQgKG1pbmd3IGNvbXBhdCBoZWFkZXJzIGRvIG5vdAorCSAqIGhhdmUgU0hVVF9SRCkuLi4KKwkgKgorCSAqIFdlIGNhbid0IGZ1bGx5IGNsb3NlIHRoZSBzb2NrZXQgc2luY2Ugb3RoZXJ3aXNlIGd0cAorCSAqIHRhc2sgd291bGQgZmlyc3QgY2xvc2UgdGhlIHNvY2tldCBpdCBzZW5kcyBkYXRhIHRvCisJICogd2hpbGUgY2xvc2luZyB0aGUgcHRnIGZpbGUgZGVzY3JpcHRvcnMuCisJICovCisJaWYgKCF0LT5zcmNfaXNfc29jaykKKwkJY2xvc2UodC0+c3JjKTsKKwlpZiAodC0+ZGVzdF9pc19zb2NrKQorCQlzaHV0ZG93bih0LT5kZXN0LCBTSFVUX1dSKTsKKwllbHNlCisJCWNsb3NlKHQtPmRlc3QpOworfQorCisvKgorICogSm9pbiBwcm9jZXNzLCB3aXRoIGFwcHJvcHJpYXRlIGVycm9ycyBvbiBmYWlsdXJlLiBOYW1lIGlzIG5hbWUgZm9yIHRoZQorICogcHJvY2VzcyAoZm9yIGVycm9yIG1lc3NhZ2VzKS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIDEgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCB0bG9vcF9qb2luKHBpZF90IHBpZCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgdHJldDsKKwlpZiAod2FpdHBpZChwaWQsICZ0cmV0LCAwKSA8IDApIHsKKwkJZXJyb3IoIiVzIHByb2Nlc3MgZmFpbGVkIHRvIHdhaXQ6ICVzIiwgbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIDE7CisJfQorCWlmICghV0lGRVhJVEVEKHRyZXQpIHx8IFdFWElUU1RBVFVTKHRyZXQpKSB7CisJCWVycm9yKCIlcyBwcm9jZXNzIGZhaWxlZCIsIG5hbWUpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTcGF3biB0aGUgdHJhbnNmZXIgdGFza3MgYW5kIHRoZW4gd2FpdCBmb3IgdGhlbS4gUmV0dXJucyAwIG9uIHN1Y2Nlc3MsCisgKiAtMSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IHRsb29wX3NwYXdud2FpdF90YXNrcyhzdHJ1Y3QgYmlkaXJlY3Rpb25hbF90cmFuc2Zlcl9zdGF0ZSAqcykKK3sKKwlwaWRfdCBwaWQxLCBwaWQyOworCWludCByZXQgPSAwOworCisJLyogRm9yayB0aHJlYWQgIzE6IGdpdCB0byBwcm9ncmFtLiAqLworCXBpZDEgPSBmb3JrKCk7CisJaWYgKHBpZDEgPCAwKQorCQlkaWVfZXJybm8oIkNhbid0IHN0YXJ0IHRocmVhZCBmb3IgY29weWluZyBkYXRhIik7CisJZWxzZSBpZiAocGlkMSA9PSAwKSB7CisJCXVkdF9raWxsX3RyYW5zZmVyKCZzLT5wdGcpOworCQlleGl0KHVkdF9jb3B5X3Rhc2tfcm91dGluZSgmcy0+Z3RwKSA/IDAgOiAxKTsKKwl9CisKKwkvKiBGb3JrIHRocmVhZCAjMjogcHJvZ3JhbSB0byBnaXQuICovCisJcGlkMiA9IGZvcmsoKTsKKwlpZiAocGlkMiA8IDApCisJCWRpZV9lcnJubygiQ2FuJ3Qgc3RhcnQgdGhyZWFkIGZvciBjb3B5aW5nIGRhdGEiKTsKKwllbHNlIGlmIChwaWQyID09IDApIHsKKwkJdWR0X2tpbGxfdHJhbnNmZXIoJnMtPmd0cCk7CisJCWV4aXQodWR0X2NvcHlfdGFza19yb3V0aW5lKCZzLT5wdGcpID8gMCA6IDEpOworCX0KKworCS8qCisJICogQ2xvc2UgYm90aCBzdHJlYW1zIGluIHBhcmVudCBhcyB0byBub3QgaW50ZXJmZXJlIHdpdGgKKwkgKiBlbmQgb2YgZmlsZSBkZXRlY3Rpb24gYW5kIHdhaXQgZm9yIGJvdGggdGFza3MgdG8gZmluaXNoLgorCSAqLworCXVkdF9raWxsX3RyYW5zZmVyKCZzLT5ndHApOworCXVkdF9raWxsX3RyYW5zZmVyKCZzLT5wdGcpOworCXJldCB8PSB0bG9vcF9qb2luKHBpZDEsICJHaXQgdG8gcHJvZ3JhbSBjb3B5Iik7CisJcmV0IHw9IHRsb29wX2pvaW4ocGlkMiwgIlByb2dyYW0gdG8gZ2l0IGNvcHkiKTsKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmCisKKy8qCisgKiBDb3BpZXMgZGF0YSBmcm9tIHN0ZGluIHRvIG91dHB1dCBhbmQgZnJvbSBpbnB1dCB0byBzdGRvdXQgc2ltdWx0YW5lb3VzbHkuCisgKiBBZGRpdGlvbmFsbHkgZmlsdGVyaW5nIHRocm91Z2ggZ2l2ZW4gZmlsdGVyLiBJZiBmaWx0ZXIgaXMgTlVMTCwgdXNlcworICogaWRlbnRpdHkgZmlsdGVyLgorICovCitpbnQgYmlkaXJlY3Rpb25hbF90cmFuc2Zlcl9sb29wKGludCBpbnB1dCwgaW50IG91dHB1dCkKK3sKKwlzdHJ1Y3QgYmlkaXJlY3Rpb25hbF90cmFuc2Zlcl9zdGF0ZSBzdGF0ZTsKKworCS8qIEZpbGwgdGhlIHN0YXRlIGZpZWxkcy4gKi8KKwlzdGF0ZS5wdGcuc3JjID0gaW5wdXQ7CisJc3RhdGUucHRnLmRlc3QgPSAxOworCXN0YXRlLnB0Zy5zcmNfaXNfc29jayA9IChpbnB1dCA9PSBvdXRwdXQpOworCXN0YXRlLnB0Zy5kZXN0X2lzX3NvY2sgPSAwOworCXN0YXRlLnB0Zy5zdGF0ZSA9IFNTVEFURV9UUkFOU0ZFUklORzsKKwlzdGF0ZS5wdGcuYnVmdXNlID0gMDsKKwlzdGF0ZS5wdGcuc3JjX25hbWUgPSAicmVtb3RlIGlucHV0IjsKKwlzdGF0ZS5wdGcuZGVzdF9uYW1lID0gInN0ZG91dCI7CisKKwlzdGF0ZS5ndHAuc3JjID0gMDsKKwlzdGF0ZS5ndHAuZGVzdCA9IG91dHB1dDsKKwlzdGF0ZS5ndHAuc3JjX2lzX3NvY2sgPSAwOworCXN0YXRlLmd0cC5kZXN0X2lzX3NvY2sgPSAoaW5wdXQgPT0gb3V0cHV0KTsKKwlzdGF0ZS5ndHAuc3RhdGUgPSBTU1RBVEVfVFJBTlNGRVJJTkc7CisJc3RhdGUuZ3RwLmJ1ZnVzZSA9IDA7CisJc3RhdGUuZ3RwLnNyY19uYW1lID0gInN0ZGluIjsKKwlzdGF0ZS5ndHAuZGVzdF9uYW1lID0gInJlbW90ZSBvdXRwdXQiOworCisJcmV0dXJuIHRsb29wX3NwYXdud2FpdF90YXNrcygmc3RhdGUpOworfQpkaWZmIC0tZ2l0IGEvdHJhbnNwb3J0LmMgYi90cmFuc3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2IyZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdHJhbnNwb3J0LmMKQEAgLTAsMCArMSwxNDM1IEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmFuc3BvcnQuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgInBrdC1saW5lLmgiCisjaW5jbHVkZSAiZmV0Y2gtcGFjay5oIgorI2luY2x1ZGUgInJlbW90ZS5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzZW5kLXBhY2suaCIKKyNpbmNsdWRlICJ3YWxrZXIuaCIKKyNpbmNsdWRlICJidW5kbGUuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJyZWZzLmgiCisjaW5jbHVkZSAiYnJhbmNoLmgiCisjaW5jbHVkZSAidXJsLmgiCisjaW5jbHVkZSAic3VibW9kdWxlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJzaGExLWFycmF5LmgiCisKKy8qIHJzeW5jIHN1cHBvcnQgKi8KKworLyoKKyAqIFdlIGNvcHkgcGFja2VkLXJlZnMgYW5kIHJlZnMvIGludG8gYSB0ZW1wb3JhcnkgZmlsZSwgdGhlbiByZWFkIHRoZQorICogbG9vc2UgcmVmcyByZWN1cnNpdmVseSAoc29ydGluZyB3aGVuZXZlciBwb3NzaWJsZSksIGFuZCB0aGVuIGluc2VydGluZworICogdGhvc2UgcGFja2VkIHJlZnMgdGhhdCBhcmUgbm90IHlldCBpbiB0aGUgbGlzdCAobm90IHZhbGlkYXRpbmcsIGJ1dAorICogYXNzdW1pbmcgdGhhdCB0aGUgZmlsZSBpcyBzb3J0ZWQpLgorICoKKyAqIEFwcGVhcnMgcmVmYWN0b3JpbmcgdGhpcyBmcm9tIHJlZnMuYyBpcyB0b28gY3VtYmVyc29tZS4KKyAqLworCitzdGF0aWMgaW50IHN0cl9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBjaGFyICpzMSA9IGE7CisJY29uc3QgY2hhciAqczIgPSBiOworCisJcmV0dXJuIHN0cmNtcChzMSwgczIpOworfQorCisvKiBwYXRoLT5idWYgKyBuYW1lX29mZnNldCBpcyBleHBlY3RlZCB0byBwb2ludCB0byAicmVmcy8iICovCisKK3N0YXRpYyBpbnQgcmVhZF9sb29zZV9yZWZzKHN0cnVjdCBzdHJidWYgKnBhdGgsIGludCBuYW1lX29mZnNldCwKKwkJc3RydWN0IHJlZiAqKnRhaWwpCit7CisJRElSICpkaXIgPSBvcGVuZGlyKHBhdGgtPmJ1Zik7CisJc3RydWN0IGRpcmVudCAqZGU7CisJc3RydWN0IHsKKwkJY2hhciAqKmVudHJpZXM7CisJCWludCBuciwgYWxsb2M7CisJfSBsaXN0OworCWludCBpLCBwYXRobGVuOworCisJaWYgKCFkaXIpCisJCXJldHVybiAtMTsKKworCW1lbXNldCAoJmxpc3QsIDAsIHNpemVvZihsaXN0KSk7CisKKwl3aGlsZSAoKGRlID0gcmVhZGRpcihkaXIpKSkgeworCQlpZiAoaXNfZG90X29yX2RvdGRvdChkZS0+ZF9uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlBTExPQ19HUk9XKGxpc3QuZW50cmllcywgbGlzdC5uciArIDEsIGxpc3QuYWxsb2MpOworCQlsaXN0LmVudHJpZXNbbGlzdC5ucisrXSA9IHhzdHJkdXAoZGUtPmRfbmFtZSk7CisJfQorCWNsb3NlZGlyKGRpcik7CisKKwkvKiBzb3J0IHRoZSBsaXN0ICovCisKKwlxc29ydChsaXN0LmVudHJpZXMsIGxpc3QubnIsIHNpemVvZihjaGFyICopLCBzdHJfY21wKTsKKworCXBhdGhsZW4gPSBwYXRoLT5sZW47CisJc3RyYnVmX2FkZGNoKHBhdGgsICcvJyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC5ucjsgaSsrLCBzdHJidWZfc2V0bGVuKHBhdGgsIHBhdGhsZW4gKyAxKSkgeworCQlzdHJidWZfYWRkc3RyKHBhdGgsIGxpc3QuZW50cmllc1tpXSk7CisJCWlmIChyZWFkX2xvb3NlX3JlZnMocGF0aCwgbmFtZV9vZmZzZXQsIHRhaWwpKSB7CisJCQlpbnQgZmQgPSBvcGVuKHBhdGgtPmJ1ZiwgT19SRE9OTFkpOworCQkJY2hhciBidWZmZXJbNDBdOworCQkJc3RydWN0IHJlZiAqbmV4dDsKKworCQkJaWYgKGZkIDwgMCkKKwkJCQljb250aW51ZTsKKwkJCW5leHQgPSBhbGxvY19yZWYocGF0aC0+YnVmICsgbmFtZV9vZmZzZXQpOworCQkJaWYgKHJlYWRfaW5fZnVsbChmZCwgYnVmZmVyLCA0MCkgIT0gNDAgfHwKKwkJCQkJZ2V0X3NoYTFfaGV4KGJ1ZmZlciwgbmV4dC0+b2xkX3NoYTEpKSB7CisJCQkJY2xvc2UoZmQpOworCQkJCWZyZWUobmV4dCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQljbG9zZShmZCk7CisJCQkoKnRhaWwpLT5uZXh0ID0gbmV4dDsKKwkJCSp0YWlsID0gbmV4dDsKKwkJfQorCX0KKwlzdHJidWZfc2V0bGVuKHBhdGgsIHBhdGhsZW4pOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QubnI7IGkrKykKKwkJZnJlZShsaXN0LmVudHJpZXNbaV0pOworCWZyZWUobGlzdC5lbnRyaWVzKTsKKworCXJldHVybiAwOworfQorCisvKiBpbnNlcnQgdGhlIHBhY2tlZCByZWZzIGZvciB3aGljaCBubyBsb29zZSByZWZzIHdlcmUgZm91bmQgKi8KKworc3RhdGljIHZvaWQgaW5zZXJ0X3BhY2tlZF9yZWZzKGNvbnN0IGNoYXIgKnBhY2tlZF9yZWZzLCBzdHJ1Y3QgcmVmICoqbGlzdCkKK3sKKwlGSUxFICpmID0gZm9wZW4ocGFja2VkX3JlZnMsICJyIik7CisJc3RhdGljIGNoYXIgYnVmZmVyW1BBVEhfTUFYXTsKKworCWlmICghZikKKwkJcmV0dXJuOworCisJZm9yICg7OykgeworCQlpbnQgY21wID0gMDsgLyogYXNzaWduZWQgYmVmb3JlIHVzZWQgKi8KKwkJaW50IGxlbjsKKworCQlpZiAoIWZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGYpKSB7CisJCQlmY2xvc2UoZik7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoIWlzeGRpZ2l0KGJ1ZmZlclswXSkpCisJCQljb250aW51ZTsKKwkJbGVuID0gc3RybGVuKGJ1ZmZlcik7CisJCWlmIChsZW4gJiYgYnVmZmVyW2xlbiAtIDFdID09ICdcbicpCisJCQlidWZmZXJbLS1sZW5dID0gJ1wwJzsKKwkJaWYgKGxlbiA8IDQxKQorCQkJY29udGludWU7CisJCXdoaWxlICgoKmxpc3QpLT5uZXh0ICYmCisJCQkJKGNtcCA9IHN0cmNtcChidWZmZXIgKyA0MSwKKwkJCQkgICAgICAoKmxpc3QpLT5uZXh0LT5uYW1lKSkgPiAwKQorCQkJbGlzdCA9ICYoKmxpc3QpLT5uZXh0OworCQlpZiAoISgqbGlzdCktPm5leHQgfHwgY21wIDwgMCkgeworCQkJc3RydWN0IHJlZiAqbmV4dCA9IGFsbG9jX3JlZihidWZmZXIgKyA0MSk7CisJCQlidWZmZXJbNDBdID0gJ1wwJzsKKwkJCWlmIChnZXRfc2hhMV9oZXgoYnVmZmVyLCBuZXh0LT5vbGRfc2hhMSkpIHsKKwkJCQl3YXJuaW5nICgiaW52YWxpZCBTSEEtMTogJXMiLCBidWZmZXIpOworCQkJCWZyZWUobmV4dCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQluZXh0LT5uZXh0ID0gKCpsaXN0KS0+bmV4dDsKKwkJCSgqbGlzdCktPm5leHQgPSBuZXh0OworCQkJbGlzdCA9ICYoKmxpc3QpLT5uZXh0OworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXRfdXBzdHJlYW1zKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmcywKKwlpbnQgcHJldGVuZCkKK3sKKwlzdHJ1Y3QgcmVmICpyZWY7CisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQljb25zdCBjaGFyICpsb2NhbG5hbWU7CisJCWNvbnN0IGNoYXIgKnRtcDsKKwkJY29uc3QgY2hhciAqcmVtb3RlbmFtZTsKKwkJdW5zaWduZWQgY2hhciBzaGFbMjBdOworCQlpbnQgZmxhZyA9IDA7CisJCS8qCisJCSAqIENoZWNrIHN1aXRhYmlsaXR5IGZvciB0cmFja2luZy4gTXVzdCBiZSBzdWNjZXNzZnVsIC8KKwkJICogYWxyZWFkeSB1cC10by1kYXRlIHJlZiBjcmVhdGUvbW9kaWZ5IChub3QgZGVsZXRlKS4KKwkJICovCisJCWlmIChyZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX09LICYmCisJCQlyZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJY29udGludWU7CisJCWlmICghcmVmLT5wZWVyX3JlZikKKwkJCWNvbnRpbnVlOworCQlpZiAoaXNfbnVsbF9zaGExKHJlZi0+bmV3X3NoYTEpKQorCQkJY29udGludWU7CisKKwkJLyogRm9sbG93IHN5bWJvbGljIHJlZnMgKG1haW5seSBmb3IgSEVBRCkuICovCisJCWxvY2FsbmFtZSA9IHJlZi0+cGVlcl9yZWYtPm5hbWU7CisJCXJlbW90ZW5hbWUgPSByZWYtPm5hbWU7CisJCXRtcCA9IHJlc29sdmVfcmVmX3Vuc2FmZShsb2NhbG5hbWUsIFJFU09MVkVfUkVGX1JFQURJTkcsCisJCQkJCSBzaGEsICZmbGFnKTsKKwkJaWYgKHRtcCAmJiBmbGFnICYgUkVGX0lTU1lNUkVGICYmCisJCQlzdGFydHNfd2l0aCh0bXAsICJyZWZzL2hlYWRzLyIpKQorCQkJbG9jYWxuYW1lID0gdG1wOworCisJCS8qIEJvdGggc291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IGJlIGxvY2FsIGJyYW5jaGVzLiAqLworCQlpZiAoIWxvY2FsbmFtZSB8fCAhc3RhcnRzX3dpdGgobG9jYWxuYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJlbW90ZW5hbWUgfHwgIXN0YXJ0c193aXRoKHJlbW90ZW5hbWUsICJyZWZzL2hlYWRzLyIpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFwcmV0ZW5kKQorCQkJaW5zdGFsbF9icmFuY2hfY29uZmlnKEJSQU5DSF9DT05GSUdfVkVSQk9TRSwKKwkJCQlsb2NhbG5hbWUgKyAxMSwgdHJhbnNwb3J0LT5yZW1vdGUtPm5hbWUsCisJCQkJcmVtb3RlbmFtZSk7CisJCWVsc2UKKwkJCXByaW50ZigiV291bGQgc2V0IHVwc3RyZWFtIG9mICclcycgdG8gJyVzJyBvZiAnJXMnXG4iLAorCQkJCWxvY2FsbmFtZSArIDExLCByZW1vdGVuYW1lICsgMTEsCisJCQkJdHJhbnNwb3J0LT5yZW1vdGUtPm5hbWUpOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnJzeW5jX3VybChjb25zdCBjaGFyICp1cmwpCit7CisJaWYgKCFzdGFydHNfd2l0aCh1cmwsICJyc3luYzovLyIpKQorCQlza2lwX3ByZWZpeCh1cmwsICJyc3luYzoiLCAmdXJsKTsKKwlyZXR1cm4gdXJsOworfQorCitzdGF0aWMgc3RydWN0IHJlZiAqZ2V0X3JlZnNfdmlhX3JzeW5jKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQsIHRlbXBfZGlyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHJlZiBkdW1teSA9IHtOVUxMfSwgKnRhaWwgPSAmZHVtbXk7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcnN5bmMgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJY29uc3QgY2hhciAqYXJnc1s1XTsKKwlpbnQgdGVtcF9kaXJfbGVuOworCisJaWYgKGZvcl9wdXNoKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIGNvcHkgdGhlIHJlZnMgdG8gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgKi8KKworCXN0cmJ1Zl9hZGRzdHIoJnRlbXBfZGlyLCBnaXRfcGF0aCgicnN5bmMtcmVmcy1YWFhYWFgiKSk7CisJaWYgKCFta2R0ZW1wKHRlbXBfZGlyLmJ1ZikpCisJCWRpZV9lcnJubyAoIkNvdWxkIG5vdCBtYWtlIHRlbXBvcmFyeSBkaXJlY3RvcnkiKTsKKwl0ZW1wX2Rpcl9sZW4gPSB0ZW1wX2Rpci5sZW47CisKKwlzdHJidWZfYWRkc3RyKCZidWYsIHJzeW5jX3VybCh0cmFuc3BvcnQtPnVybCkpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgIi9yZWZzIik7CisKKwlyc3luYy5hcmd2ID0gYXJnczsKKwlyc3luYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlhcmdzWzBdID0gInJzeW5jIjsKKwlhcmdzWzFdID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA+IDEpID8gIi1ydiIgOiAiLXIiOworCWFyZ3NbMl0gPSBidWYuYnVmOworCWFyZ3NbM10gPSB0ZW1wX2Rpci5idWY7CisJYXJnc1s0XSA9IE5VTEw7CisKKwlpZiAocnVuX2NvbW1hbmQoJnJzeW5jKSkKKwkJZGllICgiQ291bGQgbm90IHJ1biByc3luYyB0byBnZXQgcmVmcyIpOworCisJc3RyYnVmX3Jlc2V0KCZidWYpOworCXN0cmJ1Zl9hZGRzdHIoJmJ1ZiwgcnN5bmNfdXJsKHRyYW5zcG9ydC0+dXJsKSk7CisJc3RyYnVmX2FkZHN0cigmYnVmLCAiL3BhY2tlZC1yZWZzIik7CisKKwlhcmdzWzJdID0gYnVmLmJ1ZjsKKworCWlmIChydW5fY29tbWFuZCgmcnN5bmMpKQorCQlkaWUgKCJDb3VsZCBub3QgcnVuIHJzeW5jIHRvIGdldCByZWZzIik7CisKKwkvKiByZWFkIHRoZSBjb3BpZWQgcmVmcyAqLworCisJc3RyYnVmX2FkZHN0cigmdGVtcF9kaXIsICIvcmVmcyIpOworCXJlYWRfbG9vc2VfcmVmcygmdGVtcF9kaXIsIHRlbXBfZGlyX2xlbiArIDEsICZ0YWlsKTsKKwlzdHJidWZfc2V0bGVuKCZ0ZW1wX2RpciwgdGVtcF9kaXJfbGVuKTsKKworCXRhaWwgPSAmZHVtbXk7CisJc3RyYnVmX2FkZHN0cigmdGVtcF9kaXIsICIvcGFja2VkLXJlZnMiKTsKKwlpbnNlcnRfcGFja2VkX3JlZnModGVtcF9kaXIuYnVmLCAmdGFpbCk7CisJc3RyYnVmX3NldGxlbigmdGVtcF9kaXIsIHRlbXBfZGlyX2xlbik7CisKKwlpZiAocmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmdGVtcF9kaXIsIDApKQorCQl3YXJuaW5nICgiRXJyb3IgcmVtb3ZpbmcgdGVtcG9yYXJ5IGRpcmVjdG9yeSAlcy4iLAorCQkJCXRlbXBfZGlyLmJ1Zik7CisKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmdGVtcF9kaXIpOworCisJcmV0dXJuIGR1bW15Lm5leHQ7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfb2Jqc192aWFfcnN5bmMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJCWludCBucl9vYmpzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3MgcnN5bmMgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisKKwlyc3luYy5zdGRvdXRfdG9fc3RkZXJyID0gMTsKKwlhcmd2X2FycmF5X3B1c2goJnJzeW5jLmFyZ3MsICJyc3luYyIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcnN5bmMuYXJncywgKHRyYW5zcG9ydC0+dmVyYm9zZSA+IDEpID8gIi1ydiIgOiAiLXIiKTsKKwlhcmd2X2FycmF5X3B1c2goJnJzeW5jLmFyZ3MsICItLWlnbm9yZS1leGlzdGluZyIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcnN5bmMuYXJncywgIi0tZXhjbHVkZSIpOworCWFyZ3ZfYXJyYXlfcHVzaCgmcnN5bmMuYXJncywgImluZm8iKTsKKwlhcmd2X2FycmF5X3B1c2hmKCZyc3luYy5hcmdzLCAiJXMvb2JqZWN0cy8iLCByc3luY191cmwodHJhbnNwb3J0LT51cmwpKTsKKwlhcmd2X2FycmF5X3B1c2goJnJzeW5jLmFyZ3MsIGdldF9vYmplY3RfZGlyZWN0b3J5KCkpOworCisJLyogTkVFRFNXT1JLOiBoYW5kbGUgb25lIGxldmVsIG9mIGFsdGVybmF0ZXMgKi8KKwlyZXR1cm4gcnVuX2NvbW1hbmQoJnJzeW5jKTsKK30KKworc3RhdGljIGludCB3cml0ZV9vbmVfcmVmKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSBpbnQgZmxhZ3MsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN0cmJ1ZiAqYnVmID0gZGF0YTsKKwlpbnQgbGVuID0gYnVmLT5sZW47CisKKwkvKiB3aGVuIGNhbGxlZCB2aWEgZm9yX2VhY2hfcmVmKCksIGZsYWdzIGlzIG5vbi16ZXJvICovCisJaWYgKGZsYWdzICYmICFzdGFydHNfd2l0aChuYW1lLCAicmVmcy9oZWFkcy8iKSAmJgorCQkJIXN0YXJ0c193aXRoKG5hbWUsICJyZWZzL3RhZ3MvIikpCisJCXJldHVybiAwOworCisJc3RyYnVmX2FkZHN0cihidWYsIG5hbWUpOworCWlmIChzYWZlX2NyZWF0ZV9sZWFkaW5nX2RpcmVjdG9yaWVzKGJ1Zi0+YnVmKSB8fAorCSAgICB3cml0ZV9maWxlX2dlbnRseShidWYtPmJ1ZiwgIiVzIiwgb2lkX3RvX2hleChvaWQpKSkKKwkJcmV0dXJuIGVycm9yKCJwcm9ibGVtcyB3cml0aW5nIHRlbXBvcmFyeSBmaWxlICVzOiAlcyIsCisJCQkgICAgIGJ1Zi0+YnVmLCBzdHJlcnJvcihlcnJubykpOworCXN0cmJ1Zl9zZXRsZW4oYnVmLCBsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdyaXRlX3JlZnNfdG9fdGVtcF9kaXIoc3RydWN0IHN0cmJ1ZiAqdGVtcF9kaXIsCisJCQkJICBpbnQgcmVmc3BlY19uciwgY29uc3QgY2hhciAqKnJlZnNwZWMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVmc3BlY19ucjsgaSsrKSB7CisJCXN0cnVjdCBvYmplY3RfaWQgb2lkOworCQljaGFyICpyZWY7CisKKwkJaWYgKGR3aW1fcmVmKHJlZnNwZWNbaV0sIHN0cmxlbihyZWZzcGVjW2ldKSwgb2lkLmhhc2gsICZyZWYpICE9IDEpCisJCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBnZXQgcmVmICVzIiwgcmVmc3BlY1tpXSk7CisKKwkJaWYgKHdyaXRlX29uZV9yZWYocmVmLCAmb2lkLCAwLCB0ZW1wX2RpcikpIHsKKwkJCWZyZWUocmVmKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlmcmVlKHJlZik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJzeW5jX3RyYW5zcG9ydF9wdXNoKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVCwgdGVtcF9kaXIgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmVzdWx0ID0gMCwgaTsKKwlzdHJ1Y3QgY2hpbGRfcHJvY2VzcyByc3luYyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljb25zdCBjaGFyICphcmdzWzEwXTsKKworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUikKKwkJcmV0dXJuIGVycm9yKCJyc3luYyB0cmFuc3BvcnQgZG9lcyBub3Qgc3VwcG9ydCBtaXJyb3IgbW9kZSIpOworCisJLyogZmlyc3QgcHVzaCB0aGUgb2JqZWN0cyAqLworCisJc3RyYnVmX2FkZHN0cigmYnVmLCByc3luY191cmwodHJhbnNwb3J0LT51cmwpKTsKKwlzdHJidWZfYWRkY2goJmJ1ZiwgJy8nKTsKKworCXJzeW5jLmFyZ3YgPSBhcmdzOworCXJzeW5jLnN0ZG91dF90b19zdGRlcnIgPSAxOworCWkgPSAwOworCWFyZ3NbaSsrXSA9ICJyc3luYyI7CisJYXJnc1tpKytdID0gIi1hIjsKKwlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOKQorCQlhcmdzW2krK10gPSAiLS1kcnktcnVuIjsKKwlpZiAodHJhbnNwb3J0LT52ZXJib3NlID4gMSkKKwkJYXJnc1tpKytdID0gIi12IjsKKwlhcmdzW2krK10gPSAiLS1pZ25vcmUtZXhpc3RpbmciOworCWFyZ3NbaSsrXSA9ICItLWV4Y2x1ZGUiOworCWFyZ3NbaSsrXSA9ICJpbmZvIjsKKwlhcmdzW2krK10gPSBnZXRfb2JqZWN0X2RpcmVjdG9yeSgpOworCWFyZ3NbaSsrXSA9IGJ1Zi5idWY7CisJYXJnc1tpKytdID0gTlVMTDsKKworCWlmIChydW5fY29tbWFuZCgmcnN5bmMpKQorCQlyZXR1cm4gZXJyb3IoIkNvdWxkIG5vdCBwdXNoIG9iamVjdHMgdG8gJXMiLAorCQkJCXJzeW5jX3VybCh0cmFuc3BvcnQtPnVybCkpOworCisJLyogY29weSB0aGUgcmVmcyB0byB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeTsgdGhleSBjb3VsZCBiZSBwYWNrZWQuICovCisKKwlzdHJidWZfYWRkc3RyKCZ0ZW1wX2RpciwgZ2l0X3BhdGgoInJzeW5jLXJlZnMtWFhYWFhYIikpOworCWlmICghbWtkdGVtcCh0ZW1wX2Rpci5idWYpKQorCQlkaWVfZXJybm8gKCJDb3VsZCBub3QgbWFrZSB0ZW1wb3JhcnkgZGlyZWN0b3J5Iik7CisJc3RyYnVmX2FkZGNoKCZ0ZW1wX2RpciwgJy8nKTsKKworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0FMTCkgeworCQlpZiAoZm9yX2VhY2hfcmVmKHdyaXRlX29uZV9yZWYsICZ0ZW1wX2RpcikpCisJCQlyZXR1cm4gLTE7CisJfSBlbHNlIGlmICh3cml0ZV9yZWZzX3RvX3RlbXBfZGlyKCZ0ZW1wX2RpciwgcmVmc3BlY19uciwgcmVmc3BlYykpCisJCXJldHVybiAtMTsKKworCWkgPSAyOworCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU4pCisJCWFyZ3NbaSsrXSA9ICItLWRyeS1ydW4iOworCWlmICghKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfRk9SQ0UpKQorCQlhcmdzW2krK10gPSAiLS1pZ25vcmUtZXhpc3RpbmciOworCWFyZ3NbaSsrXSA9IHRlbXBfZGlyLmJ1ZjsKKwlhcmdzW2krK10gPSByc3luY191cmwodHJhbnNwb3J0LT51cmwpOworCWFyZ3NbaSsrXSA9IE5VTEw7CisJaWYgKHJ1bl9jb21tYW5kKCZyc3luYykpCisJCXJlc3VsdCA9IGVycm9yKCJDb3VsZCBub3QgcHVzaCB0byAlcyIsCisJCQkJcnN5bmNfdXJsKHRyYW5zcG9ydC0+dXJsKSk7CisKKwlpZiAocmVtb3ZlX2Rpcl9yZWN1cnNpdmVseSgmdGVtcF9kaXIsIDApKQorCQl3YXJuaW5nICgiQ291bGQgbm90IHJlbW92ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5ICVzLiIsCisJCQkJdGVtcF9kaXIuYnVmKTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0ZW1wX2Rpcik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgYnVuZGxlX3RyYW5zcG9ydF9kYXRhIHsKKwlpbnQgZmQ7CisJc3RydWN0IGJ1bmRsZV9oZWFkZXIgaGVhZGVyOworfTsKKworc3RhdGljIHN0cnVjdCByZWYgKmdldF9yZWZzX2Zyb21fYnVuZGxlKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IGZvcl9wdXNoKQoreworCXN0cnVjdCBidW5kbGVfdHJhbnNwb3J0X2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJc3RydWN0IHJlZiAqcmVzdWx0ID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChmb3JfcHVzaCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZGF0YS0+ZmQgPiAwKQorCQljbG9zZShkYXRhLT5mZCk7CisJZGF0YS0+ZmQgPSByZWFkX2J1bmRsZV9oZWFkZXIodHJhbnNwb3J0LT51cmwsICZkYXRhLT5oZWFkZXIpOworCWlmIChkYXRhLT5mZCA8IDApCisJCWRpZSAoIkNvdWxkIG5vdCByZWFkIGJ1bmRsZSAnJXMnLiIsIHRyYW5zcG9ydC0+dXJsKTsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aGVhZGVyLnJlZmVyZW5jZXMubnI7IGkrKykgeworCQlzdHJ1Y3QgcmVmX2xpc3RfZW50cnkgKmUgPSBkYXRhLT5oZWFkZXIucmVmZXJlbmNlcy5saXN0ICsgaTsKKwkJc3RydWN0IHJlZiAqcmVmID0gYWxsb2NfcmVmKGUtPm5hbWUpOworCQloYXNoY3B5KHJlZi0+b2xkX3NoYTEsIGUtPnNoYTEpOworCQlyZWYtPm5leHQgPSByZXN1bHQ7CisJCXJlc3VsdCA9IHJlZjsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBmZXRjaF9yZWZzX2Zyb21fYnVuZGxlKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSAgICAgICBpbnQgbnJfaGVhZHMsIHN0cnVjdCByZWYgKip0b19mZXRjaCkKK3sKKwlzdHJ1Y3QgYnVuZGxlX3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXJldHVybiB1bmJ1bmRsZSgmZGF0YS0+aGVhZGVyLCBkYXRhLT5mZCwKKwkJCXRyYW5zcG9ydC0+cHJvZ3Jlc3MgPyBCVU5ETEVfVkVSQk9TRSA6IDApOworfQorCitzdGF0aWMgaW50IGNsb3NlX2J1bmRsZShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJc3RydWN0IGJ1bmRsZV90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlpZiAoZGF0YS0+ZmQgPiAwKQorCQljbG9zZShkYXRhLT5mZCk7CisJZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSB7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfb3B0aW9ucyBvcHRpb25zOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzICpjb25uOworCWludCBmZFsyXTsKKwl1bnNpZ25lZCBnb3RfcmVtb3RlX2hlYWRzIDogMTsKKwlzdHJ1Y3Qgc2hhMV9hcnJheSBleHRyYV9oYXZlOworCXN0cnVjdCBzaGExX2FycmF5IHNoYWxsb3c7Cit9OworCitzdGF0aWMgaW50IHNldF9naXRfb3B0aW9uKHN0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgKm9wdHMsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWlmICghc3RyY21wKG5hbWUsIFRSQU5TX09QVF9VUExPQURQQUNLKSkgeworCQlvcHRzLT51cGxvYWRwYWNrID0gdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfUkVDRUlWRVBBQ0spKSB7CisJCW9wdHMtPnJlY2VpdmVwYWNrID0gdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfVEhJTikpIHsKKwkJb3B0cy0+dGhpbiA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfRk9MTE9XVEFHUykpIHsKKwkJb3B0cy0+Zm9sbG93dGFncyA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfS0VFUCkpIHsKKwkJb3B0cy0+a2VlcCA9ICEhdmFsdWU7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCBUUkFOU19PUFRfVVBEQVRFX1NIQUxMT1cpKSB7CisJCW9wdHMtPnVwZGF0ZV9zaGFsbG93ID0gISF2YWx1ZTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsIFRSQU5TX09QVF9ERVBUSCkpIHsKKwkJaWYgKCF2YWx1ZSkKKwkJCW9wdHMtPmRlcHRoID0gMDsKKwkJZWxzZSB7CisJCQljaGFyICplbmQ7CisJCQlvcHRzLT5kZXB0aCA9IHN0cnRvbCh2YWx1ZSwgJmVuZCwgMCk7CisJCQlpZiAoKmVuZCkKKwkJCQlkaWUoInRyYW5zcG9ydDogaW52YWxpZCBkZXB0aCBvcHRpb24gJyVzJyIsIHZhbHVlKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgY29ubmVjdF9zZXR1cChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCBmb3JfcHVzaCwgaW50IHZlcmJvc2UpCit7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKworCWlmIChkYXRhLT5jb25uKQorCQlyZXR1cm4gMDsKKworCWRhdGEtPmNvbm4gPSBnaXRfY29ubmVjdChkYXRhLT5mZCwgdHJhbnNwb3J0LT51cmwsCisJCQkJIGZvcl9wdXNoID8gZGF0YS0+b3B0aW9ucy5yZWNlaXZlcGFjayA6CisJCQkJIGRhdGEtPm9wdGlvbnMudXBsb2FkcGFjaywKKwkJCQkgdmVyYm9zZSA/IENPTk5FQ1RfVkVSQk9TRSA6IDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVmICpnZXRfcmVmc192aWFfY29ubmVjdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCBmb3JfcHVzaCkKK3sKKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCByZWYgKnJlZnM7CisKKwljb25uZWN0X3NldHVwKHRyYW5zcG9ydCwgZm9yX3B1c2gsIDApOworCWdldF9yZW1vdGVfaGVhZHMoZGF0YS0+ZmRbMF0sIE5VTEwsIDAsICZyZWZzLAorCQkJIGZvcl9wdXNoID8gUkVGX05PUk1BTCA6IDAsCisJCQkgJmRhdGEtPmV4dHJhX2hhdmUsCisJCQkgJmRhdGEtPnNoYWxsb3cpOworCWRhdGEtPmdvdF9yZW1vdGVfaGVhZHMgPSAxOworCisJcmV0dXJuIHJlZnM7Cit9CisKK3N0YXRpYyBpbnQgZmV0Y2hfcmVmc192aWFfcGFjayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsCisJCQkgICAgICAgaW50IG5yX2hlYWRzLCBzdHJ1Y3QgcmVmICoqdG9fZmV0Y2gpCit7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlzdHJ1Y3QgcmVmICpyZWZzOworCWNoYXIgKmRlc3QgPSB4c3RyZHVwKHRyYW5zcG9ydC0+dXJsKTsKKwlzdHJ1Y3QgZmV0Y2hfcGFja19hcmdzIGFyZ3M7CisJc3RydWN0IHJlZiAqcmVmc190bXAgPSBOVUxMOworCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCWFyZ3MudXBsb2FkcGFjayA9IGRhdGEtPm9wdGlvbnMudXBsb2FkcGFjazsKKwlhcmdzLmtlZXBfcGFjayA9IGRhdGEtPm9wdGlvbnMua2VlcDsKKwlhcmdzLmxvY2tfcGFjayA9IDE7CisJYXJncy51c2VfdGhpbl9wYWNrID0gZGF0YS0+b3B0aW9ucy50aGluOworCWFyZ3MuaW5jbHVkZV90YWcgPSBkYXRhLT5vcHRpb25zLmZvbGxvd3RhZ3M7CisJYXJncy52ZXJib3NlID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA+IDEpOworCWFyZ3MucXVpZXQgPSAodHJhbnNwb3J0LT52ZXJib3NlIDwgMCk7CisJYXJncy5ub19wcm9ncmVzcyA9ICF0cmFuc3BvcnQtPnByb2dyZXNzOworCWFyZ3MuZGVwdGggPSBkYXRhLT5vcHRpb25zLmRlcHRoOworCWFyZ3MuY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZCA9CisJCWRhdGEtPm9wdGlvbnMuY2hlY2tfc2VsZl9jb250YWluZWRfYW5kX2Nvbm5lY3RlZDsKKwlhcmdzLmNsb25pbmcgPSB0cmFuc3BvcnQtPmNsb25pbmc7CisJYXJncy51cGRhdGVfc2hhbGxvdyA9IGRhdGEtPm9wdGlvbnMudXBkYXRlX3NoYWxsb3c7CisKKwlpZiAoIWRhdGEtPmdvdF9yZW1vdGVfaGVhZHMpIHsKKwkJY29ubmVjdF9zZXR1cCh0cmFuc3BvcnQsIDAsIDApOworCQlnZXRfcmVtb3RlX2hlYWRzKGRhdGEtPmZkWzBdLCBOVUxMLCAwLCAmcmVmc190bXAsIDAsCisJCQkJIE5VTEwsICZkYXRhLT5zaGFsbG93KTsKKwkJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDE7CisJfQorCisJcmVmcyA9IGZldGNoX3BhY2soJmFyZ3MsIGRhdGEtPmZkLCBkYXRhLT5jb25uLAorCQkJICByZWZzX3RtcCA/IHJlZnNfdG1wIDogdHJhbnNwb3J0LT5yZW1vdGVfcmVmcywKKwkJCSAgZGVzdCwgdG9fZmV0Y2gsIG5yX2hlYWRzLCAmZGF0YS0+c2hhbGxvdywKKwkJCSAgJnRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSk7CisJY2xvc2UoZGF0YS0+ZmRbMF0pOworCWNsb3NlKGRhdGEtPmZkWzFdKTsKKwlpZiAoZmluaXNoX2Nvbm5lY3QoZGF0YS0+Y29ubikpIHsKKwkJZnJlZV9yZWZzKHJlZnMpOworCQlyZWZzID0gTlVMTDsKKwl9CisJZGF0YS0+Y29ubiA9IE5VTEw7CisJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDA7CisJZGF0YS0+b3B0aW9ucy5zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkID0KKwkJYXJncy5zZWxmX2NvbnRhaW5lZF9hbmRfY29ubmVjdGVkOworCisJZnJlZV9yZWZzKHJlZnNfdG1wKTsKKwlmcmVlX3JlZnMocmVmcyk7CisJZnJlZShkZXN0KTsKKwlyZXR1cm4gKHJlZnMgPyAwIDogLTEpOworfQorCitzdGF0aWMgaW50IHB1c2hfaGFkX2Vycm9ycyhzdHJ1Y3QgcmVmICpyZWYpCit7CisJZm9yICg7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN3aXRjaCAocmVmLT5zdGF0dXMpIHsKKwkJY2FzZSBSRUZfU1RBVFVTX05PTkU6CisJCWNhc2UgUkVGX1NUQVRVU19VUFRPREFURToKKwkJY2FzZSBSRUZfU1RBVFVTX09LOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHRyYW5zcG9ydF9yZWZzX3B1c2hlZChzdHJ1Y3QgcmVmICpyZWYpCit7CisJZm9yICg7IHJlZjsgcmVmID0gcmVmLT5uZXh0KSB7CisJCXN3aXRjaChyZWYtPnN0YXR1cykgeworCQljYXNlIFJFRl9TVEFUVVNfTk9ORToKKwkJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCB0cmFuc3BvcnRfdXBkYXRlX3RyYWNraW5nX3JlZihzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIHN0cnVjdCByZWYgKnJlZiwgaW50IHZlcmJvc2UpCit7CisJc3RydWN0IHJlZnNwZWMgcnM7CisKKwlpZiAocmVmLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19PSyAmJiByZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQlyZXR1cm47CisKKwlycy5zcmMgPSByZWYtPm5hbWU7CisJcnMuZHN0ID0gTlVMTDsKKworCWlmICghcmVtb3RlX2ZpbmRfdHJhY2tpbmcocmVtb3RlLCAmcnMpKSB7CisJCWlmICh2ZXJib3NlKQorCQkJZnByaW50ZihzdGRlcnIsICJ1cGRhdGluZyBsb2NhbCB0cmFja2luZyByZWYgJyVzJ1xuIiwgcnMuZHN0KTsKKwkJaWYgKHJlZi0+ZGVsZXRpb24pIHsKKwkJCWRlbGV0ZV9yZWYocnMuZHN0LCBOVUxMLCAwKTsKKwkJfSBlbHNlCisJCQl1cGRhdGVfcmVmKCJ1cGRhdGUgYnkgcHVzaCIsIHJzLmRzdCwKKwkJCQkJcmVmLT5uZXdfc2hhMSwgTlVMTCwgMCwgMCk7CisJCWZyZWUocnMuZHN0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3JlZl9zdGF0dXMoY2hhciBmbGFnLCBjb25zdCBjaGFyICpzdW1tYXJ5LCBzdHJ1Y3QgcmVmICp0bywgc3RydWN0IHJlZiAqZnJvbSwgY29uc3QgY2hhciAqbXNnLCBpbnQgcG9yY2VsYWluKQoreworCWlmIChwb3JjZWxhaW4pIHsKKwkJaWYgKGZyb20pCisJCQlmcHJpbnRmKHN0ZG91dCwgIiVjXHQlczolc1x0IiwgZmxhZywgZnJvbS0+bmFtZSwgdG8tPm5hbWUpOworCQllbHNlCisJCQlmcHJpbnRmKHN0ZG91dCwgIiVjXHQ6JXNcdCIsIGZsYWcsIHRvLT5uYW1lKTsKKwkJaWYgKG1zZykKKwkJCWZwcmludGYoc3Rkb3V0LCAiJXMgKCVzKVxuIiwgc3VtbWFyeSwgbXNnKTsKKwkJZWxzZQorCQkJZnByaW50ZihzdGRvdXQsICIlc1xuIiwgc3VtbWFyeSk7CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICIgJWMgJS0qcyAiLCBmbGFnLCBUUkFOU1BPUlRfU1VNTUFSWV9XSURUSCwgc3VtbWFyeSk7CisJCWlmIChmcm9tKQorCQkJZnByaW50ZihzdGRlcnIsICIlcyAtPiAlcyIsIHByZXR0aWZ5X3JlZm5hbWUoZnJvbS0+bmFtZSksIHByZXR0aWZ5X3JlZm5hbWUodG8tPm5hbWUpKTsKKwkJZWxzZQorCQkJZnB1dHMocHJldHRpZnlfcmVmbmFtZSh0by0+bmFtZSksIHN0ZGVycik7CisJCWlmIChtc2cpIHsKKwkJCWZwdXRzKCIgKCIsIHN0ZGVycik7CisJCQlmcHV0cyhtc2csIHN0ZGVycik7CisJCQlmcHV0YygnKScsIHN0ZGVycik7CisJCX0KKwkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzdGF0dXNfYWJicmV2KHVuc2lnbmVkIGNoYXIgc2hhMVsyMF0pCit7CisJcmV0dXJuIGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X29rX3JlZl9zdGF0dXMoc3RydWN0IHJlZiAqcmVmLCBpbnQgcG9yY2VsYWluKQoreworCWlmIChyZWYtPmRlbGV0aW9uKQorCQlwcmludF9yZWZfc3RhdHVzKCctJywgIltkZWxldGVkXSIsIHJlZiwgTlVMTCwgTlVMTCwgcG9yY2VsYWluKTsKKwllbHNlIGlmIChpc19udWxsX3NoYTEocmVmLT5vbGRfc2hhMSkpCisJCXByaW50X3JlZl9zdGF0dXMoJyonLAorCQkJKHN0YXJ0c193aXRoKHJlZi0+bmFtZSwgInJlZnMvdGFncy8iKSA/ICJbbmV3IHRhZ10iIDoKKwkJCSJbbmV3IGJyYW5jaF0iKSwKKwkJCXJlZiwgcmVmLT5wZWVyX3JlZiwgTlVMTCwgcG9yY2VsYWluKTsKKwllbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBxdWlja3JlZiA9IFNUUkJVRl9JTklUOworCQljaGFyIHR5cGU7CisJCWNvbnN0IGNoYXIgKm1zZzsKKworCQlzdHJidWZfYWRkc3RyKCZxdWlja3JlZiwgc3RhdHVzX2FiYnJldihyZWYtPm9sZF9zaGExKSk7CisJCWlmIChyZWYtPmZvcmNlZF91cGRhdGUpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJnF1aWNrcmVmLCAiLi4uIik7CisJCQl0eXBlID0gJysnOworCQkJbXNnID0gImZvcmNlZCB1cGRhdGUiOworCQl9IGVsc2UgeworCQkJc3RyYnVmX2FkZHN0cigmcXVpY2tyZWYsICIuLiIpOworCQkJdHlwZSA9ICcgJzsKKwkJCW1zZyA9IE5VTEw7CisJCX0KKwkJc3RyYnVmX2FkZHN0cigmcXVpY2tyZWYsIHN0YXR1c19hYmJyZXYocmVmLT5uZXdfc2hhMSkpOworCisJCXByaW50X3JlZl9zdGF0dXModHlwZSwgcXVpY2tyZWYuYnVmLCByZWYsIHJlZi0+cGVlcl9yZWYsIG1zZywgcG9yY2VsYWluKTsKKwkJc3RyYnVmX3JlbGVhc2UoJnF1aWNrcmVmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcHJpbnRfb25lX3B1c2hfc3RhdHVzKHN0cnVjdCByZWYgKnJlZiwgY29uc3QgY2hhciAqZGVzdCwgaW50IGNvdW50LCBpbnQgcG9yY2VsYWluKQoreworCWlmICghY291bnQpCisJCWZwcmludGYocG9yY2VsYWluID8gc3Rkb3V0IDogc3RkZXJyLCAiVG8gJXNcbiIsIGRlc3QpOworCisJc3dpdGNoKHJlZi0+c3RhdHVzKSB7CisJY2FzZSBSRUZfU1RBVFVTX05PTkU6CisJCXByaW50X3JlZl9zdGF0dXMoJ1gnLCAiW25vIG1hdGNoXSIsIHJlZiwgTlVMTCwgTlVMTCwgcG9yY2VsYWluKTsKKwkJYnJlYWs7CisJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9OT0RFTEVURToKKwkJcHJpbnRfcmVmX3N0YXR1cygnIScsICJbcmVqZWN0ZWRdIiwgcmVmLCBOVUxMLAorCQkJCQkJICJyZW1vdGUgZG9lcyBub3Qgc3VwcG9ydCBkZWxldGluZyByZWZzIiwgcG9yY2VsYWluKTsKKwkJYnJlYWs7CisJY2FzZSBSRUZfU1RBVFVTX1VQVE9EQVRFOgorCQlwcmludF9yZWZfc3RhdHVzKCc9JywgIlt1cCB0byBkYXRlXSIsIHJlZiwKKwkJCQkJCSByZWYtPnBlZXJfcmVmLCBOVUxMLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZWplY3RlZF0iLCByZWYsIHJlZi0+cGVlcl9yZWYsCisJCQkJCQkgIm5vbi1mYXN0LWZvcndhcmQiLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX0FMUkVBRFlfRVhJU1RTOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZWplY3RlZF0iLCByZWYsIHJlZi0+cGVlcl9yZWYsCisJCQkJCQkgImFscmVhZHkgZXhpc3RzIiwgcG9yY2VsYWluKTsKKwkJYnJlYWs7CisJY2FzZSBSRUZfU1RBVFVTX1JFSkVDVF9GRVRDSF9GSVJTVDoKKwkJcHJpbnRfcmVmX3N0YXR1cygnIScsICJbcmVqZWN0ZWRdIiwgcmVmLCByZWYtPnBlZXJfcmVmLAorCQkJCQkJICJmZXRjaCBmaXJzdCIsIHBvcmNlbGFpbik7CisJCWJyZWFrOworCWNhc2UgUkVGX1NUQVRVU19SRUpFQ1RfTkVFRFNfRk9SQ0U6CisJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlamVjdGVkXSIsIHJlZiwgcmVmLT5wZWVyX3JlZiwKKwkJCQkJCSAibmVlZHMgZm9yY2UiLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX1NUQUxFOgorCQlwcmludF9yZWZfc3RhdHVzKCchJywgIltyZWplY3RlZF0iLCByZWYsIHJlZi0+cGVlcl9yZWYsCisJCQkJCQkgInN0YWxlIGluZm8iLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfUkVKRUNUX1NIQUxMT1c6CisJCXByaW50X3JlZl9zdGF0dXMoJyEnLCAiW3JlamVjdGVkXSIsIHJlZiwgcmVmLT5wZWVyX3JlZiwKKwkJCQkJCSAibmV3IHNoYWxsb3cgcm9vdHMgbm90IGFsbG93ZWQiLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfUkVNT1RFX1JFSkVDVDoKKwkJcHJpbnRfcmVmX3N0YXR1cygnIScsICJbcmVtb3RlIHJlamVjdGVkXSIsIHJlZiwKKwkJCQkJCSByZWYtPmRlbGV0aW9uID8gTlVMTCA6IHJlZi0+cGVlcl9yZWYsCisJCQkJCQkgcmVmLT5yZW1vdGVfc3RhdHVzLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfRVhQRUNUSU5HX1JFUE9SVDoKKwkJcHJpbnRfcmVmX3N0YXR1cygnIScsICJbcmVtb3RlIGZhaWx1cmVdIiwgcmVmLAorCQkJCQkJIHJlZi0+ZGVsZXRpb24gPyBOVUxMIDogcmVmLT5wZWVyX3JlZiwKKwkJCQkJCSAicmVtb3RlIGZhaWxlZCB0byByZXBvcnQgc3RhdHVzIiwgcG9yY2VsYWluKTsKKwkJYnJlYWs7CisJY2FzZSBSRUZfU1RBVFVTX0FUT01JQ19QVVNIX0ZBSUxFRDoKKwkJcHJpbnRfcmVmX3N0YXR1cygnIScsICJbcmVqZWN0ZWRdIiwgcmVmLCByZWYtPnBlZXJfcmVmLAorCQkJCQkJICJhdG9taWMgcHVzaCBmYWlsZWQiLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwljYXNlIFJFRl9TVEFUVVNfT0s6CisJCXByaW50X29rX3JlZl9zdGF0dXMocmVmLCBwb3JjZWxhaW4pOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMTsKK30KKwordm9pZCB0cmFuc3BvcnRfcHJpbnRfcHVzaF9zdGF0dXMoY29uc3QgY2hhciAqZGVzdCwgc3RydWN0IHJlZiAqcmVmcywKKwkJCQkgIGludCB2ZXJib3NlLCBpbnQgcG9yY2VsYWluLCB1bnNpZ25lZCBpbnQgKnJlamVjdF9yZWFzb25zKQoreworCXN0cnVjdCByZWYgKnJlZjsKKwlpbnQgbiA9IDA7CisJdW5zaWduZWQgY2hhciBoZWFkX3NoYTFbMjBdOworCWNoYXIgKmhlYWQ7CisKKwloZWFkID0gcmVzb2x2ZV9yZWZkdXAoIkhFQUQiLCBSRVNPTFZFX1JFRl9SRUFESU5HLCBoZWFkX3NoYTEsIE5VTEwpOworCisJaWYgKHZlcmJvc2UpIHsKKwkJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJCWlmIChyZWYtPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1VQVE9EQVRFKQorCQkJCW4gKz0gcHJpbnRfb25lX3B1c2hfc3RhdHVzKHJlZiwgZGVzdCwgbiwgcG9yY2VsYWluKTsKKwl9CisKKwlmb3IgKHJlZiA9IHJlZnM7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQlpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19PSykKKwkJCW4gKz0gcHJpbnRfb25lX3B1c2hfc3RhdHVzKHJlZiwgZGVzdCwgbiwgcG9yY2VsYWluKTsKKworCSpyZWplY3RfcmVhc29ucyA9IDA7CisJZm9yIChyZWYgPSByZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkgeworCQlpZiAocmVmLT5zdGF0dXMgIT0gUkVGX1NUQVRVU19OT05FICYmCisJCSAgICByZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX1VQVE9EQVRFICYmCisJCSAgICByZWYtPnN0YXR1cyAhPSBSRUZfU1RBVFVTX09LKQorCQkJbiArPSBwcmludF9vbmVfcHVzaF9zdGF0dXMocmVmLCBkZXN0LCBuLCBwb3JjZWxhaW4pOworCQlpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfTk9ORkFTVEZPUldBUkQpIHsKKwkJCWlmIChoZWFkICE9IE5VTEwgJiYgIXN0cmNtcChoZWFkLCByZWYtPm5hbWUpKQorCQkJCSpyZWplY3RfcmVhc29ucyB8PSBSRUpFQ1RfTk9OX0ZGX0hFQUQ7CisJCQllbHNlCisJCQkJKnJlamVjdF9yZWFzb25zIHw9IFJFSkVDVF9OT05fRkZfT1RIRVI7CisJCX0gZWxzZSBpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfQUxSRUFEWV9FWElTVFMpIHsKKwkJCSpyZWplY3RfcmVhc29ucyB8PSBSRUpFQ1RfQUxSRUFEWV9FWElTVFM7CisJCX0gZWxzZSBpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfRkVUQ0hfRklSU1QpIHsKKwkJCSpyZWplY3RfcmVhc29ucyB8PSBSRUpFQ1RfRkVUQ0hfRklSU1Q7CisJCX0gZWxzZSBpZiAocmVmLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19SRUpFQ1RfTkVFRFNfRk9SQ0UpIHsKKwkJCSpyZWplY3RfcmVhc29ucyB8PSBSRUpFQ1RfTkVFRFNfRk9SQ0U7CisJCX0KKwl9CisJZnJlZShoZWFkKTsKK30KKwordm9pZCB0cmFuc3BvcnRfdmVyaWZ5X3JlbW90ZV9uYW1lcyhpbnQgbnJfaGVhZHMsIGNvbnN0IGNoYXIgKipoZWFkcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9oZWFkczsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmxvY2FsID0gaGVhZHNbaV07CisJCWNvbnN0IGNoYXIgKnJlbW90ZSA9IHN0cnJjaHIoaGVhZHNbaV0sICc6Jyk7CisKKwkJaWYgKCpsb2NhbCA9PSAnKycpCisJCQlsb2NhbCsrOworCisJCS8qIEEgbWF0Y2hpbmcgcmVmc3BlYyBpcyBva2F5LiAgKi8KKwkJaWYgKHJlbW90ZSA9PSBsb2NhbCAmJiByZW1vdGVbMV0gPT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCisJCXJlbW90ZSA9IHJlbW90ZSA/IChyZW1vdGUgKyAxKSA6IGxvY2FsOworCQlpZiAoY2hlY2tfcmVmbmFtZV9mb3JtYXQocmVtb3RlLAorCQkJCVJFRk5BTUVfQUxMT1dfT05FTEVWRUx8UkVGTkFNRV9SRUZTUEVDX1BBVFRFUk4pKQorCQkJZGllKCJyZW1vdGUgcGFydCBvZiByZWZzcGVjIGlzIG5vdCBhIHZhbGlkIG5hbWUgaW4gJXMiLAorCQkJCWhlYWRzW2ldKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2l0X3RyYW5zcG9ydF9wdXNoKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnMsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0gdHJhbnNwb3J0LT5kYXRhOworCXN0cnVjdCBzZW5kX3BhY2tfYXJncyBhcmdzOworCWludCByZXQ7CisKKwlpZiAoIWRhdGEtPmdvdF9yZW1vdGVfaGVhZHMpIHsKKwkJc3RydWN0IHJlZiAqdG1wX3JlZnM7CisJCWNvbm5lY3Rfc2V0dXAodHJhbnNwb3J0LCAxLCAwKTsKKworCQlnZXRfcmVtb3RlX2hlYWRzKGRhdGEtPmZkWzBdLCBOVUxMLCAwLCAmdG1wX3JlZnMsIFJFRl9OT1JNQUwsCisJCQkJIE5VTEwsICZkYXRhLT5zaGFsbG93KTsKKwkJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDE7CisJfQorCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCWFyZ3Muc2VuZF9taXJyb3IgPSAhIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUik7CisJYXJncy5mb3JjZV91cGRhdGUgPSAhIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0ZPUkNFKTsKKwlhcmdzLnVzZV90aGluX3BhY2sgPSBkYXRhLT5vcHRpb25zLnRoaW47CisJYXJncy52ZXJib3NlID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA+IDApOworCWFyZ3MucXVpZXQgPSAodHJhbnNwb3J0LT52ZXJib3NlIDwgMCk7CisJYXJncy5wcm9ncmVzcyA9IHRyYW5zcG9ydC0+cHJvZ3Jlc3M7CisJYXJncy5kcnlfcnVuID0gISEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOKTsKKwlhcmdzLnBvcmNlbGFpbiA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfUE9SQ0VMQUlOKTsKKwlhcmdzLmF0b21pYyA9ICEhKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfQVRPTUlDKTsKKwlhcmdzLnVybCA9IHRyYW5zcG9ydC0+dXJsOworCisJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfQ0VSVF9BTFdBWVMpCisJCWFyZ3MucHVzaF9jZXJ0ID0gU0VORF9QQUNLX1BVU0hfQ0VSVF9BTFdBWVM7CisJZWxzZSBpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9DRVJUX0lGX0FTS0VEKQorCQlhcmdzLnB1c2hfY2VydCA9IFNFTkRfUEFDS19QVVNIX0NFUlRfSUZfQVNLRUQ7CisJZWxzZQorCQlhcmdzLnB1c2hfY2VydCA9IFNFTkRfUEFDS19QVVNIX0NFUlRfTkVWRVI7CisKKwlyZXQgPSBzZW5kX3BhY2soJmFyZ3MsIGRhdGEtPmZkLCBkYXRhLT5jb25uLCByZW1vdGVfcmVmcywKKwkJCSZkYXRhLT5leHRyYV9oYXZlKTsKKworCWNsb3NlKGRhdGEtPmZkWzFdKTsKKwljbG9zZShkYXRhLT5mZFswXSk7CisJcmV0IHw9IGZpbmlzaF9jb25uZWN0KGRhdGEtPmNvbm4pOworCWRhdGEtPmNvbm4gPSBOVUxMOworCWRhdGEtPmdvdF9yZW1vdGVfaGVhZHMgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjb25uZWN0X2dpdChzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBjb25zdCBjaGFyICpleGVjdXRhYmxlLCBpbnQgZmRbMl0pCit7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHRyYW5zcG9ydC0+ZGF0YTsKKwlkYXRhLT5jb25uID0gZ2l0X2Nvbm5lY3QoZGF0YS0+ZmQsIHRyYW5zcG9ydC0+dXJsLAorCQkJCSBleGVjdXRhYmxlLCAwKTsKKwlmZFswXSA9IGRhdGEtPmZkWzBdOworCWZkWzFdID0gZGF0YS0+ZmRbMV07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGlzY29ubmVjdF9naXQoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworCXN0cnVjdCBnaXRfdHJhbnNwb3J0X2RhdGEgKmRhdGEgPSB0cmFuc3BvcnQtPmRhdGE7CisJaWYgKGRhdGEtPmNvbm4pIHsKKwkJaWYgKGRhdGEtPmdvdF9yZW1vdGVfaGVhZHMpCisJCQlwYWNrZXRfZmx1c2goZGF0YS0+ZmRbMV0pOworCQljbG9zZShkYXRhLT5mZFswXSk7CisJCWNsb3NlKGRhdGEtPmZkWzFdKTsKKwkJZmluaXNoX2Nvbm5lY3QoZGF0YS0+Y29ubik7CisJfQorCisJZnJlZShkYXRhKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCB0cmFuc3BvcnRfdGFrZV9vdmVyKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY2hpbGQpCit7CisJc3RydWN0IGdpdF90cmFuc3BvcnRfZGF0YSAqZGF0YTsKKworCWlmICghdHJhbnNwb3J0LT5zbWFydF9vcHRpb25zKQorCQlkaWUoIkJ1ZyBkZXRlY3RlZDogVGFraW5nIG92ZXIgdHJhbnNwb3J0IHJlcXVpcmVzIG5vbi1OVUxMICIKKwkJICAgICJzbWFydF9vcHRpb25zIGZpZWxkLiIpOworCisJZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSk7CisJZGF0YS0+b3B0aW9ucyA9ICp0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnM7CisJZGF0YS0+Y29ubiA9IGNoaWxkOworCWRhdGEtPmZkWzBdID0gZGF0YS0+Y29ubi0+b3V0OworCWRhdGEtPmZkWzFdID0gZGF0YS0+Y29ubi0+aW47CisJZGF0YS0+Z290X3JlbW90ZV9oZWFkcyA9IDA7CisJdHJhbnNwb3J0LT5kYXRhID0gZGF0YTsKKworCXRyYW5zcG9ydC0+c2V0X29wdGlvbiA9IE5VTEw7CisJdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0ID0gZ2V0X3JlZnNfdmlhX2Nvbm5lY3Q7CisJdHJhbnNwb3J0LT5mZXRjaCA9IGZldGNoX3JlZnNfdmlhX3BhY2s7CisJdHJhbnNwb3J0LT5wdXNoID0gTlVMTDsKKwl0cmFuc3BvcnQtPnB1c2hfcmVmcyA9IGdpdF90cmFuc3BvcnRfcHVzaDsKKwl0cmFuc3BvcnQtPmRpc2Nvbm5lY3QgPSBkaXNjb25uZWN0X2dpdDsKKwl0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMgPSAmKGRhdGEtPm9wdGlvbnMpOworCisJdHJhbnNwb3J0LT5jYW5ub3RfcmV1c2UgPSAxOworfQorCitzdGF0aWMgaW50IGlzX2ZpbGUoY29uc3QgY2hhciAqdXJsKQoreworCXN0cnVjdCBzdGF0IGJ1ZjsKKwlpZiAoc3RhdCh1cmwsICZidWYpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gU19JU1JFRyhidWYuc3RfbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgZXh0ZXJuYWxfc3BlY2lmaWNhdGlvbl9sZW4oY29uc3QgY2hhciAqdXJsKQoreworCXJldHVybiBzdHJjaHIodXJsLCAnOicpIC0gdXJsOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0cmluZ19saXN0ICpwcm90b2NvbF93aGl0ZWxpc3Qodm9pZCkKK3sKKwlzdGF0aWMgaW50IGVuYWJsZWQgPSAtMTsKKwlzdGF0aWMgc3RydWN0IHN0cmluZ19saXN0IGFsbG93ZWQgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKworCWlmIChlbmFibGVkIDwgMCkgeworCQljb25zdCBjaGFyICp2ID0gZ2V0ZW52KCJHSVRfQUxMT1dfUFJPVE9DT0wiKTsKKwkJaWYgKHYpIHsKKwkJCXN0cmluZ19saXN0X3NwbGl0KCZhbGxvd2VkLCB2LCAnOicsIC0xKTsKKwkJCXN0cmluZ19saXN0X3NvcnQoJmFsbG93ZWQpOworCQkJZW5hYmxlZCA9IDE7CisJCX0gZWxzZSB7CisJCQllbmFibGVkID0gMDsKKwkJfQorCX0KKworCXJldHVybiBlbmFibGVkID8gJmFsbG93ZWQgOiBOVUxMOworfQorCitpbnQgaXNfdHJhbnNwb3J0X2FsbG93ZWQoY29uc3QgY2hhciAqdHlwZSkKK3sKKwljb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmFsbG93ZWQgPSBwcm90b2NvbF93aGl0ZWxpc3QoKTsKKwlyZXR1cm4gIWFsbG93ZWQgfHwgc3RyaW5nX2xpc3RfaGFzX3N0cmluZyhhbGxvd2VkLCB0eXBlKTsKK30KKwordm9pZCB0cmFuc3BvcnRfY2hlY2tfYWxsb3dlZChjb25zdCBjaGFyICp0eXBlKQoreworCWlmICghaXNfdHJhbnNwb3J0X2FsbG93ZWQodHlwZSkpCisJCWRpZSgidHJhbnNwb3J0ICclcycgbm90IGFsbG93ZWQiLCB0eXBlKTsKK30KKworaW50IHRyYW5zcG9ydF9yZXN0cmljdF9wcm90b2NvbHModm9pZCkKK3sKKwlyZXR1cm4gISFwcm90b2NvbF93aGl0ZWxpc3QoKTsKK30KKworc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0X2dldChzdHJ1Y3QgcmVtb3RlICpyZW1vdGUsIGNvbnN0IGNoYXIgKnVybCkKK3sKKwljb25zdCBjaGFyICpoZWxwZXI7CisJc3RydWN0IHRyYW5zcG9ydCAqcmV0ID0geGNhbGxvYygxLCBzaXplb2YoKnJldCkpOworCisJcmV0LT5wcm9ncmVzcyA9IGlzYXR0eSgyKTsKKworCWlmICghcmVtb3RlKQorCQlkaWUoIk5vIHJlbW90ZSBwcm92aWRlZCB0byB0cmFuc3BvcnRfZ2V0KCkiKTsKKworCXJldC0+Z290X3JlbW90ZV9yZWZzID0gMDsKKwlyZXQtPnJlbW90ZSA9IHJlbW90ZTsKKwloZWxwZXIgPSByZW1vdGUtPmZvcmVpZ25fdmNzOworCisJaWYgKCF1cmwgJiYgcmVtb3RlLT51cmwpCisJCXVybCA9IHJlbW90ZS0+dXJsWzBdOworCXJldC0+dXJsID0gdXJsOworCisJLyogbWF5YmUgaXQgaXMgYSBmb3JlaWduIFVSTD8gKi8KKwlpZiAodXJsKSB7CisJCWNvbnN0IGNoYXIgKnAgPSB1cmw7CisKKwkJd2hpbGUgKGlzX3VybHNjaGVtZWNoYXIocCA9PSB1cmwsICpwKSkKKwkJCXArKzsKKwkJaWYgKHN0YXJ0c193aXRoKHAsICI6OiIpKQorCQkJaGVscGVyID0geHN0cm5kdXAodXJsLCBwIC0gdXJsKTsKKwl9CisKKwlpZiAoaGVscGVyKSB7CisJCXRyYW5zcG9ydF9oZWxwZXJfaW5pdChyZXQsIGhlbHBlcik7CisJfSBlbHNlIGlmIChzdGFydHNfd2l0aCh1cmwsICJyc3luYzoiKSkgeworCQl0cmFuc3BvcnRfY2hlY2tfYWxsb3dlZCgicnN5bmMiKTsKKwkJcmV0LT5nZXRfcmVmc19saXN0ID0gZ2V0X3JlZnNfdmlhX3JzeW5jOworCQlyZXQtPmZldGNoID0gZmV0Y2hfb2Jqc192aWFfcnN5bmM7CisJCXJldC0+cHVzaCA9IHJzeW5jX3RyYW5zcG9ydF9wdXNoOworCQlyZXQtPnNtYXJ0X29wdGlvbnMgPSBOVUxMOworCX0gZWxzZSBpZiAodXJsX2lzX2xvY2FsX25vdF9zc2godXJsKSAmJiBpc19maWxlKHVybCkgJiYgaXNfYnVuZGxlKHVybCwgMSkpIHsKKwkJc3RydWN0IGJ1bmRsZV90cmFuc3BvcnRfZGF0YSAqZGF0YSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkYXRhKSk7CisJCXRyYW5zcG9ydF9jaGVja19hbGxvd2VkKCJmaWxlIik7CisJCXJldC0+ZGF0YSA9IGRhdGE7CisJCXJldC0+Z2V0X3JlZnNfbGlzdCA9IGdldF9yZWZzX2Zyb21fYnVuZGxlOworCQlyZXQtPmZldGNoID0gZmV0Y2hfcmVmc19mcm9tX2J1bmRsZTsKKwkJcmV0LT5kaXNjb25uZWN0ID0gY2xvc2VfYnVuZGxlOworCQlyZXQtPnNtYXJ0X29wdGlvbnMgPSBOVUxMOworCX0gZWxzZSBpZiAoIWlzX3VybCh1cmwpCisJCXx8IHN0YXJ0c193aXRoKHVybCwgImZpbGU6Ly8iKQorCQl8fCBzdGFydHNfd2l0aCh1cmwsICJnaXQ6Ly8iKQorCQl8fCBzdGFydHNfd2l0aCh1cmwsICJzc2g6Ly8iKQorCQl8fCBzdGFydHNfd2l0aCh1cmwsICJnaXQrc3NoOi8vIikKKwkJfHwgc3RhcnRzX3dpdGgodXJsLCAic3NoK2dpdDovLyIpKSB7CisJCS8qCisJCSAqIFRoZXNlIGFyZSBidWlsdGluIHNtYXJ0IHRyYW5zcG9ydHM7ICJhbGxvd2VkIiB0cmFuc3BvcnRzCisJCSAqIHdpbGwgYmUgY2hlY2tlZCBpbmRpdmlkdWFsbHkgaW4gZ2l0X2Nvbm5lY3QuCisJCSAqLworCQlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9kYXRhICpkYXRhID0geGNhbGxvYygxLCBzaXplb2YoKmRhdGEpKTsKKwkJcmV0LT5kYXRhID0gZGF0YTsKKwkJcmV0LT5zZXRfb3B0aW9uID0gTlVMTDsKKwkJcmV0LT5nZXRfcmVmc19saXN0ID0gZ2V0X3JlZnNfdmlhX2Nvbm5lY3Q7CisJCXJldC0+ZmV0Y2ggPSBmZXRjaF9yZWZzX3ZpYV9wYWNrOworCQlyZXQtPnB1c2hfcmVmcyA9IGdpdF90cmFuc3BvcnRfcHVzaDsKKwkJcmV0LT5jb25uZWN0ID0gY29ubmVjdF9naXQ7CisJCXJldC0+ZGlzY29ubmVjdCA9IGRpc2Nvbm5lY3RfZ2l0OworCQlyZXQtPnNtYXJ0X29wdGlvbnMgPSAmKGRhdGEtPm9wdGlvbnMpOworCisJCWRhdGEtPmNvbm4gPSBOVUxMOworCQlkYXRhLT5nb3RfcmVtb3RlX2hlYWRzID0gMDsKKwl9IGVsc2UgeworCQkvKiBVbmtub3duIHByb3RvY29sIGluIFVSTC4gUGFzcyB0byBleHRlcm5hbCBoYW5kbGVyLiAqLworCQlpbnQgbGVuID0gZXh0ZXJuYWxfc3BlY2lmaWNhdGlvbl9sZW4odXJsKTsKKwkJY2hhciAqaGFuZGxlciA9IHhtZW1kdXB6KHVybCwgbGVuKTsKKwkJdHJhbnNwb3J0X2hlbHBlcl9pbml0KHJldCwgaGFuZGxlcik7CisJfQorCisJaWYgKHJldC0+c21hcnRfb3B0aW9ucykgeworCQlyZXQtPnNtYXJ0X29wdGlvbnMtPnRoaW4gPSAxOworCQlyZXQtPnNtYXJ0X29wdGlvbnMtPnVwbG9hZHBhY2sgPSAiZ2l0LXVwbG9hZC1wYWNrIjsKKwkJaWYgKHJlbW90ZS0+dXBsb2FkcGFjaykKKwkJCXJldC0+c21hcnRfb3B0aW9ucy0+dXBsb2FkcGFjayA9IHJlbW90ZS0+dXBsb2FkcGFjazsKKwkJcmV0LT5zbWFydF9vcHRpb25zLT5yZWNlaXZlcGFjayA9ICJnaXQtcmVjZWl2ZS1wYWNrIjsKKwkJaWYgKHJlbW90ZS0+cmVjZWl2ZXBhY2spCisJCQlyZXQtPnNtYXJ0X29wdGlvbnMtPnJlY2VpdmVwYWNrID0gcmVtb3RlLT5yZWNlaXZlcGFjazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgdHJhbnNwb3J0X3NldF9vcHRpb24oc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworCWludCBnaXRfcmVwb3J0cyA9IDEsIHByb3RvY29sX3JlcG9ydHMgPSAxOworCisJaWYgKHRyYW5zcG9ydC0+c21hcnRfb3B0aW9ucykKKwkJZ2l0X3JlcG9ydHMgPSBzZXRfZ2l0X29wdGlvbih0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMsCisJCQkJCSAgICAgbmFtZSwgdmFsdWUpOworCisJaWYgKHRyYW5zcG9ydC0+c2V0X29wdGlvbikKKwkJcHJvdG9jb2xfcmVwb3J0cyA9IHRyYW5zcG9ydC0+c2V0X29wdGlvbih0cmFuc3BvcnQsIG5hbWUsCisJCQkJCQkJdmFsdWUpOworCisJLyogSWYgZWl0aGVyIHJlcG9ydCBpcyAwLCByZXBvcnQgMCAoc3VjY2VzcykuICovCisJaWYgKCFnaXRfcmVwb3J0cyB8fCAhcHJvdG9jb2xfcmVwb3J0cykKKwkJcmV0dXJuIDA7CisJLyogSWYgZWl0aGVyIHJlcG9ydHMgLTEgKGludmFsaWQgdmFsdWUpLCByZXBvcnQgLTEuICovCisJaWYgKChnaXRfcmVwb3J0cyA9PSAtMSkgfHwgKHByb3RvY29sX3JlcG9ydHMgPT0gLTEpKQorCQlyZXR1cm4gLTE7CisJLyogT3RoZXJ3aXNlIGlmIGJvdGggcmVwb3J0IHVua25vd24sIHJlcG9ydCB1bmtub3duLiAqLworCXJldHVybiAxOworfQorCit2b2lkIHRyYW5zcG9ydF9zZXRfdmVyYm9zaXR5KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IHZlcmJvc2l0eSwKKwlpbnQgZm9yY2VfcHJvZ3Jlc3MpCit7CisJaWYgKHZlcmJvc2l0eSA+PSAxKQorCQl0cmFuc3BvcnQtPnZlcmJvc2UgPSB2ZXJib3NpdHkgPD0gMyA/IHZlcmJvc2l0eSA6IDM7CisJaWYgKHZlcmJvc2l0eSA8IDApCisJCXRyYW5zcG9ydC0+dmVyYm9zZSA9IC0xOworCisJLyoqCisJICogUnVsZXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0byByZXBvcnQgcHJvZ3Jlc3MgKHByb2Nlc3NpbmcgYWJvcnRzCisJICogd2hlbiBhIHJ1bGUgaXMgc2F0aXNmaWVkKToKKwkgKgorCSAqICAgLiBSZXBvcnQgcHJvZ3Jlc3MsIGlmIGZvcmNlX3Byb2dyZXNzIGlzIDEgKGllLiAtLXByb2dyZXNzKS4KKwkgKiAgIC4gRG9uJ3QgcmVwb3J0IHByb2dyZXNzLCBpZiBmb3JjZV9wcm9ncmVzcyBpcyAwIChpZS4gLS1uby1wcm9ncmVzcykuCisJICogICAuIERvbid0IHJlcG9ydCBwcm9ncmVzcywgaWYgdmVyYm9zaXR5IDwgMCAoaWUuIC1xLy0tcXVpZXQgKS4KKwkgKiAgIC4gUmVwb3J0IHByb2dyZXNzIGlmIGlzYXR0eSgyKSBpcyAxLgorCSAqKi8KKwlpZiAoZm9yY2VfcHJvZ3Jlc3MgPj0gMCkKKwkJdHJhbnNwb3J0LT5wcm9ncmVzcyA9ICEhZm9yY2VfcHJvZ3Jlc3M7CisJZWxzZQorCQl0cmFuc3BvcnQtPnByb2dyZXNzID0gdmVyYm9zaXR5ID49IDAgJiYgaXNhdHR5KDIpOworfQorCitzdGF0aWMgdm9pZCBkaWVfd2l0aF91bnB1c2hlZF9zdWJtb2R1bGVzKHN0cnVjdCBzdHJpbmdfbGlzdCAqbmVlZHNfcHVzaGluZykKK3sKKwlpbnQgaTsKKworCWZwcmludGYoc3RkZXJyLCAiVGhlIGZvbGxvd2luZyBzdWJtb2R1bGUgcGF0aHMgY29udGFpbiBjaGFuZ2VzIHRoYXQgY2FuXG4iCisJCQkibm90IGJlIGZvdW5kIG9uIGFueSByZW1vdGU6XG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmVlZHNfcHVzaGluZy0+bnI7IGkrKykKKwkJcHJpbnRmKCIgICVzXG4iLCBuZWVkc19wdXNoaW5nLT5pdGVtc1tpXS5zdHJpbmcpOworCWZwcmludGYoc3RkZXJyLCAiXG5QbGVhc2UgdHJ5XG5cbiIKKwkJCSIJZ2l0IHB1c2ggLS1yZWN1cnNlLXN1Ym1vZHVsZXM9b24tZGVtYW5kXG5cbiIKKwkJCSJvciBjZCB0byB0aGUgcGF0aCBhbmQgdXNlXG5cbiIKKwkJCSIJZ2l0IHB1c2hcblxuIgorCQkJInRvIHB1c2ggdGhlbSB0byBhIHJlbW90ZS5cblxuIik7CisKKwlzdHJpbmdfbGlzdF9jbGVhcihuZWVkc19wdXNoaW5nLCAwKTsKKworCWRpZSgiQWJvcnRpbmcuIik7Cit9CisKK3N0YXRpYyBpbnQgcnVuX3ByZV9wdXNoX2hvb2soc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJICAgICBzdHJ1Y3QgcmVmICpyZW1vdGVfcmVmcykKK3sKKwlpbnQgcmV0ID0gMCwgeDsKKwlzdHJ1Y3QgcmVmICpyOworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHByb2MgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBidWY7CisJY29uc3QgY2hhciAqYXJndls0XTsKKworCWlmICghKGFyZ3ZbMF0gPSBmaW5kX2hvb2soInByZS1wdXNoIikpKQorCQlyZXR1cm4gMDsKKworCWFyZ3ZbMV0gPSB0cmFuc3BvcnQtPnJlbW90ZS0+bmFtZTsKKwlhcmd2WzJdID0gdHJhbnNwb3J0LT51cmw7CisJYXJndlszXSA9IE5VTEw7CisKKwlwcm9jLmFyZ3YgPSBhcmd2OworCXByb2MuaW4gPSAtMTsKKworCWlmIChzdGFydF9jb21tYW5kKCZwcm9jKSkgeworCQlmaW5pc2hfY29tbWFuZCgmcHJvYyk7CisJCXJldHVybiAtMTsKKwl9CisKKwlzdHJidWZfaW5pdCgmYnVmLCAyNTYpOworCisJZm9yIChyID0gcmVtb3RlX3JlZnM7IHI7IHIgPSByLT5uZXh0KSB7CisJCWlmICghci0+cGVlcl9yZWYpIGNvbnRpbnVlOworCQlpZiAoci0+c3RhdHVzID09IFJFRl9TVEFUVVNfUkVKRUNUX05PTkZBU1RGT1JXQVJEKSBjb250aW51ZTsKKwkJaWYgKHItPnN0YXR1cyA9PSBSRUZfU1RBVFVTX1JFSkVDVF9TVEFMRSkgY29udGludWU7CisJCWlmIChyLT5zdGF0dXMgPT0gUkVGX1NUQVRVU19VUFRPREFURSkgY29udGludWU7CisKKwkJc3RyYnVmX3Jlc2V0KCZidWYpOworCQlzdHJidWZfYWRkZiggJmJ1ZiwgIiVzICVzICVzICVzXG4iLAorCQkJIHItPnBlZXJfcmVmLT5uYW1lLCBzaGExX3RvX2hleChyLT5uZXdfc2hhMSksCisJCQkgci0+bmFtZSwgc2hhMV90b19oZXgoci0+b2xkX3NoYTEpKTsKKworCQlpZiAod3JpdGVfaW5fZnVsbChwcm9jLmluLCBidWYuYnVmLCBidWYubGVuKSAhPSBidWYubGVuKSB7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisKKwl4ID0gY2xvc2UocHJvYy5pbik7CisJaWYgKCFyZXQpCisJCXJldCA9IHg7CisKKwl4ID0gZmluaXNoX2NvbW1hbmQoJnByb2MpOworCWlmICghcmV0KQorCQlyZXQgPSB4OworCisJcmV0dXJuIHJldDsKK30KKworaW50IHRyYW5zcG9ydF9wdXNoKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJICAgaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MsCisJCSAgIHVuc2lnbmVkIGludCAqcmVqZWN0X3JlYXNvbnMpCit7CisJKnJlamVjdF9yZWFzb25zID0gMDsKKwl0cmFuc3BvcnRfdmVyaWZ5X3JlbW90ZV9uYW1lcyhyZWZzcGVjX25yLCByZWZzcGVjKTsKKworCWlmICh0cmFuc3BvcnQtPnB1c2gpIHsKKwkJLyogTWF5YmUgRklYTUUuIEJ1dCBubyBpbXBvcnRhbnQgdHJhbnNwb3J0IHVzZXMgdGhpcyBjYXNlLiAqLworCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9TRVRfVVBTVFJFQU0pCisJCQlkaWUoIlRoaXMgdHJhbnNwb3J0IGRvZXMgbm90IHN1cHBvcnQgdXNpbmcgLS1zZXQtdXBzdHJlYW0iKTsKKworCQlyZXR1cm4gdHJhbnNwb3J0LT5wdXNoKHRyYW5zcG9ydCwgcmVmc3BlY19uciwgcmVmc3BlYywgZmxhZ3MpOworCX0gZWxzZSBpZiAodHJhbnNwb3J0LT5wdXNoX3JlZnMpIHsKKwkJc3RydWN0IHJlZiAqcmVtb3RlX3JlZnM7CisJCXN0cnVjdCByZWYgKmxvY2FsX3JlZnMgPSBnZXRfbG9jYWxfaGVhZHMoKTsKKwkJaW50IG1hdGNoX2ZsYWdzID0gTUFUQ0hfUkVGU19OT05FOworCQlpbnQgdmVyYm9zZSA9ICh0cmFuc3BvcnQtPnZlcmJvc2UgPiAwKTsKKwkJaW50IHF1aWV0ID0gKHRyYW5zcG9ydC0+dmVyYm9zZSA8IDApOworCQlpbnQgcG9yY2VsYWluID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9QT1JDRUxBSU47CisJCWludCBwcmV0ZW5kID0gZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9EUllfUlVOOworCQlpbnQgcHVzaF9yZXQsIHJldCwgZXJyOworCisJCWlmIChjaGVja19wdXNoX3JlZnMobG9jYWxfcmVmcywgcmVmc3BlY19uciwgcmVmc3BlYykgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCXJlbW90ZV9yZWZzID0gdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCwgMSk7CisKKwkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfQUxMKQorCQkJbWF0Y2hfZmxhZ3MgfD0gTUFUQ0hfUkVGU19BTEw7CisJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX01JUlJPUikKKwkJCW1hdGNoX2ZsYWdzIHw9IE1BVENIX1JFRlNfTUlSUk9SOworCQlpZiAoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9QUlVORSkKKwkJCW1hdGNoX2ZsYWdzIHw9IE1BVENIX1JFRlNfUFJVTkU7CisJCWlmIChmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0ZPTExPV19UQUdTKQorCQkJbWF0Y2hfZmxhZ3MgfD0gTUFUQ0hfUkVGU19GT0xMT1dfVEFHUzsKKworCQlpZiAobWF0Y2hfcHVzaF9yZWZzKGxvY2FsX3JlZnMsICZyZW1vdGVfcmVmcywKKwkJCQkgICAgcmVmc3BlY19uciwgcmVmc3BlYywgbWF0Y2hfZmxhZ3MpKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlpZiAodHJhbnNwb3J0LT5zbWFydF9vcHRpb25zICYmCisJCSAgICB0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMtPmNhcyAmJgorCQkgICAgIWlzX2VtcHR5X2Nhcyh0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMtPmNhcykpCisJCQlhcHBseV9wdXNoX2Nhcyh0cmFuc3BvcnQtPnNtYXJ0X29wdGlvbnMtPmNhcywKKwkJCQkgICAgICAgdHJhbnNwb3J0LT5yZW1vdGUsIHJlbW90ZV9yZWZzKTsKKworCQlzZXRfcmVmX3N0YXR1c19mb3JfcHVzaChyZW1vdGVfcmVmcywKKwkJCWZsYWdzICYgVFJBTlNQT1JUX1BVU0hfTUlSUk9SLAorCQkJZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9GT1JDRSk7CisKKwkJaWYgKCEoZmxhZ3MgJiBUUkFOU1BPUlRfUFVTSF9OT19IT09LKSkKKwkJCWlmIChydW5fcHJlX3B1c2hfaG9vayh0cmFuc3BvcnQsIHJlbW90ZV9yZWZzKSkKKwkJCQlyZXR1cm4gLTE7CisKKwkJaWYgKChmbGFncyAmIFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EKSAmJiAhaXNfYmFyZV9yZXBvc2l0b3J5KCkpIHsKKwkJCXN0cnVjdCByZWYgKnJlZiA9IHJlbW90ZV9yZWZzOworCQkJZm9yICg7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorCQkJCWlmICghaXNfbnVsbF9zaGExKHJlZi0+bmV3X3NoYTEpICYmCisJCQkJICAgICFwdXNoX3VucHVzaGVkX3N1Ym1vZHVsZXMocmVmLT5uZXdfc2hhMSwKKwkJCQkJICAgIHRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lKSkKKwkJCQkgICAgZGllICgiRmFpbGVkIHRvIHB1c2ggYWxsIG5lZWRlZCBzdWJtb2R1bGVzISIpOworCQl9CisKKwkJaWYgKChmbGFncyAmIChUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX09OX0RFTUFORCB8CisJCQkgICAgICBUUkFOU1BPUlRfUkVDVVJTRV9TVUJNT0RVTEVTX0NIRUNLKSkgJiYgIWlzX2JhcmVfcmVwb3NpdG9yeSgpKSB7CisJCQlzdHJ1Y3QgcmVmICpyZWYgPSByZW1vdGVfcmVmczsKKwkJCXN0cnVjdCBzdHJpbmdfbGlzdCBuZWVkc19wdXNoaW5nID0gU1RSSU5HX0xJU1RfSU5JVF9EVVA7CisKKwkJCWZvciAoOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJCQlpZiAoIWlzX251bGxfc2hhMShyZWYtPm5ld19zaGExKSAmJgorCQkJCSAgICBmaW5kX3VucHVzaGVkX3N1Ym1vZHVsZXMocmVmLT5uZXdfc2hhMSwKKwkJCQkJICAgIHRyYW5zcG9ydC0+cmVtb3RlLT5uYW1lLCAmbmVlZHNfcHVzaGluZykpCisJCQkJCWRpZV93aXRoX3VucHVzaGVkX3N1Ym1vZHVsZXMoJm5lZWRzX3B1c2hpbmcpOworCQl9CisKKwkJcHVzaF9yZXQgPSB0cmFuc3BvcnQtPnB1c2hfcmVmcyh0cmFuc3BvcnQsIHJlbW90ZV9yZWZzLCBmbGFncyk7CisJCWVyciA9IHB1c2hfaGFkX2Vycm9ycyhyZW1vdGVfcmVmcyk7CisJCXJldCA9IHB1c2hfcmV0IHwgZXJyOworCisJCWlmICghcXVpZXQgfHwgZXJyKQorCQkJdHJhbnNwb3J0X3ByaW50X3B1c2hfc3RhdHVzKHRyYW5zcG9ydC0+dXJsLCByZW1vdGVfcmVmcywKKwkJCQkJdmVyYm9zZSB8IHBvcmNlbGFpbiwgcG9yY2VsYWluLAorCQkJCQlyZWplY3RfcmVhc29ucyk7CisKKwkJaWYgKGZsYWdzICYgVFJBTlNQT1JUX1BVU0hfU0VUX1VQU1RSRUFNKQorCQkJc2V0X3Vwc3RyZWFtcyh0cmFuc3BvcnQsIHJlbW90ZV9yZWZzLCBwcmV0ZW5kKTsKKworCQlpZiAoIShmbGFncyAmIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU4pKSB7CisJCQlzdHJ1Y3QgcmVmICpyZWY7CisJCQlmb3IgKHJlZiA9IHJlbW90ZV9yZWZzOyByZWY7IHJlZiA9IHJlZi0+bmV4dCkKKwkJCQl0cmFuc3BvcnRfdXBkYXRlX3RyYWNraW5nX3JlZih0cmFuc3BvcnQtPnJlbW90ZSwgcmVmLCB2ZXJib3NlKTsKKwkJfQorCisJCWlmIChwb3JjZWxhaW4gJiYgIXB1c2hfcmV0KQorCQkJcHV0cygiRG9uZSIpOworCQllbHNlIGlmICghcXVpZXQgJiYgIXJldCAmJiAhdHJhbnNwb3J0X3JlZnNfcHVzaGVkKHJlbW90ZV9yZWZzKSkKKwkJCWZwcmludGYoc3RkZXJyLCAiRXZlcnl0aGluZyB1cC10by1kYXRlXG4iKTsKKworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMTsKK30KKworY29uc3Qgc3RydWN0IHJlZiAqdHJhbnNwb3J0X2dldF9yZW1vdGVfcmVmcyhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJaWYgKCF0cmFuc3BvcnQtPmdvdF9yZW1vdGVfcmVmcykgeworCQl0cmFuc3BvcnQtPnJlbW90ZV9yZWZzID0gdHJhbnNwb3J0LT5nZXRfcmVmc19saXN0KHRyYW5zcG9ydCwgMCk7CisJCXRyYW5zcG9ydC0+Z290X3JlbW90ZV9yZWZzID0gMTsKKwl9CisKKwlyZXR1cm4gdHJhbnNwb3J0LT5yZW1vdGVfcmVmczsKK30KKworaW50IHRyYW5zcG9ydF9mZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmcykKK3sKKwlpbnQgcmM7CisJaW50IG5yX2hlYWRzID0gMCwgbnJfYWxsb2MgPSAwLCBucl9yZWZzID0gMDsKKwlzdHJ1Y3QgcmVmICoqaGVhZHMgPSBOVUxMOworCXN0cnVjdCByZWYgKnJtOworCisJZm9yIChybSA9IHJlZnM7IHJtOyBybSA9IHJtLT5uZXh0KSB7CisJCW5yX3JlZnMrKzsKKwkJaWYgKHJtLT5wZWVyX3JlZiAmJgorCQkgICAgIWlzX251bGxfc2hhMShybS0+b2xkX3NoYTEpICYmCisJCSAgICAhaGFzaGNtcChybS0+cGVlcl9yZWYtPm9sZF9zaGExLCBybS0+b2xkX3NoYTEpKQorCQkJY29udGludWU7CisJCUFMTE9DX0dST1coaGVhZHMsIG5yX2hlYWRzICsgMSwgbnJfYWxsb2MpOworCQloZWFkc1tucl9oZWFkcysrXSA9IHJtOworCX0KKworCWlmICghbnJfaGVhZHMpIHsKKwkJLyoKKwkJICogV2hlbiBkZWVwZW5pbmcgb2YgYSBzaGFsbG93IHJlcG9zaXRvcnkgaXMgcmVxdWVzdGVkLAorCQkgKiB0aGVuIGxvY2FsIGFuZCByZW1vdGUgcmVmcyBhcmUgbGlrZWx5IHRvIHN0aWxsIGJlIGVxdWFsLgorCQkgKiBKdXN0IGZlZWQgdGhlbSBhbGwgdG8gdGhlIGZldGNoIG1ldGhvZCBpbiB0aGF0IGNhc2UuCisJCSAqIFRoaXMgY29uZGl0aW9uIHNob3VsZG4ndCBiZSBtZXQgaW4gYSBub24tZGVlcGVuaW5nIGZldGNoCisJCSAqIChzZWUgYnVpbHRpbi9mZXRjaC5jOnF1aWNrZmV0Y2goKSkuCisJCSAqLworCQloZWFkcyA9IHhtYWxsb2MobnJfcmVmcyAqIHNpemVvZigqaGVhZHMpKTsKKwkJZm9yIChybSA9IHJlZnM7IHJtOyBybSA9IHJtLT5uZXh0KQorCQkJaGVhZHNbbnJfaGVhZHMrK10gPSBybTsKKwl9CisKKwlyYyA9IHRyYW5zcG9ydC0+ZmV0Y2godHJhbnNwb3J0LCBucl9oZWFkcywgaGVhZHMpOworCisJZnJlZShoZWFkcyk7CisJcmV0dXJuIHJjOworfQorCit2b2lkIHRyYW5zcG9ydF91bmxvY2tfcGFjayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisJaWYgKHRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSkgeworCQl1bmxpbmtfb3Jfd2Fybih0cmFuc3BvcnQtPnBhY2tfbG9ja2ZpbGUpOworCQlmcmVlKHRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSk7CisJCXRyYW5zcG9ydC0+cGFja19sb2NrZmlsZSA9IE5VTEw7CisJfQorfQorCitpbnQgdHJhbnNwb3J0X2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBjb25zdCBjaGFyICpleGVjLCBpbnQgZmRbMl0pCit7CisJaWYgKHRyYW5zcG9ydC0+Y29ubmVjdCkKKwkJcmV0dXJuIHRyYW5zcG9ydC0+Y29ubmVjdCh0cmFuc3BvcnQsIG5hbWUsIGV4ZWMsIGZkKTsKKwllbHNlCisJCWRpZSgiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiKTsKK30KKworaW50IHRyYW5zcG9ydF9kaXNjb25uZWN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpZiAodHJhbnNwb3J0LT5kaXNjb25uZWN0KQorCQlyZXQgPSB0cmFuc3BvcnQtPmRpc2Nvbm5lY3QodHJhbnNwb3J0KTsKKwlmcmVlKHRyYW5zcG9ydCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFN0cmlwIHVzZXJuYW1lIChhbmQgcGFzc3dvcmQpIGZyb20gYSBVUkwgYW5kIHJldHVybgorICogaXQgaW4gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nLgorICovCitjaGFyICp0cmFuc3BvcnRfYW5vbnltaXplX3VybChjb25zdCBjaGFyICp1cmwpCit7CisJY2hhciAqYW5vbl91cmwsICpzY2hlbWVfcHJlZml4LCAqYW5vbl9wYXJ0OworCXNpemVfdCBhbm9uX2xlbiwgcHJlZml4X2xlbiA9IDA7CisKKwlhbm9uX3BhcnQgPSBzdHJjaHIodXJsLCAnQCcpOworCWlmICh1cmxfaXNfbG9jYWxfbm90X3NzaCh1cmwpIHx8ICFhbm9uX3BhcnQpCisJCWdvdG8gbGl0ZXJhbF9jb3B5OworCisJYW5vbl9sZW4gPSBzdHJsZW4oKythbm9uX3BhcnQpOworCXNjaGVtZV9wcmVmaXggPSBzdHJzdHIodXJsLCAiOi8vIik7CisJaWYgKCFzY2hlbWVfcHJlZml4KSB7CisJCWlmICghc3RyY2hyKGFub25fcGFydCwgJzonKSkKKwkJCS8qIGNhbm5vdCBiZSAibWVAdGhlcmU6L3BhdGgvbmFtZSIgKi8KKwkJCWdvdG8gbGl0ZXJhbF9jb3B5OworCX0gZWxzZSB7CisJCWNvbnN0IGNoYXIgKmNwOworCQkvKiBtYWtlIHN1cmUgc2NoZW1lIGlzIHJlYXNvbmFibGUgKi8KKwkJZm9yIChjcCA9IHVybDsgY3AgPCBzY2hlbWVfcHJlZml4OyBjcCsrKSB7CisJCQlzd2l0Y2ggKCpjcCkgeworCQkJCS8qIFJGQyAxNzM4IDIuMSAqLworCQkJY2FzZSAnKyc6IGNhc2UgJy4nOiBjYXNlICctJzoKKwkJCQlicmVhazsgLyogb2sgKi8KKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGlzYWxudW0oKmNwKSkKKwkJCQkJYnJlYWs7CisJCQkJLyogaXQgaXNuJ3QgKi8KKwkJCQlnb3RvIGxpdGVyYWxfY29weTsKKwkJCX0KKwkJfQorCQkvKiBAIHBhc3QgdGhlIGZpcnN0IHNsYXNoIGRvZXMgbm90IGNvdW50ICovCisJCWNwID0gc3RyY2hyKHNjaGVtZV9wcmVmaXggKyAzLCAnLycpOworCQlpZiAoY3AgJiYgY3AgPCBhbm9uX3BhcnQpCisJCQlnb3RvIGxpdGVyYWxfY29weTsKKwkJcHJlZml4X2xlbiA9IHNjaGVtZV9wcmVmaXggLSB1cmwgKyAzOworCX0KKwlhbm9uX3VybCA9IHhjYWxsb2MoMSwgMSArIHByZWZpeF9sZW4gKyBhbm9uX2xlbik7CisJbWVtY3B5KGFub25fdXJsLCB1cmwsIHByZWZpeF9sZW4pOworCW1lbWNweShhbm9uX3VybCArIHByZWZpeF9sZW4sIGFub25fcGFydCwgYW5vbl9sZW4pOworCXJldHVybiBhbm9uX3VybDsKK2xpdGVyYWxfY29weToKKwlyZXR1cm4geHN0cmR1cCh1cmwpOworfQorCitzdHJ1Y3QgYWx0ZXJuYXRlX3JlZnNfZGF0YSB7CisJYWx0ZXJuYXRlX3JlZl9mbiAqZm47CisJdm9pZCAqZGF0YTsKK307CisKK3N0YXRpYyBpbnQgcmVmc19mcm9tX2FsdGVybmF0ZV9jYihzdHJ1Y3QgYWx0ZXJuYXRlX29iamVjdF9kYXRhYmFzZSAqZSwKKwkJCQkgIHZvaWQgKmRhdGEpCit7CisJY2hhciAqb3RoZXI7CisJc2l6ZV90IGxlbjsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0OworCWNvbnN0IHN0cnVjdCByZWYgKmV4dHJhOworCXN0cnVjdCBhbHRlcm5hdGVfcmVmc19kYXRhICpjYiA9IGRhdGE7CisKKwllLT5uYW1lWy0xXSA9ICdcMCc7CisJb3RoZXIgPSB4c3RyZHVwKHJlYWxfcGF0aChlLT5iYXNlKSk7CisJZS0+bmFtZVstMV0gPSAnLyc7CisJbGVuID0gc3RybGVuKG90aGVyKTsKKworCXdoaWxlIChvdGhlcltsZW4tMV0gPT0gJy8nKQorCQlvdGhlclstLWxlbl0gPSAnXDAnOworCWlmIChsZW4gPCA4IHx8IG1lbWNtcChvdGhlciArIGxlbiAtIDgsICIvb2JqZWN0cyIsIDgpKQorCQlnb3RvIG91dDsKKwkvKiBJcyB0aGlzIGEgZ2l0IHJlcG9zaXRvcnkgd2l0aCByZWZzPyAqLworCW1lbWNweShvdGhlciArIGxlbiAtIDgsICIvcmVmcyIsIDYpOworCWlmICghaXNfZGlyZWN0b3J5KG90aGVyKSkKKwkJZ290byBvdXQ7CisJb3RoZXJbbGVuIC0gOF0gPSAnXDAnOworCXJlbW90ZSA9IHJlbW90ZV9nZXQob3RoZXIpOworCXRyYW5zcG9ydCA9IHRyYW5zcG9ydF9nZXQocmVtb3RlLCBvdGhlcik7CisJZm9yIChleHRyYSA9IHRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnModHJhbnNwb3J0KTsKKwkgICAgIGV4dHJhOworCSAgICAgZXh0cmEgPSBleHRyYS0+bmV4dCkKKwkJY2ItPmZuKGV4dHJhLCBjYi0+ZGF0YSk7CisJdHJhbnNwb3J0X2Rpc2Nvbm5lY3QodHJhbnNwb3J0KTsKK291dDoKKwlmcmVlKG90aGVyKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmb3JfZWFjaF9hbHRlcm5hdGVfcmVmKGFsdGVybmF0ZV9yZWZfZm4gZm4sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFsdGVybmF0ZV9yZWZzX2RhdGEgY2I7CisJY2IuZm4gPSBmbjsKKwljYi5kYXRhID0gZGF0YTsKKwlmb3JlYWNoX2FsdF9vZGIocmVmc19mcm9tX2FsdGVybmF0ZV9jYiwgJmNiKTsKK30KZGlmZiAtLWdpdCBhL3RyYW5zcG9ydC5oIGIvdHJhbnNwb3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMzNmRkMwotLS0gL2Rldi9udWxsCisrKyBiL3RyYW5zcG9ydC5oCkBAIC0wLDAgKzEsMjMwIEBACisjaWZuZGVmIFRSQU5TUE9SVF9ICisjZGVmaW5lIFRSQU5TUE9SVF9ICisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJ1bi1jb21tYW5kLmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisKK3N0cnVjdCBnaXRfdHJhbnNwb3J0X29wdGlvbnMgeworCXVuc2lnbmVkIHRoaW4gOiAxOworCXVuc2lnbmVkIGtlZXAgOiAxOworCXVuc2lnbmVkIGZvbGxvd3RhZ3MgOiAxOworCXVuc2lnbmVkIGNoZWNrX3NlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgOiAxOworCXVuc2lnbmVkIHNlbGZfY29udGFpbmVkX2FuZF9jb25uZWN0ZWQgOiAxOworCXVuc2lnbmVkIHVwZGF0ZV9zaGFsbG93IDogMTsKKwlpbnQgZGVwdGg7CisJY29uc3QgY2hhciAqdXBsb2FkcGFjazsKKwljb25zdCBjaGFyICpyZWNlaXZlcGFjazsKKwlzdHJ1Y3QgcHVzaF9jYXNfb3B0aW9uICpjYXM7Cit9OworCitzdHJ1Y3QgdHJhbnNwb3J0IHsKKwlzdHJ1Y3QgcmVtb3RlICpyZW1vdGU7CisJY29uc3QgY2hhciAqdXJsOworCXZvaWQgKmRhdGE7CisJY29uc3Qgc3RydWN0IHJlZiAqcmVtb3RlX3JlZnM7CisKKwkvKioKKwkgKiBJbmRpY2F0ZXMgd2hldGhlciB3ZSBhbHJlYWR5IGNhbGxlZCBnZXRfcmVmc19saXN0KCk7IHNldCBieQorCSAqIHRyYW5zcG9ydC5jOjp0cmFuc3BvcnRfZ2V0X3JlbW90ZV9yZWZzKCkuCisJICovCisJdW5zaWduZWQgZ290X3JlbW90ZV9yZWZzIDogMTsKKworCS8qCisJICogVHJhbnNwb3J0cyB0aGF0IGNhbGwgdGFrZS1vdmVyIGRlc3Ryb3lzIHRoZSBkYXRhIHNwZWNpZmljIHRvCisJICogdGhlIHRyYW5zcG9ydCB0eXBlIHdoaWxlIGRvaW5nIHNvLCBhbmQgY2Fubm90IGJlIHJldXNlZC4KKwkgKi8KKwl1bnNpZ25lZCBjYW5ub3RfcmV1c2UgOiAxOworCisJLyoKKwkgKiBBIGhpbnQgZnJvbSBjYWxsZXIgdGhhdCBpdCB3aWxsIGJlIHBlcmZvcm1pbmcgYSBjbG9uZSwgbm90CisJICogbm9ybWFsIGZldGNoLiBJT1cgdGhlIHJlcG9zaXRvcnkgaXMgZ3VhcmFudGVlZCBlbXB0eS4KKwkgKi8KKwl1bnNpZ25lZCBjbG9uaW5nIDogMTsKKworCS8qKgorCSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBwb3NpdGl2ZSBpZiB0aGUgb3B0aW9uIGlzIG5vdAorCSAqIHJlY29nbml6ZWQgb3IgaXMgaW5hcHBsaWNhYmxlLCBhbmQgbmVnYXRpdmUgaWYgdGhlIG9wdGlvbgorCSAqIGlzIGFwcGxpY2FibGUgYnV0IHRoZSB2YWx1ZSBpcyBpbnZhbGlkLgorCSAqKi8KKwlpbnQgKCpzZXRfb3B0aW9uKShzdHJ1Y3QgdHJhbnNwb3J0ICpjb25uZWN0aW9uLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICBjb25zdCBjaGFyICp2YWx1ZSk7CisKKwkvKioKKwkgKiBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgcmVtb3RlIHNpZGUncyByZWZzLiBJbiBvcmRlciB0byBhbGxvdworCSAqIHRoZSB0cmFuc3BvcnQgdG8gdHJ5IHRvIHNoYXJlIGNvbm5lY3Rpb25zLCBmb3JfcHVzaCBpcyBhCisJICogaGludCBhcyB0byB3aGV0aGVyIHRoZSB1bHRpbWF0ZSBvcGVyYXRpb24gaXMgYSBwdXNoIG9yIGEgZmV0Y2guCisJICoKKwkgKiBJZiB0aGUgdHJhbnNwb3J0IGlzIGFibGUgdG8gZGV0ZXJtaW5lIHRoZSByZW1vdGUgaGFzaCBmb3IKKwkgKiB0aGUgcmVmIHdpdGhvdXQgYSBodWdlIGFtb3VudCBvZiBlZmZvcnQsIGl0IHNob3VsZCBzdG9yZSBpdAorCSAqIGluIHRoZSByZWYncyBvbGRfc2hhMSBmaWVsZDsgb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSBhbGwgMC4KKwkgKiovCisJc3RydWN0IHJlZiAqKCpnZXRfcmVmc19saXN0KShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIGludCBmb3JfcHVzaCk7CisKKwkvKioKKwkgKiBGZXRjaCB0aGUgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIHJlZnMuIE5vdGUgdGhhdCB0aGlzIGdldHMKKwkgKiBhbiBhcnJheSwgYW5kIHNob3VsZCBpZ25vcmUgdGhlIGxpc3Qgc3RydWN0dXJlLgorCSAqCisJICogSWYgdGhlIHRyYW5zcG9ydCBkaWQgbm90IGdldCBoYXNoZXMgZm9yIHJlZnMgaW4KKwkgKiBnZXRfcmVmc19saXN0KCksIGl0IHNob3VsZCBzZXQgdGhlIG9sZF9zaGExIGZpZWxkcyBpbiB0aGUKKwkgKiBwcm92aWRlZCByZWZzIG5vdy4KKwkgKiovCisJaW50ICgqZmV0Y2gpKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IHJlZnNfbnIsIHN0cnVjdCByZWYgKipyZWZzKTsKKworCS8qKgorCSAqIFB1c2ggdGhlIG9iamVjdHMgYW5kIHJlZnMuIFNlbmQgdGhlIG5lY2Vzc2FyeSBvYmplY3RzLCBhbmQKKwkgKiB0aGVuLCBmb3IgYW55IHJlZnMgd2hlcmUgcGVlcl9yZWYgaXMgc2V0IGFuZAorCSAqIHBlZXJfcmVmLT5uZXdfc2hhMSBpcyBkaWZmZXJlbnQgZnJvbSBvbGRfc2hhMSwgdGVsbCB0aGUKKwkgKiByZW1vdGUgc2lkZSB0byB1cGRhdGUgZWFjaCByZWYgaW4gdGhlIGxpc3QgZnJvbSBvbGRfc2hhMSB0bworCSAqIHBlZXJfcmVmLT5uZXdfc2hhMS4KKwkgKgorCSAqIFdoZXJlIHBvc3NpYmxlLCBzZXQgdGhlIHN0YXR1cyBmb3IgZWFjaCByZWYgYXBwcm9wcmlhdGVseS4KKwkgKgorCSAqIFRoZSB0cmFuc3BvcnQgbXVzdCBtb2RpZnkgbmV3X3NoYTEgaW4gdGhlIHJlZiB0byB0aGUgbmV3CisJICogdmFsdWUgaWYgdGhlIHJlbW90ZSBhY2NlcHRlZCB0aGUgY2hhbmdlLiBOb3RlIHRoYXQgdGhpcworCSAqIGNvdWxkIGJlIGEgZGlmZmVyZW50IHZhbHVlIGZyb20gcGVlcl9yZWYtPm5ld19zaGExIGlmIHRoZQorCSAqIHByb2Nlc3MgaW52b2x2ZWQgZ2VuZXJhdGluZyBuZXcgY29tbWl0cy4KKwkgKiovCisJaW50ICgqcHVzaF9yZWZzKShzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQsIHN0cnVjdCByZWYgKnJlZnMsIGludCBmbGFncyk7CisJaW50ICgqcHVzaCkoc3RydWN0IHRyYW5zcG9ydCAqY29ubmVjdGlvbiwgaW50IHJlZnNwZWNfbnIsIGNvbnN0IGNoYXIgKipyZWZzcGVjLCBpbnQgZmxhZ3MpOworCWludCAoKmNvbm5lY3QpKHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24sIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgICBjb25zdCBjaGFyICpleGVjdXRhYmxlLCBpbnQgZmRbMl0pOworCisJLyoqIGdldF9yZWZzX2xpc3QoKSwgZmV0Y2goKSwgYW5kIHB1c2hfcmVmcygpIGNhbiBrZWVwCisJICogcmVzb3VyY2VzIChzdWNoIGFzIGEgY29ubmVjdGlvbikgcmVzZXJ2ZWQgZm9yIGZ1cnRoZXIKKwkgKiB1c2UuIGRpc2Nvbm5lY3QoKSByZWxlYXNlcyB0aGVzZSByZXNvdXJjZXMuCisJICoqLworCWludCAoKmRpc2Nvbm5lY3QpKHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24pOworCWNoYXIgKnBhY2tfbG9ja2ZpbGU7CisJc2lnbmVkIHZlcmJvc2UgOiAzOworCS8qKgorCSAqIFRyYW5zcG9ydHMgc2hvdWxkIG5vdCBzZXQgdGhpcyBkaXJlY3RseSwgYW5kIHNob3VsZCB1c2UgdGhpcworCSAqIHZhbHVlIHdpdGhvdXQgaGF2aW5nIHRvIGNoZWNrIGlzYXR0eSgyKSwgLXEvLS1xdWlldAorCSAqICh0cmFuc3BvcnQtPnZlcmJvc2UgPCAwKSwgZXRjLiAtIGNoZWNraW5nIGhhcyBhbHJlYWR5IGJlZW4gZG9uZQorCSAqIGluIHRyYW5zcG9ydF9zZXRfdmVyYm9zaXR5KCkuCisJICoqLworCXVuc2lnbmVkIHByb2dyZXNzIDogMTsKKwkvKgorCSAqIElmIHRyYW5zcG9ydCBpcyBhdCBsZWFzdCBwb3RlbnRpYWxseSBzbWFydCwgdGhpcyBwb2ludHMgdG8KKwkgKiBnaXRfdHJhbnNwb3J0X29wdGlvbnMgc3RydWN0dXJlIHRvIHVzZSBpbiBjYXNlIHRyYW5zcG9ydAorCSAqIGFjdHVhbGx5IHR1cm5zIG91dCB0byBiZSBzbWFydC4KKwkgKi8KKwlzdHJ1Y3QgZ2l0X3RyYW5zcG9ydF9vcHRpb25zICpzbWFydF9vcHRpb25zOworfTsKKworI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9BTEwgMQorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9GT1JDRSAyCisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX0RSWV9SVU4gNAorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9NSVJST1IgOAorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9QT1JDRUxBSU4gMTYKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfU0VUX1VQU1RSRUFNIDMyCisjZGVmaW5lIFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfQ0hFQ0sgNjQKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfUFJVTkUgMTI4CisjZGVmaW5lIFRSQU5TUE9SVF9SRUNVUlNFX1NVQk1PRFVMRVNfT05fREVNQU5EIDI1NgorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9OT19IT09LIDUxMgorI2RlZmluZSBUUkFOU1BPUlRfUFVTSF9GT0xMT1dfVEFHUyAxMDI0CisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX0NFUlRfQUxXQVlTIDIwNDgKKyNkZWZpbmUgVFJBTlNQT1JUX1BVU0hfQ0VSVF9JRl9BU0tFRCA0MDk2CisjZGVmaW5lIFRSQU5TUE9SVF9QVVNIX0FUT01JQyA4MTkyCisKKyNkZWZpbmUgVFJBTlNQT1JUX1NVTU1BUllfV0lEVEggKDIgKiBERUZBVUxUX0FCQlJFViArIDMpCisjZGVmaW5lIFRSQU5TUE9SVF9TVU1NQVJZKHgpIChpbnQpKFRSQU5TUE9SVF9TVU1NQVJZX1dJRFRIICsgc3RybGVuKHgpIC0gZ2V0dGV4dF93aWR0aCh4KSksICh4KQorCisvKiBSZXR1cm5zIGEgdHJhbnNwb3J0IHN1aXRhYmxlIGZvciB0aGUgdXJsICovCitzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnRfZ2V0KHN0cnVjdCByZW1vdGUgKiwgY29uc3QgY2hhciAqKTsKKworLyoKKyAqIENoZWNrIHdoZXRoZXIgYSB0cmFuc3BvcnQgaXMgYWxsb3dlZCBieSB0aGUgZW52aXJvbm1lbnQuIFR5cGUgc2hvdWxkCisgKiBnZW5lcmFsbHkgYmUgdGhlIFVSTCBzY2hlbWUsIGFzIGRlc2NyaWJlZCBpbiBEb2N1bWVudGF0aW9uL2dpdC50eHQKKyAqLworaW50IGlzX3RyYW5zcG9ydF9hbGxvd2VkKGNvbnN0IGNoYXIgKnR5cGUpOworCisvKgorICogQ2hlY2sgd2hldGhlciBhIHRyYW5zcG9ydCBpcyBhbGxvd2VkIGJ5IHRoZSBlbnZpcm9ubWVudCwKKyAqIGFuZCBkaWUgb3RoZXJ3aXNlLgorICovCit2b2lkIHRyYW5zcG9ydF9jaGVja19hbGxvd2VkKGNvbnN0IGNoYXIgKnR5cGUpOworCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGhhcyBhdHRlbXB0ZWQgdG8gdHVybiBvbiBwcm90b2NvbAorICogcmVzdHJpY3Rpb25zIGF0IGFsbC4KKyAqLworaW50IHRyYW5zcG9ydF9yZXN0cmljdF9wcm90b2NvbHModm9pZCk7CisKKy8qIFRyYW5zcG9ydCBvcHRpb25zIHdoaWNoIGFwcGx5IHRvIGdpdDovLyBhbmQgc2NwLXN0eWxlIFVSTHMgKi8KKworLyogVGhlIHByb2dyYW0gdG8gdXNlIG9uIHRoZSByZW1vdGUgc2lkZSB0byBzZW5kIGEgcGFjayAqLworI2RlZmluZSBUUkFOU19PUFRfVVBMT0FEUEFDSyAidXBsb2FkcGFjayIKKworLyogVGhlIHByb2dyYW0gdG8gdXNlIG9uIHRoZSByZW1vdGUgc2lkZSB0byByZWNlaXZlIGEgcGFjayAqLworI2RlZmluZSBUUkFOU19PUFRfUkVDRUlWRVBBQ0sgInJlY2VpdmVwYWNrIgorCisvKiBUcmFuc2ZlciB0aGUgZGF0YSBhcyBhIHRoaW4gcGFjayBpZiBub3QgbnVsbCAqLworI2RlZmluZSBUUkFOU19PUFRfVEhJTiAidGhpbiIKKworLyogQ2hlY2sgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlbW90ZSByZWYgKi8KKyNkZWZpbmUgVFJBTlNfT1BUX0NBUyAiY2FzIgorCisvKiBLZWVwIHRoZSBwYWNrIHRoYXQgd2FzIHRyYW5zZmVycmVkIGlmIG5vdCBudWxsICovCisjZGVmaW5lIFRSQU5TX09QVF9LRUVQICJrZWVwIgorCisvKiBMaW1pdCB0aGUgZGVwdGggb2YgdGhlIGZldGNoIGlmIG5vdCBudWxsICovCisjZGVmaW5lIFRSQU5TX09QVF9ERVBUSCAiZGVwdGgiCisKKy8qIEFnZ3Jlc3NpdmVseSBmZXRjaCBhbm5vdGF0ZWQgdGFncyBpZiBwb3NzaWJsZSAqLworI2RlZmluZSBUUkFOU19PUFRfRk9MTE9XVEFHUyAiZm9sbG93dGFncyIKKworLyogQWNjZXB0IHJlZnMgdGhhdCBtYXkgdXBkYXRlIC5naXQvc2hhbGxvdyB3aXRob3V0IC0tZGVwdGggKi8KKyNkZWZpbmUgVFJBTlNfT1BUX1VQREFURV9TSEFMTE9XICJ1cGRhdGVzaGFsbG93IgorCisvKiBTZW5kIHB1c2ggY2VydGlmaWNhdGVzICovCisjZGVmaW5lIFRSQU5TX09QVF9QVVNIX0NFUlQgInB1c2hjZXJ0IgorCisvKioKKyAqIFJldHVybnMgMCBpZiB0aGUgb3B0aW9uIHdhcyB1c2VkLCBub24temVybyBvdGhlcndpc2UuIFByaW50cyBhCisgKiBtZXNzYWdlIHRvIHN0ZGVyciBpZiB0aGUgb3B0aW9uIGlzIG5vdCB1c2VkLgorICoqLworaW50IHRyYW5zcG9ydF9zZXRfb3B0aW9uKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSBjb25zdCBjaGFyICp2YWx1ZSk7Cit2b2lkIHRyYW5zcG9ydF9zZXRfdmVyYm9zaXR5KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgaW50IHZlcmJvc2l0eSwKKwlpbnQgZm9yY2VfcHJvZ3Jlc3MpOworCisjZGVmaW5lIFJFSkVDVF9OT05fRkZfSEVBRCAgICAgMHgwMQorI2RlZmluZSBSRUpFQ1RfTk9OX0ZGX09USEVSICAgIDB4MDIKKyNkZWZpbmUgUkVKRUNUX0FMUkVBRFlfRVhJU1RTICAweDA0CisjZGVmaW5lIFJFSkVDVF9GRVRDSF9GSVJTVCAgICAgMHgwOAorI2RlZmluZSBSRUpFQ1RfTkVFRFNfRk9SQ0UgICAgIDB4MTAKKworaW50IHRyYW5zcG9ydF9wdXNoKHN0cnVjdCB0cmFuc3BvcnQgKmNvbm5lY3Rpb24sCisJCSAgIGludCByZWZzcGVjX25yLCBjb25zdCBjaGFyICoqcmVmc3BlYywgaW50IGZsYWdzLAorCQkgICB1bnNpZ25lZCBpbnQgKiByZWplY3RfcmVhc29ucyk7CisKK2NvbnN0IHN0cnVjdCByZWYgKnRyYW5zcG9ydF9nZXRfcmVtb3RlX3JlZnMoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0KTsKKworaW50IHRyYW5zcG9ydF9mZXRjaF9yZWZzKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwgc3RydWN0IHJlZiAqcmVmcyk7Cit2b2lkIHRyYW5zcG9ydF91bmxvY2tfcGFjayhzdHJ1Y3QgdHJhbnNwb3J0ICp0cmFuc3BvcnQpOworaW50IHRyYW5zcG9ydF9kaXNjb25uZWN0KHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCk7CitjaGFyICp0cmFuc3BvcnRfYW5vbnltaXplX3VybChjb25zdCBjaGFyICp1cmwpOwordm9pZCB0cmFuc3BvcnRfdGFrZV9vdmVyKHN0cnVjdCB0cmFuc3BvcnQgKnRyYW5zcG9ydCwKKwkJCSBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyAqY2hpbGQpOworCitpbnQgdHJhbnNwb3J0X2Nvbm5lY3Qoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBjb25zdCBjaGFyICpleGVjLCBpbnQgZmRbMl0pOworCisvKiBUcmFuc3BvcnQgbWV0aG9kcyBkZWZpbmVkIG91dHNpZGUgdHJhbnNwb3J0LmMgKi8KK2ludCB0cmFuc3BvcnRfaGVscGVyX2luaXQoc3RydWN0IHRyYW5zcG9ydCAqdHJhbnNwb3J0LCBjb25zdCBjaGFyICpuYW1lKTsKK2ludCBiaWRpcmVjdGlvbmFsX3RyYW5zZmVyX2xvb3AoaW50IGlucHV0LCBpbnQgb3V0cHV0KTsKKworLyogY29tbW9uIG1ldGhvZHMgdXNlZCBieSB0cmFuc3BvcnQuYyBhbmQgYnVpbHRpbi9zZW5kLXBhY2suYyAqLwordm9pZCB0cmFuc3BvcnRfdmVyaWZ5X3JlbW90ZV9uYW1lcyhpbnQgbnJfaGVhZHMsIGNvbnN0IGNoYXIgKipoZWFkcyk7CisKK3ZvaWQgdHJhbnNwb3J0X3VwZGF0ZV90cmFja2luZ19yZWYoc3RydWN0IHJlbW90ZSAqcmVtb3RlLCBzdHJ1Y3QgcmVmICpyZWYsIGludCB2ZXJib3NlKTsKKworaW50IHRyYW5zcG9ydF9yZWZzX3B1c2hlZChzdHJ1Y3QgcmVmICpyZWYpOworCit2b2lkIHRyYW5zcG9ydF9wcmludF9wdXNoX3N0YXR1cyhjb25zdCBjaGFyICpkZXN0LCBzdHJ1Y3QgcmVmICpyZWZzLAorCQkgIGludCB2ZXJib3NlLCBpbnQgcG9yY2VsYWluLCB1bnNpZ25lZCBpbnQgKnJlamVjdF9yZWFzb25zKTsKKwordHlwZWRlZiB2b2lkIGFsdGVybmF0ZV9yZWZfZm4oY29uc3Qgc3RydWN0IHJlZiAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgZm9yX2VhY2hfYWx0ZXJuYXRlX3JlZihhbHRlcm5hdGVfcmVmX2ZuLCB2b2lkICopOworI2VuZGlmCmRpZmYgLS1naXQgYS90cmVlLWRpZmYuYyBiL3RyZWUtZGlmZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MGExZGEKLS0tIC9kZXYvbnVsbAorKysgYi90cmVlLWRpZmYuYwpAQCAtMCwwICsxLDcwNyBAQAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIHRyZWUgZGlmZiBnZW5lcmF0aW9uCisgKi8KKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImRpZmYuaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInRyZWUuaCIKKworLyoKKyAqIGludGVybmFsIG1vZGUgbWFya2VyLCBzYXlpbmcgYSB0cmVlIGVudHJ5ICE9IGVudHJ5IG9mIHRwW2ltaW5dCisgKiAoc2VlIGxsX2RpZmZfdHJlZV9wYXRocyBmb3Igd2hhdCBpdCBtZWFucyB0aGVyZSkKKyAqCisgKiB3ZSB3aWxsIHVwZGF0ZS91c2UvZW1pdCBlbnRyeSBmb3IgZGlmZiBvbmx5IHdpdGggaXQgdW5zZXQuCisgKi8KKyNkZWZpbmUgU19JRlhNSU5fTkVRCVNfRElGRlRSRUVfSUZYTUlOX05FUQorCisKK3N0YXRpYyBzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmxsX2RpZmZfdHJlZV9wYXRocygKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEsCisJY29uc3QgdW5zaWduZWQgY2hhciAqKnBhcmVudHNfc2hhMSwgaW50IG5wYXJlbnQsCisJc3RydWN0IHN0cmJ1ZiAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KTsKK3N0YXRpYyBpbnQgbGxfZGlmZl90cmVlX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqb2xkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXcsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCk7CisKKy8qCisgKiBDb21wYXJlIHR3byB0cmVlIGVudHJpZXMsIHRha2luZyBpbnRvIGFjY291bnQgb25seSBwYXRoL1NfSVNESVIobW9kZSksCisgKiBidXQgbm90IHRoZWlyIHNoYTEncy4KKyAqCisgKiBOT1RFIGZpbGVzIGFuZCBkaXJlY3RvcmllcyAqYWx3YXlzKiBjb21wYXJlIGRpZmZlcmVudGx5LCBldmVuIHdoZW4gaGF2aW5nCisgKiAgICAgIHRoZSBzYW1lIG5hbWUgLSB0aGFua3MgdG8gYmFzZV9uYW1lX2NvbXBhcmUoKS4KKyAqCisgKiBOT1RFIGVtcHR5ICg9aW52YWxpZCkgZGVzY3JpcHRvcihzKSB0YWtlIHBhcnQgaW4gY29tcGFyaXNvbiBhcyAraW5mdHksCisgKiAgICAgIHNvIHRoYXQgdGhleSBzb3J0ICphZnRlciogdmFsaWQgdHJlZSBlbnRyaWVzLgorICoKKyAqICAgICAgRHVlIHRvIHRoaXMgY29udmVudGlvbiwgaWYgdHJlZXMgYXJlIHNjYW5uZWQgaW4gc29ydGVkIG9yZGVyLCBhbGwKKyAqICAgICAgbm9uLWVtcHR5IGRlc2NyaXB0b3JzIHdpbGwgYmUgcHJvY2Vzc2VkIGZpcnN0LgorICovCitzdGF0aWMgaW50IHRyZWVfZW50cnlfcGF0aGNtcChzdHJ1Y3QgdHJlZV9kZXNjICp0MSwgc3RydWN0IHRyZWVfZGVzYyAqdDIpCit7CisJc3RydWN0IG5hbWVfZW50cnkgKmUxLCAqZTI7CisJaW50IGNtcDsKKworCS8qIGVtcHR5IGRlc2NyaXB0b3JzIHNvcnQgYWZ0ZXIgdmFsaWQgdHJlZSBlbnRyaWVzICovCisJaWYgKCF0MS0+c2l6ZSkKKwkJcmV0dXJuIHQyLT5zaXplID8gMSA6IDA7CisJZWxzZSBpZiAoIXQyLT5zaXplKQorCQlyZXR1cm4gLTE7CisKKwllMSA9ICZ0MS0+ZW50cnk7CisJZTIgPSAmdDItPmVudHJ5OworCWNtcCA9IGJhc2VfbmFtZV9jb21wYXJlKGUxLT5wYXRoLCB0cmVlX2VudHJ5X2xlbihlMSksIGUxLT5tb2RlLAorCQkJCWUyLT5wYXRoLCB0cmVlX2VudHJ5X2xlbihlMiksIGUyLT5tb2RlKTsKKwlyZXR1cm4gY21wOworfQorCisKKy8qCisgKiBjb252ZXJ0IHBhdGggLT4gb3B0LT5kaWZmXyooKSBjYWxsYmFja3MKKyAqCisgKiBlbWl0cyBkaWZmIHRvIGZpcnN0IHBhcmVudCBvbmx5LCBhbmQgdGVsbHMgZGlmZiB0cmVlLXdhbGtlciB0aGF0IHdlIGFyZSBkb25lCisgKiB3aXRoIHAgYW5kIGl0IGNhbiBiZSBmcmVlZC4KKyAqLworc3RhdGljIGludCBlbWl0X2RpZmZfZmlyc3RfcGFyZW50X29ubHkoc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0LCBzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnApCit7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXJlbnQgKnAwID0gJnAtPnBhcmVudFswXTsKKwlpZiAocC0+bW9kZSAmJiBwMC0+bW9kZSkgeworCQlvcHQtPmNoYW5nZShvcHQsIHAwLT5tb2RlLCBwLT5tb2RlLCBwMC0+b2lkLmhhc2gsIHAtPm9pZC5oYXNoLAorCQkJMSwgMSwgcC0+cGF0aCwgMCwgMCk7CisJfQorCWVsc2UgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCQl1bnNpZ25lZCBpbnQgbW9kZTsKKwkJaW50IGFkZHJlbW92ZTsKKworCQlpZiAocC0+bW9kZSkgeworCQkJYWRkcmVtb3ZlID0gJysnOworCQkJc2hhMSA9IHAtPm9pZC5oYXNoOworCQkJbW9kZSA9IHAtPm1vZGU7CisJCX0gZWxzZSB7CisJCQlhZGRyZW1vdmUgPSAnLSc7CisJCQlzaGExID0gcDAtPm9pZC5oYXNoOworCQkJbW9kZSA9IHAwLT5tb2RlOworCQl9CisKKwkJb3B0LT5hZGRfcmVtb3ZlKG9wdCwgYWRkcmVtb3ZlLCBtb2RlLCBzaGExLCAxLCBwLT5wYXRoLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsJLyogd2UgYXJlIGRvbmUgd2l0aCBwICovCit9CisKKworLyoKKyAqIE1ha2UgYSBuZXcgY29tYmluZV9kaWZmX3BhdGggZnJvbSBwYXRoL21vZGUvc2hhMQorICogYW5kIGFwcGVuZCBpdCB0byBwYXRocyBsaXN0IHRhaWwuCisgKgorICogTWVtb3J5IGZvciBjcmVhdGVkIGVsZW1lbnRzIGNvdWxkIGJlIHJldXNlZDoKKyAqCisgKgktIGlmIGxhc3QtPm5leHQgPT0gTlVMTCwgdGhlIG1lbW9yeSBpcyBhbGxvY2F0ZWQ7CisgKgorICoJLSBpZiBsYXN0LT5uZXh0ICE9IE5VTEwsIGl0IGlzIGFzc3VtZWQgdGhhdCBwPWxhc3QtPm5leHQgd2FzIHJldHVybmVkCisgKgkgIGVhcmxpZXIgYnkgdGhpcyBmdW5jdGlvbiwgYW5kIHAtPm5leHQgd2FzICpub3QqIG1vZGlmaWVkLgorICoJICBUaGUgbWVtb3J5IGlzIHRoZW4gcmV1c2VkIGZyb20gcC4KKyAqCisgKiBzbyBmb3IgY2xpZW50cywKKyAqCisgKiAtIGlmIHlvdSBkbyBuZWVkIHRvIGtlZXAgdGhlIGVsZW1lbnQKKyAqCisgKglwID0gcGF0aF9hcHBlbmRuZXcocCwgLi4uKTsKKyAqCXByb2Nlc3MocCk7CisgKglwLT5uZXh0ID0gTlVMTDsKKyAqCisgKiAtIGlmIHlvdSBkb24ndCBuZWVkIHRvIGtlZXAgdGhlIGVsZW1lbnQgYWZ0ZXIgcHJvY2Vzc2luZworICoKKyAqCXBwcmV2ID0gcDsKKyAqCXAgPSBwYXRoX2FwcGVuZG5ldyhwLCAuLi4pOworICoJcHJvY2VzcyhwKTsKKyAqCXAgPSBwcHJldjsKKyAqCTsgZG9uJ3QgZm9yZ2V0IHRvIGZyZWUgdGFpbC0+bmV4dCBpbiB0aGUgZW5kCisgKgorICogcC0+cGFyZW50W10gcmVtYWlucyB1bmluaXRpYWxpemVkLgorICovCitzdGF0aWMgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwYXRoX2FwcGVuZG5ldyhzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKmxhc3QsCisJaW50IG5wYXJlbnQsIGNvbnN0IHN0cnVjdCBzdHJidWYgKmJhc2UsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBwYXRobGVuLAorCXVuc2lnbmVkIG1vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwOworCWludCBsZW4gPSBiYXNlLT5sZW4gKyBwYXRobGVuOworCWludCBhbGxvY2xlbiA9IGNvbWJpbmVfZGlmZl9wYXRoX3NpemUobnBhcmVudCwgbGVuKTsKKworCS8qIGlmIGxhc3QtPm5leHQgaXMgIU5VTEwgLSBpdCBpcyBhIHByZS1hbGxvY2F0ZWQgbWVtb3J5LCB3ZSBjYW4gcmV1c2UgKi8KKwlwID0gbGFzdC0+bmV4dDsKKwlpZiAocCAmJiAoYWxsb2NsZW4gPiAoaW50cHRyX3QpcC0+bmV4dCkpIHsKKwkJZnJlZShwKTsKKwkJcCA9IE5VTEw7CisJfQorCisJaWYgKCFwKSB7CisJCXAgPSB4bWFsbG9jKGFsbG9jbGVuKTsKKworCQkvKgorCQkgKiB1bnRpbCB3ZSBnbyB0byBpdCBuZXh0IHJvdW5kLCAubmV4dCBob2xkcyBob3cgbWFueSBieXRlcyB3ZQorCQkgKiBhbGxvY2F0ZWQgKGZvciBmYXN0ZXIgcmVhbGxvYyAtIHdlIGRvbid0IG5lZWQgY29weWluZyBvbGQgZGF0YSkuCisJCSAqLworCQlwLT5uZXh0ID0gKHN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqKShpbnRwdHJfdClhbGxvY2xlbjsKKwl9CisKKwlsYXN0LT5uZXh0ID0gcDsKKworCXAtPnBhdGggPSAoY2hhciAqKSYocC0+cGFyZW50W25wYXJlbnRdKTsKKwltZW1jcHkocC0+cGF0aCwgYmFzZS0+YnVmLCBiYXNlLT5sZW4pOworCW1lbWNweShwLT5wYXRoICsgYmFzZS0+bGVuLCBwYXRoLCBwYXRobGVuKTsKKwlwLT5wYXRoW2xlbl0gPSAwOworCXAtPm1vZGUgPSBtb2RlOworCWhhc2hjcHkocC0+b2lkLmhhc2gsIHNoYTEgPyBzaGExIDogbnVsbF9zaGExKTsKKworCXJldHVybiBwOworfQorCisvKgorICogbmV3IHBhdGggc2hvdWxkIGJlIGFkZGVkIHRvIGNvbWJpbmUgZGlmZgorICoKKyAqIDMgY2FzZXMgb24gaG93L3doZW4gaXQgc2hvdWxkIGJlIGNhbGxlZCBhbmQgYmVoYXZlczoKKyAqCisgKgkgdCwgIXRwCQktPiBwYXRoIGFkZGVkLCBhbGwgcGFyZW50cyBsYWNrIGl0CisgKgkhdCwgIHRwCQktPiBwYXRoIHJlbW92ZWQgZnJvbSBhbGwgcGFyZW50cworICoJIHQsICB0cAkJLT4gcGF0aCBtb2RpZmllZC9hZGRlZAorICoJCQkgICAoTSBmb3IgdHBbaV09dHBbaW1pbl0sIEEgb3RoZXJ3aXNlKQorICovCitzdGF0aWMgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICplbWl0X3BhdGgoc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLAorCXN0cnVjdCBzdHJidWYgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCwgaW50IG5wYXJlbnQsCisJc3RydWN0IHRyZWVfZGVzYyAqdCwgc3RydWN0IHRyZWVfZGVzYyAqdHAsCisJaW50IGltaW4pCit7CisJdW5zaWduZWQgbW9kZTsKKwljb25zdCBjaGFyICpwYXRoOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTE7CisJaW50IHBhdGhsZW47CisJaW50IG9sZF9iYXNlbGVuID0gYmFzZS0+bGVuOworCWludCBpLCBpc2RpciwgcmVjdXJzZSA9IDAsIGVtaXR0aGlzID0gMTsKKworCS8qIGF0IGxlYXN0IHNvbWV0aGluZyBoYXMgdG8gYmUgdmFsaWQgKi8KKwlhc3NlcnQodCB8fCB0cCk7CisKKwlpZiAodCkgeworCQkvKiBwYXRoIHByZXNlbnQgaW4gcmVzdWx0aW5nIHRyZWUgKi8KKwkJc2hhMSA9IHRyZWVfZW50cnlfZXh0cmFjdCh0LCAmcGF0aCwgJm1vZGUpOworCQlwYXRobGVuID0gdHJlZV9lbnRyeV9sZW4oJnQtPmVudHJ5KTsKKwkJaXNkaXIgPSBTX0lTRElSKG1vZGUpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIGEgcGF0aCB3YXMgcmVtb3ZlZCAtIHRha2UgcGF0aCBmcm9tIGltaW4gcGFyZW50LiBBbHNvIHRha2UKKwkJICogbW9kZSBmcm9tIHRoYXQgcGFyZW50LCB0byBkZWNpZGUgb24gcmVjdXJzaW9uKDEpLgorCQkgKgorCQkgKiAxKSBhbGwgbW9kZXMgZm9yIHRwW2ldPXRwW2ltaW5dIHNob3VsZCBiZSB0aGUgc2FtZSB3cnQKKwkJICogICAgU19JU0RJUiwgdGhhbmtzIHRvIGJhc2VfbmFtZV9jb21wYXJlKCkuCisJCSAqLworCQl0cmVlX2VudHJ5X2V4dHJhY3QoJnRwW2ltaW5dLCAmcGF0aCwgJm1vZGUpOworCQlwYXRobGVuID0gdHJlZV9lbnRyeV9sZW4oJnRwW2ltaW5dLmVudHJ5KTsKKworCQlpc2RpciA9IFNfSVNESVIobW9kZSk7CisJCXNoYTEgPSBOVUxMOworCQltb2RlID0gMDsKKwl9CisKKwlpZiAoRElGRl9PUFRfVFNUKG9wdCwgUkVDVVJTSVZFKSAmJiBpc2RpcikgeworCQlyZWN1cnNlID0gMTsKKwkJZW1pdHRoaXMgPSBESUZGX09QVF9UU1Qob3B0LCBUUkVFX0lOX1JFQ1VSU0lWRSk7CisJfQorCisJaWYgKGVtaXR0aGlzKSB7CisJCWludCBrZWVwOworCQlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnBwcmV2ID0gcDsKKwkJcCA9IHBhdGhfYXBwZW5kbmV3KHAsIG5wYXJlbnQsIGJhc2UsIHBhdGgsIHBhdGhsZW4sIG1vZGUsIHNoYTEpOworCisJCWZvciAoaSA9IDA7IGkgPCBucGFyZW50OyArK2kpIHsKKwkJCS8qCisJCQkgKiB0cFtpXSBpcyB2YWxpZCwgaWYgcHJlc2VudCBhbmQgaWYgdHBbaV09PXRwW2ltaW5dIC0KKwkJCSAqIG90aGVyd2lzZSwgd2Ugc2hvdWxkIGlnbm9yZSBpdC4KKwkJCSAqLworCQkJaW50IHRwaV92YWxpZCA9IHRwICYmICEodHBbaV0uZW50cnkubW9kZSAmIFNfSUZYTUlOX05FUSk7CisKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTFfaTsKKwkJCXVuc2lnbmVkIG1vZGVfaTsKKworCQkJcC0+cGFyZW50W2ldLnN0YXR1cyA9CisJCQkJIXQgPyBESUZGX1NUQVRVU19ERUxFVEVEIDoKKwkJCQkJdHBpX3ZhbGlkID8KKwkJCQkJCURJRkZfU1RBVFVTX01PRElGSUVEIDoKKwkJCQkJCURJRkZfU1RBVFVTX0FEREVEOworCisJCQlpZiAodHBpX3ZhbGlkKSB7CisJCQkJc2hhMV9pID0gdHBbaV0uZW50cnkuc2hhMTsKKwkJCQltb2RlX2kgPSB0cFtpXS5lbnRyeS5tb2RlOworCQkJfQorCQkJZWxzZSB7CisJCQkJc2hhMV9pID0gTlVMTDsKKwkJCQltb2RlX2kgPSAwOworCQkJfQorCisJCQlwLT5wYXJlbnRbaV0ubW9kZSA9IG1vZGVfaTsKKwkJCWhhc2hjcHkocC0+cGFyZW50W2ldLm9pZC5oYXNoLCBzaGExX2kgPyBzaGExX2kgOiBudWxsX3NoYTEpOworCQl9CisKKwkJa2VlcCA9IDE7CisJCWlmIChvcHQtPnBhdGhjaGFuZ2UpCisJCQlrZWVwID0gb3B0LT5wYXRoY2hhbmdlKG9wdCwgcCk7CisKKwkJLyoKKwkJICogSWYgYSBwYXRoIHdhcyBmaWx0ZXJlZCBvciBjb25zdW1lZCAtIHdlIGRvbid0IG5lZWQgdG8gYWRkIGl0CisJCSAqIHRvIHRoZSBsaXN0IGFuZCBjYW4gcmV1c2UgaXRzIG1lbW9yeSwgbGVhdmluZyBpdCBhcworCQkgKiBwcmUtYWxsb2NhdGVkIGVsZW1lbnQgb24gdGhlIHRhaWwuCisJCSAqCisJCSAqIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBwYXRoIG5lZWRzIHRvIGJlIGtlcHQsIHdlIG5lZWQgdG8KKwkJICogY29ycmVjdCBpdHMgLm5leHQgdG8gTlVMTCwgYXMgaXQgd2FzIHByZS1pbml0aWFsaXplZCB0byBob3cKKwkJICogbXVjaCBtZW1vcnkgd2FzIGFsbG9jYXRlZC4KKwkJICoKKwkJICogc2VlIHBhdGhfYXBwZW5kbmV3KCkgZm9yIGRldGFpbHMuCisJCSAqLworCQlpZiAoIWtlZXApCisJCQlwID0gcHByZXY7CisJCWVsc2UKKwkJCXAtPm5leHQgPSBOVUxMOworCX0KKworCWlmIChyZWN1cnNlKSB7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKipwYXJlbnRzX3NoYTE7CisKKwkJcGFyZW50c19zaGExID0geGFsbG9jYShucGFyZW50ICogc2l6ZW9mKHBhcmVudHNfc2hhMVswXSkpOworCQlmb3IgKGkgPSAwOyBpIDwgbnBhcmVudDsgKytpKSB7CisJCQkvKiBzYW1lIHJ1bGUgYXMgaW4gZW1pdHRoaXMgKi8KKwkJCWludCB0cGlfdmFsaWQgPSB0cCAmJiAhKHRwW2ldLmVudHJ5Lm1vZGUgJiBTX0lGWE1JTl9ORVEpOworCisJCQlwYXJlbnRzX3NoYTFbaV0gPSB0cGlfdmFsaWQgPyB0cFtpXS5lbnRyeS5zaGExCisJCQkJCQkgICAgOiBOVUxMOworCQl9CisKKwkJc3RyYnVmX2FkZChiYXNlLCBwYXRoLCBwYXRobGVuKTsKKwkJc3RyYnVmX2FkZGNoKGJhc2UsICcvJyk7CisJCXAgPSBsbF9kaWZmX3RyZWVfcGF0aHMocCwgc2hhMSwgcGFyZW50c19zaGExLCBucGFyZW50LCBiYXNlLCBvcHQpOworCQl4YWxsb2NhX2ZyZWUocGFyZW50c19zaGExKTsKKwl9CisKKwlzdHJidWZfc2V0bGVuKGJhc2UsIG9sZF9iYXNlbGVuKTsKKwlyZXR1cm4gcDsKK30KKworc3RhdGljIHZvaWQgc2tpcF91bmludGVyZXN0aW5nKHN0cnVjdCB0cmVlX2Rlc2MgKnQsIHN0cnVjdCBzdHJidWYgKmJhc2UsCisJCQkgICAgICAgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCWVudW0gaW50ZXJlc3RpbmcgbWF0Y2g7CisKKwl3aGlsZSAodC0+c2l6ZSkgeworCQltYXRjaCA9IHRyZWVfZW50cnlfaW50ZXJlc3RpbmcoJnQtPmVudHJ5LCBiYXNlLCAwLCAmb3B0LT5wYXRoc3BlYyk7CisJCWlmIChtYXRjaCkgeworCQkJaWYgKG1hdGNoID09IGFsbF9lbnRyaWVzX25vdF9pbnRlcmVzdGluZykKKwkJCQl0LT5zaXplID0gMDsKKwkJCWJyZWFrOworCQl9CisJCXVwZGF0ZV90cmVlX2VudHJ5KHQpOworCX0KK30KKworCisvKgorICogZ2VuZXJhdGUgcGF0aHMgZm9yIGNvbWJpbmVkIGRpZmYgRChzaGExLHBhcmVudHNfc2hhMVtdKQorICoKKyAqIFJlc3VsdGluZyBwYXRocyBhcmUgYXBwZW5kZWQgdG8gY29tYmluZV9kaWZmX3BhdGggbGlua2VkIGxpc3QsIGFuZCBhbHNvLCBhcmUKKyAqIGVtaXR0ZWQgb24gdGhlIGdvIHZpYSBvcHQtPnBhdGhjaGFuZ2UoKSBjYWxsYmFjaywgc28gaXQgaXMgcG9zc2libGUgdG8KKyAqIHByb2Nlc3MgdGhlIHJlc3VsdCBhcyBiYXRjaCBvciBpbmNyZW1lbnRhbGx5LgorICoKKyAqIFRoZSBwYXRocyBhcmUgZ2VuZXJhdGVkIHNjYW5uaW5nIG5ldyB0cmVlIGFuZCBhbGwgcGFyZW50cyB0cmVlcworICogc2ltdWx0YW5lb3VzbHksIHNpbWlsYXJseSB0byB3aGF0IGRpZmZfdHJlZSgpIHdhcyBkb2luZyBmb3IgMiB0cmVlcy4KKyAqIFRoZSB0aGVvcnkgYmVoaW5kIHN1Y2ggc2NhbiBpcyBhcyBmb2xsb3dzOgorICoKKyAqCisgKiBEKFQsUDEuLi5QbikgY2FsY3VsYXRpb24gc2NoZW1lCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogRChULFAxLi4uUG4pID0gRChULFAxKSBeIC4uLiBeIEQoVCxQbikJKHJlZ2FyZGluZyByZXN1bHRpbmcgcGF0aHMgc2V0KQorICoKKyAqCUQoVCxQaikJCS0gZGlmZiBiZXR3ZWVuIFQuLlBqCisgKglEKFQsUDEuLi5QbikJLSBjb21iaW5lZCBkaWZmIGZyb20gVCB0byBwYXJlbnRzIFAxLC4uLixQbgorICoKKyAqCisgKiBXZSBzdGFydCBmcm9tIGFsbCB0cmVlcywgd2hpY2ggYXJlIHNvcnRlZCwgYW5kIGNvbXBhcmUgdGhlaXIgZW50cmllcyBpbgorICogbG9jay1zdGVwOgorICoKKyAqCSBUICAgICBQMSAgICAgICBQbgorICoJIC0gICAgIC0gICAgICAgIC0KKyAqCXx0fCAgIHxwMXwgICAgIHxwbnwKKyAqCXwtfCAgIHwtLXwgLi4uIHwtLXwgICAgICBpbWluID0gYXJnbWluKHAxLi4ucG4pCisgKgl8IHwgICB8ICB8ICAgICB8ICB8CisgKgl8LXwgICB8LS18ICAgICB8LS18CisgKgl8LnwgICB8LiB8ICAgICB8LiB8CisgKgkgLiAgICAgLiAgICAgICAgLgorICoJIC4gICAgIC4gICAgICAgIC4KKyAqCisgKiBhdCBhbnkgdGltZSB0aGVyZSBjb3VsZCBiZSAzIGNhc2VzOgorICoKKyAqCTEpICB0IDwgcFtpbWluXTsKKyAqCTIpICB0ID4gcFtpbWluXTsKKyAqCTMpICB0ID0gcFtpbWluXS4KKyAqCisgKiBTY2hlbWF0aWMgZGVkdWN0aW9uIG9mIHdoYXQgZXZlcnkgY2FzZSBtZWFucywgYW5kIHdoYXQgdG8gZG8sIGZvbGxvd3M6CisgKgorICogMSkgIHQgPCBwW2ltaW5dICAtPiAg4oiAaiB0IOKIiSBQaiAgLT4gICIrdCIg4oiIIEQoVCxQaikgIC0+ICBEICs9ICIrdCI7ICB04oaTCisgKgorICogMikgIHQgPiBwW2ltaW5dCisgKgorICogICAgIDIuMSkg4oiDajogcGogPiBwW2ltaW5dICAtPiAgIi1wW2ltaW5dIiDiiIkgRChULFBqKSAgLT4gIEQgKz0gw7g7ICDiiIAgcGk9cFtpbWluXSAgcGnihpMKKyAqICAgICAyLjIpIOKIgGkgIHBpID0gcFtpbWluXSAgLT4gIHBpIOKIiSBUICAtPiAgIi1waSIg4oiIIEQoVCxQaSkgIC0+ICBEICs9ICItcFtpbWluXSI7ICDiiIBpIHBp4oaTCisgKgorICogMykgIHQgPSBwW2ltaW5dCisgKgorICogICAgIDMuMSkg4oiDajogcGogPiBwW2ltaW5dICAtPiAgIit0IiDiiIggRChULFBqKSAgLT4gIG9ubHkgcGk9cFtpbWluXSByZW1haW5zIHRvIGludmVzdGlnYXRlCisgKiAgICAgMy4yKSBwaSA9IHBbaW1pbl0gIC0+ICBpbnZlc3RpZ2F0ZSDOtCh0LHBpKQorICogICAgICB8CisgKiAgICAgIHwKKyAqICAgICAgdgorICoKKyAqICAgICAzLjErMy4yKSBsb29raW5nIGF0IM60KHQscGkpIOKIgGk6IHBpPXBbaW1pbl0gLSBpZiBhbGwgIT0gw7ggIC0+CisgKgorICogICAgICAgICAgICAgICAgICAgICAgIOKOp860KHQscGkpICAtIGlmIHBpPXBbaW1pbl0KKyAqICAgICAgICAgICAgICAtPiAgRCArPSDijqgKKyAqICAgICAgICAgICAgICAgICAgICAgICDijqkiK3QiICAgICAtIGlmIHBpPnBbaW1pbl0KKyAqCisgKgorICogICAgIGluIGFueSBjYXNlIHTihpMgIOKIgCBwaT1wW2ltaW5dICBwaeKGkworICoKKyAqCisgKiB+fn5+fn5+fgorICoKKyAqIE5PVEUKKyAqCisgKglVc3VhbCBkaWZmIEQoQSxCKSBpcyBieSBkZWZpbml0aW9uIHRoZSBzYW1lIGFzIGNvbWJpbmVkIGRpZmYgRChBLFtCXSksCisgKglzbyB0aGlzIGRpZmYgcGF0aHMgZ2VuZXJhdG9yIGNhbiwgYW5kIGlzIHVzZWQsIGZvciBwbGFpbiBkaWZmcworICoJZ2VuZXJhdGlvbiB0b28uCisgKgorICoJUGxlYXNlIGtlZXAgYXR0ZW50aW9uIHRvIHRoZSBjb21tb24gRChBLFtCXSkgY2FzZSB3aGVuIHdvcmtpbmcgb24gdGhlCisgKgljb2RlLCBpbiBvcmRlciBub3QgdG8gc2xvdyBpdCBkb3duLgorICoKKyAqIE5PVEUKKyAqCW5wYXJlbnQgbXVzdCBiZSA+IDAuCisgKi8KKworCisvKiDiiIAgcGk9cFtpbWluXSAgcGnihpMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfdHBfZW50cmllcyhzdHJ1Y3QgdHJlZV9kZXNjICp0cCwgaW50IG5wYXJlbnQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5wYXJlbnQ7ICsraSkKKwkJaWYgKCEodHBbaV0uZW50cnkubW9kZSAmIFNfSUZYTUlOX05FUSkpCisJCQl1cGRhdGVfdHJlZV9lbnRyeSgmdHBbaV0pOworfQorCitzdGF0aWMgc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpsbF9kaWZmX3RyZWVfcGF0aHMoCisJc3RydWN0IGNvbWJpbmVfZGlmZl9wYXRoICpwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLAorCWNvbnN0IHVuc2lnbmVkIGNoYXIgKipwYXJlbnRzX3NoYTEsIGludCBucGFyZW50LAorCXN0cnVjdCBzdHJidWYgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlzdHJ1Y3QgdHJlZV9kZXNjIHQsICp0cDsKKwl2b2lkICp0dHJlZSwgKip0cHRyZWU7CisJaW50IGk7CisKKwl0cCAgICAgPSB4YWxsb2NhKG5wYXJlbnQgKiBzaXplb2YodHBbMF0pKTsKKwl0cHRyZWUgPSB4YWxsb2NhKG5wYXJlbnQgKiBzaXplb2YodHB0cmVlWzBdKSk7CisKKwkvKgorCSAqIGxvYWQgcGFyZW50cyBmaXJzdCwgYXMgdGhleSBhcmUgcHJvYmFibHkgYWxyZWFkeSBjYWNoZWQuCisJICoKKwkgKiAoIGxvZ190cmVlX2RpZmYoKSBwYXJzZXMgY29tbWl0LT5wYXJlbnQgYmVmb3JlIGNhbGxpbmcgaGVyZSB2aWEKKwkgKiAgIGRpZmZfdHJlZV9zaGExKHBhcmVudCwgY29tbWl0KSApCisJICovCisJZm9yIChpID0gMDsgaSA8IG5wYXJlbnQ7ICsraSkKKwkJdHB0cmVlW2ldID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IoJnRwW2ldLCBwYXJlbnRzX3NoYTFbaV0pOworCXR0cmVlID0gZmlsbF90cmVlX2Rlc2NyaXB0b3IoJnQsIHNoYTEpOworCisJLyogRW5hYmxlIHJlY3Vyc2lvbiBpbmRlZmluaXRlbHkgKi8KKwlvcHQtPnBhdGhzcGVjLnJlY3Vyc2l2ZSA9IERJRkZfT1BUX1RTVChvcHQsIFJFQ1VSU0lWRSk7CisKKwlmb3IgKDs7KSB7CisJCWludCBpbWluLCBjbXA7CisKKwkJaWYgKGRpZmZfY2FuX3F1aXRfZWFybHkob3B0KSkKKwkJCWJyZWFrOworCisJCWlmIChvcHQtPnBhdGhzcGVjLm5yKSB7CisJCQlza2lwX3VuaW50ZXJlc3RpbmcoJnQsIGJhc2UsIG9wdCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnBhcmVudDsgaSsrKQorCQkJCXNraXBfdW5pbnRlcmVzdGluZygmdHBbaV0sIGJhc2UsIG9wdCk7CisJCX0KKworCQkvKiBjb21wYXJpbmcgaXMgZmluaXNoZWQgd2hlbiBhbGwgdHJlZXMgYXJlIGRvbmUgKi8KKwkJaWYgKCF0LnNpemUpIHsKKwkJCWludCBkb25lID0gMTsKKwkJCWZvciAoaSA9IDA7IGkgPCBucGFyZW50OyArK2kpCisJCQkJaWYgKHRwW2ldLnNpemUpIHsKKwkJCQkJZG9uZSA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWlmIChkb25lKQorCQkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogbG9va3VwIGltaW4gPSBhcmdtaW4ocDEuLi5wbiksCisJCSAqIG1hcmsgZW50cmllcyB3aGV0aGVyIHRoZXkgPXBbaW1pbl0gYWxvbmcgdGhlIHdheQorCQkgKi8KKwkJaW1pbiA9IDA7CisJCXRwWzBdLmVudHJ5Lm1vZGUgJj0gflNfSUZYTUlOX05FUTsKKworCQlmb3IgKGkgPSAxOyBpIDwgbnBhcmVudDsgKytpKSB7CisJCQljbXAgPSB0cmVlX2VudHJ5X3BhdGhjbXAoJnRwW2ldLCAmdHBbaW1pbl0pOworCQkJaWYgKGNtcCA8IDApIHsKKwkJCQlpbWluID0gaTsKKwkJCQl0cFtpXS5lbnRyeS5tb2RlICY9IH5TX0lGWE1JTl9ORVE7CisJCQl9CisJCQllbHNlIGlmIChjbXAgPT0gMCkgeworCQkJCXRwW2ldLmVudHJ5Lm1vZGUgJj0gflNfSUZYTUlOX05FUTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXRwW2ldLmVudHJ5Lm1vZGUgfD0gU19JRlhNSU5fTkVROworCQkJfQorCQl9CisKKwkJLyogZml4dXAgbWFya2luZ3MgZm9yIGVudHJpZXMgYmVmb3JlIGltaW4gKi8KKwkJZm9yIChpID0gMDsgaSA8IGltaW47ICsraSkKKwkJCXRwW2ldLmVudHJ5Lm1vZGUgfD0gU19JRlhNSU5fTkVROwkvKiBwaSA+IHBbaW1pbl0gKi8KKworCisKKwkJLyogY29tcGFyZSB0IHZzIHBbaW1pbl0gKi8KKwkJY21wID0gdHJlZV9lbnRyeV9wYXRoY21wKCZ0LCAmdHBbaW1pbl0pOworCisJCS8qIHQgPSBwW2ltaW5dICovCisJCWlmIChjbXAgPT0gMCkgeworCQkJLyogYXJlIGVpdGhlciBwaSA+IHBbaW1pbl0gb3IgZGlmZih0LHBpKSAhPSDDuCA/ICovCisJCQlpZiAoIURJRkZfT1BUX1RTVChvcHQsIEZJTkRfQ09QSUVTX0hBUkRFUikpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgbnBhcmVudDsgKytpKSB7CisJCQkJCS8qIHBbaV0gPiBwW2ltaW5dICovCisJCQkJCWlmICh0cFtpXS5lbnRyeS5tb2RlICYgU19JRlhNSU5fTkVRKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJLyogZGlmZih0LHBpKSAhPSDDuCAqLworCQkJCQlpZiAoaGFzaGNtcCh0LmVudHJ5LnNoYTEsIHRwW2ldLmVudHJ5LnNoYTEpIHx8CisJCQkJCSAgICAodC5lbnRyeS5tb2RlICE9IHRwW2ldLmVudHJ5Lm1vZGUpKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJZ290byBza2lwX2VtaXRfdF90cDsKKwkJCQl9CisJCQl9CisKKwkJCS8qIEQgKz0ge860KHQscGkpIGlmIHBpPXBbaW1pbl07ICAiK2EiIGlmIHBpID4gcFtpbWluXX0gKi8KKwkJCXAgPSBlbWl0X3BhdGgocCwgYmFzZSwgb3B0LCBucGFyZW50LAorCQkJCQkmdCwgdHAsIGltaW4pOworCisJCXNraXBfZW1pdF90X3RwOgorCQkJLyogdOKGkywgIOKIgCBwaT1wW2ltaW5dICBwaeKGkyAqLworCQkJdXBkYXRlX3RyZWVfZW50cnkoJnQpOworCQkJdXBkYXRlX3RwX2VudHJpZXModHAsIG5wYXJlbnQpOworCQl9CisKKwkJLyogdCA8IHBbaW1pbl0gKi8KKwkJZWxzZSBpZiAoY21wIDwgMCkgeworCQkJLyogRCArPSAiK3QiICovCisJCQlwID0gZW1pdF9wYXRoKHAsIGJhc2UsIG9wdCwgbnBhcmVudCwKKwkJCQkJJnQsIC8qdHA9Ki9OVUxMLCAtMSk7CisKKwkJCS8qIHTihpMgKi8KKwkJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0KTsKKwkJfQorCisJCS8qIHQgPiBwW2ltaW5dICovCisJCWVsc2UgeworCQkJLyog4oiAaSBwaT1wW2ltaW5dIC0+IEQgKz0gIi1wW2ltaW5dIiAqLworCQkJaWYgKCFESUZGX09QVF9UU1Qob3B0LCBGSU5EX0NPUElFU19IQVJERVIpKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IG5wYXJlbnQ7ICsraSkKKwkJCQkJaWYgKHRwW2ldLmVudHJ5Lm1vZGUgJiBTX0lGWE1JTl9ORVEpCisJCQkJCQlnb3RvIHNraXBfZW1pdF90cDsKKwkJCX0KKworCQkJcCA9IGVtaXRfcGF0aChwLCBiYXNlLCBvcHQsIG5wYXJlbnQsCisJCQkJCS8qdD0qL05VTEwsIHRwLCBpbWluKTsKKworCQlza2lwX2VtaXRfdHA6CisJCQkvKiDiiIAgcGk9cFtpbWluXSAgcGnihpMgKi8KKwkJCXVwZGF0ZV90cF9lbnRyaWVzKHRwLCBucGFyZW50KTsKKwkJfQorCX0KKworCWZyZWUodHRyZWUpOworCWZvciAoaSA9IG5wYXJlbnQtMTsgaSA+PSAwOyBpLS0pCisJCWZyZWUodHB0cmVlW2ldKTsKKwl4YWxsb2NhX2ZyZWUodHB0cmVlKTsKKwl4YWxsb2NhX2ZyZWUodHApOworCisJcmV0dXJuIHA7Cit9CisKK3N0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqZGlmZl90cmVlX3BhdGhzKAorCXN0cnVjdCBjb21iaW5lX2RpZmZfcGF0aCAqcCwgY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwKKwljb25zdCB1bnNpZ25lZCBjaGFyICoqcGFyZW50c19zaGExLCBpbnQgbnBhcmVudCwKKwlzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJcCA9IGxsX2RpZmZfdHJlZV9wYXRocyhwLCBzaGExLCBwYXJlbnRzX3NoYTEsIG5wYXJlbnQsIGJhc2UsIG9wdCk7CisKKwkvKgorCSAqIGZyZWUgcHJlLWFsbG9jYXRlZCBsYXN0IGVsZW1lbnQsIGlmIGFueQorCSAqIChzZWUgcGF0aF9hcHBlbmRuZXcoKSBmb3IgZGV0YWlscyBhYm91dCB3aHkpCisJICovCisJaWYgKHAtPm5leHQpIHsKKwkJZnJlZShwLT5uZXh0KTsKKwkJcC0+bmV4dCA9IE5VTEw7CisJfQorCisJcmV0dXJuIHA7Cit9CisKKy8qCisgKiBEb2VzIGl0IGxvb2sgbGlrZSB0aGUgcmVzdWx0aW5nIGRpZmYgbWlnaHQgYmUgZHVlIHRvIGEgcmVuYW1lPworICogIC0gc2luZ2xlIGVudHJ5CisgKiAgLSBub3QgYSB2YWxpZCBwcmV2aW91cyBmaWxlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRpZmZfbWlnaHRfYmVfcmVuYW1lKHZvaWQpCit7CisJcmV0dXJuIGRpZmZfcXVldWVkX2RpZmYubnIgPT0gMSAmJgorCQkhRElGRl9GSUxFX1ZBTElEKGRpZmZfcXVldWVkX2RpZmYucXVldWVbMF0tPm9uZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRyeV90b19mb2xsb3dfcmVuYW1lcyhjb25zdCB1bnNpZ25lZCBjaGFyICpvbGQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldywgc3RydWN0IHN0cmJ1ZiAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXN0cnVjdCBkaWZmX29wdGlvbnMgZGlmZl9vcHRzOworCXN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSA9ICZkaWZmX3F1ZXVlZF9kaWZmOworCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpjaG9pY2U7CisJaW50IGk7CisKKwkvKgorCSAqIGZvbGxvdy1yZW5hbWUgY29kZSBpcyB2ZXJ5IHNwZWNpZmljLCB3ZSBuZWVkIGV4YWN0bHkgb25lCisJICogcGF0aC4gTWFnaWMgdGhhdCBtYXRjaGVzIG1vcmUgdGhhbiBvbmUgcGF0aCBpcyBub3QKKwkgKiBzdXBwb3J0ZWQuCisJICovCisJR1VBUkRfUEFUSFNQRUMoJm9wdC0+cGF0aHNwZWMsIFBBVEhTUEVDX0ZST01UT1AgfCBQQVRIU1BFQ19MSVRFUkFMKTsKKyNpZiAwCisJLyoKKwkgKiBXZSBzaG91bGQgcmVqZWN0IHdpbGRjYXJkcyBhcyB3ZWxsLiBVbmZvcnR1bmF0ZWx5IHdlCisJICogaGF2ZW4ndCBnb3QgYSByZWxpYWJsZSB3YXkgdG8gZGV0ZWN0IHRoYXQgJ2Zvb1wqYmFyJyBpbgorCSAqIGZhY3QgaGFzIG5vIHdpbGRjYXJkcy4gbm93aWxkY2FyZF9sZW4gaXMgbWVyZWx5IGEgaGludCBmb3IKKwkgKiBvcHRpbWl6YXRpb24uIExldCBpdCBzbGlwIGZvciBub3cgdW50aWwgd2lsZG1hdGNoIGlzIHRhdWdodAorCSAqIGFib3V0IGRyeS1ydW4gbW9kZSBhbmQgcmV0dXJucyB3aWxkY2FyZCBpbmZvLgorCSAqLworCWlmIChvcHQtPnBhdGhzcGVjLmhhc193aWxkY2FyZCkKKwkJZGllKCJCVUc6JXM6JWQ6IHdpbGRjYXJkcyBhcmUgbm90IHN1cHBvcnRlZCIsCisJCSAgICBfX0ZJTEVfXywgX19MSU5FX18pOworI2VuZGlmCisKKwkvKiBSZW1vdmUgdGhlIGZpbGUgY3JlYXRpb24gZW50cnkgZnJvbSB0aGUgZGlmZiBxdWV1ZSwgYW5kIHJlbWVtYmVyIGl0ICovCisJY2hvaWNlID0gcS0+cXVldWVbMF07CisJcS0+bnIgPSAwOworCisJZGlmZl9zZXR1cCgmZGlmZl9vcHRzKTsKKwlESUZGX09QVF9TRVQoJmRpZmZfb3B0cywgUkVDVVJTSVZFKTsKKwlESUZGX09QVF9TRVQoJmRpZmZfb3B0cywgRklORF9DT1BJRVNfSEFSREVSKTsKKwlkaWZmX29wdHMub3V0cHV0X2Zvcm1hdCA9IERJRkZfRk9STUFUX05PX09VVFBVVDsKKwlkaWZmX29wdHMuc2luZ2xlX2ZvbGxvdyA9IG9wdC0+cGF0aHNwZWMuaXRlbXNbMF0ubWF0Y2g7CisJZGlmZl9vcHRzLmJyZWFrX29wdCA9IG9wdC0+YnJlYWtfb3B0OworCWRpZmZfb3B0cy5yZW5hbWVfc2NvcmUgPSBvcHQtPnJlbmFtZV9zY29yZTsKKwlkaWZmX3NldHVwX2RvbmUoJmRpZmZfb3B0cyk7CisJbGxfZGlmZl90cmVlX3NoYTEob2xkLCBuZXcsIGJhc2UsICZkaWZmX29wdHMpOworCWRpZmZjb3JlX3N0ZCgmZGlmZl9vcHRzKTsKKwlmcmVlX3BhdGhzcGVjKCZkaWZmX29wdHMucGF0aHNwZWMpOworCisJLyogR28gdGhyb3VnaCB0aGUgbmV3IHNldCBvZiBmaWxlcGFpcmluZywgYW5kIHNlZSBpZiB3ZSBmaW5kIGEgbW9yZSBpbnRlcmVzdGluZyBvbmUgKi8KKwlvcHQtPmZvdW5kX2ZvbGxvdyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHEtPm5yOyBpKyspIHsKKwkJc3RydWN0IGRpZmZfZmlsZXBhaXIgKnAgPSBxLT5xdWV1ZVtpXTsKKworCQkvKgorCQkgKiBGb3VuZCBhIHNvdXJjZT8gTm90IG9ubHkgZG8gd2UgdXNlIHRoYXQgZm9yIHRoZSBuZXcKKwkJICogZGlmZl9xdWV1ZWRfZGlmZiwgd2Ugd2lsbCBhbHNvIHVzZSB0aGF0IGFzIHRoZSBwYXRoIGluCisJCSAqIHRoZSBmdXR1cmUhCisJCSAqLworCQlpZiAoKHAtPnN0YXR1cyA9PSAnUicgfHwgcC0+c3RhdHVzID09ICdDJykgJiYKKwkJICAgICFzdHJjbXAocC0+dHdvLT5wYXRoLCBvcHQtPnBhdGhzcGVjLml0ZW1zWzBdLm1hdGNoKSkgeworCQkJY29uc3QgY2hhciAqcGF0aFsyXTsKKworCQkJLyogU3dpdGNoIHRoZSBmaWxlLXBhaXJzIGFyb3VuZCAqLworCQkJcS0+cXVldWVbaV0gPSBjaG9pY2U7CisJCQljaG9pY2UgPSBwOworCisJCQkvKiBVcGRhdGUgdGhlIHBhdGggd2UgdXNlIGZyb20gbm93IG9uLi4gKi8KKwkJCXBhdGhbMF0gPSBwLT5vbmUtPnBhdGg7CisJCQlwYXRoWzFdID0gTlVMTDsKKwkJCWZyZWVfcGF0aHNwZWMoJm9wdC0+cGF0aHNwZWMpOworCQkJcGFyc2VfcGF0aHNwZWMoJm9wdC0+cGF0aHNwZWMsCisJCQkJICAgICAgIFBBVEhTUEVDX0FMTF9NQUdJQyAmIH5QQVRIU1BFQ19MSVRFUkFMLAorCQkJCSAgICAgICBQQVRIU1BFQ19MSVRFUkFMX1BBVEgsICIiLCBwYXRoKTsKKworCQkJLyoKKwkJCSAqIFRoZSBjYWxsZXIgZXhwZWN0cyB1cyB0byByZXR1cm4gYSBzZXQgb2YgdmFuaWxsYQorCQkJICogZmlsZXBhaXJzIHRvIGxldCBhIGxhdGVyIGNhbGwgdG8gZGlmZmNvcmVfc3RkKCkKKwkJCSAqIGl0IG1ha2VzIHRvIHNvcnQgdGhlIHJlbmFtZXMgb3V0IChhbW9uZyBvdGhlcgorCQkJICogdGhpbmdzKSwgYnV0IHdlIGFscmVhZHkgaGF2ZSBmb3VuZCByZW5hbWVzCisJCQkgKiBvdXJzZWx2ZXM7IHNpZ25hbCBkaWZmY29yZV9zdGQoKSBub3QgdG8gbXVjayB3aXRoCisJCQkgKiByZW5hbWUgaW5mb3JtYXRpb24uCisJCQkgKi8KKwkJCW9wdC0+Zm91bmRfZm9sbG93ID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyoKKwkgKiBUaGVuLCBkaXNjYXJkIGFsbCB0aGUgbm9uLXJlbGV2YW50IGZpbGUgcGFpcnMuLi4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcS0+bnI7IGkrKykgeworCQlzdHJ1Y3QgZGlmZl9maWxlcGFpciAqcCA9IHEtPnF1ZXVlW2ldOworCQlkaWZmX2ZyZWVfZmlsZXBhaXIocCk7CisJfQorCisJLyoKKwkgKiAuLiBhbmQgcmUtaW5zdGF0ZSB0aGUgb25lIHdlIHdhbnQgKHdoaWNoIG1pZ2h0IGJlIGVpdGhlciB0aGUKKwkgKiBvcmlnaW5hbCBvbmUsIG9yIHRoZSByZW5hbWUvY29weSB3ZSBmb3VuZCkKKwkgKi8KKwlxLT5xdWV1ZVswXSA9IGNob2ljZTsKKwlxLT5uciA9IDE7Cit9CisKK3N0YXRpYyBpbnQgbGxfZGlmZl90cmVlX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqb2xkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXcsCisJCQkgICAgIHN0cnVjdCBzdHJidWYgKmJhc2UsIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdCkKK3sKKwlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggcGhlYWQsICpwOworCXBhdGhjaGFuZ2VfZm5fdCBwYXRoY2hhbmdlX29sZCA9IG9wdC0+cGF0aGNoYW5nZTsKKworCXBoZWFkLm5leHQgPSBOVUxMOworCW9wdC0+cGF0aGNoYW5nZSA9IGVtaXRfZGlmZl9maXJzdF9wYXJlbnRfb25seTsKKwlkaWZmX3RyZWVfcGF0aHMoJnBoZWFkLCBuZXcsICZvbGQsIDEsIGJhc2UsIG9wdCk7CisKKwlmb3IgKHAgPSBwaGVhZC5uZXh0OyBwOykgeworCQlzdHJ1Y3QgY29tYmluZV9kaWZmX3BhdGggKnBwcmV2ID0gcDsKKwkJcCA9IHAtPm5leHQ7CisJCWZyZWUocHByZXYpOworCX0KKworCW9wdC0+cGF0aGNoYW5nZSA9IHBhdGhjaGFuZ2Vfb2xkOworCXJldHVybiAwOworfQorCitpbnQgZGlmZl90cmVlX3NoYTEoY29uc3QgdW5zaWduZWQgY2hhciAqb2xkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuZXcsIGNvbnN0IGNoYXIgKmJhc2Vfc3RyLCBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHQpCit7CisJc3RydWN0IHN0cmJ1ZiBiYXNlOworCWludCByZXR2YWw7CisKKwlzdHJidWZfaW5pdCgmYmFzZSwgUEFUSF9NQVgpOworCXN0cmJ1Zl9hZGRzdHIoJmJhc2UsIGJhc2Vfc3RyKTsKKworCXJldHZhbCA9IGxsX2RpZmZfdHJlZV9zaGExKG9sZCwgbmV3LCAmYmFzZSwgb3B0KTsKKwlpZiAoISpiYXNlX3N0ciAmJiBESUZGX09QVF9UU1Qob3B0LCBGT0xMT1dfUkVOQU1FUykgJiYgZGlmZl9taWdodF9iZV9yZW5hbWUoKSkKKwkJdHJ5X3RvX2ZvbGxvd19yZW5hbWVzKG9sZCwgbmV3LCAmYmFzZSwgb3B0KTsKKworCXN0cmJ1Zl9yZWxlYXNlKCZiYXNlKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK2ludCBkaWZmX3Jvb3RfdHJlZV9zaGExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ldywgY29uc3QgY2hhciAqYmFzZSwgc3RydWN0IGRpZmZfb3B0aW9ucyAqb3B0KQoreworCXJldHVybiBkaWZmX3RyZWVfc2hhMShOVUxMLCBuZXcsIGJhc2UsIG9wdCk7Cit9CmRpZmYgLS1naXQgYS90cmVlLXdhbGsuYyBiL3RyZWUtd2Fsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkY2NkMmQKLS0tIC9kZXYvbnVsbAorKysgYi90cmVlLXdhbGsuYwpAQCAtMCwwICsxLDEwNTUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgInVucGFjay10cmVlcy5oIgorI2luY2x1ZGUgImRpci5oIgorI2luY2x1ZGUgInRyZWUuaCIKKyNpbmNsdWRlICJwYXRoc3BlYy5oIgorCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X21vZGUoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgKm1vZGVwKQoreworCXVuc2lnbmVkIGNoYXIgYzsKKwl1bnNpZ25lZCBpbnQgbW9kZSA9IDA7CisKKwlpZiAoKnN0ciA9PSAnICcpCisJCXJldHVybiBOVUxMOworCisJd2hpbGUgKChjID0gKnN0cisrKSAhPSAnICcpIHsKKwkJaWYgKGMgPCAnMCcgfHwgYyA+ICc3JykKKwkJCXJldHVybiBOVUxMOworCQltb2RlID0gKG1vZGUgPDwgMykgKyAoYyAtICcwJyk7CisJfQorCSptb2RlcCA9IG1vZGU7CisJcmV0dXJuIHN0cjsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJY29uc3QgY2hhciAqcGF0aDsKKwl1bnNpZ25lZCBpbnQgbW9kZSwgbGVuOworCisJaWYgKHNpemUgPCAyNCB8fCBidWZbc2l6ZSAtIDIxXSkKKwkJZGllKCJjb3JydXB0IHRyZWUgZmlsZSIpOworCisJcGF0aCA9IGdldF9tb2RlKGJ1ZiwgJm1vZGUpOworCWlmICghcGF0aCB8fCAhKnBhdGgpCisJCWRpZSgiY29ycnVwdCB0cmVlIGZpbGUiKTsKKwlsZW4gPSBzdHJsZW4ocGF0aCkgKyAxOworCisJLyogSW5pdGlhbGl6ZSB0aGUgZGVzY3JpcHRvciBlbnRyeSAqLworCWRlc2MtPmVudHJ5LnBhdGggPSBwYXRoOworCWRlc2MtPmVudHJ5Lm1vZGUgPSBjYW5vbl9tb2RlKG1vZGUpOworCWRlc2MtPmVudHJ5LnNoYTEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKShwYXRoICsgbGVuKTsKK30KKwordm9pZCBpbml0X3RyZWVfZGVzYyhzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlkZXNjLT5idWZmZXIgPSBidWZmZXI7CisJZGVzYy0+c2l6ZSA9IHNpemU7CisJaWYgKHNpemUpCisJCWRlY29kZV90cmVlX2VudHJ5KGRlc2MsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3ZvaWQgKmZpbGxfdHJlZV9kZXNjcmlwdG9yKHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJdW5zaWduZWQgbG9uZyBzaXplID0gMDsKKwl2b2lkICpidWYgPSBOVUxMOworCisJaWYgKHNoYTEpIHsKKwkJYnVmID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2Uoc2hhMSwgdHJlZV90eXBlLCAmc2l6ZSwgTlVMTCk7CisJCWlmICghYnVmKQorCQkJZGllKCJ1bmFibGUgdG8gcmVhZCB0cmVlICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCX0KKwlpbml0X3RyZWVfZGVzYyhkZXNjLCBidWYsIHNpemUpOworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyB2b2lkIGVudHJ5X2NsZWFyKHN0cnVjdCBuYW1lX2VudHJ5ICphKQoreworCW1lbXNldChhLCAwLCBzaXplb2YoKmEpKTsKK30KKworc3RhdGljIHZvaWQgZW50cnlfZXh0cmFjdChzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3QgbmFtZV9lbnRyeSAqYSkKK3sKKwkqYSA9IHQtPmVudHJ5OworfQorCit2b2lkIHVwZGF0ZV90cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MpCit7CisJY29uc3Qgdm9pZCAqYnVmID0gZGVzYy0+YnVmZmVyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCA9IGRlc2MtPmVudHJ5LnNoYTEgKyAyMDsKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBkZXNjLT5zaXplOworCXVuc2lnbmVkIGxvbmcgbGVuID0gZW5kIC0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilidWY7CisKKwlpZiAoc2l6ZSA8IGxlbikKKwkJZGllKCJjb3JydXB0IHRyZWUgZmlsZSIpOworCWJ1ZiA9IGVuZDsKKwlzaXplIC09IGxlbjsKKwlkZXNjLT5idWZmZXIgPSBidWY7CisJZGVzYy0+c2l6ZSA9IHNpemU7CisJaWYgKHNpemUpCisJCWRlY29kZV90cmVlX2VudHJ5KGRlc2MsIGJ1Ziwgc2l6ZSk7Cit9CisKK2ludCB0cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIHN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSkKK3sKKwlpZiAoIWRlc2MtPnNpemUpCisJCXJldHVybiAwOworCisJKmVudHJ5ID0gZGVzYy0+ZW50cnk7CisJdXBkYXRlX3RyZWVfZW50cnkoZGVzYyk7CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgc2V0dXBfdHJhdmVyc2VfaW5mbyhzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYmFzZSkKK3sKKwlpbnQgcGF0aGxlbiA9IHN0cmxlbihiYXNlKTsKKwlzdGF0aWMgc3RydWN0IHRyYXZlcnNlX2luZm8gZHVtbXk7CisKKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CisJaWYgKHBhdGhsZW4gJiYgYmFzZVtwYXRobGVuLTFdID09ICcvJykKKwkJcGF0aGxlbi0tOworCWluZm8tPnBhdGhsZW4gPSBwYXRobGVuID8gcGF0aGxlbiArIDEgOiAwOworCWluZm8tPm5hbWUucGF0aCA9IGJhc2U7CisJaW5mby0+bmFtZS5zaGExID0gKHZvaWQgKikoYmFzZSArIHBhdGhsZW4gKyAxKTsKKwlpZiAocGF0aGxlbikKKwkJaW5mby0+cHJldiA9ICZkdW1teTsKK30KKworY2hhciAqbWFrZV90cmF2ZXJzZV9wYXRoKGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbikKK3sKKwlpbnQgbGVuID0gdHJlZV9lbnRyeV9sZW4obik7CisJaW50IHBhdGhsZW4gPSBpbmZvLT5wYXRobGVuOworCisJcGF0aFtwYXRobGVuICsgbGVuXSA9IDA7CisJZm9yICg7OykgeworCQltZW1jcHkocGF0aCArIHBhdGhsZW4sIG4tPnBhdGgsIGxlbik7CisJCWlmICghcGF0aGxlbikKKwkJCWJyZWFrOworCQlwYXRoWy0tcGF0aGxlbl0gPSAnLyc7CisJCW4gPSAmaW5mby0+bmFtZTsKKwkJbGVuID0gdHJlZV9lbnRyeV9sZW4obik7CisJCWluZm8gPSBpbmZvLT5wcmV2OworCQlwYXRobGVuIC09IGxlbjsKKwl9CisJcmV0dXJuIHBhdGg7Cit9CisKK3N0cnVjdCB0cmVlX2Rlc2Nfc2tpcCB7CisJc3RydWN0IHRyZWVfZGVzY19za2lwICpwcmV2OworCWNvbnN0IHZvaWQgKnB0cjsKK307CisKK3N0cnVjdCB0cmVlX2Rlc2NfeCB7CisJc3RydWN0IHRyZWVfZGVzYyBkOworCXN0cnVjdCB0cmVlX2Rlc2Nfc2tpcCAqc2tpcDsKK307CisKK3N0YXRpYyBpbnQgY2hlY2tfZW50cnlfbWF0Y2goY29uc3QgY2hhciAqYSwgaW50IGFfbGVuLCBjb25zdCBjaGFyICpiLCBpbnQgYl9sZW4pCit7CisJLyoKKwkgKiBUaGUgY2FsbGVyIHdhbnRzIHRvIHBpY2sgKmEqIGZyb20gYSB0cmVlIG9yIG5vdGhpbmcuCisJICogV2UgYXJlIGxvb2tpbmcgYXQgKmIqIGluIGEgdHJlZS4KKwkgKgorCSAqICgwKSBJZiBhIGFuZCBiIGFyZSB0aGUgc2FtZSBuYW1lLCB3ZSBhcmUgdHJpdmlhbGx5IGhhcHB5LgorCSAqCisJICogVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXMgd2hlcmUgKmEqIGNvdWxkIGJlIGhpZGluZworCSAqIGJlaGluZCAqYiouCisJICoKKwkgKiAoMSkgKmEqID09ICJ0IiwgICAqYiogPT0gImFiIiAgaS5lLiAqYiogc29ydHMgZWFybGllciB0aGFuICphKiBubworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXR0ZXIgd2hhdC4KKwkgKiAoMikgKmEqID09ICJ0IiwgICAqYiogPT0gInQtMiIgYW5kICJ0IiBpcyBhIHN1YnRyZWUgaW4gdGhlIHRyZWU7CisJICogKDMpICphKiA9PSAidC0yIiwgKmIqID09ICJ0IiAgIGFuZCAidC0yIiBpcyBhIGJsb2IgaW4gdGhlIHRyZWUuCisJICoKKwkgKiBPdGhlcndpc2Ugd2Uga25vdyAqYSogd29uJ3QgYXBwZWFyIGluIHRoZSB0cmVlIHdpdGhvdXQKKwkgKiBzY2FubmluZyBmdXJ0aGVyLgorCSAqLworCisJaW50IGNtcCA9IG5hbWVfY29tcGFyZShhLCBhX2xlbiwgYiwgYl9sZW4pOworCisJLyogTW9zdCBjb21tb24gY2FzZSBmaXJzdCAtLSByZWFkaW5nIHN5bmMnZCB0cmVlcyAqLworCWlmICghY21wKQorCQlyZXR1cm4gY21wOworCisJaWYgKDAgPCBjbXApIHsKKwkJLyogYSBjb21lcyBhZnRlciBiOyBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYgaXQgaXMgY2FzZSAoMykKKwkJaWYgKGJfbGVuIDwgYV9sZW4gJiYgIW1lbWNtcChhLCBiLCBiX2xlbikgJiYgYVtiX2xlbl0gPCAnLycpCisJCQlyZXR1cm4gMTsKKwkJKi8KKwkJcmV0dXJuIDE7IC8qIGtlZXAgbG9va2luZyAqLworCX0KKworCS8qIGIgY29tZXMgYWZ0ZXIgYTsgYXJlIHdlIGxvb2tpbmcgYXQgY2FzZSAoMik/ICovCisJaWYgKGFfbGVuIDwgYl9sZW4gJiYgIW1lbWNtcChhLCBiLCBhX2xlbikgJiYgYlthX2xlbl0gPCAnLycpCisJCXJldHVybiAxOyAvKiBrZWVwIGxvb2tpbmcgKi8KKworCXJldHVybiAtMTsgLyogYSBjYW5ub3QgYXBwZWFyIGluIHRoZSB0cmVlICovCit9CisKKy8qCisgKiBGcm9tIHRoZSBleHRlbmRlZCB0cmVlX2Rlc2MsIGV4dHJhY3QgdGhlIGZpcnN0IG5hbWUgZW50cnksIHdoaWxlCisgKiBwYXlpbmcgYXR0ZW50aW9uIHRvIHRoZSBjYW5kaWRhdGUgImZpcnN0IiBuYW1lLiAgTW9zdCBpbXBvcnRhbnRseSwKKyAqIHdoZW4gbG9va2luZyBmb3IgYW4gZW50cnksIGlmIHRoZXJlIGFyZSBlbnRyaWVzIHRoYXQgc29ydHMgZWFybGllcgorICogaW4gdGhlIHRyZWUgb2JqZWN0IHJlcHJlc2VudGF0aW9uIHRoYW4gdGhhdCBuYW1lLCBza2lwIHRoZW0gYW5kCisgKiBwcm9jZXNzIHRoZSBuYW1lZCBlbnRyeSBmaXJzdC4gIFdlIHdpbGwgcmVtZW1iZXIgdGhhdCB3ZSBoYXZlbid0CisgKiBwcm9jZXNzZWQgdGhlIGZpcnN0IGVudHJ5IHlldCwgYW5kIGluIHRoZSBsYXRlciBjYWxsIHNraXAgdGhlCisgKiBlbnRyeSB3ZSBwcm9jZXNzZWQgZWFybHkgd2hlbiB1cGRhdGVfZXh0ZW5kZWRfZW50cnkoKSBpcyBjYWxsZWQuCisgKgorICogRS5nLiBpZiB0aGUgdW5kZXJseWluZyB0cmVlIG9iamVjdCBoYXMgdGhlc2UgZW50cmllczoKKyAqCisgKiAgICBibG9iICAgICJ0LTEiCisgKiAgICBibG9iICAgICJ0LTIiCisgKiAgICB0cmVlICAgICJ0IgorICogICAgYmxvYiAgICAidD0xIgorICoKKyAqIGFuZCB0aGUgImZpcnN0IiBhc2tzIGZvciAidCIsIHJlbWVtYmVyIHRoYXQgd2Ugc3RpbGwgbmVlZCB0bworICogcHJvY2VzcyAidC0xIiBhbmQgInQtMiIgYnV0IGV4dHJhY3QgInQiLiAgQWZ0ZXIgcHJvY2Vzc2luZyB0aGUKKyAqIGVudHJ5ICJ0IiBmcm9tIHRoaXMgY2FsbCwgdGhlIGNhbGxlciB3aWxsIGxldCB1cyBrbm93IGJ5IGNhbGxpbmcKKyAqIHVwZGF0ZV9leHRlbmRlZF9lbnRyeSgpIHRoYXQgd2UgY2FuIHJlbWVtYmVyICJ0IiBoYXMgYmVlbiBwcm9jZXNzZWQKKyAqIGFscmVhZHkuCisgKi8KKworc3RhdGljIHZvaWQgZXh0ZW5kZWRfZW50cnlfZXh0cmFjdChzdHJ1Y3QgdHJlZV9kZXNjX3ggKnQsCisJCQkJICAgc3RydWN0IG5hbWVfZW50cnkgKmEsCisJCQkJICAgY29uc3QgY2hhciAqZmlyc3QsCisJCQkJICAgaW50IGZpcnN0X2xlbikKK3sKKwljb25zdCBjaGFyICpwYXRoOworCWludCBsZW47CisJc3RydWN0IHRyZWVfZGVzYyBwcm9iZTsKKwlzdHJ1Y3QgdHJlZV9kZXNjX3NraXAgKnNraXA7CisKKwkvKgorCSAqIEV4dHJhY3QgdGhlIGZpcnN0IGVudHJ5IGZyb20gdGhlIHRyZWVfZGVzYywgYnV0IHNraXAgdGhlCisJICogb25lcyB0aGF0IHdlIGFscmVhZHkgcmV0dXJuZWQgaW4gZWFybGllciByb3VuZHMuCisJICovCisJd2hpbGUgKDEpIHsKKwkJaWYgKCF0LT5kLnNpemUpIHsKKwkJCWVudHJ5X2NsZWFyKGEpOworCQkJYnJlYWs7IC8qIG5vdCBmb3VuZCAqLworCQl9CisJCWVudHJ5X2V4dHJhY3QoJnQtPmQsIGEpOworCQlmb3IgKHNraXAgPSB0LT5za2lwOyBza2lwOyBza2lwID0gc2tpcC0+cHJldikKKwkJCWlmIChhLT5wYXRoID09IHNraXAtPnB0cikKKwkJCQlicmVhazsgLyogZm91bmQgKi8KKwkJaWYgKCFza2lwKQorCQkJYnJlYWs7CisJCS8qIFdlIGhhdmUgcHJvY2Vzc2VkIHRoaXMgZW50cnkgYWxyZWFkeS4gKi8KKwkJdXBkYXRlX3RyZWVfZW50cnkoJnQtPmQpOworCX0KKworCWlmICghZmlyc3QgfHwgIWEtPnBhdGgpCisJCXJldHVybjsKKworCS8qCisJICogVGhlIGNhbGxlciB3YW50cyAiZmlyc3QiIGZyb20gdGhpcyB0cmVlLCBvciBub3RoaW5nLgorCSAqLworCXBhdGggPSBhLT5wYXRoOworCWxlbiA9IHRyZWVfZW50cnlfbGVuKGEpOworCXN3aXRjaCAoY2hlY2tfZW50cnlfbWF0Y2goZmlyc3QsIGZpcnN0X2xlbiwgcGF0aCwgbGVuKSkgeworCWNhc2UgLTE6CisJCWVudHJ5X2NsZWFyKGEpOworCWNhc2UgMDoKKwkJcmV0dXJuOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qCisJICogV2UgbmVlZCB0byBsb29rLWFoZWFkIC0tIHdlIHN1c3BlY3QgdGhhdCBhIHN1YnRyZWUgd2hvc2UKKwkgKiBuYW1lIGlzICJmaXJzdCIgbWF5IGJlIGhpZGluZyBiZWhpbmQgdGhlIGN1cnJlbnQgZW50cnkgInBhdGgiLgorCSAqLworCXByb2JlID0gdC0+ZDsKKwl3aGlsZSAocHJvYmUuc2l6ZSkgeworCQllbnRyeV9leHRyYWN0KCZwcm9iZSwgYSk7CisJCXBhdGggPSBhLT5wYXRoOworCQlsZW4gPSB0cmVlX2VudHJ5X2xlbihhKTsKKwkJc3dpdGNoIChjaGVja19lbnRyeV9tYXRjaChmaXJzdCwgZmlyc3RfbGVuLCBwYXRoLCBsZW4pKSB7CisJCWNhc2UgLTE6CisJCQllbnRyeV9jbGVhcihhKTsKKwkJY2FzZSAwOgorCQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJdXBkYXRlX3RyZWVfZW50cnkoJnByb2JlKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGtlZXAgbG9va2luZyAqLworCX0KKwllbnRyeV9jbGVhcihhKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2V4dGVuZGVkX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2NfeCAqdCwgc3RydWN0IG5hbWVfZW50cnkgKmEpCit7CisJaWYgKHQtPmQuZW50cnkucGF0aCA9PSBhLT5wYXRoKSB7CisJCXVwZGF0ZV90cmVlX2VudHJ5KCZ0LT5kKTsKKwl9IGVsc2UgeworCQkvKiB3ZSBoYXZlIHJldHVybmVkIHRoaXMgZW50cnkgZWFybHkgKi8KKwkJc3RydWN0IHRyZWVfZGVzY19za2lwICpza2lwID0geG1hbGxvYyhzaXplb2YoKnNraXApKTsKKwkJc2tpcC0+cHRyID0gYS0+cGF0aDsKKwkJc2tpcC0+cHJldiA9IHQtPnNraXA7CisJCXQtPnNraXAgPSBza2lwOworCX0KK30KKworc3RhdGljIHZvaWQgZnJlZV9leHRlbmRlZF9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjX3ggKnQpCit7CisJc3RydWN0IHRyZWVfZGVzY19za2lwICpwLCAqczsKKworCWZvciAocyA9IHQtPnNraXA7IHM7IHMgPSBwKSB7CisJCXAgPSBzLT5wcmV2OworCQlmcmVlKHMpOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgcHJ1bmVfdHJhdmVyc2FsKHN0cnVjdCBuYW1lX2VudHJ5ICplLAorCQkJCSAgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQkJCSAgaW50IHN0aWxsX2ludGVyZXN0aW5nKQoreworCWlmICghaW5mby0+cGF0aHNwZWMgfHwgc3RpbGxfaW50ZXJlc3RpbmcgPT0gMikKKwkJcmV0dXJuIDI7CisJaWYgKHN0aWxsX2ludGVyZXN0aW5nIDwgMCkKKwkJcmV0dXJuIHN0aWxsX2ludGVyZXN0aW5nOworCXJldHVybiB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKGUsIGJhc2UsIDAsIGluZm8tPnBhdGhzcGVjKTsKK30KKworaW50IHRyYXZlcnNlX3RyZWVzKGludCBuLCBzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgZXJyb3IgPSAwOworCXN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSA9IHhtYWxsb2MobipzaXplb2YoKmVudHJ5KSk7CisJaW50IGk7CisJc3RydWN0IHRyZWVfZGVzY194ICp0eCA9IHhjYWxsb2Mobiwgc2l6ZW9mKCp0eCkpOworCXN0cnVjdCBzdHJidWYgYmFzZSA9IFNUUkJVRl9JTklUOworCWludCBpbnRlcmVzdGluZyA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQl0eFtpXS5kID0gdFtpXTsKKworCWlmIChpbmZvLT5wcmV2KSB7CisJCXN0cmJ1Zl9ncm93KCZiYXNlLCBpbmZvLT5wYXRobGVuKTsKKwkJbWFrZV90cmF2ZXJzZV9wYXRoKGJhc2UuYnVmLCBpbmZvLT5wcmV2LCAmaW5mby0+bmFtZSk7CisJCWJhc2UuYnVmW2luZm8tPnBhdGhsZW4tMV0gPSAnLyc7CisJCXN0cmJ1Zl9zZXRsZW4oJmJhc2UsIGluZm8tPnBhdGhsZW4pOworCX0KKwlmb3IgKDs7KSB7CisJCWludCB0cmVlc191c2VkOworCQl1bnNpZ25lZCBsb25nIG1hc2ssIGRpcm1hc2s7CisJCWNvbnN0IGNoYXIgKmZpcnN0ID0gTlVMTDsKKwkJaW50IGZpcnN0X2xlbiA9IDA7CisJCXN0cnVjdCBuYW1lX2VudHJ5ICplID0gTlVMTDsKKwkJaW50IGxlbjsKKworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQllID0gZW50cnkgKyBpOworCQkJZXh0ZW5kZWRfZW50cnlfZXh0cmFjdCh0eCArIGksIGUsIE5VTEwsIDApOworCQl9CisKKwkJLyoKKwkJICogQSB0cmVlIG1heSBoYXZlICJ0LTIiIGF0IHRoZSBjdXJyZW50IGxvY2F0aW9uIGV2ZW4KKwkJICogdGhvdWdoIGl0IG1heSBoYXZlICJ0IiB0aGF0IGlzIGEgc3VidHJlZSBiZWhpbmQgaXQsCisJCSAqIGFuZCBhbm90aGVyIHRyZWUgbWF5IHJldHVybiAidCIuICBXZSB3YW50IHRvIGdyYWIKKwkJICogYWxsICJ0IiBmcm9tIGFsbCB0cmVlcyB0byBtYXRjaCBpbiBzdWNoIGEgY2FzZS4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWUgPSBlbnRyeSArIGk7CisJCQlpZiAoIWUtPnBhdGgpCisJCQkJY29udGludWU7CisJCQlsZW4gPSB0cmVlX2VudHJ5X2xlbihlKTsKKwkJCWlmICghZmlyc3QpIHsKKwkJCQlmaXJzdCA9IGUtPnBhdGg7CisJCQkJZmlyc3RfbGVuID0gbGVuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG5hbWVfY29tcGFyZShlLT5wYXRoLCBsZW4sIGZpcnN0LCBmaXJzdF9sZW4pIDwgMCkgeworCQkJCWZpcnN0ID0gZS0+cGF0aDsKKwkJCQlmaXJzdF9sZW4gPSBsZW47CisJCQl9CisJCX0KKworCQlpZiAoZmlyc3QpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCQllID0gZW50cnkgKyBpOworCQkJCWV4dGVuZGVkX2VudHJ5X2V4dHJhY3QodHggKyBpLCBlLCBmaXJzdCwgZmlyc3RfbGVuKTsKKwkJCQkvKiBDdWxsIHRoZSBvbmVzIHRoYXQgYXJlIG5vdCB0aGUgZWFybGllc3QgKi8KKwkJCQlpZiAoIWUtPnBhdGgpCisJCQkJCWNvbnRpbnVlOworCQkJCWxlbiA9IHRyZWVfZW50cnlfbGVuKGUpOworCQkJCWlmIChuYW1lX2NvbXBhcmUoZS0+cGF0aCwgbGVuLCBmaXJzdCwgZmlyc3RfbGVuKSkKKwkJCQkJZW50cnlfY2xlYXIoZSk7CisJCQl9CisJCX0KKworCQkvKiBOb3cgd2UgaGF2ZSBpbiBlbnRyeVtpXSB0aGUgZWFybGllc3QgbmFtZSBmcm9tIHRoZSB0cmVlcyAqLworCQltYXNrID0gMDsKKwkJZGlybWFzayA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWlmICghZW50cnlbaV0ucGF0aCkKKwkJCQljb250aW51ZTsKKwkJCW1hc2sgfD0gMXVsIDw8IGk7CisJCQlpZiAoU19JU0RJUihlbnRyeVtpXS5tb2RlKSkKKwkJCQlkaXJtYXNrIHw9IDF1bCA8PCBpOworCQkJZSA9ICZlbnRyeVtpXTsKKwkJfQorCQlpZiAoIW1hc2spCisJCQlicmVhazsKKwkJaW50ZXJlc3RpbmcgPSBwcnVuZV90cmF2ZXJzYWwoZSwgaW5mbywgJmJhc2UsIGludGVyZXN0aW5nKTsKKwkJaWYgKGludGVyZXN0aW5nIDwgMCkKKwkJCWJyZWFrOworCQlpZiAoaW50ZXJlc3RpbmcpIHsKKwkJCXRyZWVzX3VzZWQgPSBpbmZvLT5mbihuLCBtYXNrLCBkaXJtYXNrLCBlbnRyeSwgaW5mbyk7CisJCQlpZiAodHJlZXNfdXNlZCA8IDApIHsKKwkJCQllcnJvciA9IHRyZWVzX3VzZWQ7CisJCQkJaWYgKCFpbmZvLT5zaG93X2FsbF9lcnJvcnMpCisJCQkJCWJyZWFrOworCQkJfQorCQkJbWFzayAmPSB0cmVlc191c2VkOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCQlpZiAobWFzayAmICgxdWwgPDwgaSkpCisJCQkJdXBkYXRlX2V4dGVuZGVkX2VudHJ5KHR4ICsgaSwgZW50cnkgKyBpKTsKKwl9CisJZnJlZShlbnRyeSk7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJZnJlZV9leHRlbmRlZF9lbnRyeSh0eCArIGkpOworCWZyZWUodHgpOworCXN0cmJ1Zl9yZWxlYXNlKCZiYXNlKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0cnVjdCBkaXJfc3RhdGUgeworCXZvaWQgKnRyZWU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07Cit9OworCitzdGF0aWMgaW50IGZpbmRfdHJlZV9lbnRyeShzdHJ1Y3QgdHJlZV9kZXNjICp0LCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsIHVuc2lnbmVkICptb2RlKQoreworCWludCBuYW1lbGVuID0gc3RybGVuKG5hbWUpOworCXdoaWxlICh0LT5zaXplKSB7CisJCWNvbnN0IGNoYXIgKmVudHJ5OworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCQlpbnQgZW50cnlsZW4sIGNtcDsKKworCQlzaGExID0gdHJlZV9lbnRyeV9leHRyYWN0KHQsICZlbnRyeSwgbW9kZSk7CisJCWVudHJ5bGVuID0gdHJlZV9lbnRyeV9sZW4oJnQtPmVudHJ5KTsKKwkJdXBkYXRlX3RyZWVfZW50cnkodCk7CisJCWlmIChlbnRyeWxlbiA+IG5hbWVsZW4pCisJCQljb250aW51ZTsKKwkJY21wID0gbWVtY21wKG5hbWUsIGVudHJ5LCBlbnRyeWxlbik7CisJCWlmIChjbXAgPiAwKQorCQkJY29udGludWU7CisJCWlmIChjbXAgPCAwKQorCQkJYnJlYWs7CisJCWlmIChlbnRyeWxlbiA9PSBuYW1lbGVuKSB7CisJCQloYXNoY3B5KHJlc3VsdCwgc2hhMSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAobmFtZVtlbnRyeWxlbl0gIT0gJy8nKQorCQkJY29udGludWU7CisJCWlmICghU19JU0RJUigqbW9kZSkpCisJCQlicmVhazsKKwkJaWYgKCsrZW50cnlsZW4gPT0gbmFtZWxlbikgeworCQkJaGFzaGNweShyZXN1bHQsIHNoYTEpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIGdldF90cmVlX2VudHJ5KHNoYTEsIG5hbWUgKyBlbnRyeWxlbiwgcmVzdWx0LCBtb2RlKTsKKwl9CisJcmV0dXJuIC0xOworfQorCitpbnQgZ2V0X3RyZWVfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqdHJlZV9zaGExLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpzaGExLCB1bnNpZ25lZCAqbW9kZSkKK3sKKwlpbnQgcmV0dmFsOworCXZvaWQgKnRyZWU7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGNoYXIgcm9vdFsyMF07CisKKwl0cmVlID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UodHJlZV9zaGExLCB0cmVlX3R5cGUsICZzaXplLCByb290KTsKKwlpZiAoIXRyZWUpCisJCXJldHVybiAtMTsKKworCWlmIChuYW1lWzBdID09ICdcMCcpIHsKKwkJaGFzaGNweShzaGExLCByb290KTsKKwkJZnJlZSh0cmVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFzaXplKSB7CisJCXJldHZhbCA9IC0xOworCX0gZWxzZSB7CisJCXN0cnVjdCB0cmVlX2Rlc2MgdDsKKwkJaW5pdF90cmVlX2Rlc2MoJnQsIHRyZWUsIHNpemUpOworCQlyZXR2YWwgPSBmaW5kX3RyZWVfZW50cnkoJnQsIG5hbWUsIHNoYTEsIG1vZGUpOworCX0KKwlmcmVlKHRyZWUpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qCisgKiBUaGlzIGlzIExpbnV4J3MgYnVpbHQtaW4gbWF4IGZvciB0aGUgbnVtYmVyIG9mIHN5bWxpbmtzIHRvIGZvbGxvdy4KKyAqIFRoYXQgbGltaXQsIG9mIGNvdXJzZSwgZG9lcyBub3QgYWZmZWN0IGdpdCwgYnV0IGl0J3MgYSByZWFzb25hYmxlCisgKiBjaG9pY2UuCisgKi8KKyNkZWZpbmUgR0VUX1RSRUVfRU5UUllfRk9MTE9XX1NZTUxJTktTX01BWF9MSU5LUyA0MAorCisvKioKKyAqIEZpbmQgYSB0cmVlIGVudHJ5IGJ5IGZvbGxvd2luZyBzeW1saW5rcyBpbiB0cmVlX3NoYSAod2hpY2ggaXMKKyAqIGFzc3VtZWQgdG8gYmUgdGhlIHJvb3Qgb2YgdGhlIHJlcG9zaXRvcnkpLiAgSW4gdGhlIGV2ZW50IHRoYXQgYQorICogc3ltbGluayBwb2ludHMgb3V0c2lkZSB0aGUgcmVwb3NpdG9yeSAoZS5nLiBhIGxpbmsgdG8gL2ZvbyBvciBhCisgKiByb290LWxldmVsIGxpbmsgdG8gLi4vZm9vKSwgdGhlIHBvcnRpb24gb2YgdGhlIGxpbmsgd2hpY2ggaXMKKyAqIG91dHNpZGUgdGhlIHJlcG9zaXRvcnkgd2lsbCBiZSByZXR1cm5lZCBpbiByZXN1bHRfcGF0aCwgYW5kICptb2RlCisgKiB3aWxsIGJlIHNldCB0byAwLiAgSXQgaXMgYXNzdW1lZCB0aGF0IHJlc3VsdF9wYXRoIGlzIHVuaW5pdGlhbGl6ZWQuCisgKiBJZiB0aGVyZSBhcmUgbm8gc3ltbGlua3MsIG9yIHRoZSBlbmQgcmVzdWx0IG9mIHRoZSBzeW1saW5rIGNoYWluCisgKiBwb2ludHMgdG8gYW4gb2JqZWN0IGluc2lkZSB0aGUgcmVwb3NpdG9yeSwgcmVzdWx0IHdpbGwgYmUgZmlsbGVkIGluCisgKiB3aXRoIHRoZSBzaGExIG9mIHRoZSBmb3VuZCBvYmplY3QsIGFuZCAqbW9kZSB3aWxsIGhvbGQgdGhlIG1vZGUgb2YKKyAqIHRoZSBvYmplY3QuCisgKgorICogU2VlIHRoZSBjb2RlIGZvciBlbnVtIGZvbGxvd19zeW1saW5rX3Jlc3VsdCBmb3IgYSBkZXNjcmlwdGlvbiBvZgorICogdGhlIHJldHVybiB2YWx1ZXMuCisgKi8KK2VudW0gZm9sbG93X3N5bWxpbmtzX3Jlc3VsdCBnZXRfdHJlZV9lbnRyeV9mb2xsb3dfc3ltbGlua3ModW5zaWduZWQgY2hhciAqdHJlZV9zaGExLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsIHN0cnVjdCBzdHJidWYgKnJlc3VsdF9wYXRoLCB1bnNpZ25lZCAqbW9kZSkKK3sKKwlpbnQgcmV0dmFsID0gTUlTU0lOR19PQkpFQ1Q7CisJc3RydWN0IGRpcl9zdGF0ZSAqcGFyZW50cyA9IE5VTEw7CisJc2l6ZV90IHBhcmVudHNfYWxsb2MgPSAwOworCXNzaXplX3QgcGFyZW50c19uciA9IDA7CisJdW5zaWduZWQgY2hhciBjdXJyZW50X3RyZWVfc2hhMVsyMF07CisJc3RydWN0IHN0cmJ1ZiBuYW1lYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHRyZWVfZGVzYyB0OworCWludCBmb2xsb3dzX3JlbWFpbmluZyA9IEdFVF9UUkVFX0VOVFJZX0ZPTExPV19TWU1MSU5LU19NQVhfTElOS1M7CisJaW50IGk7CisKKwlpbml0X3RyZWVfZGVzYygmdCwgTlVMTCwgMFVMKTsKKwlzdHJidWZfaW5pdChyZXN1bHRfcGF0aCwgMCk7CisJc3RyYnVmX2FkZHN0cigmbmFtZWJ1ZiwgbmFtZSk7CisJaGFzaGNweShjdXJyZW50X3RyZWVfc2hhMSwgdHJlZV9zaGExKTsKKworCXdoaWxlICgxKSB7CisJCWludCBmaW5kX3Jlc3VsdDsKKwkJY2hhciAqZmlyc3Rfc2xhc2g7CisJCWNoYXIgKnJlbWFpbmRlciA9IE5VTEw7CisKKwkJaWYgKCF0LmJ1ZmZlcikgeworCQkJdm9pZCAqdHJlZTsKKwkJCXVuc2lnbmVkIGNoYXIgcm9vdFsyMF07CisJCQl1bnNpZ25lZCBsb25nIHNpemU7CisJCQl0cmVlID0gcmVhZF9vYmplY3Rfd2l0aF9yZWZlcmVuY2UoY3VycmVudF90cmVlX3NoYTEsCisJCQkJCQkJICB0cmVlX3R5cGUsICZzaXplLAorCQkJCQkJCSAgcm9vdCk7CisJCQlpZiAoIXRyZWUpCisJCQkJZ290byBkb25lOworCisJCQlBTExPQ19HUk9XKHBhcmVudHMsIHBhcmVudHNfbnIgKyAxLCBwYXJlbnRzX2FsbG9jKTsKKwkJCXBhcmVudHNbcGFyZW50c19ucl0udHJlZSA9IHRyZWU7CisJCQlwYXJlbnRzW3BhcmVudHNfbnJdLnNpemUgPSBzaXplOworCQkJaGFzaGNweShwYXJlbnRzW3BhcmVudHNfbnJdLnNoYTEsIHJvb3QpOworCQkJcGFyZW50c19ucisrOworCisJCQlpZiAobmFtZWJ1Zi5idWZbMF0gPT0gJ1wwJykgeworCQkJCWhhc2hjcHkocmVzdWx0LCByb290KTsKKwkJCQlyZXR2YWwgPSBGT1VORDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCWlmICghc2l6ZSkKKwkJCQlnb3RvIGRvbmU7CisKKwkJCS8qIGRlc2NlbmQgKi8KKwkJCWluaXRfdHJlZV9kZXNjKCZ0LCB0cmVlLCBzaXplKTsKKwkJfQorCisJCS8qIEhhbmRsZSBzeW1saW5rcyB0byBlLmcuIGEvL2IgYnkgcmVtb3ZpbmcgbGVhZGluZyBzbGFzaGVzICovCisJCXdoaWxlIChuYW1lYnVmLmJ1ZlswXSA9PSAnLycpIHsKKwkJCXN0cmJ1Zl9yZW1vdmUoJm5hbWVidWYsIDAsIDEpOworCQl9CisKKwkJLyogU3BsaXQgbmFtZWJ1ZiBpbnRvIGEgZmlyc3QgY29tcG9uZW50IGFuZCBhIHJlbWFpbmRlciAqLworCQlpZiAoKGZpcnN0X3NsYXNoID0gc3RyY2hyKG5hbWVidWYuYnVmLCAnLycpKSkgeworCQkJKmZpcnN0X3NsYXNoID0gMDsKKwkJCXJlbWFpbmRlciA9IGZpcnN0X3NsYXNoICsgMTsKKwkJfQorCisJCWlmICghc3RyY21wKG5hbWVidWYuYnVmLCAiLi4iKSkgeworCQkJc3RydWN0IGRpcl9zdGF0ZSAqcGFyZW50OworCQkJLyoKKwkJCSAqIFdlIGNvdWxkIGVuZCB1cCB3aXRoIC4uIGluIHRoZSBuYW1lYnVmIGlmIGl0CisJCQkgKiBhcHBlYXJzIGluIGEgc3ltbGluay4KKwkJCSAqLworCisJCQlpZiAocGFyZW50c19uciA9PSAxKSB7CisJCQkJaWYgKHJlbWFpbmRlcikKKwkJCQkJKmZpcnN0X3NsYXNoID0gJy8nOworCQkJCXN0cmJ1Zl9hZGQocmVzdWx0X3BhdGgsIG5hbWVidWYuYnVmLAorCQkJCQkgICBuYW1lYnVmLmxlbik7CisJCQkJKm1vZGUgPSAwOworCQkJCXJldHZhbCA9IEZPVU5EOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXBhcmVudCA9ICZwYXJlbnRzW3BhcmVudHNfbnIgLSAxXTsKKwkJCWZyZWUocGFyZW50LT50cmVlKTsKKwkJCXBhcmVudHNfbnItLTsKKwkJCXBhcmVudCA9ICZwYXJlbnRzW3BhcmVudHNfbnIgLSAxXTsKKwkJCWluaXRfdHJlZV9kZXNjKCZ0LCBwYXJlbnQtPnRyZWUsIHBhcmVudC0+c2l6ZSk7CisJCQlzdHJidWZfcmVtb3ZlKCZuYW1lYnVmLCAwLCByZW1haW5kZXIgPyAzIDogMik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFdlIGNvdWxkIGVuZCB1cCBoZXJlIHZpYSBhIHN5bWxpbmsgdG8gZGlyLy4uICovCisJCWlmIChuYW1lYnVmLmJ1ZlswXSA9PSAnXDAnKSB7CisJCQloYXNoY3B5KHJlc3VsdCwgcGFyZW50c1twYXJlbnRzX25yIC0gMV0uc2hhMSk7CisJCQlyZXR2YWwgPSBGT1VORDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCS8qIExvb2sgdXAgdGhlIGZpcnN0IChvciBvbmx5KSBwYXRoIGNvbXBvbmVudCBpbiB0aGUgdHJlZS4gKi8KKwkJZmluZF9yZXN1bHQgPSBmaW5kX3RyZWVfZW50cnkoJnQsIG5hbWVidWYuYnVmLAorCQkJCQkgICAgICBjdXJyZW50X3RyZWVfc2hhMSwgbW9kZSk7CisJCWlmIChmaW5kX3Jlc3VsdCkgeworCQkJZ290byBkb25lOworCQl9CisKKwkJaWYgKFNfSVNESVIoKm1vZGUpKSB7CisJCQlpZiAoIXJlbWFpbmRlcikgeworCQkJCWhhc2hjcHkocmVzdWx0LCBjdXJyZW50X3RyZWVfc2hhMSk7CisJCQkJcmV0dmFsID0gRk9VTkQ7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJLyogRGVzY2VuZCB0aGUgdHJlZSAqLworCQkJdC5idWZmZXIgPSBOVUxMOworCQkJc3RyYnVmX3JlbW92ZSgmbmFtZWJ1ZiwgMCwKKwkJCQkgICAgICAxICsgZmlyc3Rfc2xhc2ggLSBuYW1lYnVmLmJ1Zik7CisJCX0gZWxzZSBpZiAoU19JU1JFRygqbW9kZSkpIHsKKwkJCWlmICghcmVtYWluZGVyKSB7CisJCQkJaGFzaGNweShyZXN1bHQsIGN1cnJlbnRfdHJlZV9zaGExKTsKKwkJCQlyZXR2YWwgPSBGT1VORDsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dmFsID0gTk9UX0RJUjsKKwkJCX0KKwkJCWdvdG8gZG9uZTsKKwkJfSBlbHNlIGlmIChTX0lTTE5LKCptb2RlKSkgeworCQkJLyogRm9sbG93IGEgc3ltbGluayAqLworCQkJdW5zaWduZWQgbG9uZyBsaW5rX2xlbjsKKwkJCXNpemVfdCBsZW47CisJCQljaGFyICpjb250ZW50cywgKmNvbnRlbnRzX3N0YXJ0OworCQkJc3RydWN0IGRpcl9zdGF0ZSAqcGFyZW50OworCQkJZW51bSBvYmplY3RfdHlwZSB0eXBlOworCisJCQlpZiAoZm9sbG93c19yZW1haW5pbmctLSA9PSAwKSB7CisJCQkJLyogVG9vIG1hbnkgc3ltbGlua3MgZm9sbG93ZWQgKi8KKwkJCQlyZXR2YWwgPSBTWU1MSU5LX0xPT1A7CisJCQkJZ290byBkb25lOworCQkJfQorCisJCQkvKgorCQkJICogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBmb2xsb3dlZCBhdCBhIGxlYXN0CisJCQkgKiBvbmUgc3ltbGluaywgc28gb24gZXJyb3Igd2UgbmVlZCB0byByZXBvcnQgdGhpcy4KKwkJCSAqLworCQkJcmV0dmFsID0gREFOR0xJTkdfU1lNTElOSzsKKworCQkJY29udGVudHMgPSByZWFkX3NoYTFfZmlsZShjdXJyZW50X3RyZWVfc2hhMSwgJnR5cGUsCisJCQkJCQkgICZsaW5rX2xlbik7CisKKwkJCWlmICghY29udGVudHMpCisJCQkJZ290byBkb25lOworCisJCQlpZiAoY29udGVudHNbMF0gPT0gJy8nKSB7CisJCQkJc3RyYnVmX2FkZHN0cihyZXN1bHRfcGF0aCwgY29udGVudHMpOworCQkJCWZyZWUoY29udGVudHMpOworCQkJCSptb2RlID0gMDsKKwkJCQlyZXR2YWwgPSBGT1VORDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisKKwkJCWlmIChyZW1haW5kZXIpCisJCQkJbGVuID0gZmlyc3Rfc2xhc2ggLSBuYW1lYnVmLmJ1ZjsKKwkJCWVsc2UKKwkJCQlsZW4gPSBuYW1lYnVmLmxlbjsKKworCQkJY29udGVudHNfc3RhcnQgPSBjb250ZW50czsKKworCQkJcGFyZW50ID0gJnBhcmVudHNbcGFyZW50c19uciAtIDFdOworCQkJaW5pdF90cmVlX2Rlc2MoJnQsIHBhcmVudC0+dHJlZSwgcGFyZW50LT5zaXplKTsKKwkJCXN0cmJ1Zl9zcGxpY2UoJm5hbWVidWYsIDAsIGxlbiwKKwkJCQkgICAgICBjb250ZW50c19zdGFydCwgbGlua19sZW4pOworCQkJaWYgKHJlbWFpbmRlcikKKwkJCQluYW1lYnVmLmJ1ZltsaW5rX2xlbl0gPSAnLyc7CisJCQlmcmVlKGNvbnRlbnRzKTsKKwkJfQorCX0KK2RvbmU6CisJZm9yIChpID0gMDsgaSA8IHBhcmVudHNfbnI7IGkrKykKKwkJZnJlZShwYXJlbnRzW2ldLnRyZWUpOworCWZyZWUocGFyZW50cyk7CisKKwlzdHJidWZfcmVsZWFzZSgmbmFtZWJ1Zik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBtYXRjaF9lbnRyeShjb25zdCBzdHJ1Y3QgcGF0aHNwZWNfaXRlbSAqaXRlbSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICplbnRyeSwgaW50IHBhdGhsZW4sCisJCSAgICAgICBjb25zdCBjaGFyICptYXRjaCwgaW50IG1hdGNobGVuLAorCQkgICAgICAgZW51bSBpbnRlcmVzdGluZyAqbmV2ZXJfaW50ZXJlc3RpbmcpCit7CisJaW50IG0gPSAtMTsgLyogc2lnbmFscyB0aGF0IHdlIGhhdmVuJ3QgY2FsbGVkIHN0cm5jbXAoKSAqLworCisJaWYgKGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfSUNBU0UpCisJCS8qCisJCSAqICJOZXZlciBpbnRlcmVzdGluZyIgdHJpY2sgcmVxdWlyZXMgZXhhY3QKKwkJICogbWF0Y2hpbmcuIFdlIGNvdWxkIGRvIHNvbWV0aGluZyBjbGV2ZXIgd2l0aCBpbmV4YWN0CisJCSAqIG1hdGNoaW5nLCBidXQgaXQncyB0cmlja2llciAoYW5kIG5vdCB0byBmb3JnZXQgdGhhdAorCQkgKiBzdHJjYXNlY21wIGlzIGxvY2FsZS1kZXBlbmRlbnQsIGF0IGxlYXN0IGluCisJCSAqIGdsaWJjKS4gSnVzdCBkaXNhYmxlIGl0IGZvciBub3cuIEl0IGNhbid0IGJlIHdvcnNlCisJCSAqIHRoYW4gdGhlIHdpbGRjYXJkJ3MgY29kZXBhdGggb2YgJ1tUdF1bSGldW0lzXVtTc10nCisJCSAqIHBhdHRlcm4uCisJCSAqLworCQkqbmV2ZXJfaW50ZXJlc3RpbmcgPSBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisJZWxzZSBpZiAoKm5ldmVyX2ludGVyZXN0aW5nICE9IGVudHJ5X25vdF9pbnRlcmVzdGluZykgeworCQkvKgorCQkgKiBXZSBoYXZlIG5vdCBzZWVuIGFueSBtYXRjaCB0aGF0IHNvcnRzIGxhdGVyCisJCSAqIHRoYW4gdGhlIGN1cnJlbnQgcGF0aC4KKwkJICovCisKKwkJLyoKKwkJICogRG9lcyBtYXRjaCBzb3J0IHN0cmljdGx5IGVhcmxpZXIgdGhhbiBwYXRoCisJCSAqIHdpdGggdGhlaXIgY29tbW9uIHBhcnRzPworCQkgKi8KKwkJbSA9IHN0cm5jbXAobWF0Y2gsIGVudHJ5LT5wYXRoLAorCQkJICAgIChtYXRjaGxlbiA8IHBhdGhsZW4pID8gbWF0Y2hsZW4gOiBwYXRobGVuKTsKKwkJaWYgKG0gPCAwKQorCQkJcmV0dXJuIDA7CisKKwkJLyoKKwkJICogSWYgd2UgY29tZSBoZXJlIGV2ZW4gb25jZSwgdGhhdCBtZWFucyB0aGVyZSBpcyBhdAorCQkgKiBsZWFzdCBvbmUgcGF0aHNwZWMgdGhhdCB3b3VsZCBzb3J0IGVxdWFsIHRvIG9yCisJCSAqIGxhdGVyIHRoYW4gdGhlIHBhdGggd2UgYXJlIGN1cnJlbnRseSBsb29raW5nIGF0LgorCQkgKiBJbiBvdGhlciB3b3JkcywgaWYgd2UgaGF2ZSBuZXZlciByZWFjaGVkIHRoaXMgcG9pbnQKKwkJICogYWZ0ZXIgaXRlcmF0aW5nIGFsbCBwYXRoc3BlY3MsIGl0IG1lYW5zIGFsbAorCQkgKiBwYXRoc3BlY3MgYXJlIGVpdGhlciBvdXRzaWRlIG9mIGJhc2UsIG9yIGluc2lkZSB0aGUKKwkJICogYmFzZSBidXQgc29ydHMgc3RyaWN0bHkgZWFybGllciB0aGFuIHRoZSBjdXJyZW50CisJCSAqIG9uZS4gIEluIGVpdGhlciBjYXNlLCB0aGV5IHdpbGwgbmV2ZXIgbWF0Y2ggdGhlCisJCSAqIHN1YnNlcXVlbnQgZW50cmllcy4gIEluIHN1Y2ggYSBjYXNlLCB3ZSBpbml0aWFsaXplZAorCQkgKiB0aGUgdmFyaWFibGUgdG8gLTEgYW5kIHRoYXQgaXMgd2hhdCB3aWxsIGJlCisJCSAqIHJldHVybmVkLCBhbGxvd2luZyB0aGUgY2FsbGVyIHRvIHRlcm1pbmF0ZSBlYXJseS4KKwkJICovCisJCSpuZXZlcl9pbnRlcmVzdGluZyA9IGVudHJ5X25vdF9pbnRlcmVzdGluZzsKKwl9CisKKwlpZiAocGF0aGxlbiA+IG1hdGNobGVuKQorCQlyZXR1cm4gMDsKKworCWlmIChtYXRjaGxlbiA+IHBhdGhsZW4pIHsKKwkJaWYgKG1hdGNoW3BhdGhsZW5dICE9ICcvJykKKwkJCXJldHVybiAwOworCQlpZiAoIVNfSVNESVIoZW50cnktPm1vZGUpICYmICFTX0lTR0lUTElOSyhlbnRyeS0+bW9kZSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobSA9PSAtMSkKKwkJLyoKKwkJICogd2UgY2hlYXRlZCBhbmQgZGlkIG5vdCBkbyBzdHJuY21wKCksIHNvIHdlIGRvCisJCSAqIHRoYXQgaGVyZS4KKwkJICovCisJCW0gPSBwc19zdHJuY21wKGl0ZW0sIG1hdGNoLCBlbnRyeS0+cGF0aCwgcGF0aGxlbik7CisKKwkvKgorCSAqIElmIGNvbW1vbiBwYXJ0IG1hdGNoZWQgZWFybGllciB0aGVuIGl0IGlzIGEgaGl0LAorCSAqIGJlY2F1c2Ugd2UgcmVqZWN0ZWQgdGhlIGNhc2Ugd2hlcmUgcGF0aCBpcyBub3QgYQorCSAqIGxlYWRpbmcgZGlyZWN0b3J5IGFuZCBpcyBzaG9ydGVyIHRoYW4gbWF0Y2guCisJICovCisJaWYgKCFtKQorCQkvKgorCQkgKiBtYXRjaF9lbnRyeSBkb2VzIG5vdCBjaGVjayBpZiB0aGUgcHJlZml4IHBhcnQgaXMKKwkJICogbWF0Y2hlZCBjYXNlLXNlbnNpdGl2ZWx5LiBJZiB0aGUgZW50cnkgaXMgYQorCQkgKiBkaXJlY3RvcnkgYW5kIHBhcnQgb2YgcHJlZml4LCBpdCdsbCBiZSByZW1hdGNoZWQKKwkJICogZXZlbnR1YWxseSBieSBiYXNlY21wIHdpdGggc3BlY2lhbCB0cmVhdG1lbnQgZm9yCisJCSAqIHRoZSBwcmVmaXguCisJCSAqLworCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKiA6KGljYXNlKS1hd2FyZSBzdHJpbmcgY29tcGFyZSAqLworc3RhdGljIGludCBiYXNlY21wKGNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLAorCQkgICBjb25zdCBjaGFyICpiYXNlLCBjb25zdCBjaGFyICptYXRjaCwgaW50IGxlbikKK3sKKwlpZiAoaXRlbS0+bWFnaWMgJiBQQVRIU1BFQ19JQ0FTRSkgeworCQlpbnQgcmV0LCBuID0gbGVuID4gaXRlbS0+cHJlZml4ID8gaXRlbS0+cHJlZml4IDogbGVuOworCQlyZXQgPSBzdHJuY21wKGJhc2UsIG1hdGNoLCBuKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCWJhc2UgKz0gbjsKKwkJbWF0Y2ggKz0gbjsKKwkJbGVuIC09IG47CisJfQorCXJldHVybiBwc19zdHJuY21wKGl0ZW0sIGJhc2UsIG1hdGNoLCBsZW4pOworfQorCitzdGF0aWMgaW50IG1hdGNoX2Rpcl9wcmVmaXgoY29uc3Qgc3RydWN0IHBhdGhzcGVjX2l0ZW0gKml0ZW0sCisJCQkgICAgY29uc3QgY2hhciAqYmFzZSwKKwkJCSAgICBjb25zdCBjaGFyICptYXRjaCwgaW50IG1hdGNobGVuKQoreworCWlmIChiYXNlY21wKGl0ZW0sIGJhc2UsIG1hdGNoLCBtYXRjaGxlbikpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBJZiB0aGUgYmFzZSBpcyBhIHN1YmRpcmVjdG9yeSBvZiBhIHBhdGggd2hpY2gKKwkgKiB3YXMgc3BlY2lmaWVkLCBhbGwgb2YgdGhlbSBhcmUgaW50ZXJlc3RpbmcuCisJICovCisJaWYgKCFtYXRjaGxlbiB8fAorCSAgICBiYXNlW21hdGNobGVuXSA9PSAnLycgfHwKKwkgICAgbWF0Y2hbbWF0Y2hsZW4gLSAxXSA9PSAnLycpCisJCXJldHVybiAxOworCisJLyogSnVzdCBhIHJhbmRvbSBwcmVmaXggbWF0Y2ggKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBlcmZvcm0gbWF0Y2hpbmcgb24gdGhlIGxlYWRpbmcgbm9uLXdpbGRjYXJkIHBhcnQgb2YKKyAqIHBhdGhzcGVjLiBpdGVtLT5ub3dpbGRjYXJkX2xlbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiBSZXR1cm4KKyAqIG5vbi16ZXJvIGlmIGJhc2UgaXMgbWF0Y2hlZC4KKyAqLworc3RhdGljIGludCBtYXRjaF93aWxkY2FyZF9iYXNlKGNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmJhc2UsIGludCBiYXNlbGVuLAorCQkJICAgICAgIGludCAqbWF0Y2hlZCkKK3sKKwljb25zdCBjaGFyICptYXRjaCA9IGl0ZW0tPm1hdGNoOworCS8qIHRoZSB3aWxkY2FyZCBwYXJ0IGlzIG5vdCBjb25zaWRlcmVkIGluIHRoaXMgZnVuY3Rpb24gKi8KKwlpbnQgbWF0Y2hsZW4gPSBpdGVtLT5ub3dpbGRjYXJkX2xlbjsKKworCWlmIChiYXNlbGVuKSB7CisJCWludCBkaXJsZW47CisJCS8qCisJCSAqIFJldHVybiBlYXJseSBpZiBiYXNlIGlzIGxvbmdlciB0aGFuIHRoZQorCQkgKiBub24td2lsZGNhcmQgcGFydCBidXQgaXQgZG9lcyBub3QgbWF0Y2guCisJCSAqLworCQlpZiAoYmFzZWxlbiA+PSBtYXRjaGxlbikgeworCQkJKm1hdGNoZWQgPSBtYXRjaGxlbjsKKwkJCXJldHVybiAhYmFzZWNtcChpdGVtLCBiYXNlLCBtYXRjaCwgbWF0Y2hsZW4pOworCQl9CisKKwkJZGlybGVuID0gbWF0Y2hsZW47CisJCXdoaWxlIChkaXJsZW4gJiYgbWF0Y2hbZGlybGVuIC0gMV0gIT0gJy8nKQorCQkJZGlybGVuLS07CisKKwkJLyoKKwkJICogUmV0dXJuIGVhcmx5IGlmIGJhc2UgaXMgc2hvcnRlciB0aGFuIHRoZQorCQkgKiBub24td2lsZGNhcmQgcGFydCBidXQgaXQgZG9lcyBub3QgbWF0Y2guIE5vdGUgdGhhdAorCQkgKiBiYXNlIGVuZHMgd2l0aCAnLycgc28gd2UgYXJlIHN1cmUgaXQgcmVhbGx5IG1hdGNoZXMKKwkJICogZGlyZWN0b3J5CisJCSAqLworCQlpZiAoYmFzZWNtcChpdGVtLCBiYXNlLCBtYXRjaCwgYmFzZWxlbikpCisJCQlyZXR1cm4gMDsKKwkJKm1hdGNoZWQgPSBiYXNlbGVuOworCX0gZWxzZQorCQkqbWF0Y2hlZCA9IDA7CisJLyoKKwkgKiB3ZSBjb3VsZCBoYXZlIGNoZWNrZWQgZW50cnkgYWdhaW5zdCB0aGUgbm9uLXdpbGRjYXJkIHBhcnQKKwkgKiB0aGF0IGlzIG5vdCBpbiBiYXNlIGFuZCBkb2VzIHNpbWlsYXIgbmV2ZXJfaW50ZXJlc3RpbmcKKwkgKiBvcHRpbWl6YXRpb24gYXMgaW4gbWF0Y2hfZW50cnkuIEZvciBub3cganVzdCBiZSBoYXBweSB3aXRoCisJICogYmFzZSBjb21wYXJpc29uLgorCSAqLworCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKK30KKworLyoKKyAqIElzIGEgdHJlZSBlbnRyeSBpbnRlcmVzdGluZyBnaXZlbiB0aGUgcGF0aHNwZWMgd2UgaGF2ZT8KKyAqCisgKiBQcmUtY29uZGl0aW9uOiBlaXRoZXIgYmFzZWxlbiA9PSBiYXNlX29mZnNldCAoaS5lLiBlbXB0eSBwYXRoKQorICogb3IgYmFzZVtiYXNlbGVuLTFdID09ICcvJyAoaS5lLiB3aXRoIHRyYWlsaW5nIHNsYXNoKS4KKyAqLworc3RhdGljIGVudW0gaW50ZXJlc3RpbmcgZG9fbWF0Y2goY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKmVudHJ5LAorCQkJCSBzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBpbnQgYmFzZV9vZmZzZXQsCisJCQkJIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMsCisJCQkJIGludCBleGNsdWRlKQoreworCWludCBpOworCWludCBwYXRobGVuLCBiYXNlbGVuID0gYmFzZS0+bGVuIC0gYmFzZV9vZmZzZXQ7CisJZW51bSBpbnRlcmVzdGluZyBuZXZlcl9pbnRlcmVzdGluZyA9IHBzLT5oYXNfd2lsZGNhcmQgPworCQllbnRyeV9ub3RfaW50ZXJlc3RpbmcgOiBhbGxfZW50cmllc19ub3RfaW50ZXJlc3Rpbmc7CisKKwlHVUFSRF9QQVRIU1BFQyhwcywKKwkJICAgICAgIFBBVEhTUEVDX0ZST01UT1AgfAorCQkgICAgICAgUEFUSFNQRUNfTUFYREVQVEggfAorCQkgICAgICAgUEFUSFNQRUNfTElURVJBTCB8CisJCSAgICAgICBQQVRIU1BFQ19HTE9CIHwKKwkJICAgICAgIFBBVEhTUEVDX0lDQVNFIHwKKwkJICAgICAgIFBBVEhTUEVDX0VYQ0xVREUpOworCisJaWYgKCFwcy0+bnIpIHsKKwkJaWYgKCFwcy0+cmVjdXJzaXZlIHx8CisJCSAgICAhKHBzLT5tYWdpYyAmIFBBVEhTUEVDX01BWERFUFRIKSB8fAorCQkgICAgcHMtPm1heF9kZXB0aCA9PSAtMSkKKwkJCXJldHVybiBhbGxfZW50cmllc19pbnRlcmVzdGluZzsKKwkJcmV0dXJuIHdpdGhpbl9kZXB0aChiYXNlLT5idWYgKyBiYXNlX29mZnNldCwgYmFzZWxlbiwKKwkJCQkgICAgISFTX0lTRElSKGVudHJ5LT5tb2RlKSwKKwkJCQkgICAgcHMtPm1heF9kZXB0aCkgPworCQkJZW50cnlfaW50ZXJlc3RpbmcgOiBlbnRyeV9ub3RfaW50ZXJlc3Rpbmc7CisJfQorCisJcGF0aGxlbiA9IHRyZWVfZW50cnlfbGVuKGVudHJ5KTsKKworCWZvciAoaSA9IHBzLT5uciAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWNvbnN0IHN0cnVjdCBwYXRoc3BlY19pdGVtICppdGVtID0gcHMtPml0ZW1zK2k7CisJCWNvbnN0IGNoYXIgKm1hdGNoID0gaXRlbS0+bWF0Y2g7CisJCWNvbnN0IGNoYXIgKmJhc2Vfc3RyID0gYmFzZS0+YnVmICsgYmFzZV9vZmZzZXQ7CisJCWludCBtYXRjaGxlbiA9IGl0ZW0tPmxlbiwgbWF0Y2hlZCA9IDA7CisKKwkJaWYgKCghZXhjbHVkZSAmJiAgIGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkgfHwKKwkJICAgICggZXhjbHVkZSAmJiAhKGl0ZW0tPm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkpKQorCQkJY29udGludWU7CisKKwkJaWYgKGJhc2VsZW4gPj0gbWF0Y2hsZW4pIHsKKwkJCS8qIElmIGl0IGRvZXNuJ3QgbWF0Y2gsIG1vdmUgYWxvbmcuLi4gKi8KKwkJCWlmICghbWF0Y2hfZGlyX3ByZWZpeChpdGVtLCBiYXNlX3N0ciwgbWF0Y2gsIG1hdGNobGVuKSkKKwkJCQlnb3RvIG1hdGNoX3dpbGRjYXJkczsKKworCQkJaWYgKCFwcy0+cmVjdXJzaXZlIHx8CisJCQkgICAgIShwcy0+bWFnaWMgJiBQQVRIU1BFQ19NQVhERVBUSCkgfHwKKwkJCSAgICBwcy0+bWF4X2RlcHRoID09IC0xKQorCQkJCXJldHVybiBhbGxfZW50cmllc19pbnRlcmVzdGluZzsKKworCQkJcmV0dXJuIHdpdGhpbl9kZXB0aChiYXNlX3N0ciArIG1hdGNobGVuICsgMSwKKwkJCQkJICAgIGJhc2VsZW4gLSBtYXRjaGxlbiAtIDEsCisJCQkJCSAgICAhIVNfSVNESVIoZW50cnktPm1vZGUpLAorCQkJCQkgICAgcHMtPm1heF9kZXB0aCkgPworCQkJCWVudHJ5X2ludGVyZXN0aW5nIDogZW50cnlfbm90X2ludGVyZXN0aW5nOworCQl9CisKKwkJLyogRWl0aGVyIHRoZXJlIG11c3QgYmUgbm8gYmFzZSwgb3IgdGhlIGJhc2UgbXVzdCBtYXRjaC4gKi8KKwkJaWYgKGJhc2VsZW4gPT0gMCB8fCAhYmFzZWNtcChpdGVtLCBiYXNlX3N0ciwgbWF0Y2gsIGJhc2VsZW4pKSB7CisJCQlpZiAobWF0Y2hfZW50cnkoaXRlbSwgZW50cnksIHBhdGhsZW4sCisJCQkJCW1hdGNoICsgYmFzZWxlbiwgbWF0Y2hsZW4gLSBiYXNlbGVuLAorCQkJCQkmbmV2ZXJfaW50ZXJlc3RpbmcpKQorCQkJCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKKworCQkJaWYgKGl0ZW0tPm5vd2lsZGNhcmRfbGVuIDwgaXRlbS0+bGVuKSB7CisJCQkJaWYgKCFnaXRfZm5tYXRjaChpdGVtLCBtYXRjaCArIGJhc2VsZW4sIGVudHJ5LT5wYXRoLAorCQkJCQkJIGl0ZW0tPm5vd2lsZGNhcmRfbGVuIC0gYmFzZWxlbikpCisJCQkJCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKKworCQkJCS8qCisJCQkJICogTWF0Y2ggYWxsIGRpcmVjdG9yaWVzLiBXZSdsbCB0cnkgdG8KKwkJCQkgKiBtYXRjaCBmaWxlcyBsYXRlciBvbi4KKwkJCQkgKi8KKwkJCQlpZiAocHMtPnJlY3Vyc2l2ZSAmJiBTX0lTRElSKGVudHJ5LT5tb2RlKSkKKwkJCQkJcmV0dXJuIGVudHJ5X2ludGVyZXN0aW5nOworCQkJfQorCisJCQljb250aW51ZTsKKwkJfQorCittYXRjaF93aWxkY2FyZHM6CisJCWlmIChpdGVtLT5ub3dpbGRjYXJkX2xlbiA9PSBpdGVtLT5sZW4pCisJCQljb250aW51ZTsKKworCQlpZiAoaXRlbS0+bm93aWxkY2FyZF9sZW4gJiYKKwkJICAgICFtYXRjaF93aWxkY2FyZF9iYXNlKGl0ZW0sIGJhc2Vfc3RyLCBiYXNlbGVuLCAmbWF0Y2hlZCkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDb25jYXRlbmF0ZSBiYXNlIGFuZCBlbnRyeS0+cGF0aCBpbnRvIG9uZSBhbmQgZG8KKwkJICogZm5tYXRjaCgpIG9uIGl0LgorCQkgKgorCQkgKiBXaGlsZSB3ZSBjb3VsZCBhdm9pZCBjb25jYXRlbmF0aW9uIGluIGNlcnRhaW4gY2FzZXMKKwkJICogWzFdLCB3aGljaCBzYXZlcyBhIG1lbWNweSBhbmQgcG90ZW50aWFsbHkgYQorCQkgKiByZWFsbG9jLCBpdCB0dXJucyBvdXQgbm90IHdvcnRoIGl0LiBNZWFzdXJlbWVudCBvbgorCQkgKiBsaW51eC0yLjYgZG9lcyBub3Qgc2hvdyBhbnkgY2xlYXIgaW1wcm92ZW1lbnRzLAorCQkgKiBwYXJ0bHkgYmVjYXVzZSBvZiB0aGUgbm93aWxkY2FyZF9sZW4gb3B0aW1pemF0aW9uCisJCSAqIGluIGdpdF9mbm1hdGNoKCkuIEF2b2lkIG1pY3JvLW9wdGltaXphdGlvbnMgaGVyZS4KKwkJICoKKwkJICogWzFdIGlmIG1hdGNoX3dpbGRjYXJkX2Jhc2UoKSBzYXlzIHRoZSBiYXNlCisJCSAqIGRpcmVjdG9yeSBpcyBhbHJlYWR5IG1hdGNoZWQsIHdlIG9ubHkgbmVlZCB0byBtYXRjaAorCQkgKiB0aGUgcmVzdCwgd2hpY2ggaXMgc2hvcnRlciBzbyBfaW4gdGhlb3J5XyBmYXN0ZXIuCisJCSAqLworCisJCXN0cmJ1Zl9hZGQoYmFzZSwgZW50cnktPnBhdGgsIHBhdGhsZW4pOworCisJCWlmICghZ2l0X2ZubWF0Y2goaXRlbSwgbWF0Y2gsIGJhc2UtPmJ1ZiArIGJhc2Vfb2Zmc2V0LAorCQkJCSBpdGVtLT5ub3dpbGRjYXJkX2xlbikpIHsKKwkJCXN0cmJ1Zl9zZXRsZW4oYmFzZSwgYmFzZV9vZmZzZXQgKyBiYXNlbGVuKTsKKwkJCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKKwkJfQorCQlzdHJidWZfc2V0bGVuKGJhc2UsIGJhc2Vfb2Zmc2V0ICsgYmFzZWxlbik7CisKKwkJLyoKKwkJICogTWF0Y2ggYWxsIGRpcmVjdG9yaWVzLiBXZSdsbCB0cnkgdG8gbWF0Y2ggZmlsZXMKKwkJICogbGF0ZXIgb24uCisJCSAqIG1heF9kZXB0aCBpcyBpZ25vcmVkIGJ1dCB3ZSBtYXkgY29uc2lkZXIgc3VwcG9ydCBpdAorCQkgKiBpbiBmdXR1cmUsIHNlZQorCQkgKiBodHRwOi8vdGhyZWFkLmdtYW5lLm9yZy9nbWFuZS5jb21wLnZlcnNpb24tY29udHJvbC5naXQvMTYzNzU3L2ZvY3VzPTE2Mzg0MAorCQkgKi8KKwkJaWYgKHBzLT5yZWN1cnNpdmUgJiYgU19JU0RJUihlbnRyeS0+bW9kZSkpCisJCQlyZXR1cm4gZW50cnlfaW50ZXJlc3Rpbmc7CisJfQorCXJldHVybiBuZXZlcl9pbnRlcmVzdGluZzsgLyogTm8gbWF0Y2hlcyAqLworfQorCisvKgorICogSXMgYSB0cmVlIGVudHJ5IGludGVyZXN0aW5nIGdpdmVuIHRoZSBwYXRoc3BlYyB3ZSBoYXZlPworICoKKyAqIFByZS1jb25kaXRpb246IGVpdGhlciBiYXNlbGVuID09IGJhc2Vfb2Zmc2V0IChpLmUuIGVtcHR5IHBhdGgpCisgKiBvciBiYXNlW2Jhc2VsZW4tMV0gPT0gJy8nIChpLmUuIHdpdGggdHJhaWxpbmcgc2xhc2gpLgorICovCitlbnVtIGludGVyZXN0aW5nIHRyZWVfZW50cnlfaW50ZXJlc3RpbmcoY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKmVudHJ5LAorCQkJCQlzdHJ1Y3Qgc3RyYnVmICpiYXNlLCBpbnQgYmFzZV9vZmZzZXQsCisJCQkJCWNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpCit7CisJZW51bSBpbnRlcmVzdGluZyBwb3NpdGl2ZSwgbmVnYXRpdmU7CisJcG9zaXRpdmUgPSBkb19tYXRjaChlbnRyeSwgYmFzZSwgYmFzZV9vZmZzZXQsIHBzLCAwKTsKKworCS8qCisJICogY2FzZSB8IGVudHJ5IHwgcG9zaXRpdmUgfCBuZWdhdGl2ZSB8IHJlc3VsdAorCSAqIC0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0KKwkgKiAgIDEgIHwgIGZpbGUgfCAgIC0xICAgICB8ICAtMS4uMiAgIHwgIC0xCisJICogICAyICB8ICBmaWxlIHwgICAgMCAgICAgfCAgLTEuLjIgICB8ICAgMAorCSAqICAgMyAgfCAgZmlsZSB8ICAgIDEgICAgIHwgICAtMSAgICAgfCAgIDEKKwkgKiAgIDQgIHwgIGZpbGUgfCAgICAxICAgICB8ICAgIDAgICAgIHwgICAxCisJICogICA1ICB8ICBmaWxlIHwgICAgMSAgICAgfCAgICAxICAgICB8ICAgMAorCSAqICAgNiAgfCAgZmlsZSB8ICAgIDEgICAgIHwgICAgMiAgICAgfCAgIDAKKwkgKiAgIDcgIHwgIGZpbGUgfCAgICAyICAgICB8ICAgLTEgICAgIHwgICAyCisJICogICA4ICB8ICBmaWxlIHwgICAgMiAgICAgfCAgICAwICAgICB8ICAgMgorCSAqICAgOSAgfCAgZmlsZSB8ICAgIDIgICAgIHwgICAgMSAgICAgfCAgIDAKKwkgKiAgMTAgIHwgIGZpbGUgfCAgICAyICAgICB8ICAgIDIgICAgIHwgIC0xCisJICogLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLQorCSAqICAxMSAgfCAgZGlyICB8ICAgLTEgICAgIHwgIC0xLi4yICAgfCAgLTEKKwkgKiAgMTIgIHwgIGRpciAgfCAgICAwICAgICB8ICAtMS4uMiAgIHwgICAwCisJICogIDEzICB8ICBkaXIgIHwgICAgMSAgICAgfCAgIC0xICAgICB8ICAgMQorCSAqICAxNCAgfCAgZGlyICB8ICAgIDEgICAgIHwgICAgMCAgICAgfCAgIDEKKwkgKiAgMTUgIHwgIGRpciAgfCAgICAxICAgICB8ICAgIDEgICAgIHwgICAxICgqKQorCSAqICAxNiAgfCAgZGlyICB8ICAgIDEgICAgIHwgICAgMiAgICAgfCAgIDAKKwkgKiAgMTcgIHwgIGRpciAgfCAgICAyICAgICB8ICAgLTEgICAgIHwgICAyCisJICogIDE4ICB8ICBkaXIgIHwgICAgMiAgICAgfCAgICAwICAgICB8ICAgMgorCSAqICAxOSAgfCAgZGlyICB8ICAgIDIgICAgIHwgICAgMSAgICAgfCAgIDEgKCopCisJICogIDIwICB8ICBkaXIgIHwgICAgMiAgICAgfCAgICAyICAgICB8ICAtMQorCSAqCisJICogKCopIEFuIGV4Y2x1ZGUgcGF0dGVybiBpbnRlcmVzdGVkIGluIGEgZGlyZWN0b3J5IGRvZXMgbm90CisJICogbmVjZXNzYXJpbHkgbWVhbiBpdCB3aWxsIGV4Y2x1ZGUgYWxsIG9mIHRoZSBkaXJlY3RvcnkuIEluCisJICogd2lsZGNhcmQgY2FzZSwgaXQgY2FuJ3QgZGVjaWRlIHVudGlsIGxvb2tpbmcgYXQgaW5kaXZpZHVhbAorCSAqIGZpbGVzIGluc2lkZS4gU28gZG9uJ3Qgd3JpdGUgc3VjaCBkaXJlY3RvcmllcyBvZmYgeWV0LgorCSAqLworCisJaWYgKCEocHMtPm1hZ2ljICYgUEFUSFNQRUNfRVhDTFVERSkgfHwKKwkgICAgcG9zaXRpdmUgPD0gZW50cnlfbm90X2ludGVyZXN0aW5nKSAvKiAjMSwgIzIsICMxMSwgIzEyICovCisJCXJldHVybiBwb3NpdGl2ZTsKKworCW5lZ2F0aXZlID0gZG9fbWF0Y2goZW50cnksIGJhc2UsIGJhc2Vfb2Zmc2V0LCBwcywgMSk7CisKKwkvKiAjMywgIzQsICM3LCAjOCwgIzEzLCAjMTQsICMxNywgIzE4ICovCisJaWYgKG5lZ2F0aXZlIDw9IGVudHJ5X25vdF9pbnRlcmVzdGluZykKKwkJcmV0dXJuIHBvc2l0aXZlOworCisJLyogIzE1LCAjMTkgKi8KKwlpZiAoU19JU0RJUihlbnRyeS0+bW9kZSkgJiYKKwkgICAgcG9zaXRpdmUgPj0gZW50cnlfaW50ZXJlc3RpbmcgJiYKKwkgICAgbmVnYXRpdmUgPT0gZW50cnlfaW50ZXJlc3RpbmcpCisJCXJldHVybiBlbnRyeV9pbnRlcmVzdGluZzsKKworCWlmICgocG9zaXRpdmUgPT0gZW50cnlfaW50ZXJlc3RpbmcgJiYKKwkgICAgIG5lZ2F0aXZlID49IGVudHJ5X2ludGVyZXN0aW5nKSB8fCAvKiAjNSwgIzYsICMxNiAqLworCSAgICAocG9zaXRpdmUgPT0gYWxsX2VudHJpZXNfaW50ZXJlc3RpbmcgJiYKKwkgICAgIG5lZ2F0aXZlID09IGVudHJ5X2ludGVyZXN0aW5nKSkgLyogIzkgKi8KKwkJcmV0dXJuIGVudHJ5X25vdF9pbnRlcmVzdGluZzsKKworCXJldHVybiBhbGxfZW50cmllc19ub3RfaW50ZXJlc3Rpbmc7IC8qICMxMCwgIzIwICovCit9CmRpZmYgLS1naXQgYS90cmVlLXdhbGsuaCBiL3RyZWUtd2Fsay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMmY3YmYKLS0tIC9kZXYvbnVsbAorKysgYi90cmVlLXdhbGsuaApAQCAtMCwwICsxLDk0IEBACisjaWZuZGVmIFRSRUVfV0FMS19ICisjZGVmaW5lIFRSRUVfV0FMS19ICisKK3N0cnVjdCBuYW1lX2VudHJ5IHsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExOworCWNvbnN0IGNoYXIgKnBhdGg7CisJdW5zaWduZWQgaW50IG1vZGU7Cit9OworCitzdHJ1Y3QgdHJlZV9kZXNjIHsKKwljb25zdCB2b2lkICpidWZmZXI7CisJc3RydWN0IG5hbWVfZW50cnkgZW50cnk7CisJdW5zaWduZWQgaW50IHNpemU7Cit9OworCitzdGF0aWMgaW5saW5lIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRyZWVfZW50cnlfZXh0cmFjdChzdHJ1Y3QgdHJlZV9kZXNjICpkZXNjLCBjb25zdCBjaGFyICoqcGF0aHAsIHVuc2lnbmVkIGludCAqbW9kZXApCit7CisJKnBhdGhwID0gZGVzYy0+ZW50cnkucGF0aDsKKwkqbW9kZXAgPSBkZXNjLT5lbnRyeS5tb2RlOworCXJldHVybiBkZXNjLT5lbnRyeS5zaGExOworfQorCitzdGF0aWMgaW5saW5lIGludCB0cmVlX2VudHJ5X2xlbihjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbmUpCit7CisJcmV0dXJuIChjb25zdCBjaGFyICopbmUtPnNoYTEgLSBuZS0+cGF0aCAtIDE7Cit9CisKK3ZvaWQgdXBkYXRlX3RyZWVfZW50cnkoc3RydWN0IHRyZWVfZGVzYyAqKTsKK3ZvaWQgaW5pdF90cmVlX2Rlc2Moc3RydWN0IHRyZWVfZGVzYyAqZGVzYywgY29uc3Qgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRoYXQgZG9lcyBib3RoIHRyZWVfZW50cnlfZXh0cmFjdCgpIGFuZCB1cGRhdGVfdHJlZV9lbnRyeSgpCisgKiBhbmQgcmV0dXJucyB0cnVlIGZvciBzdWNjZXNzCisgKi8KK2ludCB0cmVlX2VudHJ5KHN0cnVjdCB0cmVlX2Rlc2MgKiwgc3RydWN0IG5hbWVfZW50cnkgKik7CisKK3ZvaWQgKmZpbGxfdHJlZV9kZXNjcmlwdG9yKHN0cnVjdCB0cmVlX2Rlc2MgKmRlc2MsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCitzdHJ1Y3QgdHJhdmVyc2VfaW5mbzsKK3R5cGVkZWYgaW50ICgqdHJhdmVyc2VfY2FsbGJhY2tfdCkoaW50IG4sIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBkaXJtYXNrLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqZW50cnksIHN0cnVjdCB0cmF2ZXJzZV9pbmZvICopOworaW50IHRyYXZlcnNlX3RyZWVzKGludCBuLCBzdHJ1Y3QgdHJlZV9kZXNjICp0LCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbyk7CisKK2VudW0gZm9sbG93X3N5bWxpbmtzX3Jlc3VsdCB7CisJRk9VTkQgPSAwLCAvKiBUaGlzIGluY2x1ZGVzIG91dC1vZi10cmVlIGxpbmtzICovCisJTUlTU0lOR19PQkpFQ1QgPSAtMSwgLyogVGhlIGluaXRpYWwgc3ltbGluayBpcyBtaXNzaW5nICovCisJREFOR0xJTkdfU1lNTElOSyA9IC0yLCAvKgorCQkJCSogVGhlIGluaXRpYWwgc3ltbGluayBpcyB0aGVyZSwgYnV0CisJCQkJKiAodHJhbnNpdGl2ZWx5KSBwb2ludHMgdG8gYSBtaXNzaW5nCisJCQkJKiBpbi10cmVlIGZpbGUKKwkJCQkqLworCVNZTUxJTktfTE9PUCA9IC0zLAorCU5PVF9ESVIgPSAtNCwgLyoKKwkJICAgICAgICogU29tZXdoZXJlIGFsb25nIHRoZSBzeW1saW5rIGNoYWluLCBhIHBhdGggaXMKKwkJICAgICAgICogcmVxdWVzdGVkIHdoaWNoIGNvbnRhaW5zIGEgZmlsZSBhcyBhCisJCSAgICAgICAqIG5vbi1maW5hbCBlbGVtZW50LgorCQkgICAgICAgKi8KK307CisKK2VudW0gZm9sbG93X3N5bWxpbmtzX3Jlc3VsdCBnZXRfdHJlZV9lbnRyeV9mb2xsb3dfc3ltbGlua3ModW5zaWduZWQgY2hhciAqdHJlZV9zaGExLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpyZXN1bHQsIHN0cnVjdCBzdHJidWYgKnJlc3VsdF9wYXRoLCB1bnNpZ25lZCAqbW9kZSk7CisKK3N0cnVjdCB0cmF2ZXJzZV9pbmZvIHsKKwlzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqcHJldjsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBuYW1lOworCWludCBwYXRobGVuOworCXN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWM7CisKKwl1bnNpZ25lZCBsb25nIGRmX2NvbmZsaWN0czsKKwl0cmF2ZXJzZV9jYWxsYmFja190IGZuOworCXZvaWQgKmRhdGE7CisJaW50IHNob3dfYWxsX2Vycm9yczsKK307CisKK2ludCBnZXRfdHJlZV9lbnRyeShjb25zdCB1bnNpZ25lZCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCAqKTsKK2V4dGVybiBjaGFyICptYWtlX3RyYXZlcnNlX3BhdGgoY2hhciAqcGF0aCwgY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICpuKTsKK2V4dGVybiB2b2lkIHNldHVwX3RyYXZlcnNlX2luZm8oc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmJhc2UpOworCitzdGF0aWMgaW5saW5lIGludCB0cmF2ZXJzZV9wYXRoX2xlbihjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm4pCit7CisJcmV0dXJuIGluZm8tPnBhdGhsZW4gKyB0cmVlX2VudHJ5X2xlbihuKTsKK30KKworLyogaW4gZ2VuZXJhbCwgcG9zaXRpdmUgbWVhbnMgImtpbmQgb2YgaW50ZXJlc3RpbmciICovCitlbnVtIGludGVyZXN0aW5nIHsKKwlhbGxfZW50cmllc19ub3RfaW50ZXJlc3RpbmcgPSAtMSwgLyogbm8sIGFuZCBubyBzdWJzZXF1ZW50IGVudHJpZXMgd2lsbCBiZSBlaXRoZXIgKi8KKwllbnRyeV9ub3RfaW50ZXJlc3RpbmcgPSAwLAorCWVudHJ5X2ludGVyZXN0aW5nID0gMSwKKwlhbGxfZW50cmllc19pbnRlcmVzdGluZyA9IDIgLyogeWVzLCBhbmQgYWxsIHN1YnNlcXVlbnQgZW50cmllcyB3aWxsIGJlICovCit9OworCitleHRlcm4gZW51bSBpbnRlcmVzdGluZyB0cmVlX2VudHJ5X2ludGVyZXN0aW5nKGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICosCisJCQkJCSAgICAgICBzdHJ1Y3Qgc3RyYnVmICosIGludCwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcHMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3RyZWUuYyBiL3RyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTNhNWIxCi0tLSAvZGV2L251bGwKKysrIGIvdHJlZS5jCkBAIC0wLDAgKzEsMjUzIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJjYWNoZS10cmVlLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgImJsb2IuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0YWcuaCIKKyNpbmNsdWRlICJ0cmVlLXdhbGsuaCIKKworY29uc3QgY2hhciAqdHJlZV90eXBlID0gInRyZWUiOworCitzdGF0aWMgaW50IHJlYWRfb25lX2VudHJ5X29wdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwgY29uc3QgY2hhciAqcGF0aG5hbWUsIHVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwgaW50IG9wdCkKK3sKKwlpbnQgbGVuOworCXVuc2lnbmVkIGludCBzaXplOworCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlpZiAoU19JU0RJUihtb2RlKSkKKwkJcmV0dXJuIFJFQURfVFJFRV9SRUNVUlNJVkU7CisKKwlsZW4gPSBzdHJsZW4ocGF0aG5hbWUpOworCXNpemUgPSBjYWNoZV9lbnRyeV9zaXplKGJhc2VsZW4gKyBsZW4pOworCWNlID0geGNhbGxvYygxLCBzaXplKTsKKworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobW9kZSk7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKHN0YWdlKTsKKwljZS0+Y2VfbmFtZWxlbiA9IGJhc2VsZW4gKyBsZW47CisJbWVtY3B5KGNlLT5uYW1lLCBiYXNlLCBiYXNlbGVuKTsKKwltZW1jcHkoY2UtPm5hbWUgKyBiYXNlbGVuLCBwYXRobmFtZSwgbGVuKzEpOworCWhhc2hjcHkoY2UtPnNoYTEsIHNoYTEpOworCXJldHVybiBhZGRfY2FjaGVfZW50cnkoY2UsIG9wdCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9vbmVfZW50cnkoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSwgc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJCSAgY29uc3QgY2hhciAqcGF0aG5hbWUsIHVuc2lnbmVkIG1vZGUsIGludCBzdGFnZSwKKwkJCSAgdm9pZCAqY29udGV4dCkKK3sKKwlyZXR1cm4gcmVhZF9vbmVfZW50cnlfb3B0KHNoYTEsIGJhc2UtPmJ1ZiwgYmFzZS0+bGVuLCBwYXRobmFtZSwKKwkJCQkgIG1vZGUsIHN0YWdlLAorCQkJCSAgQUREX0NBQ0hFX09LX1RPX0FERHxBRERfQ0FDSEVfU0tJUF9ERkNIRUNLKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdXNlZCB3aGVuIHRoZSBjYWxsZXIga25vd3MgdGhlcmUgaXMgbm8gZXhpc3RpbmcgZW50cmllcyBhdAorICogdGhlIHN0YWdlIHRoYXQgd2lsbCBjb25mbGljdCB3aXRoIHRoZSBlbnRyeSBiZWluZyBhZGRlZC4KKyAqLworc3RhdGljIGludCByZWFkX29uZV9lbnRyeV9xdWljayhjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExLCBzdHJ1Y3Qgc3RyYnVmICpiYXNlLAorCQkJCWNvbnN0IGNoYXIgKnBhdGhuYW1lLCB1bnNpZ25lZCBtb2RlLCBpbnQgc3RhZ2UsCisJCQkJdm9pZCAqY29udGV4dCkKK3sKKwlyZXR1cm4gcmVhZF9vbmVfZW50cnlfb3B0KHNoYTEsIGJhc2UtPmJ1ZiwgYmFzZS0+bGVuLCBwYXRobmFtZSwKKwkJCQkgIG1vZGUsIHN0YWdlLAorCQkJCSAgQUREX0NBQ0hFX0pVU1RfQVBQRU5EKTsKK30KKworc3RhdGljIGludCByZWFkX3RyZWVfMShzdHJ1Y3QgdHJlZSAqdHJlZSwgc3RydWN0IHN0cmJ1ZiAqYmFzZSwKKwkJICAgICAgIGludCBzdGFnZSwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJICAgICAgIHJlYWRfdHJlZV9mbl90IGZuLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCWludCBsZW4sIG9sZGxlbiA9IGJhc2UtPmxlbjsKKwllbnVtIGludGVyZXN0aW5nIHJldHZhbCA9IGVudHJ5X25vdF9pbnRlcmVzdGluZzsKKworCWlmIChwYXJzZV90cmVlKHRyZWUpKQorCQlyZXR1cm4gLTE7CisKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKworCXdoaWxlICh0cmVlX2VudHJ5KCZkZXNjLCAmZW50cnkpKSB7CisJCWlmIChyZXR2YWwgIT0gYWxsX2VudHJpZXNfaW50ZXJlc3RpbmcpIHsKKwkJCXJldHZhbCA9IHRyZWVfZW50cnlfaW50ZXJlc3RpbmcoJmVudHJ5LCBiYXNlLCAwLCBwYXRoc3BlYyk7CisJCQlpZiAocmV0dmFsID09IGFsbF9lbnRyaWVzX25vdF9pbnRlcmVzdGluZykKKwkJCQlicmVhazsKKwkJCWlmIChyZXR2YWwgPT0gZW50cnlfbm90X2ludGVyZXN0aW5nKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoIChmbihlbnRyeS5zaGExLCBiYXNlLAorCQkJICAgZW50cnkucGF0aCwgZW50cnkubW9kZSwgc3RhZ2UsIGNvbnRleHQpKSB7CisJCWNhc2UgMDoKKwkJCWNvbnRpbnVlOworCQljYXNlIFJFQURfVFJFRV9SRUNVUlNJVkU6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChTX0lTRElSKGVudHJ5Lm1vZGUpKQorCQkJaGFzaGNweShzaGExLCBlbnRyeS5zaGExKTsKKwkJZWxzZSBpZiAoU19JU0dJVExJTksoZW50cnkubW9kZSkpIHsKKwkJCXN0cnVjdCBjb21taXQgKmNvbW1pdDsKKworCQkJY29tbWl0ID0gbG9va3VwX2NvbW1pdChlbnRyeS5zaGExKTsKKwkJCWlmICghY29tbWl0KQorCQkJCWRpZSgiQ29tbWl0ICVzIGluIHN1Ym1vZHVsZSBwYXRoICVzJXMgbm90IGZvdW5kIiwKKwkJCQkgICAgc2hhMV90b19oZXgoZW50cnkuc2hhMSksCisJCQkJICAgIGJhc2UtPmJ1ZiwgZW50cnkucGF0aCk7CisKKwkJCWlmIChwYXJzZV9jb21taXQoY29tbWl0KSkKKwkJCQlkaWUoIkludmFsaWQgY29tbWl0ICVzIGluIHN1Ym1vZHVsZSBwYXRoICVzJXMiLAorCQkJCSAgICBzaGExX3RvX2hleChlbnRyeS5zaGExKSwKKwkJCQkgICAgYmFzZS0+YnVmLCBlbnRyeS5wYXRoKTsKKworCQkJaGFzaGNweShzaGExLCBjb21taXQtPnRyZWUtPm9iamVjdC5zaGExKTsKKwkJfQorCQllbHNlCisJCQljb250aW51ZTsKKworCQlsZW4gPSB0cmVlX2VudHJ5X2xlbigmZW50cnkpOworCQlzdHJidWZfYWRkKGJhc2UsIGVudHJ5LnBhdGgsIGxlbik7CisJCXN0cmJ1Zl9hZGRjaChiYXNlLCAnLycpOworCQlyZXR2YWwgPSByZWFkX3RyZWVfMShsb29rdXBfdHJlZShzaGExKSwKKwkJCQkgICAgIGJhc2UsIHN0YWdlLCBwYXRoc3BlYywKKwkJCQkgICAgIGZuLCBjb250ZXh0KTsKKwkJc3RyYnVmX3NldGxlbihiYXNlLCBvbGRsZW4pOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHJlYWRfdHJlZV9yZWN1cnNpdmUoc3RydWN0IHRyZWUgKnRyZWUsCisJCQljb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCWludCBzdGFnZSwgY29uc3Qgc3RydWN0IHBhdGhzcGVjICpwYXRoc3BlYywKKwkJCXJlYWRfdHJlZV9mbl90IGZuLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpbnQgcmV0OworCisJc3RyYnVmX2FkZCgmc2IsIGJhc2UsIGJhc2VsZW4pOworCXJldCA9IHJlYWRfdHJlZV8xKHRyZWUsICZzYiwgc3RhZ2UsIHBhdGhzcGVjLCBmbiwgY29udGV4dCk7CisJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNtcF9jYWNoZV9uYW1lX2NvbXBhcmUoY29uc3Qgdm9pZCAqYV8sIGNvbnN0IHZvaWQgKmJfKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UxLCAqY2UyOworCisJY2UxID0gKigoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICoqKWFfKTsKKwljZTIgPSAqKChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiopYl8pOworCXJldHVybiBjYWNoZV9uYW1lX3N0YWdlX2NvbXBhcmUoY2UxLT5uYW1lLCBjZTEtPmNlX25hbWVsZW4sIGNlX3N0YWdlKGNlMSksCisJCQkJICBjZTItPm5hbWUsIGNlMi0+Y2VfbmFtZWxlbiwgY2Vfc3RhZ2UoY2UyKSk7Cit9CisKK2ludCByZWFkX3RyZWUoc3RydWN0IHRyZWUgKnRyZWUsIGludCBzdGFnZSwgc3RydWN0IHBhdGhzcGVjICptYXRjaCkKK3sKKwlyZWFkX3RyZWVfZm5fdCBmbiA9IE5VTEw7CisJaW50IGksIGVycjsKKworCS8qCisJICogQ3VycmVudGx5IHRoZSBvbmx5IGV4aXN0aW5nIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbiBhbGwKKwkgKiBjYWxsIGl0IHdpdGggc3RhZ2U9MSBhbmQgYWZ0ZXIgbWFraW5nIHN1cmUgdGhlcmUgaXMgbm90aGluZworCSAqIGF0IHRoYXQgc3RhZ2U7IHdlIGNvdWxkIGFsd2F5cyB1c2UgcmVhZF9vbmVfZW50cnlfcXVpY2soKS4KKwkgKgorCSAqIEJ1dCB3aGVuIHdlIGRlY2lkZSB0byBzdHJhaWdodGVuIG91dCBnaXQtcmVhZC10cmVlIG5vdCB0bworCSAqIHVzZSB1bnBhY2tfdHJlZXMoKSBpbiBzb21lIGNhc2VzLCB0aGlzIHdpbGwgcHJvYmFibHkgc3RhcnQKKwkgKiB0byBtYXR0ZXIuCisJICovCisKKwkvKgorCSAqIFNlZSBpZiB3ZSBoYXZlIGNhY2hlIGVudHJ5IGF0IHRoZSBzdGFnZS4gIElmIHNvLAorCSAqIGRvIGl0IHRoZSBvcmlnaW5hbCBzbG93IHdheSwgb3RoZXJ3aXNlLCBhcHBlbmQgYW5kIHRoZW4KKwkgKiBzb3J0IGF0IHRoZSBlbmQuCisJICovCisJZm9yIChpID0gMDsgIWZuICYmIGkgPCBhY3RpdmVfbnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCQlpZiAoY2Vfc3RhZ2UoY2UpID09IHN0YWdlKQorCQkJZm4gPSByZWFkX29uZV9lbnRyeTsKKwl9CisKKwlpZiAoIWZuKQorCQlmbiA9IHJlYWRfb25lX2VudHJ5X3F1aWNrOworCWVyciA9IHJlYWRfdHJlZV9yZWN1cnNpdmUodHJlZSwgIiIsIDAsIHN0YWdlLCBtYXRjaCwgZm4sIE5VTEwpOworCWlmIChmbiA9PSByZWFkX29uZV9lbnRyeSB8fCBlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKgorCSAqIFNvcnQgdGhlIGNhY2hlIGVudHJ5IC0tIHdlIG5lZWQgdG8gbnVrZSB0aGUgY2FjaGUgdHJlZSwgdGhvdWdoLgorCSAqLworCWNhY2hlX3RyZWVfZnJlZSgmYWN0aXZlX2NhY2hlX3RyZWUpOworCXFzb3J0KGFjdGl2ZV9jYWNoZSwgYWN0aXZlX25yLCBzaXplb2YoYWN0aXZlX2NhY2hlWzBdKSwKKwkgICAgICBjbXBfY2FjaGVfbmFtZV9jb21wYXJlKTsKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHRyZWUgKmxvb2t1cF90cmVlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpCit7CisJc3RydWN0IG9iamVjdCAqb2JqID0gbG9va3VwX29iamVjdChzaGExKTsKKwlpZiAoIW9iaikKKwkJcmV0dXJuIGNyZWF0ZV9vYmplY3Qoc2hhMSwgYWxsb2NfdHJlZV9ub2RlKCkpOworCXJldHVybiBvYmplY3RfYXNfdHlwZShvYmosIE9CSl9UUkVFLCAwKTsKK30KKworaW50IHBhcnNlX3RyZWVfYnVmZmVyKHN0cnVjdCB0cmVlICppdGVtLCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKKwkJcmV0dXJuIDA7CisJaXRlbS0+b2JqZWN0LnBhcnNlZCA9IDE7CisJaXRlbS0+YnVmZmVyID0gYnVmZmVyOworCWl0ZW0tPnNpemUgPSBzaXplOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBwYXJzZV90cmVlX2dlbnRseShzdHJ1Y3QgdHJlZSAqaXRlbSwgaW50IHF1aWV0X29uX21pc3NpbmcpCit7CisJIGVudW0gb2JqZWN0X3R5cGUgdHlwZTsKKwkgdm9pZCAqYnVmZmVyOworCSB1bnNpZ25lZCBsb25nIHNpemU7CisKKwlpZiAoaXRlbS0+b2JqZWN0LnBhcnNlZCkKKwkJcmV0dXJuIDA7CisJYnVmZmVyID0gcmVhZF9zaGExX2ZpbGUoaXRlbS0+b2JqZWN0LnNoYTEsICZ0eXBlLCAmc2l6ZSk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybiBxdWlldF9vbl9taXNzaW5nID8gLTEgOgorCQkJZXJyb3IoIkNvdWxkIG5vdCByZWFkICVzIiwKKwkJCSAgICAgc2hhMV90b19oZXgoaXRlbS0+b2JqZWN0LnNoYTEpKTsKKwlpZiAodHlwZSAhPSBPQkpfVFJFRSkgeworCQlmcmVlKGJ1ZmZlcik7CisJCXJldHVybiBlcnJvcigiT2JqZWN0ICVzIG5vdCBhIHRyZWUiLAorCQkJICAgICBzaGExX3RvX2hleChpdGVtLT5vYmplY3Quc2hhMSkpOworCX0KKwlyZXR1cm4gcGFyc2VfdHJlZV9idWZmZXIoaXRlbSwgYnVmZmVyLCBzaXplKTsKK30KKwordm9pZCBmcmVlX3RyZWVfYnVmZmVyKHN0cnVjdCB0cmVlICp0cmVlKQoreworCWZyZWUodHJlZS0+YnVmZmVyKTsKKwl0cmVlLT5idWZmZXIgPSBOVUxMOworCXRyZWUtPnNpemUgPSAwOworCXRyZWUtPm9iamVjdC5wYXJzZWQgPSAwOworfQorCitzdHJ1Y3QgdHJlZSAqcGFyc2VfdHJlZV9pbmRpcmVjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXN0cnVjdCBvYmplY3QgKm9iaiA9IHBhcnNlX29iamVjdChzaGExKTsKKwlkbyB7CisJCWlmICghb2JqKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpCisJCQlyZXR1cm4gKHN0cnVjdCB0cmVlICopIG9iajsKKwkJZWxzZSBpZiAob2JqLT50eXBlID09IE9CSl9DT01NSVQpCisJCQlvYmogPSAmKCgoc3RydWN0IGNvbW1pdCAqKSBvYmopLT50cmVlLT5vYmplY3QpOworCQllbHNlIGlmIChvYmotPnR5cGUgPT0gT0JKX1RBRykKKwkJCW9iaiA9ICgoc3RydWN0IHRhZyAqKSBvYmopLT50YWdnZWQ7CisJCWVsc2UKKwkJCXJldHVybiBOVUxMOworCQlpZiAoIW9iai0+cGFyc2VkKQorCQkJcGFyc2Vfb2JqZWN0KG9iai0+c2hhMSk7CisJfSB3aGlsZSAoMSk7Cit9CmRpZmYgLS1naXQgYS90cmVlLmggYi90cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0Nzg2YwotLS0gL2Rldi9udWxsCisrKyBiL3RyZWUuaApAQCAtMCwwICsxLDM5IEBACisjaWZuZGVmIFRSRUVfSAorI2RlZmluZSBUUkVFX0gKKworI2luY2x1ZGUgIm9iamVjdC5oIgorCitleHRlcm4gY29uc3QgY2hhciAqdHJlZV90eXBlOworc3RydWN0IHN0cmJ1ZjsKKworc3RydWN0IHRyZWUgeworCXN0cnVjdCBvYmplY3Qgb2JqZWN0OworCXZvaWQgKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nIHNpemU7Cit9OworCitzdHJ1Y3QgdHJlZSAqbG9va3VwX3RyZWUoY29uc3QgdW5zaWduZWQgY2hhciAqc2hhMSk7CisKK2ludCBwYXJzZV90cmVlX2J1ZmZlcihzdHJ1Y3QgdHJlZSAqaXRlbSwgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitpbnQgcGFyc2VfdHJlZV9nZW50bHkoc3RydWN0IHRyZWUgKnRyZWUsIGludCBxdWlldF9vbl9taXNzaW5nKTsKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX3RyZWUoc3RydWN0IHRyZWUgKnRyZWUpCit7CisJcmV0dXJuIHBhcnNlX3RyZWVfZ2VudGx5KHRyZWUsIDApOworfQordm9pZCBmcmVlX3RyZWVfYnVmZmVyKHN0cnVjdCB0cmVlICp0cmVlKTsKKworLyogUGFyc2VzIGFuZCByZXR1cm5zIHRoZSB0cmVlIGluIHRoZSBnaXZlbiBlbnQsIGNoYXNpbmcgdGFncyBhbmQgY29tbWl0cy4gKi8KK3N0cnVjdCB0cmVlICpwYXJzZV90cmVlX2luZGlyZWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCisjZGVmaW5lIFJFQURfVFJFRV9SRUNVUlNJVkUgMQordHlwZWRlZiBpbnQgKCpyZWFkX3RyZWVfZm5fdCkoY29uc3QgdW5zaWduZWQgY2hhciAqLCBzdHJ1Y3Qgc3RyYnVmICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50LCBpbnQsIHZvaWQgKik7CisKK2V4dGVybiBpbnQgcmVhZF90cmVlX3JlY3Vyc2l2ZShzdHJ1Y3QgdHJlZSAqdHJlZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpiYXNlLCBpbnQgYmFzZWxlbiwKKwkJCSAgICAgICBpbnQgc3RhZ2UsIGNvbnN0IHN0cnVjdCBwYXRoc3BlYyAqcGF0aHNwZWMsCisJCQkgICAgICAgcmVhZF90cmVlX2ZuX3QgZm4sIHZvaWQgKmNvbnRleHQpOworCitleHRlcm4gaW50IHJlYWRfdHJlZShzdHJ1Y3QgdHJlZSAqdHJlZSwgaW50IHN0YWdlLCBzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjKTsKKworI2VuZGlmIC8qIFRSRUVfSCAqLwpkaWZmIC0tZ2l0IGEvdW5pY29kZV93aWR0aC5oIGIvdW5pY29kZV93aWR0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3Y2RkMjMKLS0tIC9kZXYvbnVsbAorKysgYi91bmljb2RlX3dpZHRoLmgKQEAgLTAsMCArMSwzMjMgQEAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZXJ2YWwgemVyb193aWR0aFtdID0geworeyAweDAzMDAsIDB4MDM2RiB9LAoreyAweDA0ODMsIDB4MDQ4OSB9LAoreyAweDA1OTEsIDB4MDVCRCB9LAoreyAweDA1QkYsIDB4MDVCRiB9LAoreyAweDA1QzEsIDB4MDVDMiB9LAoreyAweDA1QzQsIDB4MDVDNSB9LAoreyAweDA1QzcsIDB4MDVDNyB9LAoreyAweDA2MDAsIDB4MDYwNSB9LAoreyAweDA2MTAsIDB4MDYxQSB9LAoreyAweDA2MUMsIDB4MDYxQyB9LAoreyAweDA2NEIsIDB4MDY1RiB9LAoreyAweDA2NzAsIDB4MDY3MCB9LAoreyAweDA2RDYsIDB4MDZERCB9LAoreyAweDA2REYsIDB4MDZFNCB9LAoreyAweDA2RTcsIDB4MDZFOCB9LAoreyAweDA2RUEsIDB4MDZFRCB9LAoreyAweDA3MEYsIDB4MDcwRiB9LAoreyAweDA3MTEsIDB4MDcxMSB9LAoreyAweDA3MzAsIDB4MDc0QSB9LAoreyAweDA3QTYsIDB4MDdCMCB9LAoreyAweDA3RUIsIDB4MDdGMyB9LAoreyAweDA4MTYsIDB4MDgxOSB9LAoreyAweDA4MUIsIDB4MDgyMyB9LAoreyAweDA4MjUsIDB4MDgyNyB9LAoreyAweDA4MjksIDB4MDgyRCB9LAoreyAweDA4NTksIDB4MDg1QiB9LAoreyAweDA4RTQsIDB4MDkwMiB9LAoreyAweDA5M0EsIDB4MDkzQSB9LAoreyAweDA5M0MsIDB4MDkzQyB9LAoreyAweDA5NDEsIDB4MDk0OCB9LAoreyAweDA5NEQsIDB4MDk0RCB9LAoreyAweDA5NTEsIDB4MDk1NyB9LAoreyAweDA5NjIsIDB4MDk2MyB9LAoreyAweDA5ODEsIDB4MDk4MSB9LAoreyAweDA5QkMsIDB4MDlCQyB9LAoreyAweDA5QzEsIDB4MDlDNCB9LAoreyAweDA5Q0QsIDB4MDlDRCB9LAoreyAweDA5RTIsIDB4MDlFMyB9LAoreyAweDBBMDEsIDB4MEEwMiB9LAoreyAweDBBM0MsIDB4MEEzQyB9LAoreyAweDBBNDEsIDB4MEE0MiB9LAoreyAweDBBNDcsIDB4MEE0OCB9LAoreyAweDBBNEIsIDB4MEE0RCB9LAoreyAweDBBNTEsIDB4MEE1MSB9LAoreyAweDBBNzAsIDB4MEE3MSB9LAoreyAweDBBNzUsIDB4MEE3NSB9LAoreyAweDBBODEsIDB4MEE4MiB9LAoreyAweDBBQkMsIDB4MEFCQyB9LAoreyAweDBBQzEsIDB4MEFDNSB9LAoreyAweDBBQzcsIDB4MEFDOCB9LAoreyAweDBBQ0QsIDB4MEFDRCB9LAoreyAweDBBRTIsIDB4MEFFMyB9LAoreyAweDBCMDEsIDB4MEIwMSB9LAoreyAweDBCM0MsIDB4MEIzQyB9LAoreyAweDBCM0YsIDB4MEIzRiB9LAoreyAweDBCNDEsIDB4MEI0NCB9LAoreyAweDBCNEQsIDB4MEI0RCB9LAoreyAweDBCNTYsIDB4MEI1NiB9LAoreyAweDBCNjIsIDB4MEI2MyB9LAoreyAweDBCODIsIDB4MEI4MiB9LAoreyAweDBCQzAsIDB4MEJDMCB9LAoreyAweDBCQ0QsIDB4MEJDRCB9LAoreyAweDBDMDAsIDB4MEMwMCB9LAoreyAweDBDM0UsIDB4MEM0MCB9LAoreyAweDBDNDYsIDB4MEM0OCB9LAoreyAweDBDNEEsIDB4MEM0RCB9LAoreyAweDBDNTUsIDB4MEM1NiB9LAoreyAweDBDNjIsIDB4MEM2MyB9LAoreyAweDBDODEsIDB4MEM4MSB9LAoreyAweDBDQkMsIDB4MENCQyB9LAoreyAweDBDQkYsIDB4MENCRiB9LAoreyAweDBDQzYsIDB4MENDNiB9LAoreyAweDBDQ0MsIDB4MENDRCB9LAoreyAweDBDRTIsIDB4MENFMyB9LAoreyAweDBEMDEsIDB4MEQwMSB9LAoreyAweDBENDEsIDB4MEQ0NCB9LAoreyAweDBENEQsIDB4MEQ0RCB9LAoreyAweDBENjIsIDB4MEQ2MyB9LAoreyAweDBEQ0EsIDB4MERDQSB9LAoreyAweDBERDIsIDB4MERENCB9LAoreyAweDBERDYsIDB4MERENiB9LAoreyAweDBFMzEsIDB4MEUzMSB9LAoreyAweDBFMzQsIDB4MEUzQSB9LAoreyAweDBFNDcsIDB4MEU0RSB9LAoreyAweDBFQjEsIDB4MEVCMSB9LAoreyAweDBFQjQsIDB4MEVCOSB9LAoreyAweDBFQkIsIDB4MEVCQyB9LAoreyAweDBFQzgsIDB4MEVDRCB9LAoreyAweDBGMTgsIDB4MEYxOSB9LAoreyAweDBGMzUsIDB4MEYzNSB9LAoreyAweDBGMzcsIDB4MEYzNyB9LAoreyAweDBGMzksIDB4MEYzOSB9LAoreyAweDBGNzEsIDB4MEY3RSB9LAoreyAweDBGODAsIDB4MEY4NCB9LAoreyAweDBGODYsIDB4MEY4NyB9LAoreyAweDBGOEQsIDB4MEY5NyB9LAoreyAweDBGOTksIDB4MEZCQyB9LAoreyAweDBGQzYsIDB4MEZDNiB9LAoreyAweDEwMkQsIDB4MTAzMCB9LAoreyAweDEwMzIsIDB4MTAzNyB9LAoreyAweDEwMzksIDB4MTAzQSB9LAoreyAweDEwM0QsIDB4MTAzRSB9LAoreyAweDEwNTgsIDB4MTA1OSB9LAoreyAweDEwNUUsIDB4MTA2MCB9LAoreyAweDEwNzEsIDB4MTA3NCB9LAoreyAweDEwODIsIDB4MTA4MiB9LAoreyAweDEwODUsIDB4MTA4NiB9LAoreyAweDEwOEQsIDB4MTA4RCB9LAoreyAweDEwOUQsIDB4MTA5RCB9LAoreyAweDExNjAsIDB4MTFGRiB9LAoreyAweDEzNUQsIDB4MTM1RiB9LAoreyAweDE3MTIsIDB4MTcxNCB9LAoreyAweDE3MzIsIDB4MTczNCB9LAoreyAweDE3NTIsIDB4MTc1MyB9LAoreyAweDE3NzIsIDB4MTc3MyB9LAoreyAweDE3QjQsIDB4MTdCNSB9LAoreyAweDE3QjcsIDB4MTdCRCB9LAoreyAweDE3QzYsIDB4MTdDNiB9LAoreyAweDE3QzksIDB4MTdEMyB9LAoreyAweDE3REQsIDB4MTdERCB9LAoreyAweDE4MEIsIDB4MTgwRSB9LAoreyAweDE4QTksIDB4MThBOSB9LAoreyAweDE5MjAsIDB4MTkyMiB9LAoreyAweDE5MjcsIDB4MTkyOCB9LAoreyAweDE5MzIsIDB4MTkzMiB9LAoreyAweDE5MzksIDB4MTkzQiB9LAoreyAweDFBMTcsIDB4MUExOCB9LAoreyAweDFBMUIsIDB4MUExQiB9LAoreyAweDFBNTYsIDB4MUE1NiB9LAoreyAweDFBNTgsIDB4MUE1RSB9LAoreyAweDFBNjAsIDB4MUE2MCB9LAoreyAweDFBNjIsIDB4MUE2MiB9LAoreyAweDFBNjUsIDB4MUE2QyB9LAoreyAweDFBNzMsIDB4MUE3QyB9LAoreyAweDFBN0YsIDB4MUE3RiB9LAoreyAweDFBQjAsIDB4MUFCRSB9LAoreyAweDFCMDAsIDB4MUIwMyB9LAoreyAweDFCMzQsIDB4MUIzNCB9LAoreyAweDFCMzYsIDB4MUIzQSB9LAoreyAweDFCM0MsIDB4MUIzQyB9LAoreyAweDFCNDIsIDB4MUI0MiB9LAoreyAweDFCNkIsIDB4MUI3MyB9LAoreyAweDFCODAsIDB4MUI4MSB9LAoreyAweDFCQTIsIDB4MUJBNSB9LAoreyAweDFCQTgsIDB4MUJBOSB9LAoreyAweDFCQUIsIDB4MUJBRCB9LAoreyAweDFCRTYsIDB4MUJFNiB9LAoreyAweDFCRTgsIDB4MUJFOSB9LAoreyAweDFCRUQsIDB4MUJFRCB9LAoreyAweDFCRUYsIDB4MUJGMSB9LAoreyAweDFDMkMsIDB4MUMzMyB9LAoreyAweDFDMzYsIDB4MUMzNyB9LAoreyAweDFDRDAsIDB4MUNEMiB9LAoreyAweDFDRDQsIDB4MUNFMCB9LAoreyAweDFDRTIsIDB4MUNFOCB9LAoreyAweDFDRUQsIDB4MUNFRCB9LAoreyAweDFDRjQsIDB4MUNGNCB9LAoreyAweDFDRjgsIDB4MUNGOSB9LAoreyAweDFEQzAsIDB4MURGNSB9LAoreyAweDFERkMsIDB4MURGRiB9LAoreyAweDIwMEIsIDB4MjAwRiB9LAoreyAweDIwMkEsIDB4MjAyRSB9LAoreyAweDIwNjAsIDB4MjA2NCB9LAoreyAweDIwNjYsIDB4MjA2RiB9LAoreyAweDIwRDAsIDB4MjBGMCB9LAoreyAweDJDRUYsIDB4MkNGMSB9LAoreyAweDJEN0YsIDB4MkQ3RiB9LAoreyAweDJERTAsIDB4MkRGRiB9LAoreyAweDMwMkEsIDB4MzAyRCB9LAoreyAweDMwOTksIDB4MzA5QSB9LAoreyAweEE2NkYsIDB4QTY3MiB9LAoreyAweEE2NzQsIDB4QTY3RCB9LAoreyAweEE2OUYsIDB4QTY5RiB9LAoreyAweEE2RjAsIDB4QTZGMSB9LAoreyAweEE4MDIsIDB4QTgwMiB9LAoreyAweEE4MDYsIDB4QTgwNiB9LAoreyAweEE4MEIsIDB4QTgwQiB9LAoreyAweEE4MjUsIDB4QTgyNiB9LAoreyAweEE4QzQsIDB4QThDNCB9LAoreyAweEE4RTAsIDB4QThGMSB9LAoreyAweEE5MjYsIDB4QTkyRCB9LAoreyAweEE5NDcsIDB4QTk1MSB9LAoreyAweEE5ODAsIDB4QTk4MiB9LAoreyAweEE5QjMsIDB4QTlCMyB9LAoreyAweEE5QjYsIDB4QTlCOSB9LAoreyAweEE5QkMsIDB4QTlCQyB9LAoreyAweEE5RTUsIDB4QTlFNSB9LAoreyAweEFBMjksIDB4QUEyRSB9LAoreyAweEFBMzEsIDB4QUEzMiB9LAoreyAweEFBMzUsIDB4QUEzNiB9LAoreyAweEFBNDMsIDB4QUE0MyB9LAoreyAweEFBNEMsIDB4QUE0QyB9LAoreyAweEFBN0MsIDB4QUE3QyB9LAoreyAweEFBQjAsIDB4QUFCMCB9LAoreyAweEFBQjIsIDB4QUFCNCB9LAoreyAweEFBQjcsIDB4QUFCOCB9LAoreyAweEFBQkUsIDB4QUFCRiB9LAoreyAweEFBQzEsIDB4QUFDMSB9LAoreyAweEFBRUMsIDB4QUFFRCB9LAoreyAweEFBRjYsIDB4QUFGNiB9LAoreyAweEFCRTUsIDB4QUJFNSB9LAoreyAweEFCRTgsIDB4QUJFOCB9LAoreyAweEFCRUQsIDB4QUJFRCB9LAoreyAweEZCMUUsIDB4RkIxRSB9LAoreyAweEZFMDAsIDB4RkUwRiB9LAoreyAweEZFMjAsIDB4RkUyRCB9LAoreyAweEZFRkYsIDB4RkVGRiB9LAoreyAweEZGRjksIDB4RkZGQiB9LAoreyAweDEwMUZELCAweDEwMUZEIH0sCit7IDB4MTAyRTAsIDB4MTAyRTAgfSwKK3sgMHgxMDM3NiwgMHgxMDM3QSB9LAoreyAweDEwQTAxLCAweDEwQTAzIH0sCit7IDB4MTBBMDUsIDB4MTBBMDYgfSwKK3sgMHgxMEEwQywgMHgxMEEwRiB9LAoreyAweDEwQTM4LCAweDEwQTNBIH0sCit7IDB4MTBBM0YsIDB4MTBBM0YgfSwKK3sgMHgxMEFFNSwgMHgxMEFFNiB9LAoreyAweDExMDAxLCAweDExMDAxIH0sCit7IDB4MTEwMzgsIDB4MTEwNDYgfSwKK3sgMHgxMTA3RiwgMHgxMTA4MSB9LAoreyAweDExMEIzLCAweDExMEI2IH0sCit7IDB4MTEwQjksIDB4MTEwQkEgfSwKK3sgMHgxMTBCRCwgMHgxMTBCRCB9LAoreyAweDExMTAwLCAweDExMTAyIH0sCit7IDB4MTExMjcsIDB4MTExMkIgfSwKK3sgMHgxMTEyRCwgMHgxMTEzNCB9LAoreyAweDExMTczLCAweDExMTczIH0sCit7IDB4MTExODAsIDB4MTExODEgfSwKK3sgMHgxMTFCNiwgMHgxMTFCRSB9LAoreyAweDExMjJGLCAweDExMjMxIH0sCit7IDB4MTEyMzQsIDB4MTEyMzQgfSwKK3sgMHgxMTIzNiwgMHgxMTIzNyB9LAoreyAweDExMkRGLCAweDExMkRGIH0sCit7IDB4MTEyRTMsIDB4MTEyRUEgfSwKK3sgMHgxMTMwMSwgMHgxMTMwMSB9LAoreyAweDExMzNDLCAweDExMzNDIH0sCit7IDB4MTEzNDAsIDB4MTEzNDAgfSwKK3sgMHgxMTM2NiwgMHgxMTM2QyB9LAoreyAweDExMzcwLCAweDExMzc0IH0sCit7IDB4MTE0QjMsIDB4MTE0QjggfSwKK3sgMHgxMTRCQSwgMHgxMTRCQSB9LAoreyAweDExNEJGLCAweDExNEMwIH0sCit7IDB4MTE0QzIsIDB4MTE0QzMgfSwKK3sgMHgxMTVCMiwgMHgxMTVCNSB9LAoreyAweDExNUJDLCAweDExNUJEIH0sCit7IDB4MTE1QkYsIDB4MTE1QzAgfSwKK3sgMHgxMTYzMywgMHgxMTYzQSB9LAoreyAweDExNjNELCAweDExNjNEIH0sCit7IDB4MTE2M0YsIDB4MTE2NDAgfSwKK3sgMHgxMTZBQiwgMHgxMTZBQiB9LAoreyAweDExNkFELCAweDExNkFEIH0sCit7IDB4MTE2QjAsIDB4MTE2QjUgfSwKK3sgMHgxMTZCNywgMHgxMTZCNyB9LAoreyAweDE2QUYwLCAweDE2QUY0IH0sCit7IDB4MTZCMzAsIDB4MTZCMzYgfSwKK3sgMHgxNkY4RiwgMHgxNkY5MiB9LAoreyAweDFCQzlELCAweDFCQzlFIH0sCit7IDB4MUJDQTAsIDB4MUJDQTMgfSwKK3sgMHgxRDE2NywgMHgxRDE2OSB9LAoreyAweDFEMTczLCAweDFEMTgyIH0sCit7IDB4MUQxODUsIDB4MUQxOEIgfSwKK3sgMHgxRDFBQSwgMHgxRDFBRCB9LAoreyAweDFEMjQyLCAweDFEMjQ0IH0sCit7IDB4MUU4RDAsIDB4MUU4RDYgfSwKK3sgMHhFMDAwMSwgMHhFMDAwMSB9LAoreyAweEUwMDIwLCAweEUwMDdGIH0sCit7IDB4RTAxMDAsIDB4RTAxRUYgfQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZXJ2YWwgZG91YmxlX3dpZHRoW10gPSB7Cit7IC8qIHBsYW5lICovIDB4MCwgMHgxQyB9LAoreyAvKiBwbGFuZSAqLyAweDFDLCAweDIxIH0sCit7IC8qIHBsYW5lICovIDB4MjEsIDB4MjIgfSwKK3sgLyogcGxhbmUgKi8gMHgyMiwgMHgyMyB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAvKiBwbGFuZSAqLyAweDAsIDB4MCB9LAoreyAweDExMDAsIDB4MTE1RiB9LAoreyAweDIzMjksIDB4MjMyQSB9LAoreyAweDJFODAsIDB4MkU5OSB9LAoreyAweDJFOUIsIDB4MkVGMyB9LAoreyAweDJGMDAsIDB4MkZENSB9LAoreyAweDJGRjAsIDB4MkZGQiB9LAoreyAweDMwMDAsIDB4MzAzRSB9LAoreyAweDMwNDEsIDB4MzA5NiB9LAoreyAweDMwOTksIDB4MzBGRiB9LAoreyAweDMxMDUsIDB4MzEyRCB9LAoreyAweDMxMzEsIDB4MzE4RSB9LAoreyAweDMxOTAsIDB4MzFCQSB9LAoreyAweDMxQzAsIDB4MzFFMyB9LAoreyAweDMxRjAsIDB4MzIxRSB9LAoreyAweDMyMjAsIDB4MzI0NyB9LAoreyAweDMyNTAsIDB4MzJGRSB9LAoreyAweDMzMDAsIDB4NERCRiB9LAoreyAweDRFMDAsIDB4QTQ4QyB9LAoreyAweEE0OTAsIDB4QTRDNiB9LAoreyAweEE5NjAsIDB4QTk3QyB9LAoreyAweEFDMDAsIDB4RDdBMyB9LAoreyAweEY5MDAsIDB4RkFGRiB9LAoreyAweEZFMTAsIDB4RkUxOSB9LAoreyAweEZFMzAsIDB4RkU1MiB9LAoreyAweEZFNTQsIDB4RkU2NiB9LAoreyAweEZFNjgsIDB4RkU2QiB9LAoreyAweEZGMDEsIDB4RkY2MCB9LAoreyAweEZGRTAsIDB4RkZFNiB9LAoreyAweDFCMDAwLCAweDFCMDAxIH0sCit7IDB4MUYyMDAsIDB4MUYyMDIgfSwKK3sgMHgxRjIxMCwgMHgxRjIzQSB9LAoreyAweDFGMjQwLCAweDFGMjQ4IH0sCit7IDB4MUYyNTAsIDB4MUYyNTEgfSwKK3sgMHgyMDAwMCwgMHgyRkZGRCB9LAoreyAweDMwMDAwLCAweDNGRkZEIH0KK307CmRpZmYgLS1naXQgYS91bmltcGxlbWVudGVkLnNoIGIvdW5pbXBsZW1lbnRlZC5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjUyZGU0Ci0tLSAvZGV2L251bGwKKysrIGIvdW5pbXBsZW1lbnRlZC5zaApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9zaAorCitlY2hvID4mMiAiZmF0YWw6IGdpdCB3YXMgYnVpbHQgd2l0aG91dCBzdXBwb3J0IGZvciBgYmFzZW5hbWUgJDBgIChAQFJFQVNPTkBAKS4iCitleGl0IDEyOApkaWZmIC0tZ2l0IGEvdW5peC1zb2NrZXQuYyBiL3VuaXgtc29ja2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllZDQ4YgotLS0gL2Rldi9udWxsCisrKyBiL3VuaXgtc29ja2V0LmMKQEAgLTAsMCArMSwxMjMgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInVuaXgtc29ja2V0LmgiCisKK3N0YXRpYyBpbnQgdW5peF9zdHJlYW1fc29ja2V0KHZvaWQpCit7CisJaW50IGZkID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKwlpZiAoZmQgPCAwKQorCQlkaWVfZXJybm8oInVuYWJsZSB0byBjcmVhdGUgc29ja2V0Iik7CisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgaW50IGNoZGlyX2xlbihjb25zdCBjaGFyICpvcmlnLCBpbnQgbGVuKQoreworCWNoYXIgKnBhdGggPSB4bWVtZHVweihvcmlnLCBsZW4pOworCWludCByID0gY2hkaXIocGF0aCk7CisJZnJlZShwYXRoKTsKKwlyZXR1cm4gcjsKK30KKworc3RydWN0IHVuaXhfc29ja2FkZHJfY29udGV4dCB7CisJY2hhciAqb3JpZ19kaXI7Cit9OworCitzdGF0aWMgdm9pZCB1bml4X3NvY2thZGRyX2NsZWFudXAoc3RydWN0IHVuaXhfc29ja2FkZHJfY29udGV4dCAqY3R4KQoreworCWlmICghY3R4LT5vcmlnX2RpcikKKwkJcmV0dXJuOworCS8qCisJICogSWYgd2UgZmFpbCwgd2UgY2FuJ3QganVzdCByZXR1cm4gYW4gZXJyb3IsIHNpbmNlIHdlIGhhdmUKKwkgKiBtb3ZlZCB0aGUgY3dkIG9mIHRoZSB3aG9sZSBwcm9jZXNzLCB3aGljaCBjb3VsZCBjb25mdXNlIGNhbGxpbmcKKwkgKiBjb2RlLiAgV2UgYXJlIGJldHRlciBvZmYgdG8ganVzdCBkaWUuCisJICovCisJaWYgKGNoZGlyKGN0eC0+b3JpZ19kaXIpIDwgMCkKKwkJZGllKCJ1bmFibGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB3b3JraW5nIGRpcmVjdG9yeSIpOworCWZyZWUoY3R4LT5vcmlnX2Rpcik7Cit9CisKK3N0YXRpYyBpbnQgdW5peF9zb2NrYWRkcl9pbml0KHN0cnVjdCBzb2NrYWRkcl91biAqc2EsIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICAgICBzdHJ1Y3QgdW5peF9zb2NrYWRkcl9jb250ZXh0ICpjdHgpCit7CisJaW50IHNpemUgPSBzdHJsZW4ocGF0aCkgKyAxOworCisJY3R4LT5vcmlnX2RpciA9IE5VTEw7CisJaWYgKHNpemUgPiBzaXplb2Yoc2EtPnN1bl9wYXRoKSkgeworCQljb25zdCBjaGFyICpzbGFzaCA9IGZpbmRfbGFzdF9kaXJfc2VwKHBhdGgpOworCQljb25zdCBjaGFyICpkaXI7CisJCXN0cnVjdCBzdHJidWYgY3dkID0gU1RSQlVGX0lOSVQ7CisKKwkJaWYgKCFzbGFzaCkgeworCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQlkaXIgPSBwYXRoOworCQlwYXRoID0gc2xhc2ggKyAxOworCQlzaXplID0gc3RybGVuKHBhdGgpICsgMTsKKwkJaWYgKHNpemUgPiBzaXplb2Yoc2EtPnN1bl9wYXRoKSkgeworCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKHN0cmJ1Zl9nZXRjd2QoJmN3ZCkpCisJCQlyZXR1cm4gLTE7CisJCWN0eC0+b3JpZ19kaXIgPSBzdHJidWZfZGV0YWNoKCZjd2QsIE5VTEwpOworCQlpZiAoY2hkaXJfbGVuKGRpciwgc2xhc2ggLSBkaXIpIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwltZW1zZXQoc2EsIDAsIHNpemVvZigqc2EpKTsKKwlzYS0+c3VuX2ZhbWlseSA9IEFGX1VOSVg7CisJbWVtY3B5KHNhLT5zdW5fcGF0aCwgcGF0aCwgc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB1bml4X3N0cmVhbV9jb25uZWN0KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJaW50IGZkLCBzYXZlZF9lcnJubzsKKwlzdHJ1Y3Qgc29ja2FkZHJfdW4gc2E7CisJc3RydWN0IHVuaXhfc29ja2FkZHJfY29udGV4dCBjdHg7CisKKwlpZiAodW5peF9zb2NrYWRkcl9pbml0KCZzYSwgcGF0aCwgJmN0eCkgPCAwKQorCQlyZXR1cm4gLTE7CisJZmQgPSB1bml4X3N0cmVhbV9zb2NrZXQoKTsKKwlpZiAoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzYSwgc2l6ZW9mKHNhKSkgPCAwKQorCQlnb3RvIGZhaWw7CisJdW5peF9zb2NrYWRkcl9jbGVhbnVwKCZjdHgpOworCXJldHVybiBmZDsKKworZmFpbDoKKwlzYXZlZF9lcnJubyA9IGVycm5vOworCXVuaXhfc29ja2FkZHJfY2xlYW51cCgmY3R4KTsKKwljbG9zZShmZCk7CisJZXJybm8gPSBzYXZlZF9lcnJubzsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCB1bml4X3N0cmVhbV9saXN0ZW4oY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgZmQsIHNhdmVkX2Vycm5vOworCXN0cnVjdCBzb2NrYWRkcl91biBzYTsKKwlzdHJ1Y3QgdW5peF9zb2NrYWRkcl9jb250ZXh0IGN0eDsKKworCXVubGluayhwYXRoKTsKKworCWlmICh1bml4X3NvY2thZGRyX2luaXQoJnNhLCBwYXRoLCAmY3R4KSA8IDApCisJCXJldHVybiAtMTsKKwlmZCA9IHVuaXhfc3RyZWFtX3NvY2tldCgpOworCisJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2EsIHNpemVvZihzYSkpIDwgMCkKKwkJZ290byBmYWlsOworCisJaWYgKGxpc3RlbihmZCwgNSkgPCAwKQorCQlnb3RvIGZhaWw7CisKKwl1bml4X3NvY2thZGRyX2NsZWFudXAoJmN0eCk7CisJcmV0dXJuIGZkOworCitmYWlsOgorCXNhdmVkX2Vycm5vID0gZXJybm87CisJdW5peF9zb2NrYWRkcl9jbGVhbnVwKCZjdHgpOworCWNsb3NlKGZkKTsKKwllcnJubyA9IHNhdmVkX2Vycm5vOworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL3VuaXgtc29ja2V0LmggYi91bml4LXNvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNzFhZWUKLS0tIC9kZXYvbnVsbAorKysgYi91bml4LXNvY2tldC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBVTklYX1NPQ0tFVF9ICisjZGVmaW5lIFVOSVhfU09DS0VUX0gKKworaW50IHVuaXhfc3RyZWFtX2Nvbm5lY3QoY29uc3QgY2hhciAqcGF0aCk7CitpbnQgdW5peF9zdHJlYW1fbGlzdGVuKGNvbnN0IGNoYXIgKnBhdGgpOworCisjZW5kaWYgLyogVU5JWF9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmMgYi91bnBhY2stdHJlZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTIwMzJmCi0tLSAvZGV2L251bGwKKysrIGIvdW5wYWNrLXRyZWVzLmMKQEAgLTAsMCArMSwxODgzIEBACisjZGVmaW5lIE5PX1RIRV9JTkRFWF9DT01QQVRJQklMSVRZX01BQ1JPUworI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAiZGlyLmgiCisjaW5jbHVkZSAidHJlZS5oIgorI2luY2x1ZGUgInRyZWUtd2Fsay5oIgorI2luY2x1ZGUgImNhY2hlLXRyZWUuaCIKKyNpbmNsdWRlICJ1bnBhY2stdHJlZXMuaCIKKyNpbmNsdWRlICJwcm9ncmVzcy5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJhdHRyLmgiCisjaW5jbHVkZSAic3BsaXQtaW5kZXguaCIKKyNpbmNsdWRlICJkaXIuaCIKKworLyoKKyAqIEVycm9yIG1lc3NhZ2VzIGV4cGVjdGVkIGJ5IHNjcmlwdHMgb3V0IG9mIHBsdW1iaW5nIGNvbW1hbmRzIHN1Y2ggYXMKKyAqIHJlYWQtdHJlZS4gIE5vbi1zY3JpcHRlZCBQb3JjZWxhaW4gaXMgbm90IHJlcXVpcmVkIHRvIHVzZSB0aGVzZSBtZXNzYWdlcworICogYW5kIGluIGZhY3QgYXJlIGVuY291cmFnZWQgdG8gcmV3b3JkIHRoZW0gdG8gYmV0dGVyIHN1aXQgdGhlaXIgcGFydGljdWxhcgorICogc2l0dWF0aW9uIGJldHRlci4gIFNlZSBob3cgImdpdCBjaGVja291dCIgYW5kICJnaXQgbWVyZ2UiIHJlcGxhY2VzCisgKiB0aGVtIHVzaW5nIHNldHVwX3VucGFja190cmVlc19wb3JjZWxhaW4oKSwgZm9yIGV4YW1wbGUuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp1bnBhY2tfcGx1bWJpbmdfZXJyb3JzW05CX1VOUEFDS19UUkVFU19FUlJPUl9UWVBFU10gPSB7CisJLyogRVJST1JfV09VTERfT1ZFUldSSVRFICovCisJIkVudHJ5ICclcycgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgbWVyZ2UuIENhbm5vdCBtZXJnZS4iLAorCisJLyogRVJST1JfTk9UX1VQVE9EQVRFX0ZJTEUgKi8KKwkiRW50cnkgJyVzJyBub3QgdXB0b2RhdGUuIENhbm5vdCBtZXJnZS4iLAorCisJLyogRVJST1JfTk9UX1VQVE9EQVRFX0RJUiAqLworCSJVcGRhdGluZyAnJXMnIHdvdWxkIGxvc2UgdW50cmFja2VkIGZpbGVzIGluIGl0IiwKKworCS8qIEVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX09WRVJXUklUVEVOICovCisJIlVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZSAnJXMnIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlLiIsCisKKwkvKiBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9SRU1PVkVEICovCisJIlVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZSAnJXMnIHdvdWxkIGJlIHJlbW92ZWQgYnkgbWVyZ2UuIiwKKworCS8qIEVSUk9SX0JJTkRfT1ZFUkxBUCAqLworCSJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiIsCisKKwkvKiBFUlJPUl9TUEFSU0VfTk9UX1VQVE9EQVRFX0ZJTEUgKi8KKwkiRW50cnkgJyVzJyBub3QgdXB0b2RhdGUuIENhbm5vdCB1cGRhdGUgc3BhcnNlIGNoZWNrb3V0LiIsCisKKwkvKiBFUlJPUl9XT1VMRF9MT1NFX09SUEhBTkVEX09WRVJXUklUVEVOICovCisJIldvcmtpbmcgdHJlZSBmaWxlICclcycgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgc3BhcnNlIGNoZWNrb3V0IHVwZGF0ZS4iLAorCisJLyogRVJST1JfV09VTERfTE9TRV9PUlBIQU5FRF9SRU1PVkVEICovCisJIldvcmtpbmcgdHJlZSBmaWxlICclcycgd291bGQgYmUgcmVtb3ZlZCBieSBzcGFyc2UgY2hlY2tvdXQgdXBkYXRlLiIsCit9OworCisjZGVmaW5lIEVSUk9STVNHKG8sdHlwZSkgXAorCSggKChvKSAmJiAobyktPm1zZ3NbKHR5cGUpXSkgXAorCSAgPyAoKG8pLT5tc2dzWyh0eXBlKV0pICAgICAgXAorCSAgOiAodW5wYWNrX3BsdW1iaW5nX2Vycm9yc1sodHlwZSldKSApCisKK3ZvaWQgc2V0dXBfdW5wYWNrX3RyZWVzX3BvcmNlbGFpbihzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdHMsCisJCQkJICBjb25zdCBjaGFyICpjbWQpCit7CisJaW50IGk7CisJY29uc3QgY2hhciAqKm1zZ3MgPSBvcHRzLT5tc2dzOworCWNvbnN0IGNoYXIgKm1zZzsKKwljb25zdCBjaGFyICpjbWQyID0gc3RyY21wKGNtZCwgImNoZWNrb3V0IikgPyBjbWQgOiAic3dpdGNoIGJyYW5jaGVzIjsKKworCWlmIChhZHZpY2VfY29tbWl0X2JlZm9yZV9tZXJnZSkKKwkJbXNnID0gIllvdXIgbG9jYWwgY2hhbmdlcyB0byB0aGUgZm9sbG93aW5nIGZpbGVzIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5ICVzOlxuJSVzIgorCQkJIlBsZWFzZSwgY29tbWl0IHlvdXIgY2hhbmdlcyBvciBzdGFzaCB0aGVtIGJlZm9yZSB5b3UgY2FuICVzLiI7CisJZWxzZQorCQltc2cgPSAiWW91ciBsb2NhbCBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcgZmlsZXMgd291bGQgYmUgb3ZlcndyaXR0ZW4gYnkgJXM6XG4lJXMiOworCW1zZ3NbRVJST1JfV09VTERfT1ZFUldSSVRFXSA9IG1zZ3NbRVJST1JfTk9UX1VQVE9EQVRFX0ZJTEVdID0KKwkJeHN0cmZtdChtc2csIGNtZCwgY21kMik7CisKKwltc2dzW0VSUk9SX05PVF9VUFRPREFURV9ESVJdID0KKwkJIlVwZGF0aW5nIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3JpZXMgd291bGQgbG9zZSB1bnRyYWNrZWQgZmlsZXMgaW4gaXQ6XG4lcyI7CisKKwlpZiAoYWR2aWNlX2NvbW1pdF9iZWZvcmVfbWVyZ2UpCisJCW1zZyA9ICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgJXMgYnkgJXM6XG4lJXMiCisJCQkiUGxlYXNlIG1vdmUgb3IgcmVtb3ZlIHRoZW0gYmVmb3JlIHlvdSBjYW4gJXMuIjsKKwllbHNlCisJCW1zZyA9ICJUaGUgZm9sbG93aW5nIHVudHJhY2tlZCB3b3JraW5nIHRyZWUgZmlsZXMgd291bGQgYmUgJXMgYnkgJXM6XG4lJXMiOworCisJbXNnc1tFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9SRU1PVkVEXSA9IHhzdHJmbXQobXNnLCAicmVtb3ZlZCIsIGNtZCwgY21kMik7CisJbXNnc1tFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9PVkVSV1JJVFRFTl0gPSB4c3RyZm10KG1zZywgIm92ZXJ3cml0dGVuIiwgY21kLCBjbWQyKTsKKworCS8qCisJICogU3BlY2lhbCBjYXNlOiBFUlJPUl9CSU5EX09WRVJMQVAgcmVmZXJzIHRvIGEgcGFpciBvZiBwYXRocywgd2UKKwkgKiBjYW5ub3QgZWFzaWx5IGRpc3BsYXkgaXQgYXMgYSBsaXN0LgorCSAqLworCW1zZ3NbRVJST1JfQklORF9PVkVSTEFQXSA9ICJFbnRyeSAnJXMnIG92ZXJsYXBzIHdpdGggJyVzJy4gIENhbm5vdCBiaW5kLiI7CisKKwltc2dzW0VSUk9SX1NQQVJTRV9OT1RfVVBUT0RBVEVfRklMRV0gPQorCQkiQ2Fubm90IHVwZGF0ZSBzcGFyc2UgY2hlY2tvdXQ6IHRoZSBmb2xsb3dpbmcgZW50cmllcyBhcmUgbm90IHVwLXRvLWRhdGU6XG4lcyI7CisJbXNnc1tFUlJPUl9XT1VMRF9MT1NFX09SUEhBTkVEX09WRVJXUklUVEVOXSA9CisJCSJUaGUgZm9sbG93aW5nIFdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSBzcGFyc2UgY2hlY2tvdXQgdXBkYXRlOlxuJXMiOworCW1zZ3NbRVJST1JfV09VTERfTE9TRV9PUlBIQU5FRF9SRU1PVkVEXSA9CisJCSJUaGUgZm9sbG93aW5nIFdvcmtpbmcgdHJlZSBmaWxlcyB3b3VsZCBiZSByZW1vdmVkIGJ5IHNwYXJzZSBjaGVja291dCB1cGRhdGU6XG4lcyI7CisKKwlvcHRzLT5zaG93X2FsbF9lcnJvcnMgPSAxOworCS8qIHJlamVjdGVkIHBhdGhzIG1heSBub3QgaGF2ZSBhIHN0YXRpYyBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvcHRzLT51bnBhY2tfcmVqZWN0cyk7IGkrKykKKwkJb3B0cy0+dW5wYWNrX3JlamVjdHNbaV0uc3RyZHVwX3N0cmluZ3MgPSAxOworfQorCitzdGF0aWMgaW50IGRvX2FkZF9lbnRyeShzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sIHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCWNsZWFyIHw9IENFX0hBU0hFRDsKKworCWlmIChzZXQgJiBDRV9SRU1PVkUpCisJCXNldCB8PSBDRV9XVF9SRU1PVkU7CisKKwljZS0+Y2VfZmxhZ3MgPSAoY2UtPmNlX2ZsYWdzICYgfmNsZWFyKSB8IHNldDsKKwlyZXR1cm4gYWRkX2luZGV4X2VudHJ5KCZvLT5yZXN1bHQsIGNlLAorCQkJICAgICAgIEFERF9DQUNIRV9PS19UT19BREQgfCBBRERfQ0FDSEVfT0tfVE9fUkVQTEFDRSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfZW50cnkgKmR1cF9lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlKQoreworCXVuc2lnbmVkIGludCBzaXplID0gY2Vfc2l6ZShjZSk7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpuZXcgPSB4bWFsbG9jKHNpemUpOworCisJbWVtY3B5KG5ldywgY2UsIHNpemUpOworCXJldHVybiBuZXc7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9lbnRyeShzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sCisJCSAgICAgIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCSAgICAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKK3sKKwlkb19hZGRfZW50cnkobywgZHVwX2VudHJ5KGNlKSwgc2V0LCBjbGVhcik7Cit9CisKKy8qCisgKiBhZGQgZXJyb3IgbWVzc2FnZXMgb24gcGF0aCA8cGF0aD4KKyAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgPGU+IHdpdGggdGhlIG1lc3NhZ2UgPG1zZz4KKyAqIGluZGljYXRpbmcgaWYgaXQgc2hvdWxkIGJlIGRpc3BsYXkgaW4gcG9yY2VsYWluIG9yIG5vdAorICovCitzdGF0aWMgaW50IGFkZF9yZWplY3RlZF9wYXRoKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywKKwkJCSAgICAgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZSwKKwkJCSAgICAgY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpZiAoIW8tPnNob3dfYWxsX2Vycm9ycykKKwkJcmV0dXJuIGVycm9yKEVSUk9STVNHKG8sIGUpLCBwYXRoKTsKKworCS8qCisJICogT3RoZXJ3aXNlLCBpbnNlcnQgaW4gYSBsaXN0IGZvciBmdXR1cmUgZGlzcGxheSBieQorCSAqIGRpc3BsYXlfZXJyb3JfbXNncygpCisJICovCisJc3RyaW5nX2xpc3RfYXBwZW5kKCZvLT51bnBhY2tfcmVqZWN0c1tlXSwgcGF0aCk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogZGlzcGxheSBhbGwgdGhlIGVycm9yIG1lc3NhZ2VzIHN0b3JlZCBpbiBhIG5pY2Ugd2F5CisgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfZXJyb3JfbXNncyhzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IGUsIGk7CisJaW50IHNvbWV0aGluZ19kaXNwbGF5ZWQgPSAwOworCWZvciAoZSA9IDA7IGUgPCBOQl9VTlBBQ0tfVFJFRVNfRVJST1JfVFlQRVM7IGUrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnJlamVjdHMgPSAmby0+dW5wYWNrX3JlamVjdHNbZV07CisJCWlmIChyZWplY3RzLT5uciA+IDApIHsKKwkJCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCQkJc29tZXRoaW5nX2Rpc3BsYXllZCA9IDE7CisJCQlmb3IgKGkgPSAwOyBpIDwgcmVqZWN0cy0+bnI7IGkrKykKKwkJCQlzdHJidWZfYWRkZigmcGF0aCwgIlx0JXNcbiIsIHJlamVjdHMtPml0ZW1zW2ldLnN0cmluZyk7CisJCQllcnJvcihFUlJPUk1TRyhvLCBlKSwgcGF0aC5idWYpOworCQkJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCQl9CisJCXN0cmluZ19saXN0X2NsZWFyKHJlamVjdHMsIDApOworCX0KKwlpZiAoc29tZXRoaW5nX2Rpc3BsYXllZCkKKwkJZnByaW50ZihzdGRlcnIsICJBYm9ydGluZ1xuIik7Cit9CisKKy8qCisgKiBVbmxpbmsgdGhlIGxhc3QgY29tcG9uZW50IGFuZCBzY2hlZHVsZSB0aGUgbGVhZGluZyBkaXJlY3RvcmllcyBmb3IKKyAqIHJlbW92YWwsIHN1Y2ggdGhhdCBlbXB0eSBkaXJlY3RvcmllcyBnZXQgcmVtb3ZlZC4KKyAqLworc3RhdGljIHZvaWQgdW5saW5rX2VudHJ5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJaWYgKCFjaGVja19sZWFkaW5nX3BhdGgoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpKSkKKwkJcmV0dXJuOworCWlmIChyZW1vdmVfb3Jfd2FybihjZS0+Y2VfbW9kZSwgY2UtPm5hbWUpKQorCQlyZXR1cm47CisJc2NoZWR1bGVfZGlyX2Zvcl9yZW1vdmFsKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hlY2tvdXQgc3RhdGU7CitzdGF0aWMgaW50IGNoZWNrX3VwZGF0ZXMoc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXVuc2lnbmVkIGNudCA9IDAsIHRvdGFsID0gMDsKKwlzdHJ1Y3QgcHJvZ3Jlc3MgKnByb2dyZXNzID0gTlVMTDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4ID0gJm8tPnJlc3VsdDsKKwlpbnQgaTsKKwlpbnQgZXJycyA9IDA7CisKKwlpZiAoby0+dXBkYXRlICYmIG8tPnZlcmJvc2VfdXBkYXRlKSB7CisJCWZvciAodG90YWwgPSBjbnQgPSAwOyBjbnQgPCBpbmRleC0+Y2FjaGVfbnI7IGNudCsrKSB7CisJCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2NudF07CisJCQlpZiAoY2UtPmNlX2ZsYWdzICYgKENFX1VQREFURSB8IENFX1dUX1JFTU9WRSkpCisJCQkJdG90YWwrKzsKKwkJfQorCisJCXByb2dyZXNzID0gc3RhcnRfcHJvZ3Jlc3NfZGVsYXkoXygiQ2hlY2tpbmcgb3V0IGZpbGVzIiksCisJCQkJCQl0b3RhbCwgNTAsIDEpOworCQljbnQgPSAwOworCX0KKworCWlmIChvLT51cGRhdGUpCisJCWdpdF9hdHRyX3NldF9kaXJlY3Rpb24oR0lUX0FUVFJfQ0hFQ0tPVVQsICZvLT5yZXN1bHQpOworCWZvciAoaSA9IDA7IGkgPCBpbmRleC0+Y2FjaGVfbnI7IGkrKykgeworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2ldOworCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9XVF9SRU1PVkUpIHsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrY250KTsKKwkJCWlmIChvLT51cGRhdGUgJiYgIW8tPmRyeV9ydW4pCisJCQkJdW5saW5rX2VudHJ5KGNlKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCXJlbW92ZV9tYXJrZWRfY2FjaGVfZW50cmllcygmby0+cmVzdWx0KTsKKwlyZW1vdmVfc2NoZWR1bGVkX2RpcnMoKTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmRleC0+Y2FjaGVfbnI7IGkrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gaW5kZXgtPmNhY2hlW2ldOworCisJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9VUERBVEUpIHsKKwkJCWlmIChjZS0+Y2VfZmxhZ3MgJiBDRV9XVF9SRU1PVkUpCisJCQkJZGllKCJCVUc6IGJvdGggdXBkYXRlIGFuZCBkZWxldGUgZmxhZ3MgYXJlIHNldCBvbiAlcyIsCisJCQkJICAgIGNlLT5uYW1lKTsKKwkJCWRpc3BsYXlfcHJvZ3Jlc3MocHJvZ3Jlc3MsICsrY250KTsKKwkJCWNlLT5jZV9mbGFncyAmPSB+Q0VfVVBEQVRFOworCQkJaWYgKG8tPnVwZGF0ZSAmJiAhby0+ZHJ5X3J1bikgeworCQkJCWVycnMgfD0gY2hlY2tvdXRfZW50cnkoY2UsICZzdGF0ZSwgTlVMTCk7CisJCQl9CisJCX0KKwl9CisJc3RvcF9wcm9ncmVzcygmcHJvZ3Jlc3MpOworCWlmIChvLT51cGRhdGUpCisJCWdpdF9hdHRyX3NldF9kaXJlY3Rpb24oR0lUX0FUVFJfQ0hFQ0tJTiwgTlVMTCk7CisJcmV0dXJuIGVycnMgIT0gMDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfdXB0b2RhdGVfc3BhcnNlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworc3RhdGljIGludCB2ZXJpZnlfYWJzZW50X3NwYXJzZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCWVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzLAorCQkJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7CisKK3N0YXRpYyBpbnQgYXBwbHlfc3BhcnNlX2NoZWNrb3V0KHN0cnVjdCBpbmRleF9zdGF0ZSAqaXN0YXRlLAorCQkJCSBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IHdhc19za2lwX3dvcmt0cmVlID0gY2Vfc2tpcF93b3JrdHJlZShjZSk7CisKKwlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfTkVXX1NLSVBfV09SS1RSRUUpCisJCWNlLT5jZV9mbGFncyB8PSBDRV9TS0lQX1dPUktUUkVFOworCWVsc2UKKwkJY2UtPmNlX2ZsYWdzICY9IH5DRV9TS0lQX1dPUktUUkVFOworCWlmICh3YXNfc2tpcF93b3JrdHJlZSAhPSBjZV9za2lwX3dvcmt0cmVlKGNlKSkgeworCQljZS0+Y2VfZmxhZ3MgfD0gQ0VfVVBEQVRFX0lOX0JBU0U7CisJCWlzdGF0ZS0+Y2FjaGVfY2hhbmdlZCB8PSBDRV9FTlRSWV9DSEFOR0VEOworCX0KKworCS8qCisJICogaWYgKCF3YXNfc2tpcF93b3JrdHJlZSAmJiAhY2Vfc2tpcF93b3JrdHJlZSgpKSB7CisJICoJVGhpcyBpcyBwZXJmZWN0bHkgbm9ybWFsLiBNb3ZlIG9uOworCSAqIH0KKwkgKi8KKworCS8qCisJICogTWVyZ2Ugc3RyYXRlZ2llcyBtYXkgc2V0IENFX1VQREFURXxDRV9SRU1PVkUgb3V0c2lkZSBjaGVja291dAorCSAqIGFyZWEgYXMgYSByZXN1bHQgb2YgY2Vfc2tpcF93b3JrdHJlZSgpIHNob3J0Y3V0cyBpbgorCSAqIHZlcmlmeV9hYnNlbnQoKSBhbmQgdmVyaWZ5X3VwdG9kYXRlKCkuCisJICogTWFrZSBzdXJlIHRoZXkgZG9uJ3QgbW9kaWZ5IHdvcmt0cmVlIGlmIHRoZXkgYXJlIGFscmVhZHkKKwkgKiBvdXRzaWRlIGNoZWNrb3V0IGFyZWEKKwkgKi8KKwlpZiAod2FzX3NraXBfd29ya3RyZWUgJiYgY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJY2UtPmNlX2ZsYWdzICY9IH5DRV9VUERBVEU7CisKKwkJLyoKKwkJICogQnkgZGVmYXVsdCwgd2hlbiBDRV9SRU1PVkUgaXMgb24sIENFX1dUX1JFTU9WRSBpcyBhbHNvCisJCSAqIG9uIHRvIGdldCB0aGF0IGZpbGUgcmVtb3ZlZCBmcm9tIGJvdGggaW5kZXggYW5kIHdvcmt0cmVlLgorCQkgKiBJZiB0aGF0IGZpbGUgaXMgYWxyZWFkeSBvdXRzaWRlIHdvcmt0cmVlIGFyZWEsIGRvbid0CisJCSAqIGJvdGhlciByZW1vdmUgaXQuCisJCSAqLworCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfUkVNT1ZFKQorCQkJY2UtPmNlX2ZsYWdzICY9IH5DRV9XVF9SRU1PVkU7CisJfQorCisJaWYgKCF3YXNfc2tpcF93b3JrdHJlZSAmJiBjZV9za2lwX3dvcmt0cmVlKGNlKSkgeworCQkvKgorCQkgKiBJZiBDRV9VUERBVEUgaXMgc2V0LCB2ZXJpZnlfdXB0b2RhdGUoKSBtdXN0IGJlIGNhbGxlZCBhbHJlYWR5CisJCSAqIGFsc28gc3RhdCBpbmZvIG1heSBoYXZlIGxvc3QgYWZ0ZXIgbWVyZ2VkX2VudHJ5KCkgc28gY2FsbGluZworCQkgKiB2ZXJpZnlfdXB0b2RhdGUoKSBhZ2FpbiBtYXkgZmFpbAorCQkgKi8KKwkJaWYgKCEoY2UtPmNlX2ZsYWdzICYgQ0VfVVBEQVRFKSAmJiB2ZXJpZnlfdXB0b2RhdGVfc3BhcnNlKGNlLCBvKSkKKwkJCXJldHVybiAtMTsKKwkJY2UtPmNlX2ZsYWdzIHw9IENFX1dUX1JFTU9WRTsKKwkJY2UtPmNlX2ZsYWdzICY9IH5DRV9VUERBVEU7CisJfQorCWlmICh3YXNfc2tpcF93b3JrdHJlZSAmJiAhY2Vfc2tpcF93b3JrdHJlZShjZSkpIHsKKwkJaWYgKHZlcmlmeV9hYnNlbnRfc3BhcnNlKGNlLCBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9PVkVSV1JJVFRFTiwgbykpCisJCQlyZXR1cm4gLTE7CisJCWNlLT5jZV9mbGFncyB8PSBDRV9VUERBVEU7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjYWxsX3VucGFja19mbihjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCQkJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IHJldCA9IG8tPmZuKHNyYywgbyk7CisJaWYgKHJldCA+IDApCisJCXJldCA9IDA7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbWFya19jZV91c2VkKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwljZS0+Y2VfZmxhZ3MgfD0gQ0VfVU5QQUNLRUQ7CisKKwlpZiAoby0+Y2FjaGVfYm90dG9tIDwgby0+c3JjX2luZGV4LT5jYWNoZV9uciAmJgorCSAgICBvLT5zcmNfaW5kZXgtPmNhY2hlW28tPmNhY2hlX2JvdHRvbV0gPT0gY2UpIHsKKwkJaW50IGJvdHRvbSA9IG8tPmNhY2hlX2JvdHRvbTsKKwkJd2hpbGUgKGJvdHRvbSA8IG8tPnNyY19pbmRleC0+Y2FjaGVfbnIgJiYKKwkJICAgICAgIG8tPnNyY19pbmRleC0+Y2FjaGVbYm90dG9tXS0+Y2VfZmxhZ3MgJiBDRV9VTlBBQ0tFRCkKKwkJCWJvdHRvbSsrOworCQlvLT5jYWNoZV9ib3R0b20gPSBib3R0b207CisJfQorfQorCitzdGF0aWMgdm9pZCBtYXJrX2FsbF9jZV91bnVzZWQoc3RydWN0IGluZGV4X3N0YXRlICppbmRleCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5kZXgtPmNhY2hlX25yOyBpKyspCisJCWluZGV4LT5jYWNoZVtpXS0+Y2VfZmxhZ3MgJj0gfihDRV9VTlBBQ0tFRCB8IENFX0FEREVEIHwgQ0VfTkVXX1NLSVBfV09SS1RSRUUpOworfQorCitzdGF0aWMgaW50IGxvY2F0ZV9pbl9zcmNfaW5kZXgoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IG8tPnNyY19pbmRleDsKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGluZGV4LCBjZS0+bmFtZSwgbGVuKTsKKwlpZiAocG9zIDwgMCkKKwkJcG9zID0gLTEgLSBwb3M7CisJcmV0dXJuIHBvczsKK30KKworLyoKKyAqIFdlIGNhbGwgdW5wYWNrX2luZGV4X2VudHJ5KCkgd2l0aCBhbiB1bm1lcmdlZCBjYWNoZSBlbnRyeQorICogb25seSBpbiBkaWZmLWluZGV4LCBhbmQgaXQgd2FudHMgYSBzaW5nbGUgY2FsbGJhY2suICBTa2lwCisgKiB0aGUgb3RoZXIgdW5tZXJnZWQgZW50cnkgd2l0aCB0aGUgc2FtZSBuYW1lLgorICovCitzdGF0aWMgdm9pZCBtYXJrX2NlX3VzZWRfc2FtZV9uYW1lKHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXN0cnVjdCBpbmRleF9zdGF0ZSAqaW5kZXggPSBvLT5zcmNfaW5kZXg7CisJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UpOworCWludCBwb3M7CisKKwlmb3IgKHBvcyA9IGxvY2F0ZV9pbl9zcmNfaW5kZXgoY2UsIG8pOyBwb3MgPCBpbmRleC0+Y2FjaGVfbnI7IHBvcysrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqbmV4dCA9IGluZGV4LT5jYWNoZVtwb3NdOworCQlpZiAobGVuICE9IGNlX25hbWVsZW4obmV4dCkgfHwKKwkJICAgIG1lbWNtcChjZS0+bmFtZSwgbmV4dC0+bmFtZSwgbGVuKSkKKwkJCWJyZWFrOworCQltYXJrX2NlX3VzZWQobmV4dCwgbyk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNhY2hlX2VudHJ5ICpuZXh0X2NhY2hlX2VudHJ5KHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwljb25zdCBzdHJ1Y3QgaW5kZXhfc3RhdGUgKmluZGV4ID0gby0+c3JjX2luZGV4OworCWludCBwb3MgPSBvLT5jYWNoZV9ib3R0b207CisKKwl3aGlsZSAocG9zIDwgaW5kZXgtPmNhY2hlX25yKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbcG9zXTsKKwkJaWYgKCEoY2UtPmNlX2ZsYWdzICYgQ0VfVU5QQUNLRUQpKQorCQkJcmV0dXJuIGNlOworCQlwb3MrKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9zYW1lX3VubWVyZ2VkKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IG8tPnNyY19pbmRleDsKKwlpbnQgbGVuID0gY2VfbmFtZWxlbihjZSk7CisJaW50IHBvcyA9IGluZGV4X25hbWVfcG9zKGluZGV4LCBjZS0+bmFtZSwgbGVuKTsKKworCWlmICgwIDw9IHBvcykKKwkJZGllKCJwcm9ncmFtbWluZyBlcnJvciBpbiBhIGNhbGxlciBvZiBtYXJrX2NlX3VzZWRfc2FtZV9uYW1lIik7CisJZm9yIChwb3MgPSAtcG9zIC0gMTsgcG9zIDwgaW5kZXgtPmNhY2hlX25yOyBwb3MrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKm5leHQgPSBpbmRleC0+Y2FjaGVbcG9zXTsKKwkJaWYgKGxlbiAhPSBjZV9uYW1lbGVuKG5leHQpIHx8CisJCSAgICBtZW1jbXAoY2UtPm5hbWUsIG5leHQtPm5hbWUsIGxlbikpCisJCQlicmVhazsKKwkJYWRkX2VudHJ5KG8sIG5leHQsIDAsIDApOworCQltYXJrX2NlX3VzZWQobmV4dCwgbyk7CisJfQorfQorCitzdGF0aWMgaW50IHVucGFja19pbmRleF9lbnRyeShzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjW01BWF9VTlBBQ0tfVFJFRVMgKyAxXSA9IHsgTlVMTCwgfTsKKwlpbnQgcmV0OworCisJc3JjWzBdID0gY2U7CisKKwltYXJrX2NlX3VzZWQoY2UsIG8pOworCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJaWYgKG8tPnNraXBfdW5tZXJnZWQpIHsKKwkJCWFkZF9lbnRyeShvLCBjZSwgMCwgMCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXQgPSBjYWxsX3VucGFja19mbihzcmMsIG8pOworCWlmIChjZV9zdGFnZShjZSkpCisJCW1hcmtfY2VfdXNlZF9zYW1lX25hbWUoY2UsIG8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmluZF9jYWNoZV9wb3Moc3RydWN0IHRyYXZlcnNlX2luZm8gKiwgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKik7CisKK3N0YXRpYyB2b2lkIHJlc3RvcmVfY2FjaGVfYm90dG9tKHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBpbnQgYm90dG9tKQoreworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyA9IGluZm8tPmRhdGE7CisKKwlpZiAoby0+ZGlmZl9pbmRleF9jYWNoZWQpCisJCXJldHVybjsKKwlvLT5jYWNoZV9ib3R0b20gPSBib3R0b207Cit9CisKK3N0YXRpYyBpbnQgc3dpdGNoX2NhY2hlX2JvdHRvbShzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCWludCByZXQsIHBvczsKKworCWlmIChvLT5kaWZmX2luZGV4X2NhY2hlZCkKKwkJcmV0dXJuIDA7CisJcmV0ID0gby0+Y2FjaGVfYm90dG9tOworCXBvcyA9IGZpbmRfY2FjaGVfcG9zKGluZm8tPnByZXYsICZpbmZvLT5uYW1lKTsKKworCWlmIChwb3MgPCAtMSkKKwkJby0+Y2FjaGVfYm90dG9tID0gLTIgLSBwb3M7CisJZWxzZSBpZiAocG9zIDwgMCkKKwkJby0+Y2FjaGVfYm90dG9tID0gby0+c3JjX2luZGV4LT5jYWNoZV9ucjsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRyYXZlcnNlX3RyZWVzX3JlY3Vyc2l2ZShpbnQgbiwgdW5zaWduZWQgbG9uZyBkaXJtYXNrLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGRmX2NvbmZsaWN0cywKKwkJCQkgICAgc3RydWN0IG5hbWVfZW50cnkgKm5hbWVzLAorCQkJCSAgICBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgaSwgcmV0LCBib3R0b207CisJc3RydWN0IHRyZWVfZGVzYyB0W01BWF9VTlBBQ0tfVFJFRVNdOworCXZvaWQgKmJ1ZltNQVhfVU5QQUNLX1RSRUVTXTsKKwlzdHJ1Y3QgdHJhdmVyc2VfaW5mbyBuZXdpbmZvOworCXN0cnVjdCBuYW1lX2VudHJ5ICpwOworCisJcCA9IG5hbWVzOworCXdoaWxlICghcC0+bW9kZSkKKwkJcCsrOworCisJbmV3aW5mbyA9ICppbmZvOworCW5ld2luZm8ucHJldiA9IGluZm87CisJbmV3aW5mby5wYXRoc3BlYyA9IGluZm8tPnBhdGhzcGVjOworCW5ld2luZm8ubmFtZSA9ICpwOworCW5ld2luZm8ucGF0aGxlbiArPSB0cmVlX2VudHJ5X2xlbihwKSArIDE7CisJbmV3aW5mby5kZl9jb25mbGljdHMgfD0gZGZfY29uZmxpY3RzOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKywgZGlybWFzayA+Pj0gMSkgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICpzaGExID0gTlVMTDsKKwkJaWYgKGRpcm1hc2sgJiAxKQorCQkJc2hhMSA9IG5hbWVzW2ldLnNoYTE7CisJCWJ1ZltpXSA9IGZpbGxfdHJlZV9kZXNjcmlwdG9yKHQraSwgc2hhMSk7CisJfQorCisJYm90dG9tID0gc3dpdGNoX2NhY2hlX2JvdHRvbSgmbmV3aW5mbyk7CisJcmV0ID0gdHJhdmVyc2VfdHJlZXMobiwgdCwgJm5ld2luZm8pOworCXJlc3RvcmVfY2FjaGVfYm90dG9tKCZuZXdpbmZvLCBib3R0b20pOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJZnJlZShidWZbaV0pOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENvbXBhcmUgdGhlIHRyYXZlcnNlLXBhdGggdG8gdGhlIGNhY2hlIGVudHJ5IHdpdGhvdXQgYWN0dWFsbHkKKyAqIGhhdmluZyB0byBnZW5lcmF0ZSB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJhdmVyc2UKKyAqIHBhdGguCisgKgorICogTk9URSEgVGhpcyAqb25seSogY29tcGFyZXMgdXAgdG8gdGhlIHNpemUgb2YgdGhlIHRyYXZlcnNlIHBhdGgKKyAqIGl0c2VsZiAtIHRoZSBjYWxsZXIgbmVlZHMgdG8gZG8gdGhlIGZpbmFsIGNoZWNrIGZvciB0aGUgY2FjaGUKKyAqIGVudHJ5IGhhdmluZyBtb3JlIGRhdGEgYXQgdGhlIGVuZCEKKyAqLworc3RhdGljIGludCBkb19jb21wYXJlX2VudHJ5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsIGNvbnN0IHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbikKK3sKKwlpbnQgbGVuLCBwYXRobGVuLCBjZV9sZW47CisJY29uc3QgY2hhciAqY2VfbmFtZTsKKworCWlmIChpbmZvLT5wcmV2KSB7CisJCWludCBjbXAgPSBkb19jb21wYXJlX2VudHJ5KGNlLCBpbmZvLT5wcmV2LCAmaW5mby0+bmFtZSk7CisJCWlmIChjbXApCisJCQlyZXR1cm4gY21wOworCX0KKwlwYXRobGVuID0gaW5mby0+cGF0aGxlbjsKKwljZV9sZW4gPSBjZV9uYW1lbGVuKGNlKTsKKworCS8qIElmIGNlX2xlbiA8IHBhdGhsZW4gdGhlbiB3ZSBtdXN0IGhhdmUgcHJldmlvdXNseSBoaXQgIm5hbWUgPT0gZGlyZWN0b3J5IiBlbnRyeSAqLworCWlmIChjZV9sZW4gPCBwYXRobGVuKQorCQlyZXR1cm4gLTE7CisKKwljZV9sZW4gLT0gcGF0aGxlbjsKKwljZV9uYW1lID0gY2UtPm5hbWUgKyBwYXRobGVuOworCisJbGVuID0gdHJlZV9lbnRyeV9sZW4obik7CisJcmV0dXJuIGRmX25hbWVfY29tcGFyZShjZV9uYW1lLCBjZV9sZW4sIFNfSUZSRUcsIG4tPnBhdGgsIGxlbiwgbi0+bW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgY29tcGFyZV9lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm4pCit7CisJaW50IGNtcCA9IGRvX2NvbXBhcmVfZW50cnkoY2UsIGluZm8sIG4pOworCWlmIChjbXApCisJCXJldHVybiBjbXA7CisKKwkvKgorCSAqIEV2ZW4gaWYgdGhlIGJlZ2lubmluZyBjb21wYXJlZCBpZGVudGljYWxseSwgdGhlIGNlIHNob3VsZAorCSAqIGNvbXBhcmUgYXMgYmlnZ2VyIHRoYW4gYSBkaXJlY3RvcnkgbGVhZGluZyB1cCB0byBpdCEKKwkgKi8KKwlyZXR1cm4gY2VfbmFtZWxlbihjZSkgPiB0cmF2ZXJzZV9wYXRoX2xlbihpbmZvLCBuKTsKK30KKworc3RhdGljIGludCBjZV9pbl90cmF2ZXJzZV9wYXRoKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCit7CisJaWYgKCFpbmZvLT5wcmV2KQorCQlyZXR1cm4gMTsKKwlpZiAoZG9fY29tcGFyZV9lbnRyeShjZSwgaW5mby0+cHJldiwgJmluZm8tPm5hbWUpKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIElmIGNlIChibG9iKSBpcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBwYXRoICh3aGljaCBpcyBhIHRyZWUKKwkgKiB3ZSB3aWxsIGJlIGRlc2NlbmRpbmcgaW50byksIGl0IHdvbid0IGJlIGluc2lkZSBpdC4KKwkgKi8KKwlyZXR1cm4gKGluZm8tPnBhdGhsZW4gPCBjZV9uYW1lbGVuKGNlKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNyZWF0ZV9jZV9lbnRyeShjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm4sIGludCBzdGFnZSkKK3sKKwlpbnQgbGVuID0gdHJhdmVyc2VfcGF0aF9sZW4oaW5mbywgbik7CisJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IHhjYWxsb2MoMSwgY2FjaGVfZW50cnlfc2l6ZShsZW4pKTsKKworCWNlLT5jZV9tb2RlID0gY3JlYXRlX2NlX21vZGUobi0+bW9kZSk7CisJY2UtPmNlX2ZsYWdzID0gY3JlYXRlX2NlX2ZsYWdzKHN0YWdlKTsKKwljZS0+Y2VfbmFtZWxlbiA9IGxlbjsKKwloYXNoY3B5KGNlLT5zaGExLCBuLT5zaGExKTsKKwltYWtlX3RyYXZlcnNlX3BhdGgoY2UtPm5hbWUsIGluZm8sIG4pOworCisJcmV0dXJuIGNlOworfQorCitzdGF0aWMgaW50IHVucGFja19ub25kaXJlY3RvcmllcyhpbnQgbiwgdW5zaWduZWQgbG9uZyBtYXNrLAorCQkJCSB1bnNpZ25lZCBsb25nIGRpcm1hc2ssCisJCQkJIHN0cnVjdCBjYWNoZV9lbnRyeSAqKnNyYywKKwkJCQkgY29uc3Qgc3RydWN0IG5hbWVfZW50cnkgKm5hbWVzLAorCQkJCSBjb25zdCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCXVuc2lnbmVkIGxvbmcgY29uZmxpY3RzID0gaW5mby0+ZGZfY29uZmxpY3RzIHwgZGlybWFzazsKKworCS8qIERvIHdlIGhhdmUgKm9ubHkqIGRpcmVjdG9yaWVzPyBOb3RoaW5nIHRvIGRvICovCisJaWYgKG1hc2sgPT0gZGlybWFzayAmJiAhc3JjWzBdKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogT2ssIHdlJ3ZlIGZpbGxlZCBpbiB1cCB0byBhbnkgcG90ZW50aWFsIGluZGV4IGVudHJ5IGluIHNyY1swXSwKKwkgKiBub3cgZG8gdGhlIHJlc3QuCisJICovCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpbnQgc3RhZ2U7CisJCXVuc2lnbmVkIGludCBiaXQgPSAxdWwgPDwgaTsKKwkJaWYgKGNvbmZsaWN0cyAmIGJpdCkgeworCQkJc3JjW2kgKyBvLT5tZXJnZV0gPSBvLT5kZl9jb25mbGljdF9lbnRyeTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghKG1hc2sgJiBiaXQpKQorCQkJY29udGludWU7CisJCWlmICghby0+bWVyZ2UpCisJCQlzdGFnZSA9IDA7CisJCWVsc2UgaWYgKGkgKyAxIDwgby0+aGVhZF9pZHgpCisJCQlzdGFnZSA9IDE7CisJCWVsc2UgaWYgKGkgKyAxID4gby0+aGVhZF9pZHgpCisJCQlzdGFnZSA9IDM7CisJCWVsc2UKKwkJCXN0YWdlID0gMjsKKwkJc3JjW2kgKyBvLT5tZXJnZV0gPSBjcmVhdGVfY2VfZW50cnkoaW5mbywgbmFtZXMgKyBpLCBzdGFnZSk7CisJfQorCisJaWYgKG8tPm1lcmdlKSB7CisJCWludCByYyA9IGNhbGxfdW5wYWNrX2ZuKChjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqKXNyYywKKwkJCQkJbyk7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBzcmNbaSArIG8tPm1lcmdlXTsKKwkJCWlmIChjZSAhPSBvLT5kZl9jb25mbGljdF9lbnRyeSkKKwkJCQlmcmVlKGNlKTsKKwkJfQorCQlyZXR1cm4gcmM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykKKwkJaWYgKHNyY1tpXSAmJiBzcmNbaV0gIT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCQlpZiAoZG9fYWRkX2VudHJ5KG8sIHNyY1tpXSwgMCwgMCkpCisJCQkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdW5wYWNrX2ZhaWxlZChzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8sIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJZGlzY2FyZF9pbmRleCgmby0+cmVzdWx0KTsKKwlpZiAoIW8tPmdlbnRseSAmJiAhby0+ZXhpdGluZ19lYXJseSkgeworCQlpZiAobWVzc2FnZSkKKwkJCXJldHVybiBlcnJvcigiJXMiLCBtZXNzYWdlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBUaGUgdHJlZSB0cmF2ZXJzYWwgaXMgbG9va2luZyBhdCBuYW1lIHAuICBJZiB3ZSBoYXZlIGEgbWF0Y2hpbmcgZW50cnksCisgKiByZXR1cm4gaXQuICBJZiBuYW1lIHAgaXMgYSBkaXJlY3RvcnkgaW4gdGhlIGluZGV4LCBkbyBub3QgcmV0dXJuCisgKiBhbnl0aGluZywgYXMgd2Ugd2lsbCB3YW50IHRvIG1hdGNoIGl0IHdoZW4gdGhlIHRyYXZlcnNhbCBkZXNjZW5kcyBpbnRvCisgKiB0aGUgZGlyZWN0b3J5LgorICovCitzdGF0aWMgaW50IGZpbmRfY2FjaGVfcG9zKHN0cnVjdCB0cmF2ZXJzZV9pbmZvICppbmZvLAorCQkJICBjb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqcCkKK3sKKwlpbnQgcG9zOworCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyA9IGluZm8tPmRhdGE7CisJc3RydWN0IGluZGV4X3N0YXRlICppbmRleCA9IG8tPnNyY19pbmRleDsKKwlpbnQgcGZ4bGVuID0gaW5mby0+cGF0aGxlbjsKKwlpbnQgcF9sZW4gPSB0cmVlX2VudHJ5X2xlbihwKTsKKworCWZvciAocG9zID0gby0+Y2FjaGVfYm90dG9tOyBwb3MgPCBpbmRleC0+Y2FjaGVfbnI7IHBvcysrKSB7CisJCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBpbmRleC0+Y2FjaGVbcG9zXTsKKwkJY29uc3QgY2hhciAqY2VfbmFtZSwgKmNlX3NsYXNoOworCQlpbnQgY21wLCBjZV9sZW47CisKKwkJaWYgKGNlLT5jZV9mbGFncyAmIENFX1VOUEFDS0VEKSB7CisJCQkvKgorCQkJICogY2FjaGVfYm90dG9tIGVudHJ5IGlzIGFscmVhZHkgdW5wYWNrZWQsIHNvCisJCQkgKiB3ZSBjYW4gbmV2ZXIgbWF0Y2ggaXQ7IGRvbid0IGNoZWNrIGl0CisJCQkgKiBhZ2Fpbi4KKwkJCSAqLworCQkJaWYgKHBvcyA9PSBvLT5jYWNoZV9ib3R0b20pCisJCQkJKytvLT5jYWNoZV9ib3R0b207CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWNlX2luX3RyYXZlcnNlX3BhdGgoY2UsIGluZm8pKQorCQkJY29udGludWU7CisJCWNlX25hbWUgPSBjZS0+bmFtZSArIHBmeGxlbjsKKwkJY2Vfc2xhc2ggPSBzdHJjaHIoY2VfbmFtZSwgJy8nKTsKKwkJaWYgKGNlX3NsYXNoKQorCQkJY2VfbGVuID0gY2Vfc2xhc2ggLSBjZV9uYW1lOworCQllbHNlCisJCQljZV9sZW4gPSBjZV9uYW1lbGVuKGNlKSAtIHBmeGxlbjsKKwkJY21wID0gbmFtZV9jb21wYXJlKHAtPnBhdGgsIHBfbGVuLCBjZV9uYW1lLCBjZV9sZW4pOworCQkvKgorCQkgKiBFeGFjdCBtYXRjaDsgaWYgd2UgaGF2ZSBhIGRpcmVjdG9yeSB3ZSBuZWVkIHRvCisJCSAqIGRlbGF5IHJldHVybmluZyBpdC4KKwkJICovCisJCWlmICghY21wKQorCQkJcmV0dXJuIGNlX3NsYXNoID8gLTIgLSBwb3MgOiBwb3M7CisJCWlmICgwIDwgY21wKQorCQkJY29udGludWU7IC8qIGtlZXAgbG9va2luZyAqLworCQkvKgorCQkgKiBjZV9uYW1lIHNvcnRzIGFmdGVyIHAtPnBhdGg7IGNvdWxkIGl0IGJlIHRoYXQgd2UKKwkJICogaGF2ZSBmaWxlcyB1bmRlciBwLT5wYXRoIGRpcmVjdG9yeSBpbiB0aGUgaW5kZXg/CisJCSAqIEUuZy4gIGNlX25hbWUgPT0gInQtaSIsIGFuZCBwLT5wYXRoID09ICJ0Ijsgd2UgbWF5CisJCSAqIGhhdmUgInQvYSIgaW4gdGhlIGluZGV4LgorCQkgKi8KKwkJaWYgKHBfbGVuIDwgY2VfbGVuICYmICFtZW1jbXAoY2VfbmFtZSwgcC0+cGF0aCwgcF9sZW4pICYmCisJCSAgICBjZV9uYW1lW3BfbGVuXSA8ICcvJykKKwkJCWNvbnRpbnVlOyAvKiBrZWVwIGxvb2tpbmcgKi8KKwkJYnJlYWs7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqZmluZF9jYWNoZV9lbnRyeShzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbywKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBuYW1lX2VudHJ5ICpwKQoreworCWludCBwb3MgPSBmaW5kX2NhY2hlX3BvcyhpbmZvLCBwKTsKKwlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8gPSBpbmZvLT5kYXRhOworCisJaWYgKDAgPD0gcG9zKQorCQlyZXR1cm4gby0+c3JjX2luZGV4LT5jYWNoZVtwb3NdOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3BhdGgoc3RydWN0IHRyYXZlcnNlX2luZm8gKmluZm8pCit7CisJaWYgKGluZm8tPnByZXYpIHsKKwkJZGVidWdfcGF0aChpbmZvLT5wcmV2KTsKKwkJaWYgKCppbmZvLT5wcmV2LT5uYW1lLnBhdGgpCisJCQlwdXRjaGFyKCcvJyk7CisJfQorCXByaW50ZigiJXMiLCBpbmZvLT5uYW1lLnBhdGgpOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z19uYW1lX2VudHJ5KGludCBpLCBzdHJ1Y3QgbmFtZV9lbnRyeSAqbikKK3sKKwlwcmludGYoImVudCMlZCAlMDZvICVzXG4iLCBpLAorCSAgICAgICBuLT5wYXRoID8gbi0+bW9kZSA6IDAsCisJICAgICAgIG4tPnBhdGggPyBuLT5wYXRoIDogIihtaXNzaW5nKSIpOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z191bnBhY2tfY2FsbGJhY2soaW50IG4sCisJCQkJICB1bnNpZ25lZCBsb25nIG1hc2ssCisJCQkJICB1bnNpZ25lZCBsb25nIGRpcm1hc2ssCisJCQkJICBzdHJ1Y3QgbmFtZV9lbnRyeSAqbmFtZXMsCisJCQkJICBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlpbnQgaTsKKwlwcmludGYoIiogdW5wYWNrIG1hc2sgJWx1LCBkaXJtYXNrICVsdSwgY250ICVkICIsCisJICAgICAgIG1hc2ssIGRpcm1hc2ssIG4pOworCWRlYnVnX3BhdGgoaW5mbyk7CisJcHV0Y2hhcignXG4nKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlkZWJ1Z19uYW1lX2VudHJ5KGksIG5hbWVzICsgaSk7Cit9CisKK3N0YXRpYyBpbnQgdW5wYWNrX2NhbGxiYWNrKGludCBuLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZGlybWFzaywgc3RydWN0IG5hbWVfZW50cnkgKm5hbWVzLCBzdHJ1Y3QgdHJhdmVyc2VfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKnNyY1tNQVhfVU5QQUNLX1RSRUVTICsgMV0gPSB7IE5VTEwsIH07CisJc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvID0gaW5mby0+ZGF0YTsKKwljb25zdCBzdHJ1Y3QgbmFtZV9lbnRyeSAqcCA9IG5hbWVzOworCisJLyogRmluZCBmaXJzdCBlbnRyeSB3aXRoIGEgcmVhbCBuYW1lICh3ZSBjb3VsZCB1c2UgIm1hc2siIHRvbykgKi8KKwl3aGlsZSAoIXAtPm1vZGUpCisJCXArKzsKKworCWlmIChvLT5kZWJ1Z191bnBhY2spCisJCWRlYnVnX3VucGFja19jYWxsYmFjayhuLCBtYXNrLCBkaXJtYXNrLCBuYW1lcywgaW5mbyk7CisKKwkvKiBBcmUgd2Ugc3VwcG9zZWQgdG8gbG9vayBhdCB0aGUgaW5kZXggdG9vPyAqLworCWlmIChvLT5tZXJnZSkgeworCQl3aGlsZSAoMSkgeworCQkJaW50IGNtcDsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwkJCWlmIChvLT5kaWZmX2luZGV4X2NhY2hlZCkKKwkJCQljZSA9IG5leHRfY2FjaGVfZW50cnkobyk7CisJCQllbHNlCisJCQkJY2UgPSBmaW5kX2NhY2hlX2VudHJ5KGluZm8sIHApOworCisJCQlpZiAoIWNlKQorCQkJCWJyZWFrOworCQkJY21wID0gY29tcGFyZV9lbnRyeShjZSwgaW5mbywgcCk7CisJCQlpZiAoY21wIDwgMCkgeworCQkJCWlmICh1bnBhY2tfaW5kZXhfZW50cnkoY2UsIG8pIDwgMCkKKwkJCQkJcmV0dXJuIHVucGFja19mYWlsZWQobywgTlVMTCk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIWNtcCkgeworCQkJCWlmIChjZV9zdGFnZShjZSkpIHsKKwkJCQkJLyoKKwkJCQkJICogSWYgd2Ugc2tpcCB1bm1lcmdlZCBpbmRleAorCQkJCQkgKiBlbnRyaWVzLCB3ZSdsbCBza2lwIHRoaXMKKwkJCQkJICogZW50cnkgKmFuZCogdGhlIHRyZWUKKwkJCQkJICogZW50cmllcyBhc3NvY2lhdGVkIHdpdGggaXQhCisJCQkJCSAqLworCQkJCQlpZiAoby0+c2tpcF91bm1lcmdlZCkgeworCQkJCQkJYWRkX3NhbWVfdW5tZXJnZWQoY2UsIG8pOworCQkJCQkJcmV0dXJuIG1hc2s7CisJCQkJCX0KKwkJCQl9CisJCQkJc3JjWzBdID0gY2U7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICh1bnBhY2tfbm9uZGlyZWN0b3JpZXMobiwgbWFzaywgZGlybWFzaywgc3JjLCBuYW1lcywgaW5mbykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoby0+bWVyZ2UgJiYgc3JjWzBdKSB7CisJCWlmIChjZV9zdGFnZShzcmNbMF0pKQorCQkJbWFya19jZV91c2VkX3NhbWVfbmFtZShzcmNbMF0sIG8pOworCQllbHNlCisJCQltYXJrX2NlX3VzZWQoc3JjWzBdLCBvKTsKKwl9CisKKwkvKiBOb3cgaGFuZGxlIGFueSBkaXJlY3Rvcmllcy4uICovCisJaWYgKGRpcm1hc2spIHsKKwkJLyogc3BlY2lhbCBjYXNlOiAiZGlmZi1pbmRleCAtLWNhY2hlZCIgbG9va2luZyBhdCBhIHRyZWUgKi8KKwkJaWYgKG8tPmRpZmZfaW5kZXhfY2FjaGVkICYmCisJCSAgICBuID09IDEgJiYgZGlybWFzayA9PSAxICYmIFNfSVNESVIobmFtZXMtPm1vZGUpKSB7CisJCQlpbnQgbWF0Y2hlczsKKwkJCW1hdGNoZXMgPSBjYWNoZV90cmVlX21hdGNoZXNfdHJhdmVyc2FsKG8tPnNyY19pbmRleC0+Y2FjaGVfdHJlZSwKKwkJCQkJCQkgICAgICAgbmFtZXMsIGluZm8pOworCQkJLyoKKwkJCSAqIEV2ZXJ5dGhpbmcgdW5kZXIgdGhlIG5hbWUgbWF0Y2hlczsgc2tpcCB0aGUKKwkJCSAqIGVudGlyZSBoaWVyYXJjaHkuICBkaWZmX2luZGV4X2NhY2hlZCBjb2RlcGF0aAorCQkJICogc3BlY2lhbCBjYXNlcyBEL0YgY29uZmxpY3RzIGluIHN1Y2ggYSB3YXkgdGhhdAorCQkJICogaXQgZG9lcyBub3QgZG8gYW55IGxvb2stYWhlYWQsIHNvIHRoaXMgaXMgc2FmZS4KKwkJCSAqLworCQkJaWYgKG1hdGNoZXMpIHsKKwkJCQlvLT5jYWNoZV9ib3R0b20gKz0gbWF0Y2hlczsKKwkJCQlyZXR1cm4gbWFzazsKKwkJCX0KKwkJfQorCisJCWlmICh0cmF2ZXJzZV90cmVlc19yZWN1cnNpdmUobiwgZGlybWFzaywgbWFzayAmIH5kaXJtYXNrLAorCQkJCQkgICAgIG5hbWVzLCBpbmZvKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiBtYXNrOworCX0KKworCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgaW50IGNsZWFyX2NlX2ZsYWdzXzEoc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUsIGludCBuciwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpwcmVmaXgsCisJCQkgICAgaW50IHNlbGVjdF9tYXNrLCBpbnQgY2xlYXJfbWFzaywKKwkJCSAgICBzdHJ1Y3QgZXhjbHVkZV9saXN0ICplbCwgaW50IGRlZnZhbCk7CisKKy8qIFdob2xlIGRpcmVjdG9yeSBtYXRjaGluZyAqLworc3RhdGljIGludCBjbGVhcl9jZV9mbGFnc19kaXIoc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUsIGludCBuciwKKwkJCSAgICAgIHN0cnVjdCBzdHJidWYgKnByZWZpeCwKKwkJCSAgICAgIGNoYXIgKmJhc2VuYW1lLAorCQkJICAgICAgaW50IHNlbGVjdF9tYXNrLCBpbnQgY2xlYXJfbWFzaywKKwkJCSAgICAgIHN0cnVjdCBleGNsdWRlX2xpc3QgKmVsLCBpbnQgZGVmdmFsKQoreworCXN0cnVjdCBjYWNoZV9lbnRyeSAqKmNhY2hlX2VuZDsKKwlpbnQgZHR5cGUgPSBEVF9ESVI7CisJaW50IHJldCA9IGlzX2V4Y2x1ZGVkX2Zyb21fbGlzdChwcmVmaXgtPmJ1ZiwgcHJlZml4LT5sZW4sCisJCQkJCWJhc2VuYW1lLCAmZHR5cGUsIGVsKTsKKwlpbnQgcmM7CisKKwlzdHJidWZfYWRkY2gocHJlZml4LCAnLycpOworCisJLyogSWYgdW5kZWNpZGVkLCB1c2UgbWF0Y2hpbmcgcmVzdWx0IG9mIHBhcmVudCBkaXIgaW4gZGVmdmFsICovCisJaWYgKHJldCA8IDApCisJCXJldCA9IGRlZnZhbDsKKworCWZvciAoY2FjaGVfZW5kID0gY2FjaGU7IGNhY2hlX2VuZCAhPSBjYWNoZSArIG5yOyBjYWNoZV9lbmQrKykgeworCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gKmNhY2hlX2VuZDsKKwkJaWYgKHN0cm5jbXAoY2UtPm5hbWUsIHByZWZpeC0+YnVmLCBwcmVmaXgtPmxlbikpCisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIFRPRE86IGNoZWNrIGVsLCBpZiB0aGVyZSBhcmUgbm8gcGF0dGVybnMgdGhhdCBtYXkgY29uZmxpY3QKKwkgKiB3aXRoIHJldCAoaW93LCB3ZSBrbm93IGluIGFkdmFuY2UgdGhlIGluY2wvZXhjbAorCSAqIGRlY2lzaW9uIGZvciB0aGUgZW50aXJlIGRpcmVjdG9yeSksIGNsZWFyIGZsYWcgaGVyZSB3aXRob3V0CisJICogY2FsbGluZyBjbGVhcl9jZV9mbGFnc18xKCkuIFRoYXQgZnVuY3Rpb24gd2lsbCBjYWxsCisJICogdGhlIGV4cGVuc2l2ZSBpc19leGNsdWRlZF9mcm9tX2xpc3QoKSBvbiBldmVyeSBlbnRyeS4KKwkgKi8KKwlyYyA9IGNsZWFyX2NlX2ZsYWdzXzEoY2FjaGUsIGNhY2hlX2VuZCAtIGNhY2hlLAorCQkJICAgICAgcHJlZml4LAorCQkJICAgICAgc2VsZWN0X21hc2ssIGNsZWFyX21hc2ssCisJCQkgICAgICBlbCwgcmV0KTsKKwlzdHJidWZfc2V0bGVuKHByZWZpeCwgcHJlZml4LT5sZW4gLSAxKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBUcmF2ZXJzZSB0aGUgaW5kZXgsIGZpbmQgZXZlcnkgZW50cnkgdGhhdCBtYXRjaGVzIGFjY29yZGluZyB0bworICogby0+ZWwuIERvICJjZV9mbGFncyAmPSB+Y2xlYXJfbWFzayIgb24gdGhvc2UgZW50cmllcy4gUmV0dXJuIHRoZQorICogbnVtYmVyIG9mIHRyYXZlcnNlZCBlbnRyaWVzLgorICoKKyAqIElmIHNlbGVjdF9tYXNrIGlzIG5vbi16ZXJvLCBvbmx5IGVudHJpZXMgd2hvc2UgY2VfZmxhZ3MgaGFzIG9uIG9mCisgKiB0aG9zZSBiaXRzIGVuYWJsZWQgYXJlIHRyYXZlcnNlZC4KKyAqCisgKiBjYWNoZQk6IHBvaW50ZXIgdG8gYW4gaW5kZXggZW50cnkKKyAqIHByZWZpeF9sZW4JOiBhbiBvZmZzZXQgdG8gaXRzIHBhdGgKKyAqCisgKiBUaGUgY3VycmVudCBwYXRoICgicHJlZml4IikgaW5jbHVkaW5nIHRoZSB0cmFpbGluZyAnLycgaXMKKyAqICAgY2FjaGVbMF0tPm5hbWVbMC4uKHByZWZpeF9sZW4tMSldCisgKiBUb3AgbGV2ZWwgcGF0aCBoYXMgcHJlZml4X2xlbiB6ZXJvLgorICovCitzdGF0aWMgaW50IGNsZWFyX2NlX2ZsYWdzXzEoc3RydWN0IGNhY2hlX2VudHJ5ICoqY2FjaGUsIGludCBuciwKKwkJCSAgICBzdHJ1Y3Qgc3RyYnVmICpwcmVmaXgsCisJCQkgICAgaW50IHNlbGVjdF9tYXNrLCBpbnQgY2xlYXJfbWFzaywKKwkJCSAgICBzdHJ1Y3QgZXhjbHVkZV9saXN0ICplbCwgaW50IGRlZnZhbCkKK3sKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZV9lbmQgPSBjYWNoZSArIG5yOworCisJLyoKKwkgKiBQcm9jZXNzIGFsbCBlbnRyaWVzIHRoYXQgaGF2ZSB0aGUgZ2l2ZW4gcHJlZml4IGFuZCBtZWV0CisJICogc2VsZWN0X21hc2sgY29uZGl0aW9uCisJICovCisJd2hpbGUoY2FjaGUgIT0gY2FjaGVfZW5kKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSAqY2FjaGU7CisJCWNvbnN0IGNoYXIgKm5hbWUsICpzbGFzaDsKKwkJaW50IGxlbiwgZHR5cGUsIHJldDsKKworCQlpZiAoc2VsZWN0X21hc2sgJiYgIShjZS0+Y2VfZmxhZ3MgJiBzZWxlY3RfbWFzaykpIHsKKwkJCWNhY2hlKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChwcmVmaXgtPmxlbiAmJiBzdHJuY21wKGNlLT5uYW1lLCBwcmVmaXgtPmJ1ZiwgcHJlZml4LT5sZW4pKQorCQkJYnJlYWs7CisKKwkJbmFtZSA9IGNlLT5uYW1lICsgcHJlZml4LT5sZW47CisJCXNsYXNoID0gc3RyY2hyKG5hbWUsICcvJyk7CisKKwkJLyogSWYgaXQncyBhIGRpcmVjdG9yeSwgdHJ5IHdob2xlIGRpcmVjdG9yeSBtYXRjaCBmaXJzdCAqLworCQlpZiAoc2xhc2gpIHsKKwkJCWludCBwcm9jZXNzZWQ7CisKKwkJCWxlbiA9IHNsYXNoIC0gbmFtZTsKKwkJCXN0cmJ1Zl9hZGQocHJlZml4LCBuYW1lLCBsZW4pOworCisJCQlwcm9jZXNzZWQgPSBjbGVhcl9jZV9mbGFnc19kaXIoY2FjaGUsIGNhY2hlX2VuZCAtIGNhY2hlLAorCQkJCQkJICAgICAgIHByZWZpeCwKKwkJCQkJCSAgICAgICBwcmVmaXgtPmJ1ZiArIHByZWZpeC0+bGVuIC0gbGVuLAorCQkJCQkJICAgICAgIHNlbGVjdF9tYXNrLCBjbGVhcl9tYXNrLAorCQkJCQkJICAgICAgIGVsLCBkZWZ2YWwpOworCisJCQkvKiBjbGVhcl9jX2ZfZGlyIGVhdHMgYSB3aG9sZSBkaXIgYWxyZWFkeT8gKi8KKwkJCWlmIChwcm9jZXNzZWQpIHsKKwkJCQljYWNoZSArPSBwcm9jZXNzZWQ7CisJCQkJc3RyYnVmX3NldGxlbihwcmVmaXgsIHByZWZpeC0+bGVuIC0gbGVuKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJc3RyYnVmX2FkZGNoKHByZWZpeCwgJy8nKTsKKwkJCWNhY2hlICs9IGNsZWFyX2NlX2ZsYWdzXzEoY2FjaGUsIGNhY2hlX2VuZCAtIGNhY2hlLAorCQkJCQkJICBwcmVmaXgsCisJCQkJCQkgIHNlbGVjdF9tYXNrLCBjbGVhcl9tYXNrLCBlbCwgZGVmdmFsKTsKKwkJCXN0cmJ1Zl9zZXRsZW4ocHJlZml4LCBwcmVmaXgtPmxlbiAtIGxlbiAtIDEpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBOb24tZGlyZWN0b3J5ICovCisJCWR0eXBlID0gY2VfdG9fZHR5cGUoY2UpOworCQlyZXQgPSBpc19leGNsdWRlZF9mcm9tX2xpc3QoY2UtPm5hbWUsIGNlX25hbWVsZW4oY2UpLAorCQkJCQkgICAgbmFtZSwgJmR0eXBlLCBlbCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0ID0gZGVmdmFsOworCQlpZiAocmV0ID4gMCkKKwkJCWNlLT5jZV9mbGFncyAmPSB+Y2xlYXJfbWFzazsKKwkJY2FjaGUrKzsKKwl9CisJcmV0dXJuIG5yIC0gKGNhY2hlX2VuZCAtIGNhY2hlKTsKK30KKworc3RhdGljIGludCBjbGVhcl9jZV9mbGFncyhzdHJ1Y3QgY2FjaGVfZW50cnkgKipjYWNoZSwgaW50IG5yLAorCQkJICAgIGludCBzZWxlY3RfbWFzaywgaW50IGNsZWFyX21hc2ssCisJCQkgICAgc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWwpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgcHJlZml4ID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJnByZWZpeCk7CisKKwlyZXR1cm4gY2xlYXJfY2VfZmxhZ3NfMShjYWNoZSwgbnIsCisJCQkJJnByZWZpeCwKKwkJCQlzZWxlY3RfbWFzaywgY2xlYXJfbWFzaywKKwkJCQllbCwgMCk7Cit9CisKKy8qCisgKiBTZXQvQ2xlYXIgQ0VfTkVXX1NLSVBfV09SS1RSRUUgYWNjb3JkaW5nIHRvICRHSVRfRElSL2luZm8vc3BhcnNlLWNoZWNrb3V0CisgKi8KK3N0YXRpYyB2b2lkIG1hcmtfbmV3X3NraXBfd29ya3RyZWUoc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWwsCisJCQkJICAgc3RydWN0IGluZGV4X3N0YXRlICp0aGVfaW5kZXgsCisJCQkJICAgaW50IHNlbGVjdF9mbGFnLCBpbnQgc2tpcF93dF9mbGFnKQoreworCWludCBpOworCisJLyoKKwkgKiAxLiBQcmV0ZW5kIHRoZSBuYXJyb3dlc3Qgd29ya3RyZWU6IG9ubHkgdW5tZXJnZWQgZW50cmllcworCSAqIGFyZSBjaGVja2VkIG91dAorCSAqLworCWZvciAoaSA9IDA7IGkgPCB0aGVfaW5kZXgtPmNhY2hlX25yOyBpKyspIHsKKwkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IHRoZV9pbmRleC0+Y2FjaGVbaV07CisKKwkJaWYgKHNlbGVjdF9mbGFnICYmICEoY2UtPmNlX2ZsYWdzICYgc2VsZWN0X2ZsYWcpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFjZV9zdGFnZShjZSkpCisJCQljZS0+Y2VfZmxhZ3MgfD0gc2tpcF93dF9mbGFnOworCQllbHNlCisJCQljZS0+Y2VfZmxhZ3MgJj0gfnNraXBfd3RfZmxhZzsKKwl9CisKKwkvKgorCSAqIDIuIFdpZGVuIHdvcmt0cmVlIGFjY29yZGluZyB0byBzcGFyc2UtY2hlY2tvdXQgZmlsZS4KKwkgKiBNYXRjaGVkIGVudHJpZXMgd2lsbCBoYXZlIHNraXBfd3RfZmxhZyBjbGVhcmVkIChpLmUuICJpbiIpCisJICovCisJY2xlYXJfY2VfZmxhZ3ModGhlX2luZGV4LT5jYWNoZSwgdGhlX2luZGV4LT5jYWNoZV9uciwKKwkJICAgICAgIHNlbGVjdF9mbGFnLCBza2lwX3d0X2ZsYWcsIGVsKTsKK30KKworc3RhdGljIGludCB2ZXJpZnlfYWJzZW50KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqLAorCQkJIGVudW0gdW5wYWNrX3RyZWVzX2Vycm9yX3R5cGVzLAorCQkJIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqKTsKKy8qCisgKiBOLXdheSBtZXJnZSAibGVuIiB0cmVlcy4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlIHRvIG1hbmlwdWxhdGUgdGhlCisgKiByZXN1bHRpbmcgaW5kZXgsIC0yIG9uIGZhaWx1cmUgdG8gcmVmbGVjdCB0aGUgY2hhbmdlcyB0byB0aGUgd29yayB0cmVlLgorICoKKyAqIENFX0FEREVELCBDRV9VTlBBQ0tFRCBhbmQgQ0VfTkVXX1NLSVBfV09SS1RSRUUgYXJlIHVzZWQgaW50ZXJuYWxseQorICovCitpbnQgdW5wYWNrX3RyZWVzKHVuc2lnbmVkIGxlbiwgc3RydWN0IHRyZWVfZGVzYyAqdCwgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWludCBpLCByZXQ7CisJc3RhdGljIHN0cnVjdCBjYWNoZV9lbnRyeSAqZGZjOworCXN0cnVjdCBleGNsdWRlX2xpc3QgZWw7CisKKwlpZiAobGVuID4gTUFYX1VOUEFDS19UUkVFUykKKwkJZGllKCJ1bnBhY2tfdHJlZXMgdGFrZXMgYXQgbW9zdCAlZCB0cmVlcyIsIE1BWF9VTlBBQ0tfVFJFRVMpOworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCXN0YXRlLmJhc2VfZGlyID0gIiI7CisJc3RhdGUuZm9yY2UgPSAxOworCXN0YXRlLnF1aWV0ID0gMTsKKwlzdGF0ZS5yZWZyZXNoX2NhY2hlID0gMTsKKwlzdGF0ZS5pc3RhdGUgPSAmby0+cmVzdWx0OworCisJbWVtc2V0KCZlbCwgMCwgc2l6ZW9mKGVsKSk7CisJaWYgKCFjb3JlX2FwcGx5X3NwYXJzZV9jaGVja291dCB8fCAhby0+dXBkYXRlKQorCQlvLT5za2lwX3NwYXJzZV9jaGVja291dCA9IDE7CisJaWYgKCFvLT5za2lwX3NwYXJzZV9jaGVja291dCkgeworCQljaGFyICpzcGFyc2UgPSBnaXRfcGF0aGR1cCgiaW5mby9zcGFyc2UtY2hlY2tvdXQiKTsKKwkJaWYgKGFkZF9leGNsdWRlc19mcm9tX2ZpbGVfdG9fbGlzdChzcGFyc2UsICIiLCAwLCAmZWwsIDApIDwgMCkKKwkJCW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ID0gMTsKKwkJZWxzZQorCQkJby0+ZWwgPSAmZWw7CisJCWZyZWUoc3BhcnNlKTsKKwl9CisKKwltZW1zZXQoJm8tPnJlc3VsdCwgMCwgc2l6ZW9mKG8tPnJlc3VsdCkpOworCW8tPnJlc3VsdC5pbml0aWFsaXplZCA9IDE7CisJby0+cmVzdWx0LnRpbWVzdGFtcC5zZWMgPSBvLT5zcmNfaW5kZXgtPnRpbWVzdGFtcC5zZWM7CisJby0+cmVzdWx0LnRpbWVzdGFtcC5uc2VjID0gby0+c3JjX2luZGV4LT50aW1lc3RhbXAubnNlYzsKKwlvLT5yZXN1bHQudmVyc2lvbiA9IG8tPnNyY19pbmRleC0+dmVyc2lvbjsKKwlvLT5yZXN1bHQuc3BsaXRfaW5kZXggPSBvLT5zcmNfaW5kZXgtPnNwbGl0X2luZGV4OworCWlmIChvLT5yZXN1bHQuc3BsaXRfaW5kZXgpCisJCW8tPnJlc3VsdC5zcGxpdF9pbmRleC0+cmVmY291bnQrKzsKKwloYXNoY3B5KG8tPnJlc3VsdC5zaGExLCBvLT5zcmNfaW5kZXgtPnNoYTEpOworCW8tPm1lcmdlX3NpemUgPSBsZW47CisJbWFya19hbGxfY2VfdW51c2VkKG8tPnNyY19pbmRleCk7CisKKwkvKgorCSAqIFNwYXJzZSBjaGVja291dCBsb29wICMxOiBzZXQgTkVXX1NLSVBfV09SS1RSRUUgb24gZXhpc3RpbmcgZW50cmllcworCSAqLworCWlmICghby0+c2tpcF9zcGFyc2VfY2hlY2tvdXQpCisJCW1hcmtfbmV3X3NraXBfd29ya3RyZWUoby0+ZWwsIG8tPnNyY19pbmRleCwgMCwgQ0VfTkVXX1NLSVBfV09SS1RSRUUpOworCisJaWYgKCFkZmMpCisJCWRmYyA9IHhjYWxsb2MoMSwgY2FjaGVfZW50cnlfc2l6ZSgwKSk7CisJby0+ZGZfY29uZmxpY3RfZW50cnkgPSBkZmM7CisKKwlpZiAobGVuKSB7CisJCWNvbnN0IGNoYXIgKnByZWZpeCA9IG8tPnByZWZpeCA/IG8tPnByZWZpeCA6ICIiOworCQlzdHJ1Y3QgdHJhdmVyc2VfaW5mbyBpbmZvOworCisJCXNldHVwX3RyYXZlcnNlX2luZm8oJmluZm8sIHByZWZpeCk7CisJCWluZm8uZm4gPSB1bnBhY2tfY2FsbGJhY2s7CisJCWluZm8uZGF0YSA9IG87CisJCWluZm8uc2hvd19hbGxfZXJyb3JzID0gby0+c2hvd19hbGxfZXJyb3JzOworCQlpbmZvLnBhdGhzcGVjID0gby0+cGF0aHNwZWM7CisKKwkJaWYgKG8tPnByZWZpeCkgeworCQkJLyoKKwkJCSAqIFVucGFjayBleGlzdGluZyBpbmRleCBlbnRyaWVzIHRoYXQgc29ydCBiZWZvcmUgdGhlCisJCQkgKiBwcmVmaXggdGhlIHRyZWUgaXMgc3BsaWNlZCBpbnRvLiAgTm90ZSB0aGF0IG8tPm1lcmdlCisJCQkgKiBpcyBhbHdheXMgdHJ1ZSBpbiB0aGlzIGNhc2UuCisJCQkgKi8KKwkJCXdoaWxlICgxKSB7CisJCQkJc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IG5leHRfY2FjaGVfZW50cnkobyk7CisJCQkJaWYgKCFjZSkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKGNlX2luX3RyYXZlcnNlX3BhdGgoY2UsICZpbmZvKSkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKHVucGFja19pbmRleF9lbnRyeShjZSwgbykgPCAwKQorCQkJCQlnb3RvIHJldHVybl9mYWlsZWQ7CisJCQl9CisJCX0KKworCQlpZiAodHJhdmVyc2VfdHJlZXMobGVuLCB0LCAmaW5mbykgPCAwKQorCQkJZ290byByZXR1cm5fZmFpbGVkOworCX0KKworCS8qIEFueSBsZWZ0LW92ZXIgZW50cmllcyBpbiB0aGUgaW5kZXg/ICovCisJaWYgKG8tPm1lcmdlKSB7CisJCXdoaWxlICgxKSB7CisJCQlzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gbmV4dF9jYWNoZV9lbnRyeShvKTsKKwkJCWlmICghY2UpCisJCQkJYnJlYWs7CisJCQlpZiAodW5wYWNrX2luZGV4X2VudHJ5KGNlLCBvKSA8IDApCisJCQkJZ290byByZXR1cm5fZmFpbGVkOworCQl9CisJfQorCW1hcmtfYWxsX2NlX3VudXNlZChvLT5zcmNfaW5kZXgpOworCisJaWYgKG8tPnRyaXZpYWxfbWVyZ2VzX29ubHkgJiYgby0+bm9udHJpdmlhbF9tZXJnZSkgeworCQlyZXQgPSB1bnBhY2tfZmFpbGVkKG8sICJNZXJnZSByZXF1aXJlcyBmaWxlLWxldmVsIG1lcmdpbmciKTsKKwkJZ290byBkb25lOworCX0KKworCWlmICghby0+c2tpcF9zcGFyc2VfY2hlY2tvdXQpIHsKKwkJaW50IGVtcHR5X3dvcmt0cmVlID0gMTsKKworCQkvKgorCQkgKiBTcGFyc2UgY2hlY2tvdXQgbG9vcCAjMjogc2V0IE5FV19TS0lQX1dPUktUUkVFIG9uIGVudHJpZXMgbm90IGluIGxvb3AgIzEKKwkJICogSWYgdGhlIHdpbGwgaGF2ZSBORVdfU0tJUF9XT1JLVFJFRSwgYWxzbyBzZXQgQ0VfU0tJUF9XT1JLVFJFRQorCQkgKiBzbyBhcHBseV9zcGFyc2VfY2hlY2tvdXQoKSB3b24ndCBhdHRlbXB0IHRvIHJlbW92ZSBpdCBmcm9tIHdvcmt0cmVlCisJCSAqLworCQltYXJrX25ld19za2lwX3dvcmt0cmVlKG8tPmVsLCAmby0+cmVzdWx0LCBDRV9BRERFRCwgQ0VfU0tJUF9XT1JLVFJFRSB8IENFX05FV19TS0lQX1dPUktUUkVFKTsKKworCQlyZXQgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgby0+cmVzdWx0LmNhY2hlX25yOyBpKyspIHsKKwkJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UgPSBvLT5yZXN1bHQuY2FjaGVbaV07CisKKwkJCS8qCisJCQkgKiBFbnRyaWVzIG1hcmtlZCB3aXRoIENFX0FEREVEIGluIG1lcmdlZF9lbnRyeSgpIGRvIG5vdCBoYXZlCisJCQkgKiB2ZXJpZnlfYWJzZW50KCkgY2hlY2sgKHRoZSBjaGVjayBpcyBlZmZlY3RpdmVseSBkaXNhYmxlZAorCQkJICogYmVjYXVzZSBDRV9ORVdfU0tJUF9XT1JLVFJFRSBpcyBzZXQgdW5jb25kaXRpb25hbGx5KS4KKwkJCSAqCisJCQkgKiBEbyB0aGUgcmVhbCBjaGVjayBub3cgYmVjYXVzZSB3ZSBoYXZlIGhhZAorCQkJICogY29ycmVjdCBDRV9ORVdfU0tJUF9XT1JLVFJFRQorCQkJICovCisJCQlpZiAoY2UtPmNlX2ZsYWdzICYgQ0VfQURERUQgJiYKKwkJCSAgICB2ZXJpZnlfYWJzZW50KGNlLCBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9PVkVSV1JJVFRFTiwgbykpIHsKKwkJCQlpZiAoIW8tPnNob3dfYWxsX2Vycm9ycykKKwkJCQkJZ290byByZXR1cm5fZmFpbGVkOworCQkJCXJldCA9IC0xOworCQkJfQorCisJCQlpZiAoYXBwbHlfc3BhcnNlX2NoZWNrb3V0KCZvLT5yZXN1bHQsIGNlLCBvKSkgeworCQkJCWlmICghby0+c2hvd19hbGxfZXJyb3JzKQorCQkJCQlnb3RvIHJldHVybl9mYWlsZWQ7CisJCQkJcmV0ID0gLTE7CisJCQl9CisJCQlpZiAoIWNlX3NraXBfd29ya3RyZWUoY2UpKQorCQkJCWVtcHR5X3dvcmt0cmVlID0gMDsKKworCQl9CisJCWlmIChyZXQgPCAwKQorCQkJZ290byByZXR1cm5fZmFpbGVkOworCQkvKgorCQkgKiBTcGFyc2UgY2hlY2tvdXQgaXMgbWVhbnQgdG8gbmFycm93IGRvd24gY2hlY2tvdXQgYXJlYQorCQkgKiBidXQgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBuYXJyb3cgZG93biB0byBlbXB0eSB3b3JraW5nCisJCSAqIHRyZWUuIFRoaXMgaXMgdXN1YWxseSBhIG1pc3Rha2UgaW4gc3BhcnNlIGNoZWNrb3V0IHJ1bGVzLgorCQkgKiBEbyBub3QgYWxsb3cgdXNlcnMgdG8gZG8gdGhhdC4KKwkJICovCisJCWlmIChvLT5yZXN1bHQuY2FjaGVfbnIgJiYgZW1wdHlfd29ya3RyZWUpIHsKKwkJCXJldCA9IHVucGFja19mYWlsZWQobywgIlNwYXJzZSBjaGVja291dCBsZWF2ZXMgbm8gZW50cnkgb24gd29ya2luZyBkaXJlY3RvcnkiKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCW8tPnNyY19pbmRleCA9IE5VTEw7CisJcmV0ID0gY2hlY2tfdXBkYXRlcyhvKSA/ICgtMikgOiAwOworCWlmIChvLT5kc3RfaW5kZXgpIHsKKwkJaWYgKCFyZXQpIHsKKwkJCWlmICghby0+cmVzdWx0LmNhY2hlX3RyZWUpCisJCQkJby0+cmVzdWx0LmNhY2hlX3RyZWUgPSBjYWNoZV90cmVlKCk7CisJCQlpZiAoIWNhY2hlX3RyZWVfZnVsbHlfdmFsaWQoby0+cmVzdWx0LmNhY2hlX3RyZWUpKQorCQkJCWNhY2hlX3RyZWVfdXBkYXRlKCZvLT5yZXN1bHQsCisJCQkJCQkgIFdSSVRFX1RSRUVfU0lMRU5UIHwKKwkJCQkJCSAgV1JJVEVfVFJFRV9SRVBBSVIpOworCQl9CisJCWRpc2NhcmRfaW5kZXgoby0+ZHN0X2luZGV4KTsKKwkJKm8tPmRzdF9pbmRleCA9IG8tPnJlc3VsdDsKKwl9IGVsc2UgeworCQlkaXNjYXJkX2luZGV4KCZvLT5yZXN1bHQpOworCX0KKworZG9uZToKKwljbGVhcl9leGNsdWRlX2xpc3QoJmVsKTsKKwlyZXR1cm4gcmV0OworCityZXR1cm5fZmFpbGVkOgorCWlmIChvLT5zaG93X2FsbF9lcnJvcnMpCisJCWRpc3BsYXlfZXJyb3JfbXNncyhvKTsKKwltYXJrX2FsbF9jZV91bnVzZWQoby0+c3JjX2luZGV4KTsKKwlyZXQgPSB1bnBhY2tfZmFpbGVkKG8sIE5VTEwpOworCWlmIChvLT5leGl0aW5nX2Vhcmx5KQorCQlyZXQgPSAwOworCWdvdG8gZG9uZTsKK30KKworLyogSGVyZSBjb21lIHRoZSBtZXJnZSBmdW5jdGlvbnMgKi8KKworc3RhdGljIGludCByZWplY3RfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgorCQlhZGRfcmVqZWN0ZWRfcGF0aChvLCBFUlJPUl9XT1VMRF9PVkVSV1JJVEUsIGNlLT5uYW1lKTsKK30KKworc3RhdGljIGludCBzYW1lKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqYSwgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpiKQoreworCWlmICghIWEgIT0gISFiKQorCQlyZXR1cm4gMDsKKwlpZiAoIWEgJiYgIWIpCisJCXJldHVybiAxOworCWlmICgoYS0+Y2VfZmxhZ3MgfCBiLT5jZV9mbGFncykgJiBDRV9DT05GTElDVEVEKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYS0+Y2VfbW9kZSA9PSBiLT5jZV9tb2RlICYmCisJICAgICAgICFoYXNoY21wKGEtPnNoYTEsIGItPnNoYTEpOworfQorCisKKy8qCisgKiBXaGVuIGEgQ0UgZ2V0cyB0dXJuZWQgaW50byBhbiB1bm1lcmdlZCBlbnRyeSwgd2UKKyAqIHdhbnQgaXQgdG8gYmUgdXAtdG8tZGF0ZQorICovCitzdGF0aWMgaW50IHZlcmlmeV91cHRvZGF0ZV8xKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywKKwkJCSAgICAgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChvLT5pbmRleF9vbmx5KQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ0VfVkFMSUQgYW5kIENFX1NLSVBfV09SS1RSRUUgY2hlYXQsIHdlIGJldHRlciBjaGVjayBhZ2FpbgorCSAqIGlmIHRoaXMgZW50cnkgaXMgdHJ1bHkgdXAtdG8tZGF0ZSBiZWNhdXNlIHRoaXMgZmlsZSBtYXkgYmUKKwkgKiBvdmVyd3JpdHRlbi4KKwkgKi8KKwlpZiAoKGNlLT5jZV9mbGFncyAmIENFX1ZBTElEKSB8fCBjZV9za2lwX3dvcmt0cmVlKGNlKSkKKwkJOyAvKiBrZWVwIGNoZWNraW5nICovCisJZWxzZSBpZiAoby0+cmVzZXQgfHwgY2VfdXB0b2RhdGUoY2UpKQorCQlyZXR1cm4gMDsKKworCWlmICghbHN0YXQoY2UtPm5hbWUsICZzdCkpIHsKKwkJaW50IGZsYWdzID0gQ0VfTUFUQ0hfSUdOT1JFX1ZBTElEfENFX01BVENIX0lHTk9SRV9TS0lQX1dPUktUUkVFOworCQl1bnNpZ25lZCBjaGFuZ2VkID0gaWVfbWF0Y2hfc3RhdChvLT5zcmNfaW5kZXgsIGNlLCAmc3QsIGZsYWdzKTsKKwkJaWYgKCFjaGFuZ2VkKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIE5FRURTV09SSzogdGhlIGN1cnJlbnQgZGVmYXVsdCBwb2xpY3kgaXMgdG8gYWxsb3cKKwkJICogc3VibW9kdWxlIHRvIGJlIG91dCBvZiBzeW5jIHdydCB0aGUgc3VwZXJwcm9qZWN0CisJCSAqIGluZGV4LiAgVGhpcyBuZWVkcyB0byBiZSB0aWdodGVuZWQgbGF0ZXIgZm9yCisJCSAqIHN1Ym1vZHVsZXMgdGhhdCBhcmUgbWFya2VkIHRvIGJlIGF1dG9tYXRpY2FsbHkKKwkJICogY2hlY2tlZCBvdXQuCisJCSAqLworCQlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpKQorCQkJcmV0dXJuIDA7CisJCWVycm5vID0gMDsKKwl9CisJaWYgKGVycm5vID09IEVOT0VOVCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG8tPmdlbnRseSA/IC0xIDoKKwkJYWRkX3JlamVjdGVkX3BhdGgobywgZXJyb3JfdHlwZSwgY2UtPm5hbWUpOworfQorCitzdGF0aWMgaW50IHZlcmlmeV91cHRvZGF0ZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWlmICghby0+c2tpcF9zcGFyc2VfY2hlY2tvdXQgJiYgKGNlLT5jZV9mbGFncyAmIENFX05FV19TS0lQX1dPUktUUkVFKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHZlcmlmeV91cHRvZGF0ZV8xKGNlLCBvLCBFUlJPUl9OT1RfVVBUT0RBVEVfRklMRSk7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X3VwdG9kYXRlX3NwYXJzZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCSAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCXJldHVybiB2ZXJpZnlfdXB0b2RhdGVfMShjZSwgbywgRVJST1JfU1BBUlNFX05PVF9VUFRPREFURV9GSUxFKTsKK30KKworc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9jZV9wYXRoKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWlmICghY2UpCisJCXJldHVybjsKKwljYWNoZV90cmVlX2ludmFsaWRhdGVfcGF0aChvLT5zcmNfaW5kZXgsIGNlLT5uYW1lKTsKKwl1bnRyYWNrZWRfY2FjaGVfaW52YWxpZGF0ZV9wYXRoKG8tPnNyY19pbmRleCwgY2UtPm5hbWUpOworfQorCisvKgorICogQ2hlY2sgdGhhdCBjaGVja2luZyBvdXQgY2UtPnNoYTEgaW4gc3ViZGlyIGNlLT5uYW1lIGlzIG5vdAorICogZ29pbmcgdG8gb3ZlcndyaXRlIGFueSB3b3JraW5nIGZpbGVzLgorICoKKyAqIEN1cnJlbnRseSwgZ2l0IGRvZXMgbm90IGNoZWNrb3V0IHN1YnByb2plY3RzIGR1cmluZyBhIHN1cGVycHJvamVjdAorICogY2hlY2tvdXQsIHNvIGl0IGlzIG5vdCBnb2luZyB0byBvdmVyd3JpdGUgYW55dGhpbmcuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X2NsZWFuX3N1Ym1vZHVsZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJCSAgZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKKwkJCQkgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2ZXJpZnlfY2xlYW5fc3ViZGlyZWN0b3J5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJICAgICBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAorCQkJCSAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCS8qCisJICogd2UgYXJlIGFib3V0IHRvIGV4dHJhY3QgImNlLT5uYW1lIjsgd2Ugd291bGQgbm90IHdhbnQgdG8gbG9zZQorCSAqIGFueXRoaW5nIGluIHRoZSBleGlzdGluZyBkaXJlY3RvcnkgdGhlcmUuCisJICovCisJaW50IG5hbWVsZW47CisJaW50IGk7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZDsKKwljaGFyICpwYXRoYnVmOworCWludCBjbnQgPSAwOworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwlpZiAoU19JU0dJVExJTksoY2UtPmNlX21vZGUpICYmCisJICAgIHJlc29sdmVfZ2l0bGlua19yZWYoY2UtPm5hbWUsICJIRUFEIiwgc2hhMSkgPT0gMCkgeworCQkvKiBJZiB3ZSBhcmUgbm90IGdvaW5nIHRvIHVwZGF0ZSB0aGUgc3VibW9kdWxlLCB0aGVuCisJCSAqIHdlIGRvbid0IGNhcmUuCisJCSAqLworCQlpZiAoIWhhc2hjbXAoc2hhMSwgY2UtPnNoYTEpKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiB2ZXJpZnlfY2xlYW5fc3VibW9kdWxlKGNlLCBlcnJvcl90eXBlLCBvKTsKKwl9CisKKwkvKgorCSAqIEZpcnN0IGxldCdzIG1ha2Ugc3VyZSB3ZSBkbyBub3QgaGF2ZSBhIGxvY2FsIG1vZGlmaWNhdGlvbgorCSAqIGluIHRoYXQgZGlyZWN0b3J5LgorCSAqLworCW5hbWVsZW4gPSBjZV9uYW1lbGVuKGNlKTsKKwlmb3IgKGkgPSBsb2NhdGVfaW5fc3JjX2luZGV4KGNlLCBvKTsKKwkgICAgIGkgPCBvLT5zcmNfaW5kZXgtPmNhY2hlX25yOworCSAgICAgaSsrKSB7CisJCXN0cnVjdCBjYWNoZV9lbnRyeSAqY2UyID0gby0+c3JjX2luZGV4LT5jYWNoZVtpXTsKKwkJaW50IGxlbiA9IGNlX25hbWVsZW4oY2UyKTsKKwkJaWYgKGxlbiA8IG5hbWVsZW4gfHwKKwkJICAgIHN0cm5jbXAoY2UtPm5hbWUsIGNlMi0+bmFtZSwgbmFtZWxlbikgfHwKKwkJICAgIGNlMi0+bmFtZVtuYW1lbGVuXSAhPSAnLycpCisJCQlicmVhazsKKwkJLyoKKwkJICogY2UyLT5uYW1lIGlzIGFuIGVudHJ5IGluIHRoZSBzdWJkaXJlY3RvcnkgdG8gYmUKKwkJICogcmVtb3ZlZC4KKwkJICovCisJCWlmICghY2Vfc3RhZ2UoY2UyKSkgeworCQkJaWYgKHZlcmlmeV91cHRvZGF0ZShjZTIsIG8pKQorCQkJCXJldHVybiAtMTsKKwkJCWFkZF9lbnRyeShvLCBjZTIsIENFX1JFTU9WRSwgMCk7CisJCQltYXJrX2NlX3VzZWQoY2UyLCBvKTsKKwkJfQorCQljbnQrKzsKKwl9CisKKwkvKgorCSAqIFRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgbG9zZSBhIGxvY2FsbHkKKwkgKiBwcmVzZW50IGZpbGUgdGhhdCBpcyBub3QgaWdub3JlZC4KKwkgKi8KKwlwYXRoYnVmID0geHN0cmZtdCgiJS4qcy8iLCBuYW1lbGVuLCBjZS0+bmFtZSk7CisKKwltZW1zZXQoJmQsIDAsIHNpemVvZihkKSk7CisJaWYgKG8tPmRpcikKKwkJZC5leGNsdWRlX3Blcl9kaXIgPSBvLT5kaXItPmV4Y2x1ZGVfcGVyX2RpcjsKKwlpID0gcmVhZF9kaXJlY3RvcnkoJmQsIHBhdGhidWYsIG5hbWVsZW4rMSwgTlVMTCk7CisJaWYgKGkpCisJCXJldHVybiBvLT5nZW50bHkgPyAtMSA6CisJCQlhZGRfcmVqZWN0ZWRfcGF0aChvLCBFUlJPUl9OT1RfVVBUT0RBVEVfRElSLCBjZS0+bmFtZSk7CisJZnJlZShwYXRoYnVmKTsKKwlyZXR1cm4gY250OworfQorCisvKgorICogVGhpcyBnZXRzIGNhbGxlZCB3aGVuIHRoZXJlIHdhcyBubyBpbmRleCBlbnRyeSBmb3IgdGhlIHRyZWUgZW50cnkgJ2RzdCcsCisgKiBidXQgd2UgZm91bmQgYSBmaWxlIGluIHRoZSB3b3JraW5nIHRyZWUgdGhhdCAnbHN0YXQoKScgc2FpZCB3YXMgZmluZSwKKyAqIGFuZCB3ZSdyZSBvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbS4KKyAqCisgKiBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGluIHRoZSBpbmRleCB0aGF0IGFsc28KKyAqIG1hdGNoZXMgdGhlIHN0YXQgaW5mb3JtYXRpb24sIGFuZCBhc3N1bWUgaXQncyB0aGF0IG90aGVyIGZpbGUhCisgKi8KK3N0YXRpYyBpbnQgaWNhc2VfZXhpc3RzKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbywgY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgc3RydWN0IHN0YXQgKnN0KQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqc3JjOworCisJc3JjID0gaW5kZXhfZmlsZV9leGlzdHMoby0+c3JjX2luZGV4LCBuYW1lLCBsZW4sIDEpOworCXJldHVybiBzcmMgJiYgIWllX21hdGNoX3N0YXQoby0+c3JjX2luZGV4LCBzcmMsIHN0LCBDRV9NQVRDSF9JR05PUkVfVkFMSUR8Q0VfTUFUQ0hfSUdOT1JFX1NLSVBfV09SS1RSRUUpOworfQorCitzdGF0aWMgaW50IGNoZWNrX29rX3RvX3JlbW92ZShjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCBpbnQgZHR5cGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLCBzdHJ1Y3Qgc3RhdCAqc3QsCisJCQkgICAgICBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAorCQkJICAgICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVzdWx0OworCisJLyoKKwkgKiBJdCBtYXkgYmUgdGhhdCB0aGUgJ2xzdGF0KCknIHN1Y2NlZWRlZCBldmVuIHRob3VnaAorCSAqIHRhcmdldCAnY2UnIHdhcyBhYnNlbnQsIGJlY2F1c2UgdGhlcmUgaXMgYW4gb2xkCisJICogZW50cnkgdGhhdCBpcyBkaWZmZXJlbnQgb25seSBpbiBjYXNlLi4KKwkgKgorCSAqIElnbm9yZSB0aGF0IGxzdGF0KCkgaWYgaXQgbWF0Y2hlcy4KKwkgKi8KKwlpZiAoaWdub3JlX2Nhc2UgJiYgaWNhc2VfZXhpc3RzKG8sIG5hbWUsIGxlbiwgc3QpKQorCQlyZXR1cm4gMDsKKworCWlmIChvLT5kaXIgJiYKKwkgICAgaXNfZXhjbHVkZWQoby0+ZGlyLCBuYW1lLCAmZHR5cGUpKQorCQkvKgorCQkgKiBjZS0+bmFtZSBpcyBleHBsaWNpdGx5IGV4Y2x1ZGVkLCBzbyBpdCBpcyBPayB0bworCQkgKiBvdmVyd3JpdGUgaXQuCisJCSAqLworCQlyZXR1cm4gMDsKKwlpZiAoU19JU0RJUihzdC0+c3RfbW9kZSkpIHsKKwkJLyoKKwkJICogV2UgYXJlIGNoZWNraW5nIG91dCBwYXRoICJmb28iIGFuZAorCQkgKiBmb3VuZCAiZm9vLy4iIGluIHRoZSB3b3JraW5nIHRyZWUuCisJCSAqIFRoaXMgaXMgdHJpY2t5IC0tIGlmIHdlIGhhdmUgbW9kaWZpZWQKKwkJICogZmlsZXMgdGhhdCBhcmUgaW4gImZvby8iIHdlIHdvdWxkIGxvc2UKKwkJICogdGhlbS4KKwkJICovCisJCWlmICh2ZXJpZnlfY2xlYW5fc3ViZGlyZWN0b3J5KGNlLCBlcnJvcl90eXBlLCBvKSA8IDApCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogVGhlIHByZXZpb3VzIHJvdW5kIG1heSBhbHJlYWR5IGhhdmUgZGVjaWRlZCB0bworCSAqIGRlbGV0ZSB0aGlzIHBhdGgsIHdoaWNoIGlzIGluIGEgc3ViZGlyZWN0b3J5IHRoYXQKKwkgKiBpcyBiZWluZyByZXBsYWNlZCB3aXRoIGEgYmxvYi4KKwkgKi8KKwlyZXN1bHQgPSBpbmRleF9maWxlX2V4aXN0cygmby0+cmVzdWx0LCBuYW1lLCBsZW4sIDApOworCWlmIChyZXN1bHQpIHsKKwkJaWYgKHJlc3VsdC0+Y2VfZmxhZ3MgJiBDRV9SRU1PVkUpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgorCQlhZGRfcmVqZWN0ZWRfcGF0aChvLCBlcnJvcl90eXBlLCBuYW1lKTsKK30KKworLyoKKyAqIFdlIGRvIG5vdCB3YW50IHRvIHJlbW92ZSBvciBvdmVyd3JpdGUgYSB3b3JraW5nIHRyZWUgZmlsZSB0aGF0CisgKiBpcyBub3QgdHJhY2tlZCwgdW5sZXNzIGl0IGlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X2Fic2VudF8xKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgICBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAorCQkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWludCBsZW47CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoby0+aW5kZXhfb25seSB8fCBvLT5yZXNldCB8fCAhby0+dXBkYXRlKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IGNoZWNrX2xlYWRpbmdfcGF0aChjZS0+bmFtZSwgY2VfbmFtZWxlbihjZSkpOworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmIChsZW4gPiAwKSB7CisJCWNoYXIgKnBhdGg7CisJCWludCByZXQ7CisKKwkJcGF0aCA9IHhtZW1kdXB6KGNlLT5uYW1lLCBsZW4pOworCQlpZiAobHN0YXQocGF0aCwgJnN0KSkKKwkJCXJldCA9IGVycm9yKCJjYW5ub3Qgc3RhdCAnJXMnOiAlcyIsIHBhdGgsCisJCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCWVsc2UKKwkJCXJldCA9IGNoZWNrX29rX3RvX3JlbW92ZShwYXRoLCBsZW4sIERUX1VOS05PV04sIE5VTEwsCisJCQkJCQkgJnN0LCBlcnJvcl90eXBlLCBvKTsKKwkJZnJlZShwYXRoKTsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKGxzdGF0KGNlLT5uYW1lLCAmc3QpKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBzdGF0ICclcyc6ICVzIiwgY2UtPm5hbWUsCisJCQkJICAgICBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlyZXR1cm4gY2hlY2tfb2tfdG9fcmVtb3ZlKGNlLT5uYW1lLCBjZV9uYW1lbGVuKGNlKSwKKwkJCQkJICBjZV90b19kdHlwZShjZSksIGNlLCAmc3QsCisJCQkJCSAgZXJyb3JfdHlwZSwgbyk7CisJfQorfQorCitzdGF0aWMgaW50IHZlcmlmeV9hYnNlbnQoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSwKKwkJCSBlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyBlcnJvcl90eXBlLAorCQkJIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbykKK3sKKwlpZiAoIW8tPnNraXBfc3BhcnNlX2NoZWNrb3V0ICYmIChjZS0+Y2VfZmxhZ3MgJiBDRV9ORVdfU0tJUF9XT1JLVFJFRSkpCisJCXJldHVybiAwOworCXJldHVybiB2ZXJpZnlfYWJzZW50XzEoY2UsIGVycm9yX3R5cGUsIG8pOworfQorCitzdGF0aWMgaW50IHZlcmlmeV9hYnNlbnRfc3BhcnNlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkJZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgZXJyb3JfdHlwZSwKKwkJCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJZW51bSB1bnBhY2tfdHJlZXNfZXJyb3JfdHlwZXMgb3JwaGFuZWRfZXJyb3IgPSBlcnJvcl90eXBlOworCWlmIChvcnBoYW5lZF9lcnJvciA9PSBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9PVkVSV1JJVFRFTikKKwkJb3JwaGFuZWRfZXJyb3IgPSBFUlJPUl9XT1VMRF9MT1NFX09SUEhBTkVEX09WRVJXUklUVEVOOworCisJcmV0dXJuIHZlcmlmeV9hYnNlbnRfMShjZSwgb3JwaGFuZWRfZXJyb3IsIG8pOworfQorCitzdGF0aWMgaW50IG1lcmdlZF9lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCisJCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJaW50IHVwZGF0ZSA9IENFX1VQREFURTsKKwlzdHJ1Y3QgY2FjaGVfZW50cnkgKm1lcmdlID0gZHVwX2VudHJ5KGNlKTsKKworCWlmICghb2xkKSB7CisJCS8qCisJCSAqIE5ldyBpbmRleCBlbnRyaWVzLiBJbiBzcGFyc2UgY2hlY2tvdXQsIHRoZSBmb2xsb3dpbmcKKwkJICogdmVyaWZ5X2Fic2VudCgpIHdpbGwgYmUgZGVsYXllZCB1bnRpbCBhZnRlcgorCQkgKiB0cmF2ZXJzZV90cmVlcygpIGZpbmlzaGVzIGluIHVucGFja190cmVlcygpLCB0aGVuOgorCQkgKgorCQkgKiAgLSBDRV9ORVdfU0tJUF9XT1JLVFJFRSB3aWxsIGJlIGNvbXB1dGVkIGNvcnJlY3RseQorCQkgKiAgLSB2ZXJpZnlfYWJzZW50KCkgYmUgY2FsbGVkIGFnYWluLCB0aGlzIHRpbWUgd2l0aAorCQkgKiAgICBjb3JyZWN0IENFX05FV19TS0lQX1dPUktUUkVFCisJCSAqCisJCSAqIHZlcmlmeV9hYnNlbnQoKSBjYWxsIGhlcmUgZG9lcyBub3RoaW5nIGluIHNwYXJzZQorCQkgKiBjaGVja291dCAoaS5lLiBvLT5za2lwX3NwYXJzZV9jaGVja291dCA9PSAwKQorCQkgKi8KKwkJdXBkYXRlIHw9IENFX0FEREVEOworCQltZXJnZS0+Y2VfZmxhZ3MgfD0gQ0VfTkVXX1NLSVBfV09SS1RSRUU7CisKKwkJaWYgKHZlcmlmeV9hYnNlbnQobWVyZ2UsCisJCQkJICBFUlJPUl9XT1VMRF9MT1NFX1VOVFJBQ0tFRF9PVkVSV1JJVFRFTiwgbykpIHsKKwkJCWZyZWUobWVyZ2UpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWludmFsaWRhdGVfY2VfcGF0aChtZXJnZSwgbyk7CisJfSBlbHNlIGlmICghKG9sZC0+Y2VfZmxhZ3MgJiBDRV9DT05GTElDVEVEKSkgeworCQkvKgorCQkgKiBTZWUgaWYgd2UgY2FuIHJlLXVzZSB0aGUgb2xkIENFIGRpcmVjdGx5PworCQkgKiBUaGF0IHdheSB3ZSBnZXQgdGhlIHVwdG9kYXRlIHN0YXQgaW5mby4KKwkJICoKKwkJICogVGhpcyBhbHNvIHJlbW92ZXMgdGhlIFVQREFURSBmbGFnIG9uIGEgbWF0Y2g7IG90aGVyd2lzZQorCQkgKiB3ZSB3aWxsIGVuZCB1cCBvdmVyd3JpdGluZyBsb2NhbCBjaGFuZ2VzIGluIHRoZSB3b3JrIHRyZWUuCisJCSAqLworCQlpZiAoc2FtZShvbGQsIG1lcmdlKSkgeworCQkJY29weV9jYWNoZV9lbnRyeShtZXJnZSwgb2xkKTsKKwkJCXVwZGF0ZSA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAodmVyaWZ5X3VwdG9kYXRlKG9sZCwgbykpIHsKKwkJCQlmcmVlKG1lcmdlKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQkvKiBNaWdyYXRlIG9sZCBmbGFncyBvdmVyICovCisJCQl1cGRhdGUgfD0gb2xkLT5jZV9mbGFncyAmIChDRV9TS0lQX1dPUktUUkVFIHwgQ0VfTkVXX1NLSVBfV09SS1RSRUUpOworCQkJaW52YWxpZGF0ZV9jZV9wYXRoKG9sZCwgbyk7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBQcmV2aW91c2x5IHVubWVyZ2VkIGVudHJ5IGxlZnQgYXMgYW4gZXhpc3RlbmNlCisJCSAqIG1hcmtlciBieSByZWFkX2luZGV4X3VubWVyZ2VkKCk7CisJCSAqLworCQlpbnZhbGlkYXRlX2NlX3BhdGgob2xkLCBvKTsKKwl9CisKKwlkb19hZGRfZW50cnkobywgbWVyZ2UsIHVwZGF0ZSwgQ0VfU1RBR0VNQVNLKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBkZWxldGVkX2VudHJ5KGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UsCisJCQkgY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQsCisJCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCS8qIERpZCBpdCBleGlzdCBpbiB0aGUgaW5kZXg/ICovCisJaWYgKCFvbGQpIHsKKwkJaWYgKHZlcmlmeV9hYnNlbnQoY2UsIEVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX1JFTU9WRUQsIG8pKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKCEob2xkLT5jZV9mbGFncyAmIENFX0NPTkZMSUNURUQpICYmIHZlcmlmeV91cHRvZGF0ZShvbGQsIG8pKQorCQlyZXR1cm4gLTE7CisJYWRkX2VudHJ5KG8sIGNlLCBDRV9SRU1PVkUsIDApOworCWludmFsaWRhdGVfY2VfcGF0aChjZSwgbyk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQga2VlcF9lbnRyeShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlLAorCQkgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJYWRkX2VudHJ5KG8sIGNlLCAwLCAwKTsKKwlyZXR1cm4gMTsKK30KKworI2lmIERCUlRfREVCVUcKK3N0YXRpYyB2b2lkIHNob3dfc3RhZ2VfZW50cnkoRklMRSAqbywKKwkJCSAgICAgY29uc3QgY2hhciAqbGFiZWwsIGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2UpCit7CisJaWYgKCFjZSkKKwkJZnByaW50ZihvLCAiJXMgKG1pc3NpbmcpXG4iLCBsYWJlbCk7CisJZWxzZQorCQlmcHJpbnRmKG8sICIlcyUwNm8gJXMgJWRcdCVzXG4iLAorCQkJbGFiZWwsCisJCQljZS0+Y2VfbW9kZSwKKwkJCXNoYTFfdG9faGV4KGNlLT5zaGExKSwKKwkJCWNlX3N0YWdlKGNlKSwKKwkJCWNlLT5uYW1lKTsKK30KKyNlbmRpZgorCitpbnQgdGhyZWV3YXlfbWVyZ2UoY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICogY29uc3QgKnN0YWdlcywKKwkJICAgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKQoreworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqaW5kZXg7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpoZWFkOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqcmVtb3RlID0gc3RhZ2VzW28tPmhlYWRfaWR4ICsgMV07CisJaW50IGNvdW50OworCWludCBoZWFkX21hdGNoID0gMDsKKwlpbnQgcmVtb3RlX21hdGNoID0gMDsKKworCWludCBkZl9jb25mbGljdF9oZWFkID0gMDsKKwlpbnQgZGZfY29uZmxpY3RfcmVtb3RlID0gMDsKKworCWludCBhbnlfYW5jX21pc3NpbmcgPSAwOworCWludCBub19hbmNfZXhpc3RzID0gMTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPCBvLT5oZWFkX2lkeDsgaSsrKSB7CisJCWlmICghc3RhZ2VzW2ldIHx8IHN0YWdlc1tpXSA9PSBvLT5kZl9jb25mbGljdF9lbnRyeSkKKwkJCWFueV9hbmNfbWlzc2luZyA9IDE7CisJCWVsc2UKKwkJCW5vX2FuY19leGlzdHMgPSAwOworCX0KKworCWluZGV4ID0gc3RhZ2VzWzBdOworCWhlYWQgPSBzdGFnZXNbby0+aGVhZF9pZHhdOworCisJaWYgKGhlYWQgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpIHsKKwkJZGZfY29uZmxpY3RfaGVhZCA9IDE7CisJCWhlYWQgPSBOVUxMOworCX0KKworCWlmIChyZW1vdGUgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpIHsKKwkJZGZfY29uZmxpY3RfcmVtb3RlID0gMTsKKwkJcmVtb3RlID0gTlVMTDsKKwl9CisKKwkvKgorCSAqIEZpcnN0LCBpZiB0aGVyZSdzIGEgIzE2IHNpdHVhdGlvbiwgbm90ZSB0aGF0IHRvIHByZXZlbnQgIzEzCisJICogYW5kICMxNC4KKwkgKi8KKwlpZiAoIXNhbWUocmVtb3RlLCBoZWFkKSkgeworCQlmb3IgKGkgPSAxOyBpIDwgby0+aGVhZF9pZHg7IGkrKykgeworCQkJaWYgKHNhbWUoc3RhZ2VzW2ldLCBoZWFkKSkgeworCQkJCWhlYWRfbWF0Y2ggPSBpOworCQkJfQorCQkJaWYgKHNhbWUoc3RhZ2VzW2ldLCByZW1vdGUpKSB7CisJCQkJcmVtb3RlX21hdGNoID0gaTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogV2Ugc3RhcnQgd2l0aCBjYXNlcyB3aGVyZSB0aGUgaW5kZXggaXMgYWxsb3dlZCB0byBtYXRjaAorCSAqIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBoZWFkOiAjMTQoQUxUKSBhbmQgIzJBTFQsIHdoZXJlIGl0CisJICogaXMgcGVybWl0dGVkIHRvIG1hdGNoIHRoZSByZXN1bHQgaW5zdGVhZC4KKwkgKi8KKwkvKiAjMTQsICMxNEFMVCwgIzJBTFQgKi8KKwlpZiAocmVtb3RlICYmICFkZl9jb25mbGljdF9oZWFkICYmIGhlYWRfbWF0Y2ggJiYgIXJlbW90ZV9tYXRjaCkgeworCQlpZiAoaW5kZXggJiYgIXNhbWUoaW5kZXgsIHJlbW90ZSkgJiYgIXNhbWUoaW5kZXgsIGhlYWQpKQorCQkJcmV0dXJuIHJlamVjdF9tZXJnZShpbmRleCwgbyk7CisJCXJldHVybiBtZXJnZWRfZW50cnkocmVtb3RlLCBpbmRleCwgbyk7CisJfQorCS8qCisJICogSWYgd2UgaGF2ZSBhbiBlbnRyeSBpbiB0aGUgaW5kZXggY2FjaGUsIHRoZW4gd2Ugd2FudCB0bworCSAqIG1ha2Ugc3VyZSB0aGF0IGl0IG1hdGNoZXMgaGVhZC4KKwkgKi8KKwlpZiAoaW5kZXggJiYgIXNhbWUoaW5kZXgsIGhlYWQpKQorCQlyZXR1cm4gcmVqZWN0X21lcmdlKGluZGV4LCBvKTsKKworCWlmIChoZWFkKSB7CisJCS8qICM1QUxULCAjMTUgKi8KKwkJaWYgKHNhbWUoaGVhZCwgcmVtb3RlKSkKKwkJCXJldHVybiBtZXJnZWRfZW50cnkoaGVhZCwgaW5kZXgsIG8pOworCQkvKiAjMTMsICMzQUxUICovCisJCWlmICghZGZfY29uZmxpY3RfcmVtb3RlICYmIHJlbW90ZV9tYXRjaCAmJiAhaGVhZF9tYXRjaCkKKwkJCXJldHVybiBtZXJnZWRfZW50cnkoaGVhZCwgaW5kZXgsIG8pOworCX0KKworCS8qICMxICovCisJaWYgKCFoZWFkICYmICFyZW1vdGUgJiYgYW55X2FuY19taXNzaW5nKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVW5kZXIgdGhlICJhZ2dyZXNzaXZlIiBydWxlLCB3ZSByZXNvbHZlIG1vc3RseSB0cml2aWFsCisJICogY2FzZXMgdGhhdCB3ZSBoaXN0b3JpY2FsbHkgaGFkIGdpdC1tZXJnZS1vbmUtZmlsZSByZXNvbHZlLgorCSAqLworCWlmIChvLT5hZ2dyZXNzaXZlKSB7CisJCWludCBoZWFkX2RlbGV0ZWQgPSAhaGVhZDsKKwkJaW50IHJlbW90ZV9kZWxldGVkID0gIXJlbW90ZTsKKwkJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjZSA9IE5VTEw7CisKKwkJaWYgKGluZGV4KQorCQkJY2UgPSBpbmRleDsKKwkJZWxzZSBpZiAoaGVhZCkKKwkJCWNlID0gaGVhZDsKKwkJZWxzZSBpZiAocmVtb3RlKQorCQkJY2UgPSByZW1vdGU7CisJCWVsc2UgeworCQkJZm9yIChpID0gMTsgaSA8IG8tPmhlYWRfaWR4OyBpKyspIHsKKwkJCQlpZiAoc3RhZ2VzW2ldICYmIHN0YWdlc1tpXSAhPSBvLT5kZl9jb25mbGljdF9lbnRyeSkgeworCQkJCQljZSA9IHN0YWdlc1tpXTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoKKwkJICogRGVsZXRlZCBpbiBib3RoLgorCQkgKiBEZWxldGVkIGluIG9uZSBhbmQgdW5jaGFuZ2VkIGluIHRoZSBvdGhlci4KKwkJICovCisJCWlmICgoaGVhZF9kZWxldGVkICYmIHJlbW90ZV9kZWxldGVkKSB8fAorCQkgICAgKGhlYWRfZGVsZXRlZCAmJiByZW1vdGUgJiYgcmVtb3RlX21hdGNoKSB8fAorCQkgICAgKHJlbW90ZV9kZWxldGVkICYmIGhlYWQgJiYgaGVhZF9tYXRjaCkpIHsKKwkJCWlmIChpbmRleCkKKwkJCQlyZXR1cm4gZGVsZXRlZF9lbnRyeShpbmRleCwgaW5kZXgsIG8pOworCQkJaWYgKGNlICYmICFoZWFkX2RlbGV0ZWQpIHsKKwkJCQlpZiAodmVyaWZ5X2Fic2VudChjZSwgRVJST1JfV09VTERfTE9TRV9VTlRSQUNLRURfUkVNT1ZFRCwgbykpCisJCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCXJldHVybiAwOworCQl9CisJCS8qCisJCSAqIEFkZGVkIGluIGJvdGgsIGlkZW50aWNhbGx5LgorCQkgKi8KKwkJaWYgKG5vX2FuY19leGlzdHMgJiYgaGVhZCAmJiByZW1vdGUgJiYgc2FtZShoZWFkLCByZW1vdGUpKQorCQkJcmV0dXJuIG1lcmdlZF9lbnRyeShoZWFkLCBpbmRleCwgbyk7CisKKwl9CisKKwkvKiBCZWxvdyBhcmUgIm5vIG1lcmdlIiBjYXNlcywgd2hpY2ggcmVxdWlyZSB0aGF0IHRoZSBpbmRleCBiZQorCSAqIHVwLXRvLWRhdGUgdG8gYXZvaWQgdGhlIGZpbGVzIGdldHRpbmcgb3ZlcndyaXR0ZW4gd2l0aAorCSAqIGNvbmZsaWN0IHJlc29sdXRpb24gZmlsZXMuCisJICovCisJaWYgKGluZGV4KSB7CisJCWlmICh2ZXJpZnlfdXB0b2RhdGUoaW5kZXgsIG8pKQorCQkJcmV0dXJuIC0xOworCX0KKworCW8tPm5vbnRyaXZpYWxfbWVyZ2UgPSAxOworCisJLyogIzIsICMzLCAjNCwgIzYsICM3LCAjOSwgIzEwLCAjMTEuICovCisJY291bnQgPSAwOworCWlmICghaGVhZF9tYXRjaCB8fCAhcmVtb3RlX21hdGNoKSB7CisJCWZvciAoaSA9IDE7IGkgPCBvLT5oZWFkX2lkeDsgaSsrKSB7CisJCQlpZiAoc3RhZ2VzW2ldICYmIHN0YWdlc1tpXSAhPSBvLT5kZl9jb25mbGljdF9lbnRyeSkgeworCQkJCWtlZXBfZW50cnkoc3RhZ2VzW2ldLCBvKTsKKwkJCQljb3VudCsrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorI2lmIERCUlRfREVCVUcKKwllbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICJyZWFkLXRyZWU6IHdhcm5pbmcgIzE2IGRldGVjdGVkXG4iKTsKKwkJc2hvd19zdGFnZV9lbnRyeShzdGRlcnIsICJoZWFkICAgIiwgc3RhZ2VzW2hlYWRfbWF0Y2hdKTsKKwkJc2hvd19zdGFnZV9lbnRyeShzdGRlcnIsICJyZW1vdGUgIiwgc3RhZ2VzW3JlbW90ZV9tYXRjaF0pOworCX0KKyNlbmRpZgorCWlmIChoZWFkKSB7IGNvdW50ICs9IGtlZXBfZW50cnkoaGVhZCwgbyk7IH0KKwlpZiAocmVtb3RlKSB7IGNvdW50ICs9IGtlZXBfZW50cnkocmVtb3RlLCBvKTsgfQorCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIFR3by13YXkgbWVyZ2UuCisgKgorICogVGhlIHJ1bGUgaXMgdG8gImNhcnJ5IGZvcndhcmQiIHdoYXQgaXMgaW4gdGhlIGluZGV4IHdpdGhvdXQgbG9zaW5nCisgKiBpbmZvcm1hdGlvbiBhY3Jvc3MgYSAiZmFzdC1mb3J3YXJkIiwgZmF2b3JpbmcgYSBzdWNjZXNzZnVsIG1lcmdlCisgKiBvdmVyIGEgbWVyZ2UgZmFpbHVyZSB3aGVuIGl0IG1ha2VzIHNlbnNlLiAgRm9yIGRldGFpbHMgb2YgdGhlCisgKiAiY2FycnkgZm9yd2FyZCIgcnVsZSwgcGxlYXNlIHNlZSA8RG9jdW1lbnRhdGlvbi9naXQtcmVhZC10cmVlLnR4dD4uCisgKgorICovCitpbnQgdHdvd2F5X21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpjdXJyZW50ID0gc3JjWzBdOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqb2xkdHJlZSA9IHNyY1sxXTsKKwljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKm5ld3RyZWUgPSBzcmNbMl07CisKKwlpZiAoby0+bWVyZ2Vfc2l6ZSAhPSAyKQorCQlyZXR1cm4gZXJyb3IoIkNhbm5vdCBkbyBhIHR3b3dheSBtZXJnZSBvZiAlZCB0cmVlcyIsCisJCQkgICAgIG8tPm1lcmdlX3NpemUpOworCisJaWYgKG9sZHRyZWUgPT0gby0+ZGZfY29uZmxpY3RfZW50cnkpCisJCW9sZHRyZWUgPSBOVUxMOworCWlmIChuZXd0cmVlID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQluZXd0cmVlID0gTlVMTDsKKworCWlmIChjdXJyZW50KSB7CisJCWlmIChjdXJyZW50LT5jZV9mbGFncyAmIENFX0NPTkZMSUNURUQpIHsKKwkJCWlmIChzYW1lKG9sZHRyZWUsIG5ld3RyZWUpIHx8IG8tPnJlc2V0KSB7CisJCQkJaWYgKCFuZXd0cmVlKQorCQkJCQlyZXR1cm4gZGVsZXRlZF9lbnRyeShjdXJyZW50LCBjdXJyZW50LCBvKTsKKwkJCQllbHNlCisJCQkJCXJldHVybiBtZXJnZWRfZW50cnkobmV3dHJlZSwgY3VycmVudCwgbyk7CisJCQl9CisJCQlyZXR1cm4gcmVqZWN0X21lcmdlKGN1cnJlbnQsIG8pOworCQl9IGVsc2UgaWYgKCghb2xkdHJlZSAmJiAhbmV3dHJlZSkgfHwgLyogNCBhbmQgNSAqLworCQkJICghb2xkdHJlZSAmJiBuZXd0cmVlICYmCisJCQkgIHNhbWUoY3VycmVudCwgbmV3dHJlZSkpIHx8IC8qIDYgYW5kIDcgKi8KKwkJCSAob2xkdHJlZSAmJiBuZXd0cmVlICYmCisJCQkgIHNhbWUob2xkdHJlZSwgbmV3dHJlZSkpIHx8IC8qIDE0IGFuZCAxNSAqLworCQkJIChvbGR0cmVlICYmIG5ld3RyZWUgJiYKKwkJCSAgIXNhbWUob2xkdHJlZSwgbmV3dHJlZSkgJiYgLyogMTggYW5kIDE5ICovCisJCQkgIHNhbWUoY3VycmVudCwgbmV3dHJlZSkpKSB7CisJCQlyZXR1cm4ga2VlcF9lbnRyeShjdXJyZW50LCBvKTsKKwkJfSBlbHNlIGlmIChvbGR0cmVlICYmICFuZXd0cmVlICYmIHNhbWUoY3VycmVudCwgb2xkdHJlZSkpIHsKKwkJCS8qIDEwIG9yIDExICovCisJCQlyZXR1cm4gZGVsZXRlZF9lbnRyeShvbGR0cmVlLCBjdXJyZW50LCBvKTsKKwkJfSBlbHNlIGlmIChvbGR0cmVlICYmIG5ld3RyZWUgJiYKKwkJCSBzYW1lKGN1cnJlbnQsIG9sZHRyZWUpICYmICFzYW1lKGN1cnJlbnQsIG5ld3RyZWUpKSB7CisJCQkvKiAyMCBvciAyMSAqLworCQkJcmV0dXJuIG1lcmdlZF9lbnRyeShuZXd0cmVlLCBjdXJyZW50LCBvKTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gcmVqZWN0X21lcmdlKGN1cnJlbnQsIG8pOworCX0KKwllbHNlIGlmIChuZXd0cmVlKSB7CisJCWlmIChvbGR0cmVlICYmICFvLT5pbml0aWFsX2NoZWNrb3V0KSB7CisJCQkvKgorCQkJICogZGVsZXRpb24gb2YgdGhlIHBhdGggd2FzIHN0YWdlZDsKKwkJCSAqLworCQkJaWYgKHNhbWUob2xkdHJlZSwgbmV3dHJlZSkpCisJCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gcmVqZWN0X21lcmdlKG9sZHRyZWUsIG8pOworCQl9CisJCXJldHVybiBtZXJnZWRfZW50cnkobmV3dHJlZSwgY3VycmVudCwgbyk7CisJfQorCXJldHVybiBkZWxldGVkX2VudHJ5KG9sZHRyZWUsIGN1cnJlbnQsIG8pOworfQorCisvKgorICogQmluZCBtZXJnZS4KKyAqCisgKiBLZWVwIHRoZSBpbmRleCBlbnRyaWVzIGF0IHN0YWdlMCwgY29sbGFwc2Ugc3RhZ2UxIGJ1dCBtYWtlIHN1cmUKKyAqIHN0YWdlMCBkb2VzIG5vdCBoYXZlIGFueXRoaW5nIHRoZXJlLgorICovCitpbnQgYmluZF9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCSAgICAgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBzcmNbMF07CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICphID0gc3JjWzFdOworCisJaWYgKG8tPm1lcmdlX3NpemUgIT0gMSkKKwkJcmV0dXJuIGVycm9yKCJDYW5ub3QgZG8gYSBiaW5kIG1lcmdlIG9mICVkIHRyZWVzIiwKKwkJCSAgICAgby0+bWVyZ2Vfc2l6ZSk7CisJaWYgKGEgJiYgb2xkKQorCQlyZXR1cm4gby0+Z2VudGx5ID8gLTEgOgorCQkJZXJyb3IoRVJST1JNU0cobywgRVJST1JfQklORF9PVkVSTEFQKSwgYS0+bmFtZSwgb2xkLT5uYW1lKTsKKwlpZiAoIWEpCisJCXJldHVybiBrZWVwX2VudHJ5KG9sZCwgbyk7CisJZWxzZQorCQlyZXR1cm4gbWVyZ2VkX2VudHJ5KGEsIE5VTEwsIG8pOworfQorCisvKgorICogT25lLXdheSBtZXJnZS4KKyAqCisgKiBUaGUgcnVsZSBpczoKKyAqIC0gdGFrZSB0aGUgc3RhdCBpbmZvcm1hdGlvbiBmcm9tIHN0YWdlMCwgdGFrZSB0aGUgZGF0YSBmcm9tIHN0YWdlMQorICovCitpbnQgb25ld2F5X21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pCit7CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICpvbGQgPSBzcmNbMF07CisJY29uc3Qgc3RydWN0IGNhY2hlX2VudHJ5ICphID0gc3JjWzFdOworCisJaWYgKG8tPm1lcmdlX3NpemUgIT0gMSkKKwkJcmV0dXJuIGVycm9yKCJDYW5ub3QgZG8gYSBvbmV3YXkgbWVyZ2Ugb2YgJWQgdHJlZXMiLAorCQkJICAgICBvLT5tZXJnZV9zaXplKTsKKworCWlmICghYSB8fCBhID09IG8tPmRmX2NvbmZsaWN0X2VudHJ5KQorCQlyZXR1cm4gZGVsZXRlZF9lbnRyeShvbGQsIG9sZCwgbyk7CisKKwlpZiAob2xkICYmIHNhbWUob2xkLCBhKSkgeworCQlpbnQgdXBkYXRlID0gMDsKKwkJaWYgKG8tPnJlc2V0ICYmIG8tPnVwZGF0ZSAmJiAhY2VfdXB0b2RhdGUob2xkKSAmJiAhY2Vfc2tpcF93b3JrdHJlZShvbGQpKSB7CisJCQlzdHJ1Y3Qgc3RhdCBzdDsKKwkJCWlmIChsc3RhdChvbGQtPm5hbWUsICZzdCkgfHwKKwkJCSAgICBpZV9tYXRjaF9zdGF0KG8tPnNyY19pbmRleCwgb2xkLCAmc3QsIENFX01BVENIX0lHTk9SRV9WQUxJRHxDRV9NQVRDSF9JR05PUkVfU0tJUF9XT1JLVFJFRSkpCisJCQkJdXBkYXRlIHw9IENFX1VQREFURTsKKwkJfQorCQlhZGRfZW50cnkobywgb2xkLCB1cGRhdGUsIDApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIG1lcmdlZF9lbnRyeShhLCBvbGQsIG8pOworfQpkaWZmIC0tZ2l0IGEvdW5wYWNrLXRyZWVzLmggYi91bnBhY2stdHJlZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmE3M2E2Ci0tLSAvZGV2L251bGwKKysrIGIvdW5wYWNrLXRyZWVzLmgKQEAgLTAsMCArMSw4OSBAQAorI2lmbmRlZiBVTlBBQ0tfVFJFRVNfSAorI2RlZmluZSBVTlBBQ0tfVFJFRVNfSAorCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworI2RlZmluZSBNQVhfVU5QQUNLX1RSRUVTIDgKKworc3RydWN0IHVucGFja190cmVlc19vcHRpb25zOworc3RydWN0IGV4Y2x1ZGVfbGlzdDsKKwordHlwZWRlZiBpbnQgKCptZXJnZV9mbl90KShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCQlzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm9wdGlvbnMpOworCitlbnVtIHVucGFja190cmVlc19lcnJvcl90eXBlcyB7CisJRVJST1JfV09VTERfT1ZFUldSSVRFID0gMCwKKwlFUlJPUl9OT1RfVVBUT0RBVEVfRklMRSwKKwlFUlJPUl9OT1RfVVBUT0RBVEVfRElSLAorCUVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX09WRVJXUklUVEVOLAorCUVSUk9SX1dPVUxEX0xPU0VfVU5UUkFDS0VEX1JFTU9WRUQsCisJRVJST1JfQklORF9PVkVSTEFQLAorCUVSUk9SX1NQQVJTRV9OT1RfVVBUT0RBVEVfRklMRSwKKwlFUlJPUl9XT1VMRF9MT1NFX09SUEhBTkVEX09WRVJXUklUVEVOLAorCUVSUk9SX1dPVUxEX0xPU0VfT1JQSEFORURfUkVNT1ZFRCwKKwlOQl9VTlBBQ0tfVFJFRVNfRVJST1JfVFlQRVMKK307CisKKy8qCisgKiBTZXRzIHRoZSBsaXN0IG9mIHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZXMgdG8gYmUgdXNlZCBieSB0aGUKKyAqIGNvbW1hbmQgImNtZCIgKGVpdGhlciBtZXJnZSBvciBjaGVja291dCksIGFuZCBzaG93X2FsbF9lcnJvcnMgdG8gMS4KKyAqLwordm9pZCBzZXR1cF91bnBhY2tfdHJlZXNfcG9yY2VsYWluKHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqb3B0cywKKwkJCQkgIGNvbnN0IGNoYXIgKmNtZCk7CisKK3N0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyB7CisJdW5zaWduZWQgaW50IHJlc2V0LAorCQkgICAgIG1lcmdlLAorCQkgICAgIHVwZGF0ZSwKKwkJICAgICBpbmRleF9vbmx5LAorCQkgICAgIG5vbnRyaXZpYWxfbWVyZ2UsCisJCSAgICAgdHJpdmlhbF9tZXJnZXNfb25seSwKKwkJICAgICB2ZXJib3NlX3VwZGF0ZSwKKwkJICAgICBhZ2dyZXNzaXZlLAorCQkgICAgIHNraXBfdW5tZXJnZWQsCisJCSAgICAgaW5pdGlhbF9jaGVja291dCwKKwkJICAgICBkaWZmX2luZGV4X2NhY2hlZCwKKwkJICAgICBkZWJ1Z191bnBhY2ssCisJCSAgICAgc2tpcF9zcGFyc2VfY2hlY2tvdXQsCisJCSAgICAgZ2VudGx5LAorCQkgICAgIGV4aXRpbmdfZWFybHksCisJCSAgICAgc2hvd19hbGxfZXJyb3JzLAorCQkgICAgIGRyeV9ydW47CisJY29uc3QgY2hhciAqcHJlZml4OworCWludCBjYWNoZV9ib3R0b207CisJc3RydWN0IGRpcl9zdHJ1Y3QgKmRpcjsKKwlzdHJ1Y3QgcGF0aHNwZWMgKnBhdGhzcGVjOworCW1lcmdlX2ZuX3QgZm47CisJY29uc3QgY2hhciAqbXNnc1tOQl9VTlBBQ0tfVFJFRVNfRVJST1JfVFlQRVNdOworCS8qCisJICogU3RvcmUgZXJyb3IgbWVzc2FnZXMgaW4gYW4gYXJyYXksIGVhY2ggY2FzZQorCSAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlcnJvciBtZXNzYWdlIHR5cGUKKwkgKi8KKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdW5wYWNrX3JlamVjdHNbTkJfVU5QQUNLX1RSRUVTX0VSUk9SX1RZUEVTXTsKKworCWludCBoZWFkX2lkeDsKKwlpbnQgbWVyZ2Vfc2l6ZTsKKworCXN0cnVjdCBjYWNoZV9lbnRyeSAqZGZfY29uZmxpY3RfZW50cnk7CisJdm9pZCAqdW5wYWNrX2RhdGE7CisKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKmRzdF9pbmRleDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgKnNyY19pbmRleDsKKwlzdHJ1Y3QgaW5kZXhfc3RhdGUgcmVzdWx0OworCisJc3RydWN0IGV4Y2x1ZGVfbGlzdCAqZWw7IC8qIGZvciBpbnRlcm5hbCB1c2UgKi8KK307CisKK2V4dGVybiBpbnQgdW5wYWNrX3RyZWVzKHVuc2lnbmVkIG4sIHN0cnVjdCB0cmVlX2Rlc2MgKnQsCisJCXN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqb3B0aW9ucyk7CisKK2ludCB0aHJlZXdheV9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3RhZ2VzLAorCQkgICBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworaW50IHR3b3dheV9tZXJnZShjb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKiBjb25zdCAqc3JjLAorCQkgc3RydWN0IHVucGFja190cmVlc19vcHRpb25zICpvKTsKK2ludCBiaW5kX21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJICAgICAgIHN0cnVjdCB1bnBhY2tfdHJlZXNfb3B0aW9ucyAqbyk7CitpbnQgb25ld2F5X21lcmdlKGNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqIGNvbnN0ICpzcmMsCisJCSBzdHJ1Y3QgdW5wYWNrX3RyZWVzX29wdGlvbnMgKm8pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3VwZGF0ZV91bmljb2RlLnNoIGIvdXBkYXRlX3VuaWNvZGUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjdhZjc3YwotLS0gL2Rldi9udWxsCisrKyBiL3VwZGF0ZV91bmljb2RlLnNoCkBAIC0wLDAgKzEsNDAgQEAKKyMhL2Jpbi9zaAorI1NlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHI0NC8KKyMKKyNNZSBFbmNsb3NpbmdfTWFyayAgYW4gZW5jbG9zaW5nIGNvbWJpbmluZyBtYXJrCisjTW4gTm9uc3BhY2luZ19NYXJrIGEgbm9uc3BhY2luZyBjb21iaW5pbmcgbWFyayAoemVybyBhZHZhbmNlIHdpZHRoKQorI0NmIEZvcm1hdCAgICAgICAgICBhIGZvcm1hdCBjb250cm9sIGNoYXJhY3RlcgorIworVU5JQ09ERVdJRFRIX0g9Li4vdW5pY29kZV93aWR0aC5oCitpZiAhIHRlc3QgLWQgdW5pY29kZTsgdGhlbgorCW1rZGlyIHVuaWNvZGUKK2ZpICYmCisoIGNkIHVuaWNvZGUgJiYKKwlpZiAhIHRlc3QgLWYgVW5pY29kZURhdGEudHh0OyB0aGVuCisJCXdnZXQgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVUNEL2xhdGVzdC91Y2QvVW5pY29kZURhdGEudHh0CisJZmkgJiYKKwlpZiAhIHRlc3QgLWYgRWFzdEFzaWFuV2lkdGgudHh0OyB0aGVuCisJCXdnZXQgaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvVUNEL2xhdGVzdC91Y2QvRWFzdEFzaWFuV2lkdGgudHh0CisJZmkgJiYKKwlpZiAhIHRlc3QgLWQgdW5pc2V0OyB0aGVuCisJCWdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vZGVwcC91bmlzZXQuZ2l0CisJZmkgJiYKKwkoCisJCWNkIHVuaXNldCAmJgorCQlpZiAhIHRlc3QgLXggdW5pc2V0OyB0aGVuCisJCQlhdXRvcmVjb25mIC1pICYmCisJCQkuL2NvbmZpZ3VyZSAtLWVuYWJsZS13YXJuaW5ncz0tV2Vycm9yIENGTEFHUz0nLU8wIC1nZ2RiJworCQlmaSAmJgorCQltYWtlCisJKSAmJgorCVVOSUNPREVfRElSPS4gJiYgZXhwb3J0IFVOSUNPREVfRElSICYmCisJY2F0ID4kVU5JQ09ERVdJRFRIX0ggPDwtRU9GCisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlcnZhbCB6ZXJvX3dpZHRoW10gPSB7CisJCSQodW5pc2V0L3VuaXNldCAtLTMyIGNhdDpNZSxNbixDZiArIFUrMTE2MC4uVSsxMUZGIC0gVSswMEFEIHwKKwkJICBncmVwIC12IHBsYW5lKQorCX07CisJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRlcnZhbCBkb3VibGVfd2lkdGhbXSA9IHsKKwkJJCh1bmlzZXQvdW5pc2V0IC0tMzIgZWF3OkYsVykKKwl9OworCUVPRgorKQpkaWZmIC0tZ2l0IGEvdXBsb2FkLXBhY2suYyBiL3VwbG9hZC1wYWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODllODMyYgotLS0gL2Rldi9udWxsCisrKyBiL3VwbG9hZC1wYWNrLmMKQEAgLTAsMCArMSw4NzUgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJwa3QtbGluZS5oIgorI2luY2x1ZGUgInNpZGViYW5kLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAib2JqZWN0LmgiCisjaW5jbHVkZSAiY29tbWl0LmgiCisjaW5jbHVkZSAiZXhlY19jbWQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJsaXN0LW9iamVjdHMuaCIKKyNpbmNsdWRlICJydW4tY29tbWFuZC5oIgorI2luY2x1ZGUgImNvbm5lY3QuaCIKKyNpbmNsdWRlICJzaWdjaGFpbi5oIgorI2luY2x1ZGUgInZlcnNpb24uaCIKKyNpbmNsdWRlICJzdHJpbmctbGlzdC5oIgorCitzdGF0aWMgY29uc3QgY2hhciB1cGxvYWRfcGFja191c2FnZVtdID0gImdpdCB1cGxvYWQtcGFjayBbLS1zdHJpY3RdIFstLXRpbWVvdXQ9PG4+XSA8ZGlyPiI7CisKKy8qIFJlbWVtYmVyIHRvIHVwZGF0ZSBvYmplY3QgZmxhZyBhbGxvY2F0aW9uIGluIG9iamVjdC5oICovCisjZGVmaW5lIFRIRVlfSEFWRQkoMXUgPDwgMTEpCisjZGVmaW5lIE9VUl9SRUYJCSgxdSA8PCAxMikKKyNkZWZpbmUgV0FOVEVECQkoMXUgPDwgMTMpCisjZGVmaW5lIENPTU1PTl9LTk9XTgkoMXUgPDwgMTQpCisjZGVmaW5lIFJFQUNIQUJMRQkoMXUgPDwgMTUpCisKKyNkZWZpbmUgU0hBTExPVwkJKDF1IDw8IDE2KQorI2RlZmluZSBOT1RfU0hBTExPVwkoMXUgPDwgMTcpCisjZGVmaW5lIENMSUVOVF9TSEFMTE9XCSgxdSA8PCAxOCkKKyNkZWZpbmUgSElEREVOX1JFRgkoMXUgPDwgMTkpCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9sZGVzdF9oYXZlOworCitzdGF0aWMgaW50IG11bHRpX2FjazsKK3N0YXRpYyBpbnQgbm9fZG9uZTsKK3N0YXRpYyBpbnQgdXNlX3RoaW5fcGFjaywgdXNlX29mc19kZWx0YSwgdXNlX2luY2x1ZGVfdGFnOworc3RhdGljIGludCBub19wcm9ncmVzcywgZGFlbW9uX21vZGU7CisvKiBBbGxvdyBzcGVjaWZ5aW5nIHNoYTEgaWYgaXQgaXMgYSByZWYgdGlwLiAqLworI2RlZmluZSBBTExPV19USVBfU0hBMQkwMQorLyogQWxsb3cgcmVxdWVzdCBvZiBhIHNoYTEgaWYgaXQgaXMgcmVhY2hhYmxlIGZyb20gYSByZWYgKHBvc3NpYmx5IGhpZGRlbiByZWYpLiAqLworI2RlZmluZSBBTExPV19SRUFDSEFCTEVfU0hBMQkwMgorc3RhdGljIHVuc2lnbmVkIGludCBhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3Q7CitzdGF0aWMgaW50IHNoYWxsb3dfbnI7CitzdGF0aWMgc3RydWN0IG9iamVjdF9hcnJheSBoYXZlX29iajsKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2FycmF5IHdhbnRfb2JqOworc3RhdGljIHN0cnVjdCBvYmplY3RfYXJyYXkgZXh0cmFfZWRnZV9vYmo7CitzdGF0aWMgdW5zaWduZWQgaW50IHRpbWVvdXQ7CitzdGF0aWMgaW50IGtlZXBhbGl2ZSA9IDU7CisvKiAwIGZvciBubyBzaWRlYmFuZCwKKyAqIG90aGVyd2lzZSBtYXhpbXVtIHBhY2tldCBzaXplICh1cCB0byA2NTUyMCBieXRlcykuCisgKi8KK3N0YXRpYyBpbnQgdXNlX3NpZGViYW5kOworc3RhdGljIGludCBhZHZlcnRpc2VfcmVmczsKK3N0YXRpYyBpbnQgc3RhdGVsZXNzX3JwYzsKKworc3RhdGljIHZvaWQgcmVzZXRfdGltZW91dCh2b2lkKQoreworCWFsYXJtKHRpbWVvdXQpOworfQorCitzdGF0aWMgc3NpemVfdCBzZW5kX2NsaWVudF9kYXRhKGludCBmZCwgY29uc3QgY2hhciAqZGF0YSwgc3NpemVfdCBzeikKK3sKKwlpZiAodXNlX3NpZGViYW5kKQorCQlyZXR1cm4gc2VuZF9zaWRlYmFuZCgxLCBmZCwgZGF0YSwgc3osIHVzZV9zaWRlYmFuZCk7CisJaWYgKGZkID09IDMpCisJCS8qIGVtZXJnZW5jeSBxdWl0ICovCisJCWZkID0gMjsKKwlpZiAoZmQgPT0gMikgeworCQkvKiBYWFg6IGFyZSB3ZSBoYXBweSB0byBsb3NlIHN0dWZmIGhlcmU/ICovCisJCXh3cml0ZShmZCwgZGF0YSwgc3opOworCQlyZXR1cm4gc3o7CisJfQorCXdyaXRlX29yX2RpZShmZCwgZGF0YSwgc3opOworCXJldHVybiBzejsKK30KKworc3RhdGljIGludCB3cml0ZV9vbmVfc2hhbGxvdyhjb25zdCBzdHJ1Y3QgY29tbWl0X2dyYWZ0ICpncmFmdCwgdm9pZCAqY2JfZGF0YSkKK3sKKwlGSUxFICpmcCA9IGNiX2RhdGE7CisJaWYgKGdyYWZ0LT5ucl9wYXJlbnQgPT0gLTEpCisJCWZwcmludGYoZnAsICItLXNoYWxsb3cgJXNcbiIsIG9pZF90b19oZXgoJmdyYWZ0LT5vaWQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX3BhY2tfZmlsZSh2b2lkKQoreworCXN0cnVjdCBjaGlsZF9wcm9jZXNzIHBhY2tfb2JqZWN0cyA9IENISUxEX1BST0NFU1NfSU5JVDsKKwljaGFyIGRhdGFbODE5M10sIHByb2dyZXNzWzEyOF07CisJY2hhciBhYm9ydF9tc2dbXSA9ICJhYm9ydGluZyBkdWUgdG8gcG9zc2libGUgcmVwb3NpdG9yeSAiCisJCSJjb3JydXB0aW9uIG9uIHRoZSByZW1vdGUgc2lkZS4iOworCWludCBidWZmZXJlZCA9IC0xOworCXNzaXplX3Qgc3o7CisJY29uc3QgY2hhciAqYXJndlsxM107CisJaW50IGksIGFyZyA9IDA7CisJRklMRSAqcGlwZV9mZDsKKworCWlmIChzaGFsbG93X25yKSB7CisJCWFyZ3ZbYXJnKytdID0gIi0tc2hhbGxvdy1maWxlIjsKKwkJYXJndlthcmcrK10gPSAiIjsKKwl9CisJYXJndlthcmcrK10gPSAicGFjay1vYmplY3RzIjsKKwlhcmd2W2FyZysrXSA9ICItLXJldnMiOworCWlmICh1c2VfdGhpbl9wYWNrKQorCQlhcmd2W2FyZysrXSA9ICItLXRoaW4iOworCisJYXJndlthcmcrK10gPSAiLS1zdGRvdXQiOworCWlmIChzaGFsbG93X25yKQorCQlhcmd2W2FyZysrXSA9ICItLXNoYWxsb3ciOworCWlmICghbm9fcHJvZ3Jlc3MpCisJCWFyZ3ZbYXJnKytdID0gIi0tcHJvZ3Jlc3MiOworCWlmICh1c2Vfb2ZzX2RlbHRhKQorCQlhcmd2W2FyZysrXSA9ICItLWRlbHRhLWJhc2Utb2Zmc2V0IjsKKwlpZiAodXNlX2luY2x1ZGVfdGFnKQorCQlhcmd2W2FyZysrXSA9ICItLWluY2x1ZGUtdGFnIjsKKwlhcmd2W2FyZysrXSA9IE5VTEw7CisKKwlwYWNrX29iamVjdHMuaW4gPSAtMTsKKwlwYWNrX29iamVjdHMub3V0ID0gLTE7CisJcGFja19vYmplY3RzLmVyciA9IC0xOworCXBhY2tfb2JqZWN0cy5naXRfY21kID0gMTsKKwlwYWNrX29iamVjdHMuYXJndiA9IGFyZ3Y7CisKKwlpZiAoc3RhcnRfY29tbWFuZCgmcGFja19vYmplY3RzKSkKKwkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IHVuYWJsZSB0byBmb3JrIGdpdC1wYWNrLW9iamVjdHMiKTsKKworCXBpcGVfZmQgPSB4ZmRvcGVuKHBhY2tfb2JqZWN0cy5pbiwgInciKTsKKworCWlmIChzaGFsbG93X25yKQorCQlmb3JfZWFjaF9jb21taXRfZ3JhZnQod3JpdGVfb25lX3NoYWxsb3csIHBpcGVfZmQpOworCisJZm9yIChpID0gMDsgaSA8IHdhbnRfb2JqLm5yOyBpKyspCisJCWZwcmludGYocGlwZV9mZCwgIiVzXG4iLAorCQkJc2hhMV90b19oZXgod2FudF9vYmoub2JqZWN0c1tpXS5pdGVtLT5zaGExKSk7CisJZnByaW50ZihwaXBlX2ZkLCAiLS1ub3RcbiIpOworCWZvciAoaSA9IDA7IGkgPCBoYXZlX29iai5ucjsgaSsrKQorCQlmcHJpbnRmKHBpcGVfZmQsICIlc1xuIiwKKwkJCXNoYTFfdG9faGV4KGhhdmVfb2JqLm9iamVjdHNbaV0uaXRlbS0+c2hhMSkpOworCWZvciAoaSA9IDA7IGkgPCBleHRyYV9lZGdlX29iai5ucjsgaSsrKQorCQlmcHJpbnRmKHBpcGVfZmQsICIlc1xuIiwKKwkJCXNoYTFfdG9faGV4KGV4dHJhX2VkZ2Vfb2JqLm9iamVjdHNbaV0uaXRlbS0+c2hhMSkpOworCWZwcmludGYocGlwZV9mZCwgIlxuIik7CisJZmZsdXNoKHBpcGVfZmQpOworCWZjbG9zZShwaXBlX2ZkKTsKKworCS8qIFdlIHJlYWQgZnJvbSBwYWNrX29iamVjdHMuZXJyIHRvIGNhcHR1cmUgc3RkZXJyIG91dHB1dCBmb3IKKwkgKiBwcm9ncmVzcyBiYXIsIGFuZCBwYWNrX29iamVjdHMub3V0IHRvIGNhcHR1cmUgdGhlIHBhY2sgZGF0YS4KKwkgKi8KKworCXdoaWxlICgxKSB7CisJCXN0cnVjdCBwb2xsZmQgcGZkWzJdOworCQlpbnQgcGUsIHB1LCBwb2xsc2l6ZTsKKwkJaW50IHJldDsKKworCQlyZXNldF90aW1lb3V0KCk7CisKKwkJcG9sbHNpemUgPSAwOworCQlwZSA9IHB1ID0gLTE7CisKKwkJaWYgKDAgPD0gcGFja19vYmplY3RzLm91dCkgeworCQkJcGZkW3BvbGxzaXplXS5mZCA9IHBhY2tfb2JqZWN0cy5vdXQ7CisJCQlwZmRbcG9sbHNpemVdLmV2ZW50cyA9IFBPTExJTjsKKwkJCXB1ID0gcG9sbHNpemU7CisJCQlwb2xsc2l6ZSsrOworCQl9CisJCWlmICgwIDw9IHBhY2tfb2JqZWN0cy5lcnIpIHsKKwkJCXBmZFtwb2xsc2l6ZV0uZmQgPSBwYWNrX29iamVjdHMuZXJyOworCQkJcGZkW3BvbGxzaXplXS5ldmVudHMgPSBQT0xMSU47CisJCQlwZSA9IHBvbGxzaXplOworCQkJcG9sbHNpemUrKzsKKwkJfQorCisJCWlmICghcG9sbHNpemUpCisJCQlicmVhazsKKworCQlyZXQgPSBwb2xsKHBmZCwgcG9sbHNpemUsCisJCQlrZWVwYWxpdmUgPCAwID8gLTEgOiAxMDAwICoga2VlcGFsaXZlKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJaWYgKGVycm5vICE9IEVJTlRSKSB7CisJCQkJZXJyb3IoInBvbGwgZmFpbGVkLCByZXN1bWluZzogJXMiLAorCQkJCSAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJCQkJc2xlZXAoMSk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoMCA8PSBwZSAmJiAocGZkW3BlXS5yZXZlbnRzICYgKFBPTExJTnxQT0xMSFVQKSkpIHsKKwkJCS8qIFN0YXR1cyByZWFkeTsgd2Ugc2hpcCB0aGF0IGluIHRoZSBzaWRlLWJhbmQKKwkJCSAqIG9yIGR1bXAgdG8gdGhlIHN0YW5kYXJkIGVycm9yLgorCQkJICovCisJCQlzeiA9IHhyZWFkKHBhY2tfb2JqZWN0cy5lcnIsIHByb2dyZXNzLAorCQkJCSAgc2l6ZW9mKHByb2dyZXNzKSk7CisJCQlpZiAoMCA8IHN6KQorCQkJCXNlbmRfY2xpZW50X2RhdGEoMiwgcHJvZ3Jlc3MsIHN6KTsKKwkJCWVsc2UgaWYgKHN6ID09IDApIHsKKwkJCQljbG9zZShwYWNrX29iamVjdHMuZXJyKTsKKwkJCQlwYWNrX29iamVjdHMuZXJyID0gLTE7CisJCQl9CisJCQllbHNlCisJCQkJZ290byBmYWlsOworCQkJLyogZ2l2ZSBwcmlvcml0eSB0byBzdGF0dXMgbWVzc2FnZXMgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgwIDw9IHB1ICYmIChwZmRbcHVdLnJldmVudHMgJiAoUE9MTElOfFBPTExIVVApKSkgeworCQkJLyogRGF0YSByZWFkeTsgd2Uga2VlcCB0aGUgbGFzdCBieXRlIHRvIG91cnNlbHZlcworCQkJICogaW4gY2FzZSB3ZSBkZXRlY3QgYnJva2VuIHJldi1saXN0LCBzbyB0aGF0IHdlCisJCQkgKiBjYW4gbGVhdmUgdGhlIHN0cmVhbSBjb3JydXB0ZWQuICBUaGlzIGlzCisJCQkgKiB1bmZvcnR1bmF0ZSAtLSB1bnBhY2stb2JqZWN0cyB3b3VsZCBoYXBwaWx5CisJCQkgKiBhY2NlcHQgYSB2YWxpZCBwYWNrZGF0YSB3aXRoIHRyYWlsaW5nIGdhcmJhZ2UsCisJCQkgKiBzbyBhcHBlbmRpbmcgZ2FyYmFnZSBhZnRlciB3ZSBwYXNzIGFsbCB0aGUKKwkJCSAqIHBhY2sgZGF0YSBpcyBub3QgZ29vZCBlbm91Z2ggdG8gc2lnbmFsCisJCQkgKiBicmVha2FnZSB0byBkb3duc3RyZWFtLgorCQkJICovCisJCQljaGFyICpjcCA9IGRhdGE7CisJCQlzc2l6ZV90IG91dHN6ID0gMDsKKwkJCWlmICgwIDw9IGJ1ZmZlcmVkKSB7CisJCQkJKmNwKysgPSBidWZmZXJlZDsKKwkJCQlvdXRzeisrOworCQkJfQorCQkJc3ogPSB4cmVhZChwYWNrX29iamVjdHMub3V0LCBjcCwKKwkJCQkgIHNpemVvZihkYXRhKSAtIG91dHN6KTsKKwkJCWlmICgwIDwgc3opCisJCQkJOworCQkJZWxzZSBpZiAoc3ogPT0gMCkgeworCQkJCWNsb3NlKHBhY2tfb2JqZWN0cy5vdXQpOworCQkJCXBhY2tfb2JqZWN0cy5vdXQgPSAtMTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlnb3RvIGZhaWw7CisJCQlzeiArPSBvdXRzejsKKwkJCWlmICgxIDwgc3opIHsKKwkJCQlidWZmZXJlZCA9IGRhdGFbc3otMV0gJiAweEZGOworCQkJCXN6LS07CisJCQl9CisJCQllbHNlCisJCQkJYnVmZmVyZWQgPSAtMTsKKwkJCXN6ID0gc2VuZF9jbGllbnRfZGF0YSgxLCBkYXRhLCBzeik7CisJCQlpZiAoc3ogPCAwKQorCQkJCWdvdG8gZmFpbDsKKwkJfQorCisJCS8qCisJCSAqIFdlIGhpdCB0aGUga2VlcGFsaXZlIHRpbWVvdXQgd2l0aG91dCBzYXlpbmcgYW55dGhpbmc7IHNlbmQKKwkJICogYW4gZW1wdHkgbWVzc2FnZSBvbiB0aGUgZGF0YSBzaWRlYmFuZCBqdXN0IHRvIGxldCB0aGUgb3RoZXIKKwkJICogc2lkZSBrbm93IHdlJ3JlIHN0aWxsIHdvcmtpbmcgb24gaXQsIGJ1dCBkb24ndCBoYXZlIGFueSBkYXRhCisJCSAqIHlldC4KKwkJICoKKwkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhIHNpZGViYW5kIGNoYW5uZWwsIHRoZXJlJ3Mgbm8gcm9vbSBpbiB0aGUKKwkJICogcHJvdG9jb2wgdG8gc2F5IGFueXRoaW5nLCBzbyB0aG9zZSBjbGllbnRzIGFyZSBqdXN0IG91dCBvZgorCQkgKiBsdWNrLgorCQkgKi8KKwkJaWYgKCFyZXQgJiYgdXNlX3NpZGViYW5kKSB7CisJCQlzdGF0aWMgY29uc3QgY2hhciBidWZbXSA9ICIwMDA1XDEiOworCQkJd3JpdGVfb3JfZGllKDEsIGJ1ZiwgNSk7CisJCX0KKwl9CisKKwlpZiAoZmluaXNoX2NvbW1hbmQoJnBhY2tfb2JqZWN0cykpIHsKKwkJZXJyb3IoImdpdCB1cGxvYWQtcGFjazogZ2l0LXBhY2stb2JqZWN0cyBkaWVkIHdpdGggZXJyb3IuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBmbHVzaCB0aGUgZGF0YSAqLworCWlmICgwIDw9IGJ1ZmZlcmVkKSB7CisJCWRhdGFbMF0gPSBidWZmZXJlZDsKKwkJc3ogPSBzZW5kX2NsaWVudF9kYXRhKDEsIGRhdGEsIDEpOworCQlpZiAoc3ogPCAwKQorCQkJZ290byBmYWlsOworCQlmcHJpbnRmKHN0ZGVyciwgImZsdXNoZWQuXG4iKTsKKwl9CisJaWYgKHVzZV9zaWRlYmFuZCkKKwkJcGFja2V0X2ZsdXNoKDEpOworCXJldHVybjsKKworIGZhaWw6CisJc2VuZF9jbGllbnRfZGF0YSgzLCBhYm9ydF9tc2csIHNpemVvZihhYm9ydF9tc2cpKTsKKwlkaWUoImdpdCB1cGxvYWQtcGFjazogJXMiLCBhYm9ydF9tc2cpOworfQorCitzdGF0aWMgaW50IGdvdF9zaGExKGNoYXIgKmhleCwgdW5zaWduZWQgY2hhciAqc2hhMSkKK3sKKwlzdHJ1Y3Qgb2JqZWN0ICpvOworCWludCB3ZV9rbmV3X3RoZXlfaGF2ZSA9IDA7CisKKwlpZiAoZ2V0X3NoYTFfaGV4KGhleCwgc2hhMSkpCisJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBleHBlY3RlZCBTSEExIG9iamVjdCwgZ290ICclcyciLCBoZXgpOworCWlmICghaGFzX3NoYTFfZmlsZShzaGExKSkKKwkJcmV0dXJuIC0xOworCisJbyA9IHBhcnNlX29iamVjdChzaGExKTsKKwlpZiAoIW8pCisJCWRpZSgib29wcyAoJXMpIiwgc2hhMV90b19oZXgoc2hhMSkpOworCWlmIChvLT50eXBlID09IE9CSl9DT01NSVQpIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSAoc3RydWN0IGNvbW1pdCAqKW87CisJCWlmIChvLT5mbGFncyAmIFRIRVlfSEFWRSkKKwkJCXdlX2tuZXdfdGhleV9oYXZlID0gMTsKKwkJZWxzZQorCQkJby0+ZmxhZ3MgfD0gVEhFWV9IQVZFOworCQlpZiAoIW9sZGVzdF9oYXZlIHx8IChjb21taXQtPmRhdGUgPCBvbGRlc3RfaGF2ZSkpCisJCQlvbGRlc3RfaGF2ZSA9IGNvbW1pdC0+ZGF0ZTsKKwkJZm9yIChwYXJlbnRzID0gY29tbWl0LT5wYXJlbnRzOworCQkgICAgIHBhcmVudHM7CisJCSAgICAgcGFyZW50cyA9IHBhcmVudHMtPm5leHQpCisJCQlwYXJlbnRzLT5pdGVtLT5vYmplY3QuZmxhZ3MgfD0gVEhFWV9IQVZFOworCX0KKwlpZiAoIXdlX2tuZXdfdGhleV9oYXZlKSB7CisJCWFkZF9vYmplY3RfYXJyYXkobywgTlVMTCwgJmhhdmVfb2JqKTsKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWNoYWJsZShzdHJ1Y3QgY29tbWl0ICp3YW50KQoreworCXN0cnVjdCBjb21taXRfbGlzdCAqd29yayA9IE5VTEw7CisKKwljb21taXRfbGlzdF9pbnNlcnRfYnlfZGF0ZSh3YW50LCAmd29yayk7CisJd2hpbGUgKHdvcmspIHsKKwkJc3RydWN0IGNvbW1pdF9saXN0ICpsaXN0ID0gd29yay0+bmV4dDsKKwkJc3RydWN0IGNvbW1pdCAqY29tbWl0ID0gd29yay0+aXRlbTsKKwkJZnJlZSh3b3JrKTsKKwkJd29yayA9IGxpc3Q7CisKKwkJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgVEhFWV9IQVZFKSB7CisJCQl3YW50LT5vYmplY3QuZmxhZ3MgfD0gQ09NTU9OX0tOT1dOOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFjb21taXQtPm9iamVjdC5wYXJzZWQpCisJCQlwYXJzZV9vYmplY3QoY29tbWl0LT5vYmplY3Quc2hhMSk7CisJCWlmIChjb21taXQtPm9iamVjdC5mbGFncyAmIFJFQUNIQUJMRSkKKwkJCWNvbnRpbnVlOworCQljb21taXQtPm9iamVjdC5mbGFncyB8PSBSRUFDSEFCTEU7CisJCWlmIChjb21taXQtPmRhdGUgPCBvbGRlc3RfaGF2ZSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGxpc3QgPSBjb21taXQtPnBhcmVudHM7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisJCQlzdHJ1Y3QgY29tbWl0ICpwYXJlbnQgPSBsaXN0LT5pdGVtOworCQkJaWYgKCEocGFyZW50LT5vYmplY3QuZmxhZ3MgJiBSRUFDSEFCTEUpKQorCQkJCWNvbW1pdF9saXN0X2luc2VydF9ieV9kYXRlKHBhcmVudCwgJndvcmspOworCQl9CisJfQorCXdhbnQtPm9iamVjdC5mbGFncyB8PSBSRUFDSEFCTEU7CisJY2xlYXJfY29tbWl0X21hcmtzKHdhbnQsIFJFQUNIQUJMRSk7CisJZnJlZV9jb21taXRfbGlzdCh3b3JrKTsKKwlyZXR1cm4gKHdhbnQtPm9iamVjdC5mbGFncyAmIENPTU1PTl9LTk9XTik7Cit9CisKK3N0YXRpYyBpbnQgb2tfdG9fZ2l2ZV91cCh2b2lkKQoreworCWludCBpOworCisJaWYgKCFoYXZlX29iai5ucikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgd2FudF9vYmoubnI7IGkrKykgeworCQlzdHJ1Y3Qgb2JqZWN0ICp3YW50ID0gd2FudF9vYmoub2JqZWN0c1tpXS5pdGVtOworCisJCWlmICh3YW50LT5mbGFncyAmIENPTU1PTl9LTk9XTikKKwkJCWNvbnRpbnVlOworCQl3YW50ID0gZGVyZWZfdGFnKHdhbnQsICJhIHdhbnQgbGluZSIsIDApOworCQlpZiAoIXdhbnQgfHwgd2FudC0+dHlwZSAhPSBPQkpfQ09NTUlUKSB7CisJCQkvKiBubyB3YXkgdG8gdGVsbCBpZiB0aGlzIGlzIHJlYWNoYWJsZSBieQorCQkJICogbG9va2luZyBhdCB0aGUgYW5jZXN0cnkgY2hhaW4gYWxvbmUsIHNvCisJCQkgKiBsZWF2ZSBhIG5vdGUgdG8gb3Vyc2VsdmVzIG5vdCB0byB3b3JyeSBhYm91dAorCQkJICogdGhpcyBvYmplY3QgYW55bW9yZS4KKwkJCSAqLworCQkJd2FudF9vYmoub2JqZWN0c1tpXS5pdGVtLT5mbGFncyB8PSBDT01NT05fS05PV047CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXJlYWNoYWJsZSgoc3RydWN0IGNvbW1pdCAqKXdhbnQpKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdldF9jb21tb25fY29tbWl0cyh2b2lkKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJY2hhciBsYXN0X2hleFs0MV07CisJaW50IGdvdF9jb21tb24gPSAwOworCWludCBnb3Rfb3RoZXIgPSAwOworCWludCBzZW50X3JlYWR5ID0gMDsKKworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWNoYXIgKmxpbmUgPSBwYWNrZXRfcmVhZF9saW5lKDAsIE5VTEwpOworCQlyZXNldF90aW1lb3V0KCk7CisKKwkJaWYgKCFsaW5lKSB7CisJCQlpZiAobXVsdGlfYWNrID09IDIgJiYgZ290X2NvbW1vbgorCQkJICAgICYmICFnb3Rfb3RoZXIgJiYgb2tfdG9fZ2l2ZV91cCgpKSB7CisJCQkJc2VudF9yZWFkeSA9IDE7CisJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXMgcmVhZHlcbiIsIGxhc3RfaGV4KTsKKwkJCX0KKwkJCWlmIChoYXZlX29iai5uciA9PSAwIHx8IG11bHRpX2FjaykKKwkJCQlwYWNrZXRfd3JpdGUoMSwgIk5BS1xuIik7CisKKwkJCWlmIChub19kb25lICYmIHNlbnRfcmVhZHkpIHsKKwkJCQlwYWNrZXRfd3JpdGUoMSwgIkFDSyAlc1xuIiwgbGFzdF9oZXgpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJaWYgKHN0YXRlbGVzc19ycGMpCisJCQkJZXhpdCgwKTsKKwkJCWdvdF9jb21tb24gPSAwOworCQkJZ290X290aGVyID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGFydHNfd2l0aChsaW5lLCAiaGF2ZSAiKSkgeworCQkJc3dpdGNoIChnb3Rfc2hhMShsaW5lKzUsIHNoYTEpKSB7CisJCQljYXNlIC0xOiAvKiB0aGV5IGhhdmUgd2hhdCB3ZSBkbyBub3QgKi8KKwkJCQlnb3Rfb3RoZXIgPSAxOworCQkJCWlmIChtdWx0aV9hY2sgJiYgb2tfdG9fZ2l2ZV91cCgpKSB7CisJCQkJCWNvbnN0IGNoYXIgKmhleCA9IHNoYTFfdG9faGV4KHNoYTEpOworCQkJCQlpZiAobXVsdGlfYWNrID09IDIpIHsKKwkJCQkJCXNlbnRfcmVhZHkgPSAxOworCQkJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXMgcmVhZHlcbiIsIGhleCk7CisJCQkJCX0gZWxzZQorCQkJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXMgY29udGludWVcbiIsIGhleCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlnb3RfY29tbW9uID0gMTsKKwkJCQltZW1jcHkobGFzdF9oZXgsIHNoYTFfdG9faGV4KHNoYTEpLCA0MSk7CisJCQkJaWYgKG11bHRpX2FjayA9PSAyKQorCQkJCQlwYWNrZXRfd3JpdGUoMSwgIkFDSyAlcyBjb21tb25cbiIsIGxhc3RfaGV4KTsKKwkJCQllbHNlIGlmIChtdWx0aV9hY2spCisJCQkJCXBhY2tldF93cml0ZSgxLCAiQUNLICVzIGNvbnRpbnVlXG4iLCBsYXN0X2hleCk7CisJCQkJZWxzZSBpZiAoaGF2ZV9vYmoubnIgPT0gMSkKKwkJCQkJcGFja2V0X3dyaXRlKDEsICJBQ0sgJXNcbiIsIGxhc3RfaGV4KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGxpbmUsICJkb25lIikpIHsKKwkJCWlmIChoYXZlX29iai5uciA+IDApIHsKKwkJCQlpZiAobXVsdGlfYWNrKQorCQkJCQlwYWNrZXRfd3JpdGUoMSwgIkFDSyAlc1xuIiwgbGFzdF9oZXgpOworCQkJCXJldHVybiAwOworCQkJfQorCQkJcGFja2V0X3dyaXRlKDEsICJOQUtcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBleHBlY3RlZCBTSEExIGxpc3QsIGdvdCAnJXMnIiwgbGluZSk7CisJfQorfQorCitzdGF0aWMgaW50IGlzX291cl9yZWYoc3RydWN0IG9iamVjdCAqbykKK3sKKwlpbnQgYWxsb3dfaGlkZGVuX3JlZiA9IChhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgJgorCQkJKEFMTE9XX1RJUF9TSEExIHwgQUxMT1dfUkVBQ0hBQkxFX1NIQTEpKTsKKwlyZXR1cm4gby0+ZmxhZ3MgJiAoKGFsbG93X2hpZGRlbl9yZWYgPyBISURERU5fUkVGIDogMCkgfCBPVVJfUkVGKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfbm9uX3RpcCh2b2lkKQoreworCXN0YXRpYyBjb25zdCBjaGFyICphcmd2W10gPSB7CisJCSJyZXYtbGlzdCIsICItLXN0ZGluIiwgTlVMTCwKKwl9OworCXN0YXRpYyBzdHJ1Y3QgY2hpbGRfcHJvY2VzcyBjbWQgPSBDSElMRF9QUk9DRVNTX0lOSVQ7CisJc3RydWN0IG9iamVjdCAqbzsKKwljaGFyIG5hbWVidWZbNDJdOyAvKiBeICsgU0hBLTEgKyBMRiAqLworCWludCBpOworCisJLyoKKwkgKiBJbiB0aGUgbm9ybWFsIGluLXByb2Nlc3MgY2FzZSB3aXRob3V0CisJICogdXBsb2FkcGFjay5hbGxvd1JlYWNoYWJsZVNIQTFJbldhbnQsCisJICogbm9uLXRpcCByZXF1ZXN0cyBjYW4gbmV2ZXIgaGFwcGVuLgorCSAqLworCWlmICghc3RhdGVsZXNzX3JwYyAmJiAhKGFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCAmIEFMTE9XX1JFQUNIQUJMRV9TSEExKSkKKwkJZ290byBlcnJvcjsKKworCWNtZC5hcmd2ID0gYXJndjsKKwljbWQuZ2l0X2NtZCA9IDE7CisJY21kLm5vX3N0ZGVyciA9IDE7CisJY21kLmluID0gLTE7CisJY21kLm91dCA9IC0xOworCisJaWYgKHN0YXJ0X2NvbW1hbmQoJmNtZCkpCisJCWdvdG8gZXJyb3I7CisKKwkvKgorCSAqIElmIHJldi1saXN0IC0tc3RkaW4gZW5jb3VudGVycyBhbiB1bmtub3duIGNvbW1pdCwgaXQKKwkgKiB0ZXJtaW5hdGVzLCB3aGljaCB3aWxsIGNhdXNlIFNJR1BJUEUgaW4gdGhlIHdyaXRlIGxvb3AKKwkgKiBiZWxvdy4KKwkgKi8KKwlzaWdjaGFpbl9wdXNoKFNJR1BJUEUsIFNJR19JR04pOworCisJbmFtZWJ1ZlswXSA9ICdeJzsKKwluYW1lYnVmWzQxXSA9ICdcbic7CisJZm9yIChpID0gZ2V0X21heF9vYmplY3RfaW5kZXgoKTsgMCA8IGk7ICkgeworCQlvID0gZ2V0X2luZGV4ZWRfb2JqZWN0KC0taSk7CisJCWlmICghbykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlzX291cl9yZWYobykpCisJCQljb250aW51ZTsKKwkJbWVtY3B5KG5hbWVidWYgKyAxLCBzaGExX3RvX2hleChvLT5zaGExKSwgNDApOworCQlpZiAod3JpdGVfaW5fZnVsbChjbWQuaW4sIG5hbWVidWYsIDQyKSA8IDApCisJCQlnb3RvIGVycm9yOworCX0KKwluYW1lYnVmWzQwXSA9ICdcbic7CisJZm9yIChpID0gMDsgaSA8IHdhbnRfb2JqLm5yOyBpKyspIHsKKwkJbyA9IHdhbnRfb2JqLm9iamVjdHNbaV0uaXRlbTsKKwkJaWYgKGlzX291cl9yZWYobykpCisJCQljb250aW51ZTsKKwkJbWVtY3B5KG5hbWVidWYsIHNoYTFfdG9faGV4KG8tPnNoYTEpLCA0MCk7CisJCWlmICh3cml0ZV9pbl9mdWxsKGNtZC5pbiwgbmFtZWJ1ZiwgNDEpIDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCWNsb3NlKGNtZC5pbik7CisKKwlzaWdjaGFpbl9wb3AoU0lHUElQRSk7CisKKwkvKgorCSAqIFRoZSBjb21taXRzIG91dCBvZiB0aGUgcmV2LWxpc3QgYXJlIG5vdCBhbmNlc3RvcnMgb2YKKwkgKiBvdXIgcmVmLgorCSAqLworCWkgPSByZWFkX2luX2Z1bGwoY21kLm91dCwgbmFtZWJ1ZiwgMSk7CisJaWYgKGkpCisJCWdvdG8gZXJyb3I7CisJY2xvc2UoY21kLm91dCk7CisKKwkvKgorCSAqIHJldi1saXN0IG1heSBoYXZlIGRpZWQgYnkgZW5jb3VudGVyaW5nIGEgYmFkIGNvbW1pdAorCSAqIGluIHRoZSBoaXN0b3J5LCBpbiB3aGljaCBjYXNlIHdlIGRvIHdhbnQgdG8gYmFpbCBvdXQKKwkgKiBldmVuIHdoZW4gaXQgc2hvd2VkIG5vIGNvbW1pdC4KKwkgKi8KKwlpZiAoZmluaXNoX2NvbW1hbmQoJmNtZCkpCisJCWdvdG8gZXJyb3I7CisKKwkvKiBBbGwgdGhlIG5vbi10aXAgb25lcyBhcmUgYW5jZXN0b3JzIG9mIHdoYXQgd2UgYWR2ZXJ0aXNlZCAqLworCXJldHVybjsKKworZXJyb3I6CisJLyogUGljayBvbmUgb2YgdGhlbSAod2Uga25vdyB0aGVyZSBhdCBsZWFzdCBpcyBvbmUpICovCisJZm9yIChpID0gMDsgaSA8IHdhbnRfb2JqLm5yOyBpKyspIHsKKwkJbyA9IHdhbnRfb2JqLm9iamVjdHNbaV0uaXRlbTsKKwkJaWYgKCFpc19vdXJfcmVmKG8pKQorCQkJZGllKCJnaXQgdXBsb2FkLXBhY2s6IG5vdCBvdXIgcmVmICVzIiwKKwkJCSAgICBzaGExX3RvX2hleChvLT5zaGExKSk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWNlaXZlX25lZWRzKHZvaWQpCit7CisJc3RydWN0IG9iamVjdF9hcnJheSBzaGFsbG93cyA9IE9CSkVDVF9BUlJBWV9JTklUOworCWludCBkZXB0aCA9IDA7CisJaW50IGhhc19ub25fdGlwID0gMDsKKworCXNoYWxsb3dfbnIgPSAwOworCWZvciAoOzspIHsKKwkJc3RydWN0IG9iamVjdCAqbzsKKwkJY29uc3QgY2hhciAqZmVhdHVyZXM7CisJCXVuc2lnbmVkIGNoYXIgc2hhMV9idWZbMjBdOworCQljaGFyICpsaW5lID0gcGFja2V0X3JlYWRfbGluZSgwLCBOVUxMKTsKKwkJcmVzZXRfdGltZW91dCgpOworCQlpZiAoIWxpbmUpCisJCQlicmVhazsKKworCQlpZiAoc3RhcnRzX3dpdGgobGluZSwgInNoYWxsb3cgIikpIHsKKwkJCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3Q7CisJCQlpZiAoZ2V0X3NoYTFfaGV4KGxpbmUgKyA4LCBzaGExKSkKKwkJCQlkaWUoImludmFsaWQgc2hhbGxvdyBsaW5lOiAlcyIsIGxpbmUpOworCQkJb2JqZWN0ID0gcGFyc2Vfb2JqZWN0KHNoYTEpOworCQkJaWYgKCFvYmplY3QpCisJCQkJY29udGludWU7CisJCQlpZiAob2JqZWN0LT50eXBlICE9IE9CSl9DT01NSVQpCisJCQkJZGllKCJpbnZhbGlkIHNoYWxsb3cgb2JqZWN0ICVzIiwgc2hhMV90b19oZXgoc2hhMSkpOworCQkJaWYgKCEob2JqZWN0LT5mbGFncyAmIENMSUVOVF9TSEFMTE9XKSkgeworCQkJCW9iamVjdC0+ZmxhZ3MgfD0gQ0xJRU5UX1NIQUxMT1c7CisJCQkJYWRkX29iamVjdF9hcnJheShvYmplY3QsIE5VTEwsICZzaGFsbG93cyk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3RhcnRzX3dpdGgobGluZSwgImRlZXBlbiAiKSkgeworCQkJY2hhciAqZW5kOworCQkJZGVwdGggPSBzdHJ0b2wobGluZSArIDcsICZlbmQsIDApOworCQkJaWYgKGVuZCA9PSBsaW5lICsgNyB8fCBkZXB0aCA8PSAwKQorCQkJCWRpZSgiSW52YWxpZCBkZWVwZW46ICVzIiwgbGluZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0YXJ0c193aXRoKGxpbmUsICJ3YW50ICIpIHx8CisJCSAgICBnZXRfc2hhMV9oZXgobGluZSs1LCBzaGExX2J1ZikpCisJCQlkaWUoImdpdCB1cGxvYWQtcGFjazogcHJvdG9jb2wgZXJyb3IsICIKKwkJCSAgICAiZXhwZWN0ZWQgdG8gZ2V0IHNoYSwgbm90ICclcyciLCBsaW5lKTsKKworCQlmZWF0dXJlcyA9IGxpbmUgKyA0NTsKKworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAibXVsdGlfYWNrX2RldGFpbGVkIikpCisJCQltdWx0aV9hY2sgPSAyOworCQllbHNlIGlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZXMsICJtdWx0aV9hY2siKSkKKwkJCW11bHRpX2FjayA9IDE7CisJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZXMsICJuby1kb25lIikpCisJCQlub19kb25lID0gMTsKKwkJaWYgKHBhcnNlX2ZlYXR1cmVfcmVxdWVzdChmZWF0dXJlcywgInRoaW4tcGFjayIpKQorCQkJdXNlX3RoaW5fcGFjayA9IDE7CisJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZXMsICJvZnMtZGVsdGEiKSkKKwkJCXVzZV9vZnNfZGVsdGEgPSAxOworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAic2lkZS1iYW5kLTY0ayIpKQorCQkJdXNlX3NpZGViYW5kID0gTEFSR0VfUEFDS0VUX01BWDsKKwkJZWxzZSBpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAic2lkZS1iYW5kIikpCisJCQl1c2Vfc2lkZWJhbmQgPSBERUZBVUxUX1BBQ0tFVF9NQVg7CisJCWlmIChwYXJzZV9mZWF0dXJlX3JlcXVlc3QoZmVhdHVyZXMsICJuby1wcm9ncmVzcyIpKQorCQkJbm9fcHJvZ3Jlc3MgPSAxOworCQlpZiAocGFyc2VfZmVhdHVyZV9yZXF1ZXN0KGZlYXR1cmVzLCAiaW5jbHVkZS10YWciKSkKKwkJCXVzZV9pbmNsdWRlX3RhZyA9IDE7CisKKwkJbyA9IHBhcnNlX29iamVjdChzaGExX2J1Zik7CisJCWlmICghbykKKwkJCWRpZSgiZ2l0IHVwbG9hZC1wYWNrOiBub3Qgb3VyIHJlZiAlcyIsCisJCQkgICAgc2hhMV90b19oZXgoc2hhMV9idWYpKTsKKwkJaWYgKCEoby0+ZmxhZ3MgJiBXQU5URUQpKSB7CisJCQlvLT5mbGFncyB8PSBXQU5URUQ7CisJCQlpZiAoIWlzX291cl9yZWYobykpCisJCQkJaGFzX25vbl90aXAgPSAxOworCQkJYWRkX29iamVjdF9hcnJheShvLCBOVUxMLCAmd2FudF9vYmopOworCQl9CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIHNlbnQgYWxsIG91ciByZWZzIGFscmVhZHksIGFuZCB0aGUgb3RoZXIgZW5kCisJICogc2hvdWxkIGhhdmUgY2hvc2VuIG91dCBvZiB0aGVtLiBXaGVuIHdlIGFyZSBvcGVyYXRpbmcKKwkgKiBpbiB0aGUgc3RhdGVsZXNzIFJQQyBtb2RlLCBob3dldmVyLCB0aGVpciBjaG9pY2UgbWF5CisJICogaGF2ZSBiZWVuIGJhc2VkIG9uIHRoZSBzZXQgb2Ygb2xkZXIgcmVmcyBhZHZlcnRpc2VkCisJICogYnkgYW5vdGhlciBwcm9jZXNzIHRoYXQgaGFuZGxlZCB0aGUgaW5pdGlhbCByZXF1ZXN0LgorCSAqLworCWlmIChoYXNfbm9uX3RpcCkKKwkJY2hlY2tfbm9uX3RpcCgpOworCisJaWYgKCF1c2Vfc2lkZWJhbmQgJiYgZGFlbW9uX21vZGUpCisJCW5vX3Byb2dyZXNzID0gMTsKKworCWlmIChkZXB0aCA9PSAwICYmIHNoYWxsb3dzLm5yID09IDApCisJCXJldHVybjsKKwlpZiAoZGVwdGggPiAwKSB7CisJCXN0cnVjdCBjb21taXRfbGlzdCAqcmVzdWx0ID0gTlVMTCwgKmJhY2t1cCA9IE5VTEw7CisJCWludCBpOworCQlpZiAoZGVwdGggPT0gSU5GSU5JVEVfREVQVEggJiYgIWlzX3JlcG9zaXRvcnlfc2hhbGxvdygpKQorCQkJZm9yIChpID0gMDsgaSA8IHNoYWxsb3dzLm5yOyBpKyspIHsKKwkJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBzaGFsbG93cy5vYmplY3RzW2ldLml0ZW07CisJCQkJb2JqZWN0LT5mbGFncyB8PSBOT1RfU0hBTExPVzsKKwkJCX0KKwkJZWxzZQorCQkJYmFja3VwID0gcmVzdWx0ID0KKwkJCQlnZXRfc2hhbGxvd19jb21taXRzKCZ3YW50X29iaiwgZGVwdGgsCisJCQkJCQkgICAgU0hBTExPVywgTk9UX1NIQUxMT1cpOworCQl3aGlsZSAocmVzdWx0KSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSAmcmVzdWx0LT5pdGVtLT5vYmplY3Q7CisJCQlpZiAoIShvYmplY3QtPmZsYWdzICYgKENMSUVOVF9TSEFMTE9XfE5PVF9TSEFMTE9XKSkpIHsKKwkJCQlwYWNrZXRfd3JpdGUoMSwgInNoYWxsb3cgJXMiLAorCQkJCQkJc2hhMV90b19oZXgob2JqZWN0LT5zaGExKSk7CisJCQkJcmVnaXN0ZXJfc2hhbGxvdyhvYmplY3QtPnNoYTEpOworCQkJCXNoYWxsb3dfbnIrKzsKKwkJCX0KKwkJCXJlc3VsdCA9IHJlc3VsdC0+bmV4dDsKKwkJfQorCQlmcmVlX2NvbW1pdF9saXN0KGJhY2t1cCk7CisJCWZvciAoaSA9IDA7IGkgPCBzaGFsbG93cy5ucjsgaSsrKSB7CisJCQlzdHJ1Y3Qgb2JqZWN0ICpvYmplY3QgPSBzaGFsbG93cy5vYmplY3RzW2ldLml0ZW07CisJCQlpZiAob2JqZWN0LT5mbGFncyAmIE5PVF9TSEFMTE9XKSB7CisJCQkJc3RydWN0IGNvbW1pdF9saXN0ICpwYXJlbnRzOworCQkJCXBhY2tldF93cml0ZSgxLCAidW5zaGFsbG93ICVzIiwKKwkJCQkJc2hhMV90b19oZXgob2JqZWN0LT5zaGExKSk7CisJCQkJb2JqZWN0LT5mbGFncyAmPSB+Q0xJRU5UX1NIQUxMT1c7CisJCQkJLyogbWFrZSBzdXJlIHRoZSByZWFsIHBhcmVudHMgYXJlIHBhcnNlZCAqLworCQkJCXVucmVnaXN0ZXJfc2hhbGxvdyhvYmplY3QtPnNoYTEpOworCQkJCW9iamVjdC0+cGFyc2VkID0gMDsKKwkJCQlwYXJzZV9jb21taXRfb3JfZGllKChzdHJ1Y3QgY29tbWl0ICopb2JqZWN0KTsKKwkJCQlwYXJlbnRzID0gKChzdHJ1Y3QgY29tbWl0ICopb2JqZWN0KS0+cGFyZW50czsKKwkJCQl3aGlsZSAocGFyZW50cykgeworCQkJCQlhZGRfb2JqZWN0X2FycmF5KCZwYXJlbnRzLT5pdGVtLT5vYmplY3QsCisJCQkJCQkJTlVMTCwgJndhbnRfb2JqKTsKKwkJCQkJcGFyZW50cyA9IHBhcmVudHMtPm5leHQ7CisJCQkJfQorCQkJCWFkZF9vYmplY3RfYXJyYXkob2JqZWN0LCBOVUxMLCAmZXh0cmFfZWRnZV9vYmopOworCQkJfQorCQkJLyogbWFrZSBzdXJlIGNvbW1pdCB0cmF2ZXJzYWwgY29uZm9ybXMgdG8gY2xpZW50ICovCisJCQlyZWdpc3Rlcl9zaGFsbG93KG9iamVjdC0+c2hhMSk7CisJCX0KKwkJcGFja2V0X2ZsdXNoKDEpOworCX0gZWxzZQorCQlpZiAoc2hhbGxvd3MubnIgPiAwKSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCBzaGFsbG93cy5ucjsgaSsrKQorCQkJCXJlZ2lzdGVyX3NoYWxsb3coc2hhbGxvd3Mub2JqZWN0c1tpXS5pdGVtLT5zaGExKTsKKwkJfQorCisJc2hhbGxvd19uciArPSBzaGFsbG93cy5ucjsKKwlmcmVlKHNoYWxsb3dzLm9iamVjdHMpOworfQorCisvKiByZXR1cm4gbm9uLXplcm8gaWYgdGhlIHJlZiBpcyBoaWRkZW4sIG90aGVyd2lzZSAwICovCitzdGF0aWMgaW50IG1hcmtfb3VyX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQpCit7CisJc3RydWN0IG9iamVjdCAqbyA9IGxvb2t1cF91bmtub3duX29iamVjdChvaWQtPmhhc2gpOworCisJaWYgKHJlZl9pc19oaWRkZW4ocmVmbmFtZSkpIHsKKwkJby0+ZmxhZ3MgfD0gSElEREVOX1JFRjsKKwkJcmV0dXJuIDE7CisJfQorCW8tPmZsYWdzIHw9IE9VUl9SRUY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwltYXJrX291cl9yZWYocmVmbmFtZSwgb2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZm9ybWF0X3N5bXJlZl9pbmZvKHN0cnVjdCBzdHJidWYgKmJ1Ziwgc3RydWN0IHN0cmluZ19saXN0ICpzeW1yZWYpCit7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisKKwlpZiAoIXN5bXJlZi0+bnIpCisJCXJldHVybjsKKwlmb3JfZWFjaF9zdHJpbmdfbGlzdF9pdGVtKGl0ZW0sIHN5bXJlZikKKwkJc3RyYnVmX2FkZGYoYnVmLCAiIHN5bXJlZj0lczolcyIsIGl0ZW0tPnN0cmluZywgKGNoYXIgKilpdGVtLT51dGlsKTsKK30KKworc3RhdGljIGludCBzZW5kX3JlZihjb25zdCBjaGFyICpyZWZuYW1lLCBjb25zdCBzdHJ1Y3Qgb2JqZWN0X2lkICpvaWQsCisJCSAgICBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqY2FwYWJpbGl0aWVzID0gIm11bHRpX2FjayB0aGluLXBhY2sgc2lkZS1iYW5kIgorCQkiIHNpZGUtYmFuZC02NGsgb2ZzLWRlbHRhIHNoYWxsb3cgbm8tcHJvZ3Jlc3MiCisJCSIgaW5jbHVkZS10YWcgbXVsdGlfYWNrX2RldGFpbGVkIjsKKwljb25zdCBjaGFyICpyZWZuYW1lX25vbnMgPSBzdHJpcF9uYW1lc3BhY2UocmVmbmFtZSk7CisJc3RydWN0IG9iamVjdF9pZCBwZWVsZWQ7CisKKwlpZiAobWFya19vdXJfcmVmKHJlZm5hbWUsIG9pZCkpCisJCXJldHVybiAwOworCisJaWYgKGNhcGFiaWxpdGllcykgeworCQlzdHJ1Y3Qgc3RyYnVmIHN5bXJlZl9pbmZvID0gU1RSQlVGX0lOSVQ7CisKKwkJZm9ybWF0X3N5bXJlZl9pbmZvKCZzeW1yZWZfaW5mbywgY2JfZGF0YSk7CisJCXBhY2tldF93cml0ZSgxLCAiJXMgJXMlYyVzJXMlcyVzJXMgYWdlbnQ9JXNcbiIsCisJCQkgICAgIG9pZF90b19oZXgob2lkKSwgcmVmbmFtZV9ub25zLAorCQkJICAgICAwLCBjYXBhYmlsaXRpZXMsCisJCQkgICAgIChhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgJiBBTExPV19USVBfU0hBMSkgPworCQkJCSAgICAgIiBhbGxvdy10aXAtc2hhMS1pbi13YW50IiA6ICIiLAorCQkJICAgICAoYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0ICYgQUxMT1dfUkVBQ0hBQkxFX1NIQTEpID8KKwkJCQkgICAgICIgYWxsb3ctcmVhY2hhYmxlLXNoYTEtaW4td2FudCIgOiAiIiwKKwkJCSAgICAgc3RhdGVsZXNzX3JwYyA/ICIgbm8tZG9uZSIgOiAiIiwKKwkJCSAgICAgc3ltcmVmX2luZm8uYnVmLAorCQkJICAgICBnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQoKSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzeW1yZWZfaW5mbyk7CisJfSBlbHNlIHsKKwkJcGFja2V0X3dyaXRlKDEsICIlcyAlc1xuIiwgb2lkX3RvX2hleChvaWQpLCByZWZuYW1lX25vbnMpOworCX0KKwljYXBhYmlsaXRpZXMgPSBOVUxMOworCWlmICghcGVlbF9yZWYocmVmbmFtZSwgcGVlbGVkLmhhc2gpKQorCQlwYWNrZXRfd3JpdGUoMSwgIiVzICVzXnt9XG4iLCBvaWRfdG9faGV4KCZwZWVsZWQpLCByZWZuYW1lX25vbnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZpbmRfc3ltcmVmKGNvbnN0IGNoYXIgKnJlZm5hbWUsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJICAgICAgIGludCBmbGFnLCB2b2lkICpjYl9kYXRhKQoreworCWNvbnN0IGNoYXIgKnN5bXJlZl90YXJnZXQ7CisJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0ZW07CisJc3RydWN0IG9iamVjdF9pZCB1bnVzZWQ7CisKKwlpZiAoKGZsYWcgJiBSRUZfSVNTWU1SRUYpID09IDApCisJCXJldHVybiAwOworCXN5bXJlZl90YXJnZXQgPSByZXNvbHZlX3JlZl91bnNhZmUocmVmbmFtZSwgMCwgdW51c2VkLmhhc2gsICZmbGFnKTsKKwlpZiAoIXN5bXJlZl90YXJnZXQgfHwgKGZsYWcgJiBSRUZfSVNTWU1SRUYpID09IDApCisJCWRpZSgiJyVzJyBpcyBhIHN5bXJlZiBidXQgaXQgaXMgbm90PyIsIHJlZm5hbWUpOworCWl0ZW0gPSBzdHJpbmdfbGlzdF9hcHBlbmQoY2JfZGF0YSwgcmVmbmFtZSk7CisJaXRlbS0+dXRpbCA9IHhzdHJkdXAoc3ltcmVmX3RhcmdldCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHVwbG9hZF9wYWNrKHZvaWQpCit7CisJc3RydWN0IHN0cmluZ19saXN0IHN5bXJlZiA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJaGVhZF9yZWZfbmFtZXNwYWNlZChmaW5kX3N5bXJlZiwgJnN5bXJlZik7CisKKwlpZiAoYWR2ZXJ0aXNlX3JlZnMgfHwgIXN0YXRlbGVzc19ycGMpIHsKKwkJcmVzZXRfdGltZW91dCgpOworCQloZWFkX3JlZl9uYW1lc3BhY2VkKHNlbmRfcmVmLCAmc3ltcmVmKTsKKwkJZm9yX2VhY2hfbmFtZXNwYWNlZF9yZWYoc2VuZF9yZWYsICZzeW1yZWYpOworCQlhZHZlcnRpc2Vfc2hhbGxvd19ncmFmdHMoMSk7CisJCXBhY2tldF9mbHVzaCgxKTsKKwl9IGVsc2UgeworCQloZWFkX3JlZl9uYW1lc3BhY2VkKGNoZWNrX3JlZiwgTlVMTCk7CisJCWZvcl9lYWNoX25hbWVzcGFjZWRfcmVmKGNoZWNrX3JlZiwgTlVMTCk7CisJfQorCXN0cmluZ19saXN0X2NsZWFyKCZzeW1yZWYsIDEpOworCWlmIChhZHZlcnRpc2VfcmVmcykKKwkJcmV0dXJuOworCisJcmVjZWl2ZV9uZWVkcygpOworCWlmICh3YW50X29iai5ucikgeworCQlnZXRfY29tbW9uX2NvbW1pdHMoKTsKKwkJY3JlYXRlX3BhY2tfZmlsZSgpOworCX0KK30KKworc3RhdGljIGludCB1cGxvYWRfcGFja19jb25maWcoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqdW51c2VkKQoreworCWlmICghc3RyY21wKCJ1cGxvYWRwYWNrLmFsbG93dGlwc2hhMWlud2FudCIsIHZhcikpIHsKKwkJaWYgKGdpdF9jb25maWdfYm9vbCh2YXIsIHZhbHVlKSkKKwkJCWFsbG93X3VuYWR2ZXJ0aXNlZF9vYmplY3RfcmVxdWVzdCB8PSBBTExPV19USVBfU0hBMTsKKwkJZWxzZQorCQkJYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0ICY9IH5BTExPV19USVBfU0hBMTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoInVwbG9hZHBhY2suYWxsb3dyZWFjaGFibGVzaGExaW53YW50IiwgdmFyKSkgeworCQlpZiAoZ2l0X2NvbmZpZ19ib29sKHZhciwgdmFsdWUpKQorCQkJYWxsb3dfdW5hZHZlcnRpc2VkX29iamVjdF9yZXF1ZXN0IHw9IEFMTE9XX1JFQUNIQUJMRV9TSEExOworCQllbHNlCisJCQlhbGxvd191bmFkdmVydGlzZWRfb2JqZWN0X3JlcXVlc3QgJj0gfkFMTE9XX1JFQUNIQUJMRV9TSEExOworCX0gZWxzZSBpZiAoIXN0cmNtcCgidXBsb2FkcGFjay5rZWVwYWxpdmUiLCB2YXIpKSB7CisJCWtlZXBhbGl2ZSA9IGdpdF9jb25maWdfaW50KHZhciwgdmFsdWUpOworCQlpZiAoIWtlZXBhbGl2ZSkKKwkJCWtlZXBhbGl2ZSA9IC0xOworCX0KKwlyZXR1cm4gcGFyc2VfaGlkZV9yZWZzX2NvbmZpZyh2YXIsIHZhbHVlLCAidXBsb2FkcGFjayIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY2hhciAqZGlyOworCWludCBpOworCWludCBzdHJpY3QgPSAwOworCisJZ2l0X3NldHVwX2dldHRleHQoKTsKKworCXBhY2tldF90cmFjZV9pZGVudGl0eSgidXBsb2FkLXBhY2siKTsKKwlnaXRfZXh0cmFjdF9hcmd2MF9wYXRoKGFyZ3ZbMF0pOworCWNoZWNrX3JlcGxhY2VfcmVmcyA9IDA7CisKKwlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisJCWNoYXIgKmFyZyA9IGFyZ3ZbaV07CisKKwkJaWYgKGFyZ1swXSAhPSAnLScpCisJCQlicmVhazsKKwkJaWYgKCFzdHJjbXAoYXJnLCAiLS1hZHZlcnRpc2UtcmVmcyIpKSB7CisJCQlhZHZlcnRpc2VfcmVmcyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXN0YXRlbGVzcy1ycGMiKSkgeworCQkJc3RhdGVsZXNzX3JwYyA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIXN0cmNtcChhcmcsICItLXN0cmljdCIpKSB7CisJCQlzdHJpY3QgPSAxOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHN0YXJ0c193aXRoKGFyZywgIi0tdGltZW91dD0iKSkgeworCQkJdGltZW91dCA9IGF0b2koYXJnKzEwKTsKKwkJCWRhZW1vbl9tb2RlID0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc3RyY21wKGFyZywgIi0tIikpIHsKKwkJCWkrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgIT0gYXJnYy0xKQorCQl1c2FnZSh1cGxvYWRfcGFja191c2FnZSk7CisKKwlzZXR1cF9wYXRoKCk7CisKKwlkaXIgPSBhcmd2W2ldOworCisJaWYgKCFlbnRlcl9yZXBvKGRpciwgc3RyaWN0KSkKKwkJZGllKCInJXMnIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIGdpdCByZXBvc2l0b3J5IiwgZGlyKTsKKworCWdpdF9jb25maWcodXBsb2FkX3BhY2tfY29uZmlnLCBOVUxMKTsKKwl1cGxvYWRfcGFjaygpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdXJsLmMgYi91cmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDg5YWQxCi0tLSAvZGV2L251bGwKKysrIGIvdXJsLmMKQEAgLTAsMCArMSwxMzEgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInVybC5oIgorCitpbnQgaXNfdXJsc2NoZW1lY2hhcihpbnQgZmlyc3RfZmxhZywgaW50IGNoKQoreworCS8qCisJICogVGhlIHNldCBvZiB2YWxpZCBVUkwgc2NoZW1lcywgYXMgcGVyIFNURDY2IChSRkMzOTg2KSBpcworCSAqICdbQS1aYS16XVtBLVphLXowLTkrLi1dKicuIEJ1dCB1c2Ugc2lnaHRseSBsb29zZXIgY2hlY2sKKwkgKiBvZiAnW0EtWmEtejAtOV1bQS1aYS16MC05Ky4tXSonIGJlY2F1c2UgZWFybGllciB2ZXJzaW9uCisJICogb2YgY2hlY2sgdXNlZCAnW0EtWmEtejAtOV0rJyBzbyBub3QgdG8gYnJlYWsgYW55IHJlbW90ZQorCSAqIGhlbHBlcnMuCisJICovCisJaW50IGFscGhhbnVtZXJpYywgc3BlY2lhbDsKKwlhbHBoYW51bWVyaWMgPSBjaCA+IDAgJiYgaXNhbG51bShjaCk7CisJc3BlY2lhbCA9IGNoID09ICcrJyB8fCBjaCA9PSAnLScgfHwgY2ggPT0gJy4nOworCXJldHVybiBhbHBoYW51bWVyaWMgfHwgKCFmaXJzdF9mbGFnICYmIHNwZWNpYWwpOworfQorCitpbnQgaXNfdXJsKGNvbnN0IGNoYXIgKnVybCkKK3sKKwkvKiBJcyAic2NoZW1lIiBwYXJ0IHJlYXNvbmFibGU/ICovCisJaWYgKCF1cmwgfHwgIWlzX3VybHNjaGVtZWNoYXIoMSwgKnVybCsrKSkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKCp1cmwgJiYgKnVybCAhPSAnOicpIHsKKwkJaWYgKCFpc191cmxzY2hlbWVjaGFyKDAsICp1cmwrKykpCisJCQlyZXR1cm4gMDsKKwl9CisJLyogV2UndmUgc2VlbiAic2NoZW1lIjsgd2Ugd2FudCBjb2xvbi1zbGFzaC1zbGFzaCAqLworCXJldHVybiAodXJsWzBdID09ICc6JyAmJiB1cmxbMV0gPT0gJy8nICYmIHVybFsyXSA9PSAnLycpOworfQorCitzdGF0aWMgaW50IHVybF9kZWNvZGVfY2hhcihjb25zdCBjaGFyICpxKQoreworCWludCBpOworCXVuc2lnbmVkIGNoYXIgdmFsID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXVuc2lnbmVkIGNoYXIgYyA9ICpxKys7CisJCXZhbCA8PD0gNDsKKwkJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQorCQkJdmFsICs9IGMgLSAnMCc7CisJCWVsc2UgaWYgKGMgPj0gJ2EnICYmIGMgPD0gJ2YnKQorCQkJdmFsICs9IGMgLSAnYScgKyAxMDsKKwkJZWxzZSBpZiAoYyA+PSAnQScgJiYgYyA8PSAnRicpCisJCQl2YWwgKz0gYyAtICdBJyArIDEwOworCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBjaGFyICp1cmxfZGVjb2RlX2ludGVybmFsKGNvbnN0IGNoYXIgKipxdWVyeSwgaW50IGxlbiwKKwkJCQkgY29uc3QgY2hhciAqc3RvcF9hdCwgc3RydWN0IHN0cmJ1ZiAqb3V0LAorCQkJCSBpbnQgZGVjb2RlX3BsdXMpCit7CisJY29uc3QgY2hhciAqcSA9ICpxdWVyeTsKKworCXdoaWxlIChsZW4pIHsKKwkJdW5zaWduZWQgY2hhciBjID0gKnE7CisKKwkJaWYgKCFjKQorCQkJYnJlYWs7CisJCWlmIChzdG9wX2F0ICYmIHN0cmNocihzdG9wX2F0LCBjKSkgeworCQkJcSsrOworCQkJbGVuLS07CisJCQlicmVhazsKKwkJfQorCisJCWlmIChjID09ICclJykgeworCQkJaW50IHZhbCA9IHVybF9kZWNvZGVfY2hhcihxICsgMSk7CisJCQlpZiAoMCA8PSB2YWwpIHsKKwkJCQlzdHJidWZfYWRkY2gob3V0LCB2YWwpOworCQkJCXEgKz0gMzsKKwkJCQlsZW4gLT0gMzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWlmIChkZWNvZGVfcGx1cyAmJiBjID09ICcrJykKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsICcgJyk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRjaChvdXQsIGMpOworCQlxKys7CisJCWxlbi0tOworCX0KKwkqcXVlcnkgPSBxOworCXJldHVybiBzdHJidWZfZGV0YWNoKG91dCwgTlVMTCk7Cit9CisKK2NoYXIgKnVybF9kZWNvZGUoY29uc3QgY2hhciAqdXJsKQoreworCXJldHVybiB1cmxfZGVjb2RlX21lbSh1cmwsIHN0cmxlbih1cmwpKTsKK30KKworY2hhciAqdXJsX2RlY29kZV9tZW0oY29uc3QgY2hhciAqdXJsLCBpbnQgbGVuKQoreworCXN0cnVjdCBzdHJidWYgb3V0ID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqY29sb24gPSBtZW1jaHIodXJsLCAnOicsIGxlbik7CisKKwkvKiBTa2lwIHByb3RvY29sIHBhcnQgaWYgcHJlc2VudCAqLworCWlmIChjb2xvbiAmJiB1cmwgPCBjb2xvbikgeworCQlzdHJidWZfYWRkKCZvdXQsIHVybCwgY29sb24gLSB1cmwpOworCQlsZW4gLT0gY29sb24gLSB1cmw7CisJCXVybCA9IGNvbG9uOworCX0KKwlyZXR1cm4gdXJsX2RlY29kZV9pbnRlcm5hbCgmdXJsLCBsZW4sIE5VTEwsICZvdXQsIDApOworfQorCitjaGFyICp1cmxfZGVjb2RlX3BhcmFtZXRlcl9uYW1lKGNvbnN0IGNoYXIgKipxdWVyeSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXJldHVybiB1cmxfZGVjb2RlX2ludGVybmFsKHF1ZXJ5LCAtMSwgIiY9IiwgJm91dCwgMSk7Cit9CisKK2NoYXIgKnVybF9kZWNvZGVfcGFyYW1ldGVyX3ZhbHVlKGNvbnN0IGNoYXIgKipxdWVyeSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIG91dCA9IFNUUkJVRl9JTklUOworCXJldHVybiB1cmxfZGVjb2RlX2ludGVybmFsKHF1ZXJ5LCAtMSwgIiYiLCAmb3V0LCAxKTsKK30KKwordm9pZCBlbmRfdXJsX3dpdGhfc2xhc2goc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICp1cmwpCit7CisJc3RyYnVmX2FkZHN0cihidWYsIHVybCk7CisJc3RyYnVmX2NvbXBsZXRlKGJ1ZiwgJy8nKTsKK30KKwordm9pZCBzdHJfZW5kX3VybF93aXRoX3NsYXNoKGNvbnN0IGNoYXIgKnVybCwgY2hhciAqKmRlc3QpIHsKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCWVuZF91cmxfd2l0aF9zbGFzaCgmYnVmLCB1cmwpOworCWZyZWUoKmRlc3QpOworCSpkZXN0ID0gc3RyYnVmX2RldGFjaCgmYnVmLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL3VybC5oIGIvdXJsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkYWY2ZgotLS0gL2Rldi9udWxsCisrKyBiL3VybC5oCkBAIC0wLDAgKzEsMTQgQEAKKyNpZm5kZWYgVVJMX0gKKyNkZWZpbmUgVVJMX0gKKworZXh0ZXJuIGludCBpc191cmwoY29uc3QgY2hhciAqdXJsKTsKK2V4dGVybiBpbnQgaXNfdXJsc2NoZW1lY2hhcihpbnQgZmlyc3RfZmxhZywgaW50IGNoKTsKK2V4dGVybiBjaGFyICp1cmxfZGVjb2RlKGNvbnN0IGNoYXIgKnVybCk7CitleHRlcm4gY2hhciAqdXJsX2RlY29kZV9tZW0oY29uc3QgY2hhciAqdXJsLCBpbnQgbGVuKTsKK2V4dGVybiBjaGFyICp1cmxfZGVjb2RlX3BhcmFtZXRlcl9uYW1lKGNvbnN0IGNoYXIgKipxdWVyeSk7CitleHRlcm4gY2hhciAqdXJsX2RlY29kZV9wYXJhbWV0ZXJfdmFsdWUoY29uc3QgY2hhciAqKnF1ZXJ5KTsKKworZXh0ZXJuIHZvaWQgZW5kX3VybF93aXRoX3NsYXNoKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqdXJsKTsKK2V4dGVybiB2b2lkIHN0cl9lbmRfdXJsX3dpdGhfc2xhc2goY29uc3QgY2hhciAqdXJsLCBjaGFyICoqZGVzdCk7CisKKyNlbmRpZiAvKiBVUkxfSCAqLwpkaWZmIC0tZ2l0IGEvdXJsbWF0Y2guYyBiL3VybG1hdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyZDM0MgotLS0gL2Rldi9udWxsCisrKyBiL3VybG1hdGNoLmMKQEAgLTAsMCArMSw1MzggQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInVybG1hdGNoLmgiCisKKyNkZWZpbmUgVVJMX0FMUEhBICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorI2RlZmluZSBVUkxfRElHSVQgIjAxMjM0NTY3ODkiCisjZGVmaW5lIFVSTF9BTFBIQURJR0lUIFVSTF9BTFBIQSBVUkxfRElHSVQKKyNkZWZpbmUgVVJMX1NDSEVNRV9DSEFSUyBVUkxfQUxQSEFESUdJVCAiKy4tIgorI2RlZmluZSBVUkxfSE9TVF9DSEFSUyBVUkxfQUxQSEFESUdJVCAiLi1bOl0iIC8qIElQdjYgbGl0ZXJhbHMgbmVlZCBbOl0gKi8KKyNkZWZpbmUgVVJMX1VOU0FGRV9DSEFSUyAiIDw+XCIle318XFxeYCIgLyogcGx1cyAweDAwLTB4MUYsMHg3Ri0weEZGICovCisjZGVmaW5lIFVSTF9HRU5fUkVTRVJWRUQgIjovPyNbXUAiCisjZGVmaW5lIFVSTF9TVUJfUkVTRVJWRUQgIiEkJicoKSorLDs9IgorI2RlZmluZSBVUkxfUkVTRVJWRUQgVVJMX0dFTl9SRVNFUlZFRCBVUkxfU1VCX1JFU0VSVkVEIC8qIG9ubHkgYWxsb3dlZCBkZWxpbXMgKi8KKworc3RhdGljIGludCBhcHBlbmRfbm9ybWFsaXplZF9lc2NhcGVzKHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmZyb20sCisJCQkJICAgICBzaXplX3QgZnJvbV9sZW4sCisJCQkJICAgICBjb25zdCBjaGFyICplc2NfZXh0cmEsCisJCQkJICAgICBjb25zdCBjaGFyICplc2Nfb2spCit7CisJLyoKKwkgKiBBcHBlbmQgdG8gc3RyYnVmICdidWYnIGNoYXJhY3RlcnMgZnJvbSBzdHJpbmcgJ2Zyb20nIHdpdGggbGVuZ3RoCisJICogJ2Zyb21fbGVuJyB3aGlsZSB1bmVzY2FwaW5nIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QgbmVlZCB0byBiZSBlc2NhcGVkCisJICogYW5kIGVzY2FwaW5nIGNoYXJhY3RlcnMgdGhhdCBkby4gIFRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBlc2NhcGUKKwkgKiAodGhlIGNvbXBsZW1lbnQgb2Ygd2hpY2ggaXMgdW5lc2NhcGVkKSBzdGFydHMgb3V0IGFzIHRoZSBSRkMgMzk4NgorCSAqIHVuc2FmZSBjaGFyYWN0ZXJzICgweDAwLTB4MUYsMHg3Ri0weEZGLCIgPD5cIiMle318XFxeYCIpLiAgSWYKKwkgKiAnZXNjX2V4dHJhJyBpcyBub3QgTlVMTCwgdGhvc2UgYWRkaXRpb25hbCBjaGFyYWN0ZXJzIHdpbGwgYWxzbyBhbHdheXMKKwkgKiBiZSBlc2NhcGVkLiAgSWYgJ2VzY19vaycgaXMgbm90IE5VTEwsIHRob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBsZWZ0CisJICogZXNjYXBlZCBpZiBmb3VuZCB0aGF0IHdheSwgYnV0IHdpbGwgbm90IGJlIHVuZXNjYXBlZCBvdGhlcndpc2UgKHVzZWQKKwkgKiBmb3IgZGVsaW1pdGVycykuICBJZiBhICUtZXNjYXBlIHNlcXVlbmNlIGlzIGVuY291bnRlcmVkIHRoYXQgaXMgbm90CisJICogZm9sbG93ZWQgYnkgMiBoZXhhZGVjaW1hbCBkaWdpdHMsIHRoZSBzZXF1ZW5jZSBpcyBpbnZhbGlkIGFuZAorCSAqIGZhbHNlICgwKSB3aWxsIGJlIHJldHVybmVkLiAgT3RoZXJ3aXNlIHRydWUgKDEpIHdpbGwgYmUgcmV0dXJuZWQgZm9yCisJICogc3VjY2Vzcy4KKwkgKgorCSAqIE5vdGUgdGhhdCBhbGwgJS1lc2NhcGUgc2VxdWVuY2VzIHdpbGwgYmUgbm9ybWFsaXplZCB0byBVUFBFUkNBU0UKKwkgKiBhcyBpbmRpY2F0ZWQgaW4gUkZDIDM5ODYuICBVbmxlc3MgaW5jbHVkZWQgaW4gZXNjX2V4dHJhIG9yIGVzY19vaworCSAqIGFscGhhbnVtZXJpY3MgYW5kICItLl9+IiB3aWxsIGFsd2F5cyBiZSB1bmVzY2FwZWQgYXMgcGVyIFJGQyAzOTg2LgorCSAqLworCisJd2hpbGUgKGZyb21fbGVuKSB7CisJCWludCBjaCA9ICpmcm9tKys7CisJCWludCB3YXNfZXNjID0gMDsKKworCQlmcm9tX2xlbi0tOworCQlpZiAoY2ggPT0gJyUnKSB7CisJCQlpZiAoZnJvbV9sZW4gPCAyIHx8CisJCQkgICAgIWlzeGRpZ2l0KGZyb21bMF0pIHx8CisJCQkgICAgIWlzeGRpZ2l0KGZyb21bMV0pKQorCQkJCXJldHVybiAwOworCQkJY2ggPSBoZXh2YWwoKmZyb20rKykgPDwgNDsKKwkJCWNoIHw9IGhleHZhbCgqZnJvbSsrKTsKKwkJCWZyb21fbGVuIC09IDI7CisJCQl3YXNfZXNjID0gMTsKKwkJfQorCQlpZiAoKHVuc2lnbmVkIGNoYXIpY2ggPD0gMHgxRiB8fCAodW5zaWduZWQgY2hhciljaCA+PSAweDdGIHx8CisJCSAgICBzdHJjaHIoVVJMX1VOU0FGRV9DSEFSUywgY2gpIHx8CisJCSAgICAoZXNjX2V4dHJhICYmIHN0cmNocihlc2NfZXh0cmEsIGNoKSkgfHwKKwkJICAgICh3YXNfZXNjICYmIHN0cmNocihlc2Nfb2ssIGNoKSkpCisJCQlzdHJidWZfYWRkZihidWYsICIlJSUwMlgiLCAodW5zaWduZWQgY2hhciljaCk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRjaChidWYsIGNoKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworY2hhciAqdXJsX25vcm1hbGl6ZShjb25zdCBjaGFyICp1cmwsIHN0cnVjdCB1cmxfaW5mbyAqb3V0X2luZm8pCit7CisJLyoKKwkgKiBOb3JtYWxpemUgTlVMLXRlcm1pbmF0ZWQgdXJsIHVzaW5nIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisJICoKKwkgKiAxLiBDYXNlLWluc2Vuc2l0aXZlIHBhcnRzIG9mIHVybCB3aWxsIGJlIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlCisJICogMi4gJS1lbmNvZGVkIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QgbmVlZCB0byBiZSB3aWxsIGJlIHVuZW5jb2RlZAorCSAqIDMuIENoYXJhY3RlcnMgdGhhdCBhcmUgbm90ICUtZW5jb2RlZCBhbmQgbXVzdCBiZSB3aWxsIGJlIGVuY29kZWQKKwkgKiA0LiBBbGwgJS1lbmNvZGluZ3Mgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZSBoZXhhZGVjaW1hbAorCSAqIDUuIExlYWRpbmcgMHMgYXJlIHJlbW92ZWQgZnJvbSBwb3J0IG51bWJlcnMKKwkgKiA2LiBJZiB0aGUgZGVmYXVsdCBwb3J0IGZvciB0aGUgc2NoZW1lIGlzIGdpdmVuIGl0IHdpbGwgYmUgcmVtb3ZlZAorCSAqIDcuIEEgcGF0aCBwYXJ0IChpbmNsdWRpbmcgZW1wdHkpIG5vdCBzdGFydGluZyB3aXRoICcvJyBoYXMgb25lIGFkZGVkCisJICogOC4gQW55IGRvdCBzZWdtZW50cyAoLiBvciAuLikgaW4gdGhlIHBhdGggYXJlIHJlc29sdmVkIGFuZCByZW1vdmVkCisJICogOS4gSVB2NiBob3N0IGxpdGVyYWxzIGFyZSBhbGxvd2VkIChidXQgbm90IG5vcm1hbGl6ZWQgb3IgdmFsaWRhdGVkKQorCSAqCisJICogVGhlIHJ1bGVzIGFyZSBiYXNlZCBvbiBpbmZvcm1hdGlvbiBpbiBSRkMgMzk4Ni4KKwkgKgorCSAqIFBsZWFzZSBub3RlIHRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgYSBmdWxsIFVSTCBpbmNsdWRpbmcgYSBzY2hlbWUKKwkgKiBhbmQgaG9zdCBwYXJ0IChleGNlcHQgZm9yIGZpbGU6IFVSTHMgd2hpY2ggbWF5IGhhdmUgYW4gZW1wdHkgaG9zdCkuCisJICoKKwkgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyB0aGF0IG11c3QgYmUgZnJlZWQKKwkgKiBvciBOVUxMIGlmIHRoZSB1cmwgaXMgbm90IHZhbGlkLgorCSAqCisJICogSWYgb3V0X2luZm8gaXMgbm9uLU5VTEwsIHRoZSB1cmwgYW5kIGVyciBmaWVsZHMgdGhlcmVpbiB3aWxsIGFsd2F5cworCSAqIGJlIHNldC4gIElmIGEgbm9uLU5VTEwgdmFsdWUgaXMgcmV0dXJuZWQsIGl0IHdpbGwgYmUgc3RvcmVkIGluCisJICogb3V0X2luZm8tPnVybCBhcyB3ZWxsLCBvdXRfaW5mby0+ZXJyIHdpbGwgYmUgc2V0IHRvIE5VTEwgYW5kIHRoZQorCSAqIG90aGVyIGZpZWxkcyBvZiAqb3V0X2luZm8gd2lsbCBhbHNvIGJlIGZpbGxlZCBpbi4gIElmIGEgTlVMTCB2YWx1ZQorCSAqIGlzIHJldHVybmVkLCBOVUxMIHdpbGwgYmUgc3RvcmVkIGluIG91dF9pbmZvLT51cmwgYW5kIG91dF9pbmZvLT5lcnIKKwkgKiB3aWxsIGJlIHNldCB0byBhIGJyaWVmLCB0cmFuc2xhdGVkLCBlcnJvciBtZXNzYWdlLCBidXQgbm8gb3RoZXIKKwkgKiBmaWVsZHMgd2lsbCBiZSBmaWxsZWQgaW4uCisJICoKKwkgKiBUaGlzIGlzIE5PVCBhIFVSTCB2YWxpZGF0aW9uIGZ1bmN0aW9uLiAgRnVsbCBVUkwgdmFsaWRhdGlvbiBpcyBOT1QKKwkgKiBwZXJmb3JtZWQuICBTb21lIGludmFsaWQgaG9zdCBuYW1lcyBhcmUgcGFzc2VkIHRocm91Z2ggdGhpcyBmdW5jdGlvbgorCSAqIHVuZGV0ZWN0ZWQuICBIb3dldmVyLCBtb3N0IGFsbCBvdGhlciBwcm9ibGVtcyB0aGF0IG1ha2UgYSBVUkwgaW52YWxpZAorCSAqIHdpbGwgYmUgZGV0ZWN0ZWQgKGluY2x1ZGluZyBhIG1pc3NpbmcgaG9zdCBmb3Igbm9uIGZpbGU6IFVSTHMpLgorCSAqLworCisJc2l6ZV90IHVybF9sZW4gPSBzdHJsZW4odXJsKTsKKwlzdHJ1Y3Qgc3RyYnVmIG5vcm07CisJc2l6ZV90IHNwYW5uZWQ7CisJc2l6ZV90IHNjaGVtZV9sZW4sIHVzZXJfb2ZmPTAsIHVzZXJfbGVuPTAsIHBhc3N3ZF9vZmY9MCwgcGFzc3dkX2xlbj0wOworCXNpemVfdCBob3N0X29mZj0wLCBob3N0X2xlbj0wLCBwb3J0X2xlbj0wLCBwYXRoX29mZiwgcGF0aF9sZW4sIHJlc3VsdF9sZW47CisJY29uc3QgY2hhciAqc2xhc2hfcHRyLCAqYXRfcHRyLCAqY29sb25fcHRyLCAqcGF0aF9zdGFydDsKKwljaGFyICpyZXN1bHQ7CisKKwkvKgorCSAqIENvcHkgbG93ZXJjYXNlZCBzY2hlbWUgYW5kIDovLyBzdWZmaXgsICUtZXNjYXBlcyBhcmUgbm90IGFsbG93ZWQKKwkgKiBGaXJzdCBjaGFyYWN0ZXIgb2Ygc2NoZW1lIG11c3QgYmUgVVJMX0FMUEhBCisJICovCisJc3Bhbm5lZCA9IHN0cnNwbih1cmwsIFVSTF9TQ0hFTUVfQ0hBUlMpOworCWlmICghc3Bhbm5lZCB8fCAhaXNhbHBoYSh1cmxbMF0pIHx8IHNwYW5uZWQgKyAzID4gdXJsX2xlbiB8fAorCSAgICB1cmxbc3Bhbm5lZF0gIT0gJzonIHx8IHVybFtzcGFubmVkKzFdICE9ICcvJyB8fCB1cmxbc3Bhbm5lZCsyXSAhPSAnLycpIHsKKwkJaWYgKG91dF9pbmZvKSB7CisJCQlvdXRfaW5mby0+dXJsID0gTlVMTDsKKwkJCW91dF9pbmZvLT5lcnIgPSBfKCJpbnZhbGlkIFVSTCBzY2hlbWUgbmFtZSBvciBtaXNzaW5nICc6Ly8nIHN1ZmZpeCIpOworCQl9CisJCXJldHVybiBOVUxMOyAvKiBCYWQgc2NoZW1lIGFuZC9vciBtaXNzaW5nICI6Ly8iIHBhcnQgKi8KKwl9CisJc3RyYnVmX2luaXQoJm5vcm0sIHVybF9sZW4pOworCXNjaGVtZV9sZW4gPSBzcGFubmVkOworCXNwYW5uZWQgKz0gMzsKKwl1cmxfbGVuIC09IHNwYW5uZWQ7CisJd2hpbGUgKHNwYW5uZWQtLSkKKwkJc3RyYnVmX2FkZGNoKCZub3JtLCB0b2xvd2VyKCp1cmwrKykpOworCisKKwkvKgorCSAqIENvcHkgYW55IHVzZXJuYW1lOnBhc3N3b3JkIGlmIHByZXNlbnQgbm9ybWFsaXppbmcgJS1lc2NhcGVzCisJICovCisJYXRfcHRyID0gc3RyY2hyKHVybCwgJ0AnKTsKKwlzbGFzaF9wdHIgPSB1cmwgKyBzdHJjc3BuKHVybCwgIi8/IyIpOworCWlmIChhdF9wdHIgJiYgYXRfcHRyIDwgc2xhc2hfcHRyKSB7CisJCXVzZXJfb2ZmID0gbm9ybS5sZW47CisJCWlmIChhdF9wdHIgPiB1cmwpIHsKKwkJCWlmICghYXBwZW5kX25vcm1hbGl6ZWRfZXNjYXBlcygmbm9ybSwgdXJsLCBhdF9wdHIgLSB1cmwsCisJCQkJCQkgICAgICAgIiIsIFVSTF9SRVNFUlZFRCkpIHsKKwkJCQlpZiAob3V0X2luZm8pIHsKKwkJCQkJb3V0X2luZm8tPnVybCA9IE5VTEw7CisJCQkJCW91dF9pbmZvLT5lcnIgPSBfKCJpbnZhbGlkICVYWCBlc2NhcGUgc2VxdWVuY2UiKTsKKwkJCQl9CisJCQkJc3RyYnVmX3JlbGVhc2UoJm5vcm0pOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJY29sb25fcHRyID0gc3RyY2hyKG5vcm0uYnVmICsgc2NoZW1lX2xlbiArIDMsICc6Jyk7CisJCQlpZiAoY29sb25fcHRyKSB7CisJCQkJcGFzc3dkX29mZiA9IChjb2xvbl9wdHIgKyAxKSAtIG5vcm0uYnVmOworCQkJCXBhc3N3ZF9sZW4gPSBub3JtLmxlbiAtIHBhc3N3ZF9vZmY7CisJCQkJdXNlcl9sZW4gPSAocGFzc3dkX29mZiAtIDEpIC0gKHNjaGVtZV9sZW4gKyAzKTsKKwkJCX0gZWxzZSB7CisJCQkJdXNlcl9sZW4gPSBub3JtLmxlbiAtIChzY2hlbWVfbGVuICsgMyk7CisJCQl9CisJCX0KKwkJc3RyYnVmX2FkZGNoKCZub3JtLCAnQCcpOworCQl1cmxfbGVuIC09ICgrK2F0X3B0ciAtIHVybCk7CisJCXVybCA9IGF0X3B0cjsKKwl9CisKKworCS8qCisJICogQ29weSB0aGUgaG9zdCBwYXJ0IGV4Y2x1ZGluZyBhbnkgcG9ydCBwYXJ0LCBubyAlLWVzY2FwZXMgYWxsb3dlZAorCSAqLworCWlmICghdXJsX2xlbiB8fCBzdHJjaHIoIjovPyMiLCAqdXJsKSkgeworCQkvKiBNaXNzaW5nIGhvc3QgaW52YWxpZCBmb3IgYWxsIFVSTCBzY2hlbWVzIGV4Y2VwdCBmaWxlICovCisJCWlmIChzdHJuY21wKG5vcm0uYnVmLCAiZmlsZToiLCA1KSkgeworCQkJaWYgKG91dF9pbmZvKSB7CisJCQkJb3V0X2luZm8tPnVybCA9IE5VTEw7CisJCQkJb3V0X2luZm8tPmVyciA9IF8oIm1pc3NpbmcgaG9zdCBhbmQgc2NoZW1lIGlzIG5vdCAnZmlsZTonIik7CisJCQl9CisJCQlzdHJidWZfcmVsZWFzZSgmbm9ybSk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCWhvc3Rfb2ZmID0gbm9ybS5sZW47CisJfQorCWNvbG9uX3B0ciA9IHNsYXNoX3B0ciAtIDE7CisJd2hpbGUgKGNvbG9uX3B0ciA+IHVybCAmJiAqY29sb25fcHRyICE9ICc6JyAmJiAqY29sb25fcHRyICE9ICddJykKKwkJY29sb25fcHRyLS07CisJaWYgKCpjb2xvbl9wdHIgIT0gJzonKSB7CisJCWNvbG9uX3B0ciA9IHNsYXNoX3B0cjsKKwl9IGVsc2UgaWYgKCFob3N0X29mZiAmJiBjb2xvbl9wdHIgPCBzbGFzaF9wdHIgJiYgY29sb25fcHRyICsgMSAhPSBzbGFzaF9wdHIpIHsKKwkJLyogZmlsZTogVVJMcyBtYXkgbm90IGhhdmUgYSBwb3J0IG51bWJlciAqLworCQlpZiAob3V0X2luZm8pIHsKKwkJCW91dF9pbmZvLT51cmwgPSBOVUxMOworCQkJb3V0X2luZm8tPmVyciA9IF8oImEgJ2ZpbGU6JyBVUkwgbWF5IG5vdCBoYXZlIGEgcG9ydCBudW1iZXIiKTsKKwkJfQorCQlzdHJidWZfcmVsZWFzZSgmbm9ybSk7CisJCXJldHVybiBOVUxMOworCX0KKwlzcGFubmVkID0gc3Ryc3BuKHVybCwgVVJMX0hPU1RfQ0hBUlMpOworCWlmIChzcGFubmVkIDwgY29sb25fcHRyIC0gdXJsKSB7CisJCS8qIEhvc3QgbmFtZSBoYXMgaW52YWxpZCBjaGFyYWN0ZXJzICovCisJCWlmIChvdXRfaW5mbykgeworCQkJb3V0X2luZm8tPnVybCA9IE5VTEw7CisJCQlvdXRfaW5mby0+ZXJyID0gXygiaW52YWxpZCBjaGFyYWN0ZXJzIGluIGhvc3QgbmFtZSIpOworCQl9CisJCXN0cmJ1Zl9yZWxlYXNlKCZub3JtKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXdoaWxlICh1cmwgPCBjb2xvbl9wdHIpIHsKKwkJc3RyYnVmX2FkZGNoKCZub3JtLCB0b2xvd2VyKCp1cmwrKykpOworCQl1cmxfbGVuLS07CisJfQorCisKKwkvKgorCSAqIENoZWNrIHRoZSBwb3J0IHBhcnQgYW5kIGNvcHkgaWYgbm90IHRoZSBkZWZhdWx0IChhZnRlciByZW1vdmluZyBhbnkKKwkgKiBsZWFkaW5nIDBzKTsgbm8gJS1lc2NhcGVzIGFsbG93ZWQKKwkgKi8KKwlpZiAoY29sb25fcHRyIDwgc2xhc2hfcHRyKSB7CisJCS8qIHNraXAgdGhlICc6JyBhbmQgbGVhZGluZyAwcyBidXQgbm90IHRoZSBsYXN0IG9uZSBpZiBhbGwgMHMgKi8KKwkJdXJsKys7CisJCXVybCArPSBzdHJzcG4odXJsLCAiMCIpOworCQlpZiAodXJsID09IHNsYXNoX3B0ciAmJiB1cmxbLTFdID09ICcwJykKKwkJCXVybC0tOworCQlpZiAodXJsID09IHNsYXNoX3B0cikgeworCQkJLyogU2tpcCAiOiIgcG9ydCB3aXRoIG5vIG51bWJlciwgaXQncyBzYW1lIGFzIGRlZmF1bHQgKi8KKwkJfSBlbHNlIGlmIChzbGFzaF9wdHIgLSB1cmwgPT0gMiAmJgorCQkJICAgIXN0cm5jbXAobm9ybS5idWYsICJodHRwOiIsIDUpICYmCisJCQkgICAhc3RybmNtcCh1cmwsICI4MCIsIDIpKSB7CisJCQkvKiBTa2lwIGh0dHAgOjgwIGFzIGl0J3MgdGhlIGRlZmF1bHQgKi8KKwkJfSBlbHNlIGlmIChzbGFzaF9wdHIgLSB1cmwgPT0gMyAmJgorCQkJICAgIXN0cm5jbXAobm9ybS5idWYsICJodHRwczoiLCA2KSAmJgorCQkJICAgIXN0cm5jbXAodXJsLCAiNDQzIiwgMykpIHsKKwkJCS8qIFNraXAgaHR0cHMgOjQ0MyBhcyBpdCdzIHRoZSBkZWZhdWx0ICovCisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogUG9ydCBudW1iZXIgbXVzdCBiZSBhbGwgZGlnaXRzIHdpdGggbGVhZGluZyAwcyByZW1vdmVkCisJCQkgKiBhbmQgc2luY2UgYWxsIHRoZSBwcm90b2NvbHMgd2UgZGVhbCB3aXRoIGhhdmUgYSAxNi1iaXQKKwkJCSAqIHBvcnQgbnVtYmVyIGl0IG11c3QgYWxzbyBiZSBpbiB0aGUgcmFuZ2UgMS4uNjU1MzUKKwkJCSAqIDAgaXMgbm90IGFsbG93ZWQgYmVjYXVzZSB0aGF0IG1lYW5zICJuZXh0IGF2YWlsYWJsZSIKKwkJCSAqIG9uIGp1c3QgYWJvdXQgZXZlcnkgc3lzdGVtIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIHVzZWQKKwkJCSAqLworCQkJdW5zaWduZWQgbG9uZyBwbnVtID0gMDsKKwkJCXNwYW5uZWQgPSBzdHJzcG4odXJsLCBVUkxfRElHSVQpOworCQkJaWYgKHNwYW5uZWQgPCBzbGFzaF9wdHIgLSB1cmwpIHsKKwkJCQkvKiBwb3J0IG51bWJlciBoYXMgaW52YWxpZCBjaGFyYWN0ZXJzICovCisJCQkJaWYgKG91dF9pbmZvKSB7CisJCQkJCW91dF9pbmZvLT51cmwgPSBOVUxMOworCQkJCQlvdXRfaW5mby0+ZXJyID0gXygiaW52YWxpZCBwb3J0IG51bWJlciIpOworCQkJCX0KKwkJCQlzdHJidWZfcmVsZWFzZSgmbm9ybSk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlpZiAoc2xhc2hfcHRyIC0gdXJsIDw9IDUpCisJCQkJcG51bSA9IHN0cnRvdWwodXJsLCBOVUxMLCAxMCk7CisJCQlpZiAocG51bSA9PSAwIHx8IHBudW0gPiA2NTUzNSkgeworCQkJCS8qIHBvcnQgbnVtYmVyIG5vdCBpbiByYW5nZSAxLi42NTUzNSAqLworCQkJCWlmIChvdXRfaW5mbykgeworCQkJCQlvdXRfaW5mby0+dXJsID0gTlVMTDsKKwkJCQkJb3V0X2luZm8tPmVyciA9IF8oImludmFsaWQgcG9ydCBudW1iZXIiKTsKKwkJCQl9CisJCQkJc3RyYnVmX3JlbGVhc2UoJm5vcm0pOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJc3RyYnVmX2FkZGNoKCZub3JtLCAnOicpOworCQkJc3RyYnVmX2FkZCgmbm9ybSwgdXJsLCBzbGFzaF9wdHIgLSB1cmwpOworCQkJcG9ydF9sZW4gPSBzbGFzaF9wdHIgLSB1cmw7CisJCX0KKwkJdXJsX2xlbiAtPSBzbGFzaF9wdHIgLSBjb2xvbl9wdHI7CisJCXVybCA9IHNsYXNoX3B0cjsKKwl9CisJaWYgKGhvc3Rfb2ZmKQorCQlob3N0X2xlbiA9IG5vcm0ubGVuIC0gaG9zdF9vZmY7CisKKworCS8qCisJICogTm93IGNvcHkgdGhlIHBhdGggcmVzb2x2aW5nIGFueSAuIGFuZCAuLiBzZWdtZW50cyBiZWluZyBjYXJlZnVsIG5vdAorCSAqIHRvIGNvcnJ1cHQgdGhlIFVSTCBieSB1bmVzY2FwaW5nIGFueSBkZWxpbWl0ZXJzLCBidXQgZG8gYWRkIGFuCisJICogaW5pdGlhbCAnLycgaWYgaXQncyBtaXNzaW5nIGFuZCBkbyBub3JtYWxpemUgYW55ICUtZXNjYXBlIHNlcXVlbmNlcy4KKwkgKi8KKwlwYXRoX29mZiA9IG5vcm0ubGVuOworCXBhdGhfc3RhcnQgPSBub3JtLmJ1ZiArIHBhdGhfb2ZmOworCXN0cmJ1Zl9hZGRjaCgmbm9ybSwgJy8nKTsKKwlpZiAoKnVybCA9PSAnLycpIHsKKwkJdXJsKys7CisJCXVybF9sZW4tLTsKKwl9CisJZm9yICg7OykgeworCQljb25zdCBjaGFyICpzZWdfc3RhcnQ7CisJCXNpemVfdCBzZWdfc3RhcnRfb2ZmID0gbm9ybS5sZW47CisJCWNvbnN0IGNoYXIgKm5leHRfc2xhc2ggPSB1cmwgKyBzdHJjc3BuKHVybCwgIi8/IyIpOworCQlpbnQgc2tpcF9hZGRfc2xhc2ggPSAwOworCisJCS8qCisJCSAqIFJGQyAzNjg5IGluZGljYXRlcyB0aGF0IGFueSAuIG9yIC4uIHNlZ21lbnRzIHNob3VsZCBiZQorCQkgKiB1bmVzY2FwZWQgYmVmb3JlIGJlaW5nIGNoZWNrZWQgZm9yLgorCQkgKi8KKwkJaWYgKCFhcHBlbmRfbm9ybWFsaXplZF9lc2NhcGVzKCZub3JtLCB1cmwsIG5leHRfc2xhc2ggLSB1cmwsICIiLAorCQkJCQkgICAgICAgVVJMX1JFU0VSVkVEKSkgeworCQkJaWYgKG91dF9pbmZvKSB7CisJCQkJb3V0X2luZm8tPnVybCA9IE5VTEw7CisJCQkJb3V0X2luZm8tPmVyciA9IF8oImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIpOworCQkJfQorCQkJc3RyYnVmX3JlbGVhc2UoJm5vcm0pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQlzZWdfc3RhcnQgPSBub3JtLmJ1ZiArIHNlZ19zdGFydF9vZmY7CisJCWlmICghc3RyY21wKHNlZ19zdGFydCwgIi4iKSkgeworCQkJLyogaWdub3JlIGEgLiBzZWdtZW50OyBiZSBjYXJlZnVsIG5vdCB0byByZW1vdmUgaW5pdGlhbCAnLycgKi8KKwkJCWlmIChzZWdfc3RhcnQgPT0gcGF0aF9zdGFydCArIDEpIHsKKwkJCQlzdHJidWZfc2V0bGVuKCZub3JtLCBub3JtLmxlbiAtIDEpOworCQkJCXNraXBfYWRkX3NsYXNoID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJc3RyYnVmX3NldGxlbigmbm9ybSwgbm9ybS5sZW4gLSAyKTsKKwkJCX0KKwkJfSBlbHNlIGlmICghc3RyY21wKHNlZ19zdGFydCwgIi4uIikpIHsKKwkJCS8qCisJCQkgKiBpZ25vcmUgYSAuLiBzZWdtZW50IGFuZCByZW1vdmUgdGhlIHByZXZpb3VzIHNlZ21lbnQ7CisJCQkgKiBiZSBjYXJlZnVsIG5vdCB0byByZW1vdmUgaW5pdGlhbCAnLycgZnJvbSBwYXRoCisJCQkgKi8KKwkJCWNvbnN0IGNoYXIgKnByZXZfc2xhc2ggPSBub3JtLmJ1ZiArIG5vcm0ubGVuIC0gMzsKKwkJCWlmIChwcmV2X3NsYXNoID09IHBhdGhfc3RhcnQpIHsKKwkJCQkvKiBpbnZhbGlkIC4uIGJlY2F1c2Ugbm8gcHJldmlvdXMgc2VnbWVudCB0byByZW1vdmUgKi8KKwkJCQlpZiAob3V0X2luZm8pIHsKKwkJCQkJb3V0X2luZm8tPnVybCA9IE5VTEw7CisJCQkJCW91dF9pbmZvLT5lcnIgPSBfKCJpbnZhbGlkICcuLicgcGF0aCBzZWdtZW50Iik7CisJCQkJfQorCQkJCXN0cmJ1Zl9yZWxlYXNlKCZub3JtKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCXdoaWxlICgqLS1wcmV2X3NsYXNoICE9ICcvJykge30KKwkJCWlmIChwcmV2X3NsYXNoID09IHBhdGhfc3RhcnQpIHsKKwkJCQlzdHJidWZfc2V0bGVuKCZub3JtLCBwcmV2X3NsYXNoIC0gbm9ybS5idWYgKyAxKTsKKwkJCQlza2lwX2FkZF9zbGFzaCA9IDE7CisJCQl9IGVsc2UgeworCQkJCXN0cmJ1Zl9zZXRsZW4oJm5vcm0sIHByZXZfc2xhc2ggLSBub3JtLmJ1Zik7CisJCQl9CisJCX0KKwkJdXJsX2xlbiAtPSBuZXh0X3NsYXNoIC0gdXJsOworCQl1cmwgPSBuZXh0X3NsYXNoOworCQkvKiBpZiB0aGUgbmV4dCBjaGFyIGlzIG5vdCAnLycgZG9uZSB3aXRoIHRoZSBwYXRoICovCisJCWlmICgqdXJsICE9ICcvJykKKwkJCWJyZWFrOworCQl1cmwrKzsKKwkJdXJsX2xlbi0tOworCQlpZiAoIXNraXBfYWRkX3NsYXNoKQorCQkJc3RyYnVmX2FkZGNoKCZub3JtLCAnLycpOworCX0KKwlwYXRoX2xlbiA9IG5vcm0ubGVuIC0gcGF0aF9vZmY7CisKKworCS8qCisJICogTm93IHNpbXBseSBjb3B5IHRoZSByZXN0LCBpZiBhbnksIG9ubHkgbm9ybWFsaXppbmcgJS1lc2NhcGVzIGFuZAorCSAqIGJlaW5nIGNhcmVmdWwgbm90IHRvIGNvcnJ1cHQgdGhlIFVSTCBieSB1bmVzY2FwaW5nIGFueSBkZWxpbWl0ZXJzLgorCSAqLworCWlmICgqdXJsKSB7CisJCWlmICghYXBwZW5kX25vcm1hbGl6ZWRfZXNjYXBlcygmbm9ybSwgdXJsLCB1cmxfbGVuLCAiIiwgVVJMX1JFU0VSVkVEKSkgeworCQkJaWYgKG91dF9pbmZvKSB7CisJCQkJb3V0X2luZm8tPnVybCA9IE5VTEw7CisJCQkJb3V0X2luZm8tPmVyciA9IF8oImludmFsaWQgJVhYIGVzY2FwZSBzZXF1ZW5jZSIpOworCQkJfQorCQkJc3RyYnVmX3JlbGVhc2UoJm5vcm0pOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKworCXJlc3VsdCA9IHN0cmJ1Zl9kZXRhY2goJm5vcm0sICZyZXN1bHRfbGVuKTsKKwlpZiAob3V0X2luZm8pIHsKKwkJb3V0X2luZm8tPnVybCA9IHJlc3VsdDsKKwkJb3V0X2luZm8tPmVyciA9IE5VTEw7CisJCW91dF9pbmZvLT51cmxfbGVuID0gcmVzdWx0X2xlbjsKKwkJb3V0X2luZm8tPnNjaGVtZV9sZW4gPSBzY2hlbWVfbGVuOworCQlvdXRfaW5mby0+dXNlcl9vZmYgPSB1c2VyX29mZjsKKwkJb3V0X2luZm8tPnVzZXJfbGVuID0gdXNlcl9sZW47CisJCW91dF9pbmZvLT5wYXNzd2Rfb2ZmID0gcGFzc3dkX29mZjsKKwkJb3V0X2luZm8tPnBhc3N3ZF9sZW4gPSBwYXNzd2RfbGVuOworCQlvdXRfaW5mby0+aG9zdF9vZmYgPSBob3N0X29mZjsKKwkJb3V0X2luZm8tPmhvc3RfbGVuID0gaG9zdF9sZW47CisJCW91dF9pbmZvLT5wb3J0X2xlbiA9IHBvcnRfbGVuOworCQlvdXRfaW5mby0+cGF0aF9vZmYgPSBwYXRoX29mZjsKKwkJb3V0X2luZm8tPnBhdGhfbGVuID0gcGF0aF9sZW47CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzaXplX3QgdXJsX21hdGNoX3ByZWZpeChjb25zdCBjaGFyICp1cmwsCisJCQkgICAgICAgY29uc3QgY2hhciAqdXJsX3ByZWZpeCwKKwkJCSAgICAgICBzaXplX3QgdXJsX3ByZWZpeF9sZW4pCit7CisJLyoKKwkgKiB1cmxfcHJlZml4IG1hdGNoZXMgdXJsIGlmIHVybF9wcmVmaXggaXMgYW4gZXhhY3QgbWF0Y2ggZm9yIHVybCBvciBpdAorCSAqIGlzIGEgcHJlZml4IG9mIHVybCBhbmQgdGhlIG1hdGNoIGVuZHMgb24gYSBwYXRoIGNvbXBvbmVudCBib3VuZGFyeS4KKwkgKiBCb3RoIHVybCBhbmQgdXJsX3ByZWZpeCBhcmUgY29uc2lkZXJlZCB0byBoYXZlIGFuIGltcGxpY2l0ICcvJyBvbiB0aGUKKwkgKiBlbmQgZm9yIG1hdGNoaW5nIHB1cnBvc2VzIGlmIHRoZXkgZG8gbm90IGFscmVhZHkuCisJICoKKwkgKiB1cmwgbXVzdCBiZSBOVUwgdGVybWluYXRlZC4gIHVybF9wcmVmaXhfbGVuIGlzIHRoZSBsZW5ndGggb2YKKwkgKiB1cmxfcHJlZml4IHdoaWNoIG5lZWQgbm90IGJlIE5VTCB0ZXJtaW5hdGVkLgorCSAqCisJICogVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBtYXRjaCBpbiBjaGFyYWN0ZXJzIChpbmNsdWRpbmcKKwkgKiB0aGUgZmluYWwgJy8nIGV2ZW4gaWYgaXQncyBpbXBsaWNpdCkgb3IgMCBmb3Igbm8gbWF0Y2guCisJICoKKwkgKiBQYXNzaW5nIE5VTEwgYXMgdXJsIGFuZC9vciB1cmxfcHJlZml4IHdpbGwgYWx3YXlzIGNhdXNlIDAgdG8gYmUKKwkgKiByZXR1cm5lZCB3aXRob3V0IGNhdXNpbmcgYW55IGZhdWx0cy4KKwkgKi8KKwlpZiAoIXVybCB8fCAhdXJsX3ByZWZpeCkKKwkJcmV0dXJuIDA7CisJaWYgKCF1cmxfcHJlZml4X2xlbiB8fCAodXJsX3ByZWZpeF9sZW4gPT0gMSAmJiAqdXJsX3ByZWZpeCA9PSAnLycpKQorCQlyZXR1cm4gKCEqdXJsIHx8ICp1cmwgPT0gJy8nKSA/IDEgOiAwOworCWlmICh1cmxfcHJlZml4W3VybF9wcmVmaXhfbGVuIC0gMV0gPT0gJy8nKQorCQl1cmxfcHJlZml4X2xlbi0tOworCWlmIChzdHJuY21wKHVybCwgdXJsX3ByZWZpeCwgdXJsX3ByZWZpeF9sZW4pKQorCQlyZXR1cm4gMDsKKwlpZiAoKHN0cmxlbih1cmwpID09IHVybF9wcmVmaXhfbGVuKSB8fCAodXJsW3VybF9wcmVmaXhfbGVuXSA9PSAnLycpKQorCQlyZXR1cm4gdXJsX3ByZWZpeF9sZW4gKyAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hdGNoX3VybHMoY29uc3Qgc3RydWN0IHVybF9pbmZvICp1cmwsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1cmxfaW5mbyAqdXJsX3ByZWZpeCwKKwkJICAgICAgaW50ICpleGFjdHVzZXJtYXRjaCkKK3sKKwkvKgorCSAqIHVybF9wcmVmaXggbWF0Y2hlcyB1cmwgaWYgdGhlIHNjaGVtZSwgaG9zdCBhbmQgcG9ydCBvZiB1cmxfcHJlZml4CisJICogYXJlIHRoZSBzYW1lIGFzIHRob3NlIG9mIHVybCBhbmQgdGhlIHBhdGggcG9ydGlvbiBvZiB1cmxfcHJlZml4CisJICogaXMgdGhlIHNhbWUgYXMgdGhlIHBhdGggcG9ydGlvbiBvZiB1cmwgb3IgaXQgaXMgYSBwcmVmaXggdGhhdAorCSAqIG1hdGNoZXMgYXQgYSAnLycgYm91bmRhcnkuICBJZiB1cmxfcHJlZml4IGNvbnRhaW5zIGEgdXNlciBuYW1lLAorCSAqIHRoYXQgbXVzdCBhbHNvIGV4YWN0bHkgbWF0Y2ggdGhlIHVzZXIgbmFtZSBpbiB1cmwuCisJICoKKwkgKiBJZiB0aGUgdXNlciwgaG9zdCwgcG9ydCBhbmQgcGF0aCBtYXRjaCBpbiB0aGlzIGZhc2hpb24sIHRoZSByZXR1cm5lZAorCSAqIHZhbHVlIGlzIHRoZSBsZW5ndGggb2YgdGhlIHBhdGggbWF0Y2ggaW5jbHVkaW5nIGFueSBpbXBsaWNpdAorCSAqIGZpbmFsICcvJy4gIEZvciBleGFtcGxlLCAiaHR0cDovL21lQGV4YW1wbGUuY29tL3BhdGgiIGlzIG1hdGNoZWQgYnkKKwkgKiAiaHR0cDovL2V4YW1wbGUuY29tIiB3aXRoIGEgcGF0aCBsZW5ndGggb2YgMS4KKwkgKgorCSAqIElmIHRoZXJlIGlzIGEgbWF0Y2ggYW5kIGV4YWN0dXNlcm1hdGNoIGlzIG5vdCBOVUxMLCB0aGVuCisJICogKmV4YWN0dXNlcm1hdGNoIHdpbGwgYmUgc2V0IHRvIHRydWUgaWYgYm90aCB1cmwgYW5kIHVybF9wcmVmaXgKKwkgKiBjb250YWluZWQgYSB1c2VyIG5hbWUgb3IgZmFsc2UgaWYgdXJsX3ByZWZpeCBkaWQgbm90IGhhdmUgYQorCSAqIHVzZXIgbmFtZS4gIElmIHRoZXJlIGlzIG5vIG1hdGNoICpleGFjdHVzZXJtYXRjaCBpcyBsZWZ0IHVudG91Y2hlZC4KKwkgKi8KKwlpbnQgdXNlcm1hdGNoZWQgPSAwOworCWludCBwYXRobWF0Y2hsZW47CisKKwlpZiAoIXVybCB8fCAhdXJsX3ByZWZpeCB8fCAhdXJsLT51cmwgfHwgIXVybF9wcmVmaXgtPnVybCkKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayB0aGUgc2NoZW1lICovCisJaWYgKHVybF9wcmVmaXgtPnNjaGVtZV9sZW4gIT0gdXJsLT5zY2hlbWVfbGVuIHx8CisJICAgIHN0cm5jbXAodXJsLT51cmwsIHVybF9wcmVmaXgtPnVybCwgdXJsLT5zY2hlbWVfbGVuKSkKKwkJcmV0dXJuIDA7IC8qIHNjaGVtZXMgZG8gbm90IG1hdGNoICovCisKKwkvKiBjaGVjayB0aGUgdXNlciBuYW1lIGlmIHVybF9wcmVmaXggaGFzIG9uZSAqLworCWlmICh1cmxfcHJlZml4LT51c2VyX29mZikgeworCQlpZiAoIXVybC0+dXNlcl9vZmYgfHwgdXJsLT51c2VyX2xlbiAhPSB1cmxfcHJlZml4LT51c2VyX2xlbiB8fAorCQkgICAgc3RybmNtcCh1cmwtPnVybCArIHVybC0+dXNlcl9vZmYsCisJCQkgICAgdXJsX3ByZWZpeC0+dXJsICsgdXJsX3ByZWZpeC0+dXNlcl9vZmYsCisJCQkgICAgdXJsLT51c2VyX2xlbikpCisJCQlyZXR1cm4gMDsgLyogdXJsX3ByZWZpeCBoYXMgYSB1c2VyIGJ1dCBpdCdzIG5vdCBhIG1hdGNoICovCisJCXVzZXJtYXRjaGVkID0gMTsKKwl9CisKKwkvKiBjaGVjayB0aGUgaG9zdCBhbmQgcG9ydCAqLworCWlmICh1cmxfcHJlZml4LT5ob3N0X2xlbiAhPSB1cmwtPmhvc3RfbGVuIHx8CisJICAgIHN0cm5jbXAodXJsLT51cmwgKyB1cmwtPmhvc3Rfb2ZmLAorCQkgICAgdXJsX3ByZWZpeC0+dXJsICsgdXJsX3ByZWZpeC0+aG9zdF9vZmYsIHVybC0+aG9zdF9sZW4pKQorCQlyZXR1cm4gMDsgLyogaG9zdCBuYW1lcyBhbmQvb3IgcG9ydHMgZG8gbm90IG1hdGNoICovCisKKwkvKiBjaGVjayB0aGUgcGF0aCAqLworCXBhdGhtYXRjaGxlbiA9IHVybF9tYXRjaF9wcmVmaXgoCisJCXVybC0+dXJsICsgdXJsLT5wYXRoX29mZiwKKwkJdXJsX3ByZWZpeC0+dXJsICsgdXJsX3ByZWZpeC0+cGF0aF9vZmYsCisJCXVybF9wcmVmaXgtPnVybF9sZW4gLSB1cmxfcHJlZml4LT5wYXRoX29mZik7CisKKwlpZiAocGF0aG1hdGNobGVuICYmIGV4YWN0dXNlcm1hdGNoKQorCQkqZXhhY3R1c2VybWF0Y2ggPSB1c2VybWF0Y2hlZDsKKwlyZXR1cm4gcGF0aG1hdGNobGVuOworfQorCitpbnQgdXJsbWF0Y2hfY29uZmlnX2VudHJ5KGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdGVtOworCXN0cnVjdCB1cmxtYXRjaF9jb25maWcgKmNvbGxlY3QgPSBjYjsKKwlzdHJ1Y3QgdXJsbWF0Y2hfaXRlbSAqbWF0Y2hlZDsKKwlzdHJ1Y3QgdXJsX2luZm8gKnVybCA9ICZjb2xsZWN0LT51cmw7CisJY29uc3QgY2hhciAqa2V5LCAqZG90OworCXN0cnVjdCBzdHJidWYgc3ludGhrZXkgPSBTVFJCVUZfSU5JVDsKKwlzaXplX3QgbWF0Y2hlZF9sZW4gPSAwOworCWludCB1c2VyX21hdGNoZWQgPSAwOworCWludCByZXR2YWw7CisKKwlpZiAoIXNraXBfcHJlZml4KHZhciwgY29sbGVjdC0+c2VjdGlvbiwgJmtleSkgfHwgKihrZXkrKykgIT0gJy4nKSB7CisJCWlmIChjb2xsZWN0LT5jYXNjYWRlX2ZuKQorCQkJcmV0dXJuIGNvbGxlY3QtPmNhc2NhZGVfZm4odmFyLCB2YWx1ZSwgY2IpOworCQlyZXR1cm4gMDsgLyogbm90IGludGVyZXN0ZWQgKi8KKwl9CisJZG90ID0gc3RycmNocihrZXksICcuJyk7CisJaWYgKGRvdCkgeworCQljaGFyICpjb25maWdfdXJsLCAqbm9ybV91cmw7CisJCXN0cnVjdCB1cmxfaW5mbyBub3JtX2luZm87CisKKwkJY29uZmlnX3VybCA9IHhtZW1kdXB6KGtleSwgZG90IC0ga2V5KTsKKwkJbm9ybV91cmwgPSB1cmxfbm9ybWFsaXplKGNvbmZpZ191cmwsICZub3JtX2luZm8pOworCQlmcmVlKGNvbmZpZ191cmwpOworCQlpZiAoIW5vcm1fdXJsKQorCQkJcmV0dXJuIDA7CisJCW1hdGNoZWRfbGVuID0gbWF0Y2hfdXJscyh1cmwsICZub3JtX2luZm8sICZ1c2VyX21hdGNoZWQpOworCQlmcmVlKG5vcm1fdXJsKTsKKwkJaWYgKCFtYXRjaGVkX2xlbikKKwkJCXJldHVybiAwOworCQlrZXkgPSBkb3QgKyAxOworCX0KKworCWlmIChjb2xsZWN0LT5rZXkgJiYgc3RyY21wKGtleSwgY29sbGVjdC0+a2V5KSkKKwkJcmV0dXJuIDA7CisKKwlpdGVtID0gc3RyaW5nX2xpc3RfaW5zZXJ0KCZjb2xsZWN0LT52YXJzLCBrZXkpOworCWlmICghaXRlbS0+dXRpbCkgeworCQltYXRjaGVkID0geGNhbGxvYygxLCBzaXplb2YoKm1hdGNoZWQpKTsKKwkJaXRlbS0+dXRpbCA9IG1hdGNoZWQ7CisJfSBlbHNlIHsKKwkJbWF0Y2hlZCA9IGl0ZW0tPnV0aWw7CisJCS8qCisJCSAqIElzIG91ciBtYXRjaCBzaG9ydGVyPyAgSXMgb3VyIG1hdGNoIHRoZSBzYW1lCisJCSAqIGxlbmd0aCwgYW5kIHdpdGhvdXQgdXNlciB3aGlsZSB0aGUgY3VycmVudAorCQkgKiBjYW5kaWRhdGUgaXMgd2l0aCB1c2VyPyAgVGhlbiB3ZSBjYW5ub3QgdXNlIGl0LgorCQkgKi8KKwkJaWYgKG1hdGNoZWRfbGVuIDwgbWF0Y2hlZC0+bWF0Y2hlZF9sZW4gfHwKKwkJICAgICgobWF0Y2hlZF9sZW4gPT0gbWF0Y2hlZC0+bWF0Y2hlZF9sZW4pICYmCisJCSAgICAgKCF1c2VyX21hdGNoZWQgJiYgbWF0Y2hlZC0+dXNlcl9tYXRjaGVkKSkpCisJCQlyZXR1cm4gMDsKKwkJLyogT3RoZXJ3aXNlLCByZXBsYWNlIGl0IHdpdGggdGhpcyBvbmUuICovCisJfQorCisJbWF0Y2hlZC0+bWF0Y2hlZF9sZW4gPSBtYXRjaGVkX2xlbjsKKwltYXRjaGVkLT51c2VyX21hdGNoZWQgPSB1c2VyX21hdGNoZWQ7CisJc3RyYnVmX2FkZHN0cigmc3ludGhrZXksIGNvbGxlY3QtPnNlY3Rpb24pOworCXN0cmJ1Zl9hZGRjaCgmc3ludGhrZXksICcuJyk7CisJc3RyYnVmX2FkZHN0cigmc3ludGhrZXksIGtleSk7CisJcmV0dmFsID0gY29sbGVjdC0+Y29sbGVjdF9mbihzeW50aGtleS5idWYsIHZhbHVlLCBjb2xsZWN0LT5jYik7CisKKwlzdHJidWZfcmVsZWFzZSgmc3ludGhrZXkpOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS91cmxtYXRjaC5oIGIvdXJsbWF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mjg4NjJhCi0tLSAvZGV2L251bGwKKysrIGIvdXJsbWF0Y2guaApAQCAtMCwwICsxLDUzIEBACisjaWZuZGVmIFVSTF9NQVRDSF9ICisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworc3RydWN0IHVybF9pbmZvIHsKKwkvKiBub3JtYWxpemVkIHVybCBvbiBzdWNjZXNzLCBtdXN0IGJlIGZyZWVkLCBvdGhlcndpc2UgTlVMTCAqLworCWNoYXIgKnVybDsKKwkvKiBpZiAhdXJsLCBhIGJyaWVmIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUsIG90aGVyd2lzZSBOVUxMICovCisJY29uc3QgY2hhciAqZXJyOworCisJLyogdGhlIHJlc3Qgb2YgdGhlIGZpZWxkcyBhcmUgb25seSBzZXQgaWYgdXJsICE9IE5VTEwgKi8KKworCXNpemVfdCB1cmxfbGVuOwkJLyogdG90YWwgbGVuZ3RoIG9mIHVybCAod2hpY2ggaXMgbm93IG5vcm1hbGl6ZWQpICovCisJc2l6ZV90IHNjaGVtZV9sZW47CS8qIGxlbmd0aCBvZiBzY2hlbWUgbmFtZSAoZXhjbHVkaW5nIGZpbmFsIDopICovCisJc2l6ZV90IHVzZXJfb2ZmOwkvKiBvZmZzZXQgaW50byB1cmwgdG8gc3RhcnQgb2YgdXNlciBuYW1lICgwID0+IG5vbmUpICovCisJc2l6ZV90IHVzZXJfbGVuOwkvKiBsZW5ndGggb2YgdXNlciBuYW1lOyBpZiB1c2VyX29mZiAhPSAwIGJ1dAorCQkJCSAgIHVzZXJfbGVuID09IDAsIGFuIGVtcHR5IHVzZXIgbmFtZSB3YXMgZ2l2ZW4gKi8KKwlzaXplX3QgcGFzc3dkX29mZjsJLyogb2Zmc2V0IGludG8gdXJsIHRvIHN0YXJ0IG9mIHBhc3N3ZCAoMCA9PiBub25lKSAqLworCXNpemVfdCBwYXNzd2RfbGVuOwkvKiBsZW5ndGggb2YgcGFzc3dkOyBpZiBwYXNzd2Rfb2ZmICE9IDAgYnV0CisJCQkJICAgcGFzc3dkX2xlbiA9PSAwLCBhbiBlbXB0eSBwYXNzd2Qgd2FzIGdpdmVuICovCisJc2l6ZV90IGhvc3Rfb2ZmOwkvKiBvZmZzZXQgaW50byB1cmwgdG8gc3RhcnQgb2YgaG9zdCBuYW1lICgwID0+IG5vbmUpICovCisJc2l6ZV90IGhvc3RfbGVuOwkvKiBsZW5ndGggb2YgaG9zdCBuYW1lOyB0aGlzIElOQ0xVREVTIGFueSAnOnBvcnRudW0nOworCQkJCSAqIGZpbGUgdXJscyBtYXkgaGF2ZSBob3N0X2xlbiA9PSAwICovCisJc2l6ZV90IHBvcnRfbGVuOwkvKiBpZiBhIHBvcnRudW0gaXMgcHJlc2VudCAocG9ydF9sZW4gIT0gMCksIGl0IGhhcworCQkJCSAqIHRoaXMgbGVuZ3RoIChleGNsdWRpbmcgdGhlIGxlYWRpbmcgJzonKSBhdCB0aGUKKwkJCQkgKiBlbmQgb2YgdGhlIGhvc3QgbmFtZSAoYWx3YXlzIDAgZm9yIGZpbGUgdXJscykgKi8KKwlzaXplX3QgcGF0aF9vZmY7CS8qIG9mZnNldCBpbnRvIHVybCB0byB0aGUgc3RhcnQgb2YgdGhlIHVybCBwYXRoOworCQkJCSAqIHRoaXMgd2lsbCBhbHdheXMgcG9pbnQgdG8gYSAnLycgY2hhcmFjdGVyCisJCQkJICogYWZ0ZXIgdGhlIHVybCBoYXMgYmVlbiBub3JtYWxpemVkICovCisJc2l6ZV90IHBhdGhfbGVuOwkvKiBsZW5ndGggb2YgcGF0aCBwb3J0aW9uIGV4Y2x1ZGluZyBhbnkgdHJhaWxpbmcKKwkJCQkgKiAnPy4uLicgYW5kICcjLi4uJyBwb3J0aW9uOyB3aWxsIGFsd2F5cyBiZSA+PSAxICovCit9OworCitleHRlcm4gY2hhciAqdXJsX25vcm1hbGl6ZShjb25zdCBjaGFyICosIHN0cnVjdCB1cmxfaW5mbyAqKTsKKworc3RydWN0IHVybG1hdGNoX2l0ZW0geworCXNpemVfdCBtYXRjaGVkX2xlbjsKKwljaGFyIHVzZXJfbWF0Y2hlZDsKK307CisKK3N0cnVjdCB1cmxtYXRjaF9jb25maWcgeworCXN0cnVjdCBzdHJpbmdfbGlzdCB2YXJzOworCXN0cnVjdCB1cmxfaW5mbyB1cmw7CisJY29uc3QgY2hhciAqc2VjdGlvbjsKKwljb25zdCBjaGFyICprZXk7CisKKwl2b2lkICpjYjsKKwlpbnQgKCpjb2xsZWN0X2ZuKShjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CisJaW50ICgqY2FzY2FkZV9mbikoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworfTsKKworZXh0ZXJuIGludCB1cmxtYXRjaF9jb25maWdfZW50cnkoY29uc3QgY2hhciAqdmFyLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqY2IpOworCisjZW5kaWYgLyogVVJMX01BVENIX0ggKi8KZGlmZiAtLWdpdCBhL3VzYWdlLmMgYi91c2FnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZmYxMzEKLS0tIC9kZXYvbnVsbAorKysgYi91c2FnZS5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogR0lUIC0gVGhlIGluZm9ybWF0aW9uIG1hbmFnZXIgZnJvbSBoZWxsCisgKgorICogQ29weXJpZ2h0IChDKSBMaW51cyBUb3J2YWxkcywgMjAwNQorICovCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RhdGljIEZJTEUgKmVycm9yX2hhbmRsZTsKK3N0YXRpYyBpbnQgdHdlYWtlZF9lcnJvcl9idWZmZXJpbmc7CisKK3ZvaWQgdnJlcG9ydGYoY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCUZJTEUgKmZoID0gZXJyb3JfaGFuZGxlID8gZXJyb3JfaGFuZGxlIDogc3RkZXJyOworCisJZmZsdXNoKGZoKTsKKwlpZiAoIXR3ZWFrZWRfZXJyb3JfYnVmZmVyaW5nKSB7CisJCXNldHZidWYoZmgsIE5VTEwsIF9JT0xCRiwgMCk7CisJCXR3ZWFrZWRfZXJyb3JfYnVmZmVyaW5nID0gMTsKKwl9CisKKwlmcHV0cyhwcmVmaXgsIGZoKTsKKwl2ZnByaW50ZihmaCwgZXJyLCBwYXJhbXMpOworCWZwdXRjKCdcbicsIGZoKTsKK30KKworc3RhdGljIE5PUkVUVVJOIHZvaWQgdXNhZ2VfYnVpbHRpbihjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKQoreworCXZyZXBvcnRmKCJ1c2FnZTogIiwgZXJyLCBwYXJhbXMpOworCWV4aXQoMTI5KTsKK30KKworc3RhdGljIE5PUkVUVVJOIHZvaWQgZGllX2J1aWx0aW4oY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwl2cmVwb3J0ZigiZmF0YWw6ICIsIGVyciwgcGFyYW1zKTsKKwlleGl0KDEyOCk7Cit9CisKK3N0YXRpYyB2b2lkIGVycm9yX2J1aWx0aW4oY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykKK3sKKwl2cmVwb3J0ZigiZXJyb3I6ICIsIGVyciwgcGFyYW1zKTsKK30KKworc3RhdGljIHZvaWQgd2Fybl9idWlsdGluKGNvbnN0IGNoYXIgKndhcm4sIHZhX2xpc3QgcGFyYW1zKQoreworCXZyZXBvcnRmKCJ3YXJuaW5nOiAiLCB3YXJuLCBwYXJhbXMpOworfQorCitzdGF0aWMgaW50IGRpZV9pc19yZWN1cnNpbmdfYnVpbHRpbih2b2lkKQoreworCXN0YXRpYyBpbnQgZHlpbmc7CisJcmV0dXJuIGR5aW5nKys7Cit9CisKKy8qIElmIHdlIGFyZSBpbiBhIGRsb3BlbigpZWQgLnNvIHdyaXRlIHRvIGEgZ2xvYmFsIHZhcmlhYmxlIHdvdWxkIHNlZ2ZhdWx0CisgKiAodWdoKSwgc28ga2VlcCB0aGluZ3Mgc3RhdGljLiAqLworc3RhdGljIE5PUkVUVVJOX1BUUiB2b2lkICgqdXNhZ2Vfcm91dGluZSkoY29uc3QgY2hhciAqZXJyLCB2YV9saXN0IHBhcmFtcykgPSB1c2FnZV9idWlsdGluOworc3RhdGljIE5PUkVUVVJOX1BUUiB2b2lkICgqZGllX3JvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpID0gZGllX2J1aWx0aW47CitzdGF0aWMgdm9pZCAoKmVycm9yX3JvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpID0gZXJyb3JfYnVpbHRpbjsKK3N0YXRpYyB2b2lkICgqd2Fybl9yb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSA9IHdhcm5fYnVpbHRpbjsKK3N0YXRpYyBpbnQgKCpkaWVfaXNfcmVjdXJzaW5nKSh2b2lkKSA9IGRpZV9pc19yZWN1cnNpbmdfYnVpbHRpbjsKKwordm9pZCBzZXRfZGllX3JvdXRpbmUoTk9SRVRVUk5fUFRSIHZvaWQgKCpyb3V0aW5lKShjb25zdCBjaGFyICplcnIsIHZhX2xpc3QgcGFyYW1zKSkKK3sKKwlkaWVfcm91dGluZSA9IHJvdXRpbmU7Cit9CisKK3ZvaWQgc2V0X2Vycm9yX3JvdXRpbmUodm9pZCAoKnJvdXRpbmUpKGNvbnN0IGNoYXIgKmVyciwgdmFfbGlzdCBwYXJhbXMpKQoreworCWVycm9yX3JvdXRpbmUgPSByb3V0aW5lOworfQorCit2b2lkIHNldF9kaWVfaXNfcmVjdXJzaW5nX3JvdXRpbmUoaW50ICgqcm91dGluZSkodm9pZCkpCit7CisJZGllX2lzX3JlY3Vyc2luZyA9IHJvdXRpbmU7Cit9CisKK3ZvaWQgc2V0X2Vycm9yX2hhbmRsZShGSUxFICpmaCkKK3sKKwllcnJvcl9oYW5kbGUgPSBmaDsKKwl0d2Vha2VkX2Vycm9yX2J1ZmZlcmluZyA9IDA7Cit9CisKK3ZvaWQgTk9SRVRVUk4gdXNhZ2VmKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgcGFyYW1zOworCisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCXVzYWdlX3JvdXRpbmUoZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCit2b2lkIE5PUkVUVVJOIHVzYWdlKGNvbnN0IGNoYXIgKmVycikKK3sKKwl1c2FnZWYoIiVzIiwgZXJyKTsKK30KKwordm9pZCBOT1JFVFVSTiBkaWUoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwlpZiAoZGllX2lzX3JlY3Vyc2luZygpKSB7CisJCWZwdXRzKCJmYXRhbDogcmVjdXJzaW9uIGRldGVjdGVkIGluIGRpZSBoYW5kbGVyXG4iLCBzdGRlcnIpOworCQlleGl0KDEyOCk7CisJfQorCisJdmFfc3RhcnQocGFyYW1zLCBlcnIpOworCWRpZV9yb3V0aW5lKGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKK30KKwordm9pZCBOT1JFVFVSTiBkaWVfZXJybm8oY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisJY2hhciBmbXRfd2l0aF9lcnJbMTAyNF07CisJY2hhciBzdHJfZXJyb3JbMjU2XSwgKmVycjsKKwlpbnQgaSwgajsKKworCWlmIChkaWVfaXNfcmVjdXJzaW5nKCkpIHsKKwkJZnB1dHMoImZhdGFsOiByZWN1cnNpb24gZGV0ZWN0ZWQgaW4gZGllX2Vycm5vIGhhbmRsZXJcbiIsCisJCQlzdGRlcnIpOworCQlleGl0KDEyOCk7CisJfQorCisJZXJyID0gc3RyZXJyb3IoZXJybm8pOworCWZvciAoaSA9IGogPSAwOyBlcnJbaV0gJiYgaiA8IHNpemVvZihzdHJfZXJyb3IpIC0gMTsgKSB7CisJCWlmICgoc3RyX2Vycm9yW2orK10gPSBlcnJbaSsrXSkgIT0gJyUnKQorCQkJY29udGludWU7CisJCWlmIChqIDwgc2l6ZW9mKHN0cl9lcnJvcikgLSAxKSB7CisJCQlzdHJfZXJyb3JbaisrXSA9ICclJzsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vIHJvb20gdG8gZG91YmxlIHRoZSAnJScsIHNvIHdlIG92ZXJ3cml0ZSBpdCB3aXRoCisJCQkgKiAnXDAnIGJlbG93ICovCisJCQlqLS07CisJCQlicmVhazsKKwkJfQorCX0KKwlzdHJfZXJyb3Jbal0gPSAwOworCXNucHJpbnRmKGZtdF93aXRoX2Vyciwgc2l6ZW9mKGZtdF93aXRoX2VyciksICIlczogJXMiLCBmbXQsIHN0cl9lcnJvcik7CisKKwl2YV9zdGFydChwYXJhbXMsIGZtdCk7CisJZGllX3JvdXRpbmUoZm10X3dpdGhfZXJyLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQorCisjdW5kZWYgZXJyb3IKK2ludCBlcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IHBhcmFtczsKKworCXZhX3N0YXJ0KHBhcmFtcywgZXJyKTsKKwllcnJvcl9yb3V0aW5lKGVyciwgcGFyYW1zKTsKKwl2YV9lbmQocGFyYW1zKTsKKwlyZXR1cm4gLTE7Cit9CisKK3ZvaWQgd2FybmluZyhjb25zdCBjaGFyICp3YXJuLCAuLi4pCit7CisJdmFfbGlzdCBwYXJhbXM7CisKKwl2YV9zdGFydChwYXJhbXMsIHdhcm4pOworCXdhcm5fcm91dGluZSh3YXJuLCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworfQpkaWZmIC0tZ2l0IGEvdXNlcmRpZmYuYyBiL3VzZXJkaWZmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmMjUwNQotLS0gL2Rldi9udWxsCisrKyBiL3VzZXJkaWZmLmMKQEAgLTAsMCArMSwyODkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInVzZXJkaWZmLmgiCisjaW5jbHVkZSAiYXR0ci5oIgorCitzdGF0aWMgc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyczsKK3N0YXRpYyBpbnQgbmRyaXZlcnM7CitzdGF0aWMgaW50IGRyaXZlcnNfYWxsb2M7CisKKyNkZWZpbmUgUEFUVEVSTlMobmFtZSwgcGF0dGVybiwgd29yZF9yZWdleCkJCQlcCisJeyBuYW1lLCBOVUxMLCAtMSwgeyBwYXR0ZXJuLCBSRUdfRVhURU5ERUQgfSwJCVwKKwkgIHdvcmRfcmVnZXggInxbXls6c3BhY2U6XV18W1x4YzAtXHhmZl1bXHg4MC1ceGJmXSsiIH0KKyNkZWZpbmUgSVBBVFRFUk4obmFtZSwgcGF0dGVybiwgd29yZF9yZWdleCkJCQlcCisJeyBuYW1lLCBOVUxMLCAtMSwgeyBwYXR0ZXJuLCBSRUdfRVhURU5ERUQgfCBSRUdfSUNBU0UgfSwgXAorCSAgd29yZF9yZWdleCAifFteWzpzcGFjZTpdXXxbXHhjMC1ceGZmXVtceDgwLVx4YmZdKyIgfQorc3RhdGljIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgYnVpbHRpbl9kcml2ZXJzW10gPSB7CitJUEFUVEVSTigiYWRhIiwKKwkgIiFeKC4qWyBcdF0pPyhpc1sgXHRdK25ld3xyZW5hbWVzfGlzWyBcdF0rc2VwYXJhdGUpKFsgXHRdLiopPyRcbiIKKwkgIiFeWyBcdF0qd2l0aFsgXHRdLiokXG4iCisJICJeWyBcdF0qKChwcm9jZWR1cmV8ZnVuY3Rpb24pWyBcdF0rLiopJFxuIgorCSAiXlsgXHRdKigocGFja2FnZXxwcm90ZWN0ZWR8dGFzaylbIFx0XSsuKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpdW2EtekEtWjAtOV9dKiIKKwkgInxbLStdP1swLTldWzAtOSNfLmFBYkJjQ2REZUVmRl0qKFtlRV1bKy1dP1swLTlfXSspPyIKKwkgInw9PnxcXC5cXC58XFwqXFwqfDo9fC89fD49fDw9fDw8fD4+fDw+IiksCitJUEFUVEVSTigiZm9ydHJhbiIsCisJICIhXihbQypdfFsgXHRdKiEpXG4iCisJICIhXlsgXHRdKk1PRFVMRVsgXHRdK1BST0NFRFVSRVsgXHRdXG4iCisJICJeWyBcdF0qKChFTkRbIFx0XSspPyhQUk9HUkFNfE1PRFVMRXxCTE9DS1sgXHRdK0RBVEEiCisJCSJ8KFteJ1wiIFx0XStbIFx0XSspKihTVUJST1VUSU5FfEZVTkNUSU9OKSlbIFx0XStbQS1aXS4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl1bYS16QS1aMC05X10qIgorCSAifFxcLihbRWVdW1FxXXxbTm5dW0VlXXxbR2ddW1R0RWVdfFtMbF1bVHRFZV18W1R0XVtScl1bVXVdW0VlXXxbRmZdW0FhXVtMbF1bU3NdW0VlXXxbQWFdW05uXVtEZF18W09vXVtScl18W05uXT9bRWVdW1FxXVtWdl18W05uXVtPb11bVHRdKVxcLiIKKwkgLyogbnVtYmVycyBhbmQgZm9ybWF0IHN0YXRlbWVudHMgbGlrZSAyRTE0LjQsIG9yIEVTMTIuNiwgOVguCisJICAqIERvbid0IHdvcnJ5IGFib3V0IGZvcm1hdCBzdGF0ZW1lbnRzIHdpdGhvdXQgbGVhZGluZyBkaWdpdHMgc2luY2UKKwkgICogdGhleSB3b3VsZCBoYXZlIGJlZW4gbWF0Y2hlZCBhYm92ZSBhcyBhIHZhcmlhYmxlIGFueXdheS4gKi8KKwkgInxbLStdP1swLTkuXSsoW0FhSWlEZEVlRmZMbFR0WHhdW1NzXT9bLStdP1swLTkuXSopPyhfW2EtekEtWjAtOV1bYS16QS1aMC05X10qKT8iCisJICJ8Ly98XFwqXFwqfDo6fFsvPD49XT0iKSwKK0lQQVRURVJOKCJmb3VudGFpbiIsICJeKChcXC5bXi5dfChpbnR8ZXh0fGVzdHxpbnRcXC4/L2V4dHxpL2UpWy4gXSkuKikkIiwKKwkgIlteIFx0LV0rIiksCitQQVRURVJOUygiaHRtbCIsICJeWyBcdF0qKDxbSGhdWzEtNl1bIFx0XS4qPi4qKSQiLAorCSAiW148Pj0gXHRdKyIpLAorUEFUVEVSTlMoImphdmEiLAorCSAiIV5bIFx0XSooY2F0Y2h8ZG98Zm9yfGlmfGluc3RhbmNlb2Z8bmV3fHJldHVybnxzd2l0Y2h8dGhyb3d8d2hpbGUpXG4iCisJICJeWyBcdF0qKChbQS1aYS16X11bQS1aYS16XzAtOV0qWyBcdF0rKStbQS1aYS16X11bQS1aYS16XzAtOV0qWyBcdF0qXFwoW147XSopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXStbZkZsTF0/fDBbeFhiQl0/WzAtOWEtZkEtRl0rW2xMXT8iCisJICJ8Wy0rKi88PiUmXnw9IV09IgorCSAifC0tfFxcK1xcK3w8PD0/fD4+Pj89P3wmJnxcXHxcXHwiKSwKK1BBVFRFUk5TKCJtYXRsYWIiLAorCSAiXltbOnNwYWNlOl1dKigoY2xhc3NkZWZ8ZnVuY3Rpb24pW1s6c3BhY2U6XV0uKikkfF4lJVtbOnNwYWNlOl1dLiokIiwKKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSp8Wy0rMC05LmVdK3xbPX48Pl09fFxcLlsqL1xcXiddfFxcfFxcfHwmJiIpLAorUEFUVEVSTlMoIm9iamMiLAorCSAvKiBOZWdhdGUgQyBzdGF0ZW1lbnRzIHRoYXQgY2FuIGxvb2sgbGlrZSBmdW5jdGlvbnMgKi8KKwkgIiFeWyBcdF0qKGRvfGZvcnxpZnxlbHNlfHJldHVybnxzd2l0Y2h8d2hpbGUpXG4iCisJIC8qIE9iamVjdGl2ZS1DIG1ldGhvZHMgKi8KKwkgIl5bIFx0XSooWy0rXVsgXHRdKlxcKFsgXHRdKltBLVphLXpfXVtBLVphLXpfMC05KiBcdF0qXFwpWyBcdF0qW0EtWmEtel9dLiopJFxuIgorCSAvKiBDIGZ1bmN0aW9ucyAqLworCSAiXlsgXHRdKigoW0EtWmEtel9dW0EtWmEtel8wLTldKlsgXHRdKykrW0EtWmEtel9dW0EtWmEtel8wLTldKlsgXHRdKlxcKFteO10qKSRcbiIKKwkgLyogT2JqZWN0aXZlLUMgY2xhc3MvcHJvdG9jb2wgZGVmaW5pdGlvbnMgKi8KKwkgIl4oQChpbXBsZW1lbnRhdGlvbnxpbnRlcmZhY2V8cHJvdG9jb2wpWyBcdF0uKikkIiwKKwkgLyogLS0gKi8KKwkgIlthLXpBLVpfXVthLXpBLVowLTlfXSoiCisJICJ8Wy0rMC05LmVdK1tmRmxMXT98MFt4WGJCXT9bMC05YS1mQS1GXStbbExdPyIKKwkgInxbLSsqLzw+JSZefD0hXT18LS18XFwrXFwrfDw8PT98Pj49P3wmJnxcXHxcXHx8Ojp8LT4iKSwKK1BBVFRFUk5TKCJwYXNjYWwiLAorCSAiXigoKGNsYXNzWyBcdF0rKT8ocHJvY2VkdXJlfGZ1bmN0aW9uKXxjb25zdHJ1Y3RvcnxkZXN0cnVjdG9yfGludGVyZmFjZXwiCisJCSJpbXBsZW1lbnRhdGlvbnxpbml0aWFsaXphdGlvbnxmaW5hbGl6YXRpb24pWyBcdF0qLiopJCIKKwkgIlxuIgorCSAiXiguKj1bIFx0XSooY2xhc3N8cmVjb3JkKS4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKKwkgInxbLSswLTkuZV0rfDBbeFhiQl0/WzAtOWEtZkEtRl0rIgorCSAifDw+fDw9fD49fDo9fFxcLlxcLiIpLAorUEFUVEVSTlMoInBlcmwiLAorCSAiXnBhY2thZ2UgLipcbiIKKwkgIl5zdWIgW1s6YWxudW06XV8nOl0rWyBcdF0qIgorCQkiKFxcKFteKV0qXFwpWyBcdF0qKT8iIC8qIHByb3RvdHlwZSAqLworCQkvKgorCQkgKiBBdHRyaWJ1dGVzLiAgQSByZWdleCBjYW4ndCBjb3VudCBuZXN0ZWQgcGFyZW50aGVzZXMsCisJCSAqIHNvIGp1c3Qgc2x1cnAgdXAgd2hhdGV2ZXIgd2Ugc2VlLCB0YWtpbmcgY2FyZSBub3QKKwkJICogdG8gYWNjZXB0IGxpbmVzIGxpa2UgInN1YiBmb287ICMgZGVmaW5lZCBlbHNld2hlcmUiLgorCQkgKgorCQkgKiBBbiBhdHRyaWJ1dGUgY291bGQgY29udGFpbiBhIHNlbWljb2xvbiwgYnV0IGF0IHRoYXQKKwkJICogcG9pbnQgaXQgc2VlbXMgcmVhc29uYWJsZSBlbm91Z2ggdG8gZ2l2ZSB1cC4KKwkJICovCisJCSIoOlteOyNdKik/IgorCQkiKFxce1sgXHRdKik/IiAvKiBicmFjZSBjYW4gY29tZSBoZXJlIG9yIG9uIHRoZSBuZXh0IGxpbmUgKi8KKwkJIigjLiopPyRcbiIgLyogY29tbWVudCAqLworCSAiXihCRUdJTnxFTkR8SU5JVHxDSEVDS3xVTklUQ0hFQ0t8QVVUT0xPQUR8REVTVFJPWSlbIFx0XSoiCisJCSIoXFx7WyBcdF0qKT8iIC8qIGJyYWNlIGNhbiBjb21lIGhlcmUgb3Igb24gdGhlIG5leHQgbGluZSAqLworCQkiKCMuKik/JFxuIgorCSAiXj1oZWFkWzAtOV0gLioiLAkvKiBQT0QgKi8KKwkgLyogLS0gKi8KKwkgIltbOmFscGhhOl1fJ11bWzphbG51bTpdXyddKiIKKwkgInwwW3hiXT9bMC05YS1mQS1GX10qIgorCSAvKiB0YWtpbmcgY2FyZSBub3QgdG8gaW50ZXJwcmV0IDMuLjUgYXMgKDMuKSguNSkgKi8KKwkgInxbMC05YS1mQS1GX10rKFxcLlswLTlhLWZBLUZfXSspPyhbZUVdWy0rXT9bMC05X10rKT8iCisJICJ8PT58LVtyd3hvUldYT2V6c2ZkbHBTdWdrYmN0VEJNQUM+XXx+fnw6OiIKKwkgInwmJj18XFx8XFx8PXwvLz18XFwqXFwqPSIKKwkgInwmJnxcXHxcXHx8Ly98XFwrXFwrfC0tfFxcKlxcKnxcXC5cXC5cXC4/IgorCSAifFstKyovJS5eJjw+PSF8XT0iCisJICJ8PX58IX4iCisJICJ8PDx8PD58PD0+fD4+IiksCitQQVRURVJOUygicGhwIiwKKwkgIl5bXHQgXSooKChwdWJsaWN8cHJvdGVjdGVkfHByaXZhdGV8c3RhdGljKVtcdCBdKykqZnVuY3Rpb24uKikkXG4iCisJICJeW1x0IF0qKGNsYXNzLiopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXSt8MFt4WGJCXT9bMC05YS1mQS1GXSsiCisJICJ8Wy0rKi88PiUmXnw9IS5dPXwtLXxcXCtcXCt8PDw9P3w+Pj0/fD09PXwmJnxcXHxcXHx8Ojp8LT4iKSwKK1BBVFRFUk5TKCJweXRob24iLCAiXlsgXHRdKigoY2xhc3N8ZGVmKVsgXHRdLiopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXStbakpsTF0/fDBbeFhdP1swLTlhLWZBLUZdK1tsTF0/IgorCSAifFstKyovPD4lJl58PSFdPXwvLz0/fDw8PT98Pj49P3xcXCpcXCo9PyIpLAorCSAvKiAtLSAqLworUEFUVEVSTlMoInJ1YnkiLCAiXlsgXHRdKigoY2xhc3N8bW9kdWxlfGRlZilbIFx0XS4qKSQiLAorCSAvKiAtLSAqLworCSAiKEB8QEB8XFwkKT9bYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXSt8MFt4WGJCXT9bMC05YS1mQS1GXSt8XFw/KFxcXFxDLSk/KFxcXFxNLSk/LiIKKwkgInwvLz0/fFstKyovPD4lJl58PSFdPXw8PD0/fD4+PT98PT09fFxcLnsxLDN9fDo6fFshPV1+IiksCitQQVRURVJOUygiYmlidGV4IiwgIihAW2EtekEtWl17MSx9WyBcdF0qXFx7ezAsMX1bIFx0XSpbXiBcdFwiQCcsXFwjfXt+JV0qKS4qJCIsCisJICJbPXt9XCJdfFtePXt9XCIgXHRdKyIpLAorUEFUVEVSTlMoInRleCIsICJeKFxcXFwoKHN1Yikqc2VjdGlvbnxjaGFwdGVyfHBhcnQpXFwqezAsMX1cXHsuKikkIiwKKwkgIlxcXFxbYS16QS1aQF0rfFxcXFwufFthLXpBLVowLTlceDgwLVx4ZmZdKyIpLAorUEFUVEVSTlMoImNwcCIsCisJIC8qIEp1bXAgdGFyZ2V0cyBvciBhY2Nlc3MgZGVjbGFyYXRpb25zICovCisJICIhXlsgXHRdKltBLVphLXpfXVtBLVphLXpfMC05XSo6W1s6c3BhY2U6XV0qKCR8L1svKl0pXG4iCisJIC8qIGZ1bmN0aW9ucy9tZXRob2RzLCB2YXJpYWJsZXMsIGFuZCBjb21wb3VuZHMgYXQgdG9wIGxldmVsICovCisJICJeKCg6OltbOnNwYWNlOl1dKik/W0EtWmEtel9dLiopJCIsCisJIC8qIC0tICovCisJICJbYS16QS1aX11bYS16QS1aMC05X10qIgorCSAifFstKzAtOS5lXStbZkZsTF0/fDBbeFhiQl0/WzAtOWEtZkEtRl0rW2xMdVVdKiIKKwkgInxbLSsqLzw+JSZefD0hXT18LS18XFwrXFwrfDw8PT98Pj49P3wmJnxcXHxcXHx8Ojp8LT5cXCo/fFxcLlxcKiIpLAorUEFUVEVSTlMoImNzaGFycCIsCisJIC8qIEtleXdvcmRzICovCisJICIhXlsgXHRdKihkb3x3aGlsZXxmb3J8aWZ8ZWxzZXxpbnN0YW5jZW9mfG5ld3xyZXR1cm58c3dpdGNofGNhc2V8dGhyb3d8Y2F0Y2h8dXNpbmcpXG4iCisJIC8qIE1ldGhvZHMgYW5kIGNvbnN0cnVjdG9ycyAqLworCSAiXlsgXHRdKigoKHN0YXRpY3xwdWJsaWN8aW50ZXJuYWx8cHJpdmF0ZXxwcm90ZWN0ZWR8bmV3fHZpcnR1YWx8c2VhbGVkfG92ZXJyaWRlfHVuc2FmZSlbIFx0XSspKltdWzw+QC5+X1s6YWxudW06XV0rWyBcdF0rWzw+QC5fWzphbG51bTpdXStbIFx0XSpcXCguKlxcKSlbIFx0XSokXG4iCisJIC8qIFByb3BlcnRpZXMgKi8KKwkgIl5bIFx0XSooKChzdGF0aWN8cHVibGljfGludGVybmFsfHByaXZhdGV8cHJvdGVjdGVkfG5ld3x2aXJ0dWFsfHNlYWxlZHxvdmVycmlkZXx1bnNhZmUpWyBcdF0rKSpbXVs8PkAufl9bOmFsbnVtOl1dK1sgXHRdK1tALl9bOmFsbnVtOl1dKylbIFx0XSokXG4iCisJIC8qIFR5cGUgZGVmaW5pdGlvbnMgKi8KKwkgIl5bIFx0XSooKChzdGF0aWN8cHVibGljfGludGVybmFsfHByaXZhdGV8cHJvdGVjdGVkfG5ld3x1bnNhZmV8c2VhbGVkfGFic3RyYWN0fHBhcnRpYWwpWyBcdF0rKSooY2xhc3N8ZW51bXxpbnRlcmZhY2V8c3RydWN0KVsgXHRdKy4qKSRcbiIKKwkgLyogTmFtZXNwYWNlICovCisJICJeWyBcdF0qKG5hbWVzcGFjZVsgXHRdKy4qKSQiLAorCSAvKiAtLSAqLworCSAiW2EtekEtWl9dW2EtekEtWjAtOV9dKiIKKwkgInxbLSswLTkuZV0rW2ZGbExdP3wwW3hYYkJdP1swLTlhLWZBLUZdK1tsTF0/IgorCSAifFstKyovPD4lJl58PSFdPXwtLXxcXCtcXCt8PDw9P3w+Pj0/fCYmfFxcfFxcfHw6OnwtPiIpLAoreyAiZGVmYXVsdCIsIE5VTEwsIC0xLCB7IE5VTEwsIDAgfSB9LAorfTsKKyN1bmRlZiBQQVRURVJOUworI3VuZGVmIElQQVRURVJOCisKK3N0YXRpYyBzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyIGRyaXZlcl90cnVlID0geworCSJkaWZmPXRydWUiLAorCU5VTEwsCisJMCwKKwl7IE5VTEwsIDAgfQorfTsKKworc3RhdGljIHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgZHJpdmVyX2ZhbHNlID0geworCSIhZGlmZiIsCisJTlVMTCwKKwkxLAorCXsgTlVMTCwgMCB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdXNlcmRpZmZfZmluZF9ieV9uYW1lbGVuKGNvbnN0IGNoYXIgKmssIGludCBsZW4pCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IG5kcml2ZXJzOyBpKyspIHsKKwkJc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJ2ID0gZHJpdmVycyArIGk7CisJCWlmICghc3RybmNtcChkcnYtPm5hbWUsIGssIGxlbikgJiYgIWRydi0+bmFtZVtsZW5dKQorCQkJcmV0dXJuIGRydjsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYnVpbHRpbl9kcml2ZXJzKTsgaSsrKSB7CisJCXN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRydiA9IGJ1aWx0aW5fZHJpdmVycyArIGk7CisJCWlmICghc3RybmNtcChkcnYtPm5hbWUsIGssIGxlbikgJiYgIWRydi0+bmFtZVtsZW5dKQorCQkJcmV0dXJuIGRydjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZnVuY25hbWUoc3RydWN0IHVzZXJkaWZmX2Z1bmNuYW1lICpmLCBjb25zdCBjaGFyICprLAorCQljb25zdCBjaGFyICp2LCBpbnQgY2ZsYWdzKQoreworCWlmIChnaXRfY29uZmlnX3N0cmluZygmZi0+cGF0dGVybiwgaywgdikgPCAwKQorCQlyZXR1cm4gLTE7CisJZi0+Y2ZsYWdzID0gY2ZsYWdzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX3RyaXN0YXRlKGludCAqYiwgY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdikKK3sKKwlpZiAodiAmJiAhc3RyY2FzZWNtcCh2LCAiYXV0byIpKQorCQkqYiA9IC0xOworCWVsc2UKKwkJKmIgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYm9vbChpbnQgKmIsIGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYpCit7CisJKmIgPSBnaXRfY29uZmlnX2Jvb2woaywgdik7CisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2VyZGlmZl9jb25maWcoY29uc3QgY2hhciAqaywgY29uc3QgY2hhciAqdikKK3sKKwlzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICpkcnY7CisJY29uc3QgY2hhciAqbmFtZSwgKnR5cGU7CisJaW50IG5hbWVsZW47CisKKwlpZiAocGFyc2VfY29uZmlnX2tleShrLCAiZGlmZiIsICZuYW1lLCAmbmFtZWxlbiwgJnR5cGUpIHx8ICFuYW1lKQorCQlyZXR1cm4gMDsKKworCWRydiA9IHVzZXJkaWZmX2ZpbmRfYnlfbmFtZWxlbihuYW1lLCBuYW1lbGVuKTsKKwlpZiAoIWRydikgeworCQlBTExPQ19HUk9XKGRyaXZlcnMsIG5kcml2ZXJzKzEsIGRyaXZlcnNfYWxsb2MpOworCQlkcnYgPSAmZHJpdmVyc1tuZHJpdmVycysrXTsKKwkJbWVtc2V0KGRydiwgMCwgc2l6ZW9mKCpkcnYpKTsKKwkJZHJ2LT5uYW1lID0geG1lbWR1cHoobmFtZSwgbmFtZWxlbik7CisJCWRydi0+YmluYXJ5ID0gLTE7CisJfQorCisJaWYgKCFzdHJjbXAodHlwZSwgImZ1bmNuYW1lIikpCisJCXJldHVybiBwYXJzZV9mdW5jbmFtZSgmZHJ2LT5mdW5jbmFtZSwgaywgdiwgMCk7CisJaWYgKCFzdHJjbXAodHlwZSwgInhmdW5jbmFtZSIpKQorCQlyZXR1cm4gcGFyc2VfZnVuY25hbWUoJmRydi0+ZnVuY25hbWUsIGssIHYsIFJFR19FWFRFTkRFRCk7CisJaWYgKCFzdHJjbXAodHlwZSwgImJpbmFyeSIpKQorCQlyZXR1cm4gcGFyc2VfdHJpc3RhdGUoJmRydi0+YmluYXJ5LCBrLCB2KTsKKwlpZiAoIXN0cmNtcCh0eXBlLCAiY29tbWFuZCIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRydi0+ZXh0ZXJuYWwsIGssIHYpOworCWlmICghc3RyY21wKHR5cGUsICJ0ZXh0Y29udiIpKQorCQlyZXR1cm4gZ2l0X2NvbmZpZ19zdHJpbmcoJmRydi0+dGV4dGNvbnYsIGssIHYpOworCWlmICghc3RyY21wKHR5cGUsICJjYWNoZXRleHRjb252IikpCisJCXJldHVybiBwYXJzZV9ib29sKCZkcnYtPnRleHRjb252X3dhbnRfY2FjaGUsIGssIHYpOworCWlmICghc3RyY21wKHR5cGUsICJ3b3JkcmVnZXgiKSkKKwkJcmV0dXJuIGdpdF9jb25maWdfc3RyaW5nKCZkcnYtPndvcmRfcmVnZXgsIGssIHYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmX2ZpbmRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKSB7CisJaW50IGxlbiA9IHN0cmxlbihuYW1lKTsKKwlyZXR1cm4gdXNlcmRpZmZfZmluZF9ieV9uYW1lbGVuKG5hbWUsIGxlbik7Cit9CisKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmX2ZpbmRfYnlfcGF0aChjb25zdCBjaGFyICpwYXRoKQoreworCXN0YXRpYyBzdHJ1Y3QgZ2l0X2F0dHIgKmF0dHI7CisJc3RydWN0IGdpdF9hdHRyX2NoZWNrIGNoZWNrOworCisJaWYgKCFhdHRyKQorCQlhdHRyID0gZ2l0X2F0dHIoImRpZmYiKTsKKwljaGVjay5hdHRyID0gYXR0cjsKKworCWlmICghcGF0aCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGdpdF9jaGVja19hdHRyKHBhdGgsIDEsICZjaGVjaykpCisJCXJldHVybiBOVUxMOworCisJaWYgKEFUVFJfVFJVRShjaGVjay52YWx1ZSkpCisJCXJldHVybiAmZHJpdmVyX3RydWU7CisJaWYgKEFUVFJfRkFMU0UoY2hlY2sudmFsdWUpKQorCQlyZXR1cm4gJmRyaXZlcl9mYWxzZTsKKwlpZiAoQVRUUl9VTlNFVChjaGVjay52YWx1ZSkpCisJCXJldHVybiBOVUxMOworCXJldHVybiB1c2VyZGlmZl9maW5kX2J5X25hbWUoY2hlY2sudmFsdWUpOworfQorCitzdHJ1Y3QgdXNlcmRpZmZfZHJpdmVyICp1c2VyZGlmZl9nZXRfdGV4dGNvbnYoc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqZHJpdmVyKQoreworCWlmICghZHJpdmVyLT50ZXh0Y29udikKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoZHJpdmVyLT50ZXh0Y29udl93YW50X2NhY2hlICYmICFkcml2ZXItPnRleHRjb252X2NhY2hlKSB7CisJCXN0cnVjdCBub3Rlc19jYWNoZSAqYyA9IHhtYWxsb2Moc2l6ZW9mKCpjKSk7CisJCXN0cnVjdCBzdHJidWYgbmFtZSA9IFNUUkJVRl9JTklUOworCisJCXN0cmJ1Zl9hZGRmKCZuYW1lLCAidGV4dGNvbnYvJXMiLCBkcml2ZXItPm5hbWUpOworCQlub3Rlc19jYWNoZV9pbml0KGMsIG5hbWUuYnVmLCBkcml2ZXItPnRleHRjb252KTsKKwkJZHJpdmVyLT50ZXh0Y29udl9jYWNoZSA9IGM7CisJfQorCisJcmV0dXJuIGRyaXZlcjsKK30KZGlmZiAtLWdpdCBhL3VzZXJkaWZmLmggYi91c2VyZGlmZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhN2U3OGYKLS0tIC9kZXYvbnVsbAorKysgYi91c2VyZGlmZi5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgVVNFUkRJRkZfSAorI2RlZmluZSBVU0VSRElGRl9ICisKKyNpbmNsdWRlICJub3Rlcy1jYWNoZS5oIgorCitzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgeworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJaW50IGNmbGFnczsKK307CisKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZXh0ZXJuYWw7CisJaW50IGJpbmFyeTsKKwlzdHJ1Y3QgdXNlcmRpZmZfZnVuY25hbWUgZnVuY25hbWU7CisJY29uc3QgY2hhciAqd29yZF9yZWdleDsKKwljb25zdCBjaGFyICp0ZXh0Y29udjsKKwlzdHJ1Y3Qgbm90ZXNfY2FjaGUgKnRleHRjb252X2NhY2hlOworCWludCB0ZXh0Y29udl93YW50X2NhY2hlOworfTsKKworaW50IHVzZXJkaWZmX2NvbmZpZyhjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2KTsKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmX2ZpbmRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKK3N0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKnVzZXJkaWZmX2ZpbmRfYnlfcGF0aChjb25zdCBjaGFyICpwYXRoKTsKKworc3RydWN0IHVzZXJkaWZmX2RyaXZlciAqdXNlcmRpZmZfZ2V0X3RleHRjb252KHN0cnVjdCB1c2VyZGlmZl9kcml2ZXIgKmRyaXZlcik7CisKKyNlbmRpZiAvKiBVU0VSRElGRiAqLwpkaWZmIC0tZ2l0IGEvdXRmOC5jIGIvdXRmOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTEwYzgKLS0tIC9kZXYvbnVsbAorKysgYi91dGY4LmMKQEAgLTAsMCArMSw2NjcgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ1dGY4LmgiCisKKy8qIFRoaXMgY29kZSBpcyBvcmlnaW5hbGx5IGZyb20gaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L3Vjcy8gKi8KKworc3RydWN0IGludGVydmFsIHsKKwl1Y3NfY2hhcl90IGZpcnN0OworCXVjc19jaGFyX3QgbGFzdDsKK307CisKK3NpemVfdCBkaXNwbGF5X21vZGVfZXNjX3NlcXVlbmNlX2xlbihjb25zdCBjaGFyICpzKQoreworCWNvbnN0IGNoYXIgKnAgPSBzOworCWlmICgqcCsrICE9ICdcMDMzJykKKwkJcmV0dXJuIDA7CisJaWYgKCpwKysgIT0gJ1snKQorCQlyZXR1cm4gMDsKKwl3aGlsZSAoaXNkaWdpdCgqcCkgfHwgKnAgPT0gJzsnKQorCQlwKys7CisJaWYgKCpwKysgIT0gJ20nKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcCAtIHM7Cit9CisKKy8qIGF1eGlsaWFyeSBmdW5jdGlvbiBmb3IgYmluYXJ5IHNlYXJjaCBpbiBpbnRlcnZhbCB0YWJsZSAqLworc3RhdGljIGludCBiaXNlYXJjaCh1Y3NfY2hhcl90IHVjcywgY29uc3Qgc3RydWN0IGludGVydmFsICp0YWJsZSwgaW50IG1heCkKK3sKKwlpbnQgbWluID0gMDsKKwlpbnQgbWlkOworCisJaWYgKHVjcyA8IHRhYmxlWzBdLmZpcnN0IHx8IHVjcyA+IHRhYmxlW21heF0ubGFzdCkKKwkJcmV0dXJuIDA7CisJd2hpbGUgKG1heCA+PSBtaW4pIHsKKwkJbWlkID0gKG1pbiArIG1heCkgLyAyOworCQlpZiAodWNzID4gdGFibGVbbWlkXS5sYXN0KQorCQkJbWluID0gbWlkICsgMTsKKwkJZWxzZSBpZiAodWNzIDwgdGFibGVbbWlkXS5maXJzdCkKKwkJCW1heCA9IG1pZCAtIDE7CisJCWVsc2UKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCisvKiBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgZGVmaW5lIHRoZSBjb2x1bW4gd2lkdGggb2YgYW4gSVNPIDEwNjQ2CisgKiBjaGFyYWN0ZXIgYXMgZm9sbG93czoKKyAqCisgKiAgICAtIFRoZSBudWxsIGNoYXJhY3RlciAoVSswMDAwKSBoYXMgYSBjb2x1bW4gd2lkdGggb2YgMC4KKyAqCisgKiAgICAtIE90aGVyIEMwL0MxIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgREVMIHdpbGwgbGVhZCB0byBhIHJldHVybgorICogICAgICB2YWx1ZSBvZiAtMS4KKyAqCisgKiAgICAtIE5vbi1zcGFjaW5nIGFuZCBlbmNsb3NpbmcgY29tYmluaW5nIGNoYXJhY3RlcnMgKGdlbmVyYWwKKyAqICAgICAgY2F0ZWdvcnkgY29kZSBNbiBvciBNZSBpbiB0aGUgVW5pY29kZSBkYXRhYmFzZSkgaGF2ZSBhCisgKiAgICAgIGNvbHVtbiB3aWR0aCBvZiAwLgorICoKKyAqICAgIC0gU09GVCBIWVBIRU4gKFUrMDBBRCkgaGFzIGEgY29sdW1uIHdpZHRoIG9mIDEuCisgKgorICogICAgLSBPdGhlciBmb3JtYXQgY2hhcmFjdGVycyAoZ2VuZXJhbCBjYXRlZ29yeSBjb2RlIENmIGluIHRoZSBVbmljb2RlCisgKiAgICAgIGRhdGFiYXNlKSBhbmQgWkVSTyBXSURUSCBTUEFDRSAoVSsyMDBCKSBoYXZlIGEgY29sdW1uIHdpZHRoIG9mIDAuCisgKgorICogICAgLSBIYW5ndWwgSmFtbyBtZWRpYWwgdm93ZWxzIGFuZCBmaW5hbCBjb25zb25hbnRzIChVKzExNjAtVSsxMUZGKQorICogICAgICBoYXZlIGEgY29sdW1uIHdpZHRoIG9mIDAuCisgKgorICogICAgLSBTcGFjaW5nIGNoYXJhY3RlcnMgaW4gdGhlIEVhc3QgQXNpYW4gV2lkZSAoVykgb3IgRWFzdCBBc2lhbgorICogICAgICBGdWxsLXdpZHRoIChGKSBjYXRlZ29yeSBhcyBkZWZpbmVkIGluIFVuaWNvZGUgVGVjaG5pY2FsCisgKiAgICAgIFJlcG9ydCAjMTEgaGF2ZSBhIGNvbHVtbiB3aWR0aCBvZiAyLgorICoKKyAqICAgIC0gQWxsIHJlbWFpbmluZyBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgYWxsIHByaW50YWJsZQorICogICAgICBJU08gODg1OS0xIGFuZCBXR0w0IGNoYXJhY3RlcnMsIFVuaWNvZGUgY29udHJvbCBjaGFyYWN0ZXJzLAorICogICAgICBldGMuKSBoYXZlIGEgY29sdW1uIHdpZHRoIG9mIDEuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgdWNzX2NoYXJfdCBjaGFyYWN0ZXJzIGFyZSBlbmNvZGVkCisgKiBpbiBJU08gMTA2NDYuCisgKi8KKworc3RhdGljIGludCBnaXRfd2N3aWR0aCh1Y3NfY2hhcl90IGNoKQoreworCS8qCisJICogU29ydGVkIGxpc3Qgb2Ygbm9uLW92ZXJsYXBwaW5nIGludGVydmFscyBvZiBub24tc3BhY2luZyBjaGFyYWN0ZXJzLAorCSAqLworI2luY2x1ZGUgInVuaWNvZGVfd2lkdGguaCIKKworCS8qIHRlc3QgZm9yIDgtYml0IGNvbnRyb2wgY2hhcmFjdGVycyAqLworCWlmIChjaCA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoY2ggPCAzMiB8fCAoY2ggPj0gMHg3ZiAmJiBjaCA8IDB4YTApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBiaW5hcnkgc2VhcmNoIGluIHRhYmxlIG9mIG5vbi1zcGFjaW5nIGNoYXJhY3RlcnMgKi8KKwlpZiAoYmlzZWFyY2goY2gsIHplcm9fd2lkdGgsIHNpemVvZih6ZXJvX3dpZHRoKQorCQkJCS8gc2l6ZW9mKHN0cnVjdCBpbnRlcnZhbCkgLSAxKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBiaW5hcnkgc2VhcmNoIGluIHRhYmxlIG9mIGRvdWJsZSB3aWR0aCBjaGFyYWN0ZXJzICovCisJaWYgKGJpc2VhcmNoKGNoLCBkb3VibGVfd2lkdGgsIHNpemVvZihkb3VibGVfd2lkdGgpCisJCQkJLyBzaXplb2Yoc3RydWN0IGludGVydmFsKSAtIDEpKQorCQlyZXR1cm4gMjsKKworCXJldHVybiAxOworfQorCisvKgorICogUGljayBvbmUgdWNzIGNoYXJhY3RlciBzdGFydGluZyBmcm9tIHRoZSBsb2NhdGlvbiAqc3RhcnQgcG9pbnRzIGF0LAorICogYW5kIHJldHVybiBpdCwgd2hpbGUgdXBkYXRpbmcgdGhlICpzdGFydCBwb2ludGVyIHRvIHBvaW50IGF0IHRoZQorICogZW5kIG9mIHRoYXQgY2hhcmFjdGVyLiAgV2hlbiByZW1haW5kZXJfcCBpcyBub3QgTlVMTCwgdGhlIGxvY2F0aW9uCisgKiBob2xkcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgc3RyaW5nIHRoYXQgd2UgYXJlIGFsbG93ZWQKKyAqIHRvIHBpY2sgZnJvbS4gIE90aGVyd2lzZSB3ZSBhcmUgYWxsb3dlZCB0byBwaWNrIHVwIHRvIHRoZSBOVUwgdGhhdAorICogd291bGQgZXZlbnR1YWxseSBhcHBlYXIgaW4gdGhlIHN0cmluZy4gICpyZW1haW5kZXJfcCBpcyBhbHNvIHJlZHVjZWQKKyAqIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgaGF2ZSBjb25zdW1lZC4KKyAqCisgKiBJZiB0aGUgc3RyaW5nIHdhcyBub3QgYSB2YWxpZCBVVEYtOCwgKnN0YXJ0IHBvaW50ZXIgaXMgc2V0IHRvIE5VTEwKKyAqIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZC4KKyAqLworc3RhdGljIHVjc19jaGFyX3QgcGlja19vbmVfdXRmOF9jaGFyKGNvbnN0IGNoYXIgKipzdGFydCwgc2l6ZV90ICpyZW1haW5kZXJfcCkKK3sKKwl1bnNpZ25lZCBjaGFyICpzID0gKHVuc2lnbmVkIGNoYXIgKikqc3RhcnQ7CisJdWNzX2NoYXJfdCBjaDsKKwlzaXplX3QgcmVtYWluZGVyLCBpbmNyOworCisJLyoKKwkgKiBBIGNhbGxlciB0aGF0IGFzc3VtZXMgTlVMIHRlcm1pbmF0ZWQgdGV4dCBjYW4gY2hvb3NlCisJICogbm90IHRvIGJvdGhlciB3aXRoIHRoZSByZW1haW5kZXIgbGVuZ3RoLiAgV2Ugd2lsbAorCSAqIHN0b3AgYXQgdGhlIGZpcnN0IE5VTC4KKwkgKi8KKwlyZW1haW5kZXIgPSAocmVtYWluZGVyX3AgPyAqcmVtYWluZGVyX3AgOiA5OTkpOworCisJaWYgKHJlbWFpbmRlciA8IDEpIHsKKwkJZ290byBpbnZhbGlkOworCX0gZWxzZSBpZiAoKnMgPCAweDgwKSB7CisJCS8qIDB4eHh4eHh4ICovCisJCWNoID0gKnM7CisJCWluY3IgPSAxOworCX0gZWxzZSBpZiAoKHNbMF0gJiAweGUwKSA9PSAweGMwKSB7CisJCS8qIDExMFhYWFh4IDEweHh4eHh4ICovCisJCWlmIChyZW1haW5kZXIgPCAyIHx8CisJCSAgICAoc1sxXSAmIDB4YzApICE9IDB4ODAgfHwKKwkJICAgIChzWzBdICYgMHhmZSkgPT0gMHhjMCkKKwkJCWdvdG8gaW52YWxpZDsKKwkJY2ggPSAoKHNbMF0gJiAweDFmKSA8PCA2KSB8IChzWzFdICYgMHgzZik7CisJCWluY3IgPSAyOworCX0gZWxzZSBpZiAoKHNbMF0gJiAweGYwKSA9PSAweGUwKSB7CisJCS8qIDExMTBYWFhYIDEwWHh4eHh4IDEweHh4eHh4ICovCisJCWlmIChyZW1haW5kZXIgPCAzIHx8CisJCSAgICAoc1sxXSAmIDB4YzApICE9IDB4ODAgfHwKKwkJICAgIChzWzJdICYgMHhjMCkgIT0gMHg4MCB8fAorCQkgICAgLyogb3Zlcmxvbmc/ICovCisJCSAgICAoc1swXSA9PSAweGUwICYmIChzWzFdICYgMHhlMCkgPT0gMHg4MCkgfHwKKwkJICAgIC8qIHN1cnJvZ2F0ZT8gKi8KKwkJICAgIChzWzBdID09IDB4ZWQgJiYgKHNbMV0gJiAweGUwKSA9PSAweGEwKSB8fAorCQkgICAgLyogVStGRkZFIG9yIFUrRkZGRj8gKi8KKwkJICAgIChzWzBdID09IDB4ZWYgJiYgc1sxXSA9PSAweGJmICYmCisJCSAgICAgKHNbMl0gJiAweGZlKSA9PSAweGJlKSkKKwkJCWdvdG8gaW52YWxpZDsKKwkJY2ggPSAoKHNbMF0gJiAweDBmKSA8PCAxMikgfAorCQkJKChzWzFdICYgMHgzZikgPDwgNikgfCAoc1syXSAmIDB4M2YpOworCQlpbmNyID0gMzsKKwl9IGVsc2UgaWYgKChzWzBdICYgMHhmOCkgPT0gMHhmMCkgeworCQkvKiAxMTExMFhYWCAxMFhYeHh4eCAxMHh4eHh4eCAxMHh4eHh4eCAqLworCQlpZiAocmVtYWluZGVyIDwgNCB8fAorCQkgICAgKHNbMV0gJiAweGMwKSAhPSAweDgwIHx8CisJCSAgICAoc1syXSAmIDB4YzApICE9IDB4ODAgfHwKKwkJICAgIChzWzNdICYgMHhjMCkgIT0gMHg4MCB8fAorCQkgICAgLyogb3Zlcmxvbmc/ICovCisJCSAgICAoc1swXSA9PSAweGYwICYmIChzWzFdICYgMHhmMCkgPT0gMHg4MCkgfHwKKwkJICAgIC8qID4gVSsxMEZGRkY/ICovCisJCSAgICAoc1swXSA9PSAweGY0ICYmIHNbMV0gPiAweDhmKSB8fCBzWzBdID4gMHhmNCkKKwkJCWdvdG8gaW52YWxpZDsKKwkJY2ggPSAoKHNbMF0gJiAweDA3KSA8PCAxOCkgfCAoKHNbMV0gJiAweDNmKSA8PCAxMikgfAorCQkJKChzWzJdICYgMHgzZikgPDwgNikgfCAoc1szXSAmIDB4M2YpOworCQlpbmNyID0gNDsKKwl9IGVsc2UgeworaW52YWxpZDoKKwkJKnN0YXJ0ID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCisJKnN0YXJ0ICs9IGluY3I7CisJaWYgKHJlbWFpbmRlcl9wKQorCQkqcmVtYWluZGVyX3AgPSByZW1haW5kZXIgLSBpbmNyOworCXJldHVybiBjaDsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgb2NjdXBpZWQgYnkgdGhlIGNoYXJhY3RlcgorICogcG9pbnRlZCB0byBieSB0aGUgdmFyaWFibGUgc3RhcnQuIFRoZSBwb2ludGVyIGlzIHVwZGF0ZWQgdG8gcG9pbnQgYXQKKyAqIHRoZSBuZXh0IGNoYXJhY3Rlci4gV2hlbiByZW1haW5kZXJfcCBpcyBub3QgTlVMTCwgaXQgcG9pbnRzIGF0IHRoZQorICogbG9jYXRpb24gdGhhdCBzdG9yZXMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgYnl0ZXMgd2UgY2FuIHVzZSB0byBwaWNrCisgKiBhIGNoYXJhY3RlciAoc2VlIHBpY2tfb25lX3V0ZjhfY2hhcigpIGFib3ZlKS4KKyAqLworaW50IHV0Zjhfd2lkdGgoY29uc3QgY2hhciAqKnN0YXJ0LCBzaXplX3QgKnJlbWFpbmRlcl9wKQoreworCXVjc19jaGFyX3QgY2ggPSBwaWNrX29uZV91dGY4X2NoYXIoc3RhcnQsIHJlbWFpbmRlcl9wKTsKKwlpZiAoISpzdGFydCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGdpdF93Y3dpZHRoKGNoKTsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIHJlcXVpcmVkIGJ5IGEgbnVsbC10ZXJtaW5hdGVkCisgKiBzdHJpbmcsIGFzc3VtaW5nIHRoYXQgdGhlIHN0cmluZyBpcyB1dGY4LiAgUmV0dXJucyBzdHJsZW4oKSBpbnN0ZWFkCisgKiBpZiB0aGUgc3RyaW5nIGRvZXMgbm90IGxvb2sgbGlrZSBhIHZhbGlkIHV0Zjggc3RyaW5nLgorICovCitpbnQgdXRmOF9zdHJud2lkdGgoY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgbGVuLCBpbnQgc2tpcF9hbnNpKQoreworCWludCB3aWR0aCA9IDA7CisJY29uc3QgY2hhciAqb3JpZyA9IHN0cmluZzsKKworCWlmIChsZW4gPT0gLTEpCisJCWxlbiA9IHN0cmxlbihzdHJpbmcpOworCXdoaWxlIChzdHJpbmcgJiYgc3RyaW5nIDwgb3JpZyArIGxlbikgeworCQlpbnQgc2tpcDsKKwkJd2hpbGUgKHNraXBfYW5zaSAmJgorCQkgICAgICAgKHNraXAgPSBkaXNwbGF5X21vZGVfZXNjX3NlcXVlbmNlX2xlbihzdHJpbmcpKSAhPSAwKQorCQkJc3RyaW5nICs9IHNraXA7CisJCXdpZHRoICs9IHV0Zjhfd2lkdGgoJnN0cmluZywgTlVMTCk7CisJfQorCXJldHVybiBzdHJpbmcgPyB3aWR0aCA6IGxlbjsKK30KKworaW50IHV0Zjhfc3Ryd2lkdGgoY29uc3QgY2hhciAqc3RyaW5nKQoreworCXJldHVybiB1dGY4X3N0cm53aWR0aChzdHJpbmcsIC0xLCAwKTsKK30KKworaW50IGlzX3V0ZjgoY29uc3QgY2hhciAqdGV4dCkKK3sKKwl3aGlsZSAoKnRleHQpIHsKKwkJaWYgKCp0ZXh0ID09ICdcbicgfHwgKnRleHQgPT0gJ1x0JyB8fCAqdGV4dCA9PSAnXHInKSB7CisJCQl0ZXh0Kys7CisJCQljb250aW51ZTsKKwkJfQorCQl1dGY4X3dpZHRoKCZ0ZXh0LCBOVUxMKTsKKwkJaWYgKCF0ZXh0KQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBzdHJidWZfYWRkX2luZGVudGVkX3RleHQoc3RydWN0IHN0cmJ1ZiAqYnVmLCBjb25zdCBjaGFyICp0ZXh0LAorCQkJCSAgICAgaW50IGluZGVudCwgaW50IGluZGVudDIpCit7CisJaWYgKGluZGVudCA8IDApCisJCWluZGVudCA9IDA7CisJd2hpbGUgKCp0ZXh0KSB7CisJCWNvbnN0IGNoYXIgKmVvbCA9IHN0cmNocm51bCh0ZXh0LCAnXG4nKTsKKwkJaWYgKCplb2wgPT0gJ1xuJykKKwkJCWVvbCsrOworCQlzdHJidWZfYWRkY2hhcnMoYnVmLCAnICcsIGluZGVudCk7CisJCXN0cmJ1Zl9hZGQoYnVmLCB0ZXh0LCBlb2wgLSB0ZXh0KTsKKwkJdGV4dCA9IGVvbDsKKwkJaW5kZW50ID0gaW5kZW50MjsKKwl9Cit9CisKKy8qCisgKiBXcmFwIHRoZSB0ZXh0LCBpZiBuZWNlc3NhcnkuIFRoZSB2YXJpYWJsZSBpbmRlbnQgaXMgdGhlIGluZGVudCBmb3IgdGhlCisgKiBmaXJzdCBsaW5lLCBpbmRlbnQyIGlzIHRoZSBpbmRlbnQgZm9yIGFsbCBvdGhlciBsaW5lcy4KKyAqIElmIGluZGVudCBpcyBuZWdhdGl2ZSwgYXNzdW1lIHRoYXQgYWxyZWFkeSAtaW5kZW50IGNvbHVtbnMgaGF2ZSBiZWVuCisgKiBjb25zdW1lZCAoYW5kIG5vIGV4dHJhIGluZGVudCBpcyBuZWNlc3NhcnkgZm9yIHRoZSBmaXJzdCBsaW5lKS4KKyAqLwordm9pZCBzdHJidWZfYWRkX3dyYXBwZWRfdGV4dChzdHJ1Y3Qgc3RyYnVmICpidWYsCisJCWNvbnN0IGNoYXIgKnRleHQsIGludCBpbmRlbnQxLCBpbnQgaW5kZW50MiwgaW50IHdpZHRoKQoreworCWludCBpbmRlbnQsIHcsIGFzc3VtZV91dGY4ID0gMTsKKwljb25zdCBjaGFyICpib2wsICpzcGFjZSwgKnN0YXJ0ID0gdGV4dDsKKwlzaXplX3Qgb3JpZ19sZW4gPSBidWYtPmxlbjsKKworCWlmICh3aWR0aCA8PSAwKSB7CisJCXN0cmJ1Zl9hZGRfaW5kZW50ZWRfdGV4dChidWYsIHRleHQsIGluZGVudDEsIGluZGVudDIpOworCQlyZXR1cm47CisJfQorCityZXRyeToKKwlib2wgPSB0ZXh0OworCXcgPSBpbmRlbnQgPSBpbmRlbnQxOworCXNwYWNlID0gTlVMTDsKKwlpZiAoaW5kZW50IDwgMCkgeworCQl3ID0gLWluZGVudDsKKwkJc3BhY2UgPSB0ZXh0OworCX0KKworCWZvciAoOzspIHsKKwkJY2hhciBjOworCQlzaXplX3Qgc2tpcDsKKworCQl3aGlsZSAoKHNraXAgPSBkaXNwbGF5X21vZGVfZXNjX3NlcXVlbmNlX2xlbih0ZXh0KSkpCisJCQl0ZXh0ICs9IHNraXA7CisKKwkJYyA9ICp0ZXh0OworCQlpZiAoIWMgfHwgaXNzcGFjZShjKSkgeworCQkJaWYgKHcgPD0gd2lkdGggfHwgIXNwYWNlKSB7CisJCQkJY29uc3QgY2hhciAqc3RhcnQgPSBib2w7CisJCQkJaWYgKCFjICYmIHRleHQgPT0gc3RhcnQpCisJCQkJCXJldHVybjsKKwkJCQlpZiAoc3BhY2UpCisJCQkJCXN0YXJ0ID0gc3BhY2U7CisJCQkJZWxzZQorCQkJCQlzdHJidWZfYWRkY2hhcnMoYnVmLCAnICcsIGluZGVudCk7CisJCQkJc3RyYnVmX2FkZChidWYsIHN0YXJ0LCB0ZXh0IC0gc3RhcnQpOworCQkJCWlmICghYykKKwkJCQkJcmV0dXJuOworCQkJCXNwYWNlID0gdGV4dDsKKwkJCQlpZiAoYyA9PSAnXHQnKQorCQkJCQl3IHw9IDB4MDc7CisJCQkJZWxzZSBpZiAoYyA9PSAnXG4nKSB7CisJCQkJCXNwYWNlKys7CisJCQkJCWlmICgqc3BhY2UgPT0gJ1xuJykgeworCQkJCQkJc3RyYnVmX2FkZGNoKGJ1ZiwgJ1xuJyk7CisJCQkJCQlnb3RvIG5ld19saW5lOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKCFpc2FsbnVtKCpzcGFjZSkpCisJCQkJCQlnb3RvIG5ld19saW5lOworCQkJCQllbHNlCisJCQkJCQlzdHJidWZfYWRkY2goYnVmLCAnICcpOworCQkJCX0KKwkJCQl3Kys7CisJCQkJdGV4dCsrOworCQkJfQorCQkJZWxzZSB7CituZXdfbGluZToKKwkJCQlzdHJidWZfYWRkY2goYnVmLCAnXG4nKTsKKwkJCQl0ZXh0ID0gYm9sID0gc3BhY2UgKyBpc3NwYWNlKCpzcGFjZSk7CisJCQkJc3BhY2UgPSBOVUxMOworCQkJCXcgPSBpbmRlbnQgPSBpbmRlbnQyOworCQkJfQorCQkJY29udGludWU7CisJCX0KKwkJaWYgKGFzc3VtZV91dGY4KSB7CisJCQl3ICs9IHV0Zjhfd2lkdGgoJnRleHQsIE5VTEwpOworCQkJaWYgKCF0ZXh0KSB7CisJCQkJYXNzdW1lX3V0ZjggPSAwOworCQkJCXRleHQgPSBzdGFydDsKKwkJCQlzdHJidWZfc2V0bGVuKGJ1Ziwgb3JpZ19sZW4pOworCQkJCWdvdG8gcmV0cnk7CisJCQl9CisJCX0gZWxzZSB7CisJCQl3Kys7CisJCQl0ZXh0Kys7CisJCX0KKwl9Cit9CisKK3ZvaWQgc3RyYnVmX2FkZF93cmFwcGVkX2J5dGVzKHN0cnVjdCBzdHJidWYgKmJ1ZiwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbiwKKwkJCSAgICAgaW50IGluZGVudCwgaW50IGluZGVudDIsIGludCB3aWR0aCkKK3sKKwljaGFyICp0bXAgPSB4c3RybmR1cChkYXRhLCBsZW4pOworCXN0cmJ1Zl9hZGRfd3JhcHBlZF90ZXh0KGJ1ZiwgdG1wLCBpbmRlbnQsIGluZGVudDIsIHdpZHRoKTsKKwlmcmVlKHRtcCk7Cit9CisKK3ZvaWQgc3RyYnVmX3V0ZjhfcmVwbGFjZShzdHJ1Y3Qgc3RyYnVmICpzYl9zcmMsIGludCBwb3MsIGludCB3aWR0aCwKKwkJCSBjb25zdCBjaGFyICpzdWJzdCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiX2RzdCA9IFNUUkJVRl9JTklUOworCWNoYXIgKnNyYyA9IHNiX3NyYy0+YnVmOworCWNoYXIgKmVuZCA9IHNyYyArIHNiX3NyYy0+bGVuOworCWNoYXIgKmRzdDsKKwlpbnQgdyA9IDAsIHN1YnN0X2xlbiA9IDA7CisKKwlpZiAoc3Vic3QpCisJCXN1YnN0X2xlbiA9IHN0cmxlbihzdWJzdCk7CisJc3RyYnVmX2dyb3coJnNiX2RzdCwgc2Jfc3JjLT5sZW4gKyBzdWJzdF9sZW4pOworCWRzdCA9IHNiX2RzdC5idWY7CisKKwl3aGlsZSAoc3JjIDwgZW5kKSB7CisJCWNoYXIgKm9sZDsKKwkJc2l6ZV90IG47CisKKwkJd2hpbGUgKChuID0gZGlzcGxheV9tb2RlX2VzY19zZXF1ZW5jZV9sZW4oc3JjKSkpIHsKKwkJCW1lbWNweShkc3QsIHNyYywgbik7CisJCQlzcmMgKz0gbjsKKwkJCWRzdCArPSBuOworCQl9CisKKwkJaWYgKHNyYyA+PSBlbmQpCisJCQlicmVhazsKKworCQlvbGQgPSBzcmM7CisJCW4gPSB1dGY4X3dpZHRoKChjb25zdCBjaGFyKiopJnNyYywgTlVMTCk7CisJCWlmICghc3JjKSAJLyogYnJva2VuIHV0Zi04LCBkbyBub3RoaW5nICovCisJCQlyZXR1cm47CisJCWlmIChuICYmIHcgPj0gcG9zICYmIHcgPCBwb3MgKyB3aWR0aCkgeworCQkJaWYgKHN1YnN0KSB7CisJCQkJbWVtY3B5KGRzdCwgc3Vic3QsIHN1YnN0X2xlbik7CisJCQkJZHN0ICs9IHN1YnN0X2xlbjsKKwkJCQlzdWJzdCA9IE5VTEw7CisJCQl9CisJCQl3ICs9IG47CisJCQljb250aW51ZTsKKwkJfQorCQltZW1jcHkoZHN0LCBvbGQsIHNyYyAtIG9sZCk7CisJCWRzdCArPSBzcmMgLSBvbGQ7CisJCXcgKz0gbjsKKwl9CisJc3RyYnVmX3NldGxlbigmc2JfZHN0LCBkc3QgLSBzYl9kc3QuYnVmKTsKKwlzdHJidWZfc3dhcChzYl9zcmMsICZzYl9kc3QpOworCXN0cmJ1Zl9yZWxlYXNlKCZzYl9kc3QpOworfQorCitpbnQgaXNfZW5jb2RpbmdfdXRmOChjb25zdCBjaGFyICpuYW1lKQoreworCWlmICghbmFtZSkKKwkJcmV0dXJuIDE7CisJaWYgKCFzdHJjYXNlY21wKG5hbWUsICJ1dGYtOCIpIHx8ICFzdHJjYXNlY21wKG5hbWUsICJ1dGY4IikpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitpbnQgc2FtZV9lbmNvZGluZyhjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmRzdCkKK3sKKwlpZiAoaXNfZW5jb2RpbmdfdXRmOChzcmMpICYmIGlzX2VuY29kaW5nX3V0ZjgoZHN0KSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuICFzdHJjYXNlY21wKHNyYywgZHN0KTsKK30KKworLyoKKyAqIFdyYXBwZXIgZm9yIGZwcmludGYgYW5kIHJldHVybnMgdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIHJlcXVpcmVkCisgKiBmb3IgdGhlIHByaW50ZWQgc3RyaW5nLCBhc3N1bWluZyB0aGF0IHRoZSBzdHJpbmcgaXMgdXRmOC4KKyAqLworaW50IHV0ZjhfZnByaW50ZihGSUxFICpzdHJlYW0sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJdmFfbGlzdCBhcmc7CisJaW50IGNvbHVtbnM7CisKKwl2YV9zdGFydChhcmcsIGZvcm1hdCk7CisJc3RyYnVmX3ZhZGRmKCZidWYsIGZvcm1hdCwgYXJnKTsKKwl2YV9lbmQoYXJnKTsKKworCWNvbHVtbnMgPSBmcHV0cyhidWYuYnVmLCBzdHJlYW0pOworCWlmICgwIDw9IGNvbHVtbnMpIC8qIGtlZXAgdGhlIGVycm9yIGZyb20gdGhlIEkvTyAqLworCQljb2x1bW5zID0gdXRmOF9zdHJ3aWR0aChidWYuYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmYnVmKTsKKwlyZXR1cm4gY29sdW1uczsKK30KKworLyoKKyAqIEdpdmVuIGEgYnVmZmVyIGFuZCBpdHMgZW5jb2RpbmcsIHJldHVybiBpdCByZS1lbmNvZGVkCisgKiB3aXRoIGljb252LiAgSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybnMgTlVMTC4KKyAqLworI2lmbmRlZiBOT19JQ09OVgorI2lmIGRlZmluZWQoT0xEX0lDT05WKSB8fCAoZGVmaW5lZChfX3N1bl9fKSAmJiAhZGVmaW5lZChfWFBHNikpCisJdHlwZWRlZiBjb25zdCBjaGFyICogaWNvbnZfaWJwOworI2Vsc2UKKwl0eXBlZGVmIGNoYXIgKiBpY29udl9pYnA7CisjZW5kaWYKK2NoYXIgKnJlZW5jb2RlX3N0cmluZ19pY29udihjb25zdCBjaGFyICppbiwgc2l6ZV90IGluc3osIGljb252X3QgY29udiwgaW50ICpvdXRzel9wKQoreworCXNpemVfdCBvdXRzeiwgb3V0YWxsb2M7CisJY2hhciAqb3V0LCAqb3V0cG9zOworCWljb252X2licCBjcDsKKworCW91dHN6ID0gaW5zejsKKwlvdXRhbGxvYyA9IG91dHN6ICsgMTsgLyogZm9yIHRlcm1pbmF0aW5nIE5VTCAqLworCW91dCA9IHhtYWxsb2Mob3V0YWxsb2MpOworCW91dHBvcyA9IG91dDsKKwljcCA9IChpY29udl9pYnApaW47CisKKwl3aGlsZSAoMSkgeworCQlzaXplX3QgY250ID0gaWNvbnYoY29udiwgJmNwLCAmaW5zeiwgJm91dHBvcywgJm91dHN6KTsKKworCQlpZiAoY250ID09IChzaXplX3QpIC0xKSB7CisJCQlzaXplX3Qgc29mYXI7CisJCQlpZiAoZXJybm8gIT0gRTJCSUcpIHsKKwkJCQlmcmVlKG91dCk7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQkvKiBpbnN6IGhhcyByZW1haW5pbmcgbnVtYmVyIG9mIGJ5dGVzLgorCQkJICogc2luY2Ugd2Ugc3RhcnRlZCBvdXRzeiB0aGUgc2FtZSBhcyBpbnN6LAorCQkJICogaXQgaXMgbGlrZWx5IHRoYXQgaW5zeiBpcyBub3QgZW5vdWdoIGZvcgorCQkJICogY29udmVydGluZyB0aGUgcmVzdC4KKwkJCSAqLworCQkJc29mYXIgPSBvdXRwb3MgLSBvdXQ7CisJCQlvdXRhbGxvYyA9IHNvZmFyICsgaW5zeiAqIDIgKyAzMjsKKwkJCW91dCA9IHhyZWFsbG9jKG91dCwgb3V0YWxsb2MpOworCQkJb3V0cG9zID0gb3V0ICsgc29mYXI7CisJCQlvdXRzeiA9IG91dGFsbG9jIC0gc29mYXIgLSAxOworCQl9CisJCWVsc2UgeworCQkJKm91dHBvcyA9ICdcMCc7CisJCQlpZiAob3V0c3pfcCkKKwkJCQkqb3V0c3pfcCA9IG91dHBvcyAtIG91dDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBvdXQ7Cit9CisKK2NoYXIgKnJlZW5jb2RlX3N0cmluZ19sZW4oY29uc3QgY2hhciAqaW4sIGludCBpbnN6LAorCQkJICBjb25zdCBjaGFyICpvdXRfZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmluX2VuY29kaW5nLAorCQkJICBpbnQgKm91dHN6KQoreworCWljb252X3QgY29udjsKKwljaGFyICpvdXQ7CisKKwlpZiAoIWluX2VuY29kaW5nKQorCQlyZXR1cm4gTlVMTDsKKworCWNvbnYgPSBpY29udl9vcGVuKG91dF9lbmNvZGluZywgaW5fZW5jb2RpbmcpOworCWlmIChjb252ID09IChpY29udl90KSAtMSkgeworCQkvKgorCQkgKiBTb21lIHBsYXRmb3JtcyBkbyBub3QgaGF2ZSB0aGUgdmFyaW91c2x5IHNwZWxsZWQgdmFyaWFudHMgb2YKKwkJICogVVRGLTgsIHNvIGxldCdzIGZhbGwgYmFjayB0byB0cnlpbmcgdGhlIG1vc3Qgb2ZmaWNpYWwKKwkJICogc3BlbGxpbmcuIFdlIGRvIHNvIG9ubHkgYXMgYSBmYWxsYmFjayBpbiBjYXNlIHRoZSBwbGF0Zm9ybQorCQkgKiBkb2VzIHVuZGVyc3RhbmQgdGhlIHVzZXIncyBzcGVsbGluZywgYnV0IG5vdCBvdXIgb2ZmaWNpYWwKKwkJICogb25lLgorCQkgKi8KKwkJaWYgKGlzX2VuY29kaW5nX3V0ZjgoaW5fZW5jb2RpbmcpKQorCQkJaW5fZW5jb2RpbmcgPSAiVVRGLTgiOworCQlpZiAoaXNfZW5jb2RpbmdfdXRmOChvdXRfZW5jb2RpbmcpKQorCQkJb3V0X2VuY29kaW5nID0gIlVURi04IjsKKwkJY29udiA9IGljb252X29wZW4ob3V0X2VuY29kaW5nLCBpbl9lbmNvZGluZyk7CisJCWlmIChjb252ID09IChpY29udl90KSAtMSkKKwkJCXJldHVybiBOVUxMOworCX0KKworCW91dCA9IHJlZW5jb2RlX3N0cmluZ19pY29udihpbiwgaW5zeiwgY29udiwgb3V0c3opOworCWljb252X2Nsb3NlKGNvbnYpOworCXJldHVybiBvdXQ7Cit9CisjZW5kaWYKKworLyoKKyAqIFJldHVybnMgZmlyc3QgY2hhcmFjdGVyIGxlbmd0aCBpbiBieXRlcyBmb3IgbXVsdGktYnl0ZSBgdGV4dGAgYWNjb3JkaW5nIHRvCisgKiBgZW5jb2RpbmdgLgorICoKKyAqIC0gVGhlIGB0ZXh0YCBwb2ludGVyIGlzIHVwZGF0ZWQgdG8gcG9pbnQgYXQgdGhlIG5leHQgY2hhcmFjdGVyLgorICogLSBXaGVuIGByZW1haW5kZXJfcGAgaXMgbm90IE5VTEwsIG9uIGVudHJ5IGAqcmVtYWluZGVyX3BgIGlzIGhvdyBtdWNoIGJ5dGVzCisgKiAgIHdlIGNhbiBjb25zdW1lIGZyb20gdGV4dCwgYW5kIG9uIGV4aXQgYCpyZW1haW5kZXJfcGAgaXMgcmVkdWNlZCBieSByZXR1cm5lZAorICogICBjaGFyYWN0ZXIgbGVuZ3RoLiBPdGhlcndpc2UgYHRleHRgIGlzIHRyZWF0ZWQgYXMgbGltaXRlZCBieSBOVUwuCisgKi8KK2ludCBtYnNfY2hybGVuKGNvbnN0IGNoYXIgKip0ZXh0LCBzaXplX3QgKnJlbWFpbmRlcl9wLCBjb25zdCBjaGFyICplbmNvZGluZykKK3sKKwlpbnQgY2hybGVuOworCWNvbnN0IGNoYXIgKnAgPSAqdGV4dDsKKwlzaXplX3QgciA9IChyZW1haW5kZXJfcCA/ICpyZW1haW5kZXJfcCA6IFNJWkVfTUFYKTsKKworCWlmIChyIDwgMSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXNfZW5jb2RpbmdfdXRmOChlbmNvZGluZykpIHsKKwkJcGlja19vbmVfdXRmOF9jaGFyKCZwLCAmcik7CisKKwkJY2hybGVuID0gcCA/IChwIC0gKnRleHQpCisJCQkgICA6IDEgLyogbm90IHZhbGlkIFVURi04IC0+IHJhdyBieXRlIHNlcXVlbmNlICovOworCX0KKwllbHNlIHsKKwkJLyoKKwkJICogVE9ETyB1c2UgaWNvbnYgdG8gZGVjb2RlIG9uZSBjaGFyIGFuZCBvYnRhaW4gaXRzIGNocmxlbgorCQkgKiBmb3Igbm93LCBsZXQncyB0cmVhdCBlbmNvZGluZ3MgIT0gVVRGLTggYXMgb25lLWJ5dGUKKwkJICovCisJCWNocmxlbiA9IDE7CisJfQorCisJKnRleHQgKz0gY2hybGVuOworCWlmIChyZW1haW5kZXJfcCkKKwkJKnJlbWFpbmRlcl9wIC09IGNocmxlbjsKKworCXJldHVybiBjaHJsZW47Cit9CisKKy8qCisgKiBQaWNrIHRoZSBuZXh0IGNoYXIgZnJvbSB0aGUgc3RyZWFtLCBpZ25vcmluZyBjb2RlcG9pbnRzIGFuIEhGUysgd291bGQuCisgKiBOb3RlIHRoYXQgdGhpcyBpcyBfbm90XyBjb21wbGV0ZSBieSBhbnkgbWVhbnMuIEl0J3MganVzdCBlbm91Z2gKKyAqIHRvIG1ha2UgaXNfaGZzX2RvdGdpdCgpIHdvcmssIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgdWNzX2NoYXJfdCBuZXh0X2hmc19jaGFyKGNvbnN0IGNoYXIgKippbikKK3sKKwl3aGlsZSAoMSkgeworCQl1Y3NfY2hhcl90IG91dCA9IHBpY2tfb25lX3V0ZjhfY2hhcihpbiwgTlVMTCk7CisJCS8qCisJCSAqIGNoZWNrIGZvciBtYWxmb3JtZWQgdXRmOC4gVGVjaG5pY2FsbHkgdGhpcworCQkgKiBnZXRzIGNvbnZlcnRlZCB0byBhIHBlcmNlbnQtc2VxdWVuY2UsIGJ1dAorCQkgKiByZXR1cm5pbmcgMCBpcyBnb29kIGVub3VnaCBmb3IgaXNfaGZzX2RvdGdpdAorCQkgKiB0byByZWFsaXplIGl0IGNhbm5vdCBiZSAuZ2l0CisJCSAqLworCQlpZiAoISppbikKKwkJCXJldHVybiAwOworCisJCS8qIHRoZXNlIGNvZGUgcG9pbnRzIGFyZSBpZ25vcmVkIGNvbXBsZXRlbHkgKi8KKwkJc3dpdGNoIChvdXQpIHsKKwkJY2FzZSAweDIwMGM6IC8qIFpFUk8gV0lEVEggTk9OLUpPSU5FUiAqLworCQljYXNlIDB4MjAwZDogLyogWkVSTyBXSURUSCBKT0lORVIgKi8KKwkJY2FzZSAweDIwMGU6IC8qIExFRlQtVE8tUklHSFQgTUFSSyAqLworCQljYXNlIDB4MjAwZjogLyogUklHSFQtVE8tTEVGVCBNQVJLICovCisJCWNhc2UgMHgyMDJhOiAvKiBMRUZULVRPLVJJR0hUIEVNQkVERElORyAqLworCQljYXNlIDB4MjAyYjogLyogUklHSFQtVE8tTEVGVCBFTUJFRERJTkcgKi8KKwkJY2FzZSAweDIwMmM6IC8qIFBPUCBESVJFQ1RJT05BTCBGT1JNQVRUSU5HICovCisJCWNhc2UgMHgyMDJkOiAvKiBMRUZULVRPLVJJR0hUIE9WRVJSSURFICovCisJCWNhc2UgMHgyMDJlOiAvKiBSSUdIVC1UTy1MRUZUIE9WRVJSSURFICovCisJCWNhc2UgMHgyMDZhOiAvKiBJTkhJQklUIFNZTU1FVFJJQyBTV0FQUElORyAqLworCQljYXNlIDB4MjA2YjogLyogQUNUSVZBVEUgU1lNTUVUUklDIFNXQVBQSU5HICovCisJCWNhc2UgMHgyMDZjOiAvKiBJTkhJQklUIEFSQUJJQyBGT1JNIFNIQVBJTkcgKi8KKwkJY2FzZSAweDIwNmQ6IC8qIEFDVElWQVRFIEFSQUJJQyBGT1JNIFNIQVBJTkcgKi8KKwkJY2FzZSAweDIwNmU6IC8qIE5BVElPTkFMIERJR0lUIFNIQVBFUyAqLworCQljYXNlIDB4MjA2ZjogLyogTk9NSU5BTCBESUdJVCBTSEFQRVMgKi8KKwkJY2FzZSAweGZlZmY6IC8qIFpFUk8gV0lEVEggTk8tQlJFQUsgU1BBQ0UgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0dXJuIG91dDsKKwl9Cit9CisKK2ludCBpc19oZnNfZG90Z2l0KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJdWNzX2NoYXJfdCBjOworCisJYyA9IG5leHRfaGZzX2NoYXIoJnBhdGgpOworCWlmIChjICE9ICcuJykKKwkJcmV0dXJuIDA7CisJYyA9IG5leHRfaGZzX2NoYXIoJnBhdGgpOworCisJLyoKKwkgKiB0aGVyZSdzIGEgZ3JlYXQgZGVhbCBvZiBvdGhlciBjYXNlLWZvbGRpbmcgdGhhdCBvY2N1cnMKKwkgKiBpbiBIRlMrLCBidXQgdGhpcyBpcyBlbm91Z2ggdG8gY2F0Y2ggYW55dGhpbmcgdGhhdCB3aWxsCisJICogY29udmVydCB0byAiLmdpdCIKKwkgKi8KKwlpZiAoYyAhPSAnZycgJiYgYyAhPSAnRycpCisJCXJldHVybiAwOworCWMgPSBuZXh0X2hmc19jaGFyKCZwYXRoKTsKKwlpZiAoYyAhPSAnaScgJiYgYyAhPSAnSScpCisJCXJldHVybiAwOworCWMgPSBuZXh0X2hmc19jaGFyKCZwYXRoKTsKKwlpZiAoYyAhPSAndCcgJiYgYyAhPSAnVCcpCisJCXJldHVybiAwOworCWMgPSBuZXh0X2hmc19jaGFyKCZwYXRoKTsKKwlpZiAoYyAmJiAhaXNfZGlyX3NlcChjKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworY29uc3QgY2hhciB1dGY4X2JvbVtdID0gIlwzNTdcMjczXDI3NyI7CisKK2ludCBza2lwX3V0ZjhfYm9tKGNoYXIgKip0ZXh0LCBzaXplX3QgbGVuKQoreworCWlmIChsZW4gPCBzdHJsZW4odXRmOF9ib20pIHx8CisJICAgIG1lbWNtcCgqdGV4dCwgdXRmOF9ib20sIHN0cmxlbih1dGY4X2JvbSkpKQorCQlyZXR1cm4gMDsKKwkqdGV4dCArPSBzdHJsZW4odXRmOF9ib20pOworCXJldHVybiAxOworfQorCit2b2lkIHN0cmJ1Zl91dGY4X2FsaWduKHN0cnVjdCBzdHJidWYgKmJ1ZiwgYWxpZ25fdHlwZSBwb3NpdGlvbiwgdW5zaWduZWQgaW50IHdpZHRoLAorCQkgICAgICAgY29uc3QgY2hhciAqcykKK3sKKwlpbnQgc2xlbiA9IHN0cmxlbihzKTsKKwlpbnQgZGlzcGxheV9sZW4gPSB1dGY4X3N0cm53aWR0aChzLCBzbGVuLCAwKTsKKwlpbnQgdXRmOF9jb21wZW5zYXRpb24gPSBzbGVuIC0gZGlzcGxheV9sZW47CisKKwlpZiAoZGlzcGxheV9sZW4gPj0gd2lkdGgpIHsKKwkJc3RyYnVmX2FkZHN0cihidWYsIHMpOworCQlyZXR1cm47CisJfQorCisJaWYgKHBvc2l0aW9uID09IEFMSUdOX0xFRlQpCisJCXN0cmJ1Zl9hZGRmKGJ1ZiwgIiUtKnMiLCB3aWR0aCArIHV0ZjhfY29tcGVuc2F0aW9uLCBzKTsKKwllbHNlIGlmIChwb3NpdGlvbiA9PSBBTElHTl9NSURETEUpIHsKKwkJaW50IGxlZnQgPSAod2lkdGggLSBkaXNwbGF5X2xlbikgLyAyOworCQlzdHJidWZfYWRkZihidWYsICIlKnMlLSpzIiwgbGVmdCwgIiIsIHdpZHRoIC0gbGVmdCArIHV0ZjhfY29tcGVuc2F0aW9uLCBzKTsKKwl9IGVsc2UgaWYgKHBvc2l0aW9uID09IEFMSUdOX1JJR0hUKQorCQlzdHJidWZfYWRkZihidWYsICIlKnMiLCB3aWR0aCArIHV0ZjhfY29tcGVuc2F0aW9uLCBzKTsKK30KZGlmZiAtLWdpdCBhL3V0ZjguaCBiL3V0ZjguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTMwYjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdXRmOC5oCkBAIC0wLDAgKzEsNzMgQEAKKyNpZm5kZWYgR0lUX1VURjhfSAorI2RlZmluZSBHSVRfVVRGOF9ICisKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVjc19jaGFyX3Q7ICAvKiBhc3N1bWluZyAzMmJpdCBpbnQgKi8KKworc2l6ZV90IGRpc3BsYXlfbW9kZV9lc2Nfc2VxdWVuY2VfbGVuKGNvbnN0IGNoYXIgKnMpOworaW50IHV0Zjhfd2lkdGgoY29uc3QgY2hhciAqKnN0YXJ0LCBzaXplX3QgKnJlbWFpbmRlcl9wKTsKK2ludCB1dGY4X3N0cm53aWR0aChjb25zdCBjaGFyICpzdHJpbmcsIGludCBsZW4sIGludCBza2lwX2Fuc2kpOworaW50IHV0Zjhfc3Ryd2lkdGgoY29uc3QgY2hhciAqc3RyaW5nKTsKK2ludCBpc191dGY4KGNvbnN0IGNoYXIgKnRleHQpOworaW50IGlzX2VuY29kaW5nX3V0ZjgoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgc2FtZV9lbmNvZGluZyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQoraW50IHV0ZjhfZnByaW50ZihGSUxFICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgdXRmOF9ib21bXTsKK2V4dGVybiBpbnQgc2tpcF91dGY4X2JvbShjaGFyICoqLCBzaXplX3QpOworCit2b2lkIHN0cmJ1Zl9hZGRfd3JhcHBlZF90ZXh0KHN0cnVjdCBzdHJidWYgKmJ1ZiwKKwkJY29uc3QgY2hhciAqdGV4dCwgaW50IGluZGVudCwgaW50IGluZGVudDIsIGludCB3aWR0aCk7Cit2b2lkIHN0cmJ1Zl9hZGRfd3JhcHBlZF9ieXRlcyhzdHJ1Y3Qgc3RyYnVmICpidWYsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4sCisJCQkgICAgIGludCBpbmRlbnQsIGludCBpbmRlbnQyLCBpbnQgd2lkdGgpOwordm9pZCBzdHJidWZfdXRmOF9yZXBsYWNlKHN0cnVjdCBzdHJidWYgKnNiLCBpbnQgcG9zLCBpbnQgd2lkdGgsCisJCQkgY29uc3QgY2hhciAqc3Vic3QpOworCisjaWZuZGVmIE5PX0lDT05WCitjaGFyICpyZWVuY29kZV9zdHJpbmdfaWNvbnYoY29uc3QgY2hhciAqaW4sIHNpemVfdCBpbnN6LAorCQkJICAgIGljb252X3QgY29udiwgaW50ICpvdXRzeik7CitjaGFyICpyZWVuY29kZV9zdHJpbmdfbGVuKGNvbnN0IGNoYXIgKmluLCBpbnQgaW5zeiwKKwkJCSAgY29uc3QgY2hhciAqb3V0X2VuY29kaW5nLAorCQkJICBjb25zdCBjaGFyICppbl9lbmNvZGluZywKKwkJCSAgaW50ICpvdXRzeik7CisjZWxzZQorc3RhdGljIGlubGluZSBjaGFyICpyZWVuY29kZV9zdHJpbmdfbGVuKGNvbnN0IGNoYXIgKmEsIGludCBiLAorCQkJCQljb25zdCBjaGFyICpjLCBjb25zdCBjaGFyICpkLCBpbnQgKmUpCit7IGlmIChlKSAqZSA9IDA7IHJldHVybiBOVUxMOyB9CisjZW5kaWYKKworc3RhdGljIGlubGluZSBjaGFyICpyZWVuY29kZV9zdHJpbmcoY29uc3QgY2hhciAqaW4sCisJCQkJICAgIGNvbnN0IGNoYXIgKm91dF9lbmNvZGluZywKKwkJCQkgICAgY29uc3QgY2hhciAqaW5fZW5jb2RpbmcpCit7CisJcmV0dXJuIHJlZW5jb2RlX3N0cmluZ19sZW4oaW4sIHN0cmxlbihpbiksCisJCQkJICAgb3V0X2VuY29kaW5nLCBpbl9lbmNvZGluZywKKwkJCQkgICBOVUxMKTsKK30KKworaW50IG1ic19jaHJsZW4oY29uc3QgY2hhciAqKnRleHQsIHNpemVfdCAqcmVtYWluZGVyX3AsIGNvbnN0IGNoYXIgKmVuY29kaW5nKTsKKworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGhlIHBhdGggd291bGQgbWF0Y2ggIi5naXQiIGFmdGVyIEhGUyBjYXNlLWZvbGRpbmcuCisgKiBUaGUgcGF0aCBzaG91bGQgYmUgTlVMLXRlcm1pbmF0ZWQsIGJ1dCB3ZSB3aWxsIG1hdGNoIHZhcmlhbnRzIG9mIGJvdGggIi5naXRcMCIKKyAqIGFuZCAiLmdpdC8uLi4iIChidXQgX25vdF8gIi4uLi8uZ2l0IikuIFRoaXMgbWFrZXMgaXQgc3VpdGFibGUgZm9yIGJvdGggZnNjaworICogYW5kIHZlcmlmeV9wYXRoKCkuCisgKi8KK2ludCBpc19oZnNfZG90Z2l0KGNvbnN0IGNoYXIgKnBhdGgpOworCit0eXBlZGVmIGVudW0geworCUFMSUdOX0xFRlQsCisJQUxJR05fTUlERExFLAorCUFMSUdOX1JJR0hUCit9IGFsaWduX3R5cGU7CisKKy8qCisgKiBBbGlnbiB0aGUgc3RyaW5nIGdpdmVuIGFuZCBzdG9yZSBpdCBpbnRvIGEgc3RyYnVmIGFzIHBlciB0aGUKKyAqICdwb3NpdGlvbicgYW5kICd3aWR0aCcuIElmIHRoZSBnaXZlbiBzdHJpbmcgbGVuZ3RoIGlzIGxhcmdlciB0aGFuCisgKiAnd2lkdGgnIHRoYW4gdGhlbiB0aGUgaW5wdXQgc3RyaW5nIGlzIG5vdCB0cnVuY2F0ZWQgYW5kIG5vCisgKiBhbGlnbm1lbnQgaXMgZG9uZS4KKyAqLwordm9pZCBzdHJidWZfdXRmOF9hbGlnbihzdHJ1Y3Qgc3RyYnVmICpidWYsIGFsaWduX3R5cGUgcG9zaXRpb24sIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJICAgICAgIGNvbnN0IGNoYXIgKnMpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3ZhcmludC5jIGIvdmFyaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5YzQ5NwotLS0gL2Rldi9udWxsCisrKyBiL3ZhcmludC5jCkBAIC0wLDAgKzEsMzAgQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJ2YXJpbnQuaCIKKwordWludG1heF90IGRlY29kZV92YXJpbnQoY29uc3QgdW5zaWduZWQgY2hhciAqKmJ1ZnApCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmID0gKmJ1ZnA7CisJdW5zaWduZWQgY2hhciBjID0gKmJ1ZisrOworCXVpbnRtYXhfdCB2YWwgPSBjICYgMTI3OworCXdoaWxlIChjICYgMTI4KSB7CisJCXZhbCArPSAxOworCQlpZiAoIXZhbCB8fCBNU0IodmFsLCA3KSkKKwkJCXJldHVybiAwOyAvKiBvdmVyZmxvdyAqLworCQljID0gKmJ1ZisrOworCQl2YWwgPSAodmFsIDw8IDcpICsgKGMgJiAxMjcpOworCX0KKwkqYnVmcCA9IGJ1ZjsKKwlyZXR1cm4gdmFsOworfQorCitpbnQgZW5jb2RlX3ZhcmludCh1aW50bWF4X3QgdmFsdWUsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwl1bnNpZ25lZCBjaGFyIHZhcmludFsxNl07CisJdW5zaWduZWQgcG9zID0gc2l6ZW9mKHZhcmludCkgLSAxOworCXZhcmludFtwb3NdID0gdmFsdWUgJiAxMjc7CisJd2hpbGUgKHZhbHVlID4+PSA3KQorCQl2YXJpbnRbLS1wb3NdID0gMTI4IHwgKC0tdmFsdWUgJiAxMjcpOworCWlmIChidWYpCisJCW1lbWNweShidWYsIHZhcmludCArIHBvcywgc2l6ZW9mKHZhcmludCkgLSBwb3MpOworCXJldHVybiBzaXplb2YodmFyaW50KSAtIHBvczsKK30KZGlmZiAtLWdpdCBhL3ZhcmludC5oIGIvdmFyaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFjNDRkOQotLS0gL2Rldi9udWxsCisrKyBiL3ZhcmludC5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBWQVJJTlRfSAorI2RlZmluZSBWQVJJTlRfSAorCitleHRlcm4gaW50IGVuY29kZV92YXJpbnQodWludG1heF90LCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIHVpbnRtYXhfdCBkZWNvZGVfdmFyaW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKiopOworCisjZW5kaWYgLyogVkFSSU5UX0ggKi8KZGlmZiAtLWdpdCBhL3Zjcy1zdm4vTElDRU5TRSBiL3Zjcy1zdm4vTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjkxODU4Ci0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9MSUNFTlNFCkBAIC0wLDAgKzEsMzIgQEAKK0NvcHlyaWdodCAoQykgMjAxMCBEYXZpZCBCYXJyIDxkYXZpZC5iYXJyQGNvcmRlbHRhLmNvbT4uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitDb3B5cmlnaHQgKEMpIDIwMTAgSm9uYXRoYW4gTmllZGVyIDxqcm5pZWRlckBnbWFpbC5jb20+LgorCitDb3B5cmlnaHQgKEMpIDIwMDUgU3RlZmFuIEhlZ255LCBoeWRyb2dyYWZpeCBDb25zdWx0aW5nIEdtYkgsCitGcmFua2Z1cnQvTWFpbiwgR2VybWFueQorYW5kIG90aGVycywgc2VlIGh0dHA6Ly9zdm4yY2Muc2Fyb3Zhci5vcmcKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlKHMpLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgICB1bm1vZGlmaWVkIG90aGVyIHRoYW4gdGhlIGFsbG93YWJsZSBhZGRpdGlvbiBvZiBvbmUgb3IgbW9yZQorICAgY29weXJpZ2h0IG5vdGljZXMuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlKHMpLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKK0VWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS92Y3Mtc3ZuL2Zhc3RfZXhwb3J0LmMgYi92Y3Mtc3ZuL2Zhc3RfZXhwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQwZjJjMgotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vZmFzdF9leHBvcnQuYwpAQCAtMCwwICsxLDMzMCBAQAorLyoKKyAqIExpY2Vuc2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0Qtc3R5bGUgbGljZW5zZS4KKyAqIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAiZmFzdF9leHBvcnQuaCIKKyNpbmNsdWRlICJyZXBvX3RyZWUuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJzdm5kaWZmLmgiCisjaW5jbHVkZSAic2xpZGluZ193aW5kb3cuaCIKKyNpbmNsdWRlICJsaW5lX2J1ZmZlci5oIgorCisjZGVmaW5lIE1BWF9HSVRTVk5fTElORV9MRU4gNDA5NgorCitzdGF0aWMgdWludDMyX3QgZmlyc3RfY29tbWl0X2RvbmU7CitzdGF0aWMgc3RydWN0IGxpbmVfYnVmZmVyIHBvc3RpbWFnZSA9IExJTkVfQlVGRkVSX0lOSVQ7CitzdGF0aWMgc3RydWN0IGxpbmVfYnVmZmVyIHJlcG9ydF9idWZmZXIgPSBMSU5FX0JVRkZFUl9JTklUOworCisvKiBORUVEU1dPUks6IG1vdmUgdG8gZmFzdF9leHBvcnRfaW5pdCgpICovCitzdGF0aWMgaW50IGluaXRfcG9zdGltYWdlKHZvaWQpCit7CisJc3RhdGljIGludCBwb3N0aW1hZ2VfaW5pdGlhbGl6ZWQ7CisJaWYgKHBvc3RpbWFnZV9pbml0aWFsaXplZCkKKwkJcmV0dXJuIDA7CisJcG9zdGltYWdlX2luaXRpYWxpemVkID0gMTsKKwlyZXR1cm4gYnVmZmVyX3RtcGZpbGVfaW5pdCgmcG9zdGltYWdlKTsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9pbml0KGludCBmZCkKK3sKKwlmaXJzdF9jb21taXRfZG9uZSA9IDA7CisJaWYgKGJ1ZmZlcl9mZGluaXQoJnJlcG9ydF9idWZmZXIsIGZkKSkKKwkJZGllX2Vycm5vKCJjYW5ub3QgcmVhZCBmcm9tIGZpbGUgZGVzY3JpcHRvciAlZCIsIGZkKTsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9kZWluaXQodm9pZCkKK3sKKwlpZiAoYnVmZmVyX2RlaW5pdCgmcmVwb3J0X2J1ZmZlcikpCisJCWRpZV9lcnJubygiZXJyb3IgY2xvc2luZyBmYXN0LWltcG9ydCBmZWVkYmFjayBzdHJlYW0iKTsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9kZWxldGUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlwdXRjaGFyKCdEJyk7CisJcHV0Y2hhcignICcpOworCXF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgc3Rkb3V0LCAwKTsKKwlwdXRjaGFyKCdcbicpOworfQorCitzdGF0aWMgdm9pZCBmYXN0X2V4cG9ydF90cnVuY2F0ZShjb25zdCBjaGFyICpwYXRoLCB1aW50MzJfdCBtb2RlKQoreworCWZhc3RfZXhwb3J0X21vZGlmeShwYXRoLCBtb2RlLCAiaW5saW5lIik7CisJcHJpbnRmKCJkYXRhIDBcblxuIik7Cit9CisKK3ZvaWQgZmFzdF9leHBvcnRfbW9kaWZ5KGNvbnN0IGNoYXIgKnBhdGgsIHVpbnQzMl90IG1vZGUsIGNvbnN0IGNoYXIgKmRhdGFyZWYpCit7CisJLyogTW9kZSBtdXN0IGJlIDEwMDY0NCwgMTAwNzU1LCAxMjAwMDAsIG9yIDE2MDAwMC4gKi8KKwlpZiAoIWRhdGFyZWYpIHsKKwkJZmFzdF9leHBvcnRfdHJ1bmNhdGUocGF0aCwgbW9kZSk7CisJCXJldHVybjsKKwl9CisJcHJpbnRmKCJNICUwNiJQUklvMzIiICVzICIsIG1vZGUsIGRhdGFyZWYpOworCXF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgc3Rkb3V0LCAwKTsKKwlwdXRjaGFyKCdcbicpOworfQorCit2b2lkIGZhc3RfZXhwb3J0X2JlZ2luX25vdGUodWludDMyX3QgcmV2aXNpb24sIGNvbnN0IGNoYXIgKmF1dGhvciwKKwkJY29uc3QgY2hhciAqbG9nLCB1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCwgY29uc3QgY2hhciAqbm90ZV9yZWYpCit7CisJc3RhdGljIGludCBmaXJzdG5vdGUgPSAxOworCXNpemVfdCBsb2dsZW4gPSBzdHJsZW4obG9nKTsKKwlwcmludGYoImNvbW1pdCAlc1xuIiwgbm90ZV9yZWYpOworCXByaW50ZigiY29tbWl0dGVyICVzIDwlc0Alcz4gJWxkICswMDAwXG4iLCBhdXRob3IsIGF1dGhvciwgImxvY2FsIiwgdGltZXN0YW1wKTsKKwlwcmludGYoImRhdGEgJSJQUkl1TUFYIlxuIiwgKHVpbnRtYXhfdClsb2dsZW4pOworCWZ3cml0ZShsb2csIGxvZ2xlbiwgMSwgc3Rkb3V0KTsKKwlpZiAoZmlyc3Rub3RlKSB7CisJCWlmIChyZXZpc2lvbiA+IDEpCisJCQlwcmludGYoImZyb20gJXNeMCIsIG5vdGVfcmVmKTsKKwkJZmlyc3Rub3RlID0gMDsKKwl9CisJZnB1dGMoJ1xuJywgc3Rkb3V0KTsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9ub3RlKGNvbnN0IGNoYXIgKmNvbW1pdHRpc2gsIGNvbnN0IGNoYXIgKmRhdGFyZWYpCit7CisJcHJpbnRmKCJOICVzICVzXG4iLCBkYXRhcmVmLCBjb21taXR0aXNoKTsKK30KKworc3RhdGljIGNoYXIgZ2l0c3ZubGluZVtNQVhfR0lUU1ZOX0xJTkVfTEVOXTsKK3ZvaWQgZmFzdF9leHBvcnRfYmVnaW5fY29tbWl0KHVpbnQzMl90IHJldmlzaW9uLCBjb25zdCBjaGFyICphdXRob3IsCisJCQljb25zdCBzdHJ1Y3Qgc3RyYnVmICpsb2csCisJCQljb25zdCBjaGFyICp1dWlkLCBjb25zdCBjaGFyICp1cmwsCisJCQl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcCwgY29uc3QgY2hhciAqbG9jYWxfcmVmKQoreworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RyYnVmIGVtcHR5ID0gU1RSQlVGX0lOSVQ7CisJaWYgKCFsb2cpCisJCWxvZyA9ICZlbXB0eTsKKwlpZiAoKnV1aWQgJiYgKnVybCkgeworCQlzbnByaW50ZihnaXRzdm5saW5lLCBNQVhfR0lUU1ZOX0xJTkVfTEVOLAorCQkJCSJcblxuZ2l0LXN2bi1pZDogJXNAJSJQUkl1MzIiICVzXG4iLAorCQkJCSB1cmwsIHJldmlzaW9uLCB1dWlkKTsKKwl9IGVsc2UgeworCQkqZ2l0c3ZubGluZSA9ICdcMCc7CisJfQorCXByaW50ZigiY29tbWl0ICVzXG4iLCBsb2NhbF9yZWYpOworCXByaW50ZigibWFyayA6JSJQUkl1MzIiXG4iLCByZXZpc2lvbik7CisJcHJpbnRmKCJjb21taXR0ZXIgJXMgPCVzQCVzPiAlbGQgKzAwMDBcbiIsCisJCSAgICphdXRob3IgPyBhdXRob3IgOiAibm9ib2R5IiwKKwkJICAgKmF1dGhvciA/IGF1dGhvciA6ICJub2JvZHkiLAorCQkgICAqdXVpZCA/IHV1aWQgOiAibG9jYWwiLCB0aW1lc3RhbXApOworCXByaW50ZigiZGF0YSAlIlBSSXVNQVgiXG4iLAorCQkodWludG1heF90KSAobG9nLT5sZW4gKyBzdHJsZW4oZ2l0c3ZubGluZSkpKTsKKwlmd3JpdGUobG9nLT5idWYsIGxvZy0+bGVuLCAxLCBzdGRvdXQpOworCXByaW50ZigiJXNcbiIsIGdpdHN2bmxpbmUpOworCWlmICghZmlyc3RfY29tbWl0X2RvbmUpIHsKKwkJaWYgKHJldmlzaW9uID4gMSkKKwkJCXByaW50ZigiZnJvbSA6JSJQUkl1MzIiXG4iLCByZXZpc2lvbiAtIDEpOworCQlmaXJzdF9jb21taXRfZG9uZSA9IDE7CisJfQorfQorCit2b2lkIGZhc3RfZXhwb3J0X2VuZF9jb21taXQodWludDMyX3QgcmV2aXNpb24pCit7CisJcHJpbnRmKCJwcm9ncmVzcyBJbXBvcnRlZCBjb21taXQgJSJQUkl1MzIiLlxuXG4iLCByZXZpc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkIGxzX2Zyb21fcmV2KHVpbnQzMl90IHJldiwgY29uc3QgY2hhciAqcGF0aCkKK3sKKwkvKiBscyA6NSBwYXRoL3RvL29sZC9maWxlICovCisJcHJpbnRmKCJscyA6JSJQUkl1MzIiICIsIHJldik7CisJcXVvdGVfY19zdHlsZShwYXRoLCBOVUxMLCBzdGRvdXQsIDApOworCXB1dGNoYXIoJ1xuJyk7CisJZmZsdXNoKHN0ZG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIGxzX2Zyb21fYWN0aXZlX2NvbW1pdChjb25zdCBjaGFyICpwYXRoKQoreworCS8qIGxzICJwYXRoL3RvL2ZpbGUiICovCisJcHJpbnRmKCJscyBcIiIpOworCXF1b3RlX2Nfc3R5bGUocGF0aCwgTlVMTCwgc3Rkb3V0LCAxKTsKKwlwcmludGYoIlwiXG4iKTsKKwlmZmx1c2goc3Rkb3V0KTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmdldF9yZXNwb25zZV9saW5lKHZvaWQpCit7CisJY29uc3QgY2hhciAqbGluZSA9IGJ1ZmZlcl9yZWFkX2xpbmUoJnJlcG9ydF9idWZmZXIpOworCWlmIChsaW5lKQorCQlyZXR1cm4gbGluZTsKKwlpZiAoYnVmZmVyX2ZlcnJvcigmcmVwb3J0X2J1ZmZlcikpCisJCWRpZV9lcnJubygiZXJyb3IgcmVhZGluZyBmcm9tIGZhc3QtaW1wb3J0Iik7CisJZGllKCJ1bmV4cGVjdGVkIGVuZCBvZiBmYXN0LWltcG9ydCBmZWVkYmFjayIpOworfQorCitzdGF0aWMgdm9pZCBkaWVfc2hvcnRfcmVhZChzdHJ1Y3QgbGluZV9idWZmZXIgKmlucHV0KQoreworCWlmIChidWZmZXJfZmVycm9yKGlucHV0KSkKKwkJZGllX2Vycm5vKCJlcnJvciByZWFkaW5nIGR1bXAgZmlsZSIpOworCWRpZSgiaW52YWxpZCBkdW1wOiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfY2F0X3Jlc3BvbnNlX2xpbmUoY29uc3QgY2hhciAqaGVhZGVyLCBvZmZfdCAqbGVuKQoreworCXVpbnRtYXhfdCBuOworCWNvbnN0IGNoYXIgKnR5cGU7CisJY29uc3QgY2hhciAqZW5kOworCisJaWYgKGVuZHNfd2l0aChoZWFkZXIsICIgbWlzc2luZyIpKQorCQlyZXR1cm4gZXJyb3IoImNhdC1ibG9iIHJlcG9ydHMgbWlzc2luZyBibG9iOiAlcyIsIGhlYWRlcik7CisJdHlwZSA9IHN0cnN0cihoZWFkZXIsICIgYmxvYiAiKTsKKwlpZiAoIXR5cGUpCisJCXJldHVybiBlcnJvcigiY2F0LWJsb2IgaGVhZGVyIGhhcyB3cm9uZyBvYmplY3QgdHlwZTogJXMiLCBoZWFkZXIpOworCW4gPSBzdHJ0b3VtYXgodHlwZSArIHN0cmxlbigiIGJsb2IgIiksIChjaGFyICoqKSAmZW5kLCAxMCk7CisJaWYgKGVuZCA9PSB0eXBlICsgc3RybGVuKCIgYmxvYiAiKSkKKwkJcmV0dXJuIGVycm9yKCJjYXQtYmxvYiBoZWFkZXIgZG9lcyBub3QgY29udGFpbiBsZW5ndGg6ICVzIiwgaGVhZGVyKTsKKwlpZiAobWVtY2hyKHR5cGUgKyBzdHJsZW4oIiBibG9iICIpLCAnLScsIGVuZCAtIHR5cGUgLSBzdHJsZW4oIiBibG9iICIpKSkKKwkJcmV0dXJuIGVycm9yKCJjYXQtYmxvYiBoZWFkZXIgY29udGFpbnMgbmVnYXRpdmUgbGVuZ3RoOiAlcyIsIGhlYWRlcik7CisJaWYgKG4gPT0gVUlOVE1BWF9NQVggfHwgbiA+IG1heGltdW1fc2lnbmVkX3ZhbHVlX29mX3R5cGUob2ZmX3QpKQorCQlyZXR1cm4gZXJyb3IoImJsb2IgdG9vIGxhcmdlIGZvciBjdXJyZW50IGRlZmluaXRpb24gb2Ygb2ZmX3QiKTsKKwkqbGVuID0gbjsKKwlpZiAoKmVuZCkKKwkJcmV0dXJuIGVycm9yKCJjYXQtYmxvYiBoZWFkZXIgY29udGFpbnMgZ2FyYmFnZSBhZnRlciBsZW5ndGg6ICVzIiwgaGVhZGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfcHJlaW1hZ2Vfb3ZlcmZsb3cob2ZmX3QgYSwgb2ZmX3QgYikKK3sKKwlpZiAoc2lnbmVkX2FkZF9vdmVyZmxvd3MoYSwgYikpCisJCWRpZSgiYmxvYiB0b28gbGFyZ2UgZm9yIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBvZmZfdCIpOworfQorCitzdGF0aWMgbG9uZyBhcHBseV9kZWx0YShvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQsCisJCQljb25zdCBjaGFyICpvbGRfZGF0YSwgdWludDMyX3Qgb2xkX21vZGUpCit7CisJbG9uZyByZXQ7CisJc3RydWN0IHNsaWRpbmdfdmlldyBwcmVpbWFnZSA9IFNMSURJTkdfVklFV19JTklUKCZyZXBvcnRfYnVmZmVyLCAwKTsKKwlGSUxFICpvdXQ7CisKKwlpZiAoaW5pdF9wb3N0aW1hZ2UoKSB8fCAhKG91dCA9IGJ1ZmZlcl90bXBmaWxlX3Jld2luZCgmcG9zdGltYWdlKSkpCisJCWRpZSgiY2Fubm90IG9wZW4gdGVtcG9yYXJ5IGZpbGUgZm9yIGJsb2IgcmV0cmlldmFsIik7CisJaWYgKG9sZF9kYXRhKSB7CisJCWNvbnN0IGNoYXIgKnJlc3BvbnNlOworCQlwcmludGYoImNhdC1ibG9iICVzXG4iLCBvbGRfZGF0YSk7CisJCWZmbHVzaChzdGRvdXQpOworCQlyZXNwb25zZSA9IGdldF9yZXNwb25zZV9saW5lKCk7CisJCWlmIChwYXJzZV9jYXRfcmVzcG9uc2VfbGluZShyZXNwb25zZSwgJnByZWltYWdlLm1heF9vZmYpKQorCQkJZGllKCJpbnZhbGlkIGNhdC1ibG9iIHJlc3BvbnNlOiAlcyIsIHJlc3BvbnNlKTsKKwkJY2hlY2tfcHJlaW1hZ2Vfb3ZlcmZsb3cocHJlaW1hZ2UubWF4X29mZiwgMSk7CisJfQorCWlmIChvbGRfbW9kZSA9PSBSRVBPX01PREVfTE5LKSB7CisJCXN0cmJ1Zl9hZGRzdHIoJnByZWltYWdlLmJ1ZiwgImxpbmsgIik7CisJCWNoZWNrX3ByZWltYWdlX292ZXJmbG93KHByZWltYWdlLm1heF9vZmYsIHN0cmxlbigibGluayAiKSk7CisJCXByZWltYWdlLm1heF9vZmYgKz0gc3RybGVuKCJsaW5rICIpOworCQljaGVja19wcmVpbWFnZV9vdmVyZmxvdyhwcmVpbWFnZS5tYXhfb2ZmLCAxKTsKKwl9CisJaWYgKHN2bmRpZmYwX2FwcGx5KGlucHV0LCBsZW4sICZwcmVpbWFnZSwgb3V0KSkKKwkJZGllKCJjYW5ub3QgYXBwbHkgZGVsdGEiKTsKKwlpZiAob2xkX2RhdGEpIHsKKwkJLyogUmVhZCB0aGUgcmVtYWluZGVyIG9mIHByZWltYWdlIGFuZCB0cmFpbGluZyBuZXdsaW5lLiAqLworCQlhc3NlcnQoIXNpZ25lZF9hZGRfb3ZlcmZsb3dzKHByZWltYWdlLm1heF9vZmYsIDEpKTsKKwkJcHJlaW1hZ2UubWF4X29mZisrOwkvKiByb29tIGZvciBuZXdsaW5lICovCisJCWlmIChtb3ZlX3dpbmRvdygmcHJlaW1hZ2UsIHByZWltYWdlLm1heF9vZmYgLSAxLCAxKSkKKwkJCWRpZSgiY2Fubm90IHNlZWsgdG8gZW5kIG9mIGlucHV0Iik7CisJCWlmIChwcmVpbWFnZS5idWYuYnVmWzBdICE9ICdcbicpCisJCQlkaWUoIm1pc3NpbmcgbmV3bGluZSBhZnRlciBjYXQtYmxvYiByZXNwb25zZSIpOworCX0KKwlyZXQgPSBidWZmZXJfdG1wZmlsZV9wcmVwYXJlX3RvX3JlYWQoJnBvc3RpbWFnZSk7CisJaWYgKHJldCA8IDApCisJCWRpZSgiY2Fubm90IHJlYWQgdGVtcG9yYXJ5IGZpbGUgZm9yIGJsb2IgcmV0cmlldmFsIik7CisJc3RyYnVmX3JlbGVhc2UoJnByZWltYWdlLmJ1Zik7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBmYXN0X2V4cG9ydF9idWZfdG9fZGF0YShjb25zdCBzdHJ1Y3Qgc3RyYnVmICpkYXRhKQoreworCXByaW50ZigiZGF0YSAlIlBSSXVNQVgiXG4iLCAodWludG1heF90KWRhdGEtPmxlbik7CisJZndyaXRlKGRhdGEtPmJ1ZiwgZGF0YS0+bGVuLCAxLCBzdGRvdXQpOworCWZwdXRjKCdcbicsIHN0ZG91dCk7Cit9CisKK3ZvaWQgZmFzdF9leHBvcnRfZGF0YSh1aW50MzJfdCBtb2RlLCBvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpCit7CisJYXNzZXJ0KGxlbiA+PSAwKTsKKwlpZiAobW9kZSA9PSBSRVBPX01PREVfTE5LKSB7CisJCS8qIHN2biBzeW1saW5rIGJsb2JzIHN0YXJ0IHdpdGggImxpbmsgIiAqLworCQlpZiAobGVuIDwgNSkKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBzeW1saW5rIHRvbyBzaG9ydCBmb3IgXCJsaW5rXCIgcHJlZml4Iik7CisJCWxlbiAtPSA1OworCQlpZiAoYnVmZmVyX3NraXBfYnl0ZXMoaW5wdXQsIDUpICE9IDUpCisJCQlkaWVfc2hvcnRfcmVhZChpbnB1dCk7CisJfQorCXByaW50ZigiZGF0YSAlIlBSSXVNQVgiXG4iLCAodWludG1heF90KSBsZW4pOworCWlmIChidWZmZXJfY29weV9ieXRlcyhpbnB1dCwgbGVuKSAhPSBsZW4pCisJCWRpZV9zaG9ydF9yZWFkKGlucHV0KTsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2xzX3Jlc3BvbnNlKGNvbnN0IGNoYXIgKnJlc3BvbnNlLCB1aW50MzJfdCAqbW9kZSwKKwkJCQkJc3RydWN0IHN0cmJ1ZiAqZGF0YXJlZikKK3sKKwljb25zdCBjaGFyICp0YWI7CisJY29uc3QgY2hhciAqcmVzcG9uc2VfZW5kOworCisJYXNzZXJ0KHJlc3BvbnNlKTsKKwlyZXNwb25zZV9lbmQgPSByZXNwb25zZSArIHN0cmxlbihyZXNwb25zZSk7CisKKwlpZiAoKnJlc3BvbnNlID09ICdtJykgewkvKiBNaXNzaW5nLiAqLworCQllcnJubyA9IEVOT0VOVDsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIE1vZGUuICovCisJaWYgKHJlc3BvbnNlX2VuZCAtIHJlc3BvbnNlIDwgKHNpZ25lZCkgc3RybGVuKCIxMDA2NDQiKSB8fAorCSAgICByZXNwb25zZVtzdHJsZW4oIjEwMDY0NCIpXSAhPSAnICcpCisJCWRpZSgiaW52YWxpZCBscyByZXNwb25zZTogbWlzc2luZyBtb2RlOiAlcyIsIHJlc3BvbnNlKTsKKwkqbW9kZSA9IDA7CisJZm9yICg7ICpyZXNwb25zZSAhPSAnICc7IHJlc3BvbnNlKyspIHsKKwkJY2hhciBjaCA9ICpyZXNwb25zZTsKKwkJaWYgKGNoIDwgJzAnIHx8IGNoID4gJzcnKQorCQkJZGllKCJpbnZhbGlkIGxzIHJlc3BvbnNlOiBtb2RlIGlzIG5vdCBvY3RhbDogJXMiLCByZXNwb25zZSk7CisJCSptb2RlICo9IDg7CisJCSptb2RlICs9IGNoIC0gJzAnOworCX0KKworCS8qICcgYmxvYiAnIG9yICcgdHJlZSAnICovCisJaWYgKHJlc3BvbnNlX2VuZCAtIHJlc3BvbnNlIDwgKHNpZ25lZCkgc3RybGVuKCIgYmxvYiAiKSB8fAorCSAgICAocmVzcG9uc2VbMV0gIT0gJ2InICYmIHJlc3BvbnNlWzFdICE9ICd0JykpCisJCWRpZSgidW5leHBlY3RlZCBscyByZXNwb25zZTogbm90IGEgdHJlZSBvciBibG9iOiAlcyIsIHJlc3BvbnNlKTsKKwlyZXNwb25zZSArPSBzdHJsZW4oIiBibG9iICIpOworCisJLyogRGF0YXJlZi4gKi8KKwl0YWIgPSBtZW1jaHIocmVzcG9uc2UsICdcdCcsIHJlc3BvbnNlX2VuZCAtIHJlc3BvbnNlKTsKKwlpZiAoIXRhYikKKwkJZGllKCJpbnZhbGlkIGxzIHJlc3BvbnNlOiBtaXNzaW5nIHRhYjogJXMiLCByZXNwb25zZSk7CisJc3RyYnVmX2FkZChkYXRhcmVmLCByZXNwb25zZSwgdGFiIC0gcmVzcG9uc2UpOworCXJldHVybiAwOworfQorCitpbnQgZmFzdF9leHBvcnRfbHNfcmV2KHVpbnQzMl90IHJldiwgY29uc3QgY2hhciAqcGF0aCwKKwkJCQl1aW50MzJfdCAqbW9kZSwgc3RydWN0IHN0cmJ1ZiAqZGF0YXJlZikKK3sKKwlsc19mcm9tX3JldihyZXYsIHBhdGgpOworCXJldHVybiBwYXJzZV9sc19yZXNwb25zZShnZXRfcmVzcG9uc2VfbGluZSgpLCBtb2RlLCBkYXRhcmVmKTsKK30KKworaW50IGZhc3RfZXhwb3J0X2xzKGNvbnN0IGNoYXIgKnBhdGgsIHVpbnQzMl90ICptb2RlLCBzdHJ1Y3Qgc3RyYnVmICpkYXRhcmVmKQoreworCWxzX2Zyb21fYWN0aXZlX2NvbW1pdChwYXRoKTsKKwlyZXR1cm4gcGFyc2VfbHNfcmVzcG9uc2UoZ2V0X3Jlc3BvbnNlX2xpbmUoKSwgbW9kZSwgZGF0YXJlZik7Cit9CisKK3ZvaWQgZmFzdF9leHBvcnRfYmxvYl9kZWx0YSh1aW50MzJfdCBtb2RlLAorCQkJCXVpbnQzMl90IG9sZF9tb2RlLCBjb25zdCBjaGFyICpvbGRfZGF0YSwKKwkJCQlvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpCit7CisJbG9uZyBwb3N0aW1hZ2VfbGVuOworCisJYXNzZXJ0KGxlbiA+PSAwKTsKKwlwb3N0aW1hZ2VfbGVuID0gYXBwbHlfZGVsdGEobGVuLCBpbnB1dCwgb2xkX2RhdGEsIG9sZF9tb2RlKTsKKwlpZiAobW9kZSA9PSBSRVBPX01PREVfTE5LKSB7CisJCWJ1ZmZlcl9za2lwX2J5dGVzKCZwb3N0aW1hZ2UsIHN0cmxlbigibGluayAiKSk7CisJCXBvc3RpbWFnZV9sZW4gLT0gc3RybGVuKCJsaW5rICIpOworCX0KKwlwcmludGYoImRhdGEgJWxkXG4iLCBwb3N0aW1hZ2VfbGVuKTsKKwlidWZmZXJfY29weV9ieXRlcygmcG9zdGltYWdlLCBwb3N0aW1hZ2VfbGVuKTsKKwlmcHV0YygnXG4nLCBzdGRvdXQpOworfQpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9mYXN0X2V4cG9ydC5oIGIvdmNzLXN2bi9mYXN0X2V4cG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjVhZGIKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL2Zhc3RfZXhwb3J0LmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBGQVNUX0VYUE9SVF9IXworI2RlZmluZSBGQVNUX0VYUE9SVF9IXworCitzdHJ1Y3Qgc3RyYnVmOworc3RydWN0IGxpbmVfYnVmZmVyOworCit2b2lkIGZhc3RfZXhwb3J0X2luaXQoaW50IGZkKTsKK3ZvaWQgZmFzdF9leHBvcnRfZGVpbml0KHZvaWQpOworCit2b2lkIGZhc3RfZXhwb3J0X2RlbGV0ZShjb25zdCBjaGFyICpwYXRoKTsKK3ZvaWQgZmFzdF9leHBvcnRfbW9kaWZ5KGNvbnN0IGNoYXIgKnBhdGgsIHVpbnQzMl90IG1vZGUsIGNvbnN0IGNoYXIgKmRhdGFyZWYpOwordm9pZCBmYXN0X2V4cG9ydF9ub3RlKGNvbnN0IGNoYXIgKmNvbW1pdHRpc2gsIGNvbnN0IGNoYXIgKmRhdGFyZWYpOwordm9pZCBmYXN0X2V4cG9ydF9iZWdpbl9ub3RlKHVpbnQzMl90IHJldmlzaW9uLCBjb25zdCBjaGFyICphdXRob3IsCisJCWNvbnN0IGNoYXIgKmxvZywgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAsIGNvbnN0IGNoYXIgKm5vdGVfcmVmKTsKK3ZvaWQgZmFzdF9leHBvcnRfYmVnaW5fY29tbWl0KHVpbnQzMl90IHJldmlzaW9uLCBjb25zdCBjaGFyICphdXRob3IsCisJCQljb25zdCBzdHJ1Y3Qgc3RyYnVmICpsb2csIGNvbnN0IGNoYXIgKnV1aWQsY29uc3QgY2hhciAqdXJsLAorCQkJdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAsIGNvbnN0IGNoYXIgKmxvY2FsX3JlZik7Cit2b2lkIGZhc3RfZXhwb3J0X2VuZF9jb21taXQodWludDMyX3QgcmV2aXNpb24pOwordm9pZCBmYXN0X2V4cG9ydF9kYXRhKHVpbnQzMl90IG1vZGUsIG9mZl90IGxlbiwgc3RydWN0IGxpbmVfYnVmZmVyICppbnB1dCk7Cit2b2lkIGZhc3RfZXhwb3J0X2J1Zl90b19kYXRhKGNvbnN0IHN0cnVjdCBzdHJidWYgKmRhdGEpOwordm9pZCBmYXN0X2V4cG9ydF9ibG9iX2RlbHRhKHVpbnQzMl90IG1vZGUsCisJCQl1aW50MzJfdCBvbGRfbW9kZSwgY29uc3QgY2hhciAqb2xkX2RhdGEsCisJCQlvZmZfdCBsZW4sIHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpOworCisvKiBJZiB0aGVyZSBpcyBubyBzdWNoIGZpbGUgYXQgdGhhdCByZXYsIHJldHVybnMgLTEsIGVycm5vID09IEVOT0VOVC4gKi8KK2ludCBmYXN0X2V4cG9ydF9sc19yZXYodWludDMyX3QgcmV2LCBjb25zdCBjaGFyICpwYXRoLAorCQkJdWludDMyX3QgKm1vZGVfb3V0LCBzdHJ1Y3Qgc3RyYnVmICpkYXRhcmVmX291dCk7CitpbnQgZmFzdF9leHBvcnRfbHMoY29uc3QgY2hhciAqcGF0aCwKKwkJCXVpbnQzMl90ICptb2RlX291dCwgc3RydWN0IHN0cmJ1ZiAqZGF0YXJlZl9vdXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Zjcy1zdm4vbGluZV9idWZmZXIuYyBiL3Zjcy1zdm4vbGluZV9idWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2NjMWNlCi0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9saW5lX2J1ZmZlci5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogTGljZW5zZWQgdW5kZXIgYSB0d28tY2xhdXNlIEJTRC1zdHlsZSBsaWNlbnNlLgorICogU2VlIExJQ0VOU0UgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImdpdC1jb21wYXQtdXRpbC5oIgorI2luY2x1ZGUgImxpbmVfYnVmZmVyLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKKyNkZWZpbmUgQ09QWV9CVUZGRVJfTEVOIDQwOTYKKworaW50IGJ1ZmZlcl9pbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlidWYtPmluZmlsZSA9IGZpbGVuYW1lID8gZm9wZW4oZmlsZW5hbWUsICJyIikgOiBzdGRpbjsKKwlpZiAoIWJ1Zi0+aW5maWxlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBidWZmZXJfZmRpbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBpbnQgZmQpCit7CisJYnVmLT5pbmZpbGUgPSBmZG9wZW4oZmQsICJyIik7CisJaWYgKCFidWYtPmluZmlsZSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitpbnQgYnVmZmVyX3RtcGZpbGVfaW5pdChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZikKK3sKKwlidWYtPmluZmlsZSA9IHRtcGZpbGUoKTsKKwlpZiAoIWJ1Zi0+aW5maWxlKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBidWZmZXJfZGVpbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKQoreworCWludCBlcnI7CisJaWYgKGJ1Zi0+aW5maWxlID09IHN0ZGluKQorCQlyZXR1cm4gZmVycm9yKGJ1Zi0+aW5maWxlKTsKKwllcnIgPSBmZXJyb3IoYnVmLT5pbmZpbGUpOworCWVyciB8PSBmY2xvc2UoYnVmLT5pbmZpbGUpOworCXJldHVybiBlcnI7Cit9CisKK0ZJTEUgKmJ1ZmZlcl90bXBmaWxlX3Jld2luZChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZikKK3sKKwlyZXdpbmQoYnVmLT5pbmZpbGUpOworCXJldHVybiBidWYtPmluZmlsZTsKK30KKworbG9uZyBidWZmZXJfdG1wZmlsZV9wcmVwYXJlX3RvX3JlYWQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJbG9uZyBwb3MgPSBmdGVsbChidWYtPmluZmlsZSk7CisJaWYgKHBvcyA8IDApCisJCXJldHVybiBlcnJvcigiZnRlbGwgZXJyb3I6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwlpZiAoZnNlZWsoYnVmLT5pbmZpbGUsIDAsIFNFRUtfU0VUKSkKKwkJcmV0dXJuIGVycm9yKCJzZWVrIGVycm9yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuIHBvczsKK30KKworaW50IGJ1ZmZlcl9mZXJyb3Ioc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJcmV0dXJuIGZlcnJvcihidWYtPmluZmlsZSk7Cit9CisKK2ludCBidWZmZXJfcmVhZF9jaGFyKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKQoreworCXJldHVybiBmZ2V0YyhidWYtPmluZmlsZSk7Cit9CisKKy8qIFJlYWQgYSBsaW5lIHdpdGhvdXQgdHJhaWxpbmcgbmV3bGluZS4gKi8KK2NoYXIgKmJ1ZmZlcl9yZWFkX2xpbmUoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpCit7CisJY2hhciAqZW5kOworCWlmICghZmdldHMoYnVmLT5saW5lX2J1ZmZlciwgc2l6ZW9mKGJ1Zi0+bGluZV9idWZmZXIpLCBidWYtPmluZmlsZSkpCisJCS8qIEVycm9yIG9yIGRhdGEgZXhoYXVzdGVkLiAqLworCQlyZXR1cm4gTlVMTDsKKwllbmQgPSBidWYtPmxpbmVfYnVmZmVyICsgc3RybGVuKGJ1Zi0+bGluZV9idWZmZXIpOworCWlmIChlbmRbLTFdID09ICdcbicpCisJCWVuZFstMV0gPSAnXDAnOworCWVsc2UgaWYgKGZlb2YoYnVmLT5pbmZpbGUpKQorCQk7IC8qIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUuICBUaGF0J3MgZmluZS4gKi8KKwllbHNlCisJCS8qCisJCSAqIExpbmUgd2FzIHRvbyBsb25nLgorCQkgKiBUaGVyZSBpcyBwcm9iYWJseSBhIHNhbmVyIHdheSB0byBkZWFsIHdpdGggdGhpcywKKwkJICogYnV0IGZvciBub3cgbGV0J3MgcmV0dXJuIGFuIGVycm9yLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGJ1Zi0+bGluZV9idWZmZXI7Cit9CisKK3NpemVfdCBidWZmZXJfcmVhZF9iaW5hcnkoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsCisJCQkJc3RydWN0IHN0cmJ1ZiAqc2IsIHNpemVfdCBzaXplKQoreworCXJldHVybiBzdHJidWZfZnJlYWQoc2IsIHNpemUsIGJ1Zi0+aW5maWxlKTsKK30KKworb2ZmX3QgYnVmZmVyX2NvcHlfYnl0ZXMoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsIG9mZl90IG5ieXRlcykKK3sKKwljaGFyIGJ5dGVfYnVmZmVyW0NPUFlfQlVGRkVSX0xFTl07CisJb2ZmX3QgZG9uZSA9IDA7CisJd2hpbGUgKGRvbmUgPCBuYnl0ZXMgJiYgIWZlb2YoYnVmLT5pbmZpbGUpICYmICFmZXJyb3IoYnVmLT5pbmZpbGUpKSB7CisJCW9mZl90IGxlbiA9IG5ieXRlcyAtIGRvbmU7CisJCXNpemVfdCBpbiA9IGxlbiA8IENPUFlfQlVGRkVSX0xFTiA/IGxlbiA6IENPUFlfQlVGRkVSX0xFTjsKKwkJaW4gPSBmcmVhZChieXRlX2J1ZmZlciwgMSwgaW4sIGJ1Zi0+aW5maWxlKTsKKwkJZG9uZSArPSBpbjsKKwkJZndyaXRlKGJ5dGVfYnVmZmVyLCAxLCBpbiwgc3Rkb3V0KTsKKwkJaWYgKGZlcnJvcihzdGRvdXQpKQorCQkJcmV0dXJuIGRvbmUgKyBidWZmZXJfc2tpcF9ieXRlcyhidWYsIG5ieXRlcyAtIGRvbmUpOworCX0KKwlyZXR1cm4gZG9uZTsKK30KKworb2ZmX3QgYnVmZmVyX3NraXBfYnl0ZXMoc3RydWN0IGxpbmVfYnVmZmVyICpidWYsIG9mZl90IG5ieXRlcykKK3sKKwljaGFyIGJ5dGVfYnVmZmVyW0NPUFlfQlVGRkVSX0xFTl07CisJb2ZmX3QgZG9uZSA9IDA7CisJd2hpbGUgKGRvbmUgPCBuYnl0ZXMgJiYgIWZlb2YoYnVmLT5pbmZpbGUpICYmICFmZXJyb3IoYnVmLT5pbmZpbGUpKSB7CisJCW9mZl90IGxlbiA9IG5ieXRlcyAtIGRvbmU7CisJCXNpemVfdCBpbiA9IGxlbiA8IENPUFlfQlVGRkVSX0xFTiA/IGxlbiA6IENPUFlfQlVGRkVSX0xFTjsKKwkJZG9uZSArPSBmcmVhZChieXRlX2J1ZmZlciwgMSwgaW4sIGJ1Zi0+aW5maWxlKTsKKwl9CisJcmV0dXJuIGRvbmU7Cit9CmRpZmYgLS1naXQgYS92Y3Mtc3ZuL2xpbmVfYnVmZmVyLmggYi92Y3Mtc3ZuL2xpbmVfYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUyM2I0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vbGluZV9idWZmZXIuaApAQCAtMCwwICsxLDMwIEBACisjaWZuZGVmIExJTkVfQlVGRkVSX0hfCisjZGVmaW5lIExJTkVfQlVGRkVSX0hfCisKKyNpbmNsdWRlICJzdHJidWYuaCIKKworI2RlZmluZSBMSU5FX0JVRkZFUl9MRU4gMTAwMDAKKworc3RydWN0IGxpbmVfYnVmZmVyIHsKKwljaGFyIGxpbmVfYnVmZmVyW0xJTkVfQlVGRkVSX0xFTl07CisJRklMRSAqaW5maWxlOworfTsKKyNkZWZpbmUgTElORV9CVUZGRVJfSU5JVCB7ICIiLCBOVUxMIH0KKworaW50IGJ1ZmZlcl9pbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7CitpbnQgYnVmZmVyX2ZkaW5pdChzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1ZiwgaW50IGZkKTsKK2ludCBidWZmZXJfZGVpbml0KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKTsKKworaW50IGJ1ZmZlcl90bXBmaWxlX2luaXQoc3RydWN0IGxpbmVfYnVmZmVyICpidWYpOworRklMRSAqYnVmZmVyX3RtcGZpbGVfcmV3aW5kKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKTsJLyogcHJlcGFyZSB0byB3cml0ZS4gKi8KK2xvbmcgYnVmZmVyX3RtcGZpbGVfcHJlcGFyZV90b19yZWFkKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmKTsKKworaW50IGJ1ZmZlcl9mZXJyb3Ioc3RydWN0IGxpbmVfYnVmZmVyICpidWYpOworY2hhciAqYnVmZmVyX3JlYWRfbGluZShzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Zik7CitpbnQgYnVmZmVyX3JlYWRfY2hhcihzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Zik7CitzaXplX3QgYnVmZmVyX3JlYWRfYmluYXJ5KHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBzdHJ1Y3Qgc3RyYnVmICpzYiwgc2l6ZV90IGxlbik7CisvKiBSZXR1cm5zIG51bWJlciBvZiBieXRlcyByZWFkIChub3QgbmVjZXNzYXJpbHkgd3JpdHRlbikuICovCitvZmZfdCBidWZmZXJfY29weV9ieXRlcyhzdHJ1Y3QgbGluZV9idWZmZXIgKmJ1Ziwgb2ZmX3QgbGVuKTsKK29mZl90IGJ1ZmZlcl9za2lwX2J5dGVzKHN0cnVjdCBsaW5lX2J1ZmZlciAqYnVmLCBvZmZfdCBsZW4pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Zjcy1zdm4vbGluZV9idWZmZXIudHh0IGIvdmNzLXN2bi9saW5lX2J1ZmZlci50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxMzllYgotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vbGluZV9idWZmZXIudHh0CkBAIC0wLDAgKzEsNzcgQEAKK2xpbmVfYnVmZmVyIEFQSQorPT09PT09PT09PT09PT09CisKK1RoZSBsaW5lX2J1ZmZlciBsaWJyYXJ5IHByb3ZpZGVzIGEgY29udmVuaWVudCBpbnRlcmZhY2UgZm9yCittb3N0bHktbGluZS1vcmllbnRlZCBpbnB1dC4KKworRWFjaCBsaW5lIGlzIG5vdCBwZXJtaXR0ZWQgdG8gZXhjZWVkIDEwMDAwIGJ5dGVzLiAgVGhlIHByb3ZpZGVkCitmdW5jdGlvbnMgYXJlIG5vdCB0aHJlYWQtc2FmZSBvciBhc3luYy1zaWduYWwtc2FmZSwgYW5kIGxpa2UKK2BmZ2V0cygpYCwgdGhleSBnZW5lcmFsbHkgZG8gbm90IGZ1bmN0aW9uIGNvcnJlY3RseSBpZiBpbnRlcnJ1cHRlZAorYnkgYSBzaWduYWwgd2l0aG91dCBTQV9SRVNUQVJUIHNldC4KKworQ2FsbGluZyBzZXF1ZW5jZQorLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY2FsbGluZyBwcm9ncmFtOgorCisgLSBpbml0aWFsaXplcyBhIGBzdHJ1Y3QgbGluZV9idWZmZXJgIHRvIExJTkVfQlVGRkVSX0lOSVQKKyAtIHNwZWNpZmllcyBhIGZpbGUgdG8gcmVhZCB3aXRoIGBidWZmZXJfaW5pdGAKKyAtIHByb2Nlc3NlcyBpbnB1dCB3aXRoIGBidWZmZXJfcmVhZF9saW5lYCwgYGJ1ZmZlcl9za2lwX2J5dGVzYCwKKyAgIGFuZCBgYnVmZmVyX2NvcHlfYnl0ZXNgCisgLSBjbG9zZXMgdGhlIGZpbGUgd2l0aCBgYnVmZmVyX2RlaW5pdGAsIHBlcmhhcHMgdG8gc3RhcnQgb3ZlciBhbmQKKyAgIHJlYWQgYW5vdGhlciBmaWxlLgorCitXaGVuIGZpbmlzaGVkLCB0aGUgY2FsbGVyIGNhbiB1c2UgYGJ1ZmZlcl9yZXNldGAgdG8gZGVhbGxvY2F0ZQorcmVzb3VyY2VzLgorCitVc2luZyB0ZW1wb3JhcnkgZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUZW1wb3JhcnkgZmlsZXMgcHJvdmlkZSBhIHBsYWNlIHRvIHN0b3JlIGRhdGEgdGhhdCBzaG91bGQgbm90IG91dGxpdmUKK3RoZSBjYWxsaW5nIHByb2dyYW0uICBBIHByb2dyYW0KKworIC0gaW5pdGlhbGl6ZXMgYSBgc3RydWN0IGxpbmVfYnVmZmVyYCB0byBMSU5FX0JVRkZFUl9JTklUCisgLSByZXF1ZXN0cyBhIHRlbXBvcmFyeSBmaWxlIHdpdGggYGJ1ZmZlcl90bXBmaWxlX2luaXRgCisgLSBhY3F1aXJlcyBhbiBvdXRwdXQgaGFuZGxlIGJ5IGNhbGxpbmcgYGJ1ZmZlcl90bXBmaWxlX3Jld2luZGAKKyAtIHVzZXMgc3RhbmRhcmQgSS9PIGZ1bmN0aW9ucyBsaWtlIGBmcHJpbnRmYCBhbmQgYGZ3cml0ZWAgdG8gZmlsbAorICAgdGhlIHRlbXBvcmFyeSBmaWxlCisgLSBkZWNsYXJlcyB3cml0aW5nIGlzIG92ZXIgd2l0aCBgYnVmZmVyX3RtcGZpbGVfcHJlcGFyZV90b19yZWFkYAorIC0gY2FuIHJlLXJlYWQgd2hhdCB3YXMgd3JpdHRlbiB3aXRoIGBidWZmZXJfcmVhZF9saW5lYCwKKyAgIGBidWZmZXJfY29weV9ieXRlc2AsIGFuZCBzbyBvbgorIC0gY2FuIHJldXNlIHRoZSB0ZW1wb3JhcnkgZmlsZSBieSBjYWxsaW5nIGBidWZmZXJfdG1wZmlsZV9yZXdpbmRgCisgICBhZ2FpbgorIC0gcmVtb3ZlcyB0aGUgdGVtcG9yYXJ5IGZpbGUgd2l0aCBgYnVmZmVyX2RlaW5pdGAsIHBlcmhhcHMgdG8KKyAgIHJldXNlIHRoZSBsaW5lX2J1ZmZlciBmb3Igc29tZSBvdGhlciBmaWxlLgorCitXaGVuIGZpbmlzaGVkLCB0aGUgY2FsbGluZyBwcm9ncmFtIGNhbiB1c2UgYGJ1ZmZlcl9yZXNldGAgdG8gZGVhbGxvY2F0ZQorcmVzb3VyY2VzLgorCitGdW5jdGlvbnMKKy0tLS0tLS0tLQorCitgYnVmZmVyX2luaXRgLCBgYnVmZmVyX2ZkaW5pdGA6OgorCU9wZW4gdGhlIG5hbWVkIGZpbGUgb3IgZmlsZSBkZXNjcmlwdG9yIGZvciBpbnB1dC4KKwlidWZmZXJfaW5pdChidWYsIE5VTEwpIHByZXBhcmVzIHRvIHJlYWQgZnJvbSBzdGRpbi4KKwlPbiBmYWlsdXJlLCByZXR1cm5zIC0xICh3aXRoIGVycm5vIGluZGljYXRpbmcgdGhlIG5hdHVyZQorCW9mIHRoZSBmYWlsdXJlKS4KKworYGJ1ZmZlcl9kZWluaXRgOjoKKwlTdG9wIHJlYWRpbmcgZnJvbSB0aGUgY3VycmVudCBmaWxlIChjbG9zaW5nIGl0IHVubGVzcworCWl0IHdhcyBzdGRpbikuICBSZXR1cm5zIG5vbnplcm8gaWYgYGZjbG9zZWAgZmFpbHMgb3IKKwl0aGUgZXJyb3IgaW5kaWNhdG9yIHdhcyBzZXQuCisKK2BidWZmZXJfcmVhZF9saW5lYDo6CisJUmVhZCBhIGxpbmUgYW5kIHN0cmlwIG9mZiB0aGUgdHJhaWxpbmcgbmV3bGluZS4KKwlPbiBmYWlsdXJlIG9yIGVuZCBvZiBmaWxlLCByZXR1cm5zIE5VTEwuCisKK2BidWZmZXJfY29weV9ieXRlc2A6OgorCVJlYWQgYGxlbmAgYnl0ZXMgb2YgaW5wdXQgYW5kIGR1bXAgdGhlbSB0byB0aGUgc3RhbmRhcmQgb3V0cHV0CisJc3RyZWFtLiAgUmV0dXJucyBlYXJseSBmb3IgZXJyb3Igb3IgZW5kIG9mIGZpbGUuCisKK2BidWZmZXJfc2tpcF9ieXRlc2A6OgorCURpc2NhcmRzIGBsZW5gIGJ5dGVzIGZyb20gdGhlIGlucHV0IHN0cmVhbSAoc3RvcHBpbmcgZWFybHkKKwlpZiBuZWNlc3NhcnkgYmVjYXVzZSBvZiBhbiBlcnJvciBvciBlb2YpLiAgUmV0dXJuIHZhbHVlIGlzCisJdGhlIG51bWJlciBvZiBieXRlcyBzdWNjZXNzZnVsbHkgcmVhZC4KKworYGJ1ZmZlcl9yZXNldGA6OgorCURlYWxsb2NhdGVzIG5vbi1zdGF0aWMgYnVmZmVycy4KZGlmZiAtLWdpdCBhL3Zjcy1zdm4vcmVwb190cmVlLmMgYi92Y3Mtc3ZuL3JlcG9fdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZDI3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL3JlcG9fdHJlZS5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBMaWNlbnNlZCB1bmRlciBhIHR3by1jbGF1c2UgQlNELXN0eWxlIGxpY2Vuc2UuCisgKiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisjaW5jbHVkZSAicmVwb190cmVlLmgiCisjaW5jbHVkZSAiZmFzdF9leHBvcnQuaCIKKworY29uc3QgY2hhciAqcmVwb19yZWFkX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgdWludDMyX3QgKm1vZGVfb3V0KQoreworCWludCBlcnI7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJmJ1Zik7CisJZXJyID0gZmFzdF9leHBvcnRfbHMocGF0aCwgbW9kZV9vdXQsICZidWYpOworCWlmIChlcnIpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCWRpZV9lcnJubygiQlVHOiB1bmV4cGVjdGVkIGZhc3RfZXhwb3J0X2xzIGVycm9yIik7CisJCS8qIFRyZWF0IG1pc3NpbmcgcGF0aHMgYXMgZGlyZWN0b3JpZXMuICovCisJCSptb2RlX291dCA9IFJFUE9fTU9ERV9ESVI7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gYnVmLmJ1ZjsKK30KKwordm9pZCByZXBvX2NvcHkodWludDMyX3QgcmV2aXNpb24sIGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0KQoreworCWludCBlcnI7CisJdWludDMyX3QgbW9kZTsKKwlzdGF0aWMgc3RydWN0IHN0cmJ1ZiBkYXRhID0gU1RSQlVGX0lOSVQ7CisKKwlzdHJidWZfcmVzZXQoJmRhdGEpOworCWVyciA9IGZhc3RfZXhwb3J0X2xzX3JldihyZXZpc2lvbiwgc3JjLCAmbW9kZSwgJmRhdGEpOworCWlmIChlcnIpIHsKKwkJaWYgKGVycm5vICE9IEVOT0VOVCkKKwkJCWRpZV9lcnJubygiQlVHOiB1bmV4cGVjdGVkIGZhc3RfZXhwb3J0X2xzX3JldiBlcnJvciIpOworCQlmYXN0X2V4cG9ydF9kZWxldGUoZHN0KTsKKwkJcmV0dXJuOworCX0KKwlmYXN0X2V4cG9ydF9tb2RpZnkoZHN0LCBtb2RlLCBkYXRhLmJ1Zik7Cit9CisKK3ZvaWQgcmVwb19kZWxldGUoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlmYXN0X2V4cG9ydF9kZWxldGUocGF0aCk7Cit9CmRpZmYgLS1naXQgYS92Y3Mtc3ZuL3JlcG9fdHJlZS5oIGIvdmNzLXN2bi9yZXBvX3RyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODljNmEzCi0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9yZXBvX3RyZWUuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIFJFUE9fVFJFRV9IXworI2RlZmluZSBSRVBPX1RSRUVfSF8KKworc3RydWN0IHN0cmJ1ZjsKKworI2RlZmluZSBSRVBPX01PREVfRElSIDAwNDAwMDAKKyNkZWZpbmUgUkVQT19NT0RFX0JMQiAwMTAwNjQ0CisjZGVmaW5lIFJFUE9fTU9ERV9FWEUgMDEwMDc1NQorI2RlZmluZSBSRVBPX01PREVfTE5LIDAxMjAwMDAKKwordWludDMyX3QgbmV4dF9ibG9iX21hcmsodm9pZCk7Cit2b2lkIHJlcG9fY29weSh1aW50MzJfdCByZXZpc2lvbiwgY29uc3QgY2hhciAqc3JjLCBjb25zdCBjaGFyICpkc3QpOwordm9pZCByZXBvX2FkZChjb25zdCBjaGFyICpwYXRoLCB1aW50MzJfdCBtb2RlLCB1aW50MzJfdCBibG9iX21hcmspOworY29uc3QgY2hhciAqcmVwb19yZWFkX3BhdGgoY29uc3QgY2hhciAqcGF0aCwgdWludDMyX3QgKm1vZGVfb3V0KTsKK3ZvaWQgcmVwb19kZWxldGUoY29uc3QgY2hhciAqcGF0aCk7Cit2b2lkIHJlcG9fY29tbWl0KHVpbnQzMl90IHJldmlzaW9uLCBjb25zdCBjaGFyICphdXRob3IsCisJCWNvbnN0IHN0cnVjdCBzdHJidWYgKmxvZywgY29uc3QgY2hhciAqdXVpZCwgY29uc3QgY2hhciAqdXJsLAorCQlsb25nIHVuc2lnbmVkIHRpbWVzdGFtcCk7Cit2b2lkIHJlcG9fZGlmZih1aW50MzJfdCByMSwgdWludDMyX3QgcjIpOwordm9pZCByZXBvX2luaXQodm9pZCk7Cit2b2lkIHJlcG9fcmVzZXQodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5jIGIvdmNzLXN2bi9zbGlkaW5nX3dpbmRvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMWQ0OTAKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmMKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIExpY2Vuc2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0Qtc3R5bGUgbGljZW5zZS4KKyAqIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJzbGlkaW5nX3dpbmRvdy5oIgorI2luY2x1ZGUgImxpbmVfYnVmZmVyLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK3N0YXRpYyBpbnQgaW5wdXRfZXJyb3Ioc3RydWN0IGxpbmVfYnVmZmVyICpmaWxlKQoreworCWlmICghYnVmZmVyX2ZlcnJvcihmaWxlKSkKKwkJcmV0dXJuIGVycm9yKCJkZWx0YSBwcmVpbWFnZSBlbmRzIGVhcmx5Iik7CisJcmV0dXJuIGVycm9yKCJjYW5ub3QgcmVhZCBkZWx0YSBwcmVpbWFnZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworfQorCitzdGF0aWMgaW50IHNraXBfb3Jfd2hpbmUoc3RydWN0IGxpbmVfYnVmZmVyICpmaWxlLCBvZmZfdCBnYXApCit7CisJaWYgKGJ1ZmZlcl9za2lwX2J5dGVzKGZpbGUsIGdhcCkgIT0gZ2FwKQorCQlyZXR1cm4gaW5wdXRfZXJyb3IoZmlsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF90b19maWxsX29yX3doaW5lKHN0cnVjdCBsaW5lX2J1ZmZlciAqZmlsZSwKKwkJCQlzdHJ1Y3Qgc3RyYnVmICpidWYsIHNpemVfdCB3aWR0aCkKK3sKKwlidWZmZXJfcmVhZF9iaW5hcnkoZmlsZSwgYnVmLCB3aWR0aCAtIGJ1Zi0+bGVuKTsKKwlpZiAoYnVmLT5sZW4gIT0gd2lkdGgpCisJCXJldHVybiBpbnB1dF9lcnJvcihmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19vZmZzZXRfb3ZlcmZsb3cob2ZmX3Qgb2Zmc2V0LCB1aW50bWF4X3QgbGVuKQoreworCWlmIChsZW4gPiBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKG9mZl90KSkKKwkJcmV0dXJuIGVycm9yKCJ1bnJlcHJlc2VudGFibGUgbGVuZ3RoIGluIGRlbHRhOiAiCisJCQkJIiUiUFJJdU1BWCIgPiBPRkZfTUFYIiwgbGVuKTsKKwlpZiAoc2lnbmVkX2FkZF9vdmVyZmxvd3Mob2Zmc2V0LCAob2ZmX3QpIGxlbikpCisJCXJldHVybiBlcnJvcigidW5yZXByZXNlbnRhYmxlIG9mZnNldCBpbiBkZWx0YTogIgorCQkJCSIlIlBSSXVNQVgiICsgJSJQUkl1TUFYIiA+IE9GRl9NQVgiLAorCQkJCSh1aW50bWF4X3QpIG9mZnNldCwgbGVuKTsKKwlyZXR1cm4gMDsKK30KKworaW50IG1vdmVfd2luZG93KHN0cnVjdCBzbGlkaW5nX3ZpZXcgKnZpZXcsIG9mZl90IG9mZiwgc2l6ZV90IHdpZHRoKQoreworCW9mZl90IGZpbGVfb2Zmc2V0OworCWFzc2VydCh2aWV3KTsKKwlhc3NlcnQodmlldy0+d2lkdGggPD0gdmlldy0+YnVmLmxlbik7CisJYXNzZXJ0KCFjaGVja19vZmZzZXRfb3ZlcmZsb3codmlldy0+b2ZmLCB2aWV3LT5idWYubGVuKSk7CisKKwlpZiAoY2hlY2tfb2Zmc2V0X292ZXJmbG93KG9mZiwgd2lkdGgpKQorCQlyZXR1cm4gLTE7CisJaWYgKG9mZiA8IHZpZXctPm9mZiB8fCBvZmYgKyB3aWR0aCA8IHZpZXctPm9mZiArIHZpZXctPndpZHRoKQorCQlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IHdpbmRvdyBzbGlkZXMgbGVmdCIpOworCWlmICh2aWV3LT5tYXhfb2ZmID49IDAgJiYgdmlldy0+bWF4X29mZiA8IG9mZiArIChvZmZfdCkgd2lkdGgpCisJCXJldHVybiBlcnJvcigiZGVsdGEgcHJlaW1hZ2UgZW5kcyBlYXJseSIpOworCisJZmlsZV9vZmZzZXQgPSB2aWV3LT5vZmYgKyB2aWV3LT5idWYubGVuOworCWlmIChvZmYgPCBmaWxlX29mZnNldCkgeworCQkvKiBNb3ZlIHRoZSBvdmVybGFwcGluZyByZWdpb24gaW50byBwbGFjZS4gKi8KKwkJc3RyYnVmX3JlbW92ZSgmdmlldy0+YnVmLCAwLCBvZmYgLSB2aWV3LT5vZmYpOworCX0gZWxzZSB7CisJCS8qIFNlZWsgYWhlYWQgdG8gc2tpcCB0aGUgZ2FwLiAqLworCQlpZiAoc2tpcF9vcl93aGluZSh2aWV3LT5maWxlLCBvZmYgLSBmaWxlX29mZnNldCkpCisJCQlyZXR1cm4gLTE7CisJCXN0cmJ1Zl9zZXRsZW4oJnZpZXctPmJ1ZiwgMCk7CisJfQorCisJaWYgKHZpZXctPmJ1Zi5sZW4gPiB3aWR0aCkKKwkJOyAvKiBBbHJlYWR5IHJlYWQuICovCisJZWxzZSBpZiAocmVhZF90b19maWxsX29yX3doaW5lKHZpZXctPmZpbGUsICZ2aWV3LT5idWYsIHdpZHRoKSkKKwkJcmV0dXJuIC0xOworCisJdmlldy0+b2ZmID0gb2ZmOworCXZpZXctPndpZHRoID0gd2lkdGg7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmggYi92Y3Mtc3ZuL3NsaWRpbmdfd2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQzYTgyNQotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vc2xpZGluZ193aW5kb3cuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIFNMSURJTkdfV0lORE9XX0hfCisjZGVmaW5lIFNMSURJTkdfV0lORE9XX0hfCisKKyNpbmNsdWRlICJzdHJidWYuaCIKKworc3RydWN0IHNsaWRpbmdfdmlldyB7CisJc3RydWN0IGxpbmVfYnVmZmVyICpmaWxlOworCW9mZl90IG9mZjsKKwlzaXplX3Qgd2lkdGg7CisJb2ZmX3QgbWF4X29mZjsJLyogLTEgbWVhbnMgdW5saW1pdGVkICovCisJc3RydWN0IHN0cmJ1ZiBidWY7Cit9OworCisjZGVmaW5lIFNMSURJTkdfVklFV19JTklUKGlucHV0LCBsZW4pCXsgKGlucHV0KSwgMCwgMCwgKGxlbiksIFNUUkJVRl9JTklUIH0KKworZXh0ZXJuIGludCBtb3ZlX3dpbmRvdyhzdHJ1Y3Qgc2xpZGluZ192aWV3ICp2aWV3LCBvZmZfdCBvZmYsIHNpemVfdCB3aWR0aCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9zdm5kaWZmLmMgYi92Y3Mtc3ZuL3N2bmRpZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGM5N2M0Ci0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9zdm5kaWZmLmMKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBMaWNlbnNlZCB1bmRlciBhIHR3by1jbGF1c2UgQlNELXN0eWxlIGxpY2Vuc2UuCisgKiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSAiZ2l0LWNvbXBhdC11dGlsLmgiCisjaW5jbHVkZSAic2xpZGluZ193aW5kb3cuaCIKKyNpbmNsdWRlICJsaW5lX2J1ZmZlci5oIgorI2luY2x1ZGUgInN2bmRpZmYuaCIKKworLyoKKyAqIHN2bmRpZmYwIGFwcGxpZXIKKyAqCisgKiBTZWUgaHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9zdWJ2ZXJzaW9uL3RydW5rL25vdGVzL3N2bmRpZmYuCisgKgorICogc3ZuZGlmZjAgOjo9ICdTVk5cMCcgd2luZG93KgorICogd2luZG93IDo6PSBpbnQgaW50IGludCBpbnQgaW50IGluc3RydWN0aW9ucyBpbmxpbmVfZGF0YTsKKyAqIGluc3RydWN0aW9ucyA6Oj0gaW5zdHJ1Y3Rpb24qOworICogaW5zdHJ1Y3Rpb24gOjo9IHZpZXdfc2VsZWN0b3IgaW50IGludAorICogICB8IGNvcHlmcm9tX2RhdGEgaW50CisgKiAgIHwgcGFja2VkX3ZpZXdfc2VsZWN0b3IgaW50CisgKiAgIHwgcGFja2VkX2NvcHlmcm9tX2RhdGEKKyAqICAgOworICogdmlld19zZWxlY3RvciA6Oj0gY29weWZyb21fc291cmNlCisgKiAgIHwgY29weWZyb21fdGFyZ2V0CisgKiAgIDsKKyAqIGNvcHlmcm9tX3NvdXJjZSA6Oj0gIyBiaW5hcnkgMDAgMDAwMDAwOworICogY29weWZyb21fdGFyZ2V0IDo6PSAjIGJpbmFyeSAwMSAwMDAwMDA7CisgKiBjb3B5ZnJvbV9kYXRhIDo6PSAjIGJpbmFyeSAxMCAwMDAwMDA7CisgKiBwYWNrZWRfdmlld19zZWxlY3RvciA6Oj0gIyB2aWV3X3NlbGVjdG9yIE9SLWVkIHdpdGggNiBiaXQgdmFsdWU7CisgKiBwYWNrZWRfY29weWZyb21fZGF0YSA6Oj0gIyBjb3B5ZnJvbV9kYXRhIE9SLWVkIHdpdGggNiBiaXQgdmFsdWU7CisgKiBpbnQgOjo9IGhpZ2hkaWdpdCogbG93ZGlnaXQ7CisgKiBoaWdoZGlnaXQgOjo9ICMgYmluYXJ5IDEwMDAgMDAwMCBPUi1lZCB3aXRoIDcgYml0IHZhbHVlOworICogbG93ZGlnaXQgOjo9ICMgNyBiaXQgdmFsdWU7CisgKi8KKworI2RlZmluZSBJTlNOX01BU0sJMHhjMAorI2RlZmluZSBJTlNOX0NPUFlGUk9NX1NPVVJDRQkweDAwCisjZGVmaW5lIElOU05fQ09QWUZST01fVEFSR0VUCTB4NDAKKyNkZWZpbmUgSU5TTl9DT1BZRlJPTV9EQVRBCTB4ODAKKyNkZWZpbmUgT1BFUkFORF9NQVNLCTB4M2YKKworI2RlZmluZSBWTElfQ09OVElOVUUJMHg4MAorI2RlZmluZSBWTElfRElHSVRfTUFTSwkweDdmCisjZGVmaW5lIFZMSV9CSVRTX1BFUl9ESUdJVCA3CisKK3N0cnVjdCB3aW5kb3cgeworCXN0cnVjdCBzbGlkaW5nX3ZpZXcgKmluOworCXN0cnVjdCBzdHJidWYgb3V0OworCXN0cnVjdCBzdHJidWYgaW5zdHJ1Y3Rpb25zOworCXN0cnVjdCBzdHJidWYgZGF0YTsKK307CisKKyNkZWZpbmUgV0lORE9XX0lOSVQodykJeyAodyksIFNUUkJVRl9JTklULCBTVFJCVUZfSU5JVCwgU1RSQlVGX0lOSVQgfQorCitzdGF0aWMgdm9pZCB3aW5kb3dfcmVsZWFzZShzdHJ1Y3Qgd2luZG93ICpjdHgpCit7CisJc3RyYnVmX3JlbGVhc2UoJmN0eC0+b3V0KTsKKwlzdHJidWZfcmVsZWFzZSgmY3R4LT5pbnN0cnVjdGlvbnMpOworCXN0cmJ1Zl9yZWxlYXNlKCZjdHgtPmRhdGEpOworfQorCitzdGF0aWMgaW50IHdyaXRlX3N0cmJ1ZihzdHJ1Y3Qgc3RyYnVmICpzYiwgRklMRSAqb3V0KQoreworCWlmIChmd3JpdGUoc2ItPmJ1ZiwgMSwgc2ItPmxlbiwgb3V0KSA9PSBzYi0+bGVuKQkvKiBTdWNjZXNzLiAqLworCQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3IoImNhbm5vdCB3cml0ZSBkZWx0YSBwb3N0aW1hZ2U6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKK30KKworc3RhdGljIGludCBlcnJvcl9zaG9ydF9yZWFkKHN0cnVjdCBsaW5lX2J1ZmZlciAqaW5wdXQpCit7CisJaWYgKGJ1ZmZlcl9mZXJyb3IoaW5wdXQpKQorCQlyZXR1cm4gZXJyb3IoImVycm9yIHJlYWRpbmcgZGVsdGE6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKK30KKworc3RhdGljIGludCByZWFkX2NodW5rKHN0cnVjdCBsaW5lX2J1ZmZlciAqZGVsdGEsIG9mZl90ICpkZWx0YV9sZW4sCisJCSAgICAgIHN0cnVjdCBzdHJidWYgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlhc3NlcnQoKmRlbHRhX2xlbiA+PSAwKTsKKwlzdHJidWZfcmVzZXQoYnVmKTsKKwlpZiAobGVuID4gKHVpbnRtYXhfdCkgKmRlbHRhX2xlbiB8fAorCSAgICBidWZmZXJfcmVhZF9iaW5hcnkoZGVsdGEsIGJ1ZiwgbGVuKSAhPSBsZW4pCisJCXJldHVybiBlcnJvcl9zaG9ydF9yZWFkKGRlbHRhKTsKKwkqZGVsdGFfbGVuIC09IGJ1Zi0+bGVuOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfbWFnaWMoc3RydWN0IGxpbmVfYnVmZmVyICppbiwgb2ZmX3QgKmxlbikKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBtYWdpY1tdID0geydTJywgJ1YnLCAnTicsICdcMCd9OworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKworCWlmIChyZWFkX2NodW5rKGluLCBsZW4sICZzYiwgc2l6ZW9mKG1hZ2ljKSkpIHsKKwkJc3RyYnVmX3JlbGVhc2UoJnNiKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAobWVtY21wKHNiLmJ1ZiwgbWFnaWMsIHNpemVvZihtYWdpYykpKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogdW5yZWNvZ25pemVkIGZpbGUgdHlwZSIpOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfaW50KHN0cnVjdCBsaW5lX2J1ZmZlciAqaW4sIHVpbnRtYXhfdCAqcmVzdWx0LCBvZmZfdCAqbGVuKQoreworCXVpbnRtYXhfdCBydiA9IDA7CisJb2ZmX3Qgc3o7CisJZm9yIChzeiA9ICpsZW47IHN6OyBzei0tKSB7CisJCWNvbnN0IGludCBjaCA9IGJ1ZmZlcl9yZWFkX2NoYXIoaW4pOworCQlpZiAoY2ggPT0gRU9GKQorCQkJYnJlYWs7CisKKwkJcnYgPDw9IFZMSV9CSVRTX1BFUl9ESUdJVDsKKwkJcnYgKz0gKGNoICYgVkxJX0RJR0lUX01BU0spOworCQlpZiAoY2ggJiBWTElfQ09OVElOVUUpCisJCQljb250aW51ZTsKKworCQkqcmVzdWx0ID0gcnY7CisJCSpsZW4gPSBzeiAtIDE7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZXJyb3Jfc2hvcnRfcmVhZChpbik7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfaW50KGNvbnN0IGNoYXIgKipidWYsIHNpemVfdCAqcmVzdWx0LCBjb25zdCBjaGFyICplbmQpCit7CisJc2l6ZV90IHJ2ID0gMDsKKwljb25zdCBjaGFyICpwb3M7CisJZm9yIChwb3MgPSAqYnVmOyBwb3MgIT0gZW5kOyBwb3MrKykgeworCQl1bnNpZ25lZCBjaGFyIGNoID0gKnBvczsKKworCQlydiA8PD0gVkxJX0JJVFNfUEVSX0RJR0lUOworCQlydiArPSAoY2ggJiBWTElfRElHSVRfTUFTSyk7CisJCWlmIChjaCAmIFZMSV9DT05USU5VRSkKKwkJCWNvbnRpbnVlOworCisJCSpyZXN1bHQgPSBydjsKKwkJKmJ1ZiA9IHBvcyArIDE7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IHVuZXhwZWN0ZWQgZW5kIG9mIGluc3RydWN0aW9ucyBzZWN0aW9uIik7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9vZmZzZXQoc3RydWN0IGxpbmVfYnVmZmVyICppbiwgb2ZmX3QgKnJlc3VsdCwgb2ZmX3QgKmxlbikKK3sKKwl1aW50bWF4X3QgdmFsOworCWlmIChyZWFkX2ludChpbiwgJnZhbCwgbGVuKSkKKwkJcmV0dXJuIC0xOworCWlmICh2YWwgPiBtYXhpbXVtX3NpZ25lZF92YWx1ZV9vZl90eXBlKG9mZl90KSkKKwkJcmV0dXJuIGVycm9yKCJ1bnJlcHJlc2VudGFibGUgb2Zmc2V0IGluIGRlbHRhOiAlIlBSSXVNQVgiIiwgdmFsKTsKKwkqcmVzdWx0ID0gdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlYWRfbGVuZ3RoKHN0cnVjdCBsaW5lX2J1ZmZlciAqaW4sIHNpemVfdCAqcmVzdWx0LCBvZmZfdCAqbGVuKQoreworCXVpbnRtYXhfdCB2YWw7CisJaWYgKHJlYWRfaW50KGluLCAmdmFsLCBsZW4pKQorCQlyZXR1cm4gLTE7CisJaWYgKHZhbCA+IFNJWkVfTUFYKQorCQlyZXR1cm4gZXJyb3IoInVucmVwcmVzZW50YWJsZSBsZW5ndGggaW4gZGVsdGE6ICUiUFJJdU1BWCIiLCB2YWwpOworCSpyZXN1bHQgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29weWZyb21fc291cmNlKHN0cnVjdCB3aW5kb3cgKmN0eCwgY29uc3QgY2hhciAqKmluc3RydWN0aW9ucywKKwkJCSAgIHNpemVfdCBuYnl0ZXMsIGNvbnN0IGNoYXIgKmluc25zX2VuZCkKK3sKKwlzaXplX3Qgb2Zmc2V0OworCWlmIChwYXJzZV9pbnQoaW5zdHJ1Y3Rpb25zLCAmb2Zmc2V0LCBpbnNuc19lbmQpKQorCQlyZXR1cm4gLTE7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3Mob2Zmc2V0LCBuYnl0ZXMpIHx8CisJICAgIG9mZnNldCArIG5ieXRlcyA+IGN0eC0+aW4tPndpZHRoKQorCQlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IGNvcGllcyBzb3VyY2UgZGF0YSBvdXRzaWRlIHZpZXciKTsKKwlzdHJidWZfYWRkKCZjdHgtPm91dCwgY3R4LT5pbi0+YnVmLmJ1ZiArIG9mZnNldCwgbmJ5dGVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb3B5ZnJvbV90YXJnZXQoc3RydWN0IHdpbmRvdyAqY3R4LCBjb25zdCBjaGFyICoqaW5zdHJ1Y3Rpb25zLAorCQkJICAgc2l6ZV90IG5ieXRlcywgY29uc3QgY2hhciAqaW5zdHJ1Y3Rpb25zX2VuZCkKK3sKKwlzaXplX3Qgb2Zmc2V0OworCWlmIChwYXJzZV9pbnQoaW5zdHJ1Y3Rpb25zLCAmb2Zmc2V0LCBpbnN0cnVjdGlvbnNfZW5kKSkKKwkJcmV0dXJuIC0xOworCWlmIChvZmZzZXQgPj0gY3R4LT5vdXQubGVuKQorCQlyZXR1cm4gZXJyb3IoImludmFsaWQgZGVsdGE6IGNvcGllcyBmcm9tIHRoZSBmdXR1cmUiKTsKKwlmb3IgKDsgbmJ5dGVzID4gMDsgbmJ5dGVzLS0pCisJCXN0cmJ1Zl9hZGRjaCgmY3R4LT5vdXQsIGN0eC0+b3V0LmJ1ZltvZmZzZXQrK10pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvcHlmcm9tX2RhdGEoc3RydWN0IHdpbmRvdyAqY3R4LCBzaXplX3QgKmRhdGFfcG9zLCBzaXplX3QgbmJ5dGVzKQoreworCWNvbnN0IHNpemVfdCBwb3MgPSAqZGF0YV9wb3M7CisJaWYgKHVuc2lnbmVkX2FkZF9vdmVyZmxvd3MocG9zLCBuYnl0ZXMpIHx8CisJICAgIHBvcyArIG5ieXRlcyA+IGN0eC0+ZGF0YS5sZW4pCisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogY29waWVzIHVuYXZhaWxhYmxlIGlubGluZSBkYXRhIik7CisJc3RyYnVmX2FkZCgmY3R4LT5vdXQsIGN0eC0+ZGF0YS5idWYgKyBwb3MsIG5ieXRlcyk7CisJKmRhdGFfcG9zICs9IG5ieXRlczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9maXJzdF9vcGVyYW5kKGNvbnN0IGNoYXIgKipidWYsIHNpemVfdCAqb3V0LCBjb25zdCBjaGFyICplbmQpCit7CisJc2l6ZV90IHJlc3VsdCA9ICh1bnNpZ25lZCBjaGFyKSAqKCpidWYpKysgJiBPUEVSQU5EX01BU0s7CisJaWYgKHJlc3VsdCkgewkvKiBpbW1lZGlhdGUgb3BlcmFuZCAqLworCQkqb3V0ID0gcmVzdWx0OworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHBhcnNlX2ludChidWYsIG91dCwgZW5kKTsKK30KKworc3RhdGljIGludCBleGVjdXRlX29uZV9pbnN0cnVjdGlvbihzdHJ1Y3Qgd2luZG93ICpjdHgsCisJCQkJY29uc3QgY2hhciAqKmluc3RydWN0aW9ucywgc2l6ZV90ICpkYXRhX3BvcykKK3sKKwl1bnNpZ25lZCBpbnQgaW5zdHJ1Y3Rpb247CisJY29uc3QgY2hhciAqaW5zbnNfZW5kID0gY3R4LT5pbnN0cnVjdGlvbnMuYnVmICsgY3R4LT5pbnN0cnVjdGlvbnMubGVuOworCXNpemVfdCBuYnl0ZXM7CisJYXNzZXJ0KGN0eCk7CisJYXNzZXJ0KGluc3RydWN0aW9ucyAmJiAqaW5zdHJ1Y3Rpb25zKTsKKwlhc3NlcnQoZGF0YV9wb3MpOworCisJaW5zdHJ1Y3Rpb24gPSAodW5zaWduZWQgY2hhcikgKippbnN0cnVjdGlvbnM7CisJaWYgKHBhcnNlX2ZpcnN0X29wZXJhbmQoaW5zdHJ1Y3Rpb25zLCAmbmJ5dGVzLCBpbnNuc19lbmQpKQorCQlyZXR1cm4gLTE7CisJc3dpdGNoIChpbnN0cnVjdGlvbiAmIElOU05fTUFTSykgeworCWNhc2UgSU5TTl9DT1BZRlJPTV9TT1VSQ0U6CisJCXJldHVybiBjb3B5ZnJvbV9zb3VyY2UoY3R4LCBpbnN0cnVjdGlvbnMsIG5ieXRlcywgaW5zbnNfZW5kKTsKKwljYXNlIElOU05fQ09QWUZST01fVEFSR0VUOgorCQlyZXR1cm4gY29weWZyb21fdGFyZ2V0KGN0eCwgaW5zdHJ1Y3Rpb25zLCBuYnl0ZXMsIGluc25zX2VuZCk7CisJY2FzZSBJTlNOX0NPUFlGUk9NX0RBVEE6CisJCXJldHVybiBjb3B5ZnJvbV9kYXRhKGN0eCwgZGF0YV9wb3MsIG5ieXRlcyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGVycm9yKCJpbnZhbGlkIGRlbHRhOiB1bnJlY29nbml6ZWQgaW5zdHJ1Y3Rpb24iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXBwbHlfd2luZG93X2luX2NvcmUoc3RydWN0IHdpbmRvdyAqY3R4KQoreworCWNvbnN0IGNoYXIgKmluc3RydWN0aW9uczsKKwlzaXplX3QgZGF0YV9wb3MgPSAwOworCisJLyoKKwkgKiBGaWxsIGN0eC0+b3V0LmJ1ZiB1c2luZyBkYXRhIGZyb20gdGhlIHNvdXJjZSwgdGFyZ2V0LAorCSAqIGFuZCBpbmxpbmUgZGF0YSB2aWV3cy4KKwkgKi8KKwlmb3IgKGluc3RydWN0aW9ucyA9IGN0eC0+aW5zdHJ1Y3Rpb25zLmJ1ZjsKKwkgICAgIGluc3RydWN0aW9ucyAhPSBjdHgtPmluc3RydWN0aW9ucy5idWYgKyBjdHgtPmluc3RydWN0aW9ucy5sZW47CisJICAgICApCisJCWlmIChleGVjdXRlX29uZV9pbnN0cnVjdGlvbihjdHgsICZpbnN0cnVjdGlvbnMsICZkYXRhX3BvcykpCisJCQlyZXR1cm4gLTE7CisJaWYgKGRhdGFfcG9zICE9IGN0eC0+ZGF0YS5sZW4pCisJCXJldHVybiBlcnJvcigiaW52YWxpZCBkZWx0YTogZG9lcyBub3QgY29weSBhbGwgaW5saW5lIGRhdGEiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcHBseV9vbmVfd2luZG93KHN0cnVjdCBsaW5lX2J1ZmZlciAqZGVsdGEsIG9mZl90ICpkZWx0YV9sZW4sCisJCQkgICAgc3RydWN0IHNsaWRpbmdfdmlldyAqcHJlaW1hZ2UsIEZJTEUgKm91dCkKK3sKKwlpbnQgcnYgPSAtMTsKKwlzdHJ1Y3Qgd2luZG93IGN0eCA9IFdJTkRPV19JTklUKHByZWltYWdlKTsKKwlzaXplX3Qgb3V0X2xlbjsKKwlzaXplX3QgaW5zdHJ1Y3Rpb25zX2xlbjsKKwlzaXplX3QgZGF0YV9sZW47CisJYXNzZXJ0KGRlbHRhX2xlbik7CisKKwkvKiAic291cmNlIHZpZXciIG9mZnNldCBhbmQgbGVuZ3RoIGFscmVhZHkgaGFuZGxlZDsgKi8KKwlpZiAocmVhZF9sZW5ndGgoZGVsdGEsICZvdXRfbGVuLCBkZWx0YV9sZW4pIHx8CisJICAgIHJlYWRfbGVuZ3RoKGRlbHRhLCAmaW5zdHJ1Y3Rpb25zX2xlbiwgZGVsdGFfbGVuKSB8fAorCSAgICByZWFkX2xlbmd0aChkZWx0YSwgJmRhdGFfbGVuLCBkZWx0YV9sZW4pIHx8CisJICAgIHJlYWRfY2h1bmsoZGVsdGEsIGRlbHRhX2xlbiwgJmN0eC5pbnN0cnVjdGlvbnMsIGluc3RydWN0aW9uc19sZW4pIHx8CisJICAgIHJlYWRfY2h1bmsoZGVsdGEsIGRlbHRhX2xlbiwgJmN0eC5kYXRhLCBkYXRhX2xlbikpCisJCWdvdG8gZXJyb3Jfb3V0OworCXN0cmJ1Zl9ncm93KCZjdHgub3V0LCBvdXRfbGVuKTsKKwlpZiAoYXBwbHlfd2luZG93X2luX2NvcmUoJmN0eCkpCisJCWdvdG8gZXJyb3Jfb3V0OworCWlmIChjdHgub3V0LmxlbiAhPSBvdXRfbGVuKSB7CisJCXJ2ID0gZXJyb3IoImludmFsaWQgZGVsdGE6IGluY29ycmVjdCBwb3N0aW1hZ2UgbGVuZ3RoIik7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKwlpZiAod3JpdGVfc3RyYnVmKCZjdHgub3V0LCBvdXQpKQorCQlnb3RvIGVycm9yX291dDsKKwlydiA9IDA7CitlcnJvcl9vdXQ6CisJd2luZG93X3JlbGVhc2UoJmN0eCk7CisJcmV0dXJuIHJ2OworfQorCitpbnQgc3ZuZGlmZjBfYXBwbHkoc3RydWN0IGxpbmVfYnVmZmVyICpkZWx0YSwgb2ZmX3QgZGVsdGFfbGVuLAorCQkJc3RydWN0IHNsaWRpbmdfdmlldyAqcHJlaW1hZ2UsIEZJTEUgKnBvc3RpbWFnZSkKK3sKKwlhc3NlcnQoZGVsdGEgJiYgcHJlaW1hZ2UgJiYgcG9zdGltYWdlICYmIGRlbHRhX2xlbiA+PSAwKTsKKworCWlmIChyZWFkX21hZ2ljKGRlbHRhLCAmZGVsdGFfbGVuKSkKKwkJcmV0dXJuIC0xOworCXdoaWxlIChkZWx0YV9sZW4pIHsJLyogRm9yIGVhY2ggd2luZG93OiAqLworCQlvZmZfdCBwcmVfb2ZmID0gLTE7CisJCXNpemVfdCBwcmVfbGVuOworCisJCWlmIChyZWFkX29mZnNldChkZWx0YSwgJnByZV9vZmYsICZkZWx0YV9sZW4pIHx8CisJCSAgICByZWFkX2xlbmd0aChkZWx0YSwgJnByZV9sZW4sICZkZWx0YV9sZW4pIHx8CisJCSAgICBtb3ZlX3dpbmRvdyhwcmVpbWFnZSwgcHJlX29mZiwgcHJlX2xlbikgfHwKKwkJICAgIGFwcGx5X29uZV93aW5kb3coZGVsdGEsICZkZWx0YV9sZW4sIHByZWltYWdlLCBwb3N0aW1hZ2UpKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Zjcy1zdm4vc3ZuZGlmZi5oIGIvdmNzLXN2bi9zdm5kaWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRlYjQ2NAotLS0gL2Rldi9udWxsCisrKyBiL3Zjcy1zdm4vc3ZuZGlmZi5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgU1ZORElGRl9IXworI2RlZmluZSBTVk5ESUZGX0hfCisKK3N0cnVjdCBsaW5lX2J1ZmZlcjsKK3N0cnVjdCBzbGlkaW5nX3ZpZXc7CisKK2V4dGVybiBpbnQgc3ZuZGlmZjBfYXBwbHkoc3RydWN0IGxpbmVfYnVmZmVyICpkZWx0YSwgb2ZmX3QgZGVsdGFfbGVuLAorCQlzdHJ1Y3Qgc2xpZGluZ192aWV3ICpwcmVpbWFnZSwgRklMRSAqcG9zdGltYWdlKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS92Y3Mtc3ZuL3N2bmR1bXAuYyBiL3Zjcy1zdm4vc3ZuZHVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZDFkODMKLS0tIC9kZXYvbnVsbAorKysgYi92Y3Mtc3ZuL3N2bmR1bXAuYwpAQCAtMCwwICsxLDU0MCBAQAorLyoKKyAqIFBhcnNlIGFuZCByZWFycmFuZ2UgYSBzdm5hZG1pbiBkdW1wLgorICogQ3JlYXRlIHRoZSBkdW1wIHdpdGg6CisgKiBzdm5hZG1pbiBkdW1wIC0taW5jcmVtZW50YWwgLXI8c3RhcnRyZXY+OjxlbmRyZXY+IDxyZXBvc2l0b3J5PiA+b3V0ZmlsZQorICoKKyAqIExpY2Vuc2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0Qtc3R5bGUgbGljZW5zZS4KKyAqIFNlZSBMSUNFTlNFIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlcG9fdHJlZS5oIgorI2luY2x1ZGUgImZhc3RfZXhwb3J0LmgiCisjaW5jbHVkZSAibGluZV9idWZmZXIuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJzdm5kdW1wLmgiCisKKy8qCisgKiBDb21wYXJlIHN0YXJ0IG9mIHN0cmluZyB0byBsaXRlcmFsIG9mIGVxdWFsIGxlbmd0aDsKKyAqIG11c3QgYmUgZ3VhcmRlZCBieSBsZW5ndGggdGVzdC4KKyAqLworI2RlZmluZSBjb25zdGNtcChzLCByZWYpIG1lbWNtcChzLCByZWYsIHNpemVvZihyZWYpIC0gMSkKKworI2RlZmluZSBSRVBPUlRfRklMRU5PIDMKKworI2RlZmluZSBOT0RFQUNUX1JFUExBQ0UgNAorI2RlZmluZSBOT0RFQUNUX0RFTEVURSAzCisjZGVmaW5lIE5PREVBQ1RfQUREIDIKKyNkZWZpbmUgTk9ERUFDVF9DSEFOR0UgMQorI2RlZmluZSBOT0RFQUNUX1VOS05PV04gMAorCisvKiBTdGF0ZXM6ICovCisjZGVmaW5lIERVTVBfQ1RYIDAJLyogZHVtcCBtZXRhZGF0YSAqLworI2RlZmluZSBSRVZfQ1RYICAxCS8qIHJldmlzaW9uIG1ldGFkYXRhICovCisjZGVmaW5lIE5PREVfQ1RYIDIJLyogbm9kZSBtZXRhZGF0YSAqLworI2RlZmluZSBJTlRFUk5PREVfQ1RYIDMJLyogYmV0d2VlbiBub2RlcyAqLworCisjZGVmaW5lIERBVEVfUkZDMjgyMl9MRU4gMzEKKworc3RhdGljIHN0cnVjdCBsaW5lX2J1ZmZlciBpbnB1dCA9IExJTkVfQlVGRkVSX0lOSVQ7CisKK3N0YXRpYyBzdHJ1Y3QgeworCXVpbnQzMl90IGFjdGlvbiwgc3JjUmV2LCB0eXBlOworCW9mZl90IHByb3BfbGVuZ3RoLCB0ZXh0X2xlbmd0aDsKKwlzdHJ1Y3Qgc3RyYnVmIHNyYywgZHN0OworCXVpbnQzMl90IHRleHRfZGVsdGEsIHByb3BfZGVsdGE7Cit9IG5vZGVfY3R4OworCitzdGF0aWMgc3RydWN0IHsKKwl1aW50MzJfdCByZXZpc2lvbjsKKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKKwlzdHJ1Y3Qgc3RyYnVmIGxvZywgYXV0aG9yLCBub3RlOworfSByZXZfY3R4OworCitzdGF0aWMgc3RydWN0IHsKKwl1aW50MzJfdCB2ZXJzaW9uOworCXN0cnVjdCBzdHJidWYgdXVpZCwgdXJsOworfSBkdW1wX2N0eDsKKworc3RhdGljIHZvaWQgcmVzZXRfbm9kZV9jdHgoY2hhciAqZm5hbWUpCit7CisJbm9kZV9jdHgudHlwZSA9IDA7CisJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9VTktOT1dOOworCW5vZGVfY3R4LnByb3BfbGVuZ3RoID0gLTE7CisJbm9kZV9jdHgudGV4dF9sZW5ndGggPSAtMTsKKwlzdHJidWZfcmVzZXQoJm5vZGVfY3R4LnNyYyk7CisJbm9kZV9jdHguc3JjUmV2ID0gMDsKKwlzdHJidWZfcmVzZXQoJm5vZGVfY3R4LmRzdCk7CisJaWYgKGZuYW1lKQorCQlzdHJidWZfYWRkc3RyKCZub2RlX2N0eC5kc3QsIGZuYW1lKTsKKwlub2RlX2N0eC50ZXh0X2RlbHRhID0gMDsKKwlub2RlX2N0eC5wcm9wX2RlbHRhID0gMDsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfcmV2X2N0eCh1aW50MzJfdCByZXZpc2lvbikKK3sKKwlyZXZfY3R4LnJldmlzaW9uID0gcmV2aXNpb247CisJcmV2X2N0eC50aW1lc3RhbXAgPSAwOworCXN0cmJ1Zl9yZXNldCgmcmV2X2N0eC5sb2cpOworCXN0cmJ1Zl9yZXNldCgmcmV2X2N0eC5hdXRob3IpOworCXN0cmJ1Zl9yZXNldCgmcmV2X2N0eC5ub3RlKTsKK30KKworc3RhdGljIHZvaWQgcmVzZXRfZHVtcF9jdHgoY29uc3QgY2hhciAqdXJsKQoreworCXN0cmJ1Zl9yZXNldCgmZHVtcF9jdHgudXJsKTsKKwlpZiAodXJsKQorCQlzdHJidWZfYWRkc3RyKCZkdW1wX2N0eC51cmwsIHVybCk7CisJZHVtcF9jdHgudmVyc2lvbiA9IDE7CisJc3RyYnVmX3Jlc2V0KCZkdW1wX2N0eC51dWlkKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3Byb3BlcnR5KGNvbnN0IHN0cnVjdCBzdHJidWYgKmtleV9idWYsCisJCQkJc3RydWN0IHN0cmJ1ZiAqdmFsLAorCQkJCXVpbnQzMl90ICp0eXBlX3NldCkKK3sKKwljb25zdCBjaGFyICprZXkgPSBrZXlfYnVmLT5idWY7CisJc2l6ZV90IGtleWxlbiA9IGtleV9idWYtPmxlbjsKKworCXN3aXRjaCAoa2V5bGVuICsgMSkgeworCWNhc2Ugc2l6ZW9mKCJzdm46bG9nIik6CisJCWlmIChjb25zdGNtcChrZXksICJzdm46bG9nIikpCisJCQlicmVhazsKKwkJaWYgKCF2YWwpCisJCQlkaWUoImludmFsaWQgZHVtcDogdW5zZXRzIHN2bjpsb2ciKTsKKwkJc3RyYnVmX3N3YXAoJnJldl9jdHgubG9nLCB2YWwpOworCQlicmVhazsKKwljYXNlIHNpemVvZigic3ZuOmF1dGhvciIpOgorCQlpZiAoY29uc3RjbXAoa2V5LCAic3ZuOmF1dGhvciIpKQorCQkJYnJlYWs7CisJCWlmICghdmFsKQorCQkJc3RyYnVmX3Jlc2V0KCZyZXZfY3R4LmF1dGhvcik7CisJCWVsc2UKKwkJCXN0cmJ1Zl9zd2FwKCZyZXZfY3R4LmF1dGhvciwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBzaXplb2YoInN2bjpkYXRlIik6CisJCWlmIChjb25zdGNtcChrZXksICJzdm46ZGF0ZSIpKQorCQkJYnJlYWs7CisJCWlmICghdmFsKQorCQkJZGllKCJpbnZhbGlkIGR1bXA6IHVuc2V0cyBzdm46ZGF0ZSIpOworCQlpZiAocGFyc2VfZGF0ZV9iYXNpYyh2YWwtPmJ1ZiwgJnJldl9jdHgudGltZXN0YW1wLCBOVUxMKSkKKwkJCXdhcm5pbmcoImludmFsaWQgdGltZXN0YW1wOiAlcyIsIHZhbC0+YnVmKTsKKwkJYnJlYWs7CisJY2FzZSBzaXplb2YoInN2bjpleGVjdXRhYmxlIik6CisJY2FzZSBzaXplb2YoInN2bjpzcGVjaWFsIik6CisJCWlmIChrZXlsZW4gPT0gc3RybGVuKCJzdm46ZXhlY3V0YWJsZSIpICYmCisJCSAgICBjb25zdGNtcChrZXksICJzdm46ZXhlY3V0YWJsZSIpKQorCQkJYnJlYWs7CisJCWlmIChrZXlsZW4gPT0gc3RybGVuKCJzdm46c3BlY2lhbCIpICYmCisJCSAgICBjb25zdGNtcChrZXksICJzdm46c3BlY2lhbCIpKQorCQkJYnJlYWs7CisJCWlmICgqdHlwZV9zZXQpIHsKKwkJCWlmICghdmFsKQorCQkJCXJldHVybjsKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBzZXRzIHR5cGUgdHdpY2UiKTsKKwkJfQorCQlpZiAoIXZhbCkgeworCQkJbm9kZV9jdHgudHlwZSA9IFJFUE9fTU9ERV9CTEI7CisJCQlyZXR1cm47CisJCX0KKwkJKnR5cGVfc2V0ID0gMTsKKwkJbm9kZV9jdHgudHlwZSA9IGtleWxlbiA9PSBzdHJsZW4oInN2bjpleGVjdXRhYmxlIikgPworCQkJCVJFUE9fTU9ERV9FWEUgOgorCQkJCVJFUE9fTU9ERV9MTks7CisJfQorfQorCitzdGF0aWMgdm9pZCBkaWVfc2hvcnRfcmVhZCh2b2lkKQoreworCWlmIChidWZmZXJfZmVycm9yKCZpbnB1dCkpCisJCWRpZV9lcnJubygiZXJyb3IgcmVhZGluZyBkdW1wIGZpbGUiKTsKKwlkaWUoImludmFsaWQgZHVtcDogdW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOworfQorCitzdGF0aWMgdm9pZCByZWFkX3Byb3BzKHZvaWQpCit7CisJc3RhdGljIHN0cnVjdCBzdHJidWYga2V5ID0gU1RSQlVGX0lOSVQ7CisJc3RhdGljIHN0cnVjdCBzdHJidWYgdmFsID0gU1RSQlVGX0lOSVQ7CisJY29uc3QgY2hhciAqdDsKKwkvKgorCSAqIE5FRURTV09SSzogdG8gc3VwcG9ydCBzaW1wbGUgbW9kZSBjaGFuZ2VzIGxpa2UKKwkgKglLIDExCisJICoJc3ZuOnNwZWNpYWwKKwkgKglWIDEKKwkgKgkqCisJICoJRCAxNAorCSAqCXN2bjpleGVjdXRhYmxlCisJICogd2Uga2VlcCB0cmFjayBvZiB3aGV0aGVyIGEgbW9kZSBoYXMgYmVlbiBzZXQgYW5kIHJlc2V0IHRvCisJICogcGxhaW4gZmlsZSBvbmx5IGlmIG5vdC4gIFdlIHNob3VsZCBiZSBrZWVwaW5nIHRyYWNrIG9mIHRoZQorCSAqIHN5bWxpbmsgYW5kIGV4ZWN1dGFibGUgYml0cyBzZXBhcmF0ZWx5IGluc3RlYWQuCisJICovCisJdWludDMyX3QgdHlwZV9zZXQgPSAwOworCXdoaWxlICgodCA9IGJ1ZmZlcl9yZWFkX2xpbmUoJmlucHV0KSkgJiYgc3RyY21wKHQsICJQUk9QUy1FTkQiKSkgeworCQl1aW50MzJfdCBsZW47CisJCWNvbnN0IGNoYXIgdHlwZSA9IHRbMF07CisJCWludCBjaDsKKworCQlpZiAoIXR5cGUgfHwgdFsxXSAhPSAnICcpCisJCQlkaWUoImludmFsaWQgcHJvcGVydHkgbGluZTogJXMiLCB0KTsKKwkJbGVuID0gYXRvaSgmdFsyXSk7CisJCXN0cmJ1Zl9yZXNldCgmdmFsKTsKKwkJYnVmZmVyX3JlYWRfYmluYXJ5KCZpbnB1dCwgJnZhbCwgbGVuKTsKKwkJaWYgKHZhbC5sZW4gPCBsZW4pCisJCQlkaWVfc2hvcnRfcmVhZCgpOworCisJCS8qIERpc2NhcmQgdHJhaWxpbmcgbmV3bGluZS4gKi8KKwkJY2ggPSBidWZmZXJfcmVhZF9jaGFyKCZpbnB1dCk7CisJCWlmIChjaCA9PSBFT0YpCisJCQlkaWVfc2hvcnRfcmVhZCgpOworCQlpZiAoY2ggIT0gJ1xuJykKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBleHBlY3RlZCBuZXdsaW5lIGFmdGVyICVzIiwgdmFsLmJ1Zik7CisKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgJ0snOgorCQkJc3RyYnVmX3N3YXAoJmtleSwgJnZhbCk7CisJCQljb250aW51ZTsKKwkJY2FzZSAnRCc6CisJCQloYW5kbGVfcHJvcGVydHkoJnZhbCwgTlVMTCwgJnR5cGVfc2V0KTsKKwkJCWNvbnRpbnVlOworCQljYXNlICdWJzoKKwkJCWhhbmRsZV9wcm9wZXJ0eSgma2V5LCAmdmFsLCAmdHlwZV9zZXQpOworCQkJc3RyYnVmX3Jlc2V0KCZrZXkpOworCQkJY29udGludWU7CisJCWRlZmF1bHQ6CisJCQlkaWUoImludmFsaWQgcHJvcGVydHkgbGluZTogJXMiLCB0KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX25vZGUodm9pZCkKK3sKKwljb25zdCB1aW50MzJfdCB0eXBlID0gbm9kZV9jdHgudHlwZTsKKwljb25zdCBpbnQgaGF2ZV9wcm9wcyA9IG5vZGVfY3R4LnByb3BfbGVuZ3RoICE9IC0xOworCWNvbnN0IGludCBoYXZlX3RleHQgPSBub2RlX2N0eC50ZXh0X2xlbmd0aCAhPSAtMTsKKwkvKgorCSAqIE9sZCB0ZXh0IGZvciB0aGlzIG5vZGU6CisJICogIE5VTEwJLSBkaXJlY3Rvcnkgb3IgYnVnCisJICogIGVtcHR5X2Jsb2IJLSBlbXB0eQorCSAqICAiPGRhdGFyZWY+IgktIGRhdGEgcmV0cmlldmFibGUgZnJvbSBmYXN0LWltcG9ydAorCSAqLworCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBlbXB0eV9ibG9iID0gIjo6ZW1wdHk6OiI7CisJY29uc3QgY2hhciAqb2xkX2RhdGEgPSBOVUxMOworCXVpbnQzMl90IG9sZF9tb2RlID0gUkVQT19NT0RFX0JMQjsKKworCWlmIChub2RlX2N0eC5hY3Rpb24gPT0gTk9ERUFDVF9ERUxFVEUpIHsKKwkJaWYgKGhhdmVfdGV4dCB8fCBoYXZlX3Byb3BzIHx8IG5vZGVfY3R4LnNyY1JldikKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBkZWxldGlvbiBub2RlIGhhcyAiCisJCQkJImNvcHlmcm9tIGluZm8sIHRleHQsIG9yIHByb3BlcnRpZXMiKTsKKwkJcmVwb19kZWxldGUobm9kZV9jdHguZHN0LmJ1Zik7CisJCXJldHVybjsKKwl9CisJaWYgKG5vZGVfY3R4LmFjdGlvbiA9PSBOT0RFQUNUX1JFUExBQ0UpIHsKKwkJcmVwb19kZWxldGUobm9kZV9jdHguZHN0LmJ1Zik7CisJCW5vZGVfY3R4LmFjdGlvbiA9IE5PREVBQ1RfQUREOworCX0KKwlpZiAobm9kZV9jdHguc3JjUmV2KSB7CisJCXJlcG9fY29weShub2RlX2N0eC5zcmNSZXYsIG5vZGVfY3R4LnNyYy5idWYsIG5vZGVfY3R4LmRzdC5idWYpOworCQlpZiAobm9kZV9jdHguYWN0aW9uID09IE5PREVBQ1RfQUREKQorCQkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9DSEFOR0U7CisJfQorCWlmIChoYXZlX3RleHQgJiYgdHlwZSA9PSBSRVBPX01PREVfRElSKQorCQlkaWUoImludmFsaWQgZHVtcDogZGlyZWN0b3JpZXMgY2Fubm90IGhhdmUgdGV4dCBhdHRhY2hlZCIpOworCisJLyoKKwkgKiBGaW5kIG9sZCBjb250ZW50IChvbGRfZGF0YSkgYW5kIGRlY2lkZSBvbiB0aGUgbmV3IG1vZGUuCisJICovCisJaWYgKG5vZGVfY3R4LmFjdGlvbiA9PSBOT0RFQUNUX0NIQU5HRSAmJiAhKm5vZGVfY3R4LmRzdC5idWYpIHsKKwkJaWYgKHR5cGUgIT0gUkVQT19NT0RFX0RJUikKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiByb290IG9mIHRyZWUgaXMgbm90IGEgcmVndWxhciBmaWxlIik7CisJCW9sZF9kYXRhID0gTlVMTDsKKwl9IGVsc2UgaWYgKG5vZGVfY3R4LmFjdGlvbiA9PSBOT0RFQUNUX0NIQU5HRSkgeworCQl1aW50MzJfdCBtb2RlOworCQlvbGRfZGF0YSA9IHJlcG9fcmVhZF9wYXRoKG5vZGVfY3R4LmRzdC5idWYsICZtb2RlKTsKKwkJaWYgKG1vZGUgPT0gUkVQT19NT0RFX0RJUiAmJiB0eXBlICE9IFJFUE9fTU9ERV9ESVIpCisJCQlkaWUoImludmFsaWQgZHVtcDogY2Fubm90IG1vZGlmeSBhIGRpcmVjdG9yeSBpbnRvIGEgZmlsZSIpOworCQlpZiAobW9kZSAhPSBSRVBPX01PREVfRElSICYmIHR5cGUgPT0gUkVQT19NT0RFX0RJUikKKwkJCWRpZSgiaW52YWxpZCBkdW1wOiBjYW5ub3QgbW9kaWZ5IGEgZmlsZSBpbnRvIGEgZGlyZWN0b3J5Iik7CisJCW5vZGVfY3R4LnR5cGUgPSBtb2RlOworCQlvbGRfbW9kZSA9IG1vZGU7CisJfSBlbHNlIGlmIChub2RlX2N0eC5hY3Rpb24gPT0gTk9ERUFDVF9BREQpIHsKKwkJaWYgKHR5cGUgPT0gUkVQT19NT0RFX0RJUikKKwkJCW9sZF9kYXRhID0gTlVMTDsKKwkJZWxzZSBpZiAoaGF2ZV90ZXh0KQorCQkJb2xkX2RhdGEgPSBlbXB0eV9ibG9iOworCQllbHNlCisJCQlkaWUoImludmFsaWQgZHVtcDogYWRkcyBub2RlIHdpdGhvdXQgdGV4dCIpOworCX0gZWxzZSB7CisJCWRpZSgiaW52YWxpZCBkdW1wOiBOb2RlLXBhdGggYmxvY2sgbGFja3MgTm9kZS1hY3Rpb24iKTsKKwl9CisKKwkvKgorCSAqIEFkanVzdCBtb2RlIHRvIHJlZmxlY3QgcHJvcGVydGllcy4KKwkgKi8KKwlpZiAoaGF2ZV9wcm9wcykgeworCQlpZiAoIW5vZGVfY3R4LnByb3BfZGVsdGEpCisJCQlub2RlX2N0eC50eXBlID0gdHlwZTsKKwkJaWYgKG5vZGVfY3R4LnByb3BfbGVuZ3RoKQorCQkJcmVhZF9wcm9wcygpOworCX0KKworCS8qCisJICogU2F2ZSB0aGUgcmVzdWx0LgorCSAqLworCWlmICh0eXBlID09IFJFUE9fTU9ERV9ESVIpCS8qIGRpcmVjdG9yaWVzIGFyZSBub3QgdHJhY2tlZC4gKi8KKwkJcmV0dXJuOworCWFzc2VydChvbGRfZGF0YSk7CisJaWYgKG9sZF9kYXRhID09IGVtcHR5X2Jsb2IpCisJCS8qIEZvciB0aGUgZmFzdF9leHBvcnRfKiBmdW5jdGlvbnMsIE5VTEwgbWVhbnMgZW1wdHkuICovCisJCW9sZF9kYXRhID0gTlVMTDsKKwlpZiAoIWhhdmVfdGV4dCkgeworCQlmYXN0X2V4cG9ydF9tb2RpZnkobm9kZV9jdHguZHN0LmJ1Ziwgbm9kZV9jdHgudHlwZSwgb2xkX2RhdGEpOworCQlyZXR1cm47CisJfQorCWlmICghbm9kZV9jdHgudGV4dF9kZWx0YSkgeworCQlmYXN0X2V4cG9ydF9tb2RpZnkobm9kZV9jdHguZHN0LmJ1Ziwgbm9kZV9jdHgudHlwZSwgImlubGluZSIpOworCQlmYXN0X2V4cG9ydF9kYXRhKG5vZGVfY3R4LnR5cGUsIG5vZGVfY3R4LnRleHRfbGVuZ3RoLCAmaW5wdXQpOworCQlyZXR1cm47CisJfQorCWZhc3RfZXhwb3J0X21vZGlmeShub2RlX2N0eC5kc3QuYnVmLCBub2RlX2N0eC50eXBlLCAiaW5saW5lIik7CisJZmFzdF9leHBvcnRfYmxvYl9kZWx0YShub2RlX2N0eC50eXBlLCBvbGRfbW9kZSwgb2xkX2RhdGEsCisJCQkJbm9kZV9jdHgudGV4dF9sZW5ndGgsICZpbnB1dCk7Cit9CisKK3N0YXRpYyB2b2lkIGJlZ2luX3JldmlzaW9uKGNvbnN0IGNoYXIgKnJlbW90ZV9yZWYpCit7CisJaWYgKCFyZXZfY3R4LnJldmlzaW9uKQkvKiByZXZpc2lvbiAwIGdldHMgbm8gZ2l0IGNvbW1pdC4gKi8KKwkJcmV0dXJuOworCWZhc3RfZXhwb3J0X2JlZ2luX2NvbW1pdChyZXZfY3R4LnJldmlzaW9uLCByZXZfY3R4LmF1dGhvci5idWYsCisJCSZyZXZfY3R4LmxvZywgZHVtcF9jdHgudXVpZC5idWYsIGR1bXBfY3R4LnVybC5idWYsCisJCXJldl9jdHgudGltZXN0YW1wLCByZW1vdGVfcmVmKTsKK30KKworc3RhdGljIHZvaWQgZW5kX3JldmlzaW9uKGNvbnN0IGNoYXIgKm5vdGVfcmVmKQoreworCXN0cnVjdCBzdHJidWYgbWFyayA9IFNUUkJVRl9JTklUOworCWlmIChyZXZfY3R4LnJldmlzaW9uKSB7CisJCWZhc3RfZXhwb3J0X2VuZF9jb21taXQocmV2X2N0eC5yZXZpc2lvbik7CisJCWZhc3RfZXhwb3J0X2JlZ2luX25vdGUocmV2X2N0eC5yZXZpc2lvbiwgInJlbW90ZS1zdm4iLAorCQkJCSJOb3RlIGNyZWF0ZWQgYnkgcmVtb3RlLXN2bi4iLCByZXZfY3R4LnRpbWVzdGFtcCwgbm90ZV9yZWYpOworCQlzdHJidWZfYWRkZigmbWFyaywgIjolIlBSSXUzMiwgcmV2X2N0eC5yZXZpc2lvbik7CisJCWZhc3RfZXhwb3J0X25vdGUobWFyay5idWYsICJpbmxpbmUiKTsKKwkJZmFzdF9leHBvcnRfYnVmX3RvX2RhdGEoJnJldl9jdHgubm90ZSk7CisJfQorfQorCit2b2lkIHN2bmR1bXBfcmVhZChjb25zdCBjaGFyICp1cmwsIGNvbnN0IGNoYXIgKmxvY2FsX3JlZiwgY29uc3QgY2hhciAqbm90ZXNfcmVmKQoreworCWNoYXIgKnZhbDsKKwljaGFyICp0OworCXVpbnQzMl90IGFjdGl2ZV9jdHggPSBEVU1QX0NUWDsKKwl1aW50MzJfdCBsZW47CisKKwlyZXNldF9kdW1wX2N0eCh1cmwpOworCXdoaWxlICgodCA9IGJ1ZmZlcl9yZWFkX2xpbmUoJmlucHV0KSkpIHsKKwkJdmFsID0gc3RyY2hyKHQsICc6Jyk7CisJCWlmICghdmFsKQorCQkJY29udGludWU7CisJCXZhbCsrOworCQlpZiAoKnZhbCAhPSAnICcpCisJCQljb250aW51ZTsKKwkJdmFsKys7CisKKwkJLyogc3RybGVuKGtleSkgKyAxICovCisJCXN3aXRjaCAodmFsIC0gdCAtIDEpIHsKKwkJY2FzZSBzaXplb2YoIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uIik6CisJCQlpZiAoY29uc3RjbXAodCwgIlNWTi1mcy1kdW1wLWZvcm1hdC12ZXJzaW9uIikpCisJCQkJY29udGludWU7CisJCQlkdW1wX2N0eC52ZXJzaW9uID0gYXRvaSh2YWwpOworCQkJaWYgKGR1bXBfY3R4LnZlcnNpb24gPiAzKQorCQkJCWRpZSgiZXhwZWN0ZWQgc3ZuIGR1bXAgZm9ybWF0IHZlcnNpb24gPD0gMywgZm91bmQgJSJQUkl1MzIsCisJCQkJICAgIGR1bXBfY3R4LnZlcnNpb24pOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJVVUlEIik6CisJCQlpZiAoY29uc3RjbXAodCwgIlVVSUQiKSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmJ1Zl9yZXNldCgmZHVtcF9jdHgudXVpZCk7CisJCQlzdHJidWZfYWRkc3RyKCZkdW1wX2N0eC51dWlkLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJSZXZpc2lvbi1udW1iZXIiKToKKwkJCWlmIChjb25zdGNtcCh0LCAiUmV2aXNpb24tbnVtYmVyIikpCisJCQkJY29udGludWU7CisJCQlpZiAoYWN0aXZlX2N0eCA9PSBOT0RFX0NUWCkKKwkJCQloYW5kbGVfbm9kZSgpOworCQkJaWYgKGFjdGl2ZV9jdHggPT0gUkVWX0NUWCkKKwkJCQliZWdpbl9yZXZpc2lvbihsb2NhbF9yZWYpOworCQkJaWYgKGFjdGl2ZV9jdHggIT0gRFVNUF9DVFgpCisJCQkJZW5kX3JldmlzaW9uKG5vdGVzX3JlZik7CisJCQlhY3RpdmVfY3R4ID0gUkVWX0NUWDsKKwkJCXJlc2V0X3Jldl9jdHgoYXRvaSh2YWwpKTsKKwkJCXN0cmJ1Zl9hZGRmKCZyZXZfY3R4Lm5vdGUsICIlc1xuIiwgdCk7CisJCQlicmVhazsKKwkJY2FzZSBzaXplb2YoIk5vZGUtcGF0aCIpOgorCQkJaWYgKGNvbnN0Y21wKHQsICJOb2RlLSIpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFjb25zdGNtcCh0ICsgc3RybGVuKCJOb2RlLSIpLCAicGF0aCIpKSB7CisJCQkJaWYgKGFjdGl2ZV9jdHggPT0gTk9ERV9DVFgpCisJCQkJCWhhbmRsZV9ub2RlKCk7CisJCQkJaWYgKGFjdGl2ZV9jdHggPT0gUkVWX0NUWCkKKwkJCQkJYmVnaW5fcmV2aXNpb24obG9jYWxfcmVmKTsKKwkJCQlhY3RpdmVfY3R4ID0gTk9ERV9DVFg7CisJCQkJcmVzZXRfbm9kZV9jdHgodmFsKTsKKwkJCQlzdHJidWZfYWRkZigmcmV2X2N0eC5ub3RlLCAiJXNcbiIsIHQpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNvbnN0Y21wKHQgKyBzdHJsZW4oIk5vZGUtIiksICJraW5kIikpCisJCQkJY29udGludWU7CisJCQlzdHJidWZfYWRkZigmcmV2X2N0eC5ub3RlLCAiJXNcbiIsIHQpOworCQkJaWYgKCFzdHJjbXAodmFsLCAiZGlyIikpCisJCQkJbm9kZV9jdHgudHlwZSA9IFJFUE9fTU9ERV9ESVI7CisJCQllbHNlIGlmICghc3RyY21wKHZhbCwgImZpbGUiKSkKKwkJCQlub2RlX2N0eC50eXBlID0gUkVQT19NT0RFX0JMQjsKKwkJCWVsc2UKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gbm9kZS1raW5kOiAlc1xuIiwgdmFsKTsKKwkJCWJyZWFrOworCQljYXNlIHNpemVvZigiTm9kZS1hY3Rpb24iKToKKwkJCWlmIChjb25zdGNtcCh0LCAiTm9kZS1hY3Rpb24iKSkKKwkJCQljb250aW51ZTsKKwkJCXN0cmJ1Zl9hZGRmKCZyZXZfY3R4Lm5vdGUsICIlc1xuIiwgdCk7CisJCQlpZiAoIXN0cmNtcCh2YWwsICJkZWxldGUiKSkgeworCQkJCW5vZGVfY3R4LmFjdGlvbiA9IE5PREVBQ1RfREVMRVRFOworCQkJfSBlbHNlIGlmICghc3RyY21wKHZhbCwgImFkZCIpKSB7CisJCQkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9BREQ7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAodmFsLCAiY2hhbmdlIikpIHsKKwkJCQlub2RlX2N0eC5hY3Rpb24gPSBOT0RFQUNUX0NIQU5HRTsKKwkJCX0gZWxzZSBpZiAoIXN0cmNtcCh2YWwsICJyZXBsYWNlIikpIHsKKwkJCQlub2RlX2N0eC5hY3Rpb24gPSBOT0RFQUNUX1JFUExBQ0U7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBub2RlLWFjdGlvbjogJXNcbiIsIHZhbCk7CisJCQkJbm9kZV9jdHguYWN0aW9uID0gTk9ERUFDVF9VTktOT1dOOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJOb2RlLWNvcHlmcm9tLXBhdGgiKToKKwkJCWlmIChjb25zdGNtcCh0LCAiTm9kZS1jb3B5ZnJvbS1wYXRoIikpCisJCQkJY29udGludWU7CisJCQlzdHJidWZfcmVzZXQoJm5vZGVfY3R4LnNyYyk7CisJCQlzdHJidWZfYWRkc3RyKCZub2RlX2N0eC5zcmMsIHZhbCk7CisJCQlzdHJidWZfYWRkZigmcmV2X2N0eC5ub3RlLCAiJXNcbiIsIHQpOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJOb2RlLWNvcHlmcm9tLXJldiIpOgorCQkJaWYgKGNvbnN0Y21wKHQsICJOb2RlLWNvcHlmcm9tLXJldiIpKQorCQkJCWNvbnRpbnVlOworCQkJbm9kZV9jdHguc3JjUmV2ID0gYXRvaSh2YWwpOworCQkJc3RyYnVmX2FkZGYoJnJldl9jdHgubm90ZSwgIiVzXG4iLCB0KTsKKwkJCWJyZWFrOworCQljYXNlIHNpemVvZigiVGV4dC1jb250ZW50LWxlbmd0aCIpOgorCQkJaWYgKGNvbnN0Y21wKHQsICJUZXh0IikgJiYgY29uc3RjbXAodCwgIlByb3AiKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChjb25zdGNtcCh0ICsgNCwgIi1jb250ZW50LWxlbmd0aCIpKQorCQkJCWNvbnRpbnVlOworCQkJeworCQkJCWNoYXIgKmVuZDsKKwkJCQl1aW50bWF4X3QgbGVuOworCisJCQkJbGVuID0gc3RydG91bWF4KHZhbCwgJmVuZCwgMTApOworCQkJCWlmICghaXNkaWdpdCgqdmFsKSB8fCAqZW5kKQorCQkJCQlkaWUoImludmFsaWQgZHVtcDogbm9uLW51bWVyaWMgbGVuZ3RoICVzIiwgdmFsKTsKKwkJCQlpZiAobGVuID4gbWF4aW11bV9zaWduZWRfdmFsdWVfb2ZfdHlwZShvZmZfdCkpCisJCQkJCWRpZSgidW5yZXByZXNlbnRhYmxlIGxlbmd0aCBpbiBkdW1wOiAlcyIsIHZhbCk7CisKKwkJCQlpZiAoKnQgPT0gJ1QnKQorCQkJCQlub2RlX2N0eC50ZXh0X2xlbmd0aCA9IChvZmZfdCkgbGVuOworCQkJCWVsc2UKKwkJCQkJbm9kZV9jdHgucHJvcF9sZW5ndGggPSAob2ZmX3QpIGxlbjsKKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSBzaXplb2YoIlRleHQtZGVsdGEiKToKKwkJCWlmICghY29uc3RjbXAodCwgIlRleHQtZGVsdGEiKSkgeworCQkJCW5vZGVfY3R4LnRleHRfZGVsdGEgPSAhc3RyY21wKHZhbCwgInRydWUiKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChjb25zdGNtcCh0LCAiUHJvcC1kZWx0YSIpKQorCQkJCWNvbnRpbnVlOworCQkJbm9kZV9jdHgucHJvcF9kZWx0YSA9ICFzdHJjbXAodmFsLCAidHJ1ZSIpOworCQkJYnJlYWs7CisJCWNhc2Ugc2l6ZW9mKCJDb250ZW50LWxlbmd0aCIpOgorCQkJaWYgKGNvbnN0Y21wKHQsICJDb250ZW50LWxlbmd0aCIpKQorCQkJCWNvbnRpbnVlOworCQkJbGVuID0gYXRvaSh2YWwpOworCQkJdCA9IGJ1ZmZlcl9yZWFkX2xpbmUoJmlucHV0KTsKKwkJCWlmICghdCkKKwkJCQlkaWVfc2hvcnRfcmVhZCgpOworCQkJaWYgKCp0KQorCQkJCWRpZSgiaW52YWxpZCBkdW1wOiBleHBlY3RlZCBibGFuayBsaW5lIGFmdGVyIGNvbnRlbnQgbGVuZ3RoIGhlYWRlciIpOworCQkJaWYgKGFjdGl2ZV9jdHggPT0gUkVWX0NUWCkgeworCQkJCXJlYWRfcHJvcHMoKTsKKwkJCX0gZWxzZSBpZiAoYWN0aXZlX2N0eCA9PSBOT0RFX0NUWCkgeworCQkJCWhhbmRsZV9ub2RlKCk7CisJCQkJYWN0aXZlX2N0eCA9IElOVEVSTk9ERV9DVFg7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiVW5leHBlY3RlZCBjb250ZW50IGxlbmd0aCBoZWFkZXI6ICUiUFJJdTMyIlxuIiwgbGVuKTsKKwkJCQlpZiAoYnVmZmVyX3NraXBfYnl0ZXMoJmlucHV0LCBsZW4pICE9IGxlbikKKwkJCQkJZGllX3Nob3J0X3JlYWQoKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoYnVmZmVyX2ZlcnJvcigmaW5wdXQpKQorCQlkaWVfc2hvcnRfcmVhZCgpOworCWlmIChhY3RpdmVfY3R4ID09IE5PREVfQ1RYKQorCQloYW5kbGVfbm9kZSgpOworCWlmIChhY3RpdmVfY3R4ID09IFJFVl9DVFgpCisJCWJlZ2luX3JldmlzaW9uKGxvY2FsX3JlZik7CisJaWYgKGFjdGl2ZV9jdHggIT0gRFVNUF9DVFgpCisJCWVuZF9yZXZpc2lvbihub3Rlc19yZWYpOworfQorCitzdGF0aWMgdm9pZCBpbml0KGludCByZXBvcnRfZmQpCit7CisJZmFzdF9leHBvcnRfaW5pdChyZXBvcnRfZmQpOworCXN0cmJ1Zl9pbml0KCZkdW1wX2N0eC51dWlkLCA0MDk2KTsKKwlzdHJidWZfaW5pdCgmZHVtcF9jdHgudXJsLCA0MDk2KTsKKwlzdHJidWZfaW5pdCgmcmV2X2N0eC5sb2csIDQwOTYpOworCXN0cmJ1Zl9pbml0KCZyZXZfY3R4LmF1dGhvciwgNDA5Nik7CisJc3RyYnVmX2luaXQoJnJldl9jdHgubm90ZSwgNDA5Nik7CisJc3RyYnVmX2luaXQoJm5vZGVfY3R4LnNyYywgNDA5Nik7CisJc3RyYnVmX2luaXQoJm5vZGVfY3R4LmRzdCwgNDA5Nik7CisJcmVzZXRfZHVtcF9jdHgoTlVMTCk7CisJcmVzZXRfcmV2X2N0eCgwKTsKKwlyZXNldF9ub2RlX2N0eChOVUxMKTsKKwlyZXR1cm47Cit9CisKK2ludCBzdm5kdW1wX2luaXQoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJaWYgKGJ1ZmZlcl9pbml0KCZpbnB1dCwgZmlsZW5hbWUpKQorCQlyZXR1cm4gZXJyb3IoImNhbm5vdCBvcGVuICVzOiAlcyIsIGZpbGVuYW1lID8gZmlsZW5hbWUgOiAiTlVMTCIsIHN0cmVycm9yKGVycm5vKSk7CisJaW5pdChSRVBPUlRfRklMRU5PKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHN2bmR1bXBfaW5pdF9mZChpbnQgaW5fZmQsIGludCBiYWNrX2ZkKQoreworCWlmKGJ1ZmZlcl9mZGluaXQoJmlucHV0LCB4ZHVwKGluX2ZkKSkpCisJCXJldHVybiBlcnJvcigiY2Fubm90IG9wZW4gZmQgJWQ6ICVzIiwgaW5fZmQsIHN0cmVycm9yKGVycm5vKSk7CisJaW5pdCh4ZHVwKGJhY2tfZmQpKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzdm5kdW1wX2RlaW5pdCh2b2lkKQoreworCWZhc3RfZXhwb3J0X2RlaW5pdCgpOworCXJlc2V0X2R1bXBfY3R4KE5VTEwpOworCXJlc2V0X3Jldl9jdHgoMCk7CisJcmVzZXRfbm9kZV9jdHgoTlVMTCk7CisJc3RyYnVmX3JlbGVhc2UoJnJldl9jdHgubG9nKTsKKwlzdHJidWZfcmVsZWFzZSgmcmV2X2N0eC5hdXRob3IpOworCXN0cmJ1Zl9yZWxlYXNlKCZyZXZfY3R4Lm5vdGUpOworCXN0cmJ1Zl9yZWxlYXNlKCZub2RlX2N0eC5zcmMpOworCXN0cmJ1Zl9yZWxlYXNlKCZub2RlX2N0eC5kc3QpOworCWlmIChidWZmZXJfZGVpbml0KCZpbnB1dCkpCisJCWZwcmludGYoc3RkZXJyLCAiSW5wdXQgZXJyb3JcbiIpOworCWlmIChmZXJyb3Ioc3Rkb3V0KSkKKwkJZnByaW50ZihzdGRlcnIsICJPdXRwdXQgZXJyb3JcbiIpOworfQorCit2b2lkIHN2bmR1bXBfcmVzZXQodm9pZCkKK3sKKwlzdHJidWZfcmVsZWFzZSgmZHVtcF9jdHgudXVpZCk7CisJc3RyYnVmX3JlbGVhc2UoJmR1bXBfY3R4LnVybCk7CisJc3RyYnVmX3JlbGVhc2UoJnJldl9jdHgubG9nKTsKKwlzdHJidWZfcmVsZWFzZSgmcmV2X2N0eC5hdXRob3IpOworfQpkaWZmIC0tZ2l0IGEvdmNzLXN2bi9zdm5kdW1wLmggYi92Y3Mtc3ZuL3N2bmR1bXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGViMTI5Ci0tLSAvZGV2L251bGwKKysrIGIvdmNzLXN2bi9zdm5kdW1wLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBTVk5EVU1QX0hfCisjZGVmaW5lIFNWTkRVTVBfSF8KKworaW50IHN2bmR1bXBfaW5pdChjb25zdCBjaGFyICpmaWxlbmFtZSk7CitpbnQgc3ZuZHVtcF9pbml0X2ZkKGludCBpbl9mZCwgaW50IGJhY2tfZmQpOwordm9pZCBzdm5kdW1wX3JlYWQoY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICpsb2NhbF9yZWYsIGNvbnN0IGNoYXIgKm5vdGVzX3JlZik7Cit2b2lkIHN2bmR1bXBfZGVpbml0KHZvaWQpOwordm9pZCBzdm5kdW1wX3Jlc2V0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3ZlcnNpb24uYyBiL3ZlcnNpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTA2YTgwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyc2lvbi5jCkBAIC0wLDAgKzEsMzggQEAKKyNpbmNsdWRlICJnaXQtY29tcGF0LXV0aWwuaCIKKyNpbmNsdWRlICJ2ZXJzaW9uLmgiCisjaW5jbHVkZSAic3RyYnVmLmgiCisKK2NvbnN0IGNoYXIgZ2l0X3ZlcnNpb25fc3RyaW5nW10gPSBHSVRfVkVSU0lPTjsKKworY29uc3QgY2hhciAqZ2l0X3VzZXJfYWdlbnQodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqYWdlbnQgPSBOVUxMOworCisJaWYgKCFhZ2VudCkgeworCQlhZ2VudCA9IGdldGVudigiR0lUX1VTRVJfQUdFTlQiKTsKKwkJaWYgKCFhZ2VudCkKKwkJCWFnZW50ID0gR0lUX1VTRVJfQUdFTlQ7CisJfQorCisJcmV0dXJuIGFnZW50OworfQorCitjb25zdCBjaGFyICpnaXRfdXNlcl9hZ2VudF9zYW5pdGl6ZWQodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqYWdlbnQgPSBOVUxMOworCisJaWYgKCFhZ2VudCkgeworCQlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCQlpbnQgaTsKKworCQlzdHJidWZfYWRkc3RyKCZidWYsIGdpdF91c2VyX2FnZW50KCkpOworCQlzdHJidWZfdHJpbSgmYnVmKTsKKwkJZm9yIChpID0gMDsgaSA8IGJ1Zi5sZW47IGkrKykgeworCQkJaWYgKGJ1Zi5idWZbaV0gPD0gMzIgfHwgYnVmLmJ1ZltpXSA+PSAxMjcpCisJCQkJYnVmLmJ1ZltpXSA9ICcuJzsKKwkJfQorCQlhZ2VudCA9IGJ1Zi5idWY7CisJfQorCisJcmV0dXJuIGFnZW50OworfQpkaWZmIC0tZ2l0IGEvdmVyc2lvbi5oIGIvdmVyc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MTFhNGYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJzaW9uLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIFZFUlNJT05fSAorI2RlZmluZSBWRVJTSU9OX0gKKworZXh0ZXJuIGNvbnN0IGNoYXIgZ2l0X3ZlcnNpb25fc3RyaW5nW107CisKK2NvbnN0IGNoYXIgKmdpdF91c2VyX2FnZW50KHZvaWQpOworY29uc3QgY2hhciAqZ2l0X3VzZXJfYWdlbnRfc2FuaXRpemVkKHZvaWQpOworCisjZW5kaWYgLyogVkVSU0lPTl9IICovCmRpZmYgLS1naXQgYS92ZXJzaW9uY21wLmMgYi92ZXJzaW9uY21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBiZmQxMAotLS0gL2Rldi9udWxsCisrKyBiL3ZlcnNpb25jbXAuYwpAQCAtMCwwICsxLDE0MyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKworLyoKKyAqIHZlcnNpb25jbXAoKTogY29waWVkIGZyb20gc3RyaW5nL3N0cnZlcnNjbXAuYyBpbiBnbGliYyBjb21taXQKKyAqIGVlOTI0N2MzOGE4ZGVmMjRhNTllYjVjZmI3MTk2YTk4YmVmOGNmZGMsIHJlZm9ybWF0dGVkIHRvIEdpdCBjb2RpbmcKKyAqIHN0eWxlLiBUaGUgaW1wbGVtZW50YXRpb24gaXMgdW5kZXIgTEdQTC0yLjEgYW5kIEdpdCByZWxpY2Vuc2VzIGl0CisgKiB0byBHUEx2Mi4KKyAqLworCisvKgorICogc3RhdGVzOiBTX046IG5vcm1hbCwgU19JOiBjb21wYXJpbmcgaW50ZWdyYWwgcGFydCwgU19GOiBjb21wYXJpbmcKKyAqIGZyYWN0aW9ubmFsIHBhcnRzLCBTX1o6IGlkZW0gYnV0IHdpdGggbGVhZGluZyBaZXJvZXMgb25seQorICovCisjZGVmaW5lICBTX04gICAgMHgwCisjZGVmaW5lICBTX0kgICAgMHgzCisjZGVmaW5lICBTX0YgICAgMHg2CisjZGVmaW5lICBTX1ogICAgMHg5CisKKy8qIHJlc3VsdF90eXBlOiBDTVA6IHJldHVybiBkaWZmOyBMRU46IGNvbXBhcmUgdXNpbmcgbGVuX2RpZmYvZGlmZiAqLworI2RlZmluZSAgQ01QICAgIDIKKyNkZWZpbmUgIExFTiAgICAzCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKnByZXJlbGVhc2VzOworc3RhdGljIGludCBpbml0aWFsaXplZDsKKworLyoKKyAqIHAxIGFuZCBwMiBwb2ludCB0byB0aGUgZmlyc3QgZGlmZmVyZW50IGNoYXJhY3RlciBpbiB0d28gc3RyaW5ncy4gSWYKKyAqIGVpdGhlciBwMSBvciBwMiBzdGFydHMgd2l0aCBhIHByZXJlbGVhc2Ugc3VmZml4LCBpdCB3aWxsIGJlIGZvcmNlZAorICogdG8gYmUgb24gdG9wLgorICoKKyAqIElmIGJvdGggcDEgYW5kIHAyIHN0YXJ0IHdpdGggKGRpZmZlcmVudCkgc3VmZml4LCB0aGUgb3JkZXIgaXMKKyAqIGRldGVybWluZWQgYnkgY29uZmlnIGZpbGUuCisgKgorICogTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZGVhbCB3aXRoIHRoZSBzaXR1YXRpb24gd2hlbiBib3RoIHAxIGFuZAorICogcDIgc3RhcnQgd2l0aCB0aGUgc2FtZSBzdWZmaXggYmVjYXVzZSB0aGUgY29tbW9uIHBhcnQgaXMgYWxyZWFkeQorICogY29uc3VtZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBSZXR1cm4gbm9uLXplcm8gaWYgKmRpZmYgY29udGFpbnMgdGhlIHJldHVybiB2YWx1ZSBmb3IgdmVyc2lvbmNtcCgpCisgKi8KK3N0YXRpYyBpbnQgc3dhcF9wcmVyZWxlYXNlcyhjb25zdCB2b2lkICpwMV8sCisJCQkgICAgY29uc3Qgdm9pZCAqcDJfLAorCQkJICAgIGludCAqZGlmZikKK3sKKwljb25zdCBjaGFyICpwMSA9IHAxXzsKKwljb25zdCBjaGFyICpwMiA9IHAyXzsKKwlpbnQgaSwgaTEgPSAtMSwgaTIgPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBwcmVyZWxlYXNlcy0+bnI7IGkrKykgeworCQljb25zdCBjaGFyICpzdWZmaXggPSBwcmVyZWxlYXNlcy0+aXRlbXNbaV0uc3RyaW5nOworCQlpZiAoaTEgPT0gLTEgJiYgc3RhcnRzX3dpdGgocDEsIHN1ZmZpeCkpCisJCQlpMSA9IGk7CisJCWlmIChpMiA9PSAtMSAmJiBzdGFydHNfd2l0aChwMiwgc3VmZml4KSkKKwkJCWkyID0gaTsKKwl9CisJaWYgKGkxID09IC0xICYmIGkyID09IC0xKQorCQlyZXR1cm4gMDsKKwlpZiAoaTEgPj0gMCAmJiBpMiA+PSAwKQorCQkqZGlmZiA9IGkxIC0gaTI7CisJZWxzZSBpZiAoaTEgPj0gMCkKKwkJKmRpZmYgPSAtMTsKKwllbHNlIC8qIGlmIChpMiA+PSAwKSAqLworCQkqZGlmZiA9IDE7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBDb21wYXJlIFMxIGFuZCBTMiBhcyBzdHJpbmdzIGhvbGRpbmcgaW5kaWNlcy92ZXJzaW9uIG51bWJlcnMsCisgKiByZXR1cm5pbmcgbGVzcyB0aGFuLCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gemVybyBpZiBTMSBpcyBsZXNzCisgKiB0aGFuLCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gUzIgKGZvciBtb3JlIGluZm8sIHNlZSB0aGUgdGV4aW5mbworICogZG9jKS4KKyAqLworCitpbnQgdmVyc2lvbmNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcDEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzMTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwMiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHMyOworCXVuc2lnbmVkIGNoYXIgYzEsIGMyOworCWludCBzdGF0ZSwgZGlmZjsKKworCS8qCisJICogU3ltYm9sKHMpICAgIDAgICAgICAgWzEtOV0gICBvdGhlcnMKKwkgKiBUcmFuc2l0aW9uICAgKDEwKSAwICAoMDEpIGQgICgwMCkgeAorCSAqLworCXN0YXRpYyBjb25zdCB1aW50OF90IG5leHRfc3RhdGVbXSA9IHsKKwkJLyogc3RhdGUgICAgeCAgICBkICAgIDAgICovCisJCS8qIFNfTiAqLyAgU19OLCBTX0ksIFNfWiwKKwkJLyogU19JICovICBTX04sIFNfSSwgU19JLAorCQkvKiBTX0YgKi8gIFNfTiwgU19GLCBTX0YsCisJCS8qIFNfWiAqLyAgU19OLCBTX0YsIFNfWgorCX07CisKKwlzdGF0aWMgY29uc3QgaW50OF90IHJlc3VsdF90eXBlW10gPSB7CisJCS8qIHN0YXRlICAgeC94ICB4L2QgIHgvMCAgZC94ICBkL2QgIGQvMCAgMC94ICAwL2QgIDAvMCAgKi8KKworCQkvKiBTX04gKi8gIENNUCwgQ01QLCBDTVAsIENNUCwgTEVOLCBDTVAsIENNUCwgQ01QLCBDTVAsCisJCS8qIFNfSSAqLyAgQ01QLCAtMSwgIC0xLCAgKzEsICBMRU4sIExFTiwgKzEsICBMRU4sIExFTiwKKwkJLyogU19GICovICBDTVAsIENNUCwgQ01QLCBDTVAsIENNUCwgQ01QLCBDTVAsIENNUCwgQ01QLAorCQkvKiBTX1ogKi8gIENNUCwgKzEsICArMSwgIC0xLCAgQ01QLCBDTVAsIC0xLCAgQ01QLCBDTVAKKwl9OworCisJaWYgKHAxID09IHAyKQorCQlyZXR1cm4gMDsKKworCWMxID0gKnAxKys7CisJYzIgPSAqcDIrKzsKKwkvKiBIaW50OiAnMCcgaXMgYSBkaWdpdCB0b28uICAqLworCXN0YXRlID0gU19OICsgKChjMSA9PSAnMCcpICsgKGlzZGlnaXQgKGMxKSAhPSAwKSk7CisKKwl3aGlsZSAoKGRpZmYgPSBjMSAtIGMyKSA9PSAwKSB7CisJCWlmIChjMSA9PSAnXDAnKQorCQkJcmV0dXJuIGRpZmY7CisKKwkJc3RhdGUgPSBuZXh0X3N0YXRlW3N0YXRlXTsKKwkJYzEgPSAqcDErKzsKKwkJYzIgPSAqcDIrKzsKKwkJc3RhdGUgKz0gKGMxID09ICcwJykgKyAoaXNkaWdpdCAoYzEpICE9IDApOworCX0KKworCWlmICghaW5pdGlhbGl6ZWQpIHsKKwkJaW5pdGlhbGl6ZWQgPSAxOworCQlwcmVyZWxlYXNlcyA9IGdpdF9jb25maWdfZ2V0X3ZhbHVlX211bHRpKCJ2ZXJzaW9uc29ydC5wcmVyZWxlYXNlc3VmZml4Iik7CisJfQorCWlmIChwcmVyZWxlYXNlcyAmJiBzd2FwX3ByZXJlbGVhc2VzKHAxIC0gMSwgcDIgLSAxLCAmZGlmZikpCisJCXJldHVybiBkaWZmOworCisJc3RhdGUgPSByZXN1bHRfdHlwZVtzdGF0ZSAqIDMgKyAoKChjMiA9PSAnMCcpICsgKGlzZGlnaXQgKGMyKSAhPSAwKSkpXTsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIENNUDoKKwkJcmV0dXJuIGRpZmY7CisKKwljYXNlIExFTjoKKwkJd2hpbGUgKGlzZGlnaXQgKCpwMSsrKSkKKwkJCWlmICghaXNkaWdpdCAoKnAyKyspKQorCQkJCXJldHVybiAxOworCisJCXJldHVybiBpc2RpZ2l0ICgqcDIpID8gLTEgOiBkaWZmOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIHN0YXRlOworCX0KK30KZGlmZiAtLWdpdCBhL3dhbGtlci5jIGIvd2Fsa2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RlYjYzZgotLS0gL2Rldi9udWxsCisrKyBiL3dhbGtlci5jCkBAIC0wLDAgKzEsMzMwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ3YWxrZXIuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJ0cmVlLmgiCisjaW5jbHVkZSAidHJlZS13YWxrLmgiCisjaW5jbHVkZSAidGFnLmgiCisjaW5jbHVkZSAiYmxvYi5oIgorI2luY2x1ZGUgInJlZnMuaCIKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgY3VycmVudF9jb21taXRfc2hhMVsyMF07CisKK3ZvaWQgd2Fsa2VyX3NheShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKmZtdCwgY29uc3QgY2hhciAqaGV4KQoreworCWlmICh3YWxrZXItPmdldF92ZXJib3NlbHkpCisJCWZwcmludGYoc3RkZXJyLCBmbXQsIGhleCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9taXNzaW5nKGNvbnN0IHN0cnVjdCBvYmplY3QgKm9iaikKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBvYnRhaW4gbmVlZGVkICVzICVzXG4iLAorCQlvYmotPnR5cGUgPyB0eXBlbmFtZShvYmotPnR5cGUpOiAib2JqZWN0IiwKKwkJc2hhMV90b19oZXgob2JqLT5zaGExKSk7CisJaWYgKCFpc19udWxsX3NoYTEoY3VycmVudF9jb21taXRfc2hhMSkpCisJCWZwcmludGYoc3RkZXJyLCAid2hpbGUgcHJvY2Vzc2luZyBjb21taXQgJXMuXG4iLAorCQkJc2hhMV90b19oZXgoY3VycmVudF9jb21taXRfc2hhMSkpOworfQorCitzdGF0aWMgaW50IHByb2Nlc3Moc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopOworCitzdGF0aWMgaW50IHByb2Nlc3NfdHJlZShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIHN0cnVjdCB0cmVlICp0cmVlKQoreworCXN0cnVjdCB0cmVlX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbmFtZV9lbnRyeSBlbnRyeTsKKworCWlmIChwYXJzZV90cmVlKHRyZWUpKQorCQlyZXR1cm4gLTE7CisKKwlpbml0X3RyZWVfZGVzYygmZGVzYywgdHJlZS0+YnVmZmVyLCB0cmVlLT5zaXplKTsKKwl3aGlsZSAodHJlZV9lbnRyeSgmZGVzYywgJmVudHJ5KSkgeworCQlzdHJ1Y3Qgb2JqZWN0ICpvYmogPSBOVUxMOworCisJCS8qIHN1Ym1vZHVsZSBjb21taXRzIGFyZSBub3Qgc3RvcmVkIGluIHRoZSBzdXBlcnByb2plY3QgKi8KKwkJaWYgKFNfSVNHSVRMSU5LKGVudHJ5Lm1vZGUpKQorCQkJY29udGludWU7CisJCWlmIChTX0lTRElSKGVudHJ5Lm1vZGUpKSB7CisJCQlzdHJ1Y3QgdHJlZSAqdHJlZSA9IGxvb2t1cF90cmVlKGVudHJ5LnNoYTEpOworCQkJaWYgKHRyZWUpCisJCQkJb2JqID0gJnRyZWUtPm9iamVjdDsKKwkJfQorCQllbHNlIHsKKwkJCXN0cnVjdCBibG9iICpibG9iID0gbG9va3VwX2Jsb2IoZW50cnkuc2hhMSk7CisJCQlpZiAoYmxvYikKKwkJCQlvYmogPSAmYmxvYi0+b2JqZWN0OworCQl9CisJCWlmICghb2JqIHx8IHByb2Nlc3Mod2Fsa2VyLCBvYmopKQorCQkJcmV0dXJuIC0xOworCX0KKwlmcmVlX3RyZWVfYnVmZmVyKHRyZWUpOworCXJldHVybiAwOworfQorCisvKiBSZW1lbWJlciB0byB1cGRhdGUgb2JqZWN0IGZsYWcgYWxsb2NhdGlvbiBpbiBvYmplY3QuaCAqLworI2RlZmluZSBDT01QTEVURQkoMVUgPDwgMCkKKyNkZWZpbmUgU0VFTgkJKDFVIDw8IDEpCisjZGVmaW5lIFRPX1NDQU4JCSgxVSA8PCAyKQorCitzdGF0aWMgc3RydWN0IGNvbW1pdF9saXN0ICpjb21wbGV0ZSA9IE5VTEw7CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19jb21taXQoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgY29tbWl0ICpjb21taXQpCit7CisJaWYgKHBhcnNlX2NvbW1pdChjb21taXQpKQorCQlyZXR1cm4gLTE7CisKKwl3aGlsZSAoY29tcGxldGUgJiYgY29tcGxldGUtPml0ZW0tPmRhdGUgPj0gY29tbWl0LT5kYXRlKSB7CisJCXBvcF9tb3N0X3JlY2VudF9jb21taXQoJmNvbXBsZXRlLCBDT01QTEVURSk7CisJfQorCisJaWYgKGNvbW1pdC0+b2JqZWN0LmZsYWdzICYgQ09NUExFVEUpCisJCXJldHVybiAwOworCisJaGFzaGNweShjdXJyZW50X2NvbW1pdF9zaGExLCBjb21taXQtPm9iamVjdC5zaGExKTsKKworCXdhbGtlcl9zYXkod2Fsa2VyLCAid2FsayAlc1xuIiwgc2hhMV90b19oZXgoY29tbWl0LT5vYmplY3Quc2hhMSkpOworCisJaWYgKHdhbGtlci0+Z2V0X3RyZWUpIHsKKwkJaWYgKHByb2Nlc3Mod2Fsa2VyLCAmY29tbWl0LT50cmVlLT5vYmplY3QpKQorCQkJcmV0dXJuIC0xOworCQlpZiAoIXdhbGtlci0+Z2V0X2FsbCkKKwkJCXdhbGtlci0+Z2V0X3RyZWUgPSAwOworCX0KKwlpZiAod2Fsa2VyLT5nZXRfaGlzdG9yeSkgeworCQlzdHJ1Y3QgY29tbWl0X2xpc3QgKnBhcmVudHMgPSBjb21taXQtPnBhcmVudHM7CisJCWZvciAoOyBwYXJlbnRzOyBwYXJlbnRzID0gcGFyZW50cy0+bmV4dCkgeworCQkJaWYgKHByb2Nlc3Mod2Fsa2VyLCAmcGFyZW50cy0+aXRlbS0+b2JqZWN0KSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc190YWcoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3QgdGFnICp0YWcpCit7CisJaWYgKHBhcnNlX3RhZyh0YWcpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHByb2Nlc3Mod2Fsa2VyLCB0YWctPnRhZ2dlZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb2JqZWN0X2xpc3QgKnByb2Nlc3NfcXVldWUgPSBOVUxMOworc3RhdGljIHN0cnVjdCBvYmplY3RfbGlzdCAqKnByb2Nlc3NfcXVldWVfZW5kID0gJnByb2Nlc3NfcXVldWU7CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19vYmplY3Qoc3RydWN0IHdhbGtlciAqd2Fsa2VyLCBzdHJ1Y3Qgb2JqZWN0ICpvYmopCit7CisJaWYgKG9iai0+dHlwZSA9PSBPQkpfQ09NTUlUKSB7CisJCWlmIChwcm9jZXNzX2NvbW1pdCh3YWxrZXIsIChzdHJ1Y3QgY29tbWl0ICopb2JqKSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChvYmotPnR5cGUgPT0gT0JKX1RSRUUpIHsKKwkJaWYgKHByb2Nlc3NfdHJlZSh3YWxrZXIsIChzdHJ1Y3QgdHJlZSAqKW9iaikpCisJCQlyZXR1cm4gLTE7CisJCXJldHVybiAwOworCX0KKwlpZiAob2JqLT50eXBlID09IE9CSl9CTE9CKSB7CisJCXJldHVybiAwOworCX0KKwlpZiAob2JqLT50eXBlID09IE9CSl9UQUcpIHsKKwkJaWYgKHByb2Nlc3NfdGFnKHdhbGtlciwgKHN0cnVjdCB0YWcgKilvYmopKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGVycm9yKCJVbmFibGUgdG8gZGV0ZXJtaW5lIHJlcXVpcmVtZW50cyAiCisJCSAgICAgIm9mIHR5cGUgJXMgZm9yICVzIiwKKwkJICAgICB0eXBlbmFtZShvYmotPnR5cGUpLCBzaGExX3RvX2hleChvYmotPnNoYTEpKTsKK30KKworc3RhdGljIGludCBwcm9jZXNzKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgc3RydWN0IG9iamVjdCAqb2JqKQoreworCWlmIChvYmotPmZsYWdzICYgU0VFTikKKwkJcmV0dXJuIDA7CisJb2JqLT5mbGFncyB8PSBTRUVOOworCisJaWYgKGhhc19zaGExX2ZpbGUob2JqLT5zaGExKSkgeworCQkvKiBXZSBhbHJlYWR5IGhhdmUgaXQsIHNvIHdlIHNob3VsZCBzY2FuIGl0IG5vdy4gKi8KKwkJb2JqLT5mbGFncyB8PSBUT19TQ0FOOworCX0KKwllbHNlIHsKKwkJaWYgKG9iai0+ZmxhZ3MgJiBDT01QTEVURSkKKwkJCXJldHVybiAwOworCQl3YWxrZXItPnByZWZldGNoKHdhbGtlciwgb2JqLT5zaGExKTsKKwl9CisKKwlvYmplY3RfbGlzdF9pbnNlcnQob2JqLCBwcm9jZXNzX3F1ZXVlX2VuZCk7CisJcHJvY2Vzc19xdWV1ZV9lbmQgPSAmKCpwcm9jZXNzX3F1ZXVlX2VuZCktPm5leHQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9vcChzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpCit7CisJc3RydWN0IG9iamVjdF9saXN0ICplbGVtOworCisJd2hpbGUgKHByb2Nlc3NfcXVldWUpIHsKKwkJc3RydWN0IG9iamVjdCAqb2JqID0gcHJvY2Vzc19xdWV1ZS0+aXRlbTsKKwkJZWxlbSA9IHByb2Nlc3NfcXVldWU7CisJCXByb2Nlc3NfcXVldWUgPSBlbGVtLT5uZXh0OworCQlmcmVlKGVsZW0pOworCQlpZiAoIXByb2Nlc3NfcXVldWUpCisJCQlwcm9jZXNzX3F1ZXVlX2VuZCA9ICZwcm9jZXNzX3F1ZXVlOworCisJCS8qIElmIHdlIGFyZSBub3Qgc2Nhbm5pbmcgdGhpcyBvYmplY3QsIHdlIHBsYWNlZCBpdCBpbgorCQkgKiB0aGUgcXVldWUgYmVjYXVzZSB3ZSBuZWVkZWQgdG8gZmV0Y2ggaXQgZmlyc3QuCisJCSAqLworCQlpZiAoISAob2JqLT5mbGFncyAmIFRPX1NDQU4pKSB7CisJCQlpZiAod2Fsa2VyLT5mZXRjaCh3YWxrZXIsIG9iai0+c2hhMSkpIHsKKwkJCQlyZXBvcnRfbWlzc2luZyhvYmopOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCQlpZiAoIW9iai0+dHlwZSkKKwkJCXBhcnNlX29iamVjdChvYmotPnNoYTEpOworCQlpZiAocHJvY2Vzc19vYmplY3Qod2Fsa2VyLCBvYmopKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbnRlcnByZXRfdGFyZ2V0KHN0cnVjdCB3YWxrZXIgKndhbGtlciwgY2hhciAqdGFyZ2V0LCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCWlmICghZ2V0X3NoYTFfaGV4KHRhcmdldCwgc2hhMSkpCisJCXJldHVybiAwOworCWlmICghY2hlY2tfcmVmbmFtZV9mb3JtYXQodGFyZ2V0LCAwKSkgeworCQlzdHJ1Y3QgcmVmICpyZWYgPSBhbGxvY19yZWYodGFyZ2V0KTsKKwkJaWYgKCF3YWxrZXItPmZldGNoX3JlZih3YWxrZXIsIHJlZikpIHsKKwkJCWhhc2hjcHkoc2hhMSwgcmVmLT5vbGRfc2hhMSk7CisJCQlmcmVlKHJlZik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlmcmVlKHJlZik7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBtYXJrX2NvbXBsZXRlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHN0cnVjdCBvYmplY3RfaWQgKm9pZCwKKwkJCSBpbnQgZmxhZywgdm9pZCAqY2JfZGF0YSkKK3sKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkob2lkLT5oYXNoLCAxKTsKKworCWlmIChjb21taXQpIHsKKwkJY29tbWl0LT5vYmplY3QuZmxhZ3MgfD0gQ09NUExFVEU7CisJCWNvbW1pdF9saXN0X2luc2VydChjb21taXQsICZjb21wbGV0ZSk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgd2Fsa2VyX3RhcmdldHNfc3RkaW4oY2hhciAqKip0YXJnZXQsIGNvbnN0IGNoYXIgKioqd3JpdGVfcmVmKQoreworCWludCB0YXJnZXRzID0gMCwgdGFyZ2V0c19hbGxvYyA9IDA7CisJc3RydWN0IHN0cmJ1ZiBidWYgPSBTVFJCVUZfSU5JVDsKKwkqdGFyZ2V0ID0gTlVMTDsgKndyaXRlX3JlZiA9IE5VTEw7CisJd2hpbGUgKDEpIHsKKwkJY2hhciAqcmZfb25lID0gTlVMTDsKKwkJY2hhciAqdGdfb25lOworCisJCWlmIChzdHJidWZfZ2V0bGluZSgmYnVmLCBzdGRpbiwgJ1xuJykgPT0gRU9GKQorCQkJYnJlYWs7CisJCXRnX29uZSA9IGJ1Zi5idWY7CisJCXJmX29uZSA9IHN0cmNocih0Z19vbmUsICdcdCcpOworCQlpZiAocmZfb25lKQorCQkJKnJmX29uZSsrID0gMDsKKworCQlpZiAodGFyZ2V0cyA+PSB0YXJnZXRzX2FsbG9jKSB7CisJCQl0YXJnZXRzX2FsbG9jID0gdGFyZ2V0c19hbGxvYyA/IHRhcmdldHNfYWxsb2MgKiAyIDogNjQ7CisJCQlSRUFMTE9DX0FSUkFZKCp0YXJnZXQsIHRhcmdldHNfYWxsb2MpOworCQkJUkVBTExPQ19BUlJBWSgqd3JpdGVfcmVmLCB0YXJnZXRzX2FsbG9jKTsKKwkJfQorCQkoKnRhcmdldClbdGFyZ2V0c10gPSB4c3RyZHVwKHRnX29uZSk7CisJCSgqd3JpdGVfcmVmKVt0YXJnZXRzXSA9IHhzdHJkdXBfb3JfbnVsbChyZl9vbmUpOworCQl0YXJnZXRzKys7CisJfQorCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCXJldHVybiB0YXJnZXRzOworfQorCit2b2lkIHdhbGtlcl90YXJnZXRzX2ZyZWUoaW50IHRhcmdldHMsIGNoYXIgKip0YXJnZXQsIGNvbnN0IGNoYXIgKip3cml0ZV9yZWYpCit7CisJd2hpbGUgKHRhcmdldHMtLSkgeworCQlmcmVlKHRhcmdldFt0YXJnZXRzXSk7CisJCWlmICh3cml0ZV9yZWYpCisJCQlmcmVlKChjaGFyICopIHdyaXRlX3JlZlt0YXJnZXRzXSk7CisJfQorfQorCitpbnQgd2Fsa2VyX2ZldGNoKHN0cnVjdCB3YWxrZXIgKndhbGtlciwgaW50IHRhcmdldHMsIGNoYXIgKip0YXJnZXQsCisJCSBjb25zdCBjaGFyICoqd3JpdGVfcmVmLCBjb25zdCBjaGFyICp3cml0ZV9yZWZfbG9nX2RldGFpbHMpCit7CisJc3RydWN0IHN0cmJ1ZiByZWZuYW1lID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3QgcmVmX3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqc2hhMSA9IHhtYWxsb2ModGFyZ2V0cyAqIDIwKTsKKwljaGFyICptc2cgPSBOVUxMOworCWludCBpLCByZXQgPSAtMTsKKworCXNhdmVfY29tbWl0X2J1ZmZlciA9IDA7CisKKwlpZiAod3JpdGVfcmVmKSB7CisJCXRyYW5zYWN0aW9uID0gcmVmX3RyYW5zYWN0aW9uX2JlZ2luKCZlcnIpOworCQlpZiAoIXRyYW5zYWN0aW9uKSB7CisJCQllcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworCWlmICghd2Fsa2VyLT5nZXRfcmVjb3ZlcikgeworCQlmb3JfZWFjaF9yZWYobWFya19jb21wbGV0ZSwgTlVMTCk7CisJCWNvbW1pdF9saXN0X3NvcnRfYnlfZGF0ZSgmY29tcGxldGUpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCB0YXJnZXRzOyBpKyspIHsKKwkJaWYgKGludGVycHJldF90YXJnZXQod2Fsa2VyLCB0YXJnZXRbaV0sICZzaGExWzIwICogaV0pKSB7CisJCQllcnJvcigiQ291bGQgbm90IGludGVycHJldCByZXNwb25zZSBmcm9tIHNlcnZlciAnJXMnIGFzIHNvbWV0aGluZyB0byBwdWxsIiwgdGFyZ2V0W2ldKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAocHJvY2Vzcyh3YWxrZXIsIGxvb2t1cF91bmtub3duX29iamVjdCgmc2hhMVsyMCAqIGldKSkpCisJCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKGxvb3Aod2Fsa2VyKSkKKwkJZ290byBkb25lOworCWlmICghd3JpdGVfcmVmKSB7CisJCXJldCA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CisJaWYgKHdyaXRlX3JlZl9sb2dfZGV0YWlscykgeworCQltc2cgPSB4c3RyZm10KCJmZXRjaCBmcm9tICVzIiwgd3JpdGVfcmVmX2xvZ19kZXRhaWxzKTsKKwl9IGVsc2UgeworCQltc2cgPSBOVUxMOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgdGFyZ2V0czsgaSsrKSB7CisJCWlmICghd3JpdGVfcmVmW2ldKQorCQkJY29udGludWU7CisJCXN0cmJ1Zl9yZXNldCgmcmVmbmFtZSk7CisJCXN0cmJ1Zl9hZGRmKCZyZWZuYW1lLCAicmVmcy8lcyIsIHdyaXRlX3JlZltpXSk7CisJCWlmIChyZWZfdHJhbnNhY3Rpb25fdXBkYXRlKHRyYW5zYWN0aW9uLCByZWZuYW1lLmJ1ZiwKKwkJCQkJICAgJnNoYTFbMjAgKiBpXSwgTlVMTCwgMCwKKwkJCQkJICAgbXNnID8gbXNnIDogImZldGNoICh1bmtub3duKSIsCisJCQkJCSAgICZlcnIpKSB7CisJCQllcnJvcigiJXMiLCBlcnIuYnVmKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKwlpZiAocmVmX3RyYW5zYWN0aW9uX2NvbW1pdCh0cmFuc2FjdGlvbiwgJmVycikpIHsKKwkJZXJyb3IoIiVzIiwgZXJyLmJ1Zik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlyZXQgPSAwOworCitkb25lOgorCXJlZl90cmFuc2FjdGlvbl9mcmVlKHRyYW5zYWN0aW9uKTsKKwlmcmVlKG1zZyk7CisJZnJlZShzaGExKTsKKwlzdHJidWZfcmVsZWFzZSgmZXJyKTsKKwlzdHJidWZfcmVsZWFzZSgmcmVmbmFtZSk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3YWxrZXJfZnJlZShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIpCit7CisJd2Fsa2VyLT5jbGVhbnVwKHdhbGtlcik7CisJZnJlZSh3YWxrZXIpOworfQpkaWZmIC0tZ2l0IGEvd2Fsa2VyLmggYi93YWxrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWU1NzY1Ci0tLSAvZGV2L251bGwKKysrIGIvd2Fsa2VyLmgKQEAgLTAsMCArMSwzOSBAQAorI2lmbmRlZiBXQUxLRVJfSAorI2RlZmluZSBXQUxLRVJfSAorCisjaW5jbHVkZSAicmVtb3RlLmgiCisKK3N0cnVjdCB3YWxrZXIgeworCXZvaWQgKmRhdGE7CisJaW50ICgqZmV0Y2hfcmVmKShzdHJ1Y3Qgd2Fsa2VyICosIHN0cnVjdCByZWYgKnJlZik7CisJdm9pZCAoKnByZWZldGNoKShzdHJ1Y3Qgd2Fsa2VyICosIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCWludCAoKmZldGNoKShzdHJ1Y3Qgd2Fsa2VyICosIHVuc2lnbmVkIGNoYXIgKnNoYTEpOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3Qgd2Fsa2VyICopOworCWludCBnZXRfdHJlZTsKKwlpbnQgZ2V0X2hpc3Rvcnk7CisJaW50IGdldF9hbGw7CisJaW50IGdldF92ZXJib3NlbHk7CisJaW50IGdldF9yZWNvdmVyOworCisJaW50IGNvcnJ1cHRfb2JqZWN0X2ZvdW5kOworfTsKKworLyogUmVwb3J0IHdoYXQgd2UgZ290IHVuZGVyIGdldF92ZXJib3NlbHkgKi8KK3ZvaWQgd2Fsa2VyX3NheShzdHJ1Y3Qgd2Fsa2VyICp3YWxrZXIsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworLyogTG9hZCBwdWxsIHRhcmdldHMgZnJvbSBzdGRpbiAqLworaW50IHdhbGtlcl90YXJnZXRzX3N0ZGluKGNoYXIgKioqdGFyZ2V0LCBjb25zdCBjaGFyICoqKndyaXRlX3JlZik7CisKKy8qIEZyZWUgdXAgbG9hZGVkIHRhcmdldHMgKi8KK3ZvaWQgd2Fsa2VyX3RhcmdldHNfZnJlZShpbnQgdGFyZ2V0cywgY2hhciAqKnRhcmdldCwgY29uc3QgY2hhciAqKndyaXRlX3JlZik7CisKKy8qIElmIHdyaXRlX3JlZiBpcyBzZXQsIHRoZSByZWYgZmlsZW5hbWUgdG8gd3JpdGUgdGhlIHRhcmdldCB2YWx1ZSB0by4gKi8KKy8qIElmIHdyaXRlX3JlZl9sb2dfZGV0YWlscyBpcyBzZXQsIGFkZGl0aW9uYWwgdGV4dCB3aWxsIGFwcGVhciBpbiB0aGUgcmVmIGxvZy4gKi8KK2ludCB3YWxrZXJfZmV0Y2goc3RydWN0IHdhbGtlciAqaW1wbCwgaW50IHRhcmdldHMsIGNoYXIgKip0YXJnZXQsCisJCSBjb25zdCBjaGFyICoqd3JpdGVfcmVmLCBjb25zdCBjaGFyICp3cml0ZV9yZWZfbG9nX2RldGFpbHMpOworCit2b2lkIHdhbGtlcl9mcmVlKHN0cnVjdCB3YWxrZXIgKndhbGtlcik7CisKK3N0cnVjdCB3YWxrZXIgKmdldF9odHRwX3dhbGtlcihjb25zdCBjaGFyICp1cmwpOworCisjZW5kaWYgLyogV0FMS0VSX0ggKi8KZGlmZiAtLWdpdCBhL3dpbGRtYXRjaC5jIGIvd2lsZG1hdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxYmE5OQotLS0gL2Rldi9udWxsCisrKyBiL3dpbGRtYXRjaC5jCkBAIC0wLDAgKzEsMjc5IEBACisvKgorKiogIERvIHNoZWxsLXN0eWxlIHBhdHRlcm4gbWF0Y2hpbmcgZm9yID8sIFwsIFtdLCBhbmQgKiBjaGFyYWN0ZXJzLgorKiogIEl0IGlzIDhiaXQgY2xlYW4uCisqKgorKiogIFdyaXR0ZW4gYnkgUmljaCAkYWx6LCBtaXJyb3IhcnMsIFdlZCBOb3YgMjYgMTk6MDM6MTcgRVNUIDE5ODYuCisqKiAgUmljaCAkYWx6IGlzIG5vdyA8cnNhbHpAYmJuLmNvbT4uCisqKgorKiogIE1vZGlmaWVkIGJ5IFdheW5lIERhdmlzb24gdG8gc3BlY2lhbC1jYXNlICcvJyBtYXRjaGluZywgdG8gbWFrZSAnKionCisqKiAgd29yayBkaWZmZXJlbnRseSB0aGFuICcqJywgYW5kIHRvIGZpeCB0aGUgY2hhcmFjdGVyLWNsYXNzIGNvZGUuCisqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ3aWxkbWF0Y2guaCIKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyOworCisvKiBXaGF0IGNoYXJhY3RlciBtYXJrcyBhbiBpbnZlcnRlZCBjaGFyYWN0ZXIgY2xhc3M/ICovCisjZGVmaW5lIE5FR0FURV9DTEFTUwknIScKKyNkZWZpbmUgTkVHQVRFX0NMQVNTMgknXicKKworI2RlZmluZSBDQ19FUShjbGFzcywgbGVuLCBsaXRtYXRjaCkgKChsZW4pID09IHNpemVvZiAobGl0bWF0Y2gpLTEgXAorCQkJCSAgICAmJiAqKGNsYXNzKSA9PSAqKGxpdG1hdGNoKSBcCisJCQkJICAgICYmIHN0cm5jbXAoKGNoYXIqKWNsYXNzLCBsaXRtYXRjaCwgbGVuKSA9PSAwKQorCisjaWYgZGVmaW5lZCBTVERDX0hFQURFUlMgfHwgIWRlZmluZWQgaXNhc2NpaQorIyBkZWZpbmUgSVNBU0NJSShjKSAxCisjZWxzZQorIyBkZWZpbmUgSVNBU0NJSShjKSBpc2FzY2lpKGMpCisjZW5kaWYKKworI2lmZGVmIGlzYmxhbmsKKyMgZGVmaW5lIElTQkxBTksoYykgKElTQVNDSUkoYykgJiYgaXNibGFuayhjKSkKKyNlbHNlCisjIGRlZmluZSBJU0JMQU5LKGMpICgoYykgPT0gJyAnIHx8IChjKSA9PSAnXHQnKQorI2VuZGlmCisKKyNpZmRlZiBpc2dyYXBoCisjIGRlZmluZSBJU0dSQVBIKGMpIChJU0FTQ0lJKGMpICYmIGlzZ3JhcGgoYykpCisjZWxzZQorIyBkZWZpbmUgSVNHUkFQSChjKSAoSVNBU0NJSShjKSAmJiBpc3ByaW50KGMpICYmICFpc3NwYWNlKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgSVNQUklOVChjKSAoSVNBU0NJSShjKSAmJiBpc3ByaW50KGMpKQorI2RlZmluZSBJU0RJR0lUKGMpIChJU0FTQ0lJKGMpICYmIGlzZGlnaXQoYykpCisjZGVmaW5lIElTQUxOVU0oYykgKElTQVNDSUkoYykgJiYgaXNhbG51bShjKSkKKyNkZWZpbmUgSVNBTFBIQShjKSAoSVNBU0NJSShjKSAmJiBpc2FscGhhKGMpKQorI2RlZmluZSBJU0NOVFJMKGMpIChJU0FTQ0lJKGMpICYmIGlzY250cmwoYykpCisjZGVmaW5lIElTTE9XRVIoYykgKElTQVNDSUkoYykgJiYgaXNsb3dlcihjKSkKKyNkZWZpbmUgSVNQVU5DVChjKSAoSVNBU0NJSShjKSAmJiBpc3B1bmN0KGMpKQorI2RlZmluZSBJU1NQQUNFKGMpIChJU0FTQ0lJKGMpICYmIGlzc3BhY2UoYykpCisjZGVmaW5lIElTVVBQRVIoYykgKElTQVNDSUkoYykgJiYgaXN1cHBlcihjKSkKKyNkZWZpbmUgSVNYRElHSVQoYykgKElTQVNDSUkoYykgJiYgaXN4ZGlnaXQoYykpCisKKy8qIE1hdGNoIHBhdHRlcm4gInAiIGFnYWluc3QgInRleHQiICovCitzdGF0aWMgaW50IGRvd2lsZChjb25zdCB1Y2hhciAqcCwgY29uc3QgdWNoYXIgKnRleHQsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwl1Y2hhciBwX2NoOworCWNvbnN0IHVjaGFyICpwYXR0ZXJuID0gcDsKKworCWZvciAoIDsgKHBfY2ggPSAqcCkgIT0gJ1wwJzsgdGV4dCsrLCBwKyspIHsKKwkJaW50IG1hdGNoZWQsIG1hdGNoX3NsYXNoLCBuZWdhdGVkOworCQl1Y2hhciB0X2NoLCBwcmV2X2NoOworCQlpZiAoKHRfY2ggPSAqdGV4dCkgPT0gJ1wwJyAmJiBwX2NoICE9ICcqJykKKwkJCXJldHVybiBXTV9BQk9SVF9BTEw7CisJCWlmICgoZmxhZ3MgJiBXTV9DQVNFRk9MRCkgJiYgSVNVUFBFUih0X2NoKSkKKwkJCXRfY2ggPSB0b2xvd2VyKHRfY2gpOworCQlpZiAoKGZsYWdzICYgV01fQ0FTRUZPTEQpICYmIElTVVBQRVIocF9jaCkpCisJCQlwX2NoID0gdG9sb3dlcihwX2NoKTsKKwkJc3dpdGNoIChwX2NoKSB7CisJCWNhc2UgJ1xcJzoKKwkJCS8qIExpdGVyYWwgbWF0Y2ggd2l0aCBmb2xsb3dpbmcgY2hhcmFjdGVyLiAgTm90ZSB0aGF0IHRoZSB0ZXN0CisJCQkgKiBpbiAiZGVmYXVsdCIgaGFuZGxlcyB0aGUgcFsxXSA9PSAnXDAnIGZhaWx1cmUgY2FzZS4gKi8KKwkJCXBfY2ggPSAqKytwOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJZGVmYXVsdDoKKwkJCWlmICh0X2NoICE9IHBfY2gpCisJCQkJcmV0dXJuIFdNX05PTUFUQ0g7CisJCQljb250aW51ZTsKKwkJY2FzZSAnPyc6CisJCQkvKiBNYXRjaCBhbnl0aGluZyBidXQgJy8nLiAqLworCQkJaWYgKChmbGFncyAmIFdNX1BBVEhOQU1FKSAmJiB0X2NoID09ICcvJykKKwkJCQlyZXR1cm4gV01fTk9NQVRDSDsKKwkJCWNvbnRpbnVlOworCQljYXNlICcqJzoKKwkJCWlmICgqKytwID09ICcqJykgeworCQkJCWNvbnN0IHVjaGFyICpwcmV2X3AgPSBwIC0gMjsKKwkJCQl3aGlsZSAoKisrcCA9PSAnKicpIHt9CisJCQkJaWYgKCEoZmxhZ3MgJiBXTV9QQVRITkFNRSkpCisJCQkJCS8qIHdpdGhvdXQgV01fUEFUSE5BTUUsICcqJyA9PSAnKionICovCisJCQkJCW1hdGNoX3NsYXNoID0gMTsKKwkJCQllbHNlIGlmICgocHJldl9wIDwgcGF0dGVybiB8fCAqcHJldl9wID09ICcvJykgJiYKKwkJCQkgICAgKCpwID09ICdcMCcgfHwgKnAgPT0gJy8nIHx8CisJCQkJICAgICAocFswXSA9PSAnXFwnICYmIHBbMV0gPT0gJy8nKSkpIHsKKwkJCQkJLyoKKwkJCQkJICogQXNzdW1pbmcgd2UgYWxyZWFkeSBtYXRjaCAnZm9vLycgYW5kIGFyZSBhdAorCQkJCQkgKiA8c3RhciBzdGFyIHNsYXNoPiwganVzdCBhc3N1bWUgaXQgbWF0Y2hlcworCQkJCQkgKiBub3RoaW5nIGFuZCBnbyBhaGVhZCBtYXRjaCB0aGUgcmVzdCBvZiB0aGUKKwkJCQkJICogcGF0dGVybiB3aXRoIHRoZSByZW1haW5pbmcgc3RyaW5nLiBUaGlzCisJCQkJCSAqIGhlbHBzIG1ha2UgZm9vLzwqPjwqPi9iYXIgKDw+IGJlY2F1c2UKKwkJCQkJICogb3RoZXJ3aXNlIGl0IGJyZWFrcyBDIGNvbW1lbnQgc3ludGF4KSBtYXRjaAorCQkJCQkgKiBib3RoIGZvby9iYXIgYW5kIGZvby9hL2Jhci4KKwkJCQkJICovCisJCQkJCWlmIChwWzBdID09ICcvJyAmJgorCQkJCQkgICAgZG93aWxkKHAgKyAxLCB0ZXh0LCBmbGFncykgPT0gV01fTUFUQ0gpCisJCQkJCQlyZXR1cm4gV01fTUFUQ0g7CisJCQkJCW1hdGNoX3NsYXNoID0gMTsKKwkJCQl9IGVsc2UKKwkJCQkJcmV0dXJuIFdNX0FCT1JUX01BTEZPUk1FRDsKKwkJCX0gZWxzZQorCQkJCS8qIHdpdGhvdXQgV01fUEFUSE5BTUUsICcqJyA9PSAnKionICovCisJCQkJbWF0Y2hfc2xhc2ggPSBmbGFncyAmIFdNX1BBVEhOQU1FID8gMCA6IDE7CisJCQlpZiAoKnAgPT0gJ1wwJykgeworCQkJCS8qIFRyYWlsaW5nICIqKiIgbWF0Y2hlcyBldmVyeXRoaW5nLiAgVHJhaWxpbmcgIioiIG1hdGNoZXMKKwkJCQkgKiBvbmx5IGlmIHRoZXJlIGFyZSBubyBtb3JlIHNsYXNoIGNoYXJhY3RlcnMuICovCisJCQkJaWYgKCFtYXRjaF9zbGFzaCkgeworCQkJCQlpZiAoc3RyY2hyKChjaGFyKil0ZXh0LCAnLycpICE9IE5VTEwpCisJCQkJCQlyZXR1cm4gV01fTk9NQVRDSDsKKwkJCQl9CisJCQkJcmV0dXJuIFdNX01BVENIOworCQkJfSBlbHNlIGlmICghbWF0Y2hfc2xhc2ggJiYgKnAgPT0gJy8nKSB7CisJCQkJLyoKKwkJCQkgKiBfb25lXyBhc3RlcmlzayBmb2xsb3dlZCBieSBhIHNsYXNoCisJCQkJICogd2l0aCBXTV9QQVRITkFNRSBtYXRjaGVzIHRoZSBuZXh0CisJCQkJICogZGlyZWN0b3J5CisJCQkJICovCisJCQkJY29uc3QgY2hhciAqc2xhc2ggPSBzdHJjaHIoKGNoYXIqKXRleHQsICcvJyk7CisJCQkJaWYgKCFzbGFzaCkKKwkJCQkJcmV0dXJuIFdNX05PTUFUQ0g7CisJCQkJdGV4dCA9IChjb25zdCB1Y2hhciopc2xhc2g7CisJCQkJLyogdGhlIHNsYXNoIGlzIGNvbnN1bWVkIGJ5IHRoZSB0b3AtbGV2ZWwgZm9yIGxvb3AgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCXdoaWxlICgxKSB7CisJCQkJaWYgKHRfY2ggPT0gJ1wwJykKKwkJCQkJYnJlYWs7CisJCQkJLyoKKwkJCQkgKiBUcnkgdG8gYWR2YW5jZSBmYXN0ZXIgd2hlbiBhbiBhc3RlcmlzayBpcworCQkJCSAqIGZvbGxvd2VkIGJ5IGEgbGl0ZXJhbC4gV2Uga25vdyBpbiB0aGlzIGNhc2UKKwkJCQkgKiB0aGF0IHRoZSB0aGUgc3RyaW5nIGJlZm9yZSB0aGUgbGl0ZXJhbAorCQkJCSAqIG11c3QgYmVsb25nIHRvICIqIi4KKwkJCQkgKiBJZiBtYXRjaF9zbGFzaCBpcyBmYWxzZSwgZG8gbm90IGxvb2sgcGFzdAorCQkJCSAqIHRoZSBmaXJzdCBzbGFzaCBhcyBpdCBjYW5ub3QgYmVsb25nIHRvICcqJy4KKwkJCQkgKi8KKwkJCQlpZiAoIWlzX2dsb2Jfc3BlY2lhbCgqcCkpIHsKKwkJCQkJcF9jaCA9ICpwOworCQkJCQlpZiAoKGZsYWdzICYgV01fQ0FTRUZPTEQpICYmIElTVVBQRVIocF9jaCkpCisJCQkJCQlwX2NoID0gdG9sb3dlcihwX2NoKTsKKwkJCQkJd2hpbGUgKCh0X2NoID0gKnRleHQpICE9ICdcMCcgJiYKKwkJCQkJICAgICAgIChtYXRjaF9zbGFzaCB8fCB0X2NoICE9ICcvJykpIHsKKwkJCQkJCWlmICgoZmxhZ3MgJiBXTV9DQVNFRk9MRCkgJiYgSVNVUFBFUih0X2NoKSkKKwkJCQkJCQl0X2NoID0gdG9sb3dlcih0X2NoKTsKKwkJCQkJCWlmICh0X2NoID09IHBfY2gpCisJCQkJCQkJYnJlYWs7CisJCQkJCQl0ZXh0Kys7CisJCQkJCX0KKwkJCQkJaWYgKHRfY2ggIT0gcF9jaCkKKwkJCQkJCXJldHVybiBXTV9OT01BVENIOworCQkJCX0KKwkJCQlpZiAoKG1hdGNoZWQgPSBkb3dpbGQocCwgdGV4dCwgZmxhZ3MpKSAhPSBXTV9OT01BVENIKSB7CisJCQkJCWlmICghbWF0Y2hfc2xhc2ggfHwgbWF0Y2hlZCAhPSBXTV9BQk9SVF9UT19TVEFSU1RBUikKKwkJCQkJCXJldHVybiBtYXRjaGVkOworCQkJCX0gZWxzZSBpZiAoIW1hdGNoX3NsYXNoICYmIHRfY2ggPT0gJy8nKQorCQkJCQlyZXR1cm4gV01fQUJPUlRfVE9fU1RBUlNUQVI7CisJCQkJdF9jaCA9ICorK3RleHQ7CisJCQl9CisJCQlyZXR1cm4gV01fQUJPUlRfQUxMOworCQljYXNlICdbJzoKKwkJCXBfY2ggPSAqKytwOworI2lmZGVmIE5FR0FURV9DTEFTUzIKKwkJCWlmIChwX2NoID09IE5FR0FURV9DTEFTUzIpCisJCQkJcF9jaCA9IE5FR0FURV9DTEFTUzsKKyNlbmRpZgorCQkJLyogQXNzaWduIGxpdGVyYWwgMS8wIGJlY2F1c2Ugb2YgIm1hdGNoZWQiIGNvbXBhcmlzb24uICovCisJCQluZWdhdGVkID0gcF9jaCA9PSBORUdBVEVfQ0xBU1MgPyAxIDogMDsKKwkJCWlmIChuZWdhdGVkKSB7CisJCQkJLyogSW52ZXJ0ZWQgY2hhcmFjdGVyIGNsYXNzLiAqLworCQkJCXBfY2ggPSAqKytwOworCQkJfQorCQkJcHJldl9jaCA9IDA7CisJCQltYXRjaGVkID0gMDsKKwkJCWRvIHsKKwkJCQlpZiAoIXBfY2gpCisJCQkJCXJldHVybiBXTV9BQk9SVF9BTEw7CisJCQkJaWYgKHBfY2ggPT0gJ1xcJykgeworCQkJCQlwX2NoID0gKisrcDsKKwkJCQkJaWYgKCFwX2NoKQorCQkJCQkJcmV0dXJuIFdNX0FCT1JUX0FMTDsKKwkJCQkJaWYgKHRfY2ggPT0gcF9jaCkKKwkJCQkJCW1hdGNoZWQgPSAxOworCQkJCX0gZWxzZSBpZiAocF9jaCA9PSAnLScgJiYgcHJldl9jaCAmJiBwWzFdICYmIHBbMV0gIT0gJ10nKSB7CisJCQkJCXBfY2ggPSAqKytwOworCQkJCQlpZiAocF9jaCA9PSAnXFwnKSB7CisJCQkJCQlwX2NoID0gKisrcDsKKwkJCQkJCWlmICghcF9jaCkKKwkJCQkJCQlyZXR1cm4gV01fQUJPUlRfQUxMOworCQkJCQl9CisJCQkJCWlmICh0X2NoIDw9IHBfY2ggJiYgdF9jaCA+PSBwcmV2X2NoKQorCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCWVsc2UgaWYgKChmbGFncyAmIFdNX0NBU0VGT0xEKSAmJiBJU0xPV0VSKHRfY2gpKSB7CisJCQkJCQl1Y2hhciB0X2NoX3VwcGVyID0gdG91cHBlcih0X2NoKTsKKwkJCQkJCWlmICh0X2NoX3VwcGVyIDw9IHBfY2ggJiYgdF9jaF91cHBlciA+PSBwcmV2X2NoKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9CisJCQkJCXBfY2ggPSAwOyAvKiBUaGlzIG1ha2VzICJwcmV2X2NoIiBnZXQgc2V0IHRvIDAuICovCisJCQkJfSBlbHNlIGlmIChwX2NoID09ICdbJyAmJiBwWzFdID09ICc6JykgeworCQkJCQljb25zdCB1Y2hhciAqczsKKwkJCQkJaW50IGk7CisJCQkJCWZvciAocyA9IHAgKz0gMjsgKHBfY2ggPSAqcCkgJiYgcF9jaCAhPSAnXSc7IHArKykge30gLypTSEFSRUQgSVRFUkFUT1IqLworCQkJCQlpZiAoIXBfY2gpCisJCQkJCQlyZXR1cm4gV01fQUJPUlRfQUxMOworCQkJCQlpID0gcCAtIHMgLSAxOworCQkJCQlpZiAoaSA8IDAgfHwgcFstMV0gIT0gJzonKSB7CisJCQkJCQkvKiBEaWRuJ3QgZmluZCAiOl0iLCBzbyB0cmVhdCBsaWtlIGEgbm9ybWFsIHNldC4gKi8KKwkJCQkJCXAgPSBzIC0gMjsKKwkJCQkJCXBfY2ggPSAnWyc7CisJCQkJCQlpZiAodF9jaCA9PSBwX2NoKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJaWYgKENDX0VRKHMsaSwgImFsbnVtIikpIHsKKwkJCQkJCWlmIChJU0FMTlVNKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImFscGhhIikpIHsKKwkJCQkJCWlmIChJU0FMUEhBKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImJsYW5rIikpIHsKKwkJCQkJCWlmIChJU0JMQU5LKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImNudHJsIikpIHsKKwkJCQkJCWlmIChJU0NOVFJMKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImRpZ2l0IikpIHsKKwkJCQkJCWlmIChJU0RJR0lUKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImdyYXBoIikpIHsKKwkJCQkJCWlmIChJU0dSQVBIKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgImxvd2VyIikpIHsKKwkJCQkJCWlmIChJU0xPV0VSKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgInByaW50IikpIHsKKwkJCQkJCWlmIChJU1BSSU5UKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgInB1bmN0IikpIHsKKwkJCQkJCWlmIChJU1BVTkNUKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgInNwYWNlIikpIHsKKwkJCQkJCWlmIChJU1NQQUNFKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQl9IGVsc2UgaWYgKENDX0VRKHMsaSwgInVwcGVyIikpIHsKKwkJCQkJCWlmIChJU1VQUEVSKHRfY2gpKQorCQkJCQkJCW1hdGNoZWQgPSAxOworCQkJCQkJZWxzZSBpZiAoKGZsYWdzICYgV01fQ0FTRUZPTEQpICYmIElTTE9XRVIodF9jaCkpCisJCQkJCQkJbWF0Y2hlZCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoQ0NfRVEocyxpLCAieGRpZ2l0IikpIHsKKwkJCQkJCWlmIChJU1hESUdJVCh0X2NoKSkKKwkJCQkJCQltYXRjaGVkID0gMTsKKwkJCQkJfSBlbHNlIC8qIG1hbGZvcm1lZCBbOmNsYXNzOl0gc3RyaW5nICovCisJCQkJCQlyZXR1cm4gV01fQUJPUlRfQUxMOworCQkJCQlwX2NoID0gMDsgLyogVGhpcyBtYWtlcyAicHJldl9jaCIgZ2V0IHNldCB0byAwLiAqLworCQkJCX0gZWxzZSBpZiAodF9jaCA9PSBwX2NoKQorCQkJCQltYXRjaGVkID0gMTsKKwkJCX0gd2hpbGUgKHByZXZfY2ggPSBwX2NoLCAocF9jaCA9ICorK3ApICE9ICddJyk7CisJCQlpZiAobWF0Y2hlZCA9PSBuZWdhdGVkIHx8CisJCQkgICAgKChmbGFncyAmIFdNX1BBVEhOQU1FKSAmJiB0X2NoID09ICcvJykpCisJCQkJcmV0dXJuIFdNX05PTUFUQ0g7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCXJldHVybiAqdGV4dCA/IFdNX05PTUFUQ0ggOiBXTV9NQVRDSDsKK30KKworLyogTWF0Y2ggdGhlICJwYXR0ZXJuIiBhZ2FpbnN0IHRoZSAidGV4dCIgc3RyaW5nLiAqLworaW50IHdpbGRtYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICp0ZXh0LAorCSAgICAgIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IHdpbGRvcHRzICp3bykKK3sKKwlyZXR1cm4gZG93aWxkKChjb25zdCB1Y2hhciopcGF0dGVybiwgKGNvbnN0IHVjaGFyKil0ZXh0LCBmbGFncyk7Cit9CmRpZmYgLS1naXQgYS93aWxkbWF0Y2guaCBiL3dpbGRtYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwOTBjOGYKLS0tIC9kZXYvbnVsbAorKysgYi93aWxkbWF0Y2guaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIFdJTERNQVRDSF9ICisjZGVmaW5lIFdJTERNQVRDSF9ICisKKyNkZWZpbmUgV01fQ0FTRUZPTEQgMQorI2RlZmluZSBXTV9QQVRITkFNRSAyCisKKyNkZWZpbmUgV01fQUJPUlRfTUFMRk9STUVEIDIKKyNkZWZpbmUgV01fTk9NQVRDSCAxCisjZGVmaW5lIFdNX01BVENIIDAKKyNkZWZpbmUgV01fQUJPUlRfQUxMIC0xCisjZGVmaW5lIFdNX0FCT1JUX1RPX1NUQVJTVEFSIC0yCisKK3N0cnVjdCB3aWxkb3B0czsKKworaW50IHdpbGRtYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICp0ZXh0LAorCSAgICAgIHVuc2lnbmVkIGludCBmbGFncywKKwkgICAgICBzdHJ1Y3Qgd2lsZG9wdHMgKndvKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvd29ya3RyZWUuYyBiL3dvcmt0cmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgxZjgxMAotLS0gL2Rldi9udWxsCisrKyBiL3dvcmt0cmVlLmMKQEAgLTAsMCArMSwyMTkgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInJlZnMuaCIKKyNpbmNsdWRlICJzdHJidWYuaCIKKyNpbmNsdWRlICJ3b3JrdHJlZS5oIgorCit2b2lkIGZyZWVfd29ya3RyZWVzKHN0cnVjdCB3b3JrdHJlZSAqKndvcmt0cmVlcykKK3sKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyB3b3JrdHJlZXNbaV07IGkrKykgeworCQlmcmVlKHdvcmt0cmVlc1tpXS0+cGF0aCk7CisJCWZyZWUod29ya3RyZWVzW2ldLT5naXRfZGlyKTsKKwkJZnJlZSh3b3JrdHJlZXNbaV0tPmhlYWRfcmVmKTsKKwkJZnJlZSh3b3JrdHJlZXNbaV0pOworCX0KKwlmcmVlICh3b3JrdHJlZXMpOworfQorCisvKgorICogcmVhZCAncGF0aF90b19yZWYnIGludG8gJ3JlZicuICBBbHNvIGlmIGlzX2RldGFjaGVkIGlzIG5vdCBOVUxMLAorICogc2V0IGlzX2RldGFjaGVkIHRvIDEgKDApIGlmIHRoZSByZWYgaXMgZGV0YXRjaGVkIChpcyBub3QgZGV0YWNoZWQpLgorICoKKyAqICRHSVRfQ09NTU9OX0RJUi8kc3ltcmVmIChlLmcuIEhFQUQpIGlzIHByYWN0aWNhbGx5IG91dHNpZGUgJEdJVF9ESVIgc28KKyAqIGZvciBsaW5rZWQgd29ya3RyZWVzLCBgcmVzb2x2ZV9yZWZfdW5zYWZlKClgIHdvbid0IHdvcmsgKGl0IHVzZXMKKyAqIGdpdF9wYXRoKS4gUGFyc2UgdGhlIHJlZiBvdXJzZWx2ZXMuCisgKgorICogcmV0dXJuIC0xIGlmIHRoZSByZWYgaXMgbm90IGEgcHJvcGVyIHJlZiwgMCBvdGhlcndpc2UgKHN1Y2Nlc3MpCisgKi8KK3N0YXRpYyBpbnQgcGFyc2VfcmVmKGNoYXIgKnBhdGhfdG9fcmVmLCBzdHJ1Y3Qgc3RyYnVmICpyZWYsIGludCAqaXNfZGV0YWNoZWQpCit7CisJaWYgKGlzX2RldGFjaGVkKQorCQkqaXNfZGV0YWNoZWQgPSAwOworCWlmICghc3RyYnVmX3JlYWRsaW5rKHJlZiwgcGF0aF90b19yZWYsIDApKSB7CisJCS8qIEhFQUQgaXMgc3ltYm9saWMgbGluayAqLworCQlpZiAoIXN0YXJ0c193aXRoKHJlZi0+YnVmLCAicmVmcy8iKSB8fAorCQkJCWNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZi0+YnVmLCAwKSkKKwkJCXJldHVybiAtMTsKKwl9IGVsc2UgaWYgKHN0cmJ1Zl9yZWFkX2ZpbGUocmVmLCBwYXRoX3RvX3JlZiwgMCkgPj0gMCkgeworCQkvKiB0ZXh0dWFsIHN5bXJlZiBvciBkZXRhY2hlZCAqLworCQlpZiAoIXN0YXJ0c193aXRoKHJlZi0+YnVmLCAicmVmOiIpKSB7CisJCQlpZiAoaXNfZGV0YWNoZWQpCisJCQkJKmlzX2RldGFjaGVkID0gMTsKKwkJfSBlbHNlIHsKKwkJCXN0cmJ1Zl9yZW1vdmUocmVmLCAwLCBzdHJsZW4oInJlZjoiKSk7CisJCQlzdHJidWZfdHJpbShyZWYpOworCQkJaWYgKGNoZWNrX3JlZm5hbWVfZm9ybWF0KHJlZi0+YnVmLCAwKSkKKwkJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCisvKioKKyAqIEFkZCB0aGUgaGVhZF9zaGExIGFuZCBoZWFkX3JlZiAoaWYgbm90IGRldGFjaGVkKSB0byB0aGUgZ2l2ZW4gd29ya3RyZWUKKyAqLworc3RhdGljIHZvaWQgYWRkX2hlYWRfaW5mbyhzdHJ1Y3Qgc3RyYnVmICpoZWFkX3JlZiwgc3RydWN0IHdvcmt0cmVlICp3b3JrdHJlZSkKK3sKKwlpZiAoaGVhZF9yZWYtPmxlbikgeworCQlpZiAod29ya3RyZWUtPmlzX2RldGFjaGVkKSB7CisJCQlnZXRfc2hhMV9oZXgoaGVhZF9yZWYtPmJ1Ziwgd29ya3RyZWUtPmhlYWRfc2hhMSk7CisJCX0gZWxzZSB7CisJCQlyZXNvbHZlX3JlZl91bnNhZmUoaGVhZF9yZWYtPmJ1ZiwgMCwgd29ya3RyZWUtPmhlYWRfc2hhMSwgTlVMTCk7CisJCQl3b3JrdHJlZS0+aGVhZF9yZWYgPSBzdHJidWZfZGV0YWNoKGhlYWRfcmVmLCBOVUxMKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBnZXQgdGhlIG1haW4gd29ya3RyZWUKKyAqLworc3RhdGljIHN0cnVjdCB3b3JrdHJlZSAqZ2V0X21haW5fd29ya3RyZWUodm9pZCkKK3sKKwlzdHJ1Y3Qgd29ya3RyZWUgKndvcmt0cmVlID0gTlVMTDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHdvcmt0cmVlX3BhdGggPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGdpdGRpciA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgaGVhZF9yZWYgPSBTVFJCVUZfSU5JVDsKKwlpbnQgaXNfYmFyZSA9IDA7CisJaW50IGlzX2RldGFjaGVkID0gMDsKKworCXN0cmJ1Zl9hZGRmKCZnaXRkaXIsICIlcyIsIGFic29sdXRlX3BhdGgoZ2V0X2dpdF9jb21tb25fZGlyKCkpKTsKKwlzdHJidWZfYWRkYnVmKCZ3b3JrdHJlZV9wYXRoLCAmZ2l0ZGlyKTsKKwlpc19iYXJlID0gIXN0cmJ1Zl9zdHJpcF9zdWZmaXgoJndvcmt0cmVlX3BhdGgsICIvLmdpdCIpOworCWlmIChpc19iYXJlKQorCQlzdHJidWZfc3RyaXBfc3VmZml4KCZ3b3JrdHJlZV9wYXRoLCAiLy4iKTsKKworCXN0cmJ1Zl9hZGRmKCZwYXRoLCAiJXMvSEVBRCIsIGdldF9naXRfY29tbW9uX2RpcigpKTsKKworCWlmIChwYXJzZV9yZWYocGF0aC5idWYsICZoZWFkX3JlZiwgJmlzX2RldGFjaGVkKSA8IDApCisJCWdvdG8gZG9uZTsKKworCXdvcmt0cmVlID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHdvcmt0cmVlKSk7CisJd29ya3RyZWUtPnBhdGggPSBzdHJidWZfZGV0YWNoKCZ3b3JrdHJlZV9wYXRoLCBOVUxMKTsKKwl3b3JrdHJlZS0+Z2l0X2RpciA9IHN0cmJ1Zl9kZXRhY2goJmdpdGRpciwgTlVMTCk7CisJd29ya3RyZWUtPmlzX2JhcmUgPSBpc19iYXJlOworCXdvcmt0cmVlLT5oZWFkX3JlZiA9IE5VTEw7CisJd29ya3RyZWUtPmlzX2RldGFjaGVkID0gaXNfZGV0YWNoZWQ7CisJYWRkX2hlYWRfaW5mbygmaGVhZF9yZWYsIHdvcmt0cmVlKTsKKworZG9uZToKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJmdpdGRpcik7CisJc3RyYnVmX3JlbGVhc2UoJndvcmt0cmVlX3BhdGgpOworCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX3JlZik7CisJcmV0dXJuIHdvcmt0cmVlOworfQorCitzdGF0aWMgc3RydWN0IHdvcmt0cmVlICpnZXRfbGlua2VkX3dvcmt0cmVlKGNvbnN0IGNoYXIgKmlkKQoreworCXN0cnVjdCB3b3JrdHJlZSAqd29ya3RyZWUgPSBOVUxMOworCXN0cnVjdCBzdHJidWYgcGF0aCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgd29ya3RyZWVfcGF0aCA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZ2l0ZGlyID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBoZWFkX3JlZiA9IFNUUkJVRl9JTklUOworCWludCBpc19kZXRhY2hlZCA9IDA7CisKKwlpZiAoIWlkKQorCQlkaWUoIk1pc3NpbmcgbGlua2VkIHdvcmt0cmVlIG5hbWUiKTsKKworCXN0cmJ1Zl9hZGRmKCZnaXRkaXIsICIlcy93b3JrdHJlZXMvJXMiLAorCQkJYWJzb2x1dGVfcGF0aChnZXRfZ2l0X2NvbW1vbl9kaXIoKSksIGlkKTsKKwlzdHJidWZfYWRkZigmcGF0aCwgIiVzL2dpdGRpciIsIGdpdGRpci5idWYpOworCWlmIChzdHJidWZfcmVhZF9maWxlKCZ3b3JrdHJlZV9wYXRoLCBwYXRoLmJ1ZiwgMCkgPD0gMCkKKwkJLyogaW52YWxpZCBnaXRkaXIgZmlsZSAqLworCQlnb3RvIGRvbmU7CisKKwlzdHJidWZfcnRyaW0oJndvcmt0cmVlX3BhdGgpOworCWlmICghc3RyYnVmX3N0cmlwX3N1ZmZpeCgmd29ya3RyZWVfcGF0aCwgIi8uZ2l0IikpIHsKKwkJc3RyYnVmX3Jlc2V0KCZ3b3JrdHJlZV9wYXRoKTsKKwkJc3RyYnVmX2FkZHN0cigmd29ya3RyZWVfcGF0aCwgYWJzb2x1dGVfcGF0aCgiLiIpKTsKKwkJc3RyYnVmX3N0cmlwX3N1ZmZpeCgmd29ya3RyZWVfcGF0aCwgIi8uIik7CisJfQorCisJc3RyYnVmX3Jlc2V0KCZwYXRoKTsKKwlzdHJidWZfYWRkZigmcGF0aCwgIiVzL3dvcmt0cmVlcy8lcy9IRUFEIiwgZ2V0X2dpdF9jb21tb25fZGlyKCksIGlkKTsKKworCWlmIChwYXJzZV9yZWYocGF0aC5idWYsICZoZWFkX3JlZiwgJmlzX2RldGFjaGVkKSA8IDApCisJCWdvdG8gZG9uZTsKKworCXdvcmt0cmVlID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IHdvcmt0cmVlKSk7CisJd29ya3RyZWUtPnBhdGggPSBzdHJidWZfZGV0YWNoKCZ3b3JrdHJlZV9wYXRoLCBOVUxMKTsKKwl3b3JrdHJlZS0+Z2l0X2RpciA9IHN0cmJ1Zl9kZXRhY2goJmdpdGRpciwgTlVMTCk7CisJd29ya3RyZWUtPmlzX2JhcmUgPSAwOworCXdvcmt0cmVlLT5oZWFkX3JlZiA9IE5VTEw7CisJd29ya3RyZWUtPmlzX2RldGFjaGVkID0gaXNfZGV0YWNoZWQ7CisJYWRkX2hlYWRfaW5mbygmaGVhZF9yZWYsIHdvcmt0cmVlKTsKKworZG9uZToKKwlzdHJidWZfcmVsZWFzZSgmcGF0aCk7CisJc3RyYnVmX3JlbGVhc2UoJmdpdGRpcik7CisJc3RyYnVmX3JlbGVhc2UoJndvcmt0cmVlX3BhdGgpOworCXN0cmJ1Zl9yZWxlYXNlKCZoZWFkX3JlZik7CisJcmV0dXJuIHdvcmt0cmVlOworfQorCitzdHJ1Y3Qgd29ya3RyZWUgKipnZXRfd29ya3RyZWVzKHZvaWQpCit7CisJc3RydWN0IHdvcmt0cmVlICoqbGlzdCA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJRElSICpkaXI7CisJc3RydWN0IGRpcmVudCAqZDsKKwlpbnQgY291bnRlciA9IDAsIGFsbG9jID0gMjsKKworCWxpc3QgPSB4bWFsbG9jKGFsbG9jICogc2l6ZW9mKHN0cnVjdCB3b3JrdHJlZSAqKSk7CisKKwlpZiAoKGxpc3RbY291bnRlcl0gPSBnZXRfbWFpbl93b3JrdHJlZSgpKSkKKwkJY291bnRlcisrOworCisJc3RyYnVmX2FkZGYoJnBhdGgsICIlcy93b3JrdHJlZXMiLCBnZXRfZ2l0X2NvbW1vbl9kaXIoKSk7CisJZGlyID0gb3BlbmRpcihwYXRoLmJ1Zik7CisJc3RyYnVmX3JlbGVhc2UoJnBhdGgpOworCWlmIChkaXIpIHsKKwkJd2hpbGUgKChkID0gcmVhZGRpcihkaXIpKSAhPSBOVUxMKSB7CisJCQlzdHJ1Y3Qgd29ya3RyZWUgKmxpbmtlZCA9IE5VTEw7CisJCQlpZiAoIXN0cmNtcChkLT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkLT5kX25hbWUsICIuLiIpKQorCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKChsaW5rZWQgPSBnZXRfbGlua2VkX3dvcmt0cmVlKGQtPmRfbmFtZSkpKSB7CisJCQkJCUFMTE9DX0dST1cobGlzdCwgY291bnRlciArIDEsIGFsbG9jKTsKKwkJCQkJbGlzdFtjb3VudGVyKytdID0gbGlua2VkOworCQkJCX0KKwkJfQorCQljbG9zZWRpcihkaXIpOworCX0KKwlBTExPQ19HUk9XKGxpc3QsIGNvdW50ZXIgKyAxLCBhbGxvYyk7CisJbGlzdFtjb3VudGVyXSA9IE5VTEw7CisJcmV0dXJuIGxpc3Q7Cit9CisKK2NoYXIgKmZpbmRfc2hhcmVkX3N5bXJlZihjb25zdCBjaGFyICpzeW1yZWYsIGNvbnN0IGNoYXIgKnRhcmdldCkKK3sKKwljaGFyICpleGlzdGluZyA9IE5VTEw7CisJc3RydWN0IHN0cmJ1ZiBwYXRoID0gU1RSQlVGX0lOSVQ7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCB3b3JrdHJlZSAqKndvcmt0cmVlcyA9IGdldF93b3JrdHJlZXMoKTsKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyB3b3JrdHJlZXNbaV07IGkrKykgeworCQlzdHJidWZfcmVzZXQoJnBhdGgpOworCQlzdHJidWZfcmVzZXQoJnNiKTsKKwkJc3RyYnVmX2FkZGYoJnBhdGgsICIlcy8lcyIsIHdvcmt0cmVlc1tpXS0+Z2l0X2Rpciwgc3ltcmVmKTsKKworCQlpZiAocGFyc2VfcmVmKHBhdGguYnVmLCAmc2IsIE5VTEwpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghc3RyY21wKHNiLmJ1ZiwgdGFyZ2V0KSkgeworCQkJZXhpc3RpbmcgPSB4c3RyZHVwKHdvcmt0cmVlc1tpXS0+cGF0aCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXN0cmJ1Zl9yZWxlYXNlKCZwYXRoKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWZyZWVfd29ya3RyZWVzKHdvcmt0cmVlcyk7CisKKwlyZXR1cm4gZXhpc3Rpbmc7Cit9CmRpZmYgLS1naXQgYS93b3JrdHJlZS5oIGIvd29ya3RyZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGIzZGRhCi0tLSAvZGV2L251bGwKKysrIGIvd29ya3RyZWUuaApAQCAtMCwwICsxLDM4IEBACisjaWZuZGVmIFdPUktUUkVFX0gKKyNkZWZpbmUgV09SS1RSRUVfSAorCitzdHJ1Y3Qgd29ya3RyZWUgeworCWNoYXIgKnBhdGg7CisJY2hhciAqZ2l0X2RpcjsKKwljaGFyICpoZWFkX3JlZjsKKwl1bnNpZ25lZCBjaGFyIGhlYWRfc2hhMVsyMF07CisJaW50IGlzX2RldGFjaGVkOworCWludCBpc19iYXJlOworfTsKKworLyogRnVuY3Rpb25zIGZvciBhY3Rpbmcgb24gdGhlIGluZm9ybWF0aW9uIGFib3V0IHdvcmt0cmVlcy4gKi8KKworLyoKKyAqIEdldCB0aGUgd29ya3RyZWVzLiAgVGhlIHByaW1hcnkgd29ya3RyZWUgd2lsbCBhbHdheXMgYmUgdGhlIGZpcnN0IHJldHVybmVkLAorICogYW5kIGxpbmtlZCB3b3JrdHJlZXMgd2lsbCBiZSBwb2ludGVkIHRvIGJ5ICduZXh0JyBpbiBlYWNoIHN1YnNlcXVlbnQKKyAqIHdvcmt0cmVlLiAgTm8gc3BlY2lmaWMgb3JkZXJpbmcgaXMgZG9uZSBvbiB0aGUgbGlua2VkIHdvcmt0cmVlcy4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZSBtZW1vcnkgZnJvbSB0aGUgcmV0dXJuZWQKKyAqIHdvcmt0cmVlKHMpLgorICovCitleHRlcm4gc3RydWN0IHdvcmt0cmVlICoqZ2V0X3dvcmt0cmVlcyh2b2lkKTsKKworLyoKKyAqIEZyZWUgdXAgdGhlIG1lbW9yeSBmb3Igd29ya3RyZWUocykKKyAqLworZXh0ZXJuIHZvaWQgZnJlZV93b3JrdHJlZXMoc3RydWN0IHdvcmt0cmVlICoqKTsKKworLyoKKyAqIENoZWNrIGlmIGEgcGVyLXdvcmt0cmVlIHN5bXJlZiBwb2ludHMgdG8gYSByZWYgaW4gdGhlIG1haW4gd29ya3RyZWUKKyAqIG9yIGFueSBsaW5rZWQgd29ya3RyZWUsIGFuZCByZXR1cm4gdGhlIHBhdGggdG8gdGhlIGV4aXNpbmcgd29ya3RyZWUKKyAqIGlmIGl0IGlzLiAgUmV0dXJucyBOVUxMIGlmIHRoZXJlIGlzIG5vIGV4aXN0aW5nIHJlZi4gIFRoZSBjYWxsZXIgaXMKKyAqIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZSByZXR1cm5lZCBwYXRoLgorICovCitleHRlcm4gY2hhciAqZmluZF9zaGFyZWRfc3ltcmVmKGNvbnN0IGNoYXIgKnN5bXJlZiwgY29uc3QgY2hhciAqdGFyZ2V0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS93cmFwLWZvci1iaW4uc2ggYi93cmFwLWZvci1iaW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAxZDIzMwotLS0gL2Rldi9udWxsCisrKyBiL3dyYXAtZm9yLWJpbi5zaApAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKKworIyB3cmFwLWZvci1iaW4uc2g6IFRlbXBsYXRlIGZvciBnaXQgZXhlY3V0YWJsZSB3cmFwcGVyIHNjcmlwdHMKKyMgdG8gcnVuIHRlc3Qgc3VpdGUgYWdhaW5zdCBzYW5kYm94LCBidXQgd2l0aCBvbmx5IGJpbmRpci1pbnN0YWxsZWQKKyMgZXhlY3V0YWJsZXMgaW4gUEFUSC4gIFRoZSBNYWtlZmlsZSBjb3BpZXMgdGhpcyBpbnRvIHZhcmlvdXMKKyMgZmlsZXMgaW4gYmluLXdyYXBwZXJzLCBzdWJzdGl0dXRpbmcKKyMgQEBCVUlMRF9ESVJAQCBhbmQgQEBQUk9HQEAuCisKK0dJVF9FWEVDX1BBVEg9J0BAQlVJTERfRElSQEAnCitpZiB0ZXN0IC1uICIkTk9fU0VUX0dJVF9URU1QTEFURV9ESVIiCit0aGVuCisJdW5zZXQgR0lUX1RFTVBMQVRFX0RJUgorZWxzZQorCUdJVF9URU1QTEFURV9ESVI9J0BAQlVJTERfRElSQEAvdGVtcGxhdGVzL2JsdCcKKwlleHBvcnQgR0lUX1RFTVBMQVRFX0RJUgorZmkKK0dJVFBFUkxMSUI9J0BAQlVJTERfRElSQEAvcGVybC9ibGliL2xpYiciJHtHSVRQRVJMTElCOis6JEdJVFBFUkxMSUJ9IgorR0lUX1RFWFRET01BSU5ESVI9J0BAQlVJTERfRElSQEAvcG8vYnVpbGQvbG9jYWxlJworUEFUSD0nQEBCVUlMRF9ESVJAQC9iaW4td3JhcHBlcnM6JyIkUEFUSCIKK2V4cG9ydCBHSVRfRVhFQ19QQVRIIEdJVFBFUkxMSUIgUEFUSCBHSVRfVEVYVERPTUFJTkRJUgorCitleGVjICIke0dJVF9FWEVDX1BBVEh9L0BAUFJPR0BAIiAiJEAiCmRpZmYgLS1naXQgYS93cmFwcGVyLmMgYi93cmFwcGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjYWE0ZAotLS0gL2Rldi9udWxsCisrKyBiL3dyYXBwZXIuYwpAQCAtMCwwICsxLDY5NSBAQAorLyoKKyAqIFZhcmlvdXMgdHJpdmlhbCBoZWxwZXIgd3JhcHBlcnMgYXJvdW5kIHN0YW5kYXJkIGZ1bmN0aW9ucworICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RhdGljIHZvaWQgZG9fbm90aGluZyhzaXplX3Qgc2l6ZSkKK3sKK30KKworc3RhdGljIHZvaWQgKCp0cnlfdG9fZnJlZV9yb3V0aW5lKShzaXplX3Qgc2l6ZSkgPSBkb19ub3RoaW5nOworCitzdGF0aWMgaW50IG1lbW9yeV9saW1pdF9jaGVjayhzaXplX3Qgc2l6ZSwgaW50IGdlbnRsZSkKK3sKKwlzdGF0aWMgc2l6ZV90IGxpbWl0ID0gMDsKKwlpZiAoIWxpbWl0KSB7CisJCWxpbWl0ID0gZ2l0X2Vudl91bG9uZygiR0lUX0FMTE9DX0xJTUlUIiwgMCk7CisJCWlmICghbGltaXQpCisJCQlsaW1pdCA9IFNJWkVfTUFYOworCX0KKwlpZiAoc2l6ZSA+IGxpbWl0KSB7CisJCWlmIChnZW50bGUpIHsKKwkJCWVycm9yKCJhdHRlbXB0aW5nIHRvIGFsbG9jYXRlICUiUFJJdU1BWCIgb3ZlciBsaW1pdCAlIlBSSXVNQVgsCisJCQkgICAgICAodWludG1heF90KXNpemUsICh1aW50bWF4X3QpbGltaXQpOworCQkJcmV0dXJuIC0xOworCQl9IGVsc2UKKwkJCWRpZSgiYXR0ZW1wdGluZyB0byBhbGxvY2F0ZSAlIlBSSXVNQVgiIG92ZXIgbGltaXQgJSJQUkl1TUFYLAorCQkJICAgICh1aW50bWF4X3Qpc2l6ZSwgKHVpbnRtYXhfdClsaW1pdCk7CisJfQorCXJldHVybiAwOworfQorCit0cnlfdG9fZnJlZV90IHNldF90cnlfdG9fZnJlZV9yb3V0aW5lKHRyeV90b19mcmVlX3Qgcm91dGluZSkKK3sKKwl0cnlfdG9fZnJlZV90IG9sZCA9IHRyeV90b19mcmVlX3JvdXRpbmU7CisJaWYgKCFyb3V0aW5lKQorCQlyb3V0aW5lID0gZG9fbm90aGluZzsKKwl0cnlfdG9fZnJlZV9yb3V0aW5lID0gcm91dGluZTsKKwlyZXR1cm4gb2xkOworfQorCitjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKwljaGFyICpyZXQgPSBzdHJkdXAoc3RyKTsKKwlpZiAoIXJldCkgeworCQl0cnlfdG9fZnJlZV9yb3V0aW5lKHN0cmxlbihzdHIpICsgMSk7CisJCXJldCA9IHN0cmR1cChzdHIpOworCQlpZiAoIXJldCkKKwkJCWRpZSgiT3V0IG9mIG1lbW9yeSwgc3RyZHVwIGZhaWxlZCIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCAqZG9feG1hbGxvYyhzaXplX3Qgc2l6ZSwgaW50IGdlbnRsZSkKK3sKKwl2b2lkICpyZXQ7CisKKwlpZiAobWVtb3J5X2xpbWl0X2NoZWNrKHNpemUsIGdlbnRsZSkpCisJCXJldHVybiBOVUxMOworCXJldCA9IG1hbGxvYyhzaXplKTsKKwlpZiAoIXJldCAmJiAhc2l6ZSkKKwkJcmV0ID0gbWFsbG9jKDEpOworCWlmICghcmV0KSB7CisJCXRyeV90b19mcmVlX3JvdXRpbmUoc2l6ZSk7CisJCXJldCA9IG1hbGxvYyhzaXplKTsKKwkJaWYgKCFyZXQgJiYgIXNpemUpCisJCQlyZXQgPSBtYWxsb2MoMSk7CisJCWlmICghcmV0KSB7CisJCQlpZiAoIWdlbnRsZSkKKwkJCQlkaWUoIk91dCBvZiBtZW1vcnksIG1hbGxvYyBmYWlsZWQgKHRyaWVkIHRvIGFsbG9jYXRlICVsdSBieXRlcykiLAorCQkJCSAgICAodW5zaWduZWQgbG9uZylzaXplKTsKKwkJCWVsc2UgeworCQkJCWVycm9yKCJPdXQgb2YgbWVtb3J5LCBtYWxsb2MgZmFpbGVkICh0cmllZCB0byBhbGxvY2F0ZSAlbHUgYnl0ZXMpIiwKKwkJCQkgICAgICAodW5zaWduZWQgbG9uZylzaXplKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfQorCX0KKyNpZmRlZiBYTUFMTE9DX1BPSVNPTgorCW1lbXNldChyZXQsIDB4QTUsIHNpemUpOworI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKwordm9pZCAqeG1hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gZG9feG1hbGxvYyhzaXplLCAwKTsKK30KKworc3RhdGljIHZvaWQgKmRvX3htYWxsb2N6KHNpemVfdCBzaXplLCBpbnQgZ2VudGxlKQoreworCXZvaWQgKnJldDsKKwlpZiAodW5zaWduZWRfYWRkX292ZXJmbG93cyhzaXplLCAxKSkgeworCQlpZiAoZ2VudGxlKSB7CisJCQllcnJvcigiRGF0YSB0b28gbGFyZ2UgdG8gZml0IGludG8gdmlydHVhbCBtZW1vcnkgc3BhY2UuIik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfSBlbHNlCisJCQlkaWUoIkRhdGEgdG9vIGxhcmdlIHRvIGZpdCBpbnRvIHZpcnR1YWwgbWVtb3J5IHNwYWNlLiIpOworCX0KKwlyZXQgPSBkb194bWFsbG9jKHNpemUgKyAxLCBnZW50bGUpOworCWlmIChyZXQpCisJCSgoY2hhciopcmV0KVtzaXplXSA9IDA7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCAqeG1hbGxvY3ooc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIGRvX3htYWxsb2N6KHNpemUsIDApOworfQorCit2b2lkICp4bWFsbG9jel9nZW50bHkoc2l6ZV90IHNpemUpCit7CisJcmV0dXJuIGRvX3htYWxsb2N6KHNpemUsIDEpOworfQorCisvKgorICogeG1lbWR1cHooKSBhbGxvY2F0ZXMgKGxlbiArIDEpIGJ5dGVzIG9mIG1lbW9yeSwgZHVwbGljYXRlcyAibGVuIiBieXRlcyBvZgorICogImRhdGEiIHRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LCB6ZXJvIHRlcm1pbmF0ZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnksCisgKiBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBtZW1vcnkuIElmIHRoZSBhbGxvY2F0aW9uIGZhaWxzLAorICogdGhlIHByb2dyYW0gZGllcy4KKyAqLwordm9pZCAqeG1lbWR1cHooY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gbWVtY3B5KHhtYWxsb2N6KGxlbiksIGRhdGEsIGxlbik7Cit9CisKK2NoYXIgKnhzdHJuZHVwKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbikKK3sKKwljaGFyICpwID0gbWVtY2hyKHN0ciwgJ1wwJywgbGVuKTsKKwlyZXR1cm4geG1lbWR1cHooc3RyLCBwID8gcCAtIHN0ciA6IGxlbik7Cit9CisKK3ZvaWQgKnhyZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcmV0OworCisJbWVtb3J5X2xpbWl0X2NoZWNrKHNpemUsIDApOworCXJldCA9IHJlYWxsb2MocHRyLCBzaXplKTsKKwlpZiAoIXJldCAmJiAhc2l6ZSkKKwkJcmV0ID0gcmVhbGxvYyhwdHIsIDEpOworCWlmICghcmV0KSB7CisJCXRyeV90b19mcmVlX3JvdXRpbmUoc2l6ZSk7CisJCXJldCA9IHJlYWxsb2MocHRyLCBzaXplKTsKKwkJaWYgKCFyZXQgJiYgIXNpemUpCisJCQlyZXQgPSByZWFsbG9jKHB0ciwgMSk7CisJCWlmICghcmV0KQorCQkJZGllKCJPdXQgb2YgbWVtb3J5LCByZWFsbG9jIGZhaWxlZCIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkICp4Y2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcmV0OworCisJbWVtb3J5X2xpbWl0X2NoZWNrKHNpemUgKiBubWVtYiwgMCk7CisJcmV0ID0gY2FsbG9jKG5tZW1iLCBzaXplKTsKKwlpZiAoIXJldCAmJiAoIW5tZW1iIHx8ICFzaXplKSkKKwkJcmV0ID0gY2FsbG9jKDEsIDEpOworCWlmICghcmV0KSB7CisJCXRyeV90b19mcmVlX3JvdXRpbmUobm1lbWIgKiBzaXplKTsKKwkJcmV0ID0gY2FsbG9jKG5tZW1iLCBzaXplKTsKKwkJaWYgKCFyZXQgJiYgKCFubWVtYiB8fCAhc2l6ZSkpCisJCQlyZXQgPSBjYWxsb2MoMSwgMSk7CisJCWlmICghcmV0KQorCQkJZGllKCJPdXQgb2YgbWVtb3J5LCBjYWxsb2MgZmFpbGVkIik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBMaW1pdCBzaXplIG9mIElPIGNodW5rcywgYmVjYXVzZSBodWdlIGNodW5rcyBvbmx5IGNhdXNlIHBhaW4uICBPUyBYCisgKiA2NC1iaXQgaXMgYnVnZ3ksIHJldHVybmluZyBFSU5WQUwgaWYgbGVuID49IElOVF9NQVg7IGFuZCBldmVuIGluCisgKiB0aGUgYWJzZW5jZSBvZiBidWdzLCBsYXJnZSBjaHVua3MgY2FuIHJlc3VsdCBpbiBiYWQgbGF0ZW5jaWVzIHdoZW4KKyAqIHlvdSBkZWNpZGUgdG8ga2lsbCB0aGUgcHJvY2Vzcy4KKyAqCisgKiBXZSBwaWNrIDggTWlCIGFzIG91ciBkZWZhdWx0LCBidXQgaWYgdGhlIHBsYXRmb3JtIGRlZmluZXMgU1NJWkVfTUFYCisgKiB0aGF0IGlzIHNtYWxsZXIgdGhhbiB0aGF0LCBjbGlwIGl0IHRvIFNTSVpFX01BWCwgYXMgYSBjYWxsIHRvCisgKiByZWFkKDIpIG9yIHdyaXRlKDIpIGxhcmdlciB0aGFuIHRoYXQgaXMgYWxsb3dlZCB0byBmYWlsLiAgQXMgdGhlIGxhc3QKKyAqIHJlc29ydCwgd2UgYWxsb3cgYSBwb3J0IHRvIHBhc3MgdmlhIENGTEFHUyBlLmcuICItRE1BWF9JT19TSVpFPXZhbHVlIgorICogdG8gb3ZlcnJpZGUgdGhpcywgaWYgdGhlIGRlZmluaXRpb24gb2YgU1NJWkVfTUFYIGdpdmVuIGJ5IHRoZSBwbGF0Zm9ybQorICogaXMgYnJva2VuLgorICovCisjaWZuZGVmIE1BWF9JT19TSVpFCisjIGRlZmluZSBNQVhfSU9fU0laRV9ERUZBVUxUICg4KjEwMjQqMTAyNCkKKyMgaWYgZGVmaW5lZChTU0laRV9NQVgpICYmIChTU0laRV9NQVggPCBNQVhfSU9fU0laRV9ERUZBVUxUKQorIyAgZGVmaW5lIE1BWF9JT19TSVpFIFNTSVpFX01BWAorIyBlbHNlCisjICBkZWZpbmUgTUFYX0lPX1NJWkUgTUFYX0lPX1NJWkVfREVGQVVMVAorIyBlbmRpZgorI2VuZGlmCisKKy8qKgorICogeG9wZW4oKSBpcyB0aGUgc2FtZSBhcyBvcGVuKCksIGJ1dCBpdCBkaWUoKXMgaWYgdGhlIG9wZW4oKSBmYWlscy4KKyAqLworaW50IHhvcGVuKGNvbnN0IGNoYXIgKnBhdGgsIGludCBvZmxhZywgLi4uKQoreworCW1vZGVfdCBtb2RlID0gMDsKKwl2YV9saXN0IGFwOworCisJLyoKKwkgKiB2YV9hcmcoKSB3aWxsIGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGlmIHRoZSBzcGVjaWZpZWQgdHlwZSBpcyBub3QKKwkgKiBjb21wYXRpYmxlIHdpdGggdGhlIGFyZ3VtZW50IHR5cGUuIFNpbmNlIGludGVnZXJzIGFyZSBwcm9tb3RlZCB0bworCSAqIGludHMsIHdlIGZldGNoIHRoZSBuZXh0IGFyZ3VtZW50IGFzIGFuIGludCwgYW5kIHRoZW4gY2FzdCBpdCB0byBhCisJICogbW9kZV90IHRvIGF2b2lkIHVuZGVmaW5lZCBiZWhhdmlvci4KKwkgKi8KKwl2YV9zdGFydChhcCwgb2ZsYWcpOworCWlmIChvZmxhZyAmIE9fQ1JFQVQpCisJCW1vZGUgPSB2YV9hcmcoYXAsIGludCk7CisJdmFfZW5kKGFwKTsKKworCWZvciAoOzspIHsKKwkJaW50IGZkID0gb3BlbihwYXRoLCBvZmxhZywgbW9kZSk7CisJCWlmIChmZCA+PSAwKQorCQkJcmV0dXJuIGZkOworCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQljb250aW51ZTsKKworCQlpZiAoKG9mbGFnICYgT19SRFdSKSA9PSBPX1JEV1IpCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIpLCBwYXRoKTsKKwkJZWxzZSBpZiAoKG9mbGFnICYgT19XUk9OTFkpID09IE9fV1JPTkxZKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICclcycgZm9yIHdyaXRpbmciKSwgcGF0aCk7CisJCWVsc2UKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciByZWFkaW5nIiksIHBhdGgpOworCX0KK30KKworLyoKKyAqIHhyZWFkKCkgaXMgdGhlIHNhbWUgYSByZWFkKCksIGJ1dCBpdCBhdXRvbWF0aWNhbGx5IHJlc3RhcnRzIHJlYWQoKQorICogb3BlcmF0aW9ucyB3aXRoIGEgcmVjb3ZlcmFibGUgZXJyb3IgKEVBR0FJTiBhbmQgRUlOVFIpLiB4cmVhZCgpCisgKiBET0VTIE5PVCBHVUFSQU5URUUgdGhhdCAibGVuIiBieXRlcyBpcyByZWFkIGV2ZW4gaWYgdGhlIGRhdGEgaXMgYXZhaWxhYmxlLgorICovCitzc2l6ZV90IHhyZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXNzaXplX3QgbnI7CisJaWYgKGxlbiA+IE1BWF9JT19TSVpFKQorCSAgICBsZW4gPSBNQVhfSU9fU0laRTsKKwl3aGlsZSAoMSkgeworCQluciA9IHJlYWQoZmQsIGJ1ZiwgbGVuKTsKKwkJaWYgKChuciA8IDApICYmIChlcnJubyA9PSBFQUdBSU4gfHwgZXJybm8gPT0gRUlOVFIpKQorCQkJY29udGludWU7CisJCXJldHVybiBucjsKKwl9Cit9CisKKy8qCisgKiB4d3JpdGUoKSBpcyB0aGUgc2FtZSBhIHdyaXRlKCksIGJ1dCBpdCBhdXRvbWF0aWNhbGx5IHJlc3RhcnRzIHdyaXRlKCkKKyAqIG9wZXJhdGlvbnMgd2l0aCBhIHJlY292ZXJhYmxlIGVycm9yIChFQUdBSU4gYW5kIEVJTlRSKS4geHdyaXRlKCkgRE9FUyBOT1QKKyAqIEdVQVJBTlRFRSB0aGF0ICJsZW4iIGJ5dGVzIGlzIHdyaXR0ZW4gZXZlbiBpZiB0aGUgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwuCisgKi8KK3NzaXplX3QgeHdyaXRlKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXNzaXplX3QgbnI7CisJaWYgKGxlbiA+IE1BWF9JT19TSVpFKQorCSAgICBsZW4gPSBNQVhfSU9fU0laRTsKKwl3aGlsZSAoMSkgeworCQluciA9IHdyaXRlKGZkLCBidWYsIGxlbik7CisJCWlmICgobnIgPCAwKSAmJiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gbnI7CisJfQorfQorCisvKgorICogeHByZWFkKCkgaXMgdGhlIHNhbWUgYXMgcHJlYWQoKSwgYnV0IGl0IGF1dG9tYXRpY2FsbHkgcmVzdGFydHMgcHJlYWQoKQorICogb3BlcmF0aW9ucyB3aXRoIGEgcmVjb3ZlcmFibGUgZXJyb3IgKEVBR0FJTiBhbmQgRUlOVFIpLiB4cHJlYWQoKSBET0VTCisgKiBOT1QgR1VBUkFOVEVFIHRoYXQgImxlbiIgYnl0ZXMgaXMgcmVhZCBldmVuIGlmIHRoZSBkYXRhIGlzIGF2YWlsYWJsZS4KKyAqLworc3NpemVfdCB4cHJlYWQoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBsZW4sIG9mZl90IG9mZnNldCkKK3sKKwlzc2l6ZV90IG5yOworCWlmIChsZW4gPiBNQVhfSU9fU0laRSkKKwkJbGVuID0gTUFYX0lPX1NJWkU7CisJd2hpbGUgKDEpIHsKKwkJbnIgPSBwcmVhZChmZCwgYnVmLCBsZW4sIG9mZnNldCk7CisJCWlmICgobnIgPCAwKSAmJiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVJTlRSKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gbnI7CisJfQorfQorCitzc2l6ZV90IHJlYWRfaW5fZnVsbChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWNoYXIgKnAgPSBidWY7CisJc3NpemVfdCB0b3RhbCA9IDA7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXNzaXplX3QgbG9hZGVkID0geHJlYWQoZmQsIHAsIGNvdW50KTsKKwkJaWYgKGxvYWRlZCA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChsb2FkZWQgPT0gMCkKKwkJCXJldHVybiB0b3RhbDsKKwkJY291bnQgLT0gbG9hZGVkOworCQlwICs9IGxvYWRlZDsKKwkJdG90YWwgKz0gbG9hZGVkOworCX0KKworCXJldHVybiB0b3RhbDsKK30KKworc3NpemVfdCB3cml0ZV9pbl9mdWxsKGludCBmZCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJY29uc3QgY2hhciAqcCA9IGJ1ZjsKKwlzc2l6ZV90IHRvdGFsID0gMDsKKworCXdoaWxlIChjb3VudCA+IDApIHsKKwkJc3NpemVfdCB3cml0dGVuID0geHdyaXRlKGZkLCBwLCBjb3VudCk7CisJCWlmICh3cml0dGVuIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKCF3cml0dGVuKSB7CisJCQllcnJubyA9IEVOT1NQQzsKKwkJCXJldHVybiAtMTsKKwkJfQorCQljb3VudCAtPSB3cml0dGVuOworCQlwICs9IHdyaXR0ZW47CisJCXRvdGFsICs9IHdyaXR0ZW47CisJfQorCisJcmV0dXJuIHRvdGFsOworfQorCitzc2l6ZV90IHByZWFkX2luX2Z1bGwoaW50IGZkLCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwgb2ZmX3Qgb2Zmc2V0KQoreworCWNoYXIgKnAgPSBidWY7CisJc3NpemVfdCB0b3RhbCA9IDA7CisKKwl3aGlsZSAoY291bnQgPiAwKSB7CisJCXNzaXplX3QgbG9hZGVkID0geHByZWFkKGZkLCBwLCBjb3VudCwgb2Zmc2V0KTsKKwkJaWYgKGxvYWRlZCA8IDApCisJCQlyZXR1cm4gLTE7CisJCWlmIChsb2FkZWQgPT0gMCkKKwkJCXJldHVybiB0b3RhbDsKKwkJY291bnQgLT0gbG9hZGVkOworCQlwICs9IGxvYWRlZDsKKwkJdG90YWwgKz0gbG9hZGVkOworCQlvZmZzZXQgKz0gbG9hZGVkOworCX0KKworCXJldHVybiB0b3RhbDsKK30KKworaW50IHhkdXAoaW50IGZkKQoreworCWludCByZXQgPSBkdXAoZmQpOworCWlmIChyZXQgPCAwKQorCQlkaWVfZXJybm8oImR1cCBmYWlsZWQiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHhmb3BlbigpIGlzIHRoZSBzYW1lIGFzIGZvcGVuKCksIGJ1dCBpdCBkaWUoKXMgaWYgdGhlIGZvcGVuKCkgZmFpbHMuCisgKi8KK0ZJTEUgKnhmb3Blbihjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQoreworCWZvciAoOzspIHsKKwkJRklMRSAqZnAgPSBmb3BlbihwYXRoLCBtb2RlKTsKKwkJaWYgKGZwKQorCQkJcmV0dXJuIGZwOworCQlpZiAoZXJybm8gPT0gRUlOVFIpCisJCQljb250aW51ZTsKKworCQlpZiAoKm1vZGUgJiYgbW9kZVsxXSA9PSAnKycpCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyIpLCBwYXRoKTsKKwkJZWxzZSBpZiAoKm1vZGUgPT0gJ3cnIHx8ICptb2RlID09ICdhJykKKwkJCWRpZV9lcnJubyhfKCJjb3VsZCBub3Qgb3BlbiAnJXMnIGZvciB3cml0aW5nIiksIHBhdGgpOworCQllbHNlCisJCQlkaWVfZXJybm8oXygiY291bGQgbm90IG9wZW4gJyVzJyBmb3IgcmVhZGluZyIpLCBwYXRoKTsKKwl9Cit9CisKK0ZJTEUgKnhmZG9wZW4oaW50IGZkLCBjb25zdCBjaGFyICptb2RlKQoreworCUZJTEUgKnN0cmVhbSA9IGZkb3BlbihmZCwgbW9kZSk7CisJaWYgKHN0cmVhbSA9PSBOVUxMKQorCQlkaWVfZXJybm8oIk91dCBvZiBtZW1vcnk/IGZkb3BlbiBmYWlsZWQiKTsKKwlyZXR1cm4gc3RyZWFtOworfQorCitpbnQgeG1rc3RlbXAoY2hhciAqdGVtcGxhdGUpCit7CisJaW50IGZkOworCWNoYXIgb3JpZ3RlbXBsYXRlW1BBVEhfTUFYXTsKKwlzdHJsY3B5KG9yaWd0ZW1wbGF0ZSwgdGVtcGxhdGUsIHNpemVvZihvcmlndGVtcGxhdGUpKTsKKworCWZkID0gbWtzdGVtcCh0ZW1wbGF0ZSk7CisJaWYgKGZkIDwgMCkgeworCQlpbnQgc2F2ZWRfZXJybm8gPSBlcnJubzsKKwkJY29uc3QgY2hhciAqbm9ucmVsYXRpdmVfdGVtcGxhdGU7CisKKwkJaWYgKHN0cmxlbih0ZW1wbGF0ZSkgIT0gc3RybGVuKG9yaWd0ZW1wbGF0ZSkpCisJCQl0ZW1wbGF0ZSA9IG9yaWd0ZW1wbGF0ZTsKKworCQlub25yZWxhdGl2ZV90ZW1wbGF0ZSA9IGFic29sdXRlX3BhdGgodGVtcGxhdGUpOworCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQlkaWVfZXJybm8oIlVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJyVzJyIsCisJCQlub25yZWxhdGl2ZV90ZW1wbGF0ZSk7CisJfQorCXJldHVybiBmZDsKK30KKworLyogZ2l0X21rc3RlbXAoKSAtIGNyZWF0ZSB0bXAgZmlsZSBob25vcmluZyBUTVBESVIgdmFyaWFibGUgKi8KK2ludCBnaXRfbWtzdGVtcChjaGFyICpwYXRoLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICp0ZW1wbGF0ZSkKK3sKKwljb25zdCBjaGFyICp0bXA7CisJc2l6ZV90IG47CisKKwl0bXAgPSBnZXRlbnYoIlRNUERJUiIpOworCWlmICghdG1wKQorCQl0bXAgPSAiL3RtcCI7CisJbiA9IHNucHJpbnRmKHBhdGgsIGxlbiwgIiVzLyVzIiwgdG1wLCB0ZW1wbGF0ZSk7CisJaWYgKGxlbiA8PSBuKSB7CisJCWVycm5vID0gRU5BTUVUT09MT05HOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBta3N0ZW1wKHBhdGgpOworfQorCisvKiBnaXRfbWtzdGVtcHMoKSAtIGNyZWF0ZSB0bXAgZmlsZSB3aXRoIHN1ZmZpeCBob25vcmluZyBUTVBESVIgdmFyaWFibGUuICovCitpbnQgZ2l0X21rc3RlbXBzKGNoYXIgKnBhdGgsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKnRlbXBsYXRlLCBpbnQgc3VmZml4X2xlbikKK3sKKwljb25zdCBjaGFyICp0bXA7CisJc2l6ZV90IG47CisKKwl0bXAgPSBnZXRlbnYoIlRNUERJUiIpOworCWlmICghdG1wKQorCQl0bXAgPSAiL3RtcCI7CisJbiA9IHNucHJpbnRmKHBhdGgsIGxlbiwgIiVzLyVzIiwgdG1wLCB0ZW1wbGF0ZSk7CisJaWYgKGxlbiA8PSBuKSB7CisJCWVycm5vID0gRU5BTUVUT09MT05HOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBta3N0ZW1wcyhwYXRoLCBzdWZmaXhfbGVuKTsKK30KKworLyogQWRhcHRlZCBmcm9tIGxpYmliZXJ0eSdzIG1rc3RlbXAuYy4gKi8KKworI3VuZGVmIFRNUF9NQVgKKyNkZWZpbmUgVE1QX01BWCAxNjM4NAorCitpbnQgZ2l0X21rc3RlbXBzX21vZGUoY2hhciAqcGF0dGVybiwgaW50IHN1ZmZpeF9sZW4sIGludCBtb2RlKQoreworCXN0YXRpYyBjb25zdCBjaGFyIGxldHRlcnNbXSA9CisJCSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIKKwkJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorCQkiMDEyMzQ1Njc4OSI7CisJc3RhdGljIGNvbnN0IGludCBudW1fbGV0dGVycyA9IDYyOworCXVpbnQ2NF90IHZhbHVlOworCXN0cnVjdCB0aW1ldmFsIHR2OworCWNoYXIgKnRlbXBsYXRlOworCXNpemVfdCBsZW47CisJaW50IGZkLCBjb3VudDsKKworCWxlbiA9IHN0cmxlbihwYXR0ZXJuKTsKKworCWlmIChsZW4gPCA2ICsgc3VmZml4X2xlbikgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChzdHJuY21wKCZwYXR0ZXJuW2xlbiAtIDYgLSBzdWZmaXhfbGVuXSwgIlhYWFhYWCIsIDYpKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCisJLyoKKwkgKiBSZXBsYWNlIHBhdHRlcm4ncyBYWFhYWFggY2hhcmFjdGVycyB3aXRoIHJhbmRvbW5lc3MuCisJICogVHJ5IFRNUF9NQVggZGlmZmVyZW50IGZpbGVuYW1lcy4KKwkgKi8KKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwl2YWx1ZSA9ICgoc2l6ZV90KSh0di50dl91c2VjIDw8IDE2KSkgXiB0di50dl9zZWMgXiBnZXRwaWQoKTsKKwl0ZW1wbGF0ZSA9ICZwYXR0ZXJuW2xlbiAtIDYgLSBzdWZmaXhfbGVuXTsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBUTVBfTUFYOyArK2NvdW50KSB7CisJCXVpbnQ2NF90IHYgPSB2YWx1ZTsKKwkJLyogRmlsbCBpbiB0aGUgcmFuZG9tIGJpdHMuICovCisJCXRlbXBsYXRlWzBdID0gbGV0dGVyc1t2ICUgbnVtX2xldHRlcnNdOyB2IC89IG51bV9sZXR0ZXJzOworCQl0ZW1wbGF0ZVsxXSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsgdiAvPSBudW1fbGV0dGVyczsKKwkJdGVtcGxhdGVbMl0gPSBsZXR0ZXJzW3YgJSBudW1fbGV0dGVyc107IHYgLz0gbnVtX2xldHRlcnM7CisJCXRlbXBsYXRlWzNdID0gbGV0dGVyc1t2ICUgbnVtX2xldHRlcnNdOyB2IC89IG51bV9sZXR0ZXJzOworCQl0ZW1wbGF0ZVs0XSA9IGxldHRlcnNbdiAlIG51bV9sZXR0ZXJzXTsgdiAvPSBudW1fbGV0dGVyczsKKwkJdGVtcGxhdGVbNV0gPSBsZXR0ZXJzW3YgJSBudW1fbGV0dGVyc107IHYgLz0gbnVtX2xldHRlcnM7CisKKwkJZmQgPSBvcGVuKHBhdHRlcm4sIE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1JEV1IsIG1vZGUpOworCQlpZiAoZmQgPj0gMCkKKwkJCXJldHVybiBmZDsKKwkJLyoKKwkJICogRmF0YWwgZXJyb3IgKEVQRVJNLCBFTk9TUEMgZXRjKS4KKwkJICogSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGxvb3AuCisJCSAqLworCQlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJYnJlYWs7CisJCS8qCisJCSAqIFRoaXMgaXMgYSByYW5kb20gdmFsdWUuICBJdCBpcyBvbmx5IG5lY2Vzc2FyeSB0aGF0CisJCSAqIHRoZSBuZXh0IFRNUF9NQVggdmFsdWVzIGdlbmVyYXRlZCBieSBhZGRpbmcgNzc3NyB0bworCQkgKiBWQUxVRSBhcmUgZGlmZmVyZW50IHdpdGggKG1vZHVsZSAyXjMyKS4KKwkJICovCisJCXZhbHVlICs9IDc3Nzc7CisJfQorCS8qIFdlIHJldHVybiB0aGUgbnVsbCBzdHJpbmcgaWYgd2UgY2FuJ3QgZmluZCBhIHVuaXF1ZSBmaWxlIG5hbWUuICAqLworCXBhdHRlcm5bMF0gPSAnXDAnOworCXJldHVybiAtMTsKK30KKworaW50IGdpdF9ta3N0ZW1wX21vZGUoY2hhciAqcGF0dGVybiwgaW50IG1vZGUpCit7CisJLyogbWtzdGVtcCBpcyBqdXN0IG1rc3RlbXBzIHdpdGggbm8gc3VmZml4ICovCisJcmV0dXJuIGdpdF9ta3N0ZW1wc19tb2RlKHBhdHRlcm4sIDAsIG1vZGUpOworfQorCisjaWZkZWYgTk9fTUtTVEVNUFMKK2ludCBnaXRta3N0ZW1wcyhjaGFyICpwYXR0ZXJuLCBpbnQgc3VmZml4X2xlbikKK3sKKwlyZXR1cm4gZ2l0X21rc3RlbXBzX21vZGUocGF0dGVybiwgc3VmZml4X2xlbiwgMDYwMCk7Cit9CisjZW5kaWYKKworaW50IHhta3N0ZW1wX21vZGUoY2hhciAqdGVtcGxhdGUsIGludCBtb2RlKQoreworCWludCBmZDsKKwljaGFyIG9yaWd0ZW1wbGF0ZVtQQVRIX01BWF07CisJc3RybGNweShvcmlndGVtcGxhdGUsIHRlbXBsYXRlLCBzaXplb2Yob3JpZ3RlbXBsYXRlKSk7CisKKwlmZCA9IGdpdF9ta3N0ZW1wX21vZGUodGVtcGxhdGUsIG1vZGUpOworCWlmIChmZCA8IDApIHsKKwkJaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisJCWNvbnN0IGNoYXIgKm5vbnJlbGF0aXZlX3RlbXBsYXRlOworCisJCWlmICghdGVtcGxhdGVbMF0pCisJCQl0ZW1wbGF0ZSA9IG9yaWd0ZW1wbGF0ZTsKKworCQlub25yZWxhdGl2ZV90ZW1wbGF0ZSA9IGFic29sdXRlX3BhdGgodGVtcGxhdGUpOworCQllcnJubyA9IHNhdmVkX2Vycm5vOworCQlkaWVfZXJybm8oIlVuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJyVzJyIsCisJCQlub25yZWxhdGl2ZV90ZW1wbGF0ZSk7CisJfQorCXJldHVybiBmZDsKK30KKworc3RhdGljIGludCB3YXJuX2lmX3VucmVtb3ZhYmxlKGNvbnN0IGNoYXIgKm9wLCBjb25zdCBjaGFyICpmaWxlLCBpbnQgcmMpCit7CisJaW50IGVycjsKKwlpZiAoIXJjIHx8IGVycm5vID09IEVOT0VOVCkKKwkJcmV0dXJuIDA7CisJZXJyID0gZXJybm87CisJd2FybmluZygidW5hYmxlIHRvICVzICVzOiAlcyIsIG9wLCBmaWxlLCBzdHJlcnJvcihlcnJubykpOworCWVycm5vID0gZXJyOworCXJldHVybiByYzsKK30KKworaW50IHVubGlua19vcl9tc2coY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHN0cmJ1ZiAqZXJyKQoreworCWludCByYyA9IHVubGluayhmaWxlKTsKKworCWFzc2VydChlcnIpOworCisJaWYgKCFyYyB8fCBlcnJubyA9PSBFTk9FTlQpCisJCXJldHVybiAwOworCisJc3RyYnVmX2FkZGYoZXJyLCAidW5hYmxlIHRvIHVubGluayAlczogJXMiLAorCQkgICAgZmlsZSwgc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCB1bmxpbmtfb3Jfd2Fybihjb25zdCBjaGFyICpmaWxlKQoreworCXJldHVybiB3YXJuX2lmX3VucmVtb3ZhYmxlKCJ1bmxpbmsiLCBmaWxlLCB1bmxpbmsoZmlsZSkpOworfQorCitpbnQgcm1kaXJfb3Jfd2Fybihjb25zdCBjaGFyICpmaWxlKQoreworCXJldHVybiB3YXJuX2lmX3VucmVtb3ZhYmxlKCJybWRpciIsIGZpbGUsIHJtZGlyKGZpbGUpKTsKK30KKworaW50IHJlbW92ZV9vcl93YXJuKHVuc2lnbmVkIGludCBtb2RlLCBjb25zdCBjaGFyICpmaWxlKQoreworCXJldHVybiBTX0lTR0lUTElOSyhtb2RlKSA/IHJtZGlyX29yX3dhcm4oZmlsZSkgOiB1bmxpbmtfb3Jfd2FybihmaWxlKTsKK30KKwordm9pZCB3YXJuX29uX2luYWNjZXNzaWJsZShjb25zdCBjaGFyICpwYXRoKQoreworCXdhcm5pbmcoXygidW5hYmxlIHRvIGFjY2VzcyAnJXMnOiAlcyIpLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworfQorCitzdGF0aWMgaW50IGFjY2Vzc19lcnJvcl9pc19vayhpbnQgZXJyLCB1bnNpZ25lZCBmbGFnKQoreworCXJldHVybiBlcnIgPT0gRU5PRU5UIHx8IGVyciA9PSBFTk9URElSIHx8CisJCSgoZmxhZyAmIEFDQ0VTU19FQUNDRVNfT0spICYmIGVyciA9PSBFQUNDRVMpOworfQorCitpbnQgYWNjZXNzX29yX3dhcm4oY29uc3QgY2hhciAqcGF0aCwgaW50IG1vZGUsIHVuc2lnbmVkIGZsYWcpCit7CisJaW50IHJldCA9IGFjY2VzcyhwYXRoLCBtb2RlKTsKKwlpZiAocmV0ICYmICFhY2Nlc3NfZXJyb3JfaXNfb2soZXJybm8sIGZsYWcpKQorCQl3YXJuX29uX2luYWNjZXNzaWJsZShwYXRoKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgYWNjZXNzX29yX2RpZShjb25zdCBjaGFyICpwYXRoLCBpbnQgbW9kZSwgdW5zaWduZWQgZmxhZykKK3sKKwlpbnQgcmV0ID0gYWNjZXNzKHBhdGgsIG1vZGUpOworCWlmIChyZXQgJiYgIWFjY2Vzc19lcnJvcl9pc19vayhlcnJubywgZmxhZykpCisJCWRpZV9lcnJubyhfKCJ1bmFibGUgdG8gYWNjZXNzICclcyciKSwgcGF0aCk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IHBhc3N3ZCAqeGdldHB3dWlkX3NlbGYodm9pZCkKK3sKKwlzdHJ1Y3QgcGFzc3dkICpwdzsKKworCWVycm5vID0gMDsKKwlwdyA9IGdldHB3dWlkKGdldHVpZCgpKTsKKwlpZiAoIXB3KQorCQlkaWUoXygidW5hYmxlIHRvIGxvb2sgdXAgY3VycmVudCB1c2VyIGluIHRoZSBwYXNzd2QgZmlsZTogJXMiKSwKKwkJICAgIGVycm5vID8gc3RyZXJyb3IoZXJybm8pIDogXygibm8gc3VjaCB1c2VyIikpOworCXJldHVybiBwdzsKK30KKworY2hhciAqeGdldGN3ZCh2b2lkKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlpZiAoc3RyYnVmX2dldGN3ZCgmc2IpKQorCQlkaWVfZXJybm8oXygidW5hYmxlIHRvIGdldCBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IikpOworCXJldHVybiBzdHJidWZfZGV0YWNoKCZzYiwgTlVMTCk7Cit9CisKK2ludCB4c25wcmludGYoY2hhciAqZHN0LCBzaXplX3QgbWF4LCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWludCBsZW47CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlsZW4gPSB2c25wcmludGYoZHN0LCBtYXgsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisKKwlpZiAobGVuIDwgMCkKKwkJZGllKCJCVUc6IHlvdXIgc25wcmludGYgaXMgYnJva2VuIik7CisJaWYgKGxlbiA+PSBtYXgpCisJCWRpZSgiQlVHOiBhdHRlbXB0IHRvIHNucHJpbnRmIGludG8gdG9vLXNtYWxsIGJ1ZmZlciIpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfZmlsZV92KGNvbnN0IGNoYXIgKnBhdGgsIGludCBmYXRhbCwKKwkJCWNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBwYXJhbXMpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWludCBmZCA9IG9wZW4ocGF0aCwgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NjYpOworCWlmIChmZCA8IDApIHsKKwkJaWYgKGZhdGFsKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBvcGVuICVzIGZvciB3cml0aW5nIiksIHBhdGgpOworCQlyZXR1cm4gLTE7CisJfQorCXN0cmJ1Zl92YWRkZigmc2IsIGZtdCwgcGFyYW1zKTsKKwlzdHJidWZfY29tcGxldGVfbGluZSgmc2IpOworCWlmICh3cml0ZV9pbl9mdWxsKGZkLCBzYi5idWYsIHNiLmxlbikgIT0gc2IubGVuKSB7CisJCWludCBlcnIgPSBlcnJubzsKKwkJY2xvc2UoZmQpOworCQlzdHJidWZfcmVsZWFzZSgmc2IpOworCQllcnJubyA9IGVycjsKKwkJaWYgKGZhdGFsKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCB3cml0ZSB0byAlcyIpLCBwYXRoKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCWlmIChjbG9zZShmZCkpIHsKKwkJaWYgKGZhdGFsKQorCQkJZGllX2Vycm5vKF8oImNvdWxkIG5vdCBjbG9zZSAlcyIpLCBwYXRoKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IHdyaXRlX2ZpbGUoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHN0YXR1czsKKwl2YV9saXN0IHBhcmFtczsKKworCXZhX3N0YXJ0KHBhcmFtcywgZm10KTsKKwlzdGF0dXMgPSB3cml0ZV9maWxlX3YocGF0aCwgMSwgZm10LCBwYXJhbXMpOworCXZhX2VuZChwYXJhbXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKK2ludCB3cml0ZV9maWxlX2dlbnRseShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgc3RhdHVzOworCXZhX2xpc3QgcGFyYW1zOworCisJdmFfc3RhcnQocGFyYW1zLCBmbXQpOworCXN0YXR1cyA9IHdyaXRlX2ZpbGVfdihwYXRoLCAwLCBmbXQsIHBhcmFtcyk7CisJdmFfZW5kKHBhcmFtcyk7CisJcmV0dXJuIHN0YXR1czsKK30KKwordm9pZCBzbGVlcF9taWxsaXNlYyhpbnQgbWlsbGlzZWMpCit7CisJcG9sbChOVUxMLCAwLCBtaWxsaXNlYyk7Cit9CmRpZmYgLS1naXQgYS93cml0ZV9vcl9kaWUuYyBiL3dyaXRlX29yX2RpZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YWZlN2EKLS0tIC9kZXYvbnVsbAorKysgYi93cml0ZV9vcl9kaWUuYwpAQCAtMCwwICsxLDEwMyBAQAorI2luY2x1ZGUgImNhY2hlLmgiCisKK3N0YXRpYyB2b2lkIGNoZWNrX3BpcGUoaW50IGVycikKK3sKKwlpZiAoZXJyID09IEVQSVBFKSB7CisJCXNpZ25hbChTSUdQSVBFLCBTSUdfREZMKTsKKwkJcmFpc2UoU0lHUElQRSk7CisJCS8qIFNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2UuLi4gKi8KKwkJZXhpdCgxNDEpOworCX0KK30KKworLyoKKyAqIFNvbWUgY2FzZXMgdXNlIHN0ZGlvLCBidXQgd2FudCB0byBmbHVzaCBhZnRlciB0aGUgd3JpdGUKKyAqIHRvIGdldCBlcnJvciBoYW5kbGluZyAoYW5kIHRvIGdldCBiZXR0ZXIgaW50ZXJhY3RpdmUKKyAqIGJlaGF2aW91ciAtIG5vdCBidWZmZXJpbmcgZXhjZXNzaXZlbHkpLgorICoKKyAqIE9mIGNvdXJzZSwgaWYgdGhlIGZsdXNoIGhhcHBlbmVkIHdpdGhpbiB0aGUgd3JpdGUgaXRzZWxmLAorICogd2UndmUgYWxyZWFkeSBsb3N0IHRoZSBlcnJvciBjb2RlLCBhbmQgY2Fubm90IHJlcG9ydCBpdCBhbnkKKyAqIG1vcmUuIFNvIHdlIGp1c3QgaWdub3JlIHRoYXQgY2FzZSBpbnN0ZWFkIChhbmQgaG9wZSB3ZSBnZXQKKyAqIHRoZSByaWdodCBlcnJvciBjb2RlIG9uIHRoZSBmbHVzaCkuCisgKgorICogSWYgdGhlIGZpbGUgaGFuZGxlIGlzIHN0ZG91dCwgYW5kIHN0ZG91dCBpcyBhIGZpbGUsIHRoZW4gc2tpcCB0aGUKKyAqIGZsdXNoIGVudGlyZWx5IHNpbmNlIGl0J3Mgbm90IG5lZWRlZC4KKyAqLwordm9pZCBtYXliZV9mbHVzaF9vcl9kaWUoRklMRSAqZiwgY29uc3QgY2hhciAqZGVzYykKK3sKKwlzdGF0aWMgaW50IHNraXBfc3Rkb3V0X2ZsdXNoID0gLTE7CisJc3RydWN0IHN0YXQgc3Q7CisJY2hhciAqY3A7CisKKwlpZiAoZiA9PSBzdGRvdXQpIHsKKwkJaWYgKHNraXBfc3Rkb3V0X2ZsdXNoIDwgMCkgeworCQkJY3AgPSBnZXRlbnYoIkdJVF9GTFVTSCIpOworCQkJaWYgKGNwKQorCQkJCXNraXBfc3Rkb3V0X2ZsdXNoID0gKGF0b2koY3ApID09IDApOworCQkJZWxzZSBpZiAoKGZzdGF0KGZpbGVubyhzdGRvdXQpLCAmc3QpID09IDApICYmCisJCQkJIFNfSVNSRUcoc3Quc3RfbW9kZSkpCisJCQkJc2tpcF9zdGRvdXRfZmx1c2ggPSAxOworCQkJZWxzZQorCQkJCXNraXBfc3Rkb3V0X2ZsdXNoID0gMDsKKwkJfQorCQlpZiAoc2tpcF9zdGRvdXRfZmx1c2ggJiYgIWZlcnJvcihmKSkKKwkJCXJldHVybjsKKwl9CisJaWYgKGZmbHVzaChmKSkgeworCQljaGVja19waXBlKGVycm5vKTsKKwkJZGllX2Vycm5vKCJ3cml0ZSBmYWlsdXJlIG9uICclcyciLCBkZXNjKTsKKwl9Cit9CisKK3ZvaWQgZnByaW50Zl9vcl9kaWUoRklMRSAqZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZwcmludGYoZiwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWNoZWNrX3BpcGUoZXJybm8pOworCQlkaWVfZXJybm8oIndyaXRlIGVycm9yIik7CisJfQorfQorCit2b2lkIGZzeW5jX29yX2RpZShpbnQgZmQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKwlpZiAoZnN5bmMoZmQpIDwgMCkgeworCQlkaWVfZXJybm8oImZzeW5jIGVycm9yIG9uICclcyciLCBtc2cpOworCX0KK30KKwordm9pZCB3cml0ZV9vcl9kaWUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpZiAod3JpdGVfaW5fZnVsbChmZCwgYnVmLCBjb3VudCkgPCAwKSB7CisJCWNoZWNrX3BpcGUoZXJybm8pOworCQlkaWVfZXJybm8oIndyaXRlIGVycm9yIik7CisJfQorfQorCitpbnQgd3JpdGVfb3Jfd2hpbmVfcGlwZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICptc2cpCit7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1ZiwgY291bnQpIDwgMCkgeworCQljaGVja19waXBlKGVycm5vKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczogd3JpdGUgZXJyb3IgKCVzKVxuIiwKKwkJCW1zZywgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKK2ludCB3cml0ZV9vcl93aGluZShpbnQgZmQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICptc2cpCit7CisJaWYgKHdyaXRlX2luX2Z1bGwoZmQsIGJ1ZiwgY291bnQpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiB3cml0ZSBlcnJvciAoJXMpXG4iLAorCQkJbXNnLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3dzLmMgYi93cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNGIyYjEKLS0tIC9kZXYvbnVsbAorKysgYi93cy5jCkBAIC0wLDAgKzEsMzk1IEBACisvKgorICogV2hpdGVzcGFjZSBydWxlcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBKdW5pbyBDIEhhbWFubworICovCisKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgImF0dHIuaCIKKworc3RhdGljIHN0cnVjdCB3aGl0ZXNwYWNlX3J1bGUgeworCWNvbnN0IGNoYXIgKnJ1bGVfbmFtZTsKKwl1bnNpZ25lZCBydWxlX2JpdHM7CisJdW5zaWduZWQgbG9vc2Vuc19lcnJvcjoxLAorCQlleGNsdWRlX2RlZmF1bHQ6MTsKK30gd2hpdGVzcGFjZV9ydWxlX25hbWVzW10gPSB7CisJeyAidHJhaWxpbmctc3BhY2UiLCBXU19UUkFJTElOR19TUEFDRSwgMCB9LAorCXsgInNwYWNlLWJlZm9yZS10YWIiLCBXU19TUEFDRV9CRUZPUkVfVEFCLCAwIH0sCisJeyAiaW5kZW50LXdpdGgtbm9uLXRhYiIsIFdTX0lOREVOVF9XSVRIX05PTl9UQUIsIDAgfSwKKwl7ICJjci1hdC1lb2wiLCBXU19DUl9BVF9FT0wsIDEgfSwKKwl7ICJibGFuay1hdC1lb2wiLCBXU19CTEFOS19BVF9FT0wsIDAgfSwKKwl7ICJibGFuay1hdC1lb2YiLCBXU19CTEFOS19BVF9FT0YsIDAgfSwKKwl7ICJ0YWItaW4taW5kZW50IiwgV1NfVEFCX0lOX0lOREVOVCwgMCwgMSB9LAorfTsKKwordW5zaWduZWQgcGFyc2Vfd2hpdGVzcGFjZV9ydWxlKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwl1bnNpZ25lZCBydWxlID0gV1NfREVGQVVMVF9SVUxFOworCisJd2hpbGUgKHN0cmluZykgeworCQlpbnQgaTsKKwkJc2l6ZV90IGxlbjsKKwkJY29uc3QgY2hhciAqZXA7CisJCWludCBuZWdhdGVkID0gMDsKKworCQlzdHJpbmcgPSBzdHJpbmcgKyBzdHJzcG4oc3RyaW5nLCAiLCBcdFxuXHIiKTsKKwkJZXAgPSBzdHJjaHJudWwoc3RyaW5nLCAnLCcpOworCQlsZW4gPSBlcCAtIHN0cmluZzsKKworCQlpZiAoKnN0cmluZyA9PSAnLScpIHsKKwkJCW5lZ2F0ZWQgPSAxOworCQkJc3RyaW5nKys7CisJCQlsZW4tLTsKKwkJfQorCQlpZiAoIWxlbikKKwkJCWJyZWFrOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3aGl0ZXNwYWNlX3J1bGVfbmFtZXMpOyBpKyspIHsKKwkJCWlmIChzdHJuY21wKHdoaXRlc3BhY2VfcnVsZV9uYW1lc1tpXS5ydWxlX25hbWUsCisJCQkJICAgIHN0cmluZywgbGVuKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChuZWdhdGVkKQorCQkJCXJ1bGUgJj0gfndoaXRlc3BhY2VfcnVsZV9uYW1lc1tpXS5ydWxlX2JpdHM7CisJCQllbHNlCisJCQkJcnVsZSB8PSB3aGl0ZXNwYWNlX3J1bGVfbmFtZXNbaV0ucnVsZV9iaXRzOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0cm5jbXAoc3RyaW5nLCAidGFid2lkdGg9IiwgOSkgPT0gMCkgeworCQkJdW5zaWduZWQgdGFid2lkdGggPSBhdG9pKHN0cmluZyArIDkpOworCQkJaWYgKDAgPCB0YWJ3aWR0aCAmJiB0YWJ3aWR0aCA8IDAxMDApIHsKKwkJCQlydWxlICY9IH5XU19UQUJfV0lEVEhfTUFTSzsKKwkJCQlydWxlIHw9IHRhYndpZHRoOworCQkJfQorCQkJZWxzZQorCQkJCXdhcm5pbmcoInRhYndpZHRoICUuKnMgb3V0IG9mIHJhbmdlIiwKKwkJCQkJKGludCkobGVuIC0gOSksIHN0cmluZyArIDkpOworCQl9CisJCXN0cmluZyA9IGVwOworCX0KKworCWlmIChydWxlICYgV1NfVEFCX0lOX0lOREVOVCAmJiBydWxlICYgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQikKKwkJZGllKCJjYW5ub3QgZW5mb3JjZSBib3RoIHRhYi1pbi1pbmRlbnQgYW5kIGluZGVudC13aXRoLW5vbi10YWIiKTsKKwlyZXR1cm4gcnVsZTsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfd2hpdGVzcGFjZV9hdHRyX2NoZWNrKHN0cnVjdCBnaXRfYXR0cl9jaGVjayAqY2hlY2spCit7CisJc3RhdGljIHN0cnVjdCBnaXRfYXR0ciAqYXR0cl93aGl0ZXNwYWNlOworCisJaWYgKCFhdHRyX3doaXRlc3BhY2UpCisJCWF0dHJfd2hpdGVzcGFjZSA9IGdpdF9hdHRyKCJ3aGl0ZXNwYWNlIik7CisJY2hlY2tbMF0uYXR0ciA9IGF0dHJfd2hpdGVzcGFjZTsKK30KKwordW5zaWduZWQgd2hpdGVzcGFjZV9ydWxlKGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCXN0cnVjdCBnaXRfYXR0cl9jaGVjayBhdHRyX3doaXRlc3BhY2VfcnVsZTsKKworCXNldHVwX3doaXRlc3BhY2VfYXR0cl9jaGVjaygmYXR0cl93aGl0ZXNwYWNlX3J1bGUpOworCWlmICghZ2l0X2NoZWNrX2F0dHIocGF0aG5hbWUsIDEsICZhdHRyX3doaXRlc3BhY2VfcnVsZSkpIHsKKwkJY29uc3QgY2hhciAqdmFsdWU7CisKKwkJdmFsdWUgPSBhdHRyX3doaXRlc3BhY2VfcnVsZS52YWx1ZTsKKwkJaWYgKEFUVFJfVFJVRSh2YWx1ZSkpIHsKKwkJCS8qIHRydWUgKHdoaXRlc3BhY2UpICovCisJCQl1bnNpZ25lZCBhbGxfcnVsZSA9IHdzX3RhYl93aWR0aCh3aGl0ZXNwYWNlX3J1bGVfY2ZnKTsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2hpdGVzcGFjZV9ydWxlX25hbWVzKTsgaSsrKQorCQkJCWlmICghd2hpdGVzcGFjZV9ydWxlX25hbWVzW2ldLmxvb3NlbnNfZXJyb3IgJiYKKwkJCQkgICAgIXdoaXRlc3BhY2VfcnVsZV9uYW1lc1tpXS5leGNsdWRlX2RlZmF1bHQpCisJCQkJCWFsbF9ydWxlIHw9IHdoaXRlc3BhY2VfcnVsZV9uYW1lc1tpXS5ydWxlX2JpdHM7CisJCQlyZXR1cm4gYWxsX3J1bGU7CisJCX0gZWxzZSBpZiAoQVRUUl9GQUxTRSh2YWx1ZSkpIHsKKwkJCS8qIGZhbHNlICgtd2hpdGVzcGFjZSkgKi8KKwkJCXJldHVybiB3c190YWJfd2lkdGgod2hpdGVzcGFjZV9ydWxlX2NmZyk7CisJCX0gZWxzZSBpZiAoQVRUUl9VTlNFVCh2YWx1ZSkpIHsKKwkJCS8qIHJlc2V0IHRvIGRlZmF1bHQgKCF3aGl0ZXNwYWNlKSAqLworCQkJcmV0dXJuIHdoaXRlc3BhY2VfcnVsZV9jZmc7CisJCX0gZWxzZSB7CisJCQkvKiBzdHJpbmcgKi8KKwkJCXJldHVybiBwYXJzZV93aGl0ZXNwYWNlX3J1bGUodmFsdWUpOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIHdoaXRlc3BhY2VfcnVsZV9jZmc7CisJfQorfQorCisvKiBUaGUgcmV0dXJuZWQgc3RyaW5nIHNob3VsZCBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLiAqLworY2hhciAqd2hpdGVzcGFjZV9lcnJvcl9zdHJpbmcodW5zaWduZWQgd3MpCit7CisJc3RydWN0IHN0cmJ1ZiBlcnIgPSBTVFJCVUZfSU5JVDsKKwlpZiAoKHdzICYgV1NfVFJBSUxJTkdfU1BBQ0UpID09IFdTX1RSQUlMSU5HX1NQQUNFKQorCQlzdHJidWZfYWRkc3RyKCZlcnIsICJ0cmFpbGluZyB3aGl0ZXNwYWNlIik7CisJZWxzZSB7CisJCWlmICh3cyAmIFdTX0JMQU5LX0FUX0VPTCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgInRyYWlsaW5nIHdoaXRlc3BhY2UiKTsKKwkJaWYgKHdzICYgV1NfQkxBTktfQVRfRU9GKSB7CisJCQlpZiAoZXJyLmxlbikKKwkJCQlzdHJidWZfYWRkc3RyKCZlcnIsICIsICIpOworCQkJc3RyYnVmX2FkZHN0cigmZXJyLCAibmV3IGJsYW5rIGxpbmUgYXQgRU9GIik7CisJCX0KKwl9CisJaWYgKHdzICYgV1NfU1BBQ0VfQkVGT1JFX1RBQikgeworCQlpZiAoZXJyLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgIiwgIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgInNwYWNlIGJlZm9yZSB0YWIgaW4gaW5kZW50Iik7CisJfQorCWlmICh3cyAmIFdTX0lOREVOVF9XSVRIX05PTl9UQUIpIHsKKwkJaWYgKGVyci5sZW4pCisJCQlzdHJidWZfYWRkc3RyKCZlcnIsICIsICIpOworCQlzdHJidWZfYWRkc3RyKCZlcnIsICJpbmRlbnQgd2l0aCBzcGFjZXMiKTsKKwl9CisJaWYgKHdzICYgV1NfVEFCX0lOX0lOREVOVCkgeworCQlpZiAoZXJyLmxlbikKKwkJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgIiwgIik7CisJCXN0cmJ1Zl9hZGRzdHIoJmVyciwgInRhYiBpbiBpbmRlbnQiKTsKKwl9CisJcmV0dXJuIHN0cmJ1Zl9kZXRhY2goJmVyciwgTlVMTCk7Cit9CisKKy8qIElmIHN0cmVhbSBpcyBub24tTlVMTCwgZW1pdHMgdGhlIGxpbmUgYWZ0ZXIgY2hlY2tpbmcuICovCitzdGF0aWMgdW5zaWduZWQgd3NfY2hlY2tfZW1pdF8xKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHVuc2lnbmVkIHdzX3J1bGUsCisJCQkJRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzZXQsCisJCQkJY29uc3QgY2hhciAqcmVzZXQsIGNvbnN0IGNoYXIgKndzKQoreworCXVuc2lnbmVkIHJlc3VsdCA9IDA7CisJaW50IHdyaXR0ZW4gPSAwOworCWludCB0cmFpbGluZ193aGl0ZXNwYWNlID0gLTE7CisJaW50IHRyYWlsaW5nX25ld2xpbmUgPSAwOworCWludCB0cmFpbGluZ19jYXJyaWFnZV9yZXR1cm4gPSAwOworCWludCBpOworCisJLyogTG9naWMgaXMgc2ltcGxlciBpZiB3ZSB0ZW1wb3JhcmlseSBpZ25vcmUgdGhlIHRyYWlsaW5nIG5ld2xpbmUuICovCisJaWYgKGxlbiA+IDAgJiYgbGluZVtsZW4gLSAxXSA9PSAnXG4nKSB7CisJCXRyYWlsaW5nX25ld2xpbmUgPSAxOworCQlsZW4tLTsKKwl9CisJaWYgKCh3c19ydWxlICYgV1NfQ1JfQVRfRU9MKSAmJgorCSAgICBsZW4gPiAwICYmIGxpbmVbbGVuIC0gMV0gPT0gJ1xyJykgeworCQl0cmFpbGluZ19jYXJyaWFnZV9yZXR1cm4gPSAxOworCQlsZW4tLTsKKwl9CisKKwkvKiBDaGVjayBmb3IgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi8KKwlpZiAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPTCkgeworCQlmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgeworCQkJaWYgKGlzc3BhY2UobGluZVtpXSkpIHsKKwkJCQl0cmFpbGluZ193aGl0ZXNwYWNlID0gaTsKKwkJCQlyZXN1bHQgfD0gV1NfQkxBTktfQVRfRU9MOworCQkJfQorCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHRyYWlsaW5nX3doaXRlc3BhY2UgPT0gLTEpCisJCXRyYWlsaW5nX3doaXRlc3BhY2UgPSBsZW47CisKKwkvKiBDaGVjayBpbmRlbnRhdGlvbiAqLworCWZvciAoaSA9IDA7IGkgPCB0cmFpbGluZ193aGl0ZXNwYWNlOyBpKyspIHsKKwkJaWYgKGxpbmVbaV0gPT0gJyAnKQorCQkJY29udGludWU7CisJCWlmIChsaW5lW2ldICE9ICdcdCcpCisJCQlicmVhazsKKwkJaWYgKCh3c19ydWxlICYgV1NfU1BBQ0VfQkVGT1JFX1RBQikgJiYgd3JpdHRlbiA8IGkpIHsKKwkJCXJlc3VsdCB8PSBXU19TUEFDRV9CRUZPUkVfVEFCOworCQkJaWYgKHN0cmVhbSkgeworCQkJCWZwdXRzKHdzLCBzdHJlYW0pOworCQkJCWZ3cml0ZShsaW5lICsgd3JpdHRlbiwgaSAtIHdyaXR0ZW4sIDEsIHN0cmVhbSk7CisJCQkJZnB1dHMocmVzZXQsIHN0cmVhbSk7CisJCQkJZndyaXRlKGxpbmUgKyBpLCAxLCAxLCBzdHJlYW0pOworCQkJfQorCQl9IGVsc2UgaWYgKHdzX3J1bGUgJiBXU19UQUJfSU5fSU5ERU5UKSB7CisJCQlyZXN1bHQgfD0gV1NfVEFCX0lOX0lOREVOVDsKKwkJCWlmIChzdHJlYW0pIHsKKwkJCQlmd3JpdGUobGluZSArIHdyaXR0ZW4sIGkgLSB3cml0dGVuLCAxLCBzdHJlYW0pOworCQkJCWZwdXRzKHdzLCBzdHJlYW0pOworCQkJCWZ3cml0ZShsaW5lICsgaSwgMSwgMSwgc3RyZWFtKTsKKwkJCQlmcHV0cyhyZXNldCwgc3RyZWFtKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChzdHJlYW0pIHsKKwkJCWZ3cml0ZShsaW5lICsgd3JpdHRlbiwgaSAtIHdyaXR0ZW4gKyAxLCAxLCBzdHJlYW0pOworCQl9CisJCXdyaXR0ZW4gPSBpICsgMTsKKwl9CisKKwkvKiBDaGVjayBmb3IgaW5kZW50IHVzaW5nIG5vbi10YWIuICovCisJaWYgKCh3c19ydWxlICYgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQikgJiYgaSAtIHdyaXR0ZW4gPj0gd3NfdGFiX3dpZHRoKHdzX3J1bGUpKSB7CisJCXJlc3VsdCB8PSBXU19JTkRFTlRfV0lUSF9OT05fVEFCOworCQlpZiAoc3RyZWFtKSB7CisJCQlmcHV0cyh3cywgc3RyZWFtKTsKKwkJCWZ3cml0ZShsaW5lICsgd3JpdHRlbiwgaSAtIHdyaXR0ZW4sIDEsIHN0cmVhbSk7CisJCQlmcHV0cyhyZXNldCwgc3RyZWFtKTsKKwkJfQorCQl3cml0dGVuID0gaTsKKwl9CisKKwlpZiAoc3RyZWFtKSB7CisJCS8qCisJCSAqIE5vdyB0aGUgcmVzdCBvZiB0aGUgbGluZSBzdGFydHMgYXQgIndyaXR0ZW4iLgorCQkgKiBUaGUgbm9uLWhpZ2hsaWdodGVkIHBhcnQgZW5kcyBhdCAidHJhaWxpbmdfd2hpdGVzcGFjZSIuCisJCSAqLworCisJCS8qIEVtaXQgbm9uLWhpZ2hsaWdodGVkIChtaWRkbGUpIHNlZ21lbnQuICovCisJCWlmICh0cmFpbGluZ193aGl0ZXNwYWNlIC0gd3JpdHRlbiA+IDApIHsKKwkJCWZwdXRzKHNldCwgc3RyZWFtKTsKKwkJCWZ3cml0ZShsaW5lICsgd3JpdHRlbiwKKwkJCSAgICB0cmFpbGluZ193aGl0ZXNwYWNlIC0gd3JpdHRlbiwgMSwgc3RyZWFtKTsKKwkJCWZwdXRzKHJlc2V0LCBzdHJlYW0pOworCQl9CisKKwkJLyogSGlnaGxpZ2h0IGVycm9ycyBpbiB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqLworCQlpZiAodHJhaWxpbmdfd2hpdGVzcGFjZSAhPSBsZW4pIHsKKwkJCWZwdXRzKHdzLCBzdHJlYW0pOworCQkJZndyaXRlKGxpbmUgKyB0cmFpbGluZ193aGl0ZXNwYWNlLAorCQkJICAgIGxlbiAtIHRyYWlsaW5nX3doaXRlc3BhY2UsIDEsIHN0cmVhbSk7CisJCQlmcHV0cyhyZXNldCwgc3RyZWFtKTsKKwkJfQorCQlpZiAodHJhaWxpbmdfY2FycmlhZ2VfcmV0dXJuKQorCQkJZnB1dGMoJ1xyJywgc3RyZWFtKTsKKwkJaWYgKHRyYWlsaW5nX25ld2xpbmUpCisJCQlmcHV0YygnXG4nLCBzdHJlYW0pOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHdzX2NoZWNrX2VtaXQoY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSwKKwkJICAgRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyICpzZXQsCisJCSAgIGNvbnN0IGNoYXIgKnJlc2V0LCBjb25zdCBjaGFyICp3cykKK3sKKwkodm9pZCl3c19jaGVja19lbWl0XzEobGluZSwgbGVuLCB3c19ydWxlLCBzdHJlYW0sIHNldCwgcmVzZXQsIHdzKTsKK30KKwordW5zaWduZWQgd3NfY2hlY2soY29uc3QgY2hhciAqbGluZSwgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSkKK3sKKwlyZXR1cm4gd3NfY2hlY2tfZW1pdF8xKGxpbmUsIGxlbiwgd3NfcnVsZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Cit9CisKK2ludCB3c19ibGFua19saW5lKGNvbnN0IGNoYXIgKmxpbmUsIGludCBsZW4sIHVuc2lnbmVkIHdzX3J1bGUpCit7CisJLyoKKwkgKiBXZSBfbWlnaHRfIHdhbnQgdG8gdHJlYXQgQ1IgZGlmZmVyZW50bHkgZnJvbSBvdGhlcgorCSAqIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB3aGVuIHdzX3J1bGUgaGFzIFdTX0NSX0FUX0VPTCwgYnV0CisJICogZm9yIG5vdyB3ZSBqdXN0IHVzZSB0aGlzIHN0dXBpZCBkZWZpbml0aW9uLgorCSAqLworCXdoaWxlIChsZW4tLSA+IDApIHsKKwkJaWYgKCFpc3NwYWNlKCpsaW5lKSkKKwkJCXJldHVybiAwOworCQlsaW5lKys7CisJfQorCXJldHVybiAxOworfQorCisvKiBDb3B5IHRoZSBsaW5lIG9udG8gdGhlIGVuZCBvZiB0aGUgc3RyYnVmIHdoaWxlIGZpeGluZyB3aGl0ZXNwYWNlcyAqLwordm9pZCB3c19maXhfY29weShzdHJ1Y3Qgc3RyYnVmICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgaW50IGxlbiwgdW5zaWduZWQgd3NfcnVsZSwgaW50ICplcnJvcl9jb3VudCkKK3sKKwkvKgorCSAqIGxlbiBpcyBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgY29waWVkIGZyb20gc3JjLCBzdGFydGluZworCSAqIGF0IHNyYy4gIFR5cGljYWxseSBzcmNbbGVuLTFdIGlzICdcbicsIHVubGVzcyB0aGlzIGlzCisJICogdGhlIGluY29tcGxldGUgbGFzdCBsaW5lLgorCSAqLworCWludCBpOworCWludCBhZGRfbmxfdG9fdGFpbCA9IDA7CisJaW50IGFkZF9jcl90b190YWlsID0gMDsKKwlpbnQgZml4ZWQgPSAwOworCWludCBsYXN0X3RhYl9pbl9pbmRlbnQgPSAtMTsKKwlpbnQgbGFzdF9zcGFjZV9pbl9pbmRlbnQgPSAtMTsKKwlpbnQgbmVlZF9maXhfbGVhZGluZ19zcGFjZSA9IDA7CisKKwkvKgorCSAqIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UKKwkgKi8KKwlpZiAod3NfcnVsZSAmIFdTX0JMQU5LX0FUX0VPTCkgeworCQlpZiAoMCA8IGxlbiAmJiBzcmNbbGVuIC0gMV0gPT0gJ1xuJykgeworCQkJYWRkX25sX3RvX3RhaWwgPSAxOworCQkJbGVuLS07CisJCQlpZiAoMCA8IGxlbiAmJiBzcmNbbGVuIC0gMV0gPT0gJ1xyJykgeworCQkJCWFkZF9jcl90b190YWlsID0gISEod3NfcnVsZSAmIFdTX0NSX0FUX0VPTCk7CisJCQkJbGVuLS07CisJCQl9CisJCX0KKwkJaWYgKDAgPCBsZW4gJiYgaXNzcGFjZShzcmNbbGVuIC0gMV0pKSB7CisJCQl3aGlsZSAoMCA8IGxlbiAmJiBpc3NwYWNlKHNyY1tsZW4tMV0pKQorCQkJCWxlbi0tOworCQkJZml4ZWQgPSAxOworCQl9CisJfQorCisJLyoKKwkgKiBDaGVjayBsZWFkaW5nIHdoaXRlc3BhY2VzIChpbmRlbnQpCisJICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWNoYXIgY2ggPSBzcmNbaV07CisJCWlmIChjaCA9PSAnXHQnKSB7CisJCQlsYXN0X3RhYl9pbl9pbmRlbnQgPSBpOworCQkJaWYgKCh3c19ydWxlICYgV1NfU1BBQ0VfQkVGT1JFX1RBQikgJiYKKwkJCSAgICAwIDw9IGxhc3Rfc3BhY2VfaW5faW5kZW50KQorCQkJICAgIG5lZWRfZml4X2xlYWRpbmdfc3BhY2UgPSAxOworCQl9IGVsc2UgaWYgKGNoID09ICcgJykgeworCQkJbGFzdF9zcGFjZV9pbl9pbmRlbnQgPSBpOworCQkJaWYgKCh3c19ydWxlICYgV1NfSU5ERU5UX1dJVEhfTk9OX1RBQikgJiYKKwkJCSAgICB3c190YWJfd2lkdGgod3NfcnVsZSkgPD0gaSAtIGxhc3RfdGFiX2luX2luZGVudCkKKwkJCQluZWVkX2ZpeF9sZWFkaW5nX3NwYWNlID0gMTsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisKKwlpZiAobmVlZF9maXhfbGVhZGluZ19zcGFjZSkgeworCQkvKiBQcm9jZXNzIGluZGVudCBvdXJzZWx2ZXMgKi8KKwkJaW50IGNvbnNlY3V0aXZlX3NwYWNlcyA9IDA7CisJCWludCBsYXN0ID0gbGFzdF90YWJfaW5faW5kZW50ICsgMTsKKworCQlpZiAod3NfcnVsZSAmIFdTX0lOREVOVF9XSVRIX05PTl9UQUIpIHsKKwkJCS8qIGhhdmUgImxhc3QiIHBvaW50IGF0IG9uZSBwYXN0IHRoZSBpbmRlbnQgKi8KKwkJCWlmIChsYXN0X3RhYl9pbl9pbmRlbnQgPCBsYXN0X3NwYWNlX2luX2luZGVudCkKKwkJCQlsYXN0ID0gbGFzdF9zcGFjZV9pbl9pbmRlbnQgKyAxOworCQkJZWxzZQorCQkJCWxhc3QgPSBsYXN0X3RhYl9pbl9pbmRlbnQgKyAxOworCQl9CisKKwkJLyoKKwkJICogYmV0d2VlbiBzcmNbMC4ubGFzdC0xXSwgc3RyaXAgdGhlIGZ1bm55IHNwYWNlcywKKwkJICogdXBkYXRpbmcgdGhlbSB0byB0YWIgYXMgbmVlZGVkLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykgeworCQkJY2hhciBjaCA9IHNyY1tpXTsKKwkJCWlmIChjaCAhPSAnICcpIHsKKwkJCQljb25zZWN1dGl2ZV9zcGFjZXMgPSAwOworCQkJCXN0cmJ1Zl9hZGRjaChkc3QsIGNoKTsKKwkJCX0gZWxzZSB7CisJCQkJY29uc2VjdXRpdmVfc3BhY2VzKys7CisJCQkJaWYgKGNvbnNlY3V0aXZlX3NwYWNlcyA9PSB3c190YWJfd2lkdGgod3NfcnVsZSkpIHsKKwkJCQkJc3RyYnVmX2FkZGNoKGRzdCwgJ1x0Jyk7CisJCQkJCWNvbnNlY3V0aXZlX3NwYWNlcyA9IDA7CisJCQkJfQorCQkJfQorCQl9CisJCXdoaWxlICgwIDwgY29uc2VjdXRpdmVfc3BhY2VzLS0pCisJCQlzdHJidWZfYWRkY2goZHN0LCAnICcpOworCQlsZW4gLT0gbGFzdDsKKwkJc3JjICs9IGxhc3Q7CisJCWZpeGVkID0gMTsKKwl9IGVsc2UgaWYgKCh3c19ydWxlICYgV1NfVEFCX0lOX0lOREVOVCkgJiYgbGFzdF90YWJfaW5faW5kZW50ID49IDApIHsKKwkJLyogRXhwYW5kIHRhYnMgaW50byBzcGFjZXMgKi8KKwkJaW50IHN0YXJ0ID0gZHN0LT5sZW47CisJCWludCBsYXN0ID0gbGFzdF90YWJfaW5faW5kZW50ICsgMTsKKwkJZm9yIChpID0gMDsgaSA8IGxhc3Q7IGkrKykgeworCQkJaWYgKHNyY1tpXSA9PSAnXHQnKQorCQkJCWRvIHsKKwkJCQkJc3RyYnVmX2FkZGNoKGRzdCwgJyAnKTsKKwkJCQl9IHdoaWxlICgoZHN0LT5sZW4gLSBzdGFydCkgJSB3c190YWJfd2lkdGgod3NfcnVsZSkpOworCQkJZWxzZQorCQkJCXN0cmJ1Zl9hZGRjaChkc3QsIHNyY1tpXSk7CisJCX0KKwkJbGVuIC09IGxhc3Q7CisJCXNyYyArPSBsYXN0OworCQlmaXhlZCA9IDE7CisJfQorCisJc3RyYnVmX2FkZChkc3QsIHNyYywgbGVuKTsKKwlpZiAoYWRkX2NyX3RvX3RhaWwpCisJCXN0cmJ1Zl9hZGRjaChkc3QsICdccicpOworCWlmIChhZGRfbmxfdG9fdGFpbCkKKwkJc3RyYnVmX2FkZGNoKGRzdCwgJ1xuJyk7CisJaWYgKGZpeGVkICYmIGVycm9yX2NvdW50KQorCQkoKmVycm9yX2NvdW50KSsrOworfQpkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmMgYi93dC1zdGF0dXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTNiOGMwCi0tLSAvZGV2L251bGwKKysrIGIvd3Qtc3RhdHVzLmMKQEAgLTAsMCArMSwxNzQwIEBACisjaW5jbHVkZSAiY2FjaGUuaCIKKyNpbmNsdWRlICJ3dC1zdGF0dXMuaCIKKyNpbmNsdWRlICJvYmplY3QuaCIKKyNpbmNsdWRlICJkaXIuaCIKKyNpbmNsdWRlICJjb21taXQuaCIKKyNpbmNsdWRlICJkaWZmLmgiCisjaW5jbHVkZSAicmV2aXNpb24uaCIKKyNpbmNsdWRlICJkaWZmY29yZS5oIgorI2luY2x1ZGUgInF1b3RlLmgiCisjaW5jbHVkZSAicnVuLWNvbW1hbmQuaCIKKyNpbmNsdWRlICJhcmd2LWFycmF5LmgiCisjaW5jbHVkZSAicmVtb3RlLmgiCisjaW5jbHVkZSAicmVmcy5oIgorI2luY2x1ZGUgInN1Ym1vZHVsZS5oIgorI2luY2x1ZGUgImNvbHVtbi5oIgorI2luY2x1ZGUgInN0cmJ1Zi5oIgorI2luY2x1ZGUgInV0ZjguaCIKKworc3RhdGljIGNvbnN0IGNoYXIgY3V0X2xpbmVbXSA9CisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKworc3RhdGljIGNoYXIgZGVmYXVsdF93dF9zdGF0dXNfY29sb3JzW11bQ09MT1JfTUFYTEVOXSA9IHsKKwlHSVRfQ09MT1JfTk9STUFMLCAvKiBXVF9TVEFUVVNfSEVBREVSICovCisJR0lUX0NPTE9SX0dSRUVOLCAgLyogV1RfU1RBVFVTX1VQREFURUQgKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfQ0hBTkdFRCAqLworCUdJVF9DT0xPUl9SRUQsICAgIC8qIFdUX1NUQVRVU19VTlRSQUNLRUQgKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfTk9CUkFOQ0ggKi8KKwlHSVRfQ09MT1JfUkVELCAgICAvKiBXVF9TVEFUVVNfVU5NRVJHRUQgKi8KKwlHSVRfQ09MT1JfR1JFRU4sICAvKiBXVF9TVEFUVVNfTE9DQUxfQlJBTkNIICovCisJR0lUX0NPTE9SX1JFRCwgICAgLyogV1RfU1RBVFVTX1JFTU9URV9CUkFOQ0ggKi8KKwlHSVRfQ09MT1JfTklMLCAgICAvKiBXVF9TVEFUVVNfT05CUkFOQ0ggKi8KK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb2xvcihpbnQgc2xvdCwgc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwljb25zdCBjaGFyICpjID0gIiI7CisJaWYgKHdhbnRfY29sb3Iocy0+dXNlX2NvbG9yKSkKKwkJYyA9IHMtPmNvbG9yX3BhbGV0dGVbc2xvdF07CisJaWYgKHNsb3QgPT0gV1RfU1RBVFVTX09OQlJBTkNIICYmIGNvbG9yX2lzX25pbChjKSkKKwkJYyA9IHMtPmNvbG9yX3BhbGV0dGVbV1RfU1RBVFVTX0hFQURFUl07CisJcmV0dXJuIGM7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXR1c192cHJpbnRmKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGludCBhdF9ib2wsIGNvbnN0IGNoYXIgKmNvbG9yLAorCQljb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXAsIGNvbnN0IGNoYXIgKnRyYWlsKQoreworCXN0cnVjdCBzdHJidWYgc2IgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGxpbmVidWYgPSBTVFJCVUZfSU5JVDsKKwljb25zdCBjaGFyICpsaW5lLCAqZW9sOworCisJc3RyYnVmX3ZhZGRmKCZzYiwgZm10LCBhcCk7CisJaWYgKCFzYi5sZW4pIHsKKwkJaWYgKHMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXgpIHsKKwkJCXN0cmJ1Zl9hZGRjaCgmc2IsIGNvbW1lbnRfbGluZV9jaGFyKTsKKwkJCWlmICghdHJhaWwpCisJCQkJc3RyYnVmX2FkZGNoKCZzYiwgJyAnKTsKKwkJfQorCQljb2xvcl9wcmludF9zdHJidWYocy0+ZnAsIGNvbG9yLCAmc2IpOworCQlpZiAodHJhaWwpCisJCQlmcHJpbnRmKHMtPmZwLCAiJXMiLCB0cmFpbCk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZzYik7CisJCXJldHVybjsKKwl9CisJZm9yIChsaW5lID0gc2IuYnVmOyAqbGluZTsgbGluZSA9IGVvbCArIDEpIHsKKwkJZW9sID0gc3RyY2hyKGxpbmUsICdcbicpOworCisJCXN0cmJ1Zl9yZXNldCgmbGluZWJ1Zik7CisJCWlmIChhdF9ib2wgJiYgcy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeCkgeworCQkJc3RyYnVmX2FkZGNoKCZsaW5lYnVmLCBjb21tZW50X2xpbmVfY2hhcik7CisJCQlpZiAoKmxpbmUgIT0gJ1xuJyAmJiAqbGluZSAhPSAnXHQnKQorCQkJCXN0cmJ1Zl9hZGRjaCgmbGluZWJ1ZiwgJyAnKTsKKwkJfQorCQlpZiAoZW9sKQorCQkJc3RyYnVmX2FkZCgmbGluZWJ1ZiwgbGluZSwgZW9sIC0gbGluZSk7CisJCWVsc2UKKwkJCXN0cmJ1Zl9hZGRzdHIoJmxpbmVidWYsIGxpbmUpOworCQljb2xvcl9wcmludF9zdHJidWYocy0+ZnAsIGNvbG9yLCAmbGluZWJ1Zik7CisJCWlmIChlb2wpCisJCQlmcHJpbnRmKHMtPmZwLCAiXG4iKTsKKwkJZWxzZQorCQkJYnJlYWs7CisJCWF0X2JvbCA9IDE7CisJfQorCWlmICh0cmFpbCkKKwkJZnByaW50ZihzLT5mcCwgIiVzIiwgdHJhaWwpOworCXN0cmJ1Zl9yZWxlYXNlKCZsaW5lYnVmKTsKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworfQorCit2b2lkIHN0YXR1c19wcmludGZfbG4oc3RydWN0IHd0X3N0YXR1cyAqcywgY29uc3QgY2hhciAqY29sb3IsCisJCQljb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJc3RhdHVzX3ZwcmludGYocywgMSwgY29sb3IsIGZtdCwgYXAsICJcbiIpOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQgc3RhdHVzX3ByaW50ZihzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBjb25zdCBjaGFyICpjb2xvciwKKwkJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdGF0dXNfdnByaW50ZihzLCAxLCBjb2xvciwgZm10LCBhcCwgTlVMTCk7CisJdmFfZW5kKGFwKTsKK30KKworc3RhdGljIHZvaWQgc3RhdHVzX3ByaW50Zl9tb3JlKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGNvbnN0IGNoYXIgKmNvbG9yLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlzdGF0dXNfdnByaW50ZihzLCAwLCBjb2xvciwgZm10LCBhcCwgTlVMTCk7CisJdmFfZW5kKGFwKTsKK30KKwordm9pZCB3dF9zdGF0dXNfcHJlcGFyZShzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXVuc2lnbmVkIGNoYXIgc2hhMVsyMF07CisKKwltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7CisJbWVtY3B5KHMtPmNvbG9yX3BhbGV0dGUsIGRlZmF1bHRfd3Rfc3RhdHVzX2NvbG9ycywKKwkgICAgICAgc2l6ZW9mKGRlZmF1bHRfd3Rfc3RhdHVzX2NvbG9ycykpOworCXMtPnNob3dfdW50cmFja2VkX2ZpbGVzID0gU0hPV19OT1JNQUxfVU5UUkFDS0VEX0ZJTEVTOworCXMtPnVzZV9jb2xvciA9IC0xOworCXMtPnJlbGF0aXZlX3BhdGhzID0gMTsKKwlzLT5icmFuY2ggPSByZXNvbHZlX3JlZmR1cCgiSEVBRCIsIDAsIHNoYTEsIE5VTEwpOworCXMtPnJlZmVyZW5jZSA9ICJIRUFEIjsKKwlzLT5mcCA9IHN0ZG91dDsKKwlzLT5pbmRleF9maWxlID0gZ2V0X2luZGV4X2ZpbGUoKTsKKwlzLT5jaGFuZ2Uuc3RyZHVwX3N0cmluZ3MgPSAxOworCXMtPnVudHJhY2tlZC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJcy0+aWdub3JlZC5zdHJkdXBfc3RyaW5ncyA9IDE7CisJcy0+c2hvd19icmFuY2ggPSAtMTsgIC8qIHVuc3BlY2lmaWVkICovCisJcy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF91bm1lcmdlZF9oZWFkZXIoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgaTsKKwlpbnQgZGVsX21vZF9jb25mbGljdCA9IDA7CisJaW50IGJvdGhfZGVsZXRlZCA9IDA7CisJaW50IG5vdF9kZWxldGVkID0gMDsKKwljb25zdCBjaGFyICpjID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIlVubWVyZ2VkIHBhdGhzOiIpKTsKKworCWZvciAoaSA9IDA7IGkgPCBzLT5jaGFuZ2UubnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQgPSAmKHMtPmNoYW5nZS5pdGVtc1tpXSk7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKworCQlzd2l0Y2ggKGQtPnN0YWdlbWFzaykgeworCQljYXNlIDA6CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJYm90aF9kZWxldGVkID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCWNhc2UgNToKKwkJCWRlbF9tb2RfY29uZmxpY3QgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlub3RfZGVsZXRlZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghcy0+aGludHMpCisJCXJldHVybjsKKwlpZiAocy0+d2hlbmNlICE9IEZST01fQ09NTUlUKQorCQk7CisJZWxzZSBpZiAoIXMtPmlzX2luaXRpYWwpCisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IHJlc2V0ICVzIDxmaWxlPi4uLlwiIHRvIHVuc3RhZ2UpIiksIHMtPnJlZmVyZW5jZSk7CisJZWxzZQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBybSAtLWNhY2hlZCA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpKTsKKworCWlmICghYm90aF9kZWxldGVkKSB7CisJCWlmICghZGVsX21vZF9jb25mbGljdCkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGFkZCA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIikpOworCQllbHNlCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBhZGQvcm0gPGZpbGU+Li4uXCIgYXMgYXBwcm9wcmlhdGUgdG8gbWFyayByZXNvbHV0aW9uKSIpKTsKKwl9IGVsc2UgaWYgKCFkZWxfbW9kX2NvbmZsaWN0ICYmICFub3RfZGVsZXRlZCkgeworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCBybSA8ZmlsZT4uLi5cIiB0byBtYXJrIHJlc29sdXRpb24pIikpOworCX0gZWxzZSB7CisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiBhcyBhcHByb3ByaWF0ZSB0byBtYXJrIHJlc29sdXRpb24pIikpOworCX0KKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsICIlcyIsICIiKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X2NhY2hlZF9oZWFkZXIoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwljb25zdCBjaGFyICpjID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIkNoYW5nZXMgdG8gYmUgY29tbWl0dGVkOiIpKTsKKwlpZiAoIXMtPmhpbnRzKQorCQlyZXR1cm47CisJaWYgKHMtPndoZW5jZSAhPSBGUk9NX0NPTU1JVCkKKwkJOyAvKiBORUVEU1dPUks6IHVzZSAiZ2l0IHJlc2V0IC0tdW5yZXNvbHZlIj8/PyAqLworCWVsc2UgaWYgKCFzLT5pc19pbml0aWFsKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIiAgKHVzZSBcImdpdCByZXNldCAlcyA8ZmlsZT4uLi5cIiB0byB1bnN0YWdlKSIpLCBzLT5yZWZlcmVuY2UpOworCWVsc2UKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgcm0gLS1jYWNoZWQgPGZpbGU+Li4uXCIgdG8gdW5zdGFnZSkiKSk7CisJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCAiJXMiLCAiIik7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF9kaXJ0eV9oZWFkZXIoc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkJIGludCBoYXNfZGVsZXRlZCwKKwkJCQkJIGludCBoYXNfZGlydHlfc3VibW9kdWxlcykKK3sKKwljb25zdCBjaGFyICpjID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsIF8oIkNoYW5nZXMgbm90IHN0YWdlZCBmb3IgY29tbWl0OiIpKTsKKwlpZiAoIXMtPmhpbnRzKQorCQlyZXR1cm47CisJaWYgKCFoYXNfZGVsZXRlZCkKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgYWRkIDxmaWxlPi4uLlwiIHRvIHVwZGF0ZSB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIpKTsKKwllbHNlCisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAodXNlIFwiZ2l0IGFkZC9ybSA8ZmlsZT4uLi5cIiB0byB1cGRhdGUgd2hhdCB3aWxsIGJlIGNvbW1pdHRlZCkiKSk7CisJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgY2hlY2tvdXQgLS0gPGZpbGU+Li4uXCIgdG8gZGlzY2FyZCBjaGFuZ2VzIGluIHdvcmtpbmcgZGlyZWN0b3J5KSIpKTsKKwlpZiAoaGFzX2RpcnR5X3N1Ym1vZHVsZXMpCisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiICAoY29tbWl0IG9yIGRpc2NhcmQgdGhlIHVudHJhY2tlZCBvciBtb2RpZmllZCBjb250ZW50IGluIHN1Ym1vZHVsZXMpIikpOworCXN0YXR1c19wcmludGZfbG4ocywgYywgIiVzIiwgIiIpOworfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfcHJpbnRfb3RoZXJfaGVhZGVyKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJCSBjb25zdCBjaGFyICp3aGF0LAorCQkJCQkgY29uc3QgY2hhciAqaG93KQoreworCWNvbnN0IGNoYXIgKmMgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKTsKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGMsICIlczoiLCB3aGF0KTsKKwlpZiAoIXMtPmhpbnRzKQorCQlyZXR1cm47CisJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCIgICh1c2UgXCJnaXQgJXMgPGZpbGU+Li4uXCIgdG8gaW5jbHVkZSBpbiB3aGF0IHdpbGwgYmUgY29tbWl0dGVkKSIpLCBob3cpOworCXN0YXR1c19wcmludGZfbG4ocywgYywgIiVzIiwgIiIpOworfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfcHJpbnRfdHJhaWxlcihzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIlcyIsICIiKTsKK30KKworI2RlZmluZSBxdW90ZV9wYXRoIHF1b3RlX3BhdGhfcmVsYXRpdmUKKworc3RhdGljIGNvbnN0IGNoYXIgKnd0X3N0YXR1c191bm1lcmdlZF9zdGF0dXNfc3RyaW5nKGludCBzdGFnZW1hc2spCit7CisJc3dpdGNoIChzdGFnZW1hc2spIHsKKwljYXNlIDE6CisJCXJldHVybiBfKCJib3RoIGRlbGV0ZWQ6Iik7CisJY2FzZSAyOgorCQlyZXR1cm4gXygiYWRkZWQgYnkgdXM6Iik7CisJY2FzZSAzOgorCQlyZXR1cm4gXygiZGVsZXRlZCBieSB0aGVtOiIpOworCWNhc2UgNDoKKwkJcmV0dXJuIF8oImFkZGVkIGJ5IHRoZW06Iik7CisJY2FzZSA1OgorCQlyZXR1cm4gXygiZGVsZXRlZCBieSB1czoiKTsKKwljYXNlIDY6CisJCXJldHVybiBfKCJib3RoIGFkZGVkOiIpOworCWNhc2UgNzoKKwkJcmV0dXJuIF8oImJvdGggbW9kaWZpZWQ6Iik7CisJZGVmYXVsdDoKKwkJZGllKF8oImJ1ZzogdW5oYW5kbGVkIHVubWVyZ2VkIHN0YXR1cyAleCIpLCBzdGFnZW1hc2spOworCX0KK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnd0X3N0YXR1c19kaWZmX3N0YXR1c19zdHJpbmcoaW50IHN0YXR1cykKK3sKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgRElGRl9TVEFUVVNfQURERUQ6CisJCXJldHVybiBfKCJuZXcgZmlsZToiKTsKKwljYXNlIERJRkZfU1RBVFVTX0NPUElFRDoKKwkJcmV0dXJuIF8oImNvcGllZDoiKTsKKwljYXNlIERJRkZfU1RBVFVTX0RFTEVURUQ6CisJCXJldHVybiBfKCJkZWxldGVkOiIpOworCWNhc2UgRElGRl9TVEFUVVNfTU9ESUZJRUQ6CisJCXJldHVybiBfKCJtb2RpZmllZDoiKTsKKwljYXNlIERJRkZfU1RBVFVTX1JFTkFNRUQ6CisJCXJldHVybiBfKCJyZW5hbWVkOiIpOworCWNhc2UgRElGRl9TVEFUVVNfVFlQRV9DSEFOR0VEOgorCQlyZXR1cm4gXygidHlwZWNoYW5nZToiKTsKKwljYXNlIERJRkZfU1RBVFVTX1VOS05PV046CisJCXJldHVybiBfKCJ1bmtub3duOiIpOworCWNhc2UgRElGRl9TVEFUVVNfVU5NRVJHRUQ6CisJCXJldHVybiBfKCJ1bm1lcmdlZDoiKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWF4d2lkdGgoY29uc3QgY2hhciAqKCpsYWJlbCkoaW50KSwgaW50IG1pbnZhbCwgaW50IG1heHZhbCkKK3sKKwlpbnQgcmVzdWx0ID0gMCwgaTsKKworCWZvciAoaSA9IG1pbnZhbDsgaSA8PSBtYXh2YWw7IGkrKykgeworCQljb25zdCBjaGFyICpzID0gbGFiZWwoaSk7CisJCWludCBsZW4gPSBzID8gdXRmOF9zdHJ3aWR0aChzKSA6IDA7CisJCWlmIChsZW4gPiByZXN1bHQpCisJCQlyZXN1bHQgPSBsZW47CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF91bm1lcmdlZF9kYXRhKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJCSAgc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0KQoreworCWNvbnN0IGNoYXIgKmMgPSBjb2xvcihXVF9TVEFUVVNfVU5NRVJHRUQsIHMpOworCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKwlzdHJ1Y3Qgc3RyYnVmIG9uZWJ1ZiA9IFNUUkJVRl9JTklUOworCXN0YXRpYyBjaGFyICpwYWRkaW5nOworCXN0YXRpYyBpbnQgbGFiZWxfd2lkdGg7CisJY29uc3QgY2hhciAqb25lLCAqaG93OworCWludCBsZW47CisKKwlpZiAoIXBhZGRpbmcpIHsKKwkJbGFiZWxfd2lkdGggPSBtYXh3aWR0aCh3dF9zdGF0dXNfdW5tZXJnZWRfc3RhdHVzX3N0cmluZywgMSwgNyk7CisJCWxhYmVsX3dpZHRoICs9IHN0cmxlbigiICIpOworCQlwYWRkaW5nID0geG1hbGxvY3oobGFiZWxfd2lkdGgpOworCQltZW1zZXQocGFkZGluZywgJyAnLCBsYWJlbF93aWR0aCk7CisJfQorCisJb25lID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCBzLT5wcmVmaXgsICZvbmVidWYpOworCXN0YXR1c19wcmludGYocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICJcdCIpOworCisJaG93ID0gd3Rfc3RhdHVzX3VubWVyZ2VkX3N0YXR1c19zdHJpbmcoZC0+c3RhZ2VtYXNrKTsKKwlsZW4gPSBsYWJlbF93aWR0aCAtIHV0Zjhfc3Ryd2lkdGgoaG93KTsKKwlzdGF0dXNfcHJpbnRmX21vcmUocywgYywgIiVzJS4qcyVzXG4iLCBob3csIGxlbiwgcGFkZGluZywgb25lKTsKKwlzdHJidWZfcmVsZWFzZSgmb25lYnVmKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X2NoYW5nZV9kYXRhKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJCWludCBjaGFuZ2VfdHlwZSwKKwkJCQkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0KQoreworCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKwljb25zdCBjaGFyICpjID0gY29sb3IoY2hhbmdlX3R5cGUsIHMpOworCWludCBzdGF0dXM7CisJY2hhciAqb25lX25hbWU7CisJY2hhciAqdHdvX25hbWU7CisJY29uc3QgY2hhciAqb25lLCAqdHdvOworCXN0cnVjdCBzdHJidWYgb25lYnVmID0gU1RSQlVGX0lOSVQsIHR3b2J1ZiA9IFNUUkJVRl9JTklUOworCXN0cnVjdCBzdHJidWYgZXh0cmEgPSBTVFJCVUZfSU5JVDsKKwlzdGF0aWMgY2hhciAqcGFkZGluZzsKKwlzdGF0aWMgaW50IGxhYmVsX3dpZHRoOworCWNvbnN0IGNoYXIgKndoYXQ7CisJaW50IGxlbjsKKworCWlmICghcGFkZGluZykgeworCQkvKiBJZiBESUZGX1NUQVRVU18qIHVzZXMgb3V0c2lkZSB0aGUgcmFuZ2UgW0EuLlpdLCB3ZSdyZSBpbiB0cm91YmxlICovCisJCWxhYmVsX3dpZHRoID0gbWF4d2lkdGgod3Rfc3RhdHVzX2RpZmZfc3RhdHVzX3N0cmluZywgJ0EnLCAnWicpOworCQlsYWJlbF93aWR0aCArPSBzdHJsZW4oIiAiKTsKKwkJcGFkZGluZyA9IHhtYWxsb2N6KGxhYmVsX3dpZHRoKTsKKwkJbWVtc2V0KHBhZGRpbmcsICcgJywgbGFiZWxfd2lkdGgpOworCX0KKworCW9uZV9uYW1lID0gdHdvX25hbWUgPSBpdC0+c3RyaW5nOworCXN3aXRjaCAoY2hhbmdlX3R5cGUpIHsKKwljYXNlIFdUX1NUQVRVU19VUERBVEVEOgorCQlzdGF0dXMgPSBkLT5pbmRleF9zdGF0dXM7CisJCWlmIChkLT5oZWFkX3BhdGgpCisJCQlvbmVfbmFtZSA9IGQtPmhlYWRfcGF0aDsKKwkJYnJlYWs7CisJY2FzZSBXVF9TVEFUVVNfQ0hBTkdFRDoKKwkJaWYgKGQtPm5ld19zdWJtb2R1bGVfY29tbWl0cyB8fCBkLT5kaXJ0eV9zdWJtb2R1bGUpIHsKKwkJCXN0cmJ1Zl9hZGRzdHIoJmV4dHJhLCAiICgiKTsKKwkJCWlmIChkLT5uZXdfc3VibW9kdWxlX2NvbW1pdHMpCisJCQkJc3RyYnVmX2FkZGYoJmV4dHJhLCBfKCJuZXcgY29tbWl0cywgIikpOworCQkJaWYgKGQtPmRpcnR5X3N1Ym1vZHVsZSAmIERJUlRZX1NVQk1PRFVMRV9NT0RJRklFRCkKKwkJCQlzdHJidWZfYWRkZigmZXh0cmEsIF8oIm1vZGlmaWVkIGNvbnRlbnQsICIpKTsKKwkJCWlmIChkLT5kaXJ0eV9zdWJtb2R1bGUgJiBESVJUWV9TVUJNT0RVTEVfVU5UUkFDS0VEKQorCQkJCXN0cmJ1Zl9hZGRmKCZleHRyYSwgXygidW50cmFja2VkIGNvbnRlbnQsICIpKTsKKwkJCXN0cmJ1Zl9zZXRsZW4oJmV4dHJhLCBleHRyYS5sZW4gLSAyKTsKKwkJCXN0cmJ1Zl9hZGRjaCgmZXh0cmEsICcpJyk7CisJCX0KKwkJc3RhdHVzID0gZC0+d29ya3RyZWVfc3RhdHVzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkaWUoIkJVRzogdW5oYW5kbGVkIGNoYW5nZV90eXBlICVkIGluIHd0X3N0YXR1c19wcmludF9jaGFuZ2VfZGF0YSIsCisJCSAgICBjaGFuZ2VfdHlwZSk7CisJfQorCisJb25lID0gcXVvdGVfcGF0aChvbmVfbmFtZSwgcy0+cHJlZml4LCAmb25lYnVmKTsKKwl0d28gPSBxdW90ZV9wYXRoKHR3b19uYW1lLCBzLT5wcmVmaXgsICZ0d29idWYpOworCisJc3RhdHVzX3ByaW50ZihzLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIlx0Iik7CisJd2hhdCA9IHd0X3N0YXR1c19kaWZmX3N0YXR1c19zdHJpbmcoc3RhdHVzKTsKKwlpZiAoIXdoYXQpCisJCWRpZShfKCJidWc6IHVuaGFuZGxlZCBkaWZmIHN0YXR1cyAlYyIpLCBzdGF0dXMpOworCWxlbiA9IGxhYmVsX3dpZHRoIC0gdXRmOF9zdHJ3aWR0aCh3aGF0KTsKKwlhc3NlcnQobGVuID49IDApOworCWlmIChzdGF0dXMgPT0gRElGRl9TVEFUVVNfQ09QSUVEIHx8IHN0YXR1cyA9PSBESUZGX1NUQVRVU19SRU5BTUVEKQorCQlzdGF0dXNfcHJpbnRmX21vcmUocywgYywgIiVzJS4qcyVzIC0+ICVzIiwKKwkJCQkgICB3aGF0LCBsZW4sIHBhZGRpbmcsIG9uZSwgdHdvKTsKKwllbHNlCisJCXN0YXR1c19wcmludGZfbW9yZShzLCBjLCAiJXMlLipzJXMiLAorCQkJCSAgIHdoYXQsIGxlbiwgcGFkZGluZywgb25lKTsKKwlpZiAoZXh0cmEubGVuKSB7CisJCXN0YXR1c19wcmludGZfbW9yZShzLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwgIiVzIiwgZXh0cmEuYnVmKTsKKwkJc3RyYnVmX3JlbGVhc2UoJmV4dHJhKTsKKwl9CisJc3RhdHVzX3ByaW50Zl9tb3JlKHMsIEdJVF9DT0xPUl9OT1JNQUwsICJcbiIpOworCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOworCXN0cmJ1Zl9yZWxlYXNlKCZ0d29idWYpOworfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VkX2NiKHN0cnVjdCBkaWZmX3F1ZXVlX3N0cnVjdCAqcSwKKwkJCQkJIHN0cnVjdCBkaWZmX29wdGlvbnMgKm9wdGlvbnMsCisJCQkJCSB2b2lkICpkYXRhKQoreworCXN0cnVjdCB3dF9zdGF0dXMgKnMgPSBkYXRhOworCWludCBpOworCisJaWYgKCFxLT5ucikKKwkJcmV0dXJuOworCXMtPndvcmtkaXJfZGlydHkgPSAxOworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisKKwkJcCA9IHEtPnF1ZXVlW2ldOworCQlpdCA9IHN0cmluZ19saXN0X2luc2VydCgmcy0+Y2hhbmdlLCBwLT5vbmUtPnBhdGgpOworCQlkID0gaXQtPnV0aWw7CisJCWlmICghZCkgeworCQkJZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkKSk7CisJCQlpdC0+dXRpbCA9IGQ7CisJCX0KKwkJaWYgKCFkLT53b3JrdHJlZV9zdGF0dXMpCisJCQlkLT53b3JrdHJlZV9zdGF0dXMgPSBwLT5zdGF0dXM7CisJCWQtPmRpcnR5X3N1Ym1vZHVsZSA9IHAtPnR3by0+ZGlydHlfc3VibW9kdWxlOworCQlpZiAoU19JU0dJVExJTksocC0+dHdvLT5tb2RlKSkKKwkJCWQtPm5ld19zdWJtb2R1bGVfY29tbWl0cyA9ICEhaGFzaGNtcChwLT5vbmUtPnNoYTEsIHAtPnR3by0+c2hhMSk7CisJfQorfQorCitzdGF0aWMgaW50IHVubWVyZ2VkX21hc2soY29uc3QgY2hhciAqcGF0aCkKK3sKKwlpbnQgcG9zLCBtYXNrOworCWNvbnN0IHN0cnVjdCBjYWNoZV9lbnRyeSAqY2U7CisKKwlwb3MgPSBjYWNoZV9uYW1lX3BvcyhwYXRoLCBzdHJsZW4ocGF0aCkpOworCWlmICgwIDw9IHBvcykKKwkJcmV0dXJuIDA7CisKKwltYXNrID0gMDsKKwlwb3MgPSAtcG9zLTE7CisJd2hpbGUgKHBvcyA8IGFjdGl2ZV9ucikgeworCQljZSA9IGFjdGl2ZV9jYWNoZVtwb3MrK107CisJCWlmIChzdHJjbXAoY2UtPm5hbWUsIHBhdGgpIHx8ICFjZV9zdGFnZShjZSkpCisJCQlicmVhazsKKwkJbWFzayB8PSAoMSA8PCAoY2Vfc3RhZ2UoY2UpIC0gMSkpOworCX0KKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfdXBkYXRlZF9jYihzdHJ1Y3QgZGlmZl9xdWV1ZV9zdHJ1Y3QgKnEsCisJCQkJCSBzdHJ1Y3QgZGlmZl9vcHRpb25zICpvcHRpb25zLAorCQkJCQkgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd3Rfc3RhdHVzICpzID0gZGF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBxLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaWZmX2ZpbGVwYWlyICpwOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisKKwkJcCA9IHEtPnF1ZXVlW2ldOworCQlpdCA9IHN0cmluZ19saXN0X2luc2VydCgmcy0+Y2hhbmdlLCBwLT50d28tPnBhdGgpOworCQlkID0gaXQtPnV0aWw7CisJCWlmICghZCkgeworCQkJZCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpkKSk7CisJCQlpdC0+dXRpbCA9IGQ7CisJCX0KKwkJaWYgKCFkLT5pbmRleF9zdGF0dXMpCisJCQlkLT5pbmRleF9zdGF0dXMgPSBwLT5zdGF0dXM7CisJCXN3aXRjaCAocC0+c3RhdHVzKSB7CisJCWNhc2UgRElGRl9TVEFUVVNfQ09QSUVEOgorCQljYXNlIERJRkZfU1RBVFVTX1JFTkFNRUQ6CisJCQlkLT5oZWFkX3BhdGggPSB4c3RyZHVwKHAtPm9uZS0+cGF0aCk7CisJCQlicmVhazsKKwkJY2FzZSBESUZGX1NUQVRVU19VTk1FUkdFRDoKKwkJCWQtPnN0YWdlbWFzayA9IHVubWVyZ2VkX21hc2socC0+dHdvLT5wYXRoKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCB3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VzX3dvcmt0cmVlKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKworCWluaXRfcmV2aXNpb25zKCZyZXYsIE5VTEwpOworCXNldHVwX3JldmlzaW9ucygwLCBOVUxMLCAmcmV2LCBOVUxMKTsKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX0NBTExCQUNLOworCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIERJUlRZX1NVQk1PRFVMRVMpOworCWlmICghcy0+c2hvd191bnRyYWNrZWRfZmlsZXMpCisJCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIElHTk9SRV9VTlRSQUNLRURfSU5fU1VCTU9EVUxFUyk7CisJaWYgKHMtPmlnbm9yZV9zdWJtb2R1bGVfYXJnKSB7CisJCURJRkZfT1BUX1NFVCgmcmV2LmRpZmZvcHQsIE9WRVJSSURFX1NVQk1PRFVMRV9DT05GSUcpOworCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKCZyZXYuZGlmZm9wdCwgcy0+aWdub3JlX3N1Ym1vZHVsZV9hcmcpOworCX0KKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSB3dF9zdGF0dXNfY29sbGVjdF9jaGFuZ2VkX2NiOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gczsKKwljb3B5X3BhdGhzcGVjKCZyZXYucHJ1bmVfZGF0YSwgJnMtPnBhdGhzcGVjKTsKKwlydW5fZGlmZl9maWxlcygmcmV2LCAwKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc19pbmRleChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCByZXZfaW5mbyByZXY7CisJc3RydWN0IHNldHVwX3JldmlzaW9uX29wdCBvcHQ7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCW9wdC5kZWYgPSBzLT5pc19pbml0aWFsID8gRU1QVFlfVFJFRV9TSEExX0hFWCA6IHMtPnJlZmVyZW5jZTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgJm9wdCk7CisKKwlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBPVkVSUklERV9TVUJNT0RVTEVfQ09ORklHKTsKKwlpZiAocy0+aWdub3JlX3N1Ym1vZHVsZV9hcmcpIHsKKwkJaGFuZGxlX2lnbm9yZV9zdWJtb2R1bGVzX2FyZygmcmV2LmRpZmZvcHQsIHMtPmlnbm9yZV9zdWJtb2R1bGVfYXJnKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBVbmxlc3MgdGhlIHVzZXIgZGlkIGV4cGxpY2l0bHkgcmVxdWVzdCBhIHN1Ym1vZHVsZSBpZ25vcmUKKwkJICogbW9kZSBieSBwYXNzaW5nIGEgY29tbWFuZCBsaW5lIG9wdGlvbiB3ZSBkbyBub3QgaWdub3JlIGFueQorCQkgKiBjaGFuZ2VkIHN1Ym1vZHVsZSBTSEEtMXMgd2hlbiBjb21wYXJpbmcgaW5kZXggYW5kIEhFQUQsIG5vCisJCSAqIG1hdHRlciB3aGF0IGlzIGNvbmZpZ3VyZWQuIE90aGVyd2lzZSB0aGUgdXNlciB3b24ndCBiZQorCQkgKiBzaG93biBhbnkgc3VibW9kdWxlcyBzaGUgbWFudWFsbHkgYWRkZWQgKGFuZCB3aGljaCBhcmUKKwkJICogc3RhZ2VkIHRvIGJlIGNvbW1pdHRlZCksIHdoaWNoIHdvdWxkIGJlIHJlYWxseSBjb25mdXNpbmcuCisJCSAqLworCQloYW5kbGVfaWdub3JlX3N1Ym1vZHVsZXNfYXJnKCZyZXYuZGlmZm9wdCwgImRpcnR5Iik7CisJfQorCisJcmV2LmRpZmZvcHQub3V0cHV0X2Zvcm1hdCB8PSBESUZGX0ZPUk1BVF9DQUxMQkFDSzsKKwlyZXYuZGlmZm9wdC5mb3JtYXRfY2FsbGJhY2sgPSB3dF9zdGF0dXNfY29sbGVjdF91cGRhdGVkX2NiOworCXJldi5kaWZmb3B0LmZvcm1hdF9jYWxsYmFja19kYXRhID0gczsKKwlyZXYuZGlmZm9wdC5kZXRlY3RfcmVuYW1lID0gMTsKKwlyZXYuZGlmZm9wdC5yZW5hbWVfbGltaXQgPSAyMDA7CisJcmV2LmRpZmZvcHQuYnJlYWtfb3B0ID0gMDsKKwljb3B5X3BhdGhzcGVjKCZyZXYucHJ1bmVfZGF0YSwgJnMtPnBhdGhzcGVjKTsKKwlydW5fZGlmZl9pbmRleCgmcmV2LCAxKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc19pbml0aWFsKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWN0aXZlX25yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCQljb25zdCBzdHJ1Y3QgY2FjaGVfZW50cnkgKmNlID0gYWN0aXZlX2NhY2hlW2ldOworCisJCWlmICghY2VfcGF0aF9tYXRjaChjZSwgJnMtPnBhdGhzcGVjLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCQlpdCA9IHN0cmluZ19saXN0X2luc2VydCgmcy0+Y2hhbmdlLCBjZS0+bmFtZSk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkKSB7CisJCQlkID0geGNhbGxvYygxLCBzaXplb2YoKmQpKTsKKwkJCWl0LT51dGlsID0gZDsKKwkJfQorCQlpZiAoY2Vfc3RhZ2UoY2UpKSB7CisJCQlkLT5pbmRleF9zdGF0dXMgPSBESUZGX1NUQVRVU19VTk1FUkdFRDsKKwkJCWQtPnN0YWdlbWFzayB8PSAoMSA8PCAoY2Vfc3RhZ2UoY2UpIC0gMSkpOworCQl9CisJCWVsc2UKKwkJCWQtPmluZGV4X3N0YXR1cyA9IERJRkZfU1RBVFVTX0FEREVEOworCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX2NvbGxlY3RfdW50cmFja2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGk7CisJc3RydWN0IGRpcl9zdHJ1Y3QgZGlyOworCXVpbnQ2NF90IHRfYmVnaW4gPSBnZXRuYW5vdGltZSgpOworCisJaWYgKCFzLT5zaG93X3VudHJhY2tlZF9maWxlcykKKwkJcmV0dXJuOworCisJbWVtc2V0KCZkaXIsIDAsIHNpemVvZihkaXIpKTsKKwlpZiAocy0+c2hvd191bnRyYWNrZWRfZmlsZXMgIT0gU0hPV19BTExfVU5UUkFDS0VEX0ZJTEVTKQorCQlkaXIuZmxhZ3MgfD0KKwkJCURJUl9TSE9XX09USEVSX0RJUkVDVE9SSUVTIHwgRElSX0hJREVfRU1QVFlfRElSRUNUT1JJRVM7CisJaWYgKHMtPnNob3dfaWdub3JlZF9maWxlcykKKwkJZGlyLmZsYWdzIHw9IERJUl9TSE9XX0lHTk9SRURfVE9POworCWVsc2UKKwkJZGlyLnVudHJhY2tlZCA9IHRoZV9pbmRleC51bnRyYWNrZWQ7CisJc2V0dXBfc3RhbmRhcmRfZXhjbHVkZXMoJmRpcik7CisKKwlmaWxsX2RpcmVjdG9yeSgmZGlyLCAmcy0+cGF0aHNwZWMpOworCisJZm9yIChpID0gMDsgaSA8IGRpci5ucjsgaSsrKSB7CisJCXN0cnVjdCBkaXJfZW50cnkgKmVudCA9IGRpci5lbnRyaWVzW2ldOworCQlpZiAoY2FjaGVfbmFtZV9pc19vdGhlcihlbnQtPm5hbWUsIGVudC0+bGVuKSAmJgorCQkgICAgZGlyX3BhdGhfbWF0Y2goZW50LCAmcy0+cGF0aHNwZWMsIDAsIE5VTEwpKQorCQkJc3RyaW5nX2xpc3RfaW5zZXJ0KCZzLT51bnRyYWNrZWQsIGVudC0+bmFtZSk7CisJCWZyZWUoZW50KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGlyLmlnbm9yZWRfbnI7IGkrKykgeworCQlzdHJ1Y3QgZGlyX2VudHJ5ICplbnQgPSBkaXIuaWdub3JlZFtpXTsKKwkJaWYgKGNhY2hlX25hbWVfaXNfb3RoZXIoZW50LT5uYW1lLCBlbnQtPmxlbikgJiYKKwkJICAgIGRpcl9wYXRoX21hdGNoKGVudCwgJnMtPnBhdGhzcGVjLCAwLCBOVUxMKSkKKwkJCXN0cmluZ19saXN0X2luc2VydCgmcy0+aWdub3JlZCwgZW50LT5uYW1lKTsKKwkJZnJlZShlbnQpOworCX0KKworCWZyZWUoZGlyLmVudHJpZXMpOworCWZyZWUoZGlyLmlnbm9yZWQpOworCWNsZWFyX2RpcmVjdG9yeSgmZGlyKTsKKworCWlmIChhZHZpY2Vfc3RhdHVzX3Vfb3B0aW9uKQorCQlzLT51bnRyYWNrZWRfaW5fbXMgPSAoZ2V0bmFub3RpbWUoKSAtIHRfYmVnaW4pIC8gMTAwMDAwMDsKK30KKwordm9pZCB3dF9zdGF0dXNfY29sbGVjdChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXd0X3N0YXR1c19jb2xsZWN0X2NoYW5nZXNfd29ya3RyZWUocyk7CisKKwlpZiAocy0+aXNfaW5pdGlhbCkKKwkJd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc19pbml0aWFsKHMpOworCWVsc2UKKwkJd3Rfc3RhdHVzX2NvbGxlY3RfY2hhbmdlc19pbmRleChzKTsKKwl3dF9zdGF0dXNfY29sbGVjdF91bnRyYWNrZWQocyk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF91bm1lcmdlZChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWludCBzaG93bl9oZWFkZXIgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJaXQgPSAmKHMtPmNoYW5nZS5pdGVtc1tpXSk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkLT5zdGFnZW1hc2spCisJCQljb250aW51ZTsKKwkJaWYgKCFzaG93bl9oZWFkZXIpIHsKKwkJCXd0X3N0YXR1c19wcmludF91bm1lcmdlZF9oZWFkZXIocyk7CisJCQlzaG93bl9oZWFkZXIgPSAxOworCQl9CisJCXd0X3N0YXR1c19wcmludF91bm1lcmdlZF9kYXRhKHMsIGl0KTsKKwl9CisJaWYgKHNob3duX2hlYWRlcikKKwkJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7CisKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3VwZGF0ZWQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlpbnQgc2hvd25faGVhZGVyID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBzLT5jaGFuZ2UubnI7IGkrKykgeworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCWl0ID0gJihzLT5jaGFuZ2UuaXRlbXNbaV0pOworCQlkID0gaXQtPnV0aWw7CisJCWlmICghZC0+aW5kZXhfc3RhdHVzIHx8CisJCSAgICBkLT5pbmRleF9zdGF0dXMgPT0gRElGRl9TVEFUVVNfVU5NRVJHRUQpCisJCQljb250aW51ZTsKKwkJaWYgKCFzaG93bl9oZWFkZXIpIHsKKwkJCXd0X3N0YXR1c19wcmludF9jYWNoZWRfaGVhZGVyKHMpOworCQkJcy0+Y29tbWl0YWJsZSA9IDE7CisJCQlzaG93bl9oZWFkZXIgPSAxOworCQl9CisJCXd0X3N0YXR1c19wcmludF9jaGFuZ2VfZGF0YShzLCBXVF9TVEFUVVNfVVBEQVRFRCwgaXQpOworCX0KKwlpZiAoc2hvd25faGVhZGVyKQorCQl3dF9zdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKK30KKworLyoKKyAqIC0xIDogaGFzIGRlbGV0ZQorICogIDAgOiBubyBjaGFuZ2UKKyAqICAxIDogc29tZSBjaGFuZ2UgYnV0IG5vIGRlbGV0ZQorICovCitzdGF0aWMgaW50IHd0X3N0YXR1c19jaGVja193b3JrdHJlZV9jaGFuZ2VzKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJCSAgICAgaW50ICpkaXJ0eV9zdWJtb2R1bGVzKQoreworCWludCBpOworCWludCBjaGFuZ2VzID0gMDsKKworCSpkaXJ0eV9zdWJtb2R1bGVzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBzLT5jaGFuZ2UubnI7IGkrKykgeworCQlzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhICpkOworCQlkID0gcy0+Y2hhbmdlLml0ZW1zW2ldLnV0aWw7CisJCWlmICghZC0+d29ya3RyZWVfc3RhdHVzIHx8CisJCSAgICBkLT53b3JrdHJlZV9zdGF0dXMgPT0gRElGRl9TVEFUVVNfVU5NRVJHRUQpCisJCQljb250aW51ZTsKKwkJaWYgKCFjaGFuZ2VzKQorCQkJY2hhbmdlcyA9IDE7CisJCWlmIChkLT5kaXJ0eV9zdWJtb2R1bGUpCisJCQkqZGlydHlfc3VibW9kdWxlcyA9IDE7CisJCWlmIChkLT53b3JrdHJlZV9zdGF0dXMgPT0gRElGRl9TVEFUVVNfREVMRVRFRCkKKwkJCWNoYW5nZXMgPSAtMTsKKwl9CisJcmV0dXJuIGNoYW5nZXM7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF9jaGFuZ2VkKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGksIGRpcnR5X3N1Ym1vZHVsZXM7CisJaW50IHdvcmt0cmVlX2NoYW5nZXMgPSB3dF9zdGF0dXNfY2hlY2tfd29ya3RyZWVfY2hhbmdlcyhzLCAmZGlydHlfc3VibW9kdWxlcyk7CisKKwlpZiAoIXdvcmt0cmVlX2NoYW5nZXMpCisJCXJldHVybjsKKworCXd0X3N0YXR1c19wcmludF9kaXJ0eV9oZWFkZXIocywgd29ya3RyZWVfY2hhbmdlcyA8IDAsIGRpcnR5X3N1Ym1vZHVsZXMpOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKwkJaXQgPSAmKHMtPmNoYW5nZS5pdGVtc1tpXSk7CisJCWQgPSBpdC0+dXRpbDsKKwkJaWYgKCFkLT53b3JrdHJlZV9zdGF0dXMgfHwKKwkJICAgIGQtPndvcmt0cmVlX3N0YXR1cyA9PSBESUZGX1NUQVRVU19VTk1FUkdFRCkKKwkJCWNvbnRpbnVlOworCQl3dF9zdGF0dXNfcHJpbnRfY2hhbmdlX2RhdGEocywgV1RfU1RBVFVTX0NIQU5HRUQsIGl0KTsKKwl9CisJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF9zdWJtb2R1bGVfc3VtbWFyeShzdHJ1Y3Qgd3Rfc3RhdHVzICpzLCBpbnQgdW5jb21taXR0ZWQpCit7CisJc3RydWN0IGNoaWxkX3Byb2Nlc3Mgc21fc3VtbWFyeSA9IENISUxEX1BST0NFU1NfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIGNtZF9zdGRvdXQgPSBTVFJCVUZfSU5JVDsKKwlzdHJ1Y3Qgc3RyYnVmIHN1bW1hcnkgPSBTVFJCVUZfSU5JVDsKKwljaGFyICpzdW1tYXJ5X2NvbnRlbnQ7CisKKwlhcmd2X2FycmF5X3B1c2hmKCZzbV9zdW1tYXJ5LmVudl9hcnJheSwgIkdJVF9JTkRFWF9GSUxFPSVzIiwKKwkJCSBzLT5pbmRleF9maWxlKTsKKworCWFyZ3ZfYXJyYXlfcHVzaCgmc21fc3VtbWFyeS5hcmdzLCAic3VibW9kdWxlIik7CisJYXJndl9hcnJheV9wdXNoKCZzbV9zdW1tYXJ5LmFyZ3MsICJzdW1tYXJ5Iik7CisJYXJndl9hcnJheV9wdXNoKCZzbV9zdW1tYXJ5LmFyZ3MsIHVuY29tbWl0dGVkID8gIi0tZmlsZXMiIDogIi0tY2FjaGVkIik7CisJYXJndl9hcnJheV9wdXNoKCZzbV9zdW1tYXJ5LmFyZ3MsICItLWZvci1zdGF0dXMiKTsKKwlhcmd2X2FycmF5X3B1c2goJnNtX3N1bW1hcnkuYXJncywgIi0tc3VtbWFyeS1saW1pdCIpOworCWFyZ3ZfYXJyYXlfcHVzaGYoJnNtX3N1bW1hcnkuYXJncywgIiVkIiwgcy0+c3VibW9kdWxlX3N1bW1hcnkpOworCWlmICghdW5jb21taXR0ZWQpCisJCWFyZ3ZfYXJyYXlfcHVzaCgmc21fc3VtbWFyeS5hcmdzLCBzLT5hbWVuZCA/ICJIRUFEXiIgOiAiSEVBRCIpOworCisJc21fc3VtbWFyeS5naXRfY21kID0gMTsKKwlzbV9zdW1tYXJ5Lm5vX3N0ZGluID0gMTsKKworCWNhcHR1cmVfY29tbWFuZCgmc21fc3VtbWFyeSwgJmNtZF9zdGRvdXQsIDEwMjQpOworCisJLyogcHJlcGVuZCBoZWFkZXIsIG9ubHkgaWYgdGhlcmUncyBhbiBhY3R1YWwgb3V0cHV0ICovCisJaWYgKGNtZF9zdGRvdXQubGVuKSB7CisJCWlmICh1bmNvbW1pdHRlZCkKKwkJCXN0cmJ1Zl9hZGRzdHIoJnN1bW1hcnksIF8oIlN1Ym1vZHVsZXMgY2hhbmdlZCBidXQgbm90IHVwZGF0ZWQ6IikpOworCQllbHNlCisJCQlzdHJidWZfYWRkc3RyKCZzdW1tYXJ5LCBfKCJTdWJtb2R1bGUgY2hhbmdlcyB0byBiZSBjb21taXR0ZWQ6IikpOworCQlzdHJidWZfYWRkc3RyKCZzdW1tYXJ5LCAiXG5cbiIpOworCX0KKwlzdHJidWZfYWRkYnVmKCZzdW1tYXJ5LCAmY21kX3N0ZG91dCk7CisJc3RyYnVmX3JlbGVhc2UoJmNtZF9zdGRvdXQpOworCisJaWYgKHMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXgpIHsKKwkJc2l6ZV90IGxlbjsKKwkJc3VtbWFyeV9jb250ZW50ID0gc3RyYnVmX2RldGFjaCgmc3VtbWFyeSwgJmxlbik7CisJCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZzdW1tYXJ5LCBzdW1tYXJ5X2NvbnRlbnQsIGxlbik7CisJCWZyZWUoc3VtbWFyeV9jb250ZW50KTsKKwl9CisKKwlmcHV0cyhzdW1tYXJ5LmJ1Ziwgcy0+ZnApOworCXN0cmJ1Zl9yZWxlYXNlKCZzdW1tYXJ5KTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X290aGVyKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJICBzdHJ1Y3Qgc3RyaW5nX2xpc3QgKmwsCisJCQkJICBjb25zdCBjaGFyICp3aGF0LAorCQkJCSAgY29uc3QgY2hhciAqaG93KQoreworCWludCBpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisJc3RhdGljIHN0cnVjdCBzdHJpbmdfbGlzdCBvdXRwdXQgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwlzdHJ1Y3QgY29sdW1uX29wdGlvbnMgY29wdHM7CisKKwlpZiAoIWwtPm5yKQorCQlyZXR1cm47CisKKwl3dF9zdGF0dXNfcHJpbnRfb3RoZXJfaGVhZGVyKHMsIHdoYXQsIGhvdyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbC0+bnI7IGkrKykgeworCQlzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQ7CisJCWNvbnN0IGNoYXIgKnBhdGg7CisJCWl0ID0gJihsLT5pdGVtc1tpXSk7CisJCXBhdGggPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIHMtPnByZWZpeCwgJmJ1Zik7CisJCWlmIChjb2x1bW5fYWN0aXZlKHMtPmNvbG9wdHMpKSB7CisJCQlzdHJpbmdfbGlzdF9hcHBlbmQoJm91dHB1dCwgcGF0aCk7CisJCQljb250aW51ZTsKKwkJfQorCQlzdGF0dXNfcHJpbnRmKHMsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiXHQiKTsKKwkJc3RhdHVzX3ByaW50Zl9tb3JlKHMsIGNvbG9yKFdUX1NUQVRVU19VTlRSQUNLRUQsIHMpLAorCQkJCSAgICIlc1xuIiwgcGF0aCk7CisJfQorCisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJaWYgKCFjb2x1bW5fYWN0aXZlKHMtPmNvbG9wdHMpKQorCQlnb3RvIGNvbmNsdWRlOworCisJc3RyYnVmX2FkZGYoJmJ1ZiwgIiVzJXNcdCVzIiwKKwkJICAgIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLAorCQkgICAgcy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeCA/ICIjIiA6ICIiLAorCQkgICAgY29sb3IoV1RfU1RBVFVTX1VOVFJBQ0tFRCwgcykpOworCW1lbXNldCgmY29wdHMsIDAsIHNpemVvZihjb3B0cykpOworCWNvcHRzLnBhZGRpbmcgPSAxOworCWNvcHRzLmluZGVudCA9IGJ1Zi5idWY7CisJaWYgKHdhbnRfY29sb3Iocy0+dXNlX2NvbG9yKSkKKwkJY29wdHMubmwgPSBHSVRfQ09MT1JfUkVTRVQgIlxuIjsKKwlwcmludF9jb2x1bW5zKCZvdXRwdXQsIHMtPmNvbG9wdHMsICZjb3B0cyk7CisJc3RyaW5nX2xpc3RfY2xlYXIoJm91dHB1dCwgMCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Citjb25jbHVkZToKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIEdJVF9DT0xPUl9OT1JNQUwsICIlcyIsICIiKTsKK30KKwordm9pZCB3dF9zdGF0dXNfdHJ1bmNhdGVfbWVzc2FnZV9hdF9jdXRfbGluZShzdHJ1Y3Qgc3RyYnVmICpidWYpCit7CisJY29uc3QgY2hhciAqcDsKKwlzdHJ1Y3Qgc3RyYnVmIHBhdHRlcm4gPSBTVFJCVUZfSU5JVDsKKworCXN0cmJ1Zl9hZGRmKCZwYXR0ZXJuLCAiXG4lYyAlcyIsIGNvbW1lbnRfbGluZV9jaGFyLCBjdXRfbGluZSk7CisJaWYgKHN0YXJ0c193aXRoKGJ1Zi0+YnVmLCBwYXR0ZXJuLmJ1ZiArIDEpKQorCQlzdHJidWZfc2V0bGVuKGJ1ZiwgMCk7CisJZWxzZSBpZiAoKHAgPSBzdHJzdHIoYnVmLT5idWYsIHBhdHRlcm4uYnVmKSkpCisJCXN0cmJ1Zl9zZXRsZW4oYnVmLCBwIC0gYnVmLT5idWYgKyAxKTsKKwlzdHJidWZfcmVsZWFzZSgmcGF0dGVybik7Cit9CisKK3ZvaWQgd3Rfc3RhdHVzX2FkZF9jdXRfbGluZShGSUxFICpmcCkKK3sKKwljb25zdCBjaGFyICpleHBsYW5hdGlvbiA9IF8oIkRvIG5vdCB0b3VjaCB0aGUgbGluZSBhYm92ZS5cbkV2ZXJ5dGhpbmcgYmVsb3cgd2lsbCBiZSByZW1vdmVkLiIpOworCXN0cnVjdCBzdHJidWYgYnVmID0gU1RSQlVGX0lOSVQ7CisKKwlmcHJpbnRmKGZwLCAiJWMgJXMiLCBjb21tZW50X2xpbmVfY2hhciwgY3V0X2xpbmUpOworCXN0cmJ1Zl9hZGRfY29tbWVudGVkX2xpbmVzKCZidWYsIGV4cGxhbmF0aW9uLCBzdHJsZW4oZXhwbGFuYXRpb24pKTsKKwlmcHV0cyhidWYuYnVmLCBmcCk7CisJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19wcmludF92ZXJib3NlKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHJldl9pbmZvIHJldjsKKwlzdHJ1Y3Qgc2V0dXBfcmV2aXNpb25fb3B0IG9wdDsKKwlpbnQgZGlydHlfc3VibW9kdWxlczsKKwljb25zdCBjaGFyICpjID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisKKwlpbml0X3JldmlzaW9ucygmcmV2LCBOVUxMKTsKKwlESUZGX09QVF9TRVQoJnJldi5kaWZmb3B0LCBBTExPV19URVhUQ09OVik7CisKKwltZW1zZXQoJm9wdCwgMCwgc2l6ZW9mKG9wdCkpOworCW9wdC5kZWYgPSBzLT5pc19pbml0aWFsID8gRU1QVFlfVFJFRV9TSEExX0hFWCA6IHMtPnJlZmVyZW5jZTsKKwlzZXR1cF9yZXZpc2lvbnMoMCwgTlVMTCwgJnJldiwgJm9wdCk7CisKKwlyZXYuZGlmZm9wdC5vdXRwdXRfZm9ybWF0IHw9IERJRkZfRk9STUFUX1BBVENIOworCXJldi5kaWZmb3B0LmRldGVjdF9yZW5hbWUgPSAxOworCXJldi5kaWZmb3B0LmZpbGUgPSBzLT5mcDsKKwlyZXYuZGlmZm9wdC5jbG9zZV9maWxlID0gMDsKKwkvKgorCSAqIElmIHdlJ3JlIG5vdCBnb2luZyB0byBzdGRvdXQsIHRoZW4gd2UgZGVmaW5pdGVseSBkb24ndAorCSAqIHdhbnQgY29sb3IsIHNpbmNlIHdlIGFyZSBnb2luZyB0byB0aGUgY29tbWl0IG1lc3NhZ2UKKwkgKiBmaWxlIChhbmQgZXZlbiB0aGUgImF1dG8iIHNldHRpbmcgd29uJ3Qgd29yaywgc2luY2UgaXQKKwkgKiB3aWxsIGhhdmUgY2hlY2tlZCBpc2F0dHkgb24gc3Rkb3V0KS4gQnV0IHdlIHRoZW4gZG8gd2FudAorCSAqIHRvIGluc2VydCB0aGUgc2Npc3NvciBsaW5lIGhlcmUgdG8gcmVsaWFibHkgcmVtb3ZlIHRoZQorCSAqIGRpZmYgYmVmb3JlIGNvbW1pdHRpbmcuCisJICovCisJaWYgKHMtPmZwICE9IHN0ZG91dCkgeworCQlyZXYuZGlmZm9wdC51c2VfY29sb3IgPSAwOworCQl3dF9zdGF0dXNfYWRkX2N1dF9saW5lKHMtPmZwKTsKKwl9CisJaWYgKHMtPnZlcmJvc2UgPiAxICYmIHMtPmNvbW1pdGFibGUpIHsKKwkJLyogcHJpbnRfdXBkYXRlZCgpIHByaW50ZWQgYSBoZWFkZXIsIHNvIGRvIHdlICovCisJCWlmIChzLT5mcCAhPSBzdGRvdXQpCisJCQl3dF9zdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLCBfKCJDaGFuZ2VzIHRvIGJlIGNvbW1pdHRlZDoiKSk7CisJCXJldi5kaWZmb3B0LmFfcHJlZml4ID0gImMvIjsKKwkJcmV2LmRpZmZvcHQuYl9wcmVmaXggPSAiaS8iOworCX0gLyogZWxzZSB1c2UgcHJlZml4IGFzIHBlciB1c2VyIGNvbmZpZyAqLworCXJ1bl9kaWZmX2luZGV4KCZyZXYsIDEpOworCWlmIChzLT52ZXJib3NlID4gMSAmJgorCSAgICB3dF9zdGF0dXNfY2hlY2tfd29ya3RyZWVfY2hhbmdlcyhzLCAmZGlydHlfc3VibW9kdWxlcykpIHsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjLAorCQkJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisJCXN0YXR1c19wcmludGZfbG4ocywgYywgXygiQ2hhbmdlcyBub3Qgc3RhZ2VkIGZvciBjb21taXQ6IikpOworCQlzZXR1cF93b3JrX3RyZWUoKTsKKwkJcmV2LmRpZmZvcHQuYV9wcmVmaXggPSAiaS8iOworCQlyZXYuZGlmZm9wdC5iX3ByZWZpeCA9ICJ3LyI7CisJCXJ1bl9kaWZmX2ZpbGVzKCZyZXYsIDApOworCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3RyYWNraW5nKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHN0cmJ1ZiBzYiA9IFNUUkJVRl9JTklUOworCWNvbnN0IGNoYXIgKmNwLCAqZXA7CisJc3RydWN0IGJyYW5jaCAqYnJhbmNoOworCWNoYXIgY29tbWVudF9saW5lX3N0cmluZ1szXTsKKwlpbnQgaTsKKworCWFzc2VydChzLT5icmFuY2ggJiYgIXMtPmlzX2luaXRpYWwpOworCWlmICghc3RhcnRzX3dpdGgocy0+YnJhbmNoLCAicmVmcy9oZWFkcy8iKSkKKwkJcmV0dXJuOworCWJyYW5jaCA9IGJyYW5jaF9nZXQocy0+YnJhbmNoICsgMTEpOworCWlmICghZm9ybWF0X3RyYWNraW5nX2luZm8oYnJhbmNoLCAmc2IpKQorCQlyZXR1cm47CisKKwlpID0gMDsKKwlpZiAocy0+ZGlzcGxheV9jb21tZW50X3ByZWZpeCkgeworCQljb21tZW50X2xpbmVfc3RyaW5nW2krK10gPSBjb21tZW50X2xpbmVfY2hhcjsKKwkJY29tbWVudF9saW5lX3N0cmluZ1tpKytdID0gJyAnOworCX0KKwljb21tZW50X2xpbmVfc3RyaW5nW2ldID0gJ1wwJzsKKworCWZvciAoY3AgPSBzYi5idWY7IChlcCA9IHN0cmNocihjcCwgJ1xuJykpICE9IE5VTEw7IGNwID0gZXAgKyAxKQorCQljb2xvcl9mcHJpbnRmX2xuKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKSwKKwkJCQkgIiVzJS4qcyIsIGNvbW1lbnRfbGluZV9zdHJpbmcsCisJCQkJIChpbnQpKGVwIC0gY3ApLCBjcCk7CisJaWYgKHMtPmRpc3BsYXlfY29tbWVudF9wcmVmaXgpCisJCWNvbG9yX2ZwcmludGZfbG4ocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiJWMiLAorCQkJCSBjb21tZW50X2xpbmVfY2hhcik7CisJZWxzZQorCQlmcHV0cygiIiwgcy0+ZnApOworfQorCitzdGF0aWMgaW50IGhhc191bm1lcmdlZChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCWQgPSBzLT5jaGFuZ2UuaXRlbXNbaV0udXRpbDsKKwkJaWYgKGQtPnN0YWdlbWFzaykKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hvd19tZXJnZV9pbl9wcm9ncmVzcyhzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlLAorCQkJCWNvbnN0IGNoYXIgKmNvbG9yKQoreworCWlmIChoYXNfdW5tZXJnZWQocykpIHsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwgXygiWW91IGhhdmUgdW5tZXJnZWQgcGF0aHMuIikpOworCQlpZiAocy0+aGludHMpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKGZpeCBjb25mbGljdHMgYW5kIHJ1biBcImdpdCBjb21taXRcIikiKSk7CisJfSBlbHNlIHsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCV8oIkFsbCBjb25mbGljdHMgZml4ZWQgYnV0IHlvdSBhcmUgc3RpbGwgbWVyZ2luZy4iKSk7CisJCWlmIChzLT5oaW50cykKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAodXNlIFwiZ2l0IGNvbW1pdFwiIHRvIGNvbmNsdWRlIG1lcmdlKSIpKTsKKwl9CisJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfYW1faW5fcHJvZ3Jlc3Moc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQlzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlICpzdGF0ZSwKKwkJCQljb25zdCBjaGFyICpjb2xvcikKK3sKKwlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQlfKCJZb3UgYXJlIGluIHRoZSBtaWRkbGUgb2YgYW4gYW0gc2Vzc2lvbi4iKSk7CisJaWYgKHN0YXRlLT5hbV9lbXB0eV9wYXRjaCkKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCV8oIlRoZSBjdXJyZW50IHBhdGNoIGlzIGVtcHR5LiIpKTsKKwlpZiAocy0+aGludHMpIHsKKwkJaWYgKCFzdGF0ZS0+YW1fZW1wdHlfcGF0Y2gpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKGZpeCBjb25mbGljdHMgYW5kIHRoZW4gcnVuIFwiZ2l0IGFtIC0tY29udGludWVcIikiKSk7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQlfKCIgICh1c2UgXCJnaXQgYW0gLS1za2lwXCIgdG8gc2tpcCB0aGlzIHBhdGNoKSIpKTsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCV8oIiAgKHVzZSBcImdpdCBhbSAtLWFib3J0XCIgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgYnJhbmNoKSIpKTsKKwl9CisJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyBjaGFyICpyZWFkX2xpbmVfZnJvbV9naXRfcGF0aChjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIGJ1ZiA9IFNUUkJVRl9JTklUOworCUZJTEUgKmZwID0gZm9wZW4oZ2l0X3BhdGgoIiVzIiwgZmlsZW5hbWUpLCAiciIpOworCWlmICghZnApIHsKKwkJc3RyYnVmX3JlbGVhc2UoJmJ1Zik7CisJCXJldHVybiBOVUxMOworCX0KKwlzdHJidWZfZ2V0bGluZSgmYnVmLCBmcCwgJ1xuJyk7CisJaWYgKCFmY2xvc2UoZnApKSB7CisJCXJldHVybiBzdHJidWZfZGV0YWNoKCZidWYsIE5VTEwpOworCX0gZWxzZSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZidWYpOworCQlyZXR1cm4gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3BsaXRfY29tbWl0X2luX3Byb2dyZXNzKHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IHNwbGl0X2luX3Byb2dyZXNzID0gMDsKKwljaGFyICpoZWFkID0gcmVhZF9saW5lX2Zyb21fZ2l0X3BhdGgoIkhFQUQiKTsKKwljaGFyICpvcmlnX2hlYWQgPSByZWFkX2xpbmVfZnJvbV9naXRfcGF0aCgiT1JJR19IRUFEIik7CisJY2hhciAqcmViYXNlX2FtZW5kID0gcmVhZF9saW5lX2Zyb21fZ2l0X3BhdGgoInJlYmFzZS1tZXJnZS9hbWVuZCIpOworCWNoYXIgKnJlYmFzZV9vcmlnX2hlYWQgPSByZWFkX2xpbmVfZnJvbV9naXRfcGF0aCgicmViYXNlLW1lcmdlL29yaWctaGVhZCIpOworCisJaWYgKCFoZWFkIHx8ICFvcmlnX2hlYWQgfHwgIXJlYmFzZV9hbWVuZCB8fCAhcmViYXNlX29yaWdfaGVhZCB8fAorCSAgICAhcy0+YnJhbmNoIHx8IHN0cmNtcChzLT5icmFuY2gsICJIRUFEIikpCisJCXJldHVybiBzcGxpdF9pbl9wcm9ncmVzczsKKworCWlmICghc3RyY21wKHJlYmFzZV9hbWVuZCwgcmViYXNlX29yaWdfaGVhZCkpIHsKKwkJaWYgKHN0cmNtcChoZWFkLCByZWJhc2VfYW1lbmQpKQorCQkJc3BsaXRfaW5fcHJvZ3Jlc3MgPSAxOworCX0gZWxzZSBpZiAoc3RyY21wKG9yaWdfaGVhZCwgcmViYXNlX29yaWdfaGVhZCkpIHsKKwkJc3BsaXRfaW5fcHJvZ3Jlc3MgPSAxOworCX0KKworCWlmICghcy0+YW1lbmQgJiYgIXMtPm5vd2FybiAmJiAhcy0+d29ya2Rpcl9kaXJ0eSkKKwkJc3BsaXRfaW5fcHJvZ3Jlc3MgPSAwOworCisJZnJlZShoZWFkKTsKKwlmcmVlKG9yaWdfaGVhZCk7CisJZnJlZShyZWJhc2VfYW1lbmQpOworCWZyZWUocmViYXNlX29yaWdfaGVhZCk7CisJcmV0dXJuIHNwbGl0X2luX3Byb2dyZXNzOworfQorCisvKgorICogVHVybgorICogInBpY2sgZDZhMmYwMzAzZTg5N2VjMjU3ZGQwZTBhMzlhNWNjYjcwOWJjMjA0NyBzb21lIG1lc3NhZ2UiCisgKiBpbnRvCisgKiAicGljayBkNmEyZjAzIHNvbWUgbWVzc2FnZSIKKyAqCisgKiBUaGUgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSBsaW5lIGRvZXMgbm90IGNvbnRhaW4gdXNlbGVzcyBzcGFjZXMKKyAqIGJlZm9yZSBvciBhZnRlciB0aGUgY29tbWFuZC4KKyAqLworc3RhdGljIHZvaWQgYWJicmV2X3NoYTFfaW5fbGluZShzdHJ1Y3Qgc3RyYnVmICpsaW5lKQoreworCXN0cnVjdCBzdHJidWYgKipzcGxpdDsKKwlpbnQgaTsKKworCWlmIChzdGFydHNfd2l0aChsaW5lLT5idWYsICJleGVjICIpIHx8CisJICAgIHN0YXJ0c193aXRoKGxpbmUtPmJ1ZiwgInggIikpCisJCXJldHVybjsKKworCXNwbGl0ID0gc3RyYnVmX3NwbGl0X21heChsaW5lLCAnICcsIDMpOworCWlmIChzcGxpdFswXSAmJiBzcGxpdFsxXSkgeworCQl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCQljb25zdCBjaGFyICphYmJyZXY7CisKKwkJLyoKKwkJICogc3RyYnVmX3NwbGl0X21heCBsZWZ0IGEgc3BhY2UuIFRyaW0gaXQgYW5kIHJlLWFkZAorCQkgKiBpdCBhZnRlciBhYmJyZXZpYXRpb24uCisJCSAqLworCQlzdHJidWZfdHJpbShzcGxpdFsxXSk7CisJCWlmICghZ2V0X3NoYTEoc3BsaXRbMV0tPmJ1Ziwgc2hhMSkpIHsKKwkJCWFiYnJldiA9IGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVik7CisJCQlzdHJidWZfcmVzZXQoc3BsaXRbMV0pOworCQkJc3RyYnVmX2FkZGYoc3BsaXRbMV0sICIlcyAiLCBhYmJyZXYpOworCQkJc3RyYnVmX3Jlc2V0KGxpbmUpOworCQkJZm9yIChpID0gMDsgc3BsaXRbaV07IGkrKykKKwkJCQlzdHJidWZfYWRkZihsaW5lLCAiJXMiLCBzcGxpdFtpXS0+YnVmKTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBzcGxpdFtpXTsgaSsrKQorCQlzdHJidWZfcmVsZWFzZShzcGxpdFtpXSk7CisKK30KKworc3RhdGljIHZvaWQgcmVhZF9yZWJhc2VfdG9kb2xpc3QoY29uc3QgY2hhciAqZm5hbWUsIHN0cnVjdCBzdHJpbmdfbGlzdCAqbGluZXMpCit7CisJc3RydWN0IHN0cmJ1ZiBsaW5lID0gU1RSQlVGX0lOSVQ7CisJRklMRSAqZiA9IGZvcGVuKGdpdF9wYXRoKCIlcyIsIGZuYW1lKSwgInIiKTsKKworCWlmICghZikKKwkJZGllX2Vycm5vKCJDb3VsZCBub3Qgb3BlbiBmaWxlICVzIGZvciByZWFkaW5nIiwKKwkJCSAgZ2l0X3BhdGgoIiVzIiwgZm5hbWUpKTsKKwl3aGlsZSAoIXN0cmJ1Zl9nZXRsaW5lKCZsaW5lLCBmLCAnXG4nKSkgeworCQlpZiAobGluZS5sZW4gJiYgbGluZS5idWZbMF0gPT0gY29tbWVudF9saW5lX2NoYXIpCisJCQljb250aW51ZTsKKwkJc3RyYnVmX3RyaW0oJmxpbmUpOworCQlpZiAoIWxpbmUubGVuKQorCQkJY29udGludWU7CisJCWFiYnJldl9zaGExX2luX2xpbmUoJmxpbmUpOworCQlzdHJpbmdfbGlzdF9hcHBlbmQobGluZXMsIGxpbmUuYnVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcmViYXNlX2luZm9ybWF0aW9uKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlLAorCQkJCQljb25zdCBjaGFyICpjb2xvcikKK3sKKwlpZiAoc3RhdGUtPnJlYmFzZV9pbnRlcmFjdGl2ZV9pbl9wcm9ncmVzcykgeworCQlpbnQgaTsKKwkJaW50IG5yX2xpbmVzX3RvX3Nob3cgPSAyOworCisJCXN0cnVjdCBzdHJpbmdfbGlzdCBoYXZlX2RvbmUgPSBTVFJJTkdfTElTVF9JTklUX0RVUDsKKwkJc3RydWN0IHN0cmluZ19saXN0IHlldF90b19kbyA9IFNUUklOR19MSVNUX0lOSVRfRFVQOworCisJCXJlYWRfcmViYXNlX3RvZG9saXN0KCJyZWJhc2UtbWVyZ2UvZG9uZSIsICZoYXZlX2RvbmUpOworCQlyZWFkX3JlYmFzZV90b2RvbGlzdCgicmViYXNlLW1lcmdlL2dpdC1yZWJhc2UtdG9kbyIsICZ5ZXRfdG9fZG8pOworCisJCWlmIChoYXZlX2RvbmUubnIgPT0gMCkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsIF8oIk5vIGNvbW1hbmRzIGRvbmUuIikpOworCQllbHNlIHsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJUV8oIkxhc3QgY29tbWFuZCBkb25lICglZCBjb21tYW5kIGRvbmUpOiIsCisJCQkJCSJMYXN0IGNvbW1hbmRzIGRvbmUgKCVkIGNvbW1hbmRzIGRvbmUpOiIsCisJCQkJCWhhdmVfZG9uZS5uciksCisJCQkJaGF2ZV9kb25lLm5yKTsKKwkJCWZvciAoaSA9IChoYXZlX2RvbmUubnIgPiBucl9saW5lc190b19zaG93KQorCQkJCT8gaGF2ZV9kb25lLm5yIC0gbnJfbGluZXNfdG9fc2hvdyA6IDA7CisJCQkJaSA8IGhhdmVfZG9uZS5ucjsKKwkJCQlpKyspCisJCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwgIiAgICVzIiwgaGF2ZV9kb25lLml0ZW1zW2ldLnN0cmluZyk7CisJCQlpZiAoaGF2ZV9kb25lLm5yID4gbnJfbGluZXNfdG9fc2hvdyAmJiBzLT5oaW50cykKKwkJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCQlfKCIgIChzZWUgbW9yZSBpbiBmaWxlICVzKSIpLCBnaXRfcGF0aCgicmViYXNlLW1lcmdlL2RvbmUiKSk7CisJCX0KKworCQlpZiAoeWV0X3RvX2RvLm5yID09IDApCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCQkgXygiTm8gY29tbWFuZHMgcmVtYWluaW5nLiIpKTsKKwkJZWxzZSB7CisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCVFfKCJOZXh0IGNvbW1hbmQgdG8gZG8gKCVkIHJlbWFpbmluZyBjb21tYW5kKToiLAorCQkJCQkiTmV4dCBjb21tYW5kcyB0byBkbyAoJWQgcmVtYWluaW5nIGNvbW1hbmRzKToiLAorCQkJCQl5ZXRfdG9fZG8ubnIpLAorCQkJCXlldF90b19kby5ucik7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnJfbGluZXNfdG9fc2hvdyAmJiBpIDwgeWV0X3RvX2RvLm5yOyBpKyspCisJCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwgIiAgICVzIiwgeWV0X3RvX2RvLml0ZW1zW2ldLnN0cmluZyk7CisJCQlpZiAocy0+aGludHMpCisJCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkJXygiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWVkaXQtdG9kb1wiIHRvIHZpZXcgYW5kIGVkaXQpIikpOworCQl9CisJCXN0cmluZ19saXN0X2NsZWFyKCZ5ZXRfdG9fZG8sIDApOworCQlzdHJpbmdfbGlzdF9jbGVhcigmaGF2ZV9kb25lLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3JlYmFzZV9zdGF0ZShzdHJ1Y3Qgd3Rfc3RhdHVzICpzLAorCQkJCXN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlLAorCQkJCWNvbnN0IGNoYXIgKmNvbG9yKQoreworCWlmIChzdGF0ZS0+YnJhbmNoKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCSBfKCJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIpLAorCQkJCSBzdGF0ZS0+YnJhbmNoLAorCQkJCSBzdGF0ZS0+b250byk7CisJZWxzZQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCSBfKCJZb3UgYXJlIGN1cnJlbnRseSByZWJhc2luZy4iKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfcmViYXNlX2luX3Byb2dyZXNzKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUsCisJCQkJY29uc3QgY2hhciAqY29sb3IpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlzaG93X3JlYmFzZV9pbmZvcm1hdGlvbihzLCBzdGF0ZSwgY29sb3IpOworCWlmIChoYXNfdW5tZXJnZWQocykpIHsKKwkJcHJpbnRfcmViYXNlX3N0YXRlKHMsIHN0YXRlLCBjb2xvcik7CisJCWlmIChzLT5oaW50cykgeworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChmaXggY29uZmxpY3RzIGFuZCB0aGVuIHJ1biBcImdpdCByZWJhc2UgLS1jb250aW51ZVwiKSIpKTsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAodXNlIFwiZ2l0IHJlYmFzZSAtLXNraXBcIiB0byBza2lwIHRoaXMgcGF0Y2gpIikpOworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgICh1c2UgXCJnaXQgcmViYXNlIC0tYWJvcnRcIiB0byBjaGVjayBvdXQgdGhlIG9yaWdpbmFsIGJyYW5jaCkiKSk7CisJCX0KKwl9IGVsc2UgaWYgKHN0YXRlLT5yZWJhc2VfaW5fcHJvZ3Jlc3MgfHwgIXN0YXQoZ2l0X3BhdGhfbWVyZ2VfbXNnKCksICZzdCkpIHsKKwkJcHJpbnRfcmViYXNlX3N0YXRlKHMsIHN0YXRlLCBjb2xvcik7CisJCWlmIChzLT5oaW50cykKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIikpOworCX0gZWxzZSBpZiAoc3BsaXRfY29tbWl0X2luX3Byb2dyZXNzKHMpKSB7CisJCWlmIChzdGF0ZS0+YnJhbmNoKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkJIF8oIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCB3aGlsZSByZWJhc2luZyBicmFuY2ggJyVzJyBvbiAnJXMnLiIpLAorCQkJCQkgc3RhdGUtPmJyYW5jaCwKKwkJCQkJIHN0YXRlLT5vbnRvKTsKKwkJZWxzZQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkJIF8oIllvdSBhcmUgY3VycmVudGx5IHNwbGl0dGluZyBhIGNvbW1pdCBkdXJpbmcgYSByZWJhc2UuIikpOworCQlpZiAocy0+aGludHMpCisJCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJCV8oIiAgKE9uY2UgeW91ciB3b3JraW5nIGRpcmVjdG9yeSBpcyBjbGVhbiwgcnVuIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIpIikpOworCX0gZWxzZSB7CisJCWlmIChzdGF0ZS0+YnJhbmNoKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQkJIF8oIllvdSBhcmUgY3VycmVudGx5IGVkaXRpbmcgYSBjb21taXQgd2hpbGUgcmViYXNpbmcgYnJhbmNoICclcycgb24gJyVzJy4iKSwKKwkJCQkJIHN0YXRlLT5icmFuY2gsCisJCQkJCSBzdGF0ZS0+b250byk7CisJCWVsc2UKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJCSBfKCJZb3UgYXJlIGN1cnJlbnRseSBlZGl0aW5nIGEgY29tbWl0IGR1cmluZyBhIHJlYmFzZS4iKSk7CisJCWlmIChzLT5oaW50cyAmJiAhcy0+YW1lbmQpIHsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAodXNlIFwiZ2l0IGNvbW1pdCAtLWFtZW5kXCIgdG8gYW1lbmQgdGhlIGN1cnJlbnQgY29tbWl0KSIpKTsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAodXNlIFwiZ2l0IHJlYmFzZSAtLWNvbnRpbnVlXCIgb25jZSB5b3UgYXJlIHNhdGlzZmllZCB3aXRoIHlvdXIgY2hhbmdlcykiKSk7CisJCX0KKwl9CisJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfY2hlcnJ5X3BpY2tfaW5fcHJvZ3Jlc3Moc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkJc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUsCisJCQkJCWNvbnN0IGNoYXIgKmNvbG9yKQoreworCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsIF8oIllvdSBhcmUgY3VycmVudGx5IGNoZXJyeS1waWNraW5nIGNvbW1pdCAlcy4iKSwKKwkJCWZpbmRfdW5pcXVlX2FiYnJldihzdGF0ZS0+Y2hlcnJ5X3BpY2tfaGVhZF9zaGExLCBERUZBVUxUX0FCQlJFVikpOworCWlmIChzLT5oaW50cykgeworCQlpZiAoaGFzX3VubWVyZ2VkKHMpKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIpKTsKKwkJZWxzZQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChhbGwgY29uZmxpY3RzIGZpeGVkOiBydW4gXCJnaXQgY2hlcnJ5LXBpY2sgLS1jb250aW51ZVwiKSIpKTsKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCV8oIiAgKHVzZSBcImdpdCBjaGVycnktcGljayAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSBjaGVycnktcGljayBvcGVyYXRpb24pIikpOworCX0KKwl3dF9zdGF0dXNfcHJpbnRfdHJhaWxlcihzKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19yZXZlcnRfaW5fcHJvZ3Jlc3Moc3RydWN0IHd0X3N0YXR1cyAqcywKKwkJCQkJc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUsCisJCQkJCWNvbnN0IGNoYXIgKmNvbG9yKQoreworCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsIF8oIllvdSBhcmUgY3VycmVudGx5IHJldmVydGluZyBjb21taXQgJXMuIiksCisJCQkgZmluZF91bmlxdWVfYWJicmV2KHN0YXRlLT5yZXZlcnRfaGVhZF9zaGExLCBERUZBVUxUX0FCQlJFVikpOworCWlmIChzLT5oaW50cykgeworCQlpZiAoaGFzX3VubWVyZ2VkKHMpKQorCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBjb2xvciwKKwkJCQlfKCIgIChmaXggY29uZmxpY3RzIGFuZCBydW4gXCJnaXQgcmV2ZXJ0IC0tY29udGludWVcIikiKSk7CisJCWVsc2UKKwkJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJXygiICAoYWxsIGNvbmZsaWN0cyBmaXhlZDogcnVuIFwiZ2l0IHJldmVydCAtLWNvbnRpbnVlXCIpIikpOworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiICAodXNlIFwiZ2l0IHJldmVydCAtLWFib3J0XCIgdG8gY2FuY2VsIHRoZSByZXZlcnQgb3BlcmF0aW9uKSIpKTsKKwl9CisJd3Rfc3RhdHVzX3ByaW50X3RyYWlsZXIocyk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfYmlzZWN0X2luX3Byb2dyZXNzKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJc3RydWN0IHd0X3N0YXR1c19zdGF0ZSAqc3RhdGUsCisJCQkJY29uc3QgY2hhciAqY29sb3IpCit7CisJaWYgKHN0YXRlLT5icmFuY2gpCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJIF8oIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZywgc3RhcnRlZCBmcm9tIGJyYW5jaCAnJXMnLiIpLAorCQkJCSBzdGF0ZS0+YnJhbmNoKTsKKwllbHNlCisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IsCisJCQkJIF8oIllvdSBhcmUgY3VycmVudGx5IGJpc2VjdGluZy4iKSk7CisJaWYgKHMtPmhpbnRzKQorCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yLAorCQkJXygiICAodXNlIFwiZ2l0IGJpc2VjdCByZXNldFwiIHRvIGdldCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBicmFuY2gpIikpOworCXd0X3N0YXR1c19wcmludF90cmFpbGVyKHMpOworfQorCisvKgorICogRXh0cmFjdCBicmFuY2ggaW5mb3JtYXRpb24gZnJvbSByZWJhc2UvYmlzZWN0CisgKi8KK3N0YXRpYyBjaGFyICpyZWFkX2FuZF9zdHJpcF9icmFuY2goY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3RyYnVmIHNiID0gU1RSQlVGX0lOSVQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKworCWlmIChzdHJidWZfcmVhZF9maWxlKCZzYiwgZ2l0X3BhdGgoIiVzIiwgcGF0aCksIDApIDw9IDApCisJCWdvdG8gZ290X25vdGhpbmc7CisKKwl3aGlsZSAoc2IubGVuICYmIHNiLmJ1ZltzYi5sZW4gLSAxXSA9PSAnXG4nKQorCQlzdHJidWZfc2V0bGVuKCZzYiwgc2IubGVuIC0gMSk7CisJaWYgKCFzYi5sZW4pCisJCWdvdG8gZ290X25vdGhpbmc7CisJaWYgKHN0YXJ0c193aXRoKHNiLmJ1ZiwgInJlZnMvaGVhZHMvIikpCisJCXN0cmJ1Zl9yZW1vdmUoJnNiLDAsIHN0cmxlbigicmVmcy9oZWFkcy8iKSk7CisJZWxzZSBpZiAoc3RhcnRzX3dpdGgoc2IuYnVmLCAicmVmcy8iKSkKKwkJOworCWVsc2UgaWYgKCFnZXRfc2hhMV9oZXgoc2IuYnVmLCBzaGExKSkgeworCQljb25zdCBjaGFyICphYmJyZXY7CisJCWFiYnJldiA9IGZpbmRfdW5pcXVlX2FiYnJldihzaGExLCBERUZBVUxUX0FCQlJFVik7CisJCXN0cmJ1Zl9yZXNldCgmc2IpOworCQlzdHJidWZfYWRkc3RyKCZzYiwgYWJicmV2KTsKKwl9IGVsc2UgaWYgKCFzdHJjbXAoc2IuYnVmLCAiZGV0YWNoZWQgSEVBRCIpKSAvKiByZWJhc2UgKi8KKwkJZ290byBnb3Rfbm90aGluZzsKKwllbHNlCQkJLyogYmlzZWN0ICovCisJCTsKKwlyZXR1cm4gc3RyYnVmX2RldGFjaCgmc2IsIE5VTEwpOworCitnb3Rfbm90aGluZzoKKwlzdHJidWZfcmVsZWFzZSgmc2IpOworCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgZ3JhYl8xc3Rfc3dpdGNoX2NiZGF0YSB7CisJc3RydWN0IHN0cmJ1ZiBidWY7CisJdW5zaWduZWQgY2hhciBuc2hhMVsyMF07Cit9OworCitzdGF0aWMgaW50IGdyYWJfMXN0X3N3aXRjaCh1bnNpZ25lZCBjaGFyICpvc2hhMSwgdW5zaWduZWQgY2hhciAqbnNoYTEsCisJCQkgICBjb25zdCBjaGFyICplbWFpbCwgdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAsIGludCB0eiwKKwkJCSAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZvaWQgKmNiX2RhdGEpCit7CisJc3RydWN0IGdyYWJfMXN0X3N3aXRjaF9jYmRhdGEgKmNiID0gY2JfZGF0YTsKKwljb25zdCBjaGFyICp0YXJnZXQgPSBOVUxMLCAqZW5kOworCisJaWYgKCFzdGFydHNfd2l0aChtZXNzYWdlLCAiY2hlY2tvdXQ6IG1vdmluZyBmcm9tICIpKQorCQlyZXR1cm4gMDsKKwltZXNzYWdlICs9IHN0cmxlbigiY2hlY2tvdXQ6IG1vdmluZyBmcm9tICIpOworCXRhcmdldCA9IHN0cnN0cihtZXNzYWdlLCAiIHRvICIpOworCWlmICghdGFyZ2V0KQorCQlyZXR1cm4gMDsKKwl0YXJnZXQgKz0gc3RybGVuKCIgdG8gIik7CisJc3RyYnVmX3Jlc2V0KCZjYi0+YnVmKTsKKwloYXNoY3B5KGNiLT5uc2hhMSwgbnNoYTEpOworCWZvciAoZW5kID0gdGFyZ2V0OyAqZW5kICYmICplbmQgIT0gJ1xuJzsgZW5kKyspCisJCTsKKwlpZiAoIW1lbWNtcCh0YXJnZXQsICJIRUFEIiwgZW5kIC0gdGFyZ2V0KSkgeworCQkvKiBIRUFEIGlzIHJlbGF0aXZlLiBSZXNvbHZlIGl0IHRvIHRoZSByaWdodCByZWZsb2cgZW50cnkuICovCisJCXN0cmJ1Zl9hZGRzdHIoJmNiLT5idWYsCisJCQkgICAgICBmaW5kX3VuaXF1ZV9hYmJyZXYobnNoYTEsIERFRkFVTFRfQUJCUkVWKSk7CisJCXJldHVybiAxOworCX0KKwlzdHJidWZfYWRkKCZjYi0+YnVmLCB0YXJnZXQsIGVuZCAtIHRhcmdldCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHd0X3N0YXR1c19nZXRfZGV0YWNoZWRfZnJvbShzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgZ3JhYl8xc3Rfc3dpdGNoX2NiZGF0YSBjYjsKKwlzdHJ1Y3QgY29tbWl0ICpjb21taXQ7CisJdW5zaWduZWQgY2hhciBzaGExWzIwXTsKKwljaGFyICpyZWYgPSBOVUxMOworCisJc3RyYnVmX2luaXQoJmNiLmJ1ZiwgMCk7CisJaWYgKGZvcl9lYWNoX3JlZmxvZ19lbnRfcmV2ZXJzZSgiSEVBRCIsIGdyYWJfMXN0X3N3aXRjaCwgJmNiKSA8PSAwKSB7CisJCXN0cmJ1Zl9yZWxlYXNlKCZjYi5idWYpOworCQlyZXR1cm47CisJfQorCisJaWYgKGR3aW1fcmVmKGNiLmJ1Zi5idWYsIGNiLmJ1Zi5sZW4sIHNoYTEsICZyZWYpID09IDEgJiYKKwkgICAgLyogc2hhMSBpcyBhIGNvbW1pdD8gbWF0Y2ggd2l0aG91dCBmdXJ0aGVyIGxvb2t1cCAqLworCSAgICAoIWhhc2hjbXAoY2IubnNoYTEsIHNoYTEpIHx8CisJICAgICAvKiBwZXJoYXBzIHNoYTEgaXMgYSB0YWcsIHRyeSB0byBkZXJlZmVyZW5jZSB0byBhIGNvbW1pdCAqLworCSAgICAgKChjb21taXQgPSBsb29rdXBfY29tbWl0X3JlZmVyZW5jZV9nZW50bHkoc2hhMSwgMSkpICE9IE5VTEwgJiYKKwkgICAgICAhaGFzaGNtcChjYi5uc2hhMSwgY29tbWl0LT5vYmplY3Quc2hhMSkpKSkgeworCQlpbnQgb2ZzOworCQlpZiAoc3RhcnRzX3dpdGgocmVmLCAicmVmcy90YWdzLyIpKQorCQkJb2ZzID0gc3RybGVuKCJyZWZzL3RhZ3MvIik7CisJCWVsc2UgaWYgKHN0YXJ0c193aXRoKHJlZiwgInJlZnMvcmVtb3Rlcy8iKSkKKwkJCW9mcyA9IHN0cmxlbigicmVmcy9yZW1vdGVzLyIpOworCQllbHNlCisJCQlvZnMgPSAwOworCQlzdGF0ZS0+ZGV0YWNoZWRfZnJvbSA9IHhzdHJkdXAocmVmICsgb2ZzKTsKKwl9IGVsc2UKKwkJc3RhdGUtPmRldGFjaGVkX2Zyb20gPQorCQkJeHN0cmR1cChmaW5kX3VuaXF1ZV9hYmJyZXYoY2IubnNoYTEsIERFRkFVTFRfQUJCUkVWKSk7CisJaGFzaGNweShzdGF0ZS0+ZGV0YWNoZWRfc2hhMSwgY2IubnNoYTEpOworCXN0YXRlLT5kZXRhY2hlZF9hdCA9ICFnZXRfc2hhMSgiSEVBRCIsIHNoYTEpICYmCisJCQkgICAgICFoYXNoY21wKHNoYTEsIHN0YXRlLT5kZXRhY2hlZF9zaGExKTsKKworCWZyZWUocmVmKTsKKwlzdHJidWZfcmVsZWFzZSgmY2IuYnVmKTsKK30KKwordm9pZCB3dF9zdGF0dXNfZ2V0X3N0YXRlKHN0cnVjdCB3dF9zdGF0dXNfc3RhdGUgKnN0YXRlLAorCQkJIGludCBnZXRfZGV0YWNoZWRfZnJvbSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwl1bnNpZ25lZCBjaGFyIHNoYTFbMjBdOworCisJaWYgKCFzdGF0KGdpdF9wYXRoX21lcmdlX2hlYWQoKSwgJnN0KSkgeworCQlzdGF0ZS0+bWVyZ2VfaW5fcHJvZ3Jlc3MgPSAxOworCX0gZWxzZSBpZiAoIXN0YXQoZ2l0X3BhdGgoInJlYmFzZS1hcHBseSIpLCAmc3QpKSB7CisJCWlmICghc3RhdChnaXRfcGF0aCgicmViYXNlLWFwcGx5L2FwcGx5aW5nIiksICZzdCkpIHsKKwkJCXN0YXRlLT5hbV9pbl9wcm9ncmVzcyA9IDE7CisJCQlpZiAoIXN0YXQoZ2l0X3BhdGgoInJlYmFzZS1hcHBseS9wYXRjaCIpLCAmc3QpICYmICFzdC5zdF9zaXplKQorCQkJCXN0YXRlLT5hbV9lbXB0eV9wYXRjaCA9IDE7CisJCX0gZWxzZSB7CisJCQlzdGF0ZS0+cmViYXNlX2luX3Byb2dyZXNzID0gMTsKKwkJCXN0YXRlLT5icmFuY2ggPSByZWFkX2FuZF9zdHJpcF9icmFuY2goInJlYmFzZS1hcHBseS9oZWFkLW5hbWUiKTsKKwkJCXN0YXRlLT5vbnRvID0gcmVhZF9hbmRfc3RyaXBfYnJhbmNoKCJyZWJhc2UtYXBwbHkvb250byIpOworCQl9CisJfSBlbHNlIGlmICghc3RhdChnaXRfcGF0aCgicmViYXNlLW1lcmdlIiksICZzdCkpIHsKKwkJaWYgKCFzdGF0KGdpdF9wYXRoKCJyZWJhc2UtbWVyZ2UvaW50ZXJhY3RpdmUiKSwgJnN0KSkKKwkJCXN0YXRlLT5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MgPSAxOworCQllbHNlCisJCQlzdGF0ZS0+cmViYXNlX2luX3Byb2dyZXNzID0gMTsKKwkJc3RhdGUtPmJyYW5jaCA9IHJlYWRfYW5kX3N0cmlwX2JyYW5jaCgicmViYXNlLW1lcmdlL2hlYWQtbmFtZSIpOworCQlzdGF0ZS0+b250byA9IHJlYWRfYW5kX3N0cmlwX2JyYW5jaCgicmViYXNlLW1lcmdlL29udG8iKTsKKwl9IGVsc2UgaWYgKCFzdGF0KGdpdF9wYXRoX2NoZXJyeV9waWNrX2hlYWQoKSwgJnN0KSAmJgorCQkJIWdldF9zaGExKCJDSEVSUllfUElDS19IRUFEIiwgc2hhMSkpIHsKKwkJc3RhdGUtPmNoZXJyeV9waWNrX2luX3Byb2dyZXNzID0gMTsKKwkJaGFzaGNweShzdGF0ZS0+Y2hlcnJ5X3BpY2tfaGVhZF9zaGExLCBzaGExKTsKKwl9CisJaWYgKCFzdGF0KGdpdF9wYXRoKCJCSVNFQ1RfTE9HIiksICZzdCkpIHsKKwkJc3RhdGUtPmJpc2VjdF9pbl9wcm9ncmVzcyA9IDE7CisJCXN0YXRlLT5icmFuY2ggPSByZWFkX2FuZF9zdHJpcF9icmFuY2goIkJJU0VDVF9TVEFSVCIpOworCX0KKwlpZiAoIXN0YXQoZ2l0X3BhdGhfcmV2ZXJ0X2hlYWQoKSwgJnN0KSAmJgorCSAgICAhZ2V0X3NoYTEoIlJFVkVSVF9IRUFEIiwgc2hhMSkpIHsKKwkJc3RhdGUtPnJldmVydF9pbl9wcm9ncmVzcyA9IDE7CisJCWhhc2hjcHkoc3RhdGUtPnJldmVydF9oZWFkX3NoYTEsIHNoYTEpOworCX0KKworCWlmIChnZXRfZGV0YWNoZWRfZnJvbSkKKwkJd3Rfc3RhdHVzX2dldF9kZXRhY2hlZF9mcm9tKHN0YXRlKTsKK30KKworc3RhdGljIHZvaWQgd3Rfc3RhdHVzX3ByaW50X3N0YXRlKHN0cnVjdCB3dF9zdGF0dXMgKnMsCisJCQkJICBzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlICpzdGF0ZSkKK3sKKwljb25zdCBjaGFyICpzdGF0ZV9jb2xvciA9IGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpOworCWlmIChzdGF0ZS0+bWVyZ2VfaW5fcHJvZ3Jlc3MpCisJCXNob3dfbWVyZ2VfaW5fcHJvZ3Jlc3Mocywgc3RhdGUsIHN0YXRlX2NvbG9yKTsKKwllbHNlIGlmIChzdGF0ZS0+YW1faW5fcHJvZ3Jlc3MpCisJCXNob3dfYW1faW5fcHJvZ3Jlc3Mocywgc3RhdGUsIHN0YXRlX2NvbG9yKTsKKwllbHNlIGlmIChzdGF0ZS0+cmViYXNlX2luX3Byb2dyZXNzIHx8IHN0YXRlLT5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MpCisJCXNob3dfcmViYXNlX2luX3Byb2dyZXNzKHMsIHN0YXRlLCBzdGF0ZV9jb2xvcik7CisJZWxzZSBpZiAoc3RhdGUtPmNoZXJyeV9waWNrX2luX3Byb2dyZXNzKQorCQlzaG93X2NoZXJyeV9waWNrX2luX3Byb2dyZXNzKHMsIHN0YXRlLCBzdGF0ZV9jb2xvcik7CisJZWxzZSBpZiAoc3RhdGUtPnJldmVydF9pbl9wcm9ncmVzcykKKwkJc2hvd19yZXZlcnRfaW5fcHJvZ3Jlc3Mocywgc3RhdGUsIHN0YXRlX2NvbG9yKTsKKwlpZiAoc3RhdGUtPmJpc2VjdF9pbl9wcm9ncmVzcykKKwkJc2hvd19iaXNlY3RfaW5fcHJvZ3Jlc3Mocywgc3RhdGUsIHN0YXRlX2NvbG9yKTsKK30KKwordm9pZCB3dF9zdGF0dXNfcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwljb25zdCBjaGFyICpicmFuY2hfY29sb3IgPSBjb2xvcihXVF9TVEFUVVNfT05CUkFOQ0gsIHMpOworCWNvbnN0IGNoYXIgKmJyYW5jaF9zdGF0dXNfY29sb3IgPSBjb2xvcihXVF9TVEFUVVNfSEVBREVSLCBzKTsKKwlzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlIHN0YXRlOworCisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7CisJd3Rfc3RhdHVzX2dldF9zdGF0ZSgmc3RhdGUsCisJCQkgICAgcy0+YnJhbmNoICYmICFzdHJjbXAocy0+YnJhbmNoLCAiSEVBRCIpKTsKKworCWlmIChzLT5icmFuY2gpIHsKKwkJY29uc3QgY2hhciAqb25fd2hhdCA9IF8oIk9uIGJyYW5jaCAiKTsKKwkJY29uc3QgY2hhciAqYnJhbmNoX25hbWUgPSBzLT5icmFuY2g7CisJCWlmIChzdGFydHNfd2l0aChicmFuY2hfbmFtZSwgInJlZnMvaGVhZHMvIikpCisJCQlicmFuY2hfbmFtZSArPSAxMTsKKwkJZWxzZSBpZiAoIXN0cmNtcChicmFuY2hfbmFtZSwgIkhFQUQiKSkgeworCQkJYnJhbmNoX3N0YXR1c19jb2xvciA9IGNvbG9yKFdUX1NUQVRVU19OT0JSQU5DSCwgcyk7CisJCQlpZiAoc3RhdGUucmViYXNlX2luX3Byb2dyZXNzIHx8IHN0YXRlLnJlYmFzZV9pbnRlcmFjdGl2ZV9pbl9wcm9ncmVzcykgeworCQkJCWlmIChzdGF0ZS5yZWJhc2VfaW50ZXJhY3RpdmVfaW5fcHJvZ3Jlc3MpCisJCQkJCW9uX3doYXQgPSBfKCJpbnRlcmFjdGl2ZSByZWJhc2UgaW4gcHJvZ3Jlc3M7IG9udG8gIik7CisJCQkJZWxzZQorCQkJCQlvbl93aGF0ID0gXygicmViYXNlIGluIHByb2dyZXNzOyBvbnRvICIpOworCQkJCWJyYW5jaF9uYW1lID0gc3RhdGUub250bzsKKwkJCX0gZWxzZSBpZiAoc3RhdGUuZGV0YWNoZWRfZnJvbSkgeworCQkJCWJyYW5jaF9uYW1lID0gc3RhdGUuZGV0YWNoZWRfZnJvbTsKKwkJCQlpZiAoc3RhdGUuZGV0YWNoZWRfYXQpCisJCQkJCW9uX3doYXQgPSBfKCJIRUFEIGRldGFjaGVkIGF0ICIpOworCQkJCWVsc2UKKwkJCQkJb25fd2hhdCA9IF8oIkhFQUQgZGV0YWNoZWQgZnJvbSAiKTsKKwkJCX0gZWxzZSB7CisJCQkJYnJhbmNoX25hbWUgPSAiIjsKKwkJCQlvbl93aGF0ID0gXygiTm90IGN1cnJlbnRseSBvbiBhbnkgYnJhbmNoLiIpOworCQkJfQorCQl9CisJCXN0YXR1c19wcmludGYocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksICIlcyIsICIiKTsKKwkJc3RhdHVzX3ByaW50Zl9tb3JlKHMsIGJyYW5jaF9zdGF0dXNfY29sb3IsICIlcyIsIG9uX3doYXQpOworCQlzdGF0dXNfcHJpbnRmX21vcmUocywgYnJhbmNoX2NvbG9yLCAiJXNcbiIsIGJyYW5jaF9uYW1lKTsKKwkJaWYgKCFzLT5pc19pbml0aWFsKQorCQkJd3Rfc3RhdHVzX3ByaW50X3RyYWNraW5nKHMpOworCX0KKworCXd0X3N0YXR1c19wcmludF9zdGF0ZShzLCAmc3RhdGUpOworCWZyZWUoc3RhdGUuYnJhbmNoKTsKKwlmcmVlKHN0YXRlLm9udG8pOworCWZyZWUoc3RhdGUuZGV0YWNoZWRfZnJvbSk7CisKKwlpZiAocy0+aXNfaW5pdGlhbCkgeworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiJXMiLCAiIik7CisJCXN0YXR1c19wcmludGZfbG4ocywgY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyksIF8oIkluaXRpYWwgY29tbWl0IikpOworCQlzdGF0dXNfcHJpbnRmX2xuKHMsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiJXMiLCAiIik7CisJfQorCisJd3Rfc3RhdHVzX3ByaW50X3VwZGF0ZWQocyk7CisJd3Rfc3RhdHVzX3ByaW50X3VubWVyZ2VkKHMpOworCXd0X3N0YXR1c19wcmludF9jaGFuZ2VkKHMpOworCWlmIChzLT5zdWJtb2R1bGVfc3VtbWFyeSAmJgorCSAgICAoIXMtPmlnbm9yZV9zdWJtb2R1bGVfYXJnIHx8CisJICAgICBzdHJjbXAocy0+aWdub3JlX3N1Ym1vZHVsZV9hcmcsICJhbGwiKSkpIHsKKwkJd3Rfc3RhdHVzX3ByaW50X3N1Ym1vZHVsZV9zdW1tYXJ5KHMsIDApOyAgLyogc3RhZ2VkICovCisJCXd0X3N0YXR1c19wcmludF9zdWJtb2R1bGVfc3VtbWFyeShzLCAxKTsgIC8qIHVuc3RhZ2VkICovCisJfQorCWlmIChzLT5zaG93X3VudHJhY2tlZF9maWxlcykgeworCQl3dF9zdGF0dXNfcHJpbnRfb3RoZXIocywgJnMtPnVudHJhY2tlZCwgXygiVW50cmFja2VkIGZpbGVzIiksICJhZGQiKTsKKwkJaWYgKHMtPnNob3dfaWdub3JlZF9maWxlcykKKwkJCXd0X3N0YXR1c19wcmludF9vdGhlcihzLCAmcy0+aWdub3JlZCwgXygiSWdub3JlZCBmaWxlcyIpLCAiYWRkIC1mIik7CisJCWlmIChhZHZpY2Vfc3RhdHVzX3Vfb3B0aW9uICYmIDIwMDAgPCBzLT51bnRyYWNrZWRfaW5fbXMpIHsKKwkJCXN0YXR1c19wcmludGZfbG4ocywgR0lUX0NPTE9SX05PUk1BTCwgIiVzIiwgIiIpOworCQkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLAorCQkJCQkgXygiSXQgdG9vayAlLjJmIHNlY29uZHMgdG8gZW51bWVyYXRlIHVudHJhY2tlZCBmaWxlcy4gJ3N0YXR1cyAtdW5vJ1xuIgorCQkJCQkgICAibWF5IHNwZWVkIGl0IHVwLCBidXQgeW91IGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZm9yZ2V0IHRvIGFkZFxuIgorCQkJCQkgICAibmV3IGZpbGVzIHlvdXJzZWxmIChzZWUgJ2dpdCBoZWxwIHN0YXR1cycpLiIpLAorCQkJCQkgcy0+dW50cmFja2VkX2luX21zIC8gMTAwMC4wKTsKKwkJfQorCX0gZWxzZSBpZiAocy0+Y29tbWl0YWJsZSkKKwkJc3RhdHVzX3ByaW50Zl9sbihzLCBHSVRfQ09MT1JfTk9STUFMLCBfKCJVbnRyYWNrZWQgZmlsZXMgbm90IGxpc3RlZCVzIiksCisJCQlzLT5oaW50cworCQkJPyBfKCIgKHVzZSAtdSBvcHRpb24gdG8gc2hvdyB1bnRyYWNrZWQgZmlsZXMpIikgOiAiIik7CisKKwlpZiAocy0+dmVyYm9zZSkKKwkJd3Rfc3RhdHVzX3ByaW50X3ZlcmJvc2Uocyk7CisJaWYgKCFzLT5jb21taXRhYmxlKSB7CisJCWlmIChzLT5hbWVuZCkKKwkJCXN0YXR1c19wcmludGZfbG4ocywgR0lUX0NPTE9SX05PUk1BTCwgXygiTm8gY2hhbmdlcyIpKTsKKwkJZWxzZSBpZiAocy0+bm93YXJuKQorCQkJOyAvKiBub3RoaW5nICovCisJCWVsc2UgaWYgKHMtPndvcmtkaXJfZGlydHkpIHsKKwkJCWlmIChzLT5oaW50cykKKwkJCQlwcmludGYoXygibm8gY2hhbmdlcyBhZGRlZCB0byBjb21taXQgIgorCQkJCQkgIih1c2UgXCJnaXQgYWRkXCIgYW5kL29yIFwiZ2l0IGNvbW1pdCAtYVwiKVxuIikpOworCQkJZWxzZQorCQkJCXByaW50ZihfKCJubyBjaGFuZ2VzIGFkZGVkIHRvIGNvbW1pdFxuIikpOworCQl9IGVsc2UgaWYgKHMtPnVudHJhY2tlZC5ucikgeworCQkJaWYgKHMtPmhpbnRzKQorCQkJCXByaW50ZihfKCJub3RoaW5nIGFkZGVkIHRvIGNvbW1pdCBidXQgdW50cmFja2VkIGZpbGVzICIKKwkJCQkJICJwcmVzZW50ICh1c2UgXCJnaXQgYWRkXCIgdG8gdHJhY2spXG4iKSk7CisJCQllbHNlCisJCQkJcHJpbnRmKF8oIm5vdGhpbmcgYWRkZWQgdG8gY29tbWl0IGJ1dCB1bnRyYWNrZWQgZmlsZXMgcHJlc2VudFxuIikpOworCQl9IGVsc2UgaWYgKHMtPmlzX2luaXRpYWwpIHsKKwkJCWlmIChzLT5oaW50cykKKwkJCQlwcmludGYoXygibm90aGluZyB0byBjb21taXQgKGNyZWF0ZS9jb3B5IGZpbGVzICIKKwkJCQkJICJhbmQgdXNlIFwiZ2l0IGFkZFwiIHRvIHRyYWNrKVxuIikpOworCQkJZWxzZQorCQkJCXByaW50ZihfKCJub3RoaW5nIHRvIGNvbW1pdFxuIikpOworCQl9IGVsc2UgaWYgKCFzLT5zaG93X3VudHJhY2tlZF9maWxlcykgeworCQkJaWYgKHMtPmhpbnRzKQorCQkJCXByaW50ZihfKCJub3RoaW5nIHRvIGNvbW1pdCAodXNlIC11IHRvIHNob3cgdW50cmFja2VkIGZpbGVzKVxuIikpOworCQkJZWxzZQorCQkJCXByaW50ZihfKCJub3RoaW5nIHRvIGNvbW1pdFxuIikpOworCQl9IGVsc2UKKwkJCXByaW50ZihfKCJub3RoaW5nIHRvIGNvbW1pdCwgd29ya2luZyBkaXJlY3RvcnkgY2xlYW5cbiIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHd0X3Nob3J0c3RhdHVzX3VubWVyZ2VkKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCwKKwkJCSAgIHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJc3RydWN0IHd0X3N0YXR1c19jaGFuZ2VfZGF0YSAqZCA9IGl0LT51dGlsOworCWNvbnN0IGNoYXIgKmhvdyA9ICI/PyI7CisKKwlzd2l0Y2ggKGQtPnN0YWdlbWFzaykgeworCWNhc2UgMTogaG93ID0gIkREIjsgYnJlYWs7IC8qIGJvdGggZGVsZXRlZCAqLworCWNhc2UgMjogaG93ID0gIkFVIjsgYnJlYWs7IC8qIGFkZGVkIGJ5IHVzICovCisJY2FzZSAzOiBob3cgPSAiVUQiOyBicmVhazsgLyogZGVsZXRlZCBieSB0aGVtICovCisJY2FzZSA0OiBob3cgPSAiVUEiOyBicmVhazsgLyogYWRkZWQgYnkgdGhlbSAqLworCWNhc2UgNTogaG93ID0gIkRVIjsgYnJlYWs7IC8qIGRlbGV0ZWQgYnkgdXMgKi8KKwljYXNlIDY6IGhvdyA9ICJBQSI7IGJyZWFrOyAvKiBib3RoIGFkZGVkICovCisJY2FzZSA3OiBob3cgPSAiVVUiOyBicmVhazsgLyogYm90aCBtb2RpZmllZCAqLworCX0KKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfVU5NRVJHRUQsIHMpLCAiJXMiLCBob3cpOworCWlmIChzLT5udWxsX3Rlcm1pbmF0aW9uKSB7CisJCWZwcmludGYoc3Rkb3V0LCAiICVzJWMiLCBpdC0+c3RyaW5nLCAwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIG9uZWJ1ZiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpvbmU7CisJCW9uZSA9IHF1b3RlX3BhdGgoaXQtPnN0cmluZywgcy0+cHJlZml4LCAmb25lYnVmKTsKKwkJcHJpbnRmKCIgJXNcbiIsIG9uZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOworCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfc3RhdHVzKHN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdCwKKwkJCSBzdHJ1Y3Qgd3Rfc3RhdHVzICpzKQoreworCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQgPSBpdC0+dXRpbDsKKworCWlmIChkLT5pbmRleF9zdGF0dXMpCisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19VUERBVEVELCBzKSwgIiVjIiwgZC0+aW5kZXhfc3RhdHVzKTsKKwllbHNlCisJCXB1dGNoYXIoJyAnKTsKKwlpZiAoZC0+d29ya3RyZWVfc3RhdHVzKQorCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBjb2xvcihXVF9TVEFUVVNfQ0hBTkdFRCwgcyksICIlYyIsIGQtPndvcmt0cmVlX3N0YXR1cyk7CisJZWxzZQorCQlwdXRjaGFyKCcgJyk7CisJcHV0Y2hhcignICcpOworCWlmIChzLT5udWxsX3Rlcm1pbmF0aW9uKSB7CisJCWZwcmludGYoc3Rkb3V0LCAiJXMlYyIsIGl0LT5zdHJpbmcsIDApOworCQlpZiAoZC0+aGVhZF9wYXRoKQorCQkJZnByaW50ZihzdGRvdXQsICIlcyVjIiwgZC0+aGVhZF9wYXRoLCAwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc3RyYnVmIG9uZWJ1ZiA9IFNUUkJVRl9JTklUOworCQljb25zdCBjaGFyICpvbmU7CisJCWlmIChkLT5oZWFkX3BhdGgpIHsKKwkJCW9uZSA9IHF1b3RlX3BhdGgoZC0+aGVhZF9wYXRoLCBzLT5wcmVmaXgsICZvbmVidWYpOworCQkJaWYgKCpvbmUgIT0gJyInICYmIHN0cmNocihvbmUsICcgJykgIT0gTlVMTCkgeworCQkJCXB1dGNoYXIoJyInKTsKKwkJCQlzdHJidWZfYWRkY2goJm9uZWJ1ZiwgJyInKTsKKwkJCQlvbmUgPSBvbmVidWYuYnVmOworCQkJfQorCQkJcHJpbnRmKCIlcyAtPiAiLCBvbmUpOworCQkJc3RyYnVmX3JlbGVhc2UoJm9uZWJ1Zik7CisJCX0KKwkJb25lID0gcXVvdGVfcGF0aChpdC0+c3RyaW5nLCBzLT5wcmVmaXgsICZvbmVidWYpOworCQlpZiAoKm9uZSAhPSAnIicgJiYgc3RyY2hyKG9uZSwgJyAnKSAhPSBOVUxMKSB7CisJCQlwdXRjaGFyKCciJyk7CisJCQlzdHJidWZfYWRkY2goJm9uZWJ1ZiwgJyInKTsKKwkJCW9uZSA9IG9uZWJ1Zi5idWY7CisJCX0KKwkJcHJpbnRmKCIlc1xuIiwgb25lKTsKKwkJc3RyYnVmX3JlbGVhc2UoJm9uZWJ1Zik7CisJfQorfQorCitzdGF0aWMgdm9pZCB3dF9zaG9ydHN0YXR1c19vdGhlcihzdHJ1Y3Qgc3RyaW5nX2xpc3RfaXRlbSAqaXQsCisJCQkJIHN0cnVjdCB3dF9zdGF0dXMgKnMsIGNvbnN0IGNoYXIgKnNpZ24pCit7CisJaWYgKHMtPm51bGxfdGVybWluYXRpb24pIHsKKwkJZnByaW50ZihzdGRvdXQsICIlcyAlcyVjIiwgc2lnbiwgaXQtPnN0cmluZywgMCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHN0cmJ1ZiBvbmVidWYgPSBTVFJCVUZfSU5JVDsKKwkJY29uc3QgY2hhciAqb25lOworCQlvbmUgPSBxdW90ZV9wYXRoKGl0LT5zdHJpbmcsIHMtPnByZWZpeCwgJm9uZWJ1Zik7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19VTlRSQUNLRUQsIHMpLCAiJXMiLCBzaWduKTsKKwkJcHJpbnRmKCIgJXNcbiIsIG9uZSk7CisJCXN0cmJ1Zl9yZWxlYXNlKCZvbmVidWYpOworCX0KK30KKworc3RhdGljIHZvaWQgd3Rfc2hvcnRzdGF0dXNfcHJpbnRfdHJhY2tpbmcoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzdHJ1Y3QgYnJhbmNoICpicmFuY2g7CisJY29uc3QgY2hhciAqaGVhZGVyX2NvbG9yID0gY29sb3IoV1RfU1RBVFVTX0hFQURFUiwgcyk7CisJY29uc3QgY2hhciAqYnJhbmNoX2NvbG9yX2xvY2FsID0gY29sb3IoV1RfU1RBVFVTX0xPQ0FMX0JSQU5DSCwgcyk7CisJY29uc3QgY2hhciAqYnJhbmNoX2NvbG9yX3JlbW90ZSA9IGNvbG9yKFdUX1NUQVRVU19SRU1PVEVfQlJBTkNILCBzKTsKKworCWNvbnN0IGNoYXIgKmJhc2U7CisJY29uc3QgY2hhciAqYnJhbmNoX25hbWU7CisJaW50IG51bV9vdXJzLCBudW1fdGhlaXJzOworCWludCB1cHN0cmVhbV9pc19nb25lID0gMDsKKworCWNvbG9yX2ZwcmludGYocy0+ZnAsIGNvbG9yKFdUX1NUQVRVU19IRUFERVIsIHMpLCAiIyMgIik7CisKKwlpZiAoIXMtPmJyYW5jaCkKKwkJcmV0dXJuOworCWJyYW5jaF9uYW1lID0gcy0+YnJhbmNoOworCisJaWYgKHN0YXJ0c193aXRoKGJyYW5jaF9uYW1lLCAicmVmcy9oZWFkcy8iKSkKKwkJYnJhbmNoX25hbWUgKz0gMTE7CisJZWxzZSBpZiAoIXN0cmNtcChicmFuY2hfbmFtZSwgIkhFQUQiKSkgeworCQlicmFuY2hfbmFtZSA9IF8oIkhFQUQgKG5vIGJyYW5jaCkiKTsKKwkJYnJhbmNoX2NvbG9yX2xvY2FsID0gY29sb3IoV1RfU1RBVFVTX05PQlJBTkNILCBzKTsKKwl9CisKKwlicmFuY2ggPSBicmFuY2hfZ2V0KHMtPmJyYW5jaCArIDExKTsKKwlpZiAocy0+aXNfaW5pdGlhbCkKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCBfKCJJbml0aWFsIGNvbW1pdCBvbiAiKSk7CisKKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBicmFuY2hfY29sb3JfbG9jYWwsICIlcyIsIGJyYW5jaF9uYW1lKTsKKworCWlmIChzdGF0X3RyYWNraW5nX2luZm8oYnJhbmNoLCAmbnVtX291cnMsICZudW1fdGhlaXJzLCAmYmFzZSkgPCAwKSB7CisJCWlmICghYmFzZSkgeworCQkJZnB1dGMocy0+bnVsbF90ZXJtaW5hdGlvbiA/ICdcMCcgOiAnXG4nLCBzLT5mcCk7CisJCQlyZXR1cm47CisJCX0KKworCQl1cHN0cmVhbV9pc19nb25lID0gMTsKKwl9CisKKwliYXNlID0gc2hvcnRlbl91bmFtYmlndW91c19yZWYoYmFzZSwgMCk7CisJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCAiLi4uIik7CisJY29sb3JfZnByaW50ZihzLT5mcCwgYnJhbmNoX2NvbG9yX3JlbW90ZSwgIiVzIiwgYmFzZSk7CisJZnJlZSgoY2hhciAqKWJhc2UpOworCisJaWYgKCF1cHN0cmVhbV9pc19nb25lICYmICFudW1fb3VycyAmJiAhbnVtX3RoZWlycykgeworCQlmcHV0YyhzLT5udWxsX3Rlcm1pbmF0aW9uID8gJ1wwJyA6ICdcbicsIHMtPmZwKTsKKwkJcmV0dXJuOworCX0KKworI2RlZmluZSBMQUJFTChzdHJpbmcpIChzLT5ub19nZXR0ZXh0ID8gKHN0cmluZykgOiBfKHN0cmluZykpCisKKwljb2xvcl9mcHJpbnRmKHMtPmZwLCBoZWFkZXJfY29sb3IsICIgWyIpOworCWlmICh1cHN0cmVhbV9pc19nb25lKSB7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgTEFCRUwoTl8oImdvbmUiKSkpOworCX0gZWxzZSBpZiAoIW51bV9vdXJzKSB7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgTEFCRUwoTl8oImJlaGluZCAiKSkpOworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBicmFuY2hfY29sb3JfcmVtb3RlLCAiJWQiLCBudW1fdGhlaXJzKTsKKwl9IGVsc2UgaWYgKCFudW1fdGhlaXJzKSB7CisJCWNvbG9yX2ZwcmludGYocy0+ZnAsIGhlYWRlcl9jb2xvciwgTEFCRUwoTl8oKCJhaGVhZCAiKSkpKTsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgYnJhbmNoX2NvbG9yX2xvY2FsLCAiJWQiLCBudW1fb3Vycyk7CisJfSBlbHNlIHsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCBMQUJFTChOXygoImFoZWFkICIpKSkpOworCQljb2xvcl9mcHJpbnRmKHMtPmZwLCBicmFuY2hfY29sb3JfbG9jYWwsICIlZCIsIG51bV9vdXJzKTsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCAiLCAlcyIsIExBQkVMKE5fKCJiZWhpbmQgIikpKTsKKwkJY29sb3JfZnByaW50ZihzLT5mcCwgYnJhbmNoX2NvbG9yX3JlbW90ZSwgIiVkIiwgbnVtX3RoZWlycyk7CisJfQorCisJY29sb3JfZnByaW50ZihzLT5mcCwgaGVhZGVyX2NvbG9yLCAiXSIpOworCWZwdXRjKHMtPm51bGxfdGVybWluYXRpb24gPyAnXDAnIDogJ1xuJywgcy0+ZnApOworfQorCit2b2lkIHd0X3Nob3J0c3RhdHVzX3ByaW50KHN0cnVjdCB3dF9zdGF0dXMgKnMpCit7CisJaW50IGk7CisKKwlpZiAocy0+c2hvd19icmFuY2gpCisJCXd0X3Nob3J0c3RhdHVzX3ByaW50X3RyYWNraW5nKHMpOworCisJZm9yIChpID0gMDsgaSA8IHMtPmNoYW5nZS5ucjsgaSsrKSB7CisJCXN0cnVjdCB3dF9zdGF0dXNfY2hhbmdlX2RhdGEgKmQ7CisJCXN0cnVjdCBzdHJpbmdfbGlzdF9pdGVtICppdDsKKworCQlpdCA9ICYocy0+Y2hhbmdlLml0ZW1zW2ldKTsKKwkJZCA9IGl0LT51dGlsOworCQlpZiAoZC0+c3RhZ2VtYXNrKQorCQkJd3Rfc2hvcnRzdGF0dXNfdW5tZXJnZWQoaXQsIHMpOworCQllbHNlCisJCQl3dF9zaG9ydHN0YXR1c19zdGF0dXMoaXQsIHMpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgcy0+dW50cmFja2VkLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCisJCWl0ID0gJihzLT51bnRyYWNrZWQuaXRlbXNbaV0pOworCQl3dF9zaG9ydHN0YXR1c19vdGhlcihpdCwgcywgIj8/Iik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBzLT5pZ25vcmVkLm5yOyBpKyspIHsKKwkJc3RydWN0IHN0cmluZ19saXN0X2l0ZW0gKml0OworCisJCWl0ID0gJihzLT5pZ25vcmVkLml0ZW1zW2ldKTsKKwkJd3Rfc2hvcnRzdGF0dXNfb3RoZXIoaXQsIHMsICIhISIpOworCX0KK30KKwordm9pZCB3dF9wb3JjZWxhaW5fcHJpbnQoc3RydWN0IHd0X3N0YXR1cyAqcykKK3sKKwlzLT51c2VfY29sb3IgPSAwOworCXMtPnJlbGF0aXZlX3BhdGhzID0gMDsKKwlzLT5wcmVmaXggPSBOVUxMOworCXMtPm5vX2dldHRleHQgPSAxOworCXd0X3Nob3J0c3RhdHVzX3ByaW50KHMpOworfQpkaWZmIC0tZ2l0IGEvd3Qtc3RhdHVzLmggYi93dC1zdGF0dXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWIzYjc0Ci0tLSAvZGV2L251bGwKKysrIGIvd3Qtc3RhdHVzLmgKQEAgLTAsMCArMSwxMTIgQEAKKyNpZm5kZWYgU1RBVFVTX0gKKyNkZWZpbmUgU1RBVFVTX0gKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAic3RyaW5nLWxpc3QuaCIKKyNpbmNsdWRlICJjb2xvci5oIgorI2luY2x1ZGUgInBhdGhzcGVjLmgiCisKK2VudW0gY29sb3Jfd3Rfc3RhdHVzIHsKKwlXVF9TVEFUVVNfSEVBREVSID0gMCwKKwlXVF9TVEFUVVNfVVBEQVRFRCwKKwlXVF9TVEFUVVNfQ0hBTkdFRCwKKwlXVF9TVEFUVVNfVU5UUkFDS0VELAorCVdUX1NUQVRVU19OT0JSQU5DSCwKKwlXVF9TVEFUVVNfVU5NRVJHRUQsCisJV1RfU1RBVFVTX0xPQ0FMX0JSQU5DSCwKKwlXVF9TVEFUVVNfUkVNT1RFX0JSQU5DSCwKKwlXVF9TVEFUVVNfT05CUkFOQ0gsCisJV1RfU1RBVFVTX01BWFNMT1QKK307CisKK2VudW0gdW50cmFja2VkX3N0YXR1c190eXBlIHsKKwlTSE9XX05PX1VOVFJBQ0tFRF9GSUxFUywKKwlTSE9XX05PUk1BTF9VTlRSQUNLRURfRklMRVMsCisJU0hPV19BTExfVU5UUkFDS0VEX0ZJTEVTCit9OworCisvKiBmcm9tIHdoZXJlIGRvZXMgdGhpcyBjb21taXQgb3JpZ2luYXRlICovCitlbnVtIGNvbW1pdF93aGVuY2UgeworCUZST01fQ09NTUlULCAgICAgLyogbm9ybWFsICovCisJRlJPTV9NRVJHRSwgICAgICAvKiBjb21taXQgY2FtZSBmcm9tIG1lcmdlICovCisJRlJPTV9DSEVSUllfUElDSyAvKiBjb21taXQgY2FtZSBmcm9tIGNoZXJyeS1waWNrICovCit9OworCitzdHJ1Y3Qgd3Rfc3RhdHVzX2NoYW5nZV9kYXRhIHsKKwlpbnQgd29ya3RyZWVfc3RhdHVzOworCWludCBpbmRleF9zdGF0dXM7CisJaW50IHN0YWdlbWFzazsKKwljaGFyICpoZWFkX3BhdGg7CisJdW5zaWduZWQgZGlydHlfc3VibW9kdWxlICAgICAgIDogMjsKKwl1bnNpZ25lZCBuZXdfc3VibW9kdWxlX2NvbW1pdHMgOiAxOworfTsKKworc3RydWN0IHd0X3N0YXR1cyB7CisJaW50IGlzX2luaXRpYWw7CisJY2hhciAqYnJhbmNoOworCWNvbnN0IGNoYXIgKnJlZmVyZW5jZTsKKwlzdHJ1Y3QgcGF0aHNwZWMgcGF0aHNwZWM7CisJaW50IHZlcmJvc2U7CisJaW50IGFtZW5kOworCWVudW0gY29tbWl0X3doZW5jZSB3aGVuY2U7CisJaW50IG5vd2FybjsKKwlpbnQgdXNlX2NvbG9yOworCWludCBub19nZXR0ZXh0OworCWludCBkaXNwbGF5X2NvbW1lbnRfcHJlZml4OworCWludCByZWxhdGl2ZV9wYXRoczsKKwlpbnQgc3VibW9kdWxlX3N1bW1hcnk7CisJaW50IHNob3dfaWdub3JlZF9maWxlczsKKwllbnVtIHVudHJhY2tlZF9zdGF0dXNfdHlwZSBzaG93X3VudHJhY2tlZF9maWxlczsKKwljb25zdCBjaGFyICppZ25vcmVfc3VibW9kdWxlX2FyZzsKKwljaGFyIGNvbG9yX3BhbGV0dGVbV1RfU1RBVFVTX01BWFNMT1RdW0NPTE9SX01BWExFTl07CisJdW5zaWduZWQgY29sb3B0czsKKwlpbnQgbnVsbF90ZXJtaW5hdGlvbjsKKwlpbnQgc2hvd19icmFuY2g7CisJaW50IGhpbnRzOworCisJLyogVGhlc2UgYXJlIGNvbXB1dGVkIGR1cmluZyBwcm9jZXNzaW5nIG9mIHRoZSBpbmRpdmlkdWFsIHNlY3Rpb25zICovCisJaW50IGNvbW1pdGFibGU7CisJaW50IHdvcmtkaXJfZGlydHk7CisJY29uc3QgY2hhciAqaW5kZXhfZmlsZTsKKwlGSUxFICpmcDsKKwljb25zdCBjaGFyICpwcmVmaXg7CisJc3RydWN0IHN0cmluZ19saXN0IGNoYW5nZTsKKwlzdHJ1Y3Qgc3RyaW5nX2xpc3QgdW50cmFja2VkOworCXN0cnVjdCBzdHJpbmdfbGlzdCBpZ25vcmVkOworCXVpbnQzMl90IHVudHJhY2tlZF9pbl9tczsKK307CisKK3N0cnVjdCB3dF9zdGF0dXNfc3RhdGUgeworCWludCBtZXJnZV9pbl9wcm9ncmVzczsKKwlpbnQgYW1faW5fcHJvZ3Jlc3M7CisJaW50IGFtX2VtcHR5X3BhdGNoOworCWludCByZWJhc2VfaW5fcHJvZ3Jlc3M7CisJaW50IHJlYmFzZV9pbnRlcmFjdGl2ZV9pbl9wcm9ncmVzczsKKwlpbnQgY2hlcnJ5X3BpY2tfaW5fcHJvZ3Jlc3M7CisJaW50IGJpc2VjdF9pbl9wcm9ncmVzczsKKwlpbnQgcmV2ZXJ0X2luX3Byb2dyZXNzOworCWludCBkZXRhY2hlZF9hdDsKKwljaGFyICpicmFuY2g7CisJY2hhciAqb250bzsKKwljaGFyICpkZXRhY2hlZF9mcm9tOworCXVuc2lnbmVkIGNoYXIgZGV0YWNoZWRfc2hhMVsyMF07CisJdW5zaWduZWQgY2hhciByZXZlcnRfaGVhZF9zaGExWzIwXTsKKwl1bnNpZ25lZCBjaGFyIGNoZXJyeV9waWNrX2hlYWRfc2hhMVsyMF07Cit9OworCit2b2lkIHd0X3N0YXR1c190cnVuY2F0ZV9tZXNzYWdlX2F0X2N1dF9saW5lKHN0cnVjdCBzdHJidWYgKik7Cit2b2lkIHd0X3N0YXR1c19hZGRfY3V0X2xpbmUoRklMRSAqZnApOwordm9pZCB3dF9zdGF0dXNfcHJlcGFyZShzdHJ1Y3Qgd3Rfc3RhdHVzICpzKTsKK3ZvaWQgd3Rfc3RhdHVzX3ByaW50KHN0cnVjdCB3dF9zdGF0dXMgKnMpOwordm9pZCB3dF9zdGF0dXNfY29sbGVjdChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKTsKK3ZvaWQgd3Rfc3RhdHVzX2dldF9zdGF0ZShzdHJ1Y3Qgd3Rfc3RhdHVzX3N0YXRlICpzdGF0ZSwgaW50IGdldF9kZXRhY2hlZF9mcm9tKTsKKwordm9pZCB3dF9zaG9ydHN0YXR1c19wcmludChzdHJ1Y3Qgd3Rfc3RhdHVzICpzKTsKK3ZvaWQgd3RfcG9yY2VsYWluX3ByaW50KHN0cnVjdCB3dF9zdGF0dXMgKnMpOworCitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQordm9pZCBzdGF0dXNfcHJpbnRmX2xuKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQordm9pZCBzdGF0dXNfcHJpbnRmKHN0cnVjdCB3dF9zdGF0dXMgKnMsIGNvbnN0IGNoYXIgKmNvbG9yLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKKyNlbmRpZiAvKiBTVEFUVVNfSCAqLwpkaWZmIC0tZ2l0IGEveGRpZmYtaW50ZXJmYWNlLmMgYi94ZGlmZi1pbnRlcmZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjY3YzFjCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYtaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwzMjIgQEAKKyNpbmNsdWRlICJjYWNoZS5oIgorI2luY2x1ZGUgInhkaWZmLWludGVyZmFjZS5oIgorI2luY2x1ZGUgInhkaWZmL3h0eXBlcy5oIgorI2luY2x1ZGUgInhkaWZmL3hkaWZmaS5oIgorI2luY2x1ZGUgInhkaWZmL3hlbWl0LmgiCisjaW5jbHVkZSAieGRpZmYveG1hY3Jvcy5oIgorCitzdHJ1Y3QgeGRpZmZfZW1pdF9zdGF0ZSB7CisJeGRpZmZfZW1pdF9jb25zdW1lX2ZuIGNvbnN1bWU7CisJdm9pZCAqY29uc3VtZV9jYWxsYmFja19kYXRhOworCXN0cnVjdCBzdHJidWYgcmVtYWluZGVyOworfTsKKworc3RhdGljIGludCBwYXJzZV9udW0oY2hhciAqKmNwX3AsIGludCAqbnVtX3ApCit7CisJY2hhciAqY3AgPSAqY3BfcDsKKwlpbnQgbnVtID0gMDsKKworCXdoaWxlICgnMCcgPD0gKmNwICYmICpjcCA8PSAnOScpCisJCW51bSA9IG51bSAqIDEwICsgKmNwKysgLSAnMCc7CisJaWYgKCEoY3AgLSAqY3BfcCkpCisJCXJldHVybiAtMTsKKwkqY3BfcCA9IGNwOworCSpudW1fcCA9IG51bTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBhcnNlX2h1bmtfaGVhZGVyKGNoYXIgKmxpbmUsIGludCBsZW4sCisJCSAgICAgIGludCAqb2IsIGludCAqb24sCisJCSAgICAgIGludCAqbmIsIGludCAqbm4pCit7CisJY2hhciAqY3A7CisJY3AgPSBsaW5lICsgNDsKKwlpZiAocGFyc2VfbnVtKCZjcCwgb2IpKSB7CisJYmFkX2xpbmU6CisJCXJldHVybiBlcnJvcigibWFsZm9ybWVkIGRpZmYgb3V0cHV0OiAlcyIsIGxpbmUpOworCX0KKwlpZiAoKmNwID09ICcsJykgeworCQljcCsrOworCQlpZiAocGFyc2VfbnVtKCZjcCwgb24pKQorCQkJZ290byBiYWRfbGluZTsKKwl9CisJZWxzZQorCQkqb24gPSAxOworCWlmICgqY3ArKyAhPSAnICcgfHwgKmNwKysgIT0gJysnKQorCQlnb3RvIGJhZF9saW5lOworCWlmIChwYXJzZV9udW0oJmNwLCBuYikpCisJCWdvdG8gYmFkX2xpbmU7CisJaWYgKCpjcCA9PSAnLCcpIHsKKwkJY3ArKzsKKwkJaWYgKHBhcnNlX251bSgmY3AsIG5uKSkKKwkJCWdvdG8gYmFkX2xpbmU7CisJfQorCWVsc2UKKwkJKm5uID0gMTsKKwlyZXR1cm4gLSEhbWVtY21wKGNwLCAiIEBAIiwgMyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbnN1bWVfb25lKHZvaWQgKnByaXZfLCBjaGFyICpzLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IHhkaWZmX2VtaXRfc3RhdGUgKnByaXYgPSBwcml2XzsKKwljaGFyICplcDsKKwl3aGlsZSAoc2l6ZSkgeworCQl1bnNpZ25lZCBsb25nIHRoaXNfc2l6ZTsKKwkJZXAgPSBtZW1jaHIocywgJ1xuJywgc2l6ZSk7CisJCXRoaXNfc2l6ZSA9IChlcCA9PSBOVUxMKSA/IHNpemUgOiAoZXAgLSBzICsgMSk7CisJCXByaXYtPmNvbnN1bWUocHJpdi0+Y29uc3VtZV9jYWxsYmFja19kYXRhLCBzLCB0aGlzX3NpemUpOworCQlzaXplIC09IHRoaXNfc2l6ZTsKKwkJcyArPSB0aGlzX3NpemU7CisJfQorfQorCitzdGF0aWMgaW50IHhkaWZmX291dGYodm9pZCAqcHJpdl8sIG1tYnVmZmVyX3QgKm1iLCBpbnQgbmJ1ZikKK3sKKwlzdHJ1Y3QgeGRpZmZfZW1pdF9zdGF0ZSAqcHJpdiA9IHByaXZfOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5idWY7IGkrKykgeworCQlpZiAobWJbaV0ucHRyW21iW2ldLnNpemUtMV0gIT0gJ1xuJykgeworCQkJLyogSW5jb21wbGV0ZSBsaW5lICovCisJCQlzdHJidWZfYWRkKCZwcml2LT5yZW1haW5kZXIsIG1iW2ldLnB0ciwgbWJbaV0uc2l6ZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIHdlIGhhdmUgYSBjb21wbGV0ZSBsaW5lICovCisJCWlmICghcHJpdi0+cmVtYWluZGVyLmxlbikgeworCQkJY29uc3VtZV9vbmUocHJpdiwgbWJbaV0ucHRyLCBtYltpXS5zaXplKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN0cmJ1Zl9hZGQoJnByaXYtPnJlbWFpbmRlciwgbWJbaV0ucHRyLCBtYltpXS5zaXplKTsKKwkJY29uc3VtZV9vbmUocHJpdiwgcHJpdi0+cmVtYWluZGVyLmJ1ZiwgcHJpdi0+cmVtYWluZGVyLmxlbik7CisJCXN0cmJ1Zl9yZXNldCgmcHJpdi0+cmVtYWluZGVyKTsKKwl9CisJaWYgKHByaXYtPnJlbWFpbmRlci5sZW4pIHsKKwkJY29uc3VtZV9vbmUocHJpdiwgcHJpdi0+cmVtYWluZGVyLmJ1ZiwgcHJpdi0+cmVtYWluZGVyLmxlbik7CisJCXN0cmJ1Zl9yZXNldCgmcHJpdi0+cmVtYWluZGVyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUcmltIGRvd24gY29tbW9uIHN1YnN0cmluZyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXJzLAorICogYnV0IGxlYXZlIGF0IGxlYXN0IGN0eCBsaW5lcyBhdCB0aGUgZW5kLgorICovCitzdGF0aWMgdm9pZCB0cmltX2NvbW1vbl90YWlsKG1tZmlsZV90ICphLCBtbWZpbGVfdCAqYiwgbG9uZyBjdHgpCit7CisJY29uc3QgaW50IGJsayA9IDEwMjQ7CisJbG9uZyB0cmltbWVkID0gMCwgcmVjb3ZlcmVkID0gMDsKKwljaGFyICphcCA9IGEtPnB0ciArIGEtPnNpemU7CisJY2hhciAqYnAgPSBiLT5wdHIgKyBiLT5zaXplOworCWxvbmcgc21hbGxlciA9IChhLT5zaXplIDwgYi0+c2l6ZSkgPyBhLT5zaXplIDogYi0+c2l6ZTsKKworCWlmIChjdHgpCisJCXJldHVybjsKKworCXdoaWxlIChibGsgKyB0cmltbWVkIDw9IHNtYWxsZXIgJiYgIW1lbWNtcChhcCAtIGJsaywgYnAgLSBibGssIGJsaykpIHsKKwkJdHJpbW1lZCArPSBibGs7CisJCWFwIC09IGJsazsKKwkJYnAgLT0gYmxrOworCX0KKworCXdoaWxlIChyZWNvdmVyZWQgPCB0cmltbWVkKQorCQlpZiAoYXBbcmVjb3ZlcmVkKytdID09ICdcbicpCisJCQlicmVhazsKKwlhLT5zaXplIC09IHRyaW1tZWQgLSByZWNvdmVyZWQ7CisJYi0+c2l6ZSAtPSB0cmltbWVkIC0gcmVjb3ZlcmVkOworfQorCitpbnQgeGRpX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcsIHhkZW1pdGNiX3QgKnhlY2IpCit7CisJbW1maWxlX3QgYSA9ICptZjE7CisJbW1maWxlX3QgYiA9ICptZjI7CisKKwlpZiAobWYxLT5zaXplID4gTUFYX1hESUZGX1NJWkUgfHwgbWYyLT5zaXplID4gTUFYX1hESUZGX1NJWkUpCisJCXJldHVybiAtMTsKKworCXRyaW1fY29tbW9uX3RhaWwoJmEsICZiLCB4ZWNmZy0+Y3R4bGVuKTsKKworCXJldHVybiB4ZGxfZGlmZigmYSwgJmIsIHhwcCwgeGVjZmcsIHhlY2IpOworfQorCitpbnQgeGRpX2RpZmZfb3V0ZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLAorCQkgIHhkaWZmX2VtaXRfY29uc3VtZV9mbiBmbiwgdm9pZCAqY29uc3VtZV9jYWxsYmFja19kYXRhLAorCQkgIHhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKQoreworCWludCByZXQ7CisJc3RydWN0IHhkaWZmX2VtaXRfc3RhdGUgc3RhdGU7CisJeGRlbWl0Y2JfdCBlY2I7CisKKwltZW1zZXQoJnN0YXRlLCAwLCBzaXplb2Yoc3RhdGUpKTsKKwlzdGF0ZS5jb25zdW1lID0gZm47CisJc3RhdGUuY29uc3VtZV9jYWxsYmFja19kYXRhID0gY29uc3VtZV9jYWxsYmFja19kYXRhOworCW1lbXNldCgmZWNiLCAwLCBzaXplb2YoZWNiKSk7CisJZWNiLm91dGYgPSB4ZGlmZl9vdXRmOworCWVjYi5wcml2ID0gJnN0YXRlOworCXN0cmJ1Zl9pbml0KCZzdGF0ZS5yZW1haW5kZXIsIDApOworCXJldCA9IHhkaV9kaWZmKG1mMSwgbWYyLCB4cHAsIHhlY2ZnLCAmZWNiKTsKKwlzdHJidWZfcmVsZWFzZSgmc3RhdGUucmVtYWluZGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmVhZF9tbWZpbGUobW1maWxlX3QgKnB0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisJRklMRSAqZjsKKwlzaXplX3Qgc3o7CisKKwlpZiAoc3RhdChmaWxlbmFtZSwgJnN0KSkKKwkJcmV0dXJuIGVycm9yKCJDb3VsZCBub3Qgc3RhdCAlcyIsIGZpbGVuYW1lKTsKKwlpZiAoKGYgPSBmb3BlbihmaWxlbmFtZSwgInJiIikpID09IE5VTEwpCisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IG9wZW4gJXMiLCBmaWxlbmFtZSk7CisJc3ogPSB4c2l6ZV90KHN0LnN0X3NpemUpOworCXB0ci0+cHRyID0geG1hbGxvYyhzeiA/IHN6IDogMSk7CisJaWYgKHN6ICYmIGZyZWFkKHB0ci0+cHRyLCBzeiwgMSwgZikgIT0gMSkgeworCQlmY2xvc2UoZik7CisJCXJldHVybiBlcnJvcigiQ291bGQgbm90IHJlYWQgJXMiLCBmaWxlbmFtZSk7CisJfQorCWZjbG9zZShmKTsKKwlwdHItPnNpemUgPSBzejsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZWFkX21tYmxvYihtbWZpbGVfdCAqcHRyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpzaGExKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwllbnVtIG9iamVjdF90eXBlIHR5cGU7CisKKwlpZiAoIWhhc2hjbXAoc2hhMSwgbnVsbF9zaGExKSkgeworCQlwdHItPnB0ciA9IHhzdHJkdXAoIiIpOworCQlwdHItPnNpemUgPSAwOworCQlyZXR1cm47CisJfQorCisJcHRyLT5wdHIgPSByZWFkX3NoYTFfZmlsZShzaGExLCAmdHlwZSwgJnNpemUpOworCWlmICghcHRyLT5wdHIgfHwgdHlwZSAhPSBPQkpfQkxPQikKKwkJZGllKCJ1bmFibGUgdG8gcmVhZCBibG9iIG9iamVjdCAlcyIsIHNoYTFfdG9faGV4KHNoYTEpKTsKKwlwdHItPnNpemUgPSBzaXplOworfQorCisjZGVmaW5lIEZJUlNUX0ZFV19CWVRFUyA4MDAwCitpbnQgYnVmZmVyX2lzX2JpbmFyeShjb25zdCBjaGFyICpwdHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpZiAoRklSU1RfRkVXX0JZVEVTIDwgc2l6ZSkKKwkJc2l6ZSA9IEZJUlNUX0ZFV19CWVRFUzsKKwlyZXR1cm4gISFtZW1jaHIocHRyLCAwLCBzaXplKTsKK30KKworc3RydWN0IGZmX3JlZ3MgeworCWludCBucjsKKwlzdHJ1Y3QgZmZfcmVnIHsKKwkJcmVnZXhfdCByZTsKKwkJaW50IG5lZ2F0ZTsKKwl9ICphcnJheTsKK307CisKK3N0YXRpYyBsb25nIGZmX3JlZ2V4cChjb25zdCBjaGFyICpsaW5lLCBsb25nIGxlbiwKKwkJY2hhciAqYnVmZmVyLCBsb25nIGJ1ZmZlcl9zaXplLCB2b2lkICpwcml2KQoreworCWNoYXIgKmxpbmVfYnVmZmVyOworCXN0cnVjdCBmZl9yZWdzICpyZWdzID0gcHJpdjsKKwlyZWdtYXRjaF90IHBtYXRjaFsyXTsKKwlpbnQgaTsKKwlpbnQgcmVzdWx0ID0gLTE7CisKKwkvKiBFeGNsdWRlIHRlcm1pbmF0aW5nIG5ld2xpbmUgKGFuZCBjcikgZnJvbSBtYXRjaGluZyAqLworCWlmIChsZW4gPiAwICYmIGxpbmVbbGVuLTFdID09ICdcbicpIHsKKwkJaWYgKGxlbiA+IDEgJiYgbGluZVtsZW4tMl0gPT0gJ1xyJykKKwkJCWxlbiAtPSAyOworCQllbHNlCisJCQlsZW4tLTsKKwl9CisKKwlsaW5lX2J1ZmZlciA9IHhzdHJuZHVwKGxpbmUsIGxlbik7IC8qIG1ha2UgTlVMIHRlcm1pbmF0ZWQgKi8KKworCWZvciAoaSA9IDA7IGkgPCByZWdzLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBmZl9yZWcgKnJlZyA9IHJlZ3MtPmFycmF5ICsgaTsKKwkJaWYgKCFyZWdleGVjKCZyZWctPnJlLCBsaW5lX2J1ZmZlciwgMiwgcG1hdGNoLCAwKSkgeworCQkJaWYgKHJlZy0+bmVnYXRlKQorCQkJCWdvdG8gZmFpbDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChyZWdzLT5uciA8PSBpKQorCQlnb3RvIGZhaWw7CisJaSA9IHBtYXRjaFsxXS5ybV9zbyA+PSAwID8gMSA6IDA7CisJbGluZSArPSBwbWF0Y2hbaV0ucm1fc287CisJcmVzdWx0ID0gcG1hdGNoW2ldLnJtX2VvIC0gcG1hdGNoW2ldLnJtX3NvOworCWlmIChyZXN1bHQgPiBidWZmZXJfc2l6ZSkKKwkJcmVzdWx0ID0gYnVmZmVyX3NpemU7CisJd2hpbGUgKHJlc3VsdCA+IDAgJiYgKGlzc3BhY2UobGluZVtyZXN1bHQgLSAxXSkpKQorCQlyZXN1bHQtLTsKKwltZW1jcHkoYnVmZmVyLCBsaW5lLCByZXN1bHQpOworIGZhaWw6CisJZnJlZShsaW5lX2J1ZmZlcik7CisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCB4ZGlmZl9zZXRfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgY2ZsYWdzKQoreworCWludCBpOworCXN0cnVjdCBmZl9yZWdzICpyZWdzOworCisJeGVjZmctPmZpbmRfZnVuYyA9IGZmX3JlZ2V4cDsKKwlyZWdzID0geGVjZmctPmZpbmRfZnVuY19wcml2ID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGZmX3JlZ3MpKTsKKwlmb3IgKGkgPSAwLCByZWdzLT5uciA9IDE7IHZhbHVlW2ldOyBpKyspCisJCWlmICh2YWx1ZVtpXSA9PSAnXG4nKQorCQkJcmVncy0+bnIrKzsKKwlyZWdzLT5hcnJheSA9IHhtYWxsb2MocmVncy0+bnIgKiBzaXplb2Yoc3RydWN0IGZmX3JlZykpOworCWZvciAoaSA9IDA7IGkgPCByZWdzLT5ucjsgaSsrKSB7CisJCXN0cnVjdCBmZl9yZWcgKnJlZyA9IHJlZ3MtPmFycmF5ICsgaTsKKwkJY29uc3QgY2hhciAqZXAgPSBzdHJjaHIodmFsdWUsICdcbicpLCAqZXhwcmVzc2lvbjsKKwkJY2hhciAqYnVmZmVyID0gTlVMTDsKKworCQlyZWctPm5lZ2F0ZSA9ICgqdmFsdWUgPT0gJyEnKTsKKwkJaWYgKHJlZy0+bmVnYXRlICYmIGkgPT0gcmVncy0+bnIgLSAxKQorCQkJZGllKCJMYXN0IGV4cHJlc3Npb24gbXVzdCBub3QgYmUgbmVnYXRlZDogJXMiLCB2YWx1ZSk7CisJCWlmICgqdmFsdWUgPT0gJyEnKQorCQkJdmFsdWUrKzsKKwkJaWYgKGVwKQorCQkJZXhwcmVzc2lvbiA9IGJ1ZmZlciA9IHhzdHJuZHVwKHZhbHVlLCBlcCAtIHZhbHVlKTsKKwkJZWxzZQorCQkJZXhwcmVzc2lvbiA9IHZhbHVlOworCQlpZiAocmVnY29tcCgmcmVnLT5yZSwgZXhwcmVzc2lvbiwgY2ZsYWdzKSkKKwkJCWRpZSgiSW52YWxpZCByZWdleHAgdG8gbG9vayBmb3IgaHVuayBoZWFkZXI6ICVzIiwgZXhwcmVzc2lvbik7CisJCWZyZWUoYnVmZmVyKTsKKwkJdmFsdWUgPSBlcCArIDE7CisJfQorfQorCit2b2lkIHhkaWZmX2NsZWFyX2ZpbmRfZnVuYyh4ZGVtaXRjb25mX3QgKnhlY2ZnKQoreworCWlmICh4ZWNmZy0+ZmluZF9mdW5jKSB7CisJCWludCBpOworCQlzdHJ1Y3QgZmZfcmVncyAqcmVncyA9IHhlY2ZnLT5maW5kX2Z1bmNfcHJpdjsKKworCQlmb3IgKGkgPSAwOyBpIDwgcmVncy0+bnI7IGkrKykKKwkJCXJlZ2ZyZWUoJnJlZ3MtPmFycmF5W2ldLnJlKTsKKwkJZnJlZShyZWdzLT5hcnJheSk7CisJCWZyZWUocmVncyk7CisJCXhlY2ZnLT5maW5kX2Z1bmMgPSBOVUxMOworCQl4ZWNmZy0+ZmluZF9mdW5jX3ByaXYgPSBOVUxMOworCX0KK30KKworaW50IGdpdF94bWVyZ2Vfc3R5bGUgPSAtMTsKKworaW50IGdpdF94bWVyZ2VfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKQoreworCWlmICghc3RyY21wKHZhciwgIm1lcmdlLmNvbmZsaWN0c3R5bGUiKSkgeworCQlpZiAoIXZhbHVlKQorCQkJZGllKCInJXMnIGlzIG5vdCBhIGJvb2xlYW4iLCB2YXIpOworCQlpZiAoIXN0cmNtcCh2YWx1ZSwgImRpZmYzIikpCisJCQlnaXRfeG1lcmdlX3N0eWxlID0gWERMX01FUkdFX0RJRkYzOworCQllbHNlIGlmICghc3RyY21wKHZhbHVlLCAibWVyZ2UiKSkKKwkJCWdpdF94bWVyZ2Vfc3R5bGUgPSAwOworCQllbHNlCisJCQlkaWUoInVua25vd24gc3R5bGUgJyVzJyBnaXZlbiBmb3IgJyVzJyIsCisJCQkgICAgdmFsdWUsIHZhcik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gZ2l0X2RlZmF1bHRfY29uZmlnKHZhciwgdmFsdWUsIGNiKTsKK30KZGlmZiAtLWdpdCBhL3hkaWZmLWludGVyZmFjZS5oIGIveGRpZmYtaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJiNWExYwotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmLWludGVyZmFjZS5oCkBAIC0wLDAgKzEsMzEgQEAKKyNpZm5kZWYgWERJRkZfSU5URVJGQUNFX0gKKyNkZWZpbmUgWERJRkZfSU5URVJGQUNFX0gKKworI2luY2x1ZGUgInhkaWZmL3hkaWZmLmgiCisKKy8qCisgKiB4ZGlmZiBpc24ndCBlcXVpcHBlZCB0byBoYW5kbGUgY29udGVudCBvdmVyIGEgZ2lnYWJ5dGU7CisgKiB3ZSBtYWtlIHRoZSBjdXRvZmYgMUdCIC0gMU1CIHRvIGdpdmUgc29tZSBicmVhdGhpbmcKKyAqIHJvb20gZm9yIGNvbnN0YW50LXNpemVkIGFkZGl0aW9ucyAoZS5nLiwgbWVyZ2UgbWFya2VycykKKyAqLworI2RlZmluZSBNQVhfWERJRkZfU0laRSAoMTAyNFVMICogMTAyNCAqIDEwMjMpCisKK3R5cGVkZWYgdm9pZCAoKnhkaWZmX2VtaXRfY29uc3VtZV9mbikodm9pZCAqLCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOworCitpbnQgeGRpX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcsIHhkZW1pdGNiX3QgKmVjYik7CitpbnQgeGRpX2RpZmZfb3V0ZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLAorCQkgIHhkaWZmX2VtaXRfY29uc3VtZV9mbiBmbiwgdm9pZCAqY29uc3VtZV9jYWxsYmFja19kYXRhLAorCQkgIHhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKTsKK2ludCBwYXJzZV9odW5rX2hlYWRlcihjaGFyICpsaW5lLCBpbnQgbGVuLAorCQkgICAgICBpbnQgKm9iLCBpbnQgKm9uLAorCQkgICAgICBpbnQgKm5iLCBpbnQgKm5uKTsKK2ludCByZWFkX21tZmlsZShtbWZpbGVfdCAqcHRyLCBjb25zdCBjaGFyICpmaWxlbmFtZSk7Cit2b2lkIHJlYWRfbW1ibG9iKG1tZmlsZV90ICpwdHIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNoYTEpOworaW50IGJ1ZmZlcl9pc19iaW5hcnkoY29uc3QgY2hhciAqcHRyLCB1bnNpZ25lZCBsb25nIHNpemUpOworCitleHRlcm4gdm9pZCB4ZGlmZl9zZXRfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcsIGNvbnN0IGNoYXIgKmxpbmUsIGludCBjZmxhZ3MpOworZXh0ZXJuIHZvaWQgeGRpZmZfY2xlYXJfZmluZF9mdW5jKHhkZW1pdGNvbmZfdCAqeGVjZmcpOworZXh0ZXJuIGludCBnaXRfeG1lcmdlX2NvbmZpZyhjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICpjYik7CitleHRlcm4gaW50IGdpdF94bWVyZ2Vfc3R5bGU7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEveGRpZmYveGRpZmYuaCBiL3hkaWZmL3hkaWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzMzk5MQotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hkaWZmLmgKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWERJRkZfSCkKKyNkZWZpbmUgWERJRkZfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qICNpZmRlZiBfX2NwbHVzcGx1cyAqLworCisKKyNkZWZpbmUgWERGX05FRURfTUlOSU1BTCAoMSA8PCAxKQorI2RlZmluZSBYREZfSUdOT1JFX1dISVRFU1BBQ0UgKDEgPDwgMikKKyNkZWZpbmUgWERGX0lHTk9SRV9XSElURVNQQUNFX0NIQU5HRSAoMSA8PCAzKQorI2RlZmluZSBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQVRfRU9MICgxIDw8IDQpCisjZGVmaW5lIFhERl9XSElURVNQQUNFX0ZMQUdTIChYREZfSUdOT1JFX1dISVRFU1BBQ0UgfCBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFIHwgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTCkKKworI2RlZmluZSBYREZfUEFUSUVOQ0VfRElGRiAoMSA8PCA1KQorI2RlZmluZSBYREZfSElTVE9HUkFNX0RJRkYgKDEgPDwgNikKKyNkZWZpbmUgWERGX0RJRkZfQUxHT1JJVEhNX01BU0sgKFhERl9QQVRJRU5DRV9ESUZGIHwgWERGX0hJU1RPR1JBTV9ESUZGKQorI2RlZmluZSBYREZfRElGRl9BTEcoeCkgKCh4KSAmIFhERl9ESUZGX0FMR09SSVRITV9NQVNLKQorCisjZGVmaW5lIFhERl9JR05PUkVfQkxBTktfTElORVMgKDEgPDwgNykKKworI2RlZmluZSBYRExfRU1JVF9GVU5DTkFNRVMgKDEgPDwgMCkKKyNkZWZpbmUgWERMX0VNSVRfQ09NTU9OICgxIDw8IDEpCisjZGVmaW5lIFhETF9FTUlUX0ZVTkNDT05URVhUICgxIDw8IDIpCisKKyNkZWZpbmUgWERMX01NQl9SRUFET05MWSAoMSA8PCAwKQorCisjZGVmaW5lIFhETF9NTUZfQVRPTUlDICgxIDw8IDApCisKKyNkZWZpbmUgWERMX0JET1BfSU5TIDEKKyNkZWZpbmUgWERMX0JET1BfQ1BZIDIKKyNkZWZpbmUgWERMX0JET1BfSU5TQiAzCisKKy8qIG1lcmdlIHNpbXBsaWZpY2F0aW9uIGxldmVscyAqLworI2RlZmluZSBYRExfTUVSR0VfTUlOSU1BTCAwCisjZGVmaW5lIFhETF9NRVJHRV9FQUdFUiAxCisjZGVmaW5lIFhETF9NRVJHRV9aRUFMT1VTIDIKKyNkZWZpbmUgWERMX01FUkdFX1pFQUxPVVNfQUxOVU0gMworCisvKiBtZXJnZSBmYXZvciBtb2RlcyAqLworI2RlZmluZSBYRExfTUVSR0VfRkFWT1JfT1VSUyAxCisjZGVmaW5lIFhETF9NRVJHRV9GQVZPUl9USEVJUlMgMgorI2RlZmluZSBYRExfTUVSR0VfRkFWT1JfVU5JT04gMworCisvKiBtZXJnZSBvdXRwdXQgc3R5bGVzICovCisjZGVmaW5lIFhETF9NRVJHRV9ESUZGMyAxCisKK3R5cGVkZWYgc3RydWN0IHNfbW1maWxlIHsKKwljaGFyICpwdHI7CisJbG9uZyBzaXplOworfSBtbWZpbGVfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc19tbWJ1ZmZlciB7CisJY2hhciAqcHRyOworCWxvbmcgc2l6ZTsKK30gbW1idWZmZXJfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc194cHBhcmFtIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfSB4cHBhcmFtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfeGRlbWl0Y2IgeworCXZvaWQgKnByaXY7CisJaW50ICgqb3V0Zikodm9pZCAqLCBtbWJ1ZmZlcl90ICosIGludCk7Cit9IHhkZW1pdGNiX3Q7CisKK3R5cGVkZWYgbG9uZyAoKmZpbmRfZnVuY190KShjb25zdCBjaGFyICpsaW5lLCBsb25nIGxpbmVfbGVuLCBjaGFyICpidWZmZXIsIGxvbmcgYnVmZmVyX3NpemUsIHZvaWQgKnByaXYpOworCit0eXBlZGVmIGludCAoKnhkbF9lbWl0X2h1bmtfY29uc3VtZV9mdW5jX3QpKGxvbmcgc3RhcnRfYSwgbG9uZyBjb3VudF9hLAorCQkJCQkgICAgbG9uZyBzdGFydF9iLCBsb25nIGNvdW50X2IsCisJCQkJCSAgICB2b2lkICpjYl9kYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3Qgc194ZGVtaXRjb25mIHsKKwlsb25nIGN0eGxlbjsKKwlsb25nIGludGVyaHVua2N0eGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWZpbmRfZnVuY190IGZpbmRfZnVuYzsKKwl2b2lkICpmaW5kX2Z1bmNfcHJpdjsKKwl4ZGxfZW1pdF9odW5rX2NvbnN1bWVfZnVuY190IGh1bmtfZnVuYzsKK30geGRlbWl0Y29uZl90OworCit0eXBlZGVmIHN0cnVjdCBzX2JkaWZmcGFyYW0geworCWxvbmcgYnNpemU7Cit9IGJkaWZmcGFyYW1fdDsKKworCisjZGVmaW5lIHhkbF9tYWxsb2MoeCkgbWFsbG9jKHgpCisjZGVmaW5lIHhkbF9mcmVlKHB0cikgZnJlZShwdHIpCisjZGVmaW5lIHhkbF9yZWFsbG9jKHB0cix4KSByZWFsbG9jKHB0cix4KQorCit2b2lkICp4ZGxfbW1maWxlX2ZpcnN0KG1tZmlsZV90ICptbWYsIGxvbmcgKnNpemUpOworbG9uZyB4ZGxfbW1maWxlX3NpemUobW1maWxlX3QgKm1tZik7CisKK2ludCB4ZGxfZGlmZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkgICAgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcsIHhkZW1pdGNiX3QgKmVjYik7CisKK3R5cGVkZWYgc3RydWN0IHNfeG1wYXJhbSB7CisJeHBwYXJhbV90IHhwcDsKKwlpbnQgbWFya2VyX3NpemU7CisJaW50IGxldmVsOworCWludCBmYXZvcjsKKwlpbnQgc3R5bGU7CisJY29uc3QgY2hhciAqYW5jZXN0b3I7CS8qIGxhYmVsIGZvciBvcmlnICovCisJY29uc3QgY2hhciAqZmlsZTE7CS8qIGxhYmVsIGZvciBtZjEgKi8KKwljb25zdCBjaGFyICpmaWxlMjsJLyogbGFiZWwgZm9yIG1mMiAqLworfSB4bXBhcmFtX3Q7CisKKyNkZWZpbmUgREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRSA3CisKK2ludCB4ZGxfbWVyZ2UobW1maWxlX3QgKm9yaWcsIG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsCisJCXhtcGFyYW1fdCBjb25zdCAqeG1wLCBtbWJ1ZmZlcl90ICpyZXN1bHQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiAjaWZkZWYgX19jcGx1c3BsdXMgKi8KKworI2VuZGlmIC8qICNpZiAhZGVmaW5lZChYRElGRl9IKSAqLwpkaWZmIC0tZ2l0IGEveGRpZmYveGRpZmZpLmMgYi94ZGlmZi94ZGlmZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzU4YTJkCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveGRpZmZpLmMKQEAgLTAsMCArMSw2MTIgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMJRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpbmNsdWRlICJ4aW5jbHVkZS5oIgorCisKKworI2RlZmluZSBYRExfTUFYX0NPU1RfTUlOIDI1NgorI2RlZmluZSBYRExfSEVVUl9NSU5fQ09TVCAyNTYKKyNkZWZpbmUgWERMX0xJTkVfTUFYIChsb25nKSgoMVVMIDw8IChDSEFSX0JJVCAqIHNpemVvZihsb25nKSAtIDEpKSAtIDEpCisjZGVmaW5lIFhETF9TTkFLRV9DTlQgMjAKKyNkZWZpbmUgWERMX0tfSEVVUiA0CisKKworCit0eXBlZGVmIHN0cnVjdCBzX3hkcHNwbGl0IHsKKwlsb25nIGkxLCBpMjsKKwlpbnQgbWluX2xvLCBtaW5faGk7Cit9IHhkcHNwbGl0X3Q7CisKKworCisKK3N0YXRpYyBsb25nIHhkbF9zcGxpdCh1bnNpZ25lZCBsb25nIGNvbnN0ICpoYTEsIGxvbmcgb2ZmMSwgbG9uZyBsaW0xLAorCQkgICAgICB1bnNpZ25lZCBsb25nIGNvbnN0ICpoYTIsIGxvbmcgb2ZmMiwgbG9uZyBsaW0yLAorCQkgICAgICBsb25nICprdmRmLCBsb25nICprdmRiLCBpbnQgbmVlZF9taW4sIHhkcHNwbGl0X3QgKnNwbCwKKwkJICAgICAgeGRhbGdvZW52X3QgKnhlbnYpOworc3RhdGljIHhkY2hhbmdlX3QgKnhkbF9hZGRfY2hhbmdlKHhkY2hhbmdlX3QgKnhzY3IsIGxvbmcgaTEsIGxvbmcgaTIsIGxvbmcgY2hnMSwgbG9uZyBjaGcyKTsKKworCisKKworCisvKgorICogU2VlICJBbiBPKE5EKSBEaWZmZXJlbmNlIEFsZ29yaXRobSBhbmQgaXRzIFZhcmlhdGlvbnMiLCBieSBFdWdlbmUgTXllcnMuCisgKiBCYXNpY2FsbHkgY29uc2lkZXJzIGEgImJveCIgKG9mZjEsIG9mZjIsIGxpbTEsIGxpbTIpIGFuZCBzY2FuIGZyb20gYm90aAorICogdGhlIGZvcndhcmQgZGlhZ29uYWwgc3RhcnRpbmcgZnJvbSAob2ZmMSwgb2ZmMikgYW5kIHRoZSBiYWNrd2FyZCBkaWFnb25hbAorICogc3RhcnRpbmcgZnJvbSAobGltMSwgbGltMikuIElmIHRoZSBLIHZhbHVlcyBvbiB0aGUgc2FtZSBkaWFnb25hbCBjcm9zc2VzCisgKiByZXR1cm5zIHRoZSBmdXJ0aGVzdCBwb2ludCBvZiByZWFjaC4gV2UgbWlnaHQgZW5kIHVwIGhhdmluZyB0byBleHBlbnNpdmUKKyAqIGNhc2VzIHVzaW5nIHRoaXMgYWxnb3JpdGhtIGlzIGZ1bGwsIHNvIGEgbGl0dGxlIGJpdCBvZiBoZXVyaXN0aWMgaXMgbmVlZGVkCisgKiB0byBjdXQgdGhlIHNlYXJjaCBhbmQgdG8gcmV0dXJuIGEgc3Vib3B0aW1hbCBwb2ludC4KKyAqLworc3RhdGljIGxvbmcgeGRsX3NwbGl0KHVuc2lnbmVkIGxvbmcgY29uc3QgKmhhMSwgbG9uZyBvZmYxLCBsb25nIGxpbTEsCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgY29uc3QgKmhhMiwgbG9uZyBvZmYyLCBsb25nIGxpbTIsCisJCSAgICAgIGxvbmcgKmt2ZGYsIGxvbmcgKmt2ZGIsIGludCBuZWVkX21pbiwgeGRwc3BsaXRfdCAqc3BsLAorCQkgICAgICB4ZGFsZ29lbnZfdCAqeGVudikgeworCWxvbmcgZG1pbiA9IG9mZjEgLSBsaW0yLCBkbWF4ID0gbGltMSAtIG9mZjI7CisJbG9uZyBmbWlkID0gb2ZmMSAtIG9mZjIsIGJtaWQgPSBsaW0xIC0gbGltMjsKKwlsb25nIG9kZCA9IChmbWlkIC0gYm1pZCkgJiAxOworCWxvbmcgZm1pbiA9IGZtaWQsIGZtYXggPSBmbWlkOworCWxvbmcgYm1pbiA9IGJtaWQsIGJtYXggPSBibWlkOworCWxvbmcgZWMsIGQsIGkxLCBpMiwgcHJldjEsIGJlc3QsIGRkLCB2LCBrOworCisJLyoKKwkgKiBTZXQgaW5pdGlhbCBkaWFnb25hbCB2YWx1ZXMgZm9yIGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmQgcGF0aC4KKwkgKi8KKwlrdmRmW2ZtaWRdID0gb2ZmMTsKKwlrdmRiW2JtaWRdID0gbGltMTsKKworCWZvciAoZWMgPSAxOzsgZWMrKykgeworCQlpbnQgZ290X3NuYWtlID0gMDsKKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGV4dGVudCB0aGUgZGlhZ29uYWwgImRvbWFpbiIgYnkgb25lLiBJZiB0aGUgbmV4dAorCQkgKiB2YWx1ZXMgZXhpdHMgdGhlIGJveCBib3VuZGFyaWVzIHdlIG5lZWQgdG8gY2hhbmdlIGl0IGluIHRoZQorCQkgKiBvcHBvc2l0ZSBkaXJlY3Rpb24gYmVjYXVzZSAobWF4IC0gbWluKSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgorCQkgKiBBbHNvIHdlIGluaXRpYWxpemUgdGhlIGV4dGVybmFsIEsgdmFsdWUgdG8gLTEgc28gdGhhdCB3ZSBjYW4KKwkJICogYXZvaWQgZXh0cmEgY29uZGl0aW9ucyBjaGVjayBpbnNpZGUgdGhlIGNvcmUgbG9vcC4KKwkJICovCisJCWlmIChmbWluID4gZG1pbikKKwkJCWt2ZGZbLS1mbWluIC0gMV0gPSAtMTsKKwkJZWxzZQorCQkJKytmbWluOworCQlpZiAoZm1heCA8IGRtYXgpCisJCQlrdmRmWysrZm1heCArIDFdID0gLTE7CisJCWVsc2UKKwkJCS0tZm1heDsKKworCQlmb3IgKGQgPSBmbWF4OyBkID49IGZtaW47IGQgLT0gMikgeworCQkJaWYgKGt2ZGZbZCAtIDFdID49IGt2ZGZbZCArIDFdKQorCQkJCWkxID0ga3ZkZltkIC0gMV0gKyAxOworCQkJZWxzZQorCQkJCWkxID0ga3ZkZltkICsgMV07CisJCQlwcmV2MSA9IGkxOworCQkJaTIgPSBpMSAtIGQ7CisJCQlmb3IgKDsgaTEgPCBsaW0xICYmIGkyIDwgbGltMiAmJiBoYTFbaTFdID09IGhhMltpMl07IGkxKyssIGkyKyspOworCQkJaWYgKGkxIC0gcHJldjEgPiB4ZW52LT5zbmFrZV9jbnQpCisJCQkJZ290X3NuYWtlID0gMTsKKwkJCWt2ZGZbZF0gPSBpMTsKKwkJCWlmIChvZGQgJiYgYm1pbiA8PSBkICYmIGQgPD0gYm1heCAmJiBrdmRiW2RdIDw9IGkxKSB7CisJCQkJc3BsLT5pMSA9IGkxOworCQkJCXNwbC0+aTIgPSBpMjsKKwkJCQlzcGwtPm1pbl9sbyA9IHNwbC0+bWluX2hpID0gMTsKKwkJCQlyZXR1cm4gZWM7CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBXZSBuZWVkIHRvIGV4dGVudCB0aGUgZGlhZ29uYWwgImRvbWFpbiIgYnkgb25lLiBJZiB0aGUgbmV4dAorCQkgKiB2YWx1ZXMgZXhpdHMgdGhlIGJveCBib3VuZGFyaWVzIHdlIG5lZWQgdG8gY2hhbmdlIGl0IGluIHRoZQorCQkgKiBvcHBvc2l0ZSBkaXJlY3Rpb24gYmVjYXVzZSAobWF4IC0gbWluKSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgorCQkgKiBBbHNvIHdlIGluaXRpYWxpemUgdGhlIGV4dGVybmFsIEsgdmFsdWUgdG8gLTEgc28gdGhhdCB3ZSBjYW4KKwkJICogYXZvaWQgZXh0cmEgY29uZGl0aW9ucyBjaGVjayBpbnNpZGUgdGhlIGNvcmUgbG9vcC4KKwkJICovCisJCWlmIChibWluID4gZG1pbikKKwkJCWt2ZGJbLS1ibWluIC0gMV0gPSBYRExfTElORV9NQVg7CisJCWVsc2UKKwkJCSsrYm1pbjsKKwkJaWYgKGJtYXggPCBkbWF4KQorCQkJa3ZkYlsrK2JtYXggKyAxXSA9IFhETF9MSU5FX01BWDsKKwkJZWxzZQorCQkJLS1ibWF4OworCisJCWZvciAoZCA9IGJtYXg7IGQgPj0gYm1pbjsgZCAtPSAyKSB7CisJCQlpZiAoa3ZkYltkIC0gMV0gPCBrdmRiW2QgKyAxXSkKKwkJCQlpMSA9IGt2ZGJbZCAtIDFdOworCQkJZWxzZQorCQkJCWkxID0ga3ZkYltkICsgMV0gLSAxOworCQkJcHJldjEgPSBpMTsKKwkJCWkyID0gaTEgLSBkOworCQkJZm9yICg7IGkxID4gb2ZmMSAmJiBpMiA+IG9mZjIgJiYgaGExW2kxIC0gMV0gPT0gaGEyW2kyIC0gMV07IGkxLS0sIGkyLS0pOworCQkJaWYgKHByZXYxIC0gaTEgPiB4ZW52LT5zbmFrZV9jbnQpCisJCQkJZ290X3NuYWtlID0gMTsKKwkJCWt2ZGJbZF0gPSBpMTsKKwkJCWlmICghb2RkICYmIGZtaW4gPD0gZCAmJiBkIDw9IGZtYXggJiYgaTEgPD0ga3ZkZltkXSkgeworCQkJCXNwbC0+aTEgPSBpMTsKKwkJCQlzcGwtPmkyID0gaTI7CisJCQkJc3BsLT5taW5fbG8gPSBzcGwtPm1pbl9oaSA9IDE7CisJCQkJcmV0dXJuIGVjOworCQkJfQorCQl9CisKKwkJaWYgKG5lZWRfbWluKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogSWYgdGhlIGVkaXQgY29zdCBpcyBhYm92ZSB0aGUgaGV1cmlzdGljIHRyaWdnZXIgYW5kIGlmCisJCSAqIHdlIGdvdCBhIGdvb2Qgc25ha2UsIHdlIHNhbXBsZSBjdXJyZW50IGRpYWdvbmFscyB0byBzZWUKKwkJICogaWYgc29tZSBvZiB0aGUsIGhhdmUgcmVhY2hlZCBhbiAiaW50ZXJlc3RpbmciIHBhdGguIE91cgorCQkgKiBtZWFzdXJlIGlzIGEgZnVuY3Rpb24gb2YgdGhlIGRpc3RhbmNlIGZyb20gdGhlIGRpYWdvbmFsCisJCSAqIGNvcm5lciAoaTEgKyBpMikgcGVuYWxpemVkIHdpdGggdGhlIGRpc3RhbmNlIGZyb20gdGhlCisJCSAqIG1pZCBkaWFnb25hbCBpdHNlbGYuIElmIHRoaXMgdmFsdWUgaXMgYWJvdmUgdGhlIGN1cnJlbnQKKwkJICogZWRpdCBjb3N0IHRpbWVzIGEgbWFnaWMgZmFjdG9yIChYRExfS19IRVVSKSB3ZSBjb25zaWRlcgorCQkgKiBpdCBpbnRlcmVzdGluZy4KKwkJICovCisJCWlmIChnb3Rfc25ha2UgJiYgZWMgPiB4ZW52LT5oZXVyX21pbikgeworCQkJZm9yIChiZXN0ID0gMCwgZCA9IGZtYXg7IGQgPj0gZm1pbjsgZCAtPSAyKSB7CisJCQkJZGQgPSBkID4gZm1pZCA/IGQgLSBmbWlkOiBmbWlkIC0gZDsKKwkJCQlpMSA9IGt2ZGZbZF07CisJCQkJaTIgPSBpMSAtIGQ7CisJCQkJdiA9IChpMSAtIG9mZjEpICsgKGkyIC0gb2ZmMikgLSBkZDsKKworCQkJCWlmICh2ID4gWERMX0tfSEVVUiAqIGVjICYmIHYgPiBiZXN0ICYmCisJCQkJICAgIG9mZjEgKyB4ZW52LT5zbmFrZV9jbnQgPD0gaTEgJiYgaTEgPCBsaW0xICYmCisJCQkJICAgIG9mZjIgKyB4ZW52LT5zbmFrZV9jbnQgPD0gaTIgJiYgaTIgPCBsaW0yKSB7CisJCQkJCWZvciAoayA9IDE7IGhhMVtpMSAtIGtdID09IGhhMltpMiAtIGtdOyBrKyspCisJCQkJCQlpZiAoayA9PSB4ZW52LT5zbmFrZV9jbnQpIHsKKwkJCQkJCQliZXN0ID0gdjsKKwkJCQkJCQlzcGwtPmkxID0gaTE7CisJCQkJCQkJc3BsLT5pMiA9IGkyOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChiZXN0ID4gMCkgeworCQkJCXNwbC0+bWluX2xvID0gMTsKKwkJCQlzcGwtPm1pbl9oaSA9IDA7CisJCQkJcmV0dXJuIGVjOworCQkJfQorCisJCQlmb3IgKGJlc3QgPSAwLCBkID0gYm1heDsgZCA+PSBibWluOyBkIC09IDIpIHsKKwkJCQlkZCA9IGQgPiBibWlkID8gZCAtIGJtaWQ6IGJtaWQgLSBkOworCQkJCWkxID0ga3ZkYltkXTsKKwkJCQlpMiA9IGkxIC0gZDsKKwkJCQl2ID0gKGxpbTEgLSBpMSkgKyAobGltMiAtIGkyKSAtIGRkOworCisJCQkJaWYgKHYgPiBYRExfS19IRVVSICogZWMgJiYgdiA+IGJlc3QgJiYKKwkJCQkgICAgb2ZmMSA8IGkxICYmIGkxIDw9IGxpbTEgLSB4ZW52LT5zbmFrZV9jbnQgJiYKKwkJCQkgICAgb2ZmMiA8IGkyICYmIGkyIDw9IGxpbTIgLSB4ZW52LT5zbmFrZV9jbnQpIHsKKwkJCQkJZm9yIChrID0gMDsgaGExW2kxICsga10gPT0gaGEyW2kyICsga107IGsrKykKKwkJCQkJCWlmIChrID09IHhlbnYtPnNuYWtlX2NudCAtIDEpIHsKKwkJCQkJCQliZXN0ID0gdjsKKwkJCQkJCQlzcGwtPmkxID0gaTE7CisJCQkJCQkJc3BsLT5pMiA9IGkyOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChiZXN0ID4gMCkgeworCQkJCXNwbC0+bWluX2xvID0gMDsKKwkJCQlzcGwtPm1pbl9oaSA9IDE7CisJCQkJcmV0dXJuIGVjOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogRW5vdWdoIGlzIGVub3VnaC4gV2Ugc3BlbnQgdG9vIG11Y2ggdGltZSBoZXJlIGFuZCBub3cgd2UgY29sbGVjdAorCQkgKiB0aGUgZnVydGhlc3QgcmVhY2hpbmcgcGF0aCB1c2luZyB0aGUgKGkxICsgaTIpIG1lYXN1cmUuCisJCSAqLworCQlpZiAoZWMgPj0geGVudi0+bXhjb3N0KSB7CisJCQlsb25nIGZiZXN0LCBmYmVzdDEsIGJiZXN0LCBiYmVzdDE7CisKKwkJCWZiZXN0ID0gZmJlc3QxID0gLTE7CisJCQlmb3IgKGQgPSBmbWF4OyBkID49IGZtaW47IGQgLT0gMikgeworCQkJCWkxID0gWERMX01JTihrdmRmW2RdLCBsaW0xKTsKKwkJCQlpMiA9IGkxIC0gZDsKKwkJCQlpZiAobGltMiA8IGkyKQorCQkJCQlpMSA9IGxpbTIgKyBkLCBpMiA9IGxpbTI7CisJCQkJaWYgKGZiZXN0IDwgaTEgKyBpMikgeworCQkJCQlmYmVzdCA9IGkxICsgaTI7CisJCQkJCWZiZXN0MSA9IGkxOworCQkJCX0KKwkJCX0KKworCQkJYmJlc3QgPSBiYmVzdDEgPSBYRExfTElORV9NQVg7CisJCQlmb3IgKGQgPSBibWF4OyBkID49IGJtaW47IGQgLT0gMikgeworCQkJCWkxID0gWERMX01BWChvZmYxLCBrdmRiW2RdKTsKKwkJCQlpMiA9IGkxIC0gZDsKKwkJCQlpZiAoaTIgPCBvZmYyKQorCQkJCQlpMSA9IG9mZjIgKyBkLCBpMiA9IG9mZjI7CisJCQkJaWYgKGkxICsgaTIgPCBiYmVzdCkgeworCQkJCQliYmVzdCA9IGkxICsgaTI7CisJCQkJCWJiZXN0MSA9IGkxOworCQkJCX0KKwkJCX0KKworCQkJaWYgKChsaW0xICsgbGltMikgLSBiYmVzdCA8IGZiZXN0IC0gKG9mZjEgKyBvZmYyKSkgeworCQkJCXNwbC0+aTEgPSBmYmVzdDE7CisJCQkJc3BsLT5pMiA9IGZiZXN0IC0gZmJlc3QxOworCQkJCXNwbC0+bWluX2xvID0gMTsKKwkJCQlzcGwtPm1pbl9oaSA9IDA7CisJCQl9IGVsc2UgeworCQkJCXNwbC0+aTEgPSBiYmVzdDE7CisJCQkJc3BsLT5pMiA9IGJiZXN0IC0gYmJlc3QxOworCQkJCXNwbC0+bWluX2xvID0gMDsKKwkJCQlzcGwtPm1pbl9oaSA9IDE7CisJCQl9CisJCQlyZXR1cm4gZWM7CisJCX0KKwl9Cit9CisKKworLyoKKyAqIFJ1bGU6ICJEaXZpZGUgZXQgSW1wZXJhIi4gUmVjdXJzaXZlbHkgc3BsaXQgdGhlIGJveCBpbiBzdWItYm94ZXMgYnkgY2FsbGluZworICogdGhlIGJveCBzcGxpdHRpbmcgZnVuY3Rpb24uIE5vdGUgdGhhdCB0aGUgcmVhbCBqb2IgKG1hcmtpbmcgY2hhbmdlZCBsaW5lcykKKyAqIGlzIGRvbmUgaW4gdGhlIHR3byBib3VuZGFyeSByZWFjaGluZyBjaGVja3MuCisgKi8KK2ludCB4ZGxfcmVjc19jbXAoZGlmZmRhdGFfdCAqZGQxLCBsb25nIG9mZjEsIGxvbmcgbGltMSwKKwkJIGRpZmZkYXRhX3QgKmRkMiwgbG9uZyBvZmYyLCBsb25nIGxpbTIsCisJCSBsb25nICprdmRmLCBsb25nICprdmRiLCBpbnQgbmVlZF9taW4sIHhkYWxnb2Vudl90ICp4ZW52KSB7CisJdW5zaWduZWQgbG9uZyBjb25zdCAqaGExID0gZGQxLT5oYSwgKmhhMiA9IGRkMi0+aGE7CisKKwkvKgorCSAqIFNocmluayB0aGUgYm94IGJ5IHdhbGtpbmcgdGhyb3VnaCBlYWNoIGRpYWdvbmFsIHNuYWtlIChTVyBhbmQgTkUpLgorCSAqLworCWZvciAoOyBvZmYxIDwgbGltMSAmJiBvZmYyIDwgbGltMiAmJiBoYTFbb2ZmMV0gPT0gaGEyW29mZjJdOyBvZmYxKyssIG9mZjIrKyk7CisJZm9yICg7IG9mZjEgPCBsaW0xICYmIG9mZjIgPCBsaW0yICYmIGhhMVtsaW0xIC0gMV0gPT0gaGEyW2xpbTIgLSAxXTsgbGltMS0tLCBsaW0yLS0pOworCisJLyoKKwkgKiBJZiBvbmUgZGltZW5zaW9uIGlzIGVtcHR5LCB0aGVuIGFsbCByZWNvcmRzIG9uIHRoZSBvdGhlciBvbmUgbXVzdAorCSAqIGJlIG9idmlvdXNseSBjaGFuZ2VkLgorCSAqLworCWlmIChvZmYxID09IGxpbTEpIHsKKwkJY2hhciAqcmNoZzIgPSBkZDItPnJjaGc7CisJCWxvbmcgKnJpbmRleDIgPSBkZDItPnJpbmRleDsKKworCQlmb3IgKDsgb2ZmMiA8IGxpbTI7IG9mZjIrKykKKwkJCXJjaGcyW3JpbmRleDJbb2ZmMl1dID0gMTsKKwl9IGVsc2UgaWYgKG9mZjIgPT0gbGltMikgeworCQljaGFyICpyY2hnMSA9IGRkMS0+cmNoZzsKKwkJbG9uZyAqcmluZGV4MSA9IGRkMS0+cmluZGV4OworCisJCWZvciAoOyBvZmYxIDwgbGltMTsgb2ZmMSsrKQorCQkJcmNoZzFbcmluZGV4MVtvZmYxXV0gPSAxOworCX0gZWxzZSB7CisJCXhkcHNwbGl0X3Qgc3BsOworCQlzcGwuaTEgPSBzcGwuaTIgPSAwOworCisJCS8qCisJCSAqIERpdmlkZSAuLi4KKwkJICovCisJCWlmICh4ZGxfc3BsaXQoaGExLCBvZmYxLCBsaW0xLCBoYTIsIG9mZjIsIGxpbTIsIGt2ZGYsIGt2ZGIsCisJCQkgICAgICBuZWVkX21pbiwgJnNwbCwgeGVudikgPCAwKSB7CisKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCS8qCisJCSAqIC4uLiBldCBJbXBlcmEuCisJCSAqLworCQlpZiAoeGRsX3JlY3NfY21wKGRkMSwgb2ZmMSwgc3BsLmkxLCBkZDIsIG9mZjIsIHNwbC5pMiwKKwkJCQkga3ZkZiwga3ZkYiwgc3BsLm1pbl9sbywgeGVudikgPCAwIHx8CisJCSAgICB4ZGxfcmVjc19jbXAoZGQxLCBzcGwuaTEsIGxpbTEsIGRkMiwgc3BsLmkyLCBsaW0yLAorCQkJCSBrdmRmLCBrdmRiLCBzcGwubWluX2hpLCB4ZW52KSA8IDApIHsKKworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworaW50IHhkbF9kb19kaWZmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQl4ZGZlbnZfdCAqeGUpIHsKKwlsb25nIG5kaWFnczsKKwlsb25nICprdmQsICprdmRmLCAqa3ZkYjsKKwl4ZGFsZ29lbnZfdCB4ZW52OworCWRpZmZkYXRhX3QgZGQxLCBkZDI7CisKKwlpZiAoWERGX0RJRkZfQUxHKHhwcC0+ZmxhZ3MpID09IFhERl9QQVRJRU5DRV9ESUZGKQorCQlyZXR1cm4geGRsX2RvX3BhdGllbmNlX2RpZmYobWYxLCBtZjIsIHhwcCwgeGUpOworCisJaWYgKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSA9PSBYREZfSElTVE9HUkFNX0RJRkYpCisJCXJldHVybiB4ZGxfZG9faGlzdG9ncmFtX2RpZmYobWYxLCBtZjIsIHhwcCwgeGUpOworCisJaWYgKHhkbF9wcmVwYXJlX2VudihtZjEsIG1mMiwgeHBwLCB4ZSkgPCAwKSB7CisKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogQWxsb2NhdGUgYW5kIHNldHVwIEsgdmVjdG9ycyB0byBiZSB1c2VkIGJ5IHRoZSBkaWZmZXJlbnRpYWwgYWxnb3JpdGhtLgorCSAqIE9uZSBpcyB0byBzdG9yZSB0aGUgZm9yd2FyZCBwYXRoIGFuZCBvbmUgdG8gc3RvcmUgdGhlIGJhY2t3YXJkIHBhdGguCisJICovCisJbmRpYWdzID0geGUtPnhkZjEubnJlZmYgKyB4ZS0+eGRmMi5ucmVmZiArIDM7CisJaWYgKCEoa3ZkID0gKGxvbmcgKikgeGRsX21hbGxvYygoMiAqIG5kaWFncyArIDIpICogc2l6ZW9mKGxvbmcpKSkpIHsKKworCQl4ZGxfZnJlZV9lbnYoeGUpOworCQlyZXR1cm4gLTE7CisJfQorCWt2ZGYgPSBrdmQ7CisJa3ZkYiA9IGt2ZGYgKyBuZGlhZ3M7CisJa3ZkZiArPSB4ZS0+eGRmMi5ucmVmZiArIDE7CisJa3ZkYiArPSB4ZS0+eGRmMi5ucmVmZiArIDE7CisKKwl4ZW52Lm14Y29zdCA9IHhkbF9ib2dvc3FydChuZGlhZ3MpOworCWlmICh4ZW52Lm14Y29zdCA8IFhETF9NQVhfQ09TVF9NSU4pCisJCXhlbnYubXhjb3N0ID0gWERMX01BWF9DT1NUX01JTjsKKwl4ZW52LnNuYWtlX2NudCA9IFhETF9TTkFLRV9DTlQ7CisJeGVudi5oZXVyX21pbiA9IFhETF9IRVVSX01JTl9DT1NUOworCisJZGQxLm5yZWMgPSB4ZS0+eGRmMS5ucmVmZjsKKwlkZDEuaGEgPSB4ZS0+eGRmMS5oYTsKKwlkZDEucmNoZyA9IHhlLT54ZGYxLnJjaGc7CisJZGQxLnJpbmRleCA9IHhlLT54ZGYxLnJpbmRleDsKKwlkZDIubnJlYyA9IHhlLT54ZGYyLm5yZWZmOworCWRkMi5oYSA9IHhlLT54ZGYyLmhhOworCWRkMi5yY2hnID0geGUtPnhkZjIucmNoZzsKKwlkZDIucmluZGV4ID0geGUtPnhkZjIucmluZGV4OworCisJaWYgKHhkbF9yZWNzX2NtcCgmZGQxLCAwLCBkZDEubnJlYywgJmRkMiwgMCwgZGQyLm5yZWMsCisJCQkga3ZkZiwga3ZkYiwgKHhwcC0+ZmxhZ3MgJiBYREZfTkVFRF9NSU5JTUFMKSAhPSAwLCAmeGVudikgPCAwKSB7CisKKwkJeGRsX2ZyZWUoa3ZkKTsKKwkJeGRsX2ZyZWVfZW52KHhlKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXhkbF9mcmVlKGt2ZCk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgeGRjaGFuZ2VfdCAqeGRsX2FkZF9jaGFuZ2UoeGRjaGFuZ2VfdCAqeHNjciwgbG9uZyBpMSwgbG9uZyBpMiwgbG9uZyBjaGcxLCBsb25nIGNoZzIpIHsKKwl4ZGNoYW5nZV90ICp4Y2g7CisKKwlpZiAoISh4Y2ggPSAoeGRjaGFuZ2VfdCAqKSB4ZGxfbWFsbG9jKHNpemVvZih4ZGNoYW5nZV90KSkpKQorCQlyZXR1cm4gTlVMTDsKKworCXhjaC0+bmV4dCA9IHhzY3I7CisJeGNoLT5pMSA9IGkxOworCXhjaC0+aTIgPSBpMjsKKwl4Y2gtPmNoZzEgPSBjaGcxOworCXhjaC0+Y2hnMiA9IGNoZzI7CisJeGNoLT5pZ25vcmUgPSAwOworCisJcmV0dXJuIHhjaDsKK30KKworCitpbnQgeGRsX2NoYW5nZV9jb21wYWN0KHhkZmlsZV90ICp4ZGYsIHhkZmlsZV90ICp4ZGZvLCBsb25nIGZsYWdzKSB7CisJbG9uZyBpeCwgaXhvLCBpeHMsIGl4cmVmLCBncnBzaXosIG5yZWMgPSB4ZGYtPm5yZWM7CisJY2hhciAqcmNoZyA9IHhkZi0+cmNoZywgKnJjaGdvID0geGRmby0+cmNoZzsKKwl4cmVjb3JkX3QgKipyZWNzID0geGRmLT5yZWNzOworCisJLyoKKwkgKiBUaGlzIGlzIHRoZSBzYW1lIG9mIHdoYXQgR05VIGRpZmYgZG9lcy4gTW92ZSBiYWNrIGFuZCBmb3J3YXJkCisJICogY2hhbmdlIGdyb3VwcyBmb3IgYSBjb25zaXN0ZW50IGFuZCBwcmV0dHkgZGlmZiBvdXRwdXQuIFRoaXMgYWxzbworCSAqIGhlbHBzIGluIGZpbmRpbmcgam9pbmFibGUgY2hhbmdlIGdyb3VwcyBhbmQgcmVkdWNlIHRoZSBkaWZmIHNpemUuCisJICovCisJZm9yIChpeCA9IGl4byA9IDA7OykgeworCQkvKgorCQkgKiBGaW5kIHRoZSBmaXJzdCBjaGFuZ2VkIGxpbmUgaW4gdGhlIHRvLWJlLWNvbXBhY3RlZCBmaWxlLgorCQkgKiBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgYm90aCBpbmRleGVzLCBzbyBpZiB3ZSBmaW5kIGEKKwkJICogY2hhbmdlZCBsaW5lcyBncm91cCBvbiB0aGUgb3RoZXIgZmlsZSwgd2hpbGUgc2Nhbm5pbmcgdGhlCisJCSAqIHRvLWJlLWNvbXBhY3RlZCBmaWxlLCB3ZSBuZWVkIHRvIHNraXAgaXQgcHJvcGVybHkuIE5vdGUKKwkJICogdGhhdCBsb29wcyB0aGF0IGFyZSB0ZXN0aW5nIGZvciBjaGFuZ2VkIGxpbmVzIG9uIHJjaGcqIGRvCisJCSAqIG5vdCBuZWVkIGluZGV4IGJvdW5kaW5nIHNpbmNlIHRoZSBhcnJheSBpcyBwcmVwYXJlZCB3aXRoCisJCSAqIGEgemVybyBhdCBwb3NpdGlvbiAtMSBhbmQgTi4KKwkJICovCisJCWZvciAoOyBpeCA8IG5yZWMgJiYgIXJjaGdbaXhdOyBpeCsrKQorCQkJd2hpbGUgKHJjaGdvW2l4bysrXSk7CisJCWlmIChpeCA9PSBucmVjKQorCQkJYnJlYWs7CisKKwkJLyoKKwkJICogUmVjb3JkIHRoZSBzdGFydCBvZiBhIGNoYW5nZWQtZ3JvdXAgaW4gdGhlIHRvLWJlLWNvbXBhY3RlZCBmaWxlCisJCSAqIGFuZCBmaW5kIHRoZSBlbmQgb2YgaXQsIG9uIGJvdGggdG8tYmUtY29tcGFjdGVkIGFuZCBvdGhlciBmaWxlCisJCSAqIGluZGV4ZXMgKGl4IGFuZCBpeG8pLgorCQkgKi8KKwkJaXhzID0gaXg7CisJCWZvciAoaXgrKzsgcmNoZ1tpeF07IGl4KyspOworCQlmb3IgKDsgcmNoZ29baXhvXTsgaXhvKyspOworCisJCWRvIHsKKwkJCWdycHNpeiA9IGl4IC0gaXhzOworCisJCQkvKgorCQkJICogSWYgdGhlIGxpbmUgYmVmb3JlIHRoZSBjdXJyZW50IGNoYW5nZSBncm91cCwgaXMgZXF1YWwgdG8KKwkJCSAqIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGN1cnJlbnQgY2hhbmdlIGdyb3VwLCBzaGlmdCBiYWNrd2FyZAorCQkJICogdGhlIGdyb3VwLgorCQkJICovCisJCQl3aGlsZSAoaXhzID4gMCAmJiByZWNzW2l4cyAtIDFdLT5oYSA9PSByZWNzW2l4IC0gMV0tPmhhICYmCisJCQkgICAgICAgeGRsX3JlY21hdGNoKHJlY3NbaXhzIC0gMV0tPnB0ciwgcmVjc1tpeHMgLSAxXS0+c2l6ZSwgcmVjc1tpeCAtIDFdLT5wdHIsIHJlY3NbaXggLSAxXS0+c2l6ZSwgZmxhZ3MpKSB7CisJCQkJcmNoZ1stLWl4c10gPSAxOworCQkJCXJjaGdbLS1peF0gPSAwOworCisJCQkJLyoKKwkJCQkgKiBUaGlzIGNoYW5nZSBtaWdodCBoYXZlIGpvaW5lZCB0d28gY2hhbmdlIGdyb3VwcywKKwkJCQkgKiBzbyB3ZSB0cnkgdG8gdGFrZSB0aGlzIHNjZW5hcmlvIGluIGFjY291bnQgYnkgbW92aW5nCisJCQkJICogdGhlIHN0YXJ0IGluZGV4IGFjY29yZGluZ2x5IChhbmQgc28gdGhlIG90aGVyLWZpbGUKKwkJCQkgKiBlbmQtb2YtZ3JvdXAgaW5kZXgpLgorCQkJCSAqLworCQkJCWZvciAoOyByY2hnW2l4cyAtIDFdOyBpeHMtLSk7CisJCQkJd2hpbGUgKHJjaGdvWy0taXhvXSk7CisJCQl9CisKKwkJCS8qCisJCQkgKiBSZWNvcmQgdGhlIGVuZC1vZi1ncm91cCBwb3NpdGlvbiBpbiBjYXNlIHdlIGFyZSBtYXRjaGVkCisJCQkgKiB3aXRoIGEgZ3JvdXAgb2YgY2hhbmdlcyBpbiB0aGUgb3RoZXIgZmlsZSAodGhhdCBpcywgdGhlCisJCQkgKiBjaGFuZ2UgcmVjb3JkIGJlZm9yZSB0aGUgZW5kLW9mLWdyb3VwIGluZGV4IGluIHRoZSBvdGhlcgorCQkJICogZmlsZSBpcyBzZXQpLgorCQkJICovCisJCQlpeHJlZiA9IHJjaGdvW2l4byAtIDFdID8gaXg6IG5yZWM7CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgZmlyc3QgbGluZSBvZiB0aGUgY3VycmVudCBjaGFuZ2UgZ3JvdXAsIGlzIGVxdWFsIHRvCisJCQkgKiB0aGUgbGluZSBuZXh0IG9mIHRoZSBjdXJyZW50IGNoYW5nZSBncm91cCwgc2hpZnQgZm9yd2FyZAorCQkJICogdGhlIGdyb3VwLgorCQkJICovCisJCQl3aGlsZSAoaXggPCBucmVjICYmIHJlY3NbaXhzXS0+aGEgPT0gcmVjc1tpeF0tPmhhICYmCisJCQkgICAgICAgeGRsX3JlY21hdGNoKHJlY3NbaXhzXS0+cHRyLCByZWNzW2l4c10tPnNpemUsIHJlY3NbaXhdLT5wdHIsIHJlY3NbaXhdLT5zaXplLCBmbGFncykpIHsKKwkJCQlyY2hnW2l4cysrXSA9IDA7CisJCQkJcmNoZ1tpeCsrXSA9IDE7CisKKwkJCQkvKgorCQkJCSAqIFRoaXMgY2hhbmdlIG1pZ2h0IGhhdmUgam9pbmVkIHR3byBjaGFuZ2UgZ3JvdXBzLAorCQkJCSAqIHNvIHdlIHRyeSB0byB0YWtlIHRoaXMgc2NlbmFyaW8gaW4gYWNjb3VudCBieSBtb3ZpbmcKKwkJCQkgKiB0aGUgc3RhcnQgaW5kZXggYWNjb3JkaW5nbHkgKGFuZCBzbyB0aGUgb3RoZXItZmlsZQorCQkJCSAqIGVuZC1vZi1ncm91cCBpbmRleCkuIEtlZXAgdHJhY2tpbmcgdGhlIHJlZmVyZW5jZQorCQkJCSAqIGluZGV4IGluIGNhc2Ugd2UgYXJlIHNoaWZ0aW5nIHRvZ2V0aGVyIHdpdGggYQorCQkJCSAqIGNvcnJlc3BvbmRpbmcgZ3JvdXAgb2YgY2hhbmdlcyBpbiB0aGUgb3RoZXIgZmlsZS4KKwkJCQkgKi8KKwkJCQlmb3IgKDsgcmNoZ1tpeF07IGl4KyspOworCQkJCXdoaWxlIChyY2hnb1srK2l4b10pCisJCQkJCWl4cmVmID0gaXg7CisJCQl9CisJCX0gd2hpbGUgKGdycHNpeiAhPSBpeCAtIGl4cyk7CisKKwkJLyoKKwkJICogVHJ5IHRvIG1vdmUgYmFjayB0aGUgcG9zc2libHkgbWVyZ2VkIGdyb3VwIG9mIGNoYW5nZXMsIHRvIG1hdGNoCisJCSAqIHRoZSByZWNvcmRlZCBwb3NpdGlvbiBpbiB0aGUgb3RoZXIgZmlsZS4KKwkJICovCisJCXdoaWxlIChpeHJlZiA8IGl4KSB7CisJCQlyY2hnWy0taXhzXSA9IDE7CisJCQlyY2hnWy0taXhdID0gMDsKKwkJCXdoaWxlIChyY2hnb1stLWl4b10pOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworaW50IHhkbF9idWlsZF9zY3JpcHQoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICoqeHNjcikgeworCXhkY2hhbmdlX3QgKmNzY3IgPSBOVUxMLCAqeGNoOworCWNoYXIgKnJjaGcxID0geGUtPnhkZjEucmNoZywgKnJjaGcyID0geGUtPnhkZjIucmNoZzsKKwlsb25nIGkxLCBpMiwgbDEsIGwyOworCisJLyoKKwkgKiBUcml2aWFsLiBDb2xsZWN0cyAiZ3JvdXBzIiBvZiBjaGFuZ2VzIGFuZCBjcmVhdGVzIGFuIGVkaXQgc2NyaXB0LgorCSAqLworCWZvciAoaTEgPSB4ZS0+eGRmMS5ucmVjLCBpMiA9IHhlLT54ZGYyLm5yZWM7IGkxID49IDAgfHwgaTIgPj0gMDsgaTEtLSwgaTItLSkKKwkJaWYgKHJjaGcxW2kxIC0gMV0gfHwgcmNoZzJbaTIgLSAxXSkgeworCQkJZm9yIChsMSA9IGkxOyByY2hnMVtpMSAtIDFdOyBpMS0tKTsKKwkJCWZvciAobDIgPSBpMjsgcmNoZzJbaTIgLSAxXTsgaTItLSk7CisKKwkJCWlmICghKHhjaCA9IHhkbF9hZGRfY2hhbmdlKGNzY3IsIGkxLCBpMiwgbDEgLSBpMSwgbDIgLSBpMikpKSB7CisJCQkJeGRsX2ZyZWVfc2NyaXB0KGNzY3IpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWNzY3IgPSB4Y2g7CisJCX0KKworCSp4c2NyID0gY3NjcjsKKworCXJldHVybiAwOworfQorCisKK3ZvaWQgeGRsX2ZyZWVfc2NyaXB0KHhkY2hhbmdlX3QgKnhzY3IpIHsKKwl4ZGNoYW5nZV90ICp4Y2g7CisKKwl3aGlsZSAoKHhjaCA9IHhzY3IpICE9IE5VTEwpIHsKKwkJeHNjciA9IHhzY3ItPm5leHQ7CisJCXhkbF9mcmVlKHhjaCk7CisJfQorfQorCitzdGF0aWMgaW50IHhkbF9jYWxsX2h1bmtfZnVuYyh4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNiX3QgKmVjYiwKKwkJCSAgICAgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpCit7CisJeGRjaGFuZ2VfdCAqeGNoLCAqeGNoZTsKKworCWZvciAoeGNoID0geHNjcjsgeGNoOyB4Y2ggPSB4Y2hlLT5uZXh0KSB7CisJCXhjaGUgPSB4ZGxfZ2V0X2h1bmsoJnhjaCwgeGVjZmcpOworCQlpZiAoIXhjaCkKKwkJCWJyZWFrOworCQlpZiAoeGVjZmctPmh1bmtfZnVuYyh4Y2gtPmkxLCB4Y2hlLT5pMSArIHhjaGUtPmNoZzEgLSB4Y2gtPmkxLAorCQkJCSAgICAgeGNoLT5pMiwgeGNoZS0+aTIgKyB4Y2hlLT5jaGcyIC0geGNoLT5pMiwKKwkJCQkgICAgIGVjYi0+cHJpdikgPCAwKQorCQkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgeGRsX21hcmtfaWdub3JhYmxlKHhkY2hhbmdlX3QgKnhzY3IsIHhkZmVudl90ICp4ZSwgbG9uZyBmbGFncykKK3sKKwl4ZGNoYW5nZV90ICp4Y2g7CisKKwlmb3IgKHhjaCA9IHhzY3I7IHhjaDsgeGNoID0geGNoLT5uZXh0KSB7CisJCWludCBpZ25vcmUgPSAxOworCQl4cmVjb3JkX3QgKipyZWM7CisJCWxvbmcgaTsKKworCQlyZWMgPSAmeGUtPnhkZjEucmVjc1t4Y2gtPmkxXTsKKwkJZm9yIChpID0gMDsgaSA8IHhjaC0+Y2hnMSAmJiBpZ25vcmU7IGkrKykKKwkJCWlnbm9yZSA9IHhkbF9ibGFua2xpbmUocmVjW2ldLT5wdHIsIHJlY1tpXS0+c2l6ZSwgZmxhZ3MpOworCisJCXJlYyA9ICZ4ZS0+eGRmMi5yZWNzW3hjaC0+aTJdOworCQlmb3IgKGkgPSAwOyBpIDwgeGNoLT5jaGcyICYmIGlnbm9yZTsgaSsrKQorCQkJaWdub3JlID0geGRsX2JsYW5rbGluZShyZWNbaV0tPnB0ciwgcmVjW2ldLT5zaXplLCBmbGFncyk7CisKKwkJeGNoLT5pZ25vcmUgPSBpZ25vcmU7CisJfQorfQorCitpbnQgeGRsX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJICAgICB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnLCB4ZGVtaXRjYl90ICplY2IpIHsKKwl4ZGNoYW5nZV90ICp4c2NyOworCXhkZmVudl90IHhlOworCWVtaXRfZnVuY190IGVmID0geGVjZmctPmh1bmtfZnVuYyA/IHhkbF9jYWxsX2h1bmtfZnVuYyA6IHhkbF9lbWl0X2RpZmY7CisKKwlpZiAoeGRsX2RvX2RpZmYobWYxLCBtZjIsIHhwcCwgJnhlKSA8IDApIHsKKworCQlyZXR1cm4gLTE7CisJfQorCWlmICh4ZGxfY2hhbmdlX2NvbXBhY3QoJnhlLnhkZjEsICZ4ZS54ZGYyLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkgICAgeGRsX2NoYW5nZV9jb21wYWN0KCZ4ZS54ZGYyLCAmeGUueGRmMSwgeHBwLT5mbGFncykgPCAwIHx8CisJICAgIHhkbF9idWlsZF9zY3JpcHQoJnhlLCAmeHNjcikgPCAwKSB7CisKKwkJeGRsX2ZyZWVfZW52KCZ4ZSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHhzY3IpIHsKKwkJaWYgKHhwcC0+ZmxhZ3MgJiBYREZfSUdOT1JFX0JMQU5LX0xJTkVTKQorCQkJeGRsX21hcmtfaWdub3JhYmxlKHhzY3IsICZ4ZSwgeHBwLT5mbGFncyk7CisKKwkJaWYgKGVmKCZ4ZSwgeHNjciwgZWNiLCB4ZWNmZykgPCAwKSB7CisKKwkJCXhkbF9mcmVlX3NjcmlwdCh4c2NyKTsKKwkJCXhkbF9mcmVlX2VudigmeGUpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXhkbF9mcmVlX3NjcmlwdCh4c2NyKTsKKwl9CisJeGRsX2ZyZWVfZW52KCZ4ZSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3hkaWZmL3hkaWZmaS5oIGIveGRpZmYveGRpZmZpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI4MTIwNgotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hkaWZmaS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWERJRkZJX0gpCisjZGVmaW5lIFhESUZGSV9ICisKKwordHlwZWRlZiBzdHJ1Y3Qgc19kaWZmZGF0YSB7CisJbG9uZyBucmVjOworCXVuc2lnbmVkIGxvbmcgY29uc3QgKmhhOworCWxvbmcgKnJpbmRleDsKKwljaGFyICpyY2hnOworfSBkaWZmZGF0YV90OworCit0eXBlZGVmIHN0cnVjdCBzX3hkYWxnb2VudiB7CisJbG9uZyBteGNvc3Q7CisJbG9uZyBzbmFrZV9jbnQ7CisJbG9uZyBoZXVyX21pbjsKK30geGRhbGdvZW52X3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfeGRjaGFuZ2UgeworCXN0cnVjdCBzX3hkY2hhbmdlICpuZXh0OworCWxvbmcgaTEsIGkyOworCWxvbmcgY2hnMSwgY2hnMjsKKwlpbnQgaWdub3JlOworfSB4ZGNoYW5nZV90OworCisKKworaW50IHhkbF9yZWNzX2NtcChkaWZmZGF0YV90ICpkZDEsIGxvbmcgb2ZmMSwgbG9uZyBsaW0xLAorCQkgZGlmZmRhdGFfdCAqZGQyLCBsb25nIG9mZjIsIGxvbmcgbGltMiwKKwkJIGxvbmcgKmt2ZGYsIGxvbmcgKmt2ZGIsIGludCBuZWVkX21pbiwgeGRhbGdvZW52X3QgKnhlbnYpOworaW50IHhkbF9kb19kaWZmKG1tZmlsZV90ICptZjEsIG1tZmlsZV90ICptZjIsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQl4ZGZlbnZfdCAqeGUpOworaW50IHhkbF9jaGFuZ2VfY29tcGFjdCh4ZGZpbGVfdCAqeGRmLCB4ZGZpbGVfdCAqeGRmbywgbG9uZyBmbGFncyk7CitpbnQgeGRsX2J1aWxkX3NjcmlwdCh4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKip4c2NyKTsKK3ZvaWQgeGRsX2ZyZWVfc2NyaXB0KHhkY2hhbmdlX3QgKnhzY3IpOworaW50IHhkbF9lbWl0X2RpZmYoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICp4c2NyLCB4ZGVtaXRjYl90ICplY2IsCisJCSAgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZyk7CitpbnQgeGRsX2RvX3BhdGllbmNlX2RpZmYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCXhkZmVudl90ICplbnYpOworaW50IHhkbF9kb19oaXN0b2dyYW1fZGlmZihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJeGRmZW52X3QgKmVudik7CisKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoWERJRkZJX0gpICovCmRpZmYgLS1naXQgYS94ZGlmZi94ZW1pdC5jIGIveGRpZmYveGVtaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjY2YWRhCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveGVtaXQuYwpAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMwlEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2luY2x1ZGUgInhpbmNsdWRlLmgiCisKKworCisKK3N0YXRpYyBsb25nIHhkbF9nZXRfcmVjKHhkZmlsZV90ICp4ZGYsIGxvbmcgcmksIGNoYXIgY29uc3QgKipyZWMpOworc3RhdGljIGludCB4ZGxfZW1pdF9yZWNvcmQoeGRmaWxlX3QgKnhkZiwgbG9uZyByaSwgY2hhciBjb25zdCAqcHJlLCB4ZGVtaXRjYl90ICplY2IpOworCisKKworCitzdGF0aWMgbG9uZyB4ZGxfZ2V0X3JlYyh4ZGZpbGVfdCAqeGRmLCBsb25nIHJpLCBjaGFyIGNvbnN0ICoqcmVjKSB7CisKKwkqcmVjID0geGRmLT5yZWNzW3JpXS0+cHRyOworCisJcmV0dXJuIHhkZi0+cmVjc1tyaV0tPnNpemU7Cit9CisKKworc3RhdGljIGludCB4ZGxfZW1pdF9yZWNvcmQoeGRmaWxlX3QgKnhkZiwgbG9uZyByaSwgY2hhciBjb25zdCAqcHJlLCB4ZGVtaXRjYl90ICplY2IpIHsKKwlsb25nIHNpemUsIHBzaXplID0gc3RybGVuKHByZSk7CisJY2hhciBjb25zdCAqcmVjOworCisJc2l6ZSA9IHhkbF9nZXRfcmVjKHhkZiwgcmksICZyZWMpOworCWlmICh4ZGxfZW1pdF9kaWZmcmVjKHJlYywgc2l6ZSwgcHJlLCBwc2l6ZSwgZWNiKSA8IDApIHsKKworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFN0YXJ0aW5nIGF0IHRoZSBwYXNzZWQgY2hhbmdlIGF0b20sIGZpbmQgdGhlIGxhdGVzdCBjaGFuZ2UgYXRvbSB0byBiZSBpbmNsdWRlZAorICogaW5zaWRlIHRoZSBkaWZmZXJlbnRpYWwgaHVuayBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uLgorICogQWxzbyBhZHZhbmNlIHhzY3IgaWYgdGhlIGZpcnN0IGNoYW5nZXMgbXVzdCBiZSBkaXNjYXJkZWQuCisgKi8KK3hkY2hhbmdlX3QgKnhkbF9nZXRfaHVuayh4ZGNoYW5nZV90ICoqeHNjciwgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZykKK3sKKwl4ZGNoYW5nZV90ICp4Y2gsICp4Y2hwLCAqbHhjaDsKKwlsb25nIG1heF9jb21tb24gPSAyICogeGVjZmctPmN0eGxlbiArIHhlY2ZnLT5pbnRlcmh1bmtjdHhsZW47CisJbG9uZyBtYXhfaWdub3JhYmxlID0geGVjZmctPmN0eGxlbjsKKwl1bnNpZ25lZCBsb25nIGlnbm9yZWQgPSAwOyAvKiBudW1iZXIgb2YgaWdub3JlZCBibGFuayBsaW5lcyAqLworCisJLyogcmVtb3ZlIGlnbm9yYWJsZSBjaGFuZ2VzIHRoYXQgYXJlIHRvbyBmYXIgYmVmb3JlIG90aGVyIGNoYW5nZXMgKi8KKwlmb3IgKHhjaHAgPSAqeHNjcjsgeGNocCAmJiB4Y2hwLT5pZ25vcmU7IHhjaHAgPSB4Y2hwLT5uZXh0KSB7CisJCXhjaCA9IHhjaHAtPm5leHQ7CisKKwkJaWYgKHhjaCA9PSBOVUxMIHx8CisJCSAgICB4Y2gtPmkxIC0gKHhjaHAtPmkxICsgeGNocC0+Y2hnMSkgPj0gbWF4X2lnbm9yYWJsZSkKKwkJCSp4c2NyID0geGNoOworCX0KKworCWlmICgqeHNjciA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWx4Y2ggPSAqeHNjcjsKKworCWZvciAoeGNocCA9ICp4c2NyLCB4Y2ggPSB4Y2hwLT5uZXh0OyB4Y2g7IHhjaHAgPSB4Y2gsIHhjaCA9IHhjaC0+bmV4dCkgeworCQlsb25nIGRpc3RhbmNlID0geGNoLT5pMSAtICh4Y2hwLT5pMSArIHhjaHAtPmNoZzEpOworCQlpZiAoZGlzdGFuY2UgPiBtYXhfY29tbW9uKQorCQkJYnJlYWs7CisKKwkJaWYgKGRpc3RhbmNlIDwgbWF4X2lnbm9yYWJsZSAmJiAoIXhjaC0+aWdub3JlIHx8IGx4Y2ggPT0geGNocCkpIHsKKwkJCWx4Y2ggPSB4Y2g7CisJCQlpZ25vcmVkID0gMDsKKwkJfSBlbHNlIGlmIChkaXN0YW5jZSA8IG1heF9pZ25vcmFibGUgJiYgeGNoLT5pZ25vcmUpIHsKKwkJCWlnbm9yZWQgKz0geGNoLT5jaGcyOworCQl9IGVsc2UgaWYgKGx4Y2ggIT0geGNocCAmJgorCQkJICAgeGNoLT5pMSArIGlnbm9yZWQgLSAobHhjaC0+aTEgKyBseGNoLT5jaGcxKSA+IG1heF9jb21tb24pIHsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKCF4Y2gtPmlnbm9yZSkgeworCQkJbHhjaCA9IHhjaDsKKwkJCWlnbm9yZWQgPSAwOworCQl9IGVsc2UgeworCQkJaWdub3JlZCArPSB4Y2gtPmNoZzI7CisJCX0KKwl9CisKKwlyZXR1cm4gbHhjaDsKK30KKworCitzdGF0aWMgbG9uZyBkZWZfZmYoY29uc3QgY2hhciAqcmVjLCBsb25nIGxlbiwgY2hhciAqYnVmLCBsb25nIHN6LCB2b2lkICpwcml2KQoreworCWlmIChsZW4gPiAwICYmCisJCQkoaXNhbHBoYSgodW5zaWduZWQgY2hhcikqcmVjKSB8fCAvKiBpZGVudGlmaWVyPyAqLworCQkJICpyZWMgPT0gJ18nIHx8IC8qIGFsc28gaWRlbnRpZmllcj8gKi8KKwkJCSAqcmVjID09ICckJykpIHsgLyogaWRlbnRpZmllcnMgZnJvbSBWTVMgYW5kIG90aGVyIGVzb3RlcmljbyAqLworCQlpZiAobGVuID4gc3opCisJCQlsZW4gPSBzejsKKwkJd2hpbGUgKDAgPCBsZW4gJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcilyZWNbbGVuIC0gMV0pKQorCQkJbGVuLS07CisJCW1lbWNweShidWYsIHJlYywgbGVuKTsKKwkJcmV0dXJuIGxlbjsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHhkbF9lbWl0X2NvbW1vbih4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNiX3QgKmVjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpIHsKKwl4ZGZpbGVfdCAqeGRmID0gJnhlLT54ZGYyOworCWNvbnN0IGNoYXIgKnJjaGcgPSB4ZGYtPnJjaGc7CisJbG9uZyBpeDsKKworCWZvciAoaXggPSAwOyBpeCA8IHhkZi0+bnJlYzsgaXgrKykgeworCQlpZiAocmNoZ1tpeF0pCisJCQljb250aW51ZTsKKwkJaWYgKHhkbF9lbWl0X3JlY29yZCh4ZGYsIGl4LCAiIiwgZWNiKSkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBmdW5jX2xpbmUgeworCWxvbmcgbGVuOworCWNoYXIgYnVmWzgwXTsKK307CisKK3N0YXRpYyBsb25nIGdldF9mdW5jX2xpbmUoeGRmZW52X3QgKnhlLCB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnLAorCQkJICBzdHJ1Y3QgZnVuY19saW5lICpmdW5jX2xpbmUsIGxvbmcgc3RhcnQsIGxvbmcgbGltaXQpCit7CisJZmluZF9mdW5jX3QgZmYgPSB4ZWNmZy0+ZmluZF9mdW5jID8geGVjZmctPmZpbmRfZnVuYyA6IGRlZl9mZjsKKwlsb25nIGwsIHNpemUsIHN0ZXAgPSAoc3RhcnQgPiBsaW1pdCkgPyAtMSA6IDE7CisJY2hhciAqYnVmLCBkdW1teVsxXTsKKworCWJ1ZiA9IGZ1bmNfbGluZSA/IGZ1bmNfbGluZS0+YnVmIDogZHVtbXk7CisJc2l6ZSA9IGZ1bmNfbGluZSA/IHNpemVvZihmdW5jX2xpbmUtPmJ1ZikgOiBzaXplb2YoZHVtbXkpOworCisJZm9yIChsID0gc3RhcnQ7IGwgIT0gbGltaXQgJiYgMCA8PSBsICYmIGwgPCB4ZS0+eGRmMS5ucmVjOyBsICs9IHN0ZXApIHsKKwkJY29uc3QgY2hhciAqcmVjOworCQlsb25nIHJlY2xlbiA9IHhkbF9nZXRfcmVjKCZ4ZS0+eGRmMSwgbCwgJnJlYyk7CisJCWxvbmcgbGVuID0gZmYocmVjLCByZWNsZW4sIGJ1Ziwgc2l6ZSwgeGVjZmctPmZpbmRfZnVuY19wcml2KTsKKwkJaWYgKGxlbiA+PSAwKSB7CisJCQlpZiAoZnVuY19saW5lKQorCQkJCWZ1bmNfbGluZS0+bGVuID0gbGVuOworCQkJcmV0dXJuIGw7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCitpbnQgeGRsX2VtaXRfZGlmZih4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNiX3QgKmVjYiwKKwkJICB4ZGVtaXRjb25mX3QgY29uc3QgKnhlY2ZnKSB7CisJbG9uZyBzMSwgczIsIGUxLCBlMiwgbGN0eDsKKwl4ZGNoYW5nZV90ICp4Y2gsICp4Y2hlOworCWxvbmcgZnVuY2xpbmVwcmV2ID0gLTE7CisJc3RydWN0IGZ1bmNfbGluZSBmdW5jX2xpbmUgPSB7IDAgfTsKKworCWlmICh4ZWNmZy0+ZmxhZ3MgJiBYRExfRU1JVF9DT01NT04pCisJCXJldHVybiB4ZGxfZW1pdF9jb21tb24oeGUsIHhzY3IsIGVjYiwgeGVjZmcpOworCisJZm9yICh4Y2ggPSB4c2NyOyB4Y2g7IHhjaCA9IHhjaGUtPm5leHQpIHsKKwkJeGNoZSA9IHhkbF9nZXRfaHVuaygmeGNoLCB4ZWNmZyk7CisJCWlmICgheGNoKQorCQkJYnJlYWs7CisKKwkJczEgPSBYRExfTUFYKHhjaC0+aTEgLSB4ZWNmZy0+Y3R4bGVuLCAwKTsKKwkJczIgPSBYRExfTUFYKHhjaC0+aTIgLSB4ZWNmZy0+Y3R4bGVuLCAwKTsKKworCQlpZiAoeGVjZmctPmZsYWdzICYgWERMX0VNSVRfRlVOQ0NPTlRFWFQpIHsKKwkJCWxvbmcgZnMxID0gZ2V0X2Z1bmNfbGluZSh4ZSwgeGVjZmcsIE5VTEwsIHhjaC0+aTEsIC0xKTsKKwkJCWlmIChmczEgPCAwKQorCQkJCWZzMSA9IDA7CisJCQlpZiAoZnMxIDwgczEpIHsKKwkJCQlzMiAtPSBzMSAtIGZzMTsKKwkJCQlzMSA9IGZzMTsKKwkJCX0KKwkJfQorCisgYWdhaW46CisJCWxjdHggPSB4ZWNmZy0+Y3R4bGVuOworCQlsY3R4ID0gWERMX01JTihsY3R4LCB4ZS0+eGRmMS5ucmVjIC0gKHhjaGUtPmkxICsgeGNoZS0+Y2hnMSkpOworCQlsY3R4ID0gWERMX01JTihsY3R4LCB4ZS0+eGRmMi5ucmVjIC0gKHhjaGUtPmkyICsgeGNoZS0+Y2hnMikpOworCisJCWUxID0geGNoZS0+aTEgKyB4Y2hlLT5jaGcxICsgbGN0eDsKKwkJZTIgPSB4Y2hlLT5pMiArIHhjaGUtPmNoZzIgKyBsY3R4OworCisJCWlmICh4ZWNmZy0+ZmxhZ3MgJiBYRExfRU1JVF9GVU5DQ09OVEVYVCkgeworCQkJbG9uZyBmZTEgPSBnZXRfZnVuY19saW5lKHhlLCB4ZWNmZywgTlVMTCwKKwkJCQkJCSB4Y2hlLT5pMSArIHhjaGUtPmNoZzEsCisJCQkJCQkgeGUtPnhkZjEubnJlYyk7CisJCQlpZiAoZmUxIDwgMCkKKwkJCQlmZTEgPSB4ZS0+eGRmMS5ucmVjOworCQkJaWYgKGZlMSA+IGUxKSB7CisJCQkJZTIgKz0gZmUxIC0gZTE7CisJCQkJZTEgPSBmZTE7CisJCQl9CisKKwkJCS8qCisJCQkgKiBPdmVybGFwIHdpdGggbmV4dCBjaGFuZ2U/ICBUaGVuIGluY2x1ZGUgaXQKKwkJCSAqIGluIHRoZSBjdXJyZW50IGh1bmsgYW5kIHN0YXJ0IG92ZXIgdG8gZmluZAorCQkJICogaXRzIG5ldyBlbmQuCisJCQkgKi8KKwkJCWlmICh4Y2hlLT5uZXh0KSB7CisJCQkJbG9uZyBsID0geGNoZS0+bmV4dC0+aTE7CisJCQkJaWYgKGwgPD0gZTEgfHwKKwkJCQkgICAgZ2V0X2Z1bmNfbGluZSh4ZSwgeGVjZmcsIE5VTEwsIGwsIGUxKSA8IDApIHsKKwkJCQkJeGNoZSA9IHhjaGUtPm5leHQ7CisJCQkJCWdvdG8gYWdhaW47CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyoKKwkJICogRW1pdCBjdXJyZW50IGh1bmsgaGVhZGVyLgorCQkgKi8KKworCQlpZiAoeGVjZmctPmZsYWdzICYgWERMX0VNSVRfRlVOQ05BTUVTKSB7CisJCQlnZXRfZnVuY19saW5lKHhlLCB4ZWNmZywgJmZ1bmNfbGluZSwKKwkJCQkgICAgICBzMSAtIDEsIGZ1bmNsaW5lcHJldik7CisJCQlmdW5jbGluZXByZXYgPSBzMSAtIDE7CisJCX0KKwkJaWYgKHhkbF9lbWl0X2h1bmtfaGRyKHMxICsgMSwgZTEgLSBzMSwgczIgKyAxLCBlMiAtIHMyLAorCQkJCSAgICAgIGZ1bmNfbGluZS5idWYsIGZ1bmNfbGluZS5sZW4sIGVjYikgPCAwKQorCQkJcmV0dXJuIC0xOworCisJCS8qCisJCSAqIEVtaXQgcHJlLWNvbnRleHQuCisJCSAqLworCQlmb3IgKDsgczIgPCB4Y2gtPmkyOyBzMisrKQorCQkJaWYgKHhkbF9lbWl0X3JlY29yZCgmeGUtPnhkZjIsIHMyLCAiICIsIGVjYikgPCAwKQorCQkJCXJldHVybiAtMTsKKworCQlmb3IgKHMxID0geGNoLT5pMSwgczIgPSB4Y2gtPmkyOzsgeGNoID0geGNoLT5uZXh0KSB7CisJCQkvKgorCQkJICogTWVyZ2UgcHJldmlvdXMgd2l0aCBjdXJyZW50IGNoYW5nZSBhdG9tLgorCQkJICovCisJCQlmb3IgKDsgczEgPCB4Y2gtPmkxICYmIHMyIDwgeGNoLT5pMjsgczErKywgczIrKykKKwkJCQlpZiAoeGRsX2VtaXRfcmVjb3JkKCZ4ZS0+eGRmMiwgczIsICIgIiwgZWNiKSA8IDApCisJCQkJCXJldHVybiAtMTsKKworCQkJLyoKKwkJCSAqIFJlbW92ZXMgbGluZXMgZnJvbSB0aGUgZmlyc3QgZmlsZS4KKwkJCSAqLworCQkJZm9yIChzMSA9IHhjaC0+aTE7IHMxIDwgeGNoLT5pMSArIHhjaC0+Y2hnMTsgczErKykKKwkJCQlpZiAoeGRsX2VtaXRfcmVjb3JkKCZ4ZS0+eGRmMSwgczEsICItIiwgZWNiKSA8IDApCisJCQkJCXJldHVybiAtMTsKKworCQkJLyoKKwkJCSAqIEFkZHMgbGluZXMgZnJvbSB0aGUgc2Vjb25kIGZpbGUuCisJCQkgKi8KKwkJCWZvciAoczIgPSB4Y2gtPmkyOyBzMiA8IHhjaC0+aTIgKyB4Y2gtPmNoZzI7IHMyKyspCisJCQkJaWYgKHhkbF9lbWl0X3JlY29yZCgmeGUtPnhkZjIsIHMyLCAiKyIsIGVjYikgPCAwKQorCQkJCQlyZXR1cm4gLTE7CisKKwkJCWlmICh4Y2ggPT0geGNoZSkKKwkJCQlicmVhazsKKwkJCXMxID0geGNoLT5pMSArIHhjaC0+Y2hnMTsKKwkJCXMyID0geGNoLT5pMiArIHhjaC0+Y2hnMjsKKwkJfQorCisJCS8qCisJCSAqIEVtaXQgcG9zdC1jb250ZXh0LgorCQkgKi8KKwkJZm9yIChzMiA9IHhjaGUtPmkyICsgeGNoZS0+Y2hnMjsgczIgPCBlMjsgczIrKykKKwkJCWlmICh4ZGxfZW1pdF9yZWNvcmQoJnhlLT54ZGYyLCBzMiwgIiAiLCBlY2IpIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94ZW1pdC5oIGIveGRpZmYveGVtaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjk3MTA3Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveGVtaXQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhFTUlUX0gpCisjZGVmaW5lIFhFTUlUX0gKKworCit0eXBlZGVmIGludCAoKmVtaXRfZnVuY190KSh4ZGZlbnZfdCAqeGUsIHhkY2hhbmdlX3QgKnhzY3IsIHhkZW1pdGNiX3QgKmVjYiwKKwkJCSAgIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpOworCit4ZGNoYW5nZV90ICp4ZGxfZ2V0X2h1bmsoeGRjaGFuZ2VfdCAqKnhzY3IsIHhkZW1pdGNvbmZfdCBjb25zdCAqeGVjZmcpOworaW50IHhkbF9lbWl0X2RpZmYoeGRmZW52X3QgKnhlLCB4ZGNoYW5nZV90ICp4c2NyLCB4ZGVtaXRjYl90ICplY2IsCisJCSAgeGRlbWl0Y29uZl90IGNvbnN0ICp4ZWNmZyk7CisKKworCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKFhFTUlUX0gpICovCmRpZmYgLS1naXQgYS94ZGlmZi94aGlzdG9ncmFtLmMgYi94ZGlmZi94aGlzdG9ncmFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyMTBjYgotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3hoaXN0b2dyYW0uYwpAQCAtMCwwICsxLDM2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gSkdpdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJ4aW5jbHVkZS5oIgorI2luY2x1ZGUgInh0eXBlcy5oIgorI2luY2x1ZGUgInhkaWZmLmgiCisKKyNkZWZpbmUgTUFYX1BUUglVSU5UX01BWAorI2RlZmluZSBNQVhfQ05UCVVJTlRfTUFYCisKKyNkZWZpbmUgTElORV9FTkQobikgKGxpbmUjI24gKyBjb3VudCMjbiAtIDEpCisjZGVmaW5lIExJTkVfRU5EX1BUUihuKSAoKmxpbmUjI24gKyAqY291bnQjI24gLSAxKQorCitzdHJ1Y3QgaGlzdGluZGV4IHsKKwlzdHJ1Y3QgcmVjb3JkIHsKKwkJdW5zaWduZWQgaW50IHB0ciwgY250OworCQlzdHJ1Y3QgcmVjb3JkICpuZXh0OworCX0gKipyZWNvcmRzLCAvKiBhbiBvY2N1cnJlbmNlICovCisJICAqKmxpbmVfbWFwOyAvKiBtYXAgb2YgbGluZSB0byByZWNvcmQgY2hhaW4gKi8KKwljaGFzdG9yZV90IHJjaGE7CisJdW5zaWduZWQgaW50ICpuZXh0X3B0cnM7CisJdW5zaWduZWQgaW50IHRhYmxlX2JpdHMsCisJCSAgICAgcmVjb3Jkc19zaXplLAorCQkgICAgIGxpbmVfbWFwX3NpemU7CisKKwl1bnNpZ25lZCBpbnQgbWF4X2NoYWluX2xlbmd0aCwKKwkJICAgICBrZXlfc2hpZnQsCisJCSAgICAgcHRyX3NoaWZ0OworCisJdW5zaWduZWQgaW50IGNudCwKKwkJICAgICBoYXNfY29tbW9uOworCisJeGRmZW52X3QgKmVudjsKKwl4cHBhcmFtX3QgY29uc3QgKnhwcDsKK307CisKK3N0cnVjdCByZWdpb24geworCXVuc2lnbmVkIGludCBiZWdpbjEsIGVuZDE7CisJdW5zaWduZWQgaW50IGJlZ2luMiwgZW5kMjsKK307CisKKyNkZWZpbmUgTElORV9NQVAoaSwgYSkgKGktPmxpbmVfbWFwWyhhKSAtIGktPnB0cl9zaGlmdF0pCisKKyNkZWZpbmUgTkVYVF9QVFIoaW5kZXgsIHB0cikgXAorCShpbmRleC0+bmV4dF9wdHJzWyhwdHIpIC0gaW5kZXgtPnB0cl9zaGlmdF0pCisKKyNkZWZpbmUgQ05UKGluZGV4LCBwdHIpIFwKKwkoKExJTkVfTUFQKGluZGV4LCBwdHIpKS0+Y250KQorCisjZGVmaW5lIFJFQyhlbnYsIHMsIGwpIFwKKwkoZW52LT54ZGYjI3MucmVjc1tsIC0gMV0pCisKK3N0YXRpYyBpbnQgY21wX3JlY3MoeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJeHJlY29yZF90ICpyMSwgeHJlY29yZF90ICpyMikKK3sKKwlyZXR1cm4gcjEtPmhhID09IHIyLT5oYSAmJgorCQl4ZGxfcmVjbWF0Y2gocjEtPnB0ciwgcjEtPnNpemUsIHIyLT5wdHIsIHIyLT5zaXplLAorCQkJICAgIHhwcC0+ZmxhZ3MpOworfQorCisjZGVmaW5lIENNUF9FTlYoeHBwLCBlbnYsIHMxLCBsMSwgczIsIGwyKSBcCisJKGNtcF9yZWNzKHhwcCwgUkVDKGVudiwgczEsIGwxKSwgUkVDKGVudiwgczIsIGwyKSkpCisKKyNkZWZpbmUgQ01QKGksIHMxLCBsMSwgczIsIGwyKSBcCisJKGNtcF9yZWNzKGktPnhwcCwgUkVDKGktPmVudiwgczEsIGwxKSwgUkVDKGktPmVudiwgczIsIGwyKSkpCisKKyNkZWZpbmUgVEFCTEVfSEFTSChpbmRleCwgc2lkZSwgbGluZSkgXAorCVhETF9IQVNITE9ORygoUkVDKGluZGV4LT5lbnYsIHNpZGUsIGxpbmUpKS0+aGEsIGluZGV4LT50YWJsZV9iaXRzKQorCitzdGF0aWMgaW50IHNjYW5BKHN0cnVjdCBoaXN0aW5kZXggKmluZGV4LCBpbnQgbGluZTEsIGludCBjb3VudDEpCit7CisJdW5zaWduZWQgaW50IHB0ciwgdGJsX2lkeDsKKwl1bnNpZ25lZCBpbnQgY2hhaW5fbGVuOworCXN0cnVjdCByZWNvcmQgKipyZWNfY2hhaW4sICpyZWM7CisKKwlmb3IgKHB0ciA9IExJTkVfRU5EKDEpOyBsaW5lMSA8PSBwdHI7IHB0ci0tKSB7CisJCXRibF9pZHggPSBUQUJMRV9IQVNIKGluZGV4LCAxLCBwdHIpOworCQlyZWNfY2hhaW4gPSBpbmRleC0+cmVjb3JkcyArIHRibF9pZHg7CisJCXJlYyA9ICpyZWNfY2hhaW47CisKKwkJY2hhaW5fbGVuID0gMDsKKwkJd2hpbGUgKHJlYykgeworCQkJaWYgKENNUChpbmRleCwgMSwgcmVjLT5wdHIsIDEsIHB0cikpIHsKKwkJCQkvKgorCQkJCSAqIHB0ciBpcyBpZGVudGljYWwgdG8gYW5vdGhlciBlbGVtZW50LiBJbnNlcnQKKwkJCQkgKiBpdCBvbnRvIHRoZSBmcm9udCBvZiB0aGUgZXhpc3RpbmcgZWxlbWVudAorCQkJCSAqIGNoYWluLgorCQkJCSAqLworCQkJCU5FWFRfUFRSKGluZGV4LCBwdHIpID0gcmVjLT5wdHI7CisJCQkJcmVjLT5wdHIgPSBwdHI7CisJCQkJLyogY2FwIHJlYy0+Y250IGF0IE1BWF9DTlQgKi8KKwkJCQlyZWMtPmNudCA9IFhETF9NSU4oTUFYX0NOVCwgcmVjLT5jbnQgKyAxKTsKKwkJCQlMSU5FX01BUChpbmRleCwgcHRyKSA9IHJlYzsKKwkJCQlnb3RvIGNvbnRpbnVlX3NjYW47CisJCQl9CisKKwkJCXJlYyA9IHJlYy0+bmV4dDsKKwkJCWNoYWluX2xlbisrOworCQl9CisKKwkJaWYgKGNoYWluX2xlbiA9PSBpbmRleC0+bWF4X2NoYWluX2xlbmd0aCkKKwkJCXJldHVybiAtMTsKKworCQkvKgorCQkgKiBUaGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGhhdmUgZXZlciBzZWVuIHRoaXMgcGFydGljdWxhcgorCQkgKiBlbGVtZW50IGluIHRoZSBzZXF1ZW5jZS4gQ29uc3RydWN0IGEgbmV3IGNoYWluIGZvciBpdC4KKwkJICovCisJCWlmICghKHJlYyA9IHhkbF9jaGFfYWxsb2MoJmluZGV4LT5yY2hhKSkpCisJCQlyZXR1cm4gLTE7CisJCXJlYy0+cHRyID0gcHRyOworCQlyZWMtPmNudCA9IDE7CisJCXJlYy0+bmV4dCA9ICpyZWNfY2hhaW47CisJCSpyZWNfY2hhaW4gPSByZWM7CisJCUxJTkVfTUFQKGluZGV4LCBwdHIpID0gcmVjOworCitjb250aW51ZV9zY2FuOgorCQk7IC8qIG5vIG9wICovCisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X2xjcyhzdHJ1Y3QgaGlzdGluZGV4ICppbmRleCwgc3RydWN0IHJlZ2lvbiAqbGNzLCBpbnQgYl9wdHIsCisJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpCit7CisJdW5zaWduZWQgaW50IGJfbmV4dCA9IGJfcHRyICsgMTsKKwlzdHJ1Y3QgcmVjb3JkICpyZWMgPSBpbmRleC0+cmVjb3Jkc1tUQUJMRV9IQVNIKGluZGV4LCAyLCBiX3B0cildOworCXVuc2lnbmVkIGludCBhcywgYWUsIGJzLCBiZSwgbnAsIHJjOworCWludCBzaG91bGRfYnJlYWs7CisKKwlmb3IgKDsgcmVjOyByZWMgPSByZWMtPm5leHQpIHsKKwkJaWYgKHJlYy0+Y250ID4gaW5kZXgtPmNudCkgeworCQkJaWYgKCFpbmRleC0+aGFzX2NvbW1vbikKKwkJCQlpbmRleC0+aGFzX2NvbW1vbiA9IENNUChpbmRleCwgMSwgcmVjLT5wdHIsIDIsIGJfcHRyKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYXMgPSByZWMtPnB0cjsKKwkJaWYgKCFDTVAoaW5kZXgsIDEsIGFzLCAyLCBiX3B0cikpCisJCQljb250aW51ZTsKKworCQlpbmRleC0+aGFzX2NvbW1vbiA9IDE7CisJCWZvciAoOzspIHsKKwkJCXNob3VsZF9icmVhayA9IDA7CisJCQlucCA9IE5FWFRfUFRSKGluZGV4LCBhcyk7CisJCQlicyA9IGJfcHRyOworCQkJYWUgPSBhczsKKwkJCWJlID0gYnM7CisJCQlyYyA9IHJlYy0+Y250OworCisJCQl3aGlsZSAobGluZTEgPCBhcyAmJiBsaW5lMiA8IGJzCisJCQkJJiYgQ01QKGluZGV4LCAxLCBhcyAtIDEsIDIsIGJzIC0gMSkpIHsKKwkJCQlhcy0tOworCQkJCWJzLS07CisJCQkJaWYgKDEgPCByYykKKwkJCQkJcmMgPSBYRExfTUlOKHJjLCBDTlQoaW5kZXgsIGFzKSk7CisJCQl9CisJCQl3aGlsZSAoYWUgPCBMSU5FX0VORCgxKSAmJiBiZSA8IExJTkVfRU5EKDIpCisJCQkJJiYgQ01QKGluZGV4LCAxLCBhZSArIDEsIDIsIGJlICsgMSkpIHsKKwkJCQlhZSsrOworCQkJCWJlKys7CisJCQkJaWYgKDEgPCByYykKKwkJCQkJcmMgPSBYRExfTUlOKHJjLCBDTlQoaW5kZXgsIGFlKSk7CisJCQl9CisKKwkJCWlmIChiX25leHQgPD0gYmUpCisJCQkJYl9uZXh0ID0gYmUgKyAxOworCQkJaWYgKGxjcy0+ZW5kMSAtIGxjcy0+YmVnaW4xIDwgYWUgLSBhcyB8fCByYyA8IGluZGV4LT5jbnQpIHsKKwkJCQlsY3MtPmJlZ2luMSA9IGFzOworCQkJCWxjcy0+YmVnaW4yID0gYnM7CisJCQkJbGNzLT5lbmQxID0gYWU7CisJCQkJbGNzLT5lbmQyID0gYmU7CisJCQkJaW5kZXgtPmNudCA9IHJjOworCQkJfQorCisJCQlpZiAobnAgPT0gMCkKKwkJCQlicmVhazsKKworCQkJd2hpbGUgKG5wIDw9IGFlKSB7CisJCQkJbnAgPSBORVhUX1BUUihpbmRleCwgbnApOworCQkJCWlmIChucCA9PSAwKSB7CisJCQkJCXNob3VsZF9icmVhayA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKHNob3VsZF9icmVhaykKKwkJCQlicmVhazsKKworCQkJYXMgPSBucDsKKwkJfQorCX0KKwlyZXR1cm4gYl9uZXh0OworfQorCitzdGF0aWMgaW50IGZpbmRfbGNzKHN0cnVjdCBoaXN0aW5kZXggKmluZGV4LCBzdHJ1Y3QgcmVnaW9uICpsY3MsCisJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpIHsKKwlpbnQgYl9wdHI7CisKKwlpZiAoc2NhbkEoaW5kZXgsIGxpbmUxLCBjb3VudDEpKQorCQlyZXR1cm4gLTE7CisKKwlpbmRleC0+Y250ID0gaW5kZXgtPm1heF9jaGFpbl9sZW5ndGggKyAxOworCisJZm9yIChiX3B0ciA9IGxpbmUyOyBiX3B0ciA8PSBMSU5FX0VORCgyKTsgKQorCQliX3B0ciA9IHRyeV9sY3MoaW5kZXgsIGxjcywgYl9wdHIsIGxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworCisJcmV0dXJuIGluZGV4LT5oYXNfY29tbW9uICYmIGluZGV4LT5tYXhfY2hhaW5fbGVuZ3RoIDwgaW5kZXgtPmNudDsKK30KKworc3RhdGljIGludCBmYWxsX2JhY2tfdG9fY2xhc3NpY19kaWZmKHN0cnVjdCBoaXN0aW5kZXggKmluZGV4LAorCQlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50MikKK3sKKwl4cHBhcmFtX3QgeHBwOworCXhwcC5mbGFncyA9IGluZGV4LT54cHAtPmZsYWdzICYgflhERl9ESUZGX0FMR09SSVRITV9NQVNLOworCisJcmV0dXJuIHhkbF9mYWxsX2JhY2tfZGlmZihpbmRleC0+ZW52LCAmeHBwLAorCQkJCSAgbGluZTEsIGNvdW50MSwgbGluZTIsIGNvdW50Mik7Cit9CisKK3N0YXRpYyBpbnQgaGlzdG9ncmFtX2RpZmYoeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYsCisJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpCit7CisJc3RydWN0IGhpc3RpbmRleCBpbmRleDsKKwlzdHJ1Y3QgcmVnaW9uIGxjczsKKwlpbnQgc3o7CisJaW50IHJlc3VsdCA9IC0xOworCisJaWYgKGNvdW50MSA8PSAwICYmIGNvdW50MiA8PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChMSU5FX0VORCgxKSA+PSBNQVhfUFRSKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoIWNvdW50MSkgeworCQl3aGlsZShjb3VudDItLSkKKwkJCWVudi0+eGRmMi5yY2hnW2xpbmUyKysgLSAxXSA9IDE7CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIWNvdW50MikgeworCQl3aGlsZShjb3VudDEtLSkKKwkJCWVudi0+eGRmMS5yY2hnW2xpbmUxKysgLSAxXSA9IDE7CisJCXJldHVybiAwOworCX0KKworCW1lbXNldCgmaW5kZXgsIDAsIHNpemVvZihpbmRleCkpOworCisJaW5kZXguZW52ID0gZW52OworCWluZGV4LnhwcCA9IHhwcDsKKworCWluZGV4LnJlY29yZHMgPSBOVUxMOworCWluZGV4LmxpbmVfbWFwID0gTlVMTDsKKwkvKiBpbiBjYXNlIG9mIGVhcmx5IHhkbF9jaGFfZnJlZSgpICovCisJaW5kZXgucmNoYS5oZWFkID0gTlVMTDsKKworCWluZGV4LnRhYmxlX2JpdHMgPSB4ZGxfaGFzaGJpdHMoY291bnQxKTsKKwlzeiA9IGluZGV4LnJlY29yZHNfc2l6ZSA9IDEgPDwgaW5kZXgudGFibGVfYml0czsKKwlzeiAqPSBzaXplb2Yoc3RydWN0IHJlY29yZCAqKTsKKwlpZiAoIShpbmRleC5yZWNvcmRzID0gKHN0cnVjdCByZWNvcmQgKiopIHhkbF9tYWxsb2Moc3opKSkKKwkJZ290byBjbGVhbnVwOworCW1lbXNldChpbmRleC5yZWNvcmRzLCAwLCBzeik7CisKKwlzeiA9IGluZGV4LmxpbmVfbWFwX3NpemUgPSBjb3VudDE7CisJc3ogKj0gc2l6ZW9mKHN0cnVjdCByZWNvcmQgKik7CisJaWYgKCEoaW5kZXgubGluZV9tYXAgPSAoc3RydWN0IHJlY29yZCAqKikgeGRsX21hbGxvYyhzeikpKQorCQlnb3RvIGNsZWFudXA7CisJbWVtc2V0KGluZGV4LmxpbmVfbWFwLCAwLCBzeik7CisKKwlzeiA9IGluZGV4LmxpbmVfbWFwX3NpemU7CisJc3ogKj0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJaWYgKCEoaW5kZXgubmV4dF9wdHJzID0gKHVuc2lnbmVkIGludCAqKSB4ZGxfbWFsbG9jKHN6KSkpCisJCWdvdG8gY2xlYW51cDsKKwltZW1zZXQoaW5kZXgubmV4dF9wdHJzLCAwLCBzeik7CisKKwkvKiBsaW5lcyAvIDQgKyAxIGNvbWVzIGZyb20geHByZXBhcmUuYzp4ZGxfcHJlcGFyZV9jdHgoKSAqLworCWlmICh4ZGxfY2hhX2luaXQoJmluZGV4LnJjaGEsIHNpemVvZihzdHJ1Y3QgcmVjb3JkKSwgY291bnQxIC8gNCArIDEpIDwgMCkKKwkJZ290byBjbGVhbnVwOworCisJaW5kZXgucHRyX3NoaWZ0ID0gbGluZTE7CisJaW5kZXgubWF4X2NoYWluX2xlbmd0aCA9IDY0OworCisJbWVtc2V0KCZsY3MsIDAsIHNpemVvZihsY3MpKTsKKwlpZiAoZmluZF9sY3MoJmluZGV4LCAmbGNzLCBsaW5lMSwgY291bnQxLCBsaW5lMiwgY291bnQyKSkKKwkJcmVzdWx0ID0gZmFsbF9iYWNrX3RvX2NsYXNzaWNfZGlmZigmaW5kZXgsIGxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworCWVsc2UgeworCQlpZiAobGNzLmJlZ2luMSA9PSAwICYmIGxjcy5iZWdpbjIgPT0gMCkgeworCQkJd2hpbGUgKGNvdW50MS0tKQorCQkJCWVudi0+eGRmMS5yY2hnW2xpbmUxKysgLSAxXSA9IDE7CisJCQl3aGlsZSAoY291bnQyLS0pCisJCQkJZW52LT54ZGYyLnJjaGdbbGluZTIrKyAtIDFdID0gMTsKKwkJCXJlc3VsdCA9IDA7CisJCX0gZWxzZSB7CisJCQlyZXN1bHQgPSBoaXN0b2dyYW1fZGlmZih4cHAsIGVudiwKKwkJCQkJCWxpbmUxLCBsY3MuYmVnaW4xIC0gbGluZTEsCisJCQkJCQlsaW5lMiwgbGNzLmJlZ2luMiAtIGxpbmUyKTsKKwkJCWlmIChyZXN1bHQpCisJCQkJZ290byBjbGVhbnVwOworCQkJcmVzdWx0ID0gaGlzdG9ncmFtX2RpZmYoeHBwLCBlbnYsCisJCQkJCQlsY3MuZW5kMSArIDEsIExJTkVfRU5EKDEpIC0gbGNzLmVuZDEsCisJCQkJCQlsY3MuZW5kMiArIDEsIExJTkVfRU5EKDIpIC0gbGNzLmVuZDIpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlnb3RvIGNsZWFudXA7CisJCX0KKwl9CisKK2NsZWFudXA6CisJeGRsX2ZyZWUoaW5kZXgucmVjb3Jkcyk7CisJeGRsX2ZyZWUoaW5kZXgubGluZV9tYXApOworCXhkbF9mcmVlKGluZGV4Lm5leHRfcHRycyk7CisJeGRsX2NoYV9mcmVlKCZpbmRleC5yY2hhKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCB4ZGxfZG9faGlzdG9ncmFtX2RpZmYobW1maWxlX3QgKmZpbGUxLCBtbWZpbGVfdCAqZmlsZTIsCisJeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYpCit7CisJaWYgKHhkbF9wcmVwYXJlX2VudihmaWxlMSwgZmlsZTIsIHhwcCwgZW52KSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiBoaXN0b2dyYW1fZGlmZih4cHAsIGVudiwKKwkJZW52LT54ZGYxLmRzdGFydCArIDEsIGVudi0+eGRmMS5kZW5kIC0gZW52LT54ZGYxLmRzdGFydCArIDEsCisJCWVudi0+eGRmMi5kc3RhcnQgKyAxLCBlbnYtPnhkZjIuZGVuZCAtIGVudi0+eGRmMi5kc3RhcnQgKyAxKTsKK30KZGlmZiAtLWdpdCBhL3hkaWZmL3hpbmNsdWRlLmggYi94ZGlmZi94aW5jbHVkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNmNjYjMKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94aW5jbHVkZS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWElOQ0xVREVfSCkKKyNkZWZpbmUgWElOQ0xVREVfSAorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSAieG1hY3Jvcy5oIgorI2luY2x1ZGUgInhkaWZmLmgiCisjaW5jbHVkZSAieHR5cGVzLmgiCisjaW5jbHVkZSAieHV0aWxzLmgiCisjaW5jbHVkZSAieHByZXBhcmUuaCIKKyNpbmNsdWRlICJ4ZGlmZmkuaCIKKyNpbmNsdWRlICJ4ZW1pdC5oIgorCisKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoWElOQ0xVREVfSCkgKi8KZGlmZiAtLWdpdCBhL3hkaWZmL3htYWNyb3MuaCBiL3hkaWZmL3htYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjVhODk1Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveG1hY3Jvcy5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWE1BQ1JPU19IKQorI2RlZmluZSBYTUFDUk9TX0gKKworCisKKworI2RlZmluZSBYRExfTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSk6IChiKSkKKyNkZWZpbmUgWERMX01BWChhLCBiKSAoKGEpID4gKGIpID8gKGEpOiAoYikpCisjZGVmaW5lIFhETF9BQlModikgKCh2KSA+PSAwID8gKHYpOiAtKHYpKQorI2RlZmluZSBYRExfSVNESUdJVChjKSAoKGMpID49ICcwJyAmJiAoYykgPD0gJzknKQorI2RlZmluZSBYRExfSVNTUEFDRShjKSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikoYykpKQorI2RlZmluZSBYRExfQUREQklUUyh2LGIpCSgodikgKyAoKHYpID4+IChiKSkpCisjZGVmaW5lIFhETF9NQVNLQklUUyhiKQkJKCgxVUwgPDwgKGIpKSAtIDEpCisjZGVmaW5lIFhETF9IQVNITE9ORyh2LGIpCShYRExfQUREQklUUygodW5zaWduZWQgbG9uZykodiksIGIpICYgWERMX01BU0tCSVRTKGIpKQorI2RlZmluZSBYRExfUFRSRlJFRShwKSBkbyB7IGlmIChwKSB7IHhkbF9mcmVlKHApOyAocCkgPSBOVUxMOyB9IH0gd2hpbGUgKDApCisjZGVmaW5lIFhETF9MRTMyX1BVVChwLCB2KSBcCitkbyB7IFwKKwl1bnNpZ25lZCBjaGFyICpfX3AgPSAodW5zaWduZWQgY2hhciAqKSAocCk7IFwKKwkqX19wKysgPSAodW5zaWduZWQgY2hhcikgKHYpOyBcCisJKl9fcCsrID0gKHVuc2lnbmVkIGNoYXIpICgodikgPj4gOCk7IFwKKwkqX19wKysgPSAodW5zaWduZWQgY2hhcikgKCh2KSA+PiAxNik7IFwKKwkqX19wID0gKHVuc2lnbmVkIGNoYXIpICgodikgPj4gMjQpOyBcCit9IHdoaWxlICgwKQorI2RlZmluZSBYRExfTEUzMl9HRVQocCwgdikgXAorZG8geyBcCisJdW5zaWduZWQgY2hhciBjb25zdCAqX19wID0gKHVuc2lnbmVkIGNoYXIgY29uc3QgKikgKHApOyBcCisJKHYpID0gKHVuc2lnbmVkIGxvbmcpIF9fcFswXSB8ICgodW5zaWduZWQgbG9uZykgX19wWzFdKSA8PCA4IHwgXAorCQkoKHVuc2lnbmVkIGxvbmcpIF9fcFsyXSkgPDwgMTYgfCAoKHVuc2lnbmVkIGxvbmcpIF9fcFszXSkgPDwgMjQ7IFwKK30gd2hpbGUgKDApCisKKworI2VuZGlmIC8qICNpZiAhZGVmaW5lZChYTUFDUk9TX0gpICovCmRpZmYgLS1naXQgYS94ZGlmZi94bWVyZ2UuYyBiL3hkaWZmL3htZXJnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNTE5OGUKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94bWVyZ2UuYwpAQCAtMCwwICsxLDYxOSBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IERhdmlkZSBMaWJlbnppLCBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaW5jbHVkZSAieGluY2x1ZGUuaCIKKwordHlwZWRlZiBzdHJ1Y3Qgc194ZG1lcmdlIHsKKwlzdHJ1Y3Qgc194ZG1lcmdlICpuZXh0OworCS8qCisJICogMCA9IGNvbmZsaWN0LAorCSAqIDEgPSBubyBjb25mbGljdCwgdGFrZSBmaXJzdCwKKwkgKiAyID0gbm8gY29uZmxpY3QsIHRha2Ugc2Vjb25kLgorCSAqIDMgPSBubyBjb25mbGljdCwgdGFrZSBib3RoLgorCSAqLworCWludCBtb2RlOworCS8qCisJICogVGhlc2UgcG9pbnQgYXQgdGhlIHJlc3BlY3RpdmUgcG9zdGltYWdlcy4gIEUuZy4gPGkxLGNoZzE+IGlzCisJICogaG93IHNpZGUgIzEgd2FudHMgdG8gY2hhbmdlIHRoZSBjb21tb24gYW5jZXN0b3I7IGlmIHRoZXJlIGlzIG5vCisJICogb3ZlcmxhcCwgbGluZXMgYmVmb3JlIGkxIGluIHRoZSBwb3N0aW1hZ2Ugb2Ygc2lkZSAjMSBhcHBlYXIKKwkgKiBpbiB0aGUgbWVyZ2UgcmVzdWx0IGFzIGEgcmVnaW9uIHRvdWNoZWQgYnkgbmVpdGhlciBzaWRlLgorCSAqLworCWxvbmcgaTEsIGkyOworCWxvbmcgY2hnMSwgY2hnMjsKKwkvKgorCSAqIFRoZXNlIHBvaW50IGF0IHRoZSBwcmVpbWFnZTsgb2YgY291cnNlIHRoZXJlIGlzIGp1c3Qgb25lCisJICogcHJlaW1hZ2UsIHRoYXQgaXMgZnJvbSB0aGUgc2hhcmVkIGNvbW1vbiBhbmNlc3Rvci4KKwkgKi8KKwlsb25nIGkwOworCWxvbmcgY2hnMDsKK30geGRtZXJnZV90OworCitzdGF0aWMgaW50IHhkbF9hcHBlbmRfbWVyZ2UoeGRtZXJnZV90ICoqbWVyZ2UsIGludCBtb2RlLAorCQkJICAgIGxvbmcgaTAsIGxvbmcgY2hnMCwKKwkJCSAgICBsb25nIGkxLCBsb25nIGNoZzEsCisJCQkgICAgbG9uZyBpMiwgbG9uZyBjaGcyKQoreworCXhkbWVyZ2VfdCAqbSA9ICptZXJnZTsKKwlpZiAobSAmJiAoaTEgPD0gbS0+aTEgKyBtLT5jaGcxIHx8IGkyIDw9IG0tPmkyICsgbS0+Y2hnMikpIHsKKwkJaWYgKG1vZGUgIT0gbS0+bW9kZSkKKwkJCW0tPm1vZGUgPSAwOworCQltLT5jaGcwID0gaTAgKyBjaGcwIC0gbS0+aTA7CisJCW0tPmNoZzEgPSBpMSArIGNoZzEgLSBtLT5pMTsKKwkJbS0+Y2hnMiA9IGkyICsgY2hnMiAtIG0tPmkyOworCX0gZWxzZSB7CisJCW0gPSB4ZGxfbWFsbG9jKHNpemVvZih4ZG1lcmdlX3QpKTsKKwkJaWYgKCFtKQorCQkJcmV0dXJuIC0xOworCQltLT5uZXh0ID0gTlVMTDsKKwkJbS0+bW9kZSA9IG1vZGU7CisJCW0tPmkwID0gaTA7CisJCW0tPmNoZzAgPSBjaGcwOworCQltLT5pMSA9IGkxOworCQltLT5jaGcxID0gY2hnMTsKKwkJbS0+aTIgPSBpMjsKKwkJbS0+Y2hnMiA9IGNoZzI7CisJCWlmICgqbWVyZ2UpCisJCQkoKm1lcmdlKS0+bmV4dCA9IG07CisJCSptZXJnZSA9IG07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHhkbF9jbGVhbnVwX21lcmdlKHhkbWVyZ2VfdCAqYykKK3sKKwlpbnQgY291bnQgPSAwOworCXhkbWVyZ2VfdCAqbmV4dF9jOworCisJLyogd2VyZSB0aGVyZSBjb25mbGljdHM/ICovCisJZm9yICg7IGM7IGMgPSBuZXh0X2MpIHsKKwkJaWYgKGMtPm1vZGUgPT0gMCkKKwkJCWNvdW50Kys7CisJCW5leHRfYyA9IGMtPm5leHQ7CisJCWZyZWUoYyk7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCB4ZGxfbWVyZ2VfY21wX2xpbmVzKHhkZmVudl90ICp4ZTEsIGludCBpMSwgeGRmZW52X3QgKnhlMiwgaW50IGkyLAorCQlpbnQgbGluZV9jb3VudCwgbG9uZyBmbGFncykKK3sKKwlpbnQgaTsKKwl4cmVjb3JkX3QgKipyZWMxID0geGUxLT54ZGYyLnJlY3MgKyBpMTsKKwl4cmVjb3JkX3QgKipyZWMyID0geGUyLT54ZGYyLnJlY3MgKyBpMjsKKworCWZvciAoaSA9IDA7IGkgPCBsaW5lX2NvdW50OyBpKyspIHsKKwkJaW50IHJlc3VsdCA9IHhkbF9yZWNtYXRjaChyZWMxW2ldLT5wdHIsIHJlYzFbaV0tPnNpemUsCisJCQlyZWMyW2ldLT5wdHIsIHJlYzJbaV0tPnNpemUsIGZsYWdzKTsKKwkJaWYgKCFyZXN1bHQpCisJCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHhkbF9yZWNzX2NvcHlfMChpbnQgdXNlX29yaWcsIHhkZmVudl90ICp4ZSwgaW50IGksIGludCBjb3VudCwgaW50IGFkZF9ubCwgY2hhciAqZGVzdCkKK3sKKwl4cmVjb3JkX3QgKipyZWNzOworCWludCBzaXplID0gMDsKKworCXJlY3MgPSAodXNlX29yaWcgPyB4ZS0+eGRmMS5yZWNzIDogeGUtPnhkZjIucmVjcykgKyBpOworCisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IHNpemUgKz0gcmVjc1tpKytdLT5zaXplKQorCQlpZiAoZGVzdCkKKwkJCW1lbWNweShkZXN0ICsgc2l6ZSwgcmVjc1tpXS0+cHRyLCByZWNzW2ldLT5zaXplKTsKKwlpZiAoYWRkX25sKSB7CisJCWkgPSByZWNzW2NvdW50IC0gMV0tPnNpemU7CisJCWlmIChpID09IDAgfHwgcmVjc1tjb3VudCAtIDFdLT5wdHJbaSAtIDFdICE9ICdcbicpIHsKKwkJCWlmIChkZXN0KQorCQkJCWRlc3Rbc2l6ZV0gPSAnXG4nOworCQkJc2l6ZSsrOworCQl9CisJfQorCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IHhkbF9yZWNzX2NvcHkoeGRmZW52X3QgKnhlLCBpbnQgaSwgaW50IGNvdW50LCBpbnQgYWRkX25sLCBjaGFyICpkZXN0KQoreworCXJldHVybiB4ZGxfcmVjc19jb3B5XzAoMCwgeGUsIGksIGNvdW50LCBhZGRfbmwsIGRlc3QpOworfQorCitzdGF0aWMgaW50IHhkbF9vcmlnX2NvcHkoeGRmZW52X3QgKnhlLCBpbnQgaSwgaW50IGNvdW50LCBpbnQgYWRkX25sLCBjaGFyICpkZXN0KQoreworCXJldHVybiB4ZGxfcmVjc19jb3B5XzAoMSwgeGUsIGksIGNvdW50LCBhZGRfbmwsIGRlc3QpOworfQorCitzdGF0aWMgaW50IGZpbGxfY29uZmxpY3RfaHVuayh4ZGZlbnZfdCAqeGUxLCBjb25zdCBjaGFyICpuYW1lMSwKKwkJCSAgICAgIHhkZmVudl90ICp4ZTIsIGNvbnN0IGNoYXIgKm5hbWUyLAorCQkJICAgICAgY29uc3QgY2hhciAqbmFtZTMsCisJCQkgICAgICBpbnQgc2l6ZSwgaW50IGksIGludCBzdHlsZSwKKwkJCSAgICAgIHhkbWVyZ2VfdCAqbSwgY2hhciAqZGVzdCwgaW50IG1hcmtlcl9zaXplKQoreworCWludCBtYXJrZXIxX3NpemUgPSAobmFtZTEgPyBzdHJsZW4obmFtZTEpICsgMSA6IDApOworCWludCBtYXJrZXIyX3NpemUgPSAobmFtZTIgPyBzdHJsZW4obmFtZTIpICsgMSA6IDApOworCWludCBtYXJrZXIzX3NpemUgPSAobmFtZTMgPyBzdHJsZW4obmFtZTMpICsgMSA6IDApOworCisJaWYgKG1hcmtlcl9zaXplIDw9IDApCisJCW1hcmtlcl9zaXplID0gREVGQVVMVF9DT05GTElDVF9NQVJLRVJfU0laRTsKKworCS8qIEJlZm9yZSBjb25mbGljdGluZyBwYXJ0ICovCisJc2l6ZSArPSB4ZGxfcmVjc19jb3B5KHhlMSwgaSwgbS0+aTEgLSBpLCAwLAorCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisKKwlpZiAoIWRlc3QpIHsKKwkJc2l6ZSArPSBtYXJrZXJfc2l6ZSArIDEgKyBtYXJrZXIxX3NpemU7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGRlc3QgKyBzaXplLCAnPCcsIG1hcmtlcl9zaXplKTsKKwkJc2l6ZSArPSBtYXJrZXJfc2l6ZTsKKwkJaWYgKG1hcmtlcjFfc2l6ZSkgeworCQkJZGVzdFtzaXplXSA9ICcgJzsKKwkJCW1lbWNweShkZXN0ICsgc2l6ZSArIDEsIG5hbWUxLCBtYXJrZXIxX3NpemUgLSAxKTsKKwkJCXNpemUgKz0gbWFya2VyMV9zaXplOworCQl9CisJCWRlc3Rbc2l6ZSsrXSA9ICdcbic7CisJfQorCisJLyogUG9zdGltYWdlIGZyb20gc2lkZSAjMSAqLworCXNpemUgKz0geGRsX3JlY3NfY29weSh4ZTEsIG0tPmkxLCBtLT5jaGcxLCAxLAorCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisKKwlpZiAoc3R5bGUgPT0gWERMX01FUkdFX0RJRkYzKSB7CisJCS8qIFNoYXJlZCBwcmVpbWFnZSAqLworCQlpZiAoIWRlc3QpIHsKKwkJCXNpemUgKz0gbWFya2VyX3NpemUgKyAxICsgbWFya2VyM19zaXplOworCQl9IGVsc2UgeworCQkJbWVtc2V0KGRlc3QgKyBzaXplLCAnfCcsIG1hcmtlcl9zaXplKTsKKwkJCXNpemUgKz0gbWFya2VyX3NpemU7CisJCQlpZiAobWFya2VyM19zaXplKSB7CisJCQkJZGVzdFtzaXplXSA9ICcgJzsKKwkJCQltZW1jcHkoZGVzdCArIHNpemUgKyAxLCBuYW1lMywgbWFya2VyM19zaXplIC0gMSk7CisJCQkJc2l6ZSArPSBtYXJrZXIzX3NpemU7CisJCQl9CisJCQlkZXN0W3NpemUrK10gPSAnXG4nOworCQl9CisJCXNpemUgKz0geGRsX29yaWdfY29weSh4ZTEsIG0tPmkwLCBtLT5jaGcwLCAxLAorCQkJCSAgICAgIGRlc3QgPyBkZXN0ICsgc2l6ZSA6IE5VTEwpOworCX0KKworCWlmICghZGVzdCkgeworCQlzaXplICs9IG1hcmtlcl9zaXplICsgMTsKKwl9IGVsc2UgeworCQltZW1zZXQoZGVzdCArIHNpemUsICc9JywgbWFya2VyX3NpemUpOworCQlzaXplICs9IG1hcmtlcl9zaXplOworCQlkZXN0W3NpemUrK10gPSAnXG4nOworCX0KKworCS8qIFBvc3RpbWFnZSBmcm9tIHNpZGUgIzIgKi8KKwlzaXplICs9IHhkbF9yZWNzX2NvcHkoeGUyLCBtLT5pMiwgbS0+Y2hnMiwgMSwKKwkJCSAgICAgIGRlc3QgPyBkZXN0ICsgc2l6ZSA6IE5VTEwpOworCWlmICghZGVzdCkgeworCQlzaXplICs9IG1hcmtlcl9zaXplICsgMSArIG1hcmtlcjJfc2l6ZTsKKwl9IGVsc2UgeworCQltZW1zZXQoZGVzdCArIHNpemUsICc+JywgbWFya2VyX3NpemUpOworCQlzaXplICs9IG1hcmtlcl9zaXplOworCQlpZiAobWFya2VyMl9zaXplKSB7CisJCQlkZXN0W3NpemVdID0gJyAnOworCQkJbWVtY3B5KGRlc3QgKyBzaXplICsgMSwgbmFtZTIsIG1hcmtlcjJfc2l6ZSAtIDEpOworCQkJc2l6ZSArPSBtYXJrZXIyX3NpemU7CisJCX0KKwkJZGVzdFtzaXplKytdID0gJ1xuJzsKKwl9CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQgeGRsX2ZpbGxfbWVyZ2VfYnVmZmVyKHhkZmVudl90ICp4ZTEsIGNvbnN0IGNoYXIgKm5hbWUxLAorCQkJCSB4ZGZlbnZfdCAqeGUyLCBjb25zdCBjaGFyICpuYW1lMiwKKwkJCQkgY29uc3QgY2hhciAqYW5jZXN0b3JfbmFtZSwKKwkJCQkgaW50IGZhdm9yLAorCQkJCSB4ZG1lcmdlX3QgKm0sIGNoYXIgKmRlc3QsIGludCBzdHlsZSwKKwkJCQkgaW50IG1hcmtlcl9zaXplKQoreworCWludCBzaXplLCBpOworCisJZm9yIChzaXplID0gaSA9IDA7IG07IG0gPSBtLT5uZXh0KSB7CisJCWlmIChmYXZvciAmJiAhbS0+bW9kZSkKKwkJCW0tPm1vZGUgPSBmYXZvcjsKKworCQlpZiAobS0+bW9kZSA9PSAwKQorCQkJc2l6ZSA9IGZpbGxfY29uZmxpY3RfaHVuayh4ZTEsIG5hbWUxLCB4ZTIsIG5hbWUyLAorCQkJCQkJICBhbmNlc3Rvcl9uYW1lLAorCQkJCQkJICBzaXplLCBpLCBzdHlsZSwgbSwgZGVzdCwKKwkJCQkJCSAgbWFya2VyX3NpemUpOworCQllbHNlIGlmIChtLT5tb2RlICYgMykgeworCQkJLyogQmVmb3JlIGNvbmZsaWN0aW5nIHBhcnQgKi8KKwkJCXNpemUgKz0geGRsX3JlY3NfY29weSh4ZTEsIGksIG0tPmkxIC0gaSwgMCwKKwkJCQkJICAgICAgZGVzdCA/IGRlc3QgKyBzaXplIDogTlVMTCk7CisJCQkvKiBQb3N0aW1hZ2UgZnJvbSBzaWRlICMxICovCisJCQlpZiAobS0+bW9kZSAmIDEpCisJCQkJc2l6ZSArPSB4ZGxfcmVjc19jb3B5KHhlMSwgbS0+aTEsIG0tPmNoZzEsIChtLT5tb2RlICYgMiksCisJCQkJCQkgICAgICBkZXN0ID8gZGVzdCArIHNpemUgOiBOVUxMKTsKKwkJCS8qIFBvc3RpbWFnZSBmcm9tIHNpZGUgIzIgKi8KKwkJCWlmIChtLT5tb2RlICYgMikKKwkJCQlzaXplICs9IHhkbF9yZWNzX2NvcHkoeGUyLCBtLT5pMiwgbS0+Y2hnMiwgMCwKKwkJCQkJCSAgICAgIGRlc3QgPyBkZXN0ICsgc2l6ZSA6IE5VTEwpOworCQl9IGVsc2UKKwkJCWNvbnRpbnVlOworCQlpID0gbS0+aTEgKyBtLT5jaGcxOworCX0KKwlzaXplICs9IHhkbF9yZWNzX2NvcHkoeGUxLCBpLCB4ZTEtPnhkZjIubnJlYyAtIGksIDAsCisJCQkgICAgICBkZXN0ID8gZGVzdCArIHNpemUgOiBOVUxMKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoKKyAqIFNvbWV0aW1lcywgY2hhbmdlcyBhcmUgbm90IHF1aXRlIGlkZW50aWNhbCwgYnV0IGRpZmZlciBpbiBvbmx5IGEgZmV3CisgKiBsaW5lcy4gVHJ5IGhhcmQgdG8gc2hvdyBvbmx5IHRoZXNlIGZldyBsaW5lcyBhcyBjb25mbGljdGluZy4KKyAqLworc3RhdGljIGludCB4ZGxfcmVmaW5lX2NvbmZsaWN0cyh4ZGZlbnZfdCAqeGUxLCB4ZGZlbnZfdCAqeGUyLCB4ZG1lcmdlX3QgKm0sCisJCXhwcGFyYW1fdCBjb25zdCAqeHBwKQoreworCWZvciAoOyBtOyBtID0gbS0+bmV4dCkgeworCQltbWZpbGVfdCB0MSwgdDI7CisJCXhkZmVudl90IHhlOworCQl4ZGNoYW5nZV90ICp4c2NyLCAqeDsKKwkJaW50IGkxID0gbS0+aTEsIGkyID0gbS0+aTI7CisKKwkJLyogbGV0J3MgaGFuZGxlIGp1c3QgdGhlIGNvbmZsaWN0cyAqLworCQlpZiAobS0+bW9kZSkKKwkJCWNvbnRpbnVlOworCisJCS8qIG5vIHNlbnNlIHJlZmluaW5nIGEgY29uZmxpY3Qgd2hlbiBvbmUgc2lkZSBpcyBlbXB0eSAqLworCQlpZiAobS0+Y2hnMSA9PSAwIHx8IG0tPmNoZzIgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFRoaXMgcHJvYmFibHkgZG9lcyBub3Qgd29yayBvdXRzaWRlIGdpdCwgc2luY2UKKwkJICogd2UgaGF2ZSBhIHZlcnkgc2ltcGxlIG1tZmlsZSBzdHJ1Y3R1cmUuCisJCSAqLworCQl0MS5wdHIgPSAoY2hhciAqKXhlMS0+eGRmMi5yZWNzW20tPmkxXS0+cHRyOworCQl0MS5zaXplID0geGUxLT54ZGYyLnJlY3NbbS0+aTEgKyBtLT5jaGcxIC0gMV0tPnB0cgorCQkJKyB4ZTEtPnhkZjIucmVjc1ttLT5pMSArIG0tPmNoZzEgLSAxXS0+c2l6ZSAtIHQxLnB0cjsKKwkJdDIucHRyID0gKGNoYXIgKil4ZTItPnhkZjIucmVjc1ttLT5pMl0tPnB0cjsKKwkJdDIuc2l6ZSA9IHhlMi0+eGRmMi5yZWNzW20tPmkyICsgbS0+Y2hnMiAtIDFdLT5wdHIKKwkJCSsgeGUyLT54ZGYyLnJlY3NbbS0+aTIgKyBtLT5jaGcyIC0gMV0tPnNpemUgLSB0Mi5wdHI7CisJCWlmICh4ZGxfZG9fZGlmZigmdDEsICZ0MiwgeHBwLCAmeGUpIDwgMCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKHhkbF9jaGFuZ2VfY29tcGFjdCgmeGUueGRmMSwgJnhlLnhkZjIsIHhwcC0+ZmxhZ3MpIDwgMCB8fAorCQkgICAgeGRsX2NoYW5nZV9jb21wYWN0KCZ4ZS54ZGYyLCAmeGUueGRmMSwgeHBwLT5mbGFncykgPCAwIHx8CisJCSAgICB4ZGxfYnVpbGRfc2NyaXB0KCZ4ZSwgJnhzY3IpIDwgMCkgeworCQkJeGRsX2ZyZWVfZW52KCZ4ZSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKCF4c2NyKSB7CisJCQkvKiBJZiB0aGlzIGhhcHBlbnMsIHRoZSBjaGFuZ2VzIGFyZSBpZGVudGljYWwuICovCisJCQl4ZGxfZnJlZV9lbnYoJnhlKTsKKwkJCW0tPm1vZGUgPSA0OworCQkJY29udGludWU7CisJCX0KKwkJeCA9IHhzY3I7CisJCW0tPmkxID0geHNjci0+aTEgKyBpMTsKKwkJbS0+Y2hnMSA9IHhzY3ItPmNoZzE7CisJCW0tPmkyID0geHNjci0+aTIgKyBpMjsKKwkJbS0+Y2hnMiA9IHhzY3ItPmNoZzI7CisJCXdoaWxlICh4c2NyLT5uZXh0KSB7CisJCQl4ZG1lcmdlX3QgKm0yID0geGRsX21hbGxvYyhzaXplb2YoeGRtZXJnZV90KSk7CisJCQlpZiAoIW0yKSB7CisJCQkJeGRsX2ZyZWVfZW52KCZ4ZSk7CisJCQkJeGRsX2ZyZWVfc2NyaXB0KHgpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCXhzY3IgPSB4c2NyLT5uZXh0OworCQkJbTItPm5leHQgPSBtLT5uZXh0OworCQkJbS0+bmV4dCA9IG0yOworCQkJbSA9IG0yOworCQkJbS0+bW9kZSA9IDA7CisJCQltLT5pMSA9IHhzY3ItPmkxICsgaTE7CisJCQltLT5jaGcxID0geHNjci0+Y2hnMTsKKwkJCW0tPmkyID0geHNjci0+aTIgKyBpMjsKKwkJCW0tPmNoZzIgPSB4c2NyLT5jaGcyOworCQl9CisJCXhkbF9mcmVlX2VudigmeGUpOworCQl4ZGxfZnJlZV9zY3JpcHQoeCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxpbmVfY29udGFpbnNfYWxudW0oY29uc3QgY2hhciAqcHRyLCBsb25nIHNpemUpCit7CisJd2hpbGUgKHNpemUtLSkKKwkJaWYgKGlzYWxudW0oKHVuc2lnbmVkIGNoYXIpKihwdHIrKykpKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGluZXNfY29udGFpbl9hbG51bSh4ZGZlbnZfdCAqeGUsIGludCBpLCBpbnQgY2hnKQoreworCWZvciAoOyBjaGc7IGNoZy0tLCBpKyspCisJCWlmIChsaW5lX2NvbnRhaW5zX2FsbnVtKHhlLT54ZGYyLnJlY3NbaV0tPnB0ciwKKwkJCQl4ZS0+eGRmMi5yZWNzW2ldLT5zaXplKSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBtZXJnZXMgbSBhbmQgbS0+bmV4dCwgbWFya2luZyBldmVyeXRoaW5nIGJldHdlZW4gdGhvc2UgaHVua3MKKyAqIGFzIGNvbmZsaWN0aW5nLCB0b28uCisgKi8KK3N0YXRpYyB2b2lkIHhkbF9tZXJnZV90d29fY29uZmxpY3RzKHhkbWVyZ2VfdCAqbSkKK3sKKwl4ZG1lcmdlX3QgKm5leHRfbSA9IG0tPm5leHQ7CisJbS0+Y2hnMSA9IG5leHRfbS0+aTEgKyBuZXh0X20tPmNoZzEgLSBtLT5pMTsKKwltLT5jaGcyID0gbmV4dF9tLT5pMiArIG5leHRfbS0+Y2hnMiAtIG0tPmkyOworCW0tPm5leHQgPSBuZXh0X20tPm5leHQ7CisJZnJlZShuZXh0X20pOworfQorCisvKgorICogSWYgdGhlcmUgYXJlIGxlc3MgdGhhbiAzIG5vbi1jb25mbGljdGluZyBsaW5lcyBiZXR3ZWVuIGNvbmZsaWN0cywKKyAqIGl0IGFwcGVhcnMgc2ltcGxlciAtLSBiZWNhdXNlIGl0IHRha2VzIHVwIGxlc3MgKG9yIGFzIG1hbnkpIGxpbmVzIC0tCisgKiBpZiB0aGUgbGluZXMgYXJlIG1vdmVkIGludG8gdGhlIGNvbmZsaWN0cy4KKyAqLworc3RhdGljIGludCB4ZGxfc2ltcGxpZnlfbm9uX2NvbmZsaWN0cyh4ZGZlbnZfdCAqeGUxLCB4ZG1lcmdlX3QgKm0sCisJCQkJICAgICAgaW50IHNpbXBsaWZ5X2lmX25vX2FsbnVtKQoreworCWludCByZXN1bHQgPSAwOworCisJaWYgKCFtKQorCQlyZXR1cm4gcmVzdWx0OworCWZvciAoOzspIHsKKwkJeGRtZXJnZV90ICpuZXh0X20gPSBtLT5uZXh0OworCQlpbnQgYmVnaW4sIGVuZDsKKworCQlpZiAoIW5leHRfbSkKKwkJCXJldHVybiByZXN1bHQ7CisKKwkJYmVnaW4gPSBtLT5pMSArIG0tPmNoZzE7CisJCWVuZCA9IG5leHRfbS0+aTE7CisKKwkJaWYgKG0tPm1vZGUgIT0gMCB8fCBuZXh0X20tPm1vZGUgIT0gMCB8fAorCQkgICAgKGVuZCAtIGJlZ2luID4gMyAmJgorCQkgICAgICghc2ltcGxpZnlfaWZfbm9fYWxudW0gfHwKKwkJICAgICAgbGluZXNfY29udGFpbl9hbG51bSh4ZTEsIGJlZ2luLCBlbmQgLSBiZWdpbikpKSkgeworCQkJbSA9IG5leHRfbTsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCsrOworCQkJeGRsX21lcmdlX3R3b19jb25mbGljdHMobSk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBsZXZlbCA9PSAwOiBtYXJrIGFsbCBvdmVybGFwcGluZyBjaGFuZ2VzIGFzIGNvbmZsaWN0CisgKiBsZXZlbCA9PSAxOiBtYXJrIG92ZXJsYXBwaW5nIGNoYW5nZXMgYXMgY29uZmxpY3Qgb25seSBpZiBub3QgaWRlbnRpY2FsCisgKiBsZXZlbCA9PSAyOiBhbmFseXplIG5vbi1pZGVudGljYWwgY2hhbmdlcyBmb3IgbWluaW1hbCBjb25mbGljdCBzZXQKKyAqIGxldmVsID09IDM6IGFuYWx5emUgbm9uLWlkZW50aWNhbCBjaGFuZ2VzIGZvciBtaW5pbWFsIGNvbmZsaWN0IHNldCwgYnV0CisgKiAgICAgICAgICAgICB0cmVhdCBodW5rcyBub3QgY29udGFpbmluZyBhbnkgbGV0dGVyIG9yIG51bWJlciBhcyBjb25mbGljdGluZworICoKKyAqIHJldHVybnMgPCAwIG9uIGVycm9yLCA9PSAwIGZvciBubyBjb25mbGljdHMsIGVsc2UgbnVtYmVyIG9mIGNvbmZsaWN0cworICovCitzdGF0aWMgaW50IHhkbF9kb19tZXJnZSh4ZGZlbnZfdCAqeGUxLCB4ZGNoYW5nZV90ICp4c2NyMSwKKwkJeGRmZW52X3QgKnhlMiwgeGRjaGFuZ2VfdCAqeHNjcjIsCisJCXhtcGFyYW1fdCBjb25zdCAqeG1wLCBtbWJ1ZmZlcl90ICpyZXN1bHQpCit7CisJeGRtZXJnZV90ICpjaGFuZ2VzLCAqYzsKKwl4cHBhcmFtX3QgY29uc3QgKnhwcCA9ICZ4bXAtPnhwcDsKKwljb25zdCBjaGFyICpjb25zdCBhbmNlc3Rvcl9uYW1lID0geG1wLT5hbmNlc3RvcjsKKwljb25zdCBjaGFyICpjb25zdCBuYW1lMSA9IHhtcC0+ZmlsZTE7CisJY29uc3QgY2hhciAqY29uc3QgbmFtZTIgPSB4bXAtPmZpbGUyOworCWludCBpMCwgaTEsIGkyLCBjaGcwLCBjaGcxLCBjaGcyOworCWludCBsZXZlbCA9IHhtcC0+bGV2ZWw7CisJaW50IHN0eWxlID0geG1wLT5zdHlsZTsKKwlpbnQgZmF2b3IgPSB4bXAtPmZhdm9yOworCisJaWYgKHN0eWxlID09IFhETF9NRVJHRV9ESUZGMykgeworCQkvKgorCQkgKiAiZGlmZjMgLW0iIG91dHB1dCBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciBhbnl0aGluZworCQkgKiBtb3JlIGFnZ3Jlc3NpdmUgdGhhbiBYRExfTUVSR0VfRUFHRVIuCisJCSAqLworCQlpZiAoWERMX01FUkdFX0VBR0VSIDwgbGV2ZWwpCisJCQlsZXZlbCA9IFhETF9NRVJHRV9FQUdFUjsKKwl9CisKKwljID0gY2hhbmdlcyA9IE5VTEw7CisKKwl3aGlsZSAoeHNjcjEgJiYgeHNjcjIpIHsKKwkJaWYgKCFjaGFuZ2VzKQorCQkJY2hhbmdlcyA9IGM7CisJCWlmICh4c2NyMS0+aTEgKyB4c2NyMS0+Y2hnMSA8IHhzY3IyLT5pMSkgeworCQkJaTAgPSB4c2NyMS0+aTE7CisJCQlpMSA9IHhzY3IxLT5pMjsKKwkJCWkyID0geHNjcjItPmkyIC0geHNjcjItPmkxICsgeHNjcjEtPmkxOworCQkJY2hnMCA9IHhzY3IxLT5jaGcxOworCQkJY2hnMSA9IHhzY3IxLT5jaGcyOworCQkJY2hnMiA9IHhzY3IxLT5jaGcxOworCQkJaWYgKHhkbF9hcHBlbmRfbWVyZ2UoJmMsIDEsCisJCQkJCSAgICAgaTAsIGNoZzAsIGkxLCBjaGcxLCBpMiwgY2hnMikpIHsKKwkJCQl4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQl4c2NyMSA9IHhzY3IxLT5uZXh0OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHhzY3IyLT5pMSArIHhzY3IyLT5jaGcxIDwgeHNjcjEtPmkxKSB7CisJCQlpMCA9IHhzY3IyLT5pMTsKKwkJCWkxID0geHNjcjEtPmkyIC0geHNjcjEtPmkxICsgeHNjcjItPmkxOworCQkJaTIgPSB4c2NyMi0+aTI7CisJCQljaGcwID0geHNjcjItPmNoZzE7CisJCQljaGcxID0geHNjcjItPmNoZzE7CisJCQljaGcyID0geHNjcjItPmNoZzI7CisJCQlpZiAoeGRsX2FwcGVuZF9tZXJnZSgmYywgMiwKKwkJCQkJICAgICBpMCwgY2hnMCwgaTEsIGNoZzEsIGkyLCBjaGcyKSkgeworCQkJCXhkbF9jbGVhbnVwX21lcmdlKGNoYW5nZXMpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCXhzY3IyID0geHNjcjItPm5leHQ7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobGV2ZWwgPT0gWERMX01FUkdFX01JTklNQUwgfHwgeHNjcjEtPmkxICE9IHhzY3IyLT5pMSB8fAorCQkJCXhzY3IxLT5jaGcxICE9IHhzY3IyLT5jaGcxIHx8CisJCQkJeHNjcjEtPmNoZzIgIT0geHNjcjItPmNoZzIgfHwKKwkJCQl4ZGxfbWVyZ2VfY21wX2xpbmVzKHhlMSwgeHNjcjEtPmkyLAorCQkJCQl4ZTIsIHhzY3IyLT5pMiwKKwkJCQkJeHNjcjEtPmNoZzIsIHhwcC0+ZmxhZ3MpKSB7CisJCQkvKiBjb25mbGljdCAqLworCQkJaW50IG9mZiA9IHhzY3IxLT5pMSAtIHhzY3IyLT5pMTsKKwkJCWludCBmZm8gPSBvZmYgKyB4c2NyMS0+Y2hnMSAtIHhzY3IyLT5jaGcxOworCisJCQlpMCA9IHhzY3IxLT5pMTsKKwkJCWkxID0geHNjcjEtPmkyOworCQkJaTIgPSB4c2NyMi0+aTI7CisJCQlpZiAob2ZmID4gMCkgeworCQkJCWkwIC09IG9mZjsKKwkJCQlpMSAtPSBvZmY7CisJCQl9CisJCQllbHNlCisJCQkJaTIgKz0gb2ZmOworCQkJY2hnMCA9IHhzY3IxLT5pMSArIHhzY3IxLT5jaGcxIC0gaTA7CisJCQljaGcxID0geHNjcjEtPmkyICsgeHNjcjEtPmNoZzIgLSBpMTsKKwkJCWNoZzIgPSB4c2NyMi0+aTIgKyB4c2NyMi0+Y2hnMiAtIGkyOworCQkJaWYgKGZmbyA8IDApIHsKKwkJCQljaGcwIC09IGZmbzsKKwkJCQljaGcxIC09IGZmbzsKKwkJCX0gZWxzZQorCQkJCWNoZzIgKz0gZmZvOworCQkJaWYgKHhkbF9hcHBlbmRfbWVyZ2UoJmMsIDAsCisJCQkJCSAgICAgaTAsIGNoZzAsIGkxLCBjaGcxLCBpMiwgY2hnMikpIHsKKwkJCQl4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKworCQlpMSA9IHhzY3IxLT5pMSArIHhzY3IxLT5jaGcxOworCQlpMiA9IHhzY3IyLT5pMSArIHhzY3IyLT5jaGcxOworCisJCWlmIChpMSA+PSBpMikKKwkJCXhzY3IyID0geHNjcjItPm5leHQ7CisJCWlmIChpMiA+PSBpMSkKKwkJCXhzY3IxID0geHNjcjEtPm5leHQ7CisJfQorCXdoaWxlICh4c2NyMSkgeworCQlpZiAoIWNoYW5nZXMpCisJCQljaGFuZ2VzID0gYzsKKwkJaTAgPSB4c2NyMS0+aTE7CisJCWkxID0geHNjcjEtPmkyOworCQlpMiA9IHhzY3IxLT5pMSArIHhlMi0+eGRmMi5ucmVjIC0geGUyLT54ZGYxLm5yZWM7CisJCWNoZzAgPSB4c2NyMS0+Y2hnMTsKKwkJY2hnMSA9IHhzY3IxLT5jaGcyOworCQljaGcyID0geHNjcjEtPmNoZzE7CisJCWlmICh4ZGxfYXBwZW5kX21lcmdlKCZjLCAxLAorCQkJCSAgICAgaTAsIGNoZzAsIGkxLCBjaGcxLCBpMiwgY2hnMikpIHsKKwkJCXhkbF9jbGVhbnVwX21lcmdlKGNoYW5nZXMpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXhzY3IxID0geHNjcjEtPm5leHQ7CisJfQorCXdoaWxlICh4c2NyMikgeworCQlpZiAoIWNoYW5nZXMpCisJCQljaGFuZ2VzID0gYzsKKwkJaTAgPSB4c2NyMi0+aTE7CisJCWkxID0geHNjcjItPmkxICsgeGUxLT54ZGYyLm5yZWMgLSB4ZTEtPnhkZjEubnJlYzsKKwkJaTIgPSB4c2NyMi0+aTI7CisJCWNoZzAgPSB4c2NyMi0+Y2hnMTsKKwkJY2hnMSA9IHhzY3IyLT5jaGcxOworCQljaGcyID0geHNjcjItPmNoZzI7CisJCWlmICh4ZGxfYXBwZW5kX21lcmdlKCZjLCAyLAorCQkJCSAgICAgaTAsIGNoZzAsIGkxLCBjaGcxLCBpMiwgY2hnMikpIHsKKwkJCXhkbF9jbGVhbnVwX21lcmdlKGNoYW5nZXMpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXhzY3IyID0geHNjcjItPm5leHQ7CisJfQorCWlmICghY2hhbmdlcykKKwkJY2hhbmdlcyA9IGM7CisJLyogcmVmaW5lIGNvbmZsaWN0cyAqLworCWlmIChYRExfTUVSR0VfWkVBTE9VUyA8PSBsZXZlbCAmJgorCSAgICAoeGRsX3JlZmluZV9jb25mbGljdHMoeGUxLCB4ZTIsIGNoYW5nZXMsIHhwcCkgPCAwIHx8CisJICAgICB4ZGxfc2ltcGxpZnlfbm9uX2NvbmZsaWN0cyh4ZTEsIGNoYW5nZXMsCisJCQkJCVhETF9NRVJHRV9aRUFMT1VTIDwgbGV2ZWwpIDwgMCkpIHsKKwkJeGRsX2NsZWFudXBfbWVyZ2UoY2hhbmdlcyk7CisJCXJldHVybiAtMTsKKwl9CisJLyogb3V0cHV0ICovCisJaWYgKHJlc3VsdCkgeworCQlpbnQgbWFya2VyX3NpemUgPSB4bXAtPm1hcmtlcl9zaXplOworCQlpbnQgc2l6ZSA9IHhkbF9maWxsX21lcmdlX2J1ZmZlcih4ZTEsIG5hbWUxLCB4ZTIsIG5hbWUyLAorCQkJCQkJIGFuY2VzdG9yX25hbWUsCisJCQkJCQkgZmF2b3IsIGNoYW5nZXMsIE5VTEwsIHN0eWxlLAorCQkJCQkJIG1hcmtlcl9zaXplKTsKKwkJcmVzdWx0LT5wdHIgPSB4ZGxfbWFsbG9jKHNpemUpOworCQlpZiAoIXJlc3VsdC0+cHRyKSB7CisJCQl4ZGxfY2xlYW51cF9tZXJnZShjaGFuZ2VzKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlyZXN1bHQtPnNpemUgPSBzaXplOworCQl4ZGxfZmlsbF9tZXJnZV9idWZmZXIoeGUxLCBuYW1lMSwgeGUyLCBuYW1lMiwKKwkJCQkgICAgICBhbmNlc3Rvcl9uYW1lLCBmYXZvciwgY2hhbmdlcywKKwkJCQkgICAgICByZXN1bHQtPnB0ciwgc3R5bGUsIG1hcmtlcl9zaXplKTsKKwl9CisJcmV0dXJuIHhkbF9jbGVhbnVwX21lcmdlKGNoYW5nZXMpOworfQorCitpbnQgeGRsX21lcmdlKG1tZmlsZV90ICpvcmlnLCBtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLAorCQl4bXBhcmFtX3QgY29uc3QgKnhtcCwgbW1idWZmZXJfdCAqcmVzdWx0KQoreworCXhkY2hhbmdlX3QgKnhzY3IxLCAqeHNjcjI7CisJeGRmZW52X3QgeGUxLCB4ZTI7CisJaW50IHN0YXR1czsKKwl4cHBhcmFtX3QgY29uc3QgKnhwcCA9ICZ4bXAtPnhwcDsKKworCXJlc3VsdC0+cHRyID0gTlVMTDsKKwlyZXN1bHQtPnNpemUgPSAwOworCisJaWYgKHhkbF9kb19kaWZmKG9yaWcsIG1mMSwgeHBwLCAmeGUxKSA8IDAgfHwKKwkJCXhkbF9kb19kaWZmKG9yaWcsIG1mMiwgeHBwLCAmeGUyKSA8IDApIHsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoeGRsX2NoYW5nZV9jb21wYWN0KCZ4ZTEueGRmMSwgJnhlMS54ZGYyLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkgICAgeGRsX2NoYW5nZV9jb21wYWN0KCZ4ZTEueGRmMiwgJnhlMS54ZGYxLCB4cHAtPmZsYWdzKSA8IDAgfHwKKwkgICAgeGRsX2J1aWxkX3NjcmlwdCgmeGUxLCAmeHNjcjEpIDwgMCkgeworCQl4ZGxfZnJlZV9lbnYoJnhlMSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKHhkbF9jaGFuZ2VfY29tcGFjdCgmeGUyLnhkZjEsICZ4ZTIueGRmMiwgeHBwLT5mbGFncykgPCAwIHx8CisJICAgIHhkbF9jaGFuZ2VfY29tcGFjdCgmeGUyLnhkZjIsICZ4ZTIueGRmMSwgeHBwLT5mbGFncykgPCAwIHx8CisJICAgIHhkbF9idWlsZF9zY3JpcHQoJnhlMiwgJnhzY3IyKSA8IDApIHsKKwkJeGRsX2ZyZWVfZW52KCZ4ZTIpOworCQlyZXR1cm4gLTE7CisJfQorCXN0YXR1cyA9IDA7CisJaWYgKCF4c2NyMSkgeworCQlyZXN1bHQtPnB0ciA9IHhkbF9tYWxsb2MobWYyLT5zaXplKTsKKwkJbWVtY3B5KHJlc3VsdC0+cHRyLCBtZjItPnB0ciwgbWYyLT5zaXplKTsKKwkJcmVzdWx0LT5zaXplID0gbWYyLT5zaXplOworCX0gZWxzZSBpZiAoIXhzY3IyKSB7CisJCXJlc3VsdC0+cHRyID0geGRsX21hbGxvYyhtZjEtPnNpemUpOworCQltZW1jcHkocmVzdWx0LT5wdHIsIG1mMS0+cHRyLCBtZjEtPnNpemUpOworCQlyZXN1bHQtPnNpemUgPSBtZjEtPnNpemU7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0geGRsX2RvX21lcmdlKCZ4ZTEsIHhzY3IxLAorCQkJCSAgICAgICZ4ZTIsIHhzY3IyLAorCQkJCSAgICAgIHhtcCwgcmVzdWx0KTsKKwl9CisJeGRsX2ZyZWVfc2NyaXB0KHhzY3IxKTsKKwl4ZGxfZnJlZV9zY3JpcHQoeHNjcjIpOworCisJeGRsX2ZyZWVfZW52KCZ4ZTEpOworCXhkbF9mcmVlX2VudigmeGUyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94cGF0aWVuY2UuYyBiL3hkaWZmL3hwYXRpZW5jZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZTFhMWEKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94cGF0aWVuY2UuYwpAQCAtMCwwICsxLDM1OCBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA5IERhdmlkZSBMaWJlbnppLCBKb2hhbm5lcyBFLiBTY2hpbmRlbGluCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworI2luY2x1ZGUgInhpbmNsdWRlLmgiCisjaW5jbHVkZSAieHR5cGVzLmgiCisjaW5jbHVkZSAieGRpZmYuaCIKKworLyoKKyAqIFRoZSBiYXNpYyBpZGVhIG9mIHBhdGllbmNlIGRpZmYgaXMgdG8gZmluZCBsaW5lcyB0aGF0IGFyZSB1bmlxdWUgaW4KKyAqIGJvdGggZmlsZXMuICBUaGVzZSBhcmUgaW50dWl0aXZlbHkgdGhlIG9uZXMgdGhhdCB3ZSB3YW50IHRvIHNlZSBhcworICogY29tbW9uIGxpbmVzLgorICoKKyAqIFRoZSBtYXhpbWFsIG9yZGVyZWQgc2VxdWVuY2Ugb2Ygc3VjaCBsaW5lIHBhaXJzICh3aGVyZSBvcmRlcmVkIG1lYW5zCisgKiB0aGF0IHRoZSBvcmRlciBpbiB0aGUgc2VxdWVuY2UgYWdyZWVzIHdpdGggdGhlIG9yZGVyIG9mIHRoZSBsaW5lcyBpbgorICogYm90aCBmaWxlcykgbmF0dXJhbGx5IGRlZmluZXMgYW4gaW5pdGlhbCBzZXQgb2YgY29tbW9uIGxpbmVzLgorICoKKyAqIE5vdywgdGhlIGFsZ29yaXRobSB0cmllcyB0byBleHRlbmQgdGhlIHNldCBvZiBjb21tb24gbGluZXMgYnkgZ3Jvd2luZworICogdGhlIGxpbmUgcmFuZ2VzIHdoZXJlIHRoZSBmaWxlcyBoYXZlIGlkZW50aWNhbCBsaW5lcy4KKyAqCisgKiBCZXR3ZWVuIHRob3NlIGNvbW1vbiBsaW5lcywgdGhlIHBhdGllbmNlIGRpZmYgYWxnb3JpdGhtIGlzIGFwcGxpZWQKKyAqIHJlY3Vyc2l2ZWx5LCB1bnRpbCBubyB1bmlxdWUgbGluZSBwYWlycyBjYW4gYmUgZm91bmQ7IHRoZXNlIGxpbmUgcmFuZ2VzCisgKiBhcmUgaGFuZGxlZCBieSB0aGUgd2VsbC1rbm93biBNeWVycyBhbGdvcml0aG0uCisgKi8KKworI2RlZmluZSBOT05fVU5JUVVFIFVMT05HX01BWAorCisvKgorICogVGhpcyBpcyBhIGhhc2ggbWFwcGluZyBmcm9tIGxpbmUgaGFzaCB0byBsaW5lIG51bWJlcnMgaW4gdGhlIGZpcnN0IGFuZAorICogc2Vjb25kIGZpbGUuCisgKi8KK3N0cnVjdCBoYXNobWFwIHsKKwlpbnQgbnIsIGFsbG9jOworCXN0cnVjdCBlbnRyeSB7CisJCXVuc2lnbmVkIGxvbmcgaGFzaDsKKwkJLyoKKwkJICogMCA9IHVudXNlZCBlbnRyeSwgMSA9IGZpcnN0IGxpbmUsIDIgPSBzZWNvbmQsIGV0Yy4KKwkJICogbGluZTIgaXMgTk9OX1VOSVFVRSBpZiB0aGUgbGluZSBpcyBub3QgdW5pcXVlCisJCSAqIGluIGVpdGhlciB0aGUgZmlyc3Qgb3IgdGhlIHNlY29uZCBmaWxlLgorCQkgKi8KKwkJdW5zaWduZWQgbG9uZyBsaW5lMSwgbGluZTI7CisJCS8qCisJCSAqICJuZXh0IiAmICJwcmV2aW91cyIgYXJlIHVzZWQgZm9yIHRoZSBsb25nZXN0IGNvbW1vbgorCQkgKiBzZXF1ZW5jZTsKKwkJICogaW5pdGlhbGx5LCAibmV4dCIgcmVmbGVjdHMgb25seSB0aGUgb3JkZXIgaW4gZmlsZTEuCisJCSAqLworCQlzdHJ1Y3QgZW50cnkgKm5leHQsICpwcmV2aW91czsKKwl9ICplbnRyaWVzLCAqZmlyc3QsICpsYXN0OworCS8qIHdlcmUgY29tbW9uIHJlY29yZHMgZm91bmQ/ICovCisJdW5zaWduZWQgbG9uZyBoYXNfbWF0Y2hlczsKKwltbWZpbGVfdCAqZmlsZTEsICpmaWxlMjsKKwl4ZGZlbnZfdCAqZW52OworCXhwcGFyYW1fdCBjb25zdCAqeHBwOworfTsKKworLyogVGhlIGFyZ3VtZW50ICJwYXNzIiBpcyAxIGZvciB0aGUgZmlyc3QgZmlsZSwgMiBmb3IgdGhlIHNlY29uZC4gKi8KK3N0YXRpYyB2b2lkIGluc2VydF9yZWNvcmQoaW50IGxpbmUsIHN0cnVjdCBoYXNobWFwICptYXAsIGludCBwYXNzKQoreworCXhyZWNvcmRfdCAqKnJlY29yZHMgPSBwYXNzID09IDEgPworCQltYXAtPmVudi0+eGRmMS5yZWNzIDogbWFwLT5lbnYtPnhkZjIucmVjczsKKwl4cmVjb3JkX3QgKnJlY29yZCA9IHJlY29yZHNbbGluZSAtIDFdLCAqb3RoZXI7CisJLyoKKwkgKiBBZnRlciB4ZGxfcHJlcGFyZV9lbnYoKSAob3IgbW9yZSBwcmVjaXNlbHksIGR1ZSB0bworCSAqIHhkbF9jbGFzc2lmeV9yZWNvcmQoKSksIHRoZSAiaGEiIG1lbWJlciBvZiB0aGUgcmVjb3JkcyAoQUtBIGxpbmVzKQorCSAqIGlzIF9ub3RfIHRoZSBoYXNoIGFueW1vcmUsIGJ1dCBhIGxpbmVhcml6ZWQgdmVyc2lvbiBvZiBpdC4gIEluCisJICogb3RoZXIgd29yZHMsIHRoZSAiaGEiIG1lbWJlciBpcyBndWFyYW50ZWVkIHRvIHN0YXJ0IHdpdGggMCBhbmQKKwkgKiB0aGUgc2Vjb25kIHJlY29yZCdzIGhhIGNhbiBvbmx5IGJlIDAgb3IgMSwgZXRjLgorCSAqCisJICogU28gd2UgbXVsdGlwbHkgaGEgYnkgMiBpbiB0aGUgaG9wZSB0aGF0IHRoZSBoYXNoaW5nIHdhcworCSAqICJ1bmlxdWUgZW5vdWdoIi4KKwkgKi8KKwlpbnQgaW5kZXggPSAoaW50KSgocmVjb3JkLT5oYSA8PCAxKSAlIG1hcC0+YWxsb2MpOworCisJd2hpbGUgKG1hcC0+ZW50cmllc1tpbmRleF0ubGluZTEpIHsKKwkJb3RoZXIgPSBtYXAtPmVudi0+eGRmMS5yZWNzW21hcC0+ZW50cmllc1tpbmRleF0ubGluZTEgLSAxXTsKKwkJaWYgKG1hcC0+ZW50cmllc1tpbmRleF0uaGFzaCAhPSByZWNvcmQtPmhhIHx8CisJCQkJIXhkbF9yZWNtYXRjaChyZWNvcmQtPnB0ciwgcmVjb3JkLT5zaXplLAorCQkJCQlvdGhlci0+cHRyLCBvdGhlci0+c2l6ZSwKKwkJCQkJbWFwLT54cHAtPmZsYWdzKSkgeworCQkJaWYgKCsraW5kZXggPj0gbWFwLT5hbGxvYykKKwkJCQlpbmRleCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAocGFzcyA9PSAyKQorCQkJbWFwLT5oYXNfbWF0Y2hlcyA9IDE7CisJCWlmIChwYXNzID09IDEgfHwgbWFwLT5lbnRyaWVzW2luZGV4XS5saW5lMikKKwkJCW1hcC0+ZW50cmllc1tpbmRleF0ubGluZTIgPSBOT05fVU5JUVVFOworCQllbHNlCisJCQltYXAtPmVudHJpZXNbaW5kZXhdLmxpbmUyID0gbGluZTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGFzcyA9PSAyKQorCQlyZXR1cm47CisJbWFwLT5lbnRyaWVzW2luZGV4XS5saW5lMSA9IGxpbmU7CisJbWFwLT5lbnRyaWVzW2luZGV4XS5oYXNoID0gcmVjb3JkLT5oYTsKKwlpZiAoIW1hcC0+Zmlyc3QpCisJCW1hcC0+Zmlyc3QgPSBtYXAtPmVudHJpZXMgKyBpbmRleDsKKwlpZiAobWFwLT5sYXN0KSB7CisJCW1hcC0+bGFzdC0+bmV4dCA9IG1hcC0+ZW50cmllcyArIGluZGV4OworCQltYXAtPmVudHJpZXNbaW5kZXhdLnByZXZpb3VzID0gbWFwLT5sYXN0OworCX0KKwltYXAtPmxhc3QgPSBtYXAtPmVudHJpZXMgKyBpbmRleDsKKwltYXAtPm5yKys7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgZm9yIGVhY2ggcmVjdXJzaW9uIGludG8gdGhlIGludGVyLWh1bmsKKyAqIHBhcnRzLCBhcyBwcmV2aW91c2x5IG5vbi11bmlxdWUgbGluZXMgY2FuIGJlY29tZSB1bmlxdWUgd2hlbiBiZWluZworICogcmVzdHJpY3RlZCB0byBhIHNtYWxsZXIgcGFydCBvZiB0aGUgZmlsZXMuCisgKgorICogSXQgaXMgYXNzdW1lZCB0aGF0IGVudiBoYXMgYmVlbiBwcmVwYXJlZCB1c2luZyB4ZGxfcHJlcGFyZSgpLgorICovCitzdGF0aWMgaW50IGZpbGxfaGFzaG1hcChtbWZpbGVfdCAqZmlsZTEsIG1tZmlsZV90ICpmaWxlMiwKKwkJeHBwYXJhbV90IGNvbnN0ICp4cHAsIHhkZmVudl90ICplbnYsCisJCXN0cnVjdCBoYXNobWFwICpyZXN1bHQsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCXJlc3VsdC0+ZmlsZTEgPSBmaWxlMTsKKwlyZXN1bHQtPmZpbGUyID0gZmlsZTI7CisJcmVzdWx0LT54cHAgPSB4cHA7CisJcmVzdWx0LT5lbnYgPSBlbnY7CisKKwkvKiBXZSBrbm93IGV4YWN0bHkgaG93IGxhcmdlIHdlIHdhbnQgdGhlIGhhc2ggbWFwICovCisJcmVzdWx0LT5hbGxvYyA9IGNvdW50MSAqIDI7CisJcmVzdWx0LT5lbnRyaWVzID0gKHN0cnVjdCBlbnRyeSAqKQorCQl4ZGxfbWFsbG9jKHJlc3VsdC0+YWxsb2MgKiBzaXplb2Yoc3RydWN0IGVudHJ5KSk7CisJaWYgKCFyZXN1bHQtPmVudHJpZXMpCisJCXJldHVybiAtMTsKKwltZW1zZXQocmVzdWx0LT5lbnRyaWVzLCAwLCByZXN1bHQtPmFsbG9jICogc2l6ZW9mKHN0cnVjdCBlbnRyeSkpOworCisJLyogRmlyc3QsIGZpbGwgd2l0aCBlbnRyaWVzIGZyb20gdGhlIGZpcnN0IGZpbGUgKi8KKwl3aGlsZSAoY291bnQxLS0pCisJCWluc2VydF9yZWNvcmQobGluZTErKywgcmVzdWx0LCAxKTsKKworCS8qIFRoZW4gc2VhcmNoIGZvciBtYXRjaGVzIGluIHRoZSBzZWNvbmQgZmlsZSAqLworCXdoaWxlIChjb3VudDItLSkKKwkJaW5zZXJ0X3JlY29yZChsaW5lMisrLCByZXN1bHQsIDIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGaW5kIHRoZSBsb25nZXN0IHNlcXVlbmNlIHdpdGggYSBzbWFsbGVyIGxhc3QgZWxlbWVudCAobWVhbmluZyBhIHNtYWxsZXIKKyAqIGxpbmUyLCBhcyB3ZSBjb25zdHJ1Y3QgdGhlIHNlcXVlbmNlIHdpdGggZW50cmllcyBvcmRlcmVkIGJ5IGxpbmUxKS4KKyAqLworc3RhdGljIGludCBiaW5hcnlfc2VhcmNoKHN0cnVjdCBlbnRyeSAqKnNlcXVlbmNlLCBpbnQgbG9uZ2VzdCwKKwkJc3RydWN0IGVudHJ5ICplbnRyeSkKK3sKKwlpbnQgbGVmdCA9IC0xLCByaWdodCA9IGxvbmdlc3Q7CisKKwl3aGlsZSAobGVmdCArIDEgPCByaWdodCkgeworCQlpbnQgbWlkZGxlID0gKGxlZnQgKyByaWdodCkgLyAyOworCQkvKiBieSBjb25zdHJ1Y3Rpb24sIG5vIHR3byBlbnRyaWVzIGNhbiBiZSBlcXVhbCAqLworCQlpZiAoc2VxdWVuY2VbbWlkZGxlXS0+bGluZTIgPiBlbnRyeS0+bGluZTIpCisJCQlyaWdodCA9IG1pZGRsZTsKKwkJZWxzZQorCQkJbGVmdCA9IG1pZGRsZTsKKwl9CisJLyogcmV0dXJuIHRoZSBpbmRleCBpbiAic2VxdWVuY2UiLCBfbm90XyB0aGUgc2VxdWVuY2UgbGVuZ3RoICovCisJcmV0dXJuIGxlZnQ7Cit9CisKKy8qCisgKiBUaGUgaWRlYSBpcyB0byBzdGFydCB3aXRoIHRoZSBsaXN0IG9mIGNvbW1vbiB1bmlxdWUgbGluZXMgc29ydGVkIGJ5CisgKiB0aGUgb3JkZXIgaW4gZmlsZTEuICBGb3IgZWFjaCBvZiB0aGVzZSBwYWlycywgdGhlIGxvbmdlc3QgKHBhcnRpYWwpCisgKiBzZXF1ZW5jZSB3aG9zZSBsYXN0IGVsZW1lbnQncyBsaW5lMiBpcyBzbWFsbGVyIGlzIGRldGVybWluZWQuCisgKgorICogRm9yIGVmZmljaWVuY3ksIHRoZSBzZXF1ZW5jZXMgYXJlIGtlcHQgaW4gYSBsaXN0IGNvbnRhaW5pbmcgZXhhY3RseSBvbmUKKyAqIGl0ZW0gcGVyIHNlcXVlbmNlIGxlbmd0aDogdGhlIHNlcXVlbmNlIHdpdGggdGhlIHNtYWxsZXN0IGxhc3QKKyAqIGVsZW1lbnQgKGluIHRlcm1zIG9mIGxpbmUyKS4KKyAqLworc3RhdGljIHN0cnVjdCBlbnRyeSAqZmluZF9sb25nZXN0X2NvbW1vbl9zZXF1ZW5jZShzdHJ1Y3QgaGFzaG1hcCAqbWFwKQoreworCXN0cnVjdCBlbnRyeSAqKnNlcXVlbmNlID0geGRsX21hbGxvYyhtYXAtPm5yICogc2l6ZW9mKHN0cnVjdCBlbnRyeSAqKSk7CisJaW50IGxvbmdlc3QgPSAwLCBpOworCXN0cnVjdCBlbnRyeSAqZW50cnk7CisKKwlmb3IgKGVudHJ5ID0gbWFwLT5maXJzdDsgZW50cnk7IGVudHJ5ID0gZW50cnktPm5leHQpIHsKKwkJaWYgKCFlbnRyeS0+bGluZTIgfHwgZW50cnktPmxpbmUyID09IE5PTl9VTklRVUUpCisJCQljb250aW51ZTsKKwkJaSA9IGJpbmFyeV9zZWFyY2goc2VxdWVuY2UsIGxvbmdlc3QsIGVudHJ5KTsKKwkJZW50cnktPnByZXZpb3VzID0gaSA8IDAgPyBOVUxMIDogc2VxdWVuY2VbaV07CisJCXNlcXVlbmNlWysraV0gPSBlbnRyeTsKKwkJaWYgKGkgPT0gbG9uZ2VzdCkKKwkJCWxvbmdlc3QrKzsKKwl9CisKKwkvKiBObyBjb21tb24gdW5pcXVlIGxpbmVzIHdlcmUgZm91bmQgKi8KKwlpZiAoIWxvbmdlc3QpIHsKKwkJeGRsX2ZyZWUoc2VxdWVuY2UpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBJdGVyYXRlIHN0YXJ0aW5nIGF0IHRoZSBsYXN0IGVsZW1lbnQsIGFkanVzdGluZyB0aGUgIm5leHQiIG1lbWJlcnMgKi8KKwllbnRyeSA9IHNlcXVlbmNlW2xvbmdlc3QgLSAxXTsKKwllbnRyeS0+bmV4dCA9IE5VTEw7CisJd2hpbGUgKGVudHJ5LT5wcmV2aW91cykgeworCQllbnRyeS0+cHJldmlvdXMtPm5leHQgPSBlbnRyeTsKKwkJZW50cnkgPSBlbnRyeS0+cHJldmlvdXM7CisJfQorCXhkbF9mcmVlKHNlcXVlbmNlKTsKKwlyZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQgbWF0Y2goc3RydWN0IGhhc2htYXAgKm1hcCwgaW50IGxpbmUxLCBpbnQgbGluZTIpCit7CisJeHJlY29yZF90ICpyZWNvcmQxID0gbWFwLT5lbnYtPnhkZjEucmVjc1tsaW5lMSAtIDFdOworCXhyZWNvcmRfdCAqcmVjb3JkMiA9IG1hcC0+ZW52LT54ZGYyLnJlY3NbbGluZTIgLSAxXTsKKwlyZXR1cm4geGRsX3JlY21hdGNoKHJlY29yZDEtPnB0ciwgcmVjb3JkMS0+c2l6ZSwKKwkJcmVjb3JkMi0+cHRyLCByZWNvcmQyLT5zaXplLCBtYXAtPnhwcC0+ZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHBhdGllbmNlX2RpZmYobW1maWxlX3QgKmZpbGUxLCBtbWZpbGVfdCAqZmlsZTIsCisJCXhwcGFyYW1fdCBjb25zdCAqeHBwLCB4ZGZlbnZfdCAqZW52LAorCQlpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50Mik7CisKK3N0YXRpYyBpbnQgd2Fsa19jb21tb25fc2VxdWVuY2Uoc3RydWN0IGhhc2htYXAgKm1hcCwgc3RydWN0IGVudHJ5ICpmaXJzdCwKKwkJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpCit7CisJaW50IGVuZDEgPSBsaW5lMSArIGNvdW50MSwgZW5kMiA9IGxpbmUyICsgY291bnQyOworCWludCBuZXh0MSwgbmV4dDI7CisKKwlmb3IgKDs7KSB7CisJCS8qIFRyeSB0byBncm93IHRoZSBsaW5lIHJhbmdlcyBvZiBjb21tb24gbGluZXMgKi8KKwkJaWYgKGZpcnN0KSB7CisJCQluZXh0MSA9IGZpcnN0LT5saW5lMTsKKwkJCW5leHQyID0gZmlyc3QtPmxpbmUyOworCQkJd2hpbGUgKG5leHQxID4gbGluZTEgJiYgbmV4dDIgPiBsaW5lMiAmJgorCQkJCQltYXRjaChtYXAsIG5leHQxIC0gMSwgbmV4dDIgLSAxKSkgeworCQkJCW5leHQxLS07CisJCQkJbmV4dDItLTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW5leHQxID0gZW5kMTsKKwkJCW5leHQyID0gZW5kMjsKKwkJfQorCQl3aGlsZSAobGluZTEgPCBuZXh0MSAmJiBsaW5lMiA8IG5leHQyICYmCisJCQkJbWF0Y2gobWFwLCBsaW5lMSwgbGluZTIpKSB7CisJCQlsaW5lMSsrOworCQkJbGluZTIrKzsKKwkJfQorCisJCS8qIFJlY3Vyc2UgKi8KKwkJaWYgKG5leHQxID4gbGluZTEgfHwgbmV4dDIgPiBsaW5lMikgeworCQkJc3RydWN0IGhhc2htYXAgc3VibWFwOworCisJCQltZW1zZXQoJnN1Ym1hcCwgMCwgc2l6ZW9mKHN1Ym1hcCkpOworCQkJaWYgKHBhdGllbmNlX2RpZmYobWFwLT5maWxlMSwgbWFwLT5maWxlMiwKKwkJCQkJbWFwLT54cHAsIG1hcC0+ZW52LAorCQkJCQlsaW5lMSwgbmV4dDEgLSBsaW5lMSwKKwkJCQkJbGluZTIsIG5leHQyIC0gbGluZTIpKQorCQkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmICghZmlyc3QpCisJCQlyZXR1cm4gMDsKKworCQl3aGlsZSAoZmlyc3QtPm5leHQgJiYKKwkJCQlmaXJzdC0+bmV4dC0+bGluZTEgPT0gZmlyc3QtPmxpbmUxICsgMSAmJgorCQkJCWZpcnN0LT5uZXh0LT5saW5lMiA9PSBmaXJzdC0+bGluZTIgKyAxKQorCQkJZmlyc3QgPSBmaXJzdC0+bmV4dDsKKworCQlsaW5lMSA9IGZpcnN0LT5saW5lMSArIDE7CisJCWxpbmUyID0gZmlyc3QtPmxpbmUyICsgMTsKKworCQlmaXJzdCA9IGZpcnN0LT5uZXh0OworCX0KK30KKworc3RhdGljIGludCBmYWxsX2JhY2tfdG9fY2xhc3NpY19kaWZmKHN0cnVjdCBoYXNobWFwICptYXAsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCXhwcGFyYW1fdCB4cHA7CisJeHBwLmZsYWdzID0gbWFwLT54cHAtPmZsYWdzICYgflhERl9ESUZGX0FMR09SSVRITV9NQVNLOworCisJcmV0dXJuIHhkbF9mYWxsX2JhY2tfZGlmZihtYXAtPmVudiwgJnhwcCwKKwkJCQkgIGxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworfQorCisvKgorICogUmVjdXJzaXZlbHkgZmluZCB0aGUgbG9uZ2VzdCBjb21tb24gc2VxdWVuY2Ugb2YgdW5pcXVlIGxpbmVzLAorICogYW5kIGlmIG5vbmUgd2FzIGZvdW5kLCBhc2sgeGRsX2RvX2RpZmYoKSB0byBkbyB0aGUgam9iLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGVudiB3YXMgcHJlcGFyZWQgd2l0aCB4ZGxfcHJlcGFyZV9lbnYoKS4KKyAqLworc3RhdGljIGludCBwYXRpZW5jZV9kaWZmKG1tZmlsZV90ICpmaWxlMSwgbW1maWxlX3QgKmZpbGUyLAorCQl4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRmZW52X3QgKmVudiwKKwkJaW50IGxpbmUxLCBpbnQgY291bnQxLCBpbnQgbGluZTIsIGludCBjb3VudDIpCit7CisJc3RydWN0IGhhc2htYXAgbWFwOworCXN0cnVjdCBlbnRyeSAqZmlyc3Q7CisJaW50IHJlc3VsdCA9IDA7CisKKwkvKiB0cml2aWFsIGNhc2U6IG9uZSBzaWRlIGlzIGVtcHR5ICovCisJaWYgKCFjb3VudDEpIHsKKwkJd2hpbGUoY291bnQyLS0pCisJCQllbnYtPnhkZjIucmNoZ1tsaW5lMisrIC0gMV0gPSAxOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKCFjb3VudDIpIHsKKwkJd2hpbGUoY291bnQxLS0pCisJCQllbnYtPnhkZjEucmNoZ1tsaW5lMSsrIC0gMV0gPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwltZW1zZXQoJm1hcCwgMCwgc2l6ZW9mKG1hcCkpOworCWlmIChmaWxsX2hhc2htYXAoZmlsZTEsIGZpbGUyLCB4cHAsIGVudiwgJm1hcCwKKwkJCWxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpKQorCQlyZXR1cm4gLTE7CisKKwkvKiBhcmUgdGhlcmUgYW55IG1hdGNoaW5nIGxpbmVzIGF0IGFsbD8gKi8KKwlpZiAoIW1hcC5oYXNfbWF0Y2hlcykgeworCQl3aGlsZShjb3VudDEtLSkKKwkJCWVudi0+eGRmMS5yY2hnW2xpbmUxKysgLSAxXSA9IDE7CisJCXdoaWxlKGNvdW50Mi0tKQorCQkJZW52LT54ZGYyLnJjaGdbbGluZTIrKyAtIDFdID0gMTsKKwkJeGRsX2ZyZWUobWFwLmVudHJpZXMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlmaXJzdCA9IGZpbmRfbG9uZ2VzdF9jb21tb25fc2VxdWVuY2UoJm1hcCk7CisJaWYgKGZpcnN0KQorCQlyZXN1bHQgPSB3YWxrX2NvbW1vbl9zZXF1ZW5jZSgmbWFwLCBmaXJzdCwKKwkJCWxpbmUxLCBjb3VudDEsIGxpbmUyLCBjb3VudDIpOworCWVsc2UKKwkJcmVzdWx0ID0gZmFsbF9iYWNrX3RvX2NsYXNzaWNfZGlmZigmbWFwLAorCQkJbGluZTEsIGNvdW50MSwgbGluZTIsIGNvdW50Mik7CisKKwl4ZGxfZnJlZShtYXAuZW50cmllcyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHhkbF9kb19wYXRpZW5jZV9kaWZmKG1tZmlsZV90ICpmaWxlMSwgbW1maWxlX3QgKmZpbGUyLAorCQl4cHBhcmFtX3QgY29uc3QgKnhwcCwgeGRmZW52X3QgKmVudikKK3sKKwlpZiAoeGRsX3ByZXBhcmVfZW52KGZpbGUxLCBmaWxlMiwgeHBwLCBlbnYpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJLyogZW52aXJvbm1lbnQgaXMgY2xlYW5lZCB1cCBpbiB4ZGxfZGlmZigpICovCisJcmV0dXJuIHBhdGllbmNlX2RpZmYoZmlsZTEsIGZpbGUyLCB4cHAsIGVudiwKKwkJCTEsIGVudi0+eGRmMS5ucmVjLCAxLCBlbnYtPnhkZjIubnJlYyk7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94cHJlcGFyZS5jIGIveGRpZmYveHByZXBhcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2EyMmM2Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveHByZXBhcmUuYwpAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqICBMaWJYRGlmZiBieSBEYXZpZGUgTGliZW56aSAoIEZpbGUgRGlmZmVyZW50aWFsIExpYnJhcnkgKQorICogIENvcHlyaWdodCAoQykgMjAwMyAgRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpbmNsdWRlICJ4aW5jbHVkZS5oIgorCisKKyNkZWZpbmUgWERMX0tQRElTX1JVTiA0CisjZGVmaW5lIFhETF9NQVhfRVFMSU1JVCAxMDI0CisjZGVmaW5lIFhETF9TSU1TQ0FOX1dJTkRPVyAxMDAKKyNkZWZpbmUgWERMX0dVRVNTX05MSU5FUzEgMjU2CisjZGVmaW5lIFhETF9HVUVTU19OTElORVMyIDIwCisKKwordHlwZWRlZiBzdHJ1Y3Qgc194ZGxjbGFzcyB7CisJc3RydWN0IHNfeGRsY2xhc3MgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBoYTsKKwljaGFyIGNvbnN0ICpsaW5lOworCWxvbmcgc2l6ZTsKKwlsb25nIGlkeDsKKwlsb25nIGxlbjEsIGxlbjI7Cit9IHhkbGNsYXNzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfeGRsY2xhc3NpZmllciB7CisJdW5zaWduZWQgaW50IGhiaXRzOworCWxvbmcgaHNpemU7CisJeGRsY2xhc3NfdCAqKnJjaGFzaDsKKwljaGFzdG9yZV90IG5jaGE7CisJeGRsY2xhc3NfdCAqKnJjcmVjczsKKwlsb25nIGFsbG9jOworCWxvbmcgY291bnQ7CisJbG9uZyBmbGFnczsKK30geGRsY2xhc3NpZmllcl90OworCisKKworCitzdGF0aWMgaW50IHhkbF9pbml0X2NsYXNzaWZpZXIoeGRsY2xhc3NpZmllcl90ICpjZiwgbG9uZyBzaXplLCBsb25nIGZsYWdzKTsKK3N0YXRpYyB2b2lkIHhkbF9mcmVlX2NsYXNzaWZpZXIoeGRsY2xhc3NpZmllcl90ICpjZik7CitzdGF0aWMgaW50IHhkbF9jbGFzc2lmeV9yZWNvcmQodW5zaWduZWQgaW50IHBhc3MsIHhkbGNsYXNzaWZpZXJfdCAqY2YsIHhyZWNvcmRfdCAqKnJoYXNoLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBoYml0cywgeHJlY29yZF90ICpyZWMpOworc3RhdGljIGludCB4ZGxfcHJlcGFyZV9jdHgodW5zaWduZWQgaW50IHBhc3MsIG1tZmlsZV90ICptZiwgbG9uZyBuYXJlYywgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCQkgICB4ZGxjbGFzc2lmaWVyX3QgKmNmLCB4ZGZpbGVfdCAqeGRmKTsKK3N0YXRpYyB2b2lkIHhkbF9mcmVlX2N0eCh4ZGZpbGVfdCAqeGRmKTsKK3N0YXRpYyBpbnQgeGRsX2NsZWFuX21tYXRjaChjaGFyIGNvbnN0ICpkaXMsIGxvbmcgaSwgbG9uZyBzLCBsb25nIGUpOworc3RhdGljIGludCB4ZGxfY2xlYW51cF9yZWNvcmRzKHhkbGNsYXNzaWZpZXJfdCAqY2YsIHhkZmlsZV90ICp4ZGYxLCB4ZGZpbGVfdCAqeGRmMik7CitzdGF0aWMgaW50IHhkbF90cmltX2VuZHMoeGRmaWxlX3QgKnhkZjEsIHhkZmlsZV90ICp4ZGYyKTsKK3N0YXRpYyBpbnQgeGRsX29wdGltaXplX2N0eHMoeGRsY2xhc3NpZmllcl90ICpjZiwgeGRmaWxlX3QgKnhkZjEsIHhkZmlsZV90ICp4ZGYyKTsKKworCisKKworc3RhdGljIGludCB4ZGxfaW5pdF9jbGFzc2lmaWVyKHhkbGNsYXNzaWZpZXJfdCAqY2YsIGxvbmcgc2l6ZSwgbG9uZyBmbGFncykgeworCWNmLT5mbGFncyA9IGZsYWdzOworCisJY2YtPmhiaXRzID0geGRsX2hhc2hiaXRzKCh1bnNpZ25lZCBpbnQpIHNpemUpOworCWNmLT5oc2l6ZSA9IDEgPDwgY2YtPmhiaXRzOworCisJaWYgKHhkbF9jaGFfaW5pdCgmY2YtPm5jaGEsIHNpemVvZih4ZGxjbGFzc190KSwgc2l6ZSAvIDQgKyAxKSA8IDApIHsKKworCQlyZXR1cm4gLTE7CisJfQorCWlmICghKGNmLT5yY2hhc2ggPSAoeGRsY2xhc3NfdCAqKikgeGRsX21hbGxvYyhjZi0+aHNpemUgKiBzaXplb2YoeGRsY2xhc3NfdCAqKSkpKSB7CisKKwkJeGRsX2NoYV9mcmVlKCZjZi0+bmNoYSk7CisJCXJldHVybiAtMTsKKwl9CisJbWVtc2V0KGNmLT5yY2hhc2gsIDAsIGNmLT5oc2l6ZSAqIHNpemVvZih4ZGxjbGFzc190ICopKTsKKworCWNmLT5hbGxvYyA9IHNpemU7CisJaWYgKCEoY2YtPnJjcmVjcyA9ICh4ZGxjbGFzc190ICoqKSB4ZGxfbWFsbG9jKGNmLT5hbGxvYyAqIHNpemVvZih4ZGxjbGFzc190ICopKSkpIHsKKworCQl4ZGxfZnJlZShjZi0+cmNoYXNoKTsKKwkJeGRsX2NoYV9mcmVlKCZjZi0+bmNoYSk7CisJCXJldHVybiAtMTsKKwl9CisKKwljZi0+Y291bnQgPSAwOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgeGRsX2ZyZWVfY2xhc3NpZmllcih4ZGxjbGFzc2lmaWVyX3QgKmNmKSB7CisKKwl4ZGxfZnJlZShjZi0+cmNyZWNzKTsKKwl4ZGxfZnJlZShjZi0+cmNoYXNoKTsKKwl4ZGxfY2hhX2ZyZWUoJmNmLT5uY2hhKTsKK30KKworCitzdGF0aWMgaW50IHhkbF9jbGFzc2lmeV9yZWNvcmQodW5zaWduZWQgaW50IHBhc3MsIHhkbGNsYXNzaWZpZXJfdCAqY2YsIHhyZWNvcmRfdCAqKnJoYXNoLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBoYml0cywgeHJlY29yZF90ICpyZWMpIHsKKwlsb25nIGhpOworCWNoYXIgY29uc3QgKmxpbmU7CisJeGRsY2xhc3NfdCAqcmNyZWM7CisJeGRsY2xhc3NfdCAqKnJjcmVjczsKKworCWxpbmUgPSByZWMtPnB0cjsKKwloaSA9IChsb25nKSBYRExfSEFTSExPTkcocmVjLT5oYSwgY2YtPmhiaXRzKTsKKwlmb3IgKHJjcmVjID0gY2YtPnJjaGFzaFtoaV07IHJjcmVjOyByY3JlYyA9IHJjcmVjLT5uZXh0KQorCQlpZiAocmNyZWMtPmhhID09IHJlYy0+aGEgJiYKKwkJCQl4ZGxfcmVjbWF0Y2gocmNyZWMtPmxpbmUsIHJjcmVjLT5zaXplLAorCQkJCQlyZWMtPnB0ciwgcmVjLT5zaXplLCBjZi0+ZmxhZ3MpKQorCQkJYnJlYWs7CisKKwlpZiAoIXJjcmVjKSB7CisJCWlmICghKHJjcmVjID0geGRsX2NoYV9hbGxvYygmY2YtPm5jaGEpKSkgeworCisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmNyZWMtPmlkeCA9IGNmLT5jb3VudCsrOworCQlpZiAoY2YtPmNvdW50ID4gY2YtPmFsbG9jKSB7CisJCQljZi0+YWxsb2MgKj0gMjsKKwkJCWlmICghKHJjcmVjcyA9ICh4ZGxjbGFzc190ICoqKSB4ZGxfcmVhbGxvYyhjZi0+cmNyZWNzLCBjZi0+YWxsb2MgKiBzaXplb2YoeGRsY2xhc3NfdCAqKSkpKSB7CisKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQljZi0+cmNyZWNzID0gcmNyZWNzOworCQl9CisJCWNmLT5yY3JlY3NbcmNyZWMtPmlkeF0gPSByY3JlYzsKKwkJcmNyZWMtPmxpbmUgPSBsaW5lOworCQlyY3JlYy0+c2l6ZSA9IHJlYy0+c2l6ZTsKKwkJcmNyZWMtPmhhID0gcmVjLT5oYTsKKwkJcmNyZWMtPmxlbjEgPSByY3JlYy0+bGVuMiA9IDA7CisJCXJjcmVjLT5uZXh0ID0gY2YtPnJjaGFzaFtoaV07CisJCWNmLT5yY2hhc2hbaGldID0gcmNyZWM7CisJfQorCisJKHBhc3MgPT0gMSkgPyByY3JlYy0+bGVuMSsrIDogcmNyZWMtPmxlbjIrKzsKKworCXJlYy0+aGEgPSAodW5zaWduZWQgbG9uZykgcmNyZWMtPmlkeDsKKworCWhpID0gKGxvbmcpIFhETF9IQVNITE9ORyhyZWMtPmhhLCBoYml0cyk7CisJcmVjLT5uZXh0ID0gcmhhc2hbaGldOworCXJoYXNoW2hpXSA9IHJlYzsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgeGRsX3ByZXBhcmVfY3R4KHVuc2lnbmVkIGludCBwYXNzLCBtbWZpbGVfdCAqbWYsIGxvbmcgbmFyZWMsIHhwcGFyYW1fdCBjb25zdCAqeHBwLAorCQkJICAgeGRsY2xhc3NpZmllcl90ICpjZiwgeGRmaWxlX3QgKnhkZikgeworCXVuc2lnbmVkIGludCBoYml0czsKKwlsb25nIG5yZWMsIGhzaXplLCBic2l6ZTsKKwl1bnNpZ25lZCBsb25nIGhhdjsKKwljaGFyIGNvbnN0ICpibGssICpjdXIsICp0b3AsICpwcmV2OworCXhyZWNvcmRfdCAqY3JlYzsKKwl4cmVjb3JkX3QgKipyZWNzLCAqKnJyZWNzOworCXhyZWNvcmRfdCAqKnJoYXNoOworCXVuc2lnbmVkIGxvbmcgKmhhOworCWNoYXIgKnJjaGc7CisJbG9uZyAqcmluZGV4OworCisJaGEgPSBOVUxMOworCXJpbmRleCA9IE5VTEw7CisJcmNoZyA9IE5VTEw7CisJcmhhc2ggPSBOVUxMOworCXJlY3MgPSBOVUxMOworCisJaWYgKHhkbF9jaGFfaW5pdCgmeGRmLT5yY2hhLCBzaXplb2YoeHJlY29yZF90KSwgbmFyZWMgLyA0ICsgMSkgPCAwKQorCQlnb3RvIGFib3J0OworCWlmICghKHJlY3MgPSAoeHJlY29yZF90ICoqKSB4ZGxfbWFsbG9jKG5hcmVjICogc2l6ZW9mKHhyZWNvcmRfdCAqKSkpKQorCQlnb3RvIGFib3J0OworCisJaWYgKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSA9PSBYREZfSElTVE9HUkFNX0RJRkYpCisJCWhiaXRzID0gaHNpemUgPSAwOworCWVsc2UgeworCQloYml0cyA9IHhkbF9oYXNoYml0cygodW5zaWduZWQgaW50KSBuYXJlYyk7CisJCWhzaXplID0gMSA8PCBoYml0czsKKwkJaWYgKCEocmhhc2ggPSAoeHJlY29yZF90ICoqKSB4ZGxfbWFsbG9jKGhzaXplICogc2l6ZW9mKHhyZWNvcmRfdCAqKSkpKQorCQkJZ290byBhYm9ydDsKKwkJbWVtc2V0KHJoYXNoLCAwLCBoc2l6ZSAqIHNpemVvZih4cmVjb3JkX3QgKikpOworCX0KKworCW5yZWMgPSAwOworCWlmICgoY3VyID0gYmxrID0geGRsX21tZmlsZV9maXJzdChtZiwgJmJzaXplKSkgIT0gTlVMTCkgeworCQlmb3IgKHRvcCA9IGJsayArIGJzaXplOyBjdXIgPCB0b3A7ICkgeworCQkJcHJldiA9IGN1cjsKKwkJCWhhdiA9IHhkbF9oYXNoX3JlY29yZCgmY3VyLCB0b3AsIHhwcC0+ZmxhZ3MpOworCQkJaWYgKG5yZWMgPj0gbmFyZWMpIHsKKwkJCQluYXJlYyAqPSAyOworCQkJCWlmICghKHJyZWNzID0gKHhyZWNvcmRfdCAqKikgeGRsX3JlYWxsb2MocmVjcywgbmFyZWMgKiBzaXplb2YoeHJlY29yZF90ICopKSkpCisJCQkJCWdvdG8gYWJvcnQ7CisJCQkJcmVjcyA9IHJyZWNzOworCQkJfQorCQkJaWYgKCEoY3JlYyA9IHhkbF9jaGFfYWxsb2MoJnhkZi0+cmNoYSkpKQorCQkJCWdvdG8gYWJvcnQ7CisJCQljcmVjLT5wdHIgPSBwcmV2OworCQkJY3JlYy0+c2l6ZSA9IChsb25nKSAoY3VyIC0gcHJldik7CisJCQljcmVjLT5oYSA9IGhhdjsKKwkJCXJlY3NbbnJlYysrXSA9IGNyZWM7CisKKwkJCWlmICgoWERGX0RJRkZfQUxHKHhwcC0+ZmxhZ3MpICE9IFhERl9ISVNUT0dSQU1fRElGRikgJiYKKwkJCSAgICB4ZGxfY2xhc3NpZnlfcmVjb3JkKHBhc3MsIGNmLCByaGFzaCwgaGJpdHMsIGNyZWMpIDwgMCkKKwkJCQlnb3RvIGFib3J0OworCQl9CisJfQorCisJaWYgKCEocmNoZyA9IChjaGFyICopIHhkbF9tYWxsb2MoKG5yZWMgKyAyKSAqIHNpemVvZihjaGFyKSkpKQorCQlnb3RvIGFib3J0OworCW1lbXNldChyY2hnLCAwLCAobnJlYyArIDIpICogc2l6ZW9mKGNoYXIpKTsKKworCWlmICghKHJpbmRleCA9IChsb25nICopIHhkbF9tYWxsb2MoKG5yZWMgKyAxKSAqIHNpemVvZihsb25nKSkpKQorCQlnb3RvIGFib3J0OworCWlmICghKGhhID0gKHVuc2lnbmVkIGxvbmcgKikgeGRsX21hbGxvYygobnJlYyArIDEpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkpCisJCWdvdG8gYWJvcnQ7CisKKwl4ZGYtPm5yZWMgPSBucmVjOworCXhkZi0+cmVjcyA9IHJlY3M7CisJeGRmLT5oYml0cyA9IGhiaXRzOworCXhkZi0+cmhhc2ggPSByaGFzaDsKKwl4ZGYtPnJjaGcgPSByY2hnICsgMTsKKwl4ZGYtPnJpbmRleCA9IHJpbmRleDsKKwl4ZGYtPm5yZWZmID0gMDsKKwl4ZGYtPmhhID0gaGE7CisJeGRmLT5kc3RhcnQgPSAwOworCXhkZi0+ZGVuZCA9IG5yZWMgLSAxOworCisJcmV0dXJuIDA7CisKK2Fib3J0OgorCXhkbF9mcmVlKGhhKTsKKwl4ZGxfZnJlZShyaW5kZXgpOworCXhkbF9mcmVlKHJjaGcpOworCXhkbF9mcmVlKHJoYXNoKTsKKwl4ZGxfZnJlZShyZWNzKTsKKwl4ZGxfY2hhX2ZyZWUoJnhkZi0+cmNoYSk7CisJcmV0dXJuIC0xOworfQorCisKK3N0YXRpYyB2b2lkIHhkbF9mcmVlX2N0eCh4ZGZpbGVfdCAqeGRmKSB7CisKKwl4ZGxfZnJlZSh4ZGYtPnJoYXNoKTsKKwl4ZGxfZnJlZSh4ZGYtPnJpbmRleCk7CisJeGRsX2ZyZWUoeGRmLT5yY2hnIC0gMSk7CisJeGRsX2ZyZWUoeGRmLT5oYSk7CisJeGRsX2ZyZWUoeGRmLT5yZWNzKTsKKwl4ZGxfY2hhX2ZyZWUoJnhkZi0+cmNoYSk7Cit9CisKKworaW50IHhkbF9wcmVwYXJlX2VudihtbWZpbGVfdCAqbWYxLCBtbWZpbGVfdCAqbWYyLCB4cHBhcmFtX3QgY29uc3QgKnhwcCwKKwkJICAgIHhkZmVudl90ICp4ZSkgeworCWxvbmcgZW5sMSwgZW5sMiwgc2FtcGxlOworCXhkbGNsYXNzaWZpZXJfdCBjZjsKKworCW1lbXNldCgmY2YsIDAsIHNpemVvZihjZikpOworCisJLyoKKwkgKiBGb3IgaGlzdG9ncmFtIGRpZmYsIHdlIGNhbiBhZmZvcmQgYSBzbWFsbGVyIHNhbXBsZSBzaXplIGFuZAorCSAqIHRodXMgYSBwb29yZXIgZXN0aW1hdGUgb2YgdGhlIG51bWJlciBvZiBsaW5lcywgYXMgdGhlIGhhc2gKKwkgKiB0YWJsZSAocmhhc2gpIHdvbid0IGJlIGZpbGxlZCB1cC9ncm93bi4gVGhlIG51bWJlciBvZiBsaW5lcworCSAqIChucmVjcykgd2lsbCBiZSB1cGRhdGVkIGNvcnJlY3RseSBhbnl3YXkgYnkKKwkgKiB4ZGxfcHJlcGFyZV9jdHgoKS4KKwkgKi8KKwlzYW1wbGUgPSAoWERGX0RJRkZfQUxHKHhwcC0+ZmxhZ3MpID09IFhERl9ISVNUT0dSQU1fRElGRgorCQkgID8gWERMX0dVRVNTX05MSU5FUzIgOiBYRExfR1VFU1NfTkxJTkVTMSk7CisKKwllbmwxID0geGRsX2d1ZXNzX2xpbmVzKG1mMSwgc2FtcGxlKSArIDE7CisJZW5sMiA9IHhkbF9ndWVzc19saW5lcyhtZjIsIHNhbXBsZSkgKyAxOworCisJaWYgKFhERl9ESUZGX0FMRyh4cHAtPmZsYWdzKSAhPSBYREZfSElTVE9HUkFNX0RJRkYgJiYKKwkgICAgeGRsX2luaXRfY2xhc3NpZmllcigmY2YsIGVubDEgKyBlbmwyICsgMSwgeHBwLT5mbGFncykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoeGRsX3ByZXBhcmVfY3R4KDEsIG1mMSwgZW5sMSwgeHBwLCAmY2YsICZ4ZS0+eGRmMSkgPCAwKSB7CisKKwkJeGRsX2ZyZWVfY2xhc3NpZmllcigmY2YpOworCQlyZXR1cm4gLTE7CisJfQorCWlmICh4ZGxfcHJlcGFyZV9jdHgoMiwgbWYyLCBlbmwyLCB4cHAsICZjZiwgJnhlLT54ZGYyKSA8IDApIHsKKworCQl4ZGxfZnJlZV9jdHgoJnhlLT54ZGYxKTsKKwkJeGRsX2ZyZWVfY2xhc3NpZmllcigmY2YpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKChYREZfRElGRl9BTEcoeHBwLT5mbGFncykgIT0gWERGX1BBVElFTkNFX0RJRkYpICYmCisJICAgIChYREZfRElGRl9BTEcoeHBwLT5mbGFncykgIT0gWERGX0hJU1RPR1JBTV9ESUZGKSAmJgorCSAgICB4ZGxfb3B0aW1pemVfY3R4cygmY2YsICZ4ZS0+eGRmMSwgJnhlLT54ZGYyKSA8IDApIHsKKworCQl4ZGxfZnJlZV9jdHgoJnhlLT54ZGYyKTsKKwkJeGRsX2ZyZWVfY3R4KCZ4ZS0+eGRmMSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoISh4cHAtPmZsYWdzICYgWERGX0hJU1RPR1JBTV9ESUZGKSkKKwkJeGRsX2ZyZWVfY2xhc3NpZmllcigmY2YpOworCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCB4ZGxfZnJlZV9lbnYoeGRmZW52X3QgKnhlKSB7CisKKwl4ZGxfZnJlZV9jdHgoJnhlLT54ZGYyKTsKKwl4ZGxfZnJlZV9jdHgoJnhlLT54ZGYxKTsKK30KKworCitzdGF0aWMgaW50IHhkbF9jbGVhbl9tbWF0Y2goY2hhciBjb25zdCAqZGlzLCBsb25nIGksIGxvbmcgcywgbG9uZyBlKSB7CisJbG9uZyByLCByZGlzMCwgcnBkaXMwLCByZGlzMSwgcnBkaXMxOworCisJLyoKKwkgKiBMaW1pdHMgdGhlIHdpbmRvdyB0aGUgaXMgZXhhbWluZWQgZHVyaW5nIHRoZSBzaW1pbGFyLWxpbmVzCisJICogc2Nhbi4gVGhlIGxvb3BzIGJlbG93IHN0b3BzIHdoZW4gZGlzW2kgLSByXSA9PSAxIChsaW5lIHRoYXQKKwkgKiBoYXMgbm8gbWF0Y2gpLCBidXQgdGhlcmUgYXJlIGNvcm5lciBjYXNlcyB3aGVyZSB0aGUgbG9vcAorCSAqIHByb2NlZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGV4dHJlbWl0aWVzIGJ5IGNhdXNpbmcgaHVnZQorCSAqIHBlcmZvcm1hbmNlIHBlbmFsdGllcyBpbiBjYXNlIG9mIGJpZyBmaWxlcy4KKwkgKi8KKwlpZiAoaSAtIHMgPiBYRExfU0lNU0NBTl9XSU5ET1cpCisJCXMgPSBpIC0gWERMX1NJTVNDQU5fV0lORE9XOworCWlmIChlIC0gaSA+IFhETF9TSU1TQ0FOX1dJTkRPVykKKwkJZSA9IGkgKyBYRExfU0lNU0NBTl9XSU5ET1c7CisKKwkvKgorCSAqIFNjYW5zIHRoZSBsaW5lcyBiZWZvcmUgJ2knIHRvIGZpbmQgYSBydW4gb2YgbGluZXMgdGhhdCBlaXRoZXIKKwkgKiBoYXZlIG5vIG1hdGNoIChkaXNbal0gPT0gMCkgb3IgaGF2ZSBtdWx0aXBsZSBtYXRjaGVzIChkaXNbal0gPiAxKS4KKwkgKiBOb3RlIHRoYXQgd2UgYWx3YXlzIGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc1tpXSA+IDEsIHNvIHRoZQorCSAqIGN1cnJlbnQgbGluZSAoaSkgaXMgYWxyZWFkeSBhIG11bHRpbWF0Y2ggbGluZS4KKwkgKi8KKwlmb3IgKHIgPSAxLCByZGlzMCA9IDAsIHJwZGlzMCA9IDE7IChpIC0gcikgPj0gczsgcisrKSB7CisJCWlmICghZGlzW2kgLSByXSkKKwkJCXJkaXMwKys7CisJCWVsc2UgaWYgKGRpc1tpIC0gcl0gPT0gMikKKwkJCXJwZGlzMCsrOworCQllbHNlCisJCQlicmVhazsKKwl9CisJLyoKKwkgKiBJZiB0aGUgcnVuIGJlZm9yZSB0aGUgbGluZSAnaScgZm91bmQgb25seSBtdWx0aW1hdGNoIGxpbmVzLCB3ZQorCSAqIHJldHVybiAwIGFuZCBoZW5jZSB3ZSBkb24ndCBtYWtlIHRoZSBjdXJyZW50IGxpbmUgKGkpIGRpc2NhcmRlZC4KKwkgKiBXZSB3YW50IHRvIGRpc2NhcmQgbXVsdGltYXRjaCBsaW5lcyBvbmx5IHdoZW4gdGhleSBhcHBlYXIgaW4gdGhlCisJICogbWlkZGxlIG9mIHJ1bnMgd2l0aCBub21hdGNoIGxpbmVzIChkaXNbal0gPT0gMCkuCisJICovCisJaWYgKHJkaXMwID09IDApCisJCXJldHVybiAwOworCWZvciAociA9IDEsIHJkaXMxID0gMCwgcnBkaXMxID0gMTsgKGkgKyByKSA8PSBlOyByKyspIHsKKwkJaWYgKCFkaXNbaSArIHJdKQorCQkJcmRpczErKzsKKwkJZWxzZSBpZiAoZGlzW2kgKyByXSA9PSAyKQorCQkJcnBkaXMxKys7CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKwkvKgorCSAqIElmIHRoZSBydW4gYWZ0ZXIgdGhlIGxpbmUgJ2knIGZvdW5kIG9ubHkgbXVsdGltYXRjaCBsaW5lcywgd2UKKwkgKiByZXR1cm4gMCBhbmQgaGVuY2Ugd2UgZG9uJ3QgbWFrZSB0aGUgY3VycmVudCBsaW5lIChpKSBkaXNjYXJkZWQuCisJICovCisJaWYgKHJkaXMxID09IDApCisJCXJldHVybiAwOworCXJkaXMxICs9IHJkaXMwOworCXJwZGlzMSArPSBycGRpczA7CisKKwlyZXR1cm4gcnBkaXMxICogWERMX0tQRElTX1JVTiA8IChycGRpczEgKyByZGlzMSk7Cit9CisKKworLyoKKyAqIFRyeSB0byByZWR1Y2UgdGhlIHByb2JsZW0gY29tcGxleGl0eSwgZGlzY2FyZCByZWNvcmRzIHRoYXQgaGF2ZSBubworICogbWF0Y2hlcyBvbiB0aGUgb3RoZXIgZmlsZS4gQWxzbywgbGluZXMgdGhhdCBoYXZlIG11bHRpcGxlIG1hdGNoZXMKKyAqIG1pZ2h0IGJlIHBvdGVudGlhbGx5IGRpc2NhcmRlZCBpZiB0aGV5IGhhcHBlYXIgaW4gYSBydW4gb2YgZGlzY2FyZGFibGUuCisgKi8KK3N0YXRpYyBpbnQgeGRsX2NsZWFudXBfcmVjb3Jkcyh4ZGxjbGFzc2lmaWVyX3QgKmNmLCB4ZGZpbGVfdCAqeGRmMSwgeGRmaWxlX3QgKnhkZjIpIHsKKwlsb25nIGksIG5tLCBucmVmZiwgbWxpbTsKKwl4cmVjb3JkX3QgKipyZWNzOworCXhkbGNsYXNzX3QgKnJjcmVjOworCWNoYXIgKmRpcywgKmRpczEsICpkaXMyOworCisJaWYgKCEoZGlzID0gKGNoYXIgKikgeGRsX21hbGxvYyh4ZGYxLT5ucmVjICsgeGRmMi0+bnJlYyArIDIpKSkgeworCisJCXJldHVybiAtMTsKKwl9CisJbWVtc2V0KGRpcywgMCwgeGRmMS0+bnJlYyArIHhkZjItPm5yZWMgKyAyKTsKKwlkaXMxID0gZGlzOworCWRpczIgPSBkaXMxICsgeGRmMS0+bnJlYyArIDE7CisKKwlpZiAoKG1saW0gPSB4ZGxfYm9nb3NxcnQoeGRmMS0+bnJlYykpID4gWERMX01BWF9FUUxJTUlUKQorCQltbGltID0gWERMX01BWF9FUUxJTUlUOworCWZvciAoaSA9IHhkZjEtPmRzdGFydCwgcmVjcyA9ICZ4ZGYxLT5yZWNzW3hkZjEtPmRzdGFydF07IGkgPD0geGRmMS0+ZGVuZDsgaSsrLCByZWNzKyspIHsKKwkJcmNyZWMgPSBjZi0+cmNyZWNzWygqcmVjcyktPmhhXTsKKwkJbm0gPSByY3JlYyA/IHJjcmVjLT5sZW4yIDogMDsKKwkJZGlzMVtpXSA9IChubSA9PSAwKSA/IDA6IChubSA+PSBtbGltKSA/IDI6IDE7CisJfQorCisJaWYgKChtbGltID0geGRsX2JvZ29zcXJ0KHhkZjItPm5yZWMpKSA+IFhETF9NQVhfRVFMSU1JVCkKKwkJbWxpbSA9IFhETF9NQVhfRVFMSU1JVDsKKwlmb3IgKGkgPSB4ZGYyLT5kc3RhcnQsIHJlY3MgPSAmeGRmMi0+cmVjc1t4ZGYyLT5kc3RhcnRdOyBpIDw9IHhkZjItPmRlbmQ7IGkrKywgcmVjcysrKSB7CisJCXJjcmVjID0gY2YtPnJjcmVjc1soKnJlY3MpLT5oYV07CisJCW5tID0gcmNyZWMgPyByY3JlYy0+bGVuMSA6IDA7CisJCWRpczJbaV0gPSAobm0gPT0gMCkgPyAwOiAobm0gPj0gbWxpbSkgPyAyOiAxOworCX0KKworCWZvciAobnJlZmYgPSAwLCBpID0geGRmMS0+ZHN0YXJ0LCByZWNzID0gJnhkZjEtPnJlY3NbeGRmMS0+ZHN0YXJ0XTsKKwkgICAgIGkgPD0geGRmMS0+ZGVuZDsgaSsrLCByZWNzKyspIHsKKwkJaWYgKGRpczFbaV0gPT0gMSB8fAorCQkgICAgKGRpczFbaV0gPT0gMiAmJiAheGRsX2NsZWFuX21tYXRjaChkaXMxLCBpLCB4ZGYxLT5kc3RhcnQsIHhkZjEtPmRlbmQpKSkgeworCQkJeGRmMS0+cmluZGV4W25yZWZmXSA9IGk7CisJCQl4ZGYxLT5oYVtucmVmZl0gPSAoKnJlY3MpLT5oYTsKKwkJCW5yZWZmKys7CisJCX0gZWxzZQorCQkJeGRmMS0+cmNoZ1tpXSA9IDE7CisJfQorCXhkZjEtPm5yZWZmID0gbnJlZmY7CisKKwlmb3IgKG5yZWZmID0gMCwgaSA9IHhkZjItPmRzdGFydCwgcmVjcyA9ICZ4ZGYyLT5yZWNzW3hkZjItPmRzdGFydF07CisJICAgICBpIDw9IHhkZjItPmRlbmQ7IGkrKywgcmVjcysrKSB7CisJCWlmIChkaXMyW2ldID09IDEgfHwKKwkJICAgIChkaXMyW2ldID09IDIgJiYgIXhkbF9jbGVhbl9tbWF0Y2goZGlzMiwgaSwgeGRmMi0+ZHN0YXJ0LCB4ZGYyLT5kZW5kKSkpIHsKKwkJCXhkZjItPnJpbmRleFtucmVmZl0gPSBpOworCQkJeGRmMi0+aGFbbnJlZmZdID0gKCpyZWNzKS0+aGE7CisJCQlucmVmZisrOworCQl9IGVsc2UKKwkJCXhkZjItPnJjaGdbaV0gPSAxOworCX0KKwl4ZGYyLT5ucmVmZiA9IG5yZWZmOworCisJeGRsX2ZyZWUoZGlzKTsKKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBFYXJseSB0cmltIGluaXRpYWwgYW5kIHRlcm1pbmFsIG1hdGNoaW5nIHJlY29yZHMuCisgKi8KK3N0YXRpYyBpbnQgeGRsX3RyaW1fZW5kcyh4ZGZpbGVfdCAqeGRmMSwgeGRmaWxlX3QgKnhkZjIpIHsKKwlsb25nIGksIGxpbTsKKwl4cmVjb3JkX3QgKipyZWNzMSwgKipyZWNzMjsKKworCXJlY3MxID0geGRmMS0+cmVjczsKKwlyZWNzMiA9IHhkZjItPnJlY3M7CisJZm9yIChpID0gMCwgbGltID0gWERMX01JTih4ZGYxLT5ucmVjLCB4ZGYyLT5ucmVjKTsgaSA8IGxpbTsKKwkgICAgIGkrKywgcmVjczErKywgcmVjczIrKykKKwkJaWYgKCgqcmVjczEpLT5oYSAhPSAoKnJlY3MyKS0+aGEpCisJCQlicmVhazsKKworCXhkZjEtPmRzdGFydCA9IHhkZjItPmRzdGFydCA9IGk7CisKKwlyZWNzMSA9IHhkZjEtPnJlY3MgKyB4ZGYxLT5ucmVjIC0gMTsKKwlyZWNzMiA9IHhkZjItPnJlY3MgKyB4ZGYyLT5ucmVjIC0gMTsKKwlmb3IgKGxpbSAtPSBpLCBpID0gMDsgaSA8IGxpbTsgaSsrLCByZWNzMS0tLCByZWNzMi0tKQorCQlpZiAoKCpyZWNzMSktPmhhICE9ICgqcmVjczIpLT5oYSkKKwkJCWJyZWFrOworCisJeGRmMS0+ZGVuZCA9IHhkZjEtPm5yZWMgLSBpIC0gMTsKKwl4ZGYyLT5kZW5kID0geGRmMi0+bnJlYyAtIGkgLSAxOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB4ZGxfb3B0aW1pemVfY3R4cyh4ZGxjbGFzc2lmaWVyX3QgKmNmLCB4ZGZpbGVfdCAqeGRmMSwgeGRmaWxlX3QgKnhkZjIpIHsKKworCWlmICh4ZGxfdHJpbV9lbmRzKHhkZjEsIHhkZjIpIDwgMCB8fAorCSAgICB4ZGxfY2xlYW51cF9yZWNvcmRzKGNmLCB4ZGYxLCB4ZGYyKSA8IDApIHsKKworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94cHJlcGFyZS5oIGIveGRpZmYveHByZXBhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmIwNmE1Ci0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveHByZXBhcmUuaApAQCAtMCwwICsxLDM0IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhQUkVQQVJFX0gpCisjZGVmaW5lIFhQUkVQQVJFX0gKKworCisKK2ludCB4ZGxfcHJlcGFyZV9lbnYobW1maWxlX3QgKm1mMSwgbW1maWxlX3QgKm1mMiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCSAgICB4ZGZlbnZfdCAqeGUpOwordm9pZCB4ZGxfZnJlZV9lbnYoeGRmZW52X3QgKnhlKTsKKworCisKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoWFBSRVBBUkVfSCkgKi8KZGlmZiAtLWdpdCBhL3hkaWZmL3h0eXBlcy5oIGIveGRpZmYveHR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxMWFlZgotLS0gL2Rldi9udWxsCisrKyBiL3hkaWZmL3h0eXBlcy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIERhdmlkZSBMaWJlbnppCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiAgRGF2aWRlIExpYmVuemkgPGRhdmlkZWxAeG1haWxzZXJ2ZXIub3JnPgorICoKKyAqLworCisjaWYgIWRlZmluZWQoWFRZUEVTX0gpCisjZGVmaW5lIFhUWVBFU19ICisKKworCit0eXBlZGVmIHN0cnVjdCBzX2NoYW5vZGUgeworCXN0cnVjdCBzX2NoYW5vZGUgKm5leHQ7CisJbG9uZyBpY3VycjsKK30gY2hhbm9kZV90OworCit0eXBlZGVmIHN0cnVjdCBzX2NoYXN0b3JlIHsKKwljaGFub2RlX3QgKmhlYWQsICp0YWlsOworCWxvbmcgaXNpemUsIG5zaXplOworCWNoYW5vZGVfdCAqYW5jdXI7CisJY2hhbm9kZV90ICpzbmN1cjsKKwlsb25nIHNjdXJyOworfSBjaGFzdG9yZV90OworCit0eXBlZGVmIHN0cnVjdCBzX3hyZWNvcmQgeworCXN0cnVjdCBzX3hyZWNvcmQgKm5leHQ7CisJY2hhciBjb25zdCAqcHRyOworCWxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGhhOworfSB4cmVjb3JkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHNfeGRmaWxlIHsKKwljaGFzdG9yZV90IHJjaGE7CisJbG9uZyBucmVjOworCXVuc2lnbmVkIGludCBoYml0czsKKwl4cmVjb3JkX3QgKipyaGFzaDsKKwlsb25nIGRzdGFydCwgZGVuZDsKKwl4cmVjb3JkX3QgKipyZWNzOworCWNoYXIgKnJjaGc7CisJbG9uZyAqcmluZGV4OworCWxvbmcgbnJlZmY7CisJdW5zaWduZWQgbG9uZyAqaGE7Cit9IHhkZmlsZV90OworCit0eXBlZGVmIHN0cnVjdCBzX3hkZmVudiB7CisJeGRmaWxlX3QgeGRmMSwgeGRmMjsKK30geGRmZW52X3Q7CisKKworCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKFhUWVBFU19IKSAqLwpkaWZmIC0tZ2l0IGEveGRpZmYveHV0aWxzLmMgYi94ZGlmZi94dXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmNiMjNkCi0tLSAvZGV2L251bGwKKysrIGIveGRpZmYveHV0aWxzLmMKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiAgTGliWERpZmYgYnkgRGF2aWRlIExpYmVuemkgKCBGaWxlIERpZmZlcmVudGlhbCBMaWJyYXJ5ICkKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMJRGF2aWRlIExpYmVuemkKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqICBEYXZpZGUgTGliZW56aSA8ZGF2aWRlbEB4bWFpbHNlcnZlci5vcmc+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlICJ4aW5jbHVkZS5oIgorCisKKworCitsb25nIHhkbF9ib2dvc3FydChsb25nIG4pIHsKKwlsb25nIGk7CisKKwkvKgorCSAqIENsYXNzaWNhbCBpbnRlZ2VyIHNxdWFyZSByb290IGFwcHJveGltYXRpb24gdXNpbmcgc2hpZnRzLgorCSAqLworCWZvciAoaSA9IDE7IG4gPiAwOyBuID4+PSAyKQorCQlpIDw8PSAxOworCisJcmV0dXJuIGk7Cit9CisKKworaW50IHhkbF9lbWl0X2RpZmZyZWMoY2hhciBjb25zdCAqcmVjLCBsb25nIHNpemUsIGNoYXIgY29uc3QgKnByZSwgbG9uZyBwc2l6ZSwKKwkJICAgICB4ZGVtaXRjYl90ICplY2IpIHsKKwlpbnQgaSA9IDI7CisJbW1idWZmZXJfdCBtYlszXTsKKworCW1iWzBdLnB0ciA9IChjaGFyICopIHByZTsKKwltYlswXS5zaXplID0gcHNpemU7CisJbWJbMV0ucHRyID0gKGNoYXIgKikgcmVjOworCW1iWzFdLnNpemUgPSBzaXplOworCWlmIChzaXplID4gMCAmJiByZWNbc2l6ZSAtIDFdICE9ICdcbicpIHsKKwkJbWJbMl0ucHRyID0gKGNoYXIgKikgIlxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIjsKKwkJbWJbMl0uc2l6ZSA9IHN0cmxlbihtYlsyXS5wdHIpOworCQlpKys7CisJfQorCWlmIChlY2ItPm91dGYoZWNiLT5wcml2LCBtYiwgaSkgPCAwKSB7CisKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkICp4ZGxfbW1maWxlX2ZpcnN0KG1tZmlsZV90ICptbWYsIGxvbmcgKnNpemUpCit7CisJKnNpemUgPSBtbWYtPnNpemU7CisJcmV0dXJuIG1tZi0+cHRyOworfQorCisKK2xvbmcgeGRsX21tZmlsZV9zaXplKG1tZmlsZV90ICptbWYpCit7CisJcmV0dXJuIG1tZi0+c2l6ZTsKK30KKworCitpbnQgeGRsX2NoYV9pbml0KGNoYXN0b3JlX3QgKmNoYSwgbG9uZyBpc2l6ZSwgbG9uZyBpY291bnQpIHsKKworCWNoYS0+aGVhZCA9IGNoYS0+dGFpbCA9IE5VTEw7CisJY2hhLT5pc2l6ZSA9IGlzaXplOworCWNoYS0+bnNpemUgPSBpY291bnQgKiBpc2l6ZTsKKwljaGEtPmFuY3VyID0gY2hhLT5zbmN1ciA9IE5VTEw7CisJY2hhLT5zY3VyciA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIHhkbF9jaGFfZnJlZShjaGFzdG9yZV90ICpjaGEpIHsKKwljaGFub2RlX3QgKmN1ciwgKnRtcDsKKworCWZvciAoY3VyID0gY2hhLT5oZWFkOyAodG1wID0gY3VyKSAhPSBOVUxMOykgeworCQljdXIgPSBjdXItPm5leHQ7CisJCXhkbF9mcmVlKHRtcCk7CisJfQorfQorCisKK3ZvaWQgKnhkbF9jaGFfYWxsb2MoY2hhc3RvcmVfdCAqY2hhKSB7CisJY2hhbm9kZV90ICphbmN1cjsKKwl2b2lkICpkYXRhOworCisJaWYgKCEoYW5jdXIgPSBjaGEtPmFuY3VyKSB8fCBhbmN1ci0+aWN1cnIgPT0gY2hhLT5uc2l6ZSkgeworCQlpZiAoIShhbmN1ciA9IChjaGFub2RlX3QgKikgeGRsX21hbGxvYyhzaXplb2YoY2hhbm9kZV90KSArIGNoYS0+bnNpemUpKSkgeworCisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlhbmN1ci0+aWN1cnIgPSAwOworCQlhbmN1ci0+bmV4dCA9IE5VTEw7CisJCWlmIChjaGEtPnRhaWwpCisJCQljaGEtPnRhaWwtPm5leHQgPSBhbmN1cjsKKwkJaWYgKCFjaGEtPmhlYWQpCisJCQljaGEtPmhlYWQgPSBhbmN1cjsKKwkJY2hhLT50YWlsID0gYW5jdXI7CisJCWNoYS0+YW5jdXIgPSBhbmN1cjsKKwl9CisKKwlkYXRhID0gKGNoYXIgKikgYW5jdXIgKyBzaXplb2YoY2hhbm9kZV90KSArIGFuY3VyLT5pY3VycjsKKwlhbmN1ci0+aWN1cnIgKz0gY2hhLT5pc2l6ZTsKKworCXJldHVybiBkYXRhOworfQorCitsb25nIHhkbF9ndWVzc19saW5lcyhtbWZpbGVfdCAqbWYsIGxvbmcgc2FtcGxlKSB7CisJbG9uZyBubCA9IDAsIHNpemUsIHRzaXplID0gMDsKKwljaGFyIGNvbnN0ICpkYXRhLCAqY3VyLCAqdG9wOworCisJaWYgKChjdXIgPSBkYXRhID0geGRsX21tZmlsZV9maXJzdChtZiwgJnNpemUpKSAhPSBOVUxMKSB7CisJCWZvciAodG9wID0gZGF0YSArIHNpemU7IG5sIDwgc2FtcGxlICYmIGN1ciA8IHRvcDsgKSB7CisJCQlubCsrOworCQkJaWYgKCEoY3VyID0gbWVtY2hyKGN1ciwgJ1xuJywgdG9wIC0gY3VyKSkpCisJCQkJY3VyID0gdG9wOworCQkJZWxzZQorCQkJCWN1cisrOworCQl9CisJCXRzaXplICs9IChsb25nKSAoY3VyIC0gZGF0YSk7CisJfQorCisJaWYgKG5sICYmIHRzaXplKQorCQlubCA9IHhkbF9tbWZpbGVfc2l6ZShtZikgLyAodHNpemUgLyBubCk7CisKKwlyZXR1cm4gbmwgKyAxOworfQorCitpbnQgeGRsX2JsYW5rbGluZShjb25zdCBjaGFyICpsaW5lLCBsb25nIHNpemUsIGxvbmcgZmxhZ3MpCit7CisJbG9uZyBpOworCisJaWYgKCEoZmxhZ3MgJiBYREZfV0hJVEVTUEFDRV9GTEFHUykpCisJCXJldHVybiAoc2l6ZSA8PSAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplICYmIFhETF9JU1NQQUNFKGxpbmVbaV0pOyBpKyspCisJCTsKKworCXJldHVybiAoaSA9PSBzaXplKTsKK30KKworaW50IHhkbF9yZWNtYXRjaChjb25zdCBjaGFyICpsMSwgbG9uZyBzMSwgY29uc3QgY2hhciAqbDIsIGxvbmcgczIsIGxvbmcgZmxhZ3MpCit7CisJaW50IGkxLCBpMjsKKworCWlmIChzMSA9PSBzMiAmJiAhbWVtY21wKGwxLCBsMiwgczEpKQorCQlyZXR1cm4gMTsKKwlpZiAoIShmbGFncyAmIFhERl9XSElURVNQQUNFX0ZMQUdTKSkKKwkJcmV0dXJuIDA7CisKKwlpMSA9IDA7CisJaTIgPSAwOworCisJLyoKKwkgKiAtdyBtYXRjaGVzIGV2ZXJ5dGhpbmcgdGhhdCBtYXRjaGVzIHdpdGggLWIsIGFuZCAtYiBpbiB0dXJuCisJICogbWF0Y2hlcyBldmVyeXRoaW5nIHRoYXQgbWF0Y2hlcyB3aXRoIC0taWdub3JlLXNwYWNlLWF0LWVvbC4KKwkgKgorCSAqIEVhY2ggZmxhdm9yIG9mIGlnbm9yaW5nIG5lZWRzIGRpZmZlcmVudCBsb2dpYyB0byBza2lwIHdoaXRlc3BhY2VzCisJICogd2hpbGUgd2UgaGF2ZSBib3RoIHNpZGVzIHRvIGNvbXBhcmUuCisJICovCisJaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFKSB7CisJCWdvdG8gc2tpcF93czsKKwkJd2hpbGUgKGkxIDwgczEgJiYgaTIgPCBzMikgeworCQkJaWYgKGwxW2kxKytdICE9IGwyW2kyKytdKQorCQkJCXJldHVybiAwOworCQlza2lwX3dzOgorCQkJd2hpbGUgKGkxIDwgczEgJiYgWERMX0lTU1BBQ0UobDFbaTFdKSkKKwkJCQlpMSsrOworCQkJd2hpbGUgKGkyIDwgczIgJiYgWERMX0lTU1BBQ0UobDJbaTJdKSkKKwkJCQlpMisrOworCQl9CisJfSBlbHNlIGlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRV9DSEFOR0UpIHsKKwkJd2hpbGUgKGkxIDwgczEgJiYgaTIgPCBzMikgeworCQkJaWYgKFhETF9JU1NQQUNFKGwxW2kxXSkgJiYgWERMX0lTU1BBQ0UobDJbaTJdKSkgeworCQkJCS8qIFNraXAgbWF0Y2hpbmcgc3BhY2VzIGFuZCB0cnkgYWdhaW4gKi8KKwkJCQl3aGlsZSAoaTEgPCBzMSAmJiBYRExfSVNTUEFDRShsMVtpMV0pKQorCQkJCQlpMSsrOworCQkJCXdoaWxlIChpMiA8IHMyICYmIFhETF9JU1NQQUNFKGwyW2kyXSkpCisJCQkJCWkyKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobDFbaTErK10gIT0gbDJbaTIrK10pCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTCkgeworCQl3aGlsZSAoaTEgPCBzMSAmJiBpMiA8IHMyICYmIGwxW2kxKytdID09IGwyW2kyKytdKQorCQkJOyAvKiBrZWVwIGdvaW5nICovCisJfQorCisJLyoKKwkgKiBBZnRlciBydW5uaW5nIG91dCBvZiBvbmUgc2lkZSwgdGhlIHJlbWFpbmluZyBzaWRlIG11c3QgaGF2ZQorCSAqIG5vdGhpbmcgYnV0IHdoaXRlc3BhY2UgZm9yIHRoZSBsaW5lcyB0byBtYXRjaC4gIE5vdGUgdGhhdAorCSAqIGlnbm9yZS13aGl0ZXNwYWNlLWF0LWVvbCBjYXNlIG1heSBicmVhayBvdXQgb2YgdGhlIGxvb3AKKwkgKiB3aGlsZSB0aGVyZSBzdGlsbCBhcmUgY2hhcmFjdGVycyByZW1haW5pbmcgb24gYm90aCBsaW5lcy4KKwkgKi8KKwlpZiAoaTEgPCBzMSkgeworCQl3aGlsZSAoaTEgPCBzMSAmJiBYRExfSVNTUEFDRShsMVtpMV0pKQorCQkJaTErKzsKKwkJaWYgKHMxICE9IGkxKQorCQkJcmV0dXJuIDA7CisJfQorCWlmIChpMiA8IHMyKSB7CisJCXdoaWxlIChpMiA8IHMyICYmIFhETF9JU1NQQUNFKGwyW2kyXSkpCisJCQlpMisrOworCQlyZXR1cm4gKHMyID09IGkyKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHhkbF9oYXNoX3JlY29yZF93aXRoX3doaXRlc3BhY2UoY2hhciBjb25zdCAqKmRhdGEsCisJCWNoYXIgY29uc3QgKnRvcCwgbG9uZyBmbGFncykgeworCXVuc2lnbmVkIGxvbmcgaGEgPSA1MzgxOworCWNoYXIgY29uc3QgKnB0ciA9ICpkYXRhOworCisJZm9yICg7IHB0ciA8IHRvcCAmJiAqcHRyICE9ICdcbic7IHB0cisrKSB7CisJCWlmIChYRExfSVNTUEFDRSgqcHRyKSkgeworCQkJY29uc3QgY2hhciAqcHRyMiA9IHB0cjsKKwkJCWludCBhdF9lb2w7CisJCQl3aGlsZSAocHRyICsgMSA8IHRvcCAmJiBYRExfSVNTUEFDRShwdHJbMV0pCisJCQkJCSYmIHB0clsxXSAhPSAnXG4nKQorCQkJCXB0cisrOworCQkJYXRfZW9sID0gKHRvcCA8PSBwdHIgKyAxIHx8IHB0clsxXSA9PSAnXG4nKTsKKwkJCWlmIChmbGFncyAmIFhERl9JR05PUkVfV0hJVEVTUEFDRSkKKwkJCQk7IC8qIGFscmVhZHkgaGFuZGxlZCAqLworCQkJZWxzZSBpZiAoZmxhZ3MgJiBYREZfSUdOT1JFX1dISVRFU1BBQ0VfQ0hBTkdFCisJCQkJICYmICFhdF9lb2wpIHsKKwkJCQloYSArPSAoaGEgPDwgNSk7CisJCQkJaGEgXj0gKHVuc2lnbmVkIGxvbmcpICcgJzsKKwkJCX0KKwkJCWVsc2UgaWYgKGZsYWdzICYgWERGX0lHTk9SRV9XSElURVNQQUNFX0FUX0VPTAorCQkJCSAmJiAhYXRfZW9sKSB7CisJCQkJd2hpbGUgKHB0cjIgIT0gcHRyICsgMSkgeworCQkJCQloYSArPSAoaGEgPDwgNSk7CisJCQkJCWhhIF49ICh1bnNpZ25lZCBsb25nKSAqcHRyMjsKKwkJCQkJcHRyMisrOworCQkJCX0KKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWhhICs9IChoYSA8PCA1KTsKKwkJaGEgXj0gKHVuc2lnbmVkIGxvbmcpICpwdHI7CisJfQorCSpkYXRhID0gcHRyIDwgdG9wID8gcHRyICsgMTogcHRyOworCisJcmV0dXJuIGhhOworfQorCisjaWZkZWYgWERMX0ZBU1RfSEFTSAorCisjZGVmaW5lIFJFUEVBVF9CWVRFKHgpICAoKH4wdWwgLyAweGZmKSAqICh4KSkKKworI2RlZmluZSBPTkVCWVRFUwlSRVBFQVRfQllURSgweDAxKQorI2RlZmluZSBORVdMSU5FQllURVMJUkVQRUFUX0JZVEUoMHgwYSkKKyNkZWZpbmUgSElHSEJJVFMJUkVQRUFUX0JZVEUoMHg4MCkKKworLyogUmV0dXJuIHRoZSBoaWdoIGJpdCBzZXQgaW4gdGhlIGZpcnN0IGJ5dGUgdGhhdCBpcyBhIHplcm8gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBoYXNfemVybyh1bnNpZ25lZCBsb25nIGEpCit7CisJcmV0dXJuICgoYSAtIE9ORUJZVEVTKSAmIH5hKSAmIEhJR0hCSVRTOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgY291bnRfbWFza2VkX2J5dGVzKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKwlpZiAoc2l6ZW9mKGxvbmcpID09IDgpIHsKKwkJLyoKKwkJICogSmFuIEFjaHJlbml1cyBvbiBHKzogbWljcm9vcHRpbWl6ZWQgdmVyc2lvbiBvZgorCQkgKiB0aGUgc2ltcGxlciAiKG1hc2sgJiBPTkVCWVRFUykgKiBPTkVCWVRFUyA+PiA1NiIKKwkJICogdGhhdCB3b3JrcyBmb3IgdGhlIGJ5dGVtYXNrcyB3aXRob3V0IGhhdmluZyB0bworCQkgKiBtYXNrIHRoZW0gZmlyc3QuCisJCSAqLworCQkvKgorCQkgKiByZXR1cm4gbWFzayAqIDB4MDAwMTAyMDMwNDA1MDYwOCA+PiA1NjsKKwkJICoKKwkJICogRG9pbmcgaXQgbGlrZSB0aGlzIGF2b2lkcyB3YXJuaW5ncyBvbiAzMi1iaXQgbWFjaGluZXMuCisJCSAqLworCQlsb25nIGEgPSAoUkVQRUFUX0JZVEUoMHgwMSkgLyAweGZmICsgMSk7CisJCXJldHVybiBtYXNrICogYSA+PiAoc2l6ZW9mKGxvbmcpICogNyk7CisJfSBlbHNlIHsKKwkJLyogQ2FybCBDaGF0ZmllbGQgLyBKYW4gQWNocmVuaXVzIEcrIHZlcnNpb24gZm9yIDMyLWJpdCAqLworCQkvKiAoMDAwMDAwIDAwMDBmZiAwMGZmZmYgZmZmZmZmKSAtPiAoIDEgMSAyIDMgKSAqLworCQlsb25nIGEgPSAoMHgwZmYwMDAxICsgbWFzaykgPj4gMjM7CisJCS8qIEZpeCB0aGUgMSBmb3IgMDAgY2FzZSAqLworCQlyZXR1cm4gYSAmIG1hc2s7CisJfQorfQorCit1bnNpZ25lZCBsb25nIHhkbF9oYXNoX3JlY29yZChjaGFyIGNvbnN0ICoqZGF0YSwgY2hhciBjb25zdCAqdG9wLCBsb25nIGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgaGFzaCA9IDUzODE7CisJdW5zaWduZWQgbG9uZyBhID0gMCwgbWFzayA9IDA7CisJY2hhciBjb25zdCAqcHRyID0gKmRhdGE7CisJY2hhciBjb25zdCAqZW5kID0gdG9wIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICsgMTsKKworCWlmIChmbGFncyAmIFhERl9XSElURVNQQUNFX0ZMQUdTKQorCQlyZXR1cm4geGRsX2hhc2hfcmVjb3JkX3dpdGhfd2hpdGVzcGFjZShkYXRhLCB0b3AsIGZsYWdzKTsKKworCXB0ciAtPSBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJZG8geworCQloYXNoICs9IGhhc2ggPDwgNTsKKwkJaGFzaCBePSBhOworCQlwdHIgKz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOworCQlpZiAocHRyID49IGVuZCkKKwkJCWJyZWFrOworCQlhID0gKih1bnNpZ25lZCBsb25nICopcHRyOworCQkvKiBEbyB3ZSBoYXZlIGFueSAnXG4nIGJ5dGVzIGluIHRoaXMgd29yZD8gKi8KKwkJbWFzayA9IGhhc196ZXJvKGEgXiBORVdMSU5FQllURVMpOworCX0gd2hpbGUgKCFtYXNrKTsKKworCWlmIChwdHIgPj0gZW5kKSB7CisJCS8qCisJCSAqIFRoZXJlIGlzIG9ubHkgYSBwYXJ0aWFsIHdvcmQgbGVmdCBhdCB0aGUgZW5kIG9mIHRoZQorCQkgKiBidWZmZXIuIEJlY2F1c2Ugd2UgbWF5IHdvcmsgd2l0aCBhIG1lbW9yeSBtYXBwaW5nLAorCQkgKiB3ZSBoYXZlIHRvIGdyYWIgdGhlIHJlc3QgYnl0ZSBieSBieXRlIGluc3RlYWQgb2YKKwkJICogYmxpbmRseSByZWFkaW5nIGl0LgorCQkgKgorCQkgKiBUbyBhdm9pZCBwcm9ibGVtcyB3aXRoIG1hc2tpbmcgaW4gYSBzaWduZWQgdmFsdWUsCisJCSAqIHdlIHVzZSBhbiB1bnNpZ25lZCBjaGFyIGhlcmUuCisJCSAqLworCQljb25zdCBjaGFyICpwOworCQlmb3IgKHAgPSB0b3AgLSAxOyBwID49IHB0cjsgcC0tKQorCQkJYSA9IChhIDw8IDgpICsgKigoY29uc3QgdW5zaWduZWQgY2hhciAqKXApOworCQltYXNrID0gaGFzX3plcm8oYSBeIE5FV0xJTkVCWVRFUyk7CisJCWlmICghbWFzaykKKwkJCS8qCisJCQkgKiBObyAnXG4nIGZvdW5kIGluIHRoZSBwYXJ0aWFsIHdvcmQuICBNYWtlIGEKKwkJCSAqIG1hc2sgdGhhdCBtYXRjaGVzIHdoYXQgd2UgcmVhZC4KKwkJCSAqLworCQkJbWFzayA9IDFVTCA8PCAoOCAqICh0b3AgLSBwdHIpICsgNyk7CisJfQorCisJLyogVGhlIG1hc2sgKmJlbG93KiB0aGUgZmlyc3QgaGlnaCBiaXQgc2V0ICovCisJbWFzayA9IChtYXNrIC0gMSkgJiB+bWFzazsKKwltYXNrID4+PSA3OworCWhhc2ggKz0gaGFzaCA8PCA1OworCWhhc2ggXj0gYSAmIG1hc2s7CisKKwkvKiBBZHZhbmNlIHBhc3QgdGhlIGxhc3QgKHBvc3NpYmx5IHBhcnRpYWwpIHdvcmQgKi8KKwlwdHIgKz0gY291bnRfbWFza2VkX2J5dGVzKG1hc2spOworCisJaWYgKHB0ciA8IHRvcCkgeworCQlhc3NlcnQoKnB0ciA9PSAnXG4nKTsKKwkJcHRyKys7CisJfQorCisJKmRhdGEgPSBwdHI7CisKKwlyZXR1cm4gaGFzaDsKK30KKworI2Vsc2UgLyogWERMX0ZBU1RfSEFTSCAqLworCit1bnNpZ25lZCBsb25nIHhkbF9oYXNoX3JlY29yZChjaGFyIGNvbnN0ICoqZGF0YSwgY2hhciBjb25zdCAqdG9wLCBsb25nIGZsYWdzKSB7CisJdW5zaWduZWQgbG9uZyBoYSA9IDUzODE7CisJY2hhciBjb25zdCAqcHRyID0gKmRhdGE7CisKKwlpZiAoZmxhZ3MgJiBYREZfV0hJVEVTUEFDRV9GTEFHUykKKwkJcmV0dXJuIHhkbF9oYXNoX3JlY29yZF93aXRoX3doaXRlc3BhY2UoZGF0YSwgdG9wLCBmbGFncyk7CisKKwlmb3IgKDsgcHRyIDwgdG9wICYmICpwdHIgIT0gJ1xuJzsgcHRyKyspIHsKKwkJaGEgKz0gKGhhIDw8IDUpOworCQloYSBePSAodW5zaWduZWQgbG9uZykgKnB0cjsKKwl9CisJKmRhdGEgPSBwdHIgPCB0b3AgPyBwdHIgKyAxOiBwdHI7CisKKwlyZXR1cm4gaGE7Cit9CisKKyNlbmRpZiAvKiBYRExfRkFTVF9IQVNIICovCisKK3Vuc2lnbmVkIGludCB4ZGxfaGFzaGJpdHModW5zaWduZWQgaW50IHNpemUpIHsKKwl1bnNpZ25lZCBpbnQgdmFsID0gMSwgYml0cyA9IDA7CisKKwlmb3IgKDsgdmFsIDwgc2l6ZSAmJiBiaXRzIDwgQ0hBUl9CSVQgKiBzaXplb2YodW5zaWduZWQgaW50KTsgdmFsIDw8PSAxLCBiaXRzKyspOworCXJldHVybiBiaXRzID8gYml0czogMTsKK30KKworCitpbnQgeGRsX251bV9vdXQoY2hhciAqb3V0LCBsb25nIHZhbCkgeworCWNoYXIgKnB0ciwgKnN0ciA9IG91dDsKKwljaGFyIGJ1ZlszMl07CisKKwlwdHIgPSBidWYgKyBzaXplb2YoYnVmKSAtIDE7CisJKnB0ciA9ICdcMCc7CisJaWYgKHZhbCA8IDApIHsKKwkJKi0tcHRyID0gJy0nOworCQl2YWwgPSAtdmFsOworCX0KKwlmb3IgKDsgdmFsICYmIHB0ciA+IGJ1ZjsgdmFsIC89IDEwKQorCQkqLS1wdHIgPSAiMDEyMzQ1Njc4OSJbdmFsICUgMTBdOworCWlmICgqcHRyKQorCQlmb3IgKDsgKnB0cjsgcHRyKyssIHN0cisrKQorCQkJKnN0ciA9ICpwdHI7CisJZWxzZQorCQkqc3RyKysgPSAnMCc7CisJKnN0ciA9ICdcMCc7CisKKwlyZXR1cm4gc3RyIC0gb3V0OworfQorCitpbnQgeGRsX2VtaXRfaHVua19oZHIobG9uZyBzMSwgbG9uZyBjMSwgbG9uZyBzMiwgbG9uZyBjMiwKKwkJICAgICAgY29uc3QgY2hhciAqZnVuYywgbG9uZyBmdW5jbGVuLCB4ZGVtaXRjYl90ICplY2IpIHsKKwlpbnQgbmIgPSAwOworCW1tYnVmZmVyX3QgbWI7CisJY2hhciBidWZbMTI4XTsKKworCW1lbWNweShidWYsICJAQCAtIiwgNCk7CisJbmIgKz0gNDsKKworCW5iICs9IHhkbF9udW1fb3V0KGJ1ZiArIG5iLCBjMSA/IHMxOiBzMSAtIDEpOworCisJaWYgKGMxICE9IDEpIHsKKwkJbWVtY3B5KGJ1ZiArIG5iLCAiLCIsIDEpOworCQluYiArPSAxOworCisJCW5iICs9IHhkbF9udW1fb3V0KGJ1ZiArIG5iLCBjMSk7CisJfQorCisJbWVtY3B5KGJ1ZiArIG5iLCAiICsiLCAyKTsKKwluYiArPSAyOworCisJbmIgKz0geGRsX251bV9vdXQoYnVmICsgbmIsIGMyID8gczI6IHMyIC0gMSk7CisKKwlpZiAoYzIgIT0gMSkgeworCQltZW1jcHkoYnVmICsgbmIsICIsIiwgMSk7CisJCW5iICs9IDE7CisKKwkJbmIgKz0geGRsX251bV9vdXQoYnVmICsgbmIsIGMyKTsKKwl9CisKKwltZW1jcHkoYnVmICsgbmIsICIgQEAiLCAzKTsKKwluYiArPSAzOworCWlmIChmdW5jICYmIGZ1bmNsZW4pIHsKKwkJYnVmW25iKytdID0gJyAnOworCQlpZiAoZnVuY2xlbiA+IHNpemVvZihidWYpIC0gbmIgLSAxKQorCQkJZnVuY2xlbiA9IHNpemVvZihidWYpIC0gbmIgLSAxOworCQltZW1jcHkoYnVmICsgbmIsIGZ1bmMsIGZ1bmNsZW4pOworCQluYiArPSBmdW5jbGVuOworCX0KKwlidWZbbmIrK10gPSAnXG4nOworCisJbWIucHRyID0gYnVmOworCW1iLnNpemUgPSBuYjsKKwlpZiAoZWNiLT5vdXRmKGVjYi0+cHJpdiwgJm1iLCAxKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitpbnQgeGRsX2ZhbGxfYmFja19kaWZmKHhkZmVudl90ICpkaWZmX2VudiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCWludCBsaW5lMSwgaW50IGNvdW50MSwgaW50IGxpbmUyLCBpbnQgY291bnQyKQoreworCS8qCisJICogVGhpcyBwcm9iYWJseSBkb2VzIG5vdCB3b3JrIG91dHNpZGUgR2l0LCBzaW5jZQorCSAqIHdlIGhhdmUgYSB2ZXJ5IHNpbXBsZSBtbWZpbGUgc3RydWN0dXJlLgorCSAqCisJICogTm90ZTogaWRlYWxseSwgd2Ugd291bGQgcmV1c2UgdGhlIHByZXBhcmVkIGVudmlyb25tZW50LCBidXQKKwkgKiB0aGUgbGlieGRpZmYgaW50ZXJmYWNlIGRvZXMgbm90ICh5ZXQpIGFsbG93IGZvciBkaWZmaW5nIG9ubHkKKwkgKiByYW5nZXMgb2YgbGluZXMgaW5zdGVhZCBvZiB0aGUgd2hvbGUgZmlsZXMuCisJICovCisJbW1maWxlX3Qgc3ViZmlsZTEsIHN1YmZpbGUyOworCXhkZmVudl90IGVudjsKKworCXN1YmZpbGUxLnB0ciA9IChjaGFyICopZGlmZl9lbnYtPnhkZjEucmVjc1tsaW5lMSAtIDFdLT5wdHI7CisJc3ViZmlsZTEuc2l6ZSA9IGRpZmZfZW52LT54ZGYxLnJlY3NbbGluZTEgKyBjb3VudDEgLSAyXS0+cHRyICsKKwkJZGlmZl9lbnYtPnhkZjEucmVjc1tsaW5lMSArIGNvdW50MSAtIDJdLT5zaXplIC0gc3ViZmlsZTEucHRyOworCXN1YmZpbGUyLnB0ciA9IChjaGFyICopZGlmZl9lbnYtPnhkZjIucmVjc1tsaW5lMiAtIDFdLT5wdHI7CisJc3ViZmlsZTIuc2l6ZSA9IGRpZmZfZW52LT54ZGYyLnJlY3NbbGluZTIgKyBjb3VudDIgLSAyXS0+cHRyICsKKwkJZGlmZl9lbnYtPnhkZjIucmVjc1tsaW5lMiArIGNvdW50MiAtIDJdLT5zaXplIC0gc3ViZmlsZTIucHRyOworCWlmICh4ZGxfZG9fZGlmZigmc3ViZmlsZTEsICZzdWJmaWxlMiwgeHBwLCAmZW52KSA8IDApCisJCXJldHVybiAtMTsKKworCW1lbWNweShkaWZmX2Vudi0+eGRmMS5yY2hnICsgbGluZTEgLSAxLCBlbnYueGRmMS5yY2hnLCBjb3VudDEpOworCW1lbWNweShkaWZmX2Vudi0+eGRmMi5yY2hnICsgbGluZTIgLSAxLCBlbnYueGRmMi5yY2hnLCBjb3VudDIpOworCisJeGRsX2ZyZWVfZW52KCZlbnYpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS94ZGlmZi94dXRpbHMuaCBiL3hkaWZmL3h1dGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2NDZjZTUKLS0tIC9kZXYvbnVsbAorKysgYi94ZGlmZi94dXRpbHMuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogIExpYlhEaWZmIGJ5IERhdmlkZSBMaWJlbnppICggRmlsZSBEaWZmZXJlbnRpYWwgTGlicmFyeSApCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBEYXZpZGUgTGliZW56aQorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogIERhdmlkZSBMaWJlbnppIDxkYXZpZGVsQHhtYWlsc2VydmVyLm9yZz4KKyAqCisgKi8KKworI2lmICFkZWZpbmVkKFhVVElMU19IKQorI2RlZmluZSBYVVRJTFNfSAorCisKKworbG9uZyB4ZGxfYm9nb3NxcnQobG9uZyBuKTsKK2ludCB4ZGxfZW1pdF9kaWZmcmVjKGNoYXIgY29uc3QgKnJlYywgbG9uZyBzaXplLCBjaGFyIGNvbnN0ICpwcmUsIGxvbmcgcHNpemUsCisJCSAgICAgeGRlbWl0Y2JfdCAqZWNiKTsKK2ludCB4ZGxfY2hhX2luaXQoY2hhc3RvcmVfdCAqY2hhLCBsb25nIGlzaXplLCBsb25nIGljb3VudCk7Cit2b2lkIHhkbF9jaGFfZnJlZShjaGFzdG9yZV90ICpjaGEpOwordm9pZCAqeGRsX2NoYV9hbGxvYyhjaGFzdG9yZV90ICpjaGEpOworbG9uZyB4ZGxfZ3Vlc3NfbGluZXMobW1maWxlX3QgKm1mLCBsb25nIHNhbXBsZSk7CitpbnQgeGRsX2JsYW5rbGluZShjb25zdCBjaGFyICpsaW5lLCBsb25nIHNpemUsIGxvbmcgZmxhZ3MpOworaW50IHhkbF9yZWNtYXRjaChjb25zdCBjaGFyICpsMSwgbG9uZyBzMSwgY29uc3QgY2hhciAqbDIsIGxvbmcgczIsIGxvbmcgZmxhZ3MpOwordW5zaWduZWQgbG9uZyB4ZGxfaGFzaF9yZWNvcmQoY2hhciBjb25zdCAqKmRhdGEsIGNoYXIgY29uc3QgKnRvcCwgbG9uZyBmbGFncyk7Cit1bnNpZ25lZCBpbnQgeGRsX2hhc2hiaXRzKHVuc2lnbmVkIGludCBzaXplKTsKK2ludCB4ZGxfbnVtX291dChjaGFyICpvdXQsIGxvbmcgdmFsKTsKK2ludCB4ZGxfZW1pdF9odW5rX2hkcihsb25nIHMxLCBsb25nIGMxLCBsb25nIHMyLCBsb25nIGMyLAorCQkgICAgICBjb25zdCBjaGFyICpmdW5jLCBsb25nIGZ1bmNsZW4sIHhkZW1pdGNiX3QgKmVjYik7CitpbnQgeGRsX2ZhbGxfYmFja19kaWZmKHhkZmVudl90ICpkaWZmX2VudiwgeHBwYXJhbV90IGNvbnN0ICp4cHAsCisJCSAgICAgICBpbnQgbGluZTEsIGludCBjb3VudDEsIGludCBsaW5lMiwgaW50IGNvdW50Mik7CisKKworCisjZW5kaWYgLyogI2lmICFkZWZpbmVkKFhVVElMU19IKSAqLwpkaWZmIC0tZ2l0IGEvemxpYi5jIGIvemxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMjNmMWEKLS0tIC9kZXYvbnVsbAorKysgYi96bGliLmMKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiB6bGliIHdyYXBwZXJzIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBzaWxlbnRseSBtaXNzIGVycm9ycworICogYXQgaW5pdCB0aW1lLgorICovCisjaW5jbHVkZSAiY2FjaGUuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgKnplcnJfdG9fc3RyaW5nKGludCBzdGF0dXMpCit7CisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIFpfTUVNX0VSUk9SOgorCQlyZXR1cm4gIm91dCBvZiBtZW1vcnkiOworCWNhc2UgWl9WRVJTSU9OX0VSUk9SOgorCQlyZXR1cm4gIndyb25nIHZlcnNpb24iOworCWNhc2UgWl9ORUVEX0RJQ1Q6CisJCXJldHVybiAibmVlZHMgZGljdGlvbmFyeSI7CisJY2FzZSBaX0RBVEFfRVJST1I6CisJCXJldHVybiAiZGF0YSBzdHJlYW0gZXJyb3IiOworCWNhc2UgWl9TVFJFQU1fRVJST1I6CisJCXJldHVybiAic3RyZWFtIGNvbnNpc3RlbmN5IGVycm9yIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gInVua25vd24gZXJyb3IiOworCX0KK30KKworLyoKKyAqIGF2YWlsX2luIGFuZCBhdmFpbF9vdXQgaW4gemxpYiBhcmUgY291bnRlZCBpbiB1SW50LCB3aGljaCB0eXBpY2FsbHkKKyAqIGxpbWl0cyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHdlIGNhbiB1c2UgdG8gNEdCIHdoZW4gaW50ZXJhY3RpbmcKKyAqIHdpdGggemxpYiBpbiBhIHNpbmdsZSBjYWxsIHRvIGluZmxhdGUvZGVmbGF0ZS4KKyAqLworLyogI2RlZmluZSBaTElCX0JVRl9NQVggKCh1SW50KS0xKSAqLworI2RlZmluZSBaTElCX0JVRl9NQVggKCh1SW50KSAxMDI0ICogMTAyNCAqIDEwMjQpIC8qIDFHQiAqLworc3RhdGljIGlubGluZSB1SW50IHpsaWJfYnVmX2NhcCh1bnNpZ25lZCBsb25nIGxlbikKK3sKKwlyZXR1cm4gKFpMSUJfQlVGX01BWCA8IGxlbikgPyBaTElCX0JVRl9NQVggOiBsZW47Cit9CisKK3N0YXRpYyB2b2lkIHpsaWJfcHJlX2NhbGwoZ2l0X3pzdHJlYW0gKnMpCit7CisJcy0+ei5uZXh0X2luID0gcy0+bmV4dF9pbjsKKwlzLT56Lm5leHRfb3V0ID0gcy0+bmV4dF9vdXQ7CisJcy0+ei50b3RhbF9pbiA9IHMtPnRvdGFsX2luOworCXMtPnoudG90YWxfb3V0ID0gcy0+dG90YWxfb3V0OworCXMtPnouYXZhaWxfaW4gPSB6bGliX2J1Zl9jYXAocy0+YXZhaWxfaW4pOworCXMtPnouYXZhaWxfb3V0ID0gemxpYl9idWZfY2FwKHMtPmF2YWlsX291dCk7Cit9CisKK3N0YXRpYyB2b2lkIHpsaWJfcG9zdF9jYWxsKGdpdF96c3RyZWFtICpzKQoreworCXVuc2lnbmVkIGxvbmcgYnl0ZXNfY29uc3VtZWQ7CisJdW5zaWduZWQgbG9uZyBieXRlc19wcm9kdWNlZDsKKworCWJ5dGVzX2NvbnN1bWVkID0gcy0+ei5uZXh0X2luIC0gcy0+bmV4dF9pbjsKKwlieXRlc19wcm9kdWNlZCA9IHMtPnoubmV4dF9vdXQgLSBzLT5uZXh0X291dDsKKwlpZiAocy0+ei50b3RhbF9vdXQgIT0gcy0+dG90YWxfb3V0ICsgYnl0ZXNfcHJvZHVjZWQpCisJCWRpZSgiQlVHOiB0b3RhbF9vdXQgbWlzbWF0Y2giKTsKKwlpZiAocy0+ei50b3RhbF9pbiAhPSBzLT50b3RhbF9pbiArIGJ5dGVzX2NvbnN1bWVkKQorCQlkaWUoIkJVRzogdG90YWxfaW4gbWlzbWF0Y2giKTsKKworCXMtPnRvdGFsX291dCA9IHMtPnoudG90YWxfb3V0OworCXMtPnRvdGFsX2luID0gcy0+ei50b3RhbF9pbjsKKwlzLT5uZXh0X2luID0gcy0+ei5uZXh0X2luOworCXMtPm5leHRfb3V0ID0gcy0+ei5uZXh0X291dDsKKwlzLT5hdmFpbF9pbiAtPSBieXRlc19jb25zdW1lZDsKKwlzLT5hdmFpbF9vdXQgLT0gYnl0ZXNfcHJvZHVjZWQ7Cit9CisKK3ZvaWQgZ2l0X2luZmxhdGVfaW5pdChnaXRfenN0cmVhbSAqc3RybSkKK3sKKwlpbnQgc3RhdHVzOworCisJemxpYl9wcmVfY2FsbChzdHJtKTsKKwlzdGF0dXMgPSBpbmZsYXRlSW5pdCgmc3RybS0+eik7CisJemxpYl9wb3N0X2NhbGwoc3RybSk7CisJaWYgKHN0YXR1cyA9PSBaX09LKQorCQlyZXR1cm47CisJZGllKCJpbmZsYXRlSW5pdDogJXMgKCVzKSIsIHplcnJfdG9fc3RyaW5nKHN0YXR1cyksCisJICAgIHN0cm0tPnoubXNnID8gc3RybS0+ei5tc2cgOiAibm8gbWVzc2FnZSIpOworfQorCit2b2lkIGdpdF9pbmZsYXRlX2luaXRfZ3ppcF9vbmx5KGdpdF96c3RyZWFtICpzdHJtKQoreworCS8qCisJICogVXNlIGRlZmF1bHQgMTUgYml0cywgKzE2IGlzIHRvIGFjY2VwdCBvbmx5IGd6aXAgYW5kIHRvCisJICogeWllbGQgWl9EQVRBX0VSUk9SIHdoZW4gZmVkIHpsaWIgZm9ybWF0LgorCSAqLworCWNvbnN0IGludCB3aW5kb3dCaXRzID0gMTUgKyAxNjsKKwlpbnQgc3RhdHVzOworCisJemxpYl9wcmVfY2FsbChzdHJtKTsKKwlzdGF0dXMgPSBpbmZsYXRlSW5pdDIoJnN0cm0tPnosIHdpbmRvd0JpdHMpOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWRpZSgiaW5mbGF0ZUluaXQyOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7Cit9CisKK3ZvaWQgZ2l0X2luZmxhdGVfZW5kKGdpdF96c3RyZWFtICpzdHJtKQoreworCWludCBzdGF0dXM7CisKKwl6bGliX3ByZV9jYWxsKHN0cm0pOworCXN0YXR1cyA9IGluZmxhdGVFbmQoJnN0cm0tPnopOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWVycm9yKCJpbmZsYXRlRW5kOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgICBzdHJtLT56Lm1zZyA/IHN0cm0tPnoubXNnIDogIm5vIG1lc3NhZ2UiKTsKK30KKworaW50IGdpdF9pbmZsYXRlKGdpdF96c3RyZWFtICpzdHJtLCBpbnQgZmx1c2gpCit7CisJaW50IHN0YXR1czsKKworCWZvciAoOzspIHsKKwkJemxpYl9wcmVfY2FsbChzdHJtKTsKKwkJLyogTmV2ZXIgc2F5IFpfRklOSVNIIHVubGVzcyB3ZSBhcmUgZmVlZGluZyBldmVyeXRoaW5nICovCisJCXN0YXR1cyA9IGluZmxhdGUoJnN0cm0tPnosCisJCQkJIChzdHJtLT56LmF2YWlsX2luICE9IHN0cm0tPmF2YWlsX2luKQorCQkJCSA/IDAgOiBmbHVzaCk7CisJCWlmIChzdGF0dXMgPT0gWl9NRU1fRVJST1IpCisJCQlkaWUoImluZmxhdGU6IG91dCBvZiBtZW1vcnkiKTsKKwkJemxpYl9wb3N0X2NhbGwoc3RybSk7CisKKwkJLyoKKwkJICogTGV0IHpsaWIgd29yayBhbm90aGVyIHJvdW5kLCB3aGlsZSB3ZSBjYW4gc3RpbGwKKwkJICogbWFrZSBwcm9ncmVzcy4KKwkJICovCisJCWlmICgoc3RybS0+YXZhaWxfb3V0ICYmICFzdHJtLT56LmF2YWlsX291dCkgJiYKKwkJICAgIChzdGF0dXMgPT0gWl9PSyB8fCBzdGF0dXMgPT0gWl9CVUZfRVJST1IpKQorCQkJY29udGludWU7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoc3RhdHVzKSB7CisJLyogWl9CVUZfRVJST1I6IG5vcm1hbCwgbmVlZHMgbW9yZSBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciAqLworCWNhc2UgWl9CVUZfRVJST1I6CisJY2FzZSBaX09LOgorCWNhc2UgWl9TVFJFQU1fRU5EOgorCQlyZXR1cm4gc3RhdHVzOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwllcnJvcigiaW5mbGF0ZTogJXMgKCVzKSIsIHplcnJfdG9fc3RyaW5nKHN0YXR1cyksCisJICAgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7CisJcmV0dXJuIHN0YXR1czsKK30KKworI2lmIGRlZmluZWQoTk9fREVGTEFURV9CT1VORCkgfHwgWkxJQl9WRVJOVU0gPCAweDEyMDAKKyNkZWZpbmUgZGVmbGF0ZUJvdW5kKGMscykgICgocykgKyAoKChzKSArIDcpID4+IDMpICsgKCgocykgKyA2MykgPj4gNikgKyAxMSkKKyNlbmRpZgorCit1bnNpZ25lZCBsb25nIGdpdF9kZWZsYXRlX2JvdW5kKGdpdF96c3RyZWFtICpzdHJtLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJcmV0dXJuIGRlZmxhdGVCb3VuZCgmc3RybS0+eiwgc2l6ZSk7Cit9CisKK3ZvaWQgZ2l0X2RlZmxhdGVfaW5pdChnaXRfenN0cmVhbSAqc3RybSwgaW50IGxldmVsKQoreworCWludCBzdGF0dXM7CisKKwltZW1zZXQoc3RybSwgMCwgc2l6ZW9mKCpzdHJtKSk7CisJemxpYl9wcmVfY2FsbChzdHJtKTsKKwlzdGF0dXMgPSBkZWZsYXRlSW5pdCgmc3RybS0+eiwgbGV2ZWwpOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWRpZSgiZGVmbGF0ZUluaXQ6ICVzICglcykiLCB6ZXJyX3RvX3N0cmluZyhzdGF0dXMpLAorCSAgICBzdHJtLT56Lm1zZyA/IHN0cm0tPnoubXNnIDogIm5vIG1lc3NhZ2UiKTsKK30KKworc3RhdGljIHZvaWQgZG9fZ2l0X2RlZmxhdGVfaW5pdChnaXRfenN0cmVhbSAqc3RybSwgaW50IGxldmVsLCBpbnQgd2luZG93Qml0cykKK3sKKwlpbnQgc3RhdHVzOworCisJbWVtc2V0KHN0cm0sIDAsIHNpemVvZigqc3RybSkpOworCXpsaWJfcHJlX2NhbGwoc3RybSk7CisJc3RhdHVzID0gZGVmbGF0ZUluaXQyKCZzdHJtLT56LCBsZXZlbCwKKwkJCQkgIFpfREVGTEFURUQsIHdpbmRvd0JpdHMsCisJCQkJICA4LCBaX0RFRkFVTFRfU1RSQVRFR1kpOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWRpZSgiZGVmbGF0ZUluaXQyOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgc3RybS0+ei5tc2cgPyBzdHJtLT56Lm1zZyA6ICJubyBtZXNzYWdlIik7Cit9CisKK3ZvaWQgZ2l0X2RlZmxhdGVfaW5pdF9nemlwKGdpdF96c3RyZWFtICpzdHJtLCBpbnQgbGV2ZWwpCit7CisJLyoKKwkgKiBVc2UgZGVmYXVsdCAxNSBiaXRzLCArMTYgaXMgdG8gZ2VuZXJhdGUgZ3ppcCBoZWFkZXIvdHJhaWxlcgorCSAqIGluc3RlYWQgb2YgdGhlIHpsaWIgd3JhcHBlci4KKwkgKi8KKwlkb19naXRfZGVmbGF0ZV9pbml0KHN0cm0sIGxldmVsLCAxNSArIDE2KTsKK30KKwordm9pZCBnaXRfZGVmbGF0ZV9pbml0X3JhdyhnaXRfenN0cmVhbSAqc3RybSwgaW50IGxldmVsKQoreworCS8qCisJICogVXNlIGRlZmF1bHQgMTUgYml0cywgbmVnYXRlIHRoZSB2YWx1ZSB0byBnZXQgcmF3IGNvbXByZXNzZWQKKwkgKiBkYXRhIHdpdGhvdXQgemxpYiBoZWFkZXIgYW5kIHRyYWlsZXIuCisJICovCisJZG9fZ2l0X2RlZmxhdGVfaW5pdChzdHJtLCBsZXZlbCwgLTE1KTsKK30KKworaW50IGdpdF9kZWZsYXRlX2Fib3J0KGdpdF96c3RyZWFtICpzdHJtKQoreworCWludCBzdGF0dXM7CisKKwl6bGliX3ByZV9jYWxsKHN0cm0pOworCXN0YXR1cyA9IGRlZmxhdGVFbmQoJnN0cm0tPnopOworCXpsaWJfcG9zdF9jYWxsKHN0cm0pOworCXJldHVybiBzdGF0dXM7Cit9CisKK3ZvaWQgZ2l0X2RlZmxhdGVfZW5kKGdpdF96c3RyZWFtICpzdHJtKQoreworCWludCBzdGF0dXMgPSBnaXRfZGVmbGF0ZV9hYm9ydChzdHJtKTsKKworCWlmIChzdGF0dXMgPT0gWl9PSykKKwkJcmV0dXJuOworCWVycm9yKCJkZWZsYXRlRW5kOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgICBzdHJtLT56Lm1zZyA/IHN0cm0tPnoubXNnIDogIm5vIG1lc3NhZ2UiKTsKK30KKworaW50IGdpdF9kZWZsYXRlX2VuZF9nZW50bHkoZ2l0X3pzdHJlYW0gKnN0cm0pCit7CisJaW50IHN0YXR1czsKKworCXpsaWJfcHJlX2NhbGwoc3RybSk7CisJc3RhdHVzID0gZGVmbGF0ZUVuZCgmc3RybS0+eik7CisJemxpYl9wb3N0X2NhbGwoc3RybSk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IGdpdF9kZWZsYXRlKGdpdF96c3RyZWFtICpzdHJtLCBpbnQgZmx1c2gpCit7CisJaW50IHN0YXR1czsKKworCWZvciAoOzspIHsKKwkJemxpYl9wcmVfY2FsbChzdHJtKTsKKworCQkvKiBOZXZlciBzYXkgWl9GSU5JU0ggdW5sZXNzIHdlIGFyZSBmZWVkaW5nIGV2ZXJ5dGhpbmcgKi8KKwkJc3RhdHVzID0gZGVmbGF0ZSgmc3RybS0+eiwKKwkJCQkgKHN0cm0tPnouYXZhaWxfaW4gIT0gc3RybS0+YXZhaWxfaW4pCisJCQkJID8gMCA6IGZsdXNoKTsKKwkJaWYgKHN0YXR1cyA9PSBaX01FTV9FUlJPUikKKwkJCWRpZSgiZGVmbGF0ZTogb3V0IG9mIG1lbW9yeSIpOworCQl6bGliX3Bvc3RfY2FsbChzdHJtKTsKKworCQkvKgorCQkgKiBMZXQgemxpYiB3b3JrIGFub3RoZXIgcm91bmQsIHdoaWxlIHdlIGNhbiBzdGlsbAorCQkgKiBtYWtlIHByb2dyZXNzLgorCQkgKi8KKwkJaWYgKChzdHJtLT5hdmFpbF9vdXQgJiYgIXN0cm0tPnouYXZhaWxfb3V0KSAmJgorCQkgICAgKHN0YXR1cyA9PSBaX09LIHx8IHN0YXR1cyA9PSBaX0JVRl9FUlJPUikpCisJCQljb250aW51ZTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChzdGF0dXMpIHsKKwkvKiBaX0JVRl9FUlJPUjogbm9ybWFsLCBuZWVkcyBtb3JlIHNwYWNlIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCisJY2FzZSBaX0JVRl9FUlJPUjoKKwljYXNlIFpfT0s6CisJY2FzZSBaX1NUUkVBTV9FTkQ6CisJCXJldHVybiBzdGF0dXM7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWVycm9yKCJkZWZsYXRlOiAlcyAoJXMpIiwgemVycl90b19zdHJpbmcoc3RhdHVzKSwKKwkgICAgICBzdHJtLT56Lm1zZyA/IHN0cm0tPnoubXNnIDogIm5vIG1lc3NhZ2UiKTsKKwlyZXR1cm4gc3RhdHVzOworfQo=